ZGlmZiAtLWdpdCBhL21ldGEvQ09QWUlORy5HUEx2MiBiL21ldGEvQ09QWUlORy5HUEx2MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9DT1BZSU5HLkdQTHYyCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvQ09QWUlORy5NSVQgYi9tZXRhL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTUwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlYTdjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MKQEAgLTAsMCArMSw0MyBAQAorIworIyBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCByZWNpcGVzL2RhdGEgZmlsZXMgKHVzYWxseSBzY3JpcHRzKQorIworCisjIEV4cGFuZCBTVEFHSU5HX0RJUl9IT1NUIHNpbmNlIGZvciBjcm9zcy1jYW5hZGlhbi9uYXRpdmUvbmF0aXZlc2RrLCB0aGlzIHdpbGwKKyMgcG9pbnQgZWxzZXdoZXJlIGFmdGVyIHRoZXNlIGNoYW5nZXMuCitTVEFHSU5HX0RJUl9IT1NUIDo9ICIke1NUQUdJTkdfRElSX0hPU1R9IgorCitQQUNLQUdFX0FSQ0ggPSAiYWxsIgorCitweXRob24gKCkgeworICAgICMgQWxsb3cgdGhpcyBjbGFzcyB0byBiZSBpbmNsdWRlZCBidXQgb3ZlcnJpZGRlbiAtIG9ubHkgc2V0CisgICAgIyB0aGUgdmFsdWVzIGlmIHdlJ3JlIHN0aWxsICJhbGwiIHBhY2thZ2UgYXJjaC4KKyAgICBpZiBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgVHJ1ZSkgPT0gImFsbCI6CisgICAgICAgICMgTm8gbmVlZCBmb3IgdmlydHVhbC9saWJjIG9yIGEgY3Jvc3MgY29tcGlsZXIKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfREVGQVVMVF9ERVBTIiwiMSIpCisKKyAgICAgICAgIyBTZXQgdGhlc2UgdG8gYSBjb21tb24gc2V0IG9mIHZhbHVlcywgd2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZW0gb3RoZXIgdGhhdCBmb3IgV09SS0RJUiBkaXJlY3RvcnkKKyAgICAgICAgIyBuYW1pbmcgYW55d2F5CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfQVJDSCIsICJhbGxhcmNoIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9PUyIsICJsaW51eCIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfQ0NfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9MRF9BUkNIIiwgIm5vbmUiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0FTX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfRlBVIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfUFJFRklYIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFX0VYVFJBX0FSQ0hTIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJTREtfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlNES19DQ19BUkNIIiwgIm5vbmUiKQorCisgICAgICAgICMgQXZvaWQgdGhpcyBiZWluZyB1bm5lY2Vzc2FyaWx5IGRpZmZlcmVudCBkdWUgdG8gbnVhbmNlcyBvZgorICAgICAgICAjIHRoZSB0YXJnZXQgbWFjaGluZSB0aGF0IGFyZW4ndCBpbXBvcnRhbnQgZm9yICJhbGwiIGFyY2gKKyAgICAgICAgIyBwYWNrYWdlcy4KKyAgICAgICAgZC5zZXRWYXIoIkxERkxBR1MiLCAiIikKKworICAgICAgICAjIE5vIG5lZWQgdG8gZG8gc2hhcmVkIGxpYnJhcnkgcHJvY2Vzc2luZyBvciBkZWJ1ZyBzeW1ib2wgaGFuZGxpbmcKKyAgICAgICAgZC5zZXRWYXIoIkVYQ0xVREVfRlJPTV9TSExJQlMiLCAiMSIpCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQiLCAiMSIpCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1BBQ0tBR0VfU1RSSVAiLCAiMSIpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICBiYi5lcnJvcigiUGxlYXNlIGVuc3VyZSByZWNpcGUgJXMgc2V0cyBQQUNLQUdFX0FSQ0ggYmVmb3JlIGluaGVyaXQgcGFja2FnZWdyb3VwIiAlIGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSkpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2FyY2hpdmVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5ZDcwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzCkBAIC0wLDAgKzEsMzg1IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIGJiY2xhc3MgaXMgdXNlZCBmb3IgY3JlYXRpbmcgYXJjaGl2ZSBmb3I6CisjIDEpIG9yaWdpbmFsIChvciB1bnBhY2tlZCkgc291cmNlOiBBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiCisjIDIpIHBhdGNoZWQgc291cmNlOiBBUkNISVZFUl9NT0RFW3NyY10gPSAicGF0Y2hlZCIgKGRlZmF1bHQpCisjIDMpIGNvbmZpZ3VyZWQgc291cmNlOiBBUkNISVZFUl9NT0RFW3NyY10gPSAiY29uZmlndXJlZCIKKyMgNCkgVGhlIHBhdGNoZXMgYmV0d2VlbiBkb191bnBhY2sgYW5kIGRvX3BhdGNoOgorIyAgICBBUkNISVZFUl9NT0RFW2RpZmZdID0gIjEiCisjICAgIEFuZCB5b3UgY2FuIHNldCB0aGUgb25lIHRoYXQgeW91J2QgbGlrZSB0byBleGNsdWRlIGZyb20gdGhlIGRpZmY6CisjICAgIEFSQ0hJVkVSX01PREVbZGlmZi1leGNsdWRlXSA/PSAiLnBjIGF1dG9tNHRlLmNhY2hlIHBhdGNoZXMiCisjIDUpIFRoZSBlbnZpcm9ubWVudCBkYXRhLCBzaW1pbGFyIHRvICdiaXRiYWtlIC1lIHJlY2lwZSc6CisjICAgIEFSQ0hJVkVSX01PREVbZHVtcGRhdGFdID0gIjEiCisjIDYpIFRoZSByZWNpcGUgKC5iYiBhbmQgLmluYyk6IEFSQ0hJVkVSX01PREVbcmVjaXBlXSA9ICIxIgorIyA3KSBXaGV0aGVyIG91dHB1dCB0aGUgLnNyYy5ycG0gcGFja2FnZToKKyMgICAgQVJDSElWRVJfTU9ERVtzcnBtXSA9ICIxIgorIyA4KSBGaWx0ZXIgdGhlIGxpY2Vuc2UsIHRoZSByZWNpcGUgd2hvc2UgbGljZW5zZSBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgd2lsbCBiZSBpbmNsdWRlZCwgYW5kIGluCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSB3aWxsIGJlIGV4Y2x1ZGVkLgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgPSAnR1BMKiBMR1BMKicKKyMgICAgQ09QWUxFRlRfTElDRU5TRV9FWENMVURFID0gJ0NMT1NFRCBQcm9wcmlldGFyeScKKyMgOSkgVGhlIHJlY2lwZSB0eXBlIHRoYXQgd2lsbCBiZSBhcmNoaXZlZDoKKyMgICAgQ09QWUxFRlRfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCcKKyMKKworIyBEb24ndCBmaWx0ZXIgdGhlIGxpY2Vuc2UgYnkgZGVmYXVsdAorQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID89ICcnCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPz0gJycKKyMgQ3JlYXRlIGFyY2hpdmUgZm9yIGFsbCB0aGUgcmVjaXBlIHR5cGVzCitDT1BZTEVGVF9SRUNJUEVfVFlQRVMgPz0gJ3RhcmdldCBuYXRpdmUgbmF0aXZlc2RrIGNyb3NzIGNyb3Nzc2RrIGNyb3NzLWNhbmFkaWFuJworaW5oZXJpdCBjb3B5bGVmdF9maWx0ZXIKKworQVJDSElWRVJfTU9ERVtzcnBtXSA/PSAiMCIKK0FSQ0hJVkVSX01PREVbc3JjXSA/PSAicGF0Y2hlZCIKK0FSQ0hJVkVSX01PREVbZGlmZl0gPz0gIjAiCitBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorQVJDSElWRVJfTU9ERVtkdW1wZGF0YV0gPz0gIjAiCitBUkNISVZFUl9NT0RFW3JlY2lwZV0gPz0gIjAiCisKK0RFUExPWV9ESVJfU1JDID89ICIke0RFUExPWV9ESVJ9L3NvdXJjZXMiCitBUkNISVZFUl9UT1BESVIgPz0gIiR7V09SS0RJUn0vZGVwbG95LXNvdXJjZXMiCitBUkNISVZFUl9PVVRESVIgPSAiJHtBUkNISVZFUl9UT1BESVJ9LyR7VEFSR0VUX1NZU30vJHtQRn0vIgorQVJDSElWRVJfV09SS0RJUiA9ICIke1dPUktESVJ9L2FyY2hpdmVyLXdvcmsvIgorCitkb19kdW1wZGF0YVtkaXJzXSA9ICIke0FSQ0hJVkVSX09VVERJUn0iCitkb19hcl9yZWNpcGVbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9IgorZG9fYXJfb3JpZ2luYWxbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9ICR7QVJDSElWRVJfV09SS0RJUn0iCitkb19kZXBsb3lfYXJjaGl2ZXNbZGlyc10gPSAiJHtXT1JLRElSfSIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbZGlyc10gPSAiJHtXT1JLRElSfSIKKworIyBUaGlzIGlzIGEgY29udmVuaWVuY2UgZm9yIHRoZSBzaGVsbCBzY3JpcHQgdG8gdXNlIGl0CisKKworcHl0aG9uICgpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBpbmNsdWRlZCwgcmVhc29uID0gY29weWxlZnRfc2hvdWxkX2luY2x1ZGUoZCkKKyAgICBpZiBub3QgaW5jbHVkZWQ6CisgICAgICAgIGJiLmRlYnVnKDEsICdhcmNoaXZlcjogJXMgaXMgZXhjbHVkZWQ6ICVzJyAlIChwbiwgcmVhc29uKSkKKyAgICAgICAgcmV0dXJuCisgICAgZWxzZToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FyY2hpdmVyOiAlcyBpcyBpbmNsdWRlZDogJXMnICUgKHBuLCByZWFzb24pKQorCisgICAgYXJfc3JjID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpCisgICAgYXJfZHVtcGRhdGEgPSBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZHVtcGRhdGEnLCBUcnVlKQorICAgIGFyX3JlY2lwZSA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdyZWNpcGUnLCBUcnVlKQorCisgICAgaWYgYXJfc3JjID09ICJvcmlnaW5hbCI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX29yaWdpbmFsJyAlIHBuKQorICAgIGVsaWYgYXJfc3JjID09ICJwYXRjaGVkIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXBsb3lfYXJjaGl2ZXMnLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfcGF0Y2hlZCcgJSBwbikKKyAgICBlbGlmIGFyX3NyYyA9PSAiY29uZmlndXJlZCI6CisgICAgICAgICMgV2UgY2FuJ3QgdXNlICJhZGR0YXNrIGRvX2FyX2NvbmZpZ3VyZWQgYWZ0ZXIgZG9fY29uZmlndXJlIiBzaW5jZSBpdAorICAgICAgICAjIHdpbGwgY2F1c2UgdGhlIGRlcHRhc2sgb2YgZG9fcG9wdWxhdGVfc3lzcm9vdCB0byBydW4gbm90IG1hdHRlciB3aGF0CisgICAgICAgICMgYXJjaGl2ZXMgd2UgbmVlZCwgc28gd2UgYWRkIHRoZSBkZXBlbmRzIGhlcmUuCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYXJfY29uZmlndXJlZCcsICdkZXBlbmRzJywgJyAlczpkb19jb25maWd1cmUnICUgcG4pCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX2NvbmZpZ3VyZWQnICUgcG4pCisgICAgZWxpZiBhcl9zcmM6CisgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIEFSQ0hJVkVSX01PREVbc3JjXTogJXMiICUgYXJfc3JjKQorCisgICAgaWYgYXJfZHVtcGRhdGEgPT0gIjEiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19kdW1wZGF0YScgJSBwbikKKworICAgIGlmIGFyX3JlY2lwZSA9PSAiMSI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3JlY2lwZScgJSBwbikKKworICAgICMgT3V0cHV0IHRoZSBzcnBtIHBhY2thZ2UKKyAgICBhcl9zcnBtID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKQorICAgIGlmIGFyX3NycG0gPT0gIjEiOgorICAgICAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJyBhbmQgZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKSA9PSAncnBtJzoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX3BhY2thZ2Vfd3JpdGVfcnBtJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfZHVtcGRhdGEgPT0gIjEiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fZHVtcGRhdGEnICUgcG4pCisgICAgICAgICAgICBpZiBhcl9yZWNpcGUgPT0gIjEiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfcmVjaXBlJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfc3JjID09ICJvcmlnaW5hbCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9vcmlnaW5hbCcgJSBwbikKKyAgICAgICAgICAgIGVsaWYgYXJfc3JjID09ICJwYXRjaGVkIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3BhdGNoZWQnICUgcG4pCisgICAgICAgICAgICBlbGlmIGFyX3NyYyA9PSAiY29uZmlndXJlZCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9jb25maWd1cmVkJyAlIHBuKQorCisgICAgIyBUaGUgZ2NjIHN0YWZmIHVzZXMgc2hhcmVkIHNvdXJjZQorICAgIGZsYWcgPSBkLmdldFZhckZsYWcoImRvX3VucGFjayIsICJzdGFtcC1iYXNlIiwgVHJ1ZSkKKyAgICBpZiBmbGFnOgorICAgICAgICBpZiBhcl9zcmMgaW4gWyAnb3JpZ2luYWwnLCAncGF0Y2hlZCcgXToKKyAgICAgICAgICAgIGFyX291dGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignQVJDSElWRVJfVE9QRElSJywgVHJ1ZSksICd3b3JrLXNoYXJlZCcpCisgICAgICAgICAgICBkLnNldFZhcignQVJDSElWRVJfT1VURElSJywgYXJfb3V0ZGlyKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX29yaWdpbmFsJywgJ3N0YW1wLWJhc2UnLCBmbGFnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX3BhdGNoZWQnLCAnc3RhbXAtYmFzZScsIGZsYWcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICdzdGFtcC1iYXNlJywgZmxhZykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICd2YXJkZXBzZXhjbHVkZScsICdQTiBQRiBBUkNISVZFUl9PVVRESVIgV09SS0RJUicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICd2YXJkZXBzZXhjbHVkZScsICdQTiBQRiBBUkNISVZFUl9PVVRESVIgV09SS0RJUicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfcGF0Y2hlZCcsICd2YXJkZXBzZXhjbHVkZScsICdQTiBQRiBBUkNISVZFUl9PVVRESVIgV09SS0RJUicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnY3JlYXRlX2RpZmZfZ3onLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUEYnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2NyZWF0ZV90YXJiYWxsJywgJ3ZhcmRlcHNleGNsdWRlJywgJ1BGJykKKworICAgICAgICBmbGFnX2NsZWFuID0gZC5nZXRWYXJGbGFnKCdkb191bnBhY2snLCAnc3RhbXAtYmFzZS1jbGVhbicsIFRydWUpCisgICAgICAgIGlmIGZsYWdfY2xlYW46CisgICAgICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX29yaWdpbmFsJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBmbGFnX2NsZWFuKQorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9wYXRjaGVkJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBmbGFnX2NsZWFuKQorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb191bnBhY2tfYW5kX3BhdGNoJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBmbGFnX2NsZWFuKQorfQorCisjIFRha2UgYWxsIHRoZSBzb3VyY2VzIGZvciBhIHJlY2lwZSBhbmQgcHV0cyB0aGVtIGluIFdPUktESVIvYXJjaGl2ZXItd29yay8uCisjIEZpbGVzIGluIFNSQ19VUkkgYXJlIGNvcGllZCBkaXJlY3RseSwgYW55dGhpbmcgdGhhdCdzIGEgZGlyZWN0b3J5CisjIChlLmcuIGdpdCByZXBvc2l0b3JpZXMpIGlzICJ1bnBhY2tlZCIgYW5kIHRoZW4gcHV0IGludG8gYSB0YXJiYWxsLgorcHl0aG9uIGRvX2FyX29yaWdpbmFsKCkgeworCisgICAgaW1wb3J0IHNodXRpbCwgdGFyZmlsZSwgdGVtcGZpbGUKKworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSAhPSAib3JpZ2luYWwiOgorICAgICAgICByZXR1cm4KKworICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgb3JpZ2luYWwgc291cmNlLi4uJykKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIGxvY2FsID0gZmV0Y2gubG9jYWxwYXRoKHVybCkucnN0cmlwKCIvIik7CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGxvY2FsKToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5KGxvY2FsLCBhcl9vdXRkaXIpCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihsb2NhbCk6CisgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUobG9jYWwpCisKKyAgICAgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPWQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgICAgICAgICBmZXRjaC51bnBhY2sodG1wZGlyLCAodXJsLCkpCisKKyAgICAgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgICAgICMgV2UgZWxpbWluYXRlIGFueSBBVVRPSU5DKyBpbiB0aGUgcmV2aXNpb24uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3JjX3JldiA9IGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpLnJlcGxhY2UoJ0FVVE9JTkMrJywnJykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzcmNfcmV2ID0gJ05PUkVWJworICAgICAgICAgICAgdGFybmFtZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsIGJhc2VuYW1lICsgJy4nICsgc3JjX3JldiArICcudGFyLmd6JykKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCAndzpneicpCisgICAgICAgICAgICB0YXIuYWRkKCcuJykKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAjIEVtaXQgcGF0Y2ggc2VyaWVzIGZpbGVzIGZvciAnb3JpZ2luYWwnCisgICAgYmIubm90ZSgnV3JpdGluZyBwYXRjaCBzZXJpZXMgZmlsZXMuLi4nKQorICAgIGZvciBwYXRjaCBpbiBzcmNfcGF0Y2hlcyhkKToKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisgICAgICAgIHBhdGNoZGlyID0gcGFybS5nZXQoJ3BhdGNoZGlyJykKKyAgICAgICAgaWYgcGF0Y2hkaXI6CisgICAgICAgICAgICBzZXJpZXMgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnc2VyaWVzLnN1YmRpci4lcycgJSBwYXRjaGRpci5yZXBsYWNlKCcvJywgJ18nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICdzZXJpZXMnKQorCisgICAgICAgIHdpdGggb3BlbihzZXJpZXMsICdhJykgYXMgczoKKyAgICAgICAgICAgIHMud3JpdGUoJyVzIC1wJXNcbicgJSAob3MucGF0aC5iYXNlbmFtZShsb2NhbCksIHBhcm1bJ3N0cmlwbGV2ZWwnXSkpCit9CisKK3B5dGhvbiBkb19hcl9wYXRjaGVkKCkgeworCisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpICE9ICdwYXRjaGVkJzoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEdldCB0aGUgQVJDSElWRVJfT1VURElSIGJlZm9yZSB3ZSByZXNldCB0aGUgV09SS0RJUgorICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgcGF0Y2hlZCBzb3VyY2UuLi4nKQorICAgIGQuc2V0VmFyKCdXT1JLRElSJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX1dPUktESVInLCBUcnVlKSkKKyAgICAjIFRoZSBnY2Mgc3RhZmYgdXNlcyBzaGFyZWQgc291cmNlCisgICAgZmxhZyA9IGQuZ2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3N0YW1wLWJhc2UnLCBUcnVlKQorICAgIGlmIGZsYWc6CisgICAgICAgIGNyZWF0ZV90YXJiYWxsKGQsIGQuZ2V0VmFyKCdTJywgVHJ1ZSksICdwYXRjaGVkJywgYXJfb3V0ZGlyLCAnZ2NjJykKKyAgICBlbHNlOgorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBkLmdldFZhcignUycsIFRydWUpLCAncGF0Y2hlZCcsIGFyX291dGRpcikKK30KKworcHl0aG9uIGRvX2FyX2NvbmZpZ3VyZWQoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpID09ICdjb25maWd1cmVkJzoKKyAgICAgICAgYmIubm90ZSgnQXJjaGl2aW5nIHRoZSBjb25maWd1cmVkIHNvdXJjZS4uLicpCisgICAgICAgICMgVGhlIGxpYnRvb2wtbmF0aXZlJ3MgZG9fY29uZmlndXJlIHdpbGwgcmVtb3ZlIHRoZQorICAgICAgICAjICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQsIHNvIHdlIGNhbid0IHJlLXJ1biB0aGUKKyAgICAgICAgIyBkb19jb25maWd1cmUsIHdlIGFyY2hpdmUgdGhlIGFscmVhZHkgY29uZmlndXJlZCAke1N9IHRvCisgICAgICAgICMgaW5zdGVhZCBvZi4KKyAgICAgICAgaWYgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgIT0gJ2xpYnRvb2wtbmF0aXZlJzoKKyAgICAgICAgICAgICMgQ2hhbmdlIHRoZSBXT1JLRElSIHRvIG1ha2UgZG9fY29uZmlndXJlIHJ1biBpbiBhbm90aGVyIGRpci4KKyAgICAgICAgICAgIGQuc2V0VmFyKCdXT1JLRElSJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX1dPUktESVInLCBUcnVlKSkKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIGQpOgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fa2VybmVsX2NvbmZpZ21lJywgZCkKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2NtYWtlJywgZCk6CisgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZScsIGQpCisgICAgICAgICAgICBwcmVmdW5jcyA9IGQuZ2V0VmFyRmxhZygnZG9fY29uZmlndXJlJywgJ3ByZWZ1bmNzJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBmdW5jIGluIChwcmVmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jICE9ICJzeXNyb290X2NsZWFuc3N0YXRlIjoKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2NvbmZpZ3VyZScsIGQpCisgICAgICAgICAgICBwb3N0ZnVuY3MgPSBkLmdldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdwb3N0ZnVuY3MnLCBUcnVlKQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gKHBvc3RmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jICE9ICJkb19xYV9jb25maWd1cmUiOgorICAgICAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZnVuYywgZCkKKyAgICAgICAgc3JjZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgICAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdCJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjZGlyICE9IGJ1aWxkZGlyOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYnVpbGRkaXIpOgorICAgICAgICAgICAgICAgIG9lLnBhdGguY29weXRyZWUoYnVpbGRkaXIsIG9zLnBhdGguam9pbihzcmNkaXIsIFwKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWxkLiVzLmFyX2NvbmZpZ3VyZWQnICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpKQorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBzcmNkaXIsICdjb25maWd1cmVkJywgYXJfb3V0ZGlyKQorfQorCitkZWYgY3JlYXRlX3RhcmJhbGwoZCwgc3JjZGlyLCBzdWZmaXgsIGFyX291dGRpciwgcGY9Tm9uZSk6CisgICAgIiIiCisgICAgY3JlYXRlIHRoZSB0YXJiYWxsIGZyb20gc3JjZGlyCisgICAgIiIiCisgICAgaW1wb3J0IHRhcmZpbGUKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihhcl9vdXRkaXIpCisgICAgaWYgcGY6CisgICAgICAgIHRhcm5hbWUgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnJXMtJXMudGFyLmd6JyAlIChwZiwgc3VmZml4KSkKKyAgICBlbHNlOgorICAgICAgICB0YXJuYW1lID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLSVzLnRhci5neicgJSBcCisgICAgICAgICAgICAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIHN1ZmZpeCkpCisKKyAgICBzcmNkaXIgPSBzcmNkaXIucnN0cmlwKCcvJykKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKHNyY2RpcikKKyAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3JjZGlyKQorICAgIG9zLmNoZGlyKGRpcm5hbWUpCisgICAgYmIubm90ZSgnQ3JlYXRpbmcgJXMnICUgdGFybmFtZSkKKyAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgJ3c6Z3onKQorICAgIHRhci5hZGQoYmFzZW5hbWUpCisgICAgdGFyLmNsb3NlKCkKKworIyBjcmVhdGluZyAuZGlmZi5neiBiZXR3ZWVuIHNvdXJjZS5vcmlnIGFuZCBzb3VyY2UKK2RlZiBjcmVhdGVfZGlmZl9neihkLCBzcmNfb3JpZywgc3JjLCBhcl9vdXRkaXIpOgorCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNyYykgb3Igbm90IG9zLnBhdGguaXNkaXIoc3JjX29yaWcpOgorICAgICAgICByZXR1cm4KKworICAgICMgVGhlIGRpZmYgLS1leGNsdWRlIGNhbid0IGV4Y2x1ZGUgdGhlIGZpbGUgd2l0aCBwYXRoLCBzbyB3ZSBjb3B5CisgICAgIyB0aGUgcGF0Y2hlZCBzb3VyY2UsIGFuZCByZW1vdmUgdGhlIGZpbGVzIHRoYXQgd2UnZCBsaWtlIHRvCisgICAgIyBleGNsdWRlLgorICAgIHNyY19wYXRjaGVkID0gc3JjICsgJy5wYXRjaGVkJworICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShzcmMsIHNyY19wYXRjaGVkKQorICAgIGZvciBpIGluIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdkaWZmLWV4Y2x1ZGUnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNyY19vcmlnLCBpKSwgcmVjdXJzZT1UcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNyY19wYXRjaGVkLCBpKSwgcmVjdXJzZT1UcnVlKQorCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShzcmMpCisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyYykKKyAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgIG91dF9maWxlID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLWRpZmYuZ3onICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgZGlmZl9jbWQgPSAnZGlmZiAtTmF1ciAlcy5vcmlnICVzLnBhdGNoZWQgfCBnemlwIC1jID4gJXMnICUgKGJhc2VuYW1lLCBiYXNlbmFtZSwgb3V0X2ZpbGUpCisgICAgc3VicHJvY2Vzcy5jYWxsKGRpZmZfY21kLCBzaGVsbD1UcnVlKQorICAgIGJiLnV0aWxzLnJlbW92ZShzcmNfcGF0Y2hlZCwgcmVjdXJzZT1UcnVlKQorCisjIFJ1biBkb191bnBhY2sgYW5kIGRvX3BhdGNoCitweXRob24gZG9fdW5wYWNrX2FuZF9wYXRjaCgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JjJywgVHJ1ZSkgbm90IGluIFwKKyAgICAgICAgICAgIFsgJ3BhdGNoZWQnLCAnY29uZmlndXJlZCddIGFuZCBcCisgICAgICAgICAgICBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuCisKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKworICAgICMgQ2hhbmdlIHRoZSBXT1JLRElSIHRvIG1ha2UgZG9fdW5wYWNrIGRvX3BhdGNoIHJ1biBpbiBhbm90aGVyIGRpci4KKyAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisKKyAgICAjIFRoZSBjaGFuZ2VkICdXT1JLRElSJyBhbHNvIGNhc3VlZCAnQicgY2hhbmdlZCwgY3JlYXRlIGRpciAnQicgZm9yIHRoZQorICAgICMgcG9zc2libHkgcmVxdWlyaW5nIG9mIHRoZSBmb2xsb3dpbmcgdGFza3MgKHN1Y2ggYXMgc29tZSByZWNpcGVzJ3MKKyAgICAjIGRvX3BhdGNoIHJlcXVpcmVkICdCJyBleGlzdGVkKS4KKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoJ0InLCBUcnVlKSkKKworICAgICMgVGhlIGtlcm5lbCBzb3VyY2UgaXMgcmVhZHkgYWZ0ZXIgZG9fdmFsaWRhdGVfYnJhbmNoZXMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb191bnBhY2snLCBkKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2tlcm5lbF9jaGVja291dCcsIGQpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdmFsaWRhdGVfYnJhbmNoZXMnLCBkKQorICAgIGVsc2U6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdW5wYWNrJywgZCkKKworICAgICMgU2F2ZSB0aGUgb3JpZ2luYWwgc291cmNlIGZvciBjcmVhdGluZyB0aGUgcGF0Y2hlcworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdkaWZmJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBzcmMgPSBkLmdldFZhcignUycsIFRydWUpLnJzdHJpcCgnLycpCisgICAgICAgIHNyY19vcmlnID0gJyVzLm9yaWcnICUgc3JjCisgICAgICAgIG9lLnBhdGguY29weXRyZWUoc3JjLCBzcmNfb3JpZykKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3BhdGNoJywgZCkKKyAgICAjIENyZWF0ZSB0aGUgcGF0Y2hlcworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdkaWZmJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBiYi5ub3RlKCdDcmVhdGluZyBkaWZmIGd6Li4uJykKKyAgICAgICAgY3JlYXRlX2RpZmZfZ3ooZCwgc3JjX29yaWcsIHNyYywgYXJfb3V0ZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc3JjX29yaWcsIHJlY3Vyc2U9VHJ1ZSkKK30KKworcHl0aG9uIGRvX2FyX3JlY2lwZSAoKSB7CisgICAgIiIiCisgICAgYXJjaGl2ZSB0aGUgcmVjaXBlLCBpbmNsdWRpbmcgLmJiIGFuZCAuaW5jLgorICAgICIiIgorICAgIGltcG9ydCByZQorICAgIGltcG9ydCBzaHV0aWwKKworICAgIHJlcXVpcmVfcmUgPSByZS5jb21waWxlKCByInJlcXVpcmVccysoLispIiApCisgICAgaW5jbHVkZV9yZSA9IHJlLmNvbXBpbGUoIHIiaW5jbHVkZVxzKyguKykiICkKKyAgICBiYmZpbGUgPSBkLmdldFZhcignRklMRScsIFRydWUpCisgICAgb3V0ZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksIFwKKyAgICAgICAgICAgICclcy1yZWNpcGUnICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG91dGRpcikKKyAgICBzaHV0aWwuY29weShiYmZpbGUsIG91dGRpcikKKworICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoYmJmaWxlKQorICAgIGJicGF0aCA9ICclczolcycgJSAoZGlybmFtZSwgZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpKQorICAgIGYgPSBvcGVuKGJiZmlsZSwgJ3InKQorICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgIGluY2ZpbGUgPSBOb25lCisgICAgICAgIGlmIHJlcXVpcmVfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBpbmNmaWxlID0gcmVxdWlyZV9yZS5tYXRjaChsaW5lKS5ncm91cCgxKQorICAgICAgICBlbGlmIGluY2x1ZGVfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBpbmNmaWxlID0gaW5jbHVkZV9yZS5tYXRjaChsaW5lKS5ncm91cCgxKQorICAgICAgICBpZiBpbmNmaWxlOgorICAgICAgICAgICAgaW5jZmlsZSA9IGJiLmRhdGEuZXhwYW5kKGluY2ZpbGUsIGQpCisgICAgICAgICAgICBpbmNmaWxlID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBpbmNmaWxlKQorICAgICAgICAgICAgaWYgaW5jZmlsZToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShpbmNmaWxlLCBvdXRkaXIpCisKKyAgICBjcmVhdGVfdGFyYmFsbChkLCBvdXRkaXIsICdyZWNpcGUnLCBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkpCisgICAgYmIudXRpbHMucmVtb3ZlKG91dGRpciwgcmVjdXJzZT1UcnVlKQorfQorCitweXRob24gZG9fZHVtcGRhdGEgKCkgeworICAgICIiIgorICAgIGR1bXAgZW52aXJvbm1lbnQgZGF0YSB0byAke1BGfS1zaG93ZGF0YS5kdW1wCisgICAgIiIiCisKKyAgICBkdW1wZmlsZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSksIFwKKyAgICAgICAgJyVzLXNob3dkYXRhLmR1bXAnICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgYmIubm90ZSgnRHVtcGluZyBtZXRhZGF0YSBpbnRvICVzJyAlIGR1bXBmaWxlKQorICAgIGYgPSBvcGVuKGR1bXBmaWxlLCAndycpCisgICAgIyBlbWl0IHZhcmlhYmxlcyBhbmQgc2hlbGwgZnVuY3Rpb25zCisgICAgYmIuZGF0YS5lbWl0X2VudihmLCBkLCBUcnVlKQorICAgICMgZW1pdCB0aGUgbWV0YWRhdGEgd2hpY2ggaXNuJ3QgdmFsaWQgc2hlbGwKKyAgICBmb3IgZSBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgYmIuZGF0YS5nZXRWYXJGbGFnKGUsICdweXRob24nLCBkKToKKyAgICAgICAgICAgIGYud3JpdGUoIlxucHl0aG9uICVzICgpIHtcbiVzfVxuIiAlIChlLCBiYi5kYXRhLmdldFZhcihlLCBkLCBUcnVlKSkpCisgICAgZi5jbG9zZSgpCit9CisKK1NTVEFURVRBU0tTICs9ICJkb19kZXBsb3lfYXJjaGl2ZXMiCitkb19kZXBsb3lfYXJjaGl2ZXMgKCkgeworICAgIGVjaG8gIkRlcGxveWluZyBzb3VyY2UgYXJjaGl2ZSBmaWxlcyAuLi4iCit9CitweXRob24gZG9fZGVwbG95X2FyY2hpdmVzX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2RvX2RlcGxveV9hcmNoaXZlc1tzc3RhdGUtaW5wdXRkaXJzXSA9ICIke0FSQ0hJVkVSX1RPUERJUn0iCitkb19kZXBsb3lfYXJjaGl2ZXNbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9TUkN9IgorCithZGR0YXNrIGRvX2FyX29yaWdpbmFsIGFmdGVyIGRvX3VucGFjaworYWRkdGFzayBkb191bnBhY2tfYW5kX3BhdGNoIGFmdGVyIGRvX3BhdGNoCithZGR0YXNrIGRvX2FyX3BhdGNoZWQgYWZ0ZXIgZG9fdW5wYWNrX2FuZF9wYXRjaAorYWRkdGFzayBkb19hcl9jb25maWd1cmVkIGFmdGVyIGRvX3VucGFja19hbmRfcGF0Y2gKK2FkZHRhc2sgZG9fZHVtcGRhdGEKK2FkZHRhc2sgZG9fYXJfcmVjaXBlCithZGR0YXNrIGRvX2RlcGxveV9hcmNoaXZlcyBiZWZvcmUgZG9fYnVpbGQKKworYWRkdGFzayBkb19kZXBsb3lfYWxsX2FyY2hpdmVzIGFmdGVyIGRvX2RlcGxveV9hcmNoaXZlcworZG9fZGVwbG95X2FsbF9hcmNoaXZlc1tyZWNyZGVwdGFza10gPSAiZG9fZGVwbG95X2FyY2hpdmVzIgorZG9fZGVwbG95X2FsbF9hcmNoaXZlc1tyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGVwbG95X2FsbF9hcmNoaXZlcygpIHsKKyAgICAgICAgOgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMtYnJva2Vuc2VwLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZjk3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMtYnJva2Vuc2VwLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACisjIEF1dG90b29scyBjbGFzcyBmb3IgcmVjaXBlcyB3aGVyZSBzZXBhcmF0ZSBidWlsZCBkaXIgZG9lc24ndCB3b3JrCisjIElkZWFsbHkgd2Ugc2hvdWxkIGZpeCBzb2Z0d2FyZSBzbyBpdCBkb2VzIHdvcmsuIFN0YW5kYXJkIGF1dG90b29scyBzdXBwb3J0cworIyB0aGlzLgoraW5oZXJpdCBhdXRvdG9vbHMKK0IgPSAiJHtTfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2NkN2QyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsMzEyIEBACitkZWYgYXV0b3Rvb2xzX2RlcF9wcmVwZW5kKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0FVVE9UT09MU19ERVBTJywgVHJ1ZSk6CisgICAgICAgIHJldHVybiAnJworCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGRlcHMgPSAnJworCisgICAgaWYgcG4gaW4gWydhdXRvY29uZi1uYXRpdmUnLCAnYXV0b21ha2UtbmF0aXZlJywgJ2hlbHAybWFuLW5hdGl2ZSddOgorICAgICAgICByZXR1cm4gZGVwcworICAgIGRlcHMgKz0gJ2F1dG9jb25mLW5hdGl2ZSBhdXRvbWFrZS1uYXRpdmUgJworCisgICAgaWYgbm90IHBuIGluIFsnbGlidG9vbCcsICdsaWJ0b29sLW5hdGl2ZSddIGFuZCBub3QgcG4uZW5kc3dpdGgoImxpYnRvb2wtY3Jvc3MiKToKKyAgICAgICAgZGVwcyArPSAnbGlidG9vbC1uYXRpdmUgJworICAgICAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBUcnVlKToKKyAgICAgICAgICAgIGRlcHMgKz0gJ2xpYnRvb2wtY3Jvc3MgJworCisgICAgcmV0dXJuIGRlcHMgKyAnZ251LWNvbmZpZy1uYXRpdmUgJworCitFWFRSQV9PRU1BS0UgPSAiIgorCitERVBFTkRTX3ByZXBlbmQgPSAiJHtAYXV0b3Rvb2xzX2RlcF9wcmVwZW5kKGQpfSAiCisKK2luaGVyaXQgc2l0ZWluZm8KKworIyBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBzaGVsbCBzY3JpcHRzIHdpdGggdmFyaWFibGVzIGRlZmluZWQgdG8gc3VwcGx5IHRlc3QKKyMgcmVzdWx0cyBmb3IgYXV0b2NvbmYgdGVzdHMgd2UgY2Fubm90IHJ1biBhdCBidWlsZCB0aW1lLgorZXhwb3J0IENPTkZJR19TSVRFID0gIiR7QHNpdGVpbmZvX2dldF9maWxlcyhkLCBGYWxzZSl9IgorCithY3BhdGhzID0gImRlZmF1bHQiCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1hdXRvcG9pbnQiCisKK2V4cG9ydCBsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyA9ICIke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iCisKKyMgV2hlbiBidWlsZGluZyB0b29scyBmb3IgdXNlIGF0IGJ1aWxkLXRpbWUgaXQncyByZWNvbW1lbmRlZCBmb3IgdGhlIGJ1aWxkCisjIHN5c3RlbSB0byB1c2UgdGhlc2UgdmFyaWFibGVzIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorIyAoaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9hdXRvYm9vay9hdXRvYm9vay9hdXRvYm9va18yNzAuaHRtbCkKK2V4cG9ydCBDUFBfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQfSIKK2V4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFBGTEFHU30iCisKK2V4cG9ydCBDQ19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NGTEFHU30iCisKK2V4cG9ydCBDWFhfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1hYfSIKK2V4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCitleHBvcnQgTERfRk9SX0JVSUxEID0gIiR7QlVJTERfTER9IgorZXhwb3J0IExERkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfTERGTEFHU30iCisKK2RlZiBhcHBlbmRfbGlidG9vbF9zeXNyb290KGQpOgorICAgICMgT25seSBzdXBwbHkgbGlidG9vbCBzeXNyb290IG9wdGlvbiBmb3Igbm9uLW5hdGl2ZSBwYWNrYWdlcworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgcmV0dXJuICctLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0nCisgICAgcmV0dXJuICIiCisKK0NPTkZJR1VSRU9QVFMgPSAiIC0tYnVpbGQ9JHtCVUlMRF9TWVN9IFwKKwkJICAtLWhvc3Q9JHtIT1NUX1NZU30gXAorCQkgIC0tdGFyZ2V0PSR7VEFSR0VUX1NZU30gXAorCQkgIC0tcHJlZml4PSR7cHJlZml4fSBcCisJCSAgLS1leGVjX3ByZWZpeD0ke2V4ZWNfcHJlZml4fSBcCisJCSAgLS1iaW5kaXI9JHtiaW5kaXJ9IFwKKwkJICAtLXNiaW5kaXI9JHtzYmluZGlyfSBcCisJCSAgLS1saWJleGVjZGlyPSR7bGliZXhlY2Rpcn0gXAorCQkgIC0tZGF0YWRpcj0ke2RhdGFkaXJ9IFwKKwkJICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisJCSAgLS1zaGFyZWRzdGF0ZWRpcj0ke3NoYXJlZHN0YXRlZGlyfSBcCisJCSAgLS1sb2NhbHN0YXRlZGlyPSR7bG9jYWxzdGF0ZWRpcn0gXAorCQkgIC0tbGliZGlyPSR7bGliZGlyfSBcCisJCSAgLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0gXAorCQkgIC0tb2xkaW5jbHVkZWRpcj0ke29sZGluY2x1ZGVkaXJ9IFwKKwkJICAtLWluZm9kaXI9JHtpbmZvZGlyfSBcCisJCSAgLS1tYW5kaXI9JHttYW5kaXJ9IFwKKwkJICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzIFwKKwkJICAke0NPTkZJR1VSRU9QVF9ERVBUUkFDS30gXAorCQkgICR7QGFwcGVuZF9saWJ0b29sX3N5c3Jvb3QoZCl9IgorQ09ORklHVVJFT1BUX0RFUFRSQUNLID89ICItLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyIKKworCitvZV9ydW5jb25mICgpIHsKKwljZmdzY3JpcHQ9IiR7U30vY29uZmlndXJlIgorCWlmIFsgLXggIiRjZmdzY3JpcHQiIF0gOyB0aGVuCisJCWJibm90ZSAiUnVubmluZyAkY2Znc2NyaXB0ICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9ICRAIgorCQlzZXQgK2UKKwkJJHtDQUNIRURfQ09ORklHVVJFVkFSU30gJGNmZ3NjcmlwdCAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfSAiJEAiCisJCWlmIFsgIiQ/IiAhPSAiMCIgXTsgdGhlbgorCQkJZWNobyAiQ29uZmlndXJlIGZhaWxlZC4gVGhlIGNvbnRlbnRzIG9mIGFsbCBjb25maWcubG9nIGZpbGVzIGZvbGxvd3MgdG8gYWlkIGRlYnVnZ2luZyIKKwkJCWZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBjb25maWcubG9nIC1wcmludCAtZXhlYyBjYXQge30gXDsKKwkJCWRpZSAib2VfcnVuY29uZiBmYWlsZWQiCisJCWZpCisJCXNldCAtZQorCWVsc2UKKwkJYmJmYXRhbCAibm8gY29uZmlndXJlIHNjcmlwdCBmb3VuZCBhdCAkY2Znc2NyaXB0IgorCWZpCit9CisKK0FVVE9UT09MU19BVVhESVIgPz0gIiR7U30iCisKK0NPTkZJR1VSRVNUQU1QRklMRSA9ICIke1dPUktESVJ9L2NvbmZpZ3VyZS5zc3RhdGUiCisKK2F1dG90b29sc19wcmVjb25maWd1cmUoKSB7CisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiAtYSAtZSAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWlmIFsgImBjYXQgJHtDT05GSUdVUkVTVEFNUEZJTEV9YCIgIT0gIiR7QkJfVEFTS0hBU0h9IiBdOyB0aGVuCisJCQlpZiBbICIke1N9IiAhPSAiJHtCfSIgXTsgdGhlbgorCQkJCWVjaG8gIlByZXZpb3VzbHkgY29uZmlndXJlZCBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgZGV0ZWN0ZWQsIGNsZWFuaW5nICR7Qn0iCisJCQkJcm0gLXJmICR7Qn0KKwkJCQlta2RpciAke0J9CisJCQllbHNlCisJCQkJIyBBdCBsZWFzdCByZW1vdmUgdGhlIC5sYSBmaWxlcyBzaW5jZSBhdXRvbWFrZSB3b24ndCBhdXRvbWF0aWNhbGx5CisJCQkJIyByZWdlbmVyYXRlIHRoZW0gZXZlbiBpZiBDRkxBR1MvTERGTEFHUyBhcmUgZGlmZmVyZW50CisJCQkJY2QgJHtTfQorCQkJCWlmIFsgIiR7Q0xFQU5CUk9LRU59IiAhPSAiMSIgLWEgXCggLWUgTWFrZWZpbGUgLW8gLWUgbWFrZWZpbGUgLW8gLWUgR05VbWFrZWZpbGUgXCkgXTsgdGhlbgorCQkJCQllY2hvICJSdW5uaW5nIFwiJHtNQUtFfSBjbGVhblwiIGluICR7U30iCisJCQkJCSR7TUFLRX0gY2xlYW4KKwkJCQlmaQorCQkJCWZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBcKi5sYSAtZGVsZXRlCisJCQlmaQorCQlmaQorCWZpCit9CisKK2F1dG90b29sc19wb3N0Y29uZmlndXJlKCl7CisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWVjaG8gJHtCQl9UQVNLSEFTSH0gPiAke0NPTkZJR1VSRVNUQU1QRklMRX0KKwlmaQorfQorCitFWFRSQUNPTkZGVU5DUyA/Pz0gIiIKKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiYXV0b3Rvb2xzX3ByZWNvbmZpZ3VyZSBhdXRvdG9vbHNfY29weV9hY2xvY2FscyAke0VYVFJBQ09ORkZVTkNTfSIKK2RvX2NvbmZpZ3VyZVtwb3N0ZnVuY3NdICs9ICJhdXRvdG9vbHNfcG9zdGNvbmZpZ3VyZSIKKworQUNMT0NBTERJUiA9ICIke0J9L2FjbG9jYWwtY29weSIKKworcHl0aG9uIGF1dG90b29sc19jb3B5X2FjbG9jYWxzICgpIHsKKyAgICBzID0gZC5nZXRWYXIoIlMiLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzICsgIi9jb25maWd1cmUuaW4iKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHMgKyAiL2NvbmZpZ3VyZS5hYyIpOgorICAgICAgICBpZiBub3QgZC5nZXRWYXIoIkFVVE9UT09MU19DT1BZQUNMT0NBTCIsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgdGFza2RlcGRhdGEgPSBkLmdldFZhcigiQkJfVEFTS0RFUERBVEEiLCBGYWxzZSkKKyAgICAjYmIud2FybihzdHIodGFza2RlcGRhdGEpKQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBhY2xvY2FsZGlyID0gZC5nZXRWYXIoIkFDTE9DQUxESVIiLCBUcnVlKQorICAgIG9lLnBhdGgucmVtb3ZlKGFjbG9jYWxkaXIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGFjbG9jYWxkaXIpCisgICAgc3RhcnQgPSBOb25lCisgICAgY29uZmlndXJlZGVwcyA9IFtdCisKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICAgICBpZiBkYXRhWzFdID09ICJkb19jb25maWd1cmUiIGFuZCBkYXRhWzBdID09IHBuOgorICAgICAgICAgICAgc3RhcnQgPSBkZXAKKyAgICAgICAgICAgIGJyZWFrCisgICAgaWYgc3RhcnQgaXMgTm9uZToKKyAgICAgICAgYmIuZmF0YWwoIkNvdWxkbid0IGZpbmQgb3Vyc2VsZiBpbiBCQl9UQVNLREVQREFUQT8iKQorCisgICAgIyBXZSBuZWVkIHRvIGZpbmQgY29uZmlndXJlIHRhc2tzIHdoaWNoIGFyZSBlaXRoZXIgZnJvbSA8dGFyZ2V0PiAtPiA8dGFyZ2V0PgorICAgICMgb3IgPG5hdGl2ZT4gLT4gPG5hdGl2ZT4gYnV0IG5vdCA8dGFyZ2V0PiAtPiA8bmF0aXZlPiB1bmxlc3MgdGhleSdyZSBkaXJlY3QKKyAgICAjIGRlcGVuZGVuY2llcy4gVGhpcyBtaXJyb3JzIHdoYXQgd291bGQgZ2V0IHJlc3RvcmVkIGZyb20gc3N0YXRlLgorICAgIGRvbmUgPSBbZGVwXQorICAgIG5leHQgPSBbZGVwXQorICAgIHdoaWxlIG5leHQ6CisgICAgICAgIG5ldyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gbmV4dDoKKyAgICAgICAgICAgIGRhdGEgPSB0YXNrZGVwZGF0YVtkZXBdCisgICAgICAgICAgICBmb3IgZGF0YWRlcCBpbiBkYXRhWzNdOgorICAgICAgICAgICAgICAgIGlmIGRhdGFkZXAgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChkYXRhZGVwKQorICAgICAgICAgICAgICAgIGlmIChub3QgZGF0YVswXS5lbmRzd2l0aCgiLW5hdGl2ZSIpKSBhbmQgdGFza2RlcGRhdGFbZGF0YWRlcF1bMF0uZW5kc3dpdGgoIi1uYXRpdmUiKSBhbmQgZGVwICE9IHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5ldy5hcHBlbmQoZGF0YWRlcCkKKyAgICAgICAgICAgICAgICBpZiB0YXNrZGVwZGF0YVtkYXRhZGVwXVsxXSA9PSAiZG9fY29uZmlndXJlIjoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZGVwcy5hcHBlbmQodGFza2RlcGRhdGFbZGF0YWRlcF1bMF0pCisgICAgICAgIG5leHQgPSBuZXcKKworICAgICNjb25maWd1cmVkZXBzMiA9IFtdCisgICAgI2ZvciBkZXAgaW4gdGFza2RlcGRhdGE6CisgICAgIyAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICMgICAgaWYgZGF0YVsxXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgZGF0YVswXSAhPSBwbjoKKyAgICAjICAgICAgICBjb25maWd1cmVkZXBzMi5hcHBlbmQoZGF0YVswXSkKKyAgICAjY29uZmlndXJlZGVwcy5zb3J0KCkKKyAgICAjY29uZmlndXJlZGVwczIuc29ydCgpCisgICAgI2JiLndhcm4oc3RyKGNvbmZpZ3VyZWRlcHMpKQorICAgICNiYi53YXJuKHN0cihjb25maWd1cmVkZXBzMikpCisKKyAgICBjcCA9IFtdCisgICAgc2l0ZWNvbmYgPSBbXSAgICAKKyAgICBmb3IgYyBpbiBjb25maWd1cmVkZXBzOgorICAgICAgICBpZiBjLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICBtYW5pZmVzdCA9IGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9L21hbmlmZXN0LSR7QlVJTERfQVJDSH0tJXMucG9wdWxhdGVfc3lzcm9vdCIgJSBjKQorICAgICAgICBlbGlmIGMuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke1NES19BUkNIfV8ke1NES19PU30tJXMucG9wdWxhdGVfc3lzcm9vdCIgJSBjKQorICAgICAgICBlbGlmICItY3Jvc3MtIiBpbiBjIG9yICItY3Jvc3NzZGsiIGluIGM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke01BQ0hJTkV9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4obWFuaWZlc3QsICJyIikKKyAgICAgICAgICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAgaWYgIi9hY2xvY2FsLyIgaW4gbCBhbmQgbC5zdHJpcCgpLmVuZHN3aXRoKCIubTQiKToKKyAgICAgICAgICAgICAgICAgICAgY3AuYXBwZW5kKGwuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBlbGlmICJjb25maWdfc2l0ZS5kLyIgaW4gbDoKKyAgICAgICAgICAgICAgICAgICAgY3AuYXBwZW5kKGwuc3RyaXAoKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgYmIud2FybigiJXMgbm90IGZvdW5kIiAlIG1hbmlmZXN0KQorCisgICAgZm9yIGMgaW4gY3A6CisgICAgICAgIHQgPSBvcy5wYXRoLmpvaW4oYWNsb2NhbGRpciwgb3MucGF0aC5iYXNlbmFtZShjKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHQpOgorICAgICAgICAgICAgb3Muc3ltbGluayhjLCB0KQorICAgICAgICAgICAgCisgICAgZC5zZXRWYXIoIkNPTkZJR19TSVRFIiwgc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIEZhbHNlKSkKK30KK2F1dG90b29sc19jb3B5X2FjbG9jYWxzW3ZhcmRlcHNleGNsdWRlXSArPSAiTUFDSElORSBTREtfQVJDSCBCVUlMRF9BUkNIIFNES19PUyBCQl9UQVNLREVQREFUQSIKKworYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZSgpIHsKKwkjIFdBUk5JTkc6IGdyb3NzIGhhY2sgZm9sbG93czoKKwkjIEFuIGF1dG90b29scyBidWlsdCBwYWNrYWdlIGdlbmVyYWxseSBuZWVkcyB0aGVzZSBzY3JpcHRzLCBob3dldmVyIG9ubHkKKwkjIGF1dG9tYWtlIG9yIGxpYnRvb2xpemUgYWN0dWFsbHkgaW5zdGFsbCB0aGUgY3VycmVudCB2ZXJzaW9ucyBvZiB0aGVtLgorCSMgVGhpcyBpcyBhIHByb2JsZW0gaW4gYnVpbGRzIHRoYXQgZG8gbm90IHVzZSBsaWJ0b29sIG9yIGF1dG9tYWtlLCBpbiB0aGUgY2FzZQorCSMgd2hlcmUgd2UgLW5lZWQtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGVzZSBzY3JpcHRzLiAgZS5nLiBydW5uaW5nIGEgYnVpbGQKKwkjIGZvciBhIHBhY2thZ2Ugd2hvc2UgYXV0b3Rvb2xzIGFyZSBvbGQsIG9uIGFuIHg4Nl82NCBtYWNoaW5lLCB3aGljaCB0aGUgb2xkCisJIyBjb25maWcuc3ViIGRvZXMgbm90IHN1cHBvcnQuICBXb3JrIGFyb3VuZCB0aGlzIGJ5IGluc3RhbGxpbmcgdGhlbSBtYW51YWxseQorCSMgcmVnYXJkbGVzcy4KKwkoIGZvciBhYyBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1uYW1lIGNvbmZpZ3VyZS5pbiAtbyAtbmFtZSBjb25maWd1cmUuYWNgOyBkbworCQlybSAtZiBgZGlybmFtZSAkYWNgL2NvbmZpZ3VyZQorCQlkb25lICkKKwlpZiBbIC1lICR7U30vY29uZmlndXJlLmluIC1vIC1lICR7U30vY29uZmlndXJlLmFjIF07IHRoZW4KKwkJb2xkZGlyPWBwd2RgCisJCWNkICR7U30KKwkJQUNMT0NBTD0iYWNsb2NhbCAtLXN5c3RlbS1hY2Rpcj0ke0FDTE9DQUxESVJ9LyIKKwkJaWYgWyB4IiR7YWNwYXRoc30iID0geGRlZmF1bHQgXTsgdGhlbgorCQkJYWNwYXRocz0KKwkJCWZvciBpIGluIGBmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW1heGRlcHRoIDIgLW5hbWUgXCoubTR8Z3JlcCAtdiAnYWNsb2NhbC5tNCd8IFwKKwkJCQlncmVwIC12ICdhY2luY2x1ZGUubTQnIHwgZ3JlcCAtdiAnYWNsb2NhbC1jb3B5JyB8IHNlZCAtZSAncyxcKC4qL1wpLiokLFwxLCd8c29ydCAtdWA7IGRvCisJCQkJYWNwYXRocz0iJGFjcGF0aHMgLUkgJGkiCisJCQlkb25lCisJCWVsc2UKKwkJCWFjcGF0aHM9IiR7YWNwYXRoc30iCisJCWZpCisJCUFVVE9WPWBhdXRvbWFrZSAtLXZlcnNpb24gfCBzZWQgLWUgJzF7cy8uKiAvLztzL1wuWzAtOV1cKyQvL307cSdgCisJCWF1dG9tYWtlIC0tdmVyc2lvbgorCQllY2hvICJBVVRPViBpcyAkQVVUT1YiCisJCWlmIFsgLWQgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hY2xvY2FsLSRBVVRPViBdOyB0aGVuCisJCQlBQ0xPQ0FMPSIkQUNMT0NBTCAtLWF1dG9tYWtlLWFjZGlyPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC0kQVVUT1YiCisJCWZpCisJCSMgYXV0b3JlY29uZiBpcyB0b28gc2h5IHRvIG92ZXJ3cml0ZSBhY2xvY2FsLm00IGlmIGl0IGRvZXNuJ3QgbG9vaworCQkjIGxpa2UgaXQgd2FzIGF1dG8tZ2VuZXJhdGVkLiAgV29yayBhcm91bmQgdGhpcyBieSBibG93aW5nIGl0IGF3YXkKKwkJIyBieSBoYW5kLCB1bmxlc3MgdGhlIHBhY2thZ2Ugc3BlY2lmaWNhbGx5IGFza2VkIG5vdCB0byBydW4gYWNsb2NhbC4KKwkJaWYgISBlY2hvICR7RVhUUkFfQVVUT1JFQ09ORn0gfCBncmVwIC1xICJhY2xvY2FsIjsgdGhlbgorCQkJcm0gLWYgYWNsb2NhbC5tNAorCQlmaQorCQlpZiBbIC1lIGNvbmZpZ3VyZS5pbiBdOyB0aGVuCisJCQlDT05GSUdVUkVfQUM9Y29uZmlndXJlLmluCisJCWVsc2UKKwkJCUNPTkZJR1VSRV9BQz1jb25maWd1cmUuYWMKKwkJZmkKKwkJaWYgZ3JlcCAiXltbOnNwYWNlOl1dKkFNX0dMSUJfR05VX0dFVFRFWFQiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJaWYgZ3JlcCAic2VkLipQT1RGSUxFUyIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQkJOiBkbyBub3RoaW5nIC0tIHdlIHN0aWxsIGhhdmUgYW4gb2xkIHVubW9kaWZpZWQgY29uZmlndXJlLmFjCisJICAgIAkJZWxzZQorCQkJCWJibm90ZSBFeGVjdXRpbmcgZ2xpYi1nZXR0ZXh0aXplIC0tZm9yY2UgLS1jb3B5CisJCQkJZWNobyAibm8iIHwgZ2xpYi1nZXR0ZXh0aXplIC0tZm9yY2UgLS1jb3B5CisJCQlmaQorCQllbHNlIGlmIGdyZXAgIl5bWzpzcGFjZTpdXSpBTV9HTlVfR0VUVEVYVCIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQkjIFdlJ2QgY2FsbCBnZXR0ZXh0aXplIGhlcmUgaWYgaXQgd2Fzbid0IHNvIGJyb2tlbi4uLgorCQkJCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9jb25maWcucnBhdGggJHtBVVRPVE9PTFNfQVVYRElSfS8KKwkJCQlpZiBbIC1kICR7U30vcG8vIF07IHRoZW4KKwkJCQkJY3AgLWYgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcG8vCisJCQkJCWlmIFsgISAtZSAke1N9L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4gXTsgdGhlbgorCQkJCQkJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4gJHtTfS9wby8KKwkJCQkJZmkKKwkJCQlmaQorCQkJCWZvciBpIGluIGdldHRleHQubTQgaWNvbnYubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbmxzLm00IHBvLm00IHByb2d0ZXN0Lm00OyBkbworCQkJCQlmb3IgaiBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1uYW1lICRpIHwgZ3JlcCAtdiBhY2xvY2FsLWNvcHlgOyBkbworCQkJCQkJcm0gJGoKKwkJCQkJZG9uZQorCQkJCWRvbmUKKwkJCWZpCisJCWZpCisJCW1rZGlyIC1wIG00CisJCWlmIGdyZXAgIl5bWzpzcGFjZTpdXSpbQUldW0NUXV9QUk9HX0lOVExUT09MIiAkQ09ORklHVVJFX0FDID4vZGV2L251bGw7IHRoZW4KKwkJCWJibm90ZSBFeGVjdXRpbmcgaW50bHRvb2xpemUgLS1jb3B5IC0tZm9yY2UgLS1hdXRvbWFrZQorCQkJaW50bHRvb2xpemUgLS1jb3B5IC0tZm9yY2UgLS1hdXRvbWFrZQorCQlmaQorCQliYm5vdGUgRXhlY3V0aW5nIEFDTE9DQUw9XCIkQUNMT0NBTFwiIGF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMKKwkJQUNMT0NBTD0iJEFDTE9DQUwiIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgJHtFWFRSQV9BVVRPUkVDT05GfSAkYWNwYXRocyB8fCBkaWUgImF1dG9yZWNvbmYgZXhlY3V0aW9uIGZhaWxlZC4iCisJCWNkICRvbGRkaXIKKwlmaQorCWlmIFsgLWUgJHtTfS9jb25maWd1cmUgXTsgdGhlbgorCQlvZV9ydW5jb25mCisJZWxzZQorCQliYm5vdGUgIm5vdGhpbmcgdG8gY29uZmlndXJlIgorCWZpCit9CisKK2F1dG90b29sc19kb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisJaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCisJCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgorCWZpCit9CisKK2luaGVyaXQgc2l0ZWNvbmZpZworCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZSBkb19pbnN0YWxsCisKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2M0MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2F1dG90b29sc19zdGFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMiBAQAoraW5oZXJpdCBhdXRvdG9vbHMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3ODAwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw2MjkgQEAKK0JCX0RFRkFVTFRfVEFTSyA/PSAiYnVpbGQiCitDTEFTU09WRVJSSURFID89ICJjbGFzcy10YXJnZXQiCisKK2luaGVyaXQgcGF0Y2gKK2luaGVyaXQgc3RhZ2luZworCitpbmhlcml0IG1pcnJvcnMKK2luaGVyaXQgdXRpbHMKK2luaGVyaXQgdXRpbGl0eS10YXNrcworaW5oZXJpdCBtZXRhZGF0YV9zY20KK2luaGVyaXQgbG9nZ2luZworCitPRV9JTVBPUlRTICs9ICJvcyBzeXMgdGltZSBvZS5wYXRoIG9lLnV0aWxzIG9lLmRhdGEgb2UucGFja2FnZSBvZS5wYWNrYWdlZ3JvdXAgb2Uuc3N0YXRlc2lnIG9lLmxzYiBvZS5jYWNoZWRwYXRoIgorT0VfSU1QT1JUU1t0eXBlXSA9ICJsaXN0IgorCitkZWYgb2VfaW1wb3J0KGQpOgorICAgIGltcG9ydCBzeXMKKworICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgc3lzLnBhdGhbMDowXSA9IFtvcy5wYXRoLmpvaW4oZGlyLCAibGliIikgZm9yIGRpciBpbiBiYnBhdGhdCisKKyAgICBkZWYgaW5qZWN0KG5hbWUsIHZhbHVlKToKKyAgICAgICAgIiIiTWFrZSBhIHB5dGhvbiBvYmplY3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBtZXRhZGF0YSIiIgorICAgICAgICBpZiBoYXNhdHRyKGJiLnV0aWxzLCAiX2NvbnRleHQiKToKKyAgICAgICAgICAgIGJiLnV0aWxzLl9jb250ZXh0W25hbWVdID0gdmFsdWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9fYnVpbHRpbnNfX1tuYW1lXSA9IHZhbHVlCisKKyAgICBpbXBvcnQgb2UuZGF0YQorICAgIGZvciB0b2ltcG9ydCBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCJPRV9JTVBPUlRTIiwgZCk6CisgICAgICAgIGltcG9ydGVkID0gX19pbXBvcnRfXyh0b2ltcG9ydCkKKyAgICAgICAgaW5qZWN0KHRvaW1wb3J0LnNwbGl0KCIuIiwgMSlbMF0sIGltcG9ydGVkKQorCisgICAgcmV0dXJuICIiCisKKyMgV2UgbmVlZCB0aGUgb2UgbW9kdWxlIG5hbWUgc3BhY2UgZWFybHkgKGJlZm9yZSBJTkhFUklUcyBnZXQgYWRkZWQpCitPRV9JTVBPUlRFRCA6PSAiJHtAb2VfaW1wb3J0KGQpfSIKKworZGVmIGxzYl9kaXN0cm9faWRlbnRpZmllcihkKToKKyAgICBhZGp1c3QgPSBkLmdldFZhcignTFNCX0RJU1RST19BREpVU1QnLCBUcnVlKQorICAgIGFkanVzdF9mdW5jID0gTm9uZQorICAgIGlmIGFkanVzdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRqdXN0X2Z1bmMgPSBnbG9iYWxzKClbYWRqdXN0XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIG9lLmxzYi5kaXN0cm9faWRlbnRpZmllcihhZGp1c3RfZnVuYykKKworZGllKCkgeworCWJiZmF0YWxfbG9nICIkKiIKK30KKworb2VfcnVubWFrZV9jYWxsKCkgeworCWJibm90ZSAke01BS0V9ICR7RVhUUkFfT0VNQUtFfSAiJEAiCisJJHtNQUtFfSAke0VYVFJBX09FTUFLRX0gIiRAIgorfQorCitvZV9ydW5tYWtlKCkgeworCW9lX3J1bm1ha2VfY2FsbCAiJEAiIHx8IGRpZSAib2VfcnVubWFrZSBmYWlsZWQiCit9CisKKworZGVmIGJhc2VfZGVwX3ByZXBlbmQoZCk6CisgICAgIworICAgICMgSWRlYWxseSB0aGlzIHdpbGwgY2hlY2sgYSBmbGFnIHNvIHdlIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSBpbgorICAgICMgdGhlIGNhc2Ugd2hlcmUgaG9zdCA9PSBidWlsZCA9PSB0YXJnZXQsIGZvciBub3cgd2UgZG9uJ3Qgd29yayBpbgorICAgICMgdGhhdCBjYXNlIHRob3VnaC4KKyAgICAjCisKKyAgICBkZXBzID0gIiIKKyAgICAjIElOSElCSVRfREVGQVVMVF9ERVBTIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIHBhdGNoIGNvbW1hbmQuICBXaGV0aGVyIG9yICBub3QKKyAgICAjIHdlIG5lZWQgdGhhdCBidWlsdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHBhdGNoIGZ1bmN0aW9uIC8gY2xhc3MsIG5vdAorICAgICMgdGhlIGFwcGxpY2F0aW9uLgorICAgIGlmIG5vdCBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBGYWxzZSk6CisgICAgICAgIGlmIChkLmdldFZhcignSE9TVF9TWVMnLCBUcnVlKSAhPSBkLmdldFZhcignQlVJTERfU1lTJywgVHJ1ZSkpOgorICAgICAgICAgICAgZGVwcyArPSAiIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMgdmlydHVhbC9saWJjICIKKyAgICByZXR1cm4gZGVwcworCitCQVNFREVQRU5EUyA9ICIke0BiYXNlX2RlcF9wcmVwZW5kKGQpfSIKKworREVQRU5EU19wcmVwZW5kPSIke0JBU0VERVBFTkRTfSAiCisKK0ZJTEVTUEFUSCA9ICIke0BiYXNlX3NldF9maWxlc3BhdGgoWyIke0ZJTEVfRElSTkFNRX0vJHtCUH0iLCAiJHtGSUxFX0RJUk5BTUV9LyR7QlBOfSIsICIke0ZJTEVfRElSTkFNRX0vZmlsZXMiXSwgZCl9IgorIyBUSElTRElSIG9ubHkgd29ya3MgcHJvcGVybHkgd2l0aCBpbWVkaWF0ZSBleHBhbnNpb24gYXMgaXQgaGFzIHRvIHJ1bgorIyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9jYXRpb24gaXRzIHVzZWQgKDo9KQorVEhJU0RJUiA9ICIke0Bvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSl9IgorCitkZWYgZXh0cmFfcGF0aF9lbGVtZW50cyhkKToKKyAgICBwYXRoID0gIiIKKyAgICBlbGVtZW50cyA9IChkLmdldFZhcignRVhUUkFOQVRJVkVQQVRIJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgZSBpbiBlbGVtZW50czoKKyAgICAgICAgcGF0aCA9IHBhdGggKyAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyIgKyBlICsgIjoiCisgICAgcmV0dXJuIHBhdGgKKworUEFUSF9wcmVwZW5kID0gIiR7QGV4dHJhX3BhdGhfZWxlbWVudHMoZCl9IgorCitkZWYgZ2V0X2xpY19jaGVja3N1bV9maWxlX2xpc3QoZCk6CisgICAgZmlsZWxpc3QgPSBbXQorICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCJMSUNfRklMRVNfQ0hLU1VNIiwgVHJ1ZSkgb3IgJycKKyAgICB0bXBkaXIgPSBkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSkKKworICAgIHVybHMgPSBsaWNfZmlsZXMuc3BsaXQoKQorICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgIyBXZSBvbmx5IGNhcmUgYWJvdXQgaXRlbXMgdGhhdCBhcmUgYWJzb2x1dGUgcGF0aHMgc2luY2UKKyAgICAgICAgIyBhbnkgb3RoZXJzIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IFNSQ19VUkkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKVsyXQorICAgICAgICAgICAgaWYgcGF0aFswXSA9PSAnLyc6CisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKHRtcGRpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKHBhdGggKyAiOiIgKyBzdHIob3MucGF0aC5leGlzdHMocGF0aCkpKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZChkLmdldFZhcignUE4nLCBUcnVlKSArICI6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICIgKyB1cmwpCisgICAgcmV0dXJuICIgIi5qb2luKGZpbGVsaXN0KQorCithZGR0YXNrIGZldGNoCitkb19mZXRjaFtkaXJzXSA9ICIke0RMX0RJUn0iCitkb19mZXRjaFtmaWxlLWNoZWNrc3Vtc10gPSAiJHtAYmIuZmV0Y2guZ2V0X2NoZWNrc3VtX2ZpbGVfbGlzdChkKX0iCitkb19mZXRjaFtmaWxlLWNoZWNrc3Vtc10gKz0gIiAke0BnZXRfbGljX2NoZWNrc3VtX2ZpbGVfbGlzdChkKX0iCitkb19mZXRjaFt2YXJkZXBzXSArPSAiU1JDUkVWIgorcHl0aG9uIGJhc2VfZG9fZmV0Y2goKSB7CisKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KKworYWRkdGFzayB1bnBhY2sgYWZ0ZXIgZG9fZmV0Y2gKK2RvX3VucGFja1tkaXJzXSA9ICIke1dPUktESVJ9IgorcHl0aG9uIGJhc2VfZG9fdW5wYWNrKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIHJvb3RkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisKKyAgICAjIEVuc3VyZSB0aGF0IHdlIGNsZWFudXAgJHtTfS9wYXRjaGVzCisgICAgIyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB3ZSBjYW4gcmVtb3ZlCisgICAgIyB0aGUgZW50aXJlICR7U30gaW4gdGhpcyBjYXNlLgorICAgIHNfZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIHBfZGlyID0gb3MucGF0aC5qb2luKHNfZGlyLCAncGF0Y2hlcycpCisgICAgYmIudXRpbHMucmVtb3ZlKHBfZGlyLCBUcnVlKQorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgICAgIGZldGNoZXIudW5wYWNrKHJvb3RkaXIpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KKworZGVmIHBrZ2FyY2hfbWFwcGluZyhkKToKKyAgICAjIENvbXBhdGliaWxpdHkgbWFwcGluZ3Mgb2YgVFVORV9QS0dBUkNIIChvcHQgaW4pCisgICAgaWYgZC5nZXRWYXIoIlBLR0FSQ0hDT01QQVRfQVJNVjdBIiwgVHJ1ZSk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCJUVU5FX1BLR0FSQ0giLCBUcnVlKSA9PSAiYXJtdjdhLXZmcC1uZW9uIjoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJUVU5FX1BLR0FSQ0giLCAiYXJtdjdhIikKKworZGVmIGdldF9sYXllcnNfYnJhbmNoX3JldihkKToKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBsYXllcnNfYnJhbmNoX3JldiA9IFsiJS0xN3MgPSBcIiVzOiVzXCIiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKKyAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChpLCBOb25lKS5zdHJpcCgpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihpLCBOb25lKSkgXAorICAgICAgICAgICAgZm9yIGkgaW4gbGF5ZXJzXQorICAgIGkgPSBsZW4obGF5ZXJzX2JyYW5jaF9yZXYpLTEKKyAgICBwMSA9IGxheWVyc19icmFuY2hfcmV2W2ldLmZpbmQoIj0iKQorICAgIHMxID0gbGF5ZXJzX2JyYW5jaF9yZXZbaV1bcDE6XQorICAgIHdoaWxlIGkgPiAwOgorICAgICAgICBwMiA9IGxheWVyc19icmFuY2hfcmV2W2ktMV0uZmluZCgiPSIpCisgICAgICAgIHMyPSBsYXllcnNfYnJhbmNoX3JldltpLTFdW3AyOl0KKyAgICAgICAgaWYgczEgPT0gczI6CisgICAgICAgICAgICBsYXllcnNfYnJhbmNoX3JldltpLTFdID0gbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXVswOnAyXQorICAgICAgICAgICAgaSAtPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpIC09IDEKKyAgICAgICAgICAgIHAxID0gbGF5ZXJzX2JyYW5jaF9yZXZbaV0uZmluZCgiPSIpCisgICAgICAgICAgICBzMT0gbGF5ZXJzX2JyYW5jaF9yZXZbaV1bcDE6XQorICAgIHJldHVybiBsYXllcnNfYnJhbmNoX3JldgorCisKK0JVSUxEQ0ZHX0ZVTkNTID8/PSAiYnVpbGRjZmdfdmFycyBnZXRfbGF5ZXJzX2JyYW5jaF9yZXYgYnVpbGRjZmdfbmVlZGVkdmFycyIKK0JVSUxEQ0ZHX0ZVTkNTW3R5cGVdID0gImxpc3QiCisKK2RlZiBidWlsZGNmZ192YXJzKGQpOgorICAgIHN0YXR1c3ZhcnMgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdCVUlMRENGR19WQVJTJywgZCkKKyAgICBmb3IgdmFyIGluIHN0YXR1c3ZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkICclLTE3cyA9ICIlcyInICUgKHZhciwgdmFsdWUpCisKK2RlZiBidWlsZGNmZ19uZWVkZWR2YXJzKGQpOgorICAgIG5lZWRlZF92YXJzID0gb2UuZGF0YS50eXBlZF92YWx1ZSgiQlVJTERDRkdfTkVFREVEVkFSUyIsIGQpCisgICAgcGVzdGVydXNlciA9IFtdCisgICAgZm9yIHYgaW4gbmVlZGVkX3ZhcnM6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHYsIFRydWUpCisgICAgICAgIGlmIG5vdCB2YWwgb3IgdmFsID09ICdJTlZBTElEJzoKKyAgICAgICAgICAgIHBlc3RlcnVzZXIuYXBwZW5kKHYpCisKKyAgICBpZiBwZXN0ZXJ1c2VyOgorICAgICAgICBiYi5mYXRhbCgnVGhlIGZvbGxvd2luZyB2YXJpYWJsZShzKSB3ZXJlIG5vdCBzZXQ6ICVzXG5QbGVhc2Ugc2V0IHRoZW0gZGlyZWN0bHksIG9yIGNob29zZSBhIE1BQ0hJTkUgb3IgRElTVFJPIHRoYXQgc2V0cyB0aGVtLicgJSAnLCAnLmpvaW4ocGVzdGVydXNlcikpCisKK2FkZGhhbmRsZXIgYmFzZV9ldmVudGhhbmRsZXIKK2Jhc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlQ29tcGxldGUiCitweXRob24gYmFzZV9ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGJiLnJ1bnF1ZXVlCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCk6CisgICAgICAgIGlmIG5vdCBlLmRhdGEuZ2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciLCBGYWxzZSk6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciLCBsc2JfZGlzdHJvX2lkZW50aWZpZXIoZS5kYXRhKSkKKyAgICAgICAgZS5kYXRhLnNldFZhcignQkJfVkVSU0lPTicsIGJiLl9fdmVyc2lvbl9fKQorICAgICAgICBwa2dhcmNoX21hcHBpbmcoZS5kYXRhKQorICAgICAgICBvZS51dGlscy5mZWF0dXJlc19iYWNrZmlsbCgiRElTVFJPX0ZFQVRVUkVTIiwgZS5kYXRhKQorICAgICAgICBvZS51dGlscy5mZWF0dXJlc19iYWNrZmlsbCgiTUFDSElORV9GRUFUVVJFUyIsIGUuZGF0YSkKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGUuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHN0YXR1c2xpbmVzID0gW10KKyAgICAgICAgZm9yIGZ1bmMgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQlVJTERDRkdfRlVOQ1MnLCBsb2NhbGRhdGEpOgorICAgICAgICAgICAgZyA9IGdsb2JhbHMoKQorICAgICAgICAgICAgaWYgZnVuYyBub3QgaW4gZzoKKyAgICAgICAgICAgICAgICBiYi53YXJuKCJCdWlsZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uICclcycgZG9lcyBub3QgZXhpc3QiICUgZnVuYykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmxpbmVzID0gZ1tmdW5jXShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgaWYgZmxpbmVzOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXNsaW5lcy5leHRlbmQoZmxpbmVzKQorCisgICAgICAgIHN0YXR1c2hlYWRlciA9IGUuZGF0YS5nZXRWYXIoJ0JVSUxEQ0ZHX0hFQURFUicsIFRydWUpCisgICAgICAgIGJiLnBsYWluKCdcbiVzXG4lc1xuJyAlIChzdGF0dXNoZWFkZXIsICdcbicuam9pbihzdGF0dXNsaW5lcykpKQorCisgICAgIyBUaGlzIGNvZGUgaXMgdG8gc2lsZW5jZSB3YXJuaW5ncyB3aGVyZSB0aGUgU0RLIHZhcmlhYmxlcyBvdmVyd3JpdGUgdGhlIAorICAgICMgdGFyZ2V0IG9uZXMgYW5kIHdlJ2Qgc2VlIGR1bHBpY2F0ZSBrZXkgbmFtZXMgb3ZlcndyaXRpbmcgZWFjaCBvdGhlcgorICAgICMgZm9yIHZhcmlvdXMgUFJFRkVSUkVEX1BST1ZJREVSUworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UpOgorICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfUFJFRklYIiwgVHJ1ZSkgPT0gZS5kYXRhLmdldFZhcigiU0RLX1BSRUZJWCIsIFRydWUpOgorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysiKQorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyIpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVDb21wbGV0ZSk6CisgICAgICAgIGNvbXBsZXRpb25zID0gZS5kYXRhLmV4cGFuZCgiJHtTVEFHSU5HX0RJUn0vc3N0YXRlY29tcGxldGlvbnMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21wbGV0aW9ucyk6CisgICAgICAgICAgICBjbWRzID0gc2V0KCkKKyAgICAgICAgICAgIHdpdGggb3Blbihjb21wbGV0aW9ucywgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGNtZHMgPSBzZXQoZikKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoImNvbXBsZXRpb25fZnVuY3Rpb24iLCAiXG4iLmpvaW4oY21kcykpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyRmxhZygiY29tcGxldGlvbl9mdW5jdGlvbiIsICJmdW5jIiwgIjEiKQorICAgICAgICAgICAgYmIuZGVidWcoMSwgIkV4ZWN1dGluZyBTY2VuZVF1ZXVlIENvbXBsZXRpb24gY29tbWFuZHM6ICVzIiAlICJcbiIuam9pbihjbWRzKSkKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY29tcGxldGlvbl9mdW5jdGlvbiIsIGUuZGF0YSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb21wbGV0aW9ucykKK30KKworQ09ORklHVVJFU1RBTVBGSUxFID0gIiR7V09SS0RJUn0vY29uZmlndXJlLnNzdGF0ZSIKK0NMRUFOQlJPS0VOID0gIjAiCisKK2FkZHRhc2sgY29uZmlndXJlIGFmdGVyIGRvX3BhdGNoCitkb19jb25maWd1cmVbZGlyc10gPSAiJHtCfSIKK2RvX2NvbmZpZ3VyZVtkZXB0YXNrXSA9ICJkb19wb3B1bGF0ZV9zeXNyb290IgorYmFzZV9kb19jb25maWd1cmUoKSB7CisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiAtYSAtZSAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWlmIFsgImBjYXQgJHtDT05GSUdVUkVTVEFNUEZJTEV9YCIgIT0gIiR7QkJfVEFTS0hBU0h9IiBdOyB0aGVuCisJCQljZCAke0J9CisJCQlpZiBbICIke0NMRUFOQlJPS0VOfSIgIT0gIjEiIC1hIFwoIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIFwpIF07IHRoZW4KKwkJCQlvZV9ydW5tYWtlIGNsZWFuCisJCQlmaQorCQkJZmluZCAke0J9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1uYW1lIFwqLmxhIC1kZWxldGUKKwkJZmkKKwlmaQorCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKK30KKworYWRkdGFzayBjb21waWxlIGFmdGVyIGRvX2NvbmZpZ3VyZQorZG9fY29tcGlsZVtkaXJzXSA9ICIke0J9IgorYmFzZV9kb19jb21waWxlKCkgeworCWlmIFsgLWUgTWFrZWZpbGUgLW8gLWUgbWFrZWZpbGUgLW8gLWUgR05VbWFrZWZpbGUgXTsgdGhlbgorCQlvZV9ydW5tYWtlIHx8IGRpZSAibWFrZSBmYWlsZWQiCisJZWxzZQorCQliYm5vdGUgIm5vdGhpbmcgdG8gY29tcGlsZSIKKwlmaQorfQorCithZGR0YXNrIGluc3RhbGwgYWZ0ZXIgZG9fY29tcGlsZQorZG9faW5zdGFsbFtkaXJzXSA9ICIke0R9ICR7Qn0iCisjIFJlbW92ZSBhbmQgcmUtY3JlYXRlICR7RH0gc28gdGhhdCBpcyBpdCBndWFyYW50ZWVkIHRvIGJlIGVtcHR5Citkb19pbnN0YWxsW2NsZWFuZGlyc10gPSAiJHtEfSIKKworYmFzZV9kb19pbnN0YWxsKCkgeworCToKK30KKworYmFzZV9kb19wYWNrYWdlKCkgeworCToKK30KKworYWRkdGFzayBidWlsZCBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290Citkb19idWlsZFtub2V4ZWNdID0gIjEiCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX2RlcGxveSIKK2RvX2J1aWxkICgpIHsKKwk6Cit9CisKK2RlZiBzZXRfcGFja2FnZXRyaXBsZXQoZCk6CisgICAgYXJjaHMgPSBbXQorICAgIHRvcyA9IFtdCisgICAgdHZzID0gW10KKworICAgIGFyY2hzLmFwcGVuZChkLmdldFZhcigiUEFDS0FHRV9BUkNIUyIsIFRydWUpLnNwbGl0KCkpCisgICAgdG9zLmFwcGVuZChkLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkpCisgICAgdHZzLmFwcGVuZChkLmdldFZhcigiVEFSR0VUX1ZFTkRPUiIsIFRydWUpKQorCisgICAgZGVmIHNldHRyaXBsZXQoZCwgdmFybmFtZSwgYXJjaHMsIHRvcywgdHZzKToKKyAgICAgICAgdHJpcGxldHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYXJjaHMpKToKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzW2ldOgorICAgICAgICAgICAgICAgIHRyaXBsZXRzLmFwcGVuZChhcmNoICsgdHZzW2ldICsgIi0iICsgdG9zW2ldKQorICAgICAgICB0cmlwbGV0cy5yZXZlcnNlKCkKKyAgICAgICAgZC5zZXRWYXIodmFybmFtZSwgIiAiLmpvaW4odHJpcGxldHMpKQorCisgICAgc2V0dHJpcGxldChkLCAiUEtHVFJJUExFVFMiLCBhcmNocywgdG9zLCB0dnMpCisKKyAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCisgICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgYXJjaHMuYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpKQorICAgICAgICB0b3MuYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpKQorICAgICAgICB0dnMuYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBUcnVlKSkKKworICAgIHNldHRyaXBsZXQoZCwgIlBLR01MVFJJUExFVFMiLCBhcmNocywgdG9zLCB0dnMpCisKK3B5dGhvbiAoKSB7CisgICAgaW1wb3J0IHN0cmluZywgcmUKKworICAgICMgSGFuZGxlIFBBQ0tBR0VDT05GSUcKKyAgICAjCisgICAgIyBUaGVzZSB0YWtlIHRoZSBmb3JtOgorICAgICMKKyAgICAjIFBBQ0tBR0VDT05GSUcgPz89ICI8ZGVmYXVsdCBvcHRpb25zPiIKKyAgICAjIFBBQ0tBR0VDT05GSUdbZm9vXSA9ICItLWVuYWJsZS1mb28sLS1kaXNhYmxlLWZvbyxmb29fZGVwZW5kcyxmb29fcnVudGltZV9kZXBlbmRzIgorICAgIHBrZ2NvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpIG9yIHt9CisgICAgaWYgcGtnY29uZmlnZmxhZ3M6CisgICAgICAgIHBrZ2NvbmZpZyA9IChkLmdldFZhcignUEFDS0FHRUNPTkZJRycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisKKyAgICAgICAgZGVmIGV4cGFuZEZpbHRlcihhcHBlbmRzLCBleHRlbnNpb24sIHByZWZpeCk6CisgICAgICAgICAgICBhcHBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZXhwYW5kKCIgIi5qb2luKGFwcGVuZHMpKSkKKyAgICAgICAgICAgIG5ld2FwcGVuZHMgPSBbXQorICAgICAgICAgICAgZm9yIGEgaW4gYXBwZW5kczoKKyAgICAgICAgICAgICAgICBpZiBhLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgKCItY3Jvc3MtIiBpbiBhKToKKyAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQoYSkKKyAgICAgICAgICAgICAgICBlbGlmIGEuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgICAgICAgICAgc3VicyA9IGEuc3BsaXQoIi8iLCAxKVsxXQorICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZCgidmlydHVhbC8iICsgcHJlZml4ICsgc3VicyArIGV4dGVuc2lvbikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBhLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2FwcGVuZHMuYXBwZW5kKGEgKyBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZChwcmVmaXggKyBhICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgcmV0dXJuIG5ld2FwcGVuZHMKKworICAgICAgICBkZWYgYXBwZW5kVmFyKHZhcm5hbWUsIGFwcGVuZHMpOgorICAgICAgICAgICAgaWYgbm90IGFwcGVuZHM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiB2YXJuYW1lLmZpbmQoIkRFUEVORFMiKSAhPSAtMToKKyAgICAgICAgICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZHMgPSBleHBhbmRGaWx0ZXIoYXBwZW5kcywgIiIsICJuYXRpdmVzZGstIikKKyAgICAgICAgICAgICAgICBpZiBwbi5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICItbmF0aXZlIiwgIiIpCisgICAgICAgICAgICAgICAgaWYgbWxwcmVmaXg6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZHMgPSBleHBhbmRGaWx0ZXIoYXBwZW5kcywgIiIsIG1scHJlZml4KQorICAgICAgICAgICAgdmFybmFtZSA9IGQuZXhwYW5kKHZhcm5hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcih2YXJuYW1lLCAiICIgKyAiICIuam9pbihhcHBlbmRzKSkKKworICAgICAgICBleHRyYWRlcHMgPSBbXQorICAgICAgICBleHRyYXJkZXBzID0gW10KKyAgICAgICAgZXh0cmFjb25mID0gW10KKyAgICAgICAgZm9yIGZsYWcsIGZsYWd2YWwgaW4gc29ydGVkKHBrZ2NvbmZpZ2ZsYWdzLml0ZW1zKCkpOgorICAgICAgICAgICAgaXRlbXMgPSBmbGFndmFsLnNwbGl0KCIsIikKKyAgICAgICAgICAgIG51bSA9IGxlbihpdGVtcykKKyAgICAgICAgICAgIGlmIG51bSA+IDQ6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoIk9ubHkgZW5hYmxlLGRpc2FibGUsZGVwZW5kLHJkZXBlbmQgY2FuIGJlIHNwZWNpZmllZCEiKQorCisgICAgICAgICAgICBpZiBmbGFnIGluIHBrZ2NvbmZpZzoKKyAgICAgICAgICAgICAgICBpZiBudW0gPj0gMyBhbmQgaXRlbXNbMl06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhZGVwcy5hcHBlbmQoaXRlbXNbMl0pCisgICAgICAgICAgICAgICAgaWYgbnVtID49IDQgYW5kIGl0ZW1zWzNdOgorICAgICAgICAgICAgICAgICAgICBleHRyYXJkZXBzLmFwcGVuZChpdGVtc1szXSkKKyAgICAgICAgICAgICAgICBpZiBudW0gPj0gMSBhbmQgaXRlbXNbMF06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY29uZi5hcHBlbmQoaXRlbXNbMF0pCisgICAgICAgICAgICBlbGlmIG51bSA+PSAyIGFuZCBpdGVtc1sxXToKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjb25mLmFwcGVuZChpdGVtc1sxXSkKKyAgICAgICAgYXBwZW5kVmFyKCdERVBFTkRTJywgZXh0cmFkZXBzKQorICAgICAgICBhcHBlbmRWYXIoJ1JERVBFTkRTXyR7UE59JywgZXh0cmFyZGVwcykKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY21ha2UnLCBkKToKKyAgICAgICAgICAgIGFwcGVuZFZhcignRVhUUkFfT0VDTUFLRScsIGV4dHJhY29uZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFwcGVuZFZhcignRVhUUkFfT0VDT05GJywgZXh0cmFjb25mKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGxpY2Vuc2UgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgaWYgbGljZW5zZSA9PSAiSU5WQUxJRCI6CisgICAgICAgIGJiLmZhdGFsKCdUaGlzIHJlY2lwZSBkb2VzIG5vdCBoYXZlIHRoZSBMSUNFTlNFIGZpZWxkIHNldCAoJXMpJyAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbGljZW5zZScsIGQpOgorICAgICAgICBjaGVja19saWNlbnNlX2Zvcm1hdChkKQorICAgICAgICB1bm1hdGNoZWRfbGljZW5zZV9mbGFnID0gY2hlY2tfbGljZW5zZV9mbGFncyhkKQorICAgICAgICBpZiB1bm1hdGNoZWRfbGljZW5zZV9mbGFnOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIlNraXBwaW5nICVzIGJlY2F1c2UgaXQgaGFzIGEgcmVzdHJpY3RlZCBsaWNlbnNlIG5vdCIKKyAgICAgICAgICAgICAgICAgIiB3aGl0ZWxpc3RlZCBpbiBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCIgJSBwbikKKyAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJiZWNhdXNlIGl0IGhhcyBhIHJlc3RyaWN0ZWQgbGljZW5zZSBub3QiCisgICAgICAgICAgICAgICAgICIgd2hpdGVsaXN0ZWQgaW4gTElDRU5TRV9GTEFHU19XSElURUxJU1QiKQorCisgICAgIyBJZiB3ZSdyZSBidWlsZGluZyBhIHRhcmdldCBwYWNrYWdlIHdlIG5lZWQgdG8gdXNlIGZha2Vyb290IChwc2V1ZG8pCisgICAgIyBpbiBvcmRlciB0byBjYXB0dXJlIHBlcm1pc3Npb25zLCBvd25lcnMsIGdyb3VwcyBhbmQgc3BlY2lhbCBmaWxlcworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3VtYXNrJywgJzAyMicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fY29uZmlndXJlJywgJ3VtYXNrJywgJzAyMicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fY29tcGlsZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2luc3RhbGwnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW5zdGFsbCcsICdmYWtlcm9vdCcsIDEpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW5zdGFsbCcsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZScsICdmYWtlcm9vdCcsIDEpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfc2V0c2NlbmUnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfc2V0c2NlbmUnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fZGV2c2hlbGwnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RldnNoZWxsJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgIHNvdXJjZV9taXJyb3JfZmV0Y2ggPSBkLmdldFZhcignU09VUkNFX01JUlJPUl9GRVRDSCcsIDApCisgICAgaWYgbm90IHNvdXJjZV9taXJyb3JfZmV0Y2g6CisgICAgICAgIG5lZWRfaG9zdCA9IGQuZ2V0VmFyKCdDT01QQVRJQkxFX0hPU1QnLCBUcnVlKQorICAgICAgICBpZiBuZWVkX2hvc3Q6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIHRoaXNfaG9zdCA9IGQuZ2V0VmFyKCdIT1NUX1NZUycsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcmUubWF0Y2gobmVlZF9ob3N0LCB0aGlzX2hvc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCBob3N0ICVzIChub3QgaW4gQ09NUEFUSUJMRV9IT1NUKSIgJSB0aGlzX2hvc3QpCisKKyAgICAgICAgbmVlZF9tYWNoaW5lID0gZC5nZXRWYXIoJ0NPTVBBVElCTEVfTUFDSElORScsIFRydWUpCisgICAgICAgIGlmIG5lZWRfbWFjaGluZToKKyAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgY29tcGF0X21hY2hpbmVzID0gKGQuZ2V0VmFyKCdNQUNISU5FT1ZFUlJJREVTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGZvciBtIGluIGNvbXBhdF9tYWNoaW5lczoKKyAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChuZWVkX21hY2hpbmUsIG0pOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggbWFjaGluZSAlcyAobm90IGluIENPTVBBVElCTEVfTUFDSElORSkiICUgZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSkKKworCisgICAgICAgIGJhZF9saWNlbnNlcyA9IChkLmdldFZhcignSU5DT01QQVRJQkxFX0xJQ0VOU0UnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIGNoZWNrX2xpY2Vuc2UgPSBGYWxzZSBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikgZWxzZSBUcnVlCisgICAgICAgIGZvciB0IGluIFsiLW5hdGl2ZSIsICItY3Jvc3MtJHtUQVJHRVRfQVJDSH0iLCAiLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iLAorICAgICAgICAgICAgICAiLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IiwgIi1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9IiwKKyAgICAgICAgICAgICAgIi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9Il06CisgICAgICAgICAgICBpZiBwbi5lbmRzd2l0aChkLmV4cGFuZCh0KSk6CisgICAgICAgICAgICAgICAgY2hlY2tfbGljZW5zZSA9IEZhbHNlCisgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoImdjYy1zb3VyY2UtIik6CisgICAgICAgICAgICBjaGVja19saWNlbnNlID0gRmFsc2UKKworICAgICAgICBpZiBjaGVja19saWNlbnNlIGFuZCBiYWRfbGljZW5zZXM6CisgICAgICAgICAgICBiYWRfbGljZW5zZXMgPSBleHBhbmRfd2lsZGNhcmRfbGljZW5zZXMoZCwgYmFkX2xpY2Vuc2VzKQorCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBbXQorICAgICAgICAgICAgaW5jb21wYXR3bCA9IFtdCisgICAgICAgICAgICBodGluY29tcGF0d2wgPSBbXQorICAgICAgICAgICAgZm9yIGxpYyBpbiBiYWRfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgc3BkeF9saWNlbnNlID0gcmV0dXJuX3NwZHgoZCwgbGljKQorICAgICAgICAgICAgICAgIGZvciB3IGluIFsiSE9TVFRPT0xTX1dISVRFTElTVF8iLCAiTEdQTHYyX1dISVRFTElTVF8iLCAiV0hJVEVMSVNUXyJdOgorICAgICAgICAgICAgICAgICAgICB3aGl0ZWxpc3QuZXh0ZW5kKChkLmdldFZhcih3ICsgbGljLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0LmV4dGVuZCgoZC5nZXRWYXIodyArIHNwZHhfbGljZW5zZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgICcnJworICAgICAgICAgICAgICAgICAgICBXZSBuZWVkIHRvIHRyYWNrIHdoYXQgd2UgYXJlIHdoaXRlbGlzdGluZyBhbmQgd2h5LiBJZiBwbiBpcyAKKyAgICAgICAgICAgICAgICAgICAgaW5jb21wYXRpYmxlIGFuZCBpcyBub3QgSE9TVFRPT0xTX1dISVRFTElTVF8gd2UgbmVlZCB0byBiZSAKKyAgICAgICAgICAgICAgICAgICAgYWJsZSB0byBub3RlIHRoYXQgdGhlIGltYWdlIHRoYXQgaXMgY3JlYXRlZCBtYXkgaW5mYWN0IAorICAgICAgICAgICAgICAgICAgICBjb250YWluIGluY29tcGF0aWJsZSBsaWNlbnNlcyBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIAorICAgICAgICAgICAgICAgICAgICBiZWluZyBzZXQuCisgICAgICAgICAgICAgICAgICAgICcnJworICAgICAgICAgICAgICAgICAgICBpZiAiSE9TVFRPT0xTIiBpbiB3OgorICAgICAgICAgICAgICAgICAgICAgICAgaHRpbmNvbXBhdHdsLmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGR4X2xpY2Vuc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRpbmNvbXBhdHdsLmV4dGVuZCgoZC5nZXRWYXIodyArIHNwZHhfbGljZW5zZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbXBhdHdsLmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGR4X2xpY2Vuc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorCisgICAgICAgICAgICBpZiBub3QgcG4gaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIHJlY2lwZV9saWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgICAgICAgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgc2tpcHBlZF9wa2dzID0gW10KKyAgICAgICAgICAgICAgICB1bnNraXBwZWRfcGtncyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmNvbXBhdGlibGVfbGljZW5zZShkLCBiYWRfbGljZW5zZXMsIHBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkX3BrZ3MuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2tpcHBlZF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgYWxsX3NraXBwZWQgPSBza2lwcGVkX3BrZ3MgYW5kIG5vdCB1bnNraXBwZWRfcGtncworICAgICAgICAgICAgICAgIGlmIHVuc2tpcHBlZF9wa2dzOgorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTS0lQUElORyB0aGUgcGFja2FnZSAiICsgcGtnICsgIiBhdCBkb19yb290ZnMgYmVjYXVzZSBpdCdzICIgKyByZWNpcGVfbGljZW5zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdMSUNFTlNFX0VYQ0xVU0lPTi0nICsgcGtnLCAxKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHVuc2tpcHBlZF9wa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIklOQ0xVRElORyB0aGUgcGFja2FnZSAiICsgcGtnKQorICAgICAgICAgICAgICAgIGVsaWYgYWxsX3NraXBwZWQgb3IgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgYmFkX2xpY2Vuc2VzKToKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIlNLSVBQSU5HIHJlY2lwZSAlcyBiZWNhdXNlIGl0J3MgJXMiICUgKHBuLCByZWNpcGVfbGljZW5zZSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCBsaWNlbnNlICVzIiAlIHJlY2lwZV9saWNlbnNlKQorICAgICAgICAgICAgZWxpZiBwbiBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgcG4gaW4gaW5jb21wYXR3bDoKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiSU5DTFVESU5HICIgKyBwbiArICIgYXMgYnVpbGRhYmxlIGRlc3BpdGUgSU5DT01QQVRJQkxFX0xJQ0VOU0UgYmVjYXVzZSBpdCBoYXMgYmVlbiB3aGl0ZWxpc3RlZCIpCisgICAgICAgICAgICAgICAgZWxpZiBwbiBpbiBodGluY29tcGF0d2w6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklOQ0xVRElORyAiICsgcG4gKyAiIGFzIGJ1aWxkYWJsZSBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIGJlY2F1c2UgaXQgaGFzIGJlZW4gd2hpdGVsaXN0ZWQgZm9yIEhPU1RUT09MUyIpCisKKyAgICBzcmN1cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpCisgICAgIyBTdm4gcGFja2FnZXMgc2hvdWxkIERFUEVORCBvbiBzdWJ2ZXJzaW9uLW5hdGl2ZQorICAgIGlmICJzdm46Ly8iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19mZXRjaCcsICdkZXBlbmRzJywgJyBzdWJ2ZXJzaW9uLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgR2l0IHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gZ2l0LW5hdGl2ZQorICAgIGlmICJnaXQ6Ly8iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19mZXRjaCcsICdkZXBlbmRzJywgJyBnaXQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyBNZXJjdXJpYWwgcGFja2FnZXMgc2hvdWxkIERFUEVORCBvbiBtZXJjdXJpYWwtbmF0aXZlCisgICAgZWxpZiAiaGc6Ly8iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19mZXRjaCcsICdkZXBlbmRzJywgJyBtZXJjdXJpYWwtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyBPU0MgcGFja2FnZXMgc2hvdWxkIERFUEVORCBvbiBvc2MtbmF0aXZlCisgICAgZWxpZiAib3NjOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgb3NjLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgKi5sejQgc2hvdWxkIGRlcGVuZHMgb24gbHo0LW5hdGl2ZSBmb3IgdW5wYWNraW5nCisgICAgIyBOb3QgZW5kc3dpdGggYmVjYXVzZSBvZiAiKi5wYXRjaC5sejQ7cGF0Y2g9MSIuIE5lZWQgYmIuZmV0Y2guZGVjb2RldXJsIGluIGZ1dHVyZQorICAgIGlmICcubHo0JyBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIGx6NC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjICoueHogc2hvdWxkIGRlcGVuZHMgb24geHotbmF0aXZlIGZvciB1bnBhY2tpbmcKKyAgICAjIE5vdCBlbmRzd2l0aCBiZWNhdXNlIG9mICIqLnBhdGNoLnh6O3BhdGNoPTEiLiBOZWVkIGJiLmZldGNoLmRlY29kZXVybCBpbiBmdXR1cmUKKyAgICBpZiAnLnh6JyBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIHh6LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgdW56aXAtbmF0aXZlIHNob3VsZCBhbHJlYWR5IGJlIHN0YWdlZCBiZWZvcmUgdW5wYWNraW5nIFpJUCByZWNpcGVzCisgICAgaWYgIi56aXAiIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgdW56aXAtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyBmaWxlIGlzIG5lZWRlZCBieSBycG0yY3Bpby5zaAorICAgIGlmICIuc3JjLnJwbSIgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyBmaWxlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgIHNldF9wYWNrYWdldHJpcGxldChkKQorCisgICAgIyAnbXVsdGltYWNoaW5lJyBoYW5kbGluZworICAgIG1hY2hfYXJjaCA9IGQuZ2V0VmFyKCdNQUNISU5FX0FSQ0gnLCBUcnVlKQorICAgIHBrZ19hcmNoID0gZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpCisKKyAgICBpZiAocGtnX2FyY2ggPT0gbWFjaF9hcmNoKToKKyAgICAgICAgIyBBbHJlYWR5IG1hY2hpbmUgc3BlY2lmaWMgLSBub3RoaW5nIGZ1cnRoZXIgdG8gZG8KKyAgICAgICAgcmV0dXJuCisKKyAgICAjCisgICAgIyBXZSBhbHdheXMgdHJ5IHRvIHNjYW4gU1JDX1VSSSBmb3IgdXJscyB3aXRoIG1hY2hpbmUgb3ZlcnJpZGVzCisgICAgIyB1bmxlc3MgdGhlIHBhY2thZ2Ugc2V0cyBTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g9MAorICAgICMKKyAgICBvdmVycmlkZSA9IGQuZ2V0VmFyKCdTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0gnLCBUcnVlKQorICAgIGlmIG92ZXJyaWRlICE9ICcwJzoKKyAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICBmcGF0aHMgPSAoZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpCisgICAgICAgIG1hY2hpbmUgPSBkLmdldFZhcignTUFDSElORScsIFRydWUpCisgICAgICAgIGZvciBwIGluIGZwYXRoczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocCkgPT0gbWFjaGluZSBhbmQgb3MucGF0aC5pc2RpcihwKToKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQocCkKKworICAgICAgICBpZiBsZW4ocGF0aHMpICE9IDA6CisgICAgICAgICAgICBmb3IgcyBpbiBzcmN1cmkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgcy5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbc10sIGQpCisgICAgICAgICAgICAgICAgbG9jYWwgPSBmZXRjaGVyLmxvY2FscGF0aChzKQorICAgICAgICAgICAgICAgIGZvciBtcCBpbiBwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWwuc3RhcnRzd2l0aChtcCk6CisgICAgICAgICAgICAgICAgICAgICAgICAjYmIubm90ZSgib3ZlcnJpZGluZyBQQUNLQUdFX0FSQ0ggZnJvbSAlcyB0byAlcyBmb3IgJXMiICUgKHBrZ19hcmNoLCBtYWNoX2FyY2gsIHBuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCAiJHtNQUNISU5FX0FSQ0h9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnYXJjaCA9IGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hfJXMiICUgcGtnLCBUcnVlKQorCisgICAgICAgICMgV2UgY291bGQgbG9vayBmb3IgIT0gUEFDS0FHRV9BUkNIIGhlcmUgYnV0IGhvdyB0byBjaG9vc2UKKyAgICAgICAgIyBpZiBtdWx0aXBsZSBkaWZmZXJlbmNlcyBhcmUgcHJlc2VudD8KKyAgICAgICAgIyBMb29rIHRocm91Z2ggUEFDS0FHRV9BUkNIUyBmb3IgdGhlIHByaW9yaXR5IG9yZGVyPworICAgICAgICBpZiBwa2dhcmNoIGFuZCBwa2dhcmNoID09IG1hY2hfYXJjaDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCAiJHtNQUNISU5FX0FSQ0h9IikKKyAgICAgICAgICAgIGJiLndhcm4oIlJlY2lwZSAlcyBpcyBtYXJrZWQgYXMgb25seSBiZWluZyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYnV0IHNlZW1zIHRvIGhhdmUgbWFjaGluZSBzcGVjaWZpYyBwYWNrYWdlcz8hIFRoZSByZWNpcGUgbWF5IGFzIHdlbGwgbWFyayBpdHNlbGYgYXMgbWFjaGluZSBzcGVjaWZpYyBkaXJlY3RseS4iICUgZC5nZXRWYXIoIlBOIiwgVHJ1ZSkpCit9CisKK2FkZHRhc2sgY2xlYW5zc3RhdGUgYWZ0ZXIgZG9fY2xlYW4KK3B5dGhvbiBkb19jbGVhbnNzdGF0ZSgpIHsKKyAgICAgICAgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZXMoZCkKK30KKworYWRkdGFzayBjbGVhbmFsbCBhZnRlciBkb19jbGVhbnNzdGF0ZQorcHl0aG9uIGRvX2NsZWFuYWxsKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICAgICBmZXRjaGVyLmNsZWFuKCkKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KK2RvX2NsZWFuYWxsW25vc3RhbXBdID0gIjEiCisKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19mZXRjaCBkb191bnBhY2sgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19wYWNrYWdlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9iaW5fcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MmI3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDM2IEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb21tb24gdmFyaWFibGUgYW5kIHRhc2sgZm9yIHRoZSBiaW5hcnkgcGFja2FnZSByZWNpcGUuCisjIEJhc2ljIHByaW5jaXBsZToKKyMgKiBUaGUgZmlsZXMgaGF2ZSBiZWVuIHVucGFja2VkIHRvICR7U30gYnkgYmFzZS5iYmNsYXNzCisjICogU2tpcCBkb19jb25maWd1cmUgYW5kIGRvX2NvbXBpbGUKKyMgKiBVc2UgZG9faW5zdGFsbCB0byBpbnN0YWxsIHRoZSBmaWxlcyB0byAke0R9CisjCisjIE5vdGU6CisjIFRoZSAic3ViZGlyIiBwYXJhbWV0ZXIgaW4gdGhlIFNSQ19VUkkgaXMgdXNlZnVsIHdoZW4gdGhlIGlucHV0IHBhY2thZ2UKKyMgaXMgcnBtLCBpcGssIGRlYiBhbmQgc28gb24sIGZvciBleGFtcGxlOgorIworIyBTUkNfVVJJID0gImh0dHA6Ly9mb28uY29tL2Zvby0xLjAtcjEuaTU4Ni5ycG07c3ViZGlyPWZvby0xLjAiCisjCisjIFRoZW4gdGhlIGZpbGVzIHdvdWxkIGJlIHVucGFja2VkIHRvICR7V09SS0RJUn0vZm9vLTEuMCwgb3RoZXJ3aXNlCisjIHRoZXkgd291bGQgYmUgaW4gJHtXT1JLRElSfS4KKyMKKworIyBTa2lwIHRoZSB1bndhbnRlZCBzdGVwcworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCisjIEluc3RhbGwgdGhlIGZpbGVzIHRvICR7RH0KK2Jpbl9wYWNrYWdlX2RvX2luc3RhbGwgKCkgeworICAgICMgRG8gaXQgY2FyZWZ1bGx5CisgICAgWyAtZCAiJHtTfSIgXSB8fCBleGl0IDEKKyAgICBjZCAke1N9IHx8IGV4aXQgMQorICAgIHRhciAtLW5vLXNhbWUtb3duZXIgLS1leGNsdWRlPScuL3BhdGNoZXMnIC0tZXhjbHVkZT0nLi8ucGMnIC1jcGYgLSAuIFwKKyAgICAgICAgfCB0YXIgLS1uby1zYW1lLW93bmVyIC14cGYgLSAtQyAke0R9Cit9CisKK0ZJTEVTXyR7UE59ID0gIi8iCisKK0VYUE9SVF9GVU5DVElPTlMgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMmE2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MKQEAgLTAsMCArMSwyOSBAQAorIworIyBDbGFzcyB0byBkaXNhYmxlIGJpbmNvbmZpZyBmaWxlcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgdGhlbQorIworCisjIFRoZSBsaXN0IG9mIHNjcmlwdHMgd2hpY2ggc2hvdWxkIGJlIGRpc2FibGVkLgorQklOQ09ORklHID89ICIiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9LyotY29uZmlnIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJZm9yIHggaW4gJHtCSU5DT05GSUd9OyBkbworCQkjIE1ha2UgdGhlIGRpc2FibGVkIHNjcmlwdCBlbWl0IGludmFsaWQgcGFyYW1ldGVycyBmb3IgdGhvc2UgY29uZmlndXJlCisJCSMgc2NyaXB0cyB3aGljaCBjYWxsIGl0IHdpdGhvdXQgY2hlY2tpbmcgdGhlIHJldHVybiBjb2RlLgorCQllY2hvICIjIS9iaW4vc2giID4gJHtEfSR4CisJCWVjaG8gImVjaG8gJ0VSUk9SOiAkeCBzaG91bGQgbm90IGJlIHVzZWQsIHVzZSBhbiBhbHRlcm5hdGl2ZSBzdWNoIGFzIHBrZy1jb25maWcnID4mMiIgPj4gJHtEfSR4CisJCWVjaG8gImVjaG8gJy0tc2hvdWxkLW5vdC1oYXZlLXVzZWQtJHgnIiA+PiAke0R9JHgKKwkJZWNobyAiZXhpdCAxIiA+PiAke0R9JHgKKwlkb25lCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX2Rpc2FibGVkX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX2Rpc2FibGVkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZm9yIHggaW4gJHtCSU5DT05GSUd9OyBkbworCQljb25maWduYW1lPWBiYXNlbmFtZSAkeGAKKwkJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJCWluc3RhbGwgJHtEfSR4ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjNDE3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9iaW5jb25maWcuYmJjbGFzcwpAQCAtMCwwICsxLDYzIEBACitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS8qLWNvbmZpZyIKKyAKKyMgVGhlIG5hbWVzcGFjZXMgY2FuIGNsYXNoIGhlcmUgaGVuY2UgdGhlIHR3byBzdGVwIHJlcGxhY2UKK2RlZiBnZXRfYmluY29uZmlnX21hbmdsZShkKToKKyAgICBzID0gIi1lICcnIgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgb3B0aW9uYWxfcXVvdGUgPSByIlwoXCJcP1wpIgorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtiYXNlX2xpYmRpcn06PVxcMU9FQkFTRUxJQkRJUjo7JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtsaWJkaXJ9Oj1cXDFPRUxJQkRJUjo7JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtpbmNsdWRlZGlyfTo9XFwxT0VJTkNESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7ZGF0YWRpcn06PVxcMU9FREFUQURJUjonIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczo9JXMke3ByZWZpeH0vOj1cXDFPRVBSRUZJWC86JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtleGVjX3ByZWZpeH0vOj1cXDFPRUVYRUNQUkVGSVgvOiciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOi1MJHtsaWJkaXJ9Oi1MT0VMSUJESVI6OyciCisgICAgICAgIHMgKz0gIiAtZSAnczotSSR7aW5jbHVkZWRpcn06LUlPRUlOQ0RJUjo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FQkFTRUxJQkRJUjoke1NUQUdJTkdfQkFTRUxJQkRJUn06OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUxJQkRJUjoke1NUQUdJTkdfTElCRElSfTo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FSU5DRElSOiR7U1RBR0lOR19JTkNESVJ9OjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VEQVRBRElSOiR7U1RBR0lOR19EQVRBRElSfTonIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VQUkVGSVg6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fTonIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VFWEVDUFJFRklYOiR7U1RBR0lOR19ESVJfSE9TVH0ke2V4ZWNfcHJlZml4fTonIgorICAgICAgICBzICs9ICIgLWUgJ3M6LUkke1dPUktESVJ9Oi1JJHtTVEFHSU5HX0lOQ0RJUn06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOi1MJHtXT1JLRElSfTotTCR7U1RBR0lOR19MSUJESVJ9OiciCisgICAgICAgIGlmIGJiLmRhdGEuZ2V0VmFyKCJPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFIiwgZCk6CisgICAgICAgICAgICBzICs9IGJiLmRhdGEuZ2V0VmFyKCJPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFIiwgZCkKKworICAgIHJldHVybiBzCisKK0JJTkNPTkZJR19HTE9CID89ICIqLWNvbmZpZyIKKworUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJiaW5jb25maWdfcGFja2FnZV9wcmVwcm9jZXNzIgorCitiaW5jb25maWdfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwlmb3IgY29uZmlnIGluIGBmaW5kICR7UEtHRH0gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2A7IGRvCisJCXNlZCAtaSBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfQkFTRUxJQkRJUn06JHtiYXNlX2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19MSUJESVJ9OiR7bGliZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0lOQ0RJUn06JHtpbmNsdWRlZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RBVEFESVJ9OiR7ZGF0YWRpcn06JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9OiR7cHJlZml4fTonIFwKKyAgICAgICAgICAgICAgICAgICAgJGNvbmZpZworCWRvbmUKKwlmb3IgbGFmaWxlIGluIGBmaW5kICR7UEtHRH0gLW5hbWUgIioubGEiYCA7IGRvCisJCXNlZCAtaSBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfQkFTRUxJQkRJUn06JHtiYXNlX2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19MSUJESVJ9OiR7bGliZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0lOQ0RJUn06JHtpbmNsdWRlZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RBVEFESVJ9OiR7ZGF0YWRpcn06JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9OiR7cHJlZml4fTonIFwKKwkJICAgICRsYWZpbGUKKwlkb25lCSAgICAKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJiaW5jb25maWdfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitiaW5jb25maWdfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlmb3IgY29uZmlnIGluIGBmaW5kICR7U30gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2AgYGZpbmQgJHtCfSAtbmFtZSAnJHtCSU5DT05GSUdfR0xPQn0nYDsgZG8KKwkJY29uZmlnbmFtZT1gYmFzZW5hbWUgJGNvbmZpZ2AKKwkJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJCXNlZCAke0BnZXRfYmluY29uZmlnX21hbmdsZShkKX0gJGNvbmZpZyA+ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vJGNvbmZpZ25hbWUKKwkJY2htb2QgdSt4ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vJGNvbmZpZ25hbWUKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxNDFhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ibGFja2xpc3QuYmJjbGFzcwpAQCAtMCwwICsxLDQ1IEBACisjIGFub255bW91cyBzdXBwb3J0IGNsYXNzIGZyb20gb3JpZ2luYWxseSBmcm9tIGFuZ3N0cm9tCisjIAorIyBUbyB1c2UgdGhlIGJsYWNrbGlzdCwgYSBkaXN0cmlidXRpb24gc2hvdWxkIGluY2x1ZGUgdGhpcworIyBjbGFzcyBpbiB0aGUgSU5IRVJJVF9ESVNUUk8KKyMKKyMgTm8gbG9uZ2VyIHVzZSBBTkdTVFJPTV9CTEFDS0xJU1QsIGluc3RlYWQgdXNlIGEgdGFibGUgb2YKKyMgcmVjaXBlcyBpbiBQTkJMQUNLTElTVAorIworIyBGZWF0dXJlczoKKyMKKyMgKiBUbyBhZGQgYSBwYWNrYWdlIHRvIHRoZSBibGFja2xpc3QsIHNldDoKKyMgICBQTkJMQUNLTElTVFtwbl0gPSAibWVzc2FnZSIKKyMKKworIyBDb3BlIHdpdGggUE5CTEFDS0xJU1QgZmxhZ3MgZm9yIG11bHRpbGliIGNhc2UKK2FkZGhhbmRsZXIgYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcgorYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCIKK3B5dGhvbiBibGFja2xpc3RfbXVsdGlsaWJfZXZlbnRoYW5kbGVyKCkgeworICAgIG11bHRpbGlicyA9IGUuZGF0YS5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpCisgICAgaWYgbm90IG11bHRpbGliczoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIHRoaXMgYmxvY2sgaGFzIGJlZW4gY29waWVkIGZyb20gYmFzZS5iYmNsYXNzIHNvIGtlZXAgaXQgaW4gc3luYworICAgIHByZWZpeGVzID0gW10KKyAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICBlZXh0ID0gZXh0LnNwbGl0KCc6JykKKyAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKGVleHRbMV0pCisKKyAgICBibGFja2xpc3RzID0gZS5kYXRhLmdldFZhckZsYWdzKCdQTkJMQUNLTElTVCcpIG9yIHt9CisgICAgZm9yIHBrZywgcmVhc29uIGluIGJsYWNrbGlzdHMuaXRlbXMoKToKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItY3Jvc3NzZGsiKSkgb3IgcGtnLnN0YXJ0c3dpdGgoKCJuYXRpdmVzZGstIiwgInZpcnR1YWwvbmF0aXZlc2RrLSIpKSBvciAnY3Jvc3MtY2FuYWRpYW4nIGluIHBrZzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgbmV3cGtnID0gcCArICItIiArIHBrZworICAgICAgICAgICAgaWYgbm90IGUuZGF0YS5nZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIG5ld3BrZywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgZS5kYXRhLnNldFZhckZsYWcoJ1BOQkxBQ0tMSVNUJywgbmV3cGtnLCByZWFzb24pCit9CisKK3B5dGhvbiAoKSB7CisgICAgYmxhY2tsaXN0ID0gZC5nZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIGQuZ2V0VmFyKCdQTicsIFRydWUpLCBUcnVlKQorCisgICAgaWYgYmxhY2tsaXN0OgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiUmVjaXBlIGlzIGJsYWNrbGlzdGVkOiAlcyIgJSAoYmxhY2tsaXN0KSkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhiNGFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2JsdWV0b290aC5iYmNsYXNzCkBAIC0wLDAgKzEsMTQgQEAKKyMgQXZvaWQgY29kZSBkdXBsaWNhdGlvbiBpbiBibHVldG9vdGgtZGVwZW5kZW50IHJlY2lwZXMuCisKKyMgRGVmaW5lIGEgdmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIHRoZSByZWNpcGUgKHBhY2thZ2UpIHByb3ZpZGluZyBjb3JlCisjIGJsdWV0b290aCBzdXBwb3J0IG9uIHRoZSBwbGF0Zm9ybToKKyMgIiIgaWYgYmx1ZXRvb3RoIGlzIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMKKyMgZWxzZSAiYmx1ZXo1IiBpZiBibHVlejUgaXMgaW4gRElTVFJPX0ZFQVRVUkVTCisjIGVsc2UgImJsdWV6NCIKKworIyBVc2UgdGhpcyB3aXRoOgorIyAgaW5oZXJpdCBibHVldG9vdGgKKyMgIFBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICcke0JMVUVafScsICcnLCBkKX0KKyMgIFBBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVlejQsLS1kaXNhYmxlLWJsdWV6NCxibHVlejQiCisKK0JMVUVaID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXo1JywgJ2JsdWV6NScsICdibHVlejQnLCBkKSwgJycsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDBlMjFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Jvb3QtZGlyZWN0ZGlzay5iYmNsYXNzCkBAIC0wLDAgKzEsMTk0IEBACisjIGJvb3QtZGlyZWN0ZGlzay5iYmNsYXNzCisjIChsb29zbHkgYmFzZWQgb2ZmIGJvb3RpbWcuYmJjbGFzcyBDb3B5cmlnaHQgKEMpIDIwMDQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4pCisjCisjIENyZWF0ZSBhbiBpbWFnZSB3aGljaCBjYW4gYmUgcGxhY2VkIGRpcmVjdGx5IG9udG8gYSBoYXJkZGlzayB1c2luZyBkZCBhbmQgdGhlbgorIyBib290ZWQuCisjCisjIFRoaXMgdXNlcyBzeXNsaW51eC4gZXh0bGludXggd291bGQgaGF2ZSBiZWVuIG5pY2UgYnV0IHJlcXVpcmVkIHRoZSBleHQyLzMgCisjIHBhcnRpdGlvbiB0byBiZSBtb3VudGVkLiBncnViIHJlcXVpcmVzIHRvIHJ1biBpdHNlbGYgYXMgcGFydCBvZiB0aGUgaW5zdGFsbCAKKyMgcHJvY2Vzcy4KKyMKKyMgVGhlIGVuZCByZXN1bHQgaXMgYSA1MTIgYm9vdCBzZWN0b3IgcG9wdWxhdGVkIHdpdGggYW4gTUJSIGFuZCBwYXJ0aXRpb24gdGFibGUKKyMgZm9sbG93ZWQgYnkgYW4gbXNkb3MgZmF0MTYgcGFydGl0aW9uIGNvbnRhaW5pbmcgc3lzbGludXggYW5kIGEgbGludXgga2VybmVsCisjIGNvbXBsZXRlZCBieSB0aGUgZXh0Mi8zIHJvb3Rmcy4KKyMKKyMgV2UgaGF2ZSB0byBwdXNoIHRoZSBtc2RvcyBwYXJpdGlvbiB0YWJsZSBzaXplID4gMTZNQiBzbyBmYXQgMTYgaXMgdXNlZCBhcyBwYXJ0ZWQKKyMgd29uJ3QgdG91Y2ggZmF0MTIgcGFydGl0aW9ucy4KKworIyBFeHRlcm5hbCB2YXJpYWJsZXMgbmVlZGVkCisKKyMgJHtST09URlN9IC0gdGhlIHJvb3RmcyBpbWFnZSB0byBpbmNvcnBvcmF0ZQorCitkb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiZG9zZnN0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbC9rZXJuZWw6ZG9fZGVwbG95IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eDpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGVkLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgIgorCitQQUNLQUdFUyA9ICIgIgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0JPT1RERF9WT0xVTUVfSUQgICA/PSAiYm9vdCIKK0JPT1RERF9FWFRSQV9TUEFDRSA/PSAiMTYzODQiCisKK0VGSSA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMSIsICIwIiwgZCl9IgorRUZJX1BST1ZJREVSID89ICJncnViLWVmaSIKK0VGSV9DTEFTUyA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiJHtFRklfUFJPVklERVJ9IiwgIiIsIGQpfSIKKworIyBJbmNsdWRlIGxlZ2FjeSBib290IGlmIE1BQ0hJTkVfRkVBVFVSRVMgaW5jbHVkZXMgInBjYmlvcyIgb3IgaWYgaXQgZG9lcyBub3QKKyMgY29udGFpbiAiZWZpIi4gVGhpcyB3YXkgbGVnYWN5IGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0IGlmIG5laXRoZXIgaXMKKyMgc3BlY2lmaWVkLCBtYWludGFpbmluZyB0aGUgb3JpZ2luYWwgYmVoYXZpb3IuCitkZWYgcGNiaW9zKGQpOgorICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjYmlvcyIsICIxIiwgIjAiLCBkKQorICAgIGlmIHBjYmlvcyA9PSAiMCI6CisgICAgICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIwIiwgIjEiLCBkKQorICAgIHJldHVybiBwY2Jpb3MKKworZGVmIHBjYmlvc19jbGFzcyhkKToKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICByZXR1cm4gInN5c2xpbnV4IgorICAgIHJldHVybiAiIgorCitQQ0JJT1MgPSAiJHtAcGNiaW9zKGQpfSIKK1BDQklPU19DTEFTUyA9ICIke0BwY2Jpb3NfY2xhc3MoZCl9IgorCitpbmhlcml0ICR7UENCSU9TX0NMQVNTfQoraW5oZXJpdCAke0VGSV9DTEFTU30KKworIyBHZXQgdGhlIGJ1aWxkX3N5c2xpbnV4X2NmZygpIGZ1bmN0aW9uIGZyb20gdGhlIHN5c2xpbnV4IGNsYXNzCisKK0FVVE9fU1lTTElOVVhDRkcgPSAiMSIKK0RJU0tfU0lHTkFUVVJFID89ICIke0RJU0tfU0lHTkFUVVJFX0dFTkVSQVRFRH0iCitTWVNMSU5VWF9ST09UID89ICJyb290PS9kZXYvc2RhMiIKK1NZU0xJTlVYX1RJTUVPVVQgPz0gIjEwIgorCitJU19WTSA9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZTVFlQRVMiLCBbInZtZGsiLCAidmRpIiwgInFjb3cyIl0sICJ0cnVlIiwgImZhbHNlIiwgZCl9JworCitib290X2RpcmVjdF9wb3B1bGF0ZSgpIHsKKwlkZXN0PSQxCisJaW5zdGFsbCAtZCAkZGVzdAorCisJIyBJbnN0YWxsIGJ6SW1hZ2UsIGluaXRyZCwgYW5kIHJvb3Rmcy5pbWcgaW4gREVTVCBmb3IgYWxsIGxvYWRlcnMgdG8gdXNlLgorCWlmIFsgLWUgJHtERVBMT1lfRElSX0lNQUdFfS9iekltYWdlIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vYnpJbWFnZSAkZGVzdC92bWxpbnV6CisJZmkKKworCSMgaW5pdHJkIGlzIG1hZGUgb2YgY29uY2F0ZW5hdGlvbiBvZiBtdWx0aXBsZSBmaWxlc3lzdGVtIGltYWdlcworCWlmIFsgLW4gIiR7SU5JVFJEfSIgXTsgdGhlbgorCQlybSAtZiAkZGVzdC9pbml0cmQKKwkJZm9yIGZzIGluICR7SU5JVFJEfQorCQlkbworCQkJaWYgWyAtcyAiJHtmc30iIF07IHRoZW4KKwkJCQljYXQgJHtmc30gPj4gJGRlc3QvaW5pdHJkCisJCQllbHNlCisJCQkJYmJmYXRhbCAiJHtmc30gaXMgaW52YWxpZC4gaW5pdHJkIGltYWdlIGNyZWF0aW9uIGZhaWxlZC4iCisJCQlmaQorCQlkb25lCisJCWNobW9kIDA2NDQgJGRlc3QvaW5pdHJkCisJZmkKK30KKworYnVpbGRfYm9vdF9kZCgpIHsKKwlIRERESVI9IiR7U30vaGRkL2Jvb3QiCisJSERESU1HPSIke1N9L2hkZC5pbWFnZSIKKwlJTUFHRT0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0CisKKwlib290X2RpcmVjdF9wb3B1bGF0ZSAkSERERElSCisKKwlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJc3lzbGludXhfaGRkaW1nX3BvcHVsYXRlICRIRERESVIKKwlmaQorCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQllZmlfaGRkaW1nX3BvcHVsYXRlICRIRERESVIKKwlmaQorCisJaWYgWyAiJHtJU19WTX0iID0gInRydWUiIF07IHRoZW4KKwkJaWYgWyAieCR7QVVUT19TWVNMSU5VWE1FTlV9IiA9ICJ4MSIgXSA7IHRoZW4KKwkJCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9L3Vzci9zaGFyZS9zeXNsaW51eC92ZXNhbWVudS5jMzIgJEhERERJUi8ke1NZU0xJTlVYRElSfS8KKwkJCWlmIFsgIngke1NZU0xJTlVYX1NQTEFTSH0iICE9ICJ4IiBdIDsgdGhlbgorCQkJCWluc3RhbGwgLW0gMDY0NCAke1NZU0xJTlVYX1NQTEFTSH0gJEhERERJUi8ke1NZU0xJTlVYRElSfS9zcGxhc2gubHNzCisJCQlmaQorCQlmaQorCWZpCisKKwlCTE9DS1M9YGR1IC1ia3MgJEhERERJUiB8IGN1dCAtZiAxYAorCUJMT0NLUz1gZXhwciAkQkxPQ0tTICsgJHtCT09URERfRVhUUkFfU1BBQ0V9YAorCisJIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKwkjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisJIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcworCSMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorCUJMT0NLUz0kKGV4cHIgJEJMT0NLUyArICQoZXhwciAxNiAtICQoZXhwciAkQkxPQ0tTICUgMTYpKSkKKworCW1rZG9zZnMgLW4gJHtCT09URERfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJEhERElNRyAkQkxPQ0tTIAorCW1jb3B5IC1pICRIRERJTUcgLXMgJEhERERJUi8qIDo6LworCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2hkZGRpcmVjdF9pbnN0YWxsICRIRERJTUcKKwlmaQkKKwljaG1vZCA2NDQgJEhERElNRworCisJUk9PVEZTQkxPQ0tTPWBkdSAtTGJrcyAke1JPT1RGU30gfCBjdXQgLWYgMWAKKwlUT1RBTFNJWkU9YGV4cHIgJEJMT0NLUyArICRST09URlNCTE9DS1NgCisJRU5EMT1gZXhwciAkQkxPQ0tTIFwqIDEwMjRgCisJRU5EMj1gZXhwciAkRU5EMSArIDUxMmAKKwlFTkQzPWBleHByIFwoICRST09URlNCTE9DS1MgXCogMTAyNCBcKSArICRFTkQxYAorCisJZWNobyAkUk9PVEZTQkxPQ0tTICRUT1RBTFNJWkUgJEVORDEgJEVORDIgJEVORDMKKwlybSAtcmYgJElNQUdFCisJZGQgaWY9L2Rldi96ZXJvIG9mPSRJTUFHRSBicz0xMDI0IHNlZWs9JFRPVEFMU0laRSBjb3VudD0xCisKKwlwYXJ0ZWQgJElNQUdFIG1rbGFiZWwgbXNkb3MKKwlwYXJ0ZWQgJElNQUdFIG1rcGFydCBwcmltYXJ5IGZhdDE2IDAgJHtFTkQxfUIKKwlwYXJ0ZWQgJElNQUdFIHVuaXQgQiBta3BhcnQgcHJpbWFyeSBleHQyICR7RU5EMn1CICR7RU5EM31CCisJcGFydGVkICRJTUFHRSBzZXQgMSBib290IG9uIAorCisJcGFydGVkICRJTUFHRSBwcmludAorCisJYXdrICJCRUdJTiB7IHByaW50ZiBcIiQoZWNobyAke0RJU0tfU0lHTkFUVVJFfSB8IGZvbGQgLXcgMiB8IHRhYyB8IHBhc3RlIC1zZCAnJyB8IHNlZCAncy9cKC4uXCkvXFx4Ji9nJylcIiB9IiB8IFwKKwkJZGQgb2Y9JElNQUdFIGJzPTEgc2Vlaz00NDAgY29udj1ub3RydW5jCisKKwlPRkZTRVQ9YGV4cHIgJEVORDIgLyA1MTJgCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCWRkIGlmPSR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9tYnIuYmluIG9mPSRJTUFHRSBjb252PW5vdHJ1bmMKKwlmaQorCisJZGQgaWY9JEhERElNRyBvZj0kSU1BR0UgY29udj1ub3RydW5jIHNlZWs9MSBicz01MTIKKwlkZCBpZj0ke1JPT1RGU30gb2Y9JElNQUdFIGNvbnY9bm90cnVuYyBzZWVrPSRPRkZTRVQgYnM9NTEyCisKKwljZCAke0RFUExPWV9ESVJfSU1BR0V9CisJcm0gLWYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uaGRkZGlyZWN0CisJbG4gLXMgJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uaGRkZGlyZWN0Cit9IAorCitweXRob24gZG9fYm9vdGRpcmVjdGRpc2soKSB7CisgICAgdmFsaWRhdGVfZGlza19zaWduYXR1cmUoZCkKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX3N5c2xpbnV4X2NmZycsIGQpCisgICAgaWYgZC5nZXRWYXIoIkVGSSIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9lZmlfY2ZnJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2Jvb3RfZGQnLCBkKQorfQorCitkZWYgZ2VuZXJhdGVfZGlza19zaWduYXR1cmUoKToKKyAgICBpbXBvcnQgdXVpZAorCisgICAgc2lnbmF0dXJlID0gc3RyKHV1aWQudXVpZDQoKSlbOjhdCisKKyAgICBpZiBzaWduYXR1cmUgIT0gJzAwMDAwMDAwJzoKKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnZmZmZmZmZmYnCisKK2RlZiB2YWxpZGF0ZV9kaXNrX3NpZ25hdHVyZShkKToKKyAgICBpbXBvcnQgcmUKKworICAgIGRpc2tfc2lnbmF0dXJlID0gZC5nZXRWYXIoIkRJU0tfU0lHTkFUVVJFIiwgVHJ1ZSkKKworICAgIGlmIG5vdCByZS5tYXRjaChyJ15bMC05YS1mQS1GXXs4fSQnLCBkaXNrX3NpZ25hdHVyZSk6CisgICAgICAgIGJiLmZhdGFsKCJESVNLX1NJR05BVFVSRSAnJXMnIG11c3QgYmUgYW4gOCBkaWdpdCBoZXggc3RyaW5nIiAlIGRpc2tfc2lnbmF0dXJlKQorCitESVNLX1NJR05BVFVSRV9HRU5FUkFURUQgOj0gIiR7QGdlbmVyYXRlX2Rpc2tfc2lnbmF0dXJlKCl9IgorCithZGR0YXNrIGJvb3RkaXJlY3RkaXNrIGJlZm9yZSBkb19idWlsZApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ib290aW1nLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5ZDBiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ib290aW1nLmJiY2xhc3MKQEAgLTAsMCArMSwzMDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKKyMgQ3JlYXRlcyBhIGJvb3RhYmxlIGltYWdlIHVzaW5nIHN5c2xpbnV4LCB5b3VyIGtlcm5lbCBhbmQgYW4gb3B0aW9uYWwKKyMgaW5pdHJkCisKKyMKKyMgRW5kIHJlc3VsdCBpcyB0d28gdGhpbmdzOgorIworIyAxLiBBIC5oZGRpbWcgZmlsZSB3aGljaCBpcyBhbiBtc2RvcyBmaWxlc3lzdGVtIGNvbnRhaW5pbmcgc3lzbGludXgsIGEga2VybmVsLAorIyBhbiBpbml0cmQgYW5kIGEgcm9vdGZzIGltYWdlLiBUaGVzZSBjYW4gYmUgd3JpdHRlbiB0byBoYXJkZGlza3MgZGlyZWN0bHkgYW5kCisjIGFsc28gYm9vdGVkIG9uIFVTQiBmbGFzaCBkaXNrcyAod3JpdGUgdGhlbSB0aGVyZSB3aXRoIGRkKS4KKyMKKyMgMi4gQSBDRCAuaXNvIGltYWdlCisKKyMgQm9vdCBwcm9jZXNzIGlzIHRoYXQgdGhlIGluaXRyZCB3aWxsIGJvb3QgYW5kIHByb2Nlc3Mgd2hpY2ggbGFiZWwgd2FzIHNlbGVjdGVkCisjIGluIHN5c2xpbnV4LiBBY3Rpb25zIGJhc2VkIG9uIHRoZSBsYWJlbCBhcmUgdGhlbiBwZXJmb3JtZWQgKGUuZy4gaW5zdGFsbGluZyB0bworIyBhbiBoZGQpCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzIChhbHNvIHVzZWQgYnkgc3lzbGludXguYmJjbGFzcykKKyMgJHtJTklUUkR9IC0gaW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpCisjICR7Q09NUFJFU1NJU099IC0gVHJhbnNwYXJlbnQgY29tcHJlc3MgSVNPLCByZWR1Y2Ugc2l6ZSB+NDAlIGlmIHNldCB0byAxCisjICR7Tk9JU099ICAtIHNraXAgYnVpbGRpbmcgdGhlIElTTyBpbWFnZSBpZiBzZXQgdG8gMQorIyAke05PSEREfSAgLSBza2lwIGJ1aWxkaW5nIHRoZSBIREQgaW1hZ2UgaWYgc2V0IHRvIDEKKyMgJHtIRERJTUdfSUR9IC0gRkFUIGltYWdlIHZvbHVtZS1pZAorIyAke1JPT1RGU30gLSBpbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAob3B0aW9uYWwpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gImRvc2ZzdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgbXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNkcnRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwva2VybmVsOmRvX2RlcGxveSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke0BvZS51dGlscy5pZmVsc2UoZC5nZXRWYXIoJ0NPTVBSRVNTSVNPJywgRmFsc2UpLCd6aXNvZnMtdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnLCcnKX0iCisKK1BBQ0tBR0VTID0gIiAiCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworSERERElSID0gIiR7U30vaGRkaW1nIgorSVNPRElSID0gIiR7U30vaXNvIgorRUZJSU1HRElSID0gIiR7U30vZWZpX2ltZyIKK0NPTVBBQ1RfSVNPRElSID0gIiR7U30vaXNvLnoiCitDT01QUkVTU0lTTyA/PSAiMCIKKworQk9PVElNR19WT0xVTUVfSUQgICA/PSAiYm9vdCIKK0JPT1RJTUdfRVhUUkFfU1BBQ0UgPz0gIjUxMiIKKworRUZJID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIxIiwgIjAiLCBkKX0iCitFRklfUFJPVklERVIgPz0gImdydWItZWZpIgorRUZJX0NMQVNTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIke0VGSV9QUk9WSURFUn0iLCAiIiwgZCl9IgorCitLRVJORUxfSU1BR0VUWVBFID8/PSAiYnpJbWFnZSIKKworIyBJbmNsdWRlIGxlZ2FjeSBib290IGlmIE1BQ0hJTkVfRkVBVFVSRVMgaW5jbHVkZXMgInBjYmlvcyIgb3IgaWYgaXQgZG9lcyBub3QKKyMgY29udGFpbiAiZWZpIi4gVGhpcyB3YXkgbGVnYWN5IGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0IGlmIG5laXRoZXIgaXMKKyMgc3BlY2lmaWVkLCBtYWludGFpbmluZyB0aGUgb3JpZ2luYWwgYmVoYXZpb3IuCitkZWYgcGNiaW9zKGQpOgorICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjYmlvcyIsICIxIiwgIjAiLCBkKQorICAgIGlmIHBjYmlvcyA9PSAiMCI6CisgICAgICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIwIiwgIjEiLCBkKQorICAgIHJldHVybiBwY2Jpb3MKKworUENCSU9TID0gIiR7QHBjYmlvcyhkKX0iCisKKyMgVGhlIHN5c2xpbnV4IGlzIHJlcXVpcmVkIGZvciB0aGUgaXNvaHlicmlkIGNvbW1hbmQgYW5kIGJvb3QgY2F0YWxvZworaW5oZXJpdCBzeXNsaW51eAoraW5oZXJpdCAke0VGSV9DTEFTU30KKworcG9wdWxhdGUoKSB7CisJREVTVD0kMQorCWluc3RhbGwgLWQgJHtERVNUfQorCisJIyBJbnN0YWxsIGtlcm5lbCwgaW5pdHJkLCBhbmQgcm9vdGZzLmltZyBpbiBERVNUIGZvciBhbGwgbG9hZGVycyB0byB1c2UuCisJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtLRVJORUxfSU1BR0VUWVBFfSAke0RFU1R9L3ZtbGludXoKKwkKKwkjIGluaXRyZCBpcyBtYWRlIG9mIGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlpZiBbIC1uICIke0lOSVRSRH0iIF07IHRoZW4KKwkJcm0gLWYgJHtERVNUfS9pbml0cmQKKwkJZm9yIGZzIGluICR7SU5JVFJEfQorCQlkbworCQkJaWYgWyAtcyAiJHtmc30iIF07IHRoZW4KKwkJCQljYXQgJHtmc30gPj4gJHtERVNUfS9pbml0cmQKKwkJCWVsc2UKKwkJCQliYmZhdGFsICIke2ZzfSBpcyBpbnZhbGlkLiBpbml0cmQgaW1hZ2UgY3JlYXRpb24gZmFpbGVkLiIKKwkJCWZpCisJCWRvbmUKKwkJY2htb2QgMDY0NCAke0RFU1R9L2luaXRyZAorCWZpCisKKwlpZiBbIC1uICIke1JPT1RGU30iIF0gJiYgWyAtcyAiJHtST09URlN9IiBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1JPT1RGU30gJHtERVNUfS9yb290ZnMuaW1nCisJZmkKKworfQorCitidWlsZF9pc28oKSB7CisJIyBPbmx5IGNyZWF0ZSBhbiBJU08gaWYgd2UgaGF2ZSBhbiBJTklUUkQgYW5kIE5PSVNPIHdhcyBub3Qgc2V0CisJaWYgWyAteiAiJHtJTklUUkR9IiBdIHx8IFsgIiR7Tk9JU099IiA9ICIxIiBdOyB0aGVuCisJCWJibm90ZSAiSVNPIGltYWdlIHdpbGwgbm90IGJlIGNyZWF0ZWQuIgorCQlyZXR1cm4KKwlmaQorCSMgJHtJTklUUkR9IGlzIGEgbGlzdCBvZiBtdWx0aXBsZSBmaWxlc3lzdGVtIGltYWdlcworCWZvciBmcyBpbiAke0lOSVRSRH0KKwlkbworCQlpZiBbICEgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQliYm5vdGUgIklTTyBpbWFnZSB3aWxsIG5vdCBiZSBjcmVhdGVkLiAke2ZzfSBpcyBpbnZhbGlkLiIKKwkJCXJldHVybgorCQlmaQorCWRvbmUKKworCisJcG9wdWxhdGUgJHtJU09ESVJ9CisKKwlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJc3lzbGludXhfaXNvX3BvcHVsYXRlICR7SVNPRElSfQorCWZpCisJaWYgWyAiJHtFRkl9IiA9ICIxIiBdOyB0aGVuCisJCWVmaV9pc29fcG9wdWxhdGUgJHtJU09ESVJ9CisJCWJ1aWxkX2ZhdF9pbWcgJHtFRklJTUdESVJ9ICR7SVNPRElSfS9lZmkuaW1nCisJZmkKKworCSMgRUZJIG9ubHkKKwlpZiBbICIke1BDQklPU30iICE9ICIxIiBdICYmIFsgIiR7RUZJfSIgPSAiMSIgXSA7IHRoZW4KKwkJIyBXb3JrIGFyb3VuZCBidWcgaW4gaXNvaHlicmlkIHdoZXJlIGl0IHJlcXVpcmVzIGlzb2xpbnV4LmJpbgorCQkjIEluIHRoZSBib290IGNhdGFsb2csIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCB1c2VkCisJCW1rZGlyIC1wICR7SVNPRElSfS8ke0lTT0xJTlVYRElSfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2lzb2xpbnV4LmJpbiAke0lTT0RJUn0ke0lTT0xJTlVYRElSfQorCWZpCisKKwlpZiBbICIke0NPTVBSRVNTSVNPfSIgPSAiMSIgXSA7IHRoZW4KKwkJIyBjcmVhdGUgY29tcGFjdCBkaXJlY3RvcnksIGNvbXByZXNzIGlzbworCQlta2RpciAtcCAke0NPTVBBQ1RfSVNPRElSfQorCQlta3pmdHJlZSAteiA5IC1wIDQgLUYgJHtJU09ESVJ9L3Jvb3Rmcy5pbWcgJHtDT01QQUNUX0lTT0RJUn0vcm9vdGZzLmltZworCisJCSMgbW92ZSBjb21wYWN0IGlzbyB0byBpc28sIHRoZW4gcmVtb3ZlIGNvbXBhY3QgZGlyZWN0b3J5CisJCW12ICR7Q09NUEFDVF9JU09ESVJ9L3Jvb3Rmcy5pbWcgJHtJU09ESVJ9L3Jvb3Rmcy5pbWcKKwkJcm0gLVJmICR7Q09NUEFDVF9JU09ESVJ9CisJCW1raXNvZnNfY29tcHJlc3Nfb3B0cz0iLVIgLXogLUQgLWwiCisJZWxzZQorCQlta2lzb2ZzX2NvbXByZXNzX29wdHM9Ii1yIgorCWZpCisKKwkjIENoZWNrIHRoZSBzaXplIG9mICR7SVNPRElSfS9yb290ZnMuaW1nLCB1c2UgbWtpc29mcyAtaXNvLWxldmVsIDMKKwkjIHdoZW4gaXQgZXhjZWVkcyAzLjhHQiwgdGhlIHNwZWNpZmljYXRpb24gaXMgNEcgLSAxIGJ5dGVzLCB3ZSBuZWVkCisJIyBsZWF2ZSBhIGZldyBzcGFjZSBmb3Igb3RoZXIgZmlsZXMuCisJbWtpc29mc19pc29fbGV2ZWw9IiIKKworICAgICAgICBpZiBbIC1uICIke1JPT1RGU30iIF0gJiYgWyAtcyAiJHtST09URlN9IiBdOyB0aGVuCisJCXJvb3Rmc19pbWdfc2l6ZT1gc3RhdCAtYyAnJXMnICR7SVNPRElSfS9yb290ZnMuaW1nYAorCQkjIDQwODAyMTg5MzEgPSAzLjggKiAxMDI0ICogMTAyNCAqIDEwMjQKKwkJaWYgWyAkcm9vdGZzX2ltZ19zaXplIC1ndCA0MDgwMjE4OTMxIF07IHRoZW4KKwkJCWJibm90ZSAiJHtJU09ESVJ9L3Jvb3Rmcy5pbWcgZXhlY2VlZHMgMy44R0IsIHVzaW5nICctaXNvLWxldmVsIDMnIGZvciBta2lzb2ZzIgorCQkJbWtpc29mc19pc29fbGV2ZWw9Ii1pc28tbGV2ZWwgMyIKKwkJZmkKKwlmaQorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdICYmIFsgIiR7RUZJfSIgIT0gIjEiIF0gOyB0aGVuCisJCSMgUENCSU9TIG9ubHkgbWVkaWEKKwkJbWtpc29mcyAtViAke0JPT1RJTUdfVk9MVU1FX0lEfSBcCisJCSAgICAgICAgLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmlzbyBcCisJCQktYiAke0lTT19CT09USU1HfSAtYyAke0lTT19CT09UQ0FUfSBcCisJCQkkbWtpc29mc19jb21wcmVzc19vcHRzIFwKKwkJCSR7TUtJU09GU19PUFRJT05TfSAkbWtpc29mc19pc29fbGV2ZWwgJHtJU09ESVJ9CisJZWxzZQorCQkjIEVGSSBvbmx5IE9SIEVGSStQQ0JJT1MKKwkJbWtpc29mcyAtQSAke0JPT1RJTUdfVk9MVU1FX0lEfSAtViAke0JPT1RJTUdfVk9MVU1FX0lEfSBcCisJCSAgICAgICAgLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmlzbyBcCisJCQktYiAke0lTT19CT09USU1HfSAtYyAke0lTT19CT09UQ0FUfSBcCisJCQkkbWtpc29mc19jb21wcmVzc19vcHRzICR7TUtJU09GU19PUFRJT05TfSAkbWtpc29mc19pc29fbGV2ZWwgXAorCQkJLWVsdG9yaXRvLWFsdC1ib290IC1lbHRvcml0by1wbGF0Zm9ybSBlZmkgXAorCQkJLWIgZWZpLmltZyAtbm8tZW11bC1ib290IFwKKwkJCSR7SVNPRElSfQorCQlpc29oeWJyaWRfYXJncz0iLXUiCisJZmkKKworCWlzb2h5YnJpZCAkaXNvaHlicmlkX2FyZ3MgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmlzbworCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmlzbworCWxuIC1zICR7SU1BR0VfTkFNRX0uaXNvICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmlzbworfQorCitidWlsZF9mYXRfaW1nKCkgeworCUZBVFNPVVJDRURJUj0kMQorCUZBVElNRz0kMgorCisJIyBDYWxjdWxhdGUgdGhlIHNpemUgcmVxdWlyZWQgZm9yIHRoZSBmaW5hbCBpbWFnZSBpbmNsdWRpbmcgdGhlCisJIyBkYXRhIGFuZCBmaWxlc3lzdGVtIG92ZXJoZWFkLgorCSMgU2VjdG9yczogNTEyIGJ5dGVzCisJIyAgQmxvY2tzOiAxMDI0IGJ5dGVzCisKKwkjIERldGVybWluZSB0aGUgc2VjdG9yIGNvdW50IGp1c3QgZm9yIHRoZSBkYXRhCisJU0VDVE9SUz0kKGV4cHIgJChkdSAtLWFwcGFyZW50LXNpemUgLWtzICR7RkFUU09VUkNFRElSfSB8IGN1dCAtZiAxKSBcKiAyKQorCisJIyBBY2NvdW50IGZvciB0aGUgZmlsZXN5c3RlbSBvdmVyaGVhZC4gVGhpcyBpbmNsdWRlcyBkaXJlY3RvcnkKKwkjIGVudHJpZXMgaW4gdGhlIGNsdXN0ZXJzIGFzIHdlbGwgYXMgdGhlIEZBVCBpdHNlbGYuCisJIyBBc3N1bXB0aW9uczoKKwkjICAgRkFUMzIgKDEyIG9yIDE2IG1heSBiZSBzZWxlY3RlZCBieSBta2Rvc2ZzLCBidXQgdGhlIGV4dHJhCisJIyAgIHBhZGRpbmcgd2lsbCBiZSBtaW5pbWFsIG9uIHRob3NlIHNtYWxsZXIgaW1hZ2VzIGFuZCBub3QKKwkjICAgd29ydGggdGhlIGxvZ2ljIGhlcmUgdG8gY2FjbHVsYXRlIHRoZSBzbWFsbGVyIEZBVCBzaXplcykKKwkjICAgPCAxNiBlbnRyaWVzIHBlciBkaXJlY3RvcnkKKwkjICAgOC4zIGZpbGVuYW1lcyBvbmx5CisKKwkjIDMyIGJ5dGVzIHBlciBkaXIgZW50cnkKKwlESVJfQllURVM9JChleHByICQoZmluZCAke0ZBVFNPVVJDRURJUn0gfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDMyKQorCSMgMzIgYnl0ZXMgZm9yIGV2ZXJ5IGVuZC1vZi1kaXJlY3RvcnkgZGlyIGVudHJ5CisJRElSX0JZVEVTPSQoZXhwciAkRElSX0JZVEVTICsgJChleHByICQoZmluZCAke0ZBVFNPVVJDRURJUn0gLXR5cGUgZCB8IHRhaWwgLW4gKzIgfCB3YyAtbCkgXCogMzIpKQorCSMgNCBieXRlcyBwZXIgRkFUIGVudHJ5IHBlciBzZWN0b3Igb2YgZGF0YQorCUZBVF9CWVRFUz0kKGV4cHIgJFNFQ1RPUlMgXCogNCkKKwkjIDQgYnl0ZXMgcGVyIEZBVCBlbnRyeSBwZXIgZW5kLW9mLWNsdXN0ZXIgbGlzdAorCUZBVF9CWVRFUz0kKGV4cHIgJEZBVF9CWVRFUyArICQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IC10eXBlIGQgfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDQpKQorCisJIyBVc2UgYSBjZWlsaW5nIGZ1bmN0aW9uIHRvIGRldGVybWluZSBGUyBvdmVyaGVhZCBpbiBzZWN0b3JzCisJRElSX1NFQ1RPUlM9JChleHByICQoZXhwciAkRElSX0JZVEVTICsgNTExKSAvIDUxMikKKwkjIFRoZXJlIGFyZSB0d28gRkFUcyBvbiB0aGUgaW1hZ2UKKwlGQVRfU0VDVE9SUz0kKGV4cHIgJChleHByICQoZXhwciAkRkFUX0JZVEVTICsgNTExKSAvIDUxMikgXCogMikKKwlTRUNUT1JTPSQoZXhwciAkU0VDVE9SUyArICQoZXhwciAkRElSX1NFQ1RPUlMgKyAkRkFUX1NFQ1RPUlMpKQorCisJIyBEZXRlcm1pbmUgdGhlIGZpbmFsIHNpemUgaW4gYmxvY2tzIGFjY291bnRpbmcgZm9yIHNvbWUgcGFkZGluZworCUJMT0NLUz0kKGV4cHIgJChleHByICRTRUNUT1JTIC8gMikgKyAke0JPT1RJTUdfRVhUUkFfU1BBQ0V9KQorCisJIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKwkjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisJIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcworCSMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorCUJMT0NLUz0kKGV4cHIgJEJMT0NLUyArICQoZXhwciAxNiAtICQoZXhwciAkQkxPQ0tTICUgMTYpKSkKKworCSMgbWtkb3NmcyB3aWxsIHNvbWV0aW1lcyB1c2UgRkFUMTYgd2hlbiBpdCBpcyBub3QgYXBwcm9wcmlhdGUsCisJIyByZXN1bHRpbmcgaW4gYSBib290IGZhaWx1cmUgZnJvbSBTWVNMSU5VWC4gVXNlIEZBVDMyIGZvcgorCSMgaW1hZ2VzIGxhcmdlciB0aGFuIDUxMk1CLCBvdGhlcndpc2UgbGV0IG1rZG9zZnMgZGVjaWRlLgorCWlmIFsgJChleHByICRCTE9DS1MgLyAxMDI0KSAtZ3QgNTEyIF07IHRoZW4KKwkJRkFUU0laRT0iLUYgMzIiCisJZmkKKworCSMgbWtkb3NmcyB3aWxsIGZhaWwgaWYgJHtGQVRJTUd9IGV4aXN0cy4gU2luY2Ugd2UgYXJlIGNyZWF0aW5nIGFuCisJIyBuZXcgaW1hZ2UsIGl0IGlzIHNhZmUgdG8gZGVsZXRlIGFueSBwcmV2aW91cyBpbWFnZS4KKwlpZiBbIC1lICR7RkFUSU1HfSBdOyB0aGVuCisJCXJtICR7RkFUSU1HfQorCWZpCisKKwlpZiBbIC16ICIke0hERElNR19JRH0iIF07IHRoZW4KKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9IC1TIDUxMiAtQyAke0ZBVElNR30gXAorCQkJJHtCTE9DS1N9CisJZWxzZQorCQlta2Rvc2ZzICR7RkFUU0laRX0gLW4gJHtCT09USU1HX1ZPTFVNRV9JRH0gLVMgNTEyIC1DICR7RkFUSU1HfSBcCisJCSR7QkxPQ0tTfSAtaSAke0hERElNR19JRH0KKwlmaQorCisJIyBDb3B5IEZBVFNPVVJDRURJUiByZWN1cnNpdmVseSBpbnRvIHRoZSBpbWFnZSBmaWxlIGRpcmVjdGx5CisJbWNvcHkgLWkgJHtGQVRJTUd9IC1zICR7RkFUU09VUkNFRElSfS8qIDo6LworfQorCitidWlsZF9oZGRpbWcoKSB7CisJIyBDcmVhdGUgYW4gSEREIGltYWdlCisJaWYgWyAiJHtOT0hERH0iICE9ICIxIiBdIDsgdGhlbgorCQlwb3B1bGF0ZSAke0hERERJUn0KKworCQlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJCXN5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSAke0hERERJUn0KKwkJZmkKKwkJaWYgWyAiJHtFRkl9IiA9ICIxIiBdOyB0aGVuCisJCQllZmlfaGRkaW1nX3BvcHVsYXRlICR7SERERElSfQorCQlmaQorCisJCSMgQ2hlY2sgdGhlIHNpemUgb2YgJHtIRERESVJ9L3Jvb3Rmcy5pbWcsIGVycm9yIG91dCBpZiBpdAorCQkjIGV4Y2VlZHMgNEdCLCBpdCBpcyB0aGUgc2luZ2xlIGZpbGUncyBtYXggc2l6ZSBvZiBGQVQgZnMuCisJCWlmIFsgLWYgJHtIRERESVJ9L3Jvb3Rmcy5pbWcgXTsgdGhlbgorCQkJcm9vdGZzX2ltZ19zaXplPWBzdGF0IC1jICclcycgJHtIRERESVJ9L3Jvb3Rmcy5pbWdgCisJCQltYXhfc2l6ZT1gZXhwciA0IFwqIDEwMjQgXCogMTAyNCBcKiAxMDI0YAorCQkJaWYgWyAkcm9vdGZzX2ltZ19zaXplIC1ndCAkbWF4X3NpemUgXTsgdGhlbgorCQkJCWJiZXJyb3IgIiR7SERERElSfS9yb290ZnMuaW1nIGV4ZWNlZWRzIDRHQiwiCisJCQkJYmJlcnJvciAidGhpcyBkb2Vzbid0IHdvcmsgb24gRkFUIGZpbGVzeXN0ZW0sIHlvdSBjYW4gdHJ5IGVpdGhlciBvZjoiCisJCQkJYmJlcnJvciAiMSkgUmVkdWNlIHRoZSBzaXplIG9mIHJvb3Rmcy5pbWciCisJCQkJYmJmYXRhbCAiMikgVXNlIGlzbywgdm1kayBvciB2ZGkgdG8gaW5zdGVhZCBvZiBoZGRpbWdcbiIKKwkJCWZpCisJCWZpCisKKwkJYnVpbGRfZmF0X2ltZyAke0hERERJUn0gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGltZworCisJCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQkJc3lzbGludXhfaGRkaW1nX2luc3RhbGwKKwkJZmkKKworCQljaG1vZCA2NDQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGltZworCisJCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwkJcm0gLWYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uaGRkaW1nCisJCWxuIC1zICR7SU1BR0VfTkFNRX0uaGRkaW1nICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGltZworCWZpCit9CisKK3B5dGhvbiBkb19ib290aW1nKCkgeworICAgIGlmIGQuZ2V0VmFyKCJQQ0JJT1MiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfc3lzbGludXhfY2ZnJywgZCkKKyAgICBpZiBkLmdldFZhcigiRUZJIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2VmaV9jZmcnLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfaGRkaW1nJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2lzbycsIGQpCit9CisKK0lNQUdFX1RZUEVERVBfaXNvID0gImV4dDQiCitJTUFHRV9UWVBFREVQX2hkZGltZyA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJpc28gaGRkaW1nIgorCithZGR0YXNrIGJvb3RpbWcgYmVmb3JlIGRvX2J1aWxkCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9idWd6aWxsYS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzg5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcwpAQCAtMCwwICsxLDE4NyBAQAorIworIyBTbWFsbCBldmVudCBoYW5kbGVyIHRvIGF1dG9tYXRpY2FsbHkgb3BlbiBVUkxzIGFuZCBmaWxlCisjIGJ1ZyByZXBvcnRzIGF0IGEgYnVnemlsbGEgb2YgeW91ciBjaG9pY2hlCisjIGl0IHVzZXMgWE1MLVJQQyBpbnRlcmZhY2UsIHNvIHlvdSBtdXN0IGhhdmUgaXQgZW5hYmxlZAorIworIyBCZWZvcmUgdXNpbmcgeW91IG11c3QgZGVmaW5lIEJVR1pJTExBX1VTRVIsIEJVR1pJTExBX1BBU1MgY3JlZGVudGlhbHMsCisjIEJVR1pJTExBX1hNTFJQQyAtIHVyaSBvZiB4bWxycGMuY2dpLAorIyBCVUdaSUxMQV9QUk9EVUNULCBCVUdaSUxMQV9DT01QT05FTlQgLSBhIHBsYWNlIGluIEJUUyBmb3IgYnVpbGQgYnVncworIyBCVUdaSUxMQV9WRVJTSU9OIC0gdmVyc2lvbiBhZ2FpbnN0IHdoaWNoIHRvIHJlcG9ydCBuZXcgYnVncworIworCitkZWYgYnVnemlsbGFfZmluZF9idWdfcmVwb3J0KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnbmFtZSk6CisgICAgYXJnc1snc3VtbWFyeSddID0gYnVnbmFtZQorICAgIGJ1Z3MgPSBzZXJ2ZXIuQnVnLnNlYXJjaChhcmdzKQorICAgIGlmIGxlbihidWdzWydidWdzJ10pID09IDA6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJCdWdzIG5vdCBmb3VuZCIKKyAgICAgICAgcmV0dXJuIChGYWxzZSxOb25lKQorICAgIGVsc2U6ICMgc2lsZW50bHkgcGljayB0aGUgZmlyc3QgcmVzdWx0CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJSZXN1bHQgb2YgYnVnIHNlYXJjaCBpcyAiCisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIGJ1Z3MKKyAgICAgICAgc3RhdHVzID0gYnVnc1snYnVncyddWzBdWydzdGF0dXMnXQorICAgICAgICBpZCA9IGJ1Z3NbJ2J1Z3MnXVswXVsnaWQnXQorICAgICAgICByZXR1cm4gKG5vdCBzdGF0dXMgaW4gWyJDTE9TRUQiLCAiUkVTT0xWRUQiLCAiVkVSSUZJRUQiXSxpZCkKKworZGVmIGJ1Z3ppbGxhX2ZpbGVfYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgbmFtZSwgdGV4dCwgdmVyc2lvbik6CisgICAgYXJnc1snc3VtbWFyeSddID0gbmFtZQorICAgIGFyZ3NbJ2NvbW1lbnQnXSA9IHRleHQKKyAgICBhcmdzWyd2ZXJzaW9uJ10gPSB2ZXJzaW9uCisgICAgYXJnc1snb3Bfc3lzJ10gPSAnTGludXgnCisgICAgYXJnc1sncGxhdGZvcm0nXSA9ICdPdGhlcicKKyAgICBhcmdzWydzZXZlcml0eSddID0gJ25vcm1hbCcKKyAgICBhcmdzWydwcmlvcml0eSddID0gJ05vcm1hbCcKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBzZXJ2ZXIuQnVnLmNyZWF0ZShhcmdzKVsnaWQnXQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIHJlcHIoZSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGJ1Z3ppbGxhX3Jlb3Blbl9idWcoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLCBidWdfbnVtYmVyKToKKyAgICBhcmdzWydpZHMnXSA9IFtidWdfbnVtYmVyXQorICAgIGFyZ3NbJ3N0YXR1cyddID0gIkNPTkZJUk1FRCIKKyAgICB0cnk6CisgICAgICAgIHNlcnZlci5CdWcudXBkYXRlKGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIGJ1Z3ppbGxhX2NyZWF0ZV9hdHRhY2htZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlciwgdGV4dCwgZmlsZV9uYW1lLCBsb2csIGxvZ2Rlc2NyaXB0aW9uKToKKyAgICBhcmdzWydpZHMnXSA9IFtidWdfbnVtYmVyXQorICAgIGFyZ3NbJ2ZpbGVfbmFtZSddID0gZmlsZV9uYW1lCisgICAgYXJnc1snc3VtbWFyeSddID0gbG9nZGVzY3JpcHRpb24KKyAgICBhcmdzWydjb250ZW50X3R5cGUnXSA9ICJ0ZXh0L3BsYWluIgorICAgIGFyZ3NbJ2RhdGEnXSA9IGxvZworICAgIGFyZ3NbJ2NvbW1lbnQnXSA9IHRleHQKKyAgICB0cnk6CisgICAgICAgIHNlcnZlci5CdWcuYWRkX2F0dGFjaG1lbnQoYXJncykKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgYnVnemlsbGFfYWRkX2NvbW1lbnQoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLCBidWdfbnVtYmVyLCB0ZXh0KToKKyAgICBhcmdzWydpZCddID0gYnVnX251bWJlcgorICAgIGFyZ3NbJ2NvbW1lbnQnXSA9IHRleHQKKyAgICB0cnk6CisgICAgICAgIHNlcnZlci5CdWcuYWRkX2NvbW1lbnQoYXJncykKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBGYWxzZQorCithZGRoYW5kbGVyIGJ1Z3ppbGxhX2V2ZW50aGFuZGxlcgorYnVnemlsbGFfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuTXNnTm90ZSBiYi5idWlsZC5UYXNrRmFpbGVkIgorcHl0aG9uIGJ1Z3ppbGxhX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgZ2xvYgorICAgIGltcG9ydCB4bWxycGNsaWIsIGh0dHBsaWIKKworICAgIGNsYXNzIFByb3hpZWRUcmFuc3BvcnQoeG1scnBjbGliLlRyYW5zcG9ydCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm94eSwgdXNlX2RhdGV0aW1lID0gMCk6CisgICAgICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0Ll9faW5pdF9fKHNlbGYsIHVzZV9kYXRldGltZSkKKyAgICAgICAgICAgIHNlbGYucHJveHkgPSBwcm94eQorICAgICAgICAgICAgc2VsZi51c2VyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IE5vbmUKKworICAgICAgICBkZWYgc2V0X3VzZXIoc2VsZiwgdXNlcik6CisgICAgICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisKKyAgICAgICAgZGVmIHNldF9wYXNzd29yZChzZWxmLCBwYXNzd29yZCk6CisgICAgICAgICAgICBzZWxmLnBhc3N3b3JkID0gcGFzc3dvcmQKKworICAgICAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgorICAgICAgICAgICAgc2VsZi5yZWFsaG9zdCA9IGhvc3QKKyAgICAgICAgICAgIHJldHVybiBodHRwbGliLkhUVFAoc2VsZi5wcm94eSkKKworICAgICAgICBkZWYgc2VuZF9yZXF1ZXN0KHNlbGYsIGNvbm5lY3Rpb24sIGhhbmRsZXIsIHJlcXVlc3RfYm9keSk6CisgICAgICAgICAgICBjb25uZWN0aW9uLnB1dHJlcXVlc3QoIlBPU1QiLCAnaHR0cDovLyVzJXMnICUgKHNlbGYucmVhbGhvc3QsIGhhbmRsZXIpKQorICAgICAgICAgICAgaWYgc2VsZi51c2VyICE9IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wYXNzd29yZCAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICBhdXRoID0gIiVzOiVzIiAlIChzZWxmLnVzZXIsIHNlbGYucGFzc3dvcmQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXV0aCA9IHNlbGYudXNlcgorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJQcm94eS1hdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBiYXNlNjQuZW5jb2Rlc3RyaW5nKGF1dGgpKQorCisgICAgZXZlbnQgPSBlCisgICAgZGF0YSA9IGUuZGF0YQorICAgIG5hbWUgPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgIGlmIG5hbWUgPT0gIk1zZ05vdGUiOgorICAgICAgICAjIGF2b2lkIHJlY3Vyc2lvbgorICAgICAgICByZXR1cm4KKworICAgIGlmIG5hbWUgPT0gIlRhc2tGYWlsZWQiOgorICAgICAgICB4bWxycGMgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1hNTFJQQyIsIFRydWUpCisgICAgICAgIHVzZXIgICAgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfVVNFUiIsIFRydWUpCisgICAgICAgIHBhc3N3ICAgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfUEFTUyIsIFRydWUpCisgICAgICAgIHByb2R1Y3QgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfUFJPRFVDVCIsIFRydWUpCisgICAgICAgIGNvbXBvbiAgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfQ09NUE9ORU5UIiwgVHJ1ZSkKKyAgICAgICAgdmVyc2lvbiA9IGRhdGEuZ2V0VmFyKCJCVUdaSUxMQV9WRVJTSU9OIiwgVHJ1ZSkKKworICAgICAgICBwcm94eSAgID0gZGF0YS5nZXRWYXIoJ2h0dHBfcHJveHknLCBUcnVlICkKKyAgICAgICAgaWYgKHByb3h5KToKKyAgICAgICAgICAgIGltcG9ydCB1cmxsaWIyCisgICAgICAgICAgICBzLCB1LCBwLCBob3N0cG9ydCA9IHVybGxpYjIuX3BhcnNlX3Byb3h5KHByb3h5KQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gUHJveGllZFRyYW5zcG9ydChob3N0cG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoeG1scnBjLCB0cmFuc3BvcnQ9dHJhbnNwb3J0LCB2ZXJib3NlPTApCisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnQnVnemlsbGFfbG9naW4nOiB1c2VyLAorICAgICAgICAgICAgJ0J1Z3ppbGxhX3Bhc3N3b3JkJzogcGFzc3csCisgICAgICAgICAgICAncHJvZHVjdCc6IHByb2R1Y3QsCisgICAgICAgICAgICAnY29tcG9uZW50JzogY29tcG9ufQorCisgICAgICAgICMgZXZpbCBoYWNrIHRvIGZpZ3VyZSBvdXQgd2hhdCBpcyBnb2luZyBvbgorICAgICAgICBkZWJ1Z19maWxlID0gb3Blbihvcy5wYXRoLmpvaW4oZGF0YS5nZXRWYXIoIlRNUERJUiIsIFRydWUpLCIuLiIsImJ1Z3ppbGxhLWxvZyIpLCJhIikKKworICAgICAgICBmaWxlID0gTm9uZQorICAgICAgICBidWduYW1lID0gIiUocGFja2FnZSlzLSUocHYpcy1hdXRvYnVpbGQiICUgeyAicGFja2FnZSIgOiBkYXRhLmdldFZhcigiUE4iLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB2IiAgICAgIDogZGF0YS5nZXRWYXIoIlBWIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgbG9nX2ZpbGUgPSBnbG9iLmdsb2IoIiVzL2xvZy4lcy4qIiAlIChldmVudC5kYXRhLmdldFZhcignVCcsIFRydWUpLCBldmVudC50YXNrKSkKKyAgICAgICAgdGV4dCAgICAgPSAiVGhlICVzIHN0ZXAgaW4gJXMgZmFpbGVkIGF0ICVzIGZvciBtYWNoaW5lICVzIiAlIChlLnRhc2ssIGRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpLCBkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKSwgZGF0YS5nZXRWYXIoICdNQUNISU5FJywgVHJ1ZSApICkKKyAgICAgICAgaWYgbGVuKGxvZ19maWxlKSAhPSAwOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkFkZGluZyBsb2cgZmlsZSAlcyIgJSBsb2dfZmlsZVswXQorICAgICAgICAgICAgZmlsZSA9IG9wZW4obG9nX2ZpbGVbMF0sICdyJykKKyAgICAgICAgICAgIGxvZyA9IGZpbGUucmVhZCgpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCk7CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiTm8gbG9nIGZpbGUgZm91bmQgZm9yIHRoZSBnbG9iIgorICAgICAgICAgICAgbG9nID0gTm9uZQorCisgICAgICAgIChidWdfb3BlbiwgYnVnX251bWJlcikgPSBidWd6aWxsYV9maW5kX2J1Z19yZXBvcnQoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLmNvcHkoKSwgYnVnbmFtZSkKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkJ1ZyBpcyBvcGVuOiAlcyBhbmQgYnVnIG51bWJlcjogJXMiICUgKGJ1Z19vcGVuLCBidWdfbnVtYmVyKQorCisgICAgICAgICMgVGhlIGJ1ZyBpcyBwcmVzZW50IGFuZCBzdGlsbCBvcGVuLCBhdHRhY2ggYW4gZXJyb3IgbG9nCisgICAgICAgIGlmIG5vdCBidWdfbnVtYmVyOgorICAgICAgICAgICAgYnVnX251bWJlciA9IGJ1Z3ppbGxhX2ZpbGVfYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z25hbWUsIHRleHQsIHZlcnNpb24pCisgICAgICAgICAgICBpZiBub3QgYnVnX251bWJlcjoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQ291bGRuJ3QgYWNxdWlyZSBhIG5ldyBidWdfbnVtZXIsIGZpbGluZyBhIGJ1Z3JlcG9ydCBmYWlsZWQiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJUaGUgbmV3IGJ1Z19udW1iZXI6ICclcyciICUgYnVnX251bWJlcgorICAgICAgICBlbGlmIG5vdCBidWdfb3BlbjoKKyAgICAgICAgICAgIGlmIG5vdCBidWd6aWxsYV9yZW9wZW5fYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIpOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJGYWlsZWQgdG8gcmVvcGVuIHRoZSBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIlJlb3BlbmVkIHRoZSBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKworICAgICAgICBpZiBidWdfbnVtYmVyIGFuZCBsb2c6CisgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiVGhlIGJ1ZyBpcyBrbm93biBhcyAnJXMnIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGRlc2MgPSAiQnVpbGQgbG9nIGZvciBtYWNoaW5lICVzIiAlIChkYXRhLmdldFZhcignTUFDSElORScsIFRydWUpKQorICAgICAgICAgICAgaWYgbm90IGJ1Z3ppbGxhX2NyZWF0ZV9hdHRhY2htZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIsIHRleHQsIGxvZ19maWxlWzBdLCBsb2csIGRlc2MpOgorICAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiRmFpbGVkIHRvIGF0dGFjaCB0aGUgYnVpbGQgbG9nIGZvciBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJDcmVhdGVkIGFuIGF0dGFjaG1lbnQgZm9yICclcycgJyVzJyAnJXMnIiAlIChwcm9kdWN0LCBjb21wb24sIGJ1Z19udW1iZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiTm90IHRyeWluZyB0byBjcmVhdGUgYW4gYXR0YWNobWVudCBmb3IgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBpZiBub3QgYnVnemlsbGFfYWRkX2NvbW1lbnQoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLmNvcHkoKSwgYnVnX251bWJlciwgdGV4dCwgKToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkZhaWxlZCB0byBjcmVhdGUgYSBjb21tZW50IHRoZSBidWlsZCBsb2cgZm9yIGJ1ZyAjJXMiICUgYnVnX251bWJlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkNyZWF0ZWQgYW4gYXR0YWNobWVudCBmb3IgJyVzJyAnJXMnICclcyciICUgKHByb2R1Y3QsIGNvbXBvbiwgYnVnX251bWJlcikKKworICAgICAgICAjIHN0b3JlIGJ1ZyBudW1iZXIgZm9yIG9lc3RhdHMtY2xpZW50CisgICAgICAgIGlmIGJ1Z19udW1iZXI6CisgICAgICAgICAgICBkYXRhLnNldFZhcignT0VTVEFUU19CVUdfTlVNQkVSJywgYnVnX251bWJlcikKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjA0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MKQEAgLTAsMCArMSw3NjUgQEAKKyMKKyMgUmVjb3JkcyBoaXN0b3J5IG9mIGJ1aWxkIG91dHB1dCBpbiBvcmRlciB0byBkZXRlY3QgcmVncmVzc2lvbnMKKyMKKyMgQmFzZWQgaW4gcGFydCBvbiB0ZXN0bGFiLmJiY2xhc3MgYW5kIHBhY2thZ2VoaXN0b3J5LmJiY2xhc3MKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgS29lbiBLb29pIDxrb2VuQG9wZW5lbWJlZGRlZC5vcmc+CisjCisKK0JVSUxESElTVE9SWV9GRUFUVVJFUyA/PSAiaW1hZ2UgcGFja2FnZSBzZGsiCitCVUlMREhJU1RPUllfRElSID89ICIke1RPUERJUn0vYnVpbGRoaXN0b3J5IgorQlVJTERISVNUT1JZX0RJUl9JTUFHRSA9ICIke0JVSUxESElTVE9SWV9ESVJ9L2ltYWdlcy8ke01BQ0hJTkVfQVJDSH0vJHtUQ0xJQkN9LyR7SU1BR0VfQkFTRU5BTUV9IgorQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFID0gIiR7QlVJTERISVNUT1JZX0RJUn0vcGFja2FnZXMvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0iCitCVUlMREhJU1RPUllfRElSX1NESyA9ICIke0JVSUxESElTVE9SWV9ESVJ9L3Nkay8ke1NES19OQU1FfS8ke0lNQUdFX0JBU0VOQU1FfSIKK0JVSUxESElTVE9SWV9JTUFHRV9GSUxFUyA/PSAiL2V0Yy9wYXNzd2QgL2V0Yy9ncm91cCIKK0JVSUxESElTVE9SWV9DT01NSVQgPz0gIjAiCitCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUiA/PSAiYnVpbGRoaXN0b3J5IDxidWlsZGhpc3RvcnlAJHtESVNUUk99PiIKK0JVSUxESElTVE9SWV9QVVNIX1JFUE8gPz0gIiIKKworU1NUQVRFUE9TVElOU1RGVU5DU19hcHBlbmQgPSAiIGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisjIFdlIHdhbnQgdG8gYXZvaWQgaW5mbHVlbmNlIHRoZSBzaWduYXR1cmVzIG9mIHNzdGF0ZSB0YXNrcyAtIGZpcnN0IHRoZSBmdW5jdGlvbiBpdHNlbGY6Citzc3RhdGVfaW5zdGFsbFt2YXJkZXBzZXhjbHVkZV0gKz0gImJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisjIHRoZW4gdGhlIHZhbHVlIGFkZGVkIHRvIFNTVEFURVBPU1RJTlNURlVOQ1M6CitTU1RBVEVQT1NUSU5TVEZVTkNTW3ZhcmRlcHZhbHVlZXhjbHVkZV0gLj0gInwgYnVpbGRoaXN0b3J5X2VtaXRfcGtnaGlzdG9yeSIKKworIworIyBXcml0ZSBvdXQgbWV0YWRhdGEgYWJvdXQgdGhpcyBwYWNrYWdlIGZvciBjb21wYXJpc2lvbiB3aGVuIHdyaXRpbmcgZnV0dXJlIHBhY2thZ2VzCisjCitweXRob24gYnVpbGRoaXN0b3J5X2VtaXRfcGtnaGlzdG9yeSgpIHsKKyAgICBpZiBub3QgZC5nZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgVHJ1ZSkgaW4gWydwYWNrYWdlZGF0YScsICdwYWNrYWdlZGF0YV9zZXRzY2VuZSddOgorICAgICAgICByZXR1cm4gMAorCisgICAgaWYgbm90ICJwYWNrYWdlIiBpbiAoZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICByZXR1cm4gMAorCisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgZXJybm8KKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIGNsYXNzIFJlY2lwZUluZm86CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgIHNlbGYucGUgPSAiMCIKKyAgICAgICAgICAgIHNlbGYucHYgPSAiMCIKKyAgICAgICAgICAgIHNlbGYucHIgPSAicjAiCisgICAgICAgICAgICBzZWxmLmRlcGVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnNyY3JldiA9ICIiCisKKworICAgIGNsYXNzIFBhY2thZ2VJbmZvOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLnBlID0gIjAiCisgICAgICAgICAgICBzZWxmLnB2ID0gIjAiCisgICAgICAgICAgICBzZWxmLnByID0gInIwIgorICAgICAgICAgICAgIyBwa2cvcGtnZS9wa2d2L3BrZ3Igc2hvdWxkIGJlIGVtcHR5IGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGRlZmF1bHQgdGhlbQorICAgICAgICAgICAgc2VsZi5wa2cgPSAiIgorICAgICAgICAgICAgc2VsZi5wa2dlID0gIiIKKyAgICAgICAgICAgIHNlbGYucGtndiA9ICIiCisgICAgICAgICAgICBzZWxmLnBrZ3IgPSAiIgorICAgICAgICAgICAgc2VsZi5zaXplID0gMAorICAgICAgICAgICAgc2VsZi5kZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucnByb3ZpZGVzID0gIiIKKyAgICAgICAgICAgIHNlbGYucmRlcGVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5ycmVjb21tZW5kcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJzdWdnZXN0cyA9ICIiCisgICAgICAgICAgICBzZWxmLnJyZXBsYWNlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJjb25mbGljdHMgPSAiIgorICAgICAgICAgICAgc2VsZi5maWxlcyA9ICIiCisgICAgICAgICAgICBzZWxmLmZpbGVsaXN0ID0gIiIKKyAgICAgICAgICAgICMgVmFyaWFibGVzIHRoYXQgbmVlZCB0byBiZSB3cml0dGVuIHRvIHRoZWlyIG93biBzZXBhcmF0ZSBmaWxlCisgICAgICAgICAgICBzZWxmLmZpbGV2YXJzID0gZGljdC5mcm9ta2V5cyhbJ3BrZ19wcmVpbnN0JywgJ3BrZ19wb3N0aW5zdCcsICdwa2dfcHJlcm0nLCAncGtnX3Bvc3RybSddKQorCisgICAgIyBTaG91bGQgY2hlY2sgUEFDS0FHRVMgaGVyZSB0byBzZWUgaWYgYW55dGhpbmcgcmVtb3ZlZAorCisgICAgZGVmIHJlYWRQYWNrYWdlSW5mbyhwa2csIGhpc3RmaWxlKToKKyAgICAgICAgcGtnaW5mbyA9IFBhY2thZ2VJbmZvKHBrZykKKyAgICAgICAgd2l0aCBvcGVuKGhpc3RmaWxlLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGxucyA9IGxpbmUuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgIG5hbWUgPSBsbnNbMF0uc3RyaXAoKQorICAgICAgICAgICAgICAgIHZhbHVlID0gbG5zWzFdLnN0cmlwKCIgXHRcclxuIikuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIlBFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wZSA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQViI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucHYgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUFIiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnByID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLRyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtnID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLR0UiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZ2UgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHViI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtndiA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dSIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wa2dyID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJQUk9WSURFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnByb3ZpZGVzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJERVBFTkRTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5yZGVwZW5kcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSUkVDT01NRU5EUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnJlY29tbWVuZHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlNVR0dFU1RTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5yc3VnZ2VzdHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlJFUExBQ0VTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5ycmVwbGFjZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUkNPTkZMSUNUUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucmNvbmZsaWN0cyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dTSVpFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5zaXplID0gbG9uZyh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIkZJTEVTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5maWxlcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJGSUxFTElTVCI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uZmlsZWxpc3QgPSB2YWx1ZQorICAgICAgICAjIEFwcGx5IGRlZmF1bHRzCisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZzoKKyAgICAgICAgICAgIHBrZ2luZm8ucGtnID0gcGtnaW5mby5uYW1lCisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZ2U6CisgICAgICAgICAgICBwa2dpbmZvLnBrZ2UgPSBwa2dpbmZvLnBlCisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZ3Y6CisgICAgICAgICAgICBwa2dpbmZvLnBrZ3YgPSBwa2dpbmZvLnB2CisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZ3I6CisgICAgICAgICAgICBwa2dpbmZvLnBrZ3IgPSBwa2dpbmZvLnByCisgICAgICAgIHJldHVybiBwa2dpbmZvCisKKyAgICBkZWYgZ2V0bGFzdHBrZ3ZlcnNpb24ocGtnKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgcGtnLCAibGF0ZXN0IikKKyAgICAgICAgICAgIHJldHVybiByZWFkUGFja2FnZUluZm8ocGtnLCBoaXN0ZmlsZSkKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNvcnRwa2dsaXN0KHN0cmluZyk6CisgICAgICAgIHBrZ2l0ZXIgPSByZS5maW5kaXRlcihyJ1thLXpBLVowLTkuKy1dKyggXChbPjw9XSsgW14gKV0rXCkpPycsIHN0cmluZywgMCkKKyAgICAgICAgcGtnbGlzdCA9IFtwLmdyb3VwKDApIGZvciBwIGluIHBrZ2l0ZXJdCisgICAgICAgIHBrZ2xpc3Quc29ydCgpCisgICAgICAgIHJldHVybiAnICcuam9pbihwa2dsaXN0KQorCisgICAgZGVmIHNvcnRsaXN0KHN0cmluZyk6CisgICAgICAgIGl0ZW1zID0gc3RyaW5nLnNwbGl0KCcgJykKKyAgICAgICAgaXRlbXMuc29ydCgpCisgICAgICAgIHJldHVybiAnICcuam9pbihpdGVtcykKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBwZSA9IGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yICIwIgorICAgIHB2ID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBwciA9IGQuZ2V0VmFyKCdQUicsIFRydWUpCisKKyAgICBwa2dkYXRhX2RpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgcGFja2FnZXMgPSAiIgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgcG4pKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BBQ0tBR0VTOiAnKToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBvZS51dGlscy5zcXVhc2hzcGFjZXMobGluZS5zcGxpdCgnOiAnLCAxKVsxXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICMgUHJvYmFibHkgYSAtY3Jvc3MgcmVjaXBlLCBqdXN0IGlnbm9yZQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBwYWNrYWdlbGlzdCA9IHBhY2thZ2VzLnNwbGl0KCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnaGlzdGRpcik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2doaXN0ZGlyKQorICAgIGVsc2U6CisgICAgICAgICMgUmVtb3ZlIGZpbGVzIGZvciBwYWNrYWdlcyB0aGF0IG5vIGxvbmdlciBleGlzdAorICAgICAgICBmb3IgaXRlbSBpbiBvcy5saXN0ZGlyKHBrZ2hpc3RkaXIpOgorICAgICAgICAgICAgaWYgaXRlbSAhPSAibGF0ZXN0IiBhbmQgaXRlbSAhPSAibGF0ZXN0X3NyY3JldiI6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gcGFja2FnZWxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGl0ZW1wYXRoID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaXRlbXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmZpbGUgaW4gb3MubGlzdGRpcihpdGVtcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihpdGVtcGF0aCwgc3ViZmlsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihpdGVtcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhpdGVtcGF0aCkKKworICAgIHJjcGluZm8gPSBSZWNpcGVJbmZvKHBuKQorICAgIHJjcGluZm8ucGUgPSBwZQorICAgIHJjcGluZm8ucHYgPSBwdgorICAgIHJjcGluZm8ucHIgPSBwcgorICAgIHJjcGluZm8uZGVwZW5kcyA9IHNvcnRsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpIG9yICIiKSkKKyAgICByY3BpbmZvLnBhY2thZ2VzID0gcGFja2FnZXMKKyAgICB3cml0ZV9yZWNpcGVoaXN0b3J5KHJjcGluZm8sIGQpCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZWxpc3Q6CisgICAgICAgIHBrZ2RhdGEgPSB7fQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsIHBrZykpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGl0ZW0gPSBsaW5lLnJzdHJpcCgnXG4nKS5zcGxpdCgnOiAnLCAxKQorICAgICAgICAgICAgICAgIGtleSA9IGl0ZW1bMF0KKyAgICAgICAgICAgICAgICBpZiBrZXkuZW5kc3dpdGgoJ18nICsgcGtnKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5WzotbGVuKHBrZyktMV0KKyAgICAgICAgICAgICAgICBwa2dkYXRhW2tleV0gPSBpdGVtWzFdLmRlY29kZSgndXRmLTgnKS5kZWNvZGUoJ3N0cmluZ19lc2NhcGUnKQorCisgICAgICAgIHBrZ2UgPSBwa2dkYXRhLmdldCgnUEtHRScsICcwJykKKyAgICAgICAgcGtndiA9IHBrZ2RhdGFbJ1BLR1YnXQorICAgICAgICBwa2dyID0gcGtnZGF0YVsnUEtHUiddCisgICAgICAgICMKKyAgICAgICAgIyBGaW5kIG91dCB3aGF0IHRoZSBsYXN0IHZlcnNpb24gd2FzCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSB2ZXJzaW9uIGRpZCBub3QgZGVjcmVhc2UKKyAgICAgICAgIworICAgICAgICBsYXN0dmVyc2lvbiA9IGdldGxhc3Rwa2d2ZXJzaW9uKHBrZykKKyAgICAgICAgaWYgbGFzdHZlcnNpb246CisgICAgICAgICAgICBsYXN0X3BrZ2UgPSBsYXN0dmVyc2lvbi5wa2dlCisgICAgICAgICAgICBsYXN0X3BrZ3YgPSBsYXN0dmVyc2lvbi5wa2d2CisgICAgICAgICAgICBsYXN0X3BrZ3IgPSBsYXN0dmVyc2lvbi5wa2dyCisgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wKChwa2dlLCBwa2d2LCBwa2dyKSwgKGxhc3RfcGtnZSwgbGFzdF9wa2d2LCBsYXN0X3BrZ3IpKQorICAgICAgICAgICAgaWYgciA8IDA6CisgICAgICAgICAgICAgICAgbXNnID0gIlBhY2thZ2UgdmVyc2lvbiBmb3IgcGFja2FnZSAlcyB3ZW50IGJhY2t3YXJkcyB3aGljaCB3b3VsZCBicmVhayBwYWNrYWdlIGZlZWRzIGZyb20gKCVzOiVzLSVzIHRvICVzOiVzLSVzKSIgJSAocGtnLCBsYXN0X3BrZ2UsIGxhc3RfcGtndiwgbGFzdF9wa2dyLCBwa2dlLCBwa2d2LCBwa2dyKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyIsIG1zZywgZCkKKworICAgICAgICBwa2dpbmZvID0gUGFja2FnZUluZm8ocGtnKQorICAgICAgICAjIEFwcGFyZW50bHkgdGhlIHZlcnNpb24gY2FuIGJlIGRpZmZlcmVudCBvbiBhIHBlci1wYWNrYWdlIGJhc2lzIChzZWUgUHl0aG9uKQorICAgICAgICBwa2dpbmZvLnBlID0gcGtnZGF0YS5nZXQoJ1BFJywgJzAnKQorICAgICAgICBwa2dpbmZvLnB2ID0gcGtnZGF0YVsnUFYnXQorICAgICAgICBwa2dpbmZvLnByID0gcGtnZGF0YVsnUFInXQorICAgICAgICBwa2dpbmZvLnBrZyA9IHBrZ2RhdGFbJ1BLRyddCisgICAgICAgIHBrZ2luZm8ucGtnZSA9IHBrZ2UKKyAgICAgICAgcGtnaW5mby5wa2d2ID0gcGtndgorICAgICAgICBwa2dpbmZvLnBrZ3IgPSBwa2dyCisgICAgICAgIHBrZ2luZm8ucnByb3ZpZGVzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUFJPVklERVMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJkZXBlbmRzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSREVQRU5EUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnJlY29tbWVuZHMgPSBzb3J0cGtnbGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMocGtnZGF0YS5nZXQoJ1JSRUNPTU1FTkRTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yc3VnZ2VzdHMgPSBzb3J0cGtnbGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMocGtnZGF0YS5nZXQoJ1JTVUdHRVNUUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnJlcGxhY2VzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUkVQTEFDRVMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJjb25mbGljdHMgPSBzb3J0cGtnbGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMocGtnZGF0YS5nZXQoJ1JDT05GTElDVFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLmZpbGVzID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdGSUxFUycsICIiKSkKKyAgICAgICAgZm9yIGZpbGV2YXIgaW4gcGtnaW5mby5maWxldmFyczoKKyAgICAgICAgICAgIHBrZ2luZm8uZmlsZXZhcnNbZmlsZXZhcl0gPSBwa2dkYXRhLmdldChmaWxldmFyLCAiIikKKworICAgICAgICAjIEdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdlZCBmaWxlcworICAgICAgICB2YWwgPSBwa2dkYXRhLmdldCgnRklMRVNfSU5GTycsICcnKQorICAgICAgICBkaWN0dmFsID0ganNvbi5sb2Fkcyh2YWwpCisgICAgICAgIGZpbGVsaXN0ID0gZGljdHZhbC5rZXlzKCkKKyAgICAgICAgZmlsZWxpc3Quc29ydCgpCisgICAgICAgIHBrZ2luZm8uZmlsZWxpc3QgPSAiICIuam9pbihmaWxlbGlzdCkKKworICAgICAgICBwa2dpbmZvLnNpemUgPSBpbnQocGtnZGF0YVsnUEtHU0laRSddKQorCisgICAgICAgIHdyaXRlX3BrZ2hpc3RvcnkocGtnaW5mbywgZCkKKworICAgICMgQ3JlYXRlIGZpbGVzLWluLTxwYWNrYWdlLW5hbWU+LnR4dCBmaWxlcyBjb250YWluaW5nIGEgbGlzdCBvZiBmaWxlcyBvZiBlYWNoIHJlY2lwZSdzIHBhY2thZ2UKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImJ1aWxkaGlzdG9yeV9saXN0X3BrZ19maWxlcyIsIGQpCit9CisKKworZGVmIHdyaXRlX3JlY2lwZWhpc3RvcnkocmNwaW5mbywgZCk6CisgICAgaW1wb3J0IGNvZGVjcworCisgICAgYmIuZGVidWcoMiwgIldyaXRpbmcgcmVjaXBlIGhpc3RvcnkiKQorCisgICAgcGtnaGlzdGRpciA9IGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRElSX1BBQ0tBR0UnLCBUcnVlKQorCisgICAgaW5mb2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgImxhdGVzdCIpCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvZmlsZSwgInciLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgICAgIGlmIHJjcGluZm8ucGUgIT0gIjAiOgorICAgICAgICAgICAgZi53cml0ZSh1IlBFID0gJXNcbiIgJSAgcmNwaW5mby5wZSkKKyAgICAgICAgZi53cml0ZSh1IlBWID0gJXNcbiIgJSAgcmNwaW5mby5wdikKKyAgICAgICAgZi53cml0ZSh1IlBSID0gJXNcbiIgJSAgcmNwaW5mby5wcikKKyAgICAgICAgZi53cml0ZSh1IkRFUEVORFMgPSAlc1xuIiAlICByY3BpbmZvLmRlcGVuZHMpCisgICAgICAgIGYud3JpdGUodSJQQUNLQUdFUyA9ICVzXG4iICUgIHJjcGluZm8ucGFja2FnZXMpCisKKworZGVmIHdyaXRlX3BrZ2hpc3RvcnkocGtnaW5mbywgZCk6CisgICAgaW1wb3J0IGNvZGVjcworCisgICAgYmIuZGVidWcoMiwgIldyaXRpbmcgcGFja2FnZSBoaXN0b3J5IGZvciBwYWNrYWdlICVzIiAlIHBrZ2luZm8ubmFtZSkKKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIHBrZ3BhdGggPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgcGtnaW5mby5uYW1lKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dwYXRoKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ3BhdGgpCisKKyAgICBpbmZvZmlsZSA9IG9zLnBhdGguam9pbihwa2dwYXRoLCAibGF0ZXN0IikKKyAgICB3aXRoIGNvZGVjcy5vcGVuKGluZm9maWxlLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgaWYgcGtnaW5mby5wZSAhPSAiMCI6CisgICAgICAgICAgICBmLndyaXRlKHUiUEUgPSAlc1xuIiAlICBwa2dpbmZvLnBlKQorICAgICAgICBmLndyaXRlKHUiUFYgPSAlc1xuIiAlICBwa2dpbmZvLnB2KQorICAgICAgICBmLndyaXRlKHUiUFIgPSAlc1xuIiAlICBwa2dpbmZvLnByKQorCisgICAgICAgIHBrZ3ZhcnMgPSB7fQorICAgICAgICBwa2d2YXJzWydQS0cnXSA9IHBrZ2luZm8ucGtnIGlmIHBrZ2luZm8ucGtnICE9IHBrZ2luZm8ubmFtZSBlbHNlICcnCisgICAgICAgIHBrZ3ZhcnNbJ1BLR0UnXSA9IHBrZ2luZm8ucGtnZSBpZiBwa2dpbmZvLnBrZ2UgIT0gcGtnaW5mby5wZSBlbHNlICcnCisgICAgICAgIHBrZ3ZhcnNbJ1BLR1YnXSA9IHBrZ2luZm8ucGtndiBpZiBwa2dpbmZvLnBrZ3YgIT0gcGtnaW5mby5wdiBlbHNlICcnCisgICAgICAgIHBrZ3ZhcnNbJ1BLR1InXSA9IHBrZ2luZm8ucGtnciBpZiBwa2dpbmZvLnBrZ3IgIT0gcGtnaW5mby5wciBlbHNlICcnCisgICAgICAgIGZvciBwa2d2YXIgaW4gcGtndmFyczoKKyAgICAgICAgICAgIHZhbCA9IHBrZ3ZhcnNbcGtndmFyXQorICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgIGYud3JpdGUodSIlcyA9ICVzXG4iICUgKHBrZ3ZhciwgdmFsKSkKKworICAgICAgICBmLndyaXRlKHUiUlBST1ZJREVTID0gJXNcbiIgJSAgcGtnaW5mby5ycHJvdmlkZXMpCisgICAgICAgIGYud3JpdGUodSJSREVQRU5EUyA9ICVzXG4iICUgIHBrZ2luZm8ucmRlcGVuZHMpCisgICAgICAgIGYud3JpdGUodSJSUkVDT01NRU5EUyA9ICVzXG4iICUgIHBrZ2luZm8ucnJlY29tbWVuZHMpCisgICAgICAgIGlmIHBrZ2luZm8ucnN1Z2dlc3RzOgorICAgICAgICAgICAgZi53cml0ZSh1IlJTVUdHRVNUUyA9ICVzXG4iICUgIHBrZ2luZm8ucnN1Z2dlc3RzKQorICAgICAgICBpZiBwa2dpbmZvLnJyZXBsYWNlczoKKyAgICAgICAgICAgIGYud3JpdGUodSJSUkVQTEFDRVMgPSAlc1xuIiAlICBwa2dpbmZvLnJyZXBsYWNlcykKKyAgICAgICAgaWYgcGtnaW5mby5yY29uZmxpY3RzOgorICAgICAgICAgICAgZi53cml0ZSh1IlJDT05GTElDVFMgPSAlc1xuIiAlICBwa2dpbmZvLnJjb25mbGljdHMpCisgICAgICAgIGYud3JpdGUodSJQS0dTSVpFID0gJWRcbiIgJSAgcGtnaW5mby5zaXplKQorICAgICAgICBmLndyaXRlKHUiRklMRVMgPSAlc1xuIiAlICBwa2dpbmZvLmZpbGVzKQorICAgICAgICBmLndyaXRlKHUiRklMRUxJU1QgPSAlc1xuIiAlICBwa2dpbmZvLmZpbGVsaXN0KQorCisgICAgZm9yIGZpbGV2YXIgaW4gcGtnaW5mby5maWxldmFyczoKKyAgICAgICAgZmlsZXZhcnBhdGggPSBvcy5wYXRoLmpvaW4ocGtncGF0aCwgImxhdGVzdC4lcyIgJSBmaWxldmFyKQorICAgICAgICB2YWwgPSBwa2dpbmZvLmZpbGV2YXJzW2ZpbGV2YXJdCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZXZhcnBhdGgsICJ3IiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodmFsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXZhcnBhdGgpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxldmFycGF0aCkKKworIworIyByb290ZnNfdHlwZSBjYW4gYmU6IGltYWdlLCBzZGtfdGFyZ2V0LCBzZGtfaG9zdAorIworZGVmIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkLCByb290ZnNfdHlwZT0iaW1hZ2UiKToKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisKKyAgICBwcm9jZXNzX2xpc3QgPSBbKCdmaWxlJywgJ2JoX2luc3RhbGxlZF9wa2dzLnR4dCcpLFwKKyAgICAgICAgICAgICAgICAgICAgKCdkZXBzJywgJ2JoX2luc3RhbGxlZF9wa2dzX2RlcHMudHh0JyldCisKKyAgICBmb3Igb3V0cHV0X3R5cGUsIG91dHB1dF9maWxlIGluIHByb2Nlc3NfbGlzdDoKKyAgICAgICAgb3V0cHV0X2ZpbGVfZnVsbCA9IG9zLnBhdGguam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCBvdXRwdXRfZmlsZSkKKworICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X2ZpbGVfZnVsbCwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBpZiByb290ZnNfdHlwZSA9PSAiaW1hZ2UiOgorICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZShpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBvdXRwdXRfdHlwZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZShzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgcm9vdGZzX3R5cGUgPT0gInNka190YXJnZXQiLCBvdXRwdXRfdHlwZSkpCisKK3B5dGhvbiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UoKSB7CisgICAgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkKGQpCit9CisKK3B5dGhvbiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX3RhcmdldCgpIHsKKyAgICBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgInNka190YXJnZXQiKQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka19ob3N0KCkgeworICAgIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkLCAic2RrX2hvc3QiKQorfQorCitidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCgpIHsKKwlta2RpciAtcCAkMQorCisJIyBHZXQgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMKKwlwa2djYWNoZT0iJDEvaW5zdGFsbGVkLXBhY2thZ2VzLnRtcCIKKwljYXQgJHtXT1JLRElSfS9iaF9pbnN0YWxsZWRfcGtncy50eHQgfCBzb3J0ID4gJHBrZ2NhY2hlICYmIHJtICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3MudHh0CisKKwljYXQgJHBrZ2NhY2hlIHwgYXdrICd7IHByaW50ICQxIH0nID4gJDEvaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0CisJaWYgWyAtcyAkcGtnY2FjaGUgXSA7IHRoZW4KKwkJY2F0ICRwa2djYWNoZSB8IGF3ayAneyBwcmludCAkMiB9JyB8IHhhcmdzIC1uMSBiYXNlbmFtZSA+ICQxL2luc3RhbGxlZC1wYWNrYWdlcy50eHQKKwllbHNlCisJCXByaW50ZiAiIiA+ICQxL2luc3RhbGxlZC1wYWNrYWdlcy50eHQKKwlmaQorCisJIyBQcm9kdWNlIGRlcGVuZGVuY3kgZ3JhcGgKKwkjIEZpcnN0LCBxdW90ZSBlYWNoIG5hbWUgdG8gaGFuZGxlIGNoYXJhY3RlcnMgdGhhdCBjYXVzZSBpc3N1ZXMgZm9yIGRvdAorCXNlZCAnczpcKFtefCBdKlwpOiJcMSI6ZycgJHtXT1JLRElSfS9iaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dCA+ICQxL2RlcGVuZHMudG1wICYmIFwKKwkJcm0gJHtXT1JLRElSfS9iaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dAorCSMgQ2hhbmdlIGRlbGltaXRlciBmcm9tIHBpcGUgdG8gLT4gYW5kIHNldCBzdHlsZSBmb3IgcmVjb21tZW5kIGxpbmVzCisJc2VkIC1pIC1lICdzOnw6IC0+IDonIC1lICdzOiJcW1JFQ1xdIjpbc3R5bGU9ZG90dGVkXTonIC1lICdzOiQ6OzonICQxL2RlcGVuZHMudG1wCisJIyBBZGQgaGVhZGVyLCBzb3J0ZWQgYW5kIGRlLWR1cGVkIGNvbnRlbnRzIGFuZCBmb290ZXIgYW5kIHRoZW4gZGVsZXRlIHRoZSB0ZW1wIGZpbGUKKwlwcmludGYgImRpZ3JhcGggZGVwZW5kcyB7XG4gICAgbm9kZSBbc2hhcGU9cGxhaW50ZXh0XVxuIiA+ICQxL2RlcGVuZHMuZG90CisJY2F0ICQxL2RlcGVuZHMudG1wIHwgc29ydCB8IHVuaXEgPj4gJDEvZGVwZW5kcy5kb3QKKwllY2hvICJ9IiA+PiAgJDEvZGVwZW5kcy5kb3QKKwlybSAkMS9kZXBlbmRzLnRtcAorCisJIyBQcm9kdWNlIGluc3RhbGxlZCBwYWNrYWdlIHNpemVzIGxpc3QKKwlwcmludGYgIiIgPiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKwljYXQgJHBrZ2NhY2hlIHwgd2hpbGUgcmVhZCBwa2cgcGtnZmlsZSBwa2dhcmNoCisJZG8KKwkJc2l6ZT1gb2UtcGtnZGF0YS11dGlsIC1wICR7UEtHREFUQV9ESVJ9IHJlYWQtdmFsdWUgIlBLR1NJWkUiICR7cGtnfV8ke3BrZ2FyY2h9YAorCQlpZiBbICIkc2l6ZSIgIT0gIiIgXSA7IHRoZW4KKwkJCWVjaG8gIiRzaXplICRwa2ciID4+ICQxL2luc3RhbGxlZC1wYWNrYWdlLXNpemVzLnRtcAorCQlmaQorCWRvbmUKKwljYXQgJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wIHwgc29ydCAtbiAtciB8IGF3ayAne3ByaW50ICQxICJcdEtpQiAiICQyfScgPiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQKKwlybSAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKworCSMgV2UncmUgbm93IGRvbmUgd2l0aCB0aGUgY2FjaGUsIGRlbGV0ZSBpdAorCXJtICRwa2djYWNoZQorCisJaWYgWyAiJDIiICE9ICJzZGsiIF0gOyB0aGVuCisJCSMgUHJvZHVjZSBzb21lIGN1dC1kb3duIGdyYXBocyAoZm9yIHJlYWRhYmlsaXR5KQorCQlncmVwIC12IGtlcm5lbF9pbWFnZSAkMS9kZXBlbmRzLmRvdCB8IGdyZXAgLXYga2VybmVsLTIgfCBncmVwIC12IGtlcm5lbC0zID4gJDEvZGVwZW5kcy1ub2tlcm5lbC5kb3QKKwkJZ3JlcCAtdiBsaWJjNiAkMS9kZXBlbmRzLW5va2VybmVsLmRvdCB8IGdyZXAgLXYgbGliZ2NjID4gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMuZG90CisJCWdyZXAgLXYgdXBkYXRlLSAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy5kb3QgPiAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS5kb3QKKwkJZ3JlcCAtdiBrZXJuZWwtbW9kdWxlICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLW5vdXBkYXRlLmRvdCA+ICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLW5vdXBkYXRlLW5vbW9kdWxlcy5kb3QKKwlmaQorCisJIyBhZGQgY29tcGxlbWVudGFyeSBwYWNrYWdlIGluZm9ybWF0aW9uCisJaWYgWyAtZSAke1dPUktESVJ9L2NvbXBsZW1lbnRhcnlfcGtncy50eHQgXTsgdGhlbgorCQljcCAke1dPUktESVJ9L2NvbXBsZW1lbnRhcnlfcGtncy50eHQgJDEKKwlmaQorfQorCitidWlsZGhpc3RvcnlfZ2V0X2ltYWdlX2luc3RhbGxlZCgpIHsKKwkjIEFueXRoaW5nIHJlcXVpcmluZyB0aGUgdXNlIG9mIHRoZSBwYWNrYWdpbmcgc3lzdGVtIHNob3VsZCBiZSBkb25lIGluIGhlcmUKKwkjIGluIGNhc2UgdGhlIHBhY2thZ2luZyBmaWxlcyBhcmUgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmb3IgdGhpcyBpbWFnZQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdpbWFnZScsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9Cit9CisKK2J1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZCgpIHsKKwkjIEFueXRoaW5nIHJlcXVpcmluZyB0aGUgdXNlIG9mIHRoZSBwYWNrYWdpbmcgc3lzdGVtIHNob3VsZCBiZSBkb25lIGluIGhlcmUKKwkjIGluIGNhc2UgdGhlIHBhY2thZ2luZyBmaWxlcyBhcmUgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmb3IgdGhpcyBTREsKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCAnc2RrJywgJzEnLCAnMCcsIGQpfSIgPSAiMCIgXSA7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWJ1aWxkaGlzdG9yeV9nZXRfaW5zdGFsbGVkICR7QlVJTERISVNUT1JZX0RJUl9TREt9LyQxIHNkaworfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfaG9zdCgpIHsKKwlidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQgaG9zdAorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfdGFyZ2V0KCkgeworCWJ1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZCB0YXJnZXQKK30KKworYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMoKSB7CisJIyBMaXN0IHRoZSBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgYnV0IGV4Y2x1ZGUgZGF0ZS90aW1lIGV0Yy4KKwkjIFRoaXMgYXdrIHNjcmlwdCBpcyBzb21ld2hhdCBtZXNzeSwgYnV0IGhhbmRsZXMgd2hlcmUgdGhlIHNpemUgaXMgbm90IHByaW50ZWQgZm9yIGRldmljZSBmaWxlcyB1bmRlciBwc2V1ZG8KKwlpZiBbICIkMyIgPSAiZmFrZXJvb3QiIF0gOyB0aGVuCisJCSggY2QgJDEgJiYgJHtGQUtFUk9PVEVOVn0gJHtGQUtFUk9PVENNRH0gZmluZCAuICEgLXBhdGggLiAtcHJpbnRmICIlTSAlLTEwdSAlLTEwZyAlMTBzICVwIC0+ICVsXG4iIHwgc29ydCAtazUgfCBzZWQgJ3MvICogLT4gJC8vJyA+ICQyICkKKwllbHNlCisJCSggY2QgJDEgJiYgZmluZCAuICEgLXBhdGggLiAtcHJpbnRmICIlTSAlLTEwdSAlLTEwZyAlMTBzICVwIC0+ICVsXG4iIHwgc29ydCAtazUgfCBzZWQgJ3MvICogLT4gJC8vJyA+ICQyICkKKwlmaQorfQorCitidWlsZGhpc3RvcnlfbGlzdF9wa2dfZmlsZXMoKSB7CisJIyBDcmVhdGUgaW5kaXZpZHVhbCBmaWxlcy1pbi1wYWNrYWdlIGZvciBlYWNoIHJlY2lwZSdzIHBhY2thZ2UKKwlmb3IgcGtnZGlyIGluICQoZmluZCAke1BLR0RFU1R9LyogLW1heGRlcHRoIDAgLXR5cGUgZCk7IGRvCisJCXBrZ25hbWU9JChiYXNlbmFtZSAkcGtnZGlyKQorCQlvdXRmb2xkZXI9IiR7QlVJTERISVNUT1JZX0RJUl9QQUNLQUdFfS8kcGtnbmFtZSIKKwkJb3V0ZmlsZT0iJG91dGZvbGRlci9maWxlcy1pbi1wYWNrYWdlLnR4dCIKKwkJIyBNYWtlIHN1cmUgdGhlIG91dHB1dCBmb2xkZXIgZXhpc3RzIHNvIHdlIGNhbiBjcmVhdGUgdGhlIGZpbGUKKwkJaWYgWyAhIC1kICRvdXRmb2xkZXIgXSA7IHRoZW4KKwkJCWJiZGVidWcgMiAiRm9sZGVyICRvdXRmb2xkZXIgZG9lcyBub3QgZXhpc3QsIGZpbGUgJG91dGZpbGUgbm90IGNyZWF0ZWQiCisJCQljb250aW51ZQorCQlmaQorCQlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAkcGtnZGlyICRvdXRmaWxlIGZha2Vyb290CisJZG9uZQorfQorCitidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbygpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ2ltYWdlJywgJzEnLCAnMCcsIGQpfSIgPSAiMCIgXSA7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWJ1aWxkaGlzdG9yeV9saXN0X2ZpbGVzICR7SU1BR0VfUk9PVEZTfSAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ZpbGVzLWluLWltYWdlLnR4dAorCisJIyBDb2xsZWN0IGZpbGVzIHJlcXVlc3RlZCBpbiBCVUlMREhJU1RPUllfSU1BR0VfRklMRVMKKwlybSAtcmYgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1maWxlcworCWZvciBmIGluICR7QlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTfTsgZG8KKwkJaWYgWyAtZiAke0lNQUdFX1JPT1RGU30vJGYgXSA7IHRoZW4KKwkJCW1rZGlyIC1wICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMvYGRpcm5hbWUgJGZgCisJCQljcCAke0lNQUdFX1JPT1RGU30vJGYgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1maWxlcy8kZgorCQlmaQorCWRvbmUKKworCSMgUmVjb3JkIHNvbWUgbWFjaGluZS1yZWFkYWJsZSBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZSBpbWFnZQorCXByaW50ZiAiIiAgPiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0CisJY2F0ID4+ICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtaW5mby50eHQgPDxFTkQKKyR7QGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2V2YXJzKGQpfQorRU5ECisJaW1hZ2VzaXplPWBkdSAta3MgJHtJTUFHRV9ST09URlN9IHwgYXdrICd7IHByaW50ICQxIH0nYAorCWVjaG8gIklNQUdFU0laRSA9ICRpbWFnZXNpemUiID4+ICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtaW5mby50eHQKKworCSMgQWRkIHNvbWUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorCWVjaG8gIiR7TUFDSElORX06ICR7SU1BR0VfQkFTRU5BTUV9IGNvbmZpZ3VyZWQgZm9yICR7RElTVFJPfSAke0RJU1RST19WRVJTSU9OfSIgPiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2J1aWxkLWlkLnR4dAorCisJY2F0ID4+ICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vYnVpbGQtaWQudHh0IDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X2J1aWxkX2lkKGQpfQorRU5ECit9CisKK2J1aWxkaGlzdG9yeV9nZXRfc2RraW5mbygpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ3NkaycsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAke1NES19PVVRQVVR9ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L2ZpbGVzLWluLXNkay50eHQKKworCSMgUmVjb3JkIHNvbWUgbWFjaGluZS1yZWFkYWJsZSBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZSBTREsKKwlwcmludGYgIiIgID4gJHtCVUlMREhJU1RPUllfRElSX1NES30vc2RrLWluZm8udHh0CisJY2F0ID4+ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L3Nkay1pbmZvLnR4dCA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9zZGt2YXJzKGQpfQorRU5ECisJc2Rrc2l6ZT1gZHUgLWtzICR7U0RLX09VVFBVVH0gfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJZWNobyAiU0RLU0laRSA9ICRzZGtzaXplIiA+PiAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9zZGstaW5mby50eHQKK30KKworIyBCeSB1c2luZyBST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EIHdlIGdldCBpbiBhZnRlciB1bmluc3RhbGxhdGlvbiBvZgorIyB1bm5lZWRlZCBwYWNrYWdlcyBidXQgYmVmb3JlIHRoZSByZW1vdmFsIG9mIHBhY2thZ2luZyBmaWxlcworUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCArPSAiIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9pbWFnZSA7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlX2luc3RhbGxlZCA7ICIKKworSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCArPSAiIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2VpbmZvIDsgIgorCisjIFdlIHdhbnQgdGhlc2UgdG8gYmUgdGhlIGxhc3QgcnVuIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCBhZnRlciBjb21wbGVtZW50YXJ5IHBhY2thZ2UgaW5zdGFsbGF0aW9uCitQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORF9hcHBlbmQgPSAiIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9zZGtfdGFyZ2V0IDtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZF90YXJnZXQgOyAiCitQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkRfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX2hvc3QgO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZF9ob3N0IDsgIgorCitTREtfUE9TVFBST0NFU1NfQ09NTUFORCArPSAiYnVpbGRoaXN0b3J5X2dldF9zZGtpbmZvIDsgIgorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9idWlsZF9pZChkKToKKyAgICBpZiBkLmdldFZhcignQkJfV09SS0VSQ09OVEVYVCcsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuICIiCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgc3RhdHVzbGluZXMgPSBbXQorICAgIGZvciBmdW5jIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0JVSUxEQ0ZHX0ZVTkNTJywgbG9jYWxkYXRhKToKKyAgICAgICAgZyA9IGdsb2JhbHMoKQorICAgICAgICBpZiBmdW5jIG5vdCBpbiBnOgorICAgICAgICAgICAgYmIud2FybigiQnVpbGQgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIGZ1bmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmbGluZXMgPSBnW2Z1bmNdKGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGlmIGZsaW5lczoKKyAgICAgICAgICAgICAgICBzdGF0dXNsaW5lcy5leHRlbmQoZmxpbmVzKQorCisgICAgc3RhdHVzaGVhZGVyID0gZC5nZXRWYXIoJ0JVSUxEQ0ZHX0hFQURFUicsIFRydWUpCisgICAgcmV0dXJuKCdcbiVzXG4lc1xuJyAlIChzdGF0dXNoZWFkZXIsICdcbicuam9pbihzdGF0dXNsaW5lcykpKQorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9tZXRhZGF0YV9yZXZzKGQpOgorICAgICMgV2Ugd2FudCBhbiBlYXNpbHkgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgaGVyZSwgc28gZ2V0X2xheWVyc19icmFuY2hfcmV2IGlzbid0IHF1aXRlIHdoYXQgd2Ugd2FudAorICAgIGxheWVycyA9IChkLmdldFZhcigiQkJMQVlFUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG1lZGFkYXRhX3JldnMgPSBbIiUtMTdzID0gJXM6JXMiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKKyAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChpLCBOb25lKS5zdHJpcCgpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihpLCBOb25lKSkgXAorICAgICAgICAgICAgZm9yIGkgaW4gbGF5ZXJzXQorICAgIHJldHVybiAnXG4nLmpvaW4obWVkYWRhdGFfcmV2cykKKworZGVmIG91dHB1dHZhcnModmFycywgbGlzdHZhcnMsIGQpOgorICAgIHZhcnMgPSB2YXJzLnNwbGl0KCkKKyAgICBsaXN0dmFycyA9IGxpc3R2YXJzLnNwbGl0KCkKKyAgICByZXQgPSAiIgorICAgIGZvciB2YXIgaW4gdmFyczoKKyAgICAgICAgdmFsdWUgPSBkLmdldFZhcih2YXIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIHZhciBpbiBsaXN0dmFyczoKKyAgICAgICAgICAgICMgU3F1YXNoIG91dCBzcGFjZXMKKyAgICAgICAgICAgIHZhbHVlID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHZhbHVlKQorICAgICAgICByZXQgKz0gIiVzID0gJXNcbiIgJSAodmFyLCB2YWx1ZSkKKyAgICByZXR1cm4gcmV0LnJzdHJpcCgnXG4nKQorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9pbWFnZXZhcnMoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybiAiIgorICAgIGltYWdldmFycyA9ICJESVNUUk8gRElTVFJPX1ZFUlNJT04gVVNFUl9DTEFTU0VTIElNQUdFX0NMQVNTRVMgSU1BR0VfRkVBVFVSRVMgSU1BR0VfTElOR1VBUyBJTUFHRV9JTlNUQUxMIEJBRF9SRUNPTU1FTkRBVElPTlMgTk9fUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSBST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCBJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EIgorICAgIGxpc3R2YXJzID0gIlVTRVJfQ0xBU1NFUyBJTUFHRV9DTEFTU0VTIElNQUdFX0ZFQVRVUkVTIElNQUdFX0xJTkdVQVMgSU1BR0VfSU5TVEFMTCBCQURfUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSIKKyAgICByZXR1cm4gb3V0cHV0dmFycyhpbWFnZXZhcnMsIGxpc3R2YXJzLCBkKQorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9zZGt2YXJzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICByZXR1cm4gIiIKKyAgICBzZGt2YXJzID0gIkRJU1RSTyBESVNUUk9fVkVSU0lPTiBTREtfTkFNRSBTREtfVkVSU0lPTiBTREtNQUNISU5FIFNES0lNQUdFX0ZFQVRVUkVTIEJBRF9SRUNPTU1FTkRBVElPTlMgTk9fUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSIKKyAgICBsaXN0dmFycyA9ICJTREtJTUFHRV9GRUFUVVJFUyBCQURfUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSIKKyAgICByZXR1cm4gb3V0cHV0dmFycyhzZGt2YXJzLCBsaXN0dmFycywgZCkKKworCitkZWYgYnVpbGRoaXN0b3J5X2dldF9jbWRsaW5lKGQpOgorICAgIGlmIHN5cy5hcmd2WzBdLmVuZHN3aXRoKCdiaW4vYml0YmFrZScpOgorICAgICAgICBiaW5jbWQgPSAnYml0YmFrZScKKyAgICBlbHNlOgorICAgICAgICBiaW5jbWQgPSBzeXMuYXJndlswXQorICAgIHJldHVybiAnJXMgJXMnICUgKGJpbmNtZCwgJyAnLmpvaW4oc3lzLmFyZ3ZbMTpdKSkKKworCitidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCgpIHsKKwlpZiBbICIkMyIgPSAiIiBdIDsgdGhlbgorCQljb21taXRvcHRzPSIke0JVSUxESElTVE9SWV9ESVJ9LyAtLWFsbG93LWVtcHR5IgorCQlpdGVtPSJObyBjaGFuZ2VzIgorCWVsc2UKKwkJY29tbWl0b3B0cz0iJDMgbWV0YWRhdGEtcmV2cyIKKwkJaXRlbT0iJDMiCisJZmkKKwlpZiBbICIke0JVSUxESElTVE9SWV9CVUlMRF9GQUlMVVJFU30iID0gIjAiIF0gOyB0aGVuCisJCXJlc3VsdD0ic3VjY2VlZGVkIgorCWVsc2UKKwkJcmVzdWx0PSJmYWlsZWQiCisJZmkKKwljYXNlICR7QlVJTERISVNUT1JZX0JVSUxEX0lOVEVSUlVQVEVEfSBpbgorCQkxKQorCQkJcmVzdWx0PSIkcmVzdWx0IChpbnRlcnJ1cHRlZCkiCisJCQk7OworCQkyKQorCQkJcmVzdWx0PSIkcmVzdWx0IChmb3JjZSBpbnRlcnJ1cHRlZCkiCisJCQk7OworCWVzYWMKKwljb21taXRtc2dmaWxlPWBta3RlbXBgCisJY2F0ID4gJGNvbW1pdG1zZ2ZpbGUgPDwgRU5ECiskaXRlbTogQnVpbGQgJHtCVUlMRE5BTUV9IG9mICR7RElTVFJPfSAke0RJU1RST19WRVJTSU9OfSBmb3IgbWFjaGluZSAke01BQ0hJTkV9IG9uICQyCisKK2NtZDogJDEKKworcmVzdWx0OiAkcmVzdWx0CisKK21ldGFkYXRhIHJldmlzaW9uczoKK0VORAorCWNhdCAke0JVSUxESElTVE9SWV9ESVJ9L21ldGFkYXRhLXJldnMgPj4gJGNvbW1pdG1zZ2ZpbGUKKwlnaXQgY29tbWl0ICRjb21taXRvcHRzIC1GICRjb21taXRtc2dmaWxlIC0tYXV0aG9yICIke0JVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SfSIgPiAvZGV2L251bGwKKwlybSAkY29tbWl0bXNnZmlsZQorfQorCitidWlsZGhpc3RvcnlfY29tbWl0KCkgeworCWlmIFsgISAtZCAke0JVSUxESElTVE9SWV9ESVJ9IF0gOyB0aGVuCisJCSMgQ29kZSBhYm92ZSB0aGF0IGNyZWF0ZXMgdGhpcyBkaXIgbmV2ZXIgZXhlY3V0ZWQsIHNvIHRoZXJlIGNhbid0IGJlIGFueXRoaW5nIHRvIGNvbW1pdAorCQlyZXR1cm4KKwlmaQorCisJIyBDcmVhdGUgYSBtYWNoaW5lLXJlYWRhYmxlIGxpc3Qgb2YgbWV0YWRhdGEgcmV2aXNpb25zIGZvciBlYWNoIGxheWVyCisJY2F0ID4gJHtCVUlMREhJU1RPUllfRElSfS9tZXRhZGF0YS1yZXZzIDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X21ldGFkYXRhX3JldnMoZCl9CitFTkQKKworCSggY2QgJHtCVUlMREhJU1RPUllfRElSfS8KKwkJIyBJbml0aWFsaXNlIHRoZSByZXBvIGlmIG5lY2Vzc2FyeQorCQlpZiBbICEgLWQgLmdpdCBdIDsgdGhlbgorCQkJZ2l0IGluaXQgLXEKKwkJZWxzZQorCQkJZ2l0IHRhZyAtZiBidWlsZC1taW51cy0zIGJ1aWxkLW1pbnVzLTIgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCQlnaXQgdGFnIC1mIGJ1aWxkLW1pbnVzLTIgYnVpbGQtbWludXMtMSA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUKKwkJCWdpdCB0YWcgLWYgYnVpbGQtbWludXMtMSA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUKKwkJZmkKKwkJIyBJZiB0aGUgdXNlciBoYXNuJ3Qgc2V0IHVwIHRoZWlyIG5hbWUvZW1haWwsIHNldCBzb21lIGRlZmF1bHRzCisJCSMganVzdCBmb3IgdGhpcyByZXBvIChvdGhlcndpc2UgdGhlIGNvbW1pdCB3aWxsIGZhaWwgd2l0aCBvbGRlcgorCQkjIHZlcnNpb25zIG9mIGdpdCkKKwkJaWYgISBnaXQgY29uZmlnIHVzZXIuZW1haWwgPiAvZGV2L251bGwgOyB0aGVuCisJCQlnaXQgY29uZmlnIC0tbG9jYWwgdXNlci5lbWFpbCAiYnVpbGRoaXN0b3J5QCR7RElTVFJPfSIKKwkJZmkKKwkJaWYgISBnaXQgY29uZmlnIHVzZXIubmFtZSA+IC9kZXYvbnVsbCA7IHRoZW4KKwkJCWdpdCBjb25maWcgLS1sb2NhbCB1c2VyLm5hbWUgImJ1aWxkaGlzdG9yeSIKKwkJZmkKKwkJIyBDaGVjayBpZiB0aGVyZSBhcmUgbmV3L2NoYW5nZWQgZmlsZXMgdG8gY29tbWl0IChvdGhlciB0aGFuIG1ldGFkYXRhLXJldnMpCisJCXJlcG9zdGF0dXM9YGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCBncmVwIC12ICIgbWV0YWRhdGEtcmV2cyQiYAorCQlIT1NUTkFNRT1gaG9zdG5hbWUgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCQlDTURMSU5FPSIke0BidWlsZGhpc3RvcnlfZ2V0X2NtZGxpbmUoZCl9IgorCQlpZiBbICIkcmVwb3N0YXR1cyIgIT0gIiIgXSA7IHRoZW4KKwkJCWdpdCBhZGQgLUEgLgorCQkJIyBwb3JjZWxhaW4gb3V0cHV0IGxvb2tzIGxpa2UgIj8/IHBhY2thZ2VzL2Zvby9iYXIiCisJCQkjIEVuc3VyZSB3ZSBjb21taXQgbWV0YWRhdGEtcmV2cyB3aXRoIHRoZSBmaXJzdCBjb21taXQKKwkJCWZvciBlbnRyeSBpbiBgZWNobyAiJHJlcG9zdGF0dXMiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IGF3ayAtRi8gJ3twcmludCAkMX0nIHwgc29ydCB8IHVuaXFgIDsgZG8KKwkJCQlidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCAiJENNRExJTkUiICIkSE9TVE5BTUUiICIkZW50cnkiCisJCQlkb25lCisJCQlnaXQgZ2MgLS1hdXRvIC0tcXVpZXQKKwkJZWxzZQorCQkJYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIgorCQlmaQorCQlpZiBbICIke0JVSUxESElTVE9SWV9QVVNIX1JFUE99IiAhPSAiIiBdIDsgdGhlbgorCQkJZ2l0IHB1c2ggLXEgJHtCVUlMREhJU1RPUllfUFVTSF9SRVBPfQorCQlmaSkgfHwgdHJ1ZQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2V2ZW50aGFuZGxlcigpIHsKKyAgICBpZiBlLmRhdGEuZ2V0VmFyKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCBUcnVlKS5zdHJpcCgpOgorICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyKCJCVUlMREhJU1RPUllfQ09NTUlUIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiV3JpdGluZyBidWlsZGhpc3RvcnkiKQorICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGUuZGF0YSkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JVSUxESElTVE9SWV9CVUlMRF9GQUlMVVJFUycsIHN0cihlLl9mYWlsdXJlcykpCisgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IGdldGF0dHIoZSwgJ19pbnRlcnJ1cHRlZCcsIDApCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCVUlMREhJU1RPUllfQlVJTERfSU5URVJSVVBURUQnLCBzdHIoaW50ZXJydXB0ZWQpKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJidWlsZGhpc3RvcnlfY29tbWl0IiwgbG9jYWxkYXRhKQorfQorCithZGRoYW5kbGVyIGJ1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXIKK2J1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKKworCisjIEZJWE1FIHRoaXMgb3VnaHQgdG8gYmUgbW92ZWQgaW50byB0aGUgZmV0Y2hlcgorZGVmIF9nZXRfc3JjcmV2X3ZhbHVlcyhkKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHZlcnNpb24gc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgcmVjaXBlCisgICAgIiIiCisKKyAgICBzY21zID0gW10KKyAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpLCBkKQorICAgIHVybGRhdGEgPSBmZXRjaGVyLnVkCisgICAgZm9yIHUgaW4gdXJsZGF0YToKKyAgICAgICAgaWYgdXJsZGF0YVt1XS5tZXRob2Quc3VwcG9ydHNfc3JjcmV2KCk6CisgICAgICAgICAgICBzY21zLmFwcGVuZCh1KQorCisgICAgYXV0b2luY190ZW1wbCA9ICdBVVRPSU5DKycKKyAgICBkaWN0X3NyY3JldnMgPSB7fQorICAgIGRpY3RfdGFnX3NyY3JldnMgPSB7fQorICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgdWQgPSB1cmxkYXRhW3NjbV0KKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV2ID0gdWQubWV0aG9kLnNvcnRhYmxlX3JldmlzaW9uKHVkLCBkLCBuYW1lKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIHN1cHBvcnQgb2xkIGJpdGJha2UgdmVyc2lvbnMKKyAgICAgICAgICAgICAgICByZXYgPSB1ZC5tZXRob2Quc29ydGFibGVfcmV2aXNpb24oc2NtLCB1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgICMgQ2xlYW4gdGhpcyB1cCB3aGVuIHdlIG5leHQgYnVtcCBiaXRiYWtlIHZlcnNpb24KKyAgICAgICAgICAgIGlmIHR5cGUocmV2KSAhPSBzdHI6CisgICAgICAgICAgICAgICAgYXV0b2luYywgcmV2ID0gcmV2CisgICAgICAgICAgICBlbGlmIHJldi5zdGFydHN3aXRoKGF1dG9pbmNfdGVtcGwpOgorICAgICAgICAgICAgICAgIHJldiA9IHJldltsZW4oYXV0b2luY190ZW1wbCk6XQorICAgICAgICAgICAgZGljdF9zcmNyZXZzW25hbWVdID0gcmV2CisgICAgICAgICAgICBpZiAndGFnJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgICAgIHRhZyA9IHVkLnBhcm1bJ3RhZyddOworICAgICAgICAgICAgICAgIGtleSA9IG5hbWUrJ18nK3RhZworICAgICAgICAgICAgICAgIGRpY3RfdGFnX3NyY3JldnNba2V5XSA9IHJldgorICAgIHJldHVybiAoZGljdF9zcmNyZXZzLCBkaWN0X3RhZ19zcmNyZXZzKQorCitkb19mZXRjaFtwb3N0ZnVuY3NdICs9ICJ3cml0ZV9zcmNyZXYiCitkb19mZXRjaFt2YXJkZXBzZXhjbHVkZV0gKz0gIndyaXRlX3NyY3JldiIKK3B5dGhvbiB3cml0ZV9zcmNyZXYoKSB7CisgICAgcGtnaGlzdGRpciA9IGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRElSX1BBQ0tBR0UnLCBUcnVlKQorICAgIHNyY3JldmZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgJ2xhdGVzdF9zcmNyZXYnKQorCisgICAgc3JjcmV2cywgdGFnX3NyY3JldnMgPSBfZ2V0X3NyY3Jldl92YWx1ZXMoZCkKKyAgICBpZiBzcmNyZXZzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnaGlzdGRpcik6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnaGlzdGRpcikKKyAgICAgICAgb2xkX3RhZ19zcmNyZXZzID0ge30KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjcmV2ZmlsZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjcmV2ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgdGFnXycpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmUuc3BsaXQoIj0iLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoJyMgdGFnXycsICcnKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJyInLCAnJykuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3RhZ19zcmNyZXZzW2tleV0gPSB2YWx1ZQorICAgICAgICB3aXRoIG9wZW4oc3JjcmV2ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgb3JpZ19zcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgRmFsc2UpIG9yICdJTlZBTElEJworICAgICAgICAgICAgaWYgb3JpZ19zcmNyZXYgIT0gJ0lOVkFMSUQnOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgU1JDUkVWID0gIiVzIlxuJyAlIG9yaWdfc3JjcmV2KQorICAgICAgICAgICAgaWYgbGVuKHNyY3JldnMpID4gMToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgc3JjcmV2IGluIHNyY3JldnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgb3JpZ19zcmNyZXYgPSBkLmdldFZhcignU1JDUkVWXyVzJyAlIG5hbWUsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBvcmlnX3NyY3JldjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgU1JDUkVWXyVzID0gIiVzIlxuJyAlIChuYW1lLCBvcmlnX3NyY3JldikpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1JFVl8lcyA9ICIlcyJcbicgJSAobmFtZSwgc3JjcmV2KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnU1JDUkVWID0gIiVzIlxuJyAlIHNyY3JldnMuaXRlcnZhbHVlcygpLm5leHQoKSkKKyAgICAgICAgICAgIGlmIGxlbih0YWdfc3JjcmV2cykgPiAwOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCBzcmNyZXYgaW4gdGFnX3NyY3JldnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnIyB0YWdfJXMgPSAiJXMiXG4nICUgKG5hbWUsIHNyY3JldikpCisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gb2xkX3RhZ19zcmNyZXZzIGFuZCBvbGRfdGFnX3NyY3JldnNbbmFtZV0gIT0gc3JjcmV2OgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlJldmlzaW9uIGZvciB0YWcgJXMgaW4gcGFja2FnZSAlcyB3YXMgY2hhbmdlZCBzaW5jZSBsYXN0IGJ1aWxkIChmcm9tICVzIHRvICVzKSIgJSAobmFtZSwgcGtnLCBvbGRfdGFnX3NyY3JldnNbbmFtZV0sIHNyY3JldikpCisKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmNyZXZmaWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzcmNyZXZmaWxlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZWFkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBTdW1tYXJpemUgc3N0YXRlIHVzYWdlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1aWxkCitweXRob24gYnVpbGRzdGF0c19zdW1tYXJ5ICgpIHsKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMKKyAgICBpbXBvcnQgb3MucGF0aAorCisgICAgYm4gPSBnZXRfYm4oZSkKKyAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJzZGlyKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBzc3RhdGV0YXNrcyA9IChlLmRhdGEuZ2V0VmFyKCdTU1RBVEVUQVNLUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgYnVpbHQgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsYW1iZGE6IFtzZXQoKSwgc2V0KCldKQorICAgIGZvciBwZiBpbiBvcy5saXN0ZGlyKGJzZGlyKToKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgcGYpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHRhc2tkaXIpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0YXNrcyA9IG9zLmxpc3RkaXIodGFza2RpcikKKyAgICAgICAgZm9yIHQgaW4gc3N0YXRldGFza3M6CisgICAgICAgICAgICBub19zc3RhdGUsIHNzdGF0ZSA9IGJ1aWx0W3RdCisgICAgICAgICAgICBpZiB0IGluIHRhc2tzOgorICAgICAgICAgICAgICAgIG5vX3NzdGF0ZS5hZGQocGYpCisgICAgICAgICAgICBlbGlmIHQgKyAnX3NldHNjZW5lJyBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBzc3RhdGUuYWRkKHBmKQorCisgICAgaGVhZGVyX3ByaW50ZWQgPSBGYWxzZQorICAgIGZvciB0IGluIHNzdGF0ZXRhc2tzOgorICAgICAgICBub19zc3RhdGUsIHNzdGF0ZSA9IGJ1aWx0W3RdCisgICAgICAgIGlmIG5vX3NzdGF0ZSB8IHNzdGF0ZToKKyAgICAgICAgICAgIGlmIG5vdCBoZWFkZXJfcHJpbnRlZDoKKyAgICAgICAgICAgICAgICBoZWFkZXJfcHJpbnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJCdWlsZCBjb21wbGV0aW9uIHN1bW1hcnk6IikKKworICAgICAgICAgICAgYmIubm90ZSgiICB7MH06IHsxfSUgc3N0YXRlIHJldXNlICh7Mn0gc2V0c2NlbmUsIHszfSBzY3JhdGNoKSIuZm9ybWF0KHQsIDEwMCpsZW4oc3N0YXRlKS8obGVuKHNzdGF0ZSkrbGVuKG5vX3NzdGF0ZSkpLCBsZW4oc3N0YXRlKSwgbGVuKG5vX3NzdGF0ZSkpKQorfQorYWRkaGFuZGxlciBidWlsZHN0YXRzX3N1bW1hcnkKK2J1aWxkc3RhdHNfc3VtbWFyeVtldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlYzU3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MKQEAgLTAsMCArMSwyNzAgQEAKK0JVSUxEU1RBVFNfQkFTRSA9ICIke1RNUERJUn0vYnVpbGRzdGF0cy8iCitCVUlMRFNUQVRTX0JORklMRSA9ICIke0JVSUxEU1RBVFNfQkFTRX0vLmJ1aWxkbmFtZSIKK0JVSUxEU1RBVFNfREVWRklMRSA9ICIke0JVSUxEU1RBVFNfQkFTRX0vLmRldmljZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgc3RhdGlzdGljcyBnYXRoZXJpbmcuCisjCisjIFRoZSBDUFUgYW5kIFRpbWUgZ2F0aGVyaW5nL3RyYWNraW5nIGZ1bmN0aW9ucyBhbmQgYmJldmVudCBpbnNwaXJhdGlvbgorIyB3ZXJlIHdyaXR0ZW4gYnkgQ2hyaXN0b3BoZXIgTGFyc29uIGFuZCBjYW4gYmUgc2VlbiBoZXJlOgorIyBodHRwOi8va2VyZ290aC5wYXN0ZXkubmV0LzE0MjgxMworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIGdldF9wcm9jZXNzX2NwdXRpbWUocGlkKToKKyAgICB3aXRoIG9wZW4oIi9wcm9jLyVkL3N0YXQiICUgcGlkLCAiciIpIGFzIGY6CisgICAgICAgIGZpZWxkcyA9IGYucmVhZGxpbmUoKS5yc3RyaXAoKS5zcGxpdCgpCisgICAgIyAxMzogdXRpbWUsIDE0OiBzdGltZSwgMTU6IGN1dGltZSwgMTY6IGNzdGltZQorICAgIHJldHVybiBzdW0oaW50KGZpZWxkKSBmb3IgZmllbGQgaW4gZmllbGRzWzEzOjE2XSkKKworZGVmIGdldF9jcHV0aW1lKCk6CisgICAgd2l0aCBvcGVuKCIvcHJvYy9zdGF0IiwgInIiKSBhcyBmOgorICAgICAgICBmaWVsZHMgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKVsxOl0KKyAgICByZXR1cm4gc3VtKGludChmaWVsZCkgZm9yIGZpZWxkIGluIGZpZWxkcykKKworZGVmIHNldF9ibihlKToKKyAgICBibiA9IGUuZ2V0UGtncygpWzBdICsgIi0iICsgZS5kYXRhLmdldFZhcignTUFDSElORScsIFRydWUpCisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUoZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKG9zLnBhdGguam9pbihibiwgZS5kYXRhLmdldFZhcignQlVJTEROQU1FJywgVHJ1ZSkpKQorCitkZWYgZ2V0X2JuKGUpOgorICAgIHdpdGggb3BlbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JORklMRScsIFRydWUpKSBhcyBmOgorICAgICAgICBibiA9IGYucmVhZGxpbmUoKQorICAgIHJldHVybiBibgorCitkZWYgc2V0X2RldmljZShlKToKKyAgICB0bXBkaXIgPSBlLmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIGRldmZpbGUgPSBlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0RFVkZJTEUnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGRldmZpbGUpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgV2UgbG9vayBmb3IgdGhlIHZvbHVtZSBUTVBESVIgbGl2ZXMgb24uIFRvIGRvIGFsbCBkaXNrcyB3b3VsZCBtYWtlIGxpdHRsZQorICAgICMgc2Vuc2UgYW5kIG5vdCBnaXZlIHVzIGFueSBwYXJ0aWN1bGFybHkgdXNlZnVsIGRhdGEuIEluIHRoZW9yeSB3ZSBjb3VsZCBkbworICAgICMgc29tZXRoaW5nIGxpa2Ugc3RpY2sgRExfRElSIG9uIGEgZGlmZmVyZW50IHBhcnRpdGlvbiBhbmQgdGhpcyB3b3VsZAorICAgICMgdGhyb3cgc3RhdHMgZ2F0aGVyaW5nIG9mZi4gVGhlIHNhbWUgZ29lcyB3aXRoIFNTVEFURV9ESVIuIEhvd2V2ZXIsIGxldCdzCisgICAgIyBnZXQgdGhlIGJhc2ljcyBpbiBoZXJlIGFuZCB3b3JrIG9uIHRoZSBjb3JuZXJjYXNlcyBsYXRlci4KKyAgICAjIEEgbm90ZS4gL3Byb2MvZGlza3N0YXRzIGRvZXMgbm90IGNvbnRhaW4gaW5mbyBvbiBlbmNyeXB0ZnMsIHRtcGZzLCBldGMuCisgICAgIyBJZiB3ZSBlbmQgdXAgaGl0dGluZyBvbmUgb2YgdGhlc2UgZnMsIHdlJ2xsIGp1c3Qgc2tpcCBkaXNrc3RhdHMgY29sbGVjdGlvbi4KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgZGV2aWNlID0gb3Muc3RhdCh0bXBkaXIpCisgICAgbWFqb3JkZXYgPSBvcy5tYWpvcihsb25nKGRldmljZS5zdF9kZXYpKQorICAgIG1pbm9yZGV2ID0gb3MubWlub3IobG9uZyhkZXZpY2Uuc3RfZGV2KSkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBCdWcgMTcwMDoKKyAgICAjIEJlY2F1c2UgdG1wZnMvZW5jcnlwdGZzL3JhbWZzIGV0YyBpbnNlcnRzIG5vIGVudHJ5IGluIC9wcm9jL2Rpc2tzdGF0cworICAgICMgd2Ugc2V0IHJkZXYgdG8gTm9Mb2dpY2FsRGV2aWNlIGFuZCBzZWFyY2ggZm9yIGl0IGxhdGVyLiBJZiB3ZSBmaW5kIE5MRAorICAgICMgd2UgZG8gbm90IGNvbGxlY3QgZGlza3N0YXRzIGFzIHRoZSBtZXRob2QgdG8gY29sbGVjdCBtZWFuaW5nZnVsIHN0YXRpc3RpY3MKKyAgICAjIGZvciB0aGVzZSBmcyB0eXBlcyByZXF1aXJlcyBhIGJpdCBtb3JlIHJlc2VhcmNoLgorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICByZGV2ID0gIk5vTG9naWNhbERldmljZSIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvZGlza3N0YXRzIiwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBtYWpvcmRldiA9PSBpbnQobGluZS5zcGxpdCgpWzBdKSBhbmQgbWlub3JkZXYgPT0gaW50KGxpbmUuc3BsaXQoKVsxXSk6CisgICAgICAgICAgICAgICAgICAgIHJkZXYgPSBsaW5lLnNwbGl0KClbMl0KKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKyAgICB3aXRoIG9wZW4oZGV2ZmlsZSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHJkZXYpCisKK2RlZiBnZXRfZGV2aWNlKGUpOgorICAgIHdpdGggb3BlbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0RFVkZJTEUnLCBUcnVlKSkgYXMgZjoKKyAgICAgICAgZGV2aWNlID0gZi5yZWFkbGluZSgpCisgICAgcmV0dXJuIGRldmljZQorCitkZWYgZ2V0X2Rpc2tzdGF0cyhkZXYpOgorICAgIGltcG9ydCBpdGVydG9vbHMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBGb3IgaW5mbyBvbiB3aGF0IHRoZXNlIGFyZSwgc2VlIGtlcm5lbCBkb2MgZmlsZSBpb3N0YXRzLnR4dAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICBEU1RBVF9LRVlTID0gWydSZWFkc0NvbXAnLCAnUmVhZHNNZXJnZWQnLCAnU2VjdFJlYWQnLCAnVGltZVJlYWRzJywgJ1dyaXRlc0NvbXAnLCAnU2VjdFdyaXRlJywgJ1RpbWVXcml0ZScsICdJT2luUHJvZ3Jlc3MnLCAnVGltZUlPJywgJ1dUaW1lSU8nXQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIvcHJvYy9kaXNrc3RhdHMiLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgeCBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGRldiBpbiB4OgorICAgICAgICAgICAgICAgICAgICBkaXNrc3RhdHNfdmFsID0geC5yc3RyaXAoKS5zcGxpdCgpWzQ6XQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybgorICAgIGRpc2tzdGF0cyA9IGRpY3QoaXRlcnRvb2xzLml6aXAoRFNUQVRfS0VZUywgZGlza3N0YXRzX3ZhbCkpCisgICAgcmV0dXJuIGRpc2tzdGF0cworCitkZWYgc2V0X2Rpc2tkYXRhKHZhciwgZGV2LCBkYXRhKToKKyAgICBkYXRhLnNldFZhcih2YXIsIGdldF9kaXNrc3RhdHMoZGV2KSkKKworZGVmIGdldF9kaXNrZGF0YSh2YXIsIGRldiwgZGF0YSk6CisgICAgb2xkZGlza2RhdGEgPSBkYXRhLmdldFZhcih2YXIsIEZhbHNlKQorICAgIGRpc2tkYXRhID0ge30KKyAgICBpZiBvbGRkaXNrZGF0YSBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICBuZXdkaXNrZGF0YSA9IGdldF9kaXNrc3RhdHMoZGV2KQorICAgIGZvciBrZXkgaW4gb2xkZGlza2RhdGEuaXRlcmtleXMoKToKKyAgICAgICAgZGlza2RhdGFbIlN0YXJ0IitrZXldID0gc3RyKGludChvbGRkaXNrZGF0YVtrZXldKSkKKyAgICAgICAgZGlza2RhdGFbIkVuZCIra2V5XSA9IHN0cihpbnQobmV3ZGlza2RhdGFba2V5XSkpCisgICAgcmV0dXJuIGRpc2tkYXRhCisKK2RlZiBzZXRfdGltZWRhdGEodmFyLCBkYXRhLCBzZXJ2ZXJfdGltZT1Ob25lKToKKyAgICBpbXBvcnQgdGltZQorICAgIGlmIHNlcnZlcl90aW1lOgorICAgICAgICB0aW1lID0gc2VydmVyX3RpbWUKKyAgICBlbHNlOgorICAgICAgICB0aW1lID0gdGltZS50aW1lKCkKKyAgICBjcHV0aW1lID0gZ2V0X2NwdXRpbWUoKQorICAgIHByb2N0aW1lID0gZ2V0X3Byb2Nlc3NfY3B1dGltZShvcy5nZXRwaWQoKSkKKyAgICBkYXRhLnNldFZhcih2YXIsICh0aW1lLCBjcHV0aW1lLCBwcm9jdGltZSkpCisKK2RlZiBnZXRfdGltZWRhdGEodmFyLCBkYXRhLCBzZXJ2ZXJfdGltZT1Ob25lKToKKyAgICBpbXBvcnQgdGltZQorICAgIHRpbWVkYXRhID0gZGF0YS5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICBpZiB0aW1lZGF0YSBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICBvbGR0aW1lLCBvbGRjcHUsIG9sZHByb2MgPSB0aW1lZGF0YQorICAgIHByb2NkaWZmID0gZ2V0X3Byb2Nlc3NfY3B1dGltZShvcy5nZXRwaWQoKSkgLSBvbGRwcm9jCisgICAgY3B1ZGlmZiA9IGdldF9jcHV0aW1lKCkgLSBvbGRjcHUKKyAgICBpZiBzZXJ2ZXJfdGltZToKKyAgICAgICAgZW5kX3RpbWUgPSBzZXJ2ZXJfdGltZQorICAgIGVsc2U6CisgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKKyAgICB0aW1lZGlmZiA9IGVuZF90aW1lIC0gb2xkdGltZQorICAgIGlmIGNwdWRpZmYgPiAwOgorICAgICAgICBjcHVwZXJjID0gZmxvYXQocHJvY2RpZmYpICogMTAwIC8gY3B1ZGlmZgorICAgIGVsc2U6CisgICAgICAgIGNwdXBlcmMgPSBOb25lCisgICAgcmV0dXJuIHRpbWVkaWZmLCBjcHVwZXJjCisKK2RlZiB3cml0ZV90YXNrX2RhdGEoc3RhdHVzLCBsb2dmaWxlLCBkZXYsIGUpOgorICAgIGJuID0gZ2V0X2JuKGUpCisgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4obG9nZmlsZSksICJhIikgYXMgZjoKKyAgICAgICAgdGltZWRhdGEgPSBnZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfdGFzayIsIGUuZGF0YSwgZS50aW1lKQorICAgICAgICBpZiB0aW1lZGF0YToKKyAgICAgICAgICAgIGVsYXBzZWR0aW1lLCBjcHUgPSB0aW1lZGF0YQorICAgICAgICAgICAgZi53cml0ZShiYi5kYXRhLmV4cGFuZCgiJHtQRn06ICVzOiBFbGFwc2VkIHRpbWU6ICUwLjJmIHNlY29uZHMgXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLnRhc2ssIGVsYXBzZWR0aW1lKSwgZS5kYXRhKSkKKyAgICAgICAgICAgIGlmIGNwdToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJDUFUgdXNhZ2U6ICUwLjFmJSUgXG4iICUgY3B1KQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgSGVyZSB3ZSBnYXRoZXIgdXAgZGlzayBkYXRhLiBJbiBhbiBlZmZvcnQgdG8gYXZvaWQgbHlpbmcgd2l0aCBzdGF0cworICAgICAgICAjIEkgZG8gYSBiYXJlIG1pbmltdW0gb2YgYW5hbHlzaXMgb2YgY29sbGVjdGVkIGRhdGEuCisgICAgICAgICMgVGhlIHNpbXBsZSBmYWN0IGlzLCBkb2luZyBkaXNrIGlvIGNvbGxlY3Rpb24gb24gYSBwZXIgcHJvY2VzcyBiYXNpcworICAgICAgICAjIHdpdGhvdXQgZWZmZWN0aW5nIGJ1aWxkIHRpbWUgd291bGQgYmUgZGlmZmljdWx0LgorICAgICAgICAjIEZvciB0aGUgYmVzdCBpbmZvcm1hdGlvbiwgcnVubmluZyB0aGluZ3Mgd2l0aCBCQl9UT1RBTF9USFJFQURTID0gIjEiCisgICAgICAgICMgd291bGQgcmV0dXJuIGFjY3VyYXRlIHBlciB0YXNrIHJlc3VsdHMuCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgaWYgZGV2ICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgZGlza2RhdGEgPSBnZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfdGFzayIsIGRldiwgZS5kYXRhKQorICAgICAgICAgICAgaWYgZGlza2RhdGE6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoZGlza2RhdGEuaXRlcmtleXMoKSk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIGRpc2tkYXRhW2tleV0gKyAiXG4iKQorICAgICAgICBpZiBzdGF0dXMgaXMgInBhc3NlZCI6CisgICAgICAgICAgICBmLndyaXRlKCJTdGF0dXM6IFBBU1NFRCBcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmLndyaXRlKCJTdGF0dXM6IEZBSUxFRCBcbiIpCisgICAgICAgIGYud3JpdGUoIkVuZGVkOiAlMC4yZiBcbiIgJSBlLnRpbWUpCisKK3B5dGhvbiBydW5fYnVpbGRzdGF0cyAoKSB7CisgICAgaW1wb3J0IGJiLmJ1aWxkCisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaW1wb3J0IGJiLmRhdGEKKyAgICBpbXBvcnQgdGltZSwgc3VicHJvY2VzcywgcGxhdGZvcm0KKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgYXQgZmlyc3QgcGFzcyBtYWtlIHRoZSBidWlsZHN0YXRzIGhlcmlhcmNoeSBhbmQgdGhlbgorICAgICAgICAjIHNldCB0aGUgYnVpbGRuYW1lCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSkpCisgICAgICAgIHNldF9ibihlKQorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBzZXRfZGV2aWNlKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKworICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihic2RpcikKKyAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgc2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX2J1aWxkIiwgZGV2aWNlLCBlLmRhdGEpCisgICAgICAgIHNldF90aW1lZGF0YSgiX190aW1lZGF0YV9idWlsZCIsIGUuZGF0YSkKKyAgICAgICAgYnVpbGRfdGltZSA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgIyB3cml0ZSBzdGFydCBvZiBidWlsZCBpbnRvIGJ1aWxkX3RpbWUKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3RpbWUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIGhvc3RfaW5mbyA9IHBsYXRmb3JtLnVuYW1lKCkKKyAgICAgICAgICAgIGYud3JpdGUoIkhvc3QgSW5mbzogIikKKyAgICAgICAgICAgIGZvciB4IGluIGhvc3RfaW5mbzoKKyAgICAgICAgICAgICAgICBpZiB4OgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHggKyAiICIpCisgICAgICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgICAgICBmLndyaXRlKCJCdWlsZCBTdGFydGVkOiAlMC4yZiBcbiIgJSB0aW1lLnRpbWUoKSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICBidWlsZF90aW1lID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICB3aXRoIG9wZW4oYnVpbGRfdGltZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAjIFdyaXRlIGJ1aWxkIHN0YXRpc3RpY3MgZm9yIHRoZSBidWlsZAorICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICB0aW1lZGF0YSA9IGdldF90aW1lZGF0YSgiX190aW1lZGF0YV9idWlsZCIsIGUuZGF0YSkKKyAgICAgICAgICAgIGlmIHRpbWVkYXRhOgorICAgICAgICAgICAgICAgIHRpbWUsIGNwdSA9IHRpbWVkYXRhCisgICAgICAgICAgICAgICAgIyB3cml0ZSBlbmQgb2YgYnVpbGQgYW5kIGNwdSB1c2VkIGludG8gYnVpbGRfdGltZQorICAgICAgICAgICAgICAgIGYud3JpdGUoIkVsYXBzZWQgdGltZTogJTAuMmYgc2Vjb25kcyBcbiIgJSAodGltZSkpCisgICAgICAgICAgICAgICAgaWYgY3B1OgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJDUFUgdXNhZ2U6ICUwLjFmJSUgXG4iICUgY3B1KQorICAgICAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgICAgIGRpc2tpbyA9IGdldF9kaXNrZGF0YSgiX19kaXNrZGF0YV9idWlsZCIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICAgICAgICAgIGlmIGRpc2tpbzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoZGlza2lvLml0ZXJrZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShrZXkgKyAiOiAiICsgZGlza2lvW2tleV0gKyAiXG4iKQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrU3RhcnRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgICAgICBpZiBkZXZpY2UgIT0gIk5vTG9naWNhbERldmljZSI6CisgICAgICAgICAgICBzZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfdGFzayIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICBzZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfdGFzayIsIGUuZGF0YSwgZS50aW1lKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGFza2RpcikKKyAgICAgICAgIyB3cml0ZSBpbnRvIHRoZSB0YXNrIGV2ZW50IGZpbGUgdGhlIG5hbWUgYW5kIHN0YXJ0IHRpbWUKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2spLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJFdmVudDogJXMgXG4iICUgYmIuZXZlbnQuZ2V0TmFtZShlKSkKKyAgICAgICAgICAgIGYud3JpdGUoIlN0YXJ0ZWQ6ICUwLjJmIFxuIiAlIGUudGltZSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrU3VjY2VlZGVkKToKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQorICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgICAgIHdyaXRlX3Rhc2tfZGF0YSgicGFzc2VkIiwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGRldmljZSwgZSkKKyAgICAgICAgaWYgZS50YXNrID09ICJkb19yb290ZnMiOgorICAgICAgICAgICAgYnMgPSBvcy5wYXRoLmpvaW4oYnNkaXIsICJidWlsZF9zdGF0cyIpCisgICAgICAgICAgICB3aXRoIG9wZW4oYnMsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICByb290ZnMgPSBlLmRhdGEuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICAgICAgICAgIHJvb3Rmc19zaXplID0gc3VicHJvY2Vzcy5Qb3BlbihbImR1IiwgIi1zaCIsIHJvb3Rmc10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJVbmNvbXByZXNzZWQgUm9vdGZzIHNpemU6ICVzIiAlIHJvb3Rmc19zaXplKQorCisgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmdldFZhcignUEYnLCBUcnVlKSkKKyAgICAgICAgd3JpdGVfdGFza19kYXRhKCJmYWlsZWQiLCBvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgZGV2aWNlLCBlKQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyBMZXRzIG1ha2UgdGhpbmdzIGVhc2llciBhbmQgdGVsbCBwZW9wbGUgd2hlcmUgdGhlIGJ1aWxkIGZhaWxlZCBpbgorICAgICAgICAjIGJ1aWxkX3N0YXR1cy4gV2UgZG8gdGhpcyBoZXJlIGJlY2F1c2UgQnVpbGRDb21wbGV0ZWQgdHJpZ2dlcnMgbm8KKyAgICAgICAgIyBtYXR0ZXIgd2hhdCB0aGUgc3RhdHVzIG9mIHRoZSBidWlsZCBhY3R1YWxseSBpcworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgYnVpbGRfc3RhdHVzID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICB3aXRoIG9wZW4oYnVpbGRfc3RhdHVzLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGUuZGF0YS5leHBhbmQoIkZhaWxlZCBhdDogJHtQRn0gYXQgdGFzazogJXMgXG4iICUgZS50YXNrKSkKK30KKworYWRkaGFuZGxlciBydW5fYnVpbGRzdGF0cworcnVuX2J1aWxkc3RhdHNbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQgYmIuYnVpbGQuVGFza1N0YXJ0ZWQgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCBiYi5idWlsZC5UYXNrRmFpbGVkIgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkY2U0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jY2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK0NDQUNIRSA9ICIke0BiYi51dGlscy53aGljaChkLmdldFZhcignUEFUSCcsIFRydWUpLCAnY2NhY2hlJykgYW5kICdjY2FjaGUgJ30iCitleHBvcnQgQ0NBQ0hFX0RJUiA/PSAiJHtUTVBESVJ9L2NjYWNoZS8ke01VTFRJTUFDSF9IT1NUX1NZU30vJHtQTn0iCitDQ0FDSEVfRElTQUJMRVt1bmV4cG9ydF0gPSAiMSIKKworZG9fY29uZmlndXJlW2RpcnNdID0rICIke0NDQUNIRV9ESVJ9IgorZG9fa2VybmVsX2NvbmZpZ21lW2RpcnNdID0rICIke0NDQUNIRV9ESVJ9IgorCitkb19jbGVhbltjbGVhbmRpcnNdICs9ICIke0NDQUNIRV9ESVJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jaHJwYXRoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxNjBhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jaHJwYXRoLmJiY2xhc3MKQEAgLTAsMCArMSwxMTcgQEAKK0NIUlBBVEhfQklOID89ICJjaHJwYXRoIgorUFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTID89ICIiCisKK2RlZiBwcm9jZXNzX2ZpbGVfbGludXgoY21kLCBmcGF0aCwgcm9vdGRpciwgYmFzZXByZWZpeCwgdG1wZGlyLCBkKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKworICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1sJywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByZXR1cm4KKworICAgICMgSGFuZGxlIFJVTlBBVEggYXMgd2VsbCBhcyBSUEFUSAorICAgIGVyciA9IGVyci5yZXBsYWNlKCJSVU5QQVRIPSIsIlJQQVRIPSIpCisgICAgIyBUaHJvdyBhd2F5IGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiB0aGUgcnBhdGggbGlzdAorICAgIGN1cnJfcnBhdGggPSBlcnIucGFydGl0aW9uKCJSUEFUSD0iKVsyXQorICAgICNiYi5ub3RlKCJDdXJyZW50IHJwYXRoIGZvciAlcyBpcyAlcyIgJSAoZnBhdGgsIGN1cnJfcnBhdGguc3RyaXAoKSkpCisgICAgcnBhdGhzID0gY3Vycl9ycGF0aC5zcGxpdCgiOiIpCisgICAgbmV3X3JwYXRocyA9IFtdCisgICAgbW9kaWZpZWQgPSBGYWxzZQorICAgIGZvciBycGF0aCBpbiBycGF0aHM6CisgICAgICAgICMgSWYgcnBhdGggaXMgYWxyZWFkeSBkeW5hbWljIGNvcHkgaXQgdG8gbmV3X3JwYXRoIGFuZCBjb250aW51ZQorICAgICAgICBpZiBycGF0aC5maW5kKCIkT1JJR0lOIikgIT0gLTE6CisgICAgICAgICAgICBuZXdfcnBhdGhzLmFwcGVuZChycGF0aC5zdHJpcCgpKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcnBhdGggPSAgb3MucGF0aC5ub3JtcGF0aChycGF0aCkKKyAgICAgICAgaWYgYmFzZXByZWZpeCBub3QgaW4gcnBhdGggYW5kIHRtcGRpciBub3QgaW4gcnBhdGg6CisgICAgICAgICAgICBuZXdfcnBhdGhzLmFwcGVuZChycGF0aC5zdHJpcCgpKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQoIiRPUklHSU4vIiArIG9zLnBhdGgucmVscGF0aChycGF0aC5zdHJpcCgpLCBvcy5wYXRoLmRpcm5hbWUoZnBhdGgucmVwbGFjZShyb290ZGlyLCAiLyIpKSkpCisgICAgICAgIG1vZGlmaWVkID0gVHJ1ZQorCisgICAgIyBpZiB3ZSBoYXZlIG1vZGlmaWVkIHNvbWUgcnBhdGhzIGNhbGwgY2hycGF0aCB0byB1cGRhdGUgdGhlIGJpbmFyeQorICAgIGlmIG1vZGlmaWVkOgorICAgICAgICBhcmdzID0gIjoiLmpvaW4obmV3X3JwYXRocykKKyAgICAgICAgI2JiLm5vdGUoIlNldHRpbmcgcnBhdGggZm9yICVzIHRvICVzIiAlKGZwYXRoLCBhcmdzKSkKKyAgICAgICAgcCA9IHN1Yi5Qb3BlbihbY21kLCAnLXInLCBhcmdzLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgICAgICBiYi5lcnJvcigiJXM6IGNocnBhdGggY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJWQ6XG4lcyVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcC5yZXR1cm5jb2RlLCBvdXQsIGVycikpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkCisKK2RlZiBwcm9jZXNzX2ZpbGVfZGFyd2luKGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1vdG9vbCIpLCAnLUwnLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorICAgICMgSWYgcmV0dXJuZWQgc3VjY2VzZnVsbHksIHByb2Nlc3Mgc3RkZXJyIGZvciByZXN1bHRzCisgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJldHVybgorICAgIGZvciBsIGluIGVyci5zcGxpdCgiXG4iKToKKyAgICAgICAgaWYgIihjb21wYXRpYmlsaXR5IiBub3QgaW4gbDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJwYXRoID0gbC5wYXJ0aXRpb24oIihjb21wYXRpYmlsaXR5IilbMF0uc3RyaXAoKQorICAgICAgICBpZiBiYXNlcHJlZml4IG5vdCBpbiBycGF0aDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmV3cGF0aCA9ICJAbG9hZGVyX3BhdGgvIiArIG9zLnBhdGgucmVscGF0aChycGF0aCwgb3MucGF0aC5kaXJuYW1lKGZwYXRoLnJlcGxhY2Uocm9vdGRpciwgIi8iKSkpCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfWluc3RhbGxfbmFtZV90b29sIiksICctY2hhbmdlJywgcnBhdGgsIG5ld3BhdGgsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorCitkZWYgcHJvY2Vzc19kaXIgKHJvb3RkaXIsIGRpcmVjdG9yeSwgZCk6CisgICAgaW1wb3J0IHN0YXQKKworICAgIHJvb3RkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3RkaXIpCisgICAgY21kID0gZC5leHBhbmQoJyR7Q0hSUEFUSF9CSU59JykKKyAgICB0bXBkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKGQuZ2V0VmFyKCdUTVBESVInLCBGYWxzZSkpCisgICAgYmFzZXByZWZpeCA9IG9zLnBhdGgubm9ybXBhdGgoZC5leHBhbmQoJyR7YmFzZV9wcmVmaXh9JykpCisgICAgaG9zdG9zID0gZC5nZXRWYXIoIkhPU1RfT1MiLCBUcnVlKQorCisgICAgI2JiLmRlYnVnKCJDaGVja2luZyAlcyBmb3IgYmluYXJpZXMgdG8gcHJvY2VzcyIgJSBkaXJlY3RvcnkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcmVjdG9yeSk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgImxpbnV4IiBpbiBob3N0b3M6CisgICAgICAgIHByb2Nlc3NfZmlsZSA9IHByb2Nlc3NfZmlsZV9saW51eAorICAgIGVsaWYgImRhcndpbiIgaW4gaG9zdG9zOgorICAgICAgICBwcm9jZXNzX2ZpbGUgPSBwcm9jZXNzX2ZpbGVfZGFyd2luCisgICAgZWxzZToKKyAgICAgICAgIyBSZWxvY2F0aW9ucyBub3Qgc3VwcG9ydGVkCisgICAgICAgIHJldHVybgorCisgICAgZGlycyA9IG9zLmxpc3RkaXIoZGlyZWN0b3J5KQorICAgIGZvciBmaWxlIGluIGRpcnM6CisgICAgICAgIGZwYXRoID0gZGlyZWN0b3J5ICsgIi8iICsgZmlsZQorICAgICAgICBmcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoZnBhdGgpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZwYXRoKToKKyAgICAgICAgICAgICMgU2tpcCBzeW1saW5rcworICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZwYXRoKToKKyAgICAgICAgICAgIHByb2Nlc3NfZGlyKHJvb3RkaXIsIGZwYXRoLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI2JiLm5vdGUoIlRlc3RpbmcgJXMgZm9yIHJlbG9jYXRhYmlsaXR5IiAlIGZwYXRoKQorCisgICAgICAgICAgICAjIFdlIG5lZWQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIGNocnBhdGgsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICMgdGhlbSB0aGVuIHNldCB0aGVtIHRlbXBvcmFyaWx5LiBUYWtlIGEgY29weSBvZiB0aGUgZmlsZXMKKyAgICAgICAgICAgICMgcGVybWlzc2lvbnMgc28gdGhhdCB3ZSBjYW4gcmVzdG9yZSB0aGVtIGFmdGVyd2FyZHMuCisgICAgICAgICAgICBwZXJtcyA9IG9zLnN0YXQoZnBhdGgpW3N0YXQuU1RfTU9ERV0KKyAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhmcGF0aCwgb3MuV19PS3xvcy5SX09LKToKKyAgICAgICAgICAgICAgICBwZXJtcyA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUZW1wb3JhcmlseSBtYWtlIHRoZSBmaWxlIHdyaXRlYWJsZSBzbyB3ZSBjYW4gY2hycGF0aCBpdAorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBwZXJtc3xzdGF0LlNfSVJXWFUpCisgICAgICAgICAgICBwcm9jZXNzX2ZpbGUoY21kLCBmcGF0aCwgcm9vdGRpciwgYmFzZXByZWZpeCwgdG1wZGlyLCBkKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcGVybXM6CisgICAgICAgICAgICAgICAgb3MuY2htb2QoZnBhdGgsIHBlcm1zKQorCitkZWYgcnBhdGhfcmVwbGFjZSAocGF0aCwgZCk6CisgICAgYmluZGlycyA9IGQuZXhwYW5kKCIke2JpbmRpcn0gJHtzYmluZGlyfSAke2Jhc2Vfc2JpbmRpcn0gJHtiYXNlX2JpbmRpcn0gJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9ICR7bGliZXhlY2Rpcn0gJHtQUkVQUk9DRVNTX1JFTE9DQVRFX0RJUlN9Iikuc3BsaXQoKQorCisgICAgZm9yIGJpbmRpciBpbiBiaW5kaXJzOgorICAgICAgICAjYmIubm90ZSAoIlByb2Nlc3NpbmcgZGlyZWN0b3J5ICIgKyBiaW5kaXIpCisgICAgICAgIGRpcmVjdG9yeSA9IHBhdGggKyAiLyIgKyBiaW5kaXIKKyAgICAgICAgcHJvY2Vzc19kaXIgKHBhdGgsIGRpcmVjdG9yeSwgZCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jbHV0dGVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3NDA3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jbHV0dGVyLmJiY2xhc3MKQEAgLTAsMCArMSwyMiBAQAorCitkZWYgZ2V0X21pbm9yX2Rpcih2KToKKyAgICBpbXBvcnQgcmUKKyAgICBtID0gcmUubWF0Y2goIl4oWzAtOV0rKVwuKFswLTldKykiLCB2KQorICAgIHJldHVybiAiJXMuJXMiICUgKG0uZ3JvdXAoMSksIG0uZ3JvdXAoMikpCisKK2RlZiBnZXRfcmVhbF9uYW1lKG4pOgorICAgIGltcG9ydCByZQorICAgIG0gPSByZS5tYXRjaCgiXihbYS16XSsoLVthLXpdKyk/KSgtWzAtOV0rXC5bMC05XSspPyIsIG4pCisgICAgcmV0dXJuICIlcyIgJSAobS5ncm91cCgxKSkKKworVkVSTUlOT1IgPSAiJHtAZ2V0X21pbm9yX2RpcigiJHtQVn0iKX0iCitSRUFMTkFNRSA9ICIke0BnZXRfcmVhbF9uYW1lKCIke0JQTn0iKX0iCisKK0NMVVRURVJfU1JDX0ZUUCA9ICIke0dOT01FX01JUlJPUn0vJHtSRUFMTkFNRX0vJHtWRVJNSU5PUn0vJHtSRUFMTkFNRX0tJHtQVn0udGFyLnh6O25hbWU9YXJjaGl2ZSIKKworQ0xVVFRFUl9TUkNfR0lUID0gImdpdDovL2dpdC5nbm9tZS5vcmcvJHtSRUFMTkFNRX0iCisKK1NSQ19VUkkgPSAiJHtDTFVUVEVSX1NSQ19GVFB9IgorUyA9ICIke1dPUktESVJ9LyR7UkVBTE5BTUV9LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYyBnZXR0ZXh0CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jbWFrZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlM2NjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcwpAQCAtMCwwICsxLDEzOCBAQAorIyBQYXRoIHRvIHRoZSBDTWFrZSBmaWxlIHRvIHByb2Nlc3MuCitPRUNNQUtFX1NPVVJDRVBBVEggPz0gIiR7U30iCisKK0RFUEVORFNfcHJlcGVuZCA9ICJjbWFrZS1uYXRpdmUgIgorQiA9ICIke1dPUktESVJ9L2J1aWxkIgorCisjIFdlIG5lZWQgdG8gdW5zZXQgQ0NBQ0hFIG90aGVyd2lzZSBjbWFrZSBnZXRzIHRvbyBjb25mdXNlZAorQ0NBQ0hFID0gIiIKKworIyBXZSB3YW50IHRoZSBzdGFnaW5nIGFuZCBpbnN0YWxsaW5nIGZ1bmN0aW9ucyBmcm9tIGF1dG90b29scworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBDL0MrKyBDb21waWxlciAod2l0aG91dCBjcHUgYXJjaC90dW5lIGFyZ3VtZW50cykKK09FQ01BS0VfQ19DT01QSUxFUiA/PSAiYGVjaG8gJHtDQ30gfCBzZWQgJ3MvXlwoW14gXSpcKS4qL1wxLydgIgorT0VDTUFLRV9DWFhfQ09NUElMRVIgPz0gImBlY2hvICR7Q1hYfSB8IHNlZCAncy9eXChbXiBdKlwpLiovXDEvJ2AiCitPRUNNQUtFX0FSID89ICIke0FSfSIKKworIyBDb21waWxlciBmbGFncworT0VDTUFLRV9DX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDRkxBR1N9IgorT0VDTUFLRV9DWFhfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NYWEZMQUdTfSIKK09FQ01BS0VfQ19GTEFHU19SRUxFQVNFID89ICIke1NFTEVDVEVEX09QVElNSVpBVElPTn0gJHtDRkxBR1N9IC1ETkRFQlVHIgorT0VDTUFLRV9DWFhfRkxBR1NfUkVMRUFTRSA/PSAiJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059ICR7Q1hYRkxBR1N9IC1ETkRFQlVHIgorT0VDTUFLRV9DX0xJTktfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NQUEZMQUdTfSAke0xERkxBR1N9IgorT0VDTUFLRV9DWFhfTElOS19GTEFHUyA/PSAiJHtIT1NUX0NDX0FSQ0h9ICR7VE9PTENIQUlOX09QVElPTlN9ICR7Q1hYRkxBR1N9ICR7TERGTEFHU30iCisKK09FQ01BS0VfUlBBVEggPz0gIiIKK09FQ01BS0VfUEVSTE5BVElWRV9ESVIgPz89ICIiCitPRUNNQUtFX0VYVFJBX1JPT1RfUEFUSCA/PSAiIgorCitPRUNNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSA9ICJPTkxZIgorT0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU1fY2xhc3MtbmF0aXZlID0gIkJPVEgiCisKKyMgQ01ha2UgZXhwZWN0cyB0YXJnZXQgYXJjaGl0ZWN0dXJlcyBpbiB0aGUgZm9ybWF0IG9mIHVuYW1lKDIpLAorIyB3aGljaCBkbyBub3QgYWx3YXlzIG1hdGNoIFRBUkdFVF9BUkNILCBzbyBhbGwgdGhlIG5lY2Vzc2FyeQorIyBjb252ZXJzaW9ucyBzaG91bGQgaGFwcGVuIGhlcmUuCitkZWYgbWFwX3RhcmdldF9hcmNoX3RvX3VuYW1lX2FyY2godGFyZ2V0X2FyY2gpOgorICAgIGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjIjoKKyAgICAgICAgcmV0dXJuICJwcGMiCisgICAgaWYgdGFyZ2V0X2FyY2ggPT0gInBvd2VycGM2NCI6CisgICAgICAgIHJldHVybiAicHBjNjQiCisgICAgcmV0dXJuIHRhcmdldF9hcmNoCisKK2NtYWtlX2RvX2dlbmVyYXRlX3Rvb2xjaGFpbl9maWxlKCkgeworCWNhdCA+ICR7V09SS0RJUn0vdG9vbGNoYWluLmNtYWtlIDw8RU9GCisjIENNYWtlIHN5c3RlbSBuYW1lIG11c3QgYmUgc29tZXRoaW5nIGxpa2UgIkxpbnV4Ii4KKyMgVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGNyb3NzLWNvbXBpbGluZy4KK3NldCggQ01BS0VfU1lTVEVNX05BTUUgYGVjaG8gJHtUQVJHRVRfT1N9IHwgc2VkIC1lICdzL14uL1x1Ji8nIC1lICdzL15cKExpbnV4XCkuKi9cMS8nYCApCitzZXQoIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJHtAbWFwX3RhcmdldF9hcmNoX3RvX3VuYW1lX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkpfSApCitzZXQoIENNQUtFX0NfQ09NUElMRVIgJHtPRUNNQUtFX0NfQ09NUElMRVJ9ICkKK3NldCggQ01BS0VfQ1hYX0NPTVBJTEVSICR7T0VDTUFLRV9DWFhfQ09NUElMRVJ9ICkKK3NldCggQ01BS0VfQVNNX0NPTVBJTEVSICR7T0VDTUFLRV9DX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0FSICR7T0VDTUFLRV9BUn0gQ0FDSEUgRklMRVBBVEggIkFyY2hpdmVyIiApCitzZXQoIENNQUtFX0NfRkxBR1MgIiR7T0VDTUFLRV9DX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJDRkxBR1MiICkKK3NldCggQ01BS0VfQ1hYX0ZMQUdTICIke09FQ01BS0VfQ1hYX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJDWFhGTEFHUyIgKQorc2V0KCBDTUFLRV9BU01fRkxBR1MgIiR7T0VDTUFLRV9DX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJBU00gRkxBR1MiICkKK3NldCggQ01BS0VfQ19GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ19GTEFHU19SRUxFQVNFfSIgQ0FDSEUgU1RSSU5HICJDRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0UgIiR7T0VDTUFLRV9DWFhfRkxBR1NfUkVMRUFTRX0iIENBQ0hFIFNUUklORyAiQ1hYRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQVNNX0ZMQUdTX1JFTEVBU0UgIiR7T0VDTUFLRV9DX0ZMQUdTX1JFTEVBU0V9IiBDQUNIRSBTVFJJTkcgIkFTTSBGTEFHUyBmb3IgcmVsZWFzZSIgKQorc2V0KCBDTUFLRV9DX0xJTktfRkxBR1MgIiR7T0VDTUFLRV9DX0xJTktfRkxBR1N9IiBDQUNIRSBTVFJJTkcgIkxERkxBR1MiICkKK3NldCggQ01BS0VfQ1hYX0xJTktfRkxBR1MgIiR7T0VDTUFLRV9DWFhfTElOS19GTEFHU30iIENBQ0hFIFNUUklORyAiTERGTEFHUyIgKQorCisjIG9ubHkgc2VhcmNoIGluIHRoZSBwYXRocyBwcm92aWRlZCBzbyBjbWFrZSBkb2VzbnQgcGljaworIyB1cCBsaWJyYXJpZXMgYW5kIHRvb2xzIGZyb20gdGhlIG5hdGl2ZSBidWlsZCBtYWNoaW5lCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIICR7U1RBR0lOR19ESVJfSE9TVH0gJHtTVEFHSU5HX0RJUl9OQVRJVkV9ICR7Q1JPU1NfRElSfSAke09FQ01BS0VfUEVSTE5BVElWRV9ESVJ9ICR7T0VDTUFLRV9FWFRSQV9ST09UX1BBVEh9ICR7RVhURVJOQUxfVE9PTENIQUlOfSkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QQUNLQUdFIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gJHtPRUNNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTX0gKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0xJQlJBUlkgT05MWSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZICkKKworIyBVc2UgcXQuY29uZiBzZXR0aW5ncworc2V0KCBFTlZ7UVRfQ09ORl9QQVRIfSAke1dPUktESVJ9L3F0LmNvbmYgKQorCisjIFdlIG5lZWQgdG8gc2V0IHRoZSBycGF0aCB0byB0aGUgY29ycmVjdCBkaXJlY3RvcnkgYXMgY21ha2UgZG9lcyBub3QgcHJvdmlkZSBhbnkKKyMgZGlyZWN0b3J5IGFzIHJwYXRoIGJ5IGRlZmF1bHQKK3NldCggQ01BS0VfSU5TVEFMTF9SUEFUSCAke09FQ01BS0VfUlBBVEh9ICkKKworIyBVc2UgbmF0aXZlIGNtYWtlIG1vZHVsZXMKK2xpc3QoQVBQRU5EIENNQUtFX01PRFVMRV9QQVRIICIke1NUQUdJTkdfREFUQURJUn0vY21ha2UvTW9kdWxlcy8iKQorCisjIGFkZCBmb3Igbm9uIC91c3IvbGliIGxpYmRpciwgZS5nLiAvdXNyL2xpYjY0CitzZXQoIENNQUtFX0xJQlJBUllfUEFUSCAke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0pCisKK0VPRgorfQorCithZGR0YXNrIGdlbmVyYXRlX3Rvb2xjaGFpbl9maWxlIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworY21ha2VfZG9fY29uZmlndXJlKCkgeworCWlmIFsgIiR7T0VDTUFLRV9CVUlMRFBBVEh9IiBdOyB0aGVuCisJCWJibm90ZSAiY21ha2UuYmJjbGFzcyBubyBsb25nZXIgdXNlcyBPRUNNQUtFX0JVSUxEUEFUSC4gIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub3cgb3V0LW9mLXRyZWUgYnVpbGRzIHdpdGggQj1XT1JLRElSL2J1aWxkLiIKKwlmaQorCisJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF07IHRoZW4KKwkJcm0gLXJmICR7Qn0KKwkJbWtkaXIgLXAgJHtCfQorCQljZCAke0J9CisJZWxzZQorCQlmaW5kICR7Qn0gLW5hbWUgQ01ha2VGaWxlcyAtb3IgLW5hbWUgTWFrZWZpbGUgLW9yIC1uYW1lIGNtYWtlX2luc3RhbGwuY21ha2UgLW9yIC1uYW1lIENNYWtlQ2FjaGUudHh0IC1kZWxldGUKKwlmaQorCisJIyBKdXN0IGxpa2UgYXV0b3Rvb2xzIGNtYWtlIGNhbiB1c2UgYSBzaXRlIGZpbGUgdG8gY2FjaGUgcmVzdWx0IHRoYXQgbmVlZCBnZW5lcmF0ZWQgYmluYXJpZXMgdG8gcnVuCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGUtZmlsZS5jbWFrZSBdIDsgdGhlbgorCQlPRUNNQUtFX1NJVEVGSUxFPSIgLUMgJHtXT1JLRElSfS9zaXRlLWZpbGUuY21ha2UiCisJZWxzZQorCQlPRUNNQUtFX1NJVEVGSUxFPSIiCisJZmkKKworCWNtYWtlIFwKKwkgICR7T0VDTUFLRV9TSVRFRklMRX0gXAorCSAgJHtPRUNNQUtFX1NPVVJDRVBBVEh9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg6UEFUSD0ke3ByZWZpeH0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0JJTkRJUjpQQVRIPSR7YmluZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU0JJTkRJUjpQQVRIPSR7c2JpbmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xJQkVYRUNESVI6UEFUSD0ke2xpYmV4ZWNkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9TWVNDT05GRElSOlBBVEg9JHtzeXNjb25mZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU0hBUkVEU1RBVEVESVI6UEFUSD0ke3NoYXJlZHN0YXRlZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfTE9DQUxTVEFURURJUjpQQVRIPSR7bG9jYWxzdGF0ZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xJQkRJUjpQQVRIPSR7bGliZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfSU5DTFVERURJUjpQQVRIPSR7aW5jbHVkZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0RBVEFST09URElSOlBBVEg9JHtkYXRhZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU09fTk9fRVhFPTAgXAorCSAgLURDTUFLRV9UT09MQ0hBSU5fRklMRT0ke1dPUktESVJ9L3Rvb2xjaGFpbi5jbWFrZSBcCisJICAtRENNQUtFX1ZFUkJPU0VfTUFLRUZJTEU9MSBcCisJICAke0VYVFJBX09FQ01BS0V9IFwKKwkgIC1Xbm8tZGV2Cit9CisKK2NtYWtlX2RvX2NvbXBpbGUoKSAgeworCWNkICR7Qn0KKwliYXNlX2RvX2NvbXBpbGUKK30KKworY21ha2VfZG9faW5zdGFsbCgpIHsKKwljZCAke0J9CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsIGRvX2dlbmVyYXRlX3Rvb2xjaGFpbl9maWxlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWNmNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcwpAQCAtMCwwICsxLDc1IEBACitjbWwxX2RvX2NvbmZpZ3VyZSgpIHsKKwlzZXQgLWUKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCW9lX3J1bm1ha2Ugb2xkY29uZmlnCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlCithZGR0YXNrIGNvbmZpZ3VyZSBhZnRlciBkb191bnBhY2sgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbXBpbGUKKworaW5oZXJpdCB0ZXJtaW5hbAorCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJIT1NUX0VYVFJBQ0ZMQUdTIEhPU1RMREZMQUdTIFRFUk1JTkZPIENST1NTX0NVUlNFU19MSUIgQ1JPU1NfQ1VSU0VTX0lOQyIKK0hPU1RfRVhUUkFDRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30iCitIT1NUTERGTEFHUyA9ICIke0JVSUxEX0xERkxBR1N9IgorQ1JPU1NfQ1VSU0VTX0xJQiA9ICItbG5jdXJzZXMgLWx0aW5mbyIKK0NST1NTX0NVUlNFU19JTkMgPSAnLURDVVJTRVNfTE9DPSI8Y3Vyc2VzLmg+IicKK1RFUk1JTkZPID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vdGVybWluZm8iCisKK0tDT05GSUdfQ09ORklHX0NPTU1BTkQgPz89ICJtZW51Y29uZmlnIgorcHl0aG9uIGRvX21lbnVjb25maWcoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgdHJ5OgorICAgICAgICBtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoIi5jb25maWciKQorICAgICAgICBzaHV0aWwuY29weSgiLmNvbmZpZyIsICIuY29uZmlnLm9yaWciKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBtdGltZSA9IDAKKworICAgIG9lX3Rlcm1pbmFsKCIke1NIRUxMfSAtYyBcIm1ha2UgJHtLQ09ORklHX0NPTkZJR19DT01NQU5EfTsgaWYgWyBcJD8gLW5lIDAgXTsgdGhlbiBlY2hvICdDb21tYW5kIGZhaWxlZC4nOyBwcmludGYgJ1ByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4gJzsgcmVhZCByOyBmaVwiIiwgJyR7UE59IENvbmZpZ3VyYXRpb24nLCBkKQorCisgICAgIyBGSVhNRSB0aGlzIGNoZWNrIGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlIG1pbmltdW0gYml0YmFrZSB2ZXJzaW9uIGhhcyBiZWVuIGJ1bXBlZAorICAgIGlmIGhhc2F0dHIoYmIuYnVpbGQsICd3cml0ZV90YWludCcpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXdtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoIi5jb25maWciKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIG5ld210aW1lID0gMAorCisgICAgICAgIGlmIG5ld210aW1lID4gbXRpbWU6CisgICAgICAgICAgICBiYi5ub3RlKCJDb25maWd1cmF0aW9uIGNoYW5nZWQsIHJlY29tcGlsZSB3aWxsIGJlIGZvcmNlZCIpCisgICAgICAgICAgICBiYi5idWlsZC53cml0ZV90YWludCgnZG9fY29tcGlsZScsIGQpCit9Citkb19tZW51Y29uZmlnW2RlcGVuZHNdICs9ICJuY3Vyc2VzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fbWVudWNvbmZpZ1tub3N0YW1wXSA9ICIxIgorYWRkdGFzayBtZW51Y29uZmlnIGFmdGVyIGRvX2NvbmZpZ3VyZQorCitweXRob24gZG9fZGlmZmNvbmZpZygpIHsKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgZnJhZ21lbnQgPSB3b3JrZGlyICsgJy9mcmFnbWVudC5jZmcnCisgICAgY29uZmlnb3JpZyA9ICcuY29uZmlnLm9yaWcnCisgICAgY29uZmlnID0gJy5jb25maWcnCisKKyAgICB0cnk6CisgICAgICAgIG1kNW5ld2NvbmZpZyA9IGJiLnV0aWxzLm1kNV9maWxlKGNvbmZpZ29yaWcpCisgICAgICAgIG1kNWNvbmZpZyA9IGJiLnV0aWxzLm1kNV9maWxlKGNvbmZpZykKKyAgICAgICAgaXNkaWZmID0gbWQ1bmV3Y29uZmlnICE9IG1kNWNvbmZpZworICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmZhdGFsKCJObyBjb25maWcgZmlsZXMgZm91bmQuIERpZCB5b3UgZG8gbWVudWNvbmZpZyA/XG4lcyIgJSBlKQorCisgICAgaWYgaXNkaWZmOgorICAgICAgICBzdGF0ZW1lbnQgPSAnZGlmZiAtLXVuY2hhbmdlZC1saW5lLWZvcm1hdD0gLS1vbGQtbGluZS1mb3JtYXQ9IC0tbmV3LWxpbmUtZm9ybWF0PSIlTCIgJyArIGNvbmZpZ29yaWcgKyAnICcgKyBjb25maWcgKyAnPicgKyBmcmFnbWVudAorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKQorCisgICAgICAgIHNodXRpbC5jb3B5KGNvbmZpZ29yaWcsIGNvbmZpZykKKworICAgICAgICBiYi5wbGFpbigiQ29uZmlnIGZyYWdtZW50IGhhcyBiZWVuIGR1bXBlZCBpbnRvOlxuICVzIiAlIGZyYWdtZW50KQorICAgIGVsc2U6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZyYWdtZW50KToKKyAgICAgICAgICAgIG9zLnVubGluayhmcmFnbWVudCkKK30KKworZG9fZGlmZmNvbmZpZ1tub3N0YW1wXSA9ICIxIgorYWRkdGFzayBkaWZmY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1OGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jb21wcmVzc19kb2MuYmJjbGFzcwpAQCAtMCwwICsxLDI2MCBAQAorIyBDb21wcmVzcyBtYW4gcGFnZXMgaW4gJHttYW5kaXJ9IGFuZCBpbmZvIHBhZ2VzIGluICR7aW5mb2Rpcn0KKyMKKyMgMS4gVGhlIGRvYyB3aWxsIGJlIGNvbXByZXNzZWQgdG8gZ3ogZm9ybWF0IGJ5IGRlZmF1bHQuCisjCisjIDIuIEl0IHdpbGwgYXV0b21hdGljYWxseSBjb3JyZWN0IHRoZSBjb21wcmVzc2VkIGRvYyB3aGljaCBpcyBub3QKKyMgaW4gJHtET0NfQ09NUFJFU1N9IGJ1dCBpbiAke0RPQ19DT01QUkVTU19MSVNUfSB0byB0aGUgZm9ybWF0CisjIG9mICR7RE9DX0NPTVBSRVNTfSBwb2xpY3kKKyMKKyMgMy4gSXQgaXMgZWFzeSB0byBhZGQgYSBuZXcgdHlwZSBjb21wcmVzc2lvbiBieSBlZGl0aW5nCisjIGxvY2FsLmNvbmYsIHN1Y2ggYXM6CisjIERPQ19DT01QUkVTU19MSVNUX2FwcGVuZCA9ICcgYWJjJworIyBET0NfQ09NUFJFU1MgPSAnYWJjJworIyBET0NfQ09NUFJFU1NfQ01EW2FiY10gPSAnYWJjIGNvbXByZXNzIGNtZCAqKionCisjIERPQ19ERUNPTVBSRVNTX0NNRFthYmNdID0gJ2FiYyBkZWNvbXByZXNzIGNtZCAqKionCisKKyMgQWxsIHN1cHBvcnRlZCBjb21wcmVzc2lvbiBwb2xpY3kKK0RPQ19DT01QUkVTU19MSVNUID89ICJneiB4eiBiejIiCisKKyMgQ29tcHJlc3Npb24gcG9saWN5LCBtdXN0IGJlIG9uZSBvZiAke0RPQ19DT01QUkVTU19MSVNUfQorRE9DX0NPTVBSRVNTID89ICJneiIKKworIyBDb21wcmVzc2lvbiBzaGVsbCBjb21tYW5kCitET0NfQ09NUFJFU1NfQ01EW2d6XSA/PSAnZ3ppcCAtdiAtOSAtbicKK0RPQ19DT01QUkVTU19DTURbYnoyXSA/PSAiYnppcDIgLXYgLTkiCitET0NfQ09NUFJFU1NfQ01EW3h6XSA/PSAieHogLXYiCisKKyMgRGVjb21wcmVzc2lvbiBzaGVsbCBjb21tYW5kCitET0NfREVDT01QUkVTU19DTURbZ3pdID89ICdndW56aXAgLXYnCitET0NfREVDT01QUkVTU19DTURbYnoyXSA/PSAiYnVuemlwMiAtdiIKK0RPQ19ERUNPTVBSRVNTX0NNRFt4el0gPz0gInVueHogLXYiCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicGFja2FnZV9kb19jb21wcmVzc19kb2MgY29tcHJlc3NfZG9jX3VwZGF0ZWFsdGVybmF0aXZlcyIKK3B5dGhvbiBwYWNrYWdlX2RvX2NvbXByZXNzX2RvYygpIHsKKyAgICBjb21wcmVzc19tb2RlID0gZC5nZXRWYXIoJ0RPQ19DT01QUkVTUycsIFRydWUpCisgICAgY29tcHJlc3NfbGlzdCA9IChkLmdldFZhcignRE9DX0NPTVBSRVNTX0xJU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGlmIGNvbXByZXNzX21vZGUgbm90IGluIGNvbXByZXNzX2xpc3Q6CisgICAgICAgIGJiLmZhdGFsKCdDb21wcmVzc2lvbiBwb2xpY3kgJXMgbm90IHN1cHBvcnRlZCAobm90IGxpc3RlZCBpbiAlcylcbicgJSAoY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfbGlzdCkpCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIGNvbXByZXNzX2NtZHMgPSB7fQorICAgIGRlY29tcHJlc3NfY21kcyA9IHt9CisgICAgZm9yIG1vZGUgaW4gY29tcHJlc3NfbGlzdDoKKyAgICAgICAgY29tcHJlc3NfY21kc1ttb2RlXSA9IGQuZ2V0VmFyRmxhZygnRE9DX0NPTVBSRVNTX0NNRCcsIG1vZGUpCisgICAgICAgIGRlY29tcHJlc3NfY21kc1ttb2RlXSA9IGQuZ2V0VmFyRmxhZygnRE9DX0RFQ09NUFJFU1NfQ01EJywgbW9kZSkKKworICAgIG1hbmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoIm1hbmRpciIsIFRydWUpKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKG1hbmRpcik6CisgICAgICAgICMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCisgICAgICAgIGRlY29tcHJlc3NfZG9jKG1hbmRpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKQorICAgICAgICBjb21wcmVzc19kb2MobWFuZGlyLCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKQorCisgICAgaW5mb2RpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImluZm9kaXIiLCBUcnVlKSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmZvZGlyKToKKyAgICAgICAgIyBEZWNvbXByZXNzIGRvYyBmaWxlcyB3aGljaCBmb3JtYXQgaXMgbm90IGNvbXByZXNzX21vZGUKKyAgICAgICAgZGVjb21wcmVzc19kb2MoaW5mb2RpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKQorICAgICAgICBjb21wcmVzc19kb2MoaW5mb2RpciwgY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfY21kcykKK30KKworZGVmIF9nZXRfY29tcHJlc3NfZm9ybWF0KGZpbGUsIGNvbXByZXNzX2Zvcm1hdF9saXN0KToKKyAgICBmb3IgY29tcHJlc3NfZm9ybWF0IGluIGNvbXByZXNzX2Zvcm1hdF9saXN0OgorICAgICAgICBjb21wcmVzc19zdWZmaXggPSAnLicgKyBjb21wcmVzc19mb3JtYXQKKyAgICAgICAgaWYgZmlsZS5lbmRzd2l0aChjb21wcmVzc19zdWZmaXgpOgorICAgICAgICAgICAgcmV0dXJuIGNvbXByZXNzX2Zvcm1hdAorCisgICAgcmV0dXJuICcnCisKKyMgQ29sbGVjdCBoYXJkbGlua3MgdG8gZGljdCwgZWFjaCBlbGVtZW50IGluIGRpY3QgbGlzdHMgaGFyZGxpbmtzCisjIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBkb2MgZmlsZS4KKyMge2hhcmRsaW5rMTA6IFtoYXJkbGluazExLCBoYXJkbGluazEyXSwsLH0KKyMgVGhlIGhhcmRsaW5rMTAsIGhhcmRsaW5rMTEgYW5kIGhhcmRsaW5rMTIgYXJlIHRoZSBzYW1lIGZpbGUuCitkZWYgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSk6CisgICAgZm9yIGhhcmRsaW5rIGluIGhhcmRsaW5rX2RpY3Q6CisgICAgICAgICMgQWRkIHRvIHRoZSBleGlzdGVkIGhhcmRsaW5rCisgICAgICAgIGlmIG9zLnBhdGguc2FtZWZpbGUoaGFyZGxpbmssIGZpbGUpOgorICAgICAgICAgICAgaGFyZGxpbmtfZGljdFtoYXJkbGlua10uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICByZXR1cm4gaGFyZGxpbmtfZGljdAorCisgICAgaGFyZGxpbmtfZGljdFtmaWxlXSA9IFtdCisgICAgcmV0dXJuIGhhcmRsaW5rX2RpY3QKKworZGVmIF9wcm9jZXNzX2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGNvbXByZXNzX21vZGUsIHNoZWxsX2NtZHMsIGRlY29tcHJlc3M9RmFsc2UpOgorICAgIGZvciB0YXJnZXQgaW4gaGFyZGxpbmtfZGljdDoKKyAgICAgICAgaWYgZGVjb21wcmVzczoKKyAgICAgICAgICAgIGNvbXByZXNzX2Zvcm1hdCA9IF9nZXRfY29tcHJlc3NfZm9ybWF0KHRhcmdldCwgc2hlbGxfY21kcy5rZXlzKCkpCisgICAgICAgICAgICBjbWQgPSAiJXMgLWYgJXMiICUgKHNoZWxsX2NtZHNbY29tcHJlc3NfZm9ybWF0XSwgdGFyZ2V0KQorICAgICAgICAgICAgYmIubm90ZSgnZGVjb21wcmVzcyBoYXJkbGluayAlcycgJSB0YXJnZXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgLWYgJXMiICUgKHNoZWxsX2NtZHNbY29tcHJlc3NfbW9kZV0sIHRhcmdldCkKKyAgICAgICAgICAgIGJiLm5vdGUoJ2NvbXByZXNzIGhhcmRsaW5rICVzJyAlIHRhcmdldCkKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLndhcm4oImRlL2NvbXByZXNzIGZpbGUgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgaGFyZGxpbmtfZHVwIGluIGhhcmRsaW5rX2RpY3RbdGFyZ2V0XToKKyAgICAgICAgICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICAgICAgICAgIyBSZW1vdmUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgICAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgICAgICAgICAgICAgbmV3X2hhcmRsaW5rID0gaGFyZGxpbmtfZHVwWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgICAgICAgICAgICAgbmV3X3RhcmdldCA9IHRhcmdldFs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEFwcGVuZCBjb21wcmVzcyBzdWZmaXgKKyAgICAgICAgICAgICAgICBjb21wcmVzc19zdWZmaXggPSAnLicgKyBjb21wcmVzc19tb2RlCisgICAgICAgICAgICAgICAgbmV3X2hhcmRsaW5rID0gaGFyZGxpbmtfZHVwICsgY29tcHJlc3Nfc3VmZml4CisgICAgICAgICAgICAgICAgbmV3X3RhcmdldCA9IHRhcmdldCArIGNvbXByZXNzX3N1ZmZpeAorCisgICAgICAgICAgICBiYi5ub3RlKCdoYXJkbGluayAlcy0tPiVzJyAlIChuZXdfaGFyZGxpbmssIG5ld190YXJnZXQpKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld19oYXJkbGluayk6CisgICAgICAgICAgICAgICAgb3MubGluayhuZXdfdGFyZ2V0LCBuZXdfaGFyZGxpbmspCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhoYXJkbGlua19kdXApOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhoYXJkbGlua19kdXApCisKK2RlZiBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX2Zvcm1hdCwgZGVjb21wcmVzcz1GYWxzZSk6CisgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgaWYgZGVjb21wcmVzczoKKyAgICAgICAgIyBSZW1vdmUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIG5ld19saW5rbmFtZSA9IGZpbGVbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgbmV3X3NvdXJjZSA9IG9zLnJlYWRsaW5rKGZpbGUpWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgZWxzZToKKyAgICAgICAgIyBBcHBlbmQgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIG5ld19saW5rbmFtZSA9IGZpbGUgKyBjb21wcmVzc19zdWZmaXgKKyAgICAgICAgbmV3X3NvdXJjZSA9IG9zLnJlYWRsaW5rKGZpbGUpICsgY29tcHJlc3Nfc3VmZml4CisKKyAgICBiYi5ub3RlKCdzeW1saW5rICVzLS0+JXMnICUgKG5ld19saW5rbmFtZSwgbmV3X3NvdXJjZSkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld19saW5rbmFtZSk6CisgICAgICAgIG9zLnN5bWxpbmsobmV3X3NvdXJjZSwgbmV3X2xpbmtuYW1lKQorCisgICAgb3MudW5saW5rKGZpbGUpCisKK2RlZiBfaXNfaW5mbyhmaWxlKToKKyAgICBmbGFncyA9ICcuaW5mbyAuaW5mby0nLnNwbGl0KCkKKyAgICBmb3IgZmxhZyBpbiBmbGFnczoKKyAgICAgICAgaWYgZmxhZyBpbiBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitkZWYgX2lzX21hbihmaWxlKToKKyAgICBpbXBvcnQgcmUKKworICAgICMgSXQgcmVmZXJzIE1BTlNFQ1QtdmFyIGluIG1hbigxLjZnKSdzIG1hbi5jb25maWcKKyAgICAjICIuMTouMXA6Ljg6LjI6LjM6LjNwOi40Oi41Oi42Oi43Oi45Oi4wcDoudGNsOi5uOi5sOi5wOi5vIgorICAgICMgTm90IHN0YXJ0IHdpdGggJy4nLCBhbmQgY29udGFpbiB0aGUgYWJvdmUgY29sb24tc2VwZXJhdGUgZWxlbWVudAorICAgIHAgPSByZS5jb21waWxlKHInW15cLl0rXC4oWzEtOWxub3BdfDBwfHRjbCknKQorICAgIGlmIHAuc2VhcmNoKGZpbGUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBfaXNfY29tcHJlc3NfZG9jKGZpbGUsIGNvbXByZXNzX2Zvcm1hdF9saXN0KToKKyAgICBjb21wcmVzc19mb3JtYXQgPSBfZ2V0X2NvbXByZXNzX2Zvcm1hdChmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCkKKyAgICBjb21wcmVzc19zdWZmaXggPSAnLicgKyBjb21wcmVzc19mb3JtYXQKKyAgICBpZiBmaWxlLmVuZHN3aXRoKGNvbXByZXNzX3N1ZmZpeCk6CisgICAgICAgICMgUmVtb3ZlIHRoZSBjb21wcmVzcyBzdWZmaXgKKyAgICAgICAgdW5jb21wcmVzc19maWxlID0gZmlsZVs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICBpZiBfaXNfaW5mbyh1bmNvbXByZXNzX2ZpbGUpIG9yIF9pc19tYW4odW5jb21wcmVzc19maWxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBjb21wcmVzc19mb3JtYXQKKworICAgIHJldHVybiBGYWxzZSwgJycKKworZGVmIGNvbXByZXNzX2RvYyh0b3BkaXIsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpOgorICAgIGhhcmRsaW5rX2RpY3QgPSB7fQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBfaXNfaW5mbyhmaWxlKSBvciBfaXNfbWFuKGZpbGUpOgorICAgICAgICAgICAgICAgICMgU3ltbGluaworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX21vZGUpCisgICAgICAgICAgICAgICAgIyBIYXJkbGluaworICAgICAgICAgICAgICAgIGVsaWYgb3MubHN0YXQoZmlsZSkuc3RfbmxpbmsgPiAxOgorICAgICAgICAgICAgICAgICAgICBfY29sbGVjdF9oYXJkbGluayhoYXJkbGlua19kaWN0LCBmaWxlKQorICAgICAgICAgICAgICAgICMgTm9ybWFsIGZpbGUKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAiJXMgJXMiICUgKGNvbXByZXNzX2NtZHNbY29tcHJlc3NfbW9kZV0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJjb21wcmVzcyBmYWlsZWQgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ2NvbXByZXNzIGZpbGUgJXMnICUgZmlsZSkKKworICAgIF9wcm9jZXNzX2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpCisKKyMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCitkZWYgZGVjb21wcmVzc19kb2ModG9wZGlyLCBjb21wcmVzc19tb2RlLCBkZWNvbXByZXNzX2NtZHMpOgorICAgIGhhcmRsaW5rX2RpY3QgPSB7fQorICAgIGRlY29tcHJlc3MgPSBUcnVlCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodG9wZGlyKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlcywgY29tcHJlc3NfZm9ybWF0ID0gX2lzX2NvbXByZXNzX2RvYyhmaWxlLCBkZWNvbXByZXNzX2NtZHMua2V5cygpKQorICAgICAgICAgICAgIyBEZWNvbXByZXNzIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgaWYgcmVzIGFuZCBjb21wcmVzc19tb2RlIT1jb21wcmVzc19mb3JtYXQ6CisgICAgICAgICAgICAgICAgIyBTeW1saW5rCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIF9wcm9jZXNzX3N5bWxpbmsoZmlsZSwgY29tcHJlc3NfZm9ybWF0LCBkZWNvbXByZXNzKQorICAgICAgICAgICAgICAgICMgSGFyZGxpbmsKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmxzdGF0KGZpbGUpLnN0X25saW5rID4gMToKKyAgICAgICAgICAgICAgICAgICAgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBmaWxlCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChkZWNvbXByZXNzX2NtZHNbY29tcHJlc3NfZm9ybWF0XSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oImRlY29tcHJlc3MgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdkZWNvbXByZXNzIGZpbGUgJXMnICUgZmlsZSkKKworICAgIF9wcm9jZXNzX2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcywgZGVjb21wcmVzcykKKworcHl0aG9uIGNvbXByZXNzX2RvY191cGRhdGVhbHRlcm5hdGl2ZXMgKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCd1cGRhdGUtYWx0ZXJuYXRpdmVzJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgbWFuZGlyID0gZC5nZXRWYXIoIm1hbmRpciIsIFRydWUpCisgICAgaW5mb2RpciA9IGQuZ2V0VmFyKCJpbmZvZGlyIiwgVHJ1ZSkKKyAgICBjb21wcmVzc19tb2RlID0gZC5nZXRWYXIoJ0RPQ19DT01QUkVTUycsIFRydWUpCisgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIG9sZF9uYW1lcyA9IChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBuZXdfbmFtZXMgPSBbXQorICAgICAgICBmb3Igb2xkX25hbWUgaW4gb2xkX25hbWVzOgorICAgICAgICAgICAgb2xkX2xpbmsgICAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBvbGRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIG9sZF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgb2xkX25hbWUsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgIG9sZF9saW5rCisgICAgICAgICAgICAjIFNvbWV0aW1lcyBvbGRfdGFyZ2V0IGlzIHNwZWNpZmllZCBhcyByZWxhdGl2ZSB0byB0aGUgbGluayBuYW1lLgorICAgICAgICAgICAgb2xkX3RhcmdldCAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvbGRfbGluayksIG9sZF90YXJnZXQpCisKKyAgICAgICAgICAgICMgVGhlIHVwZGF0ZWFsdGVybmF0aXZlcyB1c2VkIGZvciBjb21wcmVzcyBkb2MKKyAgICAgICAgICAgIGlmIG1hbmRpciBpbiBvbGRfdGFyZ2V0IG9yIGluZm9kaXIgaW4gb2xkX3RhcmdldDoKKyAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IG9sZF9uYW1lICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld19saW5rID0gb2xkX2xpbmsgKyAnLicgKyBjb21wcmVzc19tb2RlCisgICAgICAgICAgICAgICAgbmV3X3RhcmdldCA9IG9sZF90YXJnZXQgKyAnLicgKyBjb21wcmVzc19tb2RlCisgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIG5ld19uYW1lLCBuZXdfbGluaykKKyAgICAgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG9sZF9uYW1lLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBuZXdfbmFtZSwgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgb2xkX25hbWUsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLmRlbFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG5ld19uYW1lLCBuZXdfdGFyZ2V0KQorICAgICAgICAgICAgICAgIGVsaWYgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBuZXdfdGFyZ2V0KQorCisgICAgICAgICAgICAgICAgbmV3X25hbWVzLmFwcGVuZChuZXdfbmFtZSkKKworICAgICAgICBpZiBuZXdfbmFtZXM6CisgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCAnICcuam9pbihuZXdfbmFtZXMpKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2NvbXBsaWFuY2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDdjMTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2NvbXBsaWFuY2UuYmJjbGFzcwpAQCAtMCwwICsxLDY0IEBACisjIERlcGxveSBzb3VyY2VzIGZvciByZWNpcGVzIGZvciBjb21wbGlhbmNlIHdpdGggY29weWxlZnQtc3R5bGUgbGljZW5zZXMKKyMgRGVmYXVsdHMgdG8gdXNpbmcgc3ltbGlua3MsIGFzIGl0J3MgYSBxdWljayBvcGVyYXRpb24sIGFuZCBvbmUgY2FuIGVhc2lseQorIyBmb2xsb3cgdGhlIGxpbmtzIHdoZW4gbWFraW5nIHVzZSBvZiB0aGUgZmlsZXMgKGUuZy4gdGFyIHdpdGggdGhlIC1oIGFyZykuCisjCisjIHZpOnN0cz00OnN3PTQ6ZXQKKworaW5oZXJpdCBjb3B5bGVmdF9maWx0ZXIKKworQ09QWUxFRlRfU09VUkNFU19ESVIgPz0gJyR7REVQTE9ZX0RJUn0vY29weWxlZnRfc291cmNlcycKKworcHl0aG9uIGRvX3ByZXBhcmVfY29weWxlZnRfc291cmNlcyAoKSB7CisgICAgIiIiUG9wdWxhdGUgYSB0cmVlIG9mIHRoZSByZWNpcGUgc291cmNlcyBhbmQgZW1pdCBwYXRjaCBzZXJpZXMgZmlsZXMiIiIKKyAgICBpbXBvcnQgb3MucGF0aAorICAgIGltcG9ydCBzaHV0aWwKKworICAgIHAgPSBkLmdldFZhcignUCcsIFRydWUpCisgICAgaW5jbHVkZWQsIHJlYXNvbiA9IGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpCisgICAgaWYgbm90IGluY2x1ZGVkOgorICAgICAgICBiYi5kZWJ1ZygxLCAnY29weWxlZnQ6ICVzIGlzIGV4Y2x1ZGVkOiAlcycgJSAocCwgcmVhc29uKSkKKyAgICAgICAgcmV0dXJuCisgICAgZWxzZToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2NvcHlsZWZ0OiAlcyBpcyBpbmNsdWRlZDogJXMnICUgKHAsIHJlYXNvbikpCisKKyAgICBzb3VyY2VzX2RpciA9IGQuZ2V0VmFyKCdDT1BZTEVGVF9TT1VSQ0VTX0RJUicsIFRydWUpCisgICAgZGxfZGlyID0gZC5nZXRWYXIoJ0RMX0RJUicsIFRydWUpCisgICAgc3JjX3VyaSA9IGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgdWQgPSBmZXRjaC51ZAorCisgICAgcGYgPSBkLmdldFZhcignUEYnLCBUcnVlKQorICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oc291cmNlc19kaXIsIHBmKQorICAgIHNodXRpbC5ybXRyZWUoZGVzdCwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0KQorCisgICAgZm9yIHUgaW4gdWQudmFsdWVzKCk6CisgICAgICAgIGxvY2FsID0gb3MucGF0aC5ub3JtcGF0aChmZXRjaC5sb2NhbHBhdGgodS51cmwpKQorICAgICAgICBpZiBsb2NhbC5lbmRzd2l0aCgnLmJiJyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGlmIGxvY2FsLmVuZHN3aXRoKCcvJyk6CisgICAgICAgICAgICBsb2NhbCA9IGxvY2FsWzotMV0KKworICAgICAgICBpZiB1Lm1pcnJvcnRhcmJhbGw6CisgICAgICAgICAgICB0YXJiYWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZGxfZGlyLCB1Lm1pcnJvcnRhcmJhbGwpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0YXJiYWxsX3BhdGgpOgorICAgICAgICAgICAgICAgIGxvY2FsID0gdGFyYmFsbF9wYXRoCisKKyAgICAgICAgb2UucGF0aC5zeW1saW5rKGxvY2FsLCBvcy5wYXRoLmpvaW4oZGVzdCwgb3MucGF0aC5iYXNlbmFtZShsb2NhbCkpLCBmb3JjZT1UcnVlKQorCisgICAgcGF0Y2hlcyA9IHNyY19wYXRjaGVzKGQpCisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBwYXRjaGRpciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCisgICAgICAgIGlmIHBhdGNoZGlyOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGRlc3QsICdzZXJpZXMuc3ViZGlyLiVzJyAlIHBhdGNoZGlyLnJlcGxhY2UoJy8nLCAnXycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGRlc3QsICdzZXJpZXMnKQorCisgICAgICAgIHdpdGggb3BlbihzZXJpZXMsICdhJykgYXMgczoKKyAgICAgICAgICAgIHMud3JpdGUoJyVzIC1wJXNcbicgJSAob3MucGF0aC5iYXNlbmFtZShsb2NhbCksIHBhcm1bJ3N0cmlwbGV2ZWwnXSkpCit9CisKK2FkZHRhc2sgcHJlcGFyZV9jb3B5bGVmdF9zb3VyY2VzIGFmdGVyIGRvX2ZldGNoIGJlZm9yZSBkb19idWlsZAorZG9fcHJlcGFyZV9jb3B5bGVmdF9zb3VyY2VzW2RpcnNdID0gIiR7V09SS0RJUn0iCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gJ2RvX3ByZXBhcmVfY29weWxlZnRfc291cmNlcycKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJlN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2ZpbHRlci5iYmNsYXNzCkBAIC0wLDAgKzEsNzkgQEAKKyMgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgY29weWxlZnRfc2hvdWxkX2luY2x1ZGUgcmV0dXJucyBUcnVlIGZvciB0aGUKKyMgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHJlY2lwZSwgYW5kIEZhbHNlIGZvciB0aGUKKyMgQ09QWUxFRlRfTElDRU5TRV9FWENMVURFLgorIworIyBCeSBkZWZhdWx0LCBpbmNsdWRlcyBhbGwgR1BMIGFuZCBMR1BMLCBhbmQgZXhjbHVkZXMgQ0xPU0VEIGFuZCBQcm9wcmlldGFyeS4KKyMKKyMgdmk6c3RzPTQ6c3c9NDpldAorCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgPz0gJ0dQTCogTEdQTConCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREVbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGdsb2JzIHdoaWNoIGluY2x1ZGUgbGljZW5zZXMnCisKK0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA/PSAnQ0xPU0VEIFByb3ByaWV0YXJ5JworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBnbG9icyB3aGljaCBleGNsdWRlIGxpY2Vuc2VzJworCitDT1BZTEVGVF9SRUNJUEVfVFlQRSA/PSAnJHtAY29weWxlZnRfcmVjaXBlX3R5cGUoZCl9JworQ09QWUxFRlRfUkVDSVBFX1RZUEVbZG9jXSA9ICdUaGUgInR5cGUiIG9mIHRoZSBjdXJyZW50IHJlY2lwZSAoZS5nLiB0YXJnZXQsIG5hdGl2ZSwgY3Jvc3MpJworCitDT1BZTEVGVF9SRUNJUEVfVFlQRVMgPz0gJ3RhcmdldCcKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFU1t0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUkVDSVBFX1RZUEVTW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVjaXBlIHR5cGVzIHRvIGluY2x1ZGUnCisKK0NPUFlMRUZUX0FWQUlMQUJMRV9SRUNJUEVfVFlQRVMgPSAndGFyZ2V0IG5hdGl2ZSBuYXRpdmVzZGsgY3Jvc3MgY3Jvc3NzZGsgY3Jvc3MtY2FuYWRpYW4nCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHJlY2lwZSB0eXBlcycKKworQ09QWUxFRlRfUE5fSU5DTFVERSA/PSAnJworQ09QWUxFRlRfUE5fSU5DTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUE5fSU5DTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSBuYW1lcyB0byBpbmNsdWRlJworCitDT1BZTEVGVF9QTl9FWENMVURFID89ICcnCitDT1BZTEVGVF9QTl9FWENMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9QTl9FWENMVURFW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVjaXBlIG5hbWVzIHRvIGV4Y2x1ZGUnCisKK2RlZiBjb3B5bGVmdF9yZWNpcGVfdHlwZShkKToKKyAgICBmb3IgcmVjaXBlX3R5cGUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFUycsIGQpOgorICAgICAgICBpZiBvZS51dGlscy5pbmhlcml0cyhkLCByZWNpcGVfdHlwZSk6CisgICAgICAgICAgICByZXR1cm4gcmVjaXBlX3R5cGUKKyAgICByZXR1cm4gJ3RhcmdldCcKKworZGVmIGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpOgorICAgICIiIgorICAgIERldGVybWluZSBpZiB0aGlzIHJlY2lwZSdzIHNvdXJjZXMgc2hvdWxkIGJlIGRlcGxveWVkIGZvciBjb21wbGlhbmNlCisgICAgIiIiCisgICAgaW1wb3J0IGFzdAorICAgIGltcG9ydCBvZS5saWNlbnNlCisgICAgZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoY2FzZSBhcyBmbm1hdGNoCisKKyAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgZGlkIG5vdCBtYXRjaCBhbnl0aGluZycKKworICAgIHJlY2lwZV90eXBlID0gZC5nZXRWYXIoJ0NPUFlMRUZUX1JFQ0lQRV9UWVBFJywgVHJ1ZSkKKyAgICBpZiByZWNpcGVfdHlwZSBub3QgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfUkVDSVBFX1RZUEVTJywgZCk6CisgICAgICAgIGluY2x1ZGUsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIHR5cGUgIiVzIiBpcyBleGNsdWRlZCcgJSByZWNpcGVfdHlwZQorCisgICAgaW5jbHVkZSA9IG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERScsIGQpCisgICAgZXhjbHVkZSA9IG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERScsIGQpCisKKyAgICB0cnk6CisgICAgICAgIGlzX2luY2x1ZGVkLCByZWFzb24gPSBvZS5saWNlbnNlLmlzX2luY2x1ZGVkKGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSksIGluY2x1ZGUsIGV4Y2x1ZGUpCisgICAgZXhjZXB0IG9lLmxpY2Vuc2UuTGljZW5zZUVycm9yIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIGV4YykpCisgICAgZWxzZToKKyAgICAgICAgaWYgaXNfaW5jbHVkZWQ6CisgICAgICAgICAgICBpZiByZWFzb246CisgICAgICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IFRydWUsICdyZWNpcGUgaGFzIGluY2x1ZGVkIGxpY2Vuc2VzOiAlcycgJSAnLCAnLmpvaW4ocmVhc29uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgZG9lcyBub3QgaW5jbHVkZSBhIGNvcHlsZWZ0IGxpY2Vuc2UnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgaGFzIGV4Y2x1ZGVkIGxpY2Vuc2VzOiAlcycgJSAnLCAnLmpvaW4ocmVhc29uKQorCisgICAgaWYgYW55KGZubWF0Y2goZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG5hbWUpIFwKKyAgICAgICAgICAgIGZvciBuYW1lIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX1BOX0lOQ0xVREUnLCBkKSk6CisgICAgICAgIGluY2x1ZGVkLCBtb3RpdmUgPSAgVHJ1ZSwgJ3JlY2lwZSBpbmNsdWRlZCBieSBuYW1lJworICAgIGlmIGFueShmbm1hdGNoKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBuYW1lKSBcCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9QTl9FWENMVURFJywgZCkpOgorICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgZXhjbHVkZWQgYnkgbmFtZScKKworICAgIHJldHVybiBpbmNsdWRlZCwgbW90aXZlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTM0MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDczIEBACisjIENvbW1vbiBjb2RlIGZvciBnZW5lcmF0aW5nIGNvcmUgcmVmZXJlbmNlIGltYWdlcworIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBMaW51eCBGb3VuZGF0aW9uCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCisjIElNQUdFX0ZFQVRVUkVTIGNvbnRyb2wgY29udGVudCBvZiB0aGUgY29yZSByZWZlcmVuY2UgaW1hZ2VzCisjIAorIyBCeSBkZWZhdWx0IHdlIGluc3RhbGwgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCBhbmQgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgcGFja2FnZXM7CisjIHRoaXMgZ2l2ZXMgdXMgd29ya2luZyAoY29uc29sZSBvbmx5KSByb290ZnMuCisjCisjIEF2YWlsYWJsZSBJTUFHRV9GRUFUVVJFUzoKKyMKKyMgLSB4MTEgICAgICAgICAgICAgICAgIC0gWCBzZXJ2ZXIKKyMgLSB4MTEtYmFzZSAgICAgICAgICAgIC0gWCBzZXJ2ZXIgd2l0aCBtaW5pbWFsIGVudmlyb25tZW50CisjIC0geDExLXNhdG8gICAgICAgICAgICAtIE9wZW5lZEhhbmQgU2F0byBlbnZpcm9ubWVudAorIyAtIHRvb2xzLWRlYnVnICAgICAgICAgLSBkZWJ1Z2dpbmcgdG9vbHMKKyMgLSBlY2xpcHNlLWRlYnVnICAgICAgIC0gRWNsaXBzZSByZW1vdGUgZGVidWdnaW5nIHN1cHBvcnQKKyMgLSB0b29scy1wcm9maWxlICAgICAgIC0gcHJvZmlsaW5nIHRvb2xzCisjIC0gdG9vbHMtdGVzdGFwcHMgICAgICAtIHRvb2xzIHVzYWJsZSB0byBtYWtlIHNvbWUgZGV2aWNlIHRlc3RzCisjIC0gdG9vbHMtc2RrICAgICAgICAgICAtIFNESyAoQy9DKysgY29tcGlsZXIsIGF1dG90b29scywgZXRjLikKKyMgLSBuZnMtc2VydmVyICAgICAgICAgIC0gTkZTIHNlcnZlcgorIyAtIG5mcy1jbGllbnQgICAgICAgICAgLSBORlMgY2xpZW50CisjIC0gc3NoLXNlcnZlci1kcm9wYmVhciAtIFNTSCBzZXJ2ZXIgKGRyb3BiZWFyKQorIyAtIHNzaC1zZXJ2ZXItb3BlbnNzaCAgLSBTU0ggc2VydmVyIChvcGVuc3NoKQorIyAtIHF0NC1wa2dzICAgICAgICAgICAgLSBRdDQvWDExIGFuZCBkZW1vIGFwcGxpY2F0aW9ucworIyAtIGh3Y29kZWNzICAgICAgICAgICAgLSBJbnN0YWxsIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBjb2RlY3MKKyMgLSBwYWNrYWdlLW1hbmFnZW1lbnQgIC0gaW5zdGFsbHMgcGFja2FnZSBtYW5hZ2VtZW50IHRvb2xzIGFuZCBwcmVzZXJ2ZXMgdGhlIHBhY2thZ2UgbWFuYWdlciBkYXRhYmFzZQorIyAtIGRlYnVnLXR3ZWFrcyAgICAgICAgLSBtYWtlcyBhbiBpbWFnZSBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQsIGUuZy4gYWxsb3dpbmcgcGFzc3dvcmRsZXNzIHJvb3QgbG9naW5zCisjIC0gZGV2LXBrZ3MgICAgICAgICAgICAtIGRldmVsb3BtZW50IHBhY2thZ2VzIChoZWFkZXJzLCBldGMuKSBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcyBpbiB0aGUgcm9vdGZzCisjIC0gZGJnLXBrZ3MgICAgICAgICAgICAtIGRlYnVnIHN5bWJvbCBwYWNrYWdlcyBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcyBpbiB0aGUgcm9vdGZzCisjIC0gZG9jLXBrZ3MgICAgICAgICAgICAtIGRvY3VtZW50YXRpb24gcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIHB0ZXN0LXBrZ3MgICAgICAgICAgLSBwdGVzdCBwYWNrYWdlcyBmb3IgYWxsIHB0ZXN0LWVuYWJsZWQgcmVjaXBlcworIyAtIHJlYWQtb25seS1yb290ZnMgICAgLSB0d2Vha3MgYW4gaW1hZ2UgdG8gc3VwcG9ydCByZWFkLW9ubHkgcm9vdGZzCisjCitGRUFUVVJFX1BBQ0tBR0VTX3gxMSA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEiCitGRUFUVVJFX1BBQ0tBR0VTX3gxMS1iYXNlID0gInBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlIgorRkVBVFVSRV9QQUNLQUdFU194MTEtc2F0byA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtZGVidWcgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWciCitGRUFUVVJFX1BBQ0tBR0VTX2VjbGlwc2UtZGVidWcgPSAicGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1ZyIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtcHJvZmlsZSA9ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIgorRkVBVFVSRV9QQUNLQUdFU190b29scy10ZXN0YXBwcyA9ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcyIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtc2RrID0gInBhY2thZ2Vncm91cC1jb3JlLXNkayBwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQiCitGRUFUVVJFX1BBQ0tBR0VTX25mcy1zZXJ2ZXIgPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLXNlcnZlciIKK0ZFQVRVUkVfUEFDS0FHRVNfbmZzLWNsaWVudCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1uZnMtY2xpZW50IgorRkVBVFVSRV9QQUNLQUdFU19zc2gtc2VydmVyLWRyb3BiZWFyID0gInBhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhciIKK0ZFQVRVUkVfUEFDS0FHRVNfc3NoLXNlcnZlci1vcGVuc3NoID0gInBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIgorRkVBVFVSRV9QQUNLQUdFU19xdDQtcGtncyA9ICJwYWNrYWdlZ3JvdXAtY29yZS1xdC1kZW1vYXBwcyIKK0ZFQVRVUkVfUEFDS0FHRVNfaHdjb2RlY3MgPSAiJHtNQUNISU5FX0hXQ09ERUNTfSIKKworCisjIElNQUdFX0ZFQVRVUkVTX1JFUExBQ0VTX2ZvbyA9ICdiYXIxIGJhcjInCisjIEluY2x1ZGluZyBpbWFnZSBmZWF0dXJlIGZvbyB3b3VsZCByZXBsYWNlIHRoZSBpbWFnZSBmZWF0dXJlcyBiYXIxIGFuZCBiYXIyCitJTUFHRV9GRUFUVVJFU19SRVBMQUNFU19zc2gtc2VydmVyLW9wZW5zc2ggPSAic3NoLXNlcnZlci1kcm9wYmVhciIKKworIyBJTUFHRV9GRUFUVVJFU19DT05GTElDVFNfZm9vID0gJ2JhcjEgYmFyMicKKyMgQW4gZXJyb3IgZXhjZXB0aW9uIHdvdWxkIGJlIHJhaXNlZCBpZiBib3RoIGltYWdlIGZlYXR1cmVzIGZvbyBhbmQgYmFyMShvciBiYXIyKSBhcmUgaW5jbHVkZWQKKworTUFDSElORV9IV0NPREVDUyA/Pz0gIiIKKworQ09SRV9JTUFHRV9CQVNFX0lOU1RBTEwgPSAnXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgXAorICAgIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIFwKKyAgICBcCisgICAgJHtDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEx9IFwKKyAgICAnCisKK0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCA/PSAiIgorCitJTUFHRV9JTlNUQUxMID89ICIke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODE3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Bhbi1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw1NSBAQAorIworIyBjcGFuLWJhc2UgcHJvdmlkZXJzIHZhcmlvdXMgcGVybCByZWxhdGVkIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgYnVpbGRpbmcKKyMgY3BhbiBtb2R1bGVzCisjCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3BlcmwgJHtkYXRhZGlyfS9wZXJsIgorCitERVBFTkRTICArPSAiJHtAWyJwZXJsIiwgInBlcmwtbmF0aXZlIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QFsicGVybCIsICIiXVsoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkpXX0iCisKK1BFUkxfT1dOX0RJUiA9ICIke0BbIiIsICIvcGVybC1uYXRpdmUiXVsoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkpXX0iCisKKyMgRGV0ZXJtaW5lIHRoZSBzdGFnZWQgdmVyc2lvbiBvZiBwZXJsIGZyb20gdGhlIHBlcmwgY29uZmlndXJhdGlvbiBmaWxlCisjIEFzc2lnbiB2YXJkZXB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2Ugc2lnbmF0dXJlIGlzIGNoYW5nZWQgYmVmb3JlIGFuZCBhZnRlcgorIyBwZXJsIGlzIGJ1aWx0IChmcm9tIE5vbmUgdG8gcmVhbCB2ZXJzaW9uIGluIGNvbmZpZy5zaCkuCitnZXRfcGVybF92ZXJzaW9uW3ZhcmRlcHZhbHVlXSA9ICIke1BFUkxfT1dOX0RJUn0iCitkZWYgZ2V0X3BlcmxfdmVyc2lvbihkKToKKyAgICBpbXBvcnQgcmUKKyAgICBjZmcgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC9jb25maWcuc2gnKQorICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oY2ZnLCAncicpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisgICAgbCA9IGYucmVhZGxpbmVzKCk7CisgICAgZi5jbG9zZSgpOworICAgIHIgPSByZS5jb21waWxlKCJedmVyc2lvbj0nKFxkKlwuXGQqXC5cZCopJyIpCisgICAgZm9yIHMgaW4gbDoKKyAgICAgICAgbSA9IHIubWF0Y2gocykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAgcmV0dXJuIE5vbmUKKworIyBEZXRlcm1pbmUgd2hlcmUgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMgYXJlCitkZWYgcGVybF9nZXRfbGliZGlycyhkKToKKyAgICBsaWJkaXIgPSBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKyAgICBpZiBpc190YXJnZXQoZCkgPT0gIm5vIjoKKyAgICAgICAgbGliZGlyICs9ICcvcGVybC1uYXRpdmUnCisgICAgbGliZGlyICs9ICcvcGVybCcKKyAgICByZXR1cm4gbGliZGlyCisKK2RlZiBpc190YXJnZXQoZCk6CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICByZXR1cm4gInllcyIKKyAgICByZXR1cm4gIm5vIgorCitQRVJMTElCRElSUyA6PSAiJHtAcGVybF9nZXRfbGliZGlycyhkKX0iCitQRVJMVkVSU0lPTiA6PSAiJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitQRVJMVkVSU0lPTlt2YXJkZXB2YWx1ZV0gPSAiIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7UEVSTExJQkRJUlN9L2F1dG8vKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS9hdXRvLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS9hdXRvLyovKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7UEVSTExJQkRJUlN9L3ZlbmRvcl9wZXJsLyR7UEVSTFZFUlNJT059L2F1dG8vKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Bhbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmJkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Bhbi5iYmNsYXNzCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgVGhpcyBpcyBmb3IgcGVybCBtb2R1bGVzIHRoYXQgdXNlIHRoZSBvbGQgTWFrZWZpbGUuUEwgYnVpbGQgc3lzdGVtCisjCitpbmhlcml0IGNwYW4tYmFzZSBwZXJsbmF0aXZlCisKK0VYVFJBX0NQQU5GTEFHUyA/PSAiIgorRVhUUkFfUEVSTEZMQUdTID89ICIiCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKKworIyBFbnYgdmFyIHdoaWNoIHRlbGxzIHBlcmwgd2hlcmUgdGhlIHBlcmwgaW5jbHVkZSBmaWxlcyBhcmUKK2V4cG9ydCBQRVJMX0lOQyA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9L0NPUkUiCitleHBvcnQgUEVSTF9MSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBQRVJMSE9TVExJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS8iCisKK2NwYW5fZG9fY29uZmlndXJlICgpIHsKKwlleHBvcnQgUEVSTDVMSUI9IiR7UEVSTF9BUkNITElCfSIKKwl5ZXMgJycgfCBwZXJsICR7RVhUUkFfUEVSTEZMQUdTfSBNYWtlZmlsZS5QTCAke0VYVFJBX0NQQU5GTEFHU30KKworCSMgTWFrZWZpbGUuUExzIGNhbiBleGl0IHdpdGggc3VjY2VzcyB3aXRob3V0IGdlbmVyYXRpbmcgYQorCSMgTWFrZWZpbGUsIGUuZy4gaW4gY2FzZXMgb2YgbWlzc2luZyBjb25maWd1cmUgdGltZQorCSMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSBiZXN0IHByYWN0aWNlIGJ5CisJIyBjcGFudGVzdGVycy5vcmcuIFNlZToKKwkjICAqIGh0dHA6Ly93aWtpLmNwYW50ZXN0ZXJzLm9yZy93aWtpL0NQQU5BdXRob3JOb3RlcworCSMgICogaHR0cDovL3d3dy5ubnRwLnBlcmwub3JnL2dyb3VwL3BlcmwucWEvMjAwOC8wOC9tc2cxMTIzNi5odG1sCisJWyAtZSBNYWtlZmlsZSBdIHx8IGJiZmF0YWwgIk5vIE1ha2VmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgTWFrZWZpbGUuUEwiCisKKwlpZiBbICIke0JVSUxEX1NZU30iICE9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQkuICR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvY29uZmlnLnNoCisJCSMgVXNlIGZpbmQgc2luY2UgdGhlcmUgY2FuIGJlIGEgTWFrZWZpbGUgZ2VuZXJhdGVkIGZvciBlYWNoIE1ha2VmaWxlLlBMCisJCWZvciBmIGluIGBmaW5kIC1uYW1lIE1ha2VmaWxlLlBMYDsgZG8KKwkJCWYyPWBlY2hvICRmIHwgc2VkIC1lICdzLy5QTC8vJ2AKKwkJCXRlc3QgLWYgJGYyIHx8IGNvbnRpbnVlCisJCQlzZWQgLWkgLWUgInM6XChQRVJMX0FSQ0hMSUIgPSBcKS4qOlwxJHtQRVJMX0FSQ0hMSUJ9OiIgXAorCQkJCS1lICdzL3BlcmwucmVhbC9wZXJsLycgXAorCQkJCS1lICJzfF5cKENDRkxBR1MgPS4qXCl8XDEgJHtDRkxBR1N9fCIgXAorCQkJCSRmMgorCQlkb25lCisJZmkKK30KKworY3Bhbl9kb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIFBBU1RIUlVfSU5DPSIke0NGTEFHU30iIExEPSIke0NDTER9IgorfQorCitjcGFuX2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbF92ZW5kb3IKKwlmb3IgUEVSTFNDUklQVCBpbiBgZ3JlcCAtcklFbCAnIyEgKiR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3BlcmwnICR7RH1gOyBkbworCQlzZWQgLWkgLWUgJ3N8JHtiaW5kaXJ9L3BlcmwtbmF0aXZlLiovcGVybHwvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybHwnICRQRVJMU0NSSVBUCisJZG9uZQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Bhbl9idWlsZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjQ4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Bhbl9idWlsZC5iYmNsYXNzCkBAIC0wLDAgKzEsMzcgQEAKKyMKKyMgVGhpcyBpcyBmb3IgcGVybCBtb2R1bGVzIHRoYXQgdXNlIHRoZSBuZXcgQnVpbGQuUEwgYnVpbGQgc3lzdGVtCisjCitpbmhlcml0IGNwYW4tYmFzZSBwZXJsbmF0aXZlCisKK0VYVFJBX0NQQU5fQlVJTERfRkxBR1MgPz0gIiIKKworIyBFbnYgdmFyIHdoaWNoIHRlbGxzIHBlcmwgaWYgaXQgc2hvdWxkIHVzZSBob3N0IChubykgb3IgdGFyZ2V0ICh5ZXMpIHNldHRpbmdzCitleHBvcnQgUEVSTENPTkZJR1RBUkdFVCA9ICIke0Bpc190YXJnZXQoZCl9IgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorZXhwb3J0IExEID0gIiR7Q0NMRH0iCisKK2NwYW5fYnVpbGRfZG9fY29uZmlndXJlICgpIHsKKwlpZiBbICIke0Bpc190YXJnZXQoZCl9IiA9ICJ5ZXMiIF07IHRoZW4KKwkJIyBidWlsZCBmb3IgdGFyZ2V0CisJCS4gJHtTVEFHSU5HX0xJQkRJUn0vcGVybC9jb25maWcuc2gKKwlmaQorCisJcGVybCBCdWlsZC5QTCAtLWluc3RhbGxkaXJzIHZlbmRvciBcCisJCQkJLS1kZXN0ZGlyICR7RH0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGFyY2g9IiR7bGliZGlyfS9wZXJsIiBcCisJCQkJLS1pbnN0YWxsX3BhdGggc2NyaXB0PSR7YmluZGlyfSBcCisJCQkJLS1pbnN0YWxsX3BhdGggYmluPSR7YmluZGlyfSBcCisJCQkJLS1pbnN0YWxsX3BhdGggYmluZG9jPSR7bWFuZGlyfS9tYW4xIFwKKwkJCQktLWluc3RhbGxfcGF0aCBsaWJkb2M9JHttYW5kaXJ9L21hbjMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0VYVFJBX0NQQU5fQlVJTERfRkxBR1N9Cit9CisKK2NwYW5fYnVpbGRfZG9fY29tcGlsZSAoKSB7CisgICAgICAgIHBlcmwgQnVpbGQKK30KKworY3Bhbl9idWlsZF9kb19pbnN0YWxsICgpIHsKKwlwZXJsIEJ1aWxkIGluc3RhbGwKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jcm9zcy1jYW5hZGlhbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGExNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcwpAQCAtMCwwICsxLDE4NSBAQAorIworIyBOT1RFIC0gV2hlbiB1c2luZyB0aGlzIGNsYXNzIHRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0CisjIFRSQU5TTEFURURfVEFSR0VUX0FSQ0ggaXMgYWRkZWQgaW50byBQTi4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgdGhlIFRBUkdFVF9BUkNICisjIGlzIGNoYW5nZWQsIGFub3RoZXIgbmF0aXZlc2RrIHh4eC1jYW5hZGlhbi1jcm9zcyBjYW4gYmUgaW5zdGFsbGVkCisjCisKKworIyBTREsgcGFja2FnZXMgYXJlIGJ1aWx0IGVpdGhlciBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyLAorIyBvciBpbmRpcmVjdGx5IHZpYSBkZXBlbmRlbmN5LiAgTm8gbmVlZCB0byBiZSBpbiAnd29ybGQnLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCitDTEFTU09WRVJSSURFID0gImNsYXNzLWNyb3NzLWNhbmFkaWFuIgorU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtTREtfQVJDSH0ke1NES19WRU5ET1J9LSR7U0RLX09TfToke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKKyMKKyMgVXBkYXRlIEJBU0VfUEFDS0FHRV9BUkNIIGFuZCBQQUNLQUdFX0FSQ0hTCisjCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IgorQ0FOQURJQU5FWFRSQU9TID0gImxpbnV4LXVjbGliYyBsaW51eC1tdXNsIgorQ0FOQURJQU5FWFRSQVZFTkRPUiA9ICIiCitNT0RJRllUT1MgPz89ICIxIgorcHl0aG9uICgpIHsKKyAgICBhcmNocyA9IGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHNka2FyY2hzID0gW10KKyAgICBmb3IgYXJjaCBpbiBhcmNoczoKKyAgICAgICAgc2RrYXJjaHMuYXBwZW5kKGFyY2ggKyAnLSR7U0RLUEtHU1VGRklYfScpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCAiICIuam9pbihzZGthcmNocykpCisKKyAgICAjIEFsbG93IHRoZSBmb2xsb3dpbmcgY29kZSBzZWdtZW50IHRvIGJlIGRpc2FibGVkLCBlLmcuIG1ldGEtZW52aXJvbm1lbnQKKyAgICBpZiBkLmdldFZhcigiTU9ESUZZVE9TIiwgVHJ1ZSkgIT0gIjEiOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGQuZ2V0VmFyKCJUQ0xJQkMiLCBUcnVlKSA9PSAiYmFyZW1ldGFsIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0b3MgPSBkLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkKKyAgICB3aGl0ZWxpc3QgPSBbXQorICAgIGZvciB2YXJpYW50IGluIFsiIiwgInNwZSIsICJ4MzIiLCAiZWFiaSIsICJuMzIiXToKKyAgICAgICAgZm9yIGxpYmMgaW4gWyIiLCAidWNsaWJjIiwgIm11c2wiXToKKyAgICAgICAgICAgIGVudHJ5ID0gImxpbnV4IgorICAgICAgICAgICAgaWYgdmFyaWFudCBhbmQgbGliYzoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi0iICsgbGliYyArIHZhcmlhbnQKKyAgICAgICAgICAgIGVsaWYgdmFyaWFudDoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi1nbnUiICsgdmFyaWFudAorICAgICAgICAgICAgZWxpZiBsaWJjOgorICAgICAgICAgICAgICAgIGVudHJ5ID0gZW50cnkgKyAiLSIgKyBsaWJjCisgICAgICAgICAgICB3aGl0ZWxpc3QuYXBwZW5kKGVudHJ5KQorICAgIGlmIHRvcyBub3QgaW4gd2hpdGVsaXN0OgorICAgICAgICBiYi5mYXRhbCgiQnVpbGRpbmcgY3Jvc3MtY2FuZGlhbiBmb3IgYW4gdW5rbm93biBUQVJHRVRfU1lTICglcyksIHBsZWFzZSB1cGRhdGUgY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyIgJSBkLmdldFZhcigiVEFSR0VUX1NZUyIsIFRydWUpKQorCisgICAgZm9yIG4gaW4gWyJQUk9WSURFUyIsICJERVBFTkRTIl06CisgICAgICAgIGQuc2V0VmFyKG4sIGQuZ2V0VmFyKG4sIFRydWUpKQorICAgIGQuc2V0VmFyKCJTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4iLCBkLmdldFZhcigiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIiwgVHJ1ZSkpCisgICAgZm9yIHByZWZpeCBpbiBbIkFSIiwgIkFTIiwgIkRMTFRPT0wiLCAiQ0MiLCAiQ1hYIiwgIkdDQyIsICJMRCIsICJMSVBPIiwgIk5NIiwgIk9CSkRVTVAiLCAiUkFOTElCIiwgIlNUUklQIiwgIldJTkRSRVMiXToKKyAgICAgICAgbiA9IHByZWZpeCArICJfRk9SX1RBUkdFVCIKKyAgICAgICAgZC5zZXRWYXIobiwgZC5nZXRWYXIobiwgVHJ1ZSkpCisgICAgIyBUaGlzIGlzIGEgYml0IHVnbHkuIFdlIG5lZWQgdG8gemVybyBMSUJDL0FCSSBleHRlbnNpb24gd2hpY2ggd2lsbCBjaGFuZ2UgVEFSR0VUX09TCisgICAgIyBob3dldmVyIHdlIG5lZWQgdGhlIG9sZCB2YWx1ZSBpbiBzb21lIHZhcmlhYmxlcy4gV2UgZXhwYW5kIHRob3NlIGhlcmUgZmlyc3QuCisgICAgdGFyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICBkLnNldFZhcigiTElCQ0VYVEVOU0lPTiIsICIiKQorICAgICAgICBkLnNldFZhcigiQUJJRVhURU5TSU9OIiwgIiIpCisgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudXgzMiBsaW51eC11Y2xpYmN4MzIgbGludXgtbXVzbHgzMiIpCisgICAgZWxpZiB0YXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgICMgUG93ZXJQQyBjYW4gYnVpbGQgImxpbnV4IiBhbmQgImxpbnV4LWdudXNwZSIKKyAgICAgICAgZC5zZXRWYXIoIkxJQkNFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5zZXRWYXIoIkFCSUVYVEVOU0lPTiIsICIiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVzcGUgbGludXgtdWNsaWJjc3BlIGxpbnV4LW11c2xzcGUiKQorICAgIGVsaWYgdGFyY2ggPT0gIm1pcHM2NCI6CisgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudW4zMiBsaW51eC11Y2xpYmNuMzIgbGludXgtbXVzbG4zMiIpCisgICAgaWYgdGFyY2ggPT0gImFybSI6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgtZ251ZWFiaSIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9PUyIsICJsaW51eCIpCisKKyAgICAjIEFsc28gbmVlZCB0byBoYW5kbGUgbXVsdGlsaWIgdGFyZ2V0IHZlbmRvcnMKKyAgICB2ZW5kb3JzID0gZC5nZXRWYXIoIkNBTkFESUFORVhUUkFWRU5ET1IiLCBUcnVlKQorICAgIGlmIG5vdCB2ZW5kb3JzOgorICAgICAgICB2ZW5kb3JzID0gYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdUQVJHRVRfVkVORE9SJykKKyAgICBvcmlndmVuZG9yID0gZC5nZXRWYXIoIlRBUkdFVF9WRU5ET1JfTVVMVElMSUJfT1JJR0lOQUwiLCBUcnVlKQorICAgIGlmIG9yaWd2ZW5kb3I6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgb3JpZ3ZlbmRvcikKKyAgICAgICAgaWYgb3JpZ3ZlbmRvciBub3QgaW4gdmVuZG9ycy5zcGxpdCgpOgorICAgICAgICAgICAgdmVuZG9ycyA9IG9yaWd2ZW5kb3IgKyAiICIgKyB2ZW5kb3JzCisgICAgZC5zZXRWYXIoIkNBTkFESUFORVhUUkFWRU5ET1IiLCB2ZW5kb3JzKQorfQorTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAiJHtQQUNLQUdFX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1RBR0lOR19ESVJfSE9TVCA9ICIke1NUQUdJTkdfRElSfS8ke0hPU1RfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSfS8ke0hPU1RfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworUEFUSF9hcHBlbmQgPSAiOiR7VE1QRElSfS9zeXNyb290cy8ke0hPU1RfQVJDSH0vJHtiaW5kaXJfY3Jvc3N9IgorUEtHSElTVF9ESVIgPSAiJHtUTVBESVJ9L3BrZ2hpc3RvcnkvJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30vIgorCitIT1NUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorSE9TVF9PUyA9ICIke1NES19PU30iCitIT1NUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorSE9TVF9MRF9BUkNIID0gIiR7U0RLX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorCisjYXNzaWduIERQS0dfQVJDSAorRFBLR19BUkNIID0gIiR7U0RLX0FSQ0h9IgorCitDUFBGTEFHUyA9ICIke0JVSUxEU0RLX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERTREtfTERGTEFHU30gXAorICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAiCisKK0RFUEVORFNfR0VUVEVYVCA9ICJnZXR0ZXh0LW5hdGl2ZSBuYXRpdmVzZGstZ2V0dGV4dCIKKworIworIyBXZSBuZWVkIGNocnBhdGggPj0gMC4xNCB0byBlbnN1cmUgd2UgY2FuIGRlYWwgd2l0aCAzMiBhbmQgNjQgYml0CisjIGJpbmFyaWVzCisjCitERVBFTkRTX2FwcGVuZCA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitFWFRSQU5BVElWRVBBVEggKz0gImNocnBhdGgtbmF0aXZlIgorCisjIFBhdGggbWFuZ2xpbmcgbmVlZGVkIGJ5IHRoZSBjcm9zcyBwYWNrYWdpbmcKKyMgTm90ZSB0aGF0IHdlIHVzZSA6PSBoZXJlIHRvIGVuc3VyZSB0aGF0IGxpYmRpciBhbmQgaW5jbHVkZWRpciBhcmUKKyMgdGFyZ2V0IHBhdGhzLgordGFyZ2V0X2Jhc2VfcHJlZml4IDo9ICIke2Jhc2VfcHJlZml4fSIKK3RhcmdldF9wcmVmaXggOj0gIiR7cHJlZml4fSIKK3RhcmdldF9leGVjX3ByZWZpeCA6PSAiJHtleGVjX3ByZWZpeH0iCit0YXJnZXRfYmFzZV9saWJkaXIgPSAiJHt0YXJnZXRfYmFzZV9wcmVmaXh9LyR7YmFzZWxpYn0iCit0YXJnZXRfbGliZGlyID0gIiR7dGFyZ2V0X2V4ZWNfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2luY2x1ZGVkaXIgOj0gIiR7aW5jbHVkZWRpcn0iCisKKyMgQ2hhbmdlIHRvIHBsYWNlIGZpbGVzIGluIFNES1BBVEgKK2Jhc2VfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0iCitwcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitleGVjX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfSIKK2JpbmRpciA9ICIke2V4ZWNfcHJlZml4fS9iaW4vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9iaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9zYmluZGlyID0gIiR7YmluZGlyfSIKK2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIvJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK2xpYmV4ZWNkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliZXhlYy8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitGSUxFU18ke1BOfSA9ICIke3ByZWZpeH0iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cHJlZml4fS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke3ByZWZpeH0vYmluLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorCitleHBvcnQgUEtHX0NPTkZJR19ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGF5b3V0X2xpYmRpcn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKK1VTRV9OTFMgPSAiJHtTREtVU0VfTkxTfSIKKworIyBXZSBoYXZlIHRvIHVzIFRBUkdFVF9BUkNIIGJ1dCB3ZSBjYXJlIGFib3V0IHRoZSBhYnNvbHV0ZSB2YWx1ZQorIyBhbmQgbm90IGFueSBwYXJ0aWN1bGFyIHR1bmUgdGhhdCBpcyBlbmFibGVkLgorVEFSR0VUX0FSQ0hbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfQVJDSCIKKworIyBJZiBNTFBSRUZJWCBpcyBzZXQgYnkgbXVsdGlsaWIgY29kZSwgc2hsaWJzCisjIHBvaW50cyB0byB0aGUgd3JvbmcgcGxhY2Ugc28gZm9yY2UgaXQKK1NITElCU0RJUlMgPSAiJHtQS0dEQVRBX0RJUn0vbmF0aXZlc2RrLXNobGliczIiCitTSExJQlNXT1JLRElSID0gIiR7UEtHREFUQV9ESVJ9L25hdGl2ZXNkay1zaGxpYnMyIgorCitjcm9zc19jYW5hZGlhbl9iaW5kaXJsaW5rcyAoKSB7CisJZm9yIGkgaW4gbGludXggJHtDQU5BRElBTkVYVFJBT1N9CisJZG8KKwkJZm9yIHYgaW4gJHtDQU5BRElBTkVYVFJBVkVORE9SfQorCQlkbworCQkJZD0ke0R9JHtiaW5kaXJ9Ly4uLyR7VEFSR0VUX0FSQ0h9JHYtJGkKKwkJCWlmIFsgLWQgJGQgXTsKKwkJCXRoZW4KKwkJCSAgICBjb250aW51ZQorCQkJZmkKKwkJCWluc3RhbGwgLWQgJGQKKwkJCWZvciBqIGluIGBscyAke0R9JHtiaW5kaXJ9YAorCQkJZG8KKwkJCQlwPSR7VEFSR0VUX0FSQ0h9JHYtJGktYGVjaG8gJGogfCBzZWQgLWUgcywke1RBUkdFVF9QUkVGSVh9LCxgCisJCQkJbG4gLXMgLi4vJHtUQVJHRVRfU1lTfS8kaiAkZC8kcAorCQkJZG9uZQorCQlkb25lCisgICAgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Jvc3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWFiNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MKQEAgLTAsMCArMSw3NyBAQAoraW5oZXJpdCByZWxvY2F0YWJsZQorCisjIENyb3NzIHBhY2thZ2VzIGFyZSBidWlsdCBpbmRpcmVjdGx5IHZpYSBkZXBlbmRlbmN5LAorIyBubyBuZWVkIGZvciB0aGVtIHRvIGJlIGEgZGlyZWN0IHRhcmdldCBvZiAnd29ybGQnCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zcyIKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgorCitIT1NUX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK0hPU1RfVkVORE9SID0gIiR7QlVJTERfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtCVUlMRF9PU30iCitIT1NUX1BSRUZJWCA9ICIke0JVSUxEX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7QlVJTERfQVNfQVJDSH0iCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworUEFDS0FHRV9BUkNIID0gIiR7QlVJTERfQVJDSH0iCisKK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7QlVJTERfVkVORE9SfS0ke0JVSUxEX09TfSIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7ZXhlY19wcmVmaXh9L2xpYi9wa2djb25maWciCitleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUiA9ICIiCisKK0NQUEZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0xERkxBR1NfYnVpbGQtZGFyd2luID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgorCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIiCisKK0RFUEVORFNfR0VUVEVYVCA9ICJnZXR0ZXh0LW5hdGl2ZSIKKworIyBQYXRoIG1hbmdsaW5nIG5lZWRlZCBieSB0aGUgY3Jvc3MgcGFja2FnaW5nCisjIE5vdGUgdGhhdCB3ZSB1c2UgOj0gaGVyZSB0byBlbnN1cmUgdGhhdCBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgYXJlCisjIHRhcmdldCBwYXRocy4KK3RhcmdldF9iYXNlX3ByZWZpeCA6PSAiJHtiYXNlX3ByZWZpeH0iCit0YXJnZXRfcHJlZml4IDo9ICIke3ByZWZpeH0iCit0YXJnZXRfZXhlY19wcmVmaXggOj0gIiR7ZXhlY19wcmVmaXh9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7dGFyZ2V0X2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2xpYmRpciA9ICIke3RhcmdldF9leGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9pbmNsdWRlZGlyIDo9ICIke2luY2x1ZGVkaXJ9IgorCisjIE92ZXJyaWRlcyBmb3IgcGF0aHMKK0NST1NTX1RBUkdFVF9TWVNfRElSID0gIiR7VEFSR0VUX1NZU30iCitwcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKK2Jhc2VfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK2V4ZWNfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCitiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluLyR7Q1JPU1NfVEFSR0VUX1NZU19ESVJ9Igorc2JpbmRpciA9ICIke2JpbmRpcn0iCitiYXNlX2JpbmRpciA9ICIke2JpbmRpcn0iCitiYXNlX3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorbGliZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYi8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKK2xpYmV4ZWNkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliZXhlYy8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KKworVVNFX05MUyA9ICJubyIKKworZGVsdGFzayBwYWNrYWdlCitkZWx0YXNrIHBhY2thZ2VkYXRhCitkZWx0YXNrIHBhY2thZ2VfcWEKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9pcGsKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9kZWIKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9ycG0KK2RlbHRhc2sgcGFja2FnZV93cml0ZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Jvc3NzZGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q1Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAoraW5oZXJpdCBjcm9zcworCitDTEFTU09WRVJSSURFID0gImNsYXNzLWNyb3Nzc2RrIgorTUFDSElORU9WRVJSSURFUyA9ICIiCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitweXRob24gKCkgeworCSMgc2V0IFRVTkVfUEtHQVJDSCB0byBTREtfQVJDSAorCWQuc2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBkLmdldFZhcignU0RLX0FSQ0gnLCBUcnVlKSkKK30KKworU1RBR0lOR19ESVJfVEFSR0VUID0gIiR7U1RBR0lOR19ESVJ9LyR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7U0RLX1ZFTkRPUn0tJHtTREtfT1N9IgorU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworVEFSR0VUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitUQVJHRVRfVkVORE9SID0gIiR7U0RLX1ZFTkRPUn0iCitUQVJHRVRfT1MgPSAiJHtTREtfT1N9IgorVEFSR0VUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorVEFSR0VUX0NDX0FSQ0ggPSAiJHtTREtfQ0NfQVJDSH0iCitUQVJHRVRfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK1RBUkdFVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorVEFSR0VUX0ZQVSA9ICIiCisKK3RhcmdldF9saWJkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7bGliZGlyX25hdGl2ZXNka30iCit0YXJnZXRfaW5jbHVkZWRpciA9ICIke1NES1BBVEhOQVRJVkV9JHtpbmNsdWRlZGlyX25hdGl2ZXNka30iCit0YXJnZXRfYmFzZV9saWJkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfSIKK3RhcmdldF9wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCit0YXJnZXRfZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiYXNlbGliID0gImxpYiIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKKyMgTmVlZCB0byBmb3JjZSB0aGlzIHRvIGVuc3VyZSBjb25zaXRlbmN5IGFjY3Jvc3MgYXJjaGl0ZWN0dXJlcworRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA9ICIiCisKK1VTRV9OTFMgPSAibm8iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2OTc5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kZWJpYW4uYmJjbGFzcwpAQCAtMCwwICsxLDE0MSBAQAorIyBEZWJpYW4gcGFja2FnZSByZW5hbWluZyBvbmx5IG9jY3VycyB3aGVuIGEgcGFja2FnZSBpcyBidWlsdAorIyBXZSB0aGVyZWZvcmUgaGF2ZSB0byBtYWtlIHN1cmUgd2UgYnVpbGQgYWxsIHJ1bnRpbWUgcGFja2FnZXMKKyMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBjdXJyZW50IHBhY2thZ2UgdG8gbWFrZSB0aGUgcGFja2FnZXMgcnVudGltZQorIyBkZXBlbmRzIGFyZSBjb3JyZWN0CisjCisjIEN1c3RvbSBsaWJyYXJ5IHBhY2thZ2UgbmFtZXMgY2FuIGJlIGRlZmluZWQgc2V0dGluZworIyBERUJJQU5OQU1FXyArIHBrZ25hbWUgdG8gdGhlIGRlc2lyZWQgbmFtZS4KKyMKKyMgQmV0dGVyIGV4cHJlc3NlZCBhcyBlbnN1cmUgYWxsIFJERVBFTkRTIHBhY2thZ2UgYmVmb3JlIHdlIHBhY2thZ2UKKyMgVGhpcyBtZWFucyB3ZSBjYW4ndCBoYXZlIGNpcmN1bGFyIFJERVBFTkRTL1JSRUNPTU1FTkRTCisKK0FVVE9fTElCTkFNRV9QS0dTID0gIiR7UEFDS0FHRVN9IgorCitpbmhlcml0IHBhY2thZ2UKKworREVCSUFOUkRFUCA9ICJkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbcmRlcHRhc2tdID0gIiR7REVCSUFOUkRFUH0iCitkb19wYWNrYWdlX3dyaXRlX3RhcltyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorCitweXRob24gKCkgeworICAgIGlmIG5vdCBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKToKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTlJERVAiLCAiIikKK30KKworcHl0aG9uIGRlYmlhbl9wYWNrYWdlX25hbWVfaG9vayAoKSB7CisgICAgaW1wb3J0IGdsb2IsIGNvcHksIHN0YXQsIGVycm5vLCByZQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgYmluX3JlID0gcmUuY29tcGlsZSgiLiovcz8iICsgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigiYmluZGlyIiwgVHJ1ZSkpICsgIiQiKQorICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIi4qLyIgKyBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSkgKyAiJCIpCisgICAgc29fcmUgPSByZS5jb21waWxlKCJsaWIuKlwuc28iKQorCisgICAgZGVmIHNvY3J1bmNoKHMpOgorICAgICAgICBzID0gcy5sb3dlcigpLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgIG0gPSByZS5tYXRjaCgiXiguKikoLilcLnNvXC4oLiopJCIsIHMpCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIG0uZ3JvdXAoMikgaW4gJzAxMjM0NTY3ODknOgorICAgICAgICAgICAgYmluID0gJyVzJXMtJXMnICUgKG0uZ3JvdXAoMSksIG0uZ3JvdXAoMiksIG0uZ3JvdXAoMykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiaW4gPSBtLmdyb3VwKDEpICsgbS5ncm91cCgyKSArIG0uZ3JvdXAoMykKKyAgICAgICAgZGV2ID0gbS5ncm91cCgxKSArIG0uZ3JvdXAoMikKKyAgICAgICAgcmV0dXJuIChiaW4sIGRldikKKworICAgIGRlZiBpc2V4ZWMocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KHBhdGgpCisgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVybiAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lFWEVDKQorCisgICAgZGVmIGFkZF9ycHJvdmlkZXMocGtnLCBkKToKKyAgICAgICAgbmV3cGtnID0gZC5nZXRWYXIoJ1BLR18nICsgcGtnLCBGYWxzZSkKKyAgICAgICAgaWYgbmV3cGtnIGFuZCBuZXdwa2cgIT0gcGtnOgorICAgICAgICAgICAgcHJvdnMgPSAoZC5nZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBwcm92czoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignUlBST1ZJREVTXycgKyBwa2csICIgIiArIHBrZyArICIgKD0iICsgZC5nZXRWYXIoIlBLR1YiLCBUcnVlKSArICIpIikKKworICAgIGRlZiBhdXRvX2xpYm5hbWUocGFja2FnZXMsIG9yaWdfcGtnKToKKyAgICAgICAgc29uYW1lcyA9IFtdCisgICAgICAgIGhhc19iaW5zID0gMAorICAgICAgICBoYXNfbGlicyA9IDAKKyAgICAgICAgZm9yIGZpbGUgaW4gcGtnZmlsZXNbb3JpZ19wa2ddOgorICAgICAgICAgICAgcm9vdCA9IG9zLnBhdGguZGlybmFtZShmaWxlKQorICAgICAgICAgICAgaWYgYmluX3JlLm1hdGNoKHJvb3QpOgorICAgICAgICAgICAgICAgIGhhc19iaW5zID0gMQorICAgICAgICAgICAgaWYgbGliX3JlLm1hdGNoKHJvb3QpOgorICAgICAgICAgICAgICAgIGhhc19saWJzID0gMQorICAgICAgICAgICAgICAgIGlmIHNvX3JlLm1hdGNoKG9zLnBhdGguYmFzZW5hbWUoZmlsZSkpOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAoZC5nZXRWYXIoJ1RBUkdFVF9QUkVGSVgnLCBUcnVlKSBvciAiIikgKyAib2JqZHVtcCAtcCAiICsgZmlsZSArICIgMj4vZGV2L251bGwiCisgICAgICAgICAgICAgICAgICAgIGZkID0gb3MucG9wZW4oY21kKQorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIlxzK1NPTkFNRVxzKyhbXlxzXSopIiwgbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG0gYW5kIG5vdCBtLmdyb3VwKDEpIGluIHNvbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29uYW1lcy5hcHBlbmQobS5ncm91cCgxKSkKKworICAgICAgICBiYi5kZWJ1ZygxLCAnTElCTkFNRVM6IHBrZyAlcyBsaWJzICVkIGJpbnMgJWQgc29uYW1lcyAlcycgJSAob3JpZ19wa2csIGhhc19saWJzLCBoYXNfYmlucywgc29uYW1lcykpCisgICAgICAgIHNvbmFtZSA9IE5vbmUKKyAgICAgICAgaWYgbGVuKHNvbmFtZXMpID09IDE6CisgICAgICAgICAgICBzb25hbWUgPSBzb25hbWVzWzBdCisgICAgICAgIGVsaWYgbGVuKHNvbmFtZXMpID4gMToKKyAgICAgICAgICAgIGxlYWQgPSBkLmdldFZhcignTEVBRF9TT05BTUUnLCBUcnVlKQorICAgICAgICAgICAgaWYgbGVhZDoKKyAgICAgICAgICAgICAgICByID0gcmUuY29tcGlsZShsZWFkKQorICAgICAgICAgICAgICAgIGZpbHRlcmVkID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcyBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICBpZiByLm1hdGNoKHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgaWYgbGVuKGZpbHRlcmVkKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBzb25hbWUgPSBmaWx0ZXJlZFswXQorICAgICAgICAgICAgICAgIGVsaWYgbGVuKGZpbHRlcmVkKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIG1hdGNoZXMgKCVzKSBmb3IgTEVBRF9TT05BTUUgJyVzJyIgJSAoIiwgIi5qb2luKGZpbHRlcmVkKSwgbGVhZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiTXVsdGlwbGUgbGlicmFyaWVzICglcykgZm91bmQsIGJ1dCBMRUFEX1NPTkFNRSAnJXMnIGRvZXNuJ3QgbWF0Y2ggYW55IG9mIHRoZW0iICUgKCIsICIuam9pbihzb25hbWVzKSwgbGVhZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIGxpYnJhcmllcyAoJXMpIGZvdW5kIGFuZCBMRUFEX1NPTkFNRSBub3QgZGVmaW5lZCIgJSAiLCAiLmpvaW4oc29uYW1lcykpCisKKyAgICAgICAgaWYgaGFzX2xpYnMgYW5kIG5vdCBoYXNfYmlucyBhbmQgc29uYW1lOgorICAgICAgICAgICAgc29uYW1lX3Jlc3VsdCA9IHNvY3J1bmNoKHNvbmFtZSkKKyAgICAgICAgICAgIGlmIHNvbmFtZV9yZXN1bHQ6CisgICAgICAgICAgICAgICAgKHBrZ25hbWUsIGRldm5hbWUpID0gc29uYW1lX3Jlc3VsdAorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQuZ2V0VmFyKCdQS0dfJyArIHBrZywgRmFsc2UpIG9yIGQuZ2V0VmFyKCdERUJJQU5fTk9BVVRPTkFNRV8nICsgcGtnLCBGYWxzZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3Jwcm92aWRlcyhwa2csIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBkZWJpYW5fcG4gPSBkLmdldFZhcignREVCSUFOTkFNRV8nICsgcGtnLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGViaWFuX3BuOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gZGViaWFuX3BuCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcGtnID09IG9yaWdfcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gcGtnbmFtZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gcGtnLnJlcGxhY2Uob3JpZ19wa2csIGRldm5hbWUsIDEpCisgICAgICAgICAgICAgICAgICAgIG1scHJlPWQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG1scHJlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3BrZy5maW5kKG1scHJlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IG1scHJlICsgbmV3cGtnCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld3BrZyAhPSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignUEtHXycgKyBwa2csIG5ld3BrZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMocGtnLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkX3Jwcm92aWRlcyhvcmlnX3BrZywgZCkKKworICAgICMgcmV2ZXJzZWQgc29ydCBpcyBuZWVkZWQgd2hlbiBzb21lIHBhY2thZ2UgaXMgc3Vic3RyaW5nIG9mIGFub3RoZXIKKyAgICAjIGllIGluIG5jdXJzZXMgd2UgZ2V0IHdpdGhvdXQgcmV2ZXJzZSBzb3J0OiAKKyAgICAjIERFQlVHOiBMSUJOQU1FUzogcGtnbmFtZSBsaWJ0aWM1IGRldm5hbWUgbGlidGljIHBrZyBuY3Vyc2VzLWxpYnRpYyBvcmlnX3BrZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4gTm9uZSBuZXdwa2cgbGlidGljNQorICAgICMgYW5kIGxhdGVyCisgICAgIyBERUJVRzogTElCTkFNRVM6IHBrZ25hbWUgbGlidGljNSBkZXZuYW1lIGxpYnRpYyBwa2cgbmN1cnNlcy1saWJ0aWN3IG9yaWdfcGtnIG5jdXJzZXMtbGlidGljIGRlYmlhbl9wbiBOb25lIG5ld3BrZyBsaWJ0aWN3CisgICAgIyBzbyB3ZSBuZWVkIHRvIGhhbmRsZSBuY3Vyc2VzLWxpYnRpY3ctPmxpYnRpY3c1IGJlZm9yZSBuY3Vyc2VzLWxpYnRpYy0+bGlidGljNQorICAgIGZvciBwa2cgaW4gc29ydGVkKChkLmdldFZhcignQVVUT19MSUJOQU1FX1BLR1MnLCBUcnVlKSBvciAiIikuc3BsaXQoKSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgYXV0b19saWJuYW1lKHBhY2thZ2VzLCBwa2cpCit9CisKK0VYUE9SVF9GVU5DVElPTlMgcGFja2FnZV9uYW1lX2hvb2sKKworREVCSUFOX05BTUVTID0gIjEiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGY1ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2RlcGxveS5iYmNsYXNzCkBAIC0wLDAgKzEsMTAgQEAKK0RFUExPWURJUiA9ICIke1dPUktESVJ9L2RlcGxveS0ke1BOfSIKK1NTVEFURVRBU0tTICs9ICJkb19kZXBsb3kiCitkb19kZXBsb3lbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtERVBMT1lESVJ9IgorZG9fZGVwbG95W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfSU1BR0V9IgorCitweXRob24gZG9fZGVwbG95X3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fZGVwbG95X3NldHNjZW5lCitkb19kZXBsb3lbZGlyc10gPSAiJHtERVBMT1lESVJ9ICR7Qn0iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9kZXZzaGVsbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTE0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcwpAQCAtMCwwICsxLDE1NiBAQAoraW5oZXJpdCB0ZXJtaW5hbAorCitERVZTSEVMTCA9ICIke1NIRUxMfSIKKworcHl0aG9uIGRvX2RldnNoZWxsICgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoImRvX2RldnNoZWxsIiwgIm1hbnVhbGZha2Vyb290Iik6CisgICAgICAgZC5wcmVwZW5kVmFyKCJERVZTSEVMTCIsICJwc2V1ZG8gIikKKyAgICAgICBmYWtlZW52ID0gZC5nZXRWYXIoIkZBS0VST09URU5WIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgIGZvciBmIGluIGZha2VlbnY6CisgICAgICAgICAgICBrID0gZi5zcGxpdCgiPSIpCisgICAgICAgICAgICBkLnNldFZhcihrWzBdLCBrWzFdKSAgICAgICAgICAgCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiT0VfVEVSTUlOQUxfRVhQT1JUUyIsICIgIiArIGtbMF0pCisgICAgICAgZC5kZWxWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJmYWtlcm9vdCIpCisKKyAgICBvZV90ZXJtaW5hbChkLmdldFZhcignREVWU0hFTEwnLCBUcnVlKSwgJ09wZW5FbWJlZGRlZCBEZXZlbG9wZXIgU2hlbGwnLCBkKQorfQorCithZGR0YXNrIGRldnNoZWxsIGFmdGVyIGRvX3BhdGNoCisKKyMgVGhlIGRpcmVjdG9yeSB0aGF0IHRoZSB0ZXJtaW5hbCBzdGFydHMgaW4KK0RFVlNIRUxMX1NUQVJURElSID89ICIke1N9IgorZG9fZGV2c2hlbGxbZGlyc10gPSAiJHtERVZTSEVMTF9TVEFSVERJUn0iCitkb19kZXZzaGVsbFtub3N0YW1wXSA9ICIxIgorCisjIGRldnNoZWxsIGFuZCBmYWtlcm9vdC9wc2V1ZG8gbmVlZCBjYXJlZnVsIGhhbmRsaW5nIHNpbmNlIG9ubHkgdGhlIGZpbmFsCisjIGNvbW1hbmQgc2hvdWxkIHJ1biB1bmRlciBmYWtlcm9vdCBlbXVsYXRpb24sIGFueSBYIGNvbm5lY3Rpb24gc2hvdWxkCisjIGJlIGRvbmUgYXMgdGhlIG5vcm1hbCB1c2VyLiBXZSB0aGVyZm9yZSBjYXJlZnVsbHkgY29uc3RydWN0IHRoZSBlbnZpb25tZW50CisjIG1hbnVhbGx5CitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyRmxhZygiZG9fZGV2c2hlbGwiLCAiZmFrZXJvb3QiKToKKyAgICAgICAjIFdlIG5lZWQgdG8gc2lnbmFsIG91ciBjb2RlIHRoYXQgd2Ugd2FudCBmYWtlcm9vdCBob3dldmVyIHdlCisgICAgICAgIyBjYW4ndCBtYW5pcHVsYXRlIHRoZSBlbnZpcm9ubWVudCBhbmQgdmFyaWFibGVzIGhlcmUgeWV0IChzZWUgWU9DVE8gIzQ3OTUpCisgICAgICAgZC5zZXRWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJtYW51YWxmYWtlcm9vdCIsICIxIikKKyAgICAgICBkLmRlbFZhckZsYWcoImRvX2RldnNoZWxsIiwgImZha2Vyb290IikKK30gCisKK2RlZiBkZXZweXNoZWxsKGQpOgorCisgICAgaW1wb3J0IGNvZGUKKyAgICBpbXBvcnQgc2VsZWN0CisgICAgaW1wb3J0IHNpZ25hbAorICAgIGltcG9ydCB0ZXJtaW9zCisKKyAgICBtLCBzID0gb3Mub3BlbnB0eSgpCisgICAgc25hbWUgPSBvcy50dHluYW1lKHMpCisKKyAgICBkZWYgbm9lY2hvaWNhbm9uKGZkKToKKyAgICAgICAgb2xkID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCisgICAgICAgIG9sZFszXSA9IG9sZFszXSAmfiB0ZXJtaW9zLkVDSE8gJn4gdGVybWlvcy5JQ0FOT04KKyAgICAgICAgIyAmfiB0ZXJtaW9zLklTSUcKKyAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQURSQUlOLCBvbGQpCisgICAgCisgICAgIyBObyBlY2hvIG9yIGJ1ZmZlcmluZyBvdmVyIHRoZSBwdHkKKyAgICBub2VjaG9pY2Fub24ocykKKworICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGlmIHBpZDoKKyAgICAgICAgb3MuY2xvc2UobSkKKyAgICAgICAgb2VfdGVybWluYWwoIm9lcHlkZXZzaGVsbC1pbnRlcm5hbC5weSAlcyAlZCIgJSAoc25hbWUsIHBpZCksICdPcGVuRW1iZWRkZWQgRGV2ZWxvcGVyIFB5U2hlbGwnLCBkKQorICAgICAgICBvcy5fZXhpdCgwKQorICAgIGVsc2U6CisgICAgICAgIG9zLmNsb3NlKHMpCisKKyAgICAgICAgb3MuZHVwMihtLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgb3MuZHVwMihtLCBzeXMuc3RkZXJyLmZpbGVubygpKQorCisgICAgICAgIHN5cy5zdGRvdXQgPSBvcy5mZG9wZW4oc3lzLnN0ZG91dC5maWxlbm8oKSwgJ3cnLCAwKQorICAgICAgICBzeXMuc3RkaW4gPSBvcy5mZG9wZW4oc3lzLnN0ZGluLmZpbGVubygpLCAncicsIDApCisKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzeXMuc3Rkb3V0KQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHN5cy5zdGRlcnIpCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc3lzLnN0ZGluKQorCisgICAgICAgIF9jb250ZXh0ID0geworICAgICAgICAgICAgIm9zIjogb3MsCisgICAgICAgICAgICAiYmIiOiBiYiwKKyAgICAgICAgICAgICJ0aW1lIjogdGltZSwKKyAgICAgICAgICAgICJkIjogZCwKKyAgICAgICAgfQorCisgICAgICAgIHBzMSA9ICJweWRldnNoZWxsPiAiCisgICAgICAgIHBzMiA9ICIuLi4gIgorICAgICAgICBidWYgPSBbXQorICAgICAgICBtb3JlID0gRmFsc2UKKworICAgICAgICBpID0gY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVyKGxvY2Fscz1fY29udGV4dCkKKyAgICAgICAgcHJpbnQoIk9FIFB5U2hlbGwgKFBOID0gJXMpXG4iICUgZC5nZXRWYXIoIlBOIiwgVHJ1ZSkpCisKKyAgICAgICAgZGVmIHByb21wdChtb3JlKToKKyAgICAgICAgICAgIGlmIG1vcmU6CisgICAgICAgICAgICAgICAgcHJvbXB0ID0gcHMyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb21wdCA9IHBzMQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHQpCisKKyAgICAgICAgIyBSZXN0b3JlIEN0cmwrQyBzaW5jZSBiaXRiYWtlIG1hc2tzIHRoaXMKKyAgICAgICAgZGVmIHNpZ25hbF9oYW5kbGVyKHNpZ25hbCwgZnJhbWUpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWxfaGFuZGxlcikKKworICAgICAgICBjaGlsZCA9IE5vbmUKKworICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIChyLCBfLCBfKSA9IHNlbGVjdC5zZWxlY3QoW3N5cy5zdGRpbl0sIFtdLCBbXSwgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdChtb3JlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAxMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gNToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaW50KGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJcbiIuam9pbihidWYpCisgICAgICAgICAgICAgICAgICAgIG1vcmUgPSBpLnJ1bnNvdXJjZShzb3VyY2UsICI8cHlzaGVsbD4iKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbW9yZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgICAgICAgICAgICAgIHByb21wdChtb3JlKQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIGkud3JpdGUoIlxuS2V5Ym9hcmRJbnRlcnJ1cHRcbiIpCisgICAgICAgICAgICAgICAgYnVmID0gW10KKyAgICAgICAgICAgICAgICBtb3JlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgICAgICMgRWFzaWVzdCB3YXkgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZXhpdHMKKyAgICAgICAgICAgICAgICBvcy5raWxsKGNoaWxkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICAgICBicmVhaworCitweXRob24gZG9fZGV2cHlzaGVsbCgpIHsKKyAgICBpbXBvcnQgc2lnbmFsCisKKyAgICB0cnk6CisgICAgICAgIGRldnB5c2hlbGwoZCkKKyAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgIyBTdG9wIHRoZSBTSUdURVJNIGFib3ZlIGNhdXNpbmcgYW4gZXJyb3IgZXhpdCBjb2RlICAgIAorICAgICAgICByZXR1cm4KKyAgICBmaW5hbGx5OgorICAgICAgICByZXR1cm4KK30KK2FkZHRhc2sgZGV2cHlzaGVsbCBhZnRlciBkb19wYXRjaAorCitkb19kZXZweXNoZWxsW25vc3RhbXBdID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5MWRiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0cm9fZmVhdHVyZXNfY2hlY2suYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjIEFsbG93IGNoZWNraW5nIG9mIHJlcXVpcmVkIGFuZCBjb25mbGljdGluZyBESVNUUk9fRkVBVFVSRVMKKyMKKyMgQU5ZX09GX0RJU1RST19GRUFUVVJFUzogICBlbnN1cmUgYXQgbGVhc3Qgb25lIGl0ZW0gb24gdGhpcyBsaXN0IGlzIGluY2x1ZGVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRElTVFJPX0ZFQVRVUkVTLgorIyBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVM6IGVuc3VyZSBldmVyeSBpdGVtIG9uIHRoaXMgbGlzdCBpcyBpbmNsdWRlZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERJU1RST19GRUFUVVJFUy4KKyMgQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTOiBlbnN1cmUgbm8gaXRlbSBpbiB0aGlzIGxpc3QgaXMgaW5jbHVkZWQgaW4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVMuCisjCisjIENvcHlyaWdodCAyMDEzIChDKSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKworcHl0aG9uICgpIHsKKyAgICAjIEFzc3VtZSBhdCBsZWFzdCBvbmUgdmFyIGlzIHNldC4KKyAgICBkaXN0cm9fZmVhdHVyZXMgPSAoZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzID0gZC5nZXRWYXIoJ0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMnLCBUcnVlKQorICAgIGlmIGFueV9vZl9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIGFueV9vZl9kaXN0cm9fZmVhdHVyZXMgPSBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzLnNwbGl0KCkKKyAgICAgICAgaWYgc2V0LmlzZGlzam9pbnQoc2V0KGFueV9vZl9kaXN0cm9fZmVhdHVyZXMpLHNldChkaXN0cm9fZmVhdHVyZXMpKToKKyAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJvbmUgb2YgJyVzJyBuZWVkcyB0byBiZSBpbiBESVNUUk9fRkVBVFVSRVMiICUgYW55X29mX2Rpc3Ryb19mZWF0dXJlcykKKworICAgIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMnLCBUcnVlKQorICAgIGlmIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgcmVxdWlyZWRfZGlzdHJvX2ZlYXR1cmVzID0gcmVxdWlyZWRfZGlzdHJvX2ZlYXR1cmVzLnNwbGl0KCkKKyAgICAgICAgZm9yIGYgaW4gcmVxdWlyZWRfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgaWYgZiBpbiBkaXN0cm9fZmVhdHVyZXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIm1pc3NpbmcgcmVxdWlyZWQgZGlzdHJvIGZlYXR1cmUgJyVzJyAobm90IGluIERJU1RST19GRUFUVVJFUykiICUgZikKKworICAgIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdDT05GTElDVF9ESVNUUk9fRkVBVFVSRVMnLCBUcnVlKQorICAgIGlmIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgY29uZmxpY3RfZGlzdHJvX2ZlYXR1cmVzID0gY29uZmxpY3RfZGlzdHJvX2ZlYXR1cmVzLnNwbGl0KCkKKyAgICAgICAgZm9yIGYgaW4gY29uZmxpY3RfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgaWYgZiBpbiBkaXN0cm9fZmVhdHVyZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImNvbmZsaWN0aW5nIGRpc3RybyBmZWF0dXJlICclcycgKGluIERJU1RST19GRUFUVVJFUykiICUgZikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNjhlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzCkBAIC0wLDAgKzEsNDc0IEBACitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jCisKK2FkZGhhbmRsZXIgZGlzdHJvX2V2ZW50aGFuZGxlcgorZGlzdHJvX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK3B5dGhvbiBkaXN0cm9fZXZlbnRoYW5kbGVyKCkgeworICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICBpbXBvcnQgY3N2CisgICAgbG9nZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJkaXN0cm9kYXRhLmNzdiIpCisKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmKQorICAgICAgICB3cml0ZXIud3JpdGVyb3coWydQYWNrYWdlJywgJ0Rlc2NyaXB0aW9uJywgJ093bmVyJywgJ0xpY2Vuc2UnLCAKKyAgICAgICAgICAgICdWZXJNYXRjaCcsICdWZXJzaW9uJywgJ1Vwc3RyZWFtJywgJ1JlYXNvbicsICdSZWNpcGUgU3RhdHVzJywKKyAgICAgICAgICAgICdEaXN0cm8gMScsICdEaXN0cm8gMicsICdEaXN0cm8gMyddKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgZGlzdHJvZGF0YV9ucAorZG9fZGlzdHJvZGF0YV9ucFtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2Rpc3Ryb2RhdGFfbnAoKSB7CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgTmFtZTogJXMiICUgcG4pCisKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkaXN0X2NoZWNrCisgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgICAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgICAgIGRhdGV0aW1lID0gbG9jYWxkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBkaXN0X2NoZWNrLnVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSkKKworICAgICAgICBpZiBwbi5maW5kKCItbmF0aXZlIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zc3NkayIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3NzZGsiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4ucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKworICAgICAgICBpZiBwbi5maW5kKCItaW5pdGlhbCIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgICAgICBiYi5ub3RlKCJpbml0aWFsIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gbG9jYWxkYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwY3VydmVyID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGRlc2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCcsJywnJykKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJ1xuJywnJykKKworICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHBsaWNlbnNlID0gbG9jYWxkYXRhLmdldFZhcignTElDRU5TRScsIFRydWUpLnJlcGxhY2UoJywnLCdfJykKKworICAgICAgICByc3RhdHVzID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX0NPTE9SJywgVHJ1ZSkKKyAgICAgICAgaWYgcnN0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByc3RhdHVzID0gcnN0YXR1cy5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBwdXB2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIHBjdXJ2ZXIgPT0gcHVwdmVyOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIxIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIwIgorICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTicsIFRydWUpCisgICAgICAgIGlmIG5vdXBkYXRlX3JlYXNvbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIG5vdXBkYXRlPSIwIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vdXBkYXRlPSIxIgorICAgICAgICAgICAgICAgIG5vdXBkYXRlX3JlYXNvbiA9IG5vdXBkYXRlX3JlYXNvbi5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBtYWludGFpbmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX01BSU5UQUlORVInLCBUcnVlKQorICAgICAgICBybHJkID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX1VQU1RSRUFNX0RBVEUnLCBUcnVlKQorICAgICAgICByZXN1bHQgPSBkaXN0X2NoZWNrLmNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpciwgbG9jYWxkYXRhKQorCisgICAgICAgIGJiLm5vdGUoIkRJU1RSTzogJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXNcbiIgJSBcCisgICAgICAgICAgICAgICAgICAocG5hbWUsIHBkZXNjLCBtYWludGFpbmVyLCBwbGljZW5zZSwgdmVybWF0Y2gsIHBjdXJ2ZXIsIHB1cHZlciwgbm91cGRhdGVfcmVhc29uLCByc3RhdHVzKSkKKyAgICAgICAgbGluZSA9IHBuCisgICAgICAgIGZvciBpIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgIiwiICsgaQorICAgICAgICBiYi5ub3RlKCIlc1xuIiAlIGxpbmUpCit9CisKK2FkZHRhc2sgZGlzdHJvZGF0YQorZG9fZGlzdHJvZGF0YVtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2Rpc3Ryb2RhdGEoKSB7CisgICAgICAgIGltcG9ydCBjc3YKKyAgICAgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGxvZ3BhdGgpCisgICAgICAgIGxvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImRpc3Ryb2RhdGEuY3N2IikKKworICAgICAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRpc3RfY2hlY2sKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgICAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgICAgIGRhdGV0aW1lID0gbG9jYWxkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBkaXN0X2NoZWNrLnVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSkKKworICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgTmFtZTogJXMiICUgcG4pCisKKyAgICAgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItbmF0aXZlIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZSBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5yZXBsYWNlKCJuYXRpdmVzZGstIiwgIiIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmVTREsgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWQgKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItY3Jvc3MiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWNyb3NzIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3Nzc2RrIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zc3NkayIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1pbml0aWFsIikKKyAgICAgICAgICAgIGJiLm5vdGUoImluaXRpYWwgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICAiIiJnZW5lcmF0ZSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gLmJiIGZpbGUiIiIKKyAgICAgICAgcG5hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBjdXJ2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgICAgIHBkZXNjID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKQorICAgICAgICBpZiBwZGVzYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJywnLCcnKQorICAgICAgICAgICAgICAgIHBkZXNjID0gcGRlc2MucmVwbGFjZSgnXG4nLCcnKQorCisgICAgICAgIHBncnAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGxpY2Vuc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkucmVwbGFjZSgnLCcsJ18nKQorCisgICAgICAgIHJzdGF0dXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfQ09MT1InLCBUcnVlKQorICAgICAgICBpZiByc3RhdHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJzdGF0dXMgPSByc3RhdHVzLnJlcGxhY2UoJywnLCcnKQorCisgICAgICAgIHB1cHZlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGN1cnZlciA9PSBwdXB2ZXI6CisgICAgICAgICAgICAgICAgdmVybWF0Y2g9IjEiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmVybWF0Y2g9IjAiCisKKyAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBpZiBub3VwZGF0ZV9yZWFzb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMSIKKyAgICAgICAgICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBub3VwZGF0ZV9yZWFzb24ucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICAgICAgcmxyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9EQVRFJywgVHJ1ZSkKKyAgICAgICAgIyBkbyB0aGUgY29tcGFyaXNvbgorICAgICAgICByZXN1bHQgPSBkaXN0X2NoZWNrLmNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpciwgbG9jYWxkYXRhKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHJvdyA9IFtwbmFtZSwgcGRlc2MsIG1haW50YWluZXIsIHBsaWNlbnNlLCB2ZXJtYXRjaCwgcGN1cnZlciwgcHVwdmVyLCBub3VwZGF0ZV9yZWFzb24sIHJzdGF0dXNdCisgICAgICAgICAgICByb3cuZXh0ZW5kKHJlc3VsdCkKKworICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHJvdykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCithZGR0YXNrIGRpc3Ryb2RhdGFhbGwgYWZ0ZXIgZG9fZGlzdHJvZGF0YQorZG9fZGlzdHJvZGF0YWFsbFtyZWNyZGVwdGFza10gPSAiZG9fZGlzdHJvZGF0YWFsbCBkb19kaXN0cm9kYXRhIgorZG9fZGlzdHJvZGF0YWFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGlzdHJvZGF0YWFsbFtub3N0YW1wXSA9ICIxIgorZG9fZGlzdHJvZGF0YWFsbCgpIHsKKyAgICAgICAgOgorfQorCithZGRoYW5kbGVyIGNoZWNrcGtnX2V2ZW50aGFuZGxlcgorY2hlY2twa2dfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIgorcHl0aG9uIGNoZWNrcGtnX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgY3N2CisKKyAgICBkZWYgcGFyc2VfY3N2X2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICBwYWNrYWdlX2RpY3QgPSB7fQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIGZvciByb3cgaW4gcmVhZGVyOgorICAgICAgICAgICAgICAgIHBuID0gcm93WzBdCisKKyAgICAgICAgICAgICAgICBpZiByZWFkZXIubGluZV9udW0gPT0gMToKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gcm93CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3QgcG4gaW4gcGFja2FnZV9kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9kaWN0W3BuXSA9IHJvdworICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGhlYWRlcikKKyAgICAgICAgICAgIGZvciBwbiBpbiBwYWNrYWdlX2RpY3Qua2V5cygpOgorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhwYWNrYWdlX2RpY3RbcG5dKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZGVsIHBhY2thZ2VfZGljdAorCisgICAgaWYgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiQnVpbGRTdGFydGVkIjoKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgICAgICBsb2dmaWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgImNoZWNrcGtnLmNzdiIpCisKKyAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIGhlYWRlcnMgPSBbJ1BhY2thZ2UnLCAnVmVyc2lvbicsICdVcHZlcicsICdMaWNlbnNlJywgJ1NlY3Rpb24nLAorICAgICAgICAgICAgICAgICdIb21lJywgJ1JlbGVhc2UnLCAnRGVwZW5kcycsICdCdWdUcmFja2VyJywgJ1BFJywgJ0Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAnU3RhdHVzJywgJ1RyYWNraW5nJywgJ1VSSScsICdNQUlOVEFJTkVSJywgJ05vVXBSZWFzb24nXQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGhlYWRlcnMpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICBlbGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIkJ1aWxkQ29tcGxldGVkIjoKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGZpbGVuYW1lID0gInRtcC9sb2cvY2hlY2twa2cuY3N2IgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiVmaWxlbmFtZSkKKyAgICAgICAgICAgIHBhcnNlX2Nzdl9maWxlKGZpbGVuYW1lKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICByZXR1cm4KK30KKworYWRkdGFzayBjaGVja3BrZworZG9fY2hlY2twa2dbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19jaGVja3BrZygpIHsKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGltcG9ydCBjc3YKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICAgICAgZnJvbSBiYi51dGlscyBpbXBvcnQgdmVyY21wX3N0cmluZworICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvciwgTm9NZXRob2RFcnJvciwgZGVjb2RldXJsCisKKyAgICAgICAgIiIiZmlyc3QgY2hlY2sgd2hldGhlciBhIHVyaSBpcyBwcm92aWRlZCIiIgorICAgICAgICBzcmNfdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICAgICBpZiBub3Qgc3JjX3VyaToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdXJpX3R5cGUsIF8sIF8sIF8sIF8sIF8gPSBkZWNvZGV1cmwoc3JjX3VyaSkKKworICAgICAgICAiIiJpbml0aWFsaXplIGxvZyBmaWxlcy4iIiIKKyAgICAgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGxvZ3BhdGgpCisgICAgICAgIGxvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImNoZWNrcGtnLmNzdiIpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICBpZiBwbmFtZS5maW5kKCItbmF0aXZlIikgIT0gLTE6CisgICAgICAgICAgICBpZiBkLmdldFZhcignQkJDTEFTU0VYVEVORCcsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmUgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbmFtZS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBpZiBkLmdldFZhcignQkJDTEFTU0VYVEVORCcsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5yZXBsYWNlKCJuYXRpdmVzZGstIiwgIiIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmVTREsgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWQgKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbmFtZS5maW5kKCItY3Jvc3MiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5zcGxpdCgiLWNyb3NzIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICAgICAgYmIubm90ZSgiaW5pdGlhbCBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIHBkZXNjID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKQorICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHB2ZXJzaW9uID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwbGljZW5zZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgICAgICBwc2VjdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwaG9tZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0hPTUVQQUdFJywgVHJ1ZSkKKyAgICAgICAgcHJlbGVhc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQUicsIFRydWUpCisgICAgICAgIHBkZXBlbmRzID0gbG9jYWxkYXRhLmdldFZhcignREVQRU5EUycsIFRydWUpCisgICAgICAgIHBidWd0cmFja2VyID0gbG9jYWxkYXRhLmdldFZhcignQlVHVFJBQ0tFUicsIFRydWUpCisgICAgICAgIHBwZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BFJywgVHJ1ZSkKKyAgICAgICAgcHNyY3VyaSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICAgICBtYWludGFpbmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX01BSU5UQUlORVInLCBUcnVlKQorCisgICAgICAgICIiIiBHZXQgdXBzdHJlYW0gdmVyc2lvbiB2ZXJzaW9uICIiIgorICAgICAgICBwdXB2ZXIgPSAiIgorICAgICAgICBwc3RhdHVzID0gIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1diA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfdXBzdHJlYW1fdmVyc2lvbihsb2NhbGRhdGEpCisKKyAgICAgICAgICAgIHB1cHZlciA9IHV2Wyd2ZXJzaW9uJ10KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgZSBpcyBGZXRjaEVycm9yOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiRXJyQWNjZXNzIgorICAgICAgICAgICAgZWxpZiBlIGlzIE5vTWV0aG9kRXJyb3I6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJFcnJVbnN1cHBvcnRlZFByb3RvIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIkVyclVua25vd24iCisKKyAgICAgICAgIiIiU2V0IHVwc3RyZWFtIHZlcnNpb24gc3RhdHVzIiIiCisgICAgICAgIGlmIG5vdCBwdXB2ZXI6CisgICAgICAgICAgICBwdXB2ZXIgPSAiTi9BIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHYsIF8sIF8gPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3B2X3dpdGhvdXRfc3JjcHYocHZlcnNpb24sIHVyaV90eXBlKQorICAgICAgICAgICAgdXB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB1cHZlciwgdXJpX3R5cGUpCisKKyAgICAgICAgICAgIGNtcCA9IHZlcmNtcF9zdHJpbmcocHYsIHVwdikKKyAgICAgICAgICAgIGlmIGNtcCA9PSAtMToKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIlVQREFURSIKKyAgICAgICAgICAgIGVsaWYgY21wID09IDA6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJNQVRDSCIKKworICAgICAgICBwc3JjdXJpID0gcHNyY3VyaS5zcGxpdCgpWzBdCisgICAgICAgIHBkZXBlbmRzID0gIiIuam9pbihwZGVwZW5kcy5zcGxpdCgiXHQiKSkKKyAgICAgICAgcGRlc2MgPSAiIi5qb2luKHBkZXNjLnNwbGl0KCJcdCIpKQorICAgICAgICBub191cGdyX3JlYXNvbiA9IGQuZ2V0VmFyKCdSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTicsIFRydWUpCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coW3BuYW1lLCBwdmVyc2lvbiwgcHVwdmVyLCBwbGljZW5zZSwgcHNlY3Rpb24sIHBob21lLCAKKyAgICAgICAgICAgICAgICBwcmVsZWFzZSwgcGRlcGVuZHMsIHBidWd0cmFja2VyLCBwcGUsIHBkZXNjLCBwc3RhdHVzLCBwdXB2ZXIsCisgICAgICAgICAgICAgICAgcHNyY3VyaSwgbWFpbnRhaW5lciwgbm9fdXBncl9yZWFzb25dKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCit9CisKK2FkZHRhc2sgY2hlY2twa2dhbGwgYWZ0ZXIgZG9fY2hlY2twa2cKK2RvX2NoZWNrcGtnYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19jaGVja3BrZ2FsbCBkb19jaGVja3BrZyIKK2RvX2NoZWNrcGtnYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19jaGVja3BrZ2FsbFtub3N0YW1wXSA9ICIxIgorZG9fY2hlY2twa2dhbGwoKSB7CisgICAgICAgIDoKK30KKworYWRkaGFuZGxlciBkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyCitkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorcHl0aG9uIGRpc3Ryb19jaGVja19ldmVudGhhbmRsZXIoKSB7CisgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIHJlc3VsdF9maWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgImRpc3Ryb2NoZWNrLmNzdiIpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgZGlzdHJvX2NoZWNrCitkb19kaXN0cm9fY2hlY2tbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9fY2hlY2soKSB7CisgICAgIiIiY2hlY2tzIGlmIHRoZSBwYWNrYWdlIGlzIHByZXNlbnQgaW4gb3RoZXIgcHVibGljIExpbnV4IGRpc3Ryb3MiIiIKKyAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRjCisgICAgaW1wb3J0IHNodXRpbAorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLGQpOgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIGRpc3Ryb19jaGVja19kaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAiZGlzdHJvX2NoZWNrIikKKyAgICBsb2dwYXRoID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgIHJlc3VsdF9maWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJkaXN0cm9jaGVjay5jc3YiKQorICAgIGRhdGV0aW1lID0gbG9jYWxkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgIGRjLnVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSkKKworICAgICMgZG8gdGhlIGNvbXBhcmlzb24KKyAgICByZXN1bHQgPSBkYy5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGQpCisKKyAgICAjIHNhdmUgdGhlIHJlc3VsdHMKKyAgICBkYy5zYXZlX2Rpc3Ryb19jaGVja19yZXN1bHQocmVzdWx0LCBkYXRldGltZSwgcmVzdWx0X2ZpbGUsIGQpCit9CisKK2FkZHRhc2sgZGlzdHJvX2NoZWNrYWxsIGFmdGVyIGRvX2Rpc3Ryb19jaGVjaworZG9fZGlzdHJvX2NoZWNrYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19kaXN0cm9fY2hlY2thbGwgZG9fZGlzdHJvX2NoZWNrIgorZG9fZGlzdHJvX2NoZWNrYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19kaXN0cm9fY2hlY2thbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2Rpc3Ryb19jaGVja2FsbCgpIHsKKyAgICAgICAgOgorfQorIworI0NoZWNrIE1pc3NpbmcgTGljZW5zZSBUZXh0LgorI1VzZSB0aGlzIHRhc2sgdG8gZ2VuZXJhdGUgdGhlIG1pc3NpbmcgbGljZW5zZSB0ZXh0IGRhdGEgZm9yIHBrZy1yZXBvcnQgc3lzdGVtLAorI3RoZW4gd2UgY2FuIHNlYXJjaCB0aG9zZSByZWNpcGVzIHdoaWNoIGxpY2Vuc2UgdGV4dCBpc24ndCBleHNpdCBpbiBjb21tb24tbGljZW5zZXMgZGlyZWN0b3J5CisjCithZGRoYW5kbGVyIGNoZWNrbGljZW5zZV9ldmVudGhhbmRsZXIKK2NoZWNrbGljZW5zZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCitweXRob24gY2hlY2tsaWNlbnNlX2V2ZW50aGFuZGxlcigpIHsKKyAgICAiIiJpbml0aWFsaXplIGxvZyBmaWxlcy4iIiIKKyAgICBpbXBvcnQgY3N2CisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIGxvZ2ZpbGUgPSBkYy5jcmVhdGVfbG9nX2ZpbGUoZS5kYXRhLCAibWlzc2luZ2xpY2Vuc2UuY3N2IikKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgd3JpdGVyLndyaXRlcm93KFsnUGFja2FnZScsICdMaWNlbnNlJywgJ01pc3NpbmdMaWNlbnNlJ10pCisgICAgICAgIGYuY2xvc2UoKQorICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2tsaWNlbnNlCitkb19jaGVja2xpY2Vuc2Vbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19jaGVja2xpY2Vuc2UoKSB7CisgICAgaW1wb3J0IGNzdgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBsb2dwYXRoID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJtaXNzaW5nbGljZW5zZS5jc3YiKQorICAgIGdlbmVyaWNfZGlyZWN0b3J5ID0gZC5nZXRWYXIoJ0NPTU1PTl9MSUNFTlNFX0RJUicsIFRydWUpCisgICAgbGljZW5zZV90eXBlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBmb3IgbGljZW5zZV90eXBlIGluICgobGljZW5zZV90eXBlcy5yZXBsYWNlKCcrJywgJycpLnJlcGxhY2UoJ3wnLCAnJicpCisgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcoJywgJycpLnJlcGxhY2UoJyknLCAnJykucmVwbGFjZSgnOycsICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcnKS5yZXBsYWNlKCIgIiwgIiIpLnNwbGl0KCImIikpKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZW5lcmljX2RpcmVjdG9yeSwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFtwbiwgbGljZW5zZV90eXBlcywgbGljZW5zZV90eXBlXSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2tsaWNlbnNlYWxsIGFmdGVyIGRvX2NoZWNrbGljZW5zZQorZG9fY2hlY2tsaWNlbnNlYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19jaGVja2xpY2Vuc2VhbGwgZG9fY2hlY2tsaWNlbnNlIgorZG9fY2hlY2tsaWNlbnNlYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19jaGVja2xpY2Vuc2VhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2NoZWNrbGljZW5zZWFsbCgpIHsKKyAgICAgICAgOgorfQorCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExOGU4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNCBAQAorREVQRU5EUyAgKz0gIiR7QFsiJHtQWVRIT05fUE59LW5hdGl2ZSAke1BZVEhPTl9QTn0iLCAiIl1bKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpID09ICcnKV19IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QFsnJywgJyR7UFlUSE9OX1BOfS1jb3JlJ11bJyR7Q0xBU1NPVkVSUklERX0nID09ICdjbGFzcy10YXJnZXQnXX0iCisKK2luaGVyaXQgZGlzdHV0aWxzLWNvbW1vbi1iYXNlIHB5dGhvbm5hdGl2ZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzI3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWNvbW1vbi1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyNCBAQAoraW5oZXJpdCBweXRob24tZGlyCisKK0VYVFJBX09FTUFLRSA9ICIiCisKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK1BBQ0tBR0VTID0gIiR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZGJnICR7UE59LWRvYyAke1BOfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qICR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9LyoiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmEgXAorIgorRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7ZGF0YWRpcn0vcGtnY29uZmlnIFwKKyAgJHtsaWJkaXJ9L3BrZ2NvbmZpZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoubGEgXAorIgorRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ly5kZWJ1ZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyovLmRlYnVnIFwKKyAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi8qLy5kZWJ1ZyBcCisiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5Y2I5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtbmF0aXZlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKK2luaGVyaXQgZGlzdHV0aWxzLWNvbW1vbi1iYXNlCisKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUiLCAiIl1bKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpID09ICcnKV19IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzQ1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLXRvb2xzLmJiY2xhc3MKQEAgLTAsMCArMSw3NyBAQAorRElTVFVUSUxTX0JVSUxEX0FSR1MgPz0gIiIKK0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1MgPz0gIi0taW5zdGFsbC1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSIKK0RJU1RVVElMU19TVEFHRV9BTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtTVEFHSU5HX0RBVEFESVJ9IgorRElTVFVUSUxTX0lOU1RBTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtEfS8ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7RH0vJHtkYXRhZGlyfSIKKworZGlzdHV0aWxzX2RvX2NvbXBpbGUoKSB7CisgICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGRfZXh0IGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfaGVhZGVycygpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgJHtESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK2Rpc3R1dGlsc19zdGFnZV9hbGwoKSB7CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAke0RJU1RVVElMU19TVEFHRV9BTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfZG9faW5zdGFsbCgpIHsKKyAgICAgICAgZWNobyAiQmVnaW5uaW5nICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBlY2hvICJTdGVwIDIgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0vJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgLS1pbnN0YWxsLWxpYj0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9ICR7RElTVFVUSUxTX0lOU1RBTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKKworICAgICAgICBlY2hvICJTdGVwIDMgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgICMgc3VwcG9ydCBmaWxlbmFtZXMgd2l0aCAqc3BhY2VzKgorICAgICAgICBmaW5kICR7RH0gLW5hbWUgIioucHkiIC1wcmludDAgfCB3aGlsZSByZWFkIC1kICQnXDAnIGkgOyBkbyBcCisgICAgICAgICAgICBzZWQgLWkgLWUgczoke0R9OjpnICRpCisgICAgICAgIGRvbmUKKworICAgICAgICBlY2hvICJTdGVwIDQgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7YmluZGlyfSA7IHRoZW4JCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgZWNobyAiU3RlcCA0IG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke3NiaW5kaXJ9OyB0aGVuCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtzYmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGVjaG8gIlN0ZXAgNSBvZiAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgCisgICAgICAgICMKKyAgICAgICAgIyBGSVhNRTogQmFuZGFpZCBhZ2FpbnN0IHdyb25nIGRhdGFkaXIgY29tcHV0YXRpb24KKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2RhdGFkaXJ9L3NoYXJlOyB0aGVuCisgICAgICAgICAgICBtdiAtZiAke0R9JHtkYXRhZGlyfS9zaGFyZS8qICR7RH0ke2RhdGFkaXJ9LworICAgICAgICBmaQorfQorCisjRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwNjcxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMuYmJjbGFzcwpAQCAtMCwwICsxLDg2IEBACitpbmhlcml0IGRpc3R1dGlscy1iYXNlCisKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsc19kb19jb21waWxlKCkgeworICAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfaGVhZGVycygpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgJHtESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK2Rpc3R1dGlsc19zdGFnZV9hbGwoKSB7CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAke0RJU1RVVElMU19TVEFHRV9BTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIFBZVEhPTlBBVEg9JHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgIyBzdXBwb3J0IGZpbGVuYW1lcyB3aXRoICpzcGFjZXMqCisgICAgICAgICMgb25seSBtb2RpZnkgZmlsZSBpZiBpdCBjb250YWlucyBwYXRoICBhbmQgcmVjb21waWxlIGl0CisgICAgICAgIGZpbmQgJHtEfSAtbmFtZSAiKi5weSIgLWV4ZWMgZ3JlcCAtcSAke0R9IHt9IFw7IC1leGVjIHNlZCAtaSAtZSBzOiR7RH06Omcge30gXDsgLWV4ZWMgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIC1tY29tcGlsZWFsbCB7fSBcOworCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7YmluZGlyfSA7IHRoZW4JCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgaWYgWyAke1BOfSAhPSAiJHtCUE59LW5hdGl2ZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIAlzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob246JHtiaW5kaXJ9L2VudlwgcHl0aG9uOmcgJGkKKwkJZmkKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke3NiaW5kaXJ9OyB0aGVuCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtzYmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIGlmIFsgJHtQTn0gIT0gIiR7QlBOfS1uYXRpdmUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAJc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uOiR7YmluZGlyfS9lbnZcIHB5dGhvbjpnICRpCisJCWZpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NpdGUucHkqCisgICAgICAgIAorICAgICAgICAjCisgICAgICAgICMgRklYTUU6IEJhbmRhaWQgYWdhaW5zdCB3cm9uZyBkYXRhZGlyIGNvbXB1dGF0aW9uCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtkYXRhZGlyfS9zaGFyZTsgdGhlbgorICAgICAgICAgICAgbXYgLWYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8KKyAgICAgICAgICAgIHJtZGlyICR7RH0ke2RhdGFkaXJ9L3NoYXJlCisgICAgICAgIGZpCisKKwkjIEZpeCBiYWNrcG9ydCBtb2R1bGVzCisJaWYgdGVzdCAtZSAke1NUQUdJTkdfTElCRElSfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvYmFja3BvcnRzL19faW5pdF9fLnB5ICYmIHRlc3QgLWUgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2JhY2twb3J0cy9fX2luaXRfXy5weTsgdGhlbgorCSAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHk7CisJICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2JhY2twb3J0cy9fX2luaXRfXy5weWM7CisJZmkKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzYWEwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUgJHtQWVRIT05fUE59IiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsICcke1BZVEhPTl9QTn0tY29yZSddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IgorCitQWVRIT05fQkFTRVZFUlNJT04gPSAiMy40IgorUFlUSE9OX0FCSSA9ICJtIgorCitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZSBweXRob24zbmF0aXZlCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1uYXRpdmUtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTcxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1uYXRpdmUtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNCBAQAorUFlUSE9OX0JBU0VWRVJTSU9OID0gIjMuNCIKK1BZVEhPTl9BQkkgPSAibSIKKworaW5oZXJpdCBkaXN0dXRpbHMtbmF0aXZlLWJhc2UKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDllZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzCkBAIC0wLDAgKzEsOTYgQEAKK2luaGVyaXQgZGlzdHV0aWxzMy1iYXNlCisKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfQlVJTERfRVhUX0FSR1MgPz0gIiIKK0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1MgPz0gIi0taW5zdGFsbC1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSIKK0RJU1RVVElMU19TVEFHRV9BTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtTVEFHSU5HX0RBVEFESVJ9IgorRElTVFVUSUxTX0lOU1RBTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtEfS8ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7RH0vJHtkYXRhZGlyfSIKKworZGlzdHV0aWxzM19kb19jb21waWxlKCkgeworICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCisgICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQorICAgICAgICBmaQorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgXAorICAgICAgICBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZF9leHQgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK2Rpc3R1dGlsczNfc3RhZ2VfaGVhZGVycygpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX3N0YWdlX2FsbCgpIHsKKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIFBZVEhPTlBBVEg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAke0RJU1RVVElMU19TVEFHRV9BTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgLS1pbnN0YWxsLWxpYj0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9ICR7RElTVFVUSUxTX0lOU1RBTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKKworICAgICAgICAjIHN1cHBvcnQgZmlsZW5hbWVzIHdpdGggKnNwYWNlcyoKKyAgICAgICAgZmluZCAke0R9IC1uYW1lICIqLnB5IiAtZXhlYyBncmVwIC1xICR7RH0ge30gXDsgLWV4ZWMgc2VkIC1pIC1lIHM6JHtEfTo6ZyB7fSBcOworCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7YmluZGlyfSA7IHRoZW4JCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59OiR7YmluZGlyfS9lbnZcICR7UFlUSE9OX1BOfTpnICRpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLSR7UFlUSE9OX1BOfS8ke1BZVEhPTl9QTn06JHtiaW5kaXJ9L2VudlwgJHtQWVRIT05fUE59OmcgJGkKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vZWFzeS1pbnN0YWxsLnB0aAorICAgICAgICAKKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiBCYW5kYWlkIGFnYWluc3Qgd3JvbmcgZGF0YWRpciBjb21wdXRhdGlvbgorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7ZGF0YWRpcn0vc2hhcmU7IHRoZW4KKyAgICAgICAgICAgIG12IC1mICR7RH0ke2RhdGFkaXJ9L3NoYXJlLyogJHtEfSR7ZGF0YWRpcn0vCisgICAgICAgICAgICBybWRpciAke0R9JHtkYXRhZGlyfS9zaGFyZQorICAgICAgICBmaQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbXBpbGUgZG9faW5zdGFsbAorCitleHBvcnQgTERTSEFSRUQ9IiR7Q0NMRH0gLXNoYXJlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhNTgxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzCkBAIC0wLDAgKzEsOTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIExpbnV4IEZvdW5kYXRpb24KKyMgQXV0aG9yOiBSaWNoYXJkIFB1cmRpZQorIyBTb21lIGNvZGUgYW5kIGluZmx1ZW5jZSB0YWtlbiBmcm9tIHNyY3RyZWUuYmJjbGFzczoKKyMgQ29weXJpZ2h0IChDKSAyMDA5IENocmlzIExhcnNvbiA8Y2xhcnNvbkBrZXJnb3RoLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKyMKKyMgZXh0ZXJuYWxzcmMuYmJjbGFzcyBlbmFibGVzIHVzZSBvZiBhbiBleGlzdGluZyBzb3VyY2UgdHJlZSwgdXN1YWxseSBleHRlcm5hbCB0byAKKyMgdGhlIGJ1aWxkIHN5c3RlbSB0byBidWlsZCBhIHBpZWNlIG9mIHNvZnR3YXJlIHJhdGhlciB0aGFuIHRoZSB1c3VhbCBmZXRjaC91bnBhY2svcGF0Y2gKKyMgcHJvY2Vzcy4KKyMKKyMgVG8gdXNlLCBhZGQgZXh0ZXJuYWxzcmMgdG8gdGhlIGdsb2JhbCBpbmhlcml0IGFuZCBzZXQgRVhURVJOQUxTUkMgdG8gcG9pbnQgYXQgdGhlCisjIGRpcmVjdG9yeSB5b3Ugd2FudCB0byB1c2UgY29udGFpbmluZyB0aGUgc291cmNlcyBlLmcuIGZyb20gbG9jYWwuY29uZiBmb3IgYSByZWNpcGUKKyMgY2FsbGVkICJteXJlY2lwZSIgeW91IHdvdWxkIGRvOgorIworIyBJTkhFUklUICs9ICJleHRlcm5hbHNyYyIKKyMgRVhURVJOQUxTUkNfcG4tbXlyZWNpcGUgPSAiL3BhdGgvdG8vbXkvc291cmNlL3RyZWUiCisjCisjIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBjbGFzcyB3b3JrIGZvciBib3RoIHRhcmdldCBhbmQgbmF0aXZlIHZlcnNpb25zIChvciB3aXRoCisjIG11bHRpbGlicy9jcm9zcyBvciBvdGhlciBCQkNMQVNTRVhURU5EIHZhcmlhbnRzKSwgQiBpcyBzZXQgdG8gcG9pbnQgdG8gYSBzZXBhcmF0ZQorIyBkaXJlY3RvcnkgdW5kZXIgdGhlIHdvcmsgZGlyZWN0b3J5IChzcGxpdCBzb3VyY2UgYW5kIGJ1aWxkIGRpcmVjdG9yaWVzKS4gVGhpcyBpcworIyB0aGUgZGVmYXVsdCwgYnV0IHRoZSBidWlsZCBkaXJlY3RvcnkgY2FuIGJlIHNldCB0byB0aGUgc291cmNlIGRpcmVjdG9yeSBpZgorIyBjaXJjdW1zdGFuY2VzIGRpY3RhdGUgYnkgc2V0dGluZyBFWFRFUk5BTFNSQ19CVUlMRCB0byB0aGUgc2FtZSB2YWx1ZSwgZS5nLjoKKyMKKyMgRVhURVJOQUxTUkNfQlVJTERfcG4tbXlyZWNpcGUgPSAiL3BhdGgvdG8vbXkvc291cmNlL3RyZWUiCisjCisKK1NSQ1RSRUVDT1ZFUkVEVEFTS1MgPz0gImRvX3BhdGNoIGRvX3VucGFjayBkb19mZXRjaCIKKworcHl0aG9uICgpIHsKKyAgICBleHRlcm5hbHNyYyA9IGQuZ2V0VmFyKCdFWFRFUk5BTFNSQycsIFRydWUpCisgICAgaWYgZXh0ZXJuYWxzcmM6CisgICAgICAgIGQuc2V0VmFyKCdTJywgZXh0ZXJuYWxzcmMpCisgICAgICAgIGV4dGVybmFsc3JjYnVpbGQgPSBkLmdldFZhcignRVhURVJOQUxTUkNfQlVJTEQnLCBUcnVlKQorICAgICAgICBpZiBleHRlcm5hbHNyY2J1aWxkOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0InLCBleHRlcm5hbHNyY2J1aWxkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0InLCAnJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0vJykKKworICAgICAgICBsb2NhbF9zcmN1cmkgPSBbXQorICAgICAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaCgoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAnJykuc3BsaXQoKSwgZCkKKyAgICAgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICAgICAgdXJsX2RhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgICAgICBwYXJtID0gdXJsX2RhdGEucGFybQorICAgICAgICAgICAgaWYgKHVybF9kYXRhLnR5cGUgPT0gJ2ZpbGUnIG9yCisgICAgICAgICAgICAgICAgICAgICd0eXBlJyBpbiBwYXJtIGFuZCBwYXJtWyd0eXBlJ10gPT0gJ2ttZXRhJyk6CisgICAgICAgICAgICAgICAgbG9jYWxfc3JjdXJpLmFwcGVuZCh1cmwpCisKKyAgICAgICAgZC5zZXRWYXIoJ1NSQ19VUkknLCAnICcuam9pbihsb2NhbF9zcmN1cmkpKQorCisgICAgICAgIGlmICd7U1JDUFZ9JyBpbiBkLmdldFZhcignUFYnLCBGYWxzZSk6CisgICAgICAgICAgICAjIER1bW15IHZhbHVlIGJlY2F1c2UgdGhlIGRlZmF1bHQgZnVuY3Rpb24gY2FuJ3QgYmUgY2FsbGVkIHdpdGggYmxhbmsgU1JDX1VSSQorICAgICAgICAgICAgZC5zZXRWYXIoJ1NSQ1BWJywgJzk5OScpCisKKyAgICAgICAgdGFza3MgPSBmaWx0ZXIobGFtYmRhIGs6IGQuZ2V0VmFyRmxhZyhrLCAidGFzayIpLCBkLmtleXMoKSkKKworICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmIHRhc2suZW5kc3dpdGgoIl9zZXRzY2VuZSIpOgorICAgICAgICAgICAgICAgICMgc3N0YXRlIGlzIG5ldmVyIGdvaW5nIHRvIHdvcmsgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlcywgZGlzYWJsZSBpdAorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmRlbHRhc2sodGFzaywgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBjb25maWd1cmUgd2lsbCBsaWtlbHkgdG91Y2ggJHtTfSwgZW5zdXJlIG9ubHkgd2UgbG9jayBzbyBvbmUgdGFzayBoYXMgYWNjZXNzIGF0IGEgdGltZQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZyh0YXNrLCAibG9ja2ZpbGVzIiwgIiAke1N9L3NpbmdsZXRhc2subG9jayIpCisKKyAgICAgICAgICAgICMgV2UgZG8gbm90IHdhbnQgb3VyIHNvdXJjZSB0byBiZSB3aXBlZCBvdXQsIGV2ZXIgKGtlcm5lbC5iYmNsYXNzIGRvZXMgdGhpcyBmb3IgZG9fY2xlYW4pCisgICAgICAgICAgICBjbGVhbmRpcnMgPSAoZC5nZXRWYXJGbGFnKHRhc2ssICdjbGVhbmRpcnMnLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgICAgIHNldHZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBjbGVhbmRpciBpbiBjbGVhbmRpcnNbOl06CisgICAgICAgICAgICAgICAgaWYgZC5leHBhbmQoY2xlYW5kaXIpID09IGV4dGVybmFsc3JjOgorICAgICAgICAgICAgICAgICAgICBjbGVhbmRpcnMucmVtb3ZlKGNsZWFuZGlyKQorICAgICAgICAgICAgICAgICAgICBzZXR2YWx1ZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHNldHZhbHVlOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAnY2xlYW5kaXJzJywgJyAnLmpvaW4oY2xlYW5kaXJzKSkKKworICAgICAgICBmZXRjaF90YXNrcyA9IFsnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJ10KKyAgICAgICAgIyBJZiB3ZSBkZWx0YXNrIGRvX3BhdGNoLCB0aGVyZSdzIG5vIGRlcGVuZGVuY3kgdG8gZW5zdXJlIGRvX3VucGFjayBnZXRzIHJ1biwgc28gYWRkIG9uZQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdkZXBzJywgWydkb191bnBhY2snXSkKKworICAgICAgICBmb3IgdGFzayBpbiBkLmdldFZhcigiU1JDVFJFRUNPVkVSRURUQVNLUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBsb2NhbF9zcmN1cmkgYW5kIHRhc2sgaW4gZmV0Y2hfdGFza3M6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGJiLmJ1aWxkLmRlbHRhc2sodGFzaywgZCkKKworICAgICAgICBkLnByZXBlbmRWYXJGbGFnKCdkb19jb21waWxlJywgJ3ByZWZ1bmNzJywgImV4dGVybmFsc3JjX2NvbXBpbGVfcHJlZnVuYyAiKQorCisgICAgICAgICMgRW5zdXJlIGNvbXBpbGF0aW9uIGhhcHBlbnMgZXZlcnkgdGltZQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAnbm9zdGFtcCcsICcxJykKK30KKworcHl0aG9uIGV4dGVybmFsc3JjX2NvbXBpbGVfcHJlZnVuYygpIHsKKyAgICAjIE1ha2UgaXQgb2J2aW91cyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBzaW5jZSBmb3JnZXR0aW5nIGFib3V0IGl0IGNvdWxkIGxlYWQgdG8gbXVjaCBjb25mdXNpb24KKyAgICBiYi53YXJuKCdDb21waWxpbmcgJXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgJXMnICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKSkpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2V4dHJhdXNlcnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWY1N2IxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2V4dHJhdXNlcnMuYmJjbGFzcwpAQCAtMCwwICsxLDY1IEBACisjIFRoaXMgYmJjbGFzcyBpcyBtYWlubHkgdXNlZCBmb3IgaW1hZ2UgbGV2ZWwgdXNlci9ncm91cCBjb25maWd1cmF0aW9uLgorIyBJbmhlcml0IHRoaXMgY2xhc3MgaWYgeW91IHdhbnQgdG8gbWFrZSBFWFRSQV9VU0VSU19QQVJBTVMgZWZmZWN0aXZlLgorCisjIEJlbG93IGlzIGFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gdXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyMgSU5IRVJJVCArPSAiZXh0cmF1c2VycyIKKyMgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyMgdXNlcmFkZCAtcCAnJyB0ZXN0ZXI7IFwKKyMgZ3JvdXBhZGQgZGV2ZWxvcGVyczsgXAorIyB1c2VyZGVsIG5vYm9keTsgXAorIyBncm91cGRlbCAtZyB2aWRlbzsgXAorIyBncm91cG1vZCAtZyAxMDIwIGRldmVsb3BlcnM7IFwKKyMgdXNlcm1vZCAtcyAvYmluL3NoIHRlc3RlcjsgXAorIyAiCisKKworaW5oZXJpdCB1c2VyYWRkX2Jhc2UKKworSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiICR7QFsnJywgJ2Jhc2UtcGFzc3dkIHNoYWRvdyddW2Jvb2woZC5nZXRWYXIoJ0VYVFJBX1VTRVJTX1BBUkFNUycsIFRydWUpKV19IgorCisjIEltYWdlIGxldmVsIHVzZXIgLyBncm91cCBzZXR0aW5ncworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRfYXBwZW5kID0gIiBzZXRfdXNlcl9ncm91cDsiCisKKyMgSW1hZ2UgbGV2ZWwgdXNlciAvIGdyb3VwIHNldHRpbmdzCitzZXRfdXNlcl9ncm91cCAoKSB7CisJdXNlcl9ncm91cF9zZXR0aW5ncz0iJHtFWFRSQV9VU0VSU19QQVJBTVN9IgorCWV4cG9ydCBQU0VVRE89IiR7RkFLRVJPT1RFTlZ9ICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyfS9wc2V1ZG8iCisJc2V0dGluZz1gZWNobyAkdXNlcl9ncm91cF9zZXR0aW5ncyB8IGN1dCAtZCAnOycgLWYxYAorCXJlbWFpbmluZz1gZWNobyAkdXNlcl9ncm91cF9zZXR0aW5ncyB8IGN1dCAtZCAnOycgLWYyLWAKKwl3aGlsZSB0ZXN0ICJ4JHNldHRpbmciICE9ICJ4IjsgZG8KKwkJY21kPWBlY2hvICRzZXR0aW5nIHwgY3V0IC1kICcgJyAtZjFgCisJCW9wdHM9YGVjaG8gJHNldHRpbmcgfCBjdXQgLWQgJyAnIC1mMi1gCisJCSMgRGlmZmVyZW50IGZyb20gdXNlcmFkZC5iYmNsYXNzLCB0aGVyZSdzIG5vIGZpbGUgbG9ja2luZyBpc3N1ZSBoZXJlLCBhcworCQkjIHRoaXMgc2V0dGluZyBpcyBhY3R1YWxseSBhIHNlcmlhbCBwcm9jZXNzLiBTbyB3ZSBvbmx5IHJldHJ5IG9uY2UuCisJCWNhc2UgJGNtZCBpbgorCQkJdXNlcmFkZCkKKwkJCQlwZXJmb3JtX3VzZXJhZGQgIiR7SU1BR0VfUk9PVEZTfSIgIi1SICR7SU1BR0VfUk9PVEZTfSAkb3B0cyIgMQorCQkJCTs7CisJCQlncm91cGFkZCkKKwkJCQlwZXJmb3JtX2dyb3VwYWRkICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJdXNlcmRlbCkKKwkJCQlwZXJmb3JtX3VzZXJkZWwgIiR7SU1BR0VfUk9PVEZTfSIgIi1SICR7SU1BR0VfUk9PVEZTfSAkb3B0cyIgMQorCQkJCTs7CisJCQlncm91cGRlbCkKKwkJCQlwZXJmb3JtX2dyb3VwZGVsICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJdXNlcm1vZCkKKwkJCQlwZXJmb3JtX3VzZXJtb2QgIiR7SU1BR0VfUk9PVEZTfSIgIi1SICR7SU1BR0VfUk9PVEZTfSAkb3B0cyIgMQorCQkJCTs7CisJCQlncm91cG1vZCkKKwkJCQlwZXJmb3JtX2dyb3VwbW9kICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJKikKKwkJCQliYmZhdGFsICJJbnZhbGlkIGNvbW1hbmQgaW4gRVhUUkFfVVNFUlNfUEFSQU1TOiAkY21kIgorCQkJCTs7CisJCWVzYWMKKwkJIyBBdm9pZCBpbmZpbml0ZSBsb29wIGlmIHRoZSBsYXN0IHBhcmFtZXRlciBkb2Vzbid0IGVuZCB3aXRoICc7JworCQlpZiBbICIkc2V0dGluZyIgPSAiJHJlbWFpbmluZyIgXTsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJIyBpdGVyYXRlIHRvIHRoZSBuZXh0IHNldHRpbmcKKwkJc2V0dGluZz1gZWNobyAkcmVtYWluaW5nIHwgY3V0IC1kICc7JyAtZjFgCisJCXJlbWFpbmluZz1gZWNobyAkcmVtYWluaW5nIHwgY3V0IC1kICc7JyAtZjItYAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTIyMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ZvbnRjYWNoZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDUgQEAKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIGdlbmVyYXRlIHRoZSBwcm9wZXIgcG9zdGluc3QvcG9zdHJtIHNjcmlwdGxldHMgZm9yIGZvbnQKKyMgcGFja2FnZXMuCisjCisKK0RFUEVORFMgKz0gInFlbXUtbmF0aXZlIgoraW5oZXJpdCBxZW11CisKK0ZPTlRfUEFDS0FHRVMgPz89ICIke1BOfSIKK0ZPTlRfRVhUUkFfUkRFUEVORFMgPz0gImZvbnRjb25maWctdXRpbHMiCitGT05UQ09ORklHX0NBQ0hFX0RJUiA/PSAiJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9mb250Y29uZmlnIgorZm9udGNhY2hlX2NvbW1vbigpIHsKK2lmIFsgIngkRCIgIT0gIngiIF0gOyB0aGVuCisJJElOVEVSQ0VQVF9ESVIvcG9zdGluc3RfaW50ZXJjZXB0IHVwZGF0ZV9mb250X2NhY2hlICR7UEtHfSBtbHByZWZpeD0ke01MUFJFRklYfSBiaW5kaXI9JHtiaW5kaXJ9IFwKKwkJbGliZGlyPSR7bGliZGlyfSBiYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfSBmb250Y29uZmlnY2FjaGVkaXI9JHtGT05UQ09ORklHX0NBQ0hFX0RJUn0KK2Vsc2UKKwlmYy1jYWNoZQorZmkKK30KKworcHl0aG9uICgpIHsKKyAgICBmb250X3BrZ3MgPSBkLmdldFZhcignRk9OVF9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBkZXBzID0gZC5nZXRWYXIoIkZPTlRfRVhUUkFfUkRFUEVORFMiLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiBmb250X3BrZ3M6CisgICAgICAgIGlmIGRlcHM6IGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAnICcrZGVwcykKK30KKworcHl0aG9uIGFkZF9mb250Y2FjaGVfcG9zdGluc3RzKCkgeworICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ0ZPTlRfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZm9udHMgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZm9udGNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdmb250Y2FjaGVfY29tbW9uJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK1BBQ0tBR0VGVU5DUyA9KyAiYWRkX2ZvbnRjYWNoZV9wb3N0aW5zdHMiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ZzLXV1aWQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI2MTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ZzLXV1aWQuYmJjbGFzcwpAQCAtMCwwICsxLDI0IEBACisjIEV4dHJhY3QgVVVJRCBmcm9tICR7Uk9PVEZTfSwgd2hpY2ggbXVzdCBoYXZlIGJlZW4gYnVpbHQKKyMgYnkgdGhlIHRpbWUgdGhhdCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBPbmx5IHdvcmtzCisjIG9uIGV4dCBmaWxlIHN5c3RlbXMgYW5kIGRlcGVuZHMgb24gdHVuZTJmcy4KK2RlZiBnZXRfcm9vdGZzX3V1aWQoZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICByb290ZnMgPSBkLmdldFZhcignUk9PVEZTJywgVHJ1ZSkKKyAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3R1bmUyZnMnLCAnLWwnLCByb290ZnNdKQorICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGaWxlc3lzdGVtIFVVSUQ6Jyk6CisgICAgICAgICAgICB1dWlkID0gbGluZS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgYmIubm90ZSgnVVVJRCBvZiAlczogJXMnICUgKHJvb3RmcywgdXVpZCkpCisgICAgICAgICAgICByZXR1cm4gdXVpZAorICAgIGJiLmZhdGFsKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gVVVJRCBvZiAlcycgJSByb290ZnMpCisKKyMgUmVwbGFjZSB0aGUgc3BlY2lhbCA8PHV1aWQtb2Ytcm9vdGZzPj4gaW5zaWRlIGEgc3RyaW5nIChsaWtlIHRoZQorIyByb290PSBBUFBFTkQgc3RyaW5nIGluIGEgc3lzbGludXguY2ZnIG9yIGd1bW1pYm9vdCBlbnRyeSkgd2l0aCB0aGUKKyMgYWN0dWFsIFVVSUQgb2YgdGhlIHJvb3Rmcy4gRG9lcyBub3RoaW5nIGlmIHRoZSBzcGVjaWFsIHN0cmluZworIyBpcyBub3QgdXNlZC4KK2RlZiByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIHN0cmluZyk6CisgICAgVVVJRF9QTEFDRUhPTERFUiA9ICc8PHV1aWQtb2Ytcm9vdGZzPj4nCisgICAgaWYgVVVJRF9QTEFDRUhPTERFUiBpbiBzdHJpbmc6CisgICAgICAgIHV1aWQgPSBnZXRfcm9vdGZzX3V1aWQoZCkKKyAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoVVVJRF9QTEFDRUhPTERFUiwgdXVpZCkKKyAgICByZXR1cm4gc3RyaW5nCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9nY29uZi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YWZhNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcwpAQCAtMCwwICsxLDcwIEBACitERVBFTkRTICs9ICJnY29uZiBnY29uZi1uYXRpdmUiCisKKyMgVGhlc2UgYXJlIGZvciB3aGVuIGdjb25mdG9vbCBpcyB1c2VkIG5hdGl2ZWx5IGFuZCB0aGUgcHJlZml4IGlzbid0IG5lY2Vzc2FyaWx5CisjIHRoZSBzeXNyb290LiAgVE9ETzogcmVwbGljYXRlIHRoZSBwb3N0aW5zdCBsb2dpYyBmb3IgLW5hdGl2ZSBwYWNrYWdlcyBnb2luZworIyBpbnRvIHN5c3Jvb3QgYXMgdGhleSB3b24ndCBiZSBydW5uaW5nIHRoZWlyIG93biBpbnN0YWxsLXRpbWUgc2NoZW1hCisjIHJlZ2lzdHJhdGlvbiAoZGlzYWJsZWQgYmVsb3cpIG5vciB0aGUgcG9zdGluc3Qgc2NyaXB0IChhcyB0aGV5IGRvbid0IGhhcHBlbikuCitleHBvcnQgR0NPTkZfU0NIRU1BX0lOU1RBTExfU09VUkNFID0gInhtbDptZXJnZWQ6JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMiCitleHBvcnQgR0NPTkZfQkFDS0VORF9ESVIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L0dDb25mLzIiCisKKyMgRGlzYWJsZSBpbnN0YWxsLXRpbWUgc2NoZW1hIHJlZ2lzdHJhdGlvbiBhcyB3ZSdyZSBhIHBhY2thZ2luZyBzeXN0ZW0gc28gdGhpcworIyBoYXBwZW5zIGluIHRoZSBwb3N0aW5zdCBzY3JpcHQsIG5vdCBhdCBpbnN0YWxsIHRpbWUuICBTZXQgYm90aCB0aGUgY29uZmlndXJlCisjIHNjcmlwdCBvcHRpb24gYW5kIHRoZSB0cmFkaXRpb25hbCBlbnZpb25tZW50IHZhcmlhYmxlIGp1c3QgdG8gbWFrZSBzdXJlLgorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2NoZW1hcy1pbnN0YWxsIgorZXhwb3J0IEdDT05GX0RJU0FCTEVfTUFLRUZJTEVfU0NIRU1BX0lOU1RBTEwgPSAiMSIKKworZ2NvbmZfcG9zdGluc3QoKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJZXhwb3J0IEdDT05GX0NPTkZJR19TT1VSQ0U9InhtbDo6JEQke3N5c2NvbmZkaXJ9L2djb25mL2djb25mLnhtbC5kZWZhdWx0cyIKK2Vsc2UKKwlleHBvcnQgR0NPTkZfQ09ORklHX1NPVVJDRT1gZ2NvbmZ0b29sLTIgLS1nZXQtZGVmYXVsdC1zb3VyY2VgCitmaQorCitTQ0hFTUFfTE9DQVRJT049JEQvZXRjL2djb25mL3NjaGVtYXMKK2ZvciBTQ0hFTUEgaW4gJHtTQ0hFTUFfRklMRVN9OyBkbworCWlmIFsgLWUgJFNDSEVNQV9MT0NBVElPTi8kU0NIRU1BIF07IHRoZW4KKwkJSE9NRT0kRC9yb290IGdjb25mdG9vbC0yIFwKKwkJCS0tbWFrZWZpbGUtaW5zdGFsbC1ydWxlICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSA+IC9kZXYvbnVsbAorCWZpCitkb25lCit9CisKK2djb25mX3ByZXJtKCkgeworU0NIRU1BX0xPQ0FUSU9OPS9ldGMvZ2NvbmYvc2NoZW1hcworZm9yIFNDSEVNQSBpbiAke1NDSEVNQV9GSUxFU307IGRvCisJaWYgWyAtZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgXTsgdGhlbgorCQlIT01FPS9yb290IEdDT05GX0NPTkZJR19TT1VSQ0U9YGdjb25mdG9vbC0yIC0tZ2V0LWRlZmF1bHQtc291cmNlYCBcCisJCQlnY29uZnRvb2wtMiBcCisJCQktLW1ha2VmaWxlLXVuaW5zdGFsbC1ydWxlICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSA+IC9kZXYvbnVsbAorCWZpCitkb25lCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQgKCkgeworICAgIGltcG9ydCByZQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ2Rlc3QgPSAgZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIAorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHNjaGVtYV9kaXIgPSAnJXMvJXMvZXRjL2djb25mL3NjaGVtYXMnICUgKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgc2NoZW1hcyA9IFtdCisgICAgICAgIHNjaGVtYV9yZSA9IHJlLmNvbXBpbGUoIi4qXC5zY2hlbWFzJCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNjaGVtYV9kaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihzY2hlbWFfZGlyKToKKyAgICAgICAgICAgICAgICBpZiBzY2hlbWFfcmUubWF0Y2goZik6CisgICAgICAgICAgICAgICAgICAgIHNjaGVtYXMuYXBwZW5kKGYpCisgICAgICAgIGlmIHNjaGVtYXMgIT0gW106CisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ2NvbmYgcG9zdGluc3QgYW5kIHByZXJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorICAgICAgICAgICAgZC5zZXRWYXIoJ1NDSEVNQV9GSUxFUycsICIgIi5qb2luKHNjaGVtYXMpKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdnY29uZl9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisgICAgICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgICAgIHByZXJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcHJlcm0gKz0gZC5nZXRWYXIoJ2djb25mX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU18lcyIgJSBwa2csICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdnY29uZicpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dldHRleHQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2I4OWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2dldHRleHQuYmJjbGFzcwpAQCAtMCwwICsxLDE5IEBACitkZWYgZ2V0dGV4dF9kZXBlbmRlbmNpZXMoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgVHJ1ZSkgYW5kIG5vdCBvZS51dGlscy5pbmhlcml0cyhkLCAnY3Jvc3MtY2FuYWRpYW4nKToKKyAgICAgICAgcmV0dXJuICIiCisgICAgaWYgZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSA9PSAnbm8nOgorICAgICAgICByZXR1cm4gImdldHRleHQtbWluaW1hbC1uYXRpdmUiCisgICAgcmV0dXJuIGQuZ2V0VmFyKCdERVBFTkRTX0dFVFRFWFQnLCBGYWxzZSkKKworZGVmIGdldHRleHRfb2Vjb25mKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJzoKKyAgICAgICAgcmV0dXJuICctLWRpc2FibGUtbmxzJworICAgICMgUmVtb3ZlIHRoZSBOTFMgYml0cyBpZiBVU0VfTkxTIGlzIG5vIG9yIElOSElCSVRfREVGQVVMVF9ERVBTIGlzIHNldAorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIFRydWUpIGFuZCBub3Qgb2UudXRpbHMuaW5oZXJpdHMoZCwgJ2Nyb3NzLWNhbmFkaWFuJyk6CisgICAgICAgIHJldHVybiAnLS1kaXNhYmxlLW5scycKKyAgICByZXR1cm4gIi0tZW5hYmxlLW5scyIKKworREVQRU5EU19HRVRURVhUID8/PSAidmlydHVhbC9nZXR0ZXh0IGdldHRleHQtbmF0aXZlIgorCitCQVNFREVQRU5EUyA9KyAiJHtAZ2V0dGV4dF9kZXBlbmRlbmNpZXMoZCl9IgorRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgJHtAZ2V0dGV4dF9vZWNvbmYoZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ25vbWUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjIwMmJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MKQEAgLTAsMCArMSBAQAoraW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWljb24tY2FjaGUgZ2NvbmYgbWltZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmJhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ25vbWViYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwzMyBAQAorZGVmIGdub21lX3ZlcmRpcih2KToKKyAgICByZXR1cm4gb2UudXRpbHMudHJpbV92ZXJzaW9uKHYsIDIpCisKK0dOT01FX0NPTVBSRVNTX1RZUEUgPz0gInh6IgorU0VDVElPTiA/PSAieDExL2dub21lIgorR05PTUVCTiA/PSAiJHtCUE59IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtHTk9NRUJOfS8ke0Bnbm9tZV92ZXJkaXIoIiR7UFZ9Iil9LyR7R05PTUVCTn0tJHtQVn0udGFyLiR7R05PTUVfQ09NUFJFU1NfVFlQRX07bmFtZT1hcmNoaXZlIgorCitERVBFTkRTICs9ICJnbm9tZS1jb21tb24tbmF0aXZlIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbi1yZWdpc3RyeSAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWltZS1pbmZvIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUvcGFja2FnZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWltZS9hcHBsaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbm9tZS0yLjAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0KiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9HQ29uZiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIFwKKyIKKworRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2RldmhlbHAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL3Njcm9sbGtlZXBlci8qCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Njcm9sbGtlZXBlci8qCisJcm0gLWYgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyouY2FjaGUKK30KKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dydWItZWZpLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkYzJiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzCkBAIC0wLDAgKzEsMTQ1IEBACisjIGdydWItZWZpLmJiY2xhc3MKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworIyBQcm92aWRlIGdydWItZWZpIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorCisjIEV4dGVybmFsIHZhcmlhYmxlcworIyAke0lOSVRSRH0gLSBpbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UgYXMgYW4gaW5pdHJkIChvcHRpb25hbCkKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorIyAke0dSVUJfR0ZYU0VSSUFMfSAtIHNldCB0aGlzIHRvIDEgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUKKyMgJHtMQUJFTFN9IC0gYSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlnCisjICR7QVBQRU5EfSAtIGFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2ggbGFiZWwKKyMgJHtHUlVCX09QVFN9IC0gYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgY29uZmlnLCAnOycgZGVsaW1pdGVkICMgKG9wdGlvbmFsKQorIyAke0dSVUJfVElNRU9VVH0gLSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlYXVsdCBsYWJlbCAob3B0aW9uYWwpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3J1Yi1lZmk6ZG9fZGVwbG95IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3J1Yi1lZmk6ZG9fZGVwbG95IgorCitHUlVCX1NFUklBTCA/PSAiY29uc29sZT10dHlTMCwxMTUyMDAiCitHUlVCQ0ZHID0gIiR7U30vZ3J1Yi5jZmciCitHUlVCX1RJTUVPVVQgPz0gIjEwIgorI0ZJWE1FOiBidWlsZCB0aGlzIGZyb20gdGhlIG1hY2hpbmUgY29uZmlnCitHUlVCX09QVFMgPz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAtLXBhcml0eT1ubyAtLXN0b3A9MSIKKworRUZJRElSID0gIi9FRkkvQk9PVCIKKworIyBOZWVkIFVVSUQgdXRpbGl0eSBjb2RlLgoraW5oZXJpdCBmcy11dWlkCisKK2VmaV9wb3B1bGF0ZSgpIHsKKwkjIERFU1QgbXVzdCBiZSB0aGUgcm9vdCBvZiB0aGUgaW1hZ2Ugc28gdGhhdCBFRklESVIgaXMgbm90CisJIyBuZXN0ZWQgdW5kZXIgYSB0b3AgbGV2ZWwgZGlyZWN0b3J5LgorCURFU1Q9JDEKKworCWluc3RhbGwgLWQgJHtERVNUfSR7RUZJRElSfQorCisJR1JVQl9JTUFHRT0iYm9vdGlhMzIuZWZpIgorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07IHRoZW4KKwkJR1JVQl9JTUFHRT0iYm9vdHg2NC5lZmkiCisJZmkKKwlpbnN0YWxsIC1tIDA2NDQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0dSVUJfSU1BR0V9ICR7REVTVH0ke0VGSURJUn0KKworCWluc3RhbGwgLW0gMDY0NCAke0dSVUJDRkd9ICR7REVTVH0ke0VGSURJUn0vZ3J1Yi5jZmcKK30KKworZWZpX2lzb19wb3B1bGF0ZSgpIHsKKwlpc29fZGlyPSQxCisJZWZpX3BvcHVsYXRlICRpc29fZGlyCisJIyBCdWlsZCBhIEVGSSBkaXJlY3RvcnkgdG8gY3JlYXRlIGVmaS5pbWcKKwlta2RpciAtcCAke0VGSUlNR0RJUn0vJHtFRklESVJ9CisJY3AgJGlzb19kaXIvJHtFRklESVJ9LyogJHtFRklJTUdESVJ9JHtFRklESVJ9CisJY3AgJGlzb19kaXIvdm1saW51eiAke0VGSUlNR0RJUn0KKwllY2hvICIke0dSVUJfSU1BR0V9IiA+ICR7RUZJSU1HRElSfS9zdGFydHVwLm5zaAorCWlmIFsgLWYgIiRpc29fZGlyL2luaXRyZCIgXSA7IHRoZW4KKwkJY3AgJGlzb19kaXIvaW5pdHJkICR7RUZJSU1HRElSfQorCWZpCit9CisKK2VmaV9oZGRpbWdfcG9wdWxhdGUoKSB7CisJZWZpX3BvcHVsYXRlICQxCit9CisKK3B5dGhvbiBidWlsZF9lZmlfY2ZnKCkgeworICAgIGltcG9ydCBzeXMKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgZ2Z4c2VyaWFsID0gZC5nZXRWYXIoJ0dSVUJfR0ZYU0VSSUFMJywgVHJ1ZSkgb3IgIiIKKworICAgIGxhYmVscyA9IGQuZ2V0VmFyKCdMQUJFTFMnLCBUcnVlKQorICAgIGlmIG5vdCBsYWJlbHM6CisgICAgICAgIGJiLmRlYnVnKDEsICJMQUJFTFMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGxhYmVscyA9PSBbXToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIGxhYmVscywgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgY2ZpbGUgPSBkLmdldFZhcignR1JVQkNGRycsIFRydWUpCisgICAgaWYgbm90IGNmaWxlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdVbmFibGUgdG8gcmVhZCBHUlVCQ0ZHJykKKworICAgIHRyeToKKyAgICAgICAgIGNmZ2ZpbGUgPSBmaWxlKGNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKworICAgIG9wdHMgPSBkLmdldFZhcignR1JVQl9PUFRTJywgVHJ1ZSkKKyAgICBpZiBvcHRzOgorICAgICAgICBmb3Igb3B0IGluIG9wdHMuc3BsaXQoJzsnKToKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzXG4nICUgb3B0KQorCisgICAgY2ZnZmlsZS53cml0ZSgnZGVmYXVsdD0lc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisKKyAgICB0aW1lb3V0ID0gZC5nZXRWYXIoJ0dSVUJfVElNRU9VVCcsIFRydWUpCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dD0lc1xuJyAlIHRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dD01MFxuJykKKworICAgIGlmIGdmeHNlcmlhbCA9PSAiMSI6CisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIGdyYXBoaWNzIGNvbnNvbGUiLCAiIiBdLAorICAgICAgICAgICAgWyAiIHNlcmlhbCBjb25zb2xlIiwgZC5nZXRWYXIoJ0dSVUJfU0VSSUFMJywgVHJ1ZSkgb3IgIiIgXSBdCisgICAgZWxzZToKKyAgICAgICAgYnR5cGVzID0gWyBbICIiLCAiIiBdIF0KKworICAgIGZvciBsYWJlbCBpbiBsYWJlbHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBmb3IgYnR5cGUgaW4gYnR5cGVzOgorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgbGFiZWwgKyAnOicgKyBvdmVycmlkZXMpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnXG5tZW51ZW50cnkgXCclcyVzXCd7XG4nICUgKGxhYmVsLCBidHlwZVswXSkpCisgICAgICAgICAgICBsYiA9IGxhYmVsCisgICAgICAgICAgICBpZiBsYWJlbCA9PSAiaW5zdGFsbCI6CisgICAgICAgICAgICAgICAgbGIgPSAiaW5zdGFsbC1lZmkiCisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdsaW51eCAvdm1saW51eiBMQUJFTD0lcycgJSAobGIpKQorCisgICAgICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICAgICAgaW5pdHJkID0gbG9jYWxkYXRhLmdldFZhcignSU5JVFJEJywgVHJ1ZSkKKworICAgICAgICAgICAgaWYgYXBwZW5kOgorICAgICAgICAgICAgICAgIGFwcGVuZCA9IHJlcGxhY2Vfcm9vdGZzX3V1aWQoZCwgYXBwZW5kKQorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzJyAlIChhcHBlbmQpKQorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnICVzJyAlIGJ0eXBlWzFdKQorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnXG4nKQorCisgICAgICAgICAgICBpZiBpbml0cmQ6CisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnaW5pdHJkIC9pbml0cmQnKQorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnXG59XG4nKQorCisgICAgY2ZnZmlsZS5jbG9zZSgpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjNWFiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9nc2V0dGluZ3MuYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjIEEgYmJjbGFzcyB0byBoYW5kbGUgaW5zdGFsbGVkIEdTZXR0aW5ncyAoZ2xpYikgc2NoZW1hcywgdXBkYXRlZCB0aGUgY29tcGlsZWQKKyMgZm9ybSBvbiBwYWNrYWdlIGluc3RhbGwgYW5kIHJlbW92ZS4KKyMKKyMgVGhlIGNvbXBpbGVkIHNjaGVtYXMgYXJlIHBsYXRmb3JtLWFnbm9zdGljLCBzbyB3ZSBjYW4gZGVwZW5kIG9uCisjIGdsaWItMi4wLW5hdGl2ZSBmb3IgdGhlIG5hdGl2ZSB0b29sIGFuZCBydW4gdGhlIHBvc3RpbnN0IHNjcmlwdCB3aGVuIHRoZQorIyByb290ZnMgYnVpbGRzIHRvIHNhdmUgYSBsaXR0bGUgdGltZSBvbiBmaXJzdCBib290LgorCisjIFRPRE8gdXNlIGEgdHJpZ2dlciBzbyB0aGF0IHRoaXMgcnVucyBvbmNlIHBlciBwYWNrYWdlIG9wZXJhdGlvbiBydW4KKworREVQRU5EUyArPSAiZ2xpYi0yLjAtbmF0aXZlIgorCitSREVQRU5EU18ke1BOfSArPSAiZ2xpYi0yLjAtdXRpbHMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMiCisKK2dzZXR0aW5nc19wb3N0aW5zdHJtICgpIHsKKwlnbGliLWNvbXBpbGUtc2NoZW1hcyAkRCR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcworfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBwa2cgPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGJiLm5vdGUoImFkZGluZyBnc2V0dGluZ3MgcG9zdGluc3Qgc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdnc2V0dGluZ3NfcG9zdGluc3RybScsIFRydWUpCisgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgYmIubm90ZSgiYWRkaW5nIGdzZXR0aW5ncyBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKyAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdnc2V0dGluZ3NfcG9zdGluc3RybScsIFRydWUpCisgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzJmOThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcwpAQCAtMCwwICsxLDI1IEBACisjIEhlbHBlciBjbGFzcyB0byBwdWxsIGluIHRoZSByaWdodCBndGstZG9jIGRlcGVuZGVuY2llcyBhbmQgZGlzYWJsZQorIyBndGstZG9jLgorIworIyBMb25nLXRlcm0gaXQgd291bGQgYmUgZ3JlYXQgaWYgdGhpcyBjbGFzcyBjb3VsZCBiZSB0b2dnbGVkIGJldHdlZW4KKyMgZ3RrLWRvYy1zdHViLW5hdGl2ZSBhbmQgdGhlIHJlYWwgZ3RrLWRvYy1uYXRpdmUsIHdoaWNoIHdvdWxkIGVuYWJsZQorIyByZS1nZW5lcmF0aW9uIG9mIGRvY3VtZW50YXRpb24uICBGb3Igbm93LCB3ZSdsbCBtYWtlIGRvIHdpdGggdGhpcyB3aGljaAorIyBwYWNrYWdlcyB1cCBhbnkgZXhpc3RpbmcgZG9jdW1lbnRhdGlvbiAoc28gZnJvbSB0YXJiYWxsIGJ1aWxkcykuCisKKyMgVGhlIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LCB3aGVyZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgd2lsbCBiZSBjb3BpZWQuCisjIGd0a2RvY2l6ZSBoYXMgYSBkZWZhdWx0IG9mICIuIiBzbyB0byBoYW5kbGUgb3V0LW9mLXRyZWUgYnVpbGRzIHNldCB0aGlzIHRvICRTLgorR1RLRE9DX0RPQ0RJUiA/PSAiJHtTfSIKKworREVQRU5EU19hcHBlbmQgPSAiIGd0ay1kb2Mtc3R1Yi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiXAorICAtLWRpc2FibGUtZ3RrLWRvYyBcCisgIC0tZGlzYWJsZS1ndGstZG9jLWh0bWwgXAorICAtLWRpc2FibGUtZ3RrLWRvYy1wZGYgXAorIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJKCBjZCAke1N9OyBndGtkb2NpemUgLS1kb2NkaXIgJHtHVEtET0NfRE9DRElSfSApCit9CisKK2luaGVyaXQgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ndGstaWNvbi1jYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzU4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDYyIEBACitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yIgorCitERVBFTkRTICs9ICIke0BbJ2hpY29sb3ItaWNvbi10aGVtZScsICcnXVsnJHtCUE59JyA9PSAnaGljb2xvci1pY29uLXRoZW1lJ119IGd0ay1pY29uLXV0aWxzLW5hdGl2ZSIKKworZ3RrX2ljb25fY2FjaGVfcG9zdGluc3QoKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJJElOVEVSQ0VQVF9ESVIvcG9zdGluc3RfaW50ZXJjZXB0IHVwZGF0ZV9pY29uX2NhY2hlICR7UEtHfSBtbHByZWZpeD0ke01MUFJFRklYfSBsaWJkaXI9JHtsaWJkaXJ9IFwKKwkJYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0KK2Vsc2UKKworCSMgVXBkYXRlIHRoZSBwaXhidWYgbG9hZGVycyBpbiBjYXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0CisJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzIGdkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZQorCisJZm9yIGljb25kaXIgaW4gL3Vzci9zaGFyZS9pY29ucy8qIDsgZG8KKwkJaWYgWyAtZCAkaWNvbmRpciBdIDsgdGhlbgorCQkJZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIC1mcXQgICRpY29uZGlyCisJCWZpCisJZG9uZQorZmkKK30KKworZ3RrX2ljb25fY2FjaGVfcG9zdHJtKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfaWNvbl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJhc2VfbGliZGlyPSR7YmFzZV9saWJkaXJ9CitlbHNlCisJZm9yIGljb25kaXIgaW4gL3Vzci9zaGFyZS9pY29ucy8qIDsgZG8KKwkJaWYgWyAtZCAkaWNvbmRpciBdIDsgdGhlbgorCQkJZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIC1xdCAgJGljb25kaXIKKwkJZmkKKwlkb25lCitmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBpY29uX2RpciA9ICclcy8lcy8lcy9pY29ucycgJSAocGtnZGVzdCwgcGtnLCBkLmdldFZhcignZGF0YWRpcicsIFRydWUpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaWNvbl9kaXIpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBiYi5ub3RlKCJhZGRpbmcgaGljb2xvci1pY29uLXRoZW1lIGRlcGVuZGVuY3kgdG8gJXMiICUgcGtnKQorICAgICAgICByZGVwZW5kcyA9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICJoaWNvbG9yLWljb24tdGhlbWUiCisgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18lcycgJSBwa2csIHJkZXBlbmRzKQorICAgIAorICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ3RrLWljb24tY2FjaGUgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3RrX2ljb25fY2FjaGVfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ2d0a19pY29uX2NhY2hlX3Bvc3RybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2d0ay1pbW1vZHVsZXMtY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYzMTZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2d0ay1pbW1vZHVsZXMtY2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDgzIEBACisjIFRoaXMgY2xhc3Mgd2lsbCB1cGRhdGUgdGhlIGlucHV0bWV0aG9kIG1vZHVsZSBjYWNoZSBmb3IgdmlydHVhbCBrZXlib2FyZHMKKyMKKyMgVXNhZ2U6IFNldCBHVEtJTU1PRFVMRVNfUEFDS0FHRVMgdG8gdGhlIHBhY2thZ2VzIHRoYXQgbmVlZHMgdG8gdXBkYXRlIHRoZSBpbnB1dG1ldGhvZCBtb2R1bGVzCisKK0RFUEVORFMgPSsgInFlbXUtbmF0aXZlIgorCitpbmhlcml0IHFlbXUKKworR1RLSU1NT0RVTEVTX1BBQ0tBR0VTID89ICIke1BOfSIKKworZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICAgIGZvciBtYWpfdmVyIGluIDIgMzsgZG8KKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAgXTsgdGhlbgorICAgICAgICAgICAgSU1GSUxFUz0kKGxzICREJHtsaWJkaXJ9L2d0ay0kbWFqX3Zlci4wLyovaW1tb2R1bGVzLyouc28pCisgICAgICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAnKX0gXAorICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMgMj4vZGV2L251bGwgJiYKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInM6JEQ6OiIgJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMKKworICAgICAgICAgICAgWyAkPyAtbmUgMCBdICYmIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgMAorZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTIuMCA+IC9ldGMvZ3RrLTIuMC9ndGsuaW1tb2R1bGVzCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTMuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wID4gL2V0Yy9ndGstMy4wL2d0ay5pbW1vZHVsZXMKK2ZpCit9CisKK2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0cm0oKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisgICAgZm9yIG1hal92ZXIgaW4gMiAzOyBkbworICAgICAgICBpZiBbIC14ICREJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtJG1hal92ZXIuMCBdOyB0aGVuCisgICAgICAgICAgICBJTUZJTEVTPSQobHMgJEQke2xpYmRpcn0vZ3RrLSRtYWpfdmVyLjAvKi9pbW1vZHVsZXMvKi5zbykKKyAgICAgICAgICAgICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtJG1hal92ZXIuMCcpfSBcCisgICAgICAgICAgICAgICAgJElNRklMRVMgPiAkRC9ldGMvZ3RrLSRtYWpfdmVyLjAvZ3RrLmltbW9kdWxlcyAyPi9kZXYvbnVsbCAmJgorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAiczokRDo6IiAkRC9ldGMvZ3RrLSRtYWpfdmVyLjAvZ3RrLmltbW9kdWxlcworCisgICAgICAgICAgICBbICQ/IC1uZSAwIF0gJiYgZXhpdCAxCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgZXhpdCAwCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTIuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMi4wID4gL2V0Yy9ndGstMi4wL2d0ay5pbW1vZHVsZXMKK2ZpCitpZiBbICEgLXogYHdoaWNoIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wYCBdOyB0aGVuCisgICAgZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAgPiAvZXRjL2d0ay0zLjAvZ3RrLmltbW9kdWxlcworZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgZ3RraW1tb2R1bGVzX3BrZ3MgPSBkLmdldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgZm9yIHBrZyBpbiBndGtpbW1vZHVsZXNfcGtnczoKKyAgICAgICAgICAgIGJiLm5vdGUoImFkZGluZyBndGstaW1tb2R1bGUtY2FjaGUgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKworICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdndGtfaW1tb2R1bGVfY2FjaGVfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RybScsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKK30KKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIGd0a2ltbW9kdWxlc19jaGVjayA9IGQuZ2V0VmFyKCdHVEtJTU1PRFVMRVNfUEFDS0FHRVMnLCBGYWxzZSkKKyAgICAgICAgaWYgbm90IGd0a2ltbW9kdWxlc19jaGVjazoKKyAgICAgICAgICAgIGJiX2ZpbGVuYW1lID0gZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkVSUk9SOiAlcyBpbmhlcml0cyBndGstaW1tb2R1bGVzLWNhY2hlIGJ1dCBkb2Vzbid0IHNldCBHVEtJTU1PRFVMRVNfUEFDS0FHRVMiICUgYmJfZmlsZW5hbWUpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDljMDhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2d1bW1pYm9vdC5iYmNsYXNzCkBAIC0wLDAgKzEsMTE4IEBACisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBndW1taWJvb3QuYmJjbGFzcyAtIGVxdWl2YWxlbnQgb2YgZ3J1Yi1lZmkuYmJjbGFzcworIyBTZXQgRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCIgdG8gdXNlIGd1bW1pYm9vdCBvbiB5b3VyIGxpdmUgaW1hZ2VzIGluc3RlYWQgb2YgZ3J1Yi1lZmkKKyMgKGltYWdlcyBidWlsdCBieSBib290aW1hZ2UuYmJjbGFzcyBvciBib290LWRpcmVjdGRpc2suYmJjbGFzcykKKworZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtNTFBSRUZJWH1ndW1taWJvb3Q6ZG9fZGVwbG95IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3VtbWlib290OmRvX2RlcGxveSIKKworRUZJRElSID0gIi9FRkkvQk9PVCIKKworR1VNTUlCT09UX0NGRyA/PSAiJHtTfS9sb2FkZXIuY29uZiIKK0dVTU1JQk9PVF9FTlRSSUVTID89ICIiCitHVU1NSUJPT1RfVElNRU9VVCA/PSAiMTAiCisKKyMgTmVlZCBVVUlEIHV0aWxpdHkgY29kZS4KK2luaGVyaXQgZnMtdXVpZAorCitlZmlfcG9wdWxhdGUoKSB7CisgICAgICAgIERFU1Q9JDEKKworICAgICAgICBFRklfSU1BR0U9Imd1bW1pYm9vdGlhMzIuZWZpIgorICAgICAgICBERVNUX0VGSV9JTUFHRT0iYm9vdGlhMzIuZWZpIgorICAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdOyB0aGVuCisgICAgICAgICAgICBFRklfSU1BR0U9Imd1bW1pYm9vdHg2NC5lZmkiCisgICAgICAgICAgICBERVNUX0VGSV9JTUFHRT0iYm9vdHg2NC5lZmkiCisgICAgICAgIGZpCisKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9JHtFRklESVJ9CisgICAgICAgICMgZ3VtbWlib290IHJlcXVpcmVzIHRoZXNlIHBhdGhzIGZvciBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICMgdGhleSBhcmUgbm90IGN1c3RvbWl6YWJsZSBzbyBubyBwb2ludCBpbiBuZXcgdmFycworICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0vbG9hZGVyCisgICAgICAgIGluc3RhbGwgLWQgJHtERVNUfS9sb2FkZXIvZW50cmllcworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0VGSV9JTUFHRX0gJHtERVNUfSR7RUZJRElSfS8ke0RFU1RfRUZJX0lNQUdFfQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtHVU1NSUJPT1RfQ0ZHfSAke0RFU1R9L2xvYWRlci9sb2FkZXIuY29uZgorICAgICAgICBmb3IgaSBpbiAke0dVTU1JQk9PVF9FTlRSSUVTfTsgZG8KKyAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke2l9ICR7REVTVH0vbG9hZGVyL2VudHJpZXMKKyAgICAgICAgZG9uZQorfQorCitlZmlfaXNvX3BvcHVsYXRlKCkgeworICAgICAgICBpc29fZGlyPSQxCisgICAgICAgIGVmaV9wb3B1bGF0ZSAkaXNvX2RpcgorICAgICAgICBta2RpciAtcCAke0VGSUlNR0RJUn0vJHtFRklESVJ9CisgICAgICAgIGNwICRpc29fZGlyLyR7RUZJRElSfS8qICR7RUZJSU1HRElSfSR7RUZJRElSfQorICAgICAgICBjcCAkaXNvX2Rpci92bWxpbnV6ICR7RUZJSU1HRElSfQorICAgICAgICBlY2hvICIke0RFU1RfRUZJX0lNQUdFfSIgPiAke0VGSUlNR0RJUn0vc3RhcnR1cC5uc2gKKyAgICAgICAgaWYgWyAtZiAiJGlzb19kaXIvaW5pdHJkIiBdIDsgdGhlbgorICAgICAgICAgICAgY3AgJGlzb19kaXIvaW5pdHJkICR7RUZJSU1HRElSfQorICAgICAgICBmaQorfQorCitlZmlfaGRkaW1nX3BvcHVsYXRlKCkgeworICAgICAgICBlZmlfcG9wdWxhdGUgJDEKK30KKworcHl0aG9uIGJ1aWxkX2VmaV9jZmcoKSB7CisgICAgcyA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ0dVTU1JQk9PVF9DRkcnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgIGNmZ2ZpbGUgPSBvcGVuKGNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKyAgICBjZmdmaWxlLndyaXRlKCdkZWZhdWx0ICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKyAgICB0aW1lb3V0ID0gZC5nZXRWYXIoJ0dVTU1JQk9PVF9USU1FT1VUJywgVHJ1ZSkKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCd0aW1lb3V0ICVzXG4nICUgdGltZW91dCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCd0aW1lb3V0IDEwXG4nKQorICAgIGNmZ2ZpbGUuY2xvc2UoKQorCisgICAgZm9yIGxhYmVsIGluIGxhYmVscy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBvdmVycmlkZXM6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQorCisgICAgICAgIGVudHJ5ZmlsZSA9ICIlcy8lcy5jb25mIiAlIChzLCBsYWJlbCkKKyAgICAgICAgZC5hcHBlbmRWYXIoIkdVTU1JQk9PVF9FTlRSSUVTIiwgIiAiICsgZW50cnlmaWxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbnRyeWNmZyA9IG9wZW4oZW50cnlmaWxlLCAidyIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuZnVuY0ZhaWxlZCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgKGVudHJ5ZmlsZSkpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBlbnRyeWNmZy53cml0ZSgndGl0bGUgJXNcbicgJSBsYWJlbCkKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ2xpbnV4IC92bWxpbnV6XG4nKQorCisgICAgICAgIGFwcGVuZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0FQUEVORCcsIFRydWUpCisgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgZW50cnljZmcud3JpdGUoJ2luaXRyZCAvaW5pdHJkXG4nKQorICAgICAgICBsYiA9IGxhYmVsCisgICAgICAgIGlmIGxhYmVsID09ICJpbnN0YWxsIjoKKyAgICAgICAgICAgIGxiID0gImluc3RhbGwtZWZpIgorICAgICAgICBlbnRyeWNmZy53cml0ZSgnb3B0aW9ucyBMQUJFTD0lcyAnICUgbGIpCisgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgIGFwcGVuZCA9IHJlcGxhY2Vfcm9vdGZzX3V1aWQoZCwgYXBwZW5kKQorICAgICAgICAgICAgZW50cnljZmcud3JpdGUoJyVzJyAlIGFwcGVuZCkKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ1xuJykKKyAgICAgICAgZW50cnljZmcuY2xvc2UoKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9nemlwbmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2Y2JiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9nemlwbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACitFWFRSQU5BVElWRVBBVEggKz0gInBpZ3otbmF0aXZlIGd6aXAtbmF0aXZlIgorREVQRU5EUyArPSAiZ3ppcC1uYXRpdmUiCisKKyMgdGFyIG1heSBnZXQgcnVuIGJ5IGRvX3VucGFjayBvciBkb19wb3B1bGF0ZV9saWMgd2hpY2ggY291bGQgY2FsbCBnemlwCitkb191bnBhY2tbZGVwZW5kc10gKz0gImd6aXAtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pY2VjYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjhiYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcwpAQCAtMCwwICsxLDMzMyBAQAorIyBJY2VDcmVhbSBkaXN0cmlidXRlZCBjb21waWxpbmcgc3VwcG9ydAorIworIyBTdGFnZXMgZGlyZWN0b3JpZXMgd2l0aCBzeW1saW5rcyBmcm9tIGdjYy9nKysgdG8gaWNlY2MsIGZvciBib3RoCisjIG5hdGl2ZSBhbmQgY3Jvc3MgY29tcGlsZXJzLiBEZXBlbmRpbmcgb24gZWFjaCBjb25maWd1cmUgb3IgY29tcGlsZSwKKyMgdGhlIGRpcmVjdG9yaWVzIGFyZSBhZGRlZCBhdCB0aGUgaGVhZCBvZiB0aGUgUEFUSCBsaXN0IGFuZCBJQ0VDQ19DWFgKKyMgYW5kIElDRUNfQ0MgYXJlIHNldC4KKyMKKyMgRm9yIHRoZSBjcm9zcyBjb21waWxlciwgY3JlYXRlcyBhIHRhci5neiBvZiBvdXIgdG9vbGNoYWluIGFuZCBzZXRzCisjIElDRUNDX1ZFUlNJT04gYWNjb3JkaW5nbHkuCisjCisjIFRoZSBjbGFzcyBub3cgaGFuZGxlcyBhbGwgMyBkaWZmZXJlbnQgY29tcGlsZSAnc3RhZ2VzJyAoaS5lIG5hdGl2ZSAsY3Jvc3Mta2VybmVsIGFuZCB0YXJnZXQpIGNyZWF0aW5nIHRoZQorIyBuZWNlc3NhcnkgZW52aXJvbm1lbnQgdGFyLmd6IGZpbGUgdG8gYmUgdXNlZCBieSB0aGUgcmVtb3RlIG1hY2hpbmVzLgorIyBJdCBhbHNvIHN1cHBvcnRzIG1ldGEtdG9vbGNoYWluIGdlbmVyYXRpb24KKyMKKyMgSWYgSUNFQ0NfUEFUSCBpcyBub3Qgc2V0IGluIGxvY2FsLmNvbmYgdGhlbiB0aGUgY2xhc3Mgd2lsbCB0cnkgdG8gbG9jYXRlIGl0IHVzaW5nICdiYi51dGlscy53aGljaCcKKyMgYnV0IG5vdGhpbmcgaXMgc3VyZSA7KQorIworIyBJZiBJQ0VDQ19FTlZfRVhFQyBpcyBzZXQgaW4gbG9jYWwuY29uZiwgdGhlbiBpdCBzaG91bGQgcG9pbnQgdG8gdGhlIGljZWNjLWNyZWF0ZS1lbnYgc2NyaXB0IHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisjIG9yIHRoZSBkZWZhdWx0IG9uZSBwcm92aWRlZCBieSBpY2VjYy1jcmVhdGUtZW52LmJiIHdpbGwgYmUgdXNlZAorIyAoTk9URSB0aGF0IHRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBzY3JpcHQgbmVlZCBpdCBhbmQgKm5vdCB0aGUgb25lIHRoYXQgY29tZXMgd2l0aCBpY2VjYyoKKyMKKyMgVXNlciBjYW4gc3BlY2lmeSBpZiBzcGVjaWZpYyBwYWNrYWdlcyBvciBwYWNrYWdlcyBiZWxvbmdpbmcgdG8gY2xhc3Mgc2hvdWxkIG5vdCB1c2UgaWNlY2MgdG8gZGlzdHJpYnV0ZQorIyBjb21waWxlIGpvYnMgdG8gcmVtb3RlIG1hY2hpbmVzLCBidXQgaGFuZGxlZCBsb2NhbGx5LCBieSBkZWZpbmluZyBJQ0VDQ19VU0VSX0NMQVNTX0JMIGFuZCBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkwKKyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGluIGxvY2FsLmNvbmYuIEluIGFkZGl0aW9uIHRoZSB1c2VyIGNhbiBmb3JjZSB0byBlbmFibGUgaWNlY2MgZm9yIHBhY2thZ2VzCisjIHdoaWNoIHNldCBhbiBlbXB0eSBQQVJBTExFTF9NQUtFIHZhcmlhYmxlIGJ5IGRlZmluaW5nIElDRUNDX1VTRVJfUEFDS0FHRV9XTC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjRXJyb3IgY2hlY2tpbmcgaXMga2VwdCB0byBtaW5pbXVtIHNvIGRvdWJsZSBjaGVjayBhbnkgcGFyYW1ldGVycyB5b3UgcGFzcyB0byB0aGUgY2xhc3MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQkJfSEFTSEJBU0VfV0hJVEVMSVNUICs9ICJJQ0VDQ19QQVJBTExFTF9NQUtFIElDRUNDX0RJU0FCTEVEIElDRUNDX1VTRVJfUEFDS0FHRV9CTCBJQ0VDQ19VU0VSX0NMQVNTX0JMIElDRUNDX1VTRVJfUEFDS0FHRV9XTCBJQ0VDQ19QQVRIIElDRUNDX0VOVl9FWEVDIgorCitJQ0VDQ19FTlZfRVhFQyA/PSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ljZWNjLWNyZWF0ZS1lbnYiCisKK2RlZiBpY2VjY19kZXBfcHJlcGVuZChkKToKKyAgICAjIElOSElCSVRfREVGQVVMVF9ERVBTIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIHBhdGNoIGNvbW1hbmQuICBXaGV0aGVyIG9yICBub3QKKyAgICAjIHdlIG5lZWQgdGhhdCBidWlsdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHBhdGNoIGZ1bmN0aW9uIC8gY2xhc3MsIG5vdAorICAgICMgdGhlIGFwcGxpY2F0aW9uLgorICAgIGlmIG5vdCBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBGYWxzZSk6CisgICAgICAgIHJldHVybiAiaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUiCisgICAgcmV0dXJuICIiCisKK0RFUEVORFNfcHJlcGVuZCArPSAiJHtAaWNlY2NfZGVwX3ByZXBlbmQoZCl9ICIKKworZGVmIGdldF9jcm9zc19rZXJuZWxfY2MoYmIsZCk6CisgICAga2VybmVsX2NjID0gZC5nZXRWYXIoJ0tFUk5FTF9DQycsIEZhbHNlKQorCisgICAgIyBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBieSB0aGUgc2hlbGwgaWYgbmVjZXNzYXJ5CisgICAgaWYgJ2AnIGluIGtlcm5lbF9jYyBvciAnJCgnIGluIGtlcm5lbF9jYzoKKyAgICAgICAga2VybmVsX2NjID0gb3MucG9wZW4oImVjaG8gJXMiICUga2VybmVsX2NjKS5yZWFkKClbOi0xXQorCisgICAga2VybmVsX2NjID0gZC5leHBhbmQoa2VybmVsX2NjKQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5yZXBsYWNlKCdjY2FjaGUnLCAnJykuc3RyaXAoKQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5zcGxpdCgnICcpWzBdCisgICAga2VybmVsX2NjID0ga2VybmVsX2NjLnN0cmlwKCkKKyAgICByZXR1cm4ga2VybmVsX2NjCisKK2RlZiBnZXRfaWNlY2MoZCk6CisgICAgcmV0dXJuIGQuZ2V0VmFyKCdJQ0VDQ19QQVRIJywgRmFsc2UpIG9yIGJiLnV0aWxzLndoaWNoKG9zLmdldGVudigiUEFUSCIpLCAiaWNlY2MiKQorCitkZWYgY3JlYXRlX3BhdGgoY29tcGlsZXJzLCBiYiwgZCk6CisgICAgIiIiCisgICAgQ3JlYXRlIFN5bWxpbmtzIGZvciB0aGUgaWNlY2MgaW4gdGhlIHN0YWdpbmcgZGlyZWN0b3J5CisgICAgIiIiCisgICAgc3RhZ2luZyA9IG9zLnBhdGguam9pbihkLmV4cGFuZCgnJHtTVEFHSU5HX0JJTkRJUn0nKSwgImljZSIpCisgICAgaWYgaWNjX2lzX2tlcm5lbChiYiwgZCk6CisgICAgICAgIHN0YWdpbmcgKz0gIi1rZXJuZWwiCisKKyAgICAjY2hlY2sgaWYgdGhlIGljZWNjIHBhdGggaXMgc2V0IGJ5IHRoZSB1c2VyCisgICAgaWNlY2MgPSBnZXRfaWNlY2MoZCkKKworICAgICMgQ3JlYXRlIHRoZSBkaXIgaWYgbmVjZXNzYXJ5CisgICAgdHJ5OgorICAgICAgICBvcy5zdGF0KHN0YWdpbmcpCisgICAgZXhjZXB0OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzdGFnaW5nKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBmb3IgY29tcGlsZXIgaW4gY29tcGlsZXJzOgorICAgICAgICBnY2NfcGF0aCA9IG9zLnBhdGguam9pbihzdGFnaW5nLCBjb21waWxlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Muc3RhdChnY2NfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoaWNlY2MsIGdjY19wYXRoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiBzdGFnaW5nCisKK2RlZiB1c2VfaWNjKGJiLGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJQ0VDQ19ESVNBQkxFRCcsIEZhbHNlKSA9PSAiMSI6CisgICAgICAgICMgZG9uJ3QgZXZlbiB0cnkgaXQsIHdoZW4gZXhwbGljaXRseSBkaXNhYmxlZAorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgIyBhbGxhcmNoIHJlY2lwZXMgZG9uJ3QgdXNlIGNvbXBpbGVyCisgICAgaWYgaWNjX2lzX2FsbGFyY2goYmIsIGQpOgorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgc3lzdGVtX2NsYXNzX2JsYWNrbGlzdCA9IFtdCisgICAgdXNlcl9jbGFzc19ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfQ0xBU1NfQkwnLCBGYWxzZSkgb3IgIm5vbmUiKS5zcGxpdCgpCisgICAgcGFja2FnZV9jbGFzc19ibGFja2xpc3QgPSBzeXN0ZW1fY2xhc3NfYmxhY2tsaXN0ICsgdXNlcl9jbGFzc19ibGFja2xpc3QKKworICAgIGZvciBibGFjayBpbiBwYWNrYWdlX2NsYXNzX2JsYWNrbGlzdDoKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcyhibGFjaywgZCk6CisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IGNsYXNzICVzIGZvdW5kIGluIGJsYWNrbGlzdCwgZGlzYWJsZSBpY2VjYyIgJSAocG4sIGJsYWNrKSkKKyAgICAgICAgICAgIHJldHVybiAibm8iCisKKyAgICAjICJzeXN0ZW0iIHJlY2lwZSBibGFja2xpc3QgY29udGFpbnMgYSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgY2FuIG5vdCBkaXN0cmlidXRlIGNvbXBpbGUgdGFza3MKKyAgICAjIGZvciBvbmUgcmVhc29uIG9yIHRoZSBvdGhlcgorICAgICMgdGhpcyBpcyB0aGUgb2xkIGxpc3QgKHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZCBhbnltb3JlLCBiZWNhdXNlIEkgd2FzIGFibGUgdG8gYnVpbGQKKyAgICAjIGFsbCB0aGVzZSB3aXRoIGljZWNjIGVuYWJsZWQpCisgICAgIyBzeXN0ZW1fcGFja2FnZV9ibGFja2xpc3QgPSBbICJ1Y2xpYmMiLCAiZ2xpYmMiLCAiZ2NjIiwgImJpbmQiLCAidS1ib290IiwgImRoY3AtZm9yd2FyZGVyIiwgImVuY2hhbnQiLCAiY29ubm1hbiIsICJvcmJpdDIiIF0KKyAgICAjIHdoZW4gYWRkaW5nIG5ldyBlbnRyeSwgcGxlYXNlIGRvY3VtZW50IHdoeSAoaG93IGl0IGZhaWxlZCkgc28gdGhhdCB3ZSBjYW4gcmUtZXZhbHVhdGUgaXQgbGF0ZXIKKyAgICAjIGUuZy4gd2hlbiB0aGVyZSBpcyBuZXcgdmVyc2lvbgorICAgICMgYnVpbGRpbmcgbGliZ2NjLWluaXRpYWwgd2l0aCBpY2VjYyBmYWlscyB3aXRoIENQUCBzYW5pdHkgY2hlY2sgZXJyb3IgaWYgaG9zdCBzeXNyb290IGNvbnRhaW5zIGNyb3NzIGdjYyBidWlsdCBmb3IgYW5vdGhlciB0YXJnZXQgdHVuZS92YXJpYW50CisgICAgc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ID0gWyJsaWJnY2MtaW5pdGlhbCJdCisgICAgdXNlcl9wYWNrYWdlX2JsYWNrbGlzdCA9IChkLmdldFZhcignSUNFQ0NfVVNFUl9QQUNLQUdFX0JMJywgRmFsc2UpIG9yICIiKS5zcGxpdCgpCisgICAgdXNlcl9wYWNrYWdlX3doaXRlbGlzdCA9IChkLmdldFZhcignSUNFQ0NfVVNFUl9QQUNLQUdFX1dMJywgRmFsc2UpIG9yICIiKS5zcGxpdCgpCisgICAgcGFja2FnZV9ibGFja2xpc3QgPSBzeXN0ZW1fcGFja2FnZV9ibGFja2xpc3QgKyB1c2VyX3BhY2thZ2VfYmxhY2tsaXN0CisKKyAgICBpZiBwbiBpbiBwYWNrYWdlX2JsYWNrbGlzdDoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBmb3VuZCBpbiBibGFja2xpc3QsIGRpc2FibGUgaWNlY2MiICUgcG4pCisgICAgICAgIHJldHVybiAibm8iCisKKyAgICBpZiBwbiBpbiB1c2VyX3BhY2thZ2Vfd2hpdGVsaXN0OgorICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IGZvdW5kIGluIHdoaXRlbGlzdCwgZW5hYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gInllcyIKKworICAgIGlmIGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgRmFsc2UpID09ICIiOgorICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IGhhcyBlbXB0eSBQQVJBTExFTF9NQUtFLCBkaXNhYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgcmV0dXJuICJ5ZXMiCisKK2RlZiBpY2NfaXNfYWxsYXJjaChiYiwgZCk6CisgICAgcmV0dXJuIGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBGYWxzZSkgPT0gImFsbCIKKworZGVmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgIHJldHVybiBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImtlcm5lbCIsIGQpOworCitkZWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgcmV0dXJuIFwKKyAgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiY3Jvc3MiLCBkKSBvciBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm5hdGl2ZSIsIGQpOworCisjIERvbid0IHBvbGx1dGUgYWxsYXJjaCBzaWduYXR1cmVzIHdpdGggVEFSR0VUX0ZQVQoraWNjX3ZlcnNpb25bdmFyZGVwc2V4Y2x1ZGVdICs9ICJUQVJHRVRfRlBVIgorZGVmIGljY192ZXJzaW9uKGJiLCBkKToKKyAgICBpZiB1c2VfaWNjKGJiLCBkKSA9PSAibm8iOgorICAgICAgICByZXR1cm4gIiIKKworICAgIHBhcmFsbGVsID0gZC5nZXRWYXIoJ0lDRUNDX1BBUkFMTEVMX01BS0UnLCBGYWxzZSkgb3IgIiIKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BBUkFMTEVMX01BS0UnLCBGYWxzZSkgPT0gIiIgYW5kIHBhcmFsbGVsOgorICAgICAgICBkLnNldFZhcigiUEFSQUxMRUxfTUFLRSIsIHBhcmFsbGVsKQorCisgICAgaWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgICAgIGFyY2hpdmVfbmFtZSA9ICJsb2NhbC1ob3N0LWVudiIKKyAgICBlbGlmIGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScpID09ICIiOgorICAgICAgICBiYi5mYXRhbChkLmV4cGFuZCgiJHtQTn0iKSwgIiBOVUxMIHByZWZpeCIpCisgICAgZWxzZToKKyAgICAgICAgcHJlZml4ID0gZC5leHBhbmQoJyR7SE9TVF9QUkVGSVh9JyApCisgICAgICAgIGRpc3RybyA9IGQuZXhwYW5kKCcke0RJU1RST30nKQorICAgICAgICB0YXJnZXRfc3lzID0gZC5leHBhbmQoJyR7VEFSR0VUX1NZU30nKQorICAgICAgICBmbG9hdCA9IGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgRmFsc2UpIG9yICJoYXJkIgorICAgICAgICBhcmNoaXZlX25hbWUgPSBwcmVmaXggKyBkaXN0cm8gKyAiLSIgICAgICAgICsgdGFyZ2V0X3N5cyArICItIiArIGZsb2F0CisgICAgICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lICs9ICIta2VybmVsIgorCisgICAgaW1wb3J0IHNvY2tldAorICAgIGljZV9kaXIgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfScpCisgICAgdGFyX2ZpbGUgPSBvcy5wYXRoLmpvaW4oaWNlX2RpciwgJ2ljZScsIGFyY2hpdmVfbmFtZSArICItQFZFUlNJT05ALSIgKyBzb2NrZXQuZ2V0aG9zdG5hbWUoKSArICcudGFyLmd6JykKKworICAgIHJldHVybiB0YXJfZmlsZQorCitkZWYgaWNjX3BhdGgoYmIsZCk6CisgICAgaWYgdXNlX2ljYyhiYiwgZCkgPT0gIm5vIjoKKyAgICAgICAgIyBkb24ndCBjcmVhdGUgdW5uZWNlc3NhcnkgZGlyZWN0b3JpZXMgd2hlbiBpY2VjYyBpcyBkaXNhYmxlZAorICAgICAgICByZXR1cm4KKworICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICByZXR1cm4gY3JlYXRlX3BhdGgoIFtnZXRfY3Jvc3Nfa2VybmVsX2NjKGJiLGQpLCBdLCBiYiwgZCkKKworICAgIGVsc2U6CisgICAgICAgIHByZWZpeCA9IGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScpCisgICAgICAgIHJldHVybiBjcmVhdGVfcGF0aCggW3ByZWZpeCsiZ2NjIiwgcHJlZml4KyJnKysiXSwgYmIsIGQpCisKK2RlZiBpY2NfZ2V0X2V4dGVybmFsX3Rvb2woYmIsIGQsIHRvb2wpOgorICAgIGV4dGVybmFsX3Rvb2xjaGFpbl9iaW5kaXIgPSBkLmV4cGFuZCgnJHtFWFRFUk5BTF9UT09MQ0hBSU59JHtiaW5kaXJfY3Jvc3N9JykKKyAgICB0YXJnZXRfcHJlZml4ID0gZC5leHBhbmQoJyR7VEFSR0VUX1BSRUZJWH0nKQorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZXh0ZXJuYWxfdG9vbGNoYWluX2JpbmRpciwgJyVzJXMnICUgKHRhcmdldF9wcmVmaXgsIHRvb2wpKQorCisjIERvbid0IHBvbGx1dGUgbmF0aXZlIHNpZ25hdHVyZXMgd2l0aCB0YXJnZXQgVFVORV9QS0dBUkNIIHRocm91Z2ggU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOCitpY2NfZ2V0X3Rvb2xbdmFyZGVwc2V4Y2x1ZGVdICs9ICJTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4iCitkZWYgaWNjX2dldF90b29sKGJiLCBkLCB0b29sKToKKyAgICBpZiBpY2NfaXNfbmF0aXZlKGJiLCBkKToKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLndoaWNoKG9zLmdldGVudigiUEFUSCIpLCB0b29sKQorICAgIGVsaWYgaWNjX2lzX2tlcm5lbChiYiwgZCk6CisgICAgICAgIHJldHVybiBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgZ2V0X2Nyb3NzX2tlcm5lbF9jYyhiYiwgZCkpCisgICAgZWxzZToKKyAgICAgICAgaWNlX2RpciA9IGQuZXhwYW5kKCcke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0nKQorICAgICAgICB0YXJnZXRfc3lzID0gZC5leHBhbmQoJyR7VEFSR0VUX1NZU30nKQorICAgICAgICB0b29sX2JpbiA9IG9zLnBhdGguam9pbihpY2VfZGlyLCAiJXMtJXMiICUgKHRhcmdldF9zeXMsIHRvb2wpKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0b29sX2Jpbik6CisgICAgICAgICAgICByZXR1cm4gdG9vbF9iaW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dGVybmFsX3Rvb2xfYmluID0gaWNjX2dldF9leHRlcm5hbF90b29sKGJiLCBkLCB0b29sKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZXh0ZXJuYWxfdG9vbF9iaW4pOgorICAgICAgICAgICAgICAgIHJldHVybiBleHRlcm5hbF90b29sX2JpbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKworZGVmIGljY19nZXRfYW5kX2NoZWNrX3Rvb2woYmIsIGQsIHRvb2wpOgorICAgICMgQ2hlY2sgdGhhdCBnKysgb3IgZ2NjIGlzIG5vdCBhIHN5bWJvbGljIGxpbmsgdG8gaWNlY2MgYmluYXJ5IGluCisgICAgIyBQQVRIIG9yIGljZWNjLWNyZWF0ZS1lbnYgc2NyaXB0IHdpbGwgc2lsZW50bHkgY3JlYXRlIGFuIGludmFsaWQKKyAgICAjIGNvbXBpbGVyIGVudmlyb25tZW50IHBhY2thZ2UuCisgICAgdCA9IGljY19nZXRfdG9vbChiYiwgZCwgdG9vbCkKKyAgICBpZiB0IGFuZCBvcy5wb3BlbigicmVhZGxpbmsgLWYgJXMiICUgdCkucmVhZCgpWzotMV0gPT0gZ2V0X2ljZWNjKGQpOgorICAgICAgICBiYi5lcnJvcigiJXMgaXMgYSBzeW1saW5rIHRvICVzIGluIFBBVEggYW5kIHRoaXMgcHJldmVudHMgaWNlY2MgZnJvbSB3b3JraW5nIiAlICh0LCBnZXRfaWNlY2MoZCkpKQorICAgICAgICByZXR1cm4gIiIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gdAorCit3YWl0X2Zvcl9maWxlKCkgeworICAgIGxvY2FsIFRJTUVfRUxBUFNFRD0wCisgICAgbG9jYWwgRklMRV9UT19URVNUPSQxCisgICAgbG9jYWwgVElNRU9VVD0kMgorICAgIHVudGlsIFsgLWYgIiRGSUxFX1RPX1RFU1QiIF0KKyAgICBkbworICAgICAgICBUSU1FX0VMQVBTRUQ9YGV4cHIgJFRJTUVfRUxBUFNFRCArIDFgCisgICAgICAgIGlmIFsgJFRJTUVfRUxBUFNFRCAtZ3QgJFRJTUVPVVQgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBzbGVlcCAxCisgICAgZG9uZQorfQorCitkZWYgc2V0X2ljZWNjX2VudigpOgorICAgICMgZHVtbXkgcHl0aG9uIHZlcnNpb24gb2Ygc2V0X2ljZWNjX2VudgorICAgIHJldHVybgorCitzZXRfaWNlY2NfZW52KCkgeworICAgIGlmIFsgIiR7QHVzZV9pY2MoYmIsIGQpfSIgPSAibm8iIF0KKyAgICB0aGVuCisgICAgICAgIHJldHVybgorICAgIGZpCisgICAgSUNFQ0NfVkVSU0lPTj0iJHtAaWNjX3ZlcnNpb24oYmIsIGQpfSIKKyAgICBpZiBbICJ4JHtJQ0VDQ19WRVJTSU9OfSIgPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBjb3VsZCBub3QgZ2V0IElDRUNDX1ZFUlNJT04iCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBJQ0VfUEFUSD0iJHtAaWNjX3BhdGgoYmIsIGQpfSIKKyAgICBpZiBbICJ4JHtJQ0VfUEFUSH0iID0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogY291bGQgbm90IGdldCBJQ0VfUEFUSCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRUNDX0NDPSIke0BpY2NfZ2V0X2FuZF9jaGVja190b29sKGJiLCBkLCAiZ2NjIil9IgorICAgIElDRUNDX0NYWD0iJHtAaWNjX2dldF9hbmRfY2hlY2tfdG9vbChiYiwgZCwgImcrKyIpfSIKKyAgICAjIGNhbm5vdCB1c2UgaWNjX2dldF9hbmRfY2hlY2tfdG9vbCBoZXJlIGJlY2F1c2UgaXQgYXNzdW1lcyBhcyB3aXRob3V0IHRhcmdldF9zeXMgcHJlZml4CisgICAgSUNFQ0NfV0hJQ0hfQVM9IiR7QGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAnYXMnKX0iCisgICAgaWYgWyAhIC14ICIke0lDRUNDX0NDfSIgLW8gISAteCAiJHtJQ0VDQ19DWFh9IiBdCisgICAgdGhlbgorICAgICAgICBiYndhcm4gIkNhbm5vdCB1c2UgaWNlY2M6IGNvdWxkIG5vdCBnZXQgSUNFQ0NfQ0Mgb3IgSUNFQ0NfQ1hYIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFX1ZFUlNJT049YCRJQ0VDQ19DQyAtZHVtcHZlcnNpb25gCisgICAgSUNFQ0NfVkVSU0lPTj1gZWNobyAke0lDRUNDX1ZFUlNJT059IHwgc2VkIC1lICJzL0BWRVJTSU9OQC8kSUNFX1ZFUlNJT04vZyJgCisgICAgaWYgWyAhIC14ICIke0lDRUNDX0VOVl9FWEVDfSIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBpbnZhbGlkIElDRUNDX0VOVl9FWEVDIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFQ0NfQVM9ImAke0lDRUNDX0NDfSAtcHJpbnQtcHJvZy1uYW1lPWFzYCIKKyAgICAjIGZvciB0YXJnZXQgcmVjaXBlcyBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBsaWtlOgorICAgICMgL09FL3RtcC1lZ2xpYmMvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWJleGVjL2FybTkyMHR0LW9lLWxpbnV4LWdudWVhYmkvZ2NjL2FybS1vZS1saW51eC1nbnVlYWJpLzQuOC4yL2FzCisgICAgIyBhbmQganVzdCAiYXMiIGZvciBuYXRpdmUsIGlmIGl0IHJldHVybnMgImFzIiBpbiBjdXJyZW50IGRpcmVjdG9yeSAoZm9yIHdoYXRldmVyIHJlYXNvbikgdXNlICJhcyIgZnJvbSBQQVRICisgICAgaWYgWyAiYGRpcm5hbWUgIiR7SUNFQ0NfQVN9ImAiID0gIi4iIF0KKyAgICB0aGVuCisgICAgICAgIElDRUNDX0FTPSIke0lDRUNDX1dISUNIX0FTfSIKKyAgICBmaQorCisgICAgaWYgWyAhIC1mICIke0lDRUNDX1ZFUlNJT059LmRvbmUiIF0KKyAgICB0aGVuCisgICAgICAgIG1rZGlyIC1wICJgZGlybmFtZSAiJHtJQ0VDQ19WRVJTSU9OfSJgIgorCisgICAgICAgICMgdGhlIElDRUNDX1ZFUlNJT04gZ2VuZXJhdGlvbiBzdGVwIG11c3QgYmUgbG9ja2VkIGJ5IGEgbXV0ZXgKKyAgICAgICAgIyBpbiBvcmRlciB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucworICAgICAgICBpZiBmbG9jayAtbiAiJHtJQ0VDQ19WRVJTSU9OfS5sb2NrIiBcCisgICAgICAgICAgICAke0lDRUNDX0VOVl9FWEVDfSAiJHtJQ0VDQ19DQ30iICIke0lDRUNDX0NYWH0iICIke0lDRUNDX0FTfSIgIiR7SUNFQ0NfVkVSU0lPTn0iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHRvdWNoICIke0lDRUNDX1ZFUlNJT059LmRvbmUiCisgICAgICAgIGVsaWYgWyAhIHdhaXRfZm9yX2ZpbGUgIiR7SUNFQ0NfVkVSU0lPTn0uZG9uZSIgMzAgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICAjIGxvY2tpbmcgZmFpbGVkIHNvIHdhaXQgZm9yICR7SUNFQ0NfVkVSU0lPTn0uZG9uZSB0byBhcHBlYXIKKyAgICAgICAgICAgIGJid2FybiAiVGltZW91dCB3YWl0aW5nIGZvciAke0lDRUNDX1ZFUlNJT059LmRvbmUiCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgZXhwb3J0IElDRUNDX1ZFUlNJT04gSUNFQ0NfQ0MgSUNFQ0NfQ1hYCisgICAgZXhwb3J0IFBBVEg9IiRJQ0VfUEFUSDokUEFUSCIKKyAgICBleHBvcnQgQ0NBQ0hFX1BBVEg9IiRQQVRIIgorCisgICAgYmJub3RlICJVc2luZyBpY2VjYyIKK30KKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19jb21waWxlX2tlcm5lbG1vZHVsZXNfcHJlcGVuZCgpIHsKKyAgICBzZXRfaWNlY2NfZW52Cit9CisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBzZXRfaWNlY2NfZW52Cit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExN2NjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1idWlsZGluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDY5IEBACisjCisjIFdyaXRlcyBidWlsZCBpbmZvcm1hdGlvbiB0byB0YXJnZXQgZmlsZXN5c3RlbSBvbiAvZXRjL2J1aWxkCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3I6IEFsZWphbmRybyBFbmVkaW5vIEhlcm5hbmRleiBTYW1hbmllZ28gPGFsZWphbmRyby5oZXJuYW5kZXpAaW50ZWwuY29tPgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSBDT1BZSU5HLk1JVCBmb3IgZGV0YWlscworIworIyBVc2FnZTogYWRkIElOSEVSSVQgKz0gImltYWdlLWJ1aWxkaW5mbyIgdG8geW91ciBjb25mIGZpbGUKKyMKKworIyBEZXNpcmVkIHZhcmlhYmxlcyB0byBkaXNwbGF5IAorSU1BR0VfQlVJTERJTkZPX1ZBUlMgPz0gIkRJU1RSTyBESVNUUk9fVkVSU0lPTiIKKworIyBGcm9tIGJ1aWxkaGlzdG9yeS5iYmNsYXNzCitkZWYgaW1hZ2VfYnVpbGRpbmZvX291dHB1dHZhcnModmFycywgbGlzdHZhcnMsIGQpOiAKKyAgICB2YXJzID0gdmFycy5zcGxpdCgpCisgICAgbGlzdHZhcnMgPSBsaXN0dmFycy5zcGxpdCgpCisgICAgcmV0ID0gIiIKKyAgICBmb3IgdmFyIGluIHZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiAoZC5nZXRWYXJGbGFnKHZhciwgJ3R5cGUnKSA9PSAibGlzdCIpOgorICAgICAgICAgICAgdmFsdWUgPSBvZS51dGlscy5zcXVhc2hzcGFjZXModmFsdWUpCisgICAgICAgIHJldCArPSAiJXMgPSAlc1xuIiAlICh2YXIsIHZhbHVlKQorICAgIHJldHVybiByZXQucnN0cmlwKCdcbicpCisKKyMgR2V0cyBnaXQgYnJhbmNoJ3Mgc3RhdHVzIChjbGVhbiBvciBkaXJ0eSkKK2RlZiBnZXRfbGF5ZXJfZ2l0X3N0YXR1cyhwYXRoKToKKyAgICBmID0gb3MucG9wZW4oImNkICVzOyBnaXQgZGlmZiAtLXN0YXQgMj4mMSB8IHRhaWwgLW4gMSIgJSBwYXRoKQorICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIGlmIGYuY2xvc2UoKSBpcyBOb25lOgorICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiAiLS0gbW9kaWZpZWQiCisgICAgcmV0dXJuICIiCisKKyMgUmV0dXJucyBsYXllciByZXZpc2lvbnMgYWxvbmcgd2l0aCB0aGVpciByZXNwZWN0aXZlIHN0YXR1cworZGVmIGdldF9sYXllcl9yZXZzKGQpOgorICAgIGxheWVycyA9IChkLmdldFZhcigiQkJMQVlFUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG1lZGFkYXRhX3JldnMgPSBbIiUtMTdzID0gJXM6JXMgJXMiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKKyAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChpLCBOb25lKS5zdHJpcCgpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihpLCBOb25lKSwgXAorICAgICAgICBnZXRfbGF5ZXJfZ2l0X3N0YXR1cyhpKSkgXAorICAgICAgICAgICAgZm9yIGkgaW4gbGF5ZXJzXQorICAgIHJldHVybiAnXG4nLmpvaW4obWVkYWRhdGFfcmV2cykKKworZGVmIGJ1aWxkaW5mb190YXJnZXQoZCk6CisgICAgICAgICMgR2V0IGNvbnRleHQKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICMgU2luZ2xlIGFuZCBsaXN0IHZhcmlhYmxlcyB0byBiZSByZWFkCisgICAgICAgIHZhcnMgPSAoZC5nZXRWYXIoIklNQUdFX0JVSUxESU5GT19WQVJTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGxpc3R2YXJzID0gKGQuZ2V0VmFyKCJJTUFHRV9CVUlMRElORk9fTFZBUlMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgcmV0dXJuIGltYWdlX2J1aWxkaW5mb19vdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKQorCisjIFdyaXRlIGJ1aWxkIGluZm9ybWF0aW9uIHRvIHRhcmdldCBmaWxlc3lzdGVtCitidWlsZGluZm8gKCkgeworY2F0ID4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9idWlsZCA8PCBFTkQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWlsZCBDb25maWd1cmF0aW9uOiAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyR7QGJ1aWxkaW5mb190YXJnZXQoZCl9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGF5ZXIgUmV2aXNpb25zOiAgICAgIHwgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiske0BnZXRfbGF5ZXJfcmV2cyhkKX0KK0VORAorfQorCitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gImJ1aWxkaW5mbzsiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdhMTMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDE4IEBACisKK0FVVE9fU1lTTElOVVhDRkcgPSAiMSIKK0lOSVRSRF9JTUFHRSA/PSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIKK0lOSVRSRCA/PSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lOSVRSRF9JTUFHRX0tJHtNQUNISU5FfS5jcGlvLmd6IgorU1lTTElOVVhfUk9PVCA9ICJyb290PS9kZXYvcmFtMCIKK1NZU0xJTlVYX1RJTUVPVVQgPz0gIjUwIgorU1lTTElOVVhfTEFCRUxTID89ICJib290IGluc3RhbGwiCitMQUJFTFNfYXBwZW5kID0gIiAke1NZU0xJTlVYX0xBQkVMU30gIgorCitST09URlMgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfS5leHQ0IgorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke0lOSVRSRF9JTUFHRX06ZG9fcm9vdGZzIgorZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtQTn06ZG9fcm9vdGZzIgorCitpbmhlcml0IGJvb3RpbWcKKworSU1BR0VfVFlQRURFUF9saXZlID0gImV4dDQiCitJTUFHRV9UWVBFU19NQVNLRUQgKz0gImxpdmUiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NWE4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1ta2xpYnMuYmJjbGFzcwpAQCAtMCwwICsxLDcxIEBACitkb19yb290ZnNbZGVwZW5kc10gKz0gIm1rbGlicy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJta2xpYnNfb3B0aW1pemVfaW1hZ2U7ICIKKworbWtsaWJzX29wdGltaXplX2ltYWdlX2RvaXQoKSB7CisJcm0gLXJmICR7V09SS0RJUn0vbWtsaWJzCisJbWtkaXIgLXAgJHtXT1JLRElSfS9ta2xpYnMvZGVzdAorCWNkICR7SU1BR0VfUk9PVEZTfQorCWR1IC1icyA+ICR7V09SS0RJUn0vbWtsaWJzL2R1LmJlZm9yZS5ta2xpYnMudHh0CisJZm9yIGkgaW4gYGZpbmQgLmA7IGRvIGZpbGUgJGk7IGRvbmUgXAorCQl8IGdyZXAgRUxGIFwKKwkJfCBncmVwICJMU0IgKmV4ZWN1dGFibGUiIFwKKwkJfCBncmVwICJkeW5hbWljYWxseSBsaW5rZWQiIFwKKwkJfCBzZWQgInMvOi4qLy8iIFwKKwkJfCBzZWQgInMrXlwuLysrIiBcCisJCT4gJHtXT1JLRElSfS9ta2xpYnMvZXhlY3V0YWJsZXMubGlzdAorCisJY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorCQlwb3dlcnBjIHwgbWlwcyB8IG1pcHNlbCB8IG1pY3JvYmxhemUgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLnNvLjEiCisJCQk7OworCQlwb3dlcnBjNjQpCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQ2NC5zby4xIgorCQkJOzsKKwkJeDg2XzY0KQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorCQkJOzsKKwkJaTU4NiApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbGludXguc28uMiIKKwkJCTs7CisJCWFybSApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbGludXguc28uMyIKKwkJCTs7CisJCSogKQorCQkJZHluYW1pY19sb2FkZXI9Ii91bmtub3duX2R5bmFtaWNfbGlua2VyIgorCQkJOzsKKwllc2FjCisKKwlta2xpYnMgLXYgXAorCQktLWxkbGliICR7ZHluYW1pY19sb2FkZXJ9IFwKKwkJLS1saWJkaXIgJHtiYXNlbGlifSBcCisJCS0tc3lzcm9vdCAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9IFwKKwkJLS1nY2Mtb3B0aW9ucyAiLS1zeXNyb290PSR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0iIFwKKwkJLS1yb290ICR7SU1BR0VfUk9PVEZTfSBcCisJCS0tdGFyZ2V0IGBlY2hvICR7VEFSR0VUX1BSRUZJWH0gfCBzZWQgJ3MvLSQvLycgYCBcCisJCS1kICR7V09SS0RJUn0vbWtsaWJzL2Rlc3QgXAorCQlgY2F0ICR7V09SS0RJUn0vbWtsaWJzL2V4ZWN1dGFibGVzLmxpc3RgCisKKwljZCAke1dPUktESVJ9L21rbGlicy9kZXN0CisJZm9yIGkgaW4gKgorCWRvCisJCWNwICRpIGBmaW5kICR7SU1BR0VfUk9PVEZTfSAtbmFtZSAkaWAKKwlkb25lCisKKwljZCAke0lNQUdFX1JPT1RGU30KKwlkdSAtYnMgPiAke1dPUktESVJ9L21rbGlicy9kdS5hZnRlci5ta2xpYnMudHh0CisKKwllY2hvIHJvb3RmcyBzaXplIGJlZm9yZSBta2xpYnMgb3B0aW1pemF0aW9uOiBgY2F0ICR7V09SS0RJUn0vbWtsaWJzL2R1LmJlZm9yZS5ta2xpYnMudHh0YAorCWVjaG8gcm9vdGZzIHNpemUgYWZ0ZXIgbWtsaWJzIG9wdGltaXphdGlvbjogYGNhdCAke1dPUktESVJ9L21rbGlicy9kdS5hZnRlci5ta2xpYnMudHh0YAorfQorCitta2xpYnNfb3B0aW1pemVfaW1hZ2UoKSB7CisJZm9yIGltZyBpbiAke01LTElCU19PUFRJTUlaRURfSU1BR0VTfQorCWRvCisJCWlmIFsgIiR7aW1nfSIgPSAiJHtQTn0iIF0gfHwgWyAiJHtpbWd9IiA9ICJhbGwiIF0KKwkJdGhlbgorCQkJbWtsaWJzX29wdGltaXplX2ltYWdlX2RvaXQKKwkJCWJyZWFrCisJCWZpCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1wcmVsaW5rLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiYjNhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1wcmVsaW5rLmJiY2xhc3MKQEAgLTAsMCArMSwzMyBAQAorZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJwcmVsaW5rLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gInByZWxpbmtfaW1hZ2U7ICIKKworcHJlbGlua19pbWFnZSAoKSB7CisjCWV4cG9ydCBQU0VVRE9fREVCVUc9NAorIwkvYmluL2VudiB8IC9iaW4vZ3JlcCBQU0VVRE8KKyMJZWNobyAiTERfTElCUkFSWV9QQVRIPSRMRF9MSUJSQVJZX1BBVEgiCisjCWVjaG8gIkxEX1BSRUxPQUQ9JExEX1BSRUxPQUQiCisKKwlwcmVfcHJlbGlua19zaXplPWBkdSAta3MgJHtJTUFHRV9ST09URlN9IHwgYXdrICd7c2l6ZSA9ICQxIDsgcHJpbnQgc2l6ZSB9J2AKKwllY2hvICJTaXplIGJlZm9yZSBwcmVsaW5raW5nICRwcmVfcHJlbGlua19zaXplLiIKKworCSMgV2UgbmVlZCBhIHByZWxpbmsgY29uZiBvbiB0aGUgZmlsZXN5c3RlbSwgYWRkIG9uZSBpZiBpdCdzIG1pc3NpbmcKKwlpZiBbICEgLWUgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYgXTsgdGhlbgorCQljcCAke1NUQUdJTkdfRElSX05BVElWRX0ke3N5c2NvbmZkaXJfbmF0aXZlfS9wcmVsaW5rLmNvbmYgXAorCQkJJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKwkJZHVtbXlfcHJlbGlua19jb25mPXRydWU7CisJZWxzZQorCQlkdW1teV9wcmVsaW5rX2NvbmY9ZmFsc2U7CisJZmkKKworCSMgcHJlbGluayEKKwkke1NUQUdJTkdfRElSX05BVElWRX0ke3NiaW5kaXJfbmF0aXZlfS9wcmVsaW5rIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gLWFtUiAtTiAtYyAke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZgorCisJIyBSZW1vdmUgdGhlIHByZWxpbmsuY29uZiBpZiB3ZSBoYWQgdG8gYWRkIGl0LgorCWlmIFsgIiRkdW1teV9wcmVsaW5rX2NvbmYiID0gInRydWUiIF07IHRoZW4KKwkJcm0gLWYgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKwlmaQorCisJcHJlX3ByZWxpbmtfc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAne3NpemUgPSAkMSA7IHByaW50IHNpemUgfSdgCisJZWNobyAiU2l6ZSBhZnRlciBwcmVsaW5raW5nICRwcmVfcHJlbGlua19zaXplLiIKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2Utc3dhYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MzE4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2Utc3dhYi5iYmNsYXNzCkBAIC0wLDAgKzEsOTQgQEAKK0hPU1RfREFUQSA/PSAiJHtUTVBESVJ9L2hvc3QtY29udGFtaW5hdGlvbi1kYXRhLyIKK1NXQUJCRVJfUkVQT1JUID89ICIke0xPR19ESVJ9L3N3YWJiZXIvIgorU1dBQkJFUl9MT0dTID89ICIke0xPR19ESVJ9L2NvbnRhbWluYXRpb24tbG9ncyIKK1RSQUNFX0xPR0RJUiA/PSAiJHtTV0FCQkVSX0xPR1N9LyR7UEFDS0FHRV9BUkNIfSIKK1RSQUNFX0xPR0ZJTEUgPSAiJHtUUkFDRV9MT0dESVJ9LyR7UE59LSR7UFZ9IgorCitTV0FCX09SSUdfVEFTSyA6PSAiJHtCQl9ERUZBVUxUX1RBU0t9IgorQkJfREVGQVVMVF9UQVNLID0gImdlbmVyYXRlX3N3YWJiZXJfcmVwb3J0IgorCisjIFNldmVyYWwgcmVjaXBlcyBkb24ndCBidWlsZCB3aXRoIHBhcmFsbGVsIG1ha2Ugd2hlbiBydW4gdW5kZXIgc3RyYWNlCisjIElkZWFsbHkgdGhlc2Ugc2hvdWxkIGJlIGZpeGVkIGJ1dCBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlIGRpc2FibGUgcGFyYWxsZWwKKyMgYnVpbGRzIGZvciB0cm91Ymxlc29tZSByZWNpcGVzCitQQVJBTExFTF9NQUtFX3BuLW9wZW5zc2wgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbGliYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdsaWItMi4wID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGlieG1sMiA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXJlYWRsaW5lID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tdXRpbC1saW51eCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJpbnV0aWxzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tYmlzb24gPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1jbWFrZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWVsZnV0aWxzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2NjID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2NjLXJ1bnRpbWUgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1tNCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLW9wa2cgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wa2djb25maWcgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wcmVsaW5rID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcnBtID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tdGNsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tYmVlY3J5cHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1jdXJsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ21wID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGlibXBjID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGlieHNsdCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWx6byA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXBvcHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1saW51eC13cnMgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1saWJnY3J5cHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1ncGdtZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXVkZXYgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbnV0bHMgPSAiIgorCitweXRob24oKSB7CisgICAgIyBOT1RFOiBJdCBtaWdodCBiZSB1c2VmdWwgdG8gZGV0ZWN0IGhvc3QgaW5mZWN0aW9uIG9uIG5hdGl2ZSBhbmQgY3Jvc3MKKyAgICAjIHBhY2thZ2VzIGJ1dCBhcyBpdCB0dXJucyBvdXQgdG8gYmUgcHJldHR5IGhhcmQgdG8gZG8gdGhpcyBmb3IgYWxsIG5hdGl2ZQorICAgICMgYW5kIGNyb3NzIHBhY2thZ2VzIHdoaWNoIGFyZW4ndCBzd2FiYmVyLW5hdGl2ZSBvciBvbmUgb2YgaXRzIGRlcGVuZGVuY2llcworICAgICMgSSBoYXZlIGlnbm9yZWQgdGhlbSBmb3Igbm93Li4uCisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkZXBzID0gKGQuZ2V0VmFyRmxhZygnZG9fc2V0c2NlbmUnLCAnZGVwZW5kcycpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGRlcHMuYXBwZW5kKCdzdHJhY2UtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3NldHNjZW5lJywgJ2RlcGVuZHMnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgbG9nZGlyID0gZC5leHBhbmQoIiR7VFJBQ0VfTE9HRElSfSIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dkaXIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoJ1NUUkFDRUZVTkMnLCAnJykKK30KKworU1RSQUNFUElEID0gIiR7QG9zLmdldHBpZCgpfSIKK1NUUkFDRUZVTkMgPSAiaW1hZ2Vzd2FiX2F0dGFjaHN0cmFjZSIKKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiJHtTVFJBQ0VGVU5DfSIKK2RvX2NvbXBpbGVbcHJlZnVuY3NdICs9ICIke1NUUkFDRUZVTkN9IgorCitpbWFnZXN3YWJfYXR0YWNoc3RyYWNlICgpIHsKKwlTVFJBQ0U9YHdoaWNoIHN0cmFjZWAKKworCWlmIFsgLXggIiRTVFJBQ0UiIF07IHRoZW4KKwkJc3dhYmJlci1zdHJhY2UtYXR0YWNoICIkU1RSQUNFIC1mIC1vICR7VFJBQ0VfTE9HRklMRX0tJHtCQl9DVVJSRU5UVEFTS30ubG9nIC1lIHRyYWNlPW9wZW4sZXhlY3ZlIC1wICR7U1RSQUNFUElEfSIgIiR7VFJBQ0VfTE9HRklMRX0tdHJhY2VhdHRhY2gtJHtCQl9DVVJSRU5UVEFTS30ubG9nIgorCWZpCit9CisKK2RvX2dlbmVyYXRlX3N3YWJiZXJfcmVwb3J0ICgpIHsKKworCXVwZGF0ZV9kaXN0cm8gJHtIT1NUX0RBVEF9CisKKwkjIFN3YWJiZXIgY2FuJ3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHVzCisJbWtkaXIgLXAgJHtTV0FCQkVSX1JFUE9SVH0KKworCVJFUE9SVFNUQU1QPSR7U1dBQl9PUklHX1RBU0t9LWBkYXRlICslMm0lMmQlMkglMk0lWWAKKworCWlmIFsgYHdoaWNoIGNjYWNoZWAgXSA7IHRoZW4KKwkJQ0NBQ0hFX0RJUj1gKCBjY2FjaGUgLXMgfCBncmVwICJjYWNoZSBkaXJlY3RvcnkiIHwgZ3JlcCAtbyAnW14gXSokJyAyPiAvZGV2L251bGwgKWAKKyAJZmkKKworCWlmIFsgIiQobHMgLUEgJHtIT1NUX0RBVEF9KSIgXTsgdGhlbgorCQllY2hvICJHZW5lcmF0aW5nIHN3YWJiZXIgcmVwb3J0IgorCQlzd2FiYmVyIC1kICR7SE9TVF9EQVRBfSAtbCAke1NXQUJCRVJfTE9HU30gLW8gJHtTV0FCQkVSX1JFUE9SVH0vcmVwb3J0LSR7UkVQT1JUU1RBTVB9LnR4dCAtciAke1NXQUJCRVJfUkVQT1JUfS9leHRyYV9yZXBvcnQtJHtSRVBPUlRTVEFNUH0udHh0IC1jIGFsbCAtcCAke1RPUERJUn0gLWYgJHtPRVJPT1R9L21ldGEvY29uZi9zd2FiYmVyICR7VE9QRElSfSAke09FUk9PVH0gJHtDQ0FDSEVfRElSfQorCWVsc2UKKwkJZWNobyAiTm8gaG9zdCBkYXRhLCBjYW5ub3QgZ2VuZXJhdGUgc3dhYmJlciByZXBvcnQuIgorCWZpCit9CithZGR0YXNrIGdlbmVyYXRlX3N3YWJiZXJfcmVwb3J0IGFmdGVyIGRvXyR7U1dBQl9PUklHX1RBU0t9Citkb19nZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydFtkZXBlbmRzXSA9ICJzd2FiYmVyLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2Utdm0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjMyNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MKQEAgLTAsMCArMSw0OSBAQAorCitTWVNMSU5VWF9QUk9NUFQgPz0gIjAiCitTWVNMSU5VWF9MQUJFTFMgPSAiYm9vdCIKK0xBQkVMU19hcHBlbmQgPSAiICR7U1lTTElOVVhfTEFCRUxTfSAiCisKKyMgVXNpbmcgYW4gaW5pdHJhbWZzIGlzIG9wdGlvbmFsLiBFbmFibGUgaXQgYnkgc2V0dGluZyBJTklUUkRfSU1BR0UuCitJTklUUkRfSU1BR0UgPz0gIiIKK0lOSVRSRCA/PSAiJHtAJyR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0V9LSR7TUFDSElORX0uY3Bpby5neicgaWYgJyR7SU5JVFJEX0lNQUdFfScgZWxzZSAnJ30iCitkb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiJHtAJyR7SU5JVFJEX0lNQUdFfTpkb19yb290ZnMnIGlmICcke0lOSVRSRF9JTUFHRX0nIGVsc2UgJyd9IgorCisjIG5lZWQgdG8gZGVmaW5lIHRoZSBkZXBlbmRlbmN5IGFuZCB0aGUgUk9PVEZTIGZvciBkaXJlY3RkaXNrCitkb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiJHtQTn06ZG9fcm9vdGZzIgorUk9PVEZTID89ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0uZXh0NCIKKworIyBjcmVhdGluZyBWTSBpbWFnZXMgcmVsaWVzIG9uIGhhdmluZyBhIGhkZGltZyBzbyBlbnN1cmUgd2UgaW5oZXJpdCBpdCBoZXJlLgoraW5oZXJpdCBib290LWRpcmVjdGRpc2sKKworSU1BR0VfVFlQRURFUF92bWRrID0gImV4dDQiCitJTUFHRV9UWVBFREVQX3ZkaSA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF9xY293MiA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJ2bWRrIHZkaSBxY293MiIKKworY3JlYXRlX3ZtZGtfaW1hZ2UgKCkgeworICAgIHFlbXUtaW1nIGNvbnZlcnQgLU8gdm1kayAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS52bWRrCisgICAgbG4gLXNmICR7SU1BR0VfTkFNRX0udm1kayAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS52bWRrCit9CisKK2NyZWF0ZV92ZGlfaW1hZ2UgKCkgeworICAgIHFlbXUtaW1nIGNvbnZlcnQgLU8gdmRpICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnZkaQorICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnZkaSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS52ZGkKK30KKworY3JlYXRlX3Fjb3cyX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHFjb3cyICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnFjb3cyCisgICAgbG4gLXNmICR7SU1BR0VfTkFNRX0ucWNvdzIgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0ucWNvdzIKK30KKworcHl0aG9uIGRvX3ZtaW1nKCkgeworICAgIGlmICd2bWRrJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV92bWRrX2ltYWdlJywgZCkKKyAgICBpZiAndmRpJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV92ZGlfaW1hZ2UnLCBkKQorICAgIGlmICdxY293MicgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfcWNvdzJfaW1hZ2UnLCBkKQorfQorCithZGR0YXNrIHZtaW1nIGFmdGVyIGRvX2Jvb3RkaXJlY3RkaXNrIGJlZm9yZSBkb19idWlsZAorZG9fdm1pbWdbZGVwZW5kc10gKz0gInFlbXUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3ZDY0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsNTA0IEBACitpbmhlcml0IHJvb3Rmc18ke0lNQUdFX1BLR1RZUEV9CisKK2luaGVyaXQgcG9wdWxhdGVfc2RrX2V4dAorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgKz0gIiR7UEFDS0FHRV9JTlNUQUxMfSIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSArPSAiJHtQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFl9IgorUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQgKz0gInJvb3Rmc19zeXNyb290X3JlbGF0aXZlbGlua3M7ICIKKworaW5oZXJpdCBnemlwbmF0aXZlCisKK0xJQ0VOU0UgPSAiTUlUIgorUEFDS0FHRVMgPSAiIgorREVQRU5EUyArPSAiJHtNTFBSRUZJWH1xZW11d3JhcHBlci1jcm9zcyAke01MUFJFRklYfWRlcG1vZHdyYXBwZXItY3Jvc3MiCitSREVQRU5EUyArPSAiJHtQQUNLQUdFX0lOU1RBTEx9ICR7TElOR1VBU19JTlNUQUxMfSIKK1JSRUNPTU1FTkRTICs9ICIke1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWX0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1RFU1RJTUFHRUNMQVNTID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1RFU1RfSU1BR0UnLCAnMScsICd0ZXN0aW1hZ2UtYXV0bycsICcnLCBkKX0iCitpbmhlcml0ICR7VEVTVElNQUdFQ0xBU1N9CisKKyMgSU1BR0VfRkVBVFVSRVMgbWF5IGNvbnRhaW4gYW55IGF2YWlsYWJsZSBwYWNrYWdlIGdyb3VwCitJTUFHRV9GRUFUVVJFUyA/PSAiIgorSU1BR0VfRkVBVFVSRVNbdHlwZV0gPSAibGlzdCIKK0lNQUdFX0ZFQVRVUkVTW3ZhbGlkaXRlbXNdICs9ICJkZWJ1Zy10d2Vha3MgcmVhZC1vbmx5LXJvb3RmcyBlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIHBvc3QtaW5zdGFsbC1sb2dnaW5nIgorCisjIEdlbmVyYXRlIGNvbXBhbmlvbiBkZWJ1Z2ZzPworSU1BR0VfR0VOX0RFQlVHRlMgPz0gIjAiCisKKyMgcm9vdGZzIGJvb3RzdHJhcCBpbnN0YWxsCitST09URlNfQk9PVFNUUkFQX0lOU1RBTEwgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsICIiLCAiJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iLGQpfSIKKworIyBwYWNrYWdlcyB0byBpbnN0YWxsIGZyb20gZmVhdHVyZXMKK0ZFQVRVUkVfSU5TVEFMTCA9ICIke0AnICcuam9pbihvZS5wYWNrYWdlZ3JvdXAucmVxdWlyZWRfcGFja2FnZXMob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSwgZCkpfSIKK0ZFQVRVUkVfSU5TVEFMTFt2YXJkZXB2YWx1ZV0gPSAiJHtGRUFUVVJFX0lOU1RBTEx9IgorRkVBVFVSRV9JTlNUQUxMX09QVElPTkFMID0gIiR7QCcgJy5qb2luKG9lLnBhY2thZ2Vncm91cC5vcHRpb25hbF9wYWNrYWdlcyhvZS5kYXRhLnR5cGVkX3ZhbHVlKCdJTUFHRV9GRUFUVVJFUycsIGQpLCBkKSl9IgorRkVBVFVSRV9JTlNUQUxMX09QVElPTkFMW3ZhcmRlcHZhbHVlXSA9ICIke0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTH0iCisKKyMgRGVmaW5lIHNvbWUgdmVyeSBiYXNpYyBmZWF0dXJlIHBhY2thZ2UgZ3JvdXBzCitGRUFUVVJFX1BBQ0tBR0VTX3BhY2thZ2UtbWFuYWdlbWVudCA9ICIke1JPT1RGU19QS0dNQU5BR0V9IgorU1BMQVNIID89ICJwc3BsYXNoIgorRkVBVFVSRV9QQUNLQUdFU19zcGxhc2ggPSAiJHtTUExBU0h9IgorCitJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlkgPSAnJHtAY29tcGxlbWVudGFyeV9nbG9icygiSU1BR0VfRkVBVFVSRVMiLCBkKX0nCisKK2RlZiBjaGVja19pbWFnZV9mZWF0dXJlcyhkKToKKyAgICB2YWxpZF9mZWF0dXJlcyA9IChkLmdldFZhckZsYWcoJ0lNQUdFX0ZFQVRVUkVTJywgJ3ZhbGlkaXRlbXMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhbGlkX2ZlYXR1cmVzICs9IGQuZ2V0VmFyRmxhZ3MoJ0NPTVBMRU1FTlRBUllfR0xPQicpLmtleXMoKQorICAgIGZvciB2YXIgaW4gZDoKKyAgICAgICBpZiB2YXIuc3RhcnRzd2l0aCgiUEFDS0FHRV9HUk9VUF8iKToKKyAgICAgICAgICAgYmIud2FybigiUEFDS0FHRV9HUk9VUCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIEZFQVRVUkVfUEFDS0FHRVMgaW5zdGVhZCIpCisgICAgICAgICAgIHZhbGlkX2ZlYXR1cmVzLmFwcGVuZCh2YXJbMTQ6XSkKKyAgICAgICBlbGlmIHZhci5zdGFydHN3aXRoKCJGRUFUVVJFX1BBQ0tBR0VTXyIpOgorICAgICAgICAgICB2YWxpZF9mZWF0dXJlcy5hcHBlbmQodmFyWzE3Ol0pCisgICAgdmFsaWRfZmVhdHVyZXMuc29ydCgpCisKKyAgICBmZWF0dXJlcyA9IHNldChvZS5kYXRhLnR5cGVkX3ZhbHVlKCdJTUFHRV9GRUFUVVJFUycsIGQpKQorICAgIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzOgorICAgICAgICBpZiBmZWF0dXJlIG5vdCBpbiB2YWxpZF9mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdFWFRSQV9JTUFHRV9GRUFUVVJFUycsIGZlYXR1cmUsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUmVjaXBlKCInJXMnIGluIElNQUdFX0ZFQVRVUkVTIChhZGRlZCB2aWEgRVhUUkFfSU1BR0VfRkVBVFVSRVMpIGlzIG5vdCBhIHZhbGlkIGltYWdlIGZlYXR1cmUuIFZhbGlkIGZlYXR1cmVzOiAlcyIgJSAoZmVhdHVyZSwgJyAnLmpvaW4odmFsaWRfZmVhdHVyZXMpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgiJyVzJyBpbiBJTUFHRV9GRUFUVVJFUyBpcyBub3QgYSB2YWxpZCBpbWFnZSBmZWF0dXJlLiBWYWxpZCBmZWF0dXJlczogJXMiICUgKGZlYXR1cmUsICcgJy5qb2luKHZhbGlkX2ZlYXR1cmVzKSkpCisKK0lNQUdFX0lOU1RBTEwgPz0gIiIKK0lNQUdFX0lOU1RBTExbdHlwZV0gPSAibGlzdCIKK2V4cG9ydCBQQUNLQUdFX0lOU1RBTEwgPz0gIiR7SU1BR0VfSU5TVEFMTH0gJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9ICR7RkVBVFVSRV9JTlNUQUxMfSIKK1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSA/PSAiJHtGRUFUVVJFX0lOU1RBTExfT1BUSU9OQUx9IgorCisjIEltYWdlcyBhcmUgZ2VuZXJhbGx5IGJ1aWx0IGV4cGxpY2l0bHksIGRvIG5vdCBuZWVkIHRvIGJlIHBhcnQgb2Ygd29ybGQuCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworVVNFX0RFVkZTID89ICIxIgorVVNFX0RFUE1PRCA/PSAiMSIKKworUElEID0gIiR7QG9zLmdldHBpZCgpfSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworTERDT05GSUdERVBFTkQgPz0gImxkY29uZmlnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorTERDT05GSUdERVBFTkRfbGliYy11Y2xpYmMgPSAiIgorTERDT05GSUdERVBFTkRfbGliYy1tdXNsID0gIiIKKworIyBUaGlzIGlzIG5lZWRlZCB0byBoYXZlIGRlcG1vZCBkYXRhIGluIFBLR0RBVEFfRElSLAorIyBidXQgaWYgeW91J3JlIGJ1aWxkaW5nIHNtYWxsIGluaXRyYW1mcyBpbWFnZQorIyBlLmcuIHRvIGluY2x1ZGUgaXQgaW4geW91ciBrZXJuZWwsIHlvdSBwcm9iYWJseQorIyBkb24ndCB3YW50IHRoaXMgZGVwZW5kZW5jeSwgd2hpY2ggaXMgY2F1c2luZyBkZXBlbmRlbmN5IGxvb3AKK0tFUk5FTERFUE1PRERFUEVORCA/PSAidmlydHVhbC9rZXJuZWw6ZG9fcGFja2FnZWRhdGEiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiIFwKKyAgICBtYWtlZGV2cy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290ICR7TERDT05GSUdERVBFTkR9IFwKKyAgICB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdXBkYXRlLXJjLmQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICR7S0VSTkVMREVQTU9EREVQRU5EfSBcCisiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlZGF0YSIKKworZGVmIGNvbW1hbmRfdmFyaWFibGVzKGQpOgorICAgIHJldHVybiBbJ1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EJywnUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EJywnT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywnT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUycsJ0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnLAorICAgICAgICAgICAgJ0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EJywnUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EJywnUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQnLCdTREtfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1JQTV9QUkVQUk9DRVNTX0NPTU1BTkRTJywgICAgICAgICAKKyAgICAgICAgICAgICdSUE1fUE9TVFBST0NFU1NfQ09NTUFORFMnXQorCitweXRob24gKCkgeworICAgIHZhcmlhYmxlcyA9IGNvbW1hbmRfdmFyaWFibGVzKGQpCisgICAgZm9yIHZhciBpbiB2YXJpYWJsZXM6CisgICAgICAgIGlmIGQuZ2V0VmFyKHZhciwgRmFsc2UpOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKHZhciwgJ2Z1bmMnLCAnMScpCit9CisKK2RlZiByb290ZnNfdmFyaWFibGVzKGQpOgorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCB2YXJpYWJsZV9kZXBlbmRzCisgICAgdmFyaWFibGVzID0gWydJTUFHRV9ERVZJQ0VfVEFCTEVTJywnQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCdJTUFHRV9UWVBFREVQXycsJ0lNQUdFX1RZUEVTX01BU0tFRCcsJ0lNQUdFX1JPT1RGU19BTElHTk1FTlQnLCdJTUFHRV9PVkVSSEVBRF9GQUNUT1InLCdJTUFHRV9ST09URlNfU0laRScsJ0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRScsCisgICAgICAgICAgICAgICAgICdJTUFHRV9ST09URlNfTUFYU0laRScsJ0lNQUdFX05BTUUnLCdJTUFHRV9MSU5LX05BTUUnLCdJTUFHRV9NQU5JRkVTVCcsJ0RFUExPWV9ESVJfSU1BR0UnLCdSTV9PTERfSU1BR0UnLCdJTUFHRV9GU1RZUEVTJywnSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywnSU1BR0VfTElOR1VBUycsJ1NES19PUycsCisgICAgICAgICAgICAgICAgICdTREtfT1VUUFVUJywnU0RLUEFUSE5BVElWRScsJ1NES1RBUkdFVFNZU1JPT1QnLCdTREtfRElSJywnU0RLX1ZFTkRPUicsJ1NES0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsJ1NES19QQUNLQUdFX0FSQ0hTJywnU0RLX09VVFBVVCcsJ1NES1RBUkdFVFNZU1JPT1QnLCdNVUxUSUxJQlJFX0FMTE9XX1JFUCcsCisgICAgICAgICAgICAgICAgICdNVUxUSUxJQl9URU1QX1JPT1RGUycsJ01VTFRJTElCX1ZBUklBTlRTJywnTVVMVElMSUJTJywnQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMnLCdNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMnLCdCQURfUkVDT01NRU5EQVRJT05TJywnTk9fUkVDT01NRU5EQVRJT05TJywnUEFDS0FHRV9BUkNIUycsCisgICAgICAgICAgICAgICAgICdQQUNLQUdFX0NMQVNTRVMnLCdUQVJHRVRfVkVORE9SJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9BUkNIJywnVEFSR0VUX09TJywnT1ZFUlJJREVTJywnQkJFWFRFTkRWQVJJQU5UJywnRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCdJTlRFUkNFUFRfRElSJywnVVNFX0RFVkZTJywKKyAgICAgICAgICAgICAgICAgJ0NPTVBSRVNTSU9OVFlQRVMnLCAnSU1BR0VfR0VOX0RFQlVHRlMnXQorICAgIHZhcmlhYmxlcy5leHRlbmQoY29tbWFuZF92YXJpYWJsZXMoZCkpCisgICAgdmFyaWFibGVzLmV4dGVuZCh2YXJpYWJsZV9kZXBlbmRzKGQpKQorICAgIHJldHVybiAiICIuam9pbih2YXJpYWJsZXMpCisKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiJHtAcm9vdGZzX3ZhcmlhYmxlcyhkKX0iCisKK2RvX2J1aWxkW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19kZXBsb3kiCisKK2RlZiBidWlsZF9saXZlKGQpOgorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GU1RZUEVTIiwgImxpdmUiLCAibGl2ZSIsICIwIiwgZCkgPT0gIjAiOiAjIGxpdmUgaXMgbm90IHNldCBidXQgaG9iIG1pZ2h0IHNldCBpc28gb3IgaGRkaW1nCisgICAgICAgIGQuc2V0VmFyKCdOT0lTTycsIGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9GU1RZUEVTJywgImlzbyIsICIwIiwgIjEiLCBkKSkKKyAgICAgICAgZC5zZXRWYXIoJ05PSEREJywgYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX0ZTVFlQRVMnLCAiaGRkaW1nIiwgIjAiLCAiMSIsIGQpKQorICAgICAgICBpZiBkLmdldFZhcignTk9JU08nLCBUcnVlKSA9PSAiMCIgb3IgZC5nZXRWYXIoJ05PSEREJywgVHJ1ZSkgPT0gIjAiOgorICAgICAgICAgICAgcmV0dXJuICJpbWFnZS1saXZlIgorICAgICAgICByZXR1cm4gIiIKKyAgICByZXR1cm4gImltYWdlLWxpdmUiCisKK0lNQUdFX1RZUEVfbGl2ZSA9ICIke0BidWlsZF9saXZlKGQpfSIKK2luaGVyaXQgJHtJTUFHRV9UWVBFX2xpdmV9CisKK0lNQUdFX1RZUEVfdm0gPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GU1RZUEVTIiwgWyJ2bWRrIiwgInZkaSIsICJxY293MiJdLCAiaW1hZ2Utdm0iLCAiIiwgZCl9JworaW5oZXJpdCAke0lNQUdFX1RZUEVfdm19CisKK3B5dGhvbiAoKSB7CisgICAgZGVwcyA9ICIgIiArIGltYWdldHlwZXNfZ2V0ZGVwZW5kcyhkKQorICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcm9vdGZzJywgJ2RlcGVuZHMnLCBkZXBzKQorCisgICAgZGVwcyA9ICIiCisgICAgZm9yIGRlcCBpbiAoZC5nZXRWYXIoJ0VYVFJBX0lNQUdFREVQRU5EUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1aWxkJywgJ2RlcGVuZHMnLCBkZXBzKQorCisgICAgI3Byb2Nlc3MgSU1BR0VfRkVBVFVSRVMsIHdlIG11c3QgZG8gdGhpcyBiZWZvcmUgcnVudGltZV9tYXBwaW5nX3JlbmFtZQorICAgICNDaGVjayBmb3IgcmVwbGFjZXMgaW1hZ2UgZmVhdHVyZXMKKyAgICBmZWF0dXJlcyA9IHNldChvZS5kYXRhLnR5cGVkX3ZhbHVlKCdJTUFHRV9GRUFUVVJFUycsIGQpKQorICAgIHJlbWFpbl9mZWF0dXJlcyA9IGZlYXR1cmVzLmNvcHkoKQorICAgIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzOgorICAgICAgICByZXBsYWNlcyA9IHNldCgoZC5nZXRWYXIoIklNQUdFX0ZFQVRVUkVTX1JFUExBQ0VTXyVzIiAlIGZlYXR1cmUsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICByZW1haW5fZmVhdHVyZXMgLT0gcmVwbGFjZXMKKworICAgICNDaGVjayBmb3IgY29uZmxpY3QgaW1hZ2UgZmVhdHVyZXMKKyAgICBmb3IgZmVhdHVyZSBpbiByZW1haW5fZmVhdHVyZXM6CisgICAgICAgIGNvbmZsaWN0cyA9IHNldCgoZC5nZXRWYXIoIklNQUdFX0ZFQVRVUkVTX0NPTkZMSUNUU18lcyIgJSBmZWF0dXJlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgdGVtcCA9IGNvbmZsaWN0cyAmIHJlbWFpbl9mZWF0dXJlcworICAgICAgICBpZiB0ZW1wOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGNvbnRhaW5zIGNvbmZsaWN0aW5nIElNQUdFX0ZFQVRVUkVTICVzICVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZmVhdHVyZSwgJyAnLmpvaW4obGlzdCh0ZW1wKSkpKQorCisgICAgZC5zZXRWYXIoJ0lNQUdFX0ZFQVRVUkVTJywgJyAnLmpvaW4obGlzdChyZW1haW5fZmVhdHVyZXMpKSkKKworICAgIGNoZWNrX2ltYWdlX2ZlYXR1cmVzKGQpCisgICAgaW5pdHJhbWZzX2ltYWdlID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19JTUFHRScsIFRydWUpIG9yICIiCisgICAgaWYgaW5pdHJhbWZzX2ltYWdlICE9ICIiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1aWxkJywgJ2RlcGVuZHMnLCAiICVzOmRvX2J1bmRsZV9pbml0cmFtZnMiICUgIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1bmRsZV9pbml0cmFtZnMnLCAnZGVwZW5kcycsICIgJXM6ZG9fcm9vdGZzIiAlIGluaXRyYW1mc19pbWFnZSkKK30KKworSU1BR0VfQ0xBU1NFUyArPSAiaW1hZ2VfdHlwZXMiCitpbmhlcml0ICR7SU1BR0VfQ0xBU1NFU30KKworSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCA/PSAiIgorCisjIFphcCB0aGUgcm9vdCBwYXNzd29yZCBpZiBkZWJ1Zy10d2Vha3MgZmVhdHVyZSBpcyBub3QgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAnZW1wdHktcm9vdC1wYXNzd29yZCcgXSwgIiIsICJ6YXBfZW1wdHlfcm9vdF9wYXNzd29yZCA7ICIsZCl9JworCisjIEFsbG93IGRyb3BiZWFyL29wZW5zc2ggdG8gYWNjZXB0IGxvZ2lucyBmcm9tIGFjY291bnRzIHdpdGggYW4gZW1wdHkgcGFzc3dvcmQgc3RyaW5nIGlmIGRlYnVnLXR3ZWFrcyBpcyBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GRUFUVVJFUyIsIFsgJ2RlYnVnLXR3ZWFrcycsICdhbGxvdy1lbXB0eS1wYXNzd29yZCcgXSwgInNzaF9hbGxvd19lbXB0eV9wYXNzd29yZDsgIiwgIiIsZCl9JworCisjIEVuYWJsZSBwb3N0aW5zdCBsb2dnaW5nIGlmIGRlYnVnLXR3ZWFrcyBpcyBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GRUFUVVJFUyIsIFsgJ2RlYnVnLXR3ZWFrcycsICdwb3N0LWluc3RhbGwtbG9nZ2luZycgXSwgInBvc3RpbnN0X2VuYWJsZV9sb2dnaW5nOyAiLCAiIixkKX0nCisKKyMgQ3JlYXRlIC9ldGMvdGltZXN0YW1wIGR1cmluZyBpbWFnZSBjb25zdHJ1Y3Rpb24gdG8gZ2l2ZSBhIHJlYXNvbmFibHkgc2FuZSBkZWZhdWx0IHRpbWUgc2V0dGluZworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gInJvb3Rmc191cGRhdGVfdGltZXN0YW1wIDsgIgorCisjIFR3ZWFrIHRoZSBtb3VudCBvcHRpb25zIGZvciByb290ZnMgaW4gL2V0Yy9mc3RhYiBpZiByZWFkLW9ubHktcm9vdGZzIGlzIGVuYWJsZWQKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsICJyZWFkX29ubHlfcm9vdGZzX2hvb2s7ICIsICIiLGQpfScKKworIyBXcml0ZSBtYW5pZmVzdAorSU1BR0VfTUFOSUZFU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5tYW5pZmVzdCIKK1JPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgPSsgIndyaXRlX2ltYWdlX21hbmlmZXN0IDsgIgorIyBTZXQgZGVmYXVsdCBwb3N0aW5zdCBsb2cgZmlsZQorUE9TVElOU1RfTE9HRklMRSA/PSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvcG9zdGluc3RhbGwubG9nIgorIyBTZXQgZGVmYXVsdCB0YXJnZXQgZm9yIHN5c3RlbWQgaW1hZ2VzCitTWVNURU1EX0RFRkFVTFRfVEFSR0VUID89ICcke0BiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAieDExLWJhc2UiLCAiZ3JhcGhpY2FsLnRhcmdldCIsICJtdWx0aS11c2VyLnRhcmdldCIsIGQpfScKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3RlbWQiLCAic2V0X3N5c3RlbWRfZGVmYXVsdF90YXJnZXQ7ICIsICIiLCBkKX0nCisKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICdlbXB0eV92YXJfdm9sYXRpbGU7JworCisjIHNvbWUgZGVmYXVsdCBsb2NhbGVzCitJTUFHRV9MSU5HVUFTID89ICJkZS1kZSBmci1mciBlbi1nYiIKKworTElOR1VBU19JTlNUQUxMID89ICIke0AiICIuam9pbihtYXAobGFtYmRhIHM6ICJsb2NhbGUtYmFzZS0lcyIgJSBzLCBkLmdldFZhcignSU1BR0VfTElOR1VBUycsIFRydWUpLnNwbGl0KCkpKX0iCisKKyMgUHJlZmVyIGltYWdlLCBidXQgdXNlIHRoZSBmYWxsYmFjayBmaWxlcyBmb3IgbG9va3VwcyBpZiB0aGUgaW1hZ2Ugb25lcworIyBhcmVuJ3QgeWV0IGF2YWlsYWJsZS4KK1BTRVVET19QQVNTV0QgPSAiJHtJTUFHRV9ST09URlN9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKKworZG9fcm9vdGZzW2RpcnNdID0gIiR7VE9QRElSfSIKK2RvX3Jvb3Rmc1tsb2NrZmlsZXNdICs9ICIke0lNQUdFX1JPT1RGU30ubG9jayIKK2RvX3Jvb3Rmc1tjbGVhbmRpcnNdICs9ICIke1N9IgorCisjIE11c3QgY2FsbCByZWFsX2RvX3Jvb3RmcygpIGZyb20gaW5zaWRlIGhlcmUsIHJhdGhlciB0aGFuIGFzIGEgc2VwYXJhdGUKKyMgdGFzaywgc28gdGhhdCB3ZSBoYXZlIGEgc2luZ2xlIGZha2Vyb290IGNvbnRleHQgZm9yIHRoZSB3aG9sZSBwcm9jZXNzLgorZG9fcm9vdGZzW3VtYXNrXSA9ICIwMjIiCisKKyMgQSBob29rIGZ1bmN0aW9uIHRvIHN1cHBvcnQgcmVhZC1vbmx5LXJvb3RmcyBJTUFHRV9GRUFUVVJFUworcmVhZF9vbmx5X3Jvb3Rmc19ob29rICgpIHsKKwkjIFR3ZWFrIHRoZSBtb3VudCBvcHRpb24gYW5kIGZzX3Bhc3NubyBmb3Igcm9vdGZzIGluIGZzdGFiCisJc2VkIC1pIC1lICcvXlsjWzpzcGFjZTpdXSpcL2Rldlwvcm9vdC97cy9kZWZhdWx0cy9yby87cy9cKFtbOnNwYWNlOl1dKltbOmRpZ2l0Ol1dXClcKFtbOnNwYWNlOl1dKlwpW1s6ZGlnaXQ6XV0kL1wxXDIwL30nICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdmluaXQiLCAidHJ1ZSIsICJmYWxzZSIsIGQpfTsgdGhlbgorCQkjIENoYW5nZSB0aGUgdmFsdWUgb2YgUk9PVEZTX1JFQURfT05MWSBpbiAvZXRjL2RlZmF1bHQvcmNTIHRvIHllcworCQlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9yY1MgXTsgdGhlbgorCQkJc2VkIC1pICdzL1JPT1RGU19SRUFEX09OTFk9bm8vUk9PVEZTX1JFQURfT05MWT15ZXMvJyAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvcmNTCisJCWZpCisJCSMgUnVuIHBvcHVsYXRlLXZvbGF0aWxlLnNoIGF0IHJvb3RmcyB0aW1lIHRvIHNldCB1cCBiYXNpYyBmaWxlcworCQkjIGFuZCBkaXJlY3RvcmllcyB0byBzdXBwb3J0IHJlYWQtb25seSByb290ZnMuCisJCWlmIFsgLXggJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorCQkJJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2gKKwkJZmkKKwkJIyBJZiB3ZSdyZSB1c2luZyBvcGVuc3NoIGFuZCB0aGUgL2V0Yy9zc2ggZGlyZWN0b3J5IGhhcyBubyBwcmUtZ2VuZXJhdGVkIGtleXMsCisJCSMgd2Ugc2hvdWxkIGNvbmZpZ3VyZSBvcGVuc3NoIHRvIHVzZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIC9ldGMvc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJCSMgYW5kIHRoZSBrZXlzIHVuZGVyIC92YXIvcnVuL3NzaC4KKwkJaWYgWyAtZCAke0lNQUdFX1JPT1RGU30vZXRjL3NzaCBdOyB0aGVuCisJCQlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkgXTsgdGhlbgorCQkJCWVjaG8gIlNZU0NPTkZESVI9L2V0Yy9zc2giID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCQllY2hvICJTU0hEX09QVFM9IiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQllbHNlCisJCQkJZWNobyAiU1lTQ09ORkRJUj0vdmFyL3J1bi9zc2giID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCQllY2hvICJTU0hEX09QVFM9Jy1mIC9ldGMvc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5JyIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3NzaAorCQkJZmkKKwkJZmkKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgInRydWUiLCAiZmFsc2UiLCBkKX07IHRoZW4KKwkgICAgIyBVcGRhdGUgdXNlciBkYXRhYmFzZSBmaWxlcyBzbyB0aGF0IHNlcnZpY2VzIGRvbid0IGZhaWwgZm9yIGEgcmVhZC1vbmx5IHN5c3RlbWQgc3lzdGVtCisJICAgIGZvciBjb25mZmlsZSBpbiAke0lNQUdFX1JPT1RGU30vdXNyL2xpYi9zeXN1c2Vycy5kL3N5c3RlbWQuY29uZiAke0lNQUdFX1JPT1RGU30vdXNyL2xpYi9zeXN1c2Vycy5kL3N5c3RlbWQtcmVtb3RlLmNvbmY7IGRvCisJCVsgLWUgJGNvbmZmaWxlIF0gfHwgY29udGludWUKKwkJZ3JlcCAtdiAiXiMiICRjb25mZmlsZSB8IHNlZCAtZSAnL14kL2QnIHwgd2hpbGUgcmVhZCB0eXBlIG5hbWUgaWQgY29tbWVudDsgZG8KKwkJICAgIGlmIFsgIiR0eXBlIiA9ICJ1IiBdOyB0aGVuCisJCQl1c2VyYWRkX3BhcmFtcz0iIgorCQkJWyAiJGlkIiAhPSAiLSIgXSAmJiB1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tdWlkICRpZCIKKwkJCVsgIiRjb21tZW50IiAhPSAiLSIgXSAmJiB1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tY29tbWVudCAkY29tbWVudCIKKwkJCXVzZXJhZGRfcGFyYW1zPSIkdXNlcmFkZF9wYXJhbXMgLS1zeXN0ZW0gJG5hbWUiCisJCQlldmFsIHVzZXJhZGQgLS1yb290ICR7SU1BR0VfUk9PVEZTfSAkdXNlcmFkZF9wYXJhbXMgfHwgdHJ1ZQorCQkgICAgZWxpZiBbICIkdHlwZSIgPSAiZyIgXTsgdGhlbgorCQkJZ3JvdXBhZGRfcGFyYW1zPSIiCisJCQlbICIkaWQiICE9ICItIiBdICYmIGdyb3VwYWRkX3BhcmFtcz0iJGdyb3VwYWRkX3BhcmFtcyAtLWdpZCAkaWQiCisJCQlncm91cGFkZF9wYXJhbXM9IiRncm91cGFkZF9wYXJhbXMgLS1zeXN0ZW0gJG5hbWUiCisJCQlldmFsIGdyb3VwYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJGdyb3VwYWRkX3BhcmFtcyB8fCB0cnVlCisJCSAgICBmaQorCQlkb25lCisJICAgIGRvbmUKKwlmaQorfQorCitQQUNLQUdFX0VYQ0xVREUgPz89ICIiCitQQUNLQUdFX0VYQ0xVREVbdHlwZV0gPSAibGlzdCIKKworcHl0aG9uIHJvb3Rmc19wcm9jZXNzX2lnbm9yZSgpIHsKKyAgICBleGNsX3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9FWENMVURFIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGluc3RfcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFX0lOU1RBTEwiLCBUcnVlKS5zcGxpdCgpCisgICAgaW5zdF9hdHRlbXB0X3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgVHJ1ZSkuc3BsaXQoKQorCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfSU5TVEFMTF9PUklHJywgJyAnLmpvaW4oaW5zdF9wa2dzKSkKKyAgICBkLnNldFZhcignUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZJywgJyAnLmpvaW4oaW5zdF9hdHRlbXB0X3BrZ3MpKQorCisgICAgZm9yIHBrZyBpbiBleGNsX3BrZ3M6CisgICAgICAgIGlmIHBrZyBpbiBpbnN0X3BrZ3M6CisgICAgICAgICAgICBiYi53YXJuKCJQYWNrYWdlICVzLCBzZXQgdG8gYmUgZXhjbHVkZWQsIGlzIGluICVzIFBBQ0tBR0VfSU5TVEFMTCAoJXMpLiAgSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QuIiAlIChwa2csIGQuZ2V0VmFyKCdQTicsIFRydWUpLCBpbnN0X3BrZ3MpKQorICAgICAgICAgICAgaW5zdF9wa2dzLnJlbW92ZShwa2cpCisKKyAgICAgICAgaWYgcGtnIGluIGluc3RfYXR0ZW1wdF9wa2dzOgorICAgICAgICAgICAgYmIud2FybigiUGFja2FnZSAlcywgc2V0IHRvIGJlIGV4Y2x1ZGVkLCBpcyBpbiAlcyBQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkgKCVzKS4gIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LiIgJSAocGtnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgaW5zdF9wa2dzKSkKKyAgICAgICAgICAgIGluc3RfYXR0ZW1wdF9wa2dzLnJlbW92ZShwa2cpCisKKyAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgJyAnLmpvaW4oaW5zdF9wa2dzKSkKKyAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgJyAnLmpvaW4oaW5zdF9hdHRlbXB0X3BrZ3MpKQorfQorZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAicm9vdGZzX3Byb2Nlc3NfaWdub3JlIgorCisjIFdlIGhhdmUgdG8gZGVsYXkgdGhlIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUgdW50aWwganVzdCBiZWZvcmUgcm9vdGZzIHJ1bnMKKyMgb3RoZXJ3aXNlLCB0aGUgbXVsdGlsaWIgcmVuYW1pbmcgY291bGQgc3RlcCBpbiBhbmQgc3F1YXNoIGFueSBmaXh1cHMgdGhhdAorIyBtYXkgaGF2ZSBvY2N1cnJlZC4KK3B5dGhvbiByb290ZnNfcnVudGltZV9tYXBwaW5nKCkgeworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJQQUNLQUdFX0lOU1RBTEwiLCBwbiwgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiLCBwbiwgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJCQURfUkVDT01NRU5EQVRJT05TIiwgcG4sIGQpCit9Citkb19yb290ZnNbcHJlZnVuY3NdICs9ICJyb290ZnNfcnVudGltZV9tYXBwaW5nIgorCitmYWtlcm9vdCBweXRob24gZG9fcm9vdGZzICgpIHsKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgY3JlYXRlX3Jvb3RmcworICAgIGZyb20gb2UuaW1hZ2UgaW1wb3J0IGNyZWF0ZV9pbWFnZQorICAgIGZyb20gb2UubWFuaWZlc3QgaW1wb3J0IGNyZWF0ZV9tYW5pZmVzdAorCisgICAgIyBnZW5lcmF0ZSB0aGUgaW5pdGlhbCBtYW5pZmVzdAorICAgIGNyZWF0ZV9tYW5pZmVzdChkKQorCisgICAgIyBnZW5lcmF0ZSByb290ZnMKKyAgICBjcmVhdGVfcm9vdGZzKGQpCisKKyAgICAjIGdlbmVyYXRlIGZpbmFsIGltYWdlcworICAgIGNyZWF0ZV9pbWFnZShkKQorfQorCitpbnNlcnRfZmVlZF91cmlzICgpIHsKKwkKKwllY2hvICJCdWlsZGluZyBmZWVkcyBmb3IgWyR7RElTVFJPfV0uLiIKKworCWZvciBsaW5lIGluICR7RkVFRF9VUklTfQorCWRvCisJCSMgc3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzL3RhYnMsIHRoZW4gc3BsaXQgaW50byBuYW1lIGFuZCB1cmkKKwkJbGluZV9jbGVhbj0iYGVjaG8gIiRsaW5lInxzZWQgJ3MvXlsgXHRdKi8vO3MvWyBcdF0qJC8vJ2AiCisJCWZlZWRfbmFtZT0iYGVjaG8gIiRsaW5lX2NsZWFuIiB8IHNlZCAtbiAncy9cKC4qXCkjI1woLipcKS9cMS9wJ2AiCisJCWZlZWRfdXJpPSJgZWNobyAiJGxpbmVfY2xlYW4iIHwgc2VkIC1uICdzL1woLipcKSMjXCguKlwpL1wyL3AnYCIKKwkJCisJCWVjaG8gIkFkZGVkICRmZWVkX25hbWUgZmVlZCB3aXRoIFVSTCAkZmVlZF91cmkiCisJCQorCQkjIGluc2VydCBuZXcgZmVlZC1zb3VyY2VzCisJCWVjaG8gInNyYy9neiAkZmVlZF9uYW1lICRmZWVkX3VyaSIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9vcGtnLyR7ZmVlZF9uYW1lfS1mZWVkLmNvbmYKKwlkb25lCit9CisKK01VTFRJTElCUkVfQUxMT1dfUkVQID0uICIke2Jhc2VfYmluZGlyfXwke2Jhc2Vfc2JpbmRpcn18JHtiaW5kaXJ9fCR7c2JpbmRpcn18JHtsaWJleGVjZGlyfXwke3N5c2NvbmZkaXJ9fCR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldnwvbGliL21vZHVsZXMvW14vXSovbW9kdWxlcy4qfCIKK01VTFRJTElCX0NIRUNLX0ZJTEUgPSAiJHtXT1JLRElSfS9tdWx0aWxpYl9jaGVjay5weSIKK01VTFRJTElCX1RFTVBfUk9PVEZTID0gIiR7V09SS0RJUn0vbXVsdGlsaWIiCisKKyMgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBkaXNhbGxvdyBlbXB0eSByb290IHBhc3N3b3JkIGlmICdkZWJ1Zy10d2Vha3MnIGlzIG5vdCBpbiBJTUFHRV9GRUFUVVJFUy4KK3phcF9lbXB0eV9yb290X3Bhc3N3b3JkICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvc2hhZG93IF07IHRoZW4KKwkJc2VkIC1pICdzJV5yb290Ojolcm9vdDoqOiUnICR7SU1BR0VfUk9PVEZTfS9ldGMvc2hhZG93CisgICAgICAgIGZpCisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3Bhc3N3ZCBdOyB0aGVuCisJCXNlZCAtaSAncyVecm9vdDo6JXJvb3Q6KjolJyAke0lNQUdFX1JPT1RGU30vZXRjL3Bhc3N3ZAorCWZpCit9IAorCisjIGFsbG93IGRyb3BiZWFyL29wZW5zc2ggdG8gYWNjZXB0IHJvb3QgbG9naW5zIGFuZCBsb2dpbnMgZnJvbSBhY2NvdW50cyB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkIHN0cmluZworc3NoX2FsbG93X2VtcHR5X3Bhc3N3b3JkICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnIF07IHRoZW4KKwkJc2VkIC1pICdzL15bI1s6c3BhY2U6XV0qUGVybWl0Um9vdExvZ2luLiovUGVybWl0Um9vdExvZ2luIHllcy8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJCXNlZCAtaSAncy9eWyNbOnNwYWNlOl1dKlBlcm1pdEVtcHR5UGFzc3dvcmRzLiovUGVybWl0RW1wdHlQYXNzd29yZHMgeWVzLycgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwlmaQorCisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30ke3NiaW5kaXJ9L2Ryb3BiZWFyIF0gOyB0aGVuCisJCWlmIGdyZXAgLXEgRFJPUEJFQVJfRVhUUkFfQVJHUyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIgMj4vZGV2L251bGwgOyB0aGVuCisJCQlpZiAhIGdyZXAgLXEgIkRST1BCRUFSX0VYVFJBX0FSR1M9LiotQiIgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyIDsgdGhlbgorCQkJCXNlZCAtaSAncy9eRFJPUEJFQVJfRVhUUkFfQVJHUz0iKlwoW14iXSpcKSIqL0RST1BCRUFSX0VYVFJBX0FSR1M9IlwxIC1CIi8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kcm9wYmVhcgorCQkJZmkKKwkJZWxzZQorCQkJcHJpbnRmICdcbkRST1BCRUFSX0VYVFJBX0FSR1M9Ii1CIlxuJyA+PiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIKKwkJZmkKKwlmaQorCisJaWYgWyAtZCAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3BhbS5kIF0gOyB0aGVuCisJCXNlZCAtaSAncy9udWxsb2tfc2VjdXJlL251bGxvay8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcGFtLmQvKgorCWZpCit9CisKKyMgRGlzYWJsZSBETlMgbG9va3VwcywgdGhlIFNTSF9ESVNBQkxFX0ROU19MT09LVVAgY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWxsb3cKKyMgZGlzdHJvcyB0byBjaG9vc2Ugbm90IHRvIHRha2UgdGhpcyBjaGFuZ2UKK1NTSF9ESVNBQkxFX0ROU19MT09LVVAgPz0gIiBzc2hfZGlzYWJsZV9kbnNfbG9va3VwIDsgIgorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRfYXBwZW5kX3FlbXVhbGwgPSAiJHtTU0hfRElTQUJMRV9ETlNfTE9PS1VQfSIKK3NzaF9kaXNhYmxlX2Ruc19sb29rdXAgKCkgeworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgXTsgdGhlbgorCQlzZWQgLWkgLWUgJ3M6I1VzZUROUyB5ZXM6VXNlRE5TIG5vOicgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwlmaQorfQorCisjIEVuYWJsZSBwb3N0aW5zdCBsb2dnaW5nIGlmIGRlYnVnLXR3ZWFrcyBpcyBlbmFibGVkCitwb3N0aW5zdF9lbmFibGVfbG9nZ2luZyAoKSB7CisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJZWNobyAiUE9TVElOU1RfTE9HR0lORz0xIiA+PiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcG9zdGluc3QKKwllY2hvICJMT0dGSUxFPSR7UE9TVElOU1RfTE9HRklMRX0iID4+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9wb3N0aW5zdAorfQorCisjIE1vZGlmeSBzeXN0ZW1kIGRlZmF1bHQgdGFyZ2V0CitzZXRfc3lzdGVtZF9kZWZhdWx0X3RhcmdldCAoKSB7CisJaWYgWyAtZCAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtIC1hIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJHtTWVNURU1EX0RFRkFVTFRfVEFSR0VUfSBdOyB0aGVuCisJCWxuIC1zZiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyR7U1lTVEVNRF9ERUZBVUxUX1RBUkdFVH0gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS9kZWZhdWx0LnRhcmdldAorCWZpCit9CisKKyMgSWYgL3Zhci92b2xhdGlsZSBpcyBub3QgZW1wdHksIHdlIGhhdmUgc2VlbiBwcm9ibGVtcyB3aGVyZSBwcm9ncmFtcyBzdWNoIGFzIHRoZQorIyBqb3VybmFsIG1ha2UgYXNzdW1wdGlvbnMgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIC92YXIvdm9sYXRpbGUuIFRoZSBqb3VybmFsCisjIHdvdWxkIHRoZW4gd3JpdGUgdG8gL3Zhci92b2xhdGlsZSBiZWZvcmUgaXQgd2FzIG1vdW50ZWQsIHRodXMgaGlkaW5nIHRoZQorIyBpdGVtcyBwcmV2aW91c2x5IHdyaXR0ZW4uCisjCisjIFRoaXMgY2hhbmdlIGlzIHRvIGF0dGVtcHQgdG8gZml4IHRob3NlIHR5cGVzIG9mIGlzc3VlcyBpbiBhIHdheSB0aGF0IGRvZXNuJ3QKKyMgYWZmZWN0IHVzZXJzIHRoYXQgbWF5IG5vdCBiZSB1c2luZyAvdmFyL3ZvbGF0aWxlLgorZW1wdHlfdmFyX3ZvbGF0aWxlICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIgXTsgdGhlbgorCQltYXRjaD1gYXdrICckMSAhfiAiIyIgJiYgJDIgfiAvXC92YXJcL3ZvbGF0aWxlL3twcmludCAkMn0nICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIgMj4gL2Rldi9udWxsYAorCQlpZiBbIC1uICIkbWF0Y2giIF07IHRoZW4KKwkJCWZpbmQgJHtJTUFHRV9ST09URlN9L3Zhci92b2xhdGlsZSAtbWluZGVwdGggMSAtZGVsZXRlCisJCWZpCisJZmkKK30KKworIyBUdXJuIGFueSBzeW1ib2xpYyAvc2Jpbi9pbml0IGxpbmsgaW50byBhIGZpbGUKK3JlbW92ZV9pbml0X2xpbmsgKCkgeworCWlmIFsgLWggJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdCBdOyB0aGVuCisJCUxJTktGSUxFPSR7SU1BR0VfUk9PVEZTfWByZWFkbGluayAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0YAorCQlybSAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0CisJCWNwICRMSU5LRklMRSAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0CisJZmkKK30KKworbWFrZV96aW1hZ2Vfc3ltbGlua19yZWxhdGl2ZSAoKSB7CisJaWYgWyAtTCAke0lNQUdFX1JPT1RGU30vYm9vdC96SW1hZ2UgXTsgdGhlbgorCQkoY2QgJHtJTUFHRV9ST09URlN9L2Jvb3QvICYmIGZvciBpIGluIGBscyB6SW1hZ2UtKiB8IHNvcnRgOyBkbyBsbiAtc2YgJGkgekltYWdlOyBkb25lKQorCWZpCit9CisKK3B5dGhvbiB3cml0ZV9pbWFnZV9tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgd2l0aCBvcGVuKGQuZ2V0VmFyKCdJTUFHRV9NQU5JRkVTVCcsIFRydWUpLCAndysnKSBhcyBpbWFnZV9tYW5pZmVzdDoKKyAgICAgICAgaW1hZ2VfbWFuaWZlc3Qud3JpdGUoaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgJ3ZlcicpKQorICAgICAgICBpbWFnZV9tYW5pZmVzdC53cml0ZSgiXG4iKQorfQorCisjIENhbiBiZSB1c2UgdG8gY3JlYXRlIC9ldGMvdGltZXN0YW1wIGR1cmluZyBpbWFnZSBjb25zdHJ1Y3Rpb24gdG8gZ2l2ZSBhIHJlYXNvbmFibHkgCisjIHNhbmUgZGVmYXVsdCB0aW1lIHNldHRpbmcKK3Jvb3Rmc191cGRhdGVfdGltZXN0YW1wICgpIHsKKwlkYXRlIC11ICslNFklMm0lMmQlMkglMk0lMlMgPiR7SU1BR0VfUk9PVEZTfS9ldGMvdGltZXN0YW1wCit9CisKKyMgUHJldmVudCBYIGZyb20gYmVpbmcgc3RhcnRlZAorcm9vdGZzX25vX3hfc3RhcnR1cCAoKSB7CisJaWYgWyAtZiAke0lNQUdFX1JPT1RGU30vZXRjL2luaXQuZC94c2VydmVyLW5vZG0gXTsgdGhlbgorCQljaG1vZCBhLXggJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQveHNlcnZlci1ub2RtCisJZmkKK30KKworcm9vdGZzX3RyaW1fc2NoZW1hcyAoKSB7CisJZm9yIHNjaGVtYSBpbiAke0lNQUdFX1JPT1RGU30vZXRjL2djb25mL3NjaGVtYXMvKi5zY2hlbWFzCisJZG8KKwkJIyBOZWVkIHRoaXMgaW4gY2FzZSBubyBmaWxlcyBleGlzdAorCQlpZiBbIC1lICRzY2hlbWEgXTsgdGhlbgorCQkJb2UtdHJpbS1zY2hlbWFzICRzY2hlbWEgPiAkc2NoZW1hLm5ldworCQkJbXYgJHNjaGVtYS5uZXcgJHNjaGVtYQorCQlmaQorCWRvbmUKK30KKworcm9vdGZzX2NoZWNrX2hvc3RfdXNlcl9jb250YW1pbmF0ZWQgKCkgeworCWNvbnRhbWluYXRlZD0iJHtXT1JLRElSfS9ob3N0LXVzZXItY29udGFtaW5hdGVkLnR4dCIKKwlIT1NUX1VTRVJfVUlEPSIkKFBTRVVET19VTkxPQUQ9MSBpZCAtdSkiCisJSE9TVF9VU0VSX0dJRD0iJChQU0VVRE9fVU5MT0FEPTEgaWQgLWcpIgorCisJZmluZCAiJHtJTUFHRV9ST09URlN9IiAtd2hvbGVuYW1lICIke0lNQUdFX1JPT1RGU30vaG9tZSIgLXBydW5lIFwKKwkgICAgLXVzZXIgIiRIT1NUX1VTRVJfVUlEIiAtbyAtZ3JvdXAgIiRIT1NUX1VTRVJfR0lEIiA+IiRjb250YW1pbmF0ZWQiCisKKwlpZiBbIC1zICIkY29udGFtaW5hdGVkIiBdOyB0aGVuCisJCWVjaG8gIldBUk5JTkc6IFBhdGhzIGluIHRoZSByb290ZnMgYXJlIG93bmVkIGJ5IHRoZSBzYW1lIHVzZXIgb3IgZ3JvdXAgYXMgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiBTZWUgdGhlIGxvZ2ZpbGUgZm9yIHRoZSBzcGVjaWZpYyBwYXRocy4iCisJCWNhdCAiJGNvbnRhbWluYXRlZCIgfCBzZWQgInMsXiwgICwiCisJZmkKK30KKworIyBNYWtlIGFueSBhYnNvbHV0ZSBsaW5rcyBpbiBhIHN5c3Jvb3QgcmVsYXRpdmUKK3Jvb3Rmc19zeXNyb290X3JlbGF0aXZlbGlua3MgKCkgeworCXN5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weSAke1NES19PVVRQVVR9LyR7U0RLVEFSR0VUU1lTUk9PVH0KK30KKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX2luc3RhbGxbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VfcWFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorCithZGR0YXNrIHJvb3RmcyBiZWZvcmUgZG9fYnVpbGQKKyMgQWxsb3cgdGhlIGtlcm5lbCB0byBiZSByZXBhY2tlZCB3aXRoIHRoZSBpbml0cmFtZnMgYW5kIGJvb3QgaW1hZ2UgZmlsZSBhcyBhIHNpbmdsZSBmaWxlCitkb19idW5kbGVfaW5pdHJhbWZzW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19idW5kbGVfaW5pdHJhbWZzIgorZG9fYnVuZGxlX2luaXRyYW1mc1tub3N0YW1wXSA9ICIxIgorZG9fYnVuZGxlX2luaXRyYW1mc1tub2V4ZWNdID0gIjEiCitkb19idW5kbGVfaW5pdHJhbWZzICgpIHsKKwk6Cit9CithZGR0YXNrIGJ1bmRsZV9pbml0cmFtZnMgYWZ0ZXIgZG9fcm9vdGZzCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjQwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcwpAQCAtMCwwICsxLDI2MCBAQAorCisjIFRoZSBkZWZhdWx0IGFsaWdtZW50IG9mIHRoZSBzaXplIG9mIHRoZSByb290ZnMgaXMgc2V0IHRvIDFLaUIuIEluIGNhc2UKKyMgeW91J3JlIHVzaW5nIHRoZSBTRCBjYXJkIGVtdWxhdGlvbiBvZiBhIFFFTVUgc3lzdGVtIHNpbXVsYXRvciB5b3UgbWF5CisjIHNldCB0aGlzIHZhbHVlIHRvIDIwNDggKDJNaUIgYWxpZ25tZW50KS4KK0lNQUdFX1JPT1RGU19BTElHTk1FTlQgPz0gIjEiCisKK2RlZiBpbWFnZXR5cGVzX2dldGRlcGVuZHMoZCk6CisgICAgZGVmIGFkZGRlcChkZXBzdHIsIGRlcHMpOgorICAgICAgICBmb3IgaSBpbiAoZGVwc3RyIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgaSBub3QgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChpKQorCisgICAgZGVwcyA9IFtdCisgICAgY3R5cGVzID0gZC5nZXRWYXIoJ0NPTVBSRVNTSU9OVFlQRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHR5cGUgaW4gKGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGlmIHR5cGUgaW4gWyJ2bWRrIiwgInZkaSIsICJxY293MiIsICJsaXZlIiwgImlzbyIsICJoZGRpbWciXToKKyAgICAgICAgICAgIHR5cGUgPSAiZXh0NCIKKyAgICAgICAgYmFzZXR5cGUgPSB0eXBlCisgICAgICAgIGZvciBjdHlwZSBpbiBjdHlwZXM6CisgICAgICAgICAgICBpZiB0eXBlLmVuZHN3aXRoKCIuIiArIGN0eXBlKToKKyAgICAgICAgICAgICAgICBiYXNldHlwZSA9IHR5cGVbOi1sZW4oIi4iICsgY3R5cGUpXQorICAgICAgICAgICAgICAgIGFkZGRlcChkLmdldFZhcigiQ09NUFJFU1NfREVQRU5EU18lcyIgJSBjdHlwZSwgVHJ1ZSksIGRlcHMpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZm9yIHR5cGVkZXBlbmRzIGluIChkLmdldFZhcigiSU1BR0VfVFlQRURFUF8lcyIgJSBiYXNldHlwZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBhZGRkZXAoZC5nZXRWYXIoJ0lNQUdFX0RFUEVORFNfJXMnICUgdHlwZWRlcGVuZHMsIFRydWUpICwgZGVwcykKKyAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIGJhc2V0eXBlLCBUcnVlKSAsIGRlcHMpCisKKyAgICBkZXBzdHIgPSAiIgorICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgZGVwc3RyICs9ICIgIiArIGRlcCArICI6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICByZXR1cm4gZGVwc3RyCisKKworWFpfQ09NUFJFU1NJT05fTEVWRUwgPz0gIi1lIC02IgorWFpfSU5URUdSSVRZX0NIRUNLID89ICJjcmMzMiIKK1haX1RIUkVBRFMgPz0gIi1UIDAiCisKK0pGRlMyX1NVTV9FWFRSQV9BUkdTID89ICIiCitJTUFHRV9DTURfamZmczIgPSAibWtmcy5qZmZzMiAtLXJvb3Q9JHtJTUFHRV9ST09URlN9IC0tZmFrZXRpbWUgLS1vdXRwdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5qZmZzMiAke0VYVFJBX0lNQUdFQ01EfSIKKworSU1BR0VfQ01EX2NyYW1mcyA9ICJta2ZzLmNyYW1mcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5jcmFtZnMgJHtFWFRSQV9JTUFHRUNNRH0iCisKK29lX21rZXh0MjM0ZnMgKCkgeworCWZzdHlwZT0kMQorCWV4dHJhX2ltYWdlY21kPSIiCisKKwlpZiBbICQjIC1ndCAxIF07IHRoZW4KKwkJc2hpZnQKKwkJZXh0cmFfaW1hZ2VjbWQ9JEAKKwlmaQorCisJIyBJZiBnZW5lcmF0aW5nIGFuIGVtcHR5IGltYWdlIHRoZSBzaXplIG9mIHRoZSBzcGFyc2UgYmxvY2sgc2hvdWxkIGJlIGxhcmdlCisJIyBlbm91Z2ggdG8gYWxsb2NhdGUgYW4gZXh0NCBmaWxlc3lzdGVtIHVzaW5nIDQwOTYgYnl0ZXMgcGVyIGlub2RlLCB0aGlzIGlzCisJIyBhYm91dCA2MEssIHNvIGRkIG5lZWRzIGEgbWluaW11bSBjb3VudCBvZiA2MCwgd2l0aCBicz0xMDI0IChieXRlcyBwZXIgSU8pCisJZXZhbCBsb2NhbCBDT1VOVD1cIjBcIgorCWV2YWwgbG9jYWwgTUlOX0NPVU5UPVwiNjBcIgorCWlmIFsgJFJPT1RGU19TSVpFIC1sdCAkTUlOX0NPVU5UIF07IHRoZW4KKwkJZXZhbCBDT1VOVD1cIiRNSU5fQ09VTlRcIgorCWZpCisJIyBDcmVhdGUgYSBzcGFyc2UgaW1hZ2UgYmxvY2sKKwlkZCBpZj0vZGV2L3plcm8gb2Y9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy4kZnN0eXBlIHNlZWs9JFJPT1RGU19TSVpFIGNvdW50PSRDT1VOVCBicz0xMDI0CisJbWtmcy4kZnN0eXBlIC1GICRleHRyYV9pbWFnZWNtZCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLiRmc3R5cGUgLWQgJHtJTUFHRV9ST09URlN9Cit9CisKK0lNQUdFX0NNRF9leHQyID0gIm9lX21rZXh0MjM0ZnMgZXh0MiAke0VYVFJBX0lNQUdFQ01EfSIKK0lNQUdFX0NNRF9leHQzID0gIm9lX21rZXh0MjM0ZnMgZXh0MyAke0VYVFJBX0lNQUdFQ01EfSIKK0lNQUdFX0NNRF9leHQ0ID0gIm9lX21rZXh0MjM0ZnMgZXh0NCAke0VYVFJBX0lNQUdFQ01EfSIKKworTUlOX0JUUkZTX1NJWkUgPz0gIjE2Mzg0IgorSU1BR0VfQ01EX2J0cmZzICgpIHsKKwlpZiBbICR7Uk9PVEZTX1NJWkV9IC1ndCAke01JTl9CVFJGU19TSVpFfSBdOyB0aGVuCisJCWRkIGlmPS9kZXYvemVybyBvZj0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmJ0cmZzIGNvdW50PSR7Uk9PVEZTX1NJWkV9IGJzPTEwMjQKKwkJbWtmcy5idHJmcyAke0VYVFJBX0lNQUdFQ01EfSAtciAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5idHJmcworCWVsc2UKKwkJYmJmYXRhbCAiUm9vdGZzIGlzIHRvbyBzbWFsbCBmb3IgQlRSRlMgKFJvb3RmcyBBY3R1YWwgU2l6ZTogJHtST09URlNfU0laRX0sIEJUUkZTIE1pbmltdW0gU2l6ZTogJHtNSU5fQlRSRlNfU0laRX0pIgorCWZpCit9CisKK0lNQUdFX0NNRF9zcXVhc2hmcyA9ICJta3NxdWFzaGZzICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnNxdWFzaGZzICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCIKK0lNQUdFX0NNRF9zcXVhc2hmcy14eiA9ICJta3NxdWFzaGZzICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnNxdWFzaGZzLXh6ICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCB4eiIKK0lNQUdFX0NNRF9zcXVhc2hmcy1sem8gPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcy1sem8gJHtFWFRSQV9JTUFHRUNNRH0gLW5vYXBwZW5kIC1jb21wIGx6byIKKworIyBCeSBkZWZhdWx0LCB0YXIgZnJvbSB0aGUgaG9zdCBpcyB1c2VkLCB3aGljaCBjYW4gYmUgcXVpdGUgb2xkLiBJZgorIyB5b3UgbmVlZCBzcGVjaWFsIHBhcmFtZXRlcnMgKGxpa2UgLS14YXR0cnMpIHdoaWNoIGFyZSBvbmx5IHN1cHBvcnRlZAorIyBieSBHTlUgdGFyIHVwc3RyZWFtID49IDEuMjcsIHRoZW4gb3ZlcnJpZGUgdGhhdCBkZWZhdWx0OgorIyBJTUFHRV9DTURfVEFSID0gInRhciAtLXhhdHRycyAtLXhhdHRycy1pbmNsdWRlPSoiCisjIElNQUdFX0RFUEVORFNfdGFyX2FwcGVuZCA9ICIgdGFyLXJlcGxhY2VtZW50LW5hdGl2ZSIKKyMgRVhUUkFOQVRJVkVQQVRIICs9ICJ0YXItbmF0aXZlIgorIworIyBUaGUgR05VIGRvY3VtZW50YXRpb24gZG9lcyBub3Qgc3BlY2lmeSB3aGV0aGVyIC0teGF0dHJzLWluY2x1ZGUgaXMgbmVjZXNzYXJ5LgorIyBJbiBwcmFjdGljZSwgaXQgdHVybmVkIG91dCB0byBiZSBub3QgbmVlZGVkIHdoZW4gY3JlYXRpbmcgYXJjaGl2ZXMgYW5kCisjIHJlcXVpcmVkIHdoZW4gZXh0cmFjdGluZywgYnV0IGl0IHNlZW1zIHBydWRlbnQgdG8gdXNlIGl0IGluIGJvdGggY2FzZXMuCitJTUFHRV9DTURfVEFSID89ICJ0YXIiCitJTUFHRV9DTURfdGFyID0gIiR7SU1BR0VfQ01EX1RBUn0gLWN2ZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnRhciAtQyAke0lNQUdFX1JPT1RGU30gLiIKKworZG9fcm9vdGZzW2NsZWFuZGlyc10gKz0gIiR7V09SS0RJUn0vY3Bpb19hcHBlbmQiCitJTUFHRV9DTURfY3BpbyAoKSB7CisJKGNkICR7SU1BR0VfUk9PVEZTfSAmJiBmaW5kIC4gfCBjcGlvIC1vIC1IIG5ld2MgPiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3BpbykKKwlpZiBbICEgLUwgJHtJTUFHRV9ST09URlN9L2luaXQgLWEgISAtZSAke0lNQUdFX1JPT1RGU30vaW5pdCBdOyB0aGVuCisJCWlmIFsgLUwgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdCAtbyAtZSAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0IF07IHRoZW4KKwkJCWxuIC1zZiAvc2Jpbi9pbml0ICR7V09SS0RJUn0vY3Bpb19hcHBlbmQvaW5pdAorCQllbHNlCisJCQl0b3VjaCAke1dPUktESVJ9L2NwaW9fYXBwZW5kL2luaXQKKwkJZmkKKwkJKGNkICAke1dPUktESVJ9L2NwaW9fYXBwZW5kICYmIGVjaG8gLi9pbml0IHwgY3BpbyAtb0EgLUggbmV3YyAtRiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8pCisJZmkKK30KKworRUxGX0tFUk5FTCA/PSAiJHtTVEFHSU5HX0RJUl9IT1NUfS91c3Ivc3JjL2tlcm5lbC8ke0tFUk5FTF9JTUFHRVRZUEV9IgorRUxGX0FQUEVORCA/PSAicmFtZGlza19zaXplPTMyNzY4IHJvb3Q9L2Rldi9yYW0wIHJ3IGNvbnNvbGU9IgorCitJTUFHRV9DTURfZWxmICgpIHsKKwl0ZXN0IC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZWxmICYmIHJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZWxmCisJbWtlbGZJbWFnZSAtLWtlcm5lbD0ke0VMRl9LRVJORUx9IC0taW5pdHJkPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3Bpby5neiAtLW91dHB1dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZiAtLWFwcGVuZD0nJHtFTEZfQVBQRU5EfScgJHtFWFRSQV9JTUFHRUNNRH0KK30KK0lNQUdFX1RZUEVERVBfZWxmID0gImNwaW8uZ3oiCisKK1VCSV9WT0xOQU1FID89ICIke01BQ0hJTkV9LXJvb3RmcyIKKworbXVsdGl1YmlfbWtmcygpIHsKKwlsb2NhbCBta3ViaWZzX2FyZ3M9IiQxIgorCWxvY2FsIHViaW5pemVfYXJncz0iJDIiCisJaWYgWyAteiAiJDMiIF07IHRoZW4KKwkJbG9jYWwgdm5hbWU9IiIKKwllbHNlCisJCWxvY2FsIHZuYW1lPSJfJDMiCisJZmkKKworCWVjaG8gXFt1Ymlmc1xdID4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gbW9kZT11YmkgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gaW1hZ2U9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaWZzID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9pZD0wID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF90eXBlPWR5bmFtaWMgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gdm9sX25hbWU9JHtVQklfVk9MTkFNRX0gPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gdm9sX2ZsYWdzPWF1dG9yZXNpemUgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCW1rZnMudWJpZnMgLXIgJHtJTUFHRV9ST09URlN9IC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyAke21rdWJpZnNfYXJnc30KKwl1YmluaXplIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmkgJHt1YmluaXplX2FyZ3N9IHViaW5pemUke3ZuYW1lfS5jZmcKKworCSMgQ2xlYW51cCBjZmcgZmlsZQorCW12IHViaW5pemUke3ZuYW1lfS5jZmcgJHtERVBMT1lfRElSX0lNQUdFfS8KKworCSMgQ3JlYXRlIG93biBzeW1saW5rCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCWlmIFsgLWUgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyBdOyB0aGVuCisJCWxuIC1zZiAke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaWZzIFwKKwkJJHtJTUFHRV9MSU5LX05BTUV9JHt2bmFtZX0udWJpZnMKKwlmaQorCWlmIFsgLWUgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmkgXTsgdGhlbgorCQlsbiAtc2YgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmkgXAorCQkke0lNQUdFX0xJTktfTkFNRX0ke3ZuYW1lfS51YmkKKwlmaQorCWNkIC0KK30KKworSU1BR0VfQ01EX211bHRpdWJpICgpIHsKKwkjIFNwbGl0IE1LVUJJRlNfQVJHU188bmFtZT4gYW5kIFVCSU5JWkVfQVJHU188bmFtZT4KKwlmb3IgbmFtZSBpbiAke01VTFRJVUJJX0JVSUxEfTsgZG8KKwkJZXZhbCBsb2NhbCBta3ViaWZzX2FyZ3M9XCJcJE1LVUJJRlNfQVJHU18ke25hbWV9XCIKKwkJZXZhbCBsb2NhbCB1YmluaXplX2FyZ3M9XCJcJFVCSU5JWkVfQVJHU18ke25hbWV9XCIKKworCQltdWx0aXViaV9ta2ZzICIke21rdWJpZnNfYXJnc30iICIke3ViaW5pemVfYXJnc30iICIke25hbWV9IgorCWRvbmUKK30KKworSU1BR0VfQ01EX3ViaSAoKSB7CisJbXVsdGl1YmlfbWtmcyAiJHtNS1VCSUZTX0FSR1N9IiAiJHtVQklOSVpFX0FSR1N9IgorfQorCitJTUFHRV9DTURfdWJpZnMgPSAibWtmcy51YmlmcyAtciAke0lNQUdFX1JPT1RGU30gLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy51YmlmcyAke01LVUJJRlNfQVJHU30iCisKK0lNQUdFX0NNRF93aWMgKCkgeworCW91dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0KKwl3a3M9JHtGSUxFX0RJUk5BTUV9LyR7SU1BR0VfQkFTRU5BTUV9LiR7TUFDSElORX0ud2tzCisJWyAtZSAkd2tzIF0gfHwgd2tzPSR7RklMRV9ESVJOQU1FfS8ke0lNQUdFX0JBU0VOQU1FfS53a3MKKwlbIC1lICR3a3MgXSB8fCBiYmZhdGFsICJLaXNrc3RhcnQgZmlsZSAkd2tzIGRvZXNuJ3QgZXhpc3QiCisJQlVJTERESVI9JHtUT1BESVJ9IHdpYyBjcmVhdGUgJHdrcyAtLXZhcnMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9L2ltZ2RhdGEvIC1lICR7SU1BR0VfQkFTRU5BTUV9IC1vICRvdXQvCisJbXYgJG91dC9idWlsZC8ke0lNQUdFX0JBU0VOQU1FfSouZGlyZWN0ICRvdXQucm9vdGZzLndpYworCXJtIC1yZiAkb3V0LworfQorCitFWFRSQV9JTUFHRUNNRCA9ICIiCisKK2luaGVyaXQgc2l0ZWluZm8KK0pGRlMyX0VORElBTk5FU1MgPz0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLWwnLCAnLWInLCBkKX0iCitKRkZTMl9FUkFTRUJMT0NLID89ICIweDQwMDAwIgorRVhUUkFfSU1BR0VDTURfamZmczIgPz0gIi0tcGFkICR7SkZGUzJfRU5ESUFOTkVTU30gLS1lcmFzZWJsb2NrPSR7SkZGUzJfRVJBU0VCTE9DS30gLS1uby1jbGVhbm1hcmtlcnMiCisKKyMgQ2hhbmdlIHRoZXNlIGlmIHlvdSB3YW50IGRlZmF1bHQgbWtmcyBiZWhhdmlvciAoaS5lLiBjcmVhdGUgbWluaW1hbCBpbm9kZSBudW1iZXIpCitFWFRSQV9JTUFHRUNNRF9leHQyID89ICItaSA0MDk2IgorRVhUUkFfSU1BR0VDTURfZXh0MyA/PSAiLWkgNDA5NiIKK0VYVFJBX0lNQUdFQ01EX2V4dDQgPz0gIi1pIDQwOTYiCitFWFRSQV9JTUFHRUNNRF9idHJmcyA/PSAiIgorRVhUUkFfSU1BR0VDTURfZWxmID89ICIiCisKK0lNQUdFX0RFUEVORFMgPSAiIgorSU1BR0VfREVQRU5EU19qZmZzMiA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19jcmFtZnMgPSAidXRpbC1saW51eC1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2V4dDIgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfZXh0MyA9ICJlMmZzcHJvZ3MtbmF0aXZlIgorSU1BR0VfREVQRU5EU19leHQ0ID0gImUyZnNwcm9ncy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2J0cmZzID0gImJ0cmZzLXRvb2xzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfc3F1YXNoZnMgPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19zcXVhc2hmcy14eiA9ICJzcXVhc2hmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3NxdWFzaGZzLWx6byA9ICJzcXVhc2hmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2VsZiA9ICJ2aXJ0dWFsL2tlcm5lbCBta2VsZmltYWdlLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfdWJpID0gIm10ZC11dGlscy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3ViaWZzID0gIm10ZC11dGlscy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX211bHRpdWJpID0gIm10ZC11dGlscy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3dpYyA9ICJwYXJ0ZWQtbmF0aXZlIgorCisjIFRoaXMgdmFyaWFibGUgaXMgYXZhaWxhYmxlIHRvIHJlcXVlc3Qgd2hpY2ggdmFsdWVzIGFyZSBzdWl0YWJsZSBmb3IgSU1BR0VfRlNUWVBFUworSU1BR0VfVFlQRVMgPSAiIFwKKyAgICBqZmZzMiBqZmZzMi5zdW0gXAorICAgIGNyYW1mcyBcCisgICAgZXh0MiBleHQyLmd6IGV4dDIuYnoyIGV4dDIubHptYSBcCisgICAgZXh0MyBleHQzLmd6IFwKKyAgICBleHQ0IGV4dDQuZ3ogXAorICAgIGJ0cmZzIFwKKyAgICBpc28gXAorICAgIGhkZGltZyBcCisgICAgc3F1YXNoZnMgc3F1YXNoZnMteHogc3F1YXNoZnMtbHpvIFwKKyAgICB1YmkgdWJpZnMgbXVsdGl1YmkgXAorICAgIHRhciB0YXIuZ3ogdGFyLmJ6MiB0YXIueHogdGFyLmx6NCBcCisgICAgY3BpbyBjcGlvLmd6IGNwaW8ueHogY3Bpby5sem1hIGNwaW8ubHo0IFwKKyAgICB2bWRrIFwKKyAgICB2ZGkgXAorICAgIHFjb3cyIFwKKyAgICBlbGYgXAorICAgIHdpYyB3aWMuZ3ogd2ljLmJ6MiB3aWMubHptYSBcCisiCisKK0NPTVBSRVNTSU9OVFlQRVMgPSAiZ3ogYnoyIGx6bWEgeHogbHo0IHN1bSIKK0NPTVBSRVNTX0NNRF9sem1hID0gImx6bWEgLWsgLWYgLTcgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSIKK0NPTVBSRVNTX0NNRF9neiA9ICJnemlwIC1mIC05IC1jICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gPiAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmd6IgorQ09NUFJFU1NfQ01EX2J6MiA9ICJwYnppcDIgLWYgLWsgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSIKK0NPTVBSRVNTX0NNRF94eiA9ICJ4eiAtZiAtayAtYyAke1haX0NPTVBSRVNTSU9OX0xFVkVMfSAke1haX1RIUkVBRFN9IC0tY2hlY2s9JHtYWl9JTlRFR1JJVFlfQ0hFQ0t9ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gPiAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lnh6IgorQ09NUFJFU1NfQ01EX2x6NCA9ICJsejRjIC05IC1jICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gPiAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmx6NCIKK0NPTVBSRVNTX0NNRF9zdW0gPSAic3VtdG9vbCAtaSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IC1vICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uc3VtICR7SkZGUzJfU1VNX0VYVFJBX0FSR1N9IgorQ09NUFJFU1NfREVQRU5EU19sem1hID0gInh6LW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfZ3ogPSAiIgorQ09NUFJFU1NfREVQRU5EU19iejIgPSAicGJ6aXAyLW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfeHogPSAieHotbmF0aXZlIgorQ09NUFJFU1NfREVQRU5EU19sejQgPSAibHo0LW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfc3VtID0gIm10ZC11dGlscy1uYXRpdmUiCisKK1JVTk5BQkxFX0lNQUdFX1RZUEVTID89ICJleHQyIGV4dDMgZXh0NCIKK1JVTk5BQkxFX01BQ0hJTkVfUEFUVEVSTlMgPz0gInFlbXUiCisKK0RFUExPWUFCTEVfSU1BR0VfVFlQRVMgPz0gImhkZGltZyBpc28iIAorCisjIFVzZSBJTUFHRV9FWFRFTlNJT05feHh4IHRvIG1hcCBpbWFnZSB0eXBlICd4eHgnIHdpdGggcmVhbCBpbWFnZSBmaWxlIGV4dGVuc2lvbiBuYW1lKHMpIGZvciBIb2IKK0lNQUdFX0VYVEVOU0lPTl9saXZlID0gImhkZGltZyBpc28iCisKKyMgVGhlIElNQUdFX1RZUEVTX01BU0tFRCB2YXJpYWJsZSB3aWxsIGJlIHVzZWQgdG8gbWFzayBvdXQgZnJvbSB0aGUgSU1BR0VfRlNUWVBFUywKKyMgaW1hZ2VzIHRoYXQgd2lsbCBub3QgYmUgYnVpbHQgYXQgZG9fcm9vdGZzIHRpbWU6IHZtZGssIHZkaSwgcWNvdzIsIGhkZGltZywgaXNvLCBldGMuCitJTUFHRV9UWVBFU19NQVNLRUQgPz0gIiIKKworIyBUaGUgV0lDVkFSUyB2YXJpYWJsZSBpcyB1c2VkIHRvIGRlZmluZSBsaXN0IG9mIGJpdGJha2UgdmFyaWFibGVzIHVzZWQgaW4gd2ljIGNvZGUKKyMgdmFyaWFibGVzIGZyb20gdGhpcyBsaXN0IGlzIHdyaXR0ZW4gdG8gPGltYWdlPi5lbnYgZmlsZQorV0lDVkFSUyA/PSAiQkJMQVlFUlMgREVQTE9ZX0RJUl9JTUFHRSBIRERESVIgSU1BR0VfQkFTRU5BTUUgSU1BR0VfQk9PVF9GSUxFUyBJTUFHRV9MSU5LX05BTUUgSU1BR0VfUk9PVEZTIElOSVRSQU1GU19GU1RZUEVTIElOSVRSRCBJU09ESVIgTUFDSElORV9BUkNIIFJPT1RGU19TSVpFIFNUQUdJTkdfREFUQURJUiBTVEFHSU5HX0RJUl9OQVRJVkUgU1RBR0lOR19MSUJESVIgVEFSR0VUX1NZUyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzX3Vib290LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxYmNhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjYgQEAKK2luaGVyaXQgaW1hZ2VfdHlwZXMga2VybmVsLWFyY2gKKworb2VfbWtpbWFnZSAoKSB7CisgICAgbWtpbWFnZSAtQSAke1VCT09UX0FSQ0h9IC1PIGxpbnV4IC1UIHJhbWRpc2sgLUMgJDIgLW4gJHtJTUFHRV9OQU1FfSBcCisgICAgICAgIC1kICR7REVQTE9ZX0RJUl9JTUFHRX0vJDEgJHtERVBMT1lfRElSX0lNQUdFfS8kMS51LWJvb3QKKyAgICBpZiBbIHgkMyA9IHgiY2xlYW4iIF07IHRoZW4KKyAgICAgICAgcm0gJDEKKyAgICBmaQorfQorCitDT01QUkVTU0lPTlRZUEVTICs9ICJnei51LWJvb3QgYnoyLnUtYm9vdCBsem1hLnUtYm9vdCB1LWJvb3QiCisKK0NPTVBSRVNTX0RFUEVORFNfdS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF91LWJvb3QgICAgICA9ICJvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gbm9uZSIKKworQ09NUFJFU1NfREVQRU5EU19nei51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX2d6LnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2d6fTsgb2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmd6IGd6aXAgY2xlYW4iCisKK0NPTVBSRVNTX0RFUEVORFNfYnoyLnUtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT01QUkVTU19DTURfYnoyLnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2J6Mn07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5iejIgYnppcDIgY2xlYW4iCisKK0NPTVBSRVNTX0RFUEVORFNfbHptYS51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX2x6bWEudS1ib290ICAgICAgPSAiJHtDT01QUkVTU19DTURfbHptYX07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5sem1hIGx6bWEgY2xlYW4iCisKK0lNQUdFX1RZUEVTICs9ICJleHQyLnUtYm9vdCBleHQyLmd6LnUtYm9vdCBleHQyLmJ6Mi51LWJvb3QgZXh0Mi5sem1hLnUtYm9vdCBleHQzLmd6LnUtYm9vdCBleHQ0Lmd6LnUtYm9vdCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MKQEAgLTAsMCArMSwxMjgwIEBACisjIEJCIENsYXNzIGluc3BpcmVkIGJ5IGVidWlsZC5zaAorIworIyBUaGlzIGNsYXNzIHdpbGwgdGVzdCBmaWxlcyBhZnRlciBpbnN0YWxsYXRpb24gZm9yIGNlcnRhaW4KKyMgc2VjdXJpdHkgaXNzdWVzIGFuZCBvdGhlciBraW5kIG9mIGlzc3Vlcy4KKyMKKyMgQ2hlY2tzIHdlIGRvOgorIyAgLUNoZWNrIHRoZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zCisjICAtQ2hlY2sgdGhlIFJVTlRJTUUgcGF0aCBmb3IgdGhlICRUTVBESVIKKyMgIC1DaGVjayBpZiAubGEgZmlsZXMgd3JvbmdseSBwb2ludCB0byB3b3JrZGlyCisjICAtQ2hlY2sgaWYgLnBjIGZpbGVzIHdyb25nbHkgcG9pbnQgdG8gd29ya2RpcgorIyAgLUNoZWNrIGlmIHBhY2thZ2VzIGNvbnRhaW5zIC5kZWJ1ZyBkaXJlY3RvcmllcyBvciAuc28gZmlsZXMKKyMgICB3aGVyZSB0aGV5IHNob3VsZCBiZSBpbiAtZGV2IG9yIC1kYmcKKyMgIC1DaGVjayBpZiBjb25maWcubG9nIGNvbnRhaW5zIHRyYWNlcyB0byBicm9rZW4gYXV0b2NvbmYgdGVzdHMKKyMgIC1DaGVjayBpbnZhbGlkIGNoYXJhY3RlcnMgKG5vbi11dGY4KSBvbiBzb21lIHBhY2thZ2UgbWV0YWRhdGEKKyMgIC1FbnN1cmUgdGhhdCBiaW5hcmllcyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIGRvIG5vdCBsaW5rCisjICAgaW50byBleGVjX3ByZWZpeAorIyAgLUNoZWNrIHRoYXQgc2NyaXB0cyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIGRvIG5vdCByZWZlcmVuY2UKKyMgICBmaWxlcyB1bmRlciBleGVjX3ByZWZpeAorCisKKyMgdW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMgcmVxdWlyZXMgcHJlbGluay1ydGxkIGZyb20KKyMgcHJlbGluay1uYXRpdmUsIGJ1dCB3ZSBkb24ndCB3YW50IHRoaXMgREVQRU5EUyBmb3IgLW5hdGl2ZSBidWlsZHMKK1FBREVQRU5EUyA9ICJwcmVsaW5rLW5hdGl2ZSIKK1FBREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorUUFERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitRQV9TQU5FID0gIlRydWUiCisKKyMgRWxlY3Qgd2hldGhlciBhIGdpdmVuIHR5cGUgb2YgZXJyb3IgaXMgYSB3YXJuaW5nIG9yIGVycm9yLCB0aGV5IG1heQorIyBoYXZlIGJlZW4gc2V0IGJ5IG90aGVyIGZpbGVzLgorV0FSTl9RQSA/PSAibGRmbGFncyB1c2VsZXNzLXJwYXRocyBycGF0aHMgc3RhdGljZGV2IGxpYmRpciB4b3JnLWRyaXZlci1hYmkgXAorICAgICAgICAgICAgdGV4dHJlbCBhbHJlYWR5LXN0cmlwcGVkIGluY29tcGF0aWJsZS1saWNlbnNlIGZpbGVzLWludmFsaWQgXAorICAgICAgICAgICAgaW5zdGFsbGVkLXZzLXNoaXBwZWQgY29tcGlsZS1ob3N0LXBhdGggaW5zdGFsbC1ob3N0LXBhdGggXAorICAgICAgICAgICAgcG4tb3ZlcnJpZGVzIGluZm9kaXIgYnVpbGQtZGVwcyBmaWxlLXJkZXBzIFwKKyAgICAgICAgICAgIHVua25vd24tY29uZmlndXJlLW9wdGlvbiBzeW1saW5rLXRvLXN5c3Jvb3QgbXVsdGlsaWIgXAorICAgICAgICAgICAgaW52YWxpZC1wa2djb25maWcgaG9zdC11c2VyLWNvbnRhbWluYXRlZCBcCisgICAgICAgICAgICAiCitFUlJPUl9RQSA/PSAiZGV2LXNvIGRlYnVnLWRlcHMgZGV2LWRlcHMgZGVidWctZmlsZXMgYXJjaCBwa2djb25maWcgbGEgXAorICAgICAgICAgICAgcGVybXMgZGVwLWNtcCBwa2d2YXJjaGVjayBwZXJtLWNvbmZpZyBwZXJtLWxpbmUgcGVybS1saW5rIFwKKyAgICAgICAgICAgIHNwbGl0LXN0cmlwIHBhY2thZ2VzLWxpc3QgcGtndi11bmRlZmluZWQgdmFyLXVuZGVmaW5lZCBcCisgICAgICAgICAgICB2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyBleHBhbmRlZC1kIGludmFsaWQtY2hhcnMgXAorICAgICAgICAgICAgIgorRkFLRVJPT1RfUUEgPSAiaG9zdC11c2VyLWNvbnRhbWluYXRlZCIKK0ZBS0VST09UX1FBW2RvY10gPSAiUUEgdGVzdHMgd2hpY2ggbmVlZCB0byBydW4gdW5kZXIgZmFrZXJvb3QuIElmIGFueSBcCitlbmFibGVkIHRlc3RzIGFyZSBsaXN0ZWQgaGVyZSwgdGhlIGRvX3BhY2thZ2VfcWEgdGFzayB3aWxsIHJ1biB1bmRlciBmYWtlcm9vdC4iCisKK0FMTF9RQSA9ICIke1dBUk5fUUF9ICR7RVJST1JfUUF9IgorCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgPz0gIi0tZW5hYmxlLW5scyAtLWRpc2FibGUtbmxzIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCIKKworIworIyBkaWN0aW9uYXJ5IGZvciBlbGYgaGVhZGVycworIworIyBmZWVsIGZyZWUgdG8gYWRkIGFuZCBjb3JyZWN0LgorIworIyAgICAgICAgICAgVEFSR0VUX09TICBUQVJHRVRfQVJDSCAgIE1BQ0hJTkUsIE9TQUJJLCBBQklWRVJTSU9OLCBMaXR0bGUgRW5kaWFuLCAzMmJpdD8KK2RlZiBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKToKKyAgICByZXR1cm4geworICAgICAgICAgICAgImRhcndpbjkiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImVsZiIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiIgOiAgICAgICgzLCAgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImVwaXBoYW55IjogICAoNDY0MywgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eCIgOiB7IAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjQiIDogICAoMTgzLCAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NF9iZSIgOigxODMsICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjNjQiOiAgKDIxLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImkzODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTQ4NiI6ICAgICAgICggMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpYTY0IjogICAgICAgKDUwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhIjogICAgICAoMzY5MDIsICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiaHBwYSI6ICAgICAgICgxNSwgICAgIDMsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtNjhrIjogICAgICAgKCA0LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiczM5MCI6ICAgICAgICgyMiwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaDQiOiAgICAgICAgKDQyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNwYXJjIjogICAgICAoIDIsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9ibGF6ZSI6ICAoMTg5LCAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JsYXplZWIiOigxODksICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemVlbCI6KDE4OSwgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC11Y2xpYmMiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoICAyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTQ4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICggIDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzZWwiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhdnIzMiI6ICAgICAgKDYzMTcsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1tdXNsIiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NCIgOiAgICgxODMsICAgIDAsICAgIDAsICAgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiIDooMTgzLCAgICAwLCAgICAwLCAgICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoICAyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTQ4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICggIDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzZWwiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgInVjbGludXgtdWNsaWJjIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJiZmluIjogICAgICAgKCAxMDYsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LCAKKyAgICAgICAgICAgICJsaW51eC1nbnVlYWJpIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIiA6ICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1tdXNsZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtdWNsaWJjZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtZ251c3BlIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbHNwZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LXVjbGliY3NwZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudSIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaDQiOiAgICAgICAgKDQyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtZ251eDMyIiA6ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtZ251bjMyIiA6ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIH0KKworCitkZWYgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCk6CisgICAgIiIiIFJlbW92ZSB0aGUgY29tbW9uIHByZWZpeCBmcm9tIHRoZSBwYXRoLiBJbiB0aGlzIGNhc2UgaXQgaXMgdGhlIFRNUERJUiIiIgorICAgIHJldHVybiBwYXRoLnJlcGxhY2UoZC5nZXRWYXIoJ1RNUERJUicsVHJ1ZSksIiIpCisKK2RlZiBwYWNrYWdlX3FhX3dyaXRlX2Vycm9yKHR5cGUsIGVycm9yLCBkKToKKyAgICBsb2dmaWxlID0gZC5nZXRWYXIoJ1FBX0xPR0ZJTEUnLCBUcnVlKQorICAgIGlmIGxvZ2ZpbGU6CisgICAgICAgIHAgPSBkLmdldFZhcignUCcsIFRydWUpCisgICAgICAgIGYgPSBmaWxlKCBsb2dmaWxlLCAiYSsiKQorICAgICAgICBwcmludCA+PiBmLCAiJXM6ICVzIFslc10iICUgKHAsIGVycm9yLCB0eXBlKQorICAgICAgICBmLmNsb3NlKCkKKworZGVmIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKGVycm9yX2NsYXNzLCBlcnJvcl9tc2csIGQpOgorICAgIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IoZXJyb3JfY2xhc3MsIGVycm9yX21zZywgZCkKKyAgICBpZiBlcnJvcl9jbGFzcyBpbiAoZC5nZXRWYXIoIkVSUk9SX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGJiLmVycm9yKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCisgICAgICAgIGQuc2V0VmFyKCJRQV9TQU5FIiwgRmFsc2UpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsaWYgZXJyb3JfY2xhc3MgaW4gKGQuZ2V0VmFyKCJXQVJOX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGJiLndhcm4oIlFBIElzc3VlOiAlcyBbJXNdIiAlIChlcnJvcl9tc2csIGVycm9yX2NsYXNzKSkKKyAgICBlbHNlOgorICAgICAgICBiYi5ub3RlKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCisgICAgcmV0dXJuIFRydWUKKworUUFQQVRIVEVTVFtsaWJleGVjXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2xpYmV4ZWMiCitkZWYgcGFja2FnZV9xYV9jaGVja19saWJleGVjKHBhdGgsbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisKKyAgICAjIFNraXAgdGhlIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgaXMgZXhwbGljaXRseSAvdXNyL2xpYmV4ZWMKKyAgICBsaWJleGVjID0gZC5nZXRWYXIoJ2xpYmV4ZWNkaXInLCBUcnVlKQorICAgIGlmIGxpYmV4ZWMgPT0gIi91c3IvbGliZXhlYyI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiAnbGliZXhlYycgaW4gcGF0aC5zcGxpdChvcy5wYXRoLnNlcCk6CisgICAgICAgIG1lc3NhZ2VzWyJsaWJleGVjIl0gPSAiJXM6ICVzIGlzIHVzaW5nIGxpYmV4ZWMgcGxlYXNlIHJlbG9jYXRlIHRvICVzIiAlIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCwgZCksIGxpYmV4ZWMpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworUUFQQVRIVEVTVFtycGF0aHNdID0gInBhY2thZ2VfcWFfY2hlY2tfcnBhdGgiCitkZWYgcGFja2FnZV9xYV9jaGVja19ycGF0aChmaWxlLG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBkYW5nZXJvdXMgUlBBVEhzCisgICAgIiIiCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYWRfZGlycyA9IFtkLmdldFZhcignQkFTRV9XT1JLRElSJywgVHJ1ZSksIGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKV0KKworICAgIHBoZHJzID0gZWxmLnJ1bl9vYmpkdW1wKCItcCIsIGQpCisKKyAgICBpbXBvcnQgcmUKKyAgICBycGF0aF9yZSA9IHJlLmNvbXBpbGUoIlxzK1JQQVRIXHMrKC4qKSIpCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIG0gPSBycGF0aF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcnBhdGggPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBmb3IgZGlyIGluIGJhZF9kaXJzOgorICAgICAgICAgICAgICAgIGlmIGRpciBpbiBycGF0aDoKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbInJwYXRocyJdID0gInBhY2thZ2UgJXMgY29udGFpbnMgYmFkIFJQQVRIICVzIGluIGZpbGUgJXMiICUgKG5hbWUsIHJwYXRoLCBmaWxlKQorCitRQVBBVEhURVNUW3VzZWxlc3MtcnBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3VzZWxlc3NfcnBhdGhzIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfdXNlbGVzc19ycGF0aHMoZmlsZSwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIFJQQVRIcyB0aGF0IGFyZSB1c2VsZXNzIGJ1dCBub3QgZGFuZ2Vyb3VzCisgICAgIiIiCisgICAgZGVmIHJwYXRoX2VxKGEsIGIpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aChhKSA9PSBvcy5wYXRoLm5vcm1wYXRoKGIpCisKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICByZXR1cm4KKworICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKQorICAgIGJhc2VfbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkKKworICAgIHBoZHJzID0gZWxmLnJ1bl9vYmpkdW1wKCItcCIsIGQpCisKKyAgICBpbXBvcnQgcmUKKyAgICBycGF0aF9yZSA9IHJlLmNvbXBpbGUoIlxzK1JQQVRIXHMrKC4qKSIpCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIG0gPSBycGF0aF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcnBhdGggPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBpZiBycGF0aF9lcShycGF0aCwgbGliZGlyKSBvciBycGF0aF9lcShycGF0aCwgYmFzZV9saWJkaXIpOgorICAgICAgICAgICAgICAgICMgVGhlIGR5bmFtaWMgbGlua2VyIHNlYXJjaGVzIGJvdGggdGhlc2UgcGxhY2VzIGFueXdheS4gIFRoZXJlIGlzIG5vIHBvaW50IGluCisgICAgICAgICAgICAgICAgIyBsb29raW5nIHRoZXJlIGFnYWluLgorICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJ1c2VsZXNzLXJwYXRocyJdID0gIiVzOiAlcyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggJXMiICUgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChmaWxlLCBkKSwgcnBhdGgpCisKK1FBUEFUSFRFU1RbZGV2LXNvXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2RldiIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2RldihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgIi5zbyIgbGlicmFyeSBzeW1saW5rcyBpbiBub24tZGV2IHBhY2thZ2VzCisgICAgIiIiCisKKyAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgiLWRldiIpIGFuZCBub3QgbmFtZS5lbmRzd2l0aCgiLWRiZyIpIGFuZCBub3QgbmFtZS5lbmRzd2l0aCgiLXB0ZXN0IikgYW5kIG5vdCBuYW1lLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSBhbmQgcGF0aC5lbmRzd2l0aCgiLnNvIikgYW5kIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICBtZXNzYWdlc1siZGV2LXNvIl0gPSAibm9uIC1kZXYvLWRiZy9uYXRpdmVzZGstIHBhY2thZ2UgY29udGFpbnMgc3ltbGluayAuc286ICVzIHBhdGggJyVzJyIgJSBcCisgICAgICAgICAgICAgICAgIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtzdGF0aWNkZXZdID0gInBhY2thZ2VfcWFfY2hlY2tfc3RhdGljZGV2IgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3RhdGljZGV2KHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciAiLmEiIGxpYnJhcnkgaW4gbm9uLXN0YXRpY2RldiBwYWNrYWdlcworICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSwgLXBpYyBwYWNrYWdlcyBjYW4gY29udGFpbgorICAgIHN0YXRpYyBsaWJyYXJpZXMsIHRoZSBfbm9uc2hhcmVkLmEgYmVsb25nIHdpdGggdGhlaXIgLWRldiBwYWNrYWdlcyBhbmQKKyAgICBsaWJnY2MuYSwgbGliZ2Nvdi5hIHdpbGwgYmUgc2tpcHBlZCBpbiB0aGVpciBwYWNrYWdlcworICAgICIiIgorCisgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoIi1waWMiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1zdGF0aWNkZXYiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1wdGVzdCIpIGFuZCBwYXRoLmVuZHN3aXRoKCIuYSIpIGFuZCBub3QgcGF0aC5lbmRzd2l0aCgiX25vbnNoYXJlZC5hIik6CisgICAgICAgIG1lc3NhZ2VzWyJzdGF0aWNkZXYiXSA9ICJub24gLXN0YXRpY2RldiBwYWNrYWdlIGNvbnRhaW5zIHN0YXRpYyAuYSBsaWJyYXJ5OiAlcyBwYXRoICclcyciICUgXAorICAgICAgICAgICAgICAgICAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2xpYmRpcihkKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3Igd3JvbmcgbGlicmFyeSBpbnN0YWxsYXRpb24gcGF0aHMuIEZvciBpbnN0YW5jZSwgY2F0Y2gKKyAgICByZWNpcGVzIGluc3RhbGxpbmcgL2xpYi9iYXIuc28gd2hlbiAke2Jhc2VfbGliZGlyfT0ibGliMzIiIG9yCisgICAgaW5zdGFsbGluZyBpbiAvdXNyL2xpYjY0IHdoZW4gJHtsaWJkaXJ9PSIvdXNyL2xpYiIKKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgYmFzZV9saWJkaXIgPSBkLmdldFZhcigiYmFzZV9saWJkaXIiLFRydWUpICsgb3Muc2VwCisgICAgbGliZGlyID0gZC5nZXRWYXIoImxpYmRpciIsIFRydWUpICsgb3Muc2VwCisgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcigiZXhlY19wcmVmaXgiLCBUcnVlKSArIG9zLnNlcAorCisgICAgbWVzc2FnZXMgPSBbXQorCisgICAgbGliX3JlID0gcmUuY29tcGlsZSgiXi9saWIuK1wuc28oXC4uKyk/JCIpCisgICAgZXhlY19yZSA9IHJlLmNvbXBpbGUoIl4lcy4qL2xpYi4rXC5zbyhcLi4rKT8kIiAlIGV4ZWNfcHJlZml4KQorCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGtnZGVzdCk6CisgICAgICAgIGlmIHJvb3QgPT0gcGtnZGVzdDoKKyAgICAgICAgICAgICMgU2tpcCBzdWJkaXJlY3RvcmllcyBmb3IgYW55IHBhY2thZ2VzIHdpdGggbGliZGlyIGluIElOU0FORV9TS0lQCisgICAgICAgICAgICBza2lwcGFja2FnZXMgPSBbXQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBpZiAnbGliZGlyJyBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwYWNrYWdlLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBsaWJkaXIgUUEgdGVzdCIgJSAocGFja2FnZSkpCisgICAgICAgICAgICAgICAgICAgIHNraXBwYWNrYWdlcy5hcHBlbmQocGFja2FnZSkKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHNraXBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShwYWNrYWdlKQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZnVsbF9wYXRoLCBwa2dkZXN0KQorICAgICAgICAgICAgaWYgb3Muc2VwIGluIHJlbF9wYXRoOgorICAgICAgICAgICAgICAgIHBhY2thZ2UsIHJlbF9wYXRoID0gcmVsX3BhdGguc3BsaXQob3Muc2VwLCAxKQorICAgICAgICAgICAgICAgIHJlbF9wYXRoID0gb3Muc2VwICsgcmVsX3BhdGgKKyAgICAgICAgICAgICAgICBpZiBsaWJfcmUubWF0Y2gocmVsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBpZiBiYXNlX2xpYmRpciBub3QgaW4gcmVsX3BhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQoIiVzOiBmb3VuZCBsaWJyYXJ5IGluIHdyb25nIGxvY2F0aW9uOiAlcyIgJSAocGFja2FnZSwgcmVsX3BhdGgpKQorICAgICAgICAgICAgICAgIGlmIGV4ZWNfcmUubWF0Y2gocmVsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaWJkaXIgbm90IGluIHJlbF9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCIlczogZm91bmQgbGlicmFyeSBpbiB3cm9uZyBsb2NhdGlvbjogJXMiICUgKHBhY2thZ2UsIHJlbF9wYXRoKSkKKworICAgIGlmIG1lc3NhZ2VzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigibGliZGlyIiwgIlxuIi5qb2luKG1lc3NhZ2VzKSwgZCkKKworUUFQQVRIVEVTVFtkZWJ1Zy1maWxlc10gPSAicGFja2FnZV9xYV9jaGVja19kYmciCitkZWYgcGFja2FnZV9xYV9jaGVja19kYmcocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yICIuZGVidWciIGZpbGVzIG9yIGRpcmVjdG9yaWVzIG91dHNpZGUgb2YgdGhlIGRiZyBwYWNrYWdlCisgICAgIiIiCisKKyAgICBpZiBub3QgIi1kYmciIGluIG5hbWUgYW5kIG5vdCAiLXB0ZXN0IiBpbiBuYW1lOgorICAgICAgICBpZiAnLmRlYnVnJyBpbiBwYXRoLnNwbGl0KG9zLnBhdGguc2VwKToKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJkZWJ1Zy1maWxlcyJdID0gIm5vbiBkZWJ1ZyBwYWNrYWdlIGNvbnRhaW5zIC5kZWJ1ZyBkaXJlY3Rvcnk6ICVzIHBhdGggJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitRQVBBVEhURVNUW3Blcm1zXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3Blcm0iCitkZWYgcGFja2FnZV9xYV9jaGVja19wZXJtKHBhdGgsbmFtZSxkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGUgcGVybWlzc2lvbiBvZiBmaWxlcworICAgICIiIgorICAgIHJldHVybgorCitRQVBBVEhURVNUW3Vuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX2JpbmFyaWVzIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fYmluYXJpZXMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgRW5zdXJlIGJpbmFyaWVzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gZG8gbm90IGxpbmsgdG8gZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKyAgICAiIiIKKyAgICBpZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgZWxmOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JywgVHJ1ZSkKKyAgICAgICAgc3lzcm9vdF9wYXRoID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgICAgIHN5c3Jvb3RfcGF0aF91c3IgPSBzeXNyb290X3BhdGggKyBleGVjX3ByZWZpeAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxkZF9vdXRwdXQgPSBiYi5wcm9jZXNzLlBvcGVuKFsicHJlbGluay1ydGxkIiwgIi0tcm9vdCIsIHN5c3Jvb3RfcGF0aCwgcGF0aF0sIHN0ZG91dD1zdWIuUElQRSkuc3Rkb3V0LnJlYWQoKQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvcjoKKyAgICAgICAgICAgIGVycm9yX21zZyA9IHBuICsgIjogcHJlbGluay1ydGxkIGFib3J0ZWQgd2hlbiBwcm9jZXNzaW5nICVzIiAlIHBhdGgKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHN5c3Jvb3RfcGF0aF91c3IgaW4gbGRkX291dHB1dDoKKyAgICAgICAgICAgIGxkZF9vdXRwdXQgPSBsZGRfb3V0cHV0LnJlcGxhY2Uoc3lzcm9vdF9wYXRoLCAiIikKKworICAgICAgICAgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzaG9ydF9wYXRoID0gcGF0aC5yZXBsYWNlKCclcy8lcycgJSAocGtnZGVzdCwgcGFja2FnZSksICIiLCAxKQorICAgICAgICAgICAgICAgIGlmIChzaG9ydF9wYXRoICE9IHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBiYXNlX2VyciA9IHBuICsgIjogJXMsIGluc3RhbGxlZCBpbiB0aGUgYmFzZV9wcmVmaXgsIHJlcXVpcmVzIGEgc2hhcmVkIGxpYnJhcnkgdW5kZXIgZXhlY19wcmVmaXggKCVzKSIgJSAoc2hvcnRfcGF0aCwgZXhlY19wcmVmaXgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsZGRfb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGlmIGV4ZWNfcHJlZml4IGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlczogJXMiICUgKGJhc2VfZXJyLCBsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyIsIGVycm9yX21zZywgZCkKKworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK1FBUEFUSFRFU1RbdW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0c10gPSAicGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9zY3JpcHRzIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fc2NyaXB0cyhwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBXYXJuIGlmIHNjcmlwdHMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSByZWZlcmVuY2UgZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKyAgICAiIiIKKyAgICBpZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgaW1wb3J0IHN0YXQKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgICAgICMgRW5zdXJlIHdlJ3JlIGNoZWNraW5nIGFuIGV4ZWN1dGFibGUgc2NyaXB0CisgICAgICAgIHN0YXRpbmZvID0gb3Muc3RhdChwYXRoKQorICAgICAgICBpZiBib29sKHN0YXRpbmZvLnN0X21vZGUgJiBzdGF0LlNfSVhVU1IpOgorICAgICAgICAgICAgIyBncmVwIHNoZWxsIHNjcmlwdHMgZm9yIHBvc3NpYmxlIHJlZmVyZW5jZXMgdG8gL2V4ZWNfcHJlZml4LworICAgICAgICAgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhlY19wcmVmaXgnLCBUcnVlKQorICAgICAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLWUgJyVzLycgJXMgPiAvZGV2L251bGwiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQorICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSBwbiArICI6IEZvdW5kIGEgcmVmZXJlbmNlIHRvICVzLyBpbiAlcyIgJSAoZXhlY19wcmVmaXgsIHBhdGgpCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIlNoZWxsIHNjcmlwdHMgaW4gYmFzZV9iaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciBzaG91bGQgbm90IHJlZmVyZW5jZSBhbnl0aGluZyBpbiBleGVjX3ByZWZpeCIKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0cyIsIGVycm9yX21zZywgZCkKKworZGVmIHVuc2FmZV9yZWZlcmVuY2VzX3NraXBwYWJsZShwYXRoLCBuYW1lLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmICItZGJnIiBpbiBuYW1lIG9yICItZGV2IiBpbiBuYW1lOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBPdGhlciBwYWNrYWdlIG5hbWVzIHRvIHNraXA6CisgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJrZXJuZWwtbW9kdWxlLSIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIHN5bWxpbmtzCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFNraXAgdW51c3VhbCByb290ZnMgbGF5b3V0cyB3aGljaCBtYWtlIHRoZXNlIHRlc3RzIGlycmVsZXZhbnQKKyAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCdleGVjX3ByZWZpeCcsIFRydWUpCisgICAgaWYgZXhlY19wcmVmaXggPT0gIiI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBwa2dkZXN0ICsgIi8iICsgbmFtZQorICAgIHBrZ2Rlc3QgPSBvcy5wYXRoLmFic3BhdGgocGtnZGVzdCkKKyAgICBiYXNlX2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKQorICAgIGJhc2Vfc2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSkKKyAgICBiYXNlX2xpYmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9saWJkaXInLCBUcnVlKQorICAgIGJpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkKKyAgICBzYmluZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdzYmluZGlyJywgVHJ1ZSkKKyAgICBsaWJkaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisKKyAgICBpZiBiYXNlX2JpbmRpciA9PSBiaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciA9PSBzYmluZGlyIGFuZCBiYXNlX2xpYmRpciA9PSBsaWJkaXI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFNraXAgZmlsZXMgbm90IGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0KKyAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCisgICAgaWYgbm90IChiYXNlX2JpbmRpciBpbiBwYXRoIG9yIGJhc2Vfc2JpbmRpciBpbiBwYXRoIG9yIGJhc2VfbGliZGlyIGluIHBhdGgpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKK1FBUEFUSFRFU1RbYXJjaF0gPSAicGFja2FnZV9xYV9jaGVja19hcmNoIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfYXJjaChwYXRoLG5hbWUsZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgYXJjaHMgYXJlIGNvbXBhdGlibGUKKyAgICAiIiIKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIHRhcmdldF9vcyAgID0gZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpCisgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIHByb3ZpZGVzID0gZC5nZXRWYXIoJ1BST1ZJREVTJywgVHJ1ZSkKKyAgICBicG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKworICAgIGlmIHRhcmdldF9hcmNoID09ICJhbGxhcmNoIjoKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBtZXNzYWdlc1siYXJjaCJdID0gcG4gKyAiOiBSZWNpcGUgaW5oZXJpdHMgdGhlIGFsbGFyY2ggY2xhc3MsIGJ1dCBoYXMgcGFja2FnZWQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJpbmFyaWVzIgorICAgICAgICByZXR1cm4KKworICAgICMgRklYTUU6IENyb3NzIHBhY2thZ2UgY29uZnVzZSB0aGlzIGNoZWNrLCBzbyBqdXN0IHNraXAgdGhlbQorICAgIGZvciBzIGluIFsnY3Jvc3MnLCAnbmF0aXZlc2RrJywgJ2Nyb3NzLWNhbmFkaWFuJ106CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MocywgZCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICMgYXZvaWQgZm9sbG93aW5nIGxpbmtzIHRvIC91c3IvYmluIChlLmcuIG9uIHVkZXYgYnVpbGRzKQorICAgICMgd2Ugd2lsbCBjaGVjayB0aGUgZmlsZXMgcG9pbnRlZCB0byBhbnl3YXkuLi4KKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjaWYgdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgdGhlbiBmaXggdGhlIGRpY3QgYWJvdmUKKyAgICAobWFjaGluZSwgb3NhYmksIGFiaXZlcnNpb24sIGxpdHRsZWVuZGlhbiwgYml0cykgXAorICAgICAgICA9IHBhY2thZ2VfcWFfZ2V0X21hY2hpbmVfZGljdCgpW3RhcmdldF9vc11bdGFyZ2V0X2FyY2hdCisKKyAgICAjIENoZWNrIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGVuZGlhbm5lcyBvZiB0aGUgYmluYXJ5CisgICAgaWYgbm90ICgobWFjaGluZSA9PSBlbGYubWFjaGluZSgpKSBvciBcCisgICAgICAgICgoKCJ2aXJ0dWFsL2tlcm5lbCIgaW4gcHJvdmlkZXMpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZSIsIGQpICkgYW5kICh0YXJnZXRfb3MgPT0gImxpbnV4LWdudXgzMiIgb3IgdGFyZ2V0X29zID09ICJsaW51eC1nbnVuMzIiKSkpOgorICAgICAgICBtZXNzYWdlc1siYXJjaCJdID0gIkFyY2hpdGVjdHVyZSBkaWQgbm90IG1hdGNoICglZCB0byAlZCkgb24gJXMiICUgXAorICAgICAgICAgICAgICAgICAobWFjaGluZSwgZWxmLm1hY2hpbmUoKSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisgICAgZWxpZiBub3QgKChiaXRzID09IGVsZi5hYmlTaXplKCkpIG9yICBcCisgICAgICAgICgoKCJ2aXJ0dWFsL2tlcm5lbCIgaW4gcHJvdmlkZXMpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZSIsIGQpICkgYW5kICh0YXJnZXRfb3MgPT0gImxpbnV4LWdudXgzMiIgb3IgdGFyZ2V0X29zID09ICJsaW51eC1nbnVuMzIiKSkpOgorICAgICAgICBtZXNzYWdlc1siYXJjaCJdID0gIkJpdCBzaXplIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSAlcyBvbiAlcyIgJSBcCisgICAgICAgICAgICAgICAgIChiaXRzLCBlbGYuYWJpU2l6ZSgpLCBicG4sIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorICAgIGVsaWYgbm90IGxpdHRsZWVuZGlhbiA9PSBlbGYuaXNMaXR0bGVFbmRpYW4oKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJFbmRpYW5uZXMgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpIG9uICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgKGxpdHRsZWVuZGlhbiwgZWxmLmlzTGl0dGxlRW5kaWFuKCksIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitRQVBBVEhURVNUW2Rlc2t0b3BdID0gInBhY2thZ2VfcWFfY2hlY2tfZGVza3RvcCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2Rlc2t0b3AocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgUnVuIGFsbCBkZXNrdG9wIGZpbGVzIHRocm91Z2ggZGVza3RvcC1maWxlLXZhbGlkYXRlLgorICAgICIiIgorICAgIGlmIHBhdGguZW5kc3dpdGgoIi5kZXNrdG9wIik6CisgICAgICAgIGRlc2t0b3BfZmlsZV92YWxpZGF0ZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJyxUcnVlKSwnZGVza3RvcC1maWxlLXZhbGlkYXRlJykKKyAgICAgICAgb3V0cHV0ID0gb3MucG9wZW4oIiVzICVzIiAlIChkZXNrdG9wX2ZpbGVfdmFsaWRhdGUsIHBhdGgpKQorICAgICAgICAjIFRoaXMgb25seSBwcm9kdWNlcyBvdXRwdXQgb24gZXJyb3JzCisgICAgICAgIGZvciBsIGluIG91dHB1dDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJkZXNrdG9wIl0gPSAiRGVza3RvcCBmaWxlIGlzc3VlOiAiICsgbC5zdHJpcCgpCisKK1FBUEFUSFRFU1RbdGV4dHJlbF0gPSAicGFja2FnZV9xYV90ZXh0cmVsIgorZGVmIHBhY2thZ2VfcWFfdGV4dHJlbChwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBpZiB0aGUgYmluYXJ5IGNvbnRhaW5zIHJlbG9jYXRpb25zIGluIC50ZXh0CisgICAgIiIiCisKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIHBoZHJzID0gZWxmLnJ1bl9vYmpkdW1wKCItcCIsIGQpCisgICAgc2FuZSA9IFRydWUKKworICAgIGltcG9ydCByZQorICAgIHRleHRyZWxfcmUgPSByZS5jb21waWxlKCJccytURVhUUkVMXHMrIikKKyAgICBmb3IgbGluZSBpbiBwaGRycy5zcGxpdCgiXG4iKToKKyAgICAgICAgaWYgdGV4dHJlbF9yZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorCisgICAgaWYgbm90IHNhbmU6CisgICAgICAgIG1lc3NhZ2VzWyJ0ZXh0cmVsIl0gPSAiRUxGIGJpbmFyeSAnJXMnIGhhcyByZWxvY2F0aW9ucyBpbiAudGV4dCIgJSBwYXRoCisKK1FBUEFUSFRFU1RbbGRmbGFnc10gPSAicGFja2FnZV9xYV9oYXNoX3N0eWxlIgorZGVmIHBhY2thZ2VfcWFfaGFzaF9zdHlsZShwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBpZiB0aGUgYmluYXJ5IGhhcyB0aGUgcmlnaHQgaGFzaCBzdHlsZS4uLgorICAgICIiIgorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBnbnVfaGFzaCA9ICItLWhhc2gtc3R5bGU9Z251IiBpbiBkLmdldFZhcignTERGTEFHUycsIFRydWUpCisgICAgaWYgbm90IGdudV9oYXNoOgorICAgICAgICBnbnVfaGFzaCA9ICItLWhhc2gtc3R5bGU9Ym90aCIgaW4gZC5nZXRWYXIoJ0xERkxBR1MnLCBUcnVlKQorICAgIGlmIG5vdCBnbnVfaGFzaDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBzYW5lID0gRmFsc2UKKyAgICBoYXNfc3ltcyA9IEZhbHNlCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgIyBJZiB0aGlzIGJpbmFyeSBoYXMgc3ltYm9scywgd2UgZXhwZWN0IGl0IHRvIGhhdmUgR05VX0hBU0ggdG9vLgorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBpZiAiU1lNVEFCIiBpbiBsaW5lOgorICAgICAgICAgICAgaGFzX3N5bXMgPSBUcnVlCisgICAgICAgIGlmICJHTlVfSEFTSCIgaW4gbGluZToKKyAgICAgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIGlmICJbbWlwczMyXSIgaW4gbGluZSBvciAiW21pcHM2NF0iIGluIGxpbmU6CisgICAgICAgICAgICBzYW5lID0gVHJ1ZQorCisgICAgaWYgaGFzX3N5bXMgYW5kIG5vdCBzYW5lOgorICAgICAgICBtZXNzYWdlc1sibGRmbGFncyJdID0gIk5vIEdOVV9IQVNIIGluIHRoZSBlbGYgYmluYXJ5OiAnJXMnIiAlIHBhdGgKKworCitRQVBBVEhURVNUW2J1aWxkcGF0aHNdID0gInBhY2thZ2VfcWFfY2hlY2tfYnVpbGRwYXRocyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2J1aWxkcGF0aHMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIGJ1aWxkIHBhdGhzIGluc2lkZSB0YXJnZXQgZmlsZXMgYW5kIGVycm9yIGlmIG5vdCBmb3VuZCBpbiB0aGUgd2hpdGVsaXN0CisgICAgIiIiCisgICAgIyBJZ25vcmUgLmRlYnVnIGZpbGVzLCBub3QgaW50ZXJlc3RpbmcKKyAgICBpZiBwYXRoLmZpbmQoIi5kZWJ1ZyIpICE9IC0xOgorICAgICAgICByZXR1cm4KKworICAgICMgSWdub3JlIHN5bWxpbmtzCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgIGlmIHRtcGRpciBpbiBmaWxlX2NvbnRlbnQ6CisgICAgICAgICAgICBtZXNzYWdlc1siYnVpbGRwYXRocyJdID0gIkZpbGUgJXMgaW4gcGFja2FnZSBjb250YWluZWQgcmVmZXJlbmNlIHRvIHRtcGRpciIgJSBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKQorCisKK1FBUEFUSFRFU1RbeG9yZy1kcml2ZXItYWJpXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3hvcmdfZHJpdmVyX2FiaSIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3hvcmdfZHJpdmVyX2FiaShwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGF0IGFsbCBwYWNrYWdlcyBjb250YWluaW5nIFhvcmcgZHJpdmVycyBoYXZlIEFCSSBkZXBlbmRlbmNpZXMKKyAgICAiIiIKKworICAgICMgU2tpcCBkZXYsIGRiZyBvciBuYXRpdmVzZGsgcGFja2FnZXMKKyAgICBpZiBuYW1lLmVuZHN3aXRoKCItZGV2Iikgb3IgbmFtZS5lbmRzd2l0aCgiLWRiZyIpIG9yIG5hbWUuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICByZXR1cm4KKworICAgIGRyaXZlcmRpciA9IGQuZXhwYW5kKCIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2RyaXZlcnMvIikKKyAgICBpZiBkcml2ZXJkaXIgaW4gcGF0aCBhbmQgcGF0aC5lbmRzd2l0aCgiLnNvIik6CisgICAgICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICAgICAgZm9yIHJkZXAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgbmFtZSwgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgaWYgcmRlcC5zdGFydHN3aXRoKCIlc3hvcmctYWJpLSIgJSBtbHByZWZpeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1lc3NhZ2VzWyJ4b3JnLWRyaXZlci1hYmkiXSA9ICJQYWNrYWdlICVzIGNvbnRhaW5zIFhvcmcgZHJpdmVyICglcykgYnV0IG5vIHhvcmctYWJpLSBkZXBlbmRlbmNpZXMiICUgKG5hbWUsIG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCisKK1FBUEFUSFRFU1RbaW5mb2Rpcl0gPSAicGFja2FnZV9xYV9jaGVja19pbmZvZGlyIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfaW5mb2RpcihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGF0IC91c3Ivc2hhcmUvaW5mby9kaXIgaXNuJ3Qgc2hpcHBlZCBpbiBhIHBhcnRpY3VsYXIgcGFja2FnZQorICAgICIiIgorICAgIGluZm9kaXIgPSBkLmV4cGFuZCgiJHtpbmZvZGlyfS9kaXIiKQorCisgICAgaWYgaW5mb2RpciBpbiBwYXRoOgorICAgICAgICBtZXNzYWdlc1siaW5mb2RpciJdID0gIlRoZSAvdXNyL3NoYXJlL2luZm8vZGlyIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIHNoaXBwZWQgaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UuIgorCitRQVBBVEhURVNUW3N5bWxpbmstdG8tc3lzcm9vdF0gPSAicGFja2FnZV9xYV9jaGVja19zeW1saW5rX3RvX3N5c3Jvb3QiCitkZWYgcGFja2FnZV9xYV9jaGVja19zeW1saW5rX3RvX3N5c3Jvb3QocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCB0aGUgcGFja2FnZSBkb2Vzbid0IGNvbnRhaW4gYW55IGFic29sdXRlIHN5bWxpbmtzIHRvIHRoZSBzeXNyb290LgorICAgICIiIgorICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICB0YXJnZXQgPSBvcy5yZWFkbGluayhwYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICAgICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHRhcmdldC5zdGFydHN3aXRoKHRtcGRpcik6CisgICAgICAgICAgICAgICAgdHJpbW1lZCA9IHBhdGgucmVwbGFjZShvcy5wYXRoLmpvaW4gKGQuZ2V0VmFyKCJQS0dERVNUIiwgVHJ1ZSksIG5hbWUpLCAiIikKKyAgICAgICAgICAgICAgICBtZXNzYWdlc1sic3ltbGluay10by1zeXNyb290Il0gPSAiU3ltbGluayAlcyBpbiAlcyBwb2ludHMgdG8gVE1QRElSIiAlICh0cmltbWVkLCBuYW1lKQorZGVmIHBhY2thZ2VfcWFfY2hlY2tfbGljZW5zZSh3b3JrZGlyLCBkKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgY2hhbmdlcyBpbiB0aGUgbGljZW5zZSBmaWxlcyAKKyAgICAiIiIKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICBzYW5lID0gVHJ1ZQorCisgICAgbGljX2ZpbGVzID0gZC5nZXRWYXIoJ0xJQ19GSUxFU19DSEtTVU0nLCBUcnVlKQorICAgIGxpYyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBpZiBsaWMgPT0gIkNMT1NFRCI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBub3QgbGljX2ZpbGVzOgorICAgICAgICBiYi5lcnJvcihwbiArICI6IFJlY2lwZSBmaWxlIGRvZXMgbm90IGhhdmUgbGljZW5zZSBmaWxlIGluZm9ybWF0aW9uIChMSUNfRklMRVNfQ0hLU1VNKSIpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgc3JjZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorCisgICAgZm9yIHVybCBpbiBsaWNfZmlsZXMuc3BsaXQoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgKHR5cGUsIGhvc3QsIHBhdGgsIHVzZXIsIHBzd2QsIHBhcm0pID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIHBuICsgIjogTElDX0ZJTEVTX0NIS1NVTSBjb250YWlucyBhbiBpbnZhbGlkIFVSTDogIiArIHVybCkKKyAgICAgICAgc3JjbGljZmlsZSA9IG9zLnBhdGguam9pbihzcmNkaXIsIHBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzcmNsaWNmaWxlKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIHBuICsgIjogTElDX0ZJTEVTX0NIS1NVTSBwb2ludHMgdG8gYW4gaW52YWxpZCBmaWxlOiAiICsgc3JjbGljZmlsZSkKKworICAgICAgICByZWNpcGVtZDUgPSBwYXJtLmdldCgnbWQ1JywgJycpCisgICAgICAgIGJlZ2lubGluZSwgZW5kbGluZSA9IDAsIDAKKyAgICAgICAgaWYgJ2JlZ2lubGluZScgaW4gcGFybToKKyAgICAgICAgICAgIGJlZ2lubGluZSA9IGludChwYXJtWydiZWdpbmxpbmUnXSkKKyAgICAgICAgaWYgJ2VuZGxpbmUnIGluIHBhcm06CisgICAgICAgICAgICBlbmRsaW5lID0gaW50KHBhcm1bJ2VuZGxpbmUnXSkKKworICAgICAgICBpZiAobm90IGJlZ2lubGluZSkgYW5kIChub3QgZW5kbGluZSk6CisgICAgICAgICAgICBtZDVjaGtzdW0gPSBiYi51dGlscy5tZDVfZmlsZShzcmNsaWNmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmkgPSBvcGVuKHNyY2xpY2ZpbGUsICdyYicpCisgICAgICAgICAgICBmbyA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3YicsIHByZWZpeD0ncG9reS4nLCBzdWZmaXg9Jy50bXAnLCBkZWxldGU9RmFsc2UpCisgICAgICAgICAgICB0bXBsaWNmaWxlID0gZm8ubmFtZTsKKyAgICAgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgICAgIGxpbmVzb3V0ID0gMAorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmk6CisgICAgICAgICAgICAgICAgbGluZW5vICs9IDEKKyAgICAgICAgICAgICAgICBpZiAobGluZW5vID49IGJlZ2lubGluZSk6IAorICAgICAgICAgICAgICAgICAgICBpZiAoKGxpbmVubyA8PSBlbmRsaW5lKSBvciBub3QgZW5kbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmby53cml0ZShsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNvdXQgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZvLmZsdXNoKCkKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIGZpLmNsb3NlKCkKKyAgICAgICAgICAgIG1kNWNoa3N1bSA9IGJiLnV0aWxzLm1kNV9maWxlKHRtcGxpY2ZpbGUpCisgICAgICAgICAgICBvcy51bmxpbmsodG1wbGljZmlsZSkKKworICAgICAgICBpZiByZWNpcGVtZDUgPT0gbWQ1Y2hrc3VtOgorICAgICAgICAgICAgYmIubm90ZSAocG4gKyAiOiBtZDUgY2hlY2tzdW0gbWF0Y2hlZCBmb3IgIiwgdXJsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVjaXBlbWQ1OgorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogbWQ1IGRhdGEgaXMgbm90IG1hdGNoaW5nIGZvciAiLCB1cmwpCisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBUaGUgbmV3IG1kNSBjaGVja3N1bSBpcyAiLCBtZDVjaGtzdW0pCisgICAgICAgICAgICAgICAgaWYgYmVnaW5saW5lOgorICAgICAgICAgICAgICAgICAgICBpZiBlbmRsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGxpbmVzICVkIHRocm91Z2ggdG8gJWQpIiAlIChzcmNsaWNmaWxlLCBiZWdpbmxpbmUsIGVuZGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9ICIlcyAoYmVnaW5uaW5nIG9uIGxpbmUgJWQpIiAlIChzcmNsaWNmaWxlLCBiZWdpbmxpbmUpCisgICAgICAgICAgICAgICAgZWxpZiBlbmRsaW5lOgorICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9ICIlcyAoZW5kaW5nIG9uIGxpbmUgJWQpIiAlIChzcmNsaWNmaWxlLCBlbmRsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGVkZXNjID0gc3JjbGljZmlsZQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogQ2hlY2sgaWYgdGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaGFzIGNoYW5nZWQgaW4gJXMgdG8gdmVyaWZ5IHRoYXQgdGhlIExJQ0VOU0UgdmFsdWUgXCIlc1wiIHJlbWFpbnMgdmFsaWQiICUgKHNyY2ZpbGVkZXNjLCBsaWMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IG1kNSBjaGVja3N1bSBpcyBub3Qgc3BlY2lmaWVkIGZvciAiLCB1cmwpCisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBUaGUgbWQ1IGNoZWNrc3VtIGlzICIsIG1kNWNoa3N1bSkKKyAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorCisgICAgcmV0dXJuIHNhbmUKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3RhZ2VkKHBhdGgsZCk6CisgICAgIiIiCisgICAgQ2hlY2sgc3RhZ2VkIGxhIGFuZCBwYyBmaWxlcyBmb3Igc2FuaXR5CisgICAgICAtZS5nLiBpbnN0YWxsZWQgYmVpbmcgZmFsc2UKKworICAgICAgICBBcyB0aGlzIGlzIHJ1biBhZnRlciBldmVyeSBzdGFnZSB3ZSBzaG91bGQgYmUgYWJsZQorICAgICAgICB0byBmaW5kIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRoZSBlcnJvcnMgZWFzaWx5IGV2ZW4KKyAgICAgICAgaWYgd2UgbG9vayBhdCBldmVyeSAucGMgYW5kIC5sYSBmaWxlCisgICAgIiIiCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHdvcmtkaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAid29yayIpCisKKyAgICBpbnN0YWxsZWQgPSAiaW5zdGFsbGVkPXllcyIKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICBwa2djb25maWdjaGVjayA9IHdvcmtkaXIKKyAgICBlbHNlOgorICAgICAgICBwa2djb25maWdjaGVjayA9IHRtcGRpcgorCisgICAgIyBmaW5kIGFsbCAubGEgYW5kIC5wYyBmaWxlcworICAgICMgcmVhZCB0aGUgY29udGVudAorICAgICMgYW5kIGNoZWNrIGZvciBzdHVmZiB0aGF0IGxvb2tzIHdyb25nCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LGZpbGUpCisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCIubGEiKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgd29ya2RpciBpbiBmaWxlX2NvbnRlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgZmFpbGVkIHNhbml0eSB0ZXN0ICh3b3JrZGlyKSBpbiBwYXRoICVzIiAlIChmaWxlLHJvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxhIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCIucGMiKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnY29uZmlnY2hlY2sgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGZhaWxlZCBzYW5pdHkgdGVzdCAodG1wZGlyKSBpbiBwYXRoICVzIiAlIChmaWxlLHJvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ2NvbmZpZyIsIGVycm9yX21zZywgZCkKKworICAgIHJldHVybiBzYW5lCisKKyMgV2FsayBvdmVyIGFsbCBmaWxlcyBpbiBhIGRpcmVjdG9yeSBhbmQgY2FsbCBmdW5jCitkZWYgcGFja2FnZV9xYV93YWxrKHBhdGgsIHdhcm5mdW5jcywgZXJyb3JmdW5jcywgc2tpcCwgcGFja2FnZSwgZCk6CisgICAgaW1wb3J0IG9lLnFhCisKKyAgICAjaWYgdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgdGhlbiBmaXggdGhlIGRpY3QgYWJvdmUKKyAgICB0YXJnZXRfb3MgICA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKworICAgIHdhcm5pbmdzID0ge30KKyAgICBlcnJvcnMgPSB7fQorICAgIGZvciBwYXRoIGluIHBrZ2ZpbGVzW3BhY2thZ2VdOgorICAgICAgICAgICAgZWxmID0gb2UucWEuRUxGRmlsZShwYXRoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZi5vcGVuKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBlbGYgPSBOb25lCisgICAgICAgICAgICBmb3IgZnVuYyBpbiB3YXJuZnVuY3M6CisgICAgICAgICAgICAgICAgZnVuYyhwYXRoLCBwYWNrYWdlLCBkLCBlbGYsIHdhcm5pbmdzKQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gZXJyb3JmdW5jczoKKyAgICAgICAgICAgICAgICBmdW5jKHBhdGgsIHBhY2thZ2UsIGQsIGVsZiwgZXJyb3JzKQorCisgICAgZm9yIHcgaW4gd2FybmluZ3M6CisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKHcsIHdhcm5pbmdzW3ddLCBkKQorICAgIGZvciBlIGluIGVycm9yczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoZSwgZXJyb3JzW2VdLCBkKQorCisgICAgcmV0dXJuIGxlbihlcnJvcnMpID09IDAKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfcmRlcGVuZHMocGtnLCBwa2dkZXN0LCBza2lwLCB0YXNrZGVwcywgcGFja2FnZXMsIGQpOgorICAgICMgRG9uJ3QgZG8gdGhpcyBjaGVjayBmb3Iga2VybmVsL21vZHVsZSByZWNpcGVzLCB0aGVyZSBhcmVuJ3QgdG9vIG1hbnkgZGVidWcvZGV2ZWxvcG1lbnQKKyAgICAjIHBhY2thZ2VzIGFuZCB5b3UgY2FuIGdldCBmYWxzZSBwb3NpdGl2ZXMgZS5nLiBvbiBrZXJuZWwtbW9kdWxlLWxpcmMtZGV2CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygia2VybmVsIiwgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibW9kdWxlLWJhc2UiLCBkKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHNhbmUgPSBUcnVlCisgICAgaWYgbm90ICItZGJnIiBpbiBwa2cgYW5kIG5vdCAicGFja2FnZWdyb3VwLSIgaW4gcGtnIGFuZCBub3QgIi1pbWFnZSIgaW4gcGtnOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgcGtnKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICAjIE5vdyBjaGVjayB0aGUgUkRFUEVORFMKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMobG9jYWxkYXRhLmdldFZhcignUkRFUEVORFMnLCBUcnVlKSBvciAiIikKKworICAgICAgICAjIE5vdyBkbyB0aGUgc2FuaXR5IGNoZWNrISEhCisgICAgICAgIGlmICJidWlsZC1kZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmICItZGJnIiBpbiByZGVwZW5kIGFuZCAiZGVidWctZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyByZGVwZW5kcyBvbiAlcyIgJSAocGtnLHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGVidWctZGVwcyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgICAgICBpZiAobm90ICItZGV2IiBpbiBwa2cgYW5kIG5vdCAiLXN0YXRpY2RldiIgaW4gcGtnKSBhbmQgcmRlcGVuZC5lbmRzd2l0aCgiLWRldiIpIGFuZCAiZGV2LWRlcHMiIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMiICUgKHBrZywgcmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJkZXYtZGVwcyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgICAgICBpZiByZGVwZW5kIG5vdCBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHJkZXBlbmQsIGQpCisgICAgICAgICAgICAgICAgICAgIGlmIHJkZXBfZGF0YSBhbmQgJ1BOJyBpbiByZGVwX2RhdGEgYW5kIHJkZXBfZGF0YVsnUE4nXSBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZGVwX2RhdGEgb3Igbm90ICdQTicgaW4gcmRlcF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlcyA9IG9zLmxpc3RkaXIoIiVzL3J1bnRpbWUtcnByb3ZpZGVzLyVzLyIgJSAocGtnZGF0YV9kaXIsIHJkZXBlbmQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHBvc3NpYmxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocCwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIHJkZXBfZGF0YSBhbmQgJ1BOJyBpbiByZGVwX2RhdGEgYW5kIHJkZXBfZGF0YVsnUE4nXSBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyByZGVwZW5kcyBvbiAlcywgYnV0IGl0IGlzbid0IGEgYnVpbGQgZGVwZW5kZW5jeT8iICUgKHBrZywgcmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJidWlsZC1kZXBzIiwgZXJyb3JfbXNnLCBkKQorCisgICAgICAgIGlmICJmaWxlLXJkZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgIGlnbm9yZWRfZmlsZV9yZGVwcyA9IHNldChbJy9iaW4vc2gnLCAnL3Vzci9iaW4vZW52JywgJ3J0bGQoR05VX0hBU0gpJ10pCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgICAgICAgICBpZ25vcmVkX2ZpbGVfcmRlcHMgfD0gc2V0KFsnL2Jpbi9iYXNoJywgJy91c3IvYmluL3BlcmwnXSkKKyAgICAgICAgICAgICMgRm9yIFNhdmluZyB0aGUgRklMRVJERVBFTkRTCisgICAgICAgICAgICBmaWxlcmRlcGVuZHMgPSB7fQorICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gcmRlcF9kYXRhOgorICAgICAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJGSUxFUkRFUEVORFNfIik6CisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJrZXkgaW4gcmRlcF9kYXRhW2tleV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1YmtleSBub3QgaW4gaWdub3JlZF9maWxlX3JkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IGl0IHN0YXJ0cyB3aXRoIEZJTEVSREVQRU5EU18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHNbc3Via2V5XSA9IGtleVsxMzpdCisKKyAgICAgICAgICAgIGlmIGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICBuZXh0ID0gcmRlcGVuZHMKKyAgICAgICAgICAgICAgICBkb25lID0gcmRlcGVuZHNbOl0KKyAgICAgICAgICAgICAgICAjIEZpbmQgYWxsIHRoZSByZGVwZW5kcyBvbiB0aGUgZGVwZW5kZW5jeSBjaGFpbgorICAgICAgICAgICAgICAgIHdoaWxlIG5leHQ6CisgICAgICAgICAgICAgICAgICAgIG5ldyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByZGVwIGluIG5leHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocmRlcCwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9yZGVwcyA9IHJkZXBfZGF0YS5nZXQoIlJERVBFTkRTXyIgKyByZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN1Yl9yZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1Yl9yZGVwIGluIHN1Yl9yZGVwcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1Yl9yZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN1Yl9yZGVwLnN0YXJ0c3dpdGgoJygnKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2UucGFja2FnZWRhdGEuaGFzX3N1YnBrZ2RhdGEoc3ViX3JkZXAsIGQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEl0J3MgYSBuZXcgcmRlcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChzdWJfcmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LmFwcGVuZChzdWJfcmRlcCkKKyAgICAgICAgICAgICAgICAgICAgbmV4dCA9IG5ldworCisgICAgICAgICAgICAgICAgIyBBZGQgdGhlIHJwcm92aWRlcyBvZiBpdHNlbGYKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGRvbmUuaW5zZXJ0KDAsIHBrZykKKworICAgICAgICAgICAgICAgICMgVGhlIHB5dGhvbiBpcyBub3QgYSBwYWNrYWdlLCBidXQgcHl0aG9uLWNvcmUgcHJvdmlkZXMgaXQsIHNvCisgICAgICAgICAgICAgICAgIyBza2lwIGNoZWNraW5nIC91c3IvYmluL3B5dGhvbiBpZiBweXRob24gaXMgaW4gdGhlIHJkZXBzLCBpbgorICAgICAgICAgICAgICAgICMgY2FzZSB0aGVyZSBpcyBhIFJERVBFTkRTX3BrZyA9ICJweXRob24iIGluIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgZm9yIHB5IGluIFsgZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgKyAicHl0aG9uIiwgInB5dGhvbiIgXToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHkgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVyZGVwZW5kcy5wb3AoIi91c3IvYmluL3B5dGhvbiIsTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUucmVtb3ZlKHB5KQorICAgICAgICAgICAgICAgIGZvciByZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICMgRm9yIFNhdmluZyB0aGUgRklMRVJQUk9WSURFUywgUlBST1ZJREVTIGFuZCBGSUxFU19JTkZPCisgICAgICAgICAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShyZGVwLCBkKQorICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJGSUxFUlBST1ZJREVTXyIpIG9yIGtleS5zdGFydHN3aXRoKCJSUFJPVklERVNfIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmtleSBpbiByZGVwX2RhdGFba2V5XS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHMucG9wKHN1YmtleSxOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgdGhlIGZpbGVzIGxpc3QgdG8gdGhlIHJwcm92aWRlcworICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJGSUxFU19JTkZPIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZSBldmFsKCkgdG8gbWFrZSBpdCBhcyBhIGRpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3Via2V5IGluIGV2YWwocmRlcF9kYXRhW2tleV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHMucG9wKHN1YmtleSxOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlsZXJkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBCcmVhayBpZiBhbGwgdGhlIGZpbGUgcmRlcGVuZHMgYXJlIG1ldAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGNvbnRhaW5lZCBpbiBwYWNrYWdlICVzIHJlcXVpcmVzICVzLCBidXQgbm8gcHJvdmlkZXJzIGZvdW5kIGluIGl0cyBSREVQRU5EUyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVyZGVwZW5kc1trZXldLHBrZywga2V5KQorICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZmlsZS1yZGVwcyIsIGVycm9yX21zZywgZCkKKworICAgIHJldHVybiBzYW5lCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2RlcHMocGtnLCBwa2dkZXN0LCBza2lwLCBkKToKKyAgICBzYW5lID0gVHJ1ZQorCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgcGtnKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgZGVmIGNoZWNrX3ZhbGlkX2RlcHModmFyKToKKyAgICAgICAgc2FuZSA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnZhciA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXNfJXM6ICVzIiAlICh2YXIsIHBrZywgZSkpCisgICAgICAgIGZvciBkZXAgaW4gcnZhcjoKKyAgICAgICAgICAgIGZvciB2IGluIHJ2YXJbZGVwXToKKyAgICAgICAgICAgICAgICBpZiB2IGFuZCBub3Qgdi5zdGFydHN3aXRoKCgnPCAnLCAnPSAnLCAnPiAnLCAnPD0gJywgJz49JykpOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXNfJXMgaXMgaW52YWxpZDogJXMgKCVzKSAgIG9ubHkgY29tcGFyaXNvbnMgPCwgPSwgPiwgPD0sIGFuZCA+PSBhcmUgYWxsb3dlZCIgJSAodmFyLCBwa2csIGRlcCwgdikKKyAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJkZXAtY21wIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICByZXR1cm4gc2FuZQorCisgICAgc2FuZSA9IFRydWUKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUkRFUEVORFMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JSRUNPTU1FTkRTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSU1VHR0VTVFMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JQUk9WSURFUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlJFUExBQ0VTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSQ09ORkxJQ1RTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorCisgICAgcmV0dXJuIHNhbmUKKworUUFQQVRIVEVTVFtleHBhbmRlZC1kXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2V4cGFuZGVkX2QiCitkZWYgcGFja2FnZV9xYV9jaGVja19leHBhbmRlZF9kKHBhdGgsbmFtZSxkLGVsZixtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIHRoZSBleHBhbmRlZCBEICgke0R9KSB2YWx1ZSBpbiBwa2dfKiBhbmQgRklMRVMKKyAgICB2YXJpYWJsZXMsIHdhcm4gdGhlIHVzZXIgdG8gdXNlIGl0IGNvcnJlY3RseS4KKyAgICAiIiIKKworICAgIHNhbmUgPSBUcnVlCisgICAgZXhwYW5kZWRfZCA9IGQuZ2V0VmFyKCdEJyxUcnVlKQorCisgICAgIyBHZXQgcGFja2FnZXMgZm9yIGN1cnJlbnQgcmVjaXBlIGFuZCBpdGVyYXRlCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgiICIpCisgICAgZm9yIHBhayBpbiBwYWNrYWdlczoKKyAgICAjIEdvIHRocm91Z2ggYWxsIHZhcmlhYmxlcyBhbmQgY2hlY2sgaWYgZXhwYW5kZWQgRCBpcyBmb3VuZCwgd2FybiB0aGUgdXNlciBhY2NvcmRpbmdseQorICAgICAgICBmb3IgdmFyIGluICdGSUxFUycsJ3BrZ19wcmVpbnN0JywgJ3BrZ19wb3N0aW5zdCcsICdwa2dfcHJlcm0nLCAncGtnX3Bvc3RybSc6CisgICAgICAgICAgICBiYnZhciA9IGQuZ2V0VmFyKHZhciArICJfIiArIHBhaywgRmFsc2UpCisgICAgICAgICAgICBpZiBiYnZhcjoKKyAgICAgICAgICAgICAgICAjIEJpdGJha2UgZXhwYW5kcyAke0R9IHdpdGhpbiBiYnZhciBkdXJpbmcgdGhlIHByZXZpb3VzIHN0ZXAsIHNvIHdlIGNoZWNrIGZvciBpdHMgZXhwYW5kZWQgdmFsdWUKKyAgICAgICAgICAgICAgICBpZiBleHBhbmRlZF9kIGluIGJidmFyOgorICAgICAgICAgICAgICAgICAgICBpZiB2YXIgPT0gJ0ZJTEVTJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJleHBhbmRlZC1kIl0gPSAiRklMRVMgaW4gJXMgcmVjaXBlIHNob3VsZCBub3QgY29udGFpbiB0aGUgJHtEfSB2YXJpYWJsZSBhcyBpdCByZWZlcmVuY2VzIHRoZSBsb2NhbCBidWlsZCBkaXJlY3Rvcnkgbm90IHRoZSB0YXJnZXQgZmlsZXN5c3RlbSwgYmVzdCBzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhlICR7RH0gcmVmZXJlbmNlIiAlIHBhaworICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1siZXhwYW5kZWQtZCJdID0gIiVzIGluICVzIHJlY2lwZSBjb250YWlucyAke0R9LCBpdCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgJEQgaW5zdGVhZCIgJSAodmFyLCBwYWspCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5lID0gRmFsc2UKKyAgICByZXR1cm4gc2FuZQorCitkZWYgcGFja2FnZV9xYV9jaGVja19lbmNvZGluZyhrZXlzLCBlbmNvZGUsIGQpOgorICAgIGRlZiBjaGVja19lbmNvZGluZyhrZXksZW5jKToKKyAgICAgICAgc2FuZSA9IFRydWUKKyAgICAgICAgdmFsdWUgPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSB1bmljb2RlKHZhbHVlLCBlbmMpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGhhcyBub24gJXMgY2hhcmFjdGVycyIgJSAoa2V5LGVuYykKKyAgICAgICAgICAgICAgICBzYW5lID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW52YWxpZC1jaGFycyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgcmV0dXJuIHNhbmUKKworICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgc2FuZSA9IGNoZWNrX2VuY29kaW5nKGtleSwgZW5jb2RlKQorICAgICAgICBpZiBub3Qgc2FuZToKKyAgICAgICAgICAgIGJyZWFrCisKK0hPU1RfVVNFUl9VSUQgOj0gIiR7QG9zLmdldHVpZCgpfSIKK0hPU1RfVVNFUl9HSUQgOj0gIiR7QG9zLmdldGdpZCgpfSIKKworUUFQQVRIVEVTVFtob3N0LXVzZXItY29udGFtaW5hdGVkXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2hvc3RfdXNlciIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2hvc3RfdXNlcihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiJDaGVjayBmb3IgcGF0aHMgb3V0c2lkZSBvZiAvaG9tZSB3aGljaCBhcmUgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiIiIgorCisgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cyhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGhvbWUgPSBvcy5wYXRoLmpvaW4oZGVzdCwgJ2hvbWUnKQorICAgIGlmIHBhdGggPT0gaG9tZSBvciBwYXRoLnN0YXJ0c3dpdGgoaG9tZSArIG9zLnNlcCk6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBzdGF0ID0gb3MubHN0YXQocGF0aCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICBjaGVja191aWQgPSBpbnQoZC5nZXRWYXIoJ0hPU1RfVVNFUl9VSUQnLCBUcnVlKSkKKyAgICAgICAgaWYgc3RhdC5zdF91aWQgPT0gY2hlY2tfdWlkOgorICAgICAgICAgICAgbWVzc2FnZXNbImhvc3QtdXNlci1jb250YW1pbmF0ZWQiXSA9ICIlcyBpcyBvd25lZCBieSB1aWQgJWQsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4gVGhpcyBtYXkgYmUgZHVlIHRvIGhvc3QgY29udGFtaW5hdGlvbiIgJSAocGF0aCwgY2hlY2tfdWlkKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgY2hlY2tfZ2lkID0gaW50KGQuZ2V0VmFyKCdIT1NUX1VTRVJfR0lEJywgVHJ1ZSkpCisgICAgICAgIGlmIHN0YXQuc3RfZ2lkID09IGNoZWNrX2dpZDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJob3N0LXVzZXItY29udGFtaW5hdGVkIl0gPSAiJXMgaXMgb3duZWQgYnkgZ2lkICVkLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgdXNlciBydW5uaW5nIGJpdGJha2UuIFRoaXMgbWF5IGJlIGR1ZSB0byBob3N0IGNvbnRhbWluYXRpb24iICUgKHBhdGgsIGNoZWNrX2dpZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKyMgVGhlIFBBQ0tBR0UgRlVOQyB0byBzY2FuIGVhY2ggcGFja2FnZQorcHl0aG9uIGRvX3BhY2thZ2VfcWEgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICBiYi5ub3RlKCJETyBQQUNLQUdFIFFBIikKKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKworICAgICMgQ2hlY2sgbm9uIFVURi04IGNoYXJhY3RlcnMgb24gcmVjaXBlJ3MgbWV0YWRhdGEKKyAgICBwYWNrYWdlX3FhX2NoZWNrX2VuY29kaW5nKFsnREVTQ1JJUFRJT04nLCAnU1VNTUFSWScsICdMSUNFTlNFJywgJ1NFQ1RJT04nXSwgJ3V0Zi04JywgZCkKKworICAgIGxvZ2RpciA9IGQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICBwa2cgPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgIyBDaGVjayB0aGUgY29tcGlsZSBsb2cgZm9yIGhvc3QgY29udGFtaW5hdGlvbgorICAgIGNvbXBpbGVsb2cgPSBvcy5wYXRoLmpvaW4obG9nZGlyLCJsb2cuZG9fY29tcGlsZSIpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21waWxlbG9nKToKKyAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLWUgJ0NST1NTIENPTVBJTEUgQmFkbmVzczonIC1lICdpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uJyAlcyA+IC9kZXYvbnVsbCIgJSBjb21waWxlbG9nCisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICBtc2cgPSAiJXM6IFRoZSBjb21waWxlIGxvZyBpbmRpY2F0ZXMgdGhhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2VyZSB1c2VkLlxuIFwKKyAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb2cgJyVzJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICUgKHBrZywgY29tcGlsZWxvZykKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJjb21waWxlLWhvc3QtcGF0aCIsIG1zZywgZCkKKworICAgICMgQ2hlY2sgdGhlIGluc3RhbGwgbG9nIGZvciBob3N0IGNvbnRhbWluYXRpb24KKyAgICBpbnN0YWxsbG9nID0gb3MucGF0aC5qb2luKGxvZ2RpciwibG9nLmRvX2luc3RhbGwiKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5zdGFsbGxvZyk6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgaW5zdGFsbGxvZworICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgbXNnID0gIiVzOiBUaGUgaW5zdGFsbCBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC5cbiBcCisgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwa2csIGluc3RhbGxsb2cpCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW5zdGFsbC1ob3N0LXBhdGgiLCBtc2csIGQpCisKKyAgICAjIFNjYW4gdGhlIHBhY2thZ2VzLi4uCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IHNldCgoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkpCisKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgZ2xvYmFsIHBrZ2ZpbGVzCisgICAgcGtnZmlsZXMgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsocGtnZGVzdCArICIvIiArIHBrZyk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBwa2dmaWxlc1twa2ddLmFwcGVuZCh3YWxrcm9vdCArIG9zLnNlcCArIGZpbGUpCisKKyAgICAjIG5vIHBhY2thZ2VzIHNob3VsZCBiZSBzY2FubmVkCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICByZXR1cm4KKworICAgIHRlc3RtYXRyaXggPSBkLmdldFZhckZsYWdzKCJRQVBBVEhURVNUIikKKyAgICBpbXBvcnQgcmUKKyAgICAjIFRoZSBwYWNrYWdlIG5hbWUgbWF0Y2hlcyB0aGUgW2EtejAtOS4rLV0rIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgIHBrZ25hbWVfcGF0dGVybiA9IHJlLmNvbXBpbGUoIl5bYS16MC05ListXSskIikKKworICAgIHRhc2tkZXBkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCisgICAgdGFza2RlcHMgPSBzZXQoKQorICAgIGZvciBkZXAgaW4gdGFza2RlcGRhdGE6CisgICAgICAgIHRhc2tkZXBzLmFkZCh0YXNrZGVwZGF0YVtkZXBdWzBdKQorCisgICAgZyA9IGdsb2JhbHMoKQorICAgIHdhbGtfc2FuZSA9IFRydWUKKyAgICByZGVwZW5kc19zYW5lID0gVHJ1ZQorICAgIGRlcHNfc2FuZSA9IFRydWUKKyAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgc2tpcCA9IChkLmdldFZhcignSU5TQU5FX1NLSVBfJyArIHBhY2thZ2UsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGlmIHNraXA6CisgICAgICAgICAgICBiYi5ub3RlKCJQYWNrYWdlICVzIHNraXBwaW5nIFFBIHRlc3RzOiAlcyIgJSAocGFja2FnZSwgc3RyKHNraXApKSkKKyAgICAgICAgd2FybmNoZWNrcyA9IFtdCisgICAgICAgIGZvciB3IGluIChkLmdldFZhcigiV0FSTl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgdyBpbiBza2lwOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHcgaW4gdGVzdG1hdHJpeCBhbmQgdGVzdG1hdHJpeFt3XSBpbiBnOgorICAgICAgICAgICAgICAgIHdhcm5jaGVja3MuYXBwZW5kKGdbdGVzdG1hdHJpeFt3XV0pCisgICAgICAgIGVycm9yY2hlY2tzID0gW10KKyAgICAgICAgZm9yIGUgaW4gKGQuZ2V0VmFyKCJFUlJPUl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZSBpbiBza2lwOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGUgaW4gdGVzdG1hdHJpeCBhbmQgdGVzdG1hdHJpeFtlXSBpbiBnOgorICAgICAgICAgICAgICAgIGVycm9yY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbZV1dKQorCisgICAgICAgIGJiLm5vdGUoIkNoZWNraW5nIFBhY2thZ2U6ICVzIiAlIHBhY2thZ2UpCisgICAgICAgICMgQ2hlY2sgcGFja2FnZSBuYW1lCisgICAgICAgIGlmIG5vdCBwa2duYW1lX3BhdHRlcm4ubWF0Y2gocGFja2FnZSk6CisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGtnbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICIlcyBkb2Vzbid0IG1hdGNoIHRoZSBbYS16MC05ListXSsgcmVnZXhcbiIgJSBwYWNrYWdlLCBkKQorCisgICAgICAgIHBhdGggPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBhY2thZ2UpCisgICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX3dhbGsocGF0aCwgd2FybmNoZWNrcywgZXJyb3JjaGVja3MsIHNraXAsIHBhY2thZ2UsIGQpOgorICAgICAgICAgICAgd2Fsa19zYW5lICA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX3JkZXBlbmRzKHBhY2thZ2UsIHBrZ2Rlc3QsIHNraXAsIHRhc2tkZXBzLCBwYWNrYWdlcywgZCk6CisgICAgICAgICAgICByZGVwZW5kc19zYW5lID0gRmFsc2UKKyAgICAgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfZGVwcyhwYWNrYWdlLCBwa2dkZXN0LCBza2lwLCBkKToKKyAgICAgICAgICAgIGRlcHNfc2FuZSA9IEZhbHNlCisKKworICAgIGlmICdsaWJkaXInIGluIGQuZ2V0VmFyKCJBTExfUUEiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBwYWNrYWdlX3FhX2NoZWNrX2xpYmRpcihkKQorCisgICAgcWFfc2FuZSA9IGQuZ2V0VmFyKCJRQV9TQU5FIiwgVHJ1ZSkKKyAgICBpZiBub3Qgd2Fsa19zYW5lIG9yIG5vdCByZGVwZW5kc19zYW5lIG9yIG5vdCBkZXBzX3NhbmUgb3Igbm90IHFhX3NhbmU6CisgICAgICAgIGJiLmZhdGFsKCJRQSBydW4gZm91bmQgZmF0YWwgZXJyb3JzLiBQbGVhc2UgY29uc2lkZXIgZml4aW5nIHRoZW0uIikKKyAgICBiYi5ub3RlKCJET05FIHdpdGggUEFDS0FHRSBRQSIpCit9CisKK2RvX3BhY2thZ2VfcWFbcmRlcHRhc2tdID0gImRvX3BhY2thZ2VkYXRhIgorYWRkdGFzayBkb19wYWNrYWdlX3FhIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UgYmVmb3JlIGRvX2J1aWxkCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3FhIgorZG9fcGFja2FnZV9xYVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIiCitkb19wYWNrYWdlX3FhW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIiCitweXRob24gZG9fcGFja2FnZV9xYV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VfcWFfc2V0c2NlbmUKKworcHl0aG9uIGRvX3FhX3N0YWdpbmcoKSB7CisgICAgYmIubm90ZSgiUUEgY2hlY2tpbmcgc3RhZ2luZyIpCisKKyAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19zdGFnZWQoZC5leHBhbmQoJyR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19MSUJESVJ9JyksIGQpOgorICAgICAgICBiYi5mYXRhbCgiUUEgc3RhZ2luZyB3YXMgYnJva2VuIGJ5IHRoZSBwYWNrYWdlIGJ1aWx0IGFib3ZlIikKK30KKworcHl0aG9uIGRvX3FhX2NvbmZpZ3VyZSgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBjb25maWcubG9nIGZvciBjcm9zcyBjb21waWxlIGlzc3VlcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY29uZmlncyA9IFtdCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCJDaGVja2luZyBhdXRvdG9vbHMgZW52aXJvbm1lbnQgZm9yIGNvbW1vbiBtaXNjb25maWd1cmF0aW9uIikKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3b3JrZGlyKToKKyAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLWUgJ0NST1NTIENPTVBJTEUgQmFkbmVzczonIC1lICdpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uJyAlcyA+IC9kZXYvbnVsbCIgJSBcCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCJjb25maWcubG9nIikKKyAgICAgICAgaWYgImNvbmZpZy5sb2ciIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiIiJUaGlzIGF1dG9jb25mIGxvZyBpbmRpY2F0ZXMgZXJyb3JzLCBpdCBsb29rZWQgYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdoaWxlIGRldGVybWluaW5nIHN5c3RlbSBjYXBhYmlsaXRpZXMuCitSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICclcyciIiIgJSByb290KQorCisgICAgICAgIGlmICJjb25maWd1cmUuYWMiIGluIGZpbGVzOgorICAgICAgICAgICAgY29uZmlncy5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsImNvbmZpZ3VyZS5hYyIpKQorICAgICAgICBpZiAiY29uZmlndXJlLmluIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGNvbmZpZ3MuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCAiY29uZmlndXJlLmluIikpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIGdldHRleHQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0CisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBjbmYgPSBkLmdldFZhcignRVhUUkFfT0VDT05GJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiAiZ2V0dGV4dCIgbm90IGluIGQuZ2V0VmFyKCdQJywgVHJ1ZSkgYW5kICJnY2MtcnVudGltZSIgbm90IGluIGQuZ2V0VmFyKCdQJywgVHJ1ZSkgYW5kICItLWRpc2FibGUtbmxzIiBub3QgaW4gY25mOgorICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgICAgIGd0ID0gImdldHRleHQtbmF0aXZlIgorICAgICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgICAgICBndCA9ICJuYXRpdmVzZGstZ2V0dGV4dCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGd0ID0gInZpcnR1YWwvIiArIG1sICsgImdldHRleHQiCisgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIikKKyAgICAgICAgaWYgZ3Qgbm90IGluIGRlcHM6CisgICAgICAgICAgICBmb3IgY29uZmlnIGluIGNvbmZpZ3M6CisgICAgICAgICAgICAgICAgZ251ID0gImdyZXAgXCJeW1s6c3BhY2U6XV0qQU1fR05VX0dFVFRFWFRcIiAlcyA+L2Rldi9udWxsIiAlIGNvbmZpZworICAgICAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChnbnUsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIiIiVzIHJlcXVpcmVkIGJ1dCBub3QgaW4gREVQRU5EUyBmb3IgZmlsZSAlcy4KK01pc3NpbmcgaW5oZXJpdCBnZXR0ZXh0PyIiIiAlIChndCwgY29uZmlnKSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgbGljZW5zZSB2YXJpYWJsZXMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6CisgICAgICAgIGJiLmZhdGFsKCJMaWNlbnNpbmcgRXJyb3I6IExJQ19GSUxFU19DSEtTVU0gZG9lcyBub3QgbWF0Y2gsIHBsZWFzZSBmaXgiKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayB1bnJlY29nbmlzZWQgY29uZmlndXJlIG9wdGlvbnMgKHdpdGggYSB3aGl0ZSBsaXN0KQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImF1dG90b29scyIsIGQpOgorICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBjb25maWd1cmUgb3V0cHV0IGZvciB1bnJlY29nbmlzZWQgb3B0aW9ucyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZsYWcgPSAiV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6IgorICAgICAgICAgICAgbG9nID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdCJywgVHJ1ZSksICdjb25maWcubG9nJykKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZ3JlcCcsICctRicsIGZsYWcsIGxvZ10pLnJlcGxhY2UoJywgJywgJyAnKQorICAgICAgICAgICAgb3B0aW9ucyA9IHNldCgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gc2V0KGxpbmUucGFydGl0aW9uKGZsYWcpWzJdLnNwbGl0KCkpCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoZC5nZXRWYXIoIlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCIsIFRydWUpLnNwbGl0KCkpCisgICAgICAgICAgICBvcHRpb25zIC09IHdoaXRlbGlzdAorICAgICAgICAgICAgaWYgb3B0aW9uczoKKyAgICAgICAgICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gcG4gKyAiOiBjb25maWd1cmUgd2FzIHBhc3NlZCB1bnJlY29nbmlzZWQgb3B0aW9uczogIiArICIgIi5qb2luKG9wdGlvbnMpCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVua25vd24tY29uZmlndXJlLW9wdGlvbiIsIGVycm9yX21zZywgZCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBDaGVjayBpbnZhbGlkIFBBQ0tBR0VDT05GSUcKKyAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoIlBBQ0tBR0VDT05GSUciLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIHBrZ2NvbmZpZzoKKyAgICAgICAgcGtnY29uZmlnZmxhZ3MgPSBkLmdldFZhckZsYWdzKCJQQUNLQUdFQ09ORklHIikgb3Ige30KKyAgICAgICAgZm9yIHBjb25maWcgaW4gcGtnY29uZmlnOgorICAgICAgICAgICAgaWYgcGNvbmZpZyBub3QgaW4gcGtnY29uZmlnZmxhZ3M6CisgICAgICAgICAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlczogaW52YWxpZCBQQUNLQUdFQ09ORklHOiAlcyIgJSAocG4sIHBjb25maWcpCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImludmFsaWQtcGtnY29uZmlnIiwgZXJyb3JfbXNnLCBkKQorfQorCitweXRob24gZG9fcWFfdW5wYWNrKCkgeworICAgIGJiLm5vdGUoIkNoZWNraW5nIGhhcyAke1N9IGJlZW4gY3JlYXRlZCIpCisKKyAgICBzX2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc19kaXIpOgorICAgICAgICBiYi53YXJuKCclczogdGhlIGRpcmVjdG9yeSAlcyAoJXMpIHBvaW50ZWQgdG8gYnkgdGhlIFMgdmFyaWFibGUgZG9lc25cJ3QgZXhpc3QgLSBwbGVhc2Ugc2V0IFMgd2l0aGluIHRoZSByZWNpcGUgdG8gcG9pbnQgdG8gd2hlcmUgdGhlIHNvdXJjZSBoYXMgYmVlbiB1bnBhY2tlZCB0bycgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGQuZ2V0VmFyKCdTJywgRmFsc2UpLCBzX2RpcikpCit9CisKKyMgVGhlIFN0YWdpbmcgRnVuYywgdG8gY2hlY2sgYWxsIHN0YWdpbmcKKyNhZGR0YXNrIHFhX3N0YWdpbmcgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdCBiZWZvcmUgZG9fYnVpbGQKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbcG9zdGZ1bmNzXSArPSAiZG9fcWFfc3RhZ2luZyAiCisKKyMgQ2hlY2sgYnJva2VuIGNvbmZpZy5sb2cgZmlsZXMsIGZvciBwYWNrYWdlcyByZXF1aXJpbmcgR2V0dGV4dCB3aGljaCBkb24ndAorIyBoYXZlIGl0IGluIERFUEVORFMgYW5kIGZvciBjb3JyZWN0IExJQ19GSUxFU19DSEtTVU0KKyNhZGR0YXNrIHFhX2NvbmZpZ3VyZSBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKK2RvX2NvbmZpZ3VyZVtwb3N0ZnVuY3NdICs9ICJkb19xYV9jb25maWd1cmUgIgorCisjIENoZWNrIGRvZXMgUyBleGlzdC4KK2RvX3VucGFja1twb3N0ZnVuY3NdICs9ICJkb19xYV91bnBhY2siCisKK3B5dGhvbiAoKSB7CisgICAgdGVzdHMgPSBkLmdldFZhcignQUxMX1FBJywgVHJ1ZSkuc3BsaXQoKQorICAgIGlmICJkZXNrdG9wIiBpbiB0ZXN0czoKKyAgICAgICAgZC5hcHBlbmRWYXIoIlBBQ0tBR0VfREVQRU5EUyIsICIgZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZSIpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIHZhcmlvdXMgdmFyaWFibGVzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIENoZWNraW5nICR7RklMRVNFWFRSQVBBVEhTfQorICAgIGV4dHJhcGF0aHMgPSAoZC5nZXRWYXIoIkZJTEVTRVhUUkFQQVRIUyIsIFRydWUpIG9yICIiKQorICAgIGlmICdfX2RlZmF1bHQnIG5vdCBpbiBleHRyYXBhdGhzLnNwbGl0KCI6Iik6CisgICAgICAgIG1zZyA9ICJGSUxFU0VYVFJBUEFUSFMtdmFyaWFibGUsIG11c3QgYWx3YXlzIHVzZSBfcHJlcGVuZCAob3IgX2FwcGVuZClcbiIKKyAgICAgICAgbXNnICs9ICJ0eXBlIG9mIGFzc2lnbm1lbnQsIGFuZCBkb24ndCBmb3JnZXQgdGhlIGNvbG9uLlxuIgorICAgICAgICBtc2cgKz0gIlBsZWFzZSBhc3NpZ24gaXQgd2l0aCB0aGUgZm9ybWF0IG9mOlxuIgorICAgICAgICBtc2cgKz0gIiAgRklMRVNFWFRSQVBBVEhTX2FwcGVuZCA6PSBcIjoke1RISVNESVJ9L1lvdXJfRmlsZXNfUGF0aFwiIG9yXG4iCisgICAgICAgIG1zZyArPSAiICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSBcIiR7VEhJU0RJUn0vWW91cl9GaWxlc19QYXRoOlwiXG4iCisgICAgICAgIG1zZyArPSAiaW4geW91ciBiYmFwcGVuZCBmaWxlXG5cbiIKKyAgICAgICAgbXNnICs9ICJZb3VyIGluY29ycmVjdCBhc3NpZ25tZW50IGlzOlxuIgorICAgICAgICBtc2cgKz0gIiVzXG4iICUgZXh0cmFwYXRocworICAgICAgICBiYi53YXJuKG1zZykKKworICAgIGlmIGQuZ2V0VmFyKCdkb19zdGFnZScsIFRydWUpIGlzIG5vdCBOb25lOgorICAgICAgICBiYi5mYXRhbCgiTGVnYWN5IHN0YWdpbmcgZm91bmQgZm9yICVzIGFzIGl0IGhhcyBhIGRvX3N0YWdlIGZ1bmN0aW9uLiBUaGlzIHdpbGwgbmVlZCBjb252ZXJzaW9uIHRvIGEgZG9faW5zdGFsbCBvciBvZnRlbiBzaW1wbHkgcmVtb3ZhbCB0byB3b3JrIHdpdGggT0UtY29yZSIgJSBkLmdldFZhcigiRklMRSIsIFRydWUpKQorCisgICAgb3ZlcnJpZGVzID0gZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpLnNwbGl0KCc6JykKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaWYgcG4gaW4gb3ZlcnJpZGVzOgorICAgICAgICBtc2cgPSAnUmVjaXBlICVzIGhhcyBQTiBvZiAiJXMiIHdoaWNoIGlzIGluIE9WRVJSSURFUywgdGhpcyBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLicgJSAoZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSwgcG4pCisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwbi1vdmVycmlkZXMiLCBtc2csIGQpCisKKyAgICBpc3N1ZXMgPSBbXQorICAgIGlmIChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgZm9yIGRlcCBpbiAoZC5nZXRWYXIoJ1FBREVQRU5EUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2RlcGVuZHMnLCAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwKQorICAgICAgICBmb3IgdmFyIGluICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUkNPTkZMSUNUUycsICdSUFJPVklERVMnLCAnUlJFUExBQ0VTJywgJ0ZJTEVTJywgJ3BrZ19wcmVpbnN0JywgJ3BrZ19wb3N0aW5zdCcsICdwa2dfcHJlcm0nLCAncGtnX3Bvc3RybScsICdBTExPV19FTVBUWSc6CisgICAgICAgICAgICBpZiBkLmdldFZhcih2YXIsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBpc3N1ZXMuYXBwZW5kKHZhcikKKworICAgICAgICBmYWtlcm9vdF90ZXN0cyA9IGQuZ2V0VmFyKCdGQUtFUk9PVF9RQScsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgaWYgc2V0KHRlc3RzKSAmIHNldChmYWtlcm9vdF90ZXN0cyk6CisgICAgICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2VfcWEnLCAnZmFrZXJvb3QnLCAnMScpCisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2VfcWEnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ3JkZXB0YXNrJywgJycpCisgICAgZm9yIGkgaW4gaXNzdWVzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGtndmFyY2hlY2siLCAiJXM6IFZhcmlhYmxlICVzIGlzIHNldCBhcyBub3QgYmVpbmcgcGFja2FnZSBzcGVjaWZpYywgcGxlYXNlIGZpeCB0aGlzLiIgJSAoZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSwgaSksIGQpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtYXJjaC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWI3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcwpAQCAtMCwwICsxLDU5IEBACisjCisjIHNldCB0aGUgQVJDSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3Iga2VybmVsIGNvbXBpbGF0aW9uIChpbmNsdWRpbmcKKyMgbW9kdWxlcykuIHJldHVybiB2YWx1ZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgYXJjaGl0ZWN0dXJlIGRpcmVjdG9yaWVzCisjIGluIHRoZSBrZXJuZWwgc291cmNlICJhcmNoIiBkaXJlY3RvcnkKKyMKKwordmFsaWRfYXJjaHMgPSAiYWxwaGEgY3JpcyBpYTY0IFwKKyAgICAgICAgICAgICAgIGkzODYgeDg2IFwKKyAgICAgICAgICAgICAgIG02OGtub21tdSBtNjhrIHBwYyBwb3dlcnBjIHBvd2VycGM2NCBwcGM2NCAgXAorICAgICAgICAgICAgICAgc3BhcmMgc3BhcmM2NCBcCisgICAgICAgICAgICAgICBhcm0gYWFyY2g2NCBcCisgICAgICAgICAgICAgICBtMzJyIG1pcHMgXAorICAgICAgICAgICAgICAgc2ggc2g2NCB1bSBoODMwMCAgIFwKKyAgICAgICAgICAgICAgIHBhcmlzYyBzMzkwICB2ODUwIFwKKyAgICAgICAgICAgICAgIGF2cjMyIGJsYWNrZmluIFwKKyAgICAgICAgICAgICAgIG1pY3JvYmxhemUiCisKK2RlZiBtYXBfa2VybmVsX2FyY2goYSwgZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICB2YWxpZF9hcmNocyA9IGQuZ2V0VmFyKCd2YWxpZF9hcmNocycsIFRydWUpLnNwbGl0KCkKKworICAgIGlmICAgcmUubWF0Y2goJyhpLjg2fGF0aGxvbnx4ODYuNjQpJCcsIGEpOiAgcmV0dXJuICd4ODYnCisgICAgZWxpZiByZS5tYXRjaCgnYXJtZWIkJywgYSk6ICAgICAgICAgICAgICAgICByZXR1cm4gJ2FybScKKyAgICBlbGlmIHJlLm1hdGNoKCdhYXJjaDY0JCcsIGEpOiAgICAgICAgICAgICAgIHJldHVybiAnYXJtNjQnCisgICAgZWxpZiByZS5tYXRjaCgnYWFyY2g2NF9iZSQnLCBhKTogICAgICAgICAgICByZXR1cm4gJ2FybTY0JworICAgIGVsaWYgcmUubWF0Y2goJ21pcHMoZWx8NjR8NjRlbCkkJywgYSk6ICAgICAgcmV0dXJuICdtaXBzJworICAgIGVsaWYgcmUubWF0Y2goJ3AocGN8b3dlcnBjKSh8NjQpJywgYSk6ICAgICAgcmV0dXJuICdwb3dlcnBjJworICAgIGVsaWYgcmUubWF0Y2goJ3NoKDN8NCkkJywgYSk6ICAgICAgICAgICAgICAgcmV0dXJuICdzaCcKKyAgICBlbGlmIHJlLm1hdGNoKCdiZmluJywgYSk6ICAgICAgICAgICAgICAgICAgIHJldHVybiAnYmxhY2tmaW4nCisgICAgZWxpZiByZS5tYXRjaCgnbWljcm9ibGF6ZWVbYmxdJywgYSk6ICAgICAgICByZXR1cm4gJ21pY3JvYmxhemUnCisgICAgZWxpZiBhIGluIHZhbGlkX2FyY2hzOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJjYW5ub3QgbWFwICclcycgdG8gYSBsaW51eCBrZXJuZWwgYXJjaGl0ZWN0dXJlIiAlIGEpCisKK2V4cG9ydCBBUkNIID0gIiR7QG1hcF9rZXJuZWxfYXJjaChkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCl9IgorCitkZWYgbWFwX3Vib290X2FyY2goYSwgZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBpZiAgIHJlLm1hdGNoKCdwKHBjfG93ZXJwYykofDY0KScsIGEpOiByZXR1cm4gJ3BwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JCcsIGEpOiByZXR1cm4gJ3g4NicKKyAgICByZXR1cm4gYQorCitleHBvcnQgVUJPT1RfQVJDSCA9ICIke0BtYXBfdWJvb3RfYXJjaChkLmdldFZhcignQVJDSCcsIFRydWUpLCBkKX0iCisKKyMgU2V0IFRBUkdFVF8/P19LRVJORUxfQVJDSCBpbiB0aGUgbWFjaGluZSAuY29uZiB0byBzZXQgYXJjaGl0ZWN0dXJlCisjIHNwZWNpZmljIG9wdGlvbnMgbmVjZXNzYXJ5IGZvciBidWlsZGluZyB0aGUga2VybmVsIGFuZCBtb2R1bGVzLgorVEFSR0VUX0NDX0tFUk5FTF9BUkNIID89ICIiCitIT1NUX0NDX0tFUk5FTF9BUkNIID89ICIke1RBUkdFVF9DQ19LRVJORUxfQVJDSH0iCitUQVJHRVRfTERfS0VSTkVMX0FSQ0ggPz0gIiIKK0hPU1RfTERfS0VSTkVMX0FSQ0ggPz0gIiR7VEFSR0VUX0xEX0tFUk5FTF9BUkNIfSIKK1RBUkdFVF9BUl9LRVJORUxfQVJDSCA/PSAiIgorSE9TVF9BUl9LRVJORUxfQVJDSCA/PSAiJHtUQVJHRVRfQVJfS0VSTkVMX0FSQ0h9IgorCitLRVJORUxfQ0MgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0tFUk5FTF9BUkNIfSAtZnVzZS1sZD1iZmQiCitLRVJORUxfTEQgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1sZC5iZmQgJHtIT1NUX0xEX0tFUk5FTF9BUkNIfSIKK0tFUk5FTF9BUiA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWFyICR7SE9TVF9BUl9LRVJORUxfQVJDSH0iCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTU2YTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjM0IEBACitpbmhlcml0IGtlcm5lbC11Ym9vdAorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGtlcm5lbHR5cGUgPSBkLmdldFZhcignS0VSTkVMX0lNQUdFVFlQRScsIFRydWUpCisgICAgaWYga2VybmVsdHlwZSA9PSAnZml0SW1hZ2UnOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIoIkRFUEVORFMiLCBUcnVlKQorICAgICAgICBkZXBlbmRzID0gIiVzIHUtYm9vdC1ta2ltYWdlLW5hdGl2ZSBkdGMtbmF0aXZlIiAlIGRlcGVuZHMKKyAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCBkZXBlbmRzKQorCisJIyBPdmVycmlkZSBLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIHZhcmlhYmxlLCB3aGljaCBpcyBpbnRlcm5hbAorCSMgdG8ga2VybmVsLmJiY2xhc3MgLiBXZSBoYXZlIHRvIG92ZXJyaWRlIGl0LCBzaW5jZSB3ZSBwYWNrIHpJbWFnZQorCSMgKGF0IGxlYXN0IGZvciBub3cpIGludG8gdGhlIGZpdEltYWdlIC4KKyAgICAgICAgZC5zZXRWYXIoIktFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UiLCAiekltYWdlIikKKworICAgICAgICBpbWFnZSA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfSU1BR0UnLCBUcnVlKQorICAgICAgICBpZiBpbWFnZToKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYXNzZW1ibGVfZml0aW1hZ2UnLCAnZGVwZW5kcycsICcgJHtJTklUUkFNRlNfSU1BR0V9OmRvX3Jvb3RmcycpCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIGhlYWRlcgorIworZml0aW1hZ2VfZW1pdF9maXRfaGVhZGVyKCkgeworCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworL2R0cy12MS87CisKKy8geworICAgICAgICBkZXNjcmlwdGlvbiA9ICJVLUJvb3QgZml0SW1hZ2UgZm9yICR7RElTVFJPX05BTUV9LyR7UFZ9LyR7TUFDSElORX0iOworICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKK0VPRgorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIHNlY3Rpb24gYml0cworIworIyAkMSAuLi4gU2VjdGlvbiBiaXQgdHlwZTogaW1hZ2VzdGFydCAtIGltYWdlIHNlY3Rpb24gc3RhcnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZzdGFydCAgLSBjb25maWd1cmF0aW9uIHNlY3Rpb24gc3RhcnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3RlbmQgICAgLSBzZWN0aW9uIGVuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgZml0ZW5kICAgICAtIGZpdGltYWdlIGVuZAorIworZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50KCkgeworCWNhc2UgJDEgaW4KKwlpbWFnZXN0YXJ0KQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKworICAgICAgICBpbWFnZXMgeworRU9GCisJOzsKKwljb25mc3RhcnQpCisJCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworCisgICAgICAgIGNvbmZpZ3VyYXRpb25zIHsKK0VPRgorCTs7CisJc2VjdGVuZCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisJfTsKK0VPRgorCTs7CisJZml0ZW5kKQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKK307CitFT0YKKwk7OworCWVzYWMKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMga2VybmVsIHNlY3Rpb24KKyMKKyMgJDEgLi4uIEltYWdlIGNvdW50ZXIKKyMgJDIgLi4uIFBhdGggdG8ga2VybmVsIGltYWdlCisjICQzIC4uLiBDb21wcmVzc2lvbiB0eXBlCitmaXRpbWFnZV9lbWl0X3NlY3Rpb25fa2VybmVsKCkgeworCisJa2VybmVsX2NzdW09InNoYTEiCisKKwlFTlRSWVBPSU5UPSR7VUJPT1RfRU5UUllQT0lOVH0KKwlpZiB0ZXN0IC1uICIke1VCT09UX0VOVFJZU1lNQk9MfSI7IHRoZW4KKwkJRU5UUllQT0lOVD1gJHtIT1NUX1BSRUZJWH1ubSAke1N9L3ZtbGludXggfCBcCisJCQlhd2sgJyQzPT0iJHtVQk9PVF9FTlRSWVNZTUJPTH0iIHtwcmludCAkMX0nYAorCWZpCisKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKyAgICAgICAgICAgICAgICBrZXJuZWxAJHsxfSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJMaW51eCBrZXJuZWwiOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC9pbmNiaW4vKCIkezJ9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gImtlcm5lbCI7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoID0gIiR7VUJPT1RfQVJDSH0iOworICAgICAgICAgICAgICAgICAgICAgICAgb3MgPSAibGludXgiOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gPSAiJHszfSI7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkID0gPCR7VUJPT1RfTE9BREFERFJFU1N9PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gPCR7RU5UUllQT0lOVH0+OworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke2tlcm5lbF9jc3VtfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMgRFRCIHNlY3Rpb24KKyMKKyMgJDEgLi4uIEltYWdlIGNvdW50ZXIKKyMgJDIgLi4uIFBhdGggdG8gRFRCIGltYWdlCitmaXRpbWFnZV9lbWl0X3NlY3Rpb25fZHRiKCkgeworCisJZHRiX2NzdW09InNoYTEiCisKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKyAgICAgICAgICAgICAgICBmZHRAJHsxfSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJGbGF0dGVuZWQgRGV2aWNlIFRyZWUgYmxvYiI7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gL2luY2Jpbi8oIiR7Mn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiZmxhdF9kdCI7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoID0gIiR7VUJPT1RfQVJDSH0iOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gPSAibm9uZSI7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQDEgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvID0gIiR7ZHRiX2NzdW19IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKK0VPRgorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIElUUyBjb25maWd1cmF0aW9uIHNlY3Rpb24KKyMKKyMgJDEgLi4uIExpbnV4IGtlcm5lbCBJRAorIyAkMiAuLi4gRFRCIGltYWdlIElECitmaXRpbWFnZV9lbWl0X3NlY3Rpb25fY29uZmlnKCkgeworCisJY29uZl9jc3VtPSJzaGExIgorCisJIyBUZXN0IGlmIHdlIGhhdmUgYW55IERUQnMgYXQgYWxsCisJaWYgWyAteiAiJHsyfSIgXSA7IHRoZW4KKwkJY29uZl9kZXNjPSJCb290IExpbnV4IGtlcm5lbCIKKwkJZmR0X2xpbmU9IiIKKwllbHNlCisJCWNvbmZfZGVzYz0iQm9vdCBMaW51eCBrZXJuZWwgd2l0aCBGRFQgYmxvYiIKKwkJZmR0X2xpbmU9ImZkdCA9IFwiZmR0QCR7Mn1cIjsiCisJZmkKKwlrZXJuZWxfbGluZT0ia2VybmVsID0gXCJrZXJuZWxAJHsxfVwiOyIKKworCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAiY29uZkAxIjsKKyAgICAgICAgICAgICAgICBjb25mQDEgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiJHtjb25mX2Rlc2N9IjsKKwkJCSR7a2VybmVsX2xpbmV9CisJCQkke2ZkdF9saW5lfQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke2NvbmZfY3N1bX0iOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworRU9GCit9CisKK2RvX2Fzc2VtYmxlX2ZpdGltYWdlKCkgeworCWlmIHRlc3QgIngke0tFUk5FTF9JTUFHRVRZUEV9IiA9ICJ4Zml0SW1hZ2UiIDsgdGhlbgorCQlrZXJuZWxjb3VudD0xCisJCWR0YmNvdW50PSIiCisJCXJtIC1mIGZpdC1pbWFnZS5pdHMKKworCQlmaXRpbWFnZV9lbWl0X2ZpdF9oZWFkZXIKKworCQkjCisJCSMgU3RlcCAxOiBQcmVwYXJlIGEga2VybmVsIGltYWdlIHNlY3Rpb24uCisJCSMKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IGltYWdlc3RhcnQKKworCQl1Ym9vdF9wcmVwX2tpbWFnZQorCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fa2VybmVsICIke2tlcm5lbGNvdW50fSIgbGludXguYmluICIke2xpbnV4X2NvbXB9IgorCisJCSMKKwkJIyBTdGVwIDI6IFByZXBhcmUgYSBEVEIgaW1hZ2Ugc2VjdGlvbgorCQkjCisJCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQkJZHRiY291bnQ9MQorCQkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCQlpZiBlY2hvICR7RFRCfSB8IGdyZXAgLXEgJy9kdHMvJzsgdGhlbgorCQkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJCWZpCisJCQkJRFRCX1BBVEg9ImFyY2gvJHtBUkNIfS9ib290L2R0cy8ke0RUQn0iCisJCQkJaWYgWyAhIC1lICIke0RUQl9QQVRIfSIgXTsgdGhlbgorCQkJCQlEVEJfUEFUSD0iYXJjaC8ke0FSQ0h9L2Jvb3QvJHtEVEJ9IgorCQkJCWZpCisKKwkJCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fZHRiICR7ZHRiY291bnR9ICR7RFRCX1BBVEh9CisJCQkJZHRiY291bnQ9YGV4cHIgJHtkdGJjb3VudH0gKyAxYAorCQkJZG9uZQorCQlmaQorCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBzZWN0ZW5kCisKKwkJIyBGb3JjZSB0aGUgZmlyc3QgS2VybmVsIGFuZCBEVEIgaW4gdGhlIGRlZmF1bHQgY29uZmlnCisJCWtlcm5lbGNvdW50PTEKKwkJZHRiY291bnQ9MQorCisJCSMKKwkJIyBTdGVwIDM6IFByZXBhcmUgYSBjb25maWd1cmF0aW9ucyBzZWN0aW9uCisJCSMKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IGNvbmZzdGFydAorCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9jb25maWcgJHtrZXJuZWxjb3VudH0gJHtkdGJjb3VudH0KKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgc2VjdGVuZAorCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBmaXRlbmQKKworCQkjCisJCSMgU3RlcCA0OiBBc3NlbWJsZSB0aGUgaW1hZ2UKKwkJIworCQl1Ym9vdC1ta2ltYWdlIC1mIGZpdC1pbWFnZS5pdHMgYXJjaC8ke0FSQ0h9L2Jvb3QvZml0SW1hZ2UKKwlmaQorfQorCithZGR0YXNrIGFzc2VtYmxlX2ZpdGltYWdlIGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKKwora2VybmVsX2RvX2RlcGxveV9hcHBlbmQoKSB7CisJIyBVcGRhdGUgZGVwbG95IGRpcmVjdG9yeQorCWlmIHRlc3QgIngke0tFUk5FTF9JTUFHRVRZUEV9IiA9ICJ4Zml0SW1hZ2UiIDsgdGhlbgorCQljZCAke0J9CisJCWVjaG8gIkNvcHlpbmcgZml0LWltYWdlLml0cyBzb3VyY2UgZmlsZS4uLiIKKwkJaXRzX2Jhc2VfbmFtZT0iJHtLRVJORUxfSU1BR0VUWVBFfS1pdHMtJHtQVn0tJHtQUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKwkJaXRzX3N5bWxpbmtfbmFtZT0ke0tFUk5FTF9JTUFHRVRZUEV9LWl0cy0ke01BQ0hJTkV9CisJCWluc3RhbGwgLW0gMDY0NCBmaXQtaW1hZ2UuaXRzICR7REVQTE9ZRElSfS8ke2l0c19iYXNlX25hbWV9Lml0cworCQlsaW51eF9iaW5fYmFzZV9uYW1lPSIke0tFUk5FTF9JTUFHRVRZUEV9LWxpbnV4LmJpbi0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorCQlsaW51eF9iaW5fc3ltbGlua19uYW1lPSR7S0VSTkVMX0lNQUdFVFlQRX0tbGludXguYmluLSR7TUFDSElORX0KKwkJaW5zdGFsbCAtbSAwNjQ0IGxpbnV4LmJpbiAke0RFUExPWURJUn0vJHtsaW51eF9iaW5fYmFzZV9uYW1lfS5iaW4KKworCQljZCAke0RFUExPWURJUn0KKwkJbG4gLXNmICR7aXRzX2Jhc2VfbmFtZX0uaXRzICR7aXRzX3N5bWxpbmtfbmFtZX0uaXRzCisJCWxuIC1zZiAke2xpbnV4X2Jpbl9iYXNlX25hbWV9LmJpbiAke2xpbnV4X2Jpbl9zeW1saW5rX25hbWV9LmJpbgorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLWdydWIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtZ3J1Yi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2Y0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLWdydWIuYmJjbGFzcwpAQCAtMCwwICsxLDkxIEBACisjCisjIFdoaWxlIGluc3RhbGxpbmcgYSBycG0gdG8gdXBkYXRlIGtlcm5lbCBvbiBhIGRlcGxveWVkIHRhcmdldCwgaXQgd2lsbCB1cGRhdGUKKyMgdGhlIGJvb3QgYXJlYSBhbmQgdGhlIGJvb3QgbWVudSB3aXRoIHRoZSBrZXJuZWwgYXMgdGhlIHByaW9yaXR5IGJ1dCBhbGxvdworIyB5b3UgdG8gZmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBrZXJuZWwgYXMgd2VsbC4KKyMKKyMgLSBJbiBrZXJuZWwtaW1hZ2UncyBwcmVpbnN0YWxsIHNjcmlwdGxldCwgaXQgYmFja3MgdXAgb3JpZ2luYWwga2VybmVsIHRvIGF2b2lkCisjICAgcHJvYmFibGUgY29uZmxpY3Rpb24gd2l0aCB0aGUgbmV3IG9uZS4KKyMKKyMgLSBJbiBrZXJuZWwtaW1hZ2UncyBwb3N0aW5zdGFsbCBzY3JpcHRsZXQsIGl0IG1vZGlmaWVzIGdydWIncyBjb25maWcgZmlsZSB0bworIyAgIHVwZGF0ZXMgdGhlIG5ldyBrZXJuZWwgYXMgdGhlIGJvb3QgcHJpb3JpdHkuCisjCisKK3BrZ19wcmVpbnN0X2tlcm5lbC1pbWFnZV9hcHBlbmQgKCkgeworCSMgUGFyc2luZyBjb25mbGljdGlvbgorCVsgLWYgIiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiIF0gJiYgZ3J1YmNmZz0iJEQvYm9vdC9ncnViL21lbnUubGlzdCIKKwlbIC1mICIkRC9ib290L2dydWIvZ3J1Yi5jZmciIF0gJiYgZ3J1YmNmZz0iJEQvYm9vdC9ncnViL2dydWIuY2ZnIgorCWlmIFsgLW4gIiRncnViY2ZnIiBdOyB0aGVuCisJCSMgRGVyZWZlcmVuY2Ugc3ltbGluayB0byBhdm9pZCBjb25mbGljdGlvbiB3aXRoIG5ldyBrZXJuZWwgbmFtZS4KKwkJaWYgZ3JlcCAtcSAiLyR7S0VSTkVMX0lNQUdFVFlQRX0gXCtyb290PSIgJGdydWJjZmc7IHRoZW4KKwkJCWlmIFsgLUwgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSIgXTsgdGhlbgorCQkJCWtpbWFnZT1gcmVhbHBhdGggJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9IDI+L2Rldi9udWxsYAorCQkJCWlmIFsgLWYgIiREJGtpbWFnZSIgXTsgdGhlbgorCQkJCQlzZWQgLWkgInM6JHtLRVJORUxfSU1BR0VUWVBFfSBcK3Jvb3Q9OiR7a2ltYWdlIyMqL30gcm9vdD06IiAkZ3J1YmNmZworCQkJCWZpCisJCQlmaQorCQlmaQorCisJCSMgUmVuYW1lIG9sZCBrZXJuZWwgaWYgaXQgY29uZmxpY3RzIHdpdGggbmV3IGtlcm5lbCBuYW1lLgorCQlpZiBncmVwIC1xICIvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSBcK3Jvb3Q9IiAkZ3J1YmNmZzsgdGhlbgorCQkJaWYgWyAtZiAiJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IiBdOyB0aGVuCisJCQkJdGltZXN0YW1wPWBkYXRlICslc2AKKwkJCQlraW1hZ2U9IiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfS0kdGltZXN0YW1wLWJhY2siCisJCQkJc2VkIC1pICJzOiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gXCtyb290PToke2tpbWFnZSMjKi99IHJvb3Q9OiIgJGdydWJjZmcKKwkJCQltdiAiJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IiAiJGtpbWFnZSIKKwkJCWZpCisJCWZpCisJZmkKK30KKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1pbWFnZV9wcmVwZW5kICgpIHsKKwlnZXRfbmV3X2dydWJfY2ZnKCkgeworCQlncnViY2ZnPSIkMSIKKwkJb2xkX2ltYWdlPSIkMiIKKwkJdGl0bGU9IlVwZGF0ZSAke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059LSR7UFZ9IgorCQlpZiBbICIke2dydWJjZmcjIyovfSIgPSAiZ3J1Yi5jZmciIF07IHRoZW4KKwkJCXJvb3Rmcz1gZ3JlcCAiICpsaW51eCBcK1teIF1cKyBcK3Jvb3Q9IiAkZ3J1YmNmZyAtbSAxIHwgXAorCQkJCSBzZWQgInMjJHtvbGRfaW1hZ2V9IyR7b2xkX2ltYWdlJS8qfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IyJgCisKKwkJCWVjaG8gIm1lbnVlbnRyeSBcIiR0aXRsZVwiIHsiCisJCQllY2hvICIgICAgc2V0IHJvb3Q9KGhkMCwxKSIKKwkJCWVjaG8gIiRyb290ZnMiCisJCQllY2hvICJ9IgorCQllbGlmIFsgIiR7Z3J1YmNmZyMjKi99IiA9ICJtZW51Lmxpc3QiIF07IHRoZW4KKwkJCXJvb3Rmcz1gZ3JlcCAia2VybmVsIFwrW14gXVwrIFwrcm9vdD0iICRncnViY2ZnIC1tIDEgfCBcCisJCQkJIHNlZCAicyMke29sZF9pbWFnZX0jJHtvbGRfaW1hZ2UlLyp9LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0jImAKKworCQkJZWNobyAiZGVmYXVsdCAwIgorCQkJZWNobyAidGltZW91dCAzMCIKKwkJCWVjaG8gInRpdGxlICR0aXRsZSIKKwkJCWVjaG8gInJvb3QgIChoZDAsMCkiCisJCQllY2hvICIkcm9vdGZzIgorCQlmaQorCX0KKworCWdldF9vbGRfZ3J1Yl9jZmcoKSB7CisJCWdydWJjZmc9IiQxIgorCQlpZiBbICIke2dydWJjZmcjIyovfSIgPSAiZ3J1Yi5jZmciIF07IHRoZW4KKwkJCWNhdCAiJGdydWJjZmciCisJCWVsaWYgWyAiJHtncnViY2ZnIyMqL30iID0gIm1lbnUubGlzdCIgXTsgdGhlbgorCQkJc2VkIC1lICcvXmRlZmF1bHQvZCcgLWUgJy9edGltZW91dC9kJyAiJGdydWJjZmciCisJCWZpCisJfQorCisJaWYgWyAtZiAiJEQvYm9vdC9ncnViL2dydWIuY2ZnIiBdOyB0aGVuCisJCWdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIKKwkJb2xkX2ltYWdlPWBncmVwICcgKmxpbnV4IFwrW14gXVwrIFwrcm9vdD0nIC1tIDEgIiRncnViY2ZnIiB8IGF3ayAne3ByaW50ICQyfSdgCisJZWxpZiBbIC1mICIkRC9ib290L2dydWIvbWVudS5saXN0IiBdOyB0aGVuCisJCWdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiCisJCW9sZF9pbWFnZT1gZ3JlcCAnXmtlcm5lbCBcK1teIF1cKyBcK3Jvb3Q9JyAtbSAxICIkZ3J1YmNmZyIgfCBhd2sgJ3twcmludCAkMn0nYAorCWZpCisKKwkjIERvbid0IHVwZGF0ZSBncnViY2ZnIGF0IGZpcnN0IGluc3RhbGwgd2hpbGUgb2xkIGJ6SW1hZ2UgZG9lc24ndCBleGlzdC4KKwlpZiBbIC1mICIkRC9ib290LyR7b2xkX2ltYWdlIyMqL30iIF07IHRoZW4KKwkJZ3J1YmNmZ3RtcD0iJGdydWJjZmcudG1wIgorCQlnZXRfbmV3X2dydWJfY2ZnICIkZ3J1YmNmZyIgIiRvbGRfaW1hZ2UiICA+ICRncnViY2ZndG1wCisJCWdldF9vbGRfZ3J1Yl9jZmcgIiRncnViY2ZnIiA+PiAkZ3J1YmNmZ3RtcAorCQltdiAkZ3J1YmNmZ3RtcCAkZ3J1YmNmZworCQllY2hvICJDYXV0aW9uISBVcGRhdGUga2VybmVsIG1heSBhZmZlY3Qga2VybmVsLW1vZHVsZSEiCisJZmkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtbW9kdWxlLXNwbGl0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhNzBlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtbW9kdWxlLXNwbGl0LmJiY2xhc3MKQEAgLTAsMCArMSwyMDMgQEAKK3BrZ19wb3N0aW5zdF9tb2R1bGVzICgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJZGVwbW9kIC1hICR7S0VSTkVMX1ZFUlNJT059CitlbHNlCisJIyBpbWFnZS5iYmNsYXNzIHdpbGwgY2FsbCBkZXBtb2R3cmFwcGVyIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgaW5zdGFsbGVkLAorCSMgbm8gbmVlZCB0byBkbyBpdCBoZXJlIGFzIHdlbGwKKwk6CitmaQorfQorCitwa2dfcG9zdHJtX21vZHVsZXMgKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwlkZXBtb2QgLWEgJHtLRVJORUxfVkVSU0lPTn0KK2Vsc2UKKwlkZXBtb2R3cmFwcGVyIC1hIC1iICREICR7S0VSTkVMX1ZFUlNJT059CitmaQorfQorCithdXRvbG9hZF9wb3N0aW5zdF9mcmFnbWVudCgpIHsKK2lmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorCW1vZHByb2JlICVzIHx8IHRydWUKK2ZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQvCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAic3BsaXRfa2VybmVsX21vZHVsZV9wYWNrYWdlcyAiCisKK0tFUk5FTF9NT0RVTEVTX01FVEFfUEFDS0FHRSA/PSAia2VybmVsLW1vZHVsZXMiCisKK3B5dGhvbiBzcGxpdF9rZXJuZWxfbW9kdWxlX3BhY2thZ2VzICgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIG1vZGluZm9leHAgPSByZS5jb21waWxlKCIoW149XSspPSguKikiKQorICAgIGtlcnZlcnJleHAgPSByZS5jb21waWxlKCdeKC4qLWhoLiopW1wuXCtdLiokJykKKyAgICBkZXBtb2RwYXQwID0gcmUuY29tcGlsZSgiXiguKlwuaz9vKTouLiokIikKKyAgICBkZXBtb2RwYXQxID0gcmUuY29tcGlsZSgiXiguKlwuaz9vKTpccyooLipcLms/bylccyokIikKKyAgICBkZXBtb2RwYXQyID0gcmUuY29tcGlsZSgiXiguKlwuaz9vKTpccyooLipcLms/bylccypcXFwkIikKKyAgICBkZXBtb2RwYXQzID0gcmUuY29tcGlsZSgiXlx0KC4qXC5rP28pXHMqXFxcJCIpCisgICAgZGVwbW9kcGF0NCA9IHJlLmNvbXBpbGUoIl5cdCguKlwuaz9vKVxzKiQiKQorCisgICAgZGVmIGV4dHJhY3RfbW9kaW5mbyhmaWxlKToKKyAgICAgICAgaW1wb3J0IHRlbXBmaWxlLCBzdWJwcm9jZXNzCisgICAgICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisgICAgICAgIHRmID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHRtcGZpbGUgPSB0ZlsxXQorICAgICAgICBjbWQgPSAiJXNvYmpjb3B5IC1qIC5tb2RpbmZvIC1PIGJpbmFyeSAlcyAlcyIgJSAoZC5nZXRWYXIoIkhPU1RfUFJFRklYIiwgVHJ1ZSkgb3IgIiIsIGZpbGUsIHRtcGZpbGUpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGYgPSBvcGVuKHRtcGZpbGUpCisgICAgICAgIGwgPSBmLnJlYWQoKS5zcGxpdCgiXDAwMCIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy5jbG9zZSh0ZlswXSkKKyAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCisgICAgICAgIHZhbHMgPSB7fQorICAgICAgICBmb3IgaSBpbiBsOgorICAgICAgICAgICAgbSA9IG1vZGluZm9leHAubWF0Y2goaSkKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB2YWxzW20uZ3JvdXAoMSldID0gbS5ncm91cCgyKQorICAgICAgICByZXR1cm4gdmFscworCisgICAgZGVmIHBhcnNlX2RlcG1vZCgpOgorCisgICAgICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICAgICAga2VybmVsdmVyID0gZC5nZXRWYXIoJ0tFUk5FTF9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAga2VybmVsdmVyX3N0cmlwcGVkID0ga2VybmVsdmVyCisgICAgICAgIG0gPSBrZXJ2ZXJyZXhwLm1hdGNoKGtlcm5lbHZlcikKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGtlcm5lbHZlcl9zdHJpcHBlZCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgc3RhZ2luZ19rZXJuZWxfZGlyID0gZC5nZXRWYXIoIlNUQUdJTkdfS0VSTkVMX0JVSUxERElSIiwgVHJ1ZSkKKyAgICAgICAgc3lzdGVtX21hcF9maWxlID0gIiVzL2Jvb3QvU3lzdGVtLm1hcC0lcyIgJSAoZHZhciwga2VybmVsdmVyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3lzdGVtX21hcF9maWxlKToKKyAgICAgICAgICAgIHN5c3RlbV9tYXBfZmlsZSA9ICIlcy9TeXN0ZW0ubWFwLSVzIiAlIChzdGFnaW5nX2tlcm5lbF9kaXIsIGtlcm5lbHZlcikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzeXN0ZW1fbWFwX2ZpbGUpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJTeXN0ZW0ubWFwLSVzIGRvZXMgbm90IGV4aXN0IGluICclcy9ib290JyBub3IgU1RBR0lOR19LRVJORUxfQlVJTERESVIgJyVzJyIgJSAoa2VybmVsdmVyLCBkdmFyLCBzdGFnaW5nX2tlcm5lbF9kaXIpKQorCisgICAgICAgIGNtZCA9ICJkZXBtb2QgLW4gLWEgLWIgJXMgLUYgJXMgJXMiICUgKGR2YXIsIHN5c3RlbV9tYXBfZmlsZSwga2VybmVsdmVyX3N0cmlwcGVkKQorICAgICAgICBmID0gb3MucG9wZW4oY21kLCAncicpCisKKyAgICAgICAgZGVwcyA9IHt9CisgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgIGlmIG5vdCBkZXBtb2RwYXQwLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbTEgPSBkZXBtb2RwYXQxLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBtMToKKyAgICAgICAgICAgICAgICBkZXBzW20xLmdyb3VwKDEpXSA9IG0xLmdyb3VwKDIpLnNwbGl0KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbTIgPSBkZXBtb2RwYXQyLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbTI6CisgICAgICAgICAgICAgICAgICAgIGRlcHNbbTIuZ3JvdXAoMSldID0gbTIuZ3JvdXAoMikuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIG0zID0gZGVwbW9kcGF0My5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBtMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHNbbTIuZ3JvdXAoMSldLmV4dGVuZChtMy5ncm91cCgxKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgbTMgPSBkZXBtb2RwYXQzLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIG00ID0gZGVwbW9kcGF0NC5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXS5leHRlbmQobTQuZ3JvdXAoMSkuc3BsaXQoKSkKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiBkZXBzCisKKyAgICBkZWYgZ2V0X2RlcGVuZGVuY2llcyhmaWxlLCBwYXR0ZXJuLCBmb3JtYXQpOgorICAgICAgICAjIGZpbGUgbm8gbG9uZ2VyIGluY2x1ZGVzIFBLR0QKKyAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZShkLmdldFZhcignUEtHRCcsIFRydWUpIG9yICcnLCAnJywgMSkKKyAgICAgICAgIyBpbnN0ZWFkIGlzIHByZWZpeGVkIHdpdGggL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059CisgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIi9saWIvbW9kdWxlcy8lcy8iICUgZC5nZXRWYXIoJ0tFUk5FTF9WRVJTSU9OJywgVHJ1ZSkgb3IgJycsICcnLCAxKQorCisgICAgICAgIGlmIGZpbGUgaW4gbW9kdWxlX2RlcHM6CisgICAgICAgICAgICBkZXBlbmRlbmNpZXMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gbW9kdWxlX2RlcHNbZmlsZV06CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIG9zLnBhdGguYmFzZW5hbWUoaSkpCisgICAgICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgb24gPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lfcGtnID0gZm9ybWF0ICUgb24KKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKGRlcGVuZGVuY3lfcGtnKQorICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcworICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBmcm9iX21ldGFkYXRhKGZpbGUsIHBrZywgcGF0dGVybiwgZm9ybWF0LCBiYXNlbmFtZSk6CisgICAgICAgIHZhbHMgPSBleHRyYWN0X21vZGluZm8oZmlsZSkKKworICAgICAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgICAgICMgSWYgYXV0b2xvYWRpbmcgaXMgcmVxdWVzdGVkLCBvdXRwdXQgL2V0Yy9tb2R1bGVzLWxvYWQuZC88bmFtZT4uY29uZiBhbmQgYXBwZW5kCisgICAgICAgICMgYXBwcm9wcmlhdGUgbW9kcHJvYmUgY29tbWFuZHMgdG8gdGhlIHBvc3RpbnN0CisgICAgICAgIGF1dG9sb2FkbGlzdCA9IChkLmdldFZhcigiS0VSTkVMX01PRFVMRV9BVVRPTE9BRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGF1dG9sb2FkID0gZC5nZXRWYXIoJ21vZHVsZV9hdXRvbG9hZF8lcycgJSBiYXNlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgYXV0b2xvYWQgYW5kIGF1dG9sb2FkID09IGJhc2VuYW1lOgorICAgICAgICAgICAgYmIud2FybigibW9kdWxlX2F1dG9sb2FkXyVzIHdhcyByZXBsYWNlZCBieSBLRVJORUxfTU9EVUxFX0FVVE9MT0FEIGZvciBjYXNlcyB3aGVyZSBiYXNlbmFtZSA9PSBtb2R1bGUgbmFtZSwgcGxlYXNlIGRyb3AgaXQiICUgYmFzZW5hbWUpCisgICAgICAgIGlmIGF1dG9sb2FkIGFuZCBiYXNlbmFtZSBub3QgaW4gYXV0b2xvYWRsaXN0OgorICAgICAgICAgICAgYmIud2FybigibW9kdWxlX2F1dG9sb2FkXyVzIGlzIGRlZmluZWQgYnV0ICclcycgaXNuJ3QgaW5jbHVkZWQgaW4gS0VSTkVMX01PRFVMRV9BVVRPTE9BRCwgcGxlYXNlIGFkZCBpdCB0aGVyZSIgJSAoYmFzZW5hbWUsIGJhc2VuYW1lKSkKKyAgICAgICAgaWYgYmFzZW5hbWUgaW4gYXV0b2xvYWRsaXN0OgorICAgICAgICAgICAgbmFtZSA9ICclcy9ldGMvbW9kdWxlcy1sb2FkLmQvJXMuY29uZicgJSAoZHZhciwgYmFzZW5hbWUpCisgICAgICAgICAgICBmID0gb3BlbihuYW1lLCAndycpCisgICAgICAgICAgICBpZiBhdXRvbG9hZDoKKyAgICAgICAgICAgICAgICBmb3IgbSBpbiBhdXRvbG9hZC5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIG0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzXG4nICUgYmFzZW5hbWUpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoInBrZ19wb3N0aW5zdF8lcyBub3QgZGVmaW5lZCIgJSBwa2cpCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignYXV0b2xvYWRfcG9zdGluc3RfZnJhZ21lbnQnLCBUcnVlKSAlIChhdXRvbG9hZCBvciBiYXNlbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICAjIFdyaXRlIG91dCBhbnkgbW9kY29uZiBmcmFnbWVudAorICAgICAgICBtb2Rjb25mbGlzdCA9IChkLmdldFZhcigiS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBtb2Rjb25mID0gZC5nZXRWYXIoJ21vZHVsZV9jb25mXyVzJyAlIGJhc2VuYW1lLCBUcnVlKQorICAgICAgICBpZiBtb2Rjb25mIGFuZCBiYXNlbmFtZSBpbiBtb2Rjb25mbGlzdDoKKyAgICAgICAgICAgIG5hbWUgPSAnJXMvZXRjL21vZHByb2JlLmQvJXMuY29uZicgJSAoZHZhciwgYmFzZW5hbWUpCisgICAgICAgICAgICBmID0gb3BlbihuYW1lLCAndycpCisgICAgICAgICAgICBmLndyaXRlKCIlc1xuIiAlIG1vZGNvbmYpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZWxpZiBtb2Rjb25mOgorICAgICAgICAgICAgYmIuZXJyb3IoIlBsZWFzZSBlbnN1cmUgbW9kdWxlICVzIGlzIGxpc3RlZCBpbiBLRVJORUxfTU9EVUxFX1BST0JFQ09ORiBzaW5jZSBtb2R1bGVfY29uZl8lcyBpcyBzZXQiICUgKGJhc2VuYW1lLCBiYXNlbmFtZSkpCisKKyAgICAgICAgZmlsZXMgPSBkLmdldFZhcignRklMRVNfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBmaWxlcyA9ICIlcyAvZXRjL21vZHVsZXMtbG9hZC5kLyVzLmNvbmYgL2V0Yy9tb2Rwcm9iZS5kLyVzLmNvbmYiICUgKGZpbGVzLCBiYXNlbmFtZSwgYmFzZW5hbWUpCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18lcycgJSBwa2csIGZpbGVzKQorCisgICAgICAgIGlmICJkZXNjcmlwdGlvbiIgaW4gdmFsczoKKyAgICAgICAgICAgIG9sZF9kZXNjID0gZC5nZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csIFRydWUpIG9yICIiCisgICAgICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgb2xkX2Rlc2MgKyAiOyAiICsgdmFsc1siZGVzY3JpcHRpb24iXSkKKworICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGZvciBkZXAgaW4gZ2V0X2RlcGVuZGVuY2llcyhmaWxlLCBwYXR0ZXJuLCBmb3JtYXQpOgorICAgICAgICAgICAgaWYgbm90IGRlcCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICByZGVwZW5kc1tkZXBdID0gW10KKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorCisgICAgICAgICMgQXZvaWQgYXV0b21hdGljIC1kZXYgcmVjb21tZW5kYXRpb25zIGZvciBtb2R1bGVzIGVuZGluZyB3aXRoIC1kZXYuCisgICAgICAgIGQuc2V0VmFyRmxhZygnUlJFQ09NTUVORFNfJyArIHBrZywgJ25vZGVwcnJlY3MnLCAxKQorCisgICAgbW9kdWxlX2RlcHMgPSBwYXJzZV9kZXBtb2QoKQorICAgIG1vZHVsZV9yZWdleCA9ICdeKC4qKVwuaz9vJCcKKyAgICBtb2R1bGVfcGF0dGVybiA9ICdrZXJuZWwtbW9kdWxlLSVzJworCisgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0X21vZHVsZXMnLCBUcnVlKQorICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtX21vZHVsZXMnLCBUcnVlKQorCisgICAgbW9kdWxlcyA9IGRvX3NwbGl0X3BhY2thZ2VzKGQsIHJvb3Q9Jy9saWIvbW9kdWxlcycsIGZpbGVfcmVnZXg9bW9kdWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybj1tb2R1bGVfcGF0dGVybiwgZGVzY3JpcHRpb249JyVzIGtlcm5lbCBtb2R1bGUnLCBwb3N0aW5zdD1wb3N0aW5zdCwgcG9zdHJtPXBvc3RybSwgcmVjdXJzaXZlPVRydWUsIGhvb2s9ZnJvYl9tZXRhZGF0YSwgZXh0cmFfZGVwZW5kcz0na2VybmVsLSVzJyAlIChkLmdldFZhcigiS0VSTkVMX1ZFUlNJT04iLCBUcnVlKSkpCisgICAgaWYgbW9kdWxlczoKKyAgICAgICAgbWV0YXBrZyA9IGQuZ2V0VmFyKCdLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UnLCBUcnVlKQorICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIG1ldGFwa2csICcgJysnICcuam9pbihtb2R1bGVzKSkKKworICAgICMgSWYgbW9kdWxlcy1sb2FkLmQgYW5kIG1vZHByb2JlLmQgYXJlIGVtcHR5IGF0IHRoaXMgcG9pbnQsIHJlbW92ZSB0aGVtIHRvCisgICAgIyBhdm9pZCB3YXJuaW5ncy4gcmVtb3ZlZGlycyBvbmx5IHJhaXNlcyBhbiBPU0Vycm9yIGlmIGFuIGVtcHR5CisgICAgIyBkaXJlY3RvcnkgY2Fubm90IGJlIHJlbW92ZWQuCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBmb3IgZGlyIGluIFsiJXMvZXRjL21vZHByb2JlLmQiICUgKGR2YXIpLCAiJXMvZXRjL21vZHVsZXMtbG9hZC5kIiAlIChkdmFyKSwgIiVzL2V0YyIgJSAoZHZhcildOgorICAgICAgICBpZiBsZW4ob3MubGlzdGRpcihkaXIpKSA9PSAwOgorICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQorfQorCitkb19wYWNrYWdlW3ZhcmRlcHNdICs9ICcke0AiICIuam9pbihtYXAobGFtYmRhIHM6ICJtb2R1bGVfY29uZl8iICsgcywgKGQuZ2V0VmFyKCJLRVJORUxfTU9EVUxFX1BST0JFQ09ORiIsIFRydWUpIG9yICIiKS5zcGxpdCgpKSl9JwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWU3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLXVib290LmJiY2xhc3MKQEAgLTAsMCArMSwyMCBAQAordWJvb3RfcHJlcF9raW1hZ2UoKSB7CisJaWYgdGVzdCAtZSBhcmNoLyR7QVJDSH0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXggOyB0aGVuCisJCXZtbGludXhfcGF0aD0iYXJjaC8ke0FSQ0h9L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4IgorCQlsaW51eF9zdWZmaXg9IiIKKwkJbGludXhfY29tcD0ibm9uZSIKKwllbHNlCisJCXZtbGludXhfcGF0aD0idm1saW51eCIKKwkJbGludXhfc3VmZml4PSIuZ3oiCisJCWxpbnV4X2NvbXA9Imd6aXAiCisJZmkKKworCSR7T0JKQ09QWX0gLU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1TICIke3ZtbGludXhfcGF0aH0iIGxpbnV4LmJpbgorCisJaWYgWyAiJHtsaW51eF9jb21wfSIgIT0gIm5vbmUiIF0gOyB0aGVuCisJCWd6aXAgLTkgbGludXguYmluCisJCW12IC1mICJsaW51eC5iaW4ke2xpbnV4X3N1ZmZpeH0iIGxpbnV4LmJpbgorCWZpCisKKwllY2hvICIke2xpbnV4X2NvbXB9IgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtdWltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczOTY1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtdWltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAoraW5oZXJpdCBrZXJuZWwtdWJvb3QKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorICAgIGlmIGtlcm5lbHR5cGUgPT0gJ3VJbWFnZSc6CisgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcigiREVQRU5EUyIsIFRydWUpCisgICAgICAgIGRlcGVuZHMgPSAiJXMgdS1ib290LW1raW1hZ2UtbmF0aXZlIiAlIGRlcGVuZHMKKyAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCBkZXBlbmRzKQorCisJIyBPdmVycmlkZSBLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIHZhcmlhYmxlLCB3aGljaCBpcyBpbnRlcm5hbAorCSMgdG8ga2VybmVsLmJiY2xhc3MgLiBXZSBvdmVycmlkZSB0aGUgdmFyaWFibGUgaGVyZSwgc2luY2Ugd2UgbmVlZAorCSMgdG8gYnVpbGQgdUltYWdlIHVzaW5nIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGlmIGFuZCBvbmx5IGlmCisJIyBLRUVQVUlNQUdFID09IHllcy4gT3RoZXJ3aXNlLCB3ZSBwYWNrIGNvbXByZXNzZWQgdm1saW51eCBpbnRvCisJIyB0aGUgdUltYWdlIC4KKwlpZiBkLmdldFZhcigiS0VFUFVJTUFHRSIsIFRydWUpICE9ICd5ZXMnOgorICAgICAgICAgICAgZC5zZXRWYXIoIktFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UiLCAiekltYWdlIikKK30KKworZG9fdWJvb3RfbWtpbWFnZSgpIHsKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieHVJbWFnZSIgOyB0aGVuCisJCWlmIHRlc3QgIngke0tFRVBVSU1BR0V9IiAhPSAieHllcyIgOyB0aGVuCisJCQl1Ym9vdF9wcmVwX2tpbWFnZQorCisJCQlFTlRSWVBPSU5UPSR7VUJPT1RfRU5UUllQT0lOVH0KKwkJCWlmIHRlc3QgLW4gIiR7VUJPT1RfRU5UUllTWU1CT0x9IjsgdGhlbgorCQkJCUVOVFJZUE9JTlQ9YCR7SE9TVF9QUkVGSVh9bm0gJHtTfS92bWxpbnV4IHwgXAorCQkJCQlhd2sgJyQzPT0iJHtVQk9PVF9FTlRSWVNZTUJPTH0iIHtwcmludCAkMX0nYAorCQkJZmkKKworCQkJdWJvb3QtbWtpbWFnZSAtQSAke1VCT09UX0FSQ0h9IC1PIGxpbnV4IC1UIGtlcm5lbCAtQyAiJHtsaW51eF9jb21wfSIgLWEgJHtVQk9PVF9MT0FEQUREUkVTU30gLWUgJEVOVFJZUE9JTlQgLW4gIiR7RElTVFJPX05BTUV9LyR7UFZ9LyR7TUFDSElORX0iIC1kIGxpbnV4LmJpbiBhcmNoLyR7QVJDSH0vYm9vdC91SW1hZ2UKKwkJCXJtIC1mIGxpbnV4LmJpbgorCQlmaQorCWZpCit9CisKK2FkZHRhc2sgdWJvb3RfbWtpbWFnZSBiZWZvcmUgZG9faW5zdGFsbCBhZnRlciBkb19jb21waWxlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1Zjk0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwteW9jdG8uYmJjbGFzcwpAQCAtMCwwICsxLDM2OCBAQAorIyByZW1vdmUgdGFza3MgdGhhdCBtb2RpZnkgdGhlIHNvdXJjZSB0cmVlIGluIGNhc2UgZXh0ZXJuYWxzcmMgaXMgaW5oZXJpdGVkCitTUkNUUkVFQ09WRVJFRFRBU0tTICs9ICJkb19rZXJuZWxfbGlua192bWxpbnV4IGRvX2tlcm5lbF9jb25maWdtZSBkb192YWxpZGF0ZV9icmFuY2hlcyBkb19rZXJuZWxfY29uZmlnY2hlY2sgZG9fa2VybmVsX2NoZWNrb3V0IGRvX3NoYXJlZF93b3JrZGlyIGRvX2ZldGNoIGRvX3VucGFjayBkb19wYXRjaCIKKworIyByZXR1cm5zIGxvY2FsIChhYnNvbHV0ZSkgcGF0aCBuYW1lcyBmb3IgYWxsIHZhbGlkIHBhdGNoZXMgaW4gdGhlCisjIHNyY191cmkKK2RlZiBmaW5kX3BhdGNoZXMoZCk6CisgICAgcGF0Y2hlcyA9IHNyY19wYXRjaGVzKGQpCisgICAgcGF0Y2hfbGlzdD1bXQorICAgIGZvciBwIGluIHBhdGNoZXM6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBfID0gYmIuZmV0Y2guZGVjb2RldXJsKHApCisgICAgICAgIHBhdGNoX2xpc3QuYXBwZW5kKGxvY2FsKQorCisgICAgcmV0dXJuIHBhdGNoX2xpc3QKKworIyByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc3JjIHVyaSB0aGF0IGFyZSAuc2NjIGZpbGVzCitkZWYgZmluZF9zY2NzKGQpOgorICAgIHNvdXJjZXM9c3JjX3BhdGNoZXMoZCwgVHJ1ZSkKKyAgICBzb3VyY2VzX2xpc3Q9W10KKyAgICBmb3IgcyBpbiBzb3VyY2VzOgorICAgICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocykpCisgICAgICAgIGlmIGV4dCBhbmQgZXh0IGluIFsiLnNjYyIsICIuY2ZnIl06CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisgICAgICAgIGVsaWYgYmFzZSBhbmQgYmFzZSBpbiAnZGVmY29uZmlnJzoKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKKworIyBjaGVjayB0aGUgU1JDX1VSSSBmb3IgImttZXRhIiB0eXBlJ2QgZ2l0IHJlcG9zaXRvcmllcy4gUmV0dXJuIHRoZSBuYW1lIG9mCisjIHRoZSByZXBvc2l0b3J5IGFzIGl0IHdpbGwgYmUgZm91bmQgaW4gV09SS0RJUgorZGVmIGZpbmRfa2VybmVsX2ZlYXR1cmVfZGlycyhkKToKKyAgICBmZWF0dXJlX2RpcnM9W10KKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIHVybGRhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgIHBhcm0gPSB1cmxkYXRhLnBhcm0KKyAgICAgICAgdHlwZT0iIgorICAgICAgICBpZiAidHlwZSIgaW4gcGFybToKKyAgICAgICAgICAgIHR5cGUgPSBwYXJtWyJ0eXBlIl0KKyAgICAgICAgaWYgImRlc3RzdWZmaXgiIGluIHBhcm06CisgICAgICAgICAgICBkZXN0ZGlyID0gcGFybVsiZGVzdHN1ZmZpeCJdCisgICAgICAgICAgICBpZiB0eXBlID09ICJrbWV0YSI6CisgICAgICAgICAgICAgICAgZmVhdHVyZV9kaXJzLmFwcGVuZChkZXN0ZGlyKQorCSAgICAKKyAgICByZXR1cm4gZmVhdHVyZV9kaXJzCisKKyMgZmluZCB0aGUgbWFzdGVyL21hY2hpbmUgc291cmNlIGJyYW5jaC4gSW4gdGhlIHNhbWUgd2F5IHRoYXQgdGhlIGZldGNoZXIgcHJvY2VzZXMKKyMgZ2l0IHJlcG9zaXRvcmllcyBpbiB0aGUgU1JDX1VSSSB3ZSB0YWtlIHRoZSBmaXJzdCByZXBvIGZvdW5kLCBmaXJzdCBicmFuY2guCitkZWYgZ2V0X21hY2hpbmVfYnJhbmNoKGQsIGRlZmF1bHQpOgorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKFtdLCBkKQorICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICAgICAgcGFybSA9IHVybGRhdGEucGFybQorICAgICAgICBpZiAiYnJhbmNoIiBpbiBwYXJtOgorICAgICAgICAgICAgYnJhbmNoZXMgPSB1cmxkYXRhLnBhcm0uZ2V0KCJicmFuY2giKS5zcGxpdCgnLCcpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoZXNbMF0KKwkgICAgCisgICAgcmV0dXJuIGRlZmF1bHQKKworZG9fa2VybmVsX21ldGFkYXRhKCkgeworCXNldCArZQorCWNkICR7U30KKwlleHBvcnQgS01FVEE9JHtLTUVUQX0KKworCSMgaWYga2VybmVsIHRvb2xzIGFyZSBhdmFpbGFibGUgaW4tdHJlZSwgdGhleSBhcmUgcHJlZmVycmVkCisJIyBhbmQgYXJlIHBsYWNlZCBvbiB0aGUgcGF0aCBiZWZvcmUgYW55IGV4dGVybmFsIHRvb2xzLiBVbmxlc3MKKwkjIHRoZSBleHRlcm5hbCB0b29scyBmbGFnIGlzIHNldCwgaW4gdGhhdCBjYXNlIHdlIGRvIG5vdGhpbmcuCisJaWYgWyAtZiAiJHtTfS9zY3JpcHRzL3V0aWwvY29uZmlnbWUiIF07IHRoZW4KKwkJaWYgWyAteiAiJHtFWFRFUk5BTF9LRVJORUxfVE9PTFN9IiBdOyB0aGVuCisJCQlQQVRIPSR7U30vc2NyaXB0cy91dGlsOiR7UEFUSH0KKwkJZmkKKwlmaQorCisJbWFjaGluZV9icmFuY2g9IiR7QCBnZXRfbWFjaGluZV9icmFuY2goZCwgIiR7S0JSQU5DSH0iICl9IgorCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVl9tYWNoaW5lfSIKKwlpZiBbIC16ICIke21hY2hpbmVfc3JjcmV2fSIgXTsgdGhlbgorCQkjIGZhbGxiYWNrIHRvIFNSQ1JFViBpZiBhIG5vbiBtYWNoaW5lX21ldGEgdHJlZSBpcyBiZWluZyBidWlsdAorCQltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZ9IgorCWZpCisKKwkjIEluIGEgc2ltaWxhciBtYW5uZXIgdG8gdGhlIGtlcm5lbCBpdHNlbGY6CisJIworCSMgICBkZWZjb25maWc6ICQob2JqKS9jb25mCisJIyAgIGlmZXEgKCQoS0JVSUxEX0RFRkNPTkZJRyksKQorCSMJJDwgLS1kZWZjb25maWcgJChLY29uZmlnKQorCSMgICBlbHNlCisJIwlAZWNobyAiKioqIERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiAnJChLQlVJTERfREVGQ09ORklHKSciCisJIwkkKFEpJDwgLS1kZWZjb25maWc9YXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3MvJChLQlVJTERfREVGQ09ORklHKSAkKEtjb25maWcpCisJIyAgIGVuZGlmCisJIworCSMgSWYgYSBkZWZjb25maWcgaXMgc3BlY2lmaWVkIHZpYSB0aGUgS0JVSUxEX0RFRkNPTkZJRyB2YXJpYWJsZSwgd2UgY29weSBpdAorCSMgZnJvbSB0aGUgc291cmNlIHRyZWUsIGludG8gYSBjb21tb24gbG9jYXRpb24gYW5kIG5vcm1hbGl6ZWQgImRlZmNvbmZpZyIgbmFtZSwKKwkjIHdoZXJlIHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzIHdpbGwgaW5jbHVkZSBhbmQgaW5jb3JvcG9yYXRlIGl0IGludG8gdGhlIGJ1aWxkCisJIworCSMgSWYgdGhlIGZldGNoZXIgaGFzIGFscmVhZHkgcGxhY2VkIGEgZGVmY29uZmlnIGluIFdPUktESVIgKGZyb20gdGhlIFNSQ19VUkkpLAorCSMgd2UgZG9uJ3Qgb3ZlcndyaXRlIGl0LCBidXQgaW5zdGVhZCB3YXJuIHRoZSB1c2VyIHRoYXQgU1JDX1VSSSBkZWZjb25maWdzIHRha2UKKwkjIHByZWNlbmRlbmNlLgorCSMKKwlpZiBbIC1uICIke0tCVUlMRF9ERUZDT05GSUd9IiBdOyB0aGVuCisJCWlmIFsgLWYgIiR7U30vYXJjaC8ke0FSQ0h9L2NvbmZpZ3MvJHtLQlVJTERfREVGQ09ORklHfSIgXTsgdGhlbgorCQkJaWYgWyAtZiAiJHtXT1JLRElSfS9kZWZjb25maWciIF07IHRoZW4KKwkJCQkjIElmIHRoZSB0d28gZGVmY29uZmlnJ3MgYXJlIGRpZmZlcmVudCwgd2FybiB0aGF0IHdlIGRpZG4ndCBvdmVyd3JpdGUgdGhlCisJCQkJIyBvbmUgYWxyZWFkeSBwbGFjZWQgaW4gV09SS0RJUiBieSB0aGUgZmV0Y2hlci4KKwkJCQljbXAgIiR7V09SS0RJUn0vZGVmY29uZmlnIiAiJHtTfS9hcmNoLyR7QVJDSH0vY29uZmlncy8ke0tCVUlMRF9ERUZDT05GSUd9IgorCQkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCQliYndhcm4gImRlZmNvbmZpZyBkZXRlY3RlZCBpbiBXT1JLRElSLiAke0tCVUlMRF9ERUZDT05GSUd9IHNraXBwZWQiCisJCQkJZmkKKwkJCWVsc2UKKwkJCQljcCAtZiAke1N9L2FyY2gvJHtBUkNIfS9jb25maWdzLyR7S0JVSUxEX0RFRkNPTkZJR30gJHtXT1JLRElSfS9kZWZjb25maWcKKwkJCQlzY2NzPSIke1dPUktESVJ9L2RlZmNvbmZpZyIKKwkJCWZpCisJCWVsc2UKKwkJCWJiZmF0YWwgIkEgS0JVSUxEX0RFQ09ORklHICcke0tCVUlMRF9ERUZDT05GSUd9JyB3YXMgc3BlY2lmaWVkLCBidXQgbm90IHByZXNlbnQgaW4gdGhlIHNvdXJjZSB0cmVlIgorCQlmaQorCWZpCisKKwlzY2NzPSIkc2NjcyAke0AiICIuam9pbihmaW5kX3NjY3MoZCkpfSIKKwlwYXRjaGVzPSIke0AiICIuam9pbihmaW5kX3BhdGNoZXMoZCkpfSIKKwlmZWF0X2RpcnM9IiR7QCIgIi5qb2luKGZpbmRfa2VybmVsX2ZlYXR1cmVfZGlycyhkKSl9IgorCisJIyBhZGQgYW55IGV4cGxpY2l0bHkgcmVmZXJlbmNlZCBmZWF0dXJlcyBvbnRvIHRoZSBlbmQgb2YgdGhlIGZlYXR1cmUKKwkjIGxpc3QgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBidWlsZCBzY3JpcHRzLgorCWlmIFsgLW4gIiR7S0VSTkVMX0ZFQVRVUkVTfSIgXTsgdGhlbgorCQlmb3IgZmVhdCBpbiAke0tFUk5FTF9GRUFUVVJFU307IGRvCisJCQlhZGRvbl9mZWF0dXJlcz0iJGFkZG9uX2ZlYXR1cmVzIC0tZmVhdHVyZSAkZmVhdCIKKwkJZG9uZQorCWZpCisKKwkjIGNoZWNrIGZvciBmZWF0dXJlIGRpcmVjdG9yaWVzL3JlcG9zL2JyYW5jaGVzIHRoYXQgd2VyZSBwYXJ0IG9mIHRoZQorCSMgU1JDX1VSSS4gSWYgdGhleSB3ZXJlIHN1cHBsaWVkLCB3ZSBjb252ZXJ0IHRoZW0gaW50byBpbmNsdWRlIGRpcmVjdGl2ZXMKKwkjIGZvciB0aGUgdXBkYXRlIHBhcnQgb2YgdGhlIHByb2Nlc3MKKwlpZiBbIC1uICIke2ZlYXRfZGlyc30iIF07IHRoZW4KKwkgICAgZm9yIGYgaW4gJHtmZWF0X2RpcnN9OyBkbworCQlpZiBbIC1kICIke1dPUktESVJ9LyRmL21ldGEiIF07IHRoZW4KKwkJICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkke1dPUktESVJ9LyRmL21ldGEiCisJCWVsaWYgWyAtZCAiJHtXT1JLRElSfS8kZiIgXTsgdGhlbgorCQkgICAgaW5jbHVkZXM9IiRpbmNsdWRlcyAtSSR7V09SS0RJUn0vJGYiCisJCWZpCisJICAgIGRvbmUKKwlmaQorCisJIyB1cGRhdGVzIG9yIGdlbmVyYXRlcyB0aGUgdGFyZ2V0IGRlc2NyaXB0aW9uCisJdXBkYXRlbWUgJHt1cGRhdGVtZV9mbGFnc30gLURLREVTQz0ke0tNQUNISU5FfToke0xJTlVYX0tFUk5FTF9UWVBFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlc30gJHthZGRvbl9mZWF0dXJlc30gJHtBUkNIfSAke0tNQUNISU5FfSAke3NjY3N9ICR7cGF0Y2hlc30KKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJYmJmYXRhbF9sb2cgIkNvdWxkIG5vdCB1cGRhdGUgJHttYWNoaW5lX2JyYW5jaH0iCisJZmkKK30KKworZG9fcGF0Y2goKSB7CisJY2QgJHtTfQorCisJIyBleGVjdXRlcyBhbmQgbW9kaWZpZXMgdGhlIHNvdXJjZSB0cmVlIGFzIHJlcXVpcmVkCisJcGF0Y2htZSAke0tNQUNISU5FfQorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQliYmVycm9yICJDb3VsZCBub3QgYXBwbHkgcGF0Y2hlcyBmb3IgJHtLTUFDSElORX0uIgorCQliYmZhdGFsX2xvZyAiUGF0Y2ggZmFpbHVyZXMgY2FuIGJlIHJlc29sdmVkIGluIHRoZSBsaW51eCBzb3VyY2UgZGlyZWN0b3J5ICR7U30pIgorCWZpCisKKwkjIGNoZWNrIHRvIHNlZSBpZiB0aGUgc3BlY2lmaWVkIFNSQ1JFViBpcyByZWFjaGFibGUgZnJvbSB0aGUgZmluYWwgYnJhbmNoLgorCSMgaWYgaXQgd2Fzbid0IHNvbWV0aGluZyB3cm9uZyBoYXMgaGFwcGVuZWQsIGFuZCB3ZSBzaG91bGQgZXJyb3IuCisJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWX21hY2hpbmV9IgorCWlmIFsgLXogIiR7bWFjaGluZV9zcmNyZXZ9IiBdOyB0aGVuCisJCSMgZmFsbGJhY2sgdG8gU1JDUkVWIGlmIGEgbm9uIG1hY2hpbmVfbWV0YSB0cmVlIGlzIGJlaW5nIGJ1aWx0CisJCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVn0iCisJCSMgaWYgU1JDUkVWIGNhbm5vdCBiZSByZWFjaGVkIHNvbWV0aGluZyBpcyB3cm9uZy4KKwkJaWYgWyAteiAiJHttYWNoaW5lX3NyY3Jldn0iIF07IHRoZW4KKwkJCWJiZmF0YWwgIk5laXRoZXIgU1JDUkVWX21hY2hpbmUgb3IgU1JDUkVWIHdhcyBzcGVjaWZpZWQhIgorCQlmaQorCWZpCisKKwlpZiBbICIke21hY2hpbmVfc3JjcmV2fSIgIT0gIkFVVE9JTkMiIF07IHRoZW4KKwkJaWYgISBbICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHttYWNoaW5lX3NyY3Jldn1+MCkiID0gIiQoZ2l0IG1lcmdlLWJhc2UgJHttYWNoaW5lX3NyY3Jldn0gSEVBRCkiIF07IHRoZW4KKwkJCWJiZXJyb3IgIlNSQ1JFViAke21hY2hpbmVfc3JjcmV2fSB3YXMgc3BlY2lmaWVkLCBidXQgaXMgbm90IHJlYWNoYWJsZSIKKwkJCWJiZmF0YWwgIkNoZWNrIHRoZSBCU1AgZGVzY3JpcHRpb24gZm9yIGluY29ycmVjdCBicmFuY2ggc2VsZWN0aW9uLCBvciBvdGhlciBlcnJvcnMuIgorCQlmaQorCWZpCit9CisKK2RvX2tlcm5lbF9jaGVja291dCgpIHsKKwlzZXQgK2UKKworCXNvdXJjZV9kaXI9YGVjaG8gJHtTfSB8IHNlZCAncyUvJCUlJ2AKKwlzb3VyY2Vfd29ya2Rpcj0iJHtXT1JLRElSfS9naXQiCisJaWYgWyAtZCAiJHtXT1JLRElSfS9naXQvIiBdOyB0aGVuCisJCSMgY2FzZTogZ2l0IHJlcG9zaXRvcnkgKGJhcmUgb3Igbm9uLWJhcmUpCisJCSMgaWYgUyBpcyBXT1JLRElSL2dpdCwgdGhlbiB3ZSBzaG91bGRuJ3QgYmUgbW92aW5nIG9yIGRlbGV0aW5nIHRoZSB0cmVlLgorCQlpZiBbICIke3NvdXJjZV9kaXJ9IiAhPSAiJHtzb3VyY2Vfd29ya2Rpcn0iIF07IHRoZW4KKwkJCXJtIC1yZiAke1N9CisJCQltdiAke1dPUktESVJ9L2dpdCAke1N9CisJCWZpCisJCWNkICR7U30KKwllbHNlCisJCSMgY2FzZTogd2UgaGF2ZSBubyBnaXQgcmVwb3NpdG9yeSBhdCBhbGwuIAorCQkjIFRvIHN1cHBvcnQgbG93IGJhbmR3aWR0aCBvcHRpb25zIGZvciBidWlsZGluZyB0aGUga2VybmVsLCB3ZSdsbCBqdXN0IAorCQkjIGNvbnZlcnQgdGhlIHRyZWUgdG8gYSBnaXQgcmVwbyBhbmQgbGV0IHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzIHdvcmsgdW5jaGFuZ2VkCisJCQorCQkjIGlmICR7U30gaGFzbid0IGJlZW4gc2V0IHRvIHRoZSBwcm9wZXIgc3ViZGlyZWN0b3J5IGEgZGVmYXVsdCBvZiAibGludXgiIGlzIAorCQkjIHVzZWQsIGJ1dCB3ZSBjYW4ndCBpbml0aWFsaXplIHRoYXQgZW1wdHkgZGlyZWN0b3J5LiBTbyBjaGVjayBpdCBhbmQgdGhyb3cgYQorCQkjIGNsZWFyIGVycm9yCisKKwkgICAgICAgIGNkICR7U30KKwkJaWYgWyAhIC1mICJNYWtlZmlsZSIgXTsgdGhlbgorCQkJYmJlcnJvciAiUyBpcyBub3Qgc2V0IHRvIHRoZSBsaW51eCBzb3VyY2UgZGlyZWN0b3J5LiBDaGVjayAiCisJCQliYmZhdGFsICJ0aGUgcmVjaXBlIGFuZCBzZXQgUyB0byB0aGUgcHJvcGVyIGV4dHJhY3RlZCBzdWJkaXJlY3RvcnkiCisJCWZpCisJCXJtIC1mIC5naXRpZ25vcmUKKwkJZ2l0IGluaXQKKwkJZ2l0IGFkZCAuCisJCWdpdCBjb21taXQgLXEgLW0gImJhc2VsaW5lIGNvbW1pdDogY3JlYXRpbmcgcmVwbyBmb3IgJHtQTn0tJHtQVn0iCisJCWdpdCBjbGVhbiAtZCAtZgorCWZpCisKKwkjIGNvbnZlcnQgYW55IHJlbW90ZSBicmFuY2hlcyB0byBsb2NhbCB0cmFja2luZyBvbmVzCisJZm9yIGkgaW4gYGdpdCBicmFuY2ggLWEgLS1uby1jb2xvciB8IGdyZXAgcmVtb3RlcyB8IGdyZXAgLXYgSEVBRGA7IGRvCisJCWI9YGVjaG8gJGkgfCBjdXQgLWQnICcgLWYyIHwgc2VkICdzJXJlbW90ZXMvb3JpZ2luLyUlJ2A7CisJCWdpdCBzaG93LXJlZiAtLXF1aWV0IC0tdmVyaWZ5IC0tICJyZWZzL2hlYWRzLyRiIgorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWdpdCBicmFuY2ggJGIgJGkgPiAvZGV2L251bGwKKwkJZmkKKwlkb25lCisKKwkjIENyZWF0ZSBhIHdvcmtpbmcgdHJlZSBjb3B5IG9mIHRoZSBrZXJuZWwgYnkgY2hlY2tpbmcgb3V0IGEgYnJhbmNoCisJbWFjaGluZV9icmFuY2g9IiR7QCBnZXRfbWFjaGluZV9icmFuY2goZCwgIiR7S0JSQU5DSH0iICl9IgorCisJIyBjaGVja291dCBhbmQgY2xvYmJlciBhbnkgdW5pbXBvcnRhbnQgZmlsZXMKKwlnaXQgY2hlY2tvdXQgLWYgJHttYWNoaW5lX2JyYW5jaH0KK30KK2RvX2tlcm5lbF9jaGVja291dFtkaXJzXSA9ICIke1N9IgorCithZGR0YXNrIGtlcm5lbF9jaGVja291dCBiZWZvcmUgZG9fa2VybmVsX21ldGFkYXRhIGFmdGVyIGRvX3VucGFjaworYWRkdGFzayBrZXJuZWxfbWV0YWRhdGEgYWZ0ZXIgZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAorZG9fa2VybmVsX21ldGFkYXRhW2RlcGVuZHNdID0gImtlcm4tdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2tlcm5lbF9jb25maWdtZVtkaXJzXSArPSAiJHtTfSAke0J9IgorZG9fa2VybmVsX2NvbmZpZ21lKCkgeworCWJibm90ZSAia2VybmVsIGNvbmZpZ21lIgorCWV4cG9ydCBLTUVUQT0ke0tNRVRBfQorCisJaWYgWyAtbiAiJHtLQ09ORklHX01PREV9IiBdOyB0aGVuCisJCWNvbmZpZ21lZmxhZ3M9JHtLQ09ORklHX01PREV9CisJZWxzZQorCQkjIElmIGEgZGVmY29uZmlnIHdhcyBwYXNzZWQsIHVzZSA9biBhcyB0aGUgYmFzZWxpbmUsIHdoaWNoIGlzIGFjaGlldmVkCisJCSMgdmlhIC0tYWxsbm9jb25maWcKKwkJaWYgWyAtZiAke1dPUktESVJ9L2RlZmNvbmZpZyBdOyB0aGVuCisJCQljb25maWdtZWZsYWdzPSItLWFsbG5vY29uZmlnIgorCQlmaQorCWZpCisKKwljZCAke1N9CisJUEFUSD0ke1BBVEh9OiR7U30vc2NyaXB0cy91dGlsCisJY29uZmlnbWUgJHtjb25maWdtZWZsYWdzfSAtLXJlY29uZmlnIC0tb3V0cHV0ICR7Qn0gJHtMSU5VWF9LRVJORUxfVFlQRX0gJHtLTUFDSElORX0KKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJYmJmYXRhbF9sb2cgIkNvdWxkIG5vdCBjb25maWd1cmUgJHtLTUFDSElORX0tJHtMSU5VWF9LRVJORUxfVFlQRX0iCisJZmkKKwkKKwllY2hvICIjIEdsb2JhbCBzZXR0aW5ncyBmcm9tIGxpbnV4IHJlY2lwZSIgPj4gJHtCfS8uY29uZmlnCisJZWNobyAiQ09ORklHX0xPQ0FMVkVSU0lPTj0iXCIke0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OfVwiID4+ICR7Qn0vLmNvbmZpZworfQorCithZGR0YXNrIGtlcm5lbF9jb25maWdtZSBiZWZvcmUgZG9fY29uZmlndXJlIGFmdGVyIGRvX3BhdGNoCisKK3B5dGhvbiBkb19rZXJuZWxfY29uZmlnY2hlY2soKSB7CisgICAgaW1wb3J0IHJlLCBzdHJpbmcsIHN5cworCisgICAgIyBpZiBLTUVUQSBpc24ndCBzZXQgZ2xvYmFsbHkgYnkgYSByZWNpcGUgdXNpbmcgdGhpcyByb3V0aW5lLCB3ZSBuZWVkIHRvCisgICAgIyBzZXQgdGhlIGRlZmF1bHQgdG8gJ21ldGEnLiBPdGhlcndpc2UsIGtjb25mX2NoZWNrIGlzIG5vdCBwYXNzZWQgYSB2YWxpZAorICAgICMgbWV0YS1zZXJpZXMgZm9yIHByb2Nlc3NpbmcKKyAgICBrbWV0YSA9IGQuZ2V0VmFyKCAiS01FVEEiLCBUcnVlICkgb3IgIm1ldGEiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGttZXRhKToKKyAgICAgICAga21ldGEgPSAiLiIgKyBrbWV0YQorCisgICAgcGF0aHByZWZpeCA9ICJleHBvcnQgUEFUSD0lczolczsgIiAlIChkLmdldFZhcignUEFUSCcsIFRydWUpLCAiJHtTfS9zY3JpcHRzL3V0aWwvIikKKyAgICBjbWQgPSBkLmV4cGFuZCgiY2QgJHtTfTsga2NvbmZfY2hlY2sgLWNvbmZpZyAlcy9tZXRhLXNlcmllcyAke1N9ICR7Qn0iICUga21ldGEpCisgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiVzJXMiICUgKHBhdGhwcmVmaXgsIGNtZCkpCisKKyAgICBjb25maWdfY2hlY2tfdmlzaWJpbGl0eSA9IGludChkLmdldFZhciggIktDT05GX0FVRElUX0xFVkVMIiwgVHJ1ZSApIG9yIDApCisgICAgYnNwX2NoZWNrX3Zpc2liaWxpdHkgPSBpbnQoZC5nZXRWYXIoICJLQ09ORl9CU1BfQVVESVRfTEVWRUwiLCBUcnVlICkgb3IgMCkKKworICAgICMgaWYgY29uZmlnIGNoZWNrIHZpc2liaWxpdHkgaXMgbm9uLXplcm8sIHJlcG9ydCBkcm9wcGVkIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisgICAgbWlzbWF0Y2hfZmlsZSA9ICIke1N9LyIgKyBrbWV0YSArICIvIiArICJtaXNtYXRjaC5jZmciCisgICAgaWYgb3MucGF0aC5leGlzdHMobWlzbWF0Y2hfZmlsZSk6CisgICAgICAgIGlmIGNvbmZpZ19jaGVja192aXNpYmlsaXR5OgorICAgICAgICAgICAgd2l0aCBvcGVuIChtaXNtYXRjaF9maWxlLCAiciIpIGFzIG15ZmlsZToKKyAgICAgICAgICAgICAgICByZXN1bHRzID0gbXlmaWxlLnJlYWQoKQorICAgICAgICAgICAgICAgIGJiLndhcm4oICJba2VybmVsIGNvbmZpZ106IHNwZWNpZmllZCB2YWx1ZXMgZGlkIG5vdCBtYWtlIGl0IGludG8gdGhlIGtlcm5lbCdzIGZpbmFsIGNvbmZpZ3VyYXRpb246XG5cbiVzIiAlIHJlc3VsdHMpCisKKyAgICAjIGlmIGNvbmZpZyBjaGVjayB2aXNpYmlsaXR5IGlzIGxldmVsIDIgb3IgaGlnaGVyLCByZXBvcnQgbm9uLWhhcmR3YXJlIG9wdGlvbnMKKyAgICBub25od19maWxlID0gIiR7U30vIiArIGttZXRhICsgIi8iICsgIm5vbmh3X3JlcG9ydC5jZmciCisgICAgaWYgb3MucGF0aC5leGlzdHMobm9uaHdfZmlsZSk6CisgICAgICAgIGlmIGNvbmZpZ19jaGVja192aXNpYmlsaXR5ID4gMToKKyAgICAgICAgICAgIHdpdGggb3BlbiAobm9uaHdfZmlsZSwgInIiKSBhcyBteWZpbGU6CisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbCBjb25maWddOiBCU1Agc3BlY2lmaWVkIG5vbi1odyBjb25maWd1cmF0aW9uOlxuXG4lcyIgJSByZXN1bHRzKQorCisgICAgYnNwX2Rlc2MgPSAiJHtTfS8iICsga21ldGEgKyAiLyIgKyAidG9wX3RndCIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhic3BfZGVzYykgYW5kIGJzcF9jaGVja192aXNpYmlsaXR5ID4gMToKKyAgICAgICAgd2l0aCBvcGVuIChic3BfZGVzYywgInIiKSBhcyBteWZpbGU6CisgICAgICAgICAgICBic3BfdGd0ID0gbXlmaWxlLnJlYWQoKQorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeKC4qKXNjcmF0Y2gub2JqKC4qKSQiLCBic3BfdGd0KQorICAgICAgICAgICAgaWYgbm90IG0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbF06IEFuIGF1dG8gZ2VuZXJhdGVkIEJTUCBkZXNjcmlwdGlvbiB3YXMgdXNlZCwgdGhpcyBub3JtYWxseSBpbmRpY2F0ZXMgYSBtaXNjb25maWd1cmF0aW9uLlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNoZWNrIHRoYXQgeW91ciBtYWNoaW5lICglcykgaGFzIGFuIGFzc29jaWF0ZWQga2VybmVsIGRlc2NyaXB0aW9uLiIgJSAiJHtNQUNISU5FfSIgKQorfQorCisjIEVuc3VyZSB0aGF0IHRoZSBicmFuY2hlcyAoQlNQIGFuZCBtZXRhKSBhcmUgb24gdGhlIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKKyMgdGhlaXIgU1JDUkVWIHZhbHVlcy4gSWYgdGhleSBhcmUgTk9UIG9uIHRoZSByaWdodCBjb21taXRzLCB0aGUgYnJhbmNoZXMKKyMgYXJlIGNvcnJlY3RlZCB0byB0aGUgcHJvcGVyIGNvbW1pdC4KK2RvX3ZhbGlkYXRlX2JyYW5jaGVzKCkgeworCXNldCArZQorCWNkICR7U30KKworCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKwltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZfbWFjaGluZX0iCisKKwkjIGlmIFNSQ1JFViBpcyBBVVRPUkVWIGl0IHNob3dzIHVwIGFzIEFVVE9JTkMgdGhlcmUncyBub3RoaW5nIHRvCisJIyBjaGVjayBhbmQgd2UgY2FuIGV4aXQgZWFybHkKKwlpZiBbICIke21hY2hpbmVfc3JjcmV2fSIgPSAiQVVUT0lOQyIgXTsgdGhlbgorCQliYm5vdGUgIlNSQ1JFViB2YWxpZGF0aW9uIGlzIG5vdCByZXF1aXJlZCBmb3IgQVVUT1JFViIKKwllbGlmIFsgIiR7bWFjaGluZV9zcmNyZXZ9IiA9ICIiIF07IHRoZW4KKwkJaWYgWyAiJHtTUkNSRVZ9IiAhPSAiQVVUT0lOQyIgXSAmJiBbICIke1NSQ1JFVn0iICE9ICJJTlZBTElEIiBdOyB0aGVuCisJCSAgICAgICAjIFNSQ1JFVl9tYWNoaW5lXzxNQUNISU5FPiB3YXMgbm90IHNldC4gVGhpcyBtZWFucyB0aGF0IGEgY3VzdG9tIHJlY2lwZQorCQkgICAgICAgIyB0aGF0IGRvZXNuJ3QgdXNlIHRoZSBTUkNSRVZfRk9STUFUICJtYWNoaW5lX21ldGEiIGlzIGJlaW5nIGJ1aWx0LiBJbgorCQkgICAgICAgIyB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcmVzZXQgdG8gdGhlIGdpdmUgU1JDUkVWIGJlZm9yZSBoZWFkaW5nIHRvIHBhdGNoaW5nCisJCSAgICAgICBiYm5vdGUgImN1c3RvbSByZWNpcGUgaXMgYmVpbmcgYnVpbHQsIGZvcmNpbmcgU1JDUkVWIHRvICR7U1JDUkVWfSIKKwkJICAgICAgIGZvcmNlX3NyY3Jldj0iJHtTUkNSRVZ9IgorCQlmaQorCWVsc2UKKwkJZ2l0IGNhdC1maWxlIC10ICR7bWFjaGluZV9zcmNyZXZ9ID4gL2Rldi9udWxsCisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJYmJlcnJvciAiJHttYWNoaW5lX3NyY3Jldn0gaXMgbm90IGEgdmFsaWQgY29tbWl0IElELiIKKwkJCWJiZmF0YWxfbG9nICJUaGUga2VybmVsIHNvdXJjZSB0cmVlIG1heSBiZSBvdXQgb2Ygc3luYyIKKwkJZmkKKwkJZm9yY2Vfc3JjcmV2PSR7bWFjaGluZV9zcmNyZXZ9CisJZmkKKworCWdpdCBjaGVja291dCAtcSAtZiAke21hY2hpbmVfYnJhbmNofQorCWlmIFsgLW4gIiR7Zm9yY2Vfc3JjcmV2fSIgXTsgdGhlbgorCQkjIHNlZSBpZiB0aGUgYnJhbmNoIHdlIGFyZSBhYm91dCB0byBwYXRjaCBoYXMgYmVlbiBwcm9wZXJseSByZXNldCB0byB0aGUgZGVmaW5lZAorCQkjIFNSQ1JFViAuLiBpZiBub3QsIHdlIHJlc2V0IGl0LgorCQlicmFuY2hfaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEYAorCQlpZiBbICIke2ZvcmNlX3NyY3Jldn0iICE9ICIke2JyYW5jaF9oZWFkfSIgXTsgdGhlbgorCQkJY3VycmVudF9icmFuY2g9YGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQURgCisJCQlnaXQgYnJhbmNoICIkY3VycmVudF9icmFuY2gtb3JpZyIKKwkJCWdpdCByZXNldCAtLWhhcmQgJHtmb3JjZV9zcmNyZXZ9CisJCWZpCisJZmkKK30KKworIyBNYW55IHNjcmlwdHMgd2FudCB0byBsb29rIGluIGFyY2gvJGFyY2gvYm9vdCBmb3IgdGhlIGJvb3RhYmxlCisjIGltYWdlLiBUaGlzIHBvc2VzIGEgcHJvYmxlbSBmb3Igdm1saW51eCBiYXNlZCBib290aW5nLiBUaGlzIAorIyB0YXNrIGFycmFuZ2VzIHRvIGhhdmUgdm1saW51eCBhcHBlYXIgaW4gdGhlIG5vcm1hbGl6ZWQgZGlyZWN0b3J5CisjIGxvY2F0aW9uLgorZG9fa2VybmVsX2xpbmtfdm1saW51eCgpIHsKKwlpZiBbICEgLWQgIiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QiIF07IHRoZW4KKwkJbWtkaXIgJHtCfS9hcmNoLyR7QVJDSH0vYm9vdAorCWZpCisJY2QgJHtCfS9hcmNoLyR7QVJDSH0vYm9vdAorCWxuIC1zZiAuLi8uLi8uLi92bWxpbnV4Cit9CisKK09FX1RFUk1JTkFMX0VYUE9SVFMgKz0gIktCVUlMRF9PVVRQVVQiCitLQlVJTERfT1VUUFVUID0gIiR7Qn0iCisKK3B5dGhvbiAoKSB7CisgICAgIyBJZiBkaWZmY29uZmlnIGlzIGF2YWlsYWJsZSwgZW5zdXJlIGl0IHJ1bnMgYWZ0ZXIga2VybmVsX2NvbmZpZ21lCisgICAgaWYgJ2RvX2RpZmZjb25maWcnIGluIGQ6CisgICAgICAgIGJiLmJ1aWxkLmFkZHRhc2soJ2RvX2RpZmZjb25maWcnLCBOb25lLCAnZG9fa2VybmVsX2NvbmZpZ21lJywgZCkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJkZmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzCkBAIC0wLDAgKzEsNDkwIEBACitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlIGtlcm5lbC1tb2R1bGUtc3BsaXQKKworUFJPVklERVMgKz0gInZpcnR1YWwva2VybmVsIgorREVQRU5EUyArPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIGttb2QtbmF0aXZlIGRlcG1vZHdyYXBwZXItY3Jvc3MgYmMtbmF0aXZlIgorCitTID0gIiR7U1RBR0lOR19LRVJORUxfRElSfSIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKK0tCVUlMRF9PVVRQVVQgPSAiJHtCfSIKK09FX1RFUk1JTkFMX0VYUE9SVFMgKz0gIktCVUlMRF9PVVRQVVQiCisKKyMgd2UgaW5jbHVkZSBnY2MgYWJvdmUsIHdlIGRvbnQgbmVlZCB2aXJ0dWFsL2xpYmMKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK0tFUk5FTF9JTUFHRVRZUEUgPz0gInpJbWFnZSIKK0lOSVRSQU1GU19JTUFHRSA/PSAiIgorSU5JVFJBTUZTX1RBU0sgPz0gIiIKK0lOSVRSQU1GU19JTUFHRV9CVU5ETEUgPz0gIiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIGtlcm5lbHR5cGUgPSBkLmdldFZhcignS0VSTkVMX0lNQUdFVFlQRScsIFRydWUpCisKKyAgICBkLnNldFZhcigiS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSIsIHJlLnN1YihyJ1wuZ3okJywgJycsIGtlcm5lbHR5cGUpKQorCisgICAgaW1hZ2UgPSBkLmdldFZhcignSU5JVFJBTUZTX0lNQUdFJywgVHJ1ZSkKKyAgICBpZiBpbWFnZToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idW5kbGVfaW5pdHJhbWZzJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX0lNQUdFfTpkb19yb290ZnMnKQorCisgICAgIyBOT1RFOiBzZXR0aW5nIElOSVRSQU1GU19UQVNLIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgIyAgICAgICBUaGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBzZXQgSU5JVFJBTUZTX0lNQUdFLCBiZWNhdXNlCisgICAgIyAgICAgICB0aGlzIElOSVRSQU1GU19UQVNLIGhhcyBjaXJjdWxhciBkZXBlbmRlbmN5IHByb2JsZW1zCisgICAgIyAgICAgICBpZiB0aGUgaW5pdHJhbWZzIHJlcXVpcmVzIGtlcm5lbCBtb2R1bGVzCisgICAgaW1hZ2VfdGFzayA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfVEFTSycsIFRydWUpCisgICAgaWYgaW1hZ2VfdGFzazoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwZW5kcycsICcgJHtJTklUUkFNRlNfVEFTS30nKQorfQorCisjIEhlcmUgd2UgcHVsbCBpbiBhbGwgdmFyaW91cyBrZXJuZWwgaW1hZ2UgdHlwZXMgd2hpY2ggd2Ugc3VwcG9ydC4KKyMKKyMgSW4gY2FzZSB5b3UncmUgd29uZGVyaW5nIHdoeSBrZXJuZWwuYmJjbGFzcyBpbmhlcml0cyB0aGUgb3RoZXIgaW1hZ2UKKyMgdHlwZXMgaW5zdGVhZCBvZiB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgdGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0bworIyBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggdmFyaW91cyBjdXJyZW50bHkgZXhpc3RpbmcgbWV0YS1sYXllcnMuCisjIEJ5IHB1bGxpbmcgaW4gdGhlIHZhcmlvdXMga2VybmVsIGltYWdlIHR5cGVzIGhlcmUsIHdlIHJldGFpbiB0aGUKKyMgb3JpZ2luYWwgYmVoYXZpb3Igb2Yga2VybmVsLmJiY2xhc3MsIHNvIG5vIG1ldGEtbGF5ZXJzIHNob3VsZCBnZXQKKyMgYnJva2VuLgorIworIyBLRVJORUxfQ0xBU1NFUyBieSBkZWZhdWx0IHB1bGxzIGluIGtlcm5lbC11aW1hZ2UuYmJjbGFzcywgc2luY2UgdGhpcworIyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gb25seSB1SW1hZ2Ugd2FzIHN1cHBvcnRlZC4gVGhpcworIyB2YXJpYWJsZSBjYW4gYmUgYXBwZW5kZWQgYnkgdXNlcnMgd2hvIGltcGxlbWVudCBzdXBwb3J0IGZvciBuZXcga2VybmVsCisjIGltYWdlIHR5cGVzLgorCitLRVJORUxfQ0xBU1NFUyA/PSAiIGtlcm5lbC11aW1hZ2UgIgoraW5oZXJpdCAke0tFUk5FTF9DTEFTU0VTfQorCisjIE9sZCBzdHlsZSBrZXJuZWxzIG1heSBzZXQgJHtTfSA9ICR7V09SS0RJUn0vZ2l0IGZvciBleGFtcGxlCisjIFdlIG5lZWQgdG8gbW92ZSB0aGVzZSBvdmVyIHRvIFNUQUdJTkdfS0VSTkVMX0RJUi4gV2UgY2FuJ3QganVzdAorIyBjcmVhdGUgdGhlIHN5bWxpbmsgaW4gYWR2YW5jZSBhcyB0aGUgZ2l0IGZldGNoZXIgY2FuJ3QgY29wZSB3aXRoCisjIHRoZSBzeW1saW5rLgorZG9fdW5wYWNrW2NsZWFuZGlyc10gKz0gIiAke1N9ICR7U1RBR0lOR19LRVJORUxfRElSfSAke0J9ICR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorZG9fY2xlYW5bY2xlYW5kaXJzXSArPSAiICR7U30gJHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICR7Qn0gJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0iCitiYXNlX2RvX3VucGFja19hcHBlbmQgKCkgeworICAgIHMgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgaWYgc1stMV0gPT0gJy8nOgorICAgICAgICAjIGRyb3AgdHJhaWxpbmcgc2xhc2gsIHNvIHRoYXQgb3Muc3ltbGluayhrZXJuc3JjLCBzKSBkb2Vzbid0IHVzZSBzIGFzIGRpcmVjdG9yeSBuYW1lIGFuZCBmYWlsCisgICAgICAgIHM9c1s6LTFdCisgICAga2VybnNyYyA9IGQuZ2V0VmFyKCJTVEFHSU5HX0tFUk5FTF9ESVIiLCBUcnVlKQorICAgIGlmIHMgIT0ga2VybnNyYzoKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGtlcm5zcmMpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShrZXJuc3JjLCByZWN1cnNlPVRydWUpCisgICAgICAgIGlmIGQuZ2V0VmFyKCJFWFRFUk5BTFNSQyIsIFRydWUpOgorICAgICAgICAgICAgIyBXaXRoIEVYVEVSTkFMU1JDIFMgd2lsbCBub3QgYmUgd2lwZWQgc28gd2UgY2FuIHN5bWxpbmsgdG8gaXQKKyAgICAgICAgICAgIG9zLnN5bWxpbmsocywga2VybnNyYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKHMsIGtlcm5zcmMpCisgICAgICAgICAgICBvcy5zeW1saW5rKGtlcm5zcmMsIHMpCit9CisKK2luaGVyaXQga2VybmVsLWFyY2ggZGVwbG95CisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtbW9kdWxlLS4qIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1pbWFnZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtZmlybXdhcmUtLioiCisKK2V4cG9ydCBPUyA9ICIke1RBUkdFVF9PU30iCitleHBvcnQgQ1JPU1NfQ09NUElMRSA9ICIke1RBUkdFVF9QUkVGSVh9IgorCitLRVJORUxfUFJJT1JJVFkgPz0gIiR7QGludChkLmdldFZhcignUFYnLDEpLnNwbGl0KCctJylbMF0uc3BsaXQoJysnKVswXS5zcGxpdCgnLicpWzBdKSAqIDEwMDAwICsgXAorICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVsxXSkgKiAxMDAgKyBcCisgICAgICAgICAgICAgICAgICAgICAgIGludChkLmdldFZhcignUFYnLDEpLnNwbGl0KCctJylbMF0uc3BsaXQoJysnKVswXS5zcGxpdCgnLicpWy0xXSl9IgorCitLRVJORUxfUkVMRUFTRSA/PSAiJHtLRVJORUxfVkVSU0lPTn0iCisKKyMgV2hlcmUgYnVpbHQga2VybmVsIGxpZXMgaW4gdGhlIGtlcm5lbCB0cmVlCitLRVJORUxfT1VUUFVUID89ICJhcmNoLyR7QVJDSH0vYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9IgorS0VSTkVMX0lNQUdFREVTVCA9ICJib290IgorCisjCisjIGNvbmZpZ3VyYXRpb24KKyMKK2V4cG9ydCBDTURMSU5FX0NPTlNPTEUgPSAiY29uc29sZT0ke0BkLmdldFZhcigiS0VSTkVMX0NPTlNPTEUiLDEpIG9yICJ0dHlTMCJ9IgorCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKCcke0J9Jyl9IgorCitLRVJORUxfTE9DQUxWRVJTSU9OID89ICIiCisKKyMga2VybmVscyBhcmUgZ2VuZXJhbGx5IG1hY2hpbmUgc3BlY2lmaWMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgVS1Cb290IHN1cHBvcnQKK1VCT09UX0VOVFJZUE9JTlQgPz0gIjIwMDA4MDAwIgorVUJPT1RfTE9BREFERFJFU1MgPz0gIiR7VUJPT1RfRU5UUllQT0lOVH0iCisKKyMgU29tZSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbnMgbmVlZCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb24gdGhlIGNvbW1hbmQgbGluZQorS0VSTkVMX0VYVFJBX0FSR1MgPz0gIiIKKworIyBGb3IgdGhlIGtlcm5lbCwgd2UgZG9uJ3Qgd2FudCB0aGUgJy1lIE1BS0VGTEFHUz0nIGluIEVYVFJBX09FTUFLRS4KKyMgV2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSBrZXJuZWwgTWFrZWZpbGUgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50CitFWFRSQV9PRU1BS0UgPSAiIgorCitLRVJORUxfQUxUX0lNQUdFVFlQRSA/Pz0gIiIKKworIyBEZWZpbmUgd2hlcmUgdGhlIGtlcm5lbCBoZWFkZXJzIGFyZSBpbnN0YWxsZWQgb24gdGhlIHRhcmdldCBhcyB3ZWxsIGFzIHdoZXJlCisjIHRoZXkgYXJlIHN0YWdlZC4KK0tFUk5FTF9TUkNfUEFUSCA9ICIvdXNyL3NyYy9rZXJuZWwiCisKK2NvcHlfaW5pdHJhbWZzKCkgeworCWVjaG8gIkNvcHlpbmcgaW5pdHJhbWZzIGludG8gLi91c3IgLi4uIgorCSMgSW4gY2FzZSB0aGUgZGlyZWN0b3J5IGlzIG5vdCBjcmVhdGVkIHlldCBmcm9tIHRoZSBmaXJzdCBwYXNzIGNvbXBpbGU6CisJbWtkaXIgLXAgJHtCfS91c3IKKwkjIEZpbmQgYW5kIHVzZSB0aGUgZmlyc3QgaW5pdHJhbWZzIGltYWdlIGFyY2hpdmUgdHlwZSB3ZSBmaW5kCisJcm0gLWYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uY3BpbworCWZvciBpbWcgaW4gY3Bpby5neiBjcGlvLmx6NCBjcGlvLmx6byBjcGlvLmx6bWEgY3Bpby54ejsgZG8KKwkJaWYgWyAtZSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nIiBdOyB0aGVuCisJCQljcCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcgJHtCfS91c3IvLgorCQkJY2FzZSAkaW1nIGluCisJCQkqZ3opCisJCQkJZWNobyAiZ3ppcCBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWd1bnppcCAtZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6NCkKKwkJCQllY2hvICJsejQgZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlsejQgLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqbHpvKQorCQkJCWVjaG8gImx6byBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWx6b3AgLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqbHptYSkKKwkJCQllY2hvICJsem1hIGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJbHptYSAtZGYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCSp4eikKKwkJCQllY2hvICJ4eiBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCXh6IC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJZXNhYworCQlmaQorCWRvbmUKKwllY2hvICJGaW5pc2hlZCBjb3B5IG9mIGluaXRyYW1mcyBpbnRvIC4vdXNyIgorfQorCitJTklUUkFNRlNfQkFTRV9OQU1FID0gIiR7S0VSTkVMX0lNQUdFVFlQRX0taW5pdHJhbWZzLSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCitJTklUUkFNRlNfQkFTRV9OQU1FW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKK2RvX2J1bmRsZV9pbml0cmFtZnMgKCkgeworCWlmIFsgISAteiAiJHtJTklUUkFNRlNfSU1BR0V9IiAtYSB4IiR7SU5JVFJBTUZTX0lNQUdFX0JVTkRMRX0iID0geDEgXTsgdGhlbgorCQllY2hvICJDcmVhdGluZyBhIGtlcm5lbCBpbWFnZSB3aXRoIGEgYnVuZGxlZCBpbml0cmFtZnMuLi4iCisJCWNvcHlfaW5pdHJhbWZzCisJCWlmIFsgLWUgJHtLRVJORUxfT1VUUFVUfSBdIDsgdGhlbgorCQkJbXYgLWYgJHtLRVJORUxfT1VUUFVUfSAke0tFUk5FTF9PVVRQVVR9LmJhaworCQlmaQorCQl1c2VfYWx0ZXJuYXRlX2luaXRyZD1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0ke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS5jcGlvCisJCWtlcm5lbF9kb19jb21waWxlCisJCW12IC1mICR7S0VSTkVMX09VVFBVVH0gJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMKKwkJbXYgLWYgJHtLRVJORUxfT1VUUFVUfS5iYWsgJHtLRVJORUxfT1VUUFVUfQorCQkjIFVwZGF0ZSBpbnN0YWxsIGFyZWEKKwkJZWNobyAiVGhlcmUgaXMga2VybmVsIGltYWdlIGJ1bmRsZWQgd2l0aCBpbml0cmFtZnM6ICR7Qn0vJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMiCisJCWluc3RhbGwgLW0gMDY0NCAke0J9LyR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzICR7RH0vYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9LWluaXRyYW1mcy0ke01BQ0hJTkV9LmJpbgorCQllY2hvICIke0J9LyR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIgorCWZpCit9CisKK3B5dGhvbiBkb19kZXZzaGVsbF9wcmVwZW5kICgpIHsKKyAgICBvcy5lbnZpcm9uWyJMREZMQUdTIl0gPSAnJworfQorCithZGR0YXNrIGJ1bmRsZV9pbml0cmFtZnMgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fZGVwbG95CisKK2tlcm5lbF9kb19jb21waWxlKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTIE1BQ0hJTkUKKwkjIFRoZSAkdXNlX2FsdGVybmF0ZV9pbml0cmQgaXMgb25seSBzZXQgZnJvbQorCSMgZG9fYnVuZGxlX2luaXRyYW1mcygpIFRoaXMgdmFyaWFibGUgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUKKwkjIGNhc2Ugd2hlcmUgd2UgYXJlIG1ha2luZyBhIHNlY29uZCBwYXNzIGF0IHRoZSBrZXJuZWwKKwkjIGNvbXBpbGF0aW9uIGFuZCB3ZSB3YW50IHRvIGZvcmNlIHRoZSBrZXJuZWwgYnVpbGQgdG8gdXNlIGEKKwkjIGRpZmZlcmVudCBpbml0cmFtZnMgaW1hZ2UuICBUaGUgd2F5IHRvIGRvIHRoYXQgaW4gdGhlIGtlcm5lbAorCSMgaXMgdG8gc3BlY2lmeToKKwkjIG1ha2UgLi4uYXJncy4uLiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT1zb21lX290aGVyX2luaXRyYW1mcy5jcGlvCisJaWYgWyAiJHVzZV9hbHRlcm5hdGVfaW5pdHJkIiA9ICIiIF0gJiYgWyAiJHtJTklUUkFNRlNfVEFTS30iICE9ICIiIF0gOyB0aGVuCisJCSMgVGhlIG9sZCBzdHlsZSB3YXkgb2YgY29weWluZyBhbiBwcmVidWlsdCBpbWFnZSBhbmQgYnVpbGRpbmcgaXQKKwkJIyBpcyB0dXJuZWQgb24gdmlhIElOVElSQU1GU19UQVNLICE9ICIiCisJCWNvcHlfaW5pdHJhbWZzCisJCXVzZV9hbHRlcm5hdGVfaW5pdHJkPUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8KKwlmaQorCW9lX3J1bm1ha2UgJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfSAke0tFUk5FTF9BTFRfSU1BR0VUWVBFfSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfSAkdXNlX2FsdGVybmF0ZV9pbml0cmQKKwlpZiB0ZXN0ICIke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9Lmd6IiA9ICIke0tFUk5FTF9JTUFHRVRZUEV9IjsgdGhlbgorCQlnemlwIC05YyA8ICIke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9IiA+ICIke0tFUk5FTF9PVVRQVVR9IgorCWZpCit9CisKK2RvX2NvbXBpbGVfa2VybmVsbW9kdWxlcygpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBNQUNISU5FCisJaWYgKGdyZXAgLXEgLWkgLWUgJ15DT05GSUdfTU9EVUxFUz15JCcgJHtCfS8uY29uZmlnKTsgdGhlbgorCQlvZV9ydW5tYWtlIC1DICR7Qn0gJHtQQVJBTExFTF9NQUtFfSBtb2R1bGVzIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iICR7S0VSTkVMX0VYVFJBX0FSR1N9CisJZWxzZQorCQliYm5vdGUgIm5vIG1vZHVsZXMgdG8gY29tcGlsZSIKKwlmaQorfQorYWRkdGFzayBjb21waWxlX2tlcm5lbG1vZHVsZXMgYWZ0ZXIgZG9fY29tcGlsZSBiZWZvcmUgZG9fc3RyaXAKKwora2VybmVsX2RvX2luc3RhbGwoKSB7CisJIworCSMgRmlyc3QgaW5zdGFsbCB0aGUgbW9kdWxlcworCSMKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBNQUNISU5FCisJaWYgKGdyZXAgLXEgLWkgLWUgJ15DT05GSUdfTU9EVUxFUz15JCcgLmNvbmZpZyk7IHRoZW4KKwkJb2VfcnVubWFrZSBERVBNT0Q9ZWNobyBJTlNUQUxMX01PRF9QQVRIPSIke0R9IiBtb2R1bGVzX2luc3RhbGwKKwkJcm0gIiR7RH0vbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vYnVpbGQiCisJCXJtICIke0R9L2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L3NvdXJjZSIKKwkJIyBJZiB0aGUga2VybmVsLyBkaXJlY3RvcnkgaXMgZW1wdHkgcmVtb3ZlIGl0IHRvIHByZXZlbnQgUUEgaXNzdWVzCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICIke0R9L2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L2tlcm5lbCIKKwllbHNlCisJCWJibm90ZSAibm8gbW9kdWxlcyB0byBpbnN0YWxsIgorCWZpCisKKwkjCisJIyBJbnN0YWxsIHZhcmlvdXMga2VybmVsIG91dHB1dCAoekltYWdlLCBtYXAgZmlsZSwgY29uZmlnLCBtb2R1bGUgc3VwcG9ydCBmaWxlcykKKwkjCisJaW5zdGFsbCAtZCAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0KKwlpbnN0YWxsIC1kICR7RH0vYm9vdAorCWluc3RhbGwgLW0gMDY0NCAke0tFUk5FTF9PVVRQVVR9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtbSAwNjQ0IFN5c3RlbS5tYXAgJHtEfS9ib290L1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KKwlpbnN0YWxsIC1tIDA2NDQgLmNvbmZpZyAke0R9L2Jvb3QvY29uZmlnLSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtbSAwNjQ0IHZtbGludXggJHtEfS9ib290L3ZtbGludXgtJHtLRVJORUxfVkVSU0lPTn0KKwlbIC1lIE1vZHVsZS5zeW12ZXJzIF0gJiYgaW5zdGFsbCAtbSAwNjQ0IE1vZHVsZS5zeW12ZXJzICR7RH0vYm9vdC9Nb2R1bGUuc3ltdmVycy0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQKK30KK2RvX2luc3RhbGxbcHJlZnVuY3NdICs9ICJwYWNrYWdlX2dldF9hdXRvX3ByIgorCithZGR0YXNrIHNoYXJlZF93b3JrZGlyIGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX2NvbXBpbGVfa2VybmVsbW9kdWxlcworYWRkdGFzayBzaGFyZWRfd29ya2Rpcl9zZXRzY2VuZQorCitkb19zaGFyZWRfd29ya2Rpcl9zZXRzY2VuZSAoKSB7CisJZXhpdCAxCit9CisKK2VtaXRfZGVwbW9kX3BrZ2RhdGEoKSB7CisJIyBTdGFzaCBkYXRhIGZvciBkZXBtb2QKKwlpbnN0YWxsIC1kICR7UEtHREVTVFdPUkt9L2tlcm5lbC1kZXBtb2QvCisJZWNobyAiJHtLRVJORUxfVkVSU0lPTn0iID4gJHtQS0dERVNUV09SS30va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbgorCWNwICR7Qn0vU3lzdGVtLm1hcCAke1BLR0RFU1RXT1JLfS9rZXJuZWwtZGVwbW9kL1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KK30KKworUEFDS0FHRUZVTkNTICs9ICJlbWl0X2RlcG1vZF9wa2dkYXRhIgorCitkb19zaGFyZWRfd29ya2RpciAoKSB7CisJY2QgJHtCfQorCisJa2VybmVsZGlyPSR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9CisJaW5zdGFsbCAtZCAka2VybmVsZGlyCisKKwkjCisJIyBTdG9yZSB0aGUga2VybmVsIHZlcnNpb24gaW4gc3lzcm9vdHMgZm9yIG1vZHVsZS1iYXNlLmJiY2xhc3MKKwkjCisKKwllY2hvICIke0tFUk5FTF9WRVJTSU9OfSIgPiAka2VybmVsZGlyL2tlcm5lbC1hYml2ZXJzaW9uCisKKwkjIENvcHkgZmlsZXMgcmVxdWlyZWQgZm9yIG1vZHVsZSBidWlsZHMKKwljcCBTeXN0ZW0ubWFwICRrZXJuZWxkaXIvU3lzdGVtLm1hcC0ke0tFUk5FTF9WRVJTSU9OfQorCWNwIE1vZHVsZS5zeW12ZXJzICRrZXJuZWxkaXIvCisJY3AgLmNvbmZpZyAka2VybmVsZGlyLworCW1rZGlyIC1wICRrZXJuZWxkaXIvaW5jbHVkZS9jb25maWcKKwljcCBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSAka2VybmVsZGlyL2luY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlCisKKwkjIFdlIGNhbiBhbHNvIGNvcHkgb3ZlciBhbGwgdGhlIGdlbmVyYXRlZCBmaWxlcyBhbmQgYXZvaWQgc3BlY2lhbCBjYXNlcworCSMgbGlrZSB2ZXJzaW9uLmgsIGJ1dCB3ZSd2ZSBvcHRlZCB0byBrZWVwIHRoaXMgc21hbGwgdW50aWwgZmlsZSBjcmVlcCBzdGFydHMKKwkjIHRvIGhhcHBlbgorCWlmIFsgLWUgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvbGludXgKKwkJY3AgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggJGtlcm5lbGRpci9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaAorCWZpCisKKwkjIEFzIG9mIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDMuMC4xLCB0aGUgY2xlYW4gdGFyZ2V0IHJlbW92ZXMKKwkjIGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gd2hpY2ggaXMgcHJlc2VudCBpbgorCSMgS0JVSUxEX0xERkxBR1NfTU9EVUxFLCBtYWtpbmcgaXQgcmVxdWlyZWQgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcy4KKwlpZiBbICR7QVJDSH0gPSAicG93ZXJwYyIgXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2FyY2gvcG93ZXJwYy9saWIvCisJCWNwIGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vCisJZmkKKworCWlmIFsgLWQgaW5jbHVkZS9nZW5lcmF0ZWQgXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvZ2VuZXJhdGVkLworCQljcCAtZlIgaW5jbHVkZS9nZW5lcmF0ZWQvKiAka2VybmVsZGlyL2luY2x1ZGUvZ2VuZXJhdGVkLworCWZpCisKKwlpZiBbIC1kIGFyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZCBdOyB0aGVuCisJCW1rZGlyIC1wICRrZXJuZWxkaXIvYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkLworCQljcCAtZlIgYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkLyogJGtlcm5lbGRpci9hcmNoLyR7QVJDSH0vaW5jbHVkZS9nZW5lcmF0ZWQvCisJZmkKK30KKworIyBXZSBkb24ndCBuZWVkIHRvIHN0YWdlIGFueXRoaW5nLCBub3QgdGhlIG1vZHVsZXMvZmlybXdhcmUgc2luY2UgdGhvc2Ugd291bGQgY2xhc2ggd2l0aCBsaW51eC1maXJtd2FyZQorc3lzcm9vdF9zdGFnZV9hbGwgKCkgeworCToKK30KKworS0VSTkVMX0NPTkZJR19DT01NQU5EID89ICJvZV9ydW5tYWtlX2NhbGwgLUMgJHtTfSBPPSR7Qn0gb2xkbm9jb25maWcgfHwgeWVzICcnIHwgb2VfcnVubWFrZSAtQyAke1N9IE89JHtCfSBvbGRjb25maWciCisKK2tlcm5lbF9kb19jb25maWd1cmUoKSB7CisJIyBmaXhlcyBleHRyYSArIGluIC9saWIvbW9kdWxlcy8yLjYuMzcrCisJIyAkIHNjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uIC4gPT4gKworCSMgJCBtYWtlIGtlcm5lbHZlcnNpb24gPT4gMi42LjM3CisJIyAkIG1ha2Uga2VybmVscmVsZWFzZSA9PiAyLjYuMzcrCisJdG91Y2ggJHtCfS8uc2NtdmVyc2lvbiAke1N9Ly5zY212ZXJzaW9uCisKKwlpZiBbICIke1N9IiAhPSAiJHtCfSIgXSAmJiBbIC1mICIke1N9Ly5jb25maWciIF0gJiYgWyAhIC1mICIke0J9Ly5jb25maWciIF07IHRoZW4KKwkJbXYgIiR7U30vLmNvbmZpZyIgIiR7Qn0vLmNvbmZpZyIKKwlmaQorCisJIyBDb3B5IGRlZmNvbmZpZyB0byAuY29uZmlnIGlmIC5jb25maWcgZG9lcyBub3QgZXhpc3QuIFRoaXMgYWxsb3dzCisJIyByZWNpcGVzIHRvIG1hbmFnZSB0aGUgLmNvbmZpZyB0aGVtc2VsdmVzIGluIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkuCisJaWYgWyAtZiAiJHtXT1JLRElSfS9kZWZjb25maWciIF0gJiYgWyAhIC1mICIke0J9Ly5jb25maWciIF07IHRoZW4KKwkJY3AgIiR7V09SS0RJUn0vZGVmY29uZmlnIiAiJHtCfS8uY29uZmlnIgorCWZpCisJZXZhbCAke0tFUk5FTF9DT05GSUdfQ09NTUFORH0KK30KKworZG9fc2F2ZWRlZmNvbmZpZygpIHsKKwlvZV9ydW5tYWtlIC1DICR7Qn0gc2F2ZWRlZmNvbmZpZworfQorZG9fc2F2ZWRlZmNvbmZpZ1tub3N0YW1wXSA9ICIxIgorYWRkdGFzayBzYXZlZGVmY29uZmlnIGFmdGVyIGRvX2NvbmZpZ3VyZQorCitpbmhlcml0IGNtbDEKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwgZG9fY29uZmlndXJlCisKKyMga2VybmVsLWJhc2UgYmVjb21lcyBrZXJuZWwtJHtLRVJORUxfVkVSU0lPTn0KKyMga2VybmVsLWltYWdlIGJlY29tZXMga2VybmVsLWltYWdlLSR7S0VSTkVMX1ZFUklTT059CitQQUNLQUdFUyA9ICJrZXJuZWwga2VybmVsLWJhc2Uga2VybmVsLXZtbGludXgga2VybmVsLWltYWdlIGtlcm5lbC1kZXYga2VybmVsLW1vZHVsZXMiCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19rZXJuZWwtYmFzZSA9ICIvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vbW9kdWxlcy5vcmRlciAvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vbW9kdWxlcy5idWlsdGluIgorRklMRVNfa2VybmVsLWltYWdlID0gIi9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0qIgorRklMRVNfa2VybmVsLWRldiA9ICIvYm9vdC9TeXN0ZW0ubWFwKiAvYm9vdC9Nb2R1bGUuc3ltdmVycyogL2Jvb3QvY29uZmlnKiAke0tFUk5FTF9TUkNfUEFUSH0gL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L2J1aWxkIgorRklMRVNfa2VybmVsLXZtbGludXggPSAiL2Jvb3Qvdm1saW51eCoiCitGSUxFU19rZXJuZWwtbW9kdWxlcyA9ICIiCitSREVQRU5EU19rZXJuZWwgPSAia2VybmVsLWJhc2UiCisjIEFsbG93IG1hY2hpbmVzIHRvIG92ZXJyaWRlIHRoaXMgZGVwZW5kZW5jeSBpZiBrZXJuZWwgaW1hZ2UgZmlsZXMgYXJlIAorIyBub3Qgd2FudGVkIGluIGltYWdlcyBhcyBzdGFuZGFyZAorUkRFUEVORFNfa2VybmVsLWJhc2UgPz0gImtlcm5lbC1pbWFnZSIKK1BLR19rZXJuZWwtaW1hZ2UgPSAia2VybmVsLWltYWdlLSR7QGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCcke0tFUk5FTF9WRVJTSU9OfScpfSIKK1JERVBFTkRTX2tlcm5lbC1pbWFnZSArPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnS0VSTkVMX0lNQUdFVFlQRScsICd2bWxpbnV4JywgJ2tlcm5lbC12bWxpbnV4JywgJycsIGQpfSIKK1BLR19rZXJuZWwtYmFzZSA9ICJrZXJuZWwtJHtAbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyR7S0VSTkVMX1ZFUlNJT059Jyl9IgorUlBST1ZJREVTX2tlcm5lbC1iYXNlICs9ICJrZXJuZWwtJHtLRVJORUxfVkVSU0lPTn0iCitBTExPV19FTVBUWV9rZXJuZWwgPSAiMSIKK0FMTE9XX0VNUFRZX2tlcm5lbC1iYXNlID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtaW1hZ2UgPSAiMSIKK0FMTE9XX0VNUFRZX2tlcm5lbC1tb2R1bGVzID0gIjEiCitERVNDUklQVElPTl9rZXJuZWwtbW9kdWxlcyA9ICJLZXJuZWwgbW9kdWxlcyBtZXRhIHBhY2thZ2UiCisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtYmFzZSAoKSB7CisJaWYgWyAhIC1lICIkRC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfSIgXTsgdGhlbgorCQlta2RpciAtcCAkRC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfQorCWZpCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJZGVwbW9kd3JhcHBlciAtYSAtYiAkRCAke0tFUk5FTF9WRVJTSU9OfQorCWVsc2UKKwkJZGVwbW9kIC1hICR7S0VSTkVMX1ZFUlNJT059CisJZmkKK30KKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1pbWFnZSAoKSB7CisJdXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgLyR7S0VSTkVMX0lNQUdFREVTVH0vJHtLRVJORUxfSU1BR0VUWVBFfSAke0tFUk5FTF9JTUFHRVRZUEV9IC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gJHtLRVJORUxfUFJJT1JJVFl9IHx8IHRydWUKK30KKworcGtnX3Bvc3RybV9rZXJuZWwtaW1hZ2UgKCkgeworCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgJHtLRVJORUxfSU1BR0VUWVBFfSAke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IHx8IHRydWUKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJzcGxpdF9rZXJuZWxfcGFja2FnZXMgIgorCitweXRob24gc3BsaXRfa2VybmVsX3BhY2thZ2VzICgpIHsKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290PScvbGliL2Zpcm13YXJlJywgZmlsZV9yZWdleD0nXiguKilcLihiaW58Znd8Y2lzfGRzcCkkJywgb3V0cHV0X3BhdHRlcm49J2tlcm5lbC1maXJtd2FyZS0lcycsIGRlc2NyaXB0aW9uPSdGaXJtd2FyZSBmb3IgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgZXh0cmFfZGVwZW5kcz0nJykKK30KKworZG9fc3RyaXAoKSB7CisJaWYgWyAtbiAiJHtLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlN9IiBdOyB0aGVuCisJCWlmIFsgIiR7S0VSTkVMX0lNQUdFVFlQRX0iICE9ICJ2bWxpbnV4IiBdOyB0aGVuCisJCQliYndhcm4gImltYWdlIHR5cGUgd2lsbCBub3QgYmUgc3RyaXBwZWQgKG5vdCBzdXBwb3J0ZWQpOiAke0tFUk5FTF9JTUFHRVRZUEV9IgorCQkJcmV0dXJuCisJCWZpCisKKwkJY2QgJHtCfQorCQloZWFkZXJzPWAiJENST1NTX0NPTVBJTEUicmVhZGVsZiAtUyAke0tFUk5FTF9PVVRQVVR9IHwgXAorCQkJICBncmVwICJeIFx7MSxcfVxbWzAtOSBdXHsxLFx9XF0gW14gXSIgfCBcCisJCQkgIHNlZCAicy9eIFx7MSxcfVxbWzAtOSBdXHsxLFx9XF0gLy8iIHwgXAorCQkJICBnYXdrICd7cHJpbnQgJDF9J2AKKworCQlmb3Igc3RyIGluICR7S0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TfTsgZG8geworCQkJaWYgWyAiJGhlYWRlcnMiICE9ICoiJHN0ciIqIF07IHRoZW4KKwkJCQliYndhcm4gIlNlY3Rpb24gbm90IGZvdW5kOiAkc3RyIjsKKwkJCWZpCisKKwkJCSIkQ1JPU1NfQ09NUElMRSJzdHJpcCAtcyAtUiAkc3RyICR7S0VSTkVMX09VVFBVVH0KKwkJfTsgZG9uZQorCisJCWJibm90ZSAiS0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TIGlzIHNldCwgc3RyaXBwaW5nIHNlY3Rpb25zOiIgXAorCQkJIiR7S0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TfSIKKwlmaTsKK30KK2RvX3N0cmlwW2RpcnNdID0gIiR7Qn0iCisKK2FkZHRhc2sgZG9fc3RyaXAgYmVmb3JlIGRvX3NpemVjaGVjayBhZnRlciBkb19rZXJuZWxfbGlua192bWxpbnV4CisKKyMgU3VwcG9ydCBjaGVja2luZyB0aGUga2VybmVsIHNpemUgc2luY2Ugc29tZSBrZXJuZWxzIG5lZWQgdG8gcmVzaWRlIGluIHBhcnRpdGlvbnMKKyMgd2l0aCBhIGZpeGVkIGxlbmd0aCBvciB0aGVyZSBpcyBhIGxpbWl0IGluIHRyYW5zZmVycmluZyB0aGUga2VybmVsIHRvIG1lbW9yeQorZG9fc2l6ZWNoZWNrKCkgeworCWlmIFsgISAteiAiJHtLRVJORUxfSU1BR0VfTUFYU0laRX0iIF07IHRoZW4KKwkJaW52YWxpZD1gZWNobyAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSB8IHNlZCAncy9bMC05XS8vZydgCisJCWlmIFsgLW4gIiRpbnZhbGlkIiBdOyB0aGVuCisJCQlkaWUgIkludmFsaWQgS0VSTkVMX0lNQUdFX01BWFNJWkU6ICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9LCBzaG91bGQgYmUgYW4gaW50ZWdlcnggKFRoZSB1bml0IGlzIEtieXRlcykiCisJCWZpCisJCXNpemU9YGR1IC1rcyAke0J9LyR7S0VSTkVMX09VVFBVVH0gfCBhd2sgJ3sgcHJpbnQgJDF9J2AKKwkJaWYgWyAkc2l6ZSAtZ2UgJHtLRVJORUxfSU1BR0VfTUFYU0laRX0gXTsgdGhlbgorCQkJZGllICJUaGlzIGtlcm5lbCAoc2l6ZT0kc2l6ZShLKSA+ICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9KEspKSBpcyB0b28gYmlnIGZvciB5b3VyIGRldmljZS4gUGxlYXNlIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGJ5IG1ha2luZyBtb3JlIG9mIGl0IG1vZHVsYXIuIgorCQlmaQorCWZpCit9Citkb19zaXplY2hlY2tbZGlyc10gPSAiJHtCfSIKKworYWRkdGFzayBzaXplY2hlY2sgYmVmb3JlIGRvX2luc3RhbGwgYWZ0ZXIgZG9fc3RyaXAKKworS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke1BLR0V9LSR7UEtHVn0tJHtQS0dSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorIyBEb24ndCBpbmNsdWRlIHRoZSBEQVRFVElNRSB2YXJpYWJsZSBpbiB0aGUgc3N0YXRlIHBhY2thZ2Ugc2lnbmF0dXJlcworS0VSTkVMX0lNQUdFX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FID89ICIke0tFUk5FTF9JTUFHRVRZUEV9LSR7TUFDSElORX0iCitNT0RVTEVfSU1BR0VfQkFTRV9OQU1FID89ICJtb2R1bGVzLSR7UEtHRX0tJHtQS0dWfS0ke1BLR1J9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCitNT0RVTEVfSU1BR0VfQkFTRV9OQU1FW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKK01PRFVMRV9UQVJCQUxMX0JBU0VfTkFNRSA/PSAiJHtNT0RVTEVfSU1BR0VfQkFTRV9OQU1FfS50Z3oiCisjIERvbid0IGluY2x1ZGUgdGhlIERBVEVUSU1FIHZhcmlhYmxlIGluIHRoZSBzc3RhdGUgcGFja2FnZSBzaWduYXR1cmVzCitNT0RVTEVfVEFSQkFMTF9TWU1MSU5LX05BTUUgPz0gIm1vZHVsZXMtJHtNQUNISU5FfS50Z3oiCitNT0RVTEVfVEFSQkFMTF9ERVBMT1kgPz0gIjEiCisKK2tlcm5lbF9kb19kZXBsb3koKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7S0VSTkVMX09VVFBVVH0gJHtERVBMT1lESVJ9LyR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0uYmluCisJaWYgWyAke01PRFVMRV9UQVJCQUxMX0RFUExPWX0gPSAiMSIgXSAmJiAoZ3JlcCAtcSAtaSAtZSAnXkNPTkZJR19NT0RVTEVTPXkkJyAuY29uZmlnKTsgdGhlbgorCQlta2RpciAtcCAke0R9L2xpYgorCQl0YXIgLWN2emYgJHtERVBMT1lESVJ9LyR7TU9EVUxFX1RBUkJBTExfQkFTRV9OQU1FfSAtQyAke0R9IGxpYgorCQlsbiAtc2YgJHtNT0RVTEVfVEFSQkFMTF9CQVNFX05BTUV9ICR7REVQTE9ZRElSfS8ke01PRFVMRV9UQVJCQUxMX1NZTUxJTktfTkFNRX0KKwlmaQorCisJbG4gLXNmICR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0uYmluICR7REVQTE9ZRElSfS8ke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9LmJpbgorCWxuIC1zZiAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbiAke0RFUExPWURJUn0vJHtLRVJORUxfSU1BR0VUWVBFfQorCisJY3AgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9kZXBsb3lkaXJfcmVhZG1lLnR4dCAke0RFUExPWURJUn0vUkVBRE1FXy1fRE9fTk9UX0RFTEVURV9GSUxFU19JTl9USElTX0RJUkVDVE9SWS50eHQKKworCWNkICR7Qn0KKwkjIFVwZGF0ZSBkZXBsb3kgZGlyZWN0b3J5CisJaWYgWyAtZSAiJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMiIF07IHRoZW4KKwkJZWNobyAiQ29weWluZyBkZXBsb3kga2VybmVsLWluaXRyYW1mcyBpbWFnZSBhbmQgc2V0dGluZyB1cCBsaW5rcy4uLiIKKwkJaW5pdHJhbWZzX2Jhc2VfbmFtZT0ke0lOSVRSQU1GU19CQVNFX05BTUV9CisJCWluaXRyYW1mc19zeW1saW5rX25hbWU9JHtLRVJORUxfSU1BR0VUWVBFfS1pbml0cmFtZnMtJHtNQUNISU5FfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMgJHtERVBMT1lESVJ9LyR7aW5pdHJhbWZzX2Jhc2VfbmFtZX0uYmluCisJCWNkICR7REVQTE9ZRElSfQorCQlsbiAtc2YgJHtpbml0cmFtZnNfYmFzZV9uYW1lfS5iaW4gJHtpbml0cmFtZnNfc3ltbGlua19uYW1lfS5iaW4KKwlmaQorfQorZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IgorZG9fZGVwbG95W3ByZWZ1bmNzXSArPSAicGFja2FnZV9nZXRfYXV0b19wciIKKworYWRkdGFzayBkZXBsb3kgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2RlcGxveQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmZDQ2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWxzcmMuYmJjbGFzcwpAQCAtMCwwICsxLDEwIEBACitTID0gIiR7U1RBR0lOR19LRVJORUxfRElSfSIKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fcGF0Y2giCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0tFUk5FTF9WRVJTSU9OID0gIiR7QGdldF9rZXJuZWx2ZXJzaW9uX2ZpbGUoIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9Iil9IgorCitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9saWJfcGFja2FnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xpYl9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0OWY1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9saWJfcGFja2FnZS5iYmNsYXNzCkBAIC0wLDAgKzEsNyBAQAorIworIyAke1BOfS1iaW4gaXMgZGVmaW5lZCBpbiBiaXRiYWtlLmNvbmYKKyMKKyMgV2UgbmVlZCB0byBhbGxvdyB0aGUgb3RoZXIgcGFja2FnZXMgdG8gYmUgZ3JlZWR5IHdpdGggd2hhdCB0aGV5CisjIHdhbnQgb3V0IG9mIC91c3IvYmluIGFuZCAvdXNyL3NiaW4gYmVmb3JlICR7UE59LWJpbiBnZXRzIGdyZWVkeS4KKyMgCitQQUNLQUdFX0JFRk9SRV9QTiA9ICIke1BOfS1iaW4iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9saWJjLWNvbW1vbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzgwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcwpAQCAtMCwwICsxLDQzIEBACitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbF9yb290PSR7RH0gaW5zdGFsbAorCWZvciByIGluICR7cnBjc3ZjfTsgZG8KKwkJaD1gZWNobyAkcnxzZWQgLWUncyxcLngkLC5oLCdgCisJCWluc3RhbGwgLW0gMDY0NCAke1N9L3N1bnJwYy9ycGNzdmMvJGggJHtEfS8ke2luY2x1ZGVkaXJ9L3JwY3N2Yy8KKwlkb25lCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vIAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2V0Yy9sZC5zby5jb25mICR7RH0vJHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2FsZWRpcn0KKwltYWtlIC1mICR7V09SS0RJUn0vZ2VuZXJhdGUtc3VwcG9ydGVkLm1rIElOPSIke1N9L2xvY2FsZWRhdGEvU1VQUE9SVEVEIiBPVVQ9IiR7V09SS0RJUn0vU1VQUE9SVEVEIgorCSMgZ2V0IHJpZCBvZiBzb21lIGJyb2tlbiBmaWxlcy4uLgorCWZvciBpIGluICR7R0xJQkNfQlJPS0VOX0xPQ0FMRVN9OyBkbworCQlncmVwIC12ICRpICR7V09SS0RJUn0vU1VQUE9SVEVEID4gJHtXT1JLRElSfS9TVVBQT1JURUQudG1wCisJCW12ICR7V09SS0RJUn0vU1VQUE9SVEVELnRtcCAke1dPUktESVJ9L1NVUFBPUlRFRAorCWRvbmUKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9ycGMKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKwlybSAtcmYgJHtEfSR7bGliZXhlY2Rpcn0vZ2V0Y29uZgorfQorCitkZWYgZ2V0X2xpYmNfZnB1X3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcsICdwcGMtZWZkJyBdOgorICAgICAgICByZXR1cm4gIi0td2l0aG91dC1mcCIKKyAgICByZXR1cm4gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGlmIGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKToKKyAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgYnBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgICAgIHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICIiCisgICAgICAgICMgU2V0IHRoZSBiYXNlIHBhY2thZ2UuLi4KKyAgICAgICAgZC5zZXRWYXIoJ1BLR18nICsgcHJlZml4ICsgYnBuLCBwcmVmaXggKyAnbGliYzYnKQorICAgICAgICBsaWJjcHJlZml4ID0gcHJlZml4ICsgYnBuICsgJy0nCisgICAgICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgICAgICAjIEFuZCBhbGwgdGhlIHN1YnBhY2thZ2VzLgorICAgICAgICAgICAgaWYgcC5zdGFydHN3aXRoKGxpYmNwcmVmaXgpOgorICAgICAgICAgICAgICAgIHJlbmFtZWQgPSBwLnJlcGxhY2UoYnBuLCAnbGliYzYnLCAxKQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdQS0dfJyArIHAsIHJlbmFtZWQpCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgLWRiZyBwYWNrYWdlCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUFJPVklERVNfJyArIGxpYmNwcmVmaXggKyAnZGJnJywgJyAnICsgcHJlZml4ICsgJ2xpYmMtZGJnJykKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JDT05GTElDVFNfJyArIGxpYmNwcmVmaXggKyAnZGJnJywgJyAnICsgcHJlZml4ICsgJ2xpYmMtZGJnJykKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JSRVBMQUNFU18nICsgbGliY3ByZWZpeCArICdkYmcnLCAnICcgKyBwcmVmaXggKyAnbGliYy1kYmcnKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YmU2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGliYy1wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzODggQEAKKyMKKyMgVGhpcyBjbGFzcyBrbm93cyBob3cgdG8gcGFja2FnZSB1cCBbZV1nbGliYy4gSXRzIHNoYXJlZCBzaW5jZSBwcmVidWlsZCBiaW5hcnkgdG9vbGNoYWlucworIyBtYXkgbmVlZCBwYWNrYWdpbmcgYW5kIGl0cyBwb2ludGxlc3MgdG8gZHVwbGljYXRlIHRoaXMgY29kZS4KKyMKKyMgQ2FsbGVyIHNob3VsZCBzZXQgR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUgdG8gb25lIG9mOgorIyAgImNvbXBpbGUiIC0gVXNlIFFFTVUgdG8gZ2VuZXJhdGUgdGhlIGJpbmFyeSBsb2NhbGUgZmlsZXMKKyMgICJwcmVjb21waWxlZCIgLSBUaGUgYmluYXJ5IGxvY2FsZSBmaWxlcyBhcmUgcHJlZ2VuZXJhdGVkIGFuZCBhbHJlYWR5IHByZXNlbnQKKyMgICJvbmRldmljZSIgLSBUaGUgZGV2aWNlIHdpbGwgYnVpbGQgdGhlIGxvY2FsZSBmaWxlcyB1cG9uIGZpcnN0IGJvb3QgdGhyb3VnaCB0aGUgcG9zdGluc3QKKworR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUgPz0gIm9uZGV2aWNlIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGVuYWJsZWQgPSBkLmdldFZhcigiRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiIsIFRydWUpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgcG4uZW5kc3dpdGgoIi1pbml0aWFsIik6CisgICAgICAgIGVuYWJsZWQgPSBGYWxzZQorCisgICAgaWYgZW5hYmxlZCBhbmQgaW50KGVuYWJsZWQpOgorICAgICAgICBpbXBvcnQgcmUKKworICAgICAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpCisgICAgICAgIGJpbmFyeV9hcmNoZXMgPSBkLmdldFZhcigiQklOQVJZX0xPQ0FMRV9BUkNIRVMiLCBUcnVlKSBvciAiIgorICAgICAgICB1c2VfY3Jvc3NfbG9jYWxlZGVmID0gZC5nZXRWYXIoIkxPQ0FMRV9HRU5FUkFUSU9OX1dJVEhfQ1JPU1MtTE9DQUxFREVGIiwgVHJ1ZSkgb3IgIiIKKworICAgICAgICBmb3IgcmVnZXhwIGluIGJpbmFyeV9hcmNoZXMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgIHIgPSByZS5jb21waWxlKHJlZ2V4cCkKKworICAgICAgICAgICAgaWYgci5tYXRjaCh0YXJnZXRfYXJjaCk6CisgICAgICAgICAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKCJERVBFTkRTIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiB1c2VfY3Jvc3NfbG9jYWxlZGVmID09ICIxIiA6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSAiJXMgY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9ICIlcyBxZW11LW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCBkZXBlbmRzKQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHTElCQ19JTlRFUk5BTF9VU0VfQklOQVJZX0xPQ0FMRSIsICJjb21waWxlIikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgIyB0cnkgdG8gZml4IGRpc2FibGUgY2hhcnNldHMvbG9jYWxlcy9sb2NhbGUtY29kZSBjb21waWxlIGZhaWwKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY2hhcnNldHMnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGVzJywgVHJ1ZSwgRmFsc2UsIGQpIGFuZCBcCisgICAgICAgICAgICBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlLWNvZGUnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX05PX0dDT05WJywgJzAnKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX05PX0dDT05WJywgJzEnKQorfQorCitPVkVSUklERVNfYXBwZW5kID0gIjoke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICBpZiBbIC1lICR7U30vZWxmL2xkZC5iYXNoLmluIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzZWQgLWUgInMjQEJBU0hAIy9iaW4vc2gjIiAtaSAke1N9L2VsZi9sZGQuYmFzaC5pbgorICAgICAgICBmaQorfQorCisKKworIyBpbmRlbnRhdGlvbiByZW1vdmVkIG9uIHB1cnBvc2UKK2xvY2FsZV9iYXNlX3Bvc3RpbnN0KCkgeworIyEvYmluL3NoCisKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwlleGl0IDEKK2ZpCisKK3JtIC1yZiAke1RNUF9MT0NBTEV9Citta2RpciAtcCAke1RNUF9MT0NBTEV9CitpZiBbIC1mICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSBdOyB0aGVuCisgICAgICAgIGNwICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSAke1RNUF9MT0NBTEV9LworZmkKK2xvY2FsZWRlZiAtLWlucHV0ZmlsZT0ke2RhdGFkaXJ9L2kxOG4vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgLS1wcmVmaXg9L3RtcC9sb2NhbGUgJXMKK21rZGlyIC1wICR7bG9jYWxlZGlyfS8KK212ICR7VE1QX0xPQ0FMRX0vbG9jYWxlLWFyY2hpdmUgJHtsb2NhbGVkaXJ9Lworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK30KKworIyBpbmRlbnRhdGlvbiByZW1vdmVkIG9uIHB1cnBvc2UKK2xvY2FsZV9iYXNlX3Bvc3RybSgpIHsKKyMhL2Jpbi9zaAorCitybSAtcmYgJHtUTVBfTE9DQUxFfQorbWtkaXIgLXAgJHtUTVBfTE9DQUxFfQoraWYgWyAtZiAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgXTsgdGhlbgorCWNwICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSAke1RNUF9MT0NBTEV9LworZmkKK2xvY2FsZWRlZiAtLWRlbGV0ZS1mcm9tLWFyY2hpdmUgLS1pbnB1dGZpbGU9JHtkYXRhZGlyfS9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAtLXByZWZpeD0vdG1wL2xvY2FsZSAlcworbXYgJHtUTVBfTE9DQUxFfS9sb2NhbGUtYXJjaGl2ZSAke2xvY2FsZWRpcn0vCitybSAtcmYgJHtUTVBfTE9DQUxFfQorfQorCisKK1RNUF9MT0NBTEU9Ii90bXAvbG9jYWxlJHtsb2NhbGVkaXJ9IgorTE9DQUxFVFJFRVNSQyA/PSAiJHtQS0dEfSIKKworZG9fcHJlcF9sb2NhbGVfdHJlZSgpIHsKKwl0cmVlZGlyPSR7V09SS0RJUn0vbG9jYWxlLXRyZWUKKwlybSAtcmYgJHRyZWVkaXIKKwlta2RpciAtcCAkdHJlZWRpci8ke2Jhc2VfYmluZGlyfSAkdHJlZWRpci8ke2Jhc2VfbGliZGlyfSAkdHJlZWRpci8ke2RhdGFkaXJ9ICR0cmVlZGlyLyR7bG9jYWxlZGlyfQorCXRhciAtY2YgLSAtQyAke0xPQ0FMRVRSRUVTUkN9JHtkYXRhZGlyfSAtcCBpMThuIHwgdGFyIC14ZiAtIC1DICR0cmVlZGlyLyR7ZGF0YWRpcn0KKwkjIHVuemlwIHRvIGF2b2lkIHBhcnNpbmcgZXJyb3JzCisJZm9yIGkgaW4gJHRyZWVkaXIvJHtkYXRhZGlyfS9pMThuL2NoYXJtYXBzLypnejsgZG8gCisJCWd1bnppcCAkaQorCWRvbmUKKwl0YXIgLWNmIC0gLUMgJHtMT0NBTEVUUkVFU1JDfSR7YmFzZV9saWJkaXJ9IC1wIC4gfCB0YXIgLXhmIC0gLUMgJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0KKwlpZiBbIC1mICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vbGliL2xpYmdjY19zLiogXTsgdGhlbgorCQl0YXIgLWNmIC0gLUMgJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyR7cHJlZml4X25hdGl2ZX0vJHtiYXNlX2xpYmRpcn0gLXAgbGliZ2NjX3MuKiB8IHRhciAteGYgLSAtQyAkdHJlZWRpci8ke2Jhc2VfbGliZGlyfQorCWZpCisJaW5zdGFsbCAtbSAwNzU1ICR7TE9DQUxFVFJFRVNSQ30ke2JpbmRpcn0vbG9jYWxlZGVmICR0cmVlZGlyLyR7YmFzZV9iaW5kaXJ9Cit9CisKK2RvX2NvbGxlY3RfYmluc19mcm9tX2xvY2FsZV90cmVlKCkgeworCXRyZWVkaXI9JHtXT1JLRElSfS9sb2NhbGUtdHJlZQorCisJcGFyZW50PSQoZGlybmFtZSAke2xvY2FsZWRpcn0pCisJbWtkaXIgLXAgJHtQS0dEfS8kcGFyZW50CisJdGFyIC1jZiAtIC1DICR0cmVlZGlyLyRwYXJlbnQgLXAgJChiYXNlbmFtZSAke2xvY2FsZWRpcn0pIHwgdGFyIC14ZiAtIC1DICR7UEtHRH0kcGFyZW50Cit9CisKK2luaGVyaXQgcWVtdQorCitweXRob24gcGFja2FnZV9kb19zcGxpdF9nY29udnMgKCkgeworICAgIGltcG9ydCByZQorICAgIGlmIChkLmdldFZhcignUEFDS0FHRV9OT19HQ09OVicsIFRydWUpID09ICcxJyk6CisgICAgICAgIGJiLm5vdGUoInBhY2thZ2UgcmVxdWVzdGVkIG5vdCBzcGxpdHRpbmcgZ2NvbnZzIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSk6CisgICAgICAgIHJldHVybgorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKSBvciAiIgorCisgICAgYnBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgbGliZGlyID0gZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisgICAgaWYgbm90IGxpYmRpcjoKKyAgICAgICAgYmIuZXJyb3IoImxpYmRpciBub3QgZGVmaW5lZCIpCisgICAgICAgIHJldHVybgorICAgIGRhdGFkaXIgPSBkLmdldFZhcignZGF0YWRpcicsIFRydWUpCisgICAgaWYgbm90IGRhdGFkaXI6CisgICAgICAgIGJiLmVycm9yKCJkYXRhZGlyIG5vdCBkZWZpbmVkIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBnY29udl9saWJkaXIgPSBiYXNlX3BhdGhfam9pbihsaWJkaXIsICJnY29udiIpCisgICAgY2hhcm1hcF9kaXIgPSBiYXNlX3BhdGhfam9pbihkYXRhZGlyLCAiaTE4biIsICJjaGFybWFwcyIpCisgICAgbG9jYWxlc19kaXIgPSBiYXNlX3BhdGhfam9pbihkYXRhZGlyLCAiaTE4biIsICJsb2NhbGVzIikKKyAgICBiaW5hcnlfbG9jYWxlc19kaXIgPSBkLmdldFZhcignbG9jYWxlZGlyJywgVHJ1ZSkKKworICAgIGRlZiBjYWxjX2djb252X2RlcHMoZm4sIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGdyb3VwKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGYgPSBvcGVuKGZuLCAicmIiKQorICAgICAgICBjX3JlID0gcmUuY29tcGlsZSgnXmNvcHkgIiguKikiJykKKyAgICAgICAgaV9yZSA9IHJlLmNvbXBpbGUoJ15pbmNsdWRlICIoXHcrKSIuKicpCisgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBtID0gY19yZS5tYXRjaChsKSBvciBpX3JlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRwID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyVzJXMtZ2NvbnYtJXMnICUgKG1scHJlZml4LCBicG4sIG0uZ3JvdXAoMSkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkcCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGRlcHMgIT0gW106CisgICAgICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgaWYgYnBuICE9ICdnbGliYyc6CisgICAgICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZywgcGtnLnJlcGxhY2UoYnBuLCAnZ2xpYmMnKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdjb252X2xpYmRpciwgZmlsZV9yZWdleD0nXiguKilcLnNvJCcsIG91dHB1dF9wYXR0ZXJuPWJwbisnLWdjb252LSVzJywgXAorICAgICAgICBkZXNjcmlwdGlvbj0nZ2NvbnYgbW9kdWxlIGZvciBjaGFyYWN0ZXIgc2V0ICVzJywgaG9vaz1jYWxjX2djb252X2RlcHMsIFwKKyAgICAgICAgZXh0cmFfZGVwZW5kcz1icG4rJy1nY29udicpCisKKyAgICBkZWYgY2FsY19jaGFybWFwX2RlcHMoZm4sIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGdyb3VwKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGYgPSBvcGVuKGZuLCAicmIiKQorICAgICAgICBjX3JlID0gcmUuY29tcGlsZSgnXmNvcHkgIiguKikiJykKKyAgICAgICAgaV9yZSA9IHJlLmNvbXBpbGUoJ15pbmNsdWRlICIoXHcrKSIuKicpCisgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBtID0gY19yZS5tYXRjaChsKSBvciBpX3JlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRwID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyVzJXMtY2hhcm1hcC0lcycgJSAobWxwcmVmaXgsIGJwbiwgbS5ncm91cCgxKSkpCisgICAgICAgICAgICAgICAgaWYgbm90IGRwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRwKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgaWYgZGVwcyAhPSBbXToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18lcycgJSBwa2csICIgIi5qb2luKGRlcHMpKQorICAgICAgICBpZiBicG4gIT0gJ2dsaWJjJzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJXMnICUgcGtnLCBwa2cucmVwbGFjZShicG4sICdnbGliYycpKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgY2hhcm1hcF9kaXIsIGZpbGVfcmVnZXg9J14oLiopXC5neiQnLCBvdXRwdXRfcGF0dGVybj1icG4rJy1jaGFybWFwLSVzJywgXAorICAgICAgICBkZXNjcmlwdGlvbj0nY2hhcmFjdGVyIG1hcCBmb3IgJXMgZW5jb2RpbmcnLCBob29rPWNhbGNfY2hhcm1hcF9kZXBzLCBleHRyYV9kZXBlbmRzPScnKQorCisgICAgZGVmIGNhbGNfbG9jYWxlX2RlcHMoZm4sIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGdyb3VwKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGYgPSBvcGVuKGZuLCAicmIiKQorICAgICAgICBjX3JlID0gcmUuY29tcGlsZSgnXmNvcHkgIiguKikiJykKKyAgICAgICAgaV9yZSA9IHJlLmNvbXBpbGUoJ15pbmNsdWRlICIoXHcrKSIuKicpCisgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBtID0gY19yZS5tYXRjaChsKSBvciBpX3JlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRwID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobWxwcmVmaXgrYnBuKyctbG9jYWxlZGF0YS0lcycgJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkcCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGRlcHMgIT0gW106CisgICAgICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgaWYgYnBuICE9ICdnbGliYyc6CisgICAgICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZywgcGtnLnJlcGxhY2UoYnBuLCAnZ2xpYmMnKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxvY2FsZXNfZGlyLCBmaWxlX3JlZ2V4PScoLiopJywgb3V0cHV0X3BhdHRlcm49YnBuKyctbG9jYWxlZGF0YS0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2xvY2FsZSBkZWZpbml0aW9uIGZvciAlcycsIGhvb2s9Y2FsY19sb2NhbGVfZGVwcywgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCBkLmdldFZhcignUEFDS0FHRVMnLCBGYWxzZSkgKyAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyBicG4gKyAnLWdjb252JykKKworICAgIHVzZV9iaW4gPSBkLmdldFZhcigiR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUiLCBUcnVlKQorCisgICAgZG90X3JlID0gcmUuY29tcGlsZSgiKC4qKVwuKC4qKSIpCisKKyAgICAjIFJlYWQgaW4gc3VwcG9ydGVkIGxvY2FsZXMgYW5kIGFzc29jaWF0ZWQgZW5jb2RpbmdzCisgICAgc3VwcG9ydGVkID0ge30KKyAgICB3aXRoIG9wZW4oYmFzZV9wYXRoX2pvaW4oZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgIlNVUFBPUlRFRCIpKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2FsZSwgY2hhcnNldCA9IGxpbmUucnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN1cHBvcnRlZFtsb2NhbGVdID0gY2hhcnNldAorCisgICAgIyBHTElCQ19HRU5FUkFURV9MT0NBTEVTIHZhciBzcGVjaWZpZXMgd2hpY2ggbG9jYWxlcyB0byBiZSBnZW5lcmF0ZWQuIGVtcHR5IG9yICJhbGwiIG1lYW5zIGFsbCBsb2NhbGVzCisgICAgdG9fZ2VuZXJhdGUgPSBkLmdldFZhcignR0xJQkNfR0VORVJBVEVfTE9DQUxFUycsIFRydWUpCisgICAgaWYgbm90IHRvX2dlbmVyYXRlIG9yIHRvX2dlbmVyYXRlID09ICdhbGwnOgorICAgICAgICB0b19nZW5lcmF0ZSA9IHN1cHBvcnRlZC5rZXlzKCkKKyAgICBlbHNlOgorICAgICAgICB0b19nZW5lcmF0ZSA9IHRvX2dlbmVyYXRlLnNwbGl0KCkKKyAgICAgICAgZm9yIGxvY2FsZSBpbiB0b19nZW5lcmF0ZToKKyAgICAgICAgICAgIGlmIGxvY2FsZSBub3QgaW4gc3VwcG9ydGVkOgorICAgICAgICAgICAgICAgIGlmICcuJyBpbiBsb2NhbGU6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBsb2NhbGUuc3BsaXQoJy4nKVsxXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAnVVRGLTgnCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlVuc3VwcG9ydGVkIGxvY2FsZSAnJXMnLCBhc3N1bWluZyBlbmNvZGluZyAnJXMnIiAlIChsb2NhbGUsIGNoYXJzZXQpKQorICAgICAgICAgICAgICAgIHN1cHBvcnRlZFtsb2NhbGVdID0gY2hhcnNldAorCisgICAgZGVmIG91dHB1dF9sb2NhbGVfc291cmNlKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnbmFtZSwgJ2xvY2FsZWRlZiAlcy1sb2NhbGVkYXRhLSVzICVzLWNoYXJtYXAtJXMnICUgXAorICAgICAgICAobWxwcmVmaXgrYnBuLCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShsb2NhbGUpLCBtbHByZWZpeCticG4sIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKGVuY29kaW5nKSkpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnbmFtZSwgZC5nZXRWYXIoJ2xvY2FsZV9iYXNlX3Bvc3RpbnN0JywgVHJ1ZSkgXAorICAgICAgICAlIChsb2NhbGUsIGVuY29kaW5nLCBsb2NhbGUpKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2duYW1lLCBkLmdldFZhcignbG9jYWxlX2Jhc2VfcG9zdHJtJywgVHJ1ZSkgJSBcCisgICAgICAgIChsb2NhbGUsIGVuY29kaW5nLCBsb2NhbGUpKQorCisgICAgZGVmIG91dHB1dF9sb2NhbGVfYmluYXJ5X3JkZXBlbmRzKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICBtID0gcmUubWF0Y2goIiguKilcLiguKikiLCBuYW1lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbGliY19uYW1lID0gIiVzLiVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpLmxvd2VyKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaWJjX25hbWUgPSBuYW1lCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18lcycgJSBwa2duYW1lLCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJXMtYmluYXJ5LWxvY2FsZWRhdGEtJXMnIFwKKyAgICAgICAgICAgICUgKG1scHJlZml4K2JwbiwgbGliY19uYW1lKSkpCisKKyAgICBjb21tYW5kcyA9IHt9CisKKyAgICBkZWYgb3V0cHV0X2xvY2FsZV9iaW5hcnkobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZyk6CisgICAgICAgIHRyZWVkaXIgPSBiYXNlX3BhdGhfam9pbihkLmdldFZhcigiV09SS0RJUiIsIFRydWUpLCAibG9jYWxlLXRyZWUiKQorICAgICAgICBsZGxpYmRpciA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgICAgICBwYXRoID0gZC5nZXRWYXIoIlBBVEgiLCBUcnVlKQorICAgICAgICBpMThucGF0aCA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsIGRhdGFkaXIsICJpMThuIikKKyAgICAgICAgZ2NvbnZwYXRoID0gYmFzZV9wYXRoX2pvaW4odHJlZWRpciwgImljb252ZGF0YSIpCisgICAgICAgIG91dHB1dHBhdGggPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBiaW5hcnlfbG9jYWxlc19kaXIpCisKKyAgICAgICAgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9IGQuZ2V0VmFyKCJMT0NBTEVfR0VORVJBVElPTl9XSVRIX0NST1NTLUxPQ0FMRURFRiIsIFRydWUpIG9yICIwIgorICAgICAgICBpZiB1c2VfY3Jvc3NfbG9jYWxlZGVmID09ICIxIjoKKyAgICAgICAgICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICAgICAgICAgIGxvY2FsZV9hcmNoX29wdGlvbnMgPSB7IFwKKyAgICAgICAgICAgICAgICAiYXJtIjogICAgICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgImFhcmNoNjQiOiAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAiYWFyY2g2NF9iZSI6ICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJzaDQiOiAgICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgInBvd2VycGMiOiAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAicG93ZXJwYzY0IjogIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgXAorICAgICAgICAgICAgICAgICJtaXBzIjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAibWlwc2VsIjogICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6IiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgImk1ODYiOiAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiICB9CisKKyAgICAgICAgICAgIGlmIHRhcmdldF9hcmNoIGluIGxvY2FsZV9hcmNoX29wdGlvbnM6CisgICAgICAgICAgICAgICAgbG9jYWxlZGVmX29wdHMgPSBsb2NhbGVfYXJjaF9vcHRpb25zW3RhcmdldF9hcmNoXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigibG9jYWxlX2FyY2hfb3B0aW9ucyBub3QgZm91bmQgZm9yIHRhcmdldF9hcmNoPSIgKyB0YXJnZXRfYXJjaCkKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmtub3duIGFyY2g6IiArIHRhcmdldF9hcmNoICsgIiBmb3IgbG9jYWxlX2FyY2hfb3B0aW9ucyIpCisKKyAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzICs9ICIgLS1mb3JjZSAtLW9sZC1zdHlsZSAtLW5vLWFyY2hpdmUgLS1wcmVmaXg9JXMgXAorICAgICAgICAgICAgICAgIC0taW5wdXRmaWxlPSVzLyVzL2kxOG4vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgJXMvJXMiIFwKKyAgICAgICAgICAgICAgICAlICh0cmVlZGlyLCB0cmVlZGlyLCBkYXRhZGlyLCBsb2NhbGUsIGVuY29kaW5nLCBvdXRwdXRwYXRoLCBuYW1lKQorCisgICAgICAgICAgICBjbWQgPSAiUEFUSD1cIiVzXCIgSTE4TlBBVEg9XCIlc1wiIEdDT05WX1BBVEg9XCIlc1wiIGNyb3NzLWxvY2FsZWRlZiAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHBhdGgsIGkxOG5wYXRoLCBnY29udnBhdGgsIGxvY2FsZWRlZl9vcHRzKQorICAgICAgICBlbHNlOiAjIGVhcmxpZXIgc2xvd2VyIHFlbXUgd2F5IAorICAgICAgICAgICAgcWVtdSA9IHFlbXVfdGFyZ2V0X2JpbmFyeShkKSAKKyAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzID0gIi0tZm9yY2UgLS1vbGQtc3R5bGUgLS1uby1hcmNoaXZlIC0tcHJlZml4PSVzIFwKKyAgICAgICAgICAgICAgICAtLWlucHV0ZmlsZT0lcy9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzICVzIiBcCisgICAgICAgICAgICAgICAgJSAodHJlZWRpciwgZGF0YWRpciwgbG9jYWxlLCBlbmNvZGluZywgbmFtZSkKKworICAgICAgICAgICAgcWVtdV9vcHRpb25zID0gZC5nZXRWYXIoJ1FFTVVfT1BUSU9OUycsIFRydWUpCisKKyAgICAgICAgICAgIGNtZCA9ICJQU0VVRE9fUkVMT0FERUQ9WUVTIFBBVEg9XCIlc1wiIEkxOE5QQVRIPVwiJXNcIiAlcyAtTCAlcyBcCisgICAgICAgICAgICAgICAgLUUgTERfTElCUkFSWV9QQVRIPSVzICVzICVzL2Jpbi9sb2NhbGVkZWYgJXMiICUgXAorICAgICAgICAgICAgICAgIChwYXRoLCBpMThucGF0aCwgcWVtdSwgdHJlZWRpciwgbGRsaWJkaXIsIHFlbXVfb3B0aW9ucywgdHJlZWRpciwgbG9jYWxlZGVmX29wdHMpCisKKyAgICAgICAgY29tbWFuZHNbIiVzLyVzIiAlIChvdXRwdXRwYXRoLCBuYW1lKV0gPSBjbWQKKworICAgICAgICBiYi5ub3RlKCJnZW5lcmF0aW5nIGxvY2FsZSAlcyAoJXMpIiAlIChsb2NhbGUsIGVuY29kaW5nKSkKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlKG5hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICBwa2duYW1lID0gZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ2xvY2FsZS1iYXNlLScgKyBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShuYW1lKQorICAgICAgICBkLnNldFZhcignQUxMT1dfRU1QVFlfJXMnICUgcGtnbmFtZSwgJzEnKQorICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnJXMgJXMnICUgKHBrZ25hbWUsIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpKSkKKyAgICAgICAgcnByb3ZpZGVzID0gJyAlc3ZpcnR1YWwtbG9jYWxlLSVzJyAlIChtbHByZWZpeCwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobmFtZSkpCisgICAgICAgIG0gPSByZS5tYXRjaCgiKC4qKV8oLiopIiwgbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwcm92aWRlcyArPSAnICVzdmlydHVhbC1sb2NhbGUtJXMnICUgKG1scHJlZml4LCBtLmdyb3VwKDEpKQorICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZ25hbWUsIHJwcm92aWRlcykKKworICAgICAgICBpZiB1c2VfYmluID09ICJjb21waWxlIjoKKyAgICAgICAgICAgIG91dHB1dF9sb2NhbGVfYmluYXJ5X3JkZXBlbmRzKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpCisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICBlbGlmIHVzZV9iaW4gPT0gInByZWNvbXBpbGVkIjoKKyAgICAgICAgICAgIG91dHB1dF9sb2NhbGVfYmluYXJ5X3JkZXBlbmRzKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX3NvdXJjZShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorCisgICAgaWYgdXNlX2JpbiA9PSAiY29tcGlsZSI6CisgICAgICAgIGJiLm5vdGUoInByZXBhcmluZyB0cmVlIGZvciBiaW5hcnkgbG9jYWxlIGdlbmVyYXRpb24iKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3ByZXBfbG9jYWxlX3RyZWUiLCBkKQorCisgICAgdXRmOF9vbmx5ID0gaW50KGQuZ2V0VmFyKCdMT0NBTEVfVVRGOF9PTkxZJywgVHJ1ZSkgb3IgMCkKKyAgICBlbmNvZGluZ3MgPSB7fQorICAgIGZvciBsb2NhbGUgaW4gdG9fZ2VuZXJhdGU6CisgICAgICAgIGNoYXJzZXQgPSBzdXBwb3J0ZWRbbG9jYWxlXQorICAgICAgICBpZiB1dGY4X29ubHkgYW5kIGNoYXJzZXQgIT0gJ1VURi04JzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbSA9IGRvdF9yZS5tYXRjaChsb2NhbGUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBiYXNlID0gbS5ncm91cCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzZSA9IGxvY2FsZQorCisgICAgICAgICMgUHJlY29tcGlsZWQgbG9jYWxlcyBhcmUga2VwdCBhcyBpcywgb2JleWluZyBTVVBQT1JURUQsIHdoaWxlCisgICAgICAgICMgb3RoZXJzIGFyZSBhZGp1c3RlZCwgZW5zdXJpbmcgdGhhdCB0aGUgbm9uLXN1ZmZpeGVkIGxvY2FsZXMKKyAgICAgICAgIyBhcmUgdXRmLTgsIHdoaWxlIHRoZSBzdWZmaXhlZCBhcmUgbm90LgorICAgICAgICBpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlKGxvY2FsZSwgYmFzZSwgY2hhcnNldCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGNoYXJzZXQgPT0gJ1VURi04JzoKKyAgICAgICAgICAgICAgICBvdXRwdXRfbG9jYWxlKGJhc2UsIGJhc2UsIGNoYXJzZXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dF9sb2NhbGUoJyVzLiVzJyAlIChiYXNlLCBjaGFyc2V0KSwgYmFzZSwgY2hhcnNldCkKKworICAgIGlmIHVzZV9iaW4gPT0gImNvbXBpbGUiOgorICAgICAgICBtYWtlZmlsZSA9IGJhc2VfcGF0aF9qb2luKGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSksICJsb2NhbGUtdHJlZSIsICJNYWtlZmlsZSIpCisgICAgICAgIG0gPSBvcGVuKG1ha2VmaWxlLCAidyIpCisgICAgICAgIG0ud3JpdGUoImFsbDogJXNcblxuIiAlICIgIi5qb2luKGNvbW1hbmRzLmtleXMoKSkpCisgICAgICAgIGZvciBjbWQgaW4gY29tbWFuZHM6CisgICAgICAgICAgICBtLndyaXRlKGNtZCArICI6XG4iKQorICAgICAgICAgICAgbS53cml0ZSgiXHQiICsgY29tbWFuZHNbY21kXSArICJcblxuIikKKyAgICAgICAgbS5jbG9zZSgpCisgICAgICAgIGQuc2V0VmFyKCJFWFRSQV9PRU1BS0UiLCAiLUMgJXMgJHtQQVJBTExFTF9NQUtFfSIgJSAob3MucGF0aC5kaXJuYW1lKG1ha2VmaWxlKSkpCisgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyBiaW5hcnkgbG9jYWxlIGdlbmVyYXRpb24gbWFrZWZpbGUiKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoIm9lX3J1bm1ha2UiLCBkKQorICAgICAgICBiYi5ub3RlKCJjb2xsZWN0aW5nIGJpbmFyeSBsb2NhbGVzIGZyb20gbG9jYWxlIHRyZWUiKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX2NvbGxlY3RfYmluc19mcm9tX2xvY2FsZV90cmVlIiwgZCkKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYmluYXJ5X2xvY2FsZXNfZGlyLCBmaWxlX3JlZ2V4PScoLiopJywgXAorICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49YnBuKyctYmluYXJ5LWxvY2FsZWRhdGEtJXMnLCBcCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0nYmluYXJ5IGxvY2FsZSBkZWZpbml0aW9uIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2RpcnM9VHJ1ZSkKKyAgICBlbGlmIHVzZV9iaW4gPT0gInByZWNvbXBpbGVkIjoKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYmluYXJ5X2xvY2FsZXNfZGlyLCBmaWxlX3JlZ2V4PScoLiopJywgXAorICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49YnBuKyctYmluYXJ5LWxvY2FsZWRhdGEtJXMnLCBcCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0nYmluYXJ5IGxvY2FsZSBkZWZpbml0aW9uIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2RpcnM9VHJ1ZSkKKyAgICBlbHNlOgorICAgICAgICBiYi5ub3RlKCJnZW5lcmF0aW9uIG9mIGJpbmFyeSBsb2NhbGVzIGRpc2FibGVkLiB0aGlzIG1heSBicmVhayBpMThuISIpCisKK30KKworIyBXZSB3YW50IHRvIGRvIHRoaXMgaW5kaXJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gc2FmZWx5ICdyZXR1cm4nCisjIGZyb20gdGhlIGNhbGxlZCBmdW5jdGlvbiBldmVuIHRob3VnaCB3ZSdyZSBwcmVwZW5kaW5nCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdwYWNrYWdlX2RvX3NwbGl0X2djb252cycsIGQpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTZhMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDgzIEBACisjIFBvcHVsYXRlcyBMSUNFTlNFX0RJUkVDVE9SWSBhcyBzZXQgaW4gZGlzdHJvIGNvbmZpZyB3aXRoIHRoZSBsaWNlbnNlIGZpbGVzIGFzIHNldCBieQorIyBMSUNfRklMRVNfQ0hLU1VNLgorIyBUT0RPOgorIyAtIFRoZXJlIGlzIGEgcmVhbCBpc3N1ZSByZXZvbHZpbmcgYXJvdW5kIGxpY2Vuc2UgbmFtaW5nIHN0YW5kYXJkcy4KKworTElDRU5TRV9ESVJFQ1RPUlkgPz89ICIke0RFUExPWV9ESVJ9L2xpY2Vuc2VzIgorTElDU1NUQVRFRElSID0gIiR7V09SS0RJUn0vbGljZW5zZS1kZXN0ZGlyLyIKKworIyBDcmVhdGUgZXh0cmEgcGFja2FnZSB3aXRoIGxpY2Vuc2UgdGV4dHMgYW5kIGFkZCBpdCB0byBSUkVDT01NRU5EU18ke1BOfQorTElDRU5TRV9DUkVBVEVfUEFDS0FHRVt0eXBlXSA9ICJib29sZWFuIgorTElDRU5TRV9DUkVBVEVfUEFDS0FHRSA/Pz0gIjAiCitMSUNFTlNFX1BBQ0tBR0VfU1VGRklYID8/PSAiLWxpYyIKK0xJQ0VOU0VfRklMRVNfRElSRUNUT1JZID8/PSAiJHtkYXRhZGlyfS9saWNlbnNlcy8iCisKK2FkZHRhc2sgcG9wdWxhdGVfbGljIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19idWlsZAorZG9fcG9wdWxhdGVfbGljW2RpcnNdID0gIiR7TElDU1NUQVRFRElSfS8ke1BOfSIKK2RvX3BvcHVsYXRlX2xpY1tjbGVhbmRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKKworcHl0aG9uIHdyaXRlX3BhY2thZ2VfbWFuaWZlc3QoKSB7CisgICAgIyBHZXQgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMKKyAgICBsaWNlbnNlX2ltYWdlX2RpciA9IGQuZXhwYW5kKCcke0xJQ0VOU0VfRElSRUNUT1JZfS8ke0lNQUdFX05BTUV9JykKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobGljZW5zZV9pbWFnZV9kaXIpCisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgb3Blbihvcy5wYXRoLmpvaW4obGljZW5zZV9pbWFnZV9kaXIsICdwYWNrYWdlLm1hbmlmZXN0JyksCisgICAgICAgICd3KycpLndyaXRlKGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQpKQorfQorCitweXRob24gbGljZW5zZV9jcmVhdGVfbWFuaWZlc3QoKSB7CisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisKKyAgICBiYWRfbGljZW5zZXMgPSAoZC5nZXRWYXIoIklOQ09NUEFUSUJMRV9MSUNFTlNFIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBiYWRfbGljZW5zZXMgPSBtYXAobGFtYmRhIGw6IGNhbm9uaWNhbF9saWNlbnNlKGQsIGwpLCBiYWRfbGljZW5zZXMpCisgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKworICAgIGJ1aWxkX2ltYWdlc19mcm9tX2ZlZWRzID0gZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkKKyAgICBpZiBidWlsZF9pbWFnZXNfZnJvbV9mZWVkcyA9PSAiMSI6CisgICAgICAgIHJldHVybiAwCisKKyAgICBwa2dfZGljID0ge30KKyAgICBmb3IgcGtnIGluIGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQpLnNwbGl0bGluZXMoKToKKyAgICAgICAgcGtnX2luZm8gPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW50aW1lLXJldmVyc2UnLCBwa2cpCisgICAgICAgIHBrZ19uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhwa2dfaW5mbykpCisKKyAgICAgICAgcGtnX2RpY1twa2dfbmFtZV0gPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3BrZ2RhdGFmaWxlKHBrZ19pbmZvKQorICAgICAgICBpZiBub3QgIkxJQ0VOU0UiIGluIHBrZ19kaWNbcGtnX25hbWVdLmtleXMoKToKKyAgICAgICAgICAgIHBrZ19saWNfbmFtZSA9ICJMSUNFTlNFXyIgKyBwa2dfbmFtZQorICAgICAgICAgICAgcGtnX2RpY1twa2dfbmFtZV1bIkxJQ0VOU0UiXSA9IHBrZ19kaWNbcGtnX25hbWVdW3BrZ19saWNfbmFtZV0KKworICAgIGxpY2Vuc2VfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRElSRUNUT1JZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpLCAnbGljZW5zZS5tYW5pZmVzdCcpCisgICAgd2l0aCBvcGVuKGxpY2Vuc2VfbWFuaWZlc3QsICJ3IikgYXMgbGljZW5zZV9maWxlOgorICAgICAgICBmb3IgcGtnIGluIHNvcnRlZChwa2dfZGljKToKKyAgICAgICAgICAgIGlmIGJhZF9saWNlbnNlczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIChwa2dfZGljW3BrZ11bIkxJQ0VOU0UiXSwgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdKSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9lLmxpY2Vuc2UubWFuaWZlc3RfbGljZW5zZXMocGtnX2RpY1twa2ddWyJMSUNFTlNFIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBiYWRfbGljZW5zZXMsIGNhbm9uaWNhbF9saWNlbnNlLCBkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBvZS5saWNlbnNlLkxpY2Vuc2VFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQJywgVHJ1ZSksIGV4YykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSA9IHJlLnN1YignW3wmKCkqXScsICcnLCBwa2dfZGljW3BrZ11bIkxJQ0VOU0UiXSkKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSByZS5zdWIoJyAgKicsICcgJywgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdKQorICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSA9IHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXS5zcGxpdCgpCisKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiUEFDS0FHRSBOQU1FOiAlc1xuIiAlIHBrZykKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiUEFDS0FHRSBWRVJTSU9OOiAlc1xuIiAlIHBrZ19kaWNbcGtnXVsiUFYiXSkKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiUkVDSVBFIE5BTUU6ICVzXG4iICUgcGtnX2RpY1twa2ddWyJQTiJdKQorICAgICAgICAgICAgbGljZW5zZV9maWxlLndyaXRlKCJMSUNFTlNFOiAlc1xuXG4iICUgcGtnX2RpY1twa2ddWyJMSUNFTlNFIl0pCisKKyAgICAgICAgICAgICMgSWYgdGhlIHBhY2thZ2UgZG9lc24ndCBjb250YWluIGFueSBmaWxlLCB0aGF0IGlzLCBpdHMgc2l6ZSBpcyAwLCB0aGUgbGljZW5zZQorICAgICAgICAgICAgIyBpc24ndCByZWxldmFudCBhcyBmYXIgYXMgdGhlIGZpbmFsIGltYWdlIGlzIGNvbmNlcm5lZC4gU28gZG9pbmcgbGljZW5zZSBjaGVjaworICAgICAgICAgICAgIyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSwgc2tpcCBpdC4KKyAgICAgICAgICAgIGlmIHBrZ19kaWNbcGtnXVsiUEtHU0laRV8lcyIgJSBwa2ddID09ICIwIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgbGljIGluIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXToKKyAgICAgICAgICAgICAgICBsaWNfZmlsZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDRU5TRV9ESVJFQ1RPUlknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIlBOIl0sICJnZW5lcmljXyVzIiAlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLnN1YignXCsnLCAnJywgbGljKSkKKyAgICAgICAgICAgICAgICAjIGFkZCBleHBsaWNpdHkgYXZvaWQgb2YgQ0xPU0VEIGxpY2Vuc2UgYmVjYXVzZSBpc24ndCBnZW5lcmljCisgICAgICAgICAgICAgICAgaWYgbGljID09ICJDTE9TRUQiOgorICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGljX2ZpbGUpOgorICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRoZSBsaWNlbnNlIGxpc3RlZCAlcyB3YXMgbm90IGluIHRoZSAiXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGljZW5zZXMgY29sbGVjdGVkIGZvciByZWNpcGUgJXMiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxpYywgcGtnX2RpY1twa2ddWyJQTiJdKSkKKworICAgICMgVHdvIG9wdGlvbnMgaGVyZToKKyAgICAjIC0gSnVzdCBjb3B5IHRoZSBtYW5pZmVzdAorICAgICMgLSBDb3B5IHRoZSBtYW5pZmVzdCBhbmQgdGhlIGxpY2Vuc2UgZGlyZWN0b3JpZXMKKyAgICAjIFdpdGggYm90aCBvcHRpb25zIHNldCB3ZSBzZWUgYSAuNSBNIGluY3JlYXNlIGluIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgIGNvcHlfbGljX21hbmlmZXN0ID0gZC5nZXRWYXIoJ0NPUFlfTElDX01BTklGRVNUJywgVHJ1ZSkKKyAgICBjb3B5X2xpY19kaXJzID0gZC5nZXRWYXIoJ0NPUFlfTElDX0RJUlMnLCBUcnVlKQorICAgIGlmIGNvcHlfbGljX21hbmlmZXN0ID09ICIxIjoKKyAgICAgICAgcm9vdGZzX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCAnVHJ1ZScpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzcicsICdzaGFyZScsICdjb21tb24tbGljZW5zZXMnKQorICAgICAgICBvcy5tYWtlZGlycyhyb290ZnNfbGljZW5zZV9kaXIpCisgICAgICAgIHJvb3Rmc19saWNlbnNlX21hbmlmZXN0ID0gb3MucGF0aC5qb2luKHJvb3Rmc19saWNlbnNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlLm1hbmlmZXN0JykKKyAgICAgICAgb3MubGluayhsaWNlbnNlX21hbmlmZXN0LCByb290ZnNfbGljZW5zZV9tYW5pZmVzdCkKKworICAgICAgICBpZiBjb3B5X2xpY19kaXJzID09ICIxIjoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gc29ydGVkKHBrZ19kaWMpOgorICAgICAgICAgICAgICAgIHBrZ19yb290ZnNfbGljZW5zZV9kaXIgPSBvcy5wYXRoLmpvaW4ocm9vdGZzX2xpY2Vuc2VfZGlyLCBwa2cpCisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMocGtnX3Jvb3Rmc19saWNlbnNlX2RpcikKKyAgICAgICAgICAgICAgICBwa2dfbGljZW5zZV9kaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRElSRUNUT1JZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiUE4iXSkgCisgICAgICAgICAgICAgICAgbGljZW5zZXMgPSBvcy5saXN0ZGlyKHBrZ19saWNlbnNlX2RpcikKKyAgICAgICAgICAgICAgICBmb3IgbGljIGluIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICByb290ZnNfbGljZW5zZSA9IG9zLnBhdGguam9pbihyb290ZnNfbGljZW5zZV9kaXIsIGxpYykKKyAgICAgICAgICAgICAgICAgICAgcGtnX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocGtnX2xpY2Vuc2VfZGlyLCBsaWMpCisgICAgICAgICAgICAgICAgICAgIHBrZ19yb290ZnNfbGljZW5zZSA9IG9zLnBhdGguam9pbihwa2dfcm9vdGZzX2xpY2Vuc2VfZGlyLCBsaWMpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goIl5nZW5lcmljXy4qJCIsIGxpYyk6CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljX2xpYyA9IHJlLnNlYXJjaCgiXmdlbmVyaWNfKC4qKSQiLCBsaWMpLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvZS5saWNlbnNlLmxpY2Vuc2Vfb2soY2Fub25pY2FsX2xpY2Vuc2UoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljX2xpYyksIGJhZF9saWNlbnNlcykgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJvb3Rmc19saWNlbnNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKHBrZ19saWNlbnNlLCByb290ZnNfbGljZW5zZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4oJy4uJywgbGljKSwgcGtnX3Jvb3Rmc19saWNlbnNlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljKSwgYmFkX2xpY2Vuc2VzKSA9PSBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKHBrZ19saWNlbnNlLCBwa2dfcm9vdGZzX2xpY2Vuc2UpCit9CisKK3B5dGhvbiBkb19wb3B1bGF0ZV9saWMoKSB7CisgICAgIiIiCisgICAgUG9wdWxhdGUgTElDRU5TRV9ESVJFQ1RPUlkgd2l0aCBsaWNlbnNlcy4KKyAgICAiIiIKKyAgICBsaWNfZmlsZXNfcGF0aHMgPSBmaW5kX2xpY2Vuc2VfZmlsZXMoZCkKKworICAgICMgVGhlIGJhc2UgZGlyZWN0b3J5IHdlIHdyYW5nbGUgbGljZW5zZXMgdG8KKyAgICBkZXN0ZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNTU1RBVEVESVInLCBUcnVlKSwgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgY29weV9saWNlbnNlX2ZpbGVzKGxpY19maWxlc19wYXRocywgZGVzdGRpcikKK30KKworIyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY29weSB0aGVtIGluIGRvX2luc3RhbGxfYXBwZW5kLCBidXQgZmluZF9saWNlbnNlX2ZpbGVzYSBpcyBweXRob24KK3B5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5X3ByZXBlbmQgKCkgeworICAgIGVuYWJsZWQgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdMSUNFTlNFX0NSRUFURV9QQUNLQUdFJywgZCkKKyAgICBpZiBkLmdldFZhcignQ0xBU1NPVkVSUklERScsIFRydWUpID09ICdjbGFzcy10YXJnZXQnIGFuZCBlbmFibGVkOgorICAgICAgICBsaWNfZmlsZXNfcGF0aHMgPSBmaW5kX2xpY2Vuc2VfZmlsZXMoZCkKKworICAgICAgICAjIExJQ0VOU0VfRklMRVNfRElSRUNUT1JZIHN0YXJ0cyB3aXRoICcvJyBzbyBvcy5wYXRoLmpvaW4gY2Fubm90IGJlIHVzZWQgdG8gam9pbiBEIGFuZCBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWQorICAgICAgICBkZXN0ZGlyID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIG9zLnBhdGguam9pbihkLmdldFZhcignTElDRU5TRV9GSUxFU19ESVJFQ1RPUlknLCBUcnVlKSwgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgICAgIGNvcHlfbGljZW5zZV9maWxlcyhsaWNfZmlsZXNfcGF0aHMsIGRlc3RkaXIpCisgICAgICAgIGFkZF9wYWNrYWdlX2FuZF9maWxlcyhkKQorfQorCitkZWYgYWRkX3BhY2thZ2VfYW5kX2ZpbGVzKGQpOgorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBmaWxlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWScsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIHBuX2xpYyA9ICIlcyVzIiAlIChwbiwgZC5nZXRWYXIoJ0xJQ0VOU0VfUEFDS0FHRV9TVUZGSVgnLCBGYWxzZSkpCisgICAgaWYgcG5fbGljIGluIHBhY2thZ2VzOgorICAgICAgICBiYi53YXJuKCIlcyBwYWNrYWdlIGFscmVhZHkgZXhpc3RlZCBpbiAlcy4iICUgKHBuX2xpYywgcG4pKQorICAgIGVsc2U6CisgICAgICAgICMgZmlyc3QgaW4gUEFDS0FHRVMgdG8gYmUgc3VyZSB0aGF0IG5vdGhpbmcgZWxzZSBnZXRzIExJQ0VOU0VfRklMRVNfRElSRUNUT1JZCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICIlcyAlcyIgJSAocG5fbGljLCBwYWNrYWdlcykpCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcG5fbGljLCBmaWxlcykKKyAgICAgICAgcnJlY29tbWVuZHNfcG4gPSBkLmdldFZhcignUlJFQ09NTUVORFNfJyArIHBuLCBUcnVlKQorICAgICAgICBpZiBycmVjb21tZW5kc19wbjoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18nICsgcG4sICIlcyAlcyIgJSAocG5fbGljLCBycmVjb21tZW5kc19wbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJyArIHBuLCAiJXMiICUgKHBuX2xpYykpCisKK2RlZiBjb3B5X2xpY2Vuc2VfZmlsZXMobGljX2ZpbGVzX3BhdGhzLCBkZXN0ZGlyKToKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICBmb3IgKGJhc2VuYW1lLCBwYXRoKSBpbiBsaWNfZmlsZXNfcGF0aHM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNyYyA9IHBhdGgKKyAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBiYXNlbmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKKyAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhzcmMsIG9zLldfT0spIGFuZCAob3Muc3RhdChzcmMpLnN0X2RldiA9PSBvcy5zdGF0KGRlc3RkaXIpLnN0X2Rldik6CisgICAgICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZHN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY29weSBsaWNlbnNlIGZpbGUgJXMgdG8gJXM6ICVzIiAlIChzcmMsIGRzdCwgZSkpCisKK2RlZiBmaW5kX2xpY2Vuc2VfZmlsZXMoZCk6CisgICAgIiIiCisgICAgQ3JlYXRlcyBsaXN0IG9mIGZpbGVzIHVzZWQgaW4gTElDX0ZJTEVTX0NIS1NVTSBhbmQgZ2VuZXJpYyBMSUNFTlNFIGZpbGVzLgorICAgICIiIgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgb2UubGljZW5zZQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGZvciBwYWNrYWdlIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpOgorICAgICAgICBpZiBkLmdldFZhcignTElDRU5TRV8nICsgcGFja2FnZSwgVHJ1ZSk6CisgICAgICAgICAgICBsaWNlbnNlX3R5cGVzID0gbGljZW5zZV90eXBlcyArICcgJiAnICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdMSUNFTlNFXycgKyBwYWNrYWdlLCBUcnVlKQorCisgICAgI0lmIHdlIGdldCBoZXJlIHdpdGggbm8gbGljZW5zZSB0eXBlcywgdGhlbiB0aGF0IG1lYW5zIHdlIGhhdmUgYSByZWNpcGUgCisgICAgI2xldmVsIGxpY2Vuc2UuIElmIHNvLCB3ZSBncmFiIG9ubHkgdGhvc2UuCisgICAgdHJ5OgorICAgICAgICBsaWNlbnNlX3R5cGVzCisgICAgZXhjZXB0IE5hbWVFcnJvcjogICAgICAgIAorICAgICAgICAjIEFsbCB0aGUgbGljZW5zZSB0eXBlcyBhdCB0aGUgcmVjaXBlIGxldmVsCisgICAgICAgIGxpY2Vuc2VfdHlwZXMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgCisgICAgIyBBbGwgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIHRoZSBwYWNrYWdlCisgICAgbGljX2ZpbGVzID0gZC5nZXRWYXIoJ0xJQ19GSUxFU19DSEtTVU0nLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAjIFRoZSBsaWNlbnNlIGZpbGVzIGFyZSBsb2NhdGVkIGluIFMvTElDX0ZJTEVfQ0hFQ0tTVU0uCisgICAgc3JjZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgICMgRGlyZWN0b3J5IHdlIHN0b3JlIHRoZSBnZW5lcmljIGxpY2Vuc2VzIGFzIHNldCBpbiB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24KKyAgICBnZW5lcmljX2RpcmVjdG9yeSA9IGQuZ2V0VmFyKCdDT01NT05fTElDRU5TRV9ESVInLCBUcnVlKQorICAgICMgTGlzdCBvZiBiYXNlbmFtZSwgcGF0aCB0dXBsZXMKKyAgICBsaWNfZmlsZXNfcGF0aHMgPSBbXQorICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMgPSBbXQorICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMuYXBwZW5kKGdlbmVyaWNfZGlyZWN0b3J5KQorICAgIHRyeToKKyAgICAgICAgYWRkaXRpb25hbF9saWNfZGlycyA9IGQuZ2V0VmFyKCdMSUNFTlNFX1BBVEgnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBsaWNfZGlyIGluIGFkZGl0aW9uYWxfbGljX2RpcnM6CisgICAgICAgICAgICBsaWNlbnNlX3NvdXJjZV9kaXJzLmFwcGVuZChsaWNfZGlyKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgRmluZFZpc2l0b3Iob2UubGljZW5zZS5MaWNlbnNlVmlzaXRvcik6CisgICAgICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFVudGlsIEkgZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGgKKyAgICAgICAgICAgICMgdGhlIHR3byBtb2RpZmllcnMgSSBzdXBwb3J0IChvciBncmVhdGVyID0gKworICAgICAgICAgICAgIyBhbmQgIndpdGggZXhjZXB0aW9ucyIgYmVpbmcgKgorICAgICAgICAgICAgIyB3ZSdsbCBqdXN0IHN0cmlwIG91dCB0aGUgbW9kaWZpZXIgYW5kIHB1dAorICAgICAgICAgICAgIyB0aGUgYmFzZSBsaWNlbnNlLgorICAgICAgICAgICAgZmluZF9saWNlbnNlKG5vZGUucy5yZXBsYWNlKCIrIiwgIiIpLnJlcGxhY2UoIioiLCAiIikpCisgICAgICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworICAgIGRlZiBmaW5kX2xpY2Vuc2UobGljZW5zZV90eXBlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGdlbl9saWNfZGVzdCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzcGR4X2dlbmVyaWMgPSBOb25lCisgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gTm9uZQorICAgICAgICAjIElmIHRoZSBnZW5lcmljIGRvZXMgbm90IGV4aXN0IHdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNQRFggbWFwcGluZyB0byBpdCwKKyAgICAgICAgIyB1bmxlc3MgTk9fR0VORVJJQ19MSUNFTlNFIGlzIHNldC4KKworICAgICAgICBmb3IgbGljX2RpciBpbiBsaWNlbnNlX3NvdXJjZV9kaXJzOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihsaWNfZGlyLCBsaWNlbnNlX3R5cGUpKToKKyAgICAgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZV90eXBlKSAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIEdyZWF0LCB0aGVyZSBpcyBhbiBTUERYTElDRU5TRU1BUC4gV2UgY2FuIGNvcHkhCisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJXZSBuZWVkIHRvIHVzZSBhIFNQRFhMSUNFTlNFTUFQIGZvciAlcyIgJSAobGljZW5zZV90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgc3BkeF9nZW5lcmljID0gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2VfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBsaWNfZGlyCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihsaWNfZGlyLCBsaWNlbnNlX3R5cGUpKToKKyAgICAgICAgICAgICAgICBzcGR4X2dlbmVyaWMgPSBsaWNlbnNlX3R5cGUKKyAgICAgICAgICAgICAgICBsaWNlbnNlX3NvdXJjZSA9IGxpY19kaXIKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIHNwZHhfZ2VuZXJpYyBhbmQgbGljZW5zZV9zb3VyY2U6CisgICAgICAgICAgICAjIHdlIHJlYWxseSBzaG91bGQgY29weSB0byBnZW5lcmljXyArIHNwZHhfZ2VuZXJpYywgaG93ZXZlciwgdGhhdCBlbmRzIHVwIG1lc3NpbmcgdGhlIG1hbmlmZXN0CisgICAgICAgICAgICAjIGF1ZGl0IHVwLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiBlbWl0X3BrZ2RhdGEgKG9yLCB3ZSBhY3R1YWxseSBnb3QgYW5kIGZpeCBhbGwgdGhlIHJlY2lwZXMpCisKKyAgICAgICAgICAgIGxpY19maWxlc19wYXRocy5hcHBlbmQoKCJnZW5lcmljXyIgKyBsaWNlbnNlX3R5cGUsIG9zLnBhdGguam9pbihsaWNlbnNlX3NvdXJjZSwgc3BkeF9nZW5lcmljKSkpCisKKyAgICAgICAgICAgICMgVGhlIHVzZXIgbWF5IGF0dGVtcHQgdG8gdXNlIE5PX0dFTkVSSUNfTElDRU5TRSBmb3IgYSBnZW5lcmljIGxpY2Vuc2Ugd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlCisgICAgICAgICAgICAjIGFuZCBzaG91bGQgbm90IGJlIGFsbG93ZWQsIHdhcm4gdGhlIHVzZXIgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiAlcyBpcyBhIGdlbmVyaWMgbGljZW5zZSwgcGxlYXNlIGRvbid0IHVzZSBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIGl0LiIgJSAocG4sIGxpY2Vuc2VfdHlwZSkpCisKKyAgICAgICAgZWxpZiBkLmdldFZhckZsYWcoJ05PX0dFTkVSSUNfTElDRU5TRScsIGxpY2Vuc2VfdHlwZSk6CisgICAgICAgICAgICAjIGlmIE5PX0dFTkVSSUNfTElDRU5TRSBpcyBzZXQsIHdlIGNvcHkgdGhlIGxpY2Vuc2UgZmlsZXMgZnJvbSB0aGUgZmV0Y2hlZCBzb3VyY2UKKyAgICAgICAgICAgICMgb2YgdGhlIHBhY2thZ2UgcmF0aGVyIHRoYW4gdGhlIGxpY2Vuc2Vfc291cmNlX2RpcnMuCisgICAgICAgICAgICBmb3IgKGJhc2VuYW1lLCBwYXRoKSBpbiBsaWNfZmlsZXNfcGF0aHM6CisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUpID09IGJhc2VuYW1lOgorICAgICAgICAgICAgICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKCgiZ2VuZXJpY18iICsgbGljZW5zZV90eXBlLCBwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQWRkIGV4cGxpY2l0eSBhdm9pZCBvZiBDTE9TRUQgbGljZW5zZSBiZWNhdXNlIHRoaXMgaXNuJ3QgZ2VuZXJpYworICAgICAgICAgICAgaWYgbGljZW5zZV90eXBlICE9ICdDTE9TRUQnOgorICAgICAgICAgICAgICAgICMgQW5kIGhlcmUgaXMgd2hlcmUgd2Ugd2FybiBwZW9wbGUgdGhhdCB0aGVpciBsaWNlbnNlcyBhcmUgbG91c3kKKyAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogTm8gZ2VuZXJpYyBsaWNlbnNlIGZpbGUgZXhpc3RzIGZvcjogJXMgaW4gYW55IHByb3ZpZGVyIiAlIChwbiwgbGljZW5zZV90eXBlKSkKKyAgICAgICAgICAgIHBhc3MKKworICAgIGlmIG5vdCBnZW5lcmljX2RpcmVjdG9yeToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiQ09NTU9OX0xJQ0VOU0VfRElSIGlzIHVuc2V0LiBQbGVhc2Ugc2V0IHRoaXMgaW4geW91ciBkaXN0cm8gY29uZmlnIikKKworICAgIGlmIG5vdCBsaWNfZmlsZXM6CisgICAgICAgICMgTm8gcmVjaXBlIHNob3VsZCBoYXZlIGFuIGludmFsaWQgbGljZW5zZSBmaWxlLiBUaGlzIGlzIGNoZWNrZWQgZWxzZQorICAgICAgICAjIHdoZXJlLCBidXQgbGV0J3MgYmUgcGVkYW50aWMKKyAgICAgICAgYmIubm90ZShwbiArICI6IFJlY2lwZSBmaWxlIGRvZXMgbm90IGhhdmUgbGljZW5zZSBmaWxlIGluZm9ybWF0aW9uLiIpCisgICAgICAgIHJldHVybiBsaWNfZmlsZXNfcGF0aHMKKworICAgIGZvciB1cmwgaW4gbGljX2ZpbGVzLnNwbGl0KCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybCh1cmwpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5NYWxmb3JtZWRVcmw6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlczogTElDX0ZJTEVTX0NIS1NVTSBjb250YWlucyBhbiBpbnZhbGlkIFVSTDogICVzIiAlIChkLmdldFZhcignUEYnLCBUcnVlKSwgdXJsKSkKKyAgICAgICAgIyBXZSB3YW50IHRoZSBsaWNlbnNlIGZpbGVuYW1lIGFuZCBwYXRoCisgICAgICAgIHNyY2xpY2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBwYXRoKQorICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKChvcy5wYXRoLmJhc2VuYW1lKHBhdGgpLCBzcmNsaWNmaWxlKSkKKworICAgIHYgPSBGaW5kVmlzaXRvcigpCisgICAgdHJ5OgorICAgICAgICB2LnZpc2l0X3N0cmluZyhsaWNlbnNlX3R5cGVzKQorICAgIGV4Y2VwdCBvZS5saWNlbnNlLkludmFsaWRMaWNlbnNlIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIGV4YykpCisgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICBiYi53YXJuKCIlczogRmFpbGVkIHRvIHBhcnNlIGl0J3MgTElDRU5TRSBmaWVsZC4iICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpKSkKKworICAgIHJldHVybiBsaWNfZmlsZXNfcGF0aHMKKworZGVmIHJldHVybl9zcGR4KGQsIGxpY2Vuc2UpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3BkeCBtYXBwaW5nIG9mIGEgbGljZW5zZSBpZiBpdCBleGlzdHMuCisgICAgICIiIgorICAgIHJldHVybiBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZSwgVHJ1ZSkKKworZGVmIGNhbm9uaWNhbF9saWNlbnNlKGQsIGxpY2Vuc2UpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgY2Fub25pY2FsIChTUERYKSBmb3JtIG9mIHRoZSBsaWNlbnNlIGlmIGF2YWlsYWJsZSAoc28gR1BMdjMKKyAgICBiZWNvbWVzIEdQTC0zLjApLCBmb3IgdGhlIGxpY2Vuc2UgbmFtZWQgJ1grJywgcmV0dXJuIGNhbm9uaWNhbCBmb3JtIG9mCisgICAgJ1gnIGlmIGF2YWlsYWJlbCBhbmQgdGhlIHRhaWxpbmcgJysnIChzbyBHUEx2MysgYmVjb21lcyBHUEwtMy4wKyksIAorICAgIG9yIHRoZSBwYXNzZWQgbGljZW5zZSBpZiB0aGVyZSBpcyBubyBjYW5vbmljYWwgZm9ybS4KKyAgICAiIiIKKyAgICBsaWMgPSBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZSwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBub3QgbGljIGFuZCBsaWNlbnNlLmVuZHN3aXRoKCcrJyk6CisgICAgICAgIGxpYyA9IGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlLnJzdHJpcCgnKycpLCBUcnVlKQorICAgICAgICBpZiBsaWM6CisgICAgICAgICAgICBsaWMgKz0gJysnCisgICAgcmV0dXJuIGxpYyBvciBsaWNlbnNlCisKK2RlZiBleHBhbmRfd2lsZGNhcmRfbGljZW5zZXMoZCwgd2lsZGNhcmRfbGljZW5zZXMpOgorICAgICIiIgorICAgIFJldHVybiBhY3R1YWwgc3BkeCBmb3JtYXQgbGljZW5zZSBuYW1lcyBpZiB3aWxkY2FyZCB1c2VkLiBXZSBleHBhbmQKKyAgICB3aWxkY2FyZHMgZnJvbSBTUERYTElDRU5TRU1BUCBmbGFncyBhbmQgU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgdmFsdWVzLgorICAgICIiIgorICAgIGltcG9ydCBmbm1hdGNoCisgICAgbGljZW5zZXMgPSBbXQorICAgIHNwZHhtYXBrZXlzID0gZC5nZXRWYXJGbGFncygnU1BEWExJQ0VOU0VNQVAnKS5rZXlzKCkKKyAgICBmb3Igd2xkX2xpYyBpbiB3aWxkY2FyZF9saWNlbnNlczoKKyAgICAgICAgc3BkeGZsYWdzID0gZm5tYXRjaC5maWx0ZXIoc3BkeG1hcGtleXMsIHdsZF9saWMpCisgICAgICAgIGxpY2Vuc2VzICs9IFtkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgZmxhZykgZm9yIGZsYWcgaW4gc3BkeGZsYWdzXQorCisgICAgc3BkeF9saWNzID0gKGQuZ2V0VmFyKCdTUkNfRElTVFJJQlVURV9MSUNFTlNFUycsIEZhbHNlKSBvciAnJykuc3BsaXQoKQorICAgIGZvciB3bGRfbGljIGluIHdpbGRjYXJkX2xpY2Vuc2VzOgorICAgICAgICBsaWNlbnNlcyArPSBmbm1hdGNoLmZpbHRlcihzcGR4X2xpY3MsIHdsZF9saWMpCisKKyAgICBsaWNlbnNlcyA9IGxpc3Qoc2V0KGxpY2Vuc2VzKSkKKyAgICByZXR1cm4gbGljZW5zZXMKKworZGVmIGluY29tcGF0aWJsZV9saWNlbnNlX2NvbnRhaW5zKGxpY2Vuc2UsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgbGljZW5zZSA9IGNhbm9uaWNhbF9saWNlbnNlKGQsIGxpY2Vuc2UpCisgICAgYmFkX2xpY2Vuc2VzID0gKGQuZ2V0VmFyKCdJTkNPTVBBVElCTEVfTElDRU5TRScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKyAgICByZXR1cm4gdHJ1ZXZhbHVlIGlmIGxpY2Vuc2UgaW4gYmFkX2xpY2Vuc2VzIGVsc2UgZmFsc2V2YWx1ZQorCitkZWYgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgZG9udF93YW50X2xpY2Vuc2VzLCBwYWNrYWdlPU5vbmUpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgcmVjaXBlIGhhcyBvbmx5IGluY29tcGF0aWJsZSBsaWNlbnNlcy4gSXQgYWxzbworICAgIHRha2UgaW50byBjb25zaWRlcmF0aW9uICdvcicgb3BlcmFuZC4gIGRvbnRfd2FudF9saWNlbnNlcyBzaG91bGQgYmUgcGFzc2VkCisgICAgYXMgY2Fub25pY2FsIChTUERYKSBuYW1lcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgb2UubGljZW5zZQorICAgIGxpY2Vuc2UgPSBkLmdldFZhcigiTElDRU5TRV8lcyIgJSBwYWNrYWdlLCBUcnVlKSBpZiBwYWNrYWdlIGVsc2UgTm9uZQorICAgIGlmIG5vdCBsaWNlbnNlOgorICAgICAgICBsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorCisgICAgIyBIYW5kbGVzIGFuICJvciIgb3IgdHdvIGxpY2Vuc2Ugc2V0cyBwcm92aWRlZCBieQorICAgICMgZmxhdHRlbmVkX2xpY2Vuc2VzKCksIHBpY2sgb25lIHRoYXQgd29ya3MgaWYgcG9zc2libGUuCisgICAgZGVmIGNob29zZV9saWNfc2V0KGEsIGIpOgorICAgICAgICByZXR1cm4gYSBpZiBhbGwob2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsIGxpYyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfd2FudF9saWNlbnNlcykgZm9yIGxpYyBpbiBhKSBlbHNlIGIKKworICAgIHRyeToKKyAgICAgICAgbGljZW5zZXMgPSBvZS5saWNlbnNlLmZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlLCBjaG9vc2VfbGljX3NldCkKKyAgICBleGNlcHQgb2UubGljZW5zZS5MaWNlbnNlRXJyb3IgYXMgZXhjOgorICAgICAgICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUCcsIFRydWUpLCBleGMpKQorICAgIHJldHVybiBhbnkobm90IG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLCBsKSwgXAorCQlkb250X3dhbnRfbGljZW5zZXMpIGZvciBsIGluIGxpY2Vuc2VzKQorCitkZWYgY2hlY2tfbGljZW5zZV9mbGFncyhkKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHJlY2lwZSBoYXMgYW55IExJQ0VOU0VfRkxBR1MgdGhhdAorICAgIGFyZW4ndCB3aGl0ZWxpc3RlZC4KKworICAgIElmIGl0IGRvZXMsIGl0IHJldHVybnMgdGhlIGZpcnN0IExJQ0VOU0VfRkxBR1MgaXRlbSBtaXNzaW5nIGZyb20gdGhlCisgICAgd2hpdGVsaXN0LCBvciBhbGwgb2YgdGhlIExJQ0VOU0VfRkxBR1MgaWYgdGhlcmUgaXMgbm8gd2hpdGVsaXN0LgorCisgICAgSWYgZXZlcnl0aGluZyBpcyBpcyBwcm9wZXJseSB3aGl0ZWxpc3RlZCwgaXQgcmV0dXJucyBOb25lLgorICAgICIiIgorCisgICAgZGVmIGxpY2Vuc2VfZmxhZ19tYXRjaGVzKGZsYWcsIHdoaXRlbGlzdCwgcG4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgZmxhZyBtYXRjaGVzIHNvbWV0aGluZyBpbiB3aGl0ZWxpc3QsIE5vbmUgaWYgbm90LgorCisgICAgICAgIEJlZm9yZSB3ZSB0ZXN0IGEgZmxhZyBhZ2FpbnN0IHRoZSB3aGl0ZWxpc3QsIHdlIGFwcGVuZCBfJHtQTn0KKyAgICAgICAgdG8gaXQuICBXZSB0aGVuIHRyeSB0byBtYXRjaCB0aGF0IHN0cmluZyBhZ2FpbnN0IHRoZQorICAgICAgICB3aGl0ZWxpc3QuICBUaGlzIGNvdmVycyB0aGUgbm9ybWFsIGNhc2UsIHdoZXJlIHdlIGV4cGVjdAorICAgICAgICBMSUNFTlNFX0ZMQUdTIHRvIGJlIGEgc2ltcGxlIHN0cmluZyBsaWtlICdjb21tZXJjaWFsJywgd2hpY2gKKyAgICAgICAgdGhlIHVzZXIgdHlwaWNhbGx5IG1hdGNoZXMgZXhhY3RseSBpbiB0aGUgd2hpdGVsaXN0IGJ5CisgICAgICAgIGV4cGxpY2l0bHkgYXBwZW5kaW5nIHRoZSBwYWNrYWdlIG5hbWUgZS5nICdjb21tZXJjaWFsX2ZvbycuCisgICAgICAgIElmIHdlIGZhaWwgdGhlIG1hdGNoIGhvd2V2ZXIsIHdlIHRoZW4gc3BsaXQgdGhlIGZsYWcgYWNyb3NzCisgICAgICAgICdfJyBhbmQgYXBwZW5kIGVhY2ggZnJhZ21lbnQgYW5kIHRlc3QgdW50aWwgd2UgZWl0aGVyIG1hdGNoIG9yCisgICAgICAgIHJ1biBvdXQgb2YgZnJhZ21lbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgZmxhZ19wbiA9ICgiJXNfJXMiICUgKGZsYWcsIHBuKSkKKyAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICBpZiBmbGFnX3BuID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBmbGFnX2N1ciA9ICIiCisgICAgICAgIGZsYWdtZW50cyA9IGZsYWdfcG4uc3BsaXQoIl8iKQorICAgICAgICBmbGFnbWVudHMucG9wKCkgIyB3ZSd2ZSBhbHJlYWR5IHRlc3RlZCB0aGUgZnVsbCBzdHJpbmcKKyAgICAgICAgZm9yIGZsYWdtZW50IGluIGZsYWdtZW50czoKKyAgICAgICAgICAgIGlmIGZsYWdfY3VyOgorICAgICAgICAgICAgICAgIGZsYWdfY3VyICs9ICJfIgorICAgICAgICAgICAgZmxhZ19jdXIgKz0gZmxhZ21lbnQKKyAgICAgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIGZsYWdfY3VyID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWxsX2xpY2Vuc2VfZmxhZ3NfbWF0Y2gobGljZW5zZV9mbGFncywgd2hpdGVsaXN0KToKKyAgICAgICAgIiIiIFJldHVybiBmaXJzdCB1bm1hdGNoZWQgZmxhZywgTm9uZSBpZiBhbGwgZmxhZ3MgbWF0Y2ggIiIiCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgc3BsaXRfd2hpdGVsaXN0ID0gd2hpdGVsaXN0LnNwbGl0KCkKKyAgICAgICAgZm9yIGZsYWcgaW4gbGljZW5zZV9mbGFncy5zcGxpdCgpOgorICAgICAgICAgICAgaWYgbm90IGxpY2Vuc2VfZmxhZ19tYXRjaGVzKGZsYWcsIHNwbGl0X3doaXRlbGlzdCwgcG4pOgorICAgICAgICAgICAgICAgIHJldHVybiBmbGFnCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBsaWNlbnNlX2ZsYWdzID0gZC5nZXRWYXIoJ0xJQ0VOU0VfRkxBR1MnLCBUcnVlKQorICAgIGlmIGxpY2Vuc2VfZmxhZ3M6CisgICAgICAgIHdoaXRlbGlzdCA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCcsIFRydWUpCisgICAgICAgIGlmIG5vdCB3aGl0ZWxpc3Q6CisgICAgICAgICAgICByZXR1cm4gbGljZW5zZV9mbGFncworICAgICAgICB1bm1hdGNoZWRfZmxhZyA9IGFsbF9saWNlbnNlX2ZsYWdzX21hdGNoKGxpY2Vuc2VfZmxhZ3MsIHdoaXRlbGlzdCkKKyAgICAgICAgaWYgdW5tYXRjaGVkX2ZsYWc6CisgICAgICAgICAgICByZXR1cm4gdW5tYXRjaGVkX2ZsYWcKKyAgICByZXR1cm4gTm9uZQorCitkZWYgY2hlY2tfbGljZW5zZV9mb3JtYXQoZCk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgTElDRU5TRSBpcyB3ZWxsIGRlZmluZWQsCisgICAgICAgIFZhbGlkYXRlIG9wZXJhdG9ycyBpbiBMSUNFTlNFUy4KKyAgICAgICAgTm8gc3BhY2VzIGFyZSBhbGxvd2VkIGJldHdlZW4gTElDRU5TRVMuCisgICAgIiIiCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGxpY2Vuc2VzID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIGZyb20gb2UubGljZW5zZSBpbXBvcnQgbGljZW5zZV9vcGVyYXRvciwgbGljZW5zZV9vcGVyYXRvcl9jaGFycywgbGljZW5zZV9wYXR0ZXJuCisKKyAgICBlbGVtZW50cyA9IGZpbHRlcihsYW1iZGEgeDogeC5zdHJpcCgpLCBsaWNlbnNlX29wZXJhdG9yLnNwbGl0KGxpY2Vuc2VzKSkKKyAgICBmb3IgcG9zLCBlbGVtZW50IGluIGVudW1lcmF0ZShlbGVtZW50cyk6CisgICAgICAgIGlmIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50KToKKyAgICAgICAgICAgIGlmIHBvcyA+IDAgYW5kIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50c1twb3MgLSAxXSk6CisgICAgICAgICAgICAgICAgYmIud2FybignJXM6IExJQ0VOU0UgdmFsdWUgIiVzIiBoYXMgYW4gaW52YWxpZCBmb3JtYXQgLSBsaWNlbnNlIG5hbWVzICcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgc2VwYXJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyB0byBpbmRpY2F0ZSAnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgbGljZW5zZSBzZWxlY3Rpb246ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAocG4sIGxpY2Vuc2VzLCBsaWNlbnNlX29wZXJhdG9yX2NoYXJzKSkKKyAgICAgICAgZWxpZiBub3QgbGljZW5zZV9vcGVyYXRvci5tYXRjaChlbGVtZW50KToKKyAgICAgICAgICAgIGJiLndhcm4oJyVzOiBMSUNFTlNFIHZhbHVlICIlcyIgaGFzIGFuIGludmFsaWQgc2VwYXJhdG9yICIlcyIgdGhhdCBpcyBub3QgJyBcCisgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgdmFsaWQgbGlzdCBvZiBzZXBhcmF0b3JzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgKHBuLCBsaWNlbnNlcywgZWxlbWVudCwgbGljZW5zZV9vcGVyYXRvcl9jaGFycykpCisKK1NTVEFURVRBU0tTICs9ICJkb19wb3B1bGF0ZV9saWMiCitkb19wb3B1bGF0ZV9saWNbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtMSUNTU1RBVEVESVJ9IgorZG9fcG9wdWxhdGVfbGljW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0xJQ0VOU0VfRElSRUNUT1JZfS8iCisKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX3ByZXBlbmQgPSAid3JpdGVfcGFja2FnZV9tYW5pZmVzdDsgbGljZW5zZV9jcmVhdGVfbWFuaWZlc3Q7ICIKKworZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lW2RpcnNdID0gIiR7TElDU1NUQVRFRElSfS8ke1BOfSIKK2RvX3BvcHVsYXRlX2xpY19zZXRzY2VuZVtjbGVhbmRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKK3B5dGhvbiBkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZTcxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDEgQEAKKyMgcGFyc2Uga2VybmVsIEFCSSB2ZXJzaW9uIG91dCBvZiA8bGludXgvdmVyc2lvbi5oPgorZGVmIGdldF9rZXJuZWx2ZXJzaW9uX2hlYWRlcnMocCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBmbiA9IHAgKyAnL2luY2x1ZGUvbGludXgvdXRzcmVsZWFzZS5oJworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICMgYWZ0ZXIgMi42LjMzLXJjMQorICAgICAgICBmbiA9IHAgKyAnL2luY2x1ZGUvZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaCcKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICBmbiA9IHAgKyAnL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oJworCisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbihmbiwgJ3InKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgbCA9IGYucmVhZGxpbmVzKCkKKyAgICBmLmNsb3NlKCkKKyAgICByID0gcmUuY29tcGlsZSgiI2RlZmluZSBVVFNfUkVMRUFTRSBcIiguKilcIiIpCisgICAgZm9yIHMgaW4gbDoKKyAgICAgICAgbSA9IHIubWF0Y2gocykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZ2V0X2tlcm5lbHZlcnNpb25fZmlsZShwKToKKyAgICBmbiA9IHAgKyAnL2tlcm5lbC1hYml2ZXJzaW9uJworCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWRsaW5lcygpWzBdLnN0cmlwKCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGxpbnV4X21vZHVsZV9wYWNrYWdlcyhzLCBkKToKKwlzdWZmaXggPSAiIgorCXJldHVybiAiICIuam9pbihtYXAobGFtYmRhIHM6ICJrZXJuZWwtbW9kdWxlLSVzJXMiICUgKHMubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKS5yZXBsYWNlKCdAJywgJysnKSwgc3VmZml4KSwgcy5zcGxpdCgpKSkKKworIyB0aGF0J3MgYWxsCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9sb2dnaW5nLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzdjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzCkBAIC0wLDAgKzEsMTAxIEBACisjIFRoZSBmb2xsb3dpbmcgbG9nZ2luZyBtZWNoYW5pc21zIGFyZSB0byBiZSB1c2VkIGluIGJhc2ggZnVuY3Rpb25zIG9mIHJlY2lwZXMuCisjIFRoZXkgYXJlIGludGVuZGVkIHRvIG1hcCBvbmUgdG8gb25lIGluIGludGVudGlvbiBhbmQgb3V0cHV0IGZvcm1hdCB3aXRoIHRoZQorIyBweXRob24gcmVjaXBlIGxvZ2dpbmcgZnVuY3Rpb25zIG9mIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbjogYmIucGxhaW4oKSwKKyMgYmIubm90ZSgpLCBldGMuCisKK0xPR0ZJRk8gPSAiJHtUfS9maWZvLiR7QG9zLmdldHBpZCgpfSIKKworIyBQcmludCB0aGUgb3V0cHV0IGV4YWN0bHkgYXMgaXQgaXMgcGFzc2VkIGluLiBUeXBpY2FsbHkgdXNlZCBmb3Igb3V0cHV0IG9mCisjIHRhc2tzIHRoYXQgc2hvdWxkIGJlIHNlZW4gb24gdGhlIGNvbnNvbGUuIFVzZSBzcGFyaW5nbHkuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYnBsYWluKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYnBsYWluICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIiQqIgorCWZpCit9CisKKyMgTm90aWZ5IHRoZSB1c2VyIG9mIGEgbm90ZXdvcnRoeSBjb25kaXRpb24uIAorIyBPdXRwdXQ6IGxvZ3MKK2Jibm90ZSgpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJub3RlICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIk5PVEU6ICQqIgorCWZpCit9CisKKyMgUHJpbnQgYSB3YXJuaW5nIHRvIHRoZSBsb2cuIFdhcm5pbmdzIGFyZSBub24tZmF0YWwsIGFuZCBkbyBub3QKKyMgaW5kaWNhdGUgYSBidWlsZCBmYWlsdXJlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJ3YXJuKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYndhcm4gJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiV0FSTklORzogJCoiCisJZmkKK30KKworIyBQcmludCBhbiBlcnJvciB0byB0aGUgbG9nLiBFcnJvcnMgYXJlIG5vbi1mYXRhbCBpbiB0aGF0IHRoZSBidWlsZCBjYW4KKyMgY29udGludWUsIGJ1dCB0aGV5IGRvIGluZGljYXRlIGEgYnVpbGQgZmFpbHVyZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2JiZXJyb3IoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZXJyb3IgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiRVJST1I6ICQqIgorCWZpCit9CisKKyMgUHJpbnQgYSBmYXRhbCBlcnJvciB0byB0aGUgbG9nLiBGYXRhbCBlcnJvcnMgaW5kaWNhdGUgYnVpbGQgZmFpbHVyZQorIyBhbmQgaGFsdCB0aGUgYnVpbGQsIGV4aXRpbmcgd2l0aCBhbiBlcnJvciBjb2RlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJmYXRhbCgpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJmYXRhbCAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJFUlJPUjogJCoiCisJZmkKKwlleGl0IDEKK30KKworIyBMaWtlIGJiZmF0YWwsIGV4Y2VwdCBwcmV2ZW50cyB0aGUgc3VwcHJlc3Npb24gb2YgdGhlIGVycm9yIGxvZyBieQorIyBiaXRiYWtlJ3MgVUkuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYmZhdGFsX2xvZygpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJmYXRhbF9sb2cgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiRVJST1I6ICQqIgorCWZpCisJZXhpdCAxCit9CisKKyMgUHJpbnQgZGVidWcgbWVzc2FnZXMuIFRoZXNlIGFyZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3Jlc3MgY2hlY2twb2ludAorIyBtZXNzYWdlcyB0byB0aGUgbG9ncy4gRGVwZW5kaW5nIG9uIHRoZSBkZWJ1ZyBsb2cgbGV2ZWwsIHRoZXkgbWF5IGFsc28KKyMgZ28gdG8gdGhlIGNvbnNvbGUuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCisjIFVzYWdlOiBiYmRlYnVnIDEgImZpcnN0IGxldmVsIGRlYnVnIG1lc3NhZ2UiCisjICAgICAgICBiYmRlYnVnIDIgInNlY29uZCBsZXZlbCBkZWJ1ZyBtZXNzYWdlIgorYmJkZWJ1ZygpIHsKKwlVU0FHRT0nVXNhZ2U6IGJiZGVidWcgWzEyM10gIm1lc3NhZ2UiJworCWlmIFsgJCMgLWx0IDIgXTsgdGhlbgorCQliYmZhdGFsICIkVVNBR0UiCisJZmkKKwkKKwkjIFN0cmlwIG9mZiB0aGUgZGVidWcgbGV2ZWwgYW5kIGVuc3VyZSBpdCBpcyBhbiBpbnRlZ2VyCisJREJHTFZMPSQxOyBzaGlmdAorCU5PTkRJR0lUUz0kKGVjaG8gIiREQkdMVkwiIHwgdHIgLWQgWzpkaWdpdDpdKQorCWlmIFsgIiROT05ESUdJVFMiIF07IHRoZW4KKwkJYmJmYXRhbCAiJFVTQUdFIgorCWZpCisKKwkjIEFsbCBkZWJ1ZyBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUgbG9ncworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYmRlYnVnICREQkdMVkwgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiREVCVUc6ICQqIgorCWZpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9tZXRhLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbWV0YS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjg5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbWV0YS5iYmNsYXNzCkBAIC0wLDAgKzEsNCBAQAorCitQQUNLQUdFUyA9ICIiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSA9ICJkb19idWlsZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdlNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21ldGFkYXRhX3NjbS5iYmNsYXNzCkBAIC0wLDAgKzEsODIgQEAKK01FVEFEQVRBX0JSQU5DSCA/PSAiJHtAYmFzZV9kZXRlY3RfYnJhbmNoKGQpfSIKK01FVEFEQVRBX1JFVklTSU9OID89ICIke0BiYXNlX2RldGVjdF9yZXZpc2lvbihkKX0iCisKK2RlZiBiYXNlX2RldGVjdF9yZXZpc2lvbihkKToKKyAgICBwYXRoID0gYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCkKKworICAgIHNjbXMgPSBbYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X3JldmlzaW9uLCBcCisgICAgICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9zdm5fcmV2aXNpb25dCisKKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHJldiA9IHNjbShwYXRoLCBkKQorICAgICAgICBpZiByZXYgIT0gIjx1bmtub3duPiI6CisgICAgICAgICAgICByZXR1cm4gcmV2CisKKyAgICByZXR1cm4gIjx1bmtub3duPiIKKworZGVmIGJhc2VfZGV0ZWN0X2JyYW5jaChkKToKKyAgICBwYXRoID0gYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCkKKworICAgIHNjbXMgPSBbYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaF0KKworICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgcmV2ID0gc2NtKHBhdGgsIGQpCisgICAgICAgIGlmIHJldiAhPSAiPHVua25vd24+IjoKKyAgICAgICAgICAgIHJldHVybiByZXYuc3RyaXAoKQorCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2dldF9zY21iYXNlcGF0aChkKToKKyAgICByZXR1cm4gZC5nZXRWYXIoICdDT1JFQkFTRScsIFRydWUpCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9tb25vdG9uZV9icmFuY2gocGF0aCwgZCk6CisgICAgbW9ub3RvbmVfYnJhbmNoID0gIjx1bmtub3duPiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiJXMvX01UTi9vcHRpb25zIiAlIHBhdGgpIGFzIGY6CisgICAgICAgICAgICBtb25vdG9uZV9icmFuY2ggPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBtb25vdG9uZV9icmFuY2guc3RhcnRzd2l0aCggImRhdGFiYXNlIiApOgorICAgICAgICAgICAgICAgIG1vbm90b25lX2JyYW5jaF93b3JkcyA9IG1vbm90b25lX2JyYW5jaC5zcGxpdCgpCisgICAgICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoID0gbW9ub3RvbmVfYnJhbmNoX3dvcmRzWyBtb25vdG9uZV9icmFuY2hfd29yZHMuaW5kZXgoICJicmFuY2giICkrMV1bMTotMV0KKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gbW9ub3RvbmVfYnJhbmNoCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9tb25vdG9uZV9yZXZpc2lvbihwYXRoLCBkKToKKyAgICBtb25vdG9uZV9yZXZpc2lvbiA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzL19NVE4vcmV2aXNpb24iICUgcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIG1vbm90b25lX3JldmlzaW9uID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbW9ub3RvbmVfcmV2aXNpb24uc3RhcnRzd2l0aCggImZvcm1hdF92ZXJzaW9uIiApOgorICAgICAgICAgICAgICAgIG1vbm90b25lX3JldmlzaW9uX3dvcmRzID0gbW9ub3RvbmVfcmV2aXNpb24uc3BsaXQoKQorICAgICAgICAgICAgICAgIG1vbm90b25lX3JldmlzaW9uID0gbW9ub3RvbmVfcmV2aXNpb25fd29yZHNbIG1vbm90b25lX3JldmlzaW9uX3dvcmRzLmluZGV4KCAib2xkX3JldmlzaW9uIiApKzFdWzE6LTFdCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gbW9ub3RvbmVfcmV2aXNpb24KKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX3N2bl9yZXZpc2lvbihwYXRoLCBkKToKKyAgICAjIFRoaXMgb25seSB3b3JrcyB3aXRoIG9sZGVyIHN1YnZlcnNpb24uIEZvciBuZXdlciB2ZXJzaW9ucyAKKyAgICAjIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGZpeGVkIGJ5IHNvbWVvbmUgaW50ZXJlc3RlZAorICAgIHJldmlzaW9uID0gIjx1bmtub3duPiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiJXMvLnN2bi9lbnRyaWVzIiAlIHBhdGgpIGFzIGY6CisgICAgICAgICAgICByZXZpc2lvbiA9IGYucmVhZGxpbmVzKClbM10uc3RyaXAoKQorICAgIGV4Y2VwdCAoSU9FcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gcmV2aXNpb24KKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2gocGF0aCwgZCk6CisgICAgYnJhbmNoID0gb3MucG9wZW4oJ2NkICVzOyBnaXQgYnJhbmNoIDI+JjEgfCBncmVwICJeKiAiIHwgdHIgLWQgIiogIicgJSBwYXRoKS5yZWFkKCkKKworICAgIGlmIGxlbihicmFuY2gpICE9IDA6CisgICAgICAgIHJldHVybiBicmFuY2gKKyAgICByZXR1cm4gIjx1bmtub3duPiIKKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihwYXRoLCBkKToKKyAgICBmID0gb3MucG9wZW4oImNkICVzOyBnaXQgbG9nIC1uIDEgLS1wcmV0dHk9b25lbGluZSAtLSAyPiYxIiAlIHBhdGgpCisgICAgZGF0YSA9IGYucmVhZCgpCisgICAgaWYgZi5jbG9zZSgpIGlzIE5vbmU6ICAgICAgICAKKyAgICAgICAgcmV2ID0gZGF0YS5zcGxpdCgiICIpWzBdCisgICAgICAgIGlmIGxlbihyZXYpICE9IDA6CisgICAgICAgICAgICByZXR1cm4gcmV2CisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTBkZjhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21pZ3JhdGVfbG9jYWxjb3VudC5iYmNsYXNzCkBAIC0wLDAgKzEsNDYgQEAKK1BSU0VSVl9EVU1QRElSID8/PSAiJHtMT0dfRElSfS9kYiIKK0xPQ0FMQ09VTlRfRFVNUEZJTEUgPz89ICIke1BSU0VSVl9EVU1QRElSfS9wcnNlcnYtbG9jYWxjb3VudC1leHBvcnRzLmluYyIKKworcHl0aG9uIG1pZ3JhdGVfbG9jYWxjb3VudF9oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIHB2ID0gZS5kYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgIGlmIG5vdCAnQVVUT0lOQycgaW4gcHY6CisgICAgICAgIHJldHVybgorCisgICAgbG9jYWxjb3VudHMgPSBiYi5wZXJzaXN0X2RhdGEucGVyc2lzdCgnQkJfVVJJX0xPQ0FMQ09VTlQnLCBlLmRhdGEpCisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcmV2cyA9IGxvY2FsY291bnRzLmdldF9ieV9wYXR0ZXJuKCclJS0lc19yZXYnICUgcG4pCisgICAgY291bnRzID0gbG9jYWxjb3VudHMuZ2V0X2J5X3BhdHRlcm4oJyUlLSVzX2NvdW50JyAlIHBuKQorICAgIGlmIG5vdCByZXZzIG9yIG5vdCBjb3VudHM6CisgICAgICAgIHJldHVybgorCisgICAgaWYgbGVuKHJldnMpICE9IGxlbihjb3VudHMpOgorICAgICAgICBiYi53YXJuKCJUaGUgbnVtYmVyIG9mIHJldnMgYW5kIGxvY2FsY291bnRzIGRvbid0IG1hdGNoIGluICVzIiAlIHBuKQorICAgICAgICByZXR1cm4KKworICAgIHZlcnNpb24gPSBlLmRhdGEuZ2V0VmFyKCdQUkFVVE9JTlgnLCBUcnVlKQorICAgIHNyY3JldiA9IGJiLmZldGNoMi5nZXRfc3JjcmV2KGUuZGF0YSkKKyAgICBiYXNlX3ZlciA9ICdBVVRPSU5DLSVzJyAlIHZlcnNpb25bOnZlcnNpb24uZmluZChzcmNyZXYpXQorICAgIHBrZ2FyY2ggPSBlLmRhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKQorICAgIHZhbHVlID0gbWF4KGludChjb3VudCkgZm9yIGNvdW50IGluIGNvdW50cykKKworICAgIGlmIGxlbihyZXZzKSA9PSAxOgorICAgICAgICBpZiBzcmNyZXYgIT0gKCdBVVRPSU5DKyVzJyAlIHJldnNbMF0pOgorICAgICAgICAgICAgdmFsdWUgKz0gMQorICAgIGVsc2U6CisgICAgICAgIHZhbHVlICs9IDEKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihlLmRhdGEuZ2V0VmFyKCdQUlNFUlZfRFVNUERJUicsIFRydWUpKQorICAgIGRmID0gZS5kYXRhLmdldFZhcignTE9DQUxDT1VOVF9EVU1QRklMRScsIFRydWUpCisgICAgZmxvY2sgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBkZikKKyAgICB3aXRoIG9wZW4oZGYsICdhJykgYXMgZmQ6CisgICAgICAgIGZkLndyaXRlKCdQUkFVVE8kJXMkJXMkJXMgPSAiJXMiXG4nICUKKyAgICAgICAgICAgICAgICAoYmFzZV92ZXIsIHBrZ2FyY2gsIHNyY3Jldiwgc3RyKHZhbHVlKSkpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShmbG9jaykKK30KKworYWRkaGFuZGxlciBtaWdyYXRlX2xvY2FsY291bnRfaGFuZGxlcgorbWlncmF0ZV9sb2NhbGNvdW50X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQYXJzZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbWltZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL21pbWUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFjNzNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21pbWUuYmJjbGFzcwpAQCAtMCwwICsxLDU2IEBACitERVBFTkRTICs9ICJzaGFyZWQtbWltZS1pbmZvLW5hdGl2ZSBzaGFyZWQtbWltZS1pbmZvIgorCittaW1lX3Bvc3RpbnN0KCkgeworaWYgWyAiJDEiID0gY29uZmlndXJlIF07IHRoZW4KKwlVUERBVEVNSU1FREI9YHdoaWNoIHVwZGF0ZS1taW1lLWRhdGFiYXNlYAorCWlmIFsgLXggIiRVUERBVEVNSU1FREIiIF0gOyB0aGVuCisJCWVjaG8gIlVwZGF0aW5nIE1JTUUgZGF0YWJhc2UuLi4gdGhpcyBtYXkgdGFrZSBhIHdoaWxlLiIKKwkJJFVQREFURU1JTUVEQiAkRCR7ZGF0YWRpcn0vbWltZQorCWVsc2UKKwkJZWNobyAiTWlzc2luZyB1cGRhdGUtbWltZS1kYXRhYmFzZSwgdXBkYXRlIG9mIG1pbWUgZGF0YWJhc2UgZmFpbGVkISIKKwkJZXhpdCAxCisJZmkKK2ZpCit9CisKK21pbWVfcG9zdHJtKCkgeworaWYgWyAiJDEiID0gcmVtb3ZlIF0gfHwgWyAiJDEiID0gdXBncmFkZSBdOyB0aGVuCisJVVBEQVRFTUlNRURCPWB3aGljaCB1cGRhdGUtbWltZS1kYXRhYmFzZWAKKwlpZiBbIC14ICIkVVBEQVRFTUlNRURCIiBdIDsgdGhlbgorCQllY2hvICJVcGRhdGluZyBNSU1FIGRhdGFiYXNlLi4uIHRoaXMgbWF5IHRha2UgYSB3aGlsZS4iCisJCSRVUERBVEVNSU1FREIgJEQke2RhdGFkaXJ9L21pbWUKKwllbHNlCisJCWVjaG8gIk1pc3NpbmcgdXBkYXRlLW1pbWUtZGF0YWJhc2UsIHVwZGF0ZSBvZiBtaW1lIGRhdGFiYXNlIGZhaWxlZCEiCisJCWV4aXQgMQorCWZpCitmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIG1pbWVfZGlyID0gJyVzLyVzL3Vzci9zaGFyZS9taW1lL3BhY2thZ2VzJyAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIG1pbWVzID0gW10KKyAgICAgICAgbWltZV9yZSA9IHJlLmNvbXBpbGUoIi4qXC54bWwkIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobWltZV9kaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihtaW1lX2Rpcik6CisgICAgICAgICAgICAgICAgaWYgbWltZV9yZS5tYXRjaChmKToKKyAgICAgICAgICAgICAgICAgICAgbWltZXMuYXBwZW5kKGYpCisgICAgICAgIGlmIG1pbWVzOgorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIG1pbWUgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignbWltZV9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisgICAgICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignbWltZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgc2hhcmVkLW1pbWUtaW5mby1kYXRhIGRlcGVuZGVuY3kgdG8gJXMiICUgcGtnKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICIgc2hhcmVkLW1pbWUtaW5mby1kYXRhIikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NmMwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKK01JUlJPUlMgKz0gIlwKKyR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDEyMDMyOFQwOTI3NTJaL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDExMDEyN1QwODQyNTdaL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDA5MDgwMlQwMDQxNTNaL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuYXUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5jbC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmhyLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuZmkuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5oay5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmh1LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaWUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5pdC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmpwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAubm8uZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5wbC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnJvLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuc2kuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5lcy5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnNlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAudHIuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0dOVV9NSVJST1J9CWZ0cDovL21pcnJvcnMua2VybmVsLm9yZy9nbnUgXG4gXAorJHtLRVJORUxPUkdfTUlSUk9SfQlodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViIFxuIFwKK2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgZnRwOi8vZnRwLmZyYW5rZW4uZGUvcHViL2NyeXB0L21pcnJvci9mdHAuZ251cGcub3JnL2djcnlwdC8gXG4gXAorZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvICAgICBmdHA6Ly9mdHAuc3VyZm5ldC5ubC9wdWIvc2VjdXJpdHkvZ251cGcvIFxuIFwKK2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgaHR0cDovL2d1bHVzLlVTaGVyYnJvb2tlLmNhL3B1Yi9hcHBsL0dudVBHLyBcbiBcCitmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJjaGl2ZSBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3RleC9DVEFOIFxuIFwKK2Z0cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGh0dHA6Ly9zdW5zaXRlLnN1dC5hYy5qcC9wdWIvYXJjaGl2ZXMvY3Rhbi8gXG4gXAorZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgaHR0cDovL2N0YW4udW5zdy5lZHUuYXUvIFxuIFwKK2Z0cDovL2Z0cC5nbnV0bHMub3JnL2djcnlwdC9nbnV0bHMgZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ251dGxzLyBcbiBcCitodHRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvIGh0dHA6Ly9taXJyb3Iuc3dpdGNoLmNoL2Z0cC9taXJyb3IvaW5mb3ppcC9zcmMvIFxuIFwKK2h0dHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy8gZnRwOi8vc3Vuc2l0ZS5pY20uZWR1LnBsL3B1Yi91bml4L2FyY2hpdmluZy9pbmZvLXppcC9zcmMvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuY2VyaWFzLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvc3lzdXRpbHMvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50YXUuYWMuaWwvcHViL3VuaXgvYWRtaW4vIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuY2VydC5kZm4uZGUvcHViL3Rvb2xzL2FkbWluL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L3Rvb2xzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAua2Fpem8ub3JnL3B1Yi9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLnR1LWRhcm1zdGFkdC5kZS9wdWIvc3lzYWRtaW4vbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9zaXRlcy92aWMuY2MucHVyZHVlLmVkdS90b29scy91bml4L2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9nZC50dXdpZW4uYWMuYXQvdXRpbHMvYWRtaW4tdG9vbHMvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL3N1bnNpdGUudWFsYmVydGEuY2EvcHViL01pcnJvci9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vdGhlLndpcmV0YXBwZWQubmV0L3B1Yi9zZWN1cml0eS9ob3N0LXNlY3VyaXR5L2xzb2YvIFxuIFwKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0ICBodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QgXG4gXAoraHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvd2F0Y2hkb2cvIGh0dHA6Ly9mb3NzaWVzLm9yZy9saW51eC9taXNjLyBcbiBcCiske1NBVkFOTkFIX0dOVV9NSVJST1J9IGh0dHA6Ly9kb3dubG9hZC1taXJyb3Iuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcyBcbiBcCiske1NBVkFOTkFIX05PTkdOVV9NSVJST1J9IGh0dHA6Ly9kb3dubG9hZC1taXJyb3Iuc2F2YW5uYWgubm9uZ251Lm9yZy9yZWxlYXNlcyBcbiBcCitjdnM6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitzdm46Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitnaXQ6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitoZzovLy4qLy4qICAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitienI6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitwNDovLy4qLy4qICAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitvc2M6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitodHRwcz8kOi8vLiovLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitmdHA6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitjdnM6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorc3ZuOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2dpdDovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitoZzovLy4qLy4qICAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorYnpyOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK3A0Oi8vLiovLiogICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitvc2M6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAoraHR0cHM/JDovLy4qLy4qIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2Z0cDovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCiske0NQQU5fTUlSUk9SfSAgaHR0cDovL2NwYW4ubWV0YWNwYW4ub3JnLyBcbiBcCiske0NQQU5fTUlSUk9SfSAgaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOLyBcbiBcCisiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbW9kdWxlLWJhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tb2R1bGUtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTI2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbW9kdWxlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDI3IEBACitpbmhlcml0IGtlcm5lbC1hcmNoCisKKyMgVGhpcyBpcyBpbnN0ZWFkIG9mIERFUEVORFMgPSAidmlydHVhbC9rZXJuZWwiCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorCitleHBvcnQgT1MgPSAiJHtUQVJHRVRfT1N9IgorZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKKworIyBUaGlzIHBvaW50cyB0byB0aGUgYnVpbGQgYXJ0ZWZhY3RzIGZyb20gdGhlIG1haW4ga2VybmVsIGJ1aWxkCisjIHN1Y2ggYXMgLmNvbmZpZyBhbmQgU3lzdGVtLm1hcAorIyBDb25mdXNpbmdseSBpdCBpcyBub3QgdGhlIG1vZHVsZSBidWlsZCBvdXRwdXQgKHdoaWNoIGlzICR7Qn0pIGJ1dAorIyB3ZSBkaWRuJ3QgcGljayB0aGUgbmFtZS4KK2V4cG9ydCBLQlVJTERfT1VUUFVUID0gIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorCitleHBvcnQgS0VSTkVMX1ZFUlNJT04gPSAiJHtAYmFzZV9yZWFkX2ZpbGUoJyR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9L2tlcm5lbC1hYml2ZXJzaW9uJyl9IgorS0VSTkVMX09CSkVDVF9TVUZGSVggPSAiLmtvIgorCisjIGtlcm5lbCBtb2R1bGVzIGFyZSBnZW5lcmFsbHkgbWFjaGluZSBzcGVjaWZpYworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBGdW5jdGlvbiB0byBlbnN1cmUgdGhlIGtlcm5lbCBzY3JpcHRzIGFyZSBjcmVhdGVkLiBFeHBlY3RlZCB0bworIyBiZSBjYWxsZWQgYmVmb3JlIGRvX2NvbXBpbGUuIFNlZSBtb2R1bGUuYmJjbGFzcyBmb3IgYW4gZXhtYXBsZS4KK2RvX21ha2Vfc2NyaXB0cygpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyAKKwltYWtlIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkgICAgICAgICAgIC1DICR7U1RBR0lOR19LRVJORUxfRElSfSBPPSR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IHNjcmlwdHMKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTUyYzBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21vZHVsZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzIgQEAKK2luaGVyaXQgbW9kdWxlLWJhc2Uga2VybmVsLW1vZHVsZS1zcGxpdAorCithZGR0YXNrIG1ha2Vfc2NyaXB0cyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29tcGlsZQorZG9fbWFrZV9zY3JpcHRzW2xvY2tmaWxlc10gPSAiJHtUTVBESVJ9L2tlcm5lbC1zY3JpcHRzLmxvY2siCitkb19tYWtlX3NjcmlwdHNbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorCitFWFRSQV9PRU1BS0UgKz0gIktFUk5FTF9TUkM9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorCittb2R1bGVfZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCW9lX3J1bm1ha2UgS0VSTkVMX1BBVEg9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICAgXAorCQkgICBLRVJORUxfVkVSU0lPTj0ke0tFUk5FTF9WRVJTSU9OfSAgICBcCisJCSAgIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkJICAgQVI9IiR7S0VSTkVMX0FSfSIgXAorCSAgICAgICAgICAgTz0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSBcCisJCSAgICR7TUFLRV9UQVJHRVRTfQorfQorCittb2R1bGVfZG9faW5zdGFsbCgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCW9lX3J1bm1ha2UgREVQTU9EPWVjaG8gSU5TVEFMTF9NT0RfUEFUSD0iJHtEfSIgXAorCSAgICAgICAgICAgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgXAorCSAgICAgICAgICAgTz0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSBcCisJICAgICAgICAgICBtb2R1bGVzX2luc3RhbGwKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworIyBhZGQgYWxsIHNwbGl0dGVkIG1vZHVsZXMgdG8gUE4gUkRFUEVORFMsIFBOIGNhbiBiZSBlbXB0eSBub3cKK0tFUk5FTF9NT0RVTEVTX01FVEFfUEFDS0FHRSA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiIKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tdWx0aWxpYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjFkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcwpAQCAtMCwwICsxLDE1MSBAQAorcHl0aG9uIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyICgpIHsKKyAgICBjbHMgPSBlLmRhdGEuZ2V0VmFyKCJCQkVYVEVORENVUlIiLCBUcnVlKQorICAgIHZhcmlhbnQgPSBlLmRhdGEuZ2V0VmFyKCJCQkVYVEVORFZBUklBTlQiLCBUcnVlKQorICAgIGlmIGNscyAhPSAibXVsdGlsaWIiIG9yIG5vdCB2YXJpYW50OgorICAgICAgICByZXR1cm4KKworICAgIGUuZGF0YS5zZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsIGUuZGF0YS5nZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsIFRydWUpKQorCisgICAgIyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUga2VybmVsIGluIG11bHRpbGliIGNvbmZpZ3MKKyAgICAjIFdlIGFsc28gc2tpcCBtdWx0aWxpYiBzZXR1cCBmb3IgbW9kdWxlIHBhY2thZ2VzLgorICAgIHByb3ZpZGVzID0gKGUuZGF0YS5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiAidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21vZHVsZS1iYXNlJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIHNob3VsZG4ndCBoYXZlIG11bHRpbGliIHZhcmlhbnRzIGZvciB0aGUga2VybmVsIikKKworICAgIHNhdmVfdmFyX25hbWU9ZS5kYXRhLmdldFZhcigiTVVMVElMSUJfU0FWRV9WQVJOQU1FIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgbmFtZSBpbiBzYXZlX3Zhcl9uYW1lLnNwbGl0KCk6CisgICAgICAgIHZhbD1lLmRhdGEuZ2V0VmFyKG5hbWUsIFRydWUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIobmFtZSArICJfTVVMVElMSUJfT1JJR0lOQUwiLCB2YWwpCisKKyAgICBvdmVycmlkZXMgPSBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkKKyAgICBwbiA9IGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpCisgICAgb3ZlcnJpZGVzID0gb3ZlcnJpZGVzLnJlcGxhY2UoInBuLSR7UE59IiwgInBuLSR7UE59OnBuLSIgKyBwbikKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdpbWFnZScsIGUuZGF0YSk6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgdmFyaWFudCArICItIikKKyAgICAgICAgZS5kYXRhLnNldFZhcigiUE4iLCB2YXJpYW50ICsgIi0iICsgZS5kYXRhLmdldFZhcigiUE4iLCBGYWxzZSkpCisgICAgICAgIHRhcmdldF92ZW5kb3IgPSBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SXyIgKyAidmlydGNsYXNzLW11bHRpbGliLSIgKyB2YXJpYW50LCBGYWxzZSkKKyAgICAgICAgaWYgdGFyZ2V0X3ZlbmRvcjoKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCB0YXJnZXRfdmVuZG9yKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZS5kYXRhKToKKyAgICAgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCB2YXJpYW50ICsgIi0iKQorICAgICAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyB2YXJpYW50CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGUuZGF0YSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBlLmRhdGEpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiV2UgY2FuJ3QgZXh0ZW5kIG5hdGl2ZSByZWNpcGVzIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGUuZGF0YSkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBlLmRhdGEpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiV2UgY2FuJ3QgZXh0ZW5kIG5hdGl2ZXNkayByZWNpcGVzIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBlLmRhdGEpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIkRvbid0IGV4dGVuZCBhbGxhcmNoIHJlY2lwZXMgd2hpY2ggYXJlIG5vdCBwYWNrYWdlZ3JvdXBzIikKKworCisgICAgIyBFeHBhbmQgdGhpcyBzaW5jZSB0aGlzIHdvbid0IHdvcmsgY29ycmVjdGx5IG9uY2Ugd2Ugc2V0IGEgbXVsdGlsaWIgaW50byBwbGFjZQorICAgIGUuZGF0YS5zZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgZS5kYXRhLmdldFZhcigiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSkKKyAKKyAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyB2YXJpYW50CisKKyAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIHZhcmlhbnQgKyAiLSIpCisgICAgZS5kYXRhLnNldFZhcigiUE4iLCB2YXJpYW50ICsgIi0iICsgZS5kYXRhLmdldFZhcigiUE4iLCBGYWxzZSkpCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisKKyAgICAjIEV4cGFuZCB0aGUgV0hJVEVMSVNUcyB3aXRoIG11bHRpbGliIHByZWZpeAorICAgIGZvciB3aGl0ZWxpc3QgaW4gWyJIT1NUVE9PTFNfV0hJVEVMSVNUX0dQTC0zLjAiLCAiV0hJVEVMSVNUX0dQTC0zLjAiLCAiTEdQTHYyX1dISVRFTElTVF9HUEwtMy4wIl06CisgICAgICAgIHBrZ3MgPSBlLmRhdGEuZ2V0VmFyKHdoaXRlbGlzdCwgVHJ1ZSkKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzLnNwbGl0KCk6CisgICAgICAgICAgICBwa2dzICs9ICIgIiArIHZhcmlhbnQgKyAiLSIgKyBwa2cKKyAgICAgICAgZS5kYXRhLnNldFZhcih3aGl0ZWxpc3QsIHBrZ3MpCisKKyAgICAjIERFRkFVTFRUVU5FIGNhbiBjaGFuZ2UgVEFSR0VUX0FSQ0ggb3ZlcnJpZGUgc28gZXhwYW5kIHRoaXMgbm93IGJlZm9yZSB1cGRhdGVfZGF0YQorICAgIG5ld3R1bmUgPSBlLmRhdGEuZ2V0VmFyKCJERUZBVUxUVFVORV8iICsgInZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudCwgRmFsc2UpCisgICAgaWYgbmV3dHVuZToKKyAgICAgICAgZS5kYXRhLnNldFZhcigiREVGQVVMVFRVTkUiLCBuZXd0dW5lKQorICAgICAgICBlLmRhdGEuc2V0VmFyKCdERUZBVUxUVFVORV9NTF8lcycgJSB2YXJpYW50LCBuZXd0dW5lKQorfQorCithZGRoYW5kbGVyIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIgorCitTVEFHSU5HQ0NfcHJlcGVuZCA9ICIke0JCRVhURU5EVkFSSUFOVH0tIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHZhcmlhbnQgPSBkLmdldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgVHJ1ZSkKKworICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorCisgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuQ2xhc3NFeHRlbmRlcih2YXJpYW50LCBkKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJQQUNLQUdFX0lOU1RBTEwiKQorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIkxJTkdVQVNfSU5TVEFMTCIpCisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiUkRFUEVORFMiKQorICAgICAgICBwaW5zdGFsbCA9IGQuZ2V0VmFyKCJMSU5HVUFTX0lOU1RBTEwiLCBUcnVlKSArICIgIiArIGQuZ2V0VmFyKCJQQUNLQUdFX0lOU1RBTEwiLCBUcnVlKQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgcGluc3RhbGwpCisgICAgICAgIGQuc2V0VmFyKCJMSU5HVUFTX0lOU1RBTEwiLCAiIikKKyAgICAgICAgIyBGSVhNRSwgd2UgbmVlZCB0byBtYXAgdGhpcyB0byBzb21ldGhpbmcsIG5vdCBkZWxldGUgaXQhCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiLCAiIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BvcHVsYXRlX3Nka19iYXNlJywgZCk6CisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLIikKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkiKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIkRFUEVORFMiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlBST1ZJREVTIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgY2xzZXh0ZW5kLnJlbmFtZV9wYWNrYWdlcygpCisgICAgY2xzZXh0ZW5kLnJlbmFtZV9wYWNrYWdlX3ZhcmlhYmxlcygoZC5nZXRWYXIoIlBBQ0tBR0VWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisKKyAgICBjbHNleHRlbmQubWFwX3BhY2thZ2V2YXJzKCkKKyAgICBjbHNleHRlbmQubWFwX3JlZ2V4cF92YXJpYWJsZSgiUEFDS0FHRVNfRFlOQU1JQyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUEFDS0FHRV9JTlNUQUxMIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJJTklUU0NSSVBUX1BBQ0tBR0VTIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJVU0VSQUREX1BBQ0tBR0VTIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJTWVNURU1EX1BBQ0tBR0VTIikKK30KKworUEFDS0FHRUZVTkNTX2FwcGVuZCA9ICIgZG9fcGFja2FnZV9xYV9tdWx0aWxpYiIKKworcHl0aG9uIGRvX3BhY2thZ2VfcWFfbXVsdGlsaWIoKSB7CisKKyAgICBkZWYgY2hlY2tfbWxwcmVmaXgocGtnLCB2YXIsIG1scHJlZml4KToKKyAgICAgICAgdmFsdWVzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCclc18lcycgJSAodmFyLCBwa2cpLCBUcnVlKSBvciBkLmdldFZhcih2YXIsIFRydWUpIG9yICIiKQorICAgICAgICBjYW5kaWRhdGVzID0gW10KKyAgICAgICAgZm9yIGkgaW4gdmFsdWVzOgorICAgICAgICAgICAgaWYgaS5zdGFydHN3aXRoKCd2aXJ0dWFsLycpOgorICAgICAgICAgICAgICAgIGkgPSBpW2xlbigndmlydHVhbC8nKTpdCisgICAgICAgICAgICBpZiAobm90IGkuc3RhcnRzd2l0aCgna2VybmVsLW1vZHVsZScpKSBhbmQgKG5vdCBpLnN0YXJ0c3dpdGgobWxwcmVmaXgpKSBhbmQgXAorICAgICAgICAgICAgICAgIChub3QgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBpKSBhbmQgKG5vdCBpLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSkgYW5kIFwKKyAgICAgICAgICAgICAgICAobm90IGkuc3RhcnRzd2l0aCgicnRsZCIpKSBhbmQgKG5vdCBpLnN0YXJ0c3dpdGgoJ2tlcm5lbC12bWxpbnV4JykpOgorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGkpCisgICAgICAgIGlmIGxlbihjYW5kaWRhdGVzKSA+IDA6CisgICAgICAgICAgICBtc2cgPSAiJXMgcGFja2FnZSAlcyAtIHN1c3BpY2lvdXMgdmFsdWVzICclcycgaW4gJXMiIFwKKyAgICAgICAgICAgICAgICAgICAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCAnICcuam9pbihjYW5kaWRhdGVzKSwgdmFyKQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoIm11bHRpbGliIiwgbXNnLCBkKQorCisgICAgbWwgPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgIGlmIG5vdCBtbDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSREVQRU5EUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSUFJPVklERVMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlJFQ09NTUVORFMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlNVR0dFU1RTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JSRVBMQUNFUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSQ09ORkxJQ1RTJywgbWwpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyY2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9nbG9iYWwuYmJjbGFzcwpAQCAtMCwwICsxLDE2MiBAQAorZGVmIHByZWZlcnJlZF9tbF91cGRhdGVzKGQpOgorICAgICMgSWYgYW55IFBSRUZFUlJFRF9QUk9WSURFUiBvciBQUkVGRVJSRURfVkVSU0lPTiBhcmUgc2V0LAorICAgICMgd2UgbmVlZCB0byBtaXJyb3IgdGhlc2UgdmFyaWFibGVzIGluIHRoZSBtdWx0aWxpYiBjYXNlOworICAgIG11bHRpbGlicyA9IGQuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKSBvciAiIgorICAgIGlmIG5vdCBtdWx0aWxpYnM6CisgICAgICAgIHJldHVybgorCisgICAgcHJlZml4ZXMgPSBbXQorICAgIGZvciBleHQgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICBpZiBsZW4oZWV4dCkgPiAxIGFuZCBlZXh0WzBdID09ICdtdWx0aWxpYic6CisgICAgICAgICAgICBwcmVmaXhlcy5hcHBlbmQoZWV4dFsxXSkKKworICAgIHZlcnNpb25zID0gW10KKyAgICBwcm92aWRlcnMgPSBbXQorICAgIGZvciB2IGluIGQua2V5cygpOgorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgoIlBSRUZFUlJFRF9WRVJTSU9OXyIpOgorICAgICAgICAgICAgdmVyc2lvbnMuYXBwZW5kKHYpCisgICAgICAgIGlmIHYuc3RhcnRzd2l0aCgiUFJFRkVSUkVEX1BST1ZJREVSXyIpOgorICAgICAgICAgICAgcHJvdmlkZXJzLmFwcGVuZCh2KQorCisgICAgZm9yIHYgaW4gdmVyc2lvbnM6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHYsIEZhbHNlKQorICAgICAgICBwa2cgPSB2LnJlcGxhY2UoIlBSRUZFUlJFRF9WRVJTSU9OXyIsICIiKQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoIi1uYXRpdmUiKSBvciAiLWNyb3Nzc2RrLSIgaW4gcGtnIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAnLWNyb3NzLScgaW4gcGtnIGFuZCAnJHsnIGluIHBrZzoKKyAgICAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBpZiAiLWNhbmFkaWFuLSIgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCh2KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKHYpLnJlcGxhY2UoIlBSRUZFUlJFRF9WRVJTSU9OXyIsICJQUkVGRVJSRURfVkVSU0lPTl8iICsgcCArICctJykKKyAgICAgICAgICAgICAgICBpZiBuZXduYW1lICE9IHY6CisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCA9IGxvY2FsZGF0YS5leHBhbmQodmFsKQorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcihuZXduYW1lLCBuZXd2YWwpCisgICAgICAgICAgICAjIEF2b2lkIGZ1dHVyZSB2YXJpYWJsZSBrZXkgZXhwYW5zaW9uCisgICAgICAgICAgICB2ZXhwID0gZC5leHBhbmQodikKKyAgICAgICAgICAgIGlmIHYgIT0gdmV4cCBhbmQgZC5nZXRWYXIodiwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQucmVuYW1lVmFyKHYsIHZleHApCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIG5ld25hbWUgPSAiUFJFRkVSUkVEX1ZFUlNJT05fIiArIHAgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgdmFsKQorCisgICAgZm9yIHByb3YgaW4gcHJvdmlkZXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcihwcm92LCBGYWxzZSkKKyAgICAgICAgcGtnID0gcHJvdi5yZXBsYWNlKCJQUkVGRVJSRURfUFJPVklERVJfIiwgIiIpCisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3NzZGstIiBpbiBwa2cgb3IgcGtnLnN0YXJ0c3dpdGgoKCJuYXRpdmVzZGstIiwgInZpcnR1YWwvbmF0aXZlc2RrLSIpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmICdjcm9zcy1jYW5hZGlhbicgaW4gcGtnOgorICAgICAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgcAorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKHByb3YpCisgICAgICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSBwcm92OgorICAgICAgICAgICAgICAgICAgICBuZXd2YWwgPSBsb2NhbGRhdGEuZXhwYW5kKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbmV3dmFsKQorICAgICAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICAgICAgcHJvdmV4cCA9IGQuZXhwYW5kKHByb3YpCisgICAgICAgICAgICBpZiBwcm92ICE9IHByb3ZleHAgYW5kIGQuZ2V0VmFyKHByb3YsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnJlbmFtZVZhcihwcm92LCBwcm92ZXhwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdmlydCA9ICIiCisgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKCJ2aXJ0dWFsLyIpOgorICAgICAgICAgICAgcGtnID0gcGtnLnJlcGxhY2UoInZpcnR1YWwvIiwgIiIpCisgICAgICAgICAgICB2aXJ0ID0gInZpcnR1YWwvIgorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIGlmIHBrZyAhPSAia2VybmVsIjoKKyAgICAgICAgICAgICAgICBuZXd2YWwgPSBwICsgIi0iICsgdmFsCisKKyAgICAgICAgICAgICMgaW1wbGVtZW50IHZhcmlhYmxlIGtleXMKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgcAorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKHByb3YpCisgICAgICAgICAgICBpZiBuZXduYW1lICE9IHByb3YgYW5kIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbG9jYWxkYXRhLmV4cGFuZChuZXd2YWwpKQorCisgICAgICAgICAgICAjIGltcGxlbWVudCBhbHRlcm5hdGl2ZSBtdWx0aWxpYiBuYW1lCisgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCgiUFJFRkVSUkVEX1BST1ZJREVSXyIgKyB2aXJ0ICsgcCArICItIiArIHBrZykKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbG9jYWxkYXRhLmV4cGFuZChuZXd2YWwpKQorICAgICAgICAjIEF2b2lkIGZ1dHVyZSB2YXJpYWJsZSBrZXkgZXhwYW5zaW9uCisgICAgICAgIHByb3ZleHAgPSBkLmV4cGFuZChwcm92KQorICAgICAgICBpZiBwcm92ICE9IHByb3ZleHAgYW5kIGQuZ2V0VmFyKHByb3YsIEZhbHNlKToKKyAgICAgICAgICAgIGQucmVuYW1lVmFyKHByb3YsIHByb3ZleHApCisKKworICAgIG1wID0gKGQuZ2V0VmFyKCJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGV4dHJhbXAgPSBbXQorICAgIGZvciBwIGluIG1wOgorICAgICAgICBpZiBwLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zc3Nkay0iIGluIHAgb3IgcC5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSkgb3IgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBwOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdmlydCA9ICIiCisgICAgICAgIGlmIHAuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoInZpcnR1YWwvIiwgIiIpCisgICAgICAgICAgICB2aXJ0ID0gInZpcnR1YWwvIgorICAgICAgICBmb3IgcHJlZiBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIGV4dHJhbXAuYXBwZW5kKHZpcnQgKyBwcmVmICsgIi0iICsgcCkKKyAgICBkLnNldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgIiAiLmpvaW4obXAgKyBleHRyYW1wKSkKKworcHl0aG9uIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX3ZlbmRvciAoKSB7CisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICBmb3IgdiBpbiBlLmRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SX3ZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiVEFSR0VUX1ZFTkRPUl92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHYsIGUuZGF0YS5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBGYWxzZSkgKyAibWwiICsgdikKKyAgICAgICAgcHJlZmVycmVkX21sX3VwZGF0ZXMoZS5kYXRhKQorfQorYWRkaGFuZGxlciBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3IKK211bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX3ZlbmRvcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCIKKworcHl0aG9uIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX2dsb2JhbCAoKSB7CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICB2YXJpYW50ID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgVHJ1ZSkKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUmVjaXBlUGFyc2VkKSBhbmQgbm90IHZhcmlhbnQ6CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGUuZGF0YSkgb3IgXAorICAgICAgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBlLmRhdGEpIG9yIFwKKyAgICAgICAgICAgIChiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZS5kYXRhKSBhbmRcCisgICAgICAgICAgICAgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGUuZGF0YSkpOgorICAgICAgICAgICAgdmFyaWFudHMgPSAoZS5kYXRhLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgICAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKyAgICAgICAgICAgIGNsc2V4dGVuZHMgPSBbXQorICAgICAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICAgICAgY2xzZXh0ZW5kcy5hcHBlbmQob2UuY2xhc3NleHRlbmQuQ2xhc3NFeHRlbmRlcih2YXJpYW50LCBlLmRhdGEpKQorCisgICAgICAgICAgICAjIFByb2Nlc3MgUFJPVklERVMKKyAgICAgICAgICAgIG9yaWdwcm92cyA9IHByb3ZzID0gZS5kYXRhLmdldFZhcigiUFJPVklERVMiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZm9yIGNsc2V4dGVuZCBpbiBjbHNleHRlbmRzOgorICAgICAgICAgICAgICAgIHByb3ZzID0gcHJvdnMgKyAiICIgKyBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQUk9WSURFUyIsIHNldHZhcj1GYWxzZSkKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlBST1ZJREVTIiwgcHJvdnMpCisKKyAgICAgICAgICAgICMgUHJvY2VzcyBSUFJPVklERVMKKyAgICAgICAgICAgIG9yaWdycHJvdnMgPSBycHJvdnMgPSBlLmRhdGEuZ2V0VmFyKCJSUFJPVklERVMiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZm9yIGNsc2V4dGVuZCBpbiBjbHNleHRlbmRzOgorICAgICAgICAgICAgICAgIHJwcm92cyA9IHJwcm92cyArICIgIiArIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlJQUk9WSURFUyIsIHNldHZhcj1GYWxzZSkKKyAgICAgICAgICAgIGlmIHJwcm92cy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlJQUk9WSURFUyIsIHJwcm92cykKKworCSAgICAjIFByb2Nlc3MgUlBST1ZJREVTXyR7UE59Li4uCisgICAgICAgICAgICBmb3IgcGtnIGluIChlLmRhdGEuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIG9yaWdycHJvdnMgPSBycHJvdnMgPSBlLmRhdGEuZ2V0VmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICAgICAgcnByb3ZzID0gcnByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUlBST1ZJREVTXyVzIiAlIHBrZywgc2V0dmFyPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICBycHJvdnMgPSBycHJvdnMgKyAiICIgKyBjbHNleHRlbmQuZXh0bmFtZSArICItIiArIHBrZworICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlJQUk9WSURFU18lcyIgJSBwa2csIHJwcm92cykKK30KKworYWRkaGFuZGxlciBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWwKK211bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX2dsb2JhbFtldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTBhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfaGVhZGVyLmJiY2xhc3MKQEAgLTAsMCArMSw1NCBAQAoraW5oZXJpdCBzaXRlaW5mbworCisjIElmIGFwcGxpY2FibGUgb24gdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyByb3V0aW5lIHdpbGwgcmVuYW1lIHRoZSBoZWFkZXIgYW5kCisjIGFkZCBhIHVuaXF1ZSBpZGVudGlmaWVyIHRvIHRoZSBuYW1lIGZvciB0aGUgQUJJL2JpdHNpemUgdGhhdCBpcyBiZWluZyB1c2VkLgorIyBBIHdyYXBwZXIgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCBrbm93cyBob3cgdG8gY2FsbAorIyBhbGwgb2YgdGhlIEFCSSB2YXJpYW50cyBmb3IgdGhhdCBnaXZlbiBhcmNoaXRlY3R1cmUuCisjCitvZV9tdWx0aWxpYl9oZWFkZXIoKSB7CisKKwljYXNlICR7SE9TVF9PU30gaW4KKwkqLW11c2wqKQorCQlyZXR1cm4KKwkJOzsKKwkqKQorCWVzYWMKKyAgICAgICAgIyBXZSB1c2UKKyAgICAgICAgIyBGb3IgQVJNOiBXZSBkb24ndCBzdXBwb3J0IG11bHRpbGliIGJ1aWxkcy4KKyAgICAgICAgIyBGb3IgTUlQUzogIm4zMiIgaXMgYSBzcGVjaWFsIGNhc2UsIHdoaWNoIG5lZWRzIHRvIGJlCisgICAgICAgICMgZGlzdGluY3QgZnJvbSBib3RoIDY0LWJpdCBhbmQgMzItYml0LgorICAgICAgICBjYXNlICR7VEFSR0VUX0FSQ0h9IGluCisgICAgICAgIGFybSopICAgcmV0dXJuCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgbWlwcyopICBjYXNlICIke01JUFNQS0dTRlhfQUJJfSIgaW4KKyAgICAgICAgICAgICAgICAiLW4zMiIpCisgICAgICAgICAgICAgICAgICAgICAgIGlkZW50PW4zMiAgIAorICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQ9JHtTSVRFSU5GT19CSVRTfQorICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAqKSAgICAgIGlkZW50PSR7U0lURUlORk9fQklUU30KKyAgICAgICAgZXNhYworCWlmIGVjaG8gJHtUQVJHRVRfQVJDSH0gfCBncmVwIC1xIGFybTsgdGhlbgorCSAgICByZXR1cm4KKwlmaQorCWZvciBlYWNoX2hlYWRlciBpbiAiJEAiIDsgZG8KKwkgICBpZiBbICEgLWYgIiR7RH0vJHtpbmNsdWRlZGlyfS8kZWFjaF9oZWFkZXIiIF07IHRoZW4KKwkgICAgICBiYmVycm9yICJvZV9tdWx0aWxpYl9oZWFkZXI6IFVuYWJsZSB0byBmaW5kIGhlYWRlciAkZWFjaF9oZWFkZXIuIgorCSAgICAgIGNvbnRpbnVlCisJICAgZmkKKwkgICBzdGVtPSQoZWNobyAkZWFjaF9oZWFkZXIgfCBzZWQgJ3MjXC5oJCMjJykKKwkgICAjIGlmIG1pcHM2NC9uMzIgc2V0IGlkZW50IHRvIG4zMgorCSAgIG12ICR7RH0vJHtpbmNsdWRlZGlyfS8kZWFjaF9oZWFkZXIgJHtEfS8ke2luY2x1ZGVkaXJ9LyR7c3RlbX0tJHtpZGVudH0uaAorCisJICAgc2VkIC1lICJzI0VOVEVSX0hFQURFUl9GSUxFTkFNRV9IRVJFIyR7c3RlbX0jZyIgJHtDT1JFQkFTRX0vc2NyaXB0cy9tdWx0aWxpYl9oZWFkZXJfd3JhcHBlci5oID4gJHtEfS8ke2luY2x1ZGVkaXJ9LyRlYWNoX2hlYWRlcgorCWRvbmUKK30KKworIyBEZXBlbmRlbmNpZXMgb24gYXJjaCB2YXJpYWJsZXMgbGlrZSBNSVBTUEtHU0ZYX0FCSSBjYW4gYmUgcHJvYmxlbWF0aWMuCisjIFdlIGRvbid0IG5lZWQgbXVsdGlsaWIgaGVhZGVycyBmb3IgbmF0aXZlIGJ1aWxkcyBzbyBicnV0ZSBmb3JjZSB0aGluZ3MuCitvZV9tdWx0aWxpYl9oZWFkZXJfY2xhc3MtbmF0aXZlICgpIHsKKwlyZXR1cm4KK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2JjZDYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL25hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTgzIEBACisjIFdlIHdhbnQgbmF0aXZlIHBhY2thZ2VzIHRvIGJlIHJlbG9jYXRhYmxlCitpbmhlcml0IHJlbG9jYXRhYmxlCisKKyMgTmF0aXZlIHBhY2thZ2VzIGFyZSBidWlsdCBpbmRpcmVjdGx5IHZpYSBkZXBlbmRlbmN5LAorIyBubyBuZWVkIGZvciB0aGVtIHRvIGJlIGEgZGlyZWN0IHRhcmdldCBvZiAnd29ybGQnCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworUEFDS0FHRVMgPSAiIgorUEFDS0FHRVNfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRV9BUkNIID0gIiR7QlVJTERfQVJDSH0iCisKKyMgdXNlZCBieSBjbWFrZSBjbGFzcworT0VDTUFLRV9SUEFUSCA9ICIke2xpYmRpcn0iCitPRUNNQUtFX1JQQVRIX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0iCisKKyMgV2hlbiB0aGlzIGNsYXNzIGhhcyBwYWNrYWdpbmcgZW5hYmxlZCwgc2V0dGluZyAKKyMgUlBST1ZJREVTIGJlY29tZXMgdW5uZWNlc3NhcnkuCitSUFJPVklERVMgPSAiJHtQTn0iCisKK1RBUkdFVF9BUkNIID0gIiR7QlVJTERfQVJDSH0iCitUQVJHRVRfT1MgPSAiJHtCVUlMRF9PU30iCitUQVJHRVRfVkVORE9SID0gIiR7QlVJTERfVkVORE9SfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtCVUlMRF9QUkVGSVh9IgorVEFSR0VUX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK1RBUkdFVF9MRF9BUkNIID0gIiR7QlVJTERfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorVEFSR0VUX0NQUEZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorVEFSR0VUX0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitUQVJHRVRfQ1hYRkxBR1MgPSAiJHtCVUlMRF9DWFhGTEFHU30iCitUQVJHRVRfTERGTEFHUyA9ICIke0JVSUxEX0xERkxBR1N9IgorVEFSR0VUX0ZQVSA9ICIiCisKK0hPU1RfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorSE9TVF9PUyA9ICIke0JVSUxEX09TfSIKK0hPU1RfVkVORE9SID0gIiR7QlVJTERfVkVORE9SfSIKK0hPU1RfUFJFRklYID0gIiR7QlVJTERfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke0JVSUxEX0NDX0FSQ0h9IgorSE9TVF9MRF9BUkNIID0gIiR7QlVJTERfTERfQVJDSH0iCitIT1NUX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRF9DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEX0xERkxBR1N9IgorTERGTEFHU19idWlsZC1kYXJ3aW4gPSAiLUwke1NUQUdJTkdfTElCRElSX05BVElWRX0gIgorCitTVEFHSU5HX0JJTkRJUiA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0iCitTVEFHSU5HX0JJTkRJUl9DUk9TUyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0iCisKKyMgbmF0aXZlIHBrZyBkb2Vzbid0IG5lZWQgdGhlIFRPT0xDSEFJTl9PUFRJT05TLgorVE9PTENIQUlOX09QVElPTlMgPSAiIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUiCisKKyMgRG9uJ3QgYnVpbGQgcHRlc3QgbmF0aXZlbHkKK1BURVNUX0VOQUJMRUQgPSAiMCIKKworIyBEb24ndCB1c2Ugc2l0ZSBmaWxlcyBmb3IgbmF0aXZlIGJ1aWxkcworZXhwb3J0IENPTkZJR19TSVRFID0gIiR7Q09SRUJBU0V9L21ldGEvc2l0ZS9uYXRpdmUiCisKKyMgc2V0IHRoZSBjb21waWxlciBhcyB3ZWxsLiBJdCBjb3VsZCBoYXZlIGJlZW4gc2V0IHRvIHNvbWV0aGluZyBlbHNlCitleHBvcnQgQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgQ1hYID0gIiR7QlVJTERfQ1hYfSIKK2V4cG9ydCBGQyA9ICIke0JVSUxEX0ZDfSIKK2V4cG9ydCBDUFAgPSAiJHtCVUlMRF9DUFB9IgorZXhwb3J0IExEID0gIiR7QlVJTERfTER9IgorZXhwb3J0IENDTEQgPSAiJHtCVUlMRF9DQ0xEfSIKK2V4cG9ydCBBUiA9ICIke0JVSUxEX0FSfSIKK2V4cG9ydCBBUyA9ICIke0JVSUxEX0FTfSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtCVUlMRF9SQU5MSUJ9IgorZXhwb3J0IFNUUklQID0gIiR7QlVJTERfU1RSSVB9IgorZXhwb3J0IE5NID0gIiR7QlVJTERfTk19IgorCisjIFBhdGggcHJlZml4ZXMKK2Jhc2VfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorZXhlY19wcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKKworYmluZGlyID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSIKK3NiaW5kaXIgPSAiJHtTVEFHSU5HX1NCSU5ESVJfTkFUSVZFfSIKK2xpYmRpciA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0iCitpbmNsdWRlZGlyID0gIiR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKK3N5c2NvbmZkaXIgPSAiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9IgorZGF0YWRpciA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9IgorCitiYXNlbGliID0gImxpYiIKKworIyBMaWJ0b29sJ3MgZGVmYXVsdCBwYXRocyBhcmUgY29ycmVjdCBmb3IgdGhlIG5hdGl2ZSBtYWNoaW5lCitsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1t1bmV4cG9ydF0gPSAiMSIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPz0gIiIKK2JpbmRpciAuPSAiJHtOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWH0iCitsaWJkaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorbGliZXhlY2RpciAuPSAiJHtOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWH0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0vIgorCisjIFNpbmNlIHdlIGFjdHVhbGx5IGluc3RhbGwgdGhlc2UgaW50byBzaXR1IHRoZXJlIGlzIG5vIHN0YWdpbmcgcHJlZml4CitTVEFHSU5HX0RJUl9IT1NUID0gIiIKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIiCitQS0dfQ09ORklHX0RJUiA9ICIke2xpYmRpcn0vcGtnY29uZmlnIgorCitFWFRSQV9OQVRJVkVfUEtHQ09ORklHX1BBVEggPz0gIiIKK1BLR19DT05GSUdfUEFUSCAuPSAiJHtFWFRSQV9OQVRJVkVfUEtHQ09ORklHX1BBVEh9IgorUEtHX0NPTkZJR19TWVNST09UX0RJUiA9ICIiCisKKyMgd2UgZG9udCB3YW50IGxpYmMtdWNsaWJjIG9yIGxpYmMtZ2xpYmMgdG8ga2ljayBpbiBmb3IgbmF0aXZlIHJlY2lwZXMKK0xJQkNPVkVSUklERSA9ICIiCitDTEFTU09WRVJSSURFID0gImNsYXNzLW5hdGl2ZSIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorCitQQVRIX3ByZXBlbmQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0cy9uYXRpdmUtaW50ZXJjZXB0OiIKKworcHl0aG9uIG5hdGl2ZV92aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgY2xhc3NleHRlbmQgPSBlLmRhdGEuZ2V0VmFyKCdCQkNMQVNTRVhURU5EJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiAibmF0aXZlIiBub3QgaW4gY2xhc3NleHRlbmQ6CisgICAgICAgIHJldHVybgorCisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgbm90IHBuLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIG1hcF9kZXBlbmRlbmNpZXModmFybmFtZSwgZCwgc3VmZml4ID0gIiIpOgorICAgICAgICBpZiBzdWZmaXg6CisgICAgICAgICAgICB2YXJuYW1lID0gdmFybmFtZSArICJfIiArIHN1ZmZpeAorICAgICAgICBkZXBzID0gZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGRlcHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkZXBzKQorICAgICAgICBuZXdkZXBzID0gW10KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgaWYgZGVwID09IHBuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmICItY3Jvc3MtIiBpbiBkZXA6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwLnJlcGxhY2UoIi1jcm9zcyIsICItbmF0aXZlIikpCisgICAgICAgICAgICBlbGlmIG5vdCBkZXAuZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXAgKyAiLW5hdGl2ZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKGRlcCkKKyAgICAgICAgZC5zZXRWYXIodmFybmFtZSwgIiAiLmpvaW4obmV3ZGVwcykpCisKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1uYXRpdmUiKQorCisgICAgbWFwX2RlcGVuZGVuY2llcygiREVQRU5EUyIsIGUuZGF0YSkKKyAgICBmb3IgcGtnIGluIFtlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpLCAiIiwgIiR7UE59Il06CisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJERVBFTkRTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJSRUNPTU1FTkRTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJTVUdHRVNUUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSUFJPVklERVMiLCBlLmRhdGEsIHBrZykKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUlJFUExBQ0VTIiwgZS5kYXRhLCBwa2cpCisKKyAgICBwcm92aWRlcyA9IGUuZGF0YS5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkKKyAgICBucHJvdmlkZXMgPSBbXQorICAgIGZvciBwcm92IGluIHByb3ZpZGVzLnNwbGl0KCk6CisgICAgICAgIGlmIHByb3YuZmluZChwbikgIT0gLTE6CisgICAgICAgICAgICBucHJvdmlkZXMuYXBwZW5kKHByb3YpCisgICAgICAgIGVsaWYgbm90IHByb3YuZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgIG5wcm92aWRlcy5hcHBlbmQocHJvdi5yZXBsYWNlKHByb3YsIHByb3YgKyAiLW5hdGl2ZSIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbnByb3ZpZGVzLmFwcGVuZChwcm92KQorICAgIGUuZGF0YS5zZXRWYXIoIlBST1ZJREVTIiwgJyAnLmpvaW4obnByb3ZpZGVzKSkKKworCit9CisKK2FkZGhhbmRsZXIgbmF0aXZlX3ZpcnRjbGFzc19oYW5kbGVyCituYXRpdmVfdmlydGNsYXNzX2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSIKKworZGVsdGFzayBwYWNrYWdlCitkZWx0YXNrIHBhY2thZ2VkYXRhCitkZWx0YXNrIHBhY2thZ2VfcWEKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9pcGsKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9kZWIKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9ycG0KK2RlbHRhc2sgcGFja2FnZV93cml0ZQorCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworVVNFX05MUyA9ICJubyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzRkYTYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL25hdGl2ZXNkay5iYmNsYXNzCkBAIC0wLDAgKzEsOTcgQEAKKyMgU0RLIHBhY2thZ2VzIGFyZSBidWlsdCBlaXRoZXIgZXhwbGljaXRseSBieSB0aGUgdXNlciwKKyMgb3IgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeS4gIE5vIG5lZWQgdG8gYmUgaW4gJ3dvcmxkJy4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4gPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1NES19BUkNIfSR7U0RLX1ZFTkRPUn0tJHtTREtfT1N9IgorCisjIGxpYmMgZm9yIHRoZSBTREsgY2FuIGJlIGRpZmZlcmVudCB0byB0aGF0IG9mIHRoZSB0YXJnZXQKK05BVElWRVNES0xJQkMgPz0gImxpYmMtZ2xpYmMiCitMSUJDT1ZFUlJJREUgPSAiOiR7TkFUSVZFU0RLTElCQ30iCitDTEFTU09WRVJSSURFID0gImNsYXNzLW5hdGl2ZXNkayIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorCisjCisjIFVwZGF0ZSBQQUNLQUdFX0FSQ0ggYW5kIFBBQ0tBR0VfQVJDSFMKKyMKK1BBQ0tBR0VfQVJDSCA9ICIke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iCitQQUNLQUdFX0FSQ0hTID0gIiR7U0RLX1BBQ0tBR0VfQVJDSFN9IgorCisjCisjIFdlIG5lZWQgY2hycGF0aCA+PSAwLjE0IHRvIGVuc3VyZSB3ZSBjYW4gZGVhbCB3aXRoIDMyIGFuZCA2NCBiaXQKKyMgYmluYXJpZXMKKyMKK0RFUEVORFNfYXBwZW5kID0gIiBjaHJwYXRoLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0VYVFJBTkFUSVZFUEFUSCArPSAiY2hycGF0aC1uYXRpdmUiCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9IgorU1RBR0lOR19ESVJfVEFSR0VUID0gIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorUEtHREFUQV9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9wa2dkYXRhIgorCitIT1NUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorSE9TVF9PUyA9ICIke1NES19PU30iCitIT1NUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorSE9TVF9MRF9BUkNIID0gIiR7U0RLX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorI0hPU1RfU1lTID0gIiR7SE9TVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworVEFSR0VUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitUQVJHRVRfVkVORE9SID0gIiR7U0RLX1ZFTkRPUn0iCitUQVJHRVRfT1MgPSAiJHtTREtfT1N9IgorVEFSR0VUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorVEFSR0VUX0NDX0FSQ0ggPSAiJHtTREtfQ0NfQVJDSH0iCitUQVJHRVRfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK1RBUkdFVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorVEFSR0VUX0ZQVSA9ICIiCitFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUID0gIiIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEU0RLX0xERkxBR1N9IgorCisjIENoYW5nZSB0byBwbGFjZSBmaWxlcyBpbiBTREtQQVRICitiYXNlX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9IgorcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiYXNlbGliID0gImxpYiIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorCitleHBvcnQgUEtHX0NPTkZJR19ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZGlyfS9wa2djb25maWciCitleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9IgorCitweXRob24gbmF0aXZlc2RrX3ZpcnRjbGFzc19oYW5kbGVyICgpIHsKKyAgICBwbiA9IGUuZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgKHBuLmVuZHN3aXRoKCItbmF0aXZlc2RrIikgb3IgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsICJuYXRpdmVzZGstIikKKyAgICBlLmRhdGEuc2V0VmFyKCJQTiIsICJuYXRpdmVzZGstIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSkucmVwbGFjZSgiLW5hdGl2ZXNkayIsICIiKS5yZXBsYWNlKCJuYXRpdmVzZGstIiwgIiIpKQorICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW5hdGl2ZXNkayIpCit9CisKK3B5dGhvbiAoKSB7CisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIG5vdCBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgIHJldHVybgorCisgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCisKKyAgICBjbHNleHRlbmQgPSBvZS5jbGFzc2V4dGVuZC5OYXRpdmVzZGtDbGFzc0V4dGVuZGVyKCJuYXRpdmVzZGsiLCBkKQorICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZXMoKQorICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoKGQuZ2V0VmFyKCJQQUNLQUdFVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorCisgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJERVBFTkRTIikKKyAgICBjbHNleHRlbmQubWFwX3BhY2thZ2V2YXJzKCkKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQUk9WSURFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF9yZWdleHBfdmFyaWFibGUoIlBBQ0tBR0VTX0RZTkFNSUMiKQorfQorCithZGRoYW5kbGVyIG5hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlcgorbmF0aXZlc2RrX3ZpcnRjbGFzc19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UiCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitVU0VfTkxTID0gIiR7U0RLVVNFX05MU30iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwNTFjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9vZWxpbnQuYmJjbGFzcwpAQCAtMCwwICsxLDg0IEBACithZGR0YXNrIGxpbnQgYmVmb3JlIGRvX2J1aWxkCitkb19saW50W25vc3RhbXBdID0gIjEiCitweXRob24gZG9fbGludCgpIHsKKyAgICBwa2duYW1lID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgVGVzdCB0aGF0IERFU0NSSVBUSU9OIGV4aXN0cworICAgICMKKyAgICBkZXNjcmlwdGlvbiA9IGQuZ2V0VmFyKCJERVNDUklQVElPTiIsIEZhbHNlKQorICAgIGlmIGRlc2NyaXB0aW9uWzE6MTBdID09ICd7U1VNTUFSWX0nOgorICAgICAgICBiYi53YXJuKCIlczogREVTQ1JJUFRJT04gaXMgbm90IHNldCIgJSBwa2duYW1lKQorCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFRlc3QgdGhhdCBIT01FUEFHRSBleGlzdHMKKyAgICAjCisgICAgaG9tZXBhZ2UgPSBkLmdldFZhcigiSE9NRVBBR0UiLCBGYWxzZSkKKyAgICBpZiBob21lcGFnZSA9PSAnJzoKKyAgICAgICAgYmIud2FybigiJXM6IEhPTUVQQUdFIGlzIG5vdCBzZXQiICUgcGtnbmFtZSkKKyAgICBlbGlmIG5vdCBob21lcGFnZS5zdGFydHN3aXRoKCJodHRwOi8vIikgYW5kIG5vdCBob21lcGFnZS5zdGFydHN3aXRoKCJodHRwczovLyIpOgorICAgICAgICBiYi53YXJuKCIlczogSE9NRVBBR0UgZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8iICUgcGtnbmFtZSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBUZXN0IGZvciB2YWxpZCBTRUNUSU9OCisgICAgIworICAgIHNlY3Rpb24gPSBkLmdldFZhcigiU0VDVElPTiIsIEZhbHNlKQorICAgIGlmIHNlY3Rpb24gPT0gJyc6CisgICAgICAgIGJiLndhcm4oIiVzOiBTRUNUSU9OIGlzIG5vdCBzZXQiICUgcGtnbmFtZSkKKyAgICBlbGlmIG5vdCBzZWN0aW9uLmlzbG93ZXIoKToKKyAgICAgICAgYmIud2FybigiJXM6IFNFQ1RJT04gc2hvdWxkIG9ubHkgdXNlIGxvd2VyIGNhc2UiICUgcGtnbmFtZSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayB0aGF0IGFsbCBwYXRjaGVzIGhhdmUgU2lnbmVkLW9mZi1ieSBhbmQgVXBzdHJlYW0tU3RhdHVzCisgICAgIworICAgIHNyY3VyaSA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgRmFsc2UpLnNwbGl0KCkKKyAgICBmcGF0aHMgPSAoZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpCisKKyAgICBkZWYgZmluZFBhdGNoKHBhdGNobmFtZSk6CisgICAgICAgIGZvciBkaXIgaW4gZnBhdGhzOgorICAgICAgICAgICAgcGF0Y2hwYXRoID0gZGlyICsgcGF0Y2huYW1lCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRjaHBhdGgpOgorICAgICAgICAgICAgICAgICByZXR1cm4gcGF0Y2hwYXRoCisKKyAgICBkZWYgZmluZEtleShwYXRoLCBrZXkpOgorICAgICAgICByZXQgPSBUcnVlCisgICAgICAgIGYgPSBmaWxlKCclcycgJSBwYXRoLCBtb2RlID0gJ3InKQorICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICBpZiBsaW5lLmZpbmQoa2V5KSAhPSAtMToKKyAgICAgICAgICAgICAgICByZXQgPSBGYWxzZQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIGNoZWNrUE4ocGtnbmFtZSwgdmFybmFtZSwgc3RyKToKKyAgICAgICAgaWYgc3RyLmZpbmQoIntQTn0iKSAhPSAtMToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzOiBzaG91bGQgdXNlIEJQTiBpbnN0ZWFkIG9mIFBOIGluICVzIiAlIChwa2duYW1lLCB2YXJuYW1lKSkKKyAgICAgICAgaWYgc3RyLmZpbmQoIntQfSIpICE9IC0xOgorICAgICAgICAgICAgYmIud2FybigiJXM6IHNob3VsZCB1c2UgQlAgaW5zdGVhZCBvZiBQIGluICVzIiAlIChwa2duYW1lLCB2YXJuYW1lKSkKKworICAgIGxlbmd0aCA9IGxlbigiZmlsZTovLyIpCisgICAgZm9yIGl0ZW0gaW4gc3JjdXJpOgorICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtW2xlbmd0aDpdCisgICAgICAgICAgICBpZiBpdGVtLmVuZHN3aXRoKCIucGF0Y2giKSBvciBpdGVtLmVuZHN3aXRoKCIuZGlmZiIpOgorICAgICAgICAgICAgICAgIHBhdGggPSBmaW5kUGF0Y2goaXRlbSkKKyAgICAgICAgICAgICAgICBpZiBmaW5kS2V5KHBhdGgsICJTaWduZWQtb2ZmLWJ5Iik6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiAlcyBkb2Vzbid0IGhhdmUgU2lnbmVkLW9mZi1ieSIgJSAocGtnbmFtZSwgaXRlbSkpCisgICAgICAgICAgICAgICAgaWYgZmluZEtleShwYXRoLCAiVXBzdHJlYW0tU3RhdHVzIik6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiAlcyBkb2Vzbid0IGhhdmUgVXBzdHJlYW0tU3RhdHVzIiAlIChwa2duYW1lLCBpdGVtKSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBmb3IgJHtQTn0gb3IgJHtQfSB1c2FnZSBpbiBTUkNfVVJJIG9yIFMKKyAgICAjIFNob3VsZCB1c2UgJHtCUE59IG9yICR7QlB9IGluc3RlYWQgdG8gYXZvaWQgYnJlYWtpbmcgbXVsdGlsaWIKKyAgICAjCisgICAgZm9yIHMgaW4gc3JjdXJpOgorICAgICAgICBpZiBub3Qgcy5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBjaGVja1BOKHBrZ25hbWUsICdTUkNfVVJJJywgcykKKworICAgIGNoZWNrUE4ocGtnbmFtZSwgJ1MnLCBkLmdldFZhcignUycsIEZhbHNlKSkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL293bi1taXJyb3JzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzNTIyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzCkBAIC0wLDAgKzEsMTIgQEAKK1BSRU1JUlJPUlMoKSB7CitjdnM6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK3N2bjovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorZ2l0Oi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9CitnaXRzbTovLy4qLy4qICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2hnOi8vLiovLiogICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorYnpyOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9CitwNDovLy4qLy4qICAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK29zYzovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQoraHR0cHM/JDovLy4qLy4qICR7U09VUkNFX01JUlJPUl9VUkx9CitmdHA6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTJiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjA4NiBAQAorIworIyBQYWNrYWdpbmcgcHJvY2VzcworIworIyBFeGVjdXRpdmUgc3VtbWFyeTogVGhpcyBjbGFzcyBpdGVyYXRlcyBvdmVyIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGluIFBBQ0tBR0VGVU5DUworIyBUYWtpbmcgRCBhbmQgc3BsaXR0aW5nIGl0IHVwIGludG8gdGhlIHBhY2thZ2VzIGxpc3RlZCBpbiBQQUNLQUdFUywgcGxhY2luZyB0aGUKKyMgcmVzdWx0aW5nIG91dHB1dCBpbiBQS0dERVNULgorIworIyBUaGVyZSBhcmUgdGhlIGZvbGxvd2luZyBkZWZhdWx0IHN0ZXBzIGJ1dCBQQUNLQUdFRlVOQ1MgY2FuIGJlIGV4dGVuZGVkOgorIworIyBhKSBwYWNrYWdlX2dldF9hdXRvX3ByIC0gZ2V0IFBSQVVUTyBmcm9tIHJlbW90ZSBQUiBzZXJ2aWNlCisjCisjIGIpIHBlcmZvcm1fcGFja2FnZWNvcHkgLSBDb3B5IEQgaW50byBQS0dECisjCisjIGMpIHBhY2thZ2VfZG9fc3BsaXRfbG9jYWxlcyAtIFNwbGl0IG91dCB0aGUgbG9jYWxlIGZpbGVzLCB1cGRhdGVzIEZJTEVTIGFuZCBQQUNLQUdFUworIworIyBkKSBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgLSBzcGxpdCB0aGUgZmlsZXMgaW50byBydW50aW1lIGFuZCBkZWJ1ZyBhbmQgc3RyaXAgdGhlbS4KKyMgICAgRGVidWcgZmlsZXMgaW5jbHVkZSBkZWJ1ZyBpbmZvIHNwbGl0LCBhbmQgYXNzb2NpYXRlZCBzb3VyY2VzIHRoYXQgZW5kIHVwIGluIC1kYmcgcGFja2FnZXMKKyMKKyMgZSkgZml4dXBfcGVybXMgLSBGaXggdXAgcGVybWlzc2lvbnMgaW4gdGhlIHBhY2thZ2UgYmVmb3JlIHdlIHNwbGl0IGl0LgorIworIyBmKSBwb3B1bGF0ZV9wYWNrYWdlcyAtIFNwbGl0IHRoZSBmaWxlcyBpbiBQS0dEIGludG8gc2VwYXJhdGUgcGFja2FnZXMgaW4gUEtHREVTVC88cGtnbmFtZT4KKyMgICAgQWxzbyB0cmlnZ2VycyB0aGUgYmluYXJ5IHN0cmlwcGluZyBjb2RlIHRvIHB1dCBmaWxlcyBpbiAtZGJnIHBhY2thZ2VzLgorIworIyBnKSBwYWNrYWdlX2RvX2ZpbGVkZXBzIC0gQ29sbGVjdCBwZXJmaWxlIHJ1bi10aW1lIGRlcGVuZGVuY3kgbWV0YWRhdGEKKyMgICAgVGhlIGRhdGEgaXMgc3RvcmVzIGluIEZJTEVSe1BST1ZJREVTLERFUEVORFN9X2ZpbGVfcGtnIHZhcmlhYmxlcyB3aXRoCisjICAgIGEgbGlzdCBvZiBhZmZlY3RlZCBmaWxlcyBpbiBGSUxFUntQUk9WSURFUyxERVBFTkRTfUZMSVNUX3BrZworIworIyBoKSBwYWNrYWdlX2RvX3NobGlicyAtIExvb2sgYXQgdGhlIHNoYXJlZCBsaWJyYXJpZXMgZ2VuZXJhdGVkIGFuZCBhdXRvdG1hdGljYWxseSBhZGQgYW55CisjICAgIGRlcGVuZWRlbmNpZXMgZm91bmQuIEFsc28gc3RvcmVzIHRoZSBwYWNrYWdlIG5hbWUgc28gYW55b25lIGVsc2UgdXNpbmcgdGhpcyBsaWJyYXJ5CisjICAgIGtub3dzIHdoaWNoIHBhY2thZ2UgdG8gZGVwZW5kIG9uLgorIworIyBpKSBwYWNrYWdlX2RvX3BrZ2NvbmZpZyAtIEtlZXAgdHJhY2sgb2Ygd2hpY2ggcGFja2FnZXMgbmVlZCBhbmQgcHJvdmlkZSB3aGljaCAucGMgZmlsZXMKKyMKKyMgaikgcmVhZF9zaGxpYmRlcHMgLSBSZWFkcyB0aGUgc3RvcmVkIHNobGlicyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBtZXRhZGF0YQorIworIyBrKSBwYWNrYWdlX2RlcGNoYWlucyAtIEFkZHMgYXV0b21hdGljIGRlcGVuZGVuY2llcyB0byAtZGJnIGFuZCAtZGV2IHBhY2thZ2VzCisjCisjIGwpIGVtaXRfcGtnZGF0YSAtIHNhdmVzIHRoZSBwYWNrYWdpbmcgZGF0YSBpbnRvIFBLR0RBVEFfRElSIGZvciB1c2UgaW4gbGF0ZXIKKyMgICAgcGFja2FnaW5nIHN0ZXBzCisKK2luaGVyaXQgcGFja2FnZWRhdGEKK2luaGVyaXQgcHJzZXJ2Citpbmhlcml0IGNocnBhdGgKKworIyBOZWVkIHRoZSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigpIGluIGluc2FuZS5iYmNsYXNzCitpbmhlcml0IGluc2FuZQorCitQS0dEICAgID0gIiR7V09SS0RJUn0vcGFja2FnZSIKK1BLR0RFU1QgPSAiJHtXT1JLRElSfS9wYWNrYWdlcy1zcGxpdCIKKworTE9DQUxFX1NFQ1RJT04gPz0gJycKKworQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMgPSAiJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdQQUNLQUdFX0FSQ0hTJyl9IgorCisjIHJwbSBpcyB1c2VkIGZvciB0aGUgcGVyLWZpbGUgZGVwZW5kZW5jeSBpZGVudGlmaWNhdGlvbgorUEFDS0FHRV9ERVBFTkRTICs9ICJycG0tbmF0aXZlIgorCitkZWYgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUocyk6CisgICAgIiIiCisgICAgTWFrZSBzdXJlIHBhY2thZ2UgbmFtZXMgYXJlIGxlZ2l0aW1hdGUgc3RyaW5ncworICAgICIiIgorICAgIGltcG9ydCByZQorCisgICAgZGVmIGZpeHV0ZihtKToKKyAgICAgICAgY3AgPSBtLmdyb3VwKDEpCisgICAgICAgIGlmIGNwOgorICAgICAgICAgICAgcmV0dXJuICgnXHUlcycgJSBjcCkuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpLmVuY29kZSgndXRmLTgnKQorCisgICAgIyBIYW5kbGUgdW5pY29kZSBjb2RlcG9pbnRzIGVuY29kZWQgYXMgPFUwMTIzPiwgYXMgaW4gZ2xpYmMgbG9jYWxlIGZpbGVzLgorICAgIHMgPSByZS5zdWIoJzxVKFswLTlBLUZhLWZdezEsNH0pPicsIGZpeHV0ZiwgcykKKworICAgICMgUmVtYWluaW5nIHBhY2thZ2UgbmFtZSB2YWxpZGl0eSBmaXhlcworICAgIHJldHVybiBzLmxvd2VyKCkucmVwbGFjZSgnXycsICctJykucmVwbGFjZSgnQCcsICcrJykucmVwbGFjZSgnLCcsICcrJykucmVwbGFjZSgnLycsICctJykKKworZGVmIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHJvb3QsIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBkZXNjcmlwdGlvbiwgcG9zdGluc3Q9Tm9uZSwgcmVjdXJzaXZlPUZhbHNlLCBob29rPU5vbmUsIGV4dHJhX2RlcGVuZHM9Tm9uZSwgYXV4X2ZpbGVzX3BhdHRlcm49Tm9uZSwgcG9zdHJtPU5vbmUsIGFsbG93X2RpcnM9RmFsc2UsIHByZXBlbmQ9RmFsc2UsIG1hdGNoX3BhdGg9RmFsc2UsIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltPU5vbmUsIGFsbG93X2xpbmtzPUZhbHNlLCBzdW1tYXJ5PU5vbmUpOgorICAgICIiIgorICAgIFVzZWQgaW4gLmJiIGZpbGVzIHRvIHNwbGl0IHVwIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBzdWJwYWNrYWdlcyBvZiBhCisgICAgZ2l2ZW4gcGFja2FnZSwgdXN1YWxseSBwbHVnaW5zIG9yIG1vZHVsZXMuCisKKyAgICBBcmd1bWVudHM6CisgICAgcm9vdCAgICAgICAgICAgLS0gdGhlIHBhdGggaW4gd2hpY2ggdG8gc2VhcmNoCisgICAgZmlsZV9yZWdleCAgICAgLS0gcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHNlYXJjaGVkIGZpbGVzLiBVc2UKKyAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRoZXNlcyAoKSB0byBtYXJrIHRoZSBwYXJ0IG9mIHRoaXMgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGVyaXZlIHRoZSBtb2R1bGUgbmFtZSAodG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRlZCB3aGVyZSAlcyBpcyB1c2VkIGluIG90aGVyIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIGFzIG5vdGVkIGJlbG93KQorICAgIG91dHB1dF9wYXR0ZXJuIC0tIHBhdHRlcm4gdG8gdXNlIGZvciB0aGUgcGFja2FnZSBuYW1lcy4gTXVzdCBpbmNsdWRlICVzLgorICAgIGRlc2NyaXB0aW9uICAgIC0tIGRlc2NyaXB0aW9uIHRvIHNldCBmb3IgZWFjaCBwYWNrYWdlLiBNdXN0IGluY2x1ZGUgJXMuCisgICAgcG9zdGluc3QgICAgICAgLS0gcG9zdGluc3RhbGwgc2NyaXB0IHRvIHVzZSBmb3IgYWxsIHBhY2thZ2VzIChhcyBhCisgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKQorICAgIHJlY3Vyc2l2ZSAgICAgIC0tIFRydWUgdG8gcGVyZm9ybSBhIHJlY3Vyc2l2ZSBzZWFyY2ggLSBkZWZhdWx0IEZhbHNlCisgICAgaG9vayAgICAgICAgICAgLS0gYSBob29rIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZXZlcnkgbWF0Y2guIFRoZQorICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAoaW4gdGhlIG9yZGVyIGxpc3RlZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmOiBmdWxsIHBhdGggdG8gdGhlIGZpbGUvZGlyZWN0b3J5IG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBwa2c6IHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcmVnZXg6IGFzIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybjogYXMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZW5hbWU6IHRoZSBtb2R1bGUgbmFtZSBkZXJpdmVkIHVzaW5nIGZpbGVfcmVnZXgKKyAgICBleHRyYV9kZXBlbmRzICAtLSBleHRyYSBydW50aW1lIGRlcGVuZGVuY2llcyAoUkRFUEVORFMpIHRvIGJlIHNldCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICBhbGwgcGFja2FnZXMuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIE5vbmUgY2F1c2VzIGEKKyAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSBtYWluIHBhY2thZ2UgKCR7UE59KSAtIGlmIHlvdSBkbworICAgICAgICAgICAgICAgICAgICAgIG5vdCB3YW50IHRoaXMsIHBhc3MgJycgZm9yIHRoaXMgcGFyYW1ldGVyLgorICAgIGF1eF9maWxlc19wYXR0ZXJuIC0tIGV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0gb3IgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyBmb3IgbXVsdGlwbGUgaXRlbXMuICBNdXN0IGluY2x1ZGUgJXMuCisgICAgcG9zdHJtICAgICAgICAgLS0gcG9zdHJtIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYSBzdHJpbmcpCisgICAgYWxsb3dfZGlycyAgICAgLS0gVHJ1ZSBhbGxvdyBkaXJlY3RvcmllcyB0byBiZSBtYXRjaGVkIC0gZGVmYXVsdCBGYWxzZQorICAgIHByZXBlbmQgICAgICAgIC0tIGlmIFRydWUsIHByZXBlbmQgY3JlYXRlZCBwYWNrYWdlcyB0byBQQUNLQUdFUyBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgRmFsc2Ugd2hpY2ggYXBwZW5kcyB0aGVtCisgICAgbWF0Y2hfcGF0aCAgICAgLS0gbWF0Y2ggZmlsZV9yZWdleCBvbiB0aGUgd2hvbGUgcmVsYXRpdmUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICByb290IHJhdGhlciB0aGFuIGp1c3QgdGhlIGZpbGUgbmFtZQorICAgIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltIC0tIGV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgZWFjaCBwYWNrYWdlLCB1c2luZyB0aGUgYWN0dWFsIGRlcml2ZWQgbW9kdWxlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBjb252ZXJ0aW5nIGl0IHRvIHNvbWV0aGluZyBsZWdhbCBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtIG9yIGEgbGlzdAorICAgICAgICAgICAgICAgICAgICAgIG9mIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiBNdXN0IGluY2x1ZGUgJXMuCisgICAgYWxsb3dfbGlua3MgICAgLS0gVHJ1ZSB0byBhbGxvdyBzeW1saW5rcyB0byBiZSBtYXRjaGVkIC0gZGVmYXVsdCBGYWxzZQorICAgIHN1bW1hcnkgICAgICAgIC0tIFN1bW1hcnkgdG8gc2V0IGZvciBlYWNoIHBhY2thZ2UuIE11c3QgaW5jbHVkZSAlczsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBkZXNjcmlwdGlvbiBpZiBub3Qgc2V0LgorCisgICAgIiIiCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgIyBJZiB0aGUgcm9vdCBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgZG9uJ3QgZXJyb3Igb3V0IGxhdGVyIGJ1dCBzaWxlbnRseSBkbworICAgICMgbm8gc3BsaXR0aW5nLgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkdmFyICsgcm9vdCk6CisgICAgICAgIHJldHVybiBbXQorCisgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgIGlmIG1sOgorICAgICAgICBpZiBub3Qgb3V0cHV0X3BhdHRlcm4uc3RhcnRzd2l0aChtbCk6CisgICAgICAgICAgICBvdXRwdXRfcGF0dGVybiA9IG1sICsgb3V0cHV0X3BhdHRlcm4KKworICAgICAgICBuZXdkZXBzID0gW10KKyAgICAgICAgZm9yIGRlcCBpbiAoZXh0cmFfZGVwZW5kcyBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGRlcC5zdGFydHN3aXRoKG1sKToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKG1sICsgZGVwKQorICAgICAgICBpZiBuZXdkZXBzOgorICAgICAgICAgICAgZXh0cmFfZGVwZW5kcyA9ICIgIi5qb2luKG5ld2RlcHMpCisKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHNwbGl0X3BhY2thZ2VzID0gW10KKworICAgIGlmIHBvc3RpbnN0OgorICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicgKyBwb3N0aW5zdCArICdcbicKKyAgICBpZiBwb3N0cm06CisgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicgKyBwb3N0cm0gKyAnXG4nCisgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgb2JqcyA9IG9zLmxpc3RkaXIoZHZhciArIHJvb3QpCisgICAgZWxzZToKKyAgICAgICAgb2JqcyA9IFtdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkdmFyICsgcm9vdCk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKS5yZXBsYWNlKGR2YXIgKyByb290ICsgJy8nLCAnJywgMSkKKyAgICAgICAgICAgICAgICBpZiByZWxwYXRoOgorICAgICAgICAgICAgICAgICAgICBvYmpzLmFwcGVuZChyZWxwYXRoKQorCisgICAgaWYgZXh0cmFfZGVwZW5kcyA9PSBOb25lOgorICAgICAgICBleHRyYV9kZXBlbmRzID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBzdW1tYXJ5OgorICAgICAgICBzdW1tYXJ5ID0gZGVzY3JpcHRpb24KKworICAgIGZvciBvIGluIHNvcnRlZChvYmpzKToKKyAgICAgICAgaW1wb3J0IHJlLCBzdGF0CisgICAgICAgIGlmIG1hdGNoX3BhdGg6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goZmlsZV9yZWdleCwgbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChmaWxlX3JlZ2V4LCBvcy5wYXRoLmJhc2VuYW1lKG8pKQorCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZiA9IG9zLnBhdGguam9pbihkdmFyICsgcm9vdCwgbykKKyAgICAgICAgbW9kZSA9IG9zLmxzdGF0KGYpLnN0X21vZGUKKyAgICAgICAgaWYgbm90IChzdGF0LlNfSVNSRUcobW9kZSkgb3IgKGFsbG93X2xpbmtzIGFuZCBzdGF0LlNfSVNMTksobW9kZSkpIG9yIChhbGxvd19kaXJzIGFuZCBzdGF0LlNfSVNESVIobW9kZSkpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG9uID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKKyAgICAgICAgcGtnID0gb3V0cHV0X3BhdHRlcm4gJSBvbgorICAgICAgICBzcGxpdF9wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBpZiBub3QgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgcHJlcGVuZDoKKyAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IFtwa2ddICsgcGFja2FnZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgb2xkZmlsZXMgPSBkLmdldFZhcignRklMRVNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgbmV3ZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBvKQorICAgICAgICAjIFRoZXNlIG5hbWVzIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggZ2xvYigpIHNvIGlmIHRoZSBmaWxlbmFtZSBhY3R1YWxseQorICAgICAgICAjIGNvbnRhaW5zICogb3IgPyAocmFyZSwgYnV0IHBvc3NpYmxlKSB3ZSBuZWVkIHRvIGhhbmRsZSB0aGF0IHNwZWNpYWxseQorICAgICAgICBuZXdmaWxlID0gbmV3ZmlsZS5yZXBsYWNlKCcqJywgJ1sqXScpCisgICAgICAgIG5ld2ZpbGUgPSBuZXdmaWxlLnJlcGxhY2UoJz8nLCAnWz9dJykKKyAgICAgICAgaWYgbm90IG9sZGZpbGVzOgorICAgICAgICAgICAgdGhlX2ZpbGVzID0gW25ld2ZpbGVdCisgICAgICAgICAgICBpZiBhdXhfZmlsZXNfcGF0dGVybjoKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGF1eF9maWxlc19wYXR0ZXJuKSBpcyBsaXN0OgorICAgICAgICAgICAgICAgICAgICBmb3IgZnAgaW4gYXV4X2ZpbGVzX3BhdHRlcm46CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVfZmlsZXMuYXBwZW5kKGZwICUgb24pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChhdXhfZmlsZXNfcGF0dGVybiAlIG9uKQorICAgICAgICAgICAgaWYgYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW06CisgICAgICAgICAgICAgICAgaWYgdHlwZShhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSkgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZwIGluIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChmcCAlIG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSAlIG0uZ3JvdXAoMSkpCisgICAgICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgIiAiLmpvaW4odGhlX2ZpbGVzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcGtnLCBvbGRmaWxlcyArICIgIiArIG5ld2ZpbGUpCisgICAgICAgIGlmIGV4dHJhX2RlcGVuZHMgIT0gJyc6CisgICAgICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgJyAnICsgZXh0cmFfZGVwZW5kcykKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBkZXNjcmlwdGlvbiAlIG9uKQorICAgICAgICBpZiBub3QgZC5nZXRWYXIoJ1NVTU1BUllfJyArIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBkLnNldFZhcignU1VNTUFSWV8nICsgcGtnLCBzdW1tYXJ5ICUgb24pCisgICAgICAgIGlmIHBvc3RpbnN0OgorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8nICsgcGtnLCBwb3N0aW5zdCkKKyAgICAgICAgaWYgcG9zdHJtOgorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJyArIHBrZywgcG9zdHJtKQorICAgICAgICBpZiBjYWxsYWJsZShob29rKToKKyAgICAgICAgICAgIGhvb2soZiwgcGtnLCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgbS5ncm91cCgxKSkKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VzKSkKKyAgICByZXR1cm4gc3BsaXRfcGFja2FnZXMKKworUEFDS0FHRV9ERVBFTkRTICs9ICJmaWxlLW5hdGl2ZSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9ICIiCisgICAgICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFX0RFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcAorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZGVwZW5kcycsIGRlcHMpCisKKyAgICAgICAgIyBzaGxpYnMgcmVxdWlyZXMgYW55IERFUEVORFMgdG8gaGF2ZSBhbHJlYWR5IHBhY2thZ2VkIGZvciB0aGUgKi5saXN0IGZpbGVzCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZScsICdkZXB0YXNrJywgIiBkb19wYWNrYWdlZGF0YSIpCit9CisKKyMgR2V0IGEgbGlzdCBvZiBmaWxlcyBmcm9tIGZpbGUgdmFycyBieSBzZWFyY2hpbmcgZmlsZXMgdW5kZXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorIyBUaGUgbGlzdCBjb250YWlucyBzeW1saW5rcywgZGlyZWN0b3JpZXMgYW5kIG5vcm1hbCBmaWxlcy4KK2RlZiBmaWxlc19mcm9tX2ZpbGV2YXJzKGZpbGV2YXJzKToKKyAgICBpbXBvcnQgb3MsZ2xvYgorICAgIGNwYXRoID0gb2UuY2FjaGVkcGF0aC5DYWNoZWRQYXRoKCkKKyAgICBmaWxlcyA9IFtdCisgICAgZm9yIGYgaW4gZmlsZXZhcnM6CisgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoZik6CisgICAgICAgICAgICBmID0gJy4nICsgZgorICAgICAgICBpZiBub3QgZi5zdGFydHN3aXRoKCIuLyIpOgorICAgICAgICAgICAgZiA9ICcuLycgKyBmCisgICAgICAgIGdsb2JiZWQgPSBnbG9iLmdsb2IoZikKKyAgICAgICAgaWYgZ2xvYmJlZDoKKyAgICAgICAgICAgIGlmIFsgZiBdICE9IGdsb2JiZWQ6CisgICAgICAgICAgICAgICAgZmlsZXMgKz0gZ2xvYmJlZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZpbGVzLmFwcGVuZChmKQorCisgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgIGlmIG5vdCBjcGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICBpZiBjcGF0aC5pc2RpcihmKToKKyAgICAgICAgICAgICAgICBuZXdmaWxlcyA9IFsgb3MucGF0aC5qb2luKGYseCkgZm9yIHggaW4gb3MubGlzdGRpcihmKSBdCisgICAgICAgICAgICAgICAgaWYgbmV3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzICs9IG5ld2ZpbGVzCisKKyAgICByZXR1cm4gZmlsZXMKKworIyBDYWxsZWQgaW4gcGFja2FnZV88cnBtLGlwayxkZWI+LmJiY2xhc3MgdG8gZ2V0IHRoZSBjb3JyZWN0IGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcworZGVmIGdldF9jb25mZmlsZXMocGtnLCBkKToKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHJvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgb3MuY2hkaXIocm9vdCkKKworICAgIGNvbmZmaWxlcyA9IGQuZ2V0VmFyKCdDT05GRklMRVNfJXMnICUgcGtnLCBUcnVlKTsKKyAgICBpZiBjb25mZmlsZXMgPT0gTm9uZToKKyAgICAgICAgY29uZmZpbGVzID0gZC5nZXRWYXIoJ0NPTkZGSUxFUycsIFRydWUpCisgICAgaWYgY29uZmZpbGVzID09IE5vbmU6CisgICAgICAgIGNvbmZmaWxlcyA9ICIiCisgICAgY29uZmZpbGVzID0gY29uZmZpbGVzLnNwbGl0KCkKKyAgICBjb25mX29yaWdfbGlzdCA9IGZpbGVzX2Zyb21fZmlsZXZhcnMoY29uZmZpbGVzKQorCisgICAgIyBSZW1vdmUgbGlua3MgYW5kIGRpcmVjdG9yaWVzIGZyb20gY29uZl9vcmlnX2xpc3QgdG8gZ2V0IGNvbmZfbGlzdCB3aGljaCBvbmx5IGNvbnRhaW5zIG5vcm1hbCBmaWxlcworICAgIGNvbmZfbGlzdCA9IFtdCisgICAgZm9yIGYgaW4gY29uZl9vcmlnX2xpc3Q6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGNvbmZfbGlzdC5hcHBlbmQoZikKKworICAgICMgUmVtb3ZlIHRoZSBsZWFkaW5nICcuLycKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oY29uZl9saXN0KSk6CisgICAgICAgIGNvbmZfbGlzdFtpXSA9IGNvbmZfbGlzdFtpXVsxOl0KKworICAgIG9zLmNoZGlyKGN3ZCkKKyAgICByZXR1cm4gY29uZl9saXN0CisKK2RlZiBzcGxpdGRlYnVnaW5mbyhmaWxlLCBkZWJ1Z2ZpbGUsIGRlYnVnc3JjZGlyLCBzb3VyY2VmaWxlLCBkKToKKyAgICAjIEZ1bmN0aW9uIHRvIHNwbGl0IGEgc2luZ2xlIGZpbGUgaW50byB0d28gY29tcG9uZW50cywgb25lIGlzIHRoZSBzdHJpcHBlZAorICAgICMgdGFyZ2V0IHN5c3RlbSBiaW5hcnksIHRoZSBvdGhlciBjb250YWlucyBhbnkgZGVidWdnaW5nIGluZm9ybWF0aW9uLiBUaGUKKyAgICAjIHR3byBmaWxlcyBhcmUgbGlua2VkIHRvIHJlZmVyZW5jZSBlYWNoIG90aGVyLgorICAgICMKKyAgICAjIHNvdXJjZWZpbGUgaXMgYWxzbyBnZW5lcmF0ZWQgY29udGFpbmluZyBhIGxpc3Qgb2YgZGVidWdzb3VyY2VzCisKKyAgICBpbXBvcnQgc3RhdAorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBvYmpjb3B5ID0gZC5nZXRWYXIoIk9CSkNPUFkiLCBUcnVlKQorICAgIGRlYnVnZWRpdCA9IGQuZXhwYW5kKCIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL2Jpbi9kZWJ1Z2VkaXQiKQorICAgIHdvcmtkaXIgPSBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisgICAgd29ya3BhcmVudGRpciA9IGQuZ2V0VmFyKCJERUJVR1NSQ19PVkVSUklERV9QQVRIIiwgVHJ1ZSkgb3Igb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh3b3JrZGlyKSkKKworICAgICMgV2UgaWdub3JlIGtlcm5lbCBtb2R1bGVzLCB3ZSBkb24ndCBnZW5lcmF0ZSBkZWJ1ZyBpbmZvIGZpbGVzLgorICAgIGlmIGZpbGUuZmluZCgiL2xpYi9tb2R1bGVzLyIpICE9IC0xIGFuZCBmaWxlLmVuZHN3aXRoKCIua28iKToKKyAgICAgICAgcmV0dXJuIDEKKworICAgIG5ld21vZGUgPSBOb25lCisgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBvcy5XX09LKSBvciBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgIG9yaWdtb2RlID0gb3Muc3RhdChmaWxlKVtzdGF0LlNUX01PREVdCisgICAgICAgIG5ld21vZGUgPSBvcmlnbW9kZSB8IHN0YXQuU19JV1JJVEUgfCBzdGF0LlNfSVJFQUQKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgbmV3bW9kZSkKKworICAgICMgV2UgbmVlZCB0byBleHRyYWN0IHRoZSBkZWJ1ZyBzcmMgaW5mb3JtYXRpb24gaGVyZS4uLgorICAgIGlmIGRlYnVnc3JjZGlyOgorICAgICAgICBjbWQgPSAiJyVzJyAtYiAnJXMnIC1kICclcycgLWkgLWwgJyVzJyAnJXMnIiAlIChkZWJ1Z2VkaXQsIHdvcmtwYXJlbnRkaXIsIGRlYnVnc3JjZGlyLCBzb3VyY2VmaWxlLCBmaWxlKQorICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoImRlYnVnZWRpdCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZGVidWdmaWxlKSkKKworICAgIGNtZCA9ICInJXMnIC0tb25seS1rZWVwLWRlYnVnICclcycgJyVzJyIgJSAob2JqY29weSwgZmlsZSwgZGVidWdmaWxlKQorICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgYmIuZmF0YWwoIm9iamNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAjIFNldCB0aGUgZGVidWdsaW5rIHRvIGhhdmUgdGhlIHZpZXcgb2YgdGhlIGZpbGUgcGF0aCBvbiB0aGUgdGFyZ2V0CisgICAgY21kID0gIiclcycgLS1hZGQtZ251LWRlYnVnbGluaz0nJXMnICclcyciICUgKG9iamNvcHksIGRlYnVnZmlsZSwgZmlsZSkKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJvYmpjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgaWYgbmV3bW9kZToKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgb3JpZ21vZGUpCisKKyAgICByZXR1cm4gMAorCitkZWYgY29weWRlYnVnc291cmNlcyhkZWJ1Z3NyY2RpciwgZCk6CisgICAgIyBUaGUgZGVidWcgc3JjIGluZm9ybWF0aW9uIHdyaXR0ZW4gb3V0IHRvIHNvdXJjZWZpbGUgaXMgZnVydGhlciBwcm9jZWNlc3NlZAorICAgICMgYW5kIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24gaGVyZS4KKworICAgIGltcG9ydCBzdGF0CisKKyAgICBzb3VyY2VmaWxlID0gZC5leHBhbmQoIiR7V09SS0RJUn0vZGVidWdzb3VyY2VzLmxpc3QiKQorICAgIGlmIGRlYnVnc3JjZGlyIGFuZCBvcy5wYXRoLmlzZmlsZShzb3VyY2VmaWxlKToKKyAgICAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBvYmpjb3B5ID0gZC5nZXRWYXIoIk9CSkNPUFkiLCBUcnVlKQorICAgICAgICBkZWJ1Z2VkaXQgPSBkLmV4cGFuZCgiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vZGVidWdlZGl0IikKKyAgICAgICAgd29ya2RpciA9IGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSkKKyAgICAgICAgd29ya3BhcmVudGRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUod29ya2RpcikpCisgICAgICAgIHdvcmtiYXNlZGlyID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUod29ya2RpcikpICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZSh3b3JrZGlyKQorCisgICAgICAgIG5vc3VjaGRpciA9IFtdCisgICAgICAgIGJhc2VwYXRoID0gZHZhcgorICAgICAgICBmb3IgcCBpbiBkZWJ1Z3NyY2Rpci5zcGxpdCgiLyIpOgorICAgICAgICAgICAgYmFzZXBhdGggPSBiYXNlcGF0aCArICIvIiArIHAKKyAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5leGlzdHMoYmFzZXBhdGgpOgorICAgICAgICAgICAgICAgIG5vc3VjaGRpci5hcHBlbmQoYmFzZXBhdGgpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihiYXNlcGF0aCkKKyAgICAgICAgY3BhdGgudXBkYXRlY2FjaGUoYmFzZXBhdGgpCisKKyAgICAgICAgcHJvY2Vzc2RlYnVnc3JjID0gICJMQ19BTEw9QyA7IHNvcnQgLXogLXUgJyVzJyB8IGVncmVwIC12IC16ICcoPGludGVybmFsPnw8YnVpbHQtaW4+KSQnIHwgIgorICAgICAgICAjIFdlIG5lZWQgdG8gaWdub3JlIGZpbGVzIHRoYXQgYXJlIG5vdCBhY3R1YWxseSBvdXJzCisgICAgICAgICMgd2UgZG8gdGhpcyBieSBvbmx5IHBheWluZyBhdHRlbnRpb24gdG8gaXRlbXMgZnJvbSB0aGlzIHBhY2thZ2UKKyAgICAgICAgcHJvY2Vzc2RlYnVnc3JjICs9ICJmZ3JlcCAtencgJyVzJyB8ICIKKyAgICAgICAgcHJvY2Vzc2RlYnVnc3JjICs9ICIoY2QgJyVzJyA7IGNwaW8gLXBkMG1sTCAtLW5vLXByZXNlcnZlLW93bmVyICclcyVzJyAyPi9kZXYvbnVsbCkiCisKKyAgICAgICAgY21kID0gcHJvY2Vzc2RlYnVnc3JjICUgKHNvdXJjZWZpbGUsIHdvcmtiYXNlZGlyLCB3b3JrcGFyZW50ZGlyLCBkdmFyLCBkZWJ1Z3NyY2RpcikKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgICMgQ2FuICJmYWlsIiBpZiBpbnRlcm5hbCBoZWFkZXJzL3RyYW5zaWVudCBzb3VyY2VzIGFyZSBhdHRlbXB0ZWQKKyAgICAgICAgI2lmIHJldHZhbDoKKyAgICAgICAgIyAgICBiYi5mYXRhbCgiZGVidWcgc291cmNlIGNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSIgJSAocmV0dmFsLCBjbWQpKQorCisgICAgICAgICMgY3BpbyBzZWVtcyB0byBoYXZlIGEgYnVnIHdpdGggLWxMIHRvZ2V0aGVyIGFuZCBzeW1ib2xpYyBsaW5rcyBhcmUganVzdCBjb3BpZWQsIG5vdCBkZXJlZmVyZW5jZWQuCisgICAgICAgICMgV29yayBhcm91bmQgdGhpcyBieSBtYW51YWxseSBmaW5kaW5nIGFuZCBjb3B5aW5nIGFueSBzeW1ib2xpYyBsaW5rcyB0aGF0IG1hZGUgaXQgdGhyb3VnaC4KKyAgICAgICAgY21kID0gImZpbmQgJXMlcyAtdHlwZSBsIC1wcmludDAgLWRlbGV0ZSB8IHNlZCBzIyVzJXMvIyNnIHwgKGNkICclcycgOyBjcGlvIC1wZDBtTCAtLW5vLXByZXNlcnZlLW93bmVyICclcyVzJyAyPi9kZXYvbnVsbCkiICUgKGR2YXIsIGRlYnVnc3JjZGlyLCBkdmFyLCBkZWJ1Z3NyY2Rpciwgd29ya3BhcmVudGRpciwgZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi5mYXRhbCgiZGVidWdzcmMgc3ltbGluayBmaXh1cCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpIiAlIChyZXR2YWwsIGNtZCkpCisKKyAgICAgICAgIyBUaGUgY29weSBieSBjcGlvIG1heSBoYXZlIHJlc3VsdGVkIGluIHNvbWUgZW1wdHkgZGlyZWN0b3JpZXMhICBSZW1vdmUgdGhlc2UKKyAgICAgICAgY21kID0gImZpbmQgJXMlcyAtZW1wdHkgLXR5cGUgZCAtZGVsZXRlIiAlIChkdmFyLCBkZWJ1Z3NyY2RpcikKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJlbXB0eSBkaXJlY3RvcnkgcmVtb3ZhbCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgICAgICAjIEFsc28gcmVtb3ZlIGRlYnVnc3JjZGlyIGlmIGl0cyBlbXB0eQorICAgICAgICBmb3IgcCBpbiBub3N1Y2hkaXJbOjotMV06CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKSBhbmQgbm90IG9zLmxpc3RkaXIocCk6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIocCkKKworIworIyBQYWNrYWdlIGRhdGEgaGFuZGxpbmcgcm91dGluZXMKKyMKKworZGVmIGdldF9wYWNrYWdlX21hcHBpbmcgKHBrZywgYmFzZXBrZywgZCk6CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICBkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyAgICBrZXkgPSAiUEtHXyVzIiAlIHBrZworCisgICAgaWYga2V5IGluIGRhdGE6CisgICAgICAgICMgSGF2ZSB0byBhdm9pZCB1bmRvaW5nIHRoZSB3cml0ZV9leHRyYV9wa2dzKGdsb2JhbF92YXJpYW50cy4uLikKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGQpIGFuZCBkYXRhW2tleV0gPT0gYmFzZXBrZzoKKyAgICAgICAgICAgIHJldHVybiBwa2cKKyAgICAgICAgcmV0dXJuIGRhdGFba2V5XQorCisgICAgcmV0dXJuIHBrZworCitkZWYgZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSAocGtnX3R5cGUsIGQpOgorICAgIGJhc2Vfa2V5ID0gIlBBQ0tBR0VfQUREX01FVEFEQVRBIgorICAgIGZvciBrZXkgaW4gKCIlc18lcyIgJSAoYmFzZV9rZXksIHBrZ190eXBlLnVwcGVyKCkpLCBiYXNlX2tleSk6CisgICAgICAgIGlmIGQuZ2V0VmFyKGtleSwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBkLnNldFZhckZsYWcoa2V5LCAidHlwZSIsICJsaXN0IikKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGtleSwgInNlcGFyYXRvciIpIGlzIE5vbmU6CisgICAgICAgICAgICBkLnNldFZhckZsYWcoa2V5LCAic2VwYXJhdG9yIiwgIlxcbiIpCisgICAgICAgIG1ldGFkYXRhX2ZpZWxkcyA9IFtmaWVsZC5zdHJpcCgpIGZvciBmaWVsZCBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKGtleSwgZCldCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obWV0YWRhdGFfZmllbGRzKS5zdHJpcCgpCisKK2RlZiBydW50aW1lX21hcHBpbmdfcmVuYW1lICh2YXJuYW1lLCBwa2csIGQpOgorICAgICNiYi5ub3RlKCIlcyBiZWZvcmU6ICVzIiAlICh2YXJuYW1lLCBkLmdldFZhcih2YXJuYW1lLCBUcnVlKSkpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBuZXdfZGVwZW5kcyA9IHt9CisgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcih2YXJuYW1lLCBUcnVlKSBvciAiIikKKyAgICBmb3IgZGVwZW5kIGluIGRlcHM6CisgICAgICAgIG5ld19kZXBlbmQgPSBnZXRfcGFja2FnZV9tYXBwaW5nKGRlcGVuZCwgcGtnLCBkKQorICAgICAgICBuZXdfZGVwZW5kc1tuZXdfZGVwZW5kXSA9IGRlcHNbZGVwZW5kXQorCisgICAgZC5zZXRWYXIodmFybmFtZSwgYmIudXRpbHMuam9pbl9kZXBzKG5ld19kZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCisKKyAgICAjYmIubm90ZSgiJXMgYWZ0ZXI6ICVzIiAlICh2YXJuYW1lLCBkLmdldFZhcih2YXJuYW1lLCBUcnVlKSkpCisKKyMKKyMgUGFja2FnZSBmdW5jdGlvbnMgc3VpdGFibGUgZm9yIGluY2x1c2lvbiBpbiBQQUNLQUdFRlVOQ1MKKyMKKworcHl0aG9uIHBhY2thZ2VfZ2V0X2F1dG9fcHIoKSB7CisgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgIGltcG9ydCByZQorCisgICAgIyBTdXBwb3J0IHBlciByZWNpcGUgUFJTRVJWX0hPU1QKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaG9zdCA9IGQuZ2V0VmFyKCJQUlNFUlZfSE9TVF8iICsgcG4sIFRydWUpCisgICAgaWYgbm90IChob3N0IGlzIE5vbmUpOgorICAgICAgICBkLnNldFZhcigiUFJTRVJWX0hPU1QiLCBob3N0KQorCisgICAgcGtndiA9IGQuZ2V0VmFyKCJQS0dWIiwgVHJ1ZSkKKworICAgICMgUFIgU2VydmVyIG5vdCBhY3RpdmUsIGhhbmRsZSBBVVRPSU5DCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpOgorICAgICAgICBpZiAnQVVUT0lOQycgaW4gcGtndjoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJQS0dWIiwgcGtndi5yZXBsYWNlKCJBVVRPSU5DIiwgIjAiKSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBhdXRvX3ByID0gTm9uZQorICAgIHB2ID0gZC5nZXRWYXIoIlBWIiwgVHJ1ZSkKKyAgICB2ZXJzaW9uID0gZC5nZXRWYXIoIlBSQVVUT0lOWCIsIFRydWUpCisgICAgcGtnYXJjaCA9IGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBUcnVlKQorICAgIGNoZWNrc3VtID0gZC5nZXRWYXIoIkJCX1RBU0tIQVNIIiwgVHJ1ZSkKKworICAgIGlmIGQuZ2V0VmFyKCdQUlNFUlZfTE9DS0RPV04nLCBUcnVlKToKKyAgICAgICAgYXV0b19wciA9IGQuZ2V0VmFyKCdQUkFVVE9fJyArIHZlcnNpb24gKyAnXycgKyBwa2dhcmNoLCBUcnVlKSBvciBkLmdldFZhcignUFJBVVRPXycgKyB2ZXJzaW9uLCBUcnVlKSBvciBOb25lCisgICAgICAgIGlmIGF1dG9fcHIgaXMgTm9uZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW4gTk9UIGdldCBQUkFVVE8gZnJvbSBsb2NrZG93biBleHBvcnRlZCBmaWxlIikKKyAgICAgICAgZC5zZXRWYXIoJ1BSQVVUTycsc3RyKGF1dG9fcHIpKQorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgY29ubiA9IGQuZ2V0VmFyKCJfX1BSU0VSVl9DT05OIiwgVHJ1ZSkKKyAgICAgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICAgICAgY29ubiA9IG9lLnByc2VydmljZS5wcnNlcnZfbWFrZV9jb25uKGQpCisgICAgICAgIGlmIGNvbm4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiAiQVVUT0lOQyIgaW4gcGtndjoKKyAgICAgICAgICAgICAgICBzcmNwdiA9IGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpCisgICAgICAgICAgICAgICAgYmFzZV92ZXIgPSAiQVVUT0lOQy0lcyIgJSB2ZXJzaW9uWzp2ZXJzaW9uLmZpbmQoc3JjcHYpXQorICAgICAgICAgICAgICAgIHZhbHVlID0gY29ubi5nZXRQUihiYXNlX3ZlciwgcGtnYXJjaCwgc3JjcHYpCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIlBLR1YiLCBwa2d2LnJlcGxhY2UoIkFVVE9JTkMiLCBzdHIodmFsdWUpKSkKKworICAgICAgICAgICAgYXV0b19wciA9IGNvbm4uZ2V0UFIodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPLCBleGNlcHRpb24gJXMiICUgIHN0cihlKSkKKyAgICBpZiBhdXRvX3ByIGlzIE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCJDYW4gTk9UIGdldCBQUkFVVE8gZnJvbSByZW1vdGUgUFIgc2VydmljZSIpCisgICAgZC5zZXRWYXIoJ1BSQVVUTycsc3RyKGF1dG9fcHIpKQorfQorCitMT0NBTEVCQVNFUE4gPz89ICIke1BOfSIKKworcHl0aG9uIHBhY2thZ2VfZG9fc3BsaXRfbG9jYWxlcygpIHsKKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VfTk9fTE9DQUxFJywgVHJ1ZSkgPT0gJzEnKToKKyAgICAgICAgYmIuZGVidWcoMSwgInBhY2thZ2UgcmVxdWVzdGVkIG5vdCBzcGxpdHRpbmcgbG9jYWxlcyIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGRhdGFkaXIgPSBkLmdldFZhcignZGF0YWRpcicsIFRydWUpCisgICAgaWYgbm90IGRhdGFkaXI6CisgICAgICAgIGJiLm5vdGUoImRhdGFkaXIgbm90IGRlZmluZWQiKQorICAgICAgICByZXR1cm4KKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignTE9DQUxFQkFTRVBOJywgVHJ1ZSkKKworICAgIGlmIHBuICsgJy1sb2NhbGUnIGluIHBhY2thZ2VzOgorICAgICAgICBwYWNrYWdlcy5yZW1vdmUocG4gKyAnLWxvY2FsZScpCisKKyAgICBsb2NhbGVkaXIgPSBvcy5wYXRoLmpvaW4oZHZhciArIGRhdGFkaXIsICdsb2NhbGUnKQorCisgICAgaWYgbm90IGNwYXRoLmlzZGlyKGxvY2FsZWRpcik6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsb2NhbGUgZmlsZXMgaW4gdGhpcyBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGVzID0gb3MubGlzdGRpcihsb2NhbGVkaXIpCisKKyAgICBzdW1tYXJ5ID0gZC5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBwbgorICAgIGRlc2NyaXB0aW9uID0gZC5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIiIKKyAgICBsb2NhbGVfc2VjdGlvbiA9IGQuZ2V0VmFyKCdMT0NBTEVfU0VDVElPTicsIFRydWUpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgorICAgIGZvciBsIGluIHNvcnRlZChsb2NhbGVzKToKKyAgICAgICAgbG4gPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShsKQorICAgICAgICBwa2cgPSBwbiArICctbG9jYWxlLScgKyBsbgorICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgb3MucGF0aC5qb2luKGRhdGFkaXIsICdsb2NhbGUnLCBsKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csICclc3ZpcnR1YWwtbG9jYWxlLSVzJyAlIChtbHByZWZpeCwgbG4pKQorICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXycgKyBwa2csICclcy1sb2NhbGUgJXMlcy10cmFuc2xhdGlvbicgJSAocG4sIG1scHJlZml4LCBsbikpCisgICAgICAgIGQuc2V0VmFyKCdTVU1NQVJZXycgKyBwa2csICclcyAtICVzIHRyYW5zbGF0aW9ucycgJSAoc3VtbWFyeSwgbCkpCisgICAgICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCAnJXMgIFRoaXMgcGFja2FnZSBjb250YWlucyBsYW5ndWFnZSB0cmFuc2xhdGlvbiBmaWxlcyBmb3IgdGhlICVzIGxvY2FsZS4nICUgKGRlc2NyaXB0aW9uLCBsKSkKKyAgICAgICAgaWYgbG9jYWxlX3NlY3Rpb246CisgICAgICAgICAgICBkLnNldFZhcignU0VDVElPTl8nICsgcGtnLCBsb2NhbGVfc2VjdGlvbikKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VzKSkKKworICAgICMgRGlzYWJsZWQgYnkgUlAgMTgvMDYvMDcKKyAgICAjIFdpbGRjYXJkcyBhcmVuJ3Qgc3VwcG9ydGVkIGluIGRlYmlhbgorICAgICMgVGhleSBicmVhayB3aXRoIGlwa2cgc2luY2UgZ2xpYmMtbG9jYWxlKiB3aWxsIG1lYW4gdGhhdAorICAgICMgZ2xpYmMtbG9jYWxlZGF0YS10cmFuc2xpdCogd29uJ3QgaW5zdGFsbCBhcyBhIGRlcGVuZGVuY3kKKyAgICAjIGZvciBzb21lIG90aGVyIHBhY2thZ2Ugd2hpY2ggYnJlYWtzIG1ldGEtdG9vbGNoYWluCisgICAgIyBQcm9iYWJseSBicmVha3Mgc2luY2UgdmlydHVhbC1sb2NhbGUtIGlzbid0IHByb3ZpZGVkIGFueXdoZXJlCisgICAgI3JkZXAgPSAoZC5nZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBuLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICNyZGVwLmFwcGVuZCgnJXMtbG9jYWxlKicgJSBwbikKKyAgICAjZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBuLCAnICcuam9pbihyZGVwKSkKK30KKworcHl0aG9uIHBlcmZvcm1fcGFja2FnZWNvcHkgKCkgeworICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICMgU3RhcnQgYnkgcGFja2FnZSBwb3B1bGF0aW9uIGJ5IHRha2luZyBhIGNvcHkgb2YgdGhlIGluc3RhbGxlZAorICAgICMgZmlsZXMgdG8gb3BlcmF0ZSBvbgorICAgICMgUHJlc2VydmUgc3BhcnNlIGZpbGVzIGFuZCBoYXJkIGxpbmtzCisgICAgY21kID0gJ3RhciAtY2YgLSAtQyAlcyAtcCAuIHwgdGFyIC14ZiAtIC1DICVzJyAlIChkZXN0LCBkdmFyKQorICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgYmIuZmF0YWwoImZpbGUgY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgICMgcmVwbGFjZSBSUEFUSHMgZm9yIHRoZSBuYXRpdmVzZGsgYmluYXJpZXMsIHRvIG1ha2UgdGhlbSByZWxvY2F0YWJsZQorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHJwYXRoX3JlcGxhY2UgKGR2YXIsIGQpCit9CitwZXJmb3JtX3BhY2thZ2Vjb3B5W2NsZWFuZGlyc10gPSAiJHtQS0dEfSIKK3BlcmZvcm1fcGFja2FnZWNvcHlbZGlyc10gPSAiJHtQS0dEfSIKKworIyBXZSBnZW5lcmF0ZSBhIG1hc3RlciBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHByb2Nlc3MsIHdlIHN0YXJ0IGJ5CisjIHNlZWRpbmcgdGhpcyBsaXN0IHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cywgdGhlbiBsb2FkIGZyb20KKyMgdGhlIGZzLXBlcm1zLnR4dCBmaWxlcworcHl0aG9uIGZpeHVwX3Blcm1zICgpIHsKKyAgICBpbXBvcnQgcHdkLCBncnAKKworICAgICMgaW5pdCB1c2luZyBhIHN0cmluZyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBhIGxpbmUgYXMgZG9jdW1lbnRlZCBpbgorICAgICMgdGhlIGZzLXBlcm1zLnR4dCBmaWxlCisgICAgIyA8cGF0aD4gPG1vZGU+IDx1aWQ+IDxnaWQ+IDx3YWxrPiA8Zm1vZGU+IDxmdWlkPiA8ZmdpZD4KKyAgICAjIDxwYXRoPiBsaW5rIDxsaW5rIHRhcmdldD4KKyAgICAjCisgICAgIyBfX3N0cl9fIGNhbiBiZSB1c2VkIHRvIHByaW50IG91dCBhbiBlbnRyeSBpbiB0aGUgaW5wdXQgZm9ybWF0CisgICAgIworICAgICMgaWYgZnNfcGVybXNfZW50cnkucGF0aCBpcyBOb25lOgorICAgICMgICAgYW4gZXJyb3Igb2NjdXJlZAorICAgICMgaWYgZnNfcGVybXNfZW50cnkubGluaywgeW91IGNhbiByZXRyaWV2ZToKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LnBhdGggPSBwYXRoCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5saW5rID0gdGFyZ2V0IG9mIGxpbmsKKyAgICAjIGlmIG5vdCBmc19wZXJtc19lbnRyeS5saW5rLCB5b3UgY2FuIHJldHJpZXZlOgorICAgICMgICAgZnNfcGVybXNfZW50cnkucGF0aCA9IHBhdGgKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5Lm1vZGUgPSBleHBlY3RlZCBkaXIgbW9kZSBvciBOb25lCisgICAgIyAgICBmc19wZXJtc19lbnRyeS51aWQgPSBleHBlY3RlZCB1aWQgb3IgLTEKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmdpZCA9IGV4cGVjdGVkIGdpZCBvciAtMQorICAgICMgICAgZnNfcGVybXNfZW50cnkud2FsayA9ICd0cnVlJyBvciBzb21ldGhpbmcgZWxzZQorICAgICMgICAgZnNfcGVybXNfZW50cnkuZm1vZGUgPSBleHBlY3RlZCBmaWxlIG1vZGUgb3IgTm9uZQorICAgICMgICAgZnNfcGVybXNfZW50cnkuZnVpZCA9IGV4cGVjdGVkIGZpbGUgdWlkIG9yIC0xCisgICAgIyAgICBmc19wZXJtc19lbnRyeV9mZ2lkID0gZXhwZWN0ZWQgZmlsZSBnaWQgb3IgLTEKKyAgICBjbGFzcyBmc19wZXJtc19lbnRyeSgpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgICAgICBsc3BsaXQgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIGxlbihsc3BsaXQpID09IDMgYW5kIGxzcGxpdFsxXS5sb3dlcigpID09ICJsaW5rIjoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRsaW5rKGxzcGxpdFswXSwgbHNwbGl0WzJdKQorICAgICAgICAgICAgZWxpZiBsZW4obHNwbGl0KSA9PSA4OgorICAgICAgICAgICAgICAgIHNlbGYuX3NldGRpcihsc3BsaXRbMF0sIGxzcGxpdFsxXSwgbHNwbGl0WzJdLCBsc3BsaXRbM10sIGxzcGxpdFs0XSwgbHNwbGl0WzVdLCBsc3BsaXRbNl0sIGxzcGxpdFs3XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIkZpeHVwIFBlcm1zOiBpbnZhbGlkIGNvbmZpZyBsaW5lICVzIiAlIGxpbmUKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGVybS1jb25maWciLCBtc2csIGQpCisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYubGluayA9IE5vbmUKKworICAgICAgICBkZWYgX3NldGRpcihzZWxmLCBwYXRoLCBtb2RlLCB1aWQsIGdpZCwgd2FsaywgZm1vZGUsIGZ1aWQsIGZnaWQpOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorICAgICAgICAgICAgc2VsZi5saW5rID0gTm9uZQorICAgICAgICAgICAgc2VsZi5tb2RlID0gc2VsZi5fcHJvY21vZGUobW9kZSkKKyAgICAgICAgICAgIHNlbGYudWlkICA9IHNlbGYuX3Byb2N1aWQodWlkKQorICAgICAgICAgICAgc2VsZi5naWQgID0gc2VsZi5fcHJvY2dpZChnaWQpCisgICAgICAgICAgICBzZWxmLndhbGsgPSB3YWxrLmxvd2VyKCkKKyAgICAgICAgICAgIHNlbGYuZm1vZGUgPSBzZWxmLl9wcm9jbW9kZShmbW9kZSkKKyAgICAgICAgICAgIHNlbGYuZnVpZCA9IHNlbGYuX3Byb2N1aWQoZnVpZCkKKyAgICAgICAgICAgIHNlbGYuZmdpZCA9IHNlbGYuX3Byb2NnaWQoZmdpZCkKKworICAgICAgICBkZWYgX3NldGxpbmsoc2VsZiwgcGF0aCwgbGluayk6CisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgICAgICBzZWxmLmxpbmsgPSBsaW5rCisKKyAgICAgICAgZGVmIF9wcm9jbW9kZShzZWxmLCBtb2RlKToKKyAgICAgICAgICAgIGlmIG5vdCBtb2RlIG9yIChtb2RlIGFuZCBtb2RlID09ICItIik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChtb2RlLDgpCisKKyAgICAgICAgIyBOb3RlIHVpZC9naWQgLTEgaGFzIHNwZWNpYWwgc2lnbmlmaWNhbmNlIGluIG9zLmxjaG93bgorICAgICAgICBkZWYgX3Byb2N1aWQoc2VsZiwgdWlkKToKKyAgICAgICAgICAgIGlmIHVpZCBpcyBOb25lIG9yIHVpZCA9PSAiLSI6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgICAgICBlbGlmIHVpZC5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludCh1aWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBwd2QuZ2V0cHduYW0odWlkKS5wd191aWQKKworICAgICAgICBkZWYgX3Byb2NnaWQoc2VsZiwgZ2lkKToKKyAgICAgICAgICAgIGlmIGdpZCBpcyBOb25lIG9yIGdpZCA9PSAiLSI6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgICAgICBlbGlmIGdpZC5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChnaWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBncnAuZ2V0Z3JuYW0oZ2lkKS5ncl9naWQKKworICAgICAgICAjIFVzZSBmb3IgZGVidWdnaW5nIHRoZSBlbnRyaWVzCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5saW5rOgorICAgICAgICAgICAgICAgIHJldHVybiAiJXMgbGluayAlcyIgJSAoc2VsZi5wYXRoLCBzZWxmLmxpbmspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vZGUgPSAiLSIKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm1vZGU6CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiMCVvIiAlIHNlbGYubW9kZQorICAgICAgICAgICAgICAgIGZtb2RlID0gIi0iCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mbW9kZToKKyAgICAgICAgICAgICAgICAgICAgZm1vZGUgPSAiMCVvIiAlIHNlbGYuZm1vZGUKKyAgICAgICAgICAgICAgICB1aWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYudWlkKQorICAgICAgICAgICAgICAgIGdpZCA9IHNlbGYuX21hcHVnaWQoc2VsZi5naWQpCisgICAgICAgICAgICAgICAgZnVpZCA9IHNlbGYuX21hcHVnaWQoc2VsZi5mdWlkKQorICAgICAgICAgICAgICAgIGZnaWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZmdpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzICVzICVzICVzICVzICVzICVzICVzIiAlIChzZWxmLnBhdGgsIG1vZGUsIHVpZCwgZ2lkLCBzZWxmLndhbGssIGZtb2RlLCBmdWlkLCBmZ2lkKQorCisgICAgICAgIGRlZiBfbWFwdWdpZChzZWxmLCBpZCk6CisgICAgICAgICAgICBpZiBpZCBpcyBOb25lIG9yIGlkID09IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiAiLSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlZCIgJSBpZAorCisgICAgIyBGaXggdGhlIHBlcm1pc3Npb24sIG93bmVyIGFuZCBncm91cCBvZiBwYXRoCisgICAgZGVmIGZpeF9wZXJtcyhwYXRoLCBtb2RlLCB1aWQsIGdpZCwgZGlyKToKKyAgICAgICAgaWYgbW9kZSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBjaG1vZCAwJW8gJXMiICUgKG1vZGUsIGRpcikpCisgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQorICAgICAgICAjIC0xIGlzIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IG1lYW5zIGRvbid0IGNoYW5nZSB0aGUgdWlkL2dpZAorICAgICAgICAjIGlmIHRoZXkgYXJlIEJPVEggLTEsIGRvbid0IGJvdGhlciB0byBsY2hvd24KKyAgICAgICAgaWYgbm90ICh1aWQgPT0gLTEgYW5kIGdpZCA9PSAtMSk6CisgICAgICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IGxjaG93biAlZDolZCAlcyIgJSAodWlkLCBnaWQsIGRpcikpCisgICAgICAgICAgICBvcy5sY2hvd24ocGF0aCwgdWlkLCBnaWQpCisKKyAgICAjIFJldHVybiBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlZmF1bHQKKyAgICAjIGZpbGVzL2ZzLXBlcm1zLnR4dCBvciB0aGUgY29udGVudHMgb2YgRklMRVNZU1RFTV9QRVJNU19UQUJMRVMKKyAgICAjIHBhdGhzIGFyZSByZXNvbHZlZCB2aWEgQkJQQVRICisgICAgZGVmIGdldF9mc19wZXJtc19saXN0KGQpOgorICAgICAgICBzdHIgPSAiIgorICAgICAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICAgICAgZnNfcGVybXNfdGFibGVzID0gZC5nZXRWYXIoJ0ZJTEVTWVNURU1fUEVSTVNfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGZzX3Blcm1zX3RhYmxlczoKKyAgICAgICAgICAgIGZzX3Blcm1zX3RhYmxlcyA9ICdmaWxlcy9mcy1wZXJtcy50eHQnCisgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gZnNfcGVybXNfdGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICBzdHIgKz0gIiAlcyIgJSBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkKKyAgICAgICAgcmV0dXJuIHN0cgorCisKKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICBmc19wZXJtc190YWJsZSA9IHt9CisKKyAgICAjIEJ5IGRlZmF1bHQgYWxsIG9mIHRoZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4KKyAgICAjIGJpdGJha2UuY29uZiB3aWxsIGdldCAwNzU1IHJvb3Q6cm9vdC4KKyAgICB0YXJnZXRfcGF0aF92YXJzID0gWyAgICAnYmFzZV9wcmVmaXgnLAorICAgICAgICAgICAgICAgICdwcmVmaXgnLAorICAgICAgICAgICAgICAgICdleGVjX3ByZWZpeCcsCisgICAgICAgICAgICAgICAgJ2Jhc2VfYmluZGlyJywKKyAgICAgICAgICAgICAgICAnYmFzZV9zYmluZGlyJywKKyAgICAgICAgICAgICAgICAnYmFzZV9saWJkaXInLAorICAgICAgICAgICAgICAgICdkYXRhZGlyJywKKyAgICAgICAgICAgICAgICAnc3lzY29uZmRpcicsCisgICAgICAgICAgICAgICAgJ3NlcnZpY2VkaXInLAorICAgICAgICAgICAgICAgICdzaGFyZWRzdGF0ZWRpcicsCisgICAgICAgICAgICAgICAgJ2xvY2Fsc3RhdGVkaXInLAorICAgICAgICAgICAgICAgICdpbmZvZGlyJywKKyAgICAgICAgICAgICAgICAnbWFuZGlyJywKKyAgICAgICAgICAgICAgICAnZG9jZGlyJywKKyAgICAgICAgICAgICAgICAnYmluZGlyJywKKyAgICAgICAgICAgICAgICAnc2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2xpYmV4ZWNkaXInLAorICAgICAgICAgICAgICAgICdsaWJkaXInLAorICAgICAgICAgICAgICAgICdpbmNsdWRlZGlyJywKKyAgICAgICAgICAgICAgICAnb2xkaW5jbHVkZWRpcicgXQorCisgICAgZm9yIHBhdGggaW4gdGFyZ2V0X3BhdGhfdmFyczoKKyAgICAgICAgZGlyID0gZC5nZXRWYXIocGF0aCwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgZGlyID09ICIiOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZnNfcGVybXNfdGFibGVbZGlyXSA9IGZzX3Blcm1zX2VudHJ5KGJiLmRhdGEuZXhwYW5kKCIlcyAwNzU1IHJvb3Qgcm9vdCBmYWxzZSAtIC0gLSIgJSAoZGlyKSwgZCkpCisKKyAgICAjIE5vdyB3ZSBhY3R1YWxseSBsb2FkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAgICBmb3IgY29uZiBpbiBnZXRfZnNfcGVybXNfbGlzdChkKS5zcGxpdCgpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25mKToKKyAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxzcGxpdCA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihsc3BsaXQpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbGVuKGxzcGxpdCkgIT0gOCBhbmQgbm90IChsZW4obHNwbGl0KSA9PSAzIGFuZCBsc3BsaXRbMV0ubG93ZXIoKSA9PSAibGluayIpOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRml4dXAgcGVybXM6ICVzIGludmFsaWQgbGluZTogJXMiICUgKGNvbmYsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwZXJtLWxpbmUiLCBtc2csIGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZW50cnkgPSBmc19wZXJtc19lbnRyeShkLmV4cGFuZChsaW5lKSkKKyAgICAgICAgICAgICAgICBpZiBlbnRyeSBhbmQgZW50cnkucGF0aDoKKyAgICAgICAgICAgICAgICAgICAgZnNfcGVybXNfdGFibGVbZW50cnkucGF0aF0gPSBlbnRyeQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAjIERlYnVnIC0tIGxpc3Qgb3V0IGluLW1lbW9yeSB0YWJsZQorICAgICNmb3IgZGlyIGluIGZzX3Blcm1zX3RhYmxlOgorICAgICMgICAgYmIubm90ZSgiRml4dXAgUGVybXM6ICVzOiAlcyIgJSAoZGlyLCBzdHIoZnNfcGVybXNfdGFibGVbZGlyXSkpKQorCisgICAgIyBXZSBwcm9jZXNzIGxpbmtzIGZpcnN0LCBzbyB3ZSBjYW4gZ28gYmFjayBhbmQgZml4dXAgZGlyZWN0b3J5IG93bmVyc2hpcAorICAgICMgZm9yIGFueSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yaWVzCisgICAgZm9yIGRpciBpbiBmc19wZXJtc190YWJsZToKKyAgICAgICAgaWYgbm90IGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluazoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgb3JpZ2luID0gZHZhciArIGRpcgorICAgICAgICBpZiBub3QgKGNwYXRoLmV4aXN0cyhvcmlnaW4pIGFuZCBjcGF0aC5pc2RpcihvcmlnaW4pIGFuZCBub3QgY3BhdGguaXNsaW5rKG9yaWdpbikpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBsaW5rID0gZnNfcGVybXNfdGFibGVbZGlyXS5saW5rCisgICAgICAgIGlmIGxpbmtbMF0gPT0gIi8iOgorICAgICAgICAgICAgdGFyZ2V0ID0gZHZhciArIGxpbmsKKyAgICAgICAgICAgIHB0YXJnZXQgPSBsaW5rCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9yaWdpbiksIGxpbmspCisgICAgICAgICAgICBwdGFyZ2V0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShkaXIpLCBsaW5rKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0YXJnZXQpOgorICAgICAgICAgICAgbXNnID0gIkZpeHVwIFBlcm1zOiBVbmFibGUgdG8gY29ycmVjdCBkaXJlY3RvcnkgbGluaywgdGFyZ2V0IGFscmVhZHkgZXhpc3RzOiAlcyAtPiAlcyIgJSAoZGlyLCBwdGFyZ2V0KQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBlcm0tbGluayIsIG1zZywgZCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aCB0byBtb3ZlIGRpcmVjdG9yeSB0bywgbW92ZSBpdCwgYW5kIHRoZW4gc2V0dXAgdGhlIHN5bWxpbmsKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZSh0YXJnZXQpKQorICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IFJlbmFtZSAlcyAtPiAlcyIgJSAoZGlyLCBwdGFyZ2V0KSkKKyAgICAgICAgb3MucmVuYW1lKG9yaWdpbiwgdGFyZ2V0KQorICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IExpbmsgJXMgLT4gJXMiICUgKGRpciwgbGluaykpCisgICAgICAgIG9zLnN5bWxpbmsobGluaywgb3JpZ2luKQorCisgICAgZm9yIGRpciBpbiBmc19wZXJtc190YWJsZToKKyAgICAgICAgaWYgZnNfcGVybXNfdGFibGVbZGlyXS5saW5rOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBvcmlnaW4gPSBkdmFyICsgZGlyCisgICAgICAgIGlmIG5vdCAoY3BhdGguZXhpc3RzKG9yaWdpbikgYW5kIGNwYXRoLmlzZGlyKG9yaWdpbikpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBmaXhfcGVybXMob3JpZ2luLCBmc19wZXJtc190YWJsZVtkaXJdLm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0udWlkLCBmc19wZXJtc190YWJsZVtkaXJdLmdpZCwgZGlyKQorCisgICAgICAgIGlmIGZzX3Blcm1zX3RhYmxlW2Rpcl0ud2FsayA9PSAndHJ1ZSc6CisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvcmlnaW4pOgorICAgICAgICAgICAgICAgIGZvciBkciBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICBlYWNoX2RpciA9IG9zLnBhdGguam9pbihyb290LCBkcikKKyAgICAgICAgICAgICAgICAgICAgZml4X3Blcm1zKGVhY2hfZGlyLCBmc19wZXJtc190YWJsZVtkaXJdLm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0udWlkLCBmc19wZXJtc190YWJsZVtkaXJdLmdpZCwgZGlyKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBlYWNoX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgICAgICAgICAgZml4X3Blcm1zKGVhY2hfZmlsZSwgZnNfcGVybXNfdGFibGVbZGlyXS5mbW9kZSwgZnNfcGVybXNfdGFibGVbZGlyXS5mdWlkLCBmc19wZXJtc190YWJsZVtkaXJdLmZnaWQsIGRpcikKK30KKworcHl0aG9uIHNwbGl0X2FuZF9zdHJpcF9maWxlcyAoKSB7CisgICAgaW1wb3J0IHN0YXQsIGVycm5vCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICMgV2UgZGVmYXVsdCB0byAnLmRlYnVnJyBzdHlsZQorICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJywgVHJ1ZSkgPT0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JzoKKyAgICAgICAgIyBTaW5nbGUgZGVidWctZmlsZS1kaXJlY3Rvcnkgc3R5bGUgZGVidWcgaW5mbworICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIuZGVidWciCisgICAgICAgIGRlYnVnZGlyID0gIiIKKyAgICAgICAgZGVidWdsaWJkaXIgPSAiL3Vzci9saWIvZGVidWciCisgICAgICAgIGRlYnVnc3JjZGlyID0gIi91c3Ivc3JjL2RlYnVnIgorICAgIGVsaWYgZC5nZXRWYXIoJ1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnLCBUcnVlKSA9PSAnZGVidWctd2l0aG91dC1zcmMnOgorICAgICAgICAjIE9yaWdpbmFsIE9FLWNvcmUsIGEuay5hLiAiLmRlYnVnIiwgc3R5bGUgZGVidWcgaW5mbywgYnV0IHdpdGhvdXQgc291cmNlcyBpbiAvdXNyL3NyYy9kZWJ1ZworICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIiCisgICAgICAgIGRlYnVnZGlyID0gIi8uZGVidWciCisgICAgICAgIGRlYnVnbGliZGlyID0gIiIKKyAgICAgICAgZGVidWdzcmNkaXIgPSAiIgorICAgIGVsc2U6CisgICAgICAgICMgT3JpZ2luYWwgT0UtY29yZSwgYS5rLmEuICIuZGVidWciLCBzdHlsZSBkZWJ1ZyBpbmZvCisgICAgICAgIGRlYnVnYXBwZW5kID0gIiIKKyAgICAgICAgZGVidWdkaXIgPSAiLy5kZWJ1ZyIKKyAgICAgICAgZGVidWdsaWJkaXIgPSAiIgorICAgICAgICBkZWJ1Z3NyY2RpciA9ICIvdXNyL3NyYy9kZWJ1ZyIKKworICAgIHNvdXJjZWZpbGUgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9kZWJ1Z3NvdXJjZXMubGlzdCIpCisgICAgYmIudXRpbHMucmVtb3ZlKHNvdXJjZWZpbGUpCisKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBSZXR1cm4gdHlwZSAoYml0cyk6CisgICAgIyAwIC0gbm90IGVsZgorICAgICMgMSAtIEVMRgorICAgICMgMiAtIHN0cmlwcGVkCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKyAgICBkZWYgaXNFTEYocGF0aCk6CisgICAgICAgIHR5cGUgPSAwCisgICAgICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJmaWxlIFwiJXNcIiIgJSBwYXRoLnJlcGxhY2UoIlwiIiwgIlxcXCIiKSkKKworICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICBtc2cgPSAic3BsaXRfYW5kX3N0cmlwX2ZpbGVzOiAnZmlsZSAlcycgZmFpbGVkIiAlIHBhdGgKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJzcGxpdC1zdHJpcCIsIG1zZywgZCkKKyAgICAgICAgICAgIHJldHVybiB0eXBlCisKKyAgICAgICAgIyBOb3Qgc3RyaXBwZWQKKyAgICAgICAgaWYgIkVMRiIgaW4gcmVzdWx0OgorICAgICAgICAgICAgdHlwZSB8PSAxCisgICAgICAgICAgICBpZiAibm90IHN0cmlwcGVkIiBub3QgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gMgorICAgICAgICAgICAgaWYgImV4ZWN1dGFibGUiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDQKKyAgICAgICAgICAgIGlmICJzaGFyZWQiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDgKKyAgICAgICAgcmV0dXJuIHR5cGUKKworCisgICAgIworICAgICMgRmlyc3QgbGV0cyBmaWd1cmUgb3V0IGFsbCBvZiB0aGUgZmlsZXMgd2UgbWF5IGhhdmUgdG8gcHJvY2VzcyAuLi4gZG8gdGhpcyBvbmx5IG9uY2UhCisgICAgIworICAgIGVsZmZpbGVzID0ge30KKyAgICBzeW1saW5rcyA9IHt9CisgICAga2Vybm1vZHMgPSBbXQorICAgIGlub2RlcyA9IHt9CisgICAgbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGR2YXIgKyBvcy5zZXAgKyBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpCisgICAgYmFzZWxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkpCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfU1RSSVAnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhkdmFyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCIua28iKSBhbmQgZmlsZS5maW5kKCIvbGliL21vZHVsZXMvIikgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGtlcm5tb2RzLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBTa2lwIGRlYnVnIGZpbGVzCisgICAgICAgICAgICAgICAgaWYgZGVidWdhcHBlbmQgYW5kIGZpbGUuZW5kc3dpdGgoZGVidWdhcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGRlYnVnZGlyIGFuZCBkZWJ1Z2RpciBpbiBvcy5wYXRoLmRpcm5hbWUoZmlsZVtsZW4oZHZhcik6XSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGx0YXJnZXQgPSBjcGF0aC5yZWFscGF0aChmaWxlLCBkdmFyLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcyA9IGNwYXRoLmxzdGF0KGx0YXJnZXQpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgKGVyciwgc3RyZXJyb3IpID0gZS5hcmdzCisgICAgICAgICAgICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAjIFNraXAgYnJva2VuIHN5bWxpbmtzCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBDaGVjayBpdHMgYW4gZXhjdXRhYmxlCisgICAgICAgICAgICAgICAgaWYgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWFVTUikgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWEdSUCkgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWE9USCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgKChmaWxlLnN0YXJ0c3dpdGgobGliZGlyKSBvciBmaWxlLnN0YXJ0c3dpdGgoYmFzZWxpYmRpcikpIGFuZCAiLnNvIiBpbiBmKToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBpdCdzIGEgc3ltbGluaywgYW5kIHBvaW50cyB0byBhbiBFTEYgZmlsZSwgd2UgY2FwdHVyZSB0aGUgcmVhZGxpbmsgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGlmIGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc0VMRihsdGFyZ2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYmIubm90ZSgiU3ltOiAlcyAoJWQpIiAlIChsdGFyZ2V0LCBpc0VMRihsdGFyZ2V0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3NbZmlsZV0gPSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCisgICAgICAgICAgICAgICAgICAgICMgLi4uYnV0IGlzIGl0IEVMRiwgYW5kIGlzIGl0IGFscmVhZHkgc3RyaXBwZWQ/CisgICAgICAgICAgICAgICAgICAgIGVsZl9maWxlID0gaXNFTEYoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdhbHJlYWR5LXN0cmlwcGVkJyBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlNraXBwaW5nIGZpbGUgJXMgZnJvbSAlcyBmb3IgYWxyZWFkeS1zdHJpcHBlZCBRQSB0ZXN0IiAlIChmaWxlW2xlbihkdmFyKTpdLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIkZpbGUgJyVzJyBmcm9tICVzIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJhbHJlYWR5LXN0cmlwcGVkIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIHVuc3RyaXBwZWQgZWxmIGZpbGUuIFdlIG5lZWQgdG86CisgICAgICAgICAgICAgICAgICAgICAgICAjICBhKSBNYWtlIHN1cmUgYW55IGZpbGUgd2Ugc3RyaXAgaXMgbm90IGhhcmRsaW5rZWQgdG8gYW55dGhpbmcgZWxzZSBvdXRzaWRlIHRoaXMgdHJlZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAgYikgT25seSBzdHJpcCBhbnkgaGFyZGxpbmtlZCBmaWxlIG9uY2UgKG5vIHJhY2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgIyAgYykgVHJhY2sgYW55IGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzIHNvIHRoYXQgd2UgY2FuIHJlY29uc3RydWN0IG1hdGNoaW5nIGRlYnVnIGZpbGUgaGFyZGxpbmtzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlIGEgcmVmZXJlbmNlIG9mIGRldmljZSBJRCBhbmQgaW5vZGUgbnVtYmVyIHRvIGluZGVudGlmeSBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9yZWZlcmVuY2UgPSAiJWRfJWQiICUgKHMuc3RfZGV2LCBzLnN0X2lubykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVfcmVmZXJlbmNlIGluIGlub2RlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKGlub2Rlc1tmaWxlX3JlZmVyZW5jZV1bMF0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW2ZpbGVfcmVmZXJlbmNlXS5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW2ZpbGVfcmVmZXJlbmNlXSA9IFtmaWxlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnJlYWsgaGFyZGxpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmaWxlLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZmZpbGVzW2ZpbGVdID0gZWxmX2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTW9kaWZpZWQgdGhlIGZpbGUgc28gY2xlYXIgdGhlIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICBjcGF0aC51cGRhdGVjYWNoZShmaWxlKQorCisgICAgIworICAgICMgRmlyc3QgbGV0cyBwcm9jZXNzIGRlYnVnIHNwbGl0dGluZworICAgICMKKyAgICBpZiAoZC5nZXRWYXIoJ0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCcsIFRydWUpICE9ICcxJyk6CisgICAgICAgIGZvciBmaWxlIGluIGVsZmZpbGVzOgorICAgICAgICAgICAgc3JjID0gZmlsZVtsZW4oZHZhcik6XQorICAgICAgICAgICAgZGVzdCA9IGRlYnVnbGliZGlyICsgb3MucGF0aC5kaXJuYW1lKHNyYykgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUoc3JjKSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICBmcGF0aCA9IGR2YXIgKyBkZXN0CisKKyAgICAgICAgICAgICMgU3BsaXQgdGhlIGZpbGUuLi4KKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZnBhdGgpKQorICAgICAgICAgICAgI2JiLm5vdGUoIlNwbGl0ICVzIC0+ICVzIiAlIChmaWxlLCBmcGF0aCkpCisgICAgICAgICAgICAjIE9ubHkgc3RvcmUgb2ZmIHRoZSBoYXJkIGxpbmsgcmVmZXJlbmNlIGlmIHdlIHN1Y2Nlc3NmdWxseSBzcGxpdCEKKyAgICAgICAgICAgIHNwbGl0ZGVidWdpbmZvKGZpbGUsIGZwYXRoLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZCkKKworICAgICAgICAjIEhhcmRsaW5rIG91ciBkZWJ1ZyBzeW1ib2xzIHRvIHRoZSBvdGhlciBoYXJkbGluayBjb3BpZXMKKyAgICAgICAgZm9yIHJlZiBpbiBpbm9kZXM6CisgICAgICAgICAgICBpZiBsZW4oaW5vZGVzW3JlZl0pID09IDE6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGlub2Rlc1tyZWZdWzE6XToKKyAgICAgICAgICAgICAgICBzcmMgPSBmaWxlW2xlbihkdmFyKTpdCisgICAgICAgICAgICAgICAgZGVzdCA9IGRlYnVnbGliZGlyICsgb3MucGF0aC5kaXJuYW1lKHNyYykgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUoc3JjKSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorICAgICAgICAgICAgICAgIHRhcmdldCA9IGlub2Rlc1tyZWZdWzBdW2xlbihkdmFyKTpdCisgICAgICAgICAgICAgICAgZnRhcmdldCA9IGR2YXIgKyBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZSh0YXJnZXQpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHRhcmdldCkgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZnBhdGgpKQorICAgICAgICAgICAgICAgICNiYi5ub3RlKCJMaW5rICVzIC0+ICVzIiAlIChmcGF0aCwgZnRhcmdldCkpCisgICAgICAgICAgICAgICAgb3MubGluayhmdGFyZ2V0LCBmcGF0aCkKKworICAgICAgICAjIENyZWF0ZSBzeW1saW5rcyBmb3IgYWxsIGNhc2VzIHdlIHdlcmUgYWJsZSB0byBzcGxpdCBzeW1ib2xzCisgICAgICAgIGZvciBmaWxlIGluIHN5bWxpbmtzOgorICAgICAgICAgICAgc3JjID0gZmlsZVtsZW4oZHZhcik6XQorICAgICAgICAgICAgZGVzdCA9IGRlYnVnbGliZGlyICsgb3MucGF0aC5kaXJuYW1lKHNyYykgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUoc3JjKSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICBmcGF0aCA9IGR2YXIgKyBkZXN0CisgICAgICAgICAgICAjIFNraXAgaXQgaWYgdGhlIHRhcmdldCBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IG9zLnN0YXQoZnBhdGgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbHRhcmdldCA9IHN5bWxpbmtzW2ZpbGVdCisgICAgICAgICAgICBscGF0aCA9IG9zLnBhdGguZGlybmFtZShsdGFyZ2V0KQorICAgICAgICAgICAgbGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGx0YXJnZXQpCisgICAgICAgICAgICBmdGFyZ2V0ID0gIiIKKyAgICAgICAgICAgIGlmIGxwYXRoIGFuZCBscGF0aCAhPSAiLiI6CisgICAgICAgICAgICAgICAgZnRhcmdldCArPSBscGF0aCArIGRlYnVnZGlyICsgIi8iCisgICAgICAgICAgICBmdGFyZ2V0ICs9IGxiYXNlICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgIGlmIGxwYXRoLnN0YXJ0c3dpdGgoIi4uIik6CisgICAgICAgICAgICAgICAgZnRhcmdldCA9IG9zLnBhdGguam9pbigiLi4iLCBmdGFyZ2V0KQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmcGF0aCkpCisgICAgICAgICAgICAjYmIubm90ZSgiU3ltbGluayAlcyAtPiAlcyIgJSAoZnBhdGgsIGZ0YXJnZXQpKQorICAgICAgICAgICAgb3Muc3ltbGluayhmdGFyZ2V0LCBmcGF0aCkKKworICAgICAgICAjIFByb2Nlc3MgdGhlIGRlYnVnc3JjZGlyIGlmIHJlcXVlc3RlZC4uLgorICAgICAgICAjIFRoaXMgY29waWVzIGFuZCBwbGFjZXMgdGhlIHJlZmVyZW5jZWQgc291cmNlcyBmb3IgbGF0ZXIgZGVidWdnaW5nLi4uCisgICAgICAgIGNvcHlkZWJ1Z3NvdXJjZXMoZGVidWdzcmNkaXIsIGQpCisgICAgIworICAgICMgRW5kIG9mIGRlYnVnIHNwbGl0dGluZworICAgICMKKworICAgICMKKyAgICAjIE5vdyBsZXRzIGdvIGJhY2sgb3ZlciB0aGluZ3MgYW5kIHN0cmlwIHRoZW0KKyAgICAjCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfU1RSSVAnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICBzdHJpcCA9IGQuZ2V0VmFyKCJTVFJJUCIsIFRydWUpCisgICAgICAgIHNmaWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIGVsZmZpbGVzOgorICAgICAgICAgICAgZWxmX2ZpbGUgPSBpbnQoZWxmZmlsZXNbZmlsZV0pCisgICAgICAgICAgICAjYmIubm90ZSgiU3RyaXAgJXMiICUgZmlsZSkKKyAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGZpbGUsIGVsZl9maWxlLCBzdHJpcCkpCisgICAgICAgIGZvciBmIGluIGtlcm5tb2RzOgorICAgICAgICAgICAgc2ZpbGVzLmFwcGVuZCgoZiwgMTYsIHN0cmlwKSkKKworICAgICAgICBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhzZmlsZXMsIG9lLnBhY2thZ2UucnVuc3RyaXApCisKKyAgICAjCisgICAgIyBFbmQgb2Ygc3RyaXAKKyAgICAjCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlcyAoKSB7CisgICAgaW1wb3J0IGdsb2IsIHJlCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIG91dGRpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSkKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0ZGlyKQorICAgIG9zLmNoZGlyKGR2YXIpCisKKyAgICAjIFNhbml0eSBjaGVjayBQQUNLQUdFUyBmb3IgZHVwbGljYXRlcworICAgICMgU2FuaXR5IHNob3VsZCBiZSBtb3ZlZCB0byBzYW5pdHkuYmJjbGFzcyBvbmNlIHdlIGhhdmUgdGhlIGluZnJhc3R1Y3R1cmUKKyAgICBwYWNrYWdlX2xpc3QgPSBbXQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBwa2cgaW4gcGFja2FnZV9saXN0OgorICAgICAgICAgICAgbXNnID0gIiVzIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgJSBwa2cKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwYWNrYWdlcy1saXN0IiwgbXNnLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZV9saXN0LmFwcGVuZChwa2cpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZV9saXN0KSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgc2VlbiA9IFtdCisKKyAgICAjIG9zLm1rZGlyIG1hc2tzIHRoZSBwZXJtaXNzaW9ucyB3aXRoIHVtYXNrIHNvIHdlIGhhdmUgdG8gdW5zZXQgaXQgZmlyc3QKKyAgICBvbGR1bWFzayA9IG9zLnVtYXNrKDApCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgcm9vdCA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihyb290KQorCisgICAgICAgIGZpbGVzdmFyID0gZC5nZXRWYXIoJ0ZJTEVTXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgIi8vIiBpbiBmaWxlc3ZhcjoKKyAgICAgICAgICAgIG1zZyA9ICJGSUxFUyB2YXJpYWJsZSBmb3IgcGFja2FnZSAlcyBjb250YWlucyAnLy8nIHdoaWNoIGlzIGludmFsaWQuIEF0dGVtcHRpbmcgdG8gZml4IHRoaXMgYnV0IHlvdSBzaG91bGQgY29ycmVjdCB0aGUgbWV0YWRhdGEuXG4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZmlsZXMtaW52YWxpZCIsIG1zZywgZCkKKyAgICAgICAgICAgIGZpbGVzdmFyLnJlcGxhY2UoIi8vIiwgIi8iKQorCisgICAgICAgIG9yaWdmaWxlcyA9IGZpbGVzdmFyLnNwbGl0KCkKKyAgICAgICAgZmlsZXMgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKG9yaWdmaWxlcykKKworICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIChub3QgY3BhdGguaXNsaW5rKGZpbGUpKSBhbmQgKG5vdCBjcGF0aC5leGlzdHMoZmlsZSkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBmaWxlIGluIHNlZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlZW4uYXBwZW5kKGZpbGUpCisKKyAgICAgICAgICAgIGRlZiBta2RpcihzcmMsIGRlc3QsIHApOgorICAgICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihzcmMsIHApCisgICAgICAgICAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihkZXN0LCBwKQorICAgICAgICAgICAgICAgIGZzdGF0ID0gY3BhdGguc3RhdChzcmMpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoZGVzdCwgZnN0YXQuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICBvcy5jaG93bihkZXN0LCBmc3RhdC5zdF91aWQsIGZzdGF0LnN0X2dpZCkKKyAgICAgICAgICAgICAgICBpZiBwIG5vdCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICBzZWVuLmFwcGVuZChwKQorICAgICAgICAgICAgICAgIGNwYXRoLnVwZGF0ZWNhY2hlKGRlc3QpCisKKyAgICAgICAgICAgIGRlZiBta2Rpcl9yZWN1cnNlKHNyYywgZGVzdCwgcGF0aHMpOgorICAgICAgICAgICAgICAgIGlmIGNwYXRoLmV4aXN0cyhkZXN0ICsgJy8nICsgcGF0aHMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICB3aGlsZSBwYXRocy5zdGFydHN3aXRoKCIuLyIpOgorICAgICAgICAgICAgICAgICAgICBwYXRocyA9IHBhdGhzWzI6XQorICAgICAgICAgICAgICAgIHAgPSAiLiIKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiBwYXRocy5zcGxpdCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHAsIGMpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5leGlzdHMob3MucGF0aC5qb2luKGRlc3QsIHApKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKHNyYywgZGVzdCwgcCkKKworICAgICAgICAgICAgaWYgY3BhdGguaXNkaXIoZmlsZSkgYW5kIG5vdCBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgbWtkaXJfcmVjdXJzZShkdmFyLCByb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIG1rZGlyX3JlY3Vyc2UoZHZhciwgcm9vdCwgb3MucGF0aC5kaXJuYW1lKGZpbGUpKQorICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQorICAgICAgICAgICAgaWYgbm90IGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICBvcy5saW5rKGZpbGUsIGZwYXRoKQorICAgICAgICAgICAgICAgIGZzdGF0ID0gY3BhdGguc3RhdChmaWxlKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBmc3RhdC5zdF9tb2RlKQorICAgICAgICAgICAgICAgIG9zLmNob3duKGZwYXRoLCBmc3RhdC5zdF91aWQsIGZzdGF0LnN0X2dpZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0ID0gYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZnBhdGgpCisgICAgICAgICAgICBpZiByZXQgaXMgRmFsc2Ugb3IgcmV0ID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiRmlsZSBwb3B1bGF0aW9uIGZhaWxlZCIpCisKKyAgICBvcy51bWFzayhvbGR1bWFzaykKKyAgICBvcy5jaGRpcih3b3JrZGlyKQorCisgICAgIyBIYW5kbGUgTElDRU5TRV9FWENMVVNJT04KKyAgICBwYWNrYWdlX2xpc3QgPSBbXQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0xJQ0VOU0VfRVhDTFVTSU9OLScgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgbXNnID0gIiVzIGhhcyBhbiBpbmNvbXBhdGlibGUgbGljZW5zZS4gRXhjbHVkaW5nIGZyb20gcGFja2FnaW5nLiIgJSBwa2cKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbmNvbXBhdGlibGUtbGljZW5zZSIsIG1zZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfbGlzdC5hcHBlbmQocGtnKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VfbGlzdCkpCisKKyAgICB1bnNoaXBwZWQgPSBbXQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKGR2YXIpOgorICAgICAgICBkaXIgPSByb290W2xlbihkdmFyKTpdCisgICAgICAgIGlmIG5vdCBkaXI6CisgICAgICAgICAgICBkaXIgPSBvcy5zZXAKKyAgICAgICAgZm9yIGYgaW4gKGZpbGVzICsgZGlycyk6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpciwgZikKKyAgICAgICAgICAgIGlmICgnLicgKyBwYXRoKSBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICB1bnNoaXBwZWQuYXBwZW5kKHBhdGgpCisKKyAgICBpZiB1bnNoaXBwZWQgIT0gW106CisgICAgICAgIG1zZyA9IHBuICsgIjogRmlsZXMvZGlyZWN0b3JpZXMgd2VyZSBpbnN0YWxsZWQgYnV0IG5vdCBzaGlwcGVkIGluIGFueSBwYWNrYWdlOiIKKyAgICAgICAgaWYgImluc3RhbGxlZC12cy1zaGlwcGVkIiBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBiYi5ub3RlKCJQYWNrYWdlICVzIHNraXBwaW5nIFFBIHRlc3RzOiBpbnN0YWxsZWQtdnMtc2hpcHBlZCIgJSBwbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBmIGluIHVuc2hpcHBlZDoKKyAgICAgICAgICAgICAgICBtc2cgPSBtc2cgKyAiXG4gICIgKyBmCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiXG5QbGVhc2Ugc2V0IEZJTEVTIHN1Y2ggdGhhdCB0aGVzZSBpdGVtcyBhcmUgcGFja2FnZWQuIEFsdGVybmF0aXZlbHkgaWYgdGhleSBhcmUgdW5uZWVkZWQsIGF2b2lkIGluc3RhbGxpbmcgdGhlbSBvciBkZWxldGUgdGhlbSB3aXRoaW4gZG9faW5zdGFsbC4iCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW5zdGFsbGVkLXZzLXNoaXBwZWQiLCBtc2csIGQpCit9Citwb3B1bGF0ZV9wYWNrYWdlc1tkaXJzXSA9ICIke0R9IgorCitweXRob24gcGFja2FnZV9maXhzeW1saW5rcyAoKSB7CisgICAgaW1wb3J0IGVycm5vCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIEZhbHNlKS5zcGxpdCgpCisKKyAgICBkYW5nbGluZ19saW5rcyA9IHt9CisgICAgcGtnX2ZpbGVzID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBkYW5nbGluZ19saW5rc1twa2ddID0gW10KKyAgICAgICAgcGtnX2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBpbnN0X3Jvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICBmb3IgcGF0aCBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgICAgIHJwYXRoID0gcGF0aFtsZW4oaW5zdF9yb290KTpdCisgICAgICAgICAgICAgICAgcGtnX2ZpbGVzW3BrZ10uYXBwZW5kKHJwYXRoKQorICAgICAgICAgICAgICAgIHJ0YXJnZXQgPSBjcGF0aC5yZWFscGF0aChwYXRoLCBpbnN0X3Jvb3QsIFRydWUsIGFzc3VtZV9kaXIgPSBUcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5sZXhpc3RzKHJ0YXJnZXQpOgorICAgICAgICAgICAgICAgICAgICBkYW5nbGluZ19saW5rc1twa2ddLmFwcGVuZChvcy5wYXRoLm5vcm1wYXRoKHJ0YXJnZXRbbGVuKGluc3Rfcm9vdCk6XSkpCisKKyAgICBuZXdyZGVwZW5kcyA9IHt9CisgICAgZm9yIHBrZyBpbiBkYW5nbGluZ19saW5rczoKKyAgICAgICAgZm9yIGwgaW4gZGFuZ2xpbmdfbGlua3NbcGtnXToKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICIlcyBjb250YWlucyBkYW5nbGluZyBsaW5rICVzIiAlIChwa2csIGwpKQorICAgICAgICAgICAgZm9yIHAgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgaWYgbCBpbiBwa2dfZmlsZXNbcF06CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJ0YXJnZXQgZm91bmQgaW4gJXMiICUgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAgPT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIG5ld3JkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JkZXBlbmRzW3BrZ10gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmRlcGVuZHNbcGtnXS5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBmb3VuZCA9PSBGYWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCIlcyBjb250YWlucyBkYW5nbGluZyBzeW1saW5rIHRvICVzIiAlIChwa2csIGwpKQorCisgICAgZm9yIHBrZyBpbiBuZXdyZGVwZW5kczoKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgcCBpbiBuZXdyZGVwZW5kc1twa2ddOgorICAgICAgICAgICAgaWYgcCBub3QgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbcF0gPSBbXQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCit9CisKKworcHl0aG9uIHBhY2thZ2VfcGFja2FnZV9uYW1lX2hvb2soKSB7CisgICAgIiIiCisgICAgQSBwYWNrYWdlX25hbWVfaG9vayBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZXdyaXRlIHRoZSBwYWNrYWdlIG5hbWVzIGJ5CisgICAgY2hhbmdpbmcgUEtHLiAgRm9yIGFuIGV4YW1wbGUsIHNlZSBkZWJpYW4uYmJjbGFzcy4KKyAgICAiIiIKKyAgICBwYXNzCit9CisKK0VYUE9SVF9GVU5DVElPTlMgcGFja2FnZV9uYW1lX2hvb2sKKworCitQS0dERVNUV09SSyA9ICIke1dPUktESVJ9L3BrZ2RhdGEiCisKK3B5dGhvbiBlbWl0X3BrZ2RhdGEoKSB7CisgICAgZnJvbSBnbG9iIGltcG9ydCBnbG9iCisgICAgaW1wb3J0IGpzb24KKworICAgIGRlZiB3cml0ZV9pZl9leGlzdHMoZiwgcGtnLCB2YXIpOgorICAgICAgICBkZWYgZW5jb2RlKHN0cik6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBjID0gY29kZWNzLmdldGVuY29kZXIoInN0cmluZ19lc2NhcGUiKQorICAgICAgICAgICAgcmV0dXJuIGMoc3RyKVswXQorCisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKCclc18lcycgJSAodmFyLCBwa2cpLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBmLndyaXRlKCclc18lczogJXNcbicgJSAodmFyLCBwa2csIGVuY29kZSh2YWwpKSkKKyAgICAgICAgICAgIHJldHVybiB2YWwKKyAgICAgICAgdmFsID0gZC5nZXRWYXIoJyVzJyAlICh2YXIpLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBmLndyaXRlKCclczogJXNcbicgJSAodmFyLCBlbmNvZGUodmFsKSkpCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiB3cml0ZV9leHRyYV9wa2dzKHZhcmlhbnRzLCBwbiwgcGFja2FnZXMsIHBrZ2RhdGFkaXIpOgorICAgICAgICBmb3IgdmFyaWFudCBpbiB2YXJpYW50czoKKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvJXMtJXMiICUgKHBrZ2RhdGFkaXIsIHZhcmlhbnQsIHBuKSwgJ3cnKSBhcyBmZDoKKyAgICAgICAgICAgICAgICBmZC53cml0ZSgiUEFDS0FHRVM6ICVzXG4iICUgJyAnLmpvaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGxhbWJkYSBwa2c6ICclcy0lcycgJSAodmFyaWFudCwgcGtnKSwgcGFja2FnZXMuc3BsaXQoKSkpKQorCisgICAgZGVmIHdyaXRlX2V4dHJhX3J1bnRpbWVfcGtncyh2YXJpYW50cywgcGFja2FnZXMsIHBrZ2RhdGFkaXIpOgorICAgICAgICBmb3IgdmFyaWFudCBpbiB2YXJpYW50czoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBtbF9wa2cgPSAiJXMtJXMiICUgKHZhcmlhbnQsIHBrZykKKyAgICAgICAgICAgICAgICBzdWJkYXRhX2ZpbGUgPSAiJXMvcnVudGltZS8lcyIgJSAocGtnZGF0YWRpciwgbWxfcGtnKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzdWJkYXRhX2ZpbGUsICd3JykgYXMgZmQ6CisgICAgICAgICAgICAgICAgICAgIGZkLndyaXRlKCJQS0dfJXM6ICVzIiAlIChtbF9wa2csIHBrZykpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwa2dkYXRhZGlyID0gZC5nZXRWYXIoJ1BLR0RFU1RXT1JLJywgVHJ1ZSkKKworICAgICMgVGFrZSBzaGFyZWQgbG9jayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShkLmV4cGFuZCgiJHtQQUNLQUdFTE9DS30iKSwgVHJ1ZSkKKworICAgIGRhdGFfZmlsZSA9IHBrZ2RhdGFkaXIgKyBkLmV4cGFuZCgiLyR7UE59IiApCisgICAgZiA9IG9wZW4oZGF0YV9maWxlLCAndycpCisgICAgZi53cml0ZSgiUEFDS0FHRVM6ICVzXG4iICUgcGFja2FnZXMpCisgICAgZi5jbG9zZSgpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgZ2xvYmFsX3ZhcmlhbnRzID0gKGQuZ2V0VmFyKCdNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcmlhbnRzID0gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGQpOgorICAgICAgICB3cml0ZV9leHRyYV9wa2dzKHZhcmlhbnRzLCBwbiwgcGFja2FnZXMsIHBrZ2RhdGFkaXIpCisKKyAgICBpZiAoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCkpOgorICAgICAgICB3cml0ZV9leHRyYV9wa2dzKGdsb2JhbF92YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGtndmFsID0gZC5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIHBrZ3ZhbCBpcyBOb25lOgorICAgICAgICAgICAgcGtndmFsID0gcGtnCisgICAgICAgICAgICBkLnNldFZhcignUEtHXyVzJyAlIHBrZywgcGtnKQorCisgICAgICAgIHBrZ2Rlc3Rwa2cgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICBmaWxlcyA9IHt9CisgICAgICAgIHRvdGFsX3NpemUgPSAwCisgICAgICAgIGZvciBmIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICByZWxwdGggPSBvcy5wYXRoLnJlbHBhdGgoZiwgcGtnZGVzdHBrZykKKyAgICAgICAgICAgIGZzdGF0ID0gb3MubHN0YXQoZikKKyAgICAgICAgICAgIHRvdGFsX3NpemUgKz0gZnN0YXQuc3Rfc2l6ZQorICAgICAgICAgICAgZmlsZXNbb3Muc2VwICsgcmVscHRoXSA9IGZzdGF0LnN0X3NpemUKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTX0lORk8nLCBqc29uLmR1bXBzKGZpbGVzKSkKKworICAgICAgICBzdWJkYXRhX2ZpbGUgPSBwa2dkYXRhZGlyICsgIi9ydW50aW1lLyVzIiAlIHBrZworICAgICAgICBzZiA9IG9wZW4oc3ViZGF0YV9maWxlLCAndycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUE4nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQVicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUFInKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLR0UnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLR1YnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLR1InKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0xJQ0VOU0UnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0RFU0NSSVBUSU9OJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdTVU1NQVJZJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSREVQRU5EUycpCisgICAgICAgIHJwcm92ID0gd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUFJPVklERVMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JSRUNPTU1FTkRTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSU1VHR0VTVFMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JSRVBMQUNFUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUkNPTkZMSUNUUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnU0VDVElPTicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUEtHJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdBTExPV19FTVBUWScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wb3N0aW5zdCcpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAncGtnX3Bvc3RybScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAncGtnX3ByZWluc3QnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wcmVybScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVJQUk9WSURFU0ZMSVNUJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFU19JTkZPJykKKyAgICAgICAgZm9yIGRmaWxlIGluIChkLmdldFZhcignRklMRVJQUk9WSURFU0ZMSVNUXycgKyBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUlBST1ZJREVTXycgKyBkZmlsZSkKKworICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSREVQRU5EU0ZMSVNUJykKKyAgICAgICAgZm9yIGRmaWxlIGluIChkLmdldFZhcignRklMRVJERVBFTkRTRkxJU1RfJyArIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSREVQRU5EU18nICsgZGZpbGUpCisKKyAgICAgICAgc2Yud3JpdGUoJyVzXyVzOiAlZFxuJyAlICgnUEtHU0laRScsIHBrZywgdG90YWxfc2l6ZSkpCisgICAgICAgIHNmLmNsb3NlKCkKKworICAgICAgICAjIFN5bWxpbmtzIG5lZWRlZCBmb3IgcnByb3ZpZGVzIGxvb2t1cAorICAgICAgICBpZiBycHJvdjoKKyAgICAgICAgICAgIGZvciBwIGluIHJwcm92LnN0cmlwKCkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzdWJkYXRhX3N5bSA9IHBrZ2RhdGFkaXIgKyAiL3J1bnRpbWUtcnByb3ZpZGVzLyVzLyVzIiAlIChwLCBwa2cpCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzdWJkYXRhX3N5bSkpCisgICAgICAgICAgICAgICAgb2UucGF0aC5zeW1saW5rKCIuLi8uLi9ydW50aW1lLyVzIiAlIHBrZywgc3ViZGF0YV9zeW0sIFRydWUpCisKKyAgICAgICAgYWxsb3dfZW1wdHkgPSBkLmdldFZhcignQUxMT1dfRU1QVFlfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgYWxsb3dfZW1wdHk6CisgICAgICAgICAgICBhbGxvd19lbXB0eSA9IGQuZ2V0VmFyKCdBTExPV19FTVBUWScsIFRydWUpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgb3MuY2hkaXIocm9vdCkKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBnIG9yIGFsbG93X2VtcHR5ID09ICIxIjoKKyAgICAgICAgICAgICMgU3ltbGlua3MgbmVlZGVkIGZvciByZXZlcnNlIGxvb2t1cHMgKGZyb20gdGhlIGZpbmFsIHBhY2thZ2UgbmFtZSkKKyAgICAgICAgICAgIHN1YmRhdGFfc3ltID0gcGtnZGF0YWRpciArICIvcnVudGltZS1yZXZlcnNlLyVzIiAlIHBrZ3ZhbAorICAgICAgICAgICAgb2UucGF0aC5zeW1saW5rKCIuLi9ydW50aW1lLyVzIiAlIHBrZywgc3ViZGF0YV9zeW0sIFRydWUpCisKKyAgICAgICAgICAgIHBhY2thZ2VkZmlsZSA9IHBrZ2RhdGFkaXIgKyAnL3J1bnRpbWUvJXMucGFja2FnZWQnICUgcGtnCisgICAgICAgICAgICBvcGVuKHBhY2thZ2VkZmlsZSwgJ3cnKS5jbG9zZSgpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGQpOgorICAgICAgICB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3ModmFyaWFudHMsIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCk6CisgICAgICAgIHdyaXRlX2V4dHJhX3J1bnRpbWVfcGtncyhnbG9iYWxfdmFyaWFudHMsIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KK2VtaXRfcGtnZGF0YVtkaXJzXSA9ICIke1BLR0RFU1RXT1JLfS9ydW50aW1lICR7UEtHREVTVFdPUkt9L3J1bnRpbWUtcmV2ZXJzZSAke1BLR0RFU1RXT1JLfS9ydW50aW1lLXJwcm92aWRlcyIKKworbGRjb25maWdfcG9zdGluc3RfZnJhZ21lbnQoKSB7CitpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKwlpZiBbIC14IC9zYmluL2xkY29uZmlnIF07IHRoZW4gL3NiaW4vbGRjb25maWcgOyBmaQorZmkKK30KKworUlBNREVQUyA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZSAtLW1hY3JvcyAke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL21hY3JvcyAtLWRlZmluZSAnX3JwbWZjX21hZ2ljX3BhdGggJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0vbWlzYy9tYWdpYy5tZ2MnIC0tcnBtcG9wdCAke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL3JwbXBvcHQiCisKKyMgQ29sbGVjdCBwZXJmaWxlIHJ1bi10aW1lIGRlcGVuZGVuY3kgbWV0YWRhdGEKKyMgT3V0cHV0OgorIyAgRklMRVJQUk9WSURFU0ZMSVNUX3BrZyAtIGxpc3Qgb2YgYWxsIGZpbGVzIHcvIGRlcHMKKyMgIEZJTEVSUFJPVklERVNfZmlsZXBhdGhfcGtnIC0gcGVyIGZpbGUgZGVwCisjCisjICBGSUxFUkRFUEVORFNGTElTVF9wa2cgLSBsaXN0IG9mIGFsbCBmaWxlcyB3LyBkZXBzCisjICBGSUxFUkRFUEVORFNfZmlsZXBhdGhfcGtnIC0gcGVyIGZpbGUgZGVwCisKK3B5dGhvbiBwYWNrYWdlX2RvX2ZpbGVkZXBzKCkgeworICAgIGlmIGQuZ2V0VmFyKCdTS0lQX0ZJTEVERVBTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHJwbWRlcHMgPSBkLmdldFZhcignUlBNREVQUycsIFRydWUpCisKKyAgICBkZWYgY2h1bmtzKGZpbGVzLCBuKToKKyAgICAgICAgcmV0dXJuIFtmaWxlc1tpOmkrbl0gZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGZpbGVzKSwgbildCisKKyAgICBwa2dsaXN0ID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCdTS0lQX0ZJTEVERVBTXycgKyBwa2csIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgnLWRiZycpIG9yIHBrZy5lbmRzd2l0aCgnLWRvYycpIG9yIHBrZy5maW5kKCctbG9jYWxlLScpICE9IC0xIG9yIHBrZy5maW5kKCctbG9jYWxlZGF0YS0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWdjb252LScpICE9IC0xIG9yIHBrZy5maW5kKCctY2hhcm1hcC0nKSAhPSAtMSBvciBwa2cuc3RhcnRzd2l0aCgna2VybmVsLW1vZHVsZS0nKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBmaWxlcyBpbiBjaHVua3MocGtnZmlsZXNbcGtnXSwgMTAwKToKKyAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKChwa2csIGZpbGVzLCBycG1kZXBzLCBwa2dkZXN0KSkKKworICAgIHByb2Nlc3NlZCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKCBwa2dsaXN0LCBvZS5wYWNrYWdlLmZpbGVkZXBydW5uZXIpCisKKyAgICBwcm92aWRlc19maWxlcyA9IHt9CisgICAgcmVxdWlyZXNfZmlsZXMgPSB7fQorCisgICAgZm9yIHJlc3VsdCBpbiBwcm9jZXNzZWQ6CisgICAgICAgIChwa2csIHByb3ZpZGVzLCByZXF1aXJlcykgPSByZXN1bHQKKworICAgICAgICBpZiBwa2cgbm90IGluIHByb3ZpZGVzX2ZpbGVzOgorICAgICAgICAgICAgcHJvdmlkZXNfZmlsZXNbcGtnXSA9IFtdCisgICAgICAgIGlmIHBrZyBub3QgaW4gcmVxdWlyZXNfZmlsZXM6CisgICAgICAgICAgICByZXF1aXJlc19maWxlc1twa2ddID0gW10KKworICAgICAgICBmb3IgZmlsZSBpbiBwcm92aWRlczoKKyAgICAgICAgICAgIHByb3ZpZGVzX2ZpbGVzW3BrZ10uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICBrZXkgPSAiRklMRVJQUk9WSURFU18iICsgZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCAiICIuam9pbihwcm92aWRlc1tmaWxlXSkpCisKKyAgICAgICAgZm9yIGZpbGUgaW4gcmVxdWlyZXM6CisgICAgICAgICAgICByZXF1aXJlc19maWxlc1twa2ddLmFwcGVuZChmaWxlKQorICAgICAgICAgICAga2V5ID0gIkZJTEVSREVQRU5EU18iICsgZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCAiICIuam9pbihyZXF1aXJlc1tmaWxlXSkpCisKKyAgICBmb3IgcGtnIGluIHJlcXVpcmVzX2ZpbGVzOgorICAgICAgICBkLnNldFZhcigiRklMRVJERVBFTkRTRkxJU1RfIiArIHBrZywgIiAiLmpvaW4ocmVxdWlyZXNfZmlsZXNbcGtnXSkpCisgICAgZm9yIHBrZyBpbiBwcm92aWRlc19maWxlczoKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVSUFJPVklERVNGTElTVF8iICsgcGtnLCAiICIuam9pbihwcm92aWRlc19maWxlc1twa2ddKSkKK30KKworU0hMSUJTRElSUyA9ICIke1BLR0RBVEFfRElSfS8ke01MUFJFRklYfXNobGliczIiCitTSExJQlNXT1JLRElSID0gIiR7UEtHREVTVFdPUkt9LyR7TUxQUkVGSVh9c2hsaWJzMiIKKworcHl0aG9uIHBhY2thZ2VfZG9fc2hsaWJzKCkgeworICAgIGltcG9ydCByZSwgcGlwZXMKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKworICAgIGV4Y2x1ZGVfc2hsaWJzID0gZC5nZXRWYXIoJ0VYQ0xVREVfRlJPTV9TSExJQlMnLCAwKQorICAgIGlmIGV4Y2x1ZGVfc2hsaWJzOgorICAgICAgICBiYi5ub3RlKCJub3QgZ2VuZXJhdGluZyBzaGxpYnMiKQorICAgICAgICByZXR1cm4KKworICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIl4uKlwuc28iKQorICAgIGxpYmRpcl9yZSA9IHJlLmNvbXBpbGUoIi4qLyVzJCIgJSBkLmdldFZhcignYmFzZWxpYicsIFRydWUpKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHRhcmdldG9zID0gZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgdmVyID0gZC5nZXRWYXIoJ1BLR1YnLCBUcnVlKQorICAgIGlmIG5vdCB2ZXI6CisgICAgICAgIG1zZyA9ICJQS0dWIG5vdCBkZWZpbmVkIgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGtndi11bmRlZmluZWQiLCBtc2csIGQpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHNobGlic3dvcmtfZGlyID0gZC5nZXRWYXIoJ1NITElCU1dPUktESVInLCBUcnVlKQorCisgICAgIyBUYWtlIHNoYXJlZCBsb2NrIHNpbmNlIHdlJ3JlIG9ubHkgcmVhZGluZywgbm90IHdyaXRpbmcKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKGQuZXhwYW5kKCIke1BBQ0tBR0VMT0NLfSIpKQorCisgICAgZGVmIGxpbnV4X3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKToKKyAgICAgICAgbmVlZHNfbGRjb25maWcgPSBGYWxzZQorICAgICAgICBsZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpLnJlcGxhY2UocGtnZGVzdCArICIvIiArIHBrZywgJycpCisgICAgICAgIGNtZCA9IGQuZ2V0VmFyKCdPQkpEVU1QJywgVHJ1ZSkgKyAiIC1wICIgKyBwaXBlcy5xdW90ZShmaWxlKSArICIgMj4vZGV2L251bGwiCisgICAgICAgIGZkID0gb3MucG9wZW4oY21kKQorICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgcnBhdGggPSBbXQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrUlBBVEhccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHJwYXRocyA9IG0uZ3JvdXAoMSkucmVwbGFjZSgiJE9SSUdJTiIsIGxkaXIpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICBycGF0aCA9IG1hcChvcy5wYXRoLm5vcm1wYXRoLCBycGF0aHMpCisgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytORUVERURccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRlcCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIG5lZWRlZFtwa2ddOgorICAgICAgICAgICAgICAgICAgICBuZWVkZWRbcGtnXS5hcHBlbmQoKGRlcCwgZmlsZSwgcnBhdGgpKQorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytTT05BTUVccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHRoaXNfc29uYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIHByb3YgPSAodGhpc19zb25hbWUsIGxkaXIsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICBpZiBub3QgcHJvdiBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICAjIGlmIGxpYnJhcnkgaXMgcHJpdmF0ZSAob25seSB1c2VkIGJ5IHBhY2thZ2UpIHRoZW4gZG8gbm90IGJ1aWxkIHNobGliIGZvciBpdAorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcHJpdmF0ZV9saWJzIG9yIHRoaXNfc29uYW1lIG5vdCBpbiBwcml2YXRlX2xpYnM6CisgICAgICAgICAgICAgICAgICAgICAgICBzb25hbWVzLmFwcGVuZChwcm92KQorICAgICAgICAgICAgICAgIGlmIGxpYmRpcl9yZS5tYXRjaChvcy5wYXRoLmRpcm5hbWUoZmlsZSkpOgorICAgICAgICAgICAgICAgICAgICBuZWVkc19sZGNvbmZpZyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBzbmFwX3N5bWxpbmtzIGFuZCAob3MucGF0aC5iYXNlbmFtZShmaWxlKSAhPSB0aGlzX3NvbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHJlbmFtZXMuYXBwZW5kKChmaWxlLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZpbGUpLCB0aGlzX3NvbmFtZSkpKQorICAgICAgICByZXR1cm4gbmVlZHNfbGRjb25maWcKKworICAgIGRlZiBkYXJ3aW5fc28oZmlsZSwgbmVlZGVkLCBzb25hbWVzLCByZW5hbWVzLCBwa2d2ZXIpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKS5yZXBsYWNlKHBrZ2Rlc3QgKyAiLyIgKyBwa2csICcnKQorCisgICAgICAgIGRlZiBnZXRfY29tYmluYXRpb25zKGJhc2UpOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBHaXZlbiBhIGJhc2UgbGlicmFyeSBuYW1lLCBmaW5kIGFsbCBjb21iaW5hdGlvbnMgb2YgdGhpcyBzcGxpdCBieSAiLiIgYW5kICItIgorICAgICAgICAgICAgIworICAgICAgICAgICAgY29tYm9zID0gW10KKyAgICAgICAgICAgIG9wdGlvbnMgPSBiYXNlLnNwbGl0KCIuIikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihvcHRpb25zKSArIDEpOgorICAgICAgICAgICAgICAgIGNvbWJvcy5hcHBlbmQoIi4iLmpvaW4ob3B0aW9uc1swOmldKSkKKyAgICAgICAgICAgIG9wdGlvbnMgPSBiYXNlLnNwbGl0KCItIikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihvcHRpb25zKSArIDEpOgorICAgICAgICAgICAgICAgIGNvbWJvcy5hcHBlbmQoIi0iLmpvaW4ob3B0aW9uc1swOmldKSkKKyAgICAgICAgICAgIHJldHVybiBjb21ib3MKKworICAgICAgICBpZiAoZmlsZS5lbmRzd2l0aCgnLmR5bGliJykgb3IgZmlsZS5lbmRzd2l0aCgnLnNvJykpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGV2JykgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgICMgRHJvcCBzdWZmaXgKKyAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpLnJzcGxpdCgiLiIsMSlbMF0KKyAgICAgICAgICAgICMgRmluZCBhbGwgY29tYmluYXRpb25zCisgICAgICAgICAgICBjb21ib3MgPSBnZXRfY29tYmluYXRpb25zKG5hbWUpCisgICAgICAgICAgICBmb3IgY29tYm8gaW4gY29tYm9zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjb21ibyBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICBwcm92ID0gKGNvbWJvLCBsZGlyLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKHByb3YpCisgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoJy5keWxpYicpIG9yIGZpbGUuZW5kc3dpdGgoJy5zbycpOgorICAgICAgICAgICAgcnBhdGggPSBbXQorICAgICAgICAgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1sJywgZmlsZV0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgICAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6CisgICAgICAgICAgICAgICAgZm9yIGwgaW4gZXJyLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBsID0gbC5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGwuc3RhcnRzd2l0aCgncGF0aCAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoLmFwcGVuZChsLnNwbGl0KClbMV0pCisKKyAgICAgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1MJywgZmlsZV0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6CisgICAgICAgICAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgbCA9IGwuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsIG9yIGwuZW5kc3dpdGgoIjoiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAiaXMgbm90IGFuIG9iamVjdCBmaWxlIiBpbiBsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGwuc3BsaXQoKVswXSkucnNwbGl0KCIuIiwgMSlbMF0KKyAgICAgICAgICAgICAgICBpZiBuYW1lIGFuZCBuYW1lIG5vdCBpbiBuZWVkZWRbcGtnXToKKyAgICAgICAgICAgICAgICAgICAgIG5lZWRlZFtwa2ddLmFwcGVuZCgobmFtZSwgZmlsZSwgW10pKQorCisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VfU05BUF9MSUJfU1lNTElOS1MnLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHNuYXBfc3ltbGlua3MgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgc25hcF9zeW1saW5rcyA9IEZhbHNlCisKKyAgICBpZiAoZC5nZXRWYXIoJ1VTRV9MRENPTkZJRycsIFRydWUpIG9yICIxIikgPT0gIjEiOgorICAgICAgICB1c2VfbGRjb25maWcgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgdXNlX2xkY29uZmlnID0gRmFsc2UKKworICAgIG5lZWRlZCA9IHt9CisgICAgc2hsaWJfcHJvdmlkZXIgPSBvZS5wYWNrYWdlLnJlYWRfc2hsaWJfcHJvdmlkZXJzKGQpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHByaXZhdGVfbGlicyA9IGQuZ2V0VmFyKCdQUklWQVRFX0xJQlNfJyArIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1BSSVZBVEVfTElCUycsIFRydWUpIG9yICIiCisgICAgICAgIHByaXZhdGVfbGlicyA9IHByaXZhdGVfbGlicy5zcGxpdCgpCisgICAgICAgIG5lZWRzX2xkY29uZmlnID0gRmFsc2UKKyAgICAgICAgYmIuZGVidWcoMiwgImNhbGN1bGF0aW5nIHNobGliIHByb3ZpZGVzIGZvciAlcyIgJSBwa2cpCisKKyAgICAgICAgcGtndmVyID0gZC5nZXRWYXIoJ1BLR1ZfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ3ZlcjoKKyAgICAgICAgICAgIHBrZ3ZlciA9IGQuZ2V0VmFyKCdQVl8nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtndmVyOgorICAgICAgICAgICAgcGtndmVyID0gdmVyCisKKyAgICAgICAgbmVlZGVkW3BrZ10gPSBbXQorICAgICAgICBzb25hbWVzID0gbGlzdCgpCisgICAgICAgIHJlbmFtZXMgPSBsaXN0KCkKKyAgICAgICAgZm9yIGZpbGUgaW4gcGtnZmlsZXNbcGtnXToKKyAgICAgICAgICAgICAgICBzb25hbWUgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgY3BhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHRhcmdldG9zID09ICJkYXJ3aW4iIG9yIHRhcmdldG9zID09ICJkYXJ3aW44IjoKKyAgICAgICAgICAgICAgICAgICAgZGFyd2luX3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKQorICAgICAgICAgICAgICAgIGVsaWYgb3MuYWNjZXNzKGZpbGUsIG9zLlhfT0spIG9yIGxpYl9yZS5tYXRjaChmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgbGRjb25maWcgPSBsaW51eF9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICAgICAgbmVlZHNfbGRjb25maWcgPSBuZWVkc19sZGNvbmZpZyBvciBsZGNvbmZpZworICAgICAgICBmb3IgKG9sZCwgbmV3KSBpbiByZW5hbWVzOgorICAgICAgICAgICAgYmIubm90ZSgiUmVuYW1pbmcgJXMgdG8gJXMiICUgKG9sZCwgbmV3KSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShvbGQsIG5ldykKKyAgICAgICAgICAgIHBrZ2ZpbGVzW3BrZ10ucmVtb3ZlKG9sZCkKKwkgICAgCisgICAgICAgIHNobGlic19maWxlID0gb3MucGF0aC5qb2luKHNobGlic3dvcmtfZGlyLCBwa2cgKyAiLmxpc3QiKQorICAgICAgICBpZiBsZW4oc29uYW1lcyk6CisgICAgICAgICAgICBmZCA9IG9wZW4oc2hsaWJzX2ZpbGUsICd3JykKKyAgICAgICAgICAgIGZvciBzIGluIHNvbmFtZXM6CisgICAgICAgICAgICAgICAgaWYgc1swXSBpbiBzaGxpYl9wcm92aWRlciBhbmQgc1sxXSBpbiBzaGxpYl9wcm92aWRlcltzWzBdXToKKyAgICAgICAgICAgICAgICAgICAgKG9sZF9wa2csIG9sZF9wa2d2ZXIpID0gc2hsaWJfcHJvdmlkZXJbc1swXV1bc1sxXV0KKyAgICAgICAgICAgICAgICAgICAgaWYgb2xkX3BrZyAhPSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCclcy0lcyB3YXMgcmVnaXN0ZXJlZCBhcyBzaGxpYiBwcm92aWRlciBmb3IgJXMsIGNoYW5naW5nIGl0IHRvICVzLSVzIGJlY2F1c2UgaXQgd2FzIGJ1aWx0IGxhdGVyJyAlIChvbGRfcGtnLCBvbGRfcGtndmVyLCBzWzBdLCBwa2csIHBrZ3ZlcikpCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgJ3JlZ2lzdGVyaW5nICVzLSVzIGFzIHNobGliIHByb3ZpZGVyIGZvciAlcycgJSAocGtnLCBwa2d2ZXIsIHNbMF0pKQorICAgICAgICAgICAgICAgIGZkLndyaXRlKHNbMF0gKyAnOicgKyBzWzFdICsgJzonICsgc1syXSArICdcbicpCisgICAgICAgICAgICAgICAgaWYgc1swXSBub3QgaW4gc2hsaWJfcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW3NbMF1dID0ge30KKyAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXVtzWzFdXSA9IChwa2csIHBrZ3ZlcikKKyAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgaWYgbmVlZHNfbGRjb25maWcgYW5kIHVzZV9sZGNvbmZpZzoKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgbGRjb25maWcgY2FsbCB0byBwb3N0aW5zdCBmb3IgJXMnICUgcGtnKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdsZGNvbmZpZ19wb3N0aW5zdF9mcmFnbWVudCcsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisgICAgICAgIGJiLmRlYnVnKDEsICdMSUJOQU1FUzogcGtnICVzIHNvbmFtZXMgJXMnICUgKHBrZywgc29uYW1lcykpCisKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCisgICAgYXNzdW1lZF9saWJzID0gZC5nZXRWYXIoJ0FTU1VNRV9TSExJQlMnLCBUcnVlKQorICAgIGlmIGFzc3VtZWRfbGliczoKKyAgICAgICAgbGliZGlyID0gZC5nZXRWYXIoImxpYmRpciIsIFRydWUpCisgICAgICAgIGZvciBlIGluIGFzc3VtZWRfbGlicy5zcGxpdCgpOgorICAgICAgICAgICAgbCwgZGVwX3BrZyA9IGUuc3BsaXQoIjoiKQorICAgICAgICAgICAgbGliX3ZlciA9IE5vbmUKKyAgICAgICAgICAgIGRlcF9wa2cgPSBkZXBfcGtnLnJzcGxpdCgiXyIsIDEpCisgICAgICAgICAgICBpZiBsZW4oZGVwX3BrZykgPT0gMjoKKyAgICAgICAgICAgICAgICBsaWJfdmVyID0gZGVwX3BrZ1sxXQorICAgICAgICAgICAgZGVwX3BrZyA9IGRlcF9wa2dbMF0KKyAgICAgICAgICAgIGlmIGwgbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW2xdID0ge30KKyAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW2xdW2xpYmRpcl0gPSAoZGVwX3BrZywgbGliX3ZlcikKKworICAgIGxpYnNlYXJjaHBhdGggPSBbZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmFzZV9saWJkaXInLCBUcnVlKV0KKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgYmIuZGVidWcoMiwgImNhbGN1bGF0aW5nIHNobGliIHJlcXVpcmVtZW50cyBmb3IgJXMiICUgcGtnKQorCisgICAgICAgIGRlcHMgPSBsaXN0KCkKKyAgICAgICAgZm9yIG4gaW4gbmVlZGVkW3BrZ106CisgICAgICAgICAgICAjIGlmIG4gaXMgaW4gcHJpdmF0ZSBsaWJyYXJpZXMsIGRvbid0IHRyeSB0byBzZWFyY2ggcHJvdmlkZXIgZm9yIGl0CisgICAgICAgICAgICAjIHRoaXMgY291bGQgY2F1c2UgcHJvYmxlbSBpbiBjYXNlIHNvbWUgYWJjLmJiIHByb3ZpZGVzIHByaXZhdGUKKyAgICAgICAgICAgICMgL29wdC9hYmMvbGliL2xpYmZvby5zby4xIGFuZCBjb250YWlucyAvdXNyL2Jpbi9hYmMgZGVwZW5kaW5nIG9uIHN5c3RlbSBsaWJyYXJ5IGxpYmZvby5zby4xCisgICAgICAgICAgICAjIGJ1dCBza2lwcGluZyBpdCBpcyBzdGlsbCBiZXR0ZXIgYWx0ZXJuYXRpdmUgdGhhbiBwcm92aWRpbmcgb3duCisgICAgICAgICAgICAjIHZlcnNpb24gYW5kIHRoZW4gYWRkaW5nIHJ1bnRpbWUgZGVwZW5kZW5jeSBmb3IgdGhlIHNhbWUgc3lzdGVtIGxpYnJhcnkKKyAgICAgICAgICAgIGlmIHByaXZhdGVfbGlicyBhbmQgblswXSBpbiBwcml2YXRlX2xpYnM6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgJyVzOiBEZXBlbmRlbmN5ICVzIGNvdmVyZWQgYnkgUFJJVkFURV9MSUJTJyAlIChwa2csIG5bMF0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBuWzBdIGluIHNobGliX3Byb3ZpZGVyLmtleXMoKToKKyAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcl9wYXRoID0gbGlzdCgpCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2hsaWJfcHJvdmlkZXJbblswXV0ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcl9wYXRoLmFwcGVuZChrKQorICAgICAgICAgICAgICAgIG1hdGNoID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBwIGluIG5bMl0gKyBzaGxpYl9wcm92aWRlcl9wYXRoICsgbGlic2VhcmNocGF0aDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcCBpbiBzaGxpYl9wcm92aWRlcltuWzBdXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgKGRlcF9wa2csIHZlcl9uZWVkZWQpID0gc2hsaWJfcHJvdmlkZXJbblswXV1bbWF0Y2hdCisKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgJyVzOiBEZXBlbmRlbmN5ICVzIHJlcXVpcmVzIHBhY2thZ2UgJXMgKHVzZWQgYnkgZmlsZXM6ICVzKScgJSAocGtnLCBuWzBdLCBkZXBfcGtnLCBuWzFdKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBkZXBfcGtnID09IHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyX25lZWRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9ICIlcyAoPj0gJXMpIiAlIChkZXBfcGtnLCB2ZXJfbmVlZGVkKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZGVwX3BrZworICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkZXApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBiYi5ub3RlKCJDb3VsZG4ndCBmaW5kIHNoYXJlZCBsaWJyYXJ5IHByb3ZpZGVyIGZvciAlcywgdXNlZCBieSBmaWxlczogJXMiICUgKG5bMF0sIG5bMV0pKQorCisgICAgICAgIGRlcHNfZmlsZSA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cgKyAiLnNobGliZGVwcyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlcHNfZmlsZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZGVwc19maWxlKQorICAgICAgICBpZiBsZW4oZGVwcyk6CisgICAgICAgICAgICBmZCA9IG9wZW4oZGVwc19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgZmQud3JpdGUoZGVwICsgJ1xuJykKKyAgICAgICAgICAgIGZkLmNsb3NlKCkKK30KKworcHl0aG9uIHBhY2thZ2VfZG9fcGtnY29uZmlnICgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBzaGxpYnNfZGlycyA9IGQuZ2V0VmFyKCdTSExJQlNESVJTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHNobGlic3dvcmtfZGlyID0gZC5nZXRWYXIoJ1NITElCU1dPUktESVInLCBUcnVlKQorCisgICAgcGNfcmUgPSByZS5jb21waWxlKCcoLiopXC5wYyQnKQorICAgIHZhcl9yZSA9IHJlLmNvbXBpbGUoJyguKik9KC4qKScpCisgICAgZmllbGRfcmUgPSByZS5jb21waWxlKCcoLiopOiAoLiopJykKKworICAgIHBrZ2NvbmZpZ19wcm92aWRlZCA9IHt9CisgICAgcGtnY29uZmlnX25lZWRlZCA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXSA9IFtdCisgICAgICAgIHBrZ2NvbmZpZ19uZWVkZWRbcGtnXSA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICAgICAgbSA9IHBjX3JlLm1hdGNoKGZpbGUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgcGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXS5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBvcy5SX09LKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUsICdyJykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSB2YXJfcmUubWF0Y2gobCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBtLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGQuc2V0VmFyKG5hbWUsIHBkLmV4cGFuZCh2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBtID0gZmllbGRfcmUubWF0Y2gobCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cCA9IGJiLmRhdGEuZXhwYW5kKG0uZ3JvdXAoMiksIHBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhkciA9PSAnUmVxdWlyZXMnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfbmVlZGVkW3BrZ10gKz0gZXhwLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkKKworICAgICMgVGFrZSBzaGFyZWQgbG9jayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShkLmV4cGFuZCgiJHtQQUNLQUdFTE9DS30iKSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGtnc19maWxlID0gb3MucGF0aC5qb2luKHNobGlic3dvcmtfZGlyLCBwa2cgKyAiLnBjbGlzdCIpCisgICAgICAgIGlmIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddICE9IFtdOgorICAgICAgICAgICAgZiA9IG9wZW4ocGtnc19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgcCBpbiBwa2djb25maWdfcHJvdmlkZWRbcGtnXToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIHApCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICMgR28gZnJvbSBsZWFzdCB0byBtb3N0IHNwZWNpZmljIHNpbmNlIHRoZSBsYXN0IG9uZSBmb3VuZCB3aW5zCisgICAgZm9yIGRpciBpbiByZXZlcnNlZChzaGxpYnNfZGlycyk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIpOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdeKC4qKVwucGNsaXN0JCcsIGZpbGUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHBrZyA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgZmlsZSkpCisgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddLmFwcGVuZChsLnJzdHJpcCgpKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZm9yIG4gaW4gcGtnY29uZmlnX25lZWRlZFtwa2ddOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGsgaW4gcGtnY29uZmlnX3Byb3ZpZGVkLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBuIGluIHBrZ2NvbmZpZ19wcm92aWRlZFtrXToKKyAgICAgICAgICAgICAgICAgICAgaWYgayAhPSBwa2cgYW5kIG5vdCAoayBpbiBkZXBzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGspCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgaWYgZm91bmQgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiY291bGRuJ3QgZmluZCBwa2djb25maWcgbW9kdWxlICclcycgaW4gYW55IHBhY2thZ2UiICUgbikKKyAgICAgICAgZGVwc19maWxlID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZyArICIucGNkZXBzIikKKyAgICAgICAgaWYgbGVuKGRlcHMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGZkLndyaXRlKGRlcCArICdcbicpCisgICAgICAgICAgICBmZC5jbG9zZSgpCisKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCitkZWYgcmVhZF9saWJkZXBfZmlsZXMoZCk6CisgICAgcGtnbGliZGVwcyA9IHt9CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnbGliZGVwc1twa2ddID0ge30KKyAgICAgICAgZm9yIGV4dGVuc2lvbiBpbiAiLnNobGliZGVwcyIsICIucGNkZXBzIiwgIi5jbGlsaWJkZXBzIjoKKyAgICAgICAgICAgIGRlcHNmaWxlID0gZC5leHBhbmQoIiR7UEtHREVTVH0vIiArIHBrZyArIGV4dGVuc2lvbikKKyAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhkZXBzZmlsZSwgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNmaWxlKQorICAgICAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIGwucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsKQorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGVwIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dsaWJkZXBzW3BrZ11bZGVwXSA9IGRlcHNbZGVwXQorICAgIHJldHVybiBwa2dsaWJkZXBzCisKK3B5dGhvbiByZWFkX3NobGliZGVwcyAoKSB7CisgICAgcGtnbGliZGVwcyA9IHJlYWRfbGliZGVwX2ZpbGVzKGQpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGZvciBkZXAgaW4gcGtnbGliZGVwc1twa2ddOgorICAgICAgICAgICAgIyBBZGQgdGhlIGRlcCBpZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlLCBvciBpZiBubyBjb21wYXJpc29uIGlzIHNldAorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICByZGVwZW5kc1tkZXBdID0gW10KKyAgICAgICAgICAgIGZvciB2IGluIHBrZ2xpYmRlcHNbcGtnXVtkZXBdOgorICAgICAgICAgICAgICAgIGlmIHYgbm90IGluIHJkZXBlbmRzW2RlcF06CisgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRzW2RlcF0uYXBwZW5kKHYpCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKK30KKworcHl0aG9uIHBhY2thZ2VfZGVwY2hhaW5zKCkgeworICAgICIiIgorICAgIEZvciBhIGdpdmVuIHNldCBvZiBwcmVmaXggYW5kIHBvc3RmaXggbW9kaWZpZXJzLCBtYWtlIHRob3NlIHBhY2thZ2VzCisgICAgUlJFQ09NTUVORFMgb24gdGhlIGNvcnJlc3BvbmRpbmcgcGFja2FnZXMgZm9yIGl0cyBSREVQRU5EUy4KKworICAgIEV4YW1wbGU6ICBJZiBwYWNrYWdlIEEgZGVwZW5kcyB1cG9uIHBhY2thZ2UgQiwgYW5kIEEncyAuYmIgZW1pdHMgYW4KKyAgICBBLWRldiBwYWNrYWdlLCB0aGlzIHdvdWxkIG1ha2UgQS1kZXYgUmVjb21tZW5kczogQi1kZXYuCisKKyAgICBJZiBvbmx5IG9uZSBvZiBhIGdpdmVuIHN1ZmZpeCBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgdGFrZSB0aGUgUlJFQ09NTUVORFMKKyAgICBiYXNlZCBvbiB0aGUgUkRFUEVORFMgb2YgKmFsbCogb3RoZXIgcGFja2FnZXMuIElmIG1vcmUgdGhhbiBvbmUgb2YgYSBnaXZlbgorICAgIHN1ZmZpeCBpcyBzcGVjaWZpZWQsIGl0cyB3aWxsIG9ubHkgdXNlIHRoZSBSREVQRU5EUyBvZiB0aGUgc2luZ2xlIHBhcmVudAorICAgIHBhY2thZ2UuCisgICAgIiIiCisKKyAgICBwYWNrYWdlcyAgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBvc3RmaXhlcyA9IChkLmdldFZhcignREVQQ0hBSU5fUE9TVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgcHJlZml4ZXMgID0gKGQuZ2V0VmFyKCdERVBDSEFJTl9QUkUnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorCisgICAgZGVmIHBrZ19hZGRkZXBycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZ2V0bmFtZSwgZGVwZW5kcywgZCk6CisKKyAgICAgICAgI2JiLm5vdGUoJ2RlcGVuZHMgZm9yICVzIGlzICVzJyAlIChiYXNlLCBkZXBlbmRzKSkKKyAgICAgICAgcnJlY2xpc3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorCisgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZW5kczoKKyAgICAgICAgICAgIGlmIGRlcGVuZC5maW5kKCctbmF0aXZlJykgIT0gLTEgb3IgZGVwZW5kLmZpbmQoJy1jcm9zcycpICE9IC0xIG9yIGRlcGVuZC5zdGFydHN3aXRoKCd2aXJ0dWFsLycpOgorICAgICAgICAgICAgICAgICNiYi5ub3RlKCJTa2lwcGluZyAlcyIgJSBkZXBlbmQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRldicpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgcGtnbmFtZSA9IGdldG5hbWUoZGVwZW5kLCBzdWZmaXgpCisgICAgICAgICAgICAjYmIubm90ZSgiQWRkaW5nICVzIGZvciAlcyIgJSAocGtnbmFtZSwgZGVwZW5kKSkKKyAgICAgICAgICAgIGlmIHBrZ25hbWUgbm90IGluIHJyZWNsaXN0IGFuZCBwa2duYW1lICE9IHBrZzoKKyAgICAgICAgICAgICAgICBycmVjbGlzdFtwa2duYW1lXSA9IFtdCisKKyAgICAgICAgI2JiLm5vdGUoJ3NldHRpbmc6IFJSRUNPTU1FTkRTXyVzPSVzJyAlIChwa2csICcgJy5qb2luKHJyZWNsaXN0KSkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjbGlzdCwgY29tbWFzZXA9RmFsc2UpKQorCisgICAgZGVmIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZ2V0bmFtZSwgcmRlcGVuZHMsIGQpOgorCisgICAgICAgICNiYi5ub3RlKCdyZGVwZW5kcyBmb3IgJXMgaXMgJXMnICUgKGJhc2UsIHJkZXBlbmRzKSkKKyAgICAgICAgcnJlY2xpc3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorCisgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICBpZiBkZXBlbmQuZmluZCgndmlydHVhbC1sb2NhbGUtJykgIT0gLTE6CisgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlNraXBwaW5nICVzIiAlIGRlcGVuZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGV2Jyk6CisgICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5kWzotNF0KKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRiZycpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBwa2duYW1lID0gZ2V0bmFtZShkZXBlbmQsIHN1ZmZpeCkKKyAgICAgICAgICAgICNiYi5ub3RlKCJBZGRpbmcgJXMgZm9yICVzIiAlIChwa2duYW1lLCBkZXBlbmQpKQorICAgICAgICAgICAgaWYgcGtnbmFtZSBub3QgaW4gcnJlY2xpc3QgYW5kIHBrZ25hbWUgIT0gcGtnOgorICAgICAgICAgICAgICAgIHJyZWNsaXN0W3BrZ25hbWVdID0gW10KKworICAgICAgICAjYmIubm90ZSgnc2V0dGluZzogUlJFQ09NTUVORFNfJXM9JXMnICUgKHBrZywgJyAnLmpvaW4ocnJlY2xpc3QpKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJyZWNsaXN0LCBjb21tYXNlcD1GYWxzZSkpCisKKyAgICBkZWYgYWRkX2RlcChsaXN0LCBkZXApOgorICAgICAgICBpZiBkZXAgbm90IGluIGxpc3Q6CisgICAgICAgICAgICBsaXN0LmFwcGVuZChkZXApCisKKyAgICBkZXBlbmRzID0gW10KKyAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpIG9yICIiKToKKyAgICAgICAgYWRkX2RlcChkZXBlbmRzLCBkZXApCisKKyAgICByZGVwZW5kcyA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgYWRkX2RlcChyZGVwZW5kcywgZGVwKQorCisgICAgI2JiLm5vdGUoJ3JkZXBlbmRzIGlzICVzJyAlIHJkZXBlbmRzKQorCisgICAgZGVmIHBvc3RfZ2V0bmFtZShuYW1lLCBzdWZmaXgpOgorICAgICAgICByZXR1cm4gJyVzJXMnICUgKG5hbWUsIHN1ZmZpeCkKKyAgICBkZWYgcHJlX2dldG5hbWUobmFtZSwgc3VmZml4KToKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChzdWZmaXgsIG5hbWUpCisKKyAgICBwa2dzID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGZvciBwb3N0Zml4IGluIHBvc3RmaXhlczoKKyAgICAgICAgICAgIGlmIHBrZy5lbmRzd2l0aChwb3N0Zml4KToKKyAgICAgICAgICAgICAgICBpZiBub3QgcG9zdGZpeCBpbiBwa2dzOgorICAgICAgICAgICAgICAgICAgICBwa2dzW3Bvc3RmaXhdID0ge30KKyAgICAgICAgICAgICAgICBwa2dzW3Bvc3RmaXhdW3BrZ10gPSAocGtnWzotbGVuKHBvc3RmaXgpXSwgcG9zdF9nZXRuYW1lKQorCisgICAgICAgIGZvciBwcmVmaXggaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwcmVmaXggaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgcGtnc1twcmVmaXhdID0ge30KKyAgICAgICAgICAgICAgICBwa2dzW3ByZWZpeF1bcGtnXSA9IChwa2dbOi1sZW4ocHJlZml4KV0sIHByZV9nZXRuYW1lKQorCisgICAgaWYgIi1kYmciIGluIHBrZ3M6CisgICAgICAgIHBrZ2xpYmRlcHMgPSByZWFkX2xpYmRlcF9maWxlcyhkKQorICAgICAgICBwa2dsaWJkZXBsaXN0ID0gW10KKyAgICAgICAgZm9yIHBrZyBpbiBwa2dsaWJkZXBzOgorICAgICAgICAgICAgZm9yIGsgaW4gcGtnbGliZGVwc1twa2ddOgorICAgICAgICAgICAgICAgIGFkZF9kZXAocGtnbGliZGVwbGlzdCwgaykKKyAgICAgICAgIyBGSVhNRSB0aGlzIHNob3VsZCBub3QgbG9vayBhdCBQTiBvbmNlIGFsbCB0YXNrIHJlY2lwZXMgaW5oZXJpdCBmcm9tIHRhc2suYmJjbGFzcworICAgICAgICBkYmdkZWZhdWx0ZGVwcyA9ICgoZC5nZXRWYXIoJ0RFUENIQUlOX0RCR0RFRkFVTFRERVBTJywgVHJ1ZSkgPT0gJzEnKSBvciAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgb3IgJycpLnN0YXJ0c3dpdGgoJ3BhY2thZ2Vncm91cC0nKSkKKworICAgIGZvciBzdWZmaXggaW4gcGtnczoKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3N1ZmZpeF06CisgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ1JSRUNPTU1FTkRTXycgKyBwa2csICdub2RlcHJyZWNzJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIChiYXNlLCBmdW5jKSA9IHBrZ3Nbc3VmZml4XVtwa2ddCisgICAgICAgICAgICBpZiBzdWZmaXggPT0gIi1kZXYiOgorICAgICAgICAgICAgICAgIHBrZ19hZGRkZXBycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgZGVwZW5kcywgZCkKKyAgICAgICAgICAgIGVsaWYgc3VmZml4ID09ICItZGJnIjoKKyAgICAgICAgICAgICAgICBpZiBub3QgZGJnZGVmYXVsdGRlcHM6CisgICAgICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcGtnbGliZGVwbGlzdCwgZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxlbihwa2dzW3N1ZmZpeF0pID09IDE6CisgICAgICAgICAgICAgICAgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBmdW5jLCByZGVwZW5kcywgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmRlcHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgYmFzZSwgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgICAgICAgICBhZGRfZGVwKHJkZXBzLCBkZXApCisgICAgICAgICAgICAgICAgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBmdW5jLCByZGVwcywgZCkKK30KKworIyBTaW5jZSBiaXRiYWtlIGNhbid0IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMgYXJlIGFjY2Vzc2VkIGR1cmluZyBwYWNrYWdlCisjIGl0ZXJhdGlvbiwgd2UgbmVlZCB0byBsaXN0IHRoZW0gaGVyZToKK1BBQ0tBR0VWQVJTID0gIkZJTEVTIFJERVBFTkRTIFJSRUNPTU1FTkRTIFNVTU1BUlkgREVTQ1JJUFRJT04gUlNVR0dFU1RTIFJQUk9WSURFUyBSQ09ORkxJQ1RTIFBLRyBBTExPV19FTVBUWSBwa2dfcG9zdGluc3QgcGtnX3Bvc3RybSBJTklUU0NSSVBUX05BTUUgSU5JVFNDUklQVF9QQVJBTVMgREVCSUFOX05PQVVUT05BTUUgQUxURVJOQVRJVkUgUEtHRSBQS0dWIFBLR1IgVVNFUkFERF9QQVJBTSBHUk9VUEFERF9QQVJBTSBDT05GRklMRVMgU1lTVEVNRF9TRVJWSUNFIExJQ0VOU0UgU0VDVElPTiBwa2dfcHJlaW5zdCBwa2dfcHJlcm0gUlJFUExBQ0VTIEdST1VQTUVNU19QQVJBTSBTWVNURU1EX0FVVE9fRU5BQkxFIgorCitkZWYgZ2VuX3BhY2thZ2V2YXIoZCk6CisgICAgcmV0ID0gW10KKyAgICBwa2dzID0gKGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgdmFycyA9IChkLmdldFZhcigiUEFDS0FHRVZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICByZXQuYXBwZW5kKHYgKyAiXyIgKyBwKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgY2hhbmdlcyB0byBJTkNPTVBBVElCTEVfTElDRU5TRSByZS1ydW4gZG9fcGFja2FnZSBmb3IKKyAgICAgICAgIyBhZmZlY3RlZCByZWNpcGVzLgorICAgICAgICByZXQuYXBwZW5kKCdMSUNFTlNFX0VYQ0xVU0lPTi0lcycgJSBwKQorICAgIHJldHVybiAiICIuam9pbihyZXQpCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyA/PSAiIgorIyBGdW5jdGlvbnMgZm9yIHNldHRpbmcgdXAgUEtHRAorUEFDS0FHRUJVSUxEUEtHRCA/PSAiIFwKKyAgICAgICAgICAgICAgICBwZXJmb3JtX3BhY2thZ2Vjb3B5IFwKKyAgICAgICAgICAgICAgICAke1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DU30gXAorICAgICAgICAgICAgICAgIHNwbGl0X2FuZF9zdHJpcF9maWxlcyBcCisgICAgICAgICAgICAgICAgZml4dXBfcGVybXMgXAorICAgICAgICAgICAgICAgICIKKyMgRnVuY3Rpb25zIHdoaWNoIHNwbGl0IFBLR0QgdXAgaW50byBzZXBhcmF0ZSBwYWNrYWdlcworUEFDS0FHRVNQTElURlVOQ1MgPz0gIiBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kb19zcGxpdF9sb2NhbGVzIFwKKyAgICAgICAgICAgICAgICBwb3B1bGF0ZV9wYWNrYWdlcyIKKyMgRnVuY3Rpb25zIHdoaWNoIHByb2Nlc3MgbWV0YWRhdGEgYmFzZWQgb24gc3BsaXQgcGFja2FnZXMKK1BBQ0tBR0VGVU5DUyArPSAiIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2ZpeHN5bWxpbmtzIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX25hbWVfaG9vayBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kb19maWxlZGVwcyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kb19zaGxpYnMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICByZWFkX3NobGliZGVwcyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kZXBjaGFpbnMgXAorICAgICAgICAgICAgICAgIGVtaXRfcGtnZGF0YSIKKworcHl0aG9uIGRvX3BhY2thZ2UgKCkgeworICAgICMgQ2hhbmdlIHRoZSBmb2xsb3dpbmcgdmVyc2lvbiB0byBjYXVzZSBzc3RhdGUgdG8gaW52YWxpZGF0ZSB0aGUgcGFja2FnZQorICAgICMgY2FjaGUuICBUaGlzIGlzIHVzZWZ1bCBpZiBhbiBpdGVtIHRoaXMgY2xhc3MgZGVwZW5kcyBvbiBjaGFuZ2VzIGluIGEKKyAgICAjIHdheSB0aGF0IHRoZSBvdXRwdXQgb2YgdGhpcyBjbGFzcyBjaGFuZ2VzLiAgcnBtZGVwcyBpcyBhIGdvb2QgZXhhbXBsZQorICAgICMgYXMgYW55IGNoYW5nZSB0byBycG1kZXBzIHJlcXVpcmVzIHRoaXMgdG8gYmUgcmVydW4uCisgICAgIyBQQUNLQUdFX0JCQ0xBU1NfVkVSU0lPTiA9ICIxIgorCisgICAgIyBJbml0IGNhY2hlZHBhdGgKKyAgICBnbG9iYWwgY3BhdGgKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFNhbml0eSB0ZXN0IHRoZSBzZXR1cAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgcGFja2FnZXMgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4ocGFja2FnZXMpIDwgMToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzIHRvIGJ1aWxkLCBza2lwcGluZyBkb19wYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIG91dGRpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSkKKyAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaWYgbm90IHdvcmtkaXIgb3Igbm90IG91dGRpciBvciBub3QgZGVzdCBvciBub3QgZHZhciBvciBub3QgcG46CisgICAgICAgIG1zZyA9ICJXT1JLRElSLCBERVBMT1lfRElSLCBELCBQTiBhbmQgUEtHRCBhbGwgbXVzdCBiZSBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInZhci11bmRlZmluZWQiLCBtc2csIGQpCisgICAgICAgIHJldHVybgorCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJwYWNrYWdlX2dldF9hdXRvX3ByIiwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgT3B0aW1pc2F0aW9ucworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBDb250aW51YWxseSBleHBhbmRpbmcgY29tcGxleCBleHByZXNzaW9ucyBpcyBpbmVmZmljaWVudCwgcGFydGljdWxhcmx5CisgICAgIyB3aGVuIHdlIHdyaXRlIHRvIHRoZSBkYXRhc3RvcmUgYW5kIGludmFsaWRhdGUgdGhlIGV4cGFuc2lvbiBjYWNoZS4gVGhpcworICAgICMgY29kZSBwcmUtZXhwYW5kcyBzb21lIGZyZXF1ZW50bHkgdXNlZCB2YXJpYWJsZXMKKworICAgIGRlZiBleHBhbmRWYXIoeCwgZCk6CisgICAgICAgIGQuc2V0VmFyKHgsIGQuZ2V0VmFyKHgsIFRydWUpKQorCisgICAgZm9yIHggaW4gJ1BOJywgJ1BWJywgJ0JQTicsICdUQVJHRVRfU1lTJywgJ0VYVEVORFBSQVVUTyc6CisgICAgICAgIGV4cGFuZFZhcih4LCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTZXR1cCBQS0dEIChmcm9tIEQpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VCVUlMRFBLR0QnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFNwbGl0IHVwIFBLR0QgaW50byBQS0dERVNUCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTUExJVEZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBQcm9jZXNzIFBLR0RFU1QKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgQnVpbGQgZ2xvYmFsIGxpc3Qgb2YgZmlsZXMgaW4gZWFjaCBzcGxpdCBwYWNrYWdlCisgICAgZ2xvYmFsIHBrZ2ZpbGVzCisgICAgcGtnZmlsZXMgPSB7fQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnZmlsZXNbcGtnXSA9IFtdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2Fsayhwa2dkZXN0ICsgIi8iICsgcGtnKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHBrZ2ZpbGVzW3BrZ10uYXBwZW5kKHdhbGtyb290ICsgb3Muc2VwICsgZmlsZSkKKworICAgIGZvciBmIGluIChkLmdldFZhcignUEFDS0FHRUZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorfQorCitkb19wYWNrYWdlW2RpcnNdID0gIiR7U0hMSUJTV09SS0RJUn0gJHtQS0dERVNUV09SS30gJHtEfSIKK2RvX3BhY2thZ2VbdmFyZGVwc10gKz0gIiR7UEFDS0FHRUJVSUxEUEtHRH0gJHtQQUNLQUdFU1BMSVRGVU5DU30gJHtQQUNLQUdFRlVOQ1N9ICR7QGdlbl9wYWNrYWdldmFyKGQpfSIKK2FkZHRhc2sgcGFja2FnZSBhZnRlciBkb19pbnN0YWxsCisKK1BBQ0tBR0VMT0NLID0gIiR7U1RBR0lOR19ESVJ9L3BhY2thZ2Utb3V0cHV0LmxvY2siCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZSIKK2RvX3BhY2thZ2VbY2xlYW5kaXJzXSA9ICIke1BLR0RFU1R9ICR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZVtzc3RhdGUtcGxhaW5kaXJzXSA9ICIke1BLR0R9ICR7UEtHREVTVH0gJHtQS0dERVNUV09SS30iCitkb19wYWNrYWdlW3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWRdID0gIiR7UEFDS0FHRUxPQ0t9IgorZG9fcGFja2FnZV9zZXRzY2VuZVtkaXJzXSA9ICIke1NUQUdJTkdfRElSfSIKKworcHl0aG9uIGRvX3BhY2thZ2Vfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3NldHNjZW5lCisKK2RvX3BhY2thZ2VkYXRhICgpIHsKKwk6Cit9CisKK2FkZHRhc2sgcGFja2FnZWRhdGEgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3BhY2thZ2UKKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dERVNUV09SS30iCitkb19wYWNrYWdlZGF0YVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtQS0dEQVRBX0RJUn0iCitkb19wYWNrYWdlZGF0YVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSA9ICIke1BBQ0tBR0VMT0NLfSIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiR7TUFDSElORX0iCisKK3B5dGhvbiBkb19wYWNrYWdlZGF0YV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VkYXRhX3NldHNjZW5lCisKKyMKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIHBhY2thZ2Ugd3JpdGluZyBjbGFzc2VzCisjCisKK2RlZiBtYXBwaW5nX3JlbmFtZV9ob29rKGQpOgorICAgICIiIgorICAgIFJld3JpdGUgdmFyaWFibGVzIHRvIGFjY291bnQgZm9yIHBhY2thZ2UgcmVuYW1pbmcgaW4gdGhpbmdzCisgICAgbGlrZSBkZWJpYW4uYmJjbGFzcyBvciBtYW51YWwgUEtHIHZhcmlhYmxlIG5hbWUgY2hhbmdlcworICAgICIiIgorICAgIHBrZyA9IGQuZ2V0VmFyKCJQS0ciLCBUcnVlKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlJERVBFTkRTIiwgcGtnLCBkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlJSRUNPTU1FTkRTIiwgcGtnLCBkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlJTVUdHRVNUUyIsIHBrZywgZCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV9kZWIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmZlYTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MKQEAgLTAsMCArMSwzMzggQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDYtMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworaW5oZXJpdCBwYWNrYWdlCisKK0lNQUdFX1BLR1RZUEUgPz0gImRlYiIKKworRFBLR19BUkNIID89ICIke1RBUkdFVF9BUkNIfSIgCisKK1BLR1dSSVRFRElSREVCID0gIiR7V09SS0RJUn0vZGVwbG95LWRlYnMiCisKK0FQVENPTkZfVEFSR0VUID0gIiR7V09SS0RJUn0iCisKK0FQVF9BUkdTID0gIiR7QFsnJywgJy0tbm8taW5zdGFsbC1yZWNvbW1lbmRzJ11bZC5nZXRWYXIoIk5PX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpID09ICIxIl19IgorCisjCisjIGluc3RhbGwgYSBidW5jaCBvZiBwYWNrYWdlcyB1c2luZyBhcHQKKyMgdGhlIGZvbGxvd2luZyBzaGVsbCB2YXJpYWJsZXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuYzoKKyMgSU5TVEFMTF9ST09URlNfREVCIC0gaW5zdGFsbCByb290IGRpcgorIyBJTlNUQUxMX0JBU0VBUkNIX0RFQiAtIGluc3RhbGwgYmFzZSBhcmNoaXRlY3V0cmUKKyMgSU5TVEFMTF9BUkNIU19ERUIgLSBsaXN0IG9mIGF2YWlsYWJsZSBhcmNocworIyBJTlNUQUxMX1BBQ0tBR0VTX05PUk1BTF9ERUIgLSBwYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQKKyMgSU5TVEFMTF9QQUNLQUdFU19BVFRFTVBUT05MWV9ERUIgLSBwYWNrYWdlcyBhdHRlbXBlZCB0byBiZSBpbnN0YWxsZWQgb25seQorIyBJTlNUQUxMX1BBQ0tBR0VTX0xJTkdVQVNfREVCIC0gYWRkaXRpb25hbCBwYWNrYWdlcyBmb3IgdWNsaWJjCisjIElOU1RBTExfVEFTS19ERUIgLSB0YXNrIG5hbWUKKworcHl0aG9uIGRvX3BhY2thZ2VfZGViICgpIHsKKyAgICBpbXBvcnQgcmUsIGNvcHkKKyAgICBpbXBvcnQgdGV4dHdyYXAKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBvdXRkaXIgPSBkLmdldFZhcignUEtHV1JJVEVESVJERUInLCBUcnVlKQorICAgIGlmIG5vdCBvdXRkaXI6CisgICAgICAgIGJiLmVycm9yKCJQS0dXUklURURJUkRFQiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgIGJiLmRlYnVnKDEsICJQQUNLQUdFUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIiksb3MuUl9PSyk6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIikpCisKKyAgICBpZiBwYWNrYWdlcyA9PSBbXToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgZGVmIGNsZWFudXBjb250cm9sKHJvb3QpOgorICAgICAgICBmb3IgcCBpbiBbJ0NPTlRST0wnLCAnREVCSUFOJ106CisgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHJvb3QsIHApCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihwKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUocm9vdCArICIubG9jayIpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVCcsICcnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UXyVzJyAlIHBrZywgcm9vdCkKKyAgICAgICAgcGtnbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2duYW1lOgorICAgICAgICAgICAgcGtnbmFtZSA9IHBrZworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQS0cnLCBwa2duYW1lKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOiIgKyBwa2cpCisKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJvb3QpKQorCisgICAgICAgIHBrZ291dGRpciA9IG9zLnBhdGguam9pbihvdXRkaXIsIGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnb3V0ZGlyKQorCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorICAgICAgICBnID0gZ2xvYignKicpCisgICAgICAgIGlmIG5vdCBnIGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdBTExPV19FTVBUWScsIEZhbHNlKSAhPSAiMSI6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgY29udHJvbGRpciA9IG9zLnBhdGguam9pbihyb290LCAnREVCSUFOJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNvbnRyb2xkaXIpCisgICAgICAgIG9zLmNobW9kKGNvbnRyb2xkaXIsIDA3NTUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgICAgIGN0cmxmaWxlID0gY29kZWNzLm9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb250cm9sJyksICd3JywgJ3V0Zi04JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgcGUgPSBkLmdldFZhcignUEtHRScsIFRydWUpCisgICAgICAgIGlmIHBlIGFuZCBpbnQocGUpID4gMDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlczolcy0lc1xuIiwgWydQS0dFJywgJ1BLR1YnLCAnUEtHUiddXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlcy0lc1xuIiwgWydQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJEZXNjcmlwdGlvbjogJXNcbiIsIFsnREVTQ1JJUFRJT04nXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJTZWN0aW9uOiAlc1xuIiwgWydTRUNUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiUHJpb3JpdHk6ICVzXG4iLCBbJ1BSSU9SSVRZJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiTWFpbnRhaW5lcjogJXNcbiIsIFsnTUFJTlRBSU5FUiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIkFyY2hpdGVjdHVyZTogJXNcbiIsIFsnRFBLR19BUkNIJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiT0U6ICVzXG4iLCBbJ1BOJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiUGFja2FnZUFyY2g6ICVzXG4iLCBbJ1BBQ0tBR0VfQVJDSCddXSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0hPTUVQQUdFJywgVHJ1ZSk6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiSG9tZXBhZ2U6ICVzXG4iLCBbJ0hPTUVQQUdFJ11dKQorCisgICAgICAgICMgUGFja2FnZSwgVmVyc2lvbiwgTWFpbnRhaW5lciwgRGVzY3JpcHRpb24gLSBtYW5kYXRvcnkKKyAgICAgICAgIyBTZWN0aW9uLCBQcmlvcml0eSwgRXNzZW50aWFsLCBBcmNoaXRlY3R1cmUsIFNvdXJjZSwgRGVwZW5kcywgUHJlLURlcGVuZHMsIFJlY29tbWVuZHMsIFN1Z2dlc3RzLCBDb25mbGljdHMsIFJlcGxhY2VzLCBQcm92aWRlcyAtIE9wdGlvbmFsCisKKworICAgICAgICBkZWYgcHVsbERhdGEobCwgZCk6CisgICAgICAgICAgICBsMiA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiBsOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkLmdldFZhcihpLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoZikKKyAgICAgICAgICAgICAgICBpZiBpID09ICdEUEtHX0FSQ0gnIGFuZCBkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAnYWxsJworICAgICAgICAgICAgICAgIGVsaWYgaSA9PSAnUEFDS0FHRV9BUkNIJyBvciBpID09ICdEUEtHX0FSQ0gnOgorICAgICAgICAgICAgICAgICAgICMgVGhlIHBhcmFtcyBpbiBkZWIgcGFja2FnZSBjb250cm9sIGRvbid0IGFsbG93IGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICMgYF8nLCBzbyBjaGFuZ2UgdGhlIGFyY2gncyBgXycgdG8gYC0nLiBTdWNoIGFzIGB4ODZfNjQnCisgICAgICAgICAgICAgICAgICAgIyAtLT5geDg2LTY0JworICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICAgICAgbDIuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gbDIKKworICAgICAgICBjdHJsZmlsZS53cml0ZSgiUGFja2FnZTogJXNcbiIgJSBwa2duYW1lKQorICAgICAgICAjIGNoZWNrIGZvciByZXF1aXJlZCBmaWVsZHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIChjLCBmcykgaW4gZmllbGRzOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZzOgorICAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcihmLCBGYWxzZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihmKQorICAgICAgICAgICAgICAgICMgU3BlY2lhbCBiZWhhdmlvciBmb3IgZGVzY3JpcHRpb24uLi4KKyAgICAgICAgICAgICAgICBpZiAnREVTQ1JJUFRJT04nIGluIGZzOgorICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgorICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJ0Rlc2NyaXB0aW9uOiAlc1xuJyAlIHVuaWNvZGUoc3VtbWFyeSwndXRmLTgnKSkKKyAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGV4dHdyYXAuZGVkZW50KGRlc2NyaXB0aW9uKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICBpZiAnXFxuJyBpbiBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIE1hbnVhbGx5IGluZGVudAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIGRlc2NyaXB0aW9uLnNwbGl0KCdcXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBsaW1pdCB0aGUgd2lkdGggd2hlbiBtYW51YWxseSBpbmRlbnQsIGJ1dCB3ZSBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5lZWQgdGhlIHRleHR3cmFwLmZpbGwoKSB0byBzZXQgdGhlIGluaXRpYWxfaW5kZW50IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnNlcXVlbnRfaW5kZW50LCBzbyBzZXQgYSBsYXJnZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB1bmljb2RlKHRleHR3cmFwLmZpbGwodCwgd2lkdGg9MTAwMDAwLCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJyksJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICMgQXV0byBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB1bmljb2RlKHRleHR3cmFwLmZpbGwoZGVzY3JpcHRpb24uc3RyaXAoKSwgd2lkdGg9NzQsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSwndXRmLTgnKSkKKworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSh1bmljb2RlKGMgJSB0dXBsZShwdWxsRGF0YShmcywgbG9jYWxkYXRhKSksJ3V0Zi04JykpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiTWlzc2luZyBmaWVsZCBmb3IgZGViIGdlbmVyYXRpb246ICVzIiAlIHZhbHVlKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk5vbiBVVEYtOCBjaGFyYWN0ZXJzIGZvdW5kIGluIG9uZSBvZiB0aGUgZmllbGRzIikKKworICAgICAgICAjIG1vcmUgZmllbGRzCisKKyAgICAgICAgY3VzdG9tX2ZpZWxkc19jaHVuayA9IGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEoImRlYiIsIGxvY2FsZGF0YSkKKyAgICAgICAgaWYgY3VzdG9tX2ZpZWxkc19jaHVuayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKHVuaWNvZGUoY3VzdG9tX2ZpZWxkc19jaHVuaykpCisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiXG4iKQorCisgICAgICAgIG1hcHBpbmdfcmVuYW1lX2hvb2sobG9jYWxkYXRhKQorCisgICAgICAgIGRlZiBkZWJpYW5fY21wX3JlbWFwKHZhcik6CisgICAgICAgICAgICAjIGRwa2cgZG9lcyBub3QgYWxsb3cgZm9yICcoJyBvciAnKScgaW4gYSBkZXBlbmRlbmN5IG5hbWUKKyAgICAgICAgICAgICMgcmVwbGFjZSB0aGVzZSBpbnN0YW5jZXMgd2l0aCAnX18nIGFuZCAnX18nCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEluIGRlYmlhbiAnPicgYW5kICc8JyBkbyBub3QgbWVhbiB3aGF0IGl0IGFwcGVhcnMgdGhleSBtZWFuCisgICAgICAgICAgICAjICAgJzwnID0gbGVzcyBvciBlcXVhbAorICAgICAgICAgICAgIyAgICc+JyA9IGdyZWF0ZXIgb3IgZXF1YWwKKyAgICAgICAgICAgICMgYWRqdXN0IHRoZXNlIHRvIHRoZSAnPDwnIGFuZCAnPj4nIGVxdWl2YWxlbnRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBmb3IgZGVwIGluIHZhcjoKKyAgICAgICAgICAgICAgICBpZiAnKCcgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSBkZXAucmVwbGFjZSgnKCcsICdfXycpCisgICAgICAgICAgICAgICAgICAgIG5ld2RlcCA9IG5ld2RlcC5yZXBsYWNlKCcpJywgJ19fJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV3ZGVwICE9IGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcltuZXdkZXBdID0gdmFyW2RlcF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCB2YXJbZGVwXQorICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CisgICAgICAgICAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHZhcltkZXBdKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIjwgIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIjwgIiwgIjw8ICIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIj4gIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIj4gIiwgIj4+ICIpCisKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkRFUEVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyZGVwZW5kcykKKyAgICAgICAgZm9yIGRlcCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICBpZiAnKicgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJkZXBlbmRzW2RlcF0KKyAgICAgICAgcnJlY29tbWVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVjb21tZW5kcykKKyAgICAgICAgZm9yIGRlcCBpbiBycmVjb21tZW5kczoKKyAgICAgICAgICAgICAgICBpZiAnKicgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJyZWNvbW1lbmRzW2RlcF0KKyAgICAgICAgcnN1Z2dlc3RzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJTVUdHRVNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJzdWdnZXN0cykKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZHJvcCB2ZXJzaW9uIGluZm9ybWF0aW9uIGhlcmUsIG5vdCB3YW50ZWQvc3VwcG9ydGVkIGJ5IGRlYgorICAgICAgICBycHJvdmlkZXMgPSBkaWN0LmZyb21rZXlzKGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUFJPVklERVMiLCBUcnVlKSBvciAiIiksIFtdKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJwcm92aWRlcykKKyAgICAgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRVBMQUNFUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJyZXBsYWNlcykKKyAgICAgICAgcmNvbmZsaWN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSQ09ORkxJQ1RTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmNvbmZsaWN0cykKKyAgICAgICAgaWYgcmRlcGVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiRGVwZW5kczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcykpKQorICAgICAgICBpZiByc3VnZ2VzdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiU3VnZ2VzdHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnN1Z2dlc3RzKSkpCisgICAgICAgIGlmIHJyZWNvbW1lbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlY29tbWVuZHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnJlY29tbWVuZHMpKSkKKyAgICAgICAgaWYgcnByb3ZpZGVzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlByb3ZpZGVzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcykpKQorICAgICAgICBpZiBycmVwbGFjZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVwbGFjZXM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnJlcGxhY2VzKSkpCisgICAgICAgIGlmIHJjb25mbGljdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiQ29uZmxpY3RzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJjb25mbGljdHMpKSkKKyAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorCisgICAgICAgIGZvciBzY3JpcHQgaW4gWyJwcmVpbnN0IiwgInBvc3RpbnN0IiwgInByZXJtIiwgInBvc3RybSJdOgorICAgICAgICAgICAgc2NyaXB0dmFyID0gbG9jYWxkYXRhLmdldFZhcigncGtnXyVzJyAlIHNjcmlwdCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBzY3JpcHR2YXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IHNjcmlwdHZhci5zdHJpcCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gJXMgc2NyaXB0IGZpbGUgZm9yIHdyaXRpbmcuIiAlIHNjcmlwdCkKKworICAgICAgICAgICAgaWYgc2NyaXB0dmFyLnN0YXJ0c3dpdGgoIiMhIik6CisgICAgICAgICAgICAgICAgcG9zID0gc2NyaXB0dmFyLmZpbmQoIlxuIikgKyAxCisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZShzY3JpcHR2YXJbOnBvc10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBvcyA9IDAKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKCIjIS9iaW4vc2hcbiIpCisKKyAgICAgICAgICAgICMgUHJldmVudCB0aGUgcHJlcm0vcG9zdHJtIHNjcmlwdHMgZnJvbSBiZWluZyBydW4gZHVyaW5nIGFuIHVwZ3JhZGUKKyAgICAgICAgICAgIGlmIHNjcmlwdCBpbiAoJ3ByZXJtJywgJ3Bvc3RybScpOgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoJ1sgIiQxIiAhPSAidXBncmFkZSIgXSB8fCBleGl0IDBcbicpCisKKyAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoc2NyaXB0dmFyW3BvczpdKQorICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZSgnXG4nKQorICAgICAgICAgICAgc2NyaXB0ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgMDc1NSkKKworICAgICAgICBjb25mZmlsZXNfc3RyID0gJyAnLmpvaW4oZ2V0X2NvbmZmaWxlcyhwa2csIGQpKQorICAgICAgICBpZiBjb25mZmlsZXNfc3RyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbmZmaWxlcyA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb25mZmlsZXMnKSwgJ3cnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb25mZmlsZXMgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgICAgIGZvciBmIGluIGNvbmZmaWxlc19zdHIuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4ocm9vdCwgZikpOgorICAgICAgICAgICAgICAgICAgICBjb25mZmlsZXMud3JpdGUoJyVzXG4nICUgZikKKyAgICAgICAgICAgIGNvbmZmaWxlcy5jbG9zZSgpCisKKyAgICAgICAgb3MuY2hkaXIoYmFzZWRpcikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJQQVRIPVwiJXNcIiBkcGtnLWRlYiAtYiAlcyAlcyIgJSAobG9jYWxkYXRhLmdldFZhcigiUEFUSCIsIFRydWUpLCByb290LCBwa2dvdXRkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJkcGtnLWRlYiBleGVjdXRpb24gZmFpbGVkIikKKworICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCitkb19wYWNrYWdlX2RlYlt2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9ERUJ9IgorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9kZWJfc2V0c2NlbmUgKCkgeworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorCisgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiREVCX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSxvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiREVCX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3dyaXRlX2RlYl9zZXRzY2VuZQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZGVwZW5kcycsIGRlcHMpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZmFrZXJvb3QnLCAiMSIpCisKKyAgICAjIE1hcCBUQVJHRVRfQVJDSCB0byBEZWJpYW4ncyBpZGVhcyBhYm91dCBhcmNoaXRlY3R1cmVzCisgICAgZGFyY2ggPSBkLmdldFZhcignRFBLR19BUkNIJywgVHJ1ZSkKKyAgICBpZiBkYXJjaCBpbiBbIng4NiIsICJpNDg2IiwgImk1ODYiLCAiaTY4NiIsICJwZW50aXVtIl06CisgICAgICAgICBkLnNldFZhcignRFBLR19BUkNIJywgJ2kzODYnKQorICAgIGVsaWYgZGFyY2ggPT0gIng4Nl82NCI6CisgICAgICAgICBkLnNldFZhcignRFBLR19BUkNIJywgJ2FtZDY0JykKKyAgICBlbGlmIGRhcmNoID09ICJhcm0iOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdhcm1lbCcpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2RlYiAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9kZWIiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV9kZWJbZGlyc10gPSAiJHtQS0dXUklURURJUkRFQn0iCitkb19wYWNrYWdlX3dyaXRlX2RlYltjbGVhbmRpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbdW1hc2tdID0gIjAyMiIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV9kZWIgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQorCisKK1BBQ0tBR0VJTkRFWERFUFMgKz0gImRwa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitQQUNLQUdFSU5ERVhERVBTICs9ICJhcHQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9kZWIiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlX2lway5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDdhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcwpAQCAtMCwwICsxLDI4OSBAQAoraW5oZXJpdCBwYWNrYWdlCisKK0lNQUdFX1BLR1RZUEUgPz0gImlwayIKKworSVBLR0NPTkZfVEFSR0VUID0gIiR7V09SS0RJUn0vb3BrZy5jb25mIgorSVBLR0NPTkZfU0RLID0gICIke1dPUktESVJ9L29wa2ctc2RrLmNvbmYiCisKK1BLR1dSSVRFRElSSVBLID0gIiR7V09SS0RJUn0vZGVwbG95LWlwa3MiCisKKyMgUHJvZ3JhbSB0byBiZSB1c2VkIHRvIGJ1aWxkIG9wa2cgcGFja2FnZXMKK09QS0dCVUlMRENNRCA/Pz0gIm9wa2ctYnVpbGQiCisKK09QS0dfQVJHUyA9ICItLWZvcmNlX3Bvc3RpbnN0YWxsIC0tcHJlZmVyLWFyY2gtdG8tdmVyc2lvbiIKK09QS0dfQVJHUyArPSAiJHtAWycnLCAnLS1uby1pbnN0YWxsLXJlY29tbWVuZHMnXVtkLmdldFZhcigiTk9fUkVDT01NRU5EQVRJT05TIiwgVHJ1ZSkgPT0gIjEiXX0iCitPUEtHX0FSR1MgKz0gIiR7QFsnJywgJy0tYWRkLWV4Y2x1ZGUgJyArICcgLS1hZGQtZXhjbHVkZSAnLmpvaW4oKGQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIikuc3BsaXQoKSldWyhkLmdldFZhcigiUEFDS0FHRV9FWENMVURFIiwgVHJ1ZSkgb3IgIiIpICE9ICIiXX0iCisKK09QS0dMSUJESVIgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIiCisKK3B5dGhvbiBkb19wYWNrYWdlX2lwayAoKSB7CisgICAgaW1wb3J0IHJlLCBjb3B5CisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ1BLR1dSSVRFRElSSVBLJywgVHJ1ZSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBvdXRkaXIgb3Igbm90IHRtcGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIlZhcmlhYmxlcyBpbmNvcnJlY3RseSBzZXQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzIG9yIHBhY2thZ2VzID09ICcnOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgICMgV2UncmUgYWJvdXQgdG8gYWRkIG5ldyBwYWNrYWdlcyBzbyB0aGUgaW5kZXggbmVlZHMgdG8gYmUgY2hlY2tlZAorICAgICMgc28gcmVtb3ZlIHRoZSBhcHByb3ByaWF0ZSBzdGFtcCBmaWxlLgorICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIklQS19QQUNLQUdFX0lOREVYX0NMRUFOIiksIG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgZGVmIGNsZWFudXBjb250cm9sKHJvb3QpOgorICAgICAgICBmb3IgcCBpbiBbJ0NPTlRST0wnLCAnREVCSUFOJ106CisgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHJvb3QsIHApCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihwKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUocm9vdCArICIubG9jayIpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVCcsICcnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UXyVzJyAlIHBrZywgcm9vdCkKKyAgICAgICAgcGtnbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2duYW1lOgorICAgICAgICAgICAgcGtnbmFtZSA9IHBrZworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQS0cnLCBwa2duYW1lKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOiIgKyBwa2cpCisKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJvb3QpKQorICAgICAgICBhcmNoID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKworICAgICAgICBpZiBsb2NhbGRhdGEuZ2V0VmFyKCdJUEtfSElFUkFSQ0hJQ0FMX0ZFRUQnLCBGYWxzZSkgPT0gIjEiOgorICAgICAgICAgICAgIyBTcHJlYWQgcGFja2FnZXMgYWNyb3NzIHN1YmRpcmVjdG9yaWVzIHNvIGVhY2ggaXNuJ3QgdG9vIGNyb3dkZWQKKyAgICAgICAgICAgIGlmIHBrZ25hbWUuc3RhcnRzd2l0aCgnbGliJyk6CisgICAgICAgICAgICAgICAgcGtnX3ByZWZpeCA9ICdsaWInICsgcGtnbmFtZVszXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dfcHJlZml4ID0gcGtnbmFtZVswXQorCisgICAgICAgICAgICAjIEtlZXAgLWRiZywgLWRldiwgLWRvYywgLXN0YXRpY2RldiwgLWxvY2FsZSBhbmQgLWxvY2FsZS0qIHBhY2thZ2VzCisgICAgICAgICAgICAjIHRvZ2V0aGVyLiBUaGVzZSBwYWNrYWdlIHN1ZmZpeGVzIGFyZSB0YWtlbiBmcm9tIHRoZSBkZWZpbml0aW9ucyBvZgorICAgICAgICAgICAgIyBQQUNLQUdFUyBhbmQgUEFDS0FHRVNfRFlOQU1JQyBpbiBtZXRhL2NvbmYvYml0YmFrZS5jb25mCisgICAgICAgICAgICBpZiBwa2duYW1lWy00Ol0gaW4gKCctZGJnJywgJy1kZXYnLCAnLWRvYycpOgorICAgICAgICAgICAgICAgIHBrZ19zdWJkaXIgPSBwa2duYW1lWzotNF0KKyAgICAgICAgICAgIGVsaWYgcGtnbmFtZS5lbmRzd2l0aCgnLXN0YXRpY2RldicpOgorICAgICAgICAgICAgICAgIHBrZ19zdWJkaXIgPSBwa2duYW1lWzotMTBdCisgICAgICAgICAgICBlbGlmIHBrZ25hbWUuZW5kc3dpdGgoJy1sb2NhbGUnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTddCisgICAgICAgICAgICBlbGlmICctbG9jYWxlLScgaW4gcGtnbmFtZToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6cGtnbmFtZS5maW5kKCctbG9jYWxlLScpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZQorCisgICAgICAgICAgICBwa2dvdXRkaXIgPSAiJXMvJXMvJXMvJXMiICUgKG91dGRpciwgYXJjaCwgcGtnX3ByZWZpeCwgcGtnX3N1YmRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ291dGRpciA9ICIlcy8lcyIgJSAob3V0ZGlyLCBhcmNoKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dvdXRkaXIpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorICAgICAgICBnID0gZ2xvYignKicpCisgICAgICAgIGlmIG5vdCBnIGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdBTExPV19FTVBUWScsIEZhbHNlKSAhPSAiMSI6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgY29udHJvbGRpciA9IG9zLnBhdGguam9pbihyb290LCAnQ09OVFJPTCcpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjb250cm9sZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdHJsZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb250cm9sJyksICd3JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgcGUgPSBkLmdldFZhcignUEtHRScsIFRydWUpCisgICAgICAgIGlmIHBlIGFuZCBpbnQocGUpID4gMDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlczolcy0lc1xuIiwgWydQS0dFJywgJ1BLR1YnLCAnUEtHUiddXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlcy0lc1xuIiwgWydQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJEZXNjcmlwdGlvbjogJXNcbiIsIFsnREVTQ1JJUFRJT04nXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJTZWN0aW9uOiAlc1xuIiwgWydTRUNUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiUHJpb3JpdHk6ICVzXG4iLCBbJ1BSSU9SSVRZJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiTWFpbnRhaW5lcjogJXNcbiIsIFsnTUFJTlRBSU5FUiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIkxpY2Vuc2U6ICVzXG4iLCBbJ0xJQ0VOU0UnXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJBcmNoaXRlY3R1cmU6ICVzXG4iLCBbJ1BBQ0tBR0VfQVJDSCddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk9FOiAlc1xuIiwgWydQTiddXSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0hPTUVQQUdFJywgVHJ1ZSk6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiSG9tZXBhZ2U6ICVzXG4iLCBbJ0hPTUVQQUdFJ11dKQorCisgICAgICAgIGRlZiBwdWxsRGF0YShsLCBkKToKKyAgICAgICAgICAgIGwyID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIGw6CisgICAgICAgICAgICAgICAgbDIuYXBwZW5kKGQuZ2V0VmFyKGksIFRydWUpKQorICAgICAgICAgICAgcmV0dXJuIGwyCisKKyAgICAgICAgY3RybGZpbGUud3JpdGUoIlBhY2thZ2U6ICVzXG4iICUgcGtnbmFtZSkKKyAgICAgICAgIyBjaGVjayBmb3IgcmVxdWlyZWQgZmllbGRzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciAoYywgZnMpIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcihmLCBGYWxzZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGYpCisgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGJlaGF2aW9yIGZvciBkZXNjcmlwdGlvbi4uLgorICAgICAgICAgICAgICAgIGlmICdERVNDUklQVElPTicgaW4gZnM6CisgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJ0Rlc2NyaXB0aW9uOiAlc1xuJyAlIHN1bW1hcnkpCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXh0d3JhcC5kZWRlbnQoZGVzY3JpcHRpb24pLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgJ1xcbicgaW4gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAjIE1hbnVhbGx5IGluZGVudAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gZGVzY3JpcHRpb24uc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgbGltaXQgdGhlIHdpZHRoIHdoZW4gbWFudWFsbHkgaW5kZW50LCBidXQgd2UgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5lZWQgdGhlIHRleHR3cmFwLmZpbGwoKSB0byBzZXQgdGhlIGluaXRpYWxfaW5kZW50IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3Vic2VxdWVudF9pbmRlbnQsIHNvIHNldCBhIGxhcmdlIHdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdGV4dHdyYXAuZmlsbCh0LnN0cmlwKCksIHdpZHRoPTEwMDAwMCwgaW5pdGlhbF9pbmRlbnQ9JyAnLCBzdWJzZXF1ZW50X2luZGVudD0nICcpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBdXRvIGluZGVudAorICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdGV4dHdyYXAuZmlsbChkZXNjcmlwdGlvbiwgd2lkdGg9NzQsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZShjICUgdHVwbGUocHVsbERhdGEoZnMsIGxvY2FsZGF0YSkpKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk1pc3NpbmcgZmllbGQgZm9yIGlwayBnZW5lcmF0aW9uOiAlcyIgJSB2YWx1ZSkKKyAgICAgICAgIyBtb3JlIGZpZWxkcworCisgICAgICAgIGN1c3RvbV9maWVsZHNfY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJpcGsiLCBsb2NhbGRhdGEpCisgICAgICAgIGlmIGN1c3RvbV9maWVsZHNfY2h1bmsgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZShjdXN0b21fZmllbGRzX2NodW5rKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlxuIikKKworICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBkZWYgZGViaWFuX2NtcF9yZW1hcCh2YXIpOgorICAgICAgICAgICAgIyBJbiBkZWJpYW4gJz4nIGFuZCAnPCcgZG8gbm90IG1lYW4gd2hhdCBpdCBhcHBlYXJzIHRoZXkgbWVhbgorICAgICAgICAgICAgIyAgICc8JyA9IGxlc3Mgb3IgZXF1YWwKKyAgICAgICAgICAgICMgICAnPicgPSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAgICAgICAjIGFkanVzdCB0aGVzZSB0byB0aGUgJzw8JyBhbmQgJz4+JyBlcXVpdmFsZW50cworICAgICAgICAgICAgIworICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CisgICAgICAgICAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHZhcltkZXBdKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIjwgIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIjwgIiwgIjw8ICIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIj4gIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIj4gIiwgIj4+ICIpCisKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkRFUEVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyZGVwZW5kcykKKyAgICAgICAgcnJlY29tbWVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVjb21tZW5kcykKKyAgICAgICAgcnN1Z2dlc3RzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJTVUdHRVNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJzdWdnZXN0cykKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZHJvcCB2ZXJzaW9uIGluZm9ybWF0aW9uIGhlcmUsIG5vdCB3YW50ZWQvc3VwcG9ydGVkIGJ5IGlwaworICAgICAgICBycHJvdmlkZXMgPSBkaWN0LmZyb21rZXlzKGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUFJPVklERVMiLCBUcnVlKSBvciAiIiksIFtdKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJwcm92aWRlcykKKyAgICAgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRVBMQUNFUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJyZXBsYWNlcykKKyAgICAgICAgcmNvbmZsaWN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSQ09ORkxJQ1RTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmNvbmZsaWN0cykKKworICAgICAgICBpZiByZGVwZW5kczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJEZXBlbmRzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcykpCisgICAgICAgIGlmIHJzdWdnZXN0czoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJTdWdnZXN0czogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnN1Z2dlc3RzKSkKKyAgICAgICAgaWYgcnJlY29tbWVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVjb21tZW5kczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnJlY29tbWVuZHMpKQorICAgICAgICBpZiBycHJvdmlkZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUHJvdmlkZXM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcykpCisgICAgICAgIGlmIHJyZXBsYWNlczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJSZXBsYWNlczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnJlcGxhY2VzKSkKKyAgICAgICAgaWYgcmNvbmZsaWN0czoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJDb25mbGljdHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJjb25mbGljdHMpKQorICAgICAgICBzcmNfdXJpID0gbG9jYWxkYXRhLmdldFZhcigiU1JDX1VSSSIsIFRydWUpLnN0cmlwKCkgb3IgIk5vbmUiCisgICAgICAgIGlmIHNyY191cmk6CisgICAgICAgICAgICBzcmNfdXJpID0gcmUuc3ViKCJccysiLCAiICIsIHNyY191cmkpCisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiU291cmNlOiAlc1xuIiAlICIgIi5qb2luKHNyY191cmkuc3BsaXQoKSkpCisgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKworICAgICAgICBmb3Igc2NyaXB0IGluIFsicHJlaW5zdCIsICJwb3N0aW5zdCIsICJwcmVybSIsICJwb3N0cm0iXToKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ18lcycgJSBzY3JpcHQsIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgc2NyaXB0dmFyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gJXMgc2NyaXB0IGZpbGUgZm9yIHdyaXRpbmcuIiAlIHNjcmlwdCkKKyAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoc2NyaXB0dmFyKQorICAgICAgICAgICAgc2NyaXB0ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgMDc1NSkKKworICAgICAgICBjb25mZmlsZXNfc3RyID0gJyAnLmpvaW4oZ2V0X2NvbmZmaWxlcyhwa2csIGQpKQorICAgICAgICBpZiBjb25mZmlsZXNfc3RyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbmZmaWxlcyA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb25mZmlsZXMnKSwgJ3cnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb25mZmlsZXMgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgICAgIGZvciBmIGluIGNvbmZmaWxlc19zdHIuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4ocm9vdCwgZikpOgorICAgICAgICAgICAgICAgICAgICBjb25mZmlsZXMud3JpdGUoJyVzXG4nICUgZikKKyAgICAgICAgICAgIGNvbmZmaWxlcy5jbG9zZSgpCisKKyAgICAgICAgb3MuY2hkaXIoYmFzZWRpcikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJQQVRIPVwiJXNcIiAlcyAlcyAlcyIgJSAobG9jYWxkYXRhLmdldFZhcigiUEFUSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJPUEtHQlVJTERDTUQiLDEpLCBwa2csIHBrZ291dGRpciksIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIm9wa2ctYnVpbGQgZXhlY3V0aW9uIGZhaWxlZCIpCisKKyAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworfQorIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCitkb19wYWNrYWdlX2lwa1t2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV93cml0ZV9pcGsiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR1dSSVRFRElSSVBLfSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfSVBLfSIKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfaXBrX3NldHNjZW5lICgpIHsKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIklQS19QQUNLQUdFX0lOREVYX0NMRUFOIiksIG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrX3NldHNjZW5lCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAnIG9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkZXBlbmRzJywgZGVwcykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdmYWtlcm9vdCcsICIxIikKK30KKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfaXBrICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wYWNrYWdlX2lwayIsIGQpCit9Citkb19wYWNrYWdlX3dyaXRlX2lwa1tkaXJzXSA9ICIke1BLR1dSSVRFRElSSVBLfSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2NsZWFuZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1t1bWFza10gPSAiMDIyIgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX2lwayBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlCisKK1BBQ0tBR0VJTkRFWERFUFMgKz0gIm9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitQQUNLQUdFSU5ERVhERVBTICs9ICJvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV9ycG0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmExNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MKQEAgLTAsMCArMSw3NzQgQEAKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJycG0iCisKK1JQTT0icnBtIgorUlBNQlVJTEQ9InJwbWJ1aWxkIgorCitQS0dXUklURURJUlJQTSA9ICIke1dPUktESVJ9L2RlcGxveS1ycG1zIgorCisjIE1haW50YWluaW5nIHRoZSBwZXJmaWxlIGRlcGVuZGVuY2llcyBoYXMgc2luZ2lmaWNhbnQgb3ZlcmhlYWQgd2hlbiB3cml0aW5nIHRoZSAKKyMgcGFja2FnZXMuIFdoZW4gc2V0LCB0aGlzIHZhbHVlIG1lcmdlcyB0aGVtIGZvciBlZmZpY2llbmN5LgorTUVSR0VQRVJGSUxFREVQUyA9ICIxIgorCisjIENvbnN0cnVjdCBwZXIgZmlsZSBkZXBlbmRlbmNpZXMgZmlsZQorZGVmIHdyaXRlX3JwbV9wZXJmaWxlZGF0YShzcmNuYW1lLCBkKToKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwa2dkID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgZGVmIGR1bXBfZmlsZXJkZXBzKHZhcm5hbWUsIG91dGZpbGUsIGQpOgorICAgICAgICBvdXRmaWxlLndyaXRlKCIjIS91c3IvYmluL2VudiBweXRob25cblxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiIyBEZXBlbmRlbmN5IHRhYmxlXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCdkZXBzID0ge1xuJykKKyAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgZGVwZW5kc2ZsaXN0X2tleSA9ICdGSUxFJyArIHZhcm5hbWUgKyAnRkxJU1QnICsgIl8iICsgcGtnCisgICAgICAgICAgICBkZXBlbmRzZmxpc3QgPSAoZC5nZXRWYXIoZGVwZW5kc2ZsaXN0X2tleSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICBmb3IgZGZpbGUgaW4gZGVwZW5kc2ZsaXN0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAga2V5ID0gIkZJTEUiICsgdmFybmFtZSArICJfIiArIGRmaWxlICsgIl8iICsgcGtnCisgICAgICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMoZC5nZXRWYXIoa2V5LCBUcnVlKSBvciAiIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZGZpbGUucmVwbGFjZSgiQHVuZGVyc2NvcmVAIiwgIl8iKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkBjbG9zZWJyYWNlQCIsICJdIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAb3BlbmJyYWNlQCIsICJbIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAdGFiQCIsICJcdCIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQHNwYWNlQCIsICIgIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAYXRAIiwgIkAiKQorICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoJyInICsgcGtnZCArIGZpbGUgKyAnIiA6ICInKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgICAgICB2ZXIgPSBkZXBlbmRzX2RpY3RbZGVwXQorICAgICAgICAgICAgICAgICAgICBpZiBkZXAgYW5kIHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCIoIiwiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCIpIiwiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoZGVwICsgIiAiICsgdmVyICsgIiAiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZShkZXAgKyAiICIpCisgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSgnIixcbicpCisgICAgICAgIG91dGZpbGUud3JpdGUoJ31cblxuJykKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiaW1wb3J0IHN5c1xuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgid2hpbGUgMTpcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0bGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKClcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0aWYgbm90IGxpbmU6XG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdFx0c3lzLmV4aXQoMClcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0aWYgbGluZSBpbiBkZXBzOlxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRcdHByaW50KGRlcHNbbGluZV0gKyAnXFxuJylcbiIpCisKKyAgICAjIE9FLWNvcmUgZGVwZW5kZW5jaWVzIGEuay5hLiBSUE0gcmVxdWlyZXMKKyAgICBvdXRkZXBlbmRzID0gd29ya2RpciArICIvIiArIHNyY25hbWUgKyAiLnJlcXVpcmVzIgorCisgICAgdHJ5OgorICAgICAgICBkZXBlbmRzZmlsZSA9IG9wZW4ob3V0ZGVwZW5kcywgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikKKworICAgIGR1bXBfZmlsZXJkZXBzKCdSREVQRU5EUycsIGRlcGVuZHNmaWxlLCBkKQorCisgICAgZGVwZW5kc2ZpbGUuY2xvc2UoKQorICAgIG9zLmNobW9kKG91dGRlcGVuZHMsIDA3NTUpCisKKyAgICAjIE9FLWNvcmUgLyBSUE0gUHJvdmlkZXMKKyAgICBvdXRwcm92aWRlcyA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5wcm92aWRlcyIKKworICAgIHRyeToKKyAgICAgICAgcHJvdmlkZXNmaWxlID0gb3BlbihvdXRwcm92aWRlcywgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikKKworICAgIGR1bXBfZmlsZXJkZXBzKCdSUFJPVklERVMnLCBwcm92aWRlc2ZpbGUsIGQpCisKKyAgICBwcm92aWRlc2ZpbGUuY2xvc2UoKQorICAgIG9zLmNobW9kKG91dHByb3ZpZGVzLCAwNzU1KQorCisgICAgcmV0dXJuIChvdXRkZXBlbmRzLCBvdXRwcm92aWRlcykKKworCitweXRob24gd3JpdGVfc3BlY2ZpbGUgKCkgeworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgIyBhcHBlbmQgaW5mb3JtYXRpb24gZm9yIGxvZ3MgYW5kIHBhdGNoZXMgdG8gJXByZXAKKyAgICBkZWYgYWRkX3ByZXAoZCxzcGVjX2ZpbGVzX2JvdHRvbSk6CisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkgPT0gJzEnIGFuZCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhcmNoaXZlcicsIGQpOgorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclJXByZXAgLW4gJXMnICUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKQorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclcycgJSAiZWNobyBcImluY2x1ZGUgbG9ncyBhbmQgcGF0Y2hlcywgUGxlYXNlIGNoZWNrIHRoZW0gaW4gU09VUkNFU1wiIikKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJykKKworICAgICMgYXBwZW5kIHRoZSBuYW1lIG9mIHRhcmJhbGwgdG8ga2V5IHdvcmQgJ1NPVVJDRScgaW4geHh4LnNwZWMuCisgICAgZGVmIHRhaWxfc291cmNlKGQpOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JwbScsIFRydWUpID09ICcxJyBhbmQgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXJjaGl2ZXInLCBkKToKKyAgICAgICAgICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyX291dGRpcik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzb3VyY2VfbGlzdCA9IG9zLmxpc3RkaXIoYXJfb3V0ZGlyKQorICAgICAgICAgICAgc291cmNlX251bWJlciA9IDAKKyAgICAgICAgICAgIGZvciBzb3VyY2UgaW4gc291cmNlX2xpc3Q6CisgICAgICAgICAgICAgICAgIyBUaGUgcnBtYnVpbGQgZG9lc24ndCBuZWVkIHRoZSByb290IHBlcm1pc3Npb24sIGJ1dCBpdCBuZWVkcworICAgICAgICAgICAgICAgICMgdG8ga25vdyB0aGUgZmlsZSdzIHVzZXIgYW5kIGdyb3VwIG5hbWUsIHRoZSBvbmx5IHVzZXIgYW5kCisgICAgICAgICAgICAgICAgIyBncm91cCBpbiBmYWtlcm9vdCBpcyAicm9vdCIgd2hlbiB3b3JraW5nIGluIGZha2Vyb290LgorICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCBzb3VyY2UpCisgICAgICAgICAgICAgICAgb3MuY2hvd24oZiwgMCwgMCkKKyAgICAgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1NvdXJjZSVzOiAlcycgJSAoc291cmNlX251bWJlciwgc291cmNlKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbnVtYmVyICs9IDEKKyAgICAjIFdlIG5lZWQgYSBzaW1wbGUgd2F5IHRvIHJlbW92ZSB0aGUgTUxQUkVGSVggZnJvbSB0aGUgcGFja2FnZSBuYW1lLAorICAgICMgYW5kIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24uLi4KKyAgICBkZWYgc3RyaXBfbXVsdGlsaWIobmFtZSwgZCk6CisgICAgICAgIG11bHRpbGlicyA9IGQuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgICAgICBpZiBsZW4oZWV4dCkgPiAxIGFuZCBlZXh0WzBdID09ICdtdWx0aWxpYicgYW5kIG5hbWUgYW5kIG5hbWUuZmluZChlZXh0WzFdICsgJy0nKSA+PSAwOgorICAgICAgICAgICAgICAgIG5hbWUgPSAiIi5qb2luKG5hbWUuc3BsaXQoZWV4dFsxXSArICctJykpCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgc3RyaXBfbXVsdGlsaWJfZGVwcyhkZXBzLCBkKToKKyAgICAgICAgZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzIG9yICIiKQorICAgICAgICBuZXdkZXBzID0ge30KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzOgorICAgICAgICAgICAgbmV3ZGVwc1tzdHJpcF9tdWx0aWxpYihkZXAsIGQpXSA9IGRlcGVuZHNbZGVwXQorICAgICAgICByZXR1cm4gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHMpCisKKyMgICAgICAgIG1sID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyMgICAgICAgIGlmIG1sIGFuZCBuYW1lIGFuZCBsZW4obWwpICE9IDAgYW5kIG5hbWUuZmluZChtbCkgPT0gMDoKKyMgICAgICAgICAgICByZXR1cm4gbWwuam9pbihuYW1lLnNwbGl0KG1sLCAxKVsxOl0pCisjICAgICAgICByZXR1cm4gbmFtZQorCisgICAgIyBJbiBSUE0sIGRlcGVuZGVuY2llcyBhcmUgb2YgdGhlIGZvcm1hdDogcGtnIDw+PSBFcG9jaDpWZXJzaW9uLVJlbGVhc2UKKyAgICAjIFRoaXMgZm9ybWF0IGlzIHNpbWlsYXIgdG8gT0UsIGhvd2V2ZXIgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucyBvbiB0aGUKKyAgICAjIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgaW4gYSBmaWVsZC4gIEluIHRoZSBWZXJzaW9uIGZpZWxkLCAiLSIKKyAgICAjIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkLiAgIi0iIGlzIGFsbG93ZWQgaW4gdGhlIFJlbGVhc2UgZmllbGQuCisgICAgIworICAgICMgV2UgdHJhbnNsYXRlIHRoZSAiLSIgaW4gdGhlIHZlcnNpb24gdG8gYSAiKyIsIGJ5IGxvYWRpbmcgdGhlIFBLR1YKKyAgICAjIGZyb20gdGhlIGRlcGVuZGVudCByZWNpcGUsIHJlcGxhY2luZyB0aGUgLSB3aXRoIGEgKywgYW5kIHRoZW4gdXNpbmcKKyAgICAjIHRoYXQgdmFsdWUgdG8gZG8gYSByZXBsYWNlIGluc2lkZSBvZiB0aGlzIHJlY2lwZSdzIGRlcGVuZGVuY2llcy4KKyAgICAjIFRoaXMgcHJlc2VydmVzIHRoZSAiLSIgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHZlcnNpb24gYW5kIHJlbGVhc2UsIGFzCisgICAgIyB3ZWxsIGFzIGFueSAiLSIgY2hhcmFjdGVycyBpbnNpZGUgb2YgdGhlIHJlbGVhc2UgZmllbGQuCisgICAgIworICAgICMgQWxsIG9mIHRoaXMgaGFzIHRvIGhhcHBlbiBCRUZPUkUgdGhlIG1hcHBpbmdfcmVuYW1lX2hvb2sgYXMKKyAgICAjIGFmdGVyIHJlbmFtaW5nIHdlIGNhbm5vdCBsb29rIHVwIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhlIHBhY2thZ2VkYXRhCisgICAgIyBzdG9yZS4KKyAgICBkZWYgdHJhbnNsYXRlX3ZlcnModmFybmFtZSwgZCk6CisgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBkZXBlbmRzOgorICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcGVuZHMpCisgICAgICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzX2RpY3Q6CisgICAgICAgICAgICAgICAgdmVybGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHZlciBpbiBkZXBlbmRzX2RpY3RbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgaWYgJy0nIGluIHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmQgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGFfZGljdChkZXAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnUEtHVicgaW4gc3ViZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdiA9IHN1YmRbJ1BWJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2d2ID0gc3ViZFsnUEtHViddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcHYgPSBwa2d2LnJlcGxhY2UoJy0nLCAnKycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UocHYsIHJlcHB2KS5yZXBsYWNlKHBrZ3YsIHJlcHB2KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ1BLR1InIGluIHN1YmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgUEtHUiByYXRoZXIgdGhhbiBQUiBpbiB2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwciA9ICctJyArIHN1YmRbJ1BSJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dyID0gJy0nICsgc3ViZFsnUEtHUiddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnciBub3QgaW4gdmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZShwciwgcGtncikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcmxpc3QuYXBwZW5kKHZlcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcmxpc3QuYXBwZW5kKHZlcikKKyAgICAgICAgICAgICAgICBuZXdkZXBzX2RpY3RbZGVwXSA9IHZlcmxpc3QKKyAgICAgICAgICAgIGRlcGVuZHMgPSBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwc19kaWN0KQorICAgICAgICAgICAgZC5zZXRWYXIodmFybmFtZSwgZGVwZW5kcy5zdHJpcCgpKQorCisgICAgIyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgc3R5bGUgdGhlIGRlcGVuZGVuY3kgZnJvbSBCQiB0byBSUE0KKyAgICAjIFRoaXMgbmVlZHMgdG8gaGFwcGVuIEFGVEVSIHRoZSBtYXBwaW5nX3JlbmFtZV9ob29rCisgICAgZGVmIHByaW50X2RlcHModmFyaWFibGUsIHRhZywgYXJyYXksIGQpOgorICAgICAgICBkZXBlbmRzID0gdmFyaWFibGUKKyAgICAgICAgaWYgZGVwZW5kczoKKyAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBlbmRzKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzX2RpY3Q6CisgICAgICAgICAgICAgICAgZm9yIHZlciBpbiBkZXBlbmRzX2RpY3RbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoJygnLCAnJykKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoJyknLCAnJykKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKCIlczogJXMgJXMiICUgKHRhZywgZGVwLCB2ZXIpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsZW4oZGVwZW5kc19kaWN0W2RlcF0pOgorICAgICAgICAgICAgICAgICAgICBhcnJheS5hcHBlbmQoIiVzOiAlcyIgJSAodGFnLCBkZXApKQorCisgICAgZGVmIHdhbGtfZmlsZXMod2Fsa3BhdGgsIHRhcmdldCwgY29uZmZpbGVzLCBkaXJmaWxlcyk6CisgICAgICAgICMgV2UgY2FuIHJhY2UgYWdhaW5zdCB0aGUgaXBrL2RlYiBiYWNrZW5kcyB3aGljaCBjcmVhdGUgQ09OVFJPTCBvciBERUJJQU4gZGlyZWN0b3JpZXMKKyAgICAgICAgIyB3aGVuIHBhY2thZ2luZy4gV2UganVzdCBpZ25vcmUgdGhlc2UgZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgaW4gCisgICAgICAgICMgcGFja2FnZXMtc3BsaXQvIGFuZCBub3QgcGFja2FnZS8KKyAgICAgICAgIyBXZSBoYXZlIHRoZSBvZGQgc2l0dWF0aW9uIHdoZXJlIHRoZSBDT05UUk9ML0RFQklBTiBkaXJlY3RvcnkgY2FuIGJlIHJlbW92ZWQgaW4gdGhlIG1pZGRsZSBvZgorICAgICAgICAjIG9mIHRoZSB3YWxrLCB0aGUgaXNkaXIoKSB0ZXN0IHdvdWxkIHRoZW4gZmFpbCBhbmQgdGhlIHdhbGsgY29kZSB3b3VsZCBhc3N1bWUgaXRzIGEgZmlsZQorICAgICAgICAjIGhlbmNlIHdlIGNoZWNrIGZvciB0aGUgbmFtZXMgaW4gZmlsZXMgdG9vLgorICAgICAgICBmb3Igcm9vdHBhdGgsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod2Fsa3BhdGgpOgorICAgICAgICAgICAgcGF0aCA9IHJvb3RwYXRoLnJlcGxhY2Uod2Fsa3BhdGgsICIiKQorICAgICAgICAgICAgaWYgcGF0aC5lbmRzd2l0aCgiREVCSUFOIikgb3IgcGF0aC5lbmRzd2l0aCgiQ09OVFJPTCIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlIiwgIiUlJSUlJSUlIikKKworICAgICAgICAgICAgIyBUcmVhdCBhbGwgc3ltbGlua3MgdG8gZGlyZWN0b3JpZXMgYXMgbm9ybWFsIGZpbGVzLgorICAgICAgICAgICAgIyBvcy53YWxrKCkgbGlzdHMgdGhlbSBhcyBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIGRlZiBtb3ZlX3RvX2ZpbGVzKGRpcik6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKHJvb3RwYXRoLCBkaXIpKToKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGRpcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRpcnNbOl0gPSBbZGlyIGZvciBkaXIgaW4gZGlycyBpZiBub3QgbW92ZV90b19maWxlcyhkaXIpXQorCisgICAgICAgICAgICAjIERpcmVjdG9yeSBoYW5kbGluZyBjYW4gaGFwcGVuIGluIHR3byB3YXlzLCBlaXRoZXIgRElSRklMRVMgaXMgbm90IHNldCBhdCBhbGwKKyAgICAgICAgICAgICMgaW4gd2hpY2ggY2FzZSB3ZSBmYWxsIGJhY2sgdG8gdGhlIG9sZGVyIGJlaGF2aW91ciBvZiBwYWNrYWdlcyBvd25pbmcgYWxsIHRoZWlyCisgICAgICAgICAgICAjIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBpZiBkaXJmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGlyID09ICJDT05UUk9MIiBvciBkaXIgPT0gIkRFQklBTiI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBkaXIgPSBkaXIucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisgICAgICAgICAgICAgICAgICAgICMgQWxsIHBhY2thZ2VzIG93biB0aGUgZGlyZWN0b3JpZXMgdGhlaXIgZmlsZXMgYXJlIGluLi4uCisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVkaXIgIicgKyBwYXRoICsgJy8nICsgZGlyICsgJyInKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHBhY2thZ2VzIG93biBvbmx5IGVtcHR5IGRpcmVjdG9yaWVzIG9yIGV4cGxpY3QgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICMgVGhpcyB3aWxsIHByZXZlbnQgdGhlIG92ZXJsYXBwaW5nIG9mIHNlY3VyaXR5IHBlcm1pc3Npb24uCisgICAgICAgICAgICAgICAgaWYgcGF0aCBhbmQgbm90IGZpbGVzIGFuZCBub3QgZGlyczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWRpciAiJyArIHBhdGggKyAnIicpCisgICAgICAgICAgICAgICAgZWxpZiBwYXRoIGFuZCBwYXRoIGluIGRpcmZpbGVzOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclZGlyICInICsgcGF0aCArICciJykKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZmlsZSA9PSAiQ09OVFJPTCIgb3IgZmlsZSA9PSAiREVCSUFOIjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCIlIiwgIiUlJSUlJSUlIikKKyAgICAgICAgICAgICAgICBpZiBjb25mZmlsZXMuY291bnQocGF0aCArICcvJyArIGZpbGUpOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclY29uZmlnICInICsgcGF0aCArICcvJyArIGZpbGUgKyAnIicpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnIicgKyBwYXRoICsgJy8nICsgZmlsZSArICciJykKKworICAgICMgUHJldmVudCB0aGUgcHJlcm0vcG9zdHJtIHNjcmlwdHMgZnJvbSBiZWluZyBydW4gZHVyaW5nIGFuIHVwZ3JhZGUKKyAgICBkZWYgd3JhcF91bmluc3RhbGwoc2NyaXB0dmFyKToKKyAgICAgICAgc2NyID0gc2NyaXB0dmFyLnN0cmlwKCkKKyAgICAgICAgaWYgc2NyLnN0YXJ0c3dpdGgoIiMhIik6CisgICAgICAgICAgICBwb3MgPSBzY3IuZmluZCgiXG4iKSArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvcyA9IDAKKyAgICAgICAgc2NyID0gc2NyWzpwb3NdICsgJ2lmIFsgIiQxIiA9ICIwIiBdIDsgdGhlblxuJyArIHNjcltwb3M6XSArICdcbmZpJworICAgICAgICByZXR1cm4gc2NyCisKKyAgICBkZWYgZ2V0X3BlcmZpbGUodmFybmFtZSwgcGtnLCBkKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGRlcGVuZHNmbGlzdF9rZXkgPSAnRklMRScgKyB2YXJuYW1lICsgJ0ZMSVNUJyArICJfIiArIHBrZworICAgICAgICBkZXBlbmRzZmxpc3QgPSAoZC5nZXRWYXIoZGVwZW5kc2ZsaXN0X2tleSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGZvciBkZmlsZSBpbiBkZXBlbmRzZmxpc3Quc3BsaXQoKToKKyAgICAgICAgICAgIGtleSA9ICJGSUxFIiArIHZhcm5hbWUgKyAiXyIgKyBkZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKGtleSwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZGVwZW5kcykKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKGRlcHMpCisKKyAgICBkZWYgYXBwZW5kX2Rlc2NyaXB0aW9uKHNwZWNfcHJlYW1ibGUsIHRleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRoZSBkZXNjcmlwdGlvbiB0byB0aGUgc3BlYyBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHRleHR3cmFwCisgICAgICAgIGRlZGVudF90ZXh0ID0gdGV4dHdyYXAuZGVkZW50KHRleHQpLnN0cmlwKCkKKyAgICAgICAgIyBCaXRiYWtlIHNhdmVzICJcbiIgYXMgIlxcbiIKKyAgICAgICAgaWYgJ1xcbicgaW4gZGVkZW50X3RleHQ6CisgICAgICAgICAgICBmb3IgdCBpbiBkZWRlbnRfdGV4dC5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICAgICAgc3BlY19wcmVhbWJsZS5hcHBlbmQodC5zdHJpcCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZS5hcHBlbmQoJyVzJyAlIHRleHR3cmFwLmZpbGwoZGVkZW50X3RleHQsIHdpZHRoPTc1KSkKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBpZiBub3QgcGFja2FnZXMgb3IgcGFja2FnZXMgPT0gJyc6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlczsgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBpZiBub3QgcGtnZGVzdDoKKyAgICAgICAgYmIuZmF0YWwoIk5vIFBLR0RFU1QiKQorCisgICAgb3V0c3BlY2ZpbGUgPSBkLmdldFZhcignT1VUU1BFQ0ZJTEUnLCBUcnVlKQorICAgIGlmIG5vdCBvdXRzcGVjZmlsZToKKyAgICAgICAgYmIuZmF0YWwoIk5vIE9VVFNQRUNGSUxFIikKKworICAgICMgQ29uc3RydWN0IHRoZSBTUEVDIGZpbGUuLi4KKyAgICBzcmNuYW1lICAgID0gc3RyaXBfbXVsdGlsaWIoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGQpCisgICAgc3Jjc3VtbWFyeSA9IChkLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGQuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIikKKyAgICBzcmN2ZXJzaW9uID0gZC5nZXRWYXIoJ1BLR1YnLCBUcnVlKS5yZXBsYWNlKCctJywgJysnKQorICAgIHNyY3JlbGVhc2UgPSBkLmdldFZhcignUEtHUicsIFRydWUpCisgICAgc3JjZXBvY2ggICA9IChkLmdldFZhcignUEtHRScsIFRydWUpIG9yICIiKQorICAgIHNyY2xpY2Vuc2UgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgc3Jjc2VjdGlvbiA9IGQuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICBzcmNtYWludGFpbmVyICA9IGQuZ2V0VmFyKCdNQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICBzcmNob21lcGFnZSAgICA9IGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpCisgICAgc3JjZGVzY3JpcHRpb24gPSBkLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICBzcmNjdXN0b210YWdzY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJycG0iLCBkKQorCisgICAgc3JjZGVwZW5kcyAgICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSksIGQpCisgICAgc3JjcmRlcGVuZHMgICAgPSBbXQorICAgIHNyY3JyZWNvbW1lbmRzID0gW10KKyAgICBzcmNyc3VnZ2VzdHMgICA9IFtdCisgICAgc3JjcnByb3ZpZGVzICAgPSBbXQorICAgIHNyY3JyZXBsYWNlcyAgID0gW10KKyAgICBzcmNyY29uZmxpY3RzICA9IFtdCisgICAgc3Jjcm9ic29sZXRlcyAgPSBbXQorCisgICAgc3JjcnByZWluc3QgID0gW10KKyAgICBzcmNycG9zdGluc3QgPSBbXQorICAgIHNyY3JwcmVybSAgICA9IFtdCisgICAgc3JjcnBvc3RybSAgID0gW10KKworICAgIHNwZWNfcHJlYW1ibGVfdG9wID0gW10KKyAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbSA9IFtdCisKKyAgICBzcGVjX3NjcmlwdGxldHNfdG9wID0gW10KKyAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tID0gW10KKworICAgIHNwZWNfZmlsZXNfdG9wID0gW10KKyAgICBzcGVjX2ZpbGVzX2JvdHRvbSA9IFtdCisKKyAgICBwZXJmaWxlZGVwcyA9IChkLmdldFZhcigiTUVSR0VQRVJGSUxFREVQUyIsIFRydWUpIG9yICIwIikgPT0gIjAiCisgICAgZXh0cmFfcGtnZGF0YSA9IChkLmdldFZhcigiUlBNX0VYVFJBX1BLR0RBVEEiLCBUcnVlKSBvciAiMCIpID09ICIxIgorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKworICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVCcsICcnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UXyVzJyAlIHBrZywgcm9vdCkKKyAgICAgICAgcGtnbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2duYW1lOgorICAgICAgICAgICAgcGtnbmFtZSA9IHBrZworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQS0cnLCBwa2duYW1lKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOiIgKyBwa2cpCisKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgY29uZmZpbGVzID0gZ2V0X2NvbmZmaWxlcyhwa2csIGQpCisgICAgICAgIGRpcmZpbGVzID0gbG9jYWxkYXRhLmdldFZhcignRElSRklMRVMnLCBUcnVlKQorICAgICAgICBpZiBkaXJmaWxlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRpcmZpbGVzID0gZGlyZmlsZXMuc3BsaXQoKQorCisgICAgICAgIHNwbGl0bmFtZSAgICA9IHN0cmlwX211bHRpbGliKHBrZ25hbWUsIGQpCisKKyAgICAgICAgc3BsaXRzdW1tYXJ5ID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIikKKyAgICAgICAgc3BsaXR2ZXJzaW9uID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICcrJykKKyAgICAgICAgc3BsaXRyZWxlYXNlID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1InLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRlcG9jaCAgID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1BLR0UnLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRsaWNlbnNlID0gKGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRzZWN0aW9uID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRkZXNjcmlwdGlvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIikKKyAgICAgICAgc3BsaXRjdXN0b210YWdzY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJycG0iLCBsb2NhbGRhdGEpCisKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JERVBFTkRTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlJFQ09NTUVORFMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSU1VHR0VTVFMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSUFJPVklERVMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSUkVQTEFDRVMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSQ09ORkxJQ1RTJywgbG9jYWxkYXRhKQorCisgICAgICAgICMgTWFwIHRoZSBkZXBlbmRlbmNpZXMgaW50byB0aGVpciBmaW5hbCBmb3JtCisgICAgICAgIG1hcHBpbmdfcmVuYW1lX2hvb2sobG9jYWxkYXRhKQorCisgICAgICAgIHNwbGl0cmRlcGVuZHMgICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnJlY29tbWVuZHMgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JSRUNPTU1FTkRTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnN1Z2dlc3RzICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JTVUdHRVNUUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJwcm92aWRlcyAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSUFJPVklERVMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRycmVwbGFjZXMgICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUlJFUExBQ0VTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cmNvbmZsaWN0cyAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JDT05GTElDVFMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRyb2Jzb2xldGVzICA9IFtdCisKKyAgICAgICAgc3BsaXRycHJlaW5zdCAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIHNwbGl0cnBvc3RpbnN0ID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgc3BsaXRycHJlcm0gICAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcHJlcm0nLCBUcnVlKQorICAgICAgICBzcGxpdHJwb3N0cm0gICA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ19wb3N0cm0nLCBUcnVlKQorCisKKyAgICAgICAgaWYgbm90IHBlcmZpbGVkZXBzOgorICAgICAgICAgICAgIyBBZGQgaW4gc3VtbWFyeSBvZiBwZXIgZmlsZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIHNwbGl0cmRlcGVuZHMgPSBzcGxpdHJkZXBlbmRzICsgIiAiICsgZ2V0X3BlcmZpbGUoJ1JERVBFTkRTJywgcGtnLCBkKQorICAgICAgICAgICAgc3BsaXRycHJvdmlkZXMgPSBzcGxpdHJwcm92aWRlcyArICIgIiArIGdldF9wZXJmaWxlKCdSUFJPVklERVMnLCBwa2csIGQpCisKKyAgICAgICAgIyBHYXRoZXIgc3BlY2lhbCBzcmMvZmlyc3QgcGFja2FnZSBkYXRhCisgICAgICAgIGlmIHNyY25hbWUgPT0gc3BsaXRuYW1lOgorICAgICAgICAgICAgc3JjcmRlcGVuZHMgICAgPSBzcGxpdHJkZXBlbmRzCisgICAgICAgICAgICBzcmNycmVjb21tZW5kcyA9IHNwbGl0cnJlY29tbWVuZHMKKyAgICAgICAgICAgIHNyY3JzdWdnZXN0cyAgID0gc3BsaXRyc3VnZ2VzdHMKKyAgICAgICAgICAgIHNyY3Jwcm92aWRlcyAgID0gc3BsaXRycHJvdmlkZXMKKyAgICAgICAgICAgIHNyY3JyZXBsYWNlcyAgID0gc3BsaXRycmVwbGFjZXMKKyAgICAgICAgICAgIHNyY3Jjb25mbGljdHMgID0gc3BsaXRyY29uZmxpY3RzCisKKyAgICAgICAgICAgIHNyY3JwcmVpbnN0ICAgID0gc3BsaXRycHJlaW5zdAorICAgICAgICAgICAgc3JjcnBvc3RpbnN0ICAgPSBzcGxpdHJwb3N0aW5zdAorICAgICAgICAgICAgc3JjcnByZXJtICAgICAgPSBzcGxpdHJwcmVybQorICAgICAgICAgICAgc3JjcnBvc3RybSAgICAgPSBzcGxpdHJwb3N0cm0KKworICAgICAgICAgICAgZmlsZV9saXN0ID0gW10KKyAgICAgICAgICAgIHdhbGtfZmlsZXMocm9vdCwgZmlsZV9saXN0LCBjb25mZmlsZXMsIGRpcmZpbGVzKQorICAgICAgICAgICAgaWYgbm90IGZpbGVfbGlzdCBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmFwcGVuZCgnJWZpbGVzJykKKyAgICAgICAgICAgICAgICBpZiBleHRyYV9wa2dkYXRhOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3JwbV9leHRyYV9wa2dkYXRhKHNwbGl0bmFtZSwgc3BlY19maWxlc190b3AsIGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5hcHBlbmQoJyVkZWZhdHRyKC0sLSwtLC0pJykKKyAgICAgICAgICAgICAgICBpZiBmaWxlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmV4dGVuZChmaWxlX2xpc3QpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgRU1QVFkgUlBNIFBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5hcHBlbmQoJycpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgUHJvY2VzcyBzdWJwYWNrYWdlIGRhdGEKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCclJXBhY2thZ2UgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ1N1bW1hcnk6ICVzJyAlIHNwbGl0c3VtbWFyeSkKKyAgICAgICAgaWYgc3JjdmVyc2lvbiAhPSBzcGxpdHZlcnNpb246CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ1ZlcnNpb246ICVzJyAlIHNwbGl0dmVyc2lvbikKKyAgICAgICAgaWYgc3JjcmVsZWFzZSAhPSBzcGxpdHJlbGVhc2U6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ1JlbGVhc2U6ICVzJyAlIHNwbGl0cmVsZWFzZSkKKyAgICAgICAgaWYgc3JjZXBvY2ggIT0gc3BsaXRlcG9jaDoKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnRXBvY2g6ICVzJyAlIHNwbGl0ZXBvY2gpCisgICAgICAgIGlmIHNyY2xpY2Vuc2UgIT0gc3BsaXRsaWNlbnNlOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdMaWNlbnNlOiAlcycgJSBzcGxpdGxpY2Vuc2UpCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnR3JvdXA6ICVzJyAlIHNwbGl0c2VjdGlvbikKKworICAgICAgICBpZiBzcmNjdXN0b210YWdzY2h1bmsgIT0gc3BsaXRjdXN0b210YWdzY2h1bms6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoc3BsaXRjdXN0b210YWdzY2h1bmspCisKKyAgICAgICAgIyBSZXBsYWNlcyA9PSBPYnNvbGV0ZXMgJiYgUHJvdmlkZXMKKyAgICAgICAgcm9ic29sZXRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJvYnNvbGV0ZXMgb3IgIiIpCisgICAgICAgIHJwcm92aWRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJwcm92aWRlcyBvciAiIikKKyAgICAgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cnJlcGxhY2VzIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIHJyZXBsYWNlczoKKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcm9ic29sZXRlczoKKyAgICAgICAgICAgICAgICByb2Jzb2xldGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgcnByb3ZpZGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgICAgICBzcGxpdHJvYnNvbGV0ZXMgPSBiYi51dGlscy5qb2luX2RlcHMocm9ic29sZXRlcywgY29tbWFzZXA9RmFsc2UpCisgICAgICAgIHNwbGl0cnByb3ZpZGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcywgY29tbWFzZXA9RmFsc2UpCisKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycHJlaW5zdDoKKyAgICAgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzKHByZSkiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycG9zdGluc3Q6CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0KSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBpZiBzcGxpdHJwcmVybToKKyAgICAgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzKHByZXVuKSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBpZiBzcGxpdHJwb3N0cm06CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0dW4pIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisKKyAgICAgICAgIyBTdWdnZXN0cyBpbiBSUE0gYXJlIGxpa2UgcmVjb21tZW5kcyBpbiBPRS1jb3JlIQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cnJlY29tbWVuZHMsICJTdWdnZXN0cyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICAjIFdoaWxlIHRoZXJlIGlzIG5vIGFuYWxvZyBmb3Igc3VnZ2VzdHMuLi4gKFNvIGNhbGwgdGhlbSByZWNvbW1lbmRzIGZvciBub3cpCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyc3VnZ2VzdHMsICAiUmVjb21tZW5kcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cnByb3ZpZGVzLCAgIlByb3ZpZGVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyb2Jzb2xldGVzLCAiT2Jzb2xldGVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisKKyAgICAgICAgIyBjb25mbGljdHMgY2FuIG5vdCBiZSBpbiBhIHByb3ZpZGUhICBXZSB3aWxsIG5lZWQgdG8gZmlsdGVyIGl0LgorICAgICAgICBpZiBzcGxpdHJjb25mbGljdHM6CisgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRyY29uZmxpY3RzKQorICAgICAgICAgICAgbmV3ZGVwc19kaWN0ID0ge30KKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gc3BsaXRycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgICAgIGlmIG5ld2RlcHNfZGljdDoKKyAgICAgICAgICAgICAgICBzcGxpdHJjb25mbGljdHMgPSBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwc19kaWN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdHJjb25mbGljdHMgPSAiIgorCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyY29uZmxpY3RzLCAgIkNvbmZsaWN0cyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJyUlZGVzY3JpcHRpb24gLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICBhcHBlbmRfZGVzY3JpcHRpb24oc3BlY19wcmVhbWJsZV9ib3R0b20sIHNwbGl0ZGVzY3JpcHRpb24pCisKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCcnKQorCisgICAgICAgICMgTm93IHByb2Nlc3Mgc2NyaXB0bGV0cworICAgICAgICBpZiBzcGxpdHJwcmVpbnN0OgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcHJlIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcHJlaW5zdCcgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzcGxpdHJwcmVpbnN0KQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJycpCisgICAgICAgIGlmIHNwbGl0cnBvc3RpbnN0OgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcG9zdCAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnIyAlcyAtIHBvc3RpbnN0JyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNwbGl0cnBvc3RpbnN0KQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJycpCisgICAgICAgIGlmIHNwbGl0cnByZXJtOgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcHJldW4gLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwcmVybScgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3VuaW5zdGFsbChzcGxpdHJwcmVybSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwb3N0cm06CisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJSVwb3N0dW4gLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwb3N0cm0nICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3BsaXRycG9zdHJtKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc2NyaXB0dmFyKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgIyBOb3cgcHJvY2VzcyBmaWxlcworICAgICAgICBmaWxlX2xpc3QgPSBbXQorICAgICAgICB3YWxrX2ZpbGVzKHJvb3QsIGZpbGVfbGlzdCwgY29uZmZpbGVzLCBkaXJmaWxlcykKKyAgICAgICAgaWYgbm90IGZpbGVfbGlzdCBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJyUlZmlsZXMgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgaWYgZXh0cmFfcGtnZGF0YToKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3JwbV9leHRyYV9wa2dkYXRhKHNwbGl0bmFtZSwgc3BlY19maWxlc19ib3R0b20sIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJWRlZmF0dHIoLSwtLC0sLSknKQorICAgICAgICAgICAgaWYgZmlsZV9saXN0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uZXh0ZW5kKGZpbGVfbGlzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgRU1QVFkgUlBNIFBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICBkZWwgbG9jYWxkYXRhCisgICAgCisgICAgYWRkX3ByZXAoZCxzcGVjX2ZpbGVzX2JvdHRvbSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1N1bW1hcnk6ICVzJyAlIHNyY3N1bW1hcnkpCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdOYW1lOiAlcycgJSBzcmNuYW1lKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnVmVyc2lvbjogJXMnICUgc3JjdmVyc2lvbikKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1JlbGVhc2U6ICVzJyAlIHNyY3JlbGVhc2UpCisgICAgaWYgc3JjZXBvY2ggYW5kIHNyY2Vwb2NoLnN0cmlwKCkgIT0gIiI6CisgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnRXBvY2g6ICVzJyAlIHNyY2Vwb2NoKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnTGljZW5zZTogJXMnICUgc3JjbGljZW5zZSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0dyb3VwOiAlcycgJSBzcmNzZWN0aW9uKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnUGFja2FnZXI6ICVzJyAlIHNyY21haW50YWluZXIpCisgICAgaWYgc3JjaG9tZXBhZ2U6CisgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnVVJMOiAlcycgJSBzcmNob21lcGFnZSkKKyAgICBpZiBzcmNjdXN0b210YWdzY2h1bms6CisgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZChzcmNjdXN0b210YWdzY2h1bmspCisgICAgdGFpbF9zb3VyY2UoZCkKKworICAgICMgUmVwbGFjZXMgPT0gT2Jzb2xldGVzICYmIFByb3ZpZGVzCisgICAgcm9ic29sZXRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNyb2Jzb2xldGVzIG9yICIiKQorICAgIHJwcm92aWRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNycHJvdmlkZXMgb3IgIiIpCisgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNyY3JyZXBsYWNlcyBvciAiIikKKyAgICBmb3IgZGVwIGluIHJyZXBsYWNlczoKKyAgICAgICAgaWYgbm90IGRlcCBpbiByb2Jzb2xldGVzOgorICAgICAgICAgICAgcm9ic29sZXRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgaWYgbm90IGRlcCBpbiBycHJvdmlkZXM6CisgICAgICAgICAgICBycHJvdmlkZXNbZGVwXSA9IHJyZXBsYWNlc1tkZXBdCisgICAgc3Jjcm9ic29sZXRlcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhyb2Jzb2xldGVzLCBjb21tYXNlcD1GYWxzZSkKKyAgICBzcmNycHJvdmlkZXMgPSBiYi51dGlscy5qb2luX2RlcHMocnByb3ZpZGVzLCBjb21tYXNlcD1GYWxzZSkKKworICAgIHByaW50X2RlcHMoc3JjZGVwZW5kcywgIkJ1aWxkUmVxdWlyZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycHJlaW5zdDoKKyAgICAgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzKHByZSkiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycG9zdGluc3Q6CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0KSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIGlmIHNyY3JwcmVybToKKyAgICAgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzKHByZXVuKSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIGlmIHNyY3Jwb3N0cm06CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0dW4pIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisKKyAgICAjIFN1Z2dlc3RzIGluIFJQTSBhcmUgbGlrZSByZWNvbW1lbmRzIGluIE9FLWNvcmUhCisgICAgcHJpbnRfZGVwcyhzcmNycmVjb21tZW5kcywgIlN1Z2dlc3RzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgIyBXaGlsZSB0aGVyZSBpcyBubyBhbmFsb2cgZm9yIHN1Z2dlc3RzLi4uIChTbyBjYWxsIHRoZW0gcmVjb21tZW5kcyBmb3Igbm93KQorICAgIHByaW50X2RlcHMoc3JjcnN1Z2dlc3RzLCAiUmVjb21tZW5kcyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIHByaW50X2RlcHMoc3JjcnByb3ZpZGVzLCAiUHJvdmlkZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBwcmludF9kZXBzKHNyY3JvYnNvbGV0ZXMsICJPYnNvbGV0ZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICAKKyAgICAjIGNvbmZsaWN0cyBjYW4gbm90IGJlIGluIGEgcHJvdmlkZSEgIFdlIHdpbGwgbmVlZCB0byBmaWx0ZXIgaXQuCisgICAgaWYgc3JjcmNvbmZsaWN0czoKKyAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNyY3Jjb25mbGljdHMpCisgICAgICAgIG5ld2RlcHNfZGljdCA9IHt9CisgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBzcmNycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgbmV3ZGVwc19kaWN0W2RlcF0gPSBkZXBlbmRzX2RpY3RbZGVwXQorICAgICAgICBpZiBuZXdkZXBzX2RpY3Q6CisgICAgICAgICAgICBzcmNyY29uZmxpY3RzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNyY3Jjb25mbGljdHMgPSAiIgorCisgICAgcHJpbnRfZGVwcyhzcmNyY29uZmxpY3RzLCAiQ29uZmxpY3RzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJycpCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJyVkZXNjcmlwdGlvbicpCisgICAgYXBwZW5kX2Rlc2NyaXB0aW9uKHNwZWNfcHJlYW1ibGVfdG9wLCBzcmNkZXNjcmlwdGlvbikKKworICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnJykKKworICAgIGlmIHNyY3JwcmVpbnN0OgorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXByZScpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcHJlaW5zdCcgJSBzcmNuYW1lKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzcmNycHJlaW5zdCkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCisgICAgaWYgc3JjcnBvc3RpbnN0OgorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXBvc3QnKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHBvc3RpbnN0JyAlIHNyY25hbWUpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNyY3Jwb3N0aW5zdCkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCisgICAgaWYgc3JjcnByZXJtOgorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXByZXVuJykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwcmVybScgJSBzcmNuYW1lKQorICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3VuaW5zdGFsbChzcmNycHJlcm0pCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCisgICAgaWYgc3JjcnBvc3RybToKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwb3N0dW4nKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHBvc3RybScgJSBzcmNuYW1lKQorICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3VuaW5zdGFsbChzcmNycG9zdHJtKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorCisgICAgIyBXcml0ZSB0aGUgU1BFQyBmaWxlCisgICAgdHJ5OgorICAgICAgICBzcGVjZmlsZSA9IG9wZW4ob3V0c3BlY2ZpbGUsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICAjIFJQTVNQRUNfUFJFQU1CTEUgaXMgYSB3YXkgdG8gYWRkIGFyYml0cmFyeSB0ZXh0IHRvIHRoZSB0b3AKKyAgICAjIG9mIHRoZSBnZW5lcmF0ZWQgc3BlYyBmaWxlCisgICAgZXh0ZXJuYWxfcHJlYW1ibGUgPSBkLmdldFZhcigiUlBNU1BFQ19QUkVBTUJMRSIsIFRydWUpCisgICAgaWYgZXh0ZXJuYWxfcHJlYW1ibGU6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGV4dGVybmFsX3ByZWFtYmxlICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfcHJlYW1ibGVfdG9wOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfcHJlYW1ibGVfYm90dG9tOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfc2NyaXB0bGV0c190b3A6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19zY3JpcHRsZXRzX2JvdHRvbToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX2ZpbGVzX3RvcDoKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX2ZpbGVzX2JvdHRvbToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBzcGVjZmlsZS5jbG9zZSgpCit9CisjIE90aGVyd2lzZSBhbGxhcmNoIHBhY2thZ2VzIG1heSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KK3dyaXRlX3NwZWNmaWxlW3ZhcmRlcHNleGNsdWRlXSA9ICJPVkVSUklERVMiCisKK3B5dGhvbiBkb19wYWNrYWdlX3JwbSAoKSB7CisgICAgIyBXZSBuZWVkIGEgc2ltcGxlIHdheSB0byByZW1vdmUgdGhlIE1MUFJFRklYIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwKKyAgICAjIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLi4uCisgICAgZGVmIHN0cmlwX211bHRpbGliKG5hbWUsIGQpOgorICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisgICAgICAgIGlmIG1sIGFuZCBuYW1lIGFuZCBsZW4obWwpICE9IDAgYW5kIG5hbWUuZmluZChtbCkgPj0gMDoKKyAgICAgICAgICAgIHJldHVybiAiIi5qb2luKG5hbWUuc3BsaXQobWwpKQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBwa2dkID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXIgb3Igbm90IHBrZ2Qgb3Igbm90IHRtcGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIlZhcmlhYmxlcyBpbmNvcnJlY3RseSBzZXQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzIG9yIHBhY2thZ2VzID09ICcnOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgICMgQ29uc3RydWN0IHRoZSBzcGVjIGZpbGUuLi4KKyAgICAjIElmIHRoZSBzcGVjIGZpbGUgYWxyZWFkeSBleGlzdCwgYW5kIGhhcyBub3QgYmVlbiBzdG9yZWQgaW50byAKKyAgICAjIHBzZXVkbydzIGZpbGVzLmRiLCBpdCBtYXliZSBjYXVzZSBycG1idWlsZCBzcmMucnBtIGZhaWwsCisgICAgIyBzbyByZW1vdmUgaXQgYmVmb3JlIGRvaW5nIHJwbWJ1aWxkIHNyYy5ycG0uCisgICAgc3JjbmFtZSAgICA9IHN0cmlwX211bHRpbGliKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkKQorICAgIG91dHNwZWNmaWxlID0gd29ya2RpciArICIvIiArIHNyY25hbWUgKyAiLnNwZWMiCisgICAgaWYgb3MucGF0aC5pc2ZpbGUob3V0c3BlY2ZpbGUpOgorICAgICAgICBvcy5yZW1vdmUob3V0c3BlY2ZpbGUpCisgICAgZC5zZXRWYXIoJ09VVFNQRUNGSUxFJywgb3V0c3BlY2ZpbGUpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCd3cml0ZV9zcGVjZmlsZScsIGQpCisKKyAgICBwZXJmaWxlZGVwcyA9IChkLmdldFZhcigiTUVSR0VQRVJGSUxFREVQUyIsIFRydWUpIG9yICIwIikgPT0gIjAiCisgICAgaWYgcGVyZmlsZWRlcHM6CisgICAgICAgIG91dGRlcGVuZHMsIG91dHByb3ZpZGVzID0gd3JpdGVfcnBtX3BlcmZpbGVkYXRhKHNyY25hbWUsIGQpCisKKyAgICAjIFNldHVwIHRoZSBycG1idWlsZCBhcmd1bWVudHMuLi4KKyAgICBycG1idWlsZCA9IGQuZ2V0VmFyKCdSUE1CVUlMRCcsIFRydWUpCisgICAgdGFyZ2V0c3lzID0gZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKQorICAgIHRhcmdldHZlbmRvciA9IGQuZ2V0VmFyKCdIT1NUX1ZFTkRPUicsIFRydWUpCisgICAgcGFja2FnZV9hcmNoID0gKGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKSBvciAiIikucmVwbGFjZSgiLSIsICJfIikKKyAgICBzZGtwa2dzdWZmaXggPSAoZC5nZXRWYXIoJ1NES1BLR1NVRkZJWCcsIFRydWUpIG9yICJuYXRpdmVzZGsiKS5yZXBsYWNlKCItIiwgIl8iKQorICAgIGlmIHBhY2thZ2VfYXJjaCBub3QgaW4gImFsbCBhbnkgbm9hcmNoIi5zcGxpdCgpIGFuZCBub3QgcGFja2FnZV9hcmNoLmVuZHN3aXRoKHNka3BrZ3N1ZmZpeCk6CisgICAgICAgIG1sX3ByZWZpeCA9IChkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIikucmVwbGFjZSgiLSIsICJfIikKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFRFTkQnLCBtbF9wcmVmaXggKyBwYWNrYWdlX2FyY2gpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFRFTkQnLCBwYWNrYWdlX2FyY2gpCisgICAgcGtnd3JpdGVkaXIgPSBkLmV4cGFuZCgnJHtQS0dXUklURURJUlJQTX0vJHtQQUNLQUdFX0FSQ0hfRVhURU5EfScpCisgICAgZC5zZXRWYXIoJ1JQTV9QS0dXUklURURJUicsIHBrZ3dyaXRlZGlyKQorICAgIGJiLmRlYnVnKDEsICdQS0dXUklURURJUjogJXMnICUgZC5nZXRWYXIoJ1JQTV9QS0dXUklURURJUicsIFRydWUpKQorICAgIHBrZ2FyY2ggPSBkLmV4cGFuZCgnJHtQQUNLQUdFX0FSQ0hfRVhURU5EfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30nKQorICAgIG1hZ2ljZmlsZSA9IGQuZXhwYW5kKCcke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfS9taXNjL21hZ2ljLm1nYycpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ3dyaXRlZGlyKQorICAgIG9zLmNobW9kKHBrZ3dyaXRlZGlyLCAwNzU1KQorCisgICAgY21kID0gcnBtYnVpbGQKKyAgICBjbWQgPSBjbWQgKyAiIC0tbm9kZXBzIC0tc2hvcnQtY2lyY3VpdCAtLXRhcmdldCAiICsgcGtnYXJjaCArICIgLS1idWlsZHJvb3QgIiArIHBrZ2QKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfdG9wZGlyICIgKyB3b3JrZGlyICsgIicgLS1kZWZpbmUgJ19ycG1kaXIgIiArIHBrZ3dyaXRlZGlyICsgIiciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX2J1aWxkZGlyICIgKyBkLmdldFZhcignUycsIFRydWUpICsgIiciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX2J1aWxkX25hbWVfZm10ICUle05BTUV9LSUle1ZFUlNJT059LSUle1JFTEVBU0V9LiUle0FSQ0h9LnJwbSciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3VzZV9pbnRlcm5hbF9kZXBlbmRlbmN5X2dlbmVyYXRvciAwJyIKKyAgICBpZiBwZXJmaWxlZGVwczoKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3JlcXVpcmVzICIgKyBvdXRkZXBlbmRzICsgIiciCisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9wcm92aWRlcyAiICsgb3V0cHJvdmlkZXMgKyAiJyIKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcmVxdWlyZXMgJXtuaWx9JyIKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3Byb3ZpZGVzICV7bmlsfSciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3VucGFja2FnZWRfZmlsZXNfdGVybWluYXRlX2J1aWxkIDAnIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ2RlYnVnX3BhY2thZ2UgJXtuaWx9JyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfcnBtZmNfbWFnaWNfcGF0aCAiICsgbWFnaWNmaWxlICsgIiciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3RtcHBhdGggIiArIHdvcmtkaXIgKyAiJyIKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JwbScsIFRydWUpID09ICcxJyBhbmQgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXJjaGl2ZXInLCBkKToKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3NvdXJjZWRpciAiICsgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpICsgIiciCisgICAgICAgIGNtZHNycG0gPSBjbWQgKyAiIC0tZGVmaW5lICdfc3JjcnBtZGlyICIgKyBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkgKyAiJyIKKyAgICAgICAgY21kc3JwbSA9IGNtZHNycG0gKyAiIC1icyAiICsgb3V0c3BlY2ZpbGUKKyAgICAgICAgIyBCdWlsZCB0aGUgLnNyYy5ycG0KKyAgICAgICAgZC5zZXRWYXIoJ1NCVUlMRFNQRUMnLCBjbWRzcnBtICsgIlxuIikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdTQlVJTERTUEVDJywgJ2Z1bmMnLCAnMScpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnU0JVSUxEU1BFQycsIGQpCisgICAgY21kID0gY21kICsgIiAtYmIgIiArIG91dHNwZWNmaWxlCisKKyAgICAjIEJ1aWxkIHRoZSBycG0gcGFja2FnZSEKKyAgICBkLnNldFZhcignQlVJTERTUEVDJywgY21kICsgIlxuIikKKyAgICBkLnNldFZhckZsYWcoJ0JVSUxEU1BFQycsICdmdW5jJywgJzEnKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnQlVJTERTUEVDJywgZCkKKworICAgIGlmIGQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzaWduX3JwbSIsIGQpCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAnIHJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCBkZXBzKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2Zha2Vyb290JywgMSkKK30KKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2Vfd3JpdGVfcnBtIgorZG9fcGFja2FnZV93cml0ZV9ycG1bc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dXUklURURJUlJQTX0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX1JQTX0iCisjIFRha2UgYSBzaGFyZWQgbG9jaywgd2UgY2FuIHdyaXRlIG11bHRpcGxlIHBhY2thZ2VzIGF0IHRoZSBzYW1lIHRpbWUuLi4KKyMgYnV0IHdlIG5lZWQgdG8gc3RvcCB0aGUgcm9vdGZzL3NvbHZlciBmcm9tIHJ1bm5pbmcgd2hpbGUgd2UgZG8uLi4KK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWRdICs9ICIke0RFUExPWV9ESVJfUlBNfS9ycG0ubG9jayIKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfcnBtX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV93cml0ZV9ycG1fc2V0c2NlbmUKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfcnBtICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wYWNrYWdlX3JwbSIsIGQpCit9CisKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RpcnNdID0gIiR7UEtHV1JJVEVESVJSUE19IgorZG9fcGFja2FnZV93cml0ZV9ycG1bY2xlYW5kaXJzXSA9ICIke1BLR1dSSVRFRElSUlBNfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3VtYXNrXSA9ICIwMjIiCithZGR0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKKworUEFDS0FHRUlOREVYREVQUyArPSAicnBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAiY3JlYXRlcmVwby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfdGFyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllMjI5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzCkBAIC0wLDAgKzEsNjkgQEAKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJ0YXIiCisKK3B5dGhvbiBkb19wYWNrYWdlX3RhciAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIG91dGRpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSX1RBUicsIFRydWUpCisgICAgaWYgbm90IG91dGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIkRFUExPWV9ESVJfVEFSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBpZiBub3QgZHZhcjoKKyAgICAgICAgYmIuZXJyb3IoIkQgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiUEFDS0FHRVMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRkaXIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGR2YXIpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgRmFsc2UpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICclczolcycgJSAob3ZlcnJpZGVzLCBwa2cpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocm9vdCkKKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguZGlybmFtZShyb290KQorICAgICAgICB0YXJmbiA9IGxvY2FsZGF0YS5leHBhbmQoIiR7REVQTE9ZX0RJUl9UQVJ9LyR7UEtHfS0ke1BLR1Z9LSR7UEtHUn0udGFyLmd6IikKKyAgICAgICAgb3MuY2hkaXIocm9vdCkKKyAgICAgICAgZGxpc3QgPSBvcy5saXN0ZGlyKHJvb3QpCisgICAgICAgIGlmIG5vdCBkbGlzdDoKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBhcmNoaXZlIGZvciAlcy0lcy0lcyIgJSAocGtnLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dWJywgVHJ1ZSksIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1InLCBUcnVlKSkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBhcmdzID0gInRhciAtY3ogLS1leGNsdWRlPUNPTlRST0wgLS1leGNsdWRlPURFQklBTiAtZiIuc3BsaXQoKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoYXJncyArIFt0YXJmbl0gKyBkbGlzdCkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBiYi5lcnJvcigiQ3JlYXRpb24gb2YgdGFyICVzIGZhaWxlZC4iICUgdGFyZm4pCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAoZC5nZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3RhcicsICdkZXBlbmRzJykgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZGVwcy5hcHBlbmQoJ3Rhci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGRlcHMuYXBwZW5kKCd2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3RhcicsICdkZXBlbmRzJywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZmFrZXJvb3QnLCAiMSIpCit9CisKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfdGFyICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wYWNrYWdlX3RhciIsIGQpCit9Citkb19wYWNrYWdlX3dyaXRlX3RhcltkaXJzXSA9ICIke0R9IgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX3RhciBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2VkYXRhLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZWRhdGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk3ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VkYXRhLmJiY2xhc3MKQEAgLTAsMCArMSwzNCBAQAorcHl0aG9uIHJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSAoKSB7CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICB2YXJzID0geworICAgICAgICAiUE4iIDogZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIAorICAgICAgICAiUEUiIDogZC5nZXRWYXIoJ1BFJywgVHJ1ZSksIAorICAgICAgICAiUFYiIDogZC5nZXRWYXIoJ1BWJywgVHJ1ZSksCisgICAgICAgICJQUiIgOiBkLmdldFZhcignUFInLCBUcnVlKSwKKyAgICB9CisKKyAgICBkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9wa2dkYXRhKHZhcnNbIlBOIl0sIGQpCisKKyAgICBmb3Iga2V5IGluIGRhdGEua2V5cygpOgorICAgICAgICBkLnNldFZhcihrZXksIGRhdGFba2V5XSkKKworICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgc2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocGtnLCBkKQorICAgICAgICBmb3Iga2V5IGluIHNkYXRhLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBpbiB2YXJzOgorICAgICAgICAgICAgICAgIGlmIHNkYXRhW2tleV0gIT0gdmFyc1trZXldOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgPT0gIlBOIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJSZWNpcGUgJXMgaXMgdHJ5aW5nIHRvIGNyZWF0ZSBwYWNrYWdlICVzIHdoaWNoIHdhcyBhbHJlYWR5IHdyaXR0ZW4gYnkgcmVjaXBlICVzLiBUaGlzIHdpbGwgY2F1c2UgY29ycnVwdGlvbiwgcGxlYXNlIHJlc29sdmUgdGhpcyBhbmQgb25seSBwcm92aWRlIHRoZSBwYWNrYWdlIGZyb20gb25lIHJlY2lwZSBvciB0aGUgb3RoZXIgb3Igb25seSBidWlsZCBvbmUgb2YgdGhlIHJlY2lwZXMuIiAlICh2YXJzW2tleV0sIHBrZywgc2RhdGFba2V5XSkpCisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJSZWNpcGUgJXMgaXMgdHJ5aW5nIHRvIGNoYW5nZSAlcyBmcm9tICclcycgdG8gJyVzJy4gVGhpcyB3aWxsIGNhdXNlIGRvX3BhY2thZ2Vfd3JpdGVfKiBmYWlsdXJlcyBzaW5jZSB0aGUgaW5jb3JyZWN0IGRhdGEgd2lsbCBiZSB1c2VkIGFuZCB0aGV5IHdpbGwgYmUgdW5hYmxlIHRvIGZpbmQgdGhlIHJpZ2h0IHdvcmtkaXIuIiAlICh2YXJzWyJQTiJdLCBrZXksIHZhcnNba2V5XSwgc2RhdGFba2V5XSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgd2Ugc2V0IHVuc3VmZml4ZWQgdmFyaWFibGVzIGhlcmUgdGhlcmUgaXMgYSBjaGFuY2UgdGhleSBjb3VsZCBjbG9iYmVyIG92ZXJyaWRlIHZlcnNpb25zCisgICAgICAgICAgICAjIG9mIHRoYXQgdmFyaWFibGUsIGUuZy4gREVTQ1JJUFRJT04gY291bGQgY2xvYmJlciBERVNDUklQVElPTl88cGtnbmFtZT4KKyAgICAgICAgICAgICMgV2UgdGhlcmVmb3JlIGRvbid0IGNsb2JiZXIgZm9yIHRoZSB1bnN1ZmZpeGVkIHZhcmlhYmxlIHZlcnNpb25zCisgICAgICAgICAgICAjCisgICAgICAgICAgICBpZiBrZXkuZW5kc3dpdGgoIl8iICsgcGtnKToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihrZXksIHNkYXRhW2tleV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgc2RhdGFba2V5XSwgcGFyc2luZz1UcnVlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2ZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZWdyb3VwLmJiY2xhc3MKQEAgLTAsMCArMSw1MiBAQAorIyBDbGFzcyBmb3IgcGFja2FnZWdyb3VwIChwYWNrYWdlIGdyb3VwKSByZWNpcGVzCisKKyMgQnkgZGVmYXVsdCwgb25seSB0aGUgcGFja2FnZWdyb3VwIHBhY2thZ2UgaXRzZWxmIGlzIGluIFBBQ0tBR0VTLgorIyAtZGJnIGFuZCAtZGV2IGZsYXZvdXJzIGFyZSBoYW5kbGVkIGJ5IHRoZSBhbm9uZnVuYyBiZWxvdy4KKyMgVGhpcyBtZWFucyB0aGF0IHBhY2thZ2Vncm91cCByZWNpcGVzIHVzZWQgdG8gYnVpbGQgbXVsdGlwbGUgcGFja2FnZWdyb3VwCisjIHBhY2thZ2VzIGhhdmUgdG8gbW9kaWZ5IFBBQ0tBR0VTIGFmdGVyIGluaGVyaXRpbmcgcGFja2FnZWdyb3VwLmJiY2xhc3MuCitQQUNLQUdFUyA9ICIke1BOfSIKKworIyBCeSBkZWZhdWx0LCBwYWNrYWdlZ3JvdXAgcGFja2FnZXMgZG8gbm90IGRlcGVuZCBvbiBhIGNlcnRhaW4gYXJjaGl0ZWN0dXJlLgorIyBPbmx5IGlmIGRlcGVuZGVuY2llcyBhcmUgbW9kaWZpZWQgYnkgTUFDSElORV9GRUFUVVJFUywgcGFja2FnZXMKKyMgbmVlZCB0byBiZSBzZXQgdG8gTUFDSElORV9BUkNIIGFmdGVyIGluaGVyaXRpbmcgcGFja2FnZWdyb3VwLmJiY2xhc3MKK1BBQ0tBR0VfQVJDSCA/PSAiYWxsIgorCisjIEZ1bGx5IGV4cGFuZGVkIC0gc28gaXQgYXBwbGllcyB0aGUgb3ZlcnJpZGVzIGFzIHdlbGwKK1BBQ0tBR0VfQVJDSF9FWFBBTkRFRCA6PSAiJHtQQUNLQUdFX0FSQ0h9IgorCitpbmhlcml0ICR7QG9lLnV0aWxzLmlmZWxzZShkLmdldFZhcignUEFDS0FHRV9BUkNIX0VYUEFOREVEJywgVHJ1ZSkgPT0gJ2FsbCcsICdhbGxhcmNoJywgJycpfQorCisjIFRoaXMgYXV0b21hdGljYWxseSBhZGRzIC1kYmcgYW5kIC1kZXYgZmxhdm91cnMgb2YgYWxsIFBBQ0tBR0VTCisjIHRvIHRoZSBsaXN0LiBUaGVpciBkZXBlbmRlbmNpZXMgKFJSRUNPTU1FTkRTKSBhcmUgaGFuZGxlZCBhcyB1c3VhbAorIyBieSBwYWNrYWdlX2RlcGNoYWlucyBpbiBhIGZvbGxvd2luZyBzdGVwLgorIyBBbHNvIG1hcmsgYWxsIHBhY2thZ2VzIGFzIEFMTE9XX0VNUFRZCitweXRob24gKCkgeworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGdlbnBhY2thZ2VzID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBkLnNldFZhcigiQUxMT1dfRU1QVFlfJXMiICUgcGtnLCAiMSIpCisgICAgICAgIGZvciBwb3N0Zml4IGluIFsnLWRiZycsICctZGV2JywgJy1wdGVzdCddOgorICAgICAgICAgICAgZ2VucGFja2FnZXMuYXBwZW5kKHBrZytwb3N0Zml4KQorICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcytnZW5wYWNrYWdlcykpCit9CisKKyMgV2UgZG9uJ3Qgd2FudCB0byBsb29rIGF0IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmb3IgdGhlCisjIGRiZyBwYWNrYWdlcworREVQQ0hBSU5fREJHREVGQVVMVERFUFMgPSAiMSIKKworIyBXZSBvbmx5IG5lZWQgdGhlIHBhY2thZ2luZyB0YXNrcyAtIGRpc2FibGUgdGhlIHJlc3QKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCitweXRob24gKCkgeworICAgIGluaXRtYW4gPSBkLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIFRydWUpCisgICAgaWYgaW5pdG1hbiBhbmQgaW5pdG1hbiBpbiBbJ3N5c3Zpbml0JywgJ3N5c3RlbWQnXSBhbmQgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCBpbml0bWFuLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGJiLmZhdGFsKCJQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBzZXR0aW5nIG9mIFZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgKCVzKSBtYXRjaGVzIHRoZSBlbnRyaWVzIGVuYWJsZWQgaW4gRElTVFJPX0ZFQVRVUkVTIiAlIGluaXRtYW4pCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlaW5mby5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2MGFjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlaW5mby5iYmNsYXNzCkBAIC0wLDAgKzEsMjIgQEAKK3B5dGhvbiBwYWNrYWdlaW5mb19oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKyAgICBwa2dpbmZvbGlzdCA9IFtdCisKKyAgICBwa2dkYXRhX2RpciA9IGUuZGF0YS5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkgKyAnL3J1bnRpbWUvJworICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2RhdGFfZGlyKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGtnZGF0YV9kaXIpOgorICAgICAgICAgICAgZm9yIHBrZ25hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgcGtnbmFtZS5lbmRzd2l0aCgnLnBhY2thZ2VkJyk6CisgICAgICAgICAgICAgICAgICAgIHBrZ25hbWUgPSBwa2duYW1lWzotOV0KKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YWZpbGUgPSByb290ICsgcGtnbmFtZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfcGtnZGF0YWZpbGUocGtnZGF0YWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZGF0YVsnUEtHJ10gPSBwa2duYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBwa2dpbmZvbGlzdC5hcHBlbmQoc2RhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkZhaWxlZCB0byByZWFkIHBrZ2RhdGEgZmlsZSAlczogJXM6ICVzIiAlIChwa2dkYXRhZmlsZSwgZS5fX2NsYXNzX18sIHN0cihlKSkpCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5QYWNrYWdlSW5mbyhwa2dpbmZvbGlzdCksIGUuZGF0YSkKK30KKworYWRkaGFuZGxlciBwYWNrYWdlaW5mb19oYW5kbGVyCitwYWNrYWdlaW5mb19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVxdWVzdFBhY2thZ2VJbmZvIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGF0Y2guYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTJhYWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MKQEAgLTAsMCArMSwxODggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICBPcGVuZWRIYW5kIExURAorCisjIFBvaW50IHRvIGFuIGVtcHR5IGZpbGUgc28gYW55IHVzZXIncyBjdXN0b20gc2V0dGluZ3MgZG9uJ3QgYnJlYWsgdGhpbmdzCitRVUlMVFJDRklMRSA/PSAiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3F1aWx0cmMiCisKK1BBVENIREVQRU5ERU5DWSA9ICIke1BBVENIVE9PTH0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2luaGVyaXQgdGVybWluYWwKKworZGVmIHNyY19wYXRjaGVzKGQsIGFsbCA9IEZhbHNlICk6CisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBwYXRjaGVzID0gW10KKyAgICBzb3VyY2VzID0gW10KKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIGxvY2FsID0gcGF0Y2hfcGF0aCh1cmwsIGZldGNoLCB3b3JrZGlyKQorICAgICAgICBpZiBub3QgbG9jYWw6CisgICAgICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICAgICAgbG9jYWwgPSBmZXRjaC5sb2NhbHBhdGgodXJsKQorICAgICAgICAgICAgICAgIHNvdXJjZXMuYXBwZW5kKGxvY2FsKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICBwYXJtID0gdXJsZGF0YS5wYXJtCisgICAgICAgIHBhdGNobmFtZSA9IHBhcm0uZ2V0KCdwbmFtZScpIG9yIG9zLnBhdGguYmFzZW5hbWUobG9jYWwpCisKKyAgICAgICAgYXBwbHksIHJlYXNvbiA9IHNob3VsZF9hcHBseShwYXJtLCBkKQorICAgICAgICBpZiBub3QgYXBwbHk6CisgICAgICAgICAgICBpZiByZWFzb246CisgICAgICAgICAgICAgICAgYmIubm90ZSgiUGF0Y2ggJXMgJXMiICUgKHBhdGNobmFtZSwgcmVhc29uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcGF0Y2hwYXJtID0geydwYXRjaG5hbWUnOiBwYXRjaG5hbWV9CisgICAgICAgIGlmICJzdHJpcGxldmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgc3RyaXBsZXZlbCA9IHBhcm1bInN0cmlwbGV2ZWwiXQorICAgICAgICBlbGlmICJwbnVtIiBpbiBwYXJtOgorICAgICAgICAgICAgI2JiLm1zZy53YXJuKE5vbmUsICJEZXByZWNhdGVkIHVzYWdlIG9mICdwbnVtJyB1cmwgcGFyYW1ldGVyIGluICclcycsIHBsZWFzZSB1c2UgJ3N0cmlwbGV2ZWwnIiAlIHVybCkKKyAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSBwYXJtWyJwbnVtIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSAnMScKKyAgICAgICAgcGF0Y2hwYXJtWydzdHJpcGxldmVsJ10gPSBzdHJpcGxldmVsCisKKyAgICAgICAgcGF0Y2hkaXIgPSBwYXJtLmdldCgncGF0Y2hkaXInKQorICAgICAgICBpZiBwYXRjaGRpcjoKKyAgICAgICAgICAgIHBhdGNocGFybVsncGF0Y2hkaXInXSA9IHBhdGNoZGlyCisKKyAgICAgICAgbG9jYWx1cmwgPSBiYi5mZXRjaC5lbmNvZGV1cmwoKCdmaWxlJywgJycsIGxvY2FsLCAnJywgJycsIHBhdGNocGFybSkpCisgICAgICAgIHBhdGNoZXMuYXBwZW5kKGxvY2FsdXJsKQorCisgICAgaWYgYWxsOgorICAgICAgICByZXR1cm4gc291cmNlcworCisgICAgcmV0dXJuIHBhdGNoZXMKKworZGVmIHBhdGNoX3BhdGgodXJsLCBmZXRjaCwgd29ya2Rpcik6CisgICAgIiIiUmV0dXJuIHRoZSBsb2NhbCBwYXRoIG9mIGEgcGF0Y2gsIG9yIE5vbmUgaWYgdGhpcyBpc24ndCBhIHBhdGNoIiIiCisKKyAgICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpCisgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKSkKKyAgICBpZiBleHQgaW4gKCcuZ3onLCAnLmJ6MicsICcuWicpOgorICAgICAgICBsb2NhbCA9IG9zLnBhdGguam9pbih3b3JrZGlyLCBiYXNlKQorICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2UpWzFdCisKKyAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgIGlmICJhcHBseSIgaW4gdXJsZGF0YS5wYXJtOgorICAgICAgICBhcHBseSA9IG9lLnR5cGVzLmJvb2xlYW4odXJsZGF0YS5wYXJtWyJhcHBseSJdKQorICAgICAgICBpZiBub3QgYXBwbHk6CisgICAgICAgICAgICByZXR1cm4KKyAgICBlbGlmIGV4dCBub3QgaW4gKCIuZGlmZiIsICIucGF0Y2giKToKKyAgICAgICAgcmV0dXJuCisKKyAgICByZXR1cm4gbG9jYWwKKworZGVmIHNob3VsZF9hcHBseShwYXJtLCBkKToKKyAgICAiIiJEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGFwcGx5IHRoZSBnaXZlbiBwYXRjaCIiIgorCisgICAgaWYgIm1pbmRhdGUiIGluIHBhcm0gb3IgIm1heGRhdGUiIGluIHBhcm06CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgc3JjZGF0ZSA9IGQuZ2V0VmFyKCdTUkNEQVRFXyVzJyAlIHBuLCBUcnVlKQorICAgICAgICBpZiBub3Qgc3JjZGF0ZToKKyAgICAgICAgICAgIHNyY2RhdGUgPSBkLmdldFZhcignU1JDREFURScsIFRydWUpCisKKyAgICAgICAgaWYgc3JjZGF0ZSA9PSAibm93IjoKKyAgICAgICAgICAgIHNyY2RhdGUgPSBkLmdldFZhcignREFURScsIFRydWUpCisKKyAgICAgICAgaWYgIm1heGRhdGUiIGluIHBhcm0gYW5kIHBhcm1bIm1heGRhdGUiXSA8IHNyY2RhdGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdpcyBvdXRkYXRlZCcKKworICAgICAgICBpZiAibWluZGF0ZSIgaW4gcGFybSBhbmQgcGFybVsibWluZGF0ZSJdID4gc3JjZGF0ZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgJ2lzIHByZWRhdGVkJworCisKKyAgICBpZiAibWlucmV2IiBpbiBwYXJtOgorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBzcmNyZXYgPCBwYXJtWyJtaW5yZXYiXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgJ2FwcGxpZXMgdG8gbGF0ZXIgcmV2aXNpb25zJworCisgICAgaWYgIm1heHJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgc3JjcmV2ID4gcGFybVsibWF4cmV2Il06CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdhcHBsaWVzIHRvIGVhcmxpZXIgcmV2aXNpb25zJworCisgICAgaWYgInJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgcGFybVsicmV2Il0gbm90IGluIHNyY3JldjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgImRvZXNuJ3QgYXBwbHkgdG8gcmV2aXNpb24iCisKKyAgICBpZiAibm90cmV2IiBpbiBwYXJtOgorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBwYXJtWyJub3RyZXYiXSBpbiBzcmNyZXY6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJkb2Vzbid0IGFwcGx5IHRvIHJldmlzaW9uIgorCisgICAgcmV0dXJuIFRydWUsIE5vbmUKKworc2hvdWxkX2FwcGx5W3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFIFNSQ0RBVEUiCisKK3B5dGhvbiBwYXRjaF9kb19wYXRjaCgpIHsKKyAgICBpbXBvcnQgb2UucGF0Y2gKKworICAgIHBhdGNoc2V0bWFwID0geworICAgICAgICAicGF0Y2giOiBvZS5wYXRjaC5QYXRjaFRyZWUsCisgICAgICAgICJxdWlsdCI6IG9lLnBhdGNoLlF1aWx0VHJlZSwKKyAgICAgICAgImdpdCI6IG9lLnBhdGNoLkdpdEFwcGx5VHJlZSwKKyAgICB9CisKKyAgICBjbHMgPSBwYXRjaHNldG1hcFtkLmdldFZhcignUEFUQ0hUT09MJywgVHJ1ZSkgb3IgJ3F1aWx0J10KKworICAgIHJlc29sdmVybWFwID0geworICAgICAgICAibm9vcCI6IG9lLnBhdGNoLk5PT1BSZXNvbHZlciwKKyAgICAgICAgInVzZXIiOiBvZS5wYXRjaC5Vc2VyUmVzb2x2ZXIsCisgICAgfQorCisgICAgcmNscyA9IHJlc29sdmVybWFwW2QuZ2V0VmFyKCdQQVRDSFJFU09MVkUnLCBUcnVlKSBvciAndXNlciddCisKKyAgICBjbGFzc2VzID0ge30KKworICAgIHMgPSBkLmdldFZhcignUycsIFRydWUpCisKKyAgICBwYXRoID0gb3MuZ2V0ZW52KCdQQVRIJykKKyAgICBvcy5wdXRlbnYoJ1BBVEgnLCBkLmdldFZhcignUEFUSCcsIFRydWUpKQorCisgICAgIyBXZSBtdXN0IHVzZSBvbmUgVE1QRElSIHBlciBwcm9jZXNzIHNvIHRoYXQgdGhlICJwYXRjaCIgcHJvY2Vzc2VzCisgICAgIyBkb24ndCBnZW5lcmF0ZSB0aGUgc2FtZSB0ZW1wIGZpbGUgbmFtZS4KKworICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIHByb2Nlc3NfdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgb3MuZW52aXJvblsnVE1QRElSJ10gPSBwcm9jZXNzX3RtcGRpcgorCisgICAgZm9yIHBhdGNoIGluIHNyY19wYXRjaGVzKGQpOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKworICAgICAgICBpZiAicGF0Y2hkaXIiIGluIHBhcm06CisgICAgICAgICAgICBwYXRjaGRpciA9IHBhcm1bInBhdGNoZGlyIl0KKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHBhdGNoZGlyKToKKyAgICAgICAgICAgICAgICBwYXRjaGRpciA9IG9zLnBhdGguam9pbihzLCBwYXRjaGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGNoZGlyID0gcworCisgICAgICAgIGlmIG5vdCBwYXRjaGRpciBpbiBjbGFzc2VzOgorICAgICAgICAgICAgcGF0Y2hzZXQgPSBjbHMocGF0Y2hkaXIsIGQpCisgICAgICAgICAgICByZXNvbHZlciA9IHJjbHMocGF0Y2hzZXQsIG9lX3Rlcm1pbmFsKQorICAgICAgICAgICAgY2xhc3Nlc1twYXRjaGRpcl0gPSAocGF0Y2hzZXQsIHJlc29sdmVyKQorICAgICAgICAgICAgcGF0Y2hzZXQuQ2xlYW4oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0Y2hzZXQsIHJlc29sdmVyID0gY2xhc3Nlc1twYXRjaGRpcl0KKworICAgICAgICBiYi5ub3RlKCJBcHBseWluZyBwYXRjaCAnJXMnICglcykiICUgKHBhcm1bJ3BhdGNobmFtZSddLCBvZS5wYXRoLmZvcm1hdF9kaXNwbGF5KGxvY2FsLCBkKSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGNoc2V0LkltcG9ydCh7ImZpbGUiOmxvY2FsLCAic3RyaXBwYXRoIjogcGFybVsnc3RyaXBsZXZlbCddfSwgVHJ1ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgICAgICAgICBiYi5mYXRhbChzdHIoZXhjKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzb2x2ZXIuUmVzb2x2ZSgpCisgICAgICAgIGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShwcm9jZXNzX3RtcGRpciwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLmZhdGFsKHN0cihlKSkKKworICAgIGJiLnV0aWxzLnJlbW92ZShwcm9jZXNzX3RtcGRpciwgVHJ1ZSkKKyAgICBkZWwgb3MuZW52aXJvblsnVE1QRElSJ10KK30KK3BhdGNoX2RvX3BhdGNoW3ZhcmRlcHNleGNsdWRlXSA9ICJQQVRDSFJFU09MVkUiCisKK2FkZHRhc2sgcGF0Y2ggYWZ0ZXIgZG9fdW5wYWNrCitkb19wYXRjaFtkaXJzXSA9ICIke1dPUktESVJ9IgorZG9fcGF0Y2hbZGVwZW5kc10gPSAiJHtQQVRDSERFUEVOREVOQ1l9IgorCitFWFBPUlRfRlVOQ1RJT05TIGRvX3BhdGNoCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGVybG5hdGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BlcmxuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzhkZThiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BlcmxuYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKK0VYVFJBTkFUSVZFUEFUSCArPSAicGVybC1uYXRpdmUiCitERVBFTkRTICs9ICJwZXJsLW5hdGl2ZSIKK09FQ01BS0VfUEVSTE5BVElWRV9ESVIgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGl4YnVmY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk5NjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw2NyBAQAorIworIyBUaGlzIGNsYXNzIHdpbGwgZ2VuZXJhdGUgdGhlIHByb3BlciBwb3N0aW5zdC9wb3N0cm0gc2NyaXB0bGV0cyBmb3IgcGl4YnVmCisjIHBhY2thZ2VzLgorIworCitERVBFTkRTICs9ICJxZW11LW5hdGl2ZSIKK2luaGVyaXQgcWVtdQorCitQSVhCVUZfUEFDS0FHRVMgPz89ICIke1BOfSIKKworcGl4YnVmY2FjaGVfY29tbW9uKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfcGl4YnVmX2NhY2hlICR7UEtHfSBtbHByZWZpeD0ke01MUFJFRklYfSBsaWJkaXI9JHtsaWJkaXJ9IFwKKwkJYmluZGlyPSR7YmluZGlyfSBiYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfQorZWxzZQorCisJIyBVcGRhdGUgdGhlIHBpeGJ1ZiBsb2FkZXJzIGluIGNhc2UgdGhleSBoYXZlbid0IGJlZW4gcmVnaXN0ZXJlZCB5ZXQKKwlHREtfUElYQlVGX01PRFVMRURJUj0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMgZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIC0tdXBkYXRlLWNhY2hlCisKKwlpZiBbIC14ICR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgXSAmJiBbIC1kICR7ZGF0YWRpcn0vaWNvbnMgXTsgdGhlbgorCQlmb3IgaWNvbmRpciBpbiAvdXNyL3NoYXJlL2ljb25zLyo7IGRvCisJCQlpZiBbIC1kICR7aWNvbmRpcn0gXTsgdGhlbgorCQkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtdCAtcSAke2ljb25kaXJ9CisJCQlmaQorCQlkb25lCisJZmkKK2ZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQoKSB7CisgICAgcGl4YnVmX3BrZ3MgPSBkLmdldFZhcignUElYQlVGX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgZm9yIHBrZyBpbiBwaXhidWZfcGtnczoKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIHBpeGJ1ZiBwb3N0aW5zdCBhbmQgcG9zdHJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdwaXhidWZjYWNoZV9jb21tb24nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBkLmdldFZhcigncGl4YnVmY2FjaGVfY29tbW9uJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK2dka3BpeGJ1Zl9jb21wbGV0ZSgpIHsKKwlHREtfUElYQlVGX0ZBVEFMX0xPQURFUj0xICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUgfHwgZXhpdCAxCit9CisKKyMKKyMgQWRkIGFuIHNzdGF0ZSBwb3N0aW5zdCBob29rIHRvIHVwZGF0ZSB0aGUgY2FjaGUgZm9yIG5hdGl2ZSBwYWNrYWdlcy4KKyMgQW4gZXJyb3IgZXhpdCBkdXJpbmcgcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBhbGxvd3MgYml0YmFrZSB0bworIyB0cnkgdG8gcmVjb3ZlciBieSByZS1idWlsZGluZyB0aGUgcGFja2FnZS4KKyMKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcGl4YnVmY2FjaGVfc3N0YXRlX3Bvc3RpbnN0IgorCisjIFNlZSBiYXNlLmJiY2xhc3MgZm9yIHRoZSBvdGhlciBoYWxmIG9mIHRoaXMKK3BpeGJ1ZmNhY2hlX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgXTsgdGhlbgorCQkke2dka3BpeGJ1Zl9jb21wbGV0ZX0KKwllbGlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdOyB0aGVuCisJCWVjaG8gIiR7Z2RrcGl4YnVmX2NvbXBsZXRlfSIgPj4gJHtTVEFHSU5HX0RJUn0vc3N0YXRlY29tcGxldGlvbnMKKwlmaQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxZjg0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wa2djb25maWcuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKK0RFUEVORFNfcHJlcGVuZCA9ICJwa2djb25maWctbmF0aXZlICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NGE5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACisjIFRoZSBtYWpvcml0eSBvZiBwb3B1bGF0ZV9zZGsgaXMgbG9jYXRlZCBpbiBwb3B1bGF0ZV9zZGtfYmFzZQorIyBUaGlzIGNodW5rIHNpbXBseSBmYWNpbGl0YXRlcyBjb21wYXRpYmlsaXR5IHdpdGggU0RLIG9ubHkgcmVjaXBlcy4KKworaW5oZXJpdCBwb3B1bGF0ZV9zZGtfYmFzZQorCithZGR0YXNrIHBvcHVsYXRlX3NkayBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19idWlsZAorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2E5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDIwMyBAQAoraW5oZXJpdCBtZXRhCisKKyMgV2lsZGNhcmRzIHNwZWNpZnlpbmcgY29tcGxlbWVudGFyeSBwYWNrYWdlcyB0byBpbnN0YWxsIGZvciBldmVyeSBwYWNrYWdlIHRoYXQgaGFzIGJlZW4gZXhwbGljaXRseQorIyBpbnN0YWxsZWQgaW50byB0aGUgcm9vdGZzCitDT01QTEVNRU5UQVJZX0dMT0JbZGV2LXBrZ3NdID0gJyotZGV2JworQ09NUExFTUVOVEFSWV9HTE9CW3N0YXRpY2Rldi1wa2dzXSA9ICcqLXN0YXRpY2RldicKK0NPTVBMRU1FTlRBUllfR0xPQltkb2MtcGtnc10gPSAnKi1kb2MnCitDT01QTEVNRU5UQVJZX0dMT0JbZGJnLXBrZ3NdID0gJyotZGJnJworQ09NUExFTUVOVEFSWV9HTE9CW3B0ZXN0LXBrZ3NdID0gJyotcHRlc3QnCisKK2RlZiBjb21wbGVtZW50YXJ5X2dsb2JzKGZlYXR1cmV2YXIsIGQpOgorICAgIGFsbF9nbG9icyA9IGQuZ2V0VmFyRmxhZ3MoJ0NPTVBMRU1FTlRBUllfR0xPQicpCisgICAgZ2xvYnMgPSBbXQorICAgIGZlYXR1cmVzID0gc2V0KChkLmdldFZhcihmZWF0dXJldmFyLCBUcnVlKSBvciAnJykuc3BsaXQoKSkKKyAgICBmb3IgbmFtZSwgZ2xvYiBpbiBhbGxfZ2xvYnMuaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgIGdsb2JzLmFwcGVuZChnbG9iKQorICAgIHJldHVybiAnICcuam9pbihnbG9icykKKworU0RLSU1BR0VfRkVBVFVSRVMgPz89ICJkZXYtcGtncyBkYmctcGtncyIKK1NES0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWSA9ICcke0Bjb21wbGVtZW50YXJ5X2dsb2JzKCJTREtJTUFHRV9GRUFUVVJFUyIsIGQpfScKKworaW5oZXJpdCByb290ZnNfJHtJTUFHRV9QS0dUWVBFfQorCitTREtfRElSID0gIiR7V09SS0RJUn0vc2RrIgorU0RLX09VVFBVVCA9ICIke1NES19ESVJ9L2ltYWdlIgorU0RLX0RFUExPWSA9ICIke0RFUExPWV9ESVJ9L3NkayIKKworQl90YXNrLXBvcHVsYXRlLXNkayA9ICIke1NES19ESVJ9IgorCitTREtUQVJHRVRTWVNST09UID0gIiR7U0RLUEFUSH0vc3lzcm9vdHMvJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAibmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJHtNQUNISU5FfSIKK1RPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkgPz0gIiIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTSyA/PSAiIFwKKyAgICAke0BtdWx0aWxpYl9wa2dfZXh0ZW5kKGQsICdwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQnKX0gXAorICAgICR7QG11bHRpbGliX3BrZ19leHRlbmQoZCwgJ3BhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldC1kYmcnKX0gXAorICAgICIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSA/PSAiIgorVE9PTENIQUlOX09VVFBVVE5BTUUgPz0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi0ke1NES19WRVJTSU9OfSIKKworU0RLX1JERVBFTkRTID0gIiR7VE9PTENIQUlOX1RBUkdFVF9UQVNLfSAke1RPT0xDSEFJTl9IT1NUX1RBU0t9IgorU0RLX0RFUEVORFMgPSAidmlydHVhbC9mYWtlcm9vdC1uYXRpdmUgcGJ6aXAyLW5hdGl2ZSIKKworIyBXZSB3YW50IHRoZSBNVUxUSUFSQ0hfVEFSR0VUX1NZUyB0byBwb2ludCB0byB0aGUgVFVORV9QS0dBUkNILCBub3QgUEFDS0FHRV9BUkNIIGFzIGl0CisjIGNvdWxkIGJlIHNldCB0byB0aGUgTUFDSElORV9BUkNICitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitQSUQgPSAiJHtAb3MuZ2V0cGlkKCl9IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworU0RLX1BBQ0tBR0lOR19GVU5DID89ICJjcmVhdGVfc2hhciIKK1NES19QUkVfSU5TVEFMTF9DT01NQU5EID89ICIiCitTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkQgPz0gIiIKK1NES19SRUxPQ0FURV9BRlRFUl9JTlNUQUxMID89ICIxIgorCitTREtFWFRQQVRIID89ICJ+LyR7QGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX1fc2RrIgorU0RLX1RJVExFID89ICIke0BkLmdldFZhcignRElTVFJPX05BTUUnLCBUcnVlKSBvciBkLmdldFZhcignRElTVFJPJywgVHJ1ZSl9IFNESyIKKworU0RLX1RBUkdFVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhcmdldC5tYW5pZmVzdCIKK1NES19IT1NUX01BTklGRVNUID0gIiR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uaG9zdC5tYW5pZmVzdCIKK3B5dGhvbiB3cml0ZV90YXJnZXRfc2RrX21hbmlmZXN0ICgpIHsKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgc2RrbWFuaWZlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoIlNES19UQVJHRVRfTUFOSUZFU1QiLCBUcnVlKSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2RrbWFuaWZlc3RkaXIpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2RrbWFuaWZlc3RkaXIpCisgICAgd2l0aCBvcGVuKGQuZ2V0VmFyKCdTREtfVEFSR0VUX01BTklGRVNUJywgVHJ1ZSksICd3JykgYXMgb3V0cHV0OgorICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIFRydWUsICd2ZXInKSkKK30KKworcHl0aG9uIHdyaXRlX2hvc3Rfc2RrX21hbmlmZXN0ICgpIHsKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgc2RrbWFuaWZlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoIlNES19IT1NUX01BTklGRVNUIiwgVHJ1ZSkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNka21hbmlmZXN0ZGlyKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNka21hbmlmZXN0ZGlyKQorICAgIHdpdGggb3BlbihkLmdldFZhcignU0RLX0hPU1RfTUFOSUZFU1QnLCBUcnVlKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgIG91dHB1dC53cml0ZShzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgRmFsc2UsICd2ZXInKSkKK30KKworUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkRfYXBwZW5kID0gIiB3cml0ZV90YXJnZXRfc2RrX21hbmlmZXN0IDsgIgorUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EX2FwcGVuZCA9ICIgd3JpdGVfaG9zdF9zZGtfbWFuaWZlc3Q7ICIKKworIyBTb21lIGFyY2hzIG92ZXJyaWRlIHRoaXMsIHdlIG5lZWQgdGhlIG5hdGl2ZXNkayB2ZXJzaW9uCisjIHR1cm5zIG91dCB0aGlzIGlzIGhhcmQgdG8gZ2V0IGZyb20gdGhlIGRhdGFzdG9yZSBkdWUgdG8gVFJBTlNMQVRFRF9UQVJHRVRfQVJDSAorIyBtYW5pcHVsYXRpb24uCitTREtfT0xERVNUX0tFUk5FTCA9ICIyLjYuMzIiCisKK2Zha2Vyb290IHB5dGhvbiBkb19wb3B1bGF0ZV9zZGsoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHBvcHVsYXRlX3NkaworICAgIGZyb20gb2UubWFuaWZlc3QgaW1wb3J0IGNyZWF0ZV9tYW5pZmVzdCwgTWFuaWZlc3QKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0siLCBwbiwgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkiLCBwbiwgZCkKKworICAgIGxkID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbGQuc2V0VmFyKCJQS0dEQVRBX0RJUiIsICIke1NUQUdJTkdfRElSfS8ke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0ke1NES19WRU5ET1J9LSR7U0RLX09TfS9wa2dkYXRhIikKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgcG4sIGxkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBwbiwgbGQpCisgICAgZC5zZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0siLCBsZC5nZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0siLCBUcnVlKSkKKyAgICBkLnNldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIGxkLmdldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIFRydWUpKQorICAgIAorICAgICMgY3JlYXRlIHRhcmdldC9ob3N0IFNESyBtYW5pZmVzdHMKKyAgICBjcmVhdGVfbWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyPWQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3R5cGU9TWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfSE9TVCkKKyAgICBjcmVhdGVfbWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyPWQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3R5cGU9TWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorCisgICAgcG9wdWxhdGVfc2RrKGQpCisKKyAgICAjIFByb2Nlc3MgREVGQVVMVFRVTkUKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNyZWF0ZV9zZGtfZmlsZXMiLCBkKQorCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJ0YXJfc2RrIiwgZCkKKworICAgIHNka19wYWNrYWdpbmdfZnVuYyA9IGQuZ2V0VmFyKCJTREtfUEFDS0FHSU5HX0ZVTkMiLCBUcnVlKSBvciAiIgorICAgIGlmIHNka19wYWNrYWdpbmdfZnVuYy5zdHJpcCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZC5nZXRWYXIoIlNES19QQUNLQUdJTkdfRlVOQyIsIFRydWUpLCBkKQorfQorCitmYWtlcm9vdCBjcmVhdGVfc2RrX2ZpbGVzKCkgeworCWNwICR7Q09SRUJBU0V9L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8KKworCSMgUmVwbGFjZSB0aGUgIyNERUZBVUxUX0lOU1RBTExfRElSIyMgd2l0aCB0aGUgY29ycmVjdCBwYXR0ZXJuLgorCSMgRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICcrJyBhbmQgJy4nIGluIHRoZSBTREtQQVRICisJZXNjYXBlZF9zZGtwYXRoPSQoZWNobyAke1NES1BBVEh9IHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisJc2VkIC1pIC1lICJzOiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjOiRlc2NhcGVkX3Nka3BhdGg6IiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vcmVsb2NhdGVfc2RrLnB5Cit9CisKK1NES1RBUk9QVFMgPSAiLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdCIKKworZmFrZXJvb3QgdGFyX3NkaygpIHsKKwkjIFBhY2thZ2UgaXQgdXAKKwlta2RpciAtcCAke1NES19ERVBMT1l9CisJY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisJdGFyICR7U0RLVEFST1BUU30gLWNmIC0gLiB8IHBiemlwMiA+ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MgorfQorCitmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKwkjIGNvcHkgaW4gdGhlIHRlbXBsYXRlIHNoYXIgZXh0cmFjdG9yIHNjcmlwdAorCWNwICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwlybSAtZiAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQgJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZAorCisJaWYgWyAke1NES19SRUxPQ0FURV9BRlRFUl9JTlNUQUxMfSAtZXEgMSBdIDsgdGhlbgorCQljcCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQKKwlmaQorCWNhdCA8PCAiRU9GIiA+PiAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQKKyR7U0RLX1BSRV9JTlNUQUxMX0NPTU1BTkR9CitFT0YKKworCWNhdCA8PCAiRU9GIiA+PiAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kCiske1NES19QT1NUX0lOU1RBTExfQ09NTUFORH0KK0VPRgorCXNlZCAtaSAtZSAnL0BTREtfUFJFX0lOU1RBTExfQ09NTUFOREAvciAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQnIFwKKwkJLWUgJy9AU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQC9yICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQnIFwKKwkJJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBzdWJzdGl0dXRlIHZhcmlhYmxlcworCXNlZCAtaSAtZSAncyNAU0RLX0FSQ0hAIyR7U0RLX0FSQ0h9I2cnIFwKKwkJLWUgJ3MjQFNES1BBVEhAIyR7U0RLUEFUSH0jZycgXAorCQktZSAncyNAU0RLRVhUUEFUSEAjJHtTREtFWFRQQVRIfSNnJyBcCisJCS1lICdzI0BPTERFU1RfS0VSTkVMQCMke1NES19PTERFU1RfS0VSTkVMfSNnJyBcCisJCS1lICdzI0BSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCMke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9I2cnIFwKKwkJLWUgJ3MjQFNES19USVRMRUAjJHtTREtfVElUTEV9I2cnIFwKKwkJLWUgJ3MjQFNES19WRVJTSU9OQCMke1NES19WRVJTSU9OfSNnJyBcCisJCS1lICcvQFNES19QUkVfSU5TVEFMTF9DT01NQU5EQC9kJyBcCisJCS1lICcvQFNES19QT1NUX0lOU1RBTExfQ09NTUFOREAvZCcgXAorCQkke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwkjIGFkZCBleGVjdXRpb24gcGVybWlzc2lvbgorCWNobW9kICt4ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgYXBwZW5kIHRoZSBTREsgdGFyYmFsbAorCWNhdCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIgPj4gJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBkZWxldGUgdGhlIG9sZCB0YXJiYWxsLCB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUKKwlybSAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIKK30KKworcG9wdWxhdGVfc2RrX2xvZ19jaGVjaygpIHsKKwlmb3IgdGFyZ2V0IGluICQqCisJZG8KKwkJbGZfcGF0aD0iYGRpcm5hbWUgJHtCQl9MT0dGSUxFfWAvbG9nLmRvXyR0YXJnZXQuJHtQSUR9IgorCisJCWVjaG8gImxvZ19jaGVjazogVXNpbmcgJGxmX3BhdGggYXMgbG9nZmlsZSIKKworCQlpZiB0ZXN0IC1lICIkbGZfcGF0aCIKKwkJdGhlbgorCQkJJHtJTUFHRV9QS0dUWVBFfV9sb2dfY2hlY2sgJHRhcmdldCAkbGZfcGF0aAorCQllbHNlCisJCQllY2hvICJDYW5ub3QgZmluZCBsb2dmaWxlIFskbGZfcGF0aF0iCisJCWZpCisJCWVjaG8gIkxvZ2ZpbGUgaXMgY2xlYW4iCisJZG9uZQorfQorCitkb19wb3B1bGF0ZV9zZGtbZGlyc10gPSAiJHtUT1BESVJ9IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICIke0AnICcuam9pbihbeCArICc6ZG9fcG9wdWxhdGVfc3lzcm9vdCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19ERVBFTkRTJywgVHJ1ZSkuc3BsaXQoKV0pfSAgJHtAZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAnZGVwZW5kcycsIEZhbHNlKX0iCitkb19wb3B1bGF0ZV9zZGtbcmRlcGVuZHNdID0gIiR7QCcgJy5qb2luKFt4ICsgJzpkb19wb3B1bGF0ZV9zeXNyb290JyBmb3IgeCBpbiBkLmdldFZhcignU0RLX1JERVBFTkRTJywgVHJ1ZSkuc3BsaXQoKV0pfSIKK2RvX3BvcHVsYXRlX3Nka1tyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2Vfd3JpdGVfcnBtIGRvX3BhY2thZ2Vfd3JpdGVfaXBrIGRvX3BhY2thZ2Vfd3JpdGVfZGViIgorYWRkdGFzayBwb3B1bGF0ZV9zZGsKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjg4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCkBAIC0wLDAgKzEsMjc1IEBACisjIEV4dGVuc2libGUgU0RLCisKK2luaGVyaXQgcG9wdWxhdGVfc2RrX2Jhc2UKKworIyBOT1RFOiBub3JtYWxseSB5b3UgY2Fubm90IHVzZSB0YXNrIG92ZXJyaWRlcyBmb3IgdGhpcyBraW5kIG9mIHRoaW5nIC0gdGhpcworIyBvbmx5IHdvcmtzIGJlY2F1c2Ugb2YgZ2V0X3Nka19leHRfcmRlcGVuZHMoKQorCitUT09MQ0hBSU5fSE9TVF9UQVNLX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIgXAorICAgIG1ldGEtZW52aXJvbm1lbnQtZXh0c2RrLSR7TUFDSElORX0gXAorICAgICIKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIiCisKK1NES19SREVQRU5EU19hcHBlbmRfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiAke1NES19UQVJHRVRTfSIKKworU0RLX1JFTE9DQVRFX0FGVEVSX0lOU1RBTExfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIjAiCisKK1NES19MT0NBTF9DT05GX1dISVRFTElTVCA/PSAiIgorU0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUID89ICJDT05GX1ZFUlNJT04gQkJfTlVNQkVSX1RIUkVBRFMgUEFSQUxMRUxfTUFLRSBQUlNFUlZfSE9TVCIKK1NES19JTkhFUklUX0JMQUNLTElTVCA/PSAiYnVpbGRoaXN0b3J5IGljZWNjIgorU0RLX1VQREFURV9VUkwgPz0gIiIKKworU0RLX1RBUkdFVFMgPz0gIiR7UE59IgorT0VfSU5JVF9FTlZfU0NSSVBUID89ICJvZS1pbml0LWJ1aWxkLWVudiIKKworIyBUaGUgZmlsZXMgZnJvbSBDT1JFQkFTRSB0aGF0IHlvdSB3YW50IHByZXNlcnZlZCBpbiB0aGUgQ09SRUJBU0UgY29waWVkCisjIGludG8gdGhlIHNkay4gVGhpcyBhbGxvd3Mgc29tZW9uZSB0byBoYXZlIHRoZWlyIG93biBzZXR1cCBzY3JpcHRzIGluCisjIENPUkVCQVNFIGJlIHByZXNlcnZlZCBhcyB3ZWxsIGFzIHVudHJhY2tlZCBmaWxlcy4KK0NPUkVCQVNFX0ZJTEVTID89ICIgXAorICAgIG9lLWluaXQtYnVpbGQtZW52IFwKKyAgICBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgXAorICAgIHNjcmlwdHMgXAorICAgIExJQ0VOU0UgXAorICAgIC50ZW1wbGF0ZWNvbmYgXAorIgorCitTREtfRElSX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke1dPUktESVJ9L3Nkay1leHQiCitCX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke1NES19ESVJ9IgorVE9PTENIQUlOX09VVFBVVE5BTUVfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi1leHQtJHtTREtfVkVSU0lPTn0iCisKK1NES19USVRMRV90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtAZC5nZXRWYXIoJ0RJU1RST19OQU1FJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpfSBFeHRlbnNpYmxlIFNESyIKKworcHl0aG9uIGNvcHlfYnVpbGRzeXN0ZW0gKCkgeworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBvZS5jb3B5X2J1aWxkc3lzdGVtCisKKyAgICBvZV9pbml0X2Vudl9zY3JpcHQgPSBkLmdldFZhcignT0VfSU5JVF9FTlZfU0NSSVBUJywgVHJ1ZSkKKworICAgIGNvbmZfYmJwYXRoID0gJycKKyAgICBjb25mX2luaXRwYXRoID0gJycKKyAgICBjb3JlX21ldGFfc3ViZGlyID0gJycKKworICAgICMgQ29weSBpbiBhbGwgbWV0YWRhdGEgbGF5ZXJzICsgYml0YmFrZSAoYXMgcmVwb3NpdG9yaWVzKQorICAgIGJ1aWxkc3lzdGVtID0gb2UuY29weV9idWlsZHN5c3RlbS5CdWlsZFN5c3RlbShkKQorICAgIGJhc2VvdXRwYXRoID0gZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKSArICcvJyArIGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSkKKyAgICBsYXllcnNfY29waWVkID0gYnVpbGRzeXN0ZW0uY29weV9iaXRiYWtlX2FuZF9sYXllcnMoYmFzZW91dHBhdGggKyAnL2xheWVycycpCisKKyAgICBzZGtiYmxheWVycyA9IFtdCisgICAgY29yZWJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpKQorICAgIGZvciBsYXllciBpbiBsYXllcnNfY29waWVkOgorICAgICAgICBpZiBjb3JlYmFzZSA9PSBvcy5wYXRoLmJhc2VuYW1lKGxheWVyKToKKyAgICAgICAgICAgIGNvbmZfYmJwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBsYXllciwgJ2JpdGJha2UnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2RrYmJsYXllcnMuYXBwZW5kKGxheWVyKQorCisgICAgZm9yIHBhdGggaW4gb3MubGlzdGRpcihiYXNlb3V0cGF0aCArICcvbGF5ZXJzJyk6CisgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLmpvaW4oJ2xheWVycycsIHBhdGgsIG9lX2luaXRfZW52X3NjcmlwdCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCByZWxwYXRoKSk6CisgICAgICAgICAgICBjb25mX2luaXRwYXRoID0gcmVscGF0aAorCisgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLmpvaW4oJ2xheWVycycsIHBhdGgsICdzY3JpcHRzJywgJ2RldnRvb2wnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsIHJlbHBhdGgpKToKKyAgICAgICAgICAgIHNjcmlwdHJlbHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVscGF0aCkKKworICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCAnbWV0YScpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgcmVscGF0aCwgJ2xpYicsICdvZScpKToKKyAgICAgICAgICAgIGNvcmVfbWV0YV9zdWJkaXIgPSByZWxwYXRoCisKKyAgICBkLnNldFZhcignb2VfaW5pdF9idWlsZF9lbnZfcGF0aCcsIGNvbmZfaW5pdHBhdGgpCisgICAgZC5zZXRWYXIoJ3NjcmlwdHJlbHBhdGgnLCBzY3JpcHRyZWxwYXRoKQorCisgICAgIyBXcml0ZSBvdXQgY29uZmlnIGZpbGUgZm9yIGRldnRvb2wKKyAgICBpbXBvcnQgQ29uZmlnUGFyc2VyCisgICAgY29uZmlnID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorICAgIGNvbmZpZy5hZGRfc2VjdGlvbignR2VuZXJhbCcpCisgICAgY29uZmlnLnNldCgnR2VuZXJhbCcsICdiaXRiYWtlX3N1YmRpcicsIGNvbmZfYmJwYXRoKQorICAgIGNvbmZpZy5zZXQoJ0dlbmVyYWwnLCAnaW5pdF9wYXRoJywgY29uZl9pbml0cGF0aCkKKyAgICBjb25maWcuc2V0KCdHZW5lcmFsJywgJ2NvcmVfbWV0YV9zdWJkaXInLCBjb3JlX21ldGFfc3ViZGlyKQorICAgIGNvbmZpZy5hZGRfc2VjdGlvbignU0RLJykKKyAgICBjb25maWcuc2V0KCdTREsnLCAnc2RrX3RhcmdldHMnLCBkLmdldFZhcignU0RLX1RBUkdFVFMnLCBUcnVlKSkKKyAgICB1cGRhdGV1cmwgPSBkLmdldFZhcignU0RLX1VQREFURV9VUkwnLCBUcnVlKQorICAgIGlmIHVwZGF0ZXVybDoKKyAgICAgICAgY29uZmlnLnNldCgnU0RLJywgJ3VwZGF0ZXNlcnZlcicsIHVwZGF0ZXVybCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCAnY29uZicpKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsICdjb25mJywgJ2RldnRvb2wuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgIGNvbmZpZy53cml0ZShmKQorCisgICAgIyBDcmVhdGUgYSBsYXllciBmb3IgbmV3IHJlY2lwZXMgLyBhcHBlbmRzCisgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgYmIucHJvY2Vzcy5ydW4oWydkZXZ0b29sJywgJy0tYmJwYXRoJywgYmJwYXRoLCAnLS1iYXNlcGF0aCcsIGJhc2VvdXRwYXRoLCAnY3JlYXRlLXdvcmtzcGFjZScsICctLWNyZWF0ZS1vbmx5Jywgb3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCAnd29ya3NwYWNlJyldKQorCisgICAgIyBDcmVhdGUgYmJsYXllcnMuY29uZgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihiYXNlb3V0cGF0aCArICcvY29uZicpCisgICAgd2l0aCBvcGVuKGJhc2VvdXRwYXRoICsgJy9jb25mL2JibGF5ZXJzLmNvbmYnLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJyMgV0FSTklORzogdGhpcyBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBpblxuJykKKyAgICAgICAgZi53cml0ZSgnIyBtb3N0IGNhc2VzIHNob3VsZCBub3QgYmUgZWRpdGVkLiBJZiB5b3UgbmVlZCBtb3JlIGZsZXhpYmlsaXR5IHRoYW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgdGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzLCBpdCBpcyBzdHJvbmdseSBzdWdnZXN0ZWQgdGhhdCB5b3Ugc2V0XG4nKQorICAgICAgICBmLndyaXRlKCcjIHVwIGEgcHJvcGVyIGluc3RhbmNlIG9mIHRoZSBmdWxsIGJ1aWxkIHN5c3RlbSBhbmQgdXNlIHRoYXQgaW5zdGVhZC5cblxuJykKKworICAgICAgICBmLndyaXRlKCdMQ09ORl9WRVJTSU9OID0gIiVzIlxuXG4nICUgZC5nZXRWYXIoJ0xDT05GX1ZFUlNJT04nLCBGYWxzZSkpCisgICAgICAgIGYud3JpdGUoJ0JCUEFUSCA9ICIkJyArICd7VE9QRElSfSJcbicpCisgICAgICAgIGYud3JpdGUoJ1NES0JBU0VNRVRBUEFUSCA9ICIkJyArICd7VE9QRElSfSJcbicpCisgICAgICAgIGYud3JpdGUoJ0JCTEFZRVJTIDo9ICIgXFxcbicpCisgICAgICAgIGZvciBsYXllcnJlbHBhdGggaW4gc2RrYmJsYXllcnM6CisgICAgICAgICAgICBmLndyaXRlKCcgICAgJCcgKyAne1NES0JBU0VNRVRBUEFUSH0vbGF5ZXJzLyVzIFxcXG4nICUgbGF5ZXJyZWxwYXRoKQorICAgICAgICBmLndyaXRlKCcgICAgJCcgKyAne1NES0JBU0VNRVRBUEFUSH0vd29ya3NwYWNlIFxcXG4nKQorICAgICAgICBmLndyaXRlKCcgICAgIlxuJykKKworICAgICMgQ3JlYXRlIGxvY2FsLmNvbmYKKyAgICBsb2NhbF9jb25mX3doaXRlbGlzdCA9IChkLmdldFZhcignU0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBsb2NhbF9jb25mX2JsYWNrbGlzdCA9IChkLmdldFZhcignU0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBkZWYgaGFuZGxlX3Zhcih2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgIGlmIHZhcm5hbWUgaW4gbG9jYWxfY29uZl9ibGFja2xpc3Qgb3IgKG9yaWd2YWx1ZS5zdHJpcCgpLnN0YXJ0c3dpdGgoJy8nKSBhbmQgbm90IHZhcm5hbWUgaW4gbG9jYWxfY29uZl93aGl0ZWxpc3QpOgorICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCcjIFJlbW92ZWQgb3JpZ2luYWwgc2V0dGluZyBvZiAlc1xuJyAlIHZhcm5hbWUpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgb3AsIDAsIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvcmlndmFsdWUsIG9wLCAwLCBUcnVlCisgICAgdmFybGlzdCA9IFsnW14jPSsgXSonXQorICAgIGJ1aWxkZGlyID0gZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpCisgICAgd2l0aCBvcGVuKGJ1aWxkZGlyICsgJy9jb25mL2xvY2FsLmNvbmYnLCAncicpIGFzIGY6CisgICAgICAgIG9sZGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKG9sZGxpbmVzLCB2YXJsaXN0LCBoYW5kbGVfdmFyKQorCisgICAgd2l0aCBvcGVuKGJhc2VvdXRwYXRoICsgJy9jb25mL2xvY2FsLmNvbmYnLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJyMgV0FSTklORzogdGhpcyBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBpblxuJykKKyAgICAgICAgZi53cml0ZSgnIyBtb3N0IGNhc2VzIHNob3VsZCBub3QgYmUgZWRpdGVkLiBJZiB5b3UgbmVlZCBtb3JlIGZsZXhpYmlsaXR5IHRoYW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgdGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzLCBpdCBpcyBzdHJvbmdseSBzdWdnZXN0ZWQgdGhhdCB5b3Ugc2V0XG4nKQorICAgICAgICBmLndyaXRlKCcjIHVwIGEgcHJvcGVyIGluc3RhbmNlIG9mIHRoZSBmdWxsIGJ1aWxkIHN5c3RlbSBhbmQgdXNlIHRoYXQgaW5zdGVhZC5cblxuJykKKyAgICAgICAgZm9yIGxpbmUgaW4gbmV3bGluZXM6CisgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisKKyAgICAgICAgZi53cml0ZSgnSU5IRVJJVCArPSAiJXMiXG5cbicgJSAndW5pbmF0aXZlJykKKyAgICAgICAgZi53cml0ZSgnQ09ORl9WRVJTSU9OID0gIiVzIlxuXG4nICUgZC5nZXRWYXIoJ0NPTkZfVkVSU0lPTicsIEZhbHNlKSkKKworICAgICAgICAjIFNvbWUgY2xhc3NlcyBhcmUgbm90IHN1aXRhYmxlIGZvciBTREssIHJlbW92ZSB0aGVtIGZyb20gSU5IRVJJVAorICAgICAgICBmLndyaXRlKCdJTkhFUklUX3JlbW92ZSA9ICIlcyJcbicgJSBkLmdldFZhcignU0RLX0lOSEVSSVRfQkxBQ0tMSVNUJykpCisKKyAgICAgICAgIyBCeXBhc3MgdGhlIGRlZmF1bHQgY29ubmVjdGl2aXR5IGNoZWNrIGlmIGFueQorICAgICAgICBmLndyaXRlKCdDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyA9ICIiXG5cbicpCisKKyAgICAgICAgIyBBbm90aGVyIGhhY2ssIGJ1dCB3ZSB3YW50IHRoZSBuYXRpdmUgcGFydCBvZiBzc3RhdGUgdG8gYmUga2VwdCB0aGUgc2FtZQorICAgICAgICAjIHJlZ2FyZGxlc3Mgb2YgdGhlIGhvc3QgZGlzdHJvCisgICAgICAgIGZpeGVkbHNic3RyaW5nID0gJ1NESy1GaXhlZCcKKyAgICAgICAgZi53cml0ZSgnTkFUSVZFTFNCU1RSSU5HX2ZvcmNldmFyaWFibGUgPSAiJXMiXG5cbicgJSBmaXhlZGxzYnN0cmluZykKKworICAgICAgICAjIEVuc3VyZSBsb2NrZWQgc3N0YXRlIGNhY2hlIG9iamVjdHMgYXJlIHJlLXVzZWQgd2l0aG91dCBlcnJvcgorICAgICAgICBmLndyaXRlKCdTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCA9ICJ3YXJuIlxuXG4nKQorCisgICAgICAgIGYud3JpdGUoJ3JlcXVpcmUgY29uZi9sb2NrZWQtc2lncy5pbmNcbicpCisgICAgICAgIGYud3JpdGUoJ3JlcXVpcmUgY29uZi93b3JrLWNvbmZpZy5pbmNcbicpCisKKyAgICBzaWdmaWxlID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSArICcvbG9ja2VkLXNpZ3MuaW5jJworICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0uZ2VuZXJhdGVfbG9ja2VkX3NpZ3Moc2lnZmlsZSwgZCkKKworICAgICMgRmlsdGVyIHRoZSBsb2NrZWQgc2lnbmF0dXJlcyBmaWxlIHRvIGp1c3QgdGhlIHNzdGF0ZSB0YXNrcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorICAgIGFsbG93ZWRfdGFza3MgPSBbJ2RvX3BvcHVsYXRlX2xpYycsICdkb19wb3B1bGF0ZV9zeXNyb290JywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2VfcWEnLCAnZG9fZGVwbG95J10KKyAgICBleGNsdWRlZF90YXJnZXRzID0gZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkKKyAgICBsb2NrZWRzaWdzX3BydW5lZCA9IGJhc2VvdXRwYXRoICsgJy9jb25mL2xvY2tlZC1zaWdzLmluYycKKyAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLnBydW5lX2xvY2tlZHNpZ3MoYWxsb3dlZF90YXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRfdGFyZ2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2Vkc2lnc19wcnVuZWQpCisKKyAgICBzc3RhdGVfb3V0ID0gYmFzZW91dHBhdGggKyAnL3NzdGF0ZS1jYWNoZScKKyAgICBiYi51dGlscy5yZW1vdmUoc3N0YXRlX291dCwgVHJ1ZSkKKyAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLmNyZWF0ZV9sb2NrZWRfc3N0YXRlX2NhY2hlKGxvY2tlZHNpZ3NfcHJ1bmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzdGF0ZV9vdXQsIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZGxzYnN0cmluZykKKworICAgICMgQ3JlYXRlIGEgZHVtbXkgY29uZmlnIGZpbGUgZm9yIGFkZGl0aW9uYWwgc2V0dGluZ3MKKyAgICB3aXRoIG9wZW4oYmFzZW91dHBhdGggKyAnL2NvbmYvd29yay1jb25maWcuaW5jJywgJ3cnKSBhcyBmOgorICAgICAgICBwYXNzCit9CisKK2RlZiBleHRzZGtfZ2V0X2J1aWxkdG9vbHNfZmlsZW5hbWUoZCk6CisgICAgIyBUaGlzIGlzIHNvbWV3aGF0IG9mIGEgaGFjaworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BOJywgJ2J1aWxkdG9vbHMtdGFyYmFsbCcpCisgICAgcmV0dXJuIGxvY2FsZGF0YS5leHBhbmQoJyR7U0RLX05BTUV9LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtKi5zaCcpCisKK2luc3RhbGxfdG9vbHMoKSB7CisJaW5zdGFsbCAtZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9CisJbG5yICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8ke3NjcmlwdHJlbHBhdGh9L2RldnRvb2wgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS9kZXZ0b29sCisJbG5yICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8ke3NjcmlwdHJlbHBhdGh9L3JlY2lwZXRvb2wgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS9yZWNpcGV0b29sCisJdG91Y2ggJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9Ly5kZXZ0b29sYmFzZQorCisJIyBmaW5kIGxhdGVzdCBidWlsZHRvb2xzLXRhcmJhbGwgYW5kIGluc3RhbGwgaXQKKwlidWlsZHRvb2xzX3BhdGg9YGxzIC10MSAke1NES19ERVBMT1l9LyR7QGV4dHNka19nZXRfYnVpbGR0b29sc19maWxlbmFtZShkKX0gfCBoZWFkIC1uMWAKKwlpbnN0YWxsICRidWlsZHRvb2xzX3BhdGggJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisKKwlpbnN0YWxsICR7U0RLX0RFUExPWX0vJHtCVUlMRF9BUkNIfS1uYXRpdmVzZGstbGliYy50YXIuYnoyICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorfQorCisjIFNpbmNlIGJpdGJha2Ugd29uJ3QgcnVuIGFzIHJvb3QgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHRyeSBhbmQgaW5zdGFsbAorIyB0aGUgZXh0ZW5zaWJsZSBzZGsgYXMgcm9vdC4KK3Nka19leHRfcHJlaW5zdCgpIHsKKwlpZiBbICJgaWQgLXVgIiA9ICIwIiBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBUaGUgZXh0ZW5zaWJsZSBzZGsgY2Fubm90IGJlIGluc3RhbGxlZCBhcyByb290LiIKKwkJZXhpdCAxCisJZmkKKwlTREtfRVhURU5TSUJMRT0iMSIKK30KK1NES19QUkVfSU5TVEFMTF9DT01NQU5EX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke3Nka19leHRfcHJlaW5zdH0iCisKKyMgRklYTUUgdGhpcyBwcmVwYXJhdGlvbiBzaG91bGQgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBTREsgY29uc3RydWN0aW9uCitzZGtfZXh0X3Bvc3RpbnN0KCkgeworCXByaW50ZiAiXG5FeHRyYWN0aW5nIGJ1aWxkdG9vbHMuLi5cbiIKKwljZCAkdGFyZ2V0X3Nka19kaXIKKwlwcmludGYgImJ1aWxkdG9vbHNcbnkiIHwgLi8qYnVpbGR0b29scy1uYXRpdmVzZGstc3RhbmRhbG9uZSogPiAvZGV2L251bGwKKworCSMgTWFrZSBzdXJlIHdoZW4gdGhlIHVzZXIgc2V0cyB1cCB0aGUgZW52aXJvbm1lbnQsIHRoZXkgYWxzbyBnZXQKKwkjIHRoZSBidWlsZHRvb2xzLXRhcmJhbGwgdG9vbHMgaW4gdGhlaXIgcGF0aC4KKwllY2hvICIuICR0YXJnZXRfc2RrX2Rpci9idWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwKiIgPj4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwKgorCisJIyBBbGxvdyBiaXRiYWtlIGVudmlyb25tZW50IHNldHVwIHRvIGJlIHJhbiBhcyBwYXJ0IG9mIHRoaXMgc2RrLgorCWVjaG8gImV4cG9ydCBPRV9TS0lQX1NES19DSEVDSz0xIiA+PiAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAqCisKKwkjIEEgYml0IG9mIGFub3RoZXIgaGFjaywgYnV0IHdlIG5lZWQgdGhpcyBpbiB0aGUgcGF0aCBvbmx5IGZvciBkZXZ0b29sCisJIyBzbyBwdXQgaXQgYXQgdGhlIGVuZCBvZiAkUEFUSC4KKwllY2hvICJleHBvcnQgUEFUSD1cJFBBVEg6JHRhcmdldF9zZGtfZGlyL3N5c3Jvb3RzLyR7U0RLX1NZU30vJHtiaW5kaXJfbmF0aXZlc2RrfSIgPj4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwKgorCisJIyBGb3Igbm93IHRoaXMgaXMgd2hlcmUgdW5pbmF0aXZlLmJiY2xhc3MgZXhwZWN0cyB0aGUgdGFyYmFsbAorCW12ICotbmF0aXZlc2RrLWxpYmMudGFyLiogJHRhcmdldF9zZGtfZGlyL2BkaXJuYW1lICR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH1gCisKKwlpZiBbICIkcHJlcGFyZV9idWlsZHN5c3RlbSIgIT0gIm5vIiBdOyB0aGVuCisJICAgIHByaW50ZiAiUHJlcGFyaW5nIGJ1aWxkIHN5c3RlbS4uLlxuIgorCSAgICAjIGRhc2ggd2hpY2ggaXMgL2Jpbi9zaCBvbiBVYnVudHUgd2lsbCBub3QgcHJlc2VydmUgdGhlCisJICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIGZpcnN0IHJhbiwgbm9yIHdpbGwgaXQgc2V0ICQxIHdoZW4KKwkgICAgIyBzb3VyY2luZyBhIHNjcmlwdC4gVGhhdCBpcyB3aHkgdGhpcyBoYXMgdG8gbG9vayBzbyB1Z2x5LgorCSAgICBzaCAtYyAiLiBidWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwKiA+IHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nICYmIGNkICR0YXJnZXRfc2RrX2Rpci9gZGlybmFtZSAke29lX2luaXRfYnVpbGRfZW52X3BhdGh9YCAmJiBzZXQgJHRhcmdldF9zZGtfZGlyICYmIC4gJHRhcmdldF9zZGtfZGlyLyR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH0gJHRhcmdldF9zZGtfZGlyID4+IHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nICYmIGJpdGJha2UgJHtTREtfVEFSR0VUU30gPj4gcHJlcGFyaW5nX2J1aWxkX3N5c3RlbS5sb2ciIHx8IHsgZWNobyAiU0RLIHByZXBhcmF0aW9uIGZhaWxlZDogc2VlIGBwd2RgL3ByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nIiA7IGV4aXQgMSA7IH0KKwlmaQorCWVjaG8gZG9uZQorfQorCitTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7c2RrX2V4dF9wb3N0aW5zdH0iCisKK1NES19QT1NUUFJPQ0VTU19DT01NQU5EX3ByZXBlbmRfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gImNvcHlfYnVpbGRzeXN0ZW07IGluc3RhbGxfdG9vbHM7ICIKKworZmFrZXJvb3QgcHl0aG9uIGRvX3BvcHVsYXRlX3Nka19leHQoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wb3B1bGF0ZV9zZGsiLCBkKQorfQorCitkZWYgZ2V0X3Nka19leHRfcmRlcGVuZHMoZCk6CisgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICBsb2NhbGRhdGEuYXBwZW5kVmFyKCdPVkVSUklERVMnLCAnOnRhc2stcG9wdWxhdGUtc2RrLWV4dCcpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgcmV0dXJuIGxvY2FsZGF0YS5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAncmRlcGVuZHMnLCBUcnVlKQorCitkb19wb3B1bGF0ZV9zZGtfZXh0W2RpcnNdID0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ2RpcnMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtkZXBlbmRzXSArPSAiJHtAZC5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAnZGVwZW5kcycsIEZhbHNlKX0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W3JkZXBlbmRzXSA9ICIke0BnZXRfc2RrX2V4dF9yZGVwZW5kcyhkKX0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W3JlY3JkZXB0YXNrXSArPSAiJHtAZC5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAncmVjcmRlcHRhc2snLCBGYWxzZSl9IgorCisKK2RvX3BvcHVsYXRlX3Nka19leHRbZGVwZW5kc10gKz0gImJ1aWxkdG9vbHMtdGFyYmFsbDpkb19wb3B1bGF0ZV9zZGsgdW5pbmF0aXZlLXRhcmJhbGw6ZG9fcG9wdWxhdGVfc2RrIgorCitkb19wb3B1bGF0ZV9zZGtfZXh0W3JkZXBlbmRzXSArPSAiJHtAJyAnLmpvaW4oW3ggKyAnOmRvX2J1aWxkJyBmb3IgeCBpbiBkLmdldFZhcignU0RLX1RBUkdFVFMnLCBUcnVlKS5zcGxpdCgpXSl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZWNyZGVwdGFza10gKz0gImRvX3BvcHVsYXRlX2xpYyBkb19wYWNrYWdlX3FhIGRvX3BvcHVsYXRlX3N5c3Jvb3QgZG9fZGVwbG95IgorCisjIE1ha2Ugc3VyZSBjb2RlcyBjaGFuZ2UgaW4gY29weV9idWlsZHN5c3RlbSBjYW4gcmVzdWx0IGluIHJlYnVpbHQKK2RvX3BvcHVsYXRlX3Nka19leHRbdmFyZGVwc10gKz0gImNvcHlfYnVpbGRzeXN0ZW0iCisKK2FkZHRhc2sgcG9wdWxhdGVfc2RrX2V4dApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3ByZXhwb3J0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcHJleHBvcnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFjYjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3ByZXhwb3J0LmJiY2xhc3MKQEAgLTAsMCArMSw1OCBAQAorUFJTRVJWX0RVTVBPUFRfVkVSU0lPTiA9ICIke1BSQVVUT0lOWH0iCitQUlNFUlZfRFVNUE9QVF9QS0dBUkNIICA9ICIiCitQUlNFUlZfRFVNUE9QVF9DSEVDS1NVTSA9ICIiCitQUlNFUlZfRFVNUE9QVF9DT0wgPSAiMCIKKworUFJTRVJWX0RVTVBESVIgPz89ICIke0xPR19ESVJ9L2RiIgorUFJTRVJWX0RVTVBGSUxFID8/PSAiJHtQUlNFUlZfRFVNUERJUn0vcHJzZXJ2LmluYyIKKworcHl0aG9uIHByZXhwb3J0X2hhbmRsZXIgKCkgeworICAgIGltcG9ydCBiYi5ldmVudAorICAgIGlmIG5vdCBlLmRhdGE6CisgICAgICAgIHJldHVybgorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5SZWNpcGVQYXJzZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgICNnZXQgYWxsIFBSIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgUFJBVVRPSU5YCisgICAgICAgIHZlciA9IGUuZGF0YS5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgnJScsJy0nKQorICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZS5kYXRhKQorICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoInByZXhwb3J0X2hhbmRsZXI6IGV4cG9ydCBmYWlsZWQhIikKKyAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgaWYgbm90IGRhdGFpbmZvOgorICAgICAgICAgICAgYmIud2FybigicHJleHBvcnRfaGFuZGxlcjogTm8gQVVUT1BSIHZhbHVlcyBmb3VuZCBmb3IgJXMiICUgdmVyKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfZXhwb3J0X3RvZmlsZShlLmRhdGEsIE5vbmUsIGRhdGFpbmZvLCBGYWxzZSkKKyAgICAgICAgaWYgJ0FVVE9JTkMnIGluIHZlcjoKKyAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgc3JjcHYgPSAgYmIuZmV0Y2gyLmdldF9zcmNyZXYoZS5kYXRhKQorICAgICAgICAgICAgYmFzZV92ZXIgPSAiQVVUT0lOQy0lcyIgJSB2ZXJbOnZlci5maW5kKHNyY3B2KV0KKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04nLCBiYXNlX3ZlcikKKyAgICAgICAgICAgIHJldHZhbCA9IG9lLnByc2VydmljZS5wcnNlcnZfZHVtcF9kYihlLmRhdGEpCisgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgICAgICAobWV0YWluZm8sIGRhdGFpbmZvKSA9IHJldHZhbAorICAgICAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9leHBvcnRfdG9maWxlKGUuZGF0YSwgTm9uZSwgZGF0YWluZm8sIEZhbHNlKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICBpbXBvcnQgYmIudXRpbHMKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2NoZWNrX2F2YWlsKGUuZGF0YSkKKyAgICAgICAgI3JlbW92ZSBkdW1wZmlsZQorICAgICAgICBiYi51dGlscy5yZW1vdmUoZS5kYXRhLmdldFZhcignUFJTRVJWX0RVTVBGSUxFJywgVHJ1ZSkpCisgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjZHVtcCBtZXRhIGluZm8gb2YgdGFibGVzCisgICAgICAgIGQgPSBlLmRhdGEuY3JlYXRlQ29weSgpCisgICAgICAgIGQuc2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DT0wnLCAiMSIpCisgICAgICAgIHJldHZhbCA9IG9lLnByc2VydmljZS5wcnNlcnZfZHVtcF9kYihkKQorICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgYmIuZXJyb3IoInByZXhwb3J0X2hhbmRsZXI6IGV4cG9ydCBmYWlsZWQhIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAobWV0YWluZm8sIGRhdGFpbmZvKSA9IHJldHZhbAorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2V4cG9ydF90b2ZpbGUoZCwgbWV0YWluZm8sIE5vbmUsIFRydWUpCisKK30KKworYWRkaGFuZGxlciBwcmV4cG9ydF9oYW5kbGVyCitwcmV4cG9ydF9oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUGFyc2VkIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wcmltcG9ydC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3ByaW1wb3J0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkNDVmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wcmltcG9ydC5iYmNsYXNzCkBAIC0wLDAgKzEsMjEgQEAKK3B5dGhvbiBwcmltcG9ydF9oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgICNpbXBvcnQgYWxsIGV4cG9ydGVkIEFVVE9QUiB2YWx1ZXMKKyAgICAgICAgaW1wb3J0ZWQgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2ltcG9ydF9kYihlLmRhdGEpCisgICAgICAgIGlmIGltcG9ydGVkIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbCgiaW1wb3J0IGZhaWxlZCEiKQorCisgICAgICAgIGZvciAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKSBpbiBpbXBvcnRlZDoKKyAgICAgICAgICAgIGJiLm5vdGUoImltcG9ydGVkICglcywlcywlcywlZCkiICUgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkpCisgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9jaGVja19hdmFpbChlLmRhdGEpCit9CisKK2FkZGhhbmRsZXIgcHJpbXBvcnRfaGFuZGxlcgorcHJpbXBvcnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlBhcnNlQ29tcGxldGVkIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzk1OTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Byc2Vydi5iYmNsYXNzCkBAIC0wLDAgKzEsMiBAQAorCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wdGVzdC1nbm9tZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3B0ZXN0LWdub21lLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5NDlhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wdGVzdC1nbm9tZS5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAoraW5oZXJpdCBwdGVzdAorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICctLWVuYWJsZS1pbnN0YWxsZWQtdGVzdHMnLCAnLS1kaXNhYmxlLWluc3RhbGxlZC10ZXN0cycsIGQpfSIKKworRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pbnN0YWxsZWQtdGVzdHMvIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZ25vbWUtZGVza3RvcC10ZXN0aW5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3B0ZXN0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcHRlc3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY0NzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B0ZXN0LmJiY2xhc3MKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWV8ke1BOfS1wdGVzdCA/PSAiJHtTVU1NQVJZfSAtIFBhY2thZ2UgdGVzdCBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LXB0ZXN0ID89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgdGVzdCBkaXJlY3RvcnkgJHtQVEVTVF9QQVRIfSBmb3IgcGFja2FnZSB0ZXN0IHB1cnBvc2VzLiIKKworUFRFU1RfUEFUSCA/PSAiJHtsaWJkaXJ9LyR7UE59L3B0ZXN0IgorRklMRVNfJHtQTn0tcHRlc3QgPSAiJHtQVEVTVF9QQVRIfSIKK1NFQ1RJT05fJHtQTn0tcHRlc3QgPSAiZGV2ZWwiCitBTExPV19FTVBUWV8ke1BOfS1wdGVzdCA9ICIxIgorUFRFU1RfRU5BQkxFRCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJzEnLCAnMCcsIGQpfSIKK1BURVNUX0VOQUJMRURfY2xhc3MtbmF0aXZlID0gIiIKK1BURVNUX0VOQUJMRURfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BURVNUX0VOQUJMRURfY2xhc3MtY3Jvc3MtY2FuYWRpYW4gPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3RfY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1wdGVzdCArPSAicHRlc3QtcnVubmVyIgorCitQQUNLQUdFUyA9KyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICcke1BOfS1wdGVzdCcsICcnLCBkKX0iCisKK2RvX2NvbmZpZ3VyZV9wdGVzdCgpIHsKKyAgICA6Cit9CisKK2RvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlKCkgeworICAgIGRvX2NvbmZpZ3VyZV9wdGVzdAorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIDoKK30KKworZG9fY29tcGlsZV9wdGVzdF9iYXNlKCkgeworICAgIGRvX2NvbXBpbGVfcHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGxfcHRlc3RfYmFzZSgpIHsKKyAgICBpZiBbIC1mICR7V09SS0RJUn0vcnVuLXB0ZXN0IF07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtRCAke1dPUktESVJ9L3J1bi1wdGVzdCAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKKyAgICAgICAgaWYgZ3JlcCAtcSBpbnN0YWxsLXB0ZXN0OiBNYWtlZmlsZTsgdGhlbgorICAgICAgICAgICAgb2VfcnVubWFrZSBERVNURElSPSR7RH0ke1BURVNUX1BBVEh9IGluc3RhbGwtcHRlc3QKKyAgICAgICAgZmkKKyAgICAgICAgZG9faW5zdGFsbF9wdGVzdAorICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICBmaQorfQorCitkb19jb25maWd1cmVfcHRlc3RfYmFzZVtkaXJzXSA9ICIke0J9IgorZG9fY29tcGlsZV9wdGVzdF9iYXNlW2RpcnNdID0gIiR7Qn0iCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2VbZGlyc10gPSAiJHtCfSIKK2RvX2luc3RhbGxfcHRlc3RfYmFzZVtjbGVhbmRpcnNdID0gIiR7RH0ke1BURVNUX1BBVEh9IgorCithZGR0YXNrIGNvbmZpZ3VyZV9wdGVzdF9iYXNlIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQorYWRkdGFzayBjb21waWxlX3B0ZXN0X2Jhc2UgICBhZnRlciBkb19jb21waWxlICAgYmVmb3JlIGRvX2luc3RhbGwKK2FkZHRhc2sgaW5zdGFsbF9wdGVzdF9iYXNlICAgYWZ0ZXIgZG9faW5zdGFsbCAgIGJlZm9yZSBkb19wYWNrYWdlIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGxfcHRlc3RfYmFzZScsICdmYWtlcm9vdCcsIDEpCisKKyAgICAjIFJlbW92ZSBhbGwgJypwdGVzdF9iYXNlJyB0YXNrcyB3aGVuIHB0ZXN0IGlzIG5vdCBlbmFibGVkCisgICAgaWYgbm90KGQuZ2V0VmFyKCdQVEVTVF9FTkFCTEVEJywgVHJ1ZSkgPT0gIjEiKToKKyAgICAgICAgZm9yIGkgaW4gWydkb19jb25maWd1cmVfcHRlc3RfYmFzZScsICdkb19jb21waWxlX3B0ZXN0X2Jhc2UnLCAnZG9faW5zdGFsbF9wdGVzdF9iYXNlJ106CisgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKGksIGQpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmZhNGIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcwpAQCAtMCwwICsxLDUgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA/PSAiMi43IgorUFlUSE9OX0FCSSA/PSAiIgorUFlUSE9OX0RJUiA9ICJweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iCitQWVRIT05fUE4gPSAicHl0aG9uJHtAJycgaWYgJyR7UFlUSE9OX0JBU0VWRVJTSU9OfScuc3RhcnRzd2l0aCgnMicpIGVsc2UgJzMnfSIKK1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSID0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjgzMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjQiCisKK2luaGVyaXQgcHl0aG9uLWRpcgorCitQWVRIT049IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSIKK0VYVFJBTkFUSVZFUEFUSCArPSAiJHtQWVRIT05fUE59LW5hdGl2ZSIKK0RFUEVORFMgKz0gIiAke1BZVEhPTl9QTn0tbmF0aXZlICIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzAyOWRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B5dGhvbm5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAorCitpbmhlcml0IHB5dGhvbi1kaXIKKworUFlUSE9OPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0iCisjIFBZVEhPTl9FWEVDVVRBQkxFIGlzIHVzZWQgYnkgY21ha2UKK1BZVEhPTl9FWEVDVVRBQkxFPSIke1BZVEhPTn0iCitFWFRSQU5BVElWRVBBVEggKz0gIiR7UFlUSE9OX1BOfS1uYXRpdmUiCitERVBFTkRTICs9ICIgJHtQWVRIT05fUE59LW5hdGl2ZSAiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3FlbXUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3FlbXUuYmJjbGFzcwpAQCAtMCwwICsxLDUxIEBACisjCisjIFRoaXMgY2xhc3MgY29udGFpbnMgZnVuY3Rpb25zIGZvciByZWNpcGVzIHRoYXQgbmVlZCBRRU1VIG9yIHRlc3QgZm9yIGl0cworIyBleGlzdGVuY2UuCisjCisKK2RlZiBxZW11X3RhcmdldF9iaW5hcnkoZGF0YSk6CisgICAgdGFyZ2V0X2FyY2ggPSBkYXRhLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHRhcmdldF9hcmNoIGluICgiaTQ4NiIsICJpNTg2IiwgImk2ODYiKToKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSAiaTM4NiIKKyAgICBlbGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjIjoKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSAicHBjIgorICAgIGVsaWYgdGFyZ2V0X2FyY2ggPT0gInBvd2VycGM2NCI6CisgICAgICAgIHRhcmdldF9hcmNoID0gInBwYzY0IgorCisgICAgcmV0dXJuICJxZW11LSIgKyB0YXJnZXRfYXJjaAorIworIyBOZXh0IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgdGhhdCBpcyBuZWVkZWQgdG8KKyMgdG8gcnVuIGEgY2VydGFpbiBiaW5hcnkgdGhyb3VnaCBxZW11LiBGb3IgZXhhbXBsZSwgaW4gb3JkZXIgdG8gbWFrZSBhIGNlcnRhaW4KKyMgcG9zdGluc3RhbGwgc2NyaXB0bGV0IHJ1biBhdCBkb19yb290ZnMgdGltZSBhbmQgcnVubmluZyB0aGUgcG9zdGluc3RhbGwgaXMKKyMgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCwgd2UgY2FuIHJ1biBpdCB0aHJvdWdoIHFlbXUuIEZvciBleGFtcGxlLCBpbiB0aGUKKyMgcG9zdGluc3RhbGwgc2NyaXB0bGV0LCB3ZSBjb3VsZCB1c2UgdGhlIGZvbGxvd2luZzoKKyMKKyMgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcvdXNyL2Jpbi90ZXN0X2FwcCcpfSBbdGVzdF9hcHAgYXJndW1lbnRzXQorIworZGVmIHFlbXVfcnVuX2JpbmFyeShkYXRhLCByb290ZnNfcGF0aCwgYmluYXJ5KToKKyAgICBxZW11X2JpbmFyeSA9IHFlbXVfdGFyZ2V0X2JpbmFyeShkYXRhKQorICAgIGlmIHFlbXVfYmluYXJ5ID09ICJxZW11LWFsbGFyY2giOgorICAgICAgICBxZW11X2JpbmFyeSA9ICJxZW11d3JhcHBlciIKKworICAgIGxpYmRpciA9IHJvb3Rmc19wYXRoICsgZGF0YS5nZXRWYXIoImxpYmRpciIsIEZhbHNlKQorICAgIGJhc2VfbGliZGlyID0gcm9vdGZzX3BhdGggKyBkYXRhLmdldFZhcigiYmFzZV9saWJkaXIiLCBGYWxzZSkKKyAgICBxZW11X29wdGlvbnMgPSBkYXRhLmdldFZhcigiUUVNVV9PUFRJT05TIiwgVHJ1ZSkKKworICAgIHJldHVybiAiUFNFVURPX1VOTE9BRD0xICIgKyBxZW11X2JpbmFyeSArICIgIiArIHFlbXVfb3B0aW9ucyArICIgLUwgIiArIHJvb3Rmc19wYXRoXAorICAgICAgICAgICAgKyAiIC1FIExEX0xJQlJBUllfUEFUSD0iICsgbGliZGlyICsgIjoiICsgYmFzZV9saWJkaXIgKyAiICJcCisgICAgICAgICAgICArIHJvb3Rmc19wYXRoICsgYmluYXJ5CisKKyMgUUVNVV9FWFRSQU9QVElPTlMgaXMgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IHVzZWQsIHRoZSBleHRlbnNpb25zIGFyZSAKKyMgUEFDS0FHRV9BUkNILCBub3Qgb3ZlcnJpZGVzIGFuZCBoZW5jZSBoYXZlIHRvIGRvIHRoaXMgZGFuY2UuIFNpbXBseSBiZWluZyBhcmNoIAorIyBzcGVjaWZpYyBpc24ndCBnb29kIGVub3VnaC4KK1FFTVVfT1BUSU9OUyA9ICItciAke09MREVTVF9LRVJORUx9ICR7QGQuZ2V0VmFyKCJRRU1VX0VYVFJBT1BUSU9OU18lcyIgJSBkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSksIFRydWUpIG9yICIifSIKK1FFTVVfRVhUUkFPUFRJT05TX2l3bW14dCAgICA9ICIgLWNwdSBweGEyNzAtYzUiCitRRU1VX0VYVFJBT1BUSU9OU19hcm12NiAgICAgPSAiIC1jcHUgYXJtMTEzNiIKK1FFTVVfRVhUUkFPUFRJT05TX2FybXY3YSAgICA9ICIgLWNwdSBjb3J0ZXgtYTgiCitRRU1VX0VYVFJBT1BUSU9OU19lNTAwdjIgICAgPSAiIC1jcHUgZTUwMHYyIgorUUVNVV9FWFRSQU9QVElPTlNfZTUwMG1jICAgID0gIiAtY3B1IGU1MDBtYyIKK1FFTVVfRVhUUkFPUFRJT05TX2U1NTAwICAgICA9ICIgLWNwdSBlNTUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX2U1NTAwLTY0YiA9ICIgLWNwdSBlNTUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX2U2NTAwICAgICA9ICIgLWNwdSBlNjUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX2U2NTAwLTY0YiA9ICIgLWNwdSBlNjUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX3BwYzc0MDAgICA9ICIgLWNwdSA3NDAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzNhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcW1ha2UyLmJiY2xhc3MKQEAgLTAsMCArMSwyNyBAQAorIworIyBRTWFrZSB2YXJpYWJsZXMgZm9yIFF0NAorIworaW5oZXJpdCBxbWFrZV9iYXNlCisKK0RFUEVORFNfcHJlcGVuZCA9ICJxdDQtdG9vbHMtbmF0aXZlICIKKworZXhwb3J0IFFNQUtFU1BFQyA9ICIke1NUQUdJTkdfREFUQURJUn0vcXQ0L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKK2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUcgPSAiJHtTVEFHSU5HX0RBVEFESVJ9L3F0NC9ta3NwZWNzL3Fjb25maWcucHJpIgorZXhwb3J0IE9FX1FNQUtFX1VJQyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdWljNCIKK2V4cG9ydCBPRV9RTUFLRV9VSUMzID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS91aWMzNCIKK2V4cG9ydCBPRV9RTUFLRV9NT0MgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L21vYzQiCitleHBvcnQgT0VfUU1BS0VfUkNDID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9yY2M0IgorZXhwb3J0IE9FX1FNQUtFX1FEQlVTQ1BQMlhNTCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcWRidXNjcHAyeG1sNCIKK2V4cG9ydCBPRV9RTUFLRV9RREJVU1hNTDJDUFAgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FkYnVzeG1sMmNwcDQiCitleHBvcnQgT0VfUU1BS0VfUU1BS0UgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiIKK2V4cG9ydCBPRV9RTUFLRV9MSU5LID0gIiR7Q1hYfSIKK2V4cG9ydCBPRV9RTUFLRV9DWFhGTEFHUyA9ICIke0NYWEZMQUdTfSIKK2V4cG9ydCBPRV9RTUFLRV9JTkNESVJfUVQgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vcXQ0IgorZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVCA9ICIke1NUQUdJTkdfTElCRElSfSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1FUID0gInF0IgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfWDExID0gIi1sWGV4dCAtbFgxMSAtbG0iCitleHBvcnQgT0VfUU1BS0VfTElCU19YMTFTTSA9ICItbFNNIC1sSUNFIgorZXhwb3J0IE9FX1FNQUtFX0xDT05WRVJUID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9sY29udmVydDQiCitleHBvcnQgT0VfUU1BS0VfTFJFTEVBU0UgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2xyZWxlYXNlNCIKK2V4cG9ydCBPRV9RTUFLRV9MVVBEQVRFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9sdXBkYXRlNCIKK2V4cG9ydCBPRV9RTUFLRV9YTUxQQVRURVJOUyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0veG1scGF0dGVybnM0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3FtYWtlX2Jhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9xbWFrZV9iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ODcxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9xbWFrZV9iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwxMTkgQEAKK1FNQUtFX01LU1BFQ19QQVRIID89ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3FtYWtlIgorCitPRV9RTUFLRV9QTEFURk9STSA9ICIke1RBUkdFVF9PU30tb2UtZysrIgorUU1BS0VTUEVDIDo9ICIke1FNQUtFX01LU1BFQ19QQVRIfS8ke09FX1FNQUtFX1BMQVRGT1JNfSIKKworIyBXZSBvdmVycmlkZSB0aGlzIGNvbXBsZXRlbHkgdG8gZWxpbWluYXRlIHRoZSAtZSBub3JtYWxseSBwYXNzZWQgaW4KK0VYVFJBX09FTUFLRSA9ICIiCisKK2V4cG9ydCBPRV9RTUFLRV9DQz0iJHtDQ30iCitleHBvcnQgT0VfUU1BS0VfQ0ZMQUdTPSIke0NGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfQ1hYPSIke0NYWH0iCitleHBvcnQgT0VfUU1BS0VfTERGTEFHUz0iJHtMREZMQUdTfSIKK2V4cG9ydCBPRV9RTUFLRV9BUj0iJHtBUn0iCitleHBvcnQgT0VfUU1BS0VfU1RSSVA9ImVjaG8iCitleHBvcnQgT0VfUU1BS0VfUlBBVEg9Ii1XbCwtcnBhdGgtbGluaywiCisKKyMgZGVmYXVsdCB0byBxdGUyIHZpYSBiYi5jb25mLCBpbmhlcml0IHF0M3gxMSB0byBjb25maWd1cmUgZm9yIHF0M3gxMQorCitvZV9xbWFrZV9ta3NwZWNzICgpIHsKKyAgICBta2RpciAtcCBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19CisgICAgZm9yIGYgaW4gJHtRTUFLRV9NS1NQRUNfUEFUSH0vJHtPRV9RTUFLRV9QTEFURk9STX0vKjsgZG8KKyAgICAgICAgaWYgWyAtTCAkZiBdOyB0aGVuCisgICAgICAgICAgICBsbms9YHJlYWRsaW5rICRmYAorICAgICAgICAgICAgaWYgWyAtZiBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19LyRsbmsgXTsgdGhlbgorICAgICAgICAgICAgICAgIGxuIC1zICRsbmsgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS9gYmFzZW5hbWUgJGZgCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3AgJGYgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS8KKyAgICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNwICRmIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vCisgICAgICAgIGZpCisgICAgZG9uZQorfQorCitkb19nZW5lcmF0ZV9xdF9jb25maWdfZmlsZSgpIHsKKwlleHBvcnQgUVRfQ09ORl9QQVRIPSR7V09SS0RJUn0vcXQuY29uZgorCWNhdCA+ICR7V09SS0RJUn0vcXQuY29uZiA8PEVPRgorW1BhdGhzXQorUHJlZml4ID0KK0JpbmFyaWVzID0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9CitIZWFkZXJzID0gJHtTVEFHSU5HX0lOQ0RJUn0vJHtRVF9ESVJfTkFNRX0KK1BsdWdpbnMgPSAke1NUQUdJTkdfTElCRElSfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zLworTWtzcGVjcyA9ICR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLworRU9GCit9CisKK2FkZHRhc2sgZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGUgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQorCitxbWFrZV9iYXNlX2RvX2NvbmZpZ3VyZSgpIHsKKwljYXNlICR7UU1BS0VTUEVDfSBpbgorCSpsaW51eC1vZS1nKyt8KmxpbnV4LXVjbGliYy1vZS1nKyt8KmxpbnV4LWdudWVhYmktb2UtZysrfCpsaW51eC11Y2xpYmNlYWJpLW9lLWcrK3wqbGludXgtZ251c3BlLW9lLWcrK3wqbGludXgtdWNsaWJjc3BlLW9lLWcrK3wqbGludXgtZ251bjMyLW9lLWcrKykKKwkJOzsKKwkqLW9lLWcrKykKKwkJZGllIFVuc3VwcG9ydGVkIHRhcmdldCAke1RBUkdFVF9PU30gZm9yIG9lLWcrKyBxbWFrZSBzcGVjCisJCTs7CisJKikKKwkJYmJub3RlIFNlYXJjaGluZyBmb3IgcW1ha2Ugc3BlYyBmaWxlCisJCXBhdGhzPSIke1FNQUtFX01LU1BFQ19QQVRIfS9xd3MvJHtUQVJHRVRfT1N9LSR7VEFSR0VUX0FSQ0h9LWcrKyIKKwkJcGF0aHM9IiR7UU1BS0VfTUtTUEVDX1BBVEh9LyR7VEFSR0VUX09TfS1nKysgJHBhdGhzIgorCisJCWlmIChlY2hvICIke1RBUkdFVF9BUkNIfSJ8Z3JlcCAtcSAnaS44NicpOyB0aGVuCisJCQlwYXRocz0iJHtRTUFLRV9NS1NQRUNfUEFUSH0vcXdzLyR7VEFSR0VUX09TfS14ODYtZysrICRwYXRocyIKKwkJZmkKKwkJZm9yIGkgaW4gJHBhdGhzOyBkbworCQkJaWYgdGVzdCAtZSAkaTsgdGhlbgorCQkJCWV4cG9ydCBRTUFLRVNQRUM9JGkKKwkJCQlicmVhaworCQkJZmkKKwkJZG9uZQorCQk7OworCWVzYWMKKworCWJibm90ZSAidXNpbmcgcW1ha2Ugc3BlYyBpbiAke1FNQUtFU1BFQ30sIHVzaW5nIHByb2ZpbGVzICcke1FNQUtFX1BST0ZJTEVTfSciCisKKwlpZiBbIC16ICIke1FNQUtFX1BST0ZJTEVTfSIgXTsgdGhlbiAKKwkJUFJPRklMRVM9ImBscyAqLnByb2AiCisJZWxzZQorCQlQUk9GSUxFUz0iJHtRTUFLRV9QUk9GSUxFU30iCisJZmkKKworCWlmIFsgLXogIiRQUk9GSUxFUyIgXTsgdGhlbgorCQlkaWUgIlFNQUtFX1BST0ZJTEVTIG5vdCBzZXQgYW5kIG5vIHByb2ZpbGVzIGZvdW5kIGluICRQV0QiCisgICAgICAgIGZpCisKKwlpZiBbICEgLXogIiR7RVhUUkFfUU1BS0VWQVJTX1BPU1R9IiBdOyB0aGVuCisJCUFGVEVSPSItYWZ0ZXIiCisJCVFNQUtFX1ZBUlNVQlNUX1BPU1Q9IiR7RVhUUkFfUU1BS0VWQVJTX1BPU1R9IgorCQliYm5vdGUgInFtYWtlIHBvc3R2YXIgc3Vic3RpdHV0aW9uOiAke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIKKwlmaQorCisJaWYgWyAhIC16ICIke0VYVFJBX1FNQUtFVkFSU19QUkV9IiBdOyB0aGVuCisJCVFNQUtFX1ZBUlNVQlNUX1BSRT0iJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIKKwkJYmJub3RlICJxbWFrZSBwcmV2YXIgc3Vic3RpdHV0aW9uOiAke0VYVFJBX1FNQUtFVkFSU19QUkV9IgorCWZpCisKKwkjIEhhY2sgLnBybyBmaWxlcyB0byB1c2UgT0UgdXRpbGl0aWVzCisJTENPTlZFUlRfTkFNRT0kKGJhc2VuYW1lICR7T0VfUU1BS0VfTENPTlZFUlR9KQorCUxSRUxFQVNFX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX0xSRUxFQVNFfSkKKwlMVVBEQVRFX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX0xVUERBVEV9KQorCVhNTFBBVFRFUk5TX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX1hNTFBBVFRFUk5TfSkKKwlmaW5kIC1uYW1lICcqLnBybycgXAorCSAgICAgLWV4ZWMgc2VkIC1pIC1lICJzfFwoPVxzKi4qXCkvJExDT05WRVJUX05BTUV8XDEvbGNvbnZlcnR8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvJExSRUxFQVNFX05BTUV8XDEvbHJlbGVhc2V8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvJExVUERBVEVfTkFNRXxcMS9sdXBkYXRlfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRYTUxQQVRURVJOU19OQU1FfFwxL3htbHBhdHRlcm5zfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpL2xjb252ZXJ0fFwxLyRMQ09OVkVSVF9OQU1FfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpL2xyZWxlYXNlfFwxLyRMUkVMRUFTRV9OQU1FfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpL2x1cGRhdGV8XDEvJExVUERBVEVfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS94bWxwYXR0ZXJuc3xcMS8kWE1MUEFUVEVSTlNfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgJ3t9JyAnOycKKworI2Jibm90ZSAiQ2FsbGluZyAnJHtPRV9RTUFLRV9RTUFLRX0gLW1ha2VmaWxlIC1zcGVjICR7UU1BS0VTUEVDfSAtbyBNYWtlZmlsZSAkUU1BS0VfVkFSU1VCU1RfUFJFICRBRlRFUiAkUFJPRklMRVMgJFFNQUtFX1ZBUlNVQlNUX1BPU1QnIgorCXVuc2V0IFFNQUtFU1BFQyB8fCB0cnVlCisJJHtPRV9RTUFLRV9RTUFLRX0gLW1ha2VmaWxlIC1zcGVjICR7UU1BS0VTUEVDfSAtbyBNYWtlZmlsZSAkUU1BS0VfVkFSU1VCU1RfUFJFICRBRlRFUiAkUFJPRklMRVMgJFFNQUtFX1ZBUlNVQlNUX1BPU1QgfHwgZGllICJFcnJvciBjYWxsaW5nICR7T0VfUU1BS0VfUU1BS0V9IG9uICRQUk9GSUxFUyIKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUKKworYWRkdGFzayBjb25maWd1cmUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcXQ0ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3F0NGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2IxMDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3F0NGUuYmJjbGFzcwpAQCAtMCwwICsxLDIxIEBACitRVDRFREVQRU5EUyA/PSAicXQ0LWVtYmVkZGVkICIKK0RFUEVORFNfcHJlcGVuZCA9ICIke1FUNEVERVBFTkRTfSIKKworaW5oZXJpdCBxbWFrZTIKKworUVRfQkFTRV9OQU1FID0gInF0NC1lbWJlZGRlZCIKK1FUX0RJUl9OQU1FID0gInF0b3BpYSIKK1FUX0xJQklORklYID0gIkUiCisjIG92ZXJyaWRlIHZhcmlhYmxlcyBzZXQgYnkgcW1ha2UtYmFzZSB0byBjb21waWxlIFF0L0VtYmVkZGVkIGFwcHMKKyMKK2V4cG9ydCBRTUFLRVNQRUMgPSAiJHtTVEFHSU5HX0RBVEFESVJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKK2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUcgPSAiJHtTVEFHSU5HX0RBVEFESVJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvcWNvbmZpZy5wcmkiCitleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUID0gIiR7U1RBR0lOR19JTkNESVJ9LyR7UVRfRElSX05BTUV9IgorZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVCA9ICIke1NUQUdJTkdfTElCRElSfSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1FUID0gInF0IgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfWDExID0gIiIKK2V4cG9ydCBPRV9RTUFLRV9FWFRSQV9NT0RVTEVTID0gIm5ldHdvcmsiCitFWFRSQV9RTUFLRVZBUlNfUFJFICs9ICIgUVRfTElCSU5GSVg9JHtRVF9MSUJJTkZJWH0gIgorCisjIFF0NCB1c2VzIGF0b21pYyBpbnN0cnVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aHVtYiBtb2RlCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA2ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3F0NHgxMS5iYmNsYXNzCkBAIC0wLDAgKzEsMTQgQEAKK1FUNERFUEVORFMgPz0gInF0NC14MTEgIgorREVQRU5EU19wcmVwZW5kID0gIiR7UVQ0REVQRU5EU30iCisKKyMgZGVwZW5kcyBvbiBxdDQteDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgKz0gIngxMSIKKworaW5oZXJpdCBxbWFrZTIgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1FUX0JBU0VfTkFNRSA9ICJxdDQiCitRVF9ESVJfTkFNRSA9ICJxdDQiCitRVF9MSUJJTkZJWCA9ICIiCisKKyMgUXQ0IHVzZXMgYXRvbWljIGluc3RydWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRodW1iIG1vZGUKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwNGUzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MKQEAgLTAsMCArMSwxNjcgQEAKK2RlZiBfX25vdGUobXNnLCBkKToKKyAgICBiYi5ub3RlKCIlczogcmVjaXBlX3Nhbml0eTogJXMiICUgKGQuZ2V0VmFyKCJQIiwgVHJ1ZSksIG1zZykpCisKK19fcmVjaXBlX3Nhbml0eV9iYWRydW50aW1ldmFycyA9ICJSREVQRU5EUyBSUFJPVklERVMgUlJFQ09NTUVORFMgUkNPTkZMSUNUUyIKK2RlZiBiYWRfcnVudGltZV92YXJzKGNmZ2RhdGEsIGQpOgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm5hdGl2ZSIsIGQpIG9yIFwKKyAgICAgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgZm9yIHZhciBpbiBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X2JhZHJ1bnRpbWV2YXJzIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCAwKQorICAgICAgICBpZiB2YWwgYW5kIHZhbCAhPSBjZmdkYXRhLmdldCh2YXIpOgorICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgJXNfJHtQTn0iICUgKHZhciwgdmFyKSwgZCkKKworX19yZWNpcGVfc2FuaXR5X3JlcXZhcnMgPSAiREVTQ1JJUFRJT04iCitfX3JlY2lwZV9zYW5pdHlfcmVxZGlmZnZhcnMgPSAiIgorZGVmIHJlcV92YXJzKGNmZ2RhdGEsIGQpOgorICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZXF2YXJzIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKHZhciwgMCk6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBzZXQiICUgdmFyLCBkKQorCisgICAgZm9yIHZhciBpbiBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlcWRpZmZ2YXJzIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCAwKQorICAgICAgICBjZmd2YWwgPSBjZmdkYXRhLmdldCh2YXIpCisKKyAgICAgICAgaWYgbm90IHZhbDoKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlIHNldCIgJSB2YXIsIGQpCisgICAgICAgIGVsaWYgdmFsID09IGNmZ3ZhbDoKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlIGRlZmluZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gZGVmYXVsdCAoJXMpIiAlICh2YXIsIGNmZ3ZhbCksIGQpCisKK2RlZiB2YXJfcmVuYW1lc19vdmVyd3JpdGUoY2ZnZGF0YSwgZCk6CisgICAgcmVuYW1lcyA9IGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVuYW1lcyIsIDApCisgICAgaWYgcmVuYW1lczoKKyAgICAgICAgZm9yIChrZXksIG5ld2tleSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSBpbiByZW5hbWVzOgorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWUgYW5kIG9sZHZhbHVlICE9IGNmZ2RhdGEuZ2V0KG5ld2tleSk6CisgICAgICAgICAgICAgICAgX19ub3RlKCJyZW5hbWUgb2YgdmFyaWFibGUgJyVzJyB0byAnJXMnIG92ZXJ3cm90ZSBleGlzdGluZyB2YWx1ZSAnJXMnIHdpdGggJyVzJy4iICUgKGtleSwgbmV3a2V5LCBvbGR2YWx1ZSwgbmV3dmFsdWUpLCBkKQorCitkZWYgaW5jb3JyZWN0X25vbmVtcHR5X1BBQ0tBR0VTKGNmZ2RhdGEsIGQpOgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm5hdGl2ZSIsIGQpIG9yIFwKKyAgICAgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIGNhbl91c2VfYXV0b3Rvb2xzX2Jhc2UoY2ZnZGF0YSwgZCk6CisgICAgY2ZnID0gZC5nZXRWYXIoImRvX2NvbmZpZ3VyZSIsIFRydWUpCisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImF1dG90b29scyIsIGQpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGZvciBpIGluIFsiYXV0b3JlY29uZiJdICsgWyIlc19kb19jb25maWd1cmUiICUgY2xzIGZvciBjbHMgaW4gWyJnbm9tZWJhc2UiLCAiZ25vbWUiLCAiZSIsICJhdXRvdG9vbHMiLCAiZWZsIiwgImdwZXBob25lIiwgIm9wZW5tb2tvIiwgIm9wZW5tb2tvMiIsICJ4ZmNlIiwgInhsaWJzIl1dOgorICAgICAgICBpZiBjZmcuZmluZChpKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZm9yIGNsc2ZpbGUgaW4gZC5nZXRWYXIoIl9faW5oZXJpdF9jYWNoZSIsIDApOgorICAgICAgICAoYmFzZSwgXykgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoY2xzZmlsZSkpCisgICAgICAgIGlmIGNmZy5maW5kKCIlc19kb19jb25maWd1cmUiICUgYmFzZSkgIT0gLTE6CisgICAgICAgICAgICBfX25vdGUoImF1dG90b29sc19iYXNlIHVzYWdlIG5lZWRzIHZlcmlmaWNhdGlvbiwgc3BvdHRlZCAlc19kb19jb25maWd1cmUiICUgYmFzZSwgZCkKKworICAgIHJldHVybiBUcnVlCisKK2RlZiBjYW5fZGVsZXRlX0ZJTEVTUEFUSChjZmdkYXRhLCBkKToKKyAgICBleHBlY3RlZCA9IGNmZ2RhdGEuZ2V0KCJGSUxFU1BBVEgiKQorICAgIGV4cGVjdGVkcGF0aHMgPSBkLmV4cGFuZChleHBlY3RlZCkKKyAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoIkZJTEVTUEFUSCIsIDApCisgICAgZmlsZXNwYXRoID0gZC5nZXRWYXIoIkZJTEVTUEFUSCIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBmaWxlc3BhdGggPSBbb3MucGF0aC5ub3JtcGF0aChmKSBmb3IgZiBpbiBmaWxlc3BhdGggaWYgb3MucGF0aC5leGlzdHMoZildCisgICAgZm9yIGZwIGluIGZpbGVzcGF0aDoKKyAgICAgICAgaWYgbm90IGZwIGluIGV4cGVjdGVkcGF0aHM6CisgICAgICAgICAgICAjIF9fbm90ZSgiUGF0aCAlcyBpbiBGSUxFU1BBVEggbm90IGluIHRoZSBleHBlY3RlZCBwYXRocyAlcyIgJQorICAgICAgICAgICAgIyAoZnAsIGV4cGVjdGVkcGF0aHMpLCBkKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIGV4cGVjdGVkICE9IHVuZXhwYW5kZWQKKworZGVmIGNhbl9kZWxldGVfRklMRVNESVIoY2ZnZGF0YSwgZCk6CisgICAgZXhwZWN0ZWQgPSBjZmdkYXRhLmdldCgiRklMRVNESVIiKQorICAgICNleHBlY3RlZCA9ICIke0BiYi51dGlscy53aGljaChkLmdldFZhcignRklMRVNQQVRIJywgVHJ1ZSksICcuJyl9IgorICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcigiRklMRVNESVIiLCAwKQorICAgIGlmIHVuZXhwYW5kZWQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBleHBhbmRlZCA9IG9zLnBhdGgubm9ybXBhdGgoZC5nZXRWYXIoIkZJTEVTRElSIiwgVHJ1ZSkpCisgICAgZmlsZXNwYXRoID0gZC5nZXRWYXIoIkZJTEVTUEFUSCIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBmaWxlc3BhdGggPSBbb3MucGF0aC5ub3JtcGF0aChmKSBmb3IgZiBpbiBmaWxlc3BhdGggaWYgb3MucGF0aC5leGlzdHMoZildCisKKyAgICByZXR1cm4gdW5leHBhbmRlZCAhPSBleHBlY3RlZCBhbmQgXAorICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhleHBhbmRlZCkgYW5kIFwKKyAgICAgICAgICAgKGV4cGFuZGVkIGluIGZpbGVzcGF0aCBvcgorICAgICAgICAgICAgZXhwYW5kZWQgPT0gZC5leHBhbmQoZXhwZWN0ZWQpKQorCitkZWYgY2FuX2RlbGV0ZV9vdGhlcnMocCwgY2ZnZGF0YSwgZCk6CisgICAgZm9yIGsgaW4gWyJTIiwgIlBWIiwgIlBOIiwgIkRFU0NSSVBUSU9OIiwgIkRFUEVORFMiLAorICAgICAgICAgICAgICAiU0VDVElPTiIsICJQQUNLQUdFUyIsICJFWFRSQV9PRUNPTkYiLCAiRVhUUkFfT0VNQUtFIl06CisgICAgI2ZvciBrIGluIGNmZ2RhdGE6CisgICAgICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcihrLCAwKQorICAgICAgICBjZmd1bmV4cGFuZGVkID0gY2ZnZGF0YS5nZXQoaykKKyAgICAgICAgaWYgbm90IGNmZ3VuZXhwYW5kZWQ6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGFuZGVkID0gZC5nZXRWYXIoaywgVHJ1ZSkKKyAgICAgICAgICAgIGNmZ2V4cGFuZGVkID0gZC5leHBhbmQoY2ZndW5leHBhbmRlZCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLlBhcmFtZXRlckVycm9yOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiB1bmV4cGFuZGVkICE9IGNmZ3VuZXhwYW5kZWQgYW5kIFwKKyAgICAgICAgICAgY2ZnZXhwYW5kZWQgPT0gZXhwYW5kZWQ6CisgICAgICAgICAgIF9fbm90ZSgiY2FuZGlkYXRlIGZvciByZW1vdmFsIG9mICVzIiAlIGssIGQpCisgICAgICAgICAgIGJiLmRlYnVnKDEsICIlczogcmVjaXBlX3Nhbml0eTogICBjZmcncyAnJXMnIGFuZCBkJ3MgJyVzJyBib3RoIGV4cGFuZCB0byAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAocCwgY2ZndW5leHBhbmRlZCwgdW5leHBhbmRlZCwgZXhwYW5kZWQpKQorCitweXRob24gZG9fcmVjaXBlX3Nhbml0eSAoKSB7CisgICAgcCA9IGQuZ2V0VmFyKCJQIiwgVHJ1ZSkKKyAgICBwID0gIiVzICVzICVzIiAlIChkLmdldFZhcigiUE4iLCBUcnVlKSwgZC5nZXRWYXIoIlBWIiwgVHJ1ZSksIGQuZ2V0VmFyKCJQUiIsIFRydWUpKQorCisgICAgc2FuaXR5Y2hlY2tzID0gWworICAgICAgICAoY2FuX2RlbGV0ZV9GSUxFU0RJUiwgImNhbmRpZGF0ZSBmb3IgcmVtb3ZhbCBvZiBGSUxFU0RJUiIpLAorICAgICAgICAoY2FuX2RlbGV0ZV9GSUxFU1BBVEgsICJjYW5kaWRhdGUgZm9yIHJlbW92YWwgb2YgRklMRVNQQVRIIiksCisgICAgICAgICMoY2FuX3VzZV9hdXRvdG9vbHNfYmFzZSwgImNhbmRpZGF0ZSBmb3IgdXNlIG9mIGF1dG90b29sc19iYXNlIiksCisgICAgICAgIChpbmNvcnJlY3Rfbm9uZW1wdHlfUEFDS0FHRVMsICJuYXRpdmUgb3IgY3Jvc3MgcmVjaXBlIHdpdGggbm9uLWVtcHR5IFBBQ0tBR0VTIiksCisgICAgXQorICAgIGNmZ2RhdGEgPSBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X2NmZ2RhdGEiLCAwKQorCisgICAgZm9yIChmdW5jLCBtc2cpIGluIHNhbml0eWNoZWNrczoKKyAgICAgICAgaWYgZnVuYyhjZmdkYXRhLCBkKToKKyAgICAgICAgICAgIF9fbm90ZShtc2csIGQpCisKKyAgICBjYW5fZGVsZXRlX290aGVycyhwLCBjZmdkYXRhLCBkKQorICAgIHZhcl9yZW5hbWVzX292ZXJ3cml0ZShjZmdkYXRhLCBkKQorICAgIHJlcV92YXJzKGNmZ2RhdGEsIGQpCisgICAgYmFkX3J1bnRpbWVfdmFycyhjZmdkYXRhLCBkKQorfQorZG9fcmVjaXBlX3Nhbml0eVtub3N0YW1wXSA9ICIxIgorYWRkdGFzayByZWNpcGVfc2FuaXR5CisKK2RvX3JlY2lwZV9zYW5pdHlfYWxsW25vc3RhbXBdID0gIjEiCitkb19yZWNpcGVfc2FuaXR5X2FsbFtyZWNyZGVwdGFza10gPSAiZG9fcmVjaXBlX3Nhbml0eV9hbGwgZG9fcmVjaXBlX3Nhbml0eSIKK2RvX3JlY2lwZV9zYW5pdHlfYWxsICgpIHsKKyAgICA6Cit9CithZGR0YXNrIHJlY2lwZV9zYW5pdHlfYWxsIGFmdGVyIGRvX3JlY2lwZV9zYW5pdHkKKworcHl0aG9uIHJlY2lwZV9zYW5pdHlfZWggKCkgeworICAgIGQgPSBlLmRhdGEKKworICAgIGNmZ2RhdGEgPSB7fQorICAgIGZvciBrIGluIGQua2V5cygpOgorICAgICNmb3IgayBpbiBbIlMiLCAiUFIiLCAiUFYiLCAiUE4iLCAiREVTQ1JJUFRJT04iLCAiTElDRU5TRSIsICJERVBFTkRTIiwKKyAgICAjICAgICAgICAgICJTRUNUSU9OIl06CisgICAgICAgIGNmZ2RhdGFba10gPSBkLmdldFZhcihrLCAwKQorCisgICAgZC5zZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9jZmdkYXRhIiwgY2ZnZGF0YSkKKyAgICAjZC5zZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9jZmdkYXRhIiwgZCkKKworICAgICMgU2ljaywgdmVyeSBzaWNrLi4KKyAgICBmcm9tIGJiLmRhdGFfc21hcnQgaW1wb3J0IERhdGFTbWFydAorICAgIG9sZCA9IERhdGFTbWFydC5yZW5hbWVWYXIKKyAgICBkZWYgbXlyZW5hbWUoc2VsZiwga2V5LCBuZXdrZXkpOgorICAgICAgICBvbGR2YWx1ZSA9IHNlbGYuZ2V0VmFyKG5ld2tleSwgMCkKKyAgICAgICAgb2xkKHNlbGYsIGtleSwgbmV3a2V5KQorICAgICAgICBuZXd2YWx1ZSA9IHNlbGYuZ2V0VmFyKG5ld2tleSwgMCkKKyAgICAgICAgaWYgb2xkdmFsdWU6CisgICAgICAgICAgICByZW5hbWVzID0gc2VsZi5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZW5hbWVzIiwgMCkgb3Igc2V0KCkKKyAgICAgICAgICAgIHJlbmFtZXMuYWRkKChrZXksIG5ld2tleSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVuYW1lcyIsIHJlbmFtZXMpCisgICAgRGF0YVNtYXJ0LnJlbmFtZVZhciA9IG15cmVuYW1lCit9CithZGRoYW5kbGVyIHJlY2lwZV9zYW5pdHlfZWgKK3JlY2lwZV9zYW5pdHlfZWhbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcmVsb2NhdGFibGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yZWxvY2F0YWJsZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTk5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcmVsb2NhdGFibGUuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKK2luaGVyaXQgY2hycGF0aAorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInJlbG9jYXRhYmxlX2JpbmFyaWVzX3ByZXByb2Nlc3MiCisKK3B5dGhvbiByZWxvY2F0YWJsZV9iaW5hcmllc19wcmVwcm9jZXNzKCkgeworICAgIHJwYXRoX3JlcGxhY2UoZC5leHBhbmQoJyR7U1lTUk9PVF9ERVNURElSfScpLCBkKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MGMyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcmVwb3J0LWVycm9yLmJiY2xhc3MKQEAgLTAsMCArMSw5MiBAQAorIworIyBDb2xsZWN0cyBkZWJ1ZyBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBjcmVhdGUgZXJyb3IgcmVwb3J0IGZpbGVzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbmRyZWVhIEJyYW5kdXNhIFByb2NhIDxhbmRyZWVhLmIucHJvY2FAaW50ZWwuY29tPgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSBDT1BZSU5HLk1JVCBmb3IgZGV0YWlscworCitFUlJfUkVQT1JUX0RJUiA/PSAiJHtMT0dfRElSfS9lcnJvci1yZXBvcnQiCisKK2RlZiBlcnJvcnJlcG9ydF9nZXRkYXRhKGUpOgorICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImVycm9yLXJlcG9ydC50eHQiKQorICAgIHdpdGggb3BlbihkYXRhZmlsZSkgYXMgZjoKKyAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIG5ld2RhdGEsIGZpbGUpOgorICAgIGltcG9ydCBqc29uCisgICAgbG9ncGF0aCA9IGUuZGF0YS5nZXRWYXIoJ0VSUl9SRVBPUlRfRElSJywgVHJ1ZSkKKyAgICBkYXRhZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCBmaWxlKQorICAgIHdpdGggb3BlbihkYXRhZmlsZSwgInciKSBhcyBmOgorICAgICAgICBqc29uLmR1bXAobmV3ZGF0YSwgZiwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKQorICAgIHJldHVybiBkYXRhZmlsZQorCitweXRob24gZXJyb3JyZXBvcnRfaGFuZGxlciAoKSB7CisgICAgICAgIGltcG9ydCBqc29uCisKKyAgICAgICAgbG9ncGF0aCA9IGUuZGF0YS5nZXRWYXIoJ0VSUl9SRVBPUlRfRElSJywgVHJ1ZSkKKyAgICAgICAgZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImVycm9yLXJlcG9ydC50eHQiKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICBtYWNoaW5lID0gZS5kYXRhLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgICAgICAgICBkYXRhWydtYWNoaW5lJ10gPSBtYWNoaW5lCisgICAgICAgICAgICBkYXRhWydidWlsZF9zeXMnXSA9IGUuZGF0YS5nZXRWYXIoIkJVSUxEX1NZUyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWyduYXRpdmVsc2InXSA9IGUuZGF0YS5nZXRWYXIoIk5BVElWRUxTQlNUUklORyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWydkaXN0cm8nXSA9IGUuZGF0YS5nZXRWYXIoIkRJU1RSTyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWyd0YXJnZXRfc3lzJ10gPSBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfU1lTIiwgVHJ1ZSkKKyAgICAgICAgICAgIGRhdGFbJ2ZhaWx1cmVzJ10gPSBbXQorICAgICAgICAgICAgZGF0YVsnY29tcG9uZW50J10gPSBlLmdldFBrZ3MoKVswXQorICAgICAgICAgICAgZGF0YVsnYnJhbmNoX2NvbW1pdCddID0gYmFzZV9kZXRlY3RfYnJhbmNoKGUuZGF0YSkgKyAiOiAiICsgYmFzZV9kZXRlY3RfcmV2aXNpb24oZS5kYXRhKQorICAgICAgICAgICAgbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGRhdGFmaWxlICsgJy5sb2NrJykKKyAgICAgICAgICAgIGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIGRhdGEsICJlcnJvci1yZXBvcnQudHh0IikKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza0ZhaWxlZCk6CisgICAgICAgICAgICB0YXNrID0gZS50YXNrCisgICAgICAgICAgICB0YXNrZGF0YT17fQorICAgICAgICAgICAgbG9nID0gZS5kYXRhLmdldFZhcignQkJfTE9HRklMRScsIFRydWUpCisgICAgICAgICAgICB0YXNrZGF0YVsncGFja2FnZSddID0gZS5kYXRhLmV4cGFuZCgiJHtQRn0iKQorICAgICAgICAgICAgdGFza2RhdGFbJ3Rhc2snXSA9IHRhc2sKKyAgICAgICAgICAgIGlmIGxvZzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxvZ0ZpbGUgPSBvcGVuKGxvZywgJ3InKQorICAgICAgICAgICAgICAgICAgICBsb2dkYXRhID0gbG9nRmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgICAgIGxvZ0ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICJVbmFibGUgdG8gcmVhZCBsb2cgZmlsZSIKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dkYXRhID0gIk5vIExvZyIKKworICAgICAgICAgICAgIyBzZXJ2ZXIgd2lsbCByZWZ1c2UgZmFpbHVyZXMgbG9uZ2VyIHRoYW4gcGFyYW0gc3BlY2lmaWVkIGluIHByb2plY3Quc2V0dGluZ3MucHkKKyAgICAgICAgICAgICMgTUFYX1VQTE9BRF9TSVpFID0gIjUyNDI4ODAiCisgICAgICAgICAgICAjIHVzZSBsb3dlciB2YWx1ZSwgYmVjYXVzZSA2NTAgY2hhcnMgY2FuIGJlIHNwZW50IGluIHRhc2ssIHBhY2thZ2UsIHZlcnNpb24KKyAgICAgICAgICAgIG1heF9sb2dkYXRhX3NpemUgPSA1MjQyMDAwCisgICAgICAgICAgICAjIHVwbG9hZCBsYXN0IG1heF9sb2dkYXRhX3NpemUgY2hhcmFjdGVycworICAgICAgICAgICAgaWYgbGVuKGxvZ2RhdGEpID4gbWF4X2xvZ2RhdGFfc2l6ZToKKyAgICAgICAgICAgICAgICBsb2dkYXRhID0gIi4uLiIgKyBsb2dkYXRhWy1tYXhfbG9nZGF0YV9zaXplOl0KKyAgICAgICAgICAgIHRhc2tkYXRhWydsb2cnXSA9IGxvZ2RhdGEKKyAgICAgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShkYXRhZmlsZSArICcubG9jaycpCisgICAgICAgICAgICBqc29uZGF0YSA9IGpzb24ubG9hZHMoZXJyb3JyZXBvcnRfZ2V0ZGF0YShlKSkKKyAgICAgICAgICAgIGpzb25kYXRhWydmYWlsdXJlcyddLmFwcGVuZCh0YXNrZGF0YSkKKyAgICAgICAgICAgIGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIGpzb25kYXRhLCAiZXJyb3ItcmVwb3J0LnR4dCIpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKToKKyAgICAgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShkYXRhZmlsZSArICcubG9jaycpCisgICAgICAgICAgICBqc29uZGF0YSA9IGpzb24ubG9hZHMoZXJyb3JyZXBvcnRfZ2V0ZGF0YShlKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKyAgICAgICAgICAgIGZhaWx1cmVzID0ganNvbmRhdGFbJ2ZhaWx1cmVzJ10KKyAgICAgICAgICAgIGlmKGxlbihmYWlsdXJlcykgPiAwKToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9ICJlcnJvcl9yZXBvcnRfIiArIGUuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIFRydWUpKyIudHh0IgorICAgICAgICAgICAgICAgIGRhdGFmaWxlID0gZXJyb3JyZXBvcnRfc2F2ZWRhdGEoZSwganNvbmRhdGEsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlRoZSBlcnJvcnMgZm9yIHRoaXMgYnVpbGQgYXJlIHN0b3JlZCBpbiAlc1xuWW91IGNhbiBzZW5kIHRoZSBlcnJvcnMgdG8gYSByZXBvcnRzIHNlcnZlciBieSBydW5uaW5nOlxuICBzZW5kLWVycm9yLXJlcG9ydCAlcyBbLXMgc2VydmVyXSIgJSAoZGF0YWZpbGUsIGRhdGFmaWxlKSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJUaGUgY29udGVudHMgb2YgdGhlc2UgbG9ncyB3aWxsIGJlIHBvc3RlZCBpbiBwdWJsaWMgaWYgeW91IHVzZSB0aGUgYWJvdmUgY29tbWFuZCB3aXRoIHRoZSBkZWZhdWx0IHNlcnZlci4gUGxlYXNlIGVuc3VyZSB5b3UgcmVtb3ZlIGFueSBpZGVudGlmeWluZyBvciBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiB3aGVuIHByb21wdGVkIGJlZm9yZSBzZW5kaW5nLiIpCit9CisKK2FkZGhhbmRsZXIgZXJyb3JyZXBvcnRfaGFuZGxlcgorZXJyb3JyZXBvcnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCBiYi5idWlsZC5UYXNrRmFpbGVkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5ZWZjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKQEAgLTAsMCArMSwxMjAgQEAKKyMKKyMgUmVtb3ZlcyBzb3VyY2UgYWZ0ZXIgYnVpbGQKKyMKKyMgVG8gdXNlIGl0IGFkZCB0aGF0IGxpbmUgdG8gY29uZi9sb2NhbC5jb25mOgorIworIyBJTkhFUklUICs9ICJybV93b3JrIgorIworIyBUbyBpbmhpYml0IHJtX3dvcmsgZm9yIHNvbWUgcmVjaXBlcywgc3BlY2lmeSB0aGVtIGluIFJNX1dPUktfRVhDTFVERS4KKyMgRm9yIGV4YW1wbGUsIGluIGNvbmYvbG9jYWwuY29uZjoKKyMKKyMgUk1fV09SS19FWENMVURFICs9ICJpY3UtbmF0aXZlIGljdSBidXN5Ym94IgorIworCisjIFVzZSB0aGUgY29tcGxldGlvbiBzY2hlZHVsZXIgYnkgZGVmYXVsdCB3aGVuIHJtX3dvcmsgaXMgYWN0aXZlCisjIHRvIHRyeSBhbmQgcmVkdWNlIGRpc2sgdXNhZ2UKK0JCX1NDSEVEVUxFUiA/PSAiY29tcGxldGlvbiIKKworUk1XT1JLX09SSUdfVEFTSyA6PSAiJHtCQl9ERUZBVUxUX1RBU0t9IgorQkJfREVGQVVMVF9UQVNLID0gInJtX3dvcmtfYWxsIgorCitkb19ybV93b3JrICgpIHsKKyAgICAjIElmIHRoZSByZWNpcGUgbmFtZSBpcyBpbiB0aGUgUk1fV09SS19FWENMVURFLCBza2lwIHRoZSByZWNpcGUuCisgICAgZm9yIHAgaW4gJHtSTV9XT1JLX0VYQ0xVREV9OyBkbworICAgICAgICBpZiBbICIkcCIgPSAiJHtQTn0iIF07IHRoZW4KKyAgICAgICAgICAgIGJibm90ZSAicm1fd29yazogU2tpcHBpbmcgJHtQTn0gc2luY2UgaXQgaXMgaW4gUk1fV09SS19FWENMVURFIgorICAgICAgICAgICAgZXhpdCAwCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgY2QgJHtXT1JLRElSfQorICAgIGZvciBkaXIgaW4gKgorICAgIGRvCisgICAgICAgICMgUmV0YWluIG9ubHkgbG9ncyBhbmQgb3RoZXIgZmlsZXMgaW4gdGVtcCwgc2FmZWx5IGlnbm9yZQorICAgICAgICAjIGZhaWx1cmVzIG9mIHJlbW92aW5nIHBzZXVkbyBmb2xlcnMgb24gTkZTMi8zIHNlcnZlci4KKyAgICAgICAgaWYgWyAkZGlyID0gJ3BzZXVkbycgXTsgdGhlbgorICAgICAgICAgICAgcm0gLXJmICRkaXIgMj4gL2Rldi9udWxsIHx8IHRydWUKKyAgICAgICAgZWxpZiBbICRkaXIgIT0gJ3RlbXAnIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1yZiAkZGlyCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgIyBOZWVkIHRvIGFkZCBwc2V1ZG8gYmFjayBvciBzdWJzcWV1ZW50IHdvcmsgaW4gdGhpcyB3b3JrZGlyCisgICAgIyBtaWdodCBmYWlsIHNpbmNlIHNldHNjZW5lIG1heSBub3QgcmVydW4gdG8gcmVjcmVhdGUgaXQKKyAgICBta2RpciAtcCAke1dPUktESVJ9L3BzZXVkby8KKworICAgICMgQ2hhbmdlIG5vcm1hbCBzdGFtcHMgaW50byBzZXRzY2VuZSBzdGFtcHMgYXMgdGhleSBiZXR0ZXIgcmVmbGVjdCB0aGUKKyAgICAjIGZhY3QgV09SS0RJUiBpcyBub3cgZW1wdHkKKyAgICAjIEFsc28gbGVhdmUgbm9leGVjIHN0YW1wcyBzaW5jZSBzZXRzY2VuZSBzdGFtcHMgZG9uJ3QgY292ZXIgdGhlbQorICAgIGNkIGBkaXJuYW1lICR7U1RBTVB9YAorICAgIGZvciBpIGluIGBiYXNlbmFtZSAke1NUQU1QfWAqCisgICAgZG8KKyAgICAgICAgZm9yIGogaW4gJHtTU1RBVEVUQVNLU30gZG9fc2hhcmVkX3dvcmtkaXIKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGNhc2UgJGkgaW4KKyAgICAgICAgICAgICpkb19zZXRzY2VuZSopCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKnNpZ2RhdGEqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqZG9fcGFja2FnZV93cml0ZSopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpkb19idWlsZCopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICMgV2UgcmVtb3ZlIGRvX3BhY2thZ2UgZW50aXJlbHksIGluY2x1ZGluZyBhbnkKKyAgICAgICAgICAgICMgc3N0YXRlIHZlcnNpb24gc2luY2Ugb3RoZXJ3aXNlIHdlJ2QgbmVlZCB0byBsZWF2ZSAncGxhaW5kaXJzJyBhcm91bmQKKyAgICAgICAgICAgICMgc3VjaCBhcyAncGFja2FnZXMnIGFuZCAncGFja2FnZXMtc3BsaXQnIGFuZCB0aGVzZSBjYW4gYmUgbGFyZ2UuIE5vIGVuZAorICAgICAgICAgICAgIyBvZiBjaGFpbiB0YXNrcyBkZXBlbmQgZGlyZWN0bHkgb24gZG9fcGFja2FnZSBhbnltb3JlLgorICAgICAgICAgICAgKmRvX3BhY2thZ2V8KmRvX3BhY2thZ2UuKnwqZG9fcGFja2FnZV9zZXRzY2VuZS4qKQorICAgICAgICAgICAgICAgIHJtIC1mICRpOworICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqX3NldHNjZW5lKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKiRqfCokai4qKQorICAgICAgICAgICAgICAgIG12ICRpIGBlY2hvICRpIHwgc2VkIC1lICJzIyR7an0jJHtqfV9zZXRzY2VuZSMiYAorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZG9uZQorICAgICAgICBybSAtZiAkaQorICAgIGRvbmUKK30KK2FkZHRhc2sgcm1fd29yayBhZnRlciBkb18ke1JNV09SS19PUklHX1RBU0t9CisKK2RvX3JtX3dvcmtfYWxsICgpIHsKKyAgICA6Cit9Citkb19ybV93b3JrX2FsbFtyZWNyZGVwdGFza10gPSAiZG9fcm1fd29yayIKK2FkZHRhc2sgcm1fd29ya19hbGwgYWZ0ZXIgZG9fcm1fd29yaworCitkb19wb3B1bGF0ZV9zZGtbcG9zdGZ1bmNzXSArPSAicm1fd29ya19wb3B1bGF0ZXNkayIKK3JtX3dvcmtfcG9wdWxhdGVzZGsgKCkgeworICAgIDoKK30KK3JtX3dvcmtfcG9wdWxhdGVzZGtbY2xlYW5kaXJzXSA9ICIke1dPUktESVJ9L3NkayIKKworZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInJtX3dvcmtfcm9vdGZzIgorcm1fd29ya19yb290ZnMgKCkgeworICAgIDoKK30KK3JtX3dvcmtfcm9vdGZzW2NsZWFuZGlyc10gPSAiJHtXT1JLRElSfS9yb290ZnMiCisKK3B5dGhvbiAoKSB7CisgICAgIyBJZiB0aGUgcmVjaXBlIG5hbWUgaXMgaW4gdGhlIFJNX1dPUktfRVhDTFVERSwgc2tpcCB0aGUgcmVjaXBlLgorICAgIGV4Y2x1ZGVzID0gKGQuZ2V0VmFyKCJSTV9XT1JLX0VYQ0xVREUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBwbiBpbiBleGNsdWRlczoKKyAgICAgICAgZC5kZWxWYXJGbGFnKCdybV93b3JrX3Jvb3RmcycsICdjbGVhbmRpcnMnKQorICAgICAgICBkLmRlbFZhckZsYWcoJ3JtX3dvcmtfcG9wdWxhdGVzZGsnLCAnY2xlYW5kaXJzJykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWI0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDYtMjAwNyBPcGVuZWRoYW5kIEx0ZC4KKyMKKworUk9PVEZTX1BLR01BTkFHRSA9ICJkcGtnIGFwdCIKK1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQICA9ICJydW4tcG9zdGluc3RzIgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gImRwa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYXB0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGFwdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBiemlwMi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3Jvb3Rmc1tyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIgorcm9vdGZzX2RlYl9kb19yb290ZnNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJCVUlMRE5BTUUiCitkb19yb290ZnNbdmFyZGVwc10gKz0gIlBBQ0tBR0VfRkVFRF9VUklTIgorCitkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX0RFQn0vZGViLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX0RFQn0vZGViLmxvY2siCisKK3B5dGhvbiByb290ZnNfZGViX2JhZF9yZWNvbW1lbmRhdGlvbnMoKSB7CisgICAgaWYgZC5nZXRWYXIoIkJBRF9SRUNPTU1FTkRBVElPTlMiLCBUcnVlKToKKyAgICAgICAgYmIud2FybigiRGViaWFuIHBhY2thZ2UgaW5zdGFsbCBkb2VzIG5vdCBzdXBwb3J0IEJBRF9SRUNPTU1FTkRBVElPTlMiKQorfQorZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAicm9vdGZzX2RlYl9iYWRfcmVjb21tZW5kYXRpb25zIgorCitERUJfUE9TVFBST0NFU1NfQ09NTUFORFMgPSAiIgorCitvcGtnbGliZGlyID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliL29wa2ciCisKK3B5dGhvbiAoKSB7CisgICAgIyBNYXAgVEFSR0VUX0FSQ0ggdG8gRGViaWFuJ3MgaWRlYXMgYWJvdXQgYXJjaGl0ZWN0dXJlcworICAgIGRhcmNoID0gZC5nZXRWYXIoJ1NES19BUkNIJywgVHJ1ZSkKKyAgICBpZiBkYXJjaCBpbiBbIng4NiIsICJpNDg2IiwgImk1ODYiLCAiaTY4NiIsICJwZW50aXVtIl06CisgICAgICAgICBkLnNldFZhcignREVCX1NES19BUkNIJywgJ2kzODYnKQorICAgIGVsaWYgZGFyY2ggPT0gIng4Nl82NCI6CisgICAgICAgICBkLnNldFZhcignREVCX1NES19BUkNIJywgJ2FtZDY0JykKKyAgICBlbGlmIGRhcmNoID09ICJhcm0iOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdhcm1lbCcpCit9CisKKyMgVGhpcyB3aWxsIG9mIGNvdXJzZSBvbmx5IHdvcmsgYWZ0ZXIgcm9vdGZzX2RlYl9kb19yb290ZnMgb3IgcG9wdWxhdGVfc2RrX2RlYiBoYXMgYmVlbiBjYWxsZWQKK0RQS0dfUVVFUllfQ09NTUFORCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vZHBrZy1xdWVyeSAtLWFkbWluZGlyPSRJTlNUQUxMX1JPT1RGU19ERUIvdmFyL2xpYi9kcGtnIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Jvb3Rmc19pcGsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yb290ZnNfaXBrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxNDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9yb290ZnNfaXBrLmJiY2xhc3MKQEAgLTAsMCArMSwzOSBAQAorIworIyBDcmVhdGVzIGEgcm9vdCBmaWxlc3lzdGVtIG91dCBvZiBJUEtzCisjCisjIFRoaXMgcm9vdGZzIGNhbiBiZSBtb3VudGVkIHZpYSByb290LW5mcyBvciBpdCBjYW4gYmUgcHV0IGludG8gYW4gY3JhbWZzL2pmZnMgZXRjLgorIyBTZWUgaW1hZ2UuYmJjbGFzcyBmb3IgYSB1c2FnZSBvZiB0aGlzLgorIworCitFWFRSQU9QS0dDT05GSUcgPz0gIiIKK1JPT1RGU19QS0dNQU5BR0UgPSAib3BrZyAke0VYVFJBT1BLR0NPTkZJR30iCitST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUCAgPSAicnVuLXBvc3RpbnN0cyIKKworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IG9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19wb3B1bGF0ZV9zZGtbZGVwZW5kc10gKz0gIm9wa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Qgb3BrZy11dGlscy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3Jvb3Rmc1tyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIgorZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICJQQUNLQUdFX0ZFRURfVVJJUyIKK3Jvb3Rmc19pcGtfZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAiQlVJTEROQU1FIgorCitkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtXT1JLRElSfS9pcGsubG9jayIKK2RvX3BvcHVsYXRlX3Nka1tsb2NrZmlsZXNdICs9ICIke1dPUktESVJ9L2lway5sb2NrIgorCitPUEtHX1BSRVBST0NFU1NfQ09NTUFORFMgPSAiIgorCitPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworT1BLR0xJQkRJUiA9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYiIKKworTVVMVElMSUJSRV9BTExPV19SRVAgPSAiJHtPUEtHTElCRElSfS9vcGtnfC91c3IvbGliL29wa2ciCisKK3B5dGhvbiAoKSB7CisKKyAgICBpZiBkLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKToKKyAgICAgICAgZmxhZ3MgPSBkLmdldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcGFja2FnZV93cml0ZV9pcGsiLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19kZXBsb3kiLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19wb3B1bGF0ZV9zeXNyb290IiwgIiIpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ3JlY3JkZXB0YXNrJywgZmxhZ3MpCisgICAgICAgIGQuc2V0VmFyKCdPUEtHX1BSRVBST0NFU1NfQ09NTUFORFMnLCAiIikKKyAgICAgICAgZC5zZXRWYXIoJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnJykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NWQwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgQ3JlYXRlcyBhIHJvb3QgZmlsZXN5c3RlbSBvdXQgb2YgcnBtIHBhY2thZ2VzCisjCisKK1JPT1RGU19QS0dNQU5BR0UgPSAicnBtIHNtYXJ0cG0iCitST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUCA9ICJydW4tcG9zdGluc3RzIgorCisjIEFkZCA1ME1lZyBvZiBleHRyYSBzcGFjZSBmb3IgU21hcnQKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRV9hcHBlbmQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlBBQ0tBR0VfSU5TVEFMTCIsICJzbWFydHBtIiwgIiArIDUxMjAwIiwgIiIgLGQpfSIKKworIyBTbWFydCBpcyBweXRob24gYmFzZWQsIHNvIGJlIHN1cmUgcHl0aG9uLW5hdGl2ZSBpcyBhdmFpbGFibGUgdG8gdXMuCitFWFRSQU5BVElWRVBBVEggKz0gInB5dGhvbi1uYXRpdmUiCisKKyMgb3BrZyBpcyBuZWVkZWQgZm9yIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKK1JQTVJPT1RGU0RFUEVORFMgPSAicnBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICBycG1yZXNvbHZlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICBweXRob24tc21hcnRwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgY3JlYXRlcmVwby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgb3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICIke1JQTVJPT1RGU0RFUEVORFN9IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICIke1JQTVJPT1RGU0RFUEVORFN9IgorCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKK3Jvb3Rmc19ycG1fZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAiQlVJTEROQU1FIgorZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICJQQUNLQUdFX0ZFRURfVVJJUyIKKworIyBSUE0gZG9lc24ndCB3b3JrIHdpdGggbXVsdGlwbGUgcm9vdGZzIGdlbmVyYXRpb24gYXQgb25jZSBkdWUgdG8gY29sbGlzaW9ucyBpbiB0aGUgdXNlIG9mIGZpbGVzIAorIyBpbiAke0RFUExPWV9ESVJfUlBNfS4gVGhpcyBjYW4gYmUgcmVtb3ZlZCBpZiBwYWNrYWdlX3VwZGF0ZV9pbmRleF9ycG0gY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkKK2RvX3Jvb3Rmc1tsb2NrZmlsZXNdICs9ICIke0RFUExPWV9ESVJfUlBNfS9ycG0ubG9jayIKK2RvX3BvcHVsYXRlX3Nka1tsb2NrZmlsZXNdICs9ICIke0RFUExPWV9ESVJfUlBNfS9ycG0ubG9jayIKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKToKKyAgICAgICAgZmxhZ3MgPSBkLmdldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcGFja2FnZV93cml0ZV9ycG0iLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19kZXBsb3kiLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19wb3B1bGF0ZV9zeXNyb290IiwgIiIpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ3JlY3JkZXB0YXNrJywgZmxhZ3MpCisgICAgICAgIGQuc2V0VmFyKCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsICcnKQorICAgICAgICBkLnNldFZhcignUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJycpCisKK30KKyMgU21hcnQgaXMgcHl0aG9uIGJhc2VkLCBzbyBiZSBzdXJlIHB5dGhvbi1uYXRpdmUgaXMgYXZhaWxhYmxlIHRvIHVzLgorRVhUUkFOQVRJVkVQQVRIICs9ICJweXRob24tbmF0aXZlIgorCitycG1saWJkaXIgPSAiL3Zhci9saWIvcnBtIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1ODg3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAorIyBUaGlzIGNsYXNzIGluc3RhbGxzIGFkZGl0aW9uYWwgZmlsZXMgZm91bmQgb24gdGhlIGJ1aWxkIGhvc3QKKyMgZGlyZWN0bHkgaW50byB0aGUgcm9vdGZzLgorIworIyBPbmUgdXNlIGNhc2UgaXMgdG8gaW5zdGFsbCBhIGNvbnN0YW50IHNzaCBob3N0IGtleSBpbgorIyBhbiBpbWFnZSB0aGF0IGdldHMgY3JlYXRlZCBmb3IganVzdCBvbmUgbWFjaGluZS4gVGhpcworIyBzb2x2ZXMgdHdvIGlzc3VlczoKKyMgLSBob3N0IGtleSBnZW5lcmF0aW9uIG9uIHRoZSBkZXZpY2UgY2FuIHN0YWxsIHdoZW4gdGhlCisjICAga2VybmVsIGhhcyBub3QgZ2F0aGVyZWQgZW5vdWdoIGVudHJvcHkgeWV0IChzZWVuIGluIHByYWN0aWNlCisjICAgdW5kZXIgcWVtdSkKKyMgLSBzc2ggY29tcGxhaW5zIGJ5IGRlZmF1bHQgd2hlbiB0aGUgaG9zdCBrZXkgY2hhbmdlcworIworIyBGb3IgZHJvcGJlYXIsIHdpdGggdGhlIHNzaCBob3N0IGtleSBzdG9yZSBhbG9uZyBzaWRlIHRoZSBsb2NhbC5jb25mOgorIyAxLiBFeHRlbmQgbG9jYWwuY29uZjoKKyMgICAgSU5IRVJJVCArPSAicm9vdGZzZGVidWdmaWxlcyIKKyMgICAgUk9PVEZTX0RFQlVHX0ZJTEVTICs9ICIke1RPUERJUn0vY29uZi9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJHtJTUFHRV9ST09URlN9L2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgOyIKKyMgMi4gQm9vdCB0aGUgaW1hZ2Ugb25jZSwgY29weSB0aGUgZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IGZyb20KKyMgICAgdGhlIGRldmljZSBpbnRvIHlvdXIgYnVpbGQgY29uZiBkaXJlY3RvcnkuCisjCisjIERvIG5vdCB1c2UgZm9yIHByb2R1Y3Rpb24gaW1hZ2VzISBJdCBieXBhc3NlcyBzZXZlcmFsCisjIGNvcmUgYnVpbGQgbWVjaGFuaXNtcyAodXBkYXRpbmcgdGhlIGltYWdlIHdoZW4gb25lCisjIG9mIHRoZSBmaWxlcyBjaGFuZ2VzLCBsaWNlbnNlIHRyYWNraW5nIGluIHRoZSBpbWFnZQorIyBtYW5pZmVzdCwgLi4uKS4KKworUk9PVEZTX0RFQlVHX0ZJTEVTID89ICIiCitST09URlNfREVCVUdfRklMRVNbZG9jXSA9ICJMaXN0cyBhZGRpdGlvbmFsIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIGluc3RhbGxlZCB3aXRoICdjcCAtYScgaW4gdGhlIGZvcm1hdCAnc291cmNlMSB0YXJnZXQxO3NvdXJjZTIgdGFyZ2V0MjsuLi4nIgorCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAicm9vdGZzX2RlYnVnX2ZpbGVzIDsiCityb290ZnNfZGVidWdfZmlsZXMgKCkgeworICAgIyEvYmluL3NoIC1lCisgICBlY2hvICIke1JPT1RGU19ERUJVR19GSUxFU30iIHwgc2VkIC1lICdzLzsvXG4vZycgfCB3aGlsZSByZWFkIHNvdXJjZSB0YXJnZXQ7IGRvCisgICAgICBpZiBbIC1lICIkc291cmNlIiBdOyB0aGVuCisgICAgICAgICBta2RpciAtcCAkKGRpcm5hbWUgJHRhcmdldCkKKyAgICAgICAgIGNwIC1hICRzb3VyY2UgJHRhcmdldAorICAgICAgZmkKKyAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI3NDRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzCkBAIC0wLDAgKzEsOTQ1IEBACisjCisjIFNhbml0eSBjaGVjayB0aGUgdXNlcnMgc2V0dXAgZm9yIGNvbW1vbiBtaXNjb25maWd1cmF0aW9ucworIworCitTQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTID89ICJwYXRjaCBkaWZmc3RhdCBtYWtlaW5mbyBnaXQgYnppcDIgdGFyIFwKKyAgICBnemlwIGdhd2sgY2hycGF0aCB3Z2V0IGNwaW8gcGVybCIKKworZGVmIGJibGF5ZXJzX2NvbmZfZmlsZShkKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKSwgJ2NvbmYvYmJsYXllcnMuY29uZicpCisKK2RlZiBzYW5pdHlfY29uZl9yZWFkKGZuKToKKyAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgcmV0dXJuIGxpbmVzCisKK2RlZiBzYW5pdHlfY29uZl9maW5kX2xpbmUocGF0dGVybiwgbGluZXMpOgorICAgIGltcG9ydCByZQorICAgIHJldHVybiBuZXh0KCgoaW5kZXgsIGxpbmUpCisgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpCisgICAgICAgIGlmIHJlLnNlYXJjaChwYXR0ZXJuLCBsaW5lKSksIChOb25lLCBOb25lKSkKKworZGVmIHNhbml0eV9jb25mX3VwZGF0ZShmbiwgbGluZXMsIHZlcnNpb25fdmFyX25hbWUsIG5ld192ZXJzaW9uKToKKyAgICBpbmRleCwgbGluZSA9IHNhbml0eV9jb25mX2ZpbmRfbGluZSh2ZXJzaW9uX3Zhcl9uYW1lLCBsaW5lcykKKyAgICBsaW5lc1tpbmRleF0gPSAnJXMgPSAiJWQiXG4nICUgKHZlcnNpb25fdmFyX25hbWUsIG5ld192ZXJzaW9uKQorICAgIHdpdGggb3BlbihmbiwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcnLmpvaW4obGluZXMpKQorCisjIEZ1bmN0aW9ucyBhZGRlZCB0byB0aGlzIHZhcmlhYmxlIE1VU1QgdGhyb3cgYW4gZXhjZXB0aW9uIChvciBzeXMuZXhpdCgpKSB1bmxlc3MgdGhleQorIyBzdWNjZXNzZnVsbHkgY2hhbmdlZCBMQ09ORl9WRVJTSU9OIGluIGJibGF5ZXJzLmNvbmYKK0JCTEFZRVJTX0NPTkZfVVBEQVRFX0ZVTkNTICs9ICJvZWNvcmVfdXBkYXRlX2JibGF5ZXJzIgorCitweXRob24gb2Vjb3JlX3VwZGF0ZV9iYmxheWVycygpIHsKKyAgICAjIGJibGF5ZXJzLmNvbmYgaXMgb3V0IG9mIGRhdGUsIHNvIHNlZSBpZiB3ZSBjYW4gcmVzb2x2ZSB0aGF0CisKKyAgICBjdXJyZW50X2xjb25mID0gaW50KGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgVHJ1ZSkpCisgICAgaWYgbm90IGN1cnJlbnRfbGNvbmY6CisgICAgICAgIHN5cy5leGl0KCkKKyAgICBsY29uZl92ZXJzaW9uID0gaW50KGQuZ2V0VmFyKCdMQVlFUl9DT05GX1ZFUlNJT04nLCBUcnVlKSkKKyAgICBsaW5lcyA9IFtdCisKKyAgICBpZiBjdXJyZW50X2xjb25mIDwgNDoKKyAgICAgICAgc3lzLmV4aXQoKQorCisgICAgYmJsYXllcnNfZm4gPSBiYmxheWVyc19jb25mX2ZpbGUoZCkKKyAgICBsaW5lcyA9IHNhbml0eV9jb25mX3JlYWQoYmJsYXllcnNfZm4pCisKKyAgICBpZiBjdXJyZW50X2xjb25mID09IDQgYW5kIGxjb25mX3ZlcnNpb24gPiA0OgorICAgICAgICB0b3BkaXJfdmFyID0gJyQnICsgJ3tUT1BESVJ9JworICAgICAgICBpbmRleCwgYmJwYXRoX2xpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUoJ0JCUEFUSCcsIGxpbmVzKQorICAgICAgICBpZiBiYnBhdGhfbGluZToKKyAgICAgICAgICAgIHN0YXJ0ID0gYmJwYXRoX2xpbmUuZmluZCgnIicpCisgICAgICAgICAgICBpZiBzdGFydCAhPSAtMSBhbmQgKGxlbihiYnBhdGhfbGluZSkgIT0gKHN0YXJ0ICsgMSkpOgorICAgICAgICAgICAgICAgIGlmIGJicGF0aF9saW5lW3N0YXJ0ICsgMV0gPT0gJyInOgorICAgICAgICAgICAgICAgICAgICBsaW5lc1tpbmRleF0gPSAoYmJwYXRoX2xpbmVbOnN0YXJ0ICsgMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wZGlyX3ZhciArIGJicGF0aF9saW5lW3N0YXJ0ICsgMTpdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0b3BkaXJfdmFyIGluIGJicGF0aF9saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaW5kZXhdID0gKGJicGF0aF9saW5lWzpzdGFydCArIDFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRpcl92YXIgKyAnOicgKyBiYnBhdGhfbGluZVtzdGFydCArIDE6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5kZXgsIGJiZmlsZXNfbGluZSA9IHNhbml0eV9jb25mX2ZpbmRfbGluZSgnQkJGSUxFUycsIGxpbmVzKQorICAgICAgICAgICAgaWYgYmJmaWxlc19saW5lOgorICAgICAgICAgICAgICAgIGxpbmVzLmluc2VydChpbmRleCwgJ0JCUEFUSCA9ICInICsgdG9wZGlyX3ZhciArICciXG4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCisKKyAgICAgICAgY3VycmVudF9sY29uZiArPSAxCisgICAgICAgIHNhbml0eV9jb25mX3VwZGF0ZShiYmxheWVyc19mbiwgbGluZXMsICdMQ09ORl9WRVJTSU9OJywgY3VycmVudF9sY29uZikKKyAgICAgICAgcmV0dXJuCisKKyAgICBlbGlmIGN1cnJlbnRfbGNvbmYgPT0gNSBhbmQgbGNvbmZfdmVyc2lvbiA+IDU6CisgICAgICAgICMgTnVsbCB1cGRhdGUsIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHBlb3BsZSBzd2l0Y2hpbmcgYmV0d2VlbiBwb2t5IGFuZCBvdGhlciBkaXN0cm9zCisgICAgICAgIGN1cnJlbnRfbGNvbmYgPSA2CisgICAgICAgIHNhbml0eV9jb25mX3VwZGF0ZShiYmxheWVyc19mbiwgbGluZXMsICdMQ09ORl9WRVJTSU9OJywgY3VycmVudF9sY29uZikKKyAgICAgICAgcmV0dXJuCisKKyAgICBzeXMuZXhpdCgpCit9CisKK2RlZiByYWlzZV9zYW5pdHlfZXJyb3IobXNnLCBkLCBuZXR3b3JrX2Vycm9yPUZhbHNlKToKKyAgICBpZiBkLmdldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2tGYWlsZWQobXNnLCBuZXR3b3JrX2Vycm9yKSwgZCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2tGYWlsZWQobXNnKSwgZCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYi5mYXRhbCgiIiIgT0UtY29yZSdzIGNvbmZpZyBzYW5pdHkgY2hlY2tlciBkZXRlY3RlZCBhIHBvdGVudGlhbCBtaXNjb25maWd1cmF0aW9uLgorICAgIEVpdGhlciBmaXggdGhlIGNhdXNlIG9mIHRoaXMgZXJyb3Igb3IgYXQgeW91ciBvd24gcmlzayBkaXNhYmxlIHRoZSBjaGVja2VyIChzZWUgc2FuaXR5LmNvbmYpLgorICAgIEZvbGxvd2luZyBpcyB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgLyBhZHZpc29yaWVzOgorICAgIAorICAgICVzIiIiICUgbXNnKQorCisjIENoZWNrIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCBhIHR1bmluZy4KK2RlZiBjaGVja190b29sY2hhaW5fdHVuZV9hcmdzKGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzKToKKyAgICBmb3VuZF9lcnJvcnMgPSBGYWxzZQorICAgIGlmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIGVycnMsICdDQ0FSR1MnKToKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorICAgIGlmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIGVycnMsICdBU0FSR1MnKToKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorICAgIGlmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIGVycnMsICdMREFSR1MnKToKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorCisgICAgcmV0dXJuIGZvdW5kX2Vycm9ycworCitkZWYgY2hlY2tfdG9vbGNoYWluX2FyZ3NfcHJlc2VudChkYXRhLCB0dW5lLCBtdWx0aWxpYiwgdHVuZV9lcnJvcnMsIHdoaWNoKToKKyAgICBhcmdzX3NldCA9IChkYXRhLmdldFZhcigiVFVORV8lcyIgJSB3aGljaCwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBhcmdzX3dhbnRlZCA9IChkYXRhLmdldFZhcigiVFVORUFCSV9SRVFVSVJFRF8lc190dW5lLSVzIiAlICh3aGljaCwgdHVuZSksIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYXJnc19taXNzaW5nID0gW10KKworICAgICMgSWYgbm8gYXJncyBhcmUgbGlzdGVkL3JlcXVpcmVkLCB3ZSBhcmUgZG9uZS4KKyAgICBpZiBub3QgYXJnc193YW50ZWQ6CisgICAgICAgIHJldHVybgorICAgIGZvciBhcmcgaW4gYXJnc193YW50ZWQ6CisgICAgICAgIGlmIGFyZyBub3QgaW4gYXJnc19zZXQ6CisgICAgICAgICAgICBhcmdzX21pc3NpbmcuYXBwZW5kKGFyZykKKworICAgIGZvdW5kX2Vycm9ycyA9IEZhbHNlCisgICAgaWYgYXJnc19taXNzaW5nOgorICAgICAgICBmb3VuZF9lcnJvcnMgPSBUcnVlCisgICAgICAgIHR1bmVfZXJyb3JzLmFwcGVuZCgiVFVORUFCSSBmb3IgJXMgcmVxdWlyZXMgJyVzJyBpbiBUVU5FXyVzICglcykuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICh0dW5lLCAnICcuam9pbihhcmdzX21pc3NpbmcpLCB3aGljaCwgJyAnLmpvaW4oYXJnc19zZXQpKSkKKyAgICByZXR1cm4gZm91bmRfZXJyb3JzCisKKyMgQ2hlY2sgYSBzaW5nbGUgdHVuZSBmb3IgdmFsaWRpdHkuCitkZWYgY2hlY2tfdG9vbGNoYWluX3R1bmUoZGF0YSwgdHVuZSwgbXVsdGlsaWIpOgorICAgIHR1bmVfZXJyb3JzID0gW10KKyAgICBpZiBub3QgdHVuZToKKyAgICAgICAgcmV0dXJuICJObyB0dW5pbmcgZm91bmQgZm9yICVzIG11bHRpbGliLiIgJSBtdWx0aWxpYgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkYXRhKQorICAgIGlmIG11bHRpbGliICE9ICJkZWZhdWx0IjoKKyAgICAgICAgIyBBcHBseSB0aGUgb3ZlcnJpZGVzIHNvIHdlIGNhbiBsb29rIGF0IHRoZSBkZXRhaWxzLgorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgbXVsdGlsaWIKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIGJiLmRlYnVnKDIsICJTYW5pdHktY2hlY2tpbmcgdHVuaW5nICclcycgKCVzKSBmZWF0dXJlczoiICUgKHR1bmUsIG11bHRpbGliKSkKKyAgICBmZWF0dXJlcyA9IChsb2NhbGRhdGEuZ2V0VmFyKCJUVU5FX0ZFQVRVUkVTX3R1bmUtJXMiICUgdHVuZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBub3QgZmVhdHVyZXM6CisgICAgICAgIHJldHVybiAiVHVuaW5nICclcycgaGFzIG5vIGRlZmluZWQgZmVhdHVyZXMsIGFuZCBjYW5ub3QgYmUgdXNlZC4iICUgdHVuZQorICAgIHZhbGlkX3R1bmVzID0gbG9jYWxkYXRhLmdldFZhckZsYWdzKCdUVU5FVkFMSUQnKSBvciB7fQorICAgIGNvbmZsaWN0cyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncygnVFVORUNPTkZMSUNUUycpIG9yIHt9CisgICAgIyBbZG9jXSBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHZhcmlhYmxlLCBub3QgYSByZWFsIGZlYXR1cmUKKyAgICBpZiAnZG9jJyBpbiB2YWxpZF90dW5lczoKKyAgICAgICAgZGVsIHZhbGlkX3R1bmVzWydkb2MnXQorICAgIGlmICdkb2MnIGluIGNvbmZsaWN0czoKKyAgICAgICAgZGVsIGNvbmZsaWN0c1snZG9jJ10KKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZmVhdHVyZSBpbiBjb25mbGljdHM6CisgICAgICAgICAgICBmb3IgY29uZmxpY3QgaW4gY29uZmxpY3RzW2ZlYXR1cmVdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgY29uZmxpY3QgaW4gZmVhdHVyZXM6CisgICAgICAgICAgICAgICAgICAgIHR1bmVfZXJyb3JzLmFwcGVuZCgiRmVhdHVyZSAnJXMnIGNvbmZsaWN0cyB3aXRoICclcycuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZmVhdHVyZSwgY29uZmxpY3QpKQorICAgICAgICBpZiBmZWF0dXJlIGluIHZhbGlkX3R1bmVzOgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIiAgJXM6ICVzIiAlIChmZWF0dXJlLCB2YWxpZF90dW5lc1tmZWF0dXJlXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIkZlYXR1cmUgJyVzJyBpcyBub3QgZGVmaW5lZC4iICUgZmVhdHVyZSkKKyAgICB3aGl0ZWxpc3QgPSBsb2NhbGRhdGEuZ2V0VmFyKCJUVU5FQUJJX1dISVRFTElTVCIsIFRydWUpCisgICAgaWYgd2hpdGVsaXN0OgorICAgICAgICB0dW5lYWJpID0gbG9jYWxkYXRhLmdldFZhcigiVFVORUFCSV90dW5lLSVzIiAlIHR1bmUsIFRydWUpCisgICAgICAgIGlmIG5vdCB0dW5lYWJpOgorICAgICAgICAgICAgdHVuZWFiaSA9IHR1bmUKKyAgICAgICAgaWYgVHJ1ZSBub3QgaW4gW3ggaW4gd2hpdGVsaXN0LnNwbGl0KCkgZm9yIHggaW4gdHVuZWFiaS5zcGxpdCgpXToKKyAgICAgICAgICAgIHR1bmVfZXJyb3JzLmFwcGVuZCgiVHVuaW5nICclcycgKCVzKSBjYW5ub3QgYmUgdXNlZCB3aXRoIGFueSBzdXBwb3J0ZWQgdHVuaW5nL0FCSS4iICUKKyAgICAgICAgICAgICAgICAodHVuZSwgdHVuZWFiaSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgY2hlY2tfdG9vbGNoYWluX3R1bmVfYXJncyhsb2NhbGRhdGEsIHR1bmVhYmksIG11bHRpbGliLCB0dW5lX2Vycm9ycyk6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNhbml0eSBjaGVjazogQ29tcGlsZXIgYXJncyBPSyBmb3IgJXMuIiAlIHR1bmUpCisgICAgaWYgdHVuZV9lcnJvcnM6CisgICAgICAgIHJldHVybiAiVHVuaW5nICclcycgaGFzIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuIiAlIHR1bmUgKyAnXG4nLmpvaW4odHVuZV9lcnJvcnMpCisKK2RlZiBjaGVja190b29sY2hhaW4oZGF0YSk6CisgICAgdHVuZV9lcnJvcl9zZXQgPSBbXQorICAgIGRlZnR1bmUgPSBkYXRhLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKQorICAgIHR1bmVfZXJyb3JzID0gY2hlY2tfdG9vbGNoYWluX3R1bmUoZGF0YSwgZGVmdHVuZSwgJ2RlZmF1bHQnKQorICAgIGlmIHR1bmVfZXJyb3JzOgorICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQodHVuZV9lcnJvcnMpCisKKyAgICBtdWx0aWxpYnMgPSAoZGF0YS5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBnbG9iYWxfbXVsdGlsaWJzID0gKGRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgaWYgbXVsdGlsaWJzOgorICAgICAgICBzZWVuX2xpYnMgPSBbXQorICAgICAgICBzZWVuX3R1bmVzID0gW10KKyAgICAgICAgZm9yIGxpYiBpbiBtdWx0aWxpYnM6CisgICAgICAgICAgICBpZiBsaWIgaW4gc2Vlbl9saWJzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiVGhlIG11bHRpbGliICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZS4iICUgbGliKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWVuX2xpYnMuYXBwZW5kKGxpYikKKyAgICAgICAgICAgIGlmIG5vdCBsaWIgaW4gZ2xvYmFsX211bHRpbGliczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIk11bHRpbGliICVzIGlzIG5vdCBwcmVzZW50IGluIE1VTFRJTElCX0dMT0JBTF9WQVJJQU5UUyIgJSBsaWIpCisgICAgICAgICAgICB0dW5lID0gZGF0YS5nZXRWYXIoIkRFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcyIgJSBsaWIsIFRydWUpCisgICAgICAgICAgICBpZiB0dW5lIGluIHNlZW5fdHVuZXM6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJUaGUgdHVuaW5nICclcycgYXBwZWFycyBpbiBtb3JlIHRoYW4gb25lIG11bHRpbGliLiIgJSB0dW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWVuX2xpYnMuYXBwZW5kKHR1bmUpCisgICAgICAgICAgICBpZiB0dW5lID09IGRlZnR1bmU6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJNdWx0aWxpYiAnJXMnICglcykgaXMgYWxzbyB0aGUgZGVmYXVsdCB0dW5pbmcuIiAlIChsaWIsIGRlZnR1bmUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9ycyA9IGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIHR1bmUsIGxpYikKKyAgICAgICAgICAgIGlmIHR1bmVfZXJyb3JzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCh0dW5lX2Vycm9ycykKKyAgICBpZiB0dW5lX2Vycm9yX3NldDoKKyAgICAgICAgcmV0dXJuICJUb29sY2hhaW4gdHVuaW5ncyBpbnZhbGlkOlxuIiArICdcbicuam9pbih0dW5lX2Vycm9yX3NldCkgKyAiXG4iCisKKyAgICByZXR1cm4gIiIKKworZGVmIGNoZWNrX2NvbmZfZXhpc3RzKGZuLCBkYXRhKToKKyAgICBiYnBhdGggPSBbXQorICAgIGZuID0gZGF0YS5leHBhbmQoZm4pCisgICAgdmJicGF0aCA9IGRhdGEuZ2V0VmFyKCJCQlBBVEgiLCBGYWxzZSkKKyAgICBpZiB2YmJwYXRoOgorICAgICAgICBiYnBhdGggKz0gdmJicGF0aC5zcGxpdCgiOiIpCisgICAgZm9yIHAgaW4gYmJwYXRoOgorICAgICAgICBjdXJybmFtZSA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZChwKSwgZm4pCisgICAgICAgIGlmIG9zLmFjY2VzcyhjdXJybmFtZSwgb3MuUl9PSyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgY2hlY2tfY3JlYXRlX2xvbmdfZmlsZW5hbWUoZmlsZXBhdGgsIHBhdGhuYW1lKToKKyAgICBpbXBvcnQgc3RyaW5nLCByYW5kb20KKyAgICB0ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihmaWxlcGF0aCwgJycuam9pbihyYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzKSBmb3IgeCBpbiByYW5nZSgyMDApKSkKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZmlsZXBhdGgpCisgICAgICAgIGYgPSBvcGVuKHRlc3RmaWxlLCAidyIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy5yZW1vdmUodGVzdGZpbGUpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGVyciwgc3RyZXJyb3IgPSBlLmFyZ3MKKyAgICAgICAgaWYgZXJyID09IGVycm5vLkVOQU1FVE9PTE9ORzoKKyAgICAgICAgICAgIHJldHVybiAiRmFpbGVkIHRvIGNyZWF0ZSBhIGZpbGUgd2l0aCBhIGxvbmcgbmFtZSBpbiAlcy4gUGxlYXNlIHVzZSBhIGZpbGVzeXN0ZW0gdGhhdCBkb2VzIG5vdCB1bnJlYXNvbmFibHkgbGltaXQgZmlsZW5hbWUgbGVuZ3RoLlxuIiAlIHBhdGhuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjcmVhdGUgYSBmaWxlIGluICVzOiAlcy5cbiIgJSAocGF0aG5hbWUsIHN0cmVycm9yKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGVycm5vLCBzdHJlcnJvciA9IGUuYXJncworICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjcmVhdGUgJXMgZGlyZWN0b3J5IGluIHdoaWNoIHRvIHJ1biBsb25nIG5hbWUgc2FuaXR5IGNoZWNrOiAlcy5cbiIgJSAocGF0aG5hbWUsIHN0cmVycm9yKQorICAgIHJldHVybiAiIgorCitkZWYgY2hlY2tfcGF0aF9sZW5ndGgoZmlsZXBhdGgsIHBhdGhuYW1lLCBsaW1pdCk6CisgICAgaWYgbGVuKGZpbGVwYXRoKSA+IGxpbWl0OgorICAgICAgICByZXR1cm4gIlRoZSBsZW5ndGggb2YgJXMgaXMgbG9uZ2VyIHRoYW4gNDEwLCB0aGlzIHdvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgZXJyb3JzLCBwbGVhc2UgdXNlIGEgc2hvcnRlciBwYXRoLlxuIiAlIHBhdGhuYW1lCisgICAgcmV0dXJuICIiCisKK2RlZiBnZXRfZmlsZXN5c3RlbV9pZChwYXRoKToKKyAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgic3RhdCAtZiAtYyAnJXMnICVzIiAlICgiJXQiLCBwYXRoKSkKKyAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGVsc2U6CisgICAgICAgIGJiLndhcm4oIkNhbid0IGdldCB0aGUgZmlsZXN5c3RlbSBpZCBvZjogJXMiICUgcGF0aCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworIyBDaGVjayB0aGF0IHRoZSBwYXRoIGlzbid0IGxvY2F0ZWQgb24gbmZzLgorZGVmIGNoZWNrX25vdF9uZnMocGF0aCwgbmFtZSk6CisgICAgIyBUaGUgbmZzJyBmaWxlc3lzdGVtIGlkIGlzIDY5NjkKKyAgICBpZiBnZXRfZmlsZXN5c3RlbV9pZChwYXRoKSA9PSAiNjk2OSI6CisgICAgICAgIHJldHVybiAiVGhlICVzOiAlcyBjYW4ndCBiZSBsb2NhdGVkIG9uIG5mcy5cbiIgJSAobmFtZSwgcGF0aCkKKyAgICByZXR1cm4gIiIKKworIyBDaGVjayB0aGF0IHBhdGggaXNuJ3QgYSBicm9rZW4gc3ltbGluaworZGVmIGNoZWNrX3N5bWxpbmsobG5rLCBkYXRhKToKKyAgICBpZiBvcy5wYXRoLmlzbGluayhsbmspIGFuZCBub3Qgb3MucGF0aC5leGlzdHMobG5rKToKKyAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKCIlcyBpcyBhIGJyb2tlbiBzeW1saW5rLiIgJSBsbmssIGRhdGEpCisKK2RlZiBjaGVja19jb25uZWN0aXZpdHkoZCk6CisgICAgIyBVUkkncyB0byBjaGVjayBjYW4gYmUgc2V0IGluIHRoZSBDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyB2YXJpYWJsZQorICAgICMgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFzIGZvciBTUkNfVVJJLiBJZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldAorICAgICMgdGhlIGNoZWNrIGlzIHNraXBwZWQKKyAgICB0ZXN0X3VyaXMgPSAoZC5nZXRWYXIoJ0NPTk5FQ1RJVklUWV9DSEVDS19VUklTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICByZXR2YWwgPSAiIgorCisgICAgIyBPbmx5IGNoZWNrIGNvbm5lY3Rpdml0eSBpZiBuZXR3b3JrIGVuYWJsZWQgYW5kIHRoZQorICAgICMgQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgYXJlIHNldAorICAgIG5ldHdvcmtfZW5hYmxlZCA9IG5vdCBkLmdldFZhcignQkJfTk9fTkVUV09SSycsIFRydWUpCisgICAgY2hlY2tfZW5hYmxlZCA9IGxlbih0ZXN0X3VyaXMpCisgICAgIyBUYWtlIGEgY29weSBvZiB0aGUgZGF0YSBzdG9yZSBhbmQgdW5zZXQgTUlSUk9SUyBhbmQgUFJFTUlSUk9SUworICAgIGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBkYXRhLmRlbFZhcignUFJFTUlSUk9SUycpCisgICAgZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgIGlmIGNoZWNrX2VuYWJsZWQgYW5kIG5ldHdvcmtfZW5hYmxlZDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaCh0ZXN0X3VyaXMsIGRhdGEpCisgICAgICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICAjIEFsbG93IHRoZSBtZXNzYWdlIHRvIGJlIGNvbmZpZ3VyZWQgc28gdGhhdCB1c2VycyBjYW4gYmUKKyAgICAgICAgICAgICMgcG9pbnRlZCB0byBhIHN1cHBvcnQgbWVjaGFuaXNtLgorICAgICAgICAgICAgbXNnID0gZGF0YS5nZXRWYXIoJ0NPTk5FQ1RJVklUWV9DSEVDS19NU0cnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgaWYgbGVuKG1zZykgPT0gMDoKKyAgICAgICAgICAgICAgICBtc2cgPSAiJXMuIFBsZWFzZSBlbnN1cmUgeW91ciBuZXR3b3JrIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuIiAlIGVycgorICAgICAgICAgICAgcmV0dmFsID0gbXNnCisKKyAgICByZXR1cm4gcmV0dmFsCisKK2RlZiBjaGVja19zdXBwb3J0ZWRfZGlzdHJvKHNhbml0eV9kYXRhKToKKyAgICBmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKKworICAgIHRlc3RlZF9kaXN0cm9zID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdTQU5JVFlfVEVTVEVEX0RJU1RST1MnLCBUcnVlKQorICAgIGlmIG5vdCB0ZXN0ZWRfZGlzdHJvczoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGRpc3RybyA9IG9lLmxzYi5kaXN0cm9faWRlbnRpZmllcigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZGlzdHJvID0gTm9uZQorCisgICAgaWYgbm90IGRpc3RybzoKKyAgICAgICAgYmIud2FybignSG9zdCBkaXN0cmlidXRpb24gY291bGQgbm90IGJlIGRldGVybWluZWQ7IHlvdSBtYXkgcG9zc2libHkgZXhwZXJpZW5jZSB1bmV4cGVjdGVkIGZhaWx1cmVzLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSB0ZXN0ZWQgZGlzdHJpYnV0aW9uLicpCisKKyAgICBmb3Igc3VwcG9ydGVkIGluIFt4LnN0cmlwKCkgZm9yIHggaW4gdGVzdGVkX2Rpc3Ryb3Muc3BsaXQoJ1xcbicpXToKKyAgICAgICAgaWYgZm5tYXRjaChkaXN0cm8sIHN1cHBvcnRlZCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgIGJiLndhcm4oJ0hvc3QgZGlzdHJpYnV0aW9uICIlcyIgaGFzIG5vdCBiZWVuIHZhbGlkYXRlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgYnVpbGQgc3lzdGVtOyB5b3UgbWF5IHBvc3NpYmx5IGV4cGVyaWVuY2UgdW5leHBlY3RlZCBmYWlsdXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEgdGVzdGVkIGRpc3RyaWJ1dGlvbi4nICUgZGlzdHJvKQorCisjIENoZWNrcyB3ZSBzaG91bGQgb25seSBtYWtlIGlmIE1BQ0hJTkUgaXMgc2V0IGNvcnJlY3RseQorZGVmIGNoZWNrX3Nhbml0eV92YWxpZG1hY2hpbmUoc2FuaXR5X2RhdGEpOgorICAgIG1lc3NhZ2VzID0gIiIKKworICAgICMgQ2hlY2sgVFVORV9BUkNIIGlzIHNldAorICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcignVFVORV9BUkNIJywgVHJ1ZSkgPT0gJ0lOVkFMSUQnOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgJ1RVTkVfQVJDSCBpcyB1bnNldC4gUGxlYXNlIGVuc3VyZSB5b3VyIE1BQ0hJTkUgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBhIHZhbGlkIHR1bmUgY29uZmlndXJhdGlvbiBmaWxlIHdoaWNoIHdpbGwgc2V0IHRoaXMgY29ycmVjdGx5LlxuJworCisgICAgIyBDaGVjayBUQVJHRVRfT1MgaXMgc2V0CisgICAgaWYgc2FuaXR5X2RhdGEuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSA9PSAnSU5WQUxJRCc6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAnUGxlYXNlIHNldCBUQVJHRVRfT1MgZGlyZWN0bHksIG9yIGNob29zZSBhIE1BQ0hJTkUgb3IgRElTVFJPIHRoYXQgZG9lcyBzby5cbicKKworICAgICMgQ2hlY2sgdGhhdCB3ZSBkb24ndCBoYXZlIGR1cGxpY2F0ZSBlbnRyaWVzIGluIFBBQ0tBR0VfQVJDSFMgJiB0aGF0IFRVTkVfUEtHQVJDSCBpcyBpbiBQQUNLQUdFX0FSQ0hTCisgICAgcGtnYXJjaHMgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgIHR1bmVwa2cgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpCisgICAgdHVuZWZvdW5kID0gRmFsc2UKKyAgICBzZWVuID0ge30KKyAgICBkdXBzID0gW10KKworICAgIGZvciBwYSBpbiBwa2dhcmNocy5zcGxpdCgpOgorICAgICAgICBpZiBzZWVuLmdldChwYSwgMCkgPT0gMToKKyAgICAgICAgICAgIGR1cHMuYXBwZW5kKHBhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VlbltwYV0gPSAxCisgICAgICAgIGlmIHBhID09IHR1bmVwa2c6CisgICAgICAgICAgICB0dW5lZm91bmQgPSBUcnVlCisKKyAgICBpZiBsZW4oZHVwcyk6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiRXJyb3IsIHRoZSBQQUNLQUdFX0FSQ0hTIHZhcmlhYmxlIGNvbnRhaW5zIGR1cGxpY2F0ZXMuIFRoZSBmb2xsb3dpbmcgYXJjaHMgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZTogJXMiICUgIiAiLmpvaW4oZHVwcykKKworICAgIGlmIHR1bmVmb3VuZCA9PSBGYWxzZToKKyAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICJFcnJvciwgdGhlIFBBQ0tBR0VfQVJDSFMgdmFyaWFibGUgZG9lcyBub3QgY29udGFpbiBUVU5FX1BLR0FSQ0ggKCVzKS4iICUgdHVuZXBrZworCisgICAgcmV0dXJuIG1lc3NhZ2VzCisKKyMgQ2hlY2tzIGlmIG5lY2Vzc2FyeSB0byBhZGQgb3B0aW9uIG1hcmNoIHRvIGhvc3QgZ2NjCitkZWYgY2hlY2tfZ2NjX21hcmNoKHNhbml0eV9kYXRhKToKKyAgICByZXN1bHQgPSBUcnVlCisgICAgbWVzc2FnZSA9ICIiCisKKyAgICAjIENoZWNrIGlmIC1tYXJjaCBub3QgaW4gQlVJTERfQ0ZMQUdTCisgICAgaWYgc2FuaXR5X2RhdGEuZ2V0VmFyKCJCVUlMRF9DRkxBR1MiLFRydWUpLmZpbmQoIi1tYXJjaCIpIDwgMDoKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKworICAgICAgICAjIENvbnN0cnVjdCBhIHRlc3QgZmlsZQorICAgICAgICBmID0gb3BlbigiZ2NjX3Rlc3QuYyIsICJ3IikKKyAgICAgICAgZi53cml0ZSgiaW50IG1haW4gKCl7IHZvbGF0aWxlIGludCBhdG9taWMgPSAyOyBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwICgmYXRvbWljLCAyLCAzKTsgcmV0dXJuIDA7IH1cbiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgaWYgR0NDIGNvdWxkIHdvcmsgd2l0aG91dCBtYXJjaAorICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKQorICAgICAgICAgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIC1tYXJjaD1uYXRpdmUgZ2NjX3Rlc3QuYyAtbyBnY2NfdGVzdCIpCisgICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9bmF0aXZlXCIiCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgYnVpbGRfYXJjaCA9IHNhbml0eV9kYXRhLmdldFZhcignQlVJTERfQVJDSCcsIFRydWUpCisgICAgICAgICAgICBzdGF0dXMscmVzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIke0JVSUxEX1BSRUZJWH1nY2MgLW1hcmNoPSVzIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiICUgYnVpbGRfYXJjaCkKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiQlVJTERfQ0ZMQUdTX2FwcGVuZCA9IFwiIC1tYXJjaD0lc1wiIiAlIGJ1aWxkX2FyY2gKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBUcnVlOworCisgICAgICAgIG9zLnJlbW92ZSgiZ2NjX3Rlc3QuYyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJnY2NfdGVzdCIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCJnY2NfdGVzdCIpCisKKyAgICByZXR1cm4gKHJlc3VsdCwgbWVzc2FnZSkKKworIyBVbnBhdGNoZWQgdmVyc2lvbnMgb2YgbWFrZSAzLjgyIGFyZSBrbm93biB0byBiZSBicm9rZW4uICBTZWUgR05VIFNhdmFubmFoIEJ1ZyAzMDYxMi4KKyMgVXNlIGEgbW9kaWZpZWQgcmVwcm9kdWNlciBmcm9tIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzMwNjEyIHRvIHZhbGlkYXRlLgorZGVmIGNoZWNrX21ha2VfdmVyc2lvbihzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIm1ha2UgLS12ZXJzaW9uIikKKyAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gZXhlY3V0ZSBtYWtlIC0tdmVyc2lvbiwgZXhpdCBjb2RlICVzXG4iICUgc3RhdHVzCisgICAgdmVyc2lvbiA9IHJlc3VsdC5zcGxpdCgpWzJdCisgICAgaWYgTG9vc2VWZXJzaW9uKHZlcnNpb24pID09IExvb3NlVmVyc2lvbigiMy44MiIpOgorICAgICAgICAjIENvbnN0cnVjdCBhIHRlc3QgZmlsZQorICAgICAgICBmID0gb3BlbigibWFrZWZpbGVfdGVzdCIsICJ3IikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdC5hOiBtYWtlZmlsZV90ZXN0X2EuYyBtYWtlZmlsZV90ZXN0X2IuYyBtYWtlZmlsZV90ZXN0LmEoIG1ha2VmaWxlX3Rlc3RfYS5jIG1ha2VmaWxlX3Rlc3RfYi5jKVxuIikKKyAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICBmLndyaXRlKCJtYWtlZmlsZV90ZXN0X2EuYzpcbiIpCisgICAgICAgIGYud3JpdGUoIgl0b3VjaCAkQFxuIikKKyAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICBmLndyaXRlKCJtYWtlZmlsZV90ZXN0X2IuYzpcbiIpCisgICAgICAgIGYud3JpdGUoIgl0b3VjaCAkQFxuIikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBDaGVjayBpZiBtYWtlIDMuODIgaGFzIGJlZW4gcGF0Y2hlZAorICAgICAgICBzdGF0dXMscmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJtYWtlIC1mIG1ha2VmaWxlX3Rlc3QiKQorCisgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJtYWtlZmlsZV90ZXN0X2EuYyIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCJtYWtlZmlsZV90ZXN0X2EuYyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJtYWtlZmlsZV90ZXN0X2IuYyIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCJtYWtlZmlsZV90ZXN0X2IuYyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJtYWtlZmlsZV90ZXN0LmEiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdC5hIikKKworICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiAiWW91ciB2ZXJzaW9uIG9mIG1ha2UgMy44MiBpcyBicm9rZW4uIFBsZWFzZSByZXZlcnQgdG8gMy44MSBvciBpbnN0YWxsIGEgcGF0Y2hlZCB2ZXJzaW9uLlxuIgorICAgIHJldHVybiBOb25lCisKKworIyBUYXIgdmVyc2lvbiAxLjI0IGFuZCBvbndhcmRzIGhhbmRsZSBvdmVyd3JpdGluZyBzeW1saW5rcyBjb3JyZWN0bHkKKyMgYnV0IGVhcmxpZXIgdmVyc2lvbnMgZG8gbm90OyB0aGlzIG5lZWRzIHRvIHdvcmsgcHJvcGVybHkgZm9yIHNzdGF0ZQorZGVmIGNoZWNrX3Rhcl92ZXJzaW9uKHNhbml0eV9kYXRhKToKKyAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KKyAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgidGFyIC0tdmVyc2lvbiIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgdGFyIC0tdmVyc2lvbiwgZXhpdCBjb2RlICVzXG4iICUgc3RhdHVzCisgICAgdmVyc2lvbiA9IHJlc3VsdC5zcGxpdCgpWzNdCisgICAgaWYgTG9vc2VWZXJzaW9uKHZlcnNpb24pIDwgTG9vc2VWZXJzaW9uKCIxLjI0Iik6CisgICAgICAgIHJldHVybiAiWW91ciB2ZXJzaW9uIG9mIHRhciBpcyBvbGRlciB0aGFuIDEuMjQgYW5kIGhhcyBidWdzIHdoaWNoIHdpbGwgYnJlYWsgYnVpbGRzLiBQbGVhc2UgaW5zdGFsbCBhIG5ld2VyIHZlcnNpb24gb2YgdGFyLlxuIgorICAgIHJldHVybiBOb25lCisKKyMgV2UgdXNlIGdpdCBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlvbmFsaXR5IG9ubHkgZm91bmQgaW4gMS43Ljggb3IgbGF0ZXIKK2RlZiBjaGVja19naXRfdmVyc2lvbihzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoImdpdCAtLXZlcnNpb24gMj4gL2Rldi9udWxsIikKKyAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gZXhlY3V0ZSBnaXQgLS12ZXJzaW9uLCBleGl0IGNvZGUgJXNcbiIgJSBzdGF0dXMKKyAgICB2ZXJzaW9uID0gcmVzdWx0LnNwbGl0KClbMl0KKyAgICBpZiBMb29zZVZlcnNpb24odmVyc2lvbikgPCBMb29zZVZlcnNpb24oIjEuNy44Iik6CisgICAgICAgIHJldHVybiAiWW91ciB2ZXJzaW9uIG9mIGdpdCBpcyBvbGRlciB0aGFuIDEuNy44IGFuZCBoYXMgYnVncyB3aGljaCB3aWxsIGJyZWFrIGJ1aWxkcy4gUGxlYXNlIGluc3RhbGwgYSBuZXdlciB2ZXJzaW9uIG9mIGdpdC5cbiIKKyAgICByZXR1cm4gTm9uZQorCisjIENoZWNrIHRoZSByZXF1aXJlZCBwZXJsIG1vZHVsZXMgd2hpY2ggbWF5IG5vdCBiZSBpbnN0YWxsZWQgYnkgZGVmYXVsdAorZGVmIGNoZWNrX3BlcmxfbW9kdWxlcyhzYW5pdHlfZGF0YSk6CisgICAgcmV0ID0gIiIKKyAgICBtb2R1bGVzID0gKCAiVGV4dDo6UGFyc2VXb3JkcyIsICJUaHJlYWQ6OlF1ZXVlIiwgIkRhdGE6OkR1bXBlciIgKQorICAgIGZvciBtIGluIG1vZHVsZXM6CisgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJwZXJsIC1lICd1c2UgJXMnIDI+IC9kZXYvbnVsbCIgJSBtKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJldCArPSAiJXMgIiAlIG0KKyAgICBpZiByZXQ6CisgICAgICAgIHJldHVybiAiUmVxdWlyZWQgcGVybCBtb2R1bGUocykgbm90IGZvdW5kOiAlc1xuIiAlIHJldAorICAgIHJldHVybiBOb25lCisKK2RlZiBzYW5pdHlfY2hlY2tfY29uZmZpbGVzKHN0YXR1cywgZCk6CisgICAgIyBDaGVjayB3ZSBhcmUgdXNpbmcgYSB2YWxpZCBsb2NhbC5jb25mCisgICAgY3VycmVudF9jb25mICA9IGQuZ2V0VmFyKCdDT05GX1ZFUlNJT04nLCBUcnVlKQorICAgIGNvbmZfdmVyc2lvbiA9ICBkLmdldFZhcignTE9DQUxDT05GX1ZFUlNJT04nLCBUcnVlKQorCisgICAgaWYgY3VycmVudF9jb25mICE9IGNvbmZfdmVyc2lvbjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciB2ZXJzaW9uIG9mIGxvY2FsLmNvbmYgd2FzIGdlbmVyYXRlZCBmcm9tIGFuIG9sZGVyL25ld2VyIHZlcnNpb24gb2YgbG9jYWwuY29uZi5zYW1wbGUgYW5kIHRoZXJlIGhhdmUgYmVlbiB1cGRhdGVzIG1hZGUgdG8gdGhpcyBmaWxlLiBQbGVhc2UgY29tcGFyZSB0aGUgdHdvIGZpbGVzIGFuZCBtZXJnZSBhbnkgY2hhbmdlcyBiZWZvcmUgY29udGludWluZy5cbk1hdGNoaW5nIHRoZSB2ZXJzaW9uIG51bWJlcnMgd2lsbCByZW1vdmUgdGhpcyBtZXNzYWdlLlxuXCJtZWxkIGNvbmYvbG9jYWwuY29uZiAke0NPUkVCQVNFfS9tZXRhKi9jb25mL2xvY2FsLmNvbmYuc2FtcGxlXCIgaXMgYSBnb29kIHdheSB0byB2aXN1YWxpc2UgdGhlIGNoYW5nZXMuXG4iKQorCisgICAgIyBDaGVjayBiYmxheWVycy5jb25mIGlzIHZhbGlkCisgICAgY3VycmVudF9sY29uZiA9IGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICBsY29uZl92ZXJzaW9uID0gZC5nZXRWYXIoJ0xBWUVSX0NPTkZfVkVSU0lPTicsIFRydWUpCisgICAgaWYgY3VycmVudF9sY29uZiAhPSBsY29uZl92ZXJzaW9uOgorICAgICAgICBmdW5jcyA9IGQuZ2V0VmFyKCdCQkxBWUVSU19DT05GX1VQREFURV9GVU5DUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgZm9yIGZ1bmMgaW4gZnVuY3M6CisgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmdW5jLCBkKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiWW91ciBjb25mL2JibGF5ZXJzLmNvbmYgaGFzIGJlZW4gYXV0b21hdGljYWxseSB1cGRhdGVkLiIpCisgICAgICAgICAgICAgICAgc3RhdHVzLnJlcGFyc2UgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzdGF0dXMucmVwYXJzZToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBiYmxheWVycy5jb25mIGhhcyB0aGUgd3JvbmcgTENPTkZfVkVSU0lPTiAoaGFzICVzLCBleHBlY3RpbmcgJXMpLlxuUGxlYXNlIGNvbXBhcmUgdGhlIHlvdXIgZmlsZSBhZ2FpbnN0IGJibGF5ZXJzLmNvbmYuc2FtcGxlIGFuZCBtZXJnZSBhbnkgY2hhbmdlcyBiZWZvcmUgY29udGludWluZy5cblwibWVsZCBjb25mL2JibGF5ZXJzLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9iYmxheWVycy5jb25mLnNhbXBsZVwiIGlzIGEgZ29vZCB3YXkgdG8gdmlzdWFsaXNlIHRoZSBjaGFuZ2VzLlxuIiAlIChjdXJyZW50X2xjb25mLCBsY29uZl92ZXJzaW9uKSkKKworICAgICMgSWYgd2UgaGF2ZSBhIHNpdGUuY29uZiwgY2hlY2sgaXQncyB2YWxpZAorICAgIGlmIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL3NpdGUuY29uZiIsIGQpOgorICAgICAgICBjdXJyZW50X3Njb25mID0gZC5nZXRWYXIoJ1NDT05GX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBzY29uZl92ZXJzaW9uID0gZC5nZXRWYXIoJ1NJVEVfQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgY3VycmVudF9zY29uZiAhPSBzY29uZl92ZXJzaW9uOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciB2ZXJzaW9uIG9mIHNpdGUuY29uZiB3YXMgZ2VuZXJhdGVkIGZyb20gYW4gb2xkZXIgdmVyc2lvbiBvZiBzaXRlLmNvbmYuc2FtcGxlIGFuZCB0aGVyZSBoYXZlIGJlZW4gdXBkYXRlcyBtYWRlIHRvIHRoaXMgZmlsZS4gUGxlYXNlIGNvbXBhcmUgdGhlIHR3byBmaWxlcyBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5NYXRjaGluZyB0aGUgdmVyc2lvbiBudW1iZXJzIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS5cblwibWVsZCBjb25mL3NpdGUuY29uZiAke0NPUkVCQVNFfS9tZXRhKi9jb25mL3NpdGUuY29uZi5zYW1wbGVcIiBpcyBhIGdvb2Qgd2F5IHRvIHZpc3VhbGlzZSB0aGUgY2hhbmdlcy5cbiIpCisKKworZGVmIHNhbml0eV9oYW5kbGVfYWJpY2hhbmdlcyhzdGF0dXMsIGQpOgorICAgICMKKyAgICAjIENoZWNrIHRoZSAnQUJJJyBvZiBUTVBESVIKKyAgICAjCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGN1cnJlbnRfYWJpID0gZC5nZXRWYXIoJ09FTEFZT1VUX0FCSScsIFRydWUpCisgICAgYWJpZmlsZSA9IGQuZ2V0VmFyKCdTQU5JVFlfQUJJRklMRScsIFRydWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoYWJpZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAiciIpIGFzIGY6CisgICAgICAgICAgICBhYmkgPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCBhYmkuaXNkaWdpdCgpOgorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMiIgYW5kIGN1cnJlbnRfYWJpID09ICIzIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBmcm9tIGxheW91dCB2ZXJzaW9uIDIgdG8gbGF5b3V0IHZlcnNpb24gMyIpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoIm12ICR7VE1QRElSfS9zdGFnaW5nICR7VE1QRElSfS9zeXNyb290cyIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJsbiAtcyBzeXNyb290cyAke1RNUERJUn0vc3RhZ2luZyIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJjZCAke1RNUERJUn0vc3RhbXBzOyBmb3IgaSBpbiAqLypkb19wb3B1bGF0ZV9zdGFnaW5nOyBkbyBuZXc9YGVjaG8gJGkgfCBzZWQgLWUgJ3MvZG9fcG9wdWxhdGVfc3RhZ2luZy9kb19wb3B1bGF0ZV9zeXNyb290LydgOyBtdiAkaSAkbmV3OyBkb25lIiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICIzIiBhbmQgY3VycmVudF9hYmkgPT0gIjQiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gMyB0byBsYXlvdXQgdmVyc2lvbiA0IikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGQuZXhwYW5kKCIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIpKToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoIm12ICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9ICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJsbiAtcyAke1NUQUdJTkdfQklORElSX0NST1NTfSAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiNCI6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJTdGFnaW5nIGxheW91dCBoYXMgY2hhbmdlZC4gVGhlIGNyb3NzIGRpcmVjdG9yeSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBjcm9zcyBwYWNrYWdlcyBhcmUgbm93IGJ1aWx0IHVuZGVyIHRoZSBuYXRpdmUgc3lzcm9vdC5cblRoaXMgcmVxdWlyZXMgYSByZWJ1aWxkLlxuIikKKyAgICAgICAgZWxpZiBhYmkgPT0gIjUiIGFuZCBjdXJyZW50X2FiaSA9PSAiNiI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiA1IHRvIGxheW91dCB2ZXJzaW9uIDYiKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1RNUERJUn0vcHN0YWdlbG9ncyAke1NTVEFURV9NQU5JRkVTVFN9IiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICI3IiBhbmQgY3VycmVudF9hYmkgPT0gIjgiOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciBjb25maWd1cmF0aW9uIGlzIHVzaW5nIHN0YW1wIGZpbGVzIGluY2x1ZGluZyB0aGUgc3N0YXRlIGhhc2ggYnV0IHlvdXIgYnVpbGQgZGlyZWN0b3J5IHdhcyBidWlsdCB3aXRoIHN0YW1wIGZpbGVzIHRoYXQgZG8gbm90IGluY2x1ZGUgdGhpcy5cblRvIGNvbnRpbnVlLCBlaXRoZXIgcmVidWlsZCBvciBzd2l0Y2ggYmFjayB0byB0aGUgT0VCYXNpYyBzaWduYXR1cmUgaGFuZGxlciB3aXRoIEJCX1NJR05BVFVSRV9IQU5ETEVSID0gJ09FQmFzaWMnLlxuIikKKyAgICAgICAgZWxpZiAoYWJpICE9IGN1cnJlbnRfYWJpIGFuZCBjdXJyZW50X2FiaSA9PSAiOSIpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiVGhlIGxheW91dCBvZiB0aGUgVE1QRElSIFNUQU1QUyBkaXJlY3RvcnkgaGFzIGNoYW5nZWQuIFBsZWFzZSBjbGVhbiBvdXQgVE1QRElSIGFuZCByZWJ1aWxkIChzc3RhdGUgd2lsbCBiZSBzdGlsbCBiZSB2YWxpZCBhbmQgcmV1c2VkKVxuIikKKyAgICAgICAgZWxpZiAoYWJpICE9IGN1cnJlbnRfYWJpIGFuZCBjdXJyZW50X2FiaSA9PSAiMTAiIGFuZCAoYWJpID09ICI4IiBvciBhYmkgPT0gIjkiKSk6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiA4LzkgdG8gbGF5b3V0IHZlcnNpb24gMTAiKQorICAgICAgICAgICAgY21kID0gZC5leHBhbmQoImdyZXAgLXIgLWwgc3lzcm9vdC1wcm92aWRlcnMvdmlydHVhbF9rZXJuZWwgJHtTU1RBVEVfTUFOSUZFU1RTfSIpCisgICAgICAgICAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3BsaXQoKQorICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlVuaW5zdGFsbGluZyBtYW5pZmVzdCBmaWxlICVzIiAlIGYpCisgICAgICAgICAgICAgICAgc3N0YXRlX2NsZWFuX21hbmlmZXN0KGYsIGQpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICIxMCIgYW5kIGN1cnJlbnRfYWJpID09ICIxMSI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiAxMCB0byBsYXlvdXQgdmVyc2lvbiAxMSIpCisgICAgICAgICAgICAjIEZpbGVzIGluIHhmODYtdmlkZW8tbW9kZXNldHRpbmcgbW92ZWQgdG8geHNlcnZlci14b3JnIGFuZCBiaXRiYWtlIGNhbid0IGN1cnJlbnRseSBoYW5kbGUgdGhhdDoKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgicm0gJHtUTVBESVJ9L3N5c3Jvb3RzLyovdXNyL2xpYi94b3JnL21vZHVsZXMvZHJpdmVycy9tb2Rlc2V0dGluZ19kcnYuc28gJHtUTVBESVJ9L3N5c3Jvb3RzLyovcGtnZGF0YS9ydW50aW1lL3hmODYtdmlkZW8tbW9kZXNldHRpbmcqICR7VE1QRElSfS9zeXNyb290cy8qL3BrZ2RhdGEvcnVudGltZS1yZXZlcnNlL3hmODYtdmlkZW8tbW9kZXNldHRpbmcqICR7VE1QRElSfS9zeXNyb290cy8qL3BrZ2RhdGEvc2hsaWJzMi94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIChhYmkgIT0gY3VycmVudF9hYmkpOgorICAgICAgICAgICAgIyBDb2RlIHRvIGNvbnZlcnQgZnJvbSBvbmUgQUJJIHRvIGFub3RoZXIgY291bGQgZ28gaGVyZSBpZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBUTVBESVIgaGFzIGNoYW5nZWQgaXRzIGxheW91dCB2ZXJzaW9uIG51bWJlciAoJXMgdG8gJXMpIGFuZCB5b3UgbmVlZCB0byBlaXRoZXIgcmVidWlsZCwgcmV2ZXJ0IG9yIGFkanVzdCBpdCBhdCB5b3VyIG93biByaXNrLlxuIiAlIChhYmksIGN1cnJlbnRfYWJpKSkKKyAgICBlbHNlOgorICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKworZGVmIGNoZWNrX3Nhbml0eV9zc3RhdGVfZGlyX2NoYW5nZShzc3RhdGVfZGlyLCBkYXRhKToKKyAgICAjIFNhbml0eSBjaGVja3MgdG8gYmUgZG9uZSB3aGVuIHRoZSB2YWx1ZSBvZiBTU1RBVEVfRElSIGNoYW5nZXMKKworICAgICMgQ2hlY2sgdGhhdCBTU1RBVEVfRElSIGlzbid0IG9uIGEgZmlsZXN5c3RlbSB3aXRoIGxpbWl0ZWQgZmlsZW5hbWUgbGVuZ3RoIChlZy4gZUNyeXB0RlMpCisgICAgdGVzdG1zZyA9ICIiCisgICAgaWYgc3N0YXRlX2RpciAhPSAiIjoKKyAgICAgICAgdGVzdG1zZyA9IGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKHNzdGF0ZV9kaXIsICJTU1RBVEVfRElSIikKKyAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIFNTVEFURV9ESVIsIHN1Z2dlc3QgdGhlIHVzZXIgc2V0IGl0IGFzIGFuIFNTVEFURV9NSVJST1JTCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVyciA9IHRlc3Rtc2cuc3BsaXQoJzogJylbMV0uc3RyaXAoKQorICAgICAgICAgICAgaWYgZXJyID09ICJQZXJtaXNzaW9uIGRlbmllZC4iOgorICAgICAgICAgICAgICAgIHRlc3Rtc2cgPSB0ZXN0bXNnICsgIllvdSBjb3VsZCB0cnkgdXNpbmcgJXMgaW4gU1NUQVRFX01JUlJPUlMgcmF0aGVyIHRoYW4gYXMgYW4gU1NUQVRFX0NBQ0hFLlxuIiAlIChzc3RhdGVfZGlyKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gdGVzdG1zZworICAgICAgIAorZGVmIGNoZWNrX3Nhbml0eV92ZXJzaW9uX2NoYW5nZShzdGF0dXMsIGQpOgorICAgICMgU2FuaXR5IGNoZWNrcyB0byBiZSBkb25lIHdoZW4gU0FOSVRZX1ZFUlNJT04gY2hhbmdlcworICAgICMgSW4gb3RoZXIgd29yZHMsIHRoZXNlIHRlc3RzIHJ1biBvbmNlIGluIGEgZ2l2ZW4gYnVpbGQgZGlyZWN0b3J5IGFuZCB0aGVuIAorICAgICMgbmV2ZXIgYWdhaW4gdW50aWwgdGhlIHNhbml0eSB2ZXJzaW9uIGNoYW5nZXMuCisKKyAgICAjIENoZWNrIHRoZSBweXRob24gaW5zdGFsbCBpcyBjb21wbGV0ZS4gZ2xpYi0yLjAtbmF0aXZlcyByZXF1cmllcworICAgICMgeG1sLnBhcnNlcnMuZXhwYXQKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB4bWwucGFyc2Vycy5leHBhdAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnWW91ciBweXRob24gaXMgbm90IGEgZnVsbCBpbnN0YWxsLiBQbGVhc2UgaW5zdGFsbCB0aGUgbW9kdWxlIHhtbC5wYXJzZXJzLmV4cGF0IChweXRob24teG1sIG9uIG9wZW5TVVNFIGFuZCBTVVNFIExpbnV4KS5cbicpCisgICAgaW1wb3J0IHN0YXQKKworICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfbWFrZV92ZXJzaW9uKGQpKQorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfdGFyX3ZlcnNpb24oZCkpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19naXRfdmVyc2lvbihkKSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3BlcmxfbW9kdWxlcyhkKSkKKworICAgIG1pc3NpbmcgPSAiIgorCisgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoIiR7TUFLRX0iLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiR05VIG1ha2UsIgorCisgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoJyR7QlVJTERfUFJFRklYfWdjYycsIGQpOgorICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICJDIENvbXBpbGVyICglc2djYyksIiAlIGQuZ2V0VmFyKCJCVUlMRF9QUkVGSVgiLCBUcnVlKQorCisgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoJyR7QlVJTERfUFJFRklYfWcrKycsIGQpOgorICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICJDKysgQ29tcGlsZXIgKCVzZysrKSwiICUgZC5nZXRWYXIoIkJVSUxEX1BSRUZJWCIsIFRydWUpCisKKyAgICByZXF1aXJlZF91dGlsaXRpZXMgPSBkLmdldFZhcignU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUycsIFRydWUpCisKKyAgICBmb3IgdXRpbCBpbiByZXF1aXJlZF91dGlsaXRpZXMuc3BsaXQoKToKKyAgICAgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHModXRpbCwgZCk6CisgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICIlcywiICUgdXRpbAorCisgICAgaWYgbWlzc2luZzoKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcucnN0cmlwKCcsJykKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiUGxlYXNlIGluc3RhbGwgdGhlIGZvbGxvd2luZyBtaXNzaW5nIHV0aWxpdGllczogJXNcbiIgJSBtaXNzaW5nKQorCisgICAgYXNzdW1lX3Byb3ZpZGVkID0gZC5nZXRWYXIoJ0FTU1VNRV9QUk9WSURFRCcsIFRydWUpLnNwbGl0KCkKKyAgICAjIENoZWNrIHVzZXIgZG9lc24ndCBoYXZlIEFTU1VNRV9QUk9WSURFRCA9IGluc3RlYWQgb2YgKz0gaW4gbG9jYWwuY29uZgorICAgIGlmICJkaWZmc3RhdC1uYXRpdmUiIG5vdCBpbiBhc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1BsZWFzZSB1c2UgQVNTVU1FX1BST1ZJREVEICs9LCBub3QgQVNTVU1FX1BST1ZJREVEID0gaW4geW91ciBsb2NhbC5jb25mXG4nKQorCisgICAgaWYgInFlbXUtbmF0aXZlIiBpbiBhc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCJxZW11LWFybSIsIGQpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgicWVtdS1uYXRpdmUgd2FzIGluIEFTU1VNRV9QUk9WSURFRCBidXQgdGhlIFFFTVUgYmluYXJpZXMgKHFlbXUtYXJtKSBjYW4ndCBiZSBmb3VuZCBpbiBQQVRIIikKKworICAgIGlmICJsaWJzZGwtbmF0aXZlIiBpbiBhc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCJzZGwtY29uZmlnIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJsaWJzZGwtbmF0aXZlIGlzIHNldCB0byBiZSBBU1NVTUVfUFJPVklERUQgYnV0IHNkbC1jb25maWcgY2FuJ3QgYmUgZm91bmQgaW4gUEFUSC4gUGxlYXNlIGVpdGhlciBpbnN0YWxsIGl0LCBvciBjb25maWd1cmUgcWVtdSBub3QgdG8gcmVxdWlyZSBzZGwuIikKKworICAgIChyZXN1bHQsIG1lc3NhZ2UpID0gY2hlY2tfZ2NjX21hcmNoKGQpCisgICAgaWYgcmVzdWx0IGFuZCBtZXNzYWdlOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIGdjYyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gNC41LCBwbGVhc2UgYWRkIHRoZSBmb2xsb3dpbmcgcGFyYW0gdG8gbG9jYWwuY29uZlxuIFwKKyAgICAgICAgJXNcbiIgJSBtZXNzYWdlKQorICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgZ2NjIHZlcnNpb24gaXMgb2xkZXIgdGhhbiA0LjUgb3IgaXMgbm90IHdvcmtpbmcgcHJvcGVybHkuICBQbGVhc2UgdmVyaWZ5IHlvdSBjYW4gYnVpbGQiKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCIgYW5kIGxpbmsgc29tZXRoaW5nIHRoYXQgdXNlcyBhdG9taWMgb3BlcmF0aW9ucywgc3VjaCBhczogXG4iKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCIgICAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKCZhdG9taWMsIDIsIDMpO1xuIikKKworICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaXNuJ3Qgb24gYSBmaWxlc3lzdGVtIHdpdGggbGltaXRlZCBmaWxlbmFtZSBsZW5ndGggKGVnLiBlQ3J5cHRGUykKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKHRtcGRpciwgIlRNUERJUiIpKQorICAgIHRtcGRpcm1vZGUgPSBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZQorICAgIGlmICh0bXBkaXJtb2RlICYgc3RhdC5TX0lTR0lEKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiVE1QRElSIGlzIHNldGdpZCwgcGxlYXNlIGRvbid0IGJ1aWxkIGluIGEgc2V0Z2lkIGRpcmVjdG9yeSIpCisgICAgaWYgKHRtcGRpcm1vZGUgJiBzdGF0LlNfSVNVSUQpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJUTVBESVIgaXMgc2V0dWlkLCBwbGVhc2UgZG9uJ3QgYnVpbGQgaW4gYSBzZXR1aWQgZGlyZWN0b3J5IikKKworICAgICMgU29tZSB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBhcHBhcmVudGx5IHJlbGllcyBvbiBjaG1vZCBldGMuIGJlaW5nIHN1aWQgcm9vdCAoISEpCisgICAgaW1wb3J0IHN0YXQKKyAgICBzdWlkX2NoZWNrX2JpbnMgPSAiY2hvd24gY2htb2QgbWtub2QiLnNwbGl0KCkKKyAgICBmb3IgYmluX2NtZCBpbiBzdWlkX2NoZWNrX2JpbnM6CisgICAgICAgIGJpbl9wYXRoID0gYmIudXRpbHMud2hpY2gob3MuZW52aXJvblsiUEFUSCJdLCBiaW5fY21kKQorICAgICAgICBpZiBiaW5fcGF0aDoKKyAgICAgICAgICAgIGJpbl9zdGF0ID0gb3Muc3RhdChiaW5fcGF0aCkKKyAgICAgICAgICAgIGlmIGJpbl9zdGF0LnN0X3VpZCA9PSAwIGFuZCBiaW5fc3RhdC5zdF9tb2RlICYgc3RhdC5TX0lTVUlEOgorICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJyVzIGhhcyB0aGUgc2V0dWlkIGJpdCBzZXQuIFRoaXMgaW50ZXJmZXJlcyB3aXRoIHBzZXVkbyBhbmQgbWF5IGNhdXNlIG90aGVyIGlzc3VlcyB0aGF0IGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzLlxuJyAlIGJpbl9wYXRoKQorCisgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBmZXRjaCBmcm9tIHZhcmlvdXMgbmV0d29yayB0cmFuc3BvcnRzCisgICAgbmV0Y2hlY2sgPSBjaGVja19jb25uZWN0aXZpdHkoZCkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KG5ldGNoZWNrKQorICAgIGlmIG5ldGNoZWNrOgorICAgICAgICBzdGF0dXMubmV0d29ya19lcnJvciA9IFRydWUKKworICAgIG5vbGlicyA9IGQuZ2V0VmFyKCdOTzMyTElCUycsIFRydWUpCisgICAgaWYgbm90IG5vbGliczoKKyAgICAgICAgbGliMzJwYXRoID0gJy9saWInCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCcvbGliNjQnKSBhbmQgKCBvcy5wYXRoLmlzbGluaygnL2xpYjY0Jykgb3Igb3MucGF0aC5pc2xpbmsoJy9saWInKSApOgorICAgICAgICAgICBsaWIzMnBhdGggPSAnL2xpYjMyJworCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCclcy9saWJjLnNvLjYnICUgbGliMzJwYXRoKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKCcvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgnKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdSBoYXZlIGEgMzItYml0IGxpYmMsIGJ1dCBubyAzMi1iaXQgaGVhZGVycy4gIFlvdSBtdXN0IGluc3RhbGwgdGhlIDMyLWJpdCBsaWJjIGhlYWRlcnMuXG4iKQorCisgICAgYmJwYXRocyA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgaWYgKCIuIiBpbiBiYnBhdGhzIG9yICIuLyIgaW4gYmJwYXRocyBvciAiIiBpbiBiYnBhdGhzKSBhbmQgbm90IHN0YXR1cy5yZXBhcnNlOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJCQlBBVEggcmVmZXJlbmNlcyB0aGUgY3VycmVudCBkaXJlY3RvcnksIGVpdGhlciB0aHJvdWdoICIgICAgXAorICAgICAgICAgICAgICAgICJhbiBlbXB0eSBlbnRyeSwgYSAnLi8nIG9yIGEgJy4nLlxuXHQgVGhpcyBpcyB1bnNhZmUgYW5kIG1lYW5zIHlvdXIgIlwKKyAgICAgICAgICAgICAgICAibGF5ZXIgY29uZmlndXJhdGlvbiBpcyBhZGRpbmcgZW1wdHkgZWxlbWVudHMgdG8gQkJQQVRILlxuXHQgIlwKKyAgICAgICAgICAgICAgICAiUGxlYXNlIGNoZWNrIHlvdXIgbGF5ZXIuY29uZiBmaWxlcyBhbmQgb3RoZXIgQkJQQVRIICIgICAgICAgIFwKKyAgICAgICAgICAgICAgICAic2V0dGluZ3MgdG8gcmVtb3ZlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAicmVmZXJlbmNlcy5cbiIgXAorICAgICAgICAgICAgICAgICJQYXJzZWQgQkJQQVRIIGlzIiArIHN0cihiYnBhdGhzKSk7CisKKyAgICBvZXNfYmJfY29uZiA9IGQuZ2V0VmFyKCAnT0VTX0JJVEJBS0VfQ09ORicsIFRydWUpCisgICAgaWYgbm90IG9lc19iYl9jb25mOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdZb3UgYXJlIG5vdCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIHZlcnNpb24gb2YgY29uZi9iaXRiYWtlLmNvbmYuIFRoaXMgbWVhbnMgeW91ciBlbnZpcm9ubWVudCBpcyBtaXNjb25maWd1cmVkLCBpbiBwYXJ0aWN1bGFyIGNoZWNrIEJCUEFUSC5cbicpCisKKyAgICAjIFRoZSBsZW5ndGggb2YgVE1QRElSIGNhbid0IGJlIGxvbmdlciB0aGFuIDQxMAorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfcGF0aF9sZW5ndGgodG1wZGlyLCAiVE1QRElSIiwgNDEwKSkKKworICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaXNuJ3QgbG9jYXRlZCBvbiBuZnMKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX25vdF9uZnModG1wZGlyLCAiVE1QRElSIikpCisKK2RlZiBjaGVja19zYW5pdHlfZXZlcnlidWlsZChzdGF0dXMsIGQpOgorICAgIGltcG9ydCBvcywgc3RhdAorICAgICMgU2FuaXR5IHRlc3RzIHdoaWNoIHRlc3QgdGhlIHVzZXJzIGVudmlyb25tZW50IHNvIG5lZWQgdG8gcnVuIGF0IGVhY2ggYnVpbGQgKG9yIGFyZSBzbyBjaGVhcAorICAgICMgaXQgbWFrZXMgc2Vuc2UgdG8gYWx3YXlzIHJ1biB0aGVtLgorCisgICAgaWYgMCA9PSBvcy5nZXR1aWQoKToKKyAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKCJEbyBub3QgdXNlIEJpdGJha2UgYXMgcm9vdC4iLCBkKQorCisgICAgIyBDaGVjayB0aGUgUHl0aG9uIHZlcnNpb24sIHdlIG5vdyBoYXZlIGEgbWluaW11bSBvZiBQeXRob24gMi43LjMKKyAgICBpbXBvcnQgc3lzCisgICAgaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDcwM0YwOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdUaGUgc3lzdGVtIHJlcXVpcmVzIGF0IGxlYXN0IFB5dGhvbiAyLjcuMyB0byBydW4uIFBsZWFzZSB1cGRhdGUgeW91ciBQeXRob24gaW50ZXJwcmV0ZXIuXG4nKQorCisgICAgIyBDaGVjayB0aGUgYml0YmFrZSB2ZXJzaW9uIG1lZXRzIG1pbmltdW0gcmVxdWlyZW1lbnRzCisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgbWludmVyc2lvbiA9IGQuZ2V0VmFyKCdCQl9NSU5fVkVSU0lPTicsIFRydWUpCisgICAgaWYgKExvb3NlVmVyc2lvbihiYi5fX3ZlcnNpb25fXykgPCBMb29zZVZlcnNpb24obWludmVyc2lvbikpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdCaXRiYWtlIHZlcnNpb24gJXMgaXMgcmVxdWlyZWQgYW5kIHZlcnNpb24gJXMgd2FzIGZvdW5kXG4nICUgKG1pbnZlcnNpb24sIGJiLl9fdmVyc2lvbl9fKSkKKworICAgIHNhbml0eV9jaGVja19jb25mZmlsZXMoc3RhdHVzLCBkKQorCisgICAgcGF0aHMgPSBkLmdldFZhcignUEFUSCcsIFRydWUpLnNwbGl0KCI6IikKKyAgICBpZiAiLiIgaW4gcGF0aHMgb3IgIi4vIiBpbiBwYXRocyBvciAiIiBpbiBwYXRoczoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiUEFUSCBjb250YWlucyAnLicsICcuLycgb3IgJycgKGVtcHR5IGVsZW1lbnQpLCB3aGljaCB3aWxsIGJyZWFrIHRoZSBidWlsZCwgcGxlYXNlIHJlbW92ZSB0aGlzLlxuUGFyc2VkIFBBVEggaXMgIiArIHN0cihwYXRocykgKyAiXG4iKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBESVNUUk8gaXMgdmFsaWQsIGlmIHNldAorICAgICMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBESVNUUk8gcmVuYW1pbmcgRElTVFJPCisgICAgZGlzdHJvID0gZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpCisgICAgaWYgZGlzdHJvIGFuZCBkaXN0cm8gIT0gIm5vZGlzdHJvIjoKKyAgICAgICAgaWYgbm90ICggY2hlY2tfY29uZl9leGlzdHMoImNvbmYvZGlzdHJvLyR7RElTVFJPfS5jb25mIiwgZCkgb3IgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvZGlzdHJvL2luY2x1ZGUvJHtESVNUUk99LmluYyIsIGQpICk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJESVNUUk8gJyVzJyBub3QgZm91bmQuIFBsZWFzZSBzZXQgYSB2YWxpZCBESVNUUk8gaW4geW91ciBsb2NhbC5jb25mXG4iICUgZC5nZXRWYXIoIkRJU1RSTyIsIFRydWUpKQorCisgICAgIyBDaGVjayB0aGF0IERMX0RJUiBpcyBzZXQsIGV4aXN0cyBhbmQgaXMgd3JpdGFibGUuIEluIHRoZW9yeSwgd2Ugc2hvdWxkIG5ldmVyIGV2ZW4gaGl0IHRoZSBjaGVjayBpZiBETF9ESVIgaXNuJ3QgCisgICAgIyBzZXQsIHNpbmNlIHNvIG11Y2ggcmVsaWVzIG9uIGl0IGJlaW5nIHNldC4KKyAgICBkbGRpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIGlmIG5vdCBkbGRpcjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRExfRElSIGlzIG5vdCBzZXQuIFlvdXIgZW52aXJvbm1lbnQgaXMgbWlzY29uZmlndXJlZCwgY2hlY2sgdGhhdCBETF9ESVIgaXMgc2V0LCBhbmQgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMsIHRoYXQgaXQgaXMgd3JpdGFibGUuIFxuIikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkbGRpcikgYW5kIG5vdCBvcy5hY2Nlc3MoZGxkaXIsIG9zLldfT0spOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJETF9ESVI6ICVzIGV4aXN0cyBidXQgeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gaXQuIFxuIiAlIGRsZGlyKQorICAgIGNoZWNrX3N5bWxpbmsoZGxkaXIsIGQpCisKKyAgICAjIENoZWNrIHRoYXQgdGhlIE1BQ0hJTkUgaXMgdmFsaWQsIGlmIGl0IGlzIHNldAorICAgIG1hY2hpbmV2YWxpZCA9IFRydWUKKyAgICBpZiBkLmdldFZhcignTUFDSElORScsIFRydWUpOgorICAgICAgICBpZiBub3QgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvbWFjaGluZS8ke01BQ0hJTkV9LmNvbmYiLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1BsZWFzZSBzZXQgYSB2YWxpZCBNQUNISU5FIGluIHlvdXIgbG9jYWwuY29uZiBvciBlbnZpcm9ubWVudFxuJykKKyAgICAgICAgICAgIG1hY2hpbmV2YWxpZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Nhbml0eV92YWxpZG1hY2hpbmUoZCkpCisgICAgZWxzZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnUGxlYXNlIHNldCBhIE1BQ0hJTkUgaW4geW91ciBsb2NhbC5jb25mIG9yIGVudmlyb25tZW50XG4nKQorICAgICAgICBtYWNoaW5ldmFsaWQgPSBGYWxzZQorICAgIGlmIG1hY2hpbmV2YWxpZDoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja190b29sY2hhaW4oZCkpCisKKyAgICAjIENoZWNrIHRoYXQgdGhlIFNES01BQ0hJTkUgaXMgdmFsaWQsIGlmIGl0IGlzIHNldAorICAgIGlmIGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSk6CisgICAgICAgIGlmIG5vdCBjaGVja19jb25mX2V4aXN0cygiY29uZi9tYWNoaW5lLXNkay8ke1NES01BQ0hJTkV9LmNvbmYiLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1NwZWNpZmllZCBTREtNQUNISU5FIHZhbHVlIGlzIG5vdCB2YWxpZFxuJykKKyAgICAgICAgZWxpZiBkLmdldFZhcignU0RLX0FSQ0gnLCBGYWxzZSkgPT0gIiR7QlVJTERfQVJDSH0iOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnU0RLTUFDSElORSBpcyBzZXQsIGJ1dCBTREtfQVJDSCBoYXMgbm90IGJlZW4gY2hhbmdlZCBhcyBhIHJlc3VsdCAtIFNES01BQ0hJTkUgbWF5IGhhdmUgYmVlbiBzZXQgdG9vIGxhdGUgKGUuZy4gaW4gdGhlIGRpc3RybyBjb25maWd1cmF0aW9uKVxuJykKKworICAgIGNoZWNrX3N1cHBvcnRlZF9kaXN0cm8oZCkKKworICAgICMgQ2hlY2sgaWYgRElTUExBWSBpcyBzZXQgaWYgVEVTVF9JTUFHRSBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignVEVTVF9JTUFHRScsIFRydWUpID09ICcxJyBvciBkLmdldFZhcignREVGQVVMVF9URVNUX1NVSVRFUycsIFRydWUpOgorICAgICAgICB0ZXN0dGFyZ2V0ID0gZC5nZXRWYXIoJ1RFU1RfVEFSR0VUJywgVHJ1ZSkKKyAgICAgICAgaWYgdGVzdHRhcmdldCA9PSAncWVtdScgb3IgdGVzdHRhcmdldCA9PSAnUWVtdVRhcmdldCc6CisgICAgICAgICAgICBkaXNwbGF5ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkuZ2V0VmFyKCJESVNQTEFZIiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBkaXNwbGF5OgorICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ3Rlc3RpbWFnZSBuZWVkcyBhbiBYIGRlc2t0b3AgdG8gc3RhcnQgcWVtdSwgcGxlYXNlIHNldCBESVNQTEFZIGNvcnJlY3RseSAoZS5nLiBESVNQTEFZPToxLjApXG4nKQorCisgICAgb21hc2sgPSBvcy51bWFzaygwMjIpCisgICAgaWYgb21hc2sgJiAwNzU1OgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJQbGVhc2UgdXNlIGEgdW1hc2sgd2hpY2ggYWxsb3dzIGErcnggYW5kIHUrcnd4XG4iKQorICAgIG9zLnVtYXNrKG9tYXNrKQorCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkgPT0gImFybSI6CisgICAgICAgICMgVGhpcyBwYXRoIGlzIG5vIGxvbmdlciB1c2VyLXJlYWRhYmxlIGluIG1vZGVybiAodmVyeSByZWNlbnQpIExpbnV4CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciIpOgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKCIvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciIsICJyIikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnQoZi5yZWFkKCkuc3RyaXAoKSkgPiA2NTUzNik6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCIvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciBpcyBub3QgPD0gNjU1MzYuIFRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoIHFlbXUgc28gcGxlYXNlIGZpeCB0aGUgdmFsdWUgKGFzIHJvb3QpLlxuXG5UbyBmaXggdGhpcyBpbiBsYXRlciByZWJvb3RzLCBzZXQgdm0ubW1hcF9taW5fYWRkciA9IDY1NTM2IGluIC9ldGMvc3lzY3RsLmNvbmYuXG4iKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBvZXJvb3QgPSBkLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKQorICAgIGlmIG9lcm9vdC5maW5kKCcrJykgIT0gLTE6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCB5b3UgaGF2ZSBhbiBpbnZhbGlkIGNoYXJhY3RlciAoKykgaW4geW91ciBDT1JFQkFTRSBkaXJlY3RvcnkgcGF0aC4gUGxlYXNlIG1vdmUgdGhlIGluc3RhbGxhdGlvbiB0byBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGluY2x1ZGUgYW55ICsgY2hhcmFjdGVycy4iKQorICAgIGlmIG9lcm9vdC5maW5kKCdAJykgIT0gLTE6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCB5b3UgaGF2ZSBhbiBpbnZhbGlkIGNoYXJhY3RlciAoQCkgaW4geW91ciBDT1JFQkFTRSBkaXJlY3RvcnkgcGF0aC4gUGxlYXNlIG1vdmUgdGhlIGluc3RhbGxhdGlvbiB0byBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGluY2x1ZGUgYW55IEAgY2hhcmFjdGVycy4iKQorICAgIGlmIG9lcm9vdC5maW5kKCcgJykgIT0gLTE6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCB5b3UgaGF2ZSBhIHNwYWNlIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGEgc3BhY2Ugc2luY2UgYXV0b3Rvb2xzIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLiIpCisKKyAgICAjIENoZWNrIHRoZSBmb3JtYXQgb2YgTUlSUk9SUywgUFJFTUlSUk9SUyBhbmQgU1NUQVRFX01JUlJPUlMKKyAgICBpbXBvcnQgcmUKKyAgICBtaXJyb3JfdmFycyA9IFsnTUlSUk9SUycsICdQUkVNSVJST1JTJywgJ1NTVEFURV9NSVJST1JTJ10KKyAgICBwcm90b2NvbHMgPSBbJ2h0dHAnLCAnZnRwJywgJ2ZpbGUnLCAnaHR0cHMnLCBcCisgICAgICAgICAgICAgICAgICdnaXQnLCAnZ2l0c20nLCAnaGcnLCAnb3NjJywgJ3A0JywgJ3N2bicsIFwKKyAgICAgICAgICAgICAgICAgJ2J6cicsICdjdnMnXQorICAgIGZvciBtaXJyb3JfdmFyIGluIG1pcnJvcl92YXJzOgorICAgICAgICBtaXJyb3JzID0gKGQuZ2V0VmFyKG1pcnJvcl92YXIsIFRydWUpIG9yICcnKS5yZXBsYWNlKCdcXG4nLCAnXG4nKS5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbWlycm9yX2VudHJ5IGluIG1pcnJvcnM6CisgICAgICAgICAgICBtaXJyb3JfZW50cnkgPSBtaXJyb3JfZW50cnkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IG1pcnJvcl9lbnRyeToKKyAgICAgICAgICAgICAgICAjIGlnbm9yZSBibGFuayBsaW5lcworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXR0ZXJuLCBtaXJyb3IgPSBtaXJyb3JfZW50cnkuc3BsaXQoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgYmIud2FybignSW52YWxpZCAlczogJXMsIHNob3VsZCBiZSAyIG1lbWJlcnMuJyAlIChtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkuc3RyaXAoKSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVjb2RlZCA9IGJiLmZldGNoMi5kZWNvZGV1cmwocGF0dGVybikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXR0ZXJuX3NjaGVtZSA9IHJlLmNvbXBpbGUoZGVjb2RlZFswXSkKKyAgICAgICAgICAgIGV4Y2VwdCByZS5lcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgYmIud2FybignSW52YWxpZCBzY2hlbWUgcmVnZXggKCVzKSBpbiAlczsgJXMnICUgKHBhdHRlcm4sIG1pcnJvcl92YXIsIG1pcnJvcl9lbnRyeSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90IGFueShwYXR0ZXJuX3NjaGVtZS5tYXRjaChwcm90b2NvbCkgZm9yIHByb3RvY29sIGluIHByb3RvY29scyk6CisgICAgICAgICAgICAgICAgYmIud2FybignSW52YWxpZCBwcm90b2NvbCAoJXMpIGluICVzOiAlcycgJSAoZGVjb2RlZFswXSwgbWlycm9yX3ZhciwgbWlycm9yX2VudHJ5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3QgYW55KG1pcnJvci5zdGFydHN3aXRoKHByb3RvY29sICsgJzovLycpIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHMpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgcHJvdG9jb2wgaW4gJXM6ICVzJyAlIChtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG1pcnJvci5zdGFydHN3aXRoKCdmaWxlOi8vJyk6CisgICAgICAgICAgICAgICAgaW1wb3J0IHVybHBhcnNlCisgICAgICAgICAgICAgICAgY2hlY2tfc3ltbGluayh1cmxwYXJzZS51cmxwYXJzZShtaXJyb3IpLnBhdGgsIGQpCisgICAgICAgICAgICAgICAgIyBTU1RBVEVfTUlSUk9SIGVuZHMgd2l0aCBhIC9QQVRIIHN0cmluZworICAgICAgICAgICAgICAgIGlmIG1pcnJvci5lbmRzd2l0aCgnL1BBVEgnKToKKyAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgL1BBVEgkIGZyb20gU1NUQVRFX01JUlJPUiB0byBnZXQgYSB3b3JraW5nCisgICAgICAgICAgICAgICAgICAgICMgYmFzZSBkaXJlY3RvcnkgcGF0aAorICAgICAgICAgICAgICAgICAgICBtaXJyb3JfYmFzZSA9IHVybHBhcnNlLnVybHBhcnNlKG1pcnJvcls6LTEqbGVuKCcvUEFUSCcpXSkucGF0aAorICAgICAgICAgICAgICAgICAgICBjaGVja19zeW1saW5rKG1pcnJvcl9iYXNlLCBkKQorCisgICAgIyBDaGVjayB0aGF0IFRNUERJUiBoYXNuJ3QgY2hhbmdlZCBsb2NhdGlvbiBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHdlcmUgcnVuCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgY2hlY2tmaWxlID0gb3MucGF0aC5qb2luKHRtcGRpciwgInNhdmVkX3RtcGRpciIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoY2hlY2tmaWxlKToKKyAgICAgICAgd2l0aCBvcGVuKGNoZWNrZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgc2F2ZWRfdG1wZGlyID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgKHNhdmVkX3RtcGRpciAhPSB0bXBkaXIpOgorICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBUTVBESVIgaGFzIGNoYW5nZWQgbG9jYXRpb24uIFlvdSBuZWVkIHRvIGVpdGhlciBtb3ZlIGl0IGJhY2sgdG8gJXMgb3IgcmVidWlsZFxuIiAlIHNhdmVkX3RtcGRpcikKKyAgICBlbHNlOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodG1wZGlyKQorICAgICAgICAjIFJlbW92ZSBzZXR1aWQsIHNldGdpZCBhbmQgc3RpY2t5IGJpdHMgZnJvbSBUTVBESVIKKyAgICAgICAgb3MuY2htb2QodG1wZGlyLCBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZSAmIH4gc3RhdC5TX0lTVUlEKQorICAgICAgICBvcy5jaG1vZCh0bXBkaXIsIG9zLnN0YXQodG1wZGlyKS5zdF9tb2RlICYgfiBzdGF0LlNfSVNHSUQpCisgICAgICAgIG9zLmNobW9kKHRtcGRpciwgb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUgJiB+IHN0YXQuU19JU1ZUWCkKKyAgICAgICAgd2l0aCBvcGVuKGNoZWNrZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh0bXBkaXIpCisKKyAgICAjIENoZWNrIHZtZGsgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXIuCisgICAgaWYgJ3ZtZGsnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgYW5kICdsaXZlJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgSU1BR0VfRlNUWVBFUyB2bWRrIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyXG4iKQorCisgICAgIyBDaGVjayB2ZGkgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXIuCisgICAgaWYgJ3ZkaScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKSBhbmQgJ2xpdmUnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBJTUFHRV9GU1RZUEVTIHZkaSBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlclxuIikKKworICAgICMgQ2hlY2sgcWNvdzIgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXIuCisgICAgaWYgJ3Fjb3cyJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIGFuZCAnbGl2ZScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIElNQUdFX0ZTVFlQRVMgcWNvdzIgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXJcbiIpCisKKyAgICAjIENoZWNrIC9iaW4vc2ggbGlua3MgdG8gZGFzaCBvciBiYXNoCisgICAgcmVhbF9zaCA9IG9zLnBhdGgucmVhbHBhdGgoJy9iaW4vc2gnKQorICAgIGlmIG5vdCByZWFsX3NoLmVuZHN3aXRoKCcvZGFzaCcpIGFuZCBub3QgcmVhbF9zaC5lbmRzd2l0aCgnL2Jhc2gnKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIC9iaW4vc2ggbGlua3MgdG8gJXMsIG11c3QgYmUgZGFzaCBvciBiYXNoXG4iICUgcmVhbF9zaCkKKworZGVmIGNoZWNrX3Nhbml0eShzYW5pdHlfZGF0YSk6CisgICAgY2xhc3MgU2FuaXR5U3RhdHVzKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5uZXR3b3JrX2Vycm9yID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYucmVwYXJzZSA9IEZhbHNlCisKKyAgICAgICAgZGVmIGFkZHJlc3VsdChzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlcyA9IHNlbGYubWVzc2FnZXMgKyBtZXNzYWdlCisKKyAgICBzdGF0dXMgPSBTYW5pdHlTdGF0dXMoKQorCisgICAgdG1wZGlyID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHNzdGF0ZV9kaXIgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKQorCisgICAgY2hlY2tfc3ltbGluayhzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkKKworICAgICMgQ2hlY2sgc2F2ZWQgc2FuaXR5IGluZm8KKyAgICBsYXN0X3Nhbml0eV92ZXJzaW9uID0gMAorICAgIGxhc3RfdG1wZGlyID0gIiIKKyAgICBsYXN0X3NzdGF0ZV9kaXIgPSAiIgorICAgIHNhbml0eXZlcmZpbGUgPSBzYW5pdHlfZGF0YS5leHBhbmQoIiR7VE9QRElSfS9jb25mL3Nhbml0eV9pbmZvIikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzYW5pdHl2ZXJmaWxlKToKKyAgICAgICAgd2l0aCBvcGVuKHNhbml0eXZlcmZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTQU5JVFlfVkVSU0lPTicpOgorICAgICAgICAgICAgICAgICAgICBsYXN0X3Nhbml0eV92ZXJzaW9uID0gaW50KGxpbmUuc3BsaXQoKVsxXSkKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1RNUERJUicpOgorICAgICAgICAgICAgICAgICAgICBsYXN0X3RtcGRpciA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU1NUQVRFX0RJUicpOgorICAgICAgICAgICAgICAgICAgICBsYXN0X3NzdGF0ZV9kaXIgPSBsaW5lLnNwbGl0KClbMV0KKworICAgIGNoZWNrX3Nhbml0eV9ldmVyeWJ1aWxkKHN0YXR1cywgc2FuaXR5X2RhdGEpCisgICAgCisgICAgc2FuaXR5X3ZlcnNpb24gPSBpbnQoc2FuaXR5X2RhdGEuZ2V0VmFyKCdTQU5JVFlfVkVSU0lPTicsIFRydWUpIG9yIDEpCisgICAgbmV0d29ya19lcnJvciA9IEZhbHNlCisgICAgaWYgbGFzdF9zYW5pdHlfdmVyc2lvbiA8IHNhbml0eV92ZXJzaW9uOiAKKyAgICAgICAgY2hlY2tfc2FuaXR5X3ZlcnNpb25fY2hhbmdlKHN0YXR1cywgc2FuaXR5X2RhdGEpCisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfc2FuaXR5X3NzdGF0ZV9kaXJfY2hhbmdlKHNzdGF0ZV9kaXIsIHNhbml0eV9kYXRhKSkKKyAgICBlbHNlOiAKKyAgICAgICAgaWYgbGFzdF9zc3RhdGVfZGlyICE9IHNzdGF0ZV9kaXI6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Nhbml0eV9zc3RhdGVfZGlyX2NoYW5nZShzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoc2FuaXR5dmVyZmlsZSkpIGFuZCBub3Qgc3RhdHVzLm1lc3NhZ2VzOgorICAgICAgICB3aXRoIG9wZW4oc2FuaXR5dmVyZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiU0FOSVRZX1ZFUlNJT04gJXNcbiIgJSBzYW5pdHlfdmVyc2lvbikgCisgICAgICAgICAgICBmLndyaXRlKCJUTVBESVIgJXNcbiIgJSB0bXBkaXIpIAorICAgICAgICAgICAgZi53cml0ZSgiU1NUQVRFX0RJUiAlc1xuIiAlIHNzdGF0ZV9kaXIpIAorCisgICAgc2FuaXR5X2hhbmRsZV9hYmljaGFuZ2VzKHN0YXR1cywgc2FuaXR5X2RhdGEpCisKKyAgICBpZiBzdGF0dXMubWVzc2FnZXMgIT0gIiI6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcihzYW5pdHlfZGF0YS5leHBhbmQoc3RhdHVzLm1lc3NhZ2VzKSwgc2FuaXR5X2RhdGEsIHN0YXR1cy5uZXR3b3JrX2Vycm9yKQorICAgIHJldHVybiBzdGF0dXMucmVwYXJzZQorCisjIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGRhdGFzdG9yZSBhbmQgZmluYWxpc2UgaXQgdG8gZW5zdXJlIGFwcGVuZHMgYW5kIAorIyBvdmVycmlkZXMgYXJlIHNldCAtIHRoZSBkYXRhc3RvcmUgaGFzIHlldCB0byBiZSBmaW5hbGlzZWQgYXQgQ29uZmlnUGFyc2VkCitkZWYgY29weV9kYXRhKGUpOgorICAgIHNhbml0eV9kYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGUuZGF0YSkKKyAgICBzYW5pdHlfZGF0YS5maW5hbGl6ZSgpCisgICAgcmV0dXJuIHNhbml0eV9kYXRhCisKK2FkZGhhbmRsZXIgY2hlY2tfc2FuaXR5X2V2ZW50aGFuZGxlcgorY2hlY2tfc2FuaXR5X2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlNhbml0eUNoZWNrIGJiLmV2ZW50Lk5ldHdvcmtUZXN0IgorcHl0aG9uIGNoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiU2FuaXR5Q2hlY2siOgorICAgICAgICBzYW5pdHlfZGF0YSA9IGNvcHlfZGF0YShlKQorICAgICAgICBpZiBlLmdlbmVyYXRlZXZlbnRzOgorICAgICAgICAgICAgc2FuaXR5X2RhdGEuc2V0VmFyKCJTQU5JVFlfVVNFX0VWRU5UUyIsICIxIikKKyAgICAgICAgcmVwYXJzZSA9IGNoZWNrX3Nhbml0eShzYW5pdHlfZGF0YSkKKyAgICAgICAgZS5kYXRhLnNldFZhcigiQkJfSU5WQUxJRENPTkYiLCByZXBhcnNlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrUGFzc2VkKCksIGUuZGF0YSkKKyAgICBlbGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIk5ldHdvcmtUZXN0IjoKKyAgICAgICAgc2FuaXR5X2RhdGEgPSBjb3B5X2RhdGEoZSkKKyAgICAgICAgaWYgZS5nZW5lcmF0ZWV2ZW50czoKKyAgICAgICAgICAgIHNhbml0eV9kYXRhLnNldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCAiMSIpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTmV0d29ya1Rlc3RGYWlsZWQoKSBpZiBjaGVja19jb25uZWN0aXZpdHkoc2FuaXR5X2RhdGEpIGVsc2UgYmIuZXZlbnQuTmV0d29ya1Rlc3RQYXNzZWQoKSwgZS5kYXRhKQorCisgICAgcmV0dXJuCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zY29ucy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZGU4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcwpAQCAtMCwwICsxLDE1IEBACitERVBFTkRTICs9ICJweXRob24tc2NvbnMtbmF0aXZlIgorCitFWFRSQV9PRVNDT05TID89ICIiCisKK3Njb25zX2RvX2NvbXBpbGUoKSB7CisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyAke1BBUkFMTEVMX01BS0V9IFBSRUZJWD0ke3ByZWZpeH0gcHJlZml4PSR7cHJlZml4fSAke0VYVFJBX09FU0NPTlN9IHx8IFwKKyAgICAgICAgZGllICJzY29ucyBidWlsZCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworc2NvbnNfZG9faW5zdGFsbCgpIHsKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Njb25zIFBSRUZJWD0ke0R9JHtwcmVmaXh9IHByZWZpeD0ke0R9JHtwcmVmaXh9IGluc3RhbGwgJHtFWFRSQV9PRVNDT05TfXx8IFwKKyAgICAgICAgZGllICJzY29ucyBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzEyODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2RsLmJiY2xhc3MKQEAgLTAsMCArMSw2IEBACisjCisjIChDKSBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KKyMKKworREVQRU5EUyArPSAidmlydHVhbC9saWJzZGwgbGlic2RsLW1peGVyIGxpYnNkbC1pbWFnZSIKK1NFQ1RJT04gPSAieDExL2dhbWVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzNDNiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitpbmhlcml0IGRpc3R1dGlscworCitERVBFTkRTICs9ICJweXRob24tZGlzdHJpYnV0ZS1uYXRpdmUiCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPSAiLS1yb290PSR7RH0gXAorICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWxpYj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzMy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ZGQ5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzMy5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAoraW5oZXJpdCBkaXN0dXRpbHMzCisKK0RFUEVORFMgKz0gInB5dGhvbjMtc2V0dXB0b29scy1uYXRpdmUiCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPSAiLS1yb290PSR7RH0gXAorICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWxpYj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NpZ25fcnBtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNGNkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzCkBAIC0wLDAgKzEsNzUgQEAKKyMgQ2xhc3MgZm9yIGdlbmVyYXRpbmcgc2lnbmVkIFJQTSBwYWNrYWdlcy4KKyMKKyMgQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdXNlZCBieSB0aGlzIGNsYXNzOgorIyBSUE1fR1BHX1BBU1NQSFJBU0VfRklMRQorIyAgICAgICAgICAgUGF0aCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgcGFzc3BocmFzZSBvZiB0aGUgc2lnbmluZyBrZXkuCisjIFJQTV9HUEdfTkFNRQorIyAgICAgICAgICAgTmFtZSBvZiB0aGUga2V5IHRvIHNpZ24gd2l0aC4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGRlZmluZQorIyAgICAgICAgICAgJV9ncGdfbmFtZSBtYWNybyBpbiB5b3VyIH4vLm9lcnBtbWFjcm9zIGZpbGUuCisjIFJQTV9HUEdfUFVCS0VZCisjICAgICAgICAgICBQYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBwdWJsaWMga2V5IChpbiAiYXJtb3IiIGZvcm1hdCkKKyMgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdGhlIHNpZ25pbmcga2V5LgorIyBHUEdfQklOCisjICAgICAgICAgICBPcHRpb25hbCB2YXJpYWJsZSBmb3Igc3BlY2lmeWluZyB0aGUgZ3BnIGJpbmFyeS93cmFwcGVyIHRvIHVzZSBmb3IKKyMgICAgICAgICAgIHNpZ25pbmcuCisjCitpbmhlcml0IHNhbml0eQorCitSUE1fU0lHTl9QQUNLQUdFUz0nMScKKworCitfY2hlY2tfZ3BnX25hbWUgKCkgeworICAgIG1hY3JvZGVmPWBycG0gLUUgJyVfZ3BnX25hbWUnYAorICAgIFsgIiRtYWNyb2RlZiIgPT0gIiVfZ3BnX25hbWUiIF0gJiYgcmV0dXJuIDEgfHwgcmV0dXJuIDAKK30KKworCitkZWYgcnBtc2lnbl93cmFwcGVyKGQsIGZpbGVzLCBwYXNzcGhyYXNlLCBncGdfbmFtZT1Ob25lKToKKyAgICBpbXBvcnQgcGV4cGVjdAorCisgICAgIyBGaW5kIHRoZSBjb3JyZWN0IHJwbSBiaW5hcnkKKyAgICBycG1fYmluX3BhdGggPSBkLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgVHJ1ZSkgKyAnL3JwbScKKyAgICBjbWQgPSBycG1fYmluX3BhdGggKyAiIC0tYWRkc2lnbiAiCisgICAgaWYgZ3BnX25hbWU6CisgICAgICAgIGNtZCArPSAiLS1kZWZpbmUgJyUlX2dwZ19uYW1lICVzJyAiICUgZ3BnX25hbWUKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ19jaGVja19ncGdfbmFtZScsIGQpCisgICAgICAgIGV4Y2VwdCBiYi5idWlsZC5GdW5jRmFpbGVkOgorICAgICAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgUlBNX0dQR19OQU1FIGluIGJpdGJha2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25maWcgb3IgdGhlICVfZ3BnX25hbWUgUlBNIG1hY3JvIGRlZmluZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZS5nLiBpbiAgfi8ub2VycG1tYWNyb3MiLCBkKQorICAgIGlmIGQuZ2V0VmFyKCdHUEdfQklOJywgVHJ1ZSk6CisgICAgICAgIGNtZCArPSAiLS1kZWZpbmUgJyUlX19ncGcgJXMnICIgJSBkLmdldFZhcignR1BHX0JJTicsIFRydWUpCisgICAgY21kICs9ICcgJy5qb2luKGZpbGVzKQorCisgICAgIyBOZWVkIHRvIHVzZSBwZXhwZWN0IGZvciBmZWVkaW5nIHRoZSBwYXNzcGhyYXNlCisgICAgcHJvYyA9IHBleHBlY3Quc3Bhd24oY21kKQorICAgIHRyeToKKyAgICAgICAgcHJvYy5leHBlY3RfZXhhY3QoJ0VudGVyIHBhc3MgcGhyYXNlOicsIHRpbWVvdXQ9MTUpCisgICAgICAgIHByb2Muc2VuZGxpbmUocGFzc3BocmFzZSkKKyAgICAgICAgcHJvYy5leHBlY3QocGV4cGVjdC5FT0YsIHRpbWVvdXQ9OTAwKQorICAgICAgICBwcm9jLmNsb3NlKCkKKyAgICBleGNlcHQgcGV4cGVjdC5USU1FT1VUIGFzIGVycjoKKyAgICAgICAgYmIuZGVidWcoJ3JwbXNpZ24gdGltZW91dDogJXMnICUgZXJyKQorICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpCisgICAgcmV0dXJuIHByb2MuZXhpdHN0YXR1cworCisKK3B5dGhvbiBzaWduX3JwbSAoKSB7CisgICAgaW1wb3J0IGdsb2IKKworICAgIHJwbV9ncGdfcGFzc19maWxlID0gKGQuZ2V0VmFyKCJSUE1fR1BHX1BBU1NQSFJBU0VfRklMRSIsIFRydWUpIG9yICIiKQorICAgIGlmIHJwbV9ncGdfcGFzc19maWxlOgorICAgICAgICB3aXRoIG9wZW4ocnBtX2dwZ19wYXNzX2ZpbGUpIGFzIGZvYmo6CisgICAgICAgICAgICBycG1fZ3BnX3Bhc3NwaHJhc2UgPSBmb2JqLnJlYWRsaW5lcygpWzBdLnJzdHJpcCgnXG4nKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIFJQTV9HUEdfUEFTU1BIUkFTRV9GSUxFIGluIHRoZSBjb25maWciLCBkKQorCisgICAgcnBtX2dwZ19uYW1lID0gKGQuZ2V0VmFyKCJSUE1fR1BHX05BTUUiLCBUcnVlKSBvciAiIikKKworICAgIHJwbXMgPSBnbG9iLmdsb2IoZC5nZXRWYXIoJ1JQTV9QS0dXUklURURJUicsIFRydWUpICsgJy8qJykKKworICAgIGlmIHJwbXNpZ25fd3JhcHBlcihkLCBycG1zLCBycG1fZ3BnX3Bhc3NwaHJhc2UsIHJwbV9ncGdfbmFtZSkgIT0gMDoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiUlBNIHNpZ25pbmcgZmFpbGVkIikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQyYTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3NpcC5iYmNsYXNzCkBAIC0wLDAgKzEsNjEgQEAKKyMgQnVpbGQgQ2xhc3MgZm9yIFNpcCBiYXNlZCBQeXRob24gQmluZGluZ3MKKyMgKEMpIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUBWYW5pbGxlLmRlPgorIworU1RBR0lOR19TSVBESVIgPz0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vc2lwIgorCitERVBFTkRTICA9KyAic2lwLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tc2lwIgorCisjIGRlZmF1bHQgc3R1ZmYsIGRvIG5vdCB1bmNvbW1lbnQKKyMgRVhUUkFfU0lQVEFHUyA9ICItdFdTX1gxMSAtdFF0XzRfM18wIgorCisjIGRvX2dlbmVyYXRlIGlzIGJlZm9yZSBkb19jb25maWd1cmUgc28gZW5zdXJlIHRoYXQgc2lwX25hdGl2ZSBpcyBwb3B1bGF0ZWQgaW4gc3lzcm9vdCBiZWZvcmUgZXhlY3V0aW5nIGl0Citkb19nZW5lcmF0ZVtkZXBlbmRzXSArPSAic2lwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitzaXBfZG9fZ2VuZXJhdGUoKSB7CisJaWYgWyAteiAiJHtTSVBfTU9EVUxFU30iIF07IHRoZW4gCisJCU1PRFVMRVM9ImBscyBzaXAvKm1vZC5zaXBgIgorCWVsc2UKKwkJTU9EVUxFUz0iJHtTSVBfTU9EVUxFU30iCisJZmkKKworCWlmIFsgLXogIiRNT0RVTEVTIiBdOyB0aGVuCisJCWRpZSAiU0lQX01PRFVMRVMgbm90IHNldCBhbmQgbm8gbW9kdWxlcyBmb3VuZCBpbiAkUFdEIgorICAgICAgICBlbHNlCisJCWJibm90ZSAidXNpbmcgbW9kdWxlcyAnJHtTSVBfTU9EVUxFU30nIGFuZCB0YWdzICcke0VYVFJBX1NJUFRBR1N9JyIKKwlmaQorCisJaWYgWyAteiAiJHtFWFRSQV9TSVBUQUdTfSIgXTsgdGhlbgorCQlkaWUgIkVYVFJBX1NJUFRBR1MgbmVlZHMgdG8gYmUgc2V0ISIKKwllbHNlCisJCVNJUFRBR1M9IiR7RVhUUkFfU0lQVEFHU30iCisJZmkKKworCWlmIFsgISAteiAiJHtTSVBfRkVBVFVSRVN9IiBdOyB0aGVuCisJCUZFQVRVUkVTPSIteiAke1NJUF9GRUFUVVJFU30iCisJCWJibm90ZSAic2lwIGZlYXR1cmUgZmlsZTogJHtTSVBfRkVBVFVSRVN9IgorCWZpCisKKwlmb3IgbW9kdWxlIGluICRNT0RVTEVTCisJZG8KKwkJaW5zdGFsbCAtZCAke21vZHVsZX0vCisJCWVjaG8gImNhbGxpbmcgJ3NpcDQgLUkgc2lwIC1JICR7U1RBR0lOR19TSVBESVJ9ICR7U0lQVEFHU30gJHtGRUFUVVJFU30gLWMgJHttb2R1bGV9IC1iICR7bW9kdWxlfS8ke21vZHVsZX0ucHJvLmluIHNpcC8ke21vZHVsZX0vJHttb2R1bGV9bW9kLnNpcCciCisJCXNpcDQgLUkgJHtTVEFHSU5HX1NJUERJUn0gLUkgc2lwICR7U0lQVEFHU30gJHtGRUFUVVJFU30gLWMgJHttb2R1bGV9IC1iICR7bW9kdWxlfS8ke21vZHVsZX0uc2JmIFwKKwkJCXNpcC8ke21vZHVsZX0vJHttb2R1bGV9bW9kLnNpcCB8fCBkaWUgIkVycm9yIGNhbGxpbmcgc2lwIG9uICR7bW9kdWxlfSIKKwkJc2VkIC1lICdzLHRhcmdldCxUQVJHRVQsJyAtZSAncyxzb3VyY2VzLFNPVVJDRVMsJyAtZSAncyxoZWFkZXJzLEhFQURFUlMsJyBcCisJCQkke21vZHVsZX0vJHttb2R1bGV9LnNiZiB8IHNlZCBzLCJtb2NfSEVBREVSUyA9IiwiSEVBREVSUyArPSIsIFwKKwkJCT4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQllY2hvICJURU1QTEFURT1saWIiID4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdCIgXSAJCSYmIGVjaG8gIiIgCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXRjYW52YXMiIF0gCSYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdHRhYmxlIiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXd0IiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXRwZSIgXSAgICAgICAgJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0cGUiIF0gICAgICAgICYmIGVjaG8gIkxJQlMrPS1scXBlIgk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCXRydWUKKwlkb25lCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fZ2VuZXJhdGUKKworYWRkdGFzayBnZW5lcmF0ZSBhZnRlciBkb191bnBhY2sgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NpdGVjb25maWcuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zaXRlY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkY2U0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zaXRlY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSwzMyBAQAorcHl0aG9uIHNpdGVjb25maWdfZG9fc2l0ZWNvbmZpZyAoKSB7CisJc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCisJaWYgc2hhcmVkX3N0YXRlWyd0YXNrJ10gIT0gJ3BvcHVsYXRlX3N5c3Jvb3QnOgorCQlyZXR1cm4KKwlpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0ZJTEVfRElSTkFNRScsIFRydWUpLCAnc2l0ZV9jb25maWcnKSk6CisJCWJiLmRlYnVnKDEsICJObyBzaXRlX2NvbmZpZyBkaXJlY3RvcnksIHNraXBwaW5nIGRvX3NpdGVjb25maWciKQorCQlyZXR1cm4KKwliYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3NpdGVjb25maWdfZ2VuY2FjaGUnLCBkKQorCXNzdGF0ZV9jbGVhbihzaGFyZWRfc3RhdGUsIGQpCisJc3N0YXRlX2luc3RhbGwoc2hhcmVkX3N0YXRlLCBkKQorfQorCitFWFRSQVNJVEVDT05GSUcgPz0gIiIKKworc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnX2dlbmNhY2hlICgpIHsKKwlta2RpciAtcCAke1dPUktESVJ9L3NpdGVfY29uZmlnXyR7TUFDSElORX0KKwlnZW4tc2l0ZS1jb25maWcgJHtGSUxFX0RJUk5BTUV9L3NpdGVfY29uZmlnIFwKKwkJPiR7V09SS0RJUn0vc2l0ZV9jb25maWdfJHtNQUNISU5FfS9jb25maWd1cmUuYWMKKwljZCAke1dPUktESVJ9L3NpdGVfY29uZmlnXyR7TUFDSElORX0KKwlhdXRvY29uZgorCXJtIC1mICR7QlBOfV9jYWNoZQorCUNPTkZJR19TSVRFPSIiICR7RVhUUkFTSVRFQ09ORklHfSAuL2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9IC0tY2FjaGUtZmlsZSAke0JQTn1fY2FjaGUKKwlzZWQgLW4gLWUgIi9hY19jdl9jX2JpZ2VuZGlhbi9wIiAtZSAiL2FjX2N2X3NpemVvZl8vcCIgXAorCQktZSAiL2FjX2N2X3R5cGVfL3AiIC1lICIvYWNfY3ZfaGVhZGVyXy9wIiAtZSAiL2FjX2N2X2Z1bmNfL3AiIFwKKwkJPCAke0JQTn1fY2FjaGUgPiAke0JQTn1fY29uZmlnCisJbWtkaXIgLXAgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS8ke1RBUkdFVF9TWVN9X2NvbmZpZ19zaXRlLmQKKwljcCAke0JQTn1fY29uZmlnICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kCisKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW50ZXJjZXB0ZnVuY3NdICs9ICJkb19zaXRlY29uZmlnICIKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19zaXRlY29uZmlnIGRvX3NpdGVjb25maWdfZ2VuY2FjaGUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NpdGVpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2ZWFjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzCkBAIC0wLDAgKzEsMTcxIEBACisjIFRoaXMgY2xhc3MgZXhpc3RzIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldHMgdGhhdAorIyBtYXkgYmUgbmVlZGVkIGJ5IG90aGVyIGNsYXNzZXMgYW5kL29yIHJlY2lwZXMuIElmIHlvdSBhZGQgYSBuZXcKKyMgdGFyZ2V0IHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisKKyMKKyMgUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCAnd2hhdCcgZm9yIHRoZSBuYW1lZCB0YXJnZXQgJ3RhcmdldCcKKyMgd2hlcmUgJ3RhcmdldCcgPT0gIjxhcmNoPi08b3M+IgorIworIyAnd2hhdCcgY2FuIGJlIG9uZSBvZgorIyAqIHRhcmdldDogUmV0dXJucyB0aGUgdGFyZ2V0IG5hbWUgKCI8YXJjaD4tPG9zPiIpCisjICogZW5kaWFuZXNzOiBSZXR1cm4gImJlIiBmb3IgYmlnIGVuZGlhbiB0YXJnZXRzLCAibGUiIGZvciBsaXR0bGUgZW5kaWFuCisjICogYml0czogUmV0dXJucyB0aGUgYml0IHNpemUgb2YgdGhlIHRhcmdldCwgZWl0aGVyICIzMiIgb3IgIjY0IgorIyAqIGxpYmM6IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGMgbGlicmFyeSB1c2VkIGJ5IHRoZSB0YXJnZXQKKyMKKyMgSXQgaXMgYW4gZXJyb3IgZm9yIHRoZSB0YXJnZXQgbm90IHRvIGV4aXN0LgorIyBJZiAnd2hhdCcgZG9lc24ndCBleGlzdCB0aGVuIGFuIGVtcHR5IHZhbHVlIGlzIHJldHVybmVkCisjCitkZWYgc2l0ZWluZm9fZGF0YShkKToKKyAgICBhcmNoaW5mbyA9IHsKKyAgICAgICAgImFsbGFyY2giOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIiLCAjIGJvZ3VzLCBidXQgYmV0dGVyIHRoYW4gc3BlY2lhbC1jYXNpbmcgdGhlIGNoZWNrcyBiZWxvdyBmb3IgYWxsYXJjaAorICAgICAgICAiYWFyY2g2NCI6ICJlbmRpYW4tbGl0dGxlIGJpdC02NCBhcm0tY29tbW9uIGFybS02NCIsCisgICAgICAgICJhYXJjaDY0X2JlIjogImVuZGlhbi1iaWcgYml0LTY0IGFybS1jb21tb24gYXJtLTY0IiwKKyAgICAgICAgImFybSI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBhcm0tY29tbW9uIGFybS0zMiIsCisgICAgICAgICJhcm1lYiI6ICJlbmRpYW4tYmlnIGJpdC0zMiBhcm0tY29tbW9uIGFybS0zMiIsCisgICAgICAgICJhdnIzMiI6ICJlbmRpYW4tYmlnIGJpdC0zMiBhdnIzMi1jb21tb24iLAorICAgICAgICAiYmZpbiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBiZmluLWNvbW1vbiIsCisgICAgICAgICJlcGlwaGFueSI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiIsCisgICAgICAgICJpMzg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImk0ODYiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAiaTU4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpNjg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImlhNjQiOiAiZW5kaWFuLWxpdHRsZSBiaXQtNjQiLAorICAgICAgICAibWljcm9ibGF6ZSI6ICJlbmRpYW4tYmlnIGJpdC0zMiBtaWNyb2JsYXplLWNvbW1vbiIsCisgICAgICAgICJtaWNyb2JsYXplZWIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWljcm9ibGF6ZS1jb21tb24iLAorICAgICAgICAibWljcm9ibGF6ZWVsIjogImVuZGlhbi1saXR0bGUgYml0LTMyIG1pY3JvYmxhemUtY29tbW9uIiwKKyAgICAgICAgIm1pcHMiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwczY0IjogImVuZGlhbi1iaWcgYml0LTY0IG1pcHMtY29tbW9uIiwKKyAgICAgICAgIm1pcHM2NGVsIjogImVuZGlhbi1saXR0bGUgYml0LTY0IG1pcHMtY29tbW9uIiwKKyAgICAgICAgIm1pcHNlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBtaXBzLWNvbW1vbiIsCisgICAgICAgICJwb3dlcnBjIjogImVuZGlhbi1iaWcgYml0LTMyIHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgIm5pb3MyIjogImVuZGlhbi1saXR0bGUgYml0LTMyIG5pb3MyLWNvbW1vbiIsCisgICAgICAgICJwb3dlcnBjNjQiOiAiZW5kaWFuLWJpZyBiaXQtNjQgcG93ZXJwYy1jb21tb24iLAorICAgICAgICAicHBjIjogImVuZGlhbi1iaWcgYml0LTMyIHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgInBwYzY0IjogImVuZGlhbi1iaWcgYml0LTY0IHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgInNoMyI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBzaC1jb21tb24iLAorICAgICAgICAic2g0IjogImVuZGlhbi1saXR0bGUgYml0LTMyIHNoLWNvbW1vbiIsCisgICAgICAgICJzcGFyYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiIsCisgICAgICAgICJ2aWFjMyI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJ4ODZfNjQiOiAiZW5kaWFuLWxpdHRsZSIsICMgYml0aW5mbyBzcGVjaWZpZWQgaW4gdGFyZ2V0aW5mbworICAgIH0KKyAgICBvc2luZm8gPSB7CisgICAgICAgICJkYXJ3aW4iOiAiY29tbW9uLWRhcndpbiIsCisgICAgICAgICJkYXJ3aW45IjogImNvbW1vbi1kYXJ3aW4iLAorICAgICAgICAibGludXgiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnUiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnV4MzIiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnVuMzIiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnVlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251c3BlIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtdWNsaWJjIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliY2VhYmkiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi11Y2xpYmMiLAorICAgICAgICAibGludXgtdWNsaWJjc3BlIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImxpbnV4LW11c2wiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1tdXNsIiwKKyAgICAgICAgImxpbnV4LW11c2xlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJsaW51eC1tdXNsc3BlIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJ1Y2xpbnV4LXVjbGliYyI6ICJjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImN5Z3dpbiI6ICJjb21tb24tY3lnd2luIiwKKyAgICAgICAgIm1pbmd3MzIiOiAiY29tbW9uLW1pbmd3IiwKKyAgICB9CisgICAgdGFyZ2V0aW5mbyA9IHsKKyAgICAgICAgImFhcmNoNjQtbGludXgtZ251IjogImFhcmNoNjQtbGludXgiLAorICAgICAgICAiYWFyY2g2NF9iZS1saW51eC1nbnUiOiAiYWFyY2g2NF9iZS1saW51eCIsCisgICAgICAgICJhcm0tbGludXgtZ251ZWFiaSI6ICJhcm0tbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LW11c2xlYWJpIjogImFybS1saW51eCIsCisgICAgICAgICJhcm0tbGludXgtdWNsaWJjZWFiaSI6ICJhcm0tbGludXgtdWNsaWJjIiwKKyAgICAgICAgImFybWViLWxpbnV4LWdudWVhYmkiOiAiYXJtZWItbGludXgiLAorICAgICAgICAiYXJtZWItbGludXgtdWNsaWJjZWFiaSI6ICJhcm1lYi1saW51eC11Y2xpYmMiLAorICAgICAgICAiYXJtZWItbGludXgtbXVzbGVhYmkiOiAiYXJtZWItbGludXgiLAorICAgICAgICAibWlwcy1saW51eC1tdXNsIjogIm1pcHMtbGludXgiLAorICAgICAgICAibWlwc2VsLWxpbnV4LW11c2wiOiAibWlwc2VsLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NC1saW51eC1tdXNsIjogIm1pcHMtbGludXgiLAorICAgICAgICAibWlwczY0ZWwtbGludXgtbXVzbCI6ICJtaXBzZWwtbGludXgiLAorICAgICAgICAibWlwczY0LWxpbnV4LWdudW4zMiI6ICJtaXBzLWxpbnV4IGJpdC0zMiIsCisgICAgICAgICJtaXBzNjRlbC1saW51eC1nbnVuMzIiOiAibWlwc2VsLWxpbnV4IGJpdC0zMiIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4IjogInBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LW11c2wiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC11Y2xpYmMiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC1nbnVzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC1tdXNsc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtdWNsaWJjc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IHBvd2VycGMtbGludXgtdWNsaWJjIiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eC1nbnVzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjNjQtbGludXgiLAorICAgICAgICAicG93ZXJwYzY0LWxpbnV4LW11c2xzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjNjQtbGludXgiLAorICAgICAgICAicG93ZXJwYzY0LWxpbnV4IjogInBvd2VycGMtbGludXgiLAorICAgICAgICAieDg2XzY0LWN5Z3dpbiI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWRhcndpbiI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWRhcndpbjkiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eCI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LW11c2wiOiAieDg2XzY0LWxpbnV4IGJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgtdWNsaWJjIjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtZWxmIjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgtZ251IjogImJpdC02NCB4ODZfNjQtbGludXgiLAorICAgICAgICAieDg2XzY0LWxpbnV4LWdudXgzMiI6ICJiaXQtMzIgaXg4Ni1jb21tb24geDMyLWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1taW5ndzMyIjogImJpdC02NCIsCisgICAgfQorCisgICAgaG9zdGFyY2ggPSBkLmdldFZhcigiSE9TVF9BUkNIIiwgVHJ1ZSkKKyAgICBob3N0b3MgPSBkLmdldFZhcigiSE9TVF9PUyIsIFRydWUpCisgICAgdGFyZ2V0ID0gIiVzLSVzIiAlIChob3N0YXJjaCwgaG9zdG9zKQorCisgICAgc2l0ZWRhdGEgPSBbXQorICAgIGlmIGhvc3RhcmNoIGluIGFyY2hpbmZvOgorICAgICAgICBzaXRlZGF0YS5leHRlbmQoYXJjaGluZm9baG9zdGFyY2hdLnNwbGl0KCkpCisgICAgaWYgaG9zdG9zIGluIG9zaW5mbzoKKyAgICAgICAgc2l0ZWRhdGEuZXh0ZW5kKG9zaW5mb1tob3N0b3NdLnNwbGl0KCkpCisgICAgaWYgdGFyZ2V0IGluIHRhcmdldGluZm86CisgICAgICAgIHNpdGVkYXRhLmV4dGVuZCh0YXJnZXRpbmZvW3RhcmdldF0uc3BsaXQoKSkKKyAgICBzaXRlZGF0YS5hcHBlbmQodGFyZ2V0KQorICAgIHNpdGVkYXRhLmFwcGVuZCgiY29tbW9uIikKKworICAgIGJiLmRlYnVnKDEsICJTSVRFIGZpbGVzICVzIiAlIHNpdGVkYXRhKTsKKyAgICByZXR1cm4gc2l0ZWRhdGEKKworcHl0aG9uICgpIHsKKyAgICBzaXRlZGF0YSA9IHNldChzaXRlaW5mb19kYXRhKGQpKQorICAgIGlmICJlbmRpYW4tbGl0dGxlIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0VORElBTk5FU1MiLCAibGUiKQorICAgIGVsaWYgImVuZGlhbi1iaWciIGluIHNpdGVkYXRhOgorICAgICAgICBkLnNldFZhcigiU0lURUlORk9fRU5ESUFOTkVTUyIsICJiZSIpCisgICAgZWxzZToKKyAgICAgICAgYmIuZXJyb3IoIlVuYWJsZSB0byBkZXRlcm1pbmUgZW5kaWFubmVzcyBmb3IgYXJjaGl0ZWN0dXJlICclcyciICUKKyAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpKQorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGFkZCB5b3VyIGFyY2hpdGVjdHVyZSB0byBzaXRlaW5mby5iYmNsYXNzIikKKworICAgIGlmICJiaXQtMzIiIGluIHNpdGVkYXRhOgorICAgICAgICBkLnNldFZhcigiU0lURUlORk9fQklUUyIsICIzMiIpCisgICAgZWxpZiAiYml0LTY0IiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0JJVFMiLCAiNjQiKQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIGJpdCBzaXplIGZvciBhcmNoaXRlY3R1cmUgJyVzJyIgJQorICAgICAgICAgICAgICAgICBkLmdldFZhcigiSE9TVF9BUkNIIiwgVHJ1ZSkpCisgICAgICAgIGJiLmZhdGFsKCJQbGVhc2UgYWRkIHlvdXIgYXJjaGl0ZWN0dXJlIHRvIHNpdGVpbmZvLmJiY2xhc3MiKQorfQorCitkZWYgc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIG5vX2NhY2hlID0gRmFsc2UpOgorICAgIHNpdGVkYXRhID0gc2l0ZWluZm9fZGF0YShkKQorICAgIHNpdGVmaWxlcyA9ICIiCisgICAgZm9yIHBhdGggaW4gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCI6Iik6CisgICAgICAgIGZvciBlbGVtZW50IGluIHNpdGVkYXRhOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgInNpdGUiLCBlbGVtZW50KQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIHNpdGVmaWxlcyArPSBmaWxlbmFtZSArICIgIgorCisgICAgaWYgbm9fY2FjaGU6IHJldHVybiBzaXRlZmlsZXMKKworICAgICMgTm93IGNoZWNrIGZvciBzaXRlY29uZmlnIGNhY2hlIGZpbGVzCisgICAgIyBVc2UgdGhlIGZpbGVzIGNvcGllZCB0byB0aGUgYWNsb2NhbCBjYWNoZSBnZW5lcmF0ZWQgYnkgYXV0b3Rvb2xzLmJiY2xhc3MKKyAgICAjIHRvIGF2b2lkIHJhY2VzCisgICAgcGF0aF9zaXRlY29uZmlnID0gZC5nZXRWYXIoJ0FDTE9DQUxESVInLCBUcnVlKQorICAgIGlmIHBhdGhfc2l0ZWNvbmZpZyBhbmQgb3MucGF0aC5pc2RpcihwYXRoX3NpdGVjb25maWcpOgorICAgICAgICBmb3IgaSBpbiBvcy5saXN0ZGlyKHBhdGhfc2l0ZWNvbmZpZyk6CisgICAgICAgICAgICBpZiBub3QgaS5lbmRzd2l0aCgiX2NvbmZpZyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoX3NpdGVjb25maWcsIGkpCisgICAgICAgICAgICBzaXRlZmlsZXMgKz0gZmlsZW5hbWUgKyAiICIKKworICAgIHJldHVybiBzaXRlZmlsZXMKKworIworIyBNYWtlIHNvbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHZpYSB2YXJpYWJsZXMKKyMKK1NJVEVDT05GSUdfU1lTUk9PVENBQ0hFID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1RBUkdFVF9TWVN9X2NvbmZpZ19zaXRlLmQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTRjNTNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcwpAQCAtMCwwICsxLDM2NSBAQAorIyBUaGlzIGNsYXNzIGludGVncmF0ZXMgcmVhbC10aW1lIGxpY2Vuc2Ugc2Nhbm5pbmcsIGdlbmVyYXRpb24gb2YgU1BEWCBzdGFuZGFyZAorIyBvdXRwdXQgYW5kIHZlcmlmaXlpbmcgbGljZW5zZSBpbmZvIGR1cmluZyB0aGUgYnVpbGRpbmcgcHJvY2Vzcy4KKyMgSXQgaXMgYSBjb21iaW5hdGlvbiBvZiBlZmZvcnRzIGZyb20gdGhlIE9FLUNvcmUsIFNQRFggYW5kIEZvc3NvbG9neSBwcm9qZWN0cy4KKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5OgorIyAgIGh0dHA6Ly93d3cuZm9zc29sb2d5Lm9yZworIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBGT1NTb2xvZ3lTUERYIGNvbW1hbmRsaW5lOgorIyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zcGR4LXRvb2xzL2Zvc3NvbG9neS1zcGR4L3dpa2kvRm9zc29sb2d5LVNQRFgtV2ViLUFQSQorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTUERYOgorIyAgIGh0dHA6Ly93d3cuc3BkeC5vcmcKKyMKKworIyBTUERYIGZpbGUgd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHBhdGggd2hpY2ggaXMgZGVmaW5lZCBhc1tTUERYX01BTklGRVNUX0RJUl0gCisjIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYuCisKK1NQRFhTU1RBVEVESVIgPSAiJHtXT1JLRElSfS9zcGR4X3NzdGF0ZV9kaXIiCisKKyMgSWYgJHtTfSBpc24ndCBhY3R1YWxseSB0aGUgdG9wLWxldmVsIHNvdXJjZSBkaXJlY3RvcnksIHNldCBTUERYX1MgdG8gcG9pbnQgYXQKKyMgdGhlIHJlYWwgdG9wLWxldmVsIGRpcmVjdG9yeS4KK1NQRFhfUyA/PSAiJHtTfSIKKworcHl0aG9uIGRvX3NwZHggKCkgeworICAgIGltcG9ydCBvcywgc3lzCisgICAgaW1wb3J0IGpzb24sIHNodXRpbAorCisgICAgaW5mbyA9IHt9IAorICAgIGluZm9bJ3dvcmtkaXInXSA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpbmZvWydzb3VyY2VkaXInXSA9IGQuZ2V0VmFyKCdTUERYX1MnLCBUcnVlKQorICAgIGluZm9bJ3BuJ10gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGluZm9bJ3B2J10gPSBkLmdldFZhcignUFYnLCBUcnVlKQorICAgIGluZm9bJ3NwZHhfdmVyc2lvbiddID0gZC5nZXRWYXIoJ1NQRFhfVkVSU0lPTicsIFRydWUpCisgICAgaW5mb1snZGF0YV9saWNlbnNlJ10gPSBkLmdldFZhcignREFUQV9MSUNFTlNFJywgVHJ1ZSkKKworICAgIHNzdGF0ZWRpciA9IGQuZ2V0VmFyKCdTUERYU1NUQVRFRElSJywgVHJ1ZSkKKyAgICBzc3RhdGVmaWxlID0gb3MucGF0aC5qb2luKHNzdGF0ZWRpciwgaW5mb1sncG4nXSArIGluZm9bJ3B2J10gKyAiLnNwZHgiKQorCisgICAgbWFuaWZlc3RfZGlyID0gZC5nZXRWYXIoJ1NQRFhfTUFOSUZFU1RfRElSJywgVHJ1ZSkKKyAgICBpbmZvWydvdXRmaWxlJ10gPSBvcy5wYXRoLmpvaW4obWFuaWZlc3RfZGlyLCBpbmZvWydwbiddICsgIi5zcGR4IiApCisKKyAgICBpbmZvWydzcGR4X3RlbXBfZGlyJ10gPSBkLmdldFZhcignU1BEWF9URU1QX0RJUicsIFRydWUpCisgICAgaW5mb1sndGFyX2ZpbGUnXSA9IG9zLnBhdGguam9pbihpbmZvWyd3b3JrZGlyJ10sIGluZm9bJ3BuJ10gKyAiLnRhci5neiIgKQorCisgICAgIyBNYWtlIHN1cmUgaW1wb3J0YW50IGRpcnMgZXhpc3QKKyAgICB0cnk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihtYW5pZmVzdF9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzc3RhdGVkaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihpbmZvWydzcGR4X3RlbXBfZGlyJ10pCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoIlNQRFg6IENvdWxkIG5vdCBzZXQgdXAgcmVxdWlyZWQgZGlyZWN0b3JpZXM6ICIgKyBzdHIoZSkpCisgICAgICAgIHJldHVybgorCisgICAgIyMgZ2V0IGV2ZXJ5dGhpbmcgZnJvbSBjYWNoZS4gIHVzZSBpdCB0byBkZWNpZGUgaWYgCisgICAgIyMgc29tZXRoaW5nIG5lZWRzIHRvIGJlIHJlcnVuIAorICAgIGN1cl92ZXJfY29kZSA9IGdldF92ZXJfY29kZShpbmZvWydzb3VyY2VkaXInXSkKKyAgICBjYWNoZV9jdXIgPSBGYWxzZQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHNzdGF0ZWZpbGUpOgorICAgICAgICAjIyBjYWNoZSBmb3IgdGhpcyBwYWNrYWdlIGV4aXN0cy4gcmVhZCBpdCBpbgorICAgICAgICBjYWNoZWRfc3BkeCA9IGdldF9jYWNoZWRfc3BkeChzc3RhdGVmaWxlKQorCisgICAgICAgIGlmIGNhY2hlZF9zcGR4WydQYWNrYWdlVmVyaWZpY2F0aW9uQ29kZSddID09IGN1cl92ZXJfY29kZToKKyAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IFZlcmlmaWNhdGlvbiBjb2RlIGZvciAiICsgaW5mb1sncG4nXQorICAgICAgICAgICAgICAgICAgKyAiaXMgc2FtZSBhcyBjYWNoZSdzLiBkbyBub3RoaW5nIikKKyAgICAgICAgICAgIGNhY2hlX2N1ciA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvY2FsX2ZpbGVfaW5mbyA9IHNldHVwX2Zvc3Nfc2NhbihpbmZvLCBUcnVlLCBjYWNoZWRfc3BkeFsnRmlsZXMnXSkKKyAgICBlbHNlOgorICAgICAgICBsb2NhbF9maWxlX2luZm8gPSBzZXR1cF9mb3NzX3NjYW4oaW5mbywgRmFsc2UsIE5vbmUpCisKKyAgICBpZiBjYWNoZV9jdXI6CisgICAgICAgIHNwZHhfZmlsZV9pbmZvID0gY2FjaGVkX3NwZHhbJ0ZpbGVzJ10KKyAgICAgICAgZm9zc19wYWNrYWdlX2luZm8gPSBjYWNoZWRfc3BkeFsnUGFja2FnZSddCisgICAgICAgIGZvc3NfbGljZW5zZV9pbmZvID0gY2FjaGVkX3NwZHhbJ0xpY2Vuc2VzJ10KKyAgICBlbHNlOgorICAgICAgICAjIyBzZXR1cCBmb3Nzb2xvZ3kgY29tbWFuZAorICAgICAgICBmb3NzX3NlcnZlciA9IGQuZ2V0VmFyKCdGT1NTX1NFUlZFUicsIFRydWUpCisgICAgICAgIGZvc3NfZmxhZ3MgPSBkLmdldFZhcignRk9TU19XR0VUX0ZMQUdTJywgVHJ1ZSkKKyAgICAgICAgZm9zc19mdWxsX3NwZHggPSBkLmdldFZhcignRk9TU19GVUxMX1NQRFgnLCBUcnVlKSA9PSAidHJ1ZSIgb3IgRmFsc2UKKyAgICAgICAgZm9zc19jb21tYW5kID0gIndnZXQgJXMgLS1wb3N0LWZpbGU9JXMgJXMiXAorICAgICAgICAgICAgJSAoZm9zc19mbGFncywgaW5mb1sndGFyX2ZpbGUnXSwgZm9zc19zZXJ2ZXIpCisgICAgICAgIAorICAgICAgICBmb3NzX3Jlc3VsdCA9IHJ1bl9mb3Nzb2xvZ3koZm9zc19jb21tYW5kLCBmb3NzX2Z1bGxfc3BkeCkKKyAgICAgICAgaWYgZm9zc19yZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAoZm9zc19wYWNrYWdlX2luZm8sIGZvc3NfZmlsZV9pbmZvLCBmb3NzX2xpY2Vuc2VfaW5mbykgPSBmb3NzX3Jlc3VsdAorICAgICAgICAgICAgc3BkeF9maWxlX2luZm8gPSBjcmVhdGVfc3BkeF9kb2MobG9jYWxfZmlsZV9pbmZvLCBmb3NzX2ZpbGVfaW5mbykKKyAgICAgICAgICAgICMjIHdyaXRlIHRvIGNhY2hlCisgICAgICAgICAgICB3cml0ZV9jYWNoZWRfc3BkeChzc3RhdGVmaWxlLCBjdXJfdmVyX2NvZGUsIGZvc3NfcGFja2FnZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BkeF9maWxlX2luZm8sIGZvc3NfbGljZW5zZV9pbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoIlNQRFg6IENvdWxkIG5vdCBjb21tdW5pY2F0ZSB3aXRoIEZPU1NvbG9neSBzZXJ2ZXIuIENvbW1hbmQgd2FzOiAiICsgZm9zc19jb21tYW5kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgCisgICAgIyMgR2V0IGRvY3VtZW50IGFuZCBwYWNrYWdlIGxldmVsIGluZm9ybWF0aW9uCisgICAgc3BkeF9oZWFkZXJfaW5mbyA9IGdldF9oZWFkZXJfaW5mbyhpbmZvLCBjdXJfdmVyX2NvZGUsIGZvc3NfcGFja2FnZV9pbmZvKQorICAgIAorICAgICMjIENSRUFURSBNQU5JRkVTVAorICAgIGNyZWF0ZV9tYW5pZmVzdChpbmZvLCBzcGR4X2hlYWRlcl9pbmZvLCBzcGR4X2ZpbGVfaW5mbywgZm9zc19saWNlbnNlX2luZm8pCisKKyAgICAjIyBjbGVhbiB1cCB0aGUgdGVtcCBzdHVmZgorICAgIHNodXRpbC5ybXRyZWUoaW5mb1snc3BkeF90ZW1wX2RpciddLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5mb1sndGFyX2ZpbGUnXSk6CisgICAgICAgIHJlbW92ZV9maWxlKGluZm9bJ3Rhcl9maWxlJ10pCit9CithZGR0YXNrIHNwZHggYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQorCitkZWYgY3JlYXRlX21hbmlmZXN0KGluZm8sIGhlYWRlciwgZmlsZXMsIGxpY2Vuc2VzKToKKyAgICBpbXBvcnQgY29kZWNzCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvWydvdXRmaWxlJ10sIG1vZGU9J3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICAjIFdyaXRlIGhlYWRlcgorICAgICAgICBmLndyaXRlKGhlYWRlciArICdcbicpCisKKyAgICAgICAgIyBXcml0ZSBmaWxlIGRhdGEKKyAgICAgICAgZm9yIGNoa3N1bSwgYmxvY2sgaW4gZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmLndyaXRlKCJGaWxlTmFtZTogIiArIGJsb2NrWydGaWxlTmFtZSddICsgJ1xuJykKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGJsb2NrLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBrZXkgPT0gJ0ZpbGVOYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShrZXkgKyAiOiAiICsgdmFsdWUgKyAnXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG4nKQorCisgICAgICAgICMgV3JpdGUgbGljZW5zZSBkYXRhCisgICAgICAgIGZvciBpZCwgYmxvY2sgaW4gbGljZW5zZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmLndyaXRlKCJMaWNlbnNlSUQ6ICIgKyBpZCArICdcbicpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBibG9jay5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKGtleSArICI6ICIgKyB2YWx1ZSArICdcbicpCisgICAgICAgICAgICBmLndyaXRlKCdcbicpCisKK2RlZiBnZXRfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSk6CisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgY29kZWNzCisgICAgY2FjaGVkX3NwZHhfaW5mbyA9IHt9CisgICAgd2l0aCBjb2RlY3Mub3Blbihzc3RhdGVmaWxlLCBtb2RlPSdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FjaGVkX3NwZHhfaW5mbyA9IGpzb24ubG9hZChmKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgY2FjaGVkX3NwZHhfaW5mbyA9IE5vbmUKKyAgICByZXR1cm4gY2FjaGVkX3NwZHhfaW5mbworCitkZWYgd3JpdGVfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSwgdmVyX2NvZGUsIHBhY2thZ2VfaW5mbywgZmlsZXMsIGxpY2Vuc2VfaW5mbyk6CisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgY29kZWNzCisgICAgc3BkeF9kb2MgPSB7fQorICAgIHNwZHhfZG9jWydQYWNrYWdlVmVyaWZpY2F0aW9uQ29kZSddID0gdmVyX2NvZGUKKyAgICBzcGR4X2RvY1snRmlsZXMnXSA9IHt9CisgICAgc3BkeF9kb2NbJ0ZpbGVzJ10gPSBmaWxlcworICAgIHNwZHhfZG9jWydQYWNrYWdlJ10gPSB7fQorICAgIHNwZHhfZG9jWydQYWNrYWdlJ10gPSBwYWNrYWdlX2luZm8KKyAgICBzcGR4X2RvY1snTGljZW5zZXMnXSA9IHt9CisgICAgc3BkeF9kb2NbJ0xpY2Vuc2VzJ10gPSBsaWNlbnNlX2luZm8KKyAgICB3aXRoIGNvZGVjcy5vcGVuKHNzdGF0ZWZpbGUsIG1vZGU9J3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGpzb24uZHVtcHMoc3BkeF9kb2MpKQorCitkZWYgc2V0dXBfZm9zc19zY2FuKGluZm8sIGNhY2hlLCBjYWNoZWRfZmlsZXMpOgorICAgIGltcG9ydCBlcnJubywgc2h1dGlsCisgICAgaW1wb3J0IHRhcmZpbGUKKyAgICBmaWxlX2luZm8gPSB7fQorICAgIGNhY2hlX2RpY3QgPSB7fQorCisgICAgZm9yIGZfZGlyLCBmIGluIGxpc3RfZmlsZXMoaW5mb1snc291cmNlZGlyJ10pOgorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZl9kaXIsIGYpCisgICAgICAgIGFic19wYXRoID0gb3MucGF0aC5qb2luKGluZm9bJ3NvdXJjZWRpciddLCBmdWxsX3BhdGgpCisgICAgICAgIGRlc3RfZGlyID0gb3MucGF0aC5qb2luKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgZl9kaXIpCisgICAgICAgIGRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGZ1bGxfcGF0aCkKKworICAgICAgICBjaGVja3N1bSA9IGhhc2hfZmlsZShhYnNfcGF0aCkKKyAgICAgICAgaWYgbm90IGNoZWNrc3VtIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlX2luZm9bY2hlY2tzdW1dID0ge30KKyAgICAgICAgICAgICMjIHJldGFpbiBjYWNoZSBpbmZvcm1hdGlvbiBpZiBpdCBleGlzdHMKKyAgICAgICAgICAgIGlmIGNhY2hlIGFuZCBjaGVja3N1bSBpbiBjYWNoZWRfZmlsZXM6CisgICAgICAgICAgICAgICAgZmlsZV9pbmZvW2NoZWNrc3VtXSA9IGNhY2hlZF9maWxlc1tjaGVja3N1bV0KKyAgICAgICAgICAgICMjIGhhdmUgdGhlIGZpbGUgaW5jbHVkZWQgaW4gd2hhdCdzIHNlbnQgdG8gdGhlIEZPU1NvbG9neSBzZXJ2ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZV9pbmZvW2NoZWNrc3VtXVsnRmlsZU5hbWUnXSA9IGZ1bGxfcGF0aAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RfZGlyKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoYWJzX3BhdGgsIGRlc3RfcGF0aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBta2RpcmhpZXIgZmFpbGVkOiAiICsgc3RyKGUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzaHV0aWwuRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU1BEWDogY29weWZpbGUgZmFpbGVkOiAiICsgc3RyKGUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IGNvcHlmaWxlIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IENvdWxkIG5vdCBnZXQgY2hlY2tzdW0gZm9yIGZpbGU6ICIgKyBmKQorICAgIAorICAgIHdpdGggdGFyZmlsZS5vcGVuKGluZm9bJ3Rhcl9maWxlJ10sICJ3Omd6IikgYXMgdGFyOgorICAgICAgICB0YXIuYWRkKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKGluZm9bJ3NwZHhfdGVtcF9kaXInXSkpCisgICAgCisgICAgcmV0dXJuIGZpbGVfaW5mbworCitkZWYgcmVtb3ZlX2ZpbGUoZmlsZV9uYW1lKToKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShmaWxlX25hbWUpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgcGFzcworCitkZWYgbGlzdF9maWxlcyhkaXIpOgorICAgIGZvciByb290LCBzdWJGb2xkZXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgcmVsX3Jvb3QgPSBvcy5wYXRoLnJlbHBhdGgocm9vdCwgZGlyKQorICAgICAgICAgICAgeWllbGQgcmVsX3Jvb3QsIGYKKyAgICByZXR1cm4KKworZGVmIGhhc2hfZmlsZShmaWxlX25hbWUpOgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVfbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGRhdGFfc3RyaW5nID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNoYTEgPSBoYXNoX3N0cmluZyhkYXRhX3N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBzaGExCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgaGFzaF9zdHJpbmcoZGF0YSk6CisgICAgaW1wb3J0IGhhc2hsaWIKKyAgICBzaGExID0gaGFzaGxpYi5zaGExKCkKKyAgICBzaGExLnVwZGF0ZShkYXRhKQorICAgIHJldHVybiBzaGExLmhleGRpZ2VzdCgpCisKK2RlZiBydW5fZm9zc29sb2d5KGZvc3NfY29tbWFuZCwgZnVsbF9zcGR4KToKKyAgICBpbXBvcnQgc3RyaW5nLCByZQorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oZm9zc19jb21tYW5kLnNwbGl0KCksCisgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgZm9zc19vdXRwdXQsIGZvc3NfZXJyb3IgPSBwLmNvbW11bmljYXRlKCkKKyAgICBpZiBwLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGZvc3Nfb3V0cHV0ID0gdW5pY29kZShmb3NzX291dHB1dCwgInV0Zi04IikKKyAgICBmb3NzX291dHB1dCA9IHN0cmluZy5yZXBsYWNlKGZvc3Nfb3V0cHV0LCAnXHInLCAnJykKKworICAgICMgUGFja2FnZSBpbmZvCisgICAgcGFja2FnZV9pbmZvID0ge30KKyAgICBpZiBmdWxsX3NwZHg6CisgICAgICAgICMgQWxsIG1hbmRhdG9yeSwgb25seSBvbmUgb2NjdXJhbmNlCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUNvcHlyaWdodFRleHQnXSA9IHJlLmZpbmRhbGwoJ1BhY2thZ2VDb3B5cmlnaHRUZXh0OiAoLio/PC90ZXh0PiknLCBmb3NzX291dHB1dCwgcmUuUylbMF0KKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZURlY2xhcmVkOiAoLiopJywgZm9zc19vdXRwdXQpWzBdCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQnXSA9IHJlLmZpbmRhbGwoJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkOiAoLiopJywgZm9zc19vdXRwdXQpWzBdCisgICAgICAgICMgVGhlc2UgbWF5IGJlIG1vcmUgdGhhbiBvbmUKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXMnXSA9IHJlLmZpbmRhbGwoJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlczogKC4qKScsIGZvc3Nfb3V0cHV0KQorICAgIGVsc2U6CisgICAgICAgIERFRkFVTFQgPSAiTk9BU1NFUlRJT04iCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUNvcHlyaWdodFRleHQnXSA9ICI8dGV4dD4iICsgREVGQVVMVCArICI8L3RleHQ+IgorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlRGVjbGFyZWQnXSA9IERFRkFVTFQKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUNvbmNsdWRlZCddID0gREVGQVVMVAorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlcyddID0gW10KKworICAgICMgRmlsZSBpbmZvCisgICAgZmlsZV9pbmZvID0ge30KKyAgICByZWNvcmRzID0gW10KKyAgICAjIEZpbGVOYW1lIGlzIGFsc28gaW4gUGFja2FnZUZpbGVOYW1lLCBzbyB3ZSBtYXRjaCBvbiBGaWxlVHlwZSBhcyB3ZWxsLgorICAgIHJlY29yZHMgPSByZS5maW5kYWxsKCdGaWxlTmFtZTouKj9GaWxlVHlwZTouKj88L3RleHQ+JywgZm9zc19vdXRwdXQsIHJlLlMpCisgICAgZm9yIHJlYyBpbiByZWNvcmRzOgorICAgICAgICBjaGtzdW0gPSByZS5maW5kYWxsKCdGaWxlQ2hlY2tzdW06IFNIQTE6ICguKilcbicsIHJlYylbMF0KKyAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV0gPSB7fQorICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNvcHlyaWdodFRleHQnXSA9IHJlLmZpbmRhbGwoJ0ZpbGVDb3B5cmlnaHRUZXh0OiAnCisgICAgICAgICAgICArICcoLio/PC90ZXh0PiknLCByZWMsIHJlLlMgKVswXQorICAgICAgICBmaWVsZHMgPSBbJ0ZpbGVOYW1lJywgJ0ZpbGVUeXBlJywgJ0xpY2Vuc2VDb25jbHVkZWQnLCAnTGljZW5zZUluZm9JbkZpbGUnXQorICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRzOgorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bZmllbGRdID0gcmUuZmluZGFsbChmaWVsZCArICc6ICguKiknLCByZWMpWzBdCisKKyAgICAjIExpY2Vuc2VzCisgICAgbGljZW5zZV9pbmZvID0ge30KKyAgICBsaWNlbnNlcyA9IFtdCisgICAgbGljZW5zZXMgPSByZS5maW5kYWxsKCdMaWNlbnNlSUQ6Lio/TGljZW5zZU5hbWU6Lio/XG4nLCBmb3NzX291dHB1dCwgcmUuUykKKyAgICBmb3IgbGljIGluIGxpY2Vuc2VzOgorICAgICAgICBsaWNlbnNlX2lkID0gcmUuZmluZGFsbCgnTGljZW5zZUlEOiAoLiopXG4nLCBsaWMpWzBdCisgICAgICAgIGxpY2Vuc2VfaW5mb1tsaWNlbnNlX2lkXSA9IHt9CisgICAgICAgIGxpY2Vuc2VfaW5mb1tsaWNlbnNlX2lkXVsnRXh0cmFjdGVkVGV4dCddID0gcmUuZmluZGFsbCgnRXh0cmFjdGVkVGV4dDogKC4qPzwvdGV4dD4pJywgbGljLCByZS5TKVswXQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF1bJ0xpY2Vuc2VOYW1lJ10gPSByZS5maW5kYWxsKCdMaWNlbnNlTmFtZTogKC4qKScsIGxpYylbMF0KKworICAgIHJldHVybiAocGFja2FnZV9pbmZvLCBmaWxlX2luZm8sIGxpY2Vuc2VfaW5mbykKKworZGVmIGNyZWF0ZV9zcGR4X2RvYyhmaWxlX2luZm8sIHNjYW5uZWRfZmlsZXMpOgorICAgIGltcG9ydCBqc29uCisgICAgIyMgcHVzaCBmb3NzIGNoYW5nZXMgYmFjayBpbnRvIGNhY2hlCisgICAgZm9yIGNoa3N1bSwgbGljX2luZm8gaW4gc2Nhbm5lZF9maWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgY2hrc3VtIGluIGZpbGVfaW5mbzoKKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydGaWxlVHlwZSddID0gbGljX2luZm9bJ0ZpbGVUeXBlJ10KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydGaWxlQ2hlY2tzdW06IFNIQTEnXSA9IGNoa3N1bQorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0xpY2Vuc2VJbmZvSW5GaWxlJ10gPSBsaWNfaW5mb1snTGljZW5zZUluZm9JbkZpbGUnXQorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0xpY2Vuc2VDb25jbHVkZWQnXSA9IGxpY19pbmZvWydMaWNlbnNlQ29uY2x1ZGVkJ10KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydGaWxlQ29weXJpZ2h0VGV4dCddID0gbGljX2luZm9bJ0ZpbGVDb3B5cmlnaHRUZXh0J10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6ICIgKyBsaWNfaW5mb1snRmlsZU5hbWUnXSArICIgOiAiICsgY2hrc3VtCisgICAgICAgICAgICAgICAgKyAiIDogaXMgbm90IGluIHRoZSBsb2NhbCBmaWxlIGluZm86ICIKKyAgICAgICAgICAgICAgICArIGpzb24uZHVtcHMobGljX2luZm8sIGluZGVudD0xKSkKKyAgICByZXR1cm4gZmlsZV9pbmZvCisKK2RlZiBnZXRfdmVyX2NvZGUoZGlybmFtZSk6CisgICAgY2hrc3VtcyA9IFtdCisgICAgZm9yIGZfZGlyLCBmIGluIGxpc3RfZmlsZXMoZGlybmFtZSk6CisgICAgICAgIGhhc2ggPSBoYXNoX2ZpbGUob3MucGF0aC5qb2luKGRpcm5hbWUsIGZfZGlyLCBmKSkKKyAgICAgICAgaWYgbm90IGhhc2ggaXMgTm9uZToKKyAgICAgICAgICAgIGNoa3N1bXMuYXBwZW5kKGhhc2gpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBDb3VsZCBub3QgaGFzaCBmaWxlOiAiICsgcGF0aCkKKyAgICB2ZXJfY29kZV9zdHJpbmcgPSAnJy5qb2luKGNoa3N1bXMpLmxvd2VyKCkKKyAgICB2ZXJfY29kZSA9IGhhc2hfc3RyaW5nKHZlcl9jb2RlX3N0cmluZykKKyAgICByZXR1cm4gdmVyX2NvZGUKKworZGVmIGdldF9oZWFkZXJfaW5mbyhpbmZvLCBzcGR4X3ZlcmlmaWNhdGlvbl9jb2RlLCBwYWNrYWdlX2luZm8pOgorICAgICIiIgorICAgICAgICBQdXQgdG9nZXRoZXIgdGhlIGhlYWRlciBTUERYIGluZm9ybWF0aW9uLgorICAgICAgICBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmVjb21lIGEgbG90IGxlc3MKKyAgICAgICAgb2YgYSBoYXJkY29kZWQgdGhpbmcuCisgICAgIiIiCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKyAgICBpbXBvcnQgb3MKKyAgICBoZWFkID0gW10KKyAgICBERUZBVUxUID0gIk5PQVNTRVJUSU9OIgorCisgICAgcGFja2FnZV9jaGVja3N1bSA9IGhhc2hfZmlsZShpbmZvWyd0YXJfZmlsZSddKQorICAgIGlmIHBhY2thZ2VfY2hlY2tzdW0gaXMgTm9uZToKKyAgICAgICAgcGFja2FnZV9jaGVja3N1bSA9IERFRkFVTFQKKworICAgICMjIGRvY3VtZW50IGxldmVsIGluZm9ybWF0aW9uCisgICAgaGVhZC5hcHBlbmQoIiMjIFNQRFggRG9jdW1lbnQgSW5mb3JtYXRpb24iKQorICAgIGhlYWQuYXBwZW5kKCJTUERYVmVyc2lvbjogIiArIGluZm9bJ3NwZHhfdmVyc2lvbiddKQorICAgIGhlYWQuYXBwZW5kKCJEYXRhTGljZW5zZTogIiArIGluZm9bJ2RhdGFfbGljZW5zZSddKQorICAgIGhlYWQuYXBwZW5kKCJEb2N1bWVudENvbW1lbnQ6IDx0ZXh0PlNQRFggZm9yICIKKyAgICAgICAgKyBpbmZvWydwbiddICsgIiB2ZXJzaW9uICIgKyBpbmZvWydwdiddICsgIjwvdGV4dD4iKQorICAgIGhlYWQuYXBwZW5kKCIiKQorCisgICAgIyMgQ3JlYXRvciBpbmZvcm1hdGlvbgorICAgICMjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGdpdmUgdGltZSBpbiBVVEMuCisgICAgbm93ID0gZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpCisgICAgaGVhZC5hcHBlbmQoIiMjIENyZWF0aW9uIEluZm9ybWF0aW9uIikKKyAgICAjIyBUb29scyBhcmUgc3VwcG9zZWQgdG8gaGF2ZSBhIHZlcnNpb24sIGJ1dCBGT1NTb2xvZ3krU1BEWCBwcm92aWRlcyBub25lLgorICAgIGhlYWQuYXBwZW5kKCJDcmVhdG9yOiBUb29sOiBGT1NTb2xvZ3krU1BEWCIpCisgICAgaGVhZC5hcHBlbmQoIkNyZWF0ZWQ6ICIgKyBub3cpCisgICAgaGVhZC5hcHBlbmQoIkNyZWF0b3JDb21tZW50OiA8dGV4dD5VTk88L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgICMjIHBhY2thZ2UgbGV2ZWwgaW5mb3JtYXRpb24KKyAgICBoZWFkLmFwcGVuZCgiIyMgUGFja2FnZSBJbmZvcm1hdGlvbiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VOYW1lOiAiICsgaW5mb1sncG4nXSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVZlcnNpb246ICIgKyBpbmZvWydwdiddKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlRmlsZU5hbWU6ICIgKyBvcy5wYXRoLmJhc2VuYW1lKGluZm9bJ3Rhcl9maWxlJ10pKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlU3VwcGxpZXI6IFBlcnNvbjoiICsgREVGQVVMVCkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZURvd25sb2FkTG9jYXRpb246ICIgKyBERUZBVUxUKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlU3VtbWFyeTogPHRleHQ+PC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VPcmlnaW5hdG9yOiBQZXJzb246IiArIERFRkFVTFQpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VDaGVja3N1bTogU0hBMTogIiArIHBhY2thZ2VfY2hlY2tzdW0pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VWZXJpZmljYXRpb25Db2RlOiAiICsgc3BkeF92ZXJpZmljYXRpb25fY29kZSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZURlc2NyaXB0aW9uOiA8dGV4dD4iICsgaW5mb1sncG4nXQorICAgICAgICArICIgdmVyc2lvbiAiICsgaW5mb1sncHYnXSArICI8L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiIikKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUNvcHlyaWdodFRleHQ6ICIKKyAgICAgICAgKyBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10pCisgICAgaGVhZC5hcHBlbmQoIiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VMaWNlbnNlRGVjbGFyZWQ6ICIKKyAgICAgICAgKyBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlRGVjbGFyZWQnXSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQ6ICIKKyAgICAgICAgKyBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkJ10pCisKKyAgICBmb3IgbGljcmVmIGluIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzJ106CisgICAgICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXM6ICIgKyBsaWNyZWYpCisgICAgaGVhZC5hcHBlbmQoIiIpCisgICAgCisgICAgIyMgaGVhZGVyIGZvciBmaWxlIGxldmVsCisgICAgaGVhZC5hcHBlbmQoIiMjIEZpbGUgSW5mb3JtYXRpb24iKQorICAgIGhlYWQuYXBwZW5kKCIiKQorCisgICAgcmV0dXJuICdcbicuam9pbihoZWFkKQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YWQ2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc3N0YXRlLmJiY2xhc3MKQEAgLTAsMCArMSw5NTEgQEAKK1NTVEFURV9WRVJTSU9OID0gIjMiCisKK1NTVEFURV9NQU5JRkVTVFMgPz0gIiR7VE1QRElSfS9zc3RhdGUtY29udHJvbCIKK1NTVEFURV9NQU5GSUxFUFJFRklYID0gIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtTU1RBVEVfTUFOTUFDSH0tJHtQTn0iCisKK2RlZiBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBoYXNoLCBkKToKKyAgICBpZiBub3QgaGFzaDoKKyAgICAgICAgaGFzaCA9ICJJTlZBTElEIgorICAgIHJldHVybiBoYXNoWzoyXSArICIvIiArIHNwZWMgKyBoYXNoCisKK1NTVEFURV9QS0dBUkNIICAgID0gIiR7UEFDS0FHRV9BUkNIfSIKK1NTVEFURV9QS0dTUEVDICAgID0gInNzdGF0ZToke1BOfToke1BBQ0tBR0VfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfToke1BWfToke1BSfToke1NTVEFURV9QS0dBUkNIfToke1NTVEFURV9WRVJTSU9OfToiCitTU1RBVEVfU1dTUEVDICAgICA9ICJzc3RhdGU6JHtCUE59Ojoke1BWfToke1BSfTo6JHtTU1RBVEVfVkVSU0lPTn06IgorU1NUQVRFX1BLR05BTUUgICAgPSAiJHtTU1RBVEVfRVhUUkFQQVRIfSR7QGdlbmVyYXRlX3NzdGF0ZWZuKGQuZ2V0VmFyKCdTU1RBVEVfUEtHU1BFQycsIFRydWUpLCBkLmdldFZhcignQkJfVEFTS0hBU0gnLCBUcnVlKSwgZCl9IgorU1NUQVRFX1BLRyAgICAgICAgPSAiJHtTU1RBVEVfRElSfS8ke1NTVEFURV9QS0dOQU1FfSIKK1NTVEFURV9FWFRSQVBBVEggICA9ICIiCitTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkQgPSAiIgorU1NUQVRFX1BBVEhTUEVDICAgPSAiJHtTU1RBVEVfRElSfS8ke1NTVEFURV9FWFRSQVBBVEhXSUxEQ0FSRH0qLyR7U1NUQVRFX1BLR1NQRUN9IgorCisjIFdlIGRvbid0IHdhbnQgdGhlIHNzdGF0ZSB0byBkZXBlbmQgb24gdGhpbmdzIGxpa2UgdGhlIGRpc3RybyBzdHJpbmcKKyMgb2YgdGhlIHN5c3RlbSwgd2UgbGV0IHRoZSBzc3RhdGUgcGF0aHMgdGFrZSBjYXJlIG9mIHRoaXMuCitTU1RBVEVfRVhUUkFQQVRIW3ZhcmRlcHZhbHVlXSA9ICIiCisKKyMgRm9yIG11bHRpbGliIHJwbSB0aGUgYWxsYXJjaCBwYWNrYWdlZ3JvdXAgZmlsZXMgY2FuIG92ZXJ3cml0ZSAoaW4gdGhlb3J5IHRoZXkncmUgaWRlbnRpY2FsKQorU1NUQVRFX0RVUFdISVRFTElTVCA9ICIke0RFUExPWV9ESVJfSU1BR0V9LyAke0RFUExPWV9ESVJ9L2xpY2Vuc2VzLyAke0RFUExPWV9ESVJfUlBNfS9hbGwvIgorIyBBdm9pZCBkb2Nib29rL3NnbWwgY2F0YWxvZyB3YXJuaW5ncyBmb3Igbm93CitTU1RBVEVfRFVQV0hJVEVMSVNUICs9ICIke1NUQUdJTkdfRVRDRElSX05BVElWRX0vc2dtbCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3NnbWwiCisjIEFyY2hpdmUgdGhlIHNvdXJjZXMgZm9yIG1hbnkgYXJjaGl0ZWN0dXJlcyBpbiBvbmUgZGVwbG95IGZvbGRlcgorU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtERVBMT1lfRElSX1NSQ30iCisKK1NTVEFURV9TQ0FOX0ZJTEVTID89ICIqLmxhICotY29uZmlnICpfY29uZmlnIgorU1NUQVRFX1NDQU5fQ01EID89ICdmaW5kICR7U1NUQVRFX0JVSUxERElSfSBcKCAtbmFtZSAiJHtAIlwiIC1vIC1uYW1lIFwiIi5qb2luKGQuZ2V0VmFyKCJTU1RBVEVfU0NBTl9GSUxFUyIsIFRydWUpLnNwbGl0KCkpfSIgXCkgLXR5cGUgZicKKworQkJfSEFTSEZJTEVOQU1FID0gIiR7U1NUQVRFX0VYVFJBUEFUSH0gJHtTU1RBVEVfUEtHU1BFQ30gJHtTU1RBVEVfU1dTUEVDfSIKKworU1NUQVRFX0FSQ0hTID0gIiBcCisgICAgJHtCVUlMRF9BUkNIfSBcCisgICAgJHtCVUlMRF9BUkNIfV8ke1NES19BUkNIfV8ke1NES19PU30gXAorICAgICR7QlVJTERfQVJDSH1fJHtUQVJHRVRfQVJDSH0gXAorICAgICR7U0RLX0FSQ0h9XyR7U0RLX09TfSBcCisgICAgJHtTREtfQVJDSH1fJHtQQUNLQUdFX0FSQ0h9IFwKKyAgICBhbGxhcmNoIFwKKyAgICAke1BBQ0tBR0VfQVJDSH0gXAorICAgICR7TUFDSElORX0iCisKK1NTVEFURV9NQU5NQUNIID89ICIke1NTVEFURV9QS0dBUkNIfSIKKworU1NUQVRFQ1JFQVRFRlVOQ1MgPSAic3N0YXRlX2hhcmRjb2RlX3BhdGgiCitTU1RBVEVQT1NUQ1JFQVRFRlVOQ1MgPSAiIgorU1NUQVRFUFJFSU5TVEZVTkNTID0gIiIKK1NTVEFURVBPU1RVTlBBQ0tGVU5DUyA9ICJzc3RhdGVfaGFyZGNvZGVfcGF0aF91bnBhY2siCitTU1RBVEVQT1NUSU5TVEZVTkNTID0gIiIKK0VYVFJBX1NUQUdJTkdfRklYTUVTID89ICIiCisKK1NJR0dFTl9MT0NLRURTSUdTX0NIRUNLX0xFVkVMID89ICdlcnJvcicKKworIyBUaGUgR251UEcga2V5IElEIGFuZCBwYXNzcGhyYXNlIHRvIHVzZSB0byBzaWduIHNzdGF0ZSBhcmNoaXZlcyAob3IgdW5zZXQgdG8KKyMgbm90IHNpZ24pCitTU1RBVEVfU0lHX0tFWSA/PSAiIgorU1NUQVRFX1NJR19QQVNTUEhSQVNFID89ICIiCisjIFdoZXRoZXIgdG8gdmVyaWZ5IHRoZSBHblVQRyBzaWduYXR1cmVzIHdoZW4gZXh0cmFjdGluZyBzc3RhdGUgYXJjaGl2ZXMKK1NTVEFURV9WRVJJRllfU0lHID89ICIwIgorCisjIFNwZWNpZnkgZGlycyBpbiB3aGljaCB0aGUgc2hlbGwgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIGRvbid0IHVzZSAke0J9CisjIGFzIGRlZmF1bHQgZGlycyB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGFib3V0ICR7Qn0gd2l0aCBvdGhlciB0YXNrLgorc3N0YXRlX2NyZWF0ZV9wYWNrYWdlW2RpcnNdID0gIiR7U1NUQVRFX0JVSUxERElSfSIKK3NzdGF0ZV91bnBhY2tfcGFja2FnZVtkaXJzXSA9ICIke1NTVEFURV9JTlNURElSfSIKKworIyBEbyBub3QgcnVuIHNzdGF0ZV9oYXJkY29kZV9wYXRoKCkgaW4gJHtCfToKKyMgdGhlICR7Qn0gbWF5YmUgcmVtb3ZlZCBieSBjbWFrZV9kb19jb25maWd1cmUoKSB3aGlsZQorIyBzc3RhdGVfaGFyZGNvZGVfcGF0aCgpIHJ1bm5pbmcuCitzc3RhdGVfaGFyZGNvZGVfcGF0aFtkaXJzXSA9ICIke1NTVEFURV9CVUlMRERJUn0iCisKK3B5dGhvbiAoKSB7CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZ2V0VmFyKCdCVUlMRF9BUkNIJywgRmFsc2UpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5leHBhbmQoIiR7QlVJTERfQVJDSH1fJHtTREtfQVJDSH1fJHtTREtfT1N9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtCVUlMRF9BUkNIfV8ke1RBUkdFVF9BUkNIfSIpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke1NES19BUkNIfV8ke1NES19PU30iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke1NES19BUkNIfV8ke1BBQ0tBR0VfQVJDSH0iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIFRydWUpID09ICJhbGwiOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCAiYWxsYXJjaCIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9NQU5NQUNIJywgZC5leHBhbmQoIiR7UEFDS0FHRV9BUkNIfSIpKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX0VYVFJBUEFUSCcsICIke05BVElWRUxTQlNUUklOR30vIikKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9FWFRSQVBBVEhXSUxEQ0FSRCcsICIqLyIpCisKKyAgICAjIFRoZXNlIGNsYXNzZXMgZW5jb2RlIHN0YWdpbmcgcGF0aHMgaW50byB0aGVpciBzY3JpcHRzIGRhdGEgc28gY2FuIG9ubHkgYmUKKyAgICAjIHJldXNlZCBpZiB3ZSBtYW5pcHVsYXRlIHRoZSBwYXRocworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKToKKyAgICAgICAgc2Nhbl9jbWQgPSAiZ3JlcCAtSXJsICR7U1RBR0lOR19ESVJ9ICR7U1NUQVRFX0JVSUxERElSfSIKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9TQ0FOX0NNRCcsIHNjYW5fY21kKQorCisgICAgdW5pcXVlX3Rhc2tzID0gc2V0KChkLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICBkLnNldFZhcignU1NUQVRFVEFTS1MnLCAiICIuam9pbih1bmlxdWVfdGFza3MpKQorICAgIGZvciB0YXNrIGluIHVuaXF1ZV90YXNrczoKKyAgICAgICAgZC5wcmVwZW5kVmFyRmxhZyh0YXNrLCAncHJlZnVuY3MnLCAic3N0YXRlX3Rhc2tfcHJlZnVuYyAiKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcodGFzaywgJ3Bvc3RmdW5jcycsICIgc3N0YXRlX3Rhc2tfcG9zdGZ1bmMiKQorfQorCitkZWYgc3N0YXRlX2luaXQodGFzaywgZCk6CisgICAgc3MgPSB7fQorICAgIHNzWyd0YXNrJ10gPSB0YXNrCisgICAgc3NbJ2RpcnMnXSA9IFtdCisgICAgc3NbJ3BsYWluZGlycyddID0gW10KKyAgICBzc1snbG9ja2ZpbGVzJ10gPSBbXQorICAgIHNzWydsb2NrZmlsZXMtc2hhcmVkJ10gPSBbXQorICAgIHJldHVybiBzcworCitkZWYgc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQsIHRhc2sgPSBOb25lKToKKyAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgIHRhc2sgPSBkLmdldFZhcignQkJfQ1VSUkVOVFRBU0snLCBUcnVlKQorICAgICAgICBpZiBub3QgdGFzazoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJzc3RhdGUgY29kZSBydW5uaW5nIHdpdGhvdXQgdGFzayBjb250ZXh0PyEiKQorICAgICAgICB0YXNrID0gdGFzay5yZXBsYWNlKCJfc2V0c2NlbmUiLCAiIikKKworICAgIGlmIHRhc2suc3RhcnRzd2l0aCgiZG9fIik6CisgICAgICAgIHRhc2sgPSB0YXNrWzM6XQorICAgIGlucHV0cyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWlucHV0ZGlycycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgb3V0cHV0cyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLW91dHB1dGRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHBsYWluZGlycyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLXBsYWluZGlycycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbG9ja2ZpbGVzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtbG9ja2ZpbGUnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGxvY2tmaWxlc3NoYXJlZCA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxlLXNoYXJlZCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaW50ZXJjZXB0ZnVuY3MgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnRlcmNlcHRmdW5jcycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IHRhc2sgb3IgbGVuKGlucHV0cykgIT0gbGVuKG91dHB1dHMpOgorICAgICAgICBiYi5mYXRhbCgic3N0YXRlIHZhcmlhYmxlcyBub3Qgc2V0dXAgY29ycmVjdGx5PyEiKQorCisgICAgaWYgdGFzayA9PSAicG9wdWxhdGVfbGljIjoKKyAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9QS0dTUEVDIiwgIiR7U1NUQVRFX1NXU1BFQ30iKQorICAgICAgICBkLnNldFZhcigiU1NUQVRFX0VYVFJBUEFUSCIsICIiKQorCisgICAgc3MgPSBzc3RhdGVfaW5pdCh0YXNrLCBkKQorICAgIGZvciBpIGluIHJhbmdlKGxlbihpbnB1dHMpKToKKyAgICAgICAgc3N0YXRlX2FkZChzcywgaW5wdXRzW2ldLCBvdXRwdXRzW2ldLCBkKQorICAgIHNzWydsb2NrZmlsZXMnXSA9IGxvY2tmaWxlcworICAgIHNzWydsb2NrZmlsZXMtc2hhcmVkJ10gPSBsb2NrZmlsZXNzaGFyZWQKKyAgICBzc1sncGxhaW5kaXJzJ10gPSBwbGFpbmRpcnMKKyAgICBzc1snaW50ZXJjZXB0ZnVuY3MnXSA9IGludGVyY2VwdGZ1bmNzCisgICAgcmV0dXJuIHNzCisKK2RlZiBzc3RhdGVfYWRkKHNzLCBzb3VyY2UsIGRlc3QsIGQpOgorICAgIGlmIG5vdCBzb3VyY2UuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgIHNvdXJjZSA9IHNvdXJjZSArICIvIgorICAgIGlmIG5vdCBkZXN0LmVuZHN3aXRoKCIvIik6CisgICAgICAgICBkZXN0ID0gZGVzdCArICIvIgorICAgIHNvdXJjZSA9IG9zLnBhdGgubm9ybXBhdGgoc291cmNlKQorICAgIGRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKGRlc3QpCisgICAgc3JjYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoc291cmNlKQorICAgIHNzWydkaXJzJ10uYXBwZW5kKFtzcmNiYXNlLCBzb3VyY2UsIGRlc3RdKQorICAgIHJldHVybiBzcworCitkZWYgc3N0YXRlX2luc3RhbGwoc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisgICAgaW1wb3J0IG9lLnNzdGF0ZXNpZworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBzaGFyZWRmaWxlcyA9IFtdCisgICAgc2hhcmVkZGlycyA9IFtdCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9IikpCisKKyAgICBtYW5pZmVzdCwgZDIgPSBvZS5zc3RhdGVzaWcuc3N0YXRlX2dldF9tYW5pZmVzdF9maWxlbmFtZShzc1sndGFzayddLCBkKQorCisgICAgaWYgb3MuYWNjZXNzKG1hbmlmZXN0LCBvcy5SX09LKToKKyAgICAgICAgYmIuZmF0YWwoIlBhY2thZ2UgYWxyZWFkeSBzdGFnZWQgKCVzKT8hIiAlIG1hbmlmZXN0KQorCisgICAgbG9ja3MgPSBbXQorICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CisgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrLCBUcnVlKSkKKyAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzJ106CisgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKKworICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBiYi5kZWJ1ZygyLCAiU3RhZ2luZyBmaWxlcyBmcm9tICVzIHRvICVzIiAlIChzdGF0ZVsxXSwgc3RhdGVbMl0pKQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3RhdGVbMV0pOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICAjYmIuZGVidWcoMiwgIlN0YWdpbmcgJXMgdG8gJXMiICUgKHNyY3BhdGgsIGRzdHBhdGgpKQorICAgICAgICAgICAgICAgIHNoYXJlZGZpbGVzLmFwcGVuZChkc3RwYXRoKQorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZGlyKQorICAgICAgICAgICAgICAgIGRzdGRpciA9IHNyY2Rpci5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICAjYmIuZGVidWcoMiwgIlN0YWdpbmcgJXMgdG8gJXMiICUgKHNyY2RpciwgZHN0ZGlyKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHN0ZGlyLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgICAgIGRzdGRpciA9IGRzdGRpciArICIvIgorICAgICAgICAgICAgICAgIHNoYXJlZGRpcnMuYXBwZW5kKGRzdGRpcikKKworICAgICMgQ2hlY2sgdGhlIGZpbGUgbGlzdCBmb3IgY29uZmxpY3RzIGFnYWluc3QgZmlsZXMgd2hpY2ggYWxyZWFkeSBleGlzdAorICAgIHdoaXRlbGlzdCA9IChkLmdldFZhcigiU1NUQVRFX0RVUFdISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbWF0Y2ggPSBbXQorICAgIGZvciBmIGluIHNoYXJlZGZpbGVzOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLm5vcm1wYXRoKGYpCisgICAgICAgICAgICByZWFsbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICBmb3IgdyBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHcpOgorICAgICAgICAgICAgICAgICAgICByZWFsbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcmVhbG1hdGNoOgorICAgICAgICAgICAgICAgIG1hdGNoLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIHNzdGF0ZV9zZWFyY2hfY21kID0gImdyZXAgLXJsICclcycgJXMgLS1leGNsdWRlPW1hc3Rlci5saXN0IHwgc2VkIC1lICdzOl4uKi86OicgLWUgJ3M6XC5wb3B1bGF0ZS1zeXNyb290OjonIiAlIChmLCBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfSIpKQorICAgICAgICAgICAgICAgIHNlYXJjaF9vdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKHNzdGF0ZV9zZWFyY2hfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICAgICAgaWYgc2VhcmNoX291dHB1dCAhPSAiIjoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2guYXBwZW5kKCJNYXRjaGVkIGluICVzIiAlIHNlYXJjaF9vdXRwdXQucnN0cmlwKCkpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIGJiLmVycm9yKCJUaGUgcmVjaXBlICVzIGlzIHRyeWluZyB0byBpbnN0YWxsIGZpbGVzIGludG8gYSBzaGFyZWQgIiBcCisgICAgICAgICAgImFyZWEgd2hlbiB0aG9zZSBmaWxlcyBhbHJlYWR5IGV4aXN0LiBUaG9zZSBmaWxlcyBhbmQgdGhlaXIgbWFuaWZlc3QgIiBcCisgICAgICAgICAgImxvY2F0aW9uIGFyZTpcbiAgICVzXG5QbGVhc2UgdmVyaWZ5IHdoaWNoIHJlY2lwZSBzaG91bGQgcHJvdmlkZSB0aGUgIiBcCisgICAgICAgICAgImFib3ZlIGZpbGVzLlxuVGhlIGJ1aWxkIGhhcyBzdG9wcGVkIGFzIGNvbnRpbnVpbmcgaW4gdGhpcyBzY2VuYXJpbyBXSUxMICIgXAorICAgICAgICAgICJicmVhayB0aGluZ3MsIGlmIG5vdCBub3csIHBvc3NpYmx5IGluIHRoZSBmdXR1cmUgKHdlJ3ZlIHNlZW4gYnVpbGRzIGZhaWwgIiBcCisgICAgICAgICAgInNldmVyYWwgbW9udGhzIGxhdGVyKS4gSWYgdGhlIHN5c3RlbSBrbmV3IGhvdyB0byByZWNvdmVyIGZyb20gdGhpcyAiIFwKKyAgICAgICAgICAiYXV0b21hdGljYWxseSBpdCB3b3VsZCBob3dldmVyIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBzY2VuYXJpb3MgIiBcCisgICAgICAgICAgIndoaWNoIGNhbiByZXN1bHQgaW4gdGhpcyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaCBvbmUgdGhpcyBpcy4gSXQgbWF5IGJlICIgXAorICAgICAgICAgICJ5b3UgaGF2ZSBzd2l0Y2hlZCBwcm92aWRlcnMgb2Ygc29tZXRoaW5nIGxpa2UgdmlydHVhbC9rZXJuZWwgKGUuZy4gZnJvbSAiIFwKKyAgICAgICAgICAibGludXgteW9jdG8gdG8gbGludXgteW9jdG8tZGV2KSwgaW4gdGhhdCBjYXNlIHlvdSBuZWVkIHRvIGV4ZWN1dGUgdGhlICIgXAorICAgICAgICAgICJjbGVhbiB0YXNrIGZvciBib3RoIHJlY2lwZXMgYW5kIGl0IHdpbGwgcmVzb2x2ZSB0aGlzIGVycm9yLiBJdCBtYXkgYmUgIiBcCisgICAgICAgICAgInlvdSBjaGFuZ2VkIERJU1RST19GRUFUVVJFUyBmcm9tIHN5c3RlbWQgdG8gdWRldiBvciB2aWNlIHZlcnNhLiBDbGVhbmluZyAiIFwKKyAgICAgICAgICAidGhvc2UgcmVjaXBlcyBzaG91bGQgYWdhaW4gcmVzb2x2ZSB0aGlzIGVycm9yIGhvd2V2ZXIgc3dpdGNoaW5nICIgXAorICAgICAgICAgICJESVNUUk9fRkVBVFVSRVMgb24gYW4gZXhpc3RpbmcgYnVpbGQgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0ZWQsIHlvdSAiIFwKKyAgICAgICAgICAic2hvdWxkIHJlYWxseSBjbGVhbiBvdXQgdG1wIGFuZCByZWJ1aWxkIChyZXVzaW5nIHNzdGF0ZSBzaG91bGQgYmUgc2FmZSkuICIgXAorICAgICAgICAgICJJdCBjb3VsZCBiZSB0aGUgb3ZlcmxhcHBpbmcgZmlsZXMgZGV0ZWN0ZWQgYXJlIGhhcm1sZXNzIGluIHdoaWNoIGNhc2UgIiBcCisgICAgICAgICAgImFkZGluZyB0aGVtIHRvIFNTVEFURV9EVVBXSElURUxJU1QgbWF5IGJlIHRoZSBjb3JyZWN0IHNvbHV0aW9uLiBJdCBjb3VsZCAiIFwKKyAgICAgICAgICAiYWxzbyBiZSB5b3VyIGJ1aWxkIGlzIGluY2x1ZGluZyB0d28gZGlmZmVyZW50IGNvbmZsaWN0aW5nIHZlcnNpb25zIG9mICIgXAorICAgICAgICAgICJ0aGluZ3MgKGUuZy4gYmx1ZXogNCBhbmQgYmx1ZXogNSBhbmQgdGhlIGNvcnJlY3Qgc29sdXRpb24gZm9yIHRoYXQgd291bGQgIiBcCisgICAgICAgICAgImJlIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiBJZiBpbiBkb3VidCwgcGxlYXNlIGFzayBvbiB0aGUgbWFpbGluZyBsaXN0LCAiIFwKKyAgICAgICAgICAic2hhcmluZyB0aGUgZXJyb3IgYW5kIGZpbGVsaXN0IGFib3ZlLiIgJSBcCisgICAgICAgICAgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCAiXG4gIi5qb2luKG1hdGNoKSkpCisgICAgICAgIGJiLmZhdGFsKCJJZiB0aGUgYWJvdmUgbWVzc2FnZSBpcyB0b28gbXVjaCwgdGhlIHNpbXBsZXIgdmVyc2lvbiBpcyB5b3UncmUgYWR2aXNlZCB0byB3aXBlIG91dCB0bXAgYW5kIHJlYnVpbGQgKHJldXNpbmcgc3N0YXRlIGlzIGZpbmUpLiBUaGF0IHdpbGwgbGlrZWx5IGZpeCB0aGluZ3MgaW4gbW9zdCAoYnV0IG5vdCBhbGwpIGNhc2VzLiIpCisKKyAgICAjIFdyaXRlIG91dCB0aGUgbWFuaWZlc3QKKyAgICBmID0gb3BlbihtYW5pZmVzdCwgInciKQorICAgIGZvciBmaWxlIGluIHNoYXJlZGZpbGVzOgorICAgICAgICBmLndyaXRlKGZpbGUgKyAiXG4iKQorCisgICAgIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGRpcmVjdG9yaWVzIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBtYW5pZmVzdAorICAgICMgc28gdGhhdCB3aGVuIHdlIHRlc3QgdG8gc2VlIGlmIHRoZXkgc2hvdWxkIGJlIGRlbGV0ZWQgYW55IGNvbnRlbnRzCisgICAgIyBhZGRlZCBieSB0aGUgdGFzayB3aWxsIGhhdmUgYmVlbiByZW1vdmVkIGZpcnN0LgorICAgIGRpcnMgPSBzb3J0ZWQoc2hhcmVkZGlycywga2V5PWxlbikKKyAgICAjIE11c3QgcmVtb3ZlIGNoaWxkcmVuIGZpcnN0LCB3aGljaCB3aWxsIGhhdmUgYSBsb25nZXIgcGF0aCB0aGFuIHRoZSBwYXJlbnQKKyAgICBmb3IgZGkgaW4gcmV2ZXJzZWQoZGlycyk6CisgICAgICAgIGYud3JpdGUoZGkgKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAgIyBBcHBlbmQgdG8gdGhlIGxpc3Qgb2YgbWFuaWZlc3RzIGZvciB0aGlzIFBBQ0tBR0VfQVJDSAorCisgICAgaSA9IGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9pbmRleC0ke1NTVEFURV9NQU5NQUNIfSIpCisgICAgbCA9IGJiLnV0aWxzLmxvY2tmaWxlKGkgKyAiLmxvY2siKQorICAgIGZpbGVkYXRhID0gZC5nZXRWYXIoIlNUQU1QIiwgVHJ1ZSkgKyAiICIgKyBkMi5nZXRWYXIoIlNTVEFURV9NQU5GSUxFUFJFRklYIiwgVHJ1ZSkgKyAiICIgKyBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpICsgIlxuIgorICAgIG1hbmlmZXN0cyA9IFtdCisgICAgaWYgb3MucGF0aC5leGlzdHMoaSk6CisgICAgICAgIHdpdGggb3BlbihpLCAiciIpIGFzIGY6CisgICAgICAgICAgICBtYW5pZmVzdHMgPSBmLnJlYWRsaW5lcygpCisgICAgaWYgZmlsZWRhdGEgbm90IGluIG1hbmlmZXN0czoKKyAgICAgICAgd2l0aCBvcGVuKGksICJhKyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGZpbGVkYXRhKQorICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobCkKKworICAgICMgUnVuIHRoZSBhY3R1YWwgZmlsZSBpbnN0YWxsCisgICAgZm9yIHN0YXRlIGluIHNzWydkaXJzJ106CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN0YXRlWzFdKToKKyAgICAgICAgICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisKKyAgICBmb3IgcG9zdGluc3QgaW4gKGQuZ2V0VmFyKCdTU1RBVEVQT1NUSU5TVEZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhwb3N0aW5zdCwgZCkKKworICAgIGZvciBsb2NrIGluIGxvY2tzOgorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKK3NzdGF0ZV9pbnN0YWxsW3ZhcmRlcHNleGNsdWRlXSArPSAiU1NUQVRFX0RVUFdISVRFTElTVCBTVEFURV9NQU5NQUNIIFNTVEFURV9NQU5GSUxFUFJFRklYIgorc3N0YXRlX2luc3RhbGxbdmFyZGVwc10gKz0gIiR7U1NUQVRFUE9TVElOU1RGVU5DU30iCisKK2RlZiBzc3RhdGVfaW5zdGFsbHBrZyhzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgZGVmIHByZXBkaXIoZGlyKToKKyAgICAgICAgIyByZW1vdmUgZGlyIGlmIGl0IGV4aXN0cywgZW5zdXJlIGFueSBwYXJlbnQgZGlyZWN0b3JpZXMgZG8gZXhpc3QKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRpcikKKyAgICAgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgc3N0YXRlaW5zdCA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3NzdGF0ZS1pbnN0YWxsLSVzLyIgJSBzc1sndGFzayddKQorICAgIHNzdGF0ZWZldGNoID0gZC5nZXRWYXIoJ1NTVEFURV9QS0dOQU1FJywgVHJ1ZSkgKyAnXycgKyBzc1sndGFzayddICsgIi50Z3oiCisgICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSArICdfJyArIHNzWyd0YXNrJ10gKyAiLnRneiIKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVwa2cpOgorICAgICAgICBwc3RhZ2luZ19mZXRjaChzc3RhdGVmZXRjaCwgc3N0YXRlcGtnLCBkKQorCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNzdGF0ZXBrZyk6CisgICAgICAgIGJiLm5vdGUoIlN0YWdpbmcgcGFja2FnZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBzc3RhdGVwa2cpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgc3N0YXRlX2NsZWFuKHNzLCBkKQorCisgICAgZC5zZXRWYXIoJ1NTVEFURV9JTlNURElSJywgc3N0YXRlaW5zdCkKKyAgICBkLnNldFZhcignU1NUQVRFX1BLRycsIHNzdGF0ZXBrZykKKworICAgIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoIlNTVEFURV9WRVJJRllfU0lHIiwgVHJ1ZSksIEZhbHNlKToKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKFsiZ3BnIiwgIi0tdmVyaWZ5Iiwgc3N0YXRlcGtnICsgIi5zaWciLCBzc3RhdGVwa2ddKSAhPSAwOgorICAgICAgICAgICAgYmIud2FybigiQ2Fubm90IHZlcmlmeSBzaWduYXR1cmUgb24gc3N0YXRlIHBhY2thZ2UgJXMiICUgc3N0YXRlcGtnKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdTU1RBVEVQUkVJTlNURlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKSArIFsnc3N0YXRlX3VucGFja19wYWNrYWdlJ10gKyAoZC5nZXRWYXIoJ1NTVEFURVBPU1RVTlBBQ0tGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKworICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBwcmVwZGlyKHN0YXRlWzFdKQorICAgICAgICBvcy5yZW5hbWUoc3N0YXRlaW5zdCArIHN0YXRlWzBdLCBzdGF0ZVsxXSkKKyAgICBzc3RhdGVfaW5zdGFsbChzcywgZCkKKworICAgIGZvciBwbGFpbiBpbiBzc1sncGxhaW5kaXJzJ106CisgICAgICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgICAgIHNyYyA9IHNzdGF0ZWluc3QgKyAiLyIgKyBwbGFpbi5yZXBsYWNlKHdvcmtkaXIsICcnKQorICAgICAgICBkZXN0ID0gcGxhaW4KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyYykKKyAgICAgICAgcHJlcGRpcihkZXN0KQorICAgICAgICBvcy5yZW5hbWUoc3JjLCBkZXN0KQorCisgICAgcmV0dXJuIFRydWUKKworcHl0aG9uIHNzdGF0ZV9oYXJkY29kZV9wYXRoX3VucGFjayAoKSB7CisgICAgIyBGaXh1cCBoYXJkY29kZWQgcGF0aHMKKyAgICAjCisgICAgIyBOb3RlOiBUaGUgbG9naWMgYmVsb3cgbXVzdCBtYXRjaCB0aGUgcmV2ZXJzZSBsb2dpYyBpbgorICAgICMgc3N0YXRlX2hhcmRjb2RlX3BhdGgoZCkKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgc3N0YXRlaW5zdCA9IGQuZ2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIFRydWUpCisgICAgZml4bWVmbiA9ICBzc3RhdGVpbnN0ICsgImZpeG1lcGF0aCIKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShmaXhtZWZuKToKKyAgICAgICAgc3RhZ2luZyA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUicsIFRydWUpCisgICAgICAgIHN0YWdpbmdfdGFyZ2V0ID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgICAgIHN0YWdpbmdfaG9zdCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9IT1NUJywgVHJ1ZSkKKworICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVTVEFHSU5HRElSOiVzOmcnIiAlIChzdGFnaW5nKQorICAgICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVTVEFHSU5HRElSVEFSR0VUOiVzOmc7IHM6RklYTUVTVEFHSU5HRElSOiVzOmcnIiAlIChzdGFnaW5nX3RhcmdldCwgc3RhZ2luZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczpGSVhNRVNUQUdJTkdESVJIT1NUOiVzOmcnIiAlIChzdGFnaW5nX2hvc3QpCisKKyAgICAgICAgZXh0cmFfc3RhZ2luZ19maXhtZXMgPSBkLmdldFZhcignRVhUUkFfU1RBR0lOR19GSVhNRVMnLCBUcnVlKSBvciAnJworICAgICAgICBmb3IgZml4bWV2YXIgaW4gZXh0cmFfc3RhZ2luZ19maXhtZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZpeG1lX3BhdGggPSBkLmdldFZhcihmaXhtZXZhciwgVHJ1ZSkKKyAgICAgICAgICAgIHNzdGF0ZV9zZWRfY21kICs9ICIgLWUgJ3M6RklYTUVfJXM6JXM6ZyciICUgKGZpeG1ldmFyLCBmaXhtZV9wYXRoKQorCisgICAgICAgICMgQWRkIHNzdGF0ZWluc3QgdG8gZWFjaCBmaWxlbmFtZSBpbiBmaXhtZXBhdGgsIHVzZSB4YXJncyB0byBlZmZpY2llbnRseSBjYWxsIHNlZAorICAgICAgICBzc3RhdGVfaGFyZGNvZGVfY21kID0gInNlZCAtZSAnczpeOiVzOmcnICVzIHwgeGFyZ3MgJXMiICUgKHNzdGF0ZWluc3QsIGZpeG1lZm4sIHNzdGF0ZV9zZWRfY21kKQorCisgICAgICAgIGJiLm5vdGUoIlJlcGxhY2luZyBmaXhtZSBwYXRocyBpbiBzc3RhdGUgcGFja2FnZTogJXMiICUgKHNzdGF0ZV9oYXJkY29kZV9jbWQpKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2hhcmRjb2RlX2NtZCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjIE5lZWQgdG8gcmVtb3ZlIHRoaXMgb3Igd2UnZCBjb3B5IGl0IGludG8gdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIG1heSAKKyAgICAgICAgIyBjb25mbGljdCB3aXRoIGFub3RoZXIgd3JpdGVyCisgICAgICAgIG9zLnJlbW92ZShmaXhtZWZuKQorfQorCitkZWYgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZShzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIHNzdGF0ZXBrZ2ZpbGUgPSBkLmdldFZhcignU1NUQVRFX1BBVEhTUEVDJywgVHJ1ZSkgKyAiKl8iICsgc3NbJ3Rhc2snXSArICIudGd6KiIKKyAgICBiYi5ub3RlKCJSZW1vdmluZyAlcyIgJSBzc3RhdGVwa2dmaWxlKQorICAgIG9lLnBhdGgucmVtb3ZlKHNzdGF0ZXBrZ2ZpbGUpCisKK2RlZiBzc3RhdGVfY2xlYW5fY2FjaGVmaWxlcyhkKToKKyAgICBmb3IgdGFzayBpbiAoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGxkID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgc3MgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMobGQsIHRhc2spCisgICAgICAgIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGUoc3MsIGxkKQorCitkZWYgc3N0YXRlX2NsZWFuX21hbmlmZXN0KG1hbmlmZXN0LCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgbWZpbGUgPSBvcGVuKG1hbmlmZXN0KQorICAgIGVudHJpZXMgPSBtZmlsZS5yZWFkbGluZXMoKQorICAgIG1maWxlLmNsb3NlKCkKKworICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOgorICAgICAgICBlbnRyeSA9IGVudHJ5LnN0cmlwKCkKKyAgICAgICAgYmIuZGVidWcoMiwgIlJlbW92aW5nIG1hbmlmZXN0OiAlcyIgJSBlbnRyeSkKKyAgICAgICAgIyBXZSBjYW4gcmFjZSBhZ2FpbnN0IGFub3RoZXIgcGFja2FnZSBwb3B1bGF0aW5nIGRpcmVjdG9yaWVzIGFzIHdlJ3JlIHJlbW92aW5nIHRoZW0KKyAgICAgICAgIyBzbyB3ZSBpZ25vcmUgZXJyb3JzIGhlcmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZW50cnlbOi0xXSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShlbnRyeVs6LTFdKQorICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoZW50cnkpIGFuZCBsZW4ob3MubGlzdGRpcihlbnRyeSkpID09IDA6CisgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGVudHJ5WzotMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9lLnBhdGgucmVtb3ZlKGVudHJ5KQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIG9lLnBhdGgucmVtb3ZlKG1hbmlmZXN0KQorCitkZWYgc3N0YXRlX2NsZWFuKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorICAgIGltcG9ydCBnbG9iCisKKyAgICBkMiA9IGQuY3JlYXRlQ29weSgpCisgICAgc3RhbXBfY2xlYW4gPSBkLmdldFZhcigiU1RBTVBDTEVBTiIsIFRydWUpCisgICAgZXh0cmFpbmYgPSBkLmdldFZhckZsYWcoImRvXyIgKyBzc1sndGFzayddLCAnc3RhbXAtZXh0cmEtaW5mbycsIFRydWUpCisgICAgaWYgZXh0cmFpbmY6CisgICAgICAgIGQyLnNldFZhcigiU1NUQVRFX01BTk1BQ0giLCBleHRyYWluZikKKyAgICAgICAgd2lsZGNhcmRfc3RmaWxlID0gIiVzLmRvXyVzKi4lcyIgJSAoc3RhbXBfY2xlYW4sIHNzWyd0YXNrJ10sIGV4dHJhaW5mKQorICAgIGVsc2U6CisgICAgICAgIHdpbGRjYXJkX3N0ZmlsZSA9ICIlcy5kb18lcyoiICUgKHN0YW1wX2NsZWFuLCBzc1sndGFzayddKQorCisgICAgbWFuaWZlc3QgPSBkMi5leHBhbmQoIiR7U1NUQVRFX01BTkZJTEVQUkVGSVh9LiVzIiAlIHNzWyd0YXNrJ10pCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdCk6CisgICAgICAgIGxvY2tzID0gW10KKyAgICAgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcy1zaGFyZWQnXToKKyAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKKyAgICAgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcyddOgorICAgICAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2spKQorCisgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtYW5pZmVzdCwgZCkKKworICAgICAgICBmb3IgbG9jayBpbiBsb2NrczoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgICMgUmVtb3ZlIHRoZSBjdXJyZW50IGFuZCBwcmV2aW91cyBzdGFtcHMsIGJ1dCBrZWVwIHRoZSBzaWdkYXRhLgorICAgICMKKyAgICAjIFRoZSBnbG9iKCkgbWF0Y2hlcyBkb190YXNrKiB3aGljaCBtYXkgbWF0Y2ggbXVsdGlwbGUgdGFza3MsIGZvcgorICAgICMgZXhhbXBsZTogZG9fcGFja2FnZSBhbmQgZG9fcGFja2FnZV93cml0ZV9pcGssIHNvIHdlIG5lZWQgdG8KKyAgICAjIGV4YWN0bHkgbWF0Y2ggKi5kb190YXNrLiogYW5kICouZG9fdGFza19zZXRzY2VuZS4qCisgICAgcm1fc3RhbXAgPSAnLmRvXyVzLicgJSBzc1sndGFzayddCisgICAgcm1fc2V0c2NlbmUgPSAnLmRvXyVzX3NldHNjZW5lLicgJSBzc1sndGFzayddCisgICAgIyBGb3IgQkJfU0lHTkFUVVJFX0hBTkRMRVIgPSAibm9vcCIKKyAgICBybV9ub2hhc2ggPSAiLmRvXyVzIiAlIHNzWyd0YXNrJ10KKyAgICBmb3Igc3RmaWxlIGluIGdsb2IuZ2xvYih3aWxkY2FyZF9zdGZpbGUpOgorICAgICAgICAjIEtlZXAgdGhlIHNpZ2RhdGEKKyAgICAgICAgaWYgIi5zaWdkYXRhLiIgaW4gc3RmaWxlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBQcmVzZXJ2ZSB0YWludCBmaWxlcyBpbiB0aGUgc3RhbXBzIGRpcmVjdG9yeQorICAgICAgICBpZiBzdGZpbGUuZW5kc3dpdGgoJy50YWludCcpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgcm1fc3RhbXAgaW4gc3RmaWxlIG9yIHJtX3NldHNjZW5lIGluIHN0ZmlsZSBvciBcCisgICAgICAgICAgICAgICAgc3RmaWxlLmVuZHN3aXRoKHJtX25vaGFzaCk6CisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShzdGZpbGUpCisKK3NzdGF0ZV9jbGVhblt2YXJkZXBzZXhjbHVkZV0gPSAiU1NUQVRFX01BTkZJTEVQUkVGSVgiCisKK0NMRUFORlVOQ1MgKz0gInNzdGF0ZV9jbGVhbmFsbCIKKworcHl0aG9uIHNzdGF0ZV9jbGVhbmFsbCgpIHsKKyAgICBiYi5ub3RlKCJSZW1vdmluZyBzaGFyZWQgc3RhdGUgZm9yIHBhY2thZ2UgJXMiICUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisKKyAgICBtYW5pZmVzdF9kaXIgPSBkLmdldFZhcignU1NUQVRFX01BTklGRVNUUycsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHJldHVybgorCisgICAgdGFza3MgPSBkLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIG5hbWUgaW4gdGFza3M6CisgICAgICAgIGxkID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGxkLCBuYW1lKQorICAgICAgICBzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBsZCkKK30KKworcHl0aG9uIHNzdGF0ZV9oYXJkY29kZV9wYXRoICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcywgcGxhdGZvcm0KKworICAgICMgTmVlZCB0byByZW1vdmUgaGFyZGNvZGVkIHBhdGhzIGFuZCBmaXggdGhlc2Ugd2hlbiB3ZSBpbnN0YWxsIHRoZQorICAgICMgc3RhZ2luZyBwYWNrYWdlcy4KKyAgICAjCisgICAgIyBOb3RlOiB0aGUgbG9naWMgaW4gdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgcmV2ZXJzZSBsb2dpYworICAgICMgaW4gc3N0YXRlX2luc3RhbGxwa2coc3MsIGQpCisKKyAgICBzdGFnaW5nID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSJywgVHJ1ZSkKKyAgICBzdGFnaW5nX3RhcmdldCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgIHN0YWdpbmdfaG9zdCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9IT1NUJywgVHJ1ZSkKKyAgICBzc3RhdGVfYnVpbGRkaXIgPSBkLmdldFZhcignU1NUQVRFX0JVSUxERElSJywgVHJ1ZSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgc3N0YXRlX2dyZXBfY21kID0gImdyZXAgLWwgLWUgJyVzJyIgJSAoc3RhZ2luZykKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOiVzOkZJWE1FU1RBR0lOR0RJUjpnJyIgJSAoc3RhZ2luZykKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICclcycgLWUgJyVzJyIgJSAoc3RhZ2luZ190YXJnZXQsIHN0YWdpbmcpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVJUQVJHRVQ6ZzsgczolczpGSVhNRVNUQUdJTkdESVI6ZyciICUgKHN0YWdpbmdfdGFyZ2V0LCBzdGFnaW5nKQorICAgIGVsc2U6CisgICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICclcyciICUgKHN0YWdpbmdfaG9zdCkKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOiVzOkZJWE1FU1RBR0lOR0RJUkhPU1Q6ZyciICUgKHN0YWdpbmdfaG9zdCkKKworICAgIGV4dHJhX3N0YWdpbmdfZml4bWVzID0gZC5nZXRWYXIoJ0VYVFJBX1NUQUdJTkdfRklYTUVTJywgVHJ1ZSkgb3IgJycKKyAgICBmb3IgZml4bWV2YXIgaW4gZXh0cmFfc3RhZ2luZ19maXhtZXMuc3BsaXQoKToKKyAgICAgICAgZml4bWVfcGF0aCA9IGQuZ2V0VmFyKGZpeG1ldmFyLCBUcnVlKQorICAgICAgICBzc3RhdGVfc2VkX2NtZCArPSAiIC1lICdzOiVzOkZJWE1FXyVzOmcnIiAlIChmaXhtZV9wYXRoLCBmaXhtZXZhcikKKworICAgIGZpeG1lZm4gPSAgc3N0YXRlX2J1aWxkZGlyICsgImZpeG1lcGF0aCIKKworICAgIHNzdGF0ZV9zY2FuX2NtZCA9IGQuZ2V0VmFyKCdTU1RBVEVfU0NBTl9DTUQnLCBUcnVlKQorICAgIHNzdGF0ZV9maWxlbGlzdF9jbWQgPSAidGVlICVzIiAlIChmaXhtZWZuKQorCisgICAgIyBmaXhtZXBhdGggZmlsZSBuZWVkcyByZWxhdGl2ZSBwYXRocywgZHJvcCBzc3RhdGVfYnVpbGRkaXIgcHJlZml4CisgICAgc3N0YXRlX2ZpbGVsaXN0X3JlbGF0aXZlX2NtZCA9ICJzZWQgLWkgLWUgJ3M6XiVzOjpnJyAlcyIgJSAoc3N0YXRlX2J1aWxkZGlyLCBmaXhtZWZuKQorCisgICAgeGFyZ3Nfbm9fZW1wdHlfcnVuX2NtZCA9ICctLW5vLXJ1bi1pZi1lbXB0eScKKyAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzoKKyAgICAgICAgeGFyZ3Nfbm9fZW1wdHlfcnVuX2NtZCA9ICcnCisKKyAgICAjIExpbWl0IHRoZSBmaXhwYXRocyBhbmQgc2VkIG9wZXJhdGlvbnMgYmFzZWQgb24gdGhlIGluaXRpYWwgZ3JlcCBzZWFyY2gKKyAgICAjIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBtYWtpbmcgc3VyZSB0aGUgdmZzIGNhY2hlIGlzIGhvdAorICAgIHNzdGF0ZV9oYXJkY29kZV9jbWQgPSAiJXMgfCB4YXJncyAlcyB8ICVzIHwgeGFyZ3MgJXMgJXMiICUgKHNzdGF0ZV9zY2FuX2NtZCwgc3N0YXRlX2dyZXBfY21kLCBzc3RhdGVfZmlsZWxpc3RfY21kLCB4YXJnc19ub19lbXB0eV9ydW5fY21kLCBzc3RhdGVfc2VkX2NtZCkKKworICAgIGJiLm5vdGUoIlJlbW92aW5nIGhhcmRjb2RlZCBwYXRocyBmcm9tIHNzdGF0ZSBwYWNrYWdlOiAnJXMnIiAlIChzc3RhdGVfaGFyZGNvZGVfY21kKSkKKyAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2hhcmRjb2RlX2NtZCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjIElmIHRoZSBmaXhtZWZuIGlzIGVtcHR5LCByZW1vdmUgaXQuLgorICAgIGlmIG9zLnN0YXQoZml4bWVmbikuc3Rfc2l6ZSA9PSAwOgorICAgICAgICBvcy5yZW1vdmUoZml4bWVmbikKKyAgICBlbHNlOgorICAgICAgICBiYi5ub3RlKCJSZXBsYWNpbmcgYWJzb2x1dGUgcGF0aHMgaW4gZml4bWVwYXRoIGZpbGU6ICclcyciICUgKHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQpKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2ZpbGVsaXN0X3JlbGF0aXZlX2NtZCwgc2hlbGw9VHJ1ZSkKK30KKworZGVmIHNzdGF0ZV9wYWNrYWdlKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgZGVmIG1ha2VfcmVsYXRpdmVfc3ltbGluayhwYXRoLCBvdXRwdXRwYXRoLCBkKToKKyAgICAgICAgIyBSZXBsYWNlIG91dCBhYnNvbHV0ZSBUTVBESVIgcGF0aHMgaW4gc3ltbGlua3Mgd2l0aCByZWxhdGl2ZSBvbmVzCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBsaW5rID0gb3MucmVhZGxpbmsocGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobGluayk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IGxpbmsuc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVwdGggPSBvdXRwdXRwYXRoLnJwYXJ0aXRpb24odG1wZGlyKVsyXS5jb3VudCgnLycpCisgICAgICAgIGJhc2UgPSBsaW5rLnBhcnRpdGlvbih0bXBkaXIpWzJdLnN0cmlwKCkKKyAgICAgICAgd2hpbGUgZGVwdGggPiAxOgorICAgICAgICAgICAgYmFzZSA9ICIvLi4iICsgYmFzZQorICAgICAgICAgICAgZGVwdGggLT0gMQorICAgICAgICBiYXNlID0gIi4iICsgYmFzZQorCisgICAgICAgIGJiLmRlYnVnKDIsICJSZXBsYWNpbmcgYWJzb2x1dGUgcGF0aCAlcyB3aXRoIHJlbGF0aXZlIHBhdGggJXMgZm9yICVzIiAlIChsaW5rLCBiYXNlLCBvdXRwdXRwYXRoKSkKKyAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgIG9zLnN5bWxpbmsoYmFzZSwgcGF0aCkKKworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorCisgICAgc3N0YXRlYnVpbGQgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9zc3RhdGUtYnVpbGQtJXMvIiAlIHNzWyd0YXNrJ10pCisgICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSArICdfJysgc3NbJ3Rhc2snXSArICIudGd6IgorICAgIGJiLnV0aWxzLnJlbW92ZShzc3RhdGVidWlsZCwgcmVjdXJzZT1UcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihzc3RhdGVidWlsZCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHNzdGF0ZXBrZykpCisgICAgZm9yIHN0YXRlIGluIHNzWydkaXJzJ106CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzdGF0ZVsxXSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzcmNiYXNlID0gc3RhdGVbMF0ucnN0cmlwKCIvIikucnNwbGl0KCcvJywgMSlbMF0KKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHN0YXRlWzFdKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpCisgICAgICAgICAgICAgICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgbWFrZV9yZWxhdGl2ZV9zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGQpCisgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZGlyKQorICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRoLnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQorICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCBkKQorICAgICAgICBiYi5kZWJ1ZygyLCAiUHJlcGFyaW5nIHRyZWUgJXMgZm9yIHBhY2thZ2luZyBhdCAlcyIgJSAoc3RhdGVbMV0sIHNzdGF0ZWJ1aWxkICsgc3RhdGVbMF0pKQorICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3RhdGVbMV0sIHNzdGF0ZWJ1aWxkICsgc3RhdGVbMF0pCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGZvciBwbGFpbiBpbiBzc1sncGxhaW5kaXJzJ106CisgICAgICAgIHBkaXIgPSBwbGFpbi5yZXBsYWNlKHdvcmtkaXIsIHNzdGF0ZWJ1aWxkKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGxhaW4pCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwZGlyKQorICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUocGxhaW4sIHBkaXIpCisKKyAgICBkLnNldFZhcignU1NUQVRFX0JVSUxERElSJywgc3N0YXRlYnVpbGQpCisgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0cnLCBzc3RhdGVwa2cpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1NTVEFURUNSRUFURUZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkgKyBbJ3NzdGF0ZV9jcmVhdGVfcGFja2FnZSddICsgXAorICAgICAgICAgICAgIChkLmdldFZhcignU1NUQVRFUE9TVENSRUFURUZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorICAKKyAgICBiYi5zaWdnZW4uZHVtcF90aGlzX3Rhc2soc3N0YXRlcGtnICsgIi5zaWdpbmZvIiwgZCkKKworICAgIHJldHVybgorCitkZWYgcHN0YWdpbmdfZmV0Y2goc3N0YXRlZmV0Y2gsIHNzdGF0ZXBrZywgZCk6CisgICAgaW1wb3J0IGJiLmZldGNoMgorCisgICAgIyBPbmx5IHRyeSBhbmQgZmV0Y2ggaWYgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgYSBtaXJyb3IKKyAgICBtaXJyb3JzID0gZC5nZXRWYXIoJ1NTVEFURV9NSVJST1JTJywgVHJ1ZSkKKyAgICBpZiBub3QgbWlycm9yczoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIENvcHkgdGhlIGRhdGEgb2JqZWN0IGFuZCBvdmVycmlkZSBETF9ESVIgYW5kIFNSQ19VUkkKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIGRsZGlyID0gbG9jYWxkYXRhLmV4cGFuZCgiJHtTU1RBVEVfRElSfSIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRsZGlyKQorCisgICAgbG9jYWxkYXRhLmRlbFZhcignTUlSUk9SUycpCisgICAgbG9jYWxkYXRhLnNldFZhcignRklMRVNQQVRIJywgZGxkaXIpCisgICAgbG9jYWxkYXRhLnNldFZhcignRExfRElSJywgZGxkaXIpCisgICAgbG9jYWxkYXRhLnNldFZhcignUFJFTUlSUk9SUycsIG1pcnJvcnMpCisKKyAgICAjIGlmIEJCX05PX05FVFdPUksgaXMgc2V0IGJ1dCB3ZSBhbHNvIGhhdmUgU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLLAorICAgICMgd2UnbGwgd2FudCB0byBhbGxvdyBuZXR3b3JrIGFjY2VzcyBmb3IgdGhlIGN1cnJlbnQgc2V0IG9mIGZldGNoZXMuCisgICAgaWYgbG9jYWxkYXRhLmdldFZhcignQkJfTk9fTkVUV09SSycsIFRydWUpID09ICIxIiBhbmQgbG9jYWxkYXRhLmdldFZhcignU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBsb2NhbGRhdGEuZGVsVmFyKCdCQl9OT19ORVRXT1JLJykKKworICAgICMgVHJ5IGEgZmV0Y2ggZnJvbSB0aGUgc3N0YXRlIG1pcnJvciwgaWYgaXQgZmFpbHMganVzdCByZXR1cm4gYW5kCisgICAgIyB3ZSB3aWxsIGJ1aWxkIHRoZSBwYWNrYWdlCisgICAgdXJpcyA9IFsnZmlsZTovL3swfScuZm9ybWF0KHNzdGF0ZWZldGNoKSwKKyAgICAgICAgICAgICdmaWxlOi8vezB9LnNpZ2luZm8nLmZvcm1hdChzc3RhdGVmZXRjaCldCisgICAgaWYgYmIudXRpbHMudG9fYm9vbGVhbihkLmdldFZhcigiU1NUQVRFX1ZFUklGWV9TSUciLCBUcnVlKSwgRmFsc2UpOgorICAgICAgICB1cmlzICs9IFsnZmlsZTovL3swfS5zaWcnLmZvcm1hdChzc3RhdGVmZXRjaCldCisKKyAgICBmb3Igc3JjdXJpIGluIHVyaXM6CisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ19VUkknLCBzcmN1cmkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NyY3VyaV0sIGxvY2FsZGF0YSwgY2FjaGU9RmFsc2UpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKworICAgICAgICAgICAgIyBOZWVkIHRvIG9wdGltaXNlIHRoaXMsIGlmIHVzaW5nIGZpbGU6Ly8gdXJscywgdGhlIGZldGNoZXIganVzdCBjaGFuZ2VzIHRoZSBsb2NhbCBwYXRoCisgICAgICAgICAgICAjIEZvciBub3cgd29yayBhcm91bmQgYnkgc3ltbGlua2luZworICAgICAgICAgICAgbG9jYWxwYXRoID0gYmIuZGF0YS5leHBhbmQoZmV0Y2hlci5sb2NhbHBhdGgoc3JjdXJpKSwgbG9jYWxkYXRhKQorICAgICAgICAgICAgaWYgbG9jYWxwYXRoICE9IHNzdGF0ZXBrZyBhbmQgb3MucGF0aC5leGlzdHMobG9jYWxwYXRoKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHNzdGF0ZXBrZyk6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhsb2NhbHBhdGgsIHNzdGF0ZXBrZykKKworICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb246CisgICAgICAgICAgICBicmVhaworCitkZWYgc3N0YXRlX3NldHNjZW5lKGQpOgorICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorICAgIGFjY2VsZXJhdGUgPSBzc3RhdGVfaW5zdGFsbHBrZyhzaGFyZWRfc3RhdGUsIGQpCisgICAgaWYgbm90IGFjY2VsZXJhdGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk5vIHN1aXRhYmxlIHN0YWdpbmcgcGFja2FnZSBmb3VuZCIpCisKK3B5dGhvbiBzc3RhdGVfdGFza19wcmVmdW5jICgpIHsKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBkKQorfQorCitweXRob24gc3N0YXRlX3Rhc2tfcG9zdGZ1bmMgKCkgeworICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorICAgIHNzdGF0ZV9pbnN0YWxsKHNoYXJlZF9zdGF0ZSwgZCkKKyAgICBmb3IgaW50ZXJjZXB0IGluIHNoYXJlZF9zdGF0ZVsnaW50ZXJjZXB0ZnVuY3MnXToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGludGVyY2VwdCwgZCkKKyAgICBvbWFzayA9IG9zLnVtYXNrKDAwMikKKyAgICBpZiBvbWFzayAhPSAwMDI6CisgICAgICAgYmIubm90ZSgiVXNpbmcgdW1hc2sgMDAyIChub3QgJTBvKSBmb3Igc3N0YXRlIHBhY2thZ2luZyIgJSBvbWFzaykKKyAgICBzc3RhdGVfcGFja2FnZShzaGFyZWRfc3RhdGUsIGQpCisgICAgb3MudW1hc2sob21hc2spCit9CisgIAorCisjCisjIFNoZWxsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgc3N0YXRlIHBhY2thZ2UgZnJvbSBhIGRpcmVjdG9yeQorIyBzZXQgYXMgU1NUQVRFX0JVSUxERElSLiBXaWxsIGJlIHJ1biBmcm9tIHdpdGhpbiBTU1RBVEVfQlVJTERESVIuCisjCitzc3RhdGVfY3JlYXRlX3BhY2thZ2UgKCkgeworCVRGSUxFPWBta3RlbXAgJHtTU1RBVEVfUEtHfS5YWFhYWFhYWGAKKwkjIE5lZWQgdG8gaGFuZGxlIGVtcHR5IGRpcmVjdG9yaWVzCisJaWYgWyAiJChscyAtQSkiIF07IHRoZW4KKwkJc2V0ICtlCisJCXRhciAtY3pmICRURklMRSAqCisJCXJldD0kPworCQlpZiBbICRyZXQgLW5lIDAgXSAmJiBbICRyZXQgLW5lIDEgXTsgdGhlbgorCQkJZXhpdCAxCisJCWZpCisJCXNldCAtZQorCWVsc2UKKwkJdGFyIC1jeiAtLWZpbGU9JFRGSUxFIC0tZmlsZXMtZnJvbT0vZGV2L251bGwKKwlmaQorCWNobW9kIDA2NjQgJFRGSUxFIAorCW12IC1mICRURklMRSAke1NTVEFURV9QS0d9CisKKwlpZiBbIC1uICIke1NTVEFURV9TSUdfS0VZfSIgXTsgdGhlbgorCQlybSAtZiAke1NTVEFURV9QS0d9LnNpZworCQllY2hvICR7U1NUQVRFX1NJR19QQVNTUEhSQVNFfSB8IGdwZyAtLWJhdGNoIC0tcGFzc3BocmFzZS1mZCAwIC0tZGV0YWNoLXNpZ24gLS1sb2NhbC11c2VyICR7U1NUQVRFX1NJR19LRVl9IC0tb3V0cHV0ICR7U1NUQVRFX1BLR30uc2lnICR7U1NUQVRFX1BLR30KKwlmaQorCisJY2QgJHtXT1JLRElSfQorCXJtIC1yZiAke1NTVEFURV9CVUlMRERJUn0KK30KKworIworIyBTaGVsbCBmdW5jdGlvbiB0byBkZWNvbXByZXNzIGFuZCBwcmVwYXJlIGEgcGFja2FnZSBmb3IgaW5zdGFsbGF0aW9uCisjIFdpbGwgYmUgcnVuIGZyb20gd2l0aGluIFNTVEFURV9JTlNURElSLgorIworc3N0YXRlX3VucGFja19wYWNrYWdlICgpIHsKKwl0YXIgLXhtdnpmICR7U1NUQVRFX1BLR30KKwkjIFVzZSAiISAtdyB8fCIgdG8gcmV0dXJuIHRydWUgZm9yIHJlYWQgb25seSBmaWxlcworCVsgISAtdyAke1NTVEFURV9QS0d9IF0gfHwgdG91Y2ggLS1uby1kZXJlZmVyZW5jZSAke1NTVEFURV9QS0d9Cit9CisKK0JCX0hBU0hDSEVDS19GVU5DVElPTiA9ICJzc3RhdGVfY2hlY2toYXNoZXMiCisKK2RlZiBzc3RhdGVfY2hlY2toYXNoZXMoc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCwgc2lnaW5mbz1GYWxzZSk6CisKKyAgICByZXQgPSBbXQorICAgIG1pc3NlZCA9IFtdCisgICAgZXh0ZW5zaW9uID0gIi50Z3oiCisgICAgaWYgc2lnaW5mbzoKKyAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uICsgIi5zaWdpbmZvIgorCisgICAgZGVmIGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpOgorICAgICAgICAjIE1hZ2ljIGRhdGEgZnJvbSBCQl9IQVNIRklMRU5BTUUKKyAgICAgICAgc3BsaXRoYXNoZm4gPSBzcV9oYXNoZm5bdGFza10uc3BsaXQoIiAiKQorICAgICAgICBzcGVjID0gc3BsaXRoYXNoZm5bMV0KKyAgICAgICAgZXh0cmFwYXRoID0gc3BsaXRoYXNoZm5bMF0KKworICAgICAgICB0bmFtZSA9IHNxX3Rhc2tbdGFza11bMzpdCisKKyAgICAgICAgaWYgdG5hbWUgaW4gWyJmZXRjaCIsICJ1bnBhY2siLCAicGF0Y2giLCAicG9wdWxhdGVfbGljIiwgInByZWNvbmZpZ3VyZSJdIGFuZCBzcGxpdGhhc2hmblsyXToKKyAgICAgICAgICAgIHNwZWMgPSBzcGxpdGhhc2hmblsyXQorICAgICAgICAgICAgZXh0cmFwYXRoID0gIiIKKworICAgICAgICByZXR1cm4gc3BlYywgZXh0cmFwYXRoLCB0bmFtZQorCisKKyAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc3FfZm4pKToKKworICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKworICAgICAgICBzc3RhdGVmaWxlID0gZC5leHBhbmQoIiR7U1NUQVRFX0RJUn0vIiArIGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyBleHRlbnNpb24pCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3N0YXRlZmlsZSk6CisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBGb3VuZCB2YWxpZCBzc3RhdGUgZmlsZSAlcyIgJSBzc3RhdGVmaWxlKQorICAgICAgICAgICAgcmV0LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1pc3NlZC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IExvb2tlZCBmb3IgYnV0IGRpZG4ndCBmaW5kIGZpbGUgJXMiICUgc3N0YXRlZmlsZSkKKworICAgIG1pcnJvcnMgPSBkLmdldFZhcigiU1NUQVRFX01JUlJPUlMiLCBUcnVlKQorICAgIGlmIG1pcnJvcnM6CisgICAgICAgICMgQ29weSB0aGUgZGF0YSBvYmplY3QgYW5kIG92ZXJyaWRlIERMX0RJUiBhbmQgU1JDX1VSSQorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgZGxkaXIgPSBsb2NhbGRhdGEuZXhwYW5kKCIke1NTVEFURV9ESVJ9IikKKyAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignTUlSUk9SUycpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0ZJTEVTUEFUSCcsIGRsZGlyKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdETF9ESVInLCBkbGRpcikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFJFTUlSUk9SUycsIG1pcnJvcnMpCisKKyAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZSB1c2luZyBwcmVtaXJyb3Igb2Y6ICVzIiAlIG1pcnJvcnMpCisKKyAgICAgICAgIyBpZiBCQl9OT19ORVRXT1JLIGlzIHNldCBidXQgd2UgYWxzbyBoYXZlIFNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSywKKyAgICAgICAgIyB3ZSdsbCB3YW50IHRvIGFsbG93IG5ldHdvcmsgYWNjZXNzIGZvciB0aGUgY3VycmVudCBzZXQgb2YgZmV0Y2hlcy4KKyAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcignQkJfTk9fTkVUV09SSycsIFRydWUpID09ICIxIiBhbmQgbG9jYWxkYXRhLmdldFZhcignU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignQkJfTk9fTkVUV09SSycpCisKKyAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoQ29ubmVjdGlvbkNhY2hlCisgICAgICAgIGRlZiBjaGVja3N0YXR1c19pbml0KHRocmVhZF93b3JrZXIpOgorICAgICAgICAgICAgdGhyZWFkX3dvcmtlci5jb25uZWN0aW9uX2NhY2hlID0gRmV0Y2hDb25uZWN0aW9uQ2FjaGUoKQorCisgICAgICAgIGRlZiBjaGVja3N0YXR1c19lbmQodGhyZWFkX3dvcmtlcik6CisgICAgICAgICAgICB0aHJlYWRfd29ya2VyLmNvbm5lY3Rpb25fY2FjaGUuY2xvc2VfY29ubmVjdGlvbnMoKQorCisgICAgICAgIGRlZiBjaGVja3N0YXR1cyh0aHJlYWRfd29ya2VyLCBhcmcpOgorICAgICAgICAgICAgKHRhc2ssIHNzdGF0ZWZpbGUpID0gYXJnCisKKyAgICAgICAgICAgIGxvY2FsZGF0YTIgPSBiYi5kYXRhLmNyZWF0ZUNvcHkobG9jYWxkYXRhKQorICAgICAgICAgICAgc3JjdXJpID0gImZpbGU6Ly8iICsgc3N0YXRlZmlsZQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1JDX1VSSScsIHNyY3VyaSkKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IEF0dGVtcHRpbmcgdG8gZmV0Y2ggJXMiICUgc3JjdXJpKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmN1cmkuc3BsaXQoKSwgbG9jYWxkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlPXRocmVhZF93b3JrZXIuY29ubmVjdGlvbl9jYWNoZSkKKyAgICAgICAgICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBTdWNjZXNzZnVsIGZldGNoIHRlc3QgZm9yICVzIiAlIHNyY3VyaSkKKyAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgaWYgdGFzayBpbiBtaXNzZWQ6CisgICAgICAgICAgICAgICAgICAgIG1pc3NlZC5yZW1vdmUodGFzaykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBtaXNzZWQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogVW5zdWNjZXNzZnVsIGZldGNoIHRlc3QgZm9yICVzIiAlIHNyY3VyaSkKKyAgICAgICAgICAgICAgICBwYXNzICAgICAKKworICAgICAgICB0YXNrbGlzdCA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgorICAgICAgICAgICAgaWYgdGFzayBpbiByZXQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorICAgICAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyBleHRlbnNpb24pCisgICAgICAgICAgICB0YXNrbGlzdC5hcHBlbmQoKHRhc2ssIHNzdGF0ZWZpbGUpKQorCisgICAgICAgIGlmIHRhc2tsaXN0OgorICAgICAgICAgICAgYmIubm90ZSgiQ2hlY2tpbmcgc3N0YXRlIG1pcnJvciBvYmplY3QgYXZhaWxhYmlsaXR5IChmb3IgJXMgb2JqZWN0cykiICUgbGVuKHRhc2tsaXN0KSkKKyAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICAgICAgICAgIG5wcm9jID0gbWluKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgbGVuKHRhc2tsaXN0KSkKKworICAgICAgICAgICAgcG9vbCA9IG9lLnV0aWxzLlRocmVhZGVkUG9vbChucHJvYywgbGVuKHRhc2tsaXN0KSwKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyX2luaXQ9Y2hlY2tzdGF0dXNfaW5pdCwgd29ya2VyX2VuZD1jaGVja3N0YXR1c19lbmQpCisgICAgICAgICAgICBmb3IgdCBpbiB0YXNrbGlzdDoKKyAgICAgICAgICAgICAgICBwb29sLmFkZF90YXNrKGNoZWNrc3RhdHVzLCB0KQorICAgICAgICAgICAgcG9vbC5zdGFydCgpCisgICAgICAgICAgICBwb29sLndhaXRfY29tcGxldGlvbigpCisKKyAgICBpbmhlcml0bGlzdCA9IGQuZ2V0VmFyKCJJTkhFUklUIiwgVHJ1ZSkKKyAgICBpZiAidG9hc3RlciIgaW4gaW5oZXJpdGxpc3Q6CisgICAgICAgIGV2ZGF0YSA9IHsnbWlzc2VkJzogW10sICdmb3VuZCc6IFtdfTsKKyAgICAgICAgZm9yIHRhc2sgaW4gbWlzc2VkOgorICAgICAgICAgICAgc3BlYywgZXh0cmFwYXRoLCB0bmFtZSA9IGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpCisgICAgICAgICAgICBzc3RhdGVmaWxlID0gZC5leHBhbmQoZXh0cmFwYXRoICsgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgc3FfaGFzaFt0YXNrXSwgZCkgKyAiXyIgKyB0bmFtZSArICIudGd6IikKKyAgICAgICAgICAgIGV2ZGF0YVsnbWlzc2VkJ10uYXBwZW5kKCAoc3FfZm5bdGFza10sIHNxX3Rhc2tbdGFza10sIHNxX2hhc2hbdGFza10sIHNzdGF0ZWZpbGUgKSApCisgICAgICAgIGZvciB0YXNrIGluIHJldDoKKyAgICAgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorICAgICAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyAiLnRneiIpCisgICAgICAgICAgICBldmRhdGFbJ2ZvdW5kJ10uYXBwZW5kKCAoc3FfZm5bdGFza10sIHNxX3Rhc2tbdGFza10sIHNxX2hhc2hbdGFza10sIHNzdGF0ZWZpbGUgKSApCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTWlzc2VkU3N0YXRlIiwgZXZkYXRhKSwgZCkKKworICAgIGlmIGhhc2F0dHIoYmIucGFyc2Uuc2lnZ2VuLCAiY2hlY2toYXNoZXMiKToKKyAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmNoZWNraGFzaGVzKG1pc3NlZCwgcmV0LCBzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKQorCisgICAgcmV0dXJuIHJldAorCitCQl9TRVRTQ0VORV9ERVBWQUxJRCA9ICJzZXRzY2VuZV9kZXB2YWxpZCIKKworZGVmIHNldHNjZW5lX2RlcHZhbGlkKHRhc2ssIHRhc2tkZXBlbmRlZXMsIG5vdG5lZWRlZCwgZCk6CisgICAgIyB0YXNrZGVwZW5kZWVzIGlzIGEgZGljdCBvZiB0YXNrcyB3aGljaCBkZXBlbmQgb24gdGFzaywgZWFjaCBiZWluZyBhIDMgaXRlbSBsaXN0IG9mIFtQTiwgVEFTS05BTUUsIEZJTEVOQU1FXQorICAgICMgdGFzayBpcyBpbmNsdWRlZCBpbiB0YXNrZGVwZW5kZWVzIHRvbworCisgICAgYmIuZGVidWcoMiwgIkNvbnNpZGVyaW5nIHNldHNjZW5lIHRhc2s6ICVzIiAlIChzdHIodGFza2RlcGVuZGVlc1t0YXNrXSkpKQorCisgICAgZGVmIGlzTmF0aXZlQ3Jvc3MoeCk6CisgICAgICAgIHJldHVybiB4LmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zcy0iIGluIHggb3IgIi1jcm9zc3NkayIgaW4geAorCisgICAgZGVmIGlzUG9zdEluc3REZXAoeCk6CisgICAgICAgIGlmIHggaW4gWyJxZW11LW5hdGl2ZSIsICJnZGstcGl4YnVmLW5hdGl2ZSIsICJxZW11d3JhcHBlci1jcm9zcyIsICJkZXBtb2R3cmFwcGVyLWNyb3NzIiwgInN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSIsICJndGstaWNvbi11dGlscy1uYXRpdmUiXToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBXZSBvbmx5IG5lZWQgdG8gdHJpZ2dlciBwb3B1bGF0ZV9saWMgdGhyb3VnaCBkaXJlY3QgZGVwZW5kZW5jaWVzCisgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAiZG9fcG9wdWxhdGVfbGljIjoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGZvciBkZXAgaW4gdGFza2RlcGVuZGVlczoKKyAgICAgICAgYmIuZGVidWcoMiwgIiAgY29uc2lkZXJpbmcgZGVwZW5kZW5jeTogJXMiICUgKHN0cih0YXNrZGVwZW5kZWVzW2RlcF0pKSkKKyAgICAgICAgaWYgdGFzayA9PSBkZXA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBkZXAgaW4gbm90bmVlZGVkOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBkb19wYWNrYWdlX3dyaXRlXyogYW5kIGRvX3BhY2thZ2UgZG9lc24ndCBuZWVkIGRvX3BhY2thZ2UKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAiZG9fcGFja2FnZSIgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2UnLCAnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZG9fcGFja2FnZWRhdGEnLCAnZG9fcGFja2FnZV9xYSddOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBkb19wYWNrYWdlX3dyaXRlXyogYW5kIGRvX3BhY2thZ2UgZG9lc24ndCBuZWVkIGRvX3BvcHVsYXRlX3N5c3Jvb3QsIHVubGVzcyBpcyBhIHBvc3RpbnN0YWxsIGRlcGVuZGVuY3kKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2UnLCAnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZG9fcGFja2FnZWRhdGEnLCAnZG9fcGFja2FnZV9xYSddOgorICAgICAgICAgICAgaWYgaXNQb3N0SW5zdERlcCh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKSBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdIGluIFsnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nXToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgTmF0aXZlL0Nyb3NzIHBhY2thZ2VzIGRvbid0IGV4aXN0IGFuZCBhcmUgbm9leGVjIGFueXdheQorICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbZGVwXVswXSkgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2UnLCAnZG9fcGFja2FnZV9xYSddOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIENvbnNpZGVyIHN5c3Jvb3QgZGVwZW5kaW5nIG9uIHN5c3Jvb3QgdGFza3MKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fcG9wdWxhdGVfc3lzcm9vdCcgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSA9PSAnZG9fcG9wdWxhdGVfc3lzcm9vdCc6CisgICAgICAgICAgICAjIGJhc2UtcGFzc3dkL3NoYWRvdy1zeXNyb290IGRvbid0IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW2RlcF1bMF0uZW5kc3dpdGgoKCJiYXNlLXBhc3N3ZCIsICJzaGFkb3ctc3lzcm9vdCIpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBOb3RoaW5nIG5lZWQgZGVwZW5kIG9uIGxpYmMtaW5pdGlhbC9nY2MtY3Jvc3MtaW5pdGlhbAorICAgICAgICAgICAgaWYgIi1pbml0aWFsIiBpbiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIE5hdGl2ZS9Dcm9zcyBwb3B1bGF0ZV9zeXNyb290IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbdGFza11bMF0pIGFuZCBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbZGVwXVswXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAjIFRhcmdldCBwb3B1bGF0ZV9zeXNyb290IGRlcGVuZGVkIG9uIGJ5IGNyb3NzIHRvb2xzIG5lZWQgdG8gYmUgaW5zdGFsbGVkCisgICAgICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbZGVwXVswXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAjIE5hdGl2ZS9jcm9zcyB0b29scyBkZXBlbmRlZCB1cG9uIGJ5IHRhcmdldCBzeXNyb290IGFyZSBub3QgbmVlZGVkCisgICAgICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbdGFza11bMF0pOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIFRhcmdldCBwb3B1bGF0ZV9zeXNyb290IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICdkb19zaGFyZWRfd29ya2Rpcic6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgVGhpcyBpcyBkdWUgdG8gdGhlIFtkZXBlbmRzXSBpbiB1c2VyYWRkLmJiY2xhc3MgY29tcGxpY2F0aW5nIG1hdHRlcnMKKyAgICAgICAgIyBUaGUgbG9naWMgKmlzKiByZXZlcnNlZCBoZXJlIGR1ZSB0byB0aGUgd2F5IGhhcmQgc2V0c2NlbmUgZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZAorICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICdkb19wYWNrYWdlJyBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzBdLmVuZHN3aXRoKCgnc2hhZG93LW5hdGl2ZScsICdzaGFkb3ctc3lzcm9vdCcsICdiYXNlLXBhc3N3ZCcsICdwc2V1ZG8tbmF0aXZlJykpIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFNhZmUgZmFsbHRocm91Z2ggZGVmYXVsdAorICAgICAgICBiYi5kZWJ1ZygyLCAiIERlZmF1bHQgc2V0c2NlbmUgZGVwZW5kZW5jeSBmYWxsIHRocm91Z2ggZHVlIHRvIGRlcGVuZGVuY3k6ICVzIiAlIChzdHIodGFza2RlcGVuZGVlc1tkZXBdKSkpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKK2FkZGhhbmRsZXIgc3N0YXRlX2V2ZW50aGFuZGxlcgorc3N0YXRlX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQiCitweXRob24gc3N0YXRlX2V2ZW50aGFuZGxlcigpIHsKKyAgICBkID0gZS5kYXRhCisgICAgIyBXaGVuIHdlIHdyaXRlIGFuIHNzdGF0ZSBwYWNrYWdlIHdlIHJld3JpdGUgdGhlIFNTVEFURV9QS0cKKyAgICBzcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKQorICAgIGlmIG5vdCBzcGtnLmVuZHN3aXRoKCIudGd6Iik6CisgICAgICAgIHRhc2tuYW1lID0gZC5nZXRWYXIoIkJCX1JVTlRBU0siLCBUcnVlKVszOl0KKyAgICAgICAgc3BlYyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHU1BFQycsIFRydWUpCisgICAgICAgIHN3c3BlYyA9IGQuZ2V0VmFyKCdTU1RBVEVfU1dTUEVDJywgVHJ1ZSkKKyAgICAgICAgaWYgdGFza25hbWUgaW4gWyJmZXRjaCIsICJ1bnBhY2siLCAicGF0Y2giLCAicG9wdWxhdGVfbGljIiwgInByZWNvbmZpZ3VyZSJdIGFuZCBzd3NwZWM6CisgICAgICAgICAgICBkLnNldFZhcigiU1NUQVRFX1BLR1NQRUMiLCAiJHtTU1RBVEVfU1dTUEVDfSIpCisgICAgICAgICAgICBkLnNldFZhcigiU1NUQVRFX0VYVFJBUEFUSCIsICIiKQorICAgICAgICBzc3RhdGVwa2cgPSBkLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpCisgICAgICAgIGJiLnNpZ2dlbi5kdW1wX3RoaXNfdGFzayhzc3RhdGVwa2cgKyAnXycgKyB0YXNrbmFtZSArICIudGd6IiAiLnNpZ2luZm8iLCBkKQorfQorCitTU1RBVEVfUFJVTkVfT0JTT0xFVEVXT1JLRElSID0gIjEiCisKKyMgRXZlbnQgaGFuZGxlciB3aGljaCByZW1vdmVzIG1hbmlmZXN0cyBhbmQgc3RhbXBzIGZpbGUgZm9yCisjIHJlY2lwZXMgd2hpY2ggYXJlIG5vIGxvbmdlciByZWFjaGFibGUgaW4gYSBidWlsZCB3aGVyZSB0aGV5CisjIG9uY2Ugd2VyZS4KKyMgQWxzbyBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIHdvcmtkaXIgb2YgdGhvc2UgdGFza3MvcmVjaXBlcworIworYWRkaGFuZGxlciBzc3RhdGVfZXZlbnRoYW5kbGVyMgorc3N0YXRlX2V2ZW50aGFuZGxlcjJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWFjaGFibGVTdGFtcHMiCitweXRob24gc3N0YXRlX2V2ZW50aGFuZGxlcjIoKSB7CisgICAgaW1wb3J0IGdsb2IKKyAgICBkID0gZS5kYXRhCisgICAgc3RhbXBzID0gZS5zdGFtcHMudmFsdWVzKCkKKyAgICByZW1vdmV3b3JrZGlyID0gKGQuZ2V0VmFyKCJTU1RBVEVfUFJVTkVfT0JTT0xFVEVXT1JLRElSIiwgRmFsc2UpID09ICIxIikKKyAgICBzZWVuID0gW10KKyAgICBmb3IgYSBpbiBkLmdldFZhcigiU1NUQVRFX0FSQ0hTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgdG9yZW1vdmUgPSBbXQorICAgICAgICBpID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vaW5kZXgtIiArIGEpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHdpdGggb3BlbihpLCAiciIpIGFzIGY6CisgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIChzdGFtcCwgbWFuaWZlc3QsIHdvcmtkaXIpID0gbC5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHN0YW1wczoKKyAgICAgICAgICAgICAgICAgICAgdG9yZW1vdmUuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgICAgIGlmIHN0YW1wIG5vdCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiU3RhbXAgJXMgaXMgbm90IHJlYWNoYWJsZSwgcmVtb3ZpbmcgcmVsYXRlZCBtYW5pZmVzdHMiICUgc3RhbXApCisgICAgICAgICAgICAgICAgICAgICAgICBzZWVuLmFwcGVuZChzdGFtcCkKKyAgICAgICAgZm9yIHIgaW4gdG9yZW1vdmU6CisgICAgICAgICAgICAoc3RhbXAsIG1hbmlmZXN0LCB3b3JrZGlyKSA9IHIuc3BsaXQoKQorICAgICAgICAgICAgZm9yIG0gaW4gZ2xvYi5nbG9iKG1hbmlmZXN0ICsgIi4qIik6CisgICAgICAgICAgICAgICAgc3N0YXRlX2NsZWFuX21hbmlmZXN0KG0sIGQpCisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc3RhbXAgKyAiKiIpCisgICAgICAgICAgICBpZiByZW1vdmV3b3JrZGlyOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh3b3JrZGlyLCByZWN1cnNlID0gVHJ1ZSkKKyAgICAgICAgICAgIGxpbmVzLnJlbW92ZShyKQorICAgICAgICB3aXRoIG9wZW4oaSwgInciKSBhcyBmOgorICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgZi53cml0ZShsKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zdGFnaW5nLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3ZWRkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zdGFnaW5nLmJiY2xhc3MKQEAgLTAsMCArMSwyMTggQEAKKworc3lzcm9vdF9zdGFnZV9kaXIoKSB7CisJc3JjPSIkMSIKKwlkZXN0PSIkMiIKKwkjIGlmIHRoZSBzcmMgZG9lc24ndCBleGlzdCBkb24ndCBkbyBhbnl0aGluZworCWlmIFsgISAtZCAiJHNyYyIgXTsgdGhlbgorCQkgcmV0dXJuCisJZmkKKworCW1rZGlyIC1wICIkZGVzdCIKKwkoCisJCWNkICRzcmMKKwkJZmluZCAuIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAkZGVzdAorCSkKK30KKworc3lzcm9vdF9zdGFnZV9saWJkaXIoKSB7CisJc3JjPSIkMSIKKwlkZXN0PSIkMiIKKworCXN5c3Jvb3Rfc3RhZ2VfZGlyICRzcmMgJGRlc3QKK30KKworc3lzcm9vdF9zdGFnZV9kaXJzKCkgeworCWZyb209IiQxIgorCXRvPSIkMiIKKworCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtpbmNsdWRlZGlyfSAkdG8ke2luY2x1ZGVkaXJ9CisJaWYgWyAiJHtCVUlMRF9TWVN9IiA9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7YmluZGlyfSAkdG8ke2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke3NiaW5kaXJ9ICR0byR7c2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2Jhc2VfYmluZGlyfSAkdG8ke2Jhc2VfYmluZGlyfQorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7YmFzZV9zYmluZGlyfSAkdG8ke2Jhc2Vfc2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2xpYmV4ZWNkaXJ9ICR0byR7bGliZXhlY2Rpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke3N5c2NvbmZkaXJ9ICR0byR7c3lzY29uZmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2xvY2Fsc3RhdGVkaXJ9ICR0byR7bG9jYWxzdGF0ZWRpcn0KKwlmaQorCWlmIFsgLWQgJGZyb20ke2xpYmRpcn0gXQorCXRoZW4KKwkJc3lzcm9vdF9zdGFnZV9saWJkaXIgJGZyb20ke2xpYmRpcn0gJHRvJHtsaWJkaXJ9CisJZmkKKwlpZiBbIC1kICRmcm9tJHtiYXNlX2xpYmRpcn0gXQorCXRoZW4KKwkJc3lzcm9vdF9zdGFnZV9saWJkaXIgJGZyb20ke2Jhc2VfbGliZGlyfSAkdG8ke2Jhc2VfbGliZGlyfQorCWZpCisJaWYgWyAtZCAkZnJvbSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0gXQorCXRoZW4KKwkJc3lzcm9vdF9zdGFnZV9saWJkaXIgJGZyb20ke25vbmFyY2hfYmFzZV9saWJkaXJ9ICR0byR7bm9uYXJjaF9iYXNlX2xpYmRpcn0KKwlmaQorCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtkYXRhZGlyfSAkdG8ke2RhdGFkaXJ9CisJIyBXZSBkb24ndCBjYXJlIGFib3V0IGRvY3MvaW5mby9tYW5wYWdlcy9sb2NhbGVzCisJcm0gLXJmICR0byR7bWFuZGlyfS8gJHRvJHtkb2NkaXJ9LyAkdG8ke2luZm9kaXJ9LyAke3RvfSR7ZGF0YWRpcn0vbG9jYWxlLworCXJtIC1yZiAkdG8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8gJHRvJHtkYXRhZGlyfS9mb250cy8gJHRvJHtkYXRhZGlyfS9waXhtYXBzLworfQorCitzeXNyb290X3N0YWdlX2FsbCgpIHsKKwlzeXNyb290X3N0YWdlX2RpcnMgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KK30KKworcHl0aG9uIHN5c3Jvb3Rfc3RyaXAgKCkgeworICAgIGltcG9ydCBzdGF0LCBlcnJubworCisgICAgZHZhciA9IGQuZ2V0VmFyKCdTWVNST09UX0RFU1RESVInLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIG9zLmNoZGlyKGR2YXIpCisKKyAgICAjIFJldHVybiB0eXBlIChiaXRzKToKKyAgICAjIDAgLSBub3QgZWxmCisgICAgIyAxIC0gRUxGCisgICAgIyAyIC0gc3RyaXBwZWQKKyAgICAjIDQgLSBleGVjdXRhYmxlCisgICAgIyA4IC0gc2hhcmVkIGxpYnJhcnkKKyAgICAjIDE2IC0ga2VybmVsIG1vZHVsZQorICAgIGRlZiBpc0VMRihwYXRoKToKKyAgICAgICAgdHlwZSA9IDAKKyAgICAgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoImZpbGUgXCIlc1wiIiAlIHBhdGgucmVwbGFjZSgiXCIiLCAiXFxcIiIpKQorCisgICAgICAgIGlmIHJldDoKKyAgICAgICAgICAgIGJiLmVycm9yKCJzcGxpdF9hbmRfc3RyaXBfZmlsZXM6ICdmaWxlICVzJyBmYWlsZWQiICUgcGF0aCkKKyAgICAgICAgICAgIHJldHVybiB0eXBlCisKKyAgICAgICAgIyBOb3Qgc3RyaXBwZWQKKyAgICAgICAgaWYgIkVMRiIgaW4gcmVzdWx0OgorICAgICAgICAgICAgdHlwZSB8PSAxCisgICAgICAgICAgICBpZiAibm90IHN0cmlwcGVkIiBub3QgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gMgorICAgICAgICAgICAgaWYgImV4ZWN1dGFibGUiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDQKKyAgICAgICAgICAgIGlmICJzaGFyZWQiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDgKKyAgICAgICAgcmV0dXJuIHR5cGUKKworCisgICAgZWxmZmlsZXMgPSB7fQorICAgIGlub2RlcyA9IHt9CisgICAgbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGR2YXIgKyBvcy5zZXAgKyBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpCisgICAgYmFzZWxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkpCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1NZU1JPT1RfU1RSSVAnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICAjCisgICAgICAgICMgRmlyc3QgbGV0cyBmaWd1cmUgb3V0IGFsbCBvZiB0aGUgZmlsZXMgd2UgbWF5IGhhdmUgdG8gcHJvY2VzcworICAgICAgICAjCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGR2YXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsdGFyZ2V0ID0gb2UucGF0aC5yZWFscGF0aChmaWxlLCBkdmFyLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcyA9IG9zLmxzdGF0KGx0YXJnZXQpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgKGVyciwgc3RyZXJyb3IpID0gZS5hcmdzCisgICAgICAgICAgICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAjIFNraXAgYnJva2VuIHN5bWxpbmtzCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBDaGVjayBpdHMgYW4gZXhjdXRhYmxlCisgICAgICAgICAgICAgICAgaWYgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWFVTUikgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWEdSUCkgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWE9USCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgKChmaWxlLnN0YXJ0c3dpdGgobGliZGlyKSBvciBmaWxlLnN0YXJ0c3dpdGgoYmFzZWxpYmRpcikpIGFuZCAiLnNvIiBpbiBmKToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBpdCdzIGEgc3ltbGluaywgYW5kIHBvaW50cyB0byBhbiBFTEYgZmlsZSwgd2UgY2FwdHVyZSB0aGUgcmVhZGxpbmsgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAjIEl0J3MgYSBmaWxlIChvciBoYXJkbGluayksIG5vdCBhIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgIyAuLi5idXQgaXMgaXQgRUxGLCBhbmQgaXMgaXQgYWxyZWFkeSBzdHJpcHBlZD8KKyAgICAgICAgICAgICAgICAgICAgZWxmX2ZpbGUgPSBpc0VMRihmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBlbGZfZmlsZSAmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbGZfZmlsZSAmIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiRmlsZSAnJXMnIGZyb20gJXMgd2FzIGFscmVhZHkgc3RyaXBwZWQsIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchIiAlIChmaWxlW2xlbihkdmFyKTpdLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcy5zdF9pbm8gaW4gaW5vZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsoaW5vZGVzW3Muc3RfaW5vXSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW3Muc3RfaW5vXSA9IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJyZWFrIGhhcmRsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZmaWxlc1tmaWxlXSA9IGVsZl9maWxlCisKKyAgICAgICAgIworICAgICAgICAjIE5vdyBzdHJpcCB0aGVtIChpbiBwYXJhbGxlbCkKKyAgICAgICAgIworICAgICAgICBzdHJpcCA9IGQuZ2V0VmFyKCJTVFJJUCIsIFRydWUpCisgICAgICAgIHNmaWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIGVsZmZpbGVzOgorICAgICAgICAgICAgZWxmX2ZpbGUgPSBpbnQoZWxmZmlsZXNbZmlsZV0pCisgICAgICAgICAgICAjYmIubm90ZSgiU3RyaXAgJXMiICUgZmlsZSkKKyAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGZpbGUsIGVsZl9maWxlLCBzdHJpcCkpCisKKyAgICAgICAgb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoc2ZpbGVzLCBvZS5wYWNrYWdlLnJ1bnN0cmlwKQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W2RpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdW1hc2tdID0gIjAyMiIKKworYWRkdGFzayBwb3B1bGF0ZV9zeXNyb290IGFmdGVyIGRvX2luc3RhbGwKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTID89ICIiCitTWVNST09UX0RFU1RESVIgPSAiJHtXT1JLRElSfS9zeXNyb290LWRlc3RkaXIvIgorU1lTUk9PVF9MT0NLID0gIiR7U1RBR0lOR19ESVJ9L3N0YWdpbmcubG9jayIKKworIyBXZSBjbGVhbiBvdXQgYW55IGV4aXN0aW5nIHNzdGF0ZSBmcm9tIHRoZSBzeXNyb290IGlmIHdlIHJlcnVuIGNvbmZpZ3VyZQorcHl0aG9uIHN5c3Jvb3RfY2xlYW5zc3RhdGUgKCkgeworICAgIHNzID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQsICJwb3B1bGF0ZV9zeXNyb290IikKKyAgICBzc3RhdGVfY2xlYW4oc3MsIGQpCit9Citkb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICJzeXNyb290X2NsZWFuc3N0YXRlIgorCisKK0JCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTiA9ICJzeXNyb290X2NoZWNraGFzaGVzIgorCitkZWYgc3lzcm9vdF9jaGVja2hhc2hlcyhjb3ZlcmVkLCB0YXNrbmFtZXMsIGZuaWRzLCBmbnMsIGQsIGludmFsaWR0YXNrcyA9IE5vbmUpOgorICAgIHByb2JsZW1zID0gc2V0KCkKKyAgICBjb25maWd1cmVmbmlkcyA9IHNldCgpCisgICAgaWYgbm90IGludmFsaWR0YXNrczoKKyAgICAgICAgaW52YWxpZHRhc2tzID0geHJhbmdlKGxlbih0YXNrbmFtZXMpKQorICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgaWYgdGFza25hbWVzW3Rhc2tdID09ICJkb19jb25maWd1cmUiIGFuZCB0YXNrIG5vdCBpbiBjb3ZlcmVkOgorICAgICAgICAgICAgY29uZmlndXJlZm5pZHMuYWRkKGZuaWRzW3Rhc2tdKQorICAgIGZvciB0YXNrIGluIGNvdmVyZWQ6CisgICAgICAgIGlmIHRhc2tuYW1lc1t0YXNrXSA9PSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIgYW5kIGZuaWRzW3Rhc2tdIGluIGNvbmZpZ3VyZWZuaWRzOgorICAgICAgICAgICAgcHJvYmxlbXMuYWRkKHRhc2spCisgICAgcmV0dXJuIHByb2JsZW1zCisKK3B5dGhvbiBkb19wb3B1bGF0ZV9zeXNyb290ICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInN5c3Jvb3Rfc3RhZ2VfYWxsIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInN5c3Jvb3Rfc3RyaXAiLCBkKQorICAgIGZvciBmIGluIChkLmdldFZhcignU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBtdWx0aXByb3YgPSBkLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkuc3BsaXQoKQorICAgIHByb3ZkaXIgPSBkLmV4cGFuZCgiJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX3ByZWZpeH0vc3lzcm9vdC1wcm92aWRlcnMvIikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIocHJvdmRpcikKKyAgICBmb3IgcCBpbiBkLmdldFZhcigiUFJPVklERVMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBwIGluIG11bHRpcHJvdjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHAgPSBwLnJlcGxhY2UoIi8iLCAiXyIpCisgICAgICAgIHdpdGggb3Blbihwcm92ZGlyICsgcCwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShwbikKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFt2YXJkZXBzXSArPSAiJHtTWVNST09UX1BSRVBST0NFU1NfRlVOQ1N9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFt2YXJkZXBzZXhjbHVkZV0gKz0gIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIKKworU1NUQVRFVEFTS1MgKz0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19wb3B1bGF0ZV9zeXNyb290W2NsZWFuZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiJHtNQUNISU5FfSIKKworcHl0aG9uIGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc3lzbGludXguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGVmOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MKQEAgLTAsMCArMSwxOTAgQEAKKyMgc3lzbGludXguYmJjbGFzcworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCisjIFByb3ZpZGUgc3lzbGludXggc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBidWlsZGluZyBib290YWJsZSBpbWFnZXMuCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzCisjICR7SU5JVFJEfSAtIGluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0cmQgKG9wdGlvbmFsKQorIyAke1JPT1RGU30gLSBpbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAob3B0aW9uYWwpCisjICR7QVVUT19TWVNMSU5VWE1FTlV9IC0gc2V0IHRoaXMgdG8gMSB0byBlbmFibGUgY3JlYXRpbmcgYW4gYXV0b21hdGljIG1lbnUKKyMgJHtMQUJFTFN9IC0gYSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlnCisjICR7QVBQRU5EfSAtIGFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2ggbGFiZWwKKyMgJHtTWVNMSU5VWF9PUFRTfSAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIHN5c2xpbnV4IGZpbGUgJzsnIGRlbGltaXRlZAorIyAke1NZU0xJTlVYX1NQTEFTSH0gLSBBIGJhY2tncm91bmQgZm9yIHRoZSB2Z2EgYm9vdCBtZW51IGlmIHVzaW5nIHRoZSBib290IG1lbnUKKyMgJHtTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEV9IC0gc2V0IHRvICJjb25zb2xlPXR0eVgiIHRvIGNoYW5nZSBrZXJuZWwgYm9vdCBkZWZhdWx0IGNvbnNvbGUKKyMgJHtTWVNMSU5VWF9TRVJJQUx9IC0gU2V0IGFuIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJuIG9mZiBzZXJpYWwgd2l0aCBlbXB0eSBzdHJpbmcKKyMgJHtTWVNMSU5VWF9TRVJJQUxfVFRZfSAtIFNldCBhbHRlcm5hdGUgY29uc29sZT10dHkuLi4ga2VybmVsIGJvb3QgYXJndW1lbnQKKyMgJHtTWVNMSU5VWF9LRVJORUxfQVJHU30gLSBBZGQgYWRkaXRpb25hbCBrZXJuZWwgYXJndW1lbnRzCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9c3lzbGludXg6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworU1lTTElOVVhDRkcgID0gIiR7U30vc3lzbGludXguY2ZnIgorCitJU09MSU5VWERJUiA9ICIvaXNvbGludXgiCitTWVNMSU5VWERJUiA9ICIvIgorIyBUaGUga2VybmVsIGhhcyBhbiBpbnRlcm5hbCBkZWZhdWx0IGNvbnNvbGUsIHdoaWNoIHlvdSBjYW4gb3ZlcnJpZGUgd2l0aAorIyBhIGNvbnNvbGU9Li4uc29tZV90dHkuLi4KK1NZU0xJTlVYX0RFRkFVTFRfQ09OU09MRSA/PSAiIgorU1lTTElOVVhfU0VSSUFMID89ICIwIDExNTIwMCIKK1NZU0xJTlVYX1NFUklBTF9UVFkgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorSVNPX0JPT1RJTUcgPSAiaXNvbGludXgvaXNvbGludXguYmluIgorSVNPX0JPT1RDQVQgPSAiaXNvbGludXgvYm9vdC5jYXQiCitNS0lTT0ZTX09QVElPTlMgPSAiLW5vLWVtdWwtYm9vdCAtYm9vdC1sb2FkLXNpemUgNCAtYm9vdC1pbmZvLXRhYmxlIgorQVBQRU5EX3ByZXBlbmQgPSAiICR7U1lTTElOVVhfUk9PVH0gIgorCisjIE5lZWQgVVVJRCB1dGlsaXR5IGNvZGUuCitpbmhlcml0IGZzLXV1aWQKKworc3lzbGludXhfcG9wdWxhdGUoKSB7CisJREVTVD0kMQorCUJPT1RESVI9JDIKKwlDRkdOQU1FPSQzCisKKwlpbnN0YWxsIC1kICR7REVTVH0ke0JPT1RESVJ9CisKKwkjIEluc3RhbGwgdGhlIGNvbmZpZyBmaWxlcworCWluc3RhbGwgLW0gMDY0NCAke1NZU0xJTlVYQ0ZHfSAke0RFU1R9JHtCT09URElSfS8ke0NGR05BTUV9CisJaWYgWyAiJHtBVVRPX1NZU0xJTlVYTUVOVX0iID0gMSBdIDsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L3Zlc2FtZW51LmMzMiAke0RFU1R9JHtCT09URElSfS92ZXNhbWVudS5jMzIKKwkJaW5zdGFsbCAtbSAwNDQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9saWJjb20zMi5jMzIgJHtERVNUfSR7Qk9PVERJUn0vbGliY29tMzIuYzMyCisJCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGlidXRpbC5jMzIgJHtERVNUfSR7Qk9PVERJUn0vbGlidXRpbC5jMzIKKwkJaWYgWyAiJHtTWVNMSU5VWF9TUExBU0h9IiAhPSAiIiBdIDsgdGhlbgorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7U1lTTElOVVhfU1BMQVNIfSAke0RFU1R9JHtCT09URElSfS9zcGxhc2gubHNzCisJCWZpCisJZmkKK30KKworc3lzbGludXhfaXNvX3BvcHVsYXRlKCkgeworCWlzb19kaXI9JDEKKwlzeXNsaW51eF9wb3B1bGF0ZSAkaXNvX2RpciAke0lTT0xJTlVYRElSfSBpc29saW51eC5jZmcKKwlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2lzb2xpbnV4LmJpbiAkaXNvX2RpciR7SVNPTElOVVhESVJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9sZGxpbnV4LmMzMiAkaXNvX2RpciR7SVNPTElOVVhESVJ9Cit9CisKK3N5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSgpIHsKKwloZGRfZGlyPSQxCisJc3lzbGludXhfcG9wdWxhdGUgJGhkZF9kaXIgJHtTWVNMSU5VWERJUn0gc3lzbGludXguY2ZnCisJaW5zdGFsbCAtbSAwNDQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9sZGxpbnV4LnN5cyAkaGRkX2RpciR7U1lTTElOVVhESVJ9L2xkbGludXguc3lzCit9CisKK3N5c2xpbnV4X2hkZGltZ19pbnN0YWxsKCkgeworCXN5c2xpbnV4ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKK30KKworc3lzbGludXhfaGRkZGlyZWN0X2luc3RhbGwoKSB7CisJREVTVD0kMQorCXN5c2xpbnV4ICRERVNUCit9CisKK3B5dGhvbiBidWlsZF9zeXNsaW51eF9jZmcgKCkgeworICAgIGltcG9ydCBjb3B5CisgICAgaW1wb3J0IHN5cworCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisgICAgICAgIAorICAgIGxhYmVscyA9IGQuZ2V0VmFyKCdMQUJFTFMnLCBUcnVlKQorICAgIGlmIG5vdCBsYWJlbHM6CisgICAgICAgIGJiLmRlYnVnKDEsICJMQUJFTFMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKyAgICAKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ1NZU0xJTlVYQ0ZHJywgVHJ1ZSkKKyAgICBpZiBub3QgY2ZpbGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ1VuYWJsZSB0byByZWFkIFNZU0xJTlVYQ0ZHJykKKworICAgIHRyeToKKyAgICAgICAgY2ZnZmlsZSA9IGZpbGUoY2ZpbGUsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuZnVuY0ZhaWxlZCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgKGNmaWxlKSkKKworICAgIGNmZ2ZpbGUud3JpdGUoJyMgQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IE9FXG4nKQorCisgICAgb3B0cyA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9PUFRTJywgVHJ1ZSkKKworICAgIGlmIG9wdHM6CisgICAgICAgIGZvciBvcHQgaW4gb3B0cy5zcGxpdCgnOycpOgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnJXNcbicgJSBvcHQpCisKKyAgICBjZmdmaWxlLndyaXRlKCdBTExPV09QVElPTlMgMVxuJyk7CisgICAgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlID0gZC5nZXRWYXIoJ1NZU0xJTlVYX0RFRkFVTFRfQ09OU09MRScsIFRydWUpCisgICAgc3lzbGludXhfc2VyaWFsX3R0eSA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9TRVJJQUxfVFRZJywgVHJ1ZSkKKyAgICBzeXNsaW51eF9zZXJpYWwgPSBkLmdldFZhcignU1lTTElOVVhfU0VSSUFMJywgVHJ1ZSkKKyAgICBpZiBzeXNsaW51eF9zZXJpYWw6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1NFUklBTCAlc1xuJyAlIHN5c2xpbnV4X3NlcmlhbCkKKworICAgIG1lbnUgPSBkLmdldFZhcignQVVUT19TWVNMSU5VWE1FTlUnLCBUcnVlKQorCisgICAgaWYgbWVudSBhbmQgc3lzbGludXhfc2VyaWFsOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdERUZBVUxUIEdyYXBoaWNzIGNvbnNvbGUgJXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0RFRkFVTFQgJXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9USU1FT1VUJywgVHJ1ZSkKKworICAgIGlmIHRpbWVvdXQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1RJTUVPVVQgJXNcbicgJSB0aW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1RJTUVPVVQgNTBcbicpCisKKyAgICBwcm9tcHQgPSBkLmdldFZhcignU1lTTElOVVhfUFJPTVBUJywgVHJ1ZSkKKyAgICBpZiBwcm9tcHQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1BST01QVCAlc1xuJyAlIHByb21wdCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdQUk9NUFQgMVxuJykKKworICAgIGlmIG1lbnU6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3VpIHZlc2FtZW51LmMzMlxuJykKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSB0aXRsZSBTZWxlY3Qga2VybmVsIG9wdGlvbnMgYW5kIGJvb3Qga2VybmVsXG4nKQorICAgICAgICBjZmdmaWxlLndyaXRlKCdtZW51IHRhYm1zZyBQcmVzcyBbVGFiXSB0byBlZGl0LCBbUmV0dXJuXSB0byBzZWxlY3RcbicpCisgICAgICAgIHNwbGFzaCA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9TUExBU0gnLCBUcnVlKQorICAgICAgICBpZiBzcGxhc2g6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdtZW51IGJhY2tncm91bmQgc3BsYXNoLmxzc1xuJykKKyAgICAKKyAgICBmb3IgbGFiZWwgaW4gbGFiZWxzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBvdmVycmlkZXM6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAKKyAgICAgICAgYnR5cGVzID0gWyBbICIiLCBzeXNsaW51eF9kZWZhdWx0X2NvbnNvbGUgXSBdCisgICAgICAgIGlmIG1lbnUgYW5kIHN5c2xpbnV4X3NlcmlhbDoKKyAgICAgICAgICAgIGJ0eXBlcyA9IFsgWyAiR3JhcGhpY3MgY29uc29sZSAiLCBzeXNsaW51eF9kZWZhdWx0X2NvbnNvbGUgIF0sCisgICAgICAgICAgICAgICAgWyAiU2VyaWFsIGNvbnNvbGUgIiwgc3lzbGludXhfc2VyaWFsX3R0eSBdIF0KKworICAgICAgICBmb3IgYnR5cGUgaW4gYnR5cGVzOgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnTEFCRUwgJXMlc1xuS0VSTkVMIC92bWxpbnV6XG4nICUgKGJ0eXBlWzBdLCBsYWJlbCkpCisKKyAgICAgICAgICAgIGV4YXJncyA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9LRVJORUxfQVJHUycsIFRydWUpCisgICAgICAgICAgICBpZiBleGFyZ3M6CisgICAgICAgICAgICAgICAgYnR5cGVbMV0gKz0gIiAiICsgZXhhcmdzCisKKyAgICAgICAgICAgIGFwcGVuZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0FQUEVORCcsIFRydWUpCisgICAgICAgICAgICBpbml0cmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdJTklUUkQnLCBUcnVlKQorCisgICAgICAgICAgICBpZiBhcHBlbmQ6CisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnQVBQRU5EICcpCisKKyAgICAgICAgICAgICAgICBpZiBpbml0cmQ6CisgICAgICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ2luaXRyZD0vaW5pdHJkICcpCisKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdMQUJFTD0lcyAnJSAobGFiZWwpKQorICAgICAgICAgICAgICAgIGFwcGVuZCA9IHJlcGxhY2Vfcm9vdGZzX3V1aWQoZCwgYXBwZW5kKQorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzICVzXG4nICUgKGFwcGVuZCwgYnR5cGVbMV0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdBUFBFTkQgJXNcbicgJSBidHlwZVsxXSkKKworICAgIGNmZ2ZpbGUuY2xvc2UoKQorfQorYnVpbGRfc3lzbGludXhfY2ZnW3ZhcmRlcHNdICs9ICJBUFBFTkQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc3lzdGVtZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmU3MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwpAQCAtMCwwICsxLDE5MyBAQAorIyBUaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IHNob3VsZCBoYXZlIHN5c3RlbWQgcGFja2FnaW5nIHNjcmlwdHMgYWRkZWQuICBGb3IKKyMgZWFjaCBlbnRyeSwgb3B0aW9uYWxseSBoYXZlIGEgU1lTVEVNRF9TRVJWSUNFX1twYWNrYWdlXSB0aGF0IGxpc3RzIHRoZSBzZXJ2aWNlCisjIGZpbGVzIGluIHRoaXMgcGFja2FnZS4gIElmIHRoaXMgdmFyaWFibGUgaXNuJ3Qgc2V0LCBbcGFja2FnZV0uc2VydmljZSBpcyB1c2VkLgorU1lTVEVNRF9QQUNLQUdFUyA/PSAiJHtQTn0iCitTWVNURU1EX1BBQ0tBR0VTX2NsYXNzLW5hdGl2ZSA/PSAiIgorU1lTVEVNRF9QQUNLQUdFU19jbGFzcy1uYXRpdmVzZGsgPz0gIiIKKworIyBXaGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBzZXJ2aWNlcyBvbiBpbnN0YWxsYXRpb24uCitTWVNURU1EX0FVVE9fRU5BQkxFID8/PSAiZW5hYmxlIgorCisjIFRoaXMgY2xhc3Mgd2lsbCBiZSBpbmNsdWRlZCBpbiBhbnkgcmVjaXBlIHRoYXQgc3VwcG9ydHMgc3lzdGVtZCBpbml0IHNjcmlwdHMsCisjIGV2ZW4gaWYgc3lzdGVtZCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTLiAgQXMgc3VjaCBkb24ndCBtYWtlIGFueSBjaGFuZ2VzCisjIGRpcmVjdGx5IGJ1dCBjaGVjayB0aGUgRElTVFJPX0ZFQVRVUkVTIGZpcnN0LgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgICMgSWYgdGhlIGRpc3RybyBmZWF0dXJlcyBoYXZlIHN5c3RlbWQgYnV0IG5vdCBzeXN2aW5pdCwgaW5oaWJpdCB1cGRhdGUtcmNkCisgICAgIyBmcm9tIGRvaW5nIGFueSB3b3JrIHNvIHRoYXQgcHVyZS1zeXN0ZW1kIGltYWdlcyBkb24ndCBoYXZlIHJlZHVuZGFudCBpbml0CisgICAgIyBmaWxlcy4KKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuYXBwZW5kVmFyKCJERVBFTkRTIiwgIiBzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUiKQorICAgICAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitzeXN0ZW1kX3Bvc3RpbnN0KCkgeworT1BUUz0iIgorCitpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgIE9QVFM9Ii0tcm9vdD0kRCIKK2ZpCisKK2lmIHR5cGUgc3lzdGVtY3RsID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlzeXN0ZW1jdGwgJE9QVFMgJHtTWVNURU1EX0FVVE9fRU5BQkxFfSAke1NZU1RFTURfU0VSVklDRX0KKworCWlmIFsgLXogIiREIiAtYSAiJHtTWVNURU1EX0FVVE9fRU5BQkxFfSIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCXN5c3RlbWN0bCByZXN0YXJ0ICR7U1lTVEVNRF9TRVJWSUNFfQorCWZpCitmaQorfQorCitzeXN0ZW1kX3ByZXJtKCkgeworT1BUUz0iIgorCitpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgIE9QVFM9Ii0tcm9vdD0kRCIKK2ZpCisKK2lmIHR5cGUgc3lzdGVtY3RsID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlpZiBbIC16ICIkRCIgXTsgdGhlbgorCQlzeXN0ZW1jdGwgc3RvcCAke1NZU1RFTURfU0VSVklDRX0KKwlmaQorCisJc3lzdGVtY3RsICRPUFRTIGRpc2FibGUgJHtTWVNURU1EX1NFUlZJQ0V9CitmaQorfQorCisKK3N5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXNbdmFyZGVwc10gKz0gInN5c3RlbWRfcHJlcm0gc3lzdGVtZF9wb3N0aW5zdCIKK3N5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJPVkVSUklERVMiCisKKworcHl0aG9uIHN5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZ2V0X3BhY2thZ2VfdmFyKGQsIHZhciwgcGtnKToKKyAgICAgICAgdmFsID0gKGQuZ2V0VmFyKCclc18lcycgJSAodmFyLCBwa2cpLCBUcnVlKSBvciAiIikuc3RyaXAoKQorICAgICAgICBpZiB2YWwgPT0gIiI6CisgICAgICAgICAgICB2YWwgPSAoZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIikuc3RyaXAoKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICAjIENoZWNrIGlmIHN5c3RlbWQtcGFja2FnZXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBQQUNLQUdFUworICAgIGRlZiBzeXN0ZW1kX2NoZWNrX3BhY2thZ2UocGtnX3N5c3RlbWQpOgorICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2dfc3lzdGVtZCBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgYmIuZXJyb3IoJyVzIGRvZXMgbm90IGFwcGVhciBpbiBwYWNrYWdlIGxpc3QsIHBsZWFzZSBhZGQgaXQnICUgcGtnX3N5c3RlbWQpCisKKworICAgIGRlZiBzeXN0ZW1kX2dlbmVyYXRlX3BhY2thZ2Vfc2NyaXB0cyhwa2cpOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIHN5c3RlbWQgY2FsbHMgdG8gcG9zdGluc3QvcG9zdHJtIGZvciAlcycgJSBwa2cpCisKKyAgICAgICAgIyBBZGQgcGtnIHRvIHRoZSBvdmVycmlkZXMgc28gdGhhdCBpdCBmaW5kcyB0aGUgU1lTVEVNRF9TRVJWSUNFX3BrZworICAgICAgICAjIHZhcmlhYmxlLgorICAgICAgICBsb2NhbGRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorICAgICAgICBsb2NhbGRhdGEucHJlcGVuZFZhcigiT1ZFUlJJREVTIiwgcGtnICsgIjoiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gbG9jYWxkYXRhLmdldFZhcignc3lzdGVtZF9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlcm06CisgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlcm0gKz0gbG9jYWxkYXRhLmdldFZhcignc3lzdGVtZF9wcmVybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKKworCisgICAgIyBBZGQgZmlsZXMgdG8gRklMRVNfKi1zeXN0ZW1kIGlmIGV4aXN0ZW50IGFuZCBub3QgYWxyZWFkeSBkb25lCisgICAgZGVmIHN5c3RlbWRfYXBwZW5kX2ZpbGUocGtnX3N5c3RlbWQsIGZpbGVfYXBwZW5kKToKKyAgICAgICAgYXBwZW5kZWQgPSBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZmlsZV9hcHBlbmQpKToKKyAgICAgICAgICAgIHZhcl9uYW1lID0gIkZJTEVTXyIgKyBwa2dfc3lzdGVtZAorICAgICAgICAgICAgZmlsZXMgPSBkLmdldFZhcih2YXJfbmFtZSwgRmFsc2UpIG9yICIiCisgICAgICAgICAgICBpZiBmaWxlX2FwcGVuZCBub3QgaW4gZmlsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcih2YXJfbmFtZSwgIiAiICsgZmlsZV9hcHBlbmQpCisgICAgICAgICAgICAgICAgYXBwZW5kZWQgPSBUcnVlCisgICAgICAgIHJldHVybiBhcHBlbmRlZAorCisgICAgIyBBZGQgc3lzdGVtZCBmaWxlcyB0byBGSUxFU18qLXN5c3RlbWQsIHBhcnNlIGZvciBBbHNvPSBhbmQgZm9sbG93IHJlY3Vyc2l2ZQorICAgIGRlZiBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIHNlcnZpY2UsIGtleXMpOgorICAgICAgICAjIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbgorICAgICAgICBpZiBzeXN0ZW1kX2FwcGVuZF9maWxlKHBrZ19zeXN0ZW1kLCBvZS5wYXRoLmpvaW4ocGF0aCwgc2VydmljZSkpOgorICAgICAgICAgICAgZnVsbHBhdGggPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgcGF0aCwgc2VydmljZSkKKyAgICAgICAgICAgIGlmIHNlcnZpY2UuZmluZCgnLnNlcnZpY2UnKSAhPSAtMToKKyAgICAgICAgICAgICAgICAjIGZvciAqLnNlcnZpY2UgYWRkICpALnNlcnZpY2UKKyAgICAgICAgICAgICAgICBzZXJ2aWNlX2Jhc2UgPSBzZXJ2aWNlLnJlcGxhY2UoJy5zZXJ2aWNlJywgJycpCisgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlX2Jhc2UgKyAnQC5zZXJ2aWNlJywga2V5cykKKyAgICAgICAgICAgIGlmIHNlcnZpY2UuZmluZCgnLnNvY2tldCcpICE9IC0xOgorICAgICAgICAgICAgICAgICMgZm9yICouc29ja2V0IGFkZCAqLnNlcnZpY2UgYW5kICpALnNlcnZpY2UKKyAgICAgICAgICAgICAgICBzZXJ2aWNlX2Jhc2UgPSBzZXJ2aWNlLnJlcGxhY2UoJy5zb2NrZXQnLCAnJykKKyAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIHNlcnZpY2VfYmFzZSArICcuc2VydmljZScsIGtleXMpCisgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlX2Jhc2UgKyAnQC5zZXJ2aWNlJywga2V5cykKKyAgICAgICAgICAgIGZvciBrZXkgaW4ga2V5cy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICMgcmVjdXJzZSBhbGwgZGVwZW5kZW5jaWVzIGZvdW5kIGluIGtleXMgKCdBbHNvJzsnQ29uZmxpY3RzJzsuLikgYW5kIGFkZCB0byBmaWxlcworICAgICAgICAgICAgICAgIGNtZCA9ICJncmVwICVzICVzIHwgc2VkICdzLCVzPSwsZycgfCB0ciAnLCcgJ1xcbiciICUgKGtleSwgZnVsbHBhdGgsIGtleSkKKyAgICAgICAgICAgICAgICBwaXBlID0gb3MucG9wZW4oY21kLCAncicpCisgICAgICAgICAgICAgICAgbGluZSA9IHBpcGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJ1xuJywgJycpCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgbGluZSwga2V5cykKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBpcGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorCisgICAgIyBDaGVjayBzZXJ2aWNlLWZpbGVzIGFuZCBjYWxsIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZSBmb3IgZWFjaCBlbnRyeQorICAgIGRlZiBzeXN0ZW1kX2NoZWNrX3NlcnZpY2VzKCk6CisgICAgICAgIHNlYXJjaHBhdGhzID0gW29lLnBhdGguam9pbihkLmdldFZhcigic3lzY29uZmRpciIsIFRydWUpLCAic3lzdGVtZCIsICJzeXN0ZW0iKSxdCisgICAgICAgIHNlYXJjaHBhdGhzLmFwcGVuZChkLmdldFZhcigic3lzdGVtZF9zeXN0ZW1fdW5pdGRpciIsIFRydWUpKQorICAgICAgICBzeXN0ZW1kX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1NZU1RFTURfUEFDS0FHRVMnLCBUcnVlKQorCisgICAgICAgIGtleXMgPSAnQWxzbycKKyAgICAgICAgIyBzY2FuIGZvciBhbGwgaW4gU1lTVEVNRF9TRVJWSUNFW10KKyAgICAgICAgZm9yIHBrZ19zeXN0ZW1kIGluIHN5c3RlbWRfcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZvciBzZXJ2aWNlIGluIGdldF9wYWNrYWdlX3ZhcihkLCAnU1lTVEVNRF9TRVJWSUNFJywgcGtnX3N5c3RlbWQpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcGF0aF9mb3VuZCA9ICcnCisgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VhcmNocGF0aHM6CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBwYXRoLCBzZXJ2aWNlKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2ZvdW5kID0gcGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBwYXRoX2ZvdW5kICE9ICcnOgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGhfZm91bmQsIHNlcnZpY2UsIGtleXMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiU1lTVEVNRF9TRVJWSUNFXyVzIHZhbHVlICVzIGRvZXMgbm90IGV4aXN0IiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChwa2dfc3lzdGVtZCwgc2VydmljZSkpCisKKyAgICAjIFJ1biBhbGwgbW9kaWZpY2F0aW9ucyBvbmNlIHdoZW4gY3JlYXRpbmcgcGFja2FnZQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGQuZ2V0VmFyKCJEIiwgVHJ1ZSkpOgorICAgICAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHN5c3RlbWRfY2hlY2tfcGFja2FnZShwa2cpCisgICAgICAgICAgICBpZiBkLmdldFZhcignU1lTVEVNRF9TRVJWSUNFXycgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgIHN5c3RlbWRfZ2VuZXJhdGVfcGFja2FnZV9zY3JpcHRzKHBrZykKKyAgICAgICAgc3lzdGVtZF9jaGVja19zZXJ2aWNlcygpCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAic3lzdGVtZF9wb3B1bGF0ZV9wYWNrYWdlcyAiCisKK3B5dGhvbiBybV9zeXN0ZW1kX3VuaXRkaXIgKCl7CisgICAgaW1wb3J0IHNodXRpbAorICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHN5c3RlbWRfdW5pdGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBkLmdldFZhcignc3lzdGVtZF91bml0ZGlyJywgVHJ1ZSkpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN5c3RlbWRfdW5pdGRpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN5c3RlbWRfdW5pdGRpcikKKyAgICAgICAgc3lzdGVtZF9saWJkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3lzdGVtZF91bml0ZGlyKQorICAgICAgICBpZiAob3MucGF0aC5leGlzdHMoc3lzdGVtZF9saWJkaXIpIGFuZCBub3Qgb3MubGlzdGRpcihzeXN0ZW1kX2xpYmRpcikpOgorICAgICAgICAgICAgb3Mucm1kaXIoc3lzdGVtZF9saWJkaXIpCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gInJtX3N5c3RlbWRfdW5pdGRpciAiCisKK3B5dGhvbiBybV9zeXN2aW5pdF9pbml0ZGRpciAoKXsKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgc3lzdl9pbml0ZGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCAoZC5nZXRWYXIoJ0lOSVRfRF9ESVInLCBUcnVlKSBvciAiL2V0Yy9pbml0LmQiKSkKKworICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICBvcy5wYXRoLmV4aXN0cyhzeXN2X2luaXRkZGlyKToKKyAgICAgICAgc3lzdGVtZF9zeXN0ZW1fdW5pdGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBkLmdldFZhcignc3lzdGVtZF9zeXN0ZW1fdW5pdGRpcicsIFRydWUpKQorCisgICAgICAgICMgSWYgc3lzdGVtZF9zeXN0ZW1fdW5pdGRpciBjb250YWlucyBhbnl0aGluZywgZGVsZXRlIHN5c3ZfaW5pdGRkaXIKKyAgICAgICAgaWYgKG9zLnBhdGguZXhpc3RzKHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIpIGFuZCBvcy5saXN0ZGlyKHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIpKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc3lzdl9pbml0ZGRpcikKK30KK2RvX2luc3RhbGxbcG9zdGZ1bmNzXSArPSAicm1fc3lzdmluaXRfaW5pdGRkaXIgIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdGVybWluYWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTc3YzZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MKQEAgLTAsMCArMSw5NCBAQAorT0VfVEVSTUlOQUwgPz0gJ2F1dG8nCitPRV9URVJNSU5BTFt0eXBlXSA9ICdjaG9pY2UnCitPRV9URVJNSU5BTFtjaG9pY2VzXSA9ICdhdXRvIG5vbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtAIiAiLmpvaW4oby5uYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvIGluIG9lLnRlcm1pbmFsLnByaW9yaXRpemVkKCkpfScKKworT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAnRVhUUkFfT0VNQUtFJworT0VfVEVSTUlOQUxfRVhQT1JUU1t0eXBlXSA9ICdsaXN0JworCitYQVVUSE9SSVRZID89ICIke0hPTUV9Ly5YYXV0aG9yaXR5IgorU0hFTEwgPz0gImJhc2giCisKKworZGVmIGVtaXRfdGVybWluYWxfZnVuYyhjb21tYW5kLCBlbnZkYXRhLCBkKToKKyAgICBjbWRfZnVuYyA9ICdkb190ZXJtaW5hbCcKKworICAgIGVudmRhdGEuc2V0VmFyKGNtZF9mdW5jLCAnZXhlYyAnICsgY29tbWFuZCkKKyAgICBlbnZkYXRhLnNldFZhckZsYWcoY21kX2Z1bmMsICdmdW5jJywgMSkKKworICAgIHJ1bmZtdCA9IGQuZ2V0VmFyKCdCQl9SVU5GTVQnLCBUcnVlKSBvciAicnVuLntmdW5jfS57cGlkfSIKKyAgICBydW5maWxlID0gcnVuZm10LmZvcm1hdChmdW5jPWNtZF9mdW5jLCB0YXNrPWNtZF9mdW5jLCB0YXNrZnVuYz1jbWRfZnVuYywgcGlkPW9zLmdldHBpZCgpKQorICAgIHJ1bmZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1QnLCBUcnVlKSwgcnVuZmlsZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHJ1bmZpbGUpKQorCisgICAgd2l0aCBvcGVuKHJ1bmZpbGUsICd3JykgYXMgc2NyaXB0OgorICAgICAgICBzY3JpcHQud3JpdGUoJyMhL2Jpbi9zaCAtZVxuJykKKyAgICAgICAgYmIuZGF0YS5lbWl0X2Z1bmMoY21kX2Z1bmMsIHNjcmlwdCwgZW52ZGF0YSkKKyAgICAgICAgc2NyaXB0LndyaXRlKGNtZF9mdW5jKQorICAgICAgICBzY3JpcHQud3JpdGUoIlxuIikKKyAgICBvcy5jaG1vZChydW5maWxlLCAwNzU1KQorCisgICAgcmV0dXJuIHJ1bmZpbGUKKworZGVmIG9lX3Rlcm1pbmFsKGNvbW1hbmQsIHRpdGxlLCBkKToKKyAgICBpbXBvcnQgb2UuZGF0YQorICAgIGltcG9ydCBvZS50ZXJtaW5hbAorCisgICAgZW52ZGF0YSA9IGJiLmRhdGEuaW5pdCgpCisKKyAgICBmb3IgdiBpbiBvcy5lbnZpcm9uOgorICAgICAgICBlbnZkYXRhLnNldFZhcih2LCBvcy5lbnZpcm9uW3ZdKQorICAgICAgICBlbnZkYXRhLnNldFZhckZsYWcodiwgJ2V4cG9ydCcsIDEpCisKKyAgICBmb3IgZXhwb3J0IGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ09FX1RFUk1JTkFMX0VYUE9SVFMnLCBkKToKKyAgICAgICAgdmFsdWUgPSBkLmdldFZhcihleHBvcnQsIFRydWUpCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MuZW52aXJvbltleHBvcnRdID0gc3RyKHZhbHVlKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXIoZXhwb3J0LCBzdHIodmFsdWUpKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXJGbGFnKGV4cG9ydCwgJ2V4cG9ydCcsIDEpCisgICAgICAgIGlmIGV4cG9ydCA9PSAiUFNFVURPX0RJU0FCTEVEIjoKKyAgICAgICAgICAgIGlmICJQU0VVRE9fVU5MT0FEIiBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWyJQU0VVRE9fVU5MT0FEIl0KKyAgICAgICAgICAgIGVudmRhdGEuZGVsVmFyKCJQU0VVRE9fVU5MT0FEIikKKworICAgICMgQWRkIGluIGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgdXNlcidzIG9yaWdpbmFsIGVudmlyb25tZW50IHdoaWNoCisgICAgIyBoYXZlbid0IHN1YnNlcXVudGx5IGJlZW4gc2V0L2NoYW5nZWQKKyAgICBvcmlnYmJlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKSBvciB7fQorICAgIGZvciBrZXkgaW4gb3JpZ2JiZW52OgorICAgICAgICBpZiBrZXkgaW4gZW52ZGF0YToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZhbHVlID0gb3JpZ2JiZW52LmdldFZhcihrZXksIFRydWUpCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gc3RyKHZhbHVlKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXIoa2V5LCBzdHIodmFsdWUpKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXJGbGFnKGtleSwgJ2V4cG9ydCcsIDEpCisKKyAgICAjIEEgY29tcGxleCBQUzEgbWlnaHQgbmVlZCBtb3JlIGVzY2FwaW5nIG9mIGNoYXJzLgorICAgICMgTGV0cyBub3QgZXhwb3J0IFBTMSBpbnN0ZWFkLgorICAgIGVudmRhdGEuZGVsVmFyKCJQUzEiKQorCisgICAgIyBSZXBsYWNlIGNvbW1hbmQgd2l0aCBhbiBleGVjdXRhYmxlIHdyYXBwZXIgc2NyaXB0CisgICAgY29tbWFuZCA9IGVtaXRfdGVybWluYWxfZnVuYyhjb21tYW5kLCBlbnZkYXRhLCBkKQorCisgICAgdGVybWluYWwgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdPRV9URVJNSU5BTCcsIGQpLmxvd2VyKCkKKyAgICBpZiB0ZXJtaW5hbCA9PSAnbm9uZSc6CisgICAgICAgIGJiLmZhdGFsKCdEZXZzaGVsbCB1c2FnZSBkaXNhYmxlZCB3aXRoIE9FX1RFUk1JTkFMJykKKyAgICBlbGlmIHRlcm1pbmFsICE9ICdhdXRvJzoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2UudGVybWluYWwuc3Bhd24odGVybWluYWwsIGNvbW1hbmQsIHRpdGxlLCBOb25lLCBkKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5VbnN1cHBvcnRlZFRlcm1pbmFsOgorICAgICAgICAgICAgYmIud2FybignVW5zdXBwb3J0ZWQgdGVybWluYWwgIiVzIiwgZGVmYXVsdGluZyB0byAiYXV0byInICUKKyAgICAgICAgICAgICAgICAgICAgdGVybWluYWwpCisgICAgICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5FeGVjdXRpb25FcnJvciBhcyBleGM6CisgICAgICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHNwYXduIHRlcm1pbmFsICVzOiAlcycgJSAodGVybWluYWwsIGV4YykpCisKKyAgICB0cnk6CisgICAgICAgIG9lLnRlcm1pbmFsLnNwYXduX3ByZWZlcnJlZChjb21tYW5kLCB0aXRsZSwgTm9uZSwgZCkKKyAgICBleGNlcHQgb2UudGVybWluYWwuTm9TdXBwb3J0ZWRUZXJtaW5hbHM6CisgICAgICAgIGJiLmZhdGFsKCdObyB2YWxpZCB0ZXJtaW5hbCBmb3VuZCwgdW5hYmxlIHRvIG9wZW4gZGV2c2hlbGwnKQorICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5FeGVjdXRpb25FcnJvciBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCdVbmFibGUgdG8gc3Bhd24gdGVybWluYWwgJXM6ICVzJyAlICh0ZXJtaW5hbCwgZXhjKSkKKworb2VfdGVybWluYWxbdmFyZGVwc2V4Y2x1ZGVdID0gIkJCX09SSUdFTlYiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLWF1dG8uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UtYXV0by5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDU5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLWF1dG8uYmJjbGFzcwpAQCAtMCwwICsxLDIzIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworCisjIFJ1biB0ZXN0cyBhdXRvbWF0aWNhbGx5IG9uIGFuIGltYWdlIGFmdGVyIHRoZSBpbWFnZSBpcyBjb25zdHJ1Y3RlZAorIyAoYXMgb3Bwb3NlZCB0byB0ZXN0aW1hZ2UuYmJjbGFzcyBhbG9uZSB3aGVyZSB0ZXN0cyBtdXN0IGJlIGNhbGxlZAorIyBtYW51YWxseSB1c2luZyBiaXRiYWtlIC1jIHRlc3RpbWFnZSA8aW1hZ2U+KS4KKyMKKyMgTk9URTogdG8gdXNlIHRoaXMgY2xhc3MsIHNpbXBseSBzZXQgVEVTVF9JTUFHRSA9ICIxIiAtIG5vIG5lZWQgdG8KKyMgaW5oZXJpdCBpdCBzaW5jZSB0aGF0IHdpbGwgYmUgZG9uZSBpbiBpbWFnZS5iYmNsYXNzIHdoZW4gdGhpcyB2YXJpYWJsZQorIyBoYXMgYmVlbiBzZXQuCisjCisjIFNlZSB0ZXN0aW1hZ2UuYmJjbGFzcyBmb3IgdGhlIHRlc3QgaW1wbGVtZW50YXRpb24uCisKK2luaGVyaXQgdGVzdGltYWdlCisKK3B5dGhvbiBkb190ZXN0aW1hZ2VfYXV0bygpIHsKKyAgICB0ZXN0aW1hZ2VfbWFpbihkKQorfQorYWRkdGFzayB0ZXN0aW1hZ2VfYXV0byBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fcm9vdGZzCitkb190ZXN0aW1hZ2VfYXV0b1tkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RpbWFnZV9hdXRvW2xvY2tmaWxlc10gKz0gIiR7VEVTVElNQUdFTE9DS30iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5MThiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDQyMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKworIyB0ZXN0aW1hZ2UuYmJjbGFzcyBlbmFibGVzIHRlc3Rpbmcgb2YgcWVtdSBpbWFnZXMgdXNpbmcgcHl0aG9uIHVuaXR0ZXN0cy4KKyMgTW9zdCBvZiB0aGUgdGVzdHMgYXJlIGNvbW1hbmRzIHJ1biBvbiB0YXJnZXQgaW1hZ2Ugb3ZlciBzc2guCisjIFRvIHVzZSBpdCBhZGQgdGVzdGltYWdlIHRvIGdsb2JhbCBpbmhlcml0IGFuZCBjYWxsIHlvdXIgdGFyZ2V0IGltYWdlIHdpdGggLWMgdGVzdGltYWdlCisjIFlvdSBjYW4gdHJ5IGl0IG91dCBsaWtlIHRoaXM6CisjIC0gZmlyc3QgYnVpbGQgYSBxZW11IGNvcmUtaW1hZ2Utc2F0bworIyAtIGFkZCBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiIGluIGxvY2FsLmNvbmYKKyMgLSB0aGVuIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZS4gVGhhdCB3aWxsIHJ1biBhIHN0YW5kYXJkIHN1aXRlIG9mIHRlc3RzLgorCisjIFlvdSBjYW4gc2V0IChvciBhcHBlbmQgdG8pIFRFU1RfU1VJVEVTIGluIGxvY2FsLmNvbmYgdG8gc2VsZWN0IHRoZSB0ZXN0cworIyB3aGljaCB5b3Ugd2FudCB0byBydW4gZm9yIHlvdXIgdGFyZ2V0LgorIyBUaGUgdGVzdCBuYW1lcyBhcmUgdGhlIG1vZHVsZSBuYW1lcyBpbiBtZXRhL2xpYi9vZXFhL3J1bnRpbWUuCisjIEVhY2ggbmFtZSBpbiBURVNUX1NVSVRFUyByZXByZXNlbnRzIGEgcmVxdWlyZWQgdGVzdCBmb3IgdGhlIGltYWdlLiAobm8gc2tpcHBpbmcgYWxsb3dlZCkKKyMgQXBwZW5kaW5nICJhdXRvIiBtZWFucyB0aGF0IGl0IHdpbGwgdHJ5IHRvIHJ1biBhbGwgdGVzdHMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIHRoZSBpbWFnZSAoZWFjaCB0ZXN0IGRlY2lkZXMgdGhhdCBvbiBpdCdzIG93bikuCisjIE5vdGUgdGhhdCBvcmRlciBpbiBURVNUX1NVSVRFUyBpcyByZWxldmFudDogdGVzdHMgYXJlIHJ1biBpbiBhbiBvcmRlciBzdWNoIHRoYXQKKyMgdGVzdHMgbWVudGlvbmVkIGluIEBza2lwVW5sZXNzUGFzc2VkIHJ1biBiZWZvcmUgdGhlIHRlc3RzIHRoYXQgZGVwZW5kIG9uIHRoZW0sCisjIGJ1dCB3aXRob3V0IHN1Y2ggZGVwZW5kZW5jaWVzLCB0ZXN0cyBydW4gaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZAorIyBpbiBURVNUX1NVSVRFUy4KKyMKKyMgQSBsYXllciBjYW4gYWRkIGl0cyBvd24gdGVzdHMgaW4gbGliL29lcWEvcnVudGltZSwgcHJvdmlkZWQgaXQgZXh0ZW5kcyBCQlBBVEggYXMgbm9ybWFsIGluIGl0cyBsYXllci5jb25mLgorCisjIFRFU1RfTE9HX0RJUiBjb250YWlucyBhIGNvbW1hbmQgc3NoIGxvZyBhbmQgbWF5IGNvbnRhaW4gaW5mcm9tYXRpb24gYWJvdXQgd2hhdCBjb21tYW5kIGlzIHJ1bm5pbmcsIG91dHB1dCBhbmQgcmV0dXJuIGNvZGVzIGFuZCBmb3IgcWVtdSBhIGJvb3QgbG9nIHRpbGwgbG9naW4uCisjIEJvb3RpbmcgaXMgaGFuZGxlZCBieSB0aGlzIGNsYXNzLCBhbmQgaXQncyBub3QgYSB0ZXN0IGluIGl0c2VsZi4KKyMgVEVTVF9RRU1VQk9PVF9USU1FT1VUIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhlIGxhdW5jaCBjb2RlIHdpbGwgd2FpdCBmb3IgdGhlIGxvZ2luIHByb21wdC4KKworVEVTVF9MT0dfRElSID89ICIke1dPUktESVJ9L3Rlc3RpbWFnZSIKKworVEVTVF9FWFBPUlRfRElSID89ICIke1RNUERJUn0vdGVzdGltYWdlLyR7UE59IgorVEVTVF9FWFBPUlRfT05MWSA/PSAiMCIKKworUlBNVEVTVFNVSVRFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9QS0dUWVBFJywgJ3JwbScsICdzbWFydCBycG0nLCAnJywgZCl9IgorCitERUZBVUxUX1RFU1RfU1VJVEVTID0gInBpbmcgYXV0byIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1taW5pbWFsID0gInBpbmciCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0byA9ICJwaW5nIHNzaCBkZiBjb25ubWFuIHN5c2xvZyB4b3JnIHNjcCB2bmMgZGF0ZSBkbWVzZyBwYXJzZWxvZ3MgJHtSUE1URVNUU1VJVEV9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdycG0nLCAncHl0aG9uJywgJycsIGQpfSIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1zYXRvLXNkayA9ICJwaW5nIHNzaCBkZiBjb25ubWFuIHN5c2xvZyB4b3JnIHNjcCB2bmMgZGF0ZSBwZXJsIGxkZCBnY2Mga2VybmVsbW9kdWxlIGRtZXNnIHB5dGhvbiBwYXJzZWxvZ3MgJHtSUE1URVNUU1VJVEV9IgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAicGluZyBidWlsZGN2cyBidWlsZGlwdGFibGVzIGJ1aWxkc3Vkb2t1IGNvbm5tYW4gZGF0ZSBkZiBnY2Mga2VybmVsbW9kdWxlIGxkZCBwYW0gcGFyc2Vsb2dzIHBlcmwgcHl0aG9uIHNjcCAke1JQTVRFU1RTVUlURX0gc3NoIHN5c2xvZyBsb2dyb3RhdGUiCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLW1ldGEtdG9vbGNoYWluID0gImF1dG8iCisKKyMgYWFyY2g2NCBoYXMgbm8gZ3JhcGhpY3MKK0RFRkFVTFRfVEVTVF9TVUlURVNfcmVtb3ZlX2FhcmNoNjQgPSAieG9yZyB2bmMiCisKKyNxZW11bWlwcyBpcyB0b28gc2xvdyBmb3IgYnVpbGRzdWRva3UKK0RFRkFVTFRfVEVTVF9TVUlURVNfcmVtb3ZlX3FlbXVtaXBzID0gImJ1aWxkc3Vkb2t1IgorCitURVNUX1NVSVRFUyA/PSAiJHtERUZBVUxUX1RFU1RfU1VJVEVTfSIKKworVEVTVF9RRU1VQk9PVF9USU1FT1VUID89ICIxMDAwIgorVEVTVF9UQVJHRVQgPz0gInFlbXUiCitURVNUX1RBUkdFVF9JUCA/PSAiIgorVEVTVF9TRVJWRVJfSVAgPz0gIiIKKworVEVTVElNQUdFREVQRU5EUyA9ICIiCitURVNUSU1BR0VERVBFTkRTX3FlbXVhbGwgPSAicWVtdS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBxZW11LWhlbHBlci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworVEVTVElNQUdFTE9DSyA9ICIke1RNUERJUn0vdGVzdGltYWdlLmxvY2siCitURVNUSU1BR0VMT0NLX3FlbXVhbGwgPSAiIgorCitURVNUSU1BR0VfRFVNUF9ESVIgPz0gIi90bXAvb2Utc2F2ZWQtdGVzdHMvIgorCit0ZXN0aW1hZ2VfZHVtcF90YXJnZXQgKCkgeworICAgIHRvcCAtYm4xCisgICAgcHMKKyAgICBmcmVlCisgICAgZGYKKyAgICAjIFRoZSBuZXh0IGNvbW1hbmQgd2lsbCBleHBvcnQgdGhlIGRlZmF1bHQgZ2F0ZXdheSBJUAorICAgIGV4cG9ydCBERUZBVUxUX0dBVEVXQVk9JChpcCByb3V0ZSB8IGF3ayAnL2RlZmF1bHQvIHsgcHJpbnQgJDN9JykKKyAgICBwaW5nIC1jMyAkREVGQVVMVF9HQVRFV0FZCisgICAgZG1lc2cKKyAgICBuZXRzdGF0IC1hbgorICAgIGlwIGFkZHJlc3MKKyAgICAjIE5leHQgY29tbWFuZCB3aWxsIGR1bXAgbG9ncyBmcm9tIC92YXIvbG9nLworICAgIGZpbmQgL3Zhci9sb2cvIC10eXBlIGYgMj4vZGV2L251bGwgLWV4ZWMgZWNobyAiPT09PT09PT09PT09PT09PT09PT0iIFw7IC1leGVjIGVjaG8ge30gXDsgLWV4ZWMgZWNobyAiPT09PT09PT09PT09PT09PT09PT0iIFw7IC1leGVjIGNhdCB7fSBcOyAtZXhlYyBlY2hvICIiIFw7Cit9CisKK3Rlc3RpbWFnZV9kdW1wX2hvc3QgKCkgeworICAgIHRvcCAtYm4xCisgICAgcHMgLWVmCisgICAgZnJlZQorICAgIGRmCisgICAgbWVtc3RhdAorICAgIGRtZXNnCisgICAgbmV0c3RhdCAtYW4KK30KKworcHl0aG9uIGRvX3Rlc3RpbWFnZSgpIHsKKyAgICB0ZXN0aW1hZ2VfbWFpbihkKQorfQorYWRkdGFzayB0ZXN0aW1hZ2UKK2RvX3Rlc3RpbWFnZVtub3N0YW1wXSA9ICIxIgorZG9fdGVzdGltYWdlW2RlcGVuZHNdICs9ICIke1RFU1RJTUFHRURFUEVORFN9IgorZG9fdGVzdGltYWdlW2xvY2tmaWxlc10gKz0gIiR7VEVTVElNQUdFTE9DS30iCisKK3B5dGhvbiBkb190ZXN0c2RrKCkgeworICAgIHRlc3RzZGtfbWFpbihkKQorfQorYWRkdGFzayB0ZXN0c2RrCitkb190ZXN0c2RrW25vc3RhbXBdID0gIjEiCitkb190ZXN0c2RrW2RlcGVuZHNdICs9ICIke1RFU1RJTUFHRURFUEVORFN9IgorZG9fdGVzdHNka1tsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgorCisjIGdldCB0ZXN0Y2FzZSBsaXN0IGZyb20gc3BlY2lmaWVkIGZpbGUKKyMgaWYgcGF0aCBpcyBhIHJlbGF0aXZlIHBhdGgsIHRoZW4gcmVsYXRpdmUgdG8gYnVpbGQvY29uZi8KK2RlZiByZWFkX3Rlc3RsaXN0KGQsIGZwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmcGF0aCk6CisgICAgICAgIGJ1aWxkZGlyID0gZC5nZXRWYXIoIlRPUERJUiIsIFRydWUpCisgICAgICAgIGZwYXRoID0gb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZiIsIGZwYXRoKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmcGF0aCk6CisgICAgICAgIGJiLmZhdGFsKCJObyBzdWNoIG1hbmlmZXN0IGZpbGU6ICIsIGZwYXRoKQorICAgIHRjcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gb3BlbihmcGF0aCkucmVhZGxpbmVzKCk6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgbGluZSBhbmQgbm90IGxpbmUuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgdGNzLmFwcGVuZChsaW5lKQorICAgIHJldHVybiAiICIuam9pbih0Y3MpCisKK2RlZiBnZXRfdGVzdHNfbGlzdChkLCB0eXBlPSJydW50aW1lIik6CisgICAgdGVzdHN1aXRlcyA9IFtdCisgICAgdGVzdHNsaXN0ID0gW10KKyAgICBtYW5pZmVzdHMgPSBkLmdldFZhcigiVEVTVF9TVUlURVNfTUFOSUZFU1QiLCBUcnVlKQorICAgIGlmIG1hbmlmZXN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgbWFuaWZlc3RzID0gbWFuaWZlc3RzLnNwbGl0KCkKKyAgICAgICAgZm9yIG1hbmlmZXN0IGluIG1hbmlmZXN0czoKKyAgICAgICAgICAgIHRlc3RzdWl0ZXMuZXh0ZW5kKHJlYWRfdGVzdGxpc3QoZCwgbWFuaWZlc3QpLnNwbGl0KCkpCisgICAgZWxzZToKKyAgICAgICAgdGVzdHN1aXRlcyA9IGQuZ2V0VmFyKCJURVNUX1NVSVRFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBpZiB0eXBlID09ICJzZGsiOgorICAgICAgICB0ZXN0c3VpdGVzID0gKGQuZ2V0VmFyKCJURVNUX1NVSVRFU19TREsiLCBUcnVlKSBvciAiYXV0byIpLnNwbGl0KCkKKyAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoJzonKQorCisgICAgIyBUaGlzIHJlbGllcyBvbiBsaWIvIHVuZGVyIGVhY2ggZGlyZWN0b3J5IGluIEJCUEFUSCBiZWluZyBhZGRlZCB0byBzeXMucGF0aAorICAgICMgKGFzIGRvbmUgYnkgZGVmYXVsdCBpbiBiYXNlLmJiY2xhc3MpCisgICAgZm9yIHRlc3RuYW1lIGluIHRlc3RzdWl0ZXM6CisgICAgICAgIGlmIHRlc3RuYW1lICE9ICJhdXRvIjoKKyAgICAgICAgICAgIGlmIHRlc3RuYW1lLnN0YXJ0c3dpdGgoIm9lcWEuIik6CisgICAgICAgICAgICAgICAgdGVzdHNsaXN0LmFwcGVuZCh0ZXN0bmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIHAgaW4gYmJwYXRoOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwLCAnbGliJywgJ29lcWEnLCB0eXBlLCB0ZXN0bmFtZSArICcucHknKSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQoIm9lcWEuIiArIHR5cGUgKyAiLiIgKyB0ZXN0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ1Rlc3QgJXMgc3BlY2lmaWVkIGluIFRFU1RfU1VJVEVTIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiBsaWIvb2VxYS9ydW50aW1lIHVuZGVyIEJCUEFUSCcgJSB0ZXN0bmFtZSkKKworICAgIGlmICJhdXRvIiBpbiB0ZXN0c3VpdGVzOgorICAgICAgICBkZWYgYWRkX2F1dG9fbGlzdChwYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdUZXN0cyBkaXJlY3RvcnkgJXMgZXhpc3RzIGJ1dCBpcyBtaXNzaW5nIF9faW5pdF9fLnB5JyAlIHBhdGgpCisgICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfJyldKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gJ29lcWEuJyArIHR5cGUgKyAnLicgKyBmWzotM10KKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUgbm90IGluIHRlc3RzbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNsaXN0LmFwcGVuZChtb2R1bGUpCisKKyAgICAgICAgZm9yIHAgaW4gYmJwYXRoOgorICAgICAgICAgICAgdGVzdHBhdGggPSBvcy5wYXRoLmpvaW4ocCwgJ2xpYicsICdvZXFhJywgdHlwZSkKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICdTZWFyY2hpbmcgZm9yIHRlc3RzIGluICVzJyAlIHRlc3RwYXRoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGVzdHBhdGgpOgorICAgICAgICAgICAgICAgIGFkZF9hdXRvX2xpc3QodGVzdHBhdGgpCisKKyAgICByZXR1cm4gdGVzdHNsaXN0CisKKworZGVmIGV4cG9ydFRlc3RzKGQsdGMpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBwa2d1dGlsCisKKyAgICBleHBvcnRwYXRoID0gZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpCisKKyAgICBzYXZlZGF0YSA9IHt9CisgICAgc2F2ZWRhdGFbImQiXSA9IHt9CisgICAgc2F2ZWRhdGFbInRhcmdldCJdID0ge30KKyAgICBzYXZlZGF0YVsiaG9zdF9kdW1wZXIiXSA9IHt9CisgICAgZm9yIGtleSBpbiB0Yy5fX2RpY3RfXzoKKyAgICAgICAgIyBzcGVjaWFsIGNhc2VzCisgICAgICAgIGlmIGtleSAhPSAiZCIgYW5kIGtleSAhPSAidGFyZ2V0IiBhbmQga2V5ICE9ICJob3N0X2R1bXBlciI6CisgICAgICAgICAgICBzYXZlZGF0YVtrZXldID0gZ2V0YXR0cih0Yywga2V5KQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXVsiaXAiXSA9IHRjLnRhcmdldC5pcCBvciBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXVsic2VydmVyX2lwIl0gPSB0Yy50YXJnZXQuc2VydmVyX2lwIG9yIGQuZ2V0VmFyKCJURVNUX1NFUlZFUl9JUCIsIFRydWUpCisKKyAgICBrZXlzID0gWyBrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoIl8iKSBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJCQiIpIFwKKyAgICAgICAgICAgIGFuZCBub3Qga2V5LnN0YXJ0c3dpdGgoIkJfcG4iKSBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJkb18iKSBhbmQgbm90IGQuZ2V0VmFyRmxhZyhrZXksICJmdW5jIildCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzYXZlZGF0YVsiZCJdW2tleV0gPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yOgorICAgICAgICAgICAgIyB3ZSBkb24ndCBjYXJlIGFib3V0IHRob3NlIGFueXdheQorICAgICAgICAgICAgcGFzcworCisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl1bInBhcmVudF9kaXIiXSA9IHRjLmhvc3RfZHVtcGVyLnBhcmVudF9kaXIKKyAgICBzYXZlZGF0YVsiaG9zdF9kdW1wZXIiXVsiY21kcyJdID0gdGMuaG9zdF9kdW1wZXIuY21kcworCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAidGVzdGRhdGEuanNvbiIpLCAidyIpIGFzIGY6CisgICAgICAgICAgICBqc29uLmR1bXAoc2F2ZWRhdGEsIGYsIHNraXBrZXlzPVRydWUsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICMgbm93IHN0YXJ0IGNvcHlpbmcgZmlsZXMKKyAgICAjIHdlJ2xsIGJhc2ljYWxseSBjb3B5IGV2ZXJ5dGhpbmcgdW5kZXIgbWV0YS9saWIvb2VxYSwgd2l0aCB0aGVzZSBleGNlcHRpb25zCisgICAgIyAgLSBvZXFhL3RhcmdldGNvbnRyb2wucHkgLSBub3QgbmVlZGVkCisgICAgIyAgLSBvZXFhL3NlbGZ0ZXN0IC0gc29tZXRoaW5nIGVsc2UKKyAgICAjIFRoYXQgbWVhbnM6CisgICAgIyAgIC0gYWxsIHRlc3RzIGZyb20gb2VxYS9ydW50aW1lIGRlZmluZWQgaW4gVEVTVF9TVUlURVMgKGluY2x1ZGluZyBmcm9tIG90aGVyIGxheWVycykKKyAgICAjICAgLSB0aGUgY29udGVudHMgb2Ygb2VxYS91dGlscyBhbmQgb2VxYS9ydW50aW1lL2ZpbGVzCisgICAgIyAgIC0gb2VxYS9vZXRlc3QucHkgYW5kIG9lcWEvcnVuZXhwb3J0LnB5ICh0aGlzIHdpbGwgZ2V0IGNvcGllZCB0byBleHBvcnRwYXRoIG5vdCBleHBvcnRwYXRoL29lcWEpCisgICAgIyAgIC0gX19pbml0X18ucHkgZmlsZXMKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUvZmlsZXMiKSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3V0aWxzIikpCisgICAgIyBjb3B5IHRlc3QgbW9kdWxlcywgdGhpcyBzaG91bGQgY292ZXIgdGVzdHMgaW4gb3RoZXIgbGF5ZXJzIHRvbworICAgIGZvciB0IGluIHRjLnRlc3RzbGlzdDoKKyAgICAgICAgbW9kID0gcGtndXRpbC5nZXRfbG9hZGVyKHQpCisgICAgICAgIHNodXRpbC5jb3B5Mihtb2QuZmlsZW5hbWUsIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lIikpCisgICAgIyBjb3B5IF9faW5pdF9fLnB5IGZpbGVzCisgICAgb2VxYWRpciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcigib2VxYSIpLmZpbGVuYW1lCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAiX19pbml0X18ucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhIikpCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVudGltZS9fX2luaXRfXy5weSIpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZSIpKQorICAgICMgY29weSBvZXFhL29ldGVzdC5weSBhbmQgb2VxYS9ydW5leHBvcnRlZC5weQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgIm9ldGVzdC5weSIpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEiKSkKKyAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJydW5leHBvcnRlZC5weSIpLCBleHBvcnRwYXRoKQorICAgICMgY29weSBvZXFhL3V0aWxzLyoucHkKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ob2VxYWRpciwgInV0aWxzIikpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ocm9vdCwgZiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS91dGlscyIpKQorICAgICMgY29weSBvZXFhL3J1bnRpbWUvZmlsZXMvKgorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVudGltZS9maWxlcyIpKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKHJvb3QsIGYpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZS9maWxlcyIpKQorCisgICAgYmIucGxhaW4oIkV4cG9ydGVkIHRlc3RzIHRvOiAlcyIgJSBleHBvcnRwYXRoKQorCisKK2RlZiB0ZXN0aW1hZ2VfbWFpbihkKToKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgb2VxYS5ydW50aW1lCisgICAgaW1wb3J0IHRpbWUKKyAgICBpbXBvcnQgc2lnbmFsCisgICAgZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgbG9hZFRlc3RzLCBydW5UZXN0cworICAgIGZyb20gb2VxYS50YXJnZXRjb250cm9sIGltcG9ydCBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIKKyAgICBmcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgZ2V0X2hvc3RfZHVtcGVyCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgZXhwb3J0ID0gb2UudXRpbHMuY29uZGl0aW9uYWwoIlRFU1RfRVhQT1JUX09OTFkiLCAiMSIsIFRydWUsIEZhbHNlLCBkKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkpCisgICAgaWYgZXhwb3J0OgorICAgICAgICBiYi51dGlscy5yZW1vdmUoZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpLCByZWN1cnNlPVRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcigiVEVTVF9FWFBPUlRfRElSIiwgVHJ1ZSkpCisKKyAgICAjIHRlc3RzIGluIFRFU1RfU1VJVEVTIGJlY29tZSByZXF1aXJlZCB0ZXN0cworICAgICMgdGhleSB3b24ndCBiZSBza2lwcGVkIGV2ZW4gaWYgdGhleSBhcmVuJ3Qgc3VpdGFibGUgZm9yIGEgaW1hZ2UgKGxpa2UgeG9yZyBmb3IgbWluaW1hbCkKKyAgICAjIHRlc3RzbGlzdCBpcyB3aGF0IHdlJ2xsIGFjdHVhbGx5IHBhc3MgdG8gdGhlIHVuaXR0ZXN0IGxvYWRlcgorICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0c19saXN0KGQpCisgICAgdGVzdHNyZXF1aXJlZCA9IFt0IGZvciB0IGluIGQuZ2V0VmFyKCJURVNUX1NVSVRFUyIsIFRydWUpLnNwbGl0KCkgaWYgdCAhPSAiYXV0byJdCisKKyAgICB0YWdleHAgPSBkLmdldFZhcigiVEVTVF9TVUlURVNfVEFHUyIsIFRydWUpCisKKyAgICAjIHdlIG5lZWQgdGhlIGhvc3QgZHVtcGVyIGluIHRlc3QgY29udGV4dAorICAgIGhvc3RfZHVtcGVyID0gZ2V0X2hvc3RfZHVtcGVyKGQpCisKKyAgICAjIHRoZSByb2JvdCBkYW5jZQorICAgIHRhcmdldCA9IGdldF90YXJnZXRfY29udHJvbGxlcihkKQorCisgICAgY2xhc3MgVGVzdENvbnRleHQob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kID0gZAorICAgICAgICAgICAgc2VsZi50ZXN0c2xpc3QgPSB0ZXN0c2xpc3QKKyAgICAgICAgICAgIHNlbGYudGFnZXhwID0gdGFnZXhwCisgICAgICAgICAgICBzZWxmLnRlc3RzcmVxdWlyZWQgPSB0ZXN0c3JlcXVpcmVkCisgICAgICAgICAgICBzZWxmLmZpbGVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgob2VxYS5ydW50aW1lLl9fZmlsZV9fKSksImZpbGVzIikKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgICAgICBzZWxmLmhvc3RfZHVtcGVyID0gaG9zdF9kdW1wZXIKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VmZWF0dXJlcyA9IGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuZGlzdHJvZmVhdHVyZXMgPSBkLmdldFZhcigiRElTVFJPX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgIi5tYW5pZmVzdCIpCisgICAgICAgICAgICBzZWxmLnNpZ3Rlcm0gPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5vcmlnc2lndGVybWhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3QpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnbWFuaWZlc3QgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiTm8gcGFja2FnZSBtYW5pZmVzdCBmaWxlIGZvdW5kLiBEaWQgeW91IGJ1aWxkIHRoZSBpbWFnZT9cbiVzIiAlIGUpCisKKyAgICAgICAgZGVmIHNpZ3Rlcm1fZXhjZXB0aW9uKHNlbGYsIHNpZ251bSwgc3RhY2tmcmFtZSk6CisgICAgICAgICAgICBiYi53YXJuKCJUZXN0SW1hZ2UgcmVjZWl2ZWQgU0lHVEVSTSwgc2h1dHRpbmcgZG93bi4uLiIpCisgICAgICAgICAgICBzZWxmLnNpZ3Rlcm0gPSBUcnVlCisgICAgICAgICAgICBzZWxmLnRhcmdldC5zdG9wKCkKKworICAgICMgdGVzdCBjb250ZXh0CisgICAgdGMgPSBUZXN0Q29udGV4dCgpCisKKyAgICAjIHRoaXMgaXMgYSBkdW1teSBsb2FkIG9mIHRlc3RzCisgICAgIyB3ZSBhcmUgZG9pbmcgdGhhdCB0byBmaW5kIGNvbXBpbGUgZXJyb3JzIGluIHRoZSB0ZXN0cyB0aGVtc2VsdmVzCisgICAgIyBiZWZvcmUgYm9vdGluZyB0aGUgaW1hZ2UKKyAgICB0cnk6CisgICAgICAgIGxvYWRUZXN0cyh0YykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgYmIuZmF0YWwoIkxvYWRpbmcgdGVzdHMgZmFpbGVkOlxuJXMiICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKworICAgIHRhcmdldC5kZXBsb3koKQorCisgICAgdHJ5OgorICAgICAgICB0YXJnZXQuc3RhcnQoKQorICAgICAgICBpZiBleHBvcnQ6CisgICAgICAgICAgICBleHBvcnRUZXN0cyhkLHRjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1blRlc3RzKHRjKQorICAgICAgICAgICAgc3RvcHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgICAgICBiYi5wbGFpbigiJXMgLSBSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlIChwbiwgcmVzdWx0LnRlc3RzUnVuLCByZXN1bHQudGVzdHNSdW4gIT0gMSBhbmQgInMiIG9yICIiLCBzdG9wdGltZSAtIHN0YXJ0dGltZSkpCisgICAgICAgICAgICAgICAgbXNnID0gIiVzIC0gT0sgLSBBbGwgcmVxdWlyZWQgdGVzdHMgcGFzc2VkIiAlIHBuCisgICAgICAgICAgICAgICAgc2tpcHBlZCA9IGxlbihyZXN1bHQuc2tpcHBlZCkKKyAgICAgICAgICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIiAoc2tpcHBlZD0lZCkiICUgc2tpcHBlZAorICAgICAgICAgICAgICAgIGJiLnBsYWluKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBzc2ggbG9nIiAlIHBuICkKKyAgICBmaW5hbGx5OgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCB0Yy5vcmlnc2lndGVybWhhbmRsZXIpCisgICAgICAgIHRhcmdldC5zdG9wKCkKKwordGVzdGltYWdlX21haW5bdmFyZGVwc2V4Y2x1ZGVdID0rICJCQl9PUklHRU5WIgorCisKK2RlZiB0ZXN0c2RrX21haW4oZCk6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgaW1wb3J0IG9zCisgICAgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQgb2VxYS5ydW50aW1lCisgICAgaW1wb3J0IG9lcWEuc2RrCisgICAgaW1wb3J0IHRpbWUKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGZyb20gb2VxYS5vZXRlc3QgaW1wb3J0IGxvYWRUZXN0cywgcnVuVGVzdHMKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpKQorCisgICAgIyB0ZXN0cyBpbiBURVNUX1NVSVRFUyBiZWNvbWUgcmVxdWlyZWQgdGVzdHMKKyAgICAjIHRoZXkgd29uJ3QgYmUgc2tpcHBlZCBldmVuIGlmIHRoZXkgYXJlbid0IHN1aXRhYmxlLgorICAgICMgdGVzdHNsaXN0IGlzIHdoYXQgd2UnbGwgYWN0dWFsbHkgcGFzcyB0byB0aGUgdW5pdHRlc3QgbG9hZGVyCisgICAgdGVzdHNsaXN0ID0gZ2V0X3Rlc3RzX2xpc3QoZCwgInNkayIpCisgICAgdGVzdHNyZXF1aXJlZCA9IFt0IGZvciB0IGluIChkLmdldFZhcigiVEVTVF9TVUlURVNfU0RLIiwgVHJ1ZSkgb3IgImF1dG8iKS5zcGxpdCgpIGlmIHQgIT0gImF1dG8iXQorCisgICAgdGNuYW1lID0gZC5leHBhbmQoIiR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2giKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0Y25hbWUpOgorICAgICAgICBiYi5mYXRhbCgiVGhlIHRvb2xjaGFpbiBpcyBub3QgYnVpbHQuIEJ1aWxkIGl0IGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0czogJ2JpdGJha2UgPGltYWdlPiAtYyBwb3B1bGF0ZV9zZGsnIC4iKQorCisgICAgY2xhc3MgVGVzdENvbnRleHQob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kID0gZAorICAgICAgICAgICAgc2VsZi50ZXN0c2xpc3QgPSB0ZXN0c2xpc3QKKyAgICAgICAgICAgIHNlbGYudGVzdHNyZXF1aXJlZCA9IHRlc3RzcmVxdWlyZWQKKyAgICAgICAgICAgIHNlbGYuZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChvZXFhLnJ1bnRpbWUuX19maWxlX18pKSwiZmlsZXMiKQorICAgICAgICAgICAgc2VsZi5zZGt0ZXN0ZGlyID0gc2RrdGVzdGRpcgorICAgICAgICAgICAgc2VsZi5zZGtlbnYgPSBzZGtlbnYKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VmZWF0dXJlcyA9IGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuZGlzdHJvZmVhdHVyZXMgPSBkLmdldFZhcigiRElTVFJPX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmdldFZhcigiU0RLX1RBUkdFVF9NQU5JRkVTVCIsIFRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0KSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHBhY2thZ2UgbWFuaWZlc3QgZmlsZSBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgc2RrIGltYWdlP1xuJXMiICUgZSkKKyAgICAgICAgICAgIGhvc3RtYW5pZmVzdCA9IGQuZ2V0VmFyKCJTREtfSE9TVF9NQU5JRkVTVCIsIFRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGhvc3RtYW5pZmVzdCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3N0cGtnbWFuaWZlc3QgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiTm8gaG9zdCBwYWNrYWdlIG1hbmlmZXN0IGZpbGUgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIHNkayBpbWFnZT9cbiVzIiAlIGUpCisKKyAgICBzZGt0ZXN0ZGlyID0gZC5leHBhbmQoIiR7V09SS0RJUn0vdGVzdGltYWdlLXNkay8iKQorICAgIGJiLnV0aWxzLnJlbW92ZShzZGt0ZXN0ZGlyLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZGt0ZXN0ZGlyKQorICAgIHRyeToKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImNkICVzOyAlcyA8PEVPRlxuLi90Y1xuWVxuRU9GIiAlIChzZGt0ZXN0ZGlyLCB0Y25hbWUpLCBzaGVsbD1UcnVlKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiQ291bGRuJ3QgaW5zdGFsbCB0aGUgU0RLOlxuJXMiICUgZS5vdXRwdXQpCisKKyAgICB0cnk6CisgICAgICAgIHRhcmdldHMgPSBnbG9iLmdsb2IoZC5leHBhbmQoc2RrdGVzdGRpciArICIvdGMvZW52aXJvbm1lbnQtc2V0dXAtKiIpKQorICAgICAgICBiYi53YXJuKHN0cih0YXJnZXRzKSkKKyAgICAgICAgZm9yIHNka2VudiBpbiB0YXJnZXRzOgorICAgICAgICAgICAgYmIucGxhaW4oIlRlc3RpbmcgJXMiICUgc2RrZW52KQorICAgICAgICAgICAgIyB0ZXN0IGNvbnRleHQKKyAgICAgICAgICAgIHRjID0gVGVzdENvbnRleHQoKQorCisgICAgICAgICAgICAjIHRoaXMgaXMgYSBkdW1teSBsb2FkIG9mIHRlc3RzCisgICAgICAgICAgICAjIHdlIGFyZSBkb2luZyB0aGF0IHRvIGZpbmQgY29tcGlsZSBlcnJvcnMgaW4gdGhlIHRlc3RzIHRoZW1zZWx2ZXMKKyAgICAgICAgICAgICMgYmVmb3JlIGJvb3RpbmcgdGhlIGltYWdlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9hZFRlc3RzKHRjLCAic2RrIikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkxvYWRpbmcgdGVzdHMgZmFpbGVkOlxuJXMiICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKworICAgIAorICAgICAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1blRlc3RzKHRjLCAic2RrIikKKyAgICAgICAgICAgIHN0b3B0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICAgICAgYmIucGxhaW4oIiVzIFNESyglcyk6JXMgLSBSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlIChwbiwgb3MucGF0aC5iYXNlbmFtZSh0Y25hbWUpLCBvcy5wYXRoLmJhc2VuYW1lKHNka2VudikscmVzdWx0LnRlc3RzUnVuLCByZXN1bHQudGVzdHNSdW4gIT0gMSBhbmQgInMiIG9yICIiLCBzdG9wdGltZSAtIHN0YXJ0dGltZSkpCisgICAgICAgICAgICAgICAgbXNnID0gIiVzIC0gT0sgLSBBbGwgcmVxdWlyZWQgdGVzdHMgcGFzc2VkIiAlIHBuCisgICAgICAgICAgICAgICAgc2tpcHBlZCA9IGxlbihyZXN1bHQuc2tpcHBlZCkKKyAgICAgICAgICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIiAoc2tpcHBlZD0lZCkiICUgc2tpcHBlZAorICAgICAgICAgICAgICAgIGJiLnBsYWluKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBjb21tYW5kcyBsb2ciICUgcG4gKQorICAgIGZpbmFsbHk6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZGt0ZXN0ZGlyLCBUcnVlKQorCit0ZXN0c2RrX21haW5bdmFyZGVwc2V4Y2x1ZGVdID0rICJCQl9PUklHRU5WIgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdGV4aW5mby5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3RleGluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVmYmNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3RleGluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDE1IEBACisjIFRoaXMgY2xhc3MgaXMgaW5oZXJpdGVkIGJ5IHJlY2lwZXMgd2hvc2UgdXBzdHJlYW0gcGFja2FnZXMgaW52b2tlIHRoZQorIyB0ZXhpbmZvIHV0aWxpdGllcyBhdCBidWlsZC10aW1lLiBOYXRpdmUgYW5kIGNyb3NzIHJlY2lwZXMgYXJlIG1hZGUgdG8gdXNlIHRoZQorIyBkdW1teSBzY3JpcHRzIHByb3ZpZGVkIGJ5IHRleGluZm8tZHVtbXktbmF0aXZlLCBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UuIAorIyBUYXJnZXQgYXJjaGl0ZWN0dXJlIHJlY2lwZXMgdXNlIHRoZSBnZW51aW5lIFRleGluZm8gdXRpbGl0aWVzLiBCeSBkZWZhdWx0LCAKKyMgdGhleSB1c2UgdGhlIFRleGluZm8gdXRpbGl0aWVzIG9uIHRoZSBob3N0IHN5c3RlbS4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZQorIyBUZXhpbmZvIHJlY2lwZSBzaGlwcGVkIHdpdGggeW9jbywgeW91IGNhbiByZW1vdmUgdGV4aW5mby1uYXRpdmUgZnJvbSAKKyMgQVNTVU1FX1BST1ZJREVEIGFuZCBtYWtlaW5mbyBmcm9tIFNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMuCisKK1RFWERFUCA9ICJ0ZXhpbmZvLW5hdGl2ZSIKK1RFWERFUF9jbGFzcy1uYXRpdmUgPSAidGV4aW5mby1kdW1teS1uYXRpdmUiCitURVhERVBfY2xhc3MtY3Jvc3MgPSAidGV4aW5mby1kdW1teS1uYXRpdmUiCitERVBFTkRTX2FwcGVuZCA9ICIgJHtURVhERVB9IgorUEFUSF9wcmVwZW5kX2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdGV4aW5mby1kdW1teS1uYXRpdmU6IgorUEFUSF9wcmVwZW5kX2NsYXNzLWNyb3NzID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS90ZXhpbmZvLWR1bW15LW5hdGl2ZToiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg0ZWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3RpbmRlcmNsaWVudC5iYmNsYXNzCkBAIC0wLDAgKzEsMzY4IEBACitkZWYgdGluZGVyX2h0dHBfcG9zdChzZXJ2ZXIsIHNlbGVjdG9yLCBjb250ZW50X3R5cGUsIGJvZHkpOgorICAgIGltcG9ydCBodHRwbGliCisgICAgIyBub3cgcG9zdCBpdAorICAgIGZvciBpIGluIHJhbmdlKDAsNSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBodHRwbGliLkhUVFAoc2VydmVyKQorICAgICAgICAgICAgaC5wdXRyZXF1ZXN0KCdQT1NUJywgc2VsZWN0b3IpCisgICAgICAgICAgICBoLnB1dGhlYWRlcignY29udGVudC10eXBlJywgY29udGVudF90eXBlKQorICAgICAgICAgICAgaC5wdXRoZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgc3RyKGxlbihib2R5KSkpCisgICAgICAgICAgICBoLmVuZGhlYWRlcnMoKQorICAgICAgICAgICAgaC5zZW5kKGJvZHkpCisgICAgICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMgPSBoLmdldHJlcGx5KCkKKyAgICAgICAgICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICAgICAgICAgIHJldHVybiAoZXJyY29kZSxlcnJtc2csIGhlYWRlcnMsIGguZmlsZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJpbnQgIkVycm9yIHNlbmRpbmcgdGhlIHJlcG9ydCEiCisgICAgICAgICAgICAjIHRyeSBhZ2FpbgorICAgICAgICAgICAgcGFzcworCisgICAgIyByZXR1cm4gc29tZSBnYXJiYWdlCisgICAgcmV0dXJuICgtMSwgInVua25vd24iLCAidW5rbm93biIsIE5vbmUpCisKK2RlZiB0aW5kZXJfZm9ybV9kYXRhKGJvdW5kLCBkaWN0LCBsb2cpOgorICAgIG91dHB1dCA9IFtdCisgICAgIyBmb3IgZWFjaCBrZXkgaW4gdGhlIGRpY3Rpb25hcnkKKyAgICBmb3IgbmFtZSBpbiBkaWN0OgorICAgICAgICBhc3NlcnQgZGljdFtuYW1lXQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAiLS0iICsgYm91bmQgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAnQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSIlcyInICUgbmFtZSApCisgICAgICAgIG91dHB1dC5hcHBlbmQoICIiICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggZGljdFtuYW1lXSApCisgICAgaWYgbG9nOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCAiLS0iICsgYm91bmQgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAnQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJsb2ciOyBmaWxlbmFtZT0ibG9nLnR4dCInICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJycgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCBsb2cgKQorICAgIG91dHB1dC5hcHBlbmQoICctLScgKyBib3VuZCArICctLScgKQorICAgIG91dHB1dC5hcHBlbmQoICcnICkKKworICAgIHJldHVybiAiXHJcbiIuam9pbihvdXRwdXQpCisKK2RlZiB0aW5kZXJfdGltZV9zdHJpbmcoKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHRpbWUgYXMgR01UCisgICAgIiIiCisgICAgcmV0dXJuICIiCisKK2RlZiB0aW5kZXJfZm9ybWF0X2h0dHBfcG9zdChkLHN0YXR1cyxsb2cpOgorICAgICIiIgorICAgIEZvcm1hdCB0aGUgVGluZGVyYm94IEhUVFAgcG9zdCB3aXRoIHRoZSBkYXRhIG5lZWRlZAorICAgIGZvciB0aGUgdGluZGVyYm94IHRvIGJlIGhhcHB5LgorICAgICIiIgorCisgICAgaW1wb3J0IHJhbmRvbQorCisgICAgIyB0aGUgdmFyaWFibGVzIHdlIHdpbGwgbmVlZCB0byBzZW5kIG9uIHRoaXMgZm9ybSBwb3N0CisgICAgdmFyaWFibGVzID0gIHsKKyAgICAgICAgInRyZWUiICAgICAgICAgOiBkLmdldFZhcignVElOREVSX1RSRUUnLCBUcnVlKSwKKyAgICAgICAgIm1hY2hpbmVfbmFtZSIgOiBkLmdldFZhcignVElOREVSX01BQ0hJTkUnLCBUcnVlKSwKKyAgICAgICAgIm9zIiAgICAgICAgICAgOiBvcy51bmFtZSgpWzBdLAorICAgICAgICAib3NfdmVyc2lvbiIgICA6IG9zLnVuYW1lKClbMl0sCisgICAgICAgICJjb21waWxlciIgICAgIDogImdjYyIsCisgICAgICAgICJjbG9iYmVyIiAgICAgIDogZC5nZXRWYXIoJ1RJTkRFUl9DTE9CQkVSJywgVHJ1ZSkgb3IgIjAiLAorICAgICAgICAic3JjZGF0ZSIgICAgICA6IGQuZ2V0VmFyKCdTUkNEQVRFJywgVHJ1ZSksCisgICAgICAgICJQTiIgICAgICAgICAgIDogZC5nZXRWYXIoJ1BOJywgVHJ1ZSksCisgICAgICAgICJQViIgICAgICAgICAgIDogZC5nZXRWYXIoJ1BWJywgVHJ1ZSksCisgICAgICAgICJQUiIgICAgICAgICAgIDogZC5nZXRWYXIoJ1BSJywgVHJ1ZSksCisgICAgICAgICJGSUxFIiAgICAgICAgIDogZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSBvciAiTi9BIiwKKyAgICAgICAgIlRBUkdFVEFSQ0giICAgOiBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwKKyAgICAgICAgIlRBUkdFVEZQVSIgICAgOiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIlRBUkdFVE9TIiAgICAgOiBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiTUFDSElORSIgICAgICA6IGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiRElTVFJPIiAgICAgICA6IGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKSBvciAiVW5rbm93biIsCisgICAgICAgICJ6ZWNrZS1yb2NrcyIgIDogInN1cmUiLAorICAgIH0KKworICAgICMgb3B0aW9uYWxseSBhZGQgdGhlIHN0YXR1cworICAgIGlmIHN0YXR1czoKKyAgICAgICAgdmFyaWFibGVzWyJzdGF0dXMiXSA9IHN0cihzdGF0dXMpCisKKyAgICAjIHRyeSB0byBsb2FkIHRoZSBtYWNoaW5lIGlkCisgICAgIyB3ZSBvbmx5IG5lZWQgb24gYnVpbGRfc3RhdHVzLnBsIGJ1dCBzZW5kaW5nIGl0CisgICAgIyBhbHdheXMgZG9lcyBub3QgaHVydAorICAgIHRyeToKKyAgICAgICAgZiA9IGZpbGUoZC5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItbWFjaGluZS5pZCcsICdyJykKKyAgICAgICAgaWQgPSBmLnJlYWQoKQorICAgICAgICB2YXJpYWJsZXNbJ21hY2hpbmVfaWQnXSA9IGlkCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICAjIHRoZSBib3VuZGFyeSB3ZSB3aWxsIG5lZWQKKyAgICBib3VuZGFyeSA9ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJWQiICUgaW50KHJhbmRvbS5yYW5kb20oKSoxMDAwMDAwMDAwMDAwKQorCisgICAgIyBub3cgZm9ybWF0IHRoZSBib2R5CisgICAgYm9keSA9IHRpbmRlcl9mb3JtX2RhdGEoIGJvdW5kYXJ5LCB2YXJpYWJsZXMsIGxvZyApCisKKyAgICByZXR1cm4gKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0lcyIgJSBib3VuZGFyeSksYm9keQorCisKK2RlZiB0aW5kZXJfYnVpbGRfc3RhcnQoZCk6CisgICAgIiIiCisgICAgSW5mb3JtIHRoZSB0aW5kZXJib3ggdGhhdCBhIGJ1aWxkIGlzIHN0YXJ0aW5nLiBXZSBkbyB0aGlzCisgICAgYnkgcG9zdGluZyBvdXIgbmFtZSBhbmQgdHJlZSB0byB0aGUgYnVpbGRfc3RhcnQucGwgc2NyaXB0CisgICAgb24gdGhlIHNlcnZlci4KKyAgICAiIiIKKworICAgICMgZ2V0IHRoZSBib2R5IGFuZCB0eXBlCisgICAgY29udGVudF90eXBlLCBib2R5ID0gdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxOb25lLE5vbmUpCisgICAgc2VydmVyID0gZC5nZXRWYXIoJ1RJTkRFUl9IT1NUJywgVHJ1ZSApCisgICAgdXJsICAgID0gZC5nZXRWYXIoJ1RJTkRFUl9VUkwnLCBUcnVlICkKKworICAgIHNlbGVjdG9yID0gdXJsICsgIi94bWwvYnVpbGRfc3RhcnQucGwiCisKKyAgICAjcHJpbnQgInNlbGVjdG9yICVzIGFuZCB1cmwgJXMiICUgKHNlbGVjdG9yLCB1cmwpCisKKyAgICAjIG5vdyBwb3N0IGl0CisgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBoX2ZpbGUgPSB0aW5kZXJfaHR0cF9wb3N0KHNlcnZlcixzZWxlY3Rvcixjb250ZW50X3R5cGUsIGJvZHkpCisgICAgI3ByaW50IGVycmNvZGUsIGVycm1zZywgaGVhZGVycworICAgIHJlcG9ydCA9IGhfZmlsZS5yZWFkKCkKKworICAgICMgbm93IGxldCB1cyBmaW5kIHRoZSBtYWNoaW5lIGlkIHRoYXQgd2FzIGFzc2lnbmVkIHRvIHVzCisgICAgc2VhcmNoID0gIjxtYWNoaW5lIGlkPSciCisgICAgcmVwb3J0ID0gcmVwb3J0W3JlcG9ydC5maW5kKHNlYXJjaCkrbGVuKHNlYXJjaCk6XQorICAgIHJlcG9ydCA9IHJlcG9ydFswOnJlcG9ydC5maW5kKCInIildCisKKyAgICBiYi5ub3RlKCJNYWNoaW5lIElEIGFzc2lnbmVkIGJ5IHRpbmRlcmJveDogJXMiICUgcmVwb3J0ICkKKworICAgICMgbm93IHdlIHdpbGwgbmVlZCB0byBzYXZlIHRoZSBtYWNoaW5lIG51bWJlcgorICAgICMgd2Ugd2lsbCBvdmVycmlkZSBhbnkgcHJldmlvdXMgbnVtYmVycworICAgIGYgPSBmaWxlKGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1tYWNoaW5lLmlkIiwgJ3cnKQorICAgIGYud3JpdGUocmVwb3J0KQorCisKK2RlZiB0aW5kZXJfc2VuZF9odHRwKGQsIHN0YXR1cywgX2xvZyk6CisgICAgIiIiCisgICAgU2VuZCB0aGlzIGxvZyBhcyBidWlsZCBzdGF0dXMKKyAgICAiIiIKKworICAgICMgZ2V0IHRoZSBib2R5IGFuZCB0eXBlCisgICAgc2VydmVyID0gZC5nZXRWYXIoJ1RJTkRFUl9IT1NUJywgVHJ1ZSkKKyAgICB1cmwgICAgPSBkLmdldFZhcignVElOREVSX1VSTCcsIFRydWUpCisKKyAgICBzZWxlY3RvciA9IHVybCArICIveG1sL2J1aWxkX3N0YXR1cy5wbCIKKworICAgICMgbm93IHBvc3QgaXQgLSBpbiBjaHVua3Mgb2YgMTAuMDAwIGNoYXJhY2h0ZXJzCisgICAgbmV3X2xvZyA9IF9sb2cKKyAgICB3aGlsZSBsZW4obmV3X2xvZykgPiAwOgorICAgICAgICBjb250ZW50X3R5cGUsIGJvZHkgPSB0aW5kZXJfZm9ybWF0X2h0dHBfcG9zdChkLHN0YXR1cyxuZXdfbG9nWzA6MTgwMDBdKQorICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIGhfZmlsZSA9IHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLHNlbGVjdG9yLGNvbnRlbnRfdHlwZSwgYm9keSkKKyAgICAgICAgI3ByaW50IGVycmNvZGUsIGVycm1zZywgaGVhZGVycworICAgICAgICAjcHJpbnQgaC5maWxlLnJlYWQoKQorICAgICAgICBuZXdfbG9nID0gbmV3X2xvZ1sxODAwMDpdCisKKworZGVmIHRpbmRlcl9wcmludF9pbmZvKGQpOgorICAgICIiIgorICAgIFByaW50IHRoZSBUaW5kZXJCb3ggSW5mbworICAgICAgICBJbmNsdWRpbmcgaW5mb3JtYXRpb25zIG9mIHRoZSBCYXNlU3lzdGVtIGFuZCB0aGUgVHJlZQorICAgICAgICB3ZSB1c2UuCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgbG9jYWwgdmFycworICAgIHRpbWUgICAgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIG9wcyAgICAgPSBvcy51bmFtZSgpWzBdCisgICAgdmVyc2lvbiA9IG9zLnVuYW1lKClbMl0KKyAgICB1cmwgICAgID0gZC5nZXRWYXIoICdUSU5ERVJfVVJMJyAsIFRydWUgKQorICAgIHRyZWUgICAgPSBkLmdldFZhciggJ1RJTkRFUl9UUkVFJywgVHJ1ZSApCisgICAgYnJhbmNoICA9IGQuZ2V0VmFyKCAnVElOREVSX0JSQU5DSCcsIFRydWUgKQorICAgIHNyY2RhdGUgPSBkLmdldFZhciggJ1NSQ0RBVEUnLCBUcnVlICkKKyAgICBtYWNoaW5lID0gZC5nZXRWYXIoICdNQUNISU5FJywgVHJ1ZSApCisgICAgZGlzdHJvICA9IGQuZ2V0VmFyKCAnRElTVFJPJywgVHJ1ZSApCisgICAgYmJmaWxlcyA9IGQuZ2V0VmFyKCAnQkJGSUxFUycsIFRydWUgKQorICAgIHRhcmNoICAgPSBkLmdldFZhciggJ1RBUkdFVF9BUkNIJywgVHJ1ZSApCisgICAgZnB1ICAgICA9IGQuZ2V0VmFyKCAnVEFSR0VUX0ZQVScsIFRydWUgKQorICAgIG9lcmV2ICAgPSBkLmdldFZhciggJ09FX1JFVklTSU9OJywgVHJ1ZSApIG9yICJ1bmtub3duIgorCisgICAgIyB0aGVyZSBpcyBhIGJ1ZyB3aXRoIHRpcHBsZSBxdW90ZWQgc3RyaW5ncworICAgICMgaSB3aWxsIHdvcmsgYXJvdW5kIGJ1dCB3aWxsIGZpeCB0aGUgb3JpZ2luYWwKKyAgICAjIGJ1ZyBhcyB3ZWxsCisgICAgb3V0cHV0ID0gW10KKyAgICBvdXRwdXQuYXBwZW5kKCI9PSBUaW5kZXJib3ggSW5mbyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRpbWU6ICUodGltZSlzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiT1M6ICUob3BzKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCIlKHZlcnNpb24pcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkNvbXBpbGVyOiBnY2MiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW5kZXJib3ggQ2xpZW50OiAwLjEiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW5kZXJib3ggQ2xpZW50IExhc3QgTW9kaWZpZWQ6IHllc3RlcmRheSIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRpbmRlcmJveCBQcm90b2NvbDogMC4xIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVVJMOiAlKHVybClzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVHJlZTogJSh0cmVlKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJDb25maWc6IiApCisgICAgb3V0cHV0LmFwcGVuZCgiYnJhbmNoID0gJyUoYnJhbmNoKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVEFSR0VUX0FSQ0ggPSAnJSh0YXJjaClzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRBUkdFVF9GUFUgPSAnJShmcHUpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJTUkNEQVRFID0gJyUoc3JjZGF0ZSlzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIk1BQ0hJTkUgPSAnJShtYWNoaW5lKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiRElTVFJPID0gJyUoZGlzdHJvKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiQkJGSUxFUyA9ICclKGJiZmlsZXMpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJPRVJFViA9ICclKG9lcmV2KXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiPT0gRW5kIFRpbmRlcmJveCBDbGllbnQgSW5mbyIgKQorCisgICAgIyBub3cgY3JlYXRlIHRoZSByZWFsIG91dHB1dAorICAgIHJldHVybiAiXG4iLmpvaW4ob3V0cHV0KSAlIHZhcnMoKQorCisKK2RlZiB0aW5kZXJfcHJpbnRfZW52KCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvZiB0aGlzIGJ1aWxkCisgICAgIiIiCisgICAgdGltZV9zdGFydCA9IHRpbmRlcl90aW1lX3N0cmluZygpCisgICAgdGltZV9lbmQgICA9IHRpbmRlcl90aW1lX3N0cmluZygpCisKKyAgICAjIGJ1aWxkIHRoZSBlbnZpcm9ubWVudAorICAgIGVudiA9ICIiCisgICAgZm9yIHZhciBpbiBvcy5lbnZpcm9uOgorICAgICAgICBlbnYgKz0gIiVzPSVzXG4iICUgKHZhciwgb3MuZW52aXJvblt2YXJdKQorCisgICAgb3V0cHV0ID0gW10KKyAgICBvdXRwdXQuYXBwZW5kKCAiLS0tPiBUSU5ERVJCT1ggUlVOTklORyBlbnYgJSh0aW1lX3N0YXJ0KXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCBlbnYgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBGSU5JU0hFRCAoU1VDQ0VTUykgJSh0aW1lX2VuZClzIiApCisKKyAgICByZXR1cm4gIlxuIi5qb2luKG91dHB1dCkgJSB2YXJzKCkKKworZGVmIHRpbmRlcl90aW5kZXJfc3RhcnQoZCwgZXZlbnQpOgorICAgICIiIgorICAgIFBSSU5UIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgYnVpbGQKKyAgICAiIiIKKworICAgIHRpbWVfc3RhcnQgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIGNvbmZpZyA9IHRpbmRlcl9wcmludF9pbmZvKGQpCisgICAgI2VudiAgICA9IHRpbmRlcl9wcmludF9lbnYoKQorICAgIHRpbWVfZW5kICAgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oIGV2ZW50LmdldFBrZ3MoKSApIAorCisgICAgb3V0cHV0ID0gW10KKyAgICBvdXRwdXQuYXBwZW5kKCAiLS0tPiBUSU5ERVJCT1ggUFJJTlRJTkcgQ09ORklHVVJBVElPTiAlKHRpbWVfc3RhcnQpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIGNvbmZpZyApCisgICAgI291dHB1dC5hcHBlbmQoIGVudiAgICApCisgICAgb3V0cHV0LmFwcGVuZCggIjwtLS0gVElOREVSQk9YIEZJTklTSEVEIFBSSU5USU5HIENPTkZJR1VSQVRJT04gJSh0aW1lX2VuZClzIiApCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIEJVSUxESU5HICclKHBhY2thZ2VzKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCggIjwtLS0gVElOREVSQk9YIFNUQVJUSU5HIEJVSUxEIE5PVyIgKQorCisgICAgb3V0cHV0LmFwcGVuZCggIiIgKQorCisgICAgcmV0dXJuICJcbiIuam9pbihvdXRwdXQpICUgdmFycygpCisKK2RlZiB0aW5kZXJfZG9fdGluZGVyX3JlcG9ydChldmVudCk6CisgICAgIiIiCisgICAgUmVwb3J0IHRvIHRoZSB0aW5kZXJib3g6CisgICAgICAgIE9uIHRoZSBCdWlsZFN0YXJ0IHdlIHdpbGwgaW5mb3JtIHRoZSBib3ggZGlyZWN0bHkKKyAgICAgICAgT24gdGhlIG90aGVyIGV2ZW50cyB3ZSB3aWxsIHdyaXRlIHRvIHRoZSBUSU5ERVJfTE9HIGFuZAorICAgICAgICB3aGVuIHRoZSBUYXNrIGlzIGZpbmlzaGVkIHdlIHdpbGwgc2VuZCB0aGUgcmVwb3J0LgorCisgICAgVGhlIGFib3ZlIGlzIG5vdCB5ZXQgZnVsbHkgaW1wbGVtZW50ZWQuIEN1cnJlbnRseSB3ZSBzZW5kCisgICAgaW5mb3JtYXRpb24gaW1tZWRpYXRlbHkuIFRoZSBjYWNoaW5nL3F1ZXVpbmcgbmVlZHMgdG8gYmUKKyAgICBpbXBsZW1lbnRlZC4gQWxzbyBzZW5kaW5nIG1vcmUgb3IgbGVzcyBpbmZvcm1hdGlvbiBpcyBub3QKKyAgICBpbXBsZW1lbnRlZCB5ZXQuCisKKyAgICBXZSBoYXZlIHR3byB0ZW1wb3JhcnkgZmlsZXMgc3RvcmVkIGluIHRoZSBUTVAgZGlyZWN0b3J5LiBPbmUgZmlsZQorICAgIGNvbnRhaW5zIHRoZSBhc3NpZ25lZCBtYWNoaW5lIGlkIGZvciB0aGUgdGluZGVyY2xpZW50LiBUaGlzIGlkIGdldHMKKyAgICBhc3NpZ25lZCB3aGVuIHdlIGNvbm5lY3QgdGhlIGJveCBhbmQgc3RhcnQgdGhlIGJ1aWxkIHByb2Nlc3MgdGhlIHNlY29uZAorICAgIGZpbGUgaXMgdXNlZCB0byB3b3JrYXJvdW5kIGFuIEV2ZW50SGFuZGxlciBsaW1pdGF0aW9uLiBJZiBCaXRCYWtlIGlzIHJhbgorICAgIHdpdGggdGhlIGNvbnRpbnVlIG9wdGlvbiB3ZSB3YW50IHRoZSBCdWlsZCB0byBmYWlsIGV2ZW4gaWYgd2UgZ2V0IHRoZQorICAgIEJ1aWxkQ29tcGxldGVkIEV2ZW50LiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBsb29rIHVwIHRoZSBzdGF0dXMgYW5kCisgICAgc2VuZCBpdCBpbnN0ZWFkIG9mIDEwMC9zdWNjZXNzLgorICAgICIiIgorICAgIGltcG9ydCBnbG9iCisKKyAgICAjIHZhcmlhYmxlcworICAgIG5hbWUgPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgIGxvZyAgPSAiIgorICAgIHN0YXR1cyA9IDEKKyAgICAjIENoZWNrIHdoYXQgd2UgbmVlZCB0byBkbyBCdWlsZCogc2hvd3Mgd2Ugc3RhcnQgb3IgYXJlIGRvbmUKKyAgICBpZiBuYW1lID09ICJCdWlsZFN0YXJ0ZWQiOgorICAgICAgICB0aW5kZXJfYnVpbGRfc3RhcnQoZXZlbnQuZGF0YSkKKyAgICAgICAgbG9nID0gdGluZGVyX3RpbmRlcl9zdGFydChldmVudC5kYXRhLGV2ZW50KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgdHJ1bmNhdGUgdGhlIHRpbmRlciBsb2cgZmlsZQorICAgICAgICAgICAgZiA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9MT0cnLCBUcnVlKSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgiIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB3cml0ZSBhIHN0YXR1cyB0byB0aGUgZmlsZS4gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSAtayBvcHRpb24KKyAgICAgICAgICAgICMgb2YgQml0QmFrZQorICAgICAgICAgICAgZyA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgICAgIGcud3JpdGUoIiIpCisgICAgICAgICAgICBnLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIEFwcGVuZCB0aGUgVGFzay1Mb2cgKGNvbXBpbGUsY29uZmlndXJlLi4uKSB0byB0aGUgbG9nIGZpbGUKKyAgICAjIHdlIHdpbGwgc2VuZCB0byB0aGUgc2VydmVyCisgICAgaWYgbmFtZSA9PSAiVGFza1N1Y2NlZWRlZCIgb3IgbmFtZSA9PSAiVGFza0ZhaWxlZCI6CisgICAgICAgIGxvZ19maWxlID0gZ2xvYi5nbG9iKCIlcy9sb2cuJXMuKiIgJSAoZXZlbnQuZGF0YS5nZXRWYXIoJ1QnLCBUcnVlKSwgZXZlbnQudGFzaykpCisKKyAgICAgICAgaWYgbGVuKGxvZ19maWxlKSAhPSAwOgorICAgICAgICAgICAgdG9fZmlsZSAgPSBldmVudC5kYXRhLmdldFZhcignVElOREVSX0xPRycsIFRydWUpCisgICAgICAgICAgICBsb2cgICAgICs9ICIiLmpvaW4ob3Blbihsb2dfZmlsZVswXSwgJ3InKS5yZWFkbGluZXMoKSkKKworICAgICMgc2V0IHRoZSByaWdodCAnSEVBREVSJy9TdW1tYXJ5IGZvciB0aGUgVGluZGVyQm94CisgICAgaWYgbmFtZSA9PSAiVGFza1N0YXJ0ZWQiOgorICAgICAgICBsb2cgKz0gIi0tLT4gVElOREVSQk9YIFRhc2sgJXMgc3RhcnRlZFxuIiAlIGV2ZW50LnRhc2sKKyAgICBlbGlmIG5hbWUgPT0gIlRhc2tTdWNjZWVkZWQiOgorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIFRhc2sgJXMgZG9uZSAoU1VDQ0VTUylcbiIgJSBldmVudC50YXNrCisgICAgZWxpZiBuYW1lID09ICJUYXNrRmFpbGVkIjoKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBUYXNrICVzIGZhaWxlZCAoRkFJTFVSRSlcbiIgJSBldmVudC50YXNrCisgICAgZWxpZiBuYW1lID09ICJQa2dTdGFydGVkIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBQYWNrYWdlICVzIHN0YXJ0ZWRcbiIgJSBldmVudC5kYXRhLmdldFZhcignUEYnLCBUcnVlKQorICAgIGVsaWYgbmFtZSA9PSAiUGtnU3VjY2VlZGVkIjoKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBQYWNrYWdlICVzIGRvbmUgKFNVQ0NFU1MpXG4iICUgZXZlbnQuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBlbGlmIG5hbWUgPT0gIlBrZ0ZhaWxlZCI6CisgICAgICAgIGlmIG5vdCBldmVudC5kYXRhLmdldFZhcignVElOREVSX0FVVE9CVUlMRCcsIFRydWUpID09ICIwIjoKKyAgICAgICAgICAgIGJ1aWxkLmV4ZWNfdGFzaygnZG9fY2xlYW4nLCBldmVudC5kYXRhKQorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIFBhY2thZ2UgJXMgZmFpbGVkIChGQUlMVVJFKVxuIiAlIGV2ZW50LmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpCisgICAgICAgIHN0YXR1cyA9IDIwMAorICAgICAgICAjIHJlbWVtYmVyIHRoZSBmYWlsdXJlIGZvciB0aGUgLWsgY2FzZQorICAgICAgICBoID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItc3RhdHVzIiwgJ3cnKQorICAgICAgICBoLndyaXRlKCIyMDAiKQorICAgIGVsaWYgbmFtZSA9PSAiQnVpbGRDb21wbGV0ZWQiOgorICAgICAgICBsb2cgKz0gIkJ1aWxkIENvbXBsZXRlZFxuIgorICAgICAgICBzdGF0dXMgPSAxMDAKKyAgICAgICAgIyBDaGVjayBpZiB3ZSBoYXZlIGEgb2xkIHN0YXR1cy4uLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVE1QRElSJyxUcnVlKSsnL3RpbmRlci1zdGF0dXMnLCAncicpCisgICAgICAgICAgICBzdGF0dXMgPSBpbnQoaC5yZWFkKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGVsaWYgbmFtZSA9PSAiTXVsdGlwbGVQcm92aWRlcnMiOgorICAgICAgICBsb2cgKz0gIi0tLT4gVElOREVSQk9YIE11bHRpcGxlIFByb3ZpZGVyc1xuIgorICAgICAgICBsb2cgKz0gIm11bHRpcGxlIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlICglcyk7XG4iICUgIiwgIi5qb2luKGV2ZW50LmdldENhbmRpZGF0ZXMoKSkKKyAgICAgICAgbG9nICs9ICJjb25zaWRlciBkZWZpbmluZyBQUkVGRVJSRURfUFJPVklERVJfJXNcbiIgJSBldmVudC5nZXRJdGVtKCkKKyAgICAgICAgbG9nICs9ICJpcyBydW50aW1lOiAlZFxuIiAlIGV2ZW50LmlzUnVudGltZSgpCisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggTXVsdGlwbGUgUHJvdmlkZXJzXG4iCisgICAgZWxpZiBuYW1lID09ICJOb1Byb3ZpZGVyIjoKKyAgICAgICAgbG9nICs9ICJFcnJvcjogTm8gUHJvdmlkZXIgZm9yOiAlc1xuIiAlIGV2ZW50LmdldEl0ZW0oKQorICAgICAgICBsb2cgKz0gIkVycm9yOldhcyBSdW50aW1lOiAlZFxuIiAlIGV2ZW50LmlzUnVudGltZSgpCisgICAgICAgIHN0YXR1cyA9IDIwMAorICAgICAgICAjIHJlbWVtYmVyIHRoZSBmYWlsdXJlIGZvciB0aGUgLWsgY2FzZQorICAgICAgICBoID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItc3RhdHVzIiwgJ3cnKQorICAgICAgICBoLndyaXRlKCIyMDAiKQorCisgICAgIyBub3cgcG9zdCB0aGUgbG9nCisgICAgaWYgbGVuKGxvZykgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIGZvciBub3cgd2Ugd2lsbCB1c2UgdGhlIGh0dHAgcG9zdCBtZXRob2QgYXMgaXQgaXMgdGhlIG9ubHkgb25lCisgICAgbG9nX3Bvc3RfbWV0aG9kID0gdGluZGVyX3NlbmRfaHR0cAorICAgIGxvZ19wb3N0X21ldGhvZChldmVudC5kYXRhLCBzdGF0dXMsIGxvZykKKworCisjIHdlIHdhbnQgdG8gYmUgYW4gZXZlbnQgaGFuZGxlcgorYWRkaGFuZGxlciB0aW5kZXJjbGllbnRfZXZlbnRoYW5kbGVyCitweXRob24gdGluZGVyY2xpZW50X2V2ZW50aGFuZGxlcigpIHsKKyAgICBpZiBlLmRhdGEgaXMgTm9uZSBvciBiYi5ldmVudC5nZXROYW1lKGUpID09ICJNc2dOb3RlIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBkb190aW5kZXJfcmVwb3J0ID0gZS5kYXRhLmdldFZhcignVElOREVSX1JFUE9SVCcsIFRydWUpCisgICAgaWYgZG9fdGluZGVyX3JlcG9ydCBhbmQgZG9fdGluZGVyX3JlcG9ydCA9PSAiMSI6CisgICAgICAgIHRpbmRlcl9kb190aW5kZXJfcmVwb3J0KGUpCisKKyAgICByZXR1cm4KK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdG9hc3Rlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2NmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdG9hc3Rlci5iYmNsYXNzCkBAIC0wLDAgKzEsMzU1IEBACisjCisjIFRvYXN0ZXIgaGVscGVyIGNsYXNzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKyMKKyMgVGhpcyBiYmNsYXNzIGlzIGRlc2lnbmVkIHRvIGV4dHJhY3QgZGF0YSB1c2VkIGJ5IE9FLUNvcmUgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLAorIyBmb3IgcmVjb3JkaW5nIGluIHRoZSBUb2FzdGVyIHN5c3RlbS4KKyMgVGhlIGRhdGEgYWNjZXNzIGlzIHN5bmNocm9ub3VzLCBwcmVzZXJ2aW5nIHRoZSBidWlsZCBkYXRhIGludGVncml0eSBhY3Jvc3MKKyMgZGlmZmVyZW50IGJ1aWxkcy4KKyMKKyMgVGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQgdGhyb3VnaCB0aGUgZXZlbnQgc3lzdGVtLCB1c2luZyB0aGUgTWV0YWRhdGFFdmVudCBvYmplY3RzLgorIworIyBUaGUgbW9kZWwgaXMgdG8gZW5hYmxlIHRoZSBkYXRhZHVtcCBmdW5jdGlvbnMgYXMgcG9zdGZ1bmNzLCBhbmQgaGF2ZSB0aGUgZHVtcAorIyBleGVjdXRlZCBhZnRlciB0aGUgcmVhbCB0YXNrZnVuYyBoYXMgYmVlbiBleGVjdXRlZC4gVGhpcyBwcmV2ZW50cyB0YXNrIHNpZ25hdHVyZSBjaGFuZ2luZworIyBpcyB0b2FzdGVyIGlzIGVuYWJsZWQgb3Igbm90LiBCdWlsZCBwZXJmb3JtYW5jZSBpcyBub3QgYWZmZWN0ZWQgaWYgVG9hc3RlciBpcyBub3QgZW5hYmxlZC4KKyMKKyMgVG8gZW5hYmxlLCB1c2UgSU5IRVJJVCBpbiBsb2NhbC5jb25mOgorIworIyAgICAgICBJTkhFUklUICs9ICJ0b2FzdGVyIgorIworIworIworIworCisjIEZpbmQgYW5kIGR1bXAgbGF5ZXIgaW5mbyB3aGVuIHdlIGdvdCB0aGUgbGF5ZXJzIHBhcnNlZAorCisKKworcHl0aG9uIHRvYXN0ZXJfbGF5ZXJpbmZvX2R1bXBkYXRhKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBkZWYgX2dldF9naXRfYnJhbmNoKGxheWVyX3BhdGgpOgorICAgICAgICBicmFuY2ggPSBzdWJwcm9jZXNzLlBvcGVuKCJnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwgIiwgY3dkPWxheWVyX3BhdGgsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgYnJhbmNoID0gYnJhbmNoLnJlcGxhY2UoJ3JlZnMvaGVhZHMvJywgJycpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBicmFuY2gKKworICAgIGRlZiBfZ2V0X2dpdF9yZXZpc2lvbihsYXllcl9wYXRoKToKKyAgICAgICAgcmV2aXNpb24gPSBzdWJwcm9jZXNzLlBvcGVuKCJnaXQgcmV2LXBhcnNlIEhFQUQgMj4vZGV2L251bGwgIiwgY3dkPWxheWVyX3BhdGgsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0ucnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uCisKKyAgICBkZWYgX2dldF91cmxfbWFwX25hbWUobGF5ZXJfbmFtZSk6CisgICAgICAgICIiIiBTb21lIGxheWVycyBoYXZlIGEgZGlmZmVyZW50IG5hbWUgb24gb3BlbmVtYmVkZGVkLm9yZyBzaXRlLAorICAgICAgICAgICAgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY29ycmVjdCBuYW1lIHRvIHVzZSBpbiB0aGUgVVJMCisgICAgICAgICIiIgorCisgICAgICAgIHVybF9uYW1lID0gbGF5ZXJfbmFtZQorICAgICAgICB1cmxfbWFwcGluZyA9IHsnbWV0YSc6ICdvcGVuZW1iZWRkZWQtY29yZSd9CisKKyAgICAgICAgZm9yIGtleSBpbiB1cmxfbWFwcGluZy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gbGF5ZXJfbmFtZToKKyAgICAgICAgICAgICAgICB1cmxfbmFtZSA9IHVybF9tYXBwaW5nW2tleV0KKworICAgICAgICByZXR1cm4gdXJsX25hbWUKKworICAgIGRlZiBfZ2V0X2xheWVyX3ZlcnNpb25faW5mb3JtYXRpb24obGF5ZXJfcGF0aCk6CisKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvID0ge30KKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvWydicmFuY2gnXSA9IF9nZXRfZ2l0X2JyYW5jaChsYXllcl9wYXRoKQorICAgICAgICBsYXllcl92ZXJzaW9uX2luZm9bJ2NvbW1pdCddID0gX2dldF9naXRfcmV2aXNpb24obGF5ZXJfcGF0aCkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvWydwcmlvcml0eSddID0gMAorCisgICAgICAgIHJldHVybiBsYXllcl92ZXJzaW9uX2luZm8KKworCisgICAgZGVmIF9nZXRfbGF5ZXJfZGljdChsYXllcl9wYXRoKToKKworICAgICAgICBsYXllcl9pbmZvID0ge30KKyAgICAgICAgbGF5ZXJfbmFtZSA9IGxheWVyX3BhdGguc3BsaXQoJy8nKVstMV0KKyAgICAgICAgbGF5ZXJfdXJsID0gJ2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVyL3tsYXllcn0vJworICAgICAgICBsYXllcl91cmxfbmFtZSA9IF9nZXRfdXJsX21hcF9uYW1lKGxheWVyX25hbWUpCisKKyAgICAgICAgbGF5ZXJfaW5mb1snbmFtZSddID0gbGF5ZXJfdXJsX25hbWUKKyAgICAgICAgbGF5ZXJfaW5mb1snbG9jYWxfcGF0aCddID0gbGF5ZXJfcGF0aAorICAgICAgICBsYXllcl9pbmZvWydsYXllcl9pbmRleF91cmwnXSA9IGxheWVyX3VybC5mb3JtYXQobGF5ZXI9bGF5ZXJfdXJsX25hbWUpCisgICAgICAgIGxheWVyX2luZm9bJ3ZlcnNpb24nXSA9IF9nZXRfbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbihsYXllcl9wYXRoKQorCisgICAgICAgIHJldHVybiBsYXllcl9pbmZvCisKKworICAgIGJibGF5ZXJzID0gZS5kYXRhLmdldFZhcigiQkJMQVlFUlMiLCBUcnVlKQorCisgICAgbGxheWVyaW5mbyA9IHt9CisKKyAgICBmb3IgbGF5ZXIgaW4geyBsIGZvciBsIGluIGJibGF5ZXJzLnN0cmlwKCkuc3BsaXQoIiAiKSBpZiBsZW4obCkgfToKKyAgICAgICAgbGxheWVyaW5mb1tsYXllcl0gPSBfZ2V0X2xheWVyX2RpY3QobGF5ZXIpCisKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTGF5ZXJJbmZvIiwgbGxheWVyaW5mbyksIGUuZGF0YSkKK30KKworIyBEdW1wIHBhY2thZ2UgZmlsZSBpbmZvIGRhdGEKKworZGVmIF90b2FzdGVyX2xvYWRfcGtnZGF0YWZpbGUoZGlycGF0aCwgZmlsZXBhdGgpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IHJlCisgICAgcGtnZGF0YSA9IHt9CisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkaXJwYXRoLCBmaWxlcGF0aCksICJyIikgYXMgZmluOgorICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAga24sIGt2ID0gbGluZS5zdHJpcCgpLnNwbGl0KCI6ICIsIDEpCisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHIiXlBLR18oW15BLVo6XSopIiwga24pCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YVsnT1BLR04nXSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBrbiA9ICJfIi5qb2luKFt4IGZvciB4IGluIGtuLnNwbGl0KCJfIikgaWYgeC5pc3VwcGVyKCldKQorICAgICAgICAgICAgICAgIHBrZ2RhdGFba25dID0ga3Yuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGtuID09ICdGSUxFU19JTkZPJzoKKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YVtrbl0gPSBqc29uLmxvYWRzKGt2KQorCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICAgICMgaWdub3JlIGxpbmVzIHdpdGhvdXQgdmFsaWQga2V5OiB2YWx1ZSBwYWlycworICAgIHJldHVybiBwa2dkYXRhCisKKworcHl0aG9uIHRvYXN0ZXJfcGFja2FnZV9kdW1wZGF0YSgpIHsKKyAgICAiIiIKKyAgICBEdW1wcyB0aGUgZGF0YSBjcmVhdGVkIGJ5IGVtaXRfcGtnZGF0YQorICAgICIiIgorICAgICMgcmVwbGljYXRlIHZhcmlhYmxlcyBmcm9tIHRoZSBwYWNrYWdlLmJiY2xhc3MKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dERVNUV09SSycsIFRydWUpCisKKyAgICAjIHNjYW4gYW5kIHNlbmQgZGF0YSBmb3IgZWFjaCBwYWNrYWdlCisKKyAgICBscGtnZGF0YSA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorCisgICAgICAgIGxwa2dkYXRhID0gX3RvYXN0ZXJfbG9hZF9wa2dkYXRhZmlsZShwa2dkYXRhZGlyICsgIi9ydW50aW1lLyIsIHBrZykKKworICAgICAgICAjIEZpcmUgYW4gZXZlbnQgY29udGFpbmluZyB0aGUgcGtnIGRhdGEKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJTaW5nbGVQYWNrYWdlSW5mbyIsIGxwa2dkYXRhKSwgZCkKK30KKworIyAyLiBEdW1wIG91dHB1dCBpbWFnZSBmaWxlcyBpbmZvcm1hdGlvbgorCitweXRob24gdG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSgpIHsKKyAgICAiIiIKKyAgICBJbWFnZSBmaWxlbmFtZSBmb3Igb3V0cHV0IGltYWdlcyBpcyBub3Qgc3RhbmRhcmRpemVkLgorICAgIGltYWdlX3R5cGVzLmJiY2xhc3Mgd2lsbCBzcGVsbCBvdXQgSU1BR0VfQ01EX3h4eCB2YXJpYWJsZXMgdGhhdCBhY3R1YWxseQorICAgIGhhdmUgaGFyZGNvZGVkIHdheXMgdG8gY3JlYXRlIGltYWdlIGZpbGUgbmFtZXMgaW4gdGhlbS4KKyAgICBTbyB3ZSBsb29rIGZvciBmaWxlcyBzdGFydGluZyB3aXRoIHRoZSBzZXQgbmFtZS4KKyAgICAiIiIKKworICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBkLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpOworICAgIGltYWdlX25hbWUgPSBkLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpOworCisgICAgaW1hZ2VfaW5mb19kYXRhID0ge30KKyAgICBhcnRpZmFjdF9pbmZvX2RhdGEgPSB7fQorCisgICAgIyBjb2xsZWN0IGFsbCBhcnRpZmFjdHMKKyAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRlcGxveV9kaXJfaW1hZ2UpOgorICAgICAgICBmb3IgZm4gaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoaW1hZ2VfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGltYWdlX291dHB1dCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbikKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VfaW5mb19kYXRhW2ltYWdlX291dHB1dF0gPSBvcy5zdGF0KGltYWdlX291dHB1dCkuc3Rfc2l6ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzdGF0CisgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICAgICAgICAgIGZpbGVzdGF0ID0gb3Muc3RhdChhcnRpZmFjdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsoYXJ0aWZhY3RfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdF9pbmZvX2RhdGFbYXJ0aWZhY3RfcGF0aF0gPSBmaWxlc3RhdC5zdF9zaXplCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiT1NFcnJvckV4Y2VwdGlvbiIsIGUpLCBkKQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJJbWFnZUZpbGVTaXplIixpbWFnZV9pbmZvX2RhdGEpLCBkKQorICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiQXJ0aWZhY3RGaWxlU2l6ZSIsYXJ0aWZhY3RfaW5mb19kYXRhKSwgZCkKK30KKworCisKKyMgY29sbGVjdCBsaXN0IG9mIGJ1aWxkc3RhdHMgZmlsZXMgYmFzZWQgb24gZmlyZWQgZXZlbnRzOyB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMsIGNvbGxlY3QgYWxsIHN0YXRzIGFuZCBmaXJlIGFuIGV2ZW50IHdpdGggY29sbGVjdGVkIGRhdGEKKworcHl0aG9uIHRvYXN0ZXJfY29sbGVjdF90YXNrX3N0YXRzKCkgeworICAgIGltcG9ydCBiYi5idWlsZAorICAgIGltcG9ydCBiYi5ldmVudAorICAgIGltcG9ydCBiYi5kYXRhCisgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgaW1wb3J0IG9zCisKKyAgICBpZiBub3QgZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSk6CisgICAgICAgIHJldHVybiAgIyBpZiB3ZSBkb24ndCBoYXZlIGJ1aWxkc3RhdHMsIHdlIGNhbm5vdCBjb2xsZWN0IHN0YXRzCisKKyAgICBkZWYgX2FwcGVuZF9yZWFkX2xpc3Qodik6CisgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShlLmRhdGEuZXhwYW5kKCIke1RPUERJUn0vdG9hc3Rlci5sb2NrIiksIEZhbHNlLCBUcnVlKQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSwgImEiKSBhcyBmb3V0OgorICAgICAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5leHBhbmQoIiR7UEZ9IikpCisgICAgICAgICAgICBmb3V0LndyaXRlKCIlczo6JXM6OiVzOjolc1xuIiAlIChlLnRhc2tmaWxlLCBlLnRhc2tuYW1lLCBvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgZS5kYXRhLmV4cGFuZCgiJHtQTn0iKSkpCisKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCisgICAgZGVmIF9yZWFkX3N0YXRzKGZpbGVuYW1lKToKKyAgICAgICAgY3B1X3VzYWdlID0gMAorICAgICAgICBkaXNrX2lvID0gMAorICAgICAgICBzdGFydGlvID0gJzAnCisgICAgICAgIGVuZGlvID0gJzAnCisgICAgICAgIHN0YXJ0ZWQgPSAnMCcKKyAgICAgICAgZW5kZWQgPSAnMCcKKyAgICAgICAgcG4gPSAnJworICAgICAgICB0YXNrbmFtZSA9ICcnCisgICAgICAgIHN0YXRpbmZvID0ge30KKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgdGFza19iczoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHRhc2tfYnMucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgayx2ID0gbGluZS5zdHJpcCgpLnNwbGl0KCI6ICIsIDEpCisgICAgICAgICAgICAgICAgc3RhdGluZm9ba10gPSB2CisKKyAgICAgICAgaWYgIkNQVSB1c2FnZSIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBjcHVfdXNhZ2UgPSBzdHIoc3RhdGluZm9bIkNQVSB1c2FnZSJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBpZiAiRW5kVGltZUlPIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIGVuZGlvID0gc3RyKHN0YXRpbmZvWyJFbmRUaW1lSU8iXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIlN0YXJ0VGltZUlPIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIHN0YXJ0aW8gPSBzdHIoc3RhdGluZm9bIlN0YXJ0VGltZUlPIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJTdGFydGVkIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIHN0YXJ0ZWQgPSBzdHIoc3RhdGluZm9bIlN0YXJ0ZWQiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIkVuZGVkIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIGVuZGVkID0gc3RyKHN0YXRpbmZvWyJFbmRlZCJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBkaXNrX2lvID0gaW50KGVuZGlvKSAtIGludChzdGFydGlvKQorCisgICAgICAgIGVsYXBzZWRfdGltZSA9IGZsb2F0KGVuZGVkKSAtIGZsb2F0KHN0YXJ0ZWQpCisKKyAgICAgICAgY3B1X3VzYWdlID0gZmxvYXQoY3B1X3VzYWdlKQorCisgICAgICAgIHJldHVybiB7J2NwdV91c2FnZSc6IGNwdV91c2FnZSwgJ2Rpc2tfaW8nOiBkaXNrX2lvLCAnZWxhcHNlZF90aW1lJzogZWxhcHNlZF90aW1lfQorCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIChiYi5idWlsZC5UYXNrU3VjY2VlZGVkLCBiYi5idWlsZC5UYXNrRmFpbGVkKSk6CisgICAgICAgIF9hcHBlbmRfcmVhZF9saXN0KGUpCisgICAgICAgIHBhc3MKKworCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCkgYW5kIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgInRvYXN0ZXJzdGF0bGlzdCIpKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgInRvYXN0ZXJzdGF0bGlzdCIpLCAiciIpIGFzIGZpbjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAodGFza2ZpbGUsIHRhc2tuYW1lLCBmaWxlbmFtZSwgcmVjaXBlbmFtZSkgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIjo6IikKKyAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCh0YXNrZmlsZSwgdGFza25hbWUsIF9yZWFkX3N0YXRzKGZpbGVuYW1lKSwgcmVjaXBlbmFtZSkpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiQnVpbGRTdGF0c0xpc3QiLCBldmVudHMpLCBlLmRhdGEpCisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSkKK30KKworIyBkdW1wIHJlbGV2YW50IGJ1aWxkIGhpc3RvcnkgZGF0YSBhcyBhbiBldmVudCB3aGVuIHRoZSBidWlsZCBpcyBjb21wbGV0ZWQKKworcHl0aG9uIHRvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgQlVJTERISVNUT1JZX0RJUiA9IGUuZGF0YS5leHBhbmQoIiR7VE9QRElSfS9idWlsZGhpc3RvcnkiKQorICAgIEJVSUxESElTVE9SWV9ESVJfSU1BR0VfQkFTRSA9IGUuZGF0YS5leHBhbmQoIiVzL2ltYWdlcy8ke01BQ0hJTkVfQVJDSH0vJHtUQ0xJQkN9LyIlIEJVSUxESElTVE9SWV9ESVIpCisgICAgcGtnZGF0YV9kaXIgPSBlLmRhdGEuZ2V0VmFyKCJQS0dEQVRBX0RJUiIsIFRydWUpCisKKworICAgICMgc2NhbiB0aGUgYnVpbGQgdGFyZ2V0cyBmb3IgdGhpcyBidWlsZAorICAgIGltYWdlcyA9IHt9CisgICAgYWxscGtncyA9IHt9CisgICAgZmlsZXMgPSB7fQorICAgIGZvciB0YXJnZXQgaW4gZS5fcGtnczoKKyAgICAgICAgaW5zdGFsbGVkX2ltZ19wYXRoID0gZS5kYXRhLmV4cGFuZChvcy5wYXRoLmpvaW4oQlVJTERISVNUT1JZX0RJUl9JTUFHRV9CQVNFLCB0YXJnZXQpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbnN0YWxsZWRfaW1nX3BhdGgpOgorICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF0gPSB7fQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XSA9IHt9CisgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydkaXJzJ10gPSBbXQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnc3ltcyddID0gW10KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ2ZpbGVzJ10gPSBbXQorICAgICAgICAgICAgd2l0aCBvcGVuKCIlcy9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQiICUgaW5zdGFsbGVkX2ltZ19wYXRoLCAiciIpIGFzIGZpbjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgiOyIpCisgICAgICAgICAgICAgICAgICAgIHBzaXplLCBweCA9IGxpbmUuc3BsaXQoIlx0IikKKyAgICAgICAgICAgICAgICAgICAgcHVuaXQsIHBuYW1lID0gcHguc3BsaXQoIiAiKQorICAgICAgICAgICAgICAgICAgICAjIHRoaXMgc2l6ZSBpcyAiaW5zdGFsbGVkLXNpemUiIGFzIGl0IG1lYXN1cmVzIGhvdyBtdWNoIHNwYWNlIGl0IHRha2VzIG9uIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF1bcG5hbWUuc3RyaXAoKV0gPSB7J3NpemUnOmludChwc2l6ZSkqMTAyNCwgJ2RlcGVuZHMnIDogW119CisKKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvZGVwZW5kcy5kb3QiICUgaW5zdGFsbGVkX2ltZ19wYXRoLCAiciIpIGFzIGZpbjoKKyAgICAgICAgICAgICAgICBwID0gcmUuY29tcGlsZShyJyAtPiAnKQorICAgICAgICAgICAgICAgIGRvdCA9IHJlLmNvbXBpbGUocicuKnN0eWxlPWRvdHRlZCcpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJzsnKQorICAgICAgICAgICAgICAgICAgICBsaW5lc3BsaXQgPSBwLnNwbGl0KGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lc3BsaXQpID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICBwbmFtZSA9IGxpbmVzcGxpdFswXS5yc3RyaXAoJyInKS5zdHJpcCgnIicpCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzbmFtZSA9IGxpbmVzcGxpdFsxXS5zcGxpdCgiICIpWzBdLnN0cmlwKCkuc3RyaXAoIjsiKS5zdHJpcCgnIicpLnJzdHJpcCgnIicpCisgICAgICAgICAgICAgICAgICAgICAgICBkZXB0eXBlID0gImRlcGVuZHMiCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb3QubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdHlwZSA9ICJyZWNvbW1lbmRzIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBuYW1lIGluIGltYWdlc1t0YXJnZXRdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lXSA9IHsnc2l6ZSc6IDAsICdkZXBlbmRzJyA6IFtdfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcGVuZHNuYW1lIGluIGltYWdlc1t0YXJnZXRdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW2RlcGVuZHNuYW1lXSA9IHsnc2l6ZSc6IDAsICdkZXBlbmRzJyA6IFtdfQorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF1bcG5hbWVdWydkZXBlbmRzJ10uYXBwZW5kKChkZXBlbmRzbmFtZSwgZGVwdHlwZSkpCisKKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvZmlsZXMtaW4taW1hZ2UudHh0IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICAgICBsYyA9IFsgeCBmb3IgeCBpbiBsaW5lLnN0cmlwKCkuc3BsaXQoIiAiKSBpZiBsZW4oeCkgPiAwIF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGNbMF0uc3RhcnRzd2l0aCgibCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnc3ltcyddLmFwcGVuZChsYykKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsY1swXS5zdGFydHN3aXRoKCJkIik6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydkaXJzJ10uYXBwZW5kKGxjKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZmlsZXMnXS5hcHBlbmQobGMpCisKKyAgICAgICAgICAgIGZvciBwbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICBpZiBub3QgcG5hbWUgaW4gYWxscGtnczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnZGF0YSA9IF90b2FzdGVyX2xvYWRfcGtnZGF0YWZpbGUoIiVzL3J1bnRpbWUtcmV2ZXJzZS8iICUgcGtnZGF0YV9kaXIsIHBuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGV4cGVjdCB0aGlzIGUuZy4gZm9yIFJSRUNPTU1FTkRTIHRoYXQgYXJlIHVuc2F0aXNmaWVkIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBhbGxwa2dzW3BuYW1lXSA9IHBrZ2RhdGEKKworCisgICAgZGF0YSA9IHsgJ3BrZ2RhdGEnIDogYWxscGtncywgJ2ltZ2RhdGEnIDogaW1hZ2VzLCAnZmlsZWRhdGEnIDogZmlsZXMgfQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJJbWFnZVBrZ0xpc3QiLCBkYXRhKSwgZS5kYXRhKQorCit9CisKKyMgZHVtcCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGxpY2Vuc2UgbWFuaWZlc3QgcGF0aAorCitweXRob24gdG9hc3Rlcl9saWNlbnNlbWFuaWZlc3RfZHVtcCgpIHsKKyAgICBkZXBsb3lfZGlyID0gZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKTsKKyAgICBpbWFnZV9uYW1lID0gZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKTsKKworICAgIGRhdGEgPSB7ICdkZXBsb3lfZGlyJyA6IGRlcGxveV9kaXIsICdpbWFnZV9uYW1lJyA6IGltYWdlX25hbWUgfQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJMaWNlbnNlTWFuaWZlc3RQYXRoIiwgZGF0YSksIGQpCit9CisKKyMgc2V0IGV2ZW50IGhhbmRsZXJzCithZGRoYW5kbGVyIHRvYXN0ZXJfbGF5ZXJpbmZvX2R1bXBkYXRhCit0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YVtldmVudG1hc2tdID0gImJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Db21wbGV0ZWQiCisKK2FkZGhhbmRsZXIgdG9hc3Rlcl9jb2xsZWN0X3Rhc2tfc3RhdHMKK3RvYXN0ZXJfY29sbGVjdF90YXNrX3N0YXRzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCBiYi5idWlsZC5UYXNrRmFpbGVkIgorCithZGRoYW5kbGVyIHRvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXAKK3RvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXBbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK2RvX3BhY2thZ2VbcG9zdGZ1bmNzXSArPSAidG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhICIKK2RvX3BhY2thZ2VbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ0b2FzdGVyX3BhY2thZ2VfZHVtcGRhdGEgIgorCitkb19yb290ZnNbcG9zdGZ1bmNzXSArPSAidG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSAiCitkb19yb290ZnNbcG9zdGZ1bmNzXSArPSAidG9hc3Rlcl9saWNlbnNlbWFuaWZlc3RfZHVtcCAiCitkb19yb290ZnNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ0b2FzdGVyX2ltYWdlX2R1bXBkYXRhIHRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjJiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcwpAQCAtMCwwICsxLDE1NCBAQAoraW5oZXJpdCBzaXRlaW5mbyBrZXJuZWwtYXJjaAorCisjIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIE1VTFRJTUFDSF9UQVJHRVRfU1lTLCBiZWNhdXNlIGl0CisjIGRvZXNuJ3QgYWx3YXlzIG1hdGNoIG91ciBleHBlY3RhdGlvbnMuLi4gYnV0IHdlIGRlZmF1bHQgdG8gdGhlIHN0b2NrIHZhbHVlCitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID89ICIke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLW11Y2xpYmMiCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfbGliYy1tdXNsID0gIiAtbW11c2wiCisKKyMgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVudmlyb25tZW50LXNldHVwLXNjcmlwdCBmb3IgdXNlIGluIGEgZGVwbG95YWJsZSBTREsKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX2Vudl9zY3JpcHQgKCkgeworCSMgQ3JlYXRlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorCXNka3BhdGhuYXRpdmU9JHs3Oi0ke1NES1BBVEhOQVRJVkV9fQorCXByZWZpeD0kezY6LSR7cHJlZml4X25hdGl2ZXNka319CisJYmluZGlyPSR7NTotJHtiaW5kaXJfbmF0aXZlc2RrfX0KKwlsaWJkaXI9JHs0Oi0ke2xpYmRpcn19CisJc3lzcm9vdD0kezM6LSR7U0RLVEFSR0VUU1lTUk9PVH19CisJbXVsdGltYWNoX3RhcmdldF9zeXM9JHsyOi0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9fQorCXNjcmlwdD0kezE6LSR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0kbXVsdGltYWNoX3RhcmdldF9zeXN9CisJcm0gLWYgJHNjcmlwdAorCXRvdWNoICRzY3JpcHQKKwllY2hvICdleHBvcnQgU0RLVEFSR0VUU1lTUk9PVD0nIiRzeXNyb290IiA+PiAkc2NyaXB0CisJRVhUUkFQQVRIPSIiCisJZm9yIGkgaW4gJHtDQU5BRElBTkVYVFJBT1N9OyBkbworCQlFWFRSQVBBVEg9IiRFWFRSQVBBVEg6JHNka3BhdGhuYXRpdmUkYmluZGlyLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0kaSIKKwlkb25lCisJZWNobyAiZXhwb3J0IFBBVEg9JHNka3BhdGhuYXRpdmUkYmluZGlyOiRzZGtwYXRobmF0aXZlJGJpbmRpci8uLi8ke0hPU1RfU1lTfS9iaW46JHNka3BhdGhuYXRpdmUkYmluZGlyLyR7VEFSR0VUX1NZU30iJEVYVFJBUEFUSCc6JFBBVEgnID4+ICRzY3JpcHQKKwllY2hvICJleHBvcnQgQ0NBQ0hFX1BBVEg9JHNka3BhdGhuYXRpdmUkYmluZGlyOiRzZGtwYXRobmF0aXZlJGJpbmRpci8uLi8ke0hPU1RfU1lTfS9iaW46JHNka3BhdGhuYXRpdmUkYmluZGlyLyR7VEFSR0VUX1NZU30iJEVYVFJBUEFUSCc6JENDQUNIRV9QQVRIJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVI9JFNES1RBUkdFVFNZU1JPT1QnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEtHX0NPTkZJR19QQVRIPSRTREtUQVJHRVRTWVNST09UJyIkbGliZGlyIicvcGtnY29uZmlnJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENPTkZJR19TSVRFPSR7U0RLUEFUSH0vc2l0ZS1jb25maWctJyIke211bHRpbWFjaF90YXJnZXRfc3lzfSIgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9XCIkc2RrcGF0aG5hdGl2ZVwiIiA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9UQVJHRVRfU1lTUk9PVD0iJFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IE9FQ09SRV9BQ0xPQ0FMX09QVFM9XCItSSAkc2RrcGF0aG5hdGl2ZS91c3Ivc2hhcmUvYWNsb2NhbFwiIiA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IFBZVEhPTkhPTUU9JHNka3BhdGhuYXRpdmUkcHJlZml4IiA+PiAkc2NyaXB0CisKKwl0b29sY2hhaW5fc2hhcmVkX2Vudl9zY3JpcHQKK30KKworIyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZW52aXJvbm1lbnQtc2V0dXAtc2NyaXB0IGluIHRoZSBUTVBESVIgd2hpY2ggZW5hYmxlcworIyBhIE9FLWNvcmUgSURFIHRvIGludGVncmF0ZSB3aXRoIHRoZSBidWlsZCB0cmVlCit0b29sY2hhaW5fY3JlYXRlX3RyZWVfZW52X3NjcmlwdCAoKSB7CisJc2NyaXB0PSR7VE1QRElSfS9lbnZpcm9ubWVudC1zZXR1cC0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9CisJcm0gLWYgJHNjcmlwdAorCXRvdWNoICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEFUSD0ke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL2Jpbjoke1BBVEh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENDQUNIRV9QQVRIPSR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3IvYmluOiR7Q0NBQ0hFX1BBVEh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVI9JHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1BBVEg9JHtQS0dfQ09ORklHX1BBVEh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENPTkZJR19TSVRFPSIke0BzaXRlaW5mb19nZXRfZmlsZXMoZCl9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBTREtUQVJHRVRTWVNST09UPSR7U1RBR0lOR19ESVJfVEFSR0VUfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiR7U1RBR0lOR19ESVJfTkFUSVZFfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX1RBUkdFVF9TWVNST09UPSIke1NUQUdJTkdfRElSX1RBUkdFVH0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9BQ0xPQ0FMX09QVFM9Ii1JICR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3Ivc2hhcmUvYWNsb2NhbCInID4+ICRzY3JpcHQKKworCXRvb2xjaGFpbl9zaGFyZWRfZW52X3NjcmlwdAorfQorCit0b29sY2hhaW5fc2hhcmVkX2Vudl9zY3JpcHQgKCkgeworCWVjaG8gJ2V4cG9ydCBDQz0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RBUkdFVF9DQ19BUkNIfSAtLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENYWD0iJHtUQVJHRVRfUFJFRklYfWcrKyAke1RBUkdFVF9DQ19BUkNIfSAtLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENQUD0iJHtUQVJHRVRfUFJFRklYfWdjYyAtRSAke1RBUkdFVF9DQ19BUkNIfSAtLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEFTPSIke1RBUkdFVF9QUkVGSVh9YXMgJHtUQVJHRVRfQVNfQVJDSH0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IExEPSIke1RBUkdFVF9QUkVGSVh9bGQgJHtUQVJHRVRfTERfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBHREI9JHtUQVJHRVRfUFJFRklYfWdkYicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBTVFJJUD0ke1RBUkdFVF9QUkVGSVh9c3RyaXAnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUkFOTElCPSR7VEFSR0VUX1BSRUZJWH1yYW5saWInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0JKQ09QWT0ke1RBUkdFVF9QUkVGSVh9b2JqY29weScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPQkpEVU1QPSR7VEFSR0VUX1BSRUZJWH1vYmpkdW1wJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEFSPSR7VEFSR0VUX1BSRUZJWH1hcicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBOTT0ke1RBUkdFVF9QUkVGSVh9bm0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTTQ9bTQnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgVEFSR0VUX1BSRUZJWD0ke1RBUkdFVF9QUkVGSVh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENPTkZJR1VSRV9GTEFHUz0iLS10YXJnZXQ9JHtUQVJHRVRfU1lTfSAtLWhvc3Q9JHtUQVJHRVRfU1lTfSAtLWJ1aWxkPSR7U0RLX0FSQ0h9LWxpbnV4IC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENGTEFHUz0iJHtUQVJHRVRfQ0ZMQUdTfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ1hYRkxBR1M9IiR7VEFSR0VUX0NYWEZMQUdTfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTERGTEFHUz0iJHtUQVJHRVRfTERGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENQUEZMQUdTPSIke1RBUkdFVF9DUFBGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEtDRkxBR1M9Ii0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX0RJU1RST19WRVJTSU9OPSIke0RJU1RST19WRVJTSU9OfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX1NES19WRVJTSU9OPSIke1NES19WRVJTSU9OfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQVJDSD0ke0FSQ0h9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfScgPj4gJHNjcmlwdAorCisgICAgY2F0ID4+ICRzY3JpcHQgPDxFT0YKKworIyBBcHBlbmQgZW52aXJvbm1lbnQgc3Vic2NyaXB0cworaWYgWyAtZCAiXCRPRUNPUkVfVEFSR0VUX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZCIgXTsgdGhlbgorICAgIGZvciBlbnZmaWxlIGluIFwkT0VDT1JFX1RBUkdFVF9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQvKi5zaDsgZG8KKwkgICAgc291cmNlIFwkZW52ZmlsZQorICAgIGRvbmUKK2ZpCitpZiBbIC1kICJcJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kIiBdOyB0aGVuCisgICAgZm9yIGVudmZpbGUgaW4gXCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZC8qLnNoOyBkbworCSAgICBzb3VyY2UgXCRlbnZmaWxlCisgICAgZG9uZQorZmkKK0VPRgorfQorCisjd2UgZ2V0IHRoZSBjYWNoZWQgc2l0ZSBjb25maWcgaW4gdGhlIHJ1bnRpbWUKK1RPT0xDSEFJTl9DT05GSUdTSVRFX05PQ0FDSEUgPSAiJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIFRydWUpfSIKK1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRSA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0vJHt0YXJnZXRfZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kIgorVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRSA/Pz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjIG5jdXJzZXMiCisKKyNUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIHNpdGUgY29uZmlnIGZpbGUKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3NpdGVjb25maWcgKCkgeworCWxvY2FsIHNpdGVjb25maWc9JDEKKworCXJtIC1mICRzaXRlY29uZmlnCisJdG91Y2ggJHNpdGVjb25maWcKKworCWZvciBzaXRlZmlsZSBpbiAke1RPT0xDSEFJTl9DT05GSUdTSVRFX05PQ0FDSEV9IDsgZG8KKwkJY2F0ICRzaXRlZmlsZSA+PiAkc2l0ZWNvbmZpZworCWRvbmUKKworCSNnZXQgY2FjaGVkIHNpdGUgY29uZmlnCisJZm9yIHNpdGVmaWxlIGluICR7VE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRX07IGRvCisJCSMgUmVzb2x2ZSB2aXJ0dWFsLyogbmFtZXMgdG8gdGhlIHJlYWwgcmVjaXBlIG5hbWUgdXNpbmcgc3lzcm9vdC1wcm92aWRlcnMgaW5mbworCQljYXNlICRzaXRlZmlsZSBpbiB2aXJ0dWFsLyopCisJCQlzaXRlZmlsZT1gZWNobyAkc2l0ZWZpbGUgfCB0ciAvIF9gCisJCQlzaXRlZmlsZT1gY2F0ICR7U1RBR0lOR19ESVJfVEFSR0VUfS9zeXNyb290LXByb3ZpZGVycy8kc2l0ZWZpbGVgCisJCWVzYWMKKworCQlpZiBbIC1yICR7VE9PTENIQUlOX0NPTkZJR1NJVEVfU1lTUk9PVENBQ0hFfS8ke3NpdGVmaWxlfV9jb25maWcgXTsgdGhlbgorCQkJY2F0ICR7VE9PTENIQUlOX0NPTkZJR1NJVEVfU1lTUk9PVENBQ0hFfS8ke3NpdGVmaWxlfV9jb25maWcgPj4gJHNpdGVjb25maWcKKwkJZmkKKwlkb25lCit9CisjIFRoZSBpbW1lZGlhdGUgZXhwYW5zaW9uIGFib3ZlIGNhbiByZXN1bHQgaW4gdW53YW50ZWQgcGF0aCBkZXBlbmRlbmNpZXMgaGVyZQordG9vbGNoYWluX2NyZWF0ZV9zZGtfc2l0ZWNvbmZpZ1t2YXJkZXBzZXhjbHVkZV0gPSAiVE9PTENIQUlOX0NPTkZJR1NJVEVfU1lTUk9PVENBQ0hFIgorCisjVGhpcyBmdW5jdGlvbiBjcmVhdGUgYSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZpbGUKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gKCkgeworCWxvY2FsIHZlcnNpb25maWxlPSQxCisJcm0gLWYgJHZlcnNpb25maWxlCisJdG91Y2ggJHZlcnNpb25maWxlCisJZWNobyAnRGlzdHJvOiAke0RJU1RST30nID4+ICR2ZXJzaW9uZmlsZQorCWVjaG8gJ0Rpc3RybyBWZXJzaW9uOiAke0RJU1RST19WRVJTSU9OfScgPj4gJHZlcnNpb25maWxlCisJZWNobyAnTWV0YWRhdGEgUmV2aXNpb246ICR7TUVUQURBVEFfUkVWSVNJT059JyA+PiAkdmVyc2lvbmZpbGUKKwllY2hvICdUaW1lc3RhbXA6ICR7REFURVRJTUV9JyA+PiAkdmVyc2lvbmZpbGUKK30KK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb25bdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorICAgIGRlcHMgPSAiIgorICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcAorICAgICAgICBmb3IgdmFyaWFudCBpbiAoZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBjbHNleHRlbmQgPSBvZS5jbGFzc2V4dGVuZC5DbGFzc0V4dGVuZGVyKHZhcmlhbnQsIGQpCisgICAgICAgICAgICBuZXdkZXAgPSBjbHNleHRlbmQuZXh0ZW5kX25hbWUoZGVwKQorICAgICAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgbmV3ZGVwCisgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwZW5kcycsIGRlcHMpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkYTkzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy90eXBlY2hlY2suYmJjbGFzcwpAQCAtMCwwICsxLDEyIEBACisjIENoZWNrIHR5cGVzIG9mIGJpdGJha2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyMKKyMgU2VlIG9lLnR5cGVzIGZvciBkZXRhaWxzLgorCitweXRob24gY2hlY2tfdHlwZXMoKSB7CisgICAgaW1wb3J0IG9lLnR5cGVzCisgICAgZm9yIGtleSBpbiBlLmRhdGEua2V5cygpOgorICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyRmxhZyhrZXksICJ0eXBlIik6CisgICAgICAgICAgICBvZS5kYXRhLnR5cGVkX3ZhbHVlKGtleSwgZS5kYXRhKQorfQorYWRkaGFuZGxlciBjaGVja190eXBlcworY2hlY2tfdHlwZXNbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwNjFhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91Ym9vdC1jb25maWcuYmJjbGFzcwpAQCAtMCwwICsxLDQ5IEBACisjIEhhbmRsZSBVLUJvb3QgY29uZmlnIGZvciBhIG1hY2hpbmUKKyMKKyMgVGhlIGZvcm1hdCB0byBzcGVjaWZ5IGl0LCBpbiB0aGUgbWFjaGluZSwgaXM6CisjCisjIFVCT09UX0NPTkZJRyA/Pz0gPGRlZmF1bHQ+CisjIFVCT09UX0NPTkZJR1tmb29dID0gImNvbmZpZyxpbWFnZXMiCisjCisjIG9yCisjCisjIFVCT09UX01BQ0hJTkUgPSAiY29uZmlnIgorIworIyBDb3B5cmlnaHQgMjAxMywgMjAxNCAoQykgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK3B5dGhvbiAoKSB7CisgICAgdWJvb3RtYWNoaW5lID0gZC5nZXRWYXIoIlVCT09UX01BQ0hJTkUiLCBUcnVlKQorICAgIHVib290Y29uZmlnZmxhZ3MgPSBkLmdldFZhckZsYWdzKCdVQk9PVF9DT05GSUcnKQorICAgICMgVGhlICJkb2MiIHZhcmZsYWcgaXMgc3BlY2lhbCwgd2UgZG9uJ3Qgd2FudCB0byBzZWUgaXQgaGVyZQorICAgIHVib290Y29uZmlnZmxhZ3MucG9wKCdkb2MnLCBOb25lKQorCisgICAgaWYgbm90IHVib290bWFjaGluZSBhbmQgbm90IHVib290Y29uZmlnZmxhZ3M6CisgICAgICAgIFBOID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICAgICAgRklMRSA9IG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSkKKyAgICAgICAgYmIuZGVidWcoMSwgIlRvIGJ1aWxkICVzLCBzZWUgJXMgZm9yIGluc3RydWN0aW9ucyBvbiBcCisgICAgICAgICAgICAgICAgIHNldHRpbmcgdXAgeW91ciBtYWNoaW5lIGNvbmZpZyIgJSAoUE4sIEZJTEUpKQorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiRWl0aGVyIFVCT09UX01BQ0hJTkUgb3IgVUJPT1RfQ09ORklHIG11c3QgYmUgc2V0IGluIHRoZSAlcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb24uIiAlIGQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkpCisKKyAgICBpZiB1Ym9vdG1hY2hpbmUgYW5kIHVib290Y29uZmlnZmxhZ3M6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJZb3UgY2Fubm90IHVzZSBVQk9PVF9NQUNISU5FIGFuZCBVQk9PVF9DT05GSUcgYXQgdGhlIHNhbWUgdGltZS4iKQorCisgICAgaWYgbm90IHVib290Y29uZmlnZmxhZ3M6CisgICAgICAgIHJldHVybgorCisgICAgdWJvb3Rjb25maWcgPSAoZC5nZXRWYXIoJ1VCT09UX0NPTkZJRycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHVib290Y29uZmlnKSA+IDA6CisgICAgICAgIGZvciBjb25maWcgaW4gdWJvb3Rjb25maWc6CisgICAgICAgICAgICBmb3IgZiwgdiBpbiB1Ym9vdGNvbmZpZ2ZsYWdzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgY29uZmlnID09IGY6IAorICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IHYuc3BsaXQoJywnKQorICAgICAgICAgICAgICAgICAgICBpZiBpdGVtc1swXSBhbmQgbGVuKGl0ZW1zKSA+IDI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgnT25seSBjb25maWcsaW1hZ2VzIGNhbiBiZSBzcGVjaWZpZWQhJykKKyAgICAgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1VCT09UX01BQ0hJTkUnLCAnICcgKyBpdGVtc1swXSkKKyAgICAgICAgICAgICAgICAgICAgIyBJTUFHRV9GU1RZUEVTIGFwcGVuZGluZworICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaXRlbXMpID4gMSBhbmQgaXRlbXNbMV06CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiQXBwZW5kaW5nICclcycgdG8gSU1BR0VfRlNUWVBFUy4iICUgaXRlbXNbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignSU1BR0VfRlNUWVBFUycsICcgJyArIGl0ZW1zWzFdKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgIGVsaWYgbGVuKHVib290Y29uZmlnKSA9PSAwOgorICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCdZb3UgbXVzdCBzZXQgYSBkZWZhdWx0IGluIFVCT09UX0NPTkZJRy4nKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMzkxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdW5pbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw0NCBAQAorTkFUSVZFTFNCU1RSSU5HID0gInVuaXZlcnNhbCIKKworVU5JTkFUSVZFX0xPQURFUiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0vbGliL2xkLWxpbnV4LXg4Ni02NC5zby4yIgorCithZGRoYW5kbGVyIHVuaW5hdGl2ZV9ldmVudGhhbmRsZXIKK3VuaW5hdGl2ZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCisKK3B5dGhvbiB1bmluYXRpdmVfZXZlbnRoYW5kbGVyKCkgeworICAgIGxvYWRlciA9IGUuZGF0YS5nZXRWYXIoIlVOSU5BVElWRV9MT0FERVIiLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2FkZXIpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBjbWQgPSBlLmRhdGEuZXhwYW5kKCJta2RpciAtcCAke1NUQUdJTkdfRElSfTsgY2QgJHtTVEFHSU5HX0RJUn07IHRhciAteGpmICR7Q09SRUJBU0V9LyR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMudGFyLmJ6MjsgJHtTVEFHSU5HX0RJUn0vcmVsb2NhdGVfc2RrLnB5ICR7U1RBR0lOR19ESVJfTkFUSVZFfSAke1VOSU5BVElWRV9MT0FERVJ9ICR7VU5JTkFUSVZFX0xPQURFUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BhdGNoZWxmLXVuaW5hdGl2ZSIpCisgICAgICAgICNiYi53YXJuKCJuYXRpdmVzZGsgbGliIGV4dHJhY3Rpb246ICIgKyBjbWQpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCit9CisKK1NTVEFURVBPU1RVTlBBQ0tGVU5DU19hcHBlbmQgPSAiIHVuaW5hdGl2ZV9jaGFuZ2VpbnRlcnAiCisKK3B5dGhvbiB1bmluYXRpdmVfY2hhbmdlaW50ZXJwICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCBzdGF0CisgICAgaW1wb3J0IG9lLnFhCisKKyAgICBpZiBub3QgKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKSk6CisgICAgICAgIHJldHVybgorCisgICAgc3N0YXRlaW5zdCA9IGQuZ2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIFRydWUpCisgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNzdGF0ZWluc3QpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcyA9IG9zLnN0YXQoZikKKyAgICAgICAgICAgIGlmIG5vdCAoKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWFVTUikgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWEdSUCkgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWE9USCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGYgPSBvZS5xYS5FTEZGaWxlKGYpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZWxmLm9wZW4oKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICNiYi53YXJuKCJwYXRjaGVsZi11bmluYXRpdmUgLS1zZXQtaW50ZXJwcmV0ZXIgJXMgJXMiICUgKGQuZ2V0VmFyKCJVTklOQVRJVkVfTE9BREVSIiwgVHJ1ZSksIGYpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJwYXRjaGVsZi11bmluYXRpdmUgLS1zZXQtaW50ZXJwcmV0ZXIgJXMgJXMiICUgKGQuZ2V0VmFyKCJVTklOQVRJVkVfTE9BREVSIiwgVHJ1ZSksIGYpLCBzaGVsbD1UcnVlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMTY1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MKQEAgLTAsMCArMSwyNjcgQEAKKyMgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhlbHAgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gd2hpY2ggaXMgdXNlZnVsIHdoZW4KKyMgbXVsdGlwbGUgc291cmNlcyBwcm92aWRlIHNhbWUgY29tbWFuZC4gWW91IGNhbiB1c2UgdXBkYXRlLWFsdGVybmF0aXZlcworIyBjb21tYW5kIGRpcmVjdGx5IGluIHlvdXIgcmVjaXBlLCBidXQgaW4gbW9zdCBjYXNlcyB0aGlzIGNsYXNzIHNpbXBsaWZpZXMKKyMgdGhhdCBqb2IuCisjCisjIFRvIHVzZSB0aGlzIGNsYXNzIGEgbnVtYmVyIG9mIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVmaW5lZDoKKyMKKyMgTGlzdCBhbGwgb2YgdGhlIGFsdGVybmF0aXZlcyBuZWVkZWQgYnkgYSBwYWNrYWdlOgorIyBBTFRFUk5BVElWRV88cGtnPiA9ICJuYW1lMSBuYW1lMiBuYW1lMyAuLi4iCisjCisjICAgaS5lLiBBTFRFUk5BVElWRV9idXN5Ym94ID0gInNoIHNlZCB0ZXN0IGJyYWNrZXQiCisjCisjIFRoZSBwYXRobmFtZSBvZiB0aGUgbGluaworIyBBTFRFUk5BVElWRV9MSU5LX05BTUVbbmFtZV0gPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBvbmNlIGl0J3MgYmVlbiBpbnN0YWxsZWQgb250byB0aGUgcnVudGltZS4KKyMgICBUaGlzIG5hbWUgaXMgZ2xvYmFsIHRvIGFsbCBzcGxpdCBwYWNrYWdlcyBpbiB0aGlzIHJlY2lwZSwgYW5kIHNob3VsZCBtYXRjaAorIyAgIG90aGVyIHJlY2lwZXMgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LgorIyAgIGkuZS4gQUxURVJOQVRJVkVfTElOS19OQU1FW2JyYWNrZXRdID0gIi91c3IvYmluL1siCisjCisjIE5PVEU6IElmIEFMVEVSTkFUSVZFX0xJTktfTkFNRSBpcyBub3QgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8gJHtiaW5kaXJ9L25hbWUKKyMKKyMgVGhlIGRlZmF1bHQgbGluayB0byBjcmVhdGUgZm9yIGFsbCB0YXJnZXRzCisjIEFMVEVSTkFUSVZFX1RBUkdFVCA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB1c2VmdWwgaW4gYSBtdWx0aWNhbGwgYmluYXJ5IGNhc2UKKyMgICBpLmUuIEFMVEVSTkFUSVZFX1RBUkdFVCA9ICIvYmluL2J1c3lib3giCisjCisjIEEgbm9uLWRlZmF1bHQgbGluayB0byBjcmVhdGUgZm9yIGEgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1RBUkdFVFtuYW1lXSA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGFzIGl0J3MgYmVlbiBpbnN0YWxsIGJ5IGRvX2luc3RhbGwKKyMgICBpLmUuIEFMVEVSTkFUSVZFX1RBUkdFVFtzaF0gPSAiL2Jpbi9iYXNoIgorIworIyBBIHBhY2thZ2Ugc3BlY2lmaWMgbGluayBmb3IgYSB0YXJnZXQKKyMgQUxURVJOQVRJVkVfVEFSR0VUXzxwa2c+W25hbWVdID0gInRhcmdldCIKKyMKKyMgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgcmVjaXBlIHByb3ZpZGVzIG11bHRpcGxlIGFsdGVybmF0aXZlcyBmb3IgdGhlCisjICAgc2FtZSBpdGVtLgorIworIyBOT1RFOiBJZiBBTFRFUk5BVElWRV9UQVJHRVQgaXMgbm90IGRlZmluZWQsIGl0IHdpbGwgaW5oZXJpdCB0aGUgdmFsdWUKKyMgZnJvbSBBTFRFUk5BVElWRV9MSU5LX05BTUUuCisjCisjIE5PVEU6IElmIHRoZSBBTFRFUk5BVElWRV9MSU5LX05BTUUgYW5kIEFMVEVSTkFUSVZFX1RBUkdFVCBhcmUgdGhlIHNhbWUsCisjIEFMVEVSTkFUSVZFX1RBUkdFVCB3aWxsIGhhdmUgJy57QlBOfScgYXBwZW5kZWQgdG8gaXQuICBJZiB0aGUgZmlsZQorIyByZWZlcmVuY2VkIGhhcyBub3QgYmVlbiByZW5hbWVkLCBpdCB3aWxsIGFsc28gYmUgcmVuYW1lZC4gIChUaGlzIGF2b2lkcworIyB0aGUgbmVlZCB0byByZW5hbWUgYWx0ZXJuYXRpdmUgZmlsZXMgaW4gdGhlIGRvX2luc3RhbGwgc3RlcCwgYnV0IHN0aWxsCisjIHN1cHBvcnRzIGl0IGlmIG5lY2Vzc2FyeSBmb3Igc29tZSByZWFzb24uKQorIworIyBUaGUgZGVmYXVsdCBwcmlvcml0eSBmb3IgYW55IGFsdGVybmF0aXZlcworIyBBTFRFUk5BVElWRV9QUklPUklUWSA9ICJwcmlvcml0eSIKKyMKKyMgICBpLmUuIGRlZmF1bHQgaXMgQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAiCisjCisjIFRoZSBub24tZGVmYXVsdCBwcmlvcml0eSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFlbbmFtZV0gPSAicHJpb3JpdHkiCisjCisjIFRoZSBwYWNrYWdlIHByaW9yaXR5IGZvciBhIHNwZWNpZmljIHRhcmdldAorIyBBTFRFUk5BVElWRV9QUklPUklUWV88cGtnPltuYW1lXSA9ICJwcmlvcml0eSIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAiCisKKyMgV2UgbmVlZCBzcGVjaWFsIHByb2Nlc3NpbmcgZm9yIHZhcmRlcHMgYmVjYXVzZSBpdCBjYW4gbm90IHdvcmsgb24KKyMgbW9kaWZpZWQgZmxhZyB2YWx1ZXMuICBTbyB3ZSBhZ3JlZ2F0ZSB0aGUgZmxhZ3MgaW50byBhIG5ldyB2YXJpYWJsZQorIyBhbmQgaW5jbHVkZSB0aGF0IHZhaXJhYmxlIGluIHRoZSBzZXQuCitVUERBTFRWQVJTICA9ICJBTFRFUk5BVElWRSBBTFRFUk5BVElWRV9MSU5LX05BTUUgQUxURVJOQVRJVkVfVEFSR0VUIEFMVEVSTkFUSVZFX1BSSU9SSVRZIgorCitkZWYgZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcmRlcHMoZCk6CisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlVQREFMVFZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgIyBGaXJzdCBjb21wdXRlIHRoZW0gZm9yIG5vbl9wa2cgdmVyc2lvbnMKKyAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICBmb3IgZmxhZyBpbiAoZC5nZXRWYXJGbGFncyh2KSBvciB7fSk6CisgICAgICAgICAgICBpZiBmbGFnID09ICJkb2MiIG9yIGZsYWcgPT0gInZhcmRlcHMiIG9yIGZsYWcgPT0gInZhcmRlcHNleHAiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkLmFwcGVuZFZhcignJXNfVkFSREVQUycgJSAodiksICcgJXM6JXMnICUgKGZsYWcsIGQuZ2V0VmFyRmxhZyh2LCBmbGFnLCBGYWxzZSkpKQorCisgICAgZm9yIHAgaW4gcGtnczoKKyAgICAgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgICAgIGZvciBmbGFnIGluIChkLmdldFZhckZsYWdzKCIlc18lcyIgJSAodixwKSkgb3Ige30pOgorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gImRvYyIgb3IgZmxhZyA9PSAidmFyZGVwcyIgb3IgZmxhZyA9PSAidmFyZGVwc2V4cCI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJyVzX1ZBUkRFUFNfJXMnICUgKHYscCksICcgJXM6JXMnICUgKGZsYWcsIGQuZ2V0VmFyRmxhZygnJXNfJXMnICUgKHYscCksIGZsYWcsIEZhbHNlKSkpCisKK2RlZiB1YV9leHRlbmRfZGVwZW5kcyhkKToKKyAgICBpZiBub3QgJ3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcycgaW4gZC5nZXRWYXIoJ1BST1ZJREVTJywgVHJ1ZSk6CisgICAgICAgIGQuYXBwZW5kVmFyKCdERVBFTkRTJywgJyB2aXJ0dWFsLyR7TUxQUkVGSVh9dXBkYXRlLWFsdGVybmF0aXZlcycpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICAjIFVwZGF0ZSBBbHRlcm5hdGl2ZXMgb25seSB3b3JrcyBvbiB0YXJnZXQgcGFja2FnZXMuLi4KKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBcCisgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIFwKKyAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICByZXR1cm4KKworICAgICMgY29tcHV0ZSBzcGVjaWFsIHZhcmRlcHMKKyAgICBnZW5fdXBkYXRlYWx0ZXJuYXRpdmVzdmFyZGVwcyhkKQorCisgICAgIyBleHRlbmQgdGhlIGRlcGVuZHMgdG8gaW5jbHVkZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKyAgICB1YV9leHRlbmRfZGVwZW5kcyhkKQorfQorCitkZWYgZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcnMoZCk6CisgICAgcmV0ID0gW10KKyAgICBwa2dzID0gKGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgdmFycyA9IChkLmdldFZhcigiVVBEQUxUVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICByZXQuYXBwZW5kKHYgKyAiX1ZBUkRFUFMiKQorCisgICAgZm9yIHAgaW4gcGtnczoKKyAgICAgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgICAgIHJldC5hcHBlbmQodiArICJfIiArIHApCisgICAgICAgICAgICByZXQuYXBwZW5kKHYgKyAiX1ZBUkRFUFNfIiArIHApCisgICAgcmV0dXJuICIgIi5qb2luKHJldCkKKworIyBOb3cgdGhlIG5ldyBzdHVmZiwgd2UgdXNlIGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSByaWdodCB2YWx1ZXMKK3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNdICs9ICIke1VQREFMVFZBUlN9ICR7QGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJzKGQpfSIKKworIyBXZSBuZWVkIHRvIGRvIHRoZSByZW5hbWUgYWZ0ZXIgdGhlIGltYWdlIGNyZWF0aW9uIHN0ZXAsIGJ1dCBiZWZvcmUKKyMgdGhlIHNwbGl0IGFuZCBzdHJpcCBzdGVwcy4uICBwYWNrYWdlY29weSBzZWVtcyB0byBiZSB0aGUgZWFybGllc3QgcmVhc29uYWJsZQorIyBwbGFjZS4KK3B5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5X2FwcGVuZCAoKSB7CisgICAgIyBDaGVjayBmb3IgZGVwcmVjYXRlZCB1c2FnZS4uLgorICAgIHBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgaWYgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX0xJTktTJywgVHJ1ZSkgIT0gTm9uZToKKyAgICAgICAgYmIuZmF0YWwoJyVzOiBVc2Ugb2YgQUxURVJOQVRJVkVfTElOS1MvQUxURVJOQVRJVkVfUEFUSC9BTFRFUk5BVElWRV9OQU1FIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHBsZWFzZSBjb252ZXJ0IHRvIHRoZSB1cGRhdGVkIHN5bnRheCwgc2VlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcyBmb3IgbW9yZSBpbmZvLicgJSBwbikKKworICAgICMgRG8gYWN0dWFsIHVwZGF0ZSBhbHRlcm5hdGl2ZXMgcHJvY2Vzc2luZworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICMgSWYgdGhlIHNyYyA9PSBkZXN0LCB3ZSBrbm93IHdlIG5lZWQgdG8gcmVuYW1lIHRoZSBkZXN0IGJ5IGFwcGVuZGluZyAke0JQTn0KKyAgICAgICAgbGlua19yZW5hbWUgPSB7fQorICAgICAgICBmb3IgYWx0X25hbWUgaW4gKGQuZ2V0VmFyKCdBTFRFUk5BVElWRV8lcycgJSBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWx0X2xpbmsgICAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBhbHRfbGluazoKKyAgICAgICAgICAgICAgICBhbHRfbGluayA9ICIlcy8lcyIgJSAoZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpLCBhbHRfbmFtZSkKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBhbHRfbGluaykKKworICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgVHJ1ZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGFsdF90YXJnZXQgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBUcnVlKSBvciBhbHRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgYWx0X3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYWx0X2xpbmspLCBhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICAjIElmIHRoZSBsaW5rIGFuZCB0YXJnZXQgYXJlIHRoZSBzYW1lIG5hbWUsIHdlIG5lZWQgdG8gcmVuYW1lIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBpZiBhbHRfbGluayA9PSBhbHRfdGFyZ2V0OgorICAgICAgICAgICAgICAgIHNyYyA9ICclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkKKyAgICAgICAgICAgICAgICBhbHRfdGFyZ2V0X3JlbmFtZSA9ICclcy4lcycgJSAoYWx0X3RhcmdldCwgcG4pCisgICAgICAgICAgICAgICAgZGVzdCA9ICclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldF9yZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogQWxyZWFkeSByZW5hbWVkOiAlcycgJSAocG4sIGFsdF90YXJnZXRfcmVuYW1lKSkKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGgubGV4aXN0cyhzcmMpOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhzcmMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBEZWxheSByZW5hbWUgb2YgbGlua3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfcmVuYW1lW2FsdF90YXJnZXRdID0gYWx0X3RhcmdldF9yZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJyVzOiBSZW5hbWUgJXMgLT4gJXMnICUgKHBuLCBhbHRfdGFyZ2V0LCBhbHRfdGFyZ2V0X3JlbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc3JjLCBkZXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBhbHRlcm5hdGl2ZSB0YXJnZXQgKCVzIG9yICVzKSBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcuLi4iICUgKHBuLCBhbHRfdGFyZ2V0LCBhbHRfdGFyZ2V0X3JlbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgYWx0X3RhcmdldF9yZW5hbWUpCisKKyAgICAgICAgIyBQcm9jZXNzIGRlbGF5ZWQgbGluayBuYW1lcworICAgICAgICAjIERvIHRoZXNlIGFmdGVyIG90aGVyIHJlbmFtZXMgc28gd2UgY2FuIGNvcnJlY3QgYnJva2VuIGxpbmtzCisgICAgICAgIGZvciBhbHRfdGFyZ2V0IGluIGxpbmtfcmVuYW1lOgorICAgICAgICAgICAgc3JjID0gJyVzLyVzJyAlIChwa2dkZXN0LCBhbHRfdGFyZ2V0KQorICAgICAgICAgICAgZGVzdCA9ICclcy8lcycgJSAocGtnZGVzdCwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0pCisgICAgICAgICAgICBsaW5rID0gb3MucmVhZGxpbmsoc3JjKQorICAgICAgICAgICAgbGlua190YXJnZXQgPSBvZS5wYXRoLnJlYWxwYXRoKHNyYywgcGtnZGVzdCwgVHJ1ZSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGxpbmtfdGFyZ2V0KToKKyAgICAgICAgICAgICAgICAjIE9rLCB0aGUgbGlua190YXJnZXQgZXhpc3RzLCB3ZSBjYW4gcmVuYW1lCisgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IFJlbmFtZSAobGluaykgJXMgLT4gJXMnICUgKHBuLCBhbHRfdGFyZ2V0LCBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSkpCisgICAgICAgICAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUcnkgdG8gcmVzb2x2ZSB0aGUgYnJva2VuIGxpbmsgdG8gbGluay4ke0JQTn0KKyAgICAgICAgICAgICAgICBsaW5rX21heWJlID0gJyVzLiVzJyAlIChvcy5yZWFkbGluayhzcmMpLCBwbikKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzcmMpLCBsaW5rX21heWJlKSk6CisgICAgICAgICAgICAgICAgICAgICMgT2ssIHRoZSByZW5hbWVkIGxpbmsgdGFyZ2V0IGV4aXN0cy4uIGNyZWF0ZSBhIG5ldyBsaW5rLCBhbmQgcmVtb3ZlIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogQ3JlYXRpbmcgbmV3IGxpbmsgJXMgLT4gJXMnICUgKHBuLCBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSwgbGlua19tYXliZSkpCisgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsobGlua19tYXliZSwgZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHNyYykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCclczogVW5hYmxlIHRvIHJlc29sdmUgZGFuZ2xpbmcgc3ltbGluazogJXMnICUgKHBuLCBhbHRfdGFyZ2V0KSkKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVhbHRlcm5hdGl2ZXMgIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlYWx0ZXJuYXRpdmVzICgpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorCisgICAgIyBEbyBhY3R1YWwgdXBkYXRlIGFsdGVybmF0aXZlcyBwcm9jZXNzaW5nCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIyBDcmVhdGUgcG9zdCBpbnN0YWxsL3JlbW92YWwgc2NyaXB0cworICAgICAgICBhbHRfc2V0dXBfbGlua3MgPSAiIgorICAgICAgICBhbHRfcmVtb3ZlX2xpbmtzID0gIiIKKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gYWx0X3RhcmdldCBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIGFsdF9saW5rCisgICAgICAgICAgICAjIFNvbWV0aW1lcyBhbHRfdGFyZ2V0IGlzIHNwZWNpZmllZCBhcyByZWxhdGl2ZSB0byB0aGUgbGluayBuYW1lLgorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShhbHRfbGluayksIGFsdF90YXJnZXQpCisKKyAgICAgICAgICAgIGFsdF9wcmlvcml0eSA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfUFJJT1JJVFlfJXMnICUgcGtnLCAgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfUFJJT1JJVFknLCAgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfcHJpb3JpdHkgPSBhbHRfcHJpb3JpdHkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZJywgVHJ1ZSkKKworICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCB0cmlnZ2VyLCBhcyBpdCBzaG91bGQgaGF2ZSBiZWVuIHJlc29sdmVkIGVhcmxpZXIhCisgICAgICAgICAgICBpZiBhbHRfbGluayA9PSBhbHRfdGFyZ2V0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ2FsdF9saW5rID09IGFsdF90YXJnZXQ6ICVzID09ICVzIC0tIGNvcnJlY3RpbmcsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hJyAlIChhbHRfbGluaywgYWx0X3RhcmdldCkpCisgICAgICAgICAgICAgICAgYWx0X3RhcmdldCA9ICclcy4lcycgJSAoYWx0X3RhcmdldCwgcG4pCisKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMoJyVzLyVzJyAlIChwa2dkZXN0LCBhbHRfdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgYmIud2FybignJXM6IE5PVCBhZGRpbmcgYWx0ZXJuYXRpdmUgcHJvdmlkZSAlczogJXMgZG9lcyBub3QgZXhpc3QnICUgKHBuLCBhbHRfbGluaywgYWx0X3RhcmdldCkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZWZhdWx0IHRvIGdlbmVyYXRlIHNoZWxsIHNjcmlwdC4uIGV2ZW50dWFsbHkgd2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMuLi4KKyAgICAgICAgICAgIGFsdF90YXJnZXQgPSBvcy5wYXRoLm5vcm1wYXRoKGFsdF90YXJnZXQpCisKKyAgICAgICAgICAgIGFsdF9zZXR1cF9saW5rcyAgKz0gJ1x0dXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgJXMgJXMgJXMgJXNcbicgJSAoYWx0X2xpbmssIGFsdF9uYW1lLCBhbHRfdGFyZ2V0LCBhbHRfcHJpb3JpdHkpCisgICAgICAgICAgICBhbHRfcmVtb3ZlX2xpbmtzICs9ICdcdHVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgICVzICVzXG4nICUgKGFsdF9uYW1lLCBhbHRfdGFyZ2V0KQorCisgICAgICAgIGlmIGFsdF9zZXR1cF9saW5rczoKKyAgICAgICAgICAgICMgUkRFUEVORFMgc2V0dXAKKyAgICAgICAgICAgIHByb3ZpZGVyID0gZC5nZXRWYXIoJ1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHByb3ZpZGVyOgorICAgICAgICAgICAgICAgICNiYi5ub3RlKCdhZGRpbmcgcnVudGltZSByZXF1aXJlbWVudCBmb3IgdXBkYXRlLWFsdGVybmF0aXZlcyBmb3IgJXMnICUgcGtnKQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18lcycgJSBwa2csICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArIHByb3ZpZGVyKQorCisgICAgICAgICAgICBiYi5ub3RlKCdhZGRpbmcgdXBkYXRlLWFsdGVybmF0aXZlcyBjYWxscyB0byBwb3N0aW5zdC9wcmVybSBmb3IgJXMnICUgcGtnKQorICAgICAgICAgICAgYmIubm90ZSgnJXMnICUgYWx0X3NldHVwX2xpbmtzKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcG9zdGluc3QgKz0gYWx0X3NldHVwX2xpbmtzCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgICAgIGJiLm5vdGUoJyVzJyAlIGFsdF9yZW1vdmVfbGlua3MpCisgICAgICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKSBvciAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwcmVybSArPSBhbHRfcmVtb3ZlX2xpbmtzCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCit9CisKK3B5dGhvbiBwYWNrYWdlX2RvX2ZpbGVkZXBzX2FwcGVuZCAoKSB7CisgICAgcG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBmb3IgYWx0X25hbWUgaW4gKGQuZ2V0VmFyKCdBTFRFUk5BVElWRV8lcycgJSBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWx0X2xpbmsgICAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBhbHRfdGFyZ2V0IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgYWx0X2xpbmsKKworICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdhbHRfbGluayA9PSBhbHRfdGFyZ2V0OiAlcyA9PSAlcycgJSAoYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGFsdF90YXJnZXQgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5sZXhpc3RzKCclcy8lcy8lcycgJSAocGtnZGVzdCwgcGtnLCBhbHRfdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBBZGQgZmlsZSBwcm92aWRlCisgICAgICAgICAgICB0cmFuc190YXJnZXQgPSBvZS5wYWNrYWdlLmZpbGVfdHJhbnNsYXRlKGFsdF90YXJnZXQpCisgICAgICAgICAgICBkLmFwcGVuZFZhcignRklMRVJQUk9WSURFU18lc18lcycgJSAodHJhbnNfdGFyZ2V0LCBwa2cpLCAiICIgKyBhbHRfbGluaykKKyAgICAgICAgICAgIGlmIG5vdCB0cmFuc190YXJnZXQgaW4gKGQuZ2V0VmFyKCdGSUxFUlBST1ZJREVTRkxJU1RfJXMnICUgcGtnLCBUcnVlKSBvciAiIik6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0ZJTEVSUFJPVklERVNGTElTVF8lcycgJSBwa2csICIgIiArIHRyYW5zX3RhcmdldCkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdXBkYXRlLXJjLmQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTBhNzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MKQEAgLTAsMCArMSwxMzMgQEAKK1VQREFURVJDUE4gPz0gIiR7UE59IgorCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSB1cGRhdGUtcmMuZCBpbml0c2NyaXB0cyIKK1VQREFURVJDRCA9ICJ1cGRhdGUtcmMuZCIKK1VQREFURVJDRF9jbGFzcy1jcm9zcyA9ICIiCitVUERBVEVSQ0RfY2xhc3MtbmF0aXZlID0gIiIKK1VQREFURVJDRF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitJTklUU0NSSVBUX1BBUkFNUyA/PSAiZGVmYXVsdHMiCisKK0lOSVRfRF9ESVIgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQiCisKK3VwZGF0ZXJjZF9wcmVpbnN0KCkgeworaWYgWyAteiAiJEQiIC1hIC1mICIke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSIgXTsgdGhlbgorCSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IHN0b3AKK2ZpCitpZiB0eXBlIHVwZGF0ZS1yYy5kID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFQ9Ii1mIC1yICREIgorCWVsc2UKKwkJT1BUPSItZiIKKwlmaQorCXVwZGF0ZS1yYy5kICRPUFQgJHtJTklUU0NSSVBUX05BTUV9IHJlbW92ZQorZmkKK30KKwordXBkYXRlcmNkX3Bvc3RpbnN0KCkgeworaWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUPSItciAkRCIKKwllbHNlCisJCU9QVD0iLXMiCisJZmkKKwl1cGRhdGUtcmMuZCAkT1BUICR7SU5JVFNDUklQVF9OQU1FfSAke0lOSVRTQ1JJUFRfUEFSQU1TfQorZmkKK30KKwordXBkYXRlcmNkX3ByZXJtKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wCitmaQorfQorCit1cGRhdGVyY2RfcG9zdHJtKCkgeworaWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUPSItZiAtciAkRCIKKwllbHNlCisJCU9QVD0iLWYiCisJZmkKKwl1cGRhdGUtcmMuZCAkT1BUICR7SU5JVFNDUklQVF9OQU1FfSByZW1vdmUKK2ZpCit9CisKKworZGVmIHVwZGF0ZV9yY19hZnRlcl9wYXJzZShkKToKKyAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9QQUNLQUdFUycsIEZhbHNlKSA9PSBOb25lOgorICAgICAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9OQU1FJywgRmFsc2UpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1cGRhdGUtcmMuZCBidXQgZG9lc24ndCBzZXQgSU5JVFNDUklQVF9OQU1FIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQorICAgICAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9QQVJBTVMnLCBGYWxzZSkgPT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIGluaGVyaXRzIHVwZGF0ZS1yYy5kIGJ1dCBkb2Vzbid0IHNldCBJTklUU0NSSVBUX1BBUkFNUyIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIHVwZGF0ZV9yY19hZnRlcl9wYXJzZShkKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAiCitQQUNLQUdFU1BMSVRGVU5DU19yZW1vdmVfY2xhc3MtbmF0aXZlc2RrID0gInBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAiCisKK3BvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZFt2YXJkZXBzXSArPSAidXBkYXRlcmNkX3ByZXJtIHVwZGF0ZXJjZF9wb3N0cm0gdXBkYXRlcmNkX3ByZWluc3QgdXBkYXRlcmNkX3Bvc3RpbnN0IgorcG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkW3ZhcmRlcHNleGNsdWRlXSArPSAiT1ZFUlJJREVTIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkICgpIHsKKyAgICBkZWYgdXBkYXRlX3JjZF9hdXRvX2RlcGVuZChwa2cpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgcGF0aCA9IGQuZXhwYW5kKCIke0R9JHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0iKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLXEgLXcgJy9ldGMvaW5pdC5kL2Z1bmN0aW9ucycgJXMiICUgcGF0aAorICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICcgJXNpbml0c2NyaXB0cy1mdW5jdGlvbnMnICUgKG1scHJlZml4KSkKKworICAgIGRlZiB1cGRhdGVfcmNkX3BhY2thZ2UocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyB1cGRhdGUtcmMuZCBjYWxscyB0byBwcmVpbnN0L3Bvc3RpbnN0L3ByZXJtL3Bvc3RybSBmb3IgJXMnICUgcGtnKQorCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCAiJXM6JXMiICUgKHBrZywgb3ZlcnJpZGVzKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgdXBkYXRlX3JjZF9hdXRvX2RlcGVuZChwa2cpCisKKyAgICAgICAgcHJlaW5zdCA9IGQuZ2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwcmVpbnN0OgorICAgICAgICAgICAgcHJlaW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlaW5zdCArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIHByZWluc3QpCisKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RpbnN0ICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlcm06CisgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlcm0gKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIHByZXJtKQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCisKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csICIgJHtNTFBSRUZJWH0ke1VQREFURVJDRH0iKQorCisgICAgIyBDaGVjayB0aGF0IHRoaXMgY2xhc3MgaXNuJ3QgYmVpbmcgaW5oaWJpdGVkIChnZW5lcmFsbHksIGJ5CisgICAgIyBzeXN0ZW1kLmJiY2xhc3MpIGJlZm9yZSBkb2luZyBhbnkgd29yay4KKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpIG9yIFwKKyAgICAgICBub3QgZC5nZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCBUcnVlKToKKyAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdJTklUU0NSSVBUX1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICAgICAgaWYgcGtncyA9PSBOb25lOgorICAgICAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdVUERBVEVSQ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgcGtncyBpbiBwYWNrYWdlcyBhbmQgcGFja2FnZXMgIT0gW106CisgICAgICAgICAgICAgICAgcGtncyA9IHBhY2thZ2VzWzBdCisgICAgICAgIGZvciBwa2cgaW4gcGtncy5zcGxpdCgpOgorICAgICAgICAgICAgdXBkYXRlX3JjZF9wYWNrYWdlKHBrZykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxYTcwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzCkBAIC0wLDAgKzEsMjc2IEBACisjIEluIG9yZGVyIHRvIHN1cHBvcnQgYSBkZXRlcm1pbmlzdGljIHNldCBvZiAnZHluYW1pYycgdXNlcnMvZ3JvdXBzLAorIyB3ZSBuZWVkIGEgZnVuY3Rpb24gdG8gcmVmb3JtYXQgdGhlIHBhcmFtcyBiYXNlZCBvbiBhIHN0YXRpYyBmaWxlCitkZWYgdXBkYXRlX3VzZXJhZGRfc3RhdGljX2NvbmZpZyhkKToKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgcmUKKworICAgIGNsYXNzIG15QXJndW1lbnRQYXJzZXIoIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyICk6CisgICAgICAgIGRlZiBfcHJpbnRfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBmaWxlPU5vbmUpOgorICAgICAgICAgICAgYmIud2FybigiJXMgLSAlczogJXMiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIG1lc3NhZ2UpKQorCisgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLi4uCisgICAgICAgIGRlZiBleGl0KHNlbGYsIHN0YXR1cz0wLCBtZXNzYWdlPU5vbmUpOgorICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2Ugb3IgKCIlcyAtICVzOiB1c2VyYWRkLmJiY2xhc3M6IEFyZ3VtZW50IHBhcnNpbmcgZXhpdGVkIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnKSkKKyAgICAgICAgICAgIGVycm9yKG1lc3NhZ2UpCisKKyAgICAgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZChtZXNzYWdlKQorCisgICAgIyBXZSBwYXJzZSBhbmQgcmV3cml0ZSB0aGUgdXNlcmFkZCBjb21wb25lbnRzCisgICAgZGVmIHJld3JpdGVfdXNlcmFkZChwYXJhbXMpOgorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29tZXMgZnJvbSAtLWhlbHAgb24gdXNlcmFkZCBmcm9tIHNoYWRvdworICAgICAgICBwYXJzZXIgPSBteUFyZ3VtZW50UGFyc2VyKHByb2c9J3VzZXJhZGQnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYiIsICItLWJhc2UtZGlyIiwgbWV0YXZhcj0iQkFTRV9ESVIiLCBoZWxwPSJiYXNlIGRpcmVjdG9yeSBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1jIiwgIi0tY29tbWVudCIsIG1ldGF2YXI9IkNPTU1FTlQiLCBoZWxwPSJHRUNPUyBmaWVsZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZCIsICItLWhvbWUtZGlyIiwgbWV0YXZhcj0iSE9NRV9ESVIiLCBoZWxwPSJob21lIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItRCIsICItLWRlZmF1bHRzIiwgaGVscD0icHJpbnQgb3IgY2hhbmdlIGRlZmF1bHQgdXNlcmFkZCBjb25maWd1cmF0aW9uIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWUiLCAiLS1leHBpcmVkYXRlIiwgbWV0YXZhcj0iRVhQSVJFX0RBVEUiLCBoZWxwPSJleHBpcmF0aW9uIGRhdGUgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWYiLCAiLS1pbmFjdGl2ZSIsIG1ldGF2YXI9IklOQUNUSVZFIiwgaGVscD0icGFzc3dvcmQgaW5hY3Rpdml0eSBwZXJpb2Qgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWciLCAiLS1naWQiLCBtZXRhdmFyPSJHUk9VUCIsIGhlbHA9Im5hbWUgb3IgSUQgb2YgdGhlIHByaW1hcnkgZ3JvdXAgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUciLCAiLS1ncm91cHMiLCBtZXRhdmFyPSJHUk9VUFMiLCBoZWxwPSJsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXBzIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1rIiwgIi0tc2tlbCIsIG1ldGF2YXI9IlNLRUxfRElSIiwgaGVscD0idXNlIHRoaXMgYWx0ZXJuYXRpdmUgc2tlbGV0b24gZGlyZWN0b3J5IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUsiLCAiLS1rZXkiLCBtZXRhdmFyPSJLRVk9VkFMVUUiLCBoZWxwPSJvdmVycmlkZSAvZXRjL2xvZ2luLmRlZnMgZGVmYXVsdHMiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbCIsICItLW5vLWxvZy1pbml0IiwgaGVscD0iZG8gbm90IGFkZCB0aGUgdXNlciB0byB0aGUgbGFzdGxvZyBhbmQgZmFpbGxvZyBkYXRhYmFzZXMiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbSIsICItLWNyZWF0ZS1ob21lIiwgaGVscD0iY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItTSIsICItLW5vLWNyZWF0ZS1ob21lIiwgaGVscD0iZG8gbm90IGNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLU4iLCAiLS1uby11c2VyLWdyb3VwIiwgaGVscD0iZG8gbm90IGNyZWF0ZSBhIGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdXNlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSB1c2VycyB3aXRoIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSBVSUQpIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wYXNzd29yZCIsIG1ldGF2YXI9IlBBU1NXT1JEIiwgaGVscD0iZW5jcnlwdGVkIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1SIiwgIi0tcm9vdCIsIG1ldGF2YXI9IkNIUk9PVF9ESVIiLCBoZWxwPSJkaXJlY3RvcnkgdG8gY2hyb290IGludG8iKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItciIsICItLXN5c3RlbSIsIGhlbHA9ImNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXMiLCAiLS1zaGVsbCIsIG1ldGF2YXI9IlNIRUxMIiwgaGVscD0ibG9naW4gc2hlbGwgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXUiLCAiLS11aWQiLCBtZXRhdmFyPSJVSUQiLCBoZWxwPSJ1c2VyIElEIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1VIiwgIi0tdXNlci1ncm91cCIsIGhlbHA9ImNyZWF0ZSBhIGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdXNlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIkxPR0lOIiwgaGVscD0iTG9naW4gbmFtZSBvZiB0aGUgbmV3IHVzZXIiKQorCisgICAgICAgICMgUmV0dXJuIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9uIGVpdGhlciB0aGUgZGVmYXVsdAorICAgICAgICAjIGZpbGVzL3Bhc3N3ZCBvciB0aGUgY29udGVudHMgb2YgVVNFUkFERF9VSURfVEFCTEVTCisgICAgICAgICMgcGF0aHMgYXJlIHJlc3VsdmVkIHZpYSBCQlBBVEgKKyAgICAgICAgZGVmIGdldF9wYXNzd2RfbGlzdChkKToKKyAgICAgICAgICAgIHN0ciA9ICIiCisgICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICAgICAgICAgIHBhc3N3ZF90YWJsZXMgPSBkLmdldFZhcignVVNFUkFERF9VSURfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXNzd2RfdGFibGVzOgorICAgICAgICAgICAgICAgIHBhc3N3ZF90YWJsZXMgPSAnZmlsZXMvcGFzc3dkJworICAgICAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBwYXNzd2RfdGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3RyICs9ICIgJXMiICUgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjb25mX2ZpbGUpCisgICAgICAgICAgICByZXR1cm4gc3RyCisKKyAgICAgICAgbmV3cGFyYW1zID0gW10KKyAgICAgICAgZm9yIHBhcmFtIGluIHJlLnNwbGl0KCcnJ1sgXHRdKjtbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbXMpOgorICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgcGFyYW06CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1YWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyZS5zcGxpdCgnJydbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbSkpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IFVuYWJsZSB0byBwYXJzZSBhcmd1bWVudHMgZm9yIFVTRVJBRERfUEFSQU1fJXM6ICclcyciICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIHBhcmFtKSkKKworICAgICAgICAgICAgIyBmaWxlcy9wYXNzd2Qgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfVUlEX1RBQkxFUworICAgICAgICAgICAgIyBVc2UgdGhlIHN0YW5kYXJkIHBhc3N3ZCBsYXlvdXQ6CisgICAgICAgICAgICAjICB1c2VybmFtZTpwYXNzd29yZDp1c2VyX2lkOmdyb3VwX2lkOmNvbW1lbnQ6aG9tZV9kaXJlY3Rvcnk6bG9naW5fc2hlbGwKKyAgICAgICAgICAgICMgKHdlIHdhbnQgdG8gcHJvY2VzcyBpbiByZXZlcnNlIG9yZGVyLCBhcyAnbGFzdCBmb3VuZCcgaW4gdGhlIGxpc3Qgd2lucykKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgYSBmaWVsZCBpcyBsZWZ0IGJsYW5rLCB0aGUgb3JpZ2luYWwgdmFsdWUgd2lsbCBiZSB1c2VkLiAgVGhlICd1c2VybmFtZScKKyAgICAgICAgICAgICMgZmllbGQgaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIE5vdGU6IHdlIGlnbm9yZSB0aGUgcGFzc3dvcmQgZmllbGQsIGFzIGluY2x1ZGluZyBldmVuIHRoZSBoYXNoZWQgcGFzc3dvcmQKKyAgICAgICAgICAgICMgaW4gdGhlIHVzZXJhZGQgY29tbWFuZCBtYXkgaW50cm9kdWNlIGEgc2VjdXJpdHkgaG9sZS4gIEl0J3MgYXNzdW1lZCB0aGF0CisgICAgICAgICAgICAjIGFsbCBuZXcgdXNlcnMgZ2V0IHRoZSBkZWZhdWx0ICgnKicgd2hpY2ggcHJldmVudHMgbG9naW4pIHVudGlsIHRoZSB1c2VyIGlzCisgICAgICAgICAgICAjIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGJ5IHRoZSBzeXN0ZW0gYWRtaW4uCisgICAgICAgICAgICBmb3IgY29uZiBpbiBnZXRfcGFzc3dkX2xpc3QoZCkuc3BsaXQoKVs6Oi0xXToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25mKToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oY29uZiwgInIiKQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5yc3RyaXAoKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZFswXSA9PSB1YWFyZ3MuTE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdWFhcmdzLnVpZCBhbmQgZmllbGRbMl0gYW5kICh1YWFyZ3MudWlkICE9IGZpZWxkWzJdKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IENoYW5naW5nIHVzZXJuYW1lICVzJ3MgdWlkIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCB1YWFyZ3MuTE9HSU4sIHVhYXJncy51aWQsIGZpZWxkWzJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MudWlkID0gW2ZpZWxkWzJdLCB1YWFyZ3MudWlkXVtub3QgZmllbGRbMl1dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERldGVybWluZSB0aGUgcG9zc2libGUgZ3JvdXBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVbmxlc3MgdGhlIGdyb3VwIG5hbWUgKG9yIGdpZCkgaXMgc3BlY2lmaWVkLCB3ZSBhc3N1bWUgdGhhdCB0aGUgTE9HSU4gaXMgdGhlIGdyb3VwbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ5IGRlZmF1bHQgdGhlIHN5c3RlbSBoYXMgY3JlYXRpb24gb2YgdGhlIG1hdGNoaW5nIGdyb3VwcyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTbyBpZiB0aGUgaW1wbGljaXQgdXNlcm5hbWUtZ3JvdXAgY3JlYXRpb24gaXMgb24sIHRoZW4gdGhlIGltcGxpY2l0IGdyb3VwbmFtZSAoTE9HSU4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpcyB1c2VkLCBhbmQgd2UgZGlzYWJsZSB0aGUgdXNlcl9ncm91cCBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5ncm91cG5hbWUgPSBbdWFhcmdzLmdpZCwgdWFhcmdzLkxPR0lOXVtub3QgdWFhcmdzLmdpZCBvciB1YWFyZ3MudXNlcl9ncm91cF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ3JvdXBpZCA9IFt1YWFyZ3MuZ2lkLCB1YWFyZ3MuZ3JvdXBuYW1lXVtub3QgdWFhcmdzLmdpZF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ3JvdXBpZCA9IFtmaWVsZFszXSwgdWFhcmdzLmdyb3VwaWRdW25vdCBmaWVsZFszXV0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB1YWFyZ3MuZ2lkIG9yIHVhYXJncy5naWQgIT0gdWFhcmdzLmdyb3VwaWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1YWFyZ3MuZ3JvdXBpZCBhbmQgdWFhcmdzLmdyb3VwaWQuaXNkaWdpdCgpKSBhbmQgKHVhYXJncy5ncm91cG5hbWUgYW5kIHVhYXJncy5ncm91cG5hbWUuaXNkaWdpdCgpKSBhbmQgKHVhYXJncy5ncm91cGlkICE9IHVhYXJncy5ncm91cG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSB3YW50IHRvIGFkZCBhIGdyb3VwLCBidXQgd2UgZG9uJ3Qga25vdyBpdCdzIG5hbWUuLi4gc28gd2UgY2FuJ3QgYWRkIHRoZSBncm91cC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHRvIGFzc3VtZSB0aGUgZ3JvdXAgaGFzIHByZXZpb3VzbHkgYmVlbiBhZGRlZCBvciB3ZSdsbCBmYWlsIG9uIHRoZSBhZGR1c2VyLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdGU6IHNwZWNpZnlpbmcgdGhlIGFjdHVhbCBnaWQgaXMgdmVyeSByYXJlIGluIE9FLCB1c3VhbGx5IHRoZSBncm91cCBuYW1lIGlzIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBDaGFuZ2luZyBnaWQgZm9yIGxvZ2luICVzIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCB1YWFyZ3MuTE9HSU4sIHVhYXJncy5ncm91cG5hbWUsIHVhYXJncy5naWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmICh1YWFyZ3MuZ3JvdXBpZCBhbmQgbm90IHVhYXJncy5ncm91cGlkLmlzZGlnaXQoKSkgYW5kIHVhYXJncy5ncm91cGlkID09IHVhYXJncy5ncm91cG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGhhdmUgYSBudW1iZXIsIHNvIHdlIGhhdmUgdG8gYWRkIGEgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFkZGluZyBncm91cCAlcyEiICUgKHVhYXJncy5ncm91cG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdpZCA9IHVhYXJncy5ncm91cGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MudXNlcl9ncm91cCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGFkZCA9IGQuZ2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9ICIlcyAlcyIgJSAoWycnLCAnIC0tc3lzdGVtJ11bdWFhcmdzLnN5c3RlbV0sIHVhYXJncy5ncm91cG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBncm91cGFkZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCAiJXMgOyAlcyIgJSAoZ3JvdXBhZGQsIG5ld2dyb3VwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgbmV3Z3JvdXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdWFhcmdzLmdyb3VwbmFtZSBhbmQgKHVhYXJncy5ncm91cGlkIGFuZCB1YWFyZ3MuZ3JvdXBpZC5pc2RpZ2l0KCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgZ3JvdXAgbmFtZSBhbmQgYSBncm91cCBudW1iZXIgdG8gYXNzaWduIGl0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiQWRkaW5nIGdyb3VwICVzICBnaWQgKCVzKSEiICUgKHVhYXJncy5ncm91cG5hbWUsIHVhYXJncy5ncm91cGlkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5naWQgPSB1YWFyZ3MuZ3JvdXBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVzZXJfZ3JvdXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBhZGQgPSBkLmdldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSAiLWcgJXMgJXMiICUgKHVhYXJncy5naWQsIHVhYXJncy5ncm91cG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBncm91cGFkZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCAiJXMgOyAlcyIgJSAoZ3JvdXBhZGQsIG5ld2dyb3VwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgbmV3Z3JvdXApCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuY29tbWVudCA9IFsiJyVzJyIgJSBmaWVsZFs0XSwgdWFhcmdzLmNvbW1lbnRdW25vdCBmaWVsZFs0XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuaG9tZV9kaXIgPSBbZmllbGRbNV0sIHVhYXJncy5ob21lX2Rpcl1bbm90IGZpZWxkWzVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5zaGVsbCA9IFtmaWVsZFs2XSwgdWFhcmdzLnNoZWxsXVtub3QgZmllbGRbNl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBTaG91bGQgYmUgYW4gZXJyb3IgaWYgYSBzcGVjaWZpYyBvcHRpb24gaXMgc2V0Li4uCisgICAgICAgICAgICBpZiBkLmdldFZhcignVVNFUkFERF9FUlJPUl9EWU5BTUlDJywgVHJ1ZSkgPT0gJzEnIGFuZCBub3QgKCh1YWFyZ3MudWlkIGFuZCB1YWFyZ3MudWlkLmlzZGlnaXQoKSkgYW5kIHVhYXJncy5naWQpOgorICAgICAgICAgICAgICAgICNiYi5lcnJvcigiU2tpcHBpbmcgcmVjaXBlICVzLCBwYWNrYWdlICVzIHdoaWNoIGFkZHMgdXNlcm5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyB1aWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCAgcGtnLCB1YWFyZ3MuTE9HSU4pKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gJXM6IFVzZXJuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgdWlkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCB1YWFyZ3MuTE9HSU4pKQorCisgICAgICAgICAgICAjIFJlY29uc3RydWN0IHRoZSBhcmdzLi4uCisgICAgICAgICAgICBuZXdwYXJhbSAgPSBbJycsICcgLS1kZWZhdWx0cyddW3VhYXJncy5kZWZhdWx0c10KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWJhc2UtZGlyICVzJyAlIHVhYXJncy5iYXNlX2Rpcl1bdWFhcmdzLmJhc2VfZGlyICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1jb21tZW50ICVzJyAlIHVhYXJncy5jb21tZW50XVt1YWFyZ3MuY29tbWVudCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0taG9tZS1kaXIgJXMnICUgdWFhcmdzLmhvbWVfZGlyXVt1YWFyZ3MuaG9tZV9kaXIgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWV4cGlyZWRhdGEgJXMnICUgdWFhcmdzLmV4cGlyZWRhdGVdW3VhYXJncy5leHBpcmVkYXRlICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1pbmFjdGl2ZSAlcycgJSB1YWFyZ3MuaW5hY3RpdmVdW3VhYXJncy5pbmFjdGl2ZSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tZ2lkICVzJyAlIHVhYXJncy5naWRdW3VhYXJncy5naWQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdyb3VwcyAlcycgJSB1YWFyZ3MuZ3JvdXBzXVt1YWFyZ3MuZ3JvdXBzICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1za2VsICVzJyAlIHVhYXJncy5za2VsXVt1YWFyZ3Muc2tlbCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0ta2V5ICVzJyAlIHVhYXJncy5rZXldW3VhYXJncy5rZXkgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vLWxvZy1pbml0J11bdWFhcmdzLm5vX2xvZ19pbml0XQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tY3JlYXRlLWhvbWUnXVt1YWFyZ3MuY3JlYXRlX2hvbWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby1jcmVhdGUtaG9tZSddW3VhYXJncy5ub19jcmVhdGVfaG9tZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vLXVzZXItZ3JvdXAnXVt1YWFyZ3Mubm9fdXNlcl9ncm91cF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vbi11bmlxdWUnXVt1YWFyZ3Mubm9uX3VuaXF1ZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXBhc3N3b3JkICVzJyAlIHVhYXJncy5wYXNzd29yZF1bdWFhcmdzLnBhc3N3b3JkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1yb290ICVzJyAlIHVhYXJncy5yb290XVt1YWFyZ3Mucm9vdCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tc3lzdGVtJ11bdWFhcmdzLnN5c3RlbV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXNoZWxsICVzJyAlIHVhYXJncy5zaGVsbF1bdWFhcmdzLnNoZWxsICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS11aWQgJXMnICUgdWFhcmdzLnVpZF1bdWFhcmdzLnVpZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tdXNlci1ncm91cCddW3VhYXJncy51c2VyX2dyb3VwXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gJyAlcycgJSB1YWFyZ3MuTE9HSU4KKworICAgICAgICAgICAgbmV3cGFyYW1zLmFwcGVuZChuZXdwYXJhbSkKKworICAgICAgICByZXR1cm4gIiA7Ii5qb2luKG5ld3BhcmFtcykuc3RyaXAoKQorCisgICAgIyBXZSBwYXJzZSBhbmQgcmV3cml0ZSB0aGUgZ3JvdXBhZGQgY29tcG9uZW50cworICAgIGRlZiByZXdyaXRlX2dyb3VwYWRkKHBhcmFtcyk6CisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb21lcyBmcm9tIC0taGVscCBvbiBncm91cGFkZCBmcm9tIHNoYWRvdworICAgICAgICBwYXJzZXIgPSBteUFyZ3VtZW50UGFyc2VyKHByb2c9J2dyb3VwYWRkJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWYiLCAiLS1mb3JjZSIsIGhlbHA9ImV4aXQgc3VjY2Vzc2Z1bGx5IGlmIHRoZSBncm91cCBhbHJlYWR5IGV4aXN0cywgYW5kIGNhbmNlbCAtZyBpZiB0aGUgR0lEIGlzIGFscmVhZHkgdXNlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR0lEIiwgaGVscD0idXNlIEdJRCBmb3IgdGhlIG5ldyBncm91cCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1LIiwgIi0ta2V5IiwgbWV0YXZhcj0iS0VZPVZBTFVFIiwgaGVscD0ib3ZlcnJpZGUgL2V0Yy9sb2dpbi5kZWZzIGRlZmF1bHRzIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1ub24tdW5pcXVlIiwgaGVscD0iYWxsb3cgdG8gY3JlYXRlIGdyb3VwcyB3aXRoIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSkgR0lEIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wYXNzd29yZCIsIG1ldGF2YXI9IlBBU1NXT1JEIiwgaGVscD0idXNlIHRoaXMgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV3IGdyb3VwIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVIiLCAiLS1yb290IiwgbWV0YXZhcj0iQ0hST09UX0RJUiIsIGhlbHA9ImRpcmVjdG9yeSB0byBjaHJvb3QgaW50byIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1yIiwgIi0tc3lzdGVtIiwgaGVscD0iY3JlYXRlIGEgc3lzdGVtIGFjY291bnQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJHUk9VUCIsIGhlbHA9Ikdyb3VwIG5hbWUgb2YgdGhlIG5ldyBncm91cCIpCisKKyAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0CisgICAgICAgICMgZmlsZXMvZ3JvdXAgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfR0lEX1RBQkxFUworICAgICAgICAjIHBhdGhzIGFyZSByZXN1bHZlZCB2aWEgQkJQQVRICisgICAgICAgIGRlZiBnZXRfZ3JvdXBfbGlzdChkKToKKyAgICAgICAgICAgIHN0ciA9ICIiCisgICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICAgICAgICAgIGdyb3VwX3RhYmxlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX0dJRF9UQUJMRVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IGdyb3VwX3RhYmxlczoKKyAgICAgICAgICAgICAgICBncm91cF90YWJsZXMgPSAnZmlsZXMvZ3JvdXAnCisgICAgICAgICAgICBmb3IgY29uZl9maWxlIGluIGdyb3VwX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQorICAgICAgICAgICAgcmV0dXJuIHN0cgorCisgICAgICAgIG5ld3BhcmFtcyA9IFtdCisgICAgICAgIGZvciBwYXJhbSBpbiByZS5zcGxpdCgnJydbIFx0XSo7WyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW1zKToKKyAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSBwcm9jZXNzaW5nIG11bHRpcGxlIGxpbmVzLCB3ZSBjb3VsZCBoYXZlIGxlZnQgb3ZlciB2YWx1ZXMgaGVyZS4uLgorICAgICAgICAgICAgICAgIGdhYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJlLnNwbGl0KCcnJ1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtKSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlczogVW5hYmxlIHRvIHBhcnNlIGFyZ3VtZW50cyBmb3IgR1JPVVBBRERfUEFSQU1fJXM6ICclcyciICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIHBhcmFtKSkKKworICAgICAgICAgICAgIyBOZWVkIHRvIGl0ZXJhdGUgb3ZlciBsYXllcnMgYW5kIG9wZW4gdGhlIHJpZ2h0IGZpbGUocykKKyAgICAgICAgICAgICMgVXNlIHRoZSBzdGFuZGFyZCBncm91cCBsYXlvdXQ6CisgICAgICAgICAgICAjICBncm91cG5hbWU6cGFzc3dvcmQ6Z3JvdXBfaWQ6Z3JvdXBfbWVtYmVycworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJZiBhIGZpZWxkIGlzIGxlZnQgYmxhbmssIHRoZSBvcmlnaW5hbCB2YWx1ZSB3aWxsIGJlIHVzZWQuIFRoZSAnZ3JvdXBuYW1lJyBmaWVsZAorICAgICAgICAgICAgIyBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTm90ZTogc2ltaWxhciB0byB0aGUgcGFzc3dkIGZpbGUsIHRoZSAncGFzc3dvcmQnIGZpbGVkIGlzIGlnbm9yZWQKKyAgICAgICAgICAgICMgTm90ZTogZ3JvdXBfbWVtYmVycyBpcyBpZ25vcmVkLCBncm91cCBtZW1iZXJzIG11c3QgYmUgY29uZmlndXJlZCB3aXRoIHRoZSBHUk9VUE1FTVNfUEFSQU0KKyAgICAgICAgICAgIGZvciBjb25mIGluIGdldF9ncm91cF9saXN0KGQpLnNwbGl0KClbOjotMV06CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYsICJyIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUucnN0cmlwKCkuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRbMF0gPT0gZ2FhcmdzLkdST1VQIGFuZCBmaWVsZFsyXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBnYWFyZ3MuZ2lkIGFuZCAoZ2FhcmdzLmdpZCAhPSBmaWVsZFsyXSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBDaGFuZ2luZyBncm91cG5hbWUgJXMncyBnaWQgZnJvbSAoJXMpIHRvICglcyksIHZlcmlmeSBjb25maWd1cmF0aW9uIGZpbGVzISIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGdhYXJncy5HUk9VUCwgZ2FhcmdzLmdpZCwgZmllbGRbMl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhYXJncy5naWQgPSBmaWVsZFsyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdVU0VSQUREX0VSUk9SX0RZTkFNSUMnLCBUcnVlKSA9PSAnMScgYW5kIG5vdCAoZ2FhcmdzLmdpZCBhbmQgZ2FhcmdzLmdpZC5pc2RpZ2l0KCkpOgorICAgICAgICAgICAgICAgICNiYi5lcnJvcigiU2tpcHBpbmcgcmVjaXBlICVzLCBwYWNrYWdlICVzIHdoaWNoIGFkZHMgZ3JvdXBuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgZ2lkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgIHBrZywgZ2FhcmdzLkdST1VQKSkKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtICVzOiBHcm91cG5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyBnaWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIGdhYXJncy5HUk9VUCkpCisKKyAgICAgICAgICAgICMgUmVjb25zdHJ1Y3QgdGhlIGFyZ3MuLi4KKyAgICAgICAgICAgIG5ld3BhcmFtICA9IFsnJywgJyAtLWZvcmNlJ11bZ2FhcmdzLmZvcmNlXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tZ2lkICVzJyAlIGdhYXJncy5naWRdW2dhYXJncy5naWQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWtleSAlcycgJSBnYWFyZ3Mua2V5XVtnYWFyZ3Mua2V5ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ub24tdW5pcXVlJ11bZ2FhcmdzLm5vbl91bmlxdWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1wYXNzd29yZCAlcycgJSBnYWFyZ3MucGFzc3dvcmRdW2dhYXJncy5wYXNzd29yZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcm9vdCAlcycgJSBnYWFyZ3Mucm9vdF1bZ2FhcmdzLnJvb3QgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXN5c3RlbSddW2dhYXJncy5zeXN0ZW1dCisgICAgICAgICAgICBuZXdwYXJhbSArPSAnICVzJyAlIGdhYXJncy5HUk9VUAorCisgICAgICAgICAgICBuZXdwYXJhbXMuYXBwZW5kKG5ld3BhcmFtKQorCisgICAgICAgIHJldHVybiAiIDsiLmpvaW4obmV3cGFyYW1zKS5zdHJpcCgpCisKKyAgICAjIExvYWQgYW5kIHByb2Nlc3MgdGhlIHVzZXJzIGFuZCBncm91cHMsIHJld3JpdGluZyB0aGUgYWRkdXNlci9hZGRncm91cCBwYXJhbXMKKyAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICMgR3JvdXBtZW1zIGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB3ZSBtaWdodCB3YW50IHRvIGNoYW5nZSwgc28gc2ltcGx5IHZhbGlkYXRpbmcKKyAgICAgICAgIyBpcyBhIGJpdCBvZiBhIHdhc3RlIC0tIG9ubHkgcHJvY2VzcyB1c2VyYWRkL2dyb3VwYWRkCisgICAgICAgIHVzZXJhZGRfcGFyYW0gPSBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIHVzZXJhZGRfcGFyYW06CisgICAgICAgICAgICAjYmIud2FybigiQmVmb3JlOiAnVVNFUkFERF9QQVJBTV8lcycgLSAnJXMnIiAlIChwa2csIHVzZXJhZGRfcGFyYW0pKQorICAgICAgICAgICAgZC5zZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCByZXdyaXRlX3VzZXJhZGQodXNlcmFkZF9wYXJhbSkpCisgICAgICAgICAgICAjYmIud2FybigiQWZ0ZXI6ICAnVVNFUkFERF9QQVJBTV8lcycgLSAnJXMnIiAlIChwa2csIGQuZ2V0VmFyKCdVU0VSQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkpKQorCisgICAgICAgIGdyb3VwYWRkX3BhcmFtID0gZC5nZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgZ3JvdXBhZGRfcGFyYW06CisgICAgICAgICAgICAjYmIud2FybigiQmVmb3JlOiAnR1JPVVBBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBncm91cGFkZF9wYXJhbSkpCisgICAgICAgICAgICBkLnNldFZhcignR1JPVVBBRERfUEFSQU1fJXMnICUgcGtnLCByZXdyaXRlX2dyb3VwYWRkKGdyb3VwYWRkX3BhcmFtKSkKKyAgICAgICAgICAgICNiYi53YXJuKCJBZnRlcjogICdHUk9VUEFERF9QQVJBTV8lcycgLSAnJXMnIiAlIChwa2csIGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpKSkKKworCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB1cGRhdGVfdXNlcmFkZF9zdGF0aWNfY29uZmlnKGQpCisgICAgICAgIGV4Y2VwdCBiYi5idWlsZC5GdW5jRmFpbGVkIGFzIGY6CisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiU2tpcHBpbmcgcmVjaXBlICVzOiAlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGYpKQorICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoZikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzdlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCkBAIC0wLDAgKzEsMjIzIEBACitpbmhlcml0IHVzZXJhZGRfYmFzZQorCisjIGJhc2UtcGFzc3dkLWNyb3NzIHByb3ZpZGVzIHRoZSBkZWZhdWx0IHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgaW4gdGhlCisjIHRhcmdldCBzeXNyb290LCBhbmQgc2hhZG93IC1uYXRpdmUgYW5kIC1zeXNyb290IHByb3ZpZGUgdGhlIHV0aWxpdGllcworIyBhbmQgc3VwcG9ydCBmaWxlcyBuZWVkZWQgdG8gYWRkIGFuZCBtb2RpZnkgdXNlciBhbmQgZ3JvdXAgYWNjb3VudHMKK0RFUEVORFNfYXBwZW5kID0gIiR7VVNFUkFERERFUEVORFN9IgorVVNFUkFERERFUEVORFMgPSAiIGJhc2UtZmlsZXMgc2hhZG93LW5hdGl2ZSBzaGFkb3ctc3lzcm9vdCBzaGFkb3ciCitVU0VSQUREREVQRU5EU19jbGFzcy1jcm9zcyA9ICIiCitVU0VSQUREREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorVVNFUkFERERFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworIyBUaGlzIHByZWluc3RhbGwgZnVuY3Rpb24gY2FuIGJlIHJ1biBpbiBmb3VyIGRpZmZlcmVudCBjb250ZXh0czoKKyMKKyMgYSkgQmVmb3JlIGRvX2luc3RhbGwKKyMgYikgQXQgZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSB3aGVuIGluc3RhbGxpbmcgZnJvbSBzc3RhdGUgcGFja2FnZXMKKyMgYykgQXMgdGhlIHByZWluc3Qgc2NyaXB0IGluIHRoZSB0YXJnZXQgcGFja2FnZSBhdCBkb19yb290ZnMgdGltZQorIyBkKSBBcyB0aGUgcHJlaW5zdCBzY3JpcHQgaW4gdGhlIHRhcmdldCBwYWNrYWdlIG9uIGRldmljZSBhcyBhIHBhY2thZ2UgdXBncmFkZQorIwordXNlcmFkZF9wcmVpbnN0ICgpIHsKK09QVD0iIgorU1lTUk9PVD0iIgorCitpZiB0ZXN0ICJ4JEQiICE9ICJ4IjsgdGhlbgorCSMgSW5zdGFsbGluZyBpbnRvIGEgc3lzcm9vdAorCVNZU1JPT1Q9IiREIgorCU9QVD0iLS1yb290ICREIgorCisJIyBNYWtlIHN1cmUgbG9naW4uZGVmcyBpcyB0aGVyZSwgdGhpcyBpcyB0byBtYWtlIGRlYmlhbiBwYWNrYWdlIGJhY2tlbmQgd29yaworCSMgY29ycmVjdGx5IHdoaWxlIGRvaW5nIHJvb3Rmcy4KKwkjIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiAvZXRjL2xvZ2luLmRlZnMgaXMgdHJlYXRlZCBhcyBhIGNvbmZpZyBmaWxlIGZvcgorCSMgc2hhZG93IHBhY2thZ2UsIHRoZW4gd2hpbGUgcGVyZm9ybWluZyBwcmVpbnN0cyBmb3IgcGFja2FnZXMgdGhhdCBkZXBlbmQgb24KKwkjIHNoYWRvdywgdGhlcmUgbWlnaHQgb25seSBiZSAvZXRjL2xvZ2luLmRlZi5kcGtnLW5ldyB0aGVyZSBpbiByb290IGZpbGVzeXN0ZW0uCisJaWYgWyAhIC1lICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzIC1hIC1lICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzLmRwa2ctbmV3IF07IHRoZW4KKwkgICAgY3AgJEQke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMuZHBrZy1uZXcgJEQke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlmaQorCisJIyB1c2VyL2dyb3VwIGxvb2t1cHMgc2hvdWxkIG1hdGNoIHVzZXJhZGQvZ3JvdXBhZGQgLS1yb290CisJZXhwb3J0IFBTRVVET19QQVNTV0Q9IiRTWVNST09UOiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK2ZpCisKKyMgSWYgd2UncmUgbm90IGRvaW5nIGEgc3BlY2lhbCBTU1RBVEUvU1lTUk9PVCBpbnN0YWxsCisjIHRoZW4gc2V0IHRoZSB2YWx1ZXMsIG90aGVyd2lzZSB1c2UgdGhlIGVudmlyb25tZW50CitpZiB0ZXN0ICJ4JFVBX1NZU1JPT1QiID0gIngiOyB0aGVuCisJIyBJbnN0YWxsaW5nIG9udG8gYSB0YXJnZXQKKwkjIEFkZCBncm91cHMgYW5kIHVzZXJzIGRlZmluZWQgb25seSBmb3IgdGhpcyBwYWNrYWdlCisJR1JPVVBBRERfUEFSQU09IiR7R1JPVVBBRERfUEFSQU19IgorCVVTRVJBRERfUEFSQU09IiR7VVNFUkFERF9QQVJBTX0iCisJR1JPVVBNRU1TX1BBUkFNPSIke0dST1VQTUVNU19QQVJBTX0iCitmaQorCisjIFBlcmZvcm0gZ3JvdXAgYWRkaXRpb25zIGZpcnN0LCBzaW5jZSB1c2VyIGFkZGl0aW9ucyBtYXkgZGVwZW5kCisjIG9uIHRoZXNlIGdyb3VwcyBleGlzdGluZworaWYgdGVzdCAieCRHUk9VUEFERF9QQVJBTSIgIT0gIngiOyB0aGVuCisJZWNobyAiUnVubmluZyBncm91cGFkZCBjb21tYW5kcy4uLiIKKwkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZ3JvdXBhZGQgZm9yIHBhcmFtZXRlciBsaXN0cworCSMgc2VwYXJhdGVkIGJ5ICc7JworCW9wdHM9YGVjaG8gIiRHUk9VUEFERF9QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDFgCisJcmVtYWluaW5nPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KKwkJcGVyZm9ybV9ncm91cGFkZCAiJFNZU1JPT1QiICIkT1BUICRvcHRzIiAxMAorCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCWRvbmUKK2ZpIAorCitpZiB0ZXN0ICJ4JFVTRVJBRERfUEFSQU0iICE9ICJ4IjsgdGhlbgorCWVjaG8gIlJ1bm5pbmcgdXNlcmFkZCBjb21tYW5kcy4uLiIKKwkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdXNlcmFkZCBmb3IgcGFyYW1ldGVyIGxpc3RzCisJIyBzZXBhcmF0ZWQgYnkgJzsnCisJb3B0cz1gZWNobyAiJFVTRVJBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAorCXJlbWFpbmluZz1gZWNobyAiJFVTRVJBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KKwkJcGVyZm9ybV91c2VyYWRkICIkU1lTUk9PVCIgIiRPUFQgJG9wdHMiIDEwCisJCWlmIHRlc3QgIngkb3B0cyIgPSAieCRyZW1haW5pbmciOyB0aGVuCisJCQlicmVhaworCQlmaQorCQlvcHRzPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMWAKKwkJcmVtYWluaW5nPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJZG9uZQorZmkKKworaWYgdGVzdCAieCRHUk9VUE1FTVNfUEFSQU0iICE9ICJ4IjsgdGhlbgorCWVjaG8gIlJ1bm5pbmcgZ3JvdXBtZW1zIGNvbW1hbmRzLi4uIgorCSMgSW52b2tlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBncm91cG1lbXMgZm9yIHBhcmFtZXRlciBsaXN0cworCSMgc2VwYXJhdGVkIGJ5ICc7JworCW9wdHM9YGVjaG8gIiRHUk9VUE1FTVNfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAorCXJlbWFpbmluZz1gZWNobyAiJEdST1VQTUVNU19QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDItYAorCXdoaWxlIHRlc3QgIngkb3B0cyIgIT0gIngiOyBkbworCQlwZXJmb3JtX2dyb3VwbWVtcyAiJFNZU1JPT1QiICIkT1BUICRvcHRzIiAxMAorCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCWRvbmUKK2ZpCit9CisKK3VzZXJhZGRfc3lzcm9vdCAoKSB7CisJIyBQc2V1ZG8gbWF5IChkb19pbnN0YWxsKSBvciBtYXkgbm90IChkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lKSBiZSBydW5uaW5nIAorCSMgYXQgdGhpcyBwb2ludCBzbyB3ZSdyZSBleHBsaWNpdCBhYm91dCB0aGUgZW52aXJvbm1lbnQgc28gcHNldWRvIGNhbiBsb2FkIGlmIAorCSMgbm90IGFscmVhZHkgcHJlc2VudC4KKwlleHBvcnQgUFNFVURPPSIke0ZBS0VST09URU5WfSBQU0VVRE9fTE9DQUxTVEFURURJUj0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xvY2Fsc3RhdGVkaXJ9L3BzZXVkbyAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcn0vcHNldWRvIgorCisJIyBFeHBsaWNpdGx5IHNldCAkRCBzaW5jZSBpdCBpc24ndCBzZXQgdG8gYW55dGhpbmcKKwkjIGJlZm9yZSBkb19pbnN0YWxsCisJRD0ke1NUQUdJTkdfRElSX1RBUkdFVH0KKworCSMgQWRkIGdyb3VwcyBhbmQgdXNlcnMgZGVmaW5lZCBmb3IgYWxsIHJlY2lwZSBwYWNrYWdlcworCUdST1VQQUREX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ2dyb3VwYWRkJyl9IgorCVVTRVJBRERfUEFSQU09IiR7QGdldF9hbGxfY21kX3BhcmFtcyhkLCAndXNlcmFkZCcpfSIKKwlHUk9VUE1FTVNfUEFSQU09IiR7QGdldF9hbGxfY21kX3BhcmFtcyhkLCAnZ3JvdXBtZW1zJyl9IgorCisJIyBUZWxsIHRoZSBzeXN0ZW0gdG8gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJzCisJVUFfU1lTUk9PVD0xCisKKwl1c2VyYWRkX3ByZWluc3QKK30KKwordXNlcmFkZF9zeXNyb290X3NzdGF0ZSAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBhY2thZ2Vfc2V0c2NlbmUiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJdXNlcmFkZF9zeXNyb290CisJZmkKK30KKworZG9faW5zdGFsbFtwcmVmdW5jc10gKz0gIiR7U1lTUk9PVEZVTkN9IgorU1lTUk9PVEZVTkMgPSAidXNlcmFkZF9zeXNyb290IgorU1lTUk9PVEZVTkNfY2xhc3MtY3Jvc3MgPSAiIgorU1lTUk9PVEZVTkNfY2xhc3MtbmF0aXZlID0gIiIKK1NZU1JPT1RGVU5DX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitTU1RBVEVQUkVJTlNURlVOQ1MgKz0gIiR7U1lTUk9PVFBPU1RGVU5DfSIKK1NZU1JPT1RQT1NURlVOQyA9ICJ1c2VyYWRkX3N5c3Jvb3Rfc3N0YXRlIgorU1lTUk9PVFBPU1RGVU5DX2NsYXNzLWNyb3NzID0gIiIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1uYXRpdmUgPSAiIgorU1lTUk9PVFBPU1RGVU5DX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1VTRVJBRERTRVRTQ0VORURFUFMgPSAiJHtNTFBSRUZJWH1iYXNlLXBhc3N3ZDpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIHBzZXVkby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBzaGFkb3ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgJHtNTFBSRUZJWH1zaGFkb3ctc3lzcm9vdDpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1jcm9zcyA9ICIiCitVU0VSQUREU0VUU0NFTkVERVBTX2NsYXNzLW5hdGl2ZSA9ICIiCitVU0VSQUREU0VUU0NFTkVERVBTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitkb19wYWNrYWdlX3NldHNjZW5lW2RlcGVuZHNdICs9ICIke1VTRVJBRERTRVRTQ0VORURFUFN9IgorZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZVtkZXBlbmRzXSArPSAiJHtVU0VSQUREU0VUU0NFTkVERVBTfSIKKworIyBSZWNpcGUgcGFyc2UtdGltZSBzYW5pdHkgY2hlY2tzCitkZWYgdXBkYXRlX3VzZXJhZGRfYWZ0ZXJfcGFyc2UoZCk6CisgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgIGlmIG5vdCB1c2VyYWRkX3BhY2thZ2VzOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1c2VyYWRkIGJ1dCBkb2Vzbid0IHNldCBVU0VSQUREX1BBQ0tBR0VTIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQorCisgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpIGFuZCBub3QgZC5nZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkgYW5kIG5vdCBkLmdldFZhcignR1JPVVBNRU1TX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgaW5oZXJpdHMgdXNlcmFkZCBidXQgZG9lc24ndCBzZXQgVVNFUkFERF9QQVJBTSwgR1JPVVBBRERfUEFSQU0gb3IgR1JPVVBNRU1TX1BBUkFNIGZvciBwYWNrYWdlICVzIiAlIChkLmdldFZhcignRklMRScsIEZhbHNlKSwgcGtnKSkKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHVwZGF0ZV91c2VyYWRkX2FmdGVyX3BhcnNlKGQpCit9CisKKyMgUmV0dXJuIGEgc2luZ2xlIFtHUk9VUHxVU0VSXUFERF9QQVJBTSBmb3JtYXR0ZWQgc3RyaW5nIHdoaWNoIGluY2x1ZGVzIHRoZQorIyBbZ3JvdXB8dXNlcl1hZGQgcGFyYW1ldGVycyBmb3IgYWxsIFVTRVJBRERfUEFDS0FHRVMgaW4gdGhpcyByZWNpcGUKK2RlZiBnZXRfYWxsX2NtZF9wYXJhbXMoZCwgY21kX3R5cGUpOgorICAgIGltcG9ydCBzdHJpbmcKKyAgICAKKyAgICBwYXJhbV90eXBlID0gY21kX3R5cGUudXBwZXIoKSArICJfUEFSQU1fJXMiCisgICAgcGFyYW1zID0gW10KKworICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpIG9yICIiCisgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBhcmFtID0gZC5nZXRWYXIocGFyYW1fdHlwZSAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcGFyYW06CisgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKHBhcmFtKQorCisgICAgcmV0dXJuICI7ICIuam9pbihwYXJhbXMpCisKKyMgQWRkcyB0aGUgcHJlaW5zdCBzY3JpcHQgaW50byBnZW5lcmF0ZWQgcGFja2FnZXMKK2Zha2Vyb290IHB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkZWYgdXBkYXRlX3VzZXJhZGRfcGFja2FnZShwa2cpOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIHVzZXIvZ3JvdXAgY2FsbHMgdG8gcHJlaW5zdCBmb3IgJXMnICUgcGtnKQorCisgICAgICAgICIiIgorICAgICAgICB1c2VyYWRkIHByZWluc3QgaXMgYXBwZW5kZWQgaGVyZSBiZWNhdXNlIHBrZ19wcmVpbnN0IG1heSBiZQorICAgICAgICByZXF1aXJlZCB0byBleGVjdXRlIG9uIHRoZSB0YXJnZXQuIE5vdCBkb2luZyBzbyBtYXkgY2F1c2UKKyAgICAgICAgdXNlcmFkZCBwcmVpbnN0IHRvIGJlIGludm9rZWQgdHdpY2UsIGNhdXNpbmcgdW53YW50ZWQgd2FybmluZ3MuCisgICAgICAgICIiIgorICAgICAgICBwcmVpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wcmVpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wcmVpbnN0JywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZWluc3Q6CisgICAgICAgICAgICBwcmVpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwcmVpbnN0ICs9ICdiYm5vdGUgKCkge1xuXHRlY2hvICJOT1RFOiAkKiJcbn1cbicKKyAgICAgICAgcHJlaW5zdCArPSAnYmJ3YXJuICgpIHtcblx0ZWNobyAiV0FSTklORzogJCoiXG59XG4nCisgICAgICAgIHByZWluc3QgKz0gJ2JiZmF0YWwgKCkge1xuXHRlY2hvICJFUlJPUjogJCoiXG5cdGV4aXQgMVxufVxuJworICAgICAgICBwcmVpbnN0ICs9ICdwZXJmb3JtX2dyb3VwYWRkICgpIHtcbiVzfVxuJyAlIGQuZ2V0VmFyKCdwZXJmb3JtX2dyb3VwYWRkJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV91c2VyYWRkICgpIHtcbiVzfVxuJyAlIGQuZ2V0VmFyKCdwZXJmb3JtX3VzZXJhZGQnLCBUcnVlKQorICAgICAgICBwcmVpbnN0ICs9ICdwZXJmb3JtX2dyb3VwbWVtcyAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV9ncm91cG1lbXMnLCBUcnVlKQorICAgICAgICBwcmVpbnN0ICs9IGQuZ2V0VmFyKCd1c2VyYWRkX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBwcmVpbnN0KQorCisgICAgICAgICMgUkRFUEVORFMgc2V0dXAKKyAgICAgICAgcmRlcGVuZHMgPSBkLmdldFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICByZGVwZW5kcyArPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnYmFzZS1wYXNzd2QnCisgICAgICAgIHJkZXBlbmRzICs9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdzaGFkb3cnCisgICAgICAgICMgYmFzZS1maWxlcyBpcyB3aGVyZSB0aGUgZGVmYXVsdCAvZXRjL3NrZWwgaXMgcGFja2FnZWQKKyAgICAgICAgcmRlcGVuZHMgKz0gJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ2Jhc2UtZmlsZXMnCisgICAgICAgIGQuc2V0VmFyKCJSREVQRU5EU18lcyIgJSBwa2csIHJkZXBlbmRzKQorCisgICAgIyBBZGQgdGhlIHVzZXIvZ3JvdXAgcHJlaW5zdGFsbCBzY3JpcHRzIGFuZCBSREVQRU5EUyByZXF1aXJlbWVudHMKKyAgICAjIHRvIHBhY2thZ2VzIHNwZWNpZmllZCBieSBVU0VSQUREX1BBQ0tBR0VTCisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIFwKKyAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICB1cGRhdGVfdXNlcmFkZF9wYWNrYWdlKHBrZykKK30KKworIyBVc2UgdGhlIGZvbGxvd2luZyB0byBleHRlbmQgdGhlIHVzZXJhZGQgd2l0aCBjdXN0b20gZnVuY3Rpb25zCitVU0VSQURERVhURU5TSU9OID89ICIiCisKK2luaGVyaXQgJHtVU0VSQURERVhURU5TSU9OfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXNlcmFkZF9iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyMzAgQEAKKyMgVGhpcyBiYmNsYXNzIHByb3ZpZGVzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgZm9yIHVzZXIvZ3JvdXAgc2V0dGluZ3MuCisjIFRoaXMgYmJjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBpbmhlcml0ZWQgYnkgdXNlcmFkZC5iYmNsYXNzIGFuZAorIyBleHRyYXVzZXJzLmJiY2xhc3MuCisKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYmFzaWNhbGx5IGhhdmUgc2ltaWxhciBsb2dpYy4KKyMgKikgUGVyZm9ybSBuZWNlc3NhcnkgY2hlY2tzIGJlZm9yZSBpbnZva2luZyB0aGUgYWN0dWFsIGNvbW1hbmQKKyMgKikgSW52b2tlIHRoZSBhY3R1YWwgY29tbWFuZCwgbWFrZSByZXRyaWVzIGlmIG5lY2Vzc2FyeQorIyAqKSBFcnJvciBvdXQgaWYgYW4gZXJyb3Igb2NjdXJzLgorCisjIE5vdGUgdGhhdCBiZWZvcmUgaW52b2tpbmcgdGhlc2UgZnVuY3Rpb25zLCBtYWtlIHN1cmUgdGhlIGdsb2JhbCB2YXJpYWJsZQorIyBQU0VVRE8gaXMgc2V0IHVwIGNvcnJlY3RseS4KKworcGVyZm9ybV9ncm91cGFkZCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyBncm91cGFkZCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCBncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwYWRkICRvcHRzIHx8IHRydWUKKwkJCWdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCQkJaWYgdGVzdCAieCRncm91cF9leGlzdHMiID0gIngiOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBhZGQgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkJZWxzZQorCQkJCWJyZWFrCisJCQlmaQorCQkJY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJCWlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyBncm91cGFkZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYm5vdGUgIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGFscmVhZHkgZXhpc3RzLCBub3QgcmUtY3JlYXRpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV91c2VyYWRkICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIHVzZXJhZGQgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCWlmIHRlc3QgIngkdXNlcl9leGlzdHMiID0gIngiOyB0aGVuCisJICAgICAgIGxvY2FsIGNvdW50PTAKKwkgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKwkJICAgICAgIGV2YWwgJFBTRVVETyB1c2VyYWRkICRvcHRzIHx8IHRydWUKKwkJICAgICAgIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJCSAgICAgICBpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJICAgICAgIGJid2FybiAiJHtQTn06IHVzZXJhZGQgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkgICAgICAgZWxzZQorCQkJICAgICAgIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJICAgICAgIGlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyB1c2VyYWRkIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCSAgICAgICBmaQorCQkgICAgICAgc2xlZXAgJGNvdW50CisJICAgICAgIGRvbmUKKwllbHNlCisJCWJibm90ZSAiJHtQTn06IHVzZXIgJHVzZXJuYW1lIGFscmVhZHkgZXhpc3RzLCBub3QgcmUtY3JlYXRpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV9ncm91cG1lbXMgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBtZW1zIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgZm9yIChpID0gMTsgaSA8IE5GOyBpKyspIGlmICgkaSA9PSAiLWciIHx8ICRpID09ICItLWdyb3VwIikgcHJpbnQgJChpKzEpIH0nYAorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgZm9yIChpID0gMTsgaSA8IE5GOyBpKyspIGlmICgkaSA9PSAiLWEiIHx8ICRpID09ICItLWFkZCIpIHByaW50ICQoaSsxKSB9J2AKKwliYm5vdGUgIiR7UE59OiBSdW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kIHdpdGggZ3JvdXAgJGdyb3VwbmFtZSBhbmQgdXNlciAkdXNlcm5hbWUiCisJIyBncm91cG1lbXMgZmFpbHMgaWYgL2V0Yy9nc2hhZG93IGRvZXMgbm90IGV4aXN0CisJbG9jYWwgZ3NoYWRvdz0iIgorCWlmIFsgLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cgXTsgdGhlbgorCQlnc2hhZG93PSJ5ZXMiCisJZWxzZQorCQlnc2hhZG93PSJubyIKKwkJdG91Y2ggJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cKKwlmaQorCWxvY2FsIG1lbV9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZTpbXjpdKjpbXjpdKjpcKFteLF0qLFwpKiR1c2VybmFtZVwoLFteLF0qXCkqIiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRtZW1fZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBtZW1zICRvcHRzIHx8IHRydWUKKwkJCW1lbV9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZTpbXjpdKjpbXjpdKjpcKFteLF0qLFwpKiR1c2VybmFtZVwoLFteLF0qXCkqIiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJCQlpZiB0ZXN0ICJ4JG1lbV9leGlzdHMiID0gIngiOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBtZW1zIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJaWYgdGVzdCAieCRnc2hhZG93IiA9ICJ4bm8iOyB0aGVuCisJCQkJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJCQkJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93LQorCQkJCWZpCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBtZW1zIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorCQkJc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgYWxyZWFkeSBjb250YWlucyAkdXNlcm5hbWUsIG5vdCByZS1hZGRpbmcgaXQiCisJZmkKKwlpZiB0ZXN0ICJ4JGdzaGFkb3ciID0gInhubyI7IHRoZW4KKwkJcm0gLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cKKwkJcm0gLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3ctCisJZmkKK30KKworcGVyZm9ybV9ncm91cGRlbCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyBncm91cGRlbCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCBncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJCWxvY2FsIGNvdW50PTAKKwkJd2hpbGUgdHJ1ZTsgZG8KKwkJCWV2YWwgJFBTRVVETyBncm91cGRlbCAkb3B0cyB8fCB0cnVlCisJCQlncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwkJCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJCQliYndhcm4gIiR7UE59OiBncm91cGRlbCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwZGVsIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorCQkJc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgZG9lc24ndCBleGlzdCwgbm90IHJlbW92aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fdXNlcmRlbCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyB1c2VyZGVsIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkgICAgICAgbG9jYWwgY291bnQ9MAorCSAgICAgICB3aGlsZSB0cnVlOyBkbworCQkgICAgICAgZXZhbCAkUFNFVURPIHVzZXJkZWwgJG9wdHMgfHwgdHJ1ZQorCQkgICAgICAgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwkJICAgICAgIGlmIHRlc3QgIngkdXNlcl9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQkJICAgICAgIGJid2FybiAiJHtQTn06IHVzZXJkZWwgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkgICAgICAgZWxzZQorCQkJICAgICAgIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJICAgICAgIGlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyB1c2VyZGVsIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCSAgICAgICBmaQorCQkgICAgICAgc2xlZXAgJGNvdW50CisJICAgICAgIGRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IHVzZXIgJHVzZXJuYW1lIGRvZXNuJ3QgZXhpc3QsIG5vdCByZW1vdmluZyBpdCIKKwlmaQorfQorCitwZXJmb3JtX2dyb3VwbW9kICgpIHsKKwkjIE90aGVyIHRoYW4gdGhlIHJldHVybiB2YWx1ZSBvZiBncm91cG1vZCwgdGhlcmUncyBubyBzaW1wbGUgd2F5IHRvIGp1ZGdlIHdoZXRoZXIgdGhlIGNvbW1hbmQKKwkjIHN1Y2NlZWRzLCBzbyB3ZSBkaXNhYmxlIC1lIG9wdGlvbiB0ZW1wb3JhcmlseQorCXNldCArZQorCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBtb2Qgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBtb2QgJG9wdHMKKwkJCWlmIHRlc3QgJD8gIT0gMDsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwbW9kIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBtb2QgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJCWZpCisJCQlzbGVlcCAkY291bnQKKwkJZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogZ3JvdXAgJGdyb3VwbmFtZSBkb2Vzbid0IGV4aXN0LCB1bmFibGUgdG8gbW9kaWZ5IGl0IgorCWZpCisJc2V0IC1lCit9CisKK3BlcmZvcm1fdXNlcm1vZCAoKSB7CisJIyBTYW1lIHJlYXNvbiB3aXRoIGdyb3VwbW9kLCB0ZW1wb3JhcmlseSBkaXNhYmxlIC1lIG9wdGlvbgorCXNldCArZQorCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgdXNlcm1vZCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJICAgICAgIGxvY2FsIGNvdW50PTAKKwkgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKwkJICAgICAgIGV2YWwgJFBTRVVETyB1c2VybW9kICRvcHRzCisJCSAgICAgICBpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VybW9kIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcm1vZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiB1c2VyICR1c2VybmFtZSBkb2Vzbid0IGV4aXN0LCB1bmFibGUgdG8gbW9kaWZ5IGl0IgorCWZpCisJc2V0IC1lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODE3Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcwpAQCAtMCwwICsxLDY5IEBACithZGR0YXNrIGxpc3R0YXNrcworZG9fbGlzdHRhc2tzW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fbGlzdHRhc2tzKCkgeworICAgIHRhc2tkZXNjcyA9IHt9CisgICAgbWF4bGVuID0gMAorICAgIGZvciBlIGluIGQua2V5cygpOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoZSwgJ3Rhc2snKToKKyAgICAgICAgICAgIG1heGxlbiA9IG1heChtYXhsZW4sIGxlbihlKSkKKyAgICAgICAgICAgIGlmIGUuZW5kc3dpdGgoJ19zZXRzY2VuZScpOgorICAgICAgICAgICAgICAgIGRlc2MgPSAiJXMgKHNldHNjZW5lIHZlcnNpb24pIiAlIChkLmdldFZhckZsYWcoZVs6LTldLCAnZG9jJykgb3IgJycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlc2MgPSBkLmdldFZhckZsYWcoZSwgJ2RvYycpIG9yICcnCisgICAgICAgICAgICB0YXNrZGVzY3NbZV0gPSBkZXNjCisKKyAgICB0YXNrcyA9IHNvcnRlZCh0YXNrZGVzY3Mua2V5cygpKQorICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrczoKKyAgICAgICAgYmIucGxhaW4oIiVzICAlcyIgJSAodGFza25hbWUubGp1c3QobWF4bGVuKSwgdGFza2Rlc2NzW3Rhc2tuYW1lXSkpCit9CisKK0NMRUFORlVOQ1MgPz0gIiIKKworVF90YXNrLWNsZWFuID0gIiR7TE9HX0RJUn0vY2xlYW5sb2dzLyR7UE59IgorYWRkdGFzayBjbGVhbgorZG9fY2xlYW5bbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19jbGVhbigpIHsKKyAgICAiIiJjbGVhciB0aGUgYnVpbGQgYW5kIHRlbXAgZGlyZWN0b3JpZXMiIiIKKyAgICBkaXIgPSBkLmV4cGFuZCgiJHtXT1JLRElSfSIpCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgIiArIGRpcikKKyAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisKKyAgICBkaXIgPSAiJXMuKiIgJSBiYi5kYXRhLmV4cGFuZChkLmdldFZhcignU1RBTVAnLCBGYWxzZSksIGQpCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgIiArIGRpcikKKyAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ0NMRUFORlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCit9CisKK2FkZHRhc2sgY2hlY2t1cmkKK2RvX2NoZWNrdXJpW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2t1cmkoKSB7CisgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHNyY191cmkpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgbG9jYWxkYXRhKQorICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KKworYWRkdGFzayBjaGVja3VyaWFsbCBhZnRlciBkb19jaGVja3VyaQorZG9fY2hlY2t1cmlhbGxbcmVjcmRlcHRhc2tdID0gImRvX2NoZWNrdXJpYWxsIGRvX2NoZWNrdXJpIgorZG9fY2hlY2t1cmlhbGxbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2NoZWNrdXJpYWxsW25vc3RhbXBdID0gIjEiCitkb19jaGVja3VyaWFsbCgpIHsKKwk6Cit9CisKK2FkZHRhc2sgZmV0Y2hhbGwgYWZ0ZXIgZG9fZmV0Y2gKK2RvX2ZldGNoYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19mZXRjaGFsbCBkb19mZXRjaCIKK2RvX2ZldGNoYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19mZXRjaGFsbCgpIHsKKwk6Cit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91dGlscy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjkyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcwpAQCAtMCwwICsxLDM4MCBAQAorIyBGb3IgY29tcGF0aWJpbGl0eQorZGVmIGJhc2VfcGF0aF9qb2luKGEsICpwKToKKyAgICByZXR1cm4gb2UucGF0aC5qb2luKGEsICpwKQorCitkZWYgYmFzZV9wYXRoX3JlbGF0aXZlKHNyYywgZGVzdCk6CisgICAgcmV0dXJuIG9lLnBhdGgucmVsYXRpdmUoc3JjLCBkZXN0KQorCitkZWYgYmFzZV9wYXRoX291dChwYXRoLCBkKToKKyAgICByZXR1cm4gb2UucGF0aC5mb3JtYXRfZGlzcGxheShwYXRoLCBkKQorCitkZWYgYmFzZV9yZWFkX2ZpbGUoZmlsZW5hbWUpOgorICAgIHJldHVybiBvZS51dGlscy5yZWFkX2ZpbGUoZmlsZW5hbWUpCisKK2RlZiBiYXNlX2lmZWxzZShjb25kaXRpb24sIGlmdHJ1ZSA9IFRydWUsIGlmZmFsc2UgPSBGYWxzZSk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmlmZWxzZShjb25kaXRpb24sIGlmdHJ1ZSwgaWZmYWxzZSkKKworZGVmIGJhc2VfY29uZGl0aW9uYWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmNvbmRpdGlvbmFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmxlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGJhc2VfdmVyc2lvbl9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy52ZXJzaW9uX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGJhc2VfY29udGFpbnModmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBiYi51dGlscy5jb250YWlucyh2YXJpYWJsZSwgY2hlY2t2YWx1ZXMsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGJhc2VfYm90aF9jb250YWluKHZhcmlhYmxlMSwgdmFyaWFibGUyLCBjaGVja3ZhbHVlLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMuYm90aF9jb250YWluKHZhcmlhYmxlMSwgdmFyaWFibGUyLCBjaGVja3ZhbHVlLCBkKQorCitkZWYgYmFzZV9wcnVuZV9zdWZmaXgodmFyLCBzdWZmaXhlcywgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLnBydW5lX3N1ZmZpeCh2YXIsIHN1ZmZpeGVzLCBkKQorCitkZWYgb2VfZmlsdGVyKGYsIHN0ciwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLnN0cl9maWx0ZXIoZiwgc3RyLCBkKQorCitkZWYgb2VfZmlsdGVyX291dChmLCBzdHIsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5zdHJfZmlsdGVyX291dChmLCBzdHIsIGQpCisKK2RlZiBtYWNoaW5lX3BhdGhzKGQpOgorICAgICIiIkxpc3QgYW55IGV4aXN0aW5nIG1hY2hpbmUgc3BlY2lmaWMgZmlsZXNwYXRoIGRpcmVjdG9yaWVzIiIiCisgICAgbWFjaGluZSA9IGQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKKyAgICBmaWxlc3BhdGhwa2cgPSBkLmdldFZhcigiRklMRVNQQVRIUEtHIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGZvciBiYXNlcGF0aCBpbiBkLmdldFZhcigiRklMRVNQQVRIQkFTRSIsIFRydWUpLnNwbGl0KCI6Iik6CisgICAgICAgIGZvciBwa2dwYXRoIGluIGZpbGVzcGF0aHBrZzoKKyAgICAgICAgICAgIG1hY2hpbmVwYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCBwa2dwYXRoLCBtYWNoaW5lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihtYWNoaW5lcGF0aCk6CisgICAgICAgICAgICAgICAgeWllbGQgbWFjaGluZXBhdGgKKworZGVmIGlzX21hY2hpbmVfc3BlY2lmaWMoZCk6CisgICAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgcmVjaXBlIGlzIG1hY2hpbmUgc3BlY2lmaWMiIiIKKyAgICBtYWNoaW5lcGF0aHMgPSBzZXQobWFjaGluZV9wYXRocyhkKSkKKyAgICBzcmN1cmkgPSBkLmdldFZhcigiU1JDX1VSSSIsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgdXJsIGluIHNyY3VyaToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbc3JjdXJpXSwgZCkKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgIGlmIGFueShmZXRjaGVyLmxvY2FscGF0aCh1cmwpLnN0YXJ0c3dpdGgobXAgKyAiLyIpIGZvciBtcCBpbiBtYWNoaW5lcGF0aHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKK29lX3NvaW5zdGFsbCgpIHsKKwkjIFB1cnBvc2U6IEluc3RhbGwgc2hhcmVkIGxpYnJhcnkgZmlsZSBhbmQKKwkjICAgICAgICAgIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IGxpbmtzCisJIyBFeGFtcGxlOgorCSMKKwkjIG9lXworCSMKKwkjYmJub3RlIGluc3RhbGxpbmcgc2hhcmVkIGxpYnJhcnkgJDEgdG8gJDIKKwkjCisJbGlibmFtZT1gYmFzZW5hbWUgJDFgCisJaW5zdGFsbCAtbSA3NTUgJDEgJDIvJGxpYm5hbWUKKwlzb25hbWVsaW5rPWAke0hPU1RfUFJFRklYfXJlYWRlbGYgLWQgJDEgfGdyZXAgJ0xpYnJhcnkgc29uYW1lOicgfHNlZCAtZSAncy8uKlxbXCguKlwpXF0uKi9cMS8nYAorCXNvbGluaz1gZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKKwlsbiAtc2YgJGxpYm5hbWUgJDIvJHNvbmFtZWxpbmsKKwlsbiAtc2YgJGxpYm5hbWUgJDIvJHNvbGluaworfQorCitvZV9saWJpbnN0YWxsKCkgeworCSMgUHVycG9zZTogSW5zdGFsbCBhIGxpYnJhcnksIGluIGFsbCBpdHMgZm9ybXMKKwkjIEV4YW1wbGUKKwkjCisJIyBvZV9saWJpbnN0YWxsIGxpYmx0ZGwgJHtTVEFHSU5HX0xJQkRJUn0vCisJIyBvZV9saWJpbnN0YWxsIC1DIHNyYy9saWJibGFoIGxpYmJsYWggJHtEfS8ke2xpYmRpcn0vCisJZGlyPSIiCisJbGlidG9vbD0iIgorCXNpbGVudD0iIgorCXJlcXVpcmVfc3RhdGljPSIiCisJcmVxdWlyZV9zaGFyZWQ9IiIKKwlzdGFnaW5nX2luc3RhbGw9IiIKKwl3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS1DKQorCQkJc2hpZnQKKwkJCWRpcj0iJDEiCisJCQk7OworCQktcykKKwkJCXNpbGVudD0xCisJCQk7OworCQktYSkKKwkJCXJlcXVpcmVfc3RhdGljPTEKKwkJCTs7CisJCS1zbykKKwkJCXJlcXVpcmVfc2hhcmVkPTEKKwkJCTs7CisJCS0qKQorCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogdW5rbm93biBvcHRpb246ICQxIgorCQkJOzsKKwkJKikKKwkJCWJyZWFrOworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWxpYm5hbWU9IiQxIgorCXNoaWZ0CisJZGVzdHBhdGg9IiQxIgorCWlmIFsgLXogIiRkZXN0cGF0aCIgXTsgdGhlbgorCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiBubyBkZXN0aW5hdGlvbiBwYXRoIHNwZWNpZmllZCIKKwlmaQorCWlmIGVjaG8gIiRkZXN0cGF0aC8iIHwgZWdyZXAgJ14ke1NUQUdJTkdfTElCRElSfS8nID4vZGV2L251bGwKKwl0aGVuCisJCXN0YWdpbmdfaW5zdGFsbD0xCisJZmkKKworCV9fcnVuY21kICgpIHsKKwkJaWYgWyAteiAiJHNpbGVudCIgXTsgdGhlbgorCQkJZWNobyA+JjIgIm9lX2xpYmluc3RhbGw6ICQqIgorCQlmaQorCQkkKgorCX0KKworCWlmIFsgLXogIiRkaXIiIF07IHRoZW4KKwkJZGlyPWBwd2RgCisJZmkKKworCWRvdGxhaT0kbGlibmFtZS5sYWkKKworCSMgU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGxpYm5hbWUubGFpIGlzIHVuaXF1ZQorCW51bWJlcl9vZl9maWxlcz1gKGNkICRkaXI7IGZpbmQgLiAtbmFtZSAiJGRvdGxhaSIpIHwgd2MgLWxgCisJaWYgWyAkbnVtYmVyX29mX2ZpbGVzIC1ndCAxIF07IHRoZW4KKwkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogJGRvdGxhaSBpcyBub3QgdW5pcXVlIGluICRkaXIiCisJZmkKKworCisJZGlyPSRkaXJgKGNkICRkaXI7ZmluZCAuIC1uYW1lICIkZG90bGFpIikgfCBzZWQgInMvXlwuLy87cy9cLyRkb3RsYWlcJC8vO3EiYAorCW9sZGRpcj1gcHdkYAorCV9fcnVuY21kIGNkICRkaXIKKworCWxhZmlsZT0kbGlibmFtZS5sYQorCisJIyBJZiBzdWNoIGZpbGUgZG9lc24ndCBleGlzdCwgdHJ5IHRvIGN1dCB2ZXJzaW9uIHN1ZmZpeAorCWlmIFsgISAtZiAiJGxhZmlsZSIgXTsgdGhlbgorCQlsaWJuYW1lMT1gZWNobyAiJGxpYm5hbWUiIHwgc2VkICdzLy1bMC05Ll0qJC8vJ2AKKwkJbGFmaWxlMT0kbGlibmFtZS5sYQorCQlpZiBbIC1mICIkbGFmaWxlMSIgXTsgdGhlbgorCQkJbGlibmFtZT0kbGlibmFtZTEKKwkJCWxhZmlsZT0kbGFmaWxlMQorCQlmaQorCWZpCisKKwlpZiBbIC1mICIkbGFmaWxlIiBdOyB0aGVuCisJCSMgbGlidG9vbCBhcmNoaXZlCisJCWV2YWwgYGNhdCAkbGFmaWxlfGdyZXAgIl5saWJyYXJ5X25hbWVzPSJgCisJCWxpYnRvb2w9MQorCWVsc2UKKwkJbGlicmFyeV9uYW1lcz0iJGxpYm5hbWUuc28qICRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLiouZHlsaWIiCisJZmkKKworCV9fcnVuY21kIGluc3RhbGwgLWQgJGRlc3RwYXRoLworCWRvdGE9JGxpYm5hbWUuYQorCWlmIFsgLWYgIiRkb3RhIiAtbyAtbiAiJHJlcXVpcmVfc3RhdGljIiBdOyB0aGVuCisJCXJtIC1mICRkZXN0cGF0aC8kZG90YQorCQlfX3J1bmNtZCBpbnN0YWxsIC1tIDA2NDQgJGRvdGEgJGRlc3RwYXRoLworCWZpCisJaWYgWyAtZiAiJGRvdGxhaSIgLWEgLW4gIiRsaWJ0b29sIiBdOyB0aGVuCisJCXJtIC1mICRkZXN0cGF0aC8kbGlibmFtZS5sYQorCQlfX3J1bmNtZCBpbnN0YWxsIC1tIDA2NDQgJGRvdGxhaSAkZGVzdHBhdGgvJGxpYm5hbWUubGEKKwlmaQorCisJZm9yIG5hbWUgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJCWZpbGVzPWBldmFsIGVjaG8gJG5hbWVgCisJCWZvciBmIGluICRmaWxlczsgZG8KKwkJCWlmIFsgISAtZSAiJGYiIF07IHRoZW4KKwkJCQlpZiBbIC1uICIkbGlidG9vbCIgXTsgdGhlbgorCQkJCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiAkZGlyLyRmIG5vdCBmb3VuZC4iCisJCQkJZmkKKwkJCWVsaWYgWyAtTCAiJGYiIF07IHRoZW4KKwkJCQlfX3J1bmNtZCBjcCAtUCAiJGYiICRkZXN0cGF0aC8KKwkJCWVsaWYgWyAhIC1MICIkZiIgXTsgdGhlbgorCQkJCWxpYmZpbGU9IiRmIgorCQkJCXJtIC1mICRkZXN0cGF0aC8kbGliZmlsZQorCQkJCV9fcnVuY21kIGluc3RhbGwgLW0gMDc1NSAkbGliZmlsZSAkZGVzdHBhdGgvCisJCQlmaQorCQlkb25lCisJZG9uZQorCisJaWYgWyAteiAiJGxpYmZpbGUiIF07IHRoZW4KKwkJaWYgIFsgLW4gIiRyZXF1aXJlX3NoYXJlZCIgXTsgdGhlbgorCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogdW5hYmxlIHRvIGxvY2F0ZSBzaGFyZWQgbGlicmFyeSIKKwkJZmkKKwllbGlmIFsgLXogIiRsaWJ0b29sIiBdOyB0aGVuCisJCSMgc3BlY2lhbCBjYXNlIGhhY2sgZm9yIG5vbi1saWJ0b29sIC5zby4jLiMuIyBsaW5rcworCQliYXNlbGliZmlsZT1gYmFzZW5hbWUgIiRsaWJmaWxlImAKKwkJaWYgKGVjaG8gJGJhc2VsaWJmaWxlIHwgZ3JlcCAtcUUgJ15saWIuKlwuc29cLlswLTkuXSokJyk7IHRoZW4KKwkJCXNvbmFtZWxpbms9YCR7SE9TVF9QUkVGSVh9cmVhZGVsZiAtZCAkbGliZmlsZSB8Z3JlcCAnTGlicmFyeSBzb25hbWU6JyB8c2VkIC1lICdzLy4qXFtcKC4qXClcXS4qL1wxLydgCisJCQlzb2xpbms9YGVjaG8gJGJhc2VsaWJmaWxlIHwgc2VkIC1lICdzL1wuc29cLi4qLy5zby8nYAorCQkJaWYgWyAtbiAiJHNvbmFtZWxpbmsiIC1hIHgiJGJhc2VsaWJmaWxlIiAhPSB4IiRzb25hbWVsaW5rIiBdOyB0aGVuCisJCQkJX19ydW5jbWQgbG4gLXNmICRiYXNlbGliZmlsZSAkZGVzdHBhdGgvJHNvbmFtZWxpbmsKKwkJCWZpCisJCQlfX3J1bmNtZCBsbiAtc2YgJGJhc2VsaWJmaWxlICRkZXN0cGF0aC8kc29saW5rCisJCWZpCisJZmkKKworCV9fcnVuY21kIGNkICIkb2xkZGlyIgorfQorCitvZV9tYWNoaW5zdGFsbCgpIHsKKwkjIFB1cnBvc2U6IEluc3RhbGwgbWFjaGluZSBkZXBlbmRlbnQgZmlsZXMsIGlmIGF2YWlsYWJsZQorCSMgICAgICAgICAgSWYgbm90IGF2YWlsYWJsZSwgY2hlY2sgaWYgdGhlcmUgaXMgYSBkZWZhdWx0CisJIyAgICAgICAgICBJZiBubyBkZWZhdWx0LCBqdXN0IHRvdWNoIHRoZSBkZXN0aW5hdGlvbgorCSMgRXhhbXBsZToKKwkjICAgICAgICAgICAgICAgICQxICAkMiAgICQzICAgICAgICAgJDQKKwkjIG9lX21hY2hpbnN0YWxsIC1tIDA2NDQgZnN0YWIgJHtEfS9ldGMvZnN0YWIKKwkjCisJIyBUT0RPOiBDaGVjayBhcmd1bWVudCBudW1iZXI/CisJIworCWZpbGVuYW1lPWBiYXNlbmFtZSAkM2AKKwlkaXJuYW1lPWBkaXJuYW1lICQzYAorCisJZm9yIG8gaW4gYGVjaG8gJHtPVkVSUklERVN9IHwgdHIgJzonICcgJ2A7IGRvCisJCWlmIFsgLWUgJGRpcm5hbWUvJG8vJGZpbGVuYW1lIF07IHRoZW4KKwkJCWJibm90ZSAkZGlybmFtZS8kby8kZmlsZW5hbWUgcHJlc2VudCwgaW5zdGFsbGluZyB0byAkNAorCQkJaW5zdGFsbCAkMSAkMiAkZGlybmFtZS8kby8kZmlsZW5hbWUgJDQKKwkJCXJldHVybgorCQlmaQorCWRvbmUKKyMJYmJub3RlIG92ZXJyaWRlcyBzcGVjaWZpYyBmaWxlIE5PVCBwcmVzZW50LCB0cnlpbmcgZGVmYXVsdD0kMy4uLgorCWlmIFsgLWUgJDMgXTsgdGhlbgorCQliYm5vdGUgJDMgcHJlc2VudCwgaW5zdGFsbGluZyB0byAkNAorCQlpbnN0YWxsICQxICQyICQzICQ0CisJZWxzZQorCQliYm5vdGUgJDMgTk9UIHByZXNlbnQsIHRvdWNoaW5nIGVtcHR5ICQ0CisJCXRvdWNoICQ0CisJZmkKK30KKworY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAoKSB7CisJIyBDcmVhdGUgYSB3cmFwcGVyIHNjcmlwdCB3aGVyZSBjb21tYW5kbGluZSBvcHRpb25zIGFyZSBuZWVkZWQKKwkjCisJIyBUaGVzZSBhcmUgdXNlZnVsIHRvIHdvcmsgYXJvdW5kIHJlbG9jYXRpb24gaXNzdWVzLCBieSBwYXNzaW5nIGV4dHJhIG9wdGlvbnMgCisJIyB0byBhIHByb2dyYW0KKwkjCisJIyBVc2FnZTogY3JlYXRlX2NtZGxpbmVfd3JhcHBlciBGSUxFTkFNRSA8ZXh0cmEtb3B0aW9ucz4KKworCWNtZD0kMQorCXNoaWZ0CisKKwllY2hvICJHZW5lcmF0aW5nIHdyYXBwZXIgc2NyaXB0IGZvciAkY21kIgorCisJbXYgJGNtZCAkY21kLnJlYWwKKwljbWRuYW1lPWBiYXNlbmFtZSAkY21kYAorCWNhdCA8PEVORCA+JGNtZAorIyEvYmluL2Jhc2gKK3JlYWxwYXRoPVxgcmVhZGxpbmsgLWZuIFwkMFxgCitleGVjIC1hIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZS5yZWFsICRAICJcJEAiCitFTkQKKwljaG1vZCAreCAkY21kCit9CisKK2NyZWF0ZV93cmFwcGVyICgpIHsKKwkjIENyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0IHdoZXJlIGV4dHJhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbmVlZGVkCisJIworCSMgVGhlc2UgYXJlIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCByZWxvY2F0aW9uIGlzc3VlcywgYnkgc2V0dGluZyBlbnZpcm9ubWVudAorCSMgdmFyaWFibGVzIHdoaWNoIHBvaW50IHRvIHBhdGhzIGluIHRoZSBmaWxlc3lzdGVtLgorCSMKKwkjIFVzYWdlOiBjcmVhdGVfd3JhcHBlciBGSUxFTkFNRSBbW1ZBUj1WQUxVRV0uLl0KKworCWNtZD0kMQorCXNoaWZ0CisKKwllY2hvICJHZW5lcmF0aW5nIHdyYXBwZXIgc2NyaXB0IGZvciAkY21kIgorCisJbXYgJGNtZCAkY21kLnJlYWwKKwljbWRuYW1lPWBiYXNlbmFtZSAkY21kYAorCWNhdCA8PEVORCA+JGNtZAorIyEvYmluL2Jhc2gKK3JlYWxwYXRoPVxgcmVhZGxpbmsgLWZuIFwkMFxgCitleHBvcnQgJEAKK2V4ZWMgLWEgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZSBcYGRpcm5hbWUgXCRyZWFscGF0aFxgLyRjbWRuYW1lLnJlYWwgIlwkQCIKK0VORAorCWNobW9kICt4ICRjbWQKK30KKworIyBDb3B5IGZpbGVzL2RpcmVjdG9yaWVzIGZyb20gJDEgdG8gJDIgYnV0IHVzaW5nIGhhcmRsaW5rcworIyAocHJlc2VydmUgc3ltbGlua3MpCitoYXJkbGlua2RpciAoKSB7CisJZnJvbT0kMQorCXRvPSQyCisJKGNkICRmcm9tOyBmaW5kIC4gLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICR0bykKK30KKworCitkZWYgY2hlY2tfYXBwX2V4aXN0cyhhcHAsIGQpOgorICAgIGFwcCA9IGQuZXhwYW5kKGFwcCkKKyAgICBwYXRoID0gZC5nZXRWYXIoJ1BBVEgnLCBkLCBUcnVlKQorICAgIHJldHVybiBib29sKGJiLnV0aWxzLndoaWNoKHBhdGgsIGFwcCkpCisKK2RlZiBleHBsb2RlX2RlcHMocyk6CisgICAgcmV0dXJuIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhzKQorCitkZWYgYmFzZV9zZXRfZmlsZXNwYXRoKHBhdGgsIGQpOgorICAgIGZpbGVzcGF0aCA9IFtdCisgICAgZXh0cmFwYXRocyA9IChkLmdldFZhcigiRklMRVNFWFRSQVBBVEhTIiwgVHJ1ZSkgb3IgIiIpCisgICAgIyBSZW1vdmUgZGVmYXVsdCBmbGFnIHdoaWNoIHdhcyB1c2VkIGZvciBjaGVja2luZworICAgIGV4dHJhcGF0aHMgPSBleHRyYXBhdGhzLnJlcGxhY2UoIl9fZGVmYXVsdDoiLCAiIikKKyAgICAjIERvbid0IHByZXBlbmQgZW1wdHkgc3RyaW5ncyB0byB0aGUgcGF0aCBsaXN0CisgICAgaWYgZXh0cmFwYXRocyAhPSAiIjoKKyAgICAgICAgcGF0aCA9IGV4dHJhcGF0aHMuc3BsaXQoIjoiKSArIHBhdGgKKyAgICAjIFRoZSAiOiIgZW5zdXJlcyB3ZSBoYXZlIGFuICdlbXB0eScgb3ZlcnJpZGUKKyAgICBvdmVycmlkZXMgPSAoIjoiICsgKGQuZ2V0VmFyKCJGSUxFU09WRVJSSURFUyIsIFRydWUpIG9yICIiKSkuc3BsaXQoIjoiKQorICAgIG92ZXJyaWRlcy5yZXZlcnNlKCkKKyAgICBmb3IgbyBpbiBvdmVycmlkZXM6CisgICAgICAgIGZvciBwIGluIHBhdGg6CisgICAgICAgICAgICBpZiBwICE9ICIiOiAKKyAgICAgICAgICAgICAgICBmaWxlc3BhdGguYXBwZW5kKG9zLnBhdGguam9pbihwLCBvKSkKKyAgICByZXR1cm4gIjoiLmpvaW4oZmlsZXNwYXRoKQorCitkZWYgZXh0ZW5kX3ZhcmlhbnRzKGQsIHZhciwgZXh0ZW5kLCBkZWxpbT0nOicpOgorICAgICIiIlJldHVybiBhIHN0cmluZyBvZiBhbGwgYmIgY2xhc3MgZXh0ZW5kIHZhcmlhbnRzIGZvciB0aGUgZ2l2ZW4gZXh0ZW5kIiIiCisgICAgdmFyaWFudHMgPSBbXQorICAgIHdob2xlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgIGZvciBleHQgaW4gd2hvbGUuc3BsaXQoKToKKyAgICAgICAgZWV4dCA9IGV4dC5zcGxpdChkZWxpbSkKKyAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSBleHRlbmQ6CisgICAgICAgICAgICB2YXJpYW50cy5hcHBlbmQoZWV4dFsxXSkKKyAgICByZXR1cm4gIiAiLmpvaW4odmFyaWFudHMpCisKK2RlZiBtdWx0aWxpYl9wa2dfZXh0ZW5kKGQsIHBrZyk6CisgICAgdmFyaWFudHMgPSAoZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBub3QgdmFyaWFudHM6CisgICAgICAgIHJldHVybiBwa2cKKyAgICBwa2dzID0gcGtnCisgICAgZm9yIHYgaW4gdmFyaWFudHM6CisgICAgICAgIHBrZ3MgPSBwa2dzICsgIiAiICsgdiArICItIiArIHBrZworICAgIHJldHVybiBwa2dzCisKK2RlZiBhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgdmFyLCB1bmlxdWUgPSBUcnVlLCBuZWVkX3NwbGl0ID0gVHJ1ZSwgZGVsaW0gPSAnICcpOgorICAgICIiIlJldHVybiBhIHN0cmluZyBvZiBhbGwgJHt2YXJ9IGluIGFsbCBtdWx0aWxpYiB0dW5lIGNvbmZpZ3VyYXRpb24iIiIKKyAgICB2YWx1ZXMgPSBbXQorICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgIGlmIHZhbHVlICE9ICIiOgorICAgICAgICBpZiBuZWVkX3NwbGl0OgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdmFsdWUuc3BsaXQoZGVsaW0pOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgaXRlbSArICItIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHZhbHVlID0gbG9jYWxkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIHZhbHVlICE9ICIiOgorICAgICAgICAgICAgaWYgbmVlZF9zcGxpdDoKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB2YWx1ZS5zcGxpdChkZWxpbSk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKyAgICBpZiB1bmlxdWU6CisgICAgICAgICN3ZSBkbyB0aGlzIHRvIGtlZXAgb3JkZXIgYXMgbXVjaCBhcyBwb3NzaWJsZQorICAgICAgICByZXQgPSBbXQorICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlIGluIHJldDoKKyAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHZhbHVlKQorICAgIGVsc2U6CisgICAgICAgIHJldCA9IHZhbHVlcworICAgIHJldHVybiAiICIuam9pbihyZXQpCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdmFsYS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3ZhbGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmY2NjRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3ZhbGEuYmJjbGFzcwpAQCAtMCwwICsxLDE4IEBACisjIEV2ZXJ5b25lIG5lZWRzIHZhbGEtbmF0aXZlIGFuZCB0YXJnZXRzIG5lZWQgdmFsYSwgdG9vLAorIyBiZWNhdXNlIHRoYXQgaXMgd2hlcmUgdGFyZ2V0IGJ1aWxkcyBsb29rIGZvciAudmFwaSBmaWxlcy4KKyMKK1ZBTEFERVBFTkRTID0gIiIKK1ZBTEFERVBFTkRTX2NsYXNzLXRhcmdldCA9ICJ2YWxhIgorREVQRU5EU19hcHBlbmQgPSAiIHZhbGEtbmF0aXZlICR7VkFMQURFUEVORFN9IgorCisjIE91ciBwYXRjaGVkIHZlcnNpb24gb2YgVmFsYSBsb29rcyBpbiBTVEFHSU5HX0RBVEFESVIgZm9yIC52YXBpIGZpbGVzCitleHBvcnQgU1RBR0lOR19EQVRBRElSCisjIFVwc3RyZWFtIFZhbGEgPj0gMC4xMSBsb29rcyBpbiBYREdfREFUQV9ESVJTIGZvciAudmFwaSBmaWxlcworZXhwb3J0IFhER19EQVRBX0RJUlMgPSAiJHtTVEFHSU5HX0RBVEFESVJ9IgorCisjIFBhY2thZ2UgYWRkaXRpb25hbCBmaWxlcworRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICAgJHtkYXRhZGlyfS92YWxhL3ZhcGkvKi52YXBpIFwKKyAgICAke2RhdGFkaXJ9L3ZhbGEvdmFwaS8qLmRlcHMgXAorICAgICR7ZGF0YWRpcn0vZ2lyLTEuMCBcCisiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMjFlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy93YWYuYmJjbGFzcwpAQCAtMCwwICsxLDEzIEBACit3YWZfZG9fY29uZmlndXJlKCkgeworCSR7U30vd2FmIGNvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gJHtFWFRSQV9PRUNPTkZ9Cit9CisKK3dhZl9kb19jb21waWxlKCkgIHsKKwkke1N9L3dhZiBidWlsZCAke1BBUkFMTEVMX01BS0V9Cit9CisKK3dhZl9kb19pbnN0YWxsKCkgeworCSR7U30vd2FmIGluc3RhbGwgLS1kZXN0ZGlyPSR7RH0KK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZiBiL21ldGEvY29uZi9hYmlfdmVyc2lvbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Mjk2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZgpAQCAtMCwwICsxLDcgQEAKKyMKKyMgT0VMQVlPVVRfQUJJIGFsbG93cyB1cyB0byBub3RpZnkgdXNlcnMgd2hlbiB0aGUgZm9ybWF0IG9mIFRNUERJUiBjaGFuZ2VzIGluIAorIyBhbiBpbmNvbXBhdGlibGUgd2F5LiBTdWNoIGNoYW5nZXMgc2hvdWxkIHVzdWFsbHkgYmUgZGV0YWlsZWQgaW4gdGhlIGNvbW1pdAorIyB0aGF0IGJyZWFrcyB0aGUgZm9ybWF0IGFuZCBoYXZlIGJlZW4gcHJldmlvdXNseSBkaXNjdXNzZWQgb24gdGhlIG1haWxpbmcgbGlzdCAKKyMgd2l0aCBnZW5lcmFsIGFncmVlbWVudCBmcm9tIHRoZSBjb3JlIHRlYW0uCisjCitPRUxBWU9VVF9BQkkgPSAiMTEiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvYml0YmFrZS5jb25mIGIvbWV0YS9jb25mL2JpdGJha2UuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGE2NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2JpdGJha2UuY29uZgpAQCAtMCwwICsxLDgxMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFN0YW5kYXJkIHRhcmdldCBmaWxlc3lzdGVtIHBhdGhzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIElmIGNoYW5naW5nIHRoZXNlIHZhbHVlcywgYmV3YXJlIHRoYXQgbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayBiYmNsYXNzCisjIGZpbGVzIG1heSBhbHNvIG5lZWQgY2hhbmdlcyB0byBrZWVwIGluIHN5bmMuCisjCisKKyMgVXNlZCBieSBtdWx0aWxpYiBjb2RlIHRvIGNoYW5nZSB0aGUgbGlicmFyeSBwYXRocworYmFzZWxpYiA9ICIke0JBU0VMSUJ9IgorYmFzZWxpYlt2YXJkZXB2YWx1ZV0gPSAiJHtiYXNlbGlifSIKK0JBU0VMSUIgPSAibGliIgorQkFTRUxJQl9wb3dlcnBjNjQgPSAibGliNjQiCisKKyMgUGF0aCBwcmVmaXhlcworZXhwb3J0IGJhc2VfcHJlZml4ID0gIiIKK2V4cG9ydCBwcmVmaXggPSAiL3VzciIKK2V4cG9ydCBleGVjX3ByZWZpeCA9ICIvdXNyIgorCisjIEJhc2UgcGF0aHMKK2V4cG9ydCBiYXNlX2JpbmRpciA9ICIke2Jhc2VfcHJlZml4fS9iaW4iCitleHBvcnQgYmFzZV9zYmluZGlyID0gIiR7YmFzZV9wcmVmaXh9L3NiaW4iCitleHBvcnQgYmFzZV9saWJkaXIgPSAiJHtiYXNlX3ByZWZpeH0vJHtiYXNlbGlifSIKK2V4cG9ydCBub25hcmNoX2Jhc2VfbGliZGlyID0gIiR7YmFzZV9wcmVmaXh9L2xpYiIKKworIyBBcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgcGF0aHMKK2V4cG9ydCBzeXNjb25mZGlyID0gIiR7YmFzZV9wcmVmaXh9L2V0YyIKK2V4cG9ydCBzZXJ2aWNlZGlyID0gIiR7YmFzZV9wcmVmaXh9L3NydiIKK2V4cG9ydCBzaGFyZWRzdGF0ZWRpciA9ICIke2Jhc2VfcHJlZml4fS9jb20iCitleHBvcnQgbG9jYWxzdGF0ZWRpciA9ICIke2Jhc2VfcHJlZml4fS92YXIiCitleHBvcnQgZGF0YWRpciA9ICIke3ByZWZpeH0vc2hhcmUiCitleHBvcnQgaW5mb2RpciA9ICIke2RhdGFkaXJ9L2luZm8iCitleHBvcnQgbWFuZGlyID0gIiR7ZGF0YWRpcn0vbWFuIgorZXhwb3J0IGRvY2RpciA9ICIke2RhdGFkaXJ9L2RvYyIKK2V4cG9ydCBzeXN0ZW1kX3VuaXRkaXIgPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS9zeXN0ZW1kIgorZXhwb3J0IHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS9zeXN0ZW1kL3N5c3RlbSIKK2V4cG9ydCBub25hcmNoX2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIiCitleHBvcnQgc3lzdGVtZF91c2VyX3VuaXRkaXIgPSAiJHtub25hcmNoX2xpYmRpcn0vc3lzdGVtZC91c2VyIgorCisjIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgcGF0aHMKK2V4cG9ydCBiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluIgorZXhwb3J0IHNiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vc2JpbiIKK2V4cG9ydCBsaWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK2V4cG9ydCBsaWJleGVjZGlyID0gIiR7bGliZGlyfS8ke0JQTn0iCitleHBvcnQgaW5jbHVkZWRpciA9ICIke2V4ZWNfcHJlZml4fS9pbmNsdWRlIgorZXhwb3J0IG9sZGluY2x1ZGVkaXIgPSAiJHtleGVjX3ByZWZpeH0vaW5jbHVkZSIKK2xvY2FsZWRpciA9ICIke2xpYmRpcn0vbG9jYWxlIgorCisjIExpbmthZ2UgYmV0d2VlbiBuYXRpdmUvY3Jvc3MvbmF0aXZlc2RrIGxheW91dHMKK2Jhc2VfYmluZGlyX25hdGl2ZSA9ICIvYmluIgorYmFzZV9zYmluZGlyX25hdGl2ZSA9ICIvc2JpbiIKK3N5c2NvbmZkaXJfbmF0aXZlID0gIi9ldGMiCitwcmVmaXhfbmF0aXZlID0gIi91c3IiCitiaW5kaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vYmluIgorc2JpbmRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9zYmluIgoraW5jbHVkZWRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9pbmNsdWRlIgorbGliZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L2xpYiIKK2xpYmV4ZWNkaXJfbmF0aXZlID0gIiR7bGliZGlyX25hdGl2ZX0vJHtCUE59IgorYmFzZV9saWJkaXJfbmF0aXZlID0gIi9saWIiCitkYXRhZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L3NoYXJlIgorYmluZGlyX2Nyb3NzID0gIi9iaW4iCitiaW5kaXJfY3Jvc3NzY3JpcHRzID0gIiR7YmluZGlyfS9jcm9zc3NjcmlwdHMiCitwcmVmaXhfbmF0aXZlc2RrID0gIi91c3IiCitiaW5kaXJfbmF0aXZlc2RrID0gIiR7cHJlZml4X25hdGl2ZXNka30vYmluIgoraW5jbHVkZWRpcl9uYXRpdmVzZGsgPSAiJHtwcmVmaXhfbmF0aXZlc2RrfS9pbmNsdWRlIgorbGliZGlyX25hdGl2ZXNkayA9ICIke3ByZWZpeF9uYXRpdmVzZGt9L2xpYiIKK2Jhc2VfbGliZGlyX25hdGl2ZXNkayA9ICIvbGliIgorbG9jYWxzdGF0ZWRpcl9uYXRpdmVzZGsgPSAiL3ZhciIKKworIworIyBDcm9zcyByZWNpcGVzIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgdGFyZ2V0IGxheW91dAorIyA6PSBpcyB1c2VkIGNhcmVmdWxseSBoZXJlCisjCit0YXJnZXRfZGF0YWRpciA6PSAiJHtkYXRhZGlyfSIKKyMgVXNlZCB0byBmaW5kIGVudi9wZXJsL3B5dGhvbgorVVNSQklOUEFUSCA9ICIke2JpbmRpcn0iCitVU1JCSU5QQVRIX2NsYXNzLW5hdGl2ZSA9ICIvdXNyL2JpbiIKK1VTUkJJTlBBVEhfY2xhc3MtbmF0aXZlc2RrID0gIi91c3IvYmluIgorCisjIFJvb3QgaG9tZSBkaXJlY3RvcnkKK1JPT1RfSE9NRSA/Pz0gIi9ob21lL3Jvb3QiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1aWxkIHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEltbWVkaWF0ZSBleHBhbnNpb24gc2luY2UgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcmVhcGVhdGVkbHkgY2FsbGluZworIyBvcy51bmFtZSgpIHRocm91Z2hvdXQgcGFyc2luZworQlVJTERfQVJDSCA6PSAiJHtAb3MudW5hbWUoKVs0XX0iCitCVUlMRF9PUyA6PSAiJHtAb3MudW5hbWUoKVswXS5sb3dlcigpfSIKK0JVSUxEX1ZFTkRPUiA9ICIiCitCVUlMRF9TWVMgPSAiJHtCVUlMRF9BUkNIfSR7QlVJTERfVkVORE9SfS0ke0JVSUxEX09TfSIKK0JVSUxEX1BSRUZJWCA9ICIiCitCVUlMRF9DQ19BUkNIID0gIiIKK0JVSUxEX0xEX0FSQ0ggPSAiIgorQlVJTERfQVNfQVJDSCA9ICIiCitCVUlMRF9FWEVFWFQgPSAiIgorCitIT1NUX0FSQ0ggPSAiJHtUQVJHRVRfQVJDSH0iCitIT1NUX09TID0gIiR7VEFSR0VUX09TfSIKK0hPU1RfVkVORE9SID0gIiR7VEFSR0VUX1ZFTkRPUn0iCitIT1NUX1NZUyA9ICIke0hPU1RfQVJDSH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtUQVJHRVRfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1RBUkdFVF9DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1RBUkdFVF9MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1RBUkdFVF9BU19BUkNIfSIKK0hPU1RfRVhFRVhUID0gIiIKKworVFVORV9BUkNIID8/PSAiSU5WQUxJRCIKK1RVTkVfQ0NBUkdTID8/PSAiIgorVFVORV9DQ0FSR1NbdmFyZGVwdmFsdWVdID0gIiR7VFVORV9DQ0FSR1N9IgorVFVORV9MREFSR1MgPz89ICIiCitUVU5FX0FTQVJHUyA/Pz0gIiIKK1RVTkVfRkVBVFVSRVMgPz89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitMSUJDRVhURU5TSU9OID8/PSAiIgorQUJJRVhURU5TSU9OID8/PSAiIgorVVNFX05MUyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGUtY29kZScsICd5ZXMnLCAnbm8nLCBkKX0iCitTREtVU0VfTkxTID8/PSAieWVzIgorCitUQVJHRVRfQVJDSCA9ICIke1RVTkVfQVJDSH0iCitUQVJHRVRfT1MgPSAibGludXgke0xJQkNFWFRFTlNJT059JHtBQklFWFRFTlNJT059IgorVEFSR0VUX1ZFTkRPUiA9ICItb2UiCitUQVJHRVRfU1lTID0gIiR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfSR7QFsnLScgKyBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSksICcnXVtkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgPT0gKCcnIG9yICdjdXN0b20nKV19IgorVEFSR0VUX1BSRUZJWCA9ICIke1RBUkdFVF9TWVN9LSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7VFVORV9DQ0FSR1N9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtUVU5FX0xEQVJHU30iCitUQVJHRVRfQVNfQVJDSCA9ICIke1RVTkVfQVNBUkdTfSIKKworU0RLX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK1NES19PUyA9ICIke0JVSUxEX09TfSIKK1NES19WRU5ET1IgPSAiLW9lc2RrIgorU0RLX1NZUyA9ICIke1NES19BUkNIfSR7U0RLX1ZFTkRPUn0ke0BbJy0nICsgZC5nZXRWYXIoJ1NES19PUycsIFRydWUpLCAnJ11bZC5nZXRWYXIoJ1NES19PUycsIFRydWUpID09ICgnJyBvciAnY3VzdG9tJyldfSIKK1NES19QUkVGSVggPSAiJHtTREtfU1lTfS0iCitTREtfQ0NfQVJDSCA9ICIke0JVSUxEX0NDX0FSQ0h9IgorU0RLUEtHU1VGRklYID0gIm5hdGl2ZXNkayIKK1NES19QQUNLQUdFX0FSQ0hTID0gImFsbCBhbnkgbm9hcmNoICR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKK1NES19MRF9BUkNIID0gIiR7QlVJTERfTERfQVJDSH0iCitTREtfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorCitUVU5FX1BLR0FSQ0ggPz89ICIiCitQQUNLQUdFX0FSQ0ggPz89ICIke1RVTkVfUEtHQVJDSH0iCitNQUNISU5FX0FSQ0ggPSAiJHtAW2QuZ2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBUcnVlKSwgZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKV1bYm9vbChkLmdldFZhcignTUFDSElORScsIFRydWUpKV0ucmVwbGFjZSgnLScsICdfJyl9IgorUEFDS0FHRV9FWFRSQV9BUkNIUyA/Pz0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLSR7REVGQVVMVFRVTkV9fSIKK1BBQ0tBR0VfQVJDSFMgPSAiYWxsIGFueSBub2FyY2ggJHtQQUNLQUdFX0VYVFJBX0FSQ0hTfSAke01BQ0hJTkVfQVJDSH0iCisjIE1BQ0hJTkVfQVJDSCBzaG91bGRuJ3QgYmUgaW5jbHVkZWQgaGVyZSBhcyBhIHZhcmlhYmxlIGRlcGVuZGVuY3kKKyMgc2luY2UgbWFjaGluZSBzcGVjaWZpYyBwYWNrYWdlcyBhcmUgaGFuZGxlZCB1c2luZyBtdWx0aW1hY2hpbmUKK1BBQ0tBR0VfQVJDSFNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkVfQVJDSCIKKworTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAiJHtQQUNLQUdFX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitNVUxUSU1BQ0hfSE9TVF9TWVMgPSAiJHtQQUNLQUdFX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERhdGUvdGltZSB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworREFURSA6PSAiJHtAdGltZS5zdHJmdGltZSgnJVklbSVkJyx0aW1lLmdtdGltZSgpKX0iCitUSU1FIDo9ICIke0B0aW1lLnN0cmZ0aW1lKCclSCVNJVMnLHRpbWUuZ210aW1lKCkpfSIKK0RBVEVUSU1FID0gIiR7REFURX0ke1RJTUV9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3BlbmVtYmVkZGVkIFNvZnR3YXJlIFByZXJlcXVpc2l0ZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBweXRob24tbmF0aXZlIHNob3VsZCBiZSBoZXJlIGJ1dCBweXRob24gcmVsaWVzIG9uIGJ1aWxkaW5nCisjIGl0cyBvd24gaW4gc3RhZ2luZworQVNTVU1FX1BST1ZJREVEID0gIlwKKyAgICBiemlwMi1uYXRpdmUgXAorICAgIGNocnBhdGgtbmF0aXZlIFwKKyAgICBnaXQtbmF0aXZlIFwKKyAgICBncmVwLW5hdGl2ZSBcCisgICAgZGlmZnN0YXQtbmF0aXZlIFwKKyAgICBwYXRjaC1uYXRpdmUgXAorICAgIHBlcmwtbmF0aXZlLXJ1bnRpbWUgXAorICAgIHB5dGhvbi1uYXRpdmUtcnVudGltZSBcCisgICAgdGFyLW5hdGl2ZSBcCisgICAgdmlydHVhbC9saWJpbnRsLW5hdGl2ZSBcCisgICAgdGV4aW5mby1uYXRpdmUgXAorICAgIGJhc2gtbmF0aXZlIFwKKyAgICBzZWQtbmF0aXZlIFwKKyAgICAiCisjIGd6aXAtbmF0aXZlIHNob3VsZCBiZSBsaXN0ZWQgYWJvdmU/CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQYWNrYWdlIGRlZmF1bHQgdmFyaWFibGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1BOID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfSIKK1BWID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsxXSBvciAnMS4wJ30iCitQUiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMl0gb3IgJ3IwJ30iCitQRiA9ICIke1BOfS0ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorRVhURU5EUEUgPSAiJHtAWycnLCcke1BFXHg3ZF8nXVtpbnQoZC5nZXRWYXIoJ1BFJywgVHJ1ZSkgb3IgMCkgPiAwXX0iCitQID0gIiR7UE59LSR7UFZ9IgorCitFWFRFTkRQUkFVVE8gPSAiJHtAWycuJHtQUkFVVE9ceDdkJywnJ11bZC5nZXRWYXIoJ1BSQVVUTycsIFRydWUpIGlzIE5vbmVdfSIKK1BSQVVUT0lOWCA9ICIke1BGfSIKKworUEtHViA/PSAiJHtQVn0iCitQS0dSID89ICIke1BSfSR7RVhURU5EUFJBVVRPfSIKK1BLR0UgPz0gIiR7QFsnJywnJHtQRVx4N2QnXVtpbnQoZC5nZXRWYXIoJ1BFJywgVHJ1ZSkgb3IgMCkgPiAwXX0iCitFWFRFTkRQS0dFVkVSID0gIiR7QFsnJywnJHtQS0dFXHg3ZDonXVtkLmdldFZhcignUEtHRScsIFRydWUpLnN0cmlwKCkgIT0gJyddfSIKK0VYVEVORFBLR1YgPz0gIiR7RVhURU5EUEtHRVZFUn0ke1BLR1Z9LSR7UEtHUn0iCisKKyMgQmFzZSBwYWNrYWdlIG5hbWUKKyMgQXV0b21hdGljYWxseSBkZXJpdmVzICJmb28iIGZyb20gImZvby1uYXRpdmUiLCAiZm9vLWNyb3NzIiBvciAiZm9vLWluaXRpYWwiCisjIG90aGVyd2lzZSBpdCBpcyB0aGUgc2FtZSBhcyBQTiBhbmQgUAorU1BFQ0lBTF9QS0dTVUZGSVggPSAiLW5hdGl2ZSAtY3Jvc3MgLWluaXRpYWwgLWludGVybWVkaWF0ZSAtY3Jvc3NzZGsgLWNyb3NzLWNhbmFkaWFuIgorQlBOID0gIiR7QGJhc2VfcHJ1bmVfc3VmZml4KGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkLmdldFZhcignU1BFQ0lBTF9QS0dTVUZGSVgnLCBUcnVlKS5zcGxpdCgpLCBkKX0iCitCUCA9ICIke0JQTn0tJHtQVn0iCisKKyMgUGFja2FnZSBpbmZvLgorCitTRUNUSU9OID0gImJhc2UiCitQUklPUklUWSA9ICJvcHRpb25hbCIKK1NVTU1BUlkgPz0gIiR7UE59IHZlcnNpb24gJHtQVn0tJHtQUn0iCitERVNDUklQVElPTiA/PSAiJHtTVU1NQVJZfS4iCisKKyMgVGhlIGZvbGxvd2luZyB0d28gYXJlIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGV5IHJlc3VsdCBpbiBhIHJlY3Vyc2l2ZQorIyBkZWZpbml0aW9uIG9mIHRoZSB2YXJpYWJsZSBpbiBzb21lIGNvcm5lciBjYXNlcy4gIFRoZXNlIGFyZSBsZWZ0IGluCisjIHRvIGlsbHVzdHJhdGUgdGhlIGludGVuZGVkIGJlaGF2aW9yLgorI1NVTU1BUllfJHtQTn0gPz0gIiR7U1VNTUFSWX0iCisjREVTQ1JJUFRJT05fJHtQTn0gPz0gIiR7REVTQ1JJUFRJT059IgorCitTVU1NQVJZXyR7UE59LWRiZyA/PSAiJHtTVU1NQVJZfSAtIERlYnVnZ2luZyBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRiZyA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBFTEYgc3ltYm9scyBhbmQgcmVsYXRlZCBzb3VyY2VzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA/PSAiJHtTVU1NQVJZfSAtIERldmVsb3BtZW50IGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHN5bWJvbGljIGxpbmtzLCBoZWFkZXIgZmlsZXMsIGFuZCBcCityZWxhdGVkIGl0ZW1zIG5lY2Vzc2FyeSBmb3Igc29mdHdhcmUgZGV2ZWxvcG1lbnQuIgorCitTVU1NQVJZXyR7UE59LXN0YXRpY2RldiA/PSAiJHtTVU1NQVJZfSAtIERldmVsb3BtZW50IGZpbGVzIChTdGF0aWMgTGlicmFyaWVzKSIKK0RFU0NSSVBUSU9OXyR7UE59LXN0YXRpY2Rldj89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHN0YXRpYyBsaWJyYXJpZXMgZm9yIHNvZnR3YXJlIGRldmVsb3BtZW50LiIKKworU1VNTUFSWV8ke1BOfS1kb2MgPz0gIiR7U1VNTUFSWX0gLSBEb2N1bWVudGF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tZG9jID89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24uIgorCitMSUNFTlNFID0gIklOVkFMSUQiCitNQUlOVEFJTkVSID0gIk9FLUNvcmUgRGV2ZWxvcGVycyA8b3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZz4iCitIT01FUEFHRSA9ICIiCisKKyMgUGFja2FnZSBkZXBlbmRlbmNpZXMgYW5kIHByb3ZpZGVzLgorCisjIEVuc3VyZSB0aGF0IC1kZXYgcGFja2FnZXMgcmVjb21tZW5kIHRoZSBjb3JyZXNwb25kaW5nIC1kZXYgcGFja2FnZXMgb2YgdGhlaXIKKyMgZGVwcywgYW5kIHRoZSBzYW1lIGZvciAtZGJnLgorREVQQ0hBSU5fUFJFICA9ICIiCitERVBDSEFJTl9QT1NUID0gIi1kZXYgLWRiZyIKKworREVQRU5EUyA9ICIiCitSREVQRU5EUyA9ICIiCitQUk9WSURFUyA9ICIiCitQUk9WSURFU19wcmVwZW5kID0gIiR7UE59ICIKK1JQUk9WSURFUyA9ICIiCisKK01VTFRJX1BST1ZJREVSX1dISVRFTElTVCA9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9saWJpbnRsLW5hdGl2ZSB2aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsIHZpcnR1YWwveHNlcnZlciB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyIKKworU09MSUJTID0gIi5zby4qIgorU09MSUJTX2RhcndpbiA9ICIuZHlsaWIiCisKK1NPTElCU0RFViA9ICIuc28iCisjIER1ZSB0byB0aGUgb3JkZXJpbmcgb2YgUEFDS0FHRVMgYW5kIHRoZSBuYW1pbmcgb2YgdGhlIGRldiBzeW1saW5rcyBvbiBkYXJ3aW4sCisjIHdlIGNhbid0IG1ha2UgdGhlIHN5bWxpbmtzIGVuZCB1cCBpbiB0aGUgLWRldiBwYWNrYWdlcyBlYXNpbHkgYXQgdGhpcyBwb2ludC4gVGhpcyBoYWNrCisjIGF0IGxlYXN0IG1lYW5zIGJ1aWxkcyBhcmVuJ3QgY29tcGxldGVseSBicm9rZW4gYW5kIHN5bWxpbmtzIGRvbid0IHRha2UgdXAgbXVjaCBzcGFjZS4KK1NPTElCU0RFVl9kYXJ3aW4gPSAiLmR5bGliYnJva2VuIgorCitQQUNLQUdFX0JFRk9SRV9QTiA/PSAiIgorUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZG9jICR7UE59LWxvY2FsZSAke1BBQ0tBR0VfQkVGT1JFX1BOfSAke1BOfSIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LWxvY2FsZS0uKiIKK0ZJTEVTID0gIiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qICR7bGliZXhlY2Rpcn0vKiAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vKiAke2Jhc2Vfc2JpbmRpcn0vKiBcCisgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS8qJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICR7YmFzZV9wcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgJHtwcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgXAorICAgICAgICAgICAgJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJkaXJ9LyR7QlBOfS8qIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L2lkbCAke2RhdGFkaXJ9L29tZiAke2RhdGFkaXJ9L3NvdW5kcyBcCisgICAgICAgICAgICAke2xpYmRpcn0vYm9ub2JvL3NlcnZlcnMiCisKK0ZJTEVTXyR7UE59LWJpbiA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyoiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHttYW5kaXJ9ICR7aW5mb2Rpcn0gJHtkYXRhZGlyfS9ndGstZG9jIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vZ25vbWUvaGVscCIKK1NFQ1RJT05fJHtQTn0tZG9jID0gImRvYyIKKworRklMRVNfU09MSUJTREVWID89ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtGSUxFU19TT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtkYXRhZGlyfS9wa2djb25maWcgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYWNsb2NhbCAke2Jhc2VfbGliZGlyfS8qLm8gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS8ke0JQTn0vKi5sYSAke2Jhc2VfbGliZGlyfS8qLmxhIgorU0VDVElPTl8ke1BOfS1kZXYgPSAiZGV2ZWwiCitBTExPV19FTVBUWV8ke1BOfS1kZXYgPSAiMSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIke1BOfSAoPSAke0VYVEVORFBLR1Z9KSIKKworRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5hICR7bGliZGlyfS8ke0JQTn0vKi5hIgorU0VDVElPTl8ke1BOfS1zdGF0aWNkZXYgPSAiZGV2ZWwiCitSREVQRU5EU18ke1BOfS1zdGF0aWNkZXYgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitET1RERUJVRy1kYmcgPSAiJHtiaW5kaXJ9Ly5kZWJ1ZyAke3NiaW5kaXJ9Ly5kZWJ1ZyAke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyAke2xpYmRpcn0vLmRlYnVnIFwKKyAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9Ly5kZWJ1ZyAke2Jhc2Vfc2JpbmRpcn0vLmRlYnVnICR7YmFzZV9saWJkaXJ9Ly5kZWJ1ZyAke2xpYmRpcn0vJHtCUE59Ly5kZWJ1ZyBcCisgICAgICAgICAgICAke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvLmRlYnVnICR7bGliZXhlY2Rpcn0vJHtCUE59Ly5kZWJ1ZyAvdXNyL3NyYy9kZWJ1ZyIKKworREVCVUdGSUxFRElSRUNUT1JZLWRiZyA9ICIvdXNyL2xpYi9kZWJ1ZyAvdXNyL3NyYy9kZWJ1ZyIKKworRklMRVNfJHtQTn0tZGJnID0gIiR7QGQuZ2V0VmFyKFsnRE9UREVCVUctZGJnJywgJ0RFQlVHRklMRURJUkVDVE9SWS1kYmcnXVtkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy1maWxlLWRpcmVjdG9yeSddLCBUcnVlKX0iCisKK1NFQ1RJT05fJHtQTn0tZGJnID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tZGJnID0gIjEiCisKK0ZJTEVTXyR7UE59LWxvY2FsZSA9ICIke2RhdGFkaXJ9L2xvY2FsZSIKKworIyBGaWxlIG1hbmlmZXN0CisKK0ZJTEVfRElSTkFNRSA9ICIke0Bvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpfSIKKyMgRklMRVNQQVRIIGlzIHNldCBpbiBiYXNlLmJiY2xhc3MKKyNGSUxFU1BBVEggPSAiJHtGSUxFX0RJUk5BTUV9LyR7UEZ9OiR7RklMRV9ESVJOQU1FfS8ke1B9OiR7RklMRV9ESVJOQU1FfS8ke1BOfToke0ZJTEVfRElSTkFNRX0vJHtCUH06JHtGSUxFX0RJUk5BTUV9LyR7QlBOfToke0ZJTEVfRElSTkFNRX0vZmlsZXM6JHtGSUxFX0RJUk5BTUV9IgorIyBUaGlzIGRlZmF1bHQgd2FzIG9ubHkgdXNlZCBmb3IgY2hlY2tpbmcKK0ZJTEVTRVhUUkFQQVRIUyA/PSAiX19kZWZhdWx0OiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdlbmVyYWwgd29yayBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzIGZvciB0aGUgYnVpbGQgc3lzdGVtLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RNUERJUiA/PSAiJHtUT1BESVJ9L3RtcCIKK0NBQ0hFID0gIiR7VE1QRElSfS9jYWNoZSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXX0ke0BbJycsICcvJyArIHN0cihkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV19IgorIyBUaGUgcGVyc2lzdGVudCBjYWNoZSBzaG91bGQgYmUgc2hhcmVkIGJ5IGFsbCBidWlsZHMKK1BFUlNJU1RFTlRfRElSID0gIiR7VE9QRElSfS9jYWNoZSIKK0xPR19ESVIgPSAiJHtUTVBESVJ9L2xvZyIKK0NPX0RJUiA9ICIke0RMX0RJUn0iCitDVlNESVIgPSAiJHtDT19ESVJ9L2N2cyIKK1NWTkRJUiA9ICIke0NPX0RJUn0vc3ZuIgorR0lURElSID0gIiR7Q09fRElSfS9naXQyIgorQlpSRElSID0gIiR7Q09fRElSfS9ienIiCitIR0RJUiA9ICIke0NPX0RJUn0vaGciCisKK1NUQU1QU19ESVIgPz0gIiR7VE1QRElSfS9zdGFtcHMiCitTVEFNUCA9ICIke1NUQU1QU19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCitTVEFNUENMRUFOID0gIiR7U1RBTVBTX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vKi0qIgorQkFTRV9XT1JLRElSID89ICIke1RNUERJUn0vd29yayIKK1dPUktESVIgPSAiJHtCQVNFX1dPUktESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCitUID0gIiR7V09SS0RJUn0vdGVtcCIKK0QgPSAiJHtXT1JLRElSfS9pbWFnZSIKK1MgPSAiJHtXT1JLRElSfS8ke0JQfSIKK0IgPSAiJHtTfSIKKworU1RBR0lOR19ESVIgPSAiJHtUTVBESVJ9L3N5c3Jvb3RzIgorCitTVEFHSU5HX0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUn0vJHtCVUlMRF9TWVN9IgorU1RBR0lOR19CSU5ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0iCitTVEFHSU5HX0JJTkRJUl9DUk9TUyA9ICIke1NUQUdJTkdfQklORElSfS9jcm9zc3NjcmlwdHMiCitTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4gPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorU1RBR0lOR19MSUJESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7bGliZGlyX25hdGl2ZX0iCitTVEFHSU5HX0xJQkVYRUNESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7bGliZXhlY2Rpcl9uYXRpdmV9IgorU1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiYXNlX2xpYmRpcl9uYXRpdmV9IgorU1RBR0lOR19TQklORElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3NiaW5kaXJfbmF0aXZlfSIKK1NUQUdJTkdfSU5DRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2luY2x1ZGVkaXJfbmF0aXZlfSIKK1NUQUdJTkdfRVRDRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3N5c2NvbmZkaXJfbmF0aXZlfSIKK1NUQUdJTkdfREFUQURJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0iCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSIKK1NUQUdJTkdfQklORElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2JpbmRpcn0iCitTVEFHSU5HX0xJQkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJkaXJ9IgorU1RBR0lOR19MSUJFWEVDRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9IgorU1RBR0lOR19CQVNFTElCRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2Jhc2VfbGliZGlyfSIKK1NUQUdJTkdfSU5DRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2luY2x1ZGVkaXJ9IgorU1RBR0lOR19EQVRBRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2RhdGFkaXJ9IgorU1RBR0lOR19FWEVDUFJFRklYRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2V4ZWNfcHJlZml4fSIKK1NUQUdJTkdfTE9BREVSX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9L2xvYWRlciIKK1NUQUdJTkdfRklSTVdBUkVfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vZmlybXdhcmUiCisKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9IgorU1RBR0lOR19ESVJfVENCT09UU1RSQVAgPSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9LXRjYm9vdHN0cmFwIgorCisjIFNldHRpbmcgREVQTE9ZX0RJUiBvdXRzaWRlIG9mIFRNUERJUiBpcyBoZWxwZnVsLCB3aGVuIHlvdSBhcmUgdXNpbmcKKyMgcGFja2FnZWQgc3RhZ2luZyBhbmQvb3IgbXVsdGltYWNoaW5lLgorREVQTE9ZX0RJUiA/PSAiJHtUTVBESVJ9L2RlcGxveSIKK0RFUExPWV9ESVJfVEFSID0gIiR7REVQTE9ZX0RJUn0vdGFyIgorREVQTE9ZX0RJUl9JUEsgPSAiJHtERVBMT1lfRElSfS9pcGsiCitERVBMT1lfRElSX1JQTSA9ICIke0RFUExPWV9ESVJ9L3JwbSIKK0RFUExPWV9ESVJfREVCID0gIiR7REVQTE9ZX0RJUn0vZGViIgorREVQTE9ZX0RJUl9JTUFHRSA/PSAiJHtERVBMT1lfRElSfS9pbWFnZXMvJHtNQUNISU5FfSIKK0RFUExPWV9ESVJfVE9PTFMgPSAiJHtERVBMT1lfRElSfS90b29scyIKKworUEtHREFUQV9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9wa2dkYXRhIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0RLIHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTREtfTkFNRV9QUkVGSVggPz0gIm9lY29yZSIKK1NES19OQU1FID0gIiR7U0RLX05BTUVfUFJFRklYfS0ke1NES19BUkNIfS0ke1RVTkVfUEtHQVJDSH0iCitTREtQQVRIID0gIi91c3IvbG9jYWwvJHtTREtfTkFNRV9QUkVGSVh9LSR7U0RLX0FSQ0h9IgorU0RLUEFUSE5BVElWRSA9ICIke1NES1BBVEh9L3N5c3Jvb3RzLyR7U0RLX1NZU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBLZXJuZWwgaW5mby4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitPTERFU1RfS0VSTkVMID0gIjIuNi4zMiIKK09MREVTVF9LRVJORUxfYWFyY2g2NCA9ICIzLjE0IgorU1RBR0lOR19LRVJORUxfRElSID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC8ke01BQ0hJTkV9L2tlcm5lbC1zb3VyY2UiCitTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvJHtNQUNISU5FfS9rZXJuZWwtYnVpbGQtYXJ0aWZhY3RzIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3BlY2lmaWMgaW1hZ2UgY3JlYXRpb24gYW5kIHJvb3RmcyBwb3B1bGF0aW9uIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworSU1BR0VfUk9PVEZTID0gIiR7V09SS0RJUn0vcm9vdGZzIgorSU1BR0VfQkFTRU5BTUUgPSAiJHtQTn0iCitJTUFHRV9OQU1FID0gIiR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCitJTUFHRV9OQU1FW3ZhcmRlcHNleGNsdWRlXSArPSAiREFURVRJTUUiCitJTUFHRV9MSU5LX05BTUUgPSAiJHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfSIKKworIyBUaGlzIG9wdGlvbiBhbGxvd3MgZm9yIGEgcGVyY2VudGFnZSBvdmVyYWdlIG9mIHRoZSBhY3R1YWwgaW1hZ2Ugc2l6ZSByYXRoZXIgdGhhbiBhCisjIGZpeGVkIGV4dHJhIHNwYWNlLCB0aGlzIGlzIHNwYWNlIG5lZWRlZCBmb3IgaW5pdGlhbCBzdGFydHVwIGFuZCBiYXNpYyBvcGVyYXRpb25zLgorSU1BR0VfT1ZFUkhFQURfRkFDVE9SID89ICIxLjMiCisjIFRoaXMgb3B0aW9uIGFsbG93cyBmb3IgYWRkaW5nIGFkZGl0aW9uYWwgc3BhY2UgaW4gSyBhYm92ZSBhbmQgYmV5b25kIHdoYXQgdGhlCisjIElNQUdFX09WRVJIRUFEX0ZBQ1RPUiBtaWdodCBhZGQuIFRoaXMgc3BhY2UgaXMgZm9yIGFkZGl0aW9uYWwgcGFja2FnZXMsIHVzZXIgZGF0YSwgLi4uCisjIFRvIHNldCBhIGZpeGVkIHNpemUgdGhlbiBvdmVycmlkaW5nIElNQUdFX1JPT1RGU19TSVpFIHdpdGggdGhlIG1heCBzaXplIG9uZSB3YW50cworIyBzaG91bGQgZG8gdGhlIHRyaWNrCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPz0gIjAiCisKK0VYVFJBX0lNQUdFREVQRU5EUyA9ICIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUb29sY2hhaW4gaW5mby4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQQVRIX3ByZXBlbmQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0czoke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn06JHtTVEFHSU5HX0JJTkRJUl9DUk9TU306JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX06JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9zYmluZGlyX25hdGl2ZX06JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiYXNlX2JpbmRpcl9uYXRpdmV9OiIKK2V4cG9ydCBQQVRICisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCdWlsZCB1dGlsaXR5IGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQ0NBQ0hFID8/PSAiIgorIyBEaXNhYmxlIGNjYWNoZSBleHBsaWNpdGx5IGlmIENDQUNIRSBpcyBudWxsIHNpbmNlIGdjYyBtYXkgYmUgYSBzeW1saW5rCisjIG9mIGNjYWNoZSBzb21lIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIEZlZG9yYSAxNykuCitleHBvcnQgQ0NBQ0hFX0RJU0FCTEUgPz89ICIke0BbMCwxXVtkLmdldFZhcignQ0NBQ0hFJywgVHJ1ZSkgPT0gJyddfSIKKyMgQXNzaWduIENDQUNIRV9ESVIgYSBkZWZhdWx0IHZhbHVlIHRvIGZpeCBhIGJ1ZyBvZiBjY2FjaGUgMy4xLjcsCisjIHNpbmNlIGl0IHdvdWxkIGFsd2F5cyBjcmVhdGUgQ0NBQ0hFX0RJUi8uY2NhY2hlIGV2ZW4gaWYKKyMgQ0NBQ0hFX0RJU0FCTEUgPSAxLgorZXhwb3J0IENDQUNIRV9ESVIgPz89ICIke0Bvcy5nZXRlbnYoJ0hPTUUnKX0iCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCitleHBvcnQgQ0MgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iCitleHBvcnQgQ1hYID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9ZysrICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IEZDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2ZvcnRyYW4gJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iCitleHBvcnQgQ1BQID0gIiR7SE9TVF9QUkVGSVh9Z2NjIC1FJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtIT1NUX0NDX0FSQ0h9IgorZXhwb3J0IExEID0gIiR7SE9TVF9QUkVGSVh9bGQke1RPT0xDSEFJTl9PUFRJT05TfSAke0hPU1RfTERfQVJDSH0iCitleHBvcnQgQ0NMRCA9ICIke0NDfSIKK2V4cG9ydCBBUiA9ICIke0hPU1RfUFJFRklYfWFyIgorZXhwb3J0IEFTID0gIiR7SE9TVF9QUkVGSVh9YXMgJHtIT1NUX0FTX0FSQ0h9IgorZXhwb3J0IFJBTkxJQiA9ICIke0hPU1RfUFJFRklYfXJhbmxpYiIKK2V4cG9ydCBTVFJJUCA9ICIke0hPU1RfUFJFRklYfXN0cmlwIgorZXhwb3J0IE9CSkNPUFkgPSAiJHtIT1NUX1BSRUZJWH1vYmpjb3B5IgorZXhwb3J0IE9CSkRVTVAgPSAiJHtIT1NUX1BSRUZJWH1vYmpkdW1wIgorZXhwb3J0IFNUUklOR1MgPSAiJHtIT1NUX1BSRUZJWH1zdHJpbmdzIgorZXhwb3J0IE5NID0gIiR7SE9TVF9QUkVGSVh9bm0iCitQWVRIT04gPSAiJHtAc3lzLmV4ZWN1dGFibGV9IgorCitleHBvcnQgQlVJTERfQ0MgPSAiJHtDQ0FDSEV9JHtCVUlMRF9QUkVGSVh9Z2NjICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfQ1hYID0gIiR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWcrKyAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0ZDID0gIiR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWdmb3J0cmFuICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfQ1BQID0gIiR7QlVJTERfUFJFRklYfWdjYyAke0JVSUxEX0NDX0FSQ0h9IC1FIgorZXhwb3J0IEJVSUxEX0xEID0gIiR7QlVJTERfUFJFRklYfWxkICR7QlVJTERfTERfQVJDSH0iCitleHBvcnQgQlVJTERfQ0NMRCA9ICIke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlMRF9DQ19BUkNIfSIKK2V4cG9ydCBCVUlMRF9BUiA9ICIke0JVSUxEX1BSRUZJWH1hciIKK2V4cG9ydCBCVUlMRF9BUyA9ICIke0JVSUxEX1BSRUZJWH1hcyAke0JVSUxEX0FTX0FSQ0h9IgorZXhwb3J0IEJVSUxEX1JBTkxJQiA9ICIke0JVSUxEX1BSRUZJWH1yYW5saWIiCitleHBvcnQgQlVJTERfU1RSSVAgPSAiJHtCVUlMRF9QUkVGSVh9c3RyaXAiCitleHBvcnQgQlVJTERfTk0gPSAiJHtCVUlMRF9QUkVGSVh9bm0iCisKK2V4cG9ydCBNQUtFID0gIm1ha2UiCitFWFRSQV9PRU1BS0UgPSAiLWUgTUFLRUZMQUdTPSIKK0VYVFJBX09FQ09ORiA9ICIiCitleHBvcnQgTENfQUxMID0gIkMiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQYXRjaCBoYW5kbGluZy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworUEFUQ0hUT09MID0gInF1aWx0IgorUEFUQ0hSRVNPTFZFID0gIm5vb3AiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCdWlsZCBmbGFncyBhbmQgb3B0aW9ucy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitleHBvcnQgQlVJTERfQ1BQRkxBR1MgPSAiLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCitCVUlMRFNES19DUFBGTEFHUyA9ICItaXN5c3RlbSR7U1RBR0lOR19JTkNESVJ9IgorZXhwb3J0IENQUEZMQUdTID0gIiR7VEFSR0VUX0NQUEZMQUdTfSIKK2V4cG9ydCBUQVJHRVRfQ1BQRkxBR1MgPSAiIgorI2V4cG9ydCBUQVJHRVRfQ1BQRkxBR1MgPSAiLWlzeXN0ZW0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9IgorCitleHBvcnQgQlVJTERfQ0ZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9ICR7QlVJTERfT1BUSU1JWkFUSU9OfSIKK0JVSUxEU0RLX0NGTEFHUyA9ICIke0JVSUxEU0RLX0NQUEZMQUdTfSAke0JVSUxEX09QVElNSVpBVElPTn0iCitleHBvcnQgQ0ZMQUdTID0gIiR7VEFSR0VUX0NGTEFHU30iCitleHBvcnQgVEFSR0VUX0NGTEFHUyA9ICIke1RBUkdFVF9DUFBGTEFHU30gJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059IgorCitleHBvcnQgQlVJTERfQ1hYRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IENYWEZMQUdTID0gIiR7VEFSR0VUX0NYWEZMQUdTfSIKK2V4cG9ydCBUQVJHRVRfQ1hYRkxBR1MgPSAiJHtUQVJHRVRfQ0ZMQUdTfSIKKworZXhwb3J0IEJVSUxEX0xERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLUwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtTzEiCisKK0JVSUxEU0RLX0xERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJHtsaWJkaXJ9IC1XbCwtTzEgXAorICAgICAgICAgICAgICAgICAgICAtTCR7U1RBR0lOR19ESVJfSE9TVH0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7YmFzZV9saWJkaXJ9IC1XbCwtTzEiCisKK0xJTktFUl9IQVNIX1NUWUxFID8/PSAiZ251IgorIyBtaXBzIGRvZXMgbm90IHN1cHBvcnQgR05VIGhhc2ggc3R5bGUgdGhlcmVmb3JlIHdlIG92ZXJyaWRlCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzZWwgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NCA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwczY0ZWwgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NG4zMiA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwczY0ZWxuMzIgPSAic3lzdiIKK1RBUkdFVF9MSU5LX0hBU0hfU1RZTEUgPz0gIiR7QFsnLVdsLC0taGFzaC1zdHlsZT1nbnUnLCcnXVtkLmdldFZhcignTElOS0VSX0hBU0hfU1RZTEUnLCBUcnVlKSAhPSAnZ251J119IgorCitleHBvcnQgTERGTEFHUyA9ICIke1RBUkdFVF9MREZMQUdTfSIKK2V4cG9ydCBUQVJHRVRfTERGTEFHUyA9ICItV2wsLU8xICR7VEFSR0VUX0xJTktfSEFTSF9TVFlMRX0iCisjZXhwb3J0IFRBUkdFVF9MREZMQUdTID0gIi1MJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsaWJkaXJ9IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bGliZGlyfSBcCisjICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtTzEiCisKKyMgV2hpY2ggZmxhZ3MgdG8gbGVhdmUgYnkgc3RyaXAtZmxhZ3MoKSBpbiBiaW4vYnVpbGQvb2VidWlsZC5zaCA/CitBTExPV0VEX0ZMQUdTID0gIi1PIC1tY3B1IC1tYXJjaCAtcGlwZSIKKworIyBQYXNzIHBhcmFsbGVsIG1ha2Ugb3B0aW9ucyB0byB0aGUgY29tcGlsZSB0YXNrCitFWFRSQV9PRU1BS0VfcHJlcGVuZF90YXNrLWNvbXBpbGUgPSAiJHtQQVJBTExFTF9NQUtFfSAiCitQQVJBTExFTF9NQUtFSU5TVCA/Pz0gIiR7UEFSQUxMRUxfTUFLRX0iCisjIFBhc3MgcGFyYWxsZWwgbWFrZSBvcHRpb25zIHRvIHRoZSBpbnN0YWxsIHRhc2sKK0VYVFJBX09FTUFLRV9wcmVwZW5kX3Rhc2staW5zdGFsbCA9ICIke1BBUkFMTEVMX01BS0VJTlNUfSAiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPcHRpbWl6YXRpb24gZmxhZ3MuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0RFQlVHX0ZMQUdTID89ICItZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMiCisjIERpc2FibGVkIHVudGlsIHRoZSBvcHRpb24gd29ya3MgcHJvcGVybHkgLWZlbGltaW5hdGUtZHdhcmYyLWR1cHMKK0ZVTExfT1BUSU1JWkFUSU9OID0gIi1PMiAtcGlwZSAke0RFQlVHX0ZMQUdTfSIKK0RFQlVHX09QVElNSVpBVElPTiA9ICItTyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAke0RFQlVHX0ZMQUdTfSAtcGlwZSIKK1NFTEVDVEVEX09QVElNSVpBVElPTiA9ICIke0BkLmdldFZhcihbJ0ZVTExfT1BUSU1JWkFUSU9OJywgJ0RFQlVHX09QVElNSVpBVElPTiddW2QuZ2V0VmFyKCdERUJVR19CVUlMRCcsIFRydWUpID09ICcxJ10sIFRydWUpfSIKK1NFTEVDVEVEX09QVElNSVpBVElPTlt2YXJkZXBzXSArPSAiRlVMTF9PUFRJTUlaQVRJT04gREVCVUdfT1BUSU1JWkFUSU9OIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIi1PMiAtcGlwZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNldHRpbmdzIHVzZWQgYnkgYml0YmFrZS1sYXllcnMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0JCTEFZRVJTX0xBWUVSSU5ERVhfVVJMID8/PSAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvIgorQkJMQVlFUlNfRkVUQ0hfRElSID8/PSAiJHtDT1JFQkFTRX0iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEb3dubG9hZCBsb2NhdGlvbnMgYW5kIHV0aWxpdGllcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBUEFDSEVfTUlSUk9SID0gImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0IgorREVCSUFOX01JUlJPUiA9ICJmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCIKK0dFTlRPT19NSVJST1IgPSAiaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcyIKK0dOT01FX0dJVCA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnIgorR05PTUVfTUlSUk9SID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzIgorR05VX01JUlJPUiA9ICJodHRwOi8vZnRwLmdudS5vcmcvZ251IgorR1BFX01JUlJPUiA9ICJodHRwOi8vZ3BlLmxpbnV4dG9nby5vcmcvZG93bmxvYWQvc291cmNlIgorS0VSTkVMT1JHX01JUlJPUiA9ICJodHRwOi8va2VybmVsLm9yZy9wdWIiCitTT1VSQ0VGT1JHRV9NSVJST1IgPSAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQiCitYTElCU19NSVJST1IgPSAiaHR0cDovL3hsaWJzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlIgorWE9SR19NSVJST1IgPSAiaHR0cDovL3hvcmcuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzIgorU0FWQU5OQUhfR05VX01JUlJPUiA9ICJodHRwOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcyIKK1NBVkFOTkFIX05PTkdOVV9NSVJST1IgPSAiaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLm5vbmdudS5vcmcvcmVsZWFzZXMiCitDUEFOX01JUlJPUiA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4iCisKK1NSQ19VUklbdmFyZGVwc2V4Y2x1ZGVdICs9ICJcCisgICAgQVBBQ0hFX01JUlJPUiBcCisgICAgQ1BBTl9NSVJST1IgXAorICAgIERFQklBTl9NSVJST1IgXAorICAgIEdFTlRPT19NSVJST1IgXAorICAgIEdOT01FX0dJVCBcCisgICAgR05PTUVfTUlSUk9SIFwKKyAgICBHTlVfTUlSUk9SIFwKKyAgICBHUEVfTUlSUk9SIFwKKyAgICBLRVJORUxPUkdfTUlSUk9SIFwKKyAgICBTQVZBTk5BSF9HTlVfTUlSUk9SIFwKKyAgICBTQVZBTk5BSF9OT05HTlVfTUlSUk9SIFwKKyAgICBTT1VSQ0VGT1JHRV9NSVJST1IgXAorICAgIFhMSUJTX01JUlJPUiBcCisgICAgWE9SR19NSVJST1IgXAorIgorCisjIFlvdSBjYW4gdXNlIHRoZSBtaXJyb3Igb2YgeW91ciBjb3VudHJ5IHRvIGdldCBmYXN0ZXIgZG93bmxvYWRzIGJ5IHB1dHRpbmcKKyMgIGV4cG9ydCBERUJJQU5fTUlSUk9SID0gImZ0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIgorIyAgICAgaW50byB5b3VyIGxvY2FsLmNvbmYKKworRkVUQ0hDTURfc3ZuID0gIi91c3IvYmluL2VudiBzdm4gLS1ub24taW50ZXJhY3RpdmUgLS10cnVzdC1zZXJ2ZXItY2VydCIKK0ZFVENIQ01EX2N2cyA9ICIvdXNyL2Jpbi9lbnYgY3ZzIgorRkVUQ0hDTURfd2dldCA9ICIvdXNyL2Jpbi9lbnYgd2dldCAtdCAyIC1UIDMwIC1udiAtLXBhc3NpdmUtZnRwIC0tbm8tY2hlY2stY2VydGlmaWNhdGUiCitGRVRDSENNRF9ienIgPSAiL3Vzci9iaW4vZW52IGJ6ciIKK0ZFVENIQ01EX2hnID0gIi91c3IvYmluL2VudiBoZyIKKworU1JDREFURSA9ICIke0RBVEV9IgorU1JDUkVWID8/PSAiSU5WQUxJRCIKK0FVVE9SRVYgPSAiJHtAYmIuZmV0Y2gyLmdldF9hdXRvcmV2KGQpfSIKK1NSQ1BWID0gIiR7QGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpfSIKK1NSQ1BWW3ZhcmRlcHZhbHVlXSA9ICIke1NSQ1BWfSIKKworU1JDX1VSSSA9ICIiCisKKyMgVXNlIHBzZXVkbyBhcyB0aGUgZmFrZXJvb3QgaW1wbGVtZW50YXRpb24KK1BTRVVET19MT0NBTFNUQVRFRElSID89ICIke1dPUktESVJ9L3BzZXVkby8iCitQU0VVRE9fUEFTU1dEID89ICIke1NUQUdJTkdfRElSX1RBUkdFVH06JHtTVEFHSU5HX0RJUl9OQVRJVkV9IgorZXhwb3J0IFBTRVVET19ESVNBQkxFRCA9ICIxIgorI2V4cG9ydCBQU0VVRE9fUFJFRklYID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCisjZXhwb3J0IFBTRVVET19CSU5ESVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfSIKKyNleHBvcnQgUFNFVURPX0xJQkRJUiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0kUFNFVURPQklORElSLy4uL2xpYi9wc2V1ZG8vbGliCitGQUtFUk9PVEJBU0VFTlYgPSAiUFNFVURPX0JJTkRJUj0ke1NUQUdJTkdfQklORElSX05BVElWRX0gUFNFVURPX0xJQkRJUj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vLi4vbGliL3BzZXVkby9saWIgUFNFVURPX1BSRUZJWD0ke1NUQUdJTkdfQklORElSX05BVElWRX0vLi4vLi4vIFBTRVVET19ESVNBQkxFRD0xIgorRkFLRVJPT1RDTUQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BzZXVkbyIKK0ZBS0VST09URU5WID0gIlBTRVVET19QUkVGSVg9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSBQU0VVRE9fTE9DQUxTVEFURURJUj0ke1BTRVVET19MT0NBTFNUQVRFRElSfSBQU0VVRE9fUEFTU1dEPSR7UFNFVURPX1BBU1NXRH0gUFNFVURPX05PU1lNTElOS0VYUD0xIFBTRVVET19ESVNBQkxFRD0wIgorRkFLRVJPT1ROT0VOViA9ICJQU0VVRE9fVU5MT0FEPTEiCitGQUtFUk9PVERJUlMgPSAiJHtQU0VVRE9fTE9DQUxTVEFURURJUn0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9mYWtlcm9vdC1uYXRpdmUgPz0gInBzZXVkby1uYXRpdmUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNaXNjZWxsYW5lb3VzIHV0aWxpdGllcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEdOVSBwYXRjaCB0cmllcyB0byBiZSBpbnRlbGxnZW50IGFib3V0IGNoZWNraW5nIG91dCByZWFkLW9ubHkgZmlsZXMgZnJvbQorIyBhIFJDUywgd2hpY2ggZnJlYWtzIG91dCB0aG9zZSBzcGVjaWFsIGZvbGtzIHdpdGggYWN0aXZlIFBlcmZvcmNlIGNsaWVudHMKKyMgdGhlIGZvbGxvd2luZyBtYWtlcyBwYXRjaCBpZ25vcmUgUkNTOgorCitleHBvcnQgUEFUQ0hfR0VUPSIwIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTm90IHN1cmUgYWJvdXQgdGhlIHJlc3Qgb2YgdGhpcyB5ZXQuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBQcmUtYnVpbGQgY29uZmlndXJhdGlvbiBvdXRwdXQKK0JVSUxEQ0ZHX0hFQURFUiA9ICJCdWlsZCBDb25maWd1cmF0aW9uOiIKK0JVSUxEQ0ZHX1ZBUlMgPSAiQkJfVkVSU0lPTiBCVUlMRF9TWVMgTkFUSVZFTFNCU1RSSU5HIFRBUkdFVF9TWVMgTUFDSElORSBESVNUUk8gRElTVFJPX1ZFUlNJT04gVFVORV9GRUFUVVJFUyBUQVJHRVRfRlBVIgorQlVJTERDRkdfVkFSU1t0eXBlXSA9ICJsaXN0IgorQlVJTERDRkdfTkVFREVEVkFSUyA9ICJUQVJHRVRfQVJDSCBUQVJHRVRfT1MiCitCVUlMRENGR19ORUVERURWQVJTW3R5cGVdID0gImxpc3QiCisKKyMgT3RoZXIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmRpcn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfUEFUSCA9ICIke1BLR19DT05GSUdfRElSfToke1NUQUdJTkdfREFUQURJUn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfTElCRElSID0gIiR7UEtHX0NPTkZJR19ESVJ9IgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKK2V4cG9ydCBQS0dfQ09ORklHX0RJU0FCTEVfVU5JTlNUQUxMRUQgPSAieWVzIgorCisjIyMKKyMjIyBDb25maWcgZmlsZSBwcm9jZXNzaW5nCisjIyMKKworIyBBbiBlbXB0eSBkaXN0cm8gbGVhZHMgdG8gOjogZW50cmllcyBpbiBPVkVSUklERVMgYW5kIEZJTEVPVkVSUklERVMgd2hpY2gKKyMgaXMgYSBiYWQgaWRlYS4gU2V0dGluZyBhIGR1bW15IHZhbHVlIGlzIGJldHRlciB0aGFuIGEgdG9uIG9mIGFub255bW91cyBweXRob24uCitESVNUUk8gPz89ICJub2Rpc3RybyIKK0RJU1RST19OQU1FID8/PSAiT3BlbkVtYmVkZGVkIgorIyBPdmVycmlkZXMgYXJlIHByb2Nlc3NlZCBsZWZ0IHRvIHJpZ2h0LCBzbyB0aGUgb25lcyB0aGF0IGFyZSBuYW1lZCBsYXRlciB0YWtlIHByZWNlZGVuY2UuCisjIFlvdSBnZW5lcmFsbHkgd2FudCB0aGVtIHRvIGdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYy4KKyMKKyMgVGhpcyBtZWFucyB0aGF0IGFuIGVudmlvbm1lbnQgdmFyaWFibGUgbmFtZWQgJzxmb28+X2FybScgb3ZlcnJpZGVzIGFuCisjIGVudmlyb25tZW50IHZhcmlhYmxlICc8Zm9vPicgKHdoZW4gJHtUQVJHRVRfQVJDSH0gaXMgYXJtKS4KKyMgQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgJzxmb28+X3FlbXVhcm0nIG92ZXJyaWRlcyAnPGZvbz4nIGFuZCBvdmVycmlkZXMKKyMgJzxmb28+X2FybScgd2hlbiAke01BQ0hJTkV9IGlzICdxZW11YXJtJy4KKyMgSWYgeW91IHVzZSBjb21iaW5hdGlvbiBpZSAnPGZvbz5fcWVtdWFybV9hcm0nLCB0aGVuICc8Zm9vPl9xZW11YXJtX2FybScgd2lsbCBvdmVycmlkZQorIyAnPGZvbz5fcWVtdWFybScgYW5kIHRoZW4gJzxmb28+JyB3aWxsIGJlIG92ZXJyaWRlbiB3aXRoIHRoYXQgdmFsdWUgZnJvbSAnPGZvbz5fcWVtdWFybScuCisjIEFuZCBmaW5hbGx5ICc8Zm9vPl9mb3JjZXZhcmlhYmxlJyBvdmVycmlkZXMgYW55IHN0YW5kYXJkIHZhcmlhYmxlLCB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5LgorIworIyBUaGlzIHdvcmtzIGZvciAgZnVuY3Rpb25zIGFzIHdlbGwsIHRoZXkgYXJlIHJlYWxseSBqdXN0IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyMgRGVmYXVsdCBPVkVSUklERVMgdG8gbWFrZSBjb21waWxhdGlvbiBmYWlsIGZhc3QgaW4gY2FzZSBvZiBidWlsZCBzeXN0ZW0gbWlzY29uZmlndXJhdGlvbi4KK09WRVJSSURFUyA9ICIke1RBUkdFVF9PU306JHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfTpidWlsZC0ke0JVSUxEX09TfTpwbi0ke1BOfToke01BQ0hJTkVPVkVSUklERVN9OiR7RElTVFJPT1ZFUlJJREVTfToke0NMQVNTT1ZFUlJJREV9OmZvcmNldmFyaWFibGUiCitPVkVSUklERVNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkVPVkVSUklERVMiCitDTEFTU09WRVJSSURFID89ICJjbGFzcy10YXJnZXQiCitESVNUUk9PVkVSUklERVMgPz0gIiR7QGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKSBvciAnJ30iCitNQUNISU5FT1ZFUlJJREVTID89ICIke01BQ0hJTkV9IgorTUFDSElORU9WRVJSSURFU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSIKKworRklMRVNPVkVSUklERVMgPSAiJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfToke01BQ0hJTkVPVkVSUklERVN9OiR7RElTVFJPT1ZFUlJJREVTfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEluY2x1ZGUgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyBmaWxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCityZXF1aXJlIGNvbmYvYWJpX3ZlcnNpb24uY29uZgoraW5jbHVkZSBjb25mL3NpdGUuY29uZgoraW5jbHVkZSBjb25mL2F1dG8uY29uZgoraW5jbHVkZSBjb25mL2xvY2FsLmNvbmYKK2luY2x1ZGUgY29uZi9idWlsZC8ke0JVSUxEX1NZU30uY29uZgoraW5jbHVkZSBjb25mL3RhcmdldC8ke1RBUkdFVF9TWVN9LmNvbmYKK2luY2x1ZGUgY29uZi9tYWNoaW5lLyR7TUFDSElORX0uY29uZgoraW5jbHVkZSBjb25mL21hY2hpbmUtc2RrLyR7U0RLTUFDSElORX0uY29uZgoraW5jbHVkZSBjb25mL2Rpc3Ryby8ke0RJU1RST30uY29uZgoraW5jbHVkZSBjb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZgoraW5jbHVkZSBjb25mL2RvY3VtZW50YXRpb24uY29uZgoraW5jbHVkZSBjb25mL2xpY2Vuc2VzLmNvbmYKK3JlcXVpcmUgY29uZi9zYW5pdHkuY29uZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2VhayB2YXJpYWJsZXMgKHVzdWFsbHkgdG8gcmV0YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RMX0RJUiA/PSAiJHtUT1BESVJ9L2Rvd25sb2FkcyIKK1NTVEFURV9ESVIgPz0gIiR7VE9QRElSfS9zc3RhdGUtY2FjaGUiCitJTUFHRV9GU1RZUEVTID89ICJ0YXIuZ3oiCitJTklUUkFNRlNfRlNUWVBFUyA/PSAiY3Bpby5neiIKK0RFRkFVTFRfVEFTS19QUk9WSURFUiA/PSAicGFja2FnZWdyb3VwLWJhc2UiCitNQUNISU5FX1RBU0tfUFJPVklERVIgPz0gIiR7REVGQVVMVF9UQVNLX1BST1ZJREVSfSIKKworIyBUaGUgc2l6ZSBpbiBLYnl0ZXMgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgaWYgaXQgaXMgbGFyZ2VyIHRoYW4KKyMgdGhlIHJlcXVpcmVkIHNpemUgKGR1IC1rcyBJTUFHRV9ST09URlMgKiBJTUFHRV9PVkVSSEVBRF9GQUNUT1IpLAorIyBhbmQgbm8gZWZmZWN0IGlmIGxlc3MgdGhhbiBpdC4KK0lNQUdFX1JPT1RGU19TSVpFID8/PSAiNjU1MzYiCisKKyMgRm9yY2VmdWxseSBzZXQgQ0FDSEUgbm93IHNvIGZ1dHVyZSBjaGFuZ2VzIHRvIHRoaW5ncyBsaWtlCisjIE1BQ0hJTkUgZG9uJ3QgY2hhbmdlIHRoZSBwYXRoIHRvIHRoZSBjYWNoZQorQ0FDSEUgOj0gIiR7Q0FDSEV9IgorCisjIERlZmF1bHQgdG8gc2V0dGluZyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGNwdSBjb3VudAorQkJfTlVNQkVSX1RIUkVBRFMgPz0gIiR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKK1BBUkFMTEVMX01BS0UgPz0gIi1qICR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1hZ2ljIENvb2tpZSBmb3IgU0FOSVRZIENIRUNLCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK09FU19CSVRCQUtFX0NPTkYgPSAiMSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1hY2hpbmUgcHJvcGVydGllcyBhbmQgcGFja2FnZWdyb3VwLWJhc2Ugc3R1ZmYKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitNQUNISU5FX0ZFQVRVUkVTID89ICIiCitESVNUUk9fRkVBVFVSRVMgPz0gIiIKKworRElTVFJPX0VYVFJBX1JERVBFTkRTID89ICIiCitESVNUUk9fRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKK01BQ0hJTkVfRVhUUkFfUkRFUEVORFMgPz0gIiIKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTID89ICIiCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyA/PSAiIgorCitFWFRSQV9JTUFHRV9GRUFUVVJFUyA/Pz0gIiIKK0lNQUdFX0ZFQVRVUkVTICs9ICIke0VYVFJBX0lNQUdFX0ZFQVRVUkVTfSIKKworRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMID0gInB1bHNlYXVkaW8gc3lzdmluaXQgYmx1ZXo1IgorTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCA9ICJydGMiCisKK0NPTUJJTkVEX0ZFQVRVUkVTID0gIiR7QG9lLnV0aWxzLnNldF9pbnRlcnNlY3QoJ0RJU1RST19GRUFUVVJFUycsICdNQUNISU5FX0ZFQVRVUkVTJywgZCl9IgorQ09NQklORURfRkVBVFVSRVNbdmFyZGVwc10gKz0gIkRJU1RST19GRUFUVVJFUyBNQUNISU5FX0ZFQVRVUkVTIgorCitTRVJJQUxfQ09OU09MRSA/Pz0gIiIKK1NFUklBTF9DT05TT0xFUyA/Pz0gIiR7QGQuZ2V0VmFyKCdTRVJJQUxfQ09OU09MRScsIFRydWUpLnJlcGxhY2UoJyAnLCAnOycpfSIKKworTk9fUkVDT01NRU5EQVRJT05TID89ICIiCitCQURfUkVDT01NRU5EQVRJT05TID89ICIiCisKKyMgTWFrZSBzdXJlIE1BQ0hJTkUgaXNuJ3QgZXhwb3J0ZWQKKyMgKGJyZWFrcyBiaW51dGlscyBhdCBsZWFzdCkKK01BQ0hJTkVbdW5leHBvcnRdID0gIjEiCisKKyMgTWFrZSBzdXJlIFRBUkdFVF9BUkNIIGlzbid0IGV4cG9ydGVkCisjIChicmVha3MgTWFrZWZpbGVzIHVzaW5nIGltcGxpY2l0IHJ1bGVzLCBlLmcuIHF1aWx0LCBhcyBHTlUgbWFrZSBoYXMgdGhpcworIyBpbiB0aGVtLCB1bmRvY3VtZW50ZWQpCitUQVJHRVRfQVJDSFt1bmV4cG9ydF0gPSAiMSIKKworIyBNYWtlIHN1cmUgRElTVFJPIGlzbid0IGV4cG9ydGVkCisjIChicmVha3Mgc3lzdmluaXQgYXQgbGVhc3QpCitESVNUUk9bdW5leHBvcnRdID0gIjEiCisKKyMgTWFrZSBzdXJlIFNIRUxMIGlzbid0IGV4cG9ydGVkCisjIChjYW4gYnJlYWsgYW55IG51bWJlciBvZiB0aGluZ3MgaWYgdGhlIHVzZXIncyBzaGVsbCBpc24ndCBQT1NJWC1jb21wbGlhbnQsCisjIGluY2x1ZGluZyB0aGUgZmxvY2sgY29tbWFuZCkuIFRoZSB1c2VyJ3Mgc2hlbGwgc2hvdWxkbid0IGFmZmVjdCBvdXIgYnVpbGRzLgorU0hFTExbdW5leHBvcnRdID0gIjEiCisKKyMgVXNlZCBieSBjYW5hZGlhbi1jcm9zcyB0byBoYW5kbGUgc3RyaW5nIGNvbnZlcnNpb25zIG9uIFRBUkdFVF9BUkNIIHdoZXJlIG5lZWRlZAorVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCA/Pz0gIiR7QGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLnJlcGxhY2UoIl8iLCAiLSIpfSIKKworIyBDb21wbGV0ZSBvdXRwdXQgZnJvbSBiaXRiYWtlCitCQl9DT05TT0xFTE9HID89ICIke0xPR19ESVJ9L2Nvb2tlci8ke01BQ0hJTkV9LyR7REFURVRJTUV9LmxvZyIKKworIyBTZXR1cCBvdXIgZGVmYXVsdCBoYXNoIHBvbGljeQorQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gIk9FQmFzaWNIYXNoIgorQkJfSEFTSEJBU0VfV0hJVEVMSVNUID89ICJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFwKKyAgICBTU1RBVEVfRElSIFRISVNESVIgRklMRVNFWFRSQVBBVEhTIEZJTEVfRElSTkFNRSBIT01FIExPR05BTUUgU0hFTEwgVEVSTSBcCisgICAgVVNFUiBGSUxFU1BBVEggU1RBR0lOR19ESVJfSE9TVCBTVEFHSU5HX0RJUl9UQVJHRVQgQ09SRUJBU0UgUFJTRVJWX0hPU1QgXAorICAgIFBSU0VSVl9EVU1QRElSIFBSU0VSVl9EVU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBcCisgICAgQ0NBQ0hFX0RJUiBFWFRFUk5BTF9UT09MQ0hBSU4gQ0NBQ0hFIENDQUNIRV9ESVNBQkxFIExJQ0VOU0VfUEFUSCBTREtQS0dTVUZGSVggXAorICAgIFdBUk5fUUEgRVJST1JfUUEgV09SS0RJUiBTVEFNUENMRUFOIFBLR0RBVEFfRElSIEJVSUxEX0FSQ0ggU1NUQVRFX1BLR0FSQ0giCitCQl9IQVNIQ09ORklHX1dISVRFTElTVCA/PSAiJHtCQl9IQVNIQkFTRV9XSElURUxJU1R9IERBVEUgVElNRSBTU0hfQUdFTlRfUElEIFwKKyAgICBTU0hfQVVUSF9TT0NLIFBTRVVET19CVUlMRCBCQl9FTlZfRVhUUkFXSElURSBESVNBQkxFX1NBTklUWV9DSEVDS1MgXAorICAgIFBBUkFMTEVMX01BS0UgQkJfTlVNQkVSX1RIUkVBRFMgQkJfT1JJR0VOViBCQl9JTlZBTElEQ09ORiBCQklOQ0xVREVEIgorQkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1MgPz0gImRvYyBkZXBzIGRlcGVuZHMgXAorICAgIGxvY2tmaWxlcyB0eXBlIHZhcmRlcHNleGNsdWRlIHZhcmRlcHMgdmFyZGVwdmFsdWUgdmFyZGVwdmFsdWVleGNsdWRlIFwKKyAgICBmaWxlLWNoZWNrc3VtcyBweXRob24gZnVuYyB0YXNrIGV4cG9ydCB1bmV4cG9ydCBub2V4ZWMgbm9zdGFtcCBkaXJzIGNsZWFuZGlycyBcCisgICAgc3N0YXRlLWxvY2tmaWxlLXNoYXJlZCBwcmVmdW5jcyBwb3N0ZnVuY3MgZXhwb3J0X2Z1bmMgZGVwdGFzayByZGVwdGFzayBcCisgICAgcmVjcmRlcHRhc2sgbm9kZXBycmVjcyBzdGFtcC1iYXNlIHN0YW1wLWV4dHJhLWluZm8iCisKK01MUFJFRklYID8/PSAiIgorTVVMVElMSUJfVkFSSUFOVFMgPz89ICIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQgYi9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlNjMxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9jb25mLW5vdGVzLnR4dApAQCAtMCwwICsxLDggQEAKK0NvbW1vbiB0YXJnZXRzIGFyZToKKyAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICBjb3JlLWltYWdlLXNhdG8KKyAgICBtZXRhLXRvb2xjaGFpbgorICAgIGFkdC1pbnN0YWxsZXIKKyAgICBtZXRhLWlkZS1zdXBwb3J0CisKK1lvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgYi9tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzY1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mCkBAIC0wLDAgKzEsMjMgQEAKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jCisKK1RDTU9ERSA/PSAiZGVmYXVsdCIKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtJHtUQ01PREV9LmluYworCitUQ0xJQkMgPz0gImdsaWJjIgorcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy0ke1RDTElCQ30uaW5jCisKKyMgQWxsb3cgc2luZ2xlIGxpYmMgZGlzdHJvcyB0byBkaXNhYmxlIHRoaXMgY29kZQorVENMSUJDQVBQRU5EID89ICItJHtUQ0xJQkN9IgorVE1QRElSIC49ICIke1RDTElCQ0FQUEVORH0iCisKK0NBQ0hFID0gIiR7VE1QRElSfS9jYWNoZS8ke1RDTU9ERX0tJHtUQ0xJQkN9JHtAWycnLCAnLycgKyBzdHIoZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldW2Jvb2woZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldfSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSkpXX0iCisKK1VTRVJfQ0xBU1NFUyA/PSAiIgorUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX2lwayIKK0lOSEVSSVRfQkxBQ0tMSVNUID0gImJsYWNrbGlzdCIKK0lOSEVSSVRfRElTVFJPID89ICJkZWJpYW4gZGV2c2hlbGwgc3N0YXRlIGxpY2Vuc2UiCitJTkhFUklUICs9ICIke1BBQ0tBR0VfQ0xBU1NFU30gJHtVU0VSX0NMQVNTRVN9ICR7SU5IRVJJVF9ESVNUUk99ICR7SU5IRVJJVF9CTEFDS0xJU1R9IgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjQ5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYwpAQCAtMCwwICsxLDE3IEBACisKK0FTTkVFREVEID0gIi1XbCwtLWFzLW5lZWRlZCIKKworQVNORUVERURfcG4tYmFiZWx0cmFjZSA9ICIiCitBU05FRURFRF9wbi1jb25zb2xlLXRvb2xzID0gIiIKK0FTTkVFREVEX3BuLWRpc3RjYyA9ICIiCitBU05FRURFRF9wbi1vcGVub2JleCA9ICIiCitBU05FRURFRF9wbi1pY3UgPSAiIgorQVNORUVERURfcG4teHNlcnZlci1rZHJpdmUteG9tYXAgPSAiIgorQVNORUVERURfcG4tbWluaW1vID0gIiIKK0FTTkVFREVEX3BuLXBjaXV0aWxzID0gIiIKK0FTTkVFREVEX3BuLXB1enpsZXMgPSAiIgorQVNORUVERURfcG4tZGlhbGVyID0gIiIKK0FTTkVFREVEX3BuLXB1bHNlYXVkaW8gPSAiIgorQVNORUVERURfcG4tcnBtID0gIiIKKworVEFSR0VUX0xERkxBR1MgKz0gIiR7QVNORUVERUR9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWI3NjJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMKQEAgLTAsMCArMSw0OSBAQAorUUFfTE9HRklMRSA9ICIke1RNUERJUn0vcWEubG9nIgorCitPRUlOQ0xVREVMT0dTID89ICJ5ZXMiCitLRVJORUxfQ09OU09MRSA/PSAidHR5UzAiCitLRUVQVUlNQUdFID8/PSAieWVzIgorCitJTUFHRV9MSU5HVUFTID89ICJlbi11cyBlbi1nYiIKK0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gPz0gIjEiCitMT0NBTEVfVVRGOF9PTkxZID89ICIwIgorCitESVNUUk9fRkVBVFVSRVNfREVGQVVMVCA/PSAiYWxzYSBhcmdwIGJsdWV0b290aCBleHQyIGlyZGEgbGFyZ2VmaWxlIHBjbWNpYSB1c2JnYWRnZXQgdXNiaG9zdCB3aWZpIHhhdHRyIG5mcyB6ZXJvY29uZiBwY2kgM2cgbmZjIHgxMSIKK0RJU1RST19GRUFUVVJFU19MSUJDX0RFRkFVTFQgPz0gImlwdjQgaXB2NiBsaWJjLWJhY2t0cmFjZSBsaWJjLWJpZy1tYWNyb3MgbGliYy1ic2QgbGliYy1jeHgtdGVzdHMgbGliYy1jYXRnZXRzIGxpYmMtY2hhcnNldHMgbGliYy1jcnlwdCBcCisJCQkJCWxpYmMtY3J5cHQtdWZjIGxpYmMtZGItYWxpYXNlcyBsaWJjLWVudnogbGliYy1mY3Z0IGxpYmMtZm10bXNnIGxpYmMtZnN0YWIgbGliYy1mdHJhdmVyc2UgXAorCQkJCQlsaWJjLWdldGxvZ2luIGxpYmMtaWRuIGxpYmMtaW5ldC1hbmwgbGliYy1saWJtIGxpYmMtbG9jYWxlcyBsaWJjLWxvY2FsZS1jb2RlIFwKKwkJCQkJbGliYy1tZW11c2FnZSBsaWJjLW5pcyBsaWJjLW5zc3dpdGNoIGxpYmMtcmNtZCBsaWJjLXJ0bGQtZGVidWcgbGliYy1zcGF3biBsaWJjLXN0cmVhbXMgbGliYy1zdW5ycGMgXAorCQkJCQlsaWJjLXV0bXAgbGliYy11dG1weCBsaWJjLXdvcmRleHAgbGliYy1wb3NpeC1jbGFuZy13Y2hhciBsaWJjLXBvc2l4LXJlZ2V4cCBsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYyBcCisJCQkJCWxpYmMtcG9zaXgtd2NoYXItaW8iCitESVNUUk9fRkVBVFVSRVNfTElCQyA/PSAiJHtESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUfSIKK0RJU1RST19GRUFUVVJFU19MSUJDX2NsYXNzLW5hdGl2ZXNkayA9ICIke0RJU1RST19GRUFUVVJFU19MSUJDX0RFRkFVTFR9IgorRElTVFJPX0ZFQVRVUkVTID89ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSIKKworSU1BR0VfRkVBVFVSRVMgPz0gIiIKKworIyBUaGlzIGlzIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIGRpc3RyaWJ1dGlvbiwgdGhleSBhcmUgbm90CisjIGRpcmVjdGx5IHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gCitIT1NUVE9PTFNfV0hJVEVMSVNUX0dQTC0zLjAgPz0gIiIKK1dISVRFTElTVF9HUEwtMy4wID89ICJsZXNzIgorTEdQTHYyX1dISVRFTElTVF9HUEwtMy4wID89ICJsaWJhc3N1YW4gZ251dGxzIGxpYnRhc24xIGxpYmlkbiIKKworQ09NTUVSQ0lBTF9BVURJT19QTFVHSU5TID89ICIiCisjIENPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA/PSAiZ3N0LXBsdWdpbnMtdWdseS1tYWQgZ3N0LXBsdWdpbnMtdWdseS1tcGVnYXVkaW9wYXJzZSIKK0NPTU1FUkNJQUxfVklERU9fUExVR0lOUyA/PSAiIgorIyBDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlMgPz0gImdzdC1wbHVnaW5zLXVnbHktbXBlZzJkZWMgZ3N0LXBsdWdpbnMtdWdseS1tcGVnc3RyZWFtIGdzdC1wbHVnaW5zLWJhZC1tcGVndmlkZW9wYXJzZSIKK0NPTU1FUkNJQUxfUVQgPz0gIiIKKyMgQ09NTUVSQ0lBTF9RVCA/PSAicW1tcCIKKyMgU2V0IG9mIGNvbW1vbiBsaWNlbnNlcyB1c2VkIGZvciBsaWNlbnNlLmJiY2xhc3MKK0NPTU1PTl9MSUNFTlNFX0RJUiA/Pz0gIiR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzIgorCitCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPz89ICIwIgorCitOTzMyTElCUyA/Pz0gIjEiCisKKyMgRGVmYXVsdCB0byBlbWl0dGluZyBsb2dmaWxlcyBpZiBhIGJ1aWxkIGZhaWxzLgorQkJJTkNMVURFTE9HUyA/Pz0gInllcyIKK1NES19WRVJTSU9OID8/PSAibm9kaXN0cm8uMCIKK0RJU1RST19WRVJTSU9OID8/PSAibm9kaXN0cm8uMCIKKworIyBNaXNzaW5nIGNoZWNrc3VtcyBzaG91bGQgcmFpc2UgYW4gZXJyb3IKK0JCX1NUUklDVF9DSEVDS1NVTSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NGQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMKQEAgLTAsMCArMSw1MSBAQAorIworIyBEZWZhdWx0IHZpcnR1YWwgcHJvdmlkZXJzCisjCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYiA/PSAiZGIiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYi1uYXRpdmUgPz0gImRiLW5hdGl2ZSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIteGY4NiA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZWdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbWVzYSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMgPz0gIm9wa2ctdXRpbHMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSA/PSAib3BrZy11dGlscy1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJ4MTEgPz0gImxpYngxMSIKK1BSRUZFUlJFRF9QUk9WSURFUl94Zjg2LXZpZGVvLWludGVsID89ICJ4Zjg2LXZpZGVvLWludGVsIgorCisjCisjIERlZmF1bHQgdmlydHVhbCBydW50aW1lIHByb3ZpZGVycworIworVklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXMgPz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyIKK1ZJUlRVQUwtUlVOVElNRV9hcG0gPz0gImFwbSIKK1ZJUlRVQUwtUlVOVElNRV9hbHNhLXN0YXRlID89ICJhbHNhLXN0YXRlIgorVklSVFVBTC1SVU5USU1FX2dldG9wdCA/PSAidXRpbC1saW51eC1nZXRvcHQiCitWSVJUVUFMLVJVTlRJTUVfd2lyZWxlc3MtdG9vbHMgPz0gIml3IHdpcmVsZXNzLXRvb2xzIgorCisjCisjIERlZmF1bHQgcmVjaXBlIHByb3ZpZGVycworIworUFJFRkVSUkVEX1BST1ZJREVSX2RidXMtZ2xpYiA/PSAiZGJ1cy1nbGliIgorUFJFRkVSUkVEX1BST1ZJREVSX2RidXMtZ2xpYi1uYXRpdmUgPz0gImRidXMtZ2xpYi1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfZ2RrLXBpeGJ1ZiA/PSAiZ2RrLXBpeGJ1ZiIKK1BSRUZFUlJFRF9QUk9WSURFUl9saWJnY2MgPz0gImxpYmdjYyIKK1BSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstbGliZ2NjID89ICJuYXRpdmVzZGstbGliZ2NjIgorUFJFRkVSUkVEX1BST1ZJREVSX2xpbnV4LWxpYmMtaGVhZGVycyA/PSAibGludXgtbGliYy1oZWFkZXJzIgorUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnMgPz0gIm5hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnMiCitQUkVGRVJSRURfUFJPVklERVJfbWF0Y2hib3gtcGFuZWwgPz0gIm1hdGNoYm94LXBhbmVsLTIiCitQUkVGRVJSRURfUFJPVklERVJfb3BrZyA/PSAib3BrZyIKK1BSRUZFUlJFRF9QUk9WSURFUl9vcGtnLW5hdGl2ZSA/PSAib3BrZy1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfbmF0aXZlc2RrLW9wa2cgPz0gIm5hdGl2ZXNkay1vcGtnIgorUFJFRkVSUkVEX1BST1ZJREVSX2NvbnNvbGUtdG9vbHMgPz0gImtiZCIKK1BSRUZFUlJFRF9QUk9WSURFUl9nemlwLW5hdGl2ZSA/PSAicGlnei1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfbWFrZSA/PSAibWFrZSIKK1BSRUZFUlJFRF9QUk9WSURFUl91ZGV2ID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQnLCd1ZGV2JyxkKX0iCisjIFRoZXJlIGFyZSBpc3N1ZXMgd2l0aCBydW50aW1lIHBhY2thZ2VzIGFuZCBQUkVGRVJSRURfUFJPVklERVIsIHNlZSBZT0NUTyAjNTA0NCBmb3IgZGV0YWlscworIyBvbiB0aGlzIHJhdGhlciBzdHJhbmdlIGVudHJ5LgorUFJFRkVSUkVEX1BST1ZJREVSX2JsdWV6NCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2JsdWV0b290aCBibHVlejUnLCdibHVlejUnLCdibHVlejQnLGQpfSIKK1BSRUZFUlJFRF9QUk9WSURFUl9ibHVlei1oY2lkdW1wID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnYmx1ZXRvb3RoIGJsdWV6NScsJ2JsdWV6NScsJ2JsdWV6LWhjaWR1bXAnLGQpfSIKKyMgQWx0ZXJuYXRpdmUgaXMgbHRwLWRkdCBpbiBtZXRhLW9lOiBtZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRwLWRkdC9sdHAtZGR0XzAuMC40LmJiCitQUkVGRVJSRURfUFJPVklERVJfbHRwID89ICJsdHAiCitQUkVGRVJSRURfUFJPVklERVJfZ2V0b3B0ID89ICJ1dGlsLWxpbnV4LWdldG9wdCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMwNjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jCkBAIC0wLDAgKzEsMTUgQEAKKyMKKyMgRGVmYXVsdCBwcmVmZXJyZWQgdmVyc2lvbnMKKyMKKworIyBGb3JjZSB0aGUgcHl0aG9uIHZlcnNpb25zIGluIG9uZSBwbGFjZQorUFlUSE9OX0JBU0VWRVJTSU9OID89ICIyLjciCitQUkVGRVJSRURfVkVSU0lPTl9weXRob24gPz0gIjIuNy45IgorUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uLW5hdGl2ZSA/PSAiMi43LjkiCisKKyMgRm9yY2UgdGhlIG9sZGVyIHZlcnNpb24gb2YgbGliZXJhdGlvbi1mb250cyB1bnRpbCB3ZSBmaXggdGhlIGZvbnRmb3JnZSBpc3N1ZQorUFJFRkVSUkVEX1ZFUlNJT05fbGliZXJhdGlvbi1mb250cyA/PSAiMS4wNCIKKworIyBGb3JjZSBkYi1uYXRpdmUncyB2ZXJzaW9uIHRvIGtlZXAgc3luYyB3aXRoIGRiIHdoaWxlCisjICdBR1BMLTMuMCcgaW4gJHtJTkNPTVBBVElCTEVfTElDRU5TRX0gYmxhY2tsaXN0CitQUkVGRVJSRURfVkVSU0lPTl9kYi1uYXRpdmUgPSAiJHtAaW5jb21wYXRpYmxlX2xpY2Vuc2VfY29udGFpbnMoJ0FHUEwtMy4wJywgJzUuJScsICc2LiUnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2RhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYwpAQCAtMCwwICsxLDUzNiBAQAorIworIyBUaGlzIGlzIGEgbGlzdCBmb3IgdHJhY2tpbmcgc3RhdHVzIG9mIHBhY2thZ2UgcmVsYXRpdmUgdG8gTWFqb3IKKyMgZGlzdHJpYnV0aW9ucyBzdWNoIGFzIEZlZG9yYSwgVWJ1bnR1LCBEZWJpYW4sIC4uLiBUaGUgcGFja2FnZQorIyBuYW1lIGlzIHRoZSBtYWpvciBkaXN0cmlidXRpb24gZXF1aXZhbGVudCB0byB0aGUgbmFtZSB1c2VkIGluIG9lLWNvcmUKKyMKKyMgVGhlIGZvcm1hdCBpcyBhcyBhIGJpdGJha2UgdmFyaWFibGUgb3ZlcnJpZGUgZm9yIGVhY2ggcmVjaXBlCisjCisjICAgICAgIERJU1RST19QTl9BTElBU19wbi08cmVjaXBlIG5hbWU+ID0gIkRpc3RybzE9PHBrZ25hbWU+IERpc3RybzI9PHBrZ25hbWU+IgorIworIyBQbGVhc2Uga2VlcCB0aGlzIGxpc3QgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorIworRElTVFJPX1BOX0FMSUFTX3BuLWFhaW5hID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWFiaXdvcmQtZW1iZWRkZWQgPSAiRmVkb3JhPWFiaXdvcmQgVWJ1bnR1PWFiaXdvcmQiCitESVNUUk9fUE5fQUxJQVNfcG4tYWR0LWluc3RhbGxlciA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1hbHNhLXN0YXRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYWxzYS11dGlscy1hbHNhY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWF0ayA9ICJGZWRvcmE9YXRrIE9wZW5TdVNFPWF0ayIKK0RJU1RST19QTl9BTElBU19wbi1hdWdlYXMgPSAiVWJ1bnR1PWxpYmF1Z2VhczAgRGViaWFuPWxpYmF1Z2VhczAiCitESVNUUk9fUE5fQUxJQVNfcG4tYXZhaGktdWkgPSAiVWJ1bnR1PWF2YWhpLWRpc2NvdmVyIERlYmlhbj1hdmFoaS1kaXNjb3ZlciIKK0RJU1RST19QTl9BTElBU19wbi1iYWJlbHRyYWNlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWJkd2djID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWJpZ3JlcXNwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1iaWdyZXFzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tYmphbSA9ICJPcGVuU3VTRT1ib29zdC1qYW0gRGViaW5hPWJqYW0iCitESVNUUk9fUE5fQUxJQVNfcG4tYmxrdG9vbCA9ICJEZWJpYW49YmxrdG9vbCBNYW5kcml2YT1ibGt0b29sIgorRElTVFJPX1BOX0FMSUFTX3BuLWJsdWV6NCA9ICJVYnVudHU9Ymx1ZXogRGViaWFuPWJsdWV6LXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLWJsdWV6NSA9ICJGZWRvcmE9Ymx1ZXogIE9wZW5zdXNlPWJsdWV6IgorRElTVFJPX1BOX0FMSUFTX3BuLWJsdWV6LWR0bDEtd29ya2Fyb3VuZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWJvb3RjaGFydDIgPSAiRmVkb3JhPWJvb3RjaGFydDIgT3BlbnN1c2U9Ym9vdGNoYXJ0IgorRElTVFJPX1BOX0FMSUFTX3BuLWJ0cmZzLXRvb2xzID0gIkRlYmlhbj1idHJmcy10b29scyBGZWRvcmE9YnRyZnMtcHJvZ3MiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGQtYXBwbGlhbmNlLWltYWdlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkLWNvbXBhcmUgPSAiT3BlbnN1c2U9YnVpbGQtY29tcGFyZSBGZWRvcmE9YnVpbGQtY29tcGFyZSIKK0RJU1RST19QTl9BTElBU19wbi1idWlsZGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGR0b29scy10YXJiYWxsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY2FsaWJyYXRlcHJvdG8gPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcvcHJvdG8vY2FsaWJyYXRlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tY2RydG9vbHMgPSAiT3BlblNVU0U9Y2RydG9vbHMgT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tY2hrY29uZmlnLWFsdGVybmF0aXZlcyA9ICJNYW5kcml2YT1jaGtjb25maWcgRGViaWFuPWNoa2NvbmZpZyIKK0RJU1RST19QTl9BTElBU19wbi1jbGF3cy1wbHVnaW4tZ3RraHRtbDItdmlld2VyID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLW1haWxkaXIgPSAiRmVkb3JhPWNsYXdzLW1haWwtcGx1Z2lucyBPcGVuU3VTRT1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMgRGViaWFuPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyIKK0RJU1RST19QTl9BTElBU19wbi1jbGF3cy1wbHVnaW4tbWFpbG1ib3ggPSAiRmVkb3JhPWNsYXdzLW1haWwtcGx1Z2lucyBPcGVuU3VTRT1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMgRGViaWFuPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyIKK0RJU1RST19QTl9BTElBU19wbi1jbGF3cy1wbHVnaW4tcnNzeWwgPSAiRmVkb3JhPWNsYXdzLW1haWwtcGx1Z2lucyBPcGVuU3VTRT1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMgRGViaWFuPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyIKK0RJU1RST19QTl9BTElBU19wbi1jbGlwYm9hcmQtbWFuYWdlciA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXIgPSAiRmVkb3JhPWNsdXR0ZXIgT3BlblN1c2U9Y2x1dHRlciBVYnVudHU9Y2x1dHRlci0xLjAgTWFuZHJpdmE9Y2x1dHRlciBEZWJpYW49Y2x1dHRlciIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLTEuOCA9ICJGZWRvcmE9Y2x1dHRlciBPcGVuU3VzZT1jbHV0dGVyIFVidW50dT1jbHV0dGVyLTEuMCBNYW5kcml2YT1jbHV0dGVyIERlYmlhbj1jbHV0dGVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItZ3N0LTEuMCA9ICJEZWJpYW49Y2x1dHRlci1nc3QgVWJ1bnR1PWNsdXR0ZXItZ3N0IEZlZG9yYT1jbHV0dGVyLWdzdCIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWdzdC0xLjggPSAiRmVkb3JhPWNsdXR0ZXItZ3N0IERlYmlhbj1saWJjbHV0dGVyLWdzdCIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWd0ay0xLjAgPSAiRGViaWFuPWNsdXR0ZXItZ3RrIFVidW50dT1jbHV0dGVyLWd0ayBGZWRvcmE9Y2x1dHRlci1ndGsiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1ndGstMS44ID0gIkZlZG9yYT1jbHV0dGVyLWd0ayBPcGVuU3VTRT1jbHV0dGVyLWd0ayBVYnVudHU9Y2x1dHRlci1ndGstMC4xMCBNYW5kcml2YT1jbHV0dGVyLWd0ayBEZWJpYW49Y2x1dHRlci1ndGsiCitESVNUUk9fUE5fQUxJQVNfcG4tY29nbC0xLjAgPSAiRGViaWFuPWNvZ2wgVWJ1bnR1PWNvZ2wgRmVkb3JhPWNvZ2wiCitESVNUUk9fUE5fQUxJQVNfcG4tY29nbCA9ICJGZWRvcmE9Y29nbCBPcGVuU3VzZT1jb2dsIFVidW50dT1jb2dsIE1hbmRyaXZhPWNvZ2wgRGViaWFuPWNvZ2wiCitESVNUUk9fUE5fQUxJQVNfcG4tY29tcG9zaXRlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tY29tcG9zaXRlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tY29ubm1hbiA9ICJNZWVnbz1jb25ubWFuIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbm5tYW4tY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbm5tYW4tZ25vbWUgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tY29uc29sZS10b29scyA9ICJEZWJpYW49Y29uc29sZS10b29scyBVYnVudHU9Y29uc29sZS10b29scyIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWJhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWNsdXR0ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWRpcmVjdGZiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWtlcm5lbC1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbHNiLWRldiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbHNiLXF0MyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1ydCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtcnQtc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1zYXRvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1zYXRvLWRldiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXRlc3RtYXN0ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS13ZXN0b24gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXgxMSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNyb3NzLWxvY2FsZWRlZiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1jcnlwdG9kZXYtbGludXggPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jcnlwdG9kZXYtbW9kdWxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LXRlc3RzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3dhdXRvbWFjcm9zID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9jd2F1dG9tYWNyb3MuYmVybGlvcy5kZS8iCitESVNUUk9fUE5fQUxJQVNfcG4tZGFtYWdlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZGFtYWdlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZGIgPSAiRGViaWFuPWRiNS4xIFVidW50dT1kYjUuMSIKK0RJU1RST19QTl9BTElBU19wbi1kYnVzLXB0ZXN0ID0gIkZlZG9yYT1kYnVzIFVidW50dT1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRidXMtdGVzdCA9ICJGZWRvcmE9ZGJ1cyBVYnVudHU9ZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1kYnVzLXdhaXQgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1kZXBtb2R3cmFwcGVyLWNyb3NzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZGlyZWN0ZmItZXhhbXBsZXMgPSAiRGViaWFuPWRpcmVjdGZiIEZlZG9yYT1kaXJlY3RmYiIKK0RJU1RST19QTl9BTElBU19wbi1kaXN0Y2MgPSAiRGViaWFuPWRpc3RjYyBGZWRvcmE9ZGlzdGNjIgorRElTVFJPX1BOX0FMSUFTX3BuLWRpc3RjYy1jb25maWcgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1kbXhwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1kbXhwcm90byBVYnVudHU9eDExcHJvdG8tZG14IERlYmlhbj14MTFwcm90by1kbXgiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cyA9ICJGZWRvcmE9ZG9jYm9vay1zdHlsZS1kc3NzbCBVYnVudHU9ZG9jYm9vay1kc3NzbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXNnbWwtZHRkLTMuMSA9ICJGZWRvcmE9ZG9jYm9vay1kdGRzIE1hbmRyaXZhPWRvY2Jvb2stZHRkMzEtc2dtbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXNnbWwtZHRkLTQuMSA9ICJGZWRvcmE9ZG9jYm9vay1kdGRzIE1hbmRyaXZhPWRvY2Jvb2stZHRkNDEtc2dtbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXNnbWwtZHRkLTQuNSA9ICJGZWRvcmE9ZG9jYm9vay1kdGRzIE1hbmRyaXZhPWRvY2Jvb2stZHRkNDItc2dtbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhtbC1kdGQ0ID0gIlVidW50dT1kb2Nib29rLXhtbCBGZWRvcmE9ZG9jYm9vay1kdGRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlID0gIlVidW50dT1kb2Nib29rLXhtbCBGZWRvcmE9ZG9jYm9vay1kdGRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzID0gIkZlZG9yYT1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyBPcGVuc3VzZT1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyIKK0RJU1RST19QTl9BTElBU19wbi1kcmkycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZHJpMnByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRyaTNwcm90byA9ICJGZWRvcmE9ZHJpM3Byb3RvIE9wZW5zdXNlPWRyaTNwcm90by1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1kcm9wYmVhciA9ICJEZWJpYW49ZHJvcGJlYXIgVWJ1bnR1PWRyb3BiZWFyIgorRElTVFJPX1BOX0FMSUFTX3BuLWR0YyA9ICJGZWRvcmE9ZHRjIFVidW50dT1kdGMiCitESVNUUk9fUE5fQUxJQVNfcG4tZWRzLXRvb2xzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZWVlLWFjcGktc2NyaXB0cyA9ICJEZWJpYW49ZWVlcGMtYWNwaS1zY3JpcHRzIFVidW50dT1lZWVwYy1hY3BpLXNjcmlwdHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLWluaXRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMtbG9jYWxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLW10cmFjZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1zY3JpcHRzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaW5mby1mYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGluZm8teDExID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZW1nZC1kcml2ZXItYmluID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWVuY29kaW5ncyA9ICJVYnVudHU9eGZvbnRzLWVuY29kaW5ncyBNYW5kcml2YT14MTEtZm9udC1lbmNvZGluZ3MgRGViaWFuPXhmb250cy1lbmNvZGluZ3MiCitESVNUUk9fUE5fQUxJQVNfcG4tZXZpZWV4dCA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1ldmllZXh0IERlYmlhbj14MTFwcm90by1ldmllIgorRElTVFJPX1BOX0FMSUFTX3BuLWZpeGVzcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZml4ZXNwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1mb250LWFsaWFzID0gIkZlZG9yYT14b3JnLXgxMS1mb250cy1iYXNlIE1hbmRyaXZhPXgxMS1mb250LWFsaWFzIE1lZWdvPXhvcmcteDExLWZvbnRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvbnRjYWNoZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZvbnRjYWNoZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvbnRzcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZm9udHNwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1mb250LXV0aWwgPSAiTWVlZ289eG9yZy14MTEtZm9udC11dGlscyBGZWRvcmE9eG9yZy14MTEtZm9udC11dGlscyBVYnVudHU9eGZvbnRzLXV0aWxzIE1hbmRyaXZhPXgxMS1mb250LXV0aWwgRGViaWFuPXhmb250cy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1mb3JtZmFjdG9yID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZm90b3dhbGwgPSAiRmVkb3JhPWZvdG93YWxsIFVidW50dT1mb3Rvd2FsbCIKK0RJU1RST19QTl9BTElBU19wbi1mc3Rlc3RzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2FpbCA9ICJGZWRvcmE9Z2FpbCBVYnVudHU9bGliZ2FpbC0zLTAiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2FrdSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWdhbGFnby1kYWVtb24gPSAiRGViaWFuPWdhbGFnby1kYWVtb24gVWJ1bnR1PWdhbGFnby1kYWVtb24iCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3NzLWluaXRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1nY2MtY3Jvc3MtaW5pdGlhbC1pNTg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3Nzc2RrLWluaXRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1nY2MtY3Jvc3NzZGstaW5pdGlhbC14ODZfNjQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1nY2NtYWtlZGVwID0gIk1hbmRyaXZhPWdjY21ha2VkZXAgVWJ1bnR1PXh1dGlscy1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLXJ1bnRpbWUgPSAiVWJ1bnR1PWdjYyBGZWRvcmE9Z2NjIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1zYW5pdGl6ZXJzID0gIlVidW50dT1nY2MgRmVkb3JhPWdjYyIKK0RJU1RST19QTl9BTElBU19wbi1nY2Mtc291cmNlID0gIlVidW50dT1nY2MgRmVkb3JhPWdjYyIKK0RJU1RST19QTl9BTElBU19wbi1nY29uZi1kYnVzID0gIk1lZWdvPUdDb25mLWRidXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2RrLXBpeGJ1ZiA9ICJEZWJpYW49bGliZ2RrLXBpeGJ1ZjIuMCBGZWRvcmE9Z2RrLXBpeGJ1ZiIKK0RJU1RST19QTl9BTElBU19wbi1nZGstcGl4YnVmLWNzb3VyY2UgPSAiRGViaWFuPWxpYmdkay1waXhidWYyLjAtMCBGZWRvcmE9Z2RrLXBpeGJ1ZjIiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2V0dGV4dC1taW5pbWFsID0gIkRlYmlhbj1nZXR0ZXh0IEZlZG9yYT1nZXR0ZXh0IgorRElTVFJPX1BOX0FMSUFTX3BuLWdsaWItMi4wID0gIk1lZWdvPWdsaWIyIEZlZG9yYT1nbGliMiBPcGVuU3VTRT1nbGliMiBVYnVudHU9Z2xpYjIuMCBNYW5kcml2YT1nbGliMi4wIERlYmlhbj1nbGliMi4wIgorRElTVFJPX1BOX0FMSUFTX3BuLWdsaWJjLWxvY2FsZSA9ICJPcGVuU3VTRT1nbGliYy1sb2NhbGUgRmVkb3JhPWdsaWJjLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWdsaWJjLW10cmFjZSA9ICJGZWRvcmE9Z2xpYmMtdXRpbHMgVWJ1bnR1PWxpYmMtZGV2LWJpbiIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1zY3JpcHRzID0gIkZlZG9yYT1nbGliYyBVYnVudHU9bGliYy1iaW4iCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1nbHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWdub21lLWRlc2t0b3AtdGVzdGluZyA9ICJEZWJpYW49Z25vbWUtZGVza3RvcC10ZXN0aW5nIEZlZG9yYT1nbm9tZS1kZXNrdG9wLXRlc3RpbmciCitESVNUUk9fUE5fQUxJQVNfcG4tZ251LWNvbmZpZyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWdwdGZkaXNrID0gIkZlZG9yYT1nZGlzayBVYnVudHU9Z2Rpc2siCitESVNUUk9fUE5fQUxJQVNfcG4tZ3J1Yi1lZmkgPSAiRGViaWFuPWdydWItZWZpIEZlZG9yYT1ncnViMi1lZmkiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3J1Yi1lZmktaTU4NiA9ICJEZWJpYW49Z3J1Yi1lZmkgRmVkb3JhPWdydWIyLWVmaSIKK0RJU1RST19QTl9BTElBU19wbi1ncnViLWVmaS14ODYtNjQgPSAiRGViaWFuPWdydWItZWZpIEZlZG9yYT1ncnViMi1lZmkiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0LXBsYXllciA9ICJVYnVudHU9Z3N0LXBsYXllciBGZWRvcmE9Z3N0cmVhbWVyLXBsYXllciIKK0RJU1RST19QTl9BTElBU19wbi1nc3QtcGx1Z2luLWJsdWV0b290aCA9ICJVYnVudHU9bGliZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZSBGZWRvcmE9Z3N0cmVhbWVyLXBsdWdpbnMtYmFzZSIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAgPSAiRGViaWFuPWdzdHJlYW1lcjEuMCBVYnVudHU9Z3N0cmVhbWVyMS4wIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiTWVlZ289Z3N0cmVhbWVyIEZlZG9yYT1nc3RyZWFtZXIgT3BlblN1U0U9Z3N0cmVhbWVyIFVidW50dT1nc3RyZWFtZXIwLjEwIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIFVidW50dT1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kID0gIkRlYmlhbj1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kIFVidW50dT1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyID0gIlVidW50dT1nc3RyZWFtZXIwLjEwLXJ0c3AgRmVkb3JhPWdzdHJlYW1lci1ydHNwIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0aysgPSAiTWVlZ289Z3RrMiBGZWRvcmE9Z3RrMiBPcGVuU3VTRT1ndGsyIFVidW50dT1ndGsrMi4wIE1hbmRyaXZhPWd0aysyLjAgRGViaWFuPWd0aysyLjAiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrKzMgPSAiVWJ1bnR1PWd0ayszLjAgRGViaWFuPWd0ayszLjAgRmVkb3JhPWd0azMiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLWRvYy1zdHViID0gIkZlZG9yYT1ndGstZG9jIFVidW50dT1ndGstZG9jIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1lbmdpbmVzID0gIkZlZG9yYT1ndGsyLWVuZ2luZXMgT3BlblN1U0U9Z3RrMi1lbmdpbmVzIFVidW50dT1ndGsyLWVuZ2luZXMgTWFuZHJpdmE9Z3RrLWVuZ2luZXMyIERlYmlhbj1ndGsyLWVuZ2luZXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLXNhdG8tZW5naW5lID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLXRoZW1lLXRvcnR1cmVyID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93aWtpLmxhcHRvcC5vcmcvZ28vR1RLX2Zvcl9PTFBDIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1pY29uLXV0aWxzLW5hdGl2ZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1ndW1taWJvb3QgPSAiRGViaWFuPWd1bW1pYm9vdCBGZWRvcmE9Z3VtbWlib290IgorRElTVFJPX1BOX0FMSUFTX3BuLWhlbGxvLW1vZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWhvc3RhcC1jb25mID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taHdsYXRkZXRlY3QgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4taWNlY2MtY3JlYXRlLWVudiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXQtaWZ1cGRvd24gPSAiRGViaWFuPWlmdXBkb3duIFVidW50dT1pZnVwZG93biIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtYm9vdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1mcmFtZXdvcmsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1ib290ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0c2NyaXB0cyA9ICJGZWRvcmE9aW5pdHNjcmlwdHMgTWFuZHJhdmlhPWluaXRzY3JpcHRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWlucHV0cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8taW5wdXRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1pcHJvdXRlMiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1qcGVnID0gIk9wZW5TdVNFPWxpYmpwZWcgVWJ1bnR1PWxpYmpwZWc2MiIKK0RJU1RST19QTl9BTElBU19wbi1rYnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWticHJvdG8gVWJ1bnR1PXgxMXByb3RvLWtiLWRldiBEZWJpYW49eDExcHJvdG8ta2ItZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLWtjb25maWctZnJvbnRlbmRzID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWtlcm5lbC1kZXZzcmMgPSAiRGViaWFuPWxpbnV4LWJhc2UgVWJ1bnR1PWxpbnV4IgorRElTVFJPX1BOX0FMSUFTX3BuLWtlcm5lbHNoYXJrID0gIk1hbmRyaXZhPWtlcm5lbHNoYXJrIFVidW50dT1rZXJuZWxzaGFyayIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuLXRvb2xzLW5hdGl2ZSA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4ta2V5bWFwcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWtmID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxhbWUgPSAiRGViaWFuPWxhbWUgVWJ1bnR1PWxhbWUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGF0ZW5jeXRvcCA9ICJNZWVnbz1sYXRlbmN5dG9wIEZlZG9yYT1sYXRlbmN5dG9wIERlYmlhbj1sYXRlbmN5dG9wIE9wZW5TdVNFPWxhdGVuY3l0b3AiCitESVNUUk9fUE5fQUxJQVNfcG4tbGRjb25maWctbmF0aXZlID0gIlVidW50dT1saWJjLWJpbiBGZWRvcmE9Z2xpYmMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliYTUyID0gIk1hbmRyaXZhPWE1MmRlYyBEZWJpYW49YTUyZGVjIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmFjcGkgPSAiVWJ1bnR1PWxpYmFjcGkgTWFuZHJpdmE9bGliYWNwaSIKK0RJU1RST19QTl9BTElBU19wbi1saWJhdG9taWNzLW9wcyA9ICJNZWVnbz1saWJhdG9taWMtb3BzIERlYmlhbj1saWJhdG9taWMtb3BzIFVidW50dT1saWJhdG9taWMtb3BzIE9wZW5TdVNFPWxpYmF0b21pYy1vcHMgTWFuZHJpdmE9bGliYXRvbWljLW9wcyIKK0RJU1RST19QTl9BTElBU19wbi1saWJjZ3JvdXAgPSAiVWJ1bnR1PWxpYmNncm91cDEgRGViaWFuPWxpYmNncm91cDEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2hlY2sgPSAiVWJ1bnR1PWNoZWNrIEZlZG9yYT1jaGVjayBPcGVuU3VTRT1jaGVjayIKK0RJU1RST19QTl9BTElBU19wbi1saWJjbGFzcy1pc2EtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJkcm0tcG91bHNibyA9ICJEZWJpYW49bGliZHJtLWludGVsMSBVYnVudHU9bGliZHJtLWludGVsMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJkdW1wdmFsdWUtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJlbnYtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJlcmF0aW9uLWZvbnRzID0gIlVidW50dT1mb250cy1saWJlcmF0aW9uIEZlZG9yYT1saWJlcmF0aW9uLWZvbnRzLXR0ZiIKK0RJU1RST19QTl9BTElBU19wbi1saWJmYWtla2V5ID0gIk1lZWdvMS4wPWxpYmZha2VrZXkgRGViaWFuPWxpYmZha2VrZXkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZmlsZS1jaGVja3RyZWUtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJmbS1leHRyYSA9ICJPcGVuc3VzZT1saWJmbS1leHRyYTQgVWJ1bnR1PWxpYmZtLWV4dHJhNCIKK0RJU1RST19QTl9BTElBU19wbi1saWJmcmliaWRpID0gIk9wZW5TdVNFPWZyaWJpZGkgVWJ1bnR1PWZyaWJpZGkgTWFuZHJpdmE9ZnJpYmlkaSBEZWJpYW49ZnJpYmlkaSIKK0RJU1RST19QTl9BTElBU19wbi1saWJnY2MgPSAiRGViaWFuPWxpYmdjYzQgVWJ1bnR1PWxpYmdjYzEgT3BlblN1U0U9bGliZ2NjNDYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2RidXMgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2xhZGUgPSAiTWVlZ289bGliZ2xhZGUyIEZlZG9yYT1saWJnbGFkZTIgT3BlblN1U0U9bGliZ2xhZGUyIFVidW50dT1saWJnbGFkZTIgTWFuZHJpdmE9bGliZ2xhZGUyLjAgRGViaWFuPWxpYmdsYWRlMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJnbHUgPSAiRGViaWFuPWxpYmdsdSBVYnVudHU9bGliZ2x1IE9wZW5zdXNlPW1lc2EtbGliZ2x1IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdzbWQgPSAiRmVkb3JhPWdzbSBVYnVudHU9bGliZ3NtIERlYmlhbj1saWJnc20gT3BlbnN1c2U9bGliZ3NtIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmd0a3N0eWx1cyA9ICJEZWJpYW49bGliZ3Rrc3R5bHVzIFVidW50dT1saWJndGtzdHlsdXMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ3UgPSAiT3BlblN1U0U9Z2x1IE9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmkxOG4tY29sbGF0ZS1wZXJsID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmljYWwgPSAiVWJ1bnR1PWxpYmljYWwgRmVkb3JhPWxpYmljYWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliaWNvbnYgPSAiRmVkb3JhPW1pbmd3LWxpYmljb252IE9wZW5zdXNlPWNyb3NzLW1pbmd3LWxpYmljb252IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmlucHV0ID0gIlVidW50dT1saWJpbnB1dDAgRmVkb3JhPWxpYmlucHV0MCIKK0RJU1RST19QTl9BTElBU19wbi1saWJqc29uID0gIlVidW50dT1saWJqc29uMC1kZXYgRGViaWFuPWxpYmpzb24wLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1saWJrc2JhID0gIkZlZG9yYT1saWJrc2JhIERlYmlhbj1saWJrc2JhOCBVYnVudHU9bGlia3NiYSIKK0RJU1RST19QTl9BTElBU19wbi1saWJsYnh1dGlsID0gIk1hbmRyaXZhPWxpYmxieHV0aWwgT3BlblN1c2U9eG9yZy14MTEtZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibWF0Y2hib3ggPSAiVWJ1bnR1PWxpYm1hdGNoYm94IEZlZG9yYT1saWJtYXRjaGJveCIKK0RJU1RST19QTl9BTElBU19wbi1saWJtcGMgPSAiRmVkb3JhPWxpYm1wYyBPcGVuU3VzZT1saWJtcGMyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm5ld3QgPSAiRGViaWFuPWxpYm5ld3QwLjUyIEZlZG9yYT1uZXd0IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm5ld3QtcHl0aG9uID0gIlVidW50dT1weXRob24tbmV3dCBGZWRvcmE9bmV3dC1weXRob24iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibnNzLW1kbnMgPSAiTWVlZ289bnNzLW1kbnMgT3BlblN1U0U9bnNzLW1kbnMgVWJ1bnR1PW5zcy1tZG5zIE1hbmRyaXZhPW5zc19tZG5zIERlYmlhbj1uc3MtbWRucyIKK0RJU1RST19QTl9BTElBU19wbi1saWJvbXhpbCA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vb214aWwuc291cmNlZm9yZ2UubmV0LyIKK0RJU1RST19QTl9BTElBU19wbi1saWJvd2wgPSAiRGViaWFuPW93bCBPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm93bC1hdiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBhbSA9ICJNZWVnbz1wYW0gRmVkb3JhPXBhbSBPcGVuU3VTRT1wYW0gVWJ1bnR1PXBhbSBNYW5kcml2YT1wYW0gRGViaWFuPXBhbSIKK0RJU1RST19QTl9BTElBU19wbi1saWJwY3JlID0gIk1hbmRyaXZhPWxpYnBjcmUwIEZlZG9yYT1wY3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBuZzEyID0gIkRlYmlhbj1saWJwbmcxMi0wIEZlZG9yYT1saWJwbmciCitESVNUUk9fUE5fQUxJQVNfcG4tbGlicG9kLXBsYWluZXItcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJzYW1wbGVyYXRlMCA9ICJNZWVnbz1saWJzYW1wbGVyYXRlIEZlZG9yYT1saWJzYW1wbGVyYXRlIE9wZW5TdVNFPWxpYnNhbXBsZXJhdGUgVWJ1bnR1PWxpYnNhbXBsZXJhdGUgTWFuZHJpdmE9bGlic2FtcGxlcmF0ZSBEZWJpYW49bGlic2FtcGxlcmF0ZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJzZGwgPSAiRmVkb3JhPVNETCBPcGVuc3VzZT1TREwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2RsMiA9ICJGZWRvcmE9c2RsMiBPcGVuc3VzZT1saWJzZGwyIFVidW50dT1saWJzZGwyIERlYmlhbj1saWJzZGwyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNuZGZpbGUxID0gIk1lZWdvPWxpYnNuZGZpbGUgRmVkb3JhPWxpYnNuZGZpbGUgT3BlblN1U0U9bGlic25kZmlsZSBVYnVudHU9bGlic25kZmlsZSBNYW5kcml2YT1saWJzbmRmaWxlIERlYmlhbj1saWJzbmRmaWxlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNvdXAtMi40ID0gIk1lZWdvPWxpYnNvdXAgRmVkb3JhPWxpYnNvdXAgT3BlblN1U0U9bGlic291cCBVYnVudHU9bGlic291cDIuNCBNYW5kcml2YT1saWJzb3VwIERlYmlhbj1saWJzb3VwMi40IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnN5bmMgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidGVsZXBhdGh5ID0gIkRlYmlhbj1saWJ0ZWxlcGF0aHkyIFVidW50dT1saWJ0ZWxlcGF0aHkyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnRpbWVkYXRlLXBlcmwgPSAiRGViaWFuPWxpYnRpbWVkYXRlLXBlcmwgVWJ1bnR1PWxpYnRpbWVkYXRlLXBlcmwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidXJjdSA9ICJGZWRvcmE9dXNlcnNwYWNlLXJjdSBVYnVudHU9bGlidXJjdTAiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidXNiMSA9ICJEZWJpYW49bGlidXNiLTEuMC0wIEZlZG9yYT1saWJ1c2IxIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVzYi1jb21wYXQgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieDExID0gIkRlYmlhbj1saWJ4MTEtNiBGZWRvcmE9bGliWDExIFVidW50dT1saWJ4MTEtNiBPcGVuU3VTRT14b3JnLXgxMS1saWJYMTEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieDExLWRpZXQgPSAiRGViaWFuPWxpYngxMS02IEZlZG9yYT1saWJYMTEgVWJ1bnR1PWxpYngxMS02IE9wZW5TdVNFPXhvcmcteDExLWxpYlgxMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4Y2FsaWJyYXRlID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL2xpYi9saWJYQ2FsaWJyYXRlLyIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4Zm9udGNhY2hlID0gIk1hbmRyaXZhPWxpYnhmb250Y2FjaGUgRGViaWFuPWxpYnhmb250Y2FjaGUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGZ0ID0gIk1hbmRyaXZhPWxpYnhmdCBEZWJpYW49bGlieGZ0MiBVYnVudHU9bGlieGZ0MiIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4aSA9ICJVYnVudHU9bGlieGkgRmVkb3JhPWxpYlhpIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhrYmNvbW1vbiA9ICJGZWRvcmE9bGlieGtiY29tbW9uIERlYmlhbj1saWJ4a2Jjb21tb24iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHByaW50YXBwdXRpbCA9ICJEZWJpYW49bGlieHByaW50YXBwdXRpbCBVYnVudHU9bGlieHByaW50YXBwdXRpbDEgTWFuZHJpdmE9bGlieHByaW50YXBwdXRpbCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4c2NybnNhdmVyID0gIkZlZG9yYT1saWJYU2NyblNhdmVyIFVidW50dT1saWJ4c3MxIE1hbmRyaXZhPWxpYnhzY3Juc2F2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHNldHRpbmdzLWNsaWVudCA9ICJEZWJpYW49bGlieHNldHRpbmdzLWNsaWVudDAgVWJ1bnR1PWxpYnhzZXR0aW5ncy1jbGllbnQwIE1hbmRyaXZhPWxpYlhzZXR0aW5ncy1jbGllbnQwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnh0cmFwID0gIkRlYmlhbj1saWJ4dHJhcDYgRmVkb3JhPWxpYlhUcmFwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnh4Zjg2bWlzYyA9ICJNYW5kcml2YT1saWJ4eGY4Nm1pc2MgRmVkb3JhPWxpYlh4Zjg2bWlzYyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1kdW1teSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1maXJtd2FyZSA9ICJGZWRvcmE9bGludXgtZmlybXdhcmUgVWJ1bnR1PWxpbnV4LWZpcm13YXJlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LWxpYmMtaGVhZGVycyA9ICJEZWJpYW49bGludXgta2VybmVsLWhlYWRlcnMgVWJ1bnR1PWxpbnV4LWtlcm5lbC1oZWFkZXJzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LWxpYmMtaGVhZGVycy15b2N0byA9ICJEZWJpYW49bGludXgta2VybmVsLWhlYWRlcnMgVWJ1bnR1PWxpbnV4LWtlcm5lbC1oZWFkZXJzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LXlvY3RvID0gIkRlYmlhbj1saW51eC1iYXNlIFVidW50dT1saW51eCIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC15b2N0by1ydCA9ICJEZWJpYW49bGludXgtYmFzZSBVYnVudHU9bGludXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgteW9jdG8tdGlueSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1sc2Jpbml0c2NyaXB0cyA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tbHNic2V0dXAgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxzYnRlc3QgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWx0cCA9ICJNYW5kcml2YT1sdHAgVWJ1bnR1PWx0cCIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy1tb2R1bGVzID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9sdHRuZy5vcmcvIgorRElTVFJPX1BOX0FMSUFTX3BuLWx0dG5nLXRvb2xzID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9sdHRuZy5vcmcvIgorRElTVFJPX1BOX0FMSUFTX3BuLWx0dG5nLXVzdCA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sejQgPSAiRGViaWFuPWx6NCBGZWRvcmE9bHo0IgorRElTVFJPX1BOX0FMSUFTX3BuLWx6byA9ICJEZWJpYW49bGlibHpvIFVidW50dT1saWJsem8gRmVkb3JhPWx6cCIKK0RJU1RST19QTl9BTElBU19wbi1tYWlseCA9ICJEZWJpYW49YnNkLW1haWx4IFVidW50dT1ic2QtbWFpbHgiCitESVNUUk9fUE5fQUxJQVNfcG4tbWFrZWRlcGVuZCA9ICJNYW5kcml2YT1tYWtlZGVwZW5kIFVidW50dT14dXRpbHMtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLW1ha2VkZXZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LWRlc2t0b3AgPSAiTWFuZHJpdmE9bWF0Y2hib3gtZGVza3RvcCBVYnVudHU9bWF0Y2hib3gtZGVza3RvcCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1kZXNrdG9wLXNhdG8gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1rZXlib2FyZCA9ICJEZWJpYW49bWF0Y2hib3gta2V5Ym9hcmQgRmVkb3JhPW1hdGNoYm94LWtleWJvYXJkIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiRGViaWFuPW1hdGNoYm94LXBhbmVsIE1hbmRyaXZhPW1hdGNoYm94LXBhbmVsIFVidW50dT1tYXRjaGJveC1wYW5lbCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1zZXNzaW9uID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtc2Vzc2lvbi1zYXRvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGVybWluYWwgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10aGVtZS1zYXRvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWUtc2F0by0yID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWVzLWV4dHJhID0gIlVidW50dT1tYXRjaGJveC10aGVtZXMtZXh0cmEgTWFuZHJpdmE9bWF0Y2hib3gtdGhlbWVzLWV4dHJhIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lcy1ndGsgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC13bSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXdtLTIgPSAiTWFuZHJpdmE9bWF0Y2hib3gtd2luZG93LW1hbmFnZXIgRGViaWFuPW1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lbnUtY2FjaGUgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWVzYSA9ICJGZWRvcmE9bWVzYSBVYnVudHU9bGliZ2wxLW1lc2EtZHJpIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lc2EtZ2wgPSAiRmVkb3JhPW1lc2EgVWJ1bnR1PWxpYmdsMS1tZXNhLWRyaSIKK0RJU1RST19QTl9BTElBU19wbi1tZXNhLWdsc2wgPSAiRmVkb3JhPW1lc2EgVWJ1bnR1PWxpYmdsMS1tZXNhLWRyaSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLWVudmlyb25tZW50LWV4dHNkay1xZW11eDg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1pNTg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1xZW11eDg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1xZW11eDg2LTY0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1pZGUtc3VwcG9ydCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtdG9vbGNoYWluID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS10b29sY2hhaW4tcXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLXRvb2xjaGFpbi1xdGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1taW5pLXgtc2Vzc2lvbiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1ta2VsZmltYWdlID0gIlVidW50dT1ta2VsZmltYWdlIEZlZG9yYT1ta2VsZmltYWdlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1rZm9udGRpciA9ICJNYW5kcml2YT1ta2ZvbnRkaXIgVWJ1bnR1PXhmb250cy11dGlscyBGZWRvcmE9eG9yZy14MTEtZm9udC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ta2ZvbnRzY2FsZSA9ICJNYW5kcml2YT1ta2ZvbnRzY2FsZSBVYnVudHU9eGZvbnRzLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1mb250LXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW1rdGVtcCA9ICJNYW5kcml2YT1ta3RlbXAgRmVkb3JhPW1rdGVtcCIKK0RJU1RST19QTl9BTElBU19wbi1tbWMtdXRpbHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tb2JsaW4tcHJvdG8gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tb2R1dGlscy1jb2xsYXRlcmFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9kdXRpbHMtaW5pdHNjcmlwdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tc3luY3Rvb2wgPSAiT3BlblN1c2U9bXN5bmN0b29sIE1hbmRyaXZhPW1zeW5jdG9vbCIKK0RJU1RST19QTl9BTElBU19wbi1tdGQtdXRpbHMgPSAiRGViaWFuPW10ZC11dGlscyBVYnVudHU9bXRkLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW14LTEuMCA9ICJVYnVudHU9bXggRGViaWFuPW14IEZlZG9yYT1teCIKK0RJU1RST19QTl9BTElBU19wbi1uNDUwLWF1ZGlvID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLW5lYXJkID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLW5lb24gPSAiRmVkb3JhPW5lb24gT3BlbnN1c2U9bmVvbiIKK0RJU1RST19QTl9BTElBU19wbi1uZXR3b3JrLXN1c3BlbmQtc2NyaXB0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW5mcy1leHBvcnQtcm9vdCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW5wdGggPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbnNzLW15aG9zdG5hbWUgPSAiTWVlZ289bnNzLW1kbnMgT3BlblN1U0U9bnNzLW1kbnMgVWJ1bnR1PW5zcy1tZG5zIE1hbmRyaXZhPW5zc19tZG5zIERlYmlhbj1uc3MtbWRucyIKK0RJU1RST19QTl9BTElBU19wbi1vY2YtbGludXggPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tb2Zvbm8gPSAiRGViaWFuPW9mb25vIFVidW50dT1vZm9ubyIKK0RJU1RST19QTl9BTElBU19wbi1vaC1wdXp6bGVzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vc3ZuLm9wZW5tb2tvLm9yZy90cnVuay9zcmMvdGFyIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctYXJjaC1jb25maWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLWNvbGxhdGVyYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLWtleXJpbmdzID0gIk9TUERUIHVwc3RyZWFtPWdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1ub2dwZyA9ICJPU1BEVCB1cHN0cmVhbT1naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctdXRpbHMgPSAiT1NQRFQgdXBzdHJlYW09Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZSA9ICJEZWJpYW49b3Byb2ZpbGUgRmVkb3JhPW9wcm9maWxlIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wcm9maWxldWkgPSAiRmVkb3JhPW9wcm9maWxldWkgVWJ1bnR1PW9wcm9maWxlLWd1aSBEZWJpYW49b3Byb2ZpbGUtZ3VpIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wcm9maWxldWktc2VydmVyID0gIkZlZG9yYT1vcHJvZmlsZXVpIFVidW50dT1vcHJvZmlsZS1ndWkgRGViaWFuPW9wcm9maWxlLWd1aSIKK0RJU1RST19QTl9BTElBU19wbi1vcy1yZWxlYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3dsLXZpZGVvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWJhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWJvb3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1sc2IgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1uZnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1xdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXF0NGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1taW5pID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi1pNTg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLXFlbXV4ODYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tcWVtdXg4Ni02NCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdDRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldCA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1zZGstaG9zdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2UtaW5kZXggPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYXRjaGVsZiA9ICJPcGVuc3VzZT1wYXRjaGVsZiBGZWRvcmE9cGF0Y2hlbGYiCitESVNUUk9fUE5fQUxJQVNfcG4tcGVyZiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1waWdsaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wa2djb25maWcgPSAiVWJ1bnR1PXBrZy1jb25maWcgRmVkb3JhPXBrZ2NvbmZpZyIKK0RJU1RST19QTl9BTElBU19wbi1wb2ludGVyY2FsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9pbnRlcmNhbC14aW5wdXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wb2t5LWZlZWQtY29uZmlnLW9wa2cgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wb25nLWNsb2NrID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9ydG1hcCA9ICJEZWJpYW49cnBjYmluZCBGZWRvcmE9cnBjYmluZCIKK0RJU1RST19QTl9BTElBU19wbi1wb3N0aW5zdC1pbnRlcmNlcHQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wb3dlcnRvcCA9ICJNZWVnbz1wb3dlcnRvcCBGZWRvcmE9cG93ZXJ0b3AgRGViaWFuPXBvd2VydG9wIE9wZW5TdVNFPXBvd2VydG9wIE1hbmRyaXZhPXBvd2VydG9wIgorRElTVFJPX1BOX0FMSUFTX3BuLXBwcC1kaWFsaW4gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wcmVzZW50cHJvdG8gPSAiRGViaWFuPXgxMXByb3RvLXByZXNlbnQtZGV2IEZlZG9yYT14b3JnLXgxMS1wcm90by1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1wcmludHByb3RvID0gIkRlYmlhbj14MTFwcm90by1wcmludC1kZXYgVWJ1bnR1PXgxMXByb3RvLXByaW50LWRldiBNYW5kcml2YT14MTEtcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHNldWRvID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1wc3BsYXNoID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcHRlc3QtcnVubmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcHV6emxlcyA9ICJEZWJpYW49c2d0LXB1enpsZXMgRmVkb3JhPXB1enpsZXMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uMyA9ICJGZWRvcmE9cHl0aG9uMyBEZWJpYW49cHl0aG9uMy4yIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbjMtZGlzdHJpYnV0ZSA9ICJEZWJpYW49cHl0aG9uMy1zZXR1cHRvb2xzIEZlZG9yYT1weXRob24zLXNldHVwdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLVpTSSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1hcmdwYXJzZSA9ICJGZWRvcmE9cHl0aG9uLWFyZ3BhcnNlIE9wZW5TdVNFPXB5dGhvbi1hcmdwYXJzZSIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tZGJ1cyA9ICJVYnVudHU9cHl0aG9uLWRidXMgRGViaWFuPXB5dGhvbi1kYnVzIE1hbmRyaXZhPXB5dGhvbi1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIk9wZW5zdXNlPXB5dGhvbi1zZXR1cHRvb2xzIEZlZG9yYT1weXRob24tc2V0dXB0b29scyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tZ2l0ID0gIkRlYmlhbj1weXRob24tZ2l0IEZlZG9yYT1HaXRQeXRob24iCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLW1ha28gPSAiRmVkb3JhPXB5dGhvbi1tYWtvIE9wZW5zdXNlPXB5dGhvbi1NYWtvIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWNhaXJvID0gIk1lZWdvPXB5Y2Fpcm8gRmVkb3JhPXB5Y2Fpcm8gVWJ1bnR1PXB5Y2Fpcm8gRGViaWFuPXB5Y2Fpcm8iCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Y3VybCA9ICJEZWJpYW49cHl0aG9uLXB5Y3VybCBVYnVudHU9cHl0aG9uLXB5Y3VybCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlnb2JqZWN0ID0gIk1lZWdvPXB5Z29iamVjdDIgRmVkb3JhPXB5Z29iamVjdDIgVWJ1bnR1PXB5Z29iamVjdCBEZWJpYW49cHlnb2JqZWN0IgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWd0ayA9ICJEZWJpYW49cHl0aG9uLWd0azIgRmVkb3JhPXB5Z3RrMiBPcGVuU3VTRT1weXRob24tZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weXJleCA9ICJNYW5kcml2YT1weXRob24tcHlyZXggVWJ1bnR1PXB5dGhvbi1weXJleCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tc2NvbnMgPSAiRmVkb3JhPXNjb25zIE9wZW5TdVNFPXNjb25zIFVidW50dT1zY29ucyBNYW5kcml2YT1zY29ucyBEZWJpYW49c2NvbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNldHVwdG9vbHMgPSAiTWFuZHJpdmE9cHl0aG9uLXNldHVwIE9wZW5TdVNFPXB5dGhvbi1zZXR1cC1naXQiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNtYXJ0cG0gPSAiRGViaWFuPXNtYXJ0IE9wZW5TdVNFPXNtYXJ0IgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXUtY29uZmlnID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdWdsID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdS1oZWxwZXIgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1xZW11d3JhcHBlci1jcm9zcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXFtbXAgPSAiRmVkb3JhPXFtbXAgRGViaWFuPXFtbXAiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0ID0gIk1hbmRyaXZhPWxpYnF0NC1kZXZlbCBVYnVudHU9bGlicXQ0LWRldiIKK0RJU1RST19QTl9BTElBU19wbi1xdDRlLWRlbW8taW1hZ2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xdDQtZW1iZWRkZWQgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LWdyYXBoaWNzLXN5c3RlbSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC10b29scyA9ICJNYW5kcml2YT1saWJxdDQtZGV2ZWwgVWJ1bnR1PWxpYnF0NC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LXgxMS1mcmVlID0gIlVidW50dT1xdC14MTEtZnJlZSBEZWJpYW49cXQteDExLWZyZWUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQtZGVtby1pbml0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXVpY2t5ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXJhbmRycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmFuZHJwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZWFkbGluZSA9ICJGZWRvcmE9cmVhZGxpbmUgRGViaWFuPXJlYWRsaW5lLWNvbW1vbiIKK0RJU1RST19QTl9BTElBU19wbi1yZWNvcmRwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1yZWNvcmRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZW1ha2UgPSAiTWFuZHJpdmE9cmVtYWtlIERlYmlhbj1yZW1ha2UiCitESVNUUk9fUE5fQUxJQVNfcG4tcmVuZGVycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVuZGVycHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVzb3VyY2Vwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1yZXNvdXJjZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXJnYiA9ICJGZWRvcmE9eG9yZy1YMTEtc2VydmVyLXV0aWxzIERlYmlhbj14MTEteHNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ycG1yZXNvbHZlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXJ0LXRlc3RzID0gIkRlYmlhbj1ydC10ZXN0cyBVYnVudHU9cnQtdGVzdHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcnVuLXBvc3RpbnN0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXNhdG8taWNvbi10aGVtZSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNhdG8tc2NyZWVuc2hvdCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNiYyA9ICJGZWRvcmE9c2JjIERlYmlhbj1saWJzYmMxIgorRElTVFJPX1BOX0FMSUFTX3BuLXNjcmVlbnNob3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zY3Juc2F2ZXJwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1zY3Juc2F2ZXJwcm90byBVYnVudHU9eDExcHJvdG8tc2NybnNhdmVyLWRldiBEZWJpYW49eDExcHJvdG8tc2NybnNhdmVyLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1zZXR0aW5ncy1kYWVtb24gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zZ21sLWNvbW1vbiA9ICJPcGVuU3VTRT1zZ21sLWNvbW1vbiBGZWRvcmE9c2dtbC1jb21tb24iCitESVNUUk9fUE5fQUxJQVNfcG4tc2dtbHNwbCA9ICJEZWJpYW49c2dtbHNwbCBVYnVudHU9c2dtbHNwbCIKK0RJU1RST19QTl9BTElBU19wbi1zaGFkb3ctc2VjdXJldHR5ID0gIlVidW50dT1zaGFkb3cgRmVkb3JhPXNoYWRvdyIKK0RJU1RST19QTl9BTElBU19wbi1zaGFkb3ctc3lzcm9vdCA9ICJVYnVudHU9c2hhZG93IEZlZG9yYT1zaGFkb3ciCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhc3VtID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc2h1dGRvd24tZGVza3RvcCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNpZ25ncCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXN0YXQgPSAiRGViaWFuPWNvcmV1dGlscyBGZWRvcmE9Y29yZXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXN3YWJiZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zeXNrbG9nZCA9ICJEZWJpYW49c3lza2xvZ2QgTWFuZHJpdmE9c3lza2xvZ2QiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzcHJvZiA9ICJGZWRvcmE9c3lzcHJvZiBEZWJpYW49c3lzcHJvZiIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW1kLWNvbXBhdC11bml0cyA9ICJGZWRvcmE9c3lzdGVtZCBVYnVudHU9c3lzdGVtZCIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW1kLXN5c3RlbWN0bCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3RlbWQtc3lzdGVtZGN0bCA9ICJGZWRvcmE9c3lzdGVtZCBVYnVudHU9c3lzdGVtZCIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW10YXAtdXByb2JlcyA9ICJVYnVudHU9c3lzdGVtdGFwIERlYmlhbj1zeXN0ZW10YXAiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdmluaXQtaW5pdHRhYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXRhYmxlID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXRhci1yZXBsYWNlbWVudCA9ICJGZWRvcmE9dGFyIFVidW50dT10YXIiCitESVNUUk9fUE5fQUxJQVNfcG4tdGNmLWFnZW50ID0gIldpbmRyaXZlciB1cHN0cmVhbT1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2RzZHAvdG0vIgorRElTVFJPX1BOX0FMSUFTX3BuLXRlbGVwYXRoeS1weXRob24gPSAiRGViaWFuPXRlbGVwYXRoeS1weXRob24gVWJ1bnR1PXRlbGVwYXRoeS1weXRob24iCitESVNUUk9fUE5fQUxJQVNfcG4tdGV4aW5mby1kdW1teS1uYXRpdmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi10aW55LWluaXQgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tdGlueWxvZ2luID0gIkRlYmlhbj1idXN5Ym94IFVidW50dT1idXN5Ym94IE1hbmRyaXZhPWJ1c3lib3giCitESVNUUk9fUE5fQUxJQVNfcG4tdHJhY2UtY21kID0gIk1hbmRyaXZhPXRyYWNlLWNtZCBVYnVudHU9dHJhY2UtY21kIgorRElTVFJPX1BOX0FMSUFTX3BuLXRyYXBwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by10cmFwcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tdHJlbW9yID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93d3cueGlwaC5vcmcvdm9yYmlzLyIKK0RJU1RST19QTl9BTElBU19wbi10c2xpYiA9ICJEZWJpYW49dHNsaWIgVWJ1bnR1PXRzbGliIgorRElTVFJPX1BOX0FMSUFTX3BuLXR0Zi1iaXRzdHJlYW0tdmVyYSA9ICJEZWJpYW49dHRmLWJpdHN0cmVhbS12ZXJhIFVidW50dT10dGYtYml0c3RyZWFtLXZlcmEiCitESVNUUk9fUE5fQUxJQVNfcG4tdHpjb2RlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXUtYm9vdC1mdy11dGlscyA9ICJVYnVudHU9dS1ib290LXRvb2xzIERlYmlhbj11LWJvb3QtdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tdS1ib290LW1raW1hZ2UgPSAiVWJ1bnR1PXVib290LW1raW1hZ2UgRGViaWFuPXVib290LW1raW1hZ2UiCitESVNUUk9fUE5fQUxJQVNfcG4tdWRldi1leHRyYWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11bmZzMyA9ICJEZWJpYW49dW5mczMgRmVkb3JhPXVuZnMzIgorRElTVFJPX1BOX0FMSUFTX3BuLXVuZnMtc2VydmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdW5pbmF0aXZlLXRhcmJhbGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2cgPSAiT3BlbnN1c2U9dXBkYXRlLWFsdGVybmF0aXZlcyBNYW5kcml2YT11cGRhdGUtYWx0ZXJuYXRpdmVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXVwZGF0ZS1yYy5kID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdXNiaW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXV0aWwtbWFjcm9zID0gIk1lZWdvPXhvcmcteDExLXV0aWwtbWFjcm9zIEZlZG9yYT14b3JnLXgxMS11dGlsLW1hY3JvcyBNYW5kcml2YT14MTEtdXRpbC1tYWNyb3MiCitESVNUUk9fUE5fQUxJQVNfcG4tdjg2ZCA9ICJEZWJpYW49djg2ZCBVYnVudHU9djg2ZCIKK0RJU1RST19QTl9BTElBU19wbi12aWRlb3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXZpZGVvcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4td2FmZmxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4td2F0Y2hkb2cgPSAiRGViaWFuPXdhdGNoZG9nIFVidW50dT13YXRjaGRvZyBNYW5kcml2YT13YXRjaGRvZyIKK0RJU1RST19QTl9BTElBU19wbi13ZWJraXRndGsgPSAiRmVkb3JhPXdlYmtpdGd0ayBVYnVudHU9bGlid2Via2l0IgorRElTVFJPX1BOX0FMSUFTX3BuLXdlYi13ZWJraXQgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi13ZXN0b24gPSAiRmVkb3JhPXdlc3RvbiBPcGVuU3VTRT13ZXN0b24iCitESVNUUk9fUE5fQUxJQVNfcG4td2VzdG9uLWluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi13aGljaCA9ICJNYW5kcml2YT13aGljaCBGZWRvcmE9d2hpY2giCitESVNUUk9fUE5fQUxJQVNfcG4td3BhLXN1cHBsaWNhbnQgPSAiTWVlZ289d3BhX3N1cHBsaWNhbnQgRmVkb3JhPXdwYV9zdXBwbGljYW50IE9wZW5TdVNFPXdwYV9zdXBwbGljYW50IFVidW50dT13cGFzdXBwbGljYW50IE1hbmRyaXZhPXdwYV9zdXBwbGljYW50IERlYmlhbj13cGFzdXBwbGljYW50IgorRElTVFJPX1BOX0FMSUFTX3BuLXgxMS1jb21tb24gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14MTFwZXJmID0gIkZlZG9yYT14b3JnLXgxMS1hcHBzIFVidW50dT14MTEtYXBwcyIKK0RJU1RST19QTl9BTElBU19wbi14MTF2bmMgPSAiRmVkb3JhPXgxMXZuYyBVYnVudHU9eDExdm5jIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjYi11dGlsLWltYWdlID0gIkRlYmlhbj14Y2ItdXRpbCBGZWRvcmE9eGNiLXV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4teGNiLXV0aWwta2V5c3ltcyA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjYi11dGlsLXdtID0gIkRlYmlhbj14Y2ItdXRpbCBGZWRvcmE9eGNiLXV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4teGNtaXNjcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGNtaXNjcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGN1cnNvci10cmFuc3BhcmVudC10aGVtZSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXhkcHlpbmZvID0gIkZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhldiA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14ZXh0cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGV4dHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhleWVzID0gIlVidW50dT14MTEtYXBwcyBGZWRvcmE9eG9yZy14MTEtYXBwcyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2YmlnZm9udHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZiaWdmb250cHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmRnYXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZkZ2Fwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2ZHJpcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NmRyaXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtZXZkZXYgPSAiVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC1ldmRldiBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LWV2ZGV2IERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQtZXZkZXYgRmVkb3JhPXhvcmcteDExLWRydi1ldmRldiBNZWVnbz14b3JnLXgxMS1kcnYtZXZkZXYiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1rZXlib2FyZCA9ICJNZWVnbz14b3JnLXgxMS1kcnYta2V5Ym9hcmQgRmVkb3JhPXhvcmcteDExLWRydi1rZXlib2FyZCBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LWtleWJvYXJkIERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQta2V5Ym9hcmQiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1tb3VzZSA9ICJVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LW1vdXNlIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtbW91c2UgRGViaWFuPXhzZXJ2ZXIteG9yZy1pbnB1dC1tb3VzZSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LXN5bmFwdGljcyA9ICJNZWVnbz14b3JnLXgxMS1kcnYtc3luYXB0aWNzIEZlZG9yYT14b3JnLXgxMS1kcnYtc3luYXB0aWNzIFVidW50dT14c2VydmVyLXhvcmctaW5wdXQtc3luYXB0aWNzIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtc3luYXB0aWNzIERlYmlhbj14ZnJlZTg2LWRyaXZlci1zeW5hcHRpY3MiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC12bW1vdXNlID0gIkZlZG9yYT14b3JnLXgxMS1kcnYtdm1tb3VzZSBVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LXZtbW91c2UgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC12bW1vdXNlIERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQtdm1tb3VzZSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2bWlzY3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZtaXNjcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NnJ1c2hwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2cnVzaHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tY2lycnVzID0gIk9wZW5zdXNlPXhmODYtdmlkZW8tY2lycnVzIERlYmlhbj14c2VydmVyLXhvcmctdmlkZW8tY2lycnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tZmJkZXYgPSAiVWJ1bnR1PXhzZXJ2ZXIteG9yZy12aWRlby1mYmRldiBEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLWZiZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8taW50ZWwgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1pbnRlbCBGZWRvcmE9eG9yZy14MTEtZHJ2LWludGVsIE1hbmRyaXZhPXgxMS1kcml2ZXItdmlkZW8taW50ZWwgTWVlZ289eG9yZy14MTEtZHJ2LWludGVsIFVidW50dT14c2VydmVyLXhvcmctdmlkZW8taW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLW1vZGVzZXR0aW5nIEZlZG9yYT14Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tb21hcCA9ICJVYnVudHU9eGY4Ni12aWRlby1vbWFwIERlYmlhbj14Zjg2LXZpZGVvLW9tYXAiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby12ZXNhID0gIkRlYmlhbj14c2VydmVyLXhvcmctdmlkZW8tdmVzYSBGZWRvcmE9eG9yZy14MTEtZHJ2LXZlc2EgTWFuZHJpdmE9eDExLWRyaXZlci12aWRlby12ZXNhIFVidW50dT14c2VydmVyLXhvcmctdmlkZW8tdmVzYSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLXZtd2FyZSBGZWRvcmE9eG9yZy14MTEtZHJ2LXZtd2FyZSBNYW5kcml2YT14MTEtZHJpdmVyLXZpZGVvLXZtd2FyZSBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLXZtd2FyZSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2dmlkbW9kZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZ2aWRtb2RlcHJvdG8gVWJ1bnR1PXgxMXByb3RvLXhmODZ2aWRtb2RlIERlYmlhbj14MTFwcm90by14Zjg2dmlkbW9kZSIKK0RJU1RST19QTl9BTElBU19wbi14aG9zdCA9ICJVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMgRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14aW5lcmFtYXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhpbmVyYW1hcHJvdG8gVWJ1bnR1PXgxMXByb3RvLXhpbmVyYW1hIERlYmlhbj14MTFwcm90by14aW5lcmFtYSIKK0RJU1RST19QTl9BTElBU19wbi14aW5wdXQtY2FsaWJyYXRvciA9ICJGZWRvcmE9eGlucHV0LWNhbGlicmF0b3IgTWFuZHJhdmlhPXhpbnB1dC1jYWxpYnJhdG9yIFVidW50dT14aW5wdXQtY2FsaWJyYXRvciIKK0RJU1RST19QTl9BTElBU19wbi14a2Jjb21wID0gIlVidW50dT14MTEteGtiLXV0aWxzIEZlZG9yYT14b3JnLXgxMS14a2ItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teG1vZG1hcCA9ICJNZWVnbz14b3JnLXgxMS11dGlscy14bW9kbWFwIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMgVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhvcmctbWluaW1hbC1mb250cyA9ICJVYnVudHU9eGZvbnRzLWJhc2UgRmVkb3JhPXhvcmcteDExLWZvbnRzLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4teHByb3AgPSAiTWVlZ289eG9yZy14MTEtdXRpbHMteHByb3AgRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhwcm90byBGZWRvcmE9eG9yZy14MTEtcHJvdG8tZGV2ZWwgVWJ1bnR1PXgxMXByb3RvLWNvcmUtZGV2IERlYmlhbj14MTFwcm90by1jb3JlLWRldiBPcGVuc3VzZT14b3JnLXgxMS1wcm90by1kZXZlbCBNYW5kcml2YT14MTEtcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4teHByb3h5bWFuYWdlbWVudHByb3RvY29sID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhwcm94eW1hbmFnZW1lbnRwcm90b2NvbCIKK0RJU1RST19QTl9BTElBU19wbi14cmFuZHIgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHJkYiA9ICJVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMgRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLW5vZG0taW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXJ2ZXIteGY4Ni1jb25maWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtZHJpLWxpdGUgPSAiRmVkb3JhPXhvcmcteDExLXNlcnZlciBVYnVudHU9eHNlcnZlci14b3JnIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXJ2ZXIteGY4Ni1saXRlID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhvcmcgPSAiRmVkb3JhPXhvcmcteDExLXNlcnZlciBVYnVudHU9eHNlcnZlci14b3JnIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXQgPSAiRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyBVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMgRGViaWFuPXgxMS14c2VydmVyLXV0aWxzIE9wZW5zdXNlPXhvcmcteDExIgorRElTVFJPX1BOX0FMSUFTX3BuLXh0c2NhbCA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vZ3BlLmxpbnV4dG9nby5vcmcvZG93bmxvYWQvc291cmNlLyIKK0RJU1RST19QTl9BTElBU19wbi14dXNlci1hY2NvdW50ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teHZpZGVvLXRlc3RzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4teHZpbmZvID0gIkZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXh3aW5pbmZvID0gIkZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXlhZmZzMi11dGlscyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd3d3LnlhZmZzLm5ldCIKK0RJU1RST19QTl9BTElBU19wbi16YXVydXNkID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4temVyb2NvbmYgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3d3dy5wcm9nc29jLm9yZy9+d2lsZGZpcmUvemVyb2NvbmYvIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjk5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKQEAgLTAsMCArMSwyNzggQEAKKyMgcGFja2FnZV9yZWdleC5pbmMgLSBUaGlzIGZpbGUgY29udGFpbnMgZGF0YSB0aGF0IHRyYWNrcworIyB1cHN0cmVhbSBwcm9qZWN0IGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHJlY2lwZS4gVGhpcyBsaXN0IGlzIG5lZWRlZAorIyBmb3IgcmVjaXBlcyB0aGF0IHZlcnNpb24gaW5mb3JtYXRpb24gY2FuIG5vdCBiZSBhdXRvbWFnaWNhbGx5IGRpc2NvdmVyZWQuCisjIEFzIHdlIGF1dG9tYXRlIHRoaXMgY2hlY2tpbmcsIHRoaXMgZmlsZSB3aWxsIHNsb3dseSBiZSByZWR1Y2VkLgorIyIKKyMgVGhpcyBkYXRhIGlzIHVzZWQgYnkgdGhlIHBhY2thZ2UgcmVwb3J0aW5nIHN5c3RlbSAocGFja2FnZXMueW9jdG9wcm9qZWN0Lm9yZykKKyMiCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIyIKKyMgICAgICAgUkVHRVhfVVJJX3BuLTxyZWNpcGUgbmFtZT4gPSAicmVjaXBlX3VybCIKKyMJIC0gVGhpcyBpcyB0aGUgdXJsIHVzZWQgYnkgdGhlIHBhY2thZ2UgY2hlY2tpbmcgc3lzdGVtIHRvCisjCSAgIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHBhY2thZ2UKKyMgICAgICAgUkVHRVhfcG4tPHJlY2lwZSBuYW1lPiA9ICJwYWNrYWdlX3JlZ2V4IgorIwkgLSBUaGlzIGlzIHRoZSByZWdleCB0aGUgcGFja2FnZSBjaGVja2luZyBzeXN0ZW0gdXNlcyB0bworIwkgICBwYXJzZSB0aGUgcGFnZSBmb3VuZCBhdCBSRUdFWF9VUklfcG4tPHJlY2lwZSBuYW1lPgorIwlHSVRUQUdSRUdFWF9wbi08cmVjaXBlIG5hbWU+ID0gImdpdF90YWdfcmVnZXgiCisjCSAtIFdoZW4gc291cmNlIGNvZGUgaXMgZmV0Y2hlZCBmcm9tIGdpdCwgZ2l0IHRhZ3MgYXJlIHVzZWQgdG8KKyMJICAgZGV0ZXJtaW5lIHRoZSB1cHN0cmVhbSByZWxlYXNlIHZlcnNpb24uIFRoaXMgcmVnZXggY2FuIGJlIHVzZWQKKyMJICAgdG8gZmlsdGVyIG9ubHkgcmVsZXZhbnQgdGFncy4KKyMKKworQ09NTU9OX1JFR0VYID0gIig/UDxwdmVyPihcZCtbXC5cLV9dKikrKSIKKworIyBHZW5lcmljIHJlZ2V4IGRvbid0IG1hdGNoCitSRUdFWF9VUklfcG4td2lyZWxlc3MtdG9vbHMgPSAiaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sIgorUkVHRVhfcG4td2lyZWxlc3MtdG9vbHMgPSAid2lyZWxlc3NfdG9vbHNcLig/UDxwdmVyPihcZCspKFwuLip8KSlcLnRhclwuZ3oiCisKK1JFR0VYX1VSSV9wbi1zcWxpdGUzPSJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvIgorUkVHRVhfcG4tc3FsaXRlMz0icmVsZWFzZWxvZy8ke0NPTU1PTl9SRUdFWH0uaHRtbCIKKworUkVHRVhfVVJJX3BuLWRoY3AgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2RoY3AvIgorUkVHRVhfcG4tZGhjcD0iKD9QPHB2ZXI+XGQrXC5cZCtcLihcZCs/KSkvIgorCitSRUdFWF9wbi1mb29tYXRpYy1maWx0ZXJzID0gImZvb21hdGljLWZpbHRlcnMtKD9QPHB2ZXI+KChcZHxcZFxkKVwuKikrKVwudGFyXC5neiIKK1JFR0VYX3BuLXhkZy11dGlscyA9ICJ4ZGctdXRpbHMtKD9QPHB2ZXI+KChcZCtbXC5cLV9dKikrKSgocmN8YWxwaGF8YmV0YSlcZCspPylcLih0YXJcLmd6fHRneikiCitSRUdFWF9wbi1ycG09InJwbS0ke0NPTU1PTl9SRUdFWH0tLiokIgorUkVHRVhfcG4tbGlidGhlb3JhID0gImxpYnRoZW9yYS0oP1A8cHZlcj5cZCsoXC5cZCkrKVwuKHRhclwuZ3p8dGd6KSIKKworUkVHRVhfcG4taXB1dGlscz0iaXB1dGlscy0oP1A8cHZlcj5zXGQrKS50YXIiCitSRUdFWF9wbi1uZXR0bGUgPSAibmV0dGxlLSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorCitSRUdFWF9wbi1jYWlybyA9ICJjYWlyby0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKK1JFR0VYX3BuLWNtYWtlID0gImNtYWtlLSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorUkVHRVhfcG4tbGlic2RsID0gIlNETC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKK1JFR0VYX3BuLWxpYnhzbHQgPSAibGlieHNsdC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKKworIyBFeGNsdWRlIE5DIHZlcnNpb25zIHdoaWNoIGxhY2sgQUVTIGVuY3J5cHRpb24KK1JFR0VYX3BuLWRiID0gImRiLSg/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKT8pLnRhciIKKworUkVHRVhfVVJJX3BuLWF1dG9nZW4gPSAiaHR0cDovL2Z0cC5nbnUub3JnL2dudS9hdXRvZ2VuLyIKK1JFR0VYX3BuLWF1dG9nZW4gPSAicmVsKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKKworIyBweXRob24gcmVjaXBlIGlzIGFjdHVhbGx5IHB5dGhvbiAyLngKKyMgYWxzbywgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54CitSRUdFWF9wbi1weXRob24gPSAiW1BwXXl0aG9uLSg/UDxwdmVyPjIoXC5cZCspKykudGFyIgorUkVHRVhfcG4tcHl0aG9uMyA9ICJbUHBdeXRob24tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworIyBleGNsdWRlIGJldGFzCitSRUdFWF9wbi10aWZmID0gInRpZmYtKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworIyBleGNsdWRlIHZlcnNpb24gNS41LjIgd2hpY2ggdHJpZ2dlcnMgYSBmYWxzZSBwb3NpdGl2ZQorUkVHRVhfcG4tdW56aXAgPSAidW56aXAoP1A8cHZlcj4oPyE1NTIpLispXC50Z3oiCisjIHNpbWlsYXIgZm9yIHppcAorUkVHRVhfcG4temlwID0gIl56aXAoP1A8cHZlcj4oPyEyMzIpLispXC50Z3oiCisKKyMgSXNuJ3QgcG9zc2libGUgdG8gZG93bmxvYWQgd2l0aCB0aGUgZGVmYXVsdCBVUkkgd2ViIHNlcnZlciByZXR1cm5zCisjICg0MDMsIDQwNCwgNTUwKQorUkVHRVhfVVJJX3BuLWRvc2ZzdG9vbHMgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9yZWxlYXNlcyIKK1JFR0VYX3BuLWpzb24tYyA9ICJqc29uLWMtKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKyMganNvbi1jIHJlbGVhc2VzIHBhZ2UgaXMgZmV0Y2hpbmcgdGhlIGxpc3Qgb2YgcmVsZWFzZXMgaW4gc29tZSB3ZWlyZCBYTUwgZm9ybWF0CisjIGZyb20gaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2pzb24tY19yZWxlYXNlcyBhbmQgcHJvY2Vzc2VzIGl0IHdpdGggamF2YXNjcmlwdCA6LS8KKyNSRUdFWF9VUklfcG4tanNvbi1jID0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMvcmVsZWFzZXMvaW5kZXguaHRtbCIKK1JFR0VYX1VSSV9wbi1jaHJwYXRoID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvP2dyb3VwX2lkPTMxMDUyIgorCitSRUdFWF9VUklfcG4tcG93ZXJ0b3AgPSAiaHR0cHM6Ly8wMS5vcmcvcG93ZXJ0b3AvZG93bmxvYWRzIgorUkVHRVhfVVJJX3BuLWxpYnNhbXBsZXJhdGUwID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9TUkMvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJ4a2Jjb21tb24gPSAiaHR0cDovL3hrYmNvbW1vbi5vcmcvIgorUkVHRVhfVVJJX3BuLXRzbGliID0gImh0dHBzOi8vZ2l0aHViLmNvbS9rZXJnb3RoL3RzbGliL3JlbGVhc2VzIgorUkVHRVhfVVJJX3BuLXdhZmZsZT0iaHR0cDovL3d3dy53YWZmbGUtZ2wub3JnL3JlbGVhc2VzLmh0bWwiCitSRUdFWF9VUklfcG4tbHJ6c3ogPSAiaHR0cDovL29oc2UuZGUvdXdlL3NvZnR3YXJlL2xyenN6Lmh0bWwiCitSRUdFWF9VUklfcG4tbGliYWNwaSA9ICJodHRwOi8vd3d3Lm5nb2xkZS5kZS9saWJhY3BpLmh0bWwiCitSRUdFWF9VUklfcG4tbGVzcyAgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vbGVzcy9kb3dubG9hZC5odG1sIgorUkVHRVhfVVJJX3BuLWN1cHMgPSAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS5waHAiCitSRUdFWF9wbi1jdXBzID0gImN1cHMtKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspPyktc291cmNlLnRhciIKK1JFR0VYX1VSSV9wbi1iemlwMiA9ICJodHRwOi8vd3d3LmJ6aXAub3JnL2Rvd25sb2Fkcy5odG1sIgorUkVHRVhfVVJJX3BuLW1pbmljb20gPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvP2dyb3VwX2lkPTMwMDE4IgorUkVHRVhfVVJJX3BuLXN5c3N0YXQgPSAiaHR0cDovL3NlYmFzdGllbi5nb2RhcmQucGFnZXNwZXJzby1vcmFuZ2UuZnIvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJpY2FsID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJpY2FsL2xpYmljYWwvcmVsZWFzZXMvIgorUkVHRVhfVVJJX3BuLWxpYm1wYyA9ICJodHRwOi8vd3d3Lm11bHRpcHJlY2lzaW9uLm9yZy9pbmRleC5waHA/cHJvZz1tcGMmcGFnZT1kb3dubG9hZCIKK1JFR0VYX1VSSV9wbi10YWdsaWIgPSAiaHR0cDovL2dpdGh1Yi5jb20vdGFnbGliL3RhZ2xpYi9yZWxlYXNlcy8iCitSRUdFWF9VUklfcG4tbGliZXZlbnQgPSAiaHR0cDovL2xpYmV2ZW50Lm9yZy8iCitSRUdFWF9VUklfcG4tZGIgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL3Byb2R1Y3RzL2JlcmtlbGV5ZGIvZG93bmxvYWRzL2luZGV4LTA4Mjk0NC5odG1sIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1zbWFydHBtPSJodHRwczovL2xhdW5jaHBhZC5uZXQvc21hcnQvdHJ1bmsvIgorUkVHRVhfVVJJX3BuLWxzb2YgPSAiZnRwOi8vc3Vuc2l0ZS51YWxiZXJ0YS5jYS9wdWIvTWlycm9yL2xzb2YvIgorUkVHRVhfVVJJX3BuLXBiemlwMiA9ICJodHRwOi8vY29tcHJlc3Npb24uY2EvcGJ6aXAyLyIKK1JFR0VYX1VSSV9wbi1xdWlja3kgPSAiaHR0cDovL3F0LWFwcHMub3JnL2NvbnRlbnQvZG93bmxvYWQucGhwP2NvbnRlbnQ9ODAzMjUmaWQ9MSZ0YW49MTA0MTc0ODIiCitSRUdFWF9VUklfcG4tbGlid2VicCA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwL2luZGV4Lmh0bWwiCisKKyMgVGhlIGVuZ2luZSB0cmllcyB0byB1c2UgZGlyZWN0b3J5IHZlcnNpb25pbmcgYnV0IGlzIGEgZmFsc2UtcG9zaXRpdmUKK1JFR0VYX1VSSV9wbi1pbnRsdG9vbCA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvaW50bHRvb2wvdHJ1bmsvIgorUkVHRVhfVVJJX3BuLWxpYm5mc2lkbWFwID0gImh0dHA6Ly93d3cuY2l0aS51bWljaC5lZHUvcHJvamVjdHMvbmZzdjQvbGludXgvbGlibmZzaWRtYXAvIgorUkVHRVhfVVJJX3BuLW1wZnIgPSAiaHR0cDovL3d3dy5tcGZyLm9yZy9tcGZyLWN1cnJlbnQvIgorUkVHRVhfVVJJX3BuLW5zcyA9ICJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvUHJvamVjdHMvTlNTL05TU19SZWxlYXNlcyIKK1JFR0VYX3BuLW5zcyA9ICJOU1NfKD9QPHB2ZXI+LispX3JlbGVhc2Vfbm90ZXMiCisKK1JFR0VYX1VSSV9wbi1kb2Nib29rLXNnbWwtZHRkLTMuMSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvIgorUkVHRVhfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiKD9QPHB2ZXI+M1wuLispLyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLXNnbWwtZHRkLTQuMSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvIgorUkVHRVhfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiKD9QPHB2ZXI+NFwuMShcLlxkKykqKS8iCisKKyMgUXQgcmVjaXBlcyBzaG91bGQgYmUga2VwdCBhdCA0LngKK1JFR0VYX1VSSV9wbi1xdDQtZW1iZWRkZWQgPSAiaHR0cDovL2Rvd25sb2FkLnF0LmlvL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8iCitSRUdFWF9wbi1xdDQtZW1iZWRkZWQgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKK1JFR0VYX1VSSV9wbi1xdDQteDExLWZyZWUgPSAiaHR0cDovL2Rvd25sb2FkLnF0LmlvL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8iCitSRUdFWF9wbi1xdDQteDExLWZyZWUgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKK1JFR0VYX1VSSV9wbi1uYXRpdmVzZGstcXQ0LXRvb2xzID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tbmF0aXZlc2RrLXF0NC10b29scyA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorUkVHRVhfVVJJX3BuLXF0NC1uYXRpdmUgPSAiaHR0cDovL2Rvd25sb2FkLnF0LmlvL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8iCitSRUdFWF9wbi1xdDQtbmF0aXZlID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCisKKyMgUHlQSSBzaXRlcworUkVHRVhfVVJJX3BuLXB5dGhvbi1ub3NlID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbm9zZS8iCitSRUdFWF9wbi1weXRob24tbm9zZSA9ICIvbm9zZS8ke0NPTU1PTl9SRUdFWH0iCisjIHB5dGhvbi1kaXN0cmlidXRlIDAuNy54IGlzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgbGF5ZXIgdGhhdCBpbnN0YWxscyBTZXR1cHRvb2xzIDAuNysuCisjIHNvIHdlIHN0aWNrIHRvIDAuNi54IHNlcmllcworUkVHRVhfVVJJX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvZGlzdHJpYnV0ZS8iCitSRUdFWF9wbi1weXRob24tZGlzdHJpYnV0ZSA9ICIvZGlzdHJpYnV0ZS8oP1A8cHZlcj5cZCsuNi5cZCspIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1naXRkYiA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2dpdGRiLyIKK1JFR0VYX1VSSV9wbi1weXRob24tYXN5bmMgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9hc3luYy8iCitSRUdFWF9VUklfcG4tcHl0aG9uLXNtbWFwID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc21tYXAvIgorUkVHRVhfcG4tcHl0aG9uLXNtbWFwID0gIi9zbW1hcC8ke0NPTU1PTl9SRUdFWH0iCitSRUdFWF9VUklfcG4tcHl0aG9uLWdpdCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL0dpdFB5dGhvbi8iCitSRUdFWF9wbi1weXRob24tZ2l0ID0gIi9HaXRQeXRob24vJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1tYWtvID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbWFrby8iCitSRUdFWF9wbi1weXRob24tbWFrbyA9ICIvTWFrby8ke0NPTU1PTl9SRUdFWH0iCitSRUdFWF9VUklfcG4tcHl0aG9uLXBleHBlY3QgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9wZXhwZWN0IgorUkVHRVhfVVJJX3BuLXB5dGhvbjMtcGlwID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGlwIgorUkVHRVhfVVJJX3BuLXB5dGhvbjMtc2V0dXB0b29scyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NldHVwdG9vbHMiCisKKyMgU291cmNlZm9yZ2Ugc2l0ZXMKK1JFR0VYX1VSSV9wbi1weXRob24tc2NvbnMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zY29ucy9maWxlcy9zY29ucy8iCitSRUdFWF9wbi1weXRob24tc2NvbnMgPSAiL3Njb25zLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZXhwZWN0ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwZWN0L2ZpbGVzL0V4cGVjdC8iCitSRUdFWF9wbi1leHBlY3QgPSAiL0V4cGVjdC8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZG9jYm9vay9maWxlcy9kb2Nib29rLXhzbC8iCitSRUdFWF9wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICIvZG9jYm9vay14c2wvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1nbGV3ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2xldy9maWxlcy9nbGV3IgorUkVHRVhfcG4tZ2xldyA9ICIvZ2xldy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLW1lbnUtY2FjaGUgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9seGRlL2ZpbGVzL21lbnUtY2FjaGUvMS4wLyIKK1JFR0VYX1VSSV9wbi14MTF2bmMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ2bmNzZXJ2ZXIvZmlsZXMveDExdm5jLyIKK1JFR0VYX3BuLXgxMXZuYyA9ICIveDExdm5jLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tcXVvdGEgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhL2ZpbGVzL3F1b3RhLXRvb2xzLyIKK1JFR0VYX3BuLXF1b3RhID0gIi9xdW90YS10b29scy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxzYiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xzYi9maWxlcy9sc2JfcmVsZWFzZS8iCitSRUdFWF9wbi1sc2IgPSAiL2xzYl9yZWxlYXNlLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tbGlicGNyZSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BjcmUvZmlsZXMvcGNyZS8iCitSRUdFWF9wbi1saWJwY3JlID0gIi9wY3JlLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tbGlidXNiLWNvbXBhdCA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnVzYi9maWxlcy9saWJ1c2ItY29tcGF0LTAuMS8iCitSRUdFWF9wbi1saWJ1c2ItY29tcGF0ID0gIi9saWJ1c2ItY29tcGF0LSR7Q09NTU9OX1JFR0VYfS8kIgorUkVHRVhfVVJJX3BuLXN5c2ZzdXRpbHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC1kaWFnL2ZpbGVzL3N5c2ZzdXRpbHMvIgorUkVHRVhfcG4tc3lzZnN1dGlscyA9ICIvc3lzZnN1dGlscy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWNvbnNvbGUtdG9vbHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9sY3QvZmlsZXMvY29uc29sZS10b29scy1kZXZlbC8iCitSRUdFWF9wbi1jb25zb2xlLXRvb2xzID0gIi9jb25zb2xlLXRvb2xzLWRldmVsLyg/UDxwdmVyPihcZFxkP1wuKStcZFxkPykvIgorUkVHRVhfVVJJX3BuLXdhdGNoZG9nID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvd2F0Y2hkb2cvZmlsZXMvd2F0Y2hkb2cvIgorUkVHRVhfcG4td2F0Y2hkb2cgPSAiL3dhdGNoZG9nLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tY3JhY2tsaWIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jcmFja2xpYi9maWxlcy9jcmFja2xpYi8iCitSRUdFWF9wbi1jcmFja2xpYiA9ICIvY3JhY2tsaWIvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1ncHRmZGlzayA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dwdGZkaXNrL2ZpbGVzL2dwdGZkaXNrLyIKK1JFR0VYX3BuLWdwdGZkaXNrID0gIi9ncHRmZGlzay8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnBuZzEyID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlicG5nL2ZpbGVzL2xpYnBuZzEyLyIKK1JFR0VYX3BuLWxpYnBuZzEyID0gIi9saWJwbmcxMi8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9kb2Nib29rL2ZpbGVzL2RvY2Jvb2stZHNzc2wvIgorUkVHRVhfcG4tZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cyA9ICIvZG9jYm9vay1kc3NzbC8ke0NPTU1PTl9SRUdFWH0vIgorCitSRUdFWF9VUklfcG4tb3BlbmphZGUgPSAiaHR0cDovL29wZW5qYWRlLnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZC5odG1sIgorUkVHRVhfVVJJX3BuLWxpYnBmbTQgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wZXJmbW9uMi9maWxlcy9saWJwZm00LyIKK1JFR0VYX1VSSV9wbi1saWJhNTIgPSAiaHR0cDovL2xpYmE1Mi5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwiCitSRUdFWF9VUklfcG4tbXBlZzJkZWMgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZHMuaHRtbCIKK1JFR0VYX1VSSV9wbi1wY21hbmZtID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGNtYW5mbS9maWxlcy9QQ01hbkZNJTIwJTJCJTIwTGliZm0lMjAlMjh0YXJiYWxsJTIwcmVsZWFzZSUyOS9QQ01hbkZNLyIKK1JFR0VYX1VSSV9wbi1saWJjZ3JvdXAgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJjZy9maWxlcy9saWJjZ3JvdXAvIgorUkVHRVhfVVJJX3BuLWNkcnRvb2xzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY2RydG9vbHMvZmlsZXMvYWxwaGEvIgorCisjIEdJVAorR0lUVEFHUkVHRVhfQ09NTU9OID0gIig/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKSopIgorCitHSVRUQUdSRUdFWF9wbi1saW51eC15b2N0byA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1saW51eC15b2N0by10aW55ID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWxpbnV4LXlvY3RvLWRldiA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi11Y2xpYmMgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tZ2xpYmMgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tY3Jvc3MtbG9jYWxlZGVmID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWJpbnV0aWxzID0gImJpbnV0aWxzLSg/UDxwdmVyPlxkK18oXGRfPykqKSIKK0dJVFRBR1JFR0VYX3BuLWJvb3RjaGFydDIgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tcmVtYWtlID0gIig/UDxwdmVyPihcZCsoXC5cZCspKylcK2RiZy4rKSIKK0dJVFRBR1JFR0VYX3BuLXRjZi1hZ2VudCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKK0dJVFRBR1JFR0VYX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMgPSAiY2hrY29uZmlnLSg/UDxwdmVyPihcZCsoXC5cZCspKykpIgorR0lUVEFHUkVHRVhfcG4tc2dtbHNwbCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworIyBFeGNsdWRlIHguOTkueCB2ZXJzaW9ucworR0lUVEFHUkVHRVhfcG4tbXgtMS4wID0gIig/UDxwdmVyPl5cZCsoXC4oPyE5OSlcZCspKykiCisKKyMgQmxhY2tsaXN0IGEgYm9ndXMgdGFnCitHSVRUQUdSRUdFWF9wbi1maWxlID0gIkZJTEUoP1A8cHZlcj4oPyE2XzIzKS4rKSIKK0dJVFRBR1JFR0VYX3BuLXhpbmV0ZCA9ICJ4aW5ldGQtKD9QPHB2ZXI+KD8hMjAwMzAxMjIpLispIgorCisjIEJsYWNrbGlzdCBkZWJpYW4tc3BlY2lmaWMgdGFncworR0lUVEFHUkVHRVhfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspKD8hLSkiCisKKyMgR05PTUUgcmVsYXRlZC4KKyMKKyMgR05PTUUyX1NUQUJMRSBwaWNrcyBzdGFibGUgcmVsZWFzZXMgaW4gdGhlIDIueCBzZXJpZXMgKHNvIG5vdCAyLjkwIG9ud2FyZHMsCisjIHdoaWNoIHdlcmUgR05PTUUgMyBiZXRhcy4KKyMKKyMgR05PTUVfU1RBQkxFIHBpY2tzIHRoZSBsYXRlc3Qgc3RhYmxlIHJlbGVhc2UuCisKK0dOT01FMl9TVEFCTEUgPSAiKD9QPHB2ZXI+MlwuKFswLThdKlswMjQ2OF0pKyhcLlxkKykrKSIKK0dOT01FX1NUQUJMRSA9ICIoP1A8cHZlcj5cZCtcLihcZCpbMDI0NjhdKSsoXC5cZCspKykiCisKK1JFR0VYX3BuLWdsaWItMi4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWF0ayA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hdC1zcGkyLWNvcmUgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tYXQtc3BpMi1hdGsgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ2RrLXBpeGJ1ZiA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1wYW5nbyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1ndGsrID0gIiR7R05PTUUyX1NUQUJMRX0iCitSRUdFWF9wbi1ndGsrMyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1ndGstZW5naW5lcyA9ICIke0dOT01FMl9TVEFCTEV9IgorUkVHRVhfcG4tZ2xpYi1uZXR3b3JraW5nID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWxpYnJzdmcgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tbGlic291cC0yLjQgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tdmFsYSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jbHV0dGVyLTEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jbHV0dGVyLWd0ay0xLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci1nc3QtMy4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWNvZ2wtMS4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWFkd2FpdGEtaWNvbi10aGVtZSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi12dGUgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZXBpcGhhbnkgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4td2Via2l0Z3RrID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXAxMS1raXQgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ25vbWUtZGVza3RvcDMgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIG5vdCBHTk9NRSByZWxhdGVkIGJ1dCB1c2VzIHNhbWUgZXZlbi1taW5vci1yZWxlYXNlLWlzLXN0YWJsZSBsb2dpYworUkVHRVhfcG4tZGJ1cyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1kYnVzLXRlc3QgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIHNhbWUgbG9naWMgYXBwbGllcyB0byBnc3RyZWFtZXIgcmVsZWFzZXMKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtbGliYXYgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICIke0dOT01FX1NUQUJMRX0iCisKKyMgYW5kIHBlcmwKK1JFR0VYX3BuLXBlcmwgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIEtlZXAgb2xkIGdjYyB2ZXJzaW9ucyBhdCB0aGVpciBtYWpvciB2ZXJzaW9ucworUkVHRVhfcG4tZ2NjLXNvdXJjZS00LjkuMyA9ICJnY2MtKD9QPHB2ZXI+NFwuOVwuXGQrKS50YXIiCitSRUdFWF9wbi1nY2Mtc291cmNlLTQuOC40ID0gImdjYy0oP1A8cHZlcj40XC44XC5cZCspLnRhciIKKworIyB0aGVzZSBwYWNrYWdlcyBhcmUgdGFrZW4gZnJvbSBzbmFwc2hvdHMuZGViaWFuLm9yZzsgdGhhdCBzb3VyY2UgaXMgc3RhdGljIGFuZCBnb2VzIHN0YWxlCisjIHNvIHdlIGNoZWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZnJvbSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgZ2V0IHVwZGF0ZWQKK1JFR0VYX1VSSV9wbi1hcHQgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXB0LyIKK1JFR0VYX1VSSV9wbi1yZXNvbHZjb25mID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9yL3Jlc29sdmNvbmYvIgorUkVHRVhfVVJJX3BuLW5ldC10b29scyA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbi9uZXQtdG9vbHMvIgorCisjIHNhbWUgZm9yIHBhY2thZ2VzIGZyb20gbGF1bmNocGFkCitSRUdFWF9VUklfcG4tYmFzZS1wYXNzd2QgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2IvYmFzZS1wYXNzd2QvIgorCisjIGZvciB0aGVzZSBwYWNrYWdlcyB3ZSdyZSBtb3N0bHkgaW50ZXJlc3RlZCBpbiB0cmFja2luZyBkZWJpYW4gcGF0Y2hlcywKKyMgYW5kIG5vdCBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB3aGVyZSBhbGwgZGV2ZWxvcG1lbnQgaGFzIGVmZmVjdGl2ZWx5IHN0b3BwZWQKK0RFQklBTl9QQVRDSF9SRUdFWCA9ICIoP1A8cHZlcj4oKFxkK1wuKikrKS0oKFxkK1wuKikrKSlcLihkaWZmfGRlYmlhblwudGFyKVwuKGd6fHh6KSIKK1JFR0VYX3BuLW5ldC10b29scyA9ICIke0RFQklBTl9QQVRDSF9SRUdFWH0iCitSRUdFWF9wbi1hcG1kID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKK1JFR0VYX3BuLWJsa3Rvb2wgPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgorUkVHRVhfcG4tbWFpbHggPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYzBiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKQEAgLTAsMCArMSwxMDMgQEAKKyMgU2V0dXAgZXh0cmEgQ0ZMQUdTIGFuZCBMREZMQUdTIHdoaWNoIGhhdmUgJ3NlY3VyaXR5JyBiZW5lZml0cy4gVGhlc2UgCisjIGRvbid0IHdvcmsgdW5pdmVyc2FsbHksIHRoZXJlIGFyZSByZWNpcGVzIHdoaWNoIGNhbid0IHVzZSBvbmUsIHRoZSBvdGhlcgorIyBvciBib3RoIHNvIGEgYmxhY2tsaXN0IGlzIG1haW50YWluZWQgaGVyZS4gVGhlIGlkZWEgd291bGQgYmUgb3ZlcgorIyB0aW1lIHRvIHJlZHVjZSB0aGlzIGxpc3QgdG8gbm90aGluZy4KKyMgRnJvbSBhIFlvY3RvIFByb2plY3QgcGVyc3BlY3RpdmUsIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBhbmQgdGVzdGVkCisjIGluIHRoZSBESVNUUk89InBva3ktbHNiIiBjb25maWd1cmF0aW9uLgorCisjIF9GT1JUSUZZX1NPVVJDRSByZXF1aXJlcyAtTzEgb3IgaGlnaGVyLCBzbyBkaXNhYmxlIGluIGRlYnVnIGJ1aWxkcyBhcyB0aGV5IHVzZQorIyAtTzAgd2hpY2ggdGhlbiByZXN1bHRzIGluIGEgY29tcGlsZXIgd2FybmluZy4KK2xjbF9tYXliZV9mb3J0aWZ5ID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ0RFQlVHX0JVSUxEJywnMScsJycsJy1EX0ZPUlRJRllfU09VUkNFPTInLGQpfSIKKworU0VDVVJJVFlfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgLXBpZSAtZnBpZSAke2xjbF9tYXliZV9mb3J0aWZ5fSIKK1NFQ1VSSVRZX05PX1BJRV9DRkxBR1MgPz0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCAke2xjbF9tYXliZV9mb3J0aWZ5fSIKKworU0VDVVJJVFlfTERGTEFHUyA/PSAiLVdsLC16LHJlbHJvLC16LG5vdyIKK1NFQ1VSSVRZX1hfTERGTEFHUyA/PSAiLVdsLC16LHJlbHJvIgorCisjIHBvd2VycGMgZG9lcyBub3QgZ2V0IG9uIHdpdGggcGllIGZvciByZWFzb25zIG5vdCBsb29rZWQgaW50byBhcyB5ZXQKK1NFQ1VSSVRZX0NGTEFHU19wb3dlcnBjID0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCAke2xjbF9tYXliZV9mb3J0aWZ5fSIKKyMgRGVhbCB3aXRoIHBwYyBzcGVjaWZpYyBsaW5rZXIgZmFpbHVyZXMgd2hlbiB1c2luZyB0aGUgY2ZsYWdzCitTRUNVUklUWV9DRkxBR1NfcG4tZGJ1c19wb3dlcnBjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1kYnVzLXB0ZXN0X3Bvd2VycGMgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYm1hdGNoYm94X3Bvd2VycGMgPSAiIgorCisjIGFybSBzcGVjaWZpYyBzZWN1cml0eSBmbGFnIGlzc3VlcworU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0dG5nLXRvb2xzX2FybSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWFzcGVsbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWJlZWNyeXB0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tYmxrdHJhY2UgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1jb3JldXRpbHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKyMgQ3VybCBzZWVtcyB0byBjaGVjayBmb3IgRk9SVElGWV9TT1VSQ0UgaW4gQ0ZMQUdTLCBidXQgZXZlbiBhc3NpZ25lZAorIyB0byBDUFBGTEFHUyBpdCBnZXRzIHBpY2tlZCBpbnRvIENGTEFHUyBpbiBiaXRiYWtlLgorI1RBUkdFVF9DUFBGTEFHU19wbi1jdXJsICs9ICItRF9GT1JUSUZZX1NPVVJDRT0yIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWN1cHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1jdXJsID0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCAtcGllIC1mcGllIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWRiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZGlyZWN0ZmIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nbGliYyA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ2xpYmMtaW5pdGlhbCA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZWxmdXRpbHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1lbmNoYW50ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZXhwZWN0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZmxhYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWZsZXggPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nY2MgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nY2MtcnVudGltZSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYy1zYW5pdGl6ZXJzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2RiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ21wID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ251dGxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1YiA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLW5hdGl2ZSA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkteDg2LW5hdGl2ZSA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmktaTU4Ni1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLXg4Ni02NC1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdC1wbHVnaW5zLWJhZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdC1wbHVnaW5zLWdsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWhhcmZidXp6ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4ta2V4ZWMtdG9vbHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1pcHRhYmxlcyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmFpbyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmNhcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmdjYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmlkM3RhZyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYm5ld3QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJnbHUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJwY2FwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlicGNyZSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnByb3h5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbHR0bmctdXN0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbWVzYSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW1lc2EtZ2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1vcGVuc3NsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tb3BlbnNwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHBwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLWltYWdpbmcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tcHljdXJsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLXNtYXJ0cG0gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tbnVtcHkgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24zID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tdGNsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tdGlmZiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXZhbGdyaW5kID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4temxpYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorCisjIFRoZXNlIDIgaGF2ZSB0ZXh0IHJlbGNvIGVycm9ycyB3aXRoIHRoZSBwaWUgb3B0aW9ucyBlbmFibGVkCitTRUNVUklUWV9DRkxBR1NfcG4tbHRwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHVsc2VhdWRpbyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorCitUQVJHRVRfQ0ZMQUdTX2FwcGVuZCA9ICIgJHtTRUNVUklUWV9DRkxBR1N9IgorVEFSR0VUX0xERkxBR1NfYXBwZW5kID0gIiAke1NFQ1VSSVRZX0xERkxBR1N9IgorCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tZmJkZXYgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLWludGVsID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLW9tYXAgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLXZlc2EgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhzZXJ2ZXIteG9yZyA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjZTZkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtYmFyZW1ldGFsLmluYwpAQCAtMCwwICsxLDMyIEBACisjCisjIGJhcmVtZXRhbCBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiIgorCisjIEFkZCBiYXJlbWV0YWwgbGliYyBvdmVycmlkZXMgdG8gdGhlIG92ZXJyaWRlcy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy1iYXJlbWV0YWwiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworQVNTVU1FX1BST1ZJREVEICs9ICJ2aXJ0dWFsL2xpYmMgdmlydHVhbC9saWJpY29udiIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAiZ2V0dGV4dCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworVVNFX05MUyA/PSAibm8iCitJTUFHRV9MSU5HVUFTID0gIiIKK0xJQkNfREVQRU5ERU5DSUVTID0gIiIKKworRVhUUkFfT0VDT05GX3BuLWdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfV9hcHBlbmQgPSAiIC0td2l0aG91dC1oZWFkZXJzIgorREVQRU5EU19yZW1vdmVfcG4tbWV0YS10b29sY2hhaW4gPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyIKKworVEFSR0VUX09TID0gImVsZiIKK1RBUkdFVF9PU19hcm0gPSAiZWFiaSIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZID89ICIiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gImxpYmdjYy1kZXYiCitUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFX3JlbW92ZSA9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYyB6bGliIG5jdXJzZXMiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWdsaWJjLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtZ2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTkxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWdsaWJjLmluYwpAQCAtMCwwICsxLDQwIEBACisjCisjIGdsaWJjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyMKKworTElCQ0VYVEVOU0lPTiA9ICIke0BbJycsICctZ251J11bKGQuZ2V0VmFyKCdBQklFWFRFTlNJT04nLCBUcnVlKSBvciAnJykgIT0gJyddfSIKKworIyBBZGQgZ2xpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMgZm9yIGdsaWJjLgorTElCQ09WRVJSSURFID0gIjpsaWJjLWdsaWJjIgorT1ZFUlJJREVTIC49ICIke0xJQkNPVkVSUklERX0iCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJnbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmludGwgPz0gImdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAiZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliYyA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYy1sb2NhbGUgPz0gImdsaWJjLWxvY2FsZSIKKworQ1hYRkxBR1MgKz0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKKworTElCQ19ERVBFTkRFTkNJRVMgPSAibGlic2VnZmF1bHQgXAorCQkgICAgIGdsaWJjIFwKKwkJICAgICBnbGliYy1kYmcgXAorCQkgICAgIGdsaWJjLWRldiBcCisJCSAgICAgZ2xpYmMtdXRpbHMgXAorCQkgICAgIGdsaWJjLXRocmVhZC1kYiBcCisJCSAgICAgJHtAZ2V0X2xpYmNfbG9jYWxlc19kZXBlbmRlbmNpZXMoZCl9IgorCitMSUJDX0xPQ0FMRV9ERVBFTkRFTkNJRVMgPSAiXAorCWdsaWJjLWxvY2FsZWRhdGEtaTE4biBcCisJZ2xpYmMtZ2NvbnYtaWJtODUwIFwKKwlnbGliYy1nY29udi1jcDEyNTIgXAorCWdsaWJjLWdjb252LWlzbzg4NTktMSBcCisJZ2xpYmMtZ2NvbnYtaXNvODg1OS0xNSIKKworZGVmIGdldF9saWJjX2xvY2FsZXNfZGVwZW5kZW5jaWVzKGQpOgorICAgIGlmICdsaWJjLWxvY2FsZXMnIGluIChkLmdldFZhcignRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkgOgorICAgICAgICByZXR1cm4gZC5nZXRWYXIoJ0xJQkNfTE9DQUxFX0RFUEVOREVOQ0lFUycsIFRydWUpIG9yICcnCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICcnCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLW11c2wuaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRkNThlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYwpAQCAtMCwwICsxLDI3IEBACisjCisjIG11c2wgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIi1tdXNsIgorCisjIEFkZCB1Y2xpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMuCitMSUJDT1ZFUlJJREUgPSAiOmxpYmMtbXVzbCIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnYgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgorCisjVVNFX05MUyA/PSAibm8iCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0lNQUdFX0xJTkdVQVMgPSAiIgorCitMSUJDX0RFUEVOREVOQ0lFUyA9ICJcCisgICAgbXVzbCBcCisgICAgbXVzbC1kYmcgXAorICAgIG11c2wtZGV2IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjM2NkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtdWNsaWJjLmluYwpAQCAtMCwwICsxLDI4IEBACisjCisjIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiLXVjbGliYyIKKworIyBBZGQgdWNsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzLgorTElCQ09WRVJSSURFID0gIjpsaWJjLXVjbGliYyIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjID89ICJ1Y2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAibGliaWNvbnYiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJnZXR0ZXh0IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgorCitVU0VfTkxTID89ICJubyIKKworQ1hYRkxBR1MgKz0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKKworSU1BR0VfTElOR1VBUyA9ICIiCisKK0xJQkNfREVQRU5ERU5DSUVTID0gIlwKKyAgICB1Y2xpYmMgXAorICAgIHVjbGliYy1kYmcgXAorICAgIHVjbGliYy1kZXYgXAorICAgIHVjbGliYy10aHJlYWQtZGIgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jCkBAIC0wLDAgKzEsNzUgQEAKKyMKKyMgRGVmYXVsdCB0b29sY2hhaW4gY29uZmlndXJhdGlvbgorIworCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgPSAiYmludXRpbHMtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjID0gImdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysgPSAiZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyA9ICJnY2MtcnVudGltZSIKK1BSRUZFUlJFRF9QUk9WSURFUl9nZGIgPSAiZ2RiIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgPz0gImJpbnV0aWxzLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWdjYy1pbml0aWFsID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWdjYyA9ICJnY2MtY3Jvc3NzZGstJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9ZysrID0gImdjYy1jcm9zc3Nkay0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1jb21waWxlcmxpYnMgPSAibmF0aXZlc2RrLWdjYy1ydW50aW1lIgorCisjIERlZmF1bHQgbGliYyBjb25maWcKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MgPSAiJHtUQ0xJQkN9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLSR7U0RLX1BSRUZJWH1saWJjLWZvci1nY2MgPz0gIm5hdGl2ZXNkay0ke1RDTElCQ30iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsID0gIiR7VENMSUJDfS1pbml0aWFsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLSR7U0RLX1BSRUZJWH1saWJjLWluaXRpYWwgPSAibmF0aXZlc2RrLSR7VENMSUJDfS1pbml0aWFsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZ2V0dGV4dCA/Pz0gImdldHRleHQiCisKK0dDQ1ZFUlNJT04gPz0gIjUuJSIKK1NES0dDQ1ZFUlNJT04gPz0gIiR7R0NDVkVSU0lPTn0iCitCSU5VVkVSU0lPTiA/PSAiMi4yNSUiCitHREJWRVJTSU9OID89ICI3LjklIgorR0xJQkNWRVJTSU9OID89ICIyLjIyIgorVUNMSUJDVkVSU0lPTiA/PSAiMC45LjMzK2dpdCUiCitMSU5VWExJQkNWRVJTSU9OID89ICI0LjEiCisKK1BSRUZFUlJFRF9WRVJTSU9OX2djYyA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9ID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9ID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfQVJDSH0gPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1ydW50aW1lID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLXNhbml0aXplcnMgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2NjLXJ1bnRpbWUgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2NjLXNhbml0aXplcnMgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9saWJnY2MgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9saWJnY2MtaW5pdGlhbCA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nY2MgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstbGliZ2NjID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWxpYmdjYy1pbml0aWFsID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMgPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtbmF0aXZlID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLWNyb3NzLSR7VEFSR0VUX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2RiID89ICIke0dEQlZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9ID89ICIke0dEQlZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2RiLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7R0RCVkVSU0lPTn0iCisKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LWxpYmMtaGVhZGVycyA/PSAiJHtMSU5VWExJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnMgPz0gIiR7TElOVVhMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYyAgICAgICAgICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLWxvY2FsZSAgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtbXRyYWNlICAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYy1zY3JpcHRzICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nbGliYyAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtaW5pdGlhbCAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2xpYmMtaW5pdGlhbCAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fdWNsaWJjICAgICAgICAgICAgICAgICAgID89ICIke1VDTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fdWNsaWJjLWluaXRpYWwgICAgICAgICAgID89ICIke1VDTElCQ1ZFUlNJT059IgorIyBkb24ndCB1c2UgdmVyc2lvbiBlYXJsaWVyIHRoYW4gMS40IGZvciBnemlwLW5hdGl2ZSwgYXMgaXQncyBuZWNlc3NhcnkgZm9yCisjIHNvbWUgcGFja2FnZXMgdXNpbmcgYW4gYXJjaGl2ZSBmb3JtYXQgaW5jb21wYXRpYmxlIHdpdGggZWFybGllciBnemlwCitQUkVGRVJSRURfVkVSU0lPTl9nemlwLW5hdGl2ZSA/PSAiMS42IgorCisjIFNldHVwIHN1aXRhYmxlIHRvb2xjaGFpbiBmbGFncworcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhNWU2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKQEAgLTAsMCArMSwyNCBAQAorIyBOT1RFOiBUSElTIEZJTEUgSVMgREVQUkVDQVRFRC4gUGxlYXNlIGFkZCBuZXcgZW50cmllcyB0byB0aGUgcmVjaXBlcyB0aGVtc2VsdmVzLgorIworIyB1cHN0cmVhbV90cmFja2luZy5pbmMgLSBUaGlzIGZpbGUgY29udGFpbnMgZGF0YSB0aGF0IHRyYWNrcyB0aGUKKyMgdXBzdHJlYW0gcHJvamVjdCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiByZWNpcGUuIFRoaXMgbGlzdCBpcyBuZWVkZWQKKyMgZm9yIHJlY2lwZXMgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhbiBub3QgYmUgYXV0b21hZ2ljYWxseSBkaXNjb3ZlcmVkLgorIyBBcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nLCB0aGlzIGZpbGUgd2lsbCBzbG93ZWQgYmUgcmVkdWNlZC4KKyMKKyMgVGhpcyBkYXRhIGlzIHVzZWQgYnkgdGhlIHBhY2thZ2UgcmVwb3J0aW5nIHN5c3RlbSAocGFja2FnZXMueW9jdG9wcm9qZWN0Lm9yZykKKyMKKyMgVGhlIGZvcm1hdCBpcyBhcyBhIGJpdGJha2UgdmFyaWFibGUgb3ZlcnJpZGUgZm9yIGVhY2ggcmVjaXBlCisjCisjICAgICAgIFJFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OX3BuLTxyZWNpcGUgbmFtZT4gPSAiPHZlcnNpb24+IgorIyAgICAgICBSRUNJUEVfVVBTVFJFQU1fREFURV9wbi08cmVjaXBlIG5hbWU+ID0gIk1tbSBkZCwgWVlZWSIKKyMJIC0gVGhpcyBpcyB0aGUgbGF0ZXN0IHVwc3RyZWFtIHZlcnNpb24gYW5kIGRhdGUKKyMgICAgICAgUkVDSVBFX05PX1VQREFURV9SRUFTT05fcG4tPHJlY2lwZSBuYW1lPiA9ICI8ZnJlZSBmb3JtIHRleHQ+IgorIyAgICAgICAgLSBVc2VkIHRvIG5vdGUgd2h5IGEgcmVjaXBlIHNob3VsZCBub3QgYmUgdXBncmFkZWQgdG8gYSBuZXdlciB2ZXJzb2luCisjICAgICAgIENIRUNLX0RBVEVfcG4tPHJlY2lwZSBuYW1lPiA9ICJNbW0gZGQsIFlZWVkiCisjICAgICAgICAtIFRoaXMgaXMgdGhlIGRhdGUgdGhhdCB1cHN0cmVhbSB3YXMgbGFzdCBtYW51YWxseSBjaGVja2VkIG92ZXIgdGltZQorIyAgICAgICAgICB0aGlzIHNob3VsZCBiZSByZW1vdmVkIGFzIHdlIGF1dG9tYXRlIHRoaXMgY2hlY2tpbmcKKyMKKyMgVGhlc2UgZW50cmllcyB3aWxsIHNsb3dseSBiZSByZW1vdmVkIGFzIHdlIGNhbiBhdXRvbWF0aWNhbGx5IGRldGVybWluZQorIyB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlLiAgU28gZm9yIGV4aXN0aW5nIHJlY2lwZXMgdGhhdCB3ZSBjYW4gZ2V0IAorIyBmcm9tIHRoZSBSZWNpcGUgcmVwb3J0aW5nIHN5c3RlbSwgdGhlIGVudHJpZXMgaGVyZSBjYW4gYmUgcmVtb3ZlZC4KKyMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwYzJkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jCkBAIC0wLDAgKzEsNSBAQAorIworIyBFeGNsdWRlIGtub3duIGJyb2tlbiBwYWNrYWdlcworIworCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYgYi9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NWFiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mCkBAIC0wLDAgKzEsNDU5IEBACisjIHRoaXMgZmlsZSBob2xkcyBkb2N1bWVudGF0aW9uIGZvciBrbm93biBrZXlzLCBwb3NzaWJsZSB2YWx1ZXMgYW5kCisjIHRoZWlyIG1lYW5pbmdzLiBQbGVhc2UgdXBkYXRlLCBjb3JyZWN0IGFuZCBleHRlbmQgdGhpcyBkb2N1bWVudGF0aW9uLgorIyBNYWlsIHlvdXIgY2hhbmdlcyB0byBvcGVuZW1iZWRkZWQtZGV2ZWxAb3BlbmVtYmVkZGVkLm9yZworCisjIERFU0NSSVBUSU9OUyBGT1IgVEFTS1MgIworCitkb19ib290aW1nW2RvY10gPSAiQ3JlYXRlcyBhIGJvb3RhYmxlIGxpdmUgaW1hZ2UiCitkb19idWlsZFtkb2NdID0gIkRlZmF1bHQgdGFzayBmb3IgYSByZWNpcGUgLSBkZXBlbmRzIG9uIGFsbCBvdGhlciBub3JtYWwgdGFza3MgcmVxdWlyZWQgdG8gJ2J1aWxkJyBhIHJlY2lwZSIKK2RvX2J1bmRsZV9pbml0cmFtZnNbZG9jXSA9ICJDb21iaW5lcyBhbiBpbml0aWFsIHJhbWRpc2sgaW1hZ2UgYW5kIGtlcm5lbCB0b2dldGhlciB0byBmb3JtIGEgc2luZ2xlIGltYWdlIgorZG9fY2hlY2t1cmlbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIFNSQ19VUkkgdmFsdWUiCitkb19jaGVja3VyaWFsbFtkb2NdID0gIlZhbGlkYXRlcyB0aGUgU1JDX1VSSSB2YWx1ZSBmb3IgYWxsIHJlY2lwZXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0YXJnZXQiCitkb19jbGVhbltkb2NdID0gIlJlbW92ZXMgYWxsIG91dHB1dCBmaWxlcyBmb3IgYSB0YXJnZXQiCitkb19jbGVhbmFsbFtkb2NdID0gIlJlbW92ZXMgYWxsIG91dHB1dCBmaWxlcywgc2hhcmVkIHN0YXRlIGNhY2hlLCBhbmQgZG93bmxvYWRlZCBzb3VyY2UgZmlsZXMgZm9yIGEgdGFyZ2V0IgorZG9fY2xlYW5zc3RhdGVbZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMgYW5kIHNoYXJlZCBzdGF0ZSBjYWNoZSBmb3IgYSB0YXJnZXQiCitkb19jb21waWxlW2RvY10gPSAiQ29tcGlsZXMgdGhlIHNvdXJjZSBpbiB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IgorZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzW2RvY10gPSAiQ29tcGlsZXMgbG9hZGFibGUgbW9kdWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbCIKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZVtkb2NdID0gIkNvbXBpbGVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IgorZG9fY29uZmlndXJlW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgc291cmNlIGJ5IGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYW55IGJ1aWxkLXRpbWUgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IgorZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2VbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IgorZG9fZGVwbG95W2RvY10gPSAiV3JpdGVzIGRlcGxveWFibGUgb3V0cHV0IGZpbGVzIHRvIHRoZSBkZXBsb3kgZGlyZWN0b3J5IgorZG9fZGV2cHlzaGVsbFtkb2NdID0gIlN0YXJ0cyBhbiBpbnRlcmFjdGl2ZSBQeXRob24gc2hlbGwgZm9yIGRldmVsb3BtZW50L2RlYnVnZ2luZyIKK2RvX2RldnNoZWxsW2RvY10gPSAiU3RhcnRzIGEgc2hlbGwgd2l0aCB0aGUgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBkZXZlbG9wbWVudC9kZWJ1Z2dpbmciCitkb19kaWZmY29uZmlnW2RvY10gPSAiQ29tcGFyZXMgdGhlIG9sZCBhbmQgbmV3IGNvbmZpZyBmaWxlcyBhZnRlciBydW5uaW5nIGRvX21lbnVjb25maWcgZm9yIHRoZSBrZXJuZWwiCitkb19mZXRjaFtkb2NdID0gIkZldGNoZXMgdGhlIHNvdXJjZSBjb2RlIgorZG9fZmV0Y2hhbGxbZG9jXSA9ICJGZXRjaGVzIGFsbCByZW1vdGUgc291cmNlcyByZXF1aXJlZCB0byBidWlsZCBhIHRhcmdldCIKK2RvX2dlbmVyYXRlX3F0X2NvbmZpZ19maWxlW2RvY10gPSAiV3JpdGVzIGEgcXQuY29uZiBmaWxlIGZvciBidWlsZGluZyBhIFF0LWJhc2VkIGFwcGxpY2F0aW9uIgorZG9faW5zdGFsbFtkb2NdID0gIkNvcGllcyBmaWxlcyBmcm9tIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnkgdG8gYSBob2xkaW5nIGFyZWEiCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2VbZG9jXSA9ICJDb3BpZXMgdGhlIHJ1bnRpbWUgdGVzdCBzdWl0ZSBmaWxlcyBmcm9tIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnkgdG8gYSBob2xkaW5nIGFyZWEiCitkb19rZXJuZWxfY2hlY2tvdXRbZG9jXSA9ICJDaGVja3Mgb3V0IHNvdXJjZS9tZXRhIGJyYW5jaGVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX2tlcm5lbF9jb25maWdjaGVja1tkb2NdID0gIlZhbGlkYXRlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fa2VybmVsX2NvbmZpZ21lW2RvY10gPSAiQXNzZW1ibGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCitkb19rZXJuZWxfbGlua192bWxpbnV4W2RvY10gPSAiQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgaW4gYXJjaC8kYXJjaC9ib290IGZvciB2bWxpbnV4IGtlcm5lbCBpbWFnZXMiCitkb19saXN0dGFza3NbZG9jXSA9ICJMaXN0cyBhbGwgZGVmaW5lZCB0YXNrcyBmb3IgYSB0YXJnZXQiCitkb19tZW51Y29uZmlnW2RvY10gPSAiUnVucyAnbWFrZSBtZW51Y29uZmlnJyBmb3IgdGhlIGtlcm5lbCIKK2RvX3BhY2thZ2VbZG9jXSA9ICJBbmFseXplcyB0aGUgY29udGVudCBvZiB0aGUgaG9sZGluZyBhcmVhIGFuZCBzcGxpdHMgaXQgaW50byBzdWJzZXRzIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgZmlsZXMiCitkb19wYWNrYWdlX2luZGV4W2RvY10gPSAiQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBpbmRleCBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3FhW2RvY10gPSAiUnVucyBRQSBjaGVja3Mgb24gcGFja2FnZWQgZmlsZXMiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkb2NdID0gIkNyZWF0ZXMgdGhlIGFjdHVhbCBERUIgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RvY10gPSAiQ3JlYXRlcyB0aGUgYWN0dWFsIElQSyBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZG9jXSA9ICJDcmVhdGVzIHRoZSBhY3R1YWwgUlBNIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3dyaXRlX3Rhcltkb2NdID0gIkNyZWF0ZXMgdGFyIGFyY2hpdmVzIGZvciBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZWRhdGFbZG9jXSA9ICJDcmVhdGVzIHBhY2thZ2UgbWV0YWRhdGEgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCBwYWNrYWdlcyIKK2RvX3BhdGNoW2RvY10gPSAiTG9jYXRlcyBwYXRjaCBmaWxlcyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBzb3VyY2UgY29kZSIKK2RvX3BvcHVsYXRlX2xpY1tkb2NdID0gIldyaXRlcyBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciB0aGUgcmVjaXBlIHRoYXQgaXMgY29sbGVjdGVkIGxhdGVyIHdoZW4gdGhlIGltYWdlIGlzIGNvbnN0cnVjdGVkIgorZG9fcG9wdWxhdGVfc2RrW2RvY10gPSAiQ3JlYXRlcyB0aGUgZmlsZSBhbmQgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgYW4gaW5zdGFsbGFibGUgU0RLIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtkb2NdID0gIkNvcGllcyBhIHN1YnNldCBvZiBmaWxlcyBpbnN0YWxsZWQgYnkgZG9faW5zdGFsbCBpbnRvIHRoZSBzeXNyb290IGluIG9yZGVyIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gb3RoZXIgcmVjaXBlcyIKK2RvX3JtX3dvcmtbZG9jXSA9ICJSZW1vdmVzIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgZmluaXNoZWQgd2l0aCB0aGVtIgorZG9fcm1fd29ya19hbGxbZG9jXSA9ICJUb3AtbGV2ZWwgdGFzayBmb3IgcmVtb3Zpbmcgd29yayBmaWxlcyBhZnRlciB0aGUgYnVpbGQgc3lzdGVtIGhhcyBmaW5pc2hlZCB3aXRoIHRoZW0iCitkb19yb290ZnNbZG9jXSA9ICJDcmVhdGVzIHRoZSByb290IGZpbGVzeXN0ZW0gKGZpbGUgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUpIGZvciBhbiBpbWFnZSIKK2RvX3NhdmVkZWZjb25maWdbZG9jXSA9ICJDcmVhdGVzIGEgbWluaW1hbCBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIgorZG9fc2l6ZWNoZWNrW2RvY10gPSAiQ2hlY2tzIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgYWdhaW5zdCBLRVJORUxfSU1BR0VfTUFYU0laRSAoaWYgc2V0KSIKK2RvX3NwZHhbZG9jXSA9ICJBIGJ1aWxkIHN0YWdlIHRoYXQgdGFrZXMgdGhlIHNvdXJjZSBjb2RlIGFuZCBzY2FucyBpdCBvbiBhIHJlbW90ZSBGT1NTT0xPR1kgc2VydmVyIGluIG9yZGVyIHRvIHByb2R1Y2UgYW4gU1BEWCBkb2N1bWVudCIKK2RvX3N0cmlwW2RvY10gPSAiU3RyaXBzIHVubmVlZGVkIHNlY3Rpb25zIG91dCBvZiB0aGUgTGludXgga2VybmVsIGltYWdlIgorZG9fdGVzdGltYWdlW2RvY10gPSAiQm9vdHMgYW4gaW1hZ2UgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgd2l0aGluIHRoZSBpbWFnZSIKK2RvX3Rlc3RpbWFnZV9hdXRvW2RvY10gPSAiQm9vdHMgYW4gaW1hZ2UgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgd2l0aGluIHRoZSBpbWFnZSBpbW1lZGlhdGVseSBhZnRlciBpdCBoYXMgYmVlbiBidWlsdCIKK2RvX3Rlc3RzZGtbZG9jXSA9ICJJbnN0YWxscyBhbiBTREsgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgb24gdGhlIHRvb2xzIGluc3RhbGxlZCBieSBpdCIKK2RvX3Vib290X21raW1hZ2VbZG9jXSA9ICJDcmVhdGVzIGEgdUltYWdlIGZpbGUgZnJvbSB0aGUga2VybmVsIGZvciB0aGUgVS1Cb290IGJvb3Rsb2FkZXIiCitkb191bnBhY2tbZG9jXSA9ICJVbnBhY2tzIHRoZSBzb3VyY2UgY29kZSBpbnRvIGEgd29ya2luZyBkaXJlY3RvcnkiCitkb192YWxpZGF0ZV9icmFuY2hlc1tkb2NdID0gIkVuc3VyZXMgdGhhdCB0aGUgc291cmNlL21ldGEgYnJhbmNoZXMgYXJlIG9uIHRoZSBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZWlyIFNSQ1JFViB2YWx1ZXMgZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fdm1pbWdbZG9jXSA9ICJDcmVhdGVzIGFuIGltYWdlIGZvciB1c2Ugd2l0aCBWTXdhcmUgb3IgVmlydHVhbEJveCBjb21wYXRpYmxlIHZpcnR1YWwgbWFjaGluZSBob3N0cyAoYmFzZWQgb24gSU1BR0VfRlNUWVBFUyBlaXRoZXIgLnZtZGsgb3IgLnZkaSkiCisKKyMgREVTQ1JJUFRJT05TIEZPUiBWQVJJQUJMRVMgIworCisjQQorCitBTExPV19FTVBUWVtkb2NdID0gIlNwZWNpZmllcyBpZiBhbiBvdXRwdXQgcGFja2FnZSBzaG91bGQgc3RpbGwgYmUgcHJvZHVjZWQgaWYgaXQgaXMgZW1wdHkuIgorQUxURVJOQVRJVkVbZG9jXSA9ICJMaXN0cyBjb21tYW5kcyBpbiBhIHBhY2thZ2UgdGhhdCBuZWVkIGFuIGFsdGVybmF0aXZlIGJpbmFyeSBuYW1pbmcgc2NoZW1lLiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gbWFwIGR1cGxpY2F0ZWQgY29tbWFuZHMgdG8gYWN0dWFsIGxvY2F0aW9ucy4iCitBTFRFUk5BVElWRV9QUklPUklUWVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGRlZmF1bHQgcHJpb3JpdGllcyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCitBTFRFUk5BVElWRV9UQVJHRVRbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IGxpbmsgbG9jYXRpb25zIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLiIKK0FTU1VNRV9QUk9WSURFRFtkb2NdID0gIkxpc3Qgb2YgcGFja2FnZXMgKHJlY2lwZXMgYWN0dWFsbHkpIHRoYXQgYXJlIGFzc3VtZWQgdG8gYmUgaW1wbGljaXRseSBhdmFpbGFibGUuIEJpdEJha2UgZG9lcyBub3QgYnVpbGQgdGhlc2UgcGFja2FnZXMuIgorQVNTVU1FX1NITElCU1tkb2NdID0gIkxpc3Qgb2Ygc2hsaWI6cGFja2FnZVtfdmVyc2lvbl0gbWFwcGluZ3MuIFVzZWZ1bCBmb3IgbGliIHBhY2thZ2VzIGluIEFTU1VNRV9QUk9WSURFRCwgZm9yIHdoaWNoIGF1dG9tYXRpYyBzaGxpYiBkZXBlbmRlbmN5IHRyYWNraW5nIGRvZXMgbm90IHdvcmsuIgorQVVUSE9SW2RvY10gPSAiRW1haWwgYWRkcmVzcyB1c2VkIHRvIGNvbnRhY3QgdGhlIG9yaWdpbmFsIGF1dGhvcihzKSBpbiBvcmRlciB0byBzZW5kIHBhdGNoZXMgYW5kIGZvcndhcmQgYnVncy4iCitBVVRPX1NZU0xJTlVYTUVOVVtkb2NdID0gIkVuYWJsZXMgY3JlYXRpbmcgYW4gYXV0b21hdGljIG1lbnUgZm9yIHRoZSBzeXNsaW51eCBib290bG9hZGVyLiIKK0FVVE9SRVZbZG9jXSA9ICJXaGVuIFNSQ1JFViBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUsIGl0IHNwZWNpZmllcyB0byB1c2UgdGhlIGxhdGVzdCBzb3VyY2UgcmV2aXNpb24gaW4gdGhlIHJlcG9zaXRvcnkuIgorCisjQgorCitCW2RvY10gPSAiVGhlIEJ1aWxkIERpcmVjdG9yeS4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIGdlbmVyYXRlZCBvYmplY3RzIGludG8gdGhlIEJ1aWxkIERpcmVjdG9yeSBkdXJpbmcgYSByZWNpcGUncyBidWlsZCBwcm9jZXNzLiIKK0JBRF9SRUNPTU1FTkRBVElPTlNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgbm90IHRvIGluc3RhbGwgZGVzcGl0ZSBiZWluZyByZWNvbW1lbmRlZCBieSBhIHJlY2lwZS4gU3VwcG9ydCBmb3IgdGhpcyB2YXJpYWJsZSBleGlzdHMgb25seSB3aGVuIHVzaW5nIHRoZSBJUEsgb3IgUlBNIHBhY2thZ2luZyBiYWNrZW5kcy4iCitCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFlbZG9jXSA9ICJEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQgZmlsZSAoLmJiYXBwZW5kKSBoYXMgbm8gY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoLmJiKS4iCitCQl9ESVNLTU9OX0RJUlNbZG9jXSA9ICJNb25pdG9ycyBkaXNrIHNwYWNlIGFuZCBhdmFpbGFibGUgaW5vZGVzIGR1cmluZyB0aGUgYnVpbGQgYW5kIGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgYnVpbGQgYmFzZWQgb24gdGhlc2UgcGFyYW1ldGVycy4iCitCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTFtkb2NdID0gIkRlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuIFRvIHNldCB0aGVzZSBpbnRlcnZhbHMsIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTW2RvY10gPSAiQ2F1c2VzIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzIHRvIGJlIHBsYWNlZCBpbiB0aGUgRExfRElSIGRpcmVjdG9yeS4iCitCQl9OVU1CRVJfVEhSRUFEU1tkb2NdID0gIlRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXNrcyBCaXRCYWtlIHNob3VsZCBydW4gaW4gcGFyYWxsZWwgYXQgYW55IG9uZSB0aW1lLiBBIGdvb2QgcnVsZSBvZiB0aHVtYiBpcyB0byBzZXQgdGhpcyB2YXJpYWJsZSB0byB0d2ljZSB0aGUgbnVtYmVyIG9mIGNvcmVzLiIKK0JCQ0xBU1NFWFRFTkRbZG9jXSA9ICJBbGxvd3MgeW91IHRvIGV4dGVuZCBhIHJlY2lwZSBzbyB0aGF0IGl0IGJ1aWxkcyB2YXJpYW50cyBvZiB0aGUgc29mdHdhcmUuIENvbW1vbiB2YXJpYW50cyBmb3IgcmVjaXBlcyBhcmUgJ25hdGl2ZScsICdjcm9zcycsICduYXRpdmVzZGsnIGFuZCBtdWx0aWxpYnMuIgorQkJGSUxFX0NPTExFQ1RJT05TW2RvY10gPSAiTGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLiBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kIHRoZSBvdGhlciBCQkZJTEVfKiB2YXJpYWJsZXMuIgorQkJGSUxFX1BBVFRFUk5bZG9jXSA9ICJWYXJpYWJsZSB0aGF0IGV4cGFuZHMgdG8gbWF0Y2ggZmlsZXMgZnJvbSBCQkZJTEVTIGluIGEgcGFydGljdWxhciBsYXllci4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBsYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiBhIGxheWVyLiIKK0JCRklMRV9QUklPUklUWVtkb2NdID0gIkFzc2lnbnMgdGhlIHByaW9yaXR5IGZvciByZWNpcGUgZmlsZXMgaW4gZWFjaCBsYXllci4gU2V0dGluZyB0aGlzIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gcHJpb3JpdGl6ZSBhIGxheWVyIGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgY29udGFpbiB0aGUgc2FtZSByZWNpcGUuIgorQkJGSUxFU1tkb2NdID0gIkxpc3Qgb2YgcmVjaXBlIGZpbGVzIHVzZWQgYnkgQml0QmFrZSB0byBidWlsZCBzb2Z0d2FyZS4iCitCQklOQ0xVREVMT0dTW2RvY10gPSAiVmFyaWFibGUgdGhhdCBjb250cm9scyBob3cgQml0QmFrZSBkaXNwbGF5cyBsb2dzIG9uIGJ1aWxkIGZhaWx1cmUuIgorQkJJTkNMVURFTE9HU19MSU5FU1tkb2NdID0gIkFtb3VudCBvZiBsb2cgbGluZXMgcHJpbnRlZCBvbiBmYWlsdXJlLiIKK0JCTEFZRVJTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSBiYmxheWVycy5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4iCitCQkxBWUVSU19OT05fUkVNT1ZBQkxFW2RvY10gPSAiTGlzdHMgY29yZSBsYXllcnMgdGhhdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBiYmxheWVycy5jb25mIGZpbGUuIgorQkJNQVNLW2RvY10gPSAiUHJldmVudHMgQml0QmFrZSBmcm9tIHByb2Nlc3Npbmcgc3BlY2lmaWMgcmVjaXBlcyBvciByZWNpcGUgYXBwZW5kIGZpbGVzLiBVc2UgdGhlIEJCTUFTSyB2YXJpYWJsZSBmcm9tIHdpdGhpbiBjb25mL2xvY2FsLmNvbmYuIgorQkJQQVRIW2RvY10gPSAiVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZSAuYmJjbGFzcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlIFBBVEggdmFyaWFibGUuIgorQkJTRVJWRVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIHNlcnZlciB0aGF0IHJ1bnMgbWVtb3J5LXJlc2lkZW50IEJpdEJha2UuIgorQklOQ09ORklHX0dMT0JbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgYmluY29uZmlnLmJiY2xhc3MgZnJvbSBhIHJlY2lwZSwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSB3aWxkY2FyZCBmb3IgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgbmVlZCBlZGl0aW5nLiIKK0JQW2RvY10gPSAiVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQgYW55IHNwZWNpYWwgcmVjaXBlIG5hbWUgc3VmZml4IChpLmUuIC1uYXRpdmUsIGxpYjY0LSwgYW5kIHNvIGZvcnRoKS4gQlAgaXMgY29tcHJpc2VkIG9mICR7QlBOfS0ke1BWfSIKK0JQTltkb2NdID0gIlRoZSBiYXJlIG5hbWUgb2YgdGhlIHJlY2lwZS4gVGhpcyB2YXJpYWJsZSBpcyBhIHZlcnNpb24gb2YgdGhlIFBOIHZhcmlhYmxlIGJ1dCByZW1vdmVzIGNvbW1vbiBzdWZmaXhlcyBhbmQgcHJlZml4ZXMuIgorQlVHVFJBQ0tFUltkb2NdID0gIlNwZWNpZmllcyBhIFVSTCBmb3IgYW4gdXBzdHJlYW0gYnVnIHRyYWNraW5nIHdlYnNpdGUgZm9yIGEgcmVjaXBlLiIKK0JVSUxEX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIGk2ODYpLiIKK0JVSUxEX09TW2RvY10gPSAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gKGluIGxvd2VyIGNhc2UpIG9mIHRoZSBidWlsZGluZyBhcmNoaXRlY3R1cmUgKGUuZy4gbGludXgpLiIKK0JVSUxERElSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0JVSUxEU1RBVFNfQkFTRVtkb2NdID0gIlBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGJ1aWxkIHN0YXRpc3RpY3Mgd2hlbiB5b3UgdXNlIGFuZCBlbmFibGUgdGhlIGJ1aWxkc3RhdHMgY2xhc3MuIgorQlVTWUJPWF9TUExJVF9TVUlEW2RvY10gPSAiRm9yIHRoZSBCdXN5Qm94IHJlY2lwZSwgc3BlY2lmaWVzIHdoZXRoZXIgdG8gc3BsaXQgdGhlIG91dHB1dCBleGVjdXRhYmxlIGZpbGUgaW50byB0d28gcGFydHM6IG9uZSBmb3IgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNldHVpZCByb290LCBhbmQgb25lIGZvciB0aGUgcmVtYWluaW5nIGZlYXR1cmVzLiIKKworI0MKKworQ0FDSEVbZG9jXSAgPSAiVGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBjYWNoZSBvZiB0aGUgbWV0YWRhdGEuIgorQ0ZMQUdTW2RvY10gPSAiRmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdGhlIHNhbWUgYXMgVEFSR0VUX0NGTEFHUy4iCitDTEFTU09WRVJSSURFW2RvY10gPSAiQW4gaW50ZXJuYWwgdmFyaWFibGUgc3BlY2lmeWluZyB0aGUgc3BlY2lhbCBjbGFzcyBvdmVycmlkZSB0aGF0IHNob3VsZCBjdXJyZW50bHkgYXBwbHkgKGUuZy4gImNsYXNzLXRhcmdldCIsICJjbGFzcy1uYXRpdmUiLCBhbmQgc28gZm9ydGgpLiIKK0NMRUFOQlJPS0VOW2RvY10gPSAiU3BlY2lmaWVzIGlmICdtYWtlIGNsZWFuJyBkb2VzIG5vdCB3b3JrIGZvciBhIHJlY2lwZSAoYW5kIHRoZXJlZm9yZSB0aGUgYnVpbGQgc3lzdGVtIHNob3VsZCBub3QgdHJ5IHRvIHVzZSBpdCBkdXJpbmcgZG9fY29uZmlndXJlKSIKK0NPTUJJTkVEX0ZFQVRVUkVTW2RvY10gPSAiQSBzZXQgb2YgZmVhdHVyZXMgY29tbW9uIGJldHdlZW4gTUFDSElORV9GRUFUVVJFUyBhbmQgRElTVFJPX0ZFQVRVUkVTLiIKK0NPTU1PTl9MSUNFTlNFX0RJUltkb2NdID0gIlBvaW50cyB0byBtZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeSwgd2hpY2ggaXMgd2hlcmUgZ2VuZXJpYyBsaWNlbnNlIGZpbGVzIHJlc2lkZS4iCitDT01QQVRJQkxFX0hPU1RbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIGhvc3RzICh3aGVuIHRoZSByZWNpcGUgaXMgbmF0aXZlKSBvciBvbmUgb3IgbW9yZSB0YXJnZXRzICh3aGVuIHRoZSByZWNpcGUgaXMgbm9uLW5hdGl2ZSkgd2l0aCB3aGljaCBhIHJlY2lwZSBpcyBjb21wYXRpYmxlLiIKK0NPTVBBVElCTEVfTUFDSElORVtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gb25lIG9yIG1vcmUgdGFyZ2V0IG1hY2hpbmVzIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCitDT01QTEVNRU5UQVJZX0dMT0JbZG9jXSA9ICJEZWZpbmVzIHdpbGRjYXJkcyB0byBtYXRjaCB3aGVuIGluc3RhbGxpbmcgYSBsaXN0IG9mIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgZm9yIGFsbCB0aGUgcGFja2FnZXMgaW5zdGFsbGVkIGluIGFuIGltYWdlLiIKK0NPTkZGSUxFU1tkb2NdID0gIklkZW50aWZpZXMgZWRpdGFibGUgb3IgY29uZmlndXJhYmxlIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBwYWNrYWdlLiIKK0NPTkZJR19TSVRFW2RvY10gPSAiQSBsaXN0IG9mIGZpbGVzIHRoYXQgY29udGFpbnMgYXV0b2NvbmYgdGVzdCByZXN1bHRzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGJ1aWxkLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlIEF1dG90b29scyB1dGlsaXRpZXMgd2hlbiBydW5uaW5nIGNvbmZpZ3VyZS4iCitDT05GTElDVF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCB3b3VsZCBiZSBpbiBjb25mbGljdCBzaG91bGQgdGhlIHJlY2lwZSBiZSBidWlsdC4iCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLiBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorQ09SRUJBU0VbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIE9wZW5FbWJlZGRlZCBDb3JlIE1ldGFkYXRhIGxheWVyIChpLmUuIG1ldGEpLiIKK0NPTkZfVkVSU0lPTltkb2NdID0gIlRyYWNrcyB0aGUgdmVyc2lvbiBvZiBsb2NhbC5jb25mLiAgSW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mLyBjaGFuZ2VzIGluY29tcGF0aWJseS4iCitDVlNESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIGN2cyBjaGVja291dHMgd2lsbCBiZSBzdG9yZWQgaW4uIgorCisjRAorCitEW2RvY10gPSAiVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4iCitEQVRFW2RvY10gPSAiVGhlIGRhdGUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHVzaW5nIFlNRCBmb3JtYXQuIgorREFURVRJTUVbZG9jXSA9ICJUaGUgZGF0ZSBhbmQgdGltZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQuIgorREVCVUdfQlVJTERbZG9jXSA9ICJTcGVjaWZpZXMgdG8gYnVpbGQgcGFja2FnZXMgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW5mbHVlbmNlcyB0aGUgdmFsdWUgb2YgdGhlIFNFTEVDVEVEX09QVElNSVpBVElPTiB2YXJpYWJsZS4iCitERUJVR19PUFRJTUlaQVRJT05bZG9jXSA9ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhIHN5c3RlbSBmb3IgZGVidWdnaW5nLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctTyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZycuIgorREVGQVVMVF9QUkVGRVJFTkNFW2RvY10gPSAiU3BlY2lmaWVzIGEgd2VhayBiaWFzIGZvciByZWNpcGUgc2VsZWN0aW9uIHByaW9yaXR5LiIKK0RFUEVORFNbZG9jXSA9ICJMaXN0cyBhIHJlY2lwZSdzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZSBmaWxlcykuIgorREVQTE9ZX0RJUltkb2NdID0gIlBvaW50cyB0byB0aGUgZ2VuZXJhbCBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorREVQTE9ZX0RJUl9JTUFHRVtkb2NdID0gIlBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzIGFuZCBvdGhlciBhc3NvY2lhdGVkIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSBkZXBsb3llZCBvbnRvIHRoZSB0YXJnZXQgbWFjaGluZS4iCitERVBMT1lESVJbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGRlcGxveSBjbGFzcywgdGhlIERFUExPWURJUiBwb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIGZvciBkZXBsb3llZCBmaWxlcy4iCitERVNDUklQVElPTltkb2NdID0gIlRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uIHVzZWQgYnkgcGFja2FnZSBtYW5hZ2Vycy4gSWYgbm90IHNldCwgREVTQ1JJUFRJT04gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBTVU1NQVJZIHZhcmlhYmxlLiIKK0RJU1RST1tkb2NdID0gIlRoZSBzaG9ydCBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uIElmIHRoZSB2YXJpYWJsZSBpcyBibGFuaywgbWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZiB3aWxsIGJlIHVzZWQuIgorRElTVFJPX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMuIFRoZSB2YXJpYWJsZSBvbmx5IGFwcGxpZXMgdG8gdGhlIGltYWdlcyB0aGF0IGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2UuIgorRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMgaWYgdGhlIHBhY2thZ2VzIGV4aXN0LiBUaGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgYnV0IHlvdSBjYW4gcmVtb3ZlIHRoZW0uIgorRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiVGhlIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoZSBkaXN0cmlidXRpb24uIgorRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gRElTVFJPX0ZFQVRVUkVTIGlmIG5vdCBhbHNvIHByZXNlbnQgaW4gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCitESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMIHRoYXQgc2hvdWxkIG5vdCBiZSBiYWNrZmlsbGVkIChpLmUuIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCitESVNUUk9fTkFNRVtkb2NdID0gIlRoZSBsb25nIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4iCitESVNUUk9fUE5fQUxJQVNbZG9jXSA9ICJBbGlhcyBuYW1lcyB1c2VkIGZvciB0aGUgcmVjaXBlIGluIHZhcmlvdXMgTGludXggZGlzdHJpYnV0aW9ucy4iCitESVNUUk9fVkVSU0lPTltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSBkaXN0cmlidXRpb24uIgorRElTVFJPT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4gQnkgZGVmYXVsdCwgdGhlIHZhcmlhYmxlIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIHRoZSBESVNUUk8gdmFyaWFibGUuIgorRExfRElSW2RvY10gPSAiVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc3RvcmUgZG93bmxvYWRzLiBCeSBkZWZhdWx0LCB0aGUgZGlyZWN0b3J5IGlzICdkb3dubG9hZHMnIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorCisjRQorCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OW2RvY10gPSAiQ29udHJvbHMgd2hpY2ggbG9jYWxlcyBmb3IgZ2xpYmMgYXJlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLiBUaGUgdmFyaWFibGUgaXMgdXNlZnVsIGlmIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyA2NE1ieXRlcyBvZiBSQU0gb3IgbGVzcy4iCitFUlJPUl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyBlcnJvcnMgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorRVhDTFVERV9GUk9NX1dPUkxEW2RvY10gPSAiRGlyZWN0cyBCaXRCYWtlIHRvIGV4Y2x1ZGUgYSByZWNpcGUgZnJvbSB3b3JsZCBidWlsZHMgKGkuZS4gYml0YmFrZSB3b3JsZCkuIgorRVhURU5EUEVbZG9jXSA9ICJVc2VkIHdpdGggZmlsZSBhbmQgcGF0aG5hbWVzIHRvIGNyZWF0ZSBhIHByZWZpeCBmb3IgYSByZWNpcGUncyB2ZXJzaW9uIGJhc2VkIG9uIHRoZSByZWNpcGUncyBQRSB2YWx1ZS4gSWYgUEUgaXMgc2V0IGFuZCBncmVhdGVyIHRoYW4gemVybyBmb3IgYSByZWNpcGUsIEVYVEVORFBFIGJlY29tZXMgdGhhdCB2YWx1ZS4iCitFWFRFTkRQS0dWW2RvY10gPSAiVGhlIGZ1bGwgcGFja2FnZSB2ZXJzaW9uIHNwZWNpZmljYXRpb24gYXMgaXQgYXBwZWFycyBvbiB0aGUgZmluYWwgcGFja2FnZXMgcHJvZHVjZWQgYnkgYSByZWNpcGUuIgorRVhURVJOQUxTUkNbZG9jXSA9ICJJZiBleHRlcm5hbHNyYy5iYmNsYXNzIGlzIGluaGVyaXRlZCwgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSB0cmVlLCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0VYVEVSTkFMU1JDX0JVSUxEW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHJlY2lwZSdzIHNvdXJjZSBjb2RlIGlzIGJ1aWx0LCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0VYVFJBX0lNQUdFX0ZFQVRVUkVTW2RvY10gPSAiVGhlIGxpc3Qgb2YgYWRkaXRpb25hbCBmZWF0dXJlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlLiBDb25maWd1cmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitFWFRSQV9JTUFHRURFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0byBidWlsZCB0aGF0IGRvIG5vdCBwcm92aWRlIHBhY2thZ2VzIGZvciBpbnN0YWxsaW5nIGludG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4gVXNlIHRoaXMgdmFyaWFibGUgdG8gbGlzdCByZWNpcGVzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBmaW5hbCBpbWFnZSwgYnV0IG5vdCBuZWVkZWQgaW4gdGhlIHJvb3QgZmlsZXN5c3RlbS4iCitFWFRSQV9PRUNNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBjbWFrZSBvcHRpb25zLiIKK0VYVFJBX09FQ09ORltkb2NdID0gIkFkZGl0aW9uYWwgY29uZmlndXJlIHNjcmlwdCBvcHRpb25zLiIKK0VYVFJBX09FTUFLRVtkb2NdID0gIkFkZGl0aW9uYWwgR05VIG1ha2Ugb3B0aW9ucy4iCitFWFRSQV9PRVNDT05TW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgc2NvbnMgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gdGhlIHNjb25zIGNvbW1hbmQgbGluZS4iCitFWFRSQV9RTUFLRVZBUlNfUE9TVFtkb2NdID0gIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBxbWFrZSB3aGVuIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBhZnRlciB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCitFWFRSQV9RTUFLRVZBUlNfUFJFW2RvY10gPSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3Igb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHFtYWtlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGJlZm9yZSB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCitFWFRSQV9VU0VSU19QQVJBTVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBleHRyYXVzZXJzIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIGltYWdlIGxldmVsIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMuIgorCisjRgorCitGRUVEX0RFUExPWURJUl9CQVNFX1VSSVtkb2NdID0gIkFsbG93IHRvIHNlcnZlIGlwayBkZXBsb3kgZGlyZWN0b3J5IGFzIGFuIGFkIGhvYyBmZWVkIChib2dvZmVlZCkuIFNldCB0byBiYXNlIFVSTCBvZiB0aGUgZGlyZWN0b3J5IGFzIGV4cG9ydGVkIGJ5IEhUVFAuIFNldCBvZiBhZCBob2MgZmVlZCBjb25maWdzIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBpbWFnZS4iCitGSUxFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgYXJlIHBsYWNlZCBpbiBwYWNrYWdlcy4iCitGSUxFU0VYVFJBUEFUSFNbZG9jXSA9ICJFeHRlbmRzIHRoZSBzZWFyY2ggcGF0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gbG9va2luZyBmb3IgZmlsZXMgYW5kIHBhdGNoZXMgYXMgaXQgcHJvY2Vzc2VzIHJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcy4iCitGSUxFU09WRVJSSURFU1tkb2NdID0gIkEgc3Vic2V0IG9mIE9WRVJSSURFUyB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZvciBjcmVhdGluZyBGSUxFU1BBVEguIgorRklMRVNQQVRIW2RvY10gPSAiVGhlIGRlZmF1bHQgc2V0IG9mIGRpcmVjdG9yaWVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yIHBhdGNoZXMgYW5kIGZpbGVzLiBJdCBpcyBkZWZpbmVkIGluIHRoZSBiYXNlLmJiY2xhc3MgY2xhc3MgZm91bmQgaW4gbWV0YS9jbGFzc2VzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LiBEbyBub3QgaGFuZC1lZGl0IHRoZSBGSUxFU1BBVEggdmFyaWFibGUuIgorRklMRVNZU1RFTV9QRVJNU19UQUJMRVNbZG9jXSA9ICJBbGxvd3MgeW91IHRvIGRlZmluZSB5b3VyIG93biBmaWxlIHBlcm1pc3Npb25zIHNldHRpbmdzIHRhYmxlIGFzIHBhcnQgb2YgeW91ciBjb25maWd1cmF0aW9uIGZvciB0aGUgcGFja2FnaW5nIHByb2Nlc3MuIgorRk9OVF9FWFRSQV9SREVQRU5EU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGZvbnRjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIGZvbnQgcGFja2FnZXMuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJ2ZvbnRjb25maWctdXRpbHMnLiIKK0ZPTlRfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBmb250Y2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyBjb250YWluaW5nIGZvbnQgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGNhY2hlZCBieSBGb250Y29uZmlnLiIKK0ZVTExfT1BUSU1JWkFUSU9OW2RvY109ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhbiBvcHRpbWl6ZWQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzInLiIKKworI0cKKworR0lURElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBHaXQgY2xvbmVzIHdpbGwgYmUgc3RvcmVkLiIKK0dST1VQQUREX1BBUkFNW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgdXNlcmFkZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgZ3JvdXBhZGQgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBhZGQgYSBncm91cCB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKK0dST1VQTUVNU19QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwbWVtcyBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgbWVtYmVycyBvZiBhIGdyb3VwIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKK0dSVUJfR0ZYU0VSSUFMW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuIgorR1JVQl9PUFRTW2RvY10gPSAiQWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgY29uZmlndXJhdGlvbi4iCitHUlVCX1RJTUVPVVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRpbWVvdXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBMQUJFTCBpbiB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikuIgorR1RLSU1NT0RVTEVTX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBndGstaW1tb2R1bGVzLWNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZSBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGJlaW5nIGluc3RhbGxlZCB3aGVuIHRoZSBtb2R1bGVzIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluIHBhY2thZ2UuIgorCisjSAorCitIT01FUEFHRVtkb2NdID0gIldlYnNpdGUgd2hlcmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcyBidWlsZGluZyBjYW4gYmUgZm91bmQuIgorSE9TVF9BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9BUkNILiIKK0hPU1RfQ0NfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX0NDX0FSQ0guIgorSE9TVF9PU1tkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgb3BlcmF0aW5nIHN5c3RlbS4gTm9ybWFsbHkgdGhlIHNhbWUgYXMgdGhlIFRBUkdFVF9PUy4iCitIT1NUX1BSRUZJWFtkb2NdID0gIlRoZSBwcmVmaXggZm9yIHRoZSBjcm9zcyBjb21waWxlIHRvb2xjaGFpbi4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX1BSRUZJWC4iCitIT1NUX1NZU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aXRoIHRoZSBidWlsZCBpcyBvY2N1cnJpbmcgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLiIKK0hPU1RfVkVORE9SW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHZlbmRvci4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX1ZFTkRPUi4iCisKKyNJCisKK0lDRUNDX0VOVl9FWEVDW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB0aGF0IHlvdSBwcm92aWRlLiIKK0lDRUNDX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGljZWNjIGJpbmFyeS4iCitJQ0VDQ19VU0VSX0NMQVNTX0JMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIGNsYXNzZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4iCitJQ0VDQ19VU0VSX1BBQ0tBR0VfQkxbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGNvbnNpZGVyLiIKK0lDRUNDX1VTRVJfUEFDS0FHRV9XTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgdXNlIGFuIGVtcHR5IFBBUkFMTEVMX01BS0UgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBmb3JjZSByZW1vdGUgZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gb24gdXNpbmcgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydC4iCitJTUFHRV9CQVNFTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgb2YgaW1hZ2Ugb3V0cHV0IGZpbGVzLiIKK0lNQUdFX0JPT1RfRklMRVNbZG9jXSA9ICJXaGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIGZyb20gJHtERVBMT1lfRElSX0lNQUdFfSB0byBwbGFjZSBpbiBib290IHBhcnRpdGlvbi4gRW50cmllcyB3aWxsIGJlIGluc3RhbGxlZCB1bmRlciBhIHNhbWUgbmFtZSBhcyB0aGUgc291cmNlIGZpbGUuIFRvIGNoYW5nZSB0aGUgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBwYXNzIGEgZGVzaXJlZCBuYW1lIGFmdGVyIGEgc2VtaWNvbG9uIChlZy4gdS1ib290LmltZzt1Ym9vdCkuIgorSU1BR0VfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIHRoYXQgYWxsIGltYWdlcyBzaG91bGQgaW5oZXJpdC4iCitJTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBwcmltYXJ5IGxpc3Qgb2YgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gYW4gaW1hZ2UgcmVjaXBlLiIKK0lNQUdFX0ZTVFlQRVNbZG9jXSA9ICJGb3JtYXRzIG9mIHJvb3QgZmlsZXN5c3RlbSBpbWFnZXMgdGhhdCB5b3Ugd2FudCB0byBoYXZlIGNyZWF0ZWQuIgorSU1BR0VfSU5TVEFMTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlLiBJbWFnZSByZWNpcGVzIHNldCBJTUFHRV9JTlNUQUxMIHRvIHNwZWNpZnkgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZSB0aHJvdWdoIGltYWdlLmJiY2xhc3MuIgorSU1BR0VfTElOR1VBU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBsb2NhbGVzIHRvIGluc3RhbGwgaW50byB0aGUgaW1hZ2UgZHVyaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gY29uc3RydWN0aW9uIHByb2Nlc3MuIgorSU1BR0VfTkFNRVtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZXMgbWludXMgdGhlIGV4dGVuc2lvbi4iCitJTUFHRV9PVkVSSEVBRF9GQUNUT1JbZG9jXSA9ICJEZWZpbmVzIGEgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0byB0aGUgaW5pdGlhbCBpbWFnZSBzaXplIGZvciBjYXNlcyB3aGVuIHRoZSBtdWx0aXBsaWVyIHRpbWVzIHRoZSByZXR1cm5lZCBkaXNrIHVzYWdlIHZhbHVlIGZvciB0aGUgaW1hZ2UgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdW0gb2YgSU1BR0VfUk9PVEZTX1NJWkUgYW5kIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRS4iCitJTUFHRV9QS0dUWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUgcGFja2FnZSB0eXBlIChERUIsIFJQTSwgSVBLLCBvciBUQVIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIkFkZGVkIGJ5IGNsYXNzZXMgdG8gcnVuIHBvc3QgcHJvY2Vzc2luZyBjb21tYW5kcyBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSBpbWFnZS4iCitJTUFHRV9ST09URlNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSB3aGlsZSBpdCBpcyB1bmRlciBjb25zdHJ1Y3Rpb24gKGkuZS4gZHVyaW5nIGRvX3Jvb3RmcykuIgorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFW2RvY10gPSAiRGVmaW5lcyBhZGRpdGlvbmFsIGZyZWUgZGlzayBzcGFjZSBjcmVhdGVkIGluIHRoZSBpbWFnZSBpbiBLYnl0ZXMuIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICcwJy4iCitJTUFHRV9ST09URlNfU0laRVtkb2NdID0gIkRlZmluZXMgdGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLiIKK0lNQUdFX1RZUEVTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyBieSBkZWZhdWx0LiIKK0lOQ19QUltkb2NdID0gIkhlbHBzIGRlZmluZSB0aGUgcmVjaXBlIHJldmlzaW9uIGZvciByZWNpcGVzIHRoYXQgc2hhcmUgYSBjb21tb24gaW5jbHVkZSBmaWxlLiIKK0lOQ09NUEFUSUJMRV9MSUNFTlNFW2RvY10gPSAiU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGljZW5zZSBuYW1lcyAoYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4gTElDRU5TRSkgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQuIFdpbGRjYXJkIGlzIHN1cHBvcnRlZCwgc3VjaCBhcyAnKkdQTHYzJyIKK0lOSElCSVRfREVGQVVMVF9ERVBTW2RvY10gPSAiUHJldmVudHMgdGhlIGRlZmF1bHQgZGVwZW5kZW5jaWVzLCBuYW1lbHkgdGhlIEMgY29tcGlsZXIgYW5kIHN0YW5kYXJkIEMgbGlicmFyeSAobGliYyksIGZyb20gYmVpbmcgYWRkZWQgdG8gREVQRU5EUy4iCitJTkhJQklUX1BBQ0tBR0VfU1RSSVBbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuIgorSU5IRVJJVFtkb2NdID0gIkNhdXNlcyB0aGUgbmFtZWQgY2xhc3MgdG8gYmUgaW5oZXJpdGVkIGF0IHRoaXMgcG9pbnQgZHVyaW5nIHBhcnNpbmcuIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHZhbGlkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorSU5IRVJJVF9ESVNUUk9bZG9jXSA9ICJMaXN0cyBjbGFzc2VzIHRoYXQgd2lsbCBiZSBpbmhlcml0ZWQgYXQgdGhlIGRpc3RyaWJ1dGlvbiBsZXZlbC4gSXQgaXMgdW5saWtlbHkgdGhhdCB5b3Ugd2FudCB0byBlZGl0IHRoaXMgdmFyaWFibGUuIgorSU5JVFJBTUZTX0ZTVFlQRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgaW1hZ2Ugb2YgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKSwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgYm9vdC4iCitJTklUUkRbZG9jXSA9ICJJbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UgYXMgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJkKS4iCitJTklUU0NSSVBUX05BTUVbZG9jXSA9ICJUaGUgZmlsZW5hbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdCBhcyBpbnN0YWxsZWQgdG8gJHtzeXNjb25mZGlyfS9pbml0LmQuIgorSU5JVFNDUklQVF9QQUNLQUdFU1tkb2NdID0gIkEgbGlzdCBvZiB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIGluaXRzY3JpcHRzLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIHVwZGF0ZS1yYy5kLmJiY2xhc3MuIFRoZSB2YXJpYWJsZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gdGhlIFBOIHZhcmlhYmxlLiIKK0lOSVRTQ1JJUFRfUEFSQU1TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBvcHRpb25zIHRvIHBhc3MgdG8gdXBkYXRlLXJjLmQuIFRoZSB2YXJpYWJsZSBpcyBtYW5kYXRvcnkgYW5kIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIHVwZGF0ZS1yYy5kLmJiY2xhc3MuIgorSU5TQU5FX1NLSVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIFFBIGNoZWNrcyB0byBza2lwIGZvciBhIHNwZWNpZmljIHBhY2thZ2Ugd2l0aGluIGEgcmVjaXBlLiIKK0lQS19GRUVEX1VSSVNbZG9jXSA9ICJMaXN0IG9mIGlwa2cgZmVlZCByZWNvcmRzIHRvIHB1dCBpbnRvIGdlbmVyYXRlZCBpbWFnZS4iCisKKyNLCisKK0tBUkNIW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4gWW91IGRlZmluZSB0aGUgS0FSQ0ggdmFyaWFibGUgaW4gdGhlIEJTUCBEZXNjcmlwdGlvbnMuIgorS0JSQU5DSFtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gZXhwbGljaXRseSBpZGVudGlmeSB0aGUga2VybmVsIGJyYW5jaCB0aGF0IGlzIHZhbGlkYXRlZCwgcGF0Y2hlZCBhbmQgY29uZmlndXJlZCBkdXJpbmcgYSBidWlsZC4iCitLQlJBTkNIX0RFRkFVTFRbZG9jXSA9ICJEZWZpbmVzIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCB1c2VkIHRvIGJ1aWxkIHRoZSBMaW51eCBrZXJuZWwuIFVubGVzcyB5b3Ugc3BlY2lmeSBvdGhlcndpc2UsIHRoZSB2YXJpYWJsZSBpbml0aWFsaXplcyB0byAnbWFzdGVyJy4iCitLRVJORUxfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIGRlZmluaW5nIGtlcm5lbCBpbWFnZSB0eXBlcyB0aGF0IGtlcm5lbCBjbGFzcyBzaG91bGQgaW5oZXJpdC4iCitLRVJORUxfRVhUUkFfQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIG1ha2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwYXNzZXMgb24gd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbC4iCitLRVJORUxfRkVBVFVSRVNbZG9jXSA9ICJJbmNsdWRlcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGZyb20gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LiBUaGUgbWV0YWRhdGEgeW91IGFkZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgY29uZmlnIGZyYWdtZW50cyBhbmQgZmVhdHVyZXMgZGVzY3JpcHRpb25zLiIKK0tFUk5FTF9JTUFHRVRZUEVbZG9jXSA9ICJUaGUgdHlwZSBvZiBrZXJuZWwgdG8gYnVpbGQgZm9yIGEgZGV2aWNlLCB1c3VhbGx5IHNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBkZWZhdWx0cyB0byAnekltYWdlJy4iCitLRVJORUxfTU9EVUxFX0FVVE9MT0FEW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGF1dG8tbG9hZGVkIGR1cmluZyBib290IgorS0VSTkVMX01PRFVMRV9QUk9CRUNPTkZbZG9jXSA9ICJMaXN0cyBrZXJuZWwgbW9kdWxlcyBmb3Igd2hpY2ggdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzIHRvIGZpbmQgbW9kdWxlX2NvbmZfKiB2YWx1ZXMgdGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggb2YgdGhlIG1vZHVsZXMiCitLRVJORUxfUEFUSFtkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorS0VSTkVMX1NSQ1tkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorS0ZFQVRVUkVfREVTQ1JJUFRJT05bZG9jXSA9ICJQcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudC4gWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSAuc2NjIGZpbGUgdGhhdCBkZXNjcmliZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGUuIgorS01BQ0hJTkVbZG9jXSA9ICJUaGUgbWFjaGluZSBhcyBrbm93biBieSB0aGUga2VybmVsLiIKK0tUWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZSBjb25maWd1cmF0aW9uLiIKKworI0wKKworTEFZRVJERVBFTkRTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycywgc2VwYXJhdGVkIGJ5IHNwYWNlcywgdXBvbiB3aGljaCB0aGlzIHJlY2lwZSBkZXBlbmRzLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyLiIKK0xBWUVSRElSW2RvY10gPSAiV2hlbiB1c2VkIGluc2lkZSB0aGUgbGF5ZXIuY29uZiBjb25maWd1cmF0aW9uIGZpbGUsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuIgorTEFZRVJWRVJTSU9OW2RvY10gPSAiT3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIuIgorTEVBRF9TT05BTUVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxlYWQgKG9yIHByaW1hcnkpIGNvbXBpbGVkIGxpYnJhcnkgZmlsZSAoLnNvKSB0aGF0IHRoZSBkZWJpYW4gY2xhc3MgYXBwbGllcyBpdHMgbmFtaW5nIHBvbGljeSB0byBnaXZlbiBhIHJlY2lwZSB0aGF0IHBhY2thZ2VzIG11bHRpcGxlIGxpYnJhcmllcy4iCitMSUNfRklMRVNfQ0hLU1VNW2RvY10gPSAiQ2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHJlY2lwZSBzb3VyY2UgY29kZS4iCitMSUNFTlNFW2RvY10gPSAiVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLiBMb2dpY2FsIG9wZXJhdG9ycyAnJicgb3IgJ3wnIGFuZCBwYXJlbnRoZXNlcyBjYW4gYmUgdXNlZC4iCitMSUNFTlNFX1BBVEhbZG9jXSA9ICJQYXRoIHRvIGFkZGl0aW9uYWwgbGljZW5zZXMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLiIKK0xJTlVYX0tFUk5FTF9UWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZSBjb25maWd1cmF0aW9uLiIKK0xJTlVYX1ZFUlNJT05bZG9jXSA9ICJUaGUgTGludXggdmVyc2lvbiBmcm9tIGtlcm5lbC5vcmcgb24gd2hpY2ggdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBiZWluZyBidWlsdCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZC4gWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLiIKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OW2RvY10gPSAiQSBzdHJpbmcgZXh0ZW5zaW9uIGNvbXBpbGVkIGludG8gdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBMaW51eCBrZXJuZWwgYnVpbHQgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4gWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLiIKK0xPR19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3cml0ZXMgb3ZlcmFsbCBsb2cgZmlsZXMuIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyAke1RNUERJUn0vbG9nIgorCisjTQorCitNQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQgZGV2aWNlIGZvciB3aGljaCB0aGUgaW1hZ2UgaXMgYnVpbHQuIFlvdSBkZWZpbmUgTUFDSElORSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EU1tkb2NdID0gIkEgbGlzdCBvZiByZXF1aXJlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuIEJlY2F1c2UgdGhpcyBpcyBhICdtYWNoaW5lIGVzc2VudGlhbCcgdmFyaWFibGUsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjb21tZW5kZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKK01BQ0hJTkVfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIEhvd2V2ZXIsIHRoZSBidWlsZCBwcm9jZXNzIGZvciBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlcyBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LiIKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUuIFRoZSBpbWFnZSBiZWluZyBidWlsdCBoYXMgbm8gYnVpbGQgZGVwZW5kZW5jaWVzIG9uIHRoZSBwYWNrYWdlcyBpbiB0aGlzIGxpc3QuIgorTUFDSElORV9GRUFUVVJFU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGUgTUFDSElORSBzdXBwb3J0cy4iCitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlIG1ldGEvY29uZi9iaXRiYWtlLmNvbmYgZmlsZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZXItY29uZmlndXJhYmxlLiIKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0byBNQUNISU5FX0ZFQVRVUkVTKSBkdXJpbmcgdGhlIGJ1aWxkLiIKK01BQ0hJTkVPVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbWFjaGluZS4gQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiBNQUNISU5FLiIKK01BSU5UQUlORVJbZG9jXSA9ICJUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgZGlzdHJpYnV0aW9uIG1haW50YWluZXIuIgorTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCitNTFBSRUZJWFtkb2NdID0gIlNwZWNpZmllcyBhIHByZWZpeCBoYXMgYmVlbiBhZGRlZCB0byBQTiB0byBjcmVhdGUgYSBzcGVjaWFsIHZlcnNpb24gb2YgYSByZWNpcGUgb3IgcGFja2FnZSwgc3VjaCBhcyBhIE11bHRpbGliIHZlcnNpb24uIgorTU9EVUxFX1RBUkJBTExfREVQTE9ZW2RvY10gPSAiQ29udHJvbHMgY3JlYXRpb24gb2YgdGhlIG1vZHVsZXMtKi50Z3ogZmlsZS4gU2V0IHRoaXMgdmFyaWFibGUgdG8gIjAiIHRvIGRpc2FibGUgY3JlYXRpb24gb2YgdGhpcyBmaWxlLCB3aGljaCBjb250YWlucyBhbGwgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHJlc3VsdGluZyBmcm9tIGEga2VybmVsIGJ1aWxkLiIKK01VTFRJTUFDSF9UQVJHRVRfU1lTW2RvY10gPSAiU2VwYXJhdGVzIGZpbGVzIGZvciBkaWZmZXJlbnQgbWFjaGluZXMgc3VjaCB0aGF0IHlvdSBjYW4gYnVpbGQgZm9yIG11bHRpcGxlIHRhcmdldCBtYWNoaW5lcyB1c2luZyB0aGUgc2FtZSBvdXRwdXQgZGlyZWN0b3JpZXMuIgorCisjTgorCitOQVRJVkVMU0JTVFJJTkdbZG9jXSA9ICJBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgaG9zdCBkaXN0cmlidXRpb24uIgorTk9fUkVDT01NRU5EQVRJT05TW2RvY10gPSAiV2hlbiBzZXQgdG8gJzEnLCBubyByZWNvbW1lbmRlZCBwYWNrYWdlcyB3aWxsIGJlIGluc3RhbGxlZC4gUmVhbGl6ZSB0aGF0IHNvbWUgcmVjb21tZW5kZWQgcGFja2FnZXMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4gc3lzdGVtIGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXMga2VybmVsLW1vZHVsZXMuIEl0IGlzIHVwIHRvIHRoZSB1c2VyIHRvIGFkZCBwYWNrYWdlcyB0byBJTUFHRV9JTlNUQUxMIGFzIG5lZWRlZC4iCitOT0hERFtkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSAuaGRkaW1nIGltYWdlLiIKK05PSVNPW2RvY10gPSAiQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlIElTTyBpbWFnZS4iCisKKyNPCisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEVbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBiaW5jb25maWcuYmJjbGFzcyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSAic2VkIiBjb21tYW5kLiIKK09FX0lNUE9SVFNbZG9jXSA9ICJBbiBpbnRlcm5hbCB2YXJpYWJsZSB1c2VkIHRvIHRlbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hhdCBQeXRob24gbW9kdWxlcyB0byBpbXBvcnQgZm9yIGV2ZXJ5IFB5dGhvbiBmdW5jdGlvbiBydW4gYnkgdGhlIHN5c3RlbS4iCitPRV9URVJNSU5BTFtkb2NdID0gIkNvbnRyb2xzIGhvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzcGF3bnMgaW50ZXJhY3RpdmUgdGVybWluYWxzIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbS4iCitPRVJPT1RbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgaXMgc291cmNlZC4iCitPTERFU1RfS0VSTkVMW2RvY10gPSAiRGVjbGFyZXMgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgdGhhdCB0aGUgcHJvZHVjZWQgYmluYXJpZXMgbXVzdCBzdXBwb3J0LiIKK09WRVJSSURFU1tkb2NdID0gIkJpdEJha2UgdXNlcyBPVkVSUklERVMgdG8gY29udHJvbCB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcyByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLiIKKworI1AKKworUFtkb2NdID0gIlRoZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbi4gUCBpcyBjb21wcmlzZWQgb2YgJHtQTn0tJHtQVn0uIgorUEFDS0FHRV9BUkNIW2RvY10gPSAiVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgcmVzdWx0aW5nIHBhY2thZ2Ugb3IgcGFja2FnZXMuIgorUEFDS0FHRV9BUkNIU1tkb2NdID0gIkEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IGluIG9yZGVyIG9mIHByaW9yaXR5LiIKK1BBQ0tBR0VfQkVGT1JFX1BOW2RvY10gPSAiRW5hYmxlcyBlYXNpbHkgYWRkaW5nIHBhY2thZ2VzIHRvIFBBQ0tBR0VTIGJlZm9yZSAke1BOfSBzbyB0aGF0IHRoZSBwYWNrYWdlcyBjYW4gcGljayB1cCBmaWxlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IHBhY2thZ2UuIgorUEFDS0FHRV9DTEFTU0VTW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YS4gSXQgaXMgc2V0IGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK1BBQ0tBR0VfRVhDTFVERVtkb2NdID0gIlBhY2thZ2VzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgaW5zdGFsbGF0aW9uLiBJZiBhIGxpc3RlZCBwYWNrYWdlIGlzIHJlcXVpcmVkLCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuIgorUEFDS0FHRV9FWFRSQV9BUkNIU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgZGV2aWNlIENQVS4gVGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgd2hlbiB5b3UgYnVpbGQgZm9yIHNldmVyYWwgZGlmZmVyZW50IGRldmljZXMgdGhhdCB1c2UgbWlzY2VsbGFuZW91cyBwcm9jZXNzb3JzLiIKK1BBQ0tBR0VfR1JPVVBbZG9jXSA9ICJEZWZpbmVzIG9uZSBvciBtb3JlIHBhY2thZ2VzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2Ugd2hlbiBhIHNwZWNpZmljIGl0ZW0gaXMgaW5jbHVkZWQgaW4gSU1BR0VfRkVBVFVSRVMuIgorUEFDS0FHRV9JTlNUQUxMW2RvY10gPSAiTGlzdCBvZiB0aGUgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkIGludG8gdGhlIGltYWdlLiBUaGUgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQgYW5kIHVzZXMgSU1BR0VfSU5TVEFMTCBhcyBwYXJ0IG9mIHRoZSBsaXN0LiIKK1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWVtkb2NdID0gIkxpc3Qgb2YgcGFja2FnZXMgYXR0ZW1wdGVkIHRvIGJlIGluc3RhbGxlZC4gSWYgYSBsaXN0ZWQgcGFja2FnZSBmYWlscyB0byBpbnN0YWxsLCB0aGUgYnVpbGQgc3lzdGVtIGRvZXMgbm90IGdlbmVyYXRlIGFuIGVycm9yLiBUaGlzIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkLiIKK1BBQ0tBR0VDT05GSUdbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHByb3ZpZGVzIGEgbWVhbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzIG9mIGEgcmVjaXBlIG9uIGEgcGVyLXJlY2lwZSBiYXNpcy4iCitQQUNLQUdFU1tkb2NdID0gIlRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0aGUgcmVjaXBlLiIKK1BBQ0tBR0VTX0RZTkFNSUNbZG9jXSA9ICJBIHByb21pc2UgdGhhdCB5b3VyIHJlY2lwZSBzYXRpc2ZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIG9wdGlvbmFsIG1vZHVsZXMgdGhhdCBhcmUgZm91bmQgaW4gb3RoZXIgcmVjaXBlcy4iCitQQVJBTExFTF9NQUtFW2RvY10gPSAiU3BlY2lmaWVzIGV4dHJhIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtYWtlIGNvbW1hbmQgZHVyaW5nIHRoZSBjb21waWxlIHRhc2tzLiBUaGlzIHZhcmlhYmxlIGlzIHVzdWFsbHkgaW4gdGhlIGZvcm0gLWogNCwgd2hlcmUgdGhlIG51bWJlciByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIG1ha2UgY2FuIHJ1bi4iCitQQVJBTExFTF9NQUtFSU5TVFtkb2NdID0gIkV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBtYWtlIGluc3RhbGwgY29tbWFuZCBkdXJpbmcgdGhlIGRvX2luc3RhbGwgdGFzayBpbiBvcmRlciB0byBzcGVjaWZ5IHBhcmFsbGVsIGluc3RhbGxhdGlvbi4iCitQQVRDSFJFU09MVkVbZG9jXSA9ICJFbmFibGUgb3IgZGlzYWJsZSBpbnRlcmFjdGl2ZSBwYXRjaCByZXNvbHV0aW9uLiIKK1BBVENIVE9PTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdXRpbGl0eSB1c2VkIHRvIGFwcGx5IHBhdGNoZXMgZm9yIGEgcmVjaXBlIGR1cmluZyBkb19wYXRjaC4iCitQRVtkb2NdID0gIlRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnMCcuIFRoZSBmaWVsZCBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgd2F5LiIKK1BGW2RvY10gPSAiU3BlY2lmaWVzIHRoZSByZWNpcGUgb3IgcGFja2FnZSBuYW1lIGFuZCBpbmNsdWRlcyBhbGwgdmVyc2lvbiBhbmQgcmV2aXNpb24gbnVtYmVycy4gVGhpcyB2YXJpYWJsZSBpcyBjb21wcmlzZWQgb2YgJHtQTn0tJHtFWFRFTkRQRX0ke1BWfS0ke1BSfS4iCitQSVhCVUZfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBwaXhidWZjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUgcGl4YnVmIGxvYWRlcnMgdXNlZCB3aXRoIGdkay1waXhidWYuIgorUEtHRFtkb2NdID0gIlBvaW50cyB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBiZWZvcmUgdGhleSBhcmUgc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKK1BLR0RBVEFfRElSW2RvY10gPSAiUG9pbnRzIHRvIGEgc2hhcmVkLCBnbG9iYWwtc3RhdGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgZGF0YSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4iCitQS0dERVNUW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorUEtHREVTVFdPUktbZG9jXSA9ICJQb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHVzZWQgYnkgdGhlIGRvX3BhY2thZ2UgdGFzayB0byB3cml0ZSBvdXRwdXQgZnJvbSB0aGUgZG9fcGFja2FnZWRhdGEgdGFzay4iCitQTltkb2NdID0gIlBOIHJlZmVycyB0byBhIHJlY2lwZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFzIGlucHV0IHRvIGNyZWF0ZSBhIHBhY2thZ2UuIEl0IHJlZmVycyB0byBhIHBhY2thZ2UgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgY3JlYXRlZCBvciBwcm9kdWNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitQTkJMQUNLTElTVFtkb2NdID0gIkxpc3RzIHJlY2lwZXMgeW91IGRvIG5vdCB3YW50IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkLiIKK1BSW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGlzICdyMCcuIgorUFJFRkVSUkVEX1BST1ZJREVSW2RvY10gPSAiSWYgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIGFuIGl0ZW0sIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorUFJFRkVSUkVEX1ZFUlNJT05bZG9jXSA9ICJJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorUFJFTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCitQUklOQ1tkb2NdID0gIkNhdXNlcyB0aGUgUFIgdmFyaWFibGUgb2YgLmJiYXBwZW5kIGZpbGVzIHRvIGR5bmFtaWNhbGx5IGluY3JlbWVudC4gVGhpcyBpbmNyZW1lbnQgbWluaW1pemVzIHRoZSBpbXBhY3Qgb2YgbGF5ZXIgb3JkZXJpbmcuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJzAnLiIKK1BSSU9SSVRZW2RvY10gPSAiSW5kaWNhdGVzIHRoZSBpbXBvcnRhbmNlIG9mIGEgcGFja2FnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdvcHRpb25hbCcuICBPdGhlciBzdGFuZGFyZCB2YWx1ZXMgYXJlICdyZXF1aXJlZCcsICdzdGFuZGFyZCcgYW5kICdleHRyYScuIgorUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgYWxpYXNlcyB0aGF0IGEgcmVjaXBlIGFsc28gcHJvdmlkZXMuIFRoZXNlIGFsaWFzZXMgYXJlIHVzZWZ1bCBmb3Igc2F0aXNmeWluZyBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcyBkdXJpbmcgdGhlIGJ1aWxkIGFzIHNwZWNpZmllZCBieSBERVBFTkRTLiIKK1BSU0VSVl9IT1NUW2RvY10gPSAiVGhlIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSBob3N0IGFuZCBwb3J0LiIKK1BWW2RvY10gPSAiVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4gVGhlIHZlcnNpb24gaXMgbm9ybWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHJlY2lwZSBmaWxlbmFtZS4iCisKKyNRCisKK1FNQUtFX1BST0ZJTEVTW2RvY10gPSAiU3BlY2lmaWVzIHlvdXIgb3duIHN1YnNldCBvZiAucHJvIGZpbGVzIHRvIGJlIGJ1aWx0IGZvciB1c2Ugd2l0aCBxbWFrZS4iCisKKyNSCisKK1JDT05GTElDVFNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNvbmZsaWN0IHdpdGggYW5vdGhlciBwYWNrYWdlLiBOb3RlIHRoYXQgdGhlIHBhY2thZ2Ugd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIHRoZSBjb25mbGljdGluZyBwYWNrYWdlcyBhcmUgbm90IGZpcnN0IHJlbW92ZWQuIgorUkRFUEVORFNbZG9jXSA9ICJMaXN0cyBhIHBhY2thZ2UncyBydW50aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciBwYWNrYWdlcykgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgdGhlIHBhY2thZ2UgdG8gYmUgYnVpbHQuIFRoZXkgbXVzdCBiZSB0aGUgbmFtZXMgb2Ygb3RoZXIgcGFja2FnZXMgYXMgbGlzdGVkIGluIHRoZSBQQUNLQUdFUyB2YXJpYWJsZSwgbm90IHJlY2lwZSBuYW1lcyAoUE4pLiIKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGRpc3Ryb19mZWF0dXJlc19jaGVjayBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIHJlY2lwZS4iCitSTV9PTERfSU1BR0VbZG9jXSA9ICJSZWNsYWltcyBkaXNrIHNwYWNlIGJ5IHJlbW92aW5nIHByZXZpb3VzbHkgYnVpbHQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgaW1hZ2UgZnJvbSB0aGUgaW1hZ2VzIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZSBERVBMT1lfRElSIHZhcmlhYmxlLiIKK1JNX1dPUktfRVhDTFVERVtkb2NdID0gIldpdGggcm1fd29yayBlbmFibGVkLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGFja2FnZXMgd2hvc2Ugd29yayBkaXJlY3RvcmllcyBzaG91bGQgbm90IGJlIHJlbW92ZWQuIgorUk9PVEZTW2RvY10gPSAiSW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0uIgorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJBZGRlZCBieSBjbGFzc2VzIHRvIHJ1biBwb3N0IHByb2Nlc3NpbmcgY29tbWFuZHMgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKK1JQUk9WSURFU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLiBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0LiIKK1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mIGEgcGFja2FnZSBiZWluZyBidWlsdC4gVGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgbGlzdCBvZiBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCBuZWVkcyB0aGVtIGZvciB0aGUgZXh0ZW5kZWQgdXNhYmlsaXR5LiIKK1JSRVBMQUNFU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyByZXBsYWNlZCBieSBhIHBhY2thZ2UuIFRoZSBwYWNrYWdlIG1hbmFnZXIgdXNlcyB0aGlzIHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGljaCBwYWNrYWdlIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8gcmVwbGFjZSBvdGhlciBwYWNrYWdlKHMpIGR1cmluZyBhbiB1cGdyYWRlLiIKK1JTVUdHRVNUU1tkb2NdID0gIkEgbGlzdCBvZiBhZGRpdGlvbmFsIHBhY2thZ2VzIHRoYXQgeW91IGNhbiBzdWdnZXN0IGZvciBpbnN0YWxsYXRpb24gYnkgdGhlIHBhY2thZ2UgbWFuYWdlciBhdCB0aGUgdGltZSBhIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiBOb3QgYWxsIHBhY2thZ2UgbWFuYWdlcnMgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHkuIgorCisjUworCitTW2RvY10gPSAiVGhlIGxvY2F0aW9uIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdW5wYWNrZWQgcGFja2FnZSBzb3VyY2UgY29kZSByZXNpZGVzLiIKK1NBTklUWV9URVNURURfRElTVFJPU1tkb2NdID0gIkEgbGlzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRpb24gaWRlbnRpZmllcnMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0LiIKK1NES19BUkNIW2RvY10gPSAiVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBTREsuIgorU0RLX0RFUExPWVtkb2NdID0gIlRoZSBkaXJlY3Rvcnkgc2V0IHVwIGFuZCB1c2VkIGJ5IHRoZSBwb3B1bGF0ZV9zZGtfYmFzZSB0byB3aGljaCB0aGUgU0RLIGlzIGRlcGxveWVkLiIKK1NES19ESVJbZG9jXSA9ICJUaGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4iCitTREtfTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgZm9yIFNESyBvdXRwdXQgZmlsZXMuIgorU0RLX09VVFBVVFtkb2NdID0gIlRoZSBsb2NhdGlvbiB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4iCitTREtJTUFHRV9GRUFUVVJFU1tkb2NdID0gIkVxdWl2YWxlbnQgdG8gSU1BR0VfRkVBVFVSRVMuIEhvd2V2ZXIsIHRoaXMgdmFyaWFibGUgYXBwbGllcyB0byB0aGUgU0RLIGdlbmVyYXRlZCBmcm9tIGFuIGltYWdlIHVzaW5nIHRoZSBjb21tYW5kICdiaXRiYWtlIC1jIHBvcHVsYXRlX3NkayBpbWFnZW5hbWUnLiIKK1NES01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSAoaS5lLiBpNjg2IG9yIHg4Nl82NCkgZm9yIHdoaWNoIHRvIGJ1aWxkIFNESyBhbmQgQURUIGl0ZW1zLiIKK1NFQ1RJT05bZG9jXSA9ICJUaGUgc2VjdGlvbiBpbiB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQuIFBhY2thZ2UgbWFuYWdlbWVudCB1dGlsaXRpZXMgY2FuIG1ha2UgdXNlIG9mIHRoaXMgdmFyaWFibGUuIgorU0VMRUNURURfT1BUSU1JWkFUSU9OW2RvY10gPSAiVGhlIHZhcmlhYmxlIHRha2VzIHRoZSB2YWx1ZSBvZiBGVUxMX09QVElNSVpBVElPTiB1bmxlc3MgREVCVUdfQlVJTEQgPSAnMScuIEluIHRoaXMgY2FzZSwgdGhlIHZhbHVlIG9mIERFQlVHX09QVElNSVpBVElPTiBpcyB1c2VkLiIKK1NFUklBTF9DT05TT0xFW2RvY10gPSAiVGhlIHNwZWVkIGFuZCBkZXZpY2UgZm9yIHRoZSBzZXJpYWwgcG9ydCB1c2VkIHRvIGF0dGFjaCB0aGUgc2VyaWFsIGNvbnNvbGUuIFRoaXMgdmFyaWFibGUgaXMgZ2l2ZW4gdG8gdGhlIGtlcm5lbCBhcyB0aGUgJ2NvbnNvbGUnIHBhcmFtZXRlci4gQWZ0ZXIgYm9vdGluZyBvY2N1cnMsIGdldHR5IGlzIHN0YXJ0ZWQgb24gdGhhdCBwb3J0IHNvIHJlbW90ZSBsb2dpbiBpcyBwb3NzaWJsZS4iCitTRVJJQUxfQ09OU09MRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzZXJpYWwgY29uc29sZXMgKFRUWXMpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4iCitTRVJJQUxfQ09OU09MRVNfQ0hFQ0tbZG9jXSA9ICJTaW1pbGFyIHRvIFNFUklBTF9DT05TT0xFUyBleGNlcHQgdGhlIGRldmljZSBpcyBjaGVja2VkIGZvciBleGlzdGVuY2UgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZW5hYmxlIGl0LiBTdXBwb3J0ZWQgb25seSBieSBTeXNWaW5pdC4iCitTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZSBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHNpZ25hdHVyZXMgb2YgdGFza3MgZnJvbSBvbmUgcmVjaXBlIHdoZW4gdGhleSBkZXBlbmQgb24gdGFza3MgZnJvbSBhbm90aGVyIHJlY2lwZS4iCitTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRVtkb2NdID0gIkEgbGlzdCBvZiByZWNpcGVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgc3RhYmxlIGFuZCB3aWxsIG5ldmVyIGNoYW5nZS4iCitTSVRFSU5GT19CSVRTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0gQ1BVLiIKK1NJVEVJTkZPX0VORElBTk5FU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGVuZGlhbiBieXRlIG9yZGVyIG9mIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAnbGUnIGZvciAnbGl0dGxlLWVuZGlhbicgb3IgJ2JlJyBmb3IgJ2JpZy1lbmRpYW4nLiIKK1NPQ19GQU1JTFlbZG9jXSA9ICJHcm91cHMgdG9nZXRoZXIgbWFjaGluZXMgYmFzZWQgdXBvbiB0aGUgc2FtZSBmYW1pbHkgb2YgU09DIChTeXN0ZW0gT24gQ2hpcCkuIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb21tb24gLmluYyBmaWxlIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgYWxsIHRoZSBtYWNoaW5lcy4iCitTT0xJQlNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHNoYXJlZCBsaWJyYXJpZXMgdXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiIKK1NPTElCU0RFVltkb2NdID0gIkRlZmluZXMgdGhlIHN1ZmZpeCBmb3IgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uIgorU09VUkNFX01JUlJPUl9GRVRDSFtkb2NdID0gIlN3aXRjaCBtYXJraW5nIGJ1aWxkIGFzIHNvdXJjZSBmZXRjaGVyLiBVc2VkIHRvIHNraXAgQ09NUEFUSUJMRV8qIGNoZWNraW5nLiIKK1NPVVJDRV9NSVJST1JfVVJMW2RvY10gPSAiVVJMIHRvIHNvdXJjZSBtaXJyb3IgdGhhdCB3aWxsIGJlIHVzZWQgYmVmb3JlIGZldGNoaW5nIGZyb20gb3JpZ2luYWwgU1JDX1VSSS4iCitTUEVDSUFMX1BLR1NVRkZJWFtkb2NdID0gIkEgbGlzdCBvZiBwcmVmaXhlcyBmb3IgUE4gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgdmFyaWFudHMgb2YgcmVjaXBlcyBvciBwYWNrYWdlcy4gVGhlIGxpc3Qgc3BlY2lmaWVzIHRoZSBwcmVmaXhlcyB0byBzdHJpcCBvZmYgZHVyaW5nIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBzdWNoIGFzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBCUE4gdmFyaWFibGUuIgorU1JDX1VSSVtkb2NdID0gIlRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4gVGhpcyB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGF0IGJpdHMgdG8gcHVsbCBpbiBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtIGluLiIKK1NSQ19VUklfT1ZFUlJJREVTX1BBQ0tBR0VfQVJDSFtkb2NdID0gIkJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyIFNSQ19VUkkgY29udGFpbnMgZmlsZXMgdGhhdCBhcmUgbWFjaGluZS1zcGVjaWZpYy4gSWYgc28sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjaGFuZ2VzIFBBQ0tBR0VfQVJDSC4gU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICcwJyBkaXNhYmxlcyB0aGlzIGJlaGF2aW9yLiIKK1NSQ0RBVEVbZG9jXSA9ICJUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4iCitTUkNQVltkb2NdID0gIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UuIFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gaGVscCBkZWZpbmUgdGhlIHZhbHVlIG9mIFBWLiIKK1NSQ1JFVltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIFN1YnZlcnNpb24sIEdpdCwgTWVyY3VyaWFsIGFuZCBCYXphYXIgb25seS4iCitTU1RBVEVfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZS4iCitTU1RBVEVfTUlSUk9SU1tkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2VhcmNoIG90aGVyIG1pcnJvciBsb2NhdGlvbnMgZm9yIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyBiZWZvcmUgYnVpbGRpbmcgb3V0IHRoZSBkYXRhLiBZb3UgY2FuIHNwZWNpZnkgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSBvciBhIHJlbW90ZSBVUkwgc3VjaCBhcyBIVFRQIG9yIEZUUC4iCitTVEFHSU5HX0tFUk5FTF9ESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdpdGgga2VybmVsIGhlYWRlcnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgb3V0LW9mLXRyZWUgbW9kdWxlcy4iCitTVEFNUFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4gVGhlIHBhdGggdG8gYW4gYWN0dWFsIHN0YW1wIGZpbGUgaXMgY29uc3RydWN0ZWQgYnkgZXZhbHVhdGluZyB0aGlzIHN0cmluZyBhbmQgdGhlbiBhcHBlbmRpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4iCitTVEFNUFNfRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBiYXNlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwbGFjZXMgc3RhbXBzLiIKK1NVTU1BUllbZG9jXSA9ICJUaGUgc2hvcnQgKDgwIGNoYXJhY3RlcnMgb3IgbGVzcykgc3VtbWFyeSBvZiB0aGUgYmluYXJ5IHBhY2thZ2UgZm9yIHBhY2thZ2luZyBzeXN0ZW1zIHN1Y2ggYXMgb3BrZywgcnBtIG9yIGRwa2cuIEJ5IGRlZmF1bHQsIFNVTU1BUlkgaXMgdXNlZCB0byBkZWZpbmUgdGhlIERFU0NSSVBUSU9OIHZhcmlhYmxlIGlmIERFU0NSSVBUSU9OIGlzIG5vdCBzZXQgaW4gdGhlIHJlY2lwZS4iCitTVk5ESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIFN1YnZlcnNpb24gY2hlY2tvdXRzIHdpbGwgYmUgc3RvcmVkLiIKK1NZU0xJTlVYX0RFRkFVTFRfQ09OU09MRVtkb2NdID0gIlNwZWNpZmllcyB0aGUga2VybmVsIGJvb3QgZGVmYXVsdCBjb25zb2xlLiIKK1NZU0xJTlVYX09QVFNbZG9jXSA9ICJMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLiIKK1NZU0xJTlVYX1NFUklBTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIHNlcmlhbCBwb3J0IG9yIHR1cm5zIGl0IG9mZi4iCitTWVNMSU5VWF9TUExBU0hbZG9jXSA9ICJBbiAuTFNTIGZpbGUgdXNlZCBhcyB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIFZHQSBib290IG1lbnUgd2hlbiB5b3UgYXJlIHVzaW5nIHRoZSBib290IG1lbnUuIgorU1lTTElOVVhfU0VSSUFMX1RUWVtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50LiIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU1tkb2NdID0gIkEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSBhZnRlciBmaWxlcyBhcmUgc3RhZ2VkIGludG8gdGhlIHN5c3Jvb3QuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSB1c2VkIHRvIGFwcGx5IGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBvbiB0aGUgc3RhZ2VkIGZpbGVzLCBvciB0byBzdGFnZSBhZGRpdGlvbmFsIGZpbGVzLiIKK1NZU1RFTURfQVVUT19FTkFCTEVbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNlcnZpY2UgeW91IGhhdmUgc3BlY2lmaWVkIGluIFNZU1RFTURfU0VSVklDRSBzaG91bGQgYmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IG9yIG5vdC4iCitTWVNURU1EX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGxvY2F0ZXMgdGhlIHN5c3RlbWQgdW5pdCBmaWxlcyB3aGVuIHRoZXkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWFpbiByZWNpcGUncyBwYWNrYWdlLiIKK1NZU1RFTURfU0VSVklDRVtkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgc3lzdGVtZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHN5c3RlbWQgc2VydmljZSBuYW1lIGZvciBhIHBhY2thZ2UuIgorU1lTVklOSVRfRU5BQkxFRF9HRVRUWVNbZG9jXSA9ICJTcGVjaWZpZXMgd2hpY2ggdmlydHVhbCB0ZXJtaW5hbHMgc2hvdWxkIGJlIHJ1bm5pbmcgYSBnZXR0eSwgdGhlIGRlZmF1bHQgaXMgJzEnLiIKKworI1QKKworVFtkb2NdID0gIlRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdlcmUgQml0QmFrZSBwbGFjZXMgdGVtcG9yYXJ5IGZpbGVzLCB3aGljaCBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyIHJlY2lwZS4iCitUQVJHRVRfQVJDSFtkb2NdID0gIlRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGRldmljZSBiZWluZyBidWlsdC4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmVzOiBhcm0sIG1pcHMsIHBwYywgeDg2LCB4ODYtNjQuIgorVEFSR0VUX0NGTEFHU1tkb2NdID0gIkZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRoZSBzYW1lIGFzIENGTEFHUy4iCitUQVJHRVRfRlBVW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBtZXRob2QgZm9yIGhhbmRsaW5nIEZQVSBjb2RlLiBGb3IgRlBVLWxlc3MgdGFyZ2V0cywgd2hpY2ggaW5jbHVkZSBtb3N0IEFSTSBDUFVzLCB0aGUgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gJ3NvZnQnLiBJZiBub3QsIHRoZSBrZXJuZWwgZW11bGF0aW9uIGdldHMgdXNlZCwgd2hpY2ggcmVzdWx0cyBpbiBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuIgorVEFSR0VUX09TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQncyBvcGVyYXRpbmcgc3lzdGVtLiIKK1RBUkdFVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IGZvciB0aGUgY3Jvc3MtY29tcGlsZSB0b29sY2hhaW4gKGUuZy4gYXJtLWxpbnV4LSkuIgorVEFSR0VUX1NZU1tkb2NdID0gIlRoZSB0YXJnZXQgc3lzdGVtIGlzIGNvbXByaXNlZCBvZiBUQVJHRVRfQVJDSCxUQVJHRVRfVkVORE9SIGFuZCBUQVJHRVRfT1MuIgorVENMSUJDW2RvY10gPSAiU3BlY2lmaWVzIEdOVSBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpIHZhcmlhbnQgdG8gdXNlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gWW91IGNhbiBzZWxlY3QgJ2dsaWJjJyBvciAndWNsaWJjJy4iCitUQ01PREVbZG9jXSA9ICJFbmFibGVzIGFuIGV4dGVybmFsIHRvb2xjaGFpbiAod2hlcmUgcHJvdmlkZWQgYnkgYW4gYWRkaXRpb25hbCBsYXllcikgaWYgc2V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAnZGVmYXVsdCcuIgorVEVTVF9JTUFHRVtkb2NdID0gIkVuYWJsZXMgdGVzdCBib290aW5nIG9mIHZpcnR1YWwgbWFjaGluZSBpbWFnZXMgdW5kZXIgdGhlIFFFTVUgZW11bGF0b3IgYWZ0ZXIgYW55IHJvb3QgZmlsZXN5c3RlbXMgYXJlIGNyZWF0ZWQgYW5kIHJ1bnMgdGVzdHMgYWdhaW5zdCB0aG9zZSBpbWFnZXMuIgorVEVTVF9RRU1VQk9PVF9USU1FT1VUW2RvY10gPSAiVGhlIHRpbWUgaW4gc2Vjb25kcyBhbGxvd2VkIGZvciBhbiBpbWFnZSB0byBib290IGJlZm9yZSBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0cyBiZWdpbiB0byBydW4gYWdhaW5zdCBhbiBpbWFnZS4iCitURVNUX1NVSVRFU1tkb2NdID0gIkFuIG9yZGVyZWQgbGlzdCBvZiB0ZXN0cyAobW9kdWxlcykgdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2Ugd2hlbiBwZXJmb3JtaW5nIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcuIgorVEVTVF9QT1dFUkNPTlRST0xfQ01EW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gdXNlIHRvIGNvbnRyb2wgdGhlIHBvd2VyIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0IgorVEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9QT1dFUkNPTlRST0xfQ01EIgorVEVTVF9TRVJJQUxDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdCIKK1RFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBjb21tYW5kIHNwZWNpZmllZCBpbiBURVNUX1NFUklBTENPTlRST0xfQ01EIgorVEVTVF9UQVJHRVRbZG9jXSA9ICJGb3IgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBtZXRob2Qgb2YgZGVwbG95aW5nIHRoZSBpbWFnZSBhbmQgcnVubmluZyB0ZXN0cyBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUiCitUSElTRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgZmlsZSBCaXRCYWtlIGlzIGN1cnJlbnRseSBwYXJzaW5nIGlzIGxvY2F0ZWQuIgorVElNRVtkb2NdID0gIlRoZSB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZCB1c2luZyBITVMgZm9ybWF0LiIKK1RNUERJUltkb2NdID0gIlRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBpdCBkb2VzIGl0cyB3b3JrIGJ1aWxkaW5nIGltYWdlcy4gQnkgZGVmYXVsdCwgdGhlIFRNUERJUiB2YXJpYWJsZSBpcyBuYW1lZCB0bXAgd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorVE9PTENIQUlOX0hPU1RfVEFTS1tkb2NdID0gIlRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGJ1aWxkaW5nIGFuIFNESywgd2hpY2ggY29udGFpbnMgYSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIGxpc3RzIHBhY2thZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBpdCBjcmVhdGVzIHRoZSB0YXJnZXQgcGFydCBvZiBhbiBTREssIHdoaWNoIGluY2x1ZGVzIGxpYnJhcmllcyBhbmQgaGVhZGVycy4iCitUT1BESVJbZG9jXSA9ICJUaGUgQnVpbGQgRGlyZWN0b3J5LiBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlLiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlbiBidWlsZGluZyBpbWFnZXMuIgorVFJBTlNMQVRFRF9UQVJHRVRfQVJDSFtkb2NdID0gIkEgc2FuaXRpemVkIHZlcnNpb24gb2YgVEFSR0VUX0FSQ0guIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIG5lZWRlZCBpbiBhIHZhbHVlIHdoZXJlIHVuZGVyc2NvcmVzIGFyZSBub3QgYWxsb3dlZC4iCitUVU5FX1BLR0FSQ0hbZG9jXSA9ICJUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdW5kZXJzdG9vZCBieSB0aGUgcGFja2FnaW5nIHN5c3RlbSB0byBkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSwgQUJJLCBhbmQgdHVuaW5nIG9mIG91dHB1dCBwYWNrYWdlcy4iCitUVU5FQUJJW2RvY10gPSAiQW4gdW5kZXJseWluZyBBQkkgdXNlZCBieSBhIHBhcnRpY3VsYXIgdHVuaW5nIGluIGEgZ2l2ZW4gdG9vbGNoYWluIGxheWVyLiBUaGlzIGZlYXR1cmUgYWxsb3dzIHByb3ZpZGVycyB1c2luZyBwcmVidWlsdCBsaWJyYXJpZXMgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSBvZiBhIHR1bmluZyBhZ2FpbnN0IHRoZWlyIHNlbGVjdGlvbiBvZiBsaWJyYXJpZXMuIgorVFVORUFCSV9PVkVSUklERVtkb2NdID0gIklmIHNldCwgaWdub3JlcyBUVU5FQUJJX1dISVRFTElTVC4iCitUVU5FQUJJX1dISVRFTElTVFtkb2NdID0gIkEgd2hpdGVsaXN0IG9mIHBlcm1pc3NpYmxlIFRVTkVBQkkgdmFsdWVzLiAgSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbCB2YWx1ZXMgYXJlIGFsbG93ZWQuIgorVFVORUNPTkZMSUNUU1tkb2NdID0gIkxpc3Qgb2YgY29uZmxpY3RpbmcgZmVhdHVyZXMgZm9yIGEgZ2l2ZW4gZmVhdHVyZS4iCitUVU5FVkFMSURbZG9jXSA9ICJEZXNjcmlwdGlvbnMsIHN0b3JlZCBhcyBmbGFncywgb2YgdmFsaWQgdHVuaW5nIGZlYXR1cmVzLiIKKworI1UKKworVUJPT1RfQ09ORklHW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgVUJPT1RfTUFDSElORSBhbmQgY2FuIGFsc28gZGVmaW5lIElNQUdFX0ZTVFlQRVMgZm9yIGluZGl2aWR1YWwgY2FzZXMuIgorVUJPT1RfRU5UUllQT0lOVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTE9BREFERFJFU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IgdGhlIFUtQm9vdCBpbWFnZS4iCitVQk9PVF9MT0NBTFZFUlNJT05bZG9jXSA9ICJBcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgdmFsdWUgcGFzc2VkIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSB3aGVuIGJ1aWxkaW5nIGEgVS1Cb290IGltYWdlLiIKK1VCT09UX01BS0VfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQgY2FsbGVkIGluIHRoZSBNYWtlZmlsZS4iCitVQk9PVF9TVUZGSVhbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYXRlZCBVLUJvb3QgZXh0ZW5zaW9uLiIKK1VCT09UX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IHVzZWQgZm9yIGJ1aWxkaW5nIFUtQm9vdC4iCitVU0VfREVWRlNbZG9jXSA9ICJXaGVuIGJ1aWxkaW5nIGltYWdlcywgc3BlY2lmaWVzIHRvIHBvcHVsYXRlIG9yIG5vdCAvZGV2LiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICcxJyAobGVhdmUgZGlyZWN0b3J5IGVtcHR5LCBzdXJlbHkgYmVjYXVzZSBkZXZ0bXBmcyBkbyB0aGUgam9iKS4gU2V0IGl0IHRvICcwJyB0byB1c2UgbWFrZWRldnMgKG9yIGNvbnNpZGVyIHVzaW5nIGEgY3VzdG9tIGZpbGUgd2l0aCBJTUFHRV9ERVZJQ0VfVEFCTEVTKS4iCitVU0VSX0NMQVNTRVNbZG9jXSA9ICJMaXN0IG9mIGFkZGl0aW9uYWwgY2xhc3NlcyB0byB1c2Ugd2hlbiBidWlsZGluZyBpbWFnZXMgdGhhdCBlbmFibGUgZXh0cmEgZmVhdHVyZXMuIgorVVNFUkFERF9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIHdpdGhpbiB0aGUgcmVjaXBlIHRoYXQgcmVxdWlyZSB1c2VycyBhbmQvb3IgZ3JvdXBzIHRvIGJlIGFkZGVkLiIKK1VTRVJBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSB1c2VyYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgdXNlciB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKKworI1cKKworV0FSTl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyB3YXJuaW5ncyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitXT1JLRElSW2RvY10gPSAiVGhlIHBhdGhuYW1lIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgYSByZWNpcGUuIFRoaXMgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBUTVBESVIgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgY2hhbmdlcyBhcyBkaWZmZXJlbnQgcGFja2FnZXMgYXJlIGJ1aWx0LiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9sYXllci5jb25mIGIvbWV0YS9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MDAxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9sYXllci5jb25mCkBAIC0wLDAgKzEsNjAgQEAKKyMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICitCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gImNvcmUiCitCQkZJTEVfUEFUVEVSTl9jb3JlID0gIl4ke0xBWUVSRElSfS8iCitCQkZJTEVfUFJJT1JJVFlfY29yZSA9ICI1IgorCisjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQgb24gc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IHdpbGwKKyMgY2F1c2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvdGhlciBsYXllcnMKK0xBWUVSVkVSU0lPTl9jb3JlID0gIjYiCisKK0JCTEFZRVJTX0xBWUVSSU5ERVhfTkFNRV9jb3JlID0gIm9wZW5lbWJlZGRlZC1jb3JlIgorCisjIFNldCBhIHZhcmlhYmxlIHRvIGdldCB0byB0aGUgdG9wIG9mIHRoZSBtZXRhZGF0YSBsb2NhdGlvbgorQ09SRUJBU0UgPSAnJHtAb3MucGF0aC5ub3JtcGF0aCgiJHtMQVlFUkRJUn0vLi4vIil9JworCisjIG9wa2ctdXRpbHMgaXMgZm9yIHVwZGF0ZS1hbHRuZXJuYXRpdmVzIDooCitTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSArPSAiIFwKKyAgc3lzdmluaXQtaW5pdHRhYiBcCisgIHNoYWRvdy1zZWN1cmV0dHkgXAorICBvcGtnLWFyY2gtY29uZmlnIFwKKyAgbmV0YmFzZSBcCisgIGluaXQtaWZ1cGRvd24gXAorICBjb25ubWFuLWNvbmYgXAorICBmb3JtZmFjdG9yIFwKKyAgeHNlcnZlci14Zjg2LWNvbmZpZyBcCisgIHBvaW50ZXJjYWwgXAorICBwb2ludGVyY2FsLXhpbnB1dCBcCisgIGJhc2UtZmlsZXMgXAorICBrZXltYXBzIFwKKyAgdWRldi1leHRyYWNvbmYgXAorICBwYWNrYWdlZ3JvdXAteDExLXhzZXJ2ZXIgXAorICBzeXN0ZW1kLXNlcmlhbGdldHR5IFwKKyAgaW5pdHNjcmlwdHMgXAorICBzaGFkb3cgXAorICBzaGFkb3ctc3lzcm9vdCBcCisgIGJhc2UtcGFzc3dkIFwKKyAgb3BrZy11dGlscyBcCisiCisKK1NJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMgKz0gIiBcCisgIGdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfS0+Z2xpYmMgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPm11c2wgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPnVjbGliYyBcCisgIGdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfS0+bGludXgtbGliYy1oZWFkZXJzIFwKKyAgcHBwLWRpYWxpbi0+cHBwIFwKKyAgcmVzb2x2Y29uZi0+YmFzaCBcCisgIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLT5wZXJsIFwKKyAgaW5pdHJhbWZzLWZyYW1ld29yay0+YnVzeWJveCBcCisgIGluaXRyYW1mcy1mcmFtZXdvcmstPnN5c3RlbWQgXAorICBpbml0cmFtZnMtZnJhbWV3b3JrLT51ZGV2IFwKKyAgbGliZXJhdGlvbi1mb250cy0+Zm9udGNvbmZpZyBcCisgIGdub21lLWljb24tdGhlbWUtPmxpYnJzdmcgXAorICBmb250LWFsaWFzLT5mb250LXV0aWwgXAorICB3ZXN0b24taW5pdC0+d2VzdG9uIFwKKyAgd2VzdG9uLWluaXQtPmtiZCBcCisiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9saWNlbnNlcy5jb25mIGIvbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxN2M0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9saWNlbnNlcy5jb25mCkBAIC0wLDAgKzEsMTg5IEBACisjIFRoZXNlIGFyZW4ndCBhY3R1YWxseSB1c2VkIGFueXdoZXJlIHRoYXQgSSBjYW4gdGVsbAorIyBUaGV5IG1heSBiZSBpbiB0aGUgZnV0dXJlIChvciBhcmUgdXNlZCBieSBzb21lb25lIGVsc2UKKyMgRm9yIGNvbXBsZXRpb24gc2FrZSwgSSd2ZSB1cGRhdGVkIHRoZW0KK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBQUwgQWRvYmUgQUZMLTEuMiBBRkwtMi4wIEFGTC0yLjEgQUZMLTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBR1BMLTMuMCBBTlRMUi1QRCBBcGFjaGUtMS4wIEFwYWNoZS0xLjEgQXBhY2hlLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBUEwtMS4wIEFQU0wtMS4wIEFQU0wtMS4xIEFQU0wtMS4yIEFQU0wtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkFydGlzdGljLTEuMCBBcnRpc3RpYy0yLjAgQml0c3RyZWFtVmVyYSBCU0QiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQlNELTItQ2xhdXNlIEJTRC0zLUNsYXVzZSBCU0QtNC1DbGF1c2UgQlNMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQVRPU0wtMS4xIENDMC0xLjAgQ0MtQlktMS4wIENDLUJZLTIuMCBDQy1CWS0yLjUiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktMy4wIENDLUJZLU5DLTEuMCBDQy1CWS1OQy0yLjAgQ0MtQlktTkMtMi41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5DLTMuMCBDQy1CWS1OQy1ORC0xLjAgQ0MtQlktTkMtTkQtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5DLU5ELTIuNSBDQy1CWS1OQy1ORC0zLjAgQ0MtQlktTkMtU0EtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5DLVNBLTIuMCBDQy1CWS1OQy1TQS0yLjUgQ0MtQlktTkMtU0EtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5ELTEuMCBDQy1CWS1ORC0yLjAgQ0MtQlktTkQtMi41IENDLUJZLU5ELTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1TQS0xLjAgQ0MtQlktU0EtMi4wIENDLUJZLVNBLTIuNSBDQy1CWS1TQS0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0RETC0xLjAgQ0VDSUxMLTEuMCBDRUNJTEwtMi4wIENFQ0lMTC1CIENFQ0lMTC1DIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNsQXJ0aXN0aWMgQ1BBTC0xLjAgQ1BMLTEuMCBDVUEtT1BMLTEuMCBEU1NTTCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJFQ0wtMS4wIEVDTC0yLjAgZUNvcy0yLjAgRURMLTEuMCBFRkwtMS4wIEVGTC0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRWxmdXRpbHMtRXhjZXB0aW9uIEVudGVzc2EgRVBMLTEuMCBFcmxQTC0xLjEiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRVVEYXRhZ3JpZCBFVVBMLTEuMCBFVVBMLTEuMSBGYWlyIEZyYW1ld29yeC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRnJlZVR5cGUgR0ZETC0xLjEgR0ZETC0xLjIgR0ZETC0xLjMgR1BMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi4wIEdQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMC13aXRoLWNsYXNzcGF0aC1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIEdQTC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJnU09BUC0xIGdTT0FQLTEuM2IgSFBORCBJUEEgSVBMLTEuMCBJU0MgTEdQTC0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTEdQTC0yLjEgTEdQTC0zLjAgTGlicG5nIExQTC0xLjAyIExQUEwtMS4wIExQUEwtMS4xIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkxQUEwtMS4yIExQUEwtMS4zYyBNaXJPUyBNSVQgTW90b3NvdG8gTVBMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJNUEwtMS4xIE1TLVBMIE1TLVJMIE11bHRpY3MgTkFTQS0xLjMgTmF1bWFuIE5DU0EiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTkdQTCBOb2tpYSBOUE9TTC0zLjAgTlRQIE9BU0lTIE9DTEMtMi4wIE9EYkwtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk9GTC0xLjEgT0dUU0wgT0xEQVAtMi44IE9wZW5TU0wgT1NMLTEuMCBPU0wtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk9TTC0zLjAgUEQgUEhQLTMuMCBQb3N0Z3JlU1FMIFByb3ByaWV0YXJ5IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlB5dGhvbi0yLjAgUVBMLTEuMCBSSGVDb3MtMSBSSGVDb3MtMS4xIFJQTC0xLjUiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiUlBTTC0xLjAgUlNDUEwgUnVieSBTQVgtUEQgU0dJLTEgU2ltcGxlLTIuMCBTbGVlcHljYXQiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiU1BMLTEuMCBTdWdhckNSTS0xIFN1Z2FyQ1JNLTEuMS4zIFVDQiBWU0wtMS4wIFczQyIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJXYXRjb20tMS4wIFdYd2luZG93cyBYRnJlZTg2LTEuMCBYRnJlZTg2LTEuMSBYbmV0IFhTTCBZUEwtMS4xIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlppbWJyYS0xLjMgWmxpYiBaUEwtMS4xIFpQTC0yLjAgWlBMLTIuMSIKKworIyBTdGFuZGFyZHMgYXJlIGdyZWF0ISBFdmVyeW9uZSBoYXMgdGhlaXIgb3duLiBJbiBhbiBlZmZvcnQgdG8gc3RhbmRhcmRpemUgbGljZW5zaW5nCisjIG5hbWVzLCBjb21tb24tbGljZW5zZXMgd2lsbCB1c2UgdGhlIFNQRFggc3RhbmRhcmQgbGljZW5zZSBuYW1lcy4gSW4gb3JkZXIgdG8gbm90CisjIGJyZWFrIHRoZSBub24tc3RhbmRhcmRpemVkIGxpY2Vuc2UgbmFtZXMgdGhhdCB3ZSBmaW5kIGluIExJQ0VOU0UsIHdlJ2xsIHNldAorIyB1cCBhIGJ1bmNoIG9mIFZhckZsYWdzIHRvIGFjY29tb2RhdGUgbm9uLVNQRFggbGljZW5zZSBuYW1lcy4KKyMKKyMgV2Ugc2hvdWxkIHJlYWxseSBkaXNjdXNzIHN0YW5kYXJkaXppbmcgdGhpcyBmaWVsZCwgYnV0IHRoYXQncyBhIGxvbmdlciB0ZXJtIGdvYWwuCisjIEZvciBub3csIHdlIGNhbiBkbyB0aGlzIGFuZCBpdCBzaG91bGQgZ3JhYiB0aGUgbW9zdCBjb21tb24gTElDRU5TRSBuYW1pbmcgdmFyaWF0aW9ucy4KKyMKKyMgV2Ugc2hvdWxkIE5FVkVSIGhhdmUgYSBHUEwvTEdQTCB3aXRob3V0IGEgdmVyc2lvbiEhISEKKyMgQW55IG1hcHBpbmcgdG8gTVBML0xHUEwvR1BMIHNob3VsZCBiZSBmaXhlZAorCisjIEFHUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQUdQTC0zXSA9ICJBR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0FHUEx2M10gPSAiQUdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtBR1BMdjMuMF0gPSAiQUdQTC0zLjAiCisKKyMgR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0dQTC0xXSA9ICJHUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjFdID0gIkdQTC0xLjAiCitTUERYTElDRU5TRU1BUFtHUEx2MS4wXSA9ICJHUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbR1BMLTJdID0gIkdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtHUEx2Ml0gPSAiR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYyLjBdID0gIkdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtHUEwtM10gPSAiR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYzXSA9ICJHUEwtMy4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjMuMF0gPSAiR1BMLTMuMCIKKworI0xHUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbTEdQTHYyXSA9ICJMR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Mi4wXSA9ICJMR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0xHUEwyLjFdID0gIkxHUEwtMi4xIgorU1BEWExJQ0VOU0VNQVBbTEdQTHYyLjFdID0gIkxHUEwtMi4xIgorU1BEWExJQ0VOU0VNQVBbTEdQTHYzXSA9ICJMR1BMLTMuMCIKKworI01QTCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtNUEwtMV0gPSAiTVBMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW01QTHYxXSA9ICJNUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbTVBMdjEuMV0gPSAiTVBMLTEuMSIKK1NQRFhMSUNFTlNFTUFQW01QTHYyXSA9ICJNUEwtMi4wIgorCisjTUlUIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW01JVC1YXSA9ICJNSVQiCitTUERYTElDRU5TRU1BUFtNSVQtc3R5bGVdID0gIk1JVCIKKworI09wZW5zc2wgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbb3BlbnNzbF0gPSAiT3BlblNTTCIKKworI1B5dGhvbiB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtQU0ZdID0gIlB5dGhvbi0yLjAiCitTUERYTElDRU5TRU1BUFtQU0Z2Ml0gPSAiUHl0aG9uLTIuMCIKK1NQRFhMSUNFTlNFTUFQW1B5dGhvbi0yXSA9ICJQeXRob24tMi4wIgorCisjQXBhY2hlIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0FwYWNoZXYyXSA9ICJBcGFjaGUtMi4wIgorU1BEWExJQ0VOU0VNQVBbQXBhY2hlLTJdID0gIkFwYWNoZS0yLjAiCisKKyNBcnRpc3RpYyB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBcnRpc3RpY3YxXSA9ICJBcnRpc3RpYy0xLjAiCitTUERYTElDRU5TRU1BUFtBcnRpc3RpYy0xXSA9ICJBcnRpc3RpYy0xLjAiCisKKyNBY2FkZW1pYyB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBRkwtMl0gPSAiQUZMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0FGTC0xXSA9ICJBRkwtMS4yIgorU1BEWExJQ0VOU0VNQVBbQUZMdjJdID0gIkFGTC0yLjAiCitTUERYTElDRU5TRU1BUFtBRkx2MV0gPSAiQUZMLTEuMiIKKworI090aGVyIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0VQTHYxLjBdID0gIkVQTC0xLjAiCisKKyNTaWxpY29uIEdyYXBoaWNzIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW1NHSXYxXSA9ICJTR0ktMSIKKworIyBBZGRpdGlvbmFsIGxpY2Vuc2UgZGlyZWN0b3JpZXMuIEFkZCB5b3VyIGN1c3RvbSBsaWNlbnNlcyBkaXJlY3RvcmllcyB0aGlzIHBhdGguCisjIExJQ0VOU0VfUEFUSCArPSAiJHtDT1JFQkFTRX0vY3VzdG9tLWxpY2Vuc2VzIgorCisjIFNldCBpZiB5b3Ugd2FudCB0aGUgbGljZW5zZS5tYW5pZmVzdCBjb3BpZWQgdG8gdGhlIGltYWdlCisjQ09QWV9MSUNfTUFOSUZFU1QgPSAiMSIKKworIyBJZiB5b3Ugd2FudCB0aGUgcGtnIGxpY2Vuc2VzIGNvcGllZCBvdmVyIGFzIHdlbGwgeW91IG11c3Qgc2V0CisjIGJvdGggQ09QWV9MSUNfTUFOSUZFU1QgYW5kIENPUFlfTElDX0RJUlMKKyNDT1BZX0xJQ19ESVJTID0gIjEiCisKKyMjIFNQRFggdGVtcG9yYXJ5IGRpcmVjdG9yeQorU1BEWF9URU1QX0RJUiA9ICIke1dPUktESVJ9L3NwZHhfdGVtcCIKK1NQRFhfTUFOSUZFU1RfRElSID0gIi9ob21lL3lvY3RvL2Zvc3NvbG9neV9zY2FucyIKKworIyMgU1BEWCBGb3JtYXQgaW5mbworU1BEWF9WRVJTSU9OID0gIlNQRFgtMS4xIgorREFUQV9MSUNFTlNFID0gIkNDMC0xLjAiCisKKyMjIEZvc3NvbG9neSBzY2FuIGluZm9ybWF0aW9uCisjIFlvdSBjYW4gc2V0IG9wdGlvbiB0byBjb250cm9sIGlmIHRoZSBjb3B5cmlnaHQgaW5mb3JtYXRpb24gd2lsbCBiZSBza2lwcGVkCisjIGR1cmluZyB0aGUgaWRlbnRpZmljYXRpb24gcHJvY2Vzcy4KKyMKKyMgSXQgaXMgZGVmaW5lZCBhcyBbRk9TU19DT1BZUklHSFRdIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYuCisjIEZPU1NfQ09QWVJJR0hUID0gInRydWUiCisjICAgTk8gY29weXJpZ2h0IHdpbGwgYmUgcHJvY2Vzc2VkLiBUaGF0IG1lYW5zIG9ubHkgbGljZW5zZSBpbmZvcm1hdGlvbiB3aWxsIGJlCisjICAgaWRlbnRpZmllZCBhbmQgb3V0cHV0IHRvIFNQRFggZmlsZQorIyBGT1NTX0NPUFlSSUdIVCA9ICJmYWxzZSIKKyMgICBDb3B5cmlnaHQgd2lsbCBiZSBpZGVudGlmaWVkIGFuZCBvdXRwdXQgdG8gU1BEWCBmaWxlIGFsb25nIHdpdGggbGljZW5zZQorIyAgIGluZm9ybWF0aW9uLiBUaGUgcHJvY2VzcyB3aWxsIHRha2UgbW9yZSB0aW1lIHRoYW4gbm90IHByb2Nlc3NpbmcgY29weXJpZ2h0CisjICAgaW5mb3JtYXRpb24uCisjCisKK0ZPU1NfTk9fQ09QWVJJR0hUID0gInRydWUiCisKKyMgQSBvcHRpb24gZGVmaW5lZCBhc1tGT1NTX1JFQ1VSU0lWRV9VTlBBQ0tdIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYuIGlzCisjIHVzZWQgdG8gY29udHJvbCBpZiBGT1NTb2xvZ3kgc2VydmVyIG5lZWQgcmVjdXJzaXZlbHkgdW5wYWNrIHRhci5neiBmaWxlIHdoaWNoCisjIGlzIHNlbnQgZnJvbSBkb19zcGR4IHRhc2suCisjCisjIEZPU1NfUkVDVVJTSVZFX1VOUEFDSyA9ICJmYWxzZSI6CisjICAgIEZPU1NvbG9neSBzZXJ2ZXIgZG9lcyBOT1QgcmVjdXJzaXZlbHkgdW5wYWNrLiBJbiB0aGUgY3VycmVudCByZWxlYXNlLCB0aGlzCisjICAgIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBiZWNhdXNlIHJlY3Vyc2l2ZWx5IHVucGFjayB3aWxsIG5vdCBuZWNlc3NhcmlseSBicmVhaworIyAgICBkb3duIG9yaWdpbmFsIGNvbXByZXNzZWQgZmlsZXMuCisjIEZPU1NfUkVDVVJTSVZFX1VOUEFDSyA9ICJ0cnVlIjoKKyMgICAgRk9TU29sb2d5IHNlcnZlciByZWN1cnNpdmVseSB1bnBhY2sgY29tcG9uZW50cy4KKyMKKworRk9TU19SRUNVUlNJVkVfVU5QQUNLID0gImZhbHNlIgorCisjIEFuIG9wdGlvbiBkZWZpbmVkIGFzIFtGT1NTX0ZVTExfU1BEWF0gaW4gLi9tZXRhL2NvbmYvbGljZW5zZXMuY29uZiBpcyB1c2VkIHRvCisjIGNvbnRyb2wgd2hhdCBraW5kIG9mIFNQRFggb3V0cHV0IHRvIGdldCBmcm9tIHRoZSBGT1NTb2xvZ3kgc2VydmVyLgorIworIyBGT1NTX0ZVTExfU1BEWCA9ICJ0cnVlIjoKKyMgICBUZWxsIEZPU1NvbG9neSBzZXJ2ZXIgdG8gcmV0dXJuIGZ1bGwgU1BEWCBvdXRwdXQsIGxpa2UgaWYgdGhlIHByb2dyYW0gd2FzCisjICAgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZ2V0IGxpY2Vuc2UgcmVmcyBmb3IKKyMgICB0aGUgZnVsbCBwYWNrYWdlIHJhdGhlciB0aGFuIGluZGl2aWR1YWwgZmlsZXMgb25seS4KKyMKKyMgRk9TU19GVUxMX1NQRFggPSAiZmFsc2UiOgorIyAgIFRlbGwgRk9TU29sb2d5IHRvIG9ubHkgcHJvY2VzcyBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciBmaWxlcy4gQWxsIHBhY2thZ2UKKyMgICBsaWNlbnNlIHRhZ3MgaW4gdGhlIHJlcG9ydCB3aWxsIGJlICJOT0FTU0VSVElPTiIKKyMKKworRk9TU19GVUxMX1NQRFggPSAidHJ1ZSIKKworIyBGT1NTb2xvZ3lTUERYIGluc3RhbmNlIHNlcnZlci4gaHR0cDovL2xvY2FsaG9zdC9yZXBvIGlzIHRoZSBkZWZhdWx0CisjIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBmb3IgRk9TU29sb2d5LgorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBGT1NTb2xvZ3lTUERYIGNvbW1hbmRsaW5lOgorIyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zcGR4LXRvb2xzL2Zvc3NvbG9neS1zcGR4L3dpa2kvRm9zc29sb2d5LVNQRFgtV2ViLUFQSQorIworCitGT1NTX0JBU0VfVVJMID0gImh0dHA6Ly9sb2NhbGhvc3QvcmVwby8/bW9kPXNwZHhfbGljZW5zZV9vbmNlIgorRk9TU19TRVJWRVIgPSAiJHtGT1NTX0JBU0VfVVJMfSZmdWxsU1BEWEZsYWc9JHtGT1NTX0ZVTExfU1BEWH0mbm9Db3B5cmlnaHQ9JHtGT1NTX05PX0NPUFlSSUdIVH0mcmVjdXJzaXZlVW5wYWNrPSR7Rk9TU19SRUNVUlNJVkVfVU5QQUNLfSIKKworRk9TU19XR0VUX0ZMQUdTID0gIi1xTyAtIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgLS10aW1lb3V0PTAiCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lLXNkay9pNTg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhY2NlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lLXNkay9pNTg2LmNvbmYKQEAgLTAsMCArMSwzIEBACitTREtfQVJDSCA9ICJpNTg2IgorU0RLX0NDX0FSQ0ggPSAiLW1hcmNoPWk1ODYiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZGI0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mCkBAIC0wLDAgKzEsMiBAQAorU0RLX0FSQ0ggPSAiaTY4NiIKK1NES19DQ19BUkNIID0gIi1tYXJjaD1pNjg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMmQ2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYKQEAgLTAsMCArMSBAQAorU0RLX0FSQ0ggPSAieDg2XzY0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9SRUFETUUgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYxMzBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9SRUFETUUKQEAgLTAsMCArMSwxMDAgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIFJldmlzaW9uCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KK1RoZSBpbmRpdmlkdWFsIENQVSwgYW5kIEFCSSB0dW5pbmdzIGFyZSBjb250YWluZWQgaW4gdGhpcyBkaXJlY3RvcnkuICBBCitudW1iZXIgb2YgbG9jYWwgYW5kIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgd2F5IHRoZQordHVuaW5ncyBhcmUgc2V0dXAgYW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gc3BlY2lmeSBhbiBvcHRpbWl6ZWQKK2NvbmZpZ3VyYXRpb24uCisKK1RoZSBmb2xsb3dpbmcgaXMgYnJpZWYgc3VtbWFyeSBvZiB0aGUgZ2VuZXJpYyBjb21wb25lbnRzIHRoYXQgYXJlIHVzZWQKK2luIHRoZXNlIHR1bmluZ3MuCisKK0FWQUlMVFVORVMgLSBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgb2YgdGhlIHR1bmluZyBkZWZpbml0aW9ucyBjdXJyZW50bHkKK2F2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiAgTm90IGFsbCB0dW5lcyBpbiB0aGlzIGxpc3QgbWF5IGJlIGNvbXBhdGlibGUKK3dpdGggdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiwgb3IgZWFjaCBvdGhlciBpbiBhIG11bHRpbGliCitjb25maWd1cmF0aW9uLiAgRWFjaCB0dW5pbmcgZmlsZSBjYW4gYWRkIHRvIHRoaXMgbGlzdCB1c2luZyAiKz0iLCBidXQKK3Nob3VsZCBuZXZlciByZXBsYWNlIHRoZSBsaXN0IHVzaW5nICI9Ii4KKworREVGQVVMVFRVTkUgLSBUaGlzIHNwZWNpZmllcyB0aGUgdHVuZSB0byB1c2UgZm9yIGEgcGFydGljdWxhciBidWlsZC4KK0VhY2ggdHVuZSBzaG91bGQgc3BlY2lmeSBhIHJlYXNvbmFibGUgZGVmYXVsdCwgd2hpY2ggY2FuIGJlIG92ZXJyaWRlbiBieQorYSBtYWNoaW5lIG9yIG11bHRpbGliIGNvbmZpZ3VyYXRpb24uICBUaGUgc3BlY2lmaWVkIHR1bmUgbXVzdCBiZSBsaXN0ZWQKK2luIHRoZSBBVkFJTFRVTkVTLgorCitUVU5FVkFMSURbZmVhdHVyZV0gLSBUaGUgPGZlYXR1cmU+IGlzIGRlZmluZWQgd2l0aCBhIGh1bWFuIHJlYWRhYmxlCitleHBsYW5hdGlvbiBmb3Igd2hhdCBpdCBkb2VzLiAgQWxsIGFyY2hpdGVjdHVyYWwsIGNwdSwgYWJpLCBldGMgdHVuaW5nCitmZWF0dXJlcyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgVFVORVZBTElELgorCitUVU5FQ09ORkxJQ1RTW2ZlYXR1cmVdIC0gQSBsaXN0IG9mIGZlYXR1cmVzIHdoaWNoIGNvbmZsaWN0IHdpdGggPGZlYXR1cmU+LgorTmV3IHNhbml0eSBjaGVja3Mgd2lsbCB0cnkgdG8gcmVqZWN0IGNvbWJpbmF0aW9ucyBpbiB3aGljaCBhIHNpbmdsZQordHVuaW5nIGVuZHMgdXAgd2l0aCBmZWF0dXJlcyB3aGljaCBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuCisKK1RVTkVfRkVBVFVSRVMgLSBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBhcyBUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+LgorU2VlIFRVTkVfRkVBVFVSRVNfdHVuZS08dHVuZT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RVTkVfRkVBVFVSRVNfdHVuZS08dHVuZT4gLSBTcGVjaWZ5IHRoZSBmZWF0dXJlcyB1c2VkIHRvIGRlc2NyaWJlIGEKK3NwZWNpZmljIHR1bmUuICBUaGlzIGlzIGEgbGlzdCBvZiBmZWF0dXJlcyB0aGF0IGEgdHVuZSBzdXBwb3J0LCBlYWNoCitmZWF0dXJlIG11c3QgYmUgaW4gdGhlIFRVTkVWQUxJRCBsaXN0LiAgTm90ZTogdGhlIHR1bmUgYW5kIGEgZ2l2ZW4KK2ZlYXR1cmUgbmFtZSBtYXkgYmUgdGhlIHNhbWUsIGJ1dCB0aGV5IGhhdmUgZGlmZmVyZW50IHB1cnBvc2VzLiAgT25seQorZmVhdHVyZXMgbWF5IGJlIHVzZWQgdG8gY2hhbmdlIGJlaGF2aW9yLCB3aGlsZSB0dW5lcyBhcmUgdXNlZCB0bworZGVzY3JpYmUgYW4gb3ZlcmFsbCBzZXQgb2YgZmVhdHVyZXMuCisKK0FCSUVYVEVOU0lPTiAtIEFuIEFCSSBleHRlbnNpb24gbWF5IGJlIHNwZWNpZmllZCBieSBhIHNwZWNpZmljIGZlYXR1cmUKK29yIG90aGVyIHR1bmluZyBzZXR0aW5nLCBzdWNoIGFzIFRBUkdFVF9GUFUuICBBbnkgQUJJIGV4dGVuc2lvbnMgZWl0aGVyCituZWVkIHRvIGJlIGRlZmluZWQgaW4gdGhlIGFyY2hpdGVjdHVyZXMgYmFzZSBhcmNoIGZpbGUsIGkuZS4KK0FCSUVYVEVOU0lPTiA9ICJlYWJpIiBpbiB0aGUgYXJtIGNhc2UsIG9yIGFwcGVuZGVkIHRvIGluIHNwZWNpZmljIHR1bmUKK2ZpbGVzIHdpdGggYSAiLj0iLiAgU3BhY2VzIGFyZSBub3QgYWxsb3dlZCBpbiB0aGlzIHZhcmlhYmxlLgorCitUVU5FX0NDQVJHUyAtIFNldHVwIHRoZSBjZmxhZ3MgYmFzZWQgb24gdGhlIFRVTkVfRkVBVFVSRVMgc2V0dGluZ3MuCitUaGVzZSBzaG91bGQgYmUgYWRkaXRpdmUgd2hlbiBkZWZpbmVkIHVzaW5nICIrPSIuICBBbGwgaXRlbXMgaW4gdGhpcworbGlzdCBzaG91bGQgYmUgZHluYW1pYyEgaS5lLgorJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZmVhdHVyZSIsICJjZmxhZyIsICIhY2ZsYWciLCBkKX0KKworVFVORV9BUkNIIC0gVGhlIEdOVSBjYW5vbmljYWwgYXJjaCBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuICBpLmUuCithcm0sIGFybWViLCBtaXBzLCBtaXBzNjQsIGV0Yy4gIFRoaXMgdmFsdWUgaXMgdXNlZCBieSBiaXRiYWtlIHRvIHNldHVwCitjb25maWd1cmUuIFRVTkVfQVJDSCBkZWZpbml0aW9ucyBhcmUgc3BlY2lmaWMgdG8gYSBnaXZlbiBhcmNoaXRlY3R1cmUuCitUaGV5IG1heSBiZSBhIHNpbmdsZSBzdGF0aWMgZGVmaW5pdGlvbiwgb3IgbWF5IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkLgorU2VlIGVhY2ggYXJjaGl0ZWN0dXJlJ3MgUkVBRE1FIGZvciBkZXRhaWxzIGZvciB0aGF0IENQVSBmYW1pbHkuCisKK1RVTkVfUEtHQVJDSCAtIFRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSB1c2VkIGJ5IHRoZSBwYWNrYWdpbmcgc3lzdGVtcyB0bworZGVmaW5lIHRoZSBhcmNoaXRlY3R1cmUsIGFiaSBhbmQgdHVuaW5nIG9mIGEgcGFydGljdWxhciBwYWNrYWdlLgorU2ltaWxhcmx5IHRvIFRVTkVfQVJDSCwgdGhlIGRlZmluaXRpb24gb2YgVFVORV9QS0dBUkNIIGlzIHNwZWNpZmljIHRvCitlYWNoIGFyY2hpdGVjdHVyZS4gU2VlIGVhY2ggYXJjaGl0ZWN0dXJlcyBSRUFETUUgZm9yIGRldGFpbHMgZm9yIHRoYXQKK0NQVSBmYW1pbHkuCisKK1BBQ0tBR0VfRVhUUkFfQVJDSFMgLSBMaXN0cyBhbGwgcnVudGltZSBjb21wYXRpYmxlIHBhY2thZ2UKK2FyY2hpdGVjdHVyZXMuICBCeSBkZWZhdWx0IHRoaXMgaXMgZXF1YWwgdG8KK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS08dHVuZT4uICBJZiBhbiBhcmNoaXRlY3R1cmUgZGV2aWF0ZXMgZnJvbSB0aGUKK2RlZmF1bHQgaXQgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZSBSRUFETUUuCisKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS08dHVuZT4gLSBMaXN0IGFsbCBvZiB0aGUgcGFja2FnZSBhcmNoaXRlY3R1cmVzCit0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBzcGVjaWZpYyB0dW5lLiAgVGhlIHBhY2thZ2UgYXJjaCBvZiB0aGlzCit0dW5lIG11c3QgYmUgaW4gdGhlIGxpc3QuCisKK1RBUkdFVF9GUFUgLSBUaGUgRlBVIHNldHRpbmcgZm9yIGEgZ2l2ZW4gdHVuZSwgaGFyZCAoZ2VuZXJhdGUgZmxvYXRpbmcKK3BvaW50IGluc3RydWN0aW9ucyksIHNvZnQgKGdlbmVyYXRlIGludGVybmFsIGdjYyBjYWxscyksICJvdGhlciIKK2FyY2hpdGVjdHVyZSBzcGVjaWZpYyBmbG9hdGluZyBwb2ludC4gIFRoaXMgaXMgc3luY2hyb25pemVkIHdpdGggdGhlCitjb21waWxlciBhbmQgb3RoZXIgdG9vbGNoYWluIGl0ZW1zLiAgVGhpcyBzaG91bGQgYmUgZHluYW1pY2FsbHkKK2NvbmZpZ3VyZWQgaW4gdGhlIHNhbWUgd2F5IHRoYXQgVFVORV9DQ0FSR1MgaXMuCisKK0JBU0VfTElCX3R1bmUtPHR1bmU+IC0gVGhlICIvbGliIiBsb2NhdGlvbiBmb3IgYSBzcGVjaWZpYyBBQkkuICBUaGlzIGlzCit1c2VkIGluIGEgbXVsdGlsaWIgY29uZmlndXJhdGlvbiB0byBwbGFjZSB0aGUgbGlicmFyaWVzIGluIHRoZSBjb3JyZWN0LAorbm9uLWNvbmZsaWN0aW5nIGxvY2F0aW9ucy4KKworCitCZXN0IFByYWN0aWNlCis9PT09PT09PT09PT09CitUaGUgdHVuZSBpbmZyYXN0cnVjdHVyZSBpcyBkZXNpZ25lZCB0byBiZSBoaWVyYXJjaGljYWwuIFdoZW4gd3JpdGluZyBhCituZXcgdHVuZSBmaWxlIGZvciBhICJmYXN0LWZvcndhcmQiIENQVSBhcmNoaXRlY3R1cmUgKG9uZSB0aGF0IHN1cHBvcnRzCitldmVyeXRoaW5nIGZyb20gYSBwcmV2aW91cyBnZW5lcmF0aW9uKSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gcmVxdWlyZSB0aGUKK3ByZXZpb3VzIGdlbmVyYXRpb24gdHVuZSBmaWxlIGFuZCBzcGVjaWZ5IFBBQ0tBR0VfRVhUUkFfQVJDSFMgdXNpbmcgdGhlCitwcmV2aW91cyBnZW5lcmF0aW9uJ3Mgb3ZlcnJpZGUgYW5kIGFwcGVuZGluZyB0aGUgbmV3IHR1bmUuIE5vdGUgdGhhdAorb25seSBvbmUgcHJldmlvdXMgdHVuZSBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCB0byBhdm9pZCBtdXRpcGxlIGluY2x1ZGVzCitvZiB0aGUgYmFzZSBhcmNoIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBicm9rZW4gY29uZmlndXJhdGlvbiBkdWUgdG8KK211bHRpcGxlIHByZXBlbmQgYW5kIGFwcGVuZCBhc3NpZ25tZW50cy4KKworRm9yIGV4YW1wbGUsIGZvciB4ODYsIHRoZXJlIGlzIGEgY29tbW9uIHg4Ni9hcmNoLXg4Ni5pbmMgd2hpY2ggaXMKK2luY2x1ZGVkIGluIHRoZSBiYXNlIGk1ODYgdHVuZSBmaWxlLiBUaGUgY29yZTIgdHVuZSBidWlsZHMKK29uIHRoYXQsIGFuZCBjb3JlaTcgYnVpbGRzIG9uIGNvcmUyLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYmViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9SRUFETUUKQEAgLTAsMCArMSw0MCBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgUmV2aXNpb24KKworVGhlIEFSTSBhcmNoaXRlY3R1cmUgZGVmaW5pdGlvbnMgYXJlIHNwbGl0IGFtb25nIGEgbnVtYmVyIG9mIGZpbGVzLgorVGhlIHByaW1hcnkgZGVmaW5pdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUKK2FyY2gtYXJtLmluYyBmaWxlLgorCitUVU5FX0FSQ0ggaXMgc2V0IHRvIGVpdGhlciAiYXJtIiBvciAiYXJtZWIiIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUKK29mIHRoZSBleGlzdGVuY2Ugb2YgdGhlICJiaWdlbmRpYW4iIGZlYXR1cmUgaW4gYSBnaXZlbiB0dW5lLgorCitBIHNtYWxsIHNldCBvZiBBUk0gc3BlY2lmaWMgdmFyaWFibGVzIGhhdmUgYmVlbiBkZWZpbmVkIHRvIGFsbG93IAorVFVORV9QS0dBUkNIIHRvIGJlIGF1dG9tYXRpY2FsbHkgZGVmaW5lZC4gIE9wdGltaXplZCB0dW5pbmdzIG11c3QgTk9UIAorY2hhbmdlIHRoZSBkZWZpbml0b24gb2YgVFVORV9QS0dBUkNILiAgVFVORV9QS0dBQ0hfdHVuZS08dHVuZT4gd2lsbCBiZSAKK2lnbm9yZWQuICBUaGUgZm9ybWF0IG9mIHRoZSBwYWNrYWdlIGFyY2ggaXMgZW5mb3JjZWQgYnkgdGhlIFRVTkVfUEtHQVJDSAorZGVmYXVsdC4gIFRoZSBmb3JtYXQgbXVzdCBiZSBvZiB0aGUgZm9ybToKKzxhcm12ZXJzaW9uPlt0XVtlXVtoZl1bYl1bLXZmcF1bLW5lb25dCisKK1RVTkVfUEtHQVJDSCBpcyBkZWZpbmVkIGFzOgorJHtBUk1QS0dBUkNIfSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0ke0FSTVBLR1NGWF9FQUJJfSR7QVJNUEtHU0ZYX0VORElBTn0ke0FSTVBLR1NGWF9GUFV9CisKK0FSTVBLR0FSQ0ggLSBUaGlzIGlzIHRoZSBjb3JlIHBhY2thZ2UgYXJjaCBjb21wb25lbnQgc3BlY2lmaWVkIGJ5IGVhY2ggCit0dW5pbmcuICBUaGlzIGlzIHRoZSBwcmltYXJ5IGlkZW50aWZpZXIgb2YgYSB0dW5pbmcuICBVc3VhbCB2YWx1ZXMgYXJlOgorYXJtLCBhcm12NCwgYXJtdjUsIGFybXY2LCBhcm12N2EsIGV0Yy4KKworQVJNUEtHU0ZYX1RIVU1CIC0gVGhpcyBpcyB0aGUgdGh1bWIgc3BlY2lmaWMgc3VmZml4LiAgQ3VyZW50bHkgaXQgaXMgCitkZWZpbmVkIGluIGZlYXR1cmUtYXJtLXRodW1iLmluYy4KKworQVJNUEtHU0ZYX0RTUCAtIFRoaXMgaXMgdGhlIERTUCBzcGVjaWZpYyBzdWZmaXguICBDdXJyZW50bHkgdGhpcyBpcyBzZXQgCit0byAnZScgd2hlbiBvbiBhcm12NSBhbmQgdGhlIGRzcCBmZWF0dXJlIGlzIGVuYWJsZWQuCisKK0FSTVBLR1NGWF9FQUJJIC0gVGhpcyBpcyB0aGUgZWFiaSBzcGVjaWZpYyBzdWZmaXguICBUaGVyZSBhcmUgY3VycmVudGx5IAordHdvIGRlZmluZWQgQUJJcyBzcGVjaWZpY2VkLCBzdGFuZGFyZCBFQUJJIGFuZCBIYXJkIEZsb2F0IChWRlApIEVBQkkuICAKK1doZW4gdGhlIGNhbGxjb252ZW50aW9uLWhhcmQgaXMgZW5hYmxlZCwgImhmIiBpcyBzcGVjaWZpZWQsIG90aGVyd2lzZSBpdCAKK2lzIGJsYW5rLgorCitBUk1QS0dTRlhfRU5ESUFOIC0gVGhpcyBpcyB0aGUgZW5kaWFuIHNwZWNpZmljIHN1ZmZpeC4gIEl0IGlzIGRlZmluZWQgaW4gCit0aGUgY29yZSBhcmNoLWFybS5pbmMgZmlsZS4KKworQVJNUEtHU0ZYX0ZQVSAtIFRoaXMgaXMgdGhlIEZQVSBzcGVjaWZpYyBzdWZmaXguICBUaGUgc3VmZml4IGluZGljYXRlcyAKK3NwZWNpZmljIEZQVSBvcHRpbWl6YXRpb25zLiAgJ3ZmcCcgYW5kICduZW9uJyBhcmUgYm90aCBkZWZpbmVkLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYjgwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybS5pbmMKQEAgLTAsMCArMSwxNyBAQAorCitUVU5FVkFMSURbYmlnZW5kaWFuXSA9ICJFbmFibGUgYmlnLWVuZGlhbiBtb2RlLiIKKworQVJNUEtHQVJDSCA9ICIke0FSTVBLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitBUk1QS0dTRlhfRU5ESUFOID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICJiIiwgIiIsIGQpfSIKK0FSTVBLR1NGWF9GUFUgPz89ICIiCitBUk1QS0dTRlhfRFNQID8/PSAiIgorQVJNUEtHU0ZYX0VBQkkgPz89ICIiCitBUk1QS0dTRlhfVEhVTUIgPz89ICIiCisKK1RVTkVfQVJDSCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiYXJtZWIiLCAiYXJtIiwgZCl9IgorVFVORV9QS0dBUkNIID0gIiR7QVJNUEtHQVJDSH0ke0FSTVBLR1NGWF9USFVNQn0ke0FSTVBLR1NGWF9EU1B9JHtBUk1QS0dTRlhfRUFCSX0ke0FSTVBLR1NGWF9FTkRJQU59JHtBUk1QS0dTRlhfRlBVfSIKKworQUJJRVhURU5TSU9OID0gImVhYmkiCisKK1RBUkdFVF9GUFUgPSAiJHtAZC5nZXRWYXIoJ0FSTVBLR1NGWF9GUFUnLCBUcnVlKS5zdHJpcCgnLScpIG9yICdzb2Z0J30iCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm02NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3NmI4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhYXJjaDY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2FhcmNoNjRdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIGFhcmNoNjQiCisKK01BQ0hJTkVPVkVSUklERVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiOmFhcmNoNjQiLCAiIiAsZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJhYXJjaDY0IGFhcmNoNjRfYmUiCitBUk1QS0dBUkNIX3R1bmUtYWFyY2g2NCA/PSAiYWFyY2g2NCIKK0FSTVBLR0FSQ0hfdHVuZS1hYXJjaDY0X2JlID89ICJhYXJjaDY0X2JlIgorVFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjQgPz0gImFhcmNoNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYWFyY2g2NF9iZSA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYWFyY2g2NH0gYmlnZW5kaWFuIgorQkFTRV9MSUJfdHVuZS1hYXJjaDY0ID0gImxpYjY0IgorQkFTRV9MSUJfdHVuZS1hYXJjaDY0X2JlID0gImxpYjY0IgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYWFyY2g2NCA9ICJhYXJjaDY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFhcmNoNjRfYmUgPSAiYWFyY2g2NF9iZSIKKworQVJNUEtHU0ZYX0VORElBTl82NCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiX2JlIiwgIiIsIGQpfSIKK1RVTkVfQVJDSF82NCA9ICJhYXJjaDY0JHtBUk1QS0dTRlhfRU5ESUFOXzY0fSIKK1RVTkVfUEtHQVJDSF82NCA9ICJhYXJjaDY0JHtBUk1QS0dTRlhfRU5ESUFOXzY0fSIKK0FCSUVYVEVOU0lPTl82NCA9ICIiCitUQVJHRVRfRlBVXzY0ID0gIiIKKworIyBEdXBsaWNhdGVkIGZyb20gYXJjaC1hcm0uaW5jCitUVU5FX0FSQ0hfMzIgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgImFybWViIiwgImFybSIsIGQpfSIKK1RVTkVfUEtHQVJDSF8zMiA9ICIke0FSTVBLR0FSQ0h9JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSR7QVJNUEtHU0ZYX0VBQkl9JHtBUk1QS0dTRlhfRU5ESUFOfSR7QVJNUEtHU0ZYX0ZQVX0iCitBQklFWFRFTlNJT05fMzIgPSAiZWFiaSIKK1RBUkdFVF9GUFVfMzIgPSAiJHtAZC5nZXRWYXIoJ0FSTVBLR1NGWF9GUFUnLCBUcnVlKS5zdHJpcCgnLScpIG9yICdzb2Z0J30iCisKK1RVTkVfQVJDSCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIiR7VFVORV9BUkNIXzY0fSIsICIke1RVTkVfQVJDSF8zMn0iICxkKX0iCitUVU5FX1BLR0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke1RVTkVfUEtHQVJDSF82NH0iLCAiJHtUVU5FX1BLR0FSQ0hfMzJ9IiAsZCl9IgorQUJJRVhURU5TSU9OID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtBQklFWFRFTlNJT05fNjR9IiwgIiR7QUJJRVhURU5TSU9OXzMyfSIgLGQpfSIKK1RBUkdFVF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke1RBUkdFVF9GUFVfNjR9IiwgIiR7VEFSR0VUX0ZQVV8zMn0iICxkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzA3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYwpAQCAtMCwwICsxLDM0IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjQiCisKK1RVTkVWQUxJRFthcm1dID0gIkVuYWJsZSBBUk0gaW5zdHJ1Y3Rpb24gc2V0IgorVFVORVZBTElEW2FybXY0XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBBUk12NCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NCIsICIgLW1hcmNoPWFybXY0JHtBUk1QS0dTRlhfVEhVTUJ9IiwgIiIsIGQpfSIKKyMgZW5hYmxlIC0tZml4LXY0Ynggd2hlbiB3ZSBoYXZlIGFybXY0IGluIFRVTkVfRkVBVFVSRVMsIGJ1dCB0aGVuIGRpc2FibGUgaXQgd2hlbiB3ZSBoYXZlIGFsc28gYXJtdjUgb3IgdGh1bWIKKyMgbWF5YmUgd2Ugc2hvdWxkIGV4dGVuZCBiYi51dGlscy5jb250YWlucyB0byBzdXBwb3J0IGNoZWNrIGZvciBhbnkgY2hlY2t2YWx1ZXMgaW4gdmFsdWUsIG5vdyBpdCBkb2VzIAorIyBjaGVja3ZhbHVlcy5pc3N1YnNldCh2YWwpIHdoaWNoIGNhbm5vdCBiZSB1c2VkIGZvciBuZWdhdGl2ZSB0ZXN0IG9mIGZvbyBuZWl0aGVyIGJhciBpbiB2YWx1ZQorRklYX1Y0QlhfQVJNVjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjQiLCAiLS1maXgtdjRieCIsICIiLCBkKX0iCitGSVhfVjRCWF9BUk1WNSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NSIsICIiLCAiJHtGSVhfVjRCWF9BUk1WNH0iLCBkKX0iCitGSVhfVjRCWCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ0aHVtYiIsICIiLCAiJHtGSVhfVjRCWF9BUk1WNX0iLCBkKX0iCitUQVJHRVRfTERfS0VSTkVMX0FSQ0ggKz0gIiR7RklYX1Y0Qlh9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjQiLCAiYXJtdjQ6IiwgIiIgLGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKKworIyBMaXR0bGUgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NCBhcm12NHQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjQgPz0gImFybXY0IgorQVJNUEtHQVJDSF90dW5lLWFybXY0dCA/PSAiYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjQgPz0gImFybSBhcm12NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0fSB0aHVtYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NCA9ICJhcm0gYXJtdjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0fSBhcm12NHQiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjRiIGFybXY0dGIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjRiID89ICJhcm12NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NHRiID89ICJhcm12NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0fSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjRiID0gImFybWViIGFybXY0YiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHRiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0Yn0gYXJtdjR0YiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRhNjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCkBAIC0wLDAgKzEsNTIgQEAKK0FSTVBLR1NGWF9EU1AgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJhcm12NSIsICJkc3AiIF0sICJlIiwgIiIsIGQpfSIKK1RVTkVWQUxJRFtkc3BdID0gIkFSTSBEU1AgZnVuY3Rpb25hbGl0eSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMKKworIyBMaXR0bGUgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NWUgYXJtdjV0ZSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWUgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGUgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZSA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IGRzcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXR9IGRzcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV9IGFybXY1ZSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dH0gYXJtdjVlIGFybXY1dGUiCisKKyMgTGl0dGxlIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1ZS12ZnAgYXJtdjV0ZS12ZnAgYXJtdjVlaGYtdmZwIGFybXY1dGVoZi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWhmLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZWhmLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZS12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGV9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZS12ZnB9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZS12ZnB9IGNhbGxjb252ZW50aW9uLWhhcmQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NS12ZnB9IGFybXY1ZSBhcm12NWUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGUtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dC12ZnB9IGFybXY1ZSBhcm12NXRlIGFybXY1ZS12ZnAgYXJtdjV0ZS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGYtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGYtdmZwfSBhcm12NWVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZi12ZnB9IGFybXY1ZWhmLXZmcCBhcm12NXRlaGYtdmZwIgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY1ZWIgYXJtdjV0ZWIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlYiA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZWIgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZX0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGViID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWJ9IGFybXY1ZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yn0gYXJtdjVlYiBhcm12NXRlYiIKKworIyBCaWcgRW5kaWFuICsgVkZQL0RTUAorQVZBSUxUVU5FUyArPSAiYXJtdjVlYi12ZnAgYXJtdjV0ZWItdmZwIGFybXY1ZWhmYi12ZnAgYXJtdjV0ZWhmYi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGViLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlaGZiLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZWhmYi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWhmYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWhmLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGVoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlaGYtdmZwfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViLXZmcH0gYXJtdjVlYiBhcm12NWViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yi12ZnB9IGFybXY1ZWIgYXJtdjV0ZWIgYXJtdjVlYi12ZnAgYXJtdjV0ZWItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmYi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVoZmItdmZwfSBhcm12NWVoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZmItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmYi12ZnB9IGFybXY1ZWhmYi12ZnAgYXJtdjV0ZWhmYi12ZnAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjY2VhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYwpAQCAtMCwwICsxLDYwIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjUiCisKK1RVTkVWQUxJRFthcm12NV0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjUiCitUVU5FQ09ORkxJQ1RTW2FybXY1XSA9ICJhcm12NCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NSIsICIgLW1hcmNoPWFybXY1JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSIsICIiLCBkKX0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NSIsICJhcm12NToiLCAiIiAsZCl9IgorCitBUk1QS0dTRlhfRFNQID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiYXJtdjUiLCAiZHNwIiBdLCAiZSIsICIiLCBkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjUgYXJtdjV0IgorQVJNUEtHQVJDSF90dW5lLWFybXY1ID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXQgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ID89ICJhcm0gYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NX0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR9IGFybXY1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGFybXY1IGFybXY1dCIKKworIyBMaXR0bGUgRW5kaWFuICsgVkZQL0RTUAorQVZBSUxUVU5FUyArPSAiYXJtdjUtdmZwIGFybXY1dC12ZnAgYXJtdjVoZi12ZnAgYXJtdjV0aGYtdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1LXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0LXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVoZi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGhmLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NX0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dC12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dH0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1aGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NS12ZnB9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXQtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1LXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NX0gYXJtdjUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dC12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0fSBhcm12NS12ZnAgYXJtdjV0LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmLXZmcCA9ICJhcm12NWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZi12ZnAgPSAiYXJtdjVoZi12ZnAgYXJtdjV0aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwfSBhcm12NWVoZi12ZnAgYXJtdjV0ZWhmLXZmcCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NWIgYXJtdjV0YiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWIgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGIgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXR9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjRifSBhcm12NWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHRifSBhcm12NWIgYXJtdjV0YiIKKworIyBCaWcgRW5kaWFuICsgVkZQL0RTUAorQVZBSUxUVU5FUyArPSAiYXJtdjViLXZmcCBhcm12NXRiLXZmcCBhcm12NWhmYi12ZnAgYXJtdjV0aGZiLXZmcCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRiLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVoZmItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRoZmItdmZwID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NS12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0LXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1aGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVoZi12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRoZi12ZnB9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1Yn0gYXJtdjViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRiLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRifSBhcm12NWItdmZwIGFybXY1dGItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGZiLXZmcCA9ICJhcm12NWhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGZiLXZmcCA9ICJhcm12NWhmYi12ZnAgYXJtdjV0aGZiLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwYzViZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jCkBAIC0wLDAgKzEsNTAgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NiIKKworVFVORVZBTElEW2FybXY2XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBBUk12NiIKK1RVTkVDT05GTElDVFNbYXJtdjZdID0gImFybXY0IGFybXY1IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY2IiwgIiAtbWFyY2g9YXJtdjYiLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjYiLCAiYXJtdjY6IiwgIiIgLGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjYtbm92ZnAgYXJtdjZ0LW5vdmZwIGFybXY2IGFybXY2dCBhcm12NmhmIGFybXY2dGhmIgorQVJNUEtHQVJDSF90dW5lLWFybXY2LW5vdmZwID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnQtbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2ID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnQgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2aGYgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGhmID89ICJhcm12NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcCA/PSAiYXJtIGFybXY2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnB9IHRodW1iIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcH0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0LW5vdmZwfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12Ni1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWV9IGFybXY2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dC1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSBhcm12NiBhcm12NnQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlLXZmcH0gYXJtdjYgYXJtdjYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlLXZmcH0gYXJtdjYgYXJtdjZ0IGFybXY2LXZmcCBhcm12NnQtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGYtdmZwfSBhcm12NmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGYtdmZwfSBhcm12NmhmLXZmcCBhcm12NnRoZi12ZnAiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjZiLW5vdmZwIGFybXY2dGItbm92ZnAgYXJtdjZiIGFybXY2dGIgYXJtdjZoZmIgYXJtdjZ0aGZiIgorQVJNUEtHQVJDSF90dW5lLWFybXY2Yi1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0Yi1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZiID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnRiID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmhmYiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0aGZiID89ICJhcm12NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmItbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2LW5vdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0Yi1ub3ZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0LW5vdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Nn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2aGZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0aGZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRoZn0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2Yi1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVifSBhcm12NmIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0Yi1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYn0gYXJtdjZiIGFybXY2dGIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWItdmZwfSBhcm12NmIgYXJtdjZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGViLXZmcH0gYXJtdjZiIGFybXY2dGIgYXJtdjZiLXZmcCBhcm12NnRiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVoZmItdmZwfSBhcm12NmhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZmItdmZwfSBhcm12NmhmYi12ZnAgYXJtdjZ0aGZiLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I2ZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCkBAIC0wLDAgKzEsMTIzIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhIgorCitUVU5FVkFMSURbYXJtdjdhXSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBBUk12Ny1hIgorVFVORUNPTkZMSUNUU1thcm12N2FdID0gImFybXY0IGFybXY1IGFybXY2IGFybXY3IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3YSIsICIgLW1hcmNoPWFybXY3LWEiLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdhIiwgImFybXY3YToiLCAiIiAsZCl9IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tbmVvbi5pbmMKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiYXJtdjdhIGFybXY3YXQgYXJtdjdhLXZmcHYzZDE2IGFybXY3YXQtdmZwdjNkMTYgYXJtdjdhLXZmcHYzIGFybXY3YXQtdmZwdjMgYXJtdjdhLW5lb24gYXJtdjdhdC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YSA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXQgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EtdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YS1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0LW5lb24gPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EgPz0gImFybSBhcm12N2EgdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gdGh1bWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IHZmcHYzZDE2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IHZmcHYzZDE2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzZDE2fSB2ZnB2MyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSB2ZnB2MyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBuZW9uIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ9IGFybXY3YSBhcm12N2EtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGFybXY3YS12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS12ZnB2M2QxNn0gYXJtdjdhLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGFybXY3YS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dH0gYXJtdjdhIGFybXY3YS12ZnAgYXJtdjdhdDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdhLXZmcC12ZnB2M2QxNiBhcm12N2F0Mi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSBhcm12N2EtdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdhLXZmcC1uZW9uIGFybXY3YXQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiYXJtdjdhaGYgYXJtdjdhdGhmIGFybXY3YWhmLXZmcHYzZDE2IGFybXY3YXRoZi12ZnB2M2QxNiBhcm12N2FoZi12ZnB2MyBhcm12N2F0aGYtdmZwdjMgYXJtdjdhaGYtbmVvbiBhcm12N2F0aGYtbmVvbiBhcm12N2FoZi1uZW9uLXZmcHY0IGFybXY3YXRoZi1uZW9uLXZmcHY0IgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLW5lb24/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZi1uZW9uID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NCA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0ID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNn0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjNkMTZ9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M30gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjN9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9uLXZmcHY0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSB2ZnB2NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IHZmcHY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2aGZ9IGFybXY3YWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGZ9IGFybXY3YWhmLXZmcCBhcm12N2F0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gYXJtdjdhaGYtdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNiBhcm12N2F0MmhmLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNn0gYXJtdjdhaGYtdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0MmhmLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBhcm12N2FoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGFybXY3YWhmLXZmcC1uZW9uIGFybXY3YXQyaGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBhcm12N2FoZi12ZnAtbmVvbi12ZnB2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gYXJtdjdhaGYtdmZwLW5lb24tdmZwdjQgYXJtdjdhdDJoZi12ZnAtbmVvbi12ZnB2NCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12N2FiIGFybXY3YXRiIGFybXY3YWItdmZwdjNkMTYgYXJtdjdhdGItdmZwdjNkMTYgYXJtdjdhYi12ZnB2MyBhcm12N2F0Yi12ZnB2MyBhcm12N2FiLW5lb24gYXJtdjdhdGItbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGIgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGItdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiLW5lb24/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLW5lb24gPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmJ9IGFybXY3YWItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGJ9IGFybXY3YWItdmZwIGFybXY3YXQyYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FifSBhcm12N2FiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FifSBhcm12N2FiLXZmcC12ZnB2M2QxNiBhcm12N2F0MmItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi12ZnB2M2QxNn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi12ZnB2M2QxNn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYtdmZwdjMgYXJtdjdhdDJiLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRifSBhcm12N2FiLXZmcC1uZW9uIGFybXY3YXQyYi12ZnAtbmVvbiIKKworIyBCaWcgRW5kaWFuICsgVkZQCitBVkFJTFRVTkVTICs9ICJhcm12N2FoZmIgYXJtdjdhdGhmYiBhcm12N2FoZmItdmZwdjNkMTYgYXJtdjdhdGhmYi12ZnB2M2QxNiBhcm12N2FoZmItdmZwdjMgYXJtdjdhdGhmYi12ZnB2MyBhcm12N2FoZmItbmVvbiBhcm12N2F0aGZiLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZmItdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiLW5lb24/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmItbmVvbiA/PSAiYXJtdjdhIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzZDE2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmYn0gYXJtdjdhaGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmYn0gYXJtdjdhaGZiLXZmcCBhcm12N2F0MmhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYn0gYXJtdjdhaGZiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmJ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJoZmItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItdmZwdjNkMTZ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2fSBhcm12N2FoZmItdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyaGZiLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmJ9IGFybXY3YWhmYi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYn0gYXJtdjdhaGZiLXZmcC1uZW9uIGFybXY3YXQyaGZiLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTgzMmZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm02NC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tbmVvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMmI4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jCkBAIC0wLDAgKzEsMyBAQAorVFVORVZBTElEW25lb25dID0gIkVuYWJsZSBOZW9uIFNJTUQgYWNjZWxlcmF0b3IgdW5pdC4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsIGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHY0IiwgIiAtbWZwdT1uZW9uLXZmcHY0IiwgIiAtbWZwdT1uZW9uIiwgZCksICIiICwgZCl9IgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItbmVvbiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMjE3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXRodW1iLmluYwpAQCAtMCwwICsxLDQ5IEBACisjIFRoZSBpbnN0cnVjdGlvbiBzZXQgdGhlIGNvbXBpbGVyIHNob3VsZCB1c2Ugd2hlbiBnZW5lcmF0aW5nIGFwcGxpY2F0aW9uCisjIGNvZGUuIFRoZSBrZXJuZWwgaXMgYWx3YXlzIGNvbXBpbGVkIHdpdGggYXJtIGNvZGUgYXQgcHJlc2VudC4gYXJtIGNvZGUKKyMgaXMgdGhlIG9yaWdpbmFsIDMyIGJpdCBBUk0gaW5zdHJ1Y3Rpb24gc2V0LCB0aHVtYiBjb2RlIGlzIHRoZSAxNiBiaXQKKyMgZW5jb2RlZCBSSVNDIHN1Yi1zZXQuIFRodW1iIGNvZGUgaXMgc21hbGxlciAobWF5YmUgNzAlIG9mIHRoZSBBUk0gc2l6ZSkKKyMgYnV0IHJlcXVpcmVzIG1vcmUgaW5zdHJ1Y3Rpb25zICgxNDAlIGZvciA3MCUgc21hbGxlciBjb2RlKSBzbyBtYXkgYmUKKyMgc2xvd2VyLgorVFVORVZBTElEW3RodW1iXSA9ICJVc2UgdGh1bWIgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YgQVJNIgorQVJNX1RIVU1CX09QVCA9ICIke0BbJ2FybScsICd0aHVtYiddW2QuZ2V0VmFyKCdBUk1fSU5TVFJVQ1RJT05fU0VUJywgVHJ1ZSkgPT0gJ3RodW1iJ119IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjQnLCAgJ3QnLCAgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY1JywgICd0JywgICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12NicsICAndCcsICAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjdhJywgJ3QyJywgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY3cicsICd0MicsICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12N20nLCAndDInLCAnJywgZCl9IgorCisjIElmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgQVJNLCB0aGVuIHJlc3BlY3QgQVJNX1RIVU1CX09QVCAod2hpY2ggY2FuIGJlICJhcm0iIG9yICJ0aHVtYiIpCisjIElmIHRoZSBkZWZpY2UgZG9lc24ndCBzdXBwb3J0IEFSTSwgdGhlbiBhbHdheXMgc2V0ICJ0aHVtYiIgZXZlbiB3aGVuCisjIHNvbWUgcmVjaXBlIGV4cGxpY2l0bHkgc2V0cyBBUk1fSU5TVFJVQ1RJT05fU0VUIHRvICJhcm0iCitBUk1fTV9PUFQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtJywgJyR7QVJNX1RIVU1CX09QVH0nLCAndGh1bWInLCBkKX0iCitweXRob24gKCkgeworICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJ0ZhbHNlJywgJ1RydWUnLCBkKToKKyAgICAgICAgcmV0dXJuCisgICAgc2VsZWN0ZWQgPSBkLmdldFZhcignQVJNX0lOU1RSVUNUSU9OX1NFVCcsIFRydWUpCisgICAgaWYgc2VsZWN0ZWQgPT0gTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgdXNlZCA9IGQuZ2V0VmFyKCdBUk1fTV9PUFQnLCBUcnVlKQorICAgIGlmIHNlbGVjdGVkICE9IHVzZWQ6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgYmIud2FybigiUmVjaXBlICclcycgc2VsZWN0cyBBUk1fSU5TVFJVQ1RJT05fU0VUIHRvIGJlICclcycsIGJ1dCB0dW5lIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzIGl0IHRvICclcyciICUgKHBuLCBzZWxlY3RlZCwgdXNlZCkpCit9CisKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcgLW0ke0FSTV9NX09QVH0nLCAnJywgZCl9IgorT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICc6dGh1bWInLCAnJywgZCl9IgorCisjIEFkZCBzdWZmaXggZnJvbSBBUk1fVEhVTUJfU1VGRklYIG9ubHkgaWYgYWZ0ZXIgYWxsIHRoaXMgd2Ugc3RpbGwgc2V0IEFSTV9NX09QVCB0byB0aHVtYgorQVJNUEtHU0ZYX1RIVU1CIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcke0FSTV9USFVNQl9TVUZGSVh9JywgJycsIGQpIGlmIGQuZ2V0VmFyKCdBUk1fTV9PUFQnLCBUcnVlKSA9PSAndGh1bWInIGVsc2UgJyd9IgorCisjIFdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIGNvZGUgdG8gYWxsb3cgaW50ZXJ3b3JraW5nIGJldHdlZW4gdGhlIHR3bworIyBpbnN0cnVjdGlvbiBzZXRzLiBUaGlzIGFsbG93cyB0aHVtYiBjb2RlIHRvIGJlIGV4ZWN1dGVkIG9uIGEgcHJpbWFyaWx5CisjIGFybSBzeXN0ZW0gYW5kIHZpY2UgdmVyc2EuIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgRElTVFJPcyBub3QKKyMgdHVybiB0aGlzIG9mZiAtIHRoZSBhY3R1YWwgY29zdCBpcyB2ZXJ5IHNtYWxsLgorVFVORVZBTElEW25vLXRodW1iLWludGVyd29ya10gPSAiRGlzYWJsZSBtaXhpbmcgb2YgdGh1bWIgYW5kIEFSTSBmdW5jdGlvbnMiCitUSFVNQl9UVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbm8tdGh1bWItaW50ZXJ3b3JrJywgJyAtbW5vLXRodW1iLWludGVyd29yaycsICcgLW10aHVtYi1pbnRlcndvcmsnLCBkKX0iCitUSFVNQl9PVkVSUklERVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ25vLXRodW1iLWludGVyd29yaycsICc6dGh1bWItaW50ZXJ3b3JrJywgJycsIGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcgJHtUSFVNQl9UVU5FX0NDQVJHU30nLCAnJywgZCl9IgorT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcke1RIVU1CX09WRVJSSURFU30nLCAnJywgZCl9IgorCisjIHdoYXQgYWJvdXQgYXJtdjdtIGRldmljZXMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCAtbWFybSAoZS5nLiBDb3J0ZXgtTTMpPworVEFSR0VUX0NDX0tFUk5FTF9BUkNIICs9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICctbW5vLXRodW1iLWludGVyd29yayAtbWFybScsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGZiZWFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYwpAQCAtMCwwICsxLDE3IEBACitUVU5FVkFMSURbdmZwXSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50ICh2ZnApIHVuaXQuIgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwIiwgIi12ZnAiLCAiIiAsZCl9IgorCitUVU5FVkFMSURbdmZwdjNkMTZdID0gIkVuYWJsZSBWZWN0b3IgRmxvYXRpbmcgUG9pbnQgVmVyc2lvbiAzIHdpdGggMTYgcmVnaXN0ZXJzICh2ZnB2My1kMTYpIHVuaXQuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzZDE2IiwgIiAtbWZwdT12ZnB2My1kMTYiLCAiIiwgZCl9IgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjNkMTYiLCAiLXZmcHYzZDE2IiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHYzXSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gMyB3aXRoIDMyIHJlZ2lzdGVycyAodmZwdjMpIHVuaXQuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzIiwgIiAtbWZwdT12ZnB2MyIsICIiLCBkKX0iCitBUk1QS0dTRlhfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2MyIsICItdmZwdjMiLCAiIiAsZCl9IgorCitUVU5FVkFMSURbdmZwdjRdID0gIkVuYWJsZSBWZWN0b3IgRmxvYXRpbmcgUG9pbnQgVmVyc2lvbiA0ICh2ZnB2NCkgdW5pdC4iCitBUk1QS0dTRlhfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2NCIsICItdmZwdjQiLCAiIiAsZCl9IgorCitUVU5FVkFMSURbY2FsbGNvbnZlbnRpb24taGFyZF0gPSAiRW5hYmxlIEVBQkkgaGFyZCBmbG9hdCBjYWxsIGNvbnZlbnRpb24sIHJlcXVpcmVzIFZGUC4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwIiwgYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY2FsbGNvbnZlbnRpb24taGFyZCIsICIgLW1mbG9hdC1hYmk9aGFyZCIsICIgLW1mbG9hdC1hYmk9c29mdGZwIiwgZCksICIiICxkKX0iCitBUk1QS0dTRlhfRUFCSSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJjYWxsY29udmVudGlvbi1oYXJkIiwgInZmcCIgXSwgImhmIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9SRUFETUUgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCkBAIC0wLDAgKzEsMzYgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgIC0gSW5pdGlhbCBWZXJzaW9uCisKK01JUFMgY3VycmVudGx5IGRlZmluZXMgMTIgQUJJcy4gIENvbWJpbmF0aW9ucyBvZjoKKyAqKSBCaWcvTGl0dGxlIEVuZGlhbgorICopIEhhcmR3YXJlL1NvZnR3YXJlIEZsb2F0aW5nIFBvaW50CisgKikgbzMyLCBuMzIsIG42NCBBQkkKKworVFVORV9BUkNILCB0aGUgR05VIGNhbm9uaWNhbCBhcmNoLCBpcyBkZWZpbmVkIGFzOgorCittaXBzJHtNSVBTUEtHU0ZYX0JZVEV9JHtNSVBTUEtHU0ZYX0VORElBTn0KKworVGhlIHBhY2thZ2UgYXJjaCBpcyBkZWZpbmVkIGluIHN1Y2ggYSB3YXkgdG8gZ2VuZXJhdGVkIGEgc3RhbmRhcmQgbmFtaW5nCitzY2hlbWUuICBUaGUgc2NoZW1lIGlzOiA8bWlwcyB2YXJpYW50PlstbmZdWy1uMzJdCisKK1RVTkVfUEtHQVJDSCBpcyBkZWZpbmVkIGFzOgorCiske01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLSR7REVGQVVMVFRVTkV9fSR7TUlQU1BLR1NGWF9GUFV9JHtNSVBTUEtHU0ZYX0FCSX0KKworVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgTUlQUyBzcGVjaWZpYyB2YXJpYWJsZXM6CisKK01JUFNQS0dTRlhfQllURSAtIFRoaXMgaXMgZGVmaW5lZCBhcyBlaXRoZXIgYmxhbmsgYW5kICI2NCIgZm9yIE1JUFM2NCBDUFVzLgorCitNSVBTUEtHU0ZYX0VORElBTiAtIEZvciBiaWdlbmRpYW4gaGFyZHdhcmUgdGhpcyBpcyBibGFuaywgb3RoZXJ3aXNlIGl0J3MKK2RlZmluZWQgYXMgImVsIi4KKworTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtPHR1bmU+IC0gSW4gdGhlIGRlZmF1bHQgdHVuaW5ncyBpdCBpcyBzZXQgdG8gdGhlCitzYW1lIHZhbHVlIGFzIFRVTkVfQVJDSC4gIEluIGN1c3RvbSwgb3B0aW1pemVkIHR1bmluZ3MsIHRoZSB2YWx1ZSBzaG91bGQKK2JlIG1vZGlmaWVkIHRvIG1vcmUgcHJlY2lzZWx5IGRlc2NyaWJlIHRoZSB0dW5pbmcuCisKK01JUFNQS0dTRlhfRlBVIC0gVGhlIHZhbHVlIGlzIHNldCB0byAiIiBvciAiLW5mIiwgd2hlcmUgIi1uZiIgaW5kaWNhdGVzIAordGhhdCB0aGUgdHVuZSBpcyB1c2luZyBhIG5vbi1mbG9hdGluZyBwb2ludCBBQkkuCisKK01JUFNQS0dTRlhfQUJJIC0gVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgQUJJIHdoZW4gdGhlIHByZXZpb3VzCit2YWx1ZXMgYXJlIG5vdCBlbm91Z2ggdG8gZGlzdHJpbmd1aXNoIHRoZSBwYWNrYWdlLiAgIi1uMzIiIGlzIGFkZGVkIHdoZW4KK2J1aWxkaW5nIGZvciBOMzIgQUJJLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYyNmQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMKQEAgLTAsMCArMSwxMDIgQEAKKyMgTUlQUyBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbgorIyAxMiBkZWZpbmVkIEFCSXMsIGFsbCBjb21iaW5hdGlvbnMgb2Y6CisjICopIEJpZy9MaXR0bGUgRW5kaWFuCisjICopIEhhcmR3YXJlL1NvZnR3YXJlIEZsb2F0aW5nIFBvaW50CisjICopIG8zMiwgbjMyLCBuNjQgQUJJCisKK0RFRkFVTFRUVU5FID89ICJtaXBzIgorCisjIEVuZGlhbmVzcworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlIGJpZy1lbmRpYW4gbW9kZSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiIC1tZWIiLCAiIC1tZWwiLCBkKX0iCisKKyMgQUJJIGZsYWdzCitUVU5FVkFMSURbbzMyXSA9ICJNSVBTIG8zMiBBQkkiCitUVU5FQ09ORkxJQ1RTW28zMl0gPSAibjMyIG42NCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvMzIiLCAiIC1tYWJpPTMyIiwgIiIsIGQpfSIKKworVFVORVZBTElEW24zMl0gPSAiTUlQUzY0IG4zMiBBQkkiCitUVU5FQ09ORkxJQ1RTW24zMl0gPSAibzMyIG42NCIKK0FCSUVYVEVOU0lPTiAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjMyIiwgIm4zMiIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjMyIiwgIiAtbWFiaT1uMzIiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbbjY0XSA9ICJNSVBTNjQgbjY0IEFCSSIKK1RVTkVDT05GTElDVFNbbjY0XSA9ICJvMzIgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm42NCIsICIgLW1hYmk9NjQiLCAiIiwgZCl9IgorCisjIEZsb2F0aW5nIHBvaW50CitUVU5FVkFMSURbZnB1LWhhcmRdID0gIlVzZSBoYXJkd2FyZSBGUFUiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiLCAiIC1taGFyZC1mbG9hdCIsICIgLW1zb2Z0LWZsb2F0IiwgZCl9IgorVEFSR0VUX0ZQVSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIsICIiLCAic29mdCIsIGQpfSIKKworIyBQYWNrYWdlIG5hbWluZworTUlQU1BLR1NGWF9FTkRJQU4gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIiIsICJlbCIsIGQpfSIKK01JUFNQS0dTRlhfQllURSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuNjQiICwgIjY0IiwgIiIsIGQpfSIKK01JUFNQS0dTRlhfQllURSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjMyIiAsICI2NCIsICIiLCBkKX0iCitNSVBTUEtHU0ZYX0ZQVSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIgLCAiIiwgIi1uZiIsIGQpfSIKK01JUFNQS0dTRlhfQUJJID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICItbjMyIiwgIiIsIGQpfSIKKworVFVORV9BUkNIID0gIm1pcHMke01JUFNQS0dTRlhfQllURX0ke01JUFNQS0dTRlhfRU5ESUFOfSIKK1RVTkVfUEtHQVJDSCA9ICIke01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLSR7REVGQVVMVFRVTkV9fSR7TUlQU1BLR1NGWF9GUFV9JHtNSVBTUEtHU0ZYX0FCSX0iCisKKyMgQmFzZSB0dW5lcworQVZBSUxUVU5FUyArPSAibWlwcyBtaXBzNjQtbjMyIG1pcHM2NCBtaXBzZWwgbWlwczY0ZWwtbjMyIG1pcHM2NGVsIG1pcHMtbmYgbWlwczY0LW5mLW4zMiBtaXBzNjQtbmYgbWlwc2VsLW5mIG1pcHM2NGVsLW5mLW4zMiBtaXBzNjRlbC1uZiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzID0gIm8zMiBiaWdlbmRpYW4gZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHMgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwcyA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwcyA9ICJtaXBzIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW4zMiA9ICJuMzIgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjQtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0LW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0LW4zMiA9ICJtaXBzNjQtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ID0gIm42NCBiaWdlbmRpYW4gZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHM2NCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NCA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ID0gIm1pcHM2NCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHNlbCA9ICJvMzIgZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHNlbCA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzZWwgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHNlbCA9ICJtaXBzZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRlbC1uMzIgPSAibjMyIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbC1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbC1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsLW4zMiA9ICJtaXBzNjRlbC1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRlbCA9ICJuNjQgZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsID0gIm1pcHM2NGVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcy1uZiA9ICJvMzIgYmlnZW5kaWFuIgorQkFTRV9MSUJfdHVuZS1taXBzLW5mID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMtbmYgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMtbmYgPSAibWlwcy1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uZi1uMzIgPSAibjMyIGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW5mLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NC1uZi1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1uZi1uMzIgPSAibWlwczY0LW5mLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uZiA9ICJuNjQgYmlnZW5kaWFuIgorQkFTRV9MSUJfdHVuZS1taXBzNjQtbmYgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQtbmYgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1uZiA9ICJtaXBzNjQtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwtbmYgPSAibzMyIgorQkFTRV9MSUJfdHVuZS1taXBzZWwtbmYgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwc2VsLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzZWwtbmYgPSAibWlwc2VsLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gIm4zMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbC1uZi1uMzIgPSAibWlwczY0ZWwtbmYtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbmYgPSAibjY0IgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbC1uZiA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbC1uZiA9ICJtaXBzNjRlbC1uZiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9SRUFETUUgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2ZiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvUkVBRE1FCkBAIC0wLDAgKzEsMTcgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgIC0gSW5pdGlhbCByZXZpc2lvbgorCitUaGVyZSBhcmUgNCBwcmltYXJ5IFBvd2VyUEMgQUJJcy4KKyMgKikgSGFyZC9Tb2Z0IEZsb2F0aW5nIFBvaW50CisjICopIDMyLWJpdC82NC1iaXQKKworVFVORV9BUkNIIGlzIGRlZmluZWQgYXMgZWl0aGVyICJwb3dlcnBjIiBvciAicG93ZXJwYzY0IiBiYXNlZCBvbiB0aGUgbTMyIAorb3IgbTY0IGZlYXR1cmUuCisKK01heSBvZiB0aGUgUG93ZXJQQyBwYWNrYWdlIGFyY2hpY3R1cmVzIGFyZSBiYXNlZCBvbiBsZWdhY3kgTGludXggbmFtZXMuCitIb3dldmVyLCBhIGdlbmVyYWwgbmFtaW5nIHNjaGVtZSBzaG91bGQgYmUgc2ltaWxhciB0bzogcHBjWzY0XVs8ZmFtaWx5Pl1bLW5mXS4KKyhOb3RlOiB0aGUgZGVmYXVsdCBwYWNrYWdlIGFyY2hpdGVjdHVyZXMgYXJlICJwb3dlcnBjIiBhbmQgInBvd2VycGM2NCIuKQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhcyBUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfS4gIEFsbCAKK1Bvd2VyUEMgdHVuaW5ncyBhcmUgcmVxdWlyZWQgdG8gZGVmaW5lIFRVTkVfUEtHQVJDSF90dW5lLTx0dW5lPi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzZjYTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKQEAgLTAsMCArMSwzNCBAQAorIyBQb3dlciBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbgorIyBGb3VyIGRlZmluZWQgQUJJcywgYWxsIGNvbWJpbmF0aW9ucyBvZjoKKyMgKikgSGFyZC9Tb2Z0IEZsb2F0aW5nIFBvaW50CisjICopIDMyLWJpdC82NC1iaXQKKworREVGQVVMVFRVTkUgPz0gInBvd2VycGMiCisKK1RVTkVfUEtHQVJDSCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKK0FCSUVYVEVOU0lPTiA/PSAiIgorCitUVU5FVkFMSURbbTMyXSA9ICJQb3dlciBFTEYzMiBzdGFuZGFyZCBBQkkiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIiAtbTMyIiwgIiIsIGQpfSIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgInBvd2VycGMiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbZnB1LWhhcmRdID0gIlVzZSBoYXJkd2FyZSBGUFUuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1oYXJkIiwgIiAtbWhhcmQtZmxvYXQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbZnB1LXNvZnRdID0gIlVzZSBzb2Z0d2FyZSBGUFUuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1zb2Z0IiwgIiAtbXNvZnQtZmxvYXQiLCAiIiwgZCl9IgorVEFSR0VUX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LXNvZnQiLCAic29mdCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFthbHRpdmVjXSA9ICJBbHRpdmVjIgorCisjIEJhc2ljIHR1bmUgZGVmaW5pdGlvbnMKK0FWQUlMVFVORVMgKz0gInBvd2VycGMgcG93ZXJwYy1uZiIgCitUVU5FX0ZFQVRVUkVTX3R1bmUtcG93ZXJwYy1uZiA9ICJtMzIgZnB1LXNvZnQiCitCQVNFX0xJQl90dW5lLXBvd2VycGMtbmYgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcG93ZXJwYy1uZiA9ICJwb3dlcnBjLW5mIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGMtbmYgPSAicG93ZXJwYy1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMgPSAibTMyIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1wb3dlcnBjID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBvd2VycGMgPSAicG93ZXJwYyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjID0gInBvd2VycGMiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDc2ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicG93ZXJwYzY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbbTY0XSA9ICJQb3dlciBFTEY2NCBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW202NF0gPSAibTMyIG5mIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICIgLW02NCIsICIiLCBkKX0iCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAibTY0IiBdLCAicG93ZXJwYzY0IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicG93ZXJwYzY0IgorVFVORV9GRUFUVVJFU190dW5lLXBvd2VycGM2NCA/PSAibTY0IGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1wb3dlcnBjNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wb3dlcnBjNjQgPSAicG93ZXJwYzY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NCA9ICJwb3dlcnBjNjQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMwYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwpAQCAtMCwwICsxLDI5IEBACitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9lZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCisKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1zd3Jhc3QnLCAnJywgZCl9IFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQiCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAiYWxzYSBibHVldG9vdGggdXNiZ2FkZ2V0IHNjcmVlbiIKKworTUFDSElORU9WRVJSSURFUyA9LiAicWVtdWFsbDoiCisKK0lNQUdFX0ZTVFlQRVMgKz0gInRhci5iejIgZXh0NCIKKworIyBEb24ndCBpbmNsdWRlIGtlcm5lbHMgaW4gc3RhbmRhcmQgaW1hZ2VzCitSREVQRU5EU19rZXJuZWwtYmFzZSA9ICIiCisKKyMgVXNlIGEgY29tbW9uIGtlcm5lbCByZWNpcGUgZm9yIGFsbCBRRU1VIG1hY2hpbmVzCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIKKworIyBQcm92aWRlIHRoZSBuZnMgc2VydmVyIGtlcm5lbCBtb2R1bGUgZm9yIGFsbCBxZW11IGltYWdlcworS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9wbi1saW51eC15b2N0byA9ICIgZmVhdHVyZXMvbmZzZC9uZnNkLWVuYWJsZS5zY2MiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL1JFQURNRSBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTFhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL1JFQURNRQpAQCAtMCwwICsxLDExIEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIC0gSW5pdGlhbCBSZXZpc2lvbgorCitCb3RoIGJpZyBlbmRpYW4gYW5kIGxpdHRsZSBlbmRpYW4gYXJlIGRlZmluZWQgZm9yIFNILgorCitFeHBlcmltZW50YWwgLS0gU0ggdHVuaW5ncyBoYXZlIG5vdCBiZWVuIHZhbGlkYXRlZC4KKworVGhlIFRVTkVfQVJDSCBpcyBkZWZpbmVkIGFzICR7VFVORV9BUkNIX3R1bmUtJHtERUZBVUxUVFVORX19LgorCitUaGUgVFVORV9QS0dBUkNIIGlzIGRlZmluZCBhcyAke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkNGNhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKQEAgLTAsMCArMSw5IEBACisjIFNIIEFyY2hpdGVjdHVyZSBkZWZpbml0aW9uCisKK0RFRkFVTFRUVU5FID89ICJzaCIKKworVFVORV9BUkNIID0gIiR7VFVORV9BUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorVFVORV9QS0dBUkNIID0gIiR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorCitUVU5FVkFMSURbYmlnZW5kaWFuXSA9ICJFbmFibGVkIGJpZy1lbmRpYW4gbW9kZS4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIiAtbWIiLCAiIC1tbCIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjA4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jCkBAIC0wLDAgKzEsMyBAQAorIyBBZGQgU09DX0ZBTUlMWSB0byBtYWNoaW5lIG92ZXJyaWRlcyBzbyB3ZSBnZXQgYWNjZXNzIHRvIGUuZy4gJ29tYXAzJyBhbmQgJ3RpMzM1eCcKK1NPQ19GQU1JTFkgPz89ICIiCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BbJycsICcke1NPQ19GQU1JTFl9OiddWycke1NPQ19GQU1JTFl9JyAhPSAnJ119IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExMzFiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYworCitUVU5FVkFMSURbYXJtMTEzNmpmc10gPSAiRW5hYmxlIGFybTExMzZqZnMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtMTEzNmpmcyIsICIgLW10dW5lPWFybTExMzZqZi1zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtMTEzNmpmcyIKK0FSTVBLR0FSQ0hfdHVuZS1hcm0xMTM2amZzID0gImFybTExMzZqZnMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtMTEzNmpmcyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Nn0gYXJtMTEzNmpmcyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm0xMTM2amZzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2fSBhcm0xMTM2amZzLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTJlYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyMHQuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NHQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFthcm05MjB0XSA9ICJFbmFibGUgYXJtOTIwdCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05MjB0IiwgIiAtbXR1bmU9YXJtOTIwdCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImFybTkyMHQiCitBUk1QS0dBUkNIX3R1bmUtYXJtOTIwdCA9ICJhcm05MjB0IgorVFVORV9GRUFUVVJFU190dW5lLWFybTkyMHQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0fSBhcm05MjB0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybTkyMHQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBhcm05MjB0IGFybTkyMHR0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTI2ZWpzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzVlNGUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY1dGUiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYworCitUVU5FVkFMSURbYXJtOTI2ZWpzXSA9ICJFbmFibGUgYXJtOTI2ZWpzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTkyNmVqcyIsICIgLW10dW5lPWFybTkyNmVqLXMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm05MjZlanMiCitBUk1QS0dBUkNIX3R1bmUtYXJtOTI2ZWpzID0gImFybTkyNmVqcyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm05MjZlanMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0gYXJtOTI2ZWpzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybTkyNmVqcyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSBhcm05MjZlanN0ZSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTU3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NHQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFthcm05dGRtaV0gPSAiRW5hYmxlIGFybTl0ZG1pIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTl0ZG1pIiwgIiAtbXR1bmU9YXJtOXRkbWkiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm05dGRtaSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm05dGRtaSA9ICJhcm05dGRtaSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm05dGRtaSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHR9IGFybTl0ZG1pIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybTl0ZG1pID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dH0gYXJtOXRkbWl0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWJiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXRvbS5pbmMKQEAgLTAsMCArMSwyIEBACisjIEF0b20gdHVuaW5ncyBhcmUgdGhlIHNhbWUgYXMgY29yZTIgZm9yIG5vdy4uLgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWMzLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYzI4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jMy5pbmMKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCisKK1RVTkVWQUxJRFtjM10gPSAiVklBIEN5cml4IElJSSBvciBWSUEgQzMgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyIKK1RVTkVDT05GTElDVFNbYzNdID0gIm02NCBteDMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImMzIiwgIiAtbWFyY2g9YzMgLW10dW5lPWMzIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYzMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYzMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBjMyIKK0JBU0VfTElCU190dW5lLWMzID0gIiR7QkFTRV9MSUJfdHVuZS14ODZ9IgorIyBUaGUgZm9sbG93aW5nIHNob3VsZCBsaWtlbHkgYmUgc29tZXRoaW5nIG90aGVyIHRoZW4gaTU4Ni4uLgorVFVORV9QS0dBUkNIX3R1bmUtYzMgPSAiaTU4NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jMyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODZ9IGkzODYgaTQ4NiBpNTg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0Y2I3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKQEAgLTAsMCArMSwzOCBAQAorIyBTZXR0aW5ncyBmb3IgdGhlIEdDQygxKSBjcHUtdHlwZSAiY29yZTIiOgorIworIyAgICAgIEludGVsIENvcmUyIENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNTVgsIFNTRSwgU1NFMiwgU1NFMyBhbmQgU1NTRTMKKyMgICAgICBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKyMKKyMgVGhpcyB0dW5lIGlzIHJlY29tbWVuZGVkIGZvciB0aGUgSW50ZWwgQ29yZSAyIENQVSBmYW1pbHksIGluY2x1ZGluZyBDb25yb2UsCisjIE1lcm9tIGFuZCBiZXlvbmQsIGFzIHdlbGwgYXMgdGhlIGZpcnN0IEF0b20gQ1BVcywgRGlhbW9uZHZpbGxlLCBhbmQgYmV5b25kLgorIworREVGQVVMVFRVTkUgPz0gImNvcmUyLTMyIgorCisjIFNldCB4ODYgdGFyZ2V0IGFyY2ggdG8gaTY4Niwgc28gdGhhdCBnbGliYyBlbmFibGVzIFNTRSBvcHRpbWlzZWQgbWVtY3B5LCBldGMuCitYODZBUkNIMzIgPz0gImk2ODYiCisKKyMgSW5jbHVkZSB0aGUgcHJldmlvdXMgdHVuZSB0byBwdWxsIGluIFBBQ0tBR0VfRVhUUkFfQVJDSFMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtjb3JlMl0gPSAiRW5hYmxlIGNvcmUyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcmUyIiwgIiAtbWFyY2g9Y29yZTIgLW10dW5lPWNvcmUyIC1tc3NlMyAtbWZwbWF0aD1zc2UiLCAiIiwgZCl9IgorCisjIEV4dHJhIHR1bmUgc2VsZWN0aW9ucworQVZBSUxUVU5FUyArPSAiY29yZTItMzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZTItMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBjb3JlMiIKK0JBU0VfTElCX3R1bmUtY29yZTItMzIgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtY29yZTItMzIgPSAiY29yZTItMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItMzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaTU4Nn0gY29yZTItMzIiCisKK0FWQUlMVFVORVMgKz0gImNvcmUyLTY0IgorVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Ni02NH0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTY0ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtY29yZTItNjQgPSAiY29yZTItNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItNjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2LTY0fSBjb3JlMi02NCIKKworQVZBSUxUVU5FUyArPSAiY29yZTItNjQteDMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTY0LXgzMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQteDMyfSBjb3JlMiIKK0JBU0VfTElCX3R1bmUtY29yZTItNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTY0LXgzMiA9ICJjb3JlMi02NC14MzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItNjQteDMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NC14MzJ9IGNvcmUyLTY0LXgzMiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmVpNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjZjkzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jCkBAIC0wLDAgKzEsMzUgQEAKKyMgU2V0dGluZ3MgZm9yIHRoZSBHQ0MoMSkgY3B1LXR5cGUgImNvcmVpNyI6CisjCisjICAgICBJbnRlbCBDb3JlIGk3IENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNTVgsIFNTRSwgU1NFMiwgU1NFMywgU1NTRTMsIFNTRTQuMQorIyAgICAgYW5kIFNTRTQuMiBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKyMKKyMgVGhpcyB0dW5lIGlzIHJlY29tbWVuZGVkIGZvciBJbnRlbCBOZWhhbGVtIGFuZCBTaWx2ZXJtb250IChlLmcuIEJheSBUcmFpbCkgQ1BVcworIyAoYW5kIGJleW9uZCkuCisjCitERUZBVUxUVFVORSA/PSAiY29yZWk3LTY0IgorCisjIFB1bGwgaW4gdGhlIHByZXZpb3VzIHR1bmUgaW4gdG8gcHVsbCBpbiBQQUNLQUdFX0VYVFJBX0FSQ0hTCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCisKKyMgRXh0cmEgdHVuZSBmZWF0dXJlcworVFVORVZBTElEW2NvcmVpN10gPSAiRW5hYmxlIGNvcmVpNyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlaTciLCAiIC1tYXJjaD1jb3JlaTcgLW10dW5lPWNvcmVpNyAtbWZwbWF0aD1zc2UgLW1zc2U0LjIiLCAiIiwgZCl9IgorCisjIEV4dHJhIHR1bmUgc2VsZWN0aW9ucworQVZBSUxUVU5FUyArPSAiY29yZWk3LTMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmVpNy0zMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGNvcmVpNyIKK0JBU0VfTElCX3R1bmUtY29yZWk3LTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmVpNy0zMiA9ICJjb3JlaTctMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZWk3LTMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyfSBjb3JlaTctMzIiCisKK0FWQUlMVFVORVMgKz0gImNvcmVpNy02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlaTctNjQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0fSBjb3JlaTciCitCQVNFX0xJQl90dW5lLWNvcmVpNy02NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmVpNy02NCA9ICJjb3JlaTctNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZWk3LTY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0fSBjb3JlaTctNjQiCisKK0FWQUlMVFVORVMgKz0gImNvcmVpNy02NC14MzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZWk3LTY0LXgzMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQteDMyfSBjb3JlaTciCitCQVNFX0xJQl90dW5lLWNvcmVpNy02NC14MzIgPSAibGlieDMyIgorVFVORV9QS0dBUkNIX3R1bmUtY29yZWk3LTY0LXgzMiA9ICJjb3JlaTctNjQteDMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy02NC14MzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItNjQteDMyfSBjb3JlaTctNjQteDMyIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI5Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGExNV0gPSAiRW5hYmxlIENvcnRleC1BMTUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTE1IiwgIiAtbXR1bmU9Y29ydGV4LWExNSIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGExNSBjb3J0ZXhhMTV0IGNvcnRleGExNS1uZW9uIGNvcnRleGExNXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTUgPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNXQgPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNS1uZW9uID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTUtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNXQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE1LXZmcCBjb3J0ZXhhMTV0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNS12ZnAgY29ydGV4YTE1LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNXQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNS12ZnAgY29ydGV4YTE1LXZmcC1uZW9uIGNvcnRleGExNXQyLXZmcCBjb3J0ZXhhMTV0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGExNWhmIGNvcnRleGExNXRoZiBjb3J0ZXhhMTVoZi1uZW9uIGNvcnRleGExNXRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNWhmID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0aGYgPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNWhmLW5lb24gPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNXRoZi1uZW9uID0gImNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTVoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTVoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE1aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNXRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExNWhmLXZmcCBjb3J0ZXhhMTV0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExNWhmLXZmcCBjb3J0ZXhhMTVoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE1aGYtdmZwIGNvcnRleGExNWhmLXZmcC1uZW9uIGNvcnRleGExNXQyaGYtdmZwIGNvcnRleGExNXQyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE3LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzcxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE3LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTE3XSA9ICJFbmFibGUgQ29ydGV4LUExNyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhMTciLCAiIC1tdHVuZT1jb3J0ZXgtYTE3IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTE3IGNvcnRleGExN3QgY29ydGV4YTE3LW5lb24gY29ydGV4YTE3dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNyA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3dCA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3LW5lb24gPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3QtbmVvbiA9ICJjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3QgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNy1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGExNy12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhMTctdmZwIGNvcnRleGExN3QyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTctbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE3LXZmcCBjb3J0ZXhhMTctdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTE3LXZmcCBjb3J0ZXhhMTctdmZwLW5lb24gY29ydGV4YTE3dDItdmZwIGNvcnRleGExN3QyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTE3aGYgY29ydGV4YTE3dGhmIGNvcnRleGExN2hmLW5lb24gY29ydGV4YTE3dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3aGYgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3RoZiA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3aGYtbmVvbiA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3dGhmLW5lb24gPSAiY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN2hmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3RoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3RoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN2hmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhMTdoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE3aGYtdmZwIGNvcnRleGExN3QyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN2hmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTE3aGYtdmZwIGNvcnRleGExN2hmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3RoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhMTdoZi12ZnAgY29ydGV4YTE3aGYtdmZwLW5lb24gY29ydGV4YTE3dDJoZi12ZnAgY29ydGV4YTE3dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhNV0gPSAiRW5hYmxlIENvcnRleC1BNSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhNSIsICIgLW10dW5lPWNvcnRleC1hNSIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGE1IGNvcnRleGE1dCBjb3J0ZXhhNS1uZW9uIGNvcnRleGE1dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1ID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dCA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNS1uZW9uID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dC1uZW9uID0gImNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhNS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTV0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGE1LXZmcCBjb3J0ZXhhNXQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNS1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNS12ZnAgY29ydGV4YTUtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTV0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhNS12ZnAgY29ydGV4YTUtdmZwLW5lb24gY29ydGV4YTV0Mi12ZnAgY29ydGV4YTV0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGE1aGYgY29ydGV4YTV0aGYgY29ydGV4YTVoZi1uZW9uIGNvcnRleGE1dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTVoZiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXRoZiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNWhmLW5lb24gPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTV0aGYtbmVvbiA9ICJjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNWhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTVoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNXRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTVoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTV0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhNWhmLXZmcCBjb3J0ZXhhNXQyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhNWhmLXZmcCBjb3J0ZXhhNWhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE1aGYtdmZwIGNvcnRleGE1aGYtdmZwLW5lb24gY29ydGV4YTV0MmhmLXZmcCBjb3J0ZXhhNXQyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA2OTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYwpAQCAtMCwwICsxLDQyIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTddID0gIkVuYWJsZSBDb3J0ZXgtQTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTciLCAiIC1tdHVuZT1jb3J0ZXgtYTciLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNyBjb3J0ZXhhN3QgY29ydGV4YTctbmVvbiBjb3J0ZXhhN3QtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNyA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3QgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTctbmVvbiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3QtbmVvbiA9ICJjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNy1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3QtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTctdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNy12ZnAgY29ydGV4YTd0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTctbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTctdmZwIGNvcnRleGE3LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTctdmZwIGNvcnRleGE3LXZmcC1uZW9uIGNvcnRleGE3dDItdmZwIGNvcnRleGE3dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhN2hmIGNvcnRleGE3dGhmIGNvcnRleGE3aGYtbmVvbiBjb3J0ZXhhN3RoZi1uZW9uIGNvcnRleGE3aGYtbmVvbi12ZnB2NCBjb3J0ZXhhN3RoZi1uZW9uLXZmcHY0IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0aGYgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTdoZi1uZW9uID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dGhmLW5lb24gPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTdoZi1uZW9uLXZmcHY0ID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPSAiY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTdoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3aGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NH0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0aGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjR9IGNvcnRleGE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE3aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTd0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhN2hmLXZmcCBjb3J0ZXhhN2hmLXZmcC1uZW9uIGNvcnRleGE3dDJoZi12ZnAgY29ydGV4YTd0MmhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3aGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9uLXZmcHY0fSBjb3J0ZXhhN2hmLXZmcCBjb3J0ZXhhN2hmLXZmcC1uZW9uIGNvcnRleGE3aGYtdmZwLXZmcHY0LW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0aGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NH0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwIGNvcnRleGE3dDJoZi12ZnAtbmVvbiBjb3J0ZXhhN2hmLXZmcC12ZnB2NC1uZW9uIGNvcnRleGE3dDJoZi12ZnAtdmZwdjQtbmVvbiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MTUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhOF0gPSAiRW5hYmxlIENvcnRleC1BOCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhOCIsICIgLW10dW5lPWNvcnRleC1hOCIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGE4IGNvcnRleGE4dCBjb3J0ZXhhOC1uZW9uIGNvcnRleGE4dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4ID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dCA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOC1uZW9uID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dC1uZW9uID0gImNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTgiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTggPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhOC12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTh0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGE4LXZmcCBjb3J0ZXhhOHQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOC12ZnAgY29ydGV4YTgtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTh0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhOC12ZnAgY29ydGV4YTgtdmZwLW5lb24gY29ydGV4YTh0Mi12ZnAgY29ydGV4YTh0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGE4aGYgY29ydGV4YTh0aGYgY29ydGV4YThoZi1uZW9uIGNvcnRleGE4dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YThoZiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHRoZiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOGhmLW5lb24gPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTh0aGYtbmVvbiA9ICJjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YThoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOHRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTgiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YThoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YThoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTh0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhOGhmLXZmcCBjb3J0ZXhhOHQyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhOGhmLXZmcCBjb3J0ZXhhOGhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE4aGYtdmZwIGNvcnRleGE4aGYtdmZwLW5lb24gY29ydGV4YTh0MmhmLXZmcCBjb3J0ZXhhOHQyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAzOTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTldID0gIkVuYWJsZSBDb3J0ZXgtQTkgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTkiLCAiIC1tdHVuZT1jb3J0ZXgtYTkiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOSBjb3J0ZXhhOXQgY29ydGV4YTktbmVvbiBjb3J0ZXhhOXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOSA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXQgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTktbmVvbiA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXQtbmVvbiA9ICJjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOS1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE5IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTktdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOS12ZnAgY29ydGV4YTl0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTktbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTktdmZwIGNvcnRleGE5LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTktdmZwIGNvcnRleGE5LXZmcC1uZW9uIGNvcnRleGE5dDItdmZwIGNvcnRleGE5dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOWhmIGNvcnRleGE5dGhmIGNvcnRleGE5aGYtbmVvbiBjb3J0ZXhhOXRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5aGYgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0aGYgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTloZi1uZW9uID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5dGhmLW5lb24gPSAiY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTloZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTl0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE5IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE5aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTloZi12ZnAgY29ydGV4YTl0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOWhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTloZi12ZnAgY29ydGV4YTloZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOWhmLXZmcCBjb3J0ZXhhOWhmLXZmcC1uZW9uIGNvcnRleGE5dDJoZi12ZnAgY29ydGV4YTl0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2NTI3OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhtMV0gPSAiRW5hYmxlIENvcnRleC1NMSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhtMSIsICIgLW10dW5lPWNvcnRleC1tMSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImNvcnRleG0xIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleG0xID0gImNvcnRleG0xIgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleG0xID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4bTEiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4bTEgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4bTEtdmZwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjNGMwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gImNvcnRleG0zIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleG0zXSA9ICJFbmFibGUgQ29ydGV4LU0zIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleG0zIiwgIiAtbXR1bmU9Y29ydGV4LW0zIiwgIiIsIGQpfSIKKworVFVORVZBTElEW2FybXY3bV0gPSAiRW5hYmxlIENvcnRleC1NMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12N20iLCAiIC1tYXJjaD1hcm12Ny1tIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiY29ydGV4bTMiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4bTMgPSAiYXJtdjdtIgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleG0zID0gImFybXY3bSB2ZnAgY29ydGV4bTMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4bTMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdtLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTY0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhyNCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhyNF0gPSAiRW5hYmxlIENvcnRleC1SNCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhyNCIsICIgLW10dW5lPWNvcnRleC1yNCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFthcm12N3JdID0gIkVuYWJsZSBDb3J0ZXgtUjQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdyIiwgIiAtbWFyY2g9YXJtdjctciIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImNvcnRleHI0IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleHI0ID0gImFybXY3ciIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhyNCA9ICJhcm12N3IgdmZwIGNvcnRleHI0IGFybSB0aHVtYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhyNCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBhcm12N3ItdmZwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtZXA5MzEyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTliNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMKQEAgLTAsMCArMSwxMiBAQAorREVGQVVMVFRVTkUgPz0gImVwOTMxMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKKworVFVORVZBTElEW2VwOTMxMl0gPSAiRW5hYmxlIEludGVsIFBYQTI3eCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlcDkzMTIiLCAiIC1tYXJjaD1lcDkzMTIgLW10dW5lPWVwOTMxMiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImVwOTMxMiIKK0FSTVBLR0FSQ0hfdHVuZS1lcDkzMTIgPSAiZXA5MzEyIgorIyB0aGlzIHR1bmUgZG9lcyBub3QgaW5jbHVkZSBUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0LCBzbyB0aGVyZSBpcyBubyBhcm12NCBUVU5FX0ZFQVRVUkVTID0+IG5vICd0JyBpbiBBUk1QS0dTRlhfVEhVTUIKK1RVTkVfRkVBVFVSRVNfdHVuZS1lcDkzMTIgPSAidGh1bWIgZXA5MzEyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWVwOTMxMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGVwOTMxMiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LW5scC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni1ubHAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDYwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni1ubHAuaW5jCkBAIC0wLDAgKzEsMTkgQEAKKyMgU2V0dGluZ3MgZm9yIHRoZSBHQ0MoMSkgY3B1LXR5cGUgInF1YXJrIjoKKyMKKyMKKyMKK0RFRkFVTFRUVU5FID89ICJpNTg2LW5scC0zMiIKKworIyBJbmNsdWRlIHRoZSBwcmV2aW91cyB0dW5lIHRvIHB1bGwgaW4gUEFDS0FHRV9FWFRSQV9BUkNIUworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCisKKyMgeDg2IHdpdGggbm8gbG9jayBwcmVmaXgKK1RVTkVWQUxJRFtpNTg2LW5scF0gPSAiSUEzMiB3aXRoIExvY2sgUHJlZml4IG9taXR0ZWQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiaTU4Ni1ubHAiLCAiIC1tYXJjaD1pNTg2IC1XYSwtbW9taXQtbG9jay1wcmVmaXg9eWVzIiwgIiIsIGQpfSIKKworIyBRdWFyayB0dW5lIGZlYXR1cmUKK0FWQUlMVFVORVMgPSAiaTU4Ni1ubHAtMzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtaTU4Ni1ubHAtMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBpNTg2LW5scCIKK0JBU0VfTElCX3R1bmUtaTU4Ni1ubHAtMzIgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtaTU4Ni1ubHAtMzIgPSAiaTU4Ni1ubHAtMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaTU4Ni1ubHAtMzIgPSAiaTU4Ni1ubHAtMzIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiYjNjNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAiaTU4NiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCisKKyMgRXh0cmEgdHVuZSBmZWF0dXJlcworVFVORVZBTElEW2k1ODZdID0gIkVuYWJsZSBpNTg2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImk1ODYiLCAiIC1tYXJjaD1pNTg2IiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImk1ODYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtaTU4NiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGk1ODYiCitCQVNFX0xJQl90dW5lLWk1ODYgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtaTU4NiA9ICJpNTg2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2fSBpNTg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaXdtbXh0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhjYTBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMKQEAgLTAsMCArMSwxNCBAQAorIyBDb25maWd1cmF0aW9ucyBmb3IgdGhlIEludGVsIFBYQTI3eCBBcHBpY2F0aW9ucyBQcm9jZXNzb3IgRmFtaWx5LiAKKyMgUGxlYXNlIHVzZSB0dW5lLXhzY2FsZSBmb3IgUFhBMjU1L1BYQTI2eCBiYXNlZCBwcm9jZXNzb3JzLgorCitERUZBVUxUVFVORSA/PSAiaXdtbXh0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworVFVORVZBTElEW2l3bW14dF0gPSAiRW5hYmxlIEludGVsIFBYQTI3eCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJpd21teHQiLCAiIC1tYXJjaD1pd21teHQgLW10dW5lPWl3bW14dCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gIml3bW14dCIKK0FSTVBLR0FSQ0hfdHVuZS1pd21teHQgPSAiaXdtbXh0IgorVFVORV9GRUFUVVJFU190dW5lLWl3bW14dCA9ICJ0aHVtYiBpd21teHQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaXdtbXh0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGV9IGl3bW14dCBpd21teHR0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTMyNmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKQEAgLTAsMCArMSwyNSBAQAorREVGQVVMVFRVTkUgPz0gIm1pcHMzMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMKKworVFVORVZBTElEW21pcHMzMl0gPSAiRW5hYmxlIG1pcHMzMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVDT05GTElDVFNbbWlwczMyXSA9ICJuNjQgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm1pcHMzMiIsICIgLW1hcmNoPW1pcHMzMiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gIm1pcHMzMiBtaXBzMzJlbCBtaXBzMzItbmYgbWlwczMyZWwtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc30gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyID0gIm1pcHMzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzIgPSAibWlwcyBtaXBzMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJlbCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWx9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMmVsID0gIm1pcHMzMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMmVsID0gIm1pcHNlbCBtaXBzMzJlbCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMi1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzLW5mfSBtaXBzMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzItbmYgPSAibWlwczMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMi1uZiA9ICJtaXBzLW5mIG1pcHMzMi1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMmVsLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHNlbC1uZn0gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyZWwtbmYgPSAibWlwczMyZWwiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyZWwtbmYgPSAibWlwc2VsLW5mIG1pcHMzMmVsLW5mIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkZWZmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKQEAgLTAsMCArMSwxNyBAQAorREVGQVVMVFRVTkUgPz0gIm1pcHMzMnIyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYworCitUVU5FVkFMSURbbWlwczMycjJdID0gIkVuYWJsZSBtaXBzMzJyMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVDT05GTElDVFNbbWlwczMycjJdID0gIm42NCBuMzIiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibWlwczMycjIiLCAiIC1tYXJjaD1taXBzMzJyMiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gIm1pcHMzMnIyIG1pcHMzMnIyZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzfSBtaXBzMzJyMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyID0gIm1pcHMzMnIyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyID0gIm1pcHMgbWlwczMyIG1pcHMzMnIyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjJlbCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWx9IG1pcHMzMnIyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMycjJlbCA9ICJtaXBzMzJyMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyZWwgPSAibWlwc2VsIG1pcHMzMmVsIG1pcHMzMnIyZWwiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTBlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYwpAQCAtMCwwICsxLDMgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzNjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1vY3Rlb24uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW9jdGVvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0ZDlkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1vY3Rlb24uaW5jCkBAIC0wLDAgKzEsMzIgQEAKK0RFRkFVTFRUVU5FID89Im9jdGVvbjIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK0FWQUlMVFVORVMgKz0gIm9jdGVvbjIgb2N0ZW9uMl82NCBvY3Rlb24zIG9jdGVvbjNfNjQiCisKK1RVTkVWQUxJRFtvY3Rlb24yXSA9ICJFbmFibGUgb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gb2N0ZW9uMiBzdXBwb3J0IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm9jdGVvbjIiLCAiIC1tYXJjaD1vY3Rlb24yICIsICIiLGQpfSIKKworVFVORV9GRUFUVVJFU190dW5lLW9jdGVvbjIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW4zMn0gb2N0ZW9uMiIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjIgPSAib2N0ZW9uMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24yID0gIm1pcHM2NC1uMzIgb2N0ZW9uMi1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24yXzY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NH0gb2N0ZW9uMiIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uMl82NCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjJfNjQgPSAib2N0ZW9uMl82NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24yXzY0ID0gIm1pcHM2NCBvY3Rlb24yXzY0IgorCisKK1RVTkVWQUxJRFtvY3Rlb24zXSA9ICJFbmFibGUgb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gb2N0ZW9uMyBzdXBwb3J0IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm9jdGVvbjMiLCAiIC1tYXJjaD1vY3Rlb24zICIsICIiLGQpfSIKKworVFVORV9GRUFUVVJFU190dW5lLW9jdGVvbjMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW4zMn0gb2N0ZW9uMyIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uMyA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjMgPSAib2N0ZW9uMyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24zID0gIm1pcHM2NC1uMzIgb2N0ZW9uMy1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24zXzY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NH0gb2N0ZW9uMyIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uM182NCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjNfNjQgPSAib2N0ZW9uM182NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24zXzY0ID0gIm1pcHM2NCBvY3Rlb24zXzY0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJlODY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMKQEAgLTAsMCArMSwyMSBAQAorREVGQVVMVFRVTkUgPz0gInBwYzY0cDUiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW3Bvd2VyNV0gPSAiRW5hYmxlIElCTSBQb3dlcjUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI1IiwgIiAtbWNwdT1wb3dlcjUiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNwNSBwcGM2NHA1IgorVFVORV9GRUFUVVJFU190dW5lLXBwY3A1ID0gIm0zMiBmcHUtaGFyZCBwb3dlcjUgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjcDUgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjcDUgPSAicHBjcDUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjcDUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjcDUiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NHA1ID0gIm02NCBmcHUtaGFyZCBwb3dlcjUgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjNjRwNSA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0cDUgPSAicHBjNjRwNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NHA1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRwNSIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgcG93ZXI1IHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICItLXdpdGgtY3B1PXBvd2VyNSIsICIiLCBkKX0iCitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI1IiwgIi0td2l0aC1jcHU9cG93ZXI1IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2Mzc5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNwcjYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW3Bvd2VyNl0gPSAiRW5hYmxlIElCTSBQb3dlcjYgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI2IiwgIiAtbWNwdT1wb3dlcjYiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNwNiBwcGM2NHA2IgorVFVORV9GRUFUVVJFU190dW5lLXBwY3A2ID0gIm0zMiBmcHUtaGFyZCBwb3dlcjYgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjcDYgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjcDYgPSAicHBjcDYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjcDYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjcDYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NHA2ID0gIm02NCBmcHUtaGFyZCBwb3dlcjYgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjNjRwNiA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0cDYgPSAicHBjNjRwNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NHA2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRwNiIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgcG93ZXI2IHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICItLXdpdGgtY3B1PXBvd2VyNiIsICIiLCBkKX0iCitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI2IiwgIi0td2l0aC1jcHU9cG93ZXI2IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2OWU3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNwcjciCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW3Bvd2VyN10gPSAiRW5hYmxlIElCTSBQb3dlcjcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI3IiwgIiAtbWNwdT1wb3dlcjciLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNwNyBwcGM2NHA3IgorVFVORV9GRUFUVVJFU190dW5lLXBwY3A3ID0gIm0zMiBmcHUtaGFyZCBwb3dlcjcgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjcDcgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjcDcgPSAicHBjcDciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjcDcgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjcDciCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NHA3ID0gIm02NCBmcHUtaGFyZCBwb3dlcjcgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjNjRwNyA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0cDcgPSAicHBjNjRwNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NHA3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRwNyIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgcG93ZXI3IHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICItLXdpdGgtY3B1PXBvd2VyNyIsICIiLCBkKX0iCitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI3IiwgIi0td2l0aC1jcHU9cG93ZXI3IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzQ3Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkMTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM0NzYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGM0NzZdID0gIkVuYWJsZSBwcGM0NzYgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNDc2IiwgIiAtbWNwdT00NzYiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGM0NzYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNDc2ID0gIm0zMiBmcHUtaGFyZCBwcGM0NzYiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM0NzYgPSAicHBjNDc2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzQ3NiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGM0NzYiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IDQ3NiBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNDc2IiwgIi13aXRoLWNwdT00NzYiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDRhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNjAzZS5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBwYzYwM2UiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGM2MDNlXSA9ICJFbmFibGUgcHBjNjAzZSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM2MDNlIiwgIiAtbWNwdT02MDNlIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNjAzZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2MDNlID0gIm0zMiBmcHUtaGFyZCBwcGM2MDNlIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjAzZSA9ICJwcGM2MDNlIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzYwM2UgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjNjAzZSIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgNjAzZSBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNjAzZSIsICItd2l0aC1jcHU9NjAzZSIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjMDQwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjNzQwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwYzc0MDBdID0gIkVuYWJsZSBwcGM3NDAwIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzc0MDAiLCAiIC1tY3B1PTc0MDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGM3NDAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwYzc0MDAgPSAibTMyIGZwdS1oYXJkIHBwYzc0MDAgYWx0aXZlYyIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzc0MDAgPSAicHBjNzQwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM3NDAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwYzc0MDAiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IDc0MDAgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCisjR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM3NDAwIiwgIi0td2l0aC1jcHU9cG93ZXI0IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOTUwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlMzAwYzIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlMzAwYzJdID0gIkVuYWJsZSBwcGNlMzAwYzIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTMwMGMyIiwgIiAtbWNwdT1lMzAwYzIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlMzAwYzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTMwMGMyID0gIm0zMiBmcHUtc29mdCBwcGNlMzAwYzIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlMzAwYzIgPSAicHBjZTMwMGMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2UzMDBjMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjLW5mfSBwcGNlMzAwYzIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOWNmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYwpAQCAtMCwwICsxLDIzIEBACitERUZBVUxUVFVORSA/PSAicHBjZTMwMGMzIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitBVkFJTFRVTkVTICs9ICJwcGNlMzAwYzMgcHBjZTMwMGMzLW5mIgorCisjIGhhcmQtZmxvYXQKK1RVTkVWQUxJRFtwcGNlMzAwYzNdID0gIkVuYWJsZSBwcGNlMzAwYzMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTMwMGMzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXBvd2VycGN9IHBwY2UzMDBjMyIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2UzMDBjMyA9ICJwcGNlMzAwYzMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTMwMGMzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY2UzMDBjMyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMiLCAiIC1tY3B1PWUzMDBjMyIsICIiLCBkKX0iCisKKyMgZ2xpYmMgY29uZmlnIG9wdGlvbnMgdG8gbWFrZSB1c2Ugb2YgZTMwMGMzICg2MDNlKSBzcGVjaWZpYyBzcXJ0L3NxcnRmIHJvdXRpbmVzCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMyIsICItLXdpdGgtY3B1PWUzMDBjMyIsICIiLCBkKX0iCisKKyMgc29mdC1mbG9hdAorVFVORVZBTElEW3BwY2UzMDBjMy1uZl0gPSAiRW5hYmxlIHBwY2UzMDBjMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyAobm8gZnB1KSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlMzAwYzMtbmYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtcG93ZXJwYy1uZn0gcHBjZTMwMGMzLW5mIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTMwMGMzLW5mID0gInBwY2UzMDBjMy1uZiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlMzAwYzMtbmYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYy1uZn0gcHBjZTMwMGMzLW5mIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMy1uZiIsICIgLW1jcHU9ZTMwMGMzIiwgIiIsIGQpfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzFmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMC5pbmMKQEAgLTAsMCArMSwyMCBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U1MDAiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlNTAwXSA9ICJFbmFibGUgcHBjZTUwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlNTAwIiwgIiAtbWNwdT04NTQwIiwgIiIsIGQpfSIKKworVFVORVZBTElEW3NwZV0gPSAiRW5hYmxlIFNQRSBBQkkgZXh0ZW5zaW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDAiLCAic3BlIiBdLCAiIC1tYWJpPXNwZSAtbXNwZSAtbWZsb2F0LWdwcnM9c2luZ2xlIiwgIiIsIGQpfSIKK1RBUkdFVF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAicHBjZTUwMCIgLCAic3BlIiBdLCAicHBjLWVmcyIsICIiLCBkKX0iCisKKyMgc3BlIGlzIGRlZmluZWQgcG90ZW50aWFsbHkgaW4gdHdvIHBsYWNlcywgc28gd2Ugd2FudCB0byBiZSBzdXJlIGl0IHdpbGwKKyMgb25seSB3cml0ZSBzcGUgb25jZSB0byB0aGUgQUJJRVhURU5TSU9OUyBmaWVsZC4KK1NQRUFCSUVYVEVOU0lPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzcGUiLCAic3BlIiwgIiIsIGQpfSIKK0FCSUVYVEVOU0lPTiAuPSAiJHtTUEVBQklFWFRFTlNJT059IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDAgPSAibTMyIHNwZSBwcGNlNTAwIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTUwMCA9ICJwcGNlNTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1MDAgPSAicHBjZTUwMCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDBtYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ZDhlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwbWMiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlNTAwbWNdID0gIkVuYWJsZSBwcGNlNTAwbWMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMG1jIiwgIiAtbWNwdT1lNTAwbWMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTAwbWMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTUwMG1jID0gIm0zMiBmcHUtaGFyZCBwcGNlNTAwbWMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlNTAwbWMgPSAicHBjZTUwMG1jIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1MDBtYyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlNTAwbWMiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU1MDBtYyBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMG1jIiwgIi13aXRoLWNwdT1lNTAwbWMiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMHYyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE0ZDcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMKQEAgLTAsMCArMSwyMCBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U1MDB2MiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwY2U1MDB2Ml0gPSAiRW5hYmxlIHBwY2U1MDB2MiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlNTAwdjIiLCAiIC1tY3B1PTg1NDgiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbc3BlXSA9ICJFbmFibGUgU1BFIEFCSSBleHRlbnNpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAicHBjZTUwMHYyIiwgInNwZSIgXSwgIiAtbWFiaT1zcGUgLW1zcGUgLW1mbG9hdC1ncHJzPWRvdWJsZSIsICIiLCBkKX0iCitUQVJHRVRfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDB2MiIgLCAic3BlIiBdLCAicHBjLWVmZCIsICIiLCBkKX0iCisKKyMgc3BlIGlzIGRlZmluZWQgcG90ZW50aWFsbHkgaW4gdHdvIHBsYWNlcywgc28gd2Ugd2FudCB0byBiZSBzdXJlIGl0IHdpbGwKKyMgb25seSB3cml0ZSBzcGUgb25jZSB0byB0aGUgQUJJRVhURU5TSU9OUyBmaWVsZC4KK1NQRUFCSUVYVEVOU0lPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzcGUiLCAic3BlIiwgIiIsIGQpfSIKK0FCSUVYVEVOU0lPTiAuPSAiJHtTUEVBQklFWFRFTlNJT059IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTAwdjIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTUwMHYyID0gIm0zMiBzcGUgcHBjZTUwMHYyIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTUwMHYyID0gInBwY2U1MDB2MiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwdjIgPSAicHBjZTUwMHYyIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyMzFlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMKQEAgLTAsMCArMSwyMCBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U1NTAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtlNTUwMF0gPSAiRW5hYmxlIEZyZWVzY2FsZSBlNTUwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNTUwMCIsICIgLW1jcHU9ZTU1MDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTUwMCBwcGM2NGU1NTAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1NTAwID0gIm0zMiBmcHUtaGFyZCBlNTUwMCIKK0JBU0VfTElCX3R1bmUtcHBjZTU1MDAgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTU1MDAgPSAicHBjZTU1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTU1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTU1MDAiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NGU1NTAwID0gIm02NCBmcHUtaGFyZCBlNTUwMCIKK0JBU0VfTElCX3R1bmUtcHBjNjRlNTUwMCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0ZTU1MDAgPSAicHBjNjRlNTUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NGU1NTAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRlNTUwMCIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgZTU1MDAgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU1NTAwIiwgIi0td2l0aC1jcHU9ZTU1MDAiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3NDNhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMKQEAgLTAsMCArMSwyMSBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U2NTAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtlNjUwMF0gPSAiRW5hYmxlIEZyZWVzY2FsZSBlNjUwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICIgLW1jcHU9ZTY1MDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNjUwMCBwcGM2NGU2NTAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U2NTAwID0gIm0zMiBmcHUtaGFyZCBlNjUwMCBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGNlNjUwMCA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlNjUwMCA9ICJwcGNlNjUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNjUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlNjUwMCIKKworVFVORV9GRUFUVVJFU190dW5lLXBwYzY0ZTY1MDAgPSAibTY0IGZwdS1oYXJkIGU2NTAwIGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0ZTY1MDAgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NGU2NTAwID0gInBwYzY0ZTY1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRlNjUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0ZTY1MDAiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU2NTAwIHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU2NTAwIiwgIi0td2l0aC1jcHU9ZTY1MDAiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU2NTAwIiwgIi0td2l0aC1jcHU9ZTY1MDAiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoMy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2gzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVkN2JhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoMy5pbmMKQEAgLTAsMCArMSwxNyBAQAorREVGQVVMVFRVTkUgPz0gInNoMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYworCitUVU5FVkFMSURbc2gzXSA9ICJFbmFibGUgU0gzIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic2gzIiwgIiAtbTMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzaDMgc2gzZWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2gzID0gInNoMyIKK1RVTkVfQVJDSF90dW5lLXNoMyA9ICJzaDMiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDMgPSAic2gzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoMyA9ICJzaCBzaDMiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDNlYiA9ICJzaDMgYmlnZW5kaWFuIgorVFVORV9BUkNIX3R1bmUtc2gzZWIgPSAic2gzZWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDNlYiA9ICJzaDNlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDNlYiA9ICJzaGViIHNoM2ViIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2g0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmUyM2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNC5pbmMKQEAgLTAsMCArMSwzNCBAQAorREVGQVVMVFRVTkUgPz0gInNoNCIKKworIyBQdWxsIGluIHNoNCBmb3IgY29tcGF0aWJpbGl0eS4uLgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYworCitUVU5FVkFMSURbc2g0XSA9ICJFbmFibGUgU0g0IG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic2g0IiwgIiAtbTQiLCAiIiwgZCl9IgorCisjIE5PVEU6IElmIHlvdSB3YW50IHRvIG9wdGltaXplIHRvIHNoNGEsIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2g0YS5pbmMuCisjIEJ1dCBpdCBpcyBub3QgY29tcGF0aWJsZSBmb3Igc2g0LgorIyBUaGUgYmluYXJ5IG9wdGltaXplZCBieSBtNGEgZG9lc24ndCBvcGVyYXRlIG9uIHNoNC4gSXQgd29ya3Mgb24gc2g0YSBvbmx5LgorVFVORVZBTElEW3NoNGFdID0gIkVuYWJsZSBTSDRhIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic2g0YSIsICIgLW00YSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInNoNCBzaDRlYiBzaDRhIHNoNGFlYiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDQgPSAic2g0IgorVFVORV9BUkNIX3R1bmUtc2g0ID0gInNoNCIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNCA9ICJzaDQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0ID0gInNoIHNoNCIKKworVFVORV9GRUFUVVJFU190dW5lLXNoNGViID0gInNoNCBiaWdlbmRpYW4iCitUVU5FX0FSQ0hfdHVuZS1zaDRlYiA9ICJzaDRlYiIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNGViID0gInNoNGViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoNGViID0gInNoZWIgc2g0ZWIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDRhID0gInNoNGEiCitUVU5FX0FSQ0hfdHVuZS1zaDRhID0gInNoNCIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNGEgPSAic2g0YSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDRhID0gInNoIHNoNCBzaDRhIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0YWViID0gInNoNGEgYmlnZW5kaWFuIgorVFVORV9BUkNIX3R1bmUtc2g0YWViID0gInNoNGViIgorVFVORV9QS0dBUkNIX3R1bmUtc2g0YWViID0gInNoNGFlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDRhZWIgPSAic2hlYiBzaDRlYiBzaDRhZWIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyZmJhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdHJvbmdhcm0xMTAwLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFtzdHJvbmdhcm1dID0gIkVuYWJsZSBTdHJvbmdhcm0gMTEwMCBzZXJpZXMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3Ryb25nYXJtIiwgIiAtbXR1bmU9c3Ryb25nYXJtMTEwMCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInN0cm9uZ2FybSIKK0FSTVBLR0FSQ0hfdHVuZS1zdHJvbmdhcm0gPSAic3Ryb25nYXJtIgorVFVORV9GRUFUVVJFU190dW5lLXN0cm9uZ2FybSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gc3Ryb25nYXJtIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXN0cm9uZ2FybSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NH0gc3Ryb25nYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYWEzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3VwZXJzcGFyYy5pbmMKQEAgLTAsMCArMSw0IEBACitUVU5FX0FSQ0ggPSAic3BhcmMiCisKK1RVTkVfQ0NBUkdTID0gIi1tY3B1PXN1cGVyc3BhcmMiCitUVU5FX1BLR0FSQ0ggPSAic3VwZXJzcGFyYyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXhzY2FsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1Y2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NXRlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworVFVORVZBTElEW3hzY2FsZV0gPSAiRW5hYmxlIFBYQTI1NS9QWEEyNnggWHNjYWxlIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInhzY2FsZSIsICIgLW10dW5lPXhzY2FsZSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInhzY2FsZSIKK0FSTVBLR0FSQ0hfdHVuZS14c2NhbGUgPSAieHNjYWxlIgorVFVORV9GRUFUVVJFU190dW5lLXhzY2FsZSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSB4c2NhbGUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteHNjYWxlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGV9IHhzY2FsZSB4c2NhbGV0IHhzY2FsZWUgeHNjYWxldGUiCisKK0FWQUlMVFVORVMgKz0gInhzY2FsZS1iZSIKK0FSTVBLR0FSQ0hfdHVuZS14c2NhbGUtYmUgPSAieHNjYWxlIgorVFVORV9GRUFUVVJFU190dW5lLXhzY2FsZS1iZSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlYn0geHNjYWxlIGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14c2NhbGUtYmUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWJ9IHhzY2FsZWIgeHNjYWxldGIgeHNjYWxlZWIgeHNjYWxldGViIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M4YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKQEAgLTAsMCArMSw1MiBAQAorIworIyBCYXNlIG1hY2hpbmUgc2V0dGluZ3MgZm9yIFg4NiBhcmNoaXRlY3R1cmUgQlNQcworIworCisjCisjIGNvbW1vbiBzZXR0aW5ncyBmb3IgWDg2IG1hY2hpbmVzCisjCitNQUNISU5FX0ZFQVRVUkVTICs9ICJzY3JlZW4ga2V5Ym9hcmQgcGNpIHVzYmhvc3QgZXh0MiBleHQzIHg4NiBcCisgICAgICAgICAgICAgICAgICAgICBhY3BpIHNlcmlhbCB1c2JnYWRnZXQgYWxzYSIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAia2VybmVsLW1vZHVsZXMiCisKK0lNQUdFX0ZTVFlQRVMgKz0gImxpdmUiCisKK0tFUk5FTF9JTUFHRVRZUEUgPz0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFID89ICIxMTUyMDAgdHR5UzAiCisKKyMKKyMga2VybmVsLXJlbGF0ZWQgdmFyaWFibGVzCisjCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz89ICJsaW51eC15b2N0byIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID8/PSAiMy4wJSIKKworIworIyBYU0VSVkVSIHN1YmNvbXBvbmVudHMsIHVzZWQgdG8gYnVpbGQgdGhlIFhTRVJWRVIgdmFyaWFibGUKKyMKK1hTRVJWRVJfWDg2X0JBU0UgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1zeW5hcHRpY3MgXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X0VYVCA9ICIgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICd4c2VydmVyLXhvcmctZXh0ZW5zaW9uLWdseCcsICcnLCBkKX0gXAorICAgICAgICAgICB4c2VydmVyLXhvcmctbW9kdWxlLWxpYmludDEwIFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9JOTE1ID0gInhmODYtdmlkZW8taW50ZWwgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1pOTE1JywgJycsIGQpfSBcCisgICAgICAgICAgICIKKworWFNFUlZFUl9YODZfSTk2NSA9ICJ4Zjg2LXZpZGVvLWludGVsIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItaTk2NScsICcnLCBkKX0gXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X1ZFU0EgPSAieGY4Ni12aWRlby12ZXNhIgorCitYU0VSVkVSX1g4Nl9GQkRFViA9ICJ4Zjg2LXZpZGVvLWZiZGV2IgorCitYU0VSVkVSX1g4Nl9NT0RFU0VUVElORyA9ICJ4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNmM0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9SRUFETUUKQEAgLTAsMCArMSwyNCBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgdmVyc2lvbgorCitNb3N0IG9mIHRoZSBpdGVtcyBmb3IgdGhlIFg4NiBhcmNoaXRlY3R1cmVzIGFyZSBkZWZpbmVkIGluIHRoZSBzaW5nbGUKK2FyY2gteDg2IGZpbGUuCisKK1RocmVlIEFCSXMgYXJlIGRlZmluZSwgbTMyLCBteDMyIGFuZCBtNjQuCisKK1RoZSBmb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgWDg2IHNwZWNpZmljIHZhcmlhYmxlczoKKworWDg2QVJDSDMyIC0gVGhpcyBpcyB0aGUgMzItYml0IGFyY2hpdGVjdHVyZSBHTlUgY2Fub25pY2FsIGFyY2gsIFRVTkVfQVJDSC4KKworWDg2QVJDSDY0IC0gVGhpcyBpcyB0aGUgNjQtYml0IGFyY2hpdGVjdHVyZSBHTlUgY2Fub25pY2FsIGFyY2gsIFRVTkVfQVJDSC4KKworVGhlIFRVTkVfUEtHQVJDSCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CisKK1RVTkVfUEtHQVJDSCA9ICR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19CisKK1RoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSBmb3IgMzItYml0IHRhcmdldHMgaXMgaGlzdG9yaWNhbCBhbmQgZ2VuZXJhbGx5CitzZXQgdG8gdG8gbWF0Y2ggdGhlIGNvcmUgY29tcGF0aWJsZSBwcm9jZXNzb3IgdHlwZSwgaS5lLiBpMzg2LgorCitGb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoZSBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gZW5kIGluICdfNjQnLgorCitJZiB0aGUgeDMyIEFCSSBpcyB1c2VkLCB0aGVuIHRoZSBfNjQgaXMgZnVydGhlciBleHRlbmRlZCB3aXRoIGEgJ194MzInLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGJkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKQEAgLTAsMCArMSw1MSBAQAorIworIyBYODYgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24gKElBMzIsIFg4Nl82NCwgYW5kIFgzMikKKyMKKworREVGQVVMVFRVTkUgPz0gIng4NiIKK1RBUkdFVF9GUFUgPz0gIiIKK1g4NkFSQ0gzMiA/PSAiaTU4NiIKK1g4NkFSQ0g2NCA/PSAieDg2XzY0IgorCitUVU5FX1BLR0FSQ0ggPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCisKKyMgRUxGMzIgQUJJCitUVU5FVkFMSURbbTMyXSA9ICJJQTMyIEVMRjMyIHN0YW5kYXJkIEFCSSIKK1RVTkVDT05GTElDVFNbbTMyXSA9ICJtNjQgbXgzMiIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIiR7WDg2QVJDSDMyfSIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIiAtbTMyIiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICJ4ODY6IiwgIiIgLGQpfSIKKworIyB4MzIgQUJJCitUVU5FVkFMSURbbXgzMl0gPSAiSUEzMmUgKHg4Nl82NCkgRUxGMzIgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1tteDMyXSA9ICJtNjQgbTMyIgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiR7WDg2QVJDSDY0fSIsICIiICxkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAieDMyIiwgIiIgLGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiAtbXgzMiIsICIiLCBkKX0iCitUVU5FX0xEQVJHUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICItbSBlbGYzMl94ODZfNjQiLCAiIiwgZCl9IgorVFVORV9BU0FSR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLXgzMiIsICIiLCBkKX0iCisKKyMgRUxGNjQgQUJJCitUVU5FVkFMSURbbTY0XSA9ICJJQTMyZSAoeDg2XzY0KSBFTEY2NCBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW202NF0gPSAibTMyIG14MzIiCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICIke1g4NkFSQ0g2NH0iLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICIgLW02NCIsICIiLCBkKX0iCisKKyMgRGVmYXVsdCBUdW5lIGNvbmZpZ3VyYXRpb25zCitBVkFJTFRVTkVTICs9ICJ4ODYiCitUVU5FX0ZFQVRVUkVTX3R1bmUteDg2ID0gIm0zMiIKK0JBU0VfTElCX3R1bmUteDg2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXg4NiA9ICJ4ODYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2ID0gIiR7VFVORV9QS0dBUkNIX3R1bmUteDg2fSIKKworQVZBSUxUVU5FUyArPSAieDg2LTY0IgorVFVORV9GRUFUVVJFU190dW5lLXg4Ni02NCA9ICJtNjQiCitCQVNFX0xJQl90dW5lLXg4Ni02NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NCA9ICJ4ODZfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2LTY0ID0gIiR7VFVORV9QS0dBUkNIX3R1bmUteDg2LTY0fSIKKworQVZBSUxUVU5FUyArPSAieDg2LTY0LXgzMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQteDMyID0gIm14MzIiCitCQVNFX0xJQl90dW5lLXg4Ni02NC14MzIgPSAibGlieDMyIgorVFVORV9QS0dBUkNIX3R1bmUteDg2LTY0LXgzMiA9ICJ4ODZfNjRfeDMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NC14MzIgPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjQteDMyfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGFkMDNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mCkBAIC0wLDAgKzEsMTIgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBhcm1fdmVyc2F0aWxlXzkyNmVqcworI0BERVNDUklQVElPTjogYXJtX3ZlcnNhdGlsZV85MjZlanMKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKKyNyZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtMTEzNmpmLXMuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiekltYWdlIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eUFNQTAgMTE1MjAwO3R0eUFNQTEiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybTY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1OWQwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mCkBAIC0wLDAgKzEsMTIgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBnZW5lcmljIGFybXY4IG1hY2hpbmUKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhIGdlbmVyaWMgYXJtdjgKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKKworTUFDSElORV9GRUFUVVJFUyA9ICIiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiSW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIzODQwMDt0dHlBTUEwIDM4NDAwO2h2YzAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY4MTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZgpAQCAtMCwwICsxLDEzIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogbXRpX21hbHRhMzJfYmUgTUlQUworI0BERVNDUklQVElPTjogbXRpX21hbHRhMzJfYmUKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2YxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwczY0LmNvbmYKQEAgLTAsMCArMSwxMyBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IG10aS1tYWx0YTY0LWJlIE1JUFM2NAorI0BERVNDUklQVElPTjogbXRpLW1hbHRhNjQtYmUKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWNiYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdXBwYy5jb25mCkBAIC0wLDAgKzEsMTEgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBxZW11IFBQQyBFbXVsYXRvciBzZXR1cAorI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGFuIFBQQyBzeXN0ZW0gdW5kZXIgcWVtdSBlbXVsYXRpb24KKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZkNDNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni02NC5jb25mCkBAIC0wLDAgKzEsMjkgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBjb21tb25fcGMKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhIGNvbW1vbiB4ODYKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCitERUZBVUxUVFVORSA/PSAiY29yZTItNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiYnpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKK1hTRVJWRVIgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgIHhmODYtaW5wdXQtdm1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1jaXJydXMgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby12bXdhcmUiCisKK01BQ0hJTkVfRkVBVFVSRVMgKz0gIng4NiIKKworTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgKz0gInY4NmQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjZWE2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYuY29uZgpAQCAtMCwwICsxLDI4IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogY29tbW9uX3BjCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBjb21tb24geDg2CisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiYnpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKK1hTRVJWRVIgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgIHhmODYtaW5wdXQtdm1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1jaXJydXMgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby12bXdhcmUiCisKK01BQ0hJTkVfRkVBVFVSRVMgKz0gIng4NiIKKworTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgKz0gInY4NmQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgYi9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4NmUwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9taWdyYXRlX2xvY2FsY291bnQuY29uZgpAQCAtMCwwICsxIEBACitJTkhFUklUICs9ICJtaWdyYXRlX2xvY2FsY291bnQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZiBiL21ldGEvY29uZi9tdWx0aWxpYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YThlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZgpAQCAtMCwwICsxLDI2IEBACisKK2Jhc2VsaWIgPSAiJHtAZC5nZXRWYXIoJ0JBU0VfTElCX3R1bmUtJyArIChkLmdldFZhcignREVGQVVMVFRVTkUnLCBUcnVlKSBvciAnSU5WQUxJRCcpLCBUcnVlKSBvciBkLmdldFZhcignQkFTRUxJQicsIFRydWUpfSIKKworTVVMVElMSUJfVkFSSUFOVFMgPSAiJHtAZXh0ZW5kX3ZhcmlhbnRzKGQsJ01VTFRJTElCUycsJ211bHRpbGliJyl9IgorTVVMVElMSUJfU0FWRV9WQVJOQU1FID0gIkRFRkFVTFRUVU5FIFRBUkdFVF9BUkNIIFRBUkdFVF9TWVMiCisKK01VTFRJTElCUyA/Pz0gIm11bHRpbGliOmxpYjMyIgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TUxQUkVGSVh9JHtNQUNISU5FfSIKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0iCitQS0dEQVRBX0RJUiA9ICIke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9L3BrZ2RhdGEiCisKK0lOSEVSSVQgKz0gIm11bHRpbGliX2dsb2JhbCIKKworQkJDTEFTU0VYVEVORF9hcHBlbmQgPSAiICR7TVVMVElMSUJTfSIKKworTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTID89ICJsaWIzMiBsaWI2NCBsaWJ4MzIiCisKK09QS0dfQVJHU19hcHBlbmQgPSAiIC0tZm9yY2UtbWFpbnRhaW5lciAtLWZvcmNlLW92ZXJ3cml0ZSIKKworIyBXaGVuIG11bHRpbGliIGlzIGVuYWJsZWQsIGFsbGFyY2ggcmVjaXBlcyB3aWxsIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBNQUNISU5FCisjIHN5c3Jvb3QsIG5vdCBNTFBSRUZJWE1BQ0hJTkUuICBUaGlzIG1lYW5zIHRoYXQgYW55dGhpbmcgdXNpbmcgcGtnLWNvbmZpZyB0bworIyBmaW5kIGFuIGFsbGFyY2ggcGtnY29uZmlnIGZpbGUgd2lsbCBmYWlsIGFzIHRoZSBQS0dfQ09ORklHX1BBVEggb25seSBsb29rcworIyBpbnNpZGUgdGhlIG11bHRpbGliIHN5c3Jvb3QuICBGaXggdGhpcyBieSBleHBsaWNpdGx5IGFkZGluZyB0aGUgTUFDSElORSdzCisjIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBwa2djb25maWcgbG9jYXRpb24gdG8gUEtHX0NPTkZJR19QQVRILgorUEtHX0NPTkZJR19QQVRIIC49ICI6JHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSR7ZGF0YWRpcn0vcGtnY29uZmlnIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3ByZXhwb3J0LmNvbmYgYi9tZXRhL2NvbmYvcHJleHBvcnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmYzYWNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3ByZXhwb3J0LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAicHJleHBvcnQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvcHJpbXBvcnQuY29uZiBiL21ldGEvY29uZi9wcmltcG9ydC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGVhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvcHJpbXBvcnQuY29uZgpAQCAtMCwwICsxIEBACitJTkhFUklUICs9ICJwcmltcG9ydCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zYW5pdHkuY29uZiBiL21ldGEvY29uZi9zYW5pdHkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE1NmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3Nhbml0eS5jb25mCkBAIC0wLDAgKzEsMTYgQEAKKyMgU2FuaXR5IGNoZWNrcyBmb3IgY29tbW9uIHVzZXIgbWlzY29uZmlndXJhdGlvbnMKKyMKKyMgU2VlIHNhbml0eS5iYmNsYXNzCisjCisjIEV4cGVydCB1c2VycyBjYW4gY29uZmlybSB0aGVpciBzYW5pdHkgd2l0aCAidG91Y2ggY29uZi9zYW5pdHkuY29uZiIKK0JCX01JTl9WRVJTSU9OID0gIjEuMjcuMSIKKworU0FOSVRZX0FCSUZJTEUgPSAiJHtUTVBESVJ9L2FiaV92ZXJzaW9uIgorCitTQU5JVFlfVkVSU0lPTiA/PSAiMSIKK0xPQ0FMQ09ORl9WRVJTSU9OICA/PSAiMSIKK0xBWUVSX0NPTkZfVkVSU0lPTiA/PSAiNiIKK1NJVEVfQ09ORl9WRVJTSU9OICA/PSAiMSIKKworSU5IRVJJVCArPSAic2FuaXR5IgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QgYi9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkYjhmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2JsYWNrbGlzdApAQCAtMCwwICsxLDYgQEAKK2xpYm5lb24yNy1nbnV0bHMKK29wZW5qZGstNi1qcmUtaGVhZGxlc3MKK29wZW5qZGstNi1qcmUtbGliCitvcGVuamRrLTYtanJlCitsaWJkYnVzLTEtMworbGlibmVvbjI3LWdudXRscwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvZmlsdGVycyBiL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0N2Y3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMKQEAgLTAsMCArMSw3IEBACisvdXNyL2xvY2FsL2xpYi9weXRob24yLjYKKy91c3IvbGliL3B5dGhvbjIuNgorL3Vzci9saWIvcHltb2R1bGVzL3B5dGhvbjIuNgorL3Vzci9saWIvcGVybC81LjEwCisjIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRlYmlhbnV0aWxzIHBhY2thZ2VzLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBwdXQgdGhlIGVudGlyZQorIyBkZWJpYW51dGlscyBwYWNrYWdlIGluIHRoZSB3aGl0ZWxpc3QuCisvdXNyL2Jpbi93aGljaApkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0IGIvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmU5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC93aGl0ZWxpc3QKQEAgLTAsMCArMSwyMyBAQAorYmFzZS1maWxlcworZGFzaAorbGliYWNsMQorbGliYXR0cjEKK2xpYmJ6Mi0xLjAKK2xpYmM2CitsaWJjLWJpbgorbGliZ2xpYjIuMC0wCitsaWJuY3Vyc2VzNQorbGlic2VsaW51eDEKK2xpYnNxbGl0ZTMtMAorbGlic3NsMC45LjgKK21pbWUtc3VwcG9ydAorcGVybC1iYXNlCitweXRob24yLjYKK3B5dGhvbjIuNi1taW5pbWFsCitweXRob24tYXBwb3J0CitweXRob24tZ3N0MC4xMAorcHl0aG9uLWltYWdpbmcKK3B5dGhvbi1taW5pbWFsCitweXRob24tc3VwcG9ydAorcHl0aG9uLXpvcGUuaW50ZXJmYWNlCit6bGliMWcKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvYmxhY2tsaXN0IGIvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9ibGFja2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2YmNiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvYmxhY2tsaXN0CkBAIC0wLDAgKzEsMiBAQAordWRldgorZGtwZwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzIGIvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTBmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2ZpbHRlcnMKQEAgLTAsMCArMSwxMCBAQAorL3RtcAorL2V0Yy9sb2NhbHRpbWUKKy9ldGMvbGQuc28uY2FjaGUKKy9ldGMvbGQuc28uY29uZgorL2V0Yy9wYXNzd2QKKy9ldGMvZ3JvdXAKKy9ldGMvbnNzd2l0Y2guY29uZgorL3Byb2MKKy9kZXYvbnVsbAorL2Rldi90dHkKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0IGIvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy93aGl0ZWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlYzJhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0CkBAIC0wLDAgKzEsMTUgQEAKK2Jhc2gKK2J6aXAyCitjY2FjaGUKK2NvcmV1dGlscworY3BwCitmaWxlCitmaW5kdXRpbHMKK2dhd2sKK2dyZXAKK2hvc3RuYW1lCittYWtlCitzZWQKK3RhcgordXRpbC1saW51eAoremxpYjFnCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbiBiL21ldGEvY29uZi90b2FzdGVyY29uZi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTQyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbgpAQCAtMCwwICsxLDEwNiBAQAoreworICAgICJjb25maWciOiB7CisgICAgICAgICJNQUNISU5FIiAgICAgIDogInFlbXV4ODYiLAorICAgICAgICAiRElTVFJPIiAgICAgICA6ICJwb2t5IiwKKyAgICAgICAgIklNQUdFX0ZTVFlQRVMiOiAiZXh0MyBqZmZzMiB0YXIuYnoyIiwKKyAgICAgICAgIklNQUdFX0lOU1RBTExfYXBwZW5kIjogIiIsCisgICAgICAgICJQQUNLQUdFX0NMQVNTRVMiOiAicGFja2FnZV9ycG0iLAorICAgICAgICAiU0RLTUFDSElORSIgICA6ICJ4ODZfNjQiCisgICAgfSwKKyAgICAibGF5ZXJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJMb2NhbCBPcGVuRW1iZWRkZWQiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibG9jYWwiLAorICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJIRUFEIiwgIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0sCisgICAgICAgICAgICAibGF5ZXJzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAib3BlbmVtYmVkZGVkLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhIiwKKyAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJPcGVuRW1iZWRkZWQiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibGF5ZXJpbmRleCIsCisgICAgICAgICAgICAiYXBpdXJsIjogImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2FwaS8iLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkltcG9ydGVkIGxheWVycyIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCisgICAgICAgICAgICAiYXBpdXJsIjogIiIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5IiwgIkhFQUQiXQorCisgICAgICAgIH0KKyAgICBdLAorICAgICJiaXRiYWtlIiA6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImZpZG8iLAorICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiMS4yNiIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIjEuMjQiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9CisgICAgXSwKKworICAgICJkZWZhdWx0cmVsZWFzZSI6ICJtYXN0ZXIiLAorCisgICAgInJlbGVhc2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBtYXN0ZXIiLAorICAgICAgICAgICAgImJpdGJha2UiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvXCI+T3BlbkVtYmVkZGVkIG1hc3RlcjwvYT4gYnJhbmNoLCB3aGVyZSBhY3RpdmUgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UuIFRoaXMgaXMgbm90IGEgc3RhYmxlIGJyYW5jaCwgc28geW91ciBidWlsZHMgbWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgRmlkbyIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvP2g9Zmlkb1wiPk9wZW5FbWJlZGRlZCBcIkZpZG9cIjwvYT4gYnJhbmNoIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3BlbkVtYmVkZGVkIERpenp5IiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogImRpenp5IiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZGl6enkiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nLz9oPWRpenp5XCI+T3BlbkVtYmVkZGVkIFwiRGl6enlcIjwvYT4gYnJhbmNoIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogIkhFQUQiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIE9wZW5FbWJlZGRlZCB0aGF0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BQUwKQEAgLTAsMCArMSw1MSBAQAorCitBdHRyaWJ1dGlvbiBBc3N1cmFuY2UgTGljZW5zZQorQ29weXJpZ2h0IChjKSAyMDAyIGJ5IEFVVEhPUgorUFJPRkVTU0lPTkFMIElERU5USUZJQ0FUSU9OICogVVJMCisiUFJPTU9USU9OQUwgU0xPR0FOIEZPUiBBVVRIT1JgUyBQUk9GRVNTSU9OQUwgUFJBQ1RJQ0UiCisKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKK0FUVFJJQlVUSU9OIEFTU1VSQU5DRSBMSUNFTlNFIChhZGFwdGVkIGZyb20gdGhlIG9yaWdpbmFsIEJTRCBsaWNlbnNlKQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBhcmUgbWV0LgorVGhlc2UgY29uZGl0aW9ucyByZXF1aXJlIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIDxBVVRIT1I+ICh0aGUKKyJBdXRob3IiKSwgd2hvIGhvcGVzIHRoYXQgaXRzIHByb21vdGlvbmFsIHZhbHVlIG1heSBoZWxwIGp1c3RpZnkgdGhlCit0aG91c2FuZHMgb2YgZG9sbGFycyBpbiBvdGhlcndpc2UgYmlsbGFibGUgdGltZSBpbnZlc3RlZCBpbiB3cml0aW5nCit0aGlzIGFuZCBvdGhlciBmcmVlbHkgYXZhaWxhYmxlLCBvcGVuLXNvdXJjZSBzb2Z0d2FyZS4KKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlLCBpbiB3aG9sZSBvciBwYXJ0IGFuZCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiAodGhlICJDb2RlIiksIG11c3QgcHJvbWluZW50bHkgZGlzcGxheSB0aGlzIEdQRy1zaWduZWQKK3RleHQgaW4gdmVyaWZpYWJsZSBmb3JtLgorMi4gUmVkaXN0cmlidXRpb25zIG9mIHRoZSBDb2RlIGluIGJpbmFyeSBmb3JtIG11c3QgYmUgYWNjb21wYW5pZWQgYnkKK3RoaXMgR1BHLXNpZ25lZCB0ZXh0IGluIGFueSBkb2N1bWVudGF0aW9uIGFuZCwgZWFjaCB0aW1lIHRoZSByZXN1bHRpbmcKK2V4ZWN1dGFibGUgcHJvZ3JhbSBvciBhIHByb2dyYW0gZGVwZW5kZW50IHRoZXJlb24gaXMgbGF1bmNoZWQsIGEKK3Byb21pbmVudCBkaXNwbGF5IChlLmcuLCBzcGxhc2ggc2NyZWVuIG9yIGJhbm5lciB0ZXh0KSBvZiB0aGUgQXV0aG9yYHMKK2F0dHJpYnV0aW9uIGluZm9ybWF0aW9uLCB3aGljaCBpbmNsdWRlczoKKyhhKSBOYW1lICgiQVVUSE9SIiksCisoYikgUHJvZmVzc2lvbmFsIGlkZW50aWZpY2F0aW9uICgiUFJPRkVTU0lPTkFMIElERU5USUZJQ0FUSU9OIiksIGFuZAorKGMpIFVSTCAoIlVSTCIpLgorMy4gTmVpdGhlciB0aGUgbmFtZSBub3IgYW55IHRyYWRlbWFyayBvZiB0aGUgQXV0aG9yIG1heSBiZSB1c2VkIHRvCitlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorNC4gVXNlcnMgYXJlIGVudGlyZWx5IHJlc3BvbnNpYmxlLCB0byB0aGUgZXhjbHVzaW9uIG9mIHRoZSBBdXRob3IgYW5kCithbnkgb3RoZXIgcGVyc29ucywgZm9yIGNvbXBsaWFuY2Ugd2l0aCAoMSkgcmVndWxhdGlvbnMgc2V0IGJ5IG93bmVycyBvcgorYWRtaW5pc3RyYXRvcnMgb2YgZW1wbG95ZWQgZXF1aXBtZW50LCAoMikgbGljZW5zaW5nIHRlcm1zIG9mIGFueSBvdGhlcgorc29mdHdhcmUsIGFuZCAoMykgbG9jYWwgcmVndWxhdGlvbnMgcmVnYXJkaW5nIHVzZSwgaW5jbHVkaW5nIHRob3NlCityZWdhcmRpbmcgaW1wb3J0LCBleHBvcnQsIGFuZCB1c2Ugb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4KKworVEhJUyBGUkVFIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitFRkZFQ1RTIE9GIFVOQVVUSE9SSVpFRCBPUiBNQUxJQ0lPVVMgTkVUV09SSyBBQ0NFU1M7CitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCitJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tRW5kIG9mIExpY2Vuc2UKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTEuMiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxMzFlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0xLjIKQEAgLTAsMCArMSwxMjMgQEAKKworICBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKKyAgVmVyc2lvbiAxLjIKKworVGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwIAorKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgCitmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIAorT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDEuMgorCitHcmFudCBvZiBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgCitjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrICgiWW91IikgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIAorbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSAoMSkgdG8gdXNlLCBjb3B5LCAKK21vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSAKK09yaWdpbmFsIFdvcmsgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgYW5kICgyKSB1bmRlciBwYXRlbnQgY2xhaW1zIAorb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIAorV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciAKK3NhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgc3ViamVjdCB0byB0aGUgCitmb2xsb3dpbmcgY29uZGl0aW9ucy4KKworQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgCitEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayAKK25vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IAorbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAKKyJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIAorV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IAorY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCitFeGNsdXNpb25zIGZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgCituYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIAordHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgCitkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gCitvZiB0aGUgTGljZW5zb3IuCisKK1dhcnJhbnR5IGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgCitpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIHRoYXQgdGhlIE9yaWdpbmFsIAorV29yayBpcyBkaXN0cmlidXRlZCBieSBMaWNlbnNvciB1bmRlciBhIHZhbGlkIGN1cnJlbnQgbGljZW5zZSBmcm9tIHRoZSAKK2NvcHlyaWdodCBvd25lci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgCitzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgCitCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IAorbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgCitXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgCitvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgCit1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIAord2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSAKK0xpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgCitpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IAorb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IAorbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSAKK29yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIAorbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgCitpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgCitwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgCitsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgCitsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCitMaWNlbnNlIHRvIFNvdXJjZSBDb2RlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiAKK3RoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSAKK2RvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgCithZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIAorV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiAKK0xpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgCittYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIAorYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IAorcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgCitmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCitNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgCithdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSAKK2J5IHRoaXMgTGljZW5zZSBpZiBZb3UgZmlsZSBhIGxhd3N1aXQgaW4gYW55IGNvdXJ0IGFsbGVnaW5nIHRoYXQgYW55IE9TSSAKK0NlcnRpZmllZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIGFueSBsaWNlbnNlIGNvbnRhaW5pbmcgCit0aGlzICJNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24iIGNsYXVzZSBpbmZyaW5nZXMgYW55IHBhdGVudCAKK2NsYWltcyB0aGF0IGFyZSBlc3NlbnRpYWwgdG8gdXNlIHRoYXQgc29mdHdhcmUuCisKK1JpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSAKK3Jlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIAorbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAyIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCAKK21vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIAorcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCistLSAKK0VORCBPRiBMSUNFTlNFLiBUaGUgZm9sbG93aW5nIGlzIGludGVuZGVkIHRvIGRlc2NyaWJlIHRoZSBlc3NlbnRpYWwgCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKEFGTCkgdmVyc2lvbiAxLjAgYW5kIG90aGVyIAorb3BlbiBzb3VyY2UgbGljZW5zZXM6CisKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgaXMgc2ltaWxhciB0byB0aGUgQlNELCBNSVQsIFVvSS9OQ1NBIGFuZCBBcGFjaGUgCitsaWNlbnNlcyBpbiBtYW55IHJlc3BlY3RzIGJ1dCBpdCBpcyBpbnRlbmRlZCB0byBzb2x2ZSBhIGZldyBwcm9ibGVtcyB3aXRoIAordGhvc2UgbGljZW5zZXMuCisgICAgCisqIFRoZSBBRkwgaXMgd3JpdHRlbiBzbyBhcyB0byBtYWtlIGl0IGNsZWFyIHdoYXQgc29mdHdhcmUgaXMgYmVpbmcgCitsaWNlbnNlZCAoYnkgdGhlIGluY2x1c2lvbiBvZiBhIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgCitpbiB0aGUgc29mdHdhcmUpLiBUaGlzIHdheSwgdGhlIGxpY2Vuc2UgZnVuY3Rpb25zIGJldHRlciB0aGFuIGEgdGVtcGxhdGUgCitsaWNlbnNlLiBUaGUgQlNELCBNSVQgYW5kIFVvSS9OQ1NBIGxpY2Vuc2VzIGFwcGx5IHRvIHVuaWRlbnRpZmllZCBzb2Z0d2FyZS4KKyAgICAKKyogVGhlIEFGTCBjb250YWlucyBhIGNvbXBsZXRlIGNvcHlyaWdodCBncmFudCB0byB0aGUgc29mdHdhcmUuIFRoZSBCU0QgCithbmQgQXBhY2hlIGxpY2Vuc2VzIGFyZSB2YWd1ZSBhbmQgaW5jb21wbGV0ZSBpbiB0aGF0IHJlc3BlY3QuCisgICAgCisqIFRoZSBBRkwgY29udGFpbnMgYSBjb21wbGV0ZSBwYXRlbnQgZ3JhbnQgdG8gdGhlIHNvZnR3YXJlLiBUaGUgQlNELCBNSVQsIAorVW9JL05DU0EgYW5kIEFwYWNoZSBsaWNlbnNlcyByZWx5IG9uIGFuIGltcGxpZWQgcGF0ZW50IGxpY2Vuc2UgYW5kIGNvbnRhaW4gCitubyBleHBsaWNpdCBwYXRlbnQgZ3JhbnQuCisgICAgCisqIFRoZSBBRkwgbWFrZXMgaXQgY2xlYXIgdGhhdCBubyB0cmFkZW1hcmsgcmlnaHRzIGFyZSBncmFudGVkIHRvIHRoZSAKK2xpY2Vuc29yYHMgdHJhZGVtYXJrcy4gVGhlIEFwYWNoZSBsaWNlbnNlIGNvbnRhaW5zIHN1Y2ggYSBwcm92aXNpb24sIGJ1dCB0aGUgCitCU0QsIE1JVCBhbmQgVW9JL05DU0EgbGljZW5zZXMgZG8gbm90LgorICAgIAorKiBUaGUgQUZMIGluY2x1ZGVzIHRoZSB3YXJyYW50eSBieSB0aGUgbGljZW5zb3IgdGhhdCBpdCBlaXRoZXIgb3ducyB0aGUgCitjb3B5cmlnaHQgb3IgdGhhdCBpdCBpcyBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlIHVuZGVyIGEgbGljZW5zZS4gTm9uZSBvZiAKK3RoZSBvdGhlciBsaWNlbnNlcyBjb250YWluIHRoYXQgd2FycmFudHkuIEFsbCBvdGhlciB3YXJyYW50aWVzIGFyZSBkaXNjbGFpbWVkLCAKK2FzIGlzIHRoZSBjYXNlIGZvciB0aGUgb3RoZXIgbGljZW5zZXMuCisKKyogVGhlIEFGTCBpcyBpdHNlbGYgY29weXJpZ2h0ZWQgKHdpdGggdGhlIHJpZ2h0IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSAKK3dpdGhvdXQgbW9kaWZpY2F0aW9uKS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG93bmVyIG9mIHRoZSBjb3B5cmlnaHQgdG8gdGhlIAorbGljZW5zZSB3aWxsIGNvbnRyb2wgY2hhbmdlcy4gVGhlIEFwYWNoZSBsaWNlbnNlIGNvbnRhaW5zIGEgY29weXJpZ2h0IG5vdGljZSwgCitidXQgdGhlIEJTRCwgTUlUIGFuZCBVb0kvTkNTQSBsaWNlbnNlcyBkbyBub3QuIAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDI3YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMApAQCAtMCwwICsxLDQ4IEBACisKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKKyB2LiAyLjAKKworVGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6ICAgCitMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4wCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6IAorYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllczsgCisKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOyAKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYzsgCisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZCAKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4gICAKKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4gIAorCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuICBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuICBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLiAgICAKKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uICBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4gIAorCis1KSBUaGlzIHNlY3Rpb24gaW50ZW50aW9uYWxseSBvbWl0dGVkLiAgCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iICBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuICAKKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuICBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4gIAorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yYHMgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uICBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuICAKKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmIFlvdSBkaXN0cmlidXRlICBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuICBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAxIGhlcmVpbiwgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuICAgIAorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgKGkpIGFnYWluc3QgTGljZW5zb3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgb3IgKGlpKSBhZ2FpbnN0IGFueSBlbnRpdHkgd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gdGhlIE9yaWdpbmFsIFdvcmsgKGJ1dCBleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpLiAgICAKKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiAgVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuICBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuIMKkIDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiAgVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIAorCisxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuICAKKworMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuICAgIAorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuICBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuICAgCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LiAgICAKKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMyBMYXdyZW5jZSBFLiBSb3Nlbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiAgVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4gCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyODRlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4xCkBAIC0wLDAgKzEsNTAgQEAKKworVGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZQordi4gMi4xCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4xCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7CisKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgVGhpcyBzZWN0aW9uIGludGVudGlvbmFsbHkgb21pdHRlZC4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gJiMxOTQ7JiMxNjc7IDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2YzI1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0zLjAKQEAgLTAsMCArMSwyNyBAQAorCitBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKCYjODIyMDtBRkwmIzgyMjE7KSB2LiAzLjAKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDMuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzoKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGVyZWJ5IGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKK2MpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHVuZGVyIGFueSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlIHRoYXQgZG9lcyBub3QgY29udHJhZGljdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGluY2x1ZGluZyBMaWNlbnNvciYjODIxNztzIHJlc2VydmVkIHJpZ2h0cyBhbmQgcmVtZWRpZXMsIGluIHRoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlOworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBhdGVudHMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kIGltcG9ydCB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay4KKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4sIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGdyYW50cyBhbnkgbGljZW5zZSB0byBMaWNlbnNvciYjODIxNztzIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eS4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIG9yIGltcG9ydCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLgorNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2Ygbm9uLWluZnJpbmdlbWVudCwgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueW9uZSBmb3IgYW55IGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYsIGF0IGFueSB0aW1lLCBZb3UgZXhwcmVzc2x5IGFzc2VudGVkIHRvIHRoaXMgTGljZW5zZSwgdGhhdCBhc3NlbnQgaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMgeW91ciByaWdodHMgdG8gdW5kZXJ0YWtlIHRoZSBhY3Rpdml0aWVzIGxpc3RlZCBpbiBTZWN0aW9uIDEsIGluY2x1ZGluZyB5b3VyIHJpZ2h0IHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGFmZmVjdCBjb3B5cmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMgKGluY2x1ZGluZyAmIzgyMjA7ZmFpciB1c2UmIzgyMjE7IG9yICYjODIyMDtmYWlyIGRlYWxpbmcmIzgyMjE7KS4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24geW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMShjKS4KKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiBjb3B5cmlnaHQgb3IgcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorMTIpIEF0dG9ybmV5cyYjODIxNzsgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorMTYpIE1vZGlmaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBpcyBDb3B5cmlnaHQgJiMxNjk7IDIwMDUgTGF3cmVuY2UgUm9zZW4uIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBjb21tdW5pY2F0ZSB0aGlzIExpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHBlcm1pdHMgWW91IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UgYXMgYXBwbGllZCB0byB0aGUgT3JpZ2luYWwgV29yayBvciB0byBEZXJpdmF0aXZlIFdvcmtzLiBIb3dldmVyLCBZb3UgbWF5IG1vZGlmeSB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UgYW5kIGNvcHksIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgeW91ciBtb2RpZmllZCB2ZXJzaW9uICh0aGUgIk1vZGlmaWVkIExpY2Vuc2UiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGkpIFlvdSBtYXkgbm90IGluZGljYXRlIGluIGFueSB3YXkgdGhhdCB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaXMgdGhlICJBY2FkZW1pYyBGcmVlIExpY2Vuc2UiIG9yICJBRkwiIGFuZCB5b3UgbWF5IG5vdCB1c2UgdGhvc2UgbmFtZXMgaW4gdGhlIG5hbWUgb2YgeW91ciBNb2RpZmllZCBMaWNlbnNlOyAoaWkpIFlvdSBtdXN0IHJlcGxhY2UgdGhlIG5vdGljZSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBhYm92ZSB3aXRoIHRoZSBub3RpY2UgIkxpY2Vuc2VkIHVuZGVyIDxpbnNlcnQgeW91ciBsaWNlbnNlIG5hbWUgaGVyZT4iIG9yIHdpdGggYSBub3RpY2Ugb2YgeW91ciBvd24gdGhhdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGUgbm90aWNlIGluIHRoaXMgTGljZW5zZTsgYW5kIChpaWkpIFlvdSBtYXkgbm90IGNsYWltIHRoYXQgeW91ciBvcmlnaW5hbCB3b3JrcyBhcmUgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdW5sZXNzIHlvdXIgTW9kaWZpZWQgTGljZW5zZSBoYXMgYmVlbiBhcHByb3ZlZCBieSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIGFuZCBZb3UgY29tcGx5IHdpdGggaXRzIGxpY2Vuc2UgcmV2aWV3IGFuZCBjZXJ0aWZpY2F0aW9uIHByb2Nlc3MuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FHUEwtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUdQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhMTNlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FHUEwtMy4wCkBAIC0wLDAgKzEsNjYxIEBACisgICAgICAgICAgICAgICAgICAgIEdOVSBBRkZFUk8gR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDE5IE5vdmVtYmVyIDIwMDcKKworIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MsIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBlbnN1cmUKK2Nvb3BlcmF0aW9uIHdpdGggdGhlIGNvbW11bml0eSBpbiB0aGUgY2FzZSBvZiBuZXR3b3JrIHNlcnZlciBzb2Z0d2FyZS4KKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK291ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIERldmVsb3BlcnMgdGhhdCB1c2Ugb3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIHByb3RlY3QgeW91ciByaWdodHMKK3dpdGggdHdvIHN0ZXBzOiAoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIKK3lvdSB0aGlzIExpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZQorYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQSBzZWNvbmRhcnkgYmVuZWZpdCBvZiBkZWZlbmRpbmcgYWxsIHVzZXJzJyBmcmVlZG9tIGlzIHRoYXQKK2ltcHJvdmVtZW50cyBtYWRlIGluIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiB0aGUgcHJvZ3JhbSwgaWYgdGhleQorcmVjZWl2ZSB3aWRlc3ByZWFkIHVzZSwgYmVjb21lIGF2YWlsYWJsZSBmb3Igb3RoZXIgZGV2ZWxvcGVycyB0bworaW5jb3Jwb3JhdGUuICBNYW55IGRldmVsb3BlcnMgb2YgZnJlZSBzb2Z0d2FyZSBhcmUgaGVhcnRlbmVkIGFuZAorZW5jb3VyYWdlZCBieSB0aGUgcmVzdWx0aW5nIGNvb3BlcmF0aW9uLiAgSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2YKK3NvZnR3YXJlIHVzZWQgb24gbmV0d29yayBzZXJ2ZXJzLCB0aGlzIHJlc3VsdCBtYXkgZmFpbCB0byBjb21lIGFib3V0LgorVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbWFraW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBhbmQKK2xldHRpbmcgdGhlIHB1YmxpYyBhY2Nlc3MgaXQgb24gYSBzZXJ2ZXIgd2l0aG91dCBldmVyIHJlbGVhc2luZyBpdHMKK3NvdXJjZSBjb2RlIHRvIHRoZSBwdWJsaWMuCisKKyAgVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgdG8KK2Vuc3VyZSB0aGF0LCBpbiBzdWNoIGNhc2VzLCB0aGUgbW9kaWZpZWQgc291cmNlIGNvZGUgYmVjb21lcyBhdmFpbGFibGUKK3RvIHRoZSBjb21tdW5pdHkuICBJdCByZXF1aXJlcyB0aGUgb3BlcmF0b3Igb2YgYSBuZXR3b3JrIHNlcnZlciB0bworcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb24gcnVubmluZyB0aGVyZSB0byB0aGUKK3VzZXJzIG9mIHRoYXQgc2VydmVyLiAgVGhlcmVmb3JlLCBwdWJsaWMgdXNlIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiwgb24KK2EgcHVibGljbHkgYWNjZXNzaWJsZSBzZXJ2ZXIsIGdpdmVzIHRoZSBwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UKK2NvZGUgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb24uCisKKyAgQW4gb2xkZXIgbGljZW5zZSwgY2FsbGVkIHRoZSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK3B1Ymxpc2hlZCBieSBBZmZlcm8sIHdhcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoIHNpbWlsYXIgZ29hbHMuICBUaGlzIGlzCithIGRpZmZlcmVudCBsaWNlbnNlLCBub3QgYSB2ZXJzaW9uIG9mIHRoZSBBZmZlcm8gR1BMLCBidXQgQWZmZXJvIGhhcworcmVsZWFzZWQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWZmZXJvIEdQTCB3aGljaCBwZXJtaXRzIHJlbGljZW5zaW5nIHVuZGVyCit0aGlzIGxpY2Vuc2UuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAwLiBEZWZpbml0aW9ucy4KKworICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKKyAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKKyJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQorZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCisKKyAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCisgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgordG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgIDEuIFNvdXJjZSBDb2RlLgorCisgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCitmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCitmb3JtIG9mIGEgd29yay4KKworICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycworY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2UuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CitzYW1lIHdvcmsuCisKKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKK2NvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKK25vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQordG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5Cit0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKK0xpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworICAxMy4gUmVtb3RlIE5ldHdvcmsgSW50ZXJhY3Rpb247IFVzZSB3aXRoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGlmIHlvdSBtb2RpZnkgdGhlCitQcm9ncmFtLCB5b3VyIG1vZGlmaWVkIHZlcnNpb24gbXVzdCBwcm9taW5lbnRseSBvZmZlciBhbGwgdXNlcnMKK2ludGVyYWN0aW5nIHdpdGggaXQgcmVtb3RlbHkgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmsgKGlmIHlvdXIgdmVyc2lvbgorc3VwcG9ydHMgc3VjaCBpbnRlcmFjdGlvbikgYW4gb3Bwb3J0dW5pdHkgdG8gcmVjZWl2ZSB0aGUgQ29ycmVzcG9uZGluZworU291cmNlIG9mIHlvdXIgdmVyc2lvbiBieSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZSwgdGhyb3VnaCBzb21lIHN0YW5kYXJkIG9yIGN1c3RvbWFyeQorbWVhbnMgb2YgZmFjaWxpdGF0aW5nIGNvcHlpbmcgb2Ygc29mdHdhcmUuICBUaGlzIENvcnJlc3BvbmRpbmcgU291cmNlCitzaGFsbCBpbmNsdWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYW55IHdvcmsgY292ZXJlZCBieSB2ZXJzaW9uIDMKK29mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGF0IGlzIGluY29ycG9yYXRlZCBwdXJzdWFudCB0byB0aGUKK2ZvbGxvd2luZyBwYXJhZ3JhcGguCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCitjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywKK2J1dCB0aGUgd29yayB3aXRoIHdoaWNoIGl0IGlzIGNvbWJpbmVkIHdpbGwgcmVtYWluIGdvdmVybmVkIGJ5IHZlcnNpb24KKzMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIDE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KKworICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgordGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zCit3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKK2J5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZQordmVyc2lvbnMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCitIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCitPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCitJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCitUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQorVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgorREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKK1BBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAorRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLgorCisgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK3N0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworICBJZiB5b3VyIHNvZnR3YXJlIGNhbiBpbnRlcmFjdCB3aXRoIHVzZXJzIHJlbW90ZWx5IHRocm91Z2ggYSBjb21wdXRlcgorbmV0d29yaywgeW91IHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGF0IGl0IHByb3ZpZGVzIGEgd2F5IGZvciB1c2VycyB0bworZ2V0IGl0cyBzb3VyY2UuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBwcm9ncmFtIGlzIGEgd2ViIGFwcGxpY2F0aW9uLCBpdHMKK2ludGVyZmFjZSBjb3VsZCBkaXNwbGF5IGEgIlNvdXJjZSIgbGluayB0aGF0IGxlYWRzIHVzZXJzIHRvIGFuIGFyY2hpdmUKK29mIHRoZSBjb2RlLiAgVGhlcmUgYXJlIG1hbnkgd2F5cyB5b3UgY291bGQgb2ZmZXIgc291cmNlLCBhbmQgZGlmZmVyZW50Citzb2x1dGlvbnMgd2lsbCBiZSBiZXR0ZXIgZm9yIGRpZmZlcmVudCBwcm9ncmFtczsgc2VlIHNlY3Rpb24gMTMgZm9yIHRoZQorc3BlY2lmaWMgcmVxdWlyZW1lbnRzLgorCisgIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgQUdQTCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BTlRMUi1QRCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FOVExSLVBECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDJhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BTlRMUi1QRApAQCAtMCwwICsxLDMyIEBACisKK0FOVExSIFNPRlRXQVJFIFJJR0hUUworCitBTlRMUiAxOTg5LTIwMDYgRGV2ZWxvcGVkIGJ5IFRlcmVuY2UgUGFycgorUGFydGlhbGx5IHN1cHBvcnRlZCBieSBVbml2ZXJzaXR5IG9mIFNhbiBGcmFuY2lzY28gJmFtcDsgakd1cnUuY29tCisKK1dlIHJlc2VydmUgbm8gbGVnYWwgcmlnaHRzIHRvIHRoZSBBTlRMUi0taXQgaXMgZnVsbHkgaW4gdGhlCitwdWJsaWMgZG9tYWluLiBBbiBpbmRpdmlkdWFsIG9yIGNvbXBhbnkgbWF5IGRvIHdoYXRldmVyCit0aGV5IHdpc2ggd2l0aCBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCB3aXRoIEFOVExSIG9yIHRoZQorY29kZSBnZW5lcmF0ZWQgYnkgQU5UTFIsIGluY2x1ZGluZyB0aGUgaW5jb3Jwb3JhdGlvbiBvZgorQU5UTFIsIG9yIGl0cyBvdXRwdXQsIGludG8gY29tbWVyaWNhbCBzb2Z0d2FyZS4KKworV2UgZW5jb3VyYWdlIHVzZXJzIHRvIGRldmVsb3Agc29mdHdhcmUgd2l0aCBBTlRMUi4gSG93ZXZlciwKK3dlIGRvIGFzayB0aGF0IGNyZWRpdCBpcyBnaXZlbiB0byB1cyBmb3IgZGV2ZWxvcGluZworQU5UTFIuIEJ5ICJjcmVkaXQiLCB3ZSBtZWFuIHRoYXQgaWYgeW91IHVzZSBBTlRMUiBvcgoraW5jb3Jwb3JhdGUgYW55IHNvdXJjZSBjb2RlIGludG8gb25lIG9mIHlvdXIgcHJvZ3JhbXMKKyhjb21tZXJjaWFsIHByb2R1Y3QsIHJlc2VhcmNoIHByb2plY3QsIG9yIG90aGVyd2lzZSkgdGhhdAoreW91IGFja25vd2xlZGdlIHRoaXMgZmFjdCBzb21ld2hlcmUgaW4gdGhlIGRvY3VtZW50YXRpb24sCityZXNlYXJjaCByZXBvcnQsIGV0Yy4uLiBJZiB5b3UgbGlrZSBBTlRMUiBhbmQgaGF2ZQorZGV2ZWxvcGVkIGEgbmljZSB0b29sIHdpdGggdGhlIG91dHB1dCwgcGxlYXNlIG1lbnRpb24gdGhhdAoreW91IGRldmVsb3BlZCBpdCB1c2luZyBBTlRMUi4gSW4gYWRkaXRpb24sIHdlIGFzayB0aGF0IHRoZQoraGVhZGVycyByZW1haW4gaW50YWN0IGluIG91ciBzb3VyY2UgY29kZS4gQXMgbG9uZyBhcyB0aGVzZQorZ3VpZGVsaW5lcyBhcmUga2VwdCwgd2UgZXhwZWN0IHRvIGNvbnRpbnVlIGVuaGFuY2luZyB0aGlzCitzeXN0ZW0gYW5kIGV4cGVjdCB0byBtYWtlIG90aGVyIHRvb2xzIGF2YWlsYWJsZSBhcyB0aGV5IGFyZQorY29tcGxldGVkLgorCitUaGUgcHJpbWFyeSBBTlRMUiBndXk6CisKK1RlcmVuY2UgUGFycgorcGFycnRAY3MudXNmY2EuZWR1CitwYXJydEBhbnRsci5vcmcKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwNWIxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQTC0xLjAKQEAgLTAsMCArMSwyMTggQEAKKworQURBUFRJVkUgUFVCTElDIExJQ0VOU0UKK1ZlcnNpb24gMS4wCitUSEUgTElDRU5TRUQgV09SSyBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBBREFQVElWRSBQVUJMSUMgTElDRU5TRSAoIkxJQ0VOU0UiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBDT05TVElUVVRFUyBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgTElDRU5TRSBBTkQgSVRTIFRFUk1TLCBXSEVUSEVSIE9SIE5PVCBTVUNIIFJFQ0lQSUVOVCBSRUFEUyBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiAiTElDRU5TRUQgV09SSyIgQU5EICJSRUNJUElFTlQiIEFSRSBERUZJTkVEIEJFTE9XLgorCitJTVBPUlRBTlQgTk9URTogVGhpcyBMaWNlbnNlIGlzICJhZGFwdGl2ZSIsIGFuZCB0aGUgZ2VuZXJpYyB2ZXJzaW9uIG9yIGFub3RoZXIgdmVyc2lvbiBvZiBhbiBBZGFwdGl2ZSBQdWJsaWMgTGljZW5zZSBzaG91bGQgbm90IGJlIHJlbGllZCB1cG9uIHRvIGRldGVybWluZSB5b3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCByZWFkIHRoZSBzcGVjaWZpYyBBZGFwdGl2ZSBQdWJsaWMgTGljZW5zZSB0aGF0IHlvdSByZWNlaXZlIHdpdGggdGhlIExpY2Vuc2VkIFdvcmssIGFzIGNlcnRhaW4gdGVybXMgYXJlIGRlZmluZWQgYXQgdGhlIG91dHNldCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvci4KKworU2VlIFNlY3Rpb24gMi4yIGJlbG93LCBFeGhpYml0IEEgYXR0YWNoZWQsIGFuZCBhbnkgU3VwcGZpbGUudHh0IGFjY29tcGFueWluZyB0aGlzIExpY2Vuc2UgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBhZGFwdGl2ZSBmZWF0dXJlcyBhcHBsaWNhYmxlIHRvIHRoaXMgTGljZW5zZS4gRm9yIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgKGEpIGZvciBzZWxlY3RlZCBjaG9pY2Ugb2YgbGF3IGFuZCBqdXJpc2RpY3Rpb24gc2VlIFBhcnQgMyBvZiBFeGhpYml0IEE7IChiKSBmb3IgdGhlIHNlbGVjdGVkIGRlZmluaXRpb24gb2YgVGhpcmQgUGFydHkgc2VlIFBhcnQgNCBvZiBFeGhpYml0IEE7IGFuZCAoYykgZm9yIHNlbGVjdGVkIHBhdGVudCBsaWNlbnNpbmcgdGVybXMgKGlmIGFueSkgc2VlIFNlY3Rpb24gMi4yIGJlbG93IGFuZCBQYXJ0IDYgb2YgRXhoaWJpdCBBLgorCisxLiBERUZJTklUSU9OUy4KKworMS4xLiAiQ09OVFJJQlVUSU9OIiBtZWFuczoKKworKGEpIEluIHRoZSBjYXNlIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgSW5pdGlhbCBXb3JrIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgYW5kCisKKyhiKSBJbiB0aGUgY2FzZSBvZiBlYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIHRoZSBTdWJzZXF1ZW50IFdvcmsgb3JpZ2luYXRpbmcgZnJvbSBhbmQgZGlzdHJpYnV0ZWQgYnkgc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLgorCisxLjIuICJERVNJR05BVEVEIFdFQiBTSVRFIiBtZWFucyB0aGUgd2ViIHNpdGUgaGF2aW5nIHRoZSBVUkwgaWRlbnRpZmllZCBpbiBQYXJ0IDEgb2YgRXhoaWJpdCBBLCB3aGljaCBVUkwgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYnkgcG9zdGluZyBvbiB0aGUgY3VycmVudCBEZXNpZ25hdGVkIFdlYiBTaXRlIHRoZSBuZXcgVVJMIGZvciBhdCBsZWFzdCBzaXh0eSAoNjApIGRheXMuCisKKzEuMy4gIkRJU1RSSUJVVE9SIiBtZWFucyBhbnkgUGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgdGhlIExpY2Vuc2VkIFdvcmsgb3IgYW55IHBvcnRpb24gdGhlcmVvZiB0byBhdCBsZWFzdCBvbmUgVGhpcmQgUGFydHkuCisKKzEuNC4gIkVMRUNUUk9OSUMgRElTVFJJQlVUSU9OIE1FQ0hBTklTTSIgbWVhbnMgYW55IG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAiRVhFQ1VUQUJMRSIgbWVhbnMgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAiR09WRVJOSU5HIEpVUklTRElDVElPTiIgbWVhbnMgdGhlIHN0YXRlLCBwcm92aW5jZSBvciBvdGhlciBsZWdhbCBqdXJpc2RpY3Rpb24gaWRlbnRpZmllZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLgorCisxLjcuICJJTkRFUEVOREVOVCBNT0RVTEUiIG1lYW5zIGEgc2VwYXJhdGUgbW9kdWxlIG9mIHNvZnR3YXJlIGFuZC9vciBkYXRhIHRoYXQgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIG9yIGNvcGllZCBmcm9tIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuIEluIGFkZGl0aW9uLCBhIG1vZHVsZSBkb2VzIG5vdCBxdWFsaWZ5IGFzIGFuIEluZGVwZW5kZW50IE1vZHVsZSBidXQgaW5zdGVhZCBmb3JtcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGlmIHRoZSBtb2R1bGU6IChhKSBpcyBlbWJlZGRlZCBpbiB0aGUgTGljZW5zZWQgV29yazsgKGIpIGlzIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGUgTGljZW5zZWQgV29yayBvdGhlciB0aGFuIGJ5IGEgZnVuY3Rpb24gY2FsbCBvciBhIGNsYXNzIHJlZmVyZW5jZTsgb3IgKGMpIG11c3QgYmUgaW5jbHVkZWQgb3IgY29udGFpbmVkLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aXRoaW4gYSBmaWxlIGRpcmVjdG9yeSBvciBzdWJkaXJlY3RvcnkgYWN0dWFsbHkgY29udGFpbmluZyBmaWxlcyBtYWtpbmcgdXAgdGhlIExpY2Vuc2VkIFdvcmsuCisKKzEuOC4gIklOSVRJQUwgQ09OVFJJQlVUT1IiIG1lYW5zIHRoZSBQZXJzb24gb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSByZXF1aXJlZCBieSBQYXJ0IDEgb2YgRXhoaWJpdCBBLgorCisxLjkuICJJTklUSUFMIFdPUksiIG1lYW5zIHRoZSBpbml0aWFsIFNvdXJjZSBDb2RlLCBvYmplY3QgY29kZSAoaWYgYW55KSBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNvbXB1dGVyIHByb2dyYW0gaWRlbnRpZmllZCBpbiBQYXJ0IDIgb2YgRXhoaWJpdCBBLCBhcyBzdWNoIFNvdXJjZSBDb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKKzEuMTAuICJMQVJHRVIgV09SSyIgbWVhbnMgYSB3b3JrIHRoYXQgY29tYmluZXMgdGhlIExpY2Vuc2VkIFdvcmsgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gIkxJQ0VOU0VEIFdPUksiIG1lYW5zIHRoZSBJbml0aWFsIFdvcmsgYW5kL29yIGFueSBTdWJzZXF1ZW50IFdvcmssIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS4xMi4gIkxJQ0VOU0UgTk9USUNFIiBoYXMgdGhlIG1lYW5pbmcgYXNzaWduZWQgaW4gUGFydCA1IG9mIEV4aGliaXQgQS4KKworMS4xMy4gIk1PRElGSUNBVElPTiIgb3IgIk1PRElGSUNBVElPTlMiIG1lYW5zIGFueSBjaGFuZ2UgdG8gYW5kL29yIGFkZGl0aW9uIHRvIHRoZSBMaWNlbnNlZCBXb3JrLgorCisxLjE0LiAiUEVSU09OIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIG90aGVyIGxlZ2FsIGVudGl0eSwgaW5jbHVkaW5nIGEgY29ycG9yYXRpb24sIHBhcnRuZXJzaGlwIG9yIG90aGVyIGJvZHkuCisKKzEuMTUuICJSRUNJUElFTlQiIG1lYW5zIGFueSBQZXJzb24gd2hvIHJlY2VpdmVzIG9yIG9idGFpbnMgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlIChieSB3YXkgb2YgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCBhbnkgU3Vic2VxdWVudCBDb250cmlidXRvciBvciBEaXN0cmlidXRvcikuCisKKzEuMTYuICJTT1VSQ0UgQ09ERSIgbWVhbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBhIGNvbXB1dGVyIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGFuZCBjb21wb25lbnRzIG9mIHRoZSBjb21wdXRlciBwcm9ncmFtLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBhbmQgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlLgorCisxLjE3LiAiU1VCU0VRVUVOVCBDT05UUklCVVRPUiIgbWVhbnMgYW55IFBlcnNvbiB0aGF0IG1ha2VzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBtYWtpbmcgb2YgYW55IFN1YnNlcXVlbnQgV29yayBhbmQgdGhhdCBkaXN0cmlidXRlcyB0aGF0IFN1YnNlcXVlbnQgV29yayB0byBhdCBsZWFzdCBvbmUgVGhpcmQgUGFydHkuCisKKzEuMTguICJTVUJTRVFVRU5UIFdPUksiIG1lYW5zIGEgd29yayB0aGF0IGhhcyByZXN1bHRlZCBvciBhcmlzZXMgZnJvbSBjaGFuZ2VzIHRvIGFuZC9vciBhZGRpdGlvbnMgdG86CisKKyhhKSB0aGUgSW5pdGlhbCBXb3JrOworCisoYikgYW55IG90aGVyIFN1YnNlcXVlbnQgV29yazsgb3IKKworKGMpIHRvIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgSW5pdGlhbCBXb3JrIGFuZCBhbnkgc3VjaCBvdGhlciBTdWJzZXF1ZW50IFdvcms7CisKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIG9yaWdpbmF0ZSBmcm9tIGEgU3Vic2VxdWVudCBDb250cmlidXRvci4gQSBTdWJzZXF1ZW50IFdvcmsgd2lsbCAib3JpZ2luYXRlIiBmcm9tIGEgU3Vic2VxdWVudCBDb250cmlidXRvciBpZiB0aGUgU3Vic2VxdWVudCBXb3JrIHdhcyBhIHJlc3VsdCBvZiBlZmZvcnRzIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciAob3IgYW55b25lIGFjdGluZyBvbiBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JgcyBiZWhhbGYsIHN1Y2ggYXMsIGEgY29udHJhY3RvciBvciBvdGhlciBlbnRpdHkgdGhhdCBpcyBlbmdhZ2VkIGJ5IG9yIHVuZGVyIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIGEgU3Vic2VxdWVudCBXb3JrIGV4cHJlc3NseSBleGNsdWRlcyBhbmQgc2hhbGwgbm90IGNhcHR1cmUgd2l0aGluIGl0cyBtZWFuaW5nIGFueSBJbmRlcGVuZGVudCBNb2R1bGUuCisKKzEuMTkuICJTVVBQTEVNRU5UIEZJTEUiIG1lYW5zIGEgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrIGhhdmluZyBhIGZpbGUgbmFtZSAic3VwcGZpbGUudHh0Ii4KKworMS4yMC4gIlRISVJEIFBBUlRZIiBoYXMgdGhlIG1lYW5pbmcgYXNzaWduZWQgaW4gUGFydCA0IG9mIEV4aGliaXQgQS4KKworMi4gTElDRU5TRS4KKworMi4xLiBDT1BZUklHSFQgTElDRU5TRSBGUk9NIElOSVRJQUwgQU5EIFNVQlNFUVVFTlQgQ09OVFJJQlVUT1JTLgorCisoYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIGVhY2ggUmVjaXBpZW50IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlIHRvOgorCisoaSkgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIEluaXRpYWwgV29yazsgYW5kCisKKyhpaSkgcmVwcm9kdWNlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgc3VibGljZW5zZSBhbnkgZGVyaXZhdGl2ZSB3b3JrcyAoaWYgYW55KSBwcmVwYXJlZCBieSBSZWNpcGllbnQ7CisKK2luIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0sIGVpdGhlciB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yay4KKworKGIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgZWFjaCBSZWNpcGllbnQgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgY29weXJpZ2h0IGxpY2Vuc2UgdG86CisKKyhpKSByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgU3Vic2VxdWVudCBXb3JrIG9mIHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvcjsgYW5kCisKKyhpaSkgcmVwcm9kdWNlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgc3VibGljZW5zZSBhbnkgZGVyaXZhdGl2ZSB3b3JrcyAoaWYgYW55KSBwcmVwYXJlZCBieSBSZWNpcGllbnQ7CisKK2luIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0sIGVpdGhlciB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yay4KKzIuMi4gUEFURU5UIExJQ0VOU0UgRlJPTSBJTklUSUFMIEFORCBTVUJTRVFVRU5UIENPTlRSSUJVVE9SUy4KKworKGEpIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBpbmNsdWRlIG9yIGdyYW50IGFueSBwYXRlbnQgbGljZW5zZSB3aGF0c29ldmVyIGZyb20gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIG9yIGFueSBEaXN0cmlidXRvciB1bmxlc3MsIGF0IHRoZSB0aW1lIHRoZSBJbml0aWFsIFdvcmsgaXMgZmlyc3QgZGlzdHJpYnV0ZWQgb3IgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlIChhcyB0aGUgY2FzZSBtYXkgYmUpLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoYXMgc2VsZWN0ZWQgcHVyc3VhbnQgdG8gUGFydCA2IG9mIEV4aGliaXQgQSB0aGUgcGF0ZW50IHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEuIElmIHRoaXMgaXMgbm90IGRvbmUgdGhlbiB0aGUgSW5pdGlhbCBXb3JrIGFuZCBhbnkgb3RoZXIgU3Vic2VxdWVudCBXb3JrIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlIHdpdGhvdXQgYW55IHBhdGVudCBsaWNlbnNlICh0aGUgIlBBVEVOVFMtRVhDTFVERUQgTElDRU5TRSIpLgorCisoYikgSG93ZXZlciwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHN1YnNlcXVlbnRseSBkaXN0cmlidXRlIG9yIG1ha2UgYXZhaWxhYmxlIChhcyB0aGUgY2FzZSBtYXkgYmUpIGZ1dHVyZSBjb3BpZXMgb2Y6ICgxKSB0aGUgSW5pdGlhbCBXb3JrOyBvciAoMikgYW55IExpY2Vuc2VkIFdvcmsgZGlzdHJpYnV0ZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2hpY2ggaW5jbHVkZXMgdGhlIEluaXRpYWwgV29yayAob3IgYW55IHBvcnRpb24gdGhlcmVvZikgYW5kL29yIGFueSBNb2RpZmljYXRpb24gbWFkZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgYXZhaWxhYmxlIHVuZGVyIGEgTGljZW5zZSB3aGljaCBpbmNsdWRlcyBhIHBhdGVudCBsaWNlbnNlICh0aGUgIlBBVEVOVFMtSU5DTFVERUQgTElDRU5TRSIpIGJ5IHNlbGVjdGluZyBwdXJzdWFudCB0byBQYXJ0IDYgb2YgRXhoaWJpdCBBIHRoZSBwYXRlbnQgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQSwgd2hlbiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBkaXN0cmlidXRlcyBvciBtYWtlcyBhdmFpbGFibGUgKGFzIHRoZSBjYXNlIG1heSBiZSkgc3VjaCBmdXR1cmUgY29waWVzIHVuZGVyIHRoaXMgTGljZW5zZS4KKworKGMpIElmIGFueSBSZWNpcGllbnQgcmVjZWl2ZXMgb3Igb2J0YWlucyBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBvciBhbnkgb3RoZXIgcG9ydGlvbiBvZiB0aGUgTGljZW5zZWQgV29yayB1bmRlciB0aGUgUGF0ZW50cy1JbmNsdWRlZCBMaWNlbnNlLCB0aGVuIGFsbCBsaWNlbnNpbmcgb2Ygc3VjaCBjb3BpZXMgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIGluY2x1ZGUgdGhlIHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEgYW5kIHRoYXQgUmVjaXBpZW50IHNoYWxsIG5vdCBiZSBhYmxlIHRvIHJlbHkgdXBvbiB0aGUgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIGZvciBhbnkgc3VjaCBjb3BpZXMuIEhvd2V2ZXIsIGFsbCBSZWNpcGllbnRzIHRoYXQgcmVjZWl2ZSBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBvciBhbnkgb3RoZXIgcG9ydGlvbiBvZiB0aGUgTGljZW5zZWQgV29yayB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBzaGFsbCBoYXZlIG5vIHBhdGVudCBsaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzdWNoIGNvcGllcyByZWNlaXZlZCB1bmRlciB0aGUgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIGFuZCBhdmFpbGFiaWxpdHkgYW5kIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvcGllcywgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFJlY2lwaWVudCB0byBzdWNoIGNvcGllcywgc2hhbGwgYmUgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIHdpdGhvdXQgYW55IHBhdGVudCBsaWNlbnNlLgorCisoZCkgV2hlcmUgYSBSZWNpcGllbnQgdXNlcyBpbiBjb21iaW5hdGlvbiBvciBjb21iaW5lcyBhbnkgY29weSBvZiB0aGUgTGljZW5zZWQgV29yayAob3IgcG9ydGlvbiB0aGVyZW9mKSBsaWNlbnNlZCB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIGEgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIHdpdGggYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgKG9yIHBvcnRpb24gdGhlcmVvZikgbGljZW5zZWQgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGhhdmluZyBhIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSwgdGhlIGNvbWJpbmF0aW9uIChhbmQgYW55IHBvcnRpb24gdGhlcmVvZikgc2hhbGwsIGZyb20gdGhlIGZpcnN0IHRpbWUgc3VjaCBSZWNpcGllbnQgdXNlcywgbWFrZXMgYXZhaWxhYmxlIG9yIGRpc3RyaWJ1dGVzIHRoZSBjb21iaW5hdGlvbiAoYXMgdGhlIGNhc2UgbWF5IGJlKSwgYmUgc3ViamVjdCB0byBvbmx5IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBoYXZpbmcgdGhlIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSB3aGljaCBzaGFsbCBpbmNsdWRlIHRoZSB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLgorCisyLjMuIEFDS05PV0xFREdFTUVOVCBBTkQgRElTQ0xBSU1FUi4KKworUmVjaXBpZW50IHVuZGVyc3RhbmRzIGFuZCBhZ3JlZXMgdGhhdCBhbHRob3VnaCBJbml0aWFsIENvbnRyaWJ1dG9yIGFuZCBlYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyByZXByZXNlbnRhdGlvbiwgd2FycmFudHksIGd1YXJhbnRlZSBvciBhc3N1cmFuY2UgaXMgcHJvdmlkZWQgYnkgYW55IEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIG9yIERpc3RyaWJ1dG9yIHRoYXQgdGhlIExpY2Vuc2VkIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGFuZCBlYWNoIERpc3RyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UsIGluIHJlbGF0aW9uIHRvIHRoZSBMaWNlbnNlZCBXb3Jrcy4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcgZGlzY2xhaW1lcnMsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmssIGl0IGlzIFJlY2lwaWVudGBzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFdvcmsuCisKKzIuNC4gUkVTRVJWQVRJT04uCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBEaXN0cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xLiBESVNUUklCVVRJT04gR0VORVJBTExZLgorCisoYSkgQSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHNoYWxsIG1ha2UgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yYHMgU3Vic2VxdWVudCBXb3JrKHMpIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gZm9yIGEgcGVyaW9kIG9mIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocy4gVGhlIGFmb3Jlc2FpZCB0d2VsdmUgKDEyKSBtb250aCBwZXJpb2Qgc2hhbGwgYmVnaW4gd2l0aGluIGEgcmVhc29uYWJsZSB0aW1lIGFmdGVyIHRoZSBjcmVhdGlvbiBvZiB0aGUgU3Vic2VxdWVudCBXb3JrIGFuZCBubyBsYXRlciB0aGFuIHNpeHR5ICg2MCkgZGF5cyBhZnRlciBmaXJzdCBkaXN0cmlidXRpb24gb2YgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yYHMgU3Vic2VxdWVudCBXb3JrLgorCisoYikgQWxsIERpc3RyaWJ1dG9ycyBtdXN0IGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSwgYW5kIG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIEV4aGliaXQgQSBhbmQgdGhlIGFjY29tcGFueWluZyBTdXBwbGVtZW50IEZpbGUpIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGRpc3RyaWJ1dGVkLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIExpY2Vuc2UgbXVzdCBiZSBwcm9taW5lbnRseSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgZmlsZSBjYWxsZWQgImxpY2Vuc2UudHh0LiIgSW4gYWRkaXRpb24sIHRoZSBMaWNlbnNlIE5vdGljZSBpbiBQYXJ0IDUgb2YgRXhoaWJpdCBBIG11c3QgYmUgaW5jbHVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgU291cmNlIENvZGUgZmlsZXMsIGFuZCB2aWV3YWJsZSB0byBhIHVzZXIgaW4gYW55IGV4ZWN1dGFibGUgc3VjaCB0aGF0IHRoZSBMaWNlbnNlIE5vdGljZSBpcyByZWFzb25hYmx5IGJyb3VnaHQgdG8gdGhlIGF0dGVudGlvbiBvZiBhbnkgcGFydHkgdXNpbmcgdGhlIExpY2Vuc2VkIFdvcmsuCisKKzMuMi4gRVhFQ1VUQUJMRSBESVNUUklCVVRJT05TIE9GIFRIRSBMSUNFTlNFRCBXT1JLLgorCitBIERpc3RyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgV29yaywgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaW4gRXhlY3V0YWJsZSBmb3JtIChhbiAiRVhFQ1VUQUJMRSBESVNUUklCVVRJT04iKSB0byBhbnkgdGhpcmQgcGFydHksIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDIgb2YgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgYW5kIGFjY29tcGFuaWVkIGJ5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UsIEFORCBwcm92aWRlZCBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIGZ1bGZpbGxlZDoKKworKGEpIFRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBTb3VyY2UgQ29kZSBmb3IgdGhlIExpY2Vuc2VkIFdvcmsgbWFraW5nIHVwIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiwgYW5kIHRoZSBTb3VyY2UgQ29kZSBtdXN0IGJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBzYW1lIG1lZGlhIGFzIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBvciB1c2luZyBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc207IG9yCisKKyhiKSBUaGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCBiZSBhY2NvbXBhbmllZCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRoaXJ0eSBzaXggKDM2KSBtb250aHMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3IgdGhlIExpY2Vuc2VkIFdvcmsgbWFraW5nIHVwIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiwgdG8gYmUgYXZhaWxhYmxlIGFuZCBkaXN0cmlidXRlZCB1c2luZyBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIGFuZCBzdWNoIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgcmVtYWluIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHRvIGFueSB0aGlyZCBwYXJ0eSB2aWEgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSAob3IgYW55IHJlcGxhY2VtZW50IEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0aGUgcGFydGljdWxhciBEaXN0cmlidXRvciBtYXkgcmVhc29uYWJseSBuZWVkIHRvIHR1cm4gdG8gYXMgYSBzdWJzdGl0dXRlKSBmb3Igc2FpZCBhdCBsZWFzdCB0aGlydHkgc2l4ICgzNikgbW9udGhzLgorCitGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBhYm92ZS1ub3RlZCByZXF1aXJlbWVudHMgYXBwbHkgdG8gYW55IExpY2Vuc2VkIFdvcmsgb3IgcG9ydGlvbiB0aGVyZW9mIGRpc3RyaWJ1dGVkIHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBFeGVjdXRhYmxlIGZvcm0sIHdoZXRoZXIgc3VjaCBkaXN0cmlidXRpb24gaXMgbWFkZSBhbG9uZSwgaW4gY29tYmluYXRpb24gd2l0aCBhIExhcmdlciBXb3JrIG9yIEluZGVwZW5kZW50IE1vZHVsZXMsIG9yIGluIHNvbWUgb3RoZXIgY29tYmluYXRpb24uCisKKzMuMy4gU09VUkNFIENPREUgRElTVFJJQlVUSU9OUy4KKworV2hlbiBhIERpc3RyaWJ1dG9yIG1ha2VzIHRoZSBMaWNlbnNlZCBXb3JrLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBhdmFpbGFibGUgdG8gYW55IFBlcnNvbiBpbiBTb3VyY2UgQ29kZSBmb3JtLCBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSwgc2l0dWF0ZWQgc28gdGhhdCB0aGUgY29weSBvZiB0aGUgTGljZW5zZSBpcyBjb25zcGljdW91c2x5IGJyb3VnaHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGF0IFBlcnNvbi4gRm9yIGdyZWF0ZXIgY2xhcmlmaWNhdGlvbiwgdGhpcyBTZWN0aW9uIDMuMyBhcHBsaWVzIHRvIGFsbCBkaXN0cmlidXRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYW55IFNvdXJjZSBDb2RlIGZvcm0uIEEgRGlzdHJpYnV0b3IgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCB3aGljaCBjaGFyZ2Ugc2hhbGwgYmUgbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCiszLjQuIFJFUVVJUkVEIE5PVElDRVMgSU4gU09VUkNFIENPREUuCisKK0VhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBub3RpY2Ugc2V0IG91dCBpbiBQYXJ0IDUgb2YgRXhoaWJpdCBBIGlzIGluY2x1ZGVkIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgZm9yIGVhY2ggU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gdGhhdCBwYXJ0aWN1bGFyIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGlmIHN1Y2ggbm90aWNlIGlzIG5vdCBhbHJlYWR5IGluY2x1ZGVkIGluIGVhY2ggc3VjaCBmaWxlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIGlzIHN0b3JlZCkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLgorCiszLjUuIE5PIERJU1RSSUJVVElPTiBSRVFVSVJFTUVOVFMgRk9SIElOVEVSTkFMTFkgVVNFRCBNT0RJRklDQVRJT05TLgorCitOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbnMgMy4yLCAzLjMgYW5kIDMuNCwgUmVjaXBpZW50IG1heSwgaW50ZXJuYWxseSB3aXRoaW4gaXRzIG93biBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24gdXNlIHRoZSBMaWNlbnNlZCBXb3JrLCBpbmNsdWRpbmcgdGhlIEluaXRpYWwgV29yayBhbmQgU3Vic2VxdWVudCBXb3JrcywgYW5kIG1ha2UgTW9kaWZpY2F0aW9ucyBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiBSZWNpcGllbnRgcyBvd24gY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uIChjb2xsZWN0aXZlbHksICJJTlRFUk5BTCBVU0UgTU9ESUZJQ0FUSU9OUyIpLiBUaGUgUmVjaXBpZW50IHNoYWxsIGhhdmUgbm8gb2JsaWdhdGlvbiB0byBkaXN0cmlidXRlLCBpbiBlaXRoZXIgU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtLCBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IFJlY2lwaWVudCBpbiB0aGUgY291cnNlIG9mIHN1Y2ggaW50ZXJuYWwgdXNlLCBleGNlcHQgd2hlcmUgcmVxdWlyZWQgYmVsb3cgaW4gdGhpcyBTZWN0aW9uIDMuNS4gQWxsIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIGRpc3RyaWJ1dGVkIHRvIGFueSBQZXJzb24sIHdoZXRoZXIgb3Igbm90IGEgVGhpcmQgUGFydHksIHNoYWxsIGJlIGRpc3RyaWJ1dGVkIHB1cnN1YW50IHRvIGFuZCBiZSBhY2NvbXBhbmllZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgUmVjaXBpZW50IGNob29zZXMgdG8gZGlzdHJpYnV0ZSBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyB0byBhbnkgVGhpcmQgUGFydHksIHRoZW4gdGhlIFJlY2lwaWVudCBzaGFsbCBiZSBkZWVtZWQgYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgZGlzdHJpYnV0ZWQgdG8gYW55IFRoaXJkIFBhcnR5IHNoYWxsIGJlIGRlZW1lZCBhIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIHNoYWxsIGZyb20gdGhlIGZpcnN0IHN1Y2ggaW5zdGFuY2UgYmVjb21lIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcmsgdGhhdCBtdXN0IHRoZXJlYWZ0ZXIgYmUgZGlzdHJpYnV0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHRvIHRoaXJkIHBhcnRpZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAzLjEgdG8gMy40IGluY2x1c2l2ZS4KKworMy42LiBJTkRFUEVOREVOVCBNT0RVTEVTLgorCitUaGlzIExpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIEluZGVwZW5kZW50IE1vZHVsZXMgb2YgYW55IEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIERpc3RyaWJ1dG9yIG9yIGFueSBSZWNpcGllbnQsIGFuZCBzdWNoIEluZGVwZW5kZW50IE1vZHVsZXMgbWF5IGJlIGxpY2Vuc2VkIG9yIG1hZGUgYXZhaWxhYmxlIHVuZGVyIG9uZSBvciBtb3JlIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50cy4KKworMy43LiBMQVJHRVIgV09SS1MuCisKK0FueSBEaXN0cmlidXRvciBvciBSZWNpcGllbnQgbWF5IGNyZWF0ZSBvciBjb250cmlidXRlIHRvIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgb25lIG9yIG1vcmUgcHJvZHVjdHMuIEhvd2V2ZXIsIGluIGFueSBzdWNoIGNhc2UsIERpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCAoYXMgdGhlIGNhc2UgbWF5IGJlKSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIHBvcnRpb24gb2YgdGhlIExhcmdlciBXb3JrLgorCiszLjguIERFU0NSSVBUSU9OIE9GIERJU1RSSUJVVEVEIE1PRElGSUNBVElPTlMuCisKKyhhKSBFYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKGluY2x1ZGluZyB0aGUgSW5pdGlhbCBDb250cmlidXRvciB3aGVyZSB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbHNvIHF1YWxpZmllcyBhcyBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpIG11c3QgY2F1c2UgZWFjaCBTdWJzZXF1ZW50IFdvcmsgY3JlYXRlZCBvciBjb250cmlidXRlZCB0byBieSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGF0IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBtYWRlIGluIHRoZSBjcmVhdGlvbiBvciBjb250cmlidXRpb24gdG8gdGhhdCBTdWJzZXF1ZW50IFdvcmsuIElmIG5vIFN1cHBsZW1lbnQgRmlsZSBleGlzdHMgb3Igbm8gcmVxdWlyZW1lbnRzIGFyZSBzZXQgb3V0IGluIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGVuIHRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgZm9yIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIHRvIGRvY3VtZW50IGNoYW5nZXMgdGhhdCB0aGV5IG1ha2UgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuCisKKyhiKSBUaGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgYXQgYW55IHRpbWUgaW50cm9kdWNlIHJlcXVpcmVtZW50cyBvciBhZGQgdG8gb3IgY2hhbmdlIGVhcmxpZXIgcmVxdWlyZW1lbnRzIChpbiBlYWNoIGNhc2UsIHRoZSAiRUFSTElFUiBERVNDUklQVElPTiBSRVFVSVJFTUVOVFMiKSBmb3IgZG9jdW1lbnRpbmcgY2hhbmdlcyByZXN1bHRpbmcgaW4gU3Vic2VxdWVudCBXb3JrcyBieSByZXZpc2luZyBQYXJ0IDEgb2YgZWFjaCBjb3B5IG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgZGlzdHJpYnV0ZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2l0aCBmdXR1cmUgY29waWVzIG9mIHRoZSBMaWNlbnNlZCBXb3JrIHNvIHRoYXQgUGFydCAxIHRoZW4gY29udGFpbnMgbmV3IHJlcXVpcmVtZW50cyAodGhlICJORVcgREVTQ1JJUFRJT04gUkVRVUlSRU1FTlRTIikgZm9yIGRvY3VtZW50aW5nIHN1Y2ggY2hhbmdlcy4KKworKGMpIEFueSBSZWNpcGllbnQgcmVjZWl2aW5nIGF0IGFueSB0aW1lIGFueSBjb3B5IG9mIGFuIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrIHVuZGVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKGluIGVhY2ggY2FzZSwgYW4gIkVhcmxpZXIgTElDRU5TRUQgQ09QWSIpIGhhdmluZyB0aGUgRWFybGllciBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMgbWF5IGNob29zZSwgd2l0aCByZXNwZWN0IHRvIGVhY2ggc3VjaCBFYXJsaWVyIExpY2Vuc2VkIENvcHksIHRvIGNvbXBseSB3aXRoIHRoZSBFYXJsaWVyIERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cyBvciB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cy4gV2hlcmUgYSBSZWNpcGllbnQgY2hvb3NlcyB0byBjb21wbHkgd2l0aCB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cywgdGhhdCBSZWNpcGllbnQgd2lsbCwgd2hlbiB0aGVyZWFmdGVyIGRpc3RyaWJ1dGluZyBhbnkgY29waWVzIG9mIGFueSBzdWNoIEVhcmxpZXIgTGljZW5zZWQgQ29weSwgaW5jbHVkZSBhIFN1cHBsZW1lbnQgRmlsZSBoYXZpbmcgYSBzZWN0aW9uIGVudGl0bGVkIFBhcnQgMSB0aGF0IGNvbnRhaW5zIGEgY29weSBvZiB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cy4KKworKGQpIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIGludGVudCBvZiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBpcyB0byBwcm92aWRlIGEgbWVjaGFuaXNtIChpZiBhbnkpIGJ5IHdoaWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIG11c3QgZG9jdW1lbnQgY2hhbmdlcyB0aGF0IHRoZXkgbWFrZSB0byB0aGUgTGljZW5zZWQgV29yayByZXN1bHRpbmcgaW4gU3Vic2VxdWVudCBXb3Jrcy4gUGFydCAxIG9mIGFueSBTdXBwbGVtZW50IEZpbGUgc2hhbGwgbm90IGJlIHVzZWQgdG8gaW5jcmVhc2Ugb3IgcmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGluIEFydGljbGUgMiBvZiB0aGlzIExpY2Vuc2Ugb3IgaW4gYW55IG90aGVyIHdheSBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBhbnkgUmVjaXBpZW50LCBhbmQgc2hhbGwgYXQgbm8gdGltZSBzZXJ2ZSBhcyB0aGUgYmFzaXMgZm9yIHRlcm1pbmF0aW5nIHRoZSBMaWNlbnNlLiBGdXJ0aGVyLCBhIFJlY2lwaWVudCBjYW4gYmUgcmVxdWlyZWQgdG8gY29ycmVjdCBhbmQgY2hhbmdlIGl0cyBkb2N1bWVudGF0aW9uIHByb2NlZHVyZXMgdG8gY29tcGx5IHdpdGggUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUsIGJ1dCBjYW5ub3QgYmUgcGVuYWxpc2VkIHdpdGggZGFtYWdlcy4gUGFydCAxIG9mIGFueSBTdXBwbGVtZW50IEZpbGUgaXMgb25seSBiaW5kaW5nIG9uIGVhY2ggUmVjaXBpZW50IG9mIGFueSBMaWNlbnNlZCBXb3JrIHRvIHRoZSBleHRlbnQgUGFydCAxIHNldHMgb3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgdG8gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLgorCisoZSkgQW4gZXhhbXBsZSBvZiBhIHNldCBvZiByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgYW5kIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGlzIHNldCBvdXQgaW4gUGFydCA3IG9mIEV4aGliaXQgQSBvZiB0aGlzIExpY2Vuc2UuIFBhcnQgNyBpcyBhIHNhbXBsZSBvbmx5IGFuZCBpcyBub3QgYmluZGluZyBvbiBSZWNpcGllbnRzLCB1bmxlc3MgKHN1YmplY3QgdG8gdGhlIGVhcmxpZXIgcGFyYWdyYXBocyBvZiB0aGlzIFNlY3Rpb24gMy44KSB0aG9zZSBhcmUgdGhlIHJlcXVpcmVtZW50cyB0aGF0IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGluY2x1ZGVzIGluIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIHdpdGggdGhlIGNvcGllcyBvZiB0aGUgSW5pdGlhbCBXb3JrIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMy45LiBVU0UgT0YgRElTVFJJQlVUT1IgTkFNRS4KKworVGhlIG5hbWUgb2YgYSBEaXN0cmlidXRvciBtYXkgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIERpc3RyaWJ1dG9yIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSB0aGUgTGljZW5zZWQgV29yayBvciBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIExpY2Vuc2VkIFdvcmssIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCiszLjEwLiBMSU1JVEVEIFJFQ09HTklUSU9OIE9GIElOSVRJQUwgQ09OVFJJQlVUT1IuCisKKyhhKSBBcyBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGltZSwgbW9uZXkgYW5kIGVmZm9ydCBpbnZlc3RlZCBpbiB3cml0aW5nIHRoZSBJbml0aWFsIFdvcmssIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBpbmNsdWRlIGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGEgcmVxdWlyZW1lbnQgdGhhdCBlYWNoIHRpbWUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHJlc3VsdGluZyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yaywgb3IgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uLCBpcyBsYXVuY2hlZCBvciBydW4sIGEgcHJvbWluZW50IGRpc3BsYXkgb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3JgcyBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiBtdXN0IG9jY3VyICh0aGUgIkFUVFJJQlVUSU9OIElORk9STUFUSU9OIikuIFRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBTb3VyY2UgQ29kZSBmaWxlLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBzcGVjaWZ5IGluIHRoZSBTdXBwbGVtZW50IEZpbGUgdGhhdCB0aGUgYWJvdmUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnQgb25seSBhcHBsaWVzIHRvIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSByZXN1bHRpbmcgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmssIGJ1dCBub3QgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uLiBUaGUgaW50ZW50IGlzIHRvIHByb3ZpZGUgZm9yIHJlYXNvbmFibHkgbW9kZXN0IGF0dHJpYnV0aW9uLCB0aGVyZWZvcmUgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IG5vdCByZXF1aXJlIFJlY2lwaWVudHMgdG8gZGlzcGxheSwgYXQgYW55IHRpbWUsIG1vcmUgdGhhbiB0aGUgZm9sbG93aW5nIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uOiAoYSkgYSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgKGIpIGEgd29yZCBvciBvbmUgcGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTsgKGMpIG9uZSBkaWdpdGFsIGltYWdlIG9yIGdyYXBoaWMgcHJvdmlkZWQgd2l0aCB0aGUgSW5pdGlhbCBXb3JrOyBhbmQgKGQpIGEgVVJMIChjb2xsZWN0aXZlbHksIHRoZSAiQVRUUklCVVRJT04gTElNSVRTIikuCisKKyhiKSBJZiBubyBTdXBwbGVtZW50IEZpbGUgZXhpc3RzLCBvciBubyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBzZXQgb3V0IGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGVuIHRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgZm9yIFJlY2lwaWVudHMgdG8gZGlzcGxheSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKKyhjKSBFYWNoIFJlY2lwaWVudCBhY2tub3dsZWRnZXMgdGhhdCBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBhbmQvb3IgdHJhZGUgbmFtZXMgY29udGFpbmVkIHdpdGhpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrIGFyZSB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIG9yIHVuZGVyIGNpcmN1bXN0YW5jZXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBsYXcsIG9yIGFzIGV4cHJlc3NseSBzZXQgb3V0IGluIHRoaXMgTGljZW5zZS4KKworMy4xMS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCBhbnkgZGVzY3JpcHRpb24gb3IgYXR0cmlidXRpb24gcHJvdmlzaW9ucyBjb250YWluZWQgd2l0aGluIGEgU3VwcGxlbWVudCBGaWxlIG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmF0dXJlIG9mIHRoZSBkZXNjcmlwdGlvbiBvciBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMsIGFzIHRoZSBjYXNlIG1heSBiZS4gQW55IHByb3Zpc2lvbiBpbiBhIFN1cHBsZW1lbnQgRmlsZSB0aGF0IG90aGVyd2lzZSBwdXJwb3J0cyB0byBtb2RpZnksIHZhcnksIG51bGxpZnkgb3IgYW1lbmQgYW55IHJpZ2h0LCBvYmxpZ2F0aW9uIG9yIHJlcHJlc2VudGF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gc2hhbGwgYmUgZGVlbWVkIHZvaWQgdG8gdGhhdCBleHRlbnQsIGFuZCBzaGFsbCBiZSBvZiBubyBmb3JjZSBvciBlZmZlY3QuCisKKzQuIENPTU1FUkNJQUwgVVNFIEFORCBJTkRFTU5JVFkuCisKKzQuMS4gQ09NTUVSQ0lBTCBTRVJWSUNFUy4KKworQSBSZWNpcGllbnQgKCJDT01NRVJDSUFMIFJFQ0lQSUVOVCIpIG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyAoY29sbGVjdGl2ZWx5LCAiU0VSVklDRVMiKSB0byBvbmUgb3IgbW9yZSBvdGhlciBSZWNpcGllbnRzIG9yIERpc3RyaWJ1dG9ycy4gSG93ZXZlciwgc3VjaCBDb21tZXJjaWFsIFJlY2lwaWVudCBtYXkgZG8gc28gb25seSBvbiB0aGF0IENvbW1lcmNpYWwgUmVjaXBpZW50YHMgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgYW55IG90aGVyIERpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCwgYW5kIENvbW1lcmNpYWwgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24ocykgaXMvYXJlIG9mZmVyZWQgYnkgQ29tbWVyY2lhbCBSZWNpcGllbnQgYWxvbmUuIEF0IG5vIHRpbWUgbWF5IENvbW1lcmNpYWwgUmVjaXBpZW50IHVzZSBhbnkgU2VydmljZXMgdG8gZGVueSBhbnkgcGFydHkgdGhlIExpY2Vuc2VkIFdvcmsgaW4gU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtIHdoZW4gc28gcmVxdWlyZWQgdW5kZXIgYW55IG9mIHRoZSBvdGhlciB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhpcyBTZWN0aW9uIDQuMSBkb2VzIG5vdCBkaW1pbmlzaCBhbnkgb2YgdGhlIG90aGVyIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgb2JsaWdhdGlvbiBvZiB0aGUgQ29tbWVyY2lhbCBSZWNpcGllbnQgYXMgYSBEaXN0cmlidXRvciwgd2hlbiBkaXN0cmlidXRpbmcgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSwgdG8gbWFrZSBzdWNoIGRpc3RyaWJ1dGlvbiByb3lhbHR5LWZyZWUgKHN1YmplY3QgdG8gdGhlIHJpZ2h0IHRvIGNoYXJnZSBhIGZlZSBvZiBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZGlzdHJpYnV0aW9uIChhcyB0aGUgY2FzZSBtYXkgYmUpKS4KKworNC4yLiBJTkRFTU5JVFkuCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBMaWNlbnNlZCBXb3JrLCB0aGUgRGlzdHJpYnV0b3Igd2hvIGluY2x1ZGVzIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIERpc3RyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIERpc3RyaWJ1dG9yIGluY2x1ZGVzIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIG9yIG9mZmVycyBhbnkgU2VydmljZXMsIHN1Y2ggRGlzdHJpYnV0b3IgKCJDT01NRVJDSUFMIERJU1RSSUJVVE9SIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBEaXN0cmlidXRvciBvciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChpbiBlYWNoIGNhc2UgYW4gIklOREVNTklGSUVEIFBBUlRZIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMT1NTRVMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgUGFydHkgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgb3IgaW4gY29ubmVjdGlvbiB3aXRoIGFueSBTZXJ2aWNlcy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIFBhcnR5IG11c3Q6IChhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltOyBhbmQgKGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjby1vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIFBhcnR5IG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKKzUuIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLgorCis1LjEuIE5FVyBWRVJTSU9OUy4KKworVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis1LjIuIEVGRkVDVCBPRiBORVcgVkVSU0lPTlMuCisKK09uY2UgdGhlIExpY2Vuc2VkIFdvcmsgb3IgYW55IHBvcnRpb24gdGhlcmVvZiBoYXMgYmVlbiBwdWJsaXNoZWQgYnkgSW5pdGlhbCBDb250cmlidXRvciB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIEhvd2V2ZXIsIGlmIGEgUmVjaXBpZW50IGNob29zZXMgdG8gdXNlIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgdGhlbiBmcm9tIHRoZSBkYXRlIG9mIG1ha2luZyB0aGlzIGNob2ljZSwgdGhlIFJlY2lwaWVudCBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGF0IHN1YnNlcXVlbnQgdmVyc2lvbiB3aXRoIHJlc3BlY3QgdG8gYWxsIGZ1cnRoZXIgcmVwcm9kdWN0aW9uLCBwcmVwYXJhdGlvbiBvZiBkZXJpdmF0aXZlIHdvcmtzLCBwdWJsaWMgZGlzcGxheSBvZiwgcHVibGljIHBlcmZvcm1hbmNlIG9mLCBkaXN0cmlidXRpb24gYW5kIHN1YmxpY2Vuc2luZyBieSB0aGUgUmVjaXBpZW50IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgTGljZW5zZWQgV29yay4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIExpY2Vuc2VkIFdvcmsKKworNi4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworNi4xLiBHRU5FUkFMIERJU0NMQUlNRVIuCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgVEhFIExJQ0VOU0VEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgQU5ZIFJFUFJFU0VOVEFUSU9OLCBXQVJSQU5UWSwgR1VBUkFOVEVFLCBBU1NVUkFOQ0UgT1IgQ09ORElUSU9OIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElDRU5TRUQgV09SSyBJUyBXSVRIIFJFQ0lQSUVOVC4gU0hPVUxEIEFOWSBMSUNFTlNFRCBXT1JLIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgUkVDSVBJRU5UIChOT1QgVEhFIElOSVRJQUwgQ09OVFJJQlVUT1IgT1IgQU5ZIFNVQlNFUVVFTlQgQ09OVFJJQlVUT1IpIEFTU1VNRVMgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIENMQVVTRSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgTElDRU5TRUQgV09SSyBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBMSUNFTlNFIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gVEhJUyBESVNDTEFJTUVSLgorCis2LjIuIFJFU1BPTlNJQklMSVRZIE9GIFJFQ0lQSUVOVFMuCisKK0VhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBXb3JrIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzcuIFRFUk1JTkFUSU9OLgorCis3LjEuIFRoaXMgTGljZW5zZSBzaGFsbCBjb250aW51ZSB1bnRpbCB0ZXJtaW5hdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZXhwcmVzcyB0ZXJtcyBoZXJlaW4uCisKKzcuMi4gUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gdGVybWluYXRlIHRoaXMgTGljZW5zZSBhdXRvbWF0aWNhbGx5IGF0IGFueSB0aW1lLgorCis3LjMuIFRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQsIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgc3VjaCBSZWNpcGllbnQgaXMgaW4gbWF0ZXJpYWwgYnJlYWNoIG9mIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlscyB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiBzaXh0eSAoNjApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gV2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCBhbnkgbWF0ZXJpYWwgYnJlYWNoIGJ5IHN1Y2ggUmVjaXBpZW50IG9mIGFueSB0ZXJtIG9mIGFueSBvdGhlciBMaWNlbnNlIHVuZGVyIHdoaWNoIHN1Y2ggUmVjaXBpZW50IGlzIGdyYW50ZWQgYW55IHJpZ2h0cyB0byB0aGUgTGljZW5zZWQgV29yayBzaGFsbCBjb25zdGl0dXRlIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIHRoaXMgTGljZW5zZS4KKworNy40LiBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBieSBvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyIFJlY2lwaWVudCBmb3IgYW55IHJlYXNvbiwgYWxsIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciBhbmQgdW5kZXIgYW55IG90aGVyIExpY2Vuc2UgdG8gdGhhdCBSZWNpcGllbnQgc2hhbGwgdGVybWluYXRlLiBIb3dldmVyLCBhbGwgc3VibGljZW5zZXMgdG8gdGhlIExpY2Vuc2VkIFdvcmsgd2hpY2ggd2VyZSBwcmV2aW91c2x5IHByb3Blcmx5IGdyYW50ZWQgYnkgc3VjaCBSZWNpcGllbnQgdW5kZXIgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW4gZWFjaCBjYXNlLCBhbiAiT3RoZXIgTGljZW5zZSIgYW5kIGluIHBsdXJhbCwgIk90aGVyIExpY2Vuc2VzIikgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgdW5kZXIgc3VjaCBPdGhlciBMaWNlbnNlcyBhcyBzZXQgb3V0IGluIHRoZWlyIHJlc3BlY3RpdmUgU2VjdGlvbnMgMiwgMywgNCwgNSwgNiwgNyBhbmQgOCwgbXV0YXRpcyBtdXRhbmRpcywgZm9yIHNvIGxvbmcgYXMgdGhlIHJlc3BlY3RpdmUgc3VibGljZW5zZWVzIChpLmUuIG90aGVyIFJlY2lwaWVudHMpIHJlbWFpbiBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZSB1bmRlciB3aGljaCBzdWNoIHN1YmxpY2Vuc2VlcyByZWNlaXZlZCByaWdodHMgdG8gdGhlIExpY2Vuc2VkIFdvcmsuIEFueSB0ZXJtaW5hdGlvbiBvZiBzdWNoIE90aGVyIExpY2Vuc2VzIHNoYWxsIGJlIHB1cnN1YW50IHRvIHRoZWlyIHJlc3BlY3RpdmUgU2VjdGlvbiA3LCBtdXRhdGlzIG11dGFuZGlzLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis3LjUuIFVwb24gYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBieSBvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyIFJlY2lwaWVudCwgU2VjdGlvbnMgNC4xLCA0LjIsIDYuMSwgNi4yLCA3LjQsIDcuNSwgOC4xLCBhbmQgOC4yLCB0b2dldGhlciB3aXRoIGFsbCBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSBuZWNlc3NhcnkgZm9yIHRoZSBpbnRlcnByZXRhdGlvbiBhbmQgZW5mb3JjZW1lbnQgb2Ygc2FtZSwgc2hhbGwgZXhwcmVzc2x5IHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4KKworOC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKKzguMS4gSU4gTk8gRVZFTlQgU0hBTEwgQU5ZIE9GIElOSVRJQUwgQ09OVFJJQlVUT1IsIElUUyBTVUJTSURJQVJJRVMsIE9SIEFGRklMSUFURVMsIE9SIEFOWSBPRiBJVFMgT1IgVEhFSVIgUkVTUEVDVElWRSBPRkZJQ0VSUywgRElSRUNUT1JTLCBFTVBMT1lFRVMsIEFORC9PUiBBR0VOVFMgKEFTIFRIRSBDQVNFIE1BWSBCRSksIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCBEQU1BR0VTLCBJTkRJUkVDVCBEQU1BR0VTLCBQVU5JVElWRSBEQU1BR0VTLCBJTkNJREVOVEFMIERBTUFHRVMsIFNQRUNJQUwgREFNQUdFUywgRVhFTVBMQVJZIERBTUFHRVMsIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgT1RIRVIgREFNQUdFUyBXSEFUU09FVkVSIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIE9SIEFOWSBPVEhFUiBMT1NTIEFSSVNJTkcgT1VUIE9GIE9SIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSEUgVVNFLCBJTkFCSUxJVFkgVE8gVVNFLCBVTkFVVEhPUklaRUQgVVNFLCBQRVJGT1JNQU5DRSwgT1IgTk9OLVBFUkZPUk1BTkNFIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIEFOWSBQQVJUIFRIRVJFT0YgT1IgVEhFIFBST1ZJU0lPTiBPRiBPUiBGQUlMVVJFIFRPIFBST1ZJREUgU1VQUE9SVCBTRVJWSUNFUywgT1IgVEhBVCBSRVNVTFQgRlJPTSBFUlJPUlMsIERFRkVDVFMsIE9NSVNTSU9OUywgREVMQVlTIElOIE9QRVJBVElPTiBPUiBUUkFOU01JU1NJT04sIE9SIEFOWSBPVEhFUiBGQUlMVVJFIE9GIFBFUkZPUk1BTkNFKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIElOIFJFTEFUSU9OIFRPIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBUSElTIENMQVVTRSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgTElDRU5TRUQgV09SSyBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBMSUNFTlNFIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gVEhFIExJTUlUQVRJT05TIFNFVCBGT1JUSCBJTiBUSElTIFNFQ1RJT04gOC4xLgorCis4LjIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgRUFDSCBSRUNJUElFTlQgU0hBTEwgTk9UIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLgorCis5LiBHT1ZFUk5JTkcgTEFXIEFORCBMRUdBTCBBQ1RJT04uCisKKzkuMS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIGFzc2lnbmVkIGluIFBhcnQgMyBvZiBFeGhpYml0IEEsIHdpdGhvdXQgcmVnYXJkIHRvIGl0cyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gTm8gcGFydHkgbWF5IGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIHRoZSBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgKGlmIGFueSkgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSBsaXRpZ2F0aW9uIGFyaXNpbmcgdW5kZXIgdGhpcyBMaWNlbnNlLiBOb3RlIHRoYXQgaWYgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gaXMgbm90IGFzc2lnbmVkIGluIFBhcnQgMyBvZiBFeGhpYml0IEEsIHRoZW4gdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gc2hhbGwgYmUgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLgorCis5LjIuIFRoZSBjb3VydHMgb2YgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gc2hhbGwgaGF2ZSBqdXJpc2RpY3Rpb24sIGJ1dCBub3QgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiwgdG8gZW50ZXJ0YWluIGFuZCBkZXRlcm1pbmUgYWxsIGRpc3B1dGVzIGFuZCBjbGFpbXMsIHdoZXRoZXIgZm9yIHNwZWNpZmljIHBlcmZvcm1hbmNlLCBpbmp1bmN0aW9uLCBkYW1hZ2VzIG9yIG90aGVyd2lzZSwgCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ZjgyMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4wCkBAIC0wLDAgKzEsMzcyIEBACisKK0FQUExFIFBVQkxJQyBTT1VSQ0UgTElDRU5TRQorVmVyc2lvbiAxLjAgLSBNYXJjaCAxNiwgMTk5OQorCitQbGVhc2UgcmVhZCB0aGlzIExpY2Vuc2UgY2FyZWZ1bGx5IGJlZm9yZSBkb3dubG9hZGluZyB0aGlzIHNvZnR3YXJlLgorQnkgZG93bmxvYWRpbmcgYW5kIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBkbyBub3Qgb3IgY2Fubm90IGFncmVlIHRvIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlcgord29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgcHVibGljbHkgYW5ub3VuY2VzIGFzCitzdWJqZWN0IHRvIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIGFuZCB3aGljaCBjb250YWlucyBhCitub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbAorQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjAgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSwgYXMgaXQgbWF5CitiZSByZXZpc2VkIGZyb20gdGltZSB0byB0aW1lIGJ5IEFwcGxlICgiTGljZW5zZSIpLiBBcyB1c2VkIGluIHRoaXMKK0xpY2Vuc2U6CisKKzEuMSAiQXBwbGljYWJsZSBQYXRlbnRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgQXBwbGUgaXMgdGhlCitncmFudG9yIG9mIHJpZ2h0cywgKGkpIHBhdGVudHMgb3IgcGF0ZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3cKK29yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gQXBwbGUgYW5kIChpaSkgd2hvc2UKK2NsYWltcyBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5Cit0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUKK09yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91CithcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgcGF0ZW50cyBhbmQgcGF0ZW50IGFwcGxpY2F0aW9ucyB0aGF0CithcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpCit3aG9zZSBjbGFpbXMgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZQorb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZQorY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkKK3Jlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS4zICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlcgordGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpLCBhbmQgaW5jbHVkZXMKK3dpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZgorQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlLAorYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkCitDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjQgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS41ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZQordG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiBDb3ZlcmVkIENvZGUuIFdoZW4gY29kZSBpcworcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvCitvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7CithbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtCitzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjYgIk9yaWdpbmFsIENvZGUiIG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yaworYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZwordGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MKK21hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4KK2V4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2gKK3dvcmsuCisKKzEuNyAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbAorbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywKK3NjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZQorKG9iamVjdCBjb2RlKS4KKworMS44ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiCitpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlcgorY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0CitvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mCitzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uCit0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mCitBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwKK0NvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZAorZGV2ZWxvcG1lbnQsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0CithbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIKK2luIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUKK3RoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZgorQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIKK29yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIKK1NlY3Rpb24gNjsgYW5kCisKKyhjKSBjb21wbGV0ZWx5IGFuZCBhY2N1cmF0ZWx5IGRvY3VtZW50IGFsbCBNb2RpZmljYXRpb25zIHRoYXQgeW91IGhhdmUKK21hZGUgYW5kIHRoZSBkYXRlIG9mIGVhY2ggc3VjaCBNb2RpZmljYXRpb24sIGRlc2lnbmF0ZSB0aGUgdmVyc2lvbiBvZgordGhlIE9yaWdpbmFsIENvZGUgeW91IHVzZWQsIHByb21pbmVudGx5IGluY2x1ZGUgYSBmaWxlIGNhcnJ5aW5nIHN1Y2gKK2luZm9ybWF0aW9uIHdpdGggdGhlIE1vZGlmaWNhdGlvbnMsIGFuZCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbgorRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIHN1Y2ggTW9kaWZpY2F0aW9ucy4KKworMi4yIFlvdSBtYXkgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoCitpbnN0YW5jZToKKworKGEpIHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUKK1NvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7CisKKyhiKSBtYWtlIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIGluIFNvdXJjZQorQ29kZSBmb3JtIHZpYSBlbGVjdHJvbmljIGRpc3RyaWJ1dGlvbiAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQKK2ZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgYW5kIGFueSBhZGRpdGlvbmFsIHRlcm1zIFlvdSBtYXkgY2hvb3NlIHRvCitvZmZlciB1bmRlciBTZWN0aW9uIDYuIFlvdSBtdXN0IGNvbnRpbnVlIHRvIG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mCitZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlCitDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbAorRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlcjsKKworKGMpIG11c3Qgbm90aWZ5IEFwcGxlIGFuZCBvdGhlciB0aGlyZCBwYXJ0aWVzIG9mIGhvdyB0byBvYnRhaW4gWW91cgorRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBieSBmaWxsaW5nIG91dCBhbmQgc3VibWl0dGluZyB0aGUgcmVxdWlyZWQKK2luZm9ybWF0aW9uIGZvdW5kIGF0CitodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UvbW9kaWZpY2F0aW9ucy5odG1sOyBhbmQKKworKGQpIGlmIHlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwKK2luY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkCitkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcworYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kCit3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4KKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlCitsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudHMgYW5kIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsCityZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUKK3NhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOworYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3dvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIKK0FwcGxpY2FibGUgUGF0ZW50cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvcgorY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBleGVjdXRlLCBjb21waWxlLCBkaXNwbGF5LAorcGVyZm9ybSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBBcHBsZSBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2gKK211bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbi4KKworNC4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkCitDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaAoraW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUKK2Z1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLgorCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4KK1NlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZAorYnkgQXBwbGUgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUKK2FkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gQXBwbGUgd2hpY2ggQXBwbGUgbWF5IGdyYW50IGluIGl0cworc29sZSBkaXNjcmV0aW9uLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZQorZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IKK290aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluCisoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQKK0NvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIKK3NvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlLiBZb3UgbXVzdCBvYnRhaW4gdGhlCityZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlCitoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdAorQXBwbGUgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUKK2dpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbgorcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heQorY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50Cit2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlCitoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZAordW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvcgoraW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZQorT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzCitvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdQorZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IKK2FueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBPUklHSU5BTAorQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUCitPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKEZPUiBUSEUgUFVSUE9TRVMgT0YKK1NFQ1RJT05TIDggQU5EIDksIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIEFSRSBDT0xMRUNUSVZFTFkKK1JFRkVSUkVEIFRPIEFTICJBUFBMRSIpIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IKK0NPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSBPUgorU0FUSVNGQUNUT1JZIFFVQUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgRE9FUyBOT1QgV0FSUkFOVCBUSEFUCitUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIE1FRVQgWU9VUgorUkVRVUlSRU1FTlRTLCBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIE9SSUdJTkFMIENPREUgV0lMTCBCRQorVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIE9SSUdJTkFMIENPREUKK1dJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOCitCWSBBUFBMRSBPUiBBTiBBUFBMRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIFNIQUxMIENSRUFURSBBCitXQVJSQU5UWSBPUiBJTiBBTlkgV0FZIElOQ1JFQVNFIFRIRSBTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiBZb3UKK2Fja25vd2xlZGdlIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlCitvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uCitzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUKK29mIHRoZSBPcmlnaW5hbCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlCitwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTGlhYmlsaXR5LgorCis5LjEgSW5mcmluZ2VtZW50LiBJZiBhbnkgb2YgdGhlIE9yaWdpbmFsIENvZGUgYmVjb21lcyB0aGUgc3ViamVjdCBvZgorYSBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgKCJBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIiksIEFwcGxlIG1heSwgYXQKK2l0cyBzb2xlIGRpc2NyZXRpb24gYW5kIG9wdGlvbjogKGEpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzCituZWNlc3NhcnkgZm9yIFlvdSB0byBjb250aW51ZSB1c2luZyB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZTsgKGIpCittb2RpZnkgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgc28gdGhhdCBpdCBpcyBubyBsb25nZXIKK2luZnJpbmdpbmc7IG9yIChjKSB0ZXJtaW5hdGUgWW91ciByaWdodHMgdG8gdXNlIHRoZSBBZmZlY3RlZAorT3JpZ2luYWwgQ29kZSwgZWZmZWN0aXZlIGltbWVkaWF0ZWx5IHVwb24gQXBwbGVgcyBwb3N0aW5nIG9mIGEKK25vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUgdGhhdCBpcyB1c2VkIGZvcgoraW1wbGVtZW50YXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCis5LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgU0hBTEwgQVBQTEUgQkUKK0xJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SCitJTkFCSUxJVFkgVE8gVVNFIFRIRSBPUklHSU5BTCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSCitVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwKK1BST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgSEFTIEJFRU4gQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GCitFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBJbiBubyBldmVudCBzaGFsbCBBcHBsZWBzIHRvdGFsCitsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZQorYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMgKCQ1MC4wMCkuCisKKzEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsCisiTWFjIE9TIFggU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcKK3RvIEFwcGxlIChjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgYW5kIG5vIEFwcGxlIE1hcmtzIG1heSBiZQordXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlCitvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzCit3aXRoIEFwcGxlYHMgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlCitwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvCit0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YKK0FwcGxlICgiQXBwbGUgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwKK25vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBBcHBsZSBtYXksIGF0IGl0cworc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIKK3RoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMKK0xpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4gQXBwbGVgcworZGV2ZWxvcG1lbnQsIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2lsbCBub3QgYmUgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwKK3Rlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aAorYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOyAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mCit0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbnMgOS4xIGFuZC9vciAxMy42KGIpOyBvciAoYykKK2F1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUKK3Rlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQKK2FnYWluc3QgQXBwbGUuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8KK2ltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIGluIHRoZQorY2FzZSBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9uIDkuMSwgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZgordGhlIENvdmVyZWQgQ29kZSBvciBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIChpbiB0aGUgY2FzZSBvZgordGVybWluYXRpb24gdW5kZXIgU2VjdGlvbiA5LjEpIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvcgorY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuCitwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uCitvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbgoraW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsCitpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQKKzEzLiBOZWl0aGVyIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLAoraW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nCit0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mCitlaXRoZXIgcGFydHkuCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEV4cG9ydCBMYXcgQXNzdXJhbmNlcy4gWW91IG1heSBub3QgdXNlIG9yIG90aGVyd2lzZSBleHBvcnQgb3IKK3JlLWV4cG9ydCB0aGUgT3JpZ2luYWwgQ29kZSBleGNlcHQgYXMgYXV0aG9yaXplZCBieSBVbml0ZWQgU3RhdGVzCitsYXcgYW5kIHRoZSBsYXdzIG9mIHRoZSBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIE9yaWdpbmFsIENvZGUgd2FzCitvYnRhaW5lZC4gSW4gcGFydGljdWxhciwgYnV0IHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIE9yaWdpbmFsIENvZGUKK21heSBub3QgYmUgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgKGEpIGludG8gKG9yIHRvIGEgbmF0aW9uYWwgb3IKK3Jlc2lkZW50IG9mKSBhbnkgVS5TLiBlbWJhcmdvZWQgY291bnRyeSBvciAoYikgdG8gYW55b25lIG9uIHRoZQorVS5TLiBUcmVhc3VyeSBEZXBhcnRtZW50YHMgbGlzdCBvZiBTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMKK29yIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2VgcyBUYWJsZSBvZiBEZW5pYWwgT3JkZXJzLiBCeQordXNpbmcgdGhlIE9yaWdpbmFsIENvZGUsIFlvdSByZXByZXNlbnQgYW5kIHdhcnJhbnQgdGhhdCBZb3UgYXJlIG5vdAorbG9jYXRlZCBpbiwgdW5kZXIgY29udHJvbCBvZiwgb3IgYSBuYXRpb25hbCBvciByZXNpZGVudCBvZiBhbnkgc3VjaAorY291bnRyeSBvciBvbiBhbnkgc3VjaCBsaXN0LgorCisxMy4yIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMKK2RlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YQorcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseQorcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkKK2NvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4KK2FjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIKK1NvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSCisyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zCisoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUKK0RvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZQorQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTMuMyBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcworY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZgorbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudAordG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3IKK290aGVyd2lzZS4KKworMTMuNCBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIKK0FwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IKK2l0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0KK3RoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLAorTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heQorZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjUgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgQXBwbGUgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uCitvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudAorb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2gKK3Byb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QKK3RoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTMuNiBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudAoranVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uCit0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlCitlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZQorZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YKK3RoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpCitOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yCityZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aAorU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mCit0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UKK211c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZAorZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy43IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uCitiZXR3ZWVuIFlvdSBhbmQgQXBwbGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4KK3RoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkKK2NvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUKK2FuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcworTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uCitDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5CitleGNsdWRlZC4KKworMTMuOCBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlCitlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZgorQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nCitjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkCit0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzCitwYXJ0aWVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cworY29ubmV4ZXMgc29pZW50IHJlZGlnZXMgZW4gYW5nbGFpcy4KKworRVhISUJJVCBBLgorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCBSaWdodHMKK1Jlc2VydmVkLiBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZgorT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgYExpY2Vuc2VgKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlCitMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZSBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcKK3RoaXMgZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUKK2Rpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUKK0xpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNWU0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMQpAQCAtMCwwICsxLDM3NCBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMS4xIC0gQXByaWwgMTksMTk5OQorCitQbGVhc2UgcmVhZCB0aGlzIExpY2Vuc2UgY2FyZWZ1bGx5IGJlZm9yZSBkb3dubG9hZGluZyB0aGlzIHNvZnR3YXJlLgorQnkgZG93bmxvYWRpbmcgYW5kIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQKK2J5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgdGhlIHNvZnR3YXJlLgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIHdoaWNoIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBwdWJsaWNseSBhbm5vdW5jZXMgYXMKK3N1YmplY3QgdG8gdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgYW5kIHdoaWNoIGNvbnRhaW5zIGEKK25vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsCitDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljCitTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMSAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpLCBhcyBpdCBtYXkKK2JlIHJldmlzZWQgZnJvbSB0aW1lIHRvIHRpbWUgYnkgQXBwbGUgKCJMaWNlbnNlIikuICBBcyB1c2VkIGluIHRoaXMKK0xpY2Vuc2U6CisKKzEuMSAiQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSIgbWVhbnMgb25seSB0aG9zZSBzcGVjaWZpYyBwb3J0aW9ucyBvZgorT3JpZ2luYWwgQ29kZSB0aGF0IGFsbGVnZWRseSBpbmZyaW5nZSB1cG9uIGFueSBwYXJ0eWBzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIGFyZSBvdGhlcndpc2UgdGhlIHN1YmplY3Qgb2YgYSBjbGFpbSBvZgoraW5mcmluZ2VtZW50LgorCisxLjIgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzCit0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyCithY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gQXBwbGUgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0CittYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50CituZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUKK3dpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YKK3JpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsCitvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyCitNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKzEuMyAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlCitjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueQorcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyCit0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCksIGFuZCBpbmNsdWRlcword2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mCitDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UsCithcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQKK0NvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuNSAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMKK3RoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlCit0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIENvdmVyZWQgQ29kZS4gIFdoZW4gY29kZSBpcworcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvCitvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7CithbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtCitzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zCitvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuCitleHByZXNzbHkgaWRlbnRpZmllZCBieSBBcHBsZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoCit3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kCitvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS44ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsCittb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLAorc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlCisob2JqZWN0IGNvZGUpLgorCisxLjkgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZworcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiCitpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlcgorY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0CitvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mCitzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiAgU3ViamVjdCB0byB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbgordGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0gZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YKK0FwcGxlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbAorQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFlvdSBtYXkgdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSwgd2l0aCBvcgord2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kCitkZXZlbG9wbWVudCwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQKK2FuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhcgoraW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZQordGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7CisKKyhiKSBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mCitDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlcgorb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlcgorU2VjdGlvbiA2OyBhbmQKKworKGMpIGNvbXBsZXRlbHkgYW5kIGFjY3VyYXRlbHkgZG9jdW1lbnQgYWxsIE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgaGF2ZQorbWFkZSBhbmQgdGhlIGRhdGUgb2YgZWFjaCBzdWNoIE1vZGlmaWNhdGlvbiwgZGVzaWduYXRlIHRoZSB2ZXJzaW9uIG9mCit0aGUgT3JpZ2luYWwgQ29kZSB5b3UgdXNlZCwgcHJvbWluZW50bHkgaW5jbHVkZSBhIGZpbGUgY2Fycnlpbmcgc3VjaAoraW5mb3JtYXRpb24gd2l0aCB0aGUgTW9kaWZpY2F0aW9ucywgYW5kIGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluCitFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgc3VjaCBNb2RpZmljYXRpb25zLgorCisyLjIgWW91IG1heSBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2gKKyAgaW5zdGFuY2U6CisKKyhhKSBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlCitTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgbWFrZSBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB2aWEgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24gKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGUgbGljZW5zZSBncmFudHMgc2V0Citmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBZb3UgbWF5IGNob29zZSB0bworb2ZmZXIgdW5kZXIgU2VjdGlvbiA2LiAgWW91IG11c3QgY29udGludWUgdG8gbWFrZSB0aGUgU291cmNlIENvZGUgb2YKK1lvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUKK0NvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsCitEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyOworCisoYykgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgY29udGFpbmluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgWW91LAoraW5mb3JtIG90aGVycyBvZiBob3cgdG8gb2J0YWluIHRob3NlIE1vZGlmaWNhdGlvbnMgYnkgZmlsbGluZyBvdXQgYW5kCitzdWJtaXR0aW5nIHRoZSBpbmZvcm1hdGlvbiBmb3VuZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlL21vZGlmaWNhdGlvbnMuaHRtbCwgaWYgYXZhaWxhYmxlOworYW5kCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksCitpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZAorZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMKK2F2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZAord2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiAgSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUKK2xpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwKK3JlcHJvZHVjZSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZQorc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIEFwcGxlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjI7CithbmQKKworKGIpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLAord29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91cgorQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkCitvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGV4ZWN1dGUsIGNvbXBpbGUsIGRpc3BsYXksCitwZXJmb3JtLCBtb2RpZnkgb3IgaGF2ZSBtb2RpZmllZCAoZm9yIEFwcGxlIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzKSwKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgWW91ciBNb2RpZmljYXRpb25zLCBpbiBhbnkgZm9ybSwgdGhyb3VnaAorbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCis0LiBMYXJnZXIgV29ya3MuICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkCitDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuICBJbiBlYWNoIHN1Y2gKK2luc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlCitmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbgorU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5CitBcHBsZSBoZXJlaW4uICBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUKK2FkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gQXBwbGUgd2hpY2ggQXBwbGUgbWF5IGdyYW50IGluIGl0cworc29sZSBkaXNjcmV0aW9uLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUKK2Zvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yCitvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbgorKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUKK3Jlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZS4gWW91IG11c3Qgb2J0YWluIHRoZQorcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieQorWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZQoraGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QKK0FwcGxlIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gIEFwcGxlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgRWFjaCB2ZXJzaW9uIHdpbGwgYmUKK2dpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4KK3B1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUKK3RvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZQorc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiAgTm8gb25lIG90aGVyIHRoYW4gQXBwbGUgaGFzIHRoZSByaWdodCB0bworbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuICBUaGUgT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvcgoraW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuICBUaGUKK09yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZgorZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiAgWW91IGV4cHJlc3NseQorYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBhbnkgcG9ydGlvbgordGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gIFRIRSBPUklHSU5BTCBDT0RFIElTCitQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5ECitBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQKKzksIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIEFSRSBDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMKKyJBUFBMRSIpIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK0FORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkKK1JJR0hUUy4gIEFQUExFIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUKK09SSUdJTkFMIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YKK1RIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi0gRlJFRSwgT1IgVEhBVAorREVGRUNUUyBJTiBUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gIE5PIE9SQUwgT1IgV1JJVFRFTgorSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFIE9SIEFOIEFQUExFIEFVVEhPUklaRUQKK1JFUFJFU0VOVEFUSVZFIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZIE9SIElOIEFOWSBXQVkgSU5DUkVBU0UgVEhFCitTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiAgWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgaXMgbm90CitpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdAorbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluCit3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsCitwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTGlhYmlsaXR5LgorCis5LjEgSW5mcmluZ2VtZW50LiAgSWYgYW55IHBvcnRpb24gb2YsIG9yIGZ1bmN0aW9uYWxpdHkgaW1wbGVtZW50ZWQgYnksCit0aGUgT3JpZ2luYWwgQ29kZSBiZWNvbWVzIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YgaW5mcmluZ2VtZW50LAorQXBwbGUgbWF5LCBhdCBpdHMgb3B0aW9uOiAoYSkgYXR0ZW1wdCB0byBwcm9jdXJlIHRoZSByaWdodHMgbmVjZXNzYXJ5Citmb3IgQXBwbGUgYW5kIFlvdSB0byBjb250aW51ZSB1c2luZyB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZTsgKGIpCittb2RpZnkgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgc28gdGhhdCBpdCBpcyBubyBsb25nZXIgaW5mcmluZ2luZzsKK29yIChjKSBzdXNwZW5kIFlvdXIgcmlnaHRzIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHVudGlsIGEgZmluYWwgZGV0ZXJtaW5hdGlvbiBvZgordGhlIGNsYWltIGlzIG1hZGUgYnkgYSBjb3VydCBvciBnb3Zlcm5tZW50YWwgYWRtaW5pc3RyYXRpdmUgYWdlbmN5IG9mCitjb21wZXRlbnQganVyaXNkaWN0aW9uIGFuZCBBcHBsZSBsaWZ0cyB0aGUgc3VzcGVuc2lvbiBhcyBzZXQgZm9ydGgKK2JlbG93LiAgU3VjaCBzdXNwZW5zaW9uIG9mIHJpZ2h0cyB3aWxsIGJlIGVmZmVjdGl2ZSBpbW1lZGlhdGVseSB1cG9uCitBcHBsZWBzIHBvc3Rpbmcgb2YgYSBub3RpY2UgdG8gc3VjaCBlZmZlY3Qgb24gdGhlIEFwcGxlIHdlYiBzaXRlIHRoYXQKK2lzIHVzZWQgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIFVwb24gc3VjaCBmaW5hbAorZGV0ZXJtaW5hdGlvbiBiZWluZyBtYWRlLCBpZiBBcHBsZSBpcyBsZWdhbGx5IGFibGUsIHdpdGhvdXQgdGhlCitwYXltZW50IG9mIGEgZmVlIG9yIHJveWFsdHksIHRvIHJlc3VtZSB1c2UsIHJlcHJvZHVjdGlvbiwKK21vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIEFmZmVjdGVkIE9yaWdpbmFsCitDb2RlLCBBcHBsZSB3aWxsIGxpZnQgdGhlIHN1c3BlbnNpb24gb2YgcmlnaHRzIHRvIHRoZSBBZmZlY3RlZAorT3JpZ2luYWwgQ29kZSBieSBwb3N0aW5nIGEgbm90aWNlIHRvIHN1Y2ggZWZmZWN0IG9uIHRoZSBBcHBsZSB3ZWIgc2l0ZQordGhhdCBpcyB1c2VkIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuICBJZiBBcHBsZSBzdXNwZW5kcworWW91ciByaWdodHMgdG8gQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwKK2JlIGNvbnN0cnVlZCB0byByZXN0cmljdCBZb3UsIGF0IFlvdXIgb3B0aW9uIGFuZCBzdWJqZWN0IHRvIGFwcGxpY2FibGUKK2xhdywgZnJvbSByZXBsYWNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgd2l0aCBub24taW5mcmluZ2luZworY29kZSBvciBpbmRlcGVuZGVudGx5IG5lZ290aWF0aW5nIGZvciBuZWNlc3NhcnkgcmlnaHRzIGZyb20gc3VjaCB0aGlyZAorcGFydHkuCisKKzkuMiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgU0hBTEwgQVBQTEUgQkUKK0xJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTworVVNFIFRIRSBPUklHSU5BTCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZCitPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVFMgTElBQklMSVRZCitPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GCitBTlkgUkVNRURZLiAgSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwKK2RhbWFnZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMKKygkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIkFwcGxlIiwgIkFwcGxlIENvbXB1dGVyIiwgIk1hYyBPUyBYIiwgIk1hYworT1MgWCBTZXJ2ZXIiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBBcHBsZQorKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBhbmQgbm8gQXBwbGUgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcworcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZWBzIHRoaXJkCitwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0CitodHRwOi8vd3d3LmFwcGxlLmNvbS9sZWdhbC9ndWlkZWxpbmVzZm9yM3JkcGFydGllcy5odG1sLgorCisxMS4gT3duZXJzaGlwLiAgQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvCit0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUKKygiQXBwbGUgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlCithdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgQXBwbGUgbWF5LCBhdCBpdHMgc29sZQorZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IKK21heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuICBBcHBsZWBzIGRldmVsb3BtZW50LCB1c2UsCityZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgQ292ZXJlZAorQ29kZSB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFRlcm1pbmF0aW9uLgorCisxMi4xIFRlcm1pbmF0aW9uLiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwKKyAgIHRlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aAorYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOyAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mCit0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvciAoYykgYXV0b21hdGljYWxseQord2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzCitMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uICBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8KK2ltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwKK3N1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsCitjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KK0FsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkCitwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUKK3Rlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkCit0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiAgTmVpdGhlciBwYXJ0eSB3aWxsIGJlCitsaWFibGUgdG8gdGhlIG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0Citzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMKK3Rlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8KK2FueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgZWl0aGVyIHBhcnR5LgorCisxMy4gIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMKK2RlZmluZWQgaW4gRkFSIDIuMTAxLiAgR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzCitpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8KK3RoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwKK2xpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aAorRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvcgorRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tCitDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIKK1NvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiAgQWNjb3JkaW5nbHksIGFsbCBVLlMuCitHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldAorZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiAgVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcworY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZgorbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0bwordGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3IKK290aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyCitBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yCitpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZQorc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwKK01vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkKK2RldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiAgRmFpbHVyZSBieSBBcHBsZSB0byBlbmZvcmNlIGFueSBwcm92aXNpb24KK29mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mCit0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uICBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMKK3RoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIKK3dpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTMuNSBTZXZlcmFiaWxpdHkuICAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLAordG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0bwordGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMKK2FuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsCitjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuICAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsCitpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vcgorc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlCitlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsCitpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YKK3RoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyCitwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiAgQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uCitiZXR3ZWVuIFlvdSBhbmQgQXBwbGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlCitOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0bwordGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwKK2NvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUKK2FwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlCitJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuICBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlCitlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiAgVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YKK0NhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZworY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZAordGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcworcGFydGllcyBvbnQgZXhpZ2UgcXVlIGxlIHByZXNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMKK2Nvbm5leGVzIHNvaWVudCByZWRpZ2VzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4KKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OS0yMDAwIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgUmlnaHRzCitSZXNlcnZlZC4gIFRoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mCitPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZQorTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nCit0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCitkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIKK0VYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi0gSU5GUklOR0VNRU5ULiAgUGxlYXNlIHNlZSB0aGUKK0xpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTM1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMgpAQCAtMCwwICsxLDEwNSBAQAorCitBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyLiAxLjIKKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4yIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZikgKCJMaWNlbnNlIikuIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOgorCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMyAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuNSAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjggIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjkgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworMS4xMCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLlN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSwgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgYW5kL29yIFBlcnNvbmFsIFVzZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7IGFuZAorCisoYikgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2LgorCisyLjIgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7CisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7CisKKyhjKSBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyBhbmQKKworKGQpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLgorCisyLjMgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgQ29kZS4KKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOyBhbmQKKworKGIpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBBcHBsZSBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgWW91ciBNb2RpZmljYXRpb25zLCBpbiBhbnkgZm9ybSwgdGhyb3VnaCBtdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKzQuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gZWFjaCBzdWNoIGluc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLgorCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IEFwcGxlIGhlcmVpbi4gTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gQXBwbGUgd2hpY2ggQXBwbGUgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluICgiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3Qgb2J0YWluIHRoZSByZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IEFwcGxlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJBUFBMRSIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBBUFBMRSBBTkQgRUFDSCBDT05UUklCVVRPUiBET0VTIE5PVCBXQVJSQU5UIEFHQUlOU1QgSU5URVJGRVJFTkNFIFdJVEggWU9VUiBFTkpPWU1FTlQgT0YgVEhFIENPVkVSRUQgQ09ERSwgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFLCBBTiBBUFBMRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBBcHBsZWBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMgKCQ1MC4wMCkuCisKKzEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIkFwcGxlIiwgIkFwcGxlIENvbXB1dGVyIiwgIk1hYyBPUyBYIiwgIk1hYyBPUyBYIFNlcnZlciIsICJRdWlja1RpbWUiLCAiUXVpY2tUaW1lIFN0cmVhbWluZyBTZXJ2ZXIiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBBcHBsZSAoY29sbGVjdGl2ZWx5ICJBcHBsZSBNYXJrcyIpIG9yIHRvIGFueSB0cmFkZW1hcmsgb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiBObyBBcHBsZSBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZWBzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBBcHBsZSAoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBBcHBsZSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTIuIFRlcm1pbmF0aW9uLgorCisxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisKKyhiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IKKworKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IEFwcGxlLgorCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS4KKworMTMuIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nWW91LCBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgQXBwbGVgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzM7IHF1ZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMztkaWcmIzIzMztzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4KKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mIE9yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4yICh0aGUgYExpY2Vuc2VgKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nIHRoaXMgZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyZThiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMi4wCkBAIC0wLDAgKzEsMTAyIEBACisKK0FQUExFIFBVQkxJQyBTT1VSQ0UgTElDRU5TRQorVmVyc2lvbiAyLjAgLSAgQXVndXN0IDYsIDIwMDMKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4gIEJ5IGRvd25sb2FkaW5nIG9yIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBkbyBub3Qgb3IgY2Fubm90IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHBsZWFzZSBkbyBub3QgZG93bmxvYWQgb3IgdXNlIHRoZSBzb2Z0d2FyZS4KKworQXBwbGUgTm90ZTogIEluIEphbnVhcnkgMjAwNywgQXBwbGUgY2hhbmdlZCBpdHMgY29ycG9yYXRlIG5hbWUgZnJvbSAiQXBwbGUgQ29tcHV0ZXIsIEluYy4iIHRvICJBcHBsZSBJbmMuIiAgVGhpcyBjaGFuZ2UgaGFzIGJlZW4gcmVmbGVjdGVkIGJlbG93IGFuZCBjb3B5cmlnaHQgeWVhcnMgdXBkYXRlZCwgYnV0IG5vIG90aGVyIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIEFQU0wgMi4wLgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggQXBwbGUgSW5jLiAoIkFwcGxlIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGFuZCB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsIENvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgdmVyc2lvbiAyLjAgKCJMaWNlbnNlIikuICBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAgKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMyAgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNCAiRXh0ZXJuYWxseSBEZXBsb3kiIG1lYW5zOiAoYSkgdG8gc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3U7IGFuZC9vciAoYikgdG8gdXNlIENvdmVyZWQgQ29kZSwgYWxvbmUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLCBpbiBhbnkgd2F5IHRvIHByb3ZpZGUgYSBzZXJ2aWNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRlbGl2ZXJ5IG9mIGNvbnRlbnQsIHRocm91Z2ggZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9uIHdpdGggYSBjbGllbnQgb3RoZXIgdGhhbiBZb3UuCisKKzEuNSAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuICBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAgKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4gCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlCisKKzEuOCAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLgorCisxLjkgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuICAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZiBBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFVubW9kaWZpZWQgQ29kZS4gIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGludGVybmFsbHkgZGlzdHJpYnV0ZSB3aXRoaW4gWW91ciBvcmdhbml6YXRpb24sIGFuZCBFeHRlcm5hbGx5IERlcGxveSB2ZXJiYXRpbSwgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kCisKKyhiKSAgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUgb3IgRXh0ZXJuYWxseSBEZXBsb3ksIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2LgorCisyLjIgTW9kaWZpZWQgQ29kZS4gIFlvdSBtYXkgbW9kaWZ5IENvdmVyZWQgQ29kZSBhbmQgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGludGVybmFsbHkgZGlzdHJpYnV0ZSB3aXRoaW4gWW91ciBvcmdhbml6YXRpb24sIGFuZCBFeHRlcm5hbGx5IERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgYW5kIENvdmVyZWQgQ29kZSwgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZSBZb3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOyAKKworKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyhjKSBJZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zLCBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlaXRoZXIgYXZhaWxhYmxlIHRvIHRob3NlIHRvIHdob20gWW91IGhhdmUgRXh0ZXJuYWxseSBEZXBsb3llZCBZb3VyIE1vZGlmaWNhdGlvbnMsIG9yIHB1YmxpY2x5IGF2YWlsYWJsZS4gIFNvdXJjZSBDb2RlIG9mIFlvdXIgRXh0ZXJuYWxseSBEZXBsb3llZCBNb2RpZmljYXRpb25zIG11c3QgYmUgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IEV4dGVybmFsbHkgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBFeHRlcm5hbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBZb3Ugc2hvdWxkIHByZWZlcmFibHkgZGlzdHJpYnV0ZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKS4KKworMi4zIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAgSW4gYWRkaXRpb24sIGlmIFlvdSBFeHRlcm5hbGx5IERlcGxveSBDb3ZlcmVkIENvZGUgKE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMpIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLiAgCisKKzIuNCBUaGlyZCBQYXJ0eSBSaWdodHMuICBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIEFwcGxlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEFwcGxlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IGhlcmVieSBncmFudCB0byBhbnkgcGVyc29uIG9yIGVudGl0eSByZWNlaXZpbmcgb3IgZGlzdHJpYnV0aW5nIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMiBhYm92ZS4gIAorCis0LiBMYXJnZXIgV29ya3MuICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiAgSW4gZWFjaCBzdWNoIGluc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiAKKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuICAgRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IEFwcGxlIGhlcmVpbi4gIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiAgCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuICBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLiAKKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuICBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIAorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiAgVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuICBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiAgVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJBUFBMRSIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiAgQVBQTEUgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgQVBQTEUsIEFOIEFQUExFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiAgWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBBcHBsZWBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMgKCQ1MC4wMCkuCisKKzEwLiBUcmFkZW1hcmtzLiAgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICAiQXBwbGUiLCAiTWFjIiwgIk1hYyBPUyIsICJRdWlja1RpbWUiLCAiUXVpY2tUaW1lIFN0cmVhbWluZyBTZXJ2ZXIiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBsb2dvcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiAgWW91IGFncmVlIG5vdCB0byB1c2UgYW55IEFwcGxlIE1hcmtzIGluIG9yIGFzIHBhcnQgb2YgdGhlIG5hbWUgb2YgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZWBzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4gIAorCisxMS4gT3duZXJzaGlwLiBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiAgQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBBcHBsZSAoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgQXBwbGUgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuICAKKworMTIuIFRlcm1pbmF0aW9uLiAgCisKKzEyLjEgVGVybWluYXRpb24uICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisoYykgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgQXBwbGU7IHByb3ZpZGVkIHRoYXQgQXBwbGUgZGlkIG5vdCBmaXJzdCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBZb3UgaW4gdGhhdCBpbnN0YW5jZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uICBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLiAgQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuICBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKzEzLiAgTWlzY2VsbGFuZW91cy4KKworMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuICBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuICBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZyBZb3UsIEFwcGxlIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3Igb3RoZXJ3aXNlLgorCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiAgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gIEZhaWx1cmUgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uICBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAgKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uICBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiAgVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZiBDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuIAorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiAgVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiAgTGVzIHBhcnRpZXMgb250IGV4aWcmIzIzMzsgcXVlIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgciYjMjMzO2RpZyYjMjMzO3MgZW4gYW5nbGFpcy4KKworRVhISUJJVCBBLiAKKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IEFwcGxlIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mIE9yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMi4wICh0aGUgYExpY2Vuc2VgKS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5hcHBsZS5jb20vYXBzbC8gYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nIHRoaXMgZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuICBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIiAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQWRvYmUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BZG9iZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDc3OWRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQWRvYmUKQEAgLTAsMCArMSwxNCBAQAorQ29weXJpZ2h0IDE5OTAtMTk5OCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIAorUGF0ZW50cyBQZW5kaW5nCisKK05PVElDRTogQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgdGhlIHByb3BlcnR5IG9mIEFkb2JlCitTeXN0ZW1zIEluY29ycG9yYXRlZC4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIGZvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgcHJvdmlkZWQKK3RoaXMgY29weXJpZ2h0IG5vdGljZSBpcyBtYWludGFpbmVkIGludGFjdCBhbmQgdGhhdCB0aGUgY29udGVudHMKK29mIHRoaXMgZmlsZSBhcmUgbm90IGFsdGVyZWQgaW4gYW55IHdheSBmcm9tIGl0cyBvcmlnaW5hbCBmb3JtLgorCitQb3N0U2NyaXB0IGFuZCBEaXNwbGF5IFBvc3RTY3JpcHQgYXJlIHRyYWRlbWFya3Mgb2YgQWRvYmUgU3lzdGVtcworSW5jb3Jwb3JhdGVkIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGluIGNlcnRhaW4ganVyaXNkaWN0aW9ucy4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTkwODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4wCkBAIC0wLDAgKzEsNjEgQEAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IFRoZSBBcGFjaGUgR3JvdXAuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEFwYWNoZSBHcm91cAorICogICAgZm9yIHVzZSBpbiB0aGUgQXBhY2hlIEhUVFAgc2VydmVyIHByb2plY3QgKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSBTZXJ2ZXIiIGFuZCAiQXBhY2hlIEdyb3VwIiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgYXBhY2hlQGFwYWNoZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIKKyAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIEdyb3VwLgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEFwYWNoZSBHcm91cAorICogICAgZm9yIHVzZSBpbiB0aGUgQXBhY2hlIEhUVFAgc2VydmVyIHByb2plY3QgKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBUEFDSEUgR1JPVVAgYGBBUyBJU2BgIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgR1JPVVAgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgR3JvdXAgYW5kIHdhcyBvcmlnaW5hbGx5IGJhc2VkCisgKiBvbiBwdWJsaWMgZG9tYWluIHNvZnR3YXJlIHdyaXR0ZW4gYXQgdGhlIE5hdGlvbmFsIENlbnRlciBmb3IKKyAqIFN1cGVyY29tcHV0aW5nIEFwcGxpY2F0aW9ucywgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcywgVXJiYW5hLUNoYW1wYWlnbi4KKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgR3JvdXAgYW5kIHRoZSBBcGFjaGUgSFRUUCBzZXJ2ZXIKKyAqIHByb2plY3QsIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoKKyAqLworCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjVlYzAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMQpAQCAtMCwwICsxLDYwIEBACisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorICogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICoKKyAqIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0CisgKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGJhc2VkIHVwb24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZQorICogb3JpZ2luYWxseSB3cml0dGVuIGF0IHRoZSBOYXRpb25hbCBDZW50ZXIgZm9yIFN1cGVyY29tcHV0aW5nIEFwcGxpY2F0aW9ucywKKyAqIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMsIFVyYmFuYS1DaGFtcGFpZ24uCisgKi8KKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzIwMWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTIuMApAQCAtMCwwICsxLDIwNCBAQAorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCisKKyAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCisgICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uYHQgaW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCisgICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3ZTRkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTEuMApAQCAtMCwwICsxLDUwIEBACisKK1RoZSBBcnRpc3RpYyBMaWNlbnNlCitQcmVhbWJsZQorCitUaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy4KKworRGVmaW5pdGlvbnM6CisKKyJQYWNrYWdlIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorIkNvcHlyaWdodCBIb2xkZXIiIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvciBjb3B5cmlnaHRzIGZvciB0aGUgcGFja2FnZS4KKyJZb3UiIGlzIHlvdSwgaWYgeW91YHJlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS4KKyJSZWFzb25hYmxlIGNvcHlpbmcgZmVlIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlIGJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlIGludm9sdmVkLCBhbmQgc28gb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdCB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYnV0IG9ubHkgdG8gdGhlIGNvbXB1dGluZyBjb21tdW5pdHkgYXQgbGFyZ2UgYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pCisiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0gaXRzZWxmLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGl0ZW0uIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heSByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKzIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucyBkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQgd2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIHBsYWNpbmcgdGhlIG1vZGlmaWNhdGlvbnMgb24gYSBtYWpvciBhcmNoaXZlIHNpdGUgc3VjaCBhcyBmdHAudXUubmV0LCBvciBieSBhbGxvd2luZyB0aGUgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS4KKworYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLgorCitjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKK2QpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCithKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCitiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy4KKworYykgYWNjb21wYW55IGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKzUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwgeW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KKworNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzIFBhY2thZ2UuCisKKzcuIEMgb3IgcGVybCBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZS4KKworOC4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworOS4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitUaGUgRW5kCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGY4ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMi4wCkBAIC0wLDAgKzEsMjAzIEBACisKKyAgICAgICAgIFRoZSBBcnRpc3RpYyBMaWNlbnNlIDIuMAorCisgICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBUaGUgUGVybCBGb3VuZGF0aW9uLgorCisgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1ByZWFtYmxlCisKK1RoaXMgbGljZW5zZSBlc3RhYmxpc2hlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggYSBnaXZlbiBmcmVlIHNvZnR3YXJlCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIG1vZGlmaWVkLCBkaXN0cmlidXRlZCwgYW5kL29yIHJlZGlzdHJpYnV0ZWQuCitUaGUgaW50ZW50IGlzIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgYXJ0aXN0aWMKK2NvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhhdCBQYWNrYWdlIHdoaWxlIHN0aWxsIGtlZXBpbmcgdGhlCitQYWNrYWdlIGF2YWlsYWJsZSBhcyBvcGVuIHNvdXJjZSBhbmQgZnJlZSBzb2Z0d2FyZS4KKworWW91IGFyZSBhbHdheXMgcGVybWl0dGVkIHRvIG1ha2UgYXJyYW5nZW1lbnRzIHdob2xseSBvdXRzaWRlIG9mIHRoaXMKK2xpY2Vuc2UgZGlyZWN0bHkgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlciBvZiBhIGdpdmVuIFBhY2thZ2UuICBJZiB0aGUKK3Rlcm1zIG9mIHRoaXMgbGljZW5zZSBkbyBub3QgcGVybWl0IHRoZSBmdWxsIHVzZSB0aGF0IHlvdSBwcm9wb3NlIHRvCittYWtlIG9mIHRoZSBQYWNrYWdlLCB5b3Ugc2hvdWxkIGNvbnRhY3QgdGhlIENvcHlyaWdodCBIb2xkZXIgYW5kIHNlZWsKK2EgZGlmZmVyZW50IGxpY2Vuc2luZyBhcnJhbmdlbWVudC4gCisKK0RlZmluaXRpb25zCisKKyAgICAiQ29weXJpZ2h0IEhvbGRlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3Igb3JnYW5pemF0aW9uKHMpCisgICAgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBlbnRpcmUgUGFja2FnZS4KKworICAgICJDb250cmlidXRvciIgbWVhbnMgYW55IHBhcnR5IHRoYXQgaGFzIGNvbnRyaWJ1dGVkIGNvZGUgb3Igb3RoZXIKKyAgICBtYXRlcmlhbCB0byB0aGUgUGFja2FnZSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyYHMKKyAgICBwcm9jZWR1cmVzLgorCisgICAgIllvdSIgYW5kICJ5b3VyIiBtZWFucyBhbnkgcGVyc29uIHdobyB3b3VsZCBsaWtlIHRvIGNvcHksCisgICAgZGlzdHJpYnV0ZSwgb3IgbW9kaWZ5IHRoZSBQYWNrYWdlLgorCisgICAgIlBhY2thZ2UiIG1lYW5zIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gYW5kL29yIG9mCisgICAgdGhvc2UgZmlsZXMuIEEgZ2l2ZW4gUGFja2FnZSBtYXkgY29uc2lzdCBvZiBlaXRoZXIgdGhlIFN0YW5kYXJkCisgICAgVmVyc2lvbiwgb3IgYSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgIkRpc3RyaWJ1dGUiIG1lYW5zIHByb3ZpZGluZyBhIGNvcHkgb2YgdGhlIFBhY2thZ2Ugb3IgbWFraW5nIGl0CisgICAgYWNjZXNzaWJsZSB0byBhbnlvbmUgZWxzZSwgb3IgaW4gdGhlIGNhc2Ugb2YgYSBjb21wYW55IG9yCisgICAgb3JnYW5pemF0aW9uLCB0byBvdGhlcnMgb3V0c2lkZSBvZiB5b3VyIGNvbXBhbnkgb3Igb3JnYW5pemF0aW9uLgorCisgICAgIkRpc3RyaWJ1dG9yIEZlZSIgbWVhbnMgYW55IGZlZSB0aGF0IHlvdSBjaGFyZ2UgZm9yIERpc3RyaWJ1dGluZworICAgIHRoaXMgUGFja2FnZSBvciBwcm92aWRpbmcgc3VwcG9ydCBmb3IgdGhpcyBQYWNrYWdlIHRvIGFub3RoZXIKKyAgICBwYXJ0eS4gIEl0IGRvZXMgbm90IG1lYW4gbGljZW5zaW5nIGZlZXMuCisKKyAgICAiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbgorICAgIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBvbmx5IGluIHdheXMgZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICBieSB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworICAgICJNb2RpZmllZCBWZXJzaW9uIiBtZWFucyB0aGUgUGFja2FnZSwgaWYgaXQgaGFzIGJlZW4gY2hhbmdlZCwgYW5kCisgICAgc3VjaCBjaGFuZ2VzIHdlcmUgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJ5IHRoZSBDb3B5cmlnaHQKKyAgICBIb2xkZXIuIAorCisgICAgIk9yaWdpbmFsIExpY2Vuc2UiIG1lYW5zIHRoaXMgQXJ0aXN0aWMgTGljZW5zZSBhcyBEaXN0cmlidXRlZCB3aXRoCisgICAgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UsIGluIGl0cyBjdXJyZW50IHZlcnNpb24gb3IgYXMKKyAgICBpdCBtYXkgYmUgbW9kaWZpZWQgYnkgVGhlIFBlcmwgRm91bmRhdGlvbiBpbiB0aGUgZnV0dXJlLgorCisgICAgIlNvdXJjZSIgZm9ybSBtZWFucyB0aGUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQKKyAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgUGFja2FnZS4KKworICAgICJDb21waWxlZCIgZm9ybSBtZWFucyB0aGUgY29tcGlsZWQgYnl0ZWNvZGUsIG9iamVjdCBjb2RlLCBiaW5hcnksCisgICAgb3IgYW55IG90aGVyIGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbCB0cmFuc2Zvcm1hdGlvbiBvcgorICAgIHRyYW5zbGF0aW9uIG9mIHRoZSBTb3VyY2UgZm9ybS4KKworCitQZXJtaXNzaW9uIGZvciBVc2UgYW5kIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorCisoMSkgIFlvdSBhcmUgcGVybWl0dGVkIHRvIHVzZSB0aGUgU3RhbmRhcmQgVmVyc2lvbiBhbmQgY3JlYXRlIGFuZCB1c2UKK01vZGlmaWVkIFZlcnNpb25zIGZvciBhbnkgcHVycG9zZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0Cit5b3UgZG8gbm90IERpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKworUGVybWlzc2lvbnMgZm9yIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uCisKKygyKSAgWW91IG1heSBEaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgU291cmNlIGZvcm0gb2YgdGhlCitTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcmVzdHJpY3Rpb24sCitlaXRoZXIgZ3JhdGlzIG9yIGZvciBhIERpc3RyaWJ1dG9yIEZlZSwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlCithbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLiAgQXQKK3lvdXIgZGlzY3JldGlvbiwgc3VjaCB2ZXJiYXRpbSBjb3BpZXMgbWF5IG9yIG1heSBub3QgaW5jbHVkZSBhCitDb21waWxlZCBmb3JtIG9mIHRoZSBQYWNrYWdlLgorCisoMykgIFlvdSBtYXkgYXBwbHkgYW55IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgY2hhbmdlcywgYW5kIG90aGVyCittb2RpZmljYXRpb25zIG1hZGUgYXZhaWxhYmxlIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuICBUaGUgcmVzdWx0aW5nCitQYWNrYWdlIHdpbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgYW5kIGFzIHN1Y2gKK3dpbGwgYmUgc3ViamVjdCB0byB0aGUgT3JpZ2luYWwgTGljZW5zZS4KKworCitEaXN0cmlidXRpb24gb2YgTW9kaWZpZWQgVmVyc2lvbnMgb2YgdGhlIFBhY2thZ2UgYXMgU291cmNlIAorCisoNCkgIFlvdSBtYXkgRGlzdHJpYnV0ZSB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYXMgU291cmNlIChlaXRoZXIgZ3JhdGlzCitvciBmb3IgYSBEaXN0cmlidXRvciBGZWUsIGFuZCB3aXRoIG9yIHdpdGhvdXQgYSBDb21waWxlZCBmb3JtIG9mIHRoZQorTW9kaWZpZWQgVmVyc2lvbikgcHJvdmlkZWQgdGhhdCB5b3UgY2xlYXJseSBkb2N1bWVudCBob3cgaXQgZGlmZmVycworZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGRvY3VtZW50aW5nCithbnkgbm9uLXN0YW5kYXJkIGZlYXR1cmVzLCBleGVjdXRhYmxlcywgb3IgbW9kdWxlcywgYW5kIHByb3ZpZGVkIHRoYXQKK3lvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIChhKSAgbWFrZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhdmFpbGFibGUgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIKKyAgICBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgdW5kZXIgdGhlIE9yaWdpbmFsIExpY2Vuc2UsIHNvIHRoYXQgdGhlCisgICAgQ29weXJpZ2h0IEhvbGRlciBtYXkgaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkCisgICAgVmVyc2lvbi4KKworICAgIChiKSAgZW5zdXJlIHRoYXQgaW5zdGFsbGF0aW9uIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBkb2VzIG5vdAorICAgIHByZXZlbnQgdGhlIHVzZXIgaW5zdGFsbGluZyBvciBydW5uaW5nIHRoZSBTdGFuZGFyZCBWZXJzaW9uLiBJbgorICAgIGFkZGl0aW9uLCB0aGUgTW9kaWZpZWQgVmVyc2lvbiBtdXN0IGJlYXIgYSBuYW1lIHRoYXQgaXMgZGlmZmVyZW50CisgICAgZnJvbSB0aGUgbmFtZSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIChjKSAgYWxsb3cgYW55b25lIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8KKyAgICBtYWtlIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhdmFpbGFibGUgdG8gb3RoZXJzCisgICAgdW5kZXIKKyAgCisgKGkpICB0aGUgT3JpZ2luYWwgTGljZW5zZSBvcgorCisgKGlpKSAgYSBsaWNlbnNlIHRoYXQgcGVybWl0cyB0aGUgbGljZW5zZWUgdG8gZnJlZWx5IGNvcHksCisgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFZlcnNpb24gdXNpbmcgdGhlIHNhbWUKKyBsaWNlbnNpbmcgdGVybXMgdGhhdCBhcHBseSB0byB0aGUgY29weSB0aGF0IHRoZSBsaWNlbnNlZQorIHJlY2VpdmVkLCBhbmQgcmVxdWlyZXMgdGhhdCB0aGUgU291cmNlIGZvcm0gb2YgdGhlIE1vZGlmaWVkCisgVmVyc2lvbiwgYW5kIG9mIGFueSB3b3JrcyBkZXJpdmVkIGZyb20gaXQsIGJlIG1hZGUgZnJlZWx5CisgYXZhaWxhYmxlIGluIHRoYXQgbGljZW5zZSBmZWVzIGFyZSBwcm9oaWJpdGVkIGJ1dCBEaXN0cmlidXRvcgorIEZlZXMgYXJlIGFsbG93ZWQuCisKKworRGlzdHJpYnV0aW9uIG9mIENvbXBpbGVkIEZvcm1zIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIAorb3IgTW9kaWZpZWQgVmVyc2lvbnMgd2l0aG91dCB0aGUgU291cmNlCisKKyg1KSAgWW91IG1heSBEaXN0cmlidXRlIENvbXBpbGVkIGZvcm1zIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIHdpdGhvdXQKK3RoZSBTb3VyY2UsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgY29tcGxldGUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworZ2V0IHRoZSBTb3VyY2Ugb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24uICBTdWNoIGluc3RydWN0aW9ucyBtdXN0IGJlCit2YWxpZCBhdCB0aGUgdGltZSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4gIElmIHRoZXNlIGluc3RydWN0aW9ucywgYXQgYW55Cit0aW1lIHdoaWxlIHlvdSBhcmUgY2Fycnlpbmcgb3V0IHN1Y2ggZGlzdHJpYnV0aW9uLCBiZWNvbWUgaW52YWxpZCwgeW91CittdXN0IHByb3ZpZGUgbmV3IGluc3RydWN0aW9ucyBvbiBkZW1hbmQgb3IgY2Vhc2UgZnVydGhlciBkaXN0cmlidXRpb24uCitJZiB5b3UgcHJvdmlkZSB2YWxpZCBpbnN0cnVjdGlvbnMgb3IgY2Vhc2UgZGlzdHJpYnV0aW9uIHdpdGhpbiB0aGlydHkKK2RheXMgYWZ0ZXIgeW91IGJlY29tZSBhd2FyZSB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGludmFsaWQsIHRoZW4KK3lvdSBkbyBub3QgZm9yZmVpdCBhbnkgb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCisoNikgIFlvdSBtYXkgRGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gaW4gQ29tcGlsZWQgZm9ybSB3aXRob3V0Cit0aGUgU291cmNlLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCBTZWN0aW9uIDQgd2l0aCByZXNwZWN0IHRvCit0aGUgU291cmNlIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCisKK0FnZ3JlZ2F0aW5nIG9yIExpbmtpbmcgdGhlIFBhY2thZ2UgCisKKyg3KSAgWW91IG1heSBhZ2dyZWdhdGUgdGhlIFBhY2thZ2UgKGVpdGhlciB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvcgorTW9kaWZpZWQgVmVyc2lvbikgd2l0aCBvdGhlciBwYWNrYWdlcyBhbmQgRGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nCithZ2dyZWdhdGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgY2hhcmdlIGEgbGljZW5zaW5nIGZlZSBmb3IgdGhlCitQYWNrYWdlLiAgRGlzdHJpYnV0b3IgRmVlcyBhcmUgcGVybWl0dGVkLCBhbmQgbGljZW5zaW5nIGZlZXMgZm9yIG90aGVyCitjb21wb25lbnRzIGluIHRoZSBhZ2dyZWdhdGlvbiBhcmUgcGVybWl0dGVkLiBUaGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlCithcHBseSB0byB0aGUgdXNlIGFuZCBEaXN0cmlidXRpb24gb2YgdGhlIFN0YW5kYXJkIG9yIE1vZGlmaWVkIFZlcnNpb25zCithcyBpbmNsdWRlZCBpbiB0aGUgYWdncmVnYXRpb24uCisKKyg4KSBZb3UgYXJlIHBlcm1pdHRlZCB0byBsaW5rIE1vZGlmaWVkIGFuZCBTdGFuZGFyZCBWZXJzaW9ucyB3aXRoCitvdGhlciB3b3JrcywgdG8gZW1iZWQgdGhlIFBhY2thZ2UgaW4gYSBsYXJnZXIgd29yayBvZiB5b3VyIG93biwgb3IgdG8KK2J1aWxkIHN0YW5kLWFsb25lIGJpbmFyeSBvciBieXRlY29kZSB2ZXJzaW9ucyBvZiBhcHBsaWNhdGlvbnMgdGhhdAoraW5jbHVkZSB0aGUgUGFja2FnZSwgYW5kIERpc3RyaWJ1dGUgdGhlIHJlc3VsdCB3aXRob3V0IHJlc3RyaWN0aW9uLAorcHJvdmlkZWQgdGhlIHJlc3VsdCBkb2VzIG5vdCBleHBvc2UgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHRoZSBQYWNrYWdlLgorCisKK0l0ZW1zIFRoYXQgYXJlIE5vdCBDb25zaWRlcmVkIFBhcnQgb2YgYSBNb2RpZmllZCBWZXJzaW9uIAorCisoOSkgV29ya3MgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBtb2R1bGVzIGFuZCBzY3JpcHRzKSB0aGF0CittZXJlbHkgZXh0ZW5kIG9yIG1ha2UgdXNlIG9mIHRoZSBQYWNrYWdlLCBkbyBub3QsIGJ5IHRoZW1zZWx2ZXMsIGNhdXNlCit0aGUgUGFja2FnZSB0byBiZSBhIE1vZGlmaWVkIFZlcnNpb24uICBJbiBhZGRpdGlvbiwgc3VjaCB3b3JrcyBhcmUgbm90Citjb25zaWRlcmVkIHBhcnRzIG9mIHRoZSBQYWNrYWdlIGl0c2VsZiwgYW5kIGFyZSBub3Qgc3ViamVjdCB0byB0aGUKK3Rlcm1zIG9mIHRoaXMgbGljZW5zZS4KKworCitHZW5lcmFsIFByb3Zpc2lvbnMKKworKDEwKSAgQW55IHVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBvcgorTW9kaWZpZWQgVmVyc2lvbnMgaXMgZ292ZXJuZWQgYnkgdGhpcyBBcnRpc3RpYyBMaWNlbnNlLiBCeSB1c2luZywKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFBhY2thZ2UsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBEbyBub3QKK3VzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBQYWNrYWdlLCBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzCitsaWNlbnNlLgorCisoMTEpICBJZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gaGFzIGJlZW4gZGVyaXZlZCBmcm9tIGEgTW9kaWZpZWQKK1ZlcnNpb24gbWFkZSBieSBzb21lb25lIG90aGVyIHRoYW4geW91LCB5b3UgYXJlIG5ldmVydGhlbGVzcyByZXF1aXJlZAordG8gZW5zdXJlIHRoYXQgeW91ciBNb2RpZmllZCBWZXJzaW9uIGNvbXBsaWVzIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBsaWNlbnNlLgorCisoMTIpICBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHRoZSByaWdodCB0byB1c2UgYW55IHRyYWRlbWFyaywKK3NlcnZpY2UgbWFyaywgdHJhZGVuYW1lLCBvciBsb2dvIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisoMTMpICBUaGlzIGxpY2Vuc2UgaW5jbHVkZXMgdGhlIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwKK2ZyZWUtb2YtY2hhcmdlIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLAorc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFBhY2thZ2Ugd2l0aCByZXNwZWN0IHRvIGFueQorcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CitpbmZyaW5nZWQgYnkgdGhlIFBhY2thZ2UuIElmIHlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24KKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgYW55IHBhcnR5IGFsbGVnaW5nCit0aGF0IHRoZSBQYWNrYWdlIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50CitpbmZyaW5nZW1lbnQsIHRoZW4gdGhpcyBBcnRpc3RpYyBMaWNlbnNlIHRvIHlvdSBzaGFsbCB0ZXJtaW5hdGUgb24gdGhlCitkYXRlIHRoYXQgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisoMTQpICBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5OgorVEhFIFBBQ0tBR0UgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgQU5EIENPTlRSSUJVVE9SUyAiQVMKK0lTYCBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMuIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVEIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIFlPVVIgTE9DQUwKK0xBVy4gVU5MRVNTIFJFUVVJUkVEIEJZIExBVywgTk8gQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUiBXSUxMCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEUgUEFDS0FHRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2EwYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNECkBAIC0wLDAgKzEsMjYgQEAKK0NvcHlyaWdodCAoYykgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4YmRkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0wLUNsYXVzZQpAQCAtMCwwICsxLDEyIEBACitDb3B5cmlnaHQgKEMpIDxZRUFSPiBieSA8T1dORVI+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTBmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMi1DbGF1c2UKQEAgLTAsMCArMSwxMyBAQAorCitUaGUgRnJlZUJTRCBDb3B5cmlnaHQKKworQ29weXJpZ2h0IDE5OTItMjAxMCBUaGUgRnJlZUJTRCBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEZSRUVCU0QgUFJPSkVDVCBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZSRUVCU0QgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVlQlNEIFByb2plY3QuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTM4NjVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTMtQ2xhdXNlCkBAIC0wLDAgKzEsMTEgQEAKKworQ29weXJpZ2h0IChjKSA8WUVBUj4sIDxPV05FUj4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPE9SR0FOSVpBVElPTj4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE2MmRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTQtQ2xhdXNlCkBAIC0wLDAgKzEsMjkgQEAKKworQ29weXJpZ2h0IChjKSA8eWVhcj4sIDxjb3B5cmlnaHQgaG9sZGVyPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgPG9yZ2FuaXphdGlvbj4uCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSA8b3JnYW5pemF0aW9uPiBub3IgdGhlCisgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgPENPUFlSSUdIVCBIT0xERVI+IGBgQVMgSVNgYCBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYThlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0wtMS4wCkBAIC0wLDAgKzEsMjUgQEAKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JpdHN0cmVhbVZlcmEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CaXRzdHJlYW1WZXJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjAzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CaXRzdHJlYW1WZXJhCkBAIC0wLDAgKzEsMTYwIEBACitCaXRzdHJlYW0gVmVyYSBGb250cyBDb3B5cmlnaHQKKworVGhlIGZvbnRzIGhhdmUgYSBnZW5lcm91cyBjb3B5cmlnaHQsIGFsbG93aW5nIGRlcml2YXRpdmUgd29ya3MgKGFzCitsb25nIGFzICJCaXRzdHJlYW0iIG9yICJWZXJhIiBhcmUgbm90IGluIHRoZSBuYW1lcyksIGFuZCBmdWxsCityZWRpc3RyaWJ1dGlvbiAoc28gbG9uZyBhcyB0aGV5IGFyZSBub3QgKnNvbGQqIGJ5IHRoZW1zZWx2ZXMpLiBUaGV5CitjYW4gYmUgYmUgYnVuZGxlZCwgcmVkaXN0cmlidXRlZCBhbmQgc29sZCB3aXRoIGFueSBzb2Z0d2FyZS4KKworVGhlIGZvbnRzIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGNvcHlyaWdodDoKKworQ29weXJpZ2h0Cis9PT09PT09PT0KKworQ29weXJpZ2h0IChjKSAyMDAzIGJ5IEJpdHN0cmVhbSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBCaXRzdHJlYW0KK1ZlcmEgaXMgYSB0cmFkZW1hcmsgb2YgQml0c3RyZWFtLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoZSBmb250cyBhY2NvbXBhbnlpbmcgdGhpcyBsaWNlbnNlICgiRm9udHMiKSBhbmQgYXNzb2NpYXRlZAorZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJGb250IFNvZnR3YXJlIiksIHRvIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZQordGhlIEZvbnQgU29mdHdhcmUsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBGb250CitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIEZvbnQgU29mdHdhcmUgaXMgZnVybmlzaGVkCit0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgYW5kIHRyYWRlbWFyayBub3RpY2VzIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCitzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBGb250IFNvZnR3YXJlCit0eXBlZmFjZXMuCisKK1RoZSBGb250IFNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCwgYWx0ZXJlZCwgb3IgYWRkZWQgdG8sIGFuZCBpbgorcGFydGljdWxhciB0aGUgZGVzaWducyBvZiBnbHlwaHMgb3IgY2hhcmFjdGVycyBpbiB0aGUgRm9udHMgbWF5IGJlCittb2RpZmllZCBhbmQgYWRkaXRpb25hbCBnbHlwaHMgb3IgY2hhcmFjdGVycyBtYXkgYmUgYWRkZWQgdG8gdGhlCitGb250cywgb25seSBpZiB0aGUgZm9udHMgYXJlIHJlbmFtZWQgdG8gbmFtZXMgbm90IGNvbnRhaW5pbmcgZWl0aGVyCit0aGUgd29yZHMgIkJpdHN0cmVhbSIgb3IgdGhlIHdvcmQgIlZlcmEiLgorCitUaGlzIExpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSB0byBGb250cworb3IgRm9udCBTb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUKKyJCaXRzdHJlYW0gVmVyYSIgbmFtZXMuCisKK1RoZSBGb250IFNvZnR3YXJlIG1heSBiZSBzb2xkIGFzIHBhcnQgb2YgYSBsYXJnZXIgc29mdHdhcmUgcGFja2FnZSBidXQKK25vIGNvcHkgb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEZvbnQgU29mdHdhcmUgdHlwZWZhY2VzIG1heSBiZSBzb2xkIGJ5CitpdHNlbGYuCisKK1RIRSBGT05UIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVAorT0YgQ09QWVJJR0hULCBQQVRFTlQsIFRSQURFTUFSSywgT1IgT1RIRVIgUklHSFQuIElOIE5PIEVWRU5UIFNIQUxMCitCSVRTVFJFQU0gT1IgVEhFIEdOT01FIEZPVU5EQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKK09USEVSIExJQUJJTElUWSwgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK09USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UCitTT0ZUV0FSRSBPUiBGUk9NIE9USEVSIERFQUxJTkdTIElOIFRIRSBGT05UIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZXMgb2YgR25vbWUsIHRoZSBHbm9tZQorRm91bmRhdGlvbiwgYW5kIEJpdHN0cmVhbSBJbmMuLCBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIEZvbnQKK1NvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIEdub21lIEZvdW5kYXRpb24KK29yIEJpdHN0cmVhbSBJbmMuLCByZXNwZWN0aXZlbHkuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBjb250YWN0OgorZm9udHMgYXQgZ25vbWUgZG90IG9yZy4KKworQ29weXJpZ2h0IEZBUQorPT09PT09PT09PT09PQorCisxLiBJIGRvbid0IHVuZGVyc3RhbmQgdGhlIHJlc2FsZSByZXN0cmljdGlvbi4uLiBXaGF0IGdpdmVzPworCitCaXRzdHJlYW0gaXMgZ2l2aW5nIGF3YXkgdGhlc2UgZm9udHMsIGJ1dCB3aXNoZXMgdG8gZW5zdXJlIGl0cworY29tcGV0aXRvcnMgY2FuJ3QganVzdCBkcm9wIHRoZSBmb250cyBhcyBpcyBpbnRvIGEgZm9udCBzYWxlIHN5c3RlbQorYW5kIHNlbGwgdGhlbSBhcyBpcy4gSXQgc2VlbXMgZmFpciB0aGF0IGlmIEJpdHN0cmVhbSBjYW4ndCBtYWtlIG1vbmV5Citmcm9tIHRoZSBCaXRzdHJlYW0gVmVyYSBmb250cywgdGhlaXIgY29tcGV0aXRvcnMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvCitkbyBzbyBlaXRoZXIuIFlvdSBjYW4gc2VsbCB0aGUgZm9udHMgYXMgcGFydCBvZiBhbnkgc29mdHdhcmUgcGFja2FnZSwKK2hvd2V2ZXIuCisKKzIuIEkgd2FudCB0byBwYWNrYWdlIHRoZXNlIGZvbnRzIHNlcGFyYXRlbHkgZm9yIGRpc3RyaWJ1dGlvbiBhbmQKK3NhbGUgYXMgcGFydCBvZiBhIGxhcmdlciBzb2Z0d2FyZSBwYWNrYWdlIG9yIHN5c3RlbS4gQ2FuIEkgZG8gc28/CisKK1llcy4gQSBSUE0gb3IgRGViaWFuIHBhY2thZ2UgaXMgYSAibGFyZ2VyIHNvZnR3YXJlIHBhY2thZ2UiIHRvIGJlZ2luCit3aXRoLCBhbmQgeW91IGFyZW4ndCBzZWxsaW5nIHRoZW0gaW5kZXBlbmRlbnRseSBieSB0aGVtc2VsdmVzLgorU2VlIDEuIGFib3ZlLgorCiszLiBBcmUgZGVyaXZhdGl2ZSB3b3JrcyBhbGxvd2VkPworWWVzIQorCis0LiBDYW4gSSBjaGFuZ2Ugb3IgYWRkIHRvIHRoZSBmb250KHMpPworWWVzLCBidXQgeW91IG11c3QgY2hhbmdlIHRoZSBuYW1lKHMpIG9mIHRoZSBmb250KHMpLgorCis1LiBVbmRlciB3aGF0IHRlcm1zIGFyZSBkZXJpdmF0aXZlIHdvcmtzIGFsbG93ZWQ/CisKK1lvdSBtdXN0IGNoYW5nZSB0aGUgbmFtZShzKSBvZiB0aGUgZm9udHMuIFRoaXMgaXMgdG8gZW5zdXJlIHRoZQorcXVhbGl0eSBvZiB0aGUgZm9udHMsIGJvdGggdG8gcHJvdGVjdCBCaXRzdHJlYW0gYW5kIEdub21lLiBXZSB3YW50IHRvCitlbnN1cmUgdGhhdCBpZiBhbiBhcHBsaWNhdGlvbiBoYXMgb3BlbmVkIGEgZm9udCBzcGVjaWZpY2FsbHkgb2YgdGhlc2UKK25hbWVzLCBpdCBnZXRzIHdoYXQgaXQgZXhwZWN0cyAodGhvdWdoIG9mIGNvdXJzZSwgdXNpbmcgZm9udGNvbmZpZywKK3N1YnN0aXR1dGlvbnMgY291bGQgc3RpbGwgY291bGQgaGF2ZSBvY2N1cnJlZCBkdXJpbmcgZm9udAorb3BlbmluZykuIFlvdSBtdXN0IGluY2x1ZGUgdGhlIEJpdHN0cmVhbSBjb3B5cmlnaHQuIEFkZGl0aW9uYWwKK2NvcHlyaWdodHMgY2FuIGJlIGFkZGVkLCBhcyBwZXIgY29weXJpZ2h0IGxhdy4gSGFwcHkgRm9udCBIYWNraW5nIQorCis2LiBJZiBJIGhhdmUgaW1wcm92ZW1lbnRzIGZvciBCaXRzdHJlYW0gVmVyYSwgaXMgaXQgcG9zc2libGUgdGhleSBtaWdodCBnZXQKK2Fkb3B0ZWQgaW4gZnV0dXJlIHZlcnNpb25zPworCitZZXMuIFRoZSBjb250cmFjdCBiZXR3ZWVuIHRoZSBHbm9tZSBGb3VuZGF0aW9uIGFuZCBCaXRzdHJlYW0gaGFzCitwcm92aXNpb25zIGZvciB3b3JraW5nIHdpdGggQml0c3RyZWFtIHRvIGVuc3VyZSBxdWFsaXR5IGFkZGl0aW9ucyB0bwordGhlIEJpdHN0cmVhbSBWZXJhIGZvbnQgZmFtaWx5LiBQbGVhc2UgY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBzdWNoCithZGRpdGlvbnMuIE5vdGUsIHRoYXQgaW4gZ2VuZXJhbCwgd2Ugd2lsbCB3YW50IHN1Y2ggYWRkaXRpb25zIGZvciB0aGUKK2VudGlyZSBmYW1pbHksIG5vdCBqdXN0IGEgc2luZ2xlIGZvbnQsIGFuZCB0aGF0IHlvdSdsbCBoYXZlIHRvIGtlZXAKK2JvdGggR25vbWUgYW5kIEppbSBMeWxlcywgVmVyYSdzIGRlc2lnbmVyLCBoYXBweSEgVG8gbWFrZSBzZW5zZSB0byBhZGQKK2dseXBocyB0byB0aGUgZm9udCwgdGhleSBtdXN0IGJlIHN0eWxpc3RpY2FsbHkgaW4ga2VlcGluZyB3aXRoIFZlcmEncworZGVzaWduLiBWZXJhIGNhbm5vdCBiZWNvbWUgYSAicmFuc29tIG5vdGUiIGZvbnQuIEppbSBMeWxlcyB3aWxsIGJlCitwcm92aWRpbmcgYSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZSBkZXNpZ24gZWxlbWVudHMgdXNlZCBpbiBWZXJhLCBhcyBhCitndWlkZSBhbmQgYWlkIGZvciBwZW9wbGUgaW50ZXJlc3RlZCBpbiBjb250cmlidXRpbmcgdG8gVmVyYS4KKworNy4gSSB3YW50IHRvIHNlbGwgYSBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgdXNlcyB0aGVzZSBmb250czogQ2FuIEkgZG8gc28/CisKK1N1cmUuIEJ1bmRsZSB0aGUgZm9udHMgd2l0aCB5b3VyIHNvZnR3YXJlIGFuZCBzZWxsIHlvdXIgc29mdHdhcmUKK3dpdGggdGhlIGZvbnRzLiBUaGF0IGlzIHRoZSBpbnRlbnQgb2YgdGhlIGNvcHlyaWdodC4KKworOC4gSWYgYXBwbGljYXRpb25zIGhhdmUgYnVpbHQgdGhlIG5hbWVzICJCaXRzdHJlYW0gVmVyYSIgaW50byB0aGVtLAorY2FuIEkgb3ZlcnJpZGUgdGhpcyBzb21laG93IHRvIHVzZSBmb250cyBvZiBteSBjaG9vc2luZz8KKworVGhpcyBkZXBlbmRzIG9uIGV4YWN0IGRldGFpbHMgb2YgdGhlIHNvZnR3YXJlLiBNb3N0IG9wZW4gc291cmNlCitzeXN0ZW1zIGFuZCBzb2Z0d2FyZSAoZS5nLiwgR25vbWUsIEtERSwgZXRjLikgYXJlIG5vdyBjb252ZXJ0aW5nIHRvCit1c2UgZm9udGNvbmZpZyAoc2VlIHd3dy5mb250Y29uZmlnLm9yZykgdG8gaGFuZGxlIGZvbnQgY29uZmlndXJhdGlvbiwKK3NlbGVjdGlvbiBhbmQgc3Vic3RpdHV0aW9uOyBpdCBoYXMgcHJvdmlzaW9ucyBmb3Igb3ZlcnJpZGluZyBmb250CituYW1lcyBhbmQgc3Vic2l0dXRpbmcgYWx0ZXJuYXRpdmVzLiBBbiBleGFtcGxlIGlzIHByb3ZpZGVkIGJ5IHRoZQorc3VwcGxpZWQgbG9jYWwuY29uZiBmaWxlLCB3aGljaCBjaG9vc2VzIHRoZSBmYW1pbHkgQml0c3RyZWFtIFZlcmEgZm9yCisic2FucyIsICJzZXJpZiIgYW5kICJtb25vc3BhY2UiLiBPdGhlciBzb2Z0d2FyZSAoZS5nLiwgdGhlIFhGcmVlODYKK2NvcmUgc2VydmVyKSBoYXMgb3RoZXIgbWVjaGFuaXNtcyBmb3IgZm9udCBzdWJzdGl0dXRpb24uCisKK1Nob3cgZGV0YWlscyBIaWRlIGRldGFpbHMKKworQ2hhbmdlIGxvZworcjIwMTEgYnkgbWFyay5uaWNrZWwgb24gTWFyIDMsIDIwMTEgICBEaWZmCisKK01ham9yaXR5IG9mIE11bHRpLUxpbmUgdGV4dCBlZGl0aW5nIGlzIGluCit0aGUgY29tbWl0LiAgQWxzbyBhZGRlZCBzb21lIHNwZWNpZmljIGZyZWUKK2ZvbnRzIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHNldCBhcyB3ZQorbmVlZCBzb21lIGFkZGl0aW9uYWwgZm9udCBtZXRyaWNzIHRoYXQgd2UKK3VzZSBpbiB0aGUgVGV4dCBFZGl0aW5nIHJlbmRlcmluZworcGlwZWxpbmUuCisKK1lvdSBjYW4gc2VlIHRoZSBmb250IGxpY2Vuc2VzIGluIHRoZQorZWRpdG9yL2ZvbnRzIGZvbGRlciB1bmRlciBlYWNoIGZvbnQuCisKK1N0aWxsIGhhdmUgc29tZSBjbGVhbnVwIHRvIGRvIHRvIGFkZCB0aGUKK3RleHQgZm9ybWF0dGluZyAobGVmdCxyaWdodCxjZW50ZXIpIGFzCisuLi4KKworR28gdG86IAkKK0hpZGUgY29tbWVudHMKK1Nob3cgY29tbWVudHMKKworT2xkZXIgcmV2aXNpb25zCitBbGwgcmV2aXNpb25zIG9mIHRoaXMgZmlsZQorCitGaWxlIGluZm8KK1NpemU6IDU5NTMgYnl0ZXMsIDEyMyBsaW5lcworVmlldyByYXcgZmlsZQorCitGaWxlIHByb3BlcnRpZXMKKworc3ZuOmV4ZWN1dGFibGUKKyAgICAqCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0FUT1NMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NBVE9TTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlOGE1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NBVE9TTC0xLjEKQEAgLTAsMCArMSwxMTYgQEAKKworQ29tcHV0ZXIgQXNzb2NpYXRlcyBUcnVzdGVkIE9wZW4gU291cmNlIExpY2Vuc2UKK1ZlcnNpb24gMS4xCisKKworKHRleHQpCisKK1BMRUFTRSBSRUFEIFRISVMgRE9DVU1FTlQgQ0FSRUZVTExZIEFORCBJTiBJVFMgRU5USVJFVFkuIFRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDT01QVVRFUiBBU1NPQ0lBVEVTIFRSVVNURUQgT1BFTiBTT1VSQ0UgTElDRU5TRSAoIkxJQ0VOU0UiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFRIRSBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgTElDRU5TRS4KKworTGljZW5zZSBCYWNrZ3JvdW5kCitDb21wdXRlciBBc3NvY2lhdGVzIEludGVybmF0aW9uYWwsIEluYy4gKENBKSBiZWxpZXZlcyBpbiBvcGVuIHNvdXJjZS4gV2UgYmVsaWV2ZSB0aGF0IHRoZSBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBhcHByb2FjaCBjYW4gdGFrZSBhcHByb3ByaWF0ZSBzb2Z0d2FyZSBwcm9ncmFtcyB0byB1bnByZWNlZGVudGVkIGxldmVscyBvZiBxdWFsaXR5LCBncm93dGgsIGFuZCBpbm5vdmF0aW9uLiBUbyBkZW1vbnN0cmF0ZSBvdXIgY29udGludWluZyBjb21taXRtZW50IHRvIG9wZW4gc291cmNlLCB3ZSBhcmUgcmVsZWFzaW5nIHRoZSBQcm9ncmFtIChhcyBkZWZpbmVkIGJlbG93KSB1bmRlciB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBwZXJtaXQgY29udHJpYnV0b3JzIGFuZCByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIHRvIHVzZSB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nIGl0cyBzb3VyY2UgY29kZSwgZnJlZWx5IGFuZCB3aXRob3V0IG1hbnkgb2YgdGhlIGNvbmNlcm5zIG9mIHNvbWUgb3RoZXIgb3BlbiBzb3VyY2UgbGljZW5zZXMuIEFsdGhvdWdoIHdlIGV4cGVjdCB0aGUgdW5kZXJseWluZyBQcm9ncmFtLCBhbmQgQ29udHJpYnV0aW9ucyAoYXMgZGVmaW5lZCBiZWxvdykgbWFkZSB0byBzdWNoIFByb2dyYW0sIHRvIHJlbWFpbiBvcGVuLCB0aGlzIExpY2Vuc2UgaXMgZGVzaWduZWQgdG8gcGVybWl0IHlvdSB0byBtYWludGFpbiB5b3VyIG93biBzb2Z0d2FyZSBwcm9ncmFtcyBmcmVlIG9mIHRoaXMgTGljZW5zZSB1bmxlc3MgeW91IGNob29zZSB0byBkbyBzby4gVGh1cywgb25seSB5b3VyIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFByb2dyYW0gbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCitUaGUgcHJvdmlzaW9ucyB0aGF0IGZvbGxvdyBzZXQgZm9ydGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHlvdSBtYXkgdXNlIHRoZSBQcm9ncmFtLgorCisxLiBERUZJTklUSU9OUworCisxLjEgQ29udHJpYnV0aW9uIG1lYW5zIChhKSBpbiB0aGUgY2FzZSBvZiBDQSwgdGhlIE9yaWdpbmFsIFByb2dyYW07IGFuZCAoYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBDb250cmlidXRvciAoaW5jbHVkaW5nIENBKSwgY2hhbmdlcyBhbmQgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtLCB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvciB0byB1bmFmZmlsaWF0ZWQgdGhpcmQgcGFydGllcy4gQSBDb250cmlidXRpb24gb3JpZ2luYXRlcyBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcnMgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKHgpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKHkpIGFyZSBub3QgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworMS4yIENvbnRyaWJ1dG9yIG1lYW5zIENBIGFuZCBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisxLjMgQ29udHJpYnV0b3IgVmVyc2lvbiBtZWFucyBhcyB0byBhIENvbnRyaWJ1dG9yLCB0aGF0IHZlcnNpb24gb2YgdGhlIFByb2dyYW0gdGhhdCBpbmNsdWRlcyB0aGUgQ29udHJpYnV0b3JzIENvbnRyaWJ1dGlvbiBidXQgbm90IGFueSBDb250cmlidXRpb25zIG1hZGUgdG8gdGhlIFByb2dyYW0gdGhlcmVhZnRlci4KKworMS40IExhcmdlciBXb3JrIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIHRoZSBQcm9ncmFtIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjUgTGljZW5zZWQgUGF0ZW50cyBtZWFuIHBhdGVudHMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHRoYXQgYXJlIGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKzEuNiBPcmlnaW5hbCBQcm9ncmFtIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSB0byB3aGljaCB0aGlzIExpY2Vuc2UgaXMgYXR0YWNoZWQgYW5kIGFzIHJlbGVhc2VkIGJ5IENBLCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBpZiBhbnkuCisKKzEuNyBQcm9ncmFtIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zLgorCisxLjggUmVjaXBpZW50IG1lYW5zIGFueW9uZSB3aG8gbW9kaWZpZXMsIGNvcGllcywgdXNlcyBvciBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKKzIuMSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYW4gaXJyZXZvY2FibGUsIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhlIGxpY2Vuc2UgcHJvdmlkZWQgaW4gdGhpcyBTZWN0aW9uIDIuMSBzaGFsbCBub3QgaW5jbHVkZSBhIGxpY2Vuc2UgdG8gYW55IExpY2Vuc2VkIFBhdGVudHMgb2YgYSBDb250cmlidXRvci4KKworMi4yIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhbiBpcnJldm9jYWJsZSwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byB0aGUgTGljZW5zZWQgUGF0ZW50cyB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMiBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHRoZSBMaWNlbnNlZCBQYXRlbnRzIHRvIGJlIGluZnJpbmdlZCBieSBzdWNoIGNvbWJpbmF0aW9uLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgbm8gbGljZW5zZSBpcyBncmFudGVkIHVuZGVyIHRoaXMgU2VjdGlvbiAyLjI6IChhKSBmb3IgYW55IGNvZGUgb3Igd29ya3MgdGhhdCBkbyBub3QgaW5jbHVkZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiwgYXMgaXQgZXhpc3RzIGFuZCBpcyB1c2VkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgaGVyZW9mOyAoYikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IGVhY2ggc3VjaCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgKGMpIHdpdGggcmVzcGVjdCB0byBMaWNlbnNlZCBQYXRlbnRzIGluZnJpbmdlZCBieSB0aGUgUHJvZ3JhbSBpbiB0aGUgYWJzZW5jZSBvZiBDb250cmlidXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworMi4zIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBleGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAyLjQsIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBwZXJzb24gb3IgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuCisKKzIuNCBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgaXQgaGFzIGFsbCByaWdodCwgdGl0bGUgYW5kIGludGVyZXN0IGluIHRoZSBjb3B5cmlnaHRzIGluIGl0cyBDb250cmlidXRpb25zLCBhbmQgaGFzIHRoZSByaWdodCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2VzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuCisKKzMuIERJU1RSSUJVVElPTiBSRVFVSVJFTUVOVFMKKworMy4xIElmIHRoZSBQcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIG9iamVjdCBjb2RlIGZvcm0sIHRoZW4gYSBwcm9taW5lbnQgbm90aWNlIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gdGhlIENvbnRyaWJ1dG9yIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gdGhlIHNvdXJjZSBjb2RlLiBBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZTsgYW5kCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3OworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHMsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXc7CitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBhcmUgaW5jb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IgYXQgdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyLgorMy4yIFdoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZAorYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorMy4zIFRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbnkgQ29udHJpYnV0b3IuIEhvd2V2ZXIsIENvbnRyaWJ1dG9ycyBtYXkgb25seSBjaGFyZ2UgUmVjaXBpZW50cyBhIG9uZS10aW1lLCB1cGZyb250IGZlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4gQ29udHJpYnV0b3JzIG1heSBub3QgY2hhcmdlIFJlY2lwaWVudHMgYW55IHJlY3VycmluZyBjaGFyZ2UsIGxpY2Vuc2UgZmVlLCBvciBhbnkgb25nb2luZyByb3lhbHR5IGZvciB0aGUgUmVjaXBpZW50cyBleGVyY2lzZSBvZiBpdHMgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB0byB0aGUgUHJvZ3JhbS4gQ29udHJpYnV0b3JzIHNoYWxsIG1ha2UgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiB0aGV5IGRpc3RyaWJ1dGUgYXZhaWxhYmxlIGF0IGEgY29zdCwgaWYgYW55LCBlcXVhbCB0byB0aGUgY29zdCB0byB0aGUgQ29udHJpYnV0b3IgdG8gcGh5c2ljYWxseSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSB3b3JrLiBJdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UgdG8gcHJvaGliaXQgYSBDb250cmlidXRvciBmcm9tIGNoYXJnaW5nIGZlZXMgZm9yIGFueSBzZXJ2aWNlIG9yIG1haW50ZW5hbmNlIHRoYXQgYSBDb250cmlidXRvciBtYXkgY2hhcmdlIHRvIGEgUmVjaXBpZW50LCBzbyBsb25nIGFzIHN1Y2ggZmVlcyBhcmUgbm90IGFuIGF0dGVtcHQgdG8gY2lyY3VtdmVudCB0aGUgZm9yZWdvaW5nIHJlc3RyaWN0aW9ucyBvbiBjaGFyZ2luZyByb3lhbHRpZXMgb3Igb3RoZXIgcmVjdXJyaW5nIGZlZXMgZm9yIHRoZSBQcm9ncmFtIGl0c2VsZi4KKworMy40IEEgQ29udHJpYnV0b3IgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgdGhlIENvbnRyaWJ1dG9yIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIFByb2dyYW0uIEFueSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIGluY2x1ZGluZyBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmssIG1heSBzdWJqZWN0IGl0c2VsZiwgYnV0IG5vdCBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIHRvIGFkZGl0aW9uYWwgY29udHJhY3R1YWwgY29tbWl0bWVudHMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBwZXJmb3JtYW5jZSB3YXJyYW50aWVzIGFuZCBub24taW5mcmluZ2VtZW50IHJlcHJlc2VudGF0aW9ucyBvbiBzdWNoQ29udHJpYnV0b3JzIGJlaGFsZi4gTm8gQ29udHJpYnV0b3IgbWF5IGNyZWF0ZSBhbnkgYWRkaXRpb25hbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yIChDb21tZXJjaWFsIENvbnRyaWJ1dG9yKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yIChJbmRlbW5pZmllZCBDb250cmlidXRvcikgd2hvIG1hZGUgQ29udHJpYnV0aW9ucyB0byB0aGUgUHJvZ3JhbSBkaXN0cmlidXRlZCBieSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgTG9zc2VzKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zLCBpbmNsdWRpbmcgYW55IGFkZGl0aW9uYWwgY29udHJhY3R1YWwgY29tbWl0bWVudHMsIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuCisKKzMuNSBJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCAoYSkgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBQcm9ncmFtIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgLi4vSVBfSVNTVUVTLCBhbmQgKGIpIG5vdGlmeSBDQSBpbiB3cml0aW5nIGF0IENvbXB1dGVyIEFzc29jaWF0ZXMgSW50ZXJuYXRpb25hbCwgSW5jLiwgT25lIENvbXB1dGVyIEFzc29jaWF0ZXMgUGxhemEsIElzbGFuZGlhLCBOZXcgWW9yayAxMTc0OSwgQXR0bjogT3BlbiBTb3VyY2UgR3JvdXAgb3IgYnkgZW1haWwgYXQgb3BlbnNvdXJjZUBjYS5jb20sIGJvdGggZGVzY3JpYmluZyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSBSZWNpcGllbnQgYW5kIENBIHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3Qgd2l0aCByZWdhcmQgdG8gc3VjaCBtYXR0ZXIuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIENvbnRyaWJ1dGlvbiBpcyBtYWRlIGF2YWlsYWJsZSwgQ29udHJpYnV0b3Igc2hhbGwgYWxzbyBwcm9tcHRseSBtb2RpZnkgdGhlIElQX0lTU1VFUyBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIFByb2dyYW0gdGhhdCBzdWNoIG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKzMuNiBSZWNpcGllbnQgc2hhbGwgbm90IHJlbW92ZSwgb2JzY3VyZSwgb3IgbW9kaWZ5IGFueSBDQSBvciBvdGhlciBDb250cmlidXRvciBjb3B5cmlnaHQgb3IgcGF0ZW50IHByb3ByaWV0YXJ5IG5vdGljZXMgYXBwZWFyaW5nIGluIHRoZSBQcm9ncmFtLCB3aGV0aGVyIGluIHRoZSBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgb3IgaW4gYW55IGRvY3VtZW50YXRpb24uIEluIGFkZGl0aW9uIHRvIHRoZSBvYmxpZ2F0aW9ucyBzZXQgZm9ydGggaW4gU2VjdGlvbiA0LCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09OVFJJQlVUSU9OIFJFU1RSSUNUSU9OUworCis0LjEgRWFjaCBDb250cmlidXRvciBtdXN0IGNhdXNlIHRoZSBQcm9ncmFtIHRvIHdoaWNoIHRoZSBDb250cmlidXRvciBwcm92aWRlcyBhIENvbnRyaWJ1dGlvbiB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyB0aGUgQ29udHJpYnV0b3IgbWFkZSB0byBjcmVhdGUgaXRzIHZlcnNpb24gb2YgdGhlIFByb2dyYW0gYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIHRoZSBQcm9ncmFtIGRpc3RyaWJ1dGVkIGJ5IGEgcHJpb3IgQ29udHJpYnV0b3IsIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgcHJpb3IgQ29udHJpYnV0b3IgZnJvbSB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbiB3YXMgZGVyaXZlZCwgaW4gKGEpIHRoZSBQcm9ncmFtIHNvdXJjZSBjb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gZXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCB0aGUgQ29udHJpYnV0b3IgZGVzY3JpYmVzIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBQcm9ncmFtLgorCis1LiBOTyBXQVJSQU5UWQorCis1LjEgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBBUyBJUyBBTkQgSU4gSVRTIFBSRVNFTlQgU1RBVEUgQU5EIENPTkRJVElPTi4gTk8gV0FSUkFOVFksIFJFUFJFU0VOVEFUSU9OLCBDT05ESVRJT04sIFVOREVSVEFLSU5HIE9SIFRFUk0sIEVYUFJFU1MgT1IgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgQVMgVE8gVEhFIENPTkRJVElPTiwgUVVBTElUWSwgRFVSQUJJTElUWSwgUEVSRk9STUFOQ0UsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVVNFIE9GIFRIRSBQUk9HUkFNIElTIEdJVkVOIE9SIEFTU1VNRUQgQlkgQU5ZIENPTlRSSUJVVE9SIEFORCBBTEwgU1VDSCBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMsIENPTkRJVElPTlMsIFVOREVSVEFLSU5HUyBBTkQgVEVSTVMgQVJFIEhFUkVCWSBFWENMVURFRCBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4KKworNS4yIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzUuMyBFYWNoIFJlY2lwaWVudCBhY2tub3dsZWRnZXMgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIFByb2dyYW0gY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKKzYuMSBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcsIE5PIENPTlRSSUJVVE9SIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVFJBREVNQVJLUyBBTkQgQlJBTkRJTkcKKworNy4xIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgUmVjaXBpZW50IG9yIGFueSB0aGlyZCBwYXJ0eSBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBub3cgb3Igc3Vic2VxdWVudGx5IHBvc3RlZCBhdCBodHRwOi8vd3d3LmNhLmNvbS9jYXRyZG1yay5odG0sIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBsb2dvcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQ0EgKGNvbGxlY3RpdmVseSBDQSBNYXJrcykgb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gUmVjaXBpZW50IGFncmVlcyBub3QgdG8gdXNlIGFueSBDQSBNYXJrcyBpbiBvciBhcyBwYXJ0IG9mIHRoZSBuYW1lIG9mIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBvciB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBQcm9ncmFtLgorCis3LjIgU3ViamVjdCB0byBTZWN0aW9uIDcuMSwgUmVjaXBpZW50cyBtYXkgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSB1bmRlciB0cmFkZW1hcmtzLCBsb2dvcywgYW5kIHByb2R1Y3QgbmFtZXMgYmVsb25naW5nIHRvIHRoZSBSZWNpcGllbnQgcHJvdmlkZWQgdGhhdCBhbGwgY29weXJpZ2h0IGFuZCBvdGhlciBhdHRyaWJ1dGlvbiBub3RpY2VzIHJlbWFpbiBpbiB0aGUgUHJvZ3JhbS4KKworOC4gUEFURU5UIExJVElHQVRJT04KKworOC4xIElmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IHBlcnNvbiBvciBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50cyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIuMiBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCis5LiBPV05FUlNISVAKKworOS4xIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGluIFNlY3Rpb25zIDIuMSBhbmQgMi4yIGFib3ZlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIENBIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgYW55IENvbnRyaWJ1dGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQ0EgKENBIENvbnRyaWJ1dGlvbnMpLCBhbmQgc3VjaCBDQSBDb250cmlidXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIENBIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBDQSBDb250cmlidXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLgorCisxMC4gVEVSTUlOQVRJT04KKworMTAuMSBBbGwgb2YgUmVjaXBpZW50cyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBSZWNpcGllbnRzIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCBhcyBhIENvbnRyaWJ1dG9yIHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisxMS4gR0VORVJBTAorCisxMS4xIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKKzExLjIgQ0EgbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUgb3RoZXIgdGhhbiBDQSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UuCisKKzExLjMgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgUmVjaXBpZW50IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgUHJvZ3JhbSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24sIHRoZW4gUmVjaXBpZW50IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIElQX0lTU1VFUyBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNSBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBQcm9ncmFtIHNvdXJjZSBjb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSBSZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCisxMS40IFRoaXMgTGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsuIE5vIFJlY2lwaWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBSZWNpcGllbnQgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gYSBSZWNpcGllbnQgYW5kIENBIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBTdGF0ZSBvZiBOZXcgWW9yaywgYW5kIFJlY2lwaWVudCBhbmQgQ0EgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IGRpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMS41IFdoZXJlIFJlY2lwaWVudCBpcyBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBjb250cmFjdGFudGVzIGNvbmZpcm1lbnQgcXVgZWxsZXMgb250IGV4aWdlIHF1ZSBsZSBwcmVzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGFzc29jaWVzIHNvaWVudCByZWRpZ2VzIGVuIGFuZ2xhaXMuCisKKzExLjYgVGhlIFByb2dyYW0gaXMgc3ViamVjdCB0byBhbGwgZXhwb3J0IGFuZCBpbXBvcnQgbGF3cywgcmVzdHJpY3Rpb25zIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBSZWNpcGllbnQgcmVjZWl2ZXMgdGhlIFByb2dyYW0uIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGNvbXBseWluZyB3aXRoIGFuZCBlbnN1cmluZyB0aGF0IFJlY2lwaWVudCBkb2VzIG5vdCBleHBvcnQsIHJlLWV4cG9ydCwgb3IgaW1wb3J0IHRoZSBQcm9ncmFtIGluIHZpb2xhdGlvbiBvZiBzdWNoIGxhd3MsIHJlc3RyaWN0aW9ucyBvciByZWd1bGF0aW9ucywgb3Igd2l0aG91dCBhbnkgbmVjZXNzYXJ5IGxpY2Vuc2VzIGFuZCBhdXRob3JpemF0aW9ucy4KKworMTEuNyBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMGI3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0xLjAKQEAgLTAsMCArMSw2MCBAQAorCitDcmVhdGl2ZSBDb21tb25zCitBdHRyaWJ1dGlvbiAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE3YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi4wCkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlM2QxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjUKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCitBdHRyaWJ1dGlvbiAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNkNTYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMy4wCkBAIC0wLDAgKzEsNzAgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGFuIEFkYXB0YXRpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQWRhcHRhdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgKGl2KSAsIGNvbnNpc3RlbnQgd2l0aCBTZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNCAoYikgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ZDIyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTEuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjNTE3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuMApAQCAtMCwwICsxLDY2IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGQpIGFuZCA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTYxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjUKQEAgLTAsMCArMSw2NiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTMuMApAQCAtMCwwICsxLDcyIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNChkKS4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGMpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHRoYXQgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGMpLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhlIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZDg0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTEuMApAQCAtMCwwICsxLDUgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cy1Ob25Db21tZXJjaWFsIDEuMCAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLiBMaWNlbnNlICBUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4gIEJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuICAxLiBEZWZpbml0aW9ucyAgIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuICJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4gIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4gIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzogIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6ICBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIFlvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZC4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LiA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIgIEJ5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeTogTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOyBUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4gNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIDcuIFRlcm1pbmF0aW9uICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4gOC4gTWlzY2VsbGFuZW91cyAgRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4gQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuICBFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuICBDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2YzE3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdhYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi41CkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIERlcml2YXRpdmUgV29ya3MuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTU0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0zLjAKQEAgLTAsMCArMSw2OSBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgQWRhcHRhdGlvbnMuIFN1YmplY3QgdG8gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQoZCkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGMpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdXIgZXhlcmNpc2Ugb2Ygc3VjaCByaWdodHMgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGIpIGFuZCBvdGhlcndpc2Ugd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChiKS4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzlmZDZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMS4wCkBAIC0wLDAgKzEsNjQgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjA3ZjgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi4wCkBAIC0wLDAgKzEsNjggQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZSkgYW5kIDQoZikuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjAgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1Y2NjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuNQpAQCAtMCwwICsxLDY4IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBOb25jb21tZXJjaWFsLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGUpIGFuZCA0KGYpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGQpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoZCksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuNSBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjYjFjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTMuMApAQCAtMCwwICsxLDc0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZykgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgTm9uY29tbWVyY2lhbCwgU2hhcmVBbGlrZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoZCksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoZCksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24gb25seSB1bmRlcjogKGkpIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2U7IChpaSkgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlOyAoaWlpKSBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2UgKGVpdGhlciB0aGlzIG9yIGEgbGF0ZXIgbGljZW5zZSB2ZXJzaW9uKSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuLCBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMy4wIFVTKSAoIkFwcGxpY2FibGUgTGljZW5zZSIpLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVSSSwgZm9yIEFwcGxpY2FibGUgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgZWFjaCBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBBZGFwdGF0aW9uIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZS4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBhcyBpbmNsdWRlZCBpbiB0aGUgQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIEFkYXB0YXRpb24sIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGIpIGFwcGxpZXMgdG8gdGhlIEFkYXB0YXRpb24gYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBBZGFwdGF0aW9uIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29uLW5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCwgKGl2KSBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoZCkgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3VyIGV4ZXJjaXNlIG9mIHN1Y2ggcmlnaHRzIGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKSBhbmQgb3RoZXJ3aXNlIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgdGhhdCBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYykuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HIEFORCBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFRISVMgRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1ODE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTEuMApAQCAtMCwwICsxLDU5IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzk3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjAKQEAgLTAsMCArMSw2MiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTQ1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjUKQEAgLTAsMCArMSw2MiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGIpLCBhcyByZXF1ZXN0ZWQuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjRlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0zLjAKQEAgLTAsMCArMSw2OCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9ucy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgQWRhcHRhdGlvbnMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYikgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjEzOTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMS4wCkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjQzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjAKQEAgLTAsMCArMSw2NyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIFNoYXJlQWxpa2UuCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjAgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhkZDVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi41CkBAIC0wLDAgKzEsNjcgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuNSBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGJiZDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMy4wCkBAIC0wLDAgKzEsNzQgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJDcmVhdGl2ZSBDb21tb25zIENvbXBhdGlibGUgTGljZW5zZSIgbWVhbnMgYSBsaWNlbnNlIHRoYXQgaXMgbGlzdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2NvbXBhdGlibGVsaWNlbnNlcyB0aGF0IGhhcyBiZWVuIGFwcHJvdmVkIGJ5IENyZWF0aXZlIENvbW1vbnMgYXMgYmVpbmcgZXNzZW50aWFsbHkgZXF1aXZhbGVudCB0byB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZywgYXQgYSBtaW5pbXVtLCBiZWNhdXNlIHRoYXQgbGljZW5zZTogKGkpIGNvbnRhaW5zIHRlcm1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBwdXJwb3NlLCBtZWFuaW5nIGFuZCBlZmZlY3QgYXMgdGhlIExpY2Vuc2UgRWxlbWVudHMgb2YgdGhpcyBMaWNlbnNlOyBhbmQsIChpaSkgZXhwbGljaXRseSBwZXJtaXRzIHRoZSByZWxpY2Vuc2luZyBvZiBhZGFwdGF0aW9ucyBvZiB3b3JrcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGF0IGxpY2Vuc2UgdW5kZXIgdGhpcyBMaWNlbnNlIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOwordG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLCIgb3IgYSBtb2RpZmljYXRpb24gY291bGQgaW5kaWNhdGUgIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLiI7Cit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gQWRhcHRhdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24gb25seSB1bmRlciB0aGUgdGVybXMgb2Y6IChpKSB0aGlzIExpY2Vuc2U7IChpaSkgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlOyAoaWlpKSBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2UgKGVpdGhlciB0aGlzIG9yIGEgbGF0ZXIgbGljZW5zZSB2ZXJzaW9uKSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuLCBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDMuMCBVUykpOyAoaXYpIGEgQ3JlYXRpdmUgQ29tbW9ucyBDb21wYXRpYmxlIExpY2Vuc2UuIElmIHlvdSBsaWNlbnNlIHRoZSBBZGFwdGF0aW9uIHVuZGVyIG9uZSBvZiB0aGUgbGljZW5zZXMgbWVudGlvbmVkIGluIChpdiksIHlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2UuIElmIHlvdSBsaWNlbnNlIHRoZSBBZGFwdGF0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgb2YgdGhlIGxpY2Vuc2VzIG1lbnRpb25lZCBpbiAoaSksIChpaSkgb3IgKGlpaSkgKHRoZSAiQXBwbGljYWJsZSBMaWNlbnNlIiksIHlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIGdlbmVyYWxseSBhbmQgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zOiAoSSkgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVUkkgZm9yLCB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBlYWNoIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybTsgKElJKSBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2U7IChJSUkpIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIEFwcGxpY2FibGUgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgYXMgaW5jbHVkZWQgaW4gdGhlIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybTsgKElWKSB3aGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIEFkYXB0YXRpb24sIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGIpIGFwcGxpZXMgdG8gdGhlIEFkYXB0YXRpb24gYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBBZGFwdGF0aW9uIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCAoaXYpICwgY29uc2lzdGVudCB3aXRoIFNzZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MwLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDMC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjZjg4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDMC0xLjAKQEAgLTAsMCArMSwzMiBAQAorCitDcmVhdGl2ZSBDb21tb25zIFplcm8gMS4wIFVuaXZlcnNhbCAoQ0MwKQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBET0NVTUVOVCBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIFVTRSBPRiBUSElTIERPQ1VNRU5UIE9SIFRIRSBJTkZPUk1BVElPTiBPUiBXT1JLUyBQUk9WSURFRCBIRVJFVU5ERVIsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIFRIRSBVU0UgT0YgVEhJUyBET0NVTUVOVCBPUiBUSEUgSU5GT1JNQVRJT04gT1IgV09SS1MgUFJPVklERUQgSEVSRVVOREVSLgorU3RhdGVtZW50IG9mIFB1cnBvc2UKKworVGhlIGxhd3Mgb2YgbW9zdCBqdXJpc2RpY3Rpb25zIHRocm91Z2hvdXQgdGhlIHdvcmxkIGF1dG9tYXRpY2FsbHkgY29uZmVyIGV4Y2x1c2l2ZSBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIChkZWZpbmVkIGJlbG93KSB1cG9uIHRoZSBjcmVhdG9yIGFuZCBzdWJzZXF1ZW50IG93bmVyKHMpIChlYWNoIGFuZCBhbGwsIGFuICJvd25lciIpIG9mIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCBhbmQvb3IgYSBkYXRhYmFzZSAoZWFjaCwgYSAiV29yayIpLgorCitDZXJ0YWluIG93bmVycyB3aXNoIHRvIHBlcm1hbmVudGx5IHJlbGlucXVpc2ggdGhvc2UgcmlnaHRzIHRvIGEgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgY29udHJpYnV0aW5nIHRvIGEgY29tbW9ucyBvZiBjcmVhdGl2ZSwgY3VsdHVyYWwgYW5kIHNjaWVudGlmaWMgd29ya3MgKCJDb21tb25zIikgdGhhdCB0aGUgcHVibGljIGNhbiByZWxpYWJseSBhbmQgd2l0aG91dCBmZWFyIG9mIGxhdGVyIGNsYWltcyBvZiBpbmZyaW5nZW1lbnQgYnVpbGQgdXBvbiwgbW9kaWZ5LCBpbmNvcnBvcmF0ZSBpbiBvdGhlciB3b3JrcywgcmV1c2UgYW5kIHJlZGlzdHJpYnV0ZSBhcyBmcmVlbHkgYXMgcG9zc2libGUgaW4gYW55IGZvcm0gd2hhdHNvZXZlciBhbmQgZm9yIGFueSBwdXJwb3NlcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsIHB1cnBvc2VzLiBUaGVzZSBvd25lcnMgbWF5IGNvbnRyaWJ1dGUgdG8gdGhlIENvbW1vbnMgdG8gcHJvbW90ZSB0aGUgaWRlYWwgb2YgYSBmcmVlIGN1bHR1cmUgYW5kIHRoZSBmdXJ0aGVyIHByb2R1Y3Rpb24gb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZCBzY2llbnRpZmljIHdvcmtzLCBvciB0byBnYWluIHJlcHV0YXRpb24gb3IgZ3JlYXRlciBkaXN0cmlidXRpb24gZm9yIHRoZWlyIFdvcmsgaW4gcGFydCB0aHJvdWdoIHRoZSB1c2UgYW5kIGVmZm9ydHMgb2Ygb3RoZXJzLgorCitGb3IgdGhlc2UgYW5kL29yIG90aGVyIHB1cnBvc2VzIGFuZCBtb3RpdmF0aW9ucywgYW5kIHdpdGhvdXQgYW55IGV4cGVjdGF0aW9uIG9mIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiBvciBjb21wZW5zYXRpb24sIHRoZSBwZXJzb24gYXNzb2NpYXRpbmcgQ0MwIHdpdGggYSBXb3JrICh0aGUgIkFmZmlybWVyIiksIHRvIHRoZSBleHRlbnQgdGhhdCBoZSBvciBzaGUgaXMgYW4gb3duZXIgb2YgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yaywgdm9sdW50YXJpbHkgZWxlY3RzIHRvIGFwcGx5IENDMCB0byB0aGUgV29yayBhbmQgcHVibGljbHkgZGlzdHJpYnV0ZSB0aGUgV29yayB1bmRlciBpdHMgdGVybXMsIHdpdGgga25vd2xlZGdlIG9mIGhpcyBvciBoZXIgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yayBhbmQgdGhlIG1lYW5pbmcgYW5kIGludGVuZGVkIGxlZ2FsIGVmZmVjdCBvZiBDQzAgb24gdGhvc2UgcmlnaHRzLgorCisxLiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzLiBBIFdvcmsgbWFkZSBhdmFpbGFibGUgdW5kZXIgQ0MwIG1heSBiZSBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGFuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyAoIkNvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMiKS4gQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCB0aGUgZm9sbG93aW5nOgorCit0aGUgcmlnaHQgdG8gcmVwcm9kdWNlLCBhZGFwdCwgZGlzdHJpYnV0ZSwgcGVyZm9ybSwgZGlzcGxheSwgY29tbXVuaWNhdGUsIGFuZCB0cmFuc2xhdGUgYSBXb3JrOworbW9yYWwgcmlnaHRzIHJldGFpbmVkIGJ5IHRoZSBvcmlnaW5hbCBhdXRob3IocykgYW5kL29yIHBlcmZvcm1lcihzKTsKK3B1YmxpY2l0eSBhbmQgcHJpdmFjeSByaWdodHMgcGVydGFpbmluZyB0byBhIHBlcnNvbmBzIGltYWdlIG9yIGxpa2VuZXNzIGRlcGljdGVkIGluIGEgV29yazsKK3JpZ2h0cyBwcm90ZWN0aW5nIGFnYWluc3QgdW5mYWlyIGNvbXBldGl0aW9uIGluIHJlZ2FyZHMgdG8gYSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBpbiBwYXJhZ3JhcGggNChhKSwgYmVsb3c7CityaWdodHMgcHJvdGVjdGluZyB0aGUgZXh0cmFjdGlvbiwgZGlzc2VtaW5hdGlvbiwgdXNlIGFuZCByZXVzZSBvZiBkYXRhIGluIGEgV29yazsKK2RhdGFiYXNlIHJpZ2h0cyAoc3VjaCBhcyB0aG9zZSBhcmlzaW5nIHVuZGVyIERpcmVjdGl2ZSA5Ni85L0VDIG9mIHRoZSBFdXJvcGVhbiBQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbCBvZiAxMSBNYXJjaCAxOTk2IG9uIHRoZSBsZWdhbCBwcm90ZWN0aW9uIG9mIGRhdGFiYXNlcywgYW5kIHVuZGVyIGFueSBuYXRpb25hbCBpbXBsZW1lbnRhdGlvbiB0aGVyZW9mLCBpbmNsdWRpbmcgYW55IGFtZW5kZWQgb3Igc3VjY2Vzc29yIHZlcnNpb24gb2Ygc3VjaCBkaXJlY3RpdmUpOyBhbmQKK290aGVyIHNpbWlsYXIsIGVxdWl2YWxlbnQgb3IgY29ycmVzcG9uZGluZyByaWdodHMgdGhyb3VnaG91dCB0aGUgd29ybGQgYmFzZWQgb24gYXBwbGljYWJsZSBsYXcgb3IgdHJlYXR5LCBhbmQgYW55IG5hdGlvbmFsIGltcGxlbWVudGF0aW9ucyB0aGVyZW9mLgorMi4gV2FpdmVyLiBUbyB0aGUgZ3JlYXRlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSwgYnV0IG5vdCBpbiBjb250cmF2ZW50aW9uIG9mLCBhcHBsaWNhYmxlIGxhdywgQWZmaXJtZXIgaGVyZWJ5IG92ZXJ0bHksIGZ1bGx5LCBwZXJtYW5lbnRseSwgaXJyZXZvY2FibHkgYW5kIHVuY29uZGl0aW9uYWxseSB3YWl2ZXMsIGFiYW5kb25zLCBhbmQgc3VycmVuZGVycyBhbGwgb2YgQWZmaXJtZXJgcyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGFuZCBhc3NvY2lhdGVkIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiwgd2hldGhlciBub3cga25vd24gb3IgdW5rbm93biAoaW5jbHVkaW5nIGV4aXN0aW5nIGFzIHdlbGwgYXMgZnV0dXJlIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiksIGluIHRoZSBXb3JrIChpKSBpbiBhbGwgdGVycml0b3JpZXMgd29ybGR3aWRlLCAoaWkpIGZvciB0aGUgbWF4aW11bSBkdXJhdGlvbiBwcm92aWRlZCBieSBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHkgKGluY2x1ZGluZyBmdXR1cmUgdGltZSBleHRlbnNpb25zKSwgKGlpaSkgaW4gYW55IGN1cnJlbnQgb3IgZnV0dXJlIG1lZGl1bSBhbmQgZm9yIGFueSBudW1iZXIgb2YgY29waWVzLCBhbmQgKGl2KSBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsLCBhZHZlcnRpc2luZyBvciBwcm9tb3Rpb25hbCBwdXJwb3NlcyAodGhlICJXYWl2ZXIiKS4gQWZmaXJtZXIgbWFrZXMgdGhlIFdhaXZlciBmb3IgdGhlIGJlbmVmaXQgb2YgZWFjaCBtZW1iZXIgb2YgdGhlIHB1YmxpYyBhdCBsYXJnZSBhbmQgdG8gdGhlIGRldHJpbWVudCBvZiBBZmZpcm1lcmBzIGhlaXJzIGFuZCBzdWNjZXNzb3JzLCBmdWxseSBpbnRlbmRpbmcgdGhhdCBzdWNoIFdhaXZlciBzaGFsbCBub3QgYmUgc3ViamVjdCB0byByZXZvY2F0aW9uLCByZXNjaXNzaW9uLCBjYW5jZWxsYXRpb24sIHRlcm1pbmF0aW9uLCBvciBhbnkgb3RoZXIgbGVnYWwgb3IgZXF1aXRhYmxlIGFjdGlvbiB0byBkaXNydXB0IHRoZSBxdWlldCBlbmpveW1lbnQgb2YgdGhlIFdvcmsgYnkgdGhlIHB1YmxpYyBhcyBjb250ZW1wbGF0ZWQgYnkgQWZmaXJtZXJgcyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLgorCiszLiBQdWJsaWMgTGljZW5zZSBGYWxsYmFjay4gU2hvdWxkIGFueSBwYXJ0IG9mIHRoZSBXYWl2ZXIgZm9yIGFueSByZWFzb24gYmUganVkZ2VkIGxlZ2FsbHkgaW52YWxpZCBvciBpbmVmZmVjdGl2ZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhlbiB0aGUgV2FpdmVyIHNoYWxsIGJlIHByZXNlcnZlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIHRha2luZyBpbnRvIGFjY291bnQgQWZmaXJtZXJgcyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLiBJbiBhZGRpdGlvbiwgdG8gdGhlIGV4dGVudCB0aGUgV2FpdmVyIGlzIHNvIGp1ZGdlZCBBZmZpcm1lciBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggYWZmZWN0ZWQgcGVyc29uIGEgcm95YWx0eS1mcmVlLCBub24gdHJhbnNmZXJhYmxlLCBub24gc3VibGljZW5zYWJsZSwgbm9uIGV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgYW5kIHVuY29uZGl0aW9uYWwgbGljZW5zZSB0byBleGVyY2lzZSBBZmZpcm1lcmBzIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgKGkpIGluIGFsbCB0ZXJyaXRvcmllcyB3b3JsZHdpZGUsIChpaSkgZm9yIHRoZSBtYXhpbXVtIGR1cmF0aW9uIHByb3ZpZGVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSAoaW5jbHVkaW5nIGZ1dHVyZSB0aW1lIGV4dGVuc2lvbnMpLCAoaWlpKSBpbiBhbnkgY3VycmVudCBvciBmdXR1cmUgbWVkaXVtIGFuZCBmb3IgYW55IG51bWJlciBvZiBjb3BpZXMsIGFuZCAoaXYpIGZvciBhbnkgcHVycG9zZSB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nIG9yIHByb21vdGlvbmFsIHB1cnBvc2VzICh0aGUgIkxpY2Vuc2UiKS4gVGhlIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBDQzAgd2FzIGFwcGxpZWQgYnkgQWZmaXJtZXIgdG8gdGhlIFdvcmsuIFNob3VsZCBhbnkgcGFydCBvZiB0aGUgTGljZW5zZSBmb3IgYW55IHJlYXNvbiBiZSBqdWRnZWQgbGVnYWxseSBpbnZhbGlkIG9yIGluZWZmZWN0aXZlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBzdWNoIHBhcnRpYWwgaW52YWxpZGl0eSBvciBpbmVmZmVjdGl2ZW5lc3Mgc2hhbGwgbm90IGludmFsaWRhdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgTGljZW5zZSwgYW5kIGluIHN1Y2ggY2FzZSBBZmZpcm1lciBoZXJlYnkgYWZmaXJtcyB0aGF0IGhlIG9yIHNoZSB3aWxsIG5vdCAoaSkgZXhlcmNpc2UgYW55IG9mIGhpcyBvciBoZXIgcmVtYWluaW5nIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgb3IgKGlpKSBhc3NlcnQgYW55IGFzc29jaWF0ZWQgY2xhaW1zIGFuZCBjYXVzZXMgb2YgYWN0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgaW4gZWl0aGVyIGNhc2UgY29udHJhcnkgdG8gQWZmaXJtZXJgcyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLgorCis0LiBMaW1pdGF0aW9ucyBhbmQgRGlzY2xhaW1lcnMuCisKK05vIHRyYWRlbWFyayBvciBwYXRlbnQgcmlnaHRzIGhlbGQgYnkgQWZmaXJtZXIgYXJlIHdhaXZlZCwgYWJhbmRvbmVkLCBzdXJyZW5kZXJlZCwgbGljZW5zZWQgb3Igb3RoZXJ3aXNlIGFmZmVjdGVkIGJ5IHRoaXMgZG9jdW1lbnQuCitBZmZpcm1lciBvZmZlcnMgdGhlIFdvcmsgYXMtaXMgYW5kIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBvciB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssIGV4cHJlc3MsIGltcGxpZWQsIHN0YXR1dG9yeSBvciBvdGhlcndpc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gd2FycmFudGllcyBvZiB0aXRsZSwgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbm9uIGluZnJpbmdlbWVudCwgb3IgdGhlIGFic2VuY2Ugb2YgbGF0ZW50IG9yIG90aGVyIGRlZmVjdHMsIGFjY3VyYWN5LCBvciB0aGUgcHJlc2VudCBvciBhYnNlbmNlIG9mIGVycm9ycywgd2hldGhlciBvciBub3QgZGlzY292ZXJhYmxlLCBhbGwgdG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwZXJtaXNzaWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0FmZmlybWVyIGRpc2NsYWltcyByZXNwb25zaWJpbGl0eSBmb3IgY2xlYXJpbmcgcmlnaHRzIG9mIG90aGVyIHBlcnNvbnMgdGhhdCBtYXkgYXBwbHkgdG8gdGhlIFdvcmsgb3IgYW55IHVzZSB0aGVyZW9mLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwZXJzb25gcyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrLiBGdXJ0aGVyLCBBZmZpcm1lciBkaXNjbGFpbXMgcmVzcG9uc2liaWxpdHkgZm9yIG9idGFpbmluZyBhbnkgbmVjZXNzYXJ5IGNvbnNlbnRzLCBwZXJtaXNzaW9ucyBvciBvdGhlciByaWdodHMgcmVxdWlyZWQgZm9yIGFueSB1c2Ugb2YgdGhlIFdvcmsuCitBZmZpcm1lciB1bmRlcnN0YW5kcyBhbmQgYWNrbm93bGVkZ2VzIHRoYXQgQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIGRvY3VtZW50IGFuZCBoYXMgbm8gZHV0eSBvciBvYmxpZ2F0aW9uIHdpdGggcmVzcGVjdCB0byB0aGlzIENDMCBvciB1c2Ugb2YgdGhlIFdvcmsuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NEREwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0RETC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxOThlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NEREwtMS4wCkBAIC0wLDAgKzEsMTMxIEBACisKK0NPTU1PTiBERVZFTE9QTUVOVCBBTkQgRElTVFJJQlVUSU9OIExJQ0VOU0UgKENEREwpCitWZXJzaW9uIDEuMAorMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gJiM4MjIwO0NvbnRyaWJ1dG9yJiM4MjIxOyBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAmIzgyMjA7Q29udHJpYnV0b3IgVmVyc2lvbiYjODIyMTsgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IgKGlmIGFueSksIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAmIzgyMjA7Q292ZXJlZCBTb2Z0d2FyZSYjODIyMTsgbWVhbnMgKGEpIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKGIpIE1vZGlmaWNhdGlvbnMsIG9yIChjKSB0aGUgY29tYmluYXRpb24gb2YgZmlsZXMgY29udGFpbmluZyBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIGZpbGVzIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICYjODIyMDtFeGVjdXRhYmxlJiM4MjIxOyBtZWFucyB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjUuICYjODIyMDtJbml0aWFsIERldmVsb3BlciYjODIyMTsgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgZmlyc3QgbWFrZXMgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS42LiAmIzgyMjA7TGFyZ2VyIFdvcmsmIzgyMjE7IG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjcuICYjODIyMDtMaWNlbnNlJiM4MjIxOyBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguICYjODIyMDtMaWNlbnNhYmxlJiM4MjIxOyBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiAmIzgyMjA7TW9kaWZpY2F0aW9ucyYjODIyMTsgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKK0EuIEFueSBmaWxlIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uczsKKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbjsgb3IKKworQy4gQW55IG5ldyBmaWxlIHRoYXQgaXMgY29udHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuMTAuICYjODIyMDtPcmlnaW5hbCBTb2Z0d2FyZSYjODIyMTsgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB0aGF0IGlzIG9yaWdpbmFsbHkgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjExLiAmIzgyMjA7UGF0ZW50IENsYWltcyYjODIyMTsgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTIuICYjODIyMDtTb3VyY2UgQ29kZSYjODIyMTsgbWVhbnMgKGEpIHRoZSBjb21tb24gZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIGluIHdoaWNoIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgYW5kIChiKSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgaW4gb3Igd2l0aCBzdWNoIGNvZGUuCisKKzEuMTMuICYjODIyMDtZb3UmIzgyMjE7IChvciAmIzgyMjA7WW91ciYjODIyMTspIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgJiM4MjIwO1lvdSYjODIyMTsgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICYjODIyMDtjb250cm9sJiM4MjIxOyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gTGljZW5zZSBHcmFudHMuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgU29mdHdhcmUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgb3Igb3RoZXJ3aXNlIG1ha2VzIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK0NvbmRpdGlvbmVkIHVwb24gWW91ciBjb21wbGlhbmNlIHdpdGggU2VjdGlvbiAzLjEgYmVsb3cgYW5kIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBTb2Z0d2FyZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAoMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgKDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworKGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgZGlzdHJpYnV0ZXMgb3Igb3RoZXJ3aXNlIG1ha2VzIHRoZSBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yICgzKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIFNvZnR3YXJlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgQ292ZXJlZCBTb2Z0d2FyZSB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZSBpbiBFeGVjdXRhYmxlIGZvcm0gbXVzdCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kIHRoYXQgU291cmNlIENvZGUgZm9ybSBtdXN0IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUuIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIG9mIGFueSBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIGFzIHRvIGhvdyB0aGV5IGNhbiBvYnRhaW4gc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorCiszLjIuIE1vZGlmaWNhdGlvbnMuCisKK1RoZSBNb2RpZmljYXRpb25zIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IHJlcHJlc2VudCB0aGF0IFlvdSBiZWxpZXZlIFlvdXIgTW9kaWZpY2F0aW9ucyBhcmUgWW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgWW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuMy4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBpbiBlYWNoIG9mIFlvdXIgTW9kaWZpY2F0aW9ucyB0aGF0IGlkZW50aWZpZXMgWW91IGFzIHRoZSBDb250cmlidXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiBZb3UgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIENvdmVyZWQgU29mdHdhcmUsIG9yIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBvciBhbnkgZGVzY3JpcHRpdmUgdGV4dCBnaXZpbmcgYXR0cmlidXRpb24gdG8gYW55IENvbnRyaWJ1dG9yIG9yIHRoZSBJbml0aWFsIERldmVsb3Blci4KKworMy40LiBBcHBsaWNhdGlvbiBvZiBBZGRpdGlvbmFsIFRlcm1zLgorCitZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgaGVyZXVuZGVyLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBTb2Z0d2FyZS4gSG93ZXZlciwgeW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjUuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSBmb3JtIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCYjODIxNztzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgZm9ybSBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCis0LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworNC4xLiBOZXcgVmVyc2lvbnMuCisKK1N1biBNaWNyb3N5c3RlbXMsIEluYy4gaXMgdGhlIGluaXRpYWwgbGljZW5zZSBzdGV3YXJkIGFuZCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA0LjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlIHN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBMaWNlbnNlLgorCis0LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK1lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBJZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW5jbHVkZXMgYSBub3RpY2UgaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHByb2hpYml0aW5nIGl0IGZyb20gYmVpbmcgZGlzdHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtdXN0IGRpc3RyaWJ1dGUgYW5kIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gT3RoZXJ3aXNlLCBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBsaWNlbnNlIHN0ZXdhcmQuCisKKzQuMy4gTW9kaWZpZWQgVmVyc2lvbnMuCisKK1doZW4gWW91IGFyZSBhbiBJbml0aWFsIERldmVsb3BlciBhbmQgWW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGxpY2Vuc2UgZm9yIFlvdXIgT3JpZ2luYWwgU29mdHdhcmUsIFlvdSBtYXkgY3JlYXRlIGFuZCB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiBZb3U6IChhKSByZW5hbWUgdGhlIGxpY2Vuc2UgYW5kIHJlbW92ZSBhbnkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZSBvZiB0aGUgbGljZW5zZSBzdGV3YXJkIChleGNlcHQgdG8gbm90ZSB0aGF0IHRoZSBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpOyBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLgorCis1LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAmIzgyMjA7QVMgSVMmIzgyMjE7IEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis2LiBURVJNSU5BVElPTi4KKworNi4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis2LjIuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBhc3NlcnQgc3VjaCBjbGFpbSBpcyByZWZlcnJlZCB0byBhcyAmIzgyMjA7UGFydGljaXBhbnQmIzgyMjE7KSBhbGxlZ2luZyB0aGF0IHRoZSBQYXJ0aWNpcGFudCBTb2Z0d2FyZSAobWVhbmluZyB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiB3aGVyZSB0aGUgUGFydGljaXBhbnQgaXMgYSBDb250cmlidXRvciBvciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIHRoZSBJbml0aWFsIERldmVsb3BlcikgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50LCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgKGlmIHRoZSBJbml0aWFsIERldmVsb3BlciBpcyBub3QgdGhlIFBhcnRpY2lwYW50KSBhbmQgYWxsIENvbnRyaWJ1dG9ycyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSBhbmQgYXV0b21hdGljYWxseSBhdCB0aGUgZXhwaXJhdGlvbiBvZiBzdWNoIDYwIGRheSBub3RpY2UgcGVyaW9kLCB1bmxlc3MgaWYgd2l0aGluIHN1Y2ggNjAgZGF5IHBlcmlvZCBZb3Ugd2l0aGRyYXcgWW91ciBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIFBhcnRpY2lwYW50IFNvZnR3YXJlIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudCBlaXRoZXIgdW5pbGF0ZXJhbGx5IG9yIHB1cnN1YW50IHRvIGEgd3JpdHRlbiBhZ3JlZW1lbnQgd2l0aCBQYXJ0aWNpcGFudC4KKworNi4zLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgNi4xIG9yIDYuMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2VzIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiAoZXhjbHVkaW5nIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IGJ5IGFueSBkaXN0cmlidXRvcikgc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworNy4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIFNPRlRXQVJFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1QgUFJPRklUUywgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJiM4MjE3O1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworOC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgU29mdHdhcmUgaXMgYSAmIzgyMjA7Y29tbWVyY2lhbCBpdGVtLCYjODIyMTsgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICYjODIyMDtjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlJiM4MjIxOyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgYXQgNDggQy5GLlIuICYjMTY3OyAyNTIuMjI3LTcwMTQoYSkoMSkpIGFuZCAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uJiM4MjIxOyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLiBUaGlzIFUuUy4gR292ZXJubWVudCBSaWdodHMgY2xhdXNlIGlzIGluIGxpZXUgb2YsIGFuZCBzdXBlcnNlZGVzLCBhbnkgb3RoZXIgRkFSLCBERkFSLCBvciBvdGhlciBjbGF1c2Ugb3IgcHJvdmlzaW9uIHRoYXQgYWRkcmVzc2VzIEdvdmVybm1lbnQgcmlnaHRzIGluIGNvbXB1dGVyIHNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworOS4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBqdXJpc2RpY3Rpb24gc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgc3VjaCBqdXJpc2RpY3Rpb24mIzgyMTc7cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gQW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGxvY2F0ZWQgaW4gdGhlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJiM4MjE3OyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuIFlvdSBhZ3JlZSB0aGF0IFlvdSBhbG9uZSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVW5pdGVkIFN0YXRlcyBleHBvcnQgYWRtaW5pc3RyYXRpb24gcmVndWxhdGlvbnMgKGFuZCB0aGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgcmVndWxhdGlvbiBvZiBhbnkgb3RoZXIgY291bnRyaWVzKSB3aGVuIFlvdSB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGFueSBDb3ZlcmVkIFNvZnR3YXJlLgorCisxMC4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDMxNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTEuMApAQCAtMCwwICsxLDI0MiBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMCisKK0F2ZXJ0aXNzZW1lbnQKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgaXNzdWUgZCYjODIxNzt1bmUgY29uY2VydGF0aW9uIGVudHJlIHNlcyBhdXRldXJzIGFmaW4gcXVlIGxlIHJlc3BlY3QgZGUgZGV1eCBncmFuZHMgcHJpbmNpcGVzIHByJiMyMzM7c2lkZSAmIzIyNDsgc2EgciYjMjMzO2RhY3Rpb246CisKK2QmIzgyMTc7dW5lIHBhcnQsIHNhIGNvbmZvcm1pdCYjMjMzOyBhdSBkcm9pdCBmcmFuJiMyMzE7YWlzLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1JiM4MjE3O2lsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorZCYjODIxNzthdXRyZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbCYjODIxNztFbmVyZ2llIEF0b21pcXVlICYjODIxMTsgQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMxLTMzIHJ1ZSBkZSBsYSBGJiMyMzM7ZCYjMjMzO3JhdGlvbiwgNzU3NTIgUEFSSVMgY2VkZXggMTUuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlICYjODIxMTsgQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSA3NTc5NCBQYXJpcyBjZWRleCAxNi4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAmIzgyMTE7IElOUklBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LgorCitQUkVBTUJVTEUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBkdSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UgZGFucyBsZSBjYWRyZSBkYHVuIG1vZCYjMjMyO2xlIGRlIGRpZmZ1c2lvbiAmIzE3MTtvcGVuIHNvdXJjZSYjMTg3Oy4KKworTGBleGVyY2ljZSBkZSBjZXMgbGliZXJ0JiMyMzM7cyBlc3QgYXNzb3J0aSBkZSBjZXJ0YWlucyBkZXZvaXJzICYjMjI0OyBsYSBjaGFyZ2UgZGVzIHV0aWxpc2F0ZXVycyBhZmluIGRlIHByJiMyMzM7c2VydmVyIGNlIHN0YXR1dCBhdSBjb3VycyBkZXMgcmVkaXN0cmlidXRpb25zIHVsdCYjMjMzO3JpZXVyZXMuCisKK0wmIzgyMTc7YWNjZXNzaWJpbGl0JiMyMzM7IGF1IGNvZGUgc291cmNlIGV0IGxlcyBkcm9pdHMgZGUgY29waWUsIGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBxdWkgZW4gZCYjMjMzO2NvdWxlbnQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG4mIzgyMTc7b2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXUmIzgyMTc7dW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbCYjODIxNzthdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXUmIzgyMTc7dW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsJiM4MjE3O2F0dGVudGlvbiBkZSBsJiM4MjE3O3V0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGwmIzgyMTc7dXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGwmIzgyMTc7dXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgZXQgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbCYjODIxNzthZCYjMjMzO3F1YXRpb24gZHUgTG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldCBvdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lIGNvbmRpdGlvbnMgZGUgcyYjMjMzO2N1cml0JiMyMzM7LiBDZSBjb250cmF0IHBldXQgJiMyMzQ7dHJlIHJlcHJvZHVpdCBldCBkaWZmdXMmIzIzMzsgbGlicmVtZW50LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBsZSBjb25zZXJ2ZXIgZW4gbCYjODIxNzsmIzIzMzt0YXQsIHNhbnMgYWpvdXQgbmkgc3VwcHJlc3Npb24gZGUgY2xhdXNlcy4KKworQ2UgY29udHJhdCBlc3Qgc3VzY2VwdGlibGUgZGUgcyYjODIxNzthcHBsaXF1ZXIgJiMyMjQ7IHRvdXQgbG9naWNpZWwgZG9udCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjMjMzO2NpZGUgZGUgc291bWV0dHJlIGwmIzgyMTc7ZXhwbG9pdGF0aW9uIGF1eCBkaXNwb3NpdGlvbnMgcXUmIzgyMTc7aWwgY29udGllbnQuCisKK0FydGljbGUgMWVyIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXUmIzgyMTc7aWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGwmIzgyMTc7YWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgZGUgQ29kZSBPYmpldCBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGV1ciBwcmVtaSYjMjMyO3JlIGRpZmZ1c2lvbiBzb3VzIGxlcyB0ZXJtZXMgZHUgQ29udHJhdC4KKworTG9naWNpZWwgTW9kaWZpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IHBhciBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGwmIzgyMTc7ZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbCYjODIxNzthY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmUgOiBkJiMyMzM7c2lnbmUgbGUgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjODIxNzthdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzsocyk6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXIocykgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGQmIzgyMTc7YXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uczogZCYjMjMzO3NpZ25lIGwmIzgyMTc7ZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbCBwYXIgdG91dCBDb250cmlidXRldXIsIGFpbnNpIHF1ZSBsZXMgTW9kdWxlcyBTdGF0aXF1ZXMuCisKK01vZHVsZTogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWksIHVuZSBmb2lzIGNvbXBpbCYjMjMzOyBzb3VzIGZvcm1lIGV4JiMyMzM7Y3V0YWJsZSwgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitNb2R1bGUgRHluYW1pcXVlOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUsIGNyJiMyMzM7JiMyMzM7IHBhciBsZSBDb250cmlidXRldXIsIGluZCYjMjMzO3BlbmRhbnQgZHUgTG9naWNpZWwsIHRlbCBxdWUgY2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIHNvbnQgc291cyBmb3JtZSBkZSBkZXV4IGV4JiMyMzM7Y3V0YWJsZXMgaW5kJiMyMzM7cGVuZGFudHMgcXVpIHMmIzgyMTc7ZXgmIzIzMztjdXRlbnQgZGFucyB1biBlc3BhY2UgZCYjODIxNzthZHJlc3NhZ2UgaW5kJiMyMzM7cGVuZGFudCwgbCYjODIxNzt1biBhcHBlbGFudCBsJiM4MjE3O2F1dHJlIGF1IG1vbWVudCBkZSBsZXVyIGV4JiMyMzM7Y3V0aW9uLgorCitNb2R1bGUgU3RhdGlxdWU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSBjciYjMjMzOyYjMjMzOyBwYXIgbGUgQ29udHJpYnV0ZXVyIGV0IGxpJiMyMzM7IGF1IExvZ2ljaWVsIHBhciB1biBsaWVuIHN0YXRpcXVlIHJlbmRhbnQgbGV1ciBjb2RlIG9iamV0IGQmIzIzMztwZW5kYW50IGxgdW4gZGUgbGBhdXRyZS4gQ2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIGF1cXVlbCBpbCBlc3QgbGkmIzIzMzssIHNvbnQgcmVncm91cCYjMjMzO3MgZW4gdW4gc2V1bCBleCYjMjMzO2N1dGFibGUuCisKK1BhcnRpZXM6IGQmIzIzMztzaWduZSBjb2xsZWN0aXZlbWVudCBsZSBMaWNlbmNpJiMyMzM7IGV0IGxlIENvbmMmIzIzMztkYW50LgorCitDZXMgdGVybWVzIHMmIzgyMTc7ZW50ZW5kZW50IGF1IHNpbmd1bGllciBjb21tZSBhdSBwbHVyaWVsLgorCitBcnRpY2xlIDIgLSBPQkpFVAorCitMZSBDb250cmF0IGEgcG91ciBvYmpldCBsYSBjb25jZXNzaW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudCBhdSBMaWNlbmNpJiMyMzM7IGQmIzgyMTc7dW5lIExpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgdHJhbnNmJiMyMzM7cmFibGUgZXQgbW9uZGlhbGUgZHUgTG9naWNpZWwgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBjaS1hcHImIzIzMjtzICYjMjI0OyBsYGFydGljbGUgNSBwb3VyIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBvcnRhbnQgc3VyIGNlIExvZ2ljaWVsLgorCitBcnRpY2xlIDMgLSBBQ0NFUFRBVElPTgorCiszLjEuIEwmIzgyMTc7YWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByJiMyMzM7cHV0JiMyMzM7ZSBhY3F1aXNlIGR1IGZhaXQgZHUgcHJlbWllciBkZXMgZmFpdHMgc3VpdmFudHM6CisKKyhpKSBsZSBjaGFyZ2VtZW50IGR1IExvZ2ljaWVsIHBhciB0b3V0IG1veWVuIG5vdGFtbWVudCBwYXIgdCYjMjMzO2wmIzIzMztjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZCYjODIxNzt1biBzZXJ2ZXVyIGRpc3RhbnQgb3UgcGFyIGNoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkJiM4MjE3O3VuIHN1cHBvcnQgcGh5c2lxdWU7CisoaWkpIGxlIHByZW1pZXIgZXhlcmNpY2UgcGFyIGxlIExpY2VuY2kmIzIzMzsgZGUgbCYjODIxNzt1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uYyYjMjMzO2QmIzIzMztzIHBhciBsZSBDb250cmF0LgorMy4yLiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlcy4KKworQXJ0aWNsZSA0IC0gRU5UUkVFIEVOIFZJR1VFVVIgRVQgRFVSRUUKKworNC4xLkVOVFJFRSBFTiBWSUdVRVVSCisKK0xlIENvbnRyYXQgZW50cmUgZW4gdmlndWV1ciAmIzIyNDsgbGEgZGF0ZSBkZSBzb24gYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBlbiAzLjEuCisKKzQuMi4gRFVSRUUKKworTGUgQ29udHJhdCBwcm9kdWlyYSBzZXMgZWZmZXRzIHBlbmRhbnQgdG91dGUgbGEgZHVyJiMyMzM7ZSBsJiMyMzM7Z2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLgorCitBcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVMKKworTGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzssIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXImIzIzMztlIGR1IENvbnRyYXQgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCitQYXIgYWlsbGV1cnMsIGxlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7ICYjMjI0OyB0aXRyZSBncmFjaWV1eCBsZXMgZHJvaXRzIGQmIzgyMTc7ZXhwbG9pdGF0aW9uIGR1IG91IGRlcyBicmV2ZXRzIHF1JiM4MjE3O2lsIGQmIzIzMzt0aWVudCBzdXIgdG91dCBvdSBwYXJ0aWUgZGVzIGludmVudGlvbnMgaW1wbCYjMjMzO21lbnQmIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsLgorCis1LjEuIERST0lUUyBEJiM4MjE3O1VUSUxJU0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyIGxlIExvZ2ljaWVsLCBzYW5zIHJlc3RyaWN0aW9uIHF1YW50IGF1eCBkb21haW5lcyBkJiM4MjE3O2FwcGxpY2F0aW9uLCAmIzIzMzt0YW50IGNpLWFwciYjMjMyO3MgcHImIzIzMztjaXMmIzIzMzsgcXVlIGNlbGEgY29tcG9ydGU6CisKK2xhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS4KKworbGUgY2hhcmdlbWVudCwgbCYjODIxNzthZmZpY2hhZ2UsIGwmIzgyMTc7ZXgmIzIzMztjdXRpb24sIG91IGxlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHN1ciB0b3V0IHN1cHBvcnQuCisKK2xhIHBvc3NpYmlsaXQmIzIzMzsgZCYjODIxNztlbiBvYnNlcnZlciwgZCYjODIxNztlbiAmIzIzMzt0dWRpZXIsIG91IGQmIzgyMTc7ZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZCYjMjMzO3Rlcm1pbmVyIGxlcyBpZCYjMjMzO2VzIGV0IHByaW5jaXBlcyBxdWkgc29udCAmIzIyNDsgbGEgYmFzZSBkZSBuJiM4MjE3O2ltcG9ydGUgcXVlbCAmIzIzMztsJiMyMzM7bWVudCBkZSBjZSBMb2dpY2llbDsgZXQgY2VjaSwgbG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGVmZmVjdHVlIHRvdXRlIG9wJiMyMzM7cmF0aW9uIGRlIGNoYXJnZW1lbnQsIGQmIzgyMTc7YWZmaWNoYWdlLCBkJiM4MjE3O2V4JiMyMzM7Y3V0aW9uLCBkZSB0cmFuc21pc3Npb24gb3UgZGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgcXUmIzgyMTc7aWwgZXN0IGVuIGRyb2l0IGQmIzgyMTc7ZWZmZWN0dWVyIGVuIHZlcnR1IGR1IENvbnRyYXQuCisKKzUuMi4gRFJPSVQgRCYjODIxNztBUFBPUlRFUiBERVMgQ09OVFJJQlVUSU9OUworCitMZSBkcm9pdCBkJiM4MjE3O2FwcG9ydGVyIGRlcyBDb250cmlidXRpb25zIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkJiM4MjE3O2FkYXB0ZXIsIGQmIzgyMTc7YXJyYW5nZXIgb3UgZCYjODIxNzthcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gZHUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBMb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgYXBwb3J0ZXIgdG91dGUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsIHNvdXMgciYjMjMzO3NlcnZlIGRlIG1lbnRpb25uZXIsIGRlIGZhJiMyMzE7b24gZXhwbGljaXRlLCBzb24gbm9tIGVuIHRhbnQgcXUmIzgyMTc7YXV0ZXVyIGRlIGNldHRlIENvbnRyaWJ1dGlvbiBldCBsYSBkYXRlIGRlIGNyJiMyMzM7YXRpb24gZGUgY2VsbGUtY2kuCisKKzUuMy4gRFJPSVRTIERFIERJU1RSSUJVVElPTiBFVCBERSBESUZGVVNJT04KKworTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGV0IGRlIGRpZmZ1c2lvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2gmIzIzMzsgJiMyMjQ7IHRpdHJlIG9uJiMyMzM7cmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvYyYjMjMzO2QmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCAmIzIyNDsgZGVzIHRpZXJzIGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworNS4zLjEuIFJFRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIFNBTlMgTU9ESUZJQ0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSByZWRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkJiM4MjE3O3VuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZCYjODIxNzt1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkJiM4MjE3O2FjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgZW4gaW5kaXF1YW50IGxlcyBtb2RhbGl0JiMyMzM7cyBkJiM4MjE3O2FjYyYjMjMyO3MsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGQmIzgyMTc7YWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMi4gUkVESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgTU9ESUZJRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc29udCBhbG9ycyBzb3VtaXNlcyAmIzIyNDsgbCYjODIxNztpbnQmIzIzMztncmFsaXQmIzIzMzsgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIHJlZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2QmIzgyMTc7dW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkJiM4MjE3O3VuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBjb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkJiM4MjE3O2FjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZCYjODIxNzthY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkJiM4MjE3O2FjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjMuIFJFRElTVFJJQlVUSU9OIERFUyBNT0RVTEVTIERZTkFNSVFVRVMKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRHluYW1pcXVlIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgbmUgcyYjODIxNzthcHBsaXF1ZW50IHBhcyAmIzIyNDsgY2UgTW9kdWxlIER5bmFtaXF1ZSwgcXVpIHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGRpZmYmIzIzMztyZW50LgorCis1LjMuNC4gQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgR1BMCisKK0RhbnMgbGUgY2FzIG8mIzI0OTsgbGUgTG9naWNpZWwsIE1vZGlmaSYjMjMzOyBvdSBub24sIGVzdCBpbnQmIzIzMztnciYjMjMzOyAmIzIyNDsgdW4gY29kZSBzb3VtaXMgYXV4IGRpc3Bvc2l0aW9ucyBkZSBsYSBsaWNlbmNlIEdQTCwgbGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGwmIzgyMTc7ZW5zZW1ibGUgc291cyBsYSBsaWNlbmNlIEdQTC4KKworRGFucyBsZSBjYXMgbyYjMjQ5OyBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgaW50JiMyMzI7Z3JlIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGUgbGEgbGljZW5jZSBHUEwsIGxlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc291cyBsYSBsaWNlbmNlIEdQTC4KKworQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFCisKKzYuMS4gU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uICYjMzM5O3V2cmUgZXQgbnVsIGF1dHJlIG4mIzgyMTc7YSBsYSBmYWN1bHQmIzIzMzsgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xlIFRpdHVsYWlyZSBzYGVuZ2FnZSAmIzIyNDsgbWFpbnRlbmlyIGxhIGRpZmZ1c2lvbiBkdSBMb2dpY2llbCBpbml0aWFsIHNvdXMgbGVzIGNvbmRpdGlvbnMgZHUgQ29udHJhdCBldCBjZSwgcG91ciBsYSBkdXImIzIzMztlIHZpcyYjMjMzO2UgJiMyMjQ7IGxgYXJ0aWNsZSA0LjIuCisKKzYuMi4gU1VSIExFUyBDT05UUklCVVRJT05TCisKK0xlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIENvbnRyaWJ1dGlvbnMgc29udCBhdHRhY2gmIzIzMztzIGF1IHRpdHVsYWlyZSBkZSBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztzaWduJiMyMzM7IHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMy4gU1VSIExFUyBNT0RVTEVTIERZTkFNSVFVRVMKKworTGUgTGljZW5jaSYjMjMzOyBheWFudCBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBEeW5hbWlxdWUgZXN0IHRpdHVsYWlyZSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGNlIE1vZHVsZSBEeW5hbWlxdWUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24uCisKKzYuNC4gRElTUE9TSVRJT05TIENPTU1VTkVTCisKKzYuNC4xLiBMZSBMaWNlbmNpJiMyMzM7IHMmIzgyMTc7ZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgbmUgcGFzIHN1cHByaW1lciBvdSBtb2RpZmllciBkZSBxdWVscXVlIG1hbmkmIzIzMjtyZSBxdWUgY2Ugc29pdCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBhcHBvcyYjMjMzO2VzIHN1ciBsZSBMb2dpY2llbDsKKworJiMyMjQ7IHJlcHJvZHVpcmUgJiMyMjQ7IGwmIzgyMTc7aWRlbnRpcXVlIGxlc2RpdGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwuCisKKzYuNC4yLiBMZSBMaWNlbmNpJiMyMzM7IHMmIzgyMTc7ZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsJiM4MjE3OyYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMS4gTGUgQ29udHJhdCBuJiM4MjE3O29ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZCYjODIxNzthc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkJiM4MjE3O3VuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkJiM4MjE3O3VuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuJiM4MjE3O2VuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIuIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuJiM4MjE3O2VuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1JiM4MjE3O2lsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGwmIzgyMTc7b2JqZXQgZCYjODIxNzt1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xLiBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGwmIzgyMTc7YXJ0aWNsZSA4LjIsIHNpIGxlIENvbmMmIzIzMztkYW50IG4mIzgyMTc7ZXgmIzIzMztjdXRlIHBhcyB0b3V0IG91IHBhcnRpZSBkZXMgb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXUmIzgyMTc7aWwgc3ViaXQgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIuIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OihpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsJiM4MjE3O2luZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbCYjODIxNzt1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGxvcnNxdSYjODIxNztpbCBzJiM4MjE3O2FnaXQgZCYjODIxNzt1biBwcm9mZXNzaW9ubmVsIHV0aWxpc2FudCBsZSBMb2dpY2llbCAmIzIyNDsgZGVzIGZpbnMgcHJvZmVzc2lvbm5lbGxlcyBldCAoaWlpKSBkZXMgZG9tbWFnZXMgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGwmIzgyMTc7dXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbC4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZCYjODIxNztleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbiYjODIxNztvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMS4gTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbCYjODIxNzsmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGQmIzgyMTc7ZW4gdGVzdGVyIGV0IGQmIzgyMTc7ZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGwmIzgyMTc7ZXhpc3RlbmNlIGQmIzgyMTc7JiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMJiM4MjE3O2F0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsJiM4MjE3O3V0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsJiM4MjE3O2FkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXUmIzgyMTc7aWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMi4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMy4gTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAmIzE3MTtlbiBsYCYjMjMzO3RhdCYjMTg3OyBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGwmIzgyMTc7YXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXUmIzgyMTc7aWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdSYjODIxNztpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsJiM4MjE3OyYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdSYjODIxNztpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQuIExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGQmIzgyMTc7dW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGwmIzgyMTc7dXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkJiM4MjE3O3VuIHByb3RvY29sZSBkJiM4MjE3O2FjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbCYjODIxNzt1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG4mIzgyMTc7ZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGwmIzgyMTc7ZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbCYjODIxNztleGlzdGVuY2UgZCYjODIxNzt1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMS4gRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIuIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuJiM4MjE3O2VzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXUmIzgyMTc7aWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdSYjODIxNztlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEuIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZCYjODIxNzt1biByZXRhcmQgb3UgZCYjODIxNzt1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkJiM4MjE3O2V4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsJiM4MjE3O2ludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsJiM4MjE3OyYjMjMzO3RhdCBkZSBndWVycmUmIzgyMzA7CisKKzExLjIuIExlIGZhaXQsIHBhciBsJiM4MjE3O3VuZSBvdSBsJiM4MjE3O2F1dHJlIGRlcyBQYXJ0aWVzLCBkJiM4MjE3O29tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZCYjODIxNzt1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgcyYjODIxNztlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zLiBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGwmIzgyMTc7YWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuJiM4MjE3O2F1cmEgZCYjODIxNztlZmZldCAmIzIyNDsgbCYjODIxNzsmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkJiM4MjE3OyYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40LiBEYW5zIGwmIzgyMTc7aHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzJiM4MjE3O2F2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkJiM4MjE3O3VuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbCYjODIxNztlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41LiBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLiBFbiBjYXMgZGUgZGl2ZXJnZW5jZSBkJiM4MjE3O2ludGVycHImIzIzMzt0YXRpb24sIHNldWxlIGxhIHZlcnNpb24gZnJhbiYjMjMxO2Fpc2UgZmFpdCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xLiBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMi4gQWZpbiBkJiM4MjE3O2VuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMyO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zLiBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUsIHNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMS4gTGUgQ29udHJhdCBlc3QgciYjMjMzO2dpIHBhciBsYSBsb2kgZnJhbiYjMjMxO2Fpc2UuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGRlIHRlbnRlciBkZSByJiMyMzM7Z2xlciAmIzIyNDsgbCYjODIxNzthbWlhYmxlIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBxdWkgdmllbmRyYWllbnQgJiMyMjQ7IHNlIHByb2R1aXJlIHBhciBzdWl0ZSBvdSAmIzIyNDsgbCYjODIxNztvY2Nhc2lvbiBkdSBDb250cmF0LgorCisxMy4yLiBBIGQmIzIzMztmYXV0IGQmIzgyMTc7YWNjb3JkIGFtaWFibGUgZGFucyB1biBkJiMyMzM7bGFpIGRlIGRldXggKDIpIG1vaXMgJiMyMjQ7IGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGQmIzgyMTc7dW5lIHByb2MmIzIzMztkdXJlIGQmIzgyMTc7dXJnZW5jZSwgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHNlcm9udCBwb3J0JiMyMzM7cyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXAmIzIzMzt0ZW50cyBkZSBQYXJpcy4KKworMSBDZTogQ0VBLCBDOiBDTlJTLCBJOiBJTlJJQSwgTEw6IExvZ2ljaWVsIExpYnJlCisKKworVmVyc2lvbiAxIGR1IDIxLzA2LzIwMDQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjMTRhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0yLjAKQEAgLTAsMCArMSwyNDMgQEAKKworQ09OVFJBVCBERSBMSUNFTkNFIERFIExPR0lDSUVMIExJQlJFIENlQ0lMTAorCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGRgdW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkYHVuZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLAorZGBhdXRyZSBwYXJ0LCBsYSBkJiMyMzM7c2lnbmF0aW9uIGRgdW4gZHJvaXQgYXBwbGljYWJsZSwgbGUgZHJvaXQgZnJhbiYjMjMxO2FpcywgYXVxdWVsIGVsbGUgZXN0IGNvbmZvcm1lLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1YGlsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBkdSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UgZGFucyBsZSBjYWRyZSBkYHVuIG1vZCYjMjMyO2xlIGRlIGRpZmZ1c2lvbiBlbiBsb2dpY2llbCBsaWJyZS4KKworTGBleGVyY2ljZSBkZSBjZXMgbGliZXJ0JiMyMzM7cyBlc3QgYXNzb3J0aSBkZSBjZXJ0YWlucyBkZXZvaXJzICYjMjI0OyBsYSBjaGFyZ2UgZGVzIHV0aWxpc2F0ZXVycyBhZmluIGRlIHByJiMyMzM7c2VydmVyIGNlIHN0YXR1dCBhdSBjb3VycyBkZXMgcmVkaXN0cmlidXRpb25zIHVsdCYjMjMzO3JpZXVyZXMuCisKK0xgYWNjZXNzaWJpbGl0JiMyMzM7IGF1IGNvZGUgc291cmNlIGV0IGxlcyBkcm9pdHMgZGUgY29waWUsIGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBxdWkgZW4gZCYjMjMzO2NvdWxlbnQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG5gb2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXVgdW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbGBhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXVgdW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsYGF0dGVudGlvbiBkZSBsYHV0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGxgdXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgb3UgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbGBhZCYjMjMzO3F1YXRpb24gZHUgbG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldC9vdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lcyBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGxgJiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHNgYXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsYGV4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1YGlsIGNvbnRpZW50LgorCitBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdWBpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGBhY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCAmIzIzMzt2ZW50dWVsbGVtZW50IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGxgYWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIGQmIzIzMzt0ZW50ZXVycyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkYGF1dGV1ciBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4KKworTGljZW5jaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cnMgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGRgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsIHBhciB0b3V0IENvbnRyaWJ1dGV1ciwgYWluc2kgcXVlIHRvdXQgTW9kdWxlIEludGVybmUuCisKK01vZHVsZTogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWkgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitNb2R1bGUgRXh0ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBub24gZCYjMjMzO3JpdiYjMjMzOyBkdSBMb2dpY2llbCwgdGVsIHF1ZSBjZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgc2BleCYjMjMzO2N1dGVudCBkYW5zIGRlcyBlc3BhY2VzIGRgYWRyZXNzYWdlIGRpZmYmIzIzMztyZW50cywgbGB1biBhcHBlbGFudCBsYGF1dHJlIGF1IG1vbWVudCBkZSBsZXVyIGV4JiMyMzM7Y3V0aW9uLgorCitNb2R1bGUgSW50ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlIGxpJiMyMzM7IGF1IExvZ2ljaWVsIGRlIHRlbGxlIHNvcnRlIHF1YGlscyBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgbGUgbSYjMjM0O21lIGVzcGFjZSBkYGFkcmVzc2FnZS4KKworR05VIEdQTDogZCYjMjMzO3NpZ25lIGxhIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRhbnMgc2EgdmVyc2lvbiAyIG91IHRvdXRlIHZlcnNpb24gdWx0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUgcHVibGkmIzIzMztlIHBhciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzYGVudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkYHVuZSBsaWNlbmNlIG5vbiBleGNsdXNpdmUsIGNlc3NpYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xIExgYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByJiMyMzM7cHV0JiMyMzM7ZSBhY3F1aXNlIGR1IGZhaXQgZHUgcHJlbWllciBkZXMgZmFpdHMgc3VpdmFudHM6CisKKyhpKSBsZSBjaGFyZ2VtZW50IGR1IExvZ2ljaWVsIHBhciB0b3V0IG1veWVuIG5vdGFtbWVudCBwYXIgdCYjMjMzO2wmIzIzMztjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzZXJ2ZXVyIGRpc3RhbnQgb3UgcGFyIGNoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHN1cHBvcnQgcGh5c2lxdWU7CisoaWkpIGxlIHByZW1pZXIgZXhlcmNpY2UgcGFyIGxlIExpY2VuY2kmIzIzMzsgZGUgbGB1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uYyYjMjMzO2QmIzIzMztzIHBhciBsZSBDb250cmF0LgorMy4yIFVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwgY29udGVuYW50IG5vdGFtbWVudCB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgYXV4IHNwJiMyMzM7Y2lmaWNpdCYjMjMzO3MgZHUgTG9naWNpZWwsICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCAmIzIyNDsgbGEgbGltaXRhdGlvbiAmIzIyNDsgdW4gdXNhZ2UgcGFyIGRlcyB1dGlsaXNhdGV1cnMgZXhwJiMyMzM7cmltZW50JiMyMzM7cyBhICYjMjMzO3QmIzIzMzsgbWlzICYjMjI0OyBkaXNwb3NpdGlvbiBkdSBMaWNlbmNpJiMyMzM7IHByJiMyMzM7YWxhYmxlbWVudCAmIzIyNDsgc29uIGFjY2VwdGF0aW9uIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgJiMyMjQ7IGxgYXJ0aWNsZSAzLjEgY2kgZGVzc3VzIGV0IGxlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgZW4gYXZvaXIgcHJpcyBjb25uYWlzc2FuY2UuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMSBFTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIgRFVSRUUKKworTGUgQ29udHJhdCBwcm9kdWlyYSBzZXMgZWZmZXRzIHBlbmRhbnQgdG91dGUgbGEgZHVyJiMyMzM7ZSBsJiMyMzM7Z2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLgorCitBcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVMKKworTGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzssIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXImIzIzMztlIGR1IENvbnRyYXQgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCitQYXIgYWlsbGV1cnMsIHNpIGxlIENvbmMmIzIzMztkYW50IGQmIzIzMzt0aWVudCBvdSB2ZW5haXQgJiMyMjQ7IGQmIzIzMzt0ZW5pciB1biBvdSBwbHVzaWV1cnMgYnJldmV0cyBkYGludmVudGlvbiBwcm90JiMyMzM7Z2VhbnQgdG91dCBvdSBwYXJ0aWUgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGR1IExvZ2ljaWVsIG91IGRlIHNlcyBjb21wb3NhbnRzLCBpbCBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIG9wcG9zZXIgbGVzICYjMjMzO3ZlbnR1ZWxzIGRyb2l0cyBjb25mJiMyMzM7ciYjMjMzO3MgcGFyIGNlcyBicmV2ZXRzIGF1eCBMaWNlbmNpJiMyMzM7cyBzdWNjZXNzaWZzIHF1aSB1dGlsaXNlcmFpZW50LCBleHBsb2l0ZXJhaWVudCBvdSBtb2RpZmllcmFpZW50IGxlIExvZ2ljaWVsLiBFbiBjYXMgZGUgY2Vzc2lvbiBkZSBjZXMgYnJldmV0cywgbGUgQ29uYyYjMjMzO2RhbnQgc2BlbmdhZ2UgJiMyMjQ7IGZhaXJlIHJlcHJlbmRyZSBsZXMgb2JsaWdhdGlvbnMgZHUgcHImIzIzMztzZW50IGFsaW4mIzIzMzthIGF1eCBjZXNzaW9ubmFpcmVzLgorCis1LjEgRFJPSVQgRGBVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZGBhcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGxgYWZmaWNoYWdlLCBsYGV4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGRgZW4gb2JzZXJ2ZXIsIGRgZW4gJiMyMzM7dHVkaWVyLCBvdSBkYGVuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbmBpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkYGFmZmljaGFnZSwgZGBleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1YGlsIGVzdCBlbiBkcm9pdCBkYGVmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIgRFJPSVQgRGBBUFBPUlRFUiBERVMgQ09OVFJJQlVUSU9OUworCitMZSBkcm9pdCBkYGFwcG9ydGVyIGRlcyBDb250cmlidXRpb25zIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkYGFkYXB0ZXIsIGRgYXJyYW5nZXIgb3UgZGBhcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBsb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgYXBwb3J0ZXIgdG91dGUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsIHNvdXMgciYjMjMzO3NlcnZlIGRlIG1lbnRpb25uZXIsIGRlIGZhJiMyMzE7b24gZXhwbGljaXRlLCBzb24gbm9tIGVuIHRhbnQgcXVgYXV0ZXVyIGRlIGNldHRlIENvbnRyaWJ1dGlvbiBldCBsYSBkYXRlIGRlIGNyJiMyMzM7YXRpb24gZGUgY2VsbGUtY2kuCisKKzUuMyBEUk9JVCBERSBESVNUUklCVVRJT04KKworTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGNvbXBvcnRlIG5vdGFtbWVudCBsZSBkcm9pdCBkZSBkaWZmdXNlciwgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2gmIzIzMzsgJiMyMjQ7IHRpdHJlIG9uJiMyMzM7cmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvYyYjMjMzO2QmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgY29uZm9ybWVzIGR1IExvZ2ljaWVsLCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkYGFjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgZW4gaW5kaXF1YW50IGxlcyBtb2RhbGl0JiMyMzM7cyBkYGFjYyYjMjMyO3MsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMiBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgTU9ESUZJRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIHImIzIzMztzdWx0YW50IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGxgaW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHNvdXMgZm9ybWUgZGUgY29kZSBzb3VyY2Ugb3UgZGUgY29kZSBvYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgY29kZSBvYmpldCBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkYGFjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IGNvZGUgc291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZGBhY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IGNvZGUgc291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjMgRElTVFJJQlVUSU9OIERFUyBNT0RVTEVTIEVYVEVSTkVTCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgbGVzIGNvbmRpdGlvbnMgZHUgQ29udHJhdCBuZSBzYGFwcGxpcXVlbnQgcGFzICYjMjI0OyBjZSBNb2R1bGUgRXh0ZXJuZSwgcXVpIHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGRpZmYmIzIzMztyZW50LgorCis1LjMuNCBDT01QQVRJQklMSVRFIEFWRUMgTEEgTElDRU5DRSBHTlUgR1BMCisKK0xlIExpY2VuY2kmIzIzMzsgcGV1dCBpbmNsdXJlIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGB1bmUgZGVzIHZlcnNpb25zIGRlIGxhIGxpY2VuY2UgR05VIEdQTCBkYW5zIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24gZXQgZGlzdHJpYnVlciBsYGVuc2VtYmxlIHNvdXMgbGVzIGNvbmRpdGlvbnMgZGUgbGEgbSYjMjM0O21lIHZlcnNpb24gZGUgbGEgbGljZW5jZSBHTlUgR1BMLgorCitMZSBMaWNlbmNpJiMyMzM7IHBldXQgaW5jbHVyZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uIGRhbnMgdW4gY29kZSBzb3VtaXMgYXV4IGRpc3Bvc2l0aW9ucyBkYHVuZSBkZXMgdmVyc2lvbnMgZGUgbGEgbGljZW5jZSBHTlUgR1BMIGV0IGRpc3RyaWJ1ZXIgbGBlbnNlbWJsZSBzb3VzIGxlcyBjb25kaXRpb25zIGRlIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGRlIGxhIGxpY2VuY2UgR05VIEdQTC4KKworQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFCisKKzYuMSBTVVIgTEUgTE9HSUNJRUwgSU5JVElBTAorCitMZSBUaXR1bGFpcmUgZXN0IGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLiBUb3V0ZSB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCBJbml0aWFsIGVzdCBzb3VtaXNlIGF1IHJlc3BlY3QgZGVzIGNvbmRpdGlvbnMgZGFucyBsZXNxdWVsbGVzIGxlIFRpdHVsYWlyZSBhIGNob2lzaSBkZSBkaWZmdXNlciBzb24gb2V1dnJlIGV0IG51bCBhdXRyZSBuYGEgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZSBsZSBMb2dpY2llbCBJbml0aWFsIHJlc3RlIGF1IG1vaW5zIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBldCBjZSwgcG91ciBsYSBkdXImIzIzMztlIHZpcyYjMjMzO2UgJiMyMjQ7IGxgYXJ0aWNsZSA0LjIuCisKKzYuMiBTVVIgTEVTIENPTlRSSUJVVElPTlMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuZSBDb250cmlidXRpb24gZXN0IHRpdHVsYWlyZSBzdXIgY2VsbGUtY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMgU1VSIExFUyBNT0RVTEVTIEVYVEVSTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRXh0ZXJuZSBlc3QgdGl0dWxhaXJlIHN1ciBjZWx1aS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24uCisKKzYuNCBESVNQT1NJVElPTlMgQ09NTVVORVMKKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsYGlkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24uCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBwb3J0ZXIgYXR0ZWludGUsIGRpcmVjdGVtZW50IG91IGluZGlyZWN0ZW1lbnQsIGF1eCBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgc3VyIGxlIExvZ2ljaWVsIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsYCYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMSBMZSBDb250cmF0IG5gb2JsaWdlIGVuIGF1Y3VuIGNhcyBsZSBDb25jJiMyMzM7ZGFudCAmIzIyNDsgbGEgciYjMjMzO2FsaXNhdGlvbiBkZSBwcmVzdGF0aW9ucyBkYGFzc2lzdGFuY2UgdGVjaG5pcXVlIG91IGRlIG1haW50ZW5hbmNlIGR1IExvZ2ljaWVsLgorCitDZXBlbmRhbnQgbGUgQ29uYyYjMjMzO2RhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGRgdW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGRgdW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkJiMyMzM7dGVybWluJiMyMzM7cyBkYW5zIHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOy4gQ2VzIGFjdGVzIGRlIG1haW50ZW5hbmNlIGV0L291IGFzc2lzdGFuY2UgdGVjaG5pcXVlIG5gZW5nYWdlcm9udCBxdWUgbGEgc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBxdWkgbGVzIHByb3Bvc2UuCisKKzcuMiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbmBlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdWBpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsYG9iamV0IGRgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMSBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA4LjIsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1YGlsIHN1YmlyYWl0IGR1IGZhaXQgZHUgTG9naWNpZWwgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIgTGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBlc3QgbGltaXQmIzIzMztlIGF1eCBlbmdhZ2VtZW50cyBwcmlzIGVuIGFwcGxpY2F0aW9uIGR1IENvbnRyYXQgZXQgbmUgc2F1cmFpdCAmIzIzNDt0cmUgZW5nYWcmIzIzMztlIGVuIHJhaXNvbiBub3RhbW1lbnQ6IChpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsYGluZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbGB1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGV0IChpaWkpIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCBkYHVuIHF1ZWxjb25xdWUgZG9tbWFnZSBpbmRpcmVjdC4gRW4gcGFydGljdWxpZXIsIGxlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGRgZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG5gb3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGAmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGRgZW4gdGVzdGVyIGV0IGRgZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGxgZXhpc3RlbmNlIGRgJiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMYGF0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsYGFkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXVgaWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Y2xhcmUgZGUgYm9ubmUgZm9pICYjMjM0O3RyZSBlbiBkcm9pdCBkZSBjb25jJiMyMzM7ZGVyIGxgZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2gmIzIzMztzIGF1IExvZ2ljaWVsIChjb21wcmVuYW50IG5vdGFtbWVudCBsZXMgZHJvaXRzIHZpcyYjMjMzO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1KS4KKworOS4zIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgImVuIGxgJiMyMzM7dGF0IiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGxgYXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXVgaWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdWBpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsYCYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdWBpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQgTGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzLCBkZSBtYW5pJiMyMzI7cmUgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgbGUgTG9naWNpZWwgbmUgcG9ydGUgcGFzIGF0dGVpbnRlICYjMjI0OyB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGB1biB0aWVycyBwb3J0YW50IHN1ciB1biBicmV2ZXQsIHVuIGxvZ2ljaWVsIG91IHN1ciB0b3V0IGF1dHJlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsuIEFpbnNpLCBsZSBDb25jJiMyMzM7ZGFudCBleGNsdXQgdG91dGUgZ2FyYW50aWUgYXUgcHJvZml0IGR1IExpY2VuY2kmIzIzMzsgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhJiMyMzE7b24gcXVpIHBvdXJyYWllbnQgJiMyMzQ7dHJlIGRpbGlnZW50JiMyMzM7ZXMgYXUgdGl0cmUgZGUgbGB1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTiYjMjMzO2FubW9pbnMsIHNpIGRlIHRlbGxlcyBhY3Rpb25zIHNvbnQgZXhlcmMmIzIzMztlcyBjb250cmUgbGUgTGljZW5jaSYjMjMzOywgbGUgQ29uYyYjMjMzO2RhbnQgbHVpIGFwcG9ydGVyYSBzb24gYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIHBvdXIgc2EgZCYjMjMzO2ZlbnNlLiBDZXR0ZSBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgZXN0IGQmIzIzMzt0ZXJtaW4mIzIzMztlIGF1IGNhcyBwYXIgY2FzIGVudHJlIGxlIENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzsgZXQgbGUgTGljZW5jaSYjMjMzOyBkYW5zIGxlIGNhZHJlIGRgdW4gcHJvdG9jb2xlIGRgYWNjb3JkLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Z2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0JiMyMzM7IHF1YW50ICYjMjI0OyBsYHV0aWxpc2F0aW9uIGRlIGxhIGQmIzIzMztub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpJiMyMzM7LiBBdWN1bmUgZ2FyYW50aWUgbmBlc3QgYXBwb3J0JiMyMzM7ZSBxdWFudCAmIzIyNDsgbGBleGlzdGVuY2UgZGUgZHJvaXRzIGFudCYjMjMzO3JpZXVycyBzdXIgbGUgbm9tIGR1IExvZ2ljaWVsIGV0IHN1ciBsYGV4aXN0ZW5jZSBkYHVuZSBtYXJxdWUuCisKK0FydGljbGUgMTAgLSBSRVNJTElBVElPTgorCisxMC4xIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuYGVzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXVgaWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdWBlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEgQ0FVU0UgRVhURVJJRVVSRQorCitBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkYHVuIHJldGFyZCBvdSBkYHVuZSBkJiMyMzM7ZmFpbGxhbmNlIGRgZXgmIzIzMztjdXRpb24gZHUgQ29udHJhdCBxdWkgc2VyYWl0IGQmIzI1MTsgJiMyMjQ7IHVuIGNhcyBkZSBmb3JjZSBtYWpldXJlLCB1biBjYXMgZm9ydHVpdCBvdSB1bmUgY2F1c2UgZXh0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUsIG5vdGFtbWVudCwgbGUgbWF1dmFpcyBmb25jdGlvbm5lbWVudCBvdSBsZXMgaW50ZXJydXB0aW9ucyBkdSByJiMyMzM7c2VhdSAmIzIzMztsZWN0cmlxdWUgb3UgZGUgdCYjMjMzO2wmIzIzMztjb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgciYjMjMzO3NlYXUgbGkmIzIzMztlICYjMjI0OyB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGxgaW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0JiMyMzM7cyBnb3V2ZXJuZW1lbnRhbGVzLCBsZXMgY2F0YXN0cm9waGVzIG5hdHVyZWxsZXMsIGxlcyBkJiMyMzM7ZyYjMjI2O3RzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3ImIzIzMjt2ZXMgZXQgbGVzIGNvbmZsaXRzIHNvY2lhdXgsIGxgJiMyMzM7dGF0IGRlIGd1ZXJyZS4uLgorCisxMS4yIExlIGZhaXQsIHBhciBsYHVuZSBvdSBsYGF1dHJlIGRlcyBQYXJ0aWVzLCBkYG9tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZGB1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgc2BlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50JiMyMzM7cmlldXJlLCAmIzIzMztjcml0ZSBvdSBvcmFsZSwgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGxlIG0mIzIzNDttZSBvYmpldCBldCBjb25zdGl0dWUgbGBhY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG5gYXVyYSBkYGVmZmV0ICYjMjI0OyBsYCYjMjMzO2dhcmQgZGVzIFBhcnRpZXMgJiMyMjQ7IG1vaW5zIGRgJiMyMzQ7dHJlIGZhaXRlIHBhciAmIzIzMztjcml0IGV0IHNpZ24mIzIzMztlIHBhciBsZXVycyByZXByJiMyMzM7c2VudGFudHMgZCYjMjUxO21lbnQgaGFiaWxpdCYjMjMzO3MuCisKKzExLjQgRGFucyBsYGh5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgc2BhdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZGB1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGxgZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNSBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLCBjZXMgZGV1eCB2ZXJzaW9ucyBmYWlzYW50ICYjMjMzO2dhbGVtZW50IGZvaS4KKworQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUCisKKzEyLjEgVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIgQWZpbiBkYGVuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMzO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zIFRvdXQgTG9naWNpZWwgZGlmZnVzJiMyMzM7IHNvdXMgdW5lIHZlcnNpb24gZG9ubiYjMjMzO2UgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbGBvYmpldCBkYHVuZSBkaWZmdXNpb24gdWx0JiMyMzM7cmlldXJlIHF1ZSBzb3VzIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGR1IENvbnRyYXQgb3UgdW5lIHZlcnNpb24gcG9zdCYjMjMzO3JpZXVyZSwgc291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgNS4zLjQuCisKK0FydGljbGUgMTMgLSBMT0kgQVBQTElDQUJMRSBFVCBDT01QRVRFTkNFIFRFUlJJVE9SSUFMRQorCisxMy4xIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGxgYW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGxgb2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMiBBIGQmIzIzMztmYXV0IGRgYWNjb3JkIGFtaWFibGUgZGFucyB1biBkJiMyMzM7bGFpIGRlIGRldXggKDIpIG1vaXMgJiMyMjQ7IGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGRgdW5lIHByb2MmIzIzMztkdXJlIGRgdXJnZW5jZSwgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHNlcm9udCBwb3J0JiMyMzM7cyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXAmIzIzMzt0ZW50cyBkZSBQYXJpcy4KKworMSBDZUNJTEwgZXN0IHBvdXIgQ2UoYSkgQyhucnMpIEkobnJpYSkgTChvZ2ljaWVsKSBMKGlicmUpCisKK1ZlcnNpb24gMi4wIGR1IDIwMDYtMDktMDUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1CIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1CCkBAIC0wLDAgKzEsMjQ3IEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwtQgorCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGRgdW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkYHVuZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLAorZGBhdXRyZSBwYXJ0LCBsYSBkJiMyMzM7c2lnbmF0aW9uIGRgdW4gZHJvaXQgYXBwbGljYWJsZSwgbGUgZHJvaXQgZnJhbiYjMjMxO2FpcywgYXVxdWVsIGVsbGUgZXN0IGNvbmZvcm1lLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1YGlsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwtQjEgc29udDoKKworQ29tbWlzc2FyaWF0ICYjMjI0OyBsYEVuZXJnaWUgQXRvbWlxdWUgLSBDRUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgZGUgcmVjaGVyY2hlICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUsIHRlY2huaXF1ZSBldCBpbmR1c3RyaWVsLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMjUgcnVlIExlYmxhbmMsIGltbWV1YmxlIExlIFBvbmFudCBELCA3NTAxNSBQYXJpcy4KKworQ2VudHJlIE5hdGlvbmFsIGRlIGxhIFJlY2hlcmNoZSBTY2llbnRpZmlxdWUgLSBDTlJTLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMgcnVlIE1pY2hlbC1BbmdlLCA3NTc5NCBQYXJpcyBjZWRleCAxNi4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAtIElOUklBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LgorCitQciYjMjMzO2FtYnVsZQorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBkb250IGxgb2JqZWN0aWYgZXN0IGRlIGNvbmYmIzIzMztyZXIgYXV4IHV0aWxpc2F0ZXVycyB1bmUgdHImIzIzMjtzIGxhcmdlIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlLgorCitMYGV4ZXJjaWNlIGRlIGNldHRlIGxpYmVydCYjMjMzOyBlc3QgYXNzb3J0aSBkYHVuZSBvYmxpZ2F0aW9uIGZvcnRlIGRlIGNpdGF0aW9uICYjMjI0OyBsYSBjaGFyZ2UgZGUgY2V1eCBxdWkgZGlzdHJpYnVlcmFpZW50IHVuIGxvZ2ljaWVsIGluY29ycG9yYW50IHVuIGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgbGEgcHImIzIzMztzZW50ZSBsaWNlbmNlIGFmaW4gZGBhc3N1cmVyIHF1ZSBsZXMgY29udHJpYnV0aW9ucyBkZSB0b3VzIHNvaWVudCBjb3JyZWN0ZW1lbnQgaWRlbnRpZmkmIzIzMztlcyBldCByZWNvbm51ZXMuCisKK0xgYWNjZXNzaWJpbGl0JiMyMzM7IGF1IGNvZGUgc291cmNlIGV0IGxlcyBkcm9pdHMgZGUgY29waWUsIGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBxdWkgZCYjMjMzO2NvdWxlbnQgZGUgY2UgY29udHJhdCBvbnQgcG91ciBjb250cmVwYXJ0aWUgZGUgbmBvZmZyaXIgYXV4IHV0aWxpc2F0ZXVycyBxdWB1bmUgZ2FyYW50aWUgbGltaXQmIzIzMztlIGV0IGRlIG5lIGZhaXJlIHBlc2VyIHN1ciBsYGF1dGV1ciBkdSBsb2dpY2llbCwgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGV0IGxlcyBjb25jJiMyMzM7ZGFudHMgc3VjY2Vzc2lmcyBxdWB1bmUgcmVzcG9uc2FiaWxpdCYjMjMzOyByZXN0cmVpbnRlLgorCitBIGNldCAmIzIzMztnYXJkIGxgYXR0ZW50aW9uIGRlIGxgdXRpbGlzYXRldXIgZXN0IGF0dGlyJiMyMzM7ZSBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgJiMyMjQ7IGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBsb2dpY2llbCBwYXIgbGB1dGlsaXNhdGV1ciAmIzIzMzt0YW50IGRvbm4mIzIzMzsgc2Egc3AmIzIzMztjaWZpY2l0JiMyMzM7IGRlIGxvZ2ljaWVsIGxpYnJlLCBxdWkgcGV1dCBsZSByZW5kcmUgY29tcGxleGUgJiMyMjQ7IG1hbmlwdWxlciBldCBxdWkgbGUgciYjMjMzO3NlcnZlIGRvbmMgJiMyMjQ7IGRlcyBkJiMyMzM7dmVsb3BwZXVycyBvdSBkZXMgcHJvZmVzc2lvbm5lbHMgYXZlcnRpcyBwb3NzJiMyMzM7ZGFudCBkZXMgY29ubmFpc3NhbmNlcyBpbmZvcm1hdGlxdWVzIGFwcHJvZm9uZGllcy4gTGVzIHV0aWxpc2F0ZXVycyBzb250IGRvbmMgaW52aXQmIzIzMztzICYjMjI0OyBjaGFyZ2VyIGV0IHRlc3RlciBsYGFkJiMyMzM7cXVhdGlvbiBkdSBsb2dpY2llbCAmIzIyNDsgbGV1cnMgYmVzb2lucyBkYW5zIGRlcyBjb25kaXRpb25zIHBlcm1ldHRhbnQgZGBhc3N1cmVyIGxhIHMmIzIzMztjdXJpdCYjMjMzOyBkZSBsZXVycyBzeXN0JiMyMzI7bWVzIGV0L291IGRlIGxldXJzIGRvbm4mIzIzMztlcyBldCwgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50LCAmIzIyNDsgbGB1dGlsaXNlciBldCBsYGV4cGxvaXRlciBkYW5zIGxlcyBtJiMyMzQ7bWVzIGNvbmRpdGlvbnMgZGUgcyYjMjMzO2N1cml0JiMyMzM7LiBDZSBjb250cmF0IHBldXQgJiMyMzQ7dHJlIHJlcHJvZHVpdCBldCBkaWZmdXMmIzIzMzsgbGlicmVtZW50LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBsZSBjb25zZXJ2ZXIgZW4gbGAmIzIzMzt0YXQsIHNhbnMgYWpvdXQgbmkgc3VwcHJlc3Npb24gZGUgY2xhdXNlcy4KKworQ2UgY29udHJhdCBlc3Qgc3VzY2VwdGlibGUgZGUgc2BhcHBsaXF1ZXIgJiMyMjQ7IHRvdXQgbG9naWNpZWwgZG9udCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjMjMzO2NpZGUgZGUgc291bWV0dHJlIGxgZXhwbG9pdGF0aW9uIGF1eCBkaXNwb3NpdGlvbnMgcXVgaWwgY29udGllbnQuCisKK0FydGljbGUgMSAtIERFRklOSVRJT05TCisKK0RhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1YGlscyBzZXJvbnQgJiMyMzM7Y3JpdHMgYXZlYyB1bmUgbGV0dHJlIGNhcGl0YWxlLCBhdXJvbnQgbGEgc2lnbmlmaWNhdGlvbiBzdWl2YW50ZToKKworQ29udHJhdDogZCYjMjMzO3NpZ25lIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyAmIzIzMzt2ZW50dWVsbGVzIHZlcnNpb25zIHBvc3QmIzIzMztyaWV1cmVzIGV0IGFubmV4ZXMuCisKK0xvZ2ljaWVsOiBkJiMyMzM7c2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsYGFjY2VwdGF0aW9uIGR1IENvbnRyYXQgcGFyIGxlIExpY2VuY2kmIzIzMzsuCisKK0xvZ2ljaWVsIEluaXRpYWw6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgU291cmNlIGV0ICYjMjMzO3ZlbnR1ZWxsZW1lbnQgZGUgQ29kZSBPYmpldCBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGV1ciBwcmVtaSYjMjMyO3JlIGRpZmZ1c2lvbiBzb3VzIGxlcyB0ZXJtZXMgZHUgQ29udHJhdC4KKworTG9naWNpZWwgTW9kaWZpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IHBhciBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbGBhY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmU6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgZCYjMjMzO3RlbnRldXJzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGRgYXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVycyBkdSBMb2dpY2llbCBheWFudCBhY2NlcHQmIzIzMzsgbGUgQ29udHJhdC4KKworQ29udHJpYnV0ZXVyOiBkJiMyMzM7c2lnbmUgbGUgTGljZW5jaSYjMjMzOyBhdXRldXIgZGBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb25jJiMyMzM7ZGFudDogZCYjMjMzO3NpZ25lIGxlIFRpdHVsYWlyZSBvdSB0b3V0ZSBwZXJzb25uZSBwaHlzaXF1ZSBvdSBtb3JhbGUgZGlzdHJpYnVhbnQgbGUgTG9naWNpZWwgc291cyBsZSBDb250cmF0LgorCitDb250cmlidXRpb246IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhZHVjdGlvbnMsIGFkYXB0YXRpb25zIGV0L291IG5vdXZlbGxlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBpbnQmIzIzMztnciYjMjMzO2VzIGRhbnMgbGUgTG9naWNpZWwgcGFyIHRvdXQgQ29udHJpYnV0ZXVyLCBhaW5zaSBxdWUgdG91dCBNb2R1bGUgSW50ZXJuZS4KKworTW9kdWxlOiBkJiMyMzM7c2lnbmUgdW4gZW5zZW1ibGUgZGUgZmljaGllcnMgc291cmNlcyB5IGNvbXByaXMgbGV1ciBkb2N1bWVudGF0aW9uIHF1aSBwZXJtZXQgZGUgciYjMjMzO2FsaXNlciBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3Mgb3Ugc2VydmljZXMgc3VwcGwmIzIzMzttZW50YWlyZXMgJiMyMjQ7IGNldXggZm91cm5pcyBwYXIgbGUgTG9naWNpZWwuCisKK01vZHVsZSBFeHRlcm5lOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUsIG5vbiBkJiMyMzM7cml2JiMyMzM7IGR1IExvZ2ljaWVsLCB0ZWwgcXVlIGNlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgZGVzIGVzcGFjZXMgZGBhZHJlc3NhZ2UgZGlmZiYjMjMzO3JlbnRzLCBsYHVuIGFwcGVsYW50IGxgYXV0cmUgYXUgbW9tZW50IGRlIGxldXIgZXgmIzIzMztjdXRpb24uCisKK01vZHVsZSBJbnRlcm5lOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUgbGkmIzIzMzsgYXUgTG9naWNpZWwgZGUgdGVsbGUgc29ydGUgcXVgaWxzIHNgZXgmIzIzMztjdXRlbnQgZGFucyBsZSBtJiMyMzQ7bWUgZXNwYWNlIGRgYWRyZXNzYWdlLgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzYGVudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkYHVuZSBsaWNlbmNlIG5vbiBleGNsdXNpdmUsIGNlc3NpYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xIExgYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByJiMyMzM7cHV0JiMyMzM7ZSBhY3F1aXNlIGR1IGZhaXQgZHUgcHJlbWllciBkZXMgZmFpdHMgc3VpdmFudHM6CisKKyhpKSBsZSBjaGFyZ2VtZW50IGR1IExvZ2ljaWVsIHBhciB0b3V0IG1veWVuIG5vdGFtbWVudCBwYXIgdCYjMjMzO2wmIzIzMztjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzZXJ2ZXVyIGRpc3RhbnQgb3UgcGFyIGNoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHN1cHBvcnQgcGh5c2lxdWU7CisoaWkpIGxlIHByZW1pZXIgZXhlcmNpY2UgcGFyIGxlIExpY2VuY2kmIzIzMzsgZGUgbGB1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uYyYjMjMzO2QmIzIzMztzIHBhciBsZSBDb250cmF0LgorMy4yIFVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwgY29udGVuYW50IG5vdGFtbWVudCB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgYXV4IHNwJiMyMzM7Y2lmaWNpdCYjMjMzO3MgZHUgTG9naWNpZWwsICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCAmIzIyNDsgbGEgbGltaXRhdGlvbiAmIzIyNDsgdW4gdXNhZ2UgcGFyIGRlcyB1dGlsaXNhdGV1cnMgZXhwJiMyMzM7cmltZW50JiMyMzM7cyBhICYjMjMzO3QmIzIzMzsgbWlzICYjMjI0OyBkaXNwb3NpdGlvbiBkdSBMaWNlbmNpJiMyMzM7IHByJiMyMzM7YWxhYmxlbWVudCAmIzIyNDsgc29uIGFjY2VwdGF0aW9uIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgJiMyMjQ7IGxgYXJ0aWNsZSAzLjEgY2kgZGVzc3VzIGV0IGxlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgZW4gYXZvaXIgcHJpcyBjb25uYWlzc2FuY2UuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMSBFTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIgRFVSRUUKKworTGUgQ29udHJhdCBwcm9kdWlyYSBzZXMgZWZmZXRzIHBlbmRhbnQgdG91dGUgbGEgZHVyJiMyMzM7ZSBsJiMyMzM7Z2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLgorCitBcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVMKKworTGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzssIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXImIzIzMztlIGR1IENvbnRyYXQgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCitQYXIgYWlsbGV1cnMsIHNpIGxlIENvbmMmIzIzMztkYW50IGQmIzIzMzt0aWVudCBvdSB2ZW5haXQgJiMyMjQ7IGQmIzIzMzt0ZW5pciB1biBvdSBwbHVzaWV1cnMgYnJldmV0cyBkYGludmVudGlvbiBwcm90JiMyMzM7Z2VhbnQgdG91dCBvdSBwYXJ0aWUgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGR1IExvZ2ljaWVsIG91IGRlIHNlcyBjb21wb3NhbnRzLCBpbCBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIG9wcG9zZXIgbGVzICYjMjMzO3ZlbnR1ZWxzIGRyb2l0cyBjb25mJiMyMzM7ciYjMjMzO3MgcGFyIGNlcyBicmV2ZXRzIGF1eCBMaWNlbmNpJiMyMzM7cyBzdWNjZXNzaWZzIHF1aSB1dGlsaXNlcmFpZW50LCBleHBsb2l0ZXJhaWVudCBvdSBtb2RpZmllcmFpZW50IGxlIExvZ2ljaWVsLiBFbiBjYXMgZGUgY2Vzc2lvbiBkZSBjZXMgYnJldmV0cywgbGUgQ29uYyYjMjMzO2RhbnQgc2BlbmdhZ2UgJiMyMjQ7IGZhaXJlIHJlcHJlbmRyZSBsZXMgb2JsaWdhdGlvbnMgZHUgcHImIzIzMztzZW50IGFsaW4mIzIzMzthIGF1eCBjZXNzaW9ubmFpcmVzLgorCis1LjEgRFJPSVQgRGBVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZGBhcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGxgYWZmaWNoYWdlLCBsYGV4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGRgZW4gb2JzZXJ2ZXIsIGRgZW4gJiMyMzM7dHVkaWVyLCBvdSBkYGVuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbmBpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkYGFmZmljaGFnZSwgZGBleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1YGlsIGVzdCBlbiBkcm9pdCBkYGVmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIgRFJPSVQgRGBBUFBPUlRFUiBERVMgQ09OVFJJQlVUSU9OUworCitMZSBkcm9pdCBkYGFwcG9ydGVyIGRlcyBDb250cmlidXRpb25zIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkYGFkYXB0ZXIsIGRgYXJyYW5nZXIgb3UgZGBhcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBsb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgYXBwb3J0ZXIgdG91dGUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsIHNvdXMgciYjMjMzO3NlcnZlIGRlIG1lbnRpb25uZXIsIGRlIGZhJiMyMzE7b24gZXhwbGljaXRlLCBzb24gbm9tIGVuIHRhbnQgcXVgYXV0ZXVyIGRlIGNldHRlIENvbnRyaWJ1dGlvbiBldCBsYSBkYXRlIGRlIGNyJiMyMzM7YXRpb24gZGUgY2VsbGUtY2kuCisKKzUuMyBEUk9JVCBERSBESVNUUklCVVRJT04KKworTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGNvbXBvcnRlIG5vdGFtbWVudCBsZSBkcm9pdCBkZSBkaWZmdXNlciwgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2gmIzIzMzsgJiMyMjQ7IHRpdHJlIG9uJiMyMzM7cmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvYyYjMjMzO2QmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgY29uZm9ybWVzIGR1IExvZ2ljaWVsLCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgdW4gYWNjJiMyMzI7cyBlZmZlY3RpZiBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBzYSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMiBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgTU9ESUZJRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsLCBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgYXV0cmUgcXVlIGxlIHByJiMyMzM7c2VudCBDb250cmF0IHNvdXMgciYjMjMzO3NlcnZlIGR1IHJlc3BlY3QgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgNS4zLjQuCisKKzUuMy4zIERJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBFWFRFUk5FUworCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgbmUgc2BhcHBsaXF1ZW50IHBhcyAmIzIyNDsgY2UgTW9kdWxlIEV4dGVybmUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQgQ0lUQVRJT05TCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGRpc3RyaWJ1ZSB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBpbmRpcXVlciBkYW5zIHNhIGRvY3VtZW50YXRpb24gcXVgaWwgYSAmIzIzMzt0JiMyMzM7IHImIzIzMzthbGlzJiMyMzM7ICYjMjI0OyBwYXJ0aXIgZHUgTG9naWNpZWwgciYjMjMzO2dpIHBhciBsZSBDb250cmF0LCBlbiByZXByb2R1aXNhbnQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgTG9naWNpZWwsCisKKyYjMjI0OyBmYWlyZSBlbiBzb3J0ZSBxdWUgbGB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCwgc2VzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgbGUgZmFpdCBxdWBpbCBlc3QgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IHNvaWVudCBpbmRpcXUmIzIzMztzIGRhbnMgdW4gdGV4dGUgZmFjaWxlbWVudCBhY2Nlc3NpYmxlIGRlcHVpcyBsYGludGVyZmFjZSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzssCisKKyYjMjI0OyBtZW50aW9ubmVyLCBzdXIgdW4gc2l0ZSBXZWIgbGlicmVtZW50IGFjY2Vzc2libGUgZCYjMjMzO2NyaXZhbnQgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBldCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uLCBxdWBpbCBhICYjMjMzO3QmIzIzMzsgciYjMjMzO2FsaXMmIzIzMzsgJiMyMjQ7IHBhcnRpciBkdSBMb2dpY2llbCByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQsIGVuIHJlcHJvZHVpc2FudCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBMb2dpY2llbCwKKworbG9yc3F1YGlsIGxlIGRpc3RyaWJ1ZSAmIzIyNDsgdW4gdGllcnMgc3VzY2VwdGlibGUgZGUgZGlzdHJpYnVlciBsdWktbSYjMjM0O21lIHVuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgc2FucyBhdm9pciAmIzIyNDsgZW4gZGlzdHJpYnVlciBsZSBjb2RlIHNvdXJjZSwgJiMyMjQ7IGZhaXJlIHNlcyBtZWlsbGV1cnMgZWZmb3J0cyBwb3VyIHF1ZSBsZXMgb2JsaWdhdGlvbnMgZHUgcHImIzIzMztzZW50IGFydGljbGUgNS4zLjQgc29pZW50IHJlcHJpc2VzIHBhciBsZSBkaXQgdGllcnMuCisKK0xvcnNxdWUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbiBlc3QgZGlzdHJpYnUmIzIzMzsgYXZlYyB1biBNb2R1bGUgRXh0ZXJuZSBxdWkgYSAmIzIzMzt0JiMyMzM7IGNvbiYjMjMxO3UgcG91ciBsYHV0aWxpc2VyLCBsZSBMaWNlbmNpJiMyMzM7IGRvaXQgc291bWV0dHJlIGxlIGRpdCBNb2R1bGUgRXh0ZXJuZSBhdXggb2JsaWdhdGlvbnMgcHImIzIzMztjJiMyMzM7ZGVudGVzLgorCis1LjMuNSBDT01QQVRJQklMSVRFIEFWRUMgTEVTIExJQ0VOQ0VTIENlQ0lMTCBldCBDZUNJTEwtQworCitMb3JzcXVgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvbnRpZW50IHVuZSBDb250cmlidXRpb24gc291bWlzZSBhdSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLCBsZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyAmIzIyNDsgbGBhcnRpY2xlIDUuMy40IHNvbnQgZmFjdWx0YXRpdmVzLgorCitVbiBMb2dpY2llbCBNb2RpZmkmIzIzMzsgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyBsZSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLUMuIExlcyBzdGlwdWxhdGlvbnMgcHImIzIzMzt2dWVzICYjMjI0OyBsYGFydGljbGUgNS4zLjQgc29udCBhbG9ycyBmYWN1bHRhdGl2ZXMuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1bmUgQ29udHJpYnV0aW9uIGVzdCB0aXR1bGFpcmUgc3VyIGNlbGxlLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZS4KKworNi4zIFNVUiBMRVMgTU9EVUxFUyBFWFRFUk5FUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgZXN0IHRpdHVsYWlyZSBzdXIgY2VsdWktY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQgRElTUE9TSVRJT05TIENPTU1VTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uLgorCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIHN1ciBsZSBMb2dpY2llbCBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEgTGUgQ29udHJhdCBuYG9ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZGBhc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkYHVuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkYHVuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuYGVuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIgRGUgbSYjMjM0O21lLCB0b3V0IENvbmMmIzIzMztkYW50IGVzdCBsaWJyZSBkZSBwcm9wb3Nlciwgc291cyBzYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7LCAmIzIyNDsgc2VzIGxpY2VuY2kmIzIzMztzIHVuZSBnYXJhbnRpZSwgcXVpIG5gZW5nYWdlcmEgcXVlIGx1aSwgbG9ycyBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBldC9vdSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXVgaWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0JiMyMzM7cyBmaW5hbmNpJiMyMzI7cmVzIGRlIHNvbiBhcHBsaWNhdGlvbiBmZXJvbnQgbGBvYmpldCBkYHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBldCBsZSBMaWNlbmNpJiMyMzM7LgorCitBcnRpY2xlIDggLSBSRVNQT05TQUJJTElURQorCis4LjEgU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgOC4yLCBsZSBMaWNlbmNpJiMyMzM7IGEgbGEgZmFjdWx0JiMyMzM7LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBwcm91dmVyIGxhIGZhdXRlIGR1IENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzssIGRlIHNvbGxpY2l0ZXIgbGEgciYjMjMzO3BhcmF0aW9uIGR1IHByJiMyMzM7anVkaWNlIGRpcmVjdCBxdWBpbCBzdWJpcmFpdCBkdSBmYWl0IGR1IExvZ2ljaWVsIGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OiAoaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbGBpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGxgdXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBldCAoaWlpKSBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQgZGB1biBxdWVsY29ucXVlIGRvbW1hZ2UgaW5kaXJlY3QuIEVuIHBhcnRpY3VsaWVyLCBsZXMgUGFydGllcyBjb252aWVubmVudCBleHByZXNzJiMyMzM7bWVudCBxdWUgdG91dCBwciYjMjMzO2p1ZGljZSBmaW5hbmNpZXIgb3UgY29tbWVyY2lhbCAocGFyIGV4ZW1wbGUgcGVydGUgZGUgZG9ubiYjMjMzO2VzLCBwZXJ0ZSBkZSBiJiMyMzM7biYjMjMzO2ZpY2VzLCBwZXJ0ZSBkYGV4cGxvaXRhdGlvbiwgcGVydGUgZGUgY2xpZW50JiMyMzI7bGUgb3UgZGUgY29tbWFuZGVzLCBtYW5xdWUgJiMyMjQ7IGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZyYjMjMzO2UgY29udHJlIGxlIExpY2VuY2kmIzIzMzsgcGFyIHVuIHRpZXJzLCBjb25zdGl0dWUgdW4gZG9tbWFnZSBpbmRpcmVjdCBldCBuYG91dnJlIHBhcyBkcm9pdCAmIzIyNDsgciYjMjMzO3BhcmF0aW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudC4KKworQXJ0aWNsZSA5IC0gR0FSQU5USUUKKworOS4xIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxgJiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkYGVuIHRlc3RlciBldCBkYGVuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsYGV4aXN0ZW5jZSBkYCYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTGBhdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbGBhZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1YGlsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIgTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMyBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsZSBMb2dpY2llbCBlc3QgZm91cm5pICJlbiBsYCYjMjMzO3RhdCIgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsYGFydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1YGlsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXVgaWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbGAmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXVgaWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40IExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRgdW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGxgdXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkYHVuIHByb3RvY29sZSBkYGFjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbGB1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG5gZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGxgZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbGBleGlzdGVuY2UgZGB1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMSBFbiBjYXMgZGUgbWFucXVlbWVudCBwYXIgbGUgTGljZW5jaSYjMjMzOyBhdXggb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uYyYjMjMzO2RhbnQgcG91cnJhIHImIzIzMztzaWxpZXIgZGUgcGxlaW4gZHJvaXQgbGUgQ29udHJhdCB0cmVudGUgKDMwKSBqb3VycyBhcHImIzIzMjtzIG5vdGlmaWNhdGlvbiBhZHJlc3MmIzIzMztlIGF1IExpY2VuY2kmIzIzMzsgZXQgcmVzdCYjMjMzO2Ugc2FucyBlZmZldC4KKworMTAuMiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbmBlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1YGlsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXVgZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZGB1biByZXRhcmQgb3UgZGB1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkYGV4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsYGludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsYCYjMjMzO3RhdCBkZSBndWVycmUuLi4KKworMTEuMiBMZSBmYWl0LCBwYXIgbGB1bmUgb3UgbGBhdXRyZSBkZXMgUGFydGllcywgZGBvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGRgdW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHNgZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMyBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGxgYWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuYGF1cmEgZGBlZmZldCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkYCYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40IERhbnMgbGBoeXBvdGgmIzIzMjtzZSBvJiMyNDk7IHVuZSBvdSBwbHVzaWV1cnMgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IHNgYXYmIzIzMjtyZXJhaXQgY29udHJhaXJlICYjMjI0OyB1bmUgbG9pIG91ICYjMjI0OyB1biB0ZXh0ZSBhcHBsaWNhYmxlLCBleGlzdGFudHMgb3UgZnV0dXJzLCBjZXR0ZSBsb2kgb3UgY2UgdGV4dGUgcHImIzIzMzt2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBzZSBjb25mb3JtZXIgJiMyMjQ7IGNldHRlIGxvaSBvdSAmIzIyNDsgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbSYjMjM0O21lLCBsYSBudWxsaXQmIzIzMzssIHBvdXIgcXVlbHF1ZSByYWlzb24gcXVlIGNlIHNvaXQsIGRgdW5lIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBuZSBzYXVyYWl0IGVudHJhJiMyMzg7bmVyIGxhIG51bGxpdCYjMjMzOyBkZSBsYGVuc2VtYmxlIGR1IENvbnRyYXQuCisKKzExLjUgTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZSwgY2VzIGRldXggdmVyc2lvbnMgZmFpc2FudCAmIzIzMztnYWxlbWVudCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzJiMyMzM7ZSAmIzIyNDsgY29waWVyIGV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkZSBjZSBDb250cmF0LgorCisxMi4yIEFmaW4gZGBlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMztkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMyBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUuCisKK0FydGljbGUgMTMgLSBMT0kgQVBQTElDQUJMRSBFVCBDT01QRVRFTkNFIFRFUlJJVE9SSUFMRQorCisxMy4xIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGxgYW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGxgb2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMiBBIGQmIzIzMztmYXV0IGRgYWNjb3JkIGFtaWFibGUgZGFucyB1biBkJiMyMzM7bGFpIGRlIGRldXggKDIpIG1vaXMgJiMyMjQ7IGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGRgdW5lIHByb2MmIzIzMztkdXJlIGRgdXJnZW5jZSwgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHNlcm9udCBwb3J0JiMyMzM7cyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXAmIzIzMzt0ZW50cyBkZSBQYXJpcy4KKworMSBDZUNJTEwgZXN0IHBvdXIgQ2UoYSkgQyhucnMpIEkobnJpYSkgTChvZ2ljaWVsKSBMKGlicmUpCisKK1ZlcnNpb24gMS4wIGR1IDIwMDYtMDktMDUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1DIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZWY4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1DCkBAIC0wLDAgKzEsMjQxIEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwtQworCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGRgdW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkYHVuZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLAorZGBhdXRyZSBwYXJ0LCBsYSBkJiMyMzM7c2lnbmF0aW9uIGRgdW4gZHJvaXQgYXBwbGljYWJsZSwgbGUgZHJvaXQgZnJhbiYjMjMxO2FpcywgYXVxdWVsIGVsbGUgZXN0IGNvbmZvcm1lLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1YGlsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwtQzEgc29udDoKKworQ29tbWlzc2FyaWF0ICYjMjI0OyBsYEVuZXJnaWUgQXRvbWlxdWUgLSBDRUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgZGUgcmVjaGVyY2hlICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUsIHRlY2huaXF1ZSBldCBpbmR1c3RyaWVsLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMjUgcnVlIExlYmxhbmMsIGltbWV1YmxlIExlIFBvbmFudCBELCA3NTAxNSBQYXJpcy4KKworQ2VudHJlIE5hdGlvbmFsIGRlIGxhIFJlY2hlcmNoZSBTY2llbnRpZmlxdWUgLSBDTlJTLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMgcnVlIE1pY2hlbC1BbmdlLCA3NTc5NCBQYXJpcyBjZWRleCAxNi4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAtIElOUklBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LgorCitQciYjMjMzO2FtYnVsZQorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBkb250IGxgb2JqZWN0aWYgZXN0IGRlIGNvbmYmIzIzMztyZXIgYXV4IHV0aWxpc2F0ZXVycyBsYSBsaWJlcnQmIzIzMzsgZGUgbW9kaWZpZXIgZXQgZGUgciYjMjMzO3V0aWxpc2VyIGxlIGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgY2V0dGUgbGljZW5jZS4KKworTGBleGVyY2ljZSBkZSBjZXR0ZSBsaWJlcnQmIzIzMzsgZXN0IGFzc29ydGkgZGB1bmUgb2JsaWdhdGlvbiBkZSByZW1ldHRyZSAmIzIyNDsgbGEgZGlzcG9zaXRpb24gZGUgbGEgY29tbXVuYXV0JiMyMzM7IGxlcyBtb2RpZmljYXRpb25zIGFwcG9ydCYjMjMzO2VzIGF1IGNvZGUgc291cmNlIGR1IGxvZ2ljaWVsIGFmaW4gZGUgY29udHJpYnVlciAmIzIyNDsgc29uICYjMjMzO3ZvbHV0aW9uLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGQmIzIzMztjb3VsZW50IGRlIGNlIGNvbnRyYXQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG5gb2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXVgdW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbGBhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXVgdW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsYGF0dGVudGlvbiBkZSBsYHV0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGxgdXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgb3UgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbGBhZCYjMjMzO3F1YXRpb24gZHUgbG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldC9vdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lcyBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGxgJiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHNgYXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsYGV4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1YGlsIGNvbnRpZW50LgorCitBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdWBpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGBhY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCAmIzIzMzt2ZW50dWVsbGVtZW50IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UuCisKK0NvZGUgU291cmNlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgaW5zdHJ1Y3Rpb25zIGV0IGRlcyBsaWduZXMgZGUgcHJvZ3JhbW1lIGR1IExvZ2ljaWVsIGV0IGF1cXVlbCBsYGFjYyYjMjMyO3MgZXN0IG4mIzIzMztjZXNzYWlyZSBlbiB2dWUgZGUgbW9kaWZpZXIgbGUgTG9naWNpZWwuCisKK0NvZGUgT2JqZXQ6IGQmIzIzMztzaWduZSBsZXMgZmljaGllcnMgYmluYWlyZXMgaXNzdXMgZGUgbGEgY29tcGlsYXRpb24gZHUgQ29kZSBTb3VyY2UuCisKK1RpdHVsYWlyZTogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyBkJiMyMzM7dGVudGV1cnMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZGBhdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXJzIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkYGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlLgorCitDb25jJiMyMzM7ZGFudDogZCYjMjMzO3NpZ25lIGxlIFRpdHVsYWlyZSBvdSB0b3V0ZSBwZXJzb25uZSBwaHlzaXF1ZSBvdSBtb3JhbGUgZGlzdHJpYnVhbnQgbGUgTG9naWNpZWwgc291cyBsZSBDb250cmF0LgorCitDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIENvZGUgU291cmNlIHBhciB0b3V0IENvbnRyaWJ1dGV1ci4KKworTW9kdWxlIExpJiMyMzM7OiBkJiMyMzM7c2lnbmUgdW4gZW5zZW1ibGUgZGUgZmljaGllcnMgc291cmNlcyB5IGNvbXByaXMgbGV1ciBkb2N1bWVudGF0aW9uIHF1aSwgc2FucyBtb2RpZmljYXRpb24gZHUgQ29kZSBTb3VyY2UsIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOzogZCYjMjMzO3NpZ25lIHRvdXRlIGNvbWJpbmFpc29uIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCBldCBkYHVuIE1vZHVsZSBMaSYjMjMzOy4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERFIE1PRElGSUNBVElPTgorCitMZSBkcm9pdCBkZSBtb2RpZmljYXRpb24gY29tcG9ydGUgbGUgZHJvaXQgZGUgdHJhZHVpcmUsIGRgYWRhcHRlciwgZGBhcnJhbmdlciBvdSBkYGFwcG9ydGVyIHRvdXRlIGF1dHJlIG1vZGlmaWNhdGlvbiBhdSBMb2dpY2llbCBldCBsZSBkcm9pdCBkZSByZXByb2R1aXJlIGxlIGxvZ2ljaWVsIGVuIHImIzIzMztzdWx0YW50LiBJbCBjb21wcmVuZCBlbiBwYXJ0aWN1bGllciBsZSBkcm9pdCBkZSBjciYjMjMzO2VyIHVuIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIG1vZGlmaWNhdGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBtb2RpZmljYXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UgYXUgTG9naWNpZWwsIGxlcyBjb25kaXRpb25zIGRlIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZW4gciYjMjMzO3N1bHRhbnQgc29udCBhbG9ycyBzb3VtaXNlcyAmIzIyNDsgbGBpbnQmIzIzMztncmFsaXQmIzIzMzsgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBzb3VzIGZvcm1lIGRlIGNvZGUgc291cmNlIG91IGRlIGNvZGUgb2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIGNvZGUgb2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgJiMyMjQ7IHNvbiBjb2RlIHNvdXJjZSBjb21wbGV0IHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBzYSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IGNvZGUgc291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjMgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIERFUklWRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgY3ImIzIzMztlIHVuIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzssIGNlIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgYXV0cmUgcXVlIGxlIHByJiMyMzM7c2VudCBDb250cmF0ICYjMjI0OyBjb25kaXRpb24gZGUgcmVzcGVjdGVyIGxlcyBvYmxpZ2F0aW9ucyBkZSBtZW50aW9uIGRlcyBkcm9pdHMgc3VyIGxlIExvZ2ljaWVsIHRlbGxlcyBxdWUgZCYjMjMzO2ZpbmllcyAmIzIyNDsgbGBhcnRpY2xlIDYuNC4gRGFucyBsZSBjYXMgbyYjMjQ5OyBsYSBjciYjMjMzO2F0aW9uIGR1IExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsgYSBuJiMyMzM7Y2Vzc2l0JiMyMzM7IHVuZSBtb2RpZmljYXRpb24gZHUgQ29kZSBTb3VyY2UgbGUgbGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgY2UgcXVlOgorCitsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgY29ycmVzcG9uZGFudCAmIzIyNDsgY2V0dGUgbW9kaWZpY2F0aW9uIHNvaXQgciYjMjMzO2dpIHBhciBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCwKK2xlcyBDb250cmlidXRpb25zIEludCYjMjMzO2dyJiMyMzM7ZXMgZG9udCBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgciYjMjMzO3N1bHRlIHNvaWVudCBjbGFpcmVtZW50IGlkZW50aWZpJiMyMzM7ZXMgZXQgZG9jdW1lbnQmIzIzMztlcywKK2xlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgdW4gYWNjJiMyMzI7cyBlZmZlY3RpZiBhdSBjb2RlIHNvdXJjZSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBsYSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOywgZGUgdGVsbGUgc29ydGUgcXVlIGNlcyBtb2RpZmljYXRpb25zIHB1aXNzZW50ICYjMjM0O3RyZSByZXByaXNlcyBkYW5zIHVuZSB2ZXJzaW9uIHVsdCYjMjMzO3JpZXVyZSBkdSBMb2dpY2llbCwgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGR1IHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorNS4zLjQgQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgQ2VDSUxMCisKK0xvcnNxdWB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzsgY29udGllbnQgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2Ugc291bWlzZSBhdSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLCBvdSBsb3JzcXVgdW4gTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOyBjb250aWVudCB1biBNb2R1bGUgTGkmIzIzMzsgc291bWlzIGF1IGNvbnRyYXQgZGUgbGljZW5jZSBDZUNJTEwsIGxlcyBzdGlwdWxhdGlvbnMgcHImIzIzMzt2dWVzIGF1IHRyb2lzaSYjMjMyO21lIGl0ZW0gZGUgbGBhcnRpY2xlIDYuNCBzb250IGZhY3VsdGF0aXZlcy4KKworQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFCisKKzYuMSBTVVIgTEUgTE9HSUNJRUwgSU5JVElBTAorCitMZSBUaXR1bGFpcmUgZXN0IGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLiBUb3V0ZSB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCBJbml0aWFsIGVzdCBzb3VtaXNlIGF1IHJlc3BlY3QgZGVzIGNvbmRpdGlvbnMgZGFucyBsZXNxdWVsbGVzIGxlIFRpdHVsYWlyZSBhIGNob2lzaSBkZSBkaWZmdXNlciBzb24gb2V1dnJlIGV0IG51bCBhdXRyZSBuYGEgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZSBsZSBMb2dpY2llbCBJbml0aWFsIHJlc3RlIGF1IG1vaW5zIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBldCBjZSwgcG91ciBsYSBkdXImIzIzMztlIHZpcyYjMjMzO2UgJiMyMjQ7IGxgYXJ0aWNsZSA0LjIuCisKKzYuMiBTVVIgTEVTIENPTlRSSUJVVElPTlMgSU5URUdSRUVTCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZSBlc3QgdGl0dWxhaXJlIHN1ciBjZWxsZS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMyBTVVIgTEVTIE1PRFVMRVMgTElFUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIExpJiMyMzM7IGVzdCB0aXR1bGFpcmUgc3VyIGNlbHVpLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZSBldCByZXN0ZSBsaWJyZSBkdSBjaG9peCBkdSBjb250cmF0IHImIzIzMztnaXNzYW50IHNhIGRpZmZ1c2lvbiBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgJiMyMjQ7IGxgYXJ0aWNsZSA1LjMuMy4KKworNi40IE1FTlRJT05TIERFUyBEUk9JVFMKKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsYGlkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub247CisKKyYjMjI0OyBmYWlyZSBlbiBzb3J0ZSBxdWUgbGB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCwgc2VzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgbGUgZmFpdCBxdWBpbCBlc3QgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IHNvaWVudCBpbmRpcXUmIzIzMztzIGRhbnMgdW4gdGV4dGUgZmFjaWxlbWVudCBhY2Nlc3NpYmxlIG5vdGFtbWVudCBkZXB1aXMgbGBpbnRlcmZhY2UgZGUgdG91dCBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LgorTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBzdXIgbGUgTG9naWNpZWwgZXQgJiMyMjQ7IHByZW5kcmUsIGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCwgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZSBzb24gcGVyc29ubmVsIHRvdXRlcyBsZXMgbWVzdXJlcyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycy4KKworQXJ0aWNsZSA3IC0gU0VSVklDRVMgQVNTT0NJRVMKKworNy4xIExlIENvbnRyYXQgbmBvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGRgYXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZGB1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZGB1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbmBlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuYGVuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1YGlsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGxgb2JqZXQgZGB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xIFNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDguMiwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXVgaWwgc3ViaXJhaXQgZHUgZmFpdCBkdSBMb2dpY2llbCBldCBkb250IGlsIGFwcG9ydGVyYSBsYSBwcmV1dmUuCisKKzguMiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDogKGkpIGRlcyBkb21tYWdlcyBkdXMgJiMyMjQ7IGxgaW5leCYjMjMzO2N1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpJiMyMzM7LCAoaWkpIGRlcyBkb21tYWdlcyBkaXJlY3RzIG91IGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsYHV0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwgc3ViaXMgcGFyIGxlIExpY2VuY2kmIzIzMzsgZXQgKGlpaSkgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50IGRgdW4gcXVlbGNvbnF1ZSBkb21tYWdlIGluZGlyZWN0LiBFbiBwYXJ0aWN1bGllciwgbGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZGBleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbmBvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMSBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsYCYjMjMzO3RhdCBhY3R1ZWwgZGVzIGNvbm5haXNzYW5jZXMgc2NpZW50aWZpcXVlcyBldCB0ZWNobmlxdWVzIGF1IG1vbWVudCBkZSBsYSBtaXNlIGVuIGNpcmN1bGF0aW9uIGR1IExvZ2ljaWVsIG5lIHBlcm1ldCBwYXMgZGBlbiB0ZXN0ZXIgZXQgZGBlbiB2JiMyMzM7cmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGQmIzIzMzt0ZWN0ZXIgbGBleGlzdGVuY2UgZGAmIzIzMzt2ZW50dWVscyBkJiMyMzM7ZmF1dHMuIExgYXR0ZW50aW9uIGR1IExpY2VuY2kmIzIzMzsgYSAmIzIzMzt0JiMyMzM7IGF0dGlyJiMyMzM7ZSBzdXIgY2UgcG9pbnQgc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBMb2dpY2llbCBxdWkgc29udCByJiMyMzM7c2VydiYjMjMzO3MgJiMyMjQ7IGRlcyB1dGlsaXNhdGV1cnMgYXZlcnRpcy4KKworSWwgcmVsJiMyMzI7dmUgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBMaWNlbmNpJiMyMzM7IGRlIGNvbnRyJiMyNDQ7bGVyLCBwYXIgdG91cyBtb3llbnMsIGxgYWQmIzIzMztxdWF0aW9uIGR1IHByb2R1aXQgJiMyMjQ7IHNlcyBiZXNvaW5zLCBzb24gYm9uIGZvbmN0aW9ubmVtZW50IGV0IGRlIHNgYXNzdXJlciBxdWBpbCBuZSBjYXVzZXJhIHBhcyBkZSBkb21tYWdlcyBhdXggcGVyc29ubmVzIGV0IGF1eCBiaWVucy4KKworOS4yIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAiZW4gbGAmIzIzMzt0YXQiIHBhciBsZSBDb25jJiMyMzM7ZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwciYjMjMzO3Z1ZSAmIzIyNDsgbGBhcnRpY2xlIDkuMiBldCBub3RhbW1lbnQgc2FucyBhdWN1bmUgZ2FyYW50aWUgc3VyIHNhIHZhbGV1ciBjb21tZXJjaWFsZSwgc29uIGNhcmFjdCYjMjMyO3JlIHMmIzIzMztjdXJpcyYjMjMzOywgaW5ub3ZhbnQgb3UgcGVydGluZW50LgorCitFbiBwYXJ0aWN1bGllciwgbGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGRgZXJyZXVyLCBxdWBpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1YGlsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGxgJiMyMzM7cXVpcGVtZW50IGR1IExpY2VuY2kmIzIzMzsgZXQgc2EgY29uZmlndXJhdGlvbiBsb2dpY2llbGxlIG5pIHF1YGlsIHJlbXBsaXJhIGxlcyBiZXNvaW5zIGR1IExpY2VuY2kmIzIzMzsuCisKKzkuNCBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYHVuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsYHV0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZGB1biBwcm90b2NvbGUgZGBhY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGxgdXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuYGVzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsYGV4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGxgZXhpc3RlbmNlIGRgdW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEgRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIgTGUgTGljZW5jaSYjMjMzOyBkb250IGxlIENvbnRyYXQgZXN0IHImIzIzMztzaWxpJiMyMzM7IG5gZXN0IHBsdXMgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIsIG1vZGlmaWVyIG91IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwuIENlcGVuZGFudCwgdG91dGVzIGxlcyBsaWNlbmNlcyBxdWBpbCBhdXJhIGNvbmMmIzIzMztkJiMyMzM7ZXMgYW50JiMyMzM7cmlldXJlbWVudCAmIzIyNDsgbGEgciYjMjMzO3NpbGlhdGlvbiBkdSBDb250cmF0IHJlc3Rlcm9udCB2YWxpZGVzIHNvdXMgciYjMjMzO3NlcnZlIHF1YGVsbGVzIGFpZW50ICYjMjMzO3QmIzIzMzsgZWZmZWN0dSYjMjMzO2VzIGVuIGNvbmZvcm1pdCYjMjMzOyBhdmVjIGxlIENvbnRyYXQuCisKK0FydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVMKKworMTEuMSBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGRgdW4gcmV0YXJkIG91IGRgdW5lIGQmIzIzMztmYWlsbGFuY2UgZGBleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbGBpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbGAmIzIzMzt0YXQgZGUgZ3VlcnJlLi4uCisKKzExLjIgTGUgZmFpdCwgcGFyIGxgdW5lIG91IGxgYXV0cmUgZGVzIFBhcnRpZXMsIGRgb21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwciYjMjMzO3ZhbG9pciBkYHVuZSBvdSBwbHVzaWV1cnMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQsIG5lIHBvdXJyYSBlbiBhdWN1biBjYXMgaW1wbGlxdWVyIHJlbm9uY2lhdGlvbiBwYXIgbGEgUGFydGllIGludCYjMjMzO3Jlc3MmIzIzMztlICYjMjI0OyBzYGVuIHByJiMyMzM7dmFsb2lyIHVsdCYjMjMzO3JpZXVyZW1lbnQuCisKKzExLjMgTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsYGFjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbmBhdXJhIGRgZWZmZXQgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZGAmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNCBEYW5zIGxgaHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzYGF2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkYHVuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbGBlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41IExBTkdVRQorCitMZSBDb250cmF0IGVzdCByJiMyMzM7ZGlnJiMyMzM7IGVuIGxhbmd1ZSBmcmFuJiMyMzE7YWlzZSBldCBlbiBsYW5ndWUgYW5nbGFpc2UsIGNlcyBkZXV4IHZlcnNpb25zIGZhaXNhbnQgJiMyMzM7Z2FsZW1lbnQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMSBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMiBBZmluIGRgZW4gcHImIzIzMztzZXJ2ZXIgbGEgY29oJiMyMzM7cmVuY2UsIGxlIHRleHRlIGR1IENvbnRyYXQgZXN0IHByb3QmIzIzMztnJiMyMzM7IGV0IG5lIHBldXQgJiMyMzQ7dHJlIG1vZGlmaSYjMjMzOyBxdWUgcGFyIGxlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UsIGxlc3F1ZWxzIHNlIHImIzIzMztzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcCYjMjMzO3Jpb2RpcXVlbWVudCBkZXMgbWlzZXMgJiMyMjQ7IGpvdXIgb3UgZGUgbm91dmVsbGVzIHZlcnNpb25zIGR1IENvbnRyYXQsIHF1aSBwb3NzJiMyMzM7ZGVyb250IGNoYWN1bmUgdW4gbnVtJiMyMzM7cm8gZGlzdGluY3QuIENlcyB2ZXJzaW9ucyB1bHQmIzIzMztyaWV1cmVzIHNlcm9udCBzdXNjZXB0aWJsZXMgZGUgcHJlbmRyZSBlbiBjb21wdGUgZGUgbm91dmVsbGVzIHByb2JsJiMyMzM7bWF0aXF1ZXMgcmVuY29udHImIzIzMztlcyBwYXIgbGVzIGxvZ2ljaWVscyBsaWJyZXMuCisKKzEyLjMgVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDEuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEFMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQQUwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmIwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEFMLTEuMApAQCAtMCwwICsxLDEwOSBAQAorCitDb21tb24gUHVibGljIEF0dHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAgKENQQUwpCisxLiAmIzgyMjA7RGVmaW5pdGlvbnMmIzgyMjE7CisxLjAuMSAmIzgyMjA7Q29tbWVyY2lhbCBVc2UmIzgyMjE7IG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEgJiM4MjIwO0NvbnRyaWJ1dG9yJiM4MjIxOyBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisxLjIgJiM4MjIwO0NvbnRyaWJ1dG9yIFZlcnNpb24mIzgyMjE7IG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMyAmIzgyMjA7Q292ZXJlZCBDb2RlJiM4MjIxOyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40ICYjODIyMDtFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20mIzgyMjE7IG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41ICYjODIyMDtFeGVjdXRhYmxlJiM4MjIxOyBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNiAmIzgyMjA7SW5pdGlhbCBEZXZlbG9wZXImIzgyMjE7IG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNyAmIzgyMjA7TGFyZ2VyIFdvcmsmIzgyMjE7IG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjggJiM4MjIwO0xpY2Vuc2UmIzgyMjE7IG1lYW5zIHRoaXMgZG9jdW1lbnQuCisxLjguMSAmIzgyMjA7TGljZW5zYWJsZSYjODIyMTsgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisxLjkgJiM4MjIwO01vZGlmaWNhdGlvbnMmIzgyMjE7IG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisxLjEwICYjODIyMDtPcmlnaW5hbCBDb2RlJiM4MjIxOyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xICYjODIyMDtQYXRlbnQgQ2xhaW1zJiM4MjIxOyBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKzEuMTEgJiM4MjIwO1NvdXJjZSBDb2RlJiM4MjIxOyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvciYjODIxNztzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKzEuMTIgJiM4MjIwO1lvdSYjODIyMTsgKG9yICYjODIyMDtZb3VyJiM4MjIxOykgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgJiM4MjIwO1lvdSYjODIyMTsgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICYjODIyMDtjb250cm9sJiM4MjIxOyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisyLjIgQ29udHJpYnV0b3IgR3JhbnQuCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgQ29kZS4KKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKzMuMSBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCiszLjMgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKzMuNCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSYjODIxNztzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgJiM4MjIwO0xFR0FMJiM4MjIxOyB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvciYjODIxNztzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJiM4MjE3O3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3ImIzgyMTc7cyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorMy41IFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorMy42IERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cyYjODIxNzsgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50JiM4MjE3O3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKzMuNyBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xIE5ldyBWZXJzaW9ucy4KK1NvY2lhbHRleHQsIEluYy4gKCYjODIyMDtTb2NpYWx0ZXh0JiM4MjIxOykgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU29jaWFsdGV4dC4gTm8gb25lIG90aGVyIHRoYW4gU29jaWFsdGV4dCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCis2LjMgRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICYjODIyMDtTb2NpYWx0ZXh0JiM4MjIxOywgJiM4MjIwO0NQQUwmIzgyMjE7IG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgQ1BBTC4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAmIzgyMjA7QVMgSVMmIzgyMjE7IEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgT1JJR0lOQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzguIFRFUk1JTkFUSU9OLgorOC4xIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgJiM4MjIwO1BhcnRpY2lwYW50JiM4MjIxOykgYWxsZWdpbmcgdGhhdDoKKyhhKSBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnQmIzgyMTc7cyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCis4LjMgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQmIzgyMTc7cyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKzguNCBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBPUklHSU5BTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFkmIzgyMTc7UyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgJiM4MjIwO2NvbW1lcmNpYWwgaXRlbSwmIzgyMjE7IGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSYjODIyMTsgYW5kICYjODIyMDtjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sJiM4MjIxOyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyYjODIxNzsgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgTXVsdGlwbGUtTGljZW5zZWQuIE11bHRpcGxlLUxpY2Vuc2VkIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgQ1BBTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorMTQuIEFERElUSU9OQUwgVEVSTTogQVRUUklCVVRJT04KKyhhKSBBcyBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byB0aGUgb3JnYW5pemVyIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgT3JpZ2luYWwgQ29kZSAoJiM4MjIwO09yaWdpbmFsIERldmVsb3BlciYjODIyMTspLCBpbiB0aGUgaG9wZSB0aGF0IGl0cyBwcm9tb3Rpb25hbCB2YWx1ZSBtYXkgaGVscCBqdXN0aWZ5IHRoZSB0aW1lLCBtb25leSBhbmQgZWZmb3J0IGludmVzdGVkIGluIHdyaXRpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgbWF5IGluY2x1ZGUgaW4gRXhoaWJpdCBCICgmIzgyMjA7QXR0cmlidXRpb24gSW5mb3JtYXRpb24mIzgyMjE7KSBhIHJlcXVpcmVtZW50IHRoYXQgZWFjaCB0aW1lIGFuIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIG9yIGEgTGFyZ2VyIFdvcmsgaXMgbGF1bmNoZWQgb3IgaW5pdGlhbGx5IHJ1biAod2hpY2ggaW5jbHVkZXMgaW5pdGlhdGluZyBhIHNlc3Npb24pLCBhIHByb21pbmVudCBkaXNwbGF5IG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXImIzgyMTc7cyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgbXVzdCBvY2N1ciBvbiB0aGUgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSBlbXBsb3llZCBieSB0aGUgZW5kIHVzZXIgdG8gYWNjZXNzIHN1Y2ggQ292ZXJlZCBDb2RlICh3aGljaCBtYXkgaW5jbHVkZSBkaXNwbGF5IG9uIGEgc3BsYXNoIHNjcmVlbiksIGlmIGFueS4gVGhlIHNpemUgb2YgdGhlIGdyYXBoaWMgaW1hZ2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgb3RoZXIgZWxlbWVudHMgb2YgdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uLiBJZiB0aGUgYWNjZXNzIGJ5IHRoZSBlbmQgdXNlciB0byB0aGUgRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgZG9lcyBub3QgY3JlYXRlIGEgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSBmb3IgYWNjZXNzIHRvIHRoZSBDb3ZlcmVkIENvZGUsIHRoaXMgb2JsaWdhdGlvbiBzaGFsbCBub3QgYXBwbHkuIElmIHRoZSBPcmlnaW5hbCBDb2RlIGRpc3BsYXlzIHN1Y2ggQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaW4gYSBwYXJ0aWN1bGFyIGZvcm0gKHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBzcGxhc2ggc2NyZWVuLCBub3RpY2UgYXQgbG9naW4sIGFuICYjODIyMDthYm91dCYjODIyMTsgZGlzcGxheSwgb3IgZGVkaWNhdGVkIGF0dHJpYnV0aW9uIGFyZWEgb24gdXNlciBpbnRlcmZhY2Ugc2NyZWVucyksIGNvbnRpbnVlZCB1c2Ugb2Ygc3VjaCBmb3JtIGZvciB0aGF0IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIG9uZSB3YXkgb2YgbWVldGluZyB0aGlzIHJlcXVpcmVtZW50IGZvciBub3RpY2UuCisoYikgQXR0cmlidXRpb24gaW5mb3JtYXRpb24gbWF5IG9ubHkgaW5jbHVkZSBhIGNvcHlyaWdodCBub3RpY2UsIGEgYnJpZWYgcGhyYXNlLCBncmFwaGljIGltYWdlIGFuZCBhIFVSTCAoJiM4MjIwO0F0dHJpYnV0aW9uIEluZm9ybWF0aW9uJiM4MjIxOykgYW5kIGlzIHN1YmplY3QgdG8gdGhlIEF0dHJpYnV0aW9uIExpbWl0cyBhcyBkZWZpbmVkIGJlbG93LiBGb3IgdGhlc2UgcHVycG9zZXMsIHByb21pbmVudCBzaGFsbCBtZWFuIGRpc3BsYXkgZm9yIHN1ZmZpY2llbnQgZHVyYXRpb24gdG8gZ2l2ZSByZWFzb25hYmxlIG5vdGljZSB0byB0aGUgdXNlciBvZiB0aGUgaWRlbnRpdHkgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlciBhbmQgdGhhdCBpZiBZb3UgaW5jbHVkZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvciBzaW1pbGFyIGluZm9ybWF0aW9uIGZvciBvdGhlciBwYXJ0aWVzLCBZb3UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgc2hhbGwgYmUgbm8gbGVzcyBwcm9taW5lbnQgdGhhbiBzdWNoIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9yIHNpbWlsYXIgaW5mb3JtYXRpb24gZm9yIHRoZSBvdGhlciBwYXJ0eS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIG1heSBjaG9vc2UgdG8gc3BlY2lmeSBpbiBFeGhpYml0IEIgYmVsb3cgdGhhdCB0aGUgYWJvdmUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnQgb25seSBhcHBsaWVzIHRvIGFuIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIHJlc3VsdGluZyBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBNb2RpZmljYXRpb24sIGJ1dCBub3QgYSBMYXJnZXIgV29yay4gVGhlIGludGVudCBpcyB0byBwcm92aWRlIGZvciByZWFzb25hYmx5IG1vZGVzdCBhdHRyaWJ1dGlvbiwgdGhlcmVmb3JlIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgY2Fubm90IHJlcXVpcmUgdGhhdCBZb3UgZGlzcGxheSwgYXQgYW55IHRpbWUsIG1vcmUgdGhhbiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFzIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uOiAoYSkgYSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyOyAoYikgYSB3b3JkIG9yIG9uZSBwaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOyAoYykgb25lIGdyYXBoaWMgaW1hZ2UgcHJvdmlkZWQgYnkgdGhlIE9yaWdpbmFsIERldmVsb3BlcjsgYW5kIChkKSBhIFVSTCAoY29sbGVjdGl2ZWx5LCB0aGUgJiM4MjIwO0F0dHJpYnV0aW9uIExpbWl0cyYjODIyMTspLgorKGMpIElmIEV4aGliaXQgQiBkb2VzIG5vdCBpbmNsdWRlIGFueSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBZb3UgdG8gZGlzcGxheSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb2YgdGhlIE9yaWdpbmFsIERldmVsb3Blci4KKyhkKSBZb3UgYWNrbm93bGVkZ2UgdGhhdCBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBhbmQvb3IgdHJhZGUgbmFtZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gZGlzdHJpYnV0ZWQgd2l0aCB0aGUgQ292ZXJlZCBDb2RlIGFyZSB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIHRoZWlyIG93bmVycyBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZWlyIG93bmVycywgb3IgdW5kZXIgY2lyY3Vtc3RhbmNlcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGxhdyBvciBhcyBleHByZXNzbHkgc2V0IG91dCBpbiB0aGlzIExpY2Vuc2UuCisxNS4gQURESVRJT05BTCBURVJNOiBORVRXT1JLIFVTRS4KK1RoZSB0ZXJtICYjODIyMDtFeHRlcm5hbCBEZXBsb3ltZW50JiM4MjIxOyBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMy4xIGFuZCBtYWtlIFNvdXJjZSBDb2RlIGF2YWlsYWJsZSB1bmRlciBTZWN0aW9uIDMuMi4KKworIEVYSElCSVQgQS4gQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wLgorJiM4MjIwO1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIENvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICYjODIyMDtMaWNlbnNlJiM4MjIxOyk7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IF9fX19fX19fX19fX18uIFRoZSBMaWNlbnNlIGlzIGJhc2VkIG9uIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIGJ1dCBTZWN0aW9ucyAxNCBhbmQgMTUgaGF2ZSBiZWVuIGFkZGVkIHRvIGNvdmVyIHVzZSBvZiBzb2Z0d2FyZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yayBhbmQgcHJvdmlkZSBmb3IgbGltaXRlZCBhdHRyaWJ1dGlvbiBmb3IgdGhlIE9yaWdpbmFsIERldmVsb3Blci4gSW4gYWRkaXRpb24sIEV4aGliaXQgQSBoYXMgYmVlbiBtb2RpZmllZCB0byBiZSBjb25zaXN0ZW50IHdpdGggRXhoaWJpdCBCLgorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJiM4MjIwO0FTIElTJiM4MjIxOyBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitUaGUgT3JpZ2luYWwgQ29kZSBpc19fX19fX19fX19fX19fX19fX19fX18uCitUaGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGlzIG5vdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGlzIF9fX19fX19fX18uIElmIGxlZnQgYmxhbmssIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgaXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fXy4gQWxsIHBvcnRpb25zIG9mIHRoZSBjb2RlIHdyaXR0ZW4gYnkgX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoYykgX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvciBfX19fX19fX19fX19fX19fX19fX19fLgorQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSBbX19fXSBMaWNlbnNlKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuCitJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIENQQUwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBDUEFMIG9yIHRoZSBbX19fXSBMaWNlbnNlLiYjODIyMTsKK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworIEVYSElCSVQgQi4gQXR0cmlidXRpb24gSW5mb3JtYXRpb24KK0F0dHJpYnV0aW9uIENvcHlyaWdodCBOb3RpY2U6IF9fX19fX19fX19fX19fX19fX19fX19fCitBdHRyaWJ1dGlvbiBQaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOiBfX19fX19fX19fX19fX19fX19fX19fXworQXR0cmlidXRpb24gVVJMOiBfX19fX19fX19fX19fX19fX19fX19fXworR3JhcGhpYyBJbWFnZSBhcyBwcm92aWRlZCBpbiB0aGUgQ292ZXJlZCBDb2RlLCBpZiBhbnkuCitEaXNwbGF5IG9mIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIFtyZXF1aXJlZC9ub3QgcmVxdWlyZWRdIGluIExhcmdlciBXb3JrcyB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgQ1BBTCBhcyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhlIENQQUwuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxN2MyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEwtMS4wCkBAIC0wLDAgKzEsMjE1IEBACisKK0NvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NTU9OIFBVQkxJQworTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNCitDT05TVElUVVRFUyBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworYSkgaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kCitkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKKworYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOgorCitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKworaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKKword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZQorZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiBgb3JpZ2luYXRlc2AgZnJvbSBhCitDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lCithY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcmBzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8KK3RoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4KK2Nvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90CitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzICIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUKK25lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuCitjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LAoraW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCithKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bworcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sCitkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaAorZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCisKK2IpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkCitQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlCitDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KK1RoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZQorUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKK2FkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUKK0xpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucword2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMKK3RvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueQorQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8KK1JlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZQorcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZQorcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LgorRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZQorYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KKworZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudAorY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQKK2ZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMKK293biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworYSkgaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCitiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CisKK2kpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kCitub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZAorZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CisKK2lpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvcgorZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwKK2RhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworCitpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkCitieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKworaXYpIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoCitDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvcgordGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCithKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKKworYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uCisKK0NvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUKK1Byb2dyYW0uCisKK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYKK2FueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlCitvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGgKK3Jlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcworaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8KK2luY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lcgord2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZgorYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaAorQ29udHJpYnV0b3IgKCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeQorZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcworYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbAorYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlCitleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0bworY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55CityZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluCithbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzCityZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yYHMgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlcgorQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydAorcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SCitJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoCitSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZgorcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsCitwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkKK0NPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVAorUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKK0dSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gR0VORVJBTAorCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlCitsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlCit0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoCitwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2gKK3Byb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYSBDb250cmlidXRvciB3aXRoIHJlc3BlY3QgdG8KK2EgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhCitsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkgdGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudAordW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4KK2FkZGl0aW9uLCBpZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCitpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkKK2luZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyCitTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworQWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8KK2NvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcworbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZgorc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwKK1JlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcworcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK2FuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kCitzdXJ2aXZlLgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbgorb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZQorbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8KK3B1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4KK05vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4KK0lCTSBpcyB0aGUgaW5pdGlhbCBBZ3JlZW1lbnQgU3Rld2FyZC4gSUJNIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlCithcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlCitBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nCitDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudAordW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50CitpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzCitDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zCisyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcworQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyCithZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbgorYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DVUEtT1BMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NVQS1PUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjU5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DVUEtT1BMLTEuMApAQCAtMCwwICsxLDQ3MSBAQAorCitDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisocGxhaW4gdGV4dCkKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlCitpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZAorYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCitleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKK3N1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlCitjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IKK3ByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCit3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMKK09yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLAorYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlCitkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlcgord2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZQorU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUKK2FwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUKK2ZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkKK2V4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuCitGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzCitjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mCit0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsCit0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkKK2NvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudAorKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoCitlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwKK21vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwKK0NvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IKK2FzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3IKK3NlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLAorc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlCitPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUKK2VmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcworT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpCitzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQKK2J5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvcgoraGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMKK2NyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuCit1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZQorYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3IKK3NlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lCithbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKK29mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlCittYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yCitWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZQorZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mCit0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247CiszKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YKK0NvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUKK2J5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlCitDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zCitpbmZyaW5nZWQgYnkgQ292ZXJlZCBDb2RlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieQordGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUKK2Rpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCitvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEKK2NvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQordmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUKK2FuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUKK21hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpCittb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeAorKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uCitoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yCitlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCit0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0Cit0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKK0NvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzCitncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwKK0NvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZQorZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZQorcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwKK2tub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyCit0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwKK0NvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzCitDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcworKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykKK3JlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkCitDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoCithcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvCitTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzCitNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vcgorQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkKK3RoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UKK0NvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEKK2xvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5Cit0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykKK1lvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbgorZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcAorcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKK29ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UKK21heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuCithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzCitvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKK3JlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlCitvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKK2luIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUKK0NvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5Citjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluCitjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMKK3JpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMKK0xpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQKK2xpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlcgorZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaAordGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUKK25vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKK3JlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0bworc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQorZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbgorbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QKK2JlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCitleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZQorc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcworYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworNi4xLiBOZXcgVmVyc2lvbnMuCitDVUEgT2ZmaWNlIFByb2plY3QgbWF5IHB1Ymxpc2ggcmV2aXNlZAorYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uCit3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUKK0xpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAordmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zCitvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBDVUEgT2ZmaWNlIFByb2plY3QuIE5vIG9uZQorb3RoZXIgdGhhbiBDVUEgT2ZmaWNlIFByb2plY3QgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8KK0NvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heQorb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZQorZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdAordGhlIHBocmFzZXMgIkNVQSBPZmZpY2UiLCAiQ1VBIiwgIkNVQVBMIiwgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91cgorbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkKK2FuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UKK2NvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YKK3RoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCitERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCitUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUKK0lTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsCitZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFCitDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSCitPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRgorQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3Blcgorb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbQorWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworKGEpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKK2luZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2gKK1BhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksCit1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpCithZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlCityb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdAorbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbQoraXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YKK3RoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuCithbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpCithbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKK3NvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK1BhcnRpY2lwYW50LgorCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQKK2FsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcworYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcworZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4KK2ludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCitsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLAorYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKQord2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlcgorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMCitERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwKK09SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IKK0FOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLAorV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIKK0NPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4KK0lORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVworUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKK0VYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTworVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCis0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2gKK3Rlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDgKK0MuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwKK2FsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZQorcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CituZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CitDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYKK2FueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KK1dpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLAorb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQKK1N0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK3N1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuCitEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwKK0NhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kCitleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uCitDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKK3NoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzCitMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcworcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8KK3dvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaAorcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvcgorc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKyJNdWx0aXBsZS1MaWNlbnNlZCIuICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlcgorWW91ciBjaG9pY2Ugb2YgdGhlIE5QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkCitieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKworRVhISUJJVCBBIC0gQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZS4KKworYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL2N1YW9mZmljZS5zb3VyY2Vmb3JnZS5uZXQvCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18KK19fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGUgX19fX18gbGljZW5zZSAodGhlICJbX19fXSBMaWNlbnNlIiksIGluIHdoaWNoIGNhc2UgdGhlCitwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZQorYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCit5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBDVUFQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCitvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQordGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQordW5kZXIgZWl0aGVyIHRoZSBDVUFQTCBvciB0aGUgW19fX10gTGljZW5zZS4iCisKK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YKK3RoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZAordXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZQorT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ2xBcnRpc3RpYyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NsQXJ0aXN0aWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1YTRhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NsQXJ0aXN0aWMKQEAgLTAsMCArMSwxMzggQEAKKworICAgICAgIFRoZSBDbGFyaWZpZWQgQXJ0aXN0aWMgTGljZW5zZQorCisgICAgUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEKK1BhY2thZ2UgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lCitzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwKK3doaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZQordGhlIFBhY2thZ2UgaW4gYSBtb3JlLW9yLWxlc3MgY3VzdG9tYXJ5IGZhc2hpb24sIHBsdXMgdGhlIHJpZ2h0IHRvIG1ha2UKK3JlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy4KKworRGVmaW5pdGlvbnM6CisKKyAiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMKKyBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uCisKKyAiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHN1Y2ggYSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbgorIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcworIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFzIHNwZWNpZmllZCBiZWxvdy4KKworICJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IKKyBjb3B5cmlnaHRzIGZvciB0aGUgcGFja2FnZS4KKworICJZb3UiIGlzIHlvdSwgaWYgeW91YHJlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nCisgdGhpcyBQYWNrYWdlLgorCisgIkRpc3RyaWJ1dGlvbiBmZWUiIGlzIGEgZmVlIHlvdSBjaGFyZ2UgZm9yIHByb3ZpZGluZyBhIGNvcHkKKyAgICAgICAgb2YgdGhpcyBQYWNrYWdlIHRvIGFub3RoZXIgcGFydHkuCisKKyAiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIHJpZ2h0IHRvCisgICAgICAgIHVzZSB0aGUgaXRlbSwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZQorICAgICAgICBpdGVtLiAgSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZQorICAgICAgICBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuCisKKzEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlCitTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdQorZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKzIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucworZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluLCBvciB0aG9zZSBtYWRlIEZyZWVseSBBdmFpbGFibGUsIG9yIGZyb20KK3RoZSBDb3B5cmlnaHQgSG9sZGVyLiAgQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUKK2NvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkCit0aGF0IHlvdSBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlIHN0YXRpbmcgaG93IGFuZAord2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlCitmb2xsb3dpbmc6CisKKyAgICBhKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlIG1ha2UgdGhlbQorICAgIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuCisgICAgZXF1aXZhbGVudCBtZWRpdW0sIG9yIHBsYWNpbmcgdGhlIG1vZGlmaWNhdGlvbnMgb24gYSBtYWpvciBuZXR3b3JrCisgICAgYXJjaGl2ZSBzaXRlIGFsbG93aW5nIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gdGhlbSwgb3IgYnkgYWxsb3dpbmcgdGhlCisgICAgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbgorICAgIG9mIHRoZSBQYWNrYWdlLgorCisgICAgYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLgorCisgICAgYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdAorICAgIHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUKKyAgICBhIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIHRoYXQgY2xlYXJseQorICAgIGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyAgICBlKSBwZXJtaXQgYW5kIGVuY291cmdlIGFueW9uZSB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSBtb2RpZmllZCBQYWNrYWdlCisgICAgICAgcGVybWlzc2lvbiB0byBtYWtlIHlvdXIgbW9kaWZpY2F0aW9ucyBGcmVlbHkgQXZhaWxhYmxlCisgICAgICAgaW4gc29tZSBzcGVjaWZpYyB3YXkuCisKKworNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IKK2V4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsCisgICAgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KSBvbiB3aGVyZQorICAgIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGIpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mCisgICAgdGhlIFBhY2thZ2Ugd2l0aCB5b3VyIG1vZGlmaWNhdGlvbnMuCisKKyAgICBjKSBnaXZlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5CisgICAgZG9jdW1lbnQgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyCisgICAgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyAgICBlKSBvZmZlciB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlIFBhY2thZ2UsIHdpdGggeW91cgorICAgICAgIG1vZGlmaWNhdGlvbnMsIGJ5IG1haWwgb3JkZXIuCisKKzUuIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuCitJZiB5b3Ugb2ZmZXIgc3VwcG9ydCBmb3IgdGhpcyBQYWNrYWdlLCB5b3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UKK2ZvciB0aGF0IHN1cHBvcnQuICBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBsaWNlbnNlIGZlZSBmb3IgdGhlIHJpZ2h0IHRvIHVzZQordGhpcyBQYWNrYWdlIGl0c2VsZi4gIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGgKK290aGVyIChwb3NzaWJseSBjb21tZXJjaWFsIGFuZCBwb3NzaWJseSBub25mcmVlKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEKK2xhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCBhbmQgcG9zc2libHkgbm9uZnJlZSkgc29mdHdhcmUgZGlzdHJpYnV0aW9uLAorYW5kIGNoYXJnZSBsaWNlbnNlIGZlZXMgZm9yIG90aGVyIHBhcnRzIG9mIHRoYXQgc29mdHdhcmUgZGlzdHJpYnV0aW9uLAorcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzIFBhY2thZ2UgYXMgYSBwcm9kdWN0IG9mIHlvdXIgb3duLgorSWYgdGhlIFBhY2thZ2UgaW5jbHVkZXMgYW4gaW50ZXJwcmV0ZXIsIFlvdSBtYXkgZW1iZWQgdGhpcyBQYWNrYWdlYHMKK2ludGVycHJldGVyIHdpdGhpbiBhbiBleGVjdXRhYmxlIG9mIHlvdXJzIChieSBsaW5raW5nKTsgdGhpcyBzaGFsbCBiZQorY29uc3RydWVkIGFzIGEgbWVyZSBmb3JtIG9mIGFnZ3JlZ2F0aW9uLCBwcm92aWRlZCB0aGF0IHRoZSBjb21wbGV0ZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgaW50ZXJwcmV0ZXIgaXMgc28gZW1iZWRkZWQuCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzCitvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwKK3VuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob2V2ZXIgZ2VuZXJhdGVkCit0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCitQYWNrYWdlLiAgSWYgc3VjaCBzY3JpcHRzIG9yIGxpYnJhcnkgZmlsZXMgYXJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCitQYWNrYWdlIHZpYSB0aGUgc28tY2FsbGVkICJ1bmR1bXAiIG9yICJ1bmV4ZWMiIG1ldGhvZHMgb2YgcHJvZHVjaW5nIGEKK2JpbmFyeSBleGVjdXRhYmxlIGltYWdlLCB0aGVuIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGFuIGltYWdlIHNoYWxsCituZWl0aGVyIGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2Ugbm9yIHNoYWxsIGl0CitmYWxsIHVuZGVyIHRoZSByZXN0cmljdGlvbnMgb2YgUGFyYWdyYXBocyAzIGFuZCA0LCBwcm92aWRlZCB0aGF0IHlvdSBkbworbm90IHJlcHJlc2VudCBzdWNoIGFuIGV4ZWN1dGFibGUgaW1hZ2UgYXMgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMKK1BhY2thZ2UuCisKKzcuIEMgc3Vicm91dGluZXMgKG9yIGNvbXBhcmFibHkgY29tcGlsZWQgc3Vicm91dGluZXMgaW4gb3RoZXIKK2xhbmd1YWdlcykgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2UgaW4gb3JkZXIgdG8KK2VtdWxhdGUgc3Vicm91dGluZXMgYW5kIHZhcmlhYmxlcyBvZiB0aGUgbGFuZ3VhZ2UgZGVmaW5lZCBieSB0aGlzCitQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZQorZXF1aXZhbGVudCBvZiBpbnB1dCBhcyBpbiBQYXJhZ3JhcGggNiwgcHJvdmlkZWQgdGhlc2Ugc3Vicm91dGluZXMgZG8KK25vdCBjaGFuZ2UgdGhlIGxhbmd1YWdlIGluIGFueSB3YXkgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBmYWlsIHRoZQorcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIGxhbmd1YWdlLgorCis4LiBBZ2dyZWdhdGlvbiBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZSB3aXRoIGEgY29tbWVyY2lhbAorZGlzdHJpYnV0aW9uIGlzIGFsd2F5cyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgdXNlIG9mIHRoaXMgUGFja2FnZQoraXMgZW1iZWRkZWQ7IHRoYXQgaXMsIHdoZW4gbm8gb3ZlcnQgYXR0ZW1wdCBpcyBtYWRlIHRvIG1ha2UgdGhpcyBQYWNrYWdlYHMKK2ludGVyZmFjZXMgdmlzaWJsZSB0byB0aGUgZW5kIHVzZXIgb2YgdGhlIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLgorU3VjaCB1c2Ugc2hhbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuCisKKzkuIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisxMC4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyAgICBUaGUgRW5kCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0RTU1NMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRFNTU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1OWRmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0RTU1NMCkBAIC0wLDAgKzEsNDkgQEAKK0NvcHlyaWdodAorLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMTk5Ny0yMDAxIE5vcm1hbiBXYWxzaAorCitUaGUgb3JpZ2luYWwgaW5zcGlyYXRpb24gZm9yIHRoZXNlIHN0eWxlc2hlZXRzIGNhbWUgZnJvbSB0aGUKK3dvcmsgb2YgSm9uIEJvc2FrLCBBbmRlcnMgQmVyZ2x1bmQsIFRvbnkgR3JhaGFtLCBUZXJyeSBBbGxlbiwKK0phbWVzIENsYXJrLCBhbmQgbWFueSBvdGhlcnMuICBJIGFtIGluZGVidGVkIHRvIHRoZW0gYW5kIHRvIHRoZQorY29tbXVuaXR5IG9mIHVzZXJzIG9uIGRzc3NsaXN0QG11bGJlcnJ5dGVjaC5jb20gZm9yIG1ha2luZworc3Vic3RhbnRpYWwgY29udHJpYnV0aW9ucyB0byB0aGlzIHdvcmsgYW5kIGZvciBhbnN3ZXJpbmcgbXkgbWFueQorcXVlc3Rpb25zLgorCitUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBKYWRlOgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KK2ZpbGVzICh0aGUgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZXMgb2YgaW5kaXZpZHVhbHMKK2NyZWRpdGVkIHdpdGggY29udHJpYnV0aW9uIHRvIHRoaXMgc29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIKK2RlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24KK2Zyb20gdGhlIGluZGl2aWR1YWxzIGluIHF1ZXN0aW9uLgorCitBbnkgc3R5bGVzaGVldCBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB0aGF0IGlzIHB1YmxpY2FsbHkKK2Rpc3RyaWJ1dGVkIHdpbGwgYmUgaWRlbnRpZmllZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIHRoZQordmVyc2lvbiBzdHJpbmdzIGluIGFueSBkZXJpdmVkIFNvZnR3YXJlIHdpbGwgYmUgY2hhbmdlZCBzbyB0aGF0CitubyBwb3NzaWJpbGl0eSBvZiBjb25mdXNpb24gYmV0d2VlbiB0aGUgZGVyaXZlZCBwYWNrYWdlIGFuZCB0aGlzCitTb2Z0d2FyZSB3aWxsIGV4aXN0LgorCitXYXJyYW50eQorLS0tLS0tLS0KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBOT1JNQU4gV0FMU0ggT1IgQU5ZIE9USEVSCitDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKK09USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzhiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMS4wCkBAIC0wLDAgKzEsNTUgQEAKKworVGhpcyBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcwordG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIKKyh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcKK3RoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworQ29weXJpZ2h0IChjKSA8eWVhcj4gPGNvcHlyaWdodCBob2xkZXJzPgorCitMaWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdmVyc2lvbiAxLjAKKworVGhpcyBPcmlnaW5hbCBXb3JrLCBpbmNsdWRpbmcgc29mdHdhcmUsIHNvdXJjZSBjb2RlLCBkb2N1bWVudHMsCitvciBvdGhlciByZWxhdGVkIGl0ZW1zLCBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcihzKQorc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlLiBCeQorb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIE9yaWdpbmFsIFdvcmssIHlvdSBhZ3JlZSB0aGF0IHlvdQoraGF2ZSByZWFkLCB1bmRlcnN0YW5kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2U6CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQKK3N1YmxpY2Vuc2UgdGhpcyBPcmlnaW5hbCBXb3JrIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiwgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGZvciBhbnkgcHVycG9zZSwgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgdG8gdGhlCitjb3B5cmlnaHQgaG9sZGVyKHMpIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZQorZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgcG9ydGlvbnMgdGhlcmVvZiwKK2luY2x1ZGluZyBtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmVzLCB0aGF0IHlvdSBtYWtlOgorCisKK1RoZSBmdWxsIHRleHQgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8KK3VzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay4KKworCitBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kCitjb25kaXRpb25zLgorCisKKworTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIGluY2x1ZGluZyB0aGUKK2RhdGUgdGhlIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKK0FueSBtb2RpZmljYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG11c3QgYmUgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIG1hbm5lciBhcwordG8gYXZvaWQgYW55IGNvbmZ1c2lvbiB3aXRoIHRoZSBPcmlnaW5hbCBXb3JrIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCitDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVyKHMpIG1heSBOT1QgYmUgdXNlZAoraW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIE9yaWdpbmFsIG9yIERlcml2YXRpdmUKK1dvcmtzIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluCit0aGUgT3JpZ2luYWwgV29yayBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcworcmVtYWluIHdpdGggdGhlIGNvcHlyaWdodCBob2xkZXJzLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGM5OWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTIuMApAQCAtMCwwICsxLDk5IEBACisKK0VkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHBsYWluIHRleHQpCitFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZQorCitWZXJzaW9uIDIuMCwgQXByaWwgMjAwNworCitodHRwOi8vd3d3Lm9zZWR1Lm9yZy9saWNlbnNlcy8KKworVGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHZlcnNpb24gMi4wICgiRUNMIikgY29uc2lzdHMgb2YgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSwgbW9kaWZpZWQgdG8gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgcGF0ZW50IGdyYW50IGluIHNlY3Rpb24gMyB0byBiZSBzcGVjaWZpYyB0byB0aGUgbmVlZHMgb2YgdGhlIGVkdWNhdGlvbiBjb21tdW5pdGllcyB1c2luZyB0aGlzIGxpY2Vuc2UuIFRoZSBvcmlnaW5hbCBBcGFjaGUgMi4wIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKzEuIERlZmluaXRpb25zLgorCisiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZSBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbiBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIiBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50IHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dCBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZSBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKzMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLgorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gQW55IHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgaGVyZWJ5IHdpdGggcmVzcGVjdCB0byBjb250cmlidXRpb25zIGJ5IGFuIGluZGl2aWR1YWwgZW1wbG95ZWQgYnkgYW4gaW5zdGl0dXRpb24gb3Igb3JnYW5pemF0aW9uIGlzIGxpbWl0ZWQgdG8gcGF0ZW50IGNsYWltcyB3aGVyZSB0aGUgaW5kaXZpZHVhbCB0aGF0IGlzIHRoZSBhdXRob3Igb2YgdGhlIFdvcmsgaXMgYWxzbyB0aGUgaW52ZW50b3Igb2YgdGhlIHBhdGVudCBjbGFpbXMgbGljZW5zZWQsIGFuZCB3aGVyZSB0aGUgb3JnYW5pemF0aW9uIG9yIGluc3RpdHV0aW9uIGhhcyB0aGUgcmlnaHQgdG8gZ3JhbnQgc3VjaCBsaWNlbnNlIHVuZGVyIGFwcGxpY2FibGUgZ3JhbnQgYW5kIHJlc2VhcmNoIGZ1bmRpbmcgYWdyZWVtZW50cy4gTm8gb3RoZXIgZXhwcmVzcyBvciBpbXBsaWVkIGxpY2Vuc2VzIGFyZSBncmFudGVkLgorCis0LiBSZWRpc3RyaWJ1dGlvbi4KKworWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1lvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKK1lvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKK1lvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCitJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cyBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0IGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24gbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZCBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCitZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGggdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLgorCitVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLCBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCis2LiBUcmFkZW1hcmtzLgorCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaCBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCis5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuCisKK1doaWxlIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB0byB5b3VyIHdvcmsKKworVG8gYXBwbHkgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoCit0aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5CiticmFja2V0cyAiW10iIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uCisoRG9uYHQgaW5jbHVkZSB0aGUgYnJhY2tldHMhKSBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlCithcHByb3ByaWF0ZSBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZAordGhhdCBhIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbgordGhlIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgoraWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdIExpY2Vuc2VkIHVuZGVyIHRoZQorIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5Cisgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorIGh0dHA6Ly93d3cub3NlZHUub3JnL2xpY2Vuc2VzL0VDTC0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCisgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcworIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRURMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VETC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiMWViMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VETC0xLjAKQEAgLTAsMCArMSwxMyBAQAorRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSAtIHYgMS4wCisKK0NvcHlyaWdodCAoYykgMjAwNywgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgbGljZW5zb3JzLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5OTYwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0xLjAKQEAgLTAsMCArMSwyNSBAQAorCitFaWZmZWwgRm9ydW0gTGljZW5zZSwgdmVyc2lvbiAxCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kL29yIGRpc3RyaWJ1dGUKK3RoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDoKKworICAtIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCB1bmNoYW5nZWQKKworICAtIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBwYWNrYWdlLCB3aGV0aGVyIG1vZGlmaWVkIG9yIG5vdCwKKyAgICBpbmNsdWRlcyB0aGlzIGZpbGUKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgYWxzbyBncmFudGVkIHRvIGRpc3RyaWJ1dGUgYmluYXJ5IHByb2dyYW1zIHdoaWNoCitkZXBlbmQgb24gdGhpcyBwYWNrYWdlLCBwcm92aWRlZCB0aGF0OgorCisgIC0gaWYgdGhlIGJpbmFyeSBwcm9ncmFtIGRlcGVuZHMgb24gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMKKyAgICBwYWNrYWdlLCB5b3UgbXVzdCBwdWJsaWNseSByZWxlYXNlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMKKyAgICBwYWNrYWdlCisKK1RISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLiBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFBBQ0tBR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzdmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMi4wCkBAIC0wLDAgKzEsMTIgQEAKKworRWlmZmVsIEZvcnVtIExpY2Vuc2UsIHZlcnNpb24gMgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZC9vciBkaXN0cmlidXRlIHRoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDoKK2NvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCB1bmNoYW5nZWQsCithbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSwgd2hldGhlciBtb2RpZmllZCBvciBub3QsIGluY2x1ZGVzIHRoaXMgbGljZW5zZSB0ZXh0LgorUGVybWlzc2lvbiBpcyBoZXJlYnkgYWxzbyBncmFudGVkIHRvIGRpc3RyaWJ1dGUgYmluYXJ5IHByb2dyYW1zIHdoaWNoIGRlcGVuZCBvbiB0aGlzIHBhY2thZ2UuIElmIHRoZSBiaW5hcnkgcHJvZ3JhbSBkZXBlbmRzIG9uIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBwdWJsaWNseSByZWxlYXNlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4KKyoqKioqKioqKioqKioqKioqKioqKioqCisKK1RISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBQQUNLQUdFLiAKKyoqKioqKioqKioqKioqKioqKioqKioqCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzZlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FUEwtMS4wCkBAIC0wLDAgKzEsNzIgQEAKKworRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2EpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjoKK2kpIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAoraWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiBgb3JpZ2luYXRlc2AgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKyJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyJQcm9ncmFtIiBtZWFucyB0aGUgQ29udHJpYnV0aW9ucyBkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKworYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCitiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCitjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzMuIFJFUVVJUkVNRU5UUworCitBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2EpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKK2IpIGl0cyBsaWNlbnNlIGFncmVlbWVudDoKK2kpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CitpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CitpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAoraXYpIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2EpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uCitDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uCisKK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yYHMgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50YHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50YHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsIEFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVEYXRhZ3JpZCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVRGF0YWdyaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2ZTUwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVRGF0YWdyaWQKQEAgLTAsMCArMSwyOSBAQAorCitFVSBEYXRhR3JpZCBTb2Z0d2FyZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwMSBFVSBEYXRhR3JpZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBzb2Z0d2FyZSBpbmNsdWRlcyB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIHRvIHRoZSBFVSBEYXRhR3JpZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEVVIERhdGFHcmlkLCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cuZXUtZGF0YWdyaWQub3JnLy4KKworSW5zdGFsbGF0aW9uLCB1c2UsIHJlcHJvZHVjdGlvbiwgZGlzcGxheSwgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywgYXJlIHBlcm1pdHRlZC4gQW55IGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIGxpY2Vuc2UgYnkgeW91IG9yIHlvdXIgc3ViLWxpY2Vuc2VlcyBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHRoaXMgc29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYWJvdmUgbGljZW5zZSBzdGF0ZW1lbnQgYXMgd2VsbCBhcyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgaW4gdGhlIHNvZnR3YXJlLCB0aGUgdXNlciBkb2N1bWVudGF0aW9uIGFuZCBhbnkgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHNvZnR3YXJlLgorCisyLiBUaGUgdXNlciBkb2N1bWVudGF0aW9uLCBpZiBhbnksIGluY2x1ZGVkIHdpdGggYSByZWRpc3RyaWJ1dGlvbiwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEVVIERhdGFHcmlkIChodHRwOi8vd3d3LmV1LWRhdGFncmlkLm9yZy8pLiIKKworQWx0ZXJuYXRpdmVseSwgaWYgdGhhdCBpcyB3aGVyZSB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLCB0aGlzIGFja25vd2xlZGdtZW50IG11c3QgYmUgcmVwcm9kdWNlZCBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLgorCiszLiBUaGUgbmFtZXMgIkVERyIsICJFREcgVG9vbGtpdCIsICYjODIyMDtFVSBEYXRhR3JpZCYjODIyMTsgYW5kICJFVSBEYXRhR3JpZCBQcm9qZWN0IiBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHNvZnR3YXJlLCBvciBwcm9kdWN0cyBkZXJpdmVkCit0aGVyZWZyb20sIGV4Y2VwdCB3aXRoIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBieSBoZXAtcHJvamVjdC1ncmlkLWVkZy1saWNlbnNlQGNlcm4uY2guCisKKzQuIFlvdSBhcmUgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIGFueW9uZSB3aXRoIGFueSBidWcgZml4ZXMsIHBhdGNoZXMsIHVwZ3JhZGVzIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlcyBvZiB0aGUgZmVhdHVyZXMsZnVuY3Rpb25hbGl0eSBvciBwZXJmb3JtYW5jZSBvZiB0aGlzIHNvZnR3YXJlIHRoYXQgeW91IG1heSBkZXZlbG9wLiBIb3dldmVyLCBpZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIHlvdXIgbW9kaWZpY2F0aW9ucywgZW5oYW5jZW1lbnRzIG9yIGRlcml2YXRpdmUgd29ya3Mgd2l0aG91dCBjb250ZW1wb3JhbmVvdXNseSByZXF1aXJpbmcgdXNlcnMgdG8gZW50ZXIgaW50byBhIHNlcGFyYXRlIHdyaXR0ZW4gbGljZW5zZSBhZ3JlZW1lbnQsIHRoZW4geW91IGFyZSBkZWVtZWQgdG8gaGF2ZSBncmFudGVkIHBhcnRpY2lwYW50cyBpbiB0aGUgRVUgRGF0YUdyaWQgYSB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGxpY2Vuc2UgdG8gaW5zdGFsbCwgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIG1vZGlmeSwgcmVkaXN0cmlidXRlIGFuZCBzdWItbGljZW5zZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlIHdvcmtzLCB3aGV0aGVyIGluIGJpbmFyeSBvciBzb3VyY2UgY29kZSBmb3JtLCB1bmRlciB0aGUgbGljZW5zZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucy4KKworNS4gRElTQ0xBSU1FUiAKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgRVUgREFUQUdSSUQgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBVU0UgQVJFIERJU0NMQUlNRUQuIFRIRSBFVSBEQVRBR1JJRCBBTkQgQ09OVFJJQlVUT1JTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT04gVEhBVCBUSEUgU09GVFdBUkUsIE1PRElGSUNBVElPTlMsIEVOSEFOQ0VNRU5UUyBPUiBERVJJVkFUSVZFIFdPUktTIFRIRVJFT0YsIFdJTEwgTk9UIElORlJJTkdFIEFOWSBQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVUIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hULiAKKworNi4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVEhFIEVVIERBVEFHUklEIEFORCBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgVE8gTElDRU5TRUUgT1IgT1RIRVIgUEVSU09OUyBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgRVhFTVBMQVJZLCBPUiBQVU5JVElWRSBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTiwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVjYmZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjAKQEAgLTAsMCArMSwxODQgQEAKKworRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UgCitWLjEuMCAKK0VVUEwgJiMxNjk7IHRoZSBFdXJvcGVhbiBDb21tdW5pdHkgMjAwNyAKK1RoaXMgRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UgKHRoZSAmIzgyMjA7RVVQTCYjODIyMTspIGFwcGxpZXMgdG8gdGhlIFdvcmsgb3IgU29mdHdhcmUgKGFzIAorZGVmaW5lZCBiZWxvdykgd2hpY2ggaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS4gQW55IHVzZSBvZiB0aGUgV29yaywgb3RoZXIgCit0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UgaXMgY292ZXJlZCBieSBhIHJpZ2h0IAorb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIFdvcmspLiAKK1RoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugd2hlbiB0aGUgTGljZW5zb3IgKGFzIGRlZmluZWQgCitiZWxvdykgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSAKK09yaWdpbmFsIFdvcms6IAorTGljZW5zZWQgdW5kZXIgdGhlIEVVUEwgVi4xLjAgCitvciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFuIGhpcyB3aWxsaW5nbmVzcyB0byBsaWNlbnNlIHVuZGVyIHRoZSBFVVBMLiAKKzEuIERlZmluaXRpb25zCitJbiB0aGlzIExpY2VuY2UsIHRoZSBmb2xsb3dpbmcgdGVybXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6IAorJiM4NzIyOyBUaGUgTGljZW5jZTogdGhpcyBMaWNlbmNlLiAKKyYjODcyMjsgVGhlIE9yaWdpbmFsIFdvcmsgb3IgdGhlIFNvZnR3YXJlOiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYW5kL29yIGNvbW11bmljYXRlZCBieSAKK3RoZSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2VuY2UsIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSBhbmQgYWxzbyBhcyBFeGVjdXRhYmxlIAorQ29kZSBhcyB0aGUgY2FzZSBtYXkgYmUuIAorJiM4NzIyOyBEZXJpdmF0aXZlIFdvcmtzOiB0aGUgd29ya3Mgb3Igc29mdHdhcmUgdGhhdCBjb3VsZCBiZSBjcmVhdGVkIGJ5IHRoZSBMaWNlbnNlZSwgYmFzZWQgCit1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZi4gVGhpcyBMaWNlbmNlIGRvZXMgbm90IGRlZmluZSB0aGUgCitleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9yIGRlcGVuZGVuY2Ugb24gdGhlIE9yaWdpbmFsIFdvcmsgcmVxdWlyZWQgaW4gb3JkZXIgdG8gCitjbGFzc2lmeSBhIHdvcmsgYXMgYSBEZXJpdmF0aXZlIFdvcms7IHRoaXMgZXh0ZW50IGlzIGRldGVybWluZWQgYnkgY29weXJpZ2h0IGxhdyAKK2FwcGxpY2FibGUgaW4gdGhlIGNvdW50cnkgbWVudGlvbmVkIGluIEFydGljbGUgMTUuICAKKyYjODcyMjsgVGhlIFdvcms6IHRoZSBPcmlnaW5hbCBXb3JrIGFuZC9vciBpdHMgRGVyaXZhdGl2ZSBXb3Jrcy4gCismIzg3MjI7IFRoZSBTb3VyY2UgQ29kZTogdGhlIGh1bWFuLXJlYWRhYmxlIGZvcm0gb2YgdGhlIFdvcmsgd2hpY2ggaXMgdGhlIG1vc3QgCitjb252ZW5pZW50IGZvciBwZW9wbGUgdG8gc3R1ZHkgYW5kIG1vZGlmeS4gCismIzg3MjI7IFRoZSBFeGVjdXRhYmxlIENvZGU6IGFueSBjb2RlIHdoaWNoIGhhcyBnZW5lcmFsbHkgYmVlbiBjb21waWxlZCBhbmQgd2hpY2ggaXMgCittZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSBhIGNvbXB1dGVyIGFzIGEgcHJvZ3JhbS4gCismIzg3MjI7IFRoZSBMaWNlbnNvcjogdGhlIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHRoYXQgIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlIAorV29yayB1bmRlciB0aGUgTGljZW5jZS4gCismIzg3MjI7IENvbnRyaWJ1dG9yKHMpOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1vZGlmaWVzIHRoZSBXb3JrIHVuZGVyIHRoZSAKK0xpY2VuY2UsIG9yIG90aGVyd2lzZSBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgYSBEZXJpdmF0aXZlIFdvcmsuIAorJiM4NzIyOyBUaGUgTGljZW5zZWUgb3IgJiM4MjIwO1lvdSYjODIyMTs6ICBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1ha2VzIGFueSB1c2FnZSBvZiB0aGUgCitTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuICYjODcyMjsgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uOiBhbnkgYWN0IG9mIHNlbGxpbmcsICBnaXZpbmcsIGxlbmRpbmcsIHJlbnRpbmcsIAorZGlzdHJpYnV0aW5nLCBjb21tdW5pY2F0aW5nLCB0cmFuc21pdHRpbmcsIG9yIG90aGVyd2lzZSBtYWtpbmcgYXZhaWxhYmxlLCBvbi1saW5lIG9yIAorb2ZmLWxpbmUsIGNvcGllcyBvZiB0aGUgV29yayBhdCB0aGUgZGlzcG9zYWwgb2YgYW55IG90aGVyIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLiAKKzIuIFNjb3BlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZQorVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3ViLWxpY2Vuc2FibGUgCitsaWNlbmNlIHRvIGRvIHRoZSBmb2xsb3dpbmcsIGZvciB0aGUgZHVyYXRpb24gb2YgY29weXJpZ2h0IHZlc3RlZCBpbiB0aGUgT3JpZ2luYWwgV29yazogCismIzg3MjI7IHVzZSB0aGUgV29yayBpbiBhbnkgY2lyY3Vtc3RhbmNlIGFuZCBmb3IgYWxsIHVzYWdlLCAKKyYjODcyMjsgcmVwcm9kdWNlIHRoZSBXb3JrLCAKKyYjODcyMjsgbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgbWFrZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIFdvcmssIAorJiM4NzIyOyBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljLCBpbmNsdWRpbmcgdGhlIHJpZ2h0IHRvIG1ha2UgYXZhaWxhYmxlIG9yIGRpc3BsYXkgdGhlIFdvcmsgCitvciBjb3BpZXMgdGhlcmVvZiB0byB0aGUgcHVibGljIGFuZCBwZXJmb3JtIHB1YmxpY2x5LCBhcyB0aGUgY2FzZSBtYXkgYmUsIHRoZSBXb3JrLCAKKyYjODcyMjsgZGlzdHJpYnV0ZSB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZiwgCismIzg3MjI7IGxlbmQgYW5kIHJlbnQgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsIAorJiM4NzIyOyBzdWItbGljZW5zZSByaWdodHMgaW4gdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuIAorVGhvc2UgcmlnaHRzIGNhbiBiZSBleGVyY2lzZWQgb24gYW55IG1lZGlhLCAgc3VwcG9ydHMgYW5kIGZvcm1hdHMsIHdoZXRoZXIgbm93IGtub3duIG9yIAorbGF0ZXIgaW52ZW50ZWQsIGFzIGZhciBhcyB0aGUgYXBwbGljYWJsZSBsYXcgcGVybWl0cyBzby4gCitJbiB0aGUgY291bnRyaWVzIHdoZXJlIG1vcmFsIHJpZ2h0cyBhcHBseSwgdGhlIExpY2Vuc29yIHdhaXZlcyBoaXMgcmlnaHQgdG8gZXhlcmNpc2UgaGlzIG1vcmFsIAorcmlnaHQgdG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGxhdyBpbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB0aGUgbGljZW5jZSBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIAoraGVyZSBhYm92ZSBsaXN0ZWQuIAorVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgTGljZW5zZWUgcm95YWx0eS1mcmVlLCBub24gZXhjbHVzaXZlIHVzYWdlIHJpZ2h0cyB0byBhbnkgcGF0ZW50cyAKK2hlbGQgYnkgdGhlIExpY2Vuc29yLCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHVzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgb24gdGhlIFdvcmsgCit1bmRlciB0aGlzIExpY2VuY2UuIAorMy4gQ29tbXVuaWNhdGlvbiBvZiB0aGUgU291cmNlIENvZGUKK1RoZSBMaWNlbnNvciBtYXkgcHJvdmlkZSB0aGUgV29yayBlaXRoZXIgaW4gaXRzIFNvdXJjZSBDb2RlIGZvcm0sIG9yIGFzIEV4ZWN1dGFibGUgQ29kZS4gSWYgCit0aGUgV29yayBpcyBwcm92aWRlZCBhcyBFeGVjdXRhYmxlIENvZGUsICB0aGUgTGljZW5zb3IgcHJvdmlkZXMgaW4gYWRkaXRpb24gYSBtYWNoaW5lcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFdvcmsgdGhhdCB0aGUgCitMaWNlbnNvciBkaXN0cmlidXRlcyBvciBpbmRpY2F0ZXMsIGluIGEgbm90aWNlIGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBhdHRhY2hlZCB0byB0aGUgCitXb3JrLCBhIHJlcG9zaXRvcnkgd2hlcmUgdGhlIFNvdXJjZSBDb2RlIGlzIGVhc2lseSBhbmQgZnJlZWx5IGFjY2Vzc2libGUgZm9yIGFzIGxvbmcgYXMgdGhlIAorTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZSBXb3JrLiAKKzQuIExpbWl0YXRpb25zIG9uIGNvcHlyaWdodAorTm90aGluZyBpbiB0aGlzIExpY2VuY2UgaXMgaW50ZW5kZWQgdG8gZGVwcml2ZSB0aGUgTGljZW5zZWUgb2YgdGhlIGJlbmVmaXRzIGZyb20gYW55IGV4Y2VwdGlvbiAKK29yIGxpbWl0YXRpb24gdG8gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIHJpZ2h0cyBvd25lcnMgaW4gdGhlIE9yaWdpbmFsIFdvcmsgb3IgU29mdHdhcmUsIG9mIAordGhlIGV4aGF1c3Rpb24gb2YgdGhvc2UgcmlnaHRzIG9yIG9mIG90aGVyIGFwcGxpY2FibGUgbGltaXRhdGlvbnMgdGhlcmV0by4gCis1LiBPYmxpZ2F0aW9ucyBvZiB0aGUgTGljZW5zZWUKK1RoZSBncmFudCBvZiB0aGUgcmlnaHRzIG1lbnRpb25lZCBhYm92ZSBpcyBzdWJqZWN0IHRvIHNvbWUgcmVzdHJpY3Rpb25zIGFuZCBvYmxpZ2F0aW9ucyAKK2ltcG9zZWQgb24gdGhlIExpY2Vuc2VlLiBUaG9zZSBvYmxpZ2F0aW9ucyBhcmUgdGhlIGZvbGxvd2luZzogQXR0cmlidXRpb24gcmlnaHQ6IHRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrcyBub3RpY2VzIAorYW5kIGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFRoZSBMaWNlbnNlZSBtdXN0IAoraW5jbHVkZSBhIGNvcHkgb2Ygc3VjaCBub3RpY2VzIGFuZCBhIGNvcHkgb2YgdGhlIExpY2VuY2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGhlL3NoZSAKK2Rpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0IGNhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gY2FycnkgCitwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhlIFdvcmsgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIHRoZSBkYXRlIG9mIG1vZGlmaWNhdGlvbi4gCitDb3B5bGVmdCBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBkaXN0cmlidXRlcyBhbmQvb3IgIGNvbW11bmljYXRlcyBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIAorV29ya3Mgb3IgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGlzIERpc3RyaWJ1dGlvbiBhbmQvb3IgCitDb21tdW5pY2F0aW9uIHdpbGwgYmUgZG9uZSB1bmRlciB0aGUgdGVybXMgIG9mIHRoaXMgTGljZW5jZS4gVGhlIExpY2Vuc2VlIChiZWNvbWluZyAKK0xpY2Vuc29yKSBjYW5ub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yICBjb25kaXRpb25zIG9uIHRoZSBXb3JrIG9yIAorRGVyaXZhdGl2ZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAKK0NvbXBhdGliaWxpdHkgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgRGlzdHJpYnV0ZXMgYW5kL29yIENvbW11bmljYXRlcyBEZXJpdmF0aXZlIFdvcmtzIG9yIAorY29waWVzIHRoZXJlb2YgYmFzZWQgdXBvbiBib3RoIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBhbm90aGVyIHdvcmsgbGljZW5zZWQgdW5kZXIgYSAKK0NvbXBhdGlibGUgTGljZW5jZSwgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gY2FuIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIAordGhpcyBDb21wYXRpYmxlIExpY2VuY2UuIEZvciB0aGUgc2FrZSBvZiB0aGlzIGNsYXVzZSwgJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZSYjODIyMTsgcmVmZXJzIHRvIHRoZSAKK2xpY2VuY2VzIGxpc3RlZCBpbiB0aGUgYXBwZW5kaXggYXR0YWNoZWQgdG8gIHRoaXMgTGljZW5jZS4gU2hvdWxkIHRoZSAgTGljZW5zZWUmIzgyMTc7cyBvYmxpZ2F0aW9ucyAKK3VuZGVyIHRoZSBDb21wYXRpYmxlIExpY2VuY2UgY29uZmxpY3Qgd2l0aCBoaXMvaGVyICBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2VuY2UsIHRoZSAKK29ibGlnYXRpb25zIG9mIHRoZSBDb21wYXRpYmxlIExpY2VuY2Ugc2hhbGwgcHJldmFpbC4gIAorUHJvdmlzaW9uIG9mIFNvdXJjZSBDb2RlOiBXaGVuIGRpc3RyaWJ1dGluZyBhbmQvb3IgY29tbXVuaWNhdGluZyBjb3BpZXMgb2YgdGhlIFdvcmssIHRoZSAKK0xpY2Vuc2VlIHdpbGwgcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb3IgIGluZGljYXRlIGEgcmVwb3NpdG9yeSAKK3doZXJlIHRoaXMgU291cmNlIHdpbGwgYmUgZWFzaWx5IGFuZCBmcmVlbHkgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHRoZSBMaWNlbnNlZSBjb250aW51ZXMgdG8gCitkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUgV29yay4gCitMZWdhbCBQcm90ZWN0aW9uOiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCAKK3NlcnZpY2UgbWFya3MsIG9yIG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIAoraW4gZGVzY3JpYmluZyB0aGUgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgY29weXJpZ2h0IG5vdGljZS4gCis2LiBDaGFpbiBvZiBBdXRob3JzaGlwCitUaGUgb3JpZ2luYWwgTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIHRoZSBPcmlnaW5hbCBXb3JrIGdyYW50ZWQgaGVyZXVuZGVyIGlzIAorb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZCBhdXRob3JpdHkgdG8gZ3JhbnQgCit0aGUgTGljZW5jZS4gCitFYWNoIENvbnRyaWJ1dG9yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgbW9kaWZpY2F0aW9ucyBoZS9zaGUgYnJpbmdzIHRvIHRoZSBXb3JrIAorYXJlIG93bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQgYXV0aG9yaXR5IHRvIAorZ3JhbnQgdGhlIExpY2VuY2UuIAorRWFjaCB0aW1lIFlvdSwgYXMgYSBMaWNlbnNlZSwgIHJlY2VpdmUgdGhlIFdvcmssIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBhbmQgc3Vic2VxdWVudCAKK0NvbnRyaWJ1dG9ycyBncmFudCBZb3UgYSBsaWNlbmNlIHRvIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFdvcmssIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIAorTGljZW5jZS4gCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5CitUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cyBjb250cmlidXRvcnMuIEl0IAoraXMgbm90IGEgZmluaXNoZWQgd29yayBhbmQgbWF5IHRoZXJlZm9yZSBjb250YWluIGRlZmVjdHMgb3IgJiM4MjIwO2J1Z3MmIzgyMjE7IGluaGVyZW50IHRvIHRoaXMgdHlwZSBvZiAKK3NvZnR3YXJlIGRldmVsb3BtZW50LiAKK0ZvciB0aGUgYWJvdmUgcmVhc29uLCB0aGUgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgTGljZW5jZSBvbiBhbiAmIzgyMjA7YXMgaXMmIzgyMjE7IGJhc2lzIGFuZCB3aXRob3V0IAord2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBtZXJjaGFudGFiaWxpdHksIAorZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIGFic2VuY2Ugb2YgZGVmZWN0cyBvciBlcnJvcnMsIGFjY3VyYWN5LCBub24taW5mcmluZ2VtZW50IG9mIAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcyBzdGF0ZWQgaW4gQXJ0aWNsZSA2IG9mIHRoaXMgTGljZW5jZS4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBMaWNlbmNlIGFuZCBhIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50IG9mIAorYW55IHJpZ2h0cyB0byB0aGUgV29yay4gCis4LiBEaXNjbGFpbWVyIG9mIExpYWJpbGl0eQorRXhjZXB0IGluIHRoZSBjYXNlcyBvZiB3aWxmdWwgbWlzY29uZHVjdCBvciBkYW1hZ2VzIGRpcmVjdGx5IGNhdXNlZCB0byBuYXR1cmFsIHBlcnNvbnMsIHRoZSAKK0xpY2Vuc29yIHdpbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0IG9yIGluZGlyZWN0LCBtYXRlcmlhbCBvciBtb3JhbCwgZGFtYWdlcyBvZiAKK2FueSBraW5kLCBhcmlzaW5nIG91dCBvZiAgdGhlIExpY2VuY2Ugb3Igb2YgdGhlIHVzZSBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgCitkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgCithbnkgY29tbWVyY2lhbCBkYW1hZ2UsIGV2ZW4gaWYgdGhlIExpY2Vuc29yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlICBwb3NzaWJpbGl0eSBvZiBzdWNoIAorZGFtYWdlLiBIb3dldmVyLCB0aGUgTGljZW5zb3Igd2lsbCBiZSBsaWFibGUgdW5kZXIgc3RhdHV0b3J5IHByb2R1Y3QgbGlhYmlsaXR5IGxhd3MgYXMgZmFyIHN1Y2ggCitsYXdzIGFwcGx5IHRvIHRoZSBXb3JrLiAKKzkuIEFkZGl0aW9uYWwgYWdyZWVtZW50cworV2hpbGUgZGlzdHJpYnV0aW5nIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MsIFlvdSBtYXkgY2hvb3NlIHRvIGNvbmNsdWRlIGFuIAorYWRkaXRpb25hbCBhZ3JlZW1lbnQgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlICBvZiBzdXBwb3J0LCB3YXJyYW50eSwgCitpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igc2VydmljZXMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5jZS4gCitIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiB5b3VyIG93biBiZWhhbGYgYW5kIG9uIHlvdXIgCitzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBvciBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIAorWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIAorYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IHN1Y2ggQ29udHJpYnV0b3IgYnkgdGhlIGZhY3QgWW91IGhhdmUgYWNjZXB0ZWQgYW55IHN1Y2ggCit3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4gCisxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZQorVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbmNlIGNhbiBiZSBhY2NlcHRlZCBieSBjbGlja2luZyBvbiBhbiBpY29uICYjODIyMDtJIGFncmVlJiM4MjIxOyBwbGFjZWQgdW5kZXIgCit0aGUgYm90dG9tIG9mIGEgd2luZG93IGRpc3BsYXlpbmcgdGhlIHRleHQgb2YgdGhpcyBMaWNlbmNlIG9yIGJ5IGFmZmlybWluZyBjb25zZW50IGluIGFueSAKK290aGVyIHNpbWlsYXIgd2F5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIG9mIGFwcGxpY2FibGUgbGF3LiBDbGlja2luZyBvbiB0aGF0IGljb24gCitpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2VuY2UgYW5kICBhbGwgb2YgaXRzIHRlcm1zIGFuZCAKK2NvbmRpdGlvbnMuICAKK1NpbWlsYXJseSwgeW91IGlycmV2b2NhYmx5IGFjY2VwdCB0aGlzIExpY2VuY2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgYnkgCitleGVyY2lzaW5nIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgQXJ0aWNsZSAyIG9mIHRoaXMgTGljZW5jZSwgc3VjaCBhcyB0aGUgdXNlIG9mIHRoZSBXb3JrLCAKK3RoZSBjcmVhdGlvbiBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgdGhlIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBieSBZb3UgCitvZiB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZi4gIAorMTEuIEluZm9ybWF0aW9uIHRvIHRoZSBwdWJsaWMKK0luIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljIAorY29tbXVuaWNhdGlvbiBieSBZb3UgKGZvciBleGFtcGxlLCBieSBvZmZlcmluZyB0byBkb3dubG9hZCB0aGUgV29yayBmcm9tIGEgcmVtb3RlIAorbG9jYXRpb24pIHRoZSBkaXN0cmlidXRpb24gY2hhbm5lbCBvciBtZWRpYSAoZm9yIGV4YW1wbGUsIGEgd2Vic2l0ZSkgbXVzdCBhdCBsZWFzdCBwcm92aWRlIHRvIAordGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcgdGhlIGlkZW50aWZpY2F0aW9uIGFuZCAKK2FkZHJlc3Mgb2YgdGhlIExpY2Vuc29yLCB0aGUgTGljZW5jZSBhbmQgdGhlIHdheSBpdCBtYXkgYmUgYWNjZXNzaWJsZSwgY29uY2x1ZGVkLCBzdG9yZWQgYW5kIAorcmVwcm9kdWNlZCBieSB0aGUgTGljZW5zZWUuIAorMTIuIFRlcm1pbmF0aW9uIG9mIHRoZSBMaWNlbmNlCitUaGUgTGljZW5jZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSAKK3RoZSBMaWNlbnNlZSBvZiB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuIAorU3VjaCBhIHRlcm1pbmF0aW9uIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5jZXMgb2YgYW55IHBlcnNvbiB3aG8gaGFzIHJlY2VpdmVkIHRoZSBXb3JrIAorZnJvbSB0aGUgTGljZW5zZWUgdW5kZXIgdGhlIExpY2VuY2UsIHByb3ZpZGVkIHN1Y2ggcGVyc29ucyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggCit0aGUgTGljZW5jZS4gIDEzLiBNaXNjZWxsYW5lb3VzCitXaXRob3V0IHByZWp1ZGljZSBvZiBBcnRpY2xlIDkgYWJvdmUsIHRoZSBMaWNlbmNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBiZXR3ZWVuIAordGhlIFBhcnRpZXMgYXMgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZXVuZGVyLiAKK0lmIGFueSBwcm92aXNpb24gb2YgdGhlIExpY2VuY2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGlzIHdpbGwgbm90IAorYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgTGljZW5jZSBhcyBhIHdob2xlLiBTdWNoIHByb3Zpc2lvbiB3aWxsIGJlIAorY29uc3RydWVkIGFuZC9vciByZWZvcm1lZCBzbyBhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCB2YWxpZCBhbmQgZW5mb3JjZWFibGUuIAorVGhlIEV1cm9wZWFuIENvbW1pc3Npb24gbWF5IHB1dCBpbnRvIGZvcmNlIHRyYW5zbGF0aW9ucyBhbmQvb3IgYmluZGluZyBuZXcgdmVyc2lvbnMgb2YgCit0aGlzIExpY2VuY2UsIHNvIGZhciB0aGlzIGlzIHJlcXVpcmVkIGFuZCByZWFzb25hYmxlLiBOZXcgdmVyc2lvbnMgb2YgdGhlIExpY2VuY2Ugd2lsbCBiZSAKK3B1Ymxpc2hlZCB3aXRoIGEgdW5pcXVlIHZlcnNpb24gbnVtYmVyLiBUaGUgbmV3IHZlcnNpb24gb2YgdGhlIExpY2VuY2UgYmVjb21lcyBiaW5kaW5nIGZvciAKK1lvdSBhcyBzb29uIGFzIFlvdSBiZWNvbWUgYXdhcmUgb2YgaXRzIHB1YmxpY2F0aW9uLiAKKzE0LiBKdXJpc2RpY3Rpb24KK0FueSBsaXRpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFyaXNpbmcgYmV0d2VlbiB0aGUgRXVyb3BlYW4gCitDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55IExpY2Vuc2VlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgQ291cnQgCitvZiBKdXN0aWNlIG9mIHRoZSBFdXJvcGVhbiBDb21tdW5pdGllcywgYXMgbGFpZCBkb3duIGluIGFydGljbGUgMjM4IG9mIHRoZSBUcmVhdHkgZXN0YWJsaXNoaW5nIAordGhlIEV1cm9wZWFuIENvbW11bml0eS4gCitBbnkgbGl0aWdhdGlvbiBhcmlzaW5nIGJldHdlZW4gUGFydGllcywgb3RoZXIgIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFuZCByZXN1bHRpbmcgCitmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgCitjb21wZXRlbnQgY291cnQgd2hlcmUgdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MuIAorMTUuIEFwcGxpY2FibGUgTGF3CitUaGlzIExpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUgRXVyb3BlYW4gVW5pb24gY291bnRyeSB3aGVyZSB0aGUgTGljZW5zb3IgCityZXNpZGVzIG9yIGhhcyBoaXMgcmVnaXN0ZXJlZCBvZmZpY2UuIAorVGhpcyBsaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBCZWxnaWFuIGxhdyBpZjogCismIzg3MjI7IGEgbGl0aWdhdGlvbiBhcmlzZXMgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSAKK0xpY2Vuc2VlOyAKKyYjODcyMjsgdGhlIExpY2Vuc29yLCBvdGhlciB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBoYXMgbm8gcmVzaWRlbmNlIG9yIHJlZ2lzdGVyZWQgCitvZmZpY2UgaW5zaWRlIGEgRXVyb3BlYW4gVW5pb24gY291bnRyeS4gIAorID09PUFwcGVuZGl4CismIzgyMjA7Q29tcGF0aWJsZSBMaWNlbmNlcyYjODIyMTsgYWNjb3JkaW5nIHRvIGFydGljbGUgNSBFVVBMIGFyZTogCismIzg3MjI7IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdi4gMiAKKyYjODcyMjsgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wpIHYuIDIuMSwgdi4gMy4wIAorJiM4NzIyOyBDb21tb24gUHVibGljIExpY2Vuc2Ugdi4gMS4wIAorJiM4NzIyOyBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDEuMCAKKyYjODcyMjsgQ2VjaWxsIHYuIDIuMCAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTFkODRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjEKQEAgLTAsMCArMSwyMDQgQEAKKworRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UKK1YuIDEuMQorRVVQTCAmIzE2OTsgdGhlIEV1cm9wZWFuIENvbW11bml0eSAyMDA3CitUaGlzIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlICh0aGUgJiM4MjIwO0VVUEwmIzgyMjE7KSBhcHBsaWVzIHRvIHRoZSBXb3JrIG9yIFNvZnR3YXJlCisoYXMgZGVmaW5lZCBiZWxvdykgd2hpY2ggaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS4gQW55IHVzZSBvZiB0aGUKK1dvcmssIG90aGVyIHRoYW4gYXMgYXV0aG9yaXNlZCB1bmRlciB0aGlzIExpY2VuY2UgaXMgcHJvaGliaXRlZCAodG8gdGhlIGV4dGVudCBzdWNoIHVzZQoraXMgY292ZXJlZCBieSBhIHJpZ2h0IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBXb3JrKS4KK1RoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugd2hlbiB0aGUgTGljZW5zb3IgKGFzCitkZWZpbmVkIGJlbG93KSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorTGljZW5zZWQgdW5kZXIgdGhlIEVVUEwgVi4xLjEKK29yIGhhcyBleHByZXNzZWQgYnkgYW55IG90aGVyIG1lYW4gaGlzIHdpbGxpbmduZXNzIHRvIGxpY2Vuc2UgdW5kZXIgdGhlIEVVUEwuCisxLiBEZWZpbml0aW9ucworSW4gdGhpcyBMaWNlbmNlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorLSBUaGUgTGljZW5jZTogdGhpcyBMaWNlbmNlLgorLSBUaGUgT3JpZ2luYWwgV29yayBvciB0aGUgU29mdHdhcmU6IHRoZSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBhbmQvb3IgY29tbXVuaWNhdGVkCitieSB0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbmNlLCBhdmFpbGFibGUgYXMgU291cmNlIENvZGUgYW5kIGFsc28gYXMgRXhlY3V0YWJsZQorQ29kZSBhcyB0aGUgY2FzZSBtYXkgYmUuCistIERlcml2YXRpdmUgV29ya3M6IHRoZSB3b3JrcyBvciBzb2Z0d2FyZSB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgYnkgdGhlIExpY2Vuc2VlLAorYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YuIFRoaXMgTGljZW5jZSBkb2VzIG5vdCBkZWZpbmUKK3RoZSBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9yIGRlcGVuZGVuY2Ugb24gdGhlIE9yaWdpbmFsIFdvcmsgcmVxdWlyZWQgaW4gb3JkZXIgdG8KK2NsYXNzaWZ5IGEgd29yayBhcyBhIERlcml2YXRpdmUgV29yazsgdGhpcyBleHRlbnQgaXMgZGV0ZXJtaW5lZCBieSBjb3B5cmlnaHQgbGF3CithcHBsaWNhYmxlIGluIHRoZSBjb3VudHJ5IG1lbnRpb25lZCBpbiBBcnRpY2xlIDE1LgorLSBUaGUgV29yazogdGhlIE9yaWdpbmFsIFdvcmsgYW5kL29yIGl0cyBEZXJpdmF0aXZlIFdvcmtzLgorLSBUaGUgU291cmNlIENvZGU6IHRoZSBodW1hbi1yZWFkYWJsZSBmb3JtIG9mIHRoZSBXb3JrIHdoaWNoIGlzIHRoZSBtb3N0Citjb252ZW5pZW50IGZvciBwZW9wbGUgdG8gc3R1ZHkgYW5kIG1vZGlmeS4KKy0gVGhlIEV4ZWN1dGFibGUgQ29kZTogYW55IGNvZGUgd2hpY2ggaGFzIGdlbmVyYWxseSBiZWVuIGNvbXBpbGVkIGFuZCB3aGljaCBpcworbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgYSBjb21wdXRlciBhcyBhIHByb2dyYW0uCistIFRoZSBMaWNlbnNvcjogdGhlIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcyB0aGUKK1dvcmsgdW5kZXIgdGhlIExpY2VuY2UuCistIENvbnRyaWJ1dG9yKHMpOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1vZGlmaWVzIHRoZSBXb3JrIHVuZGVyIHRoZQorTGljZW5jZSwgb3Igb3RoZXJ3aXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBhIERlcml2YXRpdmUgV29yay4KKy0gVGhlIExpY2Vuc2VlIG9yICYjODIyMDtZb3UmIzgyMjE7OiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1ha2VzIGFueSB1c2FnZSBvZiB0aGUKK1NvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KKy0gRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uOiBhbnkgYWN0IG9mIHNlbGxpbmcsIGdpdmluZywgbGVuZGluZywgcmVudGluZywKK2Rpc3RyaWJ1dGluZywgY29tbXVuaWNhdGluZywgdHJhbnNtaXR0aW5nLCBvciBvdGhlcndpc2UgbWFraW5nIGF2YWlsYWJsZSwgb24tbGluZSBvcgorb2ZmLWxpbmUsIGNvcGllcyBvZiB0aGUgV29yayBvciBwcm92aWRpbmcgYWNjZXNzIHRvIGl0cyBlc3NlbnRpYWwgZnVuY3Rpb25hbGl0aWVzIGF0IHRoZQorZGlzcG9zYWwgb2YgYW55IG90aGVyIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLgorMi4gU2NvcGUgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBMaWNlbmNlCitUaGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUKK2xpY2VuY2UgdG8gZG8gdGhlIGZvbGxvd2luZywgZm9yIHRoZSBkdXJhdGlvbiBvZiBjb3B5cmlnaHQgdmVzdGVkIGluIHRoZQorT3JpZ2luYWwgV29yazoKKy0gdXNlIHRoZSBXb3JrIGluIGFueSBjaXJjdW1zdGFuY2UgYW5kIGZvciBhbGwgdXNhZ2UsCistIHJlcHJvZHVjZSB0aGUgV29yaywKKy0gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgbWFrZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIFdvcmssCistIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMsIGluY2x1ZGluZyB0aGUgcmlnaHQgdG8gbWFrZSBhdmFpbGFibGUgb3IgZGlzcGxheSB0aGUKK1dvcmsgb3IgY29waWVzIHRoZXJlb2YgdG8gdGhlIHB1YmxpYyBhbmQgcGVyZm9ybSBwdWJsaWNseSwgYXMgdGhlIGNhc2UgbWF5IGJlLAordGhlIFdvcmssCistIGRpc3RyaWJ1dGUgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsCistIGxlbmQgYW5kIHJlbnQgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsCistIHN1Yi1saWNlbnNlIHJpZ2h0cyBpbiB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZi4KK1Rob3NlIHJpZ2h0cyBjYW4gYmUgZXhlcmNpc2VkIG9uIGFueSBtZWRpYSwgc3VwcG9ydHMgYW5kIGZvcm1hdHMsIHdoZXRoZXIgbm93Citrbm93biBvciBsYXRlciBpbnZlbnRlZCwgYXMgZmFyIGFzIHRoZSBhcHBsaWNhYmxlIGxhdyBwZXJtaXRzIHNvLgorSW4gdGhlIGNvdW50cmllcyB3aGVyZSBtb3JhbCByaWdodHMgYXBwbHksIHRoZSBMaWNlbnNvciB3YWl2ZXMgaGlzIHJpZ2h0IHRvIGV4ZXJjaXNlIGhpcworbW9yYWwgcmlnaHQgdG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGxhdyBpbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB0aGUgbGljZW5jZSBvZiB0aGUKK2Vjb25vbWljIHJpZ2h0cyBoZXJlIGFib3ZlIGxpc3RlZC4KK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIExpY2Vuc2VlIHJveWFsdHktZnJlZSwgbm9uIGV4Y2x1c2l2ZSB1c2FnZSByaWdodHMgdG8gYW55CitwYXRlbnRzIGhlbGQgYnkgdGhlIExpY2Vuc29yLCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHVzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQKK29uIHRoZSBXb3JrIHVuZGVyIHRoaXMgTGljZW5jZS4KKzMuIENvbW11bmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlCitUaGUgTGljZW5zb3IgbWF5IHByb3ZpZGUgdGhlIFdvcmsgZWl0aGVyIGluIGl0cyBTb3VyY2UgQ29kZSBmb3JtLCBvciBhcyBFeGVjdXRhYmxlCitDb2RlLiBJZiB0aGUgV29yayBpcyBwcm92aWRlZCBhcyBFeGVjdXRhYmxlIENvZGUsIHRoZSBMaWNlbnNvciBwcm92aWRlcyBpbiBhZGRpdGlvbiBhCittYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorV29yayB0aGF0IHRoZSBMaWNlbnNvciBkaXN0cmlidXRlcyBvciBpbmRpY2F0ZXMsIGluIGEgbm90aWNlIGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgYXR0YWNoZWQgdG8gdGhlIFdvcmssIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgU291cmNlIENvZGUgaXMgZWFzaWx5IGFuZCBmcmVlbHkKK2FjY2Vzc2libGUgZm9yIGFzIGxvbmcgYXMgdGhlIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUKK1dvcmsuCis0LiBMaW1pdGF0aW9ucyBvbiBjb3B5cmlnaHQKK05vdGhpbmcgaW4gdGhpcyBMaWNlbmNlIGlzIGludGVuZGVkIHRvIGRlcHJpdmUgdGhlIExpY2Vuc2VlIG9mIHRoZSBiZW5lZml0cyBmcm9tIGFueQorZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIHJpZ2h0cyBvd25lcnMgaW4gdGhlIE9yaWdpbmFsCitXb3JrIG9yIFNvZnR3YXJlLCBvZiB0aGUgZXhoYXVzdGlvbiBvZiB0aG9zZSByaWdodHMgb3Igb2Ygb3RoZXIgYXBwbGljYWJsZSBsaW1pdGF0aW9ucwordGhlcmV0by4KKzUuIE9ibGlnYXRpb25zIG9mIHRoZSBMaWNlbnNlZQorVGhlIGdyYW50IG9mIHRoZSByaWdodHMgbWVudGlvbmVkIGFib3ZlIGlzIHN1YmplY3QgdG8gc29tZSByZXN0cmljdGlvbnMgYW5kIG9ibGlnYXRpb25zCitpbXBvc2VkIG9uIHRoZSBMaWNlbnNlZS4gVGhvc2Ugb2JsaWdhdGlvbnMgYXJlIHRoZSBmb2xsb3dpbmc6CitBdHRyaWJ1dGlvbiByaWdodDogdGhlIExpY2Vuc2VlIHNoYWxsIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmtzCitub3RpY2VzIGFuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBMaWNlbmNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorVGhlIExpY2Vuc2VlIG11c3QgaW5jbHVkZSBhIGNvcHkgb2Ygc3VjaCBub3RpY2VzIGFuZCBhIGNvcHkgb2YgdGhlIExpY2VuY2Ugd2l0aAorZXZlcnkgY29weSBvZiB0aGUgV29yayBoZS9zaGUgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcy4gVGhlIExpY2Vuc2VlIG11c3QKK2NhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBXb3JrIGhhcyBiZWVuCittb2RpZmllZCBhbmQgdGhlIGRhdGUgb2YgbW9kaWZpY2F0aW9uLgorQ29weWxlZnQgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcyBjb3BpZXMgb2YgdGhlCitPcmlnaW5hbCBXb3JrcyBvciBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIHRoaXMgRGlzdHJpYnV0aW9uCithbmQvb3IgQ29tbXVuaWNhdGlvbiB3aWxsIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSBvciBvZiBhIGxhdGVyCit2ZXJzaW9uIG9mIHRoaXMgTGljZW5jZSB1bmxlc3MgdGhlIE9yaWdpbmFsIFdvcmsgaXMgZXhwcmVzc2x5IGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIKK3RoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5jZS4gVGhlIExpY2Vuc2VlIChiZWNvbWluZyBMaWNlbnNvcikgY2Fubm90IG9mZmVyIG9yIGltcG9zZQorYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvbiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmsgdGhhdCBhbHRlciBvcgorcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLgorQ29tcGF0aWJpbGl0eSBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBEaXN0cmlidXRlcyBhbmQvb3IgQ29tbXVuaWNhdGVzIERlcml2YXRpdmUKK1dvcmtzIG9yIGNvcGllcyB0aGVyZW9mIGJhc2VkIHVwb24gYm90aCB0aGUgT3JpZ2luYWwgV29yayBhbmQgYW5vdGhlciB3b3JrCitsaWNlbnNlZCB1bmRlciBhIENvbXBhdGlibGUgTGljZW5jZSwgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gY2FuIGJlCitkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIENvbXBhdGlibGUgTGljZW5jZS4gRm9yIHRoZSBzYWtlIG9mIHRoaXMgY2xhdXNlLAorJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZSYjODIyMTsgcmVmZXJzIHRvIHRoZSBsaWNlbmNlcyBsaXN0ZWQgaW4gdGhlIGFwcGVuZGl4IGF0dGFjaGVkIHRvIHRoaXMKK0xpY2VuY2UuIFNob3VsZCB0aGUgTGljZW5zZWUmIzgyMTc7cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIGNvbmZsaWN0Cit3aXRoIGhpcy9oZXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbmNlLCB0aGUgb2JsaWdhdGlvbnMgb2YgdGhlIENvbXBhdGlibGUgTGljZW5jZQorc2hhbGwgcHJldmFpbC4KK1Byb3Zpc2lvbiBvZiBTb3VyY2UgQ29kZTogV2hlbiBkaXN0cmlidXRpbmcgYW5kL29yIGNvbW11bmljYXRpbmcgY29waWVzIG9mIHRoZQorV29yaywgdGhlIExpY2Vuc2VlIHdpbGwgcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb3IKK2luZGljYXRlIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIFNvdXJjZSB3aWxsIGJlIGVhc2lseSBhbmQgZnJlZWx5IGF2YWlsYWJsZSBmb3IgYXMgbG9uZworYXMgdGhlIExpY2Vuc2VlIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUgV29yay4KK0xlZ2FsIFByb3RlY3Rpb246IFRoaXMgTGljZW5jZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsCit0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IKK3JlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZwordGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuCis2LiBDaGFpbiBvZiBBdXRob3JzaGlwCitUaGUgb3JpZ2luYWwgTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIHRoZSBPcmlnaW5hbCBXb3JrIGdyYW50ZWQKK2hlcmV1bmRlciBpcyBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIKK2FuZCBhdXRob3JpdHkgdG8gZ3JhbnQgdGhlIExpY2VuY2UuCitFYWNoIENvbnRyaWJ1dG9yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgbW9kaWZpY2F0aW9ucyBoZS9zaGUgYnJpbmdzIHRvIHRoZQorV29yayBhcmUgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZAorYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLgorRWFjaCB0aW1lIFlvdSBhY2NlcHQgdGhlIExpY2VuY2UsIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBhbmQgc3Vic2VxdWVudCBDb250cmlidXRvcnMKK2dyYW50IFlvdSBhIGxpY2VuY2UgdG8gdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGUgV29yaywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2VuY2UuCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5CitUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cworY29udHJpYnV0b3JzLiBJdCBpcyBub3QgYSBmaW5pc2hlZCB3b3JrIGFuZCBtYXkgdGhlcmVmb3JlIGNvbnRhaW4gZGVmZWN0cyBvciAmIzgyMjA7YnVncyYjODIyMTsKK2luaGVyZW50IHRvIHRoaXMgdHlwZSBvZiBzb2Z0d2FyZSBkZXZlbG9wbWVudC4KK0ZvciB0aGUgYWJvdmUgcmVhc29uLCB0aGUgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgTGljZW5jZSBvbiBhbiAmIzgyMjA7YXMgaXMmIzgyMjE7IGJhc2lzIGFuZAord2l0aG91dCB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK21lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIGFic2VuY2Ugb2YgZGVmZWN0cyBvciBlcnJvcnMsCithY2N1cmFjeSwgbm9uLWluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG90aGVyIHRoYW4gY29weXJpZ2h0IGFzCitzdGF0ZWQgaW4gQXJ0aWNsZSA2IG9mIHRoaXMgTGljZW5jZS4KK1RoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGUgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZQorZ3JhbnQgb2YgYW55IHJpZ2h0cyB0byB0aGUgV29yay4KKzguIERpc2NsYWltZXIgb2YgTGlhYmlsaXR5CitFeGNlcHQgaW4gdGhlIGNhc2VzIG9mIHdpbGZ1bCBtaXNjb25kdWN0IG9yIGRhbWFnZXMgZGlyZWN0bHkgY2F1c2VkIHRvIG5hdHVyYWwKK3BlcnNvbnMsIHRoZSBMaWNlbnNvciB3aWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCwgbWF0ZXJpYWwgb3IKK21vcmFsLCBkYW1hZ2VzIG9mIGFueSBraW5kLCBhcmlzaW5nIG91dCBvZiB0aGUgTGljZW5jZSBvciBvZiB0aGUgdXNlIG9mIHRoZSBXb3JrLAoraW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIKK2ZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIGxvc3Mgb2YgZGF0YSBvciBhbnkgY29tbWVyY2lhbCBkYW1hZ2UsIGV2ZW4gaWYgdGhlIExpY2Vuc29yCitoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4gSG93ZXZlciwgdGhlIExpY2Vuc29yIHdpbGwgYmUKK2xpYWJsZSB1bmRlciBzdGF0dXRvcnkgcHJvZHVjdCBsaWFiaWxpdHkgbGF3cyBhcyBmYXIgc3VjaCBsYXdzIGFwcGx5IHRvIHRoZSBXb3JrLgorOS4gQWRkaXRpb25hbCBhZ3JlZW1lbnRzCitXaGlsZSBkaXN0cmlidXRpbmcgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcywgWW91IG1heSBjaG9vc2UgdG8KK2NvbmNsdWRlIGFuIGFkZGl0aW9uYWwgYWdyZWVtZW50IHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LAord2FycmFudHksIGluZGVtbml0eSwgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBzZXJ2aWNlcyBjb25zaXN0ZW50IHdpdGggdGhpcworTGljZW5jZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24geW91ciBvd24KK2JlaGFsZiBhbmQgb24geW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBvciBhbnkKK290aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2gKK0NvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBzdWNoCitDb250cmlidXRvciBieSB0aGUgZmFjdCBZb3UgaGF2ZSBhY2NlcHRlZCBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKzEwLiBBY2NlcHRhbmNlIG9mIHRoZSBMaWNlbmNlCitUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgY2FuIGJlIGFjY2VwdGVkIGJ5IGNsaWNraW5nIG9uIGFuIGljb24gJiM4MjIwO0kgYWdyZWUmIzgyMjE7CitwbGFjZWQgdW5kZXIgdGhlIGJvdHRvbSBvZiBhIHdpbmRvdyBkaXNwbGF5aW5nIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5jZSBvciBieQorYWZmaXJtaW5nIGNvbnNlbnQgaW4gYW55IG90aGVyIHNpbWlsYXIgd2F5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIG9mIGFwcGxpY2FibGUKK2xhdy4gQ2xpY2tpbmcgb24gdGhhdCBpY29uIGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMKK0xpY2VuY2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCitTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5CitleGVyY2lzaW5nIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgQXJ0aWNsZSAyIG9mIHRoaXMgTGljZW5jZSwgc3VjaCBhcyB0aGUgdXNlIG9mCit0aGUgV29yaywgdGhlIGNyZWF0aW9uIGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBvciB0aGUgRGlzdHJpYnV0aW9uIGFuZC9vcgorQ29tbXVuaWNhdGlvbiBieSBZb3Ugb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuCisxMS4gSW5mb3JtYXRpb24gdG8gdGhlIHB1YmxpYworSW4gY2FzZSBvZiBhbnkgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIG9mIHRoZSBXb3JrIGJ5IG1lYW5zIG9mIGVsZWN0cm9uaWMKK2NvbW11bmljYXRpb24gYnkgWW91IChmb3IgZXhhbXBsZSwgYnkgb2ZmZXJpbmcgdG8gZG93bmxvYWQgdGhlIFdvcmsgZnJvbSBhCityZW1vdGUgbG9jYXRpb24pIHRoZSBkaXN0cmlidXRpb24gY2hhbm5lbCBvciBtZWRpYSAoZm9yIGV4YW1wbGUsIGEgd2Vic2l0ZSkgbXVzdCBhdAorbGVhc3QgcHJvdmlkZSB0byB0aGUgcHVibGljIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3IHJlZ2FyZGluZwordGhlIExpY2Vuc29yLCB0aGUgTGljZW5jZSBhbmQgdGhlIHdheSBpdCBtYXkgYmUgYWNjZXNzaWJsZSwgY29uY2x1ZGVkLCBzdG9yZWQgYW5kCityZXByb2R1Y2VkIGJ5IHRoZSBMaWNlbnNlZS4KKzEyLiBUZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5jZQorVGhlIExpY2VuY2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueQorYnJlYWNoIGJ5IHRoZSBMaWNlbnNlZSBvZiB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuCitTdWNoIGEgdGVybWluYXRpb24gd2lsbCBub3QgdGVybWluYXRlIHRoZSBsaWNlbmNlcyBvZiBhbnkgcGVyc29uIHdobyBoYXMgcmVjZWl2ZWQgdGhlCitXb3JrIGZyb20gdGhlIExpY2Vuc2VlIHVuZGVyIHRoZSBMaWNlbmNlLCBwcm92aWRlZCBzdWNoIHBlcnNvbnMgcmVtYWluIGluIGZ1bGwKK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5jZS4KKzEzLiBNaXNjZWxsYW5lb3VzCitXaXRob3V0IHByZWp1ZGljZSBvZiBBcnRpY2xlIDkgYWJvdmUsIHRoZSBMaWNlbmNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudAorYmV0d2VlbiB0aGUgUGFydGllcyBhcyB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJldW5kZXIuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbmNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhpcword2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgTGljZW5jZSBhcyBhIHdob2xlLiBTdWNoIHByb3Zpc2lvbgord2lsbCBiZSBjb25zdHJ1ZWQgYW5kL29yIHJlZm9ybWVkIHNvIGFzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK1RoZSBFdXJvcGVhbiBDb21taXNzaW9uIG1heSBwdWJsaXNoIG90aGVyIGxpbmd1aXN0aWMgdmVyc2lvbnMgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhpcyBMaWNlbmNlLCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZSwgd2l0aG91dCByZWR1Y2luZyB0aGUgc2NvcGUgb2YKK3RoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZS4gTmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbmNlIHdpbGwgYmUgcHVibGlzaGVkIHdpdGgKK2EgdW5pcXVlIHZlcnNpb24gbnVtYmVyLgorQWxsIGxpbmd1aXN0aWMgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbmNlLCBhcHByb3ZlZCBieSB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGF2ZQoraWRlbnRpY2FsIHZhbHVlLiBQYXJ0aWVzIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbGluZ3Vpc3RpYyB2ZXJzaW9uIG9mIHRoZWlyIGNob2ljZS4KKzE0LiBKdXJpc2RpY3Rpb24KK0FueSBsaXRpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFyaXNpbmcgYmV0d2VlbiB0aGUKK0V1cm9wZWFuIENvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgTGljZW5zZWUsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUKK2p1cmlzZGljdGlvbiBvZiB0aGUgQ291cnQgb2YgSnVzdGljZSBvZiB0aGUgRXVyb3BlYW4gQ29tbXVuaXRpZXMsIGFzIGxhaWQgZG93biBpbgorYXJ0aWNsZSAyMzggb2YgdGhlIFRyZWF0eSBlc3RhYmxpc2hpbmcgdGhlIEV1cm9wZWFuIENvbW11bml0eS4KK0FueSBsaXRpZ2F0aW9uIGFyaXNpbmcgYmV0d2VlbiBQYXJ0aWVzLCBvdGhlciB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhbmQKK3Jlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlCitqdXJpc2RpY3Rpb24gb2YgdGhlIGNvbXBldGVudCBjb3VydCB3aGVyZSB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBjb25kdWN0cyBpdHMgcHJpbWFyeQorYnVzaW5lc3MuCisxNS4gQXBwbGljYWJsZSBMYXcKK1RoaXMgTGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5IHdoZXJlIHRoZQorTGljZW5zb3IgcmVzaWRlcyBvciBoYXMgaGlzIHJlZ2lzdGVyZWQgb2ZmaWNlLgorVGhpcyBsaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBCZWxnaWFuIGxhdyBpZjoKKy0gYSBsaXRpZ2F0aW9uIGFyaXNlcyBiZXR3ZWVuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55CitMaWNlbnNlZTsKKy0gdGhlIExpY2Vuc29yLCBvdGhlciB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBoYXMgbm8gcmVzaWRlbmNlIG9yCityZWdpc3RlcmVkIG9mZmljZSBpbnNpZGUgYSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5LgorPT09CitBcHBlbmRpeAorJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZXMmIzgyMjE7IGFjY29yZGluZyB0byBhcnRpY2xlIDUgRVVQTCBhcmU6CistIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHTlUgR1BMKSB2LiAyCistIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMKSB2LiAyLjEsIHYuIDMuMAorLSBDb21tb24gUHVibGljIExpY2Vuc2Ugdi4gMS4wCistIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMS4wCistIENlY2lsbCB2LiAyLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2Q3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbGZ1dGlscy1FeGNlcHRpb24KQEAgLTAsMCArMSwxMiBAQAorICAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgbGltaXRzIG9mIHRoZSBFeGNlcHRpb24gdW5kZXIgd2hpY2ggeW91IGFyZSBhbGxvd2VkCisgICB0byBkaXN0cmlidXRlIE5vbi1HUEwgQ29kZSBpbiBsaW5rZWQgY29tYmluYXRpb24gd2l0aCBSZWQgSGF0IGVsZnV0aWxzLgorICAgRm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UsIHBsZWFzZSBzZWUgb25lIG9mIHRoZSBoZWFkZXIgZmlsZXMKKyAgIGluY2x1ZGVkIHdpdGggdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gb3IgdGhlIGZpbGUgQ09QWUlORyBmb3VuZCBpbiB0aGUKKyAgIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZS4KKworICAgVGhlIEFwcHJvdmVkIEludGVyZmFjZXMgYXJlIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gdGhlIGZpbGVzOgorCisgICBsaWJlbGYuaAorICAgbGliZHcuaAorICAgbGliZHdmbC5oCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VudGVzc2EgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbnRlc3NhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZGFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbnRlc3NhCkBAIC0wLDAgKzEsMjAgQEAKKworRW50ZXNzYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uLiAxLjAKK0NvcHlyaWdodCAoYykgMjAwMyBFbnRlc3NhLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6IAorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgb3BlblNFQUwgKGh0dHA6Ly93d3cub3BlbnNlYWwub3JnLykuIgorCitBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisKK1RoZSBuYW1lcyAib3BlblNFQUwiIGFuZCAiRW50ZXNzYSIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGVwbEBlbnRlc3NhLmNvbS4KK1Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJvcGVuU0VBTCIsIG5vciBtYXkgIm9wZW5TRUFMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgRW50ZXNzYS4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRU5URVNTQSwgTExDLCBPUEVOU0VBTCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBvcGVuU0VBTCBhbmQgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29udHJpYnV0ZWQgYnkgRW50ZXNzYSwgTExDLCBodHRwOi8vd3d3LmVudGVzc2EuY29tLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgb3BlblNFQUwsIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cub3BlbnNlYWwub3JnLz4uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTYxY2NmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRXJsUEwtMS4xCkBAIC0wLDAgKzEsMjg4IEBACisKK0VSTEFORyBQVUJMSUMgTElDRU5TRQorVmVyc2lvbiAxLjEKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gYGBDb250cmlidXRvcmBgIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucworbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gYGBDb3ZlcmVkIENvZGVgYCBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQoraW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gYGBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21gYCBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiBgYEluaXRpYWwgRGV2ZWxvcGVyYGAgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKK2FzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQKK0EuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguIGBgTGljZW5zZWBgIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gYGBNb2RpZmljYXRpb25zYGAgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZworICAgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLiAKKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IKKyAgIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorCisxLjEwLiBgYE9yaWdpbmFsIENvZGVgYCBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCit3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMKK09yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiBgYFNvdXJjZSBDb2RlYGAgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzCithbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZQorY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IKK2Fub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcworY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLAorcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzCit3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuIGBgWW91YGAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cwordW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbAorZW50aXRpZXMsYGBZb3VgYCBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LAorb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCitgYGNvbnRyb2xgYCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKK290aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCitvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKKyAgICBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQKKyAgICBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwKKyAgICBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemVgYCkgdGhlCisgICAgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0CisgICAgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZQorICAgIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyCisgICAgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvcgorICAgIGNvbWJpbmF0aW9ucy4gCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKKyAgICBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IKKyAgICBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlcgorICAgIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLAorICAgIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQKKyAgICBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeQorICAgIHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKKyAgICB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvCisgICAgVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLiAKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aAorZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yCitpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cwordGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cworaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZwordGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4gCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZQorQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzCithbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsKK2FuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0CityZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQKK2luaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhCitzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlCithdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0Cit0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorICAgIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorICAgIHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24KKyAgICB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZQorICAgIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBgYExFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQKKyAgICB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50CisgICAgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UKKyAgICBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdQorICAgIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlCisgICAgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nCisgICAgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8KKyAgICBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcworICAgIGJlZW4gb2J0YWluZWQuIAorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KKyAgICBJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCisgICAgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCisgICAgaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUKKyAgICBMRUdBTCBmaWxlLiAKKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlCitZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91CitjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEKK0NvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90Citwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaAorYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvcgorc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLAord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUKK3JlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24KK2JlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueQorQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLAorYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvcgorc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKK3JlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlCitvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKK2luIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUKK0NvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudAorZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcworbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlCitDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdQorZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QKK21ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UKK2FyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkKK0NvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIKK29yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUKK25vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKK3JlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZQorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQordG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQKK3RoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMCitmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbAorZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkKK3N0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZAorZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIENPTk5FQ1RJT04gVE8gTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorCitUaGlzIEVybGFuZyBMaWNlbnNlIGlzIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworTGljZW5zZSwgVmVyc2lvbiAxLjAuIEl0IGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhCitQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gYGBBUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKK0RFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YKK1RIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRQorSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIKK0NPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUCitPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSCitFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQorc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsCitzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCituYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZQorc2hhbGwgc3Vydml2ZS4KKworOS4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKK0FueSB1dGlsaXphdGlvbiBvZiBDb3ZlcmVkIENvZGUgc2hhbGwgbm90IGNhdXNlIHRoZSBJbml0aWFsIERldmVsb3Blcgorb3IgYW55IENvbnRyaWJ1dG9yIHRvIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgKG5laXRoZXIgZGlyZWN0IG5vcgoraW5kaXJlY3QpLgorCisxMC4gTUlTQ0VMTEFORU9VUworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYnkgYW5kIGluIGFjY29yZGFuY2Ugd2l0aAordGhlIHN1YnN0YW50aXZlIGxhd3Mgb2YgU3dlZGVuLiBBbnkgZGlzcHV0ZSwgY29udHJvdmVyc3kgb3IgY2xhaW0KK2FyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSwgb3IgdGhlIGJyZWFjaCwgdGVybWluYXRpb24KK29yIGludmFsaWRpdHkgdGhlcmVvZiwgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbgorb2YgU3dlZGlzaCBjb3VydHMsIHdpdGggdGhlIFN0b2NraG9sbSBDaXR5IENvdXJ0IGFzIHRoZSBmaXJzdAoraW5zdGFuY2UuCisgCitFWEhJQklUIEEuCisKK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgRXJsYW5nIFB1YmxpYyBMaWNlbnNlLAorVmVyc2lvbiAxLjEsICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUKK0VybGFuZyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgaXQgY2FuIGJlCityZXRyaWV2ZWQgdmlhIHRoZSB3b3JsZCB3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmVybGFuZy5vcmcvLgorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCit0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIEVyaWNzc29uIFV0dmVja2xpbmdzIEFCLgorUG9ydGlvbnMgY3JlYXRlZCBieSBFcmljc3NvbiBhcmUgQ29weXJpZ2h0IDE5OTksIEVyaWNzc29uIFV0dmVja2xpbmdzCitBQi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5gYAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GU0YtVW5saW1pdGVkIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRlNGLVVubGltaXRlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBhOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRlNGLVVubGltaXRlZApAQCAtMCwwICsxLDQgQEAKK0NvcHlyaWdodCAoQykgMTk5Ny0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GYWlyIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRmFpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzViMDFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRmFpcgpAQCAtMCwwICsxLDExIEBACisKK0ZhaXIgTGljZW5zZQorKHBsYWluIHRleHQpCis8Q29weXJpZ2h0IEluZm9ybWF0aW9uPgorCitVc2FnZSBvZiB0aGUgd29ya3MgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBpbnN0cnVtZW50IGlzIHJldGFpbmVkIHdpdGggdGhlIHdvcmtzLCBzbyB0aGF0IGFueSBlbnRpdHkgdGhhdCB1c2VzIHRoZSB3b3JrcyBpcyBub3RpZmllZCBvZiB0aGlzIGluc3RydW1lbnQuCisKK0RJU0NMQUlNRVI6IFRIRSBXT1JLUyBBUkUgV0lUSE9VVCBXQVJSQU5UWS4KKworWzIwMDQsIEZhaXIgTGljZW5zZTogcmhpZC5jb20vZmFpciAodGhpcyBVUkwgbm8gbG9uZ2VyIHdvcmtzKV0KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJhbWV3b3J4LTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyYW1ld29yeC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiYjE4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyYW1ld29yeC0xLjAKQEAgLTAsMCArMSw2OSBAQAorCitUSEUgRlJBTUVXT1JYIE9QRU4gTElDRU5TRSAxLjAKK1RoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIDEuMCwgaGFzIGJlZW4gZW50ZXJlZCBpbnRvIGJldHdlZW4gVGhlIEZyYW1ld29yeCBDb21wYW55IGFuZCB5b3UsIHRoZSBsaWNlbnNlZSBoZXJldW5kZXIsIGVmZmVjdGl2ZSBhcyBvZiBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2Ugb3IgYW4gRG93bnN0cmVhbSBEaXN0cmlidXRpb24gKGVhY2ggYXMgZGVmaW5lZCBiZWxvdykuCisKK0FHUkVFTUVOVCBCQUNLR1JPVU5ECitUaGUgRnJhbWV3b3J4IENvbXBhbnkgaXMgY29tbWl0dGVkIHRvIHRoZSBiZWxpZWYgdGhhdCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSByZXN1bHRzIGluIGJldHRlciBxdWFsaXR5LCBncmVhdGVyIHRlY2huaWNhbCBhbmQgcHJvZHVjdCBpbm5vdmF0aW9uIGluIHRoZSBtYXJrZXQgcGxhY2UgYW5kIGEgbW9yZSBlbXBvd2VyZWQgYW5kIHByb2R1Y3RpdmUgZGV2ZWxvcGVyIGFuZCBlbmQtdXNlciBjb21tdW5pdHkuIE91ciBvYmplY3RpdmUgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIGltcHJvdmVtZW50cyBhbmQgaW5ub3ZhdGlvbnMgdG8gaXQsIHJlbWFpbiBmcmVlIGFuZCBvcGVuIHRvIHRoZSBjb21tdW5pdHkuVG8gZnVydGhlciB0aGVzZSBiZWxpZWZzIGFuZCBvYmplY3RpdmVzLCB3ZSBhcmUgZGlzdHJpYnV0aW5nIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCB3aXRob3V0IHJveWFsdGllcyBhbmQgaW4gc291cmNlIGNvZGUgZm9ybSwgdG8gdGhlIGNvbW11bml0eSBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCitBR1JFRU1FTlQgVEVSTVMKK1RoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgWW91IGhhdmUgYWdyZWVkIGFzIGZvbGxvd3M6CisxLkRlZmluaXRpb25zLlRoZSBmb2xsb3dpbmcgdGVybXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlc3BlY3RpdmUgbWVhbmluZ3M6CisKKyhhKSAgICAgRnJhbWV3b3J4IENvZGUgQmFzZSBtZWFucyB0aGUgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFRoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudAorCisoYikgICAgIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG1lYW5zIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVsZWFzZSwgZGlzdHJpYnV0aW9uIG9yIHJlbW90ZSBhdmFpbGFiaWxpdHkgb2Ygc29mdHdhcmUgKGkpIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250YWlucywgb3IgZGVwZW5kcyBmb3IgaXRzIGludGVuZGVkIGZ1bmN0aW9uaW5nIG9uLCB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YgYW5kIChpaSkgaW4gd2hpY2ggcmlnaHRzIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSBzdWNoIEZyYW1ld29yeCBDb2RlIEJhc2Ugc29mdHdhcmUgZGVwZW5kLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvbiB0aGUgTGljZW5zZSBwcm92aWRlZCBpbiBTZWN0aW9uIDIgYmVsb3cuCisKKyhjKSAgICAgIlNvdXJjZSBDb2RlIiB0byBhbnkgc29mdHdhcmUgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGF0IHNvZnR3YXJlLCBpbmNsdWRpbmcgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYW5kIGNvbXBpbGF0aW9uIG9yIGluc3RhbGxhdGlvbiBzY3JpcHRzLCBvciBhbnkgdmVyc2lvbiB0aGVyZW9mIHRoYXQgaGFzIGJlZW4gY29tcHJlc3NlZCBvciBhcmNoaXZlZCwgYW5kIGNhbiBiZSByZWNvbnN0aXR1dGVkLCB1c2luZyBhbiBhcHByb3ByaWF0ZSBhbmQgZ2VuZXJhbGx5IGF2YWlsYWJsZSBhcmNoaXZhbCBvciBjb21wcmVzc2lvbiB0ZWNobm9sb2d5LgorCisoZCkgICAgIFZhbHVlLUFkZGVkIFNlcnZpY2VzIG1lYW5zIGFueSBjb21tZXJjaWFsIG9yIGZlZS1iYXNlZCBzb2Z0d2FyZS1yZWxhdGVkIHNlcnZpY2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb246IHN5c3RlbSBvciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBvciBjb25zdWx0aW5nOyB0ZWNobmljYWwgb3IgZW5kLXVzZXIgc3VwcG9ydCBvciB0cmFpbmluZzsgZGlzdHJpYnV0aW9uIG1haW50ZW5hbmNlLCBjb25maWd1cmF0aW9uIG9yIHZlcnNpb25pbmc7IG9yIG91dHNvdXJjZWQsIGhvc3RlZCBvciBuZXR3b3JrLWJhc2VkIGFwcGxpY2F0aW9uIHNlcnZpY2VzLgorCisyLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2YsIFRoZSBGcmFtZXdvcnggQ29tcGFueSBoZXJlYnkgZ3JhbnRzIFlvdSBhIG5vbi1leGNsdXNpdmUgbGljZW5zZSAodGhlIExpY2Vuc2UpLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGFuZCBmb3Igbm8gZmVlIG90aGVyIHRoYW4gYSBub21pbmFsIGNoYXJnZSByZWZsZWN0aW5nIHRoZSBjb3N0cyBvZiBwaHlzaWNhbCBkaXN0cmlidXRpb24sIHRvOgorCisoYSkgICAgIHVzZSB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgaW4gZWl0aGVyIFNvdXJjZSBDb2RlIG9yIG1hY2hpbmUtcmVhZGFibGUgZm9ybTsKKworKGIpICAgICBtYWtlIG1vZGlmaWNhdGlvbnMsIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIHRvIHRoZSBjb250ZW50IG9yIHN0cnVjdHVyZSBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZTsgb3IKKworKGMpICAgICBjcmVhdGUgbGFyZ2VyIHdvcmtzIG9yIGRlcml2YXRpdmUgd29ya3MgaW5jbHVkaW5nIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZjsgYW5kCisKKyhkKSAgICAgcmVsZWFzZSwgZGlzdHJpYnV0ZSBvciBtYWtlIGF2YWlsYWJsZSwgZWl0aGVyIGdlbmVyYWxseSBvciB0byBhbnkgc3BlY2lmaWMgdGhpcmQtcGFydHksIGFueSBvZiB0aGUgZm9yZWdvaW5nIGluIFNvdXJjZSBDb2RlIG9yIGJpbmFyeSBmb3JtLgorCiszLiBMaWNlbnNlIENvbmRpdGlvbnMuIFRoZSBncmFudCBvZiB0aGUgTGljZW5zZSB1bmRlciBTZWN0aW9uIDEgaGVyZW9mLCBhbmQgeW91ciBleGVyY2lzZSBvZiBhbGwgcmlnaHRzIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCB3aWxsIHJlbWFpbiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFzIHdlbGwgYXMgdG8gdGhlIG90aGVyIHByb3Zpc2lvbnMgaGVyZW9mOgorCisoYSkgICAgIENvbXBsZXRlIFNvdXJjZSBDb2RlIGZvciBhbnkgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBtYWRlIGJ5IFlvdSB0aGF0IGNvbnRhaW5zLCBvciBkZXBlbmRzIGZvciBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvbiwgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZiwgc2hhbGwgYmUgbWFkZSBmcmVlbHkgYXZhaWxhYmxlIHRvIGFsbCB1c2VycyB0aGVyZW9mIG9uIHRlcm1zIGFuZCBjb25kaXRpb25zIG5vIG1vcmUgcmVzdHJpY3RpdmUsIGFuZCBubyBsZXNzIGZhdm9yYWJsZSBmb3IgYW55IHVzZXIgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB3aXRoIHJlZ2FyZCB0byBTb3VyY2UgQ29kZSBhdmFpbGFiaWxpdHkgYW5kIHJveWFsdHktZnJlZSB1c2UpIHRoYW4gdGhvc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgcHJvdmlkZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworKGIpICAgICBBbnkgVmFsdWUtQWRkZWQgU2VydmljZXMgdGhhdCB5b3Ugb2ZmZXIgb3IgcHJvdmlkZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgaW4gcmVsYXRpb24gdG8gYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIHNoYWxsIGJlIG9mZmVyZWQgYW5kIHByb3ZpZGVkIG9uIGNvbW1lcmNpYWwgdGVybXMgdGhhdCBhcmUgcmVhc29uYWJseSBjb21tZW5zdXJhdGUgdG8gdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHN1Y2ggVmFsdWUtQWRkZWQgU2VydmljZXMuIEluIGFkZGl0aW9uLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb24gd2hpY2ggYW55IHN1Y2ggVmFsdWUgQWRkZWQgU2VydmljZXMgYXJlIHNvIG9mZmVyZWQgb3IgcHJvdmlkZWQgc2hhbGwgYmUgY29uc2lzdGVudCB3aXRoLCBhbmQgc2hhbGwgZnVsbHkgc3VwcG9ydCwgdGhlIGludGVudCBhbmQgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCisoYykgICAgIEFsbCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbnMgc2hhbGw6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSkgICAgICAgICAgICBpbmNsdWRlIGFsbCBwb3J0aW9ucyBhbmQgZWxlbWVudHMgb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIFNvdXJjZSBDb2RlIG9mIHN1Y2ggRG93bnN0cmVhbSBEaXN0cmlidXRpb24gaW50byBhIGZ1bGx5IGZ1bmN0aW9uYWwgbWFjaGluZS1leGVjdXRhYmxlIHN5c3RlbSwgb3IgYWRkaXRpb25hbCBidWlsZCBzY3JpcHRzIG9yIGNvbXBhcmFibGUgc29mdHdhcmUgbmVjZXNzYXJ5IGFuZCBzdWZmaWNpZW50IGZvciBzdWNoIHB1cnBvc2VzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpaSkgICAgICAgICAgICBpbmNsdWRlLCBpbiBlYWNoIGZpbGUgY29udGFpbmluZyBhbnkgcG9ydGlvbiBvciBlbGVtZW50IG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCB0aGUgZm9sbG93aW5nIGlkZW50aWZ5aW5nIGxlZ2VuZDogVGhpcyBmaWxlIGNvbnRhaW5zIHNvZnR3YXJlIHRoYXQgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdW5kZXIgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UgMS4wLiBVc2UgYW5kIGRpc3RyaWJ1dGlvbiBoZXJlb2YgYXJlIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggdGhlcmVpbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpaWkpICAgICAgICAgICAgaW5jbHVkZSBhbGwgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMsIGF1dGhvcnNoaXAgY3JlZGl0cywgd2FycmFudHkgZGlzY2xhaW1lcnMgKGluY2x1ZGluZyB0aGF0IHByb3ZpZGVkIGluIFNlY3Rpb24gNiBiZWxvdyksIGxlZ2VuZHMsIGRvY3VtZW50YXRpb24sIGFubm90YXRpb25zIGFuZCBjb21tZW50cyBjb250YWluZWQgaW4gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgYXMgcHJvdmlkZWQgdG8gWW91IGhlcmV1bmRlcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdikgICAgICAgICAgICBjb250YWluIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoZSBodG1sIGZpbGUgbmFtZWQgZnJhbWV3b3J4X2NvbW11bml0eV9pbnZpdGF0aW9uLmh0bWwgaW5jbHVkZWQgd2l0aGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHRoYXQgYWNrbm93bGVkZ2VzIG5ldyB1c2VycyBhbmQgcHJvdmlkZXMgdGhlbSB3aXRoIGluZm9ybWF0aW9uIG9uIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIGNvbW11bml0eTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYpICAgICAgICAgICAgY29udGFpbiBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGUgdGV4dCBmaWxlIG5hbWVkIHRoZV9mcmFtZXdvcnhfbGljZW5zZS50eHQgaW5jbHVkZWQgd2l0aGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHRoYXQgaW5jbHVkZXMgYSB0ZXh0IGNvcHkgb2YgdGhlIGZvcm0gb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudDsgYW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmkpICAgICAgICAgICAgcHJvbWluZW50bHkgZGlzcGxheSB0byBhbnkgdmlld2VyIG9yIHVzZXIgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHN1Y2ggT3BlbiBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiwgaW4gdGhlIHBsYWNlIGFuZCBtYW5uZXIgbm9ybWFsbHkgdXNlZCBmb3Igc3VjaCBkaXNwbGF5cywgdGhlIGZvbGxvd2luZyBsZWdlbmQ6CisKK1NvdXJjZSBjb2RlIGxpY2Vuc2VkIHVuZGVyIGZyb20gVGhlIEZyYW1ld29yeCBDb21wYW55IGlzIGNvbnRhaW5lZCBoZXJlaW4sIGFuZCBzdWNoIHNvdXJjZSBjb2RlIGhhcyBiZWVuIG9idGFpbmVkIGVpdGhlciB1bmRlciBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSwgb3IgYW5vdGhlciBsaWNlbnNlIGdyYW50ZWQgYnkgVGhlIEZyYW1ld29yeCBDb21wYW55LiBVc2UgYW5kIGRpc3RyaWJ1dGlvbiBoZXJlb2YgaXMgc3ViamVjdCB0byB0aGUgcmVzdHJpY3Rpb25zIHByb3ZpZGVkIGluIHRoZSByZWxldmFudCBzdWNoIGxpY2Vuc2UgYW5kIHRvIHRoZSBjb3B5cmlnaHRzIG9mIHRoZSBsaWNlbnNvciB0aGVyZXVuZGVyLiBBIGNvcHkgb2YgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UgaXMgcHJvdmlkZWQgaW4gYSBmaWxlIG5hbWVkIHRoZV9mcmFtZXdvcnhfbGljZW5zZS50eHQgYW5kIGluY2x1ZGVkIGhlcmVpbiwgYW5kIG1heSBhbHNvIGJlIGF2YWlsYWJsZSBmb3IgaW5zcGVjdGlvbiBhdCBodHRwOi8vd3d3LmZyYW1ld29yeC5jb20uCisKKzQuIFJlc3RyaWN0aW9ucyBvbiBPcGVuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9ucy4gRWFjaCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtYWRlIGJ5IFlvdSwgYW5kIGJ5IGFueSBwYXJ0eSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG9idGFpbmluZyByaWdodHMgdG8gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgdGhyb3VnaCBZb3UsIHNoYWxsIGJlIG1hZGUgc3ViamVjdCB0byBhIGxpY2Vuc2UgZ3JhbnQgb3IgYWdyZWVtZW50IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHNvIHRoYXQgZWFjaCBkaXN0cmlidXRlZSB1bmRlciB0aGF0IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgc2FtZSByZXN0cmljdGlvbnMgb24gcmUtZGlzdHJpYnV0aW9uIGFuZCB1c2UgYXMgYXJlIGJpbmRpbmcgb24gWW91IGhlcmV1bmRlci4gWW91IG1heSBzYXRpc2Z5IHRoaXMgbGljZW5zaW5nIHJlcXVpcmVtZW50IGVpdGhlciBieToKKworKGEpICAgICByZXF1aXJpbmcgYXMgYSBjb25kaXRpb24gdG8gYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG1hZGUgYnkgeW91LCBvciBieSBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IGRpc3RyaWJ1dGVlIG9mIFlvdXIgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gKG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZiksIHRoYXQgZWFjaCBkaXN0cmlidXRlZSB1bmRlciB0aGUgcmVsZXZhbnQgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gb2J0YWluIGEgZGlyZWN0IGxpY2Vuc2UgKG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRob3NlIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQpIGZyb20gVGhlIEZyYW1ld29yeCBDb21wYW55OyBvcgorCisoYikgICAgIHN1Yi1saWNlbnNpbmcgYWxsIChhbmQgbm90IGxlc3MgdGhhbiBhbGwpIG9mIFlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBoZXJldW5kZXIgdG8gdGhhdCBkaXN0cmlidXRlZSwgaW5jbHVkaW5nICh3aXRob3V0IGxpbWl0YXRpb24pIFlvdXIgb2JsaWdhdGlvbiB0byByZXF1aXJlIGRpc3RyaWJ1dGVlcyB0byBiZSBib3VuZCBieSBsaWNlbnNlIHJlc3RyaWN0aW9ucyBhcyBjb250ZW1wbGF0ZWQgYnkgdGhpcyBTZWN0aW9uIDQgYWJvdmUuCisKK1RoZSBGcmFtZXdvcnggQ29tcGFueSBoZXJlYnkgZ3JhbnRzIHRvIHlvdSBhbGwgcmlnaHRzIHRvIHN1Yi1saWNlbnNlIHlvdXIgcmlnaHRzIGhlcmV1bmRlciBhcyBuZWNlc3NhcnkgdG8gZnVsbHkgZWZmZWN0IHRoZSBpbnRlbnQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBTZWN0aW9uIDQgYWJvdmUsIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBoZXJldW5kZXIgc2hhbGwgYmUgdW5hZmZlY3RlZCBieSBhbnkgc3VjaCBzdWJsaWNlbnNpbmcuIEluIGFkZGl0aW9uLCBUaGUgRnJhbWV3b3J4IENvbXBhbnkgZXhwcmVzc2x5IHJldGFpbnMgYWxsIHJpZ2h0cyB0byB0YWtlIGFsbCBhcHByb3ByaWF0ZSBhY3Rpb24gKGluY2x1ZGluZyBsZWdhbCBhY3Rpb24pIGFnYWluc3QgYW55IHN1Y2ggZGlyZWN0IG9yIGluZGlyZWN0IHN1Yi1saWNlbnNlZSB0byBlbnN1cmUgaXRzIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoZSBpbnRlbnQgYW5kIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKzUuIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gRXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBoZXJlaW4sIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgcHJlc2VydmVzIGFuZCByZXNwZWN0cyBZb3VyIGFuZCBUaGUgRnJhbWV3b3J4IENvbXBhbnlzIHJlc3BlY3RpdmUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgaW5jbHVkaW5nLCBpbiB0aGUgY2FzZSBvZiBUaGUgRnJhbWV3b3J4IENvbXBhbnksIGl0cyBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLgorCis2LiBXYXJyYW50eSBEaXNjbGFpbWVyLiBUSEUgU09GVFdBUkUgTElDRU5TRUQgSEVSRVVOREVSIElTIFBST1ZJREVEIGBgQVMgSVMuYGAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVCwgQVJFIEhFUkVCWSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTElDRU5TT1IgT0YgVEhJUyBTT0ZUV0FSRSwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSU5DTFVESU5HIChCVVQgTk9UIExJTUlURUQgVE8pIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCis3LiBMaWNlbnNlIFZpb2xhdGlvbi4gVGhlIExpY2Vuc2UsIGFuZCBhbGwgb2YgeW91ciByaWdodHMgdGhlcmV1bmRlciwgc2hhbGwgYmUgZGVlbWVkIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlZCBhbmQgdm9pZCBhcyBvZiBhbnkgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBtYWRlIG9yIGZhY2lsaXRhdGVkIGJ5IFlvdSB0aGF0IHZpb2xhdGVzIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBpbiBvcmRlciB0byByZW1lZHkgdGhlIGVmZmVjdHMgb2Ygc3VjaCB2aW9sYXRpb24uIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYmluZGluZyBvbiB0aGUgbGVnYWwgc3VjY2Vzc29ycyBhbmQgYXNzaWducyBvZiB0aGUgcGFydGllcyBoZXJldG8uCisKK1lvdXIgYWdyZWVtZW50IHRvIHRoZSBmb3JlZ29pbmcgYXMgb2YgdGhlIGRhdGUgaGVyZW9mIGhhcyBiZWVuIGV2aWRlbmNlZCBieSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHJlbGV2YW50IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBoZXJldW5kZXIuCisKKyhDKSBUSEUgRlJBTUVXT1JYIENPTVBBTlkgMjAwMworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmVlVHlwZSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyZWVUeXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDRkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmVlVHlwZQpAQCAtMCwwICsxLDE3MCBAQAorICAgICAgICAgICAgICAgICAgICBUaGUgRnJlZVR5cGUgUHJvamVjdCBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDYtSmFuLTI3CisKKyAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTYtMjAwMiwgMjAwNiBieQorICAgICAgICAgIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZworCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworICBUaGUgRnJlZVR5cGUgIFByb2plY3QgaXMgZGlzdHJpYnV0ZWQgaW4gIHNldmVyYWwgYXJjaGl2ZSBwYWNrYWdlczsKKyAgc29tZSBvZiB0aGVtIG1heSBjb250YWluLCBpbiBhZGRpdGlvbiB0byB0aGUgRnJlZVR5cGUgZm9udCBlbmdpbmUsCisgIHZhcmlvdXMgdG9vbHMgYW5kICBjb250cmlidXRpb25zIHdoaWNoIHJlbHkgb24sIG9yICByZWxhdGUgdG8sIHRoZQorICBGcmVlVHlwZSBQcm9qZWN0LgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBmb3VuZCAgaW4gc3VjaCAgcGFja2FnZXMsIGFuZAorICB3aGljaCBkbyBub3QgIGZhbGwgdW5kZXIgdGhlaXIgb3duIGV4cGxpY2l0ICBsaWNlbnNlLiAgVGhlIGxpY2Vuc2UKKyAgYWZmZWN0cyAgdGh1cyAgdGhlICBGcmVlVHlwZSAgIGZvbnQgIGVuZ2luZSwgIHRoZSAgdGVzdCAgcHJvZ3JhbXMsCisgIGRvY3VtZW50YXRpb24gYW5kIG1ha2VmaWxlcywgYXQgdGhlIHZlcnkgbGVhc3QuCisKKyAgVGhpcyAgbGljZW5zZSAgIHdhcyAgaW5zcGlyZWQgIGJ5ICB0aGUgIEJTRCwgICBBcnRpc3RpYywgIGFuZCAgSUpHCisgIChJbmRlcGVuZGVudCBKUEVHICBHcm91cCkgbGljZW5zZXMsIHdoaWNoICBhbGwgZW5jb3VyYWdlIGluY2x1c2lvbgorICBhbmQgIHVzZSBvZiAgZnJlZSAgc29mdHdhcmUgaW4gIGNvbW1lcmNpYWwgIGFuZCBmcmVld2FyZSAgcHJvZHVjdHMKKyAgYWxpa2UuICBBcyBhIGNvbnNlcXVlbmNlLCBpdHMgbWFpbiBwb2ludHMgYXJlIHRoYXQ6CisKKyAgICBvIFdlIGRvbid0IHByb21pc2UgdGhhdCB0aGlzIHNvZnR3YXJlIHdvcmtzLiBIb3dldmVyLCB3ZSB3aWxsIGJlCisgICAgICBpbnRlcmVzdGVkIGluIGFueSBraW5kIG9mIGJ1ZyByZXBvcnRzLiAoYGFzIGlzJyBkaXN0cmlidXRpb24pCisKKyAgICBvIFlvdSBjYW4gIHVzZSB0aGlzIHNvZnR3YXJlIGZvciB3aGF0ZXZlciB5b3UgIHdhbnQsIGluIHBhcnRzIG9yCisgICAgICBmdWxsIGZvcm0sIHdpdGhvdXQgaGF2aW5nIHRvIHBheSB1cy4gKGByb3lhbHR5LWZyZWUnIHVzYWdlKQorCisgICAgbyBZb3UgbWF5IG5vdCBwcmV0ZW5kIHRoYXQgIHlvdSB3cm90ZSB0aGlzIHNvZnR3YXJlLiAgSWYgeW91IHVzZQorICAgICAgaXQsIG9yICBvbmx5IHBhcnRzIG9mIGl0LCAgaW4gYSBwcm9ncmFtLCAgeW91IG11c3QgYWNrbm93bGVkZ2UKKyAgICAgIHNvbWV3aGVyZSAgaW4gIHlvdXIgIGRvY3VtZW50YXRpb24gIHRoYXQgIHlvdSAgaGF2ZSAgdXNlZCAgdGhlCisgICAgICBGcmVlVHlwZSBjb2RlLiAoYGNyZWRpdHMnKQorCisgIFdlICBzcGVjaWZpY2FsbHkgIHBlcm1pdCAgYW5kICBlbmNvdXJhZ2UgIHRoZSAgaW5jbHVzaW9uICBvZiAgdGhpcworICBzb2Z0d2FyZSwgd2l0aCAgb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCAgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKyAgV2UgIGRpc2NsYWltICBhbGwgd2FycmFudGllcyAgY292ZXJpbmcgIFRoZSAgRnJlZVR5cGUgUHJvamVjdCAgYW5kCisgIGFzc3VtZSBubyBsaWFiaWxpdHkgcmVsYXRlZCB0byBUaGUgRnJlZVR5cGUgUHJvamVjdC4KKworCisgIEZpbmFsbHksICBtYW55ICBwZW9wbGUgIGFza2VkICB1cyAgZm9yICBhICBwcmVmZXJyZWQgIGZvcm0gIGZvciAgYQorICBjcmVkaXQvZGlzY2xhaW1lciB0byB1c2UgaW4gY29tcGxpYW5jZSB3aXRoIHRoaXMgbGljZW5zZS4gIFdlIHRodXMKKyAgZW5jb3VyYWdlIHlvdSB0byB1c2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCisgICAiIiIgIAorICAgIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGNvcHlyaWdodCDvv70gPHllYXI+IFRoZSBGcmVlVHlwZQorICAgIFByb2plY3QgKHd3dy5mcmVldHlwZS5vcmcpLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICIiIgorCisgIFBsZWFzZSByZXBsYWNlIDx5ZWFyPiB3aXRoIHRoZSB2YWx1ZSBmcm9tIHRoZSBGcmVlVHlwZSB2ZXJzaW9uIHlvdQorICBhY3R1YWxseSB1c2UuCisKKworTGVnYWwgVGVybXMKKz09PT09PT09PT09CisKKzAuIERlZmluaXRpb25zCistLS0tLS0tLS0tLS0tLQorCisgIFRocm91Z2hvdXQgdGhpcyBsaWNlbnNlLCAgdGhlIHRlcm1zIGBwYWNrYWdlJywgYEZyZWVUeXBlIFByb2plY3QnLAorICBhbmQgIGBGcmVlVHlwZSAgYXJjaGl2ZScgcmVmZXIgIHRvICB0aGUgIHNldCAgb2YgZmlsZXMgIG9yaWdpbmFsbHkKKyAgZGlzdHJpYnV0ZWQgIGJ5IHRoZSAgYXV0aG9ycyAgKERhdmlkIFR1cm5lciwgIFJvYmVydCBXaWxoZWxtLCAgYW5kCisgIFdlcm5lciBMZW1iZXJnKSBhcyB0aGUgYEZyZWVUeXBlIFByb2plY3QnLCBiZSB0aGV5IG5hbWVkIGFzIGFscGhhLAorICBiZXRhIG9yIGZpbmFsIHJlbGVhc2UuCisKKyAgYFlvdScgcmVmZXJzIHRvICB0aGUgbGljZW5zZWUsIG9yIHBlcnNvbiB1c2luZyAgdGhlIHByb2plY3QsIHdoZXJlCisgIGB1c2luZycgaXMgYSBnZW5lcmljIHRlcm0gaW5jbHVkaW5nIGNvbXBpbGluZyB0aGUgcHJvamVjdCdzIHNvdXJjZQorICBjb2RlIGFzICB3ZWxsIGFzIGxpbmtpbmcgaXQgIHRvIGZvcm0gYSAgYHByb2dyYW0nIG9yIGBleGVjdXRhYmxlJy4KKyAgVGhpcyAgcHJvZ3JhbSBpcyAgcmVmZXJyZWQgdG8gIGFzICBgYSBwcm9ncmFtICB1c2luZyB0aGUgIEZyZWVUeXBlCisgIGVuZ2luZScuCisKKyAgVGhpcyAgbGljZW5zZSBhcHBsaWVzICB0byBhbGwgIGZpbGVzIGRpc3RyaWJ1dGVkICBpbiAgdGhlIG9yaWdpbmFsCisgIEZyZWVUeXBlICBQcm9qZWN0LCAgIGluY2x1ZGluZyAgYWxsICBzb3VyY2UgICBjb2RlLCAgYmluYXJpZXMgIGFuZAorICBkb2N1bWVudGF0aW9uLCAgdW5sZXNzICBvdGhlcndpc2UgIHN0YXRlZCAgIGluICB0aGUgIGZpbGUgIGluICBpdHMKKyAgb3JpZ2luYWwsIHVubW9kaWZpZWQgZm9ybSBhcyAgZGlzdHJpYnV0ZWQgaW4gdGhlIG9yaWdpbmFsIGFyY2hpdmUuCisgIElmIHlvdSBhcmUgIHVuc3VyZSB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgIGZpbGUgaXMgY292ZXJlZCBieQorICB0aGlzIGxpY2Vuc2UsIHlvdSBtdXN0IGNvbnRhY3QgdXMgdG8gdmVyaWZ5IHRoaXMuCisKKyAgVGhlIEZyZWVUeXBlICBQcm9qZWN0IGlzIGNvcHlyaWdodCAoQykgMTk5Ni0yMDAwICBieSBEYXZpZCBUdXJuZXIsCisgIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICBBbGwgcmlnaHRzIHJlc2VydmVkIGV4Y2VwdCBhcworICBzcGVjaWZpZWQgYmVsb3cuCisKKzEuIE5vIFdhcnJhbnR5CistLS0tLS0tLS0tLS0tLQorCisgIFRIRSBGUkVFVFlQRSBQUk9KRUNUICBJUyBQUk9WSURFRCBgQVMgSVMnIFdJVEhPVVQgIFdBUlJBTlRZIE9GIEFOWQorICBLSU5ELCBFSVRIRVIgIEVYUFJFU1MgT1IgSU1QTElFRCwgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCBUTywKKyAgV0FSUkFOVElFUyAgT0YgIE1FUkNIQU5UQUJJTElUWSAgIEFORCAgRklUTkVTUyAgRk9SICBBICBQQVJUSUNVTEFSCisgIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBXSUxMIEFOWSBPRiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICBCRSBMSUFCTEUgIEZPUiBBTlkgREFNQUdFUyBDQVVTRUQgIEJZIFRIRSBVU0UgT1IgIFRIRSBJTkFCSUxJVFkgVE8KKyAgVVNFLCBPRiBUSEUgRlJFRVRZUEUgUFJPSkVDVC4KKworMi4gUmVkaXN0cmlidXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyAgbGljZW5zZSAgZ3JhbnRzICBhICB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgIHBlcnBldHVhbCAgYW5kCisgIGlycmV2b2NhYmxlIHJpZ2h0ICBhbmQgbGljZW5zZSB0byB1c2UsICBleGVjdXRlLCBwZXJmb3JtLCBjb21waWxlLAorICBkaXNwbGF5LCAgY29weSwgICBjcmVhdGUgIGRlcml2YXRpdmUgIHdvcmtzICAgb2YsICBkaXN0cmlidXRlICBhbmQKKyAgc3VibGljZW5zZSB0aGUgIEZyZWVUeXBlIFByb2plY3QgKGluICBib3RoIHNvdXJjZSBhbmQgIG9iamVjdCBjb2RlCisgIGZvcm1zKSAgYW5kICBkZXJpdmF0aXZlIHdvcmtzICB0aGVyZW9mICBmb3IgIGFueSAgcHVycG9zZTsgYW5kICB0bworICBhdXRob3JpemUgb3RoZXJzICB0byBleGVyY2lzZSAgc29tZSBvciBhbGwgIG9mIHRoZSAgcmlnaHRzIGdyYW50ZWQKKyAgaGVyZWluLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgIG8gUmVkaXN0cmlidXRpb24gb2YgIHNvdXJjZSBjb2RlICBtdXN0IHJldGFpbiB0aGlzICBsaWNlbnNlIGZpbGUKKyAgICAgIChgRlRMLlRYVCcpIHVuYWx0ZXJlZDsgYW55ICBhZGRpdGlvbnMsIGRlbGV0aW9ucyBvciBjaGFuZ2VzIHRvCisgICAgICB0aGUgb3JpZ2luYWwgIGZpbGVzIG11c3QgYmUgY2xlYXJseSAgaW5kaWNhdGVkIGluIGFjY29tcGFueWluZworICAgICAgZG9jdW1lbnRhdGlvbi4gICBUaGUgIGNvcHlyaWdodCAgIG5vdGljZXMgIG9mICB0aGUgIHVuYWx0ZXJlZCwKKyAgICAgIG9yaWdpbmFsICBmaWxlcyBtdXN0ICBiZSAgcHJlc2VydmVkIGluICBhbGwgIGNvcGllcyBvZiAgc291cmNlCisgICAgICBmaWxlcy4KKworICAgIG8gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCBwcm92aWRlIGEgIGRpc2NsYWltZXIgIHRoYXQKKyAgICAgIHN0YXRlcyAgdGhhdCAgdGhlIHNvZnR3YXJlIGlzIGJhc2VkIGluIHBhcnQgb2YgdGhlIHdvcmsgb2YgdGhlCisgICAgICBGcmVlVHlwZSBUZWFtLCAgaW4gIHRoZSAgZGlzdHJpYnV0aW9uICBkb2N1bWVudGF0aW9uLiAgV2UgYWxzbworICAgICAgZW5jb3VyYWdlIHlvdSB0byBwdXQgYW4gVVJMIHRvIHRoZSBGcmVlVHlwZSB3ZWIgcGFnZSAgaW4gIHlvdXIKKyAgICAgIGRvY3VtZW50YXRpb24sIHRob3VnaCB0aGlzIGlzbid0IG1hbmRhdG9yeS4KKworICBUaGVzZSBjb25kaXRpb25zICBhcHBseSB0byBhbnkgIHNvZnR3YXJlIGRlcml2ZWQgZnJvbSBvciAgYmFzZWQgb24KKyAgdGhlIEZyZWVUeXBlIFByb2plY3QsICBub3QganVzdCB0aGUgdW5tb2RpZmllZCBmaWxlcy4gICBJZiB5b3UgdXNlCisgIG91ciB3b3JrLCB5b3UgIG11c3QgYWNrbm93bGVkZ2UgdXMuICBIb3dldmVyLCBubyAgZmVlIG5lZWQgYmUgcGFpZAorICB0byB1cy4KKworMy4gQWR2ZXJ0aXNpbmcKKy0tLS0tLS0tLS0tLS0tCisKKyAgTmVpdGhlciB0aGUgIEZyZWVUeXBlIGF1dGhvcnMgYW5kICBjb250cmlidXRvcnMgbm9yIHlvdSAgc2hhbGwgdXNlCisgIHRoZSBuYW1lIG9mIHRoZSAgb3RoZXIgZm9yIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nLCBvciBwcm9tb3Rpb25hbAorICBwdXJwb3NlcyB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBXZSBzdWdnZXN0LCAgYnV0IGRvIG5vdCByZXF1aXJlLCB0aGF0ICB5b3UgdXNlIG9uZSBvciAgbW9yZSBvZiB0aGUKKyAgZm9sbG93aW5nIHBocmFzZXMgdG8gcmVmZXIgIHRvIHRoaXMgc29mdHdhcmUgaW4geW91ciBkb2N1bWVudGF0aW9uCisgIG9yIGFkdmVydGlzaW5nICBtYXRlcmlhbHM6IGBGcmVlVHlwZSBQcm9qZWN0JywgIGBGcmVlVHlwZSBFbmdpbmUnLAorICBgRnJlZVR5cGUgbGlicmFyeScsIG9yIGBGcmVlVHlwZSBEaXN0cmlidXRpb24nLgorCisgIEFzICB5b3UgaGF2ZSAgbm90IHNpZ25lZCAgdGhpcyBsaWNlbnNlLCAgeW91IGFyZSAgbm90ICByZXF1aXJlZCB0bworICBhY2NlcHQgIGl0LiAgIEhvd2V2ZXIsICBhcyAgdGhlIEZyZWVUeXBlICBQcm9qZWN0ICBpcyAgY29weXJpZ2h0ZWQKKyAgbWF0ZXJpYWwsIG9ubHkgIHRoaXMgbGljZW5zZSwgb3IgIGFub3RoZXIgb25lIGNvbnRyYWN0ZWQgIHdpdGggdGhlCisgIGF1dGhvcnMsIGdyYW50cyB5b3UgIHRoZSByaWdodCB0byB1c2UsIGRpc3RyaWJ1dGUsICBhbmQgbW9kaWZ5IGl0LgorICBUaGVyZWZvcmUsICBieSAgdXNpbmcsICBkaXN0cmlidXRpbmcsICBvciBtb2RpZnlpbmcgIHRoZSAgRnJlZVR5cGUKKyAgUHJvamVjdCwgeW91IGluZGljYXRlIHRoYXQgeW91IHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBhbGwgdGhlIHRlcm1zCisgIG9mIHRoaXMgbGljZW5zZS4KKworNC4gQ29udGFjdHMKKy0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHR3byBtYWlsaW5nIGxpc3RzIHJlbGF0ZWQgdG8gRnJlZVR5cGU6CisKKyAgICBvIGZyZWV0eXBlQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGdlbmVyYWwgdXNlIGFuZCBhcHBsaWNhdGlvbnMgb2YgRnJlZVR5cGUsIGFzIHdlbGwgYXMKKyAgICAgIGZ1dHVyZSBhbmQgIHdhbnRlZCBhZGRpdGlvbnMgdG8gdGhlICBsaWJyYXJ5IGFuZCBkaXN0cmlidXRpb24uCisgICAgICBJZiAgeW91IGFyZSBsb29raW5nICBmb3Igc3VwcG9ydCwgIHN0YXJ0IGluICB0aGlzIGxpc3QgIGlmIHlvdQorICAgICAgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB0byBoZWxwIHlvdSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICAgIG8gZnJlZXR5cGUtZGV2ZWxAbm9uZ251Lm9yZworCisgICAgICBEaXNjdXNzZXMgYnVncywgIGFzIHdlbGwgIGFzIGVuZ2luZSBpbnRlcm5hbHMsICBkZXNpZ24gaXNzdWVzLAorICAgICAgc3BlY2lmaWMgbGljZW5zZXMsIHBvcnRpbmcsIGV0Yy4KKworICBPdXIgaG9tZSBwYWdlIGNhbiBiZSBmb3VuZCBhdAorCisgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcKKworCistLS0gZW5kIG9mIEZUTC5UWFQgLS0tCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwZmUxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4xCkBAIC0wLDAgKzEsMzk3IEBACisJCUdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorCQkgIFZlcnNpb24gMS4yLCBOb3ZlbWJlciAyMDAyCisKKworIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsIHN1YmplY3QKKyhvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseQord2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBwYXJ0IGEKK3RleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkKK21hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisKKzIuIFZFUkJBVElNIENPUFlJTkcKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJT05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisgICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbidzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiSGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgordmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3MgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsIG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGV4Y2VwdAorYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIgYXR0ZW1wdCB0bworY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGlzIHZvaWQsIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLAorcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4yCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjIgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzg3MmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjIKQEAgLTAsMCArMSwzOTkgQEAKKworICAgICAgICAgICAgICAgIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjIsIE5vdmVtYmVyIDIwMDIKKworCisgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAwMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKworMC4gUFJFQU1CTEUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50ICJmcmVlIiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuCitTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5Cit0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZQorZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKK1RoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgImNvcHlsZWZ0Iiwgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCitXZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yIGZyZWUKK3NvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUKK3Byb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHRoZQorc29mdHdhcmUgZG9lcy4gIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgbWFudWFsczsKK2l0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzIG9mIHN1YmplY3QgbWF0dGVyIG9yCit3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UKK3ByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKworCisxLiBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZSBncmFudHMgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQKK3dvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZSAiRG9jdW1lbnQiLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhCitsaWNlbnNlZSwgYW5kIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gIFlvdSBhY2NlcHQgdGhlIGxpY2Vuc2UgaWYgeW91Citjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhIHdheSByZXF1aXJpbmcgcGVybWlzc2lvbgordW5kZXIgY29weXJpZ2h0IGxhdy4KKworQSAiTW9kaWZpZWQgVmVyc2lvbiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitBICJTZWNvbmRhcnkgU2VjdGlvbiIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mCit0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudGBzIG92ZXJhbGwgc3ViamVjdAorKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsIGRpcmVjdGx5Cit3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluIHBhcnQgYQordGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluIGFueQorbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCitUaGUgIkludmFyaWFudCBTZWN0aW9ucyIgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlIHRpdGxlcworYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZQordGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIGEKK3NlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIFNlY29uZGFyeSB0aGVuIGl0IGlzIG5vdAorYWxsb3dlZCB0byBiZSBkZXNpZ25hdGVkIGFzIEludmFyaWFudC4gIFRoZSBEb2N1bWVudCBtYXkgY29udGFpbiB6ZXJvCitJbnZhcmlhbnQgU2VjdGlvbnMuICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3QgaWRlbnRpZnkgYW55IEludmFyaWFudAorU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS4KKworVGhlICJDb3ZlciBUZXh0cyIgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisKK0EgIlRyYW5zcGFyZW50IiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4KK0FuIGltYWdlIGZvcm1hdCBpcyBub3QgVHJhbnNwYXJlbnQgaWYgdXNlZCBmb3IgYW55IHN1YnN0YW50aWFsIGFtb3VudAorb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCAiVHJhbnNwYXJlbnQiIGlzIGNhbGxlZCAiT3BhcXVlIi4KKworRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KK0FTQ0lJIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQgZm9ybWF0LCBTR01MCitvciBYTUwgdXNpbmcgYSBwdWJsaWNseSBhdmFpbGFibGUgRFRELCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUKK0hUTUwsIFBvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcyBvZgordHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIFBORywgWENGIGFuZCBKUEcuICBPcGFxdWUgZm9ybWF0cworaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5Citwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFREIGFuZC9vcgorcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKK21hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIHByb2R1Y2VkIGJ5IHNvbWUgd29yZAorcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKK1RoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAorcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbAordGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gIEZvciB3b3JrcyBpbgorZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAiVGl0bGUgUGFnZSIgbWVhbnMKK3RoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmtgcyB0aXRsZSwKK3ByZWNlZGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIHRoZSB0ZXh0LgorCitBIHNlY3Rpb24gIkVudGl0bGVkIFhZWiIgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsICJFbmRvcnNlbWVudHMiLCBvciAiSGlzdG9yeSIuKSAgVG8gIlByZXNlcnZlIHRoZSBUaXRsZSIKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gIkVudGl0bGVkIFhZWiIgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaAorc3RhdGVzIHRoYXQgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50LiAgVGhlc2UgV2FycmFudHkKK0Rpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzCitMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgoraW1wbGljYXRpb24gdGhhdCB0aGVzZSBXYXJyYW50eSBEaXNjbGFpbWVycyBtYXkgaGF2ZSBpcyB2b2lkIGFuZCBoYXMKK25vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuCisKKworMi4gVkVSQkFUSU0gQ09QWUlORworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzCit0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubyBvdGhlcgorY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IHVzZQordGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlcgorY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLCB5b3UgbWF5IGFjY2VwdAorY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuICBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaAorbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdyB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9uIDMuCisKK1lvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworCiszLiBDT1BZSU5HIElOIFFVQU5USVRZCisKK0lmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seSBoYXZlCitwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kIHRoZQorRG9jdW1lbnRgcyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUKK2NvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uCitDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZQordGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQgc2F0aXNmeSB0aGVzZSBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZAorYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KKworSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCitJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuCitJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywKK3doZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUKK3RoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCitsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuCitPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQKK2VkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisKKzQuIE1PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0EuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorICAgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyAgICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorICAgb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgorICAgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KK0IuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKKyAgIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKKyAgIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKKyAgIHVubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KK0MuIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCisgICBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCitFLiBBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCisgICBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCitGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKKyAgIGdpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCitHLiBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworICAgYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlLgorSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCitJLiBQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIsIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAorICAgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorICAgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiIGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCisgICBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorICAgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKKyAgIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCisgICBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAiSGlzdG9yeSIgc2VjdGlvbi4KKyAgIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKKyAgIGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorICAgcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAorICAgUHJlc2VydmUgdGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsCisgICB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMKKyAgIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworICAgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KKyAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitOLiBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIgorICAgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCitPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uYHMgbGljZW5zZSBub3RpY2UuCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworWW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKK1RoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisKKzUuIENPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJIaXN0b3J5IgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCisiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMKK0VudGl0bGVkICJFbmRvcnNlbWVudHMiLgorCisKKzYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCitZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMKK3JlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwgY29waWVzIG9mIHRoaXMKK0xpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weSB0aGF0IGlzIGluY2x1ZGVkIGluCit0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yCit2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuCisKK1lvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQgZGlzdHJpYnV0ZQoraXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhIGNvcHkgb2YgdGhpcworTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbAorb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdCBkb2N1bWVudC4KKworCis3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTCisKK0EgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiAiYWdncmVnYXRlIiBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uYHMgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LgorV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoIGFyZSBub3QgdGhlbXNlbHZlcworZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisKK0lmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnRgcyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uCitPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBwcmludGVkIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIHdob2xlCithZ2dyZWdhdGUuCisKKworOC4gVFJBTlNMQVRJT04KKworVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CitkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4KK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKK0lmIGEgc2VjdGlvbiBpbiB0aGUgRG9jdW1lbnQgaXMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgb3IgIkhpc3RvcnkiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUKK2l0cyBUaXRsZSAoc2VjdGlvbiAxKSB3aWxsIHR5cGljYWxseSByZXF1aXJlIGNoYW5naW5nIHRoZSBhY3R1YWwKK3RpdGxlLgorCisKKzkuIFRFUk1JTkFUSU9OCisKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgZXhjZXB0CithcyBleHByZXNzbHkgcHJvdmlkZWQgZm9yIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBvdGhlciBhdHRlbXB0IHRvCitjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaXMgdm9pZCwgYW5kIHdpbGwKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsCitwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzCitMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworCisxMC4gRlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMKK29mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCitodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvLgorCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworCitBRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzCisKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworICAgIENvcHlyaWdodCAoYykgIFlFQVIgIFlPVVIgTkFNRS4KKyAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjIKKyAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyIFRleHRzLgorICAgIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VCisgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgIndpdGguLi5UZXh0cy4iIGxpbmUgd2l0aCB0aGlzOgorCisgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIExJU1QgVEhFSVIgVElUTEVTLCB3aXRoIHRoZQorICAgIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIExJU1QuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKworSWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit0byBwZXJtaXQgdGhlaXIgdXNlIGluIGZyZWUgc29mdHdhcmUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4zIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxMWE0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4zCkBAIC0wLDAgKzEsNDUzIEBACisKKworICAgICAgICAgICAgICAgIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMywgMyBOb3ZlbWJlciAyMDA4CisKKworIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworMC4gUFJFQU1CTEUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50ICJmcmVlIiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuCitTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5Cit0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZQorZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKK1RoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgImNvcHlsZWZ0Iiwgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCitXZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yIGZyZWUKK3NvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUKK3Byb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHRoZQorc29mdHdhcmUgZG9lcy4gIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgbWFudWFsczsKK2l0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzIG9mIHN1YmplY3QgbWF0dGVyIG9yCit3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UKK3ByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKworCisxLiBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZSBncmFudHMgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQKK3dvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZSAiRG9jdW1lbnQiLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhCitsaWNlbnNlZSwgYW5kIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gIFlvdSBhY2NlcHQgdGhlIGxpY2Vuc2UgaWYgeW91Citjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhIHdheSByZXF1aXJpbmcgcGVybWlzc2lvbgordW5kZXIgY29weXJpZ2h0IGxhdy4KKworQSAiTW9kaWZpZWQgVmVyc2lvbiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitBICJTZWNvbmRhcnkgU2VjdGlvbiIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mCit0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudGBzIG92ZXJhbGwKK3N1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsCitkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluCitwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluCithbnkgbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCitUaGUgIkludmFyaWFudCBTZWN0aW9ucyIgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlIHRpdGxlcworYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZQordGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIGEKK3NlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIFNlY29uZGFyeSB0aGVuIGl0IGlzIG5vdAorYWxsb3dlZCB0byBiZSBkZXNpZ25hdGVkIGFzIEludmFyaWFudC4gIFRoZSBEb2N1bWVudCBtYXkgY29udGFpbiB6ZXJvCitJbnZhcmlhbnQgU2VjdGlvbnMuICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3QgaWRlbnRpZnkgYW55IEludmFyaWFudAorU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS4KKworVGhlICJDb3ZlciBUZXh0cyIgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisKK0EgIlRyYW5zcGFyZW50IiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4KK0FuIGltYWdlIGZvcm1hdCBpcyBub3QgVHJhbnNwYXJlbnQgaWYgdXNlZCBmb3IgYW55IHN1YnN0YW50aWFsIGFtb3VudAorb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCAiVHJhbnNwYXJlbnQiIGlzIGNhbGxlZCAiT3BhcXVlIi4KKworRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KK0FTQ0lJIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQgZm9ybWF0LCBTR01MCitvciBYTUwgdXNpbmcgYSBwdWJsaWNseSBhdmFpbGFibGUgRFRELCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUKK0hUTUwsIFBvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcyBvZgordHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIFBORywgWENGIGFuZCBKUEcuICBPcGFxdWUgZm9ybWF0cworaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5Citwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFREIGFuZC9vcgorcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKK21hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIHByb2R1Y2VkIGJ5IHNvbWUgd29yZAorcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKK1RoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAorcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbAordGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gIEZvciB3b3JrcyBpbgorZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAiVGl0bGUgUGFnZSIgbWVhbnMKK3RoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmtgcyB0aXRsZSwKK3ByZWNlZGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIHRoZSB0ZXh0LgorCitUaGUgInB1Ymxpc2hlciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyBjb3BpZXMgb2YKK3RoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgorCitBIHNlY3Rpb24gIkVudGl0bGVkIFhZWiIgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsICJFbmRvcnNlbWVudHMiLCBvciAiSGlzdG9yeSIuKSAgVG8gIlByZXNlcnZlIHRoZSBUaXRsZSIKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gIkVudGl0bGVkIFhZWiIgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaAorc3RhdGVzIHRoYXQgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50LiAgVGhlc2UgV2FycmFudHkKK0Rpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzCitMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgoraW1wbGljYXRpb24gdGhhdCB0aGVzZSBXYXJyYW50eSBEaXNjbGFpbWVycyBtYXkgaGF2ZSBpcyB2b2lkIGFuZCBoYXMKK25vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuCisKKzIuIFZFUkJBVElNIENPUFlJTkcKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8KK290aGVyIGNvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50YHMgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0bworZ2l2ZSB0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZQorRG9jdW1lbnQuCisKKworNC4gTU9ESUZJQ0FUSU9OUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0CisgICBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworICAgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCisgICBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCisgICBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorQi4gTGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworICAgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorICAgRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAorICAgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50YHMgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCisgICB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCisgICBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgorICAgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCisgICBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKKyAgIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitKLiBQcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCisgICBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQorICAgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKKyAgIGl0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorICAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorICAgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCisgICBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitLLiBGb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBQcmVzZXJ2ZSB0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwKKyAgIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cworICAgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCitMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCisgICB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCisgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCitNLiBEZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuICBTdWNoIGEgc2VjdGlvbgorICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KK04uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICJFbmRvcnNlbWVudHMiCisgICBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KK08uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb25gcyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKworNS4gQ09NQklOSU5HIERPQ1VNRU5UUworCitZb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK1RoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkhpc3RvcnkiCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91IG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucworRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuCisKKworNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyCitkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbAorY29waWVzIG9mIHRoaXMgTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5Cit0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzCitvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbAorb3RoZXIgcmVzcGVjdHMuCisKK1lvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQKK2Rpc3RyaWJ1dGUgaXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhCitjb3B5IG9mIHRoaXMgTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcworTGljZW5zZSBpbiBhbGwgb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdAorZG9jdW1lbnQuCisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbmBzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50YHMgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsIG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50CitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIGl0IGlzIHZvaWQsIGFuZAord2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0hvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKK01vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCitUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCByZWNlaXB0IG9mIGEgY29weSBvZiBzb21lIG9yIGFsbCBvZiB0aGUgc2FtZSBtYXRlcmlhbCBkb2VzCitub3QgZ2l2ZSB5b3UgYW55IHJpZ2h0cyB0byB1c2UgaXQuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zIG9mIHRoZQorR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMKK3dpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4KK2RldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQKK3NwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcworTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eWBzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhCit2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZQorRG9jdW1lbnQuCisKKzExLiBSRUxJQ0VOU0lORworCisiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIFNpdGUiIChvciAiTU1DIFNpdGUiKSBtZWFucyBhbnkKK1dvcmxkIFdpZGUgV2ViIHNlcnZlciB0aGF0IHB1Ymxpc2hlcyBjb3B5cmlnaHRhYmxlIHdvcmtzIGFuZCBhbHNvCitwcm92aWRlcyBwcm9taW5lbnQgZmFjaWxpdGllcyBmb3IgYW55Ym9keSB0byBlZGl0IHRob3NlIHdvcmtzLiAgQQorcHVibGljIHdpa2kgdGhhdCBhbnlib2R5IGNhbiBlZGl0IGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIHNlcnZlci4gIEEKKyJNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24iIChvciAiTU1DIikgY29udGFpbmVkIGluIHRoZSBzaXRlCittZWFucyBhbnkgc2V0IG9mIGNvcHlyaWdodGFibGUgd29ya3MgdGh1cyBwdWJsaXNoZWQgb24gdGhlIE1NQyBzaXRlLgorCisiQ0MtQlktU0EiIG1lYW5zIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDMuMCAKK2xpY2Vuc2UgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMgQ29ycG9yYXRpb24sIGEgbm90LWZvci1wcm9maXQgCitjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sIAorQ2FsaWZvcm5pYSwgYXMgd2VsbCBhcyBmdXR1cmUgY29weWxlZnQgdmVyc2lvbnMgb2YgdGhhdCBsaWNlbnNlIAorcHVibGlzaGVkIGJ5IHRoYXQgc2FtZSBvcmdhbml6YXRpb24uCisKKyJJbmNvcnBvcmF0ZSIgbWVhbnMgdG8gcHVibGlzaCBvciByZXB1Ymxpc2ggYSBEb2N1bWVudCwgaW4gd2hvbGUgb3IgaW4gCitwYXJ0LCBhcyBwYXJ0IG9mIGFub3RoZXIgRG9jdW1lbnQuCisKK0FuIE1NQyBpcyAiZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nIiBpZiBpdCBpcyBsaWNlbnNlZCB1bmRlciB0aGlzIAorTGljZW5zZSwgYW5kIGlmIGFsbCB3b3JrcyB0aGF0IHdlcmUgZmlyc3QgcHVibGlzaGVkIHVuZGVyIHRoaXMgTGljZW5zZSAKK3NvbWV3aGVyZSBvdGhlciB0aGFuIHRoaXMgTU1DLCBhbmQgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCBpbiB3aG9sZSBvciAKK2luIHBhcnQgaW50byB0aGUgTU1DLCAoMSkgaGFkIG5vIGNvdmVyIHRleHRzIG9yIGludmFyaWFudCBzZWN0aW9ucywgYW5kIAorKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC4KKworVGhlIG9wZXJhdG9yIG9mIGFuIE1NQyBTaXRlIG1heSByZXB1Ymxpc2ggYW4gTU1DIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZQordW5kZXIgQ0MtQlktU0Egb24gdGhlIHNhbWUgc2l0ZSBhdCBhbnkgdGltZSBiZWZvcmUgQXVndXN0IDEsIDIwMDksCitwcm92aWRlZCB0aGUgTU1DIGlzIGVsaWdpYmxlIGZvciByZWxpY2Vuc2luZy4KKworCitBRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzCisKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworICAgIENvcHlyaWdodCAoYykgIFlFQVIgIFlPVVIgTkFNRS4KKyAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKKyAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyIFRleHRzLgorICAgIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VCisgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgIndpdGguLi5UZXh0cy4iIGxpbmUgd2l0aCB0aGlzOgorCisgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIExJU1QgVEhFSVIgVElUTEVTLCB3aXRoIHRoZQorICAgIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIExJU1QuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKworSWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit0byBwZXJtaXQgdGhlaXIgdXNlIGluIGZyZWUgc29mdHdhcmUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGVmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMS4wCkBAIC0wLDAgKzEsMjUyIEBACisKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDEKKworICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLCBGZWJydWFyeSAxOTg5CisKKyBDb3B5cmlnaHQgKEMpIDE5ODkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMgdHJ5IHRvIGtlZXAgdXNlcnMKK2F0IHRoZSBtZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuICBCeSBjb250cmFzdCwgb3VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhlCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzCitzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuCitZb3UgY2FuIHVzZSBpdCBmb3IgeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgU3BlY2lmaWNhbGx5LCB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBkZXNpZ25lZCB0byBtYWtlCitzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZ2l2ZSBhd2F5IG9yIHNlbGwgY29waWVzIG9mIGZyZWUKK3NvZnR3YXJlLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsCit0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlCitwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIGEgc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHRlbGwgdGhlbSB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yYHMgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9yc2AgcmVwdXRhdGlvbnMuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoCitjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZQorIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK1Byb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zLiAgRWFjaAorbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UKK2NvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kCitkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLiAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YKK3RyYW5zZmVycmluZyBhIGNvcHkuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZgoraXQsIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBoCisxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0CisgICAgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQKKworICAgIGIpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQKKyAgICBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGVpdGhlcgorICAgIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsCisgICAgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChleGNlcHQKKyAgICB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwKKyAgICB0aGlyZCBwYXJ0aWVzLCBhdCB5b3VyIG9wdGlvbikuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4KKyAgICBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaCBpbnRlcmFjdGl2ZSB1c2UKKyAgICBpbiB0aGUgc2ltcGxlc3QgYW5kIG1vc3QgdXN1YWwgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZQorICAgIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEKKyAgICB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGVzZQorICAgIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIEdlbmVyYWwKKyAgICBQdWJsaWMgTGljZW5zZS4KKworICAgIGQpIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhCisgICAgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbgorICAgIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworTWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIGluZGVwZW5kZW50IHdvcmsgd2l0aCB0aGUgUHJvZ3JhbSAob3IgaXRzCitkZXJpdmF0aXZlKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZwordGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoZXNlIHRlcm1zLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YKK2l0LCB1bmRlciBQYXJhZ3JhcGggMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGIpIGFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5IGZyZWUgKGV4Y2VwdCBmb3IgYSBub21pbmFsIGNoYXJnZQorICAgIGZvciB0aGUgY29zdCBvZiBkaXN0cmlidXRpb24pIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBjKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHdoZXJlIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSBhbG9uZS4pCisKK1NvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcKK21vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucworYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnM7IGJ1dCwgYXMgYSBzcGVjaWFsCitleGNlcHRpb24sIGl0IG5lZWQgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgd2hpY2ggYXJlIHN0YW5kYXJkCitsaWJyYXJpZXMgdGhhdCBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUKK2ZpbGUgcnVucywgb3IgZm9yIHN0YW5kYXJkIGhlYWRlciBmaWxlcyBvciBkZWZpbml0aW9ucyBmaWxlcyB0aGF0CithY2NvbXBhbnkgdGhhdCBvcGVyYXRpbmcgc3lzdGVtLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciB0aGUKK1Byb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyCit0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB0byB1c2UKK3RoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQKK2NvcGllcywgb3IgcmlnaHRzIHRvIHVzZSBjb3BpZXMsIGZyb20geW91IHVuZGVyIHRoaXMgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzCityZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIEJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSkgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UgdG8gZG8gc28sCithbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbAorbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZQordGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZQorcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKworICA3LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhlIGxpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDguIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgOS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEwLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICBBcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIGh1bWFuaXR5LCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlCit0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdCB0bworYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkKK3RoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW1gcyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAxLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl4eCBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3YC4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUKK2FwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUKK2NvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cKK2NgOyB0aGV5IGNvdWxkIGV2ZW4gYmUgbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIKK3Byb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIHByb2dyYW0gYEdub21vdmlzaW9uYCAoYSBwcm9ncmFtIHRvIGRpcmVjdCBjb21waWxlcnMgdG8gbWFrZSBwYXNzZXMKKyAgYXQgYXNzZW1ibGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXRgcyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTItd2l0aC1iaXNvbi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzNDI3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uCkBAIC0wLDAgKzEsNyBAQAorCitpbnNlcnQgR1BMIHYyIHRleHQgaGVyZQorCitCaXNvbiBFeGNlcHRpb24KK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucyBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuYHQgaXRzZWxmIGEgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YgYXMgYSBwYXJzZXIgc2tlbGV0b24uIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbiB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1YWJiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAKQEAgLTAsMCArMSwxMzIgQEAKKworR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4gKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgWW91IGNhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKK0Fsc28sIGZvciBlYWNoIGF1dGhvcmBzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnNgIHJlcHV0YXRpb25zLgorCitGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZSBwcm9ncmFtIHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmVgcyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LgorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbWBzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKK2EpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCitiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKzcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKK05PIFdBUlJBTlRZCisKKzExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCitUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW1gcyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KK0NvcHlyaWdodCAoQykgeXl5eSAgbmFtZSBvZiBhdXRob3IKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2FzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCitvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCitHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKK0dub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMKK3R5cGUgYHNob3cgd2AuICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUKK3RvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgY2AgCitmb3IgZGV0YWlscy4KK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgd2AgYW5kIGBzaG93IGNgIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkgYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHdgIGFuZCBgc2hvdyBjYDsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0CitpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbSBgR25vbW92aXNpb25gCisod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiAKK2J5IEphbWVzIEhhY2tlci4KKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk4OQorVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBsaWJyYXJ5LiBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGRlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDE3IEBACisKK2luc2VydCBHUEwgdjIgdGV4dCBoZXJlCisKK0dDQyBMaW5raW5nIEV4Y2VwdGlvbgorSW4gYWRkaXRpb24gdG8gdGhlIHBlcm1pc3Npb25zIGluIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlIGNvbXBpbGVkIHZlcnNpb24KK29mIHRoaXMgZmlsZSBpbnRvIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zLCBhbmQgdG8gZGlzdHJpYnV0ZSB0aG9zZQorY29tYmluYXRpb25zIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9uIGNvbWluZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBmaWxlLiAoVGhlCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJlc3RyaWN0aW9ucyBkbyBhcHBseSBpbiBvdGhlciByZXNwZWN0czsgZm9yIGV4YW1wbGUsCit0aGV5IGNvdmVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSwgYW5kIGRpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byBhCitjb21iaW5lIGV4ZWN1dGFibGUuKQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODZjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtT3BlblNTTC1leGNlcHRpb24KQEAgLTAsMCArMSwyODUgQEAKKworR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4gKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgWW91IGNhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKK0Fsc28sIGZvciBlYWNoIGF1dGhvcmBzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnNgIHJlcHV0YXRpb25zLgorCitGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZSBwcm9ncmFtIHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmVgcyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LgorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbWBzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKK2EpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCitiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKzcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKK05PIFdBUlJBTlRZCisKKzExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCitUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW1gcyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KK0NvcHlyaWdodCAoQykgeXl5eSAgbmFtZSBvZiBhdXRob3IKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2FzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCitvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCitHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKK0dub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMKK3R5cGUgYHNob3cgd2AuICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUKK3RvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgY2AgCitmb3IgZGV0YWlscy4KK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgd2AgYW5kIGBzaG93IGNgIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkgYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHdgIGFuZCBgc2hvdyBjYDsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0CitpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbSBgR25vbW92aXNpb25gCisod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiAKK2J5IEphbWVzIEhhY2tlci4KKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk4OQorVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBsaWJyYXJ5LiBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgorCisKK0luIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcgorZ2l2ZXMgcGVybWlzc2lvbiB0byBsaW5rIHRoZSBjb2RlIG9mIHRoaXMgcHJvZ3JhbSB3aXRoCithbnkgdmVyc2lvbiBvZiB0aGUgT3BlblNTTCBsaWJyYXJ5IHdoaWNoIGlzIGRpc3RyaWJ1dGVkCit1bmRlciBhIGxpY2Vuc2UgaWRlbnRpY2FsIHRvIHRoYXQgbGlzdGVkIGluIHRoZSBpbmNsdWRlZAorQ09QWUlORy5PcGVuU1NMIGZpbGUsIGFuZCBkaXN0cmlidXRlIGxpbmtlZCBjb21iaW5hdGlvbnMKK2luY2x1ZGluZyB0aGUgdHdvLiBZb3UgbXVzdCBvYmV5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW4gYWxsIHJlc3BlY3RzIGZvciBhbGwgb2YgdGhlIGNvZGUgdXNlZCBvdGhlcgordGhhbiBPcGVuU1NMLiBJZiB5b3UgbW9kaWZ5IHRoaXMgZmlsZSwgeW91IG1heSBleHRlbmQgdGhpcworZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgZmlsZSwgYnV0IHlvdSBhcmUgbm90CitvYmxpZ2F0ZWQgdG8gZG8gc28uIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlCit0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCisKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKworICBMSUNFTlNFIElTU1VFUworICA9PT09PT09PT09PT09PQorCisgIFRoZSBPcGVuU1NMIHRvb2xraXQgc3RheXMgdW5kZXIgYSBkdWFsIGxpY2Vuc2UsIGkuZS4gYm90aCB0aGUgY29uZGl0aW9ucyBvZgorICB0aGUgT3BlblNTTCBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgU1NMZWF5IGxpY2Vuc2UgYXBwbHkgdG8gdGhlIHRvb2xraXQuCisgIFNlZSBiZWxvdyBmb3IgdGhlIGFjdHVhbCBsaWNlbnNlIHRleHRzLiBBY3R1YWxseSBib3RoIGxpY2Vuc2VzIGFyZSBCU0Qtc3R5bGUKKyAgT3BlbiBTb3VyY2UgbGljZW5zZXMuIEluIGNhc2Ugb2YgYW55IGxpY2Vuc2UgaXNzdWVzIHJlbGF0ZWQgdG8gT3BlblNTTAorICBwbGVhc2UgY29udGFjdCBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisKKyAgT3BlblNTTCBMaWNlbnNlCisgIC0tLS0tLS0tLS0tLS0tLQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyYWFkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KQEAgLTAsMCArMSw2IEBACisKK2luc2VydCBHUEwgdjIgbGljZW5zZSB0ZXh0IGhlcmUKKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHJlc3BlY3RpdmUgQXV0b2NvbmYgTWFjcm9gcyBjb3B5cmlnaHQgb3duZXIgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZSBjb25maWd1cmUgc2NyaXB0cyB0aGF0IGFyZSB0aGUgb3V0cHV0IG9mIEF1dG9jb25mIHdoZW4gcHJvY2Vzc2luZyB0aGUgTWFjcm8uIFlvdSBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB3aGVuIHVzaW5nICBvciAKK1RoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZSBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZCB2ZXJzaW9uIGFzIHdlbGwuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWNsYXNzcGF0aC1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZTljZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uCkBAIC0wLDAgKzEsNyBAQAorCitpbnNlcnQgR1BMIHYyIGxpY2Vuc2UgdGV4dCBoZXJlCisKK0xpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzIG1ha2luZyBhIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiBUaHVzLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNvdmVyIHRoZSB3aG9sZSBjb21iaW5hdGlvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdSBwZXJtaXNzaW9uIHRvIGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGggaW5kZXBlbmRlbnQgbW9kdWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpY2Vuc2UgdGVybXMgb2YgdGhlc2UgaW5kZXBlbmRlbnQgbW9kdWxlcywgYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQsIGZvciBlYWNoIGxpbmtlZCBpbmRlcGVuZGVudCBtb2R1bGUsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBvZiB0aGF0IG1vZHVsZS4gQW4gaW5kZXBlbmRlbnQgbW9kdWxlIGlzIGEgbW9kdWxlIHdoaWNoIGlzIG5vdCBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiBJZiB5b3UgbW9kaWZ5IHRoaXMgbGlicmFyeSwgeW91IG1heSBleHRlbmQgdGhpcyBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI0MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMTggQEAKKworaW5zZXJ0IEdQTCB2MiB0ZXh0IGhlcmUKKworRm9udCBFeGNlcHRpb24KK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBjcmVhdGUgYSBkb2N1bWVudCB3aGljaCB1c2VzIHRoaXMgZm9udCwgYW5kCitlbWJlZCB0aGlzIGZvbnQgb3IgdW5hbHRlcmVkIHBvcnRpb25zIG9mIHRoaXMgZm9udCBpbnRvIHRoZSBkb2N1bWVudCwgdGhpcyBmb250Citkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBkb2N1bWVudCB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIKK3JlYXNvbnMgd2h5IHRoZSBkb2N1bWVudCBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSWYKK3lvdSBtb2RpZnkgdGhpcyBmb250LCB5b3UgbWF5IGV4dGVuZCB0aGlzIGV4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlCitmb250LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZQordGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2NjVhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAKQEAgLTAsMCArMSwyMjUgQEAKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKK0NvcHlyaWdodCDCqSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvciBzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlIHNvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdXNlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0byBhbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gWW91IGNhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdSB0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlcmVmb3JlLCB5b3UgaGF2ZSBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tIG9mIG90aGVycy4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZSBnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgorCitGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBGb3IgYm90aCB1c2VycycgYW5kIGF1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMgY2hhbmdlZCwgc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1dGVkIGVycm9uZW91c2x5IHRvIGF1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisKK1NvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4gbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlIGluc2lkZSB0aGVtLCBhbHRob3VnaCB0aGUgbWFudWZhY3R1cmVyIGNhbiBkbyBzby4gVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YgcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiBUaGUgc3lzdGVtYXRpYyBwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0byB1c2UsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBpdCBpcyBtb3N0IHVuYWNjZXB0YWJsZS4gVGhlcmVmb3JlLCB3ZSBoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UgcHJvZHVjdHMuIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZSBzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCisKK0ZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuIFN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZiBzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0byBhdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQgbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdCBwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KK1RFUk1TIEFORCBDT05ESVRJT05TCiswLiBEZWZpbml0aW9ucy4KKwor4oCcVGhpcyBMaWNlbnNl4oCdIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCivigJxDb3B5cmlnaHTigJ0gYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2Ygd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKwor4oCcVGhlIFByb2dyYW3igJ0gcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyDigJx5b3XigJ0uIOKAnExpY2Vuc2Vlc+KAnSBhbmQg4oCccmVjaXBpZW50c+KAnSBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworVG8g4oCcbW9kaWZ54oCdIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsgaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuIGV4YWN0IGNvcHkuIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSDigJxtb2RpZmllZCB2ZXJzaW9u4oCdIG9mIHRoZSBlYXJsaWVyIHdvcmsgb3IgYSB3b3JrIOKAnGJhc2VkIG9u4oCdIHRoZSBlYXJsaWVyIHdvcmsuCisKK0Eg4oCcY292ZXJlZCB3b3Jr4oCdIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworVG8g4oCccHJvcGFnYXRl4oCdIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQgcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvciBpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEgY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLCBkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKK1RvIOKAnGNvbnZleeKAnSBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyIHBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuCisKK0FuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzIOKAnEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXPigJ0gdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZSBmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikgdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZSB3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhIG1lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCisxLiBTb3VyY2UgQ29kZS4KKworVGhlIOKAnHNvdXJjZSBjb2Rl4oCdIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4g4oCcT2JqZWN0IGNvZGXigJ0gbWVhbnMgYW55IG5vbi1zb3VyY2UgZm9ybSBvZiBhIHdvcmsuCisKK0Eg4oCcU3RhbmRhcmQgSW50ZXJmYWNl4oCdIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbCBzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mIGludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0IGlzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCitUaGUg4oCcU3lzdGVtIExpYnJhcmllc+KAnSBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIgdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YgcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvciBDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQgTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uIEEg4oCcTWFqb3IgQ29tcG9uZW504oCdLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudCAoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtIChpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvIHByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgorCitUaGUg4oCcQ29ycmVzcG9uZGluZyBTb3VyY2XigJ0gZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlIHdvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8gY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MgU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZSBwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5IGxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLCBzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZSBzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKK1RoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMgY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4KKworVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0IHNhbWUgd29yay4KKzIuIEJhc2ljIFBlcm1pc3Npb25zLgorCitBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZiBjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZCBjb25kaXRpb25zIGFyZSBtZXQuIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYSBjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMgY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91ciByaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KKworWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdCBjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucyBpbiBmb3JjZS4gWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91IHdpdGggZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8gbm90IGNvbnRyb2wgY29weXJpZ2h0LiBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzIGZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24gYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mIHlvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCisKK0NvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwIG1ha2VzIGl0IHVubmVjZXNzYXJ5LgorMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3Igc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaCBtZWFzdXJlcy4KKworV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24gaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzIHVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgorNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4KKworWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55IG5vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwgcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwgYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKzUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCisKK1lvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8gcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICAqIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZCBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisgICAgKiBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24gNy4gVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvIOKAnGtlZXAgaW50YWN0IGFsbCBub3RpY2Vz4oCdLgorICAgICogYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuIFRoaXMgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuIFRoaXMgTGljZW5zZSBnaXZlcyBubyBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90IGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCisgICAgKiBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCisKK0EgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywgYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiDigJxhZ2dyZWdhdGXigJ0gaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90IHVzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsgaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKzYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgorCitZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUgbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgICogYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdCAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorICAgICogYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdCAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0IG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8gbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKyAgICAqIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggc3Vic2VjdGlvbiA2Yi4KKyAgICAqIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubyBmdXJ0aGVyIGNoYXJnZS4gWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gSWYgdGhlIHBsYWNlIHRvIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KKyAgICAqIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubyBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KKworQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlIGluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KKworQSDigJxVc2VyIFByb2R1Y3TigJ0gaXMgZWl0aGVyICgxKSBhIOKAnGNvbnN1bWVyIHByb2R1Y3TigJ0sIHdoaWNoIG1lYW5zIGFueSB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LCBvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uIGludG8gYSBkd2VsbGluZy4gSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LCBkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gRm9yIGEgcGFydGljdWxhciBwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCDigJxub3JtYWxseSB1c2Vk4oCdIHJlZmVycyB0byBhIHR5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cyBvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlciBhY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuIEEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbCBjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudCB0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKwor4oCcSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9u4oCdIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywgcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsIGFuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gVGhlIGluZm9ybWF0aW9uIG11c3Qgc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QgY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCisKK0lmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yIHNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzIHBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZSBVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhIGZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5IGlmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsIG1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMgYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSByZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMgZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuIEFjY2VzcyB0byBhIG5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZCBwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgorCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseSBkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IgdW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCis3LiBBZGRpdGlvbmFsIFRlcm1zLgorCivigJxBZGRpdGlvbmFsIHBlcm1pc3Npb25z4oCdIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLiBBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsIGJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQgdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5IHVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCitXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIHJlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZiBpdC4gKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24gcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pIFlvdSBtYXkgcGxhY2UgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLCBmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKK05vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgorCisgICAgKiBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKKyAgICAqIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvciBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCisgICAgKiBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKyAgICAqIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisgICAgKiBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorICAgICogZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdCBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24gdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCitBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCDigJxmdXJ0aGVyIHJlc3RyaWN0aW9uc+KAnSB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gSWYgdGhlIFByb2dyYW0gYXMgeW91IHJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlciByZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMgYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcyBub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KKworSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdSBtdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUgYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nIHdoZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCisKK0FkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlIGZvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7IHRoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKzguIFRlcm1pbmF0aW9uLgorCitZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yIG1vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkIHBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKK01vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQgY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlciB5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZS4gSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseSByZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lIG1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCis5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KKworWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yIHJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yayBvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiB0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuIEhvd2V2ZXIsIG5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgYW55IGNvdmVyZWQgd29yay4gVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhIGNvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKK0VhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kIHByb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworQW4g4oCcZW50aXR5IHRyYW5zYWN0aW9u4oCdIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4gb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbiBvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0IHRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlciBsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQgZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmIHRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4KKworWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24gKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KKzExLiBQYXRlbnRzLgorCitBIOKAnGNvbnRyaWJ1dG9y4oCdIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcyBMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gVGhlIHdvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3Mg4oCcY29udHJpYnV0b3IgdmVyc2lvbuKAnS4KKworQSBjb250cmlidXRvcidzIOKAnGVzc2VudGlhbCBwYXRlbnQgY2xhaW1z4oCdIGFyZSBhbGwgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZCBieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sIGJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhIGNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCDigJxjb250cm9s4oCdIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudCBwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLgorCitFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kIHByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCisKK0luIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSDigJxwYXRlbnQgbGljZW5zZeKAnSBpcyBhbnkgZXhwcmVzcyBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQgKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0byBzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiBUbyDigJxncmFudOKAnSBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYSBwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCisKK0lmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lIHRvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEgcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywgdGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbyBhdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlIHBhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQgbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuIOKAnEtub3dpbmdseSByZWx5aW5n4oCdIG1lYW5zIHlvdSBoYXZlIGFjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZSBjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdCBjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCitJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yIGFycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEgY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzIHJlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeSBvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlIHlvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCitBIHBhdGVudCBsaWNlbnNlIGlzIOKAnGRpc2NyaW1pbmF0b3J54oCdIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluIHRoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzIGNvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQgd29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMgaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudCB0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZyB0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUgcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5IHBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkgZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQgY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LCBvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nIGFueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5IG90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKzEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgorCitJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGNvbnZleSBpdCBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UgdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5IHRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCisxMy4gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZSBwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUgY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuIFRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLCBidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gYXMgc3VjaC4KKzE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSDigJxvciBhbnkgbGF0ZXIgdmVyc2lvbuKAnSBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBQcm9ncmFtLgorCitMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBwZXJtaXNzaW9ucy4gSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkgYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYSBsYXRlciB2ZXJzaW9uLgorMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKK1RIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSDigJxBUyBJU+KAnSBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUyBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KKworSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkIGFib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLCByZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMgYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhIGNvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCitUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUg4oCcY29weXJpZ2h04oCdIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKyAgICBUaGlzIHByb2dyYW0gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcyBtaWdodCBiZSBkaWZmZXJlbnQ7IGZvciBhIEdVSSBpbnRlcmZhY2UsIHlvdSB3b3VsZCB1c2UgYW4g4oCcYWJvdXQgYm944oCdLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSDigJxjb3B5cmlnaHQgZGlzY2xhaW1lcuKAnSBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gQnV0IGZpcnN0LCBwbGVhc2UgcmVhZCA8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk2OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24KQEAgLTAsMCArMSwyNyBAQAorCitpbnNlcnQgR1BMIHYzIHRleHQgaGVyZQorCitHQ0MgUlVOVElNRSBMSUJSQVJZIEVYQ0VQVElPTgorVmVyc2lvbiAzLjEsIDMxIE1hcmNoIDIwMDkKKworR2VuZXJhbCBpbmZvcm1hdGlvbjoKK2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9nY2MtZXhjZXB0aW9uLmh0bWwKK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK1RoaXMgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gKCJFeGNlcHRpb24iKSBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4gSXQgYXBwbGllcyB0byBhIGdpdmVuIGZpbGUgKHRoZSAiUnVudGltZSBMaWJyYXJ5IikgdGhhdCBiZWFycyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIGZpbGUgc3RhdGluZyB0aGF0IHRoZSBmaWxlIGlzIGdvdmVybmVkIGJ5IEdQTHYzIGFsb25nIHdpdGggdGhpcyBFeGNlcHRpb24uCitXaGVuIHlvdSB1c2UgR0NDIHRvIGNvbXBpbGUgYSBwcm9ncmFtLCBHQ0MgbWF5IGNvbWJpbmUgcG9ydGlvbnMgb2YgY2VydGFpbiBHQ0MgaGVhZGVyIGZpbGVzIGFuZCBydW50aW1lIGxpYnJhcmllcyB3aXRoIHRoZSBjb21waWxlZCBwcm9ncmFtLiBUaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBjb21waWxhdGlvbiBvZiBub24tR1BMIChpbmNsdWRpbmcgcHJvcHJpZXRhcnkpIHByb2dyYW1zIHRvIHVzZSwgaW4gdGhpcyB3YXksIHRoZSBoZWFkZXIgZmlsZXMgYW5kIHJ1bnRpbWUgbGlicmFyaWVzIGNvdmVyZWQgYnkgdGhpcyBFeGNlcHRpb24uCisKKzAuIERlZmluaXRpb25zLgorQSBmaWxlIGlzIGFuICJJbmRlcGVuZGVudCBNb2R1bGUiIGlmIGl0IGVpdGhlciByZXF1aXJlcyB0aGUgUnVudGltZSBMaWJyYXJ5IGZvciBleGVjdXRpb24gYWZ0ZXIgYSBDb21waWxhdGlvbiBQcm9jZXNzLCBvciBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBSdW50aW1lIExpYnJhcnksIGJ1dCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBSdW50aW1lIExpYnJhcnkuCisiR0NDIiBtZWFucyBhIHZlcnNpb24gb2YgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgZ292ZXJuZWQgYnkgdmVyc2lvbiAzIChvciBhIHNwZWNpZmllZCBsYXRlciB2ZXJzaW9uKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgd2l0aCB0aGUgb3B0aW9uIG9mIHVzaW5nIGFueSBzdWJzZXF1ZW50IHZlcnNpb25zIHB1Ymxpc2hlZCBieSB0aGUgRlNGLgorIkdQTC1jb21wYXRpYmxlIFNvZnR3YXJlIiBpcyBzb2Z0d2FyZSB3aG9zZSBjb25kaXRpb25zIG9mIHByb3BhZ2F0aW9uLCBtb2RpZmljYXRpb24gYW5kIHVzZSB3b3VsZCBwZXJtaXQgY29tYmluYXRpb24gd2l0aCBHQ0MgaW4gYWNjb3JkIHdpdGggdGhlIGxpY2Vuc2Ugb2YgR0NDLgorIlRhcmdldCBDb2RlIiByZWZlcnMgdG8gb3V0cHV0IGZyb20gYW55IGNvbXBpbGVyIGZvciBhIHJlYWwgb3IgdmlydHVhbCB0YXJnZXQgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSwgaW4gZXhlY3V0YWJsZSBmb3JtIG9yIHN1aXRhYmxlIGZvciBpbnB1dCB0byBhbiBhc3NlbWJsZXIsIGxvYWRlciwgbGlua2VyIGFuZC9vciBleGVjdXRpb24gcGhhc2UuIE5vdHdpdGhzdGFuZGluZyB0aGF0LCBUYXJnZXQgQ29kZSBkb2VzIG5vdCBpbmNsdWRlIGRhdGEgaW4gYW55IGZvcm1hdCB0aGF0IGlzIHVzZWQgYXMgYSBjb21waWxlciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24sIG9yIHVzZWQgZm9yIHByb2R1Y2luZyBhIGNvbXBpbGVyIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KK1RoZSAiQ29tcGlsYXRpb24gUHJvY2VzcyIgdHJhbnNmb3JtcyBjb2RlIGVudGlyZWx5IHJlcHJlc2VudGVkIGluIG5vbi1pbnRlcm1lZGlhdGUgbGFuZ3VhZ2VzIGRlc2lnbmVkIGZvciBodW1hbi13cml0dGVuIGNvZGUsIGFuZC9vciBpbiBKYXZhIFZpcnR1YWwgTWFjaGluZSBieXRlIGNvZGUsIGludG8gVGFyZ2V0IENvZGUuIFRodXMsIGZvciBleGFtcGxlLCB1c2Ugb2Ygc291cmNlIGNvZGUgZ2VuZXJhdG9ycyBhbmQgcHJlcHJvY2Vzc29ycyBuZWVkIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIENvbXBpbGF0aW9uIFByb2Nlc3MsIHNpbmNlIHRoZSBDb21waWxhdGlvbiBQcm9jZXNzIGNhbiBiZSB1bmRlcnN0b29kIGFzIHN0YXJ0aW5nIHdpdGggdGhlIG91dHB1dCBvZiB0aGUgZ2VuZXJhdG9ycyBvciBwcmVwcm9jZXNzb3JzLgorQSBDb21waWxhdGlvbiBQcm9jZXNzIGlzICJFbGlnaWJsZSIgaWYgaXQgaXMgZG9uZSB1c2luZyBHQ0MsIGFsb25lIG9yIHdpdGggb3RoZXIgR1BMLWNvbXBhdGlibGUgc29mdHdhcmUsIG9yIGlmIGl0IGlzIGRvbmUgd2l0aG91dCB1c2luZyBhbnkgd29yayBiYXNlZCBvbiBHQ0MuIEZvciBleGFtcGxlLCB1c2luZyBub24tR1BMLWNvbXBhdGlibGUgU29mdHdhcmUgdG8gb3B0aW1pemUgYW55IEdDQyBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25zIHdvdWxkIG5vdCBxdWFsaWZ5IGFzIGFuIEVsaWdpYmxlIENvbXBpbGF0aW9uIFByb2Nlc3MuCisKKzEuIEdyYW50IG9mIEFkZGl0aW9uYWwgUGVybWlzc2lvbi4KK1lvdSBoYXZlIHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIGEgd29yayBvZiBUYXJnZXQgQ29kZSBmb3JtZWQgYnkgY29tYmluaW5nIHRoZSBSdW50aW1lIExpYnJhcnkgd2l0aCBJbmRlcGVuZGVudCBNb2R1bGVzLCBldmVuIGlmIHN1Y2ggcHJvcGFnYXRpb24gd291bGQgb3RoZXJ3aXNlIHZpb2xhdGUgdGhlIHRlcm1zIG9mIEdQTHYzLCBwcm92aWRlZCB0aGF0IGFsbCBUYXJnZXQgQ29kZSB3YXMgZ2VuZXJhdGVkIGJ5IEVsaWdpYmxlIENvbXBpbGF0aW9uIFByb2Nlc3Nlcy4gWW91IG1heSB0aGVuIGNvbnZleSBzdWNoIGEgY29tYmluYXRpb24gdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGljZW5zaW5nIG9mIHRoZSBJbmRlcGVuZGVudCBNb2R1bGVzLgorCisyLiBObyBXZWFrZW5pbmcgb2YgR0NDIENvcHlsZWZ0LgorVGhlIGF2YWlsYWJpbGl0eSBvZiB0aGlzIEV4Y2VwdGlvbiBkb2VzIG5vdCBpbXBseSBhbnkgZ2VuZXJhbCBwcmVzdW1wdGlvbiB0aGF0IHRoaXJkLXBhcnR5IHNvZnR3YXJlIGlzIHVuYWZmZWN0ZWQgYnkgdGhlIGNvcHlsZWZ0IHJlcXVpcmVtZW50cyBvZiB0aGUgbGljZW5zZSBvZiBHQ0MuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmYwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjggQEAKKworaW5zZXJ0IEdQTCB2MyB0ZXh0IGhlcmUKKworQVVUT0NPTkYgQ09ORklHVVJFIFNDUklQVCBFWENFUFRJT04KKworVmVyc2lvbiAzLjAsIDE4IEF1Z3VzdCAyMDA5CisKK0NvcHlyaWdodCAmIzE2OTsgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4gSXQgYXBwbGllcyB0byBhIGdpdmVuIGZpbGUgdGhhdCBiZWFycyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIGZpbGUgc3RhdGluZyB0aGF0IHRoZSBmaWxlIGlzIGdvdmVybmVkIGJ5IEdQTHYzIGFsb25nIHdpdGggdGhpcyBFeGNlcHRpb24uCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgRXhjZXB0aW9uIGlzIHRvIGFsbG93IGRpc3RyaWJ1dGlvbiBvZiBBdXRvY29uZmBzIHR5cGljYWwgb3V0cHV0IHVuZGVyIHRlcm1zIG9mIHRoZSByZWNpcGllbnRgcyBjaG9pY2UgKGluY2x1ZGluZyBwcm9wcmlldGFyeSkuCisKKzAuIERlZmluaXRpb25zLgorIkNvdmVyZWQgQ29kZSIgaXMgdGhlIHNvdXJjZSBvciBvYmplY3QgY29kZSBvZiBhIHZlcnNpb24gb2YgQXV0b2NvbmYgdGhhdCBpcyBhIGNvdmVyZWQgd29yayB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyJOb3JtYWxseSBDb3BpZWQgQ29kZSIgZm9yIGEgdmVyc2lvbiBvZiBBdXRvY29uZiBtZWFucyBhbGwgcGFydHMgb2YgaXRzIENvdmVyZWQgQ29kZSB3aGljaCB0aGF0IHZlcnNpb24gY2FuIGNvcHkgZnJvbSBpdHMgY29kZSAoaS5lLiwgbm90IGZyb20gaXRzIGlucHV0IGZpbGUpIGludG8gaXRzIG1pbmltYWxseSB2ZXJib3NlLCBub24tZGVidWdnaW5nIGFuZCBub24tdHJhY2luZyBvdXRwdXQuCisKKyJJbmVsaWdpYmxlIENvZGUiIGlzIENvdmVyZWQgQ29kZSB0aGF0IGlzIG5vdCBOb3JtYWxseSBDb3BpZWQgQ29kZS4KKworMS4gR3JhbnQgb2YgQWRkaXRpb25hbCBQZXJtaXNzaW9uLgorWW91IGhhdmUgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3V0cHV0IG9mIEF1dG9jb25mLCBldmVuIGlmIHN1Y2ggcHJvcGFnYXRpb24gd291bGQgb3RoZXJ3aXNlIHZpb2xhdGUgdGhlIHRlcm1zIG9mIEdQTHYzLiBIb3dldmVyLCBpZiBieSBtb2RpZnlpbmcgQXV0b2NvbmYgeW91IGNhdXNlIGFueSBJbmVsaWdpYmxlIENvZGUgb2YgdGhlIHZlcnNpb24geW91IHJlY2VpdmVkIHRvIGJlY29tZSBOb3JtYWxseSBDb3BpZWQgQ29kZSBvZiB5b3VyIG1vZGlmaWVkIHZlcnNpb24sIHRoZW4geW91IHZvaWQgdGhpcyBFeGNlcHRpb24gZm9yIHRoZSByZXN1bHRpbmcgY292ZXJlZCB3b3JrLiBJZiB5b3UgY29udmV5IHRoYXQgcmVzdWx0aW5nIGNvdmVyZWQgd29yaywgeW91IG11c3QgcmVtb3ZlIHRoaXMgRXhjZXB0aW9uIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgc2Vjb25kIHBhcmFncmFwaCBvZiBTZWN0aW9uIDcgb2YgR1BMdjMuCisKKzIuIE5vIFdlYWtlbmluZyBvZiBBdXRvY29uZiBDb3B5bGVmdC4KK1RoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBFeGNlcHRpb24gZG9lcyBub3QgaW1wbHkgYW55IGdlbmVyYWwgcHJlc3VtcHRpb24gdGhhdCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpcyB1bmFmZmVjdGVkIGJ5IHRoZSBjb3B5bGVmdCByZXF1aXJlbWVudHMgb2YgdGhlIGxpY2Vuc2Ugb2YgQXV0b2NvbmYuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0hQTkQgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9IUE5ECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGJiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9IUE5ECkBAIC0wLDAgKzEsMTEgQEAKKworSGlzdG9yaWNhbCBQZXJtaXNzaW9uIE5vdGljZSBhbmQgRGlzY2xhaW1lcgorCis8Y29weXJpZ2h0IG5vdGljZT4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzWyxdIFthbmRdIHRoYXQgYm90aCBbdGhhdF0gW3RoZV0gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uWywgYW5kIHRoYXQgdGhlIG5hbWUgW29mXSA8Y29weXJpZ2h0IGhvbGRlcj4gW29yIDxyZWxhdGVkIGVudGl0aWVzPl0gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb25dLiBbPGNvcHlyaWdodCBob2xkZXI+IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuXQorCitbPGNvcHlyaWdodCBob2xkZXI+IERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1NbLF1bLl0gSU4gTk8gRVZFTlQgU0hBTEwgPGNvcHlyaWdodCBob2xkZXI+IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5dCisKKy0tLQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5YjZmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lDVQpAQCAtMCwwICsxLDEzIEBACitDT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFCisKK0NvcHlyaWdodCAoYykgMTk5NS0yMDEyIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycworCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSE9MREVSUyBJTkNMVURFRCBJTiBUSElTIE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworQWxsIHRyYWRlbWFya3MgYW5kIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBtZW50aW9uZWQgaGVyZWluIGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuIApkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjViMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEEKQEAgLTAsMCArMSw5NSBAQAorCitJUEEgRm9udCBMaWNlbnNlIEFncmVlbWVudCB2MS4wIAorIAorCitUaGUgTGljZW5zb3IgcHJvdmlkZXMgdGhlIExpY2Vuc2VkIFByb2dyYW0gKGFzIGRlZmluZWQgaW4gQXJ0aWNsZSAxIGJlbG93KSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFncmVlbWVudCAoIkFncmVlbWVudCIpLiAgQW55IHVzZSwgcmVwcm9kdWN0aW9uIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSwgb3IgYW55IGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBieSBhIFJlY2lwaWVudCAoYXMgZGVmaW5lZCBpbiBBcnRpY2xlIDEgYmVsb3cpIGNvbnN0aXR1dGVzIHRoZSBSZWNpcGllbnRgcyBhY2NlcHRhbmNlIG9mIHRoaXMgQWdyZWVtZW50LgorCisKK0FydGljbGUgMSAoRGVmaW5pdGlvbnMpCisKKzEuICAgICAgICAgIkRpZ2l0YWwgRm9udCBQcm9ncmFtIiBzaGFsbCBtZWFuIGEgY29tcHV0ZXIgcHJvZ3JhbSBjb250YWluaW5nLCBvciB1c2VkIHRvIHJlbmRlciBvciBkaXNwbGF5IGZvbnRzLgorCisyLiAgICAgICAgICJMaWNlbnNlZCBQcm9ncmFtIiBzaGFsbCBtZWFuIGEgRGlnaXRhbCBGb250IFByb2dyYW0gbGljZW5zZWQgYnkgdGhlIExpY2Vuc29yIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorCiszLiAgICAgICAgICJEZXJpdmVkIFByb2dyYW0iIHNoYWxsIG1lYW4gYSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIGEgbW9kaWZpY2F0aW9uLCBhZGRpdGlvbiwgZGVsZXRpb24sIHJlcGxhY2VtZW50IG9yIGFueSBvdGhlciBhZGFwdGF0aW9uIHRvIG9yIG9mIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0sIGFuZCBpbmNsdWRlcyBhIGNhc2Ugd2hlcmUgYSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSBuZXdseSBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgZm9udCBpbmZvcm1hdGlvbiBmcm9tIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgRW1iZWRkZWQgRm9udHMgZnJvbSBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIG9mIHRoZSByZXRyaWV2ZWQgZm9udCBpbmZvcm1hdGlvbi4gCisKKzQuICAgICAgICAgIkRpZ2l0YWwgQ29udGVudCIgc2hhbGwgbWVhbiBwcm9kdWN0cyBwcm92aWRlZCB0byBlbmQgdXNlcnMgaW4gdGhlIGZvcm0gb2YgZGlnaXRhbCBkYXRhLCBpbmNsdWRpbmcgdmlkZW8gY29udGVudCwgbW90aW9uIGFuZC9vciBzdGlsbCBwaWN0dXJlcywgVFYgcHJvZ3JhbXMgb3Igb3RoZXIgYnJvYWRjYXN0aW5nIGNvbnRlbnQgYW5kIHByb2R1Y3RzIGNvbnNpc3Rpbmcgb2YgY2hhcmFjdGVyIHRleHQsIHBpY3R1cmVzLCBwaG90b2dyYXBoaWMgaW1hZ2VzLCBncmFwaGljIHN5bWJvbHMgYW5kL29yIHRoZSBsaWtlLgorCis1LiAgICAgICAgICJEaWdpdGFsIERvY3VtZW50IEZpbGUiIHNoYWxsIG1lYW4gYSBQREYgZmlsZSBvciBvdGhlciBEaWdpdGFsIENvbnRlbnQgY3JlYXRlZCBieSB2YXJpb3VzIHNvZnR3YXJlIHByb2dyYW1zIGluIHdoaWNoIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYmVjb21lcyBlbWJlZGRlZCBvciBjb250YWluZWQgaW4gdGhlIGZpbGUgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSBmb250ICgiRW1iZWRkZWQgRm9udHMiKS4gIEVtYmVkZGVkIEZvbnRzIGFyZSB1c2VkIG9ubHkgaW4gdGhlIGRpc3BsYXkgb2YgY2hhcmFjdGVycyBpbiB0aGUgcGFydGljdWxhciBEaWdpdGFsIERvY3VtZW50IEZpbGUgd2l0aGluIHdoaWNoIHRoZXkgYXJlIGVtYmVkZGVkLCBhbmQgc2hhbGwgYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIHRob3NlIGluIGFueSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSwgd2hpY2ggbWF5IGJlIHVzZWQgZm9yIGRpc3BsYXkgb2YgY2hhcmFjdGVycyBvdXRzaWRlIHRoYXQgcGFydGljdWxhciBEaWdpdGFsIERvY3VtZW50IEZpbGUuCisKKzYuICAgICAgICAgIkNvbXB1dGVyIiBzaGFsbCBpbmNsdWRlIGEgc2VydmVyIGluIHRoaXMgQWdyZWVtZW50LgorCis3LiAgICAgICAgICJSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiIgc2hhbGwgbWVhbiByZXByb2R1Y3Rpb24sIHRyYW5zZmVyLCBkaXN0cmlidXRpb24sIGxlYXNlLCBwdWJsaWMgdHJhbnNtaXNzaW9uLCBwcmVzZW50YXRpb24sIGV4aGliaXRpb24sIGFkYXB0YXRpb24gYW5kIGFueSBvdGhlciBleHBsb2l0YXRpb24uCisKKzguICAgICAgICAgIlJlY2lwaWVudCIgc2hhbGwgbWVhbiBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgb25lIHRoYXQgcmVjZWl2ZXMgdGhlIExpY2Vuc2VkIFByb2dyYW0gZnJvbSBhIFJlY2lwaWVudC4KKworIAorCitBcnRpY2xlIDIgKEdyYW50IG9mIExpY2Vuc2UpCisKK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIFJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdXNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGluIGFueSBhbmQgYWxsIGNvdW50cmllcyBpbiBhY2NvcmRhbmNlIHdpdGggZWFjaCBvZiB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuIEhvd2V2ZXIsIGFueSBhbmQgYWxsIHJpZ2h0cyB1bmRlcmx5aW5nIGluIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHNoYWxsIGJlIGhlbGQgYnkgdGhlIExpY2Vuc29yLiBJbiBubyBzZW5zZSBpcyB0aGlzIEFncmVlbWVudCBpbnRlbmRlZCB0byB0cmFuc2ZlciBhbnkgcmlnaHQgcmVsYXRpbmcgdG8gdGhlIExpY2Vuc2VkIFByb2dyYW0gaGVsZCBieSB0aGUgTGljZW5zb3IgZXhjZXB0IGFzIHNwZWNpZmljYWxseSBzZXQgZm9ydGggaGVyZWluIG9yIGFueSByaWdodCByZWxhdGluZyB0byBhbnkgdHJhZGVtYXJrLCB0cmFkZSBuYW1lLCBvciBzZXJ2aWNlIG1hcmsgdG8gdGhlIFJlY2lwaWVudC4KKworIAorCisxLiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IGluc3RhbGwgdGhlIExpY2Vuc2VkIFByb2dyYW0gb24gYW55IG51bWJlciBvZiBDb21wdXRlcnMgYW5kIHVzZSB0aGUgc2FtZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCisyLiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IHVzZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBpbiBwcmludGVkIG1hdGVyaWFscyBvciBpbiBEaWdpdGFsIENvbnRlbnQgYXMgYW4gZXhwcmVzc2lvbiBvZiBjaGFyYWN0ZXIgdGV4dHMgb3IgdGhlIGxpa2UuCisKKzMuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgcHJpbnRlZCBtYXRlcmlhbHMgYW5kIERpZ2l0YWwgQ29udGVudCBjcmVhdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYW5kIGluIGFueSBmb3JtIG9mIG1lZGlhIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYnJvYWRjYXN0aW5nLCBjb21tdW5pY2F0aW9uIGFuZCB2YXJpb3VzIHJlY29yZGluZyBtZWRpYS4KKworNC4gICAgICAgICBJZiBhbnkgUmVjaXBpZW50IGV4dHJhY3RzIEVtYmVkZGVkIEZvbnRzIGZyb20gYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgdG8gY3JlYXRlIGEgRGVyaXZlZCBQcm9ncmFtLCBzdWNoIERlcml2ZWQgUHJvZ3JhbSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudC4gIAorCis1LiAgICAgICAgIElmIGFueSBSZWNpcGllbnQgcGVyZm9ybXMgUmVwcm9kdWN0aW9uIG9yIE90aGVyIEV4cGxvaXRhdGlvbiBvZiBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSBpbiB3aGljaCBFbWJlZGRlZCBGb250cyBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcmUgdXNlZCBvbmx5IGZvciByZW5kZXJpbmcgdGhlIERpZ2l0YWwgQ29udGVudCB3aXRoaW4gc3VjaCBEaWdpdGFsIERvY3VtZW50IEZpbGUgdGhlbiBzdWNoIFJlY2lwaWVudCBzaGFsbCBoYXZlIG5vIGZ1cnRoZXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gcmVsYXRpb24gdG8gc3VjaCBhY3Rpb25zLgorCis2LiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IHJlcHJvZHVjZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcyBpcyB3aXRob3V0IG1vZGlmaWNhdGlvbiBhbmQgdHJhbnNmZXIgc3VjaCBjb3BpZXMsIHB1YmxpY2x5IHRyYW5zbWl0IG9yIG90aGVyd2lzZSByZWRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFByb2dyYW0gdG8gYSB0aGlyZCBwYXJ0eSBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyAoIlJlZGlzdHJpYnV0ZSIpLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIEFydGljbGUgMyBQYXJhZ3JhcGggMi4KKworNy4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBjcmVhdGUsIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBSZWRpc3RyaWJ1dGUgYSBEZXJpdmVkIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIHN0YXRlZCBhYm92ZSBmb3IgdGhlIExpY2Vuc2VkIFByb2dyYW06IHByb3ZpZGVkLCB0aGF0IHRoZSBSZWNpcGllbnQgc2hhbGwgZm9sbG93IHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMgUGFyYWdyYXBoIDEgd2hlbiBSZWRpc3RyaWJ1dGluZyB0aGUgRGVyaXZlZCBQcm9ncmFtLiAKKworCitBcnRpY2xlIDMgKFJlc3RyaWN0aW9uKQorCitUaGUgbGljZW5zZSBncmFudGVkIGluIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisKKzEuICAgICAgICAgSWYgYSBEZXJpdmVkIFByb2dyYW0gaXMgUmVkaXN0cmlidXRlZCBwdXJzdWFudCB0byBQYXJhZ3JhcGggNCBhbmQgNyBvZiB0aGUgcHJlY2VkaW5nIEFydGljbGUsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCA6CisKKygxKSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG11c3QgYmUgYWxzbyBSZWRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggdGhlIERlcml2ZWQgUHJvZ3JhbSwgb3IgYmUgbWFkZSBhdmFpbGFibGUgb25saW5lIG9yIGJ5IG1lYW5zIG9mIG1haWxpbmcgbWVjaGFuaXNtcyBpbiBleGNoYW5nZSBmb3IgYSBjb3N0IHdoaWNoIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwgY29zdHMgb2YgcG9zdGFnZSwgc3RvcmFnZSBtZWRpdW0gYW5kIGhhbmRsaW5nIGZlZXM6CisKKyhhKSAgICBhIGNvcHkgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbTsgYW5kCisKKyhiKSAgICBhbnkgYWRkaXRpb25hbCBmaWxlIGNyZWF0ZWQgYnkgdGhlIGZvbnQgZGV2ZWxvcGluZyBwcm9ncmFtIGluIHRoZSBjb3Vyc2Ugb2YgY3JlYXRpbmcgdGhlIERlcml2ZWQgUHJvZ3JhbSB0aGF0IGNhbiBiZSB1c2VkIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtLCBpZiBhbnkuCisKKygyKSAgICAgICAgICAgICAgICBJdCBpcyByZXF1aXJlZCB0byBhbHNvIFJlZGlzdHJpYnV0ZSBtZWFucyB0byBlbmFibGUgcmVjaXBpZW50cyBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtIHRvIHJlcGxhY2UgdGhlIERlcml2ZWQgUHJvZ3JhbSB3aXRoIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZpcnN0IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSAodGhlICJPcmlnaW5hbCBQcm9ncmFtIikuICBTdWNoIG1lYW5zIG1heSBiZSB0byBwcm92aWRlIGEgZGlmZmVyZW5jZSBmaWxlIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0sIG9yIGluc3RydWN0aW9ucyBzZXR0aW5nIG91dCBhIG1ldGhvZCB0byByZXBsYWNlIHRoZSBEZXJpdmVkIFByb2dyYW0gd2l0aCB0aGUgT3JpZ2luYWwgUHJvZ3JhbS4KKworKDMpICAgICAgICAgICAgICAgIFRoZSBSZWNpcGllbnQgbXVzdCBsaWNlbnNlIHRoZSBEZXJpdmVkIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LgorCisoNCkgICAgICAgICAgICAgICAgTm8gb25lIG1heSB1c2Ugb3IgaW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcyBhIHByb2dyYW0gbmFtZSwgZm9udCBuYW1lIG9yIGZpbGUgbmFtZSBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtLgorCisoNSkgICAgICAgICAgICAgICAgQW55IG1hdGVyaWFsIHRvIGJlIG1hZGUgYXZhaWxhYmxlIG9ubGluZSBvciBieSBtZWFucyBvZiBtYWlsaW5nIGEgbWVkaXVtIHRvIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIHBhcmFncmFwaCBtYXkgYmUgcHJvdmlkZWQsIHZlcmJhdGltLCBieSBhbnkgcGFydHkgd2lzaGluZyB0byBkbyBzby4KKworMi4gICAgICAgICBJZiB0aGUgUmVjaXBpZW50IFJlZGlzdHJpYnV0ZXMgdGhlIExpY2Vuc2VkIFByb2dyYW0gcHVyc3VhbnQgdG8gUGFyYWdyYXBoIDYgb2YgdGhlIHByZWNlZGluZyBBcnRpY2xlLCB0aGUgUmVjaXBpZW50IHNoYWxsIG1lZXQgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworKDEpICAgICAgICAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IG5vdCBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0uCisKKygyKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBub3QgYWx0ZXIgb3Igb3RoZXJ3aXNlIG1vZGlmeSB0aGUgTGljZW5zZWQgUHJvZ3JhbS4KKworKDMpICAgICAgICAgICAgICAgIFRoZSBSZWNpcGllbnQgbXVzdCBhdHRhY2ggYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IHRvIHRoZSBMaWNlbnNlZCBQcm9ncmFtLgorCiszLiAgICAgICAgIFRISVMgTElDRU5TRUQgUFJPR1JBTSBJUyBQUk9WSURFRCBCWSBUSEUgTElDRU5TT1IgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRZIEFTIFRPIFRIRSBMSUNFTlNFRCBQUk9HUkFNIE9SIEFOWSBERVJJVkVEIFBST0dSQU0sIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBMSUNFTlNPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWFRFTkRFRCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFRCBHT09EUyBPUiBTRVJWSUNFOyBEQU1BR0VTIEFSSVNJTkcgRlJPTSBTWVNURU0gRkFJTFVSRTsgTE9TUyBPUiBDT1JSVVBUSU9OIE9GIEVYSVNUSU5HIERBVEEgT1IgUFJPR1JBTTsgTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgSU5TVEFMTEFUSU9OLCBVU0UsIFRIRSBSRVBST0RVQ1RJT04gT1IgT1RIRVIgRVhQTE9JVEFUSU9OIE9GIFRIRSBMSUNFTlNFRCBQUk9HUkFNIE9SIEFOWSBERVJJVkVEIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis0LiAgICAgICAgIFRoZSBMaWNlbnNvciBpcyB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHJlc3BvbmQgdG8gYW55IHRlY2huaWNhbCBxdWVzdGlvbnMgb3IgaW5xdWlyaWVzLCBvciBwcm92aWRlIGFueSBvdGhlciB1c2VyIHN1cHBvcnQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBpbnN0YWxsYXRpb24sIHVzZSBvciB0aGUgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgRGVyaXZlZCBQcm9ncmFtcyB0aGVyZW9mLgorCisKK0FydGljbGUgNCAoVGVybWluYXRpb24gb2YgQWdyZWVtZW50KQorCisxLiAgICAgICAgIFRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlZ2luIGZyb20gdGhlIHRpbWUgb2YgcmVjZWlwdCBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBieSB0aGUgUmVjaXBpZW50IGFuZCBzaGFsbCBjb250aW51ZSBhcyBsb25nIGFzIHRoZSBSZWNpcGllbnQgcmV0YWlucyBhbnkgc3VjaCBMaWNlbnNlZCBQcm9ncmFtIGluIGFueSB3YXkuCisKKzIuICAgICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBwcm92aXNpb24gc2V0IGZvcnRoIGluIHRoZSBwcmVjZWRpbmcgUGFyYWdyYXBoLCBpbiB0aGUgZXZlbnQgb2YgdGhlIGJyZWFjaCBvZiBhbnkgb2YgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50IGJ5IHRoZSBSZWNpcGllbnQsIHRoaXMgQWdyZWVtZW50IHNoYWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHdpdGhvdXQgYW55IG5vdGljZS4gSW4gdGhlIGNhc2Ugb2Ygc3VjaCB0ZXJtaW5hdGlvbiwgdGhlIFJlY2lwaWVudCBtYXkgbm90IHVzZSBvciBjb25kdWN0IFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIGEgRGVyaXZlZCBQcm9ncmFtOiBwcm92aWRlZCB0aGF0IHN1Y2ggdGVybWluYXRpb24gc2hhbGwgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9mIGFueSBvdGhlciBSZWNpcGllbnQgcmVjZWl2aW5nIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIHRoZSBEZXJpdmVkIFByb2dyYW0gZnJvbSBzdWNoIFJlY2lwaWVudCB3aG8gYnJlYWNoZWQgdGhpcyBBZ3JlZW1lbnQuCisKKworQXJ0aWNsZSA1IChHb3Zlcm5pbmcgTGF3KQorCisxLiAgICAgICAgIElQQSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSW4gc3VjaCBhbiBldmVudCwgdGhlIFJlY2lwaWVudCBtYXkgc2VsZWN0IGVpdGhlciB0aGlzIEFncmVlbWVudCBvciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaW4gdXNpbmcsIGNvbmR1Y3RpbmcgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mLCBvciBSZWRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbS4gT3RoZXIgbWF0dGVycyBub3Qgc3BlY2lmaWVkIGFib3ZlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIENvcHlyaWdodCBMYXcgb2YgSmFwYW4gYW5kIG90aGVyIHJlbGF0ZWQgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgSmFwYW4uCisKKzIuICAgICAgICAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIHVuZGVyIHRoZSBsYXdzIG9mIEphcGFuLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjEzNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBMLTEuMApAQCAtMCwwICsxLDIxMyBAQAorCitJQk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIElCTQorUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTgorT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKyJDb250cmlidXRpb24iIG1lYW5zOgorCitpbiB0aGUgY2FzZSBvZiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uICgiSUJNIiksIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBhbmQKK2luIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IsCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZAorYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KK2BvcmlnaW5hdGVzYCBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5CitzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcworYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDoKKyhpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoCit0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKyJDb250cmlidXRvciIgbWVhbnMgSUJNIGFuZCBhbnkgb3RoZXIgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzICIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYQorQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzCitDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiT3JpZ2luYWwgUHJvZ3JhbSIgbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlCithY2NvbXBhbnlpbmcgdGhpcyBBZ3JlZW1lbnQgYXMgcmVsZWFzZWQgYnkgSUJNLCBpbmNsdWRpbmcgc291cmNlCitjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcworQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksCitwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kCitvYmplY3QgY29kZSBmb3JtLgorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50CitsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLAoraW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLAoraWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZQorc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtCitpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKK2FkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieQordGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55CitvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIKK3NlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlCitsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZQorcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlCitwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LgorRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcworYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlCityaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcworc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKK25lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcworcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzCitSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzCitzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUKK2NvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzMuIFJFUVVJUkVNRU5UUworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwKK3Byb3ZpZGVkIHRoYXQ6CisKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKK2l0cyBsaWNlbnNlIGFncmVlbWVudDoKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcworYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5Citmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kCitjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlCitvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaAorQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZQorbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlCitQcm9ncmFtLgorRWFjaCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiBhIGNvbnNwaWN1b3VzIGxvY2F0aW9uIGluIHRoZSBQcm9ncmFtOgorCitDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitJbiBhZGRpdGlvbiwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvcgorb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbgorcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlCitsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbAordXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEKK2NvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QKK2NyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYQorQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsCitzdWNoIENvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kCithbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKQorYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nCitmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkCitwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUKK2FjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGgKK2l0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuCitUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuCitJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseQorbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpCithbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudAorbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueQorc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UKK2NsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yYHMKK3Jlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8KK3Rob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55CitvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTCitQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkKK09SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCitleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KK3RoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlCitsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZAordW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQKK05PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKK0dSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gR0VORVJBTAorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgordGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIKK2FjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aAorcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbQorb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5Cit0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsCit0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbiBhZGRpdGlvbiwgaWYKK1JlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nCithIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0KK2l0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yCitoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50YHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50YHMKK3JpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaAorbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworQWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQKK2ZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzCitBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YKK3RpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50YHMKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlCithbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4KK0hvd2V2ZXIsIFJlY2lwaWVudGBzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkKK2xpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlCithbmQgc3Vydml2ZS4KKworSUJNIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQKK2Zyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhCitkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKQorbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK3VuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlCitBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUKK290aGVyIHRoYW4gSUJNIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBFeGNlcHQgYXMKK2V4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzCitubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IKK3VuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yCitvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyCit0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQKK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObworcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2gKK3BhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2FmMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVNDCkBAIC0wLDAgKzEsMTAgQEAKKworSVNDIExpY2Vuc2U6CisKK0NvcHlyaWdodCAmIzE2OTsgMjAwNC0yMDEwIGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCitDb3B5cmlnaHQgJiMxNjk7IDE5OTUtMjAwMyBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzFkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMApAQCAtMCwwICsxLDM0MiBAQAorR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCisKKworVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworCisKK0NvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgR1BMLiAgSXQgaXMKKworIG51bWJlcmVkIDIgYmVjYXVzZSBpdCBnb2VzIHdpdGggdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHUEwuXQorCitQcmVhbWJsZQorCisKKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisKKworVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUgc3BlY2lhbGx5IGRlc2lnbmF0ZWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlLCBhbmQgdG8gYW55IG90aGVyIGxpYnJhcmllcyB3aG9zZSBhdXRob3JzIGRlY2lkZSB0byB1c2UgaXQuIFlvdSBjYW4gdXNlIGl0IGZvciB5b3VyIGxpYnJhcmllcywgdG9vLgorCisKKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisKKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisKKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZSB5b3UuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUgY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0gd2l0aCB0aGUgbGlicmFyeSwgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nIGl0LiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKworCitPdXIgbWV0aG9kIG9mIHByb3RlY3RpbmcgeW91ciByaWdodHMgaGFzIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworCisKK0Fsc28sIGZvciBlYWNoIGRpc3RyaWJ1dG9yJ3MgcHJvdGVjdGlvbiwgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgbGlicmFyeS4gSWYgdGhlIGxpYnJhcnkgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwgYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKworCitGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUgc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QgdHJhbnNmb3JtaW5nIHRoZSBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgc29mdHdhcmUuIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKworCitNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMuIFRoaXMgbGljZW5zZSBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzIHRoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLgorCisKKworVGhlIHJlYXNvbiB3ZSBoYXZlIGEgc2VwYXJhdGUgcHVibGljIGxpY2Vuc2UgZm9yIHNvbWUgbGlicmFyaWVzIGlzIHRoYXQgdGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEgcHJvZ3JhbSBhbmQgc2ltcGx5IHVzaW5nIGl0LiBMaW5raW5nIGEgcHJvZ3JhbSB3aXRoIGEgbGlicmFyeSwgd2l0aG91dCBjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcyBhbmFsb2dvdXMgdG8gcnVubmluZyBhIHV0aWxpdHkgcHJvZ3JhbSBvciBhcHBsaWNhdGlvbiBwcm9ncmFtLiBIb3dldmVyLCBpbiBhIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnksIGFuZCB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0cmVhdHMgaXQgYXMgc3VjaC4KKworCisKK0JlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbGlicmFyaWVzIGRpZCBub3QgZWZmZWN0aXZlbHkgcHJvbW90ZSBzb2Z0d2FyZSBzaGFyaW5nLCBiZWNhdXNlIG1vc3QgZGV2ZWxvcGVycyBkaWQgbm90IHVzZSB0aGUgbGlicmFyaWVzLiBXZSBjb25jbHVkZWQgdGhhdCB3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCBwcm9tb3RlIHNoYXJpbmcgYmV0dGVyLgorCisKKworSG93ZXZlciwgdW5yZXN0cmljdGVkIGxpbmtpbmcgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgd291bGQgZGVwcml2ZSB0aGUgdXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlIGxpYnJhcmllcyB0aGVtc2VsdmVzLiBUaGlzIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlIHByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZSBsaWJyYXJpZXMgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZW0uIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlIHRoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIHRoZSBhY3R1YWwgZnVuY3Rpb25zIG9mIHRoZSBMaWJyYXJ5LikgVGhlIGhvcGUgaXMgdGhhdCB0aGlzIHdpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuCisKKworCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LiBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSAid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5IHdvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIGxpYnJhcnkuCisKKworCitOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJhdGhlciB0aGFuIGJ5IHRoaXMgc3BlY2lhbCBvbmUuCisKKworCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworCisKKzAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworCisKK0EgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEgcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zICh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKKworCitUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gQSAid29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworCisKKyJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tIHN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvciB3cml0aW5nIGl0KS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMgYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisKKworCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MgY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS4KKworCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisKKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisKKworYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCitiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCitkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uLiBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKKworCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHdpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuIFRvIGRvIHRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KKworCisKK09uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IgdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworCisKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZiB0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKworCis0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisKKworSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvIGRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworCisKKzUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlIExpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kIHRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKworCitIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IGNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworCisKK1doZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4gV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUgbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuIFRoZSB0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisKKworSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lIGZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QgZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZSB3b3JrLiAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKworCitPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4gQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKworCisKKzYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21waWxlIG9yIGxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhIHdvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisKKworWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgd29yayBkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuIEFsc28sIHlvdSBtdXN0IGRvIG9uZSBvZiB0aGVzZSB0aGluZ3M6CisKKworCithKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gKEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCitiKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKK2MpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKK2QpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZSBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworCisKK0l0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlIHJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90IHVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UgZGlzdHJpYnV0ZS4KKworCisKKzcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKworCithKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMuIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNlY3Rpb25zIGFib3ZlLgorCitiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdCB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKzguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworCis5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKworCisxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5IHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS4KKworCisKKzExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCisKKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKKworCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCisKKworCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKworCisxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKworCisxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKworCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworCisKKzE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKworCitOTyBXQVJSQU5UWQorCisKKworMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElCUkFSWSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKworCisxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIExJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKworCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0IGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nIHJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworCisKK1RvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KKworQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorCisKKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKwordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisKKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisKK0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisKKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCisKK0Jvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKworCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworCisKK1lveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4KKwordGhlIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuCisKK2J5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKworCitzaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTkwCisKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlNzM1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4xCkBAIC0wLDAgKzEsMTc2IEBACisKK0dOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorUHJlYW1ibGUKKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCitUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lIHNwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiBZb3UgY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlciB0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlciBzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlIHlvdS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUgY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nIGl0LiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK1dlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUgbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKK1RvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbCBhdXRob3JgcyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBieSBvdGhlcnMuCisKK0ZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mIGFueSBmcmVlIHByb2dyYW0uIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdCBlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEgcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdCBhbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgorCitNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZCBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gV2UgdXNlIHRoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UgbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuCisKK1doZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nIGEgc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYSBjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuIFRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZSBlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gVGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LgorCitXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0IGRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyYHMgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzIG9mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gVGhlc2UgZGlzYWR2YW50YWdlcyBhcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkgbGlicmFyaWVzLiBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KKworRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8gZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMgYSBkZS1mYWN0byBzdGFuZGFyZC4gVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0IGJlIGFsbG93ZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZSBsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUgc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZiBmcmVlIHNvZnR3YXJlLiBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4gbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VIG9wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nIHN5c3RlbS4KKworQWx0aG91Z2ggdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIExlc3MgcHJvdGVjdGl2ZSBvZiB0aGUgdXNlcnNgIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMgbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuIHRoYXQgcHJvZ3JhbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhICJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiBUaGUgZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdCBiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlciBwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0EgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEgcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zICh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKK1RoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrIHdoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiBBICJ3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIHN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tIHN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvciB3cml0aW5nIGl0KS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMgYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnlgcyBjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBMaWJyYXJ5LgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCitiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2MpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK2QpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYSB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvciB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uLiBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHdpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gVG8gZG8gdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbyB0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbiB0aGVzZSBub3RpY2VzLgorCitPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZiB0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKzQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0byBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlIExpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kIHRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKK0hvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0IGNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFNlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCitXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuIFdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlIGxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiBUaGUgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lIGZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QgZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZSB3b3JrLiAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKK090aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LiBBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwgd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorCis2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvciBsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYSB3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0IG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyYHMgb3duIHVzZSBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgd29yayBkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuIEFsc28sIHlvdSBtdXN0IGRvIG9uZSBvZiB0aGVzZSB0aGluZ3M6CisKK2EpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlciBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAoSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCitiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUgTGlicmFyeS4gQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYSBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcmBzIGNvbXB1dGVyIHN5c3RlbSwgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KK2UpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZSBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KK0ZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZSByZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdCB1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91IGRpc3RyaWJ1dGUuCisKKzcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKK2EpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcy4gVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2VjdGlvbnMgYWJvdmUuCitiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdCB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCis4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKzExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgTGlicmFyeSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYSBsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUJSQVJZIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKK1RvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworb25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeWBzIG5hbWUgYW5kIGFuIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLgorQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKK1lveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4KK3RoZSBsaWJyYXJ5IGBGcm9iYCAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbgorYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk5MAorVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKK1RoYXRgcyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlMjliZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMy4wCkBAIC0wLDAgKzEsNjUgQEAKK0dOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNworCitDb3B5cmlnaHQgwqkgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitUaGlzIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHN1cHBsZW1lbnRlZCBieSB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBsaXN0ZWQgYmVsb3cuCiswLiBBZGRpdGlvbmFsIERlZmluaXRpb25zLgorCitBcyB1c2VkIGhlcmVpbiwg4oCcdGhpcyBMaWNlbnNl4oCdIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSDigJxHTlUgR1BM4oCdIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCivigJxUaGUgTGlicmFyeeKAnSByZWZlcnMgdG8gYSBjb3ZlcmVkIHdvcmsgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLCBvdGhlciB0aGFuIGFuIEFwcGxpY2F0aW9uIG9yIGEgQ29tYmluZWQgV29yayBhcyBkZWZpbmVkIGJlbG93LgorCitBbiDigJxBcHBsaWNhdGlvbuKAnSBpcyBhbnkgd29yayB0aGF0IG1ha2VzIHVzZSBvZiBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnksIGJ1dCB3aGljaCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LiBEZWZpbmluZyBhIHN1YmNsYXNzIG9mIGEgY2xhc3MgZGVmaW5lZCBieSB0aGUgTGlicmFyeSBpcyBkZWVtZWQgYSBtb2RlIG9mIHVzaW5nIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgTGlicmFyeS4KKworQSDigJxDb21iaW5lZCBXb3Jr4oCdIGlzIGEgd29yayBwcm9kdWNlZCBieSBjb21iaW5pbmcgb3IgbGlua2luZyBhbiBBcHBsaWNhdGlvbiB3aXRoIHRoZSBMaWJyYXJ5LiBUaGUgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5IHdpdGggd2hpY2ggdGhlIENvbWJpbmVkIFdvcmsgd2FzIG1hZGUgaXMgYWxzbyBjYWxsZWQgdGhlIOKAnExpbmtlZCBWZXJzaW9u4oCdLgorCitUaGUg4oCcTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZeKAnSBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgdGhlIENvbWJpbmVkIFdvcmssIGV4Y2x1ZGluZyBhbnkgc291cmNlIGNvZGUgZm9yIHBvcnRpb25zIG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQsIGNvbnNpZGVyZWQgaW4gaXNvbGF0aW9uLCBhcmUgYmFzZWQgb24gdGhlIEFwcGxpY2F0aW9uLCBhbmQgbm90IG9uIHRoZSBMaW5rZWQgVmVyc2lvbi4KKworVGhlIOKAnENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZeKAnSBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZSBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUgZm9yIHRoZSBBcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIENvbWJpbmVkIFdvcmsgZnJvbSB0aGUgQXBwbGljYXRpb24sIGJ1dCBleGNsdWRpbmcgdGhlIFN5c3RlbSBMaWJyYXJpZXMgb2YgdGhlIENvbWJpbmVkIFdvcmsuCisxLiBFeGNlcHRpb24gdG8gU2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLgorCitZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayB1bmRlciBzZWN0aW9ucyAzIGFuZCA0IG9mIHRoaXMgTGljZW5zZSB3aXRob3V0IGJlaW5nIGJvdW5kIGJ5IHNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KKzIuIENvbnZleWluZyBNb2RpZmllZCBWZXJzaW9ucy4KKworSWYgeW91IG1vZGlmeSBhIGNvcHkgb2YgdGhlIExpYnJhcnksIGFuZCwgaW4geW91ciBtb2RpZmljYXRpb25zLCBhIGZhY2lsaXR5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gQXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSAob3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkgaXMgaW52b2tlZCksIHRoZW4geW91IG1heSBjb252ZXkgYSBjb3B5IG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uOgorCisgICAgKiBhKSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgeW91IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIEFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSB0aGUgZnVuY3Rpb24gb3IgZGF0YSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwsIG9yCisgICAgKiBiKSB1bmRlciB0aGUgR05VIEdQTCwgd2l0aCBub25lIG9mIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9mIHRoaXMgTGljZW5zZSBhcHBsaWNhYmxlIHRvIHRoYXQgY29weS4KKworMy4gT2JqZWN0IENvZGUgSW5jb3Jwb3JhdGluZyBNYXRlcmlhbCBmcm9tIExpYnJhcnkgSGVhZGVyIEZpbGVzLgorCitUaGUgb2JqZWN0IGNvZGUgZm9ybSBvZiBhbiBBcHBsaWNhdGlvbiBtYXkgaW5jb3Jwb3JhdGUgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeS4gWW91IG1heSBjb252ZXkgc3VjaCBvYmplY3QgY29kZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCwgaWYgdGhlIGluY29ycG9yYXRlZCBtYXRlcmlhbCBpcyBub3QgbGltaXRlZCB0byBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBvciBzbWFsbCBtYWNyb3MsIGlubGluZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRlcyAodGVuIG9yIGZld2VyIGxpbmVzIGluIGxlbmd0aCksIHlvdSBkbyBib3RoIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAqIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgb2JqZWN0IGNvZGUgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKyAgICAqIGIpIEFjY29tcGFueSB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKworNC4gQ29tYmluZWQgV29ya3MuCisKK1lvdSBtYXkgY29udmV5IGEgQ29tYmluZWQgV29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSB0aGF0LCB0YWtlbiB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVkIGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLCBpZiB5b3UgYWxzbyBkbyBlYWNoIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAqIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgQ29tYmluZWQgV29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorICAgICogYikgQWNjb21wYW55IHRoZSBDb21iaW5lZCBXb3JrIHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisgICAgKiBjKSBGb3IgYSBDb21iaW5lZCBXb3JrIHRoYXQgZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMgZHVyaW5nIGV4ZWN1dGlvbiwgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlc2Ugbm90aWNlcywgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcGllcyBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorICAgICogZCkgRG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgbyAwKSBDb252ZXkgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHRoZSBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUgaW4gYSBmb3JtIHN1aXRhYmxlIGZvciwgYW5kIHVuZGVyIHRlcm1zIHRoYXQgcGVybWl0LCB0aGUgdXNlciB0byByZWNvbWJpbmUgb3IgcmVsaW5rIHRoZSBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24gdG8gcHJvZHVjZSBhIG1vZGlmaWVkIENvbWJpbmVkIFdvcmssIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29udmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLgorICAgICAgICAgIG8gMSkgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0IChhKSB1c2VzIGF0IHJ1biB0aW1lIGEgY29weSBvZiB0aGUgTGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sIGFuZCAoYikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5IHRoYXQgaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgTGlua2VkIFZlcnNpb24uCisgICAgKiBlKSBQcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiwgYnV0IG9ubHkgaWYgeW91IHdvdWxkIG90aGVyd2lzZSBiZSByZXF1aXJlZCB0byBwcm92aWRlIHN1Y2ggaW5mb3JtYXRpb24gdW5kZXIgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZvcm1hdGlvbiBpcyBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIENvbWJpbmVkIFdvcmsgcHJvZHVjZWQgYnkgcmVjb21iaW5pbmcgb3IgcmVsaW5raW5nIHRoZSBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZiB5b3UgdXNlIG9wdGlvbiA0ZDAsIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gbXVzdCBhY2NvbXBhbnkgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2UgYW5kIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMIGZvciBjb252ZXlpbmcgQ29ycmVzcG9uZGluZyBTb3VyY2UuKQorCis1LiBDb21iaW5lZCBMaWJyYXJpZXMuCisKK1lvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBzaWRlIGJ5IHNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBub3QgQXBwbGljYXRpb25zIGFuZCBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgY29udmV5IHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBpZiB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMsIGNvbnZleWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgKiBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKzYuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSDigJxvciBhbnkgbGF0ZXIgdmVyc2lvbuKAnSBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgcHVibGlzaGVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoZXRoZXIgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2hhbGwgYXBwbHksIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZlcnNpb24gaXMgcGVybWFuZW50IGF1dGhvcml6YXRpb24gZm9yIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgTGlicmFyeS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQTC0xLjAyIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBMLTEuMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzMzc0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQTC0xLjAyCkBAIC0wLDAgKzEsNzYgQEAKKworTHVjZW50IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wMiAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIFBVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCitpbiB0aGUgY2FzZSBvZiBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gKCJMVUNFTlQiKSwgdGhlIE9yaWdpbmFsIFByb2dyYW0sIGFuZAoraW4gdGhlIGNhc2Ugb2YgZWFjaCBDb250cmlidXRvciwKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2VyZSBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcyBiZWhhbGYsIGFuZCB0aGUgQ29udHJpYnV0b3IgZXhwbGljaXRseSBjb25zZW50cywgaW4gYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gM0MsIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBhcyBDb250cmlidXRpb25zLgorIkNvbnRyaWJ1dG9yIiBtZWFucyBMVUNFTlQgYW5kIGFueSBvdGhlciBlbnRpdHkgdGhhdCBoYXMgQ29udHJpYnV0ZWQgYSBDb250cmlidXRpb24gdG8gdGhlIFByb2dyYW0uCisKKyJEaXN0cmlidXRvciIgbWVhbnMgYSBSZWNpcGllbnQgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSwgbW9kaWZpY2F0aW9ucyB0byB0aGUgUHJvZ3JhbSwgb3IgYW55IHBhcnQgdGhlcmVvZi4KKworIkxpY2Vuc2VkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyJPcmlnaW5hbCBQcm9ncmFtIiBtZWFucyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgYWNjb21wYW55aW5nIHRoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IExVQ0VOVCwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMgb3IgYW55IHBhcnQgdGhlcmVvZgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGUgcGF0ZW50IGxpY2Vuc2UgZ3JhbnRlZCBieSBhIENvbnRyaWJ1dG9yIHNoYWxsIGFsc28gYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gb2YgdGhhdCBDb250cmlidXRvciBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgYnkgYSBDb250cmlidXRvciBzaGFsbCBub3QgYXBwbHkgdG8gKGkpIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLCBub3IgdG8gKGlpKSBDb250cmlidXRpb25zIG9mIG90aGVyIENvbnRyaWJ1dG9ycy4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudGBzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorMy4gUkVRVUlSRU1FTlRTCisKK0EuIERpc3RyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybSB1bmRlciB0aGlzIEFncmVlbWVudCBvciB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsKK2lmIHRoZSBQcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIG9yIG90aGVyIHRhbmdpYmxlIGZvcm0sIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBvciBEaXN0cmlidXRvcmBzIG93biBsaWNlbnNlIGFncmVlbWVudCBpcyBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbTsgYW5kCitpZiBkaXN0cmlidXRlZCB1bmRlciBEaXN0cmlidXRvcmBzIG93biBsaWNlbnNlIGFncmVlbWVudCwgc3VjaCBsaWNlbnNlIGFncmVlbWVudDoKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsgYW5kCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LgorQi4gRWFjaCBEaXN0cmlidXRvciBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiBhIGNvbnNwaWN1b3VzIGxvY2F0aW9uIGluIHRoZSBQcm9ncmFtOgorCitDb3B5cmlnaHQgKEMpIDIwMDMsIEx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQy4gSW4gYWRkaXRpb24sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiBBbHNvLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgYWdyZWUgdGhhdCB0aGUgYWRkaXRpb25zIGFuZC9vciBjaGFuZ2VzIGFyZSBpbnRlbmRlZCB0byBiZSBhIENvbnRyaWJ1dGlvbi4gT25jZSBhIENvbnRyaWJ1dGlvbiBpcyBjb250cmlidXRlZCwgaXQgbWF5IG5vdCB0aGVyZWFmdGVyIGJlIHJldm9rZWQuCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgRGlzdHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3IgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgRGlzdHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggRGlzdHJpYnV0b3IgKCJDb21tZXJjaWFsIERpc3RyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIERpc3RyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBEaXN0cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBEaXN0cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3JgcyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBFWFBPUlQgQ09OVFJPTAorCitSZWNpcGllbnQgYWdyZWVzIHRoYXQgUmVjaXBpZW50IGFsb25lIGlzIHJlc3BvbnNpYmxlIGZvciBjb21wbGlhbmNlIHdpdGggdGhlIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIHJlZ3VsYXRpb24gb2YgYW55IG90aGVyIGNvdW50cmllcykuCisKKzguIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYSBDb250cmlidXRvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIGlmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50YHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50YHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgorCitMVUNFTlQgbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIE5vIG9uZSBvdGhlciB0aGFuIExVQ0VOVCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZWYzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMApAQCAtMCwwICsxLDIxMyBAQAorCitMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCitMUFBMIFZlcnNpb24gMS4wICAxOTk5LTAzLTAxCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIGlzIG5vdCBhbGxvd2VkLgorCisKK1ByZWFtYmxlCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlCitiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBpcyBkaXN0cmlidXRlZC4gQXMgZGVzY3JpYmVkIGJlbG93IHlvdSBtYXkgdXNlCit0aGlzIGxpY2VuY2UgZm9yIGFueSBzb2Z0d2FyZSB0aGF0IHlvdSB3aXNoIHRvIGRpc3RyaWJ1dGUuIAorCitJdCBtYXkgYmUgcGFydGljdWxhcmx5IHN1aXRhYmxlIGlmIHlvdXIgc29mdHdhcmUgaXMgVGVYIHJlbGF0ZWQgKHN1Y2gKK2FzIGEgTGFUZVggcGFja2FnZSBmaWxlKSBidXQgaXQgbWF5IGJlIHVzZWQgZm9yIGFueSBzb2Z0d2FyZSwgZXZlbiBpZgoraXQgaXMgdW5yZWxhdGVkIHRvIFRlWC4KKworVG8gdXNlIHRoaXMgbGljZW5zZSwgdGhlIGZpbGVzIG9mIHlvdXIgZGlzdHJpYnV0aW9uIHNob3VsZCBoYXZlIGFuCitleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGdpdmluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyLCB0b2dldGhlcgord2l0aCBhIHJlZmVyZW5jZSB0byB0aGlzIGxpY2Vuc2UuCisKK0EgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlCisKKyAgICUlIHBpZy5zdHkKKyAgICUlIENvcHlyaWdodCAyMDAxIE0uIFkuIE5hbWUKKworICAgJSBUaGlzIHByb2dyYW0gY2FuIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcworICAgJSBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSBEaXN0cmlidXRlZCBmcm9tIENUQU4KKyAgICUgYXJjaGl2ZXMgaW4gZGlyZWN0b3J5IG1hY3Jvcy9sYXRleC9iYXNlL2xwcGwudHh0OyBlaXRoZXIKKyAgICUgdmVyc2lvbiAxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitHaXZlbiBzdWNoIGEgbm90aWNlIGluIHRoZSBmaWxlLCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGRvY3VtZW50IHdvdWxkCithcHBseSwgd2l0aDoKKworYFRoZSBQcm9ncmFtYCByZWZlcnJpbmcgdG8gdGhlIHNvZnR3YXJlIGBwaWcuc3R5YCAgYW5kIAorYFRoZSBDb3B5cmlnaHQgSG9sZGVyYCByZWZlcnJpbmcgdG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZWAuCisKK1RvIHNlZSBhIHJlYWwgZXhhbXBsZSwgc2VlIHRoZSBmaWxlIGxlZ2FsLnR4dCB3aGljaCBjYXJyaWVzIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIGJhc2UgbGF0ZXggZGlzdHJpYnV0aW9uLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgdGVybXMgdW5kZXIgd2hpY2ggZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZCBhbmQgbW9kaWZpZWQuIEluZGl2aWR1YWwgZmlsZXMgbWF5IGhhdmUgc3BlY2lmaWMgZnVydGhlcgorY29uc3RyYWludHMgb24gbW9kaWZpY2F0aW9uLCBidXQgbm8gZmlsZSBzaG91bGQgaGF2ZSByZXN0cmljdGlvbnMgb24KK2Rpc3RyaWJ1dGlvbiBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZCBiZWxvdy4gCitUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IGEgZGlzdHJpYnV0b3Igd2lzaGluZyB0byBkaXN0cmlidXRlIGEgY29tcGxldGUKK3VubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSBuZWVkIG9ubHkgY2hlY2sgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcworZmlsZSwgYW5kIGRvZXMgbm90IG5lZWQgdG8gY2hlY2sgZXZlcnkgZmlsZSBpbiBUaGUgUHJvZ3JhbSBmb3IgZXh0cmEKK3Jlc3RyaWN0aW9ucy4gSWYgeW91IGRvIG5lZWQgdG8gbW9kaWZ5IHRoZSBkaXN0cmlidXRpb24gdGVybXMgb2Ygc29tZQorZmlsZXMsIGRvIG5vdCByZWZlciB0byB0aGlzIGxpY2Vuc2UsIGluc3RlYWQgZGlzdHJpYnV0ZSBUaGUgUHJvZ3JhbQordW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gWW91IG1heSB1c2UgdGhlIHBhcnRzIG9mIHRoZSB0ZXh0IG9mIExQUEwgYXMKK2EgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2Ugc2hvdWxkIG5vdCBkaXJlY3RseSByZWZlcgordG8gdGhlIExQUEwgb3Igb3RoZXJ3aXNlIGdpdmUgdGhlIGltcHJlc3Npb24gdGhhdCBUaGUgUHJvZ3JhbSBpcworZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuIAorCisKKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUZXJtcyBBbmQgQ29uZGl0aW9ucyBGb3IgQ29weWluZywgRGlzdHJpYnV0aW9uIEFuZCBNb2RpZmljYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK1dBUlJBTlRZCis9PT09PT09PQorCitUaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgVGhlIFByb2dyYW0sIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5CithcHBsaWNhYmxlIGxhdy4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZywgVGhlCitDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIFRoZSBQcm9ncmFtIGBhcyBpc2Agd2l0aG91dCB3YXJyYW50eSBvZiBhbnkKK2tpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZQoraW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyCitwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUKK3Byb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lCit0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZword2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IgYW55IG9mIHRoZSBpbmRpdmlkdWFsIGF1dGhvcnMgbmFtZWQgaW4KK3RoZSBzb3VyY2UgZm9yIFRoZSBQcm9ncmFtLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcKK2FueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dAorb2YgYW55IHVzZSBvZiBUaGUgUHJvZ3JhbSBvciBvdXQgb2YgaW5hYmlsaXR5IHRvIHVzZSBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQKK2luYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgYnkgdGhpcmQgcGFydGllcyBhcyBhIHJlc3VsdAorb2YgYSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuCitpZiBzdWNoIGhvbGRlciBvciBvdGhlciBwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZgorc3VjaCBkYW1hZ2VzLgorCisKK0RJU1RSSUJVVElPTgorPT09PT09PT09PT09CisKK1JlZGlzdHJpYnV0aW9uIG9mIHVuY2hhbmdlZCBmaWxlcyBpcyBhbGxvd2VkIHByb3ZpZGVkIHRoYXQgYWxsIGZpbGVzCit0aGF0IG1ha2UgdXAgdGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUgUHJvZ3JhbSBhcmUgZGlzdHJpYnV0ZWQuCitJbiBwYXJ0aWN1bGFyIHRoaXMgbWVhbnMgdGhhdCBUaGUgUHJvZ3JhbSBoYXMgdG8gYmUgZGlzdHJpYnV0ZWQKK2luY2x1ZGluZyBpdHMgZG9jdW1lbnRhdGlvbiBpZiBkb2N1bWVudGF0aW9uIHdhcyBwYXJ0IG9mIHRoZSBvcmlnaW5hbAorZGlzdHJpYnV0aW9uLgorCitUaGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtIHdpbGwgY29udGFpbiBhIHByb21pbmVudCBmaWxlCitsaXN0aW5nIGFsbCB0aGUgZmlsZXMgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2UuCisKK0lmIHlvdSByZWNlaXZlIG9ubHkgc29tZSBvZiB0aGVzZSBmaWxlcyBmcm9tIHNvbWVvbmUsIGNvbXBsYWluIQorCitUaGUgZGlzdHJpYnV0aW9uIG9mIGNoYW5nZWQgdmVyc2lvbnMgb2YgY2VydGFpbiBmaWxlcyBpbmNsdWRlZCBpbiB0aGUKK1RoZSBQcm9ncmFtLCBhbmQgdGhlIHJldXNlIG9mIGNvZGUgZnJvbSBUaGUgUHJvZ3JhbSwgYXJlIGFsbG93ZWQKK3VuZGVyIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgKiBJdCBpcyBhbGxvd2VkIG9ubHkgaWYgdGhlIGxlZ2FsIG5vdGljZSBpbiB0aGUgZmlsZSBkb2VzIG5vdAorICAgZXhwcmVzc2x5IGZvcmJpZCBpdC4KKyAgIFNlZSBub3RlIGJlbG93LCB1bmRlciAiQ29uZGl0aW9ucyBvbiBpbmRpdmlkdWFsIGZpbGVzIi4KKyAKKyAqIFlvdSByZW5hbWUgdGhlIGZpbGUgYmVmb3JlIHlvdSBtYWtlIGFueSBjaGFuZ2VzIHRvIGl0LCB1bmxlc3MgdGhlCisgICBmaWxlIGV4cGxpY2l0bHkgc2F5cyB0aGF0IHJlbmFtaW5nIGlzIG5vdCByZXF1aXJlZC4gIEFueSBzdWNoIGNoYW5nZWQKKyAgIGZpbGVzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcyBkaXN0cmlidXRpb24KKyAgIG9mIHRob3NlIGZpbGVzLCBhbmQgYW55IGZpbGVzIGRlcml2ZWQgZnJvbSB0aGVtLCB1bmRlciB0aGUgbmFtZXMgdXNlZAorICAgYnkgdGhlIG9yaWdpbmFsIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0uCisKKyAqIFlvdSBjaGFuZ2UgYW55IGBpZGVudGlmaWNhdGlvbiBzdHJpbmdgIGluIFRoZSBQcm9ncmFtIHRvIGNsZWFybHkgCisgICBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBzeXN0ZW0uCisKKyAqIElmIFRoZSBQcm9ncmFtIGluY2x1ZGVzIGFuIGBlcnJvciByZXBvcnQgYWRkcmVzc2Agc28gdGhhdCBlcnJvcnMKKyAgIG1heSBiZSByZXBvcnRlZCB0byBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3Igb3RoZXIgc3BlY2lmaWVkCisgICBhZGRyZXNzZXMsIHRoaXMgYWRkcmVzcyBtdXN0IGJlIGNoYW5nZWQgaW4gYW55IG1vZGlmaWVkIHZlcnNpb25zIG9mCisgICBUaGUgUHJvZ3JhbSwgc28gdGhhdCByZXBvcnRzIGZvciBmaWxlcyBub3QgbWFpbnRhaW5lZCBieSB0aGUKKyAgIG9yaWdpbmFsIHByb2dyYW0gbWFpbnRhaW5lcnMgYXJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUKKyAgIGNoYW5nZWQgZmlsZXMuIAorCisgKiBZb3UgYWNrbm93bGVkZ2UgdGhlIHNvdXJjZSBhbmQgYXV0aG9yc2hpcCBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgaW4gdGhlIG1vZGlmaWVkIGZpbGUuCisKKyAqIFlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIHVubW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBvcgorICAgYWx0ZXJuYXRpdmVseSBwcm92aWRlIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gc28gdGhhdCB0aGUKKyAgIHVzZXIgb2YgeW91ciBtb2RpZmllZCBmaWxlIGNhbiBiZSByZWFzb25hYmx5IGV4cGVjdGVkIHRvIGJlCisgICBhYmxlIHRvIG9idGFpbiBhbiBvcmlnaW5hbCwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorICAgRm9yIGV4YW1wbGUsIHlvdSBtYXkgc3BlY2lmeSBhIFVSTCB0byBhIHNpdGUgdGhhdCB5b3UgZXhwZWN0CisgICB3aWxsIGZyZWVseSBwcm92aWRlIHRoZSB1c2VyIHdpdGggYSBjb3B5IG9mIFRoZSBQcm9ncmFtIChlaXRoZXIKKyAgIHRoZSB2ZXJzaW9uIG9uIHdoaWNoIHlvdXIgbW9kaWZpY2F0aW9uIGlzIGJhc2VkLCBvciBwZXJoYXBzIGEKKyAgIGxhdGVyIHZlcnNpb24pLgorCisgKiBJZiBUaGUgUHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGgsIG9yIGlzIGJhc2VkIG9uLCBMYVRlWCwKKyAgIHRoZW4gZmlsZXMgd2l0aCB0aGUgZm9sbG93aW5nIGZpbGUgZXh0ZW5zaW9ucyB3aGljaCBoYXZlIHNwZWNpYWwKKyAgIG1lYW5pbmcgaW4gTGFUZVggU29mdHdhcmUsIGhhdmUgc3BlY2lhbCBtb2RpZmljYXRpb24gcnVsZXMgdW5kZXIgdGhlCisgICBsaWNlbnNlOgorIAorICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5pbnNgIChpbnN0YWxsYXRpb24gZmlsZXMpOiB0aGVzZSBmaWxlcyBtYXkKKyAgICAgIG5vdCBiZSBtb2RpZmllZCBhdCBhbGwgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGxlZ2FsIG5vdGljZXMKKyAgICAgIHRoYXQgYXJlIHBsYWNlZCBpbiB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorIAorICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5mZGAgKExhVGVYIGZvbnQgZGVmaW5pdGlvbnMgZmlsZXMpOiB0aGVzZQorICAgICAgZmlsZXMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgbmFtZSwgYnV0CisgICAgICBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgYWxsIGF2YWlsYWJsZSBmb250cyBhbmQgdG8gcHJldmVudCBhdHRlbXB0cworICAgICAgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzLiBIb3dldmVyLCBtb2RpZmllZCBmaWxlcyBhcmUgbm90CisgICAgICBhbGxvd2VkIHRvIGJlIGRpc3RyaWJ1dGVkIGluIHBsYWNlIG9mIG9yaWdpbmFsIGZpbGVzLgorIAorICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5jZmdgIChjb25maWd1cmF0aW9uIGZpbGVzKTogdGhlc2UgZmlsZXMKKyAgICAgIGNhbiBiZSBjcmVhdGVkIG9yIG1vZGlmaWVkIHRvIGVuYWJsZSBlYXN5IGNvbmZpZ3VyYXRpb24gb2YgdGhlCisgICAgICBzeXN0ZW0uICBUaGUgZG9jdW1lbnRhdGlvbiBpbiBjZmdndWlkZS50ZXggaW4gdGhlIGJhc2UgTGFUZVgKKyAgICAgIGRpc3RyaWJ1dGlvbiBkZXNjcmliZXMgd2hlbiBpdCBtYWtlcyBzZW5zZSB0byBtb2RpZnkgb3IgZ2VuZXJhdGUKKyAgICAgIHN1Y2ggZmlsZXMuCisgCisKK1RoZSBhYm92ZSByZXN0cmljdGlvbnMgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvCitub3QgYXBwbHkgdG8sIHRoZSB1cGRhdGluZywgYnkgYW55IG1ldGhvZCwgb2YgYSBmaWxlIHNvIHRoYXQgaXQKK2JlY29tZXMgaWRlbnRpY2FsIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGF0IGZpbGUgaW4gVGhlIFByb2dyYW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOT1RFUworPT09PT0KKworV2UgYmVsaWV2ZSB0aGF0IHRoZXNlIHJlcXVpcmVtZW50cyBnaXZlIHlvdSB0aGUgZnJlZWRvbSB5b3UgdG8gbWFrZQorbW9kaWZpY2F0aW9ucyB0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91Cit3aXNoLCB3aGlsc3QgbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5IGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbHN0CithZGhlcmluZyB0byB0aGVzZSByZXF1aXJlbWVudHMgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBjZmdndWlkZS50ZXgKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuIAorCitCZWNhdXNlIG9mIHRoZSBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGFzcGVjdHMgb2Ygc3lzdGVtcworbGlrZSBMYVRlWCwgVGhlIExhVGVYMyBQcm9qZWN0IGRlcHJlY2F0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBvZgorbm9uLXN0YW5kYXJkIHZlcnNpb25zIG9mIGNvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZQorY29udHJpYnV0ZWQgY29kZSBmb3IgdGhlbSBidXQgc3VjaCBkaXN0cmlidXRpb25zIGFyZSBwZXJtaXR0ZWQgdW5kZXIgdGhlCithYm92ZSByZXN0cmljdGlvbnMuCisKK1RoZSBkb2N1bWVudCBtb2RndWlkZS50ZXggaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGRldGFpbHMKK3RoZSByZWFzb25zIGZvciB0aGUgbGVnYWwgcmVxdWlyZW1lbnRzIGRldGFpbGVkIGFib3ZlLgorRXZlbiBpZiBUaGUgUHJvZ3JhbSBpcyB1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBhcmd1bWVudCBpbgorbW9kZ3VpZGUudGV4IG1heSBzdGlsbCBhcHBseSwgYW5kIHNob3VsZCBiZSByZWFkIGJlZm9yZQorYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFRoZSBQcm9ncmFtIGlzIGRpc3RyaWJ1dGVkLgorCisKK0NvbmRpdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBpbmRpdmlkdWFsIGZpbGVzIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB3aGljaCBzdXBlcnNlZGUKK3RoZSBnZW5lcmFsIGNvbmRpdGlvbnMgb24gZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gY29udGFpbmVkIGluCit0aGlzIGZpbGUuIElmIHRoZXJlIGFyZSBhbnkgc3VjaCBmaWxlcywgdGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUKK1Byb2dyYW0gd2lsbCBjb250YWluIGEgcHJvbWluZW50IGZpbGUgdGhhdCBsaXN0cyBhbGwgdGhlIGV4Y2VwdGlvbmFsCitmaWxlcy4KKworVHlwaWNhbCBleGFtcGxlcyBvZiBmaWxlcyB3aXRoIG1vcmUgcmVzdHJpY3RpdmUgbW9kaWZpY2F0aW9uCitjb25kaXRpb25zIHdvdWxkIGJlIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgdGV4dCBvZiBjb3B5cmlnaHQgbm90aWNlcy4KKworICogVGhlIGNvbmRpdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcyBkaWZmZXIgb25seSBpbiB0aGUKKyAgIGV4dGVudCBvZiAqbW9kaWZpY2F0aW9uKiB0aGF0IGlzIGFsbG93ZWQuCisKKyAqIFRoZSBjb25kaXRpb25zIG9uICpkaXN0cmlidXRpb24qIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHRoZSBmaWxlcy4KKyAgIFRodXMgYSAocmUpZGlzdHJpYnV0b3Igb2YgYSBjb21wbGV0ZSwgdW5jaGFuZ2VkIGNvcHkgb2YgVGhlIFByb2dyYW0KKyAgIG5lZWQgbWVldCBvbmx5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgZmlsZTsgaXQgaXMgbm90IG5lY2Vzc2FyeSB0bworICAgY2hlY2sgdGhlIGhlYWRlciBvZiBldmVyeSBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gdG8gY2hlY2sgdGhhdCBhCisgICBkaXN0cmlidXRpb24gbWVldHMgdGhlc2UgcmVxdWlyZW1lbnRzLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODMzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMQpAQCAtMCwwICsxLDMxNiBAQAorCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4xICAxOTk5LTA3LTEwCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHByb2dyYW0gdGhhdCB5b3UgaGF2ZSB3cml0dGVuIGFuZCB3aXNoCit0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91cgorcHJvZ3JhbSBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgeW91IG1heSB1c2UgaXQKK2V2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBUZVguICBUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XCitUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRWAsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsCitleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nCitkaXN0cmlidXRpbmcgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGBUaGUgUHJvZ3JhbWAgcmVmZXJzIHRvIGFueSBwcm9ncmFtCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZC4gIEluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeQorYW5kL29yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gbW9kaWZpY2F0aW9uIG9mIHRoZW1zZWx2ZXMgYW5kIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZW1zZWx2ZXMsIGJ1dCAqbm8qIGZpbGUgb2YgVGhlCitQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBhbiB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIGZpbGUuICBBIGRpc3RyaWJ1dG9yIHdpc2hpbmcKK3RvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZQorbmVlZHMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgb25seSBpbiB0aGlzIGxpY2Vuc2UgYW5kIG5vd2hlcmUgZWxzZS4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIFRoZSBQcm9ncmFtCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgVGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbQordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUgCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleGAKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiBUaGUgUHJvZ3JhbSBpcyBub3QgYWxsb3dlZC4KKworWW91IG1heSBub3QgbW9kaWZ5IGluIGFueSB3YXkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIHRoYXQgYmVhcnMgYSBsZWdhbAorbm90aWNlIGZvcmJpZGRpbmcgbW9kaWZpY2F0aW9uIG9mIHRoYXQgZmlsZS4KKworWW91IG1heSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpZiwgYW5kIG9ubHkgaWYsIHRoZQorZm9sbG93aW5nIGVpZ2h0IGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAxLiBZb3UgbXVzdCBtZWV0IGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgYm9ybmUgYnkgdGhlIGZpbGUgb24gdGhlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgYXMgZGVzY3JpYmVkIGJlbG93CisgICAgIGluIHRoZSBzdWJzZWN0aW9uIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZgorICAgICBUaGUgUHJvZ3JhbWAuCisgCisgIDIuIElmIHRoZSBmaWxlIGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSwgdGhlbiB5b3UgbXVzdCBtZWV0IGFueQorICAgICBhcHBsaWNhYmxlIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQKKyAgICAgdmVyc2lvbiBvZiB0aGUgZmlsZSB0aGF0IGFyZSBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlc2AuCisgCisgIDMuIFlvdSBtdXN0IG5vdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZQorICAgICBvcmlnaW5hbCBmaWxlLgorIAorICA0LiBJbiB0aGUgbW9kaWZpZWQgZmlsZSwgeW91IG11c3QgYWNrbm93bGVkZ2UgdGhlIGF1dGhvcnNoaXAgYW5kCisgICAgIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgbmFtZSAoaWYgYW55KSBvZiB0aGUgcHJvZ3JhbQorICAgICB3aGljaCBjb250YWlucyBpdC4KKyAKKyAgNS4gWW91IG11c3QgY2hhbmdlIGFueSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgaW4gdGhlIGZpbGUgdG8gaW5kaWNhdGUKKyAgICAgY2xlYXJseSB0aGF0IHRoZSBtb2RpZmllZCBmaWxlIGlzIG5vdCBwYXJ0IG9mIFRoZSBQcm9ncmFtLgorIAorICA2LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGFkZHJlc3NlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBmb3IgdGhlCisgICAgIHJlcG9ydGluZyBvZiBlcnJvcnMgaW4gdGhlIGZpbGUgb3IgaW4gVGhlIFByb2dyYW0gZ2VuZXJhbGx5IHRvCisgICAgIGVuc3VyZSB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vIGxvbmdlciBtYWludGFpbmVkIGJ5IHRoZSBvcmlnaW5hbAorICAgICBtYWludGFpbmVycyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUgbW9kaWZpZWQKKyAgICAgZmlsZXMuCisgCisgIDcuIFlvdSBtdXN0IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcworICAgICBkaXN0cmlidXRpb24gYm90aCBvZiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgb2YgYW55IGZpbGVzIGRlcml2ZWQKKyAgICAgZnJvbSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAKKyAgOC4gWW91IG11c3QgZG8gZWl0aGVyIChBKSBvciAoQik6CisKKyAgICAgICAoQSkgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKHRoYXQgaXMsIGEgY29tcGxldGUsCisgICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSkgdG9nZXRoZXIgd2l0aCB0aGUgbW9kaWZpZWQKKyAgICAgICAgICAgZmlsZTsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbWFkZSBieQorICAgICAgICAgICBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgZmlsZSBmcm9tIGEgZGVzaWduYXRlZAorICAgICAgICAgICBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IFRoZSBQcm9ncmFtCisgICAgICAgICAgIGZyb20gdGhlIHNhbWUgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkCisgICAgICAgICAgIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSBUaGUgUHJvZ3JhbSBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICBtb2RpZmllZCBmaWxlOworCisgICAgICAgKEIpIHByb3ZpZGUgdG8gdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIG1vZGlmaWVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgdGhhdCBpcyBzdWZmaWNpZW50IGZvciB0aGVtIHRvIG9idGFpbiBhIGNvcHkgb2YgVGhlIFByb2dyYW07CisgICAgICAgICAgIGZvciBleGFtcGxlLCB5b3UgbWF5IHByb3ZpZGUgYSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkKKyAgICAgICAgICAgZm9yIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3Qgd2lsbCBwcm92aWRlIHRoZW0gd2l0aCBhIGNvcHkgb2YgCisgICAgICAgICAgIFRoZSBQcm9ncmFtIGZyZWUgb2YgY2hhcmdlIChlaXRoZXIgdGhlIHZlcnNpb24gZnJvbSB3aGljaAorICAgICAgICAgICB5b3VyIG1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBvciBwZXJoYXBzIGEgbGF0ZXIgdmVyc2lvbikuCisKK05vdGUgdGhhdCBpbiB0aGUgYWJvdmUsIGBkaXN0cmlidXRpb25gIG9mIGEgZmlsZSBtZWFucyBtYWtpbmcgdGhlCitmaWxlIGF2YWlsYWJsZSB0byBvdGhlcnMgYnkgYW55IG1lYW5zLiAgVGhpcyBpbmNsdWRlcywgZm9yIGluc3RhbmNlLAoraW5zdGFsbGluZyB0aGUgZmlsZSBvbiBhbnkgbWFjaGluZSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGZpbGUgaXMKK2FjY2Vzc2libGUgYnkgdXNlcnMgb3RoZXIgdGhhbiB5b3Vyc2VsZi4gIGBNb2RpZmljYXRpb25gIG9mIGEgZmlsZQorbWVhbnMgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgZGVyaXZhdGl2ZSBmaWxlIHVuZGVyIGFueQorYXBwbGljYWJsZSBsYXcgLS0gdGhhdCBpcywgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgb3IKK2Egc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucworYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIGZpbGUgaXMgY29uc2lkZXJlZCB0byBiZSBhIG1vZGlmaWNhdGlvbiBvZgordGhlIGZpbGUuCisKK1RoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUKK2FwcGxpZWQgdG8gZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorYWJvdmUgY29uZGl0aW9ucy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8KK2FueSBzdWNoIG1vZGlmaWVkIGZpbGUuCisKK1RoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QKK2FwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0IGJlY29tZXMKK2lkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLgorCisgCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBlaWdodCBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBmaWxlLiAgV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2gKK21vZGlmaWVkIGZpbGVzIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGU7IG9yIGl0IG1heQorbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUKK3RoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zIG9mCit0aGlzIGxpY2Vuc2UuICBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weQorb2YgVGhlIFByb2dyYW0gaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYyBvbmUuICBNYW55IHByb2dyYW1zIHByb3ZpZGUKK3dheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzCitsaWNlbnNlZCBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gaW5kaXZpZHVhbCBmaWxlIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB0aGF0CitzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGlmLCBhbmQgb25seQoraWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZQorZmlsZSBvciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlIGNvbmRpdGlvbnMKK29uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoCityZXNwZWN0IHRvIHRoZSBraW5kIGFuZCBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9mIHRob3NlIGZpbGVzIHRoYXQKK2lzIGFsbG93ZWQsIGFuZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucworb2YgdGhvc2UgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywKK2lmIGl0IGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSksIHRoZW4gdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCitjb25kaXRpb25zLCB3aGljaCBzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMKK2Fib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjoKKworICAtIFlvdSBtYXkgbm90IG1vZGlmeSBhbnkgZmlsZSB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmluc2Agc2luY2UKKyAgICB0aGVzZSBhcmUgaW5zdGFsbGF0aW9uIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGxlZ2FsIG5vdGljZXMgdGhhdCBhcmUKKyAgICBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuCisgCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5mZGAgKExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcykgdW5kZXIgdGhlIHN0YW5kYXJkCisgICAgY29uZGl0aW9ucyBvZiB0aGUgTFBQTCBhcyBkZXNjcmliZWQgYWJvdmUuICBZb3UgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgIHN1Y2ggbW9kaWZpZWQgTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMKKyAgICBwcm92aWRlZCB0aGF0OgorICAgICgxKSB0aGUgb25seSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcyBlaXRoZXIgZW5hYmxlIHVzZSBvZgorICAgICAgICBhdmFpbGFibGUgZm9udHMgb3IgcHJldmVudCBhdHRlbXB0cyB0byBhY2Nlc3MgdW5hdmFpbGFibGUgZm9udHM7CisgICAgKDIpIHlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZpbGVzIChUZVggaW5wdXQKKyAgICAgICAgcGF0aHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBzZXQgb2YgTGFUZVggZm9udCBkZWZpbml0aW9uCisgICAgICAgIGZpbGVzIGlzIGFjdHVhbGx5IHVzZWQgYnkgVGVYKS4KKworICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcykgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcy4KKyAgICBUaGUgUHJvZ3JhbSBtYXkgKGFuZCB1c3VhbGx5IHdpbGwpIHNwZWNpZnkgdGhlIHJhbmdlIG9mIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorIAorQmVjYXVzZSBvZiBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGlzc3VlcyBpbiBMYVRlWCBzb2Z0d2FyZSwKK1RoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YKK2NvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLAorYnV0IHN1Y2ggZGlzdHJpYnV0aW9uIGNhbiBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzYCwgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKK2EgcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgVGhlIFByb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UKK2Fzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IKK2FueSBhdXRob3IgbmFtZWQgaW4gdGhlIGZpbGVzIG9mIFRoZSBQcm9ncmFtLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBiZWxvdywgYmUgbGlhYmxlIHRvCit5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mCitpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZgorZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcworYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZAorcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyCitwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuICBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdWAgaW4KK3RoaXMgc2VjdGlvbi4KKworCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHByb2dyYW0geW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvCit0aGlzIGxpY2Vuc2UgYW55d2hlcmUgaW4geW91ciBwcm9ncmFtIGJ1dCBpbnN0ZWFkIGRpc3RyaWJ1dGUgeW91cgorcHJvZ3JhbSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlCithcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgcmVmZXIgdG8KK3RoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgeW91ciBwcm9ncmFtIGlzCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHByb2dyYW0gaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleGAgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGZpbGVzIG9mIHlvdXIgcHJvZ3JhbSBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvCithIHN0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSBpcworY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDEgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyBwcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4xCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMSBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYIAorICAlIHZlcnNpb24gMTk5OS8wNi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucyBnaXZlbiBpbgordGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIGBUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZQordHdvIGZpbGVzIGBwaWcuZHR4YCBhbmQgYHBpZy5pbnNgLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyYCByZWZlcnJpbmcKK3RvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgVGhlIFByb2dyYW0KKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIFRoZSBQcm9ncmFtIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0uICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgVGhlIFByb2dyYW0uCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgbGlrZQorCisgICAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuCisKKyAgIGluIHRoYXQgcGxhY2UuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlCisgICBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UKKyAgIHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLgorCisgTm90aW5nIEV4Y2VwdGlvbmFsIEZpbGVzCisgIAorICAgSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24sIG9yIG9uIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucywgb2YgdGhvc2UKKyAgIGZpbGVzIChvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBpbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYCisgICBTb2Z0d2FyZSBGaWxlc2ApLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhCisgICBwcm9taW5lbnQgZmlsZSB0aGF0IGRlZmluZXMgdGhlIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMsIGFuZCBlaXRoZXIKKyAgIGxpc3RzIHRoZSBleGNlcHRpb25hbCBmaWxlcyBvciBkZWZpbmVzIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgb2YKKyAgIGV4Y2VwdGlvbmFsIGZpbGVzLgorCisgICBGaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZQorICAgb2Z0ZW4gZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbi4gIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uCisgICBgLmNmZ2ApIGFyZSBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIGxlc3MgcmVzdHJpY3RpdmUgY29uZGl0aW9ucworICAgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUKKyAgIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiBMYVRlWCBzb2Z0d2FyZSBnaXZlbiBhYm92ZSBhcmUgZXhhbXBsZXMgCisgICBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwKKyAgIGNvbmRpdGlvbnMuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4yIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5MWE0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4yCkBAIC0wLDAgKzEsMzIwIEBACisKKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKK0xQUEwgVmVyc2lvbiAxLjIgIDE5OTktMDktMDMKKworQ29weXJpZ2h0IDE5OTkgTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKKyAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKK1BSRUFNQkxFCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlCitiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBpcyBkaXN0cmlidXRlZC4KKworWW91IG1heSB1c2UgdGhpcyBsaWNlbnNlIGZvciBhbnkgcHJvZ3JhbSB0aGF0IHlvdSBoYXZlIHdyaXR0ZW4gYW5kIHdpc2gKK3RvIGRpc3RyaWJ1dGUuICBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyCitwcm9ncmFtIGlzIFRlWC1yZWxhdGVkIChzdWNoIGFzIGEgTGFUZVggcGFja2FnZSksIGJ1dCB5b3UgbWF5IHVzZSBpdAorZXZlbiBpZiB5b3VyIHByb2dyYW0gaXMgdW5yZWxhdGVkIHRvIFRlWC4gIFRoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cKK1RPIERJU1RSSUJVVEUgUFJPR1JBTVMgVU5ERVIgVEhJUyBMSUNFTlNFYCwgYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywKK2V4YW1wbGVzLCBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcKK2Rpc3RyaWJ1dGluZyB0aGVpciBwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK0luIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYFRoZSBQcm9ncmFtYCByZWZlcnMgdG8gYW55IHByb2dyYW0KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggVGhlIFByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkCithbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmUKK2Rpc3RyaWJ1dGVkLiAgSW5kaXZpZHVhbCBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5CithbmQvb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiBtb2RpZmljYXRpb24gb2YgdGhlbXNlbHZlcyBhbmQgb24gdGhlCitkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlbXNlbHZlcywgYnV0ICpubyogZmlsZSBvZiBUaGUKK1Byb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeSBvciBzdXBlcnNlZGluZyBjb25kaXRpb25zIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGUgZmlsZS4gIEEgZGlzdHJpYnV0b3Igd2lzaGluZwordG8gZGlzdHJpYnV0ZSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlCituZWVkcyB0byBjaGVjayB0aGUgY29uZGl0aW9ucyBvbmx5IGluIHRoaXMgbGljZW5zZSBhbmQgbm93aGVyZSBlbHNlLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgVGhlIFByb2dyYW0KK2FyZSBub3QgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgSW4KK3BhcnRpY3VsYXIsIHRoZSBhY3Qgb2YgcnVubmluZyBUaGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZC4KKworV2UsIHRoZSBMYVRlWDMgUHJvamVjdCwgYmVsaWV2ZSB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGdpdmUgeW91Cit0aGUgZnJlZWRvbSB0byBtYWtlIGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtCit0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91IHdpc2ggd2hpbGUKK21haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgYW5kIHJlbGlhYmlsaXR5IG9mCitUaGUgUHJvZ3JhbS4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZSAKK21lZXRpbmcgdGhlc2UgY29uZGl0aW9ucywgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBgY2ZnZ3VpZGUudGV4YAoraW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitDT05ESVRJT05TIE9OIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0uCitEaXN0cmlidXRpb24gb2Ygb25seSBwYXJ0IG9mIFRoZSBQcm9ncmFtIGlzIG5vdCBhbGxvd2VkLgorCitZb3UgbWF5IG5vdCBtb2RpZnkgaW4gYW55IHdheSBhIGZpbGUgb2YgVGhlIFByb2dyYW0gdGhhdCBiZWFycyBhIGxlZ2FsCitub3RpY2UgZm9yYmlkZGluZyBtb2RpZmljYXRpb24gb2YgdGhhdCBmaWxlLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCBmaWxlIG9mIFRoZSBQcm9ncmFtIGlmLCBhbmQgb25seSBpZiwgdGhlCitmb2xsb3dpbmcgZWlnaHQgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgIDEuIFlvdSBtdXN0IG1lZXQgYW55IGFkZGl0aW9uYWwgY29uZGl0aW9ucyBib3JuZSBieSB0aGUgZmlsZSBvbiB0aGUKKyAgICAgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBhcyBkZXNjcmliZWQgYmVsb3cKKyAgICAgaW4gdGhlIHN1YnNlY3Rpb24gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBJbmRpdmlkdWFsIEZpbGVzIG9mCisgICAgIFRoZSBQcm9ncmFtYC4KKyAKKyAgMi4gSWYgdGhlIGZpbGUgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlLCB0aGVuIHlvdSBtdXN0IG1lZXQgYW55CisgICAgIGFwcGxpY2FibGUgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZAorICAgICB2ZXJzaW9uIG9mIHRoZSBmaWxlIHRoYXQgYXJlIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc3Vic2VjdGlvbgorICAgICBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzYC4KKyAKKyAgMy4gWW91IG11c3Qgbm90IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlCisgICAgIG9yaWdpbmFsIGZpbGUuCisgCisgIDQuIEluIHRoZSBtb2RpZmllZCBmaWxlLCB5b3UgbXVzdCBhY2tub3dsZWRnZSB0aGUgYXV0aG9yc2hpcCBhbmQKKyAgICAgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHRoZSBuYW1lIChpZiBhbnkpIG9mIHRoZSBwcm9ncmFtCisgICAgIHdoaWNoIGNvbnRhaW5zIGl0LgorIAorICA1LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGlkZW50aWZpY2F0aW9uIHN0cmluZyBpbiB0aGUgZmlsZSB0byBpbmRpY2F0ZQorICAgICBjbGVhcmx5IHRoYXQgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbm90IHBhcnQgb2YgVGhlIFByb2dyYW0uCisgCisgIDYuIFlvdSBtdXN0IGNoYW5nZSBhbnkgYWRkcmVzc2VzIGluIHRoZSBtb2RpZmllZCBmaWxlIGZvciB0aGUKKyAgICAgcmVwb3J0aW5nIG9mIGVycm9ycyBpbiB0aGUgZmlsZSBvciBpbiBUaGUgUHJvZ3JhbSBnZW5lcmFsbHkgdG8KKyAgICAgZW5zdXJlIHRoYXQgcmVwb3J0cyBmb3IgZmlsZXMgbm8gbG9uZ2VyIG1haW50YWluZWQgYnkgdGhlIG9yaWdpbmFsCisgICAgIG1haW50YWluZXJzIHdpbGwgYmUgZGlyZWN0ZWQgdG8gdGhlIG1haW50YWluZXJzIG9mIHRoZSBtb2RpZmllZAorICAgICBmaWxlcy4KKyAKKyAgNy4gWW91IG11c3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB1bmRlciBhIGxpY2Vuc2UgdGhhdCBmb3JiaWRzCisgICAgIGRpc3RyaWJ1dGlvbiBib3RoIG9mIHRoZSBtb2RpZmllZCBmaWxlIGFuZCBvZiBhbnkgZmlsZXMgZGVyaXZlZAorICAgICBmcm9tIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorIAorICA4LiBZb3UgbXVzdCBkbyBlaXRoZXIgKEEpIG9yIChCKToKKworICAgICAgIChBKSBkaXN0cmlidXRlIGEgY29weSBvZiBUaGUgUHJvZ3JhbSAodGhhdCBpcywgYSBjb21wbGV0ZSwKKyAgICAgICAgICAgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtKSB0b2dldGhlciB3aXRoIHRoZSBtb2RpZmllZAorICAgICAgICAgICBmaWxlOyBpZiB5b3VyIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbW9kaWZpZWQgZmlsZSBpcyBtYWRlIGJ5CisgICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBmaWxlIGZyb20gYSBkZXNpZ25hdGVkCisgICAgICAgICAgIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgVGhlIFByb2dyYW0KKyAgICAgICAgICAgZnJvbSB0aGUgc2FtZSBwbGFjZSBtZWV0cyB0aGlzIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQKKyAgICAgICAgICAgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IFRoZSBQcm9ncmFtIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgIG1vZGlmaWVkIGZpbGU7CisKKyAgICAgICAoQikgcHJvdmlkZSB0byB0aG9zZSB3aG8gcmVjZWl2ZSB0aGUgbW9kaWZpZWQgZmlsZSBpbmZvcm1hdGlvbgorICAgICAgICAgICB0aGF0IGlzIHN1ZmZpY2llbnQgZm9yIHRoZW0gdG8gb2J0YWluIGEgY29weSBvZiBUaGUgUHJvZ3JhbTsKKyAgICAgICAgICAgZm9yIGV4YW1wbGUsIHlvdSBtYXkgcHJvdmlkZSBhIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvciAoVVJMKQorICAgICAgICAgICBmb3IgYSBzaXRlIHRoYXQgeW91IGV4cGVjdCB3aWxsIHByb3ZpZGUgdGhlbSB3aXRoIGEgY29weSBvZiAKKyAgICAgICAgICAgVGhlIFByb2dyYW0gZnJlZSBvZiBjaGFyZ2UgKGVpdGhlciB0aGUgdmVyc2lvbiBmcm9tIHdoaWNoCisgICAgICAgICAgIHlvdXIgbW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIG9yIHBlcmhhcHMgYSBsYXRlciB2ZXJzaW9uKS4KKworTm90ZSB0aGF0IGluIHRoZSBhYm92ZSwgYGRpc3RyaWJ1dGlvbmAgb2YgYSBmaWxlIG1lYW5zIG1ha2luZyB0aGUKK2ZpbGUgYXZhaWxhYmxlIHRvIG90aGVycyBieSBhbnkgbWVhbnMuICBUaGlzIGluY2x1ZGVzLCBmb3IgaW5zdGFuY2UsCitpbnN0YWxsaW5nIHRoZSBmaWxlIG9uIGFueSBtYWNoaW5lIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgZmlsZSBpcworYWNjZXNzaWJsZSBieSB1c2VycyBvdGhlciB0aGFuIHlvdXJzZWxmLiAgYE1vZGlmaWNhdGlvbmAgb2YgYSBmaWxlCittZWFucyBhbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBkZXJpdmF0aXZlIGZpbGUgdW5kZXIgYW55CithcHBsaWNhYmxlIGxhdyAtLSB0aGF0IGlzLCBhIGZpbGUgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBvcgorYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zCithbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0NoYW5naW5nIHRoZSBuYW1lIG9mIGEgZmlsZSAob3RoZXIgdGhhbiBhcyBuZWNlc3NpdGF0ZWQgYnkgdGhlIGZpbGUKK2NvbnZlbnRpb25zIG9mIHRoZSB0YXJnZXQgZmlsZSBzeXN0ZW1zKSBpcyBjb25zaWRlcmVkIHRvIGJlIGEKK21vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZS4KKworVGhlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBkbyBub3QgaGF2ZSB0byBiZQorYXBwbGllZCB0byBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCithYm92ZSBjb25kaXRpb25zLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBDb25kaXRpb24gNy4gZG9lcyBhcHBseSB0bworYW55IHN1Y2ggbW9kaWZpZWQgZmlsZS4KKworVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSB1cGRhdGluZywgYnkgYW55IG1ldGhvZCwgb2YgYSBmaWxlIHNvIHRoYXQgaXQgYmVjb21lcworaWRlbnRpY2FsIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGF0IGZpbGUgb2YgVGhlIFByb2dyYW0uCisKKyAKKworQSBSZWNvbW1lbmRhdGlvbiBvbiBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHdpc2UgbmV2ZXIgdG8gbW9kaWZ5IGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSwgZXZlbiBmb3IgeW91ciBvd24KK3BlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGVpZ2h0IGNvbmRpdGlvbnMgZm9yCitkaXN0cmlidXRpbmcgdGhlIG1vZGlmaWVkIGZpbGUuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpZWQgZmlsZXMgd2lsbCBuZXZlciBiZSBkaXN0cmlidXRlZCwgb2Z0ZW4gdGhpcyB3aWxsIGhhcHBlbiBieQorYWNjaWRlbnQgLS0geW91IG1heSBmb3JnZXQgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCB0aGUgZmlsZTsgb3IgaXQgbWF5Citub3Qgb2NjdXIgdG8geW91IHdoZW4gYWxsb3dpbmcgb3RoZXJzIHRvIGFjY2VzcyB0aGUgbW9kaWZpZWQgZmlsZQordGhhdCB5b3UgYXJlIHRodXMgZGlzdHJpYnV0aW5nIGl0IGFuZCB2aW9sYXRpbmcgdGhlIGNvbmRpdGlvbnMgb2YKK3RoaXMgbGljZW5zZS4gIEl0IGlzIHVzdWFsbHkgaW4geW91ciBiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5CitvZiBUaGUgUHJvZ3JhbSBpZGVudGljYWwgd2l0aCB0aGUgcHVibGljIG9uZS4gIE1hbnkgcHJvZ3JhbXMgcHJvdmlkZQord2F5cyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGF0IHByb2dyYW0gd2l0aG91dCBhbHRlcmluZyBpdHMKK2xpY2Vuc2VkIGZpbGVzLgorCisKK0FkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBJbmRpdmlkdWFsIEZpbGVzIG9mIFRoZSBQcm9ncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBpbmRpdmlkdWFsIGZpbGUgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgYWRkaXRpb25hbCBjb25kaXRpb25zIHRoYXQKK3N1cHBsZW1lbnQgYW5kL29yIHN1cGVyc2VkZSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgaWYsIGFuZCBvbmx5CitpZiwgc3VjaCBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgZXhjbHVzaXZlbHkgY29uY2VybiBtb2RpZmljYXRpb24gb2YgdGhlCitmaWxlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUgY29uZGl0aW9ucworb24gaW5kaXZpZHVhbCBmaWxlcyBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUgbWF5IGRpZmZlciBvbmx5IHdpdGgKK3Jlc3BlY3QgdG8gdGhlIGtpbmQgYW5kIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb2YgdGhvc2UgZmlsZXMgdGhhdAoraXMgYWxsb3dlZCwgYW5kIHdpdGggcmVzcGVjdCB0byB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zCitvZiB0aG9zZSBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBhIGZpbGUgb2YgVGhlIFByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIExhVGVYICh0aGF0IGlzLAoraWYgaXQgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlKSwgdGhlbiB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwKK2NvbmRpdGlvbnMsIHdoaWNoIHN1cHBsZW1lbnQgYW5kL29yIHN1cGVyc2VkZSB0aGUgY29uZGl0aW9ucworYWJvdmUsIGFwcGx5IHRvIHRoZSBmaWxlIGFjY29yZGluZyB0byBpdHMgZmlsZW5hbWUgZXh0ZW5zaW9uOgorCisgIC0gWW91IG1heSBub3QgbW9kaWZ5IGFueSBmaWxlIHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uIGAuaW5zYCBzaW5jZQorICAgIHRoZXNlIGFyZSBpbnN0YWxsYXRpb24gZmlsZXMgY29udGFpbmluZyB0aGUgbGVnYWwgbm90aWNlcyB0aGF0IGFyZQorICAgIHBsYWNlZCBpbiB0aGUgZmlsZXMgdGhleSBnZW5lcmF0ZS4KKyAKKyAgLSBZb3UgbWF5IGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCBmaWxlbmFtZQorICAgIGV4dGVuc2lvbiBgLmZkYCAoTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzKSB1bmRlciB0aGUgc3RhbmRhcmQKKyAgICBjb25kaXRpb25zIG9mIHRoZSBMUFBMIGFzIGRlc2NyaWJlZCBhYm92ZS4gIFlvdSBtYXkgYWxzbyBkaXN0cmlidXRlCisgICAgc3VjaCBtb2RpZmllZCBMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcworICAgIHByb3ZpZGVkIHRoYXQ6CisgICAgKDEpIHRoZSBvbmx5IGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGZpbGVzIGVpdGhlciBlbmFibGUgdXNlIG9mCisgICAgICAgIGF2YWlsYWJsZSBmb250cyBvciBwcmV2ZW50IGF0dGVtcHRzIHRvIGFjY2VzcyB1bmF2YWlsYWJsZSBmb250czsKKyAgICAoMikgeW91IGFsc28gZGlzdHJpYnV0ZSB0aGUgb3JpZ2luYWwsIHVubW9kaWZpZWQgZmlsZXMgKFRlWCBpbnB1dAorICAgICAgICBwYXRocyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoaWNoIHNldCBvZiBMYVRlWCBmb250IGRlZmluaXRpb24KKyAgICAgICAgZmlsZXMgaXMgYWN0dWFsbHkgdXNlZCBieSBUZVgpLgorCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5jZmdgIChjb25maWd1cmF0aW9uIGZpbGVzKSB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzLgorICAgIFRoZSBQcm9ncmFtIG1heSAoYW5kIHVzdWFsbHkgd2lsbCkgc3BlY2lmeSB0aGUgcmFuZ2Ugb2YgY29tbWFuZHMKKyAgICB0aGF0IGFyZSBhbGxvd2VkIGluIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZpbGUuCisgCitCZWNhdXNlIG9mIHBvcnRhYmlsaXR5IGFuZCBleGNoYW5nZWFiaWxpdHkgaXNzdWVzIGluIExhVGVYIHNvZnR3YXJlLAorVGhlIExhVGVYMyBQcm9qZWN0IGRlcHJlY2F0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZgorY29tcG9uZW50cyBvZiBMYVRlWCBvciBvZiBnZW5lcmFsbHkgYXZhaWxhYmxlIGNvbnRyaWJ1dGVkIGNvZGUgZm9yIHRoZW0sCitidXQgc3VjaCBkaXN0cmlidXRpb24gY2FuIG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLgorCisKK05PIFdBUlJBTlRZCis9PT09PT09PT09PQorCitUaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgVGhlIFByb2dyYW0uICBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluCit3cml0aW5nLCBUaGUgQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyBUaGUgUHJvZ3JhbSBgYXMgaXNgLCB3aXRob3V0Cit3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QKK2xpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvcgorYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlCitvZiBUaGUgUHJvZ3JhbSBpcyB3aXRoIHlvdS4gIFNob3VsZCBUaGUgUHJvZ3JhbSBwcm92ZSBkZWZlY3RpdmUsIHlvdQorYXNzdW1lIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIsIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvcgorYW55IGF1dGhvciBuYW1lZCBpbiB0aGUgZmlsZXMgb2YgVGhlIFByb2dyYW0sIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5CitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgVGhlIFByb2dyYW0gYXMgcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8KK3lvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yCitjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgYW55IHVzZSBvZiBUaGUgUHJvZ3JhbSBvciBvdXQgb2YKK2luYWJpbGl0eSB0byB1c2UgVGhlIFByb2dyYW0gKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBsb3NzIG9mCitkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgYW55b25lIGFzCithIHJlc3VsdCBvZiBhbnkgZmFpbHVyZSBvZiBUaGUgUHJvZ3JhbSB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyCitwcm9ncmFtcyksIGV2ZW4gaWYgVGhlIENvcHlyaWdodCBIb2xkZXIgb3Igc2FpZCBhdXRob3Igb3Igc2FpZCBvdGhlcgorcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3Byb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91YCBpbgordGhpcyBzZWN0aW9uLgorCisKK0Nob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgZm9yIGFueSBwYXJ0IG9mIHlvdXIgcHJvZ3JhbSB5b3Ugd2FudCBvciBuZWVkIHRvIHVzZSAqZGlzdHJpYnV0aW9uKgorY29uZGl0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbiBkbyBub3QgcmVmZXIgdG8KK3RoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHByb2dyYW0gYnV0IGluc3RlYWQgZGlzdHJpYnV0ZSB5b3VyCitwcm9ncmFtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuICBZb3UgbWF5IHVzZSB0aGUgdGV4dCBvZiB0aGlzIGxpY2Vuc2UKK2FzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2Ugc2hvdWxkIG5vdCByZWZlciB0bwordGhlIExQUEwgb3Igb3RoZXJ3aXNlIGdpdmUgdGhlIGltcHJlc3Npb24gdGhhdCB5b3VyIHByb2dyYW0gaXMKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLgorCitUaGUgZG9jdW1lbnQgYG1vZGd1aWRlLnRleGAgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGV4cGxhaW5zCit0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiAgSXQgZXhwbGFpbnMsCitmb3IgZXhhbXBsZSwgd2h5IGRpc3RyaWJ1dGluZyBMYVRlWCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIChHUEwpIHdhcyBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUuICBFdmVuIGlmIHlvdXIgcHJvZ3JhbSBpcwordW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgZGlzY3Vzc2lvbiBpbiBgbW9kZ3VpZGUudGV4YCBtYXkgc3RpbGwgYmUKK3JlbGV2YW50LCBhbmQgYXV0aG9ycyBpbnRlbmRpbmcgdG8gZGlzdHJpYnV0ZSB0aGVpciBwcm9ncmFtcyB1bmRlciBhbnkKK2xpY2Vuc2UgYXJlIGVuY291cmFnZWQgdG8gcmVhZCBpdC4KKworCitIb3cgdG8gVXNlIFRoaXMgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIHRoaXMgbGljZW5zZSwgcGxhY2UgaW4gZWFjaCBvZiB0aGUgZmlsZXMgb2YgeW91ciBwcm9ncmFtIGJvdGgKK2FuIGV4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIgYW5kIGFsc28KK2Egc3RhdGVtZW50IHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIGlzCitjb25zdHJhaW5lZCBieSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQ6CisKKyAgJSUgcGlnLmR0eAorICAlJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lCisgICUKKyAgJSBUaGlzIHByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUKKyAgJSBjb25kaXRpb25zIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlLCBlaXRoZXIgdmVyc2lvbiAxLjIKKyAgJSBvZiB0aGlzIGxpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgJSBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGluCisgICUgICBodHRwOi8vd3d3LmxhdGV4LXByb2plY3Qub3JnL2xwcGwudHh0CisgICUgYW5kIHZlcnNpb24gMS4yIG9yIGxhdGVyIGlzIHBhcnQgb2YgYWxsIGRpc3RyaWJ1dGlvbnMgb2YgTGFUZVggCisgICUgdmVyc2lvbiAxOTk5LzEyLzAxIG9yIGxhdGVyLgorICAlCisgICUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisKK0dpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zIGdpdmVuIGluCit0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgd291bGQgYXBwbHksIHdpdGggYFRoZSBQcm9ncmFtYCByZWZlcnJpbmcgdG8gdGhlCit0d28gZmlsZXMgYHBpZy5kdHhgIGFuZCBgcGlnLmluc2AsIGFuZCBgVGhlIENvcHlyaWdodCBIb2xkZXJgIHJlZmVycmluZwordG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZWAuCisKKworSW1wb3J0YW50IFJlY29tbWVuZGF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgRGVmaW5pbmcgV2hhdCBDb25zdGl0dXRlcyBUaGUgUHJvZ3JhbQorCisgICBUaGUgTFBQTCByZXF1aXJlcyB0aGF0IGRpc3RyaWJ1dGlvbnMgb2YgVGhlIFByb2dyYW0gY29udGFpbiBhbGwgdGhlCisgICBmaWxlcyBvZiBUaGUgUHJvZ3JhbS4gIEl0IGlzIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB5b3UgcHJvdmlkZSBhCisgICB3YXkgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgY29uc3RpdHV0ZSBUaGUgUHJvZ3JhbS4KKyAgIFRoaXMgY291bGQsIGZvciBleGFtcGxlLCBiZSBhY2hpZXZlZCBieSBleHBsaWNpdGx5IGxpc3RpbmcgYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0gbmVhciB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBlYWNoIGZpbGUgb3IgYnkKKyAgIHVzaW5nIGEgbGluZSBsaWtlCisKKyAgICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKworICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgVGhlIFByb2dyYW0uCisKKyBOb3RpbmcgRXhjZXB0aW9uYWwgRmlsZXMKKyAgCisgICBJZiBUaGUgUHJvZ3JhbSBjb250YWlucyBhbnkgZmlsZXMgYmVhcmluZyBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbiwgb3Igb24gZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zLCBvZiB0aG9zZQorICAgZmlsZXMgKG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGluIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVgKKyAgIFNvZnR3YXJlIEZpbGVzYCksIHRoZW4gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBUaGUgUHJvZ3JhbSBjb250YWluIGEKKyAgIHByb21pbmVudCBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZXhjZXB0aW9uYWwgY29uZGl0aW9ucywgYW5kIGVpdGhlcgorICAgbGlzdHMgdGhlIGV4Y2VwdGlvbmFsIGZpbGVzIG9yIGRlZmluZXMgb25lIG9yIG1vcmUgY2F0ZWdvcmllcyBvZgorICAgZXhjZXB0aW9uYWwgZmlsZXMuCisKKyAgIEZpbGVzIGNvbnRhaW5pbmcgdGhlIHRleHQgb2YgYSBsaWNlbnNlIChzdWNoIGFzIHRoaXMgZmlsZSkgYXJlCisgICBvZnRlbiBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIG1vcmUgcmVzdHJpY3RpdmUgY29uZGl0aW9ucyBvbgorICAgbW9kaWZpY2F0aW9uLiAgTGFUZVggY29uZmlndXJhdGlvbiBmaWxlcyAod2l0aCBmaWxlbmFtZSBleHRlbnNpb24KKyAgIGAuY2ZnYCkgYXJlIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbGVzcyByZXN0cmljdGl2ZSBjb25kaXRpb25zCisgICBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIFRoZQorICAgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIExhVGVYIHNvZnR3YXJlIGdpdmVuIGFib3ZlIGFyZSBleGFtcGxlcyAKKyAgIG9mIGRlY2xhcmluZyBhIGNhdGVnb3J5IG9mIGZpbGVzIGJlYXJpbmcgZXhjZXB0aW9uYWwgYWRkaXRpb25hbAorICAgY29uZGl0aW9ucy4KKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWUzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuM2MKQEAgLTAsMCArMSw0MTggQEAKKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKK0xQUEwgVmVyc2lvbiAxLjNjICAyMDA4LTA1LTA0CisKK0NvcHlyaWdodCAxOTk5IDIwMDItMjAwOCBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuCisKKworUFJFQU1CTEUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgcHJpbWFyeSBsaWNlbnNlIHVuZGVyCit3aGljaCB0aGUgTGFUZVgga2VybmVsIGFuZCB0aGUgYmFzZSBMYVRlWCBwYWNrYWdlcyBhcmUgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHdvcmsgb2Ygd2hpY2ggeW91IGhvbGQgdGhlIGNvcHlyaWdodAorYW5kIHdoaWNoIHlvdSB3aXNoIHRvIGRpc3RyaWJ1dGUuICBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseQorc3VpdGFibGUgaWYgeW91ciB3b3JrIGlzIFRlWC1yZWxhdGVkIChzdWNoIGFzIGEgTGFUZVggcGFja2FnZSksIGJ1dCAKK2l0IGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IHlvdSBjYW4gdXNlIGl0IGV2ZW4gaWYgeW91ciB3b3JrIGlzIAordW5yZWxhdGVkIHRvIFRlWC4KKworVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRWAsCitiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycword2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIgd29ya3MgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIHdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkCithbmQgbW9kaWZpZWQsIGFzIHdlbGwgYXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtb2RpZmllZCB2ZXJzaW9ucyBvZgordGhhdCB3b3JrIG1heSBiZSBkaXN0cmlidXRlZC4KKworV2UsIHRoZSBMYVRlWDMgUHJvamVjdCwgYmVsaWV2ZSB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGdpdmUgeW91Cit0aGUgZnJlZWRvbSB0byBtYWtlIGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHlvdXIgd29yawordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgordGhhdCB3b3JrLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleGAKK2FuZCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLgorCisKK0RFRklOSVRJT05TCis9PT09PT09PT09PQorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgdGhlIGZvbGxvd2luZyB0ZXJtcyBhcmUgdXNlZDoKKworICAgYFdvcmtgCisgICAgQW55IHdvcmsgYmVpbmcgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgIAorICAgYERlcml2ZWQgV29ya2AKKyAgICBBbnkgd29yayB0aGF0IHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBpcyBkZXJpdmVkIGZyb20gdGhlIFdvcmsuCisKKyAgIGBNb2RpZmljYXRpb25gIAorICAgIEFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIERlcml2ZWQgV29yayB1bmRlciBhbnkgYXBwbGljYWJsZQorICAgIGxhdyAtLSBmb3IgZXhhbXBsZSwgdGhlIHByb2R1Y3Rpb24gb2YgYSBmaWxlIGNvbnRhaW5pbmcgYW4KKyAgICBvcmlnaW5hbCBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yayBvciBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YKKyAgICBzdWNoIGEgZmlsZSwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IKKyAgICB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworICAgYE1vZGlmeWAKKyAgICBUbyBhcHBseSBhbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBEZXJpdmVkIFdvcmsgdW5kZXIgYW55CisgICAgYXBwbGljYWJsZSBsYXcuCisgICAgCisgICBgRGlzdHJpYnV0aW9uYAorICAgIE1ha2luZyBjb3BpZXMgb2YgdGhlIFdvcmsgYXZhaWxhYmxlIGZyb20gb25lIHBlcnNvbiB0byBhbm90aGVyLCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQuICBEaXN0cmlidXRpb24gaW5jbHVkZXMgKGJ1dCBpcyBub3QgbGltaXRlZCB0bykKKyAgICBtYWtpbmcgYW55IGVsZWN0cm9uaWMgY29tcG9uZW50cyBvZiB0aGUgV29yayBhY2Nlc3NpYmxlIGJ5CisgICAgZmlsZSB0cmFuc2ZlciBwcm90b2NvbHMgc3VjaCBhcyBGVFAgb3IgSFRUUCBvciBieSBzaGFyZWQgZmlsZQorICAgIHN5c3RlbXMgc3VjaCBhcyBTdW5gcyBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpLgorCisgICBgQ29tcGlsZWQgV29ya2AKKyAgICBBIHZlcnNpb24gb2YgdGhlIFdvcmsgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgaW50byBhIGZvcm0gd2hlcmUgaXQKKyAgICBpcyBkaXJlY3RseSB1c2FibGUgb24gYSBjb21wdXRlciBzeXN0ZW0uICBUaGlzIHByb2Nlc3NpbmcgbWF5CisgICAgaW5jbHVkZSB1c2luZyBpbnN0YWxsYXRpb24gZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUgV29yaywKKyAgICB0cmFuc2Zvcm1hdGlvbnMgb2YgdGhlIFdvcmssIGNvcHlpbmcgb2YgY29tcG9uZW50cyBvZiB0aGUgV29yaywgb3IKKyAgICBvdGhlciBhY3Rpdml0aWVzLiAgTm90ZSB0aGF0IG1vZGlmaWNhdGlvbiBvZiBhbnkgaW5zdGFsbGF0aW9uCisgICAgZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUgV29yayBjb25zdGl0dXRlcyBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsuCisKKyAgIGBDdXJyZW50IE1haW50YWluZXJgCisgICAgQSBwZXJzb24gb3IgcGVyc29ucyBub21pbmF0ZWQgYXMgc3VjaCB3aXRoaW4gdGhlIFdvcmsuICBJZiB0aGVyZSBpcworICAgIG5vIHN1Y2ggZXhwbGljaXQgbm9taW5hdGlvbiB0aGVuIGl0IGlzIHRoZSBgQ29weXJpZ2h0IEhvbGRlcmAgdW5kZXIKKyAgICBhbnkgYXBwbGljYWJsZSBsYXcuCisKKyAgIGBCYXNlIEludGVycHJldGVyYCAKKyAgICBBIHByb2dyYW0gb3IgcHJvY2VzcyB0aGF0IGlzIG5vcm1hbGx5IG5lZWRlZCBmb3IgcnVubmluZyBvcgorICAgIGludGVycHJldGluZyBhIHBhcnQgb3IgdGhlIHdob2xlIG9mIHRoZSBXb3JrLiAgICAKKworICAgIEEgQmFzZSBJbnRlcnByZXRlciBtYXkgZGVwZW5kIG9uIGV4dGVybmFsIGNvbXBvbmVudHMgYnV0IHRoZXNlCisgICAgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIEJhc2UgSW50ZXJwcmV0ZXIgcHJvdmlkZWQgdGhhdCBlYWNoCisgICAgZXh0ZXJuYWwgY29tcG9uZW50IGNsZWFybHkgaWRlbnRpZmllcyBpdHNlbGYgd2hlbmV2ZXIgaXQgaXMgdXNlZAorICAgIGludGVyYWN0aXZlbHkuICBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgd2hlbiBhcHBseWluZyB0aGUKKyAgICBsaWNlbnNlIHRvIHRoZSBXb3JrLCB0aGUgb25seSBhcHBsaWNhYmxlIEJhc2UgSW50ZXJwcmV0ZXIgaXMgYQorICAgIGBMYVRlWC1Gb3JtYXRgIG9yIGluIHRoZSBjYXNlIG9mIGZpbGVzIGJlbG9uZ2luZyB0byB0aGUgCisgICAgYExhVGVYLWZvcm1hdGAgYSBwcm9ncmFtIGltcGxlbWVudGluZyB0aGUgYFRlWCBsYW5ndWFnZWAuCisKKworCitDT05ESVRJT05TIE9OIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsKK2FyZSBub3QgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgSW4KK3BhcnRpY3VsYXIsIHRoZSBhY3Qgb2YgcnVubmluZyB0aGUgV29yayBpcyBub3QgcmVzdHJpY3RlZCBhbmQgbm8KK3JlcXVpcmVtZW50cyBhcmUgbWFkZSBjb25jZXJuaW5nIGFueSBvZmZlcnMgb2Ygc3VwcG9ydCBmb3IgdGhlIFdvcmsuCisKKzIuICBZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIHlvdQorcmVjZWl2ZWQgaXQuICBEaXN0cmlidXRpb24gb2Ygb25seSBwYXJ0IG9mIHRoZSBXb3JrIGlzIGNvbnNpZGVyZWQKK21vZGlmaWNhdGlvbiBvZiB0aGUgV29yaywgYW5kIG5vIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgc3VjaCBhIERlcml2ZWQKK1dvcmsgbWF5IGJlIGFzc3VtZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgY2xhdXNlLgorCiszLiAgWW91IG1heSBkaXN0cmlidXRlIGEgQ29tcGlsZWQgV29yayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZCBmcm9tIGEKK2NvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIFdvcmsgYXMgZGlzdHJpYnV0ZWQgdW5kZXIgQ2xhdXNlIDIKK2Fib3ZlLCBhcyBsb25nIGFzIHRoYXQgQ29tcGlsZWQgV29yayBpcyBkaXN0cmlidXRlZCBpbiBzdWNoIGEgd2F5IHRoYXQKK3RoZSByZWNpcGllbnRzIG1heSBpbnN0YWxsIHRoZSBDb21waWxlZCBXb3JrIG9uIHRoZWlyIHN5c3RlbSBleGFjdGx5CithcyBpdCB3b3VsZCBoYXZlIGJlZW4gaW5zdGFsbGVkIGlmIHRoZXkgZ2VuZXJhdGVkIGEgQ29tcGlsZWQgV29yaworZGlyZWN0bHkgZnJvbSB0aGUgV29yay4KKworNC4gIElmIHlvdSBhcmUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSwgd2l0aG91dAorcmVzdHJpY3Rpb24sIG1vZGlmeSB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yay4gIFlvdSBtYXkKK2Fsc28gZGlzdHJpYnV0ZSB0aGUgRGVyaXZlZCBXb3JrIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworQ29tcGlsZWQgV29ya3MgZ2VuZXJhdGVkIGZyb20gdGhlIERlcml2ZWQgV29yay4gIERlcml2ZWQgV29ya3MKK2Rpc3RyaWJ1dGVkIGluIHRoaXMgbWFubmVyIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIgYXJlIGNvbnNpZGVyZWQgdG8KK2JlIHVwZGF0ZWQgdmVyc2lvbnMgb2YgdGhlIFdvcmsuCisKKzUuICBJZiB5b3UgYXJlIG5vdCB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5IG1vZGlmeQoreW91ciBjb3B5IG9mIHRoZSBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgRGVyaXZlZCBXb3JrIGJhc2VkIG9uIHRoZSBXb3JrLAorYW5kIGNvbXBpbGUgdGhpcyBEZXJpdmVkIFdvcmssIHRodXMgY3JlYXRpbmcgYSBDb21waWxlZCBXb3JrIGJhc2VkIG9uCit0aGUgRGVyaXZlZCBXb3JrLgorCis2LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heQorZGlzdHJpYnV0ZSBhIERlcml2ZWQgV29yayBwcm92aWRlZCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldAorZm9yIGV2ZXJ5IGNvbXBvbmVudCBvZiB0aGUgV29yayB1bmxlc3MgdGhhdCBjb21wb25lbnQgY2xlYXJseSBzdGF0ZXMKK2luIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXQgaXMgZXhlbXB0IGZyb20gdGhhdCBjb25kaXRpb24uICBPbmx5Cit0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIGFsbG93ZWQgdG8gYWRkIHN1Y2ggc3RhdGVtZW50cyBvZiBleGVtcHRpb24gCit0byBhIGNvbXBvbmVudCBvZiB0aGUgV29yay4gCisKKyAgYS4gSWYgYSBjb21wb25lbnQgb2YgdGhpcyBEZXJpdmVkIFdvcmsgY2FuIGJlIGEgZGlyZWN0IHJlcGxhY2VtZW50CisgICAgIGZvciBhIGNvbXBvbmVudCBvZiB0aGUgV29yayB3aGVuIHRoYXQgY29tcG9uZW50IGlzIHVzZWQgd2l0aCB0aGUKKyAgICAgQmFzZSBJbnRlcnByZXRlciwgdGhlbiwgd2hlcmV2ZXIgdGhpcyBjb21wb25lbnQgb2YgdGhlIFdvcmsKKyAgICAgaWRlbnRpZmllcyBpdHNlbGYgdG8gdGhlIHVzZXIgd2hlbiB1c2VkIGludGVyYWN0aXZlbHkgd2l0aCB0aGF0CisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZSByZXBsYWNlbWVudCBjb21wb25lbnQgb2YgdGhpcyBEZXJpdmVkIFdvcmsKKyAgICAgY2xlYXJseSBhbmQgdW5hbWJpZ3VvdXNseSBpZGVudGlmaWVzIGl0c2VsZiBhcyBhIG1vZGlmaWVkIHZlcnNpb24KKyAgICAgb2YgdGhpcyBjb21wb25lbnQgdG8gdGhlIHVzZXIgd2hlbiB1c2VkIGludGVyYWN0aXZlbHkgd2l0aCB0aGF0CisgICAgIEJhc2UgSW50ZXJwcmV0ZXIuCisgICAgIAorICBiLiBFdmVyeSBjb21wb25lbnQgb2YgdGhlIERlcml2ZWQgV29yayBjb250YWlucyBwcm9taW5lbnQgbm90aWNlcworICAgICBkZXRhaWxpbmcgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyB0byB0aGF0IGNvbXBvbmVudCwgb3IgYQorICAgICBwcm9taW5lbnQgcmVmZXJlbmNlIHRvIGFub3RoZXIgZmlsZSB0aGF0IGlzIGRpc3RyaWJ1dGVkIGFzIHBhcnQKKyAgICAgb2YgdGhlIERlcml2ZWQgV29yayBhbmQgdGhhdCBjb250YWlucyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBsb2cKKyAgICAgb2YgdGhlIGNoYW5nZXMuCisgIAorICBjLiBObyBpbmZvcm1hdGlvbiBpbiB0aGUgRGVyaXZlZCBXb3JrIGltcGxpZXMgdGhhdCBhbnkgcGVyc29ucywKKyAgICAgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pIHRoZSBhdXRob3JzIG9mIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCisgICAgIG9mIHRoZSBXb3JrLCBwcm92aWRlIGFueSBzdXBwb3J0LCBpbmNsdWRpbmcgKGJ1dCBub3QgbGltaXRlZCB0bykKKyAgICAgdGhlIHJlcG9ydGluZyBhbmQgaGFuZGxpbmcgb2YgZXJyb3JzLCB0byByZWNpcGllbnRzIG9mIHRoZQorICAgICBEZXJpdmVkIFdvcmsgdW5sZXNzIHRob3NlIHBlcnNvbnMgaGF2ZSBzdGF0ZWQgZXhwbGljaXRseSB0aGF0CisgICAgIHRoZXkgZG8gcHJvdmlkZSBzdWNoIHN1cHBvcnQgZm9yIHRoZSBEZXJpdmVkIFdvcmsuCisKKyAgZC4gWW91IGRpc3RyaWJ1dGUgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGUgRGVyaXZlZCBXb3JrOgorCisgICAgICAgMS4gQSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrOyAKKyAgICAgICAgICBpZiB5b3VyIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIGNvbXBvbmVudCBpcyBtYWRlIGJ5CisgICAgICAgICAgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBmcm9tIGEKKyAgICAgICAgICBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkKKyAgICAgICAgICB0aGUgV29yayBmcm9tIHRoZSBzYW1lIG9yIHNvbWUgc2ltaWxhciBwbGFjZSBtZWV0cyB0aGlzCisgICAgICAgICAgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvCisgICAgICAgICAgY29weSB0aGUgV29yayBhbG9uZyB3aXRoIHRoZSBtb2RpZmllZCBjb21wb25lbnQ7CisKKyAgICAgICAyLiBJbmZvcm1hdGlvbiB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gb2J0YWluIGEgY29tcGxldGUsCisgICAgICAgICAgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrLgorCis3LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heQorZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgZ2VuZXJhdGVkIGZyb20gYSBEZXJpdmVkIFdvcmssIGFzIGxvbmcgYXMKK3RoZSBEZXJpdmVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIENvbXBpbGVkCitXb3JrLCBhbmQgYXMgbG9uZyBhcyB0aGUgY29uZGl0aW9ucyBvZiBDbGF1c2UgNiwgYWJvdmUsIGFyZSBtZXQgd2l0aAorcmVnYXJkIHRvIHRoZSBEZXJpdmVkIFdvcmsuCisKKzguICBUaGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8gbm90CithcHBseSB0bywgdGhlIG1vZGlmaWNhdGlvbiwgYnkgYW55IG1ldGhvZCwgb2YgYW55IGNvbXBvbmVudCBzbyB0aGF0IGl0CitiZWNvbWVzIGlkZW50aWNhbCB0byBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhhdCBjb21wb25lbnQgb2YgdGhlIFdvcmsgYXMKK2l0IGlzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIgdW5kZXIgQ2xhdXNlIDQsIGFib3ZlLgorCis5LiAgRGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG9yIGFueSBEZXJpdmVkIFdvcmsgaW4gYW4gYWx0ZXJuYXRpdmUKK2Zvcm1hdCwgd2hlcmUgdGhlIFdvcmsgb3IgdGhhdCBEZXJpdmVkIFdvcmsgKGluIHdob2xlIG9yIGluIHBhcnQpIGlzCit0aGVuIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIHNvbWUgcHJvY2VzcyB0byB0aGF0IGZvcm1hdCwgZG9lcyBub3QgcmVsYXggb3IKK251bGxpZnkgYW55IHNlY3Rpb25zIG9mIHRoaXMgbGljZW5zZSBhcyB0aGV5IHBlcnRhaW4gdG8gdGhlIHJlc3VsdHMgb2YKK2FwcGx5aW5nIHRoYXQgcHJvY2Vzcy4KKyAgICAgCisxMC4gYS4gQSBEZXJpdmVkIFdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UKKyAgICAgICBwcm92aWRlZCB0aGF0IGxpY2Vuc2UgaXRzZWxmIGhvbm9ycyB0aGUgY29uZGl0aW9ucyBsaXN0ZWQgaW4KKyAgICAgICBDbGF1c2UgNiBhYm92ZSwgaW4gcmVnYXJkIHRvIHRoZSBXb3JrLCB0aG91Z2ggaXQgZG9lcyBub3QgaGF2ZQorICAgICAgIHRvIGhvbm9yIHRoZSByZXN0IG9mIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKyAgICAgIAorICAgIGIuIElmIGEgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIHRoYXQKKyAgICAgICBEZXJpdmVkIFdvcmsgbXVzdCBwcm92aWRlIHN1ZmZpY2llbnQgZG9jdW1lbnRhdGlvbiBhcyBwYXJ0IG9mCisgICAgICAgaXRzZWxmIHRvIGFsbG93IGVhY2ggcmVjaXBpZW50IG9mIHRoYXQgRGVyaXZlZCBXb3JrIHRvIGhvbm9yIHRoZSAKKyAgICAgICByZXN0cmljdGlvbnMgaW4gQ2xhdXNlIDYgYWJvdmUsIGNvbmNlcm5pbmcgY2hhbmdlcyBmcm9tIHRoZSBXb3JrLgorCisxMS4gVGhpcyBsaWNlbnNlIHBsYWNlcyBubyByZXN0cmljdGlvbnMgb24gd29ya3MgdGhhdCBhcmUgdW5yZWxhdGVkIHRvCit0aGUgV29yaywgbm9yIGRvZXMgdGhpcyBsaWNlbnNlIHBsYWNlIGFueSByZXN0cmljdGlvbnMgb24gYWdncmVnYXRpbmcKK3N1Y2ggd29ya3Mgd2l0aCB0aGUgV29yayBieSBhbnkgbWVhbnMuCisKKzEyLiAgTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8sIG9yIG1heSBiZSB1c2VkIHRvLCBwcmV2ZW50Citjb21wbGV0ZSBjb21wbGlhbmNlIGJ5IGFsbCBwYXJ0aWVzIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cy4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBXb3JrLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgdGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgdGhlIFdvcmsgYGFzIGlzYCwgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYQorcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgdGhlIFdvcmsgaXMgd2l0aCB5b3UuICBTaG91bGQgdGhlIFdvcmsgcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lCit0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcKK3dpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIGFueSBhdXRob3IgbmFtZWQgaW4gdGhlIGNvbXBvbmVudHMgb2YgdGhlCitXb3JrLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heSBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIFdvcmsgYXMKK3Blcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLAorc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgYW55IHVzZSBvZgordGhlIFdvcmsgb3Igb3V0IG9mIGluYWJpbGl0eSB0byB1c2UgdGhlIFdvcmsgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkCit0bywgbG9zcyBvZiBkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkKK2FueW9uZSBhcyBhIHJlc3VsdCBvZiBhbnkgZmFpbHVyZSBvZiB0aGUgV29yayB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyCitwcm9ncmFtcyksIGV2ZW4gaWYgdGhlIENvcHlyaWdodCBIb2xkZXIgb3Igc2FpZCBhdXRob3Igb3Igc2FpZCBvdGhlcgorcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisKK01BSU5URU5BTkNFIE9GIFRIRSBXT1JLCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgYXV0aG9yLW1haW50YWluZWRgIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyCitleHBsaWNpdGx5IGFuZCBwcm9taW5lbnRseSBzdGF0ZXMgbmVhciB0aGUgcHJpbWFyeSBjb3B5cmlnaHQgbm90aWNlIGluCit0aGUgV29yayB0aGF0IHRoZSBXb3JrIGNhbiBvbmx5IGJlIG1haW50YWluZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIKK29yIHNpbXBseSB0aGF0IGl0IGlzIGBhdXRob3ItbWFpbnRhaW5lZGAuCisKK1RoZSBXb3JrIGhhcyB0aGUgc3RhdHVzIGBtYWludGFpbmVkYCBpZiB0aGVyZSBpcyBhIEN1cnJlbnQgTWFpbnRhaW5lcgord2hvIGhhcyBpbmRpY2F0ZWQgaW4gdGhlIFdvcmsgdGhhdCB0aGV5IGFyZSB3aWxsaW5nIHRvIHJlY2VpdmUgZXJyb3IKK3JlcG9ydHMgZm9yIHRoZSBXb3JrIChmb3IgZXhhbXBsZSwgYnkgc3VwcGx5aW5nIGEgdmFsaWQgZS1tYWlsCithZGRyZXNzKS4gSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgQ3VycmVudCBNYWludGFpbmVyIHRvIGFja25vd2xlZGdlCitvciBhY3QgdXBvbiB0aGVzZSBlcnJvciByZXBvcnRzLgorCitUaGUgV29yayBjaGFuZ2VzIGZyb20gc3RhdHVzIGBtYWludGFpbmVkYCB0byBgdW5tYWludGFpbmVkYCBpZiB0aGVyZQoraXMgbm8gQ3VycmVudCBNYWludGFpbmVyLCBvciB0aGUgcGVyc29uIHN0YXRlZCB0byBiZSBDdXJyZW50CitNYWludGFpbmVyIG9mIHRoZSB3b3JrIGNhbm5vdCBiZSByZWFjaGVkIHRocm91Z2ggdGhlIGluZGljYXRlZCBtZWFucworb2YgY29tbXVuaWNhdGlvbiBmb3IgYSBwZXJpb2Qgb2Ygc2l4IG1vbnRocywgYW5kIHRoZXJlIGFyZSBubyBvdGhlcgorc2lnbmlmaWNhbnQgc2lnbnMgb2YgYWN0aXZlIG1haW50ZW5hbmNlLgorCitZb3UgY2FuIGJlY29tZSB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrIGJ5IGFncmVlbWVudCB3aXRoCithbnkgZXhpc3RpbmcgQ3VycmVudCBNYWludGFpbmVyIHRvIHRha2Ugb3ZlciB0aGlzIHJvbGUuCisKK0lmIHRoZSBXb3JrIGlzIHVubWFpbnRhaW5lZCwgeW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZgordGhlIFdvcmsgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisgMS4gIE1ha2UgYSByZWFzb25hYmxlIGF0dGVtcHQgdG8gdHJhY2UgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciAoYW5kCisgICAgIHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBpZiB0aGUgdHdvIGRpZmZlcikgdGhyb3VnaCB0aGUgbWVhbnMgb2YKKyAgICAgYW4gSW50ZXJuZXQgb3Igc2ltaWxhciBzZWFyY2guCisKKyAyLiAgSWYgdGhpcyBzZWFyY2ggaXMgc3VjY2Vzc2Z1bCwgdGhlbiBlbnF1aXJlIHdoZXRoZXIgdGhlIFdvcmsKKyAgICAgaXMgc3RpbGwgbWFpbnRhaW5lZC4KKworICBhLiBJZiBpdCBpcyBiZWluZyBtYWludGFpbmVkLCB0aGVuIGFzayB0aGUgQ3VycmVudCBNYWludGFpbmVyCisgICAgIHRvIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKyAgICAgCisgIGIuIElmIHRoZSBzZWFyY2ggaXMgdW5zdWNjZXNzZnVsIG9yIG5vIGFjdGlvbiB0byByZXN1bWUgYWN0aXZlCisgICAgIG1haW50ZW5hbmNlIGlzIHRha2VuIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIsIHRoZW4gYW5ub3VuY2UKKyAgICAgd2l0aGluIHRoZSBwZXJ0aW5lbnQgY29tbXVuaXR5IHlvdXIgaW50ZW50aW9uIHRvIHRha2Ugb3ZlcgorICAgICBtYWludGVuYW5jZS4gIChJZiB0aGUgV29yayBpcyBhIExhVGVYIHdvcmssIHRoaXMgY291bGQgYmUKKyAgICAgZG9uZSwgZm9yIGV4YW1wbGUsIGJ5IHBvc3RpbmcgdG8gY29tcC50ZXh0LnRleC4pCisKKyAzYS4gSWYgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyByZWFjaGFibGUgYW5kIGFncmVlcyB0byBwYXNzCisgICAgIG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIHRvIHlvdSwgdGhlbiB0aGlzIHRha2VzIGVmZmVjdAorICAgICBpbW1lZGlhdGVseSB1cG9uIGFubm91bmNlbWVudC4KKyAgICAgCisgIGIuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgbm90IHJlYWNoYWJsZSBhbmQgdGhlIENvcHlyaWdodAorICAgICBIb2xkZXIgYWdyZWVzIHRoYXQgbWFpbnRlbmFuY2Ugb2YgdGhlIFdvcmsgYmUgcGFzc2VkIHRvIHlvdSwKKyAgICAgdGhlbiB0aGlzIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSB1cG9uIGFubm91bmNlbWVudC4gIAorICAgIAorIDQuICBJZiB5b3UgbWFrZSBhbiBgaW50ZW50aW9uIGFubm91bmNlbWVudGAgYXMgZGVzY3JpYmVkIGluIDJiLiBhYm92ZQorICAgICBhbmQgYWZ0ZXIgdGhyZWUgbW9udGhzIHlvdXIgaW50ZW50aW9uIGlzIGNoYWxsZW5nZWQgbmVpdGhlciBieQorICAgICB0aGUgQ3VycmVudCBNYWludGFpbmVyIG5vciBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciBub3IgYnkgb3RoZXIKKyAgICAgcGVvcGxlLCB0aGVuIHlvdSBtYXkgYXJyYW5nZSBmb3IgdGhlIFdvcmsgdG8gYmUgY2hhbmdlZCBzbyBhcworICAgICB0byBuYW1lIHlvdSBhcyB0aGUgKG5ldykgQ3VycmVudCBNYWludGFpbmVyLgorICAgICAKKyA1LiAgSWYgdGhlIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgQ3VycmVudCBNYWludGFpbmVyIGJlY29tZXMKKyAgICAgcmVhY2hhYmxlIG9uY2UgbW9yZSB3aXRoaW4gdGhyZWUgbW9udGhzIG9mIGEgY2hhbmdlIGNvbXBsZXRlZAorICAgICB1bmRlciB0aGUgdGVybXMgb2YgM2IpIG9yIDQpLCB0aGVuIHRoYXQgQ3VycmVudCBNYWludGFpbmVyIG11c3QKKyAgICAgYmVjb21lIG9yIHJlbWFpbiB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVwb24gcmVxdWVzdCBwcm92aWRlZAorICAgICB0aGV5IHRoZW4gdXBkYXRlIHRoZWlyIGNvbW11bmljYXRpb24gZGF0YSB3aXRoaW4gb25lIG1vbnRoLgorCitBIGNoYW5nZSBpbiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGRvZXMgbm90LCBvZiBpdHNlbGYsIGFsdGVyIHRoZSBmYWN0Cit0aGF0IHRoZSBXb3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMIGxpY2Vuc2UuCisKK0lmIHlvdSBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IHNob3VsZAoraW1tZWRpYXRlbHkgcHJvdmlkZSwgd2l0aGluIHRoZSBXb3JrLCBhIHByb21pbmVudCBhbmQgdW5hbWJpZ3VvdXMKK3N0YXRlbWVudCBvZiB5b3VyIHN0YXR1cyBhcyBDdXJyZW50IE1haW50YWluZXIuICBZb3Ugc2hvdWxkIGFsc28KK2Fubm91bmNlIHlvdXIgbmV3IHN0YXR1cyB0byB0aGUgc2FtZSBwZXJ0aW5lbnQgY29tbXVuaXR5IGFzCitpbiAyYikgYWJvdmUuCisKKworV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgV09SS1MgVU5ERVIgVEhJUyBMSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGltcG9ydGFudCBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQKK3JlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpcgord29ya3MgdW5kZXIgdGhpcyBsaWNlbnNlLiAgVGhlc2UgYXV0aG9ycyBhcmUgYWRkcmVzc2VkIGFzIGB5b3VgIGluCit0aGlzIHNlY3Rpb24uCisKK0Nob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgZm9yIGFueSBwYXJ0IG9mIHlvdXIgd29yayB5b3Ugd2FudCBvciBuZWVkIHRvIHVzZSAqZGlzdHJpYnV0aW9uKgorY29uZGl0aW9ucyB0aGF0IGRpZmZlciBzaWduaWZpY2FudGx5IGZyb20gdGhvc2UgaW4gdGhpcyBsaWNlbnNlLCB0aGVuCitkbyBub3QgcmVmZXIgdG8gdGhpcyBsaWNlbnNlIGFueXdoZXJlIGluIHlvdXIgd29yayBidXQsIGluc3RlYWQsCitkaXN0cmlidXRlIHlvdXIgd29yayB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQKK29mIHRoaXMgbGljZW5zZSBhcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlCitzaG91bGQgbm90IHJlZmVyIHRvIHRoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQKK3lvdXIgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHdvcmsgaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleGAgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgd29ya3MgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGNvbXBvbmVudCBvZiB0aGUgV29yaywgZXZlbiBmb3IgeW91ciBvd24KK3BlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGNvbmRpdGlvbnMgZm9yCitkaXN0cmlidXRpbmcgdGhlIG1vZGlmaWVkIGNvbXBvbmVudC4gIFdoaWxlIHlvdSBtaWdodCBpbnRlbmQgdGhhdCBzdWNoCittb2RpZmljYXRpb25zIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhhdCBjb21wb25lbnQ7IG9yCitpdCBtYXkgbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkCit2ZXJzaW9uIHRoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zCitvZiB0aGlzIGxpY2Vuc2UgaW4gd2F5cyB0aGF0IGNvdWxkIGhhdmUgbGVnYWwgaW1wbGljYXRpb25zIGFuZCwgd29yc2UsCitjYXVzZSBwcm9ibGVtcyBmb3IgdGhlIGNvbW11bml0eS4gIEl0IGlzIHRoZXJlZm9yZSB1c3VhbGx5IGluIHlvdXIKK2Jlc3QgaW50ZXJlc3QgdG8ga2VlcCB5b3VyIGNvcHkgb2YgdGhlIFdvcmsgaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYworb25lLiAgTWFueSB3b3JrcyBwcm92aWRlIHdheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCB3b3JrCit3aXRob3V0IGFsdGVyaW5nIGFueSBvZiBpdHMgbGljZW5zZWQgY29tcG9uZW50cy4KKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGNvbXBvbmVudHMgb2YgeW91ciB3b3JrIGJvdGgKK2FuIGV4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIgdGhlIHdvcmsKK3dhcyBhdXRob3JlZCBhbmQvb3IgbGFzdCBzdWJzdGFudGlhbGx5IG1vZGlmaWVkLiAgSW5jbHVkZSBhbHNvIGEKK3N0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGF0Citjb21wb25lbnQgaXMgY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDUgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyB3b3JrIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4zCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMyBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYCisgICUgdmVyc2lvbiAyMDA1LzEyLzAxIG9yIGxhdGVyLgorICAlCisgICUgVGhpcyB3b3JrIGhhcyB0aGUgTFBQTCBtYWludGVuYW5jZSBzdGF0dXMgYG1haW50YWluZWRgLgorICAlIAorICAlIFRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhpcyB3b3JrIGlzIE0uIFkuIE5hbWUuCisgICUKKyAgJSBUaGlzIHdvcmsgY29uc2lzdHMgb2YgdGhlIGZpbGVzIHBpZy5kdHggYW5kIHBpZy5pbnMKKyAgJSBhbmQgdGhlIGRlcml2ZWQgZmlsZSBwaWcuc3R5LgorCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucworZ2l2ZW4gaW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIHRoZSBgV29ya2AgcmVmZXJyaW5nCit0byB0aGUgdGhyZWUgZmlsZXMgYHBpZy5kdHhgLCBgcGlnLmluc2AsIGFuZCBgcGlnLnN0eWAgKHRoZSBsYXN0IGJlaW5nCitnZW5lcmF0ZWQgZnJvbSBgcGlnLmR0eGAgdXNpbmcgYHBpZy5pbnNgKSwgdGhlIGBCYXNlIEludGVycHJldGVyYAorcmVmZXJyaW5nIHRvIGFueSBgTGFUZVgtRm9ybWF0YCwgYW5kIGJvdGggYENvcHlyaWdodCBIb2xkZXJgIGFuZAorYEN1cnJlbnQgTWFpbnRhaW5lcmAgcmVmZXJyaW5nIHRvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCitJZiB5b3UgZG8gbm90IHdhbnQgdGhlIE1haW50ZW5hbmNlIHNlY3Rpb24gb2YgTFBQTCB0byBhcHBseSB0byB5b3VyCitXb3JrLCBjaGFuZ2UgYG1haW50YWluZWRgIGFib3ZlIGludG8gYGF1dGhvci1tYWludGFpbmVkYC4gIAorSG93ZXZlciwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBgbWFpbnRhaW5lZGAsIGFzIHRoZSBNYWludGVuYW5jZQorc2VjdGlvbiB3YXMgYWRkZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgeW91ciBXb3JrIHJlbWFpbnMgdXNlZnVsIHRvCit0aGUgY29tbXVuaXR5IGV2ZW4gd2hlbiB5b3UgY2FuIG5vIGxvbmdlciBtYWludGFpbiBhbmQgc3VwcG9ydCBpdAoreW91cnNlbGYuCisKK0Rlcml2ZWQgV29ya3MgVGhhdCBBcmUgTm90IFJlcGxhY2VtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldmVyYWwgY2xhdXNlcyBvZiB0aGUgTFBQTCBzcGVjaWZ5IG1lYW5zIHRvIHByb3ZpZGUgcmVsaWFiaWxpdHkgYW5kCitzdGFiaWxpdHkgZm9yIHRoZSB1c2VyIGNvbW11bml0eS4gVGhleSB0aGVyZWZvcmUgY29uY2VybiB0aGVtc2VsdmVzCit3aXRoIHRoZSBjYXNlIHRoYXQgYSBEZXJpdmVkIFdvcmsgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhCisoY29tcGF0aWJsZSBvciBpbmNvbXBhdGlibGUpIHJlcGxhY2VtZW50IG9mIHRoZSBvcmlnaW5hbCBXb3JrLiBJZgordGhpcyBpcyBub3QgdGhlIGNhc2UgKGUuZy4sIGlmIGEgZmV3IGxpbmVzIG9mIGNvZGUgYXJlIHJldXNlZCBmb3IgYQorY29tcGxldGVseSBkaWZmZXJlbnQgdGFzayksIHRoZW4gY2xhdXNlcyA2YiBhbmQgNmQgc2hhbGwgbm90IGFwcGx5LgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgdGhlIFdvcmsKKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIHRoZSBXb3JrIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgdGhlIFdvcmsuICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgdGhlIFdvcmsuCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgc3VjaCBhczoKKworICAgICUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIGFsbCBmaWxlcyBsaXN0ZWQgaW4gbWFuaWZlc3QudHh0LgorICAgCisgICBpbiB0aGF0IHBsYWNlLiAgSW4gdGhlIGFic2VuY2Ugb2YgYW4gdW5lcXVpdm9jYWwgbGlzdCBpdCBtaWdodCBiZQorICAgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91CisgICB0byBjb21wcmlzZSB0aGUgV29yayBhbmQsIGluIHN1Y2ggYSBjYXNlLCB0aGUgbGljZW5zZWUgd291bGQgYmUKKyAgIGVudGl0bGVkIHRvIG1ha2UgcmVhc29uYWJsZSBjb25qZWN0dXJlcyBhcyB0byB3aGljaCBmaWxlcyBjb21wcmlzZQorICAgdGhlIFdvcmsuCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDViMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MaWJwbmcKQEAgLTAsMCArMSwxMTIgQEAKKworVGhpcyBjb3B5IG9mIHRoZSBsaWJwbmcgbm90aWNlcyBpcyBwcm92aWRlZCBmb3IgeW91ciBjb252ZW5pZW5jZS4gIEluIGNhc2Ugb2YKK2FueSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoaXMgY29weSBhbmQgdGhlIG5vdGljZXMgaW4gdGhlIGZpbGUgcG5nLmggdGhhdCBpcworaW5jbHVkZWQgaW4gdGhlIGxpYnBuZyBkaXN0cmlidXRpb24sIHRoZSBsYXR0ZXIgc2hhbGwgcHJldmFpbC4KKworQ09QWVJJR0hUIE5PVElDRSwgRElTQ0xBSU1FUiwgYW5kIExJQ0VOU0U6CisKK0lmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKK3RoaXMgc2VudGVuY2UuCisKK1RoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgbGlicG5nIGxpY2Vuc2UuCisKK2xpYnBuZyB2ZXJzaW9ucyAxLjIuNiwgQXVndXN0IDE1LCAyMDA0LCB0aHJvdWdoIDEuNC41LCBEZWNlbWJlciA5LCAyMDEwLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwNCwgMjAwNi0yMDEwIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMi41Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbCBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycworCisgICBDb3NtaW4gVHJ1dGEKKworbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggMS4yLjUgLSBPY3RvYmVyIDMsIDIwMDIsIGFyZQorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4wLjYKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycworCisgICBTaW1vbi1QaWVycmUgQ2FkaWV1eAorICAgRXJpYyBTLiBSYXltb25kCisgICBHaWxsZXMgVm9sbGFudAorCithbmQgd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9ucyB0byB0aGUgZGlzY2xhaW1lcjoKKworICAgVGhlcmUgaXMgbm8gd2FycmFudHkgYWdhaW5zdCBpbnRlcmZlcmVuY2Ugd2l0aCB5b3VyIGVuam95bWVudCBvZiB0aGUKKyAgIGxpYnJhcnkgb3IgYWdhaW5zdCBpbmZyaW5nZW1lbnQuICBUaGVyZSBpcyBubyB3YXJyYW50eSB0aGF0IG91cgorICAgZWZmb3J0cyBvciB0aGUgbGlicmFyeSB3aWxsIGZ1bGZpbGwgYW55IG9mIHlvdXIgcGFydGljdWxhciBwdXJwb3NlcworICAgb3IgbmVlZHMuICBUaGlzIGxpYnJhcnkgaXMgcHJvdmlkZWQgd2l0aCBhbGwgZmF1bHRzLCBhbmQgdGhlIGVudGlyZQorICAgcmlzayBvZiBzYXRpc2ZhY3RvcnkgcXVhbGl0eSwgcGVyZm9ybWFuY2UsIGFjY3VyYWN5LCBhbmQgZWZmb3J0IGlzIHdpdGgKKyAgIHRoZSB1c2VyLgorCitsaWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC42LCBNYXJjaCAyMCwgMjAwMCwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC45NiwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgVG9tIExhbmUKKyAgIEdsZW5uIFJhbmRlcnMtUGVocnNvbgorICAgV2lsbGVtIHZhbiBTY2hhaWsKKworbGlicG5nIHZlcnNpb25zIDAuODksIEp1bmUgMTk5NiwgdGhyb3VnaCAwLjk2LCBNYXkgMTk5NywgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKK0Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjg4LAord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgorCisgICBKb2huIEJvd2xlcgorICAgS2V2aW4gQnJhY2V5CisgICBTYW0gQnVzaGVsbAorICAgTWFnbnVzIEhvbG1ncmVuCisgICBHcmVnIFJvZWxvZnMKKyAgIFRvbSBUYW5uZXIKKworbGlicG5nIHZlcnNpb25zIDAuNSwgTWF5IDE5OTUsIHRocm91Z2ggMC44OCwgSmFudWFyeSAxOTk2LCBhcmUKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGNvcHlyaWdodCBhbmQgbGljZW5zZSwgIkNvbnRyaWJ1dGluZyBBdXRob3JzIgoraXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nIHNldCBvZiBpbmRpdmlkdWFsczoKKworICAgQW5kcmVhcyBEaWxnZXIKKyAgIERhdmUgTWFydGluZGFsZQorICAgR3V5IEVyaWMgU2NoYWxuYXQKKyAgIFBhdWwgU2NobWlkdAorICAgVGltIFdlZ25lcgorCitUaGUgUE5HIFJlZmVyZW5jZSBMaWJyYXJ5IGlzIHN1cHBsaWVkICJBUyBJUyIuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMKK2FuZCBHcm91cCA0MiwgSW5jLiBkaXNjbGFpbSBhbGwgd2FycmFudGllcywgZXhwcmVzc2VkIG9yIGltcGxpZWQsCitpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBvZgorZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMgYW5kIEdyb3VwIDQyLCBJbmMuCithc3N1bWUgbm8gbGlhYmlsaXR5IGZvciBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksCitvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoaWNoIG1heSByZXN1bHQgZnJvbSB0aGUgdXNlIG9mIHRoZSBQTkcKK1JlZmVyZW5jZSBMaWJyYXJ5LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb3VyY2UgY29kZSwgb3IgcG9ydGlvbnMgaGVyZW9mLCBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0Cit0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkLgorCisyLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCBhbmQgbXVzdCBub3QKKyAgIGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UuCisKKzMuIFRoaXMgQ29weXJpZ2h0IG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueQorICAgc291cmNlIG9yIGFsdGVyZWQgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLiBzcGVjaWZpY2FsbHkgcGVybWl0LCB3aXRob3V0CitmZWUsIGFuZCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGFzIGEgY29tcG9uZW50IHRvCitzdXBwb3J0aW5nIHRoZSBQTkcgZmlsZSBmb3JtYXQgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4gIElmIHlvdSB1c2UgdGhpcworc291cmNlIGNvZGUgaW4gYSBwcm9kdWN0LCBhY2tub3dsZWRnbWVudCBpcyBub3QgcmVxdWlyZWQgYnV0IHdvdWxkIGJlCithcHByZWNpYXRlZC4KKworCitBICJwbmdfZ2V0X2NvcHlyaWdodCIgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCBmb3IgY29udmVuaWVudCB1c2UgaW4gImFib3V0IgorYm94ZXMgYW5kIHRoZSBsaWtlOgorCisgICBwcmludGYoIiVzIixwbmdfZ2V0X2NvcHlyaWdodChOVUxMKSk7CisKK0Fsc28sIHRoZSBQTkcgbG9nbyAoaW4gUE5HIGZvcm1hdCwgb2YgY291cnNlKSBpcyBzdXBwbGllZCBpbiB0aGUKK2ZpbGVzICJwbmdiYXIucG5nIiBhbmQgInBuZ2Jhci5qcGcgKDg4eDMxKSBhbmQgInBuZ25vdy5wbmciICg5OHgzMSkuCisKK0xpYnBuZyBpcyBPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIFNvZnR3YXJlLiAgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBpcyBhCitjZXJ0aWZpY2F0aW9uIG1hcmsgb2YgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUuCisKK0dsZW5uIFJhbmRlcnMtUGVocnNvbgorZ2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKK0RlY2VtYmVyIDksIDIwMTAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjhiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NSVQKQEAgLTAsMCArMSwyMyBAQAorCitNSVQgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDx5ZWFyPiA8Y29weXJpZ2h0IGhvbGRlcnM+CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2RjM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMApAQCAtMCwwICsxLDEwOSBAQAorCitNT1pJTExBIFBVQkxJQyBMSUNFTlNFCitWZXJzaW9uIDEuMAorCisxLiBEZWZpbml0aW9ucy4KKworMS4xLiBgYENvbnRyaWJ1dG9yYGAgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiBgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gYGBDb3ZlcmVkIENvZGVgYCBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gYGBFeGVjdXRhYmxlYGAgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gYGBJbml0aWFsIERldmVsb3BlcmBgIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiBgYExhcmdlciBXb3JrYGAgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiBgYExpY2Vuc2VgYCBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuIGBgTW9kaWZpY2F0aW9uc2BgIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiBgYE9yaWdpbmFsIENvZGVgYCBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiBgYFNvdXJjZSBDb2RlYGAgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiBgYFlvdWBgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIGBgWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIGBgY29udHJvbGBgIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LiAKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKGBgVXRpbGl6ZWBgKSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIAorRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIAorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiAKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiAKK0lmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBgYExFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLiAKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIAorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLiAKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEuIE5ldyBWZXJzaW9ucy4gCitOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoYGBOZXRzY2FwZWBgKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIAorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gCitJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyBgYE1vemlsbGFgYCwgYGBNT1pJTExBUExgYCwgYGBNT1pQTGBgLCBgYE5ldHNjYXBlYGAsIGBgTlBMYGAgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgaW4geW91ciBsaWNlbnNlIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIGBgQVMgSVNgYCBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorOC4gVEVSTUlOQVRJT04uCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgYGBjb21tZXJjaWFsIGl0ZW0sYGAgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZWBgIGFuZCBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixgYCBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgKGV4Y2VwdGluZyBhbnkgZGlzcHV0ZSByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nIGFyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueSBhcmJpdHJhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBDb3ZlcmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLgorRVhISUJJVCBBLgorYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18gX19fX19fX19fX19fX19fX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy5gYAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWE4YzRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMQpAQCAtMCwwICsxLDE4NSBAQAorCitNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIgorbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMS4gIkNvbnRyaWJ1dG9yIgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMy4gIkNvdmVyZWQgQ29kZSIKK21lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iCittZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNS4gIkV4ZWN1dGFibGUiCittZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIgorbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorMS43LiAiTGFyZ2VyIFdvcmsiCittZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorMS44LiAiTGljZW5zZSIKK21lYW5zIHRoaXMgZG9jdW1lbnQuCisxLjguMS4gIkxpY2Vuc2FibGUiCittZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKzEuOS4gIk1vZGlmaWNhdGlvbnMiCittZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0FueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorMS4xMC4gIk9yaWdpbmFsIENvZGUiCittZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIKK21lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorMS4xMS4gIlNvdXJjZSBDb2RlIgorbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyLiAiWW91IiAob3IgIllvdXIiKQorbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAordW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCit0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xIChhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xIChiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKK3VuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCit0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIgKGEpIGFuZCAyLjIgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgQ29kZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMiAoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zCisKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcworCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyhjKSBSZXByZXNlbnRhdGlvbnMuCisKK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNCAoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb25zIDMuMSwgMy4yLCAzLjMsIDMuNCBhbmQgMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zCisKK05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uICgiTmV0c2NhcGUiKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucworCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZSBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzCisKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICJNb3ppbGxhIiwgIk1PWklMTEFQTCIsICJNT1pQTCIsICJOZXRzY2FwZSIsICJNUEwiLCAiTlBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRlcm1pbmF0aW9uCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKK3N1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KK2FueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBnb3Zlcm5tZW50IGVuZCB1c2VycworCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNaXNjZWxsYW5lb3VzCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUmVzcG9uc2liaWxpdHkgZm9yIGNsYWltcworCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNdWx0aXBsZS1saWNlbnNlZCBjb2RlCisKK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyAiTXVsdGlwbGUtTGljZW5zZWQiLiAiTXVsdGlwbGUtTGljZW5zZWQiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgTVBMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisKK0V4aGliaXQgQSAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UuCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18KK19fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGUgX19fX18gbGljZW5zZSAodGhlICAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlIHRoZQorcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UKK2Fib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQoreW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CitkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKK290aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlCit0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCit1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgW19fX10gTGljZW5zZS4iCitOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUyZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTIuMApAQCAtMCwwICsxLDM3MyBAQAorTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworMS4xLiAiQ29udHJpYnV0b3IiCisgICAgbWVhbnMgZWFjaCBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSB0aGF0IGNyZWF0ZXMsIGNvbnRyaWJ1dGVzIHRvCisgICAgdGhlIGNyZWF0aW9uIG9mLCBvciBvd25zIENvdmVyZWQgU29mdHdhcmUuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCisgICAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb25zIG9mIG90aGVycyAoaWYgYW55KSB1c2VkCisgICAgYnkgYSBDb250cmlidXRvciBhbmQgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yJ3MgQ29udHJpYnV0aW9uLgorCisxLjMuICJDb250cmlidXRpb24iCisgICAgbWVhbnMgQ292ZXJlZCBTb2Z0d2FyZSBvZiBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuNC4gIkNvdmVyZWQgU29mdHdhcmUiCisgICAgbWVhbnMgU291cmNlIENvZGUgRm9ybSB0byB3aGljaCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQKKyAgICB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgdGhlIEV4ZWN1dGFibGUgRm9ybSBvZiBzdWNoIFNvdXJjZSBDb2RlCisgICAgRm9ybSwgYW5kIE1vZGlmaWNhdGlvbnMgb2Ygc3VjaCBTb3VyY2UgQ29kZSBGb3JtLCBpbiBlYWNoIGNhc2UKKyAgICBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS41LiAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIgorICAgIG1lYW5zCisKKyAgICAoYSkgdGhhdCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBkZXNjcmliZWQKKyAgICAgICAgaW4gRXhoaWJpdCBCIHRvIHRoZSBDb3ZlcmVkIFNvZnR3YXJlOyBvcgorCisgICAgKGIpIHRoYXQgdGhlIENvdmVyZWQgU29mdHdhcmUgd2FzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgICAgICB2ZXJzaW9uIDEuMSBvciBlYXJsaWVyIG9mIHRoZSBMaWNlbnNlLCBidXQgbm90IGFsc28gdW5kZXIgdGhlCisgICAgICAgIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UuCisKKzEuNi4gIkV4ZWN1dGFibGUgRm9ybSIKKyAgICBtZWFucyBhbnkgZm9ybSBvZiB0aGUgd29yayBvdGhlciB0aGFuIFNvdXJjZSBDb2RlIEZvcm0uCisKKzEuNy4gIkxhcmdlciBXb3JrIgorICAgIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlciBtYXRlcmlhbCwgaW4gCisgICAgYSBzZXBhcmF0ZSBmaWxlIG9yIGZpbGVzLCB0aGF0IGlzIG5vdCBDb3ZlcmVkIFNvZnR3YXJlLgorCisxLjguICJMaWNlbnNlIgorICAgIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIkxpY2Vuc2FibGUiCisgICAgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLAorICAgIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5LCBhbnkgYW5kCisgICAgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjEwLiAiTW9kaWZpY2F0aW9ucyIKKyAgICBtZWFucyBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIChhKSBhbnkgZmlsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLAorICAgICAgICBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIENvdmVyZWQKKyAgICAgICAgU29mdHdhcmU7IG9yCisKKyAgICAoYikgYW55IG5ldyBmaWxlIGluIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBjb250YWlucyBhbnkgQ292ZXJlZAorICAgICAgICBTb2Z0d2FyZS4KKworMS4xMS4gIlBhdGVudCBDbGFpbXMiIG9mIGEgQ29udHJpYnV0b3IKKyAgICBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsCisgICAgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBzdWNoCisgICAgQ29udHJpYnV0b3IgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQsIGJ1dCBmb3IgdGhlIGdyYW50IG9mIHRoZQorICAgIExpY2Vuc2UsIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgaGF2aW5nCisgICAgbWFkZSwgaW1wb3J0LCBvciB0cmFuc2ZlciBvZiBlaXRoZXIgaXRzIENvbnRyaWJ1dGlvbnMgb3IgaXRzCisgICAgQ29udHJpYnV0b3IgVmVyc2lvbi4KKworMS4xMi4gIlNlY29uZGFyeSBMaWNlbnNlIgorICAgIG1lYW5zIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4wLCB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4xLCB0aGUgR05VIEFmZmVybyBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMy4wLCBvciBhbnkgbGF0ZXIgdmVyc2lvbnMgb2YgdGhvc2UKKyAgICBsaWNlbnNlcy4KKworMS4xMy4gIlNvdXJjZSBDb2RlIEZvcm0iCisgICAgbWVhbnMgdGhlIGZvcm0gb2YgdGhlIHdvcmsgcHJlZmVycmVkIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucy4KKworMS4xNC4gIllvdSIgKG9yICJZb3VyIikKKyAgICBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdAorICAgIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yCisgICAgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0CisgICAgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKKyAgICB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4KKyAgICBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbAorICAgIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gTGljZW5zZSBHcmFudHMgYW5kIENvbmRpdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzIuMS4gR3JhbnRzCisKK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspCisgICAgTGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtYWtlIGF2YWlsYWJsZSwKKyAgICBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgZXhwbG9pdCBpdHMKKyAgICBDb250cmlidXRpb25zLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBNb2RpZmljYXRpb25zLCBvcgorICAgIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIG9mIHN1Y2ggQ29udHJpYnV0b3IgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlcgorICAgIGZvciBzYWxlLCBoYXZlIG1hZGUsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciBlaXRoZXIgaXRzCisgICAgQ29udHJpYnV0aW9ucyBvciBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbi4KKworMi4yLiBFZmZlY3RpdmUgRGF0ZQorCitUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gYW55IENvbnRyaWJ1dGlvbgorYmVjb21lIGVmZmVjdGl2ZSBmb3IgZWFjaCBDb250cmlidXRpb24gb24gdGhlIGRhdGUgdGhlIENvbnRyaWJ1dG9yIGZpcnN0CitkaXN0cmlidXRlcyBzdWNoIENvbnRyaWJ1dGlvbi4KKworMi4zLiBMaW1pdGF0aW9ucyBvbiBHcmFudCBTY29wZQorCitUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMiBhcmUgdGhlIG9ubHkgcmlnaHRzIGdyYW50ZWQgdW5kZXIKK3RoaXMgTGljZW5zZS4gTm8gYWRkaXRpb25hbCByaWdodHMgb3IgbGljZW5zZXMgd2lsbCBiZSBpbXBsaWVkIGZyb20gdGhlCitkaXN0cmlidXRpb24gb3IgbGljZW5zaW5nIG9mIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLgorTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIGJ5IGEKK0NvbnRyaWJ1dG9yOgorCisoYSkgZm9yIGFueSBjb2RlIHRoYXQgYSBDb250cmlidXRvciBoYXMgcmVtb3ZlZCBmcm9tIENvdmVyZWQgU29mdHdhcmU7CisgICAgb3IKKworKGIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIFlvdXIgYW5kIGFueSBvdGhlciB0aGlyZCBwYXJ0eSdzCisgICAgbW9kaWZpY2F0aW9ucyBvZiBDb3ZlcmVkIFNvZnR3YXJlLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBpdHMKKyAgICBDb250cmlidXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIGl0cyBDb250cmlidXRvcgorICAgIFZlcnNpb24pOyBvcgorCisoYykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZgorICAgIGl0cyBDb250cmlidXRpb25zLgorCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyBpbiB0aGUgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywKK29yIGxvZ29zIG9mIGFueSBDb250cmlidXRvciAoZXhjZXB0IGFzIG1heSBiZSBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGgKK3RoZSBub3RpY2UgcmVxdWlyZW1lbnRzIGluIFNlY3Rpb24gMy40KS4KKworMi40LiBTdWJzZXF1ZW50IExpY2Vuc2VzCisKK05vIENvbnRyaWJ1dG9yIG1ha2VzIGFkZGl0aW9uYWwgZ3JhbnRzIGFzIGEgcmVzdWx0IG9mIFlvdXIgY2hvaWNlIHRvCitkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgKHNlZSBTZWN0aW9uIDEwLjIpIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlIChpZgorcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDMuMykuCisKKzIuNS4gUmVwcmVzZW50YXRpb24KKworRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdGhlIENvbnRyaWJ1dG9yIGJlbGlldmVzIGl0cworQ29udHJpYnV0aW9ucyBhcmUgaXRzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIG9yIGl0IGhhcyBzdWZmaWNpZW50IHJpZ2h0cwordG8gZ3JhbnQgdGhlIHJpZ2h0cyB0byBpdHMgQ29udHJpYnV0aW9ucyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzIuNi4gRmFpciBVc2UKKworVGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byBsaW1pdCBhbnkgcmlnaHRzIFlvdSBoYXZlIHVuZGVyCithcHBsaWNhYmxlIGNvcHlyaWdodCBkb2N0cmluZXMgb2YgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgb3Igb3RoZXIKK2VxdWl2YWxlbnRzLgorCisyLjcuIENvbmRpdGlvbnMKKworU2VjdGlvbnMgMy4xLCAzLjIsIDMuMywgYW5kIDMuNCBhcmUgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZAoraW4gU2VjdGlvbiAyLjEuCisKKzMuIFJlc3BvbnNpYmlsaXRpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworMy4xLiBEaXN0cmlidXRpb24gb2YgU291cmNlIEZvcm0KKworQWxsIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIEZvcm0sIGluY2x1ZGluZyBhbnkKK01vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlLCBtdXN0IGJlIHVuZGVyCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IHRoZSBTb3VyY2UKK0NvZGUgRm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSwgYW5kIGhvdyB0aGV5IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QKK2F0dGVtcHQgdG8gYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUKK0Zvcm0uCisKKzMuMi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgRm9ybQorCitJZiBZb3UgZGlzdHJpYnV0ZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgRm9ybSB0aGVuOgorCisoYSkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZQorICAgIEZvcm0sIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMSwgYW5kIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIG9mCisgICAgdGhlIEV4ZWN1dGFibGUgRm9ybSBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiBzdWNoIFNvdXJjZSBDb2RlCisgICAgRm9ybSBieSByZWFzb25hYmxlIG1lYW5zIGluIGEgdGltZWx5IG1hbm5lciwgYXQgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHRvIHRoZSByZWNpcGllbnQ7IGFuZAorCisoYikgWW91IG1heSBkaXN0cmlidXRlIHN1Y2ggRXhlY3V0YWJsZSBGb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgTGljZW5zZSwgb3Igc3VibGljZW5zZSBpdCB1bmRlciBkaWZmZXJlbnQgdGVybXMsIHByb3ZpZGVkIHRoYXQgdGhlCisgICAgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgRm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyCisgICAgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgRm9ybSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuMy4gRGlzdHJpYnV0aW9uIG9mIGEgTGFyZ2VyIFdvcmsKKworWW91IG1heSBjcmVhdGUgYW5kIGRpc3RyaWJ1dGUgYSBMYXJnZXIgV29yayB1bmRlciB0ZXJtcyBvZiBZb3VyIGNob2ljZSwKK3Byb3ZpZGVkIHRoYXQgWW91IGFsc28gY29tcGx5IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgZm9yCit0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gSWYgdGhlIExhcmdlciBXb3JrIGlzIGEgY29tYmluYXRpb24gb2YgQ292ZXJlZAorU29mdHdhcmUgd2l0aCBhIHdvcmsgZ292ZXJuZWQgYnkgb25lIG9yIG1vcmUgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQgdGhlCitDb3ZlcmVkIFNvZnR3YXJlIGlzIG5vdCBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMsIHRoaXMKK0xpY2Vuc2UgcGVybWl0cyBZb3UgdG8gYWRkaXRpb25hbGx5IGRpc3RyaWJ1dGUgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlCit1bmRlciB0aGUgdGVybXMgb2Ygc3VjaCBTZWNvbmRhcnkgTGljZW5zZShzKSwgc28gdGhhdCB0aGUgcmVjaXBpZW50IG9mCit0aGUgTGFyZ2VyIFdvcmsgbWF5LCBhdCB0aGVpciBvcHRpb24sIGZ1cnRoZXIgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZAorU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGlzIExpY2Vuc2Ugb3Igc3VjaCBTZWNvbmRhcnkKK0xpY2Vuc2UocykuCisKKzMuNC4gTm90aWNlcworCitZb3UgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgdGhlIHN1YnN0YW5jZSBvZiBhbnkgbGljZW5zZSBub3RpY2VzCisoaW5jbHVkaW5nIGNvcHlyaWdodCBub3RpY2VzLCBwYXRlbnQgbm90aWNlcywgZGlzY2xhaW1lcnMgb2Ygd2FycmFudHksCitvciBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkpIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gb2YKK3RoZSBDb3ZlcmVkIFNvZnR3YXJlLCBleGNlcHQgdGhhdCBZb3UgbWF5IGFsdGVyIGFueSBsaWNlbnNlIG5vdGljZXMgdG8KK3RoZSBleHRlbnQgcmVxdWlyZWQgdG8gcmVtZWR5IGtub3duIGZhY3R1YWwgaW5hY2N1cmFjaWVzLgorCiszLjUuIEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXMKKworWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitTb2Z0d2FyZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbgorYmVoYWxmIG9mIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55CitzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHksIG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkKK2xpYWJpbGl0eSBpbmN1cnJlZCBieSBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuIFlvdSBtYXkgaW5jbHVkZSBhZGRpdGlvbmFsCitkaXNjbGFpbWVycyBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5IHNwZWNpZmljIHRvIGFueQoranVyaXNkaWN0aW9uLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgcGxhY2VkIGluIGEgdGV4dCBmaWxlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlCitvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhCityZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBUZXJtaW5hdGlvbgorLS0tLS0tLS0tLS0tLS0KKworNS4xLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBvZiBpdHMgdGVybXMuIEhvd2V2ZXIsIGlmIFlvdSBiZWNvbWUKK2NvbXBsaWFudCwgdGhlbiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyCitDb250cmlidXRvciBhcmUgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCBzdWNoCitDb250cmlidXRvciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5IHRlcm1pbmF0ZXMgWW91ciBncmFudHMsIGFuZCAoYikgb24gYW4KK29uZ29pbmcgYmFzaXMsIGlmIHN1Y2ggQ29udHJpYnV0b3IgZmFpbHMgdG8gbm90aWZ5IFlvdSBvZiB0aGUKK25vbi1jb21wbGlhbmNlIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0byA2MCBkYXlzIGFmdGVyIFlvdSBoYXZlCitjb21lIGJhY2sgaW50byBjb21wbGlhbmNlLiBNb3Jlb3ZlciwgWW91ciBncmFudHMgZnJvbSBhIHBhcnRpY3VsYXIKK0NvbnRyaWJ1dG9yIGFyZSByZWluc3RhdGVkIG9uIGFuIG9uZ29pbmcgYmFzaXMgaWYgc3VjaCBDb250cmlidXRvcgorbm90aWZpZXMgWW91IG9mIHRoZSBub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlCitmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZiBub24tY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZQorZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgWW91IGJlY29tZSBjb21wbGlhbnQgcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgorWW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKzUuMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IGJ5IGFzc2VydGluZyBhIHBhdGVudAoraW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucywKK2NvdW50ZXItY2xhaW1zLCBhbmQgY3Jvc3MtY2xhaW1zKSBhbGxlZ2luZyB0aGF0IGEgQ29udHJpYnV0b3IgVmVyc2lvbgorZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8KK1lvdSBieSBhbnkgYW5kIGFsbCBDb250cmlidXRvcnMgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIFNlY3Rpb24KKzIuMSBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlLgorCis1LjMuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA1LjEgb3IgNS4yIGFib3ZlLCBhbGwKK2VuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaAoraGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgWW91ciBkaXN0cmlidXRvcnMgdW5kZXIgdGhpcyBMaWNlbnNlCitwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgNi4gRGlzY2xhaW1lciBvZiBXYXJyYW50eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQ292ZXJlZCBTb2Z0d2FyZSBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gImFzIGlzIiAgICAgICAqCisqICBiYXNpcywgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCwgaW1wbGllZCwgb3IgICoKKyogIHN0YXR1dG9yeSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHdhcnJhbnRpZXMgdGhhdCB0aGUgICAgICAgKgorKiAgQ292ZXJlZCBTb2Z0d2FyZSBpcyBmcmVlIG9mIGRlZmVjdHMsIG1lcmNoYW50YWJsZSwgZml0IGZvciBhICAgICAgICAqCisqICBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3Igbm9uLWluZnJpbmdpbmcuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgICAgICoKKyogIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIHdpdGggWW91LiAgICAgICAgKgorKiAgU2hvdWxkIGFueSBDb3ZlcmVkIFNvZnR3YXJlIHByb3ZlIGRlZmVjdGl2ZSBpbiBhbnkgcmVzcGVjdCwgWW91ICAgICAqCisqICAobm90IGFueSBDb250cmlidXRvcikgYXNzdW1lIHRoZSBjb3N0IG9mIGFueSBuZWNlc3Nhcnkgc2VydmljaW5nLCAgICoKKyogIHJlcGFpciwgb3IgY29ycmVjdGlvbi4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGNvbnN0aXR1dGVzIGFuICAgKgorKiAgZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyB1c2Ugb2YgYW55IENvdmVyZWQgU29mdHdhcmUgaXMgICAqCisqICBhdXRob3JpemVkIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLiAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICA3LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgdG9ydCAgICAgICoKKyogIChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIGFueSAgICAgICAgICAgKgorKiAgQ29udHJpYnV0b3IsIG9yIGFueW9uZSB3aG8gZGlzdHJpYnV0ZXMgQ292ZXJlZCBTb2Z0d2FyZSBhcyAgICAgICAgICAqCisqICBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byBZb3UgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCAgICAgICAgICoKKyogIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyICAgICAgKgorKiAgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3QgcHJvZml0cywgbG9zcyBvZiAgICAqCisqICBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55ICAgICoKKyogIGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcywgZXZlbiBpZiBzdWNoIHBhcnR5ICAgICAgKgorKiAgc2hhbGwgaGF2ZSBiZWVuIGluZm9ybWVkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuIFRoaXMgICAqCisqICBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciAgICoKKyogIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBzdWNoIHBhcnR5J3MgbmVnbGlnZW5jZSB0byB0aGUgICAgICAgKgorKiAgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uIFNvbWUgICAgICAgICAgICAgICAqCisqICBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgICAgICAgICAgICoKKyogIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgICAgICAgICAgKgorKiAgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis4LiBMaXRpZ2F0aW9uCistLS0tLS0tLS0tLS0tCisKK0FueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZQorY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlIHRoZSBkZWZlbmRhbnQgbWFpbnRhaW5zIGl0cyBwcmluY2lwYWwKK3BsYWNlIG9mIGJ1c2luZXNzIGFuZCBzdWNoIGxpdGlnYXRpb24gc2hhbGwgYmUgZ292ZXJuZWQgYnkgbGF3cyBvZiB0aGF0CitqdXJpc2RpY3Rpb24sIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KK05vdGhpbmcgaW4gdGhpcyBTZWN0aW9uIHNoYWxsIHByZXZlbnQgYSBwYXJ0eSdzIGFiaWxpdHkgdG8gYnJpbmcKK2Nyb3NzLWNsYWltcyBvciBjb3VudGVyLWNsYWltcy4KKworOS4gTWlzY2VsbGFuZW91cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcwordGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlcgorc2hhbGwgbm90IGJlIHVzZWQgdG8gY29uc3RydWUgdGhpcyBMaWNlbnNlIGFnYWluc3QgYSBDb250cmlidXRvci4KKworMTAuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMTAuMS4gTmV3IFZlcnNpb25zCisKK01vemlsbGEgRm91bmRhdGlvbiBpcyB0aGUgbGljZW5zZSBzdGV3YXJkLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbgorMTAuMywgbm8gb25lIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2Ugc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBvcgorcHVibGlzaCBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCitkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworMTAuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucworCitZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uCitvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwKK29yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZQorc3Rld2FyZC4KKworMTAuMy4gTW9kaWZpZWQgVmVyc2lvbnMKKworSWYgeW91IGNyZWF0ZSBzb2Z0d2FyZSBub3QgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgeW91IHdhbnQgdG8KK2NyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBzdWNoIHNvZnR3YXJlLCB5b3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEKK21vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlmIHlvdSByZW5hbWUgdGhlIGxpY2Vuc2UgYW5kIHJlbW92ZQorYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdAorc3VjaCBtb2RpZmllZCBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpLgorCisxMC40LiBEaXN0cmlidXRpbmcgU291cmNlIENvZGUgRm9ybSB0aGF0IGlzIEluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeQorTGljZW5zZXMKKworSWYgWW91IGNob29zZSB0byBkaXN0cmlidXRlIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aAorU2Vjb25kYXJ5IExpY2Vuc2VzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHRoZQorbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEIgb2YgdGhpcyBMaWNlbnNlIG11c3QgYmUgYXR0YWNoZWQuCisKK0V4aGliaXQgQSAtIFNvdXJjZSBDb2RlIEZvcm0gTGljZW5zZSBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyAgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKworSWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIKK2ZpbGUsIHRoZW4gWW91IG1heSBpbmNsdWRlIHRoZSBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIExJQ0VOU0UKK2ZpbGUgaW4gYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgcmVjaXBpZW50IHdvdWxkIGJlIGxpa2VseSB0byBsb29rCitmb3Igc3VjaCBhIG5vdGljZS4KKworWW91IG1heSBhZGQgYWRkaXRpb25hbCBhY2N1cmF0ZSBub3RpY2VzIG9mIGNvcHlyaWdodCBvd25lcnNoaXAuCisKK0V4aGliaXQgQiAtICJJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMiIE5vdGljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzICJJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMiLCBhcworICBkZWZpbmVkIGJ5IHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLCB2LiAyLjAuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1QTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVBMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MGQ2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1QTApAQCAtMCwwICsxLDE5IEBACisKK01pY3Jvc29mdCBQdWJsaWMgTGljZW5zZSAoTXMtUEwpCisgCisKK1RoaXMgbGljZW5zZSBnb3Zlcm5zIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoZSBzb2Z0d2FyZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBsaWNlbnNlLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAKKworRGVmaW5pdGlvbnMKK1RoZSB0ZXJtcyAicmVwcm9kdWNlLCIgInJlcHJvZHVjdGlvbiwiICJkZXJpdmF0aXZlIHdvcmtzLCIgYW5kICJkaXN0cmlidXRpb24iIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy4gQSAiY29udHJpYnV0aW9uIiBpcyB0aGUgb3JpZ2luYWwgc29mdHdhcmUsIG9yIGFueSBhZGRpdGlvbnMgb3IgY2hhbmdlcyB0byB0aGUgc29mdHdhcmUuIEEgImNvbnRyaWJ1dG9yIiBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzIGxpY2Vuc2UuICJMaWNlbnNlZCBwYXRlbnRzIiBhcmUgYSBjb250cmlidXRvcmBzIHBhdGVudCBjbGFpbXMgdGhhdCByZWFkIGRpcmVjdGx5IG9uIGl0cyBjb250cmlidXRpb24uCitHcmFudCBvZiBSaWdodHMKKyhBKSBDb3B5cmlnaHQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIGluIHNlY3Rpb24gMywgZWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlIGl0cyBjb250cmlidXRpb24sIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiBpdHMgY29udHJpYnV0aW9uLCBhbmQgZGlzdHJpYnV0ZSBpdHMgY29udHJpYnV0aW9uIG9yIGFueSBkZXJpdmF0aXZlIHdvcmtzIHRoYXQgeW91IGNyZWF0ZS4KKyhCKSBQYXRlbnQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIGluIHNlY3Rpb24gMywgZWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciBpdHMgbGljZW5zZWQgcGF0ZW50cyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIGl0cyBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUuCitDb25kaXRpb25zIGFuZCBMaW1pdGF0aW9ucworKEEpIE5vIFRyYWRlbWFyayBMaWNlbnNlLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHJpZ2h0cyB0byB1c2UgYW55IGNvbnRyaWJ1dG9yc2AgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcy4gCisoQikgSWYgeW91IGJyaW5nIGEgcGF0ZW50IGNsYWltIGFnYWluc3QgYW55IGNvbnRyaWJ1dG9yIG92ZXIgcGF0ZW50cyB0aGF0IHlvdSBjbGFpbSBhcmUgaW5mcmluZ2VkIGJ5IHRoZSBzb2Z0d2FyZSwgeW91ciBwYXRlbnQgbGljZW5zZSBmcm9tIHN1Y2ggY29udHJpYnV0b3IgdG8gdGhlIHNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseS4gCisoQykgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlLCB5b3UgbXVzdCByZXRhaW4gYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNvZnR3YXJlLiAKKyhEKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gc291cmNlIGNvZGUgZm9ybSwgeW91IG1heSBkbyBzbyBvbmx5IHVuZGVyIHRoaXMgbGljZW5zZSBieSBpbmNsdWRpbmcgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgbGljZW5zZSB3aXRoIHlvdXIgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybSwgeW91IG1heSBvbmx5IGRvIHNvIHVuZGVyIGEgbGljZW5zZSB0aGF0IGNvbXBsaWVzIHdpdGggdGhpcyBsaWNlbnNlLiAKKyhFKSBUaGUgc29mdHdhcmUgaXMgbGljZW5zZWQgImFzLWlzLiIgWW91IGJlYXIgdGhlIHJpc2sgb2YgdXNpbmcgaXQuIFRoZSBjb250cmlidXRvcnMgZ2l2ZSBubyBleHByZXNzIHdhcnJhbnRpZXMsIGd1YXJhbnRlZXMsIG9yIGNvbmRpdGlvbnMuIFlvdSBtYXkgaGF2ZSBhZGRpdGlvbmFsIGNvbnN1bWVyIHJpZ2h0cyB1bmRlciB5b3VyIGxvY2FsIGxhd3Mgd2hpY2ggdGhpcyBsaWNlbnNlIGNhbm5vdCBjaGFuZ2UuIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIHVuZGVyIHlvdXIgbG9jYWwgbGF3cywgdGhlIGNvbnRyaWJ1dG9ycyBleGNsdWRlIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBhbmQgbm9uLWluZnJpbmdlbWVudC4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUkwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1STApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAzYzBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUkwKQEAgLTAsMCArMSwyMyBAQAorCitNaWNyb3NvZnQgUmVjaXByb2NhbCBMaWNlbnNlIChNcy1STCkKKyAKKworVGhpcyBsaWNlbnNlIGdvdmVybnMgdXNlIG9mIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhlIHNvZnR3YXJlLCB5b3UgYWNjZXB0IHRoaXMgbGljZW5zZS4gSWYgeW91IGRvIG5vdCBhY2NlcHQgdGhlIGxpY2Vuc2UsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorIAorCitEZWZpbml0aW9ucworVGhlIHRlcm1zICJyZXByb2R1Y2UsIiAicmVwcm9kdWN0aW9uLCIgImRlcml2YXRpdmUgd29ya3MsIiBhbmQgImRpc3RyaWJ1dGlvbiIgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3LgorQSAiY29udHJpYnV0aW9uIiBpcyB0aGUgb3JpZ2luYWwgc29mdHdhcmUsIG9yIGFueSBhZGRpdGlvbnMgb3IgY2hhbmdlcyB0byB0aGUgc29mdHdhcmUuIAorQSAiY29udHJpYnV0b3IiIGlzIGFueSBwZXJzb24gdGhhdCBkaXN0cmlidXRlcyBpdHMgY29udHJpYnV0aW9uIHVuZGVyIHRoaXMgbGljZW5zZS4gCisiTGljZW5zZWQgcGF0ZW50cyIgYXJlIGEgY29udHJpYnV0b3JgcyBwYXRlbnQgY2xhaW1zIHRoYXQgcmVhZCBkaXJlY3RseSBvbiBpdHMgY29udHJpYnV0aW9uLgorR3JhbnQgb2YgUmlnaHRzCisoQSkgQ29weXJpZ2h0IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBpdHMgY29udHJpYnV0aW9uLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXRzIGNvbnRyaWJ1dGlvbiwgYW5kIGRpc3RyaWJ1dGUgaXRzIGNvbnRyaWJ1dGlvbiBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IHlvdSBjcmVhdGUuCisoQikgUGF0ZW50IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgaXRzIGxpY2Vuc2VkIHBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlLgorQ29uZGl0aW9ucyBhbmQgTGltaXRhdGlvbnMKKyhBKSBSZWNpcHJvY2FsIEdyYW50cy0gRm9yIGFueSBmaWxlIHlvdSBkaXN0cmlidXRlIHRoYXQgY29udGFpbnMgY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSAoaW4gc291cmNlIGNvZGUgb3IgYmluYXJ5IGZvcm1hdCksIHlvdSBtdXN0IHByb3ZpZGUgcmVjaXBpZW50cyB0aGUgc291cmNlIGNvZGUgdG8gdGhhdCBmaWxlIGFsb25nIHdpdGggYSBjb3B5IG9mIHRoaXMgbGljZW5zZSwgd2hpY2ggbGljZW5zZSB3aWxsIGdvdmVybiB0aGF0IGZpbGUuIFlvdSBtYXkgbGljZW5zZSBvdGhlciBmaWxlcyB0aGF0IGFyZSBlbnRpcmVseSB5b3VyIG93biB3b3JrIGFuZCBkbyBub3QgY29udGFpbiBjb2RlIGZyb20gdGhlIHNvZnR3YXJlIHVuZGVyIGFueSB0ZXJtcyB5b3UgY2hvb3NlLiAKKyhCKSBObyBUcmFkZW1hcmsgTGljZW5zZS0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSByaWdodHMgdG8gdXNlIGFueSBjb250cmlidXRvcnNgIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MuIAorKEMpIElmIHlvdSBicmluZyBhIHBhdGVudCBjbGFpbSBhZ2FpbnN0IGFueSBjb250cmlidXRvciBvdmVyIHBhdGVudHMgdGhhdCB5b3UgY2xhaW0gYXJlIGluZnJpbmdlZCBieSB0aGUgc29mdHdhcmUsIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZnJvbSBzdWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuIAorKEQpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSwgeW91IG11c3QgcmV0YWluIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBzb2Z0d2FyZS4gCisoRSkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHlvdSBtYXkgZG8gc28gb25seSB1bmRlciB0aGlzIGxpY2Vuc2UgYnkgaW5jbHVkaW5nIGEgY29tcGxldGUgY29weSBvZiB0aGlzIGxpY2Vuc2Ugd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm0sIHlvdSBtYXkgb25seSBkbyBzbyB1bmRlciBhIGxpY2Vuc2UgdGhhdCBjb21wbGllcyB3aXRoIHRoaXMgbGljZW5zZS4gCisoRikgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkICJhcy1pcy4iIFlvdSBiZWFyIHRoZSByaXNrIG9mIHVzaW5nIGl0LiBUaGUgY29udHJpYnV0b3JzIGdpdmUgbm8gZXhwcmVzcyB3YXJyYW50aWVzLCBndWFyYW50ZWVzLCBvciBjb25kaXRpb25zLiBZb3UgbWF5IGhhdmUgYWRkaXRpb25hbCBjb25zdW1lciByaWdodHMgdW5kZXIgeW91ciBsb2NhbCBsYXdzIHdoaWNoIHRoaXMgbGljZW5zZSBjYW5ub3QgY2hhbmdlLiBUbyB0aGUgZXh0ZW50IHBlcm1pdHRlZCB1bmRlciB5b3VyIGxvY2FsIGxhd3MsIHRoZSBjb250cmlidXRvcnMgZXhjbHVkZSB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01pck9TIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTWlyT1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2NzY4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01pck9TCkBAIC0wLDAgKzEsNTggQEAKKworTWlyT1MgTGljZW5zZQorCisvKi0KKyogQ29weXJpZ2h0ICYjMTY5OyB5ZWFyLCB5ZWFyLCB5ZWFyLCAmIzgyMzA7CisqIEZpcnN0IE0uIExhc3QgPHVzZXJAaG9zdC5kb21haW4+CisqCisqIFByb3ZpZGVkIHRoYXQgdGhlc2UgdGVybXMgYW5kIGRpc2NsYWltZXIgYW5kIGFsbCBjb3B5cmlnaHQgbm90aWNlcworKiBhcmUgcmV0YWluZWQgb3IgcmVwcm9kdWNlZCBpbiBhbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnQsIHBlcm1pc3Npb24KKyogaXMgZ3JhbnRlZCB0byBkZWFsIGluIHRoaXMgd29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgdW4mIzgyMDg7CisqIGxpbWl0ZWQgcmlnaHRzIHRvIHVzZSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgc2VsbCwgbW9kaWZ5LAorKiBtZXJnZSwgZ2l2ZSBhd2F5LCBvciBzdWJsaWNlbmNlLgorKgorKiBUaGlzIHdvcmsgaXMgcHJvdmlkZWQgIkFTIElTIiBhbmQgV0lUSE9VVCBXQVJSQU5UWSBvZiBhbnkga2luZCwgdG8KKyogdGhlIHV0bW9zdCBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBuZWl0aGVyIGV4cHJlc3Mgbm9yCisqIGltcGxpZWQ7IHdpdGhvdXQgbWFsaWNpb3VzIGludGVudCBvciBncm9zcyBuZWdsaWdlbmNlLiBJbiBubyBldmVudAorKiBtYXkgYSBsaWNlbnNvciwgYXV0aG9yIG9yIGNvbnRyaWJ1dG9yIGJlIGhlbGQgbGlhYmxlIGZvciBpbmRpcmVjdCwKKyogZGlyZWN0LCBvdGhlciBkYW1hZ2UsIGxvc3MsIG9yIG90aGVyIGlzc3VlcyBhcmlzaW5nIGluIGFueSB3YXkgb3V0CisqIG9mIGRlYWxpbmcgaW4gdGhlIHdvcmssIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaAorKiBkYW1hZ2Ugb3IgZXhpc3RlbmNlIG9mIGEgZGVmZWN0LCBleGNlcHQgcHJvdmVuIHRoYXQgaXQgcmVzdWx0cyBvdXQKKyogb2Ygc2FpZCBwZXJzb25gcyBpbW1lZGlhdGUgZmF1bHQgd2hlbiB1c2luZyB0aGUgd29yayBhcyBpbnRlbmRlZC4KKyovCisKK0lfTl9TX1RfUl9VX0NfVF9JX09fTl9TXzpfCitUbyBhcHBseSB0aGUgdGVtcGxhdGUoJiMxODU7KSBzcGVjaWZ5IHRoZSB5ZWFycyBvZiBjb3B5cmlnaHQgKHNlcGFyYXRlZCBieQorY29tbWEsIG5vdCBhcyBhIHJhbmdlKSwgdGhlIGxlZ2FsIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycywgYW5kCit0aGUgcmVhbCBuYW1lcyBvZiB0aGUgYXV0aG9ycyBpZiBkaWZmZXJlbnQuIEF2b2lkIGFkZGluZyB0ZXh0LgorCitSX0FfVF9JX09fTl9BX0xfRV86XworVGhpcyBsaWNlbmNlIGlzIGFwdCBmb3IgYW55IGtpbmQgb2Ygd29yayAoc3VjaCBhcyBzb3VyY2UgY29kZSwgZm9udHMsCitkb2N1bWVudGF0aW9uLCBncmFwaGljcywgc291bmQgZXRjLikgYW5kIHRoZSBwcmVmZXJyZWQgdGVybXMgZm9yIHdvcmsKK2FkZGVkIHRvIE1pckJTRC4gSXQgaGFzIGJlZW4gZHJhZnRlZCBhcyB1bml2ZXJzYWxseSB1c2FibGUgZXF1aXZhbGVudAorb2YgdGhlICJoaXN0b3JpYyBwZXJtaXNzaW9uIG5vdGljZSImIzgzMTc7JiMxNzg7JiM4MzE4OyBhZGFwdGVkIHRvIEV1cm9wZW4gbGF3IGJlY2F1c2UKK2luIHNvbWUgKGRyb2l0IGRgYXV0ZXVyKSBjb3VudHJpZXMgYXV0aG9ycyBjYW5ub3QgZGlzY2xhaW0gYWxsIGxpYWJpJiM4MjA4OworbGl0aWVzLiBDb21wbGlhbmNlIHRvIERGU0cmIzgzMTc7JiMxNzk7JiM4MzE4OyAxLjEgaXMgZW5zdXJlZCwgYW5kIEdQTHYyIGNvbXBhdGliaWxpdHkKK2lzIGFzc2VydGVkIHVubGVzcyBhZHZlcnRpc2luZyBjbGF1c2VzIGFyZSB1c2VkLiBUaGUgTWlyT1MgTGljZW5jZSBpcworY2VydGlmaWVkIHRvIGNvbmZvcm0gdG8gT0tEJiM4MzE3OyYjODMwODsmIzgzMTg7IDEuMCBhbmQgT1NEJiM4MzE3OyYjODMwOTsmIzgzMTg7IDEuOSwgYW5kIHF1YWxpZmllcyBhcyBhCitGcmVlIFNvZnR3YXJlJiM4MzE3OyYjODMxMDsmIzgzMTg7IGFuZCBhbHNvIEZyZWUgRG9jdW1lbnRhdGlvbiYjODMxNzsmIzgzMTE7JiM4MzE4OyBsaWNlbmNlIGFuZCBpcyBpbmNsdSYjODIwODsKK2RlZCBpbiBzb21lIHJlbGV2YW50IGxpc3RzJiM4MzE3OyYjODMxMjsmIzgzMTg7JiM4MzE3OyYjODMxMzsmIzgzMTg7JiM4MzE3OyYjMTg1OyYjODMwNDsmIzgzMTg7LgorCitXZSBiZWxpZXZlIHlvdSBhcmUgbm90IGxpYWJsZSBmb3Igd29yayBpbnNlcnRlZCB3aGljaCBpcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IG9mIHRoaXJkIHBhcnRpZXMsIGlmIHlvdSB3ZXJlIG5vdCBhd2FyZSBvZiB0aGUgZmFjdCwgYWN0IGFwJiM4MjA4OworcHJvcHJpYXRlbHkgYXMgc29vbiBhcyB5b3UgYmVjb21lIGF3YXJlIG9mIHRoYXQgcHJvYmxlbSwgc2VlayBhbiBhbWkmIzgyMDg7CitjYWJsZSBzb2x1dGlvbiBmb3IgYWxsIHBhcnRpZXMsIGFuZCBuZXZlciBrbm93aW5nbHkgZGlzdHJpYnV0ZSBhIHdvcmsKK3dpdGhvdXQgYmVpbmcgYXV0aG9yaXNlZCB0byBkbyBzbyBieSBpdHMgbGljZW5zb3JzLgorCitSX0VfRl9FX1JfRV9OX0NfRV9TXzpfCismIzkzMTI7IGFsc28gYXQgaHR0cDovL21pcmJzZC5kZS9NaXJPUy1MaWNlbmNlCismIzkzMTM7IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvaGlzdG9yaWNhbC5waHAKKyYjOTMxNDsgaHR0cDovL3d3dy5kZWJpYW4ub3JnL3NvY2lhbF9jb250cmFjdCNndWlkZWxpbmVzCismIzkzMTU7IGh0dHA6Ly93d3cub3BlbmRlZmluaXRpb24ub3JnLzEuMAorJiM5MzE2OyBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2RvY3Mvb3NkCismIzkzMTc7IGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2ZyZWUtc3cuaHRtbAorJiM5MzE4OyBodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLWRvYy5odG1sCismIzkzMTk7IGh0dHA6Ly93d3cuaWZyb3NzLmRlL2lmcm9zc19odG1sL2xpemVuemNlbnRlci5odG1sCismIzkzMjA7IGh0dHA6Ly93d3cub3BlbmRlZmluaXRpb24ub3JnL2xpY2Vuc2VzCismIzkzMjE7IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXJvcy5odG1sCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01vdG9zb3RvIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTW90b3NvdG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1MjRmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01vdG9zb3RvCkBAIC0wLDAgKzEsNDIyIEBACisKK01PVE9TT1RPIE9QRU4gU09VUkNFIExJQ0VOU0UgLSBWZXJzaW9uIDAuOS4xCitUaGlzIE1vdG9zb3RvIE9wZW4gU291cmNlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gIkNvbW11bml0eQorUG9ydGFsIFNlcnZlciIgYW5kIHJlbGF0ZWQgc29mdHdhcmUgcHJvZHVjdHMgYXMgd2VsbCBhcyBhbnkgdXBkYXRlc29yCittYWludGVuYW5jZSByZWxlYXNlcyBvZiB0aGF0IHNvZnR3YXJlICgiTW90b3NvdG8gUHJvZHVjdHMiKSB0aGF0IGFyZQorZGlzdHJpYnV0ZWQgYnkgTW90b3NvdG8uQ29tIEIuVi4gKCJMaWNlbnNvciIpLiBBbnkgTW90b3NvdG8KK1Byb2R1Y3QgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIGlzIGEgIkxpY2Vuc2VkIFByb2R1Y3QuIiBMaWNlbnNlZAorUHJvZHVjdCwgaW4gaXRzIGVudGlyZXR5LCBpcyBwcm90ZWN0ZWQgYnkgRHV0Y2ggY29weXJpZ2h0IGxhdy4KK1RoaXMKK0xpY2Vuc2UgaWRlbnRpZmllcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggeW91IG1heSB1c2UsIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5CitMaWNlbnNlZCBQcm9kdWN0IGFuZCBoYXMgYmVlbiBzdWJtaXR0ZWQgdG8gdGhlIE9wZW4gU29mdHdhcmUgSW5pdGlhdGl2ZSAoT1NJKQorZm9yIGFwcHJvdmFsLgorCitQcmVhbWJsZQorCitUaGlzIFByZWFtYmxlIGlzIGludGVuZGVkIHRvIGRlc2NyaWJlLCBpbiBwbGFpbiBFbmdsaXNoLCB0aGUgbmF0dXJlIGFuZCBzY29wZSBvZgordGhpcyBMaWNlbnNlLiBIb3dldmVyLCB0aGlzIFByZWFtYmxlIGlzIG5vdCBhIHBhcnQgb2YgdGhpcyBsaWNlbnNlLiBUaGUgbGVnYWwKK2VmZmVjdCBvZiB0aGlzIExpY2Vuc2UgaXMgZGVwZW5kZW50IG9ubHkgdXBvbiB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgYW5kIG5vdAordGhpcyBQcmVhbWJsZS4KK1RoaXMgTGljZW5zZSBjb21wbGllcyB3aXRoIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uIGFuZCBoYXMgYmVlbiBhcHByb3ZlZCBieQorT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4gU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBiZSBtYXJrZWQKK2FzICJPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIFNvZnR3YXJlLiIKKworVGhpcyBMaWNlbnNlIHByb3ZpZGVzIHRoYXQ6CisKKzEuIFlvdSBtYXkgdXNlLCBzZWxsIG9yIGdpdmUgYXdheSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYWxvbmUgb3IgYXMgYQorY29tcG9uZW50IG9mIGFuIGFnZ3JlZ2F0ZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gY29udGFpbmluZworcHJvZ3JhbXMgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2VzLiBObyByb3lhbHR5IG9yIG90aGVyIGZlZSBpcworcmVxdWlyZWQuCisKKzIuIEJvdGggU291cmNlIENvZGUgYW5kIGV4ZWN1dGFibGUgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsCitpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHByZXZpb3VzIENvbnRyaWJ1dG9ycywgYXJlCithdmFpbGFibGUgZm9yIHlvdXIgdXNlLiAoVGhlIHRlcm1zICJMaWNlbnNlZCBQcm9kdWN0LCIgIk1vZGlmaWNhdGlvbnMsIgorIkNvbnRyaWJ1dG9ycyIgYW5kICJTb3VyY2UgQ29kZSIgYXJlIGRlZmluZWQgaW4gdGhlIExpY2Vuc2UuKQorCiszLiBZb3UgYXJlIGFsbG93ZWQgdG8gbWFrZSBNb2RpZmljYXRpb25zIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbmQgeW91CitjYW4gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgZnJvbSBpdC4gKFRoZSB0ZXJtICJEZXJpdmF0aXZlCitXb3JrcyIgaXMgZGVmaW5lZCBpbiB0aGUgTGljZW5zZS4pCisKKzQuIEJ5IGFjY2VwdGluZyB0aGUgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UsCit5b3UgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgbWFrZSB0byB0aGUgTGljZW5zZWQKK1Byb2R1Y3QgYW5kIHRoZW4gZGlzdHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcworTGljZW5zZS4gSW4gcGFydGljdWxhciwgeW91IG11c3QgbWFrZSB0aGUgU291cmNlIENvZGUgb2YgeW91cgorTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gb3RoZXJzLgorCis1LiBZb3UgbWF5IHVzZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBmb3IgYW55IHB1cnBvc2UsIGJ1dCB0aGUgTGljZW5zb3IgaXMKK25vdCBwcm92aWRpbmcgeW91IGFueSB3YXJyYW50eSB3aGF0c29ldmVyLCBub3IgaXMgdGhlIExpY2Vuc29yCithY2NlcHRpbmcgYW55IGxpYWJpbGl0eSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zZWQgUHJvZHVjdCBkb2VzbmB0Cit3b3JrIHByb3Blcmx5IG9yIGNhdXNlcyB5b3UgYW55IGluanVyeSBvciBkYW1hZ2VzLgorCis2LiBJZiB5b3Ugc3VibGljZW5zZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBEZXJpdmF0aXZlIFdvcmtzLCB5b3UgbWF5CitjaGFyZ2UgZmVlcyBmb3Igd2FycmFudHkgb3Igc3VwcG9ydCwgb3IgZm9yIGFjY2VwdGluZyBpbmRlbW5pdHkKK29yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byB5b3VyIGN1c3RvbWVycy4gWW91IGNhbm5vdCBjaGFyZ2UgZm9yIHRoZQorU291cmNlIENvZGUuCisKKzcuIElmIHlvdSBhc3NlcnQgYW55IHBhdGVudCBjbGFpbXMgYWdhaW5zdCB0aGUgTGljZW5zb3IgcmVsYXRpbmcgdG8gdGhlCitMaWNlbnNlZCBQcm9kdWN0LCBvciBpZiB5b3UgYnJlYWNoIGFueSB0ZXJtcyBvZiB0aGUgTGljZW5zZSwgeW91cgorcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoaXMgTGljZW5zZSBhdXRvbWF0aWNhbGx5Cit0ZXJtaW5hdGUuCisKK1lvdSBtYXkgdXNlIHRoaXMgTGljZW5zZSB0byBkaXN0cmlidXRlIHlvdXIgb3duIERlcml2YXRpdmUgV29ya3MsIGluIHdoaWNoCitjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSB3aWxsIGFwcGx5IHRvIHlvdXIgRGVyaXZhdGl2ZQorV29ya3MganVzdCBhcyB0aGV5IGRvIHRvIHRoZSBvcmlnaW5hbCBMaWNlbnNlZCBQcm9kdWN0LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGRpc3RyaWJ1dGUgeW91ciBEZXJpdmF0aXZlIFdvcmtzIHVuZGVyIGFueSBvdGhlcgorT1NJLWFwcHJvdmVkIE9wZW4gU291cmNlIGxpY2Vuc2UsIG9yIHVuZGVyIGEgcHJvcHJpZXRhcnkgbGljZW5zZSBvZgoreW91ciBjaG9pY2UuIElmIHlvdSB1c2UgYW55IGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHlvdSBtdXN0Citjb250aW51ZSB0byBmdWxmaWxsIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgdGhlCitwcm92aXNpb25zIHJlbGF0aW5nIHRvIHB1Ymxpc2hpbmcgdGhlIFNvdXJjZSBDb2RlKSBmb3IgdGhvc2UgcG9ydGlvbnMgb2YgeW91cgorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGNvbnNpc3Qgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZwordGhlIGZpbGVzIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucy4KKworTmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBtYXkgYmUgcHVibGlzaGVkIGZyb20gdGltZSB0byB0aW1lLiBZb3UgbWF5CitjaG9vc2UgdG8gY29udGludWUgdG8gdXNlIHRoZSBsaWNlbnNlIHRlcm1zIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUKK0xpY2Vuc2Ugb3IgdGhvc2UgZnJvbSB0aGUgbmV3IHZlcnNpb24uIEhvd2V2ZXIsIG9ubHkgdGhlIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQKK3RvIGNoYW5nZSB0aGUgTGljZW5zZSB0ZXJtcyBhcyB0aGV5IGFwcGx5IHRvIHRoZSBMaWNlbnNlZAorUHJvZHVjdC4KK1RoaXMgTGljZW5zZSByZWxpZXMgb24gcHJlY2lzZSBkZWZpbml0aW9ucyBmb3IgY2VydGFpbiB0ZXJtcy4gVGhvc2UgdGVybXMgYXJlCitkZWZpbmVkIHdoZW4gdGhleSBhcmUgZmlyc3QgdXNlZCwgYW5kIHRoZSBkZWZpbml0aW9ucyBhcmUgcmVwZWF0ZWQgZm9yCit5b3VyIGNvbnZlbmllbmNlIGluIGEgR2xvc3NhcnkgYXQgdGhlIGVuZCBvZiB0aGUgTGljZW5zZS4KKworTGljZW5zZSBUZXJtcworCisxLiBHcmFudCBvZiBMaWNlbnNlIEZyb20gTGljZW5zb3IuCisKK0xpY2Vuc29yCitoZXJlYnkgZ3JhbnRzIHlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvCit0aGlyZAorcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYS4gVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mIChpbmNsdWRpbmcKK01vZGlmaWNhdGlvbnMgYXMgaGVyZWluYWZ0ZXIgZGVmaW5lZCksIGluIGJvdGggU291cmNlIENvZGUgb3IgYXMKK2FuIGV4ZWN1dGFibGUgcHJvZ3JhbS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkCitmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nCithbGwgbW9kdWxlcyBjb250YWluZWQgdGhlcmVpbiwgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgb3IgYSBsaXN0IG9mCitkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCB0aGUgU291cmNlIENvZGUgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0LgorCitiLiBDcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgdW5kZXIgRHV0Y2gKK2NvcHlyaWdodCBsYXcpIG9mIExpY2Vuc2VkIFByb2R1Y3QgYnkgYWRkaW5nIHRvIG9yIGRlbGV0aW5nCitmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIHNhaWQgTGljZW5zZWQgUHJvZHVjdC4KKworYy4gVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkCitieSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLAorYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiwKK2J1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeSB0bworZW5hYmxlIHlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vcgorb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mIG9yCitEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKzIuIEdyYW50IG9mIExpY2Vuc2UgdG8gTW9kaWZpY2F0aW9ucyBGcm9tCitDb250cmlidXRvci4KKworIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbnMgdG8gb3IKK2RlbGV0aW9ucyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3IKK3N0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIGNvbnRhaW5pbmcgTGljZW5zZWQgUHJvZHVjdCwgb3IgKGlpKSBhbnkgbmV3IGZpbGUKK3RoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgTGljZW5zZWQgUHJvZHVjdC4gSGVyZWluYWZ0ZXIgaW4gdGhpcworTGljZW5zZSwgdGhlIHRlcm0gIkxpY2Vuc2VkIFByb2R1Y3QiIHNoYWxsIGluY2x1ZGUgYWxsIHByZXZpb3VzCitNb2RpZmljYXRpb25zIHRoYXQgeW91IHJlY2VpdmUgZnJvbSBhbnkgQ29udHJpYnV0b3IuIEJ5CithcHBsaWNhdGlvbiBvZiB0aGUgcHJvdmlzaW9ucyBpbiBTZWN0aW9uIDQoYSkgYmVsb3csIGVhY2ggcGVyc29uIG9yCitlbnRpdHkgd2hvIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mLCBhbmQgZGlzdHJpYnV0ZWQsCithIE1vZGlmaWNhdGlvbiAoYSAiQ29udHJpYnV0b3IiKSBoZXJlYnkgZ3JhbnRzIHlvdSBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYS4gVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgYW55IE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIG9yCitwb3J0aW9ucyB0aGVyZW9mLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwKK2VpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzIG9yIGFzIHBhcnQgb2YgRGVyaXZhdGl2ZQorV29ya3MuCisKK2IuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieQorQ29udHJpYnV0b3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwKK2FuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dAorc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8KK2VuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIE1vZGlmaWNhdGlvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCiszLiBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4KKworTm90aGluZyBpbgordGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsCitwYXRlbnRzLAordHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZCBzZXBhcmF0ZSBmcm9tIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBmb3IgY29kZSB0aGF0IHlvdSBkZWxldGUgZnJvbQordGhlIExpY2Vuc2VkIFByb2R1Y3QsIG9yIGZvciBjb21iaW5hdGlvbnMgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlCit0cmFkZW1hcmtzIG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlCitpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK2ludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudAordGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhCityaWdodCB0byBsaWNlbnNlLgorCis0LiBZb3VyIE9ibGlnYXRpb25zIFJlZ2FyZGluZyBEaXN0cmlidXRpb24uCisKK2EuIEFwcGxpY2F0aW9uIG9mIFRoaXMgTGljZW5zZSB0byBZb3VyCitNb2RpZmljYXRpb25zLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgeW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0LCB5b3UKK2hlcmVieSBhZ3JlZSB0aGF0IGFueSBNb2RpZmljYXRpb25zIHRoYXQgeW91IGNyZWF0ZSBvciB0byB3aGljaAoreW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaCB5b3UgZGlzdHJpYnV0ZSwgYXJlIGdvdmVybmVkIGJ5IHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBTZWN0aW9uIDIuCitBbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUKK21heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYQorZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNy4gWW91IG11c3QKK2luY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlCitNb2RpZmljYXRpb25zIHlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZSBhbnkKK3Rlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSBvciBleGVjdXRhYmxlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IG9yIE1vZGlmaWNhdGlvbnMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgYXBwbGljYWJsZQordmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuCitIb3dldmVyLCB5b3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUKK2FkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZSkuCisKK2IuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gWW91IG11c3QgbWFrZQorYXZhaWxhYmxlLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgU291cmNlIENvZGUgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IGFuZCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBkaXN0cmlidXRlLCBlaXRoZXIgb24gdGhlCitzYW1lIG1lZGlhIGFzIHlvdSBkaXN0cmlidXRlIGFueSBleGVjdXRhYmxlIG9yIG90aGVyIGZvcm0KK29mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciB2aWEgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluCit0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YSAoYW4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIpLiBUaGUKK1NvdXJjZSBDb2RlIGZvciBhbnkgdmVyc2lvbiBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yCitNb2RpZmljYXRpb25zIHRoYXQgeW91IGRpc3RyaWJ1dGUgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdAorbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUKK2F2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24KK29mIHNhaWQgTGljZW5zZWQgUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIGhhcyBiZWVuIG1hZGUKK2F2YWlsYWJsZS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUKK3ZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KK01lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKK2MuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFueQorTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaAoreW91IGRpc3RyaWJ1dGUsIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBhZGRpdGlvbnMsCitjaGFuZ2VzIG9yIGRlbGV0aW9ucyB5b3UgbWFkZSB0byBjcmVhdGUgb3IgY29udHJpYnV0ZSB0byB0aG9zZQorTW9kaWZpY2F0aW9ucywgYW5kIHRoZSBkYXRlcyBvZiBhbnkgc3VjaCBhZGRpdGlvbnMsIGNoYW5nZXMgb3IKK2RlbGV0aW9ucy4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUKK01vZGlmaWNhdGlvbnMgYXJlIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gdGhlCitMaWNlbnNlZCBQcm9kdWN0IGFuZCBpbmNsdWRlIHRoZSBuYW1lcyBvZiB0aGUgTGljZW5zb3IgYW5kIGFueQorQ29udHJpYnV0b3IgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgaW4gKGkpIHRoZSBTb3VyY2UgQ29kZSBhbmQKKyhpaSkgaW4gYW55IG5vdGljZSBkaXNwbGF5ZWQgYnkgYSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB5b3UgZGlzdHJpYnV0ZSBvciBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggeW91CitkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4KK1lvdSBtYXkgbm90IG1vZGlmeSBvciBkZWxldGUgYW55IHByZWV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGluCit0aGUgTGljZW5zZWQgUHJvZHVjdC4KKworZC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKK2kuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgeW91IGhhdmUKK2tub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB0byBhIHRoaXJkIHBhcnR5YHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzCityZXF1aXJlZAordG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSwgeW91IG11c3QKK2luY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIkxFR0FMIiB0aGF0IGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlCitjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdword2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIHlvdSBtYWtlCithbnkgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24KKzQoYiksIHlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcworeW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIKK3N0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yCituZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobworcmVjZWl2ZWQgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZnJvbSB5b3UgdGhhdCBuZXcga25vd2xlZGdlCitoYXMgYmVlbiBvYnRhaW5lZC4KKworaWkuIENvbnRyaWJ1dG9yIEFQSXMuIElmIHlvdXIKK01vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKCJBUEkiKSBhbmQgeW91IGhhdmUKK2tub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgdGhhdCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkKK3RvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMKK2luZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCitpaWkuIFJlcHJlc2VudGF0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0LAorZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byA0KGQpKGkpIGFib3ZlLCB5b3UgYmVsaWV2ZSB0aGF0IGFueQorTW9kaWZpY2F0aW9ucyB5b3UgZGlzdHJpYnV0ZSBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbnMgYW5kCit0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMKK2NvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworZS4gUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMKK0xpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24geW91IHByb3ZpZGUgYWxvbmcgd2l0aCB0aGUgU291cmNlIENvZGUgb2YgYW55CitNb2RpZmljYXRpb25zIHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaCB5b3UKK2Rpc3RyaWJ1dGUsIHdoZXJldmVyIHlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMKK3JlbGF0aW5nIHRvIExpY2Vuc2VkIFByb2R1Y3QuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlCitjb250YWluZWQgaW4gRXhoaWJpdCBBICh0aGUgIk5vdGljZSIpIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlIG9mIGFueSBjb3B5IHlvdSBkaXN0cmlidXRlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LiBJZiB5b3UKK2NyZWF0ZWQgYSBNb2RpZmljYXRpb24sIHlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhCitDb250cmlidXRvciB0byB0aGUgTm90aWNlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSBOb3RpY2UKK2luIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuCit5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggTm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudAorZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhCitub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlCityZWNpcGllbnRzIG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhvd2V2ZXIsIHlvdSBtYXkgZG8gc28gb25seSBvbgoreW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgTGljZW5zb3Igb3IgYW55CitDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgeW91CithbG9uZSwgYW5kIHlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBMaWNlbnNvciBvciBzdWNoCitDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgdGVybXMgeW91IG9mZmVyLgorCitmLiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gWW91IG1heQorZGlzdHJpYnV0ZSBMaWNlbnNlZCBQcm9kdWN0IGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSB1bmRlciBhIGxpY2Vuc2Ugb2YKK3lvdXIgY2hvaWNlIHRoYXQgbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlCitwcm92aWRlZCAoaSkgeW91IGhhdmUgc2F0aXNmaWVkIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbnMKKzQoYSkgdGhyb3VnaCA0KGUpIGZvciB0aGF0IGRpc3RyaWJ1dGlvbiwgKGlpKSB5b3UgaW5jbHVkZSBhCitjb25zcGljdW91cyBub3RpY2UgaW4gdGhlIGV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uCithbmQgY29sbGF0ZXJhbCBtYXRlcmlhbHMgc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZWQgUHJvZHVjdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgeW91IGhhdmUKK2Z1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiA0KGIpLCAoaWlpKSB5b3UgcmV0YWluIGFsbAorZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFuZCAoaXYpIHlvdQorbWFrZSBpdCBjbGVhciB0aGF0IGFueSB0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUKK29mZmVyZWQgYnkgeW91IGFsb25lLCBub3QgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UKK2hlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIExpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvcgorZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhCityZXN1bHQgb2YgYW55IHRlcm1zIHlvdSBvZmZlci4KKworZy4gRGlzdHJpYnV0aW9uIG9mIERlcml2YXRpdmUgV29ya3MuIFlvdSBtYXkKK2NyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIChlLmcuLCBjb21iaW5hdGlvbnMgb2Ygc29tZSBvciBhbGwgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IHdpdGggb3RoZXIgY29kZSkgYW5kIGRpc3RyaWJ1dGUgdGhlIERlcml2YXRpdmUgV29ya3MgYXMKK3Byb2R1Y3RzIHVuZGVyIGFueSBvdGhlciBsaWNlbnNlIHlvdSBzZWxlY3QsIHdpdGggdGhlCitwcm92aXNvIHRoYXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IKK3Rob3NlIHBvcnRpb25zIG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgY29uc2lzdCBvZiB0aGUKK0xpY2Vuc2VkIFByb2R1Y3Qgb3IgYW55IE1vZGlmaWNhdGlvbnMgdGhlcmV0by4KKworNS4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvcgorUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgeW91IHRvIGNvbXBseSB3aXRoIGFueSBvZgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoCityZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbAorb3JkZXIsIG9yIHJlZ3VsYXRpb24sIHRoZW4geW91IG11c3QgKGkpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgKGlpKSBjaXRlIHRoZSBzdGF0dXRlIG9yCityZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nIHRvIHRoZSBMaWNlbnNlLCBhbmQKKyhpaWkpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChkKSwKK2FuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8KK3RoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2gKK2Rlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeQorc2tpbGwgYXQgY29tcHV0ZXIgcHJvZ3JhbW1pbmcgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis2LiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZQorYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIGhhcyBhdHRhY2hlZCB0aGUgTm90aWNlIGluCitFeGhpYml0IEEsCit3aGljaCBpcyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHRoaXMgcmVmZXJlbmNlLgorCis3LiBWZXJzaW9ucyBvZiBUaGlzIExpY2Vuc2UuCisKK2EuIFZlcnNpb24uIFRoZSBNb3Rvc290byBPcGVuIFNvdXJjZSBMaWNlbnNlIGlzCitkZXJpdmVkIGZyb20gdGhlIEphYmJlciBPcGVuIFNvdXJjZSBMaWNlbnNlLiBBbGwgY2hhbmdlcyBhcmUgcmVsYXRlZCB0bworYXBwbGljYWJsZSBsYXcgYW5kIHRoZSBsb2NhdGlvbiBvZiBjb3VydC4KKworYi4gTmV3IFZlcnNpb25zLiBMaWNlbnNvciBtYXkgcHVibGlzaCBmcm9tIHRpbWUgdG8KK3RpbWUgcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCitjLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiBPbmNlIExpY2Vuc2VkIFByb2R1Y3QKK2hhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgeW91IG1heSBhbHdheXMKK2NvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkKK3N1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTGljZW5zb3IuIE5vIG9uZQorb3RoZXIgdGhhbiBMaWMgZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zCithcHBsaWNhYmxlIHRvIExpY2Vuc2VkIFByb2R1Y3QgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKK2QuIERlcml2YXRpdmUgV29ya3Mgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UKK2NyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgd2hpY2ggeW91IG1heSBkbyBvbmx5IGluCitvcmRlciB0bworYXBwbHkgaXQgdG8gc29mdHdhcmUgdGhhdCBpcyBub3QgYWxyZWFkeSBhIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIKK3RoaXMgTGljZW5zZSwgeW91IG11c3QgcmVuYW1lIHlvdXIgbGljZW5zZSBzbyB0aGF0IGl0IGlzIG5vdAorY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGlzIExpY2Vuc2UsIGFuZCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdAoreW91ciBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLiBJbgorc28gbmFtaW5nIHlvdXIgbGljZW5zZSwgeW91IG1heSBub3QgdXNlIGFueSB0cmFkZW1hcmsgb2YgTGljZW5zb3IKK29yIGFueSBDb250cmlidXRvci4KKworOC4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworTElDRU5TRUQgUFJPRFVDVCBJUworUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMKK1RIQVQgVEhFIExJQ0VOU0VEIFBST0RVQ1QgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIE9SCitOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQ0VOU0VEIFBST0RVQ1QgSVMKK1dJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgUFJPRFVDVCBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVQorKEFORCBOT1QgVEhFIExJQ0VOU09SIE9SCitBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSCitPUiBDT1JSRUNUSU9OLiBUSElTCitESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8KK1VTRSBPRiBMSUNFTlNFRAorUFJPRFVDVCBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis5LiBUZXJtaW5hdGlvbi4KKworYS4gQXV0b21hdGljIFRlcm1pbmF0aW9uIFVwb24gQnJlYWNoLiBUaGlzCitsaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgeW91CitmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaAord2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4KK0FsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB0aGF0IGFyZSBwcm9wZXJseSBncmFudGVkCitzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIGxpY2Vuc2UuIFByb3Zpc2lvbnMKK3RoYXQsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUKK3Rlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwgc2hhbGwgc3Vydml2ZS4KKworYi4gVGVybWluYXRpb24gVXBvbiBBc3NlcnRpb24gb2YgUGF0ZW50CitJbmZyaW5nZW1lbnQuIElmIHlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudAoraW5mcmluZ2VtZW50IGNsYWltCisoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgTGljZW5zb3Igb3IgYQorQ29udHJpYnV0b3IgKExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSB5b3UgZmlsZQorc3VjaCBhbiBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gaGVyZWluIGFzICJSZXNwb25kZW50IikgYWxsZWdpbmcKK3RoYXQgTGljZW5zZWQgUHJvZHVjdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkKK3BhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFJlc3BvbmRlbnQgdG8geW91Cit1bmRlciBTZWN0aW9ucyAxIG9yIDIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZQorcHJvc3BlY3RpdmVseSB1cG9uIHNpeHR5ICg2MCkgZGF5cyBub3RpY2UgZnJvbSBSZXNwb25kZW50ICh0aGUKKyJOb3RpY2UgUGVyaW9kIikgdW5sZXNzIHdpdGhpbiB0aGF0IE5vdGljZSBQZXJpb2QgeW91CitlaXRoZXIgYWdyZWUgaW4gd3JpdGluZyAoaSkgdG8gcGF5IFJlc3BvbmRlbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUKK3JlYXNvbmFibHkgcm95YWx0eSBmb3IgeW91ciBwYXN0IG9yIGZ1dHVyZSB1c2Ugb2YgTGljZW5zZWQKK1Byb2R1Y3QgbWFkZSBieSBzdWNoIFJlc3BvbmRlbnQsIG9yIChpaSkgd2l0aGRyYXcgeW91ciBsaXRpZ2F0aW9uCitjbGFpbSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQgUHJvZHVjdCBhZ2FpbnN0IHN1Y2gKK1Jlc3BvbmRlbnQuIElmIHdpdGhpbiBzYWlkIE5vdGljZSBQZXJpb2QgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kCitwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4KK3dyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwKK3RoZSByaWdodHMgZ3JhbnRlZCBieSBMaWNlbnNvciB0byB5b3UgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMgorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc2FpZCBOb3RpY2UKK1BlcmlvZC4KKworYy4gUmVhc29uYWJsZSBWYWx1ZSBvZiBUaGlzIExpY2Vuc2UuIElmIHlvdSBhc3NlcnQgYQorcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFJlc3BvbmRlbnQgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZAorUHJvZHVjdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2gKK2NsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8KK3RoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUKK3JlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZCBSZXNwb25kZW50IHVuZGVyCitTZWN0aW9ucyAxIGFuZCAyIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUKK2Ftb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCitkLiBObyBSZXRyb2FjdGl2ZSBFZmZlY3Qgb2YgVGVybWluYXRpb24uIEluIHRoZQorZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOShhKSBvciA5KGIpIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZQorYWdyZWVtZW50cyAoZXhjbHVkaW5nIGxpY2Vuc2VzIHRvIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZSBycykKK3RoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSB5b3Ugb3IgYW55IGRpc3RyaWJ1dG9yCitoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZQordGVybWluYXRpb24uCisKKzEwLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworVU5ERVIgTk8KK0NJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgTElDRU5TT1IsIEFOWQorQ09OVFJJQlVUT1IsIE9SIEFOWQorRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgUFJPRFVDVCwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsCitCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTgorRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorQ0hBUkFDVEVSIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIKK0ZBSUxVUkUgT1IKK01BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGCitTVUNIIFBBUlRZIFNIQUxMCitIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCitMSUFCSUxJVFkgU0hBTEwgTk9UCitBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNICitQQVJUWQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NdWx0aWNzIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTXVsdGljcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg3NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTXVsdGljcwpAQCAtMCwwICsxLDQwIEBACisKK011bHRpY3MgTGljZW5zZQorCitIaXN0b3JpY2FsIEJhY2tncm91bmQKKworVGhpcyBlZGl0aW9uIG9mIHRoZSBNdWx0aWNzIHNvZnR3YXJlIG1hdGVyaWFscyBhbmQgZG9jdW1lbnRhdGlvbiBpcworcHJvdmlkZWQgYW5kIGRvbmF0ZWQgdG8gTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSBieSBHcm91cAorQlVMTCBpbmNsdWRpbmcgQlVMTCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4gYXMgYSBjb250cmlidXRpb24gdG8KK2NvbXB1dGVyIHNjaWVuY2Uga25vd2xlZGdlLiBUaGlzIGRvbmF0aW9uIGlzIG1hZGUgYWxzbyB0byBnaXZlIGV2aWRlbmNlCitvZiB0aGUgY29tbW9uIGNvbnRyaWJ1dGlvbnMgb2YgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwKK0JlbGwgTGFib3JhdG9yaWVzLCBHZW5lcmFsIEVsZWN0cmljLCBIb25leXdlbGwgSW5mb3JtYXRpb24gU3lzdGVtcworSW5jLiwgSG9uZXl3ZWxsIEJVTEwgSW5jLiwgR3JvdXBlIEJVTEwgYW5kIEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcworSW5jLiB0byB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBvcGVyYXRpbmcgc3lzdGVtLiBNdWx0aWNzIGRldmVsb3BtZW50Cit3YXMgaW5pdGlhdGVkIGJ5IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgUHJvamVjdCBNQUMKKygxOTYzLTE5NzApLCByZW5hbWVkIHRoZSBNSVQgTGFib3JhdG9yeSBmb3IgQ29tcHV0ZXIgU2NpZW5jZSBhbmQKK0FydGlmaWNpYWwgSW50ZWxsaWdlbmNlIGluIHRoZSBtaWQgMTk3MHMsIHVuZGVyIHRoZSBsZWFkZXJzaGlwIG9mCitQcm9mZXNzb3IgRmVybmFuZG8gSm9zZSBDb3JiYXRvLiBVc2VycyBjb25zaWRlciB0aGF0IE11bHRpY3MgcHJvdmlkZWQgdGhlCitiZXN0IHNvZnR3YXJlIGFyY2hpdGVjdHVyZSBmb3IgbWFuYWdpbmcgY29tcHV0ZXIgaGFyZHdhcmUgcHJvcGVybHkgYW5kCitmb3IgZXhlY3V0aW5nIHByb2dyYW1zLiBNYW55IHN1YnNlcXVlbnQgb3BlcmF0aW5nIHN5c3RlbXMgaW5jb3Jwb3JhdGVkCitNdWx0aWNzIHByaW5jaXBsZXMuIE11bHRpY3Mgd2FzIGRpc3RyaWJ1dGVkIGluIDE5NzUgdG8gMjAwMCBieSBHcm91cAorQnVsbCBpbiBFdXJvcGUgLCBhbmQgaW4gdGhlIFUuUy4gYnkgQnVsbCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4sIGFzCitzdWNjZXNzb3IgaW4gaW50ZXJlc3QgYnkgY2hhbmdlIGluIG5hbWUgb25seSB0byBIb25leXdlbGwgQnVsbCBJbmMuIGFuZAorSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLiAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZXNlIHByb2dyYW1zIGFuZCB0aGVpcgorZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLHByb3ZpZGVkCit0aGF0IHRoZSBiZWxvdyBjb3B5cmlnaHQgbm90aWNlIGFuZCBoaXN0b3JpY2FsIGJhY2tncm91bmQgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIGhpc3RvcmljYWwgYmFja2dyb3VuZCBhbmQKK3RoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKK3RoZSBuYW1lcyBvZiBNSVQsIEhJUywgQlVMTCBvciBCVUxMIEhOIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCitwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHByb2dyYW1zIHdpdGhvdXQgc3BlY2lmaWMKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK0NvcHlyaWdodCAxOTcyIGJ5IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgYW5kIEhvbmV5d2VsbCBJbmZvcm1hdGlvbgorU3lzdGVtcyBJbmMuCitDb3B5cmlnaHQgMjAwNiBieSBCVUxMIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLgorQ29weXJpZ2h0IDIwMDYgYnkgQnVsbCBTQVMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkFTQS0xLjMgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQVNBLTEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMxODJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkFTQS0xLjMKQEAgLTAsMCArMSw3OSBAQAorCitBU0EgT1BFTiBTT1VSQ0UgQUdSRUVNRU5UIFZFUlNJT04gMS4zCisKK1RISVMgT1BFTiBTT1VSQ0UgQUdSRUVNRU5UICgiQUdSRUVNRU5UIikgREVGSU5FUyBUSEUgUklHSFRTIE9GIFVTRSwgUkVQUk9EVUNUSU9OLCBESVNUUklCVVRJT04sIE1PRElGSUNBVElPTiBBTkQgUkVESVNUUklCVVRJT04gT0YgQ0VSVEFJTiBDT01QVVRFUiBTT0ZUV0FSRSBPUklHSU5BTExZIFJFTEVBU0VEIEJZIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQgQVMgUkVQUkVTRU5URUQgQlkgVEhFIEdPVkVSTk1FTlQgQUdFTkNZIExJU1RFRCBCRUxPVyAoIkdPVkVSTk1FTlQgQUdFTkNZIikuIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQsIEFTIFJFUFJFU0VOVEVEIEJZIEdPVkVSTk1FTlQgQUdFTkNZLCBJUyBBTiBJTlRFTkRFRCBUSElSRC1QQVJUWSBCRU5FRklDSUFSWSBPRiBBTEwgU1VCU0VRVUVOVCBESVNUUklCVVRJT05TIE9SIFJFRElTVFJJQlVUSU9OUyBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRS4gQU5ZT05FIFdITyBVU0VTLCBSRVBST0RVQ0VTLCBESVNUUklCVVRFUywgTU9ESUZJRVMgT1IgUkVESVNUUklCVVRFUyBUSEUgU1VCSkVDVCBTT0ZUV0FSRSwgQVMgREVGSU5FRCBIRVJFSU4sIE9SIEFOWSBQQVJUIFRIRVJFT0YsIElTLCBCWSBUSEFUIEFDVElPTiwgQUNDRVBUSU5HIElOIEZVTEwgVEhFIFJFU1BPTlNJQklMSVRJRVMgQU5EIE9CTElHQVRJT05TIENPTlRBSU5FRCBJTiBUSElTIEFHUkVFTUVOVC4KKworR292ZXJubWVudCBBZ2VuY3k6IF9fX19fIEdvdmVybm1lbnQgQWdlbmN5IE9yaWdpbmFsIFNvZnR3YXJlIERlc2lnbmF0aW9uOiBfXyBHb3Zlcm5tZW50IEFnZW5jeSBPcmlnaW5hbCBTb2Z0d2FyZSBUaXRsZTogX19fX18gVXNlciBSZWdpc3RyYXRpb24gUmVxdWVzdGVkLiBQbGVhc2UgVmlzaXQgaHR0cDovL19fXyBHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGZvciBPcmlnaW5hbCBTb2Z0d2FyZTogX19fX18KKworREVGSU5JVElPTlMKK0EuICJDb250cmlidXRvciIgbWVhbnMgR292ZXJubWVudCBBZ2VuY3ksIGFzIHRoZSBkZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBhbmQgYW55IGVudGl0eSB0aGF0IG1ha2VzIGEgTW9kaWZpY2F0aW9uLiBCLiAiQ292ZXJlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIE1vZGlmaWNhdGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFN1YmplY3QgU29mdHdhcmUuIEMuICJEaXNwbGF5IiBtZWFucyB0aGUgc2hvd2luZyBvZiBhIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVpdGhlciBkaXJlY3RseSBvciBieSBtZWFucyBvZiBhbiBpbWFnZSwgb3IgYW55IG90aGVyIGRldmljZS4gRC4gIkRpc3RyaWJ1dGlvbiIgbWVhbnMgY29udmV5YW5jZSBvciB0cmFuc2ZlciBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgcmVnYXJkbGVzcyBvZiBtZWFucywgdG8gYW5vdGhlci4gRS4gIkxhcmdlciBXb3JrIiBtZWFucyBjb21wdXRlciBzb2Z0d2FyZSB0aGF0IGNvbWJpbmVzIFN1YmplY3QgU29mdHdhcmUsIG9yIHBvcnRpb25zIHRoZXJlb2YsIHdpdGggc29mdHdhcmUgc2VwYXJhdGUgZnJvbSB0aGUgU3ViamVjdCBTb2Z0d2FyZSB0aGF0IGlzIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEYuICJNb2RpZmljYXRpb24iIG1lYW5zIGFueSBhbHRlcmF0aW9uIG9mLCBpbmNsdWRpbmcgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSwgdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBTdWJqZWN0IFNvZnR3YXJlLCBhbmQgaW5jbHVkZXMgZGVyaXZhdGl2ZSB3b3JrcywgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gdGhlIENvcHlyaWdodCBTdGF0dXRlLCAxNyBVU0MgMTAxLiBIb3dldmVyLCB0aGUgYWN0IG9mIGluY2x1ZGluZyBTdWJqZWN0IFNvZnR3YXJlIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yayBkb2VzIG5vdCBpbiBhbmQgb2YgaXRzZWxmIGNvbnN0aXR1dGUgYSBNb2RpZmljYXRpb24uIEcuICJPcmlnaW5hbCBTb2Z0d2FyZSIgbWVhbnMgdGhlIGNvbXB1dGVyIHNvZnR3YXJlIGZpcnN0IHJlbGVhc2VkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGJ5IEdvdmVybm1lbnQgQWdlbmN5IHdpdGggR292ZXJubWVudCBBZ2VuY3kgZGVzaWduYXRpb24gX18gYW5kIGVudGl0bGVkIF9fX19fX19fXywgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24sIGlmIGFueS4gSC4gIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyBhY3F1aXJlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuIEkuICJSZWRpc3RyaWJ1dGlvbiIgbWVhbnMgRGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFmdGVyIGEgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuIEouICJSZXByb2R1Y3Rpb24iIG1lYW5zIHRoZSBtYWtpbmcgb2YgYSBjb3VudGVycGFydCwgaW1hZ2Ugb3IgY29weSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gSy4gIlNhbGUiIG1lYW5zIHRoZSBleGNoYW5nZSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBmb3IgbW9uZXkgb3IgZXF1aXZhbGVudCB2YWx1ZS4gTC4gIlN1YmplY3QgU29mdHdhcmUiIG1lYW5zIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgTW9kaWZpY2F0aW9ucywgb3IgYW55IHJlc3BlY3RpdmUgcGFydHMgdGhlcmVvZi4gTS4gIlVzZSIgbWVhbnMgdGhlIGFwcGxpY2F0aW9uIG9yIGVtcGxveW1lbnQgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLgorCitHUkFOVCBPRiBSSUdIVFMKK0EuIFVuZGVyIE5vbi1QYXRlbnQgUmlnaHRzOiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciwgd2l0aCByZXNwZWN0IHRvIGl0cyBvd24gY29udHJpYnV0aW9uIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gZW5nYWdlIGluIHRoZSBmb2xsb3dpbmcgYWN0aXZpdGllcyBwZXJ0YWluaW5nIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlOgorCitVc2UKK0Rpc3RyaWJ1dGlvbgorUmVwcm9kdWN0aW9uCitNb2RpZmljYXRpb24KK1JlZGlzdHJpYnV0aW9uCitEaXNwbGF5CitCLiBVbmRlciBQYXRlbnQgUmlnaHRzOiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciwgd2l0aCByZXNwZWN0IHRvIGl0cyBvd24gY29udHJpYnV0aW9uIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggUmVjaXBpZW50IHVuZGVyIENvdmVyZWQgUGF0ZW50cyBhIG5vbi1leGNsdXNpdmUsIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGVuZ2FnZSBpbiB0aGUgZm9sbG93aW5nIGFjdGl2aXRpZXMgcGVydGFpbmluZyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZToKKworVXNlCitEaXN0cmlidXRpb24KK1JlcHJvZHVjdGlvbgorU2FsZQorT2ZmZXIgZm9yIFNhbGUKK0MuIFRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciBQYXJhZ3JhcGggQi4gYWxzbyBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgYSBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbiBhbmQgdGhlIFN1YmplY3QgU29mdHdhcmUgaWYsIGF0IHRoZSB0aW1lIHRoZSBNb2RpZmljYXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCB0aGUgYWRkaXRpb24gb2Ygc3VjaCBNb2RpZmljYXRpb24gY2F1c2VzIHRoZSBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBDb3ZlcmVkIFBhdGVudHMuIEl0IGRvZXMgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgdGhhdCBpbmNsdWRlIGEgTW9kaWZpY2F0aW9uLgorCitELiBUaGUgcmlnaHRzIGdyYW50ZWQgaW4gUGFyYWdyYXBocyBBLiBhbmQgQi4gYWxsb3cgdGhlIFJlY2lwaWVudCB0byBzdWJsaWNlbnNlIHRob3NlIHNhbWUgcmlnaHRzLiBTdWNoIHN1YmxpY2Vuc2UgbXVzdCBiZSB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKworT0JMSUdBVElPTlMgT0YgUkVDSVBJRU5UCitBLiBEaXN0cmlidXRpb24gb3IgUmVkaXN0cmlidXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgbXVzdCBiZSBtYWRlIHVuZGVyIHRoaXMgQWdyZWVtZW50IGV4Y2VwdCBmb3IgYWRkaXRpb25zIGNvdmVyZWQgdW5kZXIgcGFyYWdyYXBoIDNILgorCitXaGVuZXZlciBhIFJlY2lwaWVudCBkaXN0cmlidXRlcyBvciByZWRpc3RyaWJ1dGVzIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZTsgYW5kCitJZiBSZWNpcGllbnQgZGlzdHJpYnV0ZXMgb3IgcmVkaXN0cmlidXRlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIHNvdXJjZSBjb2RlLCBSZWNpcGllbnQgbXVzdCBhbHNvIG1ha2UgdGhlIHNvdXJjZSBjb2RlIGZyZWVseSBhdmFpbGFibGUsIGFuZCBtdXN0IHByb3ZpZGUgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiB0aGUgc291cmNlIGNvZGUgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorQi4gRWFjaCBSZWNpcGllbnQgbXVzdCBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBwcm9taW5lbnRseSBpbiB0aGUgU3ViamVjdCBTb2Z0d2FyZToKKworW0dvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBub3RpY2UgaW4gZWFjaCBhZ3JlZW1lbnQgYWNjb21wYW55aW5nIHRoZSBpbml0aWFsIGRpc3RyaWJ1dGlvbiBvZiBvcmlnaW5hbCBzb2Z0d2FyZSBhbmQgcmVtb3ZlIHRoaXMgYnJhY2tldGVkIGxhbmd1YWdlLl0KKworW1RoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSB3aWxsIGJlIHVzZWQgaWYgY3JlYXRlZCBieSBhIGNvbnRyYWN0b3IgcHVyc3VhbnQgdG8gR292ZXJubWVudCBBZ2VuY3kgY29udHJhY3QgYW5kIHJpZ2h0cyBvYnRhaW5lZCBmcm9tIGNyZWF0b3IgYnkgYXNzaWdubWVudC4gR292ZXJubWVudCBBZ2VuY3kgd2lsbCBpbnNlcnQgdGhlIHllYXIgYW5kIGl0cyBBZ2VuY3kgZGVzaWduYXRpb24gYW5kIHJlbW92ZSB0aGUgYnJhY2tldGVkIGxhbmd1YWdlLl0gQ29weXJpZ2h0ICYjNjU1MzM7IHtZRUFSfSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgX19fIF9fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1tUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2Ugd2lsbCBiZSB1c2VkIGlmIGNyZWF0ZWQgYnkgY2l2aWwgc2VydmFudHMgb25seS4gR292ZXJubWVudCBBZ2VuY3kgd2lsbCBpbnNlcnQgdGhlIHllYXIgYW5kIGl0cyBBZ2VuY3kgZGVzaWduYXRpb24gYW5kIHJlbW92ZSB0aGUgYnJhY2tldGVkIGxhbmd1YWdlLl0gQ29weXJpZ2h0ICYjNjU1MzM7IHtZRUFSfSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgX19fXyBfX19fLiBObyBjb3B5cmlnaHQgaXMgY2xhaW1lZCBpbiB0aGUgVW5pdGVkIFN0YXRlcyB1bmRlciBUaXRsZSAxNywgVS5TLkNvZGUuIEFsbCBPdGhlciBSaWdodHMgUmVzZXJ2ZWQuCisKK0MuIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBjaGFyYWN0ZXJpemUgaXRzIGFsdGVyYXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgYXMgYSBNb2RpZmljYXRpb24gYW5kIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBNb2RpZmljYXRpb24gaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIE1vZGlmaWNhdGlvbi4gSW4gZnVsZmlsbG1lbnQgb2YgdGhlc2UgcmVxdWlyZW1lbnRzLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSBmaWxlIChlLmcuLCBhIGNoYW5nZSBsb2cgZmlsZSkgdGhhdCBkZXNjcmliZXMgdGhlIGFsdGVyYXRpb25zIG1hZGUgYW5kIHRoZSBkYXRlIG9mIHRoZSBhbHRlcmF0aW9ucywgaWRlbnRpZmllcyBDb250cmlidXRvciBhcyBvcmlnaW5hdG9yIG9mIHRoZSBhbHRlcmF0aW9ucywgYW5kIGNvbnNlbnRzIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGFsdGVyYXRpb25zIGFzIGEgTW9kaWZpY2F0aW9uLCBmb3IgZXhhbXBsZSwgYnkgaW5jbHVkaW5nIGEgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIFNvZnR3YXJlIHByb3ZpZGVkIGJ5IEdvdmVybm1lbnQgQWdlbmN5LiBPbmNlIGNvbnNlbnQgaXMgZ3JhbnRlZCwgaXQgbWF5IG5vdCB0aGVyZWFmdGVyIGJlIHJldm9rZWQuCisKK0QuIEEgQ29udHJpYnV0b3IgbWF5IGFkZCBpdHMgb3duIGNvcHlyaWdodCBub3RpY2UgdG8gdGhlIFN1YmplY3QgU29mdHdhcmUuIE9uY2UgYSBjb3B5cmlnaHQgbm90aWNlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBhIFJlY2lwaWVudCBtYXkgbm90IHJlbW92ZSBpdCB3aXRob3V0IHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgdGhlIENvbnRyaWJ1dG9yIHdobyBhZGRlZCB0aGUgbm90aWNlLgorCitFLiBBIFJlY2lwaWVudCBtYXkgbm90IG1ha2UgYW55IHJlcHJlc2VudGF0aW9uIGluIHRoZSBTdWJqZWN0IFNvZnR3YXJlIG9yIGluIGFueSBwcm9tb3Rpb25hbCwgYWR2ZXJ0aXNpbmcgb3Igb3RoZXIgbWF0ZXJpYWwgdGhhdCBtYXkgYmUgY29uc3RydWVkIGFzIGFuIGVuZG9yc2VtZW50IGJ5IEdvdmVybm1lbnQgQWdlbmN5IG9yIGJ5IGFueSBwcmlvciBSZWNpcGllbnQgb2YgYW55IHByb2R1Y3Qgb3Igc2VydmljZSBwcm92aWRlZCBieSBSZWNpcGllbnQsIG9yIHRoYXQgbWF5IHNlZWsgdG8gb2J0YWluIGNvbW1lcmNpYWwgYWR2YW50YWdlIGJ5IHRoZSBmYWN0IG9mIEdvdmVybm1lbnQgQWdlbmN5YHMgb3IgYSBwcmlvciBSZWNpcGllbnRgcyBwYXJ0aWNpcGF0aW9uIGluIHRoaXMgQWdyZWVtZW50LgorCitGLiBJbiBhbiBlZmZvcnQgdG8gdHJhY2sgdXNhZ2UgYW5kIG1haW50YWluIGFjY3VyYXRlIHJlY29yZHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVhY2ggUmVjaXBpZW50LCB1cG9uIHJlY2VpcHQgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGlzIHJlcXVlc3RlZCB0byByZWdpc3RlciB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGJ5IHZpc2l0aW5nIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZTogX19fX19fLiBSZWNpcGllbnRgcyBuYW1lIGFuZCBwZXJzb25hbCBpbmZvcm1hdGlvbiBzaGFsbCBiZSB1c2VkIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcyBvbmx5LiBPbmNlIGEgUmVjaXBpZW50IG1ha2VzIGEgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSwgaXQgaXMgcmVxdWVzdGVkIHRoYXQgdGhlIFJlY2lwaWVudCBpbmZvcm0gR292ZXJubWVudCBBZ2VuY3kgYXQgdGhlIHdlYiBzaXRlIHByb3ZpZGVkIGFib3ZlIGhvdyB0byBhY2Nlc3MgdGhlIE1vZGlmaWNhdGlvbi4KKworW0FsdGVybmF0aXZlIHBhcmFncmFwaCBmb3IgdXNlIHdoZW4gYSB3ZWIgc2l0ZSBmb3IgcmVsZWFzZSBhbmQgbW9uaXRvcmluZyBvZiBzdWJqZWN0IHNvZnR3YXJlIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBieSByZWxlYXNpbmcgR292ZXJubWVudCBBZ2VuY3ldIEluIGFuIGVmZm9ydCB0byB0cmFjayB1c2FnZSBhbmQgbWFpbnRhaW4gYWNjdXJhdGUgcmVjb3JkcyBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgZWFjaCBSZWNpcGllbnQsIHVwb24gcmVjZWlwdCBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaXMgcmVxdWVzdGVkIHRvIHByb3ZpZGUgR292ZXJubWVudCBBZ2VuY3ksIGJ5IGUtbWFpbCB0byB0aGUgR292ZXJubWVudCBBZ2VuY3kgUG9pbnQgb2YgQ29udGFjdCBsaXN0ZWQgaW4gY2xhdXNlIDUuRi4sIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IF9fX19fXy4gUmVjaXBpZW50YHMgbmFtZSBhbmQgcGVyc29uYWwgaW5mb3JtYXRpb24gc2hhbGwgYmUgdXNlZCBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMgb25seS4gT25jZSBhIFJlY2lwaWVudCBtYWtlcyBhIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUsIGl0IGlzIHJlcXVlc3RlZCB0aGF0IHRoZSBSZWNpcGllbnQgaW5mb3JtIEdvdmVybm1lbnQgQWdlbmN5LCBieSBlLW1haWwgdG8gdGhlIEdvdmVybm1lbnQgQWdlbmN5IFBvaW50IG9mIENvbnRhY3QgbGlzdGVkIGluIGNsYXVzZSA1LkYuLCBob3cgdG8gYWNjZXNzIHRoZSBNb2RpZmljYXRpb24uCisKK0cuIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRoYXQgaXRzIE1vZGlmaWNhdGlvbiBpcyBiZWxpZXZlZCB0byBiZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uIGFuZCBkb2VzIG5vdCB2aW9sYXRlIGFueSBleGlzdGluZyBhZ3JlZW1lbnRzLCByZWd1bGF0aW9ucywgc3RhdHV0ZXMgb3IgcnVsZXMsIGFuZCBmdXJ0aGVyIHRoYXQgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBBZ3JlZW1lbnQuCisKK0guIEEgUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IGFuZC9vciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgb3RoZXIgUmVjaXBpZW50cyBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gQSBSZWNpcGllbnQgbWF5IGRvIHNvLCBob3dldmVyLCBvbmx5IG9uIGl0cyBvd24gYmVoYWxmIGFuZCBub3Qgb24gYmVoYWxmIG9mIEdvdmVybm1lbnQgQWdlbmN5IG9yIGFueSBvdGhlciBSZWNpcGllbnQuIFN1Y2ggYSBSZWNpcGllbnQgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IGFuZC9vciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IHRoYXQgUmVjaXBpZW50IGFsb25lLiBGdXJ0aGVyLCBzdWNoIFJlY2lwaWVudCBhZ3JlZXMgdG8gaW5kZW1uaWZ5IEdvdmVybm1lbnQgQWdlbmN5IGFuZCBldmVyeSBvdGhlciBSZWNpcGllbnQgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlbSBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IGFuZC9vciBsaWFiaWxpdHkgb2ZmZXJlZCBieSBzdWNoIFJlY2lwaWVudC4KKworSS4gQSBSZWNpcGllbnQgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBTdWJqZWN0IFNvZnR3YXJlIHdpdGggc2VwYXJhdGUgc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudCBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBjYXNlLCB0aGUgUmVjaXBpZW50IG11c3QgbWFrZSBzdXJlIFN1YmplY3QgU29mdHdhcmUsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGVkIGluIHRoZSBMYXJnZXIgV29yayBpcyBzdWJqZWN0IHRvIHRoaXMgQWdyZWVtZW50LgorCitKLiBOb3R3aXRoc3RhbmRpbmcgYW55IHByb3Zpc2lvbnMgY29udGFpbmVkIGhlcmVpbiwgUmVjaXBpZW50IGlzIGhlcmVieSBwdXQgb24gbm90aWNlIHRoYXQgZXhwb3J0IG9mIGFueSBnb29kcyBvciB0ZWNobmljYWwgZGF0YSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG1heSByZXF1aXJlIHNvbWUgZm9ybSBvZiBleHBvcnQgbGljZW5zZSBmcm9tIHRoZSBVLlMuIEdvdmVybm1lbnQuIEZhaWx1cmUgdG8gb2J0YWluIG5lY2Vzc2FyeSBleHBvcnQgbGljZW5zZXMgbWF5IHJlc3VsdCBpbiBjcmltaW5hbCBsaWFiaWxpdHkgdW5kZXIgVS5TLiBsYXdzLiBHb3Zlcm5tZW50IEFnZW5jeSBuZWl0aGVyIHJlcHJlc2VudHMgdGhhdCBhIGxpY2Vuc2Ugc2hhbGwgbm90IGJlIHJlcXVpcmVkIG5vciB0aGF0LCBpZiByZXF1aXJlZCwgaXQgc2hhbGwgYmUgaXNzdWVkLiBOb3RoaW5nIGdyYW50ZWQgaGVyZWluIHByb3ZpZGVzIGFueSBzdWNoIGV4cG9ydCBsaWNlbnNlLgorCitESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMgQU5EIExJQUJJTElUSUVTOyBXQUlWRVIgQU5EIElOREVNTklGSUNBVElPTgorQS4gTm8gV2FycmFudHk6IFRIRSBTVUJKRUNUIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQsIElNUExJRUQsIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIEFOWSBXQVJSQU5UWSBUSEFUIFRIRSBTVUJKRUNUIFNPRlRXQVJFIFdJTEwgQ09ORk9STSBUTyBTUEVDSUZJQ0FUSU9OUywgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBGUkVFRE9NIEZST00gSU5GUklOR0VNRU5ULCBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBXSUxMIEJFIEVSUk9SIEZSRUUsIE9SIEFOWSBXQVJSQU5UWSBUSEFUIERPQ1VNRU5UQVRJT04sIElGIFBST1ZJREVELCBXSUxMIENPTkZPUk0gVE8gVEhFIFNVQkpFQ1QgU09GVFdBUkUuIFRISVMgQUdSRUVNRU5UIERPRVMgTk9ULCBJTiBBTlkgTUFOTkVSLCBDT05TVElUVVRFIEFOIEVORE9SU0VNRU5UIEJZIEdPVkVSTk1FTlQgQUdFTkNZIE9SIEFOWSBQUklPUiBSRUNJUElFTlQgT0YgQU5ZIFJFU1VMVFMsIFJFU1VMVElORyBERVNJR05TLCBIQVJEV0FSRSwgU09GVFdBUkUgUFJPRFVDVFMgT1IgQU5ZIE9USEVSIEFQUExJQ0FUSU9OUyBSRVNVTFRJTkcgRlJPTSBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUuIEZVUlRIRVIsIEdPVkVSTk1FTlQgQUdFTkNZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBBTkQgTElBQklMSVRJRVMgUkVHQVJESU5HIFRISVJELVBBUlRZIFNPRlRXQVJFLCBJRiBQUkVTRU5UIElOIFRIRSBPUklHSU5BTCBTT0ZUV0FSRSwgQU5EIERJU1RSSUJVVEVTIElUICJBUyBJUy4iCisKK0IuIFdhaXZlciBhbmQgSW5kZW1uaXR5OiBSRUNJUElFTlQgQUdSRUVTIFRPIFdBSVZFIEFOWSBBTkQgQUxMIENMQUlNUyBBR0FJTlNUIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQsIElUUyBDT05UUkFDVE9SUyBBTkQgU1VCQ09OVFJBQ1RPUlMsIEFTIFdFTEwgQVMgQU5ZIFBSSU9SIFJFQ0lQSUVOVC4gSUYgUkVDSVBJRU5UYFMgVVNFIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFIFJFU1VMVFMgSU4gQU5ZIExJQUJJTElUSUVTLCBERU1BTkRTLCBEQU1BR0VTLCBFWFBFTlNFUyBPUiBMT1NTRVMgQVJJU0lORyBGUk9NIFNVQ0ggVVNFLCBJTkNMVURJTkcgQU5ZIERBTUFHRVMgRlJPTSBQUk9EVUNUUyBCQVNFRCBPTiwgT1IgUkVTVUxUSU5HIEZST00sIFJFQ0lQSUVOVGBTIFVTRSBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSwgUkVDSVBJRU5UIFNIQUxMIElOREVNTklGWSBBTkQgSE9MRCBIQVJNTEVTUyBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBJVFMgQ09OVFJBQ1RPUlMgQU5EIFNVQkNPTlRSQUNUT1JTLCBBUyBXRUxMIEFTIEFOWSBQUklPUiBSRUNJUElFTlQsIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4gUkVDSVBJRU5UYFMgU09MRSBSRU1FRFkgRk9SIEFOWSBTVUNIIE1BVFRFUiBTSEFMTCBCRSBUSEUgSU1NRURJQVRFLCBVTklMQVRFUkFMIFRFUk1JTkFUSU9OIE9GIFRISVMgQUdSRUVNRU5ULgorCitHRU5FUkFMIFRFUk1TCitBLiBUZXJtaW5hdGlvbjogVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBhIFJlY2lwaWVudCBmYWlscyB0byBjb21wbHkgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYW5kIGZhaWxzIHRvIGN1cmUgc3VjaCBub25jb21wbGlhbmNlIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gVXBvbiB0ZXJtaW5hdGlvbiwgYSBSZWNpcGllbnQgYWdyZWVzIHRvIGltbWVkaWF0ZWx5IGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIFN1YmplY3QgU29mdHdhcmUgcHJvcGVybHkgZ3JhbnRlZCBieSB0aGUgYnJlYWNoaW5nIFJlY2lwaWVudCBzaGFsbCBzdXJ2aXZlIGFueSBzdWNoIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCitCLiBTZXZlcmFiaWxpdHk6IElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworQy4gQXBwbGljYWJsZSBMYXc6IFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gVW5pdGVkIFN0YXRlcyBmZWRlcmFsIGxhdyBvbmx5IGZvciBhbGwgcHVycG9zZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBkZXRlcm1pbmluZyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBBZ3JlZW1lbnQsIHRoZSBtZWFuaW5nIG9mIGl0cyBwcm92aXNpb25zIGFuZCB0aGUgcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgcmVtZWRpZXMgb2YgdGhlIHBhcnRpZXMuCisKK0QuIEVudGlyZSBVbmRlcnN0YW5kaW5nOiBUaGlzIEFncmVlbWVudCBjb25zdGl0dXRlcyB0aGUgZW50aXJlIHVuZGVyc3RhbmRpbmcgYW5kIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyByZWxhdGluZyB0byByZWxlYXNlIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFuZCBtYXkgbm90IGJlIHN1cGVyc2VkZWQsIG1vZGlmaWVkIG9yIGFtZW5kZWQgZXhjZXB0IGJ5IGZ1cnRoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgZHVseSBleGVjdXRlZCBieSB0aGUgcGFydGllcy4KKworRS4gQmluZGluZyBBdXRob3JpdHk6IEJ5IGFjY2VwdGluZyBhbmQgdXNpbmcgdGhlIFN1YmplY3QgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGEgUmVjaXBpZW50IGFmZmlybXMgaXRzIGF1dGhvcml0eSB0byBiaW5kIHRoZSBSZWNpcGllbnQgdG8gYWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCB0aGF0IHRoYXQgUmVjaXBpZW50IGhlcmVieSBhZ3JlZXMgdG8gYWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVpbi4KKworRi4gUG9pbnQgb2YgQ29udGFjdDogQW55IFJlY2lwaWVudCBjb250YWN0IHdpdGggR292ZXJubWVudCBBZ2VuY3kgaXMgdG8gYmUgZGlyZWN0ZWQgdG8gdGhlIGRlc2lnbmF0ZWQgcmVwcmVzZW50YXRpdmUgYXMgZm9sbG93czogX19fX19fX19fX18uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05DU0EgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQ1NBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGRjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQ1NBCkBAIC0wLDAgKzEsMzQgQEAKKworVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBIE9wZW4gU291cmNlIExpY2Vuc2UKK0NvcHlyaWdodCAoYykgPFllYXI+IDxPd25lciBPcmdhbml6YXRpb24gTmFtZT4gCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYnk6ICAgPE5hbWUgb2YgRGV2ZWxvcG1lbnQgR3JvdXA+CisgICAgICAgICAgICAgICAgICAgICAgIDxOYW1lIG9mIEluc3RpdHV0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPFVSTCBmb3IgRGV2ZWxvcG1lbnQgR3JvdXAvSW5zdGl0dXRpb24+CitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aCB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lcyBvZiA8TmFtZSBvZiBEZXZlbG9wbWVudCBHcm91cCwgTmFtZSBvZgorSW5zdGl0dXRpb24+LCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24uCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCitBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OR1BMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkdQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk2ZWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkdQTApAQCAtMCwwICsxLDQ1IEBACisKKworTkVUSEFDSyBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKKyhDb3B5cmlnaHQgMTk4OSBNLiBTdGVwaGVuc29uKSAKKyhCYXNlZCBvbiB0aGUgQklTT04gZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSwgY29weXJpZ2h0IDE5ODggUmljaGFyZCBNLiBTdGFsbG1hbikKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgd29yZGluZyB0byBtYWtlIHRoZSB0ZXJtcyBmb3Igb3RoZXIgcHJvZ3JhbXMuCitUaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIGtlZXAgeW91IGF0IHRoZSBtZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuIEJ5IGNvbnRyYXN0LCBvdXIgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBnaXZlIGV2ZXJ5b25lIHRoZSByaWdodCB0byBzaGFyZSBOZXRIYWNrLiBUbyBtYWtlIHN1cmUgdGhhdCB5b3UgZ2V0IHRoZSByaWdodHMgd2Ugd2FudCB5b3UgdG8gaGF2ZSwgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIEhlbmNlIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuCisKK1NwZWNpZmljYWxseSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gZ2l2ZSBhd2F5IGNvcGllcyBvZiBOZXRIYWNrLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGVsc2UgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSBOZXRIYWNrIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBtYWtlIHN1cmUgdGhhdCBldmVyeW9uZSBoYXMgc3VjaCByaWdodHMsIHdlIGhhdmUgdG8gZm9yYmlkIHlvdSB0byBkZXByaXZlIGFueW9uZSBlbHNlIG9mIHRoZXNlIHJpZ2h0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBOZXRIYWNrLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHRlbGwgdGhlbSB0aGVpciByaWdodHMuCisKK0Fsc28sIGZvciBvdXIgb3duIHByb3RlY3Rpb24sIHdlIG11c3QgbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgZmluZHMgb3V0IHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIE5ldEhhY2suIElmIE5ldEhhY2sgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB3aGF0IHdlIGRpc3RyaWJ1dGVkLgorCitUaGVyZWZvcmUgd2UgKE1pa2UgU3RlcGhlbnNvbiBhbmQgb3RoZXIgaG9sZGVycyBvZiBOZXRIYWNrIGNvcHlyaWdodHMpIG1ha2UgdGhlIGZvbGxvd2luZyB0ZXJtcyB3aGljaCBzYXkgd2hhdCB5b3UgbXVzdCBkbyB0byBiZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgb3IgY2hhbmdlIE5ldEhhY2suCisKK0NPUFlJTkcgUE9MSUNJRVMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiBOZXRIYWNrIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBrZWVwIGludGFjdCB0aGUgbm90aWNlcyBvbiBhbGwgZmlsZXMgdGhhdCByZWZlciB0byBjb3B5cmlnaHRzLCB0byB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgTmV0SGFjayBwcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFsb25nIHdpdGggdGhlIHByb2dyYW0uCitZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIE5ldEhhY2sgb3IgYW55IHBvcnRpb24gb2YgaXQsIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBoIDEgYWJvdmUgKGluY2x1ZGluZyBkaXN0cmlidXRpbmcgdGhpcyBMaWNlbnNlIEFncmVlbWVudCksIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKK2EpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQKKworYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGEgZGVyaXZhdGl2ZSBvZiBOZXRIYWNrIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyBvbiB0ZXJtcyBpZGVudGljYWwgdG8gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgKGV4Y2VwdCB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IG1vcmUgZXh0ZW5zaXZlIHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pCisKK2MpIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIE5ldEhhY2sgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBQYXJhZ3JhcGggMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKK2EpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCitiKSBhY2NvbXBhbnkgaXQgd2l0aCBmdWxsIGluZm9ybWF0aW9uIGFzIHRvIGhvdyB0byBvYnRhaW4gdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZnJvbSBhbiBhcHByb3ByaWF0ZSBhcmNoaXZlIHNpdGUuIChUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24uKQorCitGb3IgdGhlc2UgcHVycG9zZXMsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGVpdGhlciB0aGUgZnVsbCBzb3VyY2UgZGlzdHJpYnV0aW9uIGFzIG9yaWdpbmFsbHkgcmVsZWFzZWQgb3ZlciBVc2VuZXQgb3IgdXBkYXRlZCBjb3BpZXMgb2YgdGhlIGZpbGVzIGluIHRoaXMgZGlzdHJpYnV0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlLgorCitZb3UgbWF5IG5vdCBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIE5ldEhhY2sgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBOZXRIYWNrIGlzIHZvaWQgYW5kIHlvdXIgcmlnaHRzIHRvIHVzZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgYWdyZWVtZW50IHNoYWxsIGJlIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlZC4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb21wdXRlciBzb2Z0d2FyZSBwcm9ncmFtcyBmcm9tIHlvdSB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCitTdGF0ZWQgcGxhaW5seTogWW91IGFyZSBwZXJtaXR0ZWQgdG8gbW9kaWZ5IE5ldEhhY2ssIG9yIG90aGVyd2lzZSB1c2UgcGFydHMgb2YgTmV0SGFjaywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgc3BlY2lmaWVkIGFib3ZlOyBpbiBwYXJ0aWN1bGFyLCB5b3VyIG1vZGlmaWVkIE5ldEhhY2sgb3IgcHJvZ3JhbSBjb250YWluaW5nIHBhcnRzIG9mIE5ldEhhY2sgbXVzdCByZW1haW4gZnJlZWx5IGF2YWlsYWJsZSBhcyBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBJbiBvdGhlciB3b3JkcywgZ28gYWhlYWQgYW5kIHNoYXJlIE5ldEhhY2ssIGJ1dCBkb25gdCB0cnkgdG8gc3RvcCBhbnlvbmUgZWxzZSBmcm9tIHNoYXJpbmcgaXQgZmFydGhlci4gCitbICBIb21lICB8ICBWZXJzaW9uIDMuNC4zICB8ICBDb250YWN0IFVzICBdCisKKworCitIb3N0ZWQgYnk6ICAgICAgIAorTmV0SGFjayBpcyBDb3B5cmlnaHQgMTk4NS0yMDAzIGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBhbmQgTS4gU3RlcGhlbnNvbi4gU2VlIG91ciBsaWNlbnNlIGZvciBkZXRhaWxzLgorVGhpcyBzaXRlIGlzIENvcHlyaWdodCAxOTk5LTIwMDkgYnkgS2VubmV0aCBMb3JiZXIsIEtlbnNpbmd0b24sIE1hcnlsYW5kLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYTY2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05QT1NMLTMuMApAQCAtMCwwICsxLDYxIEBACisKK05vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICgiTm9uLVByb2ZpdCBPU0wiKSAzLjAKKworVGhpcyBOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoIk5vbi1Qcm9maXQgT1NMIikgdmVyc2lvbiAzLjAgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIG5vdGljZSBhZGphY2VudCB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDMuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcywgZWl0aGVyIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBjb2xsZWN0aXZlIHdvcms7CisKK2IpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CisKK2MpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSBvciBhcyBwcm92aWRlZCBpbiBzZWN0aW9uIDE3KGQpOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBhdGVudHMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kIGltcG9ydCB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3JgcyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLgorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueW9uZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4KKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgImZhaXIgdXNlIiBvciAiZmFpciBkZWFsaW5nIikuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBBdHRvcm5leXNgIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworMTYpIE1vZGlmaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBpcyBDb3B5cmlnaHQgJiMxNjk7IDIwMDUgTGF3cmVuY2UgUm9zZW4uIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBjb21tdW5pY2F0ZSB0aGlzIExpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHBlcm1pdHMgWW91IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UgYXMgYXBwbGllZCB0byB0aGUgT3JpZ2luYWwgV29yayBvciB0byBEZXJpdmF0aXZlIFdvcmtzLiBIb3dldmVyLCBZb3UgbWF5IG1vZGlmeSB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UgYW5kIGNvcHksIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgeW91ciBtb2RpZmllZCB2ZXJzaW9uICh0aGUgIk1vZGlmaWVkIExpY2Vuc2UiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGkpIFlvdSBtYXkgbm90IGluZGljYXRlIGluIGFueSB3YXkgdGhhdCB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaXMgdGhlICJPcGVuIFNvZnR3YXJlIExpY2Vuc2UiIG9yICJPU0wiIGFuZCB5b3UgbWF5IG5vdCB1c2UgdGhvc2UgbmFtZXMgaW4gdGhlIG5hbWUgb2YgeW91ciBNb2RpZmllZCBMaWNlbnNlOyAoaWkpIFlvdSBtdXN0IHJlcGxhY2UgdGhlIG5vdGljZSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBhYm92ZSB3aXRoIHRoZSBub3RpY2UgIkxpY2Vuc2VkIHVuZGVyIDxpbnNlcnQgeW91ciBsaWNlbnNlIG5hbWUgaGVyZT4iIG9yIHdpdGggYSBub3RpY2Ugb2YgeW91ciBvd24gdGhhdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGUgbm90aWNlIGluIHRoaXMgTGljZW5zZTsgYW5kIChpaWkpIFlvdSBtYXkgbm90IGNsYWltIHRoYXQgeW91ciBvcmlnaW5hbCB3b3JrcyBhcmUgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdW5sZXNzIHlvdXIgTW9kaWZpZWQgTGljZW5zZSBoYXMgYmVlbiBhcHByb3ZlZCBieSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIGFuZCBZb3UgY29tcGx5IHdpdGggaXRzIGxpY2Vuc2UgcmV2aWV3IGFuZCBjZXJ0aWZpY2F0aW9uIHByb2Nlc3MuCisKKzE3KSBOb24tUHJvZml0IEFtZW5kbWVudC4gVGhlIG5hbWUgb2YgdGhpcyBhbWVuZGVkIHZlcnNpb24gb2YgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoIk9TTCAzLjAiKSBpcyAiTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgMy4wIi4gVGhlIG9yaWdpbmFsIE9TTCAzLjAgbGljZW5zZSBoYXMgYmVlbiBhbWVuZGVkIGFzIGZvbGxvd3M6CisKKyhhKSBMaWNlbnNvciByZXByZXNlbnRzIGFuZCBkZWNsYXJlcyB0aGF0IGl0IGlzIGEgbm90LWZvci1wcm9maXQgb3JnYW5pemF0aW9uIHRoYXQgZGVyaXZlcyBubyByZXZlbnVlIHdoYXRzb2V2ZXIgZnJvbSB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgb3IgZnJvbSBzdXBwb3J0IG9yIHNlcnZpY2VzIHJlbGF0aW5nIHRoZXJldG8uCisKKyhiKSBUaGUgZmlyc3Qgc2VudGVuY2Ugb2YgU2VjdGlvbiA3IFsiV2FycmFudHkgb2YgUHJvdmVuYW5jZSJdIG9mIE9TTCAzLjAgaGFzIGJlZW4gc3RyaWNrZW4uIEZvciBPcmlnaW5hbCBXb3JrcyBsaWNlbnNlZCB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCwgTElDRU5TT1IgT0ZGRVJTIE5PIFdBUlJBTlRJRVMgV0hBVFNPRVZFUi4KKworKGMpIEluIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiBTZWN0aW9uIDggWyJMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSJdIG9mIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wLCB0aGUgbGlzdCBvZiBkYW1hZ2VzIGZvciB3aGljaCBMSUFCSUxJVFkgSVMgTElNSVRFRCBub3cgaW5jbHVkZXMgImRpcmVjdCIgZGFtYWdlcy4KKworKGQpIFRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBvZiB0aGlzIExpY2Vuc2Ugbm93IHJlZmVycyB0byB0aGlzICJOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSIgcmF0aGVyIHRoYW4gdGhlICJPcGVuIFNvZnR3YXJlIExpY2Vuc2UiLiBZb3UgbWF5IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wIGxpY2Vuc2Ugb25seSBpZiBZb3UgbWFrZSB0aGUgcmVwcmVzZW50YXRpb24gYW5kIGRlY2xhcmF0aW9uIGluIHBhcmFncmFwaCAoYSkgb2YgdGhpcyBTZWN0aW9uIDE3LiBPdGhlcndpc2UsIFlvdSBzaGFsbCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBvbmx5IHVuZGVyIHRoZSBPU0wgMy4wIGxpY2Vuc2UgYW5kIFlvdSBzaGFsbCBwdWJsaXNoIGNsZWFyIGxpY2Vuc2luZyBub3RpY2VzIHNvIHN0YXRpbmcuIEFsc28gYnkgd2F5IG9mIGNsYXJpZmljYXRpb24sIHRoaXMgTGljZW5zZSBkb2VzIG5vdCBhdXRob3JpemUgWW91IHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgd29ya3MgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9TTCAzLjAgaWYgWW91IHJlY2VpdmVkIHRoZW0gdW5kZXIgdGhlIG9yaWdpbmFsIE9TTCAzLjAgbGljZW5zZS4KKworKGUpIE9yaWdpbmFsIFdvcmtzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgbGljZW5zZSBzaGFsbCByZWZlcmVuY2UgIk5vbi1Qcm9maXQgT1NMIDMuMCIgaW4gbGljZW5zaW5nIG5vdGljZXMgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHdvcmtzIGxpY2Vuc2VkIHVuZGVyIHRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzU3MmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlRQCkBAIC0wLDAgKzEsNyBAQAorCitOVFAgTGljZW5zZSAoTlRQKQorCitDb3B5cmlnaHQgKGMpIChDb3B5cmlnaHRIb2xkZXJzTmFtZSkgKEZyb20gNC1kaWdpdC15ZWFyKS0oVG8gNC1kaWdpdC15ZWFyKQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSAoVHJhZGVtYXJrZWROYW1lKSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gKFRyYWRlbWFya2VkTmFtZSkgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2U3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OYXVtYW4KQEAgLTAsMCArMSw1MCBAQAorCitOQVVNRU4gUHVibGljIExpY2Vuc2UKK1RoaXMgc29mdHdhcmUgaXMgQ29weXJpZ2h0IChjKSBOQVVNRU4gKHRtKSBhbmQgQ29udHJpYnV0b3JzLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgord2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCitkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKK3Byb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgTkFVTUVOICh0bSkgbXVzdCBub3QgYmUgdXNlZCB0bworZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3IKK3dyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5BVU1FTi4KKworNC4gVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yIGFueQorcHVycG9zZSBkb2VzIG5vdCBnaXZlIHlvdSB0aGUgcmlnaHQgdG8gdXNlIFNlcnZpY2VtYXJrcyAoc20pCitvciBUcmFkZW1hcmtzICh0bSkgb2YgTkFVTUVOLgorCis1LiBJZiBhbnkgZmlsZXMgb3JpZ2luYXRpbmcgZnJvbSBOQVVNRU4gb3IgQ29udHJpYnV0b3JzIGFyZSBtb2RpZmllZCwgeW91IG11c3QKK2NhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCit0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworRGlzY2xhaW1lcjoKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBOQVVNRU4gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRAorT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5BVU1FTgorT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBOQVVNRU4KK2FuZCBDb250cmlidXRvcnMuIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZQorYWNjb21wYW55aW5nIGNyZWRpdHMgZmlsZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTm9raWEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Ob2tpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM3NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTm9raWEKQEAgLTAsMCArMSw0MjMgQEAKKworTm9raWEgT3BlbiBTb3VyY2UgTGljZW5zZSAoTk9LT1MKK0xpY2Vuc2UpIFZlcnNpb24gMS4wYQorIDEuIERFRklOSVRJT05TLgorCisiQWZmaWxpYXRlcyIgb2YgYSBwYXJ0eSBzaGFsbCBtZWFuIGFuIGVudGl0eQorCithKSB3aGljaCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNvbnRyb2xsaW5nIHN1Y2ggcGFydHk7CisKK2IpIHdoaWNoIGlzIHVuZGVyIHRoZSBzYW1lIGRpcmVjdCBvciBpbmRpcmVjdCBvd25lcnNoaXAgb3IgY29udHJvbAorYXMgc3VjaCBwYXJ0eTsgb3IKKworYykgd2hpY2ggaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBvd25lZCBvciBjb250cm9sbGVkIGJ5IHN1Y2ggcGFydHkuCisKK0ZvciB0aGVzZSBwdXJwb3NlcywgYW4gZW50aXR5IHNoYWxsIGJlIHRyZWF0ZWQgYXMgYmVpbmcgY29udHJvbGxlZAorYnkgYW5vdGhlciBpZiB0aGF0IG90aGVyIGVudGl0eSBoYXMgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQordm90ZXMgaW4gc3VjaCBlbnRpdHksIGlzIGFibGUgdG8gZGlyZWN0IGl0cyBhZmZhaXJzIGFuZC9vciB0byBjb250cm9sIHRoZQorY29tcG9zaXRpb24gb2YgaXRzIGJvYXJkIG9mIGRpcmVjdG9ycyBvciBlcXVpdmFsZW50IGJvZHkuCisKKyJDb21tZXJjaWFsIFVzZSIgc2hhbGwgbWVhbiBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZwordGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKK2BgQ29udHJpYnV0b3JgYCBzaGFsbCBtZWFuIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcwordG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK2BgQ29udHJpYnV0b3IgVmVyc2lvbmBgIHNoYWxsIG1lYW4gaW4gY2FzZSBvZiBhbnkgQ29udHJpYnV0b3IKK3RoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhCitDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yIAorYW5kIGluIGNhc2Ugb2YgTm9raWEgaW4gYWRkaXRpb24gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGluIGFueSBmb3JtLCBpbmNsdWRpbmcKK3RoZSBmb3JtIGFzIEV4Y2V1dGFibGUuCisKK2BgQ292ZXJlZCBTb2Z0d2FyZWBgIHNoYWxsIG1lYW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbnMKK29yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2gKK2Nhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKK2BgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgc2hhbGwgbWVhbiBhIG1lY2hhbmlzbQorZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCitgYEV4ZWN1dGFibGVgYCBzaGFsbCBtZWFuIENvdmVyZWQgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIKK3RoYW4gU291cmNlIENvZGUuCisKK2BgTm9raWFgYCBzaGFsbCBtZWFuIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpdHMgQWZmaWxpYXRlcy4KKworYGBMYXJnZXIgV29ya2BgIHNoYWxsIG1lYW4gYSB3b3JrLCB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlCitvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworYGBMaWNlbnNlYGAgc2hhbGwgbWVhbiB0aGlzIGRvY3VtZW50LgorCisiTGljZW5zYWJsZSIgc2hhbGwgbWVhbiBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseQorYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCitgYE1vZGlmaWNhdGlvbnNgYCBzaGFsbCBtZWFuIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tCit0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIFNvZnR3YXJlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLAorYSBNb2RpZmljYXRpb24gaXM6CisKK2EpIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZworT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworYikgQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitgYE9yaWdpbmFsIFNvZnR3YXJlYGAgc2hhbGwgbWVhbiB0aGUgU291cmNlIENvZGUgb2YgY29tcHV0ZXIKK3NvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkKK0V4aGliaXQgQSBhcyBPcmlnaW5hbCBTb2Z0d2FyZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlcgordGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgU29mdHdhcmUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisiUGF0ZW50IENsYWltcyIgc2hhbGwgbWVhbiBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQKK29yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQKK2FwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCitgYFNvdXJjZSBDb2RlYGAgc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQKK1NvZnR3YXJlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLAorcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsCitjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgYW5vdGhlciB3ZWxsIGtub3duLAorYXZhaWxhYmxlIENvdmVyZWQgU29mdHdhcmUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUKK2NhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24KK29yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKyJZb3VgYCAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbAorZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwKK3RoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuCitGb3IgbGVnYWwgZW50aXRpZXMsICJZb3VgYCBpbmNsdWRlcyBBZmZpbGlhdGVzIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTT1VSQ0UgQ09ERSBMSUNFTlNFLgorCisyLjEgTm9raWEgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgTm9raWEgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBjbGFpbXM6CisKK2EpIHVuZGVyIGNvcHlyaWdodHMgTGljZW5zYWJsZSBieSBOb2tpYSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zCit0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsKKworYikgYW5kIHVuZGVyIFBhdGVudHMgQ2xhaW1zIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZworb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBTb2Z0d2FyZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLAorYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvcgorcG9ydGlvbnMgdGhlcmVvZikuCisKK2MpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBOb2tpYSBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZS4KKworZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOgorMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIFNvZnR3YXJlOyAyKSBzZXBhcmF0ZSBmcm9tCit0aGUgT3JpZ2luYWwgU29mdHdhcmU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbgorb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlCit3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMiBDb250cmlidXRvciBHcmFudC4KKworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbAorcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKK2EpIHVuZGVyIGNvcHlyaWdodHMgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieQorc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGgKK290aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgU29mdHdhcmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsKK2FuZAorCitiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywKK29yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vcgoraW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksCit0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZQorb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kCisyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IKK1ZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCitjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOgorMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsKKzIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieToKK2kpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uCitvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMKK3BhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMKK2luZnJpbmdlZCBieSBDb3ZlcmVkIFNvZnR3YXJlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitDb250cmlidXRvci4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEgQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZAorYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4KK1RoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgU29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQKK3VuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkKK2NvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55Cit0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUKK3ZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UKK21heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZAoraW4gU2VjdGlvbiAzLjUuCisKKzMuMiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCittYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyCitvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uCithdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLAorbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQKK2luaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQKK3ZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoCityZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uCityZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZAorYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIFNvZnR3YXJlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4KK2EgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIFNvZnR3YXJlCithbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIFNvZnR3YXJlCitwcm92aWRlZCBieSBOb2tpYSBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIE5va2lhIGluIChhKSB0aGUgU291cmNlIENvZGUsCithbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCiszLjQgIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCisKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yCit1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUKK1NvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQKK3RoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93Cit3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbgoraXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseQorbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIKK2FuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzCitvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZAorU29mdHdhcmUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KKworSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlCithbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5Cit0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4KK3RoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbgorMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUKK0NvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cwordG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNSBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKK0NvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlCitmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbgorKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKK3N1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyCituYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvCitkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91CitkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIFNvZnR3YXJlLgorWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5CitvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlLgorSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgTm9raWEKK29yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZAorWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgTm9raWEgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5CitpbmN1cnJlZCBieSBOb2tpYSBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBTb2Z0d2FyZSwKK2FuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlCitDb3ZlcmVkIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcKK2EgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24KKzMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlCit2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AKK3JpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlCit2ZXJzaW9uIG9mIENvdmVyZWQgU29mdHdhcmUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91cgorY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQKK1lvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UKK2ZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuCitJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91CittdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UKK2FyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IE5va2lhIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZQordG8gaW5kZW1uaWZ5IE5va2lhIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieQorTm9raWEgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNyBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlcgorc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlcgorV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMKK29mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBkdWUgdG8gc3RhdHV0ZSwKK2p1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zCithbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwKK2ZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMKK29mIHRoZSBTb3VyY2UgQ29kZS4KKworRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlCit0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggTm9raWEgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UKK2luIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIFNvZnR3YXJlLgorCis2LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworCis2LjEgTmV3IFZlcnNpb25zLgorCitOb2tpYSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lCit0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIgRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIFNvZnR3YXJlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbgorb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAordmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTm9raWEuIE5vIG9uZSBvdGhlcgordGhhbiBOb2tpYSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIFNvZnR3YXJlCitjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTYGAgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLAorRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRQorUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkKK0NPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBOT0tJQSwgSVRTIExJQ0VOU09SUworT1IgQUZGSUxJQVRFUyBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZCitTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgIFdBUlJBTlRZIENPTlNUSVRVVEVTCitBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVECitIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCisKKzguMSBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseQoraWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluCiszMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZAorU29mdHdhcmUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kCit0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzguMiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltCisoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IE5va2lhIG9yIGEgQ29udHJpYnV0b3IgKE5va2lhCitvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikKK2FsbGVnaW5nIHRoYXQ6CisKK2EpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzCithbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91Cit1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UKK2Zyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlcgorcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEKK211dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zCittYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdAordG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cworb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5CithZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkCithYm92ZS4KKworYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcworQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbgorYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQKKzIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsCitkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorCis4LjMgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZwordGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkKK3ByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZQordmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IKKzIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkKK3BheW1lbnQgb3IgbGljZW5zZS4KKworOC40IEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwKK2VuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaAoraGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0bwordGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIE5PS0lBLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsCitPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNICitQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLAorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sCitEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLAorT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMCitIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OCitPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZCitSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUworU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTgorT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIEJVVCBNQVkgQUxMT1cgTElBQklMSVRZIFRPIEJFIExJTUlURUQ7CitJTiBTVUNIIENBU0VTLCBBIFBBUlRZYHMsIElUUyBFTVBMT1lFRVMsIExJQ0VOU09SUyBPUiBBRkZJTElBVEVTYCBMSUFCSUxJVFkKK1NIQUxMIEJFIExJTUlURUQgVE8gVS5TLiAkNTAuIE5vdGhpbmcgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBzaGFsbCBwcmVqdWRpY2UKK3RoZSBzdGF0dXRvcnkgcmlnaHRzIG9mIGFueSBwYXJ0eSBkZWFsaW5nIGFzIGEgY29uc3VtZXIuCisKKzEwLiBNSVNDRUxMQU5FT1VTLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIKK2hlcmVvZi4gQWxsIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIKK3RoaXMgTGljZW5zZSBhcmUgcmVzZXJ2ZWQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGdyYW50IFlvdSBhbnkKK3JpZ2h0cyB0byB1c2UgYW55IG9mIHRoZSB0cmFkZW1hcmtzIG9mIE5va2lhIG9yIGFueSBvZiBpdHMgQWZmaWxpYXRlcywKK2V2ZW4gaWYgYW55IG9mIHN1Y2ggdHJhZGVtYXJrcyBhcmUgaW5jbHVkZWQgaW4gYW55IHBhcnQgb2YgQ292ZXJlZCBTb2Z0d2FyZQorYW5kL29yIGRvY3VtZW50YXRpb24gdG8gaXQuCisKK1RoaXMgTGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBGaW5sYW5kIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3Citwcm92aXNpb25zLiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBmcm9tIG9yIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsCitiZSBzZXR0bGVkIGJ5IGEgc2luZ2xlIGFyYml0cmF0b3IgYXBwb2ludGVkIGJ5IHRoZSBDZW50cmFsIENoYW1iZXIgb2YgQ29tbWVyY2UKK29mIEZpbmxhbmQuIFRoZSBhcmJpdHJhdGlvbiBwcm9jZWR1cmUgc2hhbGwgdGFrZSBwbGFjZSBpbiBIZWxzaW5raSwgRmlubGFuZAoraW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuIElmIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHZvaWQgYW5kCit1bmVuZm9yY2VhYmxlLCBpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSBiYWxhbmNlIG9mIHRoZSBBZ3JlZW1lbnQsCit3aGljaCBzaGFsbCByZW1haW4gdmFsaWQgYW5kIGVuZm9yY2VhYmxlIGFjY29yZGluZyB0byBpdHMgdGVybXMuCisKKzExLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIE5va2lhIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvcgorY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24KK29mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggTm9raWEgYW5kIENvbnRyaWJ1dG9ycwordG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4KK2lzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisgCisKK0VYSElCSVQgQQorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBOT0tPUyBMaWNlbnNlIFZlcnNpb24gMS4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKK0xpY2Vuc2UuCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GICBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCit0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIFNvZnR3YXJlIGlzCisKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitDb3B5cmlnaHQgJiMxNjk7IDx5ZWFyPiBOb2tpYSBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09BU0lTIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzZGY3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09BU0lTCkBAIC0wLDAgKzEsMTMgQEAKKyAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQgYW5kCisgIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzCisgIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAorICBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCisgIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCisgIHdhcnJhbnR5LgorCisgIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAorICByZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCisgIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQorICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0NMQy0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQ0xDLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzllM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0NMQy0yLjAKQEAgLTAsMCArMSw3OCBAQAorCitPQ0xDIFJlc2VhcmNoIFB1YmxpYyBMaWNlbnNlIDIuMAorVGVybXMgJmFtcDsgQ29uZGl0aW9ucyBPZiBVc2UKK01heSwgMjAwMgorQ29weXJpZ2h0ICYjMTY5OyAyMDAyLiBPQ0xDIE9ubGluZSBDb21wdXRlciBMaWJyYXJ5IENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK1BMRUFTRSBSRUFEIFRISVMgRE9DVU1FTlQgQ0FSRUZVTExZLiBCWSBET1dOTE9BRElORyBPUiBVU0lORyBUSEUgQ09ERSBCQVNFIEFORC9PUiBET0NVTUVOVEFUSU9OIEFDQ09NUEFOWUlORyBUSElTIExJQ0VOU0UgKFRIRSAiTGljZW5zZSIpLCBZT1UgQUdSRUUgVE8gVEhFIEZPTExPV0lORyBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UuCisKK1NlY3Rpb24gMS4gWW91ciBSaWdodHMKKworU3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBPQ0xDIE9mZmljZSBvZiBSZXNlYXJjaCAodGhlICJPcmlnaW5hbCBDb250cmlidXRvciIpIGFuZCBlYWNoIHN1YnNlcXVlbnQgY29udHJpYnV0b3IgKGNvbGxlY3RpdmVseSB3aXRoIHRoZSBPcmlnaW5hbCBDb250cmlidXRvciwgdGhlICJDb250cmlidXRvcnMiKSBoZXJlYnkgZ3JhbnQgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCBuby1jaGFyZ2UsIHRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGV4ZWN1dGUsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgYW5kIGRpc3RyaWJ1dGUgKGludGVybmFsbHkgYW5kIGV4dGVybmFsbHkpLCBmb3IgY29tbWVyY2lhbCBhbmQgbm9uY29tbWVyY2lhbCBwdXJwb3NlcywgdGhlIG9yaWdpbmFsIGNvZGUgY29udHJpYnV0ZWQgYnkgT3JpZ2luYWwgQ29udHJpYnV0b3IgYW5kIGFsbCBNb2RpZmljYXRpb25zIChjb2xsZWN0aXZlbHkgY2FsbGVkIHRoZSAiUHJvZ3JhbSIpLgorCitTZWN0aW9uIDIuIERlZmluaXRpb25zCisKK0EgIk1vZGlmaWNhdGlvbiIgdG8gdGhlIFByb2dyYW0gaXMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGFueSBmaWxlIG9mIHRoZSBQcm9ncmFtIGFuZCBhbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgUHJvZ3JhbS4gSWYgeW91IG1ha2UgYSBNb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXh0ZXJuYWxseSB5b3UgYXJlIGEgIkNvbnRyaWJ1dG9yLiIgVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBtdXN0IGJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgaW5jbHVkaW5nIHRob3NlIGluIFNlY3Rpb24gMyBiZWxvdy4KKworQSAiQ29tYmluZWQgV29yayIgcmVzdWx0cyBmcm9tIGNvbWJpbmluZyBhbmQgaW50ZWdyYXRpbmcgYWxsIG9yIHBhcnRzIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgY29kZS4gQSBDb21iaW5lZCBXb3JrIG1heSBiZSB0aG91Z2h0IG9mIGFzIGhhdmluZyBtdWx0aXBsZSBwYXJlbnRzIG9yIGJlaW5nIHJlc3VsdCBvZiBtdWx0aXBsZSBsaW5lcyBvZiBjb2RlIGRldmVsb3BtZW50LgorCitTZWN0aW9uIDMuIERpc3RyaWJ1dGlvbiBMaWNlbnNpbmcgVGVybXMKKworQS4gR2VuZXJhbCBSZXF1aXJlbWVudHMKK0V4Y2VwdCBhcyBuZWNlc3NhcnkgdG8gcmVjb2duaXplIHRoaXJkLXBhcnR5IHJpZ2h0cyBvciB0aGlyZC1wYXJ0eSByZXN0cmljdGlvbiAoc2VlIGJlbG93KSwgYSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYW55IG9mIHRoZSBmb3JtcyBsaXN0ZWQgYmVsb3cgbXVzdCBub3QgcHV0IGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50JiM4MjE3O3MgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKworQXMgYSBDb250cmlidXRvciwgeW91IHJlcHJlc2VudCB0aGF0IHlvdXIgTW9kaWZpY2F0aW9uKHMpIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZCwgdG8gdGhlIGJlc3Qgb2YgeW91ciBrbm93bGVkZ2UsIG5vIHRoaXJkIHBhcnR5IGhhcyBhbnkgY2xhaW0gKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcykgcmVsYXRpbmcgdG8geW91ciBNb2RpZmljYXRpb24ocykuIFlvdSByZXByZXNlbnQgdGhhdCBlYWNoIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBpbmNsdWRlcyBjb21wbGV0ZSBkZXRhaWxzIG9mIGFueSB0aGlyZC1wYXJ0eSByaWdodCBvciBvdGhlciB0aGlyZC1wYXJ0eSByZXN0cmljdGlvbiBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnQgb2YgeW91ciBNb2RpZmljYXRpb24gKGluY2x1ZGluZyBhIGNvcHkgb2YgYW55IGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQpLgorCitUaGUgUHJvZ3JhbSBtdXN0IGJlIGRpc3RyaWJ1dGVkIHdpdGhvdXQgY2hhcmdlIGJleW9uZCB0aGUgY29zdHMgb2YgcGh5c2ljYWxseSB0cmFuc2ZlcnJpbmcgdGhlIGZpbGVzIHRvIHRoZSByZWNpcGllbnQuCisKK1RoaXMgV2FycmFudHkgRGlzY2xhaW1lci9MaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBtdXN0IGJlIHByb21pbmVudGx5IGRpc3BsYXllZCB3aXRoIGV2ZXJ5IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybToKKworWU9VIEFHUkVFIFRIQVQgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgKEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQpLiBBQ0NPUkRJTkdMWSwgT0NMQyBNQUtFUyBOTyBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMgT1IgR1VBUkFOVEVFUywgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMgT1IgR1VBUkFOVEVFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLCBBUyBUTzogKEEpIFRIRSBGVU5DVElPTkFMSVRZIE9SIE5PTklORlJJTkdFTUVOVCBPRiBQUk9HUkFNLCBBTlkgTU9ESUZJQ0FUSU9OLCBBIENPTUJJTkVEIFdPUksgT1IgQU4gQUdHUkVHQVRFIFdPUks7IE9SIChCKSBUSEUgUkVTVUxUUyBPRiBBTlkgUFJPSkVDVCBVTkRFUlRBS0VOIFVTSU5HIFRIRSBQUk9HUkFNLCBBTlkgTU9ESUZJQ0FUSU9OLCBBIENPTUJJTkVEIFdPUksgT1IgQU4gQUdHUkVHQVRFIFdPUksuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIE9SIEFOWSBPVEhFUiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEUgUFJPR1JBTSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFlPVSBIRVJFQlkgV0FJVkUgQU5ZIENMQUlNUyBGT1IgREFNQUdFUyBPRiBBTlkgS0lORCBBR0FJTlNUIENPTlRSSUJVVE9SUyBXSElDSCBNQVkgUkVTVUxUIEZST00gWU9VUiBVU0UgT0YgVEhFIFBST0dSQU0uCisKK0IuIFJlcXVpcmVtZW50cyBmb3IgYSBEaXN0cmlidXRpb24gb2YgTW9kaWZpYWJsZSBDb2RlCitJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBhIGZvcm0gdG8gd2hpY2ggdGhlIHJlY2lwaWVudCBjYW4gbWFrZSBNb2RpZmljYXRpb25zIChlLmcuIHNvdXJjZSBjb2RlKSwgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhcHBseSB0byB1c2UgYnkgcmVjaXBpZW50LiBJbiBhZGRpdGlvbiwgZWFjaCBzb3VyY2UgYW5kIGRhdGEgZmlsZSBvZiB0aGUgUHJvZ3JhbSBhbmQgYW55IE1vZGlmaWNhdGlvbiB5b3UgZGlzdHJpYnV0ZSBtdXN0IGNvbnRhaW4gdGhlIGZvbGxvd2luZyBub3RpY2U6CisKKyJDb3B5cmlnaHQgKGMpIDIwMDAtIChpbnNlcnQgdGhlbiBjdXJyZW50IHllYXIpIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUsIGFzIHVwZGF0ZWQgZnJvbSB0aW1lIHRvIHRpbWUgYnkgdGhlIE9DTEMgT2ZmaWNlIG9mIFJlc2VhcmNoLCBhcmUgc3ViamVjdCB0byBPQ0xDIFJlc2VhcmNoIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGN1cnJlbnQgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vcHVybC5vY2xjLm9yZy9vY2xjL3Jlc2VhcmNoL09SUEwvLiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIE9DTEMgUmVzZWFyY2guIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE9DTEMgUmVzZWFyY2gsIHBsZWFzZSBzZWUgaHR0cDovL3d3dy5vY2xjLm9yZy9yZXNlYXJjaC8uIFRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fIF9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIgorCitDLiBSZXF1aXJlbWVudHMgZm9yIGEgRGlzdHJpYnV0aW9uIG9mIE5vbi1tb2RpZmlhYmxlIENvZGUKK0lmIHlvdSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGEgZm9ybSB0byB3aGljaCB0aGUgcmVjaXBpZW50IGNhbm5vdCBtYWtlIE1vZGlmaWNhdGlvbnMgKGUuZy4gb2JqZWN0IGNvZGUpLCB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFwcGx5IHRvIHVzZSBieSByZWNpcGllbnQgYW5kIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgaW4gYXBwcm9wcmlhdGUgYW5kIGNvbnNwaWN1b3VzIGxvY2F0aW9uczoKKworIkNvcHlyaWdodCAoYykgMjAwMC0gKGluc2VydCB0aGVuIGN1cnJlbnQgeWVhcikgT0NMQyBPbmxpbmUgQ29tcHV0ZXIgTGlicmFyeSBDZW50ZXIsIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iCisKK0luIGFkZGl0aW9uLCB0aGUgc291cmNlIGNvZGUgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIHRoZSBvYmplY3QgY29kZSBkaXN0cmlidXRpb24gb3IgdGhlIGRpc3RyaWJ1dG9yIG11c3QgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgdG8gdGhlIHJlY2lwaWVudCB1cG9uIHJlcXVlc3QuCisKK0QuIFJlcXVpcmVtZW50cyBmb3IgYSBDb21iaW5lZCBXb3JrIERpc3RyaWJ1dGlvbgorRGlzdHJpYnV0aW9ucyBvZiBDb21iaW5lZCBXb3JrcyBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFuZCBtdXN0IGJlIG1hZGUgYXQgbm8gY2hhcmdlIHRvIHRoZSByZWNpcGllbnQgYmV5b25kIHRoZSBjb3N0cyBvZiBwaHlzaWNhbGx5IHRyYW5zZmVycmluZyB0aGUgZmlsZXMgdG8gcmVjaXBpZW50LgorCitBIENvbWJpbmVkIFdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIGVpdGhlciBtb2RpZmlhYmxlIG9yIG5vbi1tb2RpZmlhYmxlIGNvZGUuIFRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLkIgb3IgMy5DIGFib3ZlIChhcyBhcHByb3ByaWF0ZSkgYXBwbHkgdG8gc3VjaCBkaXN0cmlidXRpb25zLgorCitBbiAiQWdncmVnYXRlIFdvcmsiIGlzIHdoZW4gdGhlIFByb2dyYW0gZXhpc3RzLCB3aXRob3V0IGludGVncmF0aW9uLCB3aXRoIG90aGVyIHByb2dyYW1zIG9uIGEgc3RvcmFnZSBtZWRpdW0uIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBwb3J0aW9ucyBvZiBhbiBBZ2dyZWdhdGUgV29yayB3aGljaCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIGRlZmluaXRpb24gb2YgIlByb2dyYW0iIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgZm9yYmlkZGVuIGZyb20gc2VsbGluZyBhbiBBZ2dyZWdhdGUgV29yay4gSG93ZXZlciwgdGhlIFByb2dyYW0gY29udGFpbmVkIGluIGFuIEFnZ3JlZ2F0ZSBXb3JrIGlzIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBBbHNvLCBzaG91bGQgdGhlIFByb2dyYW0gYmUgZXh0cmFjdGVkIGZyb20gYW4gQWdncmVnYXRlIFdvcmssIHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSB1c2Ugb2YgdGhlIFByb2dyYW0gYXBhcnQgZnJvbSB0aGUgQWdncmVnYXRlIFdvcmsuCisKK1NlY3Rpb24gNC4gTGljZW5zZSBHcmFudAorCitGb3IgcHVycG9zZXMgb2YgcGVybWl0dGluZyB1c2Ugb2YgeW91ciBNb2RpZmljYXRpb25zIGJ5IE9DTEMgYW5kIG90aGVyIGxpY2Vuc2VlcyBoZXJldW5kZXIsIHlvdSBoZXJlYnkgZ3JhbnQgdG8gT0NMQyBhbmQgc3VjaCBvdGhlciBsaWNlbnNlZXMgdGhlIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCB0cmFuc2ZlcmFibGUsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZXhlY3V0ZSwgY29weSwgYWx0ZXIsIGRlbGV0ZSwgbW9kaWZ5LCBhZGFwdCwgY2hhbmdlLCByZXZpc2UsIGVuaGFuY2UsIGRldmVsb3AsIHB1YmxpY2x5IGRpc3BsYXksIGRpc3RyaWJ1dGUgKGludGVybmFsbHkgYW5kIGV4dGVybmFsbHkpIGFuZC9vciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB5b3VyIE1vZGlmaWNhdGlvbnMgKGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YpIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVzZSBUZXJtcy4gVGhpcyBTZWN0aW9uIDQgc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgZm9yIGFueSByZWFzb24uCisKK1NlY3Rpb24gNS4gVGVybWluYXRpb24gb2YgUmlnaHRzCisKK1RoaXMgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlICh3aXRoIHJlc3BlY3QgdG8gdGhlIGdyYW50IGZyb20gYSBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yKSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZXMgZm9yIGFueSBlbnRpdHkgdGhhdCBpbml0aWF0ZXMgbGVnYWwgYWN0aW9uIGZvciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50ICh3aXRoIHJlc3BlY3QgdG8gdGhlIFByb2dyYW0pIGFnYWluc3Qgc3VjaCBDb250cmlidXRvciBhcyBvZiB0aGUgaW5pdGlhdGlvbiBvZiBzdWNoIGFjdGlvbi4KKworSWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhpcyBMaWNlbnNlLCB5b3VyIHJpZ2h0cyAoYnV0IG5vdCB5b3VyIG9ibGlnYXRpb25zKSB1bmRlciB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHlvdSBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBub25jb21wbGlhbmNlLiBBbGwgc3VibGljZW5zZXMgZ3JhbnRlZCBieSB5b3Ugd2hpY2ggcHJlZXhpc3Qgc3VjaCB0ZXJtaW5hdGlvbiBhbmQgYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBzdWNoIHRlcm1pbmF0aW9uLgorCitTZWN0aW9uIDYuIE90aGVyIFRlcm1zCisKK0V4Y2VwdCBmb3IgdGhlIGNvcHlyaWdodCBub3RpY2VzIHJlcXVpcmVkIGFib3ZlLCB5b3UgbWF5IG5vdCB1c2UgYW55IHRyYWRlbWFyayBvZiBhbnkgb2YgdGhlIENvbnRyaWJ1dG9ycyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgdGhlIHJlbGV2YW50IENvbnRyaWJ1dG9yLiBZb3UgYWdyZWUgbm90IHRvIHJlbW92ZSwgYWx0ZXIgb3Igb2JzY3VyZSBhbnkgY29weXJpZ2h0IG9yIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0cyBub3RpY2UgY29udGFpbmVkIGluIHRoZSBQcm9ncmFtLgorCitBbGwgdHJhbnNmZXJzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2Ygc2hhbGwgYmUgbWFkZSBpbiBjb21wbGlhbmNlIHdpdGggVS5TLiBpbXBvcnQvZXhwb3J0IHJlZ3VsYXRpb25zIG9yIG90aGVyIHJlc3RyaWN0aW9ucyBvZiB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlLCBhcyB3ZWxsIGFzIG90aGVyIHNpbWlsYXIgdHJhZGUgb3IgY29tbWVyY2UgcmVzdHJpY3Rpb25zIHdoaWNoIG1pZ2h0IGFwcGx5LgorCitBbnkgcGF0ZW50IG9idGFpbmVkIGJ5IGFueSBwYXJ0eSBjb3ZlcmluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mIG11c3QgaW5jbHVkZSBhIHByb3Zpc2lvbiBwcm92aWRpbmcgZm9yIHRoZSBmcmVlLCBwZXJwZXR1YWwgYW5kIHVucmVzdHJpY3RlZCBjb21tZXJjaWFsIGFuZCBub25jb21tZXJjaWFsIHVzZSBieSBhbnkgdGhpcmQgcGFydHkuCisKK0lmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3Igc2V0dGxlbWVudCByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50IG9yIGFueSBvdGhlciBjYXVzZSBvZiBhY3Rpb24sIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91IHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHN1Y2ggY29uZGl0aW9ucyBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBzbyBhcyB0byBzaW11bHRhbmVvdXNseSBzYXRpc2Z5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBzdWNoIG90aGVyIGNvbmRpdGlvbnMsIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHlvdSBjb3VsZCBub3Qgc2F0aXNmeSBib3RoIHRoZSBwYXRlbnQgbGljZW5zZSBhbmQgdGhpcyBMaWNlbnNlLCBhbmQgeW91IHdvdWxkIGJlIHJlcXVpcmVkIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIHlvdSBsZWFybiBvZiBhIHRoaXJkIHBhcnR5IGNsYWltIG9yIG90aGVyIHJlc3RyaWN0aW9uIHJlbGF0aW5nIHRvIGEgUHJvZ3JhbSB5b3UgaGF2ZSBhbHJlYWR5IGRpc3RyaWJ1dGVkIHlvdSBzaGFsbCBwcm9tcHRseSByZWRvIHlvdXIgUHJvZ3JhbSB0byBhZGRyZXNzIHRoZSBpc3N1ZSBhbmQgdGFrZSBhbGwgcmVhc29uYWJsZSBzdGVwcyB0byBpbmZvcm0gdGhvc2Ugd2hvIG1heSBoYXZlIHJlY2VpdmVkIHRoZSBQcm9ncmFtIGF0IGlzc3VlLiBBbiBleGFtcGxlIG9mIGFuIGFwcHJvcHJpYXRlIHJlYXNvbmFibGUgc3RlcCB0byBpbmZvcm0gd291bGQgYmUgcG9zdGluZyBhbiBhbm5vdW5jZW1lbnQgb24gYW4gYXBwcm9wcmlhdGUgd2ViIGJ1bGxldGluIGJvYXJkLgorCitUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYXJlIGRlZW1lZCB0byBiZSBzZXZlcmFibGUsIGFuZCB0aGUgaW52YWxpZGl0eSBvciB1bmVuZm9yY2VhYmlsaXR5IG9mIGFueSBwcm92aXNpb24gc2hhbGwgbm90IGFmZmVjdCBvciBpbXBhaXIgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIHdoaWNoIHNoYWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gSW4gc3Vic3RpdHV0aW9uIGZvciBhbnkgcHJvdmlzaW9uIGhlbGQgdW5sYXdmdWwsIHRoZXJlIHNoYWxsIGJlIHN1YnN0aXR1dGVkIGEgcHJvdmlzaW9uIG9mIHNpbWlsYXIgaW1wb3J0IHJlZmxlY3RpbmcgdGhlIG9yaWdpbmFsIGludGVudCBvZiB0aGUgcGFydGllcyBoZXJldG8gdG8gdGhlIGV4dGVudCBwZXJtaXNzaWJsZSB1bmRlciBsYXcuCisKK1RoZSBPcmlnaW5hbCBDb250cmlidXRvciBmcm9tIHRpbWUgdG8gdGltZSBtYXkgY2hhbmdlIHRoaXMgTGljZW5zZSwgYW5kIHRoZSBhbWVuZGVkIGxpY2Vuc2Ugd2lsbCBhcHBseSB0byBhbGwgY29waWVzIG9mIHRoZSBQcm9ncmFtIGRvd25sb2FkZWQgYWZ0ZXIgdGhlIG5ldyBsaWNlbnNlIGlzIHBvc3RlZC4gVGhpcyBMaWNlbnNlIGdyYW50cyBvbmx5IHRoZSByaWdodHMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4gYW5kIHByb3ZpZGVzIHlvdSB3aXRoIG5vIGltcGxpZWQgcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yLgorCitUaGlzIExpY2Vuc2UgaXMgdGhlIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUgc3RhdGVtZW50IG9mIHRoZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YgYW5kIG1heSBub3QgYmUgYW1lbmRlZCBleGNlcHQgYnkgdGhlIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE9oaW8gYW5kIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIHdpdGhvdXQgcmVnYXJkIHRvIHByaW5jaXBsZXMgb2YgY29uZmxpY3RzIG9mIGxhdy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0RiTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRGJMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWYxNDRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0RiTC0xLjAKQEAgLTAsMCArMSw1NDMgQEAKKworIyMgT0RDIE9wZW4gRGF0YWJhc2UgTGljZW5zZSAoT0RiTCkKKworIyMjIFByZWFtYmxlCisKK1RoZSBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpIGlzIGEgbGljZW5zZSBhZ3JlZW1lbnQgaW50ZW5kZWQgdG8KK2FsbG93IHVzZXJzIHRvIGZyZWVseSBzaGFyZSwgbW9kaWZ5LCBhbmQgdXNlIHRoaXMgRGF0YWJhc2Ugd2hpbGUKK21haW50YWluaW5nIHRoaXMgc2FtZSBmcmVlZG9tIGZvciBvdGhlcnMuIE1hbnkgZGF0YWJhc2VzIGFyZSBjb3ZlcmVkIGJ5Citjb3B5cmlnaHQsIGFuZCB0aGVyZWZvcmUgdGhpcyBkb2N1bWVudCBsaWNlbnNlcyB0aGVzZSByaWdodHMuIFNvbWUKK2p1cmlzZGljdGlvbnMsIG1haW5seSBpbiB0aGUgRXVyb3BlYW4gVW5pb24sIGhhdmUgc3BlY2lmaWMgcmlnaHRzIHRoYXQKK2NvdmVyIGRhdGFiYXNlcywgYW5kIHNvIHRoZSBPRGJMIGFkZHJlc3NlcyB0aGVzZSByaWdodHMsIHRvby4gRmluYWxseSwKK3RoZSBPRGJMIGlzIGFsc28gYW4gYWdyZWVtZW50IGluIGNvbnRyYWN0IGZvciB1c2VycyBvZiB0aGlzIERhdGFiYXNlIHRvCithY3QgaW4gY2VydGFpbiB3YXlzIGluIHJldHVybiBmb3IgYWNjZXNzaW5nIHRoaXMgRGF0YWJhc2UuCisKK0RhdGFiYXNlcyBjYW4gY29udGFpbiBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBjb250ZW50IChpbWFnZXMsCithdWRpb3Zpc3VhbCBtYXRlcmlhbCwgYW5kIHNvdW5kcyBhbGwgaW4gdGhlIHNhbWUgZGF0YWJhc2UsIGZvciBleGFtcGxlKSwKK2FuZCBzbyB0aGUgT0RiTCBvbmx5IGdvdmVybnMgdGhlIHJpZ2h0cyBvdmVyIHRoZSBEYXRhYmFzZSwgYW5kIG5vdCB0aGUKK2NvbnRlbnRzIG9mIHRoZSBEYXRhYmFzZSBpbmRpdmlkdWFsbHkuIExpY2Vuc29ycyBzaG91bGQgdXNlIHRoZSBPRGJMCit0b2dldGhlciB3aXRoIGFub3RoZXIgbGljZW5zZSBmb3IgdGhlIGNvbnRlbnRzLCBpZiB0aGUgY29udGVudHMgaGF2ZSBhCitzaW5nbGUgc2V0IG9mIHJpZ2h0cyB0aGF0IHVuaWZvcm1seSBjb3ZlcnMgYWxsIG9mIHRoZSBjb250ZW50cy4gSWYgdGhlCitjb250ZW50cyBoYXZlIG11bHRpcGxlIHNldHMgb2YgZGlmZmVyZW50IHJpZ2h0cywgTGljZW5zb3JzIHNob3VsZAorZGVzY3JpYmUgd2hhdCByaWdodHMgZ292ZXJuIHdoYXQgY29udGVudHMgdG9nZXRoZXIgaW4gdGhlIGluZGl2aWR1YWwKK3JlY29yZCBvciBpbiBzb21lIG90aGVyIHdheSB0aGF0IGNsYXJpZmllcyB3aGF0IHJpZ2h0cyBhcHBseS4gCisKK1NvbWV0aW1lcyB0aGUgY29udGVudHMgb2YgYSBkYXRhYmFzZSwgb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiwgY2FuIGJlCitjb3ZlcmVkIGJ5IG90aGVyIHJpZ2h0cyBub3QgYWRkcmVzc2VkIGhlcmUgKHN1Y2ggYXMgcHJpdmF0ZSBjb250cmFjdHMsCit0cmFkZSBtYXJrIG92ZXIgdGhlIG5hbWUsIG9yIHByaXZhY3kgcmlnaHRzIC8gZGF0YSBwcm90ZWN0aW9uIHJpZ2h0cworb3ZlciBpbmZvcm1hdGlvbiBpbiB0aGUgY29udGVudHMpLCBhbmQgc28geW91IGFyZSBhZHZpc2VkIHRoYXQgeW91IG1heQoraGF2ZSB0byBjb25zdWx0IG90aGVyIGRvY3VtZW50cyBvciBjbGVhciBvdGhlciByaWdodHMgYmVmb3JlIGRvaW5nCithY3Rpdml0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKworLS0tLS0tCisKK1RoZSBMaWNlbnNvciAoYXMgZGVmaW5lZCBiZWxvdykgCisKK2FuZCAKKworWW91IChhcyBkZWZpbmVkIGJlbG93KSAKKworYWdyZWUgYXMgZm9sbG93czogCisKKyMjIyAxLjAgRGVmaW5pdGlvbnMgb2YgQ2FwaXRhbGlzZWQgV29yZHMKKworIkNvbGxlY3RpdmUgRGF0YWJhc2UiICYjODIxMTsgTWVhbnMgdGhpcyBEYXRhYmFzZSBpbiB1bm1vZGlmaWVkIGZvcm0gYXMgcGFydAorb2YgYSBjb2xsZWN0aW9uIG9mIGluZGVwZW5kZW50IGRhdGFiYXNlcyBpbiB0aGVtc2VsdmVzIHRoYXQgdG9nZXRoZXIgYXJlCithc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZQorRGF0YWJhc2Ugd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgRGF0YWJhc2UuCisKKyJDb252ZXkiICYjODIxMTsgQXMgYSB2ZXJiLCBtZWFucyBVc2luZyB0aGUgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwKK29yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSBpbiBhbnkgd2F5IHRoYXQgZW5hYmxlcworYSBQZXJzb24gdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcyBvZiB0aGUgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlCitEYXRhYmFzZS4gIENvbnZleWluZyBkb2VzIG5vdCBpbmNsdWRlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2ggYQorY29tcHV0ZXIgbmV0d29yaywgb3IgY3JlYXRpbmcgYW5kIFVzaW5nIGEgUHJvZHVjZWQgV29yaywgd2hlcmUgbm8KK3RyYW5zZmVyIG9mIGEgY29weSBvZiB0aGUgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIG9jY3Vycy4KKyJDb250ZW50cyIgJiM4MjExOyBUaGUgY29udGVudHMgb2YgdGhpcyBEYXRhYmFzZSwgd2hpY2ggaW5jbHVkZXMgdGhlCitpbmZvcm1hdGlvbiwgaW5kZXBlbmRlbnQgd29ya3MsIG9yIG90aGVyIG1hdGVyaWFsIGNvbGxlY3RlZCBpbnRvIHRoZQorRGF0YWJhc2UuIEZvciBleGFtcGxlLCB0aGUgY29udGVudHMgb2YgdGhlIERhdGFiYXNlIGNvdWxkIGJlIGZhY3R1YWwKK2RhdGEgb3Igd29ya3Mgc3VjaCBhcyBpbWFnZXMsIGF1ZGlvdmlzdWFsIG1hdGVyaWFsLCB0ZXh0LCBvciBzb3VuZHMuCisKKyJEYXRhYmFzZSIgJiM4MjExOyBBIGNvbGxlY3Rpb24gb2YgbWF0ZXJpYWwgKHRoZSBDb250ZW50cykgYXJyYW5nZWQgaW4gYQorc3lzdGVtYXRpYyBvciBtZXRob2RpY2FsIHdheSBhbmQgaW5kaXZpZHVhbGx5IGFjY2Vzc2libGUgYnkgZWxlY3Ryb25pYworb3Igb3RoZXIgbWVhbnMgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisiRGF0YWJhc2UgRGlyZWN0aXZlIiAmIzgyMTE7IE1lYW5zIERpcmVjdGl2ZSA5Ni85L0VDIG9mIHRoZSBFdXJvcGVhbgorUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbgorb2YgZGF0YWJhc2VzLCBhcyBhbWVuZGVkIG9yIHN1Y2NlZWRlZC4KKworIkRhdGFiYXNlIFJpZ2h0IiAmIzgyMTE7IE1lYW5zIHJpZ2h0cyByZXN1bHRpbmcgZnJvbSB0aGUgQ2hhcHRlciBJSUkgKCJzdWkKK2dlbmVyaXMiKSByaWdodHMgaW4gdGhlIERhdGFiYXNlIERpcmVjdGl2ZSAoYXMgYW1lbmRlZCBhbmQgYXMgdHJhbnNwb3NlZAorYnkgbWVtYmVyIHN0YXRlcyksIHdoaWNoIGluY2x1ZGVzIHRoZSBFeHRyYWN0aW9uIGFuZCBSZS11dGlsaXNhdGlvbiBvZgordGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMsIGFzIHdlbGwgYXMgYW55IHNpbWlsYXIKK3JpZ2h0cyBhdmFpbGFibGUgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlciBTZWN0aW9uIDEwLjQuIAorCisiRGVyaXZhdGl2ZSBEYXRhYmFzZSIgJiM4MjExOyBNZWFucyBhIGRhdGFiYXNlIGJhc2VkIHVwb24gdGhlIERhdGFiYXNlLCBhbmQKK2luY2x1ZGVzIGFueSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgYXJyYW5nZW1lbnQsIG1vZGlmaWNhdGlvbiwgb3IgYW55CitvdGhlciBhbHRlcmF0aW9uIG9mIHRoZSBEYXRhYmFzZSBvciBvZiBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cy4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBFeHRyYWN0aW5nIG9yCitSZS11dGlsaXNpbmcgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgaW4gYSBuZXcKK0RhdGFiYXNlLgorCisiRXh0cmFjdGlvbiIgJiM4MjExOyBNZWFucyB0aGUgcGVybWFuZW50IG9yIHRlbXBvcmFyeSB0cmFuc2ZlciBvZiBhbGwgb3IgYQorU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgdG8gYW5vdGhlciBtZWRpdW0gYnkgYW55IG1lYW5zIG9yIGluCithbnkgZm9ybS4KKworIkxpY2Vuc2UiICYjODIxMTsgTWVhbnMgdGhpcyBsaWNlbnNlIGFncmVlbWVudCBhbmQgaXMgYm90aCBhIGxpY2Vuc2Ugb2YgcmlnaHRzCitzdWNoIGFzIGNvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzIGFuZCBhbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QuCisKKyJMaWNlbnNvciIgJiM4MjExOyBNZWFucyB0aGUgUGVyc29uIHRoYXQgb2ZmZXJzIHRoZSBEYXRhYmFzZSB1bmRlciB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZS4gCisKKyJQZXJzb24iICYjODIxMTsgTWVhbnMgYSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiBvciBhIGJvZHkgb2YgcGVyc29ucworY29ycG9yYXRlIG9yIGluY29ycG9yYXRlLgorCisiUHJvZHVjZWQgV29yayIgJiM4MjExOyAgYSB3b3JrIChzdWNoIGFzIGFuIGltYWdlLCBhdWRpb3Zpc3VhbCBtYXRlcmlhbCwgdGV4dCwKK29yIHNvdW5kcykgcmVzdWx0aW5nIGZyb20gdXNpbmcgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUKK0NvbnRlbnRzICh2aWEgYSBzZWFyY2ggb3Igb3RoZXIgcXVlcnkpIGZyb20gdGhpcyBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhpcyBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZS4gIAorCisiUHVibGljbHkiICYjODIxMTsgbWVhbnMgdG8gUGVyc29ucyBvdGhlciB0aGFuIFlvdSBvciB1bmRlciBZb3VyIGNvbnRyb2wgYnkKK2VpdGhlciBtb3JlIHRoYW4gNTAlIG93bmVyc2hpcCBvciBieSB0aGUgcG93ZXIgdG8gZGlyZWN0IHRoZWlyCithY3Rpdml0aWVzIChzdWNoIGFzIGNvbnRyYWN0aW5nIHdpdGggYW4gaW5kZXBlbmRlbnQgY29uc3VsdGFudCkuIAorCisiUmUtdXRpbGlzYXRpb24iICYjODIxMTsgbWVhbnMgYW55IGZvcm0gb2YgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGFsbAorb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBieSB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvcGllcywgYnkKK3JlbnRpbmcsIGJ5IG9ubGluZSBvciBvdGhlciBmb3JtcyBvZiB0cmFuc21pc3Npb24uCisKKyJTdWJzdGFudGlhbCIgJiM4MjExOyBNZWFucyBzdWJzdGFudGlhbCBpbiB0ZXJtcyBvZiBxdWFudGl0eSBvciBxdWFsaXR5IG9yIGEKK2NvbWJpbmF0aW9uIG9mIGJvdGguIFRoZSByZXBlYXRlZCBhbmQgc3lzdGVtYXRpYyBFeHRyYWN0aW9uIG9yCitSZS11dGlsaXNhdGlvbiBvZiBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cyBtYXkgYW1vdW50IHRvIHRoZQorRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLgorCisiVXNlIiAmIzgyMTE7IEFzIGEgdmVyYiwgbWVhbnMgZG9pbmcgYW55IGFjdCB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgY29weXJpZ2h0CitvciBEYXRhYmFzZSBSaWdodHMgd2hldGhlciBpbiB0aGUgb3JpZ2luYWwgbWVkaXVtIG9yIGFueSBvdGhlcjsgYW5kCitpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24gZGlzdHJpYnV0aW5nLCBjb3B5aW5nLCBwdWJsaWNseSBwZXJmb3JtaW5nLAorcHVibGljbHkgZGlzcGxheWluZywgYW5kIHByZXBhcmluZyBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEYXRhYmFzZSwgYXMKK3dlbGwgYXMgbW9kaWZ5aW5nIHRoZSBEYXRhYmFzZSBhcyBtYXkgYmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIHVzZSBpdAoraW4gYSBkaWZmZXJlbnQgbW9kZSBvciBmb3JtYXQuIAorCisiWW91IiAmIzgyMTE7IE1lYW5zIGEgUGVyc29uIGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdAorcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUKK0RhdGFiYXNlLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0bworZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorCitXb3JkcyBpbiB0aGUgc2luZ3VsYXIgaW5jbHVkZSB0aGUgcGx1cmFsIGFuZCB2aWNlIHZlcnNhLgorCisjIyMgMi4wIFdoYXQgdGhpcyBMaWNlbnNlIGNvdmVycworCisyLjEuIExlZ2FsIGVmZmVjdCBvZiB0aGlzIGRvY3VtZW50LiBUaGlzIExpY2Vuc2UgaXM6CisKKyAgYS4gQSBsaWNlbnNlIG9mIGFwcGxpY2FibGUgY29weXJpZ2h0IGFuZCBuZWlnaGJvdXJpbmcgcmlnaHRzOworCisgIGIuIEEgbGljZW5zZSBvZiB0aGUgRGF0YWJhc2UgUmlnaHQ7IGFuZAorCisgIGMuIEFuIGFncmVlbWVudCBpbiBjb250cmFjdCBiZXR3ZWVuIFlvdSBhbmQgdGhlIExpY2Vuc29yLgorCisyLjIgTGVnYWwgcmlnaHRzIGNvdmVyZWQuIFRoaXMgTGljZW5zZSBjb3ZlcnMgdGhlIGxlZ2FsIHJpZ2h0cyBpbiB0aGUKK0RhdGFiYXNlLCBpbmNsdWRpbmc6CisKKyAgYS4gQ29weXJpZ2h0LiBBbnkgY29weXJpZ2h0IG9yIG5laWdoYm91cmluZyByaWdodHMgaW4gdGhlIERhdGFiYXNlLgorICBUaGUgY29weXJpZ2h0IGxpY2Vuc2VkIGluY2x1ZGVzIGFueSBpbmRpdmlkdWFsIGVsZW1lbnRzIG9mIHRoZQorICBEYXRhYmFzZSwgYnV0IGRvZXMgbm90IGNvdmVyIHRoZSBjb3B5cmlnaHQgb3ZlciB0aGUgQ29udGVudHMKKyAgaW5kZXBlbmRlbnQgb2YgdGhpcyBEYXRhYmFzZS4gU2VlIFNlY3Rpb24gMi40IGZvciBkZXRhaWxzLiBDb3B5cmlnaHQKKyAgbGF3IHZhcmllcyBiZXR3ZWVuIGp1cmlzZGljdGlvbnMsIGJ1dCBpcyBsaWtlbHkgdG8gY292ZXI6IHRoZSBEYXRhYmFzZQorICBtb2RlbCBvciBzY2hlbWEsIHdoaWNoIGlzIHRoZSBzdHJ1Y3R1cmUsIGFycmFuZ2VtZW50LCBhbmQgb3JnYW5pc2F0aW9uCisgIG9mIHRoZSBEYXRhYmFzZSwgYW5kIGNhbiBhbHNvIGluY2x1ZGUgdGhlIERhdGFiYXNlIHRhYmxlcyBhbmQgdGFibGUKKyAgaW5kZXhlczsgdGhlIGRhdGEgZW50cnkgYW5kIG91dHB1dCBzaGVldHM7IGFuZCB0aGUgRmllbGQgbmFtZXMgb2YKKyAgQ29udGVudHMgc3RvcmVkIGluIHRoZSBEYXRhYmFzZTsKKworICBiLiBEYXRhYmFzZSBSaWdodHMuIERhdGFiYXNlIFJpZ2h0cyBvbmx5IGV4dGVuZCB0byB0aGUgRXh0cmFjdGlvbiBhbmQKKyAgUmUtdXRpbGlzYXRpb24gb2YgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMuCisgIERhdGFiYXNlIFJpZ2h0cyBjYW4gYXBwbHkgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNvcHlyaWdodCBvdmVyIHRoZQorICBEYXRhYmFzZS4gRGF0YWJhc2UgUmlnaHRzIGNhbiBhbHNvIGFwcGx5IHdoZW4gdGhlIENvbnRlbnRzIGFyZSByZW1vdmVkCisgIGZyb20gdGhlIERhdGFiYXNlIGFuZCBhcmUgc2VsZWN0ZWQgYW5kIGFycmFuZ2VkIGluIGEgd2F5IHRoYXQgd291bGQKKyAgbm90IGluZnJpbmdlIGFueSBhcHBsaWNhYmxlIGNvcHlyaWdodDsgYW5kCisKKyAgYy4gQ29udHJhY3QuIFRoaXMgaXMgYW4gYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCB0aGUgTGljZW5zb3IgZm9yCisgIGFjY2VzcyB0byB0aGUgRGF0YWJhc2UuIEluIHJldHVybiB5b3UgYWdyZWUgdG8gY2VydGFpbiBjb25kaXRpb25zIG9mCisgIHVzZSBvbiB0aGlzIGFjY2VzcyBhcyBvdXRsaW5lZCBpbiB0aGlzIExpY2Vuc2UuIAorCisyLjMgUmlnaHRzIG5vdCBjb3ZlcmVkLiAKKworICBhLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gY29tcHV0ZXIgcHJvZ3JhbXMgdXNlZCBpbiB0aGUgbWFraW5nCisgIG9yIG9wZXJhdGlvbiBvZiB0aGUgRGF0YWJhc2U7IAorCisgIGIuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgcGF0ZW50cyBvdmVyIHRoZSBDb250ZW50cyBvciB0aGUKKyAgRGF0YWJhc2U7IGFuZAorCisgIGMuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgdHJhZGVtYXJrcyBhc3NvY2lhdGVkIHdpdGggdGhlCisgIERhdGFiYXNlLiAKKworMi40IFJlbGF0aW9uc2hpcCB0byBDb250ZW50cyBpbiB0aGUgRGF0YWJhc2UuIFRoZSBpbmRpdmlkdWFsIGl0ZW1zIG9mCit0aGUgQ29udGVudHMgY29udGFpbmVkIGluIHRoaXMgRGF0YWJhc2UgbWF5IGJlIGNvdmVyZWQgYnkgb3RoZXIgcmlnaHRzLAoraW5jbHVkaW5nIGNvcHlyaWdodCwgcGF0ZW50LCBkYXRhIHByb3RlY3Rpb24sIHByaXZhY3ksIG9yIHBlcnNvbmFsaXR5CityaWdodHMsIGFuZCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHJpZ2h0cyAob3RoZXIgdGhhbiBEYXRhYmFzZQorUmlnaHRzIG9yIGluIGNvbnRyYWN0KSBpbiBpbmRpdmlkdWFsIENvbnRlbnRzIGNvbnRhaW5lZCBpbiB0aGUgRGF0YWJhc2UuCitGb3IgZXhhbXBsZSwgaWYgdXNlZCBvbiBhIERhdGFiYXNlIG9mIGltYWdlcyAodGhlIENvbnRlbnRzKSwgdGhpcworTGljZW5zZSB3b3VsZCBub3QgYXBwbHkgdG8gY29weXJpZ2h0IG92ZXIgaW5kaXZpZHVhbCBpbWFnZXMsIHdoaWNoIGNvdWxkCitoYXZlIHRoZWlyIG93biBzZXBhcmF0ZSBsaWNlbnNlcywgb3Igb25lIHNpbmdsZSBsaWNlbnNlIGNvdmVyaW5nIGFsbCBvZgordGhlIHJpZ2h0cyBvdmVyIHRoZSBpbWFnZXMuICAKKworIyMjIDMuMCBSaWdodHMgZ3JhbnRlZAorCiszLjEgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgTGljZW5zb3IKK2dyYW50cyB0byBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgdGVybWluYWJsZSAoYnV0Citvbmx5IHVuZGVyIFNlY3Rpb24gOSkgbGljZW5zZSB0byBVc2UgdGhlIERhdGFiYXNlIGZvciB0aGUgZHVyYXRpb24gb2YKK2FueSBhcHBsaWNhYmxlIGNvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzLiBUaGVzZSByaWdodHMgZXhwbGljaXRseQoraW5jbHVkZSBjb21tZXJjaWFsIHVzZSwgYW5kIGRvIG5vdCBleGNsdWRlIGFueSBmaWVsZCBvZiBlbmRlYXZvdXIuIFRvCit0aGUgZXh0ZW50IHBvc3NpYmxlIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24sIHRoZXNlIHJpZ2h0cyBtYXkgYmUKK2V4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgY3JlYXRlZCBpbiB0aGUKK2Z1dHVyZS4gCisKK1RoZSByaWdodHMgZ3JhbnRlZCBjb3ZlciwgZm9yIGV4YW1wbGU6CisKKyAgYS4gRXh0cmFjdGlvbiBhbmQgUmUtdXRpbGlzYXRpb24gb2YgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZgorICB0aGUgQ29udGVudHM7CisKKyAgYi4gQ3JlYXRpb24gb2YgRGVyaXZhdGl2ZSBEYXRhYmFzZXM7CisKKyAgYy4gQ3JlYXRpb24gb2YgQ29sbGVjdGl2ZSBEYXRhYmFzZXM7CisKKyAgZC4gQ3JlYXRpb24gb2YgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudCByZXByb2R1Y3Rpb25zIGJ5IGFueSBtZWFucyBhbmQKKyAgaW4gYW55IGZvcm0sIGluIHdob2xlIG9yIGluIHBhcnQsIGluY2x1ZGluZyBvZiBhbnkgRGVyaXZhdGl2ZQorICBEYXRhYmFzZXMgb3IgYXMgYSBwYXJ0IG9mIENvbGxlY3RpdmUgRGF0YWJhc2VzOyBhbmQKKworICBlLiBEaXN0cmlidXRpb24sIGNvbW11bmljYXRpb24sIGRpc3BsYXksIGxlbmRpbmcsIG1ha2luZyBhdmFpbGFibGUsIG9yCisgIHBlcmZvcm1hbmNlIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIGFuZCBpbiBhbnkgZm9ybSwgaW4gd2hvbGUgb3IgaW4KKyAgcGFydCwgaW5jbHVkaW5nIG9mIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlIG9yIGFzIGEgcGFydCBvZiBDb2xsZWN0aXZlCisgIERhdGFiYXNlcy4KKworMy4yIENvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworICBhLiBOb24td2FpdmFibGUgY29tcHVsc29yeSBsaWNlbnNlIHNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4KKyAgd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvcgorICBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzCisgIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdQorICBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworCisgIGIuIFdhaXZhYmxlIGNvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluCisgIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IKKyAgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlCisgIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mCisgIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKKworICBjLiBWb2x1bnRhcnkgbGljZW5zZSBzY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0CisgIHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcworICBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcKKyAgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMKKyAgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuMyBUaGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IHRlcm1zLCBvciB0byBzdG9wCitkaXN0cmlidXRpbmcgb3IgbWFraW5nIGF2YWlsYWJsZSB0aGUgRGF0YWJhc2UsIGlzIHJlc2VydmVkLiBOb3RlIHRoYXQKK3RoaXMgRGF0YWJhc2UgbWF5IGJlIG11bHRpcGxlLWxpY2Vuc2VkLCBhbmQgc28gWW91IG1heSBoYXZlIHRoZSBjaG9pY2UKK29mIHVzaW5nIGFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciB0aGlzIERhdGFiYXNlLiBTdWJqZWN0IHRvIFNlY3Rpb24KKzEwLjQsIGFsbCBvdGhlciByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSByZXNlcnZlZC4KKworIyMjIDQuMCBDb25kaXRpb25zIG9mIFVzZQorCis0LjEgVGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBhcmUgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0bworWW91ciBjb21wbHlpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgb2YgdXNlLiBUaGVzZSBhcmUgaW1wb3J0YW50Citjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgYW5kIGlmIFlvdSBmYWlsIHRvIGZvbGxvdyB0aGVtLCBZb3Ugd2lsbCBiZQoraW4gbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcy4KKworNC4yIE5vdGljZXMuIElmIFlvdSBQdWJsaWNseSBDb252ZXkgdGhpcyBEYXRhYmFzZSwgYW55IERlcml2YXRpdmUKK0RhdGFiYXNlLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UsIHRoZW4gWW91CittdXN0OiAKKworICBhLiBEbyBzbyBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYW5vdGhlciBsaWNlbnNlCisgIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQuNDsKKworICBiLiBJbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKG9yLCBhcyBhcHBsaWNhYmxlLCBhIGxpY2Vuc2UKKyAgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNC40KSBvciBpdHMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpCisgIHdpdGggdGhlIERhdGFiYXNlIG9yIERlcml2YXRpdmUgRGF0YWJhc2UsIGluY2x1ZGluZyBib3RoIGluIHRoZQorICBEYXRhYmFzZSBvciBEZXJpdmF0aXZlIERhdGFiYXNlIGFuZCBpbiBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbjsgYW5kCisKKyAgYy4gS2VlcCBpbnRhY3QgYW55IGNvcHlyaWdodCBvciBEYXRhYmFzZSBSaWdodCBub3RpY2VzIGFuZCBub3RpY2VzCisgIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLgorCisgIGQuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgdGhlIHJlcXVpcmVkIG5vdGljZXMgaW4gYSBwYXJ0aWN1bGFyCisgIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSB0aGUgbm90aWNlcyBpbiBhCisgIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSB1c2VycyB3b3VsZCBiZSBsaWtlbHkgdG8KKyAgbG9vayBmb3IgaXQuCisKKzQuMyBOb3RpY2UgZm9yIHVzaW5nIG91dHB1dCAoQ29udGVudHMpLiBDcmVhdGluZyBhbmQgVXNpbmcgYSBQcm9kdWNlZAorV29yayBkb2VzIG5vdCByZXF1aXJlIHRoZSBub3RpY2UgaW4gU2VjdGlvbiA0LjIuIEhvd2V2ZXIsIGlmIHlvdQorUHVibGljbHkgVXNlIGEgUHJvZHVjZWQgV29yaywgWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBhc3NvY2lhdGVkIHdpdGgKK3RoZSBQcm9kdWNlZCBXb3JrIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBtYWtlIGFueSBQZXJzb24gdGhhdCB1c2VzLAordmlld3MsIGFjY2Vzc2VzLCBpbnRlcmFjdHMgd2l0aCwgb3IgaXMgb3RoZXJ3aXNlIGV4cG9zZWQgdG8gdGhlIFByb2R1Y2VkCitXb3JrIGF3YXJlIHRoYXQgQ29udGVudCB3YXMgb2J0YWluZWQgZnJvbSB0aGUgRGF0YWJhc2UsIERlcml2YXRpdmUKK0RhdGFiYXNlLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UsIGFuZCB0aGF0IGl0CitpcyBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgIGEuIEV4YW1wbGUgbm90aWNlLiBUaGUgZm9sbG93aW5nIHRleHQgd2lsbCBzYXRpc2Z5IG5vdGljZSB1bmRlcgorICBTZWN0aW9uIDQuMzoKKworICAgICAgICBDb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIERBVEFCQVNFIE5BTUUsIHdoaWNoIGlzIG1hZGUgYXZhaWxhYmxlCisgICAgICAgIGhlcmUgdW5kZXIgdGhlIE9wZW4gRGF0YWJhc2UgTGljZW5zZSAoT0RiTCkuCisKK0RBVEFCQVNFIE5BTUUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIERhdGFiYXNlIGFuZCBhCitoeXBlcmxpbmsgdG8gdGhlIFVSSSBvZiB0aGUgRGF0YWJhc2UuICJPcGVuIERhdGFiYXNlIExpY2Vuc2UiIHNob3VsZAorY29udGFpbiBhIGh5cGVybGluayB0byB0aGUgVVJJIG9mIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZS4gSWYKK2h5cGVybGlua3MgYXJlIG5vdCBwb3NzaWJsZSwgWW91IHNob3VsZCBpbmNsdWRlIHRoZSBwbGFpbiB0ZXh0IG9mIHRoZQorcmVxdWlyZWQgVVJJYHMgd2l0aCB0aGUgYWJvdmUgbm90aWNlLgorIAorNC40IFNoYXJlIGFsaWtlLiAKKworICBhLiBBbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSB0aGF0IFlvdSBQdWJsaWNseSBVc2UgbXVzdCBiZSBvbmx5IHVuZGVyCisgIHRoZSB0ZXJtcyBvZjogCisKKyAgICBpLiBUaGlzIExpY2Vuc2U7CisKKyAgICBpaS4gQSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGlzCisgICAgICBMaWNlbnNlOyBvcgorCisgICAgaWlpLiBBIGNvbXBhdGlibGUgbGljZW5zZS4gCisKKyAgSWYgWW91IGxpY2Vuc2UgdGhlIERlcml2YXRpdmUgRGF0YWJhc2UgdW5kZXIgb25lIG9mIHRoZSBsaWNlbnNlcworICBtZW50aW9uZWQgaW4gKGlpaSksIFlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2UuIAorCisgIGIuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIHRoZQorICB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIGludG8gYSBuZXcgZGF0YWJhc2UgaXMgYQorICBEZXJpdmF0aXZlIERhdGFiYXNlIGFuZCBtdXN0IGNvbXBseSB3aXRoIFNlY3Rpb24gNC40LiAKKworICBjLiBEZXJpdmF0aXZlIERhdGFiYXNlcyBhbmQgUHJvZHVjZWQgV29ya3MuICBBIERlcml2YXRpdmUgRGF0YWJhc2UgaXMKKyAgUHVibGljbHkgVXNlZCBhbmQgc28gbXVzdCBjb21wbHkgd2l0aCBTZWN0aW9uIDQuNC4gaWYgYSBQcm9kdWNlZCBXb3JrCisgIGNyZWF0ZWQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpcyBQdWJsaWNseSBVc2VkLgorCisgIGQuIFNoYXJlIEFsaWtlIGFuZCBhZGRpdGlvbmFsIENvbnRlbnRzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwKKyAgWW91IG11c3Qgbm90IGFkZCBDb250ZW50cyB0byBEZXJpdmF0aXZlIERhdGFiYXNlcyB1bmRlciBTZWN0aW9uIDQuNCBhCisgIHRoYXQgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIAorCisgIGUuIENvbXBhdGlibGUgbGljZW5zZXMuIExpY2Vuc29ycyBtYXkgYXV0aG9yaXNlIGEgcHJveHkgdG8gZGV0ZXJtaW5lCisgIGNvbXBhdGlibGUgbGljZW5zZXMgdW5kZXIgU2VjdGlvbiA0LjQgYSBpaWkuIElmIHRoZXkgZG8gc28sIHRoZQorICBhdXRob3Jpc2VkIHByb3h5YHMgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgY29tcGF0aWJsZQorICBsaWNlbnNlIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byB1c2UgdGhlIGNvbXBhdGlibGUgbGljZW5zZS4KKworCis0LjUgTGltaXRzIG9mIFNoYXJlIEFsaWtlLiAgVGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDQuNCBkbyBub3QgYXBwbHkKK2luIHRoZSBmb2xsb3dpbmc6CisKKyAgYS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGxpY2Vuc2UKKyAgQ29sbGVjdGl2ZSBEYXRhYmFzZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdSBpbmNvcnBvcmF0ZSB0aGlzCisgIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbiB0aGUgY29sbGVjdGlvbiwgYnV0IHRoaXMgTGljZW5zZQorICBzdGlsbCBhcHBsaWVzIHRvIHRoaXMgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGFzIGEgcGFydCBvZgorICB0aGUgQ29sbGVjdGl2ZSBEYXRhYmFzZTsgCisKKyAgYi4gVXNpbmcgdGhpcyBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGlzIERhdGFiYXNlIGFzCisgIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlIHRvIGNyZWF0ZSBhIFByb2R1Y2VkIFdvcmsgZG9lcyBub3QKKyAgY3JlYXRlIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBmb3IgcHVycG9zZXMgb2YgIFNlY3Rpb24gNC40OyBhbmQKKworICBjLiBVc2Ugb2YgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGludGVybmFsbHkgd2l0aGluIGFuIG9yZ2FuaXNhdGlvbiBpcworICBub3QgdG8gdGhlIHB1YmxpYyBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGZhbGwgdW5kZXIgdGhlIHJlcXVpcmVtZW50cworICBvZiBTZWN0aW9uIDQuNC4KKworNC42IEFjY2VzcyB0byBEZXJpdmF0aXZlIERhdGFiYXNlcy4gSWYgWW91IFB1YmxpY2x5IFVzZSBhIERlcml2YXRpdmUKK0RhdGFiYXNlIG9yIGEgUHJvZHVjZWQgV29yayBmcm9tIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgWW91IG11c3QgYWxzbworb2ZmZXIgdG8gcmVjaXBpZW50cyBvZiB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvciBQcm9kdWNlZCBXb3JrIGEgY29weQoraW4gYSBtYWNoaW5lIHJlYWRhYmxlIGZvcm0gb2Y6CisKKyAgYS4gVGhlIGVudGlyZSBEZXJpdmF0aXZlIERhdGFiYXNlOyBvcgorCisgIGIuIEEgZmlsZSBjb250YWluaW5nIGFsbCBvZiB0aGUgYWx0ZXJhdGlvbnMgbWFkZSB0byB0aGUgRGF0YWJhc2Ugb3IKKyAgdGhlIG1ldGhvZCBvZiBtYWtpbmcgdGhlIGFsdGVyYXRpb25zIHRvIHRoZSBEYXRhYmFzZSAoc3VjaCBhcyBhbgorICBhbGdvcml0aG0pLCBpbmNsdWRpbmcgYW55IGFkZGl0aW9uYWwgQ29udGVudHMsIHRoYXQgbWFrZSB1cCBhbGwgdGhlCisgIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIERhdGFiYXNlIGFuZCB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZS4KKworVGhlIERlcml2YXRpdmUgRGF0YWJhc2UgKHVuZGVyIGEuKSBvciBhbHRlcmF0aW9uIGZpbGUgKHVuZGVyIGIuKSBtdXN0IGJlCithdmFpbGFibGUgYXQgbm8gbW9yZSB0aGFuIGEgcmVhc29uYWJsZSBwcm9kdWN0aW9uIGNvc3QgZm9yIHBoeXNpY2FsCitkaXN0cmlidXRpb25zIGFuZCBmcmVlIG9mIGNoYXJnZSBpZiBkaXN0cmlidXRlZCBvdmVyIHRoZSBpbnRlcm5ldC4KKworNC43IFRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgYW5kIGFkZGl0aW9uYWwgdGVybXMKKworICBhLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWxsb3cgWW91IHRvIGltcG9zZSAoZXhjZXB0IHN1YmplY3QgdG8KKyAgU2VjdGlvbiA0LjcgYi4pICBhbnkgdGVybXMgb3IgYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlCisgIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YKKyAgdGhlIENvbnRlbnRzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgb3IgYW55CisgIHJpZ2h0cyBncmFudGVkIHVuZGVyIGl0LCBvciBoYXZlIHRoZSBlZmZlY3Qgb3IgaW50ZW50IG9mIHJlc3RyaWN0aW5nCisgIHRoZSBhYmlsaXR5IG9mIGFueSBwZXJzb24gdG8gZXhlcmNpc2UgdGhvc2UgcmlnaHRzLgorCisgIGIuIFBhcmFsbGVsIGRpc3RyaWJ1dGlvbi4gWW91IG1heSBpbXBvc2UgdGVybXMgb3IgdGVjaG5vbG9naWNhbAorICBtZWFzdXJlcyBvbiB0aGUgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhlIHdob2xlIG9yIGEKKyAgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgKGEgIlJlc3RyaWN0ZWQgRGF0YWJhc2UiKSBpbgorICBjb250cmF2ZW50aW9uIG9mIFNlY3Rpb24gNC43NCBhLiBvbmx5IGlmIFlvdSBhbHNvIG1ha2UgYSBjb3B5IG9mIHRoZQorICBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2UgYXZhaWxhYmxlIHRvIHRoZSByZWNpcGllbnQgb2YgdGhlCisgIFJlc3RyaWN0ZWQgRGF0YWJhc2U6CisKKyAgICBpLiBUaGF0IGlzIGF2YWlsYWJsZSB3aXRob3V0IGFkZGl0aW9uYWwgZmVlOworCisgICAgaWkuIFRoYXQgaXMgYXZhaWxhYmxlIGluIGEgbWVkaXVtIHRoYXQgZG9lcyBub3QgYWx0ZXIgb3IgcmVzdHJpY3QKKyAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBvciBhbnkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgaXQsIG9yIGhhdmUKKyAgICB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZyB0aGUgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvCisgICAgZXhlcmNpc2UgdGhvc2UgcmlnaHRzIChhbiAiVW5yZXN0cmljdGVkIERhdGFiYXNlIik7IGFuZAorCisgICAgaWlpLiBUaGUgVW5yZXN0cmljdGVkIERhdGFiYXNlIGlzIGF0IGxlYXN0IGFzIGFjY2Vzc2libGUgdG8gdGhlCisgICAgcmVjaXBpZW50IGFzIGEgcHJhY3RpY2FsIG1hdHRlciBhcyB0aGUgUmVzdHJpY3RlZCBEYXRhYmFzZS4KKworICBjLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBwbGFjZSB0aGlzIERhdGFiYXNlIG9yIGEKKyAgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbiBhbiBhdXRoZW50aWNhdGVkIGVudmlyb25tZW50LCBiZWhpbmQgYQorICBwYXNzd29yZCwgb3Igd2l0aGluIGEgc2ltaWxhciBhY2Nlc3MgY29udHJvbCBzY2hlbWUgcHJvdmlkZWQgdGhhdCBZb3UKKyAgZG8gbm90IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYW55IHJpZ2h0cworICBncmFudGVkIHVuZGVyIGl0IG9yIGhhdmUgdGhlIGVmZmVjdCBvciBpbnRlbnQgb2YgcmVzdHJpY3RpbmcgdGhlCisgIGFiaWxpdHkgb2YgYW55IHBlcnNvbiB0byBleGVyY2lzZSB0aG9zZSByaWdodHMuIAorCis0LjggTGljZW5zaW5nIG9mIG90aGVycy4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgRGF0YWJhc2UuIEVhY2ggdGltZQorWW91IGNvbW11bmljYXRlIHRoZSBEYXRhYmFzZSwgdGhlIHdob2xlIG9yIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cywgb3IgYW55IERlcml2YXRpdmUgRGF0YWJhc2UgdG8gYW55b25lIGVsc2UgaW4gYW55IHdheSwgdGhlCitMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIERhdGFiYXNlIG9uIHRoZSBzYW1lCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvcgorZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZSwgYnV0IFlvdSBtYXkKK2VuZm9yY2UgYW55IHJpZ2h0cyB0aGF0IFlvdSBoYXZlIG92ZXIgYSBEZXJpdmF0aXZlIERhdGFiYXNlLiBZb3UgYXJlCitzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBtb2RpZmljYXRpb25zIG9mIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBtYWRlCitieSBZb3Ugb3IgYW5vdGhlciBQZXJzb24gYXQgWW91ciBkaXJlY3Rpb24uIFlvdSBtYXkgbm90IGltcG9zZSBhbnkKK2Z1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQKK3VuZGVyIHRoaXMgTGljZW5zZS4KKworIyMjIDUuMCBNb3JhbCByaWdodHMKKworNS4xIE1vcmFsIHJpZ2h0cy4gVGhpcyBzZWN0aW9uIGNvdmVycyBtb3JhbCByaWdodHMsIGluY2x1ZGluZyBhbnkgcmlnaHRzCit0byBiZSBpZGVudGlmaWVkIGFzIHRoZSBhdXRob3Igb2YgdGhlIERhdGFiYXNlIG9yIHRvIG9iamVjdCB0byB0cmVhdG1lbnQKK3RoYXQgd291bGQgb3RoZXJ3aXNlIHByZWp1ZGljZSB0aGUgYXV0aG9yYHMgaG9ub3VyIGFuZCByZXB1dGF0aW9uLCBvcgorYW55IG90aGVyIGRlcm9nYXRvcnkgdHJlYXRtZW50OgorCisgIGEuIEZvciBqdXJpc2RpY3Rpb25zIGFsbG93aW5nIHdhaXZlciBvZiBtb3JhbCByaWdodHMsIExpY2Vuc29yIHdhaXZlcworICBhbGwgbW9yYWwgcmlnaHRzIHRoYXQgTGljZW5zb3IgbWF5IGhhdmUgaW4gdGhlIERhdGFiYXNlIHRvIHRoZSBmdWxsZXN0CisgIGV4dGVudCBwb3NzaWJsZSBieSB0aGUgbGF3IG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbgorICAxMC40OyAKKworICBiLiBJZiB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gNS4xIGEgaW4gdGhlIHJlbGV2YW50CisgIGp1cmlzZGljdGlvbiBpcyBub3QgcG9zc2libGUsIExpY2Vuc29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSBtb3JhbAorICByaWdodHMgb3ZlciB0aGUgRGF0YWJhc2UgYW5kIHdhaXZlcyBhbGwgY2xhaW1zIGluIG1vcmFsIHJpZ2h0cyB0byB0aGUKKyAgZnVsbGVzdCBleHRlbnQgcG9zc2libGUgYnkgdGhlIGxhdyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIHVuZGVyCisgIFNlY3Rpb24gMTAuNDsgYW5kCisKKyAgYy4gRm9yIGp1cmlzZGljdGlvbnMgbm90IGFsbG93aW5nIHdhaXZlciBvciBhbiBhZ3JlZW1lbnQgbm90IHRvIGFzc2VydAorICBtb3JhbCByaWdodHMgdW5kZXIgU2VjdGlvbiA1LjEgYSBhbmQgYiwgdGhlIGF1dGhvciBtYXkgcmV0YWluIHRoZWlyCisgIG1vcmFsIHJpZ2h0cyBvdmVyIGNlcnRhaW4gYXNwZWN0cyBvZiB0aGUgRGF0YWJhc2UuCisKK1BsZWFzZSBub3RlIHRoYXQgc29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyBmb3IgdGhlIHdhaXZlciBvZiBtb3JhbAorcmlnaHRzLCBhbmQgc28gbW9yYWwgcmlnaHRzIG1heSBzdGlsbCBzdWJzaXN0IG92ZXIgdGhlIERhdGFiYXNlIGluIHNvbWUKK2p1cmlzZGljdGlvbnMuCisKKyMjIyA2LjAgRmFpciBkZWFsaW5nLCBEYXRhYmFzZSBleGNlcHRpb25zLCBhbmQgb3RoZXIgcmlnaHRzIG5vdCBhZmZlY3RlZCAKKworNi4xIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyB0aGF0IFlvdSBvciBhbnlvbmUgZWxzZSBtYXkKK2luZGVwZW5kZW50bHkgaGF2ZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgdG8gbWFrZSBhbnkgdXNlIG9mIHRoaXMKK0RhdGFiYXNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uOgorCisgIGEuIEV4Y2VwdGlvbnMgdG8gdGhlIERhdGFiYXNlIFJpZ2h0IGluY2x1ZGluZzogRXh0cmFjdGlvbiBvZiBDb250ZW50cworICBmcm9tIG5vbi1lbGVjdHJvbmljIERhdGFiYXNlcyBmb3IgcHJpdmF0ZSBwdXJwb3NlcywgRXh0cmFjdGlvbiBmb3IKKyAgcHVycG9zZXMgb2YgaWxsdXN0cmF0aW9uIGZvciB0ZWFjaGluZyBvciBzY2llbnRpZmljIHJlc2VhcmNoLCBhbmQKKyAgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBmb3IgcHVibGljIHNlY3VyaXR5IG9yIGFuIGFkbWluaXN0cmF0aXZlCisgIG9yIGp1ZGljaWFsIHByb2NlZHVyZS4gCisKKyAgYi4gRmFpciBkZWFsaW5nLCBmYWlyIHVzZSwgb3IgYW55IG90aGVyIGxlZ2FsbHkgcmVjb2duaXNlZCBsaW1pdGF0aW9uCisgIG9yIGV4Y2VwdGlvbiB0byBpbmZyaW5nZW1lbnQgb2YgY29weXJpZ2h0IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4gCisKKzYuMiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWZmZWN0IGFueSByaWdodHMgb2YgbGF3ZnVsIHVzZXJzIHRvIEV4dHJhY3QKK2FuZCBSZS11dGlsaXNlIGluc3Vic3RhbnRpYWwgcGFydHMgb2YgdGhlIENvbnRlbnRzLCBldmFsdWF0ZWQKK3F1YW50aXRhdGl2ZWx5IG9yIHF1YWxpdGF0aXZlbHksIGZvciBhbnkgcHVycG9zZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nCitjcmVhdGluZyBhIERlcml2YXRpdmUgRGF0YWJhc2UgKHN1YmplY3QgdG8gb3RoZXIgcmlnaHRzIG92ZXIgdGhlCitDb250ZW50cywgc2VlIFNlY3Rpb24gMi40KS4gVGhlIHJlcGVhdGVkIGFuZCBzeXN0ZW1hdGljIEV4dHJhY3Rpb24gb3IKK1JlLXV0aWxpc2F0aW9uIG9mIGluc3Vic3RhbnRpYWwgcGFydHMgb2YgdGhlIENvbnRlbnRzIG1heSBob3dldmVyIGFtb3VudAordG8gdGhlIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMuCisKKyMjIyA3LjAgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCis3LjEgVGhlIERhdGFiYXNlIGlzIGxpY2Vuc2VkIGJ5IHRoZSBMaWNlbnNvciAiYXMgaXMiIGFuZCB3aXRob3V0IGFueQord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzLCBpbXBsaWVkLCBvciBhcmlzaW5nIGJ5IHN0YXR1dGUsCitjdXN0b20sIGNvdXJzZSBvZiBkZWFsaW5nLCBvciB0cmFkZSB1c2FnZS4gTGljZW5zb3Igc3BlY2lmaWNhbGx5CitkaXNjbGFpbXMgYW55IGFuZCBhbGwgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUsCitub24taW5mcmluZ2VtZW50LCBhY2N1cmFjeSBvciBjb21wbGV0ZW5lc3MsIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mCitlcnJvcnMsIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBtZXJjaGFudGFiaWxpdHksIG9yIG90aGVyd2lzZS4KK1NvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMsIHNvCit0aGlzIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworIyMjIDguMCBMaW1pdGF0aW9uIG9mIGxpYWJpbGl0eQorCis4LjEgU3ViamVjdCB0byBhbnkgbGlhYmlsaXR5IHRoYXQgbWF5IG5vdCBiZSBleGNsdWRlZCBvciBsaW1pdGVkIGJ5IGxhdywKK3RoZSBMaWNlbnNvciBpcyBub3QgbGlhYmxlIGZvciwgYW5kIGV4cHJlc3NseSBleGNsdWRlcywgYWxsIGxpYWJpbGl0eQorZm9yIGxvc3Mgb3IgZGFtYWdlIGhvd2V2ZXIgYW5kIHdoZW5ldmVyIGNhdXNlZCB0byBhbnlvbmUgYnkgYW55IHVzZQordW5kZXIgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGJ5IFlvdSBvciBieSBhbnlvbmUgZWxzZSwgYW5kIHdoZXRoZXIgY2F1c2VkCitieSBhbnkgZmF1bHQgb24gdGhlIHBhcnQgb2YgdGhlIExpY2Vuc29yIG9yIG5vdC4gVGhpcyBleGNsdXNpb24gb2YKK2xpYWJpbGl0eSBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBhbnkgc3BlY2lhbCwgaW5jaWRlbnRhbCwKK2NvbnNlcXVlbnRpYWwsIHB1bml0aXZlLCBvciBleGVtcGxhcnkgZGFtYWdlcyBzdWNoIGFzIGxvc3Mgb2YgcmV2ZW51ZSwKK2RhdGEsIGFudGljaXBhdGVkIHByb2ZpdHMsIGFuZCBsb3N0IGJ1c2luZXNzLiBUaGlzIGV4Y2x1c2lvbiBhcHBsaWVzCitldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoCitkYW1hZ2VzLgorCis4LjIgSWYgbGlhYmlsaXR5IG1heSBub3QgYmUgZXhjbHVkZWQgYnkgbGF3LCBpdCBpcyBsaW1pdGVkIHRvIGFjdHVhbCBhbmQKK2RpcmVjdCBmaW5hbmNpYWwgbG9zcyB0byB0aGUgZXh0ZW50IGl0IGlzIGNhdXNlZCBieSBwcm92ZWQgbmVnbGlnZW5jZSBvbgordGhlIHBhcnQgb2YgdGhlIExpY2Vuc29yLgorCisjIyMgOS4wIFRlcm1pbmF0aW9uIG9mIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZQorCis5LjEgQW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIHRoaXMgTGljZW5zZSB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgYW5kIHdpdGhvdXQKK25vdGljZSB0byBZb3UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBQZXJzb25zIHdobyBoYXZlIHJlY2VpdmVkIHRoZQorRGF0YWJhc2UsIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLCBEZXJpdmF0aXZlCitEYXRhYmFzZXMsIG9yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSBmcm9tIFlvdQordW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZAordGhlaXIgdXNlIGlzIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZSBvciBhIGxpY2Vuc2UgZ3JhbnRlZAordW5kZXIgU2VjdGlvbiA0Ljggb2YgdGhpcyBMaWNlbnNlLiAgU2VjdGlvbnMgMSwgMiwgNywgOCwgOSBhbmQgMTAgd2lsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCis5LjIgSWYgWW91IGFyZSBub3QgaW4gYnJlYWNoIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBMaWNlbnNvcgord2lsbCBub3QgdGVybWluYXRlIFlvdXIgcmlnaHRzIHVuZGVyIGl0LiAKKworOS4zIFVubGVzcyB0ZXJtaW5hdGVkIHVuZGVyIFNlY3Rpb24gOS4xLCB0aGlzIExpY2Vuc2UgaXMgZ3JhbnRlZCB0byBZb3UKK2ZvciB0aGUgZHVyYXRpb24gb2YgYXBwbGljYWJsZSByaWdodHMgaW4gdGhlIERhdGFiYXNlLiAKKworOS40IFJlaW5zdGF0ZW1lbnQgb2YgcmlnaHRzLiBJZiB5b3UgY2Vhc2UgYW55IGJyZWFjaCBvZiB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGZ1bGwgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZQord2lsbCBiZSByZWluc3RhdGVkOgorCisgIGEuIFByb3Zpc2lvbmFsbHkgYW5kIHN1YmplY3QgdG8gcGVybWFuZW50IHRlcm1pbmF0aW9uIHVudGlsIHRoZSA2MHRoCisgIGRheSBhZnRlciBjZXNzYXRpb24gb2YgYnJlYWNoOyAKKworICBiLiBQZXJtYW5lbnRseSBvbiB0aGUgNjB0aCBkYXkgYWZ0ZXIgY2Vzc2F0aW9uIG9mIGJyZWFjaCB1bmxlc3MKKyAgb3RoZXJ3aXNlIHJlYXNvbmFibHkgbm90aWZpZWQgYnkgdGhlIExpY2Vuc29yOyBvcgorCisgIGMuICBQZXJtYW5lbnRseSBpZiByZWFzb25hYmx5IG5vdGlmaWVkIGJ5IHRoZSBMaWNlbnNvciBvZiB0aGUKKyAgdmlvbGF0aW9uLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZgorICB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIGZyb20gIHRoZSBMaWNlbnNvciwgYW5kIFlvdSBjdXJlIHRoZQorICB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlciB5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworUGVyc29ucyBzdWJqZWN0IHRvIHBlcm1hbmVudCB0ZXJtaW5hdGlvbiBvZiByaWdodHMgYXJlIG5vdCBlbGlnaWJsZSB0bworYmUgYSByZWNpcGllbnQgYW5kIHJlY2VpdmUgYSBsaWNlbnNlIHVuZGVyIFNlY3Rpb24gNC44LgorCis5LjUgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UKK3RoZSBEYXRhYmFzZSB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyBvcgorbWFraW5nIGF2YWlsYWJsZSB0aGUgRGF0YWJhc2UuIFJlbGVhc2luZyB0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50CitsaWNlbnNlIHRlcm1zIG9yIHN0b3BwaW5nIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIERhdGFiYXNlIHdpbGwgbm90Cit3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzCityZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMKK3N0YXRlZCBhYm92ZS4KKworIyMjIDEwLjAgR2VuZXJhbAorCisxMC4xIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgaW52YWxpZCBvcgordW5lbmZvcmNlYWJsZSwgdGhhdCBtdXN0IG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mCit0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgYW5kIGVhY2gKK3JlbWFpbmluZyBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHZhbGlkIGFuZCBlbmZvcmNlZCB0byB0aGUKK2Z1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIAorCisxMC4yIFRoaXMgTGljZW5zZSBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmUgb3ZlciB0aGUgRGF0YWJhc2UuIEl0IHJlcGxhY2VzIGFueQorZWFybGllciB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvCit0aGUgRGF0YWJhc2UuIAorCisxMC4zIElmIFlvdSBhcmUgaW4gYnJlYWNoIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIFlvdSB3aWxsIG5vdCBiZQorZW50aXRsZWQgdG8gcmVseSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRvIGNvbXBsYWluIG9mIGFueQorYnJlYWNoIGJ5IHRoZSBMaWNlbnNvci4gCisKKzEwLjQgQ2hvaWNlIG9mIGxhdy4gVGhpcyBMaWNlbnNlIHRha2VzIGVmZmVjdCBpbiBhbmQgd2lsbCBiZSBnb3Zlcm5lZCBieQordGhlIGxhd3Mgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUKK3NvdWdodCB0byBiZSBlbmZvcmNlZC4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyCithcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgYW5kIERhdGFiYXNlIFJpZ2h0cyBpbiB0aGUgcmVsZXZhbnQKK2p1cmlzZGljdGlvbiBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsCit0aGVzZSBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZ3JhbnRlZCBpbiB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gbWVldCB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRkwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0ZMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQ0YmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0ZMLTEuMQpAQCAtMCwwICsxLDg4IEBACisKK1NJTCBPUEVOIEZPTlQgTElDRU5TRQorCitWZXJzaW9uIDEuMSAtIDI2IEZlYnJ1YXJ5IDIwMDcKKworUFJFQU1CTEUKK1RoZSBnb2FscyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UgKE9GTCkgYXJlIHRvIHN0aW11bGF0ZSB3b3JsZHdpZGUKK2RldmVsb3BtZW50IG9mIGNvbGxhYm9yYXRpdmUgZm9udCBwcm9qZWN0cywgdG8gc3VwcG9ydCB0aGUgZm9udCBjcmVhdGlvbgorZWZmb3J0cyBvZiBhY2FkZW1pYyBhbmQgbGluZ3Vpc3RpYyBjb21tdW5pdGllcywgYW5kIHRvIHByb3ZpZGUgYSBmcmVlIGFuZAorb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAKK3dpdGggb3RoZXJzLgorCitUaGUgT0ZMIGFsbG93cyB0aGUgbGljZW5zZWQgZm9udHMgdG8gYmUgdXNlZCwgc3R1ZGllZCwgbW9kaWZpZWQgYW5kCityZWRpc3RyaWJ1dGVkIGZyZWVseSBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBzb2xkIGJ5IHRoZW1zZWx2ZXMuIFRoZQorZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCAKK3JlZGlzdHJpYnV0ZWQgYW5kL29yIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUgcHJvdmlkZWQgdGhhdCBhbnkgcmVzZXJ2ZWQKK25hbWVzIGFyZSBub3QgdXNlZCBieSBkZXJpdmF0aXZlIHdvcmtzLiBUaGUgZm9udHMgYW5kIGRlcml2YXRpdmVzLAoraG93ZXZlciwgY2Fubm90IGJlIHJlbGVhc2VkIHVuZGVyIGFueSBvdGhlciB0eXBlIG9mIGxpY2Vuc2UuIFRoZQorcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvIHJlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkKK3RvIGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpciBkZXJpdmF0aXZlcy4KKworREVGSU5JVElPTlMKKyJGb250IFNvZnR3YXJlIiByZWZlcnMgdG8gdGhlIHNldCBvZiBmaWxlcyByZWxlYXNlZCBieSB0aGUgQ29weXJpZ2h0CitIb2xkZXIocykgdW5kZXIgdGhpcyBsaWNlbnNlIGFuZCBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBUaGlzIG1heQoraW5jbHVkZSBzb3VyY2UgZmlsZXMsIGJ1aWxkIHNjcmlwdHMgYW5kIGRvY3VtZW50YXRpb24uCisKKyJSZXNlcnZlZCBGb250IE5hbWUiIHJlZmVycyB0byBhbnkgbmFtZXMgc3BlY2lmaWVkIGFzIHN1Y2ggYWZ0ZXIgdGhlCitjb3B5cmlnaHQgc3RhdGVtZW50KHMpLgorCisiT3JpZ2luYWwgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUgY29tcG9uZW50cyBhcworZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykuCisKKyJNb2RpZmllZCBWZXJzaW9uIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLAorb3Igc3Vic3RpdHV0aW5nIC0tIGluIHBhcnQgb3IgaW4gd2hvbGUgLS0gYW55IG9mIHRoZSBjb21wb25lbnRzIG9mIHRoZQorT3JpZ2luYWwgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEKK25ldyBlbnZpcm9ubWVudC4KKworIkF1dGhvciIgcmVmZXJzIHRvIGFueSBkZXNpZ25lciwgZW5naW5lZXIsIHByb2dyYW1tZXIsIHRlY2huaWNhbAord3JpdGVyIG9yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuCisKK1BFUk1JU1NJT04gJiBDT05ESVRJT05TCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksCityZWRpc3RyaWJ1dGUsIGFuZCBzZWxsIG1vZGlmaWVkIGFuZCB1bm1vZGlmaWVkIGNvcGllcyBvZiB0aGUgRm9udAorU29mdHdhcmUsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisxKSBOZWl0aGVyIHRoZSBGb250IFNvZnR3YXJlIG5vciBhbnkgb2YgaXRzIGluZGl2aWR1YWwgY29tcG9uZW50cywKK2luIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuCisKKzIpIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSBiZSBidW5kbGVkLAorcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCBlYWNoIGNvcHkKK2NvbnRhaW5zIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGxpY2Vuc2UuIFRoZXNlIGNhbiBiZQoraW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IKK2luIHRoZSBhcHByb3ByaWF0ZSBtYWNoaW5lLXJlYWRhYmxlIG1ldGFkYXRhIGZpZWxkcyB3aXRoaW4gdGV4dCBvcgorYmluYXJ5IGZpbGVzIGFzIGxvbmcgYXMgdGhvc2UgZmllbGRzIGNhbiBiZSBlYXNpbHkgdmlld2VkIGJ5IHRoZSB1c2VyLgorCiszKSBObyBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSB1c2UgdGhlIFJlc2VydmVkIEZvbnQKK05hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCitDb3B5cmlnaHQgSG9sZGVyLiBUaGlzIHJlc3RyaWN0aW9uIG9ubHkgYXBwbGllcyB0byB0aGUgcHJpbWFyeSBmb250IG5hbWUgYXMKK3ByZXNlbnRlZCB0byB0aGUgdXNlcnMuCisKKzQpIFRoZSBuYW1lKHMpIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyKHMpIG9yIHRoZSBBdXRob3Iocykgb2YgdGhlIEZvbnQKK1NvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueQorTW9kaWZpZWQgVmVyc2lvbiwgZXhjZXB0IHRvIGFja25vd2xlZGdlIHRoZSBjb250cmlidXRpb24ocykgb2YgdGhlCitDb3B5cmlnaHQgSG9sZGVyKHMpIGFuZCB0aGUgQXV0aG9yKHMpIG9yIHdpdGggdGhlaXIgZXhwbGljaXQgd3JpdHRlbgorcGVybWlzc2lvbi4KKworNSkgVGhlIEZvbnQgU29mdHdhcmUsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQsIGluIHBhcnQgb3IgaW4gd2hvbGUsCittdXN0IGJlIGRpc3RyaWJ1dGVkIGVudGlyZWx5IHVuZGVyIHRoaXMgbGljZW5zZSwgYW5kIG11c3Qgbm90IGJlCitkaXN0cmlidXRlZCB1bmRlciBhbnkgb3RoZXIgbGljZW5zZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0bworcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgZG9jdW1lbnQgY3JlYXRlZAordXNpbmcgdGhlIEZvbnQgU29mdHdhcmUuCisKK1RFUk1JTkFUSU9OCitUaGlzIGxpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIGlmIGFueSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUKK25vdCBtZXQuCisKK0RJU0NMQUlNRVIKK1RIRSBGT05UIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVAorT0YgQ09QWVJJR0hULCBQQVRFTlQsIFRSQURFTUFSSywgT1IgT1RIRVIgUklHSFQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTQorT1RIRVIgREVBTElOR1MgSU4gVEhFIEZPTlQgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09HVFNMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0dUU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwY2FkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09HVFNMCkBAIC0wLDAgKzEsMTIwIEBACisKK1RoZSBPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZQorCitQcmVhbWJsZQorCitUaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2gKK2EgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zCitzb21lIHNlbWJsYW5jZSBvZiBhcnRpc3RpYyBjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoZQorcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cwordGhlIHJpZ2h0IHRvIG1ha2UgcmVhc29uYWJsZSBtb2RpZmljYXRpb25zLgorCitUZXN0aW5nIGlzIGVzc2VudGlhbCBmb3IgcHJvcGVyIGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBvZgorc3RhbmRhcmRzLWJhc2VkIHByb2R1Y3RzLgorCitGb3IgYnV5ZXJzOiBhZGVxdWF0ZSBjb25mb3JtYW5jZSB0ZXN0aW5nIGxlYWRzIHRvIHJlZHVjZWQKK2ludGVncmF0aW9uIGNvc3RzIGFuZCBwcm90ZWN0aW9uIG9mIGludmVzdG1lbnRzIGluIGFwcGxpY2F0aW9ucywKK3NvZnR3YXJlIGFuZCBwZW9wbGUuCisKK0ZvciBzb2Z0d2FyZSBkZXZlbG9wZXJzOiBjb25mb3JtYW5jZSB0ZXN0aW5nIG9mIHBsYXRmb3JtcyBhbmQKK21pZGRsZXdhcmUgZ3JlYXRseSByZWR1Y2VzIHRoZSBjb3N0IG9mIGRldmVsb3BpbmcgYW5kIG1haW50YWluaW5nCittdWx0aS1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBzb2Z0d2FyZS4KKworRm9yIHN1cHBsaWVyczogSW4tZGVwdGggdGVzdGluZyBpbmNyZWFzZXMgY3VzdG9tZXIgc2F0aXNmYWN0aW9uIGFuZAora2VlcHMgZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQgY29zdHMgaW4gY2hlY2suIEFQSSBjb25mb3JtYW5jZSBpcworaGlnaGx5IG1lYXN1cmFibGUgYW5kIHN1cHBsaWVycyB3aG8gY2xhaW0gaXQgbXVzdCBiZSBhYmxlIHRvCitzdWJzdGFudGlhdGUgdGhhdCBjbGFpbS4KKworQXMgc3VjaCwgc2luY2UgdGhlc2UgYXJlIGJlbmNobWFyayBtZWFzdXJlcyBvZiBjb25mb3JtYW5jZSwgd2UgZmVlbAordGhlIGludGVncml0eSBvZiB0ZXN0IHRvb2xzIGlzIG9mIGltcG9ydGFuY2UuIEluIG9yZGVyIHRvIHByZXNlcnZlCit0aGUgaW50ZWdyaXR5IG9mIHRoZSBleGlzdGluZyBjb25mb3JtYW5jZSBtb2RlcyBvZiB0aGlzIHRlc3QKK3BhY2thZ2UgYW5kIHRvIHBlcm1pdCByZWNpcGllbnRzIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMKK3BhY2thZ2UgdG8gcnVuIHRoZSBvcmlnaW5hbCB0ZXN0IG1vZGVzLCB0aGlzIGxpY2Vuc2UgcmVxdWlyZXMgdGhhdAordGhlIG9yaWdpbmFsIHRlc3QgbW9kZXMgYmUgcHJlc2VydmVkLgorCitJZiB5b3UgZmluZCBhIGJ1ZyBpbiBvbmUgb2YgdGhlIHN0YW5kYXJkcyBtb2RlIHRlc3QgY2FzZXMsIHBsZWFzZQorbGV0IHVzIGtub3cgc28gd2UgY2FuIGZlZWQgdGhpcyBiYWNrIGludG8gdGhlIG9yaWdpbmFsLCBhbmQgYWxzbworcmFpc2UgYW55IHNwZWNpZmljYXRpb24gaXNzdWVzIHdpdGggdGhlIGFwcHJvcHJpYXRlIGJvZGllcyAoZm9yCitleGFtcGxlIHRoZSBQT1NJWCBjb21taXR0ZWVzKS4KKworRGVmaW5pdGlvbnM6IAorCisgICAgICJQYWNrYWdlIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlCisgICAgIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMKKyAgICAgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLiAKKyAgICAgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICAgbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzCisgICAgIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiAKKyAgICAgIkNvcHlyaWdodCBIb2xkZXIiIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvcgorICAgICBjb3B5cmlnaHRzIGZvciB0aGUgcGFja2FnZS4gIllvdSIgaXMgeW91LCBpZiB5b3VgcmUgdGhpbmtpbmcKKyAgICAgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcgdGhpcyBQYWNrYWdlLiAKKyAgICAgIlJlYXNvbmFibGUgY29weWluZyBmZWUiIGlzIHdoYXRldmVyIHlvdSBjYW4ganVzdGlmeSBvbiB0aGUKKyAgICAgYmFzaXMgb2YgbWVkaWEgY29zdCwgZHVwbGljYXRpb24gY2hhcmdlcywgdGltZSBvZiBwZW9wbGUKKyAgICAgaW52b2x2ZWQsIGFuZCBzbyBvbi4gKFlvdSB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBqdXN0aWZ5IGl0CisgICAgIHRvIHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBidXQgb25seSB0byB0aGUgY29tcHV0aW5nIGNvbW11bml0eQorICAgICBhdCBsYXJnZSBhcyBhIG1hcmtldCB0aGF0IG11c3QgYmVhciB0aGUgZmVlLikgCisgICAgICJGcmVlbHkgQXZhaWxhYmxlIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbQorICAgICBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUKKyAgICAgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5CisgICAgIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuIAorCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mCit0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQKK3RoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZAorYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworMi4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlcgorbW9kaWZpY2F0aW9ucyBkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0CitIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQKK3RoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LAorcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZQorc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UKK2RvIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmc6CisKKyAgICAgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgYW5kIHRlc3RjYXNlcyBzbyB0aGUKKyAgICAgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMgYW5kCisgICAgIHRlc3RjYXNlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZSBhCisgICAgIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIGFuZAorICAgICB0ZXN0Y2FzZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlCisgICAgIFN0YW5kYXJkIFZlcnNpb24uCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlCitvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmc6IAorCisgICAgIGFjY29tcGFueSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZCB0ZXN0Y2FzZXMgd2l0aAorICAgICB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMgYW5kCisgICAgIHRlc3RjYXNlcywgZ2l2aW5nIHRoZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgYW5kCisgICAgIHRlc3RjYXNlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZQorICAgICBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlciB3aXRoCisgICAgIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZgordGhpcyBQYWNrYWdlLiBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcworUGFja2FnZS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGlzIFBhY2thZ2UgaXRzZWxmLiBIb3dldmVyLAoreW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkKK2NvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpCitzb2Z0d2FyZSBkaXN0cmlidXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzCitQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KKworNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQKK2FzIG91dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkKK2ZhbGwgdW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIKK2dlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQKK3dpdGggdGhpcyBQYWNrYWdlLgorCis3LlN1YnJvdXRpbmVzIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIHNoYWxsCitub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZS4gCisKKzguIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yCitwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKK3dyaXR0ZW4gcGVybWlzc2lvbi4KKworOS4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK1RoZSBFbmQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjUzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PTERBUC0yLjgKQEAgLTAsMCArMSw0OSBAQAorCitUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2UKKyAgVmVyc2lvbiAyLjgsIDE3IEF1Z3VzdCAyMDAzCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisoIlNvZnR3YXJlIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQKK3RoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgZm9ybSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cworICAgYW5kIG5vdGljZXMsCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhcHBsaWNhYmxlIGNvcHlyaWdodAorICAgc3RhdGVtZW50cyBhbmQgbm90aWNlcywgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kCisKKzMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGNvbnRhaW4gYSB2ZXJiYXRpbSBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuCisKK1RoZSBPcGVuTERBUCBGb3VuZGF0aW9uIG1heSByZXZpc2UgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorRWFjaCByZXZpc2lvbiBpcyBkaXN0aW5ndWlzaGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIuICBZb3UgbWF5IHVzZQordGhpcyBTb2Z0d2FyZSB1bmRlciB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgcmV2aXNpb24gb3IgdW5kZXIgdGhlCit0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCByZXZpc2lvbiBvZiB0aGUgbGljZW5zZS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBBTkQgSVRTCitDT05UUklCVVRPUlMgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OLCBJVFMgQ09OVFJJQlVUT1JTLCBPUiBUSEUgQVVUSE9SKFMpCitPUiBPV05FUihTKSBPRiBUSEUgU09GVFdBUkUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCitBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgYW5kIGNvcHlyaWdodCBob2xkZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZworaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaXRsZQordG8gY29weXJpZ2h0IGluIHRoaXMgU29mdHdhcmUgc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodAoraG9sZGVycy4KKworT3BlbkxEQVAgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi4KKworQ29weXJpZ2h0IDE5OTktMjAwMyBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiwgUmVkd29vZCBDaXR5LAorQ2FsaWZvcm5pYSwgVVNBLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gIFBlcm1pc3Npb24gdG8gY29weSBhbmQKK2Rpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgaXMgZ3JhbnRlZC4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhZDBkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0xLjAKQEAgLTAsMCArMSwxNjQgQEAKKworVGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZQordi4gMS4wCisKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbAord29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpCitoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOiAiTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUKK0xpY2Vuc2UgdmVyc2lvbiAxLjAiCisKK0xpY2Vuc2UgVGVybXMKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUKK2xpY2Vuc2UgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllczsKKworYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlCitPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcwordG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yCitEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlCitPcGVuIFNvZnR3YXJlIExpY2Vuc2U7CisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlLAordW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZQorZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciAoIkxpY2Vuc2VkCitDbGFpbXMiKSB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIHRoZSBPcmlnaW5hbCBXb3JrLgorTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsCitwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHVuZGVyIHRoZSBMaWNlbnNlZCBDbGFpbXMgdG8KK21ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUKK3ByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQKK2FsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBhY2Nlc3MgYW5kIG1vZGlmeSB0aGUKK09yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUKK2NvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mCit0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUKK3JpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YKK3RoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0bworcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMKK0xpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZwordGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5Citmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK2RlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlCitzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzCitleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsCitzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUKK0xpY2Vuc2VkIENsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUKK3RyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwKK1dvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0CitMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55CitPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZQorb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheQorc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIGFjY2Vzc2VkIG9yCit1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlCitXb3JrcyBhcmUgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGVyc29ucywgbWFkZSBhdmFpbGFibGUgYXMgYW4KK2FwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmssIG9yIHVzZWQgdG8KK3Byb3ZpZGUgc2VydmljZXMgb3Igb3RoZXJ3aXNlIGRlbGl2ZXIgY29udGVudCB0byBhbnlvbmUgb3RoZXIgdGhhbgorWW91LiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91CithZ3JlZSB0aGF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBzaGFsbCBiZSBkZWVtZWQgYQorZGlzdHJpYnV0aW9uIGFuZCBzaGFsbCBiZSBsaWNlbnNlZCB0byBhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi4KKworNikgV2FycmFudHkgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExJQ0VOU09SIFdBUlJBTlRTIFRIQVQgVEhFCitDT1BZUklHSFQgSU4gQU5EIFRPIFRIRSBPUklHSU5BTCBXT1JLIElTIE9XTkVEIEJZIFRIRSBMSUNFTlNPUiBPUiBUSEFUCitUSEUgT1JJR0lOQUwgV09SSyBJUyBESVNUUklCVVRFRCBCWSBMSUNFTlNPUiBVTkRFUiBBIFZBTElEIENVUlJFTlQKK0xJQ0VOU0UgRlJPTSBUSEUgQ09QWVJJR0hUIE9XTkVSLiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSEUKK0lNTUVESUFURUxZIFBSRUNFRURJTkcgU0VOVEVOQ0UsIFRIRSBPUklHSU5BTCBXT1JLIElTIFBST1ZJREVEIFVOREVSCitUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSwgRUlUSEVSIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgV0FSUkFOVFkgT0YKK05PTi1JTkZSSU5HRU1FTlQgQU5EIFdBUlJBTlRJRVMgVEhBVCBUSEUgT1JJR0lOQUwgV09SSyBJUyBNRVJDSEFOVEFCTEUKK09SIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRgorVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUworQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBMSUNFTlNFIFRPIE9SSUdJTkFMIFdPUksgSVMKK0dSQU5URUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzcpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTAorVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwKK1NIQUxMIFRIRSBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HCitBUyBBIFJFU1VMVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsCitDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMCitEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBFUlNPTiBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UCitBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNICitQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSAorTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SCitMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTgorQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzgpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IKK2Fub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91CitwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssCithbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yCithbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5Citwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlcgorY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkKK29mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbnMgMSBhbmQgMiBoZXJlaW4sIFlvdSBpbmRpY2F0ZQorWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KK1RoaXMgbGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIHlvdSBtYXkgbm8gbG9uZ2VyCitleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiBZb3VyCitmYWlsdXJlIHRvIGhvbm9yIHRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzkpIE11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZAordG8gWW91IGJ5IHRoaXMgTGljZW5zZSBpZiBZb3UgZmlsZSBhIGxhd3N1aXQgaW4gYW55IGNvdXJ0IGFsbGVnaW5nCit0aGF0IGFueSBPU0kgQ2VydGlmaWVkIG9wZW4gc291cmNlIHNvZnR3YXJlIHRoYXQgaXMgbGljZW5zZWQgdW5kZXIgYW55CitsaWNlbnNlIGNvbnRhaW5pbmcgdGhpcyAiTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uIiBjbGF1c2UKK2luZnJpbmdlcyBhbnkgcGF0ZW50IGNsYWltcyB0aGF0IGFyZSBlc3NlbnRpYWwgdG8gdXNlIHRoYXQgc29mdHdhcmUuCisKKzEwKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBZb3UgYWdyZWUgdGhhdCBhbnkgbGF3c3VpdAorYXJpc2luZyB1bmRlciBvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgbWFpbnRhaW5lZCBpbiB0aGUKK2NvdXJ0cyBvZiB0aGUganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2gKK0xpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdAoranVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbgorb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbAorU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsKK291dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUKK3N1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsCisxNyBVLlMuQy4gJiMxNjc7IDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kCitpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mCit0aGlzIExpY2Vuc2UuCisKKzExKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK29yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZQorZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQKK2xpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbgorY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcworc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50Citjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlCitpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8KK3RoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzEzKSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzCitMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYQorbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZQordGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5Cit0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4KK0ZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3QKK29yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCit3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcAorb2Ygc3VjaCBlbnRpdHkuCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDIgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMKK3Jlc2VydmVkLiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcworbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dAordGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTVjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMi4wCkBAIC0wLDAgKzEsNDggQEAKKworT3BlbiBTb2Z0d2FyZSBMaWNlbnNlCit2LiAyLjAKKworVGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7CitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhcmUgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IGFncmVlIHRoYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIHNoYWxsIGJlIGRlZW1lZCBhIGRpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCB5b3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiBZb3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIHByb3Zpc28gaW4gU2VjdGlvbiAxKGMpIGhlcmVpbi4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpKSBhZ2FpbnN0IExpY2Vuc29yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIG9yIChpaSkgYWdhaW5zdCBhbnkgZW50aXR5IHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIChidXQgZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKS4KKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTU3NzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTMuMApAQCAtMCwwICsxLDI3IEBACisKK09wZW4gU29mdHdhcmUgTGljZW5zZSAoJiM4MjIwO09TTCYjODIyMTspIHYuIDMuMAorVGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIG5vdGljZSBhZGphY2VudCB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CitMaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMy4wCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29weXJpZ2h0LCB0byBkbyB0aGUgZm9sbG93aW5nOgorYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcywgZWl0aGVyIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBjb2xsZWN0aXZlIHdvcms7CitiKSB0byB0cmFuc2xhdGUsIGFkYXB0LCBhbHRlciwgdHJhbnNmb3JtLCBtb2RpZnksIG9yIGFycmFuZ2UgdGhlIE9yaWdpbmFsIFdvcmssIHRoZXJlYnkgY3JlYXRpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworYykgdG8gZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZTsKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmsuCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3ImIzgyMTc7cyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLgorOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgJiM4MjIwO2ZhaXIgdXNlJiM4MjIxOyBvciAmIzgyMjA7ZmFpciBkZWFsaW5nJiM4MjIxOykuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgY29weXJpZ2h0IG9yIHBhdGVudCBsYXcgaW4gdGhlIGFwcHJvcHJpYXRlIGp1cmlzZGljdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEyKSBBdHRvcm5leXMmIzgyMTc7IEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIiBvciAiT1NMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PcGVuU1NMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT3BlblNTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI3MGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT3BlblNTTApAQCAtMCwwICsxLDEwNyBAQAorCitPcGVuU1NMIExpY2Vuc2UKKworID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENvcHlyaWdodCAoYykgMTk5OC0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFyZSBtZXQ6CisgCisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgZGlzdHJpYnV0aW9uLgorIAorICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAgICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAgICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorIAorICA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgCisgIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAKKyAgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICAgICBhY2tub3dsZWRnbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVNgYCBBTkQgQU5ZCisgIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCisgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorIAorCisgT3JpZ2luYWwgU1NMZWF5IExpY2Vuc2UKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAKKyAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAgaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAKKyAgQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZ2BzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAgdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAgICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAgICAgVGhlIHdvcmQgYGNyeXB0b2dyYXBoaWNgIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbQorICAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorIAorICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgCisgIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZSBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QRCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmI4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QRApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBQdWJsaWMgRG9tYWluIExpY2Vuc2UKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BIUC0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QSFAtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGIyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QSFAtMy4wCkBAIC0wLDAgKzEsNzAgQEAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgICAgICBUaGUgUEhQIExpY2Vuc2UsIHZlcnNpb24gMy4wMQorQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAxMCBUaGUgUEhQIEdyb3VwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICBkaXN0cmlidXRpb24uCisgCisgIDMuIFRoZSBuYW1lICJQSFAiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3IKKyAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBncm91cEBwaHAubmV0LgorICAKKyAgNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIlBIUCIsIG5vcgorICAgICBtYXkgIlBIUCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgICAgIGZyb20gZ3JvdXBAcGhwLm5ldC4gIFlvdSBtYXkgaW5kaWNhdGUgdGhhdCB5b3VyIHNvZnR3YXJlIHdvcmtzIGluCisgICAgIGNvbmp1bmN0aW9uIHdpdGggUEhQIGJ5IHNheWluZyAiRm9vIGZvciBQSFAiIGluc3RlYWQgb2YgY2FsbGluZworICAgICBpdCAiUEhQIEZvbyIgb3IgInBocGZvbyIKKyAKKyAgNS4gVGhlIFBIUCBHcm91cCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCisgICAgIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKKyAgICAgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisgICAgIE9uY2UgY292ZXJlZCBjb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbgorICAgICBvZiB0aGUgbGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcworICAgICBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggY292ZXJlZCBjb2RlCisgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCisgICAgIHB1Ymxpc2hlZCBieSB0aGUgUEhQIEdyb3VwLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgUEhQIEdyb3VwIGhhcworICAgICB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIGNvdmVyZWQgY29kZSBjcmVhdGVkCisgICAgIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgICAgIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIFBIUCBzb2Z0d2FyZSwgZnJlZWx5IGF2YWlsYWJsZSBmcm9tCisgICAgIDxodHRwOi8vd3d3LnBocC5uZXQvc29mdHdhcmUvPiIuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBIUCBERVZFTE9QTUVOVCBURUFNIGBgQVMgSVNgYCBBTkQgCitBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSAKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQSFAKK0RFVkVMT1BNRU5UIFRFQU0gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIAorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIAorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQoraW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBQSFAgR3JvdXAuCisKK1RoZSBQSFAgR3JvdXAgY2FuIGJlIGNvbnRhY3RlZCB2aWEgRW1haWwgYXQgZ3JvdXBAcGhwLm5ldC4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFBIUCBHcm91cCBhbmQgdGhlIFBIUCBwcm9qZWN0LCAKK3BsZWFzZSBzZWUgPGh0dHA6Ly93d3cucGhwLm5ldD4uCisKK1BIUCBpbmNsdWRlcyB0aGUgWmVuZCBFbmdpbmUsIGZyZWVseSBhdmFpbGFibGUgYXQKKzxodHRwOi8vd3d3LnplbmQuY29tPi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUG9zdGdyZVNRTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Bvc3RncmVTUUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2NThkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Bvc3RncmVTUUwKQEAgLTAsMCArMSwxNCBAQAorCitQb3N0Z3JlU1FMIERhdGFiYXNlIE1hbmFnZW1lbnQgU3lzdGVtCisoZm9ybWVybHkga25vd24gYXMgUG9zdGdyZXMsIHRoZW4gYXMgUG9zdGdyZXM5NSkKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTAsIFRoZSBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgYW5kIHdpdGhvdXQgYSB3cml0dGVuIGFncmVlbWVudCBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBJTkNMVURJTkcgTE9TVCBQUk9GSVRTLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUyBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSBIQVMgTk8gT0JMSUdBVElPTlMgVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qcm9wcmlldGFyeSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Byb3ByaWV0YXJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTg3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qcm9wcmlldGFyeQpAQCAtMCwwICsxIEBACitQcm9wcmlldGFyeSBsaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHl0aG9uLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1B5dGhvbi0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzZTg2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1B5dGhvbi0yLjAKQEAgLTAsMCArMSwxOTIgQEAKKworUFlUSE9OIFNPRlRXQVJFIEZPVU5EQVRJT04gTElDRU5TRSBWRVJTSU9OIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKygiUFNGIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQKK290aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlICgiUHl0aG9uIikgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZAoraXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGCitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LAorcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24KK2Fsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRmBzCitMaWNlbnNlIEFncmVlbWVudCBhbmQgUFNGYHMgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCAoYykKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMKK1Jlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24KK3ByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgorb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbi4KKworNC4gUFNGIGlzIG1ha2luZyBQeXRob24gYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiBQU0YgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzUuIFBTRiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KK0ZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OLAorT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkKK3JlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gUFNGIGFuZAorTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgUFNGCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgorCis4LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24sIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgorCitCRU9QRU4uQ09NIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMi4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JFT1BFTiBQWVRIT04gT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JFRU1FTlQgVkVSU0lPTiAxCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBCZU9wZW4uY29tICgiQmVPcGVuIiksIGhhdmluZyBhbgorb2ZmaWNlIGF0IDE2MCBTYXJhdG9nYSBBdmVudWUsIFNhbnRhIENsYXJhLCBDQSA5NTA1MSwgYW5kIHRoZQorSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nCit0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gKCJ0aGUgU29mdHdhcmUiKS4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBCZU9wZW4gUHl0aG9uIExpY2Vuc2UKK0FncmVlbWVudCwgQmVPcGVuIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtCithbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQKK290aGVyd2lzZSB1c2UgdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sCitwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGUgQmVPcGVuIFB5dGhvbiBMaWNlbnNlIGlzIHJldGFpbmVkIGluIHRoZQorU29mdHdhcmUsIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCisKKzMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gQkVPUEVOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBCRU9QRU4gTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis0LiBCRU9QRU4gU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgVEhFCitTT0ZUV0FSRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTCitBUyBBIFJFU1VMVCBPRiBVU0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUsIE9SIEFOWQorREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGludGVycHJldGVkIGluIGFsbAorcmVzcGVjdHMgYnkgdGhlIGxhdyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjbHVkaW5nIGNvbmZsaWN0IG9mCitsYXcgcHJvdmlzaW9ucy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0bworY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZQorYmV0d2VlbiBCZU9wZW4gYW5kIExpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50CitwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyaworc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKK3RoaXJkIHBhcnR5LiBBcyBhbiBleGNlcHRpb24sIHRoZSAiQmVPcGVuIFB5dGhvbiIgbG9nb3MgYXZhaWxhYmxlIGF0CitodHRwOi8vd3d3LnB5dGhvbmxhYnMuY29tL2xvZ29zLmh0bWwgbWF5IGJlIHVzZWQgYWNjb3JkaW5nIHRvIHRoZQorcGVybWlzc2lvbnMgZ3JhbnRlZCBvbiB0aGF0IHdlYiBwYWdlLgorCis3LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyB0aGUgc29mdHdhcmUsIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgorCitDTlJJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbAorUmVzZWFyY2ggSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLAorUmVzdG9uLCBWQSAyMDE5MSAoIkNOUkkiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbgorKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSBzb2Z0d2FyZSBpbgorc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgorCisyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJCitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LAorcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gMS42LjEKK2Fsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUklgcworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUklgcyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQorMTk5NS0yMDAxIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsIFJpZ2h0cworUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKK3ZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuIEFsdGVybmF0ZWx5LCBpbiBsaWV1IG9mIENOUklgcyBMaWNlbnNlCitBZ3JlZW1lbnQsIExpY2Vuc2VlIG1heSBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcgdGhlCitxdW90ZXMpOiAiUHl0aG9uIDEuNi4xIGlzIG1hZGUgYXZhaWxhYmxlIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBpbiBDTlJJYHMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IHRvZ2V0aGVyIHdpdGgKK1B5dGhvbiAxLjYuMSBtYXkgYmUgbG9jYXRlZCBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZwordW5pcXVlLCBwZXJzaXN0ZW50IGlkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDEzLiBUaGlzCitBZ3JlZW1lbnQgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQKK3VzaW5nIHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTg5NS4yMi8xMDEzIi4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gMS42LjEgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24gMS42LjEuCisKKzQuIENOUkkgaXMgbWFraW5nIFB5dGhvbiAxLjYuMSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIENOUkkgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNi4xIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis1LiBDTlJJIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgorMS42LjEgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUworQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMS42LjEsCitPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGZlZGVyYWwKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uIHRoZSBmZWRlcmFsIGNvcHlyaWdodCBsYXcsIGFuZCwgdG8gdGhlIGV4dGVudCBzdWNoCitVLlMuIGZlZGVyYWwgbGF3IGRvZXMgbm90IGFwcGx5LCBieSB0aGUgbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YKK1ZpcmdpbmlhLCBleGNsdWRpbmcgVmlyZ2luaWFgcyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4KK05vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aXRoIHJlZ2FyZCB0byBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkCitvbiBQeXRob24gMS42LjEgdGhhdCBpbmNvcnBvcmF0ZSBub24tc2VwYXJhYmxlIG1hdGVyaWFsIHRoYXQgd2FzCitwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdGhlCitsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBWaXJnaW5pYSBzaGFsbCBnb3Zlcm4gdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgb25seSBhcyB0byBpc3N1ZXMgYXJpc2luZyB1bmRlciBvciB3aXRoIHJlc3BlY3QgdG8KK1BhcmFncmFwaHMgNCwgNSwgYW5kIDcgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gTm90aGluZyBpbiB0aGlzCitMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YKK2FnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBDTlJJIGFuZCBMaWNlbnNlZS4gVGhpcworTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQ05SSSB0cmFkZW1hcmtzIG9yCit0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvcgorc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY2xpY2tpbmcgb24gdGhlICJBQ0NFUFQiIGJ1dHRvbiB3aGVyZSBpbmRpY2F0ZWQsIG9yIGJ5IGNvcHlpbmcsCitpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEsIExpY2Vuc2VlIGFncmVlcyB0byBiZQorYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKK0FDQ0VQVAorCitDV0kgTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAwLjkuMCBUSFJPVUdIIDEuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkxIC0gMTk5NSwgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtIEFtc3RlcmRhbSwKK1RoZSBOZXRoZXJsYW5kcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Citib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KK3N1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAorQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTworVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRQorRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1FQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9RUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDMzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9RUEwtMS4wCkBAIC0wLDAgKzEsNDggQEAKKworVEhFIFEgUFVCTElDIExJQ0VOU0UgdmVyc2lvbiAxLjAKKworQ29weXJpZ2h0IChDKSAxOTk5LTIwMDUgVHJvbGx0ZWNoIEFTLCBOb3J3YXkuCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCitUaGUgaW50ZW50IG9mIHRoaXMgbGljZW5zZSBpcyB0byBlc3RhYmxpc2ggZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSBzb2Z0d2FyZSByZWd1bGF0ZWQgYnkgdGhpcyBsaWNlbnNlIHVuZGVyIHRoZSBvcGVuIHNvdXJjZSBtb2RlbC4KKworVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGNvbnRhaW5pbmcgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyB0aGF0IGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFEgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAuIFN1Y2ggc29mdHdhcmUgaXMgaGVyZWluIHJlZmVycmVkIHRvIGFzIHRoZSBTb2Z0d2FyZS4gVGhpcyBsaWNlbnNlIGNvdmVycyBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUsIHVzZSBvZiB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbiBwcm9ncmFtcyBiYXNlZCBvbiB0aGUgU29mdHdhcmUsIGFuZCBkZXZlbG9wbWVudCBvZiBmcmVlIHNvZnR3YXJlIHdoaWNoIHVzZXMgdGhlIFNvZnR3YXJlLgorCitHcmFudGVkIFJpZ2h0cworCisxLiBZb3UgYXJlIGdyYW50ZWQgdGhlIG5vbi1leGNsdXNpdmUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2UgcHJvdmlkZWQgeW91IGFncmVlIHRvIGFuZCBjb21wbHkgd2l0aCBhbnkgYW5kIGFsbCBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4gV2hvbGUgb3IgcGFydGlhbCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBvciBzb2Z0d2FyZSBpdGVtcyB0aGF0IGxpbmsgd2l0aCB0aGUgU29mdHdhcmUsIGluIGFueSBmb3JtIHNpZ25pZmllcyBhY2NlcHRhbmNlIG9mIHRoaXMgbGljZW5zZS4KKworMi4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiB1bm1vZGlmaWVkIGZvcm0gcHJvdmlkZWQgdGhhdCB0aGUgZW50aXJlIHBhY2thZ2UsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGNvcHlyaWdodCwgdHJhZGVtYXJrIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLCBhcyByZWxlYXNlZCBieSB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlLCBpcyBkaXN0cmlidXRlZC4KKworMy4gWW91IG1heSBtYWtlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFuZCBkaXN0cmlidXRlIHlvdXIgbW9kaWZpY2F0aW9ucywgaW4gYSBmb3JtIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSB0aGUgU29mdHdhcmUsIHN1Y2ggYXMgcGF0Y2hlcy4gVGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgYXBwbHkgdG8gbW9kaWZpY2F0aW9uczoKKworYS4gTW9kaWZpY2F0aW9ucyBtdXN0IG5vdCBhbHRlciBvciByZW1vdmUgYW55IGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZS4KK2IuIFdoZW4gbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYXJlIHJlbGVhc2VkIHVuZGVyIHRoaXMgbGljZW5zZSwgYSBub24tZXhjbHVzaXZlIHJveWFsdHktZnJlZSByaWdodCBpcyBncmFudGVkIHRvIHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgdG8gZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHN1Y2ggdmVyc2lvbnMgcmVtYWluIGF2YWlsYWJsZSB1bmRlciB0aGVzZSB0ZXJtcyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgbGljZW5zZShzKSBvZiB0aGUgaW5pdGlhbCBkZXZlbG9wZXIuCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgdGhlIFNvZnR3YXJlIG9yIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgeW91IG1lZXQgdGhlc2UgcmVzdHJpY3Rpb25zOgorCithLiBZb3UgbXVzdCBpbmNsdWRlIHRoaXMgbGljZW5zZSBkb2N1bWVudCBpbiB0aGUgZGlzdHJpYnV0aW9uLgorYi4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYWxzbyBhYmxlIHRvIHJlY2VpdmUgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGRpc3RyaWJ1dGVkIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMsIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIsIGFuZCBwbGFjZSBwcm9taW5lbnQgbm90aWNlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIGV4cGxhaW5pbmcgdGhpcy4KKworYy4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgaW5jbHVkZWQgaW4gdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisKKzUuIFlvdSBtYXkgdXNlIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIGFwcGxpY2F0aW9uIHByb2dyYW1zIGxlZ2FsbHkgZGV2ZWxvcGVkIGJ5IHlvdSBvciBieSBvdGhlcnMuCisKKzYuIFlvdSBtYXkgZGV2ZWxvcCBhcHBsaWNhdGlvbiBwcm9ncmFtcywgcmV1c2FibGUgY29tcG9uZW50cyBhbmQgb3RoZXIgc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZS4gVGhlc2UgaXRlbXMsIHdoZW4gZGlzdHJpYnV0ZWQsIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgorCithLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgdGhlc2UgaXRlbXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIGFuZCB1c2UgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGl0ZW1zIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIuCitiLiBZb3UgbXVzdCBleHBsaWNpdGx5IGxpY2Vuc2UgYWxsIHJlY2lwaWVudHMgb2YgeW91ciBpdGVtcyB0byB1c2UgYW5kIHJlLWRpc3RyaWJ1dGUgb3JpZ2luYWwgYW5kIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBpdGVtcyBpbiBib3RoIG1hY2hpbmUtZXhlY3V0YWJsZSBhbmQgc291cmNlIGNvZGUgZm9ybXMuIFRoZSByZWNpcGllbnRzIG11c3QgYmUgYWJsZSB0byBkbyBzbyB3aXRob3V0IGFueSBjaGFyZ2VzIHdoYXRzb2V2ZXIsIGFuZCB0aGV5IG11c3QgYmUgYWJsZSB0byByZS1kaXN0cmlidXRlIHRvIGFueW9uZSB0aGV5IGNob29zZS4KKworYy4gSWYgdGhlIGl0ZW1zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYywgYW5kIHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgcmVxdWVzdHMgYSBjb3B5IG9mIHRoZSBpdGVtcywgdGhlbiB5b3UgbXVzdCBzdXBwbHkgb25lLgorCitMaW1pdGF0aW9ucyBvZiBMaWFiaWxpdHkKKworSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGluaXRpYWwgZGV2ZWxvcGVycyBvciBjb3B5cmlnaHQgaG9sZGVycyBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGxvc3QgcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmIHRoZXkgaGF2ZSBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcywgZXhjZXB0IHRvIHRoZSBleHRlbnQgaW52YXJpYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlLgorCitObyBXYXJyYW50eQorCitUaGUgU29mdHdhcmUgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudCBhcmUgcHJvdmlkZWQgQVMgSVMgd2l0aCBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORCwgSU5DTFVESU5HIFRIRSBXQVJSQU5UWSBPRiBERVNJR04sIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0Nob2ljZSBvZiBMYXcKKworVGhpcyBsaWNlbnNlIGlzIGdvdmVybmVkIGJ5IHRoZSBMYXdzIG9mIE5vcndheS4gRGlzcHV0ZXMgc2hhbGwgYmUgc2V0dGxlZCBieSBPc2xvIENpdHkgQ291cnQuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiNDBiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xCkBAIC0wLDAgKzEsNDAxIEBACisKK1JlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSB2MS4xCisKKzEuIERFRklOSVRJT05TCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkKK3RoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcKK3BvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZgorZGF0YS4KKworMS41LiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCitDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMKK3RoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsCitDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzCitNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsCitDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeQorQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQKK2luc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsCitjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZQorQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhCitjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLQorYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cwordW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbgorb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uCitjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMKKyhhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2gKK2VudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxLjEzLiAiUmVkIEhhdCBCcmFuZGVkIENvZGUiIGlzIGNvZGUgdGhhdCBSZWQgSGF0IGRpc3RyaWJ1dGVzIGFuZC9vcgorcGVybWl0cyBvdGhlcnMgdG8gZGlzdHJpYnV0ZSB1bmRlciBkaWZmZXJlbnQgdGVybXMgdGhhbiB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYworTGljZW5zZS4gUmVkIEhhdCdzIEJyYW5kZWQgQ29kZSBtYXkgY29udGFpbiBwYXJ0IG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisyLiBTT1VSQ0UgQ09ERSBMSUNFTlNFCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUKK09yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0CitvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0bworbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJVdGlsaXplIikgdGhlIE9yaWdpbmFsIENvZGUgKG9yCitwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkKK25lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZAorbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyCitNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlCitNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuCit1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEKK0xhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0bworVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudAordGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQKK21heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCiszLiBESVNUUklCVVRJT04gT0JMSUdBVElPTlMKKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UKK211c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uCit0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlCityZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudAorb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlCithdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHZpYSBhbiBhY2NlcHRlZAorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUKK3ZlcnNpb24gYXZhaWxhYmxlIGFuZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXI7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUKKygxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpCittb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlCithdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMKK21haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb2YgdGhlIE1vZGlmaWNhdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBTb3VyY2UgaWYgYSBjb250YWN0IG1lYW5zCitpcyBwcm92aWRlZC4gUmVkIEhhdCB3aWxsIGJlIGFjdGluZyBhcyBtYWludGFpbmVyIG9mIHRoZSBTb3VyY2UgYW5kIG1heSBwcm92aWRlCithbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBtZWNoYW5pc20gZm9yIHRoZSBNb2RpZmljYXRpb24gdG8gYmUgbWFkZSBhdmFpbGFibGUuCitZb3UgY2FuIGNvbnRhY3QgUmVkIEhhdCB0byBtYWtlIHRoZSBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFuZCB0byBub3RpZnkgdGhlCitJbml0aWFsIERldmVsb3Blci4gKGh0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5jb20vZWNvcy8pCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUKK2RvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YKK2FueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcworZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UKK0NvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uCitpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbgorcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UKK211c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkCisiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluCitzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4KK3N1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UKK2F2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZQorbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZAordGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yCitjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QKK2Fsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kCit0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlCityZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZQorTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUuIElmCitpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0bworaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYQorcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhCitub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLgorCitIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQKK2FueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UKK2Fsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeQorQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2gKK0NvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdQorb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YKK1NlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEKK25vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91CitoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5CitpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQKK0NvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2UKK29mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkCit0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UKK2ZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmCitZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZQoraXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQKK2J5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUKK3RvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5CitpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaAordGVybXMgWW91IG9mZmVyLgorCitJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlLCB5b3UgbXVzdAorcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKK3Byb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEKK3NpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcworTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uCit0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQKK3Bvc3NpYmxlOyAoYikgY2l0ZSB0aGUgc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nCit0byB0aGUgbGljZW5zZTsgYW5kIChjKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoCitkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQKK211c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUKK2V4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCitzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuIFlvdSBtdXN0IHN1Ym1pdCB0aGlzIExFR0FMIGZpbGUgdG8gUmVkIEhhdCBmb3IgcmV2aWV3LCBhbmQgWW91Cit3aWxsIG5vdCBiZSBhYmxlIHVzZSB0aGUgY292ZXJlZCBjb2RlIGluIGFueSBtZWFucyB1bnRpbCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQKK2Zyb20gUmVkIEhhdCB0byBhbGxvdyBmb3IgdGhlIGluYWJpbGl0eSB0byBjb21wbHkgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbi4KKworNS4gQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUKK25vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworUmVkIEhhdCBtYXkgaW5jbHVkZSBDb3ZlcmVkIENvZGUgaW4gcHJvZHVjdHMgd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMKK2JlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbAorcHJvZHVjdHMgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4KKworUmVkIEhhdCBtYXkgbGljZW5zZSB0aGUgU291cmNlIENvZGUgb2YgUmVkIEhhdCBCcmFuZGVkIENvZGUgd2l0aG91dCBSZWQgSGF0CitCcmFuZGVkIENvZGUgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2UgUmVkCitIYXQgQnJhbmRlZCBDb2RlIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuCitDb250YWN0IFJlZCBIYXQgZm9yIGRldGFpbHMgb2YgYWx0ZXJuYXRlIGxpY2Vuc2luZyB0ZXJtcyBhdmFpbGFibGUuCisKKzYuIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFCisKKzYuMS4gTmV3IFZlcnNpb25zLgorUmVkIEhhdCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvCit0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgUmVkIEhhdC4gTm8gb25lIG90aGVyIHRoYW4gUmVkIEhhdCBoYXMgdGhlIHJpZ2h0IHRvCittb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGJleW9uZCB3aGF0IGlzIGdyYW50ZWQgdW5kZXIgdGhpcworYW5kIHN1YnNlcXVlbnQgTGljZW5zZXMuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIHlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbworaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMKKyJFQ09TIiwgImVDb3MiLCAiUmVkIEhhdCIsICJSSEVQTCIgb3IKK2FueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpCitvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaAorZGlmZmVyIGZyb20gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMKK0xpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKK1FVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRAorQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkKK09USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMKK0xJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZgorWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoCithcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMKK3doaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSCitDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNICitQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwKK0lOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUgorTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSAorUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMCitJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVworUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SCitMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQKK0xJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4KKzQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlcgorc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMKK3N1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4KKzEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLgorR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGgKK2hlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMKKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyCitoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zCisoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nCitpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUKK3BhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLAordGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbAorZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8KK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcKK2FyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueQorYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksCitDYWxpZm9ybmlhLCB1bmRlciB0aGUgYXVzcGljZXMgb2YgSkFNUy9FbmREaXNwdXRlOyBhbmQgKGMpIGFueSBsaXRpZ2F0aW9uCityZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwKK0NvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYQorQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUKK2FwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwKK1NhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdAordGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90CithcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TCisKK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbgorMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZgorWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZgorQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoCityaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8KK2Rpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLgorCisxMy4gQURESVRJT05BTCBURVJNUyBBUFBMSUNBQkxFIFRPIFRIRSBSRUQgSEFUIEVDT1MgUFVCTElDIExJQ0VOU0UKKworTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgUmVkIEhhdCBmcm9tIGxpY2Vuc2luZwordW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHdoaWNoIFJlZCBIYXQgb3RoZXJ3aXNlIHdvdWxkCitoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworUmVkIEhhdCBhbmQgbG9nbyAtIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrCitSZWQgSGF0LCB0aGUgUmVkIEhhdCBsb2dvLCBlQ29zIGxvZ28sIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlCitPcmlnaW5hbCBDb2RlLiBZb3UgbWF5IGNvbnRhY3QgUmVkIEhhdCBmb3IgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRoZSBSZWQgSGF0CithbmQgZUNvcyBtYXJrcyBpbiBlaXRoZXIgdGhlIGRvY3VtZW50YXRpb24gb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBiZXlvbmQKK3RoYXQgcmVxdWlyZWQgaW4gRXhoaWJpdCBCLgorCitJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBDb250cmFjdHVhbCBPYmxpZ2F0aW9uIC0gVG8gdGhlIGV4dGVudCB0aGF0IFJlZCBIYXQKK2lzIGxpbWl0ZWQgY29udHJhY3R1YWxseSBmcm9tIG1ha2luZyB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzCitMaWNlbnNlLCBSZWQgSGF0IG1heSBjaG9vc2UgdG8gaW50ZWdyYXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbnRvIENvdmVyZWQKK0NvZGUgd2l0aG91dCBiZWluZyByZXF1aXJlZCB0byBkaXN0cmlidXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbiBTb3VyY2UgQ29kZQorZm9ybSwgZXZlbiBpZiBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQKKyJNb2RpZmljYXRpb25zIiB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vCit3d3cucmVkaGF0LmNvbS8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLCByZWxlYXNlZAorU2VwdGVtYmVyIDMwLCAxOTk4LiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUmVkIEhhdC4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIFJlZCBIYXQsIEluYy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuIgorCitFWEhJQklUIEIKKworUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUKK09wZXJhdGluZyBTeXN0ZW0sIGEgdHJhZGVtYXJrIG9mIFJlZCBIYXQuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuIChodHRwOi8vd3d3LnJlZGhhdC5jb20vKS4gQWxsCitSaWdodHMgUmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgUkVEIEhBVCBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCitFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCitPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCitJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkKK09GIFNVQ0ggREFNQUdFLgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4OTAwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xLjEKQEAgLTAsMCArMSwxNTEgQEAKKworUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlIHYxLjEKKworMS4gREVGSU5JVElPTlMKKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorCisxLjcuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzEuMTMuICJSZWQgSGF0IEJyYW5kZWQgQ29kZSIgaXMgY29kZSB0aGF0IFJlZCBIYXQgZGlzdHJpYnV0ZXMgYW5kL29yIHBlcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZS4gUmVkIEhhdGBzIEJyYW5kZWQgQ29kZSBtYXkgY29udGFpbiBwYXJ0IG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisyLiBTT1VSQ0UgQ09ERSBMSUNFTlNFCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgiVXRpbGl6ZSIpIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGUgYW5kIHRvIHRoZSBJbml0aWFsIERldmVsb3BlcjsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBNb2RpZmljYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgU291cmNlIGlmIGEgY29udGFjdCBtZWFucyBpcyBwcm92aWRlZC4gUmVkIEhhdCB3aWxsIGJlIGFjdGluZyBhcyBtYWludGFpbmVyIG9mIHRoZSBTb3VyY2UgYW5kIG1heSBwcm92aWRlIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIG1lY2hhbmlzbSBmb3IgdGhlIE1vZGlmaWNhdGlvbiB0byBiZSBtYWRlIGF2YWlsYWJsZS4gWW91IGNhbiBjb250YWN0IFJlZCBIYXQgdG8gbWFrZSB0aGUgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhbmQgdG8gbm90aWZ5IHRoZSBJbml0aWFsIERldmVsb3Blci4gKGh0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5jb20vZWNvcy8pCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4gCitJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4KKworSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKK0lmIHlvdSBkaXN0cmlidXRlIGV4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbmluZyBDb3ZlcmVkIENvZGUsIHlvdSBtdXN0IHJlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyAoYikgY2l0ZSB0aGUgc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nIHRvIHRoZSBsaWNlbnNlOyBhbmQgKGMpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuIFlvdSBtdXN0IHN1Ym1pdCB0aGlzIExFR0FMIGZpbGUgdG8gUmVkIEhhdCBmb3IgcmV2aWV3LCBhbmQgWW91IHdpbGwgbm90IGJlIGFibGUgdXNlIHRoZSBjb3ZlcmVkIGNvZGUgaW4gYW55IG1lYW5zIHVudGlsIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCBmcm9tIFJlZCBIYXQgdG8gYWxsb3cgZm9yIHRoZSBpbmFiaWxpdHkgdG8gY29tcGx5IGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24uCisKKzUuIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRQorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworUmVkIEhhdCBtYXkgaW5jbHVkZSBDb3ZlcmVkIENvZGUgaW4gcHJvZHVjdHMgd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2Ugc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKK1JlZCBIYXQgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIFJlZCBIYXQgQnJhbmRlZCBDb2RlIHdpdGhvdXQgUmVkIEhhdCBCcmFuZGVkIENvZGUgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2UgUmVkIEhhdCBCcmFuZGVkIENvZGUgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4gQ29udGFjdCBSZWQgSGF0IGZvciBkZXRhaWxzIG9mIGFsdGVybmF0ZSBsaWNlbnNpbmcgdGVybXMgYXZhaWxhYmxlLgorCis2LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRQorCis2LjEuIE5ldyBWZXJzaW9ucy4KK1JlZCBIYXQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgUmVkIEhhdC4gTm8gb25lIG90aGVyIHRoYW4gUmVkIEhhdCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgYmV5b25kIHdoYXQgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIGFuZCBzdWJzZXF1ZW50IExpY2Vuc2VzLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCitJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAiRUNPUyIsICJlQ29zIiwgIlJlZCBIYXQiLCAiUkhFUEwiIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMKKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUworCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4sIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cykgc2hhbGwgYmUgc3ViamVjdCB0byBmaW5hbCBhbmQgYmluZGluZyBhcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkgYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiBKQU1TL0VuZERpc3B1dGU7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TCisKK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworMTMuIEFERElUSU9OQUwgVEVSTVMgQVBQTElDQUJMRSBUTyBUSEUgUkVEIEhBVCBFQ09TIFBVQkxJQyBMSUNFTlNFCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IFJlZCBIYXQgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHdoaWNoIFJlZCBIYXQgb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCitSZWQgSGF0IGFuZCBsb2dvIC0gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmsgUmVkIEhhdCwgdGhlIFJlZCBIYXQgbG9nbywgZUNvcyBsb2dvLCBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3UgbWF5IGNvbnRhY3QgUmVkIEhhdCBmb3IgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRoZSBSZWQgSGF0IGFuZCBlQ29zIG1hcmtzIGluIGVpdGhlciB0aGUgZG9jdW1lbnRhdGlvbiBvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGJleW9uZCB0aGF0IHJlcXVpcmVkIGluIEV4aGliaXQgQi4KKworSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gQ29udHJhY3R1YWwgT2JsaWdhdGlvbiAtIFRvIHRoZSBleHRlbnQgdGhhdCBSZWQgSGF0IGlzIGxpbWl0ZWQgY29udHJhY3R1YWxseSBmcm9tIG1ha2luZyB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UsIFJlZCBIYXQgbWF5IGNob29zZSB0byBpbnRlZ3JhdGUgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGludG8gQ292ZXJlZCBDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW4gU291cmNlIENvZGUgZm9ybSwgZXZlbiBpZiBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQgIk1vZGlmaWNhdGlvbnMiIHVuZGVyIHRoaXMgTGljZW5zZS4KKworRVhISUJJVCBBCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnJlZGhhdC5jb20vCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0sIHJlbGVhc2VkIFNlcHRlbWJlciAzMCwgMTk5OC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJlZCBIYXQuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4iCisKK0VYSElCSVQgQgorCitQYXJ0IG9mIHRoZSBzb2Z0d2FyZSBlbWJlZGRlZCBpbiB0aGlzIHByb2R1Y3QgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLCBhIHRyYWRlbWFyayBvZiBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuIChodHRwOi8vd3d3LnJlZGhhdC5jb20vKS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIElOIFRISVMgUFJPRFVDVCBXQVMgSU4gUEFSVCBQUk9WSURFRCBCWSBSRUQgSEFUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQTC0xLjUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUEwtMS41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTA4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUEwtMS41CkBAIC0wLDAgKzEsNTQ2IEBACisKK1JlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgMS41IChSUEwxLjUpCisKK1JlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgKFJQTCkKKworVmVyc2lvbiAxLjUsIEp1bHkgMTUsIDIwMDcKKworQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcKK1RlY2huaWNhbCBQdXJzdWl0IEluYy4sCitBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQUkVBTUJMRQorCitUaGUgUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZSAoUlBMKSBpcyBiYXNlZCBvbiB0aGUgY29uY2VwdCBvZiByZWNpcHJvY2l0eSBvciwKK2lmIHlvdSBwcmVmZXIsIGZhaXJuZXNzLgorCitJbiBzaG9ydCwgdGhpcyBsaWNlbnNlIGdyZXcgb3V0IG9mIGEgZGVzaXJlIHRvIGNsb3NlIGxvb3Bob2xlcyBpbiBwcmV2aW91cyBvcGVuCitzb3VyY2UgbGljZW5zZXMsIGxvb3Bob2xlcyB0aGF0IGFsbG93ZWQgcGFydGllcyB0byBhY3F1aXJlIG9wZW4gc291cmNlIHNvZnR3YXJlCithbmQgZGVyaXZlIGZpbmFuY2lhbCBiZW5lZml0IGZyb20gaXQgd2l0aG91dCBoYXZpbmcgdG8gcmVsZWFzZSB0aGVpcgoraW1wcm92ZW1lbnRzIG9yIGRlcml2YXRpdmVzIHRvIHRoZSBjb21tdW5pdHkgd2hpY2ggZW5hYmxlZCB0aGVtLiBUaGlzIG9jY3VycmVkCithbnkgdGltZSBhbiBlbnRpdHkgZGlkIG5vdCByZWxlYXNlIHRoZWlyIGFwcGxpY2F0aW9uIHRvIGEgInRoaXJkIHBhcnR5Ii4KKworV2hpbGUgdGhlcmUgaXMgYSBjZXJ0YWluIGZyZWVkb20gaW4gdGhpcyBtb2RlbCBvZiBsaWNlbnNpbmcsIGl0IHN0cnVjayB0aGUKK2F1dGhvcnMgb2YgdGhlIFJQTCBhcyBiZWluZyB1bmZhaXIgdG8gdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBhdCBsYXJnZSBhbmQgdG8KK3RoZSBvcmlnaW5hbCBhdXRob3JzIG9mIHRoZSB3b3JrcyBpbiBwYXJ0aWN1bGFyLiBBZnRlciBhbGwsIGJ1ZyBmaXhlcywKK2V4dGVuc2lvbnMsIGFuZCBtZWFuaW5nZnVsIGFuZCB2YWx1YWJsZSBkZXJpdmF0aXZlcyB3ZXJlIG5vdCBjb25zaXN0ZW50bHkKK2ZpbmRpbmcgdGhlaXIgd2F5IGJhY2sgaW50byB0aGUgY29tbXVuaXR5IHdoZXJlIHRoZXkgY291bGQgZnVlbCBmdXJ0aGVyLCBhbmQKK2Zhc3RlciwgZ3Jvd3RoIGFuZCBleHBhbnNpb24gb2YgdGhlIG92ZXJhbGwgb3BlbiBzb3VyY2Ugc29mdHdhcmUgYmFzZS4KKworV2hpbGUgeW91IHNob3VsZCBjbGVhcmx5IHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBsaWNlbnNlLCB0aGUgZXNzZW5jZSBvZgordGhlIFJQTCBpcyBmb3VuZCBpbiB0d28gZGVmaW5pdGlvbnM6ICJEZXBsb3kiIGFuZCAiUmVxdWlyZWQgQ29tcG9uZW50cyIuCisKK1JlZ2FyZGluZyBkZXBsb3ltZW50LCB1bmRlciB0aGUgUlBMIHlvdXIgY2hhbmdlcywgYnVnIGZpeGVzLCBleHRlbnNpb25zLCBldGMuCittdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYXQgbGFyZ2Ugd2hlbiB5b3UgRGVwbG95IGluCithbnkgZm9ybSAtLSBlaXRoZXIgaW50ZXJuYWxseSBvciB0byBhbiBvdXRzaWRlIHBhcnR5LiBPbmNlIHlvdSBzdGFydCBydW5uaW5nCit0aGUgc29mdHdhcmUgeW91IGhhdmUgdG8gc3RhcnQgc2hhcmluZyB0aGUgc29mdHdhcmUuCisKK0Z1cnRoZXIsIHVuZGVyIHRoZSBSUEwgYWxsIGNvbXBvbmVudHMgeW91IGF1dGhvciBpbmNsdWRpbmcgc2NoZW1hcywgc2NyaXB0cywKK3NvdXJjZSBjb2RlLCBldGMuIC0tIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5YHJlIGNvbXBpbGVkIGludG8gYSBzaW5nbGUKK2JpbmFyeSBvciB1c2VkIGFzIHR3byBoYWx2ZXMgb2YgY2xpZW50L3NlcnZlciBhcHBsaWNhdGlvbiAtLSBtdXN0IGJlIHNoYXJlZC4KK1lvdSBoYXZlIHRvIHNoYXJlIHRoZSB3aG9sZSBwaWUsIG5vdCBhbiBpc29sYXRlZCBzbGljZSBvZiBpdC4KKworSW4gYWRkaXRpb24gdG8gdGhlc2UgZ29hbHMsIHRoZSBSUEwgd2FzIGF1dGhvcmVkIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZgordGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gYXMgbWFpbnRhaW5lZCBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKS4KKworVGhlIHNwZWNpZmljIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIGFyZSBkZWZpbmVkIGluIHRoZSByZW1haW5kZXIKK29mIHRoaXMgZG9jdW1lbnQuCisKK0xJQ0VOU0UgVEVSTVMKKworMS4wIEdlbmVyYWw7IEFwcGxpY2FiaWxpdHkgJmFtcDsgRGVmaW5pdGlvbnMuIFRoaXMgUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjUgKCJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgcHJvZ3JhbXMgb3Igb3RoZXIgd29ya3MgYXMgd2VsbCBhcyBhbnkKK2FuZCBhbGwgdXBkYXRlcyBvciBtYWludGVuYW5jZSByZWxlYXNlcyBvZiBzYWlkIHByb2dyYW1zIG9yIHdvcmtzICgiU29mdHdhcmUiKQorbm90IGFscmVhZHkgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hpY2ggdGhlIFNvZnR3YXJlIGNvcHlyaWdodCBob2xkZXIKKygiTGljZW5zb3IiKSBtYWtlcyBhdmFpbGFibGUgY29udGFpbmluZyBhIExpY2Vuc2UgTm90aWNlIChoZXJlaW5hZnRlciBkZWZpbmVkKQorZnJvbSB0aGUgTGljZW5zb3Igc3BlY2lmeWluZyBvciBhbGxvd2luZyB1c2Ugb3IgZGlzdHJpYnV0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gdGhlCitjcmVhdGlvbiBvZiBhbiBFeHRlbnNpb24uCisKKzEuMiAiRGVwbG95IiBtZWFucyB0byB1c2UsIFNlcnZlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgTGljZW5zZWQgU29mdHdhcmUKK290aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgUmVzZWFyY2ggYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzCit3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgTGljZW5zZWQKK1NvZnR3YXJlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBvdGhlciB0aGFuIGZvciBSZXNlYXJjaCBhbmQvb3IKK1BlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZgorTGljZW5zZWQgU29mdHdhcmUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuMyAiRGVyaXZhdGl2ZSBXb3JrcyIgYXMgdXNlZCBpbiB0aGlzIExpY2Vuc2UgaXMgZGVmaW5lZCB1bmRlciBVLlMuIGNvcHlyaWdodAorbGF3LgorCisxLjQgIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkCitpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhIHN1Y2gKK2FzIGRvd25sb2FkIGZyb20gYW4gRlRQIHNlcnZlciBvciB3ZWIgc2l0ZSwgd2hlcmUgc3VjaCBtZWNoYW5pc20gaXMgcHVibGljbHkKK2FjY2Vzc2libGUuCisKKzEuNSAiRXh0ZW5zaW9ucyIgbWVhbnMgYW55IE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MsIG9yIFJlcXVpcmVkCitDb21wb25lbnRzIGFzIHRob3NlIHRlcm1zIGFyZSBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4KKworMS42ICJMaWNlbnNlIiBtZWFucyB0aGlzIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UuCisKKzEuNyAiTGljZW5zZSBOb3RpY2UiIG1lYW5zIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQS4KKworMS44ICJMaWNlbnNlZCBTb2Z0d2FyZSIgbWVhbnMgYW55IFNvZnR3YXJlIGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZS4KK0xpY2Vuc2VkIFNvZnR3YXJlIGFsc28gaW5jbHVkZXMgYWxsIHByZXZpb3VzIEV4dGVuc2lvbnMgZnJvbSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgWW91IHJlY2VpdmUuCisKKzEuOSAiTGljZW5zb3IiIG1lYW5zIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIGFueSBTb2Z0d2FyZSBwcmV2aW91c2x5IG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hvIHJlbGVhc2VzIHRoZSBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZS4KKworMS4xMCAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9ucyB0byBvciBkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgKGkpIGEgZmlsZSBvciBvdGhlciBzdG9yYWdlIGNvbnRhaW5pbmcgTGljZW5zZWQgU29mdHdhcmUsIG9yIChpaSkKK2FueSBuZXcgZmlsZSBvciBzdG9yYWdlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgTGljZW5zZWQgU29mdHdhcmUsIG9yIChpaWkpCithbnkgZmlsZSBvciBzdG9yYWdlIHdoaWNoIHJlcGxhY2VzIG9yIG90aGVyd2lzZSBhbHRlcnMgdGhlIG9yaWdpbmFsCitmdW5jdGlvbmFsaXR5IG9mIExpY2Vuc2VkIFNvZnR3YXJlIGF0IHJ1bnRpbWUuCisKKzEuMTEgIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvcgoraGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2UKK29mIExpY2Vuc2VkIFNvZnR3YXJlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwKK2luZGVwZW5kZW50IGNvbnRyYWN0b3Igb3IgYWdlbnQgb2YgYSBjb3Jwb3JhdGlvbiwgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uCisoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuCisKKzEuMTIgIlJlcXVpcmVkIENvbXBvbmVudHMiIG1lYW5zIGFueSB0ZXh0LCBwcm9ncmFtcywgc2NyaXB0cywgc2NoZW1hLAoraW50ZXJmYWNlIGRlZmluaXRpb25zLCBjb250cm9sIGZpbGVzLCBvciBvdGhlciB3b3JrcyBjcmVhdGVkIGJ5IFlvdSB3aGljaCBhcmUKK3JlcXVpcmVkIGJ5IGEgdGhpcmQgcGFydHkgb2YgYXZlcmFnZSBza2lsbCB0byBzdWNjZXNzZnVsbHkgaW5zdGFsbCBhbmQgcnVuCitMaWNlbnNlZCBTb2Z0d2FyZSBjb250YWluaW5nIFlvdXIgTW9kaWZpY2F0aW9ucywgb3IgdG8gaW5zdGFsbCBhbmQgcnVuIFlvdXIKK0Rlcml2YXRpdmUgV29ya3MuCisKKzEuMTMgIlJlc2VhcmNoIiBtZWFucyBpbnZlc3RpZ2F0aW9uIG9yIGV4cGVyaW1lbnRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YKK3VuZGVyc3RhbmRpbmcgdGhlIG5hdHVyZSBhbmQgbGltaXRzIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgaXRzIHBvdGVudGlhbAordXNlcy4KKworMS4xNCAiU2VydmUiIG1lYW5zIHRvIGRlbGl2ZXIgTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucyBieQorbWVhbnMgb2YgYSBjb21wdXRlciBuZXR3b3JrIHRvIG9uZSBvciBtb3JlIGNvbXB1dGVycyBmb3IgcHVycG9zZXMgb2YgZXhlY3V0aW9uCitvZiBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zLgorCisxLjE1ICJTb2Z0d2FyZSIgbWVhbnMgYW55IGNvbXB1dGVyIHByb2dyYW1zIG9yIG90aGVyIHdvcmtzIGFzIHdlbGwgYXMgYW55Cit1cGRhdGVzIG9yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHRob3NlIHByb2dyYW1zIG9yIHdvcmtzIHdoaWNoIGFyZQorZGlzdHJpYnV0ZWQgcHVibGljbHkgYnkgTGljZW5zb3IuCisKKzEuMTYgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIHRoZQorTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucywgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGNvbnRhaW5lZAordGhlcmVpbiwgcGx1cyBhbnkgYXNzb2NpYXRlZCB0ZXh0LCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIG9yIG90aGVyCitjb21wb25lbnRzIHJlcXVpcmVkIGJ5IGEgdGhpcmQgcGFydHkgb2YgYXZlcmFnZSBza2lsbCB0byBidWlsZCBhIHJ1bm5pbmcKK3ZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIFlvdXIgRXh0ZW5zaW9ucy4KKworMS4xNyAiVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZSIgbWVhbnMgYW55IG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBCLgorCisxLjE4ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzCit1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkKK3doaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlCisiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yCittYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcAorb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbAorb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLjAgQWNjZXB0YW5jZSBPZiBMaWNlbnNlLiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIHNpbmNlCit5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LCBob3dldmVyIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gdXNlLAorY29weSwgZGlzdHJpYnV0ZSwgbW9kaWZ5LCBvciBjcmVhdGUgZGVyaXZhdGl2ZXMgb2YgZWl0aGVyIHRoZSBTb2Z0d2FyZSBvciBhbnkKK0V4dGVuc2lvbnMgY3JlYXRlZCBieSBhIENvbnRyaWJ1dG9yLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZgoreW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IHBlcmZvcm1pbmcgYW55IG9mIHRoZXNlIGFjdGlvbnMKK1lvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBZb3VyIGFncmVlbWVudCB0byBiZSBib3VuZCBieQorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSUYgWU9VIERPIE5PVCBBR1JFRSBXSVRIIEFMTCBUSEUgVEVSTVMgQU5ECitDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBETyBOT1QgVVNFLCBNT0RJRlksIENSRUFURSBERVJJVkFUSVZFUywgT1IKK0RJU1RSSUJVVEUgVEhFIFNPRlRXQVJFLiBJRiBJVCBJUyBJTVBPU1NJQkxFIEZPUiBZT1UgVE8gQ09NUExZIFdJVEggQUxMIFRIRQorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFIFRIRU4gWU9VIENBTiBOT1QgVVNFLCBNT0RJRlksIENSRUFURQorREVSSVZBVElWRVMsIE9SIERJU1RSSUJVVEUgVEhFIFNPRlRXQVJFLgorCiszLjAgR3JhbnQgb2YgTGljZW5zZSBGcm9tIExpY2Vuc29yLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgordGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gTGljZW5zb3JgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBhbmQgYW55Cit0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgTGljZW5zZWQgU29mdHdhcmUKK3VuZGVyIHRoaXMgTGljZW5zZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMy4xIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUKK0xpY2Vuc2VkIFNvZnR3YXJlIGFuZCBZb3VyIEV4dGVuc2lvbnMgaW4gYm90aCBTb3VyY2UgQ29kZSBmb3JtIG9yIGFzIGFuCitleGVjdXRhYmxlIHByb2dyYW0uCisKKzMuMiBDcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3KQorb2YgTGljZW5zZWQgU29mdHdhcmUgYnkgYWRkaW5nIHRvIG9yIGRlbGV0aW5nIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUKK29mIHNhaWQgTGljZW5zZWQgU29mdHdhcmUuCisKKzMuMyBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgTGljZW5zb3IsCit0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIG9yCitwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8KK2VuYWJsZSBZb3UgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZAorU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZi4KKworMy40IExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgd2l0aAorZGlmZmVyZW50IGZlYXR1cmVzLCBzcGVjaWZpY2F0aW9ucywgY2FwYWJpbGl0aWVzLCBmdW5jdGlvbnMsIGxpY2Vuc2luZyB0ZXJtcywKK2dlbmVyYWwgYXZhaWxhYmlsaXR5IG9yIG90aGVyIGNoYXJhY3RlcmlzdGljcy4gVGl0bGUsIG93bmVyc2hpcCByaWdodHMsIGFuZAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiBhbmQgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHNoYWxsIHJlbWFpbiBpbgorTGljZW5zb3IgYW5kL29yIGl0cyBDb250cmlidXRvcnMuCisKKzQuMCBHcmFudCBvZiBMaWNlbnNlIEZyb20gQ29udHJpYnV0b3IuIEJ5IGFwcGxpY2F0aW9uIG9mIHRoZSBwcm92aXNpb25zIGluCitTZWN0aW9uIDYgYmVsb3csIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LQorZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHNhaWQgQ29udHJpYnV0b3JgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cywgYW5kIGFueSB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIGRlcml2ZWQgZnJvbQordGhlIExpY2Vuc2VkIFNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworNC4xIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgYW55CitFeHRlbnNpb25zIERlcGxveWVkIGJ5IHN1Y2ggQ29udHJpYnV0b3Igb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW4gYm90aCBTb3VyY2UKK0NvZGUgZm9ybSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0sIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzIG9yIGFzCitwYXJ0IG9mIERlcml2YXRpdmUgV29ya3MuCisKKzQuMiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkKK0NvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIEV4dGVuc2lvbnMKK29yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeQordG8gZW5hYmxlIFlvdSB0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mCitMaWNlbnNlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mLgorCis1LjAgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0bworZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueQorb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5CitzdGF0ZWQgaGVyZWluLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAzIGFuZCA0LCBubyBvdGhlciBwYXRlbnQKK3JpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBoZXJlaW4uIFlvdXIgRXh0ZW5zaW9ucyBtYXkgcmVxdWlyZQorYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBMaWNlbnNvciBvciBDb250cmlidXRvcnMgd2hpY2ggZWFjaCBtYXkgZ3JhbnQKK2luIGl0cyBzb2xlIGRpc2NyZXRpb24uIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IKK2FueSBDb250cmlidXRvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZS4KK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20KK2xpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvcgorb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1LjEgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBMaWNlbnNvciBhbmQgZWFjaAorQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBMaWNlbnNlZAorU29mdHdhcmUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgYW55CitDb250cmlidXRvciB0aGF0IHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIExpY2Vuc29yIGFuZCBlYWNoCitDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyCitlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcworYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91CitoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMKK3JlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgaXQgaXMgWW91cgorcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQKK1NvZnR3YXJlLgorCis2LjAgWW91ciBPYmxpZ2F0aW9ucyBBbmQgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYW4gZXhwcmVzcworY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIFlvdSBoZXJlYnkgYWdyZWUKK3RoYXQgYW55IE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MsIG9yIFJlcXVpcmVkIENvbXBvbmVudHMgKGNvbGxlY3RpdmVseQorRXh0ZW5zaW9ucykgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgU2VjdGlvbiA0LiBBbnkgRXh0ZW5zaW9ucwordGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgRGVwbG95ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA3LiBZb3UKK2hlcmVieSBncmFudCB0byBMaWNlbnNvciBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSB3b3JsZC13aWRlLCBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgdGhvc2UgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBZb3Ugb3duIG9yCitjb250cm9sIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlcywKK3N1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIExpY2Vuc2VkIFNvZnR3YXJlLCBpbiBhbnkgZm9ybS4gQW55IEV4dGVuc2lvbnMgWW91CittYWtlIGFuZCBEZXBsb3kgbXVzdCBoYXZlIGEgZGlzdGluY3QgdGl0bGUgc28gYXMgdG8gcmVhZGlseSB0ZWxsIGFueQorc3Vic2VxdWVudCB1c2VyIG9yIENvbnRyaWJ1dG9yIHRoYXQgdGhlIEV4dGVuc2lvbnMgYXJlIGJ5IFlvdS4gWW91IG11c3QKK2luY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBvciBkaXJlY3Rpb25zIG9uIGhvdyB0byBvYnRhaW4gYSBjb3B5IHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIEV4dGVuc2lvbnMgWW91IGRpc3RyaWJ1dGUuIFlvdSBhZ3JlZSBub3QgdG8gb2ZmZXIgb3IgaW1wb3NlCithbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIG9yIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUsCitvciBpdHMgRXh0ZW5zaW9ucyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4KKworNi4xIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gWW91IG11c3QgbWFrZSBhdmFpbGFibGUsIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB0aGUgU291cmNlIENvZGUgb2YgYW55IEV4dGVuc2lvbnMgdGhhdCBZb3UgRGVwbG95LCB2aWEgYW4KK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbS4gVGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgdmVyc2lvbiB0aGF0IFlvdQorRGVwbG95IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgd2l0aGluIG9uZSAoMSkgbW9udGggb2Ygd2hlbiB5b3UgRGVwbG95IGFuZCBtdXN0CityZW1haW4gYXZhaWxhYmxlIGZvciBubyBsZXNzIHRoYW4gdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIFlvdSBjZWFzZQordG8gRGVwbG95LiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB0byBlYWNoCit2ZXJzaW9uIFlvdSBEZXBsb3kgcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KK01lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgYW55Citjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRlZCB1bmRlciB0aGlzIFNlY3Rpb24gaW4gZXhjZXNzIG9mIFlvdXIKK2FjdHVhbCBjb3N0IG9mIGR1cGxpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2Ygc2FpZCBjb3B5LgorCis2LjIgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UKK2NyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBiZSBkb2N1bWVudGVkIGluIHRoZSBTb3VyY2UgQ29kZSwgY2xlYXJseQorZGVzY3JpYmluZyB0aGUgYWRkaXRpb25zLCBjaGFuZ2VzIG9yIGRlbGV0aW9ucyBZb3UgbWFkZS4gWW91IG11c3QgaW5jbHVkZSBhCitwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbnMgYXJlIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCitmcm9tIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgaW5jbHVkZSB0aGUgbmFtZXMgb2YgdGhlIExpY2Vuc29yIGFuZCBhbnkKK0NvbnRyaWJ1dG9yIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBpbiAoaSkgdGhlIFNvdXJjZSBDb2RlIGFuZCAoaWkpIGluIGFueQorbm90aWNlIGRpc3BsYXllZCBieSB0aGUgTGljZW5zZWQgU29mdHdhcmUgWW91IGRpc3RyaWJ1dGUgb3IgaW4gcmVsYXRlZAorZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZS4gWW91IG1heSBub3QgbW9kaWZ5IG9yIGRlbGV0ZSBhbnkgcHJlLWV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzLAorY2hhbmdlIG5vdGljZXMgb3IgTGljZW5zZSB0ZXh0IGluIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aXRob3V0IHdyaXR0ZW4KK3Blcm1pc3Npb24gb2YgdGhlIHJlc3BlY3RpdmUgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IuCisKKzYuMyBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworYS4gVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdG8gYSB0aGlyZCBwYXJ0eWBzCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMKK0xpY2Vuc2UsIFlvdSBtdXN0IGluY2x1ZGUgYSBodW1hbi1yZWFkYWJsZSBmaWxlIHdpdGggWW91ciBkaXN0cmlidXRpb24gdGhhdAorZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhCityZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4KKworYi4gQ29udHJpYnV0b3IgQVBJcy4gSWYgWW91ciBFeHRlbnNpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcKK2ludGVyZmFjZSAoIkFQSSIpIGFuZCBZb3UgaGF2ZSBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHRoYXQgYXJlCityZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIFlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzCitpbmZvcm1hdGlvbiBpbiBhIGh1bWFuLXJlYWRhYmxlIGZpbGUgc3VwcGxpZWQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4KKworYy4gUmVwcmVzZW50YXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNi4zKGEpCithYm92ZSwgWW91IGJlbGlldmUgdGhhdCBhbnkgRXh0ZW5zaW9ucyBZb3UgZGlzdHJpYnV0ZSBhcmUgWW91ciBvcmlnaW5hbAorY3JlYXRpb25zIGFuZCB0aGF0IFlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkKK3RoaXMgTGljZW5zZS4KKworNi40IFJlcXVpcmVkIE5vdGljZXMuCisKK2EuIExpY2Vuc2UgVGV4dC4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMgTGljZW5zZSBvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvCithY3F1aXJlIGEgY29weSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBZb3UgcHJvdmlkZSBhbG9uZyB3aXRoIHRoZSBTb3VyY2UgQ29kZSBvZgorYW55IEV4dGVuc2lvbnMgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSwgd2hlcmV2ZXIgWW91IGRlc2NyaWJlCityZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gTGljZW5zZWQgU29mdHdhcmUuCisKK2IuIExpY2Vuc2UgTm90aWNlLiBZb3UgbXVzdCBkdXBsaWNhdGUgYW55IG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBBICh0aGUKKyJMaWNlbnNlIE5vdGljZSIpIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYW55IGNvcHkgWW91IGRpc3RyaWJ1dGUKK29mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zLiBJZiBZb3UgY3JlYXRlIGFuIEV4dGVuc2lvbiwgWW91CittYXkgYWRkIFlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBTb3VyY2UgQ29kZSBhbmQgYWNjb21wYW55aW5nCitkb2N1bWVudGF0aW9uIGFsb25nIHdpdGggYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udHJpYnV0aW9uLiBJZiBpdCBpcyBub3QKK3Bvc3NpYmxlIHRvIHB1dCB0aGUgTGljZW5zZSBOb3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cworc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBMaWNlbnNlIE5vdGljZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGEKK3VzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuCisKK2MuIFNvdXJjZSBDb2RlIEF2YWlsYWJpbGl0eS4gWW91IG11c3Qgbm90aWZ5IHRoZSBzb2Z0d2FyZSBjb21tdW5pdHkgb2YgdGhlCithdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUgdG8gWW91ciBFeHRlbnNpb25zIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHRoZSBkYXRlCitZb3UgaW5pdGlhbGx5IERlcGxveSBhbmQgaW5jbHVkZSBpbiBzdWNoIG5vdGlmaWNhdGlvbiBhIGRlc2NyaXB0aW9uIG9mIHRoZQorRXh0ZW5zaW9ucywgYW5kIGluc3RydWN0aW9ucyBvbiBob3cgdG8gYWNxdWlyZSB0aGUgU291cmNlIENvZGUuIFNob3VsZCBzdWNoCitpbnN0cnVjdGlvbnMgY2hhbmdlIHlvdSBtdXN0IG5vdGlmeSB0aGUgc29mdHdhcmUgY29tbXVuaXR5IG9mIHJldmlzZWQKK2luc3RydWN0aW9ucyB3aXRoaW4gb25lICgxKSBtb250aCBvZiB0aGUgZGF0ZSBvZiBjaGFuZ2UuIFlvdSBtdXN0IHByb3ZpZGUKK25vdGlmaWNhdGlvbiBieSBwb3N0aW5nIHRvIGFwcHJvcHJpYXRlIG5ld3MgZ3JvdXBzLCBtYWlsaW5nIGxpc3RzLCB3ZWJsb2dzLCBvcgorb3RoZXIgc2l0ZXMgd2hlcmUgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIHNlYXJjaCBlbmdpbmUgd291bGQgcmVhc29uYWJseSBiZQorZXhwZWN0ZWQgdG8gaW5kZXggeW91ciBwb3N0IGluIHJlbGF0aW9uc2hpcCB0byBxdWVyaWVzIHJlZ2FyZGluZyB0aGUgTGljZW5zZWQKK1NvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMuCisKK2QuIFVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbi4gWW91IG11c3QgZHVwbGljYXRlIGFueSBub3RpY2UgY29udGFpbmVkIGluCitFWEhJQklUIEIgKHRoZSAiVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZSIpIGluIGVhY2ggdXNlci12aXNpYmxlIGRpc3BsYXkKK29mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zIHdoaWNoIGRlbGluZWF0ZXMgY29weXJpZ2h0LAorb3duZXJzaGlwLCBvciBzaW1pbGFyIGF0dHJpYnV0aW9uIGluZm9ybWF0aW9uLiBJZiBZb3UgY3JlYXRlIGFuIEV4dGVuc2lvbiwKK1lvdSBtYXkgYWRkIFlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yLCBhbmQgYWRkIFlvdXIgYXR0cmlidXRpb24gbm90aWNlLCBhcyBhbgorZXF1YWxseSB2aXNpYmxlIGFuZCBmdW5jdGlvbmFsIGVsZW1lbnQgb2YgYW55IFVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UKK2NvbnRlbnQuIFRvIGVuc3VyZSBwcm9wZXIgYXR0cmlidXRpb24sIFlvdSBtdXN0IGFsc28gaW5jbHVkZSBzdWNoIFVzZXItVmlzaWJsZQorQXR0cmlidXRpb24gTm90aWNlIGluIGF0IGxlYXN0IG9uZSBsb2NhdGlvbiBpbiB0aGUgU29mdHdhcmUgZG9jdW1lbnRhdGlvbgord2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIG5vdGljZS4KKworNi41IEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YKK0xpY2Vuc2VkIFNvZnR3YXJlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uCitiZWhhbGYgb2YgdGhlIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIG90aGVyCithZ3JlZW1lbnRzIGJldHdlZW4geW91IGFuZCBMaWNlbnNvciBvciBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBjbGVhciB0aGF0Cithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91CithbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yCithbnkgbGlhYmlsaXR5IHBsdXMgYXR0b3JuZXkgZmVlcywgY29zdHMsIGFuZCByZWxhdGVkIGV4cGVuc2VzIGR1ZSB0byBhbnkgc3VjaAorYWN0aW9uIG9yIGNsYWltIGluY3VycmVkIGJ5IHRoZSBMaWNlbnNvciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mCit3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzYuNiBDb25mbGljdHMgV2l0aCBPdGhlciBMaWNlbnNlcy4gV2hlcmUgYW55IHBvcnRpb24gb2YgWW91ciBFeHRlbnNpb25zLCBieQordmlydHVlIG9mIGJlaW5nIERlcml2YXRpdmUgV29ya3Mgb2YgYW5vdGhlciBwcm9kdWN0IG9yIHNpbWlsYXIgY2lyY3Vtc3RhbmNlLAorZmFsbCB1bmRlciB0aGUgdGVybXMgb2YgYW5vdGhlciBsaWNlbnNlLCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIHNob3VsZCBiZQoraG9ub3JlZCBob3dldmVyIFlvdSBtdXN0IGFsc28gbWFrZSBZb3VyIEV4dGVuc2lvbnMgYXZhaWxhYmxlIHVuZGVyIHRoaXMKK0xpY2Vuc2UuIElmIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgY29udGludWUgdG8gY29uZmxpY3Qgd2l0aCB0aGUgdGVybXMgb2YKK3RoZSBvdGhlciBsaWNlbnNlIHlvdSBtYXkgd3JpdGUgdGhlIExpY2Vuc29yIGZvciBwZXJtaXNzaW9uIHRvIHJlc29sdmUgdGhlCitjb25mbGljdCBpbiBhIGZhc2hpb24gdGhhdCByZW1haW5zIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW50ZW50IG9mIHRoaXMgTGljZW5zZS4KK1N1Y2ggcGVybWlzc2lvbiB3aWxsIGJlIGdyYW50ZWQgYXQgdGhlIHNvbGUgZGlzY3JldGlvbiBvZiB0aGUgTGljZW5zb3IuCisKKzcuMCBWZXJzaW9ucyBvZiBUaGlzIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIGZyb20gdGltZSB0byB0aW1lIHJldmlzZWQKK3ZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBPbmNlIExpY2Vuc2VkIFNvZnR3YXJlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhCitwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUKK3Rlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlcgordGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObworb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8KK0xpY2Vuc2VkIFNvZnR3YXJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis3LjEgSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgd2hpY2ggWW91IG1heSBkbworb25seSBpbiBvcmRlciB0byBhcHBseSBpdCB0byBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBhbHJlYWR5IExpY2Vuc2VkIFNvZnR3YXJlCit1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtdXN0IHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QgY29uZnVzaW5nbHkKK3NpbWlsYXIgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciBsaWNlbnNlIGNvbnRhaW5zCit0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4gSW4gc28gbmFtaW5nIFlvdXIgbGljZW5zZSwgWW91IG1heSBub3QKK3VzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yIG9yIG9mIGFueSBDb250cmlidXRvci4gU2hvdWxkIFlvdXIgbW9kaWZpY2F0aW9ucwordG8gdGhpcyBMaWNlbnNlIGJlIGxpbWl0ZWQgdG8gYWx0ZXJhdGlvbiBvZiBhKSBTZWN0aW9uIDEzLjggc29sZWx5IHRvIG1vZGlmeQordGhlIGxlZ2FsIEp1cmlzZGljdGlvbiBvciBWZW51ZSBmb3IgZGlzcHV0ZXMsIGIpIEVYSElCSVQgQSBzb2xlbHkgdG8gZGVmaW5lCitMaWNlbnNlIE5vdGljZSB0ZXh0LCBvciBjKSB0byBFWEhJQklUIEIgc29sZWx5IHRvIGRlZmluZSBhIFVzZXItVmlzaWJsZQorQXR0cmlidXRpb24gTm90aWNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHJlZmVyIHRvIFlvdXIgTGljZW5zZSBhcyB0aGUKK1JlY2lwcm9jYWwgUHVibGljIExpY2Vuc2Ugb3Igc2ltcGx5IHRoZSBSUEwuCisKKzguMCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UKK09OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBGUkVFCitPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCitGVVJUSEVSIFRIRVJFIElTIE5PIFdBUlJBTlRZIE1BREUgQU5EIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgQVJFIERJU0NMQUlNRUQKK1RIQVQgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIE1FRVRTIE9SIENPTVBMSUVTIFdJVEggQU5ZIERFU0NSSVBUSU9OIE9GCitQRVJGT1JNQU5DRSBPUiBPUEVSQVRJT04sIFNBSUQgQ09NUEFUSUJJTElUWSBBTkQgU1VJVEFCSUxJVFkgQkVJTkcgWU9VUgorUkVTUE9OU0lCSUxJVFkuIExJQ0VOU09SIERJU0NMQUlNUyBBTlkgV0FSUkFOVFksIElNUExJRUQgT1IgRVhQUkVTU0VELCBUSEFUCitBTlkgQ09OVFJJQlVUT1JgUyBFWFRFTlNJT05TIE1FRVQgQU5ZIFNUQU5EQVJEIE9GIENPTVBBVElCSUxJVFkgT1IgREVTQ1JJUFRJT04KK09GIFBFUkZPUk1BTkNFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElDRU5TRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBMSUNFTlNFRCBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZCitSRVNQRUNULCBZT1UgKEFORCBOT1QgVEhFIExJQ0VOU09SIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUCitPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFVOREVSIFRIRSBURVJNUyBPRiBUSElTCitMSUNFTlNPUiBXSUxMIE5PVCBTVVBQT1JUIFRISVMgU09GVFdBUkUgQU5EIElTIFVOREVSIE5PIE9CTElHQVRJT04gVE8gSVNTVUUKK1VQREFURVMgVE8gVEhJUyBTT0ZUV0FSRS4gTElDRU5TT1IgSEFTIE5PIEtOT1dMRURHRSBPRiBFUlJBTlQgQ09ERSBPUiBWSVJVUyBJTgorVEhJUyBTT0ZUV0FSRSwgQlVUIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgSVMgRlJFRSBGUk9NIFNVQ0ggRVJST1JTCitPUiBWSVJVU0VTLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUworTElDRU5TRS4gTk8gVVNFIE9GIExJQ0VOU0VEIFNPRlRXQVJFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis5LjAgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwKK1dIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUKK0xJQ0VOU09SLCBBTlkgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBMSUNFTlNFRCBTT0ZUV0FSRSwgT1IgQU5ZCitTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUgorRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywKK0VWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEgKK09SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UCitBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQorRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMKK0VYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuMCBIaWdoIFJpc2sgQWN0aXZpdGllcy4gVEhFIExJQ0VOU0VEIFNPRlRXQVJFIElTIE5PVCBGQVVMVC1UT0xFUkFOVCBBTkQgSVMKK05PVCBERVNJR05FRCwgTUFOVUZBQ1RVUkVELCBPUiBJTlRFTkRFRCBGT1IgVVNFIE9SIERJU1RSSUJVVElPTiBBUyBPTi1MSU5FCitDT05UUk9MIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIFJFUVVJUklORyBGQUlMLVNBRkUgUEVSRk9STUFOQ0UsCitTVUNIIEFTIElOIFRIRSBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SCitDT01NVU5JQ0FUSU9OUyBTWVNURU1TLCBBSVIgVFJBRkZJQyBDT05UUk9MLCBESVJFQ1QgTElGRSBTVVBQT1JUIE1BQ0hJTkVTLCBPUgorV0VBUE9OUyBTWVNURU1TLCBJTiBXSElDSCBUSEUgRkFJTFVSRSBPRiBUSEUgTElDRU5TRUQgU09GVFdBUkUgQ09VTEQgTEVBRAorRElSRUNUTFkgVE8gREVBVEgsIFBFUlNPTkFMIElOSlVSWSwgT1IgU0VWRVJFIFBIWVNJQ0FMIE9SIEVOVklST05NRU5UQUwgREFNQUdFCisoIkhJR0ggUklTSyBBQ1RJVklUSUVTIikuIExJQ0VOU09SIEFORCBDT05UUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRZIE9GIEZJVE5FU1MgRk9SIEhJR0ggUklTSyBBQ1RJVklUSUVTLgorCisxMS4wIFJlc3BvbnNpYmlsaXR5IGZvciBDbGFpbXMuIEFzIGJldHdlZW4gTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycywgZWFjaAorcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdoaWNoIHNwZWNpZmljYWxseQorZGlzY2xhaW1zIHdhcnJhbnRpZXMgYW5kIGxpbWl0cyBhbnkgbGlhYmlsaXR5IG9mIHRoZSBMaWNlbnNvci4gVGhpcyBwYXJhZ3JhcGgKK2lzIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbmQgY29udHJvbGxlZCBieSB0aGUgRGlzY2xhaW1lciBPZgorV2FycmFudGllcyBvZiBTZWN0aW9uIDgsIHRoZSBMaW1pdGF0aW9uIE9mIERhbWFnZXMgaW4gU2VjdGlvbiA5LCBhbmQgdGhlCitkaXNjbGFpbWVyIGFnYWluc3QgdXNlIGZvciBIaWdoIFJpc2sgQWN0aXZpdGllcyBpbiBTZWN0aW9uIDEwLiBUaGUgTGljZW5zb3IKK2hhcyB0aGVyZWJ5IGRpc2NsYWltZWQgYWxsIHdhcnJhbnRpZXMgYW5kIGxpbWl0ZWQgYW55IGRhbWFnZXMgdGhhdCBpdCBpcyBvcgorbWF5IGJlIGxpYWJsZSBmb3IuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycyB0bworZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcyBjb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIFNlY3Rpb25zIDgsIDksIGFuZCAxMC4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKK3NoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMi4wIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2ltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy42IG9yIGlmCithcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZCBvciBzcGVjaWZpY2FsbHkKK2NvbXBseWluZyB3aXRoIFNlY3Rpb25zIDMsIDQgYW5kL29yIDYsIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBhbnkKK29mIHRob3NlIFNlY3Rpb25zLCBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiBMaWNlbnNlZAorU29mdHdhcmUuCisKKzEyLjEgQXV0b21hdGljIFRlcm1pbmF0aW9uIFVwb24gQnJlYWNoLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZAoraGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zCitoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZQorb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB0aGF0IGFyZSBwcm9wZXJseQorZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgdGhhdCwgYnkKK3RoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLAorc2hhbGwgc3Vydml2ZS4KKworMTIuMiBUZXJtaW5hdGlvbiBVcG9uIEFzc2VydGlvbiBvZiBQYXRlbnQgSW5mcmluZ2VtZW50LiBJZiBZb3UgaW5pdGlhdGUKK2xpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5CitqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEgQ29udHJpYnV0b3IgKExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yCithZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhbiBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gaGVyZWluIGFzICJSZXNwb25kZW50IikKK2FsbGVnaW5nIHRoYXQgTGljZW5zZWQgU29mdHdhcmUgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwKK3RoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAzIG9yCis0IG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSB1cG9uIHNpeHR5ICg2MCkgZGF5cyBub3RpY2UKK2Zyb20gUmVzcG9uZGVudCAodGhlICJOb3RpY2UgUGVyaW9kIikgdW5sZXNzIHdpdGhpbiB0aGF0IE5vdGljZSBQZXJpb2QgWW91CitlaXRoZXIgYWdyZWUgaW4gd3JpdGluZyAoaSkgdG8gcGF5IFJlc3BvbmRlbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJseQorcm95YWx0eSBmb3IgWW91ciBwYXN0IG9yIGZ1dHVyZSB1c2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgbWFkZSBieSBzdWNoCitSZXNwb25kZW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQKK1NvZnR3YXJlIGFnYWluc3Qgc3VjaCBSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZQorcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlCitwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieQorTGljZW5zb3IgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDMgYW5kIDQgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlCitleHBpcmF0aW9uIG9mIHNhaWQgTm90aWNlIFBlcmlvZC4KKworMTIuMyBSZWFzb25hYmxlIFZhbHVlIG9mIFRoaXMgTGljZW5zZS4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQKK2NsYWltIGFnYWluc3QgUmVzcG9uZGVudCBhbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFNvZnR3YXJlIGRpcmVjdGx5IG9yCitpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkKK2xpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudAorbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzYWlkCitSZXNwb25kZW50IHVuZGVyIFNlY3Rpb25zIDMgYW5kIDQgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nCit0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKzEyLjQgTm8gUmV0cm9hY3RpdmUgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIKK3RoaXMgU2VjdGlvbiBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgbGljZW5zZXMgdG8KK2Rpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueQorZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzEzLjAgTWlzY2VsbGFuZW91cy4KKworMTMuMSBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgTGljZW5zZWQgU29mdHdhcmUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIKK2FzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZgorImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZQorZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuCitDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00CisoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aXRoIG9ubHkKK3Rob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nCithbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlLCBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbgorYmV0d2VlbiBvciBhbW9uZyBZb3UsIExpY2Vuc29yLCBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50Cit0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSwgb3Igb3RoZXJ3aXNlLgorCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBMaWNlbnNvcmBzCityaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBzdWJjb250cmFjdCwgbWFya2V0LCBvciBkaXN0cmlidXRlCit0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3IKK290aGVyd2lzZSBjb21wZXRlIHdpdGgsIEV4dGVuc2lvbnMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCwgb3IKK2Rpc3RyaWJ1dGUuCisKKzEzLjQgQ29uc2VudCBUbyBCcmVhY2ggTm90IFdhaXZlci4gRmFpbHVyZSBieSBMaWNlbnNvciBvciBDb250cmlidXRvciB0bworZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50CitvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcKK3RoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkKK3RvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzEzLjYgSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLiBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvcgorWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yCithbGwgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiwKK3RoZW4gWW91IGNhbm5vdCB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUuCisKKzEzLjcgRXhwb3J0IFJlc3RyaWN0aW9ucy4gWW91IG1heSBiZSByZXN0cmljdGVkIHdpdGggcmVzcGVjdCB0byBkb3dubG9hZGluZyBvcgorb3RoZXJ3aXNlIGFjcXVpcmluZywgZXhwb3J0aW5nLCBvciByZWV4cG9ydGluZyB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgYW55Cit1bmRlcmx5aW5nIGluZm9ybWF0aW9uIG9yIHRlY2hub2xvZ3kgYnkgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgYXBwbGljYWJsZQorbGF3cyBhbmQgcmVndWxhdGlvbnMuIEJ5IGRvd25sb2FkaW5nIG9yIGJ5IG90aGVyd2lzZSBvYnRhaW5pbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZSwgWW91IGFyZSBhZ3JlZWluZyB0byBiZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIGFsbAorYXBwbGljYWJsZSBsYXdzIGFuZCByZWd1bGF0aW9ucy4KKworMTMuOCBBcmJpdHJhdGlvbiwgSnVyaXNkaWN0aW9uICZhbXA7IFZlbnVlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkKK0NvbG9yYWRvIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcworb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gWW91IGV4cHJlc3NseSBhZ3JlZSB0aGF0CithbnkgZGlzcHV0ZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3VibWl0dGVkIHRvIGJpbmRpbmcgYXJiaXRyYXRpb24KK3VuZGVyIHRoZSBydWxlcyB0aGVuIHByZXZhaWxpbmcgb2YgdGhlIEFtZXJpY2FuIEFyYml0cmF0aW9uIEFzc29jaWF0aW9uLiBZb3UKK2Z1cnRoZXIgYWdyZWUgdGhhdCBBZGFtcyBDb3VudHksIENvbG9yYWRvIFVTQSBpcyBwcm9wZXIgdmVudWUgYW5kIGdyYW50IHN1Y2gKK2FyYml0cmF0aW9uIHByb2NlZWRpbmcganVyaXNkaWN0aW9uIGFzIG1heSBiZSBhcHByb3ByaWF0ZSBmb3IgcHVycG9zZXMgb2YKK3Jlc29sdmluZyBhbnkgZGlzcHV0ZSB1bmRlciB0aGlzIExpY2Vuc2UuIEp1ZGdlbWVudCB1cG9uIGFueSBhd2FyZCBtYWRlIGluCithcmJpdHJhdGlvbiBtYXkgYmUgZW50ZXJlZCBhbmQgZW5mb3JjZWQgaW4gYW55IGNvdXJ0IG9mIGNvbXBldGVudAoranVyaXNkaWN0aW9uLiBUaGUgYXJiaXRyYXRvciBzaGFsbCBhd2FyZCBhdHRvcm5leWBzIGZlZXMgYW5kIGNvc3RzIG9mCithcmJpdHJhdGlvbiB0byB0aGUgcHJldmFpbGluZyBwYXJ0eS4gU2hvdWxkIGVpdGhlciBwYXJ0eSBmaW5kIGl0IG5lY2Vzc2FyeSB0bworZW5mb3JjZSBpdHMgYXJiaXRyYXRpb24gYXdhcmQgb3Igc2VlayBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvZiBzdWNoIGF3YXJkIGluIGEKK2NpdmlsIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkCit0byByZWFzb25hYmxlIGF0dG9ybmV5YHMgZmVlcyBhbmQgY29zdHMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMKK0NvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseQorZXhjbHVkZWQuIFlvdSBhbmQgTGljZW5zb3IgZXhwcmVzc2x5IHdhaXZlIGFueSByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueQorbGl0aWdhdGlvbiBjb25jZXJuaW5nIExpY2Vuc2VkIFNvZnR3YXJlIG9yIHRoaXMgTGljZW5zZS4gQW55IGxhdyBvciByZWd1bGF0aW9uCit0aGF0IHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlCitkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjkgRW50aXJlIEFncmVlbWVudC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4KK3RoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLgorCitFWEhJQklUIEEKKworVGhlIExpY2Vuc2UgTm90aWNlIGJlbG93IG11c3QgYXBwZWFyIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYW55Citjb3B5IFlvdSBkaXN0cmlidXRlIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBhbnkgRXh0ZW5zaW9ucyB0aGVyZXRvOgorCitVbmxlc3MgZXhwbGljaXRseSBhY3F1aXJlZCBhbmQgbGljZW5zZWQgZnJvbSBMaWNlbnNvciB1bmRlciBhbm90aGVyCitsaWNlbnNlLCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSZWNpcHJvY2FsIFB1YmxpYworTGljZW5zZSAoIlJQTCIpIFZlcnNpb24gMS41LCBvciBzdWJzZXF1ZW50IHZlcnNpb25zIGFzIGFsbG93ZWQgYnkgdGhlIFJQTCwKK2FuZCBZb3UgbWF5IG5vdCBjb3B5IG9yIHVzZSB0aGlzIGZpbGUgaW4gZWl0aGVyIHNvdXJjZSBjb2RlIG9yIGV4ZWN1dGFibGUKK2Zvcm0sIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBSUEwuCisKK0FsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgUlBMIGlzIHByb3ZpZGVkIHN0cmljdGx5IG9uIGFuICJBUworSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQKK0xJQ0VOU09SIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQKK0xJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQsIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFNlZSB0aGUgUlBMIGZvciBzcGVjaWZpYworbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIFJQTC4KKworRVhISUJJVCBCCisKK1RoZSBVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlIGJlbG93LCB3aGVuIHByb3ZpZGVkLCBtdXN0IGFwcGVhciBpbiBlYWNoCit1c2VyLXZpc2libGUgZGlzcGxheSBhcyBkZWZpbmVkIGluIFNlY3Rpb24gNi40IChkKToKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBTTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUFNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgxNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBTTC0xLjAKQEAgLTAsMCArMSwxODIgQEAKKworUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMAorCisoUmV2LiBEYXRlIE9jdG9iZXIgMjgsIDIwMDIpCisKK0Fsc28gYXZhaWxhYmxlIGluIHRleHQgZm9ybWF0LgorCisxLiBHZW5lcmFsIERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIFJlYWxOZXR3b3JrcywgSW5jLiwgb3IgYW55IG90aGVyIGVudGl0eSB0aGF0IGVsZWN0cyB0byB1c2UgdGhpcyBsaWNlbnNlLCAoIkxpY2Vuc29yIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGFuZCB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgTGljZW5zb3IgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsIENvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4wIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZikgKCJMaWNlbnNlIikuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIFlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcsIGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBzb2Z0d2FyZSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIHNvZnR3YXJlKSwgWW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJbiBhZGRpdGlvbiwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYnkgY2xpY2tpbmcgdGhlIEFjY2VwdCBidXR0b24gb3IgZG93bmxvYWRpbmcgdGhlIHNvZnR3YXJlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBMaWNlbnNvciBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgKGkpIGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBMaWNlbnNvciBhbmQgKGlpKSBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHVzaW5nIG9yIG1ha2luZyB0aGUgT3JpZ2luYWwgQ29kZSBhbG9uZSBhbmQgbm90IGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmU7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgKGkpIGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgYXJlIGluZnJpbmdlZCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYnkgdXNpbmcgb3IgbWFraW5nIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvbXBhdGlibGUgU291cmNlIExpY2Vuc2UiIG1lYW5zIGFueSBvbmUgb2YgdGhlIGxpY2Vuc2VzIGxpc3RlZCBvbiBFeGhpYml0IEIgb3IgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvY29tcGxpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZXMgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYnkgTGljZW5zb3IgaW4gd3JpdGluZy4gTm90d2l0aHN0YW5kaW5nIGFueSB0ZXJtIHRvIHRoZSBjb250cmFyeSBpbiBhbnkgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSwgYW55IGNvZGUgY292ZXJlZCBieSBhbnkgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSB0aGF0IGlzIHVzZWQgd2l0aCBDb3ZlcmVkIENvZGUgbXVzdCBiZSBtYWRlIHJlYWRpbHkgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm1hdCBmb3Igcm95YWx0eS1mcmVlIHVzZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2Ugb3IgdGhpcyBMaWNlbnNlLgorCisxLjMgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuNCAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS41ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuNiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBlaXRoZXIgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0IGxhdywgYW5kIGluY2x1ZGluZyBhbnkgd29yayBjb250YWluaW5nIG9yIGluY2x1ZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiBEZXJpdmF0aXZlIFdvcmsgYWxzbyBpbmNsdWRlcyBhbnkgd29yayB3aGljaCBjb21iaW5lcyBhbnkgcG9ydGlvbiBvZiBDb3ZlcmVkIENvZGUgb3IgTW9kaWZpY2F0aW9ucyB3aXRoIGNvZGUgbm90IG90aGVyd2lzZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjcgIkV4dGVybmFsbHkgRGVwbG95IiBtZWFucyB0byBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBpbiBhbnkgd2F5IHRoYXQgbWF5IGJlIGFjY2Vzc2VkIG9yIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB1c2VkIHRvIHByb3ZpZGUgYW55IHNlcnZpY2VzIHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdSwgb3IgdXNlZCBpbiBhbnkgd2F5IHRvIGRlbGl2ZXIgYW55IGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRoZSBDb3ZlcmVkIENvZGUgaXMgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGFydGllcywgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yaywgb3IgdXNlZCB0byBwcm92aWRlIHNlcnZpY2VzIG9yIG90aGVyd2lzZSBkZWxpdmVyIGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4gWW91LgorCisxLjguICJJbnRlcmZhY2UiIG1lYW5zIGludGVyZmFjZXMsIGZ1bmN0aW9ucywgcHJvcGVydGllcywgY2xhc3MgZGVmaW5pdGlvbnMsIEFQSXMsIGhlYWRlciBmaWxlcywgR1VJRHMsIFYtVGFibGVzLCBhbmQvb3IgcHJvdG9jb2xzIGFsbG93aW5nIG9uZSBwaWVjZSBvZiBzb2Z0d2FyZSwgZmlybXdhcmUgb3IgaGFyZHdhcmUgdG8gY29tbXVuaWNhdGUgb3IgaW50ZXJvcGVyYXRlIHdpdGggYW5vdGhlciBwaWVjZSBvZiBzb2Z0d2FyZSwgZmlybXdhcmUgb3IgaGFyZHdhcmUuCisKKzEuOSAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKzEuMTAgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IExpY2Vuc29yIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS4xMSAiUGVyc29uYWwgVXNlIiBtZWFucyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvciBoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbGBzIHVzZSBvZiBDb3ZlcmVkIENvZGUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLCBpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiAoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuCisKKzEuMTIgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworMS4xMyAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgKHZpYSBkb3dubG9hZGluZyBvciB1c2luZyBDb3ZlcmVkIENvZGUgb3Igb3RoZXJ3aXNlIGluZGljYXRpbmcgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSksIGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgY29weXJpZ2h0IGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgTGljZW5zb3JgcyBjb3B5cmlnaHRzIGNvdmVyIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIExpY2Vuc29yIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7CisKKyhiKSBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mIENvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDY7CisKKyhjKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7CisKKyhkKSBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBZb3Ugc2hvdWxkIHByZWZlcmFibHkgZGlzdHJpYnV0ZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSk7IGFuZAorCisoZSkgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LCBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuIFlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGUgT2JqZWN0IENvZGUgTm90aWNlIHNldCBmb3J0aCBpbiBFeGhpYml0IEEgaW4gdGhlICJhYm91dCIgYm94IG9yIG90aGVyIGFwcHJvcHJpYXRlIHBsYWNlIHdoZXJlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzIGFyZSBwbGFjZWQsIGluY2x1ZGluZyBhbnkgcGFja2FnaW5nIG1hdGVyaWFscy4KKworMi4yIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggTGljZW5zb3IgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gTGljZW5zb3IgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgaW1wb3J0IG9yIG9mZmVyIGZvciBzYWxlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSBzdWNoIGxpY2Vuc2UocykuCisKKzIuMyBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgKHZpYSBkb3dubG9hZGluZyBvciB1c2luZyBDb3ZlcmVkIENvZGUgb3Igb3RoZXJ3aXNlIGluZGljYXRpbmcgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSksIGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNvcmBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlIGFuZCBpbXBvcnQgdGhlIENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlIHlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOgorCisoYSkgWW91IGdyYW50IHRvIExpY2Vuc29yIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgaXJyZXZvY2FibGUsIHJveWFsdHkgZnJlZSBsaWNlbnNlIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byBtYWtlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgdXNlLCBpbXBvcnQsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgTGljZW5zb3JgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsgYW5kCisKKyhiKSBZb3UgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGRpc3RyaWJ1dGUsIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgTGljZW5zb3IgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0gYW5kIGZvciBhbnkgcHVycG9zZSwgdGhyb3VnaCBtdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKyhjKSBZb3UgYWdyZWUgbm90IHVzZSBhbnkgaW5mb3JtYXRpb24gZGVyaXZlZCBmcm9tIFlvdXIgdXNlIGFuZCByZXZpZXcgb2YgdGhlIENvdmVyZWQgQ29kZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkgYWxnb3JpdGhtcyBvciBpbnZlbnRpb25zIHRoYXQgbWF5IGJlIGNvbnRhaW5lZCBpbiB0aGUgQ292ZXJlZCBDb2RlLCBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNzZXJ0aW5nIGFueSBvZiBZb3VyIHBhdGVudCByaWdodHMsIG9yIGFzc2lzdGluZyBhIHRoaXJkIHBhcnR5IHRvIGFzc2VydCBhbnkgb2YgaXRzIHBhdGVudCByaWdodHMsIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLgorCis0LiBEZXJpdmF0aXZlIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3Qgb3RoZXJ3aXNlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIERlcml2YXRpdmUgV29yayBhcyBhbiBpbnRlZ3JhdGVkIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaW5jbHVkaW5nIGFsbCBNb2RpZmljYXRpb25zLgorCis0LjEgWW91IG11c3QgY2F1c2UgYW55IERlcml2YXRpdmUgV29yayB0aGF0IHlvdSBkaXN0cmlidXRlLCBwdWJsaXNoIG9yIEV4dGVybmFsbHkgRGVwbG95LCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgbm8gb3RoZXIgbGljZW5zZSBleGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA0LjIuIFlvdSBhbHNvIG11c3QgbWFrZSBTb3VyY2UgQ29kZSBhdmFpbGFibGUgZm9yIHRoZSBEZXJpdmF0aXZlIFdvcmsgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgTW9kaWZpY2F0aW9ucywgZGVzY3JpYmVkIGluIFNlY3Rpb25zIDIgYW5kIDMsIGFib3ZlLgorCis0LjIgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZXMuIFNvZnR3YXJlIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgd2l0aG91dCBhbnkgdXNlIG9mIENvdmVyZWQgQ29kZSBhbmQgd2hpY2ggY29udGFpbiBubyBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUsIE1vZGlmaWNhdGlvbnMgb3Igb3RoZXIgRGVyaXZhdGl2ZSBXb3JrcywgYnV0IGFyZSB1c2VkIG9yIGNvbWJpbmVkIGluIGFueSB3YXkgd2l0aCB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gZm9ybSBhIGxhcmdlciBEZXJpdmF0aXZlIFdvcmssIGFyZSBleGVtcHQgZnJvbSB0aGUgY29uZGl0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LjEgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCB0aGF0OiB0aGUgc29mdHdhcmUgbW9kdWxlLCBpbmNsdWRpbmcgYW55IHNvZnR3YXJlIHRoYXQgaXMgbGlua2VkIHRvLCBpbnRlZ3JhdGVkIHdpdGgsIG9yIHBhcnQgb2YgdGhlIHNhbWUgYXBwbGljYXRpb25zIGFzLCB0aGUgc29mdHdhcmUgbW9kdWxlIGJ5IGFueSBtZXRob2QgbXVzdCBiZSB3aG9sbHkgc3ViamVjdCB0byBvbmUgb2YgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VzLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgYWxsIENvdmVyZWQgQ29kZSBtdXN0IGJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGh1cywgdGhlIGVudGlyZSBEZXJpdmF0aXZlIFdvcmsgbXVzdCBiZSBsaWNlbnNlZCB1bmRlciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBSUFNMIChmb3IgQ292ZXJlZCBDb2RlKSBhbmQgYSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIGZvciBhbnkgaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgc29mdHdhcmUgbW9kdWxlcyB3aXRoaW4gdGhlIERlcml2YXRpdmUgV29yay4gVGhlIGZvcmVnb2luZyByZXF1aXJlbWVudCBhcHBsaWVzIGV2ZW4gaWYgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2Ugd291bGQgb3JkaW5hcmlseSBhbGxvdyB0aGUgc29mdHdhcmUgbW9kdWxlIHRvIGxpbmsgd2l0aCwgb3IgZm9ybSBsYXJnZXIgd29ya3Mgd2l0aCwgb3RoZXIgc29mdHdhcmUgdGhhdCBpcyBub3Qgc3ViamVjdCB0byB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZS4gRm9yIGV4YW1wbGUsIGFsdGhvdWdoIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIHYxLjEgYWxsb3dzIE1vemlsbGEgY29kZSB0byBiZSBjb21iaW5lZCB3aXRoIHByb3ByaWV0YXJ5IHNvZnR3YXJlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gdGhlIE1QTCwgaWYgTVBMLWxpY2Vuc2VkIGNvZGUgaXMgdXNlZCB3aXRoIENvdmVyZWQgQ29kZSB0aGUgTVBMLWxpY2Vuc2VkIGNvZGUgY291bGQgbm90IGJlIGNvbWJpbmVkIG9yIGxpbmtlZCB3aXRoIGFueSBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgTVBMLiBUaGUgZ2VuZXJhbCBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIDQuMiBpcyB0byBlbmFibGUgdXNlIG9mIENvdmVyZWQgQ29kZSB3aXRoIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSB3aG9sbHkgc3ViamVjdCB0byBhbiBhY2NlcHRhYmxlIG9wZW4gc291cmNlIGxpY2Vuc2UuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgeW91ciB1c2Ugb2Ygc29mdHdhcmUgd2l0aCBDb3ZlcmVkIENvZGUgaXMgYWxsb3dlZCB1bmRlciBZb3VyIGxpY2Vuc2UgdG8gc3VjaCBzb2Z0d2FyZS4KKworNC4zIE1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgQ292ZXJlZCBDb2RlIHdpdGggdGhlIENvdmVyZWQgQ29kZSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIENvdmVyZWQgQ29kZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGRlbGl2ZXIgdGhlIENvdmVyZWQgQ29kZSBmb3IgY29tYmluYXRpb24gYW5kL29yIGludGVncmF0aW9uIHdpdGggYW4gYXBwbGljYXRpb24gcHJldmlvdXNseSBwcm92aWRlZCBieSBZb3UgKGZvciBleGFtcGxlLCB2aWEgYXV0b21hdGljIHVwZGF0aW5nIHRlY2hub2xvZ3kpLCBzdWNoIGNvbWJpbmF0aW9uIGFuZC9vciBpbnRlZ3JhdGlvbiBjb25zdGl0dXRlcyBhIERlcml2YXRpdmUgV29yayBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzUuIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgQ292ZXJlZCBDb2RlLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuIE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MgYW5kL29yIGFueSB1c2Ugb3IgY29tYmluYXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgdGVjaG5vbG9neSBwcm92aWRlZCBieSBMaWNlbnNvciBvciB0aGlyZCBwYXJ0aWVzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gTGljZW5zb3Igd2hpY2ggTGljZW5zb3IgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKworNS4xLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgb3duZWQgYnkgTGljZW5zb3IgKCJMaWNlbnNvciBNYXJrcyIgZGVmaW5lZCBpbiBFeGhpYml0IEMpIG9yIHRvIGFueSB0cmFkZW1hcmsgb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiBObyBMaWNlbnNvciBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IHRoZSBMaWNlbnNvciBUcmFkZW1hcmsgUG9saWN5IGRlZmluZWQgaW4gRXhoaWJpdCBDLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIExpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBMaWNlbnNvciBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gTGljZW5zb3IgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObyBvbmUgb3RoZXIgdGhhbiBMaWNlbnNvciBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgTElDRU5TT1IgQU5EIExJQ0VOU09SYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiTElDRU5TT1IiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gTElDRU5TT1IgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBMSUNFTlNPUiwgQSBMSUNFTlNPUiBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiBoaWdoIHJpc2sgYWN0aXZpdGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgYWlyY3JhZnQgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4gTGljZW5zb3IgZGlzY2xhaW1zIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgZml0bmVzcyBmb3Igc3VjaCB1c2VzLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIExJQ0VOU09SIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIFNUUklDVCBMSUFCSUxJVFkpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIExJQ0VOU09SIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgTGljZW5zb3JgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiB0ZW4gZG9sbGFycyAoJDEwLjAwKS4KKworMTAuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gTGljZW5zb3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBMaWNlbnNvciAoIkxpY2Vuc29yIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggTGljZW5zb3IgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBMaWNlbnNvciBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggTGljZW5zb3IgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTEuIFRlcm1pbmF0aW9uLgorCisxMS4xIFRlcm0gYW5kIFRlcm1pbmF0aW9uLiBUaGUgdGVybSBvZiB0aGlzIExpY2Vuc2UgaXMgcGVycGV0dWFsIHVubGVzcyB0ZXJtaW5hdGVkIGFzIHByb3ZpZGVkIGJlbG93LiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gTGljZW5zb3IgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisKKyhiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTIuNShiKTsgb3IKKworKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBMaWNlbnNvciBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IExpY2Vuc29yIChpbmNsdWRpbmcgYnkgY3Jvc3MtY2xhaW0gb3IgY291bnRlciBjbGFpbSBpbiBhIGxhd3N1aXQpOworCisoZCkgdXBvbiB3cml0dGVuIG5vdGljZSBmcm9tIExpY2Vuc29yIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgYW55IHRoaXJkIHBhcnR5IGFsbGVnaW5nIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIGFueSBwYXRlbnQgKGluY2x1ZGluZyBieSBjcm9zcy1jbGFpbSBvciBjb3VudGVyIGNsYWltIGluIGEgbGF3c3VpdCkuCisKKzExLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisxMi4gTWlzY2VsbGFuZW91cy4KKworMTIuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTIuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgWW91LCBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTIuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgTGljZW5zb3JgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTIuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMi42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBMaWNlbnNvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgU2VhdHRsZSwgV2FzaGluZ3RvbiwgYW5kIFlvdSBhbmQgTGljZW5zb3IgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMi43IEV4cG9ydC9JbXBvcnQgTGF3cy4gVGhpcyBzb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGFsbCBleHBvcnQgYW5kIGltcG9ydCBsYXdzIGFuZCByZXN0cmljdGlvbnMgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSByZWNlaXZlIHRoZSBDb3ZlcmVkIENvZGUgYW5kIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IFlvdSBkbyBub3QgZXhwb3J0LCByZS1leHBvcnQgb3IgaW1wb3J0IHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IGRpcmVjdCBwcm9kdWN0IHRoZXJlb2YgaW4gdmlvbGF0aW9uIG9mIGFueSBzdWNoIHJlc3RyaWN0aW9ucywgbGF3cyBvciByZWd1bGF0aW9ucywgb3Igd2l0aG91dCBhbGwgbmVjZXNzYXJ5IGF1dGhvcml6YXRpb25zLgorCisxMi44IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBXYXNoaW5ndG9uLgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzM7IHF1ZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMztkaWcmIzIzMztzIGVuIGFuZ2xhaXMuCisKKworRVhISUJJVCBBLgorCisiQ29weXJpZ2h0ICYjMTY5OyAxOTk1LTIwMDIgUmVhbE5ldHdvcmtzLCBJbmMuIGFuZC9vciBpdHMgbGljZW5zb3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlLCBhbmQgdGhlIGZpbGVzIGluY2x1ZGVkIHdpdGggdGhpcyBmaWxlLCBhcmUgc3ViamVjdCB0byB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIlJQU0wiKSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvcnBzbCB1bmxlc3MgeW91IGhhdmUgbGljZW5zZWQgdGhlIGZpbGUgdW5kZXIgdGhlIFJlYWxOZXR3b3JrcyBDb21tdW5pdHkgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiUkNTTCIpIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5oZWxpeGNvbW11bml0eS5vcmcvY29udGVudC9yY3NsLCBpbiB3aGljaCBjYXNlIHRoZSBSQ1NMIHdpbGwgYXBwbHkuIFlvdSBtYXkgYWxzbyBvYnRhaW4gdGhlIGxpY2Vuc2UgdGVybXMgZGlyZWN0bHkgZnJvbSBSZWFsTmV0d29ya3MuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgUlBTTCBvciwgaWYgeW91IGhhdmUgYSB2YWxpZCBSQ1NMIHdpdGggUmVhbE5ldHdvcmtzIGFwcGxpY2FibGUgdG8gdGhpcyBmaWxlLCB0aGUgUkNTTC4gUGxlYXNlIHNlZSB0aGUgYXBwbGljYWJsZSBSUFNMIG9yIFJDU0wgZm9yIHRoZSByaWdodHMsIG9ibGlnYXRpb25zIGFuZCBsaW1pdGF0aW9ucyBnb3Zlcm5pbmcgdXNlIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhlbGl4IEROQSBUZWNobm9sb2d5LiBSZWFsTmV0d29ya3MgaXMgdGhlIGRldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgY29kZSBhbmQgb3ducyB0aGUgY29weXJpZ2h0cyBpbiB0aGUgcG9ydGlvbnMgaXQgY3JlYXRlZC4KKworVGhpcyBmaWxlLCBhbmQgdGhlIGZpbGVzIGluY2x1ZGVkIHdpdGggdGhpcyBmaWxlLCBpcyBkaXN0cmlidXRlZCBhbmQgbWFkZSBhdmFpbGFibGUgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIFJFQUxORVRXT1JLUyBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1RlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgVGVzdCBTdWl0ZShzKSBMb2NhdGlvbiAoaWYgbGljZW5zZWQgdW5kZXIgdGhlIFJDU0wpOgorCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyIKKworT2JqZWN0IENvZGUgTm90aWNlOiBIZWxpeCBETkEgQ2xpZW50IHRlY2hub2xvZ3kgaW5jbHVkZWQuIENvcHlyaWdodCAmIzE2OTsgUmVhbE5ldHdvcmtzLCBJbmMuLCAxOTk1LTIwMDIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0VYSElCSVQgQgorCitDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlcyBmb3IgdGhlIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UuIFRoZSBmb2xsb3dpbmcgbGlzdCBhcHBsaWVzIHRvIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGFzIG9mIE9jdG9iZXIgMjUsIDIwMDIsIHVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLgorCitBY2FkZW1pYyBGcmVlIExpY2Vuc2UKK0FwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlCitBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UKK0FydGlzdGljIGxpY2Vuc2UKK0F0dHJpYnV0aW9uIEFzc3VyYW5jZSBMaWNlbnNlcworQlNEIGxpY2Vuc2UKK0NvbW1vbiBQdWJsaWMgTGljZW5zZTEKK0VpZmZlbCBGb3J1bSBMaWNlbnNlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKTEKK0dOVSBMaWJyYXJ5IG9yICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpMQorSUJNIFB1YmxpYyBMaWNlbnNlCitJbnRlbCBPcGVuIFNvdXJjZSBMaWNlbnNlCitKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZQorTUlUIGxpY2Vuc2UKK01JVFJFIENvbGxhYm9yYXRpdmUgVmlydHVhbCBXb3Jrc3BhY2UgTGljZW5zZSAoQ1ZXIExpY2Vuc2UpCitNb3Rvc290byBMaWNlbnNlCitNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMCAoTVBMKQorTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgKE1QTCkKK05va2lhIE9wZW4gU291cmNlIExpY2Vuc2UKK09wZW4gR3JvdXAgVGVzdCBTdWl0ZSBMaWNlbnNlCitQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBMaWNlbnNlCitSaWNvaCBTb3VyY2UgQ29kZSBQdWJsaWMgTGljZW5zZQorU3VuIEluZHVzdHJ5IFN0YW5kYXJkcyBTb3VyY2UgTGljZW5zZSAoU0lTU0wpCitTdW4gUHVibGljIExpY2Vuc2UKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQSBPcGVuIFNvdXJjZSBMaWNlbnNlCitWb3ZpZGEgU29mdHdhcmUgTGljZW5zZSB2LiAxLjAKK1czQyBMaWNlbnNlCitYLk5ldCBMaWNlbnNlCitab3BlIFB1YmxpYyBMaWNlbnNlCit6bGliL2xpYnBuZyBsaWNlbnNlCisxTm90ZTogYmVjYXVzZSB0aGlzIGxpY2Vuc2UgY29udGFpbnMgY2VydGFpbiByZWNpcHJvY2FsIGxpY2Vuc2luZyB0ZXJtcyB0aGF0IHB1cnBvcnQgdG8gZXh0ZW5kIHRvIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIGNvZGUsIFlvdSBtYXkgYmUgcHJvaGliaXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBvdGhlcndpc2UgY29tcGF0aWJsZSBsaWNlbnNlIGZyb20gdXNpbmcgY29kZSBsaWNlbnNlZCB1bmRlciBpdHMgdGVybXMgd2l0aCBDb3ZlcmVkIENvZGUgYmVjYXVzZSBDb3ZlcmVkIENvZGUgbWF5IG9ubHkgYmUgbGljZW5zZWQgdW5kZXIgdGhlIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UuIEFueSBhdHRlbXB0IHRvIGFwcGx5IG5vbiBSUFNMIGxpY2Vuc2UgdGVybXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIEdQTCwgdG8gQ292ZXJlZCBDb2RlIGlzIGV4cHJlc3NseSBmb3JiaWRkZW4uIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgWW91ciB1c2Ugb2YgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZWQgY29kZSBkb2VzIG5vdCB2aW9sYXRlIGVpdGhlciB0aGUgUlBTTCBvciB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZS4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGlzdCBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L2NvbXBsaWNlbnNlCisKK0VYSElCSVQgQworCitSZWFsTmV0d29ya3NgIFRyYWRlbWFyayBwb2xpY3kuCisKK1JlYWxOZXR3b3JrcyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdHJhZGVtYXJrcyBjb2xsZWN0aXZlbHkgYXMgIkxpY2Vuc29yIFRyYWRlbWFya3MiOiAiUmVhbE5ldHdvcmtzIiwgIlJlYWxQbGF5ZXIiLCAiUmVhbEp1a2Vib3giLCAiUmVhbFN5c3RlbSIsICJSZWFsQXVkaW8iLCAiUmVhbFZpZGVvIiwgIlJlYWxPbmUgUGxheWVyIiwgIlJlYWxNZWRpYSIsICJIZWxpeCIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIFJlYWxOZXR3b3Jrcy4KKworUmVhbE5ldHdvcmtzICJMaWNlbnNvciBUcmFkZW1hcmsgUG9saWN5IiBmb3JiaWRzIGFueSB1c2Ugb2YgTGljZW5zb3IgVHJhZGVtYXJrcyBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBSZWFsTmV0d29ya3NgIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgd3d3LnJlYWxuZXR3b3Jrcy5jb20vaW5mby9oZWxpeGxvZ28uaHRtbC4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlNDUEwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SU0NQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWRiYmMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlNDUEwKQEAgLTAsMCArMSwxOTMgQEAKKworUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjAKKworCisxLiBEZWZpbml0aW9ucy4KKworCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworCisxLjMuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgd2Vic2l0ZSBvciBhbnkgb3RoZXIgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisKKzEuNC4gIkV4ZWN1dGFibGUgQ29kZSIgbWVhbnMgR292ZXJuZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisKKzEuNS4gIkdvdmVybmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKworMS42LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBHb3Zlcm5lZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisKKzEuNy4gIkxpY2Vuc2FibGUiIG1lYW5zIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gR292ZXJuZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKKworKGEpIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKyhiKSBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisKKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIHRoZSAiUGxhdGZvcm0gZm9yIEluZm9ybWF0aW9uIEFwcGxpY2F0aW9ucyIgU291cmNlIENvZGUgYXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5IFJTVi4KKworCisxLjExICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgdGhlIGdyYW50b3Igb2YgYSBsaWNlbnNlIHRoZXJldG8uCisKKzEuMTIuICJSU1YiIG1lYW5zIFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuLCBhIENhbGlmb3JuaWEgY29ycG9yYXRpb24gd2l0aCBvZmZpY2VzIGF0IDI4ODIgU2FuZCBIaWxsIFJvYWQsIFN1aXRlIDExNSwgTWVubG8gUGFyaywgQ0EgOTQwMjUtNzAyMi4KKworMS4xMy4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIEdvdmVybmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgRXhlY3V0YWJsZSBDb2RlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIEdvdmVybmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisKKzEuMTQuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisKKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xLiBHcmFudCBmcm9tIFJTVi4gUlNWIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisKKworMi4yLiBDb250cmlidXRvciBHcmFudC4gRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBHb3Zlcm5lZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogKGkpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCisKKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBHb3Zlcm5lZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gb3IgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFsbCBHb3Zlcm5lZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IEdvdmVybmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgUlNWIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgUlNWIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBHb3Zlcm5lZCBDb2RlLgorCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKKzMuNC4xLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIFJTViBhbmQgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgR292ZXJuZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuIEluIHRoZSBldmVudCB0aGF0IFlvdSBhcmUgYSBDb250cmlidXRvciwgWW91IHJlcHJlc2VudCB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIGluIHRoZSBMRUdBTCBmaWxlLCB5b3VyIE1vZGlmaWNhdGlvbnMgYXJlIHlvdXIgb3JpZ2luYWwgY3JlYXRpb25zIGFuZCwgdG8gdGhlIGJlc3Qgb2YgeW91ciBrbm93bGVkZ2UsIG5vIHRoaXJkIHBhcnR5IGhhcyBhbnkgY2xhaW0gKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcykgcmVsYXRpbmcgdG8geW91ciBNb2RpZmljYXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQgdGhlIExFR0FMIGZpbGUgaW5jbHVkZXMgY29tcGxldGUgZGV0YWlscyBvZiBhbnkgbGljZW5zZSBvciBvdGhlciByZXN0cmljdGlvbiBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnQgb2YgeW91ciBNb2RpZmljYXRpb25zLgorCiszLjQuMi4gQ29udHJpYnV0b3IgQVBJcy4gSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gR292ZXJuZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIEdvdmVybmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIFJTViBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBSU1YgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IFJTViBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIENvZGUgVmVyc2lvbnMuIFlvdSBtYXkgZGlzdHJpYnV0ZSBHb3Zlcm5lZCBDb2RlIGluIEV4ZWN1dGFibGUgQ29kZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBHb3Zlcm5lZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgR292ZXJuZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBHb3Zlcm5lZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9mIEdvdmVybmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSBSU1Ygb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBSU1YgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IFJTViBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworCiszLjcuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgR292ZXJuZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIEdvdmVybmVkIENvZGUuCisKKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZXRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIEdvdmVybmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworCis1LiBUcmFkZW1hcmsgVXNhZ2UuCisKKworCis1LjEuIEFkdmVydGlzaW5nIE1hdGVyaWFscy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGUgR292ZXJuZWQgQ29kZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIgorCisKKzUuMi4gRW5kb3JzZW1lbnRzLiBUaGUgbmFtZXMgIlJpY29oLCIgIlJpY29oIFNpbGljb24gVmFsbGV5LCIgYW5kICJSU1YiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIENvbnRyaWJ1dG9yIFZlcnNpb25zIG9yIExhcmdlciBXb3JrcyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgUlNWLgorCisKKzUuMy4gUHJvZHVjdCBOYW1lcy4gQ29udHJpYnV0b3IgVmVyc2lvbnMgYW5kIExhcmdlciBXb3JrcyBtYXkgbm90IGJlIGNhbGxlZCAiUmljb2giIG5vciBtYXkgdGhlIHdvcmQgIlJpY29oIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIFJTVi4KKworCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworCisKKzYuMS4gTmV3IFZlcnNpb25zLiBSU1YgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBHb3Zlcm5lZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggR292ZXJuZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgUlNWLiBObyBvbmUgb3RoZXIgdGhhbiBSU1YgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gR292ZXJuZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitHT1ZFUk5FRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIEdPVkVSTkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIEdPVkVSTkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgR09WRVJORUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFJTViBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgR09WRVJORUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCisKKzguIFRlcm1pbmF0aW9uLgorCisKKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIEdvdmVybmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCisKKzguMi4gSWYgWW91IGluaXRpYXRlIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IFJTViBvciBhIENvbnRyaWJ1dG9yIChSU1Ygb3IgdGhlIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIE9yaWdpbmFsIENvZGUgb3IgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UgcHJvdmlkZWQgdG8gWW91IGJ5IHRoZSBQYXJ0aWNpcGFudCwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgT3JpZ2luYWwgQ29kZSBvciB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKworCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworCis5LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgUlNWLCBBTlkgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBHT1ZFUk5FRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIFRPIFRIRSBFWFRFTlQgVEhBVCBBTlkgRVhDTFVTSU9OIE9GIERBTUFHRVMgQUJPVkUgSVMgTk9UIFZBTElELCBZT1UgQUdSRUUgVEhBVCBJTiBOTyBFVkVOVCBXSUxMIFJTVlMgTElBQklMSVRZIFVOREVSIE9SIFJFTEFURUQgVE8gVEhJUyBBR1JFRU1FTlQgRVhDRUVEIEZJVkUgVEhPVVNBTkQgRE9MTEFSUyAoJDUsMDAwKS4gVEhFIEdPVkVSTkVEIENPREUgSVMgTk9UIElOVEVOREVEIEZPUiBVU0UgSU4gQ09OTkVDVElPTiBXSVRIIEFOWSBOVUNMRVIsIEFWSUFUSU9OLCBNQVNTIFRSQU5TSVQgT1IgTUVESUNBTCBBUFBMSUNBVElPTiBPUiBBTlkgT1RIRVIgSU5IRVJFTlRMWSBEQU5HRVJPVVMgQVBQTElDQVRJT04gVEhBVCBDT1VMRCBSRVNVTFQgSU4gREVBVEgsIFBFUlNPTkFMIElOSlVSWSwgQ0FUQVNUUk9QSElDIERBTUFHRSBPUiBNQVNTIERFU1RSVUNUSU9OLCBBTkQgWU9VIEFHUkVFIFRIQVQgTkVJVEhFUiBSU1YgTk9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgT0YgQU5ZIE5BVFVSRSBBUyBBIFJFU1VMVCBPRiBBTlkgU1VDSCBVU0UgT0YgVEhFIEdPVkVSTkVEIENPREUuCisKKworMTAuIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuCisKK1RoZSBHb3Zlcm5lZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIEdvdmVybmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisKKzExLiBNaXNjZWxsYW5lb3VzLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBwYXJ0aWVzIHN1Ym1pdCB0byBwZXJzb25hbCBqdXJpc2RpY3Rpb24gaW4gQ2FsaWZvcm5pYSBhbmQgZnVydGhlciBhZ3JlZSB0aGF0IGFueSBjYXVzZSBvZiBhY3Rpb24gYXJpc2luZyB1bmRlciBvciByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGJyb3VnaHQgaW4gdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYS4gVGhlIGxvc2luZyBwYXJ0eSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gTm90d2l0aHN0YW5kaW5nIGFueXRoaW5nIHRvIHRoZSBjb250cmFyeSBoZXJlaW4sIFJTViBtYXkgc2VlayBpbmp1bmN0aXZlIHJlbGllZiByZWxhdGVkIHRvIGEgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworCisxMi4gUmVzcG9uc2liaWxpdHkgZm9yIENsYWltcy4KKworRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBHb3Zlcm5lZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworCisKKyAKKworRVhISUJJVCBBCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSaWNvaCBTb3VyY2UgQ29kZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cucmlzb3VyY2Uub3JnL1JQTAorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmljb2ggU2lsaWNvbiBWYWxsZXksIEluYy4gYXJlIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SdWJ5IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUnVieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzJlNTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUnVieQpAQCAtMCwwICsxLDYwIEBACisKK1J1YnkgaXMgY29weXJpZ2h0ZWQgZnJlZSBzb2Z0d2FyZSBieSBZdWtpaGlybyBNYXRzdW1vdG8gPG1hdHpAbmV0bGFiLmNvLmpwPi4KK1lvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgZWl0aGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMCisoc2VlIENPUFlJTkcudHh0IGZpbGUpLCBvciB0aGUgY29uZGl0aW9ucyBiZWxvdzoKKworICAxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorICAgICBzb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZQorICAgICBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQKKyAgICAgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZQorICAgICAgICAgIG1ha2UgdGhlbSBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZAorICAgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIGJ5IGFsbG93aW5nCisgICB0aGUgYXV0aG9yIHRvIGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBzb2Z0d2FyZS4KKworICAgICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgc29mdHdhcmUgb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvcgorICAgICAgICAgIG9yZ2FuaXphdGlvbi4KKworICAgICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3QKKyAgIHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZC4KKworICAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuCisKKyAgMy4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlCisgICAgIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgYSkgZGlzdHJpYnV0ZSB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMgb2YgdGhlIHNvZnR3YXJlLAorICAgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KQorICAgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb24uCisKKyAgICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZgorICAgdGhlIHNvZnR3YXJlLgorCisgICAgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCB3aXRoCisgICAgICAgICAgaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgc29mdHdhcmUgZGlzdHJpYnV0aW9uLgorCisgICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KKworICA0LiBZb3UgbWF5IG1vZGlmeSBhbmQgaW5jbHVkZSB0aGUgcGFydCBvZiB0aGUgc29mdHdhcmUgaW50byBhbnkgb3RoZXIKKyAgICAgc29mdHdhcmUgKHBvc3NpYmx5IGNvbW1lcmNpYWwpLiAgQnV0IHNvbWUgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbgorICAgICBhcmUgbm90IHdyaXR0ZW4gYnkgdGhlIGF1dGhvciwgc28gdGhhdCB0aGV5IGFyZSBub3QgdW5kZXIgdGhpcyB0ZXJtcy4KKworICAgICBUaGV5IGFyZSBnYy5jKHBhcnRseSksIHV0aWxzLmMocGFydGx5KSwgcmVnZXguW2NoXSwgc3QuW2NoXSBhbmQgc29tZQorICAgICBmaWxlcyB1bmRlciB0aGUgLi9taXNzaW5nIGRpcmVjdG9yeS4gIFNlZSBlYWNoIGZpbGUgZm9yIHRoZSBjb3B5aW5nCisgICAgIGNvbmRpdGlvbi4KKworICA1LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyAKKyAgICAgb3V0cHV0IGZyb20gdGhlIHNvZnR3YXJlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlCisgICAgIGNvcHlyaWdodCBvZiB0aGUgc29mdHdhcmUsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIgZ2VuZXJhdGVkIHRoZW0sIAorICAgICBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCisgICAgIHNvZnR3YXJlLgorCisgIDYuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICAgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgIFBVUlBPU0UuCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBEIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZmQxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TQVgtUEQKQEAgLTAsMCArMSwzMyBAQAorCitDb3B5cmlnaHQgU3RhdHVzIGZvciBTQVgKKworU0FYIGlzIGZyZWUhCisKK0luIGZhY3QsIGl0YHMgbm90IHBvc3NpYmxlIHRvIG93biBhIGxpY2Vuc2UgdG8gU0FYLCBzaW5jZSBpdGBzIGJlZW4gcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitObyBXYXJyYW50eQorCitCZWNhdXNlIFNBWCBpcyByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBkZXNpZ24gb3IgZm9yIHRoZSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZyB0aGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kL29yIG90aGVyIHBhcnRpZXMgcHJvdmlkZSBTQVggImFzIGlzIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgU0FYIGlzIHdpdGggeW91LiBTaG91bGQgU0FYIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIGFueSBjb3B5cmlnaHQgaG9sZGVyLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heSBtb2RpZnkgYW5kL29yIHJlZGlzdHJpYnV0ZSBTQVgsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIFNBWCAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3NzIG9mIGRhdGEgb3IgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIHRoaXJkIHBhcnRpZXMgb3IgYSBmYWlsdXJlIG9mIHRoZSBTQVggdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlciBwcm9ncmFtcyksIGV2ZW4gaWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCitDb3B5cmlnaHQgRGlzY2xhaW1lcnMKKworVGhpcyBwYWdlIGluY2x1ZGVzIHN0YXRlbWVudHMgdG8gdGhhdCBlZmZlY3QgYnkgRGF2aWQgTWVnZ2luc29uLCB3aG8gd291bGQgaGF2ZSBiZWVuIGFibGUgdG8gY2xhaW0gY29weXJpZ2h0IGZvciB0aGUgb3JpZ2luYWwgd29yay4KKworU0FYIDEuMAorCitWZXJzaW9uIDEuMCBvZiB0aGUgU2ltcGxlIEFQSSBmb3IgWE1MIChTQVgpLCBjcmVhdGVkIGNvbGxlY3RpdmVseSBieSB0aGUgbWVtYmVyc2hpcCBvZiB0aGUgWE1MLURFViBtYWlsaW5nIGxpc3QsIGlzIGhlcmVieSByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLgorCitObyBvbmUgb3ducyBTQVg6IHlvdSBtYXkgdXNlIGl0IGZyZWVseSBpbiBib3RoIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYnVuZGxlIGl0IHdpdGggeW91ciBzb2Z0d2FyZSBkaXN0cmlidXRpb24sIGluY2x1ZGUgaXQgb24gYSBDRC1ST00sIGxpc3QgdGhlIHNvdXJjZSBjb2RlIGluIGEgYm9vaywgbWlycm9yIHRoZSBkb2N1bWVudGF0aW9uIGF0IHlvdXIgb3duIHdlYiBzaXRlLCBvciB1c2UgaXQgaW4gYW55IG90aGVyIHdheSB5b3Ugc2VlIGZpdC4KKworRGF2aWQgTWVnZ2luc29uLCBNZWdnaW5zb24gVGVjaG5vbG9naWVzIEx0ZC4KKzE5OTgtMDUtMTEKKworU0FYIDIuMAorCitJIGhlcmVieSBhYmFuZG9uIGFueSBwcm9wZXJ0eSByaWdodHMgdG8gU0FYIDIuMCAodGhlIFNpbXBsZSBBUEkgZm9yIFhNTCksIGFuZCByZWxlYXNlIGFsbCBvZiB0aGUgU0FYIDIuMCBzb3VyY2UgY29kZSwgY29tcGlsZWQgY29kZSwgYW5kIGRvY3VtZW50YXRpb24gY29udGFpbmVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGludG8gdGhlIFB1YmxpYyBEb21haW4uIFNBWCBjb21lcyB3aXRoIE5PIFdBUlJBTlRZIG9yIGd1YXJhbnRlZSBvZiBmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4KKworRGF2aWQgTWVnZ2luc29uLCBNZWdnaW5zb24gVGVjaG5vbG9naWVzIEx0ZC4KKzIwMDAtMDUtMDUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0dJLTEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TR0ktMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk5ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0dJLTEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIChjKSBDb3B5cmlnaHQgMTk5MywgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQUxMIFJJR0hUUyBSRVNFUlZFRCAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIAorICogYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlCisgKiBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCAKKyAqIHRoZSBuYW1lIG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcKKyAqIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gCisgKgorICogVEhFIE1BVEVSSUFMIEVNQk9ESUVEIE9OIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgVE8gWU9VICJBUy1JUyIKKyAqIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVSV0lTRSwKKyAqIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgU0hBTEwgU0lMSUNPTgorICogR1JBUEhJQ1MsIElOQy4gIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZT05FIEVMU0UgRk9SIEFOWSBESVJFQ1QsCisgKiBTUEVDSUFMLCBJTkNJREVOVEFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCisgKiBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLAorICogTE9TUyBPRiBQUk9GSVQsIExPU1MgT0YgVVNFLCBTQVZJTkdTIE9SIFJFVkVOVUUsIE9SIFRIRSBDTEFJTVMgT0YKKyAqIFRISVJEIFBBUlRJRVMsIFdIRVRIRVIgT1IgTk9UIFNJTElDT04gR1JBUEhJQ1MsIElOQy4gIEhBUyBCRUVOCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIExPU1MsIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFBPU1NFU1NJT04sIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICogCisgKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIAorICogVXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvCisgKiByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIEZBUiA1Mi4yMjcuMTkoYykoMikgb3Igc3VicGFyYWdyYXBoCisgKiAoYykoMSkoaWkpIG9mIHRoZSBSaWdodHMgaW4gVGVjaG5pY2FsIERhdGEgYW5kIENvbXB1dGVyIFNvZnR3YXJlCisgKiBjbGF1c2UgYXQgREZBUlMgMjUyLjIyNy03MDEzIGFuZC9vciBpbiBzaW1pbGFyIG9yIHN1Y2Nlc3NvcgorICogY2xhdXNlcyBpbiB0aGUgRkFSIG9yIHRoZSBET0Qgb3IgTkFTQSBGQVIgU3VwcGxlbWVudC4KKyAqIFVucHVibGlzaGVkLS0gcmlnaHRzIHJlc2VydmVkIHVuZGVyIHRoZSBjb3B5cmlnaHQgbGF3cyBvZiB0aGUKKyAqIFVuaXRlZCBTdGF0ZXMuICBDb250cmFjdG9yL21hbnVmYWN0dXJlciBpcyBTaWxpY29uIEdyYXBoaWNzLAorICogSW5jLiwgMjAxMSBOLiAgU2hvcmVsaW5lIEJsdmQuLCBNb3VudGFpbiBWaWV3LCBDQSA5NDAzOS03MzExLgorICoKKyAqIE9wZW5HTChUTSkgaXMgYSB0cmFkZW1hcmsgb2YgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjM2ZkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NNQUlMX0dQTApAQCAtMCwwICsxLDE2NCBAQAorVGhpcyBpcyB0aGUgRGViaWFuIEdOVS9MaW51eCBwYWNrYWdlIGRlYmlhbnV0aWxzLgorCitJdCBpcyBhbiBvcmlnaW5hbCBEZWJpYW4gcGFja2FnZS4gIFByb2dyYW1zIGluIGl0IHdlcmUgbWFpbnRhaW5lZCBieQorR3V5IE1hb3IgPG1hb3JAZGViaWFuLm9yZz4sIGFuZCBhcmUgbm93IG1haW50YWluZWQgYnkgQ2xpbnQgQWRhbXMKKzxzY2hpem9AZGViaWFuLm9yZz4uCisKK0FsbCBpdHMgcHJvZ3JhbXMgZXhjZXB0IHJlYWRsaW5rLCBzYXZlbG9nLCBhbmQgd2hpY2ggbWF5IGJlCityZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgVmVyc2lvbiAyIG9yIGxhdGVyLAorZm91bmQgb24gRGViaWFuIHN5c3RlbXMgaW4gdGhlIGZpbGUgL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvR1BMLgorCit3aGljaCBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworcmVhZGxpbmsgaXMgQ29weXJpZ2h0IChjKSAxOTk3IEtlbm5ldGggU3RhaWxleSwgYW5kIG1heSBhbHNvIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBjb3B5cmlnaHQuCisKK3NhdmVsb2cgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczogKFRoZSByZXN0IG9mCit0aGlzIGZpbGUgY29uc2lzdHMgb2Ygc2F2ZWxvZydzIGRpc3RyaWJ1dGlvbiB0ZXJtcy4pCisKKyNpZGVudAkiQCgjKXNtYWlsOlJFTEVBU0UtM18yOkNPUFlJTkcsdiAxLjIgMTk5Ni8wNi8xNCAxODo1OToxMCB3b29kcyBFeHAiCisKKwkJICAgICBTTUFJTCBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICAoQ2xhcmlmaWVkIDExIEZlYiAxOTg4KQorCisgQ29weXJpZ2h0IChDKSAgMTk4OCBMYW5kb24gQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIKKyBDb3B5cmlnaHQgKEMpICAxOTkyIFJvbmFsZCBTLiBLYXJyCisgQ29weWxlZnQgKEdOVSkgMTk4OCBMYW5kb24gQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIKKworIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLiAgWW91IGNhbiBhbHNvCisgdXNlIHRoaXMgd29yZGluZyB0byBtYWtlIHRoZSB0ZXJtcyBmb3Igb3RoZXIgcHJvZ3JhbXMuCisKKyAgVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyBrZWVwIHlvdSBhdCB0aGUKK21lcmN5IG9mIHRob3NlIGNvbXBhbmllcy4gIEJ5IGNvbnRyYXN0LCBvdXIgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBpcworaW50ZW5kZWQgdG8gZ2l2ZSBldmVyeW9uZSB0aGUgcmlnaHQgdG8gc2hhcmUgU01BSUwuICBUbyBtYWtlIHN1cmUgdGhhdAoreW91IGdldCB0aGUgcmlnaHRzIHdlIHdhbnQgeW91IHRvIGhhdmUsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMKK3RoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIKK3RoZSByaWdodHMuICBIZW5jZSB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LgorCisgIFNwZWNpZmljYWxseSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gZ2l2ZQorYXdheSBjb3BpZXMgb2YgU01BSUwsIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgZWxzZSBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSBTTUFJTCBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldworZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gbWFrZSBzdXJlIHRoYXQgZXZlcnlvbmUgaGFzIHN1Y2ggcmlnaHRzLCB3ZSBoYXZlIHRvIGZvcmJpZCB5b3UgdG8KK2RlcHJpdmUgYW55b25lIGVsc2Ugb2YgdGhlc2UgcmlnaHRzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlCitjb3BpZXMgb2YgU01BSUwsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UKK2hhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHRlbGwgdGhlbSB0aGVpciByaWdodHMuCisKKyAgQWxzbywgZm9yIG91ciBvd24gcHJvdGVjdGlvbiwgd2UgbXVzdCBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZQorZmluZHMgb3V0IHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFNNQUlMLiAgSWYgU01BSUwgaXMgbW9kaWZpZWQgYnkKK3NvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0Cit0aGV5IGhhdmUgaXMgbm90IHdoYXQgd2UgZGlzdHJpYnV0ZWQsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQKK2J5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIG91ciByZXB1dGF0aW9uLgorCisgIFRoZXJlZm9yZSB3ZSAoTGFuZG9uIEN1cnQgTm9sbCBhbmQgUm9uYWxkIFMuIEthcnIpIG1ha2UgdGhlIGZvbGxvd2luZyAKK3Rlcm1zIHdoaWNoIHNheSB3aGF0IHlvdSBtdXN0IGRvIHRvIGJlIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSBvciBjaGFuZ2UgCitTTUFJTC4KKworCisJCQlDT1BZSU5HIFBPTElDSUVTCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiBTTUFJTCBzb3VyY2UgY29kZQorYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGEgdmFsaWQgY29weXJpZ2h0IG5vdGljZSAiQ29weXJpZ2h0CisoQykgMTk4OCBMYW5kb24gQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIiIChvciB3aXRoIHdoYXRldmVyIHllYXIgaXMKK2FwcHJvcHJpYXRlKTsga2VlcCBpbnRhY3QgdGhlIG5vdGljZXMgb24gYWxsIGZpbGVzIHRoYXQgcmVmZXIgdG8gdGhpcworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55CitvdGhlciByZWNpcGllbnRzIG9mIHRoZSBTTUFJTCBwcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLiAgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlCitmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgU01BSUwgb3IgYW55IHBvcnRpb24gb2YgaXQsCithbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGggMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcKKyAgICB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyAgICBiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLAorICAgIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBhIGRlcml2YXRpdmUgb2YgU01BSUwgb3IKKyAgICBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyBvbiB0ZXJtcyBpZGVudGljYWwgdG8gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZQorICAgIEFncmVlbWVudCAoZXhjZXB0IHRoYXQgeW91IG1heSBjaG9vc2UgdG8gZ3JhbnQgbW9yZSBleHRlbnNpdmUKKyAgICB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsIHRoaXJkIHBhcnRpZXMsIGF0IHlvdXIgb3B0aW9uKS4KKworICAgIGMpIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZgorICAgIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5CisgICAgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKK01lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB1bnJlbGF0ZWQgcHJvZ3JhbSB3aXRoIHRoaXMgcHJvZ3JhbSAob3IgaXRzCitkZXJpdmF0aXZlKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZwordGhlIG90aGVyIHByb2dyYW0gdW5kZXIgdGhlIHNjb3BlIG9mIHRoZXNlIHRlcm1zLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBTTUFJTCAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsCit1bmRlciBQYXJhZ3JhcGggMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGIpIGFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5IGZyZWUgKGV4Y2VwdCBmb3IgYSBub21pbmFsCisgICAgc2hpcHBpbmcgY2hhcmdlKSBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYykgYWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB3aGVyZSB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZC4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub24tY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIGFsb25lLikKKworRm9yIGFuIGV4ZWN1dGFibGUgZmlsZSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IKK2FsbCBtb2R1bGVzIGl0IGNvbnRhaW5zOyBidXQsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGl0IG5lZWQgbm90IGluY2x1ZGUKK3NvdXJjZSBjb2RlIGZvciBtb2R1bGVzIHdoaWNoIGFyZSBzdGFuZGFyZCBsaWJyYXJpZXMgdGhhdCBhY2NvbXBhbnkgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIFNNQUlMCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgU01BSUwgaXMgdm9pZCBhbmQKK3lvdXIgcmlnaHRzIHRvIHVzZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgYWdyZWVtZW50IHNoYWxsIGJlCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvbXB1dGVyCitzb2Z0d2FyZSBwcm9ncmFtcyBmcm9tIHlvdSB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBub3QgaGF2ZQordGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIFNNQUlMIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gTGFuZG9uCitDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FyciB2aWEgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhdCA1MQorRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIFdlIGhhdmUgbm90IHlldAord29ya2VkIG91dCBhIHNpbXBsZSBydWxlIHRoYXQgY2FuIGJlIHN0YXRlZCBoZXJlLCBidXQgd2Ugd2lsbCBvZnRlbgorcGVybWl0IHRoaXMuICBXZSB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlCitmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZwordGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlLgorCitZb3VyIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBhYm91dCBvdXIgbGljZW5zaW5nIHBvbGljaWVzIGFuZCBvdXIKK3NvZnR3YXJlIGFyZSB3ZWxjb21lISAgVGhpcyBjb250cmFjdCB3YXMgYmFzZWQgb24gdGhlIGNvbnRyYWN0IG1hZGUgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBQbGVhc2UgY29udGFjdCB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCitVU0EsIG9yIGNhbGwgKDYxNykgNTQyLTU5NDIgZm9yIGRldGFpbHMgb24gY29weWxlZnRlZCBtYXRlcmlhbCBpbgorZ2VuZXJhbC4KKworCQkgICAgICAgTk8gV0FSUkFOVFkKKworICBCRUNBVVNFIFNNQUlMIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBXRSBQUk9WSURFIEFCU09MVVRFTFkgTk8KK1dBUlJBTlRZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIFNUQVRFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcsIExBTkRPTiBDVVJUIE5PTEwgJiBST05BTEQgUy4gS0FSUiBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBTTUFJTCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBTTUFJTCBJUyBXSVRICitZT1UuICBTSE9VTEQgU01BSUwgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTAorTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIFdJTEwgTEFORE9OIENVUlQgTk9MTCAmCitST05BTEQgUy4gS0FSUiBBTkQvT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORCBSRURJU1RSSUJVVEUKK1NNQUlMIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQorTE9TVCBQUk9GSVRTLCBMT1NUIE1PTklFUywgT1IgT1RIRVIgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRQorKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQKK0lOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUKK1BST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUykgU01BSUwsIEVWRU4gSUYgWU9VIEhBVkUKK0JFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBPUiBGT1IgQU5ZIENMQUlNIEJZCitBTlkgT1RIRVIgUEFSVFkuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU1BMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ4YjM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU1BMLTEuMApAQCAtMCwwICsxLDUwNyBAQAorCitTVU4gUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAxLjAKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZQorQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCit0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLAorcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKK2luY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mIGFuZCBjb3JyZXNwb25kaW5nIGRvY3VtZW50YXRpb24gcmVsZWFzZWQKK3dpdGggdGhlIHNvdXJjZSBjb2RlLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzCit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0CitBLgorCisxLjcuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvcgorcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLgorCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCitleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKK3N1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKK09yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IKK3ByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIi4uLyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCit3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMKK09yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQKK2FwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiAiU291cmNlIENvZGUiLi4vIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlCitmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMKK2FueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQKK3RvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UKK2NvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMKK2Nob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwKK3Byb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcword2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcworY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZgordGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIuLi8gbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LAordG8KK2NhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdAorb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZQorb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CitjbGFpbXM6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgordHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvcgorcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEKK0xhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YKK09yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvcgorc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucwordGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlcgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKQorc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCitieToKKworaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZQorT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvcgoraGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQKK29yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQKK2J5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkCitiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYQorTGFyZ2VyIFdvcms7IGFuZAorCitiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZgorTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbgorY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaAorY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vcgorb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvcgorcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5Cit0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2gKK2NvbWJpbmF0aW9uKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUKK29uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkCitDb2RlLgorCisoZCkgbm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvcgoraW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IKK1ZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yCitWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieQorQ292ZXJlZCBDb2RlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlCitnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCitTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZQorZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24KK29mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYQorY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlCit2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZQorYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCittYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK2VpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQorbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXgKKyg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCit0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0Cit0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKK0NvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzCitncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IKK211c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkCisiLi4vTEVHQUxgYCB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbgorc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZgorQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUKK2F2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5Cittb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUKK3RoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlCittYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvCityZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgKCJBUEkiLi4vKSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMKK3doaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QKK2Fsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbgorMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucworYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcworc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzCitMaWNlbnNlCisKKy4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKK0NvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZQorQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYQorbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkKK3RvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKQorWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KK0V4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uCitmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwCityaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvCitjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eQorb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdQorbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4KK2FueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMKK29mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heQorY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCitMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50CitsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIKK2Zyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieQordGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyCitjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0CitiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZQorZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUKK3N1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorCitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICgiU3VuIikgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mCit0aGUKK0xpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAordmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zCitvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTdW4uIE5vIG9uZQorb3RoZXIgdGhhbiBTdW4gaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZAorQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UKK21heQorb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZQorZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3Q6IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQKK3RoZSBwaHJhc2VzICJTdW4sIiAiU3VuIFB1YmxpYyBMaWNlbnNlLCIgb3IgIlNQTCIuLi8gb3IgYW55IGNvbmZ1c2luZ2x5CitzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyCitsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIKK3RoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZQorU3VuIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsCitPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQQorc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcworTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIi4uL0FTIElTYGAgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRgorREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCitJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULAorWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRQorQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YKK0FOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMKK0RJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQorc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsCitzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCituYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZQorc2hhbGwgc3Vydml2ZS4KKworOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50CitjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20KK1lvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nCit0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseQoraW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaAorUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZQorc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwKK3VubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkKK2FncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUKK3JveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaAorUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0bwordGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cworb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90CittdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltCitpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyCitTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZgordGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KK2FueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikKK2FuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLAorc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudAorYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvcgoraW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzCitieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzCitncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbgoraW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IKK2xpY2Vuc2UuCisKKzguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsCithbGwKK2VuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKQord2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlcgorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMCitERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwKK09SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IKK0FOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLAorV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIKK0NPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4KK0lORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVworUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKK0VYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTworVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCis0OAorQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIgorYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIi4uLyBhcyBzdWNoIHRlcm1zIGFyZQordXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLgorMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbAorVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzCitzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmCithbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwKK29yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkCitTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybgorRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksCitDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZAorZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KK0FueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0CitzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcworTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKK3Jlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvCit3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2gKK3Jlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKK3NoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KKworSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzCis/TXVsdGlwbGUtTGljZW5zZWQ/LiA/TXVsdGlwbGUtTGljZW5zZWQ/IG1lYW5zIHRoYXQgdGhlIEluaXRpYWwKK0RldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKK1lvdXIgY2hvaWNlIG9mIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFeGhpYml0IEEgLVN1biBQdWJsaWMgTGljZW5zZSBOb3RpY2UuCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1biBQdWJsaWMgTGljZW5zZQorCitWZXJzaW9uIDEuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBhdmFpbGFibGUgYXQKKworaHR0cDovL3d3dy5zdW4uY29tLworCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fXy4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZQorCitPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fXyBhcmUgQ29weXJpZ2h0CisKKyhDKV9fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworCitvZiB0aGUgX19fX18gbGljZW5zZSAodGhlID9bX19fXSBMaWNlbnNlPyksIGluIHdoaWNoIGNhc2UgdGhlCisKK3Byb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLgorCitJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZQorCit0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKwordmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIFNQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZworCit0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIKKworcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlCisKK3Byb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorCitlaXRoZXIgdGhlIFNQTCBvciB0aGUgW19fX10gTGljZW5zZS4KK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YKKwordGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkCisKK3VzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUKKworT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2ltcGxlLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NpbXBsZS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MzU3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NpbXBsZS0yLjAKQEAgLTAsMCArMSwyNyBAQAorCitTaW1wbGUgUHVibGljIExpY2Vuc2UgKFNpbVBMKQorCitQcmVhbWJsZQorVGhpcyBTaW1wbGUgUHVibGljIExpY2Vuc2UgMi4wIChTaW1QTCAyLjAgZm9yIHNob3J0KSBpcyBhIHBsYWluIGxhbmd1YWdlIGltcGxlbWVudGF0aW9uIG9mIEdQTCAyLjAuICBUaGUgd29yZHMgYXJlIGRpZmZlcmVudCwgYnV0IHRoZSBnb2FsIGlzIHRoZSBzYW1lIC0gdG8gZ3VhcmFudGVlIGZvciBhbGwgdXNlcnMgdGhlIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBzb2Z0d2FyZS4gIElmIGFueW9uZSB3b25kZXJzIGFib3V0IHRoZSBtZWFuaW5nIG9mIHRoZSBTaW1QTCwgdGhleSBzaG91bGQgaW50ZXJwcmV0IGl0IGFzIGNvbnNpc3RlbnQgd2l0aCBHUEwgMi4wLgorU2ltcGxlIFB1YmxpYyBMaWNlbnNlIChTaW1QTCkgMi4wCitUaGUgU2ltUEwgYXBwbGllcyB0byB0aGUgc29mdHdhcmVgcyBzb3VyY2UgYW5kIG9iamVjdCBjb2RlIGFuZCBjb21lcyB3aXRoIGFueSByaWdodHMgdGhhdCBJIGhhdmUgaW4gaXQgKG90aGVyIHRoYW4gdHJhZGVtYXJrcykuIFlvdSBhZ3JlZSB0byB0aGUgU2ltUEwgYnkgY29weWluZywgZGlzdHJpYnV0aW5nLCBvciBtYWtpbmcgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIHNvZnR3YXJlLgorCitZb3UgZ2V0IHRoZSByb3lhbHR5IGZyZWUgcmlnaHQgdG86CitVc2UgdGhlIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZTsKK01ha2UgZGVyaXZhdGl2ZSB3b3JrcyBvZiBpdCAodGhpcyBpcyBjYWxsZWQgYSAiRGVyaXZlZCBXb3JrIik7CitDb3B5IGFuZCBkaXN0cmlidXRlIGl0IGFuZCBhbnkgRGVyaXZlZCBXb3JrLgorSWYgeW91IGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIG9yIGEgRGVyaXZlZCBXb3JrLCB5b3UgbXVzdCBnaXZlIGJhY2sgdG8gdGhlIGNvbW11bml0eSBieToKK1Byb21pbmVudGx5IG5vdGluZyB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlcyB5b3UgbWFrZTsKK0xlYXZpbmcgb3RoZXIgcGVvcGxlYHMgY29weXJpZ2h0IG5vdGljZXMsIHdhcnJhbnR5IGRpc2NsYWltZXJzLCBhbmQgbGljZW5zZSB0ZXJtcyAgaW4gcGxhY2U7CitQcm92aWRpbmcgdGhlIHNvdXJjZSBjb2RlLCBidWlsZCBzY3JpcHRzLCBpbnN0YWxsYXRpb24gc2NyaXB0cywgYW5kIGludGVyZmFjZSBkZWZpbml0aW9ucyBpbiBhIGZvcm0gdGhhdCBpcyBlYXN5IHRvIGdldCBhbmQgYmVzdCB0byBtb2RpZnk7CitMaWNlbnNpbmcgaXQgdG8gZXZlcnlvbmUgdW5kZXIgU2ltUEwsIG9yIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0ZXJtcyAoc3VjaCBhcyBHUEwgMi4wKSwgd2l0aG91dCBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgdG8gdGhlIHJpZ2h0cyBwcm92aWRlZDsKK0NvbnNwaWN1b3VzbHkgYW5ub3VuY2luZyB0aGF0IGl0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGF0IGxpY2Vuc2UuCitUaGVyZSBhcmUgc29tZSB0aGluZ3MgdGhhdCB5b3UgbXVzdCBzaG91bGRlcjoKK1lvdSBnZXQgTk8gV0FSUkFOVElFUy4gTm9uZSBvZiBhbnkga2luZDsKK0lmIHRoZSBzb2Z0d2FyZSBkYW1hZ2VzIHlvdSBpbiBhbnkgd2F5LCB5b3UgbWF5IG9ubHkgcmVjb3ZlciBkaXJlY3QgZGFtYWdlcyB1cCB0byB0aGUgYW1vdW50IHlvdSBwYWlkIGZvciBpdCAodGhhdCBpcyB6ZXJvIGlmIHlvdSBkaWQgbm90IHBheSBhbnl0aGluZykuIFlvdSBtYXkgbm90IHJlY292ZXIgYW55IG90aGVyIGRhbWFnZXMsIGluY2x1ZGluZyB0aG9zZSBjYWxsZWQgImNvbnNlcXVlbnRpYWwgZGFtYWdlcy4iIChUaGUgc3RhdGUgb3IgY291bnRyeSB3aGVyZSB5b3UgbGl2ZSBtYXkgbm90IGFsbG93IHlvdSB0byBsaW1pdCB5b3VyIGxpYWJpbGl0eSBpbiB0aGlzIHdheSwgc28gdGhpcyBtYXkgbm90IGFwcGx5IHRvIHlvdSk7CitUaGUgU2ltUEwgY29udGludWVzIHBlcnBldHVhbGx5LCBleGNlcHQgdGhhdCB5b3VyIGxpY2Vuc2UgcmlnaHRzIGVuZCBhdXRvbWF0aWNhbGx5IGlmOgorWW91IGRvIG5vdCBhYmlkZSBieSB0aGUgImdpdmUgYmFjayB0byB0aGUgY29tbXVuaXR5IiB0ZXJtcyAoeW91ciBsaWNlbnNlZXMgZ2V0IHRvIGtlZXAgdGhlaXIgcmlnaHRzIGlmIHRoZXkgYWJpZGUpOworQW55b25lIHByZXZlbnRzIHlvdSBmcm9tIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTaW1QTC4KK0xpY2Vuc2UgZm9yIHRoZSBMaWNlbnNlCitZb3UgbWF5IGRvIGFueXRoaW5nIHRoYXQgeW91IHdhbnQgd2l0aCB0aGUgU2ltUEwgdGV4dDsgaXRgcyBhIGxpY2Vuc2UgZm9ybSB0byB1c2UgaW4gYW55IHdheSB0aGF0IHlvdSBmaW5kIGhlbHBmdWwuICBUbyBhdm9pZCBjb25mdXNpb24sIGhvd2V2ZXIsIGlmIHlvdSBjaGFuZ2UgdGhlIHRlcm1zIGluIGFueSB3YXkgdGhlbiB5b3UgbWF5IG5vdCBjYWxsIHlvdXIgbGljZW5zZSB0aGUgU2ltcGxlIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBTaW1QTCAoYnV0IGZlZWwgZnJlZSB0byBhY2tub3dsZWRnZSB0aGF0IHlvdXIgbGljZW5zZSBpcyAiYmFzZWQgb24gdGhlIFNpbXBsZSBQdWJsaWMgTGljZW5zZSIpLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlOWQ4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NsZWVweWNhdApAQCAtMCwwICsxLDkwIEBACisKK1RoZSBTbGVlcHljYXQgTGljZW5zZQorQ29weXJpZ2h0IChjKSAxOTkwLTE5OTkKK1NsZWVweWNhdCBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1JlZGlzdHJpYnV0aW9ucyBpbiBhbnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGluZm9ybWF0aW9uIG9uCitob3cgdG8gb2J0YWluIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGZvciB0aGUgREIgc29mdHdhcmUgYW5kIGFueQorYWNjb21wYW55aW5nIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgREIgc29mdHdhcmUuIFRoZSBzb3VyY2UgY29kZQorbXVzdCBlaXRoZXIgYmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBvciBiZSBhdmFpbGFibGUgZm9yIG5vCittb3JlIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHBsdXMgYSBub21pbmFsIGZlZSwgYW5kIG11c3QgYmUKK2ZyZWVseSByZWRpc3RyaWJ1dGFibGUgdW5kZXIgcmVhc29uYWJsZSBjb25kaXRpb25zLiBGb3IgYW4KK2V4ZWN1dGFibGUgZmlsZSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMuIEl0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IKK2ZpbGVzIHRoYXQgdHlwaWNhbGx5IGFjY29tcGFueSB0aGUgbWFqb3IgY29tcG9uZW50cyBvZiB0aGUgb3BlcmF0aW5nCitzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgZmlsZSBydW5zLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBTTEVFUFlDQVQgU09GVFdBUkUgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTUworT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK05PTi1JTkZSSU5HRU1FTlQsIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBTTEVFUFlDQVQgU09GVFdBUkUKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQsIDE5OTUKK1RoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTYGAgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2CitUaGUgUHJlc2lkZW50IGFuZCBGZWxsb3dzIG9mIEhhcnZhcmQgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCittYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBIQVJWQVJEIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVNgYCBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBIQVJWQVJEIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JiNGUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMQpAQCAtMCwwICsxLDQzMSBAQAorCitTVUdBUkNSTSBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDEuMS4zCisKK1RoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uICgiU1BMIikgY29uc2lzdHMgb2YgdGhlIE1vemlsbGEKK1B1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBtb2RpZmllZCB0byBiZSBzcGVjaWZpYyB0byBTdWdhckNSTSwgd2l0aCB0aGUKK0FkZGl0aW9uYWwgVGVybXMgaW4gRXhoaWJpdCBCLiBUaGUgb3JpZ2luYWwgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgY2FuIGJlCitmb3VuZCBhdDogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sCisKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZQorQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xLiAnJ0NvbnRyaWJ1dG9yJycgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZQorY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAnJ0NvbnRyaWJ1dG9yIFZlcnNpb24nJyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yCitNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAnJ0NvdmVyZWQgQ29kZScnIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZworcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAnJ0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbScnIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZAoraW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAnJ0V4ZWN1dGFibGUnJyBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAnJ0luaXRpYWwgRGV2ZWxvcGVyJycgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAnJ0xhcmdlciBXb3JrJycgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucwordGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gJydMaWNlbnNlJycgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseQorYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICcnTW9kaWZpY2F0aW9ucycnIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3IKK3N0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4KK0NvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbAorQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuCisxLjEwLiAnJ09yaWdpbmFsIENvZGUnJyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzCitkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kCit3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQKK0NvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gJydTb3VyY2UgQ29kZScnIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcKK21vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZAoraW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0CitlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZQorQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sCitwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5CithdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdScnIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkKK2V4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlCitvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbAorZW50aXRpZXMsICJZb3UnJyBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvcgoraXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisiY29udHJvbCcnIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbgorb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKQorb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IKK2JlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKQorTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvcgord2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbAorQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vcgorb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlCitkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IKK2NvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsCitDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgorZGV2aWNlcy4KKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykKK0xpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IKK3BvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzCitDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aAoraXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsCitvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZQorYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yCitwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlCitkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvcgorYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZQorZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eQorbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucworbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvcgorVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBDb2RlCitpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUKK2F2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZQorc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmCittYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yCithdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0CitsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uCitoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nCit0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlCitkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMKK2Rlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yCit1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlCitDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMJycgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5CittYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8KK2NvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlCithdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlCitMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2UKK290aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3Citrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQKK0NvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0bworaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTAorZmlsZS4KKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkKK2Fib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3Incworb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUKK3JpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEKK3JlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZgorWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yCit0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbgorYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yCitvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lCitvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24KK2JlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QKK21ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IKK2xpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkKK3RoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YKK1NlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEKK25vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91CitoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5CitpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQKK0NvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAKK3JpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tCit0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0bworbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZQorcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24KK3VuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zCit3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEKK3NpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcworTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3dpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwKK29yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlCittYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkKK2FmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuCitFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0CitiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUKK25vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKzYuMS4gTmV3IFZlcnNpb25zLgorU3VnYXJDUk0gSW5jLiAoJydTdWdhckNSTScnKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCitMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24KK251bWJlci4KKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwKK1lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YKK3RoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTdWdhckNSTS4gTm8gb25lIG90aGVyIHRoYW4gU3VnYXJDUk0gaGFzIHRoZSByaWdodCB0bworbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvCitpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAnJ1N1Z2FyQ1JNJycsCisnJ1NQTCcnIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0Cit0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQKK2NsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZQorU3VnYXJDUk0gUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwKK09yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZgordGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMnJyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKK1FVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRAorQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkKK09USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMKK0xJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaAorYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0KKyhleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYQorQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaAorYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkKK3BhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20KK1BhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZgorbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZQorcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlCitDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhCityZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbgord3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzCitncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5Cit0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50J3MKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55CityaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUKK3Jldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IKK2hhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nCit0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzCithbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KQorcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlCit2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIKK3NoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50CitvciBsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIKK2xpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4KK3ZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbAorc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWQorT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkKK09GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcKK0ZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSAorTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UCitBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhICcnY29tbWVyY2lhbCBpdGVtLCcnIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLgorMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgJydjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlJycgYW5kCisnJ2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwnJyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4CitDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLgorMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzCithY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyCitoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zCisoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nCitpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUKK3BhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluCit0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK3N1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mCitDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nCitwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZAorcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zCitDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkKK2V4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdAorc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlCitmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24KK29mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZworaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcworIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyCitZb3VyIGNob2ljZSBvZiB0aGUgU1BMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEEKKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4xLjMKKygiTGljZW5zZSIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCitMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5zdWdhcmNybS5jb20vU1BMCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IKK3RoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXM6IFN1Z2FyQ1JNIE9wZW4gU291cmNlCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBTdWdhckNSTSwgSW5jLgorUG9ydGlvbnMgY3JlYXRlZCBieSBTdWdhckNSTSBhcmUgQ29weXJpZ2h0IChDKSAyMDA0IFN1Z2FyQ1JNLCBJbmMuOworQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlCitub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQKK29mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlCitmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEIKKworQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4KKworSS4gRWZmZWN0LgorVGhlc2UgYWRkaXRpb25hbCB0ZXJtcyBkZXNjcmliZWQgaW4gdGhpcyBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAmbmRhc2g7CitBZGRpdGlvbmFsIFRlcm1zIHNoYWxsIGFwcGx5IHRvIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitJSS4gU3VnYXJDUk0gYW5kIGxvZ28uCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3MKKyJTdWdhckNSTSIgYW5kIHRoZSAiU3VnYXJDUk0iIGxvZ29zIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUKK2luY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMuCisKK0hvd2V2ZXIsIGluIGFkZGl0aW9uIHRvIHRoZSBvdGhlciBub3RpY2Ugb2JsaWdhdGlvbnMsIGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQKK0NvZGUgaW4gRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgZm9ybSBkaXN0cmlidXRlZCBtdXN0LCBhcyBhIGZvcm0gb2YKK2F0dHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCBhdXRob3IsIGluY2x1ZGUgb24gZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4gKGkpCit0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gYW5kIChpaSkgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gdGhlCitzYW1lIGZvcm0gYXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgZGlzdHJpYnV0ZWQgYnkgU3VnYXJDUk0sCitJbmMuIGF0IHRoZSB0aW1lIG9mIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvcHkuIEluIGFkZGl0aW9uLCB0aGUgIlBvd2VyZWQKK2J5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgYW5kIGJlIGxvY2F0ZWQgYXQgdGhlIHZlcnkKK2JvdHRvbSBjZW50ZXIgb2YgZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4uIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHRoZQorZGltZW5zaW9ucyBvZiB0aGUgIlBvd2VyZWQgQnkgU3VnYXJDUk0iIGxvZ28gbXVzdCBiZSBhdCBsZWFzdCAxMDYgeAorMjMgcGl4ZWxzLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBpdCBtdXN0CitkaXJlY3QgdGhlbSBiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJmb3JnZS5vcmcuIEluIGFkZGl0aW9uLCB0aGUgY29weXJpZ2h0Citub3RpY2UgbXVzdCByZW1haW4gdmlzaWJsZSB0byBhbGwgdXNlcnMgYXQgYWxsIHRpbWVzIGF0IHRoZSBib3R0b20gb2YgdGhlIHVzZXIKK2ludGVyZmFjZSBzY3JlZW4uIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlIGNvcHlyaWdodCBub3RpY2UsIGl0IG11c3QgZGlyZWN0IHRoZW0KK2JhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmNybS5jb20KKworCisKKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEuMS4zIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMS4xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NjgxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEuMS4zCkBAIC0wLDAgKzEsMTYwIEBACisKK1NVR0FSQ1JNIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMS4xLjMKKworVGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gKCJTUEwiKSBjb25zaXN0cyBvZiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgbW9kaWZpZWQgdG8gYmUgc3BlY2lmaWMgdG8gU3VnYXJDUk0sIHdpdGggdGhlIEFkZGl0aW9uYWwgVGVybXMgaW4gRXhoaWJpdCBCLiBUaGUgb3JpZ2luYWwgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwKKworCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMS4gYGBDb250cmlidXRvcmBgIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiBgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gYGBDb3ZlcmVkIENvZGVgYCBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gYGBFeGVjdXRhYmxlYGAgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gYGBJbml0aWFsIERldmVsb3BlcmBgIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiBgYExhcmdlciBXb3JrYGAgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiBgYExpY2Vuc2VgYCBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuIGBgTW9kaWZpY2F0aW9uc2BgIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCisxLjEwLiBgYE9yaWdpbmFsIENvZGVgYCBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTEuIGBgU291cmNlIENvZGVgYCBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdWBgIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3VgYCBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2xgYCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LiAKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuIAorMi4yLiBDb250cmlidXRvciBHcmFudC4gCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4gCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiAKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIAorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIAorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUxgYCB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLiAKKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4gCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLiAKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEuIE5ldyBWZXJzaW9ucy4gCitTdWdhckNSTSBJbmMuIChgYFN1Z2FyQ1JNYGApIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VnYXJDUk0uIE5vIG9uZSBvdGhlciB0aGFuIFN1Z2FyQ1JNIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLiAKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzIGBgU3VnYXJDUk1gYCwgYGBTUExgYCBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJU2BgIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhIGBgY29tbWVyY2lhbCBpdGVtLGBgIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVgYCBhbmQgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sYGAgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgJiM4MjIwO011bHRpcGxlLUxpY2Vuc2VkJiM4MjIxOy4gJiM4MjIwO011bHRpcGxlLUxpY2Vuc2VkJiM4MjIxOyBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIFNQTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEEKKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEuMworKCJMaWNlbnNlIik7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgCitMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5zdWdhcmNybS5jb20vU1BMCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvcgordGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpczogU3VnYXJDUk0gT3BlbiBTb3VyY2UKKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFN1Z2FyQ1JNLCBJbmMuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IFN1Z2FyQ1JNIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDQgU3VnYXJDUk0sIEluYy47CitBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorCitTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAxLjEuMyAtIEV4aGliaXQgQgorCitBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLgorCitJLiBFZmZlY3QuCitUaGVzZSBhZGRpdGlvbmFsIHRlcm1zIGRlc2NyaWJlZCBpbiB0aGlzIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlICYjODIxMTsgQWRkaXRpb25hbCBUZXJtcyBzaGFsbCBhcHBseSB0byB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworSUkuIFN1Z2FyQ1JNIGFuZCBsb2dvLgorVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzICJTdWdhckNSTSIgYW5kIHRoZSAiU3VnYXJDUk0iIGxvZ29zIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucy4KKworSG93ZXZlciwgaW4gYWRkaXRpb24gdG8gdGhlIG90aGVyIG5vdGljZSBvYmxpZ2F0aW9ucywgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGZvcm0gZGlzdHJpYnV0ZWQgbXVzdCwgYXMgYSBmb3JtIG9mIGF0dHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCBhdXRob3IsIGluY2x1ZGUgb24gZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4gKGkpIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBhbmQgKGlpKSB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IFN1Z2FyQ1JNLCBJbmMuIGF0IHRoZSB0aW1lIG9mIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvcHkuIEluIGFkZGl0aW9uLCB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gbXVzdCBiZSB2aXNpYmxlIHRvIGFsbCB1c2VycyBhbmQgYmUgbG9jYXRlZCBhdCB0aGUgdmVyeSBib3R0b20gY2VudGVyIG9mIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgIlBvd2VyZWQgQnkgU3VnYXJDUk0iIGxvZ28gbXVzdCBiZSBhdCBsZWFzdCAxMDYgeCAyMyBwaXhlbHMuIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIGl0IG11c3QgZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyZm9yZ2Uub3JnLiBJbiBhZGRpdGlvbiwgdGhlIGNvcHlyaWdodCBub3RpY2UgbXVzdCByZW1haW4gdmlzaWJsZSB0byBhbGwgdXNlcnMgYXQgYWxsIHRpbWVzIGF0IHRoZSBib3R0b20gb2YgdGhlIHVzZXIgaW50ZXJmYWNlIHNjcmVlbi4gV2hlbiB1c2VycyBjbGljayBvbiB0aGUgY29weXJpZ2h0IG5vdGljZSwgaXQgbXVzdCBkaXJlY3QgdGhlbSBiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWE3NTdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVUNCCkBAIC0wLDAgKzEsMjYgQEAKKyAgIENvcHlyaWdodCAoYykgMTk4NywgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NAorICAgICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICAgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgICBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ZTTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9WU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmFlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9WU0wtMS4wCkBAIC0wLDAgKzEsNDkgQEAKKworVm92aWRhIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4wCisKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlICJWb3ZpZGEKK09wZW4gQ29tbXVuaWNhdGlvbiBBcHBsaWNhdGlvbiBMaWJyYXJ5IiBleGNlcHQgZm9yIHRob3NlIHBvcnRpb25zCitpbmNvcnBvcmF0aW5nIHRoaXJkIHBhcnR5IHNvZnR3YXJlIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGFzIGJlaW5nCitsaWNlbnNlZCB1bmRlciBzZXBhcmF0ZSBsaWNlbnNlLgorCitUaGUgVm92aWRhIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCitDb3B5cmlnaHQgKGMpIDIwMDAgVm92aWRhIE5ldHdvcmtzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCit0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lcyAiVk9DQUwiLCAiVm92aWRhIE9wZW4gQ29tbXVuaWNhdGlvbiBBcHBsaWNhdGlvbiBMaWJyYXJ5IiwKK2FuZCAiVm92aWRhIE9wZW4gQ29tbXVuaWNhdGlvbiBBcHBsaWNhdGlvbiBMaWJyYXJ5IChWT0NBTCkiIG11c3QKK25vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCitwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCB2b2NhbEB2b3ZpZGEub3JnLgorCis0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiVk9DQUwiLCBub3IKK21heSAiVk9DQUwiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KK3Blcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5ECitOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBWT1ZJREEKK05FVFdPUktTLCBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUworSU4gRVhDRVNTIE9GICQxLDAwMCwgTk9SIEZPUiBBTlkgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKK1VTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGI4YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVzNDCkBAIC0wLDAgKzEsMTcgQEAKKworVzNDIFNPRlRXQVJFIE5PVElDRSBBTkQgTElDRU5TRQorVGhpcyB3b3JrIChhbmQgaW5jbHVkZWQgc29mdHdhcmUsIGRvY3VtZW50YXRpb24gc3VjaCBhcyBSRUFETUVzLCBvciBvdGhlciByZWxhdGVkIGl0ZW1zKSBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLgorTGljZW5zZQorQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuCitQZXJtaXNzaW9uIHRvIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zOgorVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay4KK0FueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgdGhlIFczQyBTb2Z0d2FyZSBTaG9ydCBOb3RpY2Ugc2hvdWxkIGJlIGluY2x1ZGVkIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZS4KK05vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlcywgaW5jbHVkaW5nIHRoZSBkYXRlIGNoYW5nZXMgd2VyZSBtYWRlLiAoV2UgcmVjb21tZW5kIHlvdSBwcm92aWRlIFVSSXMgdG8gdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGNvZGUgaXMgZGVyaXZlZC4pCitEaXNjbGFpbWVycworVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCitDT1BZUklHSFQgSE9MREVSUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OLgorVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLgorTm90ZXMKK1RoaXMgdmVyc2lvbjogaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorVGhpcyBmb3JtdWxhdGlvbiBvZiBXM0NgcyBub3RpY2UgYW5kIGxpY2Vuc2UgYmVjYW1lIGFjdGl2ZSBvbiBEZWNlbWJlciAzMSAyMDAyLiBUaGlzIHZlcnNpb24gcmVtb3ZlcyB0aGUgY29weXJpZ2h0IG93bmVyc2hpcCBub3RpY2Ugc3VjaCB0aGF0IHRoaXMgbGljZW5zZSBjYW4gYmUgdXNlZCB3aXRoIG1hdGVyaWFscyBvdGhlciB0aGFuIHRob3NlIG93bmVkIGJ5IHRoZSBXM0MsIHJlZmxlY3RzIHRoYXQgRVJDSU0gaXMgbm93IGEgaG9zdCBvZiB0aGUgVzNDLCBpbmNsdWRlcyByZWZlcmVuY2VzIHRvIHRoaXMgc3BlY2lmaWMgZGF0ZWQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSwgYW5kIHJlbW92ZXMgdGhlIGFtYmlndW91cyBncmFudCBvZiAidXNlIi4gT3RoZXJ3aXNlLCB0aGlzIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gYW5kIGlzIHdyaXR0ZW4gc28gYXMgdG8gcHJlc2VydmUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzIGFzc2Vzc21lbnQgb2YgR1BMIGNvbXBhdGliaWxpdHkgYW5kIE9TSWBzIGNlcnRpZmljYXRpb24gdW5kZXIgdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmUwOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV1h3aW5kb3dzCkBAIC0wLDAgKzEsNTUgQEAKKworICAgICAgICAgICAgICAgIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIFZlcnNpb24gMy4xCisgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNSBKdWxpYW4gU21hcnQsIFJvYmVydCBSb2VibGluZyBldCBhbAorCisgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICBvZiB0aGlzIGxpY2VuY2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICBXWFdJTkRPV1MgTElCUkFSWSBMSUNFTkNFCisgICAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQKKyAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExpYnJhcnkKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLCB1c3VhbGx5IGluIGEgZmlsZSBuYW1lZCBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisKKyAgRVhDRVBUSU9OIE5PVElDRQorCisgIDEuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZQorICBwZXJtaXNzaW9uIGZvciBhZGRpdGlvbmFsIHVzZXMgb2YgdGhlIHRleHQgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSBvZgorICB0aGUgbGlicmFyeSBhcyBsaWNlbmNlZCB1bmRlciB0aGUgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5jZSwgYXBwbHlpbmcKKyAgZWl0aGVyIHZlcnNpb24gMy4xIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uIG9mCisgIHRoZSBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdmVyc2lvbgorICAzLjEgb2YgdGhlIExpY2VuY2UgZG9jdW1lbnQuCisKKyAgMi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHlvdSBtYXkgdXNlLCBjb3B5LCBsaW5rLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUKKyAgdW5kZXIgeW91ciBvd24gdGVybXMsIGJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyBiYXNlZAorICBvbiB0aGUgTGlicmFyeS4KKworICAzLiBJZiB5b3UgY29weSBjb2RlIGZyb20gZmlsZXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBpbnRvIGEKKyAgY29weSBvZiB0aGlzIGxpYnJhcnksIGFzIHRoaXMgbGljZW5jZSBwZXJtaXRzLCB0aGUgZXhjZXB0aW9uIGRvZXMgbm90CisgIGFwcGx5IHRvIHRoZSBjb2RlIHRoYXQgeW91IGFkZCBpbiB0aGlzIHdheS4gIFRvIGF2b2lkIG1pc2xlYWRpbmcgYW55b25lIGFzCisgIHRvIHRoZSBzdGF0dXMgb2Ygc3VjaCBtb2RpZmllZCBmaWxlcywgeW91IG11c3QgZGVsZXRlIHRoaXMgZXhjZXB0aW9uCisgIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UKKyAgYWNjb3JkaW5nbHkuCisKKyAgNC4gSWYgeW91IHdyaXRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24gZm9yIHRoaXMgbGlicmFyeSwgaXQgaXMgeW91cgorICBjaG9pY2Ugd2hldGhlciB0byBwZXJtaXQgdGhpcyBleGNlcHRpb24gdG8gYXBwbHkgdG8geW91ciBtb2RpZmljYXRpb25zLiAKKyAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIHlvdSBtdXN0IGRlbGV0ZSB0aGUgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2gKKyAgY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XYXRjb20tMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV2F0Y29tLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2MTlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV2F0Y29tLTEuMApAQCAtMCwwICsxLDE0MCBAQAorCitTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAKKworVVNFIE9GIFRIRSBTWUJBU0UgT1BFTiBXQVRDT00gU09GVFdBUkUgREVTQ1JJQkVEIEJFTE9XICgiU09GVFdBUkUiKSBJUyBTVUJKRUNUIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBTRVQgRk9SVEggSU4gVEhFIFNZQkFTRSBPUEVOIFdBVENPTSBQVUJMSUMgTElDRU5TRSBTRVQgRk9SVEggQkVMT1cgKCJMSUNFTlNFIikuIFlPVSBNQVkgTk9UIFVTRSBUSEUgU09GVFdBUkUgSU4gQU5ZIE1BTk5FUiBVTkxFU1MgWU9VIEFDQ0VQVCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIExJQ0VOU0UuIFlPVSBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgQlkgSU4gQU5ZIE1BTk5FUiBVU0lORyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBCWSBSRVBST0RVQ0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORykgVEhFIFNPRlRXQVJFLiBJRiBZT1UgRE8gTk9UIEFDQ0VQVCBBTEwgT0YgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLCBETyBOT1QgVVNFIFRIRSBTT0ZUV0FSRSBJTiBBTlkgTUFOTkVSLgorCitTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRoZSBmb2xsb3dpbmcgc29mdHdhcmUgcHJvZ3JhbXM6IHRoZSBvcGVuIHNvdXJjZSB2ZXJzaW9ucyBvZiBTeWJhc2VgcyBXYXRjb20gQy9DKysgYW5kIEZvcnRyYW4gY29tcGlsZXIgcHJvZHVjdHMgKCJTb2Z0d2FyZSIpLCB3aGljaCBhcmUgbW9kaWZpZWQgdmVyc2lvbnMgb2YsIHdpdGggc2lnbmlmaWNhbnQgY2hhbmdlcyBmcm9tLCB0aGUgbGFzdCB2ZXJzaW9ucyBtYWRlIGNvbW1lcmNpYWxseSBhdmFpbGFibGUgYnkgU3liYXNlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIFN5YmFzZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBTeWJhc2UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisKKzEuMyAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworCisxLjQgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisKKzEuNiAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKworMS43ICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgU3liYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IFN5YmFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IFN5YmFzZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBTeWJhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisKKzEuOCAiUGVyc29uYWwgVXNlIiBtZWFucyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvciBoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbGBzIHVzZSBvZiBDb3ZlcmVkIENvZGUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLCBpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiAoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuCisKKworMS45ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKworMS4xMCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBTeWJhc2UgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgU3liYXNlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisKKzIuMSBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSwgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgYW5kL29yIFBlcnNvbmFsIFVzZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIFN5YmFzZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmQgCisKKyhiKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2LgorCisoYykgV2hlbmV2ZXIgcmVhc29uYWJseSBmZWFzaWJsZSB5b3Ugc2hvdWxkIGluY2x1ZGUgdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGluIGEgY2xpY2std3JhcCBmb3JtYXQsIHdoaWNoIHJlcXVpcmVzIGFmZmlybWF0aXZlIGFjY2VwdGFuY2UgYnkgY2xpY2tpbmcgb24gYW4gIkkgYWNjZXB0IiBidXR0b24gb3Igc2ltaWxhciBtZWNoYW5pc20uIElmIGEgY2xpY2std3JhcCBmb3JtYXQgaXMgbm90IGluY2x1ZGVkLCB5b3UgbXVzdCBpbmNsdWRlIGEgc3RhdGVtZW50IHRoYXQgYW55IHVzZSAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiBvciBkaXN0cmlidXRpb24pIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBvdGhlciBhZmZpcm1hdGl2ZSBhY3QgdGhhdCB5b3UgZGVmaW5lLCBjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZSBMaWNlbnNlLCBhbmQgaW5zdHJ1Y3RpbmcgdGhlIHVzZXIgbm90IHRvIHVzZSB0aGUgQ292ZXJlZCBDb2RlIGluIGFueSBtYW5uZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QgYWNjZXB0IGFsbCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UuCisKKworMi4yIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOyAKKworKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgCisKKyhjKSBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyAKKworKGQpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlOyBhbmQgCisKKyhlKSB0aGUgb2JqZWN0IGNvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBZb3VyIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdCBzdWNoIGxpY2Vuc2UgYWdyZWVtZW50IGNvbnRhaW5zIHRlcm1zIG5vIGxlc3MgcHJvdGVjdGl2ZSBvZiBTeWJhc2UgYW5kIGVhY2ggQ29udHJpYnV0b3IgdGhhbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgc3RhdGluZyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHkuCisKKworMi4zIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBTeWJhc2UgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUuCisKKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IGhlcmVieSBncmFudCB0byBTeWJhc2UgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBTeWJhc2VgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMi4KKworCis0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IFN5YmFzZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIFN5YmFzZSB3aGljaCBTeWJhc2UgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uCisKKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UgKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgU3liYXNlIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3Qgb2J0YWluIHRoZSByZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgU3liYXNlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBTeWJhc2Ugb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gU3liYXNlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTeWJhc2UuIE5vIG9uZSBvdGhlciB0aGFuIFN5YmFzZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBTWUJBU0UgQU5EIFNZQkFTRWBTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgIlNZQkFTRSIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBTWUJBU0UgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBTWUJBU0UsIEEgU1lCQVNFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgU1lCQVNFIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNULCBDT05TRVFVRU5USUFMIE9SIE9USEVSIERBTUFHRVMgT0YgQU5ZIEtJTkQgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBTWUJBU0UgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMsIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIE9SIE9USEVSIERBTUFHRVMgT0YgQU5ZIEtJTkQsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgU3liYXNlYHMgb3IgYW55IENvbnRyaWJ1dG9yYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZml2ZSBodW5kcmVkIGRvbGxhcnMgKCQ1MDAuMDApLgorCisKKzEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIlN5YmFzZSIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIFN5YmFzZSAoY29sbGVjdGl2ZWx5ICJTeWJhc2UgTWFya3MiKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvcigiQ29udHJpYnV0b3IgTWFya3MiKS4gTm8gU3liYXNlIE1hcmtzIG9yIENvbnRyaWJ1dG9yIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gd2l0aCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFN5YmFzZSBvciB0aGUgQ29udHJpYnV0b3IsIGFzIGFwcGxpY2FibGUuCisKKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gU3liYXNlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgU3liYXNlICgiU3liYXNlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggU3liYXNlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gU3liYXNlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBTeWJhc2UgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTIuIFRlcm1pbmF0aW9uLgorCisKKzEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisKKyhiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IKKworKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgKGluY2x1ZGluZyBhcyBhIGNyb3NzIGNsYWltIG9yIGNvdW50ZXJjbGFpbSkgYWdhaW5zdCBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yLgorCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKworMTMuIE1pc2NlbGxhbmVvdXMuCisKKworMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZyB5b3UsIFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBTeWJhc2VgcyBvciBhbnkgQ29udHJpYnV0b3JgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgU3liYXNlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKworMTMuNSBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBTeWJhc2UgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIGFuZCBZb3UgYW5kIFN5YmFzZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZiBDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzI7IHF1ZSBsZSBwciYjMjMyO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMjtkaSYjMjMyO3MgZW4gYW5nbGFpcy4KKworCitFWEhJQklUIEEuIAorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTgzLTIwMDIgU3liYXNlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIFN5YmFzZSBPcGVuIFdhdGNvbSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMCAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gQlkgVVNJTkcgVEhJUyBGSUxFIFlPVSBBR1JFRSBUTyBBTEwgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIExJQ0VOU0UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBwcm92aWRlZCB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgd3d3LnN5YmFzZS5jb20vZGV2ZWxvcGVyL29wZW5zb3VyY2UuIAorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgU1lCQVNFIEFORCBBTEwgQ09OVFJJQlVUT1JTIEhFUkVCWSBESVNDTEFJTSBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWYzYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjAKQEAgLTAsMCArMSwyMiBAQAorQ29weXJpZ2h0IChDKSAxOTk0LTIwMDMgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorWEZSRUU4NiBQUk9KRUNUIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYRnJlZTg2IFByb2plY3Qgc2hhbGwgbm90CitiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWEZyZWU4NiBQcm9qZWN0LgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE1Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjEKQEAgLTAsMCArMSwxOCBAQAorCitYRnJlZTg2IExpY2Vuc2UgKHZlcnNpb24gMS4xKQorCitDb3B5cmlnaHQgKEMpIDE5OTQtMjAwNiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIGZvcm0gYXMgb3RoZXIgY29weXJpZ2h0LCBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIGluZm9ybWF0aW9uLgorCiszLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jIChodHRwOi8vd3d3LnhmcmVlODYub3JnLykgYW5kIGl0cyBjb250cmlidXRvcnMiLCBpbiB0aGUgc2FtZSBwbGFjZSBhbmQgZm9ybSBhcyBvdGhlciB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMuIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgaW4gdGhlIHNhbWUgZm9ybSBhbmQgbG9jYXRpb24gYXMgb3RoZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMuCisKKzQuIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFhGUkVFODYgUFJPSkVDVCwgSU5DIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTgyZDYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWFNMCkBAIC0wLDAgKzEsNDggQEAKK0NvcHlyaWdodAorLS0tLS0tLS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyBOb3JtYW4gV2Fsc2gKK0NvcHlyaWdodCAoQykgMjAwMyBKacWZw60gS29zZWsKK0NvcHlyaWdodCAoQykgMjAwNC0yMDA3IFN0ZXZlIEJhbGwKK0NvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRoZSBEb2NCb29rIFByb2plY3QKK0NvcHlyaWdodCAoQykgMjAxMS0yMDEyIE8nUmVpbGx5IE1lZGlhCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorZmlsZXMgKHRoZSBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lcyBvZiBpbmRpdmlkdWFscworY3JlZGl0ZWQgd2l0aCBjb250cmlidXRpb24gdG8gdGhpcyBzb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCBpbgorYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlcgorZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbgorZnJvbSB0aGUgaW5kaXZpZHVhbHMgaW4gcXVlc3Rpb24uCisKK0FueSBzdHlsZXNoZWV0IGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHRoYXQgaXMgcHVibGljYWxseQorZGlzdHJpYnV0ZWQgd2lsbCBiZSBpZGVudGlmaWVkIHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgdGhlCit2ZXJzaW9uIHN0cmluZ3MgaW4gYW55IGRlcml2ZWQgU29mdHdhcmUgd2lsbCBiZSBjaGFuZ2VkIHNvIHRoYXQKK25vIHBvc3NpYmlsaXR5IG9mIGNvbmZ1c2lvbiBiZXR3ZWVuIHRoZSBkZXJpdmVkIHBhY2thZ2UgYW5kIHRoaXMKK1NvZnR3YXJlIHdpbGwgZXhpc3QuCisKK1dhcnJhbnR5CistLS0tLS0tLQorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBOT1JNQU4gV0FMU0ggT1IgQU5ZIE9USEVSCitDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKK09USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworQ29udGFjdGluZyB0aGUgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBEb2NCb29rIFhTTCBzdHlsZXNoZWV0cyBhcmUgbWFpbnRhaW5lZCBieSBOb3JtYW4gV2Fsc2gsCis8bmR3QG53YWxzaC5jb20+LCBhbmQgbWVtYmVycyBvZiB0aGUgRG9jQm9vayBQcm9qZWN0LAorPGRvY2Jvb2stZGV2ZWxvcGVyc0BzZi5uZXQ+CmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YbmV0IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWG5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQ0ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWG5ldApAQCAtMCwwICsxLDI3IEBACisKK1RoZSBYLk5ldCwgSW5jLiBMaWNlbnNlCitUaGlzIExpY2Vuc2UgaGFzIGJlZW4gdm9sdW50YXJpbHkgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9yLgorCitDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBYLk5ldCwgSW5jLiBMYWZheWV0dGUsIENhbGlmb3JuaWEsIFVTQQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworVGhpcyBhZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgaW4gYWxsIHJlc3BlY3RzIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZgorQ2FsaWZvcm5pYSBhbmQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWVBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1lQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExODgwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1lQTC0xLjEKQEAgLTAsMCArMSwzMCBAQAorCitZYWhvbyEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4xIChZUEwpCitUaGlzIFlhaG9vISBQdWJsaWMgTGljZW5zZSAodGhpcyAiQWdyZWVtZW50IikgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgdGhhdCBkZXNjcmliZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIFlhaG9vISBJbmMuLCBhIERlbGF3YXJlIGNvcnBvcmF0aW9uIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDcwMSBGaXJzdCBBdmVudWUsIFN1bm55dmFsZSwgQ2FsaWZvcm5pYSA5NDA4OSAoIllhaG9vISIpIHdpbGwgcHJvdmlkZSBzb2Z0d2FyZSB0byB5b3UgdmlhIGRvd25sb2FkIG9yIG90aGVyd2lzZSAoIlNvZnR3YXJlIikuIEJ5IHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91LCBhbiBpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSAoIllvdSIpIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgbXV0dWFsIHByb21pc2VzIGFuZCB1cG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsb3csIHRoZSBwYXJ0aWVzIGFncmVlIGFzIGZvbGxvd3M6CisKK0dyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlCisxLjEgLSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgWWFob28hIGhlcmVieSBncmFudHMgdG8gWW91LCB1bmRlciBhbnkgYW5kIGFsbCBvZiBpdHMgY29weXJpZ2h0IGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUsIGEgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gY29weSwgbW9kaWZ5LCBjb21waWxlLCBleGVjdXRlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIE1vZGlmaWNhdGlvbnMuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFueSBjaGFuZ2UgdG8sIGFkZGl0aW9uIHRvLCBvciBhYnJpZGdlbWVudCBvZiB0aGUgU29mdHdhcmUgbWFkZSBieSBZb3UgaXMgYSAiTW9kaWZpY2F0aW9uOyIgaG93ZXZlciwgYW55IGZpbGUgWW91IGFkZCB0byB0aGUgU29mdHdhcmUgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSBwYXJ0IG9mIHRoZSBTb2Z0d2FyZSBpcyBub3QgYSAiTW9kaWZpY2F0aW9uLiIKKzEuMiAtIElmIFlvdSBhcmUgYW4gaW5kaXZpZHVhbCBhY3Rpbmcgb24gYmVoYWxmIG9mIGEgY29ycG9yYXRpb24gb3Igb3RoZXIgZW50aXR5LCBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFlvdXIgaGF2aW5nIHRoZSBhdXRob3JpdHkgdG8gYmluZCBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSB0byB0aGlzIEFncmVlbWVudC4gUHJvdmlkaW5nIGNvcGllcyB0byBwZXJzb25zIHdpdGhpbiBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSBpcyBub3QgY29uc2lkZXJlZCBkaXN0cmlidXRpb24gZm9yIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LgorMS4zIC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgWW91IG11c3QgZG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudCB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uLiBXaXRoIHJlc3BlY3QgdG8gYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIFlvdSBpbiB0aGUgc2FtZSB3YXkgdGhvc2UgdGVybXMgYXBwbHkgdG8gWWFob28hIHdpdGggcmVzcGVjdCB0byB0aGUgU29mdHdhcmUuIEluIG90aGVyIHdvcmRzLCB3aGVuIFlvdSBhcmUgZGlzdHJpYnV0aW5nIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBZYWhvbyEgaW4gdGVybXMgb2YgdGhlIHJpZ2h0cyBZb3UgZ3JhbnQgYW5kIGhvdyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgdG8gWW91IGFuZCB0aGUgbGljZW5zZWVzIG9mIFlvdXIgTW9kaWZpY2F0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdoZW4gWW91ICJzdGFuZCBpbiB0aGUgc2hvZXMiIG9mIFlhaG9vISwgWW91IGFyZSBub3Qgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIHByb3Zpc2lvbiB1bmRlciBTZWN0aW9uIDcsIHdoaWNoIHJlcXVpcmVzIGFsbCBkaXNwdXRlcyB1bmRlciB0aGlzIEFncmVlbWVudCB0byBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYS4KKzEuNCAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGFsc28gcHJvdmlkZSByZWNpcGllbnRzIHdpdGggYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gaW4gc291cmNlIGNvZGUgZm9ybWF0IGFsb25nIHdpdGggYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LiBUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCBtYXkgYmUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSW4gYWRkaXRpb24sIFlvdSBtdXN0IG1ha2UgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBsaWNlbnNlIHRlcm1zIGFwcGx5aW5nIHRvIHN1Y2ggU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgWWFob28hLCBhbmQgdGhhdCBzdWNoIGxpY2Vuc2UgZG9lcyBub3QgcmVzdHJpY3QgcmVjaXBpZW50cyBmcm9tIGV4ZXJjaXNpbmcgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgU29mdHdhcmUgZ3JhbnRlZCBieSBZYWhvbyEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byBhbnkgTW9kaWZpY2F0aW9uIGdyYW50ZWQgYnkgWW91IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMy4KKzEuNSAtIFRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGxpbWl0IFlvdXIgcmlnaHQgdG8gZGlzdHJpYnV0ZSBmaWxlcyB0aGF0IGFyZSBlbnRpcmVseSBZb3VyIG93biB3b3JrIChpLmUuLCB3aGljaCBkbyBub3QgaW5jb3Jwb3JhdGUgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZCBhcmUgbm90IE1vZGlmaWNhdGlvbnMpIHVuZGVyIGFueSB0ZXJtcyBZb3UgY2hvb3NlLgorU3VwcG9ydAorWWFob28hIGhhcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQgb3IgdXBkYXRlcyB0byBZb3UuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgcmVxdWlyZXMgWWFob28hIHRvIGVudGVyIGludG8gYW55IGxpY2Vuc2Ugd2l0aCBZb3UgZm9yIGFueSBvdGhlciBlZGl0aW9uIG9mIHRoZSBTb2Z0d2FyZS4KK0ludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMKKzMuMSAtIEV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgY29weXJpZ2h0IGluIFNlY3Rpb24gMS4xLCBubyByaWdodHMsIGxpY2Vuc2VzIG9yIGZvcmJlYXJhbmNlcyBhcmUgZ3JhbnRlZCBvciBtYXkgYXJpc2UgaW4gcmVsYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBleGhhdXN0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMsIGluY2x1ZGluZyBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgdGhhdCBhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCiszLjIgLSBJbiBhbnkgY29weSBvZiB0aGUgU29mdHdhcmUgb3IgaW4gYW55IE1vZGlmaWNhdGlvbiB5b3UgY3JlYXRlLCBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSwgYW55IGFuZCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIFNvZnR3YXJlIGluIHRoZSBzYW1lIGZvcm0gYXMgdGhleSBhcHBlYXIgaW4gdGhlIFNvZnR3YXJlLiBUaGlzIGluY2x1ZGVzIHRoZSBwcmVzZXJ2YXRpb24gb2YgYXR0cmlidXRpb24gbm90aWNlcyBpbiB0aGUgZm9ybSBvZiB0cmFkZW1hcmtzIG9yIGxvZ29zIHRoYXQgZXhpc3Qgd2l0aGluIGEgdXNlciBpbnRlcmZhY2Ugb2YgdGhlIFNvZnR3YXJlLgorMy4zIC0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IFlvdSByaWdodHMgdG8gdXNlIGFueSBwYXJ0eWBzIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MsIGV4Y2VwdCBzb2xlbHkgYXMgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy4yLgorRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gWUFIT08hIE1BS0VTIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZIFJFR0FSRElORyBPUiBSRUxBVElORyBUTyBUSEUgU09GVFdBUkUuIFNQRUNJRklDQUxMWSwgWUFIT08hIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFIE9SIFdJTEwgUEVSRk9STSBJTiBBTiBVTklOVEVSUlVQVEVEIE1BTk5FUi4gVE8gVEhFIEdSRUFURVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgWUFIT08hIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIChFVkVOIElGIFlBSE9PISBIQUQgQkVFTiBJTkZPUk1FRCBPRiBTVUNIIFBVUlBPU0UpLCBBTkQgTk9OSU5GUklOR0VNRU5UIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIEFOWSBNT0RJRklDQVRJT05TIFRIRVJFVE8gQU5EIFdJVEggUkVTUEVDVCBUTyBUSEUgVVNFIE9GIFRIRSBGT1JFR09JTkcuCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorSU4gTk8gRVZFTlQgV0lMTCBZQUhPTyEgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBQUk9GSVRTLCBMT1NTIE9GIFVTRSwgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIERBVEEsIENPU1QgT0YgQ09WRVIpIElOIENPTk5FQ1RJT04gV0lUSCBPUiBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBBTlkgT1RIRVIgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBXSEVUSEVSIEFMTEVHRUQgQVMgQSBCUkVBQ0ggT0YgQ09OVFJBQ1QgT1IgVE9SVElPVVMgQ09ORFVDVCwgSU5DTFVESU5HIE5FR0xJR0VOQ0UsIEFORCBFVkVOIElGIFlBSE9PISBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCitUZXJtIGFuZCBUZXJtaW5hdGlvbgorNi4xIC0gVGhpcyBBZ3JlZW1lbnQgd2lsbCBjb250aW51ZSBpbiBlZmZlY3QgdW5sZXNzIGFuZCB1bnRpbCB0ZXJtaW5hdGVkIGVhcmxpZXIgcHVyc3VhbnQgdG8gdGhpcyBTZWN0aW9uIDYuCis2LjIgLSBJbiB0aGUgZXZlbnQgWW91IHZpb2xhdGUgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBZYWhvbyEgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudC4KKzYuMyAtIEFsbCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBzaGFsbCB0ZXJtaW5hdGUgdXBvbiB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIFRlcm1pbmF0aW9uIHdpbGwgYmUgaW4gYWRkaXRpb24gdG8gYW55IHJpZ2h0cyBhbmQgcmVtZWRpZXMgYXZhaWxhYmxlIHRvIFlhaG9vISBhdCBsYXcgb3IgZXF1aXR5IG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorNi40IC0gVGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYWZmZWN0IHRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyByZXNlcnZhdGlvbiBvZiByaWdodHMgKFNlY3Rpb24gMy4xKSwgcHJvdmlzaW9ucyBkaXNjbGFpbWluZyBvciBsaW1pdGluZyBZYWhvbyFgcyBsaWFiaWxpdHkgKFNlY3Rpb25zIDQgYW5kIDUpLCBUZXJtaW5hdGlvbiAoU2VjdGlvbiA2KSBvciBNaXNjZWxsYW5lb3VzIChTZWN0aW9uIDcpLCB3aGljaCBwcm92aXNpb25zIHdpbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KK01pc2NlbGxhbmVvdXMKK1RoaXMgQWdyZWVtZW50IGNvbnRhaW5zIHRoZSBlbnRpcmUgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHN1cGVyc2VkZXMgYWxsIHByZXZpb3VzIGNvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzLCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byBzYWlkIHN1YmplY3QgbWF0dGVyLiBUaGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYXJ0aWVzIGhlcmV1bmRlciBpcyB0aGF0IG9mIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLCBhbmQgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcy4gSWYgYW55IHRlcm0sIGNvbmRpdGlvbiwgb3IgcHJvdmlzaW9uIGluIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHRvIGJlIGludmFsaWQsIHVubGF3ZnVsIG9yIHVuZW5mb3JjZWFibGUgdG8gYW55IGV4dGVudCwgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBjb25zdHJ1ZWQgaW4gYSBtYW5uZXIgdGhhdCBtb3N0IGNsb3NlbHkgZWZmZWN0dWF0ZXMgdGhlIGludGVudCBvZiB0aGlzIEFncmVlbWVudC4gU3VjaCBpbnZhbGlkIHRlcm0sIGNvbmRpdGlvbiBvciBwcm92aXNpb24gd2lsbCBiZSBzZXZlcmVkIGZyb20gdGhlIHJlbWFpbmluZyB0ZXJtcywgY29uZGl0aW9ucyBhbmQgcHJvdmlzaW9ucywgd2hpY2ggd2lsbCBjb250aW51ZSB0byBiZSB2YWxpZCBhbmQgZW5mb3JjZWFibGUgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYW5kIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIHdpdGhvdXQgcmVnYXJkIHRvIGNvbmZsaWN0IG9mIGxhdyBwcmluY2lwbGVzLiBUaGUgVS5OLiBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBBZ3JlZW1lbnQuIEFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGlzIEFncmVlbWVudCBpbnZvbHZpbmcgWWFob28hIG9yIGFueSBvZiBpdHMgc3Vic2lkaWFyaWVzIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIE5vIHJpZ2h0cyBtYXkgYmUgYXNzaWduZWQsIG5vIG9ibGlnYXRpb25zIG1heSBiZSBkZWxlZ2F0ZWQsIGFuZCB0aGlzIEFncmVlbWVudCBtYXkgbm90IGJlIHRyYW5zZmVycmVkIGJ5IFlvdSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2hldGhlciB2b2x1bnRhcnkgb3IgYnkgb3BlcmF0aW9uIG9mIGxhdywgaW5jbHVkaW5nIGJ5IHdheSBvZiBzYWxlIG9mIGFzc2V0cywgbWVyZ2VyIG9yIGNvbnNvbGlkYXRpb24sIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBZYWhvbyEsIGFuZCBhbnkgcHVycG9ydGVkIGFzc2lnbm1lbnQsIGRlbGVnYXRpb24gb3IgdHJhbnNmZXIgd2l0aG91dCBzdWNoIGNvbnNlbnQgc2hhbGwgYmUgdm9pZCBhYiBpbml0aW8uIEFueSB3YWl2ZXIgb2YgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3Igb2YgYSBwYXJ0eWBzIHJpZ2h0cyBvciByZW1lZGllcyB1bmRlciB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluIHdyaXRpbmcgdG8gYmUgZWZmZWN0aXZlLiBGYWlsdXJlLCBuZWdsZWN0IG9yIGRlbGF5IGJ5IGEgcGFydHkgdG8gZW5mb3JjZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBpdHMgcmlnaHRzIG9yIHJlbWVkaWVzIGF0IGFueSB0aW1lLCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgb3IgYmUgZGVlbWVkIHRvIGJlIGEgd2FpdmVyIG9mIHN1Y2ggcGFydHlgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIHdpbGwgbm90IGluIGFueSB3YXkgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgcHJlanVkaWNlIHN1Y2ggcGFydHlgcyByaWdodCB0byB0YWtlIHN1YnNlcXVlbnQgYWN0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFhYmVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTEuMQpAQCAtMCwwICsxLDI4IEBACisKK1pvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAxLjEKKworQ29weXJpZ2h0IChjKSBab3BlIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGxpY2Vuc2UgaGFzIGJlZW4gY2VydGlmaWVkIGFzIG9wZW4gc291cmNlLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBhbmQgZG9jdW1lbnRhdGlvbiBtZW50aW9uaW5nIGZlYXR1cmVzIGRlcml2ZWQgZnJvbSBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBab3BlIENvcnBvcmF0aW9uIGZvciB1c2UgaW4gdGhlIFogT2JqZWN0IFB1Ymxpc2hpbmcgRW52aXJvbm1lbnQgKGh0dHA6Ly93d3cuem9wZS5jb20vKS4iCisKK0luIHRoZSBldmVudCB0aGF0IHRoZSBwcm9kdWN0IGJlaW5nIGFkdmVydGlzZWQgaW5jbHVkZXMgYW4gaW50YWN0IFpvcGUgZGlzdHJpYnV0aW9uICh3aXRoIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmNsdWRlZCkgdGhlbiB0aGlzIGNsYXVzZSBpcyB3YWl2ZWQuCisKK05hbWVzIGFzc29jaWF0ZWQgd2l0aCBab3BlIG9yIFpvcGUgQ29ycG9yYXRpb24gbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBab3BlIENvcnBvcmF0aW9uLgorTW9kaWZpZWQgcmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFpvcGUgQ29ycG9yYXRpb24gZm9yIHVzZSBpbiB0aGUgWiBPYmplY3QgUHVibGlzaGluZyBFbnZpcm9ubWVudCAoaHR0cDovL3d3dy56b3BlLmNvbS8pLiIKKworSW50YWN0IChyZS0pZGlzdHJpYnV0aW9ucyBvZiBhbnkgb2ZmaWNpYWwgWm9wZSByZWxlYXNlIGRvIG5vdCByZXF1aXJlIGFuIGV4dGVybmFsIGFja25vd2xlZGdlbWVudC4KKworTW9kaWZpY2F0aW9ucyBhcmUgZW5jb3VyYWdlZCBidXQgbXVzdCBiZSBwYWNrYWdlZCBzZXBhcmF0ZWx5IGFzIHBhdGNoZXMgdG8gb2ZmaWNpYWwgWm9wZSByZWxlYXNlcy4gRGlzdHJpYnV0aW9ucyB0aGF0IGRvIG5vdCBjbGVhcmx5IHNlcGFyYXRlIHRoZSBwYXRjaGVzIGZyb20gdGhlIG9yaWdpbmFsIHdvcmsgbXVzdCBiZSBjbGVhcmx5IGxhYmVsZWQgYXMgdW5vZmZpY2lhbCBkaXN0cmlidXRpb25zLiBNb2RpZmljYXRpb25zIHdoaWNoIGRvIG5vdCBjYXJyeSB0aGUgbmFtZSBab3BlIG1heSBiZSBwYWNrYWdlZCBpbiBhbnkgZm9ybSwgYXMgbG9uZyBhcyB0aGV5IGNvbmZvcm0gdG8gYWxsIG9mIHRoZSBjbGF1c2VzIGFib3ZlLgorRGlzY2xhaW1lcgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBaT1BFIENPUlBPUkFUSU9OIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFpPUEUgQ09SUE9SQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiBjb250cmlidXRpb25zIG1hZGUgYnkgWm9wZSBDb3Jwb3JhdGlvbiBhbmQgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgWm9wZSBDb3Jwb3JhdGlvbi4gU3BlY2lmaWMgYXR0cmlidXRpb25zIGFyZSBsaXN0ZWQgaW4gdGhlIGFjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZTIwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4wCkBAIC0wLDAgKzEsNjEgQEAKKworWm9wZSBQdWJsaWMgTGljZW5zZSAoWlBMKSBWZXJzaW9uIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzb2Z0d2FyZSBpcyBDb3B5cmlnaHQgKGMpIFpvcGUgQ29ycG9yYXRpb24gKHRtKSBhbmQKK0NvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4gSXQgaGFzIGFsc28KK2JlZW4gZGVzaWduYXRlZCBhcyBHUEwgY29tcGF0aWJsZSBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiAoRlNGKS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgord2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUKK2ZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgWm9wZSBDb3Jwb3JhdGlvbiAodG0pIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBab3BlIENvcnBvcmF0aW9uLgorCis0LiBUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IKKyAgIGFueSBwdXJwb3NlIGRvZXMgbm90IGdpdmUgeW91IHRoZSByaWdodCB0byB1c2UgU2VydmljZW1hcmtzCisgICAoc20pIG9yIFRyYWRlbWFya3MgKHRtKSBvZiBab3BlIENvcnBvcmF0aW9uLiBVc2Ugb2YgdGhlbSBpcworICAgY292ZXJlZCBpbiBhIHNlcGFyYXRlIGFncmVlbWVudCAoc2VlCisgICBodHRwOi8vd3d3LnpvcGUuY29tL01hcmtzKS4KKworNS4gSWYgYW55IGZpbGVzIGFyZSBtb2RpZmllZCwgeW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkCisgICBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQKKyAgIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworRGlzY2xhaW1lcgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgWk9QRSBDT1JQT1JBVElPTiBgYEFTIElTYGAKKyAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVAorICBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAgTk8gRVZFTlQgU0hBTEwgWk9QRSBDT1JQT1JBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFCisgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAgREFNQUdFLgorCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IFpvcGUKK0NvcnBvcmF0aW9uIGFuZCBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBab3BlCitDb3Jwb3JhdGlvbi4gIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZQorYWNjb21wYW55aW5nIGNyZWRpdHMgZmlsZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ZDQzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjEKQEAgLTAsMCArMSwxOCBAQAorCitaUEwgMi4xCitab3BlIFB1YmxpYyBMaWNlbnNlIChaUEwpIFZlcnNpb24gMi4xCisKK0EgY29weXJpZ2h0IG5vdGljZSBhY2NvbXBhbmllcyB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgdGhhdCBpZGVudGlmaWVzIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4gSXQgaGFzIGFsc28gYmVlbiBkZXNpZ25hdGVkIGFzIEdQTCBjb21wYXRpYmxlIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEZTRikuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFjY29tcGFueWluZyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KK1RoZSByaWdodCB0byBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgb3IgdG8gdXNlIGl0IGZvciBhbnkgcHVycG9zZSBkb2VzIG5vdCBnaXZlIHlvdSB0aGUgcmlnaHQgdG8gdXNlIFNlcnZpY2VtYXJrcyAoc20pIG9yIFRyYWRlbWFya3MgKHRtKSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMuIFVzZSBvZiB0aGVtIGlzIGNvdmVyZWQgYnkgc2VwYXJhdGUgYWdyZWVtZW50IHdpdGggdGhlIGNvcHlyaWdodCBob2xkZXJzLgorSWYgYW55IGZpbGVzIGFyZSBtb2RpZmllZCwgeW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCitEaXNjbGFpbWVyCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ppbWJyYS0xLjMgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aaW1icmEtMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjdiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aaW1icmEtMS4zCkBAIC0wLDAgKzEsMzAgQEAKKworWmltYnJhIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMyAoWlBMKQorVGhpcyBaaW1icmEgUHVibGljIExpY2Vuc2UgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBWTXdhcmUsIEluYy4sIGEgRGVsYXdhcmUgY29ycG9yYXRpb24gaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgMzQwMSBIaWxsdmlldyBBdmVudWUsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwNCAoIlZNd2FyZSIpIHdpbGwgcHJvdmlkZSBzb2Z0d2FyZSB0byB5b3UgdmlhIGRvd25sb2FkIG9yIG90aGVyd2lzZSAoIlNvZnR3YXJlIikuIEJ5IHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91LCBhbiBpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSAoIllvdSIpIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgbXV0dWFsIHByb21pc2VzIGFuZCB1cG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsb3csIHRoZSBwYXJ0aWVzIGFncmVlIGFzIGZvbGxvd3M6CisKKzEuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlCisxLjEgLSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgVk13YXJlIGhlcmVieSBncmFudHMgdG8gWW91LCB1bmRlciBhbnkgYW5kIGFsbCBvZiBpdHMgY29weXJpZ2h0IGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUsIGEgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gY29weSwgbW9kaWZ5LCBjb21waWxlLCBleGVjdXRlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIE1vZGlmaWNhdGlvbnMuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFueSBjaGFuZ2UgdG8sIGFkZGl0aW9uIHRvLCBvciBhYnJpZGdlbWVudCBvZiB0aGUgU29mdHdhcmUgbWFkZSBieSBZb3UgaXMgYSAiTW9kaWZpY2F0aW9uOyIgaG93ZXZlciwgYW55IGZpbGUgWW91IGFkZCB0byB0aGUgU29mdHdhcmUgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSBwYXJ0IG9mIHRoZSBTb2Z0d2FyZSBpcyBub3QgYSAiTW9kaWZpY2F0aW9uLiIKKzEuMiAtIElmIFlvdSBhcmUgYW4gaW5kaXZpZHVhbCBhY3Rpbmcgb24gYmVoYWxmIG9mIGEgY29ycG9yYXRpb24gb3Igb3RoZXIgZW50aXR5LCBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFlvdXIgaGF2aW5nIHRoZSBhdXRob3JpdHkgdG8gYmluZCBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSB0byB0aGlzIEFncmVlbWVudC4gUHJvdmlkaW5nIGNvcGllcyB0byBwZXJzb25zIHdpdGhpbiBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSBpcyBub3QgY29uc2lkZXJlZCBkaXN0cmlidXRpb24gZm9yIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LgorMS4zIC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgWW91IG11c3QgZG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudCB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uLiBXaXRoIHJlc3BlY3QgdG8gYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIFlvdSBpbiB0aGUgc2FtZSB3YXkgdGhvc2UgdGVybXMgYXBwbHkgdG8gVk13YXJlIHdpdGggcmVzcGVjdCB0byB0aGUgU29mdHdhcmUuIEluIG90aGVyIHdvcmRzLCB3aGVuIFlvdSBhcmUgZGlzdHJpYnV0aW5nIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBWTXdhcmUgaW4gdGVybXMgb2YgdGhlIHJpZ2h0cyBZb3UgZ3JhbnQgYW5kIGhvdyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgdG8gWW91IGFuZCB0aGUgbGljZW5zZWVzIG9mIFlvdXIgTW9kaWZpY2F0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdoZW4gWW91ICJzdGFuZCBpbiB0aGUgc2hvZXMiIG9mIFZNd2FyZSwgWW91IGFyZSBub3Qgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIHByb3Zpc2lvbiB1bmRlciBTZWN0aW9uIDcsIHdoaWNoIHJlcXVpcmVzIGFsbCBkaXNwdXRlcyB1bmRlciB0aGlzIEFncmVlbWVudCB0byBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYS4KKzEuNCAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGFsc28gcHJvdmlkZSByZWNpcGllbnRzIHdpdGggYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gaW4gc291cmNlIGNvZGUgZm9ybWF0IGFsb25nIHdpdGggYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LiBUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCBtYXkgYmUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSW4gYWRkaXRpb24sIFlvdSBtdXN0IG1ha2UgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBsaWNlbnNlIHRlcm1zIGFwcGx5aW5nIHRvIHN1Y2ggU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgVk13YXJlLCBhbmQgdGhhdCBzdWNoIGxpY2Vuc2UgZG9lcyBub3QgcmVzdHJpY3QgcmVjaXBpZW50cyBmcm9tIGV4ZXJjaXNpbmcgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgU29mdHdhcmUgZ3JhbnRlZCBieSBWTXdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byBhbnkgTW9kaWZpY2F0aW9uIGdyYW50ZWQgYnkgWW91IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMy4KKzEuNSAtIFRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGxpbWl0IFlvdXIgcmlnaHQgdG8gZGlzdHJpYnV0ZSBmaWxlcyB0aGF0IGFyZSBlbnRpcmVseSBZb3VyIG93biB3b3JrIChpLmUuLCB3aGljaCBkbyBub3QgaW5jb3Jwb3JhdGUgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZCBhcmUgbm90IE1vZGlmaWNhdGlvbnMpIHVuZGVyIGFueSB0ZXJtcyBZb3UgY2hvb3NlLgorMi4gU3VwcG9ydAorVk13YXJlIGhhcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQgb3IgdXBkYXRlcyB0byBZb3UuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgcmVxdWlyZXMgVk13YXJlIHRvIGVudGVyIGludG8gYW55IGxpY2Vuc2Ugd2l0aCBZb3UgZm9yIGFueSBvdGhlciBlZGl0aW9uIG9mIHRoZSBTb2Z0d2FyZS4KKzMuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMKKzMuMSAtIEV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgY29weXJpZ2h0IGluIFNlY3Rpb24gMS4xLCBubyByaWdodHMsIGxpY2Vuc2VzIG9yIGZvcmJlYXJhbmNlcyBhcmUgZ3JhbnRlZCBvciBtYXkgYXJpc2UgaW4gcmVsYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBleGhhdXN0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMsIGluY2x1ZGluZyBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgdGhhdCBhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCiszLjIgLSBJbiBhbnkgY29weSBvZiB0aGUgU29mdHdhcmUgb3IgaW4gYW55IE1vZGlmaWNhdGlvbiB5b3UgY3JlYXRlLCBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSwgYW55IGFuZCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIFNvZnR3YXJlIGluIHRoZSBzYW1lIGZvcm0gYXMgdGhleSBhcHBlYXIgaW4gdGhlIFNvZnR3YXJlLiBUaGlzIGluY2x1ZGVzIHRoZSBwcmVzZXJ2YXRpb24gb2YgYXR0cmlidXRpb24gbm90aWNlcyBpbiB0aGUgZm9ybSBvZiB0cmFkZW1hcmtzIG9yIGxvZ29zIHRoYXQgZXhpc3Qgd2l0aGluIGEgdXNlciBpbnRlcmZhY2Ugb2YgdGhlIFNvZnR3YXJlLgorMy4zIC0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IFlvdSByaWdodHMgdG8gdXNlIGFueSBwYXJ0eWBzIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MsIGV4Y2VwdCBzb2xlbHkgYXMgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy4yLgorNC4gRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gVk1XQVJFIE1BS0VTIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZIFJFR0FSRElORyBPUiBSRUxBVElORyBUTyBUSEUgU09GVFdBUkUuIFNQRUNJRklDQUxMWSwgVk1XQVJFIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFIE9SIFdJTEwgUEVSRk9STSBJTiBBTiBVTklOVEVSUlVQVEVEIE1BTk5FUi4gVE8gVEhFIEdSRUFURVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgVk1XQVJFIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIChFVkVOIElGIFZNV0FSRSBIQUQgQkVFTiBJTkZPUk1FRCBPRiBTVUNIIFBVUlBPU0UpLCBBTkQgTk9OSU5GUklOR0VNRU5UIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIEFOWSBNT0RJRklDQVRJT05TIFRIRVJFVE8gQU5EIFdJVEggUkVTUEVDVCBUTyBUSEUgVVNFIE9GIFRIRSBGT1JFR09JTkcuCis1LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorSU4gTk8gRVZFTlQgV0lMTCBWTVdBUkUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBQUk9GSVRTLCBMT1NTIE9GIFVTRSwgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIERBVEEsIENPU1QgT0YgQ09WRVIpIElOIENPTk5FQ1RJT04gV0lUSCBPUiBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBBTlkgT1RIRVIgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBXSEVUSEVSIEFMTEVHRUQgQVMgQSBCUkVBQ0ggT0YgQ09OVFJBQ1QgT1IgVE9SVElPVVMgQ09ORFVDVCwgSU5DTFVESU5HIE5FR0xJR0VOQ0UsIEFORCBFVkVOIElGIFZNV0FSRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCis2LiBUZXJtIGFuZCBUZXJtaW5hdGlvbgorNi4xIC0gVGhpcyBBZ3JlZW1lbnQgd2lsbCBjb250aW51ZSBpbiBlZmZlY3QgdW5sZXNzIGFuZCB1bnRpbCB0ZXJtaW5hdGVkIGVhcmxpZXIgcHVyc3VhbnQgdG8gdGhpcyBTZWN0aW9uIDYuCis2LjIgLSBJbiB0aGUgZXZlbnQgWW91IHZpb2xhdGUgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBWTXdhcmUgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudC4KKzYuMyAtIEFsbCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBzaGFsbCB0ZXJtaW5hdGUgdXBvbiB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIFRlcm1pbmF0aW9uIHdpbGwgYmUgaW4gYWRkaXRpb24gdG8gYW55IHJpZ2h0cyBhbmQgcmVtZWRpZXMgYXZhaWxhYmxlIHRvIFZNd2FyZSBhdCBsYXcgb3IgZXF1aXR5IG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorNi40IC0gVGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYWZmZWN0IHRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyByZXNlcnZhdGlvbiBvZiByaWdodHMgKFNlY3Rpb24gMy4xKSwgcHJvdmlzaW9ucyBkaXNjbGFpbWluZyBvciBsaW1pdGluZyBWTXdhcmVgcyBsaWFiaWxpdHkgKFNlY3Rpb25zIDQgYW5kIDUpLCBUZXJtaW5hdGlvbiAoU2VjdGlvbiA2KSBvciBNaXNjZWxsYW5lb3VzIChTZWN0aW9uIDcpLCB3aGljaCBwcm92aXNpb25zIHdpbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKzcuIE1pc2NlbGxhbmVvdXMKK1RoaXMgQWdyZWVtZW50IGNvbnRhaW5zIHRoZSBlbnRpcmUgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHN1cGVyc2VkZXMgYWxsIHByZXZpb3VzIGNvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzLCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byBzYWlkIHN1YmplY3QgbWF0dGVyLiBUaGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYXJ0aWVzIGhlcmV1bmRlciBpcyB0aGF0IG9mIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLCBhbmQgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcy4gSWYgYW55IHRlcm0sIGNvbmRpdGlvbiwgb3IgcHJvdmlzaW9uIGluIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHRvIGJlIGludmFsaWQsIHVubGF3ZnVsIG9yIHVuZW5mb3JjZWFibGUgdG8gYW55IGV4dGVudCwgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBjb25zdHJ1ZWQgaW4gYSBtYW5uZXIgdGhhdCBtb3N0IGNsb3NlbHkgZWZmZWN0dWF0ZXMgdGhlIGludGVudCBvZiB0aGlzIEFncmVlbWVudC4gU3VjaCBpbnZhbGlkIHRlcm0sIGNvbmRpdGlvbiBvciBwcm92aXNpb24gd2lsbCBiZSBzZXZlcmVkIGZyb20gdGhlIHJlbWFpbmluZyB0ZXJtcywgY29uZGl0aW9ucyBhbmQgcHJvdmlzaW9ucywgd2hpY2ggd2lsbCBjb250aW51ZSB0byBiZSB2YWxpZCBhbmQgZW5mb3JjZWFibGUgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYW5kIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIHdpdGhvdXQgcmVnYXJkIHRvIGNvbmZsaWN0IG9mIGxhdyBwcmluY2lwbGVzLiBUaGUgVS5OLiBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBBZ3JlZW1lbnQuIEFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGlzIEFncmVlbWVudCBpbnZvbHZpbmcgVk13YXJlIG9yIGFueSBvZiBpdHMgc3Vic2lkaWFyaWVzIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIE5vIHJpZ2h0cyBtYXkgYmUgYXNzaWduZWQsIG5vIG9ibGlnYXRpb25zIG1heSBiZSBkZWxlZ2F0ZWQsIGFuZCB0aGlzIEFncmVlbWVudCBtYXkgbm90IGJlIHRyYW5zZmVycmVkIGJ5IFlvdSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2hldGhlciB2b2x1bnRhcnkgb3IgYnkgb3BlcmF0aW9uIG9mIGxhdywgaW5jbHVkaW5nIGJ5IHdheSBvZiBzYWxlIG9mIGFzc2V0cywgbWVyZ2VyIG9yIGNvbnNvbGlkYXRpb24sIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBWTXdhcmUsIGFuZCBhbnkgcHVycG9ydGVkIGFzc2lnbm1lbnQsIGRlbGVnYXRpb24gb3IgdHJhbnNmZXIgd2l0aG91dCBzdWNoIGNvbnNlbnQgc2hhbGwgYmUgdm9pZCBhYiBpbml0aW8uIEFueSB3YWl2ZXIgb2YgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3Igb2YgYSBwYXJ0eWBzIHJpZ2h0cyBvciByZW1lZGllcyB1bmRlciB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluIHdyaXRpbmcgdG8gYmUgZWZmZWN0aXZlLiBGYWlsdXJlLCBuZWdsZWN0IG9yIGRlbGF5IGJ5IGEgcGFydHkgdG8gZW5mb3JjZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBpdHMgcmlnaHRzIG9yIHJlbWVkaWVzIGF0IGFueSB0aW1lLCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgb3IgYmUgZGVlbWVkIHRvIGJlIGEgd2FpdmVyIG9mIHN1Y2ggcGFydHlgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIHdpbGwgbm90IGluIGFueSB3YXkgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgcHJlanVkaWNlIHN1Y2ggcGFydHlgcyByaWdodCB0byB0YWtlIHN1YnNlcXVlbnQgYWN0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9abGliIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGIzODg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmxpYgpAQCAtMCwwICsxLDIxIEBACisKK3psaWIgTGljZW5zZQorCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYXMtaXNgLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2J6aXAyIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvYnppcDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNTk5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2J6aXAyCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcHJvZ3JhbSwgImJ6aXAyIiwgdGhlIGFzc29jaWF0ZWQgbGlicmFyeSAibGliYnppcDIiLCBhbmQgYWxsCitkb2N1bWVudGF0aW9uLCBhcmUgY29weXJpZ2h0IChDKSAxOTk2LTIwMTAgSnVsaWFuIFIgU2V3YXJkLiAgQWxsCityaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0CisgICBub3QgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiAgSWYgeW91IHVzZSB0aGlzCisgICBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0CisgICBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisKKzMuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3QKKyAgIG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisKKzQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCitHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworSnVsaWFuIFNld2FyZCwganNld2FyZEBiemlwLm9yZworYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNiBvZiA2IFNlcHRlbWJlciAyMDEwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9lQ29zLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2VDb3MtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YjVkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9lQ29zLTIuMApAQCAtMCwwICsxLDE4IEBACisKK1RoZSBlQ29zIGxpY2Vuc2UgdmVyc2lvbiAyLjAKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgZUNvcywgdGhlIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorZUNvcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworZUNvcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgd29yayB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1RoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbiB0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0FsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4gYXQgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9lY29zL2Vjb3MtbGljZW5zZS8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyMjRUNPU0dQTENPUFlSSUdIVEVORCMjIyMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4NjM4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEKQEAgLTAsMCArMSwzODAgQEAKKworZ1NPQVAgUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjNiCisKK1RoZSBnU09BUCBwdWJsaWMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgKE1QTDEuMSkuCitUaGUgc2VjdGlvbnMgdGhhdCB3ZXJlIGRlbGV0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgTVBMMS4xIHRleHQgYXJlIDEuMC4xLCAyLjEuCisoYyksKGQpLCAyLjIuKGMpLChkKSwgOC4yLihiKSwgMTAsIGFuZCAxMS4gU2VjdGlvbiAzLjggd2FzIGFkZGVkLiBUaGUgbW9kaWZpZWQKK3NlY3Rpb25zIGFyZSAyLjEuKGIpLCAyLjIuKGIpLCAzLjIgKHNpbXBsaWZpZWQpLCAzLjUgKGRlbGV0ZWQgdGhlIGxhc3QKK3NlbnRlbmNlKSwgYW5kIDMuNiAoc2ltcGxpZmllZCkuCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgZ1NPQVAgc29mdHdhcmUgcGFja2FnZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZQorc29hcGNwcDIgYW5kIHdzZGwyaCBzb3VyY2UgY29kZSBsb2NhdGVkIGluIGdzb2FwL3NyYyBhbmQgZ3NvYXAvd3NkbCwgYWxsIGNvZGUKK2dlbmVyYXRlZCBieSBzb2FwY3BwMiBhbmQgd3NkbDJoLCB0aGUgVURESSBzb3VyY2UgY29kZSBnc29hcC91ZGRpMiwgYW5kIHRoZSBXZWIKK3NlcnZlciBzYW1wbGUgc291cmNlIGNvZGUgc2FtcGxlcy93ZWJzZXJ2ZXIuIFRvIHVzZSBhbnkgb2YgdGhlc2Ugc29mdHdhcmUgdG9vbHMKK2FuZCBjb21wb25lbnRzIGNvbW1lcmNpYWxseSwgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgcmVxdWlyZWQgYW5kIGNhbiBiZQorb2J0YWluZWQgZnJvbSB3d3cuZ2VuaXZpYS5jb20uCisxIERFRklOSVRJT05TLgorCisxLjAuMS4KKzEuMS4gIkNvbnRyaWJ1dG9yIgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEKK0NvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMuICJDb3ZlcmVkIENvZGUiCittZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yCit0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41LiAiRXhlY3V0YWJsZSIKK21lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiCittZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlCitTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorMS43LiAiTGFyZ2VyIFdvcmsiCittZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdAorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOC4gIkxpY2Vuc2UiCittZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEuICJMaWNlbnNhYmxlIgorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZQordGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMKK2NvbnZleWVkIGhlcmVpbi4KKzEuOS4gIk1vZGlmaWNhdGlvbnMiCittZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlCitPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhCitzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQS4KK0FueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbAorQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4KK0FueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4KKzEuMTAuICJPcmlnaW5hbCBDb2RlIgorbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZQorQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YKK2l0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiCittZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dAorbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5CitncmFudG9yLgorMS4xMS4gIlNvdXJjZSBDb2RlIgorbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LAoraW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uCitmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLAorb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUKK1NvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlCitkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyLiAiWW91IiAob3IgIllvdXIiKQorbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZword2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UKK2lzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkKK2VudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuCitGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwKK2RpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyIFNPVVJDRSBDT0RFIExJQ0VOU0UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZQorYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZQorYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dAorTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0bworbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQiKSB0aGUKK09yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudAordGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvcgoraW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueQorY29tYmluYXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZi4KKyhjKQorKGQpCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUKK2J5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpCitlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yCithcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpCit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gbWFrZSwKK2hhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlIENvbnRyaWJ1dG9yCitWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzCityZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGgKK290aGVyIHNvZnR3YXJlLCB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisoYykKKyhkKQorMyBESVNUUklCVVRJT04gT0JMSUdBVElPTlMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UKK211c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uCit0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlCityZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudAorb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gY3JlYXRlZCBieSBZb3Ugd2lsbCBiZSBwcm92aWRlZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4KK1NvdXJjZSBDb2RlIGZvcm0gYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlCitkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMKK2Rlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IKK3VuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UKK0NvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZQorcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvCitjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZQorYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZQorTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlCitvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldwora25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCitDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8KK2ltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwKK2ZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpCithYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3MKK29yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlCityaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEKK3JlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZgorWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yCit0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbgorYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yCitvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lCitvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24KK2JlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91cgorY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91CithcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbgordGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdQorZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdAorYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIElmIHlvdSBkaXN0cmlidXRlCitleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlIGFzIHBhcnQgb2YgYSBwcm9kdWN0LCB5b3UgbXVzdAorcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKK3Byb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdAorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYQorc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzCitMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuOC4gUmVzdHJpY3Rpb25zLgorCitZb3UgbWF5IG5vdCByZW1vdmUgYW55IHByb2R1Y3QgaWRlbnRpZmljYXRpb24sIGNvcHlyaWdodCwgcHJvcHJpZXRhcnkgbm90aWNlcworb3IgbGFiZWxzIGZyb20gZ1NPQVAuCis0IElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsCitvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZQorbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5CithZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLgorRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorNSBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUKK25vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorNiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworNi4xLiBOZXcgVmVyc2lvbnMuCisKK0dyYW50b3IgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0bwordGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8KK2luIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2UgImdTT0FQIgorb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZQordGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhcgordGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIGdTT0FQCitQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yCitDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUKK2RlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCis3IERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWQorUklHSFRTLCBBTkQgQU5ZIFdBUlJBTlRZIFRIQVQgTUFZIEFSSVNFIEJZIFJFQVNPTiBPRiBUUkFERSBVU0FHRSwgQ1VTVE9NLCBPUgorQ09VUlNFIE9GIERFQUxJTkcuIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgWU9VIEFDS05PV0xFREdFIFRIQVQgVEhFCitTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEFUIFRIRSBBVVRIT1JTIERPIE5PVCBXQVJSQU5UIFRIRQorU09GVFdBUkUgV0lMTCBSVU4gVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFLiBMSU1JVEVEIExJQUJJTElUWSBUSEUgRU5USVJFCitSSVNLIEFTIFRPIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gVU5ERVIgTk8KK0NJUkNVTVNUQU5DRVMgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK0VYRU1QTEFSWSBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgT1IgTkFUVVJFIFdIQVRTT0VWRVIsIFdIRVRIRVIKK0JBU0VEIE9OIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgT1VUIE9GIE9SIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEVWRU4gSUYgVEhFCitBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9OIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRSBPUiBJRiBTVUNIIERBTUFHRQorQ09VTEQgSEFWRSBCRUVOIFJFQVNPTkFCTFkgRk9SRVNFRU4sIEFORCBOT1RXSVRIU1RBTkRJTkcgQU5ZIEZBSUxVUkUgT0YKK0VTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBFWENMVVNJVkUgUkVNRURZIFBST1ZJREVELiBTVUNIIExJTUlUQVRJT04gT04gREFNQUdFUworSU5DTFVERVMsIEJVVCBJUyBOT1QgTElNSVRFRCBUTywgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgTE9TVCBQUk9GSVRTLAorTE9TUyBPRiBEQVRBIE9SIFNPRlRXQVJFLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OIE9SCitJTVBBSVJNRU5UIE9GIE9USEVSIEdPT0RTLiBJTiBOTyBFVkVOVCBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgVEhFIENPU1RTCitPRiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIFNPRlRXQVJFIE9SIFNFUlZJQ0VTLiBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSElTCitTT0ZUV0FSRSBJUyBOT1QgREVTSUdORUQgRk9SIFVTRSBJTiBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTCitTVUNIIEFTIE9QRVJBVElPTiBPRiBOVUNMRUFSIEZBQ0lMSVRJRVMsIEFJUkNSQUZUIE5BVklHQVRJT04gT1IgQ09OVFJPTCwgT1IKK0xJRkUtQ1JJVElDQUwgQVBQTElDQVRJT05TLiBUSEUgQVVUSE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQU5ZIExJQUJJTElUWQorUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMKK0VOVklST05NRU5UUyBBTkQgQUNDRVBUUyBOTyBMSUFCSUxJVFkgSU4gUkVTUEVDVCBPRiBBTlkgQUNUSU9OUyBPUiBDTEFJTVMgQkFTRUQKK09OIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUworRU5WSVJPTk1FTlRTIEJZIFlPVS4gRk9SIFBVUlBPU0VTIE9GIFRISVMgUEFSQUdSQVBILCBUSEUgVEVSTSAiTElGRS0KK0NSSVRJQ0FMIEFQUExJQ0FUSU9OIiBNRUFOUyBBTiBBUFBMSUNBVElPTiBJTiBXSElDSCBUSEUgRlVOQ1RJT05JTkcgT1IKK01BTEZVTkNUSU9OSU5HIE9GIFRIRSBTT0ZUV0FSRSBNQVkgUkVTVUxUIERJUkVDVExZIE9SIElORElSRUNUTFkgSU4gUEhZU0lDQUwKK0lOSlVSWSBPUiBMT1NTIE9GIEhVTUFOIExJRkUuIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTgorRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVECitIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzggVEVSTUlOQVRJT04uCisKKzguMS4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmCitZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2gKK2FyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucword2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLgorOC4zLgorSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0CitzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkKK3BhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8KK3RoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlCit0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorbGljZW5zZS4KKzguNC4KK0luIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIKK2xpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4KK3ZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbAorc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKzkgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZCitPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWQorT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLAorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sCitEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLAorT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMCitIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCitMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORworRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNICitMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRgorSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QKK0FQUExZIFRPIFlPVS4KKzEwIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKzExIE1JU0NFTExBTkVPVVMuCisKKzEyIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUKK2ZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbgorb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQKK0NvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nCitoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCitFWEhJQklUIEEuCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBnU09BUCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisxLjMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cuY3MuZnN1LmVkdS8gZW5nZWxlbi9zb2FwbGljZW5zZS5odG1sCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCitmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgb2YgdGhlIGdTT0FQIFNvZnR3YXJlIGlzOiBzdGRzb2FwLmgsIHN0ZHNvYXAyLmgsIHN0ZHNvYXAuYywKK3N0ZHNvYXAyLmMsIHN0ZHNvYXAuY3BwLCBzdGRzb2FwMi5jcHAsIHNvYXBjcHAyLmgsIHNvYXBjcHAyLmMsIHNvYXBjcHAyX2xleC5sLAorc29hcGNwcDJfeWFjYy55LCBlcnJvcjIuaCwgZXJyb3IyLmMsIHN5bWJvbDIuYywgaW5pdDIuYywgc29hcGRvYzIuaHRtbCwgYW5kCitzb2FwZG9jMi5wZGYsIGh0dHBnZXQuaCwgaHR0cGdldC5jLCBzdGwuaCwgc3RsZGVxdWUuaCwgc3RsbGlzdC5oLCBzdGx2ZWN0b3IuaCwKK3N0bHNldC5oLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJvYmVydCBBLiB2YW4gRW5nZWxlbi4gUG9ydGlvbnMKK2NyZWF0ZWQgYnkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBSb2JlcnQgQS4gdmFuCitFbmdlbGVuLCBHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOgorIl9fX19fX19fX19fX19fX19fX19fX19fXy4iCitbTm90ZTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmb3JtIHRoZSB0ZXh0IG9mIHRoZQorbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIGNvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZQorZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCitFWEhJQklUIEIuCisKKyJQYXJ0IG9mIHRoZSBzb2Z0d2FyZSBlbWJlZGRlZCBpbiB0aGlzIHByb2R1Y3QgaXMgZ1NPQVAgc29mdHdhcmUuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IGdTT0FQIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4sCitHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgR0VOSVZJQSBJTkMgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCitPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iCisKKworCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xLjNiIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMS4zYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM5NDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMS4zYgpAQCAtMCwwICsxLDE1NyBAQAorCitnU09BUCBQdWJsaWMgTGljZW5zZQorCitWZXJzaW9uIDEuM2IKKworVGhlIGdTT0FQIHB1YmxpYyBsaWNlbnNlIGlzIGRlcml2ZWQgZnJvbSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAoTVBMMS4xKS4gVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBkZWxldGVkIGZyb20gdGhlIG9yaWdpbmFsIE1QTDEuMSB0ZXh0IGFyZSAxLjAuMSwgMi4xLihjKSwoZCksIDIuMi4oYyksKGQpLCA4LjIuKGIpLCAxMCwgYW5kIDExLiBTZWN0aW9uIDMuOCB3YXMgYWRkZWQuIFRoZSBtb2RpZmllZCBzZWN0aW9ucyBhcmUgMi4xLihiKSwgMi4yLihiKSwgMy4yIChzaW1wbGlmaWVkKSwgMy41IChkZWxldGVkIHRoZSBsYXN0IHNlbnRlbmNlKSwgYW5kIDMuNiAoc2ltcGxpZmllZCkuCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgZ1NPQVAgc29mdHdhcmUgcGFja2FnZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBzb2FwY3BwMiBhbmQgd3NkbDJoIHNvdXJjZSBjb2RlIGxvY2F0ZWQgaW4gZ3NvYXAvc3JjIGFuZCBnc29hcC93c2RsLCBhbGwgY29kZSBnZW5lcmF0ZWQgYnkgc29hcGNwcDIgYW5kIHdzZGwyaCwgdGhlIFVEREkgc291cmNlIGNvZGUgZ3NvYXAvdWRkaTIsIGFuZCB0aGUgV2ViIHNlcnZlciBzYW1wbGUgc291cmNlIGNvZGUgc2FtcGxlcy93ZWJzZXJ2ZXIuIFRvIHVzZSBhbnkgb2YgdGhlc2Ugc29mdHdhcmUgdG9vbHMgYW5kIGNvbXBvbmVudHMgY29tbWVyY2lhbGx5LCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyByZXF1aXJlZCBhbmQgY2FuIGJlIG9idGFpbmVkIGZyb20gd3d3Lmdlbml2aWEuY29tLgorMSAgREVGSU5JVElPTlMuCisKKzEuMC4xLgorMS4xLiAiQ29udHJpYnV0b3IiCittZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIgorbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorMS4zLiAiQ292ZXJlZCBDb2RlIgorbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUuICJFeGVjdXRhYmxlIgorbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYuICJJbml0aWFsIERldmVsb3BlciIKK21lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOC4gIkxpY2Vuc2UiCittZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEuICJMaWNlbnNhYmxlIgorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBLgorQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuCitBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKzEuMTAuICJPcmlnaW5hbCBDb2RlIgorbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiCittZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyICBTT1VSQ0UgQ09ERSBMSUNFTlNFLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKQordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBhbnkgY29tYmluYXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZi4KKyhjKQorKGQpCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlLCB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisoYykKKyhkKQorMyAgRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LiAKKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gY3JlYXRlZCBieSBZb3Ugd2lsbCBiZSBwcm92aWRlZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gU291cmNlIENvZGUgZm9ybSBhbmQgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiAKKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuIAorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiAKKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIElmIHlvdSBkaXN0cmlidXRlIGV4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbmluZyBDb3ZlcmVkIENvZGUgYXMgcGFydCBvZiBhIHByb2R1Y3QsIHlvdSBtdXN0IHJlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuIAorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLiAKKworMy44LiBSZXN0cmljdGlvbnMuCisKK1lvdSBtYXkgbm90IHJlbW92ZSBhbnkgcHJvZHVjdCBpZGVudGlmaWNhdGlvbiwgY29weXJpZ2h0LCBwcm9wcmlldGFyeSBub3RpY2VzIG9yIGxhYmVscyBmcm9tIGdTT0FQLgorNCAgSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorNSAgQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorNiAgVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorCitHcmFudG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UuIAorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCisKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2UgImdTT0FQIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCis3ICBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTLCBBTkQgQU5ZIFdBUlJBTlRZIFRIQVQgTUFZIEFSSVNFIEJZIFJFQVNPTiBPRiBUUkFERSBVU0FHRSwgQ1VTVE9NLCBPUiBDT1VSU0UgT0YgREVBTElORy4gV0lUSE9VVCBMSU1JVElORyBUSEUgRk9SRUdPSU5HLCBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhBVCBUSEUgQVVUSE9SUyBETyBOT1QgV0FSUkFOVCBUSEUgU09GVFdBUkUgV0lMTCBSVU4gVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFLiBMSU1JVEVEIExJQUJJTElUWSBUSEUgRU5USVJFIFJJU0sgQVMgVE8gUkVTVUxUUyBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIElTIEFTU1VNRUQgQlkgWU9VLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIEVYRU1QTEFSWSBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgT1IgTkFUVVJFIFdIQVRTT0VWRVIsIFdIRVRIRVIgQkFTRUQgT04gQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9OIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRSBPUiBJRiBTVUNIIERBTUFHRSBDT1VMRCBIQVZFIEJFRU4gUkVBU09OQUJMWSBGT1JFU0VFTiwgQU5EIE5PVFdJVEhTVEFORElORyBBTlkgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgRVhDTFVTSVZFIFJFTUVEWSBQUk9WSURFRC4gU1VDSCBMSU1JVEFUSU9OIE9OIERBTUFHRVMgSU5DTFVERVMsIEJVVCBJUyBOT1QgTElNSVRFRCBUTywgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgTE9TVCBQUk9GSVRTLCBMT1NTIE9GIERBVEEgT1IgU09GVFdBUkUsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04gT1IgSU1QQUlSTUVOVCBPRiBPVEhFUiBHT09EUy4gSU4gTk8gRVZFTlQgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIFRIRSBDT1NUUyBPRiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIFNPRlRXQVJFIE9SIFNFUlZJQ0VTLiBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSElTIFNPRlRXQVJFIElTIE5PVCBERVNJR05FRCBGT1IgVVNFIElOIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgU1VDSCBBUyBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTlRST0wsIE9SIExJRkUtQ1JJVElDQUwgQVBQTElDQVRJT05TLiBUSEUgQVVUSE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQU5ZIExJQUJJTElUWSBSRVNVTFRJTkcgRlJPTSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgQU5EIEFDQ0VQVFMgTk8gTElBQklMSVRZIElOIFJFU1BFQ1QgT0YgQU5ZIEFDVElPTlMgT1IgQ0xBSU1TIEJBU0VEIE9OIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgQlkgWU9VLiBGT1IgUFVSUE9TRVMgT0YgVEhJUyBQQVJBR1JBUEgsIFRIRSBURVJNICJMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OIiBNRUFOUyBBTiBBUFBMSUNBVElPTiBJTiBXSElDSCBUSEUgRlVOQ1RJT05JTkcgT1IgTUFMRlVOQ1RJT05JTkcgT0YgVEhFIFNPRlRXQVJFIE1BWSBSRVNVTFQgRElSRUNUTFkgT1IgSU5ESVJFQ1RMWSBJTiBQSFlTSUNBTCBJTkpVUlkgT1IgTE9TUyBPRiBIVU1BTiBMSUZFLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorOCAgVEVSTUlOQVRJT04uCisKKzguMS4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMi4KKzguMy4KK0lmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCis4LjQuCitJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCis5ICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorMTAgIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKzExICBNSVNDRUxMQU5FT1VTLgorCisxMiAgUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorRVhISUJJVCBBLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZ1NPQVAgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL3d3dy5jcy5mc3UuZWR1LyBlbmdlbGVuL3NvYXBsaWNlbnNlLmh0bWwKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgb2YgdGhlIGdTT0FQIFNvZnR3YXJlIGlzOiBzdGRzb2FwLmgsIHN0ZHNvYXAyLmgsIHN0ZHNvYXAuYywgc3Rkc29hcDIuYywgc3Rkc29hcC5jcHAsIHN0ZHNvYXAyLmNwcCwgc29hcGNwcDIuaCwgc29hcGNwcDIuYywgc29hcGNwcDJfbGV4LmwsIHNvYXBjcHAyX3lhY2MueSwgZXJyb3IyLmgsIGVycm9yMi5jLCBzeW1ib2wyLmMsIGluaXQyLmMsIHNvYXBkb2MyLmh0bWwsIGFuZCBzb2FwZG9jMi5wZGYsIGh0dHBnZXQuaCwgaHR0cGdldC5jLCBzdGwuaCwgc3RsZGVxdWUuaCwgc3RsbGlzdC5oLCBzdGx2ZWN0b3IuaCwgc3Rsc2V0LmguCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJvYmVydCBBLiB2YW4gRW5nZWxlbiBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLCBHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOgorIl9fX19fX19fX19fX19fX19fX19fX19fXy4iCitbTm90ZTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmb3JtIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgY29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCitFWEhJQklUIEIuCisKKyJQYXJ0IG9mIHRoZSBzb2Z0d2FyZSBlbWJlZGRlZCBpbiB0aGlzIHByb2R1Y3QgaXMgZ1NPQVAgc29mdHdhcmUuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IGdTT0FQIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4sIEdlbml2aWEgaW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorVEhFIFNPRlRXQVJFIElOIFRISVMgUFJPRFVDVCBXQVMgSU4gUEFSVCBQUk9WSURFRCBCWSBHRU5JVklBIElOQyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDQ5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy90Y2wKQEAgLTAsMCArMSw0MCBAQAorVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBieSB0aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZgorQ2FsaWZvcm5pYSwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgU2NyaXB0aWNzIENvcnBvcmF0aW9uLCBBY3RpdmVTdGF0ZQorQ29ycG9yYXRpb24gYW5kIG90aGVyIHBhcnRpZXMuICBUaGUgZm9sbG93aW5nIHRlcm1zIGFwcGx5IHRvIGFsbCBmaWxlcworYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2Z0d2FyZSB1bmxlc3MgZXhwbGljaXRseSBkaXNjbGFpbWVkIGluCitpbmRpdmlkdWFsIGZpbGVzLgorCitUaGUgYXV0aG9ycyBoZXJlYnkgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwKK2FuZCBsaWNlbnNlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQKK3RoYXQgZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgdGhpcworbm90aWNlIGlzIGluY2x1ZGVkIHZlcmJhdGltIGluIGFueSBkaXN0cmlidXRpb25zLiBObyB3cml0dGVuIGFncmVlbWVudCwKK2xpY2Vuc2UsIG9yIHJveWFsdHkgZmVlIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIGF1dGhvcml6ZWQgdXNlcy4KK01vZGlmaWNhdGlvbnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycworYW5kIG5lZWQgbm90IGZvbGxvdyB0aGUgbGljZW5zaW5nIHRlcm1zIGRlc2NyaWJlZCBoZXJlLCBwcm92aWRlZCB0aGF0Cit0aGUgbmV3IHRlcm1zIGFyZSBjbGVhcmx5IGluZGljYXRlZCBvbiB0aGUgZmlyc3QgcGFnZSBvZiBlYWNoIGZpbGUgd2hlcmUKK3RoZXkgYXBwbHkuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIERJU1RSSUJVVE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZCitGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCitBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIElUUyBET0NVTUVOVEFUSU9OLCBPUiBBTlkKK0RFUklWQVRJVkVTIFRIRVJFT0YsIEVWRU4gSUYgVEhFIEFVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuICBUSElTIFNPRlRXQVJFCitJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBIQVZFCitOTyBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IKK01PRElGSUNBVElPTlMuCisKK0dPVkVSTk1FTlQgVVNFOiBJZiB5b3UgYXJlIGFjcXVpcmluZyB0aGlzIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUKK1UuUy4gZ292ZXJubWVudCwgdGhlIEdvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5ICJSZXN0cmljdGVkIFJpZ2h0cyIKK2luIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFzIGRlZmluZWQgaW4gdGhlIEZlZGVyYWwKK0FjcXVpc2l0aW9uIFJlZ3VsYXRpb25zIChGQVJzKSBpbiBDbGF1c2UgNTIuMjI3LjE5IChjKSAoMikuICBJZiB5b3UKK2FyZSBhY3F1aXJpbmcgdGhlIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlLCB0aGUKK3NvZnR3YXJlIHNoYWxsIGJlIGNsYXNzaWZpZWQgYXMgIkNvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUiIGFuZCB0aGUKK0dvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5ICJSZXN0cmljdGVkIFJpZ2h0cyIgYXMgZGVmaW5lZCBpbiBDbGF1c2UKKzI1Mi4yMjctNzAxNCAoYikgKDMpIG9mIERGQVJzLiAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHRoZQorYXV0aG9ycyBncmFudCB0aGUgVS5TLiBHb3Zlcm5tZW50IGFuZCBvdGhlcnMgYWN0aW5nIGluIGl0cyBiZWhhbGYKK3Blcm1pc3Npb24gdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCit0ZXJtcyBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdW5mczMgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy91bmZzMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJiNTNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdW5mczMKQEAgLTAsMCArMSwyNCBAQAorVU5GUzMgdXNlci1zcGFjZSBORlN2MyBzZXJ2ZXIKKyhDKSAyMDAzLCBQYXNjYWwgU2NobWlkdCA8dW5mczMtc2VydmVyQGV3ZXRlbC5uZXQ+CisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKK1dBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CitPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQgYi9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWMxODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0CkBAIC0wLDAgKzEsOCBAQAorRmlsZXMgaW4gdGhlIGRlcGxveSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgcmUtY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGlmIHlvdQorZGVsZXRlIHRoZW0uIElmIHlvdSBkbyBkZWxldGUgYSBmaWxlLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1bjoKKworICBiaXRiYWtlIC1jIGNsZWFuIFRBUkdFVAorICBiaXRiYWtlIFRBUkdFVAorCit3aGVyZSBUQVJHRVQgaXMgdGhlIG5hbWUgb2YgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2Ugb3IgdGFyZ2V0IGUuZy4KKyJ2aXJ0dWFsL2tlcm5lbCIgZm9yIHRoZSBrZXJuZWwsIGFuIGltYWdlLCBldGMuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCBiL21ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODkxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dApAQCAtMCwwICsxLDM1IEBACisjPHBhdGg+CTx0eXBlPiA8bW9kZT4JPHVpZD4JPGdpZD4JPG1ham9yPgk8bWlub3I+CTxzdGFydD4JPGluYz4JPGNvdW50PgorIy9kZXYvbWVtICAgIGMgICAgICA2NDAgICAgICAwICAgICAgIDAgICAgICAgMSAgICAgICAxICAgICAgIDAgICAgICAgIDAgICAgICAgIC0KKyMKKyN0eXBlIGNhbiBiZSBvbmUgb2Y6IAorIyAgICBmCUEgcmVndWxhciBmaWxlCisjICAgIGQJRGlyZWN0b3J5CisjICAgIGMJQ2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGUKKyMgICAgYglCbG9jayBzcGVjaWFsIGRldmljZSBmaWxlCisjICAgIHAJRmlmbyAobmFtZWQgcGlwZSkKKworL2RldgkJZAk3NTUJcm9vdAlyb290CS0JLQktCS0JLQorL2Rldi9jb25zb2xlCWMJNjYyCXJvb3QJdHR5CTUJMQktCS0JLQorL2Rldi9mYjAJYwk2MDAJcm9vdAlyb290CTI5CTAJLQktCS0KKy9kZXYvaGRhCWIJNjYwCXJvb3QJZGlzawkzCTAJLQktCS0KKy9kZXYvaGRhCWIJNjYwCXJvb3QJZGlzawkzCTEJMQkxCTQKKy9kZXYva21lbQljCTY0MAlyb290CWttZW0JMQkyCS0JLQktCisvZGV2L2ttc2cJYwk2MDAJcm9vdAlyb290CTEJMTEJLQktCS0KKy9kZXYvbWVtCWMJNjQwCXJvb3QJa21lbQkxCTEJLQktCS0KKy9kZXYvbW1jYmxrMAliCTY2MAlyb290CWRpc2sJMTc5CTAJLQktCS0KKy9kZXYvbW1jYmxrMHAJYgk2NjAJcm9vdAlkaXNrCTE3OQkxCTEJMQk0CisvZGV2L210ZAljCTY2MAlyb290CWRpc2sJOTAJMAkwCTIJOAorL2Rldi9tdGRibG9jawliCTY0MAlyb290CXJvb3QJMzEJMAkwCTEJOAorL2Rldi9udWxsCWMJNjY2CXJvb3QJcm9vdAkxCTMJLQktCS0KKy9kZXYvcmFtCWIJNjQwCXJvb3QJcm9vdAkxCTAJMAkxCTQKKy9kZXYvcmFuZG9tCWMJNjQ0CXJvb3QJcm9vdAkxCTgJLQktCS0KKy9kZXYvcnRjCWMJNjQ0CXJvb3QJcm9vdAkyNTQJMAkwCTEJMgorL2Rldi9zZGEJYgk2NjAJcm9vdAlkaXNrCTgJMAktCS0JLQorL2Rldi9zZGEJYgk2NjAJcm9vdAlkaXNrCTgJMQkxCTEJNAorL2Rldi9zZGIJYgk2NjAJcm9vdAlkaXNrCTgJMTYJLQktCS0KKy9kZXYvc2RiCWIJNjYwCXJvb3QJZGlzawk4CTE3CTEJMQk0CisvZGV2L3R0eQljCTY2Mglyb290CXR0eQk1CTAJLQktCS0KKy9kZXYvdHR5CWMJNjY2CXJvb3QJdHR5CTQJMAkwCTEJOAorL2Rldi90dHlTCWMJNjQwCXJvb3QJdHR5CTQJNjQJMAkxCTIKKy9kZXYvdXJhbmRvbQljCTY0NAlyb290CXJvb3QJMQk5CS0JLQktCisvZGV2L3plcm8JYwk2NDQJcm9vdAlyb290CTEJNQktCS0JLQpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9mcy1wZXJtcy50eHQgYi9tZXRhL2ZpbGVzL2ZzLXBlcm1zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDljYmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9mcy1wZXJtcy50eHQKQEAgLTAsMCArMSw2NyBAQAorIyBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIGtub3duIHBlcm1pc3Npb25zLgorIyBJdCBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdpbmcgY2xhc3MgdG8gZW5zdXJlIHRoYXQgdGhlIHBlcm1pc3Npb25zLCBvd25lcnMgYW5kCisjIGdyb3VwIG9mIGxpc3RlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlIGluIHN5bmMgYWNyb3NzIHRoZSBzeXN0ZW0uCisjCisjIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIAorIworIzxwYXRoPgk8bW9kZT4JPHVpZD4JPGdpZD4JPHdhbGs+CTxmbW9kZT4JPGZ1aWQ+CTxmZ2lkPgorIworIyBvcgorIworIzxwYXRoPiBsaW5rIDx0YXJnZXQ+CisjCisjIDxwYXRoPjogZGlyZWN0b3J5IHBhdGgKKyMgPG1vZGU+OiBtb2RlIGZvciBkaXJlY3RvcnkKKyMgPHVpZD46ICB1aWQgZm9yIGRpcmVjdG9yeQorIyA8Z2lkPjogIGdpZCBmb3IgZGlyZWN0b3J5CisjIDx3YWxrPjogcmVjdXJzaXZlbHkgd2FsayB0aGUgZGlyZWN0b3J5PyAgdHJ1ZSBvciBmYWxzZQorIyA8Zm1vZGU+OiBpZiB3YWxraW5nLCBuZXcgbW9kZSBmb3IgZmlsZXMKKyMgPGZ1aWQ+OiAgaWYgd2Fsa2luZywgbmV3IHVpZCBmb3IgZmlsZXMKKyMgPGZnaWQ+OiAgaWYgd2Fsa2luZywgbmV3IGdpZCBmb3IgZmlsZXMKKyMgPHRhcmdldD46IHR1cm4gdGhlIGRpcmVjdG9yeSBpbnRvIGEgc3ltbGluayBwb2ludCB0byB0YXJnZXQKKyMKKyMgaW4gbW9kZSwgdWlkIG9yIGdpZCwgYSAiLSIgbWVhbnMgZG9uJ3QgY2hhbmdlIGFueSBleGlzdGluZyB2YWx1ZXMKKyMKKyMgL3Vzci9zcmMJCTA3NTUJcm9vdAlyb290CWZhbHNlCS0JLQktCisjIC91c3Ivc2hhcmUvbWFuCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKworIyBOb3RlOiBhbGwgc3RhbmRhcmQgY29uZmlnIGRpcmVjdG9yaWVzIGFyZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkICIwNzU1IHJvb3Qgcm9vdCBmYWxzZSAtIC0gLSIKKworIyBEb2N1bWVudGF0aW9uIHNob3VsZCBhbHdheXMgYmUgY29ycmVjdGVkCiske21hbmRpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7aW5mb2Rpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7ZG9jZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtkYXRhZGlyfS9ndGstZG9jCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKworIyBGaXh1cCBsb2NhbGVzCiske2RhdGFkaXJ9L2xvY2FsZQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgQ2xlYW51cCBoZWFkZXJzCiske2luY2x1ZGVkaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske29sZGluY2x1ZGVkaXJ9CTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKworIyBDbGVhbnVwIGRlYnVnIHNyYworL3Vzci9zcmMvZGVidWcJCTA3NTUJcm9vdAlyb290CXRydWUJLQlyb290CXJvb3QKKworIyBJdGVtcyBmcm9tIGJhc2UtZmlsZXMKKyMgTGlua3MKKyR7bG9jYWxzdGF0ZWRpcn0vcnVuCWxpbmsJL3J1bgorJHtsb2NhbHN0YXRlZGlyfS9sb2cJbGluawl2b2xhdGlsZS9sb2cKKyR7bG9jYWxzdGF0ZWRpcn0vbG9jawlsaW5rCS9ydW4vbG9jaworJHtsb2NhbHN0YXRlZGlyfS90bXAJbGluawl2b2xhdGlsZS90bXAKKworL2hvbWUJCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKy9zcnYJCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7cHJlZml4fS9zcmMJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorJHtsb2NhbHN0YXRlZGlyfS9sb2NhbAkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKworIyBTcGVjaWFsIHBlcm1pc3Npb25zIGZyb20gYmFzZS1maWxlcworIyBTZXQgMTc3NworL3RtcAkJCQkwMTc3Nwlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvdG1wCTAxNzc3CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNldCA3NTUtbHNiCisvc3J2CQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisKKyMgU2V0IDI3NzUtbHNiCisvdmFyL21haWwJCQkwMjc3NQlyb290CW1haWwJZmFsc2UgLSAtIC0KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaCBiL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDBhNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1leHRyYWN0LnNoCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vYmFzaAorCitJTlNUX0FSQ0g9JCh1bmFtZSAtbSB8IHNlZCAtZSAicy9pWzMtNl04Ni9peDg2LyIgLWUgInMveDg2Wy1fXTY0L3g4Nl82NC8iKQorU0RLX0FSQ0g9JChlY2hvIEBTREtfQVJDSEAgfCBzZWQgLWUgInMvaVszLTZdODYvaXg4Ni8iIC1lICJzL3g4NlstX102NC94ODZfNjQvIikKKwordmVybHRlICgpIHsKKwlbICAiJDEiID0gImBwcmludGYgIiQxXG4kMiIgfCBzb3J0IC1WIHwgaGVhZCAtbjFgIiBdCit9CisKK3Zlcmx0KCkgeworCVsgIiQxIiA9ICIkMiIgXSAmJiByZXR1cm4gMSB8fCB2ZXJsdGUgJDEgJDIKK30KKwordmVybHQgYHVuYW1lIC1yYCBAT0xERVNUX0tFUk5FTEAKK2lmIFsgJD8gPSAwIF07IHRoZW4KKwllY2hvICJFcnJvcjogVGhlIFNESyBuZWVkcyBhIGtlcm5lbCA+IEBPTERFU1RfS0VSTkVMQCIKKwlleGl0IDEKK2ZpCisKK2lmIFsgIiRJTlNUX0FSQ0giICE9ICIkU0RLX0FSQ0giIF07IHRoZW4KKwkjIEFsbG93IGZvciBpbnN0YWxsYXRpb24gb2YgaXg4NiBTREsgb24geDg2XzY0IGhvc3QKKwlpZiBbICIkSU5TVF9BUkNIIiAhPSB4ODZfNjQgLW8gIiRTREtfQVJDSCIgIT0gaXg4NiBdOyB0aGVuCisJCWVjaG8gIkVycm9yOiBJbnN0YWxsYXRpb24gbWFjaGluZSBub3Qgc3VwcG9ydGVkISIKKwkJZXhpdCAxCisJZmkKK2ZpCisKK0RFRkFVTFRfSU5TVEFMTF9ESVI9IkBTREtQQVRIQCIKK1NVRE9fRVhFQz0iIgordGFyZ2V0X3Nka19kaXI9IiIKK2Fuc3dlcj0iIgorcmVsb2NhdGU9MQorc2F2ZXNjcmlwdHM9MAordmVyYm9zZT0wCit3aGlsZSBnZXRvcHRzICI6eWQ6bkRSUyIgT1BUOyBkbworCWNhc2UgJE9QVCBpbgorCXkpCisJCWFuc3dlcj0iWSIKKwkJOzsKKwlkKQorCQl0YXJnZXRfc2RrX2Rpcj0kT1BUQVJHCisJCTs7CisJbikKKwkJcHJlcGFyZV9idWlsZHN5c3RlbT0ibm8iCisJCTs7CisJRCkKKwkJdmVyYm9zZT0xCisJCTs7CisJUikKKwkJcmVsb2NhdGU9MAorCQlzYXZlc2NyaXB0cz0xCisJCTs7CisJUykKKwkJc2F2ZXNjcmlwdHM9MQorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAkKGJhc2VuYW1lICQwKSBbLXldIFstZCA8ZGlyPl0iCisJCWVjaG8gIiAgLXkgICAgICAgICBBdXRvbWF0aWMgeWVzIHRvIGFsbCBwcm9tcHRzIgorCQllY2hvICIgIC1kIDxkaXI+ICAgSW5zdGFsbCB0aGUgU0RLIHRvIDxkaXI+IgorCQllY2hvICI9PT09PT09PSBFeHRlbnNpYmxlIFNESyBvbmx5IG9wdGlvbnMgPT09PT09PT09PT09IgorCQllY2hvICIgIC1uICAgICAgICAgRG8gbm90IHByZXBhcmUgdGhlIGJ1aWxkIHN5c3RlbSIKKwkJZWNobyAiPT09PT09PT0gQWR2YW5jZWQgREVCVUdHSU5HIE9OTFkgT1BUSU9OUyA9PT09PT09PSIKKwkJZWNobyAiICAtUyAgICAgICAgIFNhdmUgcmVsb2NhdGlvbiBzY3JpcHRzIgorCQllY2hvICIgIC1SICAgICAgICAgRG8gbm90IHJlbG9jYXRlIGV4ZWN1dGFibGVzIgorCQllY2hvICIgIC1EICAgICAgICAgdXNlIHNldCAteCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiIKKwkJZXhpdCAxCisJCTs7CisJZXNhYworZG9uZQorCitlY2hvICJAU0RLX1RJVExFQCBpbnN0YWxsZXIgdmVyc2lvbiBAU0RLX1ZFUlNJT05AIgorZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisKK2lmIFsgJHZlcmJvc2UgPSAxIF0gOyB0aGVuCisJc2V0IC14CitmaQorCitAU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRACisKKyMgU0RLX0VYVEVOU0lCTEUgaXMgZXhwb3NlZCBmcm9tIHRoZSBTREtfUFJFX0lOU1RBTExfQ09NTUFORCBhYm92ZQoraWYgWyAiJFNES19FWFRFTlNJQkxFIiA9ICIxIiBdOyB0aGVuCisJREVGQVVMVF9JTlNUQUxMX0RJUj0iQFNES0VYVFBBVEhAIgorZmkKKworaWYgWyAiJHRhcmdldF9zZGtfZGlyIiA9ICIiIF07IHRoZW4KKwlpZiBbICIkYW5zd2VyIiA9ICJZIiBdOyB0aGVuCisJCXRhcmdldF9zZGtfZGlyPSIkREVGQVVMVF9JTlNUQUxMX0RJUiIKKwllbHNlCisJCXJlYWQgLWUgLXAgIkVudGVyIHRhcmdldCBkaXJlY3RvcnkgZm9yIFNESyAoZGVmYXVsdDogJERFRkFVTFRfSU5TVEFMTF9ESVIpOiAiIHRhcmdldF9zZGtfZGlyCisJCVsgIiR0YXJnZXRfc2RrX2RpciIgPSAiIiBdICYmIHRhcmdldF9zZGtfZGlyPSRERUZBVUxUX0lOU1RBTExfRElSCisJZmkKK2ZpCisKK2V2YWwgdGFyZ2V0X3Nka19kaXI9JChlY2hvICIkdGFyZ2V0X3Nka19kaXIifHNlZCAncy8gL1xcIC9nJykKK2lmIFsgLWQgIiR0YXJnZXRfc2RrX2RpciIgXTsgdGhlbgorCXRhcmdldF9zZGtfZGlyPSQoY2QgIiR0YXJnZXRfc2RrX2RpciI7IHB3ZCkKK2Vsc2UKKwl0YXJnZXRfc2RrX2Rpcj0kKHJlYWRsaW5rIC1tICIkdGFyZ2V0X3Nka19kaXIiKQorZmkKKworaWYgWyAiJFNES19FWFRFTlNJQkxFIiA9ICIxIiBdOyB0aGVuCisJIyBXZSdyZSBnb2luZyB0byBiZSBydW5uaW5nIHRoZSBidWlsZCBzeXN0ZW0sIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGFwcGx5CisJaWYgZWNobyAiJHRhcmdldF9zZGtfZGlyIiB8IGdyZXAgLXEgJ1srXCBAXSc7IHRoZW4KKwkJZWNobyAiVGhlIHRhcmdldCBkaXJlY3RvcnkgcGF0aCAoJHRhcmdldF9zZGtfZGlyKSBjb250YWlucyBpbGxlZ2FsIiBcCisJCSAgICAgImNoYXJhY3RlcnMgc3VjaCBhcyBzcGFjZXMsIEAgb3IgKy4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorZWxzZQorCWlmIFsgLW4gIiQoZWNobyAkdGFyZ2V0X3Nka19kaXJ8Z3JlcCAnICcpIiBdOyB0aGVuCisJCWVjaG8gIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHBhdGggKCR0YXJnZXRfc2RrX2RpcikgY29udGFpbnMgc3BhY2VzLiBBYm9ydCEiCisJCWV4aXQgMQorCWZpCitmaQorCitpZiBbIC1lICIkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtQFJFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVNAIiBdOyB0aGVuCisJZWNobyAiVGhlIGRpcmVjdG9yeSBcIiR0YXJnZXRfc2RrX2RpclwiIGFscmVhZHkgY29udGFpbnMgYSBTREsgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiIKKwlwcmludGYgIklmIHlvdSBjb250aW51ZSwgZXhpc3RpbmcgZmlsZXMgd2lsbCBiZSBvdmVyd3JpdHRlbiEgUHJvY2VlZFt5L05dPyAiCisKKwlkZWZhdWx0X2Fuc3dlcj0ibiIKK2Vsc2UKKwlwcmludGYgIllvdSBhcmUgYWJvdXQgdG8gaW5zdGFsbCB0aGUgU0RLIHRvIFwiJHRhcmdldF9zZGtfZGlyXCIuIFByb2NlZWRbWS9uXT8gIgorCisJZGVmYXVsdF9hbnN3ZXI9InkiCitmaQorCitpZiBbICIkYW5zd2VyIiA9ICIiIF07IHRoZW4KKwlyZWFkIGFuc3dlcgorCVsgIiRhbnN3ZXIiID0gIiIgXSAmJiBhbnN3ZXI9IiRkZWZhdWx0X2Fuc3dlciIKK2Vsc2UKKwllY2hvICRhbnN3ZXIKK2ZpCisKK2lmIFsgIiRhbnN3ZXIiICE9ICJZIiAtYSAiJGFuc3dlciIgIT0gInkiIF07IHRoZW4KKwllY2hvICJJbnN0YWxsYXRpb24gYWJvcnRlZCEiCisJZXhpdCAxCitmaQorCisjIFRyeSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSAodGhpcyB3aWxsIG5vdCBzdWNjZWVkIGlmIHVzZXIgZG9lc24ndCBoYXZlIHJpZ2h0cykKK21rZGlyIC1wICR0YXJnZXRfc2RrX2RpciA+L2Rldi9udWxsIDI+JjEKKworIyBpZiBkb24ndCBoYXZlIHRoZSByaWdodCB0byBhY2Nlc3MgZGlyLCBnYWluIGJ5IHN1ZG8gCitpZiBbICEgLXggJHRhcmdldF9zZGtfZGlyIC1vICEgLXcgJHRhcmdldF9zZGtfZGlyIC1vICEgLXIgJHRhcmdldF9zZGtfZGlyIF07IHRoZW4gCisJaWYgWyAiJFNES19FWFRFTlNJQkxFIiA9ICIxIiBdOyB0aGVuCisJCWVjaG8gIlVuYWJsZSB0byBhY2Nlc3MgXCIkdGFyZ2V0X3Nka19kaXJcIiwgd2lsbCBub3QgYXR0ZW1wdCB0byB1c2UiIFwKKwkJICAgICAic3VkbyBhcyBhcyBleHRlbnNpYmxlIFNESyBjYW5ub3QgYmUgdXNlZCBhcyByb290LiIKKwkJZXhpdCAxCisJZmkKKworCVNVRE9fRVhFQz0kKHdoaWNoICJzdWRvIikKKwlpZiBbIC16ICRTVURPX0VYRUMgXTsgdGhlbgorCQllY2hvICJObyBjb21tYW5kICdzdWRvJyBmb3VuZCwgcGxlYXNlIGluc3RhbGwgc3VkbyBmaXJzdC4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorCisJIyB0ZXN0IHN1ZG8gY291bGQgZ2FpbiByb290IHJpZ2h0CisJJFNVRE9fRVhFQyBwd2QgPi9kZXYvbnVsbCAyPiYxCisJWyAkPyAtbmUgMCBdICYmIGVjaG8gIlNvcnJ5LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGV4ZWN1dGUgYXMgcm9vdC4iICYmIGV4aXQgMQorCisJIyBub3cgdGhhdCB3ZSBoYXZlIHN1ZG8gcmlnaHRzLCBjcmVhdGUgdGhlIGRpcmVjdG9yeQorCSRTVURPX0VYRUMgbWtkaXIgLXAgJHRhcmdldF9zZGtfZGlyID4vZGV2L251bGwgMj4mMQorZmkKKworcGF5bG9hZF9vZmZzZXQ9JCgoJChncmVwIC1uYSAtbTEgIl5NQVJLRVI6JCIgJDB8Y3V0IC1kJzonIC1mMSkgKyAxKSkKKworcHJpbnRmICJFeHRyYWN0aW5nIFNESy4uLiIKK3RhaWwgLW4gKyRwYXlsb2FkX29mZnNldCAkMHwgJFNVRE9fRVhFQyB0YXIgeGogLUMgJHRhcmdldF9zZGtfZGlyCitlY2hvICJkb25lIgorCitwcmludGYgIlNldHRpbmcgaXQgdXAuLi4iCisjIGZpeCBlbnZpcm9ubWVudCBwYXRocworZm9yIGVudl9zZXR1cF9zY3JpcHQgaW4gYGxzICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cC0qYDsgZG8KKwkkU1VET19FWEVDIHNlZCAtZSAiczpAU0RLUEFUSEA6JHRhcmdldF9zZGtfZGlyOmciIC1pICRlbnZfc2V0dXBfc2NyaXB0Citkb25lCisKK0BTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRACisKKyMgZGVsZXRlIHRoZSByZWxvY2F0aW5nIHNjcmlwdCwgc28gdGhhdCB1c2VyIGlzIGZvcmNlZCB0byByZS1ydW4gdGhlIGluc3RhbGxlcgorIyBpZiBoZS9zaGUgd2FudHMgYW5vdGhlciBsb2NhdGlvbiBmb3IgdGhlIHNkaworaWYgWyAkc2F2ZXNjcmlwdHMgPSAwIF0gOyB0aGVuCisJJFNVRE9fRVhFQyBybSAtZiAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5weSAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5zaAorZmkKKworZWNobyAiU0RLIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdXAgYW5kIGlzIHJlYWR5IHRvIGJlIHVzZWQuIgorZWNobyAiRWFjaCB0aW1lIHlvdSB3aXNoIHRvIHVzZSB0aGUgU0RLIGluIGEgbmV3IHNoZWxsIHNlc3Npb24sIHlvdSBuZWVkIHRvIHNvdXJjZSB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGUuZy4iCitlY2hvICIgXCQgLiAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtQFJFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVNAIgorCitleGl0IDAKKworTUFSS0VSOgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCBiL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiOGUxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2gKQEAgLTAsMCArMSw1MCBAQAorIyBmaXggZHluYW1pYyBsb2FkZXIgcGF0aHMgaW4gYWxsIEVMRiBTREsgYmluYXJpZXMKK25hdGl2ZV9zeXNyb290PSQoJFNVRE9fRVhFQyBjYXQgJGVudl9zZXR1cF9zY3JpcHQgfGdyZXAgJ09FQ09SRV9OQVRJVkVfU1lTUk9PVD0nfGN1dCAtZCc9JyAtZjJ8dHIgLWQgJyInKQorZGxfcGF0aD0kKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QvbGliIC1uYW1lICJsZC1saW51eCoiKQoraWYgWyAiJGRsX3BhdGgiID0gIiIgXSA7IHRoZW4KKwllY2hvICJTREsgY291bGQgbm90IGJlIHNldCB1cC4gUmVsb2NhdGUgc2NyaXB0IHVuYWJsZSB0byBmaW5kIGxkLWxpbnV4LnNvLiBBYm9ydCEiCisJZXhpdCAxCitmaQorZXhlY3V0YWJsZV9maWxlcz0kKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QgLXR5cGUgZiBcCisJXCggLXBlcm0gLTAxMDAgLW8gLXBlcm0gLTAwMTAgLW8gLXBlcm0gLTAwMDEgXCkgLXByaW50ZiAiJyVoLyVmJyAiKQorCit0ZGlyPWBta3RlbXAgLWRgCitpZiBbIHgkdGRpciA9IHggXSA7IHRoZW4KKyAgIGVjaG8gIlNESyByZWxvY2F0ZSBmYWlsZWQsIGNvdWxkIG5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IgorICAgZXhpdCAxCitmaQorZWNobyAiIyEvYmluL2Jhc2giID4gJHRkaXIvcmVsb2NhdGVfc2RrLnNoCitlY2hvIGV4ZWMgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsucHkgJHRhcmdldF9zZGtfZGlyICRkbF9wYXRoICRleGVjdXRhYmxlX2ZpbGVzID4+ICR0ZGlyL3JlbG9jYXRlX3Nkay5zaAorJFNVRE9fRVhFQyBtdiAkdGRpci9yZWxvY2F0ZV9zZGsuc2ggJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKKyRTVURPX0VYRUMgY2htb2QgNzU1ICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCitybSAtcmYgJHRkaXIKK2lmIFsgJHJlbG9jYXRlID0gMSBdIDsgdGhlbgorCSRTVURPX0VYRUMgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJZWNobyAiU0RLIGNvdWxkIG5vdCBiZSBzZXQgdXAuIFJlbG9jYXRlIHNjcmlwdCBmYWlsZWQuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKK2ZpCisKKyMgcmVwbGFjZSBAU0RLUEFUSEAgd2l0aCB0aGUgbmV3IHByZWZpeCBpbiBhbGwgdGV4dCBmaWxlczogY29uZmlncy9zY3JpcHRzL2V0YworZm9yIHJlcGxhY2UgaW4gIiR0YXJnZXRfc2RrX2RpciAtbWF4ZGVwdGggMSIgIiRuYXRpdmVfc3lzcm9vdCI7IGRvCisJJFNVRE9fRVhFQyBmaW5kICRyZXBsYWNlIC10eXBlIGYgLWV4ZWMgZmlsZSAne30nIFw7IHwgXAorCQlncmVwICI6LipcKEFTQ0lJXHxzY3JpcHRcfHNvdXJjZVwpLip0ZXh0IiB8IFwKKwkJYXdrIC1GJzonICd7cHJpbnRmICJcIiVzXCJcbiIsICQxfScgfCBcCisJCWdyZXAgLXYgIiR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cC0qIiB8IFwKKwkJJFNVRE9fRVhFQyB4YXJncyAtbjMyIHNlZCAtaSAtZSAiczokREVGQVVMVF9JTlNUQUxMX0RJUjokdGFyZ2V0X3Nka19kaXI6ZyIKK2RvbmUKKworIyBjaGFuZ2UgYWxsIHN5bWxpbmtzIHBvaW50aW5nIHRvIEBTREtQQVRIQAorZm9yIGwgaW4gJCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290IC10eXBlIGwpOyBkbworCSRTVURPX0VYRUMgbG4gLXNmbiAkKHJlYWRsaW5rICRsfCRTVURPX0VYRUMgc2VkIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRElSOiR0YXJnZXRfc2RrX2RpcjoiKSAkbAorZG9uZQorCisjIGZpbmQgb3V0IGFsbCBwZXJsIHNjcmlwdHMgaW4gJG5hdGl2ZV9zeXNyb290IGFuZCBtb2RpZnkgdGhlbSByZXBsYWNpbmcgdGhlCisjIGhvc3QgcGVybCB3aXRoIFNESyBwZXJsLgorZm9yIHBlcmxfc2NyaXB0IGluICQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdCAtdHlwZSBmIC1leGVjIGdyZXAgLWwgIl4jIS4qcGVybCIgJ3t9JyBcOyk7IGRvCisJJFNVRE9fRVhFQyBzZWQgLWkgLWUgInM6XiMhICovdXNyL2Jpbi9wZXJsLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6ZyIgLWUgXAorCQkiczogL3Vzci9iaW4vcGVybDogL3Vzci9iaW4vZW52IHBlcmw6ZyIgJHBlcmxfc2NyaXB0Citkb25lCisKK2VjaG8gZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5NTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvX19pbml0X18ucHkKQEAgLTAsMCArMSwyIEBACitmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weSBiL21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk1Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnB5CkBAIC0wLDAgKzEsNDU2IEBACisjIFJlcG9ydCBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiB0aGUgYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnkgc2luY2UgYSBzcGVjaWZpYyByZXZpc2lvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgTm90ZTogcmVxdWlyZXMgR2l0UHl0aG9uIDAuMy4xKworIworIyBZb3UgY2FuIHVzZSB0aGlzIGZyb20gdGhlIGNvbW1hbmQgbGluZSBieSBydW5uaW5nIHNjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYKKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgZ2l0CitpbXBvcnQgcmUKK2ltcG9ydCBiYi51dGlscworCisKKyMgSG93IHRvIGRpc3BsYXkgZmllbGRzCitsaXN0X2ZpZWxkcyA9IFsnREVQRU5EUycsICdSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ0ZJTEVTJywgJ0ZJTEVMSVNUJywgJ1VTRVJfQ0xBU1NFUycsICdJTUFHRV9DTEFTU0VTJywgJ0lNQUdFX0ZFQVRVUkVTJywgJ0lNQUdFX0xJTkdVQVMnLCAnSU1BR0VfSU5TVEFMTCcsICdCQURfUkVDT01NRU5EQVRJT05TJywgJ1BBQ0tBR0VfRVhDTFVERSddCitsaXN0X29yZGVyX2ZpZWxkcyA9IFsnUEFDS0FHRVMnXQorZGVmYXVsdHZhbF9tYXAgPSB7J1BLRyc6ICdQS0cnLCAnUEtHRSc6ICdQRScsICdQS0dWJzogJ1BWJywgJ1BLR1InOiAnUFInfQorbnVtZXJpY19maWVsZHMgPSBbJ1BLR1NJWkUnLCAnSU1BR0VTSVpFJ10KKyMgRmllbGRzIHRvIG1vbml0b3IKK21vbml0b3JfZmllbGRzID0gWydSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnLCAnUEFDS0FHRVMnLCAnRklMRUxJU1QnLCAnUEtHU0laRScsICdJTUFHRVNJWkUnLCAnUEtHJ10KK3Zlcl9tb25pdG9yX2ZpZWxkcyA9IFsnUEtHRScsICdQS0dWJywgJ1BLR1InXQorIyBQZXJjZW50YWdlIGNoYW5nZSB0byBhbGVydCBmb3IgbnVtZXJpYyBmaWVsZHMKK21vbml0b3JfbnVtZXJpY190aHJlc2hvbGQgPSAxMAorIyBJbWFnZSBmaWxlcyB0byBtb25pdG9yIChub3RlIHRoYXQgaW1hZ2UtaW5mby50eHQgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5KQoraW1nX21vbml0b3JfZmlsZXMgPSBbJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCcsICdmaWxlcy1pbi1pbWFnZS50eHQnXQorIyBSZWxhdGVkIGNvbnRleHQgZmllbGRzIGZvciByZXBvcnRpbmcgKG5vdGU6IFBFLCBQViAmIFBSIGFyZSBhbHdheXMgcmVwb3J0ZWQgZm9yIG1vbml0b3JlZCBwYWNrYWdlIGZpZWxkcykKK3JlbGF0ZWRfZmllbGRzID0ge30KK3JlbGF0ZWRfZmllbGRzWydSREVQRU5EUyddID0gWydERVBFTkRTJ10KK3JlbGF0ZWRfZmllbGRzWydSUkVDT01NRU5EUyddID0gWydERVBFTkRTJ10KK3JlbGF0ZWRfZmllbGRzWydGSUxFTElTVCddID0gWydGSUxFUyddCityZWxhdGVkX2ZpZWxkc1snUEtHU0laRSddID0gWydGSUxFTElTVCddCityZWxhdGVkX2ZpZWxkc1snZmlsZXMtaW4taW1hZ2UudHh0J10gPSBbJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCcsICdVU0VSX0NMQVNTRVMnLCAnSU1BR0VfQ0xBU1NFUycsICdST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsICdJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJ10KK3JlbGF0ZWRfZmllbGRzWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnXSA9IFsnSU1BR0VfRkVBVFVSRVMnLCAnSU1BR0VfTElOR1VBUycsICdJTUFHRV9JTlNUQUxMJywgJ0JBRF9SRUNPTU1FTkRBVElPTlMnLCAnTk9fUkVDT01NRU5EQVRJT05TJywgJ1BBQ0tBR0VfRVhDTFVERSddCisKKworY2xhc3MgQ2hhbmdlUmVjb3JkOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBmaWVsZG5hbWUsIG9sZHZhbHVlLCBuZXd2YWx1ZSwgbW9uaXRvcmVkKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmZpZWxkbmFtZSA9IGZpZWxkbmFtZQorICAgICAgICBzZWxmLm9sZHZhbHVlID0gb2xkdmFsdWUKKyAgICAgICAgc2VsZi5uZXd2YWx1ZSA9IG5ld3ZhbHVlCisgICAgICAgIHNlbGYubW9uaXRvcmVkID0gbW9uaXRvcmVkCisgICAgICAgIHNlbGYucmVsYXRlZCA9IFtdCisgICAgICAgIHNlbGYuZmlsZWNoYW5nZXMgPSBOb25lCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0cl9pbnRlcm5hbChUcnVlKQorCisgICAgZGVmIF9zdHJfaW50ZXJuYWwoc2VsZiwgb3V0ZXIpOgorICAgICAgICBpZiBvdXRlcjoKKyAgICAgICAgICAgIGlmICcvaW1hZ2UtZmlsZXMvJyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAgcHJlZml4ID0gJyVzOiAnICUgc2VsZi5wYXRoLnNwbGl0KCcvaW1hZ2UtZmlsZXMvJylbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJlZml4ID0gJyVzOiAnICUgc2VsZi5wYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXggPSAnJworCisgICAgICAgIGRlZiBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyKToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSBbXQorICAgICAgICAgICAgZm9yIGssdiBpbiBkZXB2ZXIuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgdjoKKyAgICAgICAgICAgICAgICAgICAgcGtnbGlzdC5hcHBlbmQoIiVzICglcykiICUgKGssdikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGtnbGlzdC5hcHBlbmQoaykKKyAgICAgICAgICAgIHJldHVybiBwa2dsaXN0CisKKyAgICAgICAgaWYgc2VsZi5maWVsZG5hbWUgaW4gbGlzdF9maWVsZHMgb3Igc2VsZi5maWVsZG5hbWUgaW4gbGlzdF9vcmRlcl9maWVsZHM6CisgICAgICAgICAgICBpZiBzZWxmLmZpZWxkbmFtZSBpbiBbJ1JQUk9WSURFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnXToKKyAgICAgICAgICAgICAgICAoZGVwdmVyYSwgZGVwdmVyYikgPSBjb21wYXJlX3BrZ19saXN0cyhzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICAgICAgICAgIGFpdGVtcyA9IHBrZ2xpc3RfY29tYmluZShkZXB2ZXJhKQorICAgICAgICAgICAgICAgIGJpdGVtcyA9IHBrZ2xpc3RfY29tYmluZShkZXB2ZXJiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhaXRlbXMgPSBzZWxmLm9sZHZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBiaXRlbXMgPSBzZWxmLm5ld3ZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgIHJlbW92ZWQgPSBsaXN0KHNldChhaXRlbXMpIC0gc2V0KGJpdGVtcykpCisgICAgICAgICAgICBhZGRlZCA9IGxpc3Qoc2V0KGJpdGVtcykgLSBzZXQoYWl0ZW1zKSkKKworICAgICAgICAgICAgaWYgcmVtb3ZlZCBvciBhZGRlZDoKKyAgICAgICAgICAgICAgICBpZiByZW1vdmVkIGFuZCBub3QgYml0ZW1zOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSAnJXM6IHJlbW92ZWQgYWxsIGl0ZW1zICIlcyInICUgKHNlbGYuZmllbGRuYW1lLCAnICcuam9pbihyZW1vdmVkKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSAnJXM6JXMlcycgJSAoc2VsZi5maWVsZG5hbWUsICcgcmVtb3ZlZCAiJXMiJyAlICcgJy5qb2luKHJlbW92ZWQpIGlmIHJlbW92ZWQgZWxzZSAnJywgJyBhZGRlZCAiJXMiJyAlICcgJy5qb2luKGFkZGVkKSBpZiBhZGRlZCBlbHNlICcnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZCBvcmRlcicgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIG51bWVyaWNfZmllbGRzOgorICAgICAgICAgICAgYXZhbCA9IGludChzZWxmLm9sZHZhbHVlIG9yIDApCisgICAgICAgICAgICBidmFsID0gaW50KHNlbGYubmV3dmFsdWUgb3IgMCkKKyAgICAgICAgICAgIGlmIGF2YWwgIT0gMDoKKyAgICAgICAgICAgICAgICBwZXJjZW50Y2hnID0gKChidmFsIC0gYXZhbCkgLyBmbG9hdChhdmFsKSkgKiAxMDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9IDEwMAorICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyAoJXMlZCUlKScgJSAoc2VsZi5maWVsZG5hbWUsIHNlbGYub2xkdmFsdWUgb3IgIicnIiwgc2VsZi5uZXd2YWx1ZSBvciAiJyciLCAnKycgaWYgcGVyY2VudGNoZyA+IDAgZWxzZSAnJywgcGVyY2VudGNoZykKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBkZWZhdWx0dmFsX21hcDoKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMnICUgKHNlbGYuZmllbGRuYW1lLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICAgICAgaWYgc2VsZi5maWVsZG5hbWUgPT0gJ1BLRycgYW5kICdbZGVmYXVsdF0nIGluIHNlbGYubmV3dmFsdWU6CisgICAgICAgICAgICAgICAgb3V0ICs9ICcgLSBtYXkgaW5kaWNhdGUgZGViaWFuIHJlbmFtaW5nIGZhaWx1cmUnCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gWydwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nXToKKyAgICAgICAgICAgIGlmIHNlbGYub2xkdmFsdWUgYW5kIHNlbGYubmV3dmFsdWU6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQ6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgZWxpZiBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBhZGRlZDpcbiAgJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBlbGlmIHNlbGYub2xkdmFsdWU6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGNsZWFyZWQ6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgYWxpbmVzID0gc2VsZi5vbGR2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIGJsaW5lcyA9IHNlbGYubmV3dmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoYWxpbmVzLCBibGluZXMsIHNlbGYuZmllbGRuYW1lLCBzZWxmLmZpZWxkbmFtZSwgbGluZXRlcm09JycpCisgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4obGlzdChkaWZmKVsyOl0pCisgICAgICAgICAgICBvdXQgKz0gJ1xuICAtLScKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBpbWdfbW9uaXRvcl9maWxlcyBvciAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgZmllbGRuYW1lID0gc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGlmICcvaW1hZ2UtZmlsZXMvJyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAgZmllbGRuYW1lID0gb3MucGF0aC5qb2luKCcvJyArIHNlbGYucGF0aC5zcGxpdCgnL2ltYWdlLWZpbGVzLycpWzFdLCBzZWxmLmZpZWxkbmFtZSkKKyAgICAgICAgICAgICAgICBvdXQgPSAnQ2hhbmdlcyB0byAlczpcbiAgJyAlIGZpZWxkbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvdXRlcjoKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gJ0NoYW5nZXMgdG8gJXMgJyAlIHNlbGYucGF0aAorICAgICAgICAgICAgICAgIG91dCA9ICcoJXMpOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGlmIHNlbGYuZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgJy5qb2luKFsnJXMnICUgaSBmb3IgaSBpbiBzZWxmLmZpbGVjaGFuZ2VzXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWxpbmVzID0gc2VsZi5vbGR2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBibGluZXMgPSBzZWxmLm5ld3ZhbHVlLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgIGRpZmYgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihhbGluZXMsIGJsaW5lcywgZmllbGRuYW1lLCBmaWVsZG5hbWUsIGxpbmV0ZXJtPScnKQorICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICcuam9pbihsaXN0KGRpZmYpKQorICAgICAgICAgICAgICAgIG91dCArPSAnXG4gIC0tJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgZnJvbSAiJXMiIHRvICIlcyInICUgKHNlbGYuZmllbGRuYW1lLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorCisgICAgICAgIGlmIHNlbGYucmVsYXRlZDoKKyAgICAgICAgICAgIGZvciBjaGcgaW4gc2VsZi5yZWxhdGVkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRlciBhbmQgY2hnLmZpZWxkbmFtZSBpbiBbJ1BFJywgJ1BWJywgJ1BSJ106CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY2hnLl9zdHJfaW50ZXJuYWwoRmFsc2UpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgKiAlcycgJSBsaW5lCisKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChwcmVmaXgsIG91dCkKKworY2xhc3MgRmlsZUNoYW5nZToKKyAgICBjaGFuZ2V0eXBlX2FkZCA9ICdBJworICAgIGNoYW5nZXR5cGVfcmVtb3ZlID0gJ1InCisgICAgY2hhbmdldHlwZV90eXBlID0gJ1QnCisgICAgY2hhbmdldHlwZV9wZXJtcyA9ICdQJworICAgIGNoYW5nZXR5cGVfb3duZXJncm91cCA9ICdPJworICAgIGNoYW5nZXR5cGVfbGluayA9ICdMJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGNoYW5nZXR5cGUsIG9sZHZhbHVlID0gTm9uZSwgbmV3dmFsdWUgPSBOb25lKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmNoYW5nZXR5cGUgPSBjaGFuZ2V0eXBlCisgICAgICAgIHNlbGYub2xkdmFsdWUgPSBvbGR2YWx1ZQorICAgICAgICBzZWxmLm5ld3ZhbHVlID0gbmV3dmFsdWUKKworICAgIGRlZiBfZnR5cGVfc3RyKHNlbGYsIGZ0eXBlKToKKyAgICAgICAgaWYgZnR5cGUgPT0gJy0nOgorICAgICAgICAgICAgcmV0dXJuICdmaWxlJworICAgICAgICBlbGlmIGZ0eXBlID09ICdkJzoKKyAgICAgICAgICAgIHJldHVybiAnZGlyZWN0b3J5JworICAgICAgICBlbGlmIGZ0eXBlID09ICdsJzoKKyAgICAgICAgICAgIHJldHVybiAnc3ltbGluaycKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnYyc6CisgICAgICAgICAgICByZXR1cm4gJ2NoYXIgZGV2aWNlJworICAgICAgICBlbGlmIGZ0eXBlID09ICdiJzoKKyAgICAgICAgICAgIHJldHVybiAnYmxvY2sgZGV2aWNlJworICAgICAgICBlbGlmIGZ0eXBlID09ICdwJzoKKyAgICAgICAgICAgIHJldHVybiAnZmlmbycKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAncyc6CisgICAgICAgICAgICByZXR1cm4gJ3NvY2tldCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAndW5rbm93biAoJXMpJyAlIGZ0eXBlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9hZGQ6CisgICAgICAgICAgICByZXR1cm4gJyVzIHdhcyBhZGRlZCcgJSBzZWxmLnBhdGgKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX3JlbW92ZToKKyAgICAgICAgICAgIHJldHVybiAnJXMgd2FzIHJlbW92ZWQnICUgc2VsZi5wYXRoCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV90eXBlOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIHR5cGUgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLl9mdHlwZV9zdHIoc2VsZi5vbGR2YWx1ZSksIHNlbGYuX2Z0eXBlX3N0cihzZWxmLm5ld3ZhbHVlKSkKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX3Blcm1zOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIHBlcm1pc3Npb25zIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX293bmVyZ3JvdXA6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgb3duZXIvZ3JvdXAgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfbGluazoKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCBzeW1saW5rIHRhcmdldCBmcm9tICVzIHRvICVzJyAlIChzZWxmLnBhdGgsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgKHVua25vd24pJyAlIHNlbGYucGF0aAorCisKK2RlZiBibG9iX3RvX2RpY3QoYmxvYik6CisgICAgYWxpbmVzID0gYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgYWRpY3QgPSB7fQorICAgIGZvciBsaW5lIGluIGFsaW5lczoKKyAgICAgICAgc3BsaXR2ID0gW2kuc3RyaXAoKSBmb3IgaSBpbiBsaW5lLnNwbGl0KCc9JywxKV0KKyAgICAgICAgaWYgbGVuKHNwbGl0dikgPiAxOgorICAgICAgICAgICAgYWRpY3Rbc3BsaXR2WzBdXSA9IHNwbGl0dlsxXQorICAgIHJldHVybiBhZGljdAorCisKK2RlZiBmaWxlX2xpc3RfdG9fZGljdChsaW5lcyk6CisgICAgYWRpY3QgPSB7fQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAjIExlYXZlIHRoZSBsYXN0IGZldyBmaWVsZHMgaW50YWN0IHNvIHdlIGhhbmRsZSBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgc3BhY2VzCisgICAgICAgIHNwbGl0diA9IGxpbmUuc3BsaXQoTm9uZSw0KQorICAgICAgICAjIEdyYWIgdGhlIHBhdGggYW5kIHJlbW92ZSB0aGUgbGVhZGluZyAuCisgICAgICAgIHBhdGggPSBzcGxpdHZbNF1bMTpdLnN0cmlwKCkKKyAgICAgICAgIyBIYW5kbGUgc3ltbGlua3MKKyAgICAgICAgaWYoJyAtPiAnIGluIHBhdGgpOgorICAgICAgICAgICAgdGFyZ2V0ID0gcGF0aC5zcGxpdCgnIC0+ICcpWzFdCisgICAgICAgICAgICBwYXRoID0gcGF0aC5zcGxpdCgnIC0+ICcpWzBdCisgICAgICAgICAgICBhZGljdFtwYXRoXSA9IHNwbGl0dlswOjNdICsgW3RhcmdldF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkaWN0W3BhdGhdID0gc3BsaXR2WzA6M10KKyAgICByZXR1cm4gYWRpY3QKKworCitkZWYgY29tcGFyZV9maWxlX2xpc3RzKGFsaW5lcywgYmxpbmVzKToKKyAgICBhZGljdCA9IGZpbGVfbGlzdF90b19kaWN0KGFsaW5lcykKKyAgICBiZGljdCA9IGZpbGVfbGlzdF90b19kaWN0KGJsaW5lcykKKyAgICBmaWxlY2hhbmdlcyA9IFtdCisgICAgZm9yIHBhdGgsIHNwbGl0diBpbiBhZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgbmV3c3BsaXR2ID0gYmRpY3QucG9wKHBhdGgsIE5vbmUpCisgICAgICAgIGlmIG5ld3NwbGl0djoKKyAgICAgICAgICAgICMgQ2hlY2sgdHlwZQorICAgICAgICAgICAgb2xkdmFsdWUgPSBzcGxpdHZbMF1bMF0KKyAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3c3BsaXR2WzBdWzBdCisgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfdHlwZSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgICMgQ2hlY2sgcGVybWlzc2lvbnMKKyAgICAgICAgICAgIG9sZHZhbHVlID0gc3BsaXR2WzBdWzE6XQorICAgICAgICAgICAgbmV3dmFsdWUgPSBuZXdzcGxpdHZbMF1bMTpdCisgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfcGVybXMsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIG93bmVyL2dyb3VwCisgICAgICAgICAgICBvbGR2YWx1ZSA9ICclcy8lcycgJSAoc3BsaXR2WzFdLCBzcGxpdHZbMl0pCisgICAgICAgICAgICBuZXd2YWx1ZSA9ICclcy8lcycgJSAobmV3c3BsaXR2WzFdLCBuZXdzcGxpdHZbMl0pCisgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfb3duZXJncm91cCwgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgICMgQ2hlY2sgc3ltbGluayB0YXJnZXQKKyAgICAgICAgICAgIGlmIG5ld3NwbGl0dlswXVswXSA9PSAnbCc6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0dikgPiAzOgorICAgICAgICAgICAgICAgICAgICBvbGR2YWx1ZSA9IHNwbGl0dlszXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9sZHZhbHVlID0gTm9uZQorICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3c3BsaXR2WzNdCisgICAgICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9saW5rLCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3JlbW92ZSkpCisKKyAgICAjIFdoYXRldmVyIGlzIGxlZnQgb3ZlciBoYXMgYmVlbiBhZGRlZAorICAgIGZvciBwYXRoIGluIGJkaWN0OgorICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfYWRkKSkKKworICAgIHJldHVybiBmaWxlY2hhbmdlcworCisKK2RlZiBjb21wYXJlX2xpc3RzKGFsaW5lcywgYmxpbmVzKToKKyAgICByZW1vdmVkID0gbGlzdChzZXQoYWxpbmVzKSAtIHNldChibGluZXMpKQorICAgIGFkZGVkID0gbGlzdChzZXQoYmxpbmVzKSAtIHNldChhbGluZXMpKQorCisgICAgZmlsZWNoYW5nZXMgPSBbXQorICAgIGZvciBwa2cgaW4gcmVtb3ZlZDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGtnLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfcmVtb3ZlKSkKKyAgICBmb3IgcGtnIGluIGFkZGVkOgorICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwa2csIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9hZGQpKQorCisgICAgcmV0dXJuIGZpbGVjaGFuZ2VzCisKKworZGVmIGNvbXBhcmVfcGtnX2xpc3RzKGFzdHIsIGJzdHIpOgorICAgIGRlcHZlcmEgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoYXN0cikKKyAgICBkZXB2ZXJiID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGJzdHIpCisKKyAgICAjIFN0cmlwIG91dCBjaGFuZ2VzIHdoZXJlIHRoZSB2ZXJzaW9uIGhhcyBpbmNyZWFzZWQKKyAgICByZW1vdmUgPSBbXQorICAgIGZvciBrIGluIGRlcHZlcmE6CisgICAgICAgIGlmIGsgaW4gZGVwdmVyYjoKKyAgICAgICAgICAgIGR2YSA9IGRlcHZlcmFba10KKyAgICAgICAgICAgIGR2YiA9IGRlcHZlcmJba10KKyAgICAgICAgICAgIGlmIGR2YSBhbmQgZHZiIGFuZCBsZW4oZHZhKSA9PSBsZW4oZHZiKToKKyAgICAgICAgICAgICAgICAjIFNpbmNlIGxlbmd0aCBpcyB0aGUgc2FtZSwgc29ydCBzbyB0aGF0IHByZWZpeGVzIChlLmcuID49KSB3aWxsIGxpbmUgdXAKKyAgICAgICAgICAgICAgICBkdmEuc29ydCgpCisgICAgICAgICAgICAgICAgZHZiLnNvcnQoKQorICAgICAgICAgICAgICAgIHJlbW92ZWl0ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBkdmFpLCBkdmJpIGluIHppcChkdmEsIGR2Yik6CisgICAgICAgICAgICAgICAgICAgIGlmIGR2YWkgIT0gZHZiaToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFpcHJlZml4ID0gZHZhaS5zcGxpdCgnICcpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBiaXByZWZpeCA9IGR2Ymkuc3BsaXQoJyAnKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWlwcmVmaXggPT0gYmlwcmVmaXggYW5kIGFpcHJlZml4IGluIFsnPj0nLCAnPSddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJiLnV0aWxzLnZlcmNtcChiYi51dGlscy5zcGxpdF92ZXJzaW9uKGR2YWkpLCBiYi51dGlscy5zcGxpdF92ZXJzaW9uKGR2YmkpKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlaXQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlaXQ6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZS5hcHBlbmQoaykKKworICAgIGZvciBrIGluIHJlbW92ZToKKyAgICAgICAgZGVwdmVyYS5wb3AoaykKKyAgICAgICAgZGVwdmVyYi5wb3AoaykKKworICAgIHJldHVybiAoZGVwdmVyYSwgZGVwdmVyYikKKworCitkZWYgY29tcGFyZV9kaWN0X2Jsb2JzKHBhdGgsIGFibG9iLCBiYmxvYiwgcmVwb3J0X2FsbCwgcmVwb3J0X3Zlcik6CisgICAgYWRpY3QgPSBibG9iX3RvX2RpY3QoYWJsb2IpCisgICAgYmRpY3QgPSBibG9iX3RvX2RpY3QoYmJsb2IpCisKKyAgICBwa2duYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQorCisgICAgZGVmYXVsdHZhbHMgPSB7fQorICAgIGRlZmF1bHR2YWxzWydQS0cnXSA9IHBrZ25hbWUKKyAgICBkZWZhdWx0dmFsc1snUEtHRSddID0gJzAnCisKKyAgICBjaGFuZ2VzID0gW10KKyAgICBrZXlzID0gbGlzdChzZXQoYWRpY3Qua2V5cygpKSB8IHNldChiZGljdC5rZXlzKCkpIHwgc2V0KGRlZmF1bHR2YWxfbWFwLmtleXMoKSkpCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICBhc3RyID0gYWRpY3QuZ2V0KGtleSwgJycpCisgICAgICAgIGJzdHIgPSBiZGljdC5nZXQoa2V5LCAnJykKKyAgICAgICAgaWYga2V5IGluIHZlcl9tb25pdG9yX2ZpZWxkczoKKyAgICAgICAgICAgIG1vbml0b3JlZCA9IHJlcG9ydF92ZXIgb3IgYXN0ciBvciBic3RyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb25pdG9yZWQgPSBrZXkgaW4gbW9uaXRvcl9maWVsZHMKKyAgICAgICAgbWFwcGVkX2tleSA9IGRlZmF1bHR2YWxfbWFwLmdldChrZXksICcnKQorICAgICAgICBpZiBtYXBwZWRfa2V5OgorICAgICAgICAgICAgaWYgbm90IGFzdHI6CisgICAgICAgICAgICAgICAgYXN0ciA9ICclcyBbZGVmYXVsdF0nICUgYWRpY3QuZ2V0KG1hcHBlZF9rZXksIGRlZmF1bHR2YWxzLmdldChrZXksICcnKSkKKyAgICAgICAgICAgIGlmIG5vdCBic3RyOgorICAgICAgICAgICAgICAgIGJzdHIgPSAnJXMgW2RlZmF1bHRdJyAlIGJkaWN0LmdldChtYXBwZWRfa2V5LCBkZWZhdWx0dmFscy5nZXQoa2V5LCAnJykpCisKKyAgICAgICAgaWYgYXN0ciAhPSBic3RyOgorICAgICAgICAgICAgaWYgKG5vdCByZXBvcnRfYWxsKSBhbmQga2V5IGluIG51bWVyaWNfZmllbGRzOgorICAgICAgICAgICAgICAgIGF2YWwgPSBpbnQoYXN0ciBvciAwKQorICAgICAgICAgICAgICAgIGJ2YWwgPSBpbnQoYnN0ciBvciAwKQorICAgICAgICAgICAgICAgIGlmIGF2YWwgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9ICgoYnZhbCAtIGF2YWwpIC8gZmxvYXQoYXZhbCkpICogMTAwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9IDEwMAorICAgICAgICAgICAgICAgIGlmIGFicyhwZXJjZW50Y2hnKSA8IG1vbml0b3JfbnVtZXJpY190aHJlc2hvbGQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIChub3QgcmVwb3J0X2FsbCkgYW5kIGtleSBpbiBsaXN0X2ZpZWxkczoKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gIkZJTEVMSVNUIiBhbmQgcGF0aC5lbmRzd2l0aCgiLWRiZyIpIGFuZCBic3RyLnN0cmlwKCkgIT0gJyc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIFsnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUyddOgorICAgICAgICAgICAgICAgICAgICAoZGVwdmVyYSwgZGVwdmVyYikgPSBjb21wYXJlX3BrZ19saXN0cyhhc3RyLCBic3RyKQorICAgICAgICAgICAgICAgICAgICBpZiBkZXB2ZXJhID09IGRlcHZlcmI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGFsaXN0ID0gYXN0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgYWxpc3Quc29ydCgpCisgICAgICAgICAgICAgICAgYmxpc3QgPSBic3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBibGlzdC5zb3J0KCkKKyAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlbW92YWwgb2Ygc2VsZi1kZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICBpZiBwa2duYW1lIGluIGFsaXN0IGFuZCBub3QgcGtnbmFtZSBpbiBibGlzdDoKKyAgICAgICAgICAgICAgICAgICAgYWxpc3QucmVtb3ZlKHBrZ25hbWUpCisgICAgICAgICAgICAgICAgaWYgJyAnLmpvaW4oYWxpc3QpID09ICcgJy5qb2luKGJsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGtleSwgYXN0ciwgYnN0ciwgbW9uaXRvcmVkKQorICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgIHJldHVybiBjaGFuZ2VzCisKKworZGVmIHByb2Nlc3NfY2hhbmdlcyhyZXBvcGF0aCwgcmV2aXNpb24xLCByZXZpc2lvbjI9J0hFQUQnLCByZXBvcnRfYWxsPUZhbHNlLCByZXBvcnRfdmVyPUZhbHNlKToKKyAgICByZXBvID0gZ2l0LlJlcG8ocmVwb3BhdGgpCisgICAgYXNzZXJ0IHJlcG8uYmFyZSA9PSBGYWxzZQorICAgIGNvbW1pdCA9IHJlcG8uY29tbWl0KHJldmlzaW9uMSkKKyAgICBkaWZmID0gY29tbWl0LmRpZmYocmV2aXNpb24yKQorCisgICAgY2hhbmdlcyA9IFtdCisgICAgZm9yIGQgaW4gZGlmZi5pdGVyX2NoYW5nZV90eXBlKCdNJyk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2xhdGVzdCc6CisgICAgICAgICAgICAgICAgY2hhbmdlcy5leHRlbmQoY29tcGFyZV9kaWN0X2Jsb2JzKHBhdGgsIGQuYV9ibG9iLCBkLmJfYmxvYiwgcmVwb3J0X2FsbCwgcmVwb3J0X3ZlcikpCisgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ2xhdGVzdC4nKToKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICAgICAgZWxpZiBwYXRoLnN0YXJ0c3dpdGgoJ2ltYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgaW4gaW1nX21vbml0b3JfZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2ZpbGVzLWluLWltYWdlLnR4dCc6CisgICAgICAgICAgICAgICAgICAgIGFsaW5lcyA9IGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxpbmVzID0gZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcyA9IGNvbXBhcmVfZmlsZV9saXN0cyhhbGluZXMsYmxpbmVzKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWxlY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgTm9uZSwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5maWxlY2hhbmdlcyA9IGZpbGVjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgICAgICAgICAgZWxpZiBmaWxlbmFtZSA9PSAnaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0JzoKKyAgICAgICAgICAgICAgICAgICAgYWxpbmVzID0gZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBibGluZXMgPSBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzID0gY29tcGFyZV9saXN0cyhhbGluZXMsYmxpbmVzKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWxlY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgTm9uZSwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5maWxlY2hhbmdlcyA9IGZpbGVjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZSA9PSAnaW1hZ2UtaW5mby50eHQnOgorICAgICAgICAgICAgICAgIGNoYW5nZXMuZXh0ZW5kKGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBkLmFfYmxvYiwgZC5iX2Jsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpKQorICAgICAgICAgICAgZWxpZiAnL2ltYWdlLWZpbGVzLycgaW4gcGF0aDoKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKworICAgICMgTG9vayBmb3IgYWRkZWQgcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0KKyAgICAjICh3aXRob3V0IHJlcG9ydGluZyBuZXdseSBhZGRlZCByZWNpcGVzKQorICAgIGFkZGVkcGtncyA9IFtdCisgICAgYWRkZWRjaGFuZ2VzID0gW10KKyAgICBmb3IgZCBpbiBkaWZmLml0ZXJfY2hhbmdlX3R5cGUoJ0EnKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShkLmJfYmxvYi5wYXRoKQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYl9ibG9iLnBhdGgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnbGF0ZXN0JzoKKyAgICAgICAgICAgICAgICBhZGRlZHBrZ3MuYXBwZW5kKHBhdGgpCisgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ2xhdGVzdC4nKToKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWVbNzpdLCAnJywgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgIGFkZGVkY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgIGZvciBjaGcgaW4gYWRkZWRjaGFuZ2VzOgorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBwa2cgaW4gYWRkZWRwa2dzOgorICAgICAgICAgICAgaWYgY2hnLnBhdGguc3RhcnRzd2l0aChwa2cpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKworICAgICMgTG9vayBmb3IgY2xlYXJlZCBwcmVpbnN0L3Bvc3RpbnN0L3ByZXJtL3Bvc3RybQorICAgIGZvciBkIGluIGRpZmYuaXRlcl9jaGFuZ2VfdHlwZSgnRCcpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lICE9ICdsYXRlc3QnIGFuZCBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lWzc6XSwgZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCAnJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExpbmsgcmVsYXRlZCBjaGFuZ2VzCisgICAgZm9yIGNoZyBpbiBjaGFuZ2VzOgorICAgICAgICBpZiBjaGcubW9uaXRvcmVkOgorICAgICAgICAgICAgZm9yIGNoZzIgaW4gY2hhbmdlczoKKyAgICAgICAgICAgICAgICAjIChDaGVjayBkaXJuYW1lIGluIHRoZSBjYXNlIG9mIGZpZWxkcyBmcm9tIHJlY2lwZSBpbmZvIGZpbGVzKQorICAgICAgICAgICAgICAgIGlmIGNoZy5wYXRoID09IGNoZzIucGF0aCBvciBvcy5wYXRoLmRpcm5hbWUoY2hnLnBhdGgpID09IGNoZzIucGF0aDoKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hnMi5maWVsZG5hbWUgaW4gcmVsYXRlZF9maWVsZHMuZ2V0KGNoZy5maWVsZG5hbWUsIFtdKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5yZWxhdGVkLmFwcGVuZChjaGcyKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGNoZy5wYXRoID09IGNoZzIucGF0aCBhbmQgY2hnLnBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJykgYW5kIGNoZzIuZmllbGRuYW1lIGluIFsnUEUnLCAnUFYnLCAnUFInXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5yZWxhdGVkLmFwcGVuZChjaGcyKQorCisgICAgaWYgcmVwb3J0X2FsbDoKKyAgICAgICAgcmV0dXJuIGNoYW5nZXMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gW2NoZyBmb3IgY2hnIGluIGNoYW5nZXMgaWYgY2hnLm1vbml0b3JlZF0KZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2NhY2hlZHBhdGgucHkgYi9tZXRhL2xpYi9vZS9jYWNoZWRwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDBjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9jYWNoZWRwYXRoLnB5CkBAIC0wLDAgKzEsMjMzIEBACisjCisjIEJhc2VkIG9uIHN0YW5kYXJkIHB5dGhvbiBsaWJyYXJ5IGZ1bmN0aW9ucyBidXQgYXZvaWQKKyMgcmVwZWF0ZWQgc3RhdCBjYWxscy4gSXRzIGFzc3VtZWQgdGhlIGZpbGVzIHdpbGwgbm90IGNoYW5nZSBmcm9tIHVuZGVyIHVzCisjIHNvIHdlIGNhbiBjYWNoZSBzdGF0IGNhbGxzLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHN0YXQgYXMgc3RhdG1vZAorCitjbGFzcyBDYWNoZWRQYXRoKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnN0YXRjYWNoZSA9IHt9CisgICAgICAgIHNlbGYubHN0YXRjYWNoZSA9IHt9CisgICAgICAgIHNlbGYubm9ybXBhdGhjYWNoZSA9IHt9CisgICAgICAgIHJldHVybgorCisgICAgZGVmIHVwZGF0ZWNhY2hlKHNlbGYsIHgpOgorICAgICAgICB4ID0gc2VsZi5ub3JtcGF0aCh4KQorICAgICAgICBpZiB4IGluIHNlbGYuc3RhdGNhY2hlOgorICAgICAgICAgICAgZGVsIHNlbGYuc3RhdGNhY2hlW3hdCisgICAgICAgIGlmIHggaW4gc2VsZi5sc3RhdGNhY2hlOgorICAgICAgICAgICAgZGVsIHNlbGYubHN0YXRjYWNoZVt4XQorCisgICAgZGVmIG5vcm1wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoIGluIHNlbGYubm9ybXBhdGhjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5vcm1wYXRoY2FjaGVbcGF0aF0KKyAgICAgICAgbmV3cGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKKyAgICAgICAgc2VsZi5ub3JtcGF0aGNhY2hlW3BhdGhdID0gbmV3cGF0aAorICAgICAgICByZXR1cm4gbmV3cGF0aAorCisgICAgZGVmIF9jYWxsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLnN0YXRjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN0YXRjYWNoZVtwYXRoXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gc3QKKyAgICAgICAgICAgIHJldHVybiBzdAorICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgV2UgbWlnaHQgYXMgd2VsbCBjYWxsIGxzdGF0IGFuZCB0aGVuIG9ubHkgCisgICAgIyBjYWxsIHN0YXQgYXMgd2VsbCBpbiB0aGUgc3ltYm9saWMgbGluayBjYXNlCisgICAgIyBzaW5jZSB0aGlzIHR1cm5zIG91dCB0byBiZSBtdWNoIG1vcmUgb3B0aW1hbAorICAgICMgaW4gcmVhbCB3b3JsZCB1c2FnZSBvZiB0aGlzIGNhY2hlCisgICAgZGVmIGNhbGxzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gc2VsZi5ub3JtcGF0aChwYXRoKQorICAgICAgICBzZWxmLmNhbGxsc3RhdChwYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5zdGF0Y2FjaGVbcGF0aF0KKworICAgIGRlZiBjYWxsbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHBhdGggPSBzZWxmLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5sc3RhdGNhY2hlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubHN0YXRjYWNoZVtwYXRoXQorICAgICAgICAjYmIuZXJyb3IoIkxTdGF0cGF0aDoiICsgcGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbHN0ID0gb3MubHN0YXQocGF0aCkKKyAgICAgICAgICAgIHNlbGYubHN0YXRjYWNoZVtwYXRoXSA9IGxzdAorICAgICAgICAgICAgaWYgbm90IHN0YXRtb2QuU19JU0xOSyhsc3Quc3RfbW9kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0Y2FjaGVbcGF0aF0gPSBsc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbHN0YXQocGF0aCkKKyAgICAgICAgICAgIHJldHVybiBsc3QKKyAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sc3RhdGNhY2hlW3BhdGhdID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBUaGlzIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MsIHNvIGJvdGggaXNsaW5rKCkgYW5kIGlzZGlyKCkgY2FuIGJlIHRydWUKKyAgICAjIGZvciB0aGUgc2FtZSBwYXRoIG9ubyBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBzeW1saW5rcworICAgIGRlZiBpc2ZpbGUoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSByZWd1bGFyIGZpbGUiIiIKKyAgICAgICAgc3QgPSBzZWxmLmNhbGxzdGF0KHBhdGgpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTUkVHKHN0LnN0X21vZGUpCisKKyAgICAjIElzIGEgcGF0aCBhIGRpcmVjdG9yeT8KKyAgICAjIFRoaXMgZm9sbG93cyBzeW1ib2xpYyBsaW5rcywgc28gYm90aCBpc2xpbmsoKSBhbmQgaXNkaXIoKQorICAgICMgY2FuIGJlIHRydWUgZm9yIHRoZSBzYW1lIHBhdGggb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltbGlua3MKKyAgICBkZWYgaXNkaXIoc2VsZiwgcyk6CisgICAgICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiIiIgorICAgICAgICBzdCA9IHNlbGYuY2FsbHN0YXQocykKKyAgICAgICAgaWYgbm90IHN0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzdGF0bW9kLlNfSVNESVIoc3Quc3RfbW9kZSkKKworICAgIGRlZiBpc2xpbmsoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rIiIiCisgICAgICAgIHN0ID0gc2VsZi5jYWxsbHN0YXQocGF0aCkKKyAgICAgICAgaWYgbm90IHN0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzdGF0bW9kLlNfSVNMTksoc3Quc3RfbW9kZSkKKworICAgICMgRG9lcyBhIHBhdGggZXhpc3Q/CisgICAgIyBUaGlzIGlzIGZhbHNlIGZvciBkYW5nbGluZyBzeW1ib2xpYyBsaW5rcyBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGVtLgorICAgIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCisgICAgICAgIGlmIHNlbGYuY2FsbHN0YXQocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBsZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCisgICAgICAgIGlmIHNlbGYuY2FsbGxzdGF0KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbHN0YXQocGF0aCkKKworICAgIGRlZiBsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbGxzdGF0KHBhdGgpCisKKyAgICBkZWYgd2FsayhzZWxmLCB0b3AsIHRvcGRvd249VHJ1ZSwgb25lcnJvcj1Ob25lLCBmb2xsb3dsaW5rcz1GYWxzZSk6CisgICAgICAgICMgTWF0Y2hlcyBvcy53YWxrLCBub3Qgb3MucGF0aC53YWxrKCkKKworICAgICAgICAjIFdlIG1heSBub3QgaGF2ZSByZWFkIHBlcm1pc3Npb24gZm9yIHRvcCwgaW4gd2hpY2ggY2FzZSB3ZSBjYW4ndAorICAgICAgICAjIGdldCBhIGxpc3Qgb2YgdGhlIGZpbGVzIHRoZSBkaXJlY3RvcnkgY29udGFpbnMuICBvcy5wYXRoLndhbGsKKyAgICAgICAgIyBhbHdheXMgc3VwcHJlc3NlZCB0aGUgZXhjZXB0aW9uIHRoZW4sIHJhdGhlciB0aGFuIGJsb3cgdXAgZm9yIGEKKyAgICAgICAgIyBtaW5vciByZWFzb24gd2hlbiAoc2F5KSBhIHRob3VzYW5kIHJlYWRhYmxlIGRpcmVjdG9yaWVzIGFyZSBzdGlsbAorICAgICAgICAjIGxlZnQgdG8gdmlzaXQuICBUaGF0IGxvZ2ljIGlzIGNvcGllZCBoZXJlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIodG9wKQorICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvbmVycm9yKGVycikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRpcnMsIG5vbmRpcnMgPSBbXSwgW10KKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBpZiBzZWxmLmlzZGlyKG9zLnBhdGguam9pbih0b3AsIG5hbWUpKToKKyAgICAgICAgICAgICAgICBkaXJzLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub25kaXJzLmFwcGVuZChuYW1lKQorCisgICAgICAgIGlmIHRvcGRvd246CisgICAgICAgICAgICB5aWVsZCB0b3AsIGRpcnMsIG5vbmRpcnMKKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgIG5ld19wYXRoID0gb3MucGF0aC5qb2luKHRvcCwgbmFtZSkKKyAgICAgICAgICAgIGlmIGZvbGxvd2xpbmtzIG9yIG5vdCBzZWxmLmlzbGluayhuZXdfcGF0aCk6CisgICAgICAgICAgICAgICAgZm9yIHggaW4gc2VsZi53YWxrKG5ld19wYXRoLCB0b3Bkb3duLCBvbmVycm9yLCBmb2xsb3dsaW5rcyk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgaWYgbm90IHRvcGRvd246CisgICAgICAgICAgICB5aWVsZCB0b3AsIGRpcnMsIG5vbmRpcnMKKworICAgICMjIHJlYWxwYXRoKCkgcmVsYXRlZCBmdW5jdGlvbnMKKyAgICBkZWYgX19pc19wYXRoX2JlbG93KHNlbGYsIGZpbGUsIHJvb3QpOgorICAgICAgICByZXR1cm4gKGZpbGUgKyBvcy5wYXRoLnNlcCkuc3RhcnRzd2l0aChyb290KQorCisgICAgZGVmIF9fcmVhbHBhdGhfcmVsKHNlbGYsIHN0YXJ0LCByZWxfcGF0aCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpOgorICAgICAgICAiIiJDYWxjdWxhdGVzIHJlYWwgcGF0aCBvZiBzeW1saW5rICdzdGFydCcgKyAncmVsX3BhdGgnIGJlbG93CisgICAgICAgICdyb290Jzsgbm8gcGFydCBvZiAnc3RhcnQnIGJlbG93ICdyb290JyBtdXN0IGNvbnRhaW4gc3ltbGlua3MuICIiIgorICAgICAgICBoYXZlX2RpciA9IFRydWUKKworICAgICAgICBmb3IgZCBpbiByZWxfcGF0aC5zcGxpdChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICBpZiBub3QgaGF2ZV9kaXIgYW5kIG5vdCBhc3N1bWVfZGlyOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRU5PRU5ULCAibm8gc3VjaCBkaXJlY3RvcnkgJXMiICUgc3RhcnQpCisKKyAgICAgICAgICAgIGlmIGQgPT0gb3MucGF0aC5wYXJkaXI6ICMgJy4uJworICAgICAgICAgICAgICAgIGlmIGxlbihzdGFydCkgPj0gbGVuKHJvb3QpOgorICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBmb2xsb3cgJy4uJyBiZWZvcmUgcm9vdAorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG9zLnBhdGguZGlybmFtZShzdGFydCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGVtaXQgd2FybmluZz8KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAoc3RhcnQsIGhhdmVfZGlyKSA9IHNlbGYuX19yZWFscGF0aChvcy5wYXRoLmpvaW4oc3RhcnQsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorCisgICAgICAgICAgICBhc3NlcnQoc2VsZi5fX2lzX3BhdGhfYmVsb3coc3RhcnQsIHJvb3QpKQorCisgICAgICAgIHJldHVybiBzdGFydAorCisgICAgZGVmIF9fcmVhbHBhdGgoc2VsZiwgZmlsZSwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpOgorICAgICAgICB3aGlsZSBzZWxmLmlzbGluayhmaWxlKSBhbmQgbGVuKGZpbGUpID49IGxlbihyb290KToKKyAgICAgICAgICAgIGlmIGxvb3BfY250ID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTE9PUCwgZmlsZSkKKworICAgICAgICAgICAgbG9vcF9jbnQgLT0gMQorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5yZWFkbGluayhmaWxlKSkKKyAgICAKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICAgICAgICAgICAgICAgdGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKQorICAgICAgICAgICAgICAgIGFzc2VydChzZWxmLl9faXNfcGF0aF9iZWxvdyh0ZGlyLCByb290KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGRpciA9IHJvb3QKKworICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19yZWFscGF0aF9yZWwodGRpciwgdGFyZ2V0LCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpc19kaXIgPSBzZWxmLmlzZGlyKGZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGlzX2RpciA9IEZhbHNlCisKKyAgICAgICAgcmV0dXJuIChmaWxlLCBpc19kaXIpCisKKyAgICBkZWYgcmVhbHBhdGgoc2VsZiwgZmlsZSwgcm9vdCwgdXNlX3BoeXNkaXIgPSBUcnVlLCBsb29wX2NudCA9IDEwMCwgYXNzdW1lX2RpciA9IEZhbHNlKToKKyAgICAgICAgIiIiIFJldHVybnMgdGhlIGNhbm9uaWNhbCBwYXRoIG9mICdmaWxlJyB3aXRoIGFzc3VtaW5nIGEKKyAgICAgICAgdG9wbGV2ZWwgJ3Jvb3QnIGRpcmVjdG9yeS4gV2hlbiAndXNlX3BoeXNkaXInIGlzIHNldCwgYWxsCisgICAgICAgIHByZWNlZGluZyBwYXRoIGNvbXBvbmVudHMgb2YgJ2ZpbGUnIHdpbGwgYmUgcmVzb2x2ZWQgZmlyc3Q7CisgICAgICAgIHRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IHVubGVzcyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlcmUgaXMKKyAgICAgICAgbm8gc3ltbGluayBpbiB0aGUgcGF0aC4gV2hlbiAnYXNzdW1lX2RpcicgaXMgbm90IHNldCwgbWlzc2luZworICAgICAgICBwYXRoIGNvbXBvbmVudHMgd2lsbCByYWlzZSBhbiBFTk9FTlQgZXJyb3IiIiIKKworICAgICAgICByb290ID0gb3MucGF0aC5ub3JtcGF0aChyb290KQorICAgICAgICBmaWxlID0gb3MucGF0aC5ub3JtcGF0aChmaWxlKQorCisgICAgICAgIGlmIG5vdCByb290LmVuZHN3aXRoKG9zLnBhdGguc2VwKToKKyAgICAgICAgICAgICMgbGV0dGluZyByb290IGVuZCB3aXRoICcvJyBtYWtlcyBzb21lIHRoaW5ncyBlYXNpZXIKKyAgICAgICAgICAgIHJvb3QgPSByb290ICsgb3MucGF0aC5zZXAKKworICAgICAgICBpZiBub3Qgc2VsZi5fX2lzX3BhdGhfYmVsb3coZmlsZSwgcm9vdCk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlZBTCwgImZpbGUgJyVzJyBpcyBub3QgYmVsb3cgcm9vdCIgJSBmaWxlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHVzZV9waHlzZGlyOgorICAgICAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9fcmVhbHBhdGhfcmVsKHJvb3QsIGZpbGVbKGxlbihyb290KSAtIDEpOl0sIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5fX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKVswXQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTE9PUDoKKyAgICAgICAgICAgICAgICAjIG1ha2UgRUxPT1AgbW9yZSByZWFkYWJsZTsgd2l0aG91dCBjYXRjaGluZyBpdCwgdGhlcmUgd2lsbAorICAgICAgICAgICAgICAgICMgYmUgcHJpbnRlZCBhIGJhY2t0cmFjZSB3aXRoIDEwMHMgb2YgT1NFcnJvciBleGNlcHRpb25zCisgICAgICAgICAgICAgICAgIyBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTE9PUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbXVjaCByZWN1cnNpb25zIHdoaWxlIHJlc29sdmluZyAnJXMnOyBsb29wIGluICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLCBlLnN0cmVycm9yKSkKKworICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkgYi9tZXRhL2xpYi9vZS9jbGFzc2V4dGVuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTA3ZWNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkKQEAgLTAsMCArMSwxMjAgQEAKK2NsYXNzIENsYXNzRXh0ZW5kZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0bmFtZSwgZCk6CisgICAgICAgIHNlbGYuZXh0bmFtZSA9IGV4dG5hbWUKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnBrZ3NfbWFwcGluZyA9IFtdCisKKyAgICBkZWYgZXh0ZW5kX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgia2VybmVsLSIpIG9yIG5hbWUgPT0gInZpcnR1YWwva2VybmVsIjoKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgicnRsZCIpOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiLWNyb3Nzc2RrIik6CisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCItIiArIHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCItIiArIHNlbGYuZXh0bmFtZSwgIiIpCisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgIHN1YnMgPSBuYW1lLnNwbGl0KCIvIiwgMSlbMV0KKyAgICAgICAgICAgIGlmIG5vdCBzdWJzLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gInZpcnR1YWwvIiArIHNlbGYuZXh0bmFtZSArICItIiArIHN1YnMKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4dG5hbWUgKyAiLSIgKyBuYW1lCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgbWFwX3ZhcmlhYmxlKHNlbGYsIHZhcm5hbWUsIHNldHZhciA9IFRydWUpOgorICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCB2YXI6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgdmFyID0gdmFyLnNwbGl0KCkKKyAgICAgICAgbmV3dmFyID0gW10KKyAgICAgICAgZm9yIHYgaW4gdmFyOgorICAgICAgICAgICAgbmV3dmFyLmFwcGVuZChzZWxmLmV4dGVuZF9uYW1lKHYpKQorICAgICAgICBuZXdkYXRhID0gICIgIi5qb2luKG5ld3ZhcikKKyAgICAgICAgaWYgc2V0dmFyOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcih2YXJuYW1lLCBuZXdkYXRhKQorICAgICAgICByZXR1cm4gbmV3ZGF0YQorCisgICAgZGVmIG1hcF9yZWdleHBfdmFyaWFibGUoc2VsZiwgdmFybmFtZSwgc2V0dmFyID0gVHJ1ZSk6CisgICAgICAgIHZhciA9IHNlbGYuZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHZhcjoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICB2YXIgPSB2YXIuc3BsaXQoKQorICAgICAgICBuZXd2YXIgPSBbXQorICAgICAgICBmb3IgdiBpbiB2YXI6CisgICAgICAgICAgICBpZiB2LnN0YXJ0c3dpdGgoIl4iICsgc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKHYpCisgICAgICAgICAgICBlbGlmIHYuc3RhcnRzd2l0aCgiXiIpOgorICAgICAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQoIl4iICsgc2VsZi5leHRuYW1lICsgIi0iICsgdlsxOl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQoc2VsZi5leHRlbmRfbmFtZSh2KSkKKyAgICAgICAgbmV3ZGF0YSA9ICAiICIuam9pbihuZXd2YXIpCisgICAgICAgIGlmIHNldHZhcjoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIodmFybmFtZSwgbmV3ZGF0YSkKKyAgICAgICAgcmV0dXJuIG5ld2RhdGEKKworICAgIGRlZiBtYXBfZGVwZW5kcyhzZWxmLCBkZXApOgorICAgICAgICBpZiBkZXAuZW5kc3dpdGgoKCItbmF0aXZlIiwgIi1uYXRpdmUtcnVudGltZSIpKSBvciAoJ25hdGl2ZXNkay0nIGluIGRlcCkgb3IgKCdjcm9zcy1jYW5hZGlhbicgaW4gZGVwKSBvciAoJy1jcm9zc3Nkay0nIGluIGRlcCk6CisgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIERvIG5vdCBleHRlbmQgZm9yIHRoYXQgYWxyZWFkeSBoYXZlIG11bHRpbGliIHByZWZpeAorICAgICAgICAgICAgdmFyID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKQorICAgICAgICAgICAgaWYgdmFyOgorICAgICAgICAgICAgICAgIHZhciA9IHZhci5zcGxpdCgpCisgICAgICAgICAgICAgICAgZm9yIHYgaW4gdmFyOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aCh2KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXAKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4dGVuZF9uYW1lKGRlcCkKKworICAgIGRlZiBtYXBfZGVwZW5kc192YXJpYWJsZShzZWxmLCB2YXJuYW1lLCBzdWZmaXggPSAiIik6CisgICAgICAgICMgV2UgbmVlZCB0byBwcmVzZXJ2ZSBFWFRFTkRQS0dWIHNvIGl0IGNhbiBiZSBleHBhbmRlZCBjb3JyZWN0bHkgbGF0ZXIKKyAgICAgICAgaWYgc3VmZml4OgorICAgICAgICAgICAgdmFybmFtZSA9IHZhcm5hbWUgKyAiXyIgKyBzdWZmaXgKKyAgICAgICAgb3JpZyA9IHNlbGYuZC5nZXRWYXIoIkVYVEVORFBLR1YiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRVhURU5EUEtHViIsICJFWFRFTkRQS0dWIikKKyAgICAgICAgZGVwcyA9IHNlbGYuZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGRlcHM6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJFWFRFTkRQS0dWIiwgb3JpZykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcHMpCisgICAgICAgIG5ld2RlcHMgPSB7fQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBuZXdkZXBzW3NlbGYubWFwX2RlcGVuZHMoZGVwKV0gPSBkZXBzW2RlcF0KKworICAgICAgICBzZWxmLmQuc2V0VmFyKHZhcm5hbWUsIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzLCBGYWxzZSkucmVwbGFjZSgiRVhURU5EUEtHViIsICIke0VYVEVORFBLR1Z9IikpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkVYVEVORFBLR1YiLCBvcmlnKQorCisgICAgZGVmIG1hcF9wYWNrYWdldmFycyhzZWxmKToKKyAgICAgICAgZm9yIHBrZyBpbiAoc2VsZi5kLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpICsgWyIiXSk6CisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSREVQRU5EUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJSRUNPTU1FTkRTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUlNVR0dFU1RTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUlBST1ZJREVTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUlJFUExBQ0VTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUkNPTkZMSUNUUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlBLRyIsIHBrZykKKworICAgIGRlZiByZW5hbWVfcGFja2FnZXMoc2VsZik6CisgICAgICAgIGZvciBwa2cgaW4gKHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aChzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcuYXBwZW5kKFtwa2cuc3BsaXQoc2VsZi5leHRuYW1lICsgIi0iKVsxXSwgcGtnXSkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLnBrZ3NfbWFwcGluZy5hcHBlbmQoW3BrZywgc2VsZi5leHRlbmRfbmFtZShwa2cpXSkKKworICAgICAgICBzZWxmLmQuc2V0VmFyKCJQQUNLQUdFUyIsICIgIi5qb2luKFtyb3dbMV0gZm9yIHJvdyBpbiBzZWxmLnBrZ3NfbWFwcGluZ10pKQorCisgICAgZGVmIHJlbmFtZV9wYWNrYWdlX3ZhcmlhYmxlcyhzZWxmLCB2YXJpYWJsZXMpOgorICAgICAgICBmb3IgcGtnX21hcHBpbmcgaW4gc2VsZi5wa2dzX21hcHBpbmc6CisgICAgICAgICAgICBmb3Igc3VicyBpbiB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgc2VsZi5kLnJlbmFtZVZhcigiJXNfJXMiICUgKHN1YnMsIHBrZ19tYXBwaW5nWzBdKSwgIiVzXyVzIiAlIChzdWJzLCBwa2dfbWFwcGluZ1sxXSkpCisKK2NsYXNzIE5hdGl2ZXNka0NsYXNzRXh0ZW5kZXIoQ2xhc3NFeHRlbmRlcik6CisgICAgZGVmIG1hcF9kZXBlbmRzKHNlbGYsIGRlcCk6CisgICAgICAgIGlmIGRlcC5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgIGlmIGRlcC5lbmRzd2l0aCgoIi1nY2MtaW5pdGlhbCIsICItZ2NjIiwgIi1nKysiKSk6CisgICAgICAgICAgICByZXR1cm4gZGVwICsgIi1jcm9zc3NkayIKKyAgICAgICAgZWxpZiBkZXAuZW5kc3dpdGgoKCItbmF0aXZlIiwgIi1uYXRpdmUtcnVudGltZSIpKSBvciAoJ25hdGl2ZXNkay0nIGluIGRlcCkgb3IgKCctY3Jvc3MtJyBpbiBkZXApIG9yICgnLWNyb3Nzc2RrLScgaW4gZGVwKToKKyAgICAgICAgICAgIHJldHVybiBkZXAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4dGVuZF9uYW1lKGRlcCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2NsYXNzdXRpbHMucHkgYi9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTg4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5CkBAIC0wLDAgKzEsNDMgQEAKK2NsYXNzIENsYXNzUmVnaXN0cnkodHlwZSk6CisgICAgIiIiTWFpbnRhaW4gYSByZWdpc3RyeSBvZiBjbGFzc2VzLCBpbmRleGVkIGJ5IG5hbWUuCisKK05vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIG5hbWVzIGJlIHVuaXF1ZSwgYXMgaXQgdXNlcworYSBkaWN0aW9uYXJ5IHRvIGhvbGQgdGhlIGNsYXNzZXMgYnkgbmFtZS4KKworVGhlIG5hbWUgaW4gdGhlIHJlZ2lzdHJ5IGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBvZiB0aGUKK2NsYXNzLCBhbmQgdGhlICdwcmlvcml0eScgYXR0cmlidXRlIGNvbnRyb2xzIHByaW9yaXR5LiBUaGUgcHJpb3JpdGl6ZWQoKQorbWV0aG9kIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgY2xhc3NlcyBpbiBwcmlvcml0eSBvcmRlci4KKworU3ViY2xhc3NlcyBvZiBDbGFzc1JlZ2lzdHJ5IG1heSBkZWZpbmUgYW4gJ2ltcGxlbWVudGVkJyBwcm9wZXJ0eSB0byBleGVydAorY29udHJvbCBvdmVyIHdoZXRoZXIgdGhlIGNsYXNzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJlZ2lzdHJ5IChlLmcuIHRvIGtlZXAKK2Fic3RyYWN0IGJhc2UgY2xhc3NlcyBvdXQgb2YgdGhlIHJlZ2lzdHJ5KS4iIiIKKyAgICBwcmlvcml0eSA9IDAKKyAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgorICAgICAgICAiIiJHaXZlIGVhY2ggQ2xhc3NSZWdpc3RyeSB0aGVpciBvd24gcmVnaXN0cnkiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgICAgIGNscy5yZWdpc3RyeSA9IHt9CisgICAgICAgICAgICB0eXBlLl9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKQorCisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgc3VwZXIoQ2xhc3NSZWdpc3RyeSwgY2xzKS5fX2luaXRfXyhuYW1lLCBiYXNlcywgYXR0cnMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBjbHMuaW1wbGVtZW50ZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbHMubmFtZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBjbHMubmFtZSA9IG5hbWUKKyAgICAgICAgY2xzLnJlZ2lzdHJ5W2Nscy5uYW1lXSA9IGNscworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHByaW9yaXRpemVkKHRjbHMpOgorICAgICAgICByZXR1cm4gc29ydGVkKHRjbHMucmVnaXN0cnkudmFsdWVzKCksCisgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSB2OiB2LnByaW9yaXR5LCByZXZlcnNlPVRydWUpCisKKyAgICBkZWYgdW5yZWdpc3RlcihjbHMpOgorICAgICAgICBmb3Iga2V5IGluIGNscy5yZWdpc3RyeS5rZXlzKCk6CisgICAgICAgICAgICBpZiBjbHMucmVnaXN0cnlba2V5XSBpcyBjbHM6CisgICAgICAgICAgICAgICAgZGVsIGNscy5yZWdpc3RyeVtrZXldCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5IGIvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk1NzhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQpAQCAtMCwwICsxLDEwMSBAQAorIyBUaGlzIGNsYXNzIHNob3VsZCBwcm92aWRlIGVhc3kgYWNjZXNzIHRvIHRoZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUKKyMgYnVpbGRzeXN0ZW0gc3VjaCBhcyBsYXllcnMsIGJpdGJha2UgbG9jYXRpb24sIGV0Yy4KK2ltcG9ydCBzdGF0CitpbXBvcnQgc2h1dGlsCisKK2RlZiBfc21hcnRfY29weShzcmMsIGRlc3QpOgorICAgICMgc21hcnRfY29weSB3aWxsIGNob29zZSB0aGUgY29ycmVjdCBmdW5jdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAjIHNvdXJjZSBpcyBhIGZpbGUgb3IgYSBkaXJlY3RvcnkuCisgICAgbW9kZSA9IG9zLnN0YXQoc3JjKS5zdF9tb2RlCisgICAgaWYgc3RhdC5TX0lTRElSKG1vZGUpOgorICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjLCBkZXN0LCBzeW1saW5rcz1UcnVlKQorICAgIGVsc2U6CisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QpCisgICAgICAgIHNodXRpbC5jb3B5bW9kZShzcmMsIGRlc3QpCisKK2NsYXNzIEJ1aWxkU3lzdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYubGF5ZXJkaXJzID0gZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgZGVmIGNvcHlfYml0YmFrZV9hbmRfbGF5ZXJzKHNlbGYsIGRlc3RkaXIpOgorICAgICAgICAjIENvcHkgaW4gYWxsIG1ldGFkYXRhIGxheWVycyArIGJpdGJha2UgKGFzIHJlcG9zaXRvcmllcykKKyAgICAgICAgbGF5ZXJzX2NvcGllZCA9IFtdCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQorICAgICAgICBsYXllcnMgPSBsaXN0KHNlbGYubGF5ZXJkaXJzKQorCisgICAgICAgIGNvcmViYXNlID0gc2VsZi5kLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKQorICAgICAgICBsYXllcnMuYXBwZW5kKGNvcmViYXNlKQorCisgICAgICAgIGNvcmViYXNlX2ZpbGVzID0gc2VsZi5kLmdldFZhcignQ09SRUJBU0VfRklMRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGNvcmViYXNlX2ZpbGVzID0gW2NvcmViYXNlICsgJy8nICt4IGZvciB4IGluIGNvcmViYXNlX2ZpbGVzXQorICAgICAgICAjIE1ha2Ugc3VyZSBiaXRiYWtlIGdvZXMgaW4KKyAgICAgICAgYml0YmFrZV9kaXIgPSBiYi5fX2ZpbGVfXy5yc3BsaXQoJy8nLCAzKVswXQorICAgICAgICBjb3JlYmFzZV9maWxlcy5hcHBlbmQoYml0YmFrZV9kaXIpCisKKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgIGxheWVyY29uZiA9IG9zLnBhdGguam9pbihsYXllciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmNvbmYpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllcmNvbmYsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5yZWFkbGluZSgpLnN0YXJ0c3dpdGgoIiMgIyMjIHdvcmtzcGFjZSBsYXllciBhdXRvLWdlbmVyYXRlZCBieSBkZXZ0b29sICMjIyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU2tpcHBpbmcgbG9jYWwgd29ya3NwYWNlIGxheWVyICVzIiAlIGxheWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBJZiB0aGUgbGF5ZXIgd2FzIGFscmVhZHkgdW5kZXIgY29yZWJhc2UsIGxlYXZlIGl0IHRoZXJlCisgICAgICAgICAgICAjIHNpbmNlIGxheWVycyBzdWNoIGFzIG1ldGEgaGF2ZSBpc3N1ZXMgd2hlbiBtb3ZlZC4KKyAgICAgICAgICAgIGxheWVyZGVzdHBhdGggPSBkZXN0ZGlyCisgICAgICAgICAgICBpZiBjb3JlYmFzZSA9PSBvcy5wYXRoLmRpcm5hbWUobGF5ZXIpOgorICAgICAgICAgICAgICAgIGxheWVyZGVzdHBhdGggKz0gJy8nICsgb3MucGF0aC5iYXNlbmFtZShjb3JlYmFzZSkKKyAgICAgICAgICAgIGxheWVyZGVzdHBhdGggKz0gJy8nICsgb3MucGF0aC5iYXNlbmFtZShsYXllcikKKworICAgICAgICAgICAgbGF5ZXJfcmVsYXRpdmUgPSBvcy5wYXRoLnJlbHBhdGgobGF5ZXJkZXN0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIpCisgICAgICAgICAgICBsYXllcnNfY29waWVkLmFwcGVuZChsYXllcl9yZWxhdGl2ZSkKKworICAgICAgICAgICAgIyBUcmVhdCBjb3JlYmFzZSBhcyBzcGVjaWFsIHNpbmNlIGl0IHR5cGljYWxseSB3aWxsIGNvbnRhaW4KKyAgICAgICAgICAgICMgYnVpbGQgZGlyZWN0b3JpZXMgb3Igb3RoZXIgY3VzdG9tIGl0ZW1zLgorICAgICAgICAgICAgaWYgY29yZWJhc2UgPT0gbGF5ZXI6CisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGxheWVyZGVzdHBhdGgpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gY29yZWJhc2VfZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGZfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGYpCisgICAgICAgICAgICAgICAgICAgIGRlc3RuYW1lID0gb3MucGF0aC5qb2luKGxheWVyZGVzdHBhdGgsIGZfYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIF9zbWFydF9jb3B5KGYsIGRlc3RuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRlc3RwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiU2tpcHBpbmcgbGF5ZXIgJXMsIGFscmVhZHkgaGFuZGxlZCIgJSBsYXllcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfc21hcnRfY29weShsYXllciwgbGF5ZXJkZXN0cGF0aCkKKworICAgICAgICByZXR1cm4gbGF5ZXJzX2NvcGllZAorCitkZWYgZ2VuZXJhdGVfbG9ja2VkX3NpZ3Moc2lnZmlsZSwgZCk6CisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzaWdmaWxlKSkKKyAgICBkZXBkID0gZC5nZXRWYXIoJ0JCX1RBU0tERVBEQVRBJywgVHJ1ZSkKKyAgICB0YXNrcyA9IFsnJXMuJXMnICUgKHZbMl0sIHZbMV0pIGZvciB2IGluIGRlcGQuaXRlcnZhbHVlcygpXQorICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX2xvY2tlZHNpZ3Moc2lnZmlsZSwgdGFza3MpCisKK2RlZiBwcnVuZV9sb2NrZWRzaWdzKGFsbG93ZWRfdGFza3MsIGV4Y2x1ZGVkX3RhcmdldHMsIGxvY2tlZHNpZ3MsIHBydW5lZF9vdXRwdXQpOgorICAgIHdpdGggb3Blbihsb2NrZWRzaWdzLCAncicpIGFzIGluZmlsZToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShwcnVuZWRfb3V0cHV0KSkKKyAgICAgICAgd2l0aCBvcGVuKHBydW5lZF9vdXRwdXQsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGludmFsdWUgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5maWxlOgorICAgICAgICAgICAgICAgIGlmIGludmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJ1xcXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zdHJpcCgpLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0dmFsWzFdIGluIGFsbG93ZWRfdGFza3MgYW5kIG5vdCBzcGxpdHZhbFswXSBpbiBleGNsdWRlZF90YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGludmFsdWUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdTSUdHRU5fTE9DS0VEU0lHUycpOgorICAgICAgICAgICAgICAgICAgICBpbnZhbHVlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisKK2RlZiBjcmVhdGVfbG9ja2VkX3NzdGF0ZV9jYWNoZShsb2NrZWRzaWdzLCBpbnB1dF9zc3RhdGVfY2FjaGUsIG91dHB1dF9zc3RhdGVfY2FjaGUsIGQsIGZpeGVkbHNic3RyaW5nPSIiKToKKyAgICBiYi5ub3RlKCdHZW5lcmF0aW5nIHNzdGF0ZS1jYWNoZS4uLicpCisKKyAgICBiYi5wcm9jZXNzLnJ1bigiZ2VuLWxvY2tlZHNpZy1jYWNoZSAlcyAlcyAlcyIgJSAobG9ja2Vkc2lncywgaW5wdXRfc3N0YXRlX2NhY2hlLCBvdXRwdXRfc3N0YXRlX2NhY2hlKSkKKyAgICBpZiBmaXhlZGxzYnN0cmluZzoKKyAgICAgICAgb3MucmVuYW1lKG91dHB1dF9zc3RhdGVfY2FjaGUgKyAnLycgKyBkLmdldFZhcignTkFUSVZFTFNCU1RSSU5HJywgVHJ1ZSksCisgICAgICAgIG91dHB1dF9zc3RhdGVfY2FjaGUgKyAnLycgKyBmaXhlZGxzYnN0cmluZykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2RhdGEucHkgYi9tZXRhL2xpYi9vZS9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzBlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9kYXRhLnB5CkBAIC0wLDAgKzEsMTcgQEAKK2ltcG9ydCBvZS5tYWtldHlwZQorCitkZWYgdHlwZWRfdmFsdWUoa2V5LCBkKToKKyAgICAiIiJDb25zdHJ1Y3QgYSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBtZXRhZGF0YSB2YXJpYWJsZSwgdXNpbmcgaXRzIGZsYWdzCisgICAgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIGFuZCBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3Rpb24uIiIiCisgICAgdmFyX3R5cGUgPSBkLmdldFZhckZsYWcoa2V5LCAndHlwZScpCisgICAgZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSkKKyAgICBpZiBmbGFncyBpcyBub3QgTm9uZToKKyAgICAgICAgZmxhZ3MgPSBkaWN0KChmbGFnLCBkLmV4cGFuZCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICBmb3IgZmxhZywgdmFsdWUgaW4gZmxhZ3MuaXRlcml0ZW1zKCkpCisgICAgZWxzZToKKyAgICAgICAgZmxhZ3MgPSB7fQorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gb2UubWFrZXR5cGUuY3JlYXRlKGQuZ2V0VmFyKGtleSwgVHJ1ZSkgb3IgJycsIHZhcl90eXBlLCAqKmZsYWdzKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKSwgZXhjOgorICAgICAgICBiYi5tc2cuZmF0YWwoIkRhdGEiLCAiJXM6ICVzIiAlIChrZXksIHN0cihleGMpKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weSBiL21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ1YjBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvZGlzdHJvX2NoZWNrLnB5CkBAIC0wLDAgKzEsMzgzIEBACitkZWYgZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgIlJldHVybiBhbGwgdGhlIGhyZWYgbGlua3MgZm91bmQgb24gdGhlIHdlYiBsb2NhdGlvbiIKKworICAgIGltcG9ydCB1cmxsaWIsIHNnbWxsaWIKKyAgICAKKyAgICBjbGFzcyBMaW5rc1BhcnNlcihzZ21sbGliLlNHTUxQYXJzZXIpOgorICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgcyk6CisgICAgICAgICAgICAiUGFyc2UgdGhlIGdpdmVuIHN0cmluZyAncycuIgorICAgICAgICAgICAgc2VsZi5mZWVkKHMpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcmJvc2U9MCk6CisgICAgICAgICAgICAiSW5pdGlhbGlzZSBhbiBvYmplY3QgcGFzc2luZyAndmVyYm9zZScgdG8gdGhlIHN1cGVyY2xhc3MuIgorICAgICAgICAgICAgc2dtbGxpYi5TR01MUGFyc2VyLl9faW5pdF9fKHNlbGYsIHZlcmJvc2UpCisgICAgICAgICAgICBzZWxmLmh5cGVybGlua3MgPSBbXQorICAgIAorICAgICAgICBkZWYgc3RhcnRfYShzZWxmLCBhdHRyaWJ1dGVzKToKKyAgICAgICAgICAgICJQcm9jZXNzIGEgaHlwZXJsaW5rIGFuZCBpdHMgJ2F0dHJpYnV0ZXMnLiIKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBhdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gImhyZWYiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmh5cGVybGlua3MuYXBwZW5kKHZhbHVlLnN0cmlwKCcvJykpCisgICAgCisgICAgICAgIGRlZiBnZXRfaHlwZXJsaW5rcyhzZWxmKToKKyAgICAgICAgICAgICJSZXR1cm4gdGhlIGxpc3Qgb2YgaHlwZXJsaW5rcy4iCisgICAgICAgICAgICByZXR1cm4gc2VsZi5oeXBlcmxpbmtzCisKKyAgICBzb2NrID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgIHdlYnBhZ2UgPSBzb2NrLnJlYWQoKQorICAgIHNvY2suY2xvc2UoKQorCisgICAgbGlua3NwYXJzZXIgPSBMaW5rc1BhcnNlcigpCisgICAgbGlua3NwYXJzZXIucGFyc2Uod2VicGFnZSkKKyAgICByZXR1cm4gbGlua3NwYXJzZXIuZ2V0X2h5cGVybGlua3MoKQorCitkZWYgZmluZF9sYXRlc3RfbnVtZXJpY19yZWxlYXNlKHVybCk6CisgICAgIkZpbmQgdGhlIGxhdGVzdCBsaXN0ZWQgbnVtZXJpYyByZWxlYXNlIG9uIHRoZSBnaXZlbiB1cmwiCisgICAgbWF4PTAKKyAgICBtYXhzdHI9IiIKKyAgICBmb3IgbGluayBpbiBnZXRfbGlua3NfZnJvbV91cmwodXJsKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVsZWFzZSA9IGZsb2F0KGxpbmspCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJlbGVhc2UgPSAwCisgICAgICAgIGlmIHJlbGVhc2UgPiBtYXg6CisgICAgICAgICAgICBtYXggPSByZWxlYXNlCisgICAgICAgICAgICBtYXhzdHIgPSBsaW5rCisgICAgcmV0dXJuIG1heHN0cgorCitkZWYgaXNfc3JjX3JwbShuYW1lKToKKyAgICAiQ2hlY2sgaWYgdGhlIGxpbmsgaXMgcG9pbnRpbmcgdG8gYSBzcmMucnBtIGZpbGUiCisgICAgaWYgbmFtZVstODpdID09ICIuc3JjLnJwbSI6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBwYWNrYWdlX25hbWVfZnJvbV9zcnBtKHNycG0pOgorICAgICJTdHJpcCBvdXQgdGhlIHBhY2thZ2UgbmFtZSBmcm9tIHRoZSBzcmMucnBtIGZpbGVuYW1lIgorICAgIHN0cmluZ3MgPSBzcnBtLnNwbGl0KCctJykKKyAgICBwYWNrYWdlX25hbWUgPSBzdHJpbmdzWzBdCisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuIChzdHJpbmdzKSAtIDEpOgorICAgICAgICBzdHIgPSBzdHJpbmdzW2ldCisgICAgICAgIGlmIG5vdCBzdHJbMF0uaXNkaWdpdCgpOgorICAgICAgICAgICAgcGFja2FnZV9uYW1lICs9ICctJyArIHN0cgorICAgIHJldHVybiBwYWNrYWdlX25hbWUKKworZGVmIGNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX2xpc3QpOgorICAgICJSZW1vdmVzIG11bHRpcGxlIGVudHJpZXMgb2YgcGFja2FnZXMgYW5kIHNvcnRzIHRoZSBsaXN0IgorICAgIHNldCA9IHt9CisgICAgbWFwKHNldC5fX3NldGl0ZW1fXywgcGFja2FnZV9saXN0LCBbXSkKKyAgICByZXR1cm4gc2V0LmtleXMoKQorCisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX21lZWdvX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG1lZWdvIGRpc3RybyIKKworICAgIHBhY2thZ2VfbmFtZXMgPSBbXQorICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oIi90bXAvTWVlZ28tMS4xIiwgInIiKQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgcGFja2FnZV9uYW1lcy5hcHBlbmQobGluZVs6LTFdICsgIjoiICsgIm1haW4iKSAjIEFsc28gc3RyaXAgdGhlICdcbicgYXQgdGhlIGVuZAorICAgIGV4Y2VwdCBJT0Vycm9yOiBwYXNzCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiAiMS4wIiwgcGFja2FnZV9saXN0CisKK2RlZiBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCh1cmwsIHNlY3Rpb24pOgorICAgICJSZXR1cm4gYSBzZWN0aW9uZWQgbGlzdCBvZiBwYWNrYWdlIG5hbWVzIGZyb20gYSBVUkwgbGlzdCIKKworICAgIGJiLm5vdGUoIlJlYWRpbmcgJXM6ICVzIiAlICh1cmwsIHNlY3Rpb24pKQorICAgIGxpbmtzID0gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCkKKyAgICBzcnBtcyA9IGZpbHRlcihpc19zcmNfcnBtLCBsaW5rcykKKyAgICBuYW1lc19saXN0ID0gbWFwKHBhY2thZ2VfbmFtZV9mcm9tX3NycG0sIHNycG1zKQorCisgICAgbmV3X3BrZ3MgPSBbXQorICAgIGZvciBwa2dzIGluIG5hbWVzX2xpc3Q6CisgICAgICAgbmV3X3BrZ3MuYXBwZW5kKHBrZ3MgKyAiOiIgKyBzZWN0aW9uKQorCisgICAgcmV0dXJuIG5ld19wa2dzCisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX2ZlZG9yYV9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBmZWRvcmEgZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8iKQorCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vYXJjaGl2ZS5mZWRvcmFwcm9qZWN0Lm9yZy9wdWIvZmVkb3JhL2xpbnV4L3JlbGVhc2VzLyVzL0ZlZG9yYS9zb3VyY2UvU1JQTVMvIiAlIGxhdGVzdCwgIm1haW4iKQorCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kb3dubG9hZC5mZWRvcmEucmVkaGF0LmNvbS9wdWIvZmVkb3JhL2xpbnV4L3JlbGVhc2VzLyVzL0V2ZXJ5dGhpbmcvc291cmNlL1NQUk1TLyIgJSBsYXRlc3QsICJldmVyeXRoaW5nIikKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vYXJjaGl2ZS5mZWRvcmFwcm9qZWN0Lm9yZy9wdWIvZmVkb3JhL2xpbnV4L3VwZGF0ZXMvJXMvU1JQTVMvIiAlIGxhdGVzdCwgInVwZGF0ZXMiKQorCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgICAgICAKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfb3BlbnN1c2Vfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3Qgb3BlbnN1c2UgZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy9zb3VyY2UvZGlzdHJpYnV0aW9uLyIpCisKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvc291cmNlL2Rpc3RyaWJ1dGlvbi8lcy9yZXBvL29zcy9zdXNlL3NyYy8iICUgbGF0ZXN0LCAibWFpbiIpCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy91cGRhdGUvJXMvcnBtL3NyYy8iICUgbGF0ZXN0LCAidXBkYXRlcyIpCisKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX21hbmRyaXZhX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG1hbmRyaXZhIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvIikKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvbWFpbi9yZWxlYXNlLyIgJSBsYXRlc3QsICJtYWluIikKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rpc3RyaWItY29mZmVlLmlwc2wuanVzc2lldS5mci9wdWIvbGludXgvTWFuZHJpdmFMaW51eC9vZmZpY2lhbC8lcy9TUlBNUy9jb250cmliL3JlbGVhc2UvIiAlIGxhdGVzdCwgImNvbnRyaWIiKQorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvbWFpbi91cGRhdGVzLyIgJSBsYXRlc3QsICJ1cGRhdGVzIikKKworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGZpbmRfbGF0ZXN0X2RlYmlhbl9yZWxlYXNlKHVybCk6CisgICAgIkZpbmQgdGhlIGxhdGVzdCBsaXN0ZWQgZGViaWFuIHJlbGVhc2Ugb24gdGhlIGdpdmVuIHVybCIKKworICAgIHJlbGVhc2VzID0gW10KKyAgICBmb3IgbGluayBpbiBnZXRfbGlua3NfZnJvbV91cmwodXJsKToKKyAgICAgICAgaWYgbGlua1s6Nl0gPT0gIkRlYmlhbiI6CisgICAgICAgICAgICBpZiAnOycgbm90IGluIGxpbms6CisgICAgICAgICAgICAgICAgcmVsZWFzZXMuYXBwZW5kKGxpbmspCisgICAgcmVsZWFzZXMuc29ydCgpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmVsZWFzZXMucG9wKClbNjpdCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gIl9Ob3RGb3VuZF8iCisKK2RlZiBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCBzZWN0aW9uKToKKyAgICAiUmV0dXJuIHRoZSBsaXN0IG9mIHBhY2thZ2UtbmFtZXMgc3RvcmVkIGluIHRoZSBkZWJpYW4gc3R5bGUgU291cmNlcy5neiBmaWxlIgorICAgIGltcG9ydCB1cmxsaWIKKyAgICBzb2NrID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIHRtcGZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0nd2InLCBwcmVmaXg9J29lY29yZS4nLCBzdWZmaXg9Jy50bXAnLCBkZWxldGU9RmFsc2UpCisgICAgdG1wZmlsZW5hbWU9dG1wZmlsZS5uYW1lCisgICAgdG1wZmlsZS53cml0ZShzb2NrLnJlYWQoKSkKKyAgICBzb2NrLmNsb3NlKCkKKyAgICB0bXBmaWxlLmNsb3NlKCkKKyAgICBpbXBvcnQgZ3ppcAorICAgIGJiLm5vdGUoIlJlYWRpbmcgJXM6ICVzIiAlICh1cmwsIHNlY3Rpb24pKQorCisgICAgZiA9IGd6aXAub3Blbih0bXBmaWxlbmFtZSkKKyAgICBwYWNrYWdlX25hbWVzID0gW10KKyAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICBpZiBsaW5lWzo5XSA9PSAiUGFja2FnZTogIjoKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZXMuYXBwZW5kKGxpbmVbOTotMV0gKyAiOiIgKyBzZWN0aW9uKSAjIEFsc28gc3RyaXAgdGhlICdcbicgYXQgdGhlIGVuZAorICAgIG9zLnVubGluayh0bXBmaWxlbmFtZSkKKworICAgIHJldHVybiBwYWNrYWdlX25hbWVzCisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX2RlYmlhbl9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBkZWJpYW4gZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X2RlYmlhbl9yZWxlYXNlKCJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzLyIpCisgICAgdXJsID0gImh0dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vZGlzdHMvc3RhYmxlL21haW4vc291cmNlL1NvdXJjZXMuZ3oiIAorICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAibWFpbiIpCisjICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS9jb250cmliL3NvdXJjZS9Tb3VyY2VzLmd6IiAKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAiY29udHJpYiIpCisgICAgdXJsID0gImh0dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vZGlzdHMvc3RhYmxlLXByb3Bvc2VkLXVwZGF0ZXMvbWFpbi9zb3VyY2UvU291cmNlcy5neiIgCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAidXBkYXRlcyIpCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgZmluZF9sYXRlc3RfdWJ1bnR1X3JlbGVhc2UodXJsKToKKyAgICAiRmluZCB0aGUgbGF0ZXN0IGxpc3RlZCB1YnVudHUgcmVsZWFzZSBvbiB0aGUgZ2l2ZW4gdXJsIgorICAgIHVybCArPSAiP0M9TTtPPUQiICMgRGVzY2VuZGluZyBTb3J0IGJ5IExhc3QgTW9kaWZpZWQKKyAgICBmb3IgbGluayBpbiBnZXRfbGlua3NfZnJvbV91cmwodXJsKToKKyAgICAgICAgaWYgbGlua1stODpdID09ICItdXBkYXRlcyI6CisgICAgICAgICAgICByZXR1cm4gbGlua1s6LThdCisgICAgcmV0dXJuICJfTm90Rm91bmRfIgorCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF91YnVudHVfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgdWJ1bnR1IGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF91YnVudHVfcmVsZWFzZSgiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvIikKKyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMvbWFpbi9zb3VyY2UvU291cmNlcy5neiIgJSBsYXRlc3QKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm1haW4iKQorIyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMvbXVsdGl2ZXJzZS9zb3VyY2UvU291cmNlcy5neiIgJSBsYXRlc3QKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAibXVsdGl2ZXJzZSIpCisjICAgIHVybCA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9kaXN0cy8lcy91bml2ZXJzZS9zb3VyY2UvU291cmNlcy5neiIgJSBsYXRlc3QKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAidW5pdmVyc2UiKQorICAgIHVybCA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9kaXN0cy8lcy11cGRhdGVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAidXBkYXRlcyIpCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgY3JlYXRlX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIpOgorICAgIHBrZ2xzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGlzdHJvX2NoZWNrX2RpciwgInBhY2thZ2VfbGlzdHMiKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyIChwa2dsc3RfZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMocGtnbHN0X2RpcikKKyAgICAjIGZpcnN0IGNsZWFyIG9sZCBzdHVmZgorICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIocGtnbHN0X2Rpcik6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4ocGtnbHN0X2RpciwgZmlsZSkpCisgCisgICAgcGVyX2Rpc3Ryb19mdW5jdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJEZWJpYW4iLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX2RlYmlhbl9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIlVidW50dSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfdWJ1bnR1X3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiRmVkb3JhIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9mZWRvcmFfc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJPcGVuU3VTRSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfb3BlbnN1c2Vfc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJNYW5kcml2YSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfbWFuZHJpdmFfc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJNZWVnbyIsIGdldF9sYXRlc3RfcmVsZWFzZWRfbWVlZ29fc291cmNlX3BhY2thZ2VfbGlzdF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorICAgIGJlZ2luID0gZGF0ZXRpbWUubm93KCkKKyAgICBmb3IgZGlzdHJvIGluIHBlcl9kaXN0cm9fZnVuY3Rpb25zOgorICAgICAgICBuYW1lID0gZGlzdHJvWzBdCisgICAgICAgIHJlbGVhc2UsIHBhY2thZ2VfbGlzdCA9IGRpc3Ryb1sxXSgpCisgICAgICAgIGJiLm5vdGUoIkRpc3RybzogJXMsIExhdGVzdCBSZWxlYXNlOiAlcywgIyBzcmMgcGFja2FnZXM6ICVkIiAlIChuYW1lLCByZWxlYXNlLCBsZW4ocGFja2FnZV9saXN0KSkpCisgICAgICAgIHBhY2thZ2VfbGlzdF9maWxlID0gb3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIG5hbWUgKyAiLSIgKyByZWxlYXNlKQorICAgICAgICBmID0gb3BlbihwYWNrYWdlX2xpc3RfZmlsZSwgIncrYiIpCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZV9saXN0OgorICAgICAgICAgICAgZi53cml0ZShwa2cgKyAiXG4iKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBlbmQgPSBkYXRldGltZS5ub3coKQorICAgIGRlbHRhID0gZW5kIC0gYmVnaW4KKyAgICBiYi5ub3RlKCJwYWNrYWdlX2xpc3QgZ2VuZXJhdGlvc24gdG9vayB0aGlzIG11Y2ggdGltZTogJWQgc2Vjb25kcyIgJSBkZWx0YS5zZWNvbmRzKQorCitkZWYgdXBkYXRlX2Rpc3Ryb19kYXRhKGRpc3Ryb19jaGVja19kaXIsIGRhdGV0aW1lKToKKyAgICAiIiIKKyAgICAgICAgSWYgZGlzdHJvIHBhY2thZ2VzIGxpc3QgZGF0YSBpcyBvbGQgdGhlbiByZWJ1aWxkIGl0LgorICAgICAgICBUaGUgb3BlcmF0aW9ucyBoYXMgdG8gYmUgcHJvdGVjdGVkIGJ5IGEgbG9jayBzbyB0aGF0CisgICAgICAgIG9ubHkgb25lIHRocmVhZCBwZXJmb3JtZXMgaXQgYXQgYSB0aW1lLgorICAgICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyIChkaXN0cm9fY2hlY2tfZGlyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSAoIk1ha2luZyBuZXcgZGlyZWN0b3J5OiAlcyIgJSBkaXN0cm9fY2hlY2tfZGlyKQorICAgICAgICAgICAgb3MubWFrZWRpcnMgKGRpc3Ryb19jaGVja19kaXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcycgJSAoZGlzdHJvX2NoZWNrX2RpcikpCisKKworICAgIGRhdGV0aW1lX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGlzdHJvX2NoZWNrX2RpciwgImJ1aWxkX2RhdGV0aW1lIikKKyAgICBzYXZlZF9kYXRldGltZSA9ICJfaW52YWxpZF8iCisgICAgaW1wb3J0IGZjbnRsCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGF0ZXRpbWVfZmlsZSk6CisgICAgICAgICAgICBvcGVuKGRhdGV0aW1lX2ZpbGUsICd3K2InKS5jbG9zZSgpICMgdG91Y2ggdGhlIGZpbGUgc28gdGhhdCB0aGUgbmV4dCBvcGVuIHdvbid0IGZhaWwKKworICAgICAgICBmID0gb3BlbihkYXRldGltZV9maWxlLCAicitiIikKKyAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19FWCkKKyAgICAgICAgc2F2ZWRfZGF0ZXRpbWUgPSBmLnJlYWQoKQorICAgICAgICBpZiBzYXZlZF9kYXRldGltZVswOjhdICE9IGRhdGV0aW1lWzA6OF06CisgICAgICAgICAgICBiYi5ub3RlKCJUaGUgYnVpbGQgZGF0ZXRpbWUgZGlkIG5vdCBtYXRjaDogc2F2ZWQ6JXMgY3VycmVudDolcyIgJSAoc2F2ZWRfZGF0ZXRpbWUsIGRhdGV0aW1lKSkKKyAgICAgICAgICAgIGJiLm5vdGUoIlJlZ2VuZXJhdGluZyBkaXN0cm8gcGFja2FnZSBsaXN0cyIpCisgICAgICAgICAgICBjcmVhdGVfZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpcikKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgZi53cml0ZShkYXRldGltZSkKKworICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuYWJsZSB0byByZWFkL3dyaXRlIHRoaXMgZmlsZTogJXMnICUgKGRhdGV0aW1lX2ZpbGUpKQorICAgIGZpbmFsbHk6CisgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfVU4pCisgICAgICAgIGYuY2xvc2UoKQorIAorZGVmIGNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpciwgZCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGlzdHJvX2NoZWNrX2Rpcik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiY29tcGFyZV9pbl9kaXN0cm9fcGFja2FnZXNfbGlzdDogaW52YWxpZCBkaXN0cm9fY2hlY2tfZGlyIHBhc3NlZCIpCisgICAgICAgIAorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIHBrZ2xzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGlzdHJvX2NoZWNrX2RpciwgInBhY2thZ2VfbGlzdHMiKQorICAgIG1hdGNoaW5nX2Rpc3Ryb3MgPSBbXQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICByZWNpcGVfbmFtZSA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgYmIubm90ZSgiQ2hlY2tpbmc6ICVzIiAlIHBuKQorCisgICAgdHJpbV9kaWN0ID0gZGljdCh7Ii1uYXRpdmUiOiItbmF0aXZlIiwgIi1jcm9zcyI6Ii1jcm9zcyIsICItaW5pdGlhbCI6Ii1pbml0aWFsIn0pCisKKyAgICBpZiBwbi5maW5kKCItbmF0aXZlIikgIT0gLTE6CisgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHJlY2lwZV9uYW1lID0gcG5zdHJpcHBlZFswXQorCisgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIm5hdGl2ZXNkay0iKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMV0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMV0KKworICAgIGlmIHBuLmZpbmQoIi1jcm9zcyIpICE9IC0xOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHJlY2lwZV9uYW1lID0gcG5zdHJpcHBlZFswXQorCisgICAgaWYgcG4uZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHJlY2lwZV9uYW1lID0gcG5zdHJpcHBlZFswXQorCisgICAgYmIubm90ZSgiUmVjaXBlOiAlcyIgJSByZWNpcGVfbmFtZSkKKyAgICB0bXAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdESVNUUk9fUE5fQUxJQVMnLCBUcnVlKQorCisgICAgZGlzdHJvX2V4Y2VwdGlvbnMgPSBkaWN0KHsiT0UtQ29yZSI6J09FLUNvcmUnLCAiT3BlbmVkSGFuZCI6J09wZW5lZEhhbmQnLCAiSW50ZWwiOidJbnRlbCcsICJVcHN0cmVhbSI6J1Vwc3RyZWFtJywgIldpbmRyaXZlciI6J1dpbmRyaXZlcicsICJPU1BEVCI6J09TUERUIEFwcHJvdmVkJywgIlBva3kiOidwb2t5J30pCisKKyAgICBpZiB0bXA6CisgICAgICAgIGxpc3QgPSB0bXAuc3BsaXQoJyAnKQorICAgICAgICBmb3Igc3RyIGluIGxpc3Q6CisgICAgICAgICAgICBpZiBzdHIgYW5kIHN0ci5maW5kKCI9IikgPT0gLTEgYW5kIGRpc3Ryb19leGNlcHRpb25zW3N0cl06CisgICAgICAgICAgICAgICAgbWF0Y2hpbmdfZGlzdHJvcy5hcHBlbmQoc3RyKQorCisgICAgZGlzdHJvX3BuX2FsaWFzZXMgPSB7fQorICAgIGlmIHRtcDoKKyAgICAgICAgbGlzdCA9IHRtcC5zcGxpdCgnICcpCisgICAgICAgIGZvciBzdHIgaW4gbGlzdDoKKyAgICAgICAgICAgIGlmIHN0ci5maW5kKCI9IikgIT0gLTE6CisgICAgICAgICAgICAgICAgKGRpc3QsIHBuX2FsaWFzKSA9IHN0ci5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgZGlzdHJvX3BuX2FsaWFzZXNbZGlzdC5zdHJpcCgpLmxvd2VyKCldID0gcG5fYWxpYXMuc3RyaXAoKQorIAorICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIocGtnbHN0X2Rpcik6CisgICAgICAgIChkaXN0cm8sIGRpc3Ryb19yZWxlYXNlKSA9IGZpbGUuc3BsaXQoIi0iKQorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4ocGtnbHN0X2RpciwgZmlsZSksICJyYiIpCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAocGtnLCBzZWN0aW9uKSA9IGxpbmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgaWYgZGlzdHJvLmxvd2VyKCkgaW4gZGlzdHJvX3BuX2FsaWFzZXM6CisgICAgICAgICAgICAgICAgcG4gPSBkaXN0cm9fcG5fYWxpYXNlc1tkaXN0cm8ubG93ZXIoKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG4gPSByZWNpcGVfbmFtZQorICAgICAgICAgICAgaWYgcG4gPT0gcGtnOgorICAgICAgICAgICAgICAgIG1hdGNoaW5nX2Rpc3Ryb3MuYXBwZW5kKGRpc3RybyArICItIiArIHNlY3Rpb25bOi0xXSkgIyBzdHJpcCB0aGUgXG4gYXQgdGhlIGVuZAorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgCisgICAgaWYgdG1wICE9IE5vbmU6CisJbGlzdCA9IHRtcC5zcGxpdCgnICcpCisJZm9yIGl0ZW0gaW4gbGlzdDoKKyAgICAgICAgICAgIG1hdGNoaW5nX2Rpc3Ryb3MuYXBwZW5kKGl0ZW0pCisgICAgYmIubm90ZSgiTWF0Y2hpbmc6ICVzIiAlIG1hdGNoaW5nX2Rpc3Ryb3MpCisgICAgcmV0dXJuIG1hdGNoaW5nX2Rpc3Ryb3MKKworZGVmIGNyZWF0ZV9sb2dfZmlsZShkLCBsb2duYW1lKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGxvZ3BhdGgpCisgICAgbG9nZm4sIGxvZ3N1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQobG9nbmFtZSkKKyAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICIlcy4lcyVzIiAlIChsb2dmbiwgZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSksIGxvZ3N1ZmZpeCkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgc2xvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgbG9nbmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNsb2dmaWxlKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJ0b3VjaCAlcyIgJSBsb2dmaWxlLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgb3Muc3ltbGluayhsb2dmaWxlLCBzbG9nZmlsZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdMT0dfRklMRScsIGxvZ2ZpbGUpCisgICAgcmV0dXJuIGxvZ2ZpbGUKKworCitkZWYgc2F2ZV9kaXN0cm9fY2hlY2tfcmVzdWx0KHJlc3VsdCwgZGF0ZXRpbWUsIHJlc3VsdF9maWxlLCBkKToKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbG9nZGlyID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGlmIG5vdCBsb2dkaXI6CisgICAgICAgIGJiLmVycm9yKCJMT0dfRElSIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLCBjYW4ndCB3cml0ZSB0aGUgZGlzdHJvX2NoZWNrIHJlc3VsdHMiKQorICAgICAgICByZXR1cm4KKyAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihsb2dkaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhsb2dkaXIpCisgICAgbGluZSA9IHBuCisgICAgZm9yIGkgaW4gcmVzdWx0OgorICAgICAgICBsaW5lID0gbGluZSArICIsIiArIGkKKyAgICBmID0gb3BlbihyZXN1bHRfZmlsZSwgImEiKQorICAgIGltcG9ydCBmY250bAorICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVgpCisgICAgZi5zZWVrKDAsIG9zLlNFRUtfRU5EKSAjIHNlZWsgdG8gdGhlIGVuZCBvZiBmaWxlCisgICAgZi53cml0ZShsaW5lICsgIlxuIikKKyAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX1VOKQorICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvaW1hZ2UucHkgYi9tZXRhL2xpYi9vZS9pbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzYxOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvaW1hZ2UucHkKQEAgLTAsMCArMSwzODYgQEAKK2Zyb20gb2UudXRpbHMgaW1wb3J0IGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworCisKK2RlZiBnZW5lcmF0ZV9pbWFnZShhcmcpOgorICAgICh0eXBlLCBzdWJpbWFnZXMsIGNyZWF0ZV9pbWdfY21kKSA9IGFyZworCisgICAgYmIubm90ZSgiUnVubmluZyBpbWFnZSBjcmVhdGlvbiBzY3JpcHQgZm9yICVzOiAlcyAuLi4iICUKKyAgICAgICAgICAgICh0eXBlLCBjcmVhdGVfaW1nX2NtZCkpCisKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNyZWF0ZV9pbWdfY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybigiRXJyb3I6IFRoZSBpbWFnZSBjcmVhdGlvbiBzY3JpcHQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgYmIubm90ZSgiU2NyaXB0IG91dHB1dDpcbiVzIiAlIG91dHB1dCkKKworICAgIHJldHVybiBOb25lCisKKworIiIiCitUaGlzIGNsYXNzIHdpbGwgaGVscCBjb21wdXRlIElNQUdFX0ZTVFlQRSBkZXBlbmRlbmNpZXMgYW5kIGdyb3VwIHRoZW0gaW4gYmF0Y2hlcwordGhhdCBjYW4gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwuCisKK1RoZSBuZXh0IGV4YW1wbGUgaXMgZm9yIGlsbHVzdHJhdGlvbiBwdXJwb3NlcywgaGlnaGx5IHVubGlrZWx5IHRvIGhhcHBlbiBpbiByZWFsIGxpZmUuCitJdCdzIGp1c3Qgb25lIG9mIHRoZSB0ZXN0IGNhc2VzIEkgdXNlZCB0byB0ZXN0IHRoZSBhbGdvcml0aG06CisKK0ZvcjoKK0lNQUdFX0ZTVFlQRVMgPSAiaTEgaTIgaTMgaTQgaTUiCitJTUFHRV9UWVBFREVQX2k0ID0gImkyIgorSU1BR0VfVFlQRURFUF9pNSA9ICJpNiBpNCIKK0lNQUdFX1RZUEVERVBfaTYgPSAiaTciCitJTUFHRV9UWVBFREVQX2k3ID0gImkyIgorCitXZSBnZXQgdGhlIGZvbGxvd2luZyBsaXN0IG9mIGJhdGNoZXMgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwsIGhhdmluZyB0aGUKK2RlcGVuZGVuY2llcyBzYXRpc2ZpZWQ6CisKK1tbJ2kxJywgJ2kzJywgJ2kyJ10sIFsnaTQnLCAnaTcnXSwgWydpNiddLCBbJ2k1J11dCisiIiIKK2NsYXNzIEltYWdlRGVwR3JhcGgob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5ncmFwaCA9IGRpY3QoKQorICAgICAgICBzZWxmLmRlcHNfYXJyYXkgPSBkaWN0KCkKKworICAgIGRlZiBfY29uc3RydWN0X2RlcF9ncmFwaChzZWxmLCBpbWFnZV9mc3R5cGVzKToKKyAgICAgICAgZ3JhcGggPSBkaWN0KCkKKworICAgICAgICBkZWYgYWRkX25vZGUobm9kZSk6CisgICAgICAgICAgICBiYXNlX3R5cGUgPSBzZWxmLl9pbWFnZV9iYXNlX3R5cGUobm9kZSkKKyAgICAgICAgICAgIGRlcHMgPSAoc2VsZi5kLmdldFZhcignSU1BR0VfVFlQRURFUF8nICsgbm9kZSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICBiYXNlX2RlcHMgPSAoc2VsZi5kLmdldFZhcignSU1BR0VfVFlQRURFUF8nICsgYmFzZV90eXBlLCBUcnVlKSBvciAiIikKKyAgICAgICAgICAgIGlmIGRlcHMgIT0gIiIgb3IgYmFzZV9kZXBzICE9ICIiOgorICAgICAgICAgICAgICAgIGdyYXBoW25vZGVdID0gZGVwcworCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzLnNwbGl0KCkgKyBiYXNlX2RlcHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBncmFwaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ub2RlKGRlcCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZ3JhcGhbbm9kZV0gPSAiIgorCisgICAgICAgIGZvciBmc3R5cGUgaW4gaW1hZ2VfZnN0eXBlczoKKyAgICAgICAgICAgIGFkZF9ub2RlKGZzdHlwZSkKKworICAgICAgICByZXR1cm4gZ3JhcGgKKworICAgIGRlZiBfY2xlYW5fZ3JhcGgoc2VsZik6CisgICAgICAgICMgTGl2ZSBhbmQgVk1ESy9WREkgaW1hZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkIHZpYSBpbmhlcml0aW5nCisgICAgICAgICMgYmJjbGFzcyBhbmQgZG9lcyBub3QgZ2V0IHByb2Nlc3NlZCBoZXJlLiBSZW1vdmUgdGhlbSBmcm9tIHRoZSBmc3R5cGVzCisgICAgICAgICMgZ3JhcGguIFRoZWlyIGRlcGVuZGVuY2llcyBhcmUgYWxyZWFkeSBhZGRlZCwgc28gbm8gd29ycmllcyBoZXJlLgorICAgICAgICByZW1vdmVfbGlzdCA9IChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9UWVBFU19NQVNLRUQnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIGZvciBpdGVtIGluIHJlbW92ZV9saXN0OgorICAgICAgICAgICAgc2VsZi5ncmFwaC5wb3AoaXRlbSwgTm9uZSkKKworICAgIGRlZiBfaW1hZ2VfYmFzZV90eXBlKHNlbGYsIHR5cGUpOgorICAgICAgICBjdHlwZXMgPSBzZWxmLmQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBpZiB0eXBlIGluIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiLCAibGl2ZSIsICJpc28iLCAiaGRkaW1nIl06CisgICAgICAgICAgICB0eXBlID0gImV4dDQiCisgICAgICAgIGJhc2V0eXBlID0gdHlwZQorICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgaWYgdHlwZS5lbmRzd2l0aCgiLiIgKyBjdHlwZSk6CisgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBiYXNldHlwZQorCisgICAgZGVmIF9jb21wdXRlX2RlcGVuZGVuY2llcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgZGljdCBvYmplY3Qgb2Ygbm9kZXMgd2l0aCBbbm9fb2ZfZGVwZW5kc19vbiwgbm9fb2ZfZGVwZW5kZWRfYnldCisgICAgICAgIGZvciBlYWNoIG5vZGUKKyAgICAgICAgIiIiCisgICAgICAgIGRlcHNfYXJyYXkgPSBkaWN0KCkKKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGRlcHNfYXJyYXlbbm9kZV0gPSBbMCwgMF0KKworICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgZGVwcyA9IHNlbGYuZ3JhcGhbbm9kZV0uc3BsaXQoKQorICAgICAgICAgICAgZGVwc19hcnJheVtub2RlXVswXSArPSBsZW4oZGVwcykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBkZXBzX2FycmF5W2RlcF1bMV0gKz0gMQorCisgICAgICAgIHJldHVybiBkZXBzX2FycmF5CisKKyAgICBkZWYgX3NvcnRfZ3JhcGgoc2VsZik6CisgICAgICAgIHNvcnRlZF9saXN0ID0gW10KKyAgICAgICAgZ3JvdXAgPSBbXQorICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgaWYgbm9kZSBub3QgaW4gc2VsZi5kZXBzX2FycmF5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlcGVuZHNfb24gPSBzZWxmLmRlcHNfYXJyYXlbbm9kZV1bMF0KKworICAgICAgICAgICAgaWYgZGVwZW5kc19vbiA9PSAwOgorICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZChub2RlKQorCisgICAgICAgIGlmIGxlbihncm91cCkgPT0gMCBhbmQgbGVuKHNlbGYuZGVwc19hcnJheSkgIT0gMDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJwb3NzaWJsZSBmc3R5cGUgY2lyY3VsYXIgZGVwZW5kZW5jeS4uLiIpCisKKyAgICAgICAgc29ydGVkX2xpc3QuYXBwZW5kKGdyb3VwKQorCisgICAgICAgICMgcmVtb3ZlIGFkZGVkIG5vZGVzIGZyb20gZGVwc19hcnJheQorICAgICAgICBmb3IgaXRlbSBpbiBncm91cDoKKyAgICAgICAgICAgIGZvciBub2RlIGluIHNlbGYuZ3JhcGg6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBpbiBzZWxmLmdyYXBoW25vZGVdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwc19hcnJheVtub2RlXVswXSAtPSAxCisKKyAgICAgICAgICAgIHNlbGYuZGVwc19hcnJheS5wb3AoaXRlbSwgTm9uZSkKKworICAgICAgICBpZiBsZW4oc2VsZi5kZXBzX2FycmF5KToKKyAgICAgICAgICAgICMgcmVjdXJzaXZlIGNhbGwsIHRvIGZpbmQgdGhlIG5leHQgZ3JvdXAKKyAgICAgICAgICAgIHNvcnRlZF9saXN0ICs9IHNlbGYuX3NvcnRfZ3JhcGgoKQorCisgICAgICAgIHJldHVybiBzb3J0ZWRfbGlzdAorCisgICAgZGVmIGdyb3VwX2ZzdHlwZXMoc2VsZiwgaW1hZ2VfZnN0eXBlcyk6CisgICAgICAgIHNlbGYuZ3JhcGggPSBzZWxmLl9jb25zdHJ1Y3RfZGVwX2dyYXBoKGltYWdlX2ZzdHlwZXMpCisKKyAgICAgICAgc2VsZi5fY2xlYW5fZ3JhcGgoKQorCisgICAgICAgIHNlbGYuZGVwc19hcnJheSA9IHNlbGYuX2NvbXB1dGVfZGVwZW5kZW5jaWVzKCkKKworICAgICAgICBhbGx0eXBlcyA9IFtub2RlIGZvciBub2RlIGluIHNlbGYuZ3JhcGhdCisKKyAgICAgICAgcmV0dXJuIChhbGx0eXBlcywgc2VsZi5fc29ydF9ncmFwaCgpKQorCisKK2NsYXNzIEltYWdlKEltYWdlRGVwR3JhcGgpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorCisgICAgICAgIHN1cGVyKEltYWdlLCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgZGVmIF9nZXRfcm9vdGZzX3NpemUoc2VsZik6CisgICAgICAgICIiImNvbXB1dGUgdGhlIHJvb3RmcyBzaXplIiIiCisgICAgICAgIHJvb3Rmc19hbGlnbm1lbnQgPSBpbnQoc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTX0FMSUdOTUVOVCcsIFRydWUpKQorICAgICAgICBvdmVyaGVhZF9mYWN0b3IgPSBmbG9hdChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9PVkVSSEVBRF9GQUNUT1InLCBUcnVlKSkKKyAgICAgICAgcm9vdGZzX3JlcV9zaXplID0gaW50KHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19TSVpFJywgVHJ1ZSkpCisgICAgICAgIHJvb3Rmc19leHRyYV9zcGFjZSA9IGV2YWwoc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJywgVHJ1ZSkpCisgICAgICAgIHJvb3Rmc19tYXhzaXplID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTX01BWFNJWkUnLCBUcnVlKQorCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZHUnLCAnLWtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpXSkKKyAgICAgICAgc2l6ZV9rYiA9IGludChvdXRwdXQuc3BsaXQoKVswXSkKKyAgICAgICAgYmFzZV9zaXplID0gc2l6ZV9rYiAqIG92ZXJoZWFkX2ZhY3RvcgorICAgICAgICBiYXNlX3NpemUgPSAoYmFzZV9zaXplLCByb290ZnNfcmVxX3NpemUpW2Jhc2Vfc2l6ZSA8IHJvb3Rmc19yZXFfc2l6ZV0gKyBcCisgICAgICAgICAgICByb290ZnNfZXh0cmFfc3BhY2UKKworICAgICAgICBpZiBiYXNlX3NpemUgIT0gaW50KGJhc2Vfc2l6ZSk6CisgICAgICAgICAgICBiYXNlX3NpemUgPSBpbnQoYmFzZV9zaXplICsgMSkKKworICAgICAgICBiYXNlX3NpemUgKz0gcm9vdGZzX2FsaWdubWVudCAtIDEKKyAgICAgICAgYmFzZV9zaXplIC09IGJhc2Vfc2l6ZSAlIHJvb3Rmc19hbGlnbm1lbnQKKworICAgICAgICAjIENoZWNrIHRoZSByb290ZnMgc2l6ZSBhZ2FpbnN0IElNQUdFX1JPT1RGU19NQVhTSVpFIChpZiBzZXQpCisgICAgICAgIGlmIHJvb3Rmc19tYXhzaXplOgorICAgICAgICAgICAgcm9vdGZzX21heHNpemVfaW50ID0gaW50KHJvb3Rmc19tYXhzaXplKQorICAgICAgICAgICAgaWYgYmFzZV9zaXplID4gcm9vdGZzX21heHNpemVfaW50OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgcm9vdGZzIHNpemUgJWQoSykgb3ZlcnJpZGVzIHRoZSBtYXggc2l6ZSAlZChLKSIgJSBcCisgICAgICAgICAgICAgICAgICAgIChiYXNlX3NpemUsIHJvb3Rmc19tYXhzaXplX2ludCkpCisKKyAgICAgICAgcmV0dXJuIGJhc2Vfc2l6ZQorCisgICAgZGVmIF9jcmVhdGVfc3ltbGlua3Moc2VsZiwgc3ViaW1hZ2VzKToKKyAgICAgICAgIiIiY3JlYXRlIHN5bWxpbmtzIHRvIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIiIiCisgICAgICAgIGRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgaW1nX25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSkKKyAgICAgICAgbGlua19uYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSkKKyAgICAgICAgbWFuaWZlc3RfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX01BTklGRVNUJywgVHJ1ZSkKKworICAgICAgICBvcy5jaGRpcihkZXBsb3lfZGlyKQorCisgICAgICAgIGlmIGxpbmtfbmFtZToKKyAgICAgICAgICAgIGZvciB0eXBlIGluIHN1YmltYWdlczoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbWdfbmFtZSArICIucm9vdGZzLiIgKyB0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgZHN0ID0gbGlua19uYW1lICsgIi4iICsgdHlwZQorICAgICAgICAgICAgICAgICAgICBzcmMgPSBpbWdfbmFtZSArICIucm9vdGZzLiIgKyB0eXBlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIHN5bWxpbms6ICVzIC0+ICVzIiAlIChkc3QsIHNyYykpCisgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkc3QpCisKKyAgICAgICAgICAgIGlmIG1hbmlmZXN0X25hbWUgaXMgbm90IE5vbmUgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMobWFuaWZlc3RfbmFtZSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgbm90IG9zLnBhdGguZXhpc3RzKGxpbmtfbmFtZSArICIubWFuaWZlc3QiKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUobWFuaWZlc3RfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX25hbWUgKyAiLm1hbmlmZXN0IikKKworICAgIGRlZiBfcmVtb3ZlX29sZF9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIiIicmVtb3ZlIHRoZSBzeW1saW5rcyB0byBvbGQgYmluYXJpZXMiIiIKKworICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5LX05BTUUnLCBUcnVlKToKKyAgICAgICAgICAgIGRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBpbWcgaW4gb3MubGlzdGRpcihkZXBsb3lfZGlyKToKKyAgICAgICAgICAgICAgICBpZiBpbWcuZmluZChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5LX05BTUUnLCBUcnVlKSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgaW1nID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsIGltZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoaW1nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JNX09MRF9JTUFHRScsIFRydWUpID09ICIxIiBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLnJlYWxwYXRoKGltZykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLnJlYWxwYXRoKGltZykpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShpbWcpCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwganVzdCBmaWx0ZXIgb3V0IHRoZSBjb21wcmVzc2VkIGltYWdlIHR5cGVzIGZyb20gdGhlCisgICAgZnN0eXBlIGdyb3VwcyByZXR1cm5pbmcgYSAoZmlsdGVyZWRfZnN0eXBlX2dyb3VwcywgY2ltYWdlcykgdHVwbGUuCisgICAgIiIiCisgICAgZGVmIF9maWx0ZXJfb3V0X2NvbW1wcmVzc2VkKHNlbGYsIGZzdHlwZV9ncm91cHMpOgorICAgICAgICBjdHlwZXMgPSBzZWxmLmQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBjaW1hZ2VzID0ge30KKworICAgICAgICBmaWx0ZXJlZF9ncm91cHMgPSBbXQorICAgICAgICBmb3IgZ3JvdXAgaW4gZnN0eXBlX2dyb3VwczoKKyAgICAgICAgICAgIGZpbHRlcmVkX2dyb3VwID0gW10KKyAgICAgICAgICAgIGZvciB0eXBlIGluIGdyb3VwOgorICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBjdHlwZSBpbiBjdHlwZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUuZW5kc3dpdGgoIi4iICsgY3R5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJhc2V0eXBlIG5vdCBpbiBmaWx0ZXJlZF9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cC5hcHBlbmQoYmFzZXR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYXNldHlwZSBub3QgaW4gY2ltYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW1hZ2VzW2Jhc2V0eXBlXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdHlwZSBub3QgaW4gY2ltYWdlc1tiYXNldHlwZV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ltYWdlc1tiYXNldHlwZV0uYXBwZW5kKGN0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYmFzZXR5cGUgYW5kIHR5cGUgbm90IGluIGZpbHRlcmVkX2dyb3VwOgorICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cC5hcHBlbmQodHlwZSkKKworICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXBzLmFwcGVuZChmaWx0ZXJlZF9ncm91cCkKKworICAgICAgICByZXR1cm4gKGZpbHRlcmVkX2dyb3VwcywgY2ltYWdlcykKKworICAgIGRlZiBfZ2V0X2ltYWdlX3R5cGVzKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIGEgKHR5cGVzLCBjaW1hZ2VzKSB0dXBsZSIiIgorCisgICAgICAgIGFsbHR5cGVzLCBmc3R5cGVfZ3JvdXBzID0gc2VsZi5ncm91cF9mc3R5cGVzKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKS5zcGxpdCgpKQorCisgICAgICAgIGZpbHRlcmVkX2dyb3VwcywgY2ltYWdlcyA9IHNlbGYuX2ZpbHRlcl9vdXRfY29tbXByZXNzZWQoZnN0eXBlX2dyb3VwcykKKworICAgICAgICByZXR1cm4gKGFsbHR5cGVzLCBmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMpCisKKyAgICBkZWYgX3dyaXRlX3NjcmlwdChzZWxmLCB0eXBlLCBjbWRzKToKKyAgICAgICAgdGVtcGRpciA9IHNlbGYuZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgICAgICBzY3JpcHRfbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAiY3JlYXRlX2ltYWdlLiIgKyB0eXBlKQorICAgICAgICByb290ZnNfc2l6ZSA9IHNlbGYuX2dldF9yb290ZnNfc2l6ZSgpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignaW1nX2NyZWF0aW9uX2Z1bmMnLCAnXG4nLmpvaW4oY21kcykpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCdpbWdfY3JlYXRpb25fZnVuYycsICdmdW5jJywgMSkKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWcoJ2ltZ19jcmVhdGlvbl9mdW5jJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgc2VsZi5kLnNldFZhcignUk9PVEZTX1NJWkUnLCBzdHIocm9vdGZzX3NpemUpKQorCisgICAgICAgIHdpdGggb3BlbihzY3JpcHRfbmFtZSwgIncrIikgYXMgc2NyaXB0OgorICAgICAgICAgICAgc2NyaXB0LndyaXRlKCIlcyIgJSBiYi5idWlsZC5zaGVsbF90cmFwX2NvZGUoKSkKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiZXhwb3J0IFJPT1RGU19TSVpFPSVkXG4iICUgcm9vdGZzX3NpemUpCisgICAgICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYygnaW1nX2NyZWF0aW9uX2Z1bmMnLCBzY3JpcHQsIHNlbGYuZCkKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiaW1nX2NyZWF0aW9uX2Z1bmNcbiIpCisKKyAgICAgICAgb3MuY2htb2Qoc2NyaXB0X25hbWUsIDA3NzUpCisKKyAgICAgICAgcmV0dXJuIHNjcmlwdF9uYW1lCisKKyAgICBkZWYgX2dldF9pbWFnZWNtZHMoc2VsZik6CisgICAgICAgIG9sZF9vdmVycmlkZXMgPSBzZWxmLmQuZ2V0VmFyKCdPVkVSUklERVMnLCAwKQorCisgICAgICAgIGFsbHR5cGVzLCBmc3R5cGVfZ3JvdXBzLCBjaW1hZ2VzID0gc2VsZi5fZ2V0X2ltYWdlX3R5cGVzKCkKKworICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzID0gW10KKworICAgICAgICBiYi5ub3RlKCJUaGUgaW1hZ2UgY3JlYXRpb24gZ3JvdXBzIGFyZTogJXMiICUgc3RyKGZzdHlwZV9ncm91cHMpKQorICAgICAgICBmb3IgZnN0eXBlX2dyb3VwIGluIGZzdHlwZV9ncm91cHM6CisgICAgICAgICAgICBpbWFnZV9jbWRzID0gW10KKyAgICAgICAgICAgIGZvciB0eXBlIGluIGZzdHlwZV9ncm91cDoKKyAgICAgICAgICAgICAgICBjbWRzID0gW10KKyAgICAgICAgICAgICAgICBzdWJpbWFnZXMgPSBbXQorCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYuZCkKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAnJXM6JXMnICUgKHR5cGUsIG9sZF9vdmVycmlkZXMpKQorICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ3R5cGUnLCB0eXBlKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfY21kID0gbG9jYWxkYXRhLmdldFZhcigiSU1BR0VfQ01EIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBpbWFnZV9jbWQ6CisgICAgICAgICAgICAgICAgICAgIGNtZHMuYXBwZW5kKCJcdCIgKyBpbWFnZV9jbWQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIElNQUdFX0NNRCBkZWZpbmVkIGZvciBJTUFHRV9GU1RZUEVTIGVudHJ5ICclcycgLSBwb3NzaWJseSBpbnZhbGlkIHR5cGUgbmFtZSBvciBtaXNzaW5nIHN1cHBvcnQgY2xhc3MiICUgdHlwZSkKKyAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZChsb2NhbGRhdGEuZXhwYW5kKCJcdGNkICR7REVQTE9ZX0RJUl9JTUFHRX0iKSkKKworICAgICAgICAgICAgICAgIGlmIHR5cGUgaW4gY2ltYWdlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGN0eXBlIGluIGNpbWFnZXNbdHlwZV06CisgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZCgiXHQiICsgbG9jYWxkYXRhLmdldFZhcigiQ09NUFJFU1NfQ01EXyIgKyBjdHlwZSwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZXMuYXBwZW5kKHR5cGUgKyAiLiIgKyBjdHlwZSkKKworICAgICAgICAgICAgICAgIGlmIHR5cGUgbm90IGluIGFsbHR5cGVzOgorICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZChsb2NhbGRhdGEuZXhwYW5kKCJcdHJtICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZXMuYXBwZW5kKHR5cGUpCisKKyAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX3dyaXRlX3NjcmlwdCh0eXBlLCBjbWRzKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfY21kcy5hcHBlbmQoKHR5cGUsIHN1YmltYWdlcywgc2NyaXB0X25hbWUpKQorCisgICAgICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzLmFwcGVuZChpbWFnZV9jbWRzKQorCisgICAgICAgIHJldHVybiBpbWFnZV9jbWRfZ3JvdXBzCisKKyAgICBkZWYgX3dyaXRlX3dpY19lbnYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBieSB3aWMKKyAgICAgICAgdG8gdG1wL3N5c3Jvb3RzLzxtYWNoaW5lPi9pbWdkYXRhLzxpbWFnZT4uZW52CisgICAgICAgICIiIgorICAgICAgICBzdGRpciA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgICAgIG91dGRpciA9IG9zLnBhdGguam9pbihzdGRpciwgJ2ltZ2RhdGEnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0ZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG91dGRpcikKKyAgICAgICAgYmFzZW5hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9CQVNFTkFNRScsIFRydWUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3V0ZGlyLCBiYXNlbmFtZSkgKyAnLmVudicsICd3JykgYXMgZW52ZjoKKyAgICAgICAgICAgIGZvciB2YXIgaW4gc2VsZi5kLmdldFZhcignV0lDVkFSUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgZW52Zi53cml0ZSgnJXM9IiVzIlxuJyAlICh2YXIsIHZhbHVlLnN0cmlwKCkpKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiIyMjIyMjIEdlbmVyYXRlIGltYWdlcyAjIyMjIyMjIikKKyAgICAgICAgcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoIklNQUdFX1BSRVBST0NFU1NfQ09NTUFORCIsIFRydWUpCisgICAgICAgIHBvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCIsIFRydWUpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLl9yZW1vdmVfb2xkX3N5bWxpbmtzKCkKKworICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzID0gc2VsZi5fZ2V0X2ltYWdlY21kcygpCisKKyAgICAgICAgc2VsZi5fd3JpdGVfd2ljX2VudigpCisKKyAgICAgICAgZm9yIGltYWdlX2NtZHMgaW4gaW1hZ2VfY21kX2dyb3VwczoKKyAgICAgICAgICAgICMgY3JlYXRlIHRoZSBpbWFnZXMgaW4gcGFyYWxsZWwKKyAgICAgICAgICAgIG5wcm9jID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBwb29sID0gYmIudXRpbHMubXVsdGlwcm9jZXNzaW5ncG9vbChucHJvYykKKyAgICAgICAgICAgIHJlc3VsdHMgPSBsaXN0KHBvb2wuaW1hcChnZW5lcmF0ZV9pbWFnZSwgaW1hZ2VfY21kcykpCisgICAgICAgICAgICBwb29sLmNsb3NlKCkKKyAgICAgICAgICAgIHBvb2wuam9pbigpCisKKyAgICAgICAgICAgIGZvciByZXN1bHQgaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKHJlc3VsdCkKKworICAgICAgICAgICAgZm9yIGltYWdlX3R5cGUsIHN1YmltYWdlcywgc2NyaXB0IGluIGltYWdlX2NtZHM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgc3ltbGlua3MgZm9yICVzIGltYWdlIC4uLiIgJSBpbWFnZV90eXBlKQorICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9zeW1saW5rcyhzdWJpbWFnZXMpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF9wcm9jZXNzX2NtZHMpCisKKworZGVmIGNyZWF0ZV9pbWFnZShkKToKKyAgICBJbWFnZShkKS5jcmVhdGUoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIEltYWdlIGNyZWF0aW9uIGNhbiBiZSBjYWxsZWQgaW5kZXBlbmRlbnQgZnJvbSBiaXRiYWtlIGVudmlyb25tZW50LgorICAgICIiIgorICAgICIiIgorICAgIFRCRAorICAgICIiIgpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvbGljZW5zZS5weSBiL21ldGEvbGliL29lL2xpY2Vuc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmNjYxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2xpY2Vuc2UucHkKQEAgLTAsMCArMSwyMTcgQEAKKyMgdmk6c3RzPTQ6c3c9NDpldAorIiIiQ29kZSBmb3IgcGFyc2luZyBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisKK2ltcG9ydCBhc3QKK2ltcG9ydCByZQorZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoY2FzZSBhcyBmbm1hdGNoCisKK2RlZiBsaWNlbnNlX29rKGxpY2Vuc2UsIGRvbnRfd2FudF9saWNlbnNlcyk6CisgICAgIiIiIFJldHVybiBGYWxzZSBpZiBMaWNlbnNlIGV4aXN0IGluIGRvbnRfd2FudF9saWNlbnNlcyBlbHNlIFRydWUgIiIiCisgICAgZm9yIGR3bCBpbiBkb250X3dhbnRfbGljZW5zZXM6CisgICAgICAgICMgSWYgeW91IHdhbnQgdG8gZXhjbHVkZSBsaWNlbnNlIG5hbWVkIGdlbmVyaWNhbGx5ICdYJywgd2UKKyAgICAgICAgIyBzdXJlbHkgd2FudCB0byBleGNsdWRlICdYKycgYXMgd2VsbC4gIEluIGNvbnNlcXVlbmNlLCB3ZQorICAgICAgICAjIHdpbGwgZXhjbHVkZSBhIHRyYWlsaW5nICcrJyBjaGFyYWN0ZXIgZnJvbSBMSUNFTlNFIGluCisgICAgICAgICMgY2FzZSBJTkNPTVBBVElCTEVfTElDRU5TRSBpcyBub3QgYSAnWCsnIGxpY2Vuc2UuCisgICAgICAgIGxpYyA9IGxpY2Vuc2UKKyAgICAgICAgaWYgbm90IHJlLnNlYXJjaCgnXCskJywgZHdsKToKKyAgICAgICAgICAgIGxpYyA9IHJlLnN1YignXCsnLCAnJywgbGljZW5zZSkKKyAgICAgICAgaWYgZm5tYXRjaChsaWMsIGR3bCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBMaWNlbnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIExpY2Vuc2VTeW50YXhFcnJvcihMaWNlbnNlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaWNlbnNlc3RyLCBleGMpOgorICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgPSBsaWNlbnNlc3RyCisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIExpY2Vuc2VFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiZXJyb3IgaW4gJyVzJzogJXMiICUgKHNlbGYubGljZW5zZXN0ciwgc2VsZi5leGMpCisKK2NsYXNzIEludmFsaWRMaWNlbnNlKExpY2Vuc2VFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpY2Vuc2UpOgorICAgICAgICBzZWxmLmxpY2Vuc2UgPSBsaWNlbnNlCisgICAgICAgIExpY2Vuc2VFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGxpY2Vuc2UgJyVzJyIgJSBzZWxmLmxpY2Vuc2UKKworbGljZW5zZV9vcGVyYXRvcl9jaGFycyA9ICcmfCgpICcKK2xpY2Vuc2Vfb3BlcmF0b3IgPSByZS5jb21waWxlKCcoWycgKyBsaWNlbnNlX29wZXJhdG9yX2NoYXJzICsgJ10pJykKK2xpY2Vuc2VfcGF0dGVybiA9IHJlLmNvbXBpbGUoJ1thLXpBLVowLTkuK19cLV0rJCcpCisKK2NsYXNzIExpY2Vuc2VWaXNpdG9yKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgIiIiR2V0IGVsZW1lbnRzIGJhc2VkIG9uIE9wZW5FbWJlZGRlZCBsaWNlbnNlIHN0cmluZ3MiIiIKKyAgICBkZWYgZ2V0X2VsZW1lbnRzKHNlbGYsIGxpY2Vuc2VzdHIpOgorICAgICAgICBuZXdfZWxlbWVudHMgPSBbXQorICAgICAgICBlbGVtZW50cyA9IGZpbHRlcihsYW1iZGEgeDogeC5zdHJpcCgpLCBsaWNlbnNlX29wZXJhdG9yLnNwbGl0KGxpY2Vuc2VzdHIpKQorICAgICAgICBmb3IgcG9zLCBlbGVtZW50IGluIGVudW1lcmF0ZShlbGVtZW50cyk6CisgICAgICAgICAgICBpZiBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICAgICAgaWYgcG9zID4gMCBhbmQgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnRzW3Bvcy0xXSk6CisgICAgICAgICAgICAgICAgICAgIG5ld19lbGVtZW50cy5hcHBlbmQoJyYnKQorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSAnIicgKyBlbGVtZW50ICsgJyInCisgICAgICAgICAgICBlbGlmIG5vdCBsaWNlbnNlX29wZXJhdG9yLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRMaWNlbnNlKGVsZW1lbnQpCisgICAgICAgICAgICBuZXdfZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCisKKyAgICAgICAgcmV0dXJuIG5ld19lbGVtZW50cworCisgICAgIiIiU3ludGF4IHRyZWUgdmlzaXRvciB3aGljaCBjYW4gYWNjZXB0IGVsZW1lbnRzIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHdpdGgKKyAgICBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmciIiIKKyAgICBkZWYgdmlzaXRfZWxlbWVudHMoc2VsZiwgZWxlbWVudHMpOgorICAgICAgICBzZWxmLnZpc2l0KGFzdC5wYXJzZSgnICcuam9pbihlbGVtZW50cykpKQorCisgICAgIiIiU3ludGF4IHRyZWUgdmlzaXRvciB3aGljaCBjYW4gYWNjZXB0IE9wZW5FbWJlZGRlZCBsaWNlbnNlIHN0cmluZ3MiIiIKKyAgICBkZWYgdmlzaXRfc3RyaW5nKHNlbGYsIGxpY2Vuc2VzdHIpOgorICAgICAgICBzZWxmLnZpc2l0X2VsZW1lbnRzKHNlbGYuZ2V0X2VsZW1lbnRzKGxpY2Vuc2VzdHIpKQorCitjbGFzcyBGbGF0dGVuVmlzaXRvcihMaWNlbnNlVmlzaXRvcik6CisgICAgIiIiRmxhdHRlbiBhIGxpY2Vuc2UgdHJlZSAocGFyc2VkIGZyb20gYSBzdHJpbmcpIGJ5IHNlbGVjdGluZyBvbmUgb2YgZWFjaAorICAgIHNldCBvZiBPUiBvcHRpb25zLCBpbiB0aGUgd2F5IHRoZSB1c2VyIHNwZWNpZmllcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaG9vc2VfbGljZW5zZXMpOgorICAgICAgICBzZWxmLmNob29zZV9saWNlbnNlcyA9IGNob29zZV9saWNlbnNlcworICAgICAgICBzZWxmLmxpY2Vuc2VzID0gW10KKyAgICAgICAgTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubGljZW5zZXMuYXBwZW5kKG5vZGUucykKKworICAgIGRlZiB2aXNpdF9CaW5PcChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLm9wLCBhc3QuQml0T3IpOgorICAgICAgICAgICAgbGVmdCA9IEZsYXR0ZW5WaXNpdG9yKHNlbGYuY2hvb3NlX2xpY2Vuc2VzKQorICAgICAgICAgICAgbGVmdC52aXNpdChub2RlLmxlZnQpCisKKyAgICAgICAgICAgIHJpZ2h0ID0gRmxhdHRlblZpc2l0b3Ioc2VsZi5jaG9vc2VfbGljZW5zZXMpCisgICAgICAgICAgICByaWdodC52aXNpdChub2RlLnJpZ2h0KQorCisgICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGYuY2hvb3NlX2xpY2Vuc2VzKGxlZnQubGljZW5zZXMsIHJpZ2h0LmxpY2Vuc2VzKQorICAgICAgICAgICAgc2VsZi5saWNlbnNlcy5leHRlbmQoc2VsZWN0ZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworZGVmIGZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlc3RyLCBjaG9vc2VfbGljZW5zZXMpOgorICAgICIiIkdpdmVuIGEgbGljZW5zZSBzdHJpbmcgYW5kIGNob29zZV9saWNlbnNlcyBmdW5jdGlvbiwgcmV0dXJuIGEgZmxhdCBsaXN0IG9mIGxpY2Vuc2VzIiIiCisgICAgZmxhdHRlbiA9IEZsYXR0ZW5WaXNpdG9yKGNob29zZV9saWNlbnNlcykKKyAgICB0cnk6CisgICAgICAgIGZsYXR0ZW4udmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgTGljZW5zZVN5bnRheEVycm9yKGxpY2Vuc2VzdHIsIGV4YykKKyAgICByZXR1cm4gZmxhdHRlbi5saWNlbnNlcworCitkZWYgaXNfaW5jbHVkZWQobGljZW5zZXN0ciwgd2hpdGVsaXN0PU5vbmUsIGJsYWNrbGlzdD1Ob25lKToKKyAgICAiIiJHaXZlbiBhIGxpY2Vuc2Ugc3RyaW5nIGFuZCB3aGl0ZWxpc3QgYW5kIGJsYWNrbGlzdCwgZGV0ZXJtaW5lIGlmIHRoZQorICAgIGxpY2Vuc2Ugc3RyaW5nIG1hdGNoZXMgdGhlIHdoaXRlbGlzdCBhbmQgZG9lcyBub3QgbWF0Y2ggdGhlIGJsYWNrbGlzdC4KKworICAgIFJldHVybnMgYSB0dXBsZSBob2xkaW5nIHRoZSBib29sZWFuIHN0YXRlIGFuZCBhIGxpc3Qgb2YgdGhlIGFwcGxpY2FibGUKKyAgICBsaWNlbnNlcyB3aGljaCB3ZXJlIGV4Y2x1ZGVkIChvciBOb25lLCBpZiB0aGUgc3RhdGUgaXMgVHJ1ZSkKKyAgICAiIiIKKworICAgIGRlZiBpbmNsdWRlX2xpY2Vuc2UobGljZW5zZSk6CisgICAgICAgIHJldHVybiBhbnkoZm5tYXRjaChsaWNlbnNlLCBwYXR0ZXJuKSBmb3IgcGF0dGVybiBpbiB3aGl0ZWxpc3QpCisKKyAgICBkZWYgZXhjbHVkZV9saWNlbnNlKGxpY2Vuc2UpOgorICAgICAgICByZXR1cm4gYW55KGZubWF0Y2gobGljZW5zZSwgcGF0dGVybikgZm9yIHBhdHRlcm4gaW4gYmxhY2tsaXN0KQorCisgICAgZGVmIGNob29zZV9saWNlbnNlcyhhbHBoYSwgYmV0YSk6CisgICAgICAgICIiIlNlbGVjdCB0aGUgb3B0aW9uIGluIGFuIE9SIHdoaWNoIGlzIHRoZSAnYmVzdCcgKGhhcyB0aGUgbW9zdAorICAgICAgICBpbmNsdWRlZCBsaWNlbnNlcykuIiIiCisgICAgICAgIGFscGhhX3dlaWdodCA9IGxlbihmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBhbHBoYSkpCisgICAgICAgIGJldGFfd2VpZ2h0ID0gbGVuKGZpbHRlcihpbmNsdWRlX2xpY2Vuc2UsIGJldGEpKQorICAgICAgICBpZiBhbHBoYV93ZWlnaHQgPiBiZXRhX3dlaWdodDoKKyAgICAgICAgICAgIHJldHVybiBhbHBoYQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGJldGEKKworICAgIGlmIG5vdCB3aGl0ZWxpc3Q6CisgICAgICAgIHdoaXRlbGlzdCA9IFsnKiddCisKKyAgICBpZiBub3QgYmxhY2tsaXN0OgorICAgICAgICBibGFja2xpc3QgPSBbXQorCisgICAgbGljZW5zZXMgPSBmbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZXN0ciwgY2hvb3NlX2xpY2Vuc2VzKQorICAgIGV4Y2x1ZGVkID0gZmlsdGVyKGxhbWJkYSBsaWM6IGV4Y2x1ZGVfbGljZW5zZShsaWMpLCBsaWNlbnNlcykKKyAgICBpbmNsdWRlZCA9IGZpbHRlcihsYW1iZGEgbGljOiBpbmNsdWRlX2xpY2Vuc2UobGljKSwgbGljZW5zZXMpCisgICAgaWYgZXhjbHVkZWQ6CisgICAgICAgIHJldHVybiBGYWxzZSwgZXhjbHVkZWQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gVHJ1ZSwgaW5jbHVkZWQKKworY2xhc3MgTWFuaWZlc3RWaXNpdG9yKExpY2Vuc2VWaXNpdG9yKToKKyAgICAiIiJXYWxrIGxpY2Vuc2UgdHJlZSAocGFyc2VkIGZyb20gYSBzdHJpbmcpIHJlbW92aW5nIHRoZSBpbmNvbXBhdGlibGUKKyAgICBsaWNlbnNlcyBzcGVjaWZpZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCk6CisgICAgICAgIHNlbGYuX2RvbnRfd2FudF9saWNlbnNlcyA9IGRvbnRfd2FudF9saWNlbnNlcworICAgICAgICBzZWxmLl9jYW5vbmljYWxfbGljZW5zZSA9IGNhbm9uaWNhbF9saWNlbnNlCisgICAgICAgIHNlbGYuX2QgPSBkCisgICAgICAgIHNlbGYuX29wZXJhdG9ycyA9IFtdCisKKyAgICAgICAgc2VsZi5saWNlbnNlcyA9IFtdCisgICAgICAgIHNlbGYubGljZW5zZXN0ciA9ICcnCisKKyAgICAgICAgTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuU3RyKToKKyAgICAgICAgICAgIGxpYyA9IG5vZGUucworCisgICAgICAgICAgICBpZiBsaWNlbnNlX29rKHNlbGYuX2Nhbm9uaWNhbF9saWNlbnNlKHNlbGYuX2QsIGxpYyksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RvbnRfd2FudF9saWNlbnNlcykgPT0gVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVyYXRvcnM6CisgICAgICAgICAgICAgICAgICAgIG9wcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiBzZWxmLl9vcGVyYXRvcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcCA9PSAnWyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzLmFwcGVuZChvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3AgPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBvcHNbLTFdIGluIFsnWycsICddJ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzWy0xXSA9IG9wIAorCisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcCA9PSAnWycgb3Igb3AgPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSBvcAorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmxpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSAnICcgKyBvcCArICcgJworCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wZXJhdG9ycyA9IFtdCisKKyAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gbGljCisgICAgICAgICAgICAgICAgc2VsZi5saWNlbnNlcy5hcHBlbmQobGljKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LkJpdEFuZCk6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCImIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5CaXRPcik6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCJ8IikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5MaXN0KToKKyAgICAgICAgICAgIHNlbGYuX29wZXJhdG9ycy5hcHBlbmQoIlsiKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LkxvYWQpOgorICAgICAgICAgICAgc2VsZi5saWNlbnNlc3RyICs9ICJdIgorCisgICAgICAgIHNlbGYuZ2VuZXJpY192aXNpdChub2RlKQorCitkZWYgbWFuaWZlc3RfbGljZW5zZXMobGljZW5zZXN0ciwgZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCk6CisgICAgIiIiR2l2ZW4gYSBsaWNlbnNlIHN0cmluZyBhbmQgZG9udF93YW50X2xpY2Vuc2VzIGxpc3QsCisgICAgICAgcmV0dXJuIGxpY2Vuc2Ugc3RyaW5nIGZpbHRlcmVkIGFuZCBhIGxpc3Qgb2YgbGljZW5zZXMiIiIKKyAgICBtYW5pZmVzdCA9IE1hbmlmZXN0VmlzaXRvcihkb250X3dhbnRfbGljZW5zZXMsIGNhbm9uaWNhbF9saWNlbnNlLCBkKQorCisgICAgdHJ5OgorICAgICAgICBlbGVtZW50cyA9IG1hbmlmZXN0LmdldF9lbGVtZW50cyhsaWNlbnNlc3RyKQorCisgICAgICAgICMgUmVwbGFjZSAnKCknIHRvICdbXScgZm9yIGhhbmRsZSBpbiBhc3QgYXMgTGlzdCBhbmQgTG9hZCB0eXBlcy4KKyAgICAgICAgZWxlbWVudHMgPSBbJ1snIGlmIGUgPT0gJygnIGVsc2UgZSBmb3IgZSBpbiBlbGVtZW50c10KKyAgICAgICAgZWxlbWVudHMgPSBbJ10nIGlmIGUgPT0gJyknIGVsc2UgZSBmb3IgZSBpbiBlbGVtZW50c10KKworICAgICAgICBtYW5pZmVzdC52aXNpdF9lbGVtZW50cyhlbGVtZW50cykKKyAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBMaWNlbnNlU3ludGF4RXJyb3IobGljZW5zZXN0ciwgZXhjKQorCisgICAgIyBSZXBsYWNlICdbXScgdG8gJygpJyBmb3Igb3V0cHV0IGNvcnJlY3QgbGljZW5zZS4KKyAgICBtYW5pZmVzdC5saWNlbnNlc3RyID0gbWFuaWZlc3QubGljZW5zZXN0ci5yZXBsYWNlKCdbJywgJygnKS5yZXBsYWNlKCddJywgJyknKQorCisgICAgcmV0dXJuIChtYW5pZmVzdC5saWNlbnNlc3RyLCBtYW5pZmVzdC5saWNlbnNlcykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2xzYi5weSBiL21ldGEvbGliL29lL2xzYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGZlNzFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvbHNiLnB5CkBAIC0wLDAgKzEsODMgQEAKK2RlZiByZWxlYXNlX2RpY3QoKToKKyAgICAiIiJSZXR1cm4gdGhlIG91dHB1dCBvZiBsc2JfcmVsZWFzZSAtaXIgYXMgYSBkaWN0aW9uYXJ5IiIiCisgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQSVBFCisKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCwgZXJyID0gYmIucHJvY2Vzcy5ydW4oWydsc2JfcmVsZWFzZScsICctaXInXSwgc3RkZXJyPVBJUEUpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZXhjOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGF0YSA9IHt9CisgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCItZSIpOiBsaW5lID0gbGluZVszOl0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmUuc3BsaXQoIjpcdCIsIDEpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIGRhdGEKKworZGVmIHJlbGVhc2VfZGljdF9maWxlKCk6CisgICAgIiIiIFRyeSB0byBnYXRoZXIgTFNCIHJlbGVhc2UgaW5mb3JtYXRpb24gbWFudWFsbHkgd2hlbiBsc2JfcmVsZWFzZSB0b29sIGlzIHVuYXZhaWxhYmxlICIiIgorICAgIGRhdGEgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy9sc2ItcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvbHNiLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWUuc3RyaXAoKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL3JlZGhhdC1yZWxlYXNlJyk6CisgICAgICAgICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIHdpdGggb3BlbignL2V0Yy9yZWRoYXQtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZGlzdHJvID0gZi5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJyguKikgcmVsZWFzZSAoLiopIFwoKC4qKVwpJywgZGlzdHJvKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9JRCddID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IG1hdGNoLmdyb3VwKDIpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvb3MtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvb3MtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdOQU1FPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9JRCddID0gbGluZVs1Ol0ucnN0cmlwKCkuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1ZFUlNJT05fSUQ9Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IGxpbmVbMTE6XS5yc3RyaXAoKS5zdHJpcCgnIicpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvU3VTRS1yZWxlYXNlJyk6CisgICAgICAgICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9ICdTVVNFIExJTlVYJworICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL1N1U0UtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdWRVJTSU9OID0gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IGxpbmVbMTA6XS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBkYXRhCisKK2RlZiBkaXN0cm9faWRlbnRpZmllcihhZGp1c3RfaG9vaz1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBkaXN0cm8gaWRlbnRpZmllciBzdHJpbmcgYmFzZWQgdXBvbiBsc2JfcmVsZWFzZSAtcmksCisgICAgICAgd2l0aCBvcHRpb25hbCBhZGp1c3RtZW50IHZpYSBhIGhvb2siIiIKKworICAgIGxzYl9kYXRhID0gcmVsZWFzZV9kaWN0KCkKKyAgICBpZiBsc2JfZGF0YToKKyAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gbHNiX2RhdGFbJ0Rpc3RyaWJ1dG9yIElEJ10sIGxzYl9kYXRhWydSZWxlYXNlJ10KKyAgICBlbHNlOgorICAgICAgICBsc2JfZGF0YV9maWxlID0gcmVsZWFzZV9kaWN0X2ZpbGUoKQorICAgICAgICBpZiBsc2JfZGF0YV9maWxlOgorICAgICAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gbHNiX2RhdGFfZmlsZVsnRElTVFJJQl9JRCddLCBsc2JfZGF0YV9maWxlLmdldCgnRElTVFJJQl9SRUxFQVNFJywgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IE5vbmUsIE5vbmUKKworICAgIGlmIGFkanVzdF9ob29rOgorICAgICAgICBkaXN0cm9faWQsIHJlbGVhc2UgPSBhZGp1c3RfaG9vayhkaXN0cm9faWQsIHJlbGVhc2UpCisgICAgaWYgbm90IGRpc3Ryb19pZDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duIgorICAgIGlmIHJlbGVhc2U6CisgICAgICAgIGlkX3N0ciA9ICd7MH0tezF9Jy5mb3JtYXQoZGlzdHJvX2lkLCByZWxlYXNlKQorICAgIGVsc2U6CisgICAgICAgIGlkX3N0ciA9IGRpc3Ryb19pZAorICAgIHJldHVybiBpZF9zdHIucmVwbGFjZSgnICcsJy0nKS5yZXBsYWNlKCcvJywnLScpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9tYWtldHlwZS5weSBiL21ldGEvbGliL29lL21ha2V0eXBlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWYzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9tYWtldHlwZS5weQpAQCAtMCwwICsxLDk5IEBACisiIiJPcGVuRW1iZWRkZWQgdmFyaWFibGUgdHlwaW5nIHN1cHBvcnQKKworVHlwZXMgYXJlIGRlZmluZWQgaW4gdGhlIG1ldGFkYXRhIGJ5IG5hbWUsIHVzaW5nIHRoZSAndHlwZScgZmxhZyBvbiBhCit2YXJpYWJsZS4gIE90aGVyIGZsYWdzIG1heSBiZSB1dGlsaXplZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSB0eXBlcy4gIFNlZQordGhlIGFyZ3VtZW50cyBvZiB0aGUgdHlwZSdzIGZhY3RvcnkgZm9yIGRldGFpbHMuCisiIiIKKworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCB0eXBlcworCithdmFpbGFibGVfdHlwZXMgPSB7fQorCitjbGFzcyBNaXNzaW5nRmxhZyhUeXBlRXJyb3IpOgorICAgICIiIkEgcGFydGljdWxhciBmbGFnIGlzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgdHlwZSwgYnV0IGhhcyBub3QgYmVlbgorICAgIHByb3ZpZGVkLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGFnLCB0eXBlKToKKyAgICAgICAgc2VsZi5mbGFnID0gZmxhZworICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIFR5cGVFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVHlwZSAnJXMnIHJlcXVpcmVzIGZsYWcgJyVzJyIgJSAoc2VsZi50eXBlLCBzZWxmLmZsYWcpCisKK2RlZiBmYWN0b3J5KHZhcl90eXBlKToKKyAgICAiIiJSZXR1cm4gdGhlIGZhY3RvcnkgZm9yIGEgc3BlY2lmaWVkIHR5cGUuIiIiCisgICAgaWYgdmFyX3R5cGUgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJObyB0eXBlIHNwZWNpZmllZC4gVmFsaWQgdHlwZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oYXZhaWxhYmxlX3R5cGVzKSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBhdmFpbGFibGVfdHlwZXNbdmFyX3R5cGVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkludmFsaWQgdHlwZSAnJXMnOlxuICBWYWxpZCB0eXBlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YXJfdHlwZSwgJywgJy5qb2luKGF2YWlsYWJsZV90eXBlcykpKQorCitkZWYgY3JlYXRlKHZhbHVlLCB2YXJfdHlwZSwgKipmbGFncyk6CisgICAgIiIiQ3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUsIGdpdmVuIHRoZSBzcGVjaWZpZWQgZmxhZ3MgYW5kCisgICAgc3RyaW5nIHZhbHVlLiIiIgorICAgIG9iaiA9IGZhY3RvcnkodmFyX3R5cGUpCisgICAgb2JqZmxhZ3MgPSB7fQorICAgIGZvciBmbGFnIGluIG9iai5mbGFnczoKKyAgICAgICAgaWYgZmxhZyBub3QgaW4gZmxhZ3M6CisgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBvYmoub3B0ZmxhZ3M6CisgICAgICAgICAgICAgICAgcmFpc2UgTWlzc2luZ0ZsYWcoZmxhZywgdmFyX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvYmpmbGFnc1tmbGFnXSA9IGZsYWdzW2ZsYWddCisKKyAgICByZXR1cm4gb2JqKHZhbHVlLCAqKm9iamZsYWdzKQorCitkZWYgZ2V0X2NhbGxhYmxlX2FyZ3Mob2JqKToKKyAgICAiIiJHcmFiIGFsbCBidXQgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBzcGVjaWZpZWQgY2FsbGFibGUsIHJldHVybmluZworICAgIHRoZSBsaXN0LCBhcyB3ZWxsIGFzIGEgbGlzdCBvZiB3aGljaCBvZiB0aGUgYXJndW1lbnRzIGhhdmUgZGVmYXVsdAorICAgIHZhbHVlcy4iIiIKKyAgICBpZiB0eXBlKG9iaikgaXMgdHlwZToKKyAgICAgICAgb2JqID0gb2JqLl9faW5pdF9fCisKKyAgICBhcmdzLCB2YXJhcmdzLCBrZXl3b3JkcywgZGVmYXVsdHMgPSBpbnNwZWN0LmdldGFyZ3NwZWMob2JqKQorICAgIGZsYWdsaXN0ID0gW10KKyAgICBpZiBhcmdzOgorICAgICAgICBpZiBsZW4oYXJncykgPiAxIGFuZCBhcmdzWzBdID09ICdzZWxmJzoKKyAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzE6XQorICAgICAgICBmbGFnbGlzdC5leHRlbmQoYXJncykKKworICAgIG9wdGlvbmFsID0gc2V0KCkKKyAgICBpZiBkZWZhdWx0czoKKyAgICAgICAgb3B0aW9uYWwgfD0gc2V0KGZsYWdsaXN0Wy1sZW4oZGVmYXVsdHMpOl0pCisgICAgcmV0dXJuIGZsYWdsaXN0LCBvcHRpb25hbAorCitkZWYgZmFjdG9yeV9zZXR1cChuYW1lLCBvYmopOgorICAgICIiIlByZXBhcmUgYSBmYWN0b3J5IGZvciB1c2UuIiIiCisgICAgYXJncywgb3B0aW9uYWwgPSBnZXRfY2FsbGFibGVfYXJncyhvYmopCisgICAgZXh0cmFfYXJncyA9IGFyZ3NbMTpdCisgICAgaWYgZXh0cmFfYXJnczoKKyAgICAgICAgb2JqLmZsYWdzLCBvcHRpb25hbCA9IGV4dHJhX2FyZ3MsIG9wdGlvbmFsCisgICAgICAgIG9iai5vcHRmbGFncyA9IHNldChvcHRpb25hbCkKKyAgICBlbHNlOgorICAgICAgICBvYmouZmxhZ3MgPSBvYmoub3B0ZmxhZ3MgPSAoKQorCisgICAgaWYgbm90IGhhc2F0dHIob2JqLCAnbmFtZScpOgorICAgICAgICBvYmoubmFtZSA9IG5hbWUKKworZGVmIHJlZ2lzdGVyKG5hbWUsIGZhY3RvcnkpOgorICAgICIiIlJlZ2lzdGVyIGEgdHlwZSwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGEgZmFjdG9yeSBjYWxsYWJsZS4KKworICAgIERldGVybWluZXMgdGhlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBmbGFncyBmcm9tIHRoZSBmYWN0b3J5J3MKKyAgICBhcmd1bWVudHMuIiIiCisgICAgZmFjdG9yeV9zZXR1cChuYW1lLCBmYWN0b3J5KQorICAgIGF2YWlsYWJsZV90eXBlc1tmYWN0b3J5Lm5hbWVdID0gZmFjdG9yeQorCisKKyMgUmVnaXN0ZXIgYWxsIG91ciBpbmNsdWRlZCB0eXBlcworZm9yIG5hbWUgaW4gZGlyKHR5cGVzKToKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgY29udGludWUKKworICAgIG9iaiA9IGdldGF0dHIodHlwZXMsIG5hbWUpCisgICAgaWYgbm90IGNhbGxhYmxlKG9iaik6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICByZWdpc3RlcihuYW1lLCBvYmopCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weSBiL21ldGEvbGliL29lL21hbmlmZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODMyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weQpAQCAtMCwwICsxLDM0NSBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiCisKKworY2xhc3MgTWFuaWZlc3Qob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgUEtHX1RZUEVfTVVTVF9JTlNUQUxMID0gIm1pcCIKKyAgICBQS0dfVFlQRV9NVUxUSUxJQiA9ICJtbHAiCisgICAgUEtHX1RZUEVfTEFOR1VBR0UgPSAibGdwIgorICAgIFBLR19UWVBFX0FUVEVNUFRfT05MWSA9ICJhb3AiCisKKyAgICBNQU5JRkVTVF9UWVBFX0lNQUdFID0gImltYWdlIgorICAgIE1BTklGRVNUX1RZUEVfU0RLX0hPU1QgPSAic2RrX2hvc3QiCisgICAgTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUID0gInNka190YXJnZXQiCisKKyAgICB2YXJfbWFwcyA9IHsKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9JTUFHRTogeworICAgICAgICAgICAgIlBBQ0tBR0VfSU5TVEFMTCI6IFBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgICAgICJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiOiBQS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgICAgICAiTElOR1VBU19JTlNUQUxMIjogUEtHX1RZUEVfTEFOR1VBR0UKKyAgICAgICAgfSwKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9TREtfSE9TVDogeworICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0siOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSI6IFBLR19UWVBFX0FUVEVNUFRfT05MWQorICAgICAgICB9LAorICAgICAgICBNQU5JRkVTVF9UWVBFX1NES19UQVJHRVQ6IHsKKyAgICAgICAgICAgICJUT09MQ0hBSU5fVEFSR0VUX1RBU0siOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIjogUEtHX1RZUEVfQVRURU1QVF9PTkxZCisgICAgICAgIH0KKyAgICB9CisKKyAgICBJTlNUQUxMX09SREVSID0gWworICAgICAgICBQS0dfVFlQRV9MQU5HVUFHRSwKKyAgICAgICAgUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICBQS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgIFBLR19UWVBFX01VTFRJTElCCisgICAgXQorCisgICAgaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlciA9IFwKKyAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBhbmQgY29udGFpbnMgdGhlIHBhY2thZ2VzXG4iIFwKKyAgICAgICAgIiMgcGFzc2VkIG9uIHRvIHRoZSBwYWNrYWdlIG1hbmFnZXIgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZSByb290ZnMuXG5cbiIgXAorICAgICAgICAiIyBGb3JtYXQ6XG4iIFwKKyAgICAgICAgIiMgIDxwYWNrYWdlX3R5cGU+LDxwYWNrYWdlX25hbWU+XG4iIFwKKyAgICAgICAgIiMgd2hlcmU6XG4iIFwKKyAgICAgICAgIiMgICA8cGFja2FnZV90eXBlPiBjYW4gYmU6XG4iIFwKKyAgICAgICAgIiMgICAgICAnbWlwJyA9IG11c3QgaW5zdGFsbCBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnYW9wJyA9IGF0dGVtcHQgb25seSBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnbWxwJyA9IG11bHRpbGliIHBhY2thZ2VcbiIgXAorICAgICAgICAiIyAgICAgICdsZ3AnID0gbGFuZ3VhZ2UgcGFja2FnZVxuXG4iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUsIG1hbmlmZXN0X3R5cGU9TUFOSUZFU1RfVFlQRV9JTUFHRSk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5tYW5pZmVzdF90eXBlID0gbWFuaWZlc3RfdHlwZQorCisgICAgICAgIGlmIG1hbmlmZXN0X2RpciBpcyBOb25lOgorICAgICAgICAgICAgaWYgbWFuaWZlc3RfdHlwZSAhPSBzZWxmLk1BTklGRVNUX1RZUEVfSU1BR0U6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gbWFuaWZlc3RfZGlyCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYubWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYuaW5pdGlhbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2luaXRpYWxfbWFuaWZlc3QiICUgbWFuaWZlc3RfdHlwZSkKKyAgICAgICAgc2VsZi5maW5hbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2ZpbmFsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisgICAgICAgIHNlbGYuZnVsbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2Z1bGxfbWFuaWZlc3QiICUgbWFuaWZlc3RfdHlwZSkKKworICAgICAgICAjIHBhY2thZ2VzIGluIHRoZSBmb2xsb3dpbmcgdmFycyB3aWxsIGJlIHNwbGl0IGluICdtdXN0IGluc3RhbGwnIGFuZAorICAgICAgICAjICdtdWx0aWxpYicKKyAgICAgICAgc2VsZi52YXJzX3RvX3NwbGl0ID0gWyJQQUNLQUdFX0lOU1RBTEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyJdCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgYSBzdGFuZGFyZCBpbml0aWFsIG1hbmlmZXN0IGZvciBjb3JlLWltYWdlLShtaW5pbWFsfHNhdG98c2F0by1zZGspLgorICAgIFRoaXMgd2lsbCBiZSB1c2VkIGZvciB0ZXN0aW5nIHVudGlsIHRoZSBjbGFzcyBpcyBpbXBsZW1lbnRlZCBwcm9wZXJseSEKKyAgICAiIiIKKyAgICBkZWYgX2NyZWF0ZV9kdW1teV9pbml0aWFsKHNlbGYpOgorICAgICAgICBpbWFnZV9yb290ZnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICBwa2dfbGlzdCA9IGRpY3QoKQorICAgICAgICBpZiBpbWFnZV9yb290ZnMuZmluZCgiY29yZS1pbWFnZS1zYXRvLXNkayIpID4gMDoKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMXSA9IFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvIHBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zZGsgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcgcGFja2FnZWdyb3VwLWNvcmUtcXQtZGVtb2FwcHMgIiBcCisgICAgICAgICAgICAgICAgImFwdCBwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIHBzcGxhc2ggIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggZHBrZyBrZXJuZWwtZGV2IgorICAgICAgICAgICAgcGtnX2xpc3Rbc2VsZi5QS0dfVFlQRV9MQU5HVUFHRV0gPSBcCisgICAgICAgICAgICAgICAgImxvY2FsZS1iYXNlLWVuLXVzIGxvY2FsZS1iYXNlLWVuLWdiIgorICAgICAgICBlbGlmIGltYWdlX3Jvb3Rmcy5maW5kKCJjb3JlLWltYWdlLXNhdG8iKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhciBwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by1nYW1lcyAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgcHNwbGFzaCBhcHQgZHBrZyBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8gcGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKKyAgICAgICAgICAgIHBrZ19saXN0WydsZ3AnXSA9IFwKKyAgICAgICAgICAgICAgICAibG9jYWxlLWJhc2UtZW4tdXMgbG9jYWxlLWJhc2UtZW4tZ2IiCisgICAgICAgIGVsaWYgaW1hZ2Vfcm9vdGZzLmZpbmQoImNvcmUtaW1hZ2UtbWluaW1hbCIpID4gMDoKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMXSA9ICJydW4tcG9zdGluc3RzIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QiCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCwgIncrIikgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBtYW5pZmVzdC53cml0ZShzZWxmLmluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIpCisKKyAgICAgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dfbGlzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0W3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICAiIiIKKyAgICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBpbml0aWFsIG1hbmlmZXN0IHdoaWNoIHdpbGwgYmUgdXNlZCBieSBSb290ZnMgY2xhc3MgdG8KKyAgICBnZW5lcmF0ZSB0aGUgcm9vdGZzCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgdGhlIG1hbmlmZXN0IGFmdGVyIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gaW5zdGFsbGVkLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIFRoaXMgY3JlYXRlcyB0aGUgbWFuaWZlc3QgYWZ0ZXIgdGhlIHBhY2thZ2UgaW4gaW5pdGlhbCBtYW5pZmVzdCBoYXMgYmVlbgorICAgIGR1bW15IGluc3RhbGxlZC4gSXQgbGlzdHMgYWxsICp0byBiZSBpbnN0YWxsZWQqIHBhY2thZ2VzLiBUaGVyZSBpcyBubyByZWFsCisgICAgaW5zdGFsbGF0aW9uLCBqdXN0IGEgdGVzdC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHBhcnNlcyBhbiBpbml0aWFsIG1hbmlmZXN0IGFuZCByZXR1cm5zIGEgZGljdGlvbmFyeQorICAgIG9iamVjdCB3aXRoIHRoZSBtdXN0IGluc3RhbGwsIGF0dGVtcHQgb25seSwgbXVsdGlsaWIgYW5kIGxhbmd1YWdlIHBhY2thZ2VzLgorICAgICIiIgorICAgIGRlZiBwYXJzZV9pbml0aWFsX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCkgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBtYW5pZmVzdC5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgY29tbWVudCA9IHJlLm1hdGNoKCJeIy4qIiwgbGluZSkKKyAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIl4oJXN8JXN8JXN8JXMpLCguKikkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlBLR19UWVBFX01VTFRJTElCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9MQU5HVUFHRSkKKyAgICAgICAgICAgICAgICBwa2cgPSByZS5tYXRjaChwYXR0ZXJuLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgY29tbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHBrZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3R5cGUgPSBwa2cuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWUgPSBwa2cuZ3JvdXAoMikKKworICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdID0gW3BrZ19uYW1lXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0uYXBwZW5kKHBrZ19uYW1lKQorCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICAnJycKKyAgICBUaGlzIGZvbGxvd2luZyBmdW5jdGlvbiBwYXJzZXMgYSBmdWxsIG1hbmlmZXN0IGFuZCByZXR1cm4gYSBsaXN0CisgICAgb2JqZWN0IHdpdGggcGFja2FnZXMuCisgICAgJycnCisgICAgZGVmIHBhcnNlX2Z1bGxfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgIGluc3RhbGxlZF9wa2dzID0gbGlzdCgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmZ1bGxfbWFuaWZlc3QpOgorICAgICAgICAgICAgYmIubm90ZSgnZnVsbCBtYW5pZmVzdCBub3QgZXhpc3QnKQorICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZnVsbF9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLmFwcGVuZChwa2cuc3RyaXAoKSkKKworICAgICAgICByZXR1cm4gaW5zdGFsbGVkX3BrZ3MKKworCitjbGFzcyBScG1NYW5pZmVzdChNYW5pZmVzdCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2JqZWN0IHdpdGggbWlwIGFuZCBtbHAgcGFja2FnZXMuCisgICAgIiIiCisgICAgZGVmIF9zcGxpdF9tdWx0aWxpYihzZWxmLCBwa2dfbGlzdCk6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMCisKKyAgICAgICAgICAgIG1sX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGZvciBtbF92YXJpYW50IGluIG1sX3ZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKG1sX3ZhcmlhbnQgKyAnLScpOgorICAgICAgICAgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVMVElMSUIKKworICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gPSBwa2cKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gKz0gIiAiICsgcGtnCisKKyAgICAgICAgcmV0dXJuIHBrZ3MKKworICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJzX3RvX3NwbGl0OgorICAgICAgICAgICAgICAgICAgICBzcGxpdF9wa2dzID0gc2VsZi5fc3BsaXRfbXVsdGlsaWIoc2VsZi5kLmdldFZhcih2YXIsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QocGtncy5pdGVtcygpICsgc3BsaXRfcGtncy5pdGVtcygpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ19saXN0ID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1tzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXV0gPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBwYXNzCisKKworY2xhc3MgT3BrZ01hbmlmZXN0KE1hbmlmZXN0KToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSBvYmplY3Qgd2l0aCBtaXAgYW5kIG1scCBwYWNrYWdlcy4KKyAgICAiIiIKKyAgICBkZWYgX3NwbGl0X211bHRpbGliKHNlbGYsIHBrZ19saXN0KToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnX2xpc3Quc3BsaXQoKToKKyAgICAgICAgICAgIHBrZ190eXBlID0gc2VsZi5QS0dfVFlQRV9NVVNUX0lOU1RBTEwKKworICAgICAgICAgICAgbWxfdmFyaWFudHMgPSBzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpLnNwbGl0KCkKKworICAgICAgICAgICAgZm9yIG1sX3ZhcmlhbnQgaW4gbWxfdmFyaWFudHM6CisgICAgICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgobWxfdmFyaWFudCArICctJyk6CisgICAgICAgICAgICAgICAgICAgIHBrZ190eXBlID0gc2VsZi5QS0dfVFlQRV9NVUxUSUxJQgorCisgICAgICAgICAgICBpZiBub3QgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSA9IHBrZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSArPSAiICIgKyBwa2cKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCwgIncrIikgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBtYW5pZmVzdC53cml0ZShzZWxmLmluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIpCisKKyAgICAgICAgICAgIGZvciB2YXIgaW4gc2VsZi52YXJfbWFwc1tzZWxmLm1hbmlmZXN0X3R5cGVdOgorICAgICAgICAgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcnNfdG9fc3BsaXQ6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0X3BrZ3MgPSBzZWxmLl9zcGxpdF9tdWx0aWxpYihzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0X3BrZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzID0gZGljdChwa2dzLml0ZW1zKCkgKyBzcGxpdF9wa2dzLml0ZW1zKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX2xpc3QgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3NlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXVt2YXJdXSA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ3NbcGtnX3R5cGVdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKCIlcywlc1xuIiAlIChwa2dfdHlwZSwgcGtnKSkKKworICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGVfZnVsbChzZWxmLCBwbSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmluaXRpYWxfbWFuaWZlc3QpOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfaW5pdGlhbCgpCisKKyAgICAgICAgaW5pdGlhbF9tYW5pZmVzdCA9IHNlbGYucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IGxpc3QoKQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gaW5pdGlhbF9tYW5pZmVzdDoKKyAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCArPSBpbml0aWFsX21hbmlmZXN0W3BrZ190eXBlXQorICAgICAgICBpZiBsZW4ocGtnc190b19pbnN0YWxsKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3V0cHV0ID0gcG0uZHVtbXlfaW5zdGFsbChwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZnVsbF9tYW5pZmVzdCwgJ3crJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBwa2dfcmUgPSByZS5jb21waWxlKCdeSW5zdGFsbGluZyAoW14gXSspIFteIF0uKicpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzZXQob3V0cHV0LnNwbGl0KCdcbicpKToKKyAgICAgICAgICAgICAgICBtID0gcGtnX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUobS5ncm91cCgxKSArICdcbicpCisKKyAgICAgICAgcmV0dXJuCisKKworY2xhc3MgRHBrZ01hbmlmZXN0KE1hbmlmZXN0KToKKyAgICBkZWYgY3JlYXRlX2luaXRpYWwoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBwa2dfbGlzdCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorCisgICAgICAgICAgICAgICAgaWYgcGtnX2xpc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnX2xpc3Quc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXVt2YXJdLCBwa2cpKQorCisgICAgZGVmIGNyZWF0ZV9maW5hbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisKK2RlZiBjcmVhdGVfbWFuaWZlc3QoZCwgZmluYWxfbWFuaWZlc3Q9RmFsc2UsIG1hbmlmZXN0X2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfSU1BR0UpOgorICAgIG1hbmlmZXN0X21hcCA9IHsncnBtJzogUnBtTWFuaWZlc3QsCisgICAgICAgICAgICAgICAgICAgICdpcGsnOiBPcGtnTWFuaWZlc3QsCisgICAgICAgICAgICAgICAgICAgICdkZWInOiBEcGtnTWFuaWZlc3R9CisKKyAgICBtYW5pZmVzdCA9IG1hbmlmZXN0X21hcFtkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpXShkLCBtYW5pZmVzdF9kaXIsIG1hbmlmZXN0X3R5cGUpCisKKyAgICBpZiBmaW5hbF9tYW5pZmVzdDoKKyAgICAgICAgbWFuaWZlc3QuY3JlYXRlX2ZpbmFsKCkKKyAgICBlbHNlOgorICAgICAgICBtYW5pZmVzdC5jcmVhdGVfaW5pdGlhbCgpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5IGIvbWV0YS9saWIvb2UvcGFja2FnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc2NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvcGFja2FnZS5weQpAQCAtMCwwICsxLDEyNSBAQAorZGVmIHJ1bnN0cmlwKGFyZyk6CisgICAgIyBGdW5jdGlvbiB0byBzdHJpcCBhIHNpbmdsZSBmaWxlLCBjYWxsZWQgZnJvbSBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgYmVsb3cKKyAgICAjIEEgd29ya2luZyAnZmlsZScgKG9uZSB3aGljaCB3b3JrcyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSkKKyAgICAjCisgICAgIyBUaGUgZWxmdHlwZSBpcyBhIGJpdCBwYXR0ZXJuIChleHBsYWluZWQgaW4gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzKSB0byB0ZWxsCisgICAgIyB1cyB3aGF0IHR5cGUgb2YgZmlsZSB3ZSdyZSBwcm9jZXNzaW5nLi4uCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKworICAgIGltcG9ydCBjb21tYW5kcywgc3RhdCwgc3VicHJvY2VzcworCisgICAgKGZpbGUsIGVsZnR5cGUsIHN0cmlwKSA9IGFyZworCisgICAgbmV3bW9kZSA9IE5vbmUKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGZpbGUsIG9zLldfT0spIG9yIG9zLmFjY2VzcyhmaWxlLCBvcy5SX09LKToKKyAgICAgICAgb3JpZ21vZGUgPSBvcy5zdGF0KGZpbGUpW3N0YXQuU1RfTU9ERV0KKyAgICAgICAgbmV3bW9kZSA9IG9yaWdtb2RlIHwgc3RhdC5TX0lXUklURSB8IHN0YXQuU19JUkVBRAorICAgICAgICBvcy5jaG1vZChmaWxlLCBuZXdtb2RlKQorCisgICAgZXh0cmFmbGFncyA9ICIiCisKKyAgICAjIGtlcm5lbCBtb2R1bGUgICAgCisgICAgaWYgZWxmdHlwZSAmIDE2OgorICAgICAgICBleHRyYWZsYWdzID0gIi0tc3RyaXAtZGVidWcgLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tcHJlc2VydmUtZGF0ZXMiCisgICAgIyAuc28gYW5kIHNoYXJlZCBsaWJyYXJ5CisgICAgZWxpZiAiLnNvIiBpbiBmaWxlIGFuZCBlbGZ0eXBlICYgODoKKyAgICAgICAgZXh0cmFmbGFncyA9ICItLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50IC0tcmVtb3ZlLXNlY3Rpb249Lm5vdGUgLS1zdHJpcC11bm5lZWRlZCIKKyAgICAjIHNoYXJlZCBvciBleGVjdXRhYmxlOgorICAgIGVsaWYgZWxmdHlwZSAmIDggb3IgZWxmdHlwZSAmIDQ6CisgICAgICAgIGV4dHJhZmxhZ3MgPSAiLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIgorCisgICAgc3RyaXBjbWQgPSAiJyVzJyAlcyAnJXMnIiAlIChzdHJpcCwgZXh0cmFmbGFncywgZmlsZSkKKyAgICBiYi5kZWJ1ZygxLCAicnVuc3RyaXA6ICVzIiAlIHN0cmlwY21kKQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChzdHJpcGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBiYi5lcnJvcigicnVuc3RyaXA6ICclcycgc3RyaXAgY29tbWFuZCBmYWlsZWQgd2l0aCAlcyAoJXMpIiAlIChzdHJpcGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBpZiBuZXdtb2RlOgorICAgICAgICBvcy5jaG1vZChmaWxlLCBvcmlnbW9kZSkKKworICAgIHJldHVybgorCisKK2RlZiBmaWxlX3RyYW5zbGF0ZShmaWxlKToKKyAgICBmdCA9IGZpbGUucmVwbGFjZSgiQCIsICJAYXRAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIiAiLCAiQHNwYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJcdCIsICJAdGFiQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJbIiwgIkBvcGVuYnJhY2VAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIl0iLCAiQGNsb3NlYnJhY2VAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIl8iLCAiQHVuZGVyc2NvcmVAIikKKyAgICByZXR1cm4gZnQKKworZGVmIGZpbGVkZXBydW5uZXIoYXJnKToKKyAgICBpbXBvcnQgcmUsIHN1YnByb2Nlc3MsIHNobGV4CisKKyAgICAocGtnLCBwa2dmaWxlcywgcnBtZGVwcywgcGtnZGVzdCkgPSBhcmcKKyAgICBwcm92aWRlcyA9IHt9CisgICAgcmVxdWlyZXMgPSB7fQorCisgICAgciA9IHJlLmNvbXBpbGUocidbPD49XSsgK1teIF0qJykKKworICAgIGRlZiBwcm9jZXNzX2RlcHMocGlwZSwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpOgorICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICAgICAgZiA9IGxpbmUuc3BsaXQoIiAiLCAxKVswXS5zdHJpcCgpCisgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgiICIsIDEpWzFdLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJSZXF1aXJlczoiKToKKyAgICAgICAgICAgICAgICBpID0gcmVxdWlyZXMKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJQcm92aWRlczoiKToKKyAgICAgICAgICAgICAgICBpID0gcHJvdmlkZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZmlsZSA9IGYucmVwbGFjZShwa2dkZXN0ICsgIi8iICsgcGtnLCAiIikKKyAgICAgICAgICAgIGZpbGUgPSBmaWxlX3RyYW5zbGF0ZShmaWxlKQorICAgICAgICAgICAgdmFsdWUgPSBsaW5lLnNwbGl0KCI6IiwgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgdmFsdWUgPSByLnN1YihyJyhcZzwwPiknLCB2YWx1ZSkKKworICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgicnBtbGliKCIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB2YWx1ZSA9PSAicHl0aG9uIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlsZSBub3QgaW4gaToKKyAgICAgICAgICAgICAgICBpW2ZpbGVdID0gW10KKyAgICAgICAgICAgIGlbZmlsZV0uYXBwZW5kKHZhbHVlKQorCisgICAgICAgIHJldHVybiBwcm92aWRlcywgcmVxdWlyZXMKKworICAgIHRyeToKKyAgICAgICAgZGVwX3BvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdChycG1kZXBzKSArIHBrZ2ZpbGVzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwcm92aWRlcywgcmVxdWlyZXMgPSBwcm9jZXNzX2RlcHMoZGVwX3BvcGVuLnN0ZG91dCwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoInJwbWRlcHM6ICclcycgY29tbWFuZCBmYWlsZWQsICclcyciICUgKHNobGV4LnNwbGl0KHJwbWRlcHMpICsgcGtnZmlsZXMsIGUpKQorICAgICAgICByYWlzZSBlCisKKyAgICByZXR1cm4gKHBrZywgcHJvdmlkZXMsIHJlcXVpcmVzKQorCisKK2RlZiByZWFkX3NobGliX3Byb3ZpZGVycyhkKToKKyAgICBpbXBvcnQgcmUKKworICAgIHNobGliX3Byb3ZpZGVyID0ge30KKyAgICBzaGxpYnNfZGlycyA9IGQuZ2V0VmFyKCdTSExJQlNESVJTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGxpc3RfcmUgPSByZS5jb21waWxlKCdeKC4qKVwubGlzdCQnKQorICAgICMgR28gZnJvbSBsZWFzdCB0byBtb3N0IHNwZWNpZmljIHNpbmNlIHRoZSBsYXN0IG9uZSBmb3VuZCB3aW5zCisgICAgZm9yIGRpciBpbiByZXZlcnNlZChzaGxpYnNfZGlycyk6CisgICAgICAgIGJiLmRlYnVnKDIsICJSZWFkaW5nIHNobGliIHByb3ZpZGVycyBpbiAlcyIgJSAoZGlyKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKGRpcik6CisgICAgICAgICAgICBtID0gbGlzdF9yZS5tYXRjaChmaWxlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkZXBfcGtnID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGZkID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmaWxlKSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBzID0gbC5zdHJpcCgpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgaWYgc1swXSBub3QgaW4gc2hsaWJfcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXSA9IHt9CisgICAgICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW3NbMF1dW3NbMV1dID0gKGRlcF9wa2csIHNbMl0pCisgICAgcmV0dXJuIHNobGliX3Byb3ZpZGVyCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkgYi9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyZWQ0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weQpAQCAtMCwwICsxLDE5MDAgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IG9zCitpbXBvcnQgZ2xvYgoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCByZQoraW1wb3J0IGJiCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBvZS51dGlscworCisKKyMgdGhpcyBjYW4gYmUgdXNlZCBieSBhbGwgUE0gYmFja2VuZHMgdG8gY3JlYXRlIHRoZSBpbmRleCBmaWxlcyBpbiBwYXJhbGxlbAorZGVmIGNyZWF0ZV9pbmRleChhcmcpOgorICAgIGluZGV4X2NtZCA9IGFyZworCisgICAgdHJ5OgorICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgJyVzJyAuLi4iICUgaW5kZXhfY21kKQorICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChpbmRleF9jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuKCJJbmRleCBjcmVhdGlvbiBjb21tYW5kICclcycgZmFpbGVkIHdpdGggcmV0dXJuIGNvZGUgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGlmIHJlc3VsdDoKKyAgICAgICAgYmIubm90ZShyZXN1bHQpCisKKyAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIEluZGV4ZXIob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIGRlcGxveV9kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IGRlcGxveV9kaXIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJwbUluZGV4ZXIoSW5kZXhlcik6CisgICAgZGVmIGdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3Qoc2VsZiwgYXJjaF92YXI9Tm9uZSwgb3NfdmFyPU5vbmUpOgorICAgICAgICBwYWNrYWdlX2FyY2hzID0geworICAgICAgICAgICAgJ2RlZmF1bHQnOiBbXSwKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldF9vcyA9IHsKKyAgICAgICAgICAgICdkZWZhdWx0JzogIiIsCisgICAgICAgIH0KKworICAgICAgICBpZiBhcmNoX3ZhciBpcyBub3QgTm9uZSBhbmQgb3NfdmFyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcihhcmNoX3ZhciwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddLnJldmVyc2UoKQorICAgICAgICAgICAgdGFyZ2V0X29zWydkZWZhdWx0J10gPSBzZWxmLmQuZ2V0VmFyKG9zX3ZhciwgVHJ1ZSkuc3RyaXAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcigiUEFDS0FHRV9BUkNIUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgICMgYXJjaCBvcmRlciBpcyByZXZlcnNlZC4gIFRoaXMgZW5zdXJlcyB0aGUgLWJlc3QtIG1hdGNoIGlzCisgICAgICAgICAgICAjIGxpc3RlZCBmaXJzdCEKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXS5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRhcmdldF9vc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkuc3RyaXAoKQorICAgICAgICAgICAgbXVsdGlsaWJzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBleHQgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmVfa2V5ID0gIkRFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0iICsgZWV4dFsxXQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmUgPSBsb2NhbGRhdGEuZ2V0VmFyKGRlZmF1bHRfdHVuZV9rZXksIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0X3R1bmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdHVuZV9rZXkgPSAiREVGQVVMVFRVTkVfTUxfIiArIGVleHRbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdHVuZSA9IGxvY2FsZGF0YS5nZXRWYXIoZGVmYXVsdF90dW5lX2tleSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlZmF1bHRfdHVuZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgZGVmYXVsdF90dW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2FyY2hzW2VleHRbMV1dID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9BUkNIUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2FyY2hzW2VleHRbMV1dLnJldmVyc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X29zW2VleHRbMV1dID0gbG9jYWxkYXRhLmdldFZhcigiVEFSR0VUX09TIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkuc3RyaXAoKQorCisgICAgICAgIG1sX3ByZWZpeF9saXN0ID0gZGljdCgpCisgICAgICAgIGZvciBtbGliIGluIHBhY2thZ2VfYXJjaHM6CisgICAgICAgICAgICBpZiBtbGliID09ICdkZWZhdWx0JzoKKyAgICAgICAgICAgICAgICBtbF9wcmVmaXhfbGlzdFttbGliXSA9IHBhY2thZ2VfYXJjaHNbbWxpYl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0gPSBsaXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBwYWNrYWdlX2FyY2hzW21saWJdOgorICAgICAgICAgICAgICAgICAgICBpZiBhcmNoIGluIFsnYWxsJywgJ25vYXJjaCcsICdhbnknXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdLmFwcGVuZChhcmNoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0uYXBwZW5kKG1saWIgKyAiXyIgKyBhcmNoKQorCisgICAgICAgIHJldHVybiAobWxfcHJlZml4X2xpc3QsIHRhcmdldF9vcykKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2RrX3BrZ19hcmNocyA9IChzZWxmLmQuZ2V0VmFyKCdTREtfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisgICAgICAgIGFsbF9tbGJfcGtnX2FyY2hzID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKworICAgICAgICBtbGJfcHJlZml4X2xpc3QgPSBzZWxmLmdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3QoKVswXQorCisgICAgICAgIGFyY2hzID0gc2V0KCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gbWxiX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgYXJjaHMgPSBhcmNocy51bmlvbihzZXQoaS5yZXBsYWNlKCctJywgJ18nKSBmb3IgaSBpbiBtbGJfcHJlZml4X2xpc3RbaXRlbV0pKQorCisgICAgICAgIGlmIGxlbihhcmNocykgPT0gMDoKKyAgICAgICAgICAgIGFyY2hzID0gYXJjaHMudW5pb24oc2V0KGFsbF9tbGJfcGtnX2FyY2hzKSkKKworICAgICAgICBhcmNocyA9IGFyY2hzLnVuaW9uKHNldChzZGtfcGtnX2FyY2hzKSkKKworICAgICAgICBycG1fY3JlYXRlcmVwbyA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiY3JlYXRlcmVwbyIpCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgcGtnZmVlZF9ncGdfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfTkFNRScsIFRydWUpCisgICAgICAgICAgICBwa2dmZWVkX2dwZ19wYXNzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX0dQR19QQVNTUEhSQVNFX0ZJTEUnLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnZmVlZF9ncGdfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX3Bhc3MgPSBOb25lCisgICAgICAgIGdwZ19iaW4gPSBzZWxmLmQuZ2V0VmFyKCdHUEdfQklOJywgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgICAgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJncGciKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICByZXBvX3NpZ25fY21kcyA9IFtdCisgICAgICAgIHJwbV9kaXJzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGFyY2ggaW4gYXJjaHM6CisgICAgICAgICAgICBkYnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLCAncnBtZGInLCBhcmNoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGJwYXRoKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZGJwYXRoLCBUcnVlKQorICAgICAgICAgICAgYXJjaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJjaF9kaXIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGluZGV4X2NtZHMuYXBwZW5kKCIlcyAtLWRicGF0aCAlcyAtLXVwZGF0ZSAtcSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChycG1fY3JlYXRlcmVwbywgZGJwYXRoLCBhcmNoX2RpcikpCisgICAgICAgICAgICBpZiBwa2dmZWVkX2dwZ19uYW1lOgorICAgICAgICAgICAgICAgIHJlcG9tZF9maWxlID0gb3MucGF0aC5qb2luKGFyY2hfZGlyLCAncmVwb2RhdGEnLCAncmVwb21kLnhtbCcpCisgICAgICAgICAgICAgICAgZ3BnX2NtZCA9ICIlcyAtLWRldGFjaC1zaWduIC0tYXJtb3IgLS1iYXRjaCAtLW5vLXR0eSAtLXllcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcGFzc3BocmFzZS1maWxlICclcycgLXUgJyVzJyAlcyIgJSAoZ3BnX2JpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnZmVlZF9ncGdfcGFzcywgcGtnZmVlZF9ncGdfbmFtZSwgcmVwb21kX2ZpbGUpCisgICAgICAgICAgICAgICAgcmVwb19zaWduX2NtZHMuYXBwZW5kKGdwZ19jbWQpCisKKyAgICAgICAgICAgIHJwbV9kaXJzX2ZvdW5kID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBycG1fZGlyc19mb3VuZDoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyBpbiAlcyIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENyZWF0ZSByZXBvZGF0YQorICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorICAgICAgICAjIFNpZ24gcmVwb21kCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHJlcG9fc2lnbl9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorICAgICAgICAjIENvcHkgcHVia2V5KHMpIHRvIHJlcG8KKyAgICAgICAgZGlzdHJvX3ZlcnNpb24gPSBzZWxmLmQuZ2V0VmFyKCdESVNUUk9fVkVSU0lPTicsIFRydWUpIG9yICJvZS4wIgorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5MihzZWxmLmQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSUE0tR1BHLUtFWS0lcycgJSBkaXN0cm9fdmVyc2lvbikpCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfUFVCS0VZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JFUE9EQVRBLUdQRy1LRVktJXMnICUgZGlzdHJvX3ZlcnNpb24pKQorCisKK2NsYXNzIE9wa2dJbmRleGVyKEluZGV4ZXIpOgorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgYXJjaF92YXJzID0gWyJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsCisgICAgICAgICAgICAgICAgICAgICAiU0RLX1BBQ0tBR0VfQVJDSFMiLAorICAgICAgICAgICAgICAgICAgICAgIk1VTFRJTElCX0FSQ0hTIl0KKworICAgICAgICBvcGtnX2luZGV4X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1tYWtlLWluZGV4IikKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgIlBhY2thZ2VzIikpOgorICAgICAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCAiUGFja2FnZXMiKSwgInciKS5jbG9zZSgpCisKKyAgICAgICAgaW5kZXhfY21kcyA9IFtdCisgICAgICAgIGZvciBhcmNoX3ZhciBpbiBhcmNoX3ZhcnM6CisgICAgICAgICAgICBhcmNocyA9IHNlbGYuZC5nZXRWYXIoYXJjaF92YXIsIFRydWUpCisgICAgICAgICAgICBpZiBhcmNocyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcGtnc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgICAgIHBrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihwa2dzX2RpciwgIlBhY2thZ2VzIikKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBrZ3NfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dzX2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBvcGVuKHBrZ3NfZmlsZSwgInciKS5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZCgnJXMgLXIgJXMgLXAgJXMgLW0gJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BrZ19pbmRleF9jbWQsIHBrZ3NfZmlsZSwgcGtnc19maWxlLCBwa2dzX2RpcikpCisKKyAgICAgICAgaWYgbGVuKGluZGV4X2NtZHMpID09IDA6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgaW4gJXMhIiAlIHNlbGYuZGVwbG95X2RpcikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKGluZGV4X2NtZHMsIGNyZWF0ZV9pbmRleCkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgYmIuZmF0YWwoJyVzJyAlICgnXG4nLmpvaW4ocmVzdWx0KSkpCisKKworCitjbGFzcyBEcGtnSW5kZXhlcihJbmRleGVyKToKKyAgICBkZWYgX2NyZWF0ZV9jb25maWdzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJsaXN0cyIsICJwYXJ0aWFsIikpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJhcHQuY29uZi5kIikpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJwcmVmZXJlbmNlcy5kIikpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInByZWZlcmVuY2VzIiksCisgICAgICAgICAgICAgICAgInciKSBhcyBwcmVmc19maWxlOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAic291cmNlcy5saXN0IiksCisgICAgICAgICAgICAgICAgIncrIikgYXMgc291cmNlc19maWxlOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggb3BlbihzZWxmLmFwdF9jb25mX2ZpbGUsICJ3IikgYXMgYXB0X2NvbmY6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZC5leHBhbmQoIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfSIpLAorICAgICAgICAgICAgICAgICJhcHQiLCAiYXB0LmNvbmYuc2FtcGxlIikpIGFzIGFwdF9jb25mX3NhbXBsZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBhcHRfY29uZl9zYW1wbGUucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjUk9PVEZTIyIsICIvZGV2L251bGwiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjQVBUQ09ORiMiLCBzZWxmLmFwdF9jb25mX2RpciwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYXB0X2NvbmYud3JpdGUobGluZSArICJcbiIpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5leHBhbmQoIiR7QVBUQ09ORl9UQVJHRVR9IiksCisgICAgICAgICAgICAgICAgImFwdC1mdHBhcmNoaXZlIikKKyAgICAgICAgc2VsZi5hcHRfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAiYXB0LmNvbmYiKQorICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlncygpCisKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgcGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpCisgICAgICAgIGlmIHBrZ19hcmNocyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyY2hfbGlzdCA9IHBrZ19hcmNocy5zcGxpdCgpCisgICAgICAgIHNka19wa2dfYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKCdTREtfUEFDS0FHRV9BUkNIUycsIFRydWUpCisgICAgICAgIGlmIHNka19wa2dfYXJjaHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgYSBpbiBzZGtfcGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgYSBub3QgaW4gcGtnX2FyY2hzOgorICAgICAgICAgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGEpCisKKyAgICAgICAgYWxsX21sYl9wa2dfYXJjaF9saXN0ID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKyAgICAgICAgYXJjaF9saXN0LmV4dGVuZChhcmNoIGZvciBhcmNoIGluIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCBpZiBhcmNoIG5vdCBpbiBhcmNoX2xpc3QpCisKKyAgICAgICAgYXB0X2Z0cGFyY2hpdmUgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImFwdC1mdHBhcmNoaXZlIikKKyAgICAgICAgZ3ppcCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZ3ppcCIpCisKKyAgICAgICAgaW5kZXhfY21kcyA9IFtdCisgICAgICAgIGRlYl9kaXJzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgYXJjaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJjaF9kaXIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNtZCA9ICJjZCAlczsgUFNFVURPX1VOTE9BRD0xICVzIHBhY2thZ2VzIC4gPiBQYWNrYWdlczsiICUgKGFyY2hfZGlyLCBhcHRfZnRwYXJjaGl2ZSkKKworICAgICAgICAgICAgY21kICs9ICIlcyAtZmMgUGFja2FnZXMgPiBQYWNrYWdlcy5nejsiICUgZ3ppcAorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGFyY2hfZGlyLCAiUmVsZWFzZSIpLCAidysiKSBhcyByZWxlYXNlOgorICAgICAgICAgICAgICAgIHJlbGVhc2Uud3JpdGUoIkxhYmVsOiAlc1xuIiAlIGFyY2gpCisKKyAgICAgICAgICAgIGNtZCArPSAiUFNFVURPX1VOTE9BRD0xICVzIHJlbGVhc2UgLiA+PiBSZWxlYXNlIiAlIGFwdF9mdHBhcmNoaXZlCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluZGV4X2NtZHMuYXBwZW5kKGNtZCkKKworICAgICAgICAgICAgZGViX2RpcnNfZm91bmQgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IGRlYl9kaXJzX2ZvdW5kOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIGluICVzIiAlIHNlbGYuZGVwbG95X2RpcikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKGluZGV4X2NtZHMsIGNyZWF0ZV9pbmRleCkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgYmIuZmF0YWwoJyVzJyAlICgnXG4nLmpvaW4ocmVzdWx0KSkpCisKKworCitjbGFzcyBQa2dzTGlzdChvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2Rpcik6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5yb290ZnNfZGlyID0gcm9vdGZzX2RpcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgUnBtUGtnc0xpc3QoUGtnc0xpc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCByb290ZnNfZGlyLCBhcmNoX3Zhcj1Ob25lLCBvc192YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJwbVBrZ3NMaXN0LCBzZWxmKS5fX2luaXRfXyhkLCByb290ZnNfZGlyKQorCisgICAgICAgIHNlbGYucnBtX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtIikKKyAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIgPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZnNfZGlyLCAndmFyL2xpYi9ycG0nKQorCisgICAgICAgIHNlbGYubWxfcHJlZml4X2xpc3QsIHNlbGYubWxfb3NfbGlzdCA9IFwKKyAgICAgICAgICAgIFJwbUluZGV4ZXIoZCwgcm9vdGZzX2RpcikuZ2V0X21sX3ByZWZpeF9hbmRfb3NfbGlzdChhcmNoX3Zhciwgb3NfdmFyKQorCisgICAgICAgICMgRGV0ZXJtaW5lIHJwbSB2ZXJzaW9uCisgICAgICAgIGNtZCA9ICIlcyAtLXZlcnNpb24iICUgc2VsZi5ycG1fY21kCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJHZXR0aW5nIHJwbSB2ZXJzaW9uIGZhaWxlZC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICBzZWxmLnJwbV92ZXJzaW9uID0gaW50KG91dHB1dC5zcGxpdCgpWy0xXS5zcGxpdCgnLicpWzBdKQorCisgICAgJycnCisgICAgVHJhbnNsYXRlIHRoZSBSUE0vU21hcnQgZm9ybWF0IG5hbWVzIHRvIHRoZSBPRSBtdWx0aWxpYiBmb3JtYXQgbmFtZXMKKyAgICAnJycKKyAgICBkZWYgX3BrZ190cmFuc2xhdGVfc21hcnRfdG9fb2Uoc2VsZiwgcGtnLCBhcmNoKToKKyAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICBuZXdfYXJjaCA9IGFyY2gKKyAgICAgICAgZml4ZWRfYXJjaCA9IGFyY2gucmVwbGFjZSgnXycsICctJykKKyAgICAgICAgZm91bmQgPSAwCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfcHJlZml4X2xpc3Q6CisgICAgICAgICAgICBmb3IgY21wX2FyY2ggaW4gc2VsZi5tbF9wcmVmaXhfbGlzdFttbGliXToKKyAgICAgICAgICAgICAgICBmaXhlZF9jbXBfYXJjaCA9IGNtcF9hcmNoLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICAgICAgaWYgZml4ZWRfYXJjaCA9PSBmaXhlZF9jbXBfYXJjaDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gcGtnCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJjaCA9IGNtcF9hcmNoCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gbWxpYiArICctJyArIHBrZworICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHN0cmlwIG9mZiB0aGUgJHttbGlifV8gcHJlZml4IG9uIHRoZSBhcmNoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJjaCA9IGNtcF9hcmNoLnJlcGxhY2UobWxpYiArICdfJywgJycpCisKKyAgICAgICAgICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBidWcgMzU2NS4gU2ltcGx5IGxvb2sgdG8gc2VlIGlmIHdlCisgICAgICAgICAgICAgICAgICAgICMga25vdyBvZiBhIHBhY2thZ2Ugd2l0aCB0aGF0IG5hbWUsIGlmIG5vdCB0cnkgYWdhaW4hCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW50aW1lLXJldmVyc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGZvdW5kID09IDEgYW5kIGZpeGVkX2FyY2ggPT0gZml4ZWRfY21wX2FyY2g6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgI2JiLm5vdGUoJyVzLCAlcyAtPiAlcywgJXMnICUgKHBrZywgYXJjaCwgbmV3X3BrZywgbmV3X2FyY2gpKQorICAgICAgICByZXR1cm4gbmV3X3BrZywgbmV3X2FyY2gKKworICAgIGRlZiBfbGlzdF9wa2dfZGVwcyhzZWxmKToKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtcmVzb2x2ZSIpLAorICAgICAgICAgICAgICAgIi10Iiwgc2VsZi5pbWFnZV9ycG1saWJdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCB0aGUgcGFja2FnZSBkZXBlbmRlbmNpZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCInZGVwcycgZm9ybWF0IGRlcGVuZGVuY3kgbGlzdGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBycG0gNCBzaW5jZSBycG1yZXNvbHZlIGRvZXMgbm90IHdvcmsiKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RfcGtnX2RlcHMoKQorCisgICAgICAgIGNtZCA9IHNlbGYucnBtX2NtZCArICcgLS1yb290ICcgKyBzZWxmLnJvb3Rmc19kaXIKKyAgICAgICAgY21kICs9ICcgLUQgIl9kYnBhdGggL3Zhci9saWIvcnBtIiAtcWEnCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgIGNtZCArPSAiIC0tcWYgJ1sle05BTUV9ICV7QVJDSH0gJXtWRVJTSU9OfVxuXSciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgKz0gIiAtLXFmICdbJXtOQU1FfSAle0FSQ0h9ICV7VkVSU0lPTn0gJXtQQUNLQUdFT1JJR0lOfVxuXSciCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKQorCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgb3V0cHV0ID0gbGlzdCgpCisgICAgICAgIGZvciBsaW5lIGluIHRtcF9vdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiBsZW4obGluZS5zdHJpcCgpKSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwa2cgPSBsaW5lLnNwbGl0KClbMF0KKyAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoKVsyXQorICAgICAgICAgICAgIyBTa2lwIEdQRyBrZXlzCisgICAgICAgICAgICBpZiBwa2cgPT0gJ2dwZy1wdWJrZXknOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICAgICAgcGtnb3JpZ2luID0gInVua25vd24iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ29yaWdpbiA9IGxpbmUuc3BsaXQoKVszXQorICAgICAgICAgICAgbmV3X3BrZywgbmV3X2FyY2ggPSBzZWxmLl9wa2dfdHJhbnNsYXRlX3NtYXJ0X3RvX29lKHBrZywgYXJjaCkKKworICAgICAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcycgJSAobmV3X3BrZywgbmV3X2FyY2gpKQorICAgICAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzICVzICVzJyAlIChuZXdfcGtnLCBwa2dvcmlnaW4sIG5ld19hcmNoKSkKKyAgICAgICAgICAgIGVsaWYgZm9ybWF0ID09ICJ2ZXIiOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzICVzICVzJyAlIChuZXdfcGtnLCBuZXdfYXJjaCwgdmVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJXMnICUgKG5ld19wa2cpKQorCisgICAgICAgICAgICBvdXRwdXQuc29ydCgpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihvdXRwdXQpCisKKworY2xhc3MgT3BrZ1BrZ3NMaXN0KFBrZ3NMaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2RpciwgY29uZmlnX2ZpbGUpOgorICAgICAgICBzdXBlcihPcGtnUGtnc0xpc3QsIHNlbGYpLl9faW5pdF9fKGQsIHJvb3Rmc19kaXIpCisKKyAgICAgICAgc2VsZi5vcGtnX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZyIpCisgICAgICAgIHNlbGYub3BrZ19hcmdzID0gIi1mICVzIC1vICVzICIgJSAoY29uZmlnX2ZpbGUsIHJvb3Rmc19kaXIpCisgICAgICAgIHNlbGYub3BrZ19hcmdzICs9IHNlbGYuZC5nZXRWYXIoIk9QS0dfQVJHUyIsIFRydWUpCisKKyAgICBkZWYgbGlzdChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIG9wa2dfcXVlcnlfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvcGtnLXF1ZXJ5LWhlbHBlci5weSIpCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtYSIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgY21kID0gIiVzICVzIHN0YXR1cyB8ICVzIC1mIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsIG9wa2dfcXVlcnlfY21kKQorICAgICAgICBlbGlmIGZvcm1hdCA9PSAidmVyIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtdiIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgY21kID0gIiVzICVzIHN0YXR1cyB8ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsIG9wa2dfcXVlcnlfY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzICVzIGxpc3RfaW5zdGFsbGVkIHwgY3V0IC1kJyAnIC1mMSIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgaWYgb3V0cHV0IGFuZCBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgdG1wX291dHB1dCA9ICIiCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgcGtnLCBwa2dfZmlsZSwgcGtnX2FyY2ggPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZnNfZGlyLCBwa2dfYXJjaCwgcGtnX2ZpbGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgdG1wX291dHB1dCArPSAiJXMgJXMgJXNcbiIgJSAocGtnLCBmdWxsX3BhdGgsIHBrZ19hcmNoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoKQorCisgICAgICAgICAgICBvdXRwdXQgPSB0bXBfb3V0cHV0CisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIERwa2dQa2dzTGlzdChQa2dzTGlzdCk6CisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJkcGtnLXF1ZXJ5IiksCisgICAgICAgICAgICAgICAiLS1hZG1pbmRpcj0lcy92YXIvbGliL2Rwa2ciICUgc2VsZi5yb290ZnNfZGlyLAorICAgICAgICAgICAgICAgIi1XIl0KKworICAgICAgICBpZiBmb3JtYXQgPT0gImFyY2giOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2VBcmNofVxuIikKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2V9XyR7VmVyc2lvbn1fJHtBcmNoaXRlY3R1cmV9LmRlYiAke1BhY2thZ2VBcmNofVxuIikKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gInZlciI6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj0ke1BhY2thZ2V9ICR7UGFja2FnZUFyY2h9ICR7VmVyc2lvbn1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPVBhY2thZ2U6ICR7UGFja2FnZX1cbkRlcGVuZHM6ICR7RGVwZW5kc31cblJlY29tbWVuZHM6ICR7UmVjb21tZW5kc31cblxuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX1cbiIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIGxpc3QuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSAiIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHVwbGUob3V0cHV0LnNwbGl0KCdcbicpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgcGtnX2FyY2gsIHBrZ19maWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgZnVsbF9wYXRoLCBwa2dfYXJjaCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIHBrZ19maWxlLCBwa2dfYXJjaCkKKworICAgICAgICAgICAgb3V0cHV0ID0gdG1wX291dHB1dAorICAgICAgICBlbGlmIGZvcm1hdCA9PSAiZGVwcyI6CisgICAgICAgICAgICBvcGtnX3F1ZXJ5X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1xdWVyeS1oZWxwZXIucHkiKQorICAgICAgICAgICAgZmlsZV9vdXQgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgZmlsZV9vdXQud3JpdGUob3V0cHV0KQorICAgICAgICAgICAgZmlsZV9vdXQuZmx1c2goKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImNhdCAlcyB8ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVfb3V0Lm5hbWUsIG9wa2dfcXVlcnlfY21kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGZpbGVfb3V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGNvbXB1dGUgcGFja2FnZXMgZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgICAgIGZpbGVfb3V0LmNsb3NlKCkKKworICAgICAgICByZXR1cm4gb3V0cHV0CisKKworY2xhc3MgUGFja2FnZU1hbmFnZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IE5vbmUKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IE5vbmUKKyAgICAgICAgc2VsZi5mZWVkX3VyaXMgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfVVJJUycsIFRydWUpIG9yICIiCisgICAgICAgIHNlbGYuZmVlZF9wcmVmaXggPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfUFJFRklYJywgVHJ1ZSkgb3IgIiIKKworICAgICIiIgorICAgIFVwZGF0ZSB0aGUgcGFja2FnZSBtYW5hZ2VyIHBhY2thZ2UgZGF0YWJhc2UuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgSW5zdGFsbCBhIGxpc3Qgb2YgcGFja2FnZXMuICdwa2dzJyBpcyBhIGxpc3Qgb2JqZWN0LiBJZiAnYXR0ZW1wdF9vbmx5JyBpcworICAgIFRydWUsIGluc3RhbGxhdGlvbiBmYWlsdXJlcyBhcmUgaWdub3JlZC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBSZW1vdmUgYSBsaXN0IG9mIHBhY2thZ2VzLiAncGtncycgaXMgYSBsaXN0IG9iamVjdC4gSWYgJ3dpdGhfZGVwZW5kZW5jaWVzJworICAgIGlzIEZhbHNlLCB0aGUgYW55IGRlcGVuZGVuY2llcyBhcmUgbGVmdCBpbiBwbGFjZS4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGluZGV4IGZpbGVzCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIEluc3RhbGwgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBiYXNlZCB1cG9uIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBpbnN0YWxsZWQKKyAgICBwYWNrYWdlcyBlLmcuIGxvY2FsZXMsICotZGV2LCAqLWRiZywgZXRjLiBUaGlzIHdpbGwgb25seSBhdHRlbXB0IHRvIGluc3RhbGwKKyAgICB0aGVzZSBwYWNrYWdlcywgaWYgdGhleSBkb24ndCBleGlzdCB0aGVuIG5vIGVycm9yIHdpbGwgb2NjdXIuICBOb3RlOiBldmVyeQorICAgIGJhY2tlbmQgbmVlZHMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgYWZ0ZXIgdGhlIG5vcm1hbCBwYWNrYWdlCisgICAgaW5zdGFsbGF0aW9uCisgICAgIiIiCisgICAgZGVmIGluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLCBnbG9icz1Ob25lKToKKyAgICAgICAgIyB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyB0byBhIGZpbGUgYmVjYXVzZSB0aGUKKyAgICAgICAgIyBvZS1wa2dkYXRhLXV0aWwgcmVhZHMgaXQgZnJvbSBhIGZpbGUKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGxlZF9wa2dzLnR4dCIpCisgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19maWxlLCAidysiKSBhcyBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLndyaXRlKHNlbGYubGlzdF9pbnN0YWxsZWQoImFyY2giKSkKKworICAgICAgICBpZiBnbG9icyBpcyBOb25lOgorICAgICAgICAgICAgZ2xvYnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKQorICAgICAgICAgICAgc3BsaXRfbGluZ3VhcyA9IHNldCgpCisKKyAgICAgICAgICAgIGZvciB0cmFuc2xhdGlvbiBpbiBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5HVUFTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5ndWFzLmFkZCh0cmFuc2xhdGlvbikKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5ndWFzLmFkZCh0cmFuc2xhdGlvbi5zcGxpdCgnLScpWzBdKQorCisgICAgICAgICAgICBzcGxpdF9saW5ndWFzID0gc29ydGVkKHNwbGl0X2xpbmd1YXMpCisKKyAgICAgICAgICAgIGZvciBsYW5nIGluIHNwbGl0X2xpbmd1YXM6CisgICAgICAgICAgICAgICAgZ2xvYnMgKz0gIiAqLWxvY2FsZS0lcyIgJSBsYW5nCisKKyAgICAgICAgaWYgZ2xvYnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9IFtiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9lLXBrZ2RhdGEtdXRpbCIpLAorICAgICAgICAgICAgICAgIi1wIiwgc2VsZi5kLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKSwgImdsb2IiLCBpbnN0YWxsZWRfcGtnc19maWxlLAorICAgICAgICAgICAgICAgZ2xvYnNdCisgICAgICAgIGV4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREVfQ09NUExFTUVOVEFSWScsIFRydWUpCisgICAgICAgIGlmIGV4Y2x1ZGU6CisgICAgICAgICAgICBjbWQuZXh0ZW5kKFsnLXgnLCBleGNsdWRlXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIC4uLiIpCisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbXB1dGUgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmluc3RhbGwoY29tcGxlbWVudGFyeV9wa2dzLnNwbGl0KCksIGF0dGVtcHRfb25seT1UcnVlKQorCisgICAgZGVmIGRlcGxveV9kaXJfbG9jayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZXBsb3lfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImRlcGxveV9kaXIgaXMgbm90IHNldCEiKQorCisgICAgICAgIGxvY2tfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgImRlcGxveS5sb2NrIikKKworICAgICAgICBzZWxmLmRlcGxveV9sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja19maWxlX25hbWUpCisKKyAgICBkZWYgZGVwbG95X2Rpcl91bmxvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVwbG95X2xvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoc2VsZi5kZXBsb3lfbG9jaykKKworICAgICAgICBzZWxmLmRlcGxveV9sb2NrID0gTm9uZQorCisKK2NsYXNzIFJwbVBNKFBhY2thZ2VNYW5hZ2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgZCwKKyAgICAgICAgICAgICAgICAgdGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0X3ZlbmRvciwKKyAgICAgICAgICAgICAgICAgdGFza19uYW1lPSd0YXJnZXQnLAorICAgICAgICAgICAgICAgICBwcm92aWRlbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBhcmNoX3Zhcj1Ob25lLAorICAgICAgICAgICAgICAgICBvc192YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJwbVBNLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYudGFyZ2V0X3ZlbmRvciA9IHRhcmdldF92ZW5kb3IKKyAgICAgICAgc2VsZi50YXNrX25hbWUgPSB0YXNrX25hbWUKKyAgICAgICAgc2VsZi5wcm92aWRlbmFtZSA9IHByb3ZpZGVuYW1lCisgICAgICAgIHNlbGYuZnVsbHBrZ2xpc3QgPSBsaXN0KCkKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKQorICAgICAgICBzZWxmLmV0Y3JwbV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAiZXRjL3JwbSIpCisgICAgICAgIHNlbGYuaW5zdGFsbF9kaXJfbmFtZSA9ICJvZV9pbnN0YWxsIgorICAgICAgICBzZWxmLmluc3RhbGxfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLmluc3RhbGxfZGlyX25hbWUpCisgICAgICAgIHNlbGYucnBtX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtIikKKyAgICAgICAgc2VsZi5zbWFydF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInNtYXJ0IikKKyAgICAgICAgc2VsZi5zbWFydF9vcHQgPSAiLS1sb2ctbGV2ZWw9d2FybmluZyAtLWRhdGEtZGlyPSIgKyBvcy5wYXRoLmpvaW4odGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXIvbGliL3NtYXJ0JykKKyAgICAgICAgc2VsZi5zY3JpcHRsZXRfd3JhcHBlciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vc2NyaXB0bGV0X3dyYXBwZXInKQorICAgICAgICBzZWxmLnNvbHV0aW9uX21hbmlmZXN0ID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lc19zb2x1dGlvbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgc2VsZi5zYXZlZF9ycG1saWIgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkLyVzJyAlIHNlbGYudGFza19uYW1lKQorICAgICAgICBzZWxmLmltYWdlX3JwbWxpYiA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsICd2YXIvbGliL3JwbScpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKQorCisgICAgICAgIHNlbGYuaW5kZXhlciA9IFJwbUluZGV4ZXIoc2VsZi5kLCBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgIHNlbGYucGtnc19saXN0ID0gUnBtUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMsIGFyY2hfdmFyLCBvc192YXIpCisgICAgICAgIHNlbGYucnBtX3ZlcnNpb24gPSBzZWxmLnBrZ3NfbGlzdC5ycG1fdmVyc2lvbgorCisgICAgICAgIHNlbGYubWxfcHJlZml4X2xpc3QsIHNlbGYubWxfb3NfbGlzdCA9IHNlbGYuaW5kZXhlci5nZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KGFyY2hfdmFyLCBvc192YXIpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBMaXN0IG11c3QgYmUgcHJlZmVyZWQgdG8gbGVhc3QgcHJlZmVycmVkIG9yZGVyCisgICAgICAgIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IHNldCgpCisgICAgICAgIGJiZXh0ZW5kdmFyaWFudCA9IHNlbGYuZC5nZXRWYXIoJ0JCRVhURU5EVkFSSUFOVCcsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfb3NfbGlzdDoKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgcGx0ID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKSArICctLiotJyArIHNlbGYubWxfb3NfbGlzdFttbGliXQorICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gYmJleHRlbmR2YXJpYW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYS5hZGQocGx0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9leHRyYS5hZGQocGx0KQorCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gcGxhdGZvcm1fZXh0cmEudW5pb24oZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSkKKworICAgICAgICBhcmNoX2xpc3QgPSBbXQorICAgICAgICBmb3IgY2Fub25pY2FsX2FyY2ggaW4gcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICBhcmNoID0gY2Fub25pY2FsX2FyY2guc3BsaXQoJy0nKVswXQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYXJjaF9saXN0LmFwcGVuZChhcmNoKQorCisgICAgICAgIHVyaV9pdGVyYXRvciA9IDAKKyAgICAgICAgY2hhbm5lbF9wcmlvcml0eSA9IDEwICsgNSAqIGxlbihzZWxmLmZlZWRfdXJpcy5zcGxpdCgpKSAqIGxlbihhcmNoX2xpc3QpCisKKyAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgZnVsbF91cmkgPSB1cmkKKyAgICAgICAgICAgIGlmIHNlbGYuZmVlZF9wcmVmaXg6CisgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBTbWFydCBjaGFubmVsIHVybCVkJXMgKCVzKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHVybCVkLSVzIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMvJXMgLXknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHVyaV9pdGVyYXRvciwgYXJjaCwgZnVsbF91cmksIGFyY2gpKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLXNldCB1cmwlZC0lcyBwcmlvcml0eT0lZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJpX2l0ZXJhdG9yLCBhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5IC09IDUKKyAgICAgICAgICAgIHVyaV9pdGVyYXRvciArPSAxCisKKyAgICAnJycKKyAgICBDcmVhdGUgY29uZmlncyBmb3IgcnBtIGFuZCBzbWFydCwgYW5kIG11bHRpbGliIGlzIHN1cHBvcnRlZAorICAgICcnJworICAgIGRlZiBjcmVhdGVfY29uZmlncyhzZWxmKToKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSBzZWxmLmQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgICAgIHBsYXRmb3JtID0gJyVzJXMtJXMnICUgKHRhcmdldF9hcmNoLnJlcGxhY2UoJy0nLCAnXycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF92ZW5kb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWxfb3NfbGlzdFsnZGVmYXVsdCddKQorCisgICAgICAgICMgTGlzdCBtdXN0IGJlIHByZWZlcmVkIHRvIGxlYXN0IHByZWZlcnJlZCBvcmRlcgorICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhID0gbGlzdCgpCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gbGlzdCgpCisgICAgICAgIGJiZXh0ZW5kdmFyaWFudCA9IHNlbGYuZC5nZXRWYXIoJ0JCRVhURU5EVkFSSUFOVCcsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfb3NfbGlzdDoKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgcGx0ID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKSArICctLiotJyArIHNlbGYubWxfb3NfbGlzdFttbGliXQorICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gYmJleHRlbmR2YXJpYW50OgorICAgICAgICAgICAgICAgICAgICBpZiBwbHQgbm90IGluIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhLmFwcGVuZChwbHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGx0IG5vdCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2V4dHJhLmFwcGVuZChwbHQpCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSArIHBsYXRmb3JtX2V4dHJhCisKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MocGxhdGZvcm0sIHBsYXRmb3JtX2V4dHJhKQorCisgICAgZGVmIF9pbnZva2Vfc21hcnQoc2VsZiwgYXJncyk6CisgICAgICAgIGNtZCA9ICIlcyAlcyAlcyIgJSAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBhcmdzKQorICAgICAgICAjIGJiLm5vdGUoY21kKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKQorICAgICAgICAgICAgIyBiYi5ub3RlKGNvbXBsZW1lbnRhcnlfcGtncykKKyAgICAgICAgICAgIHJldHVybiBjb21wbGVtZW50YXJ5X3BrZ3MKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGludm9rZSBzbWFydC4gQ29tbWFuZCAiCisgICAgICAgICAgICAgICAgICAgICAiJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgZGVmIF9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMoc2VsZiwgcGtnLCBmZWVkX2FyY2hzKToKKyAgICAgICAgZm9yIGFyY2ggaW4gZmVlZF9hcmNoczoKKyAgICAgICAgICAgIGFyY2ggPSBhcmNoLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAgICAgICByZWdleF9tYXRjaCA9IHJlLmNvbXBpbGUociJeJXMtW14tXSotW14tXSpAJXMkIiAlIFwKKyAgICAgICAgICAgICAgICAocmUuZXNjYXBlKHBrZyksIHJlLmVzY2FwZShhcmNoKSkpCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bGxwa2dsaXN0OgorICAgICAgICAgICAgICAgIGlmIHJlZ2V4X21hdGNoLm1hdGNoKHApIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIEZpcnN0IGZvdW5kIGlzIGJlc3QgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgIyBiYi5ub3RlKCclcyAtPiAlcycgJSAocGtnLCBwa2cgKyAnQCcgKyBhcmNoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBrZyArICdAJyArIGFyY2gKKworICAgICAgICAjIFNlYXJjaCBwcm92aWRlcyBpZiBub3QgZm91bmQgYnkgcGtnbmFtZS4KKyAgICAgICAgYmIubm90ZSgnTm90IGZvdW5kICVzIGJ5IG5hbWUsIHNlYXJjaGluZyBwcm92aWRlcyAuLi4nICUgcGtnKQorICAgICAgICBjbWQgPSAiJXMgJXMgcXVlcnkgLS1wcm92aWRlcyAlcyAtLXNob3ctZm9ybWF0PSckbmFtZS0kdmVyc2lvbiciICUgXAorICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsIHBrZykKKyAgICAgICAgY21kICs9ICIgfCBzZWQgLW5lICdzLyAqUHJvdmlkZXM6Ly9wJyIKKyAgICAgICAgYmIubm90ZSgnY21kOiAlcycgJSBjbWQpCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAjIEZvdW5kIGEgcHJvdmlkZXIKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgYmIubm90ZSgnRm91bmQgcHJvdmlkZXJzIGZvciAlczogJXMnICUgKHBrZywgb3V0cHV0KSkKKyAgICAgICAgICAgIGZvciBwIGluIG91dHB1dC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGZlZWRfYXJjaHM6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBhcmNoLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAgICAgICAgICAgICAgIGlmIHAucnN0cmlwKCkuZW5kc3dpdGgoJ0AnICsgYXJjaCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcAorCisgICAgICAgIHJldHVybiAiIgorCisgICAgJycnCisgICAgVHJhbnNsYXRlIHRoZSBPRSBtdWx0aWxpYiBmb3JtYXQgbmFtZXMgdG8gdGhlIFJQTS9TbWFydCBmb3JtYXQgbmFtZXMKKyAgICBJdCBzZWFyY2hlZCB0aGUgUlBNL1NtYXJ0IGZvcm1hdCBuYW1lcyBpbiBwcm9iYWJsZSBtdWx0aWxpYiBmZWVkcyBmaXJzdCwKKyAgICBhbmQgdGhlbiBzZWFyY2hlZCB0aGUgZGVmYXVsdCBiYXNlIGZlZWQuCisgICAgJycnCisgICAgZGVmIF9wa2dfdHJhbnNsYXRlX29lX3RvX3NtYXJ0KHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIG5ld19wa2dzID0gbGlzdCgpCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAgICAgIyBTZWFyY2ggbmV3X3BrZyBpbiBwcm9iYWJsZSBtdWx0aWxpYnMgZmlyc3QKKyAgICAgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfcHJlZml4X2xpc3Q6CisgICAgICAgICAgICAgICAgIyBKdW1wIHRoZSBkZWZhdWx0IGFyY2hzCisgICAgICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzdWJzdCA9IHBrZy5yZXBsYWNlKG1saWIgKyAnLScsICcnKQorICAgICAgICAgICAgICAgICMgaWYgdGhlIHBrZyBpbiB0aGlzIG11bHRpbGliIGZlZWQKKyAgICAgICAgICAgICAgICBpZiBzdWJzdCAhPSBwa2c6CisgICAgICAgICAgICAgICAgICAgIGZlZWRfYXJjaHMgPSBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdCisgICAgICAgICAgICAgICAgICAgIG5ld19wa2cgPSBzZWxmLl9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMoc3Vic3QsIGZlZWRfYXJjaHMpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdfcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGYWlsZWQgdG8gdHJhbnNsYXRlLCBwYWNrYWdlIG5vdCBmb3VuZCEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAnJXMgbm90IGZvdW5kIGluIHRoZSAlcyBmZWVkcyAoJXMpLlxuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCBtbGliLCAiICIuam9pbihmZWVkX2FyY2hzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhdHRlbXB0X29ubHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyArPSAiICIuam9pbihzZWxmLmZ1bGxwa2dsaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtncy5hcHBlbmQobmV3X3BrZykKKworICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIEFwcGFyZW50bHkgbm90IGEgbXVsdGlsaWIgcGFja2FnZS4uLgorICAgICAgICAgICAgaWYgcGtnID09IG5ld19wa2c6CisgICAgICAgICAgICAgICAgIyBTZWFyY2ggbmV3X3BrZyBpbiBkZWZhdWx0IGFyY2hzCisgICAgICAgICAgICAgICAgZGVmYXVsdF9hcmNocyA9IHNlbGYubWxfcHJlZml4X2xpc3RbJ2RlZmF1bHQnXQorICAgICAgICAgICAgICAgIG5ld19wa2cgPSBzZWxmLl9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMocGtnLCBkZWZhdWx0X2FyY2hzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdfcGtnOgorICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gJyVzIG5vdCBmb3VuZCBpbiB0aGUgYmFzZSBmZWVkcyAoJXMpLlxuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csICcgJy5qb2luKGRlZmF1bHRfYXJjaHMpKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyArPSAiICIuam9pbihzZWxmLmZ1bGxwa2dsaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoZXJyX21zZykKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybihlcnJfbXNnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld19wa2dzLmFwcGVuZChuZXdfcGtnKQorCisgICAgICAgIHJldHVybiBuZXdfcGtncworCisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmLCBwbGF0Zm9ybSwgcGxhdGZvcm1fZXh0cmEpOgorICAgICAgICAjIFNldHVwIGJhc2Ugc3lzdGVtIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgUlBNIHBsYXRmb3JtIHNldHRpbmdzIikKKworICAgICAgICAjIENvbmZpZ3VyZSBpbnRlcm5hbCBSUE0gZW52aXJvbm1lbnQgd2hlbiB1c2luZyBTbWFydAorICAgICAgICBvcy5lbnZpcm9uWydSUE1fRVRDUlBNJ10gPSBzZWxmLmV0Y3JwbV9kaXIKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZXRjcnBtX2RpcikKKworICAgICAgICAjIFNldHVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgLS0gaW5zdGFsbC4uLgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmluc3RhbGxfZGlyX3BhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW5zdGFsbF9kaXJfcGF0aCwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyX3BhdGgsICd0bXAnKSkKKworICAgICAgICBjaGFubmVsX3ByaW9yaXR5ID0gNQorICAgICAgICBwbGF0Zm9ybV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5ldGNycG1fZGlyLCAicGxhdGZvcm0iKQorICAgICAgICBzZGtvcyA9IHNlbGYuZC5nZXRWYXIoIlNES19PUyIsIFRydWUpCisgICAgICAgIHdpdGggb3BlbihwbGF0Zm9ybV9kaXIsICJ3KyIpIGFzIHBsYXRmb3JtX2ZkOgorICAgICAgICAgICAgcGxhdGZvcm1fZmQud3JpdGUocGxhdGZvcm0gKyAnXG4nKQorICAgICAgICAgICAgZm9yIHB0IGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgKz0gNQorICAgICAgICAgICAgICAgIGlmIHNka29zOgorICAgICAgICAgICAgICAgICAgICB0bXAgPSByZS5zdWIoIi0lcyQiICUgc2Rrb3MsICItJXNcbiIgJSBzZGtvcywgcHQpCisgICAgICAgICAgICAgICAgdG1wID0gcmUuc3ViKCItbGludXguKiQiLCAiLWxpbnV4LipcbiIsIHRtcCkKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybV9mZC53cml0ZSh0bXApCisKKyAgICAgICAgIyBUZWxsIFJQTSB0aGF0IHRoZSAiLyIgZGlyZWN0b3J5IGV4aXN0IGFuZCBpcyBhdmFpbGFibGUKKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgUlBNIHN5c3RlbSBwcm92aWRlcyIpCisgICAgICAgIHN5c2luZm9fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZXRjcnBtX2RpciwgInN5c2luZm8iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3lzaW5mb19kaXIpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3lzaW5mb19kaXIsICJEaXJuYW1lcyIpLCAidysiKSBhcyBkaXJuYW1lczoKKyAgICAgICAgICAgIGRpcm5hbWVzLndyaXRlKCIvXG4iKQorCisgICAgICAgIGlmIHNlbGYucHJvdmlkZW5hbWU6CisgICAgICAgICAgICBwcm92aWRlbmFtZV9kaXIgPSBvcy5wYXRoLmpvaW4oc3lzaW5mb19kaXIsICJQcm92aWRlbmFtZSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJvdmlkZW5hbWVfZGlyKToKKyAgICAgICAgICAgICAgICBwcm92aWRlbmFtZV9jb250ZW50ID0gJ1xuJy5qb2luKHNlbGYucHJvdmlkZW5hbWUpCisgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWVfY29udGVudCArPSAnXG4nCisgICAgICAgICAgICAgICAgb3Blbihwcm92aWRlbmFtZV9kaXIsICJ3KyIpLndyaXRlKHByb3ZpZGVuYW1lX2NvbnRlbnQpCisKKyAgICAgICAgIyBDb25maWd1cmUgUlBNLi4uIHdlIGVuZm9yY2UgdGhlc2Ugc2V0dGluZ3MhCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBEQiBzZXR0aW5ncyIpCisgICAgICAgICMgQWZ0ZXIgY2hhbmdlIHRoZSBfX2RiLiogY2FjaGUgc2l6ZSwgbG9nIGZpbGUgd2lsbCBub3QgYmUKKyAgICAgICAgIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgdGhhdCB3aWxsIHJhaXNlIHNvbWUgd2FybmluZ3MsCisgICAgICAgICMgc28gdG91Y2ggYSBiYXJlIGxvZyBmb3IgcnBtIHdyaXRlIGludG8gaXQuCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNToKKyAgICAgICAgICAgIHJwbWxpYl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9ycG1saWIsICdsb2cnLCAnbG9nLjAwMDAwMDAwMDEnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJwbWxpYl9sb2cpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9ycG1saWIsICdsb2cnKSkKKyAgICAgICAgICAgICAgICBvcGVuKHJwbWxpYl9sb2csICd3KycpLmNsb3NlKCkKKworICAgICAgICAgICAgREJfQ09ORklHX0NPTlRFTlQgPSAiIyA9PT09PT09PT09PT09PT09IEVudmlyb25tZW50XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2RhdGFfZGlyIC5cbiIgXAorICAgICAgICAgICAgICAgICJzZXRfY3JlYXRlX2RpciAuXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xnX2RpciAuL2xvZ1xuIiBcCisgICAgICAgICAgICAgICAgInNldF90bXBfZGlyIC4vdG1wXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2ZsYWdzIGRiX2xvZ19hdXRvcmVtb3ZlIG9uXG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyAtLSB0aHJlYWRfY291bnQgbXVzdCBiZSA+PSA4XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X3RocmVhZF9jb3VudCA2NFxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBMb2dnaW5nXG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyA9PT09PT09PT09PT09PT09IE1lbW9yeSBQb29sXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2NhY2hlc2l6ZSAwIDEwNDg1NzYgMFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9tcF9tbWFwc2l6ZSAyNjg0MzU0NTZcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gTG9ja2luZ1xuIiBcCisgICAgICAgICAgICAgICAgInNldF9sa19tYXhfbG9ja3MgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X2xvY2tlcnMgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X29iamVjdHMgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJtdXRleF9zZXRfbWF4IDE2Mzg0MFxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBSZXBsaWNhdGlvblxuIgorCisgICAgICAgICAgICBkYl9jb25maWdfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnREJfQ09ORklHJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkYl9jb25maWdfZGlyKToKKyAgICAgICAgICAgICAgICBvcGVuKGRiX2NvbmZpZ19kaXIsICd3KycpLndyaXRlKERCX0NPTkZJR19DT05URU5UKQorCisgICAgICAgICMgQ3JlYXRlIGRhdGFiYXNlIHNvIHRoYXQgc21hcnQgZG9lc24ndCBjb21wbGFpbiAobGF6eSBpbml0KQorICAgICAgICBvcHQgPSAiLXFhIgorICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICBvcHQgPSAiLS1pbml0ZGIiCisgICAgICAgIGNtZCA9ICIlcyAtLXJvb3QgJXMgLS1kYnBhdGggL3Zhci9saWIvcnBtICVzID4gL2Rldi9udWxsIiAlICgKKyAgICAgICAgICAgICAgc2VsZi5ycG1fY21kLCBzZWxmLnRhcmdldF9yb290ZnMsIG9wdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNyZWF0ZSBycG0gZGF0YWJhc2UgZmFpbGVkLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICMgSW1wb3J0IEdQRyBrZXkgdG8gUlBNIGRhdGFiYXNlIG9mIHRoZSB0YXJnZXQgc3lzdGVtCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgcHVia2V5X3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCisgICAgICAgICAgICBjbWQgPSAiJXMgLS1yb290ICVzIC0tZGJwYXRoIC92YXIvbGliL3JwbSAtLWltcG9ydCAlcyA+IC9kZXYvbnVsbCIgJSAoCisgICAgICAgICAgICAgICAgICBzZWxmLnJwbV9jbWQsIHNlbGYudGFyZ2V0X3Jvb3RmcywgcHVia2V5X3BhdGgpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjIENvbmZpZ3VyZSBzbWFydAorICAgICAgICBiYi5ub3RlKCJjb25maWd1cmluZyBTbWFydCBzZXR0aW5ncyIpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLXJvb3Q9JXMnICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tZGJwYXRoPS92YXIvbGliL3JwbScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3Zhcj0lcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbG9jYWxzdGF0ZWRpcicsIFRydWUpKQorICAgICAgICBjbWQgPSAiY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3RtcHBhdGg9LyVzL3RtcCIgJSAoc2VsZi5pbnN0YWxsX2Rpcl9uYW1lKQorCisgICAgICAgIHByZWZlcl9jb2xvciA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QUkVGRVJfRUxGX0FSQ0gnLCBUcnVlKQorICAgICAgICBpZiBwcmVmZXJfY29sb3I6CisgICAgICAgICAgICBpZiBwcmVmZXJfY29sb3Igbm90IGluIFsnMCcsICcxJywgJzInLCAnNCddOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIFJQTV9QUkVGRVJfRUxGX0FSQ0g6ICVzLCBpdCBzaG91bGQgYmUgb25lIG9mOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0MTogRUxGMzIgd2luc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0MjogRUxGNjQgd2luc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0NDogRUxGNjQgTjMyIHdpbnMgKG1pcHM2NCBvciBtaXBzNjRlbCBvbmx5KSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVyX2NvbG9yKQorICAgICAgICAgICAgaWYgcHJlZmVyX2NvbG9yID09ICI0IiBhbmQgc2VsZi5kLmdldFZhcigiVFVORV9BUkNIIiwgVHJ1ZSkgbm90IGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbWlwczY0JywgJ21pcHM2NGVsJ106CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlJQTV9QUkVGRVJfRUxGX0FSQ0ggPSBcIjRcIiBpcyBmb3IgbWlwczY0IG9yIG1pcHM2NGVsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib25seS4iKQorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWV4dHJhLW1hY3Jvcy5fcHJlZmVyX2NvbG9yPSVzJworICAgICAgICAgICAgICAgICAgICAgICAgJSBwcmVmZXJfY29sb3IpCisKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWlnbm9yZXNpemU9MScpCisKKyAgICAgICAgIyBXcml0ZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgaG9zdCBhbmQgdGFyZ2V0IHVzYWdlCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1ub2xpbmt0b3M9MScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1ub3BhcmVudGRpcnM9MScpCisgICAgICAgIGNoZWNrX3NpZ25hdHVyZSA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9DSEVDS19TSUdOQVRVUkVTJywgVHJ1ZSkKKyAgICAgICAgaWYgY2hlY2tfc2lnbmF0dXJlIGFuZCBjaGVja19zaWduYXR1cmUuc3RyaXAoKSA9PSAiMCI6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tY2hlY2stc2lnbmF0dXJlcz1mYWxzZScpCisgICAgICAgIGZvciBpIGluIHNlbGYuZC5nZXRWYXIoJ0JBRF9SRUNPTU1FTkRBVElPTlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdmbGFnIC0tc2V0IGlnbm9yZS1yZWNvbW1lbmRzICVzJyAlIGkpCisKKyAgICAgICAgIyBEbyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGhlcmUsIHRvIGF2b2lkIHRoZW0gYmVpbmcKKyAgICAgICAgIyBzYXZlZCBmb3IgZmllbGQgdXBncmFkZQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdOT19SRUNPTU1FTkRBVElPTlMnLCBUcnVlKS5zdHJpcCgpID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IGlnbm9yZS1hbGwtcmVjb21tZW5kcz0xJykKKyAgICAgICAgcGtnX2V4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgaSBpbiBwa2dfZXhjbHVkZS5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdmbGFnIC0tc2V0IGV4Y2x1ZGUtcGFja2FnZXMgJXMnICUgaSkKKworICAgICAgICAjIE9wdGlvbmFsIGRlYnVnZ2luZworICAgICAgICAjIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1sb2ctbGV2ZWw9ZGVidWcnKQorICAgICAgICAjIGNtZCA9ICdjb25maWcgLS1zZXQgcnBtLWxvZy1maWxlPS90bXAvc21hcnQtZGVidWctbG9nZmlsZScKKyAgICAgICAgIyBzZWxmLl9pbnZva2Vfc21hcnQoY21kKQorICAgICAgICBjaF9hbHJlYWR5X2FkZGVkID0gW10KKyAgICAgICAgZm9yIGNhbm9uaWNhbF9hcmNoIGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgYXJjaCA9IGNhbm9uaWNhbF9hcmNoLnNwbGl0KCctJylbMF0KKyAgICAgICAgICAgIGFyY2hfY2hhbm5lbCA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcmNoX2NoYW5uZWwpIGFuZCBub3QgYXJjaCBpbiBjaF9hbHJlYWR5X2FkZGVkOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBTbWFydCBjaGFubmVsICVzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgJXMgdHlwZT1ycG0tbWQgYmFzZXVybD0lcyAteScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoYXJjaCwgYXJjaF9jaGFubmVsKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1zZXQgJXMgcHJpb3JpdHk9JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsIGNoYW5uZWxfcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgLT0gNQorCisgICAgICAgICAgICAgICAgY2hfYWxyZWFkeV9hZGRlZC5hcHBlbmQoYXJjaCkKKworICAgICAgICBiYi5ub3RlKCdhZGRpbmcgU21hcnQgUlBNIERCIGNoYW5uZWwnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgcnBtc3lzIHR5cGU9cnBtLXN5cyAteScpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgaW5zdGFsbCBzY3JpcHRsZXQgd3JhcHBlci4KKyAgICAgICAgIyBTY3JpcHRzIG5lZWQgdG8gYmUgb3JkZXJlZCB3aGVuIGV4ZWN1dGVkLCB0aGlzIGVuc3VyZXMgbnVtZXJpYyBvcmRlci4KKyAgICAgICAgIyBJZiB3ZSBldmVyIHJ1biBpbnRvIG5lZWRpbmcgbW9yZSB0aGUgODk5IHNjcmlwdHMsIHdlJ2xsIGhhdmUgdG8uCisgICAgICAgICMgY2hhbmdlIG51bSB0byBzdGFydCB3aXRoIDEwMDAuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgc2NyaXB0bGV0Y21kID0gIiQyICQzICQ0XG4iCisgICAgICAgICAgICBzY3JpcHRwYXRoID0gIiQzIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2NyaXB0bGV0Y21kID0gIiQyICQxLyQzICQ0XG4iCisgICAgICAgICAgICBzY3JpcHRwYXRoID0gIiQxLyQzIgorCisgICAgICAgIFNDUklQVExFVF9GT1JNQVQgPSAiIyEvYmluL2Jhc2hcbiIgXAorICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAiZXhwb3J0IFBBVEg9JXNcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBEPSVzXG4iIFwKKyAgICAgICAgICAgICdleHBvcnQgT0ZGTElORV9ST09UPSIkRCJcbicgXAorICAgICAgICAgICAgJ2V4cG9ydCBJUEtHX09GRkxJTkVfUk9PVD0iJEQiXG4nIFwKKyAgICAgICAgICAgICdleHBvcnQgT1BLR19PRkZMSU5FX1JPT1Q9IiREIlxuJyBcCisgICAgICAgICAgICAiZXhwb3J0IElOVEVSQ0VQVF9ESVI9JXNcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBOQVRJVkVfUk9PVD0lc1xuIiBcCisgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICsgc2NyaXB0bGV0Y21kICsgXAorICAgICAgICAgICAgImlmIFsgJD8gLW5lIDAgXTsgdGhlblxuIiBcCisgICAgICAgICAgICAiICBpZiBbICQ0IC1lcSAxIF07IHRoZW5cbiIgXAorICAgICAgICAgICAgIiAgICBta2RpciAtcCAkMS9ldGMvcnBtLXBvc3RpbnN0c1xuIiBcCisgICAgICAgICAgICAiICAgIG51bT0xMDBcbiIgXAorICAgICAgICAgICAgIiAgICB3aGlsZSBbIC1lICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0qIF07IGRvIG51bT0kKChudW0gKyAxKSk7IGRvbmVcbiIgXAorICAgICAgICAgICAgIiAgICBuYW1lPWBoZWFkIC0xICIgKyBzY3JpcHRwYXRoICsgIiB8IGN1dCAtZFwnIFwnIC1mIDJgXG4iIFwKKyAgICAgICAgICAgICcgICAgZWNobyAiIyEkMiIgPiAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tJHtuYW1lfVxuJyBcCisgICAgICAgICAgICAnICAgIGVjaG8gIiMgQXJnOiAkNCIgPj4gJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbicgXAorICAgICAgICAgICAgIiAgICBjYXQgIiArIHNjcmlwdHBhdGggKyAiID4+ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4iIFwKKyAgICAgICAgICAgICIgICAgY2htb2QgK3ggJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbiIgXAorICAgICAgICAgICAgIiAgZWxzZVxuIiBcCisgICAgICAgICAgICAnICAgIGVjaG8gIkVycm9yOiBwcmUvcG9zdCByZW1vdmUgc2NyaXB0bGV0IGZhaWxlZCJcbicgXAorICAgICAgICAgICAgIiAgZmlcbiIgXAorICAgICAgICAgICAgImZpXG4iCisKKyAgICAgICAgaW50ZXJjZXB0X2RpciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vaW50ZXJjZXB0X3NjcmlwdHMnKQorICAgICAgICBuYXRpdmVfcm9vdCA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisgICAgICAgIHNjcmlwdGxldF9jb250ZW50ID0gU0NSSVBUTEVUX0ZPUk1BVCAlIChvcy5lbnZpcm9uWydQQVRIJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3Jvb3QpCisgICAgICAgIG9wZW4oc2VsZi5zY3JpcHRsZXRfd3JhcHBlciwgJ3crJykud3JpdGUoc2NyaXB0bGV0X2NvbnRlbnQpCisKKyAgICAgICAgYmIubm90ZSgiTm90ZTogY29uZmlndXJpbmcgUlBNIGNyb3NzLWluc3RhbGwgc2NyaXB0bGV0X3dyYXBwZXIiKQorICAgICAgICBvcy5jaG1vZChzZWxmLnNjcmlwdGxldF93cmFwcGVyLCAwNzU1KQorICAgICAgICBjbWQgPSAnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyPSVzJyAlIFwKKyAgICAgICAgICAgICAgc2VsZi5zY3JpcHRsZXRfd3JhcHBlcgorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoY21kKQorCisgICAgICAgICMgRGVidWcgdG8gc2hvdyBzbWFydCBjb25maWcgaW5mbworICAgICAgICAjIGJiLm5vdGUoc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zaG93JykpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ3VwZGF0ZSBycG1zeXMnKQorCisgICAgJycnCisgICAgSW5zdGFsbCBwa2dzIHdpdGggc21hcnQsIHRoZSBwa2cgbmFtZSBpcyBvZSBmb3JtYXQKKyAgICAnJycKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorCisgICAgICAgIGlmIG5vdCBwa2dzOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIHRvIGluc3RhbGwiKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgdGhlIGZvbGxvd2luZyBwYWNrYWdlczogJXMiICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgIHBrZ3MgPSBzZWxmLl9wa2dfdHJhbnNsYXRlX29lX3RvX3NtYXJ0KHBrZ3MsIGF0dGVtcHRfb25seSkKKworICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgYmIubm90ZSgndG8gYmUgaW5zdGFsbGVkOiAlcycgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC15ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgYmIubm90ZShjbWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5ub3RlKCdpbnN0YWxsaW5nIGF0dGVtcHQgb25seSBwYWNrYWdlcy4uLicpCisgICAgICAgICAgICBiYi5ub3RlKCdBdHRlbXB0aW5nICVzJyAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLS1hdHRlbXB0IC15ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgYmIubm90ZShvdXRwdXQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAnJycKKyAgICBSZW1vdmUgcGtncyB3aXRoIHNtYXJ0LCB0aGUgcGtnIG5hbWUgaXMgc21hcnQvcnBtIGZvcm1hdAorICAgICcnJworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGJiLm5vdGUoJ3RvIGJlIHJlbW92ZWQ6ICcgKyAnICcuam9pbihwa2dzKSkKKworICAgICAgICBpZiBub3Qgd2l0aF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBjbWQgPSAiJXMgLWUgLS1ub2RlcHMgIiAlIHNlbGYucnBtX2NtZAorICAgICAgICAgICAgY21kICs9ICItLXJvb3Q9JXMgIiAlIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICAgICAgY21kICs9ICItLWRicGF0aD0vdmFyL2xpYi9ycG0gIgorICAgICAgICAgICAgY21kICs9ICItLWRlZmluZT0nX2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyICVzJyAiICUgXAorICAgICAgICAgICAgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIKKyAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmU9J190bXBwYXRoIC8lcy90bXAnICVzIiAlIChzZWxmLmluc3RhbGxfZGlyX25hbWUsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgICAgICAjICAgYmIubm90ZSgnRGVidWc6IFdoYXQgcmVxdWlyZWQ6ICVzJyAlIHBrZykKKyAgICAgICAgICAgICMgICBiYi5ub3RlKHNlbGYuX2ludm9rZV9zbWFydCgncXVlcnkgJXMgLS1zaG93LXJlcXVpcmVkYnknICUgcGtnKSkKKworICAgICAgICAgICAgY21kID0gIiVzICVzIHJlbW92ZSAteSAlcyIgJSAoc2VsZi5zbWFydF9jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0X29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB1cGdyYWRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCdzbWFydCB1cGdyYWRlJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCd1cGdyYWRlJykKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbmRleGVyLndyaXRlX2luZGV4KCkKKworICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9ycG1saWIsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsICd2YXIvbGliL29wa2cnKSwgVHJ1ZSkKKworICAgICAgICAjIHJlbW92ZSB0ZW1wIGRpcmVjdG9yeQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbnN0YWxsX2Rpcl9wYXRoLCBUcnVlKQorCisgICAgZGVmIGJhY2t1cF9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBTYXZlIHRoZSBycG1saWIgZm9yIGluY3JlbWVudCBycG0gaW1hZ2UgZ2VuZXJhdGlvbgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX3JwbWxpYik6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zYXZlZF9ycG1saWIsIFRydWUpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLmltYWdlX3JwbWxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZWRfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiByZWNvdmVyeV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBNb3ZlIHRoZSBycG1saWIgYmFjaworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX3JwbWxpYik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmltYWdlX3JwbWxpYik6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2VfcnBtbGliLCBUcnVlKQorCisgICAgICAgICAgICBiYi5ub3RlKCdSZWNvdmVyeSBwYWNrYWdpbmcgZGF0YScpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5zYXZlZF9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBrZ3NfbGlzdC5saXN0KGZvcm1hdCkKKworICAgICcnJworICAgIElmIGluY3JlbWVudGFsIGluc3RhbGwsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgd2UndmUgZ290LAorICAgIHdoYXQgd2UgbmVlZCB0byBhZGQsIGFuZCB3aGF0IHRvIHJlbW92ZS4uLgorICAgIFRoZSBkdW1wX2luc3RhbGxfc29sdXRpb24gd2lsbCBkdW1wIGFuZCBzYXZlIHRoZSBuZXcgaW5zdGFsbAorICAgIHNvbHV0aW9uLgorICAgICcnJworICAgIGRlZiBkdW1wX2luc3RhbGxfc29sdXRpb24oc2VsZiwgcGtncyk6CisgICAgICAgIGJiLm5vdGUoJ2NyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsJykKKyAgICAgICAgaWYgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa2dzID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChwa2dzLCBGYWxzZSkKKyAgICAgICAgaW5zdGFsbF9wa2dzID0gbGlzdCgpCisKKyAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLXkgLS1kdW1wICVzIDI+JXMiICUgIFwKKyAgICAgICAgICAgICAgKHNlbGYuc21hcnRfY21kLAorICAgICAgICAgICAgICAgc2VsZi5zbWFydF9vcHQsCisgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSwKKyAgICAgICAgICAgICAgIHNlbGYuc29sdXRpb25fbWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRGlzYWJsZSBycG1zeXMgY2hhbm5lbCBmb3IgdGhlIGZha2UgaW5zdGFsbAorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBycG1zeXMnKQorCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvbHV0aW9uX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIGR1bXAgaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICMgUmVjb3ZlcnkgcnBtc3lzIGNoYW5uZWwKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tZW5hYmxlIHJwbXN5cycpCisgICAgICAgIHJldHVybiBpbnN0YWxsX3BrZ3MKKworICAgICcnJworICAgIElmIGluY3JlbWVudGFsIGluc3RhbGwsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgd2UndmUgZ290LAorICAgIHdoYXQgd2UgbmVlZCB0byBhZGQsIGFuZCB3aGF0IHRvIHJlbW92ZS4uLgorICAgIFRoZSBsb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uIHdpbGwgbG9hZCB0aGUgcHJldmlvdXMgaW5zdGFsbAorICAgIHNvbHV0aW9uCisgICAgJycnCisgICAgZGVmIGxvYWRfb2xkX2luc3RhbGxfc29sdXRpb24oc2VsZik6CisgICAgICAgIGJiLm5vdGUoJ2xvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGwnKQorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IGxpc3QoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCk6CisgICAgICAgICAgICBiYi5ub3RlKCdvbGQgaW5zdGFsbCBzb2x1dGlvbiBub3QgZXhpc3QnKQorICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc29sdXRpb25fbWFuaWZlc3QsICdyJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQocGtnLnN0cmlwKCkpCisKKyAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAnJycKKyAgICBEdW1wIGFsbCBhdmFpbGFibGUgcGFja2FnZXMgaW4gZmVlZHMsIGl0IHNob3VsZCBiZSBpbnZva2VkIGFmdGVyIHRoZQorICAgIG5ld2VzdCBycG0gaW5kZXggd2FzIGNyZWF0ZWQKKyAgICAnJycKKyAgICBkZWYgZHVtcF9hbGxfYXZhaWxhYmxlX3BrZ3Moc2VsZik6CisgICAgICAgIGF2YWlsYWJsZV9tYW5pZmVzdCA9IHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQvYXZhaWxhYmxlX3BrZ3MudHh0JykKKyAgICAgICAgYXZhaWxhYmxlX3BrZ3MgPSBsaXN0KCkKKyAgICAgICAgY21kID0gIiVzICVzIHF1ZXJ5IC0tb3V0cHV0ICVzIiAlICBcCisgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsIGF2YWlsYWJsZV9tYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYXZhaWxhYmxlX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3BrZ3MuYXBwZW5kKHBrZy5zdHJpcCgpKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlVuYWJsZSB0byBsaXN0IGFsbCBhdmFpbGFibGUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHNlbGYuZnVsbHBrZ2xpc3QgPSBhdmFpbGFibGVfcGtncworCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNhdmVfcnBtcG9zdGluc3Qoc2VsZiwgcGtnKToKKyAgICAgICAgbWxpYnMgPSAoc2VsZi5kLmdldFZhcignTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywgRmFsc2UpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAjIFJlbW92ZSBhbnkgbXVsdGlsaWIgcHJlZml4IGZyb20gdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICBmb3IgbWxpYiBpbiBtbGliczoKKyAgICAgICAgICAgIGlmIG1saWIgaW4gcGtnOgorICAgICAgICAgICAgICAgIG5ld19wa2cgPSBwa2cucmVwbGFjZShtbGliICsgJy0nLCAnJykKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGJiLm5vdGUoJyAgKiBwb3N0cG9uaW5nICVzJyAlIG5ld19wa2cpCisgICAgICAgIHNhdmVkX2RpciA9IHNlbGYudGFyZ2V0X3Jvb3RmcyArIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcnBtLXBvc3RpbnN0cy8nKSArIG5ld19wa2cKKworICAgICAgICBjbWQgPSBzZWxmLnJwbV9jbWQgKyAnIC1xIC0tc2NyaXB0cyAtLXJvb3QgJyArIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBjbWQgKz0gJyAtLWRicGF0aD0vdmFyL2xpYi9ycG0gJyArIG5ld19wa2cKKyAgICAgICAgY21kICs9ICcgfCBzZWQgLW4gLWUgIi9ecG9zdGluc3RhbGwgc2NyaXB0bGV0ICh1c2luZyAuKik6JC8sL14uKiBzY3JpcHRsZXQgKHVzaW5nIC4qKTokLyB7Ly4qL3B9IicKKyAgICAgICAgY21kICs9ICcgfCBzZWQgLWUgIi9wb3N0aW5zdGFsbCBzY3JpcHRsZXQgKHVzaW5nIFwoLipcKSk6JC9kIicKKyAgICAgICAgY21kICs9ICcgLWUgIi9eLiogc2NyaXB0bGV0ICh1c2luZyAuKik6JC9kIiA+ICVzJyAlIHNhdmVkX2RpcgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLnN0cmlwKCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICAgICAgb3MuY2htb2Qoc2F2ZWRfZGlyLCAwNzU1KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZva2Ugc2F2ZV9ycG1wb3N0aW5zdCBmYWlsZWQuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICcnJ1dyaXRlIGNvbW1vbiBjb25maWd1cmF0aW9uIGZvciB0YXJnZXQgdXNhZ2UnJycKKyAgICBkZWYgcnBtX3NldHVwX3NtYXJ0X3RhcmdldF9jb25maWcoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKworICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9saW5rdG9zPTEnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9wYXJlbnRkaXJzPTEnKQorICAgICAgICBmb3IgaSBpbiBzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBpZ25vcmUtcmVjb21tZW5kcyAlcycgJSBpKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgcnBtc3lzIHR5cGU9cnBtLXN5cyAteScpCisKKyAgICAnJycKKyAgICBUaGUgcnBtIGRiIGxvY2sgZmlsZXMgd2VyZSBwcm9kdWNlZCBhZnRlciBpbnZva2luZyBycG0gdG8gcXVlcnkgb24KKyAgICBidWlsZCBzeXN0ZW0sIGFuZCB0aGV5IGNhdXNlZCB0aGUgcnBtIG9uIHRhcmdldCBkaWRuJ3Qgd29yaywgc28gd2UKKyAgICBuZWVkIHRvIHVubG9jayB0aGUgcnBtIGRiIGJ5IHJlbW92aW5nIHRoZSBsb2NrIGZpbGVzLgorICAgICcnJworICAgIGRlZiB1bmxvY2tfcnBtX2RiKHNlbGYpOgorICAgICAgICAjIFJlbW92ZSBycG0gZGIgbG9jayBmaWxlcworICAgICAgICBycG1fZGJfbG9ja3MgPSBnbG9iLmdsb2IoJyVzL3Zhci9saWIvcnBtL19fZGIuKicgJSBzZWxmLnRhcmdldF9yb290ZnMpCisgICAgICAgIGZvciBmIGluIHJwbV9kYl9sb2NrczoKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShmLCBUcnVlKQorCisKK2NsYXNzIE9wa2dQTShQYWNrYWdlTWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHRhcmdldF9yb290ZnMsIGNvbmZpZ19maWxlLCBhcmNocywgdGFza19uYW1lPSd0YXJnZXQnKToKKyAgICAgICAgc3VwZXIoT3BrZ1BNLCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3RmcyA9IHRhcmdldF9yb290ZnMKKyAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IGNvbmZpZ19maWxlCisgICAgICAgIHNlbGYucGtnX2FyY2hzID0gYXJjaHMKKyAgICAgICAgc2VsZi50YXNrX25hbWUgPSB0YXNrX25hbWUKKworICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCJERVBMT1lfRElSX0lQSyIsIFRydWUpCisgICAgICAgIHNlbGYuZGVwbG95X2xvY2tfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJkZXBsb3kubG9jayIpCisgICAgICAgIHNlbGYub3BrZ19jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ciKQorICAgICAgICBzZWxmLm9wa2dfYXJncyA9ICItLXZvbGF0aWxlLWNhY2hlIC1mICVzIC1vICVzICIgJSAoc2VsZi5jb25maWdfZmlsZSwgdGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgc2VsZi5vcGtnX2FyZ3MgKz0gc2VsZi5kLmdldFZhcigiT1BLR19BUkdTIiwgVHJ1ZSkKKworICAgICAgICBvcGtnX2xpYl9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdPUEtHTElCRElSJywgVHJ1ZSkKKyAgICAgICAgaWYgb3BrZ19saWJfZGlyWzBdID09ICIvIjoKKyAgICAgICAgICAgIG9wa2dfbGliX2RpciA9IG9wa2dfbGliX2RpclsxOl0KKworICAgICAgICBzZWxmLm9wa2dfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9yb290ZnMsIG9wa2dfbGliX2RpciwgIm9wa2ciKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLm9wa2dfZGlyKQorCisgICAgICAgIHNlbGYuc2F2ZWRfb3BrZ19kaXIgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkLyVzJyAlIHNlbGYudGFza19uYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkJykpCisKKyAgICAgICAgaWYgKHNlbGYuZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkgb3IgIiIpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25maWcoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2N1c3RvbV9jb25maWcoKQorCisgICAgICAgIHNlbGYuaW5kZXhlciA9IE9wa2dJbmRleGVyKHNlbGYuZCwgc2VsZi5kZXBsb3lfZGlyKQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNoYW5nZSBhIHBhY2thZ2UncyBzdGF0dXMgaW4gL3Zhci9saWIvb3BrZy9zdGF0dXMgZmlsZS4KKyAgICBJZiAncGFja2FnZXMnIGlzIE5vbmUgdGhlbiB0aGUgbmV3X3N0YXR1cyB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsCisgICAgcGFja2FnZXMKKyAgICAiIiIKKyAgICBkZWYgbWFya19wYWNrYWdlcyhzZWxmLCBzdGF0dXNfdGFnLCBwYWNrYWdlcz1Ob25lKToKKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vcGtnX2RpciwgInN0YXR1cyIpCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAiciIpIGFzIHNmOgorICAgICAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlICsgIi50bXAiLCAidysiKSBhcyB0bXBfc2Y6CisgICAgICAgICAgICAgICAgaWYgcGFja2FnZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHJlLnN1YihyIlBhY2thZ2U6ICguKj8pXG4oKD86W15cbl0rXG4pKj8pU3RhdHVzOiAoLiopKD86dW5wYWNrZWR8aW5zdGFsbGVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJQYWNrYWdlOiBcMVxuXDJTdGF0dXM6IFwzJXMiICUgc3RhdHVzX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZi5yZWFkKCkpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUocGFja2FnZXMpLl9fbmFtZV9fICE9ICJsaXN0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJ3BhY2thZ2VzJyBzaG91bGQgYmUgYSBsaXN0IG9iamVjdCIpCisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc2YucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSByZS5zdWIociJQYWNrYWdlOiAlc1xuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiICUgcGtnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogJXNcblwxU3RhdHVzOiBcMiVzIiAlIChwa2csIHN0YXR1c190YWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cykKKworICAgICAgICAgICAgICAgICAgICB0bXBfc2Yud3JpdGUoc3RhdHVzKQorCisgICAgICAgIG9zLnJlbmFtZShzdGF0dXNfZmlsZSArICIudG1wIiwgc3RhdHVzX2ZpbGUpCisKKyAgICBkZWYgX2NyZWF0ZV9jdXN0b21fY29uZmlnKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJCdWlsZGluZyBmcm9tIGZlZWRzIGFjdGl2YXRlZCEiKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ19maWxlLCAidysiKSBhcyBjb25maWdfZmlsZToKKyAgICAgICAgICAgIHByaW9yaXR5ID0gMQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBjb25maWdfZmlsZS53cml0ZSgiYXJjaCAlcyAlZFxuIiAlIChhcmNoLCBwcmlvcml0eSkpCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgKz0gNQorCisgICAgICAgICAgICBmb3IgbGluZSBpbiAoc2VsZi5kLmdldFZhcignSVBLX0ZFRURfVVJJUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZlZWRfbWF0Y2ggPSByZS5tYXRjaCgiXlsgXHRdKiguKikjIyhbXiBcdF0qKVsgXHRdKiQiLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgZmVlZF9tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZmVlZF9uYW1lID0gZmVlZF9tYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBmZWVkX3VyaSA9IGZlZWRfbWF0Y2guZ3JvdXAoMikKKworICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJBZGQgJXMgZmVlZCB3aXRoIFVSTCAlcyIgJSAoZmVlZF9uYW1lLCBmZWVkX3VyaSkpCisKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYy9neiAlcyAlc1xuIiAlIChmZWVkX25hbWUsIGZlZWRfdXJpKSkKKworICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBBbGxvdyB0byB1c2UgcGFja2FnZSBkZXBsb3kgZGlyZWN0b3J5IGNvbnRlbnRzIGFzIHF1aWNrIGRldmVsLXRlc3RpbmcKKyAgICAgICAgICAgIGZlZWQuIFRoaXMgY3JlYXRlcyBpbmRpdmlkdWFsIGZlZWQgY29uZmlncyBmb3IgZWFjaCBhcmNoIHN1YmRpciBvZiB0aG9zZQorICAgICAgICAgICAgc3BlY2lmaWVkIGFzIGNvbXBhdGlibGUgZm9yIHRoZSBjdXJyZW50IG1hY2hpbmUuCisgICAgICAgICAgICBOT1RFOiBEZXZlbG9wbWVudC1oZWxwZXIgZmVhdHVyZSwgTk9UIGEgZnVsbC1mbGVkZ2VkIGZlZWQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdGRUVEX0RFUExPWURJUl9CQVNFX1VSSScsIFRydWUpIG9yICIiKSAhPSAiIjoKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBjZmdfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJzeXNjb25mZGlyIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wa2ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbC0lcy1mZWVkLmNvbmYiICUgYXJjaCkKKworICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2ZnX2ZpbGVfbmFtZSwgIncrIikgYXMgY2ZnX2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBjZmdfZmlsZS53cml0ZSgic3JjL2d6IGxvY2FsLSVzICVzLyVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdGRUVEX0RFUExPWURJUl9CQVNFX1VSSScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gpKQorCisgICAgZGVmIF9jcmVhdGVfY29uZmlnKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgIncrIikgYXMgY29uZmlnX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDEKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoImFyY2ggJXMgJWRcbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYyBvZSBmaWxlOiVzXG4iICUgc2VsZi5kZXBsb3lfZGlyKQorCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ3NfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBrZ3NfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYyBvZS0lcyBmaWxlOiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsIHBrZ3NfZGlyKSkKKworICAgIGRlZiBpbnNlcnRfZmVlZHNfdXJpcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mZWVkX3VyaXMgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByb290ZnNfY29uZmlnID0gb3MucGF0aC5qb2luKCclcy9ldGMvb3BrZy9iYXNlLWZlZWRzLmNvbmYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLnRhcmdldF9yb290ZnMpCisKKyAgICAgICAgd2l0aCBvcGVuKHJvb3Rmc19jb25maWcsICJ3KyIpIGFzIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgdXJpX2l0ZXJhdG9yID0gMAorICAgICAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mZWVkX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBvcGtnIGZlZWQgdXJsLSVzLSVkICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCB1cmlfaXRlcmF0b3IsIGZ1bGxfdXJpKSkKKworICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZS53cml0ZSgic3JjL2d6IHVyaS0lcy0lZCAlcy8lc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCB1cmlfaXRlcmF0b3IsIGZ1bGxfdXJpLCBhcmNoKSkKKyAgICAgICAgICAgICAgICB1cmlfaXRlcmF0b3IgKz0gMQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyB1cGRhdGUiICUgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFja2FnZSBpbmRleCBmaWxlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKyAgICAgICAgaWYgYXR0ZW1wdF9vbmx5IGFuZCBsZW4ocGtncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsICVzIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgb3MuZW52aXJvblsnRCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lQS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT1BLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJTlRFUkNFUFRfRElSJ10gPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKyAgICAgICAgb3MuZW52aXJvblsnTkFUSVZFX1JPT1QnXSA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOiAlcyIgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIChiYi5mYXRhbCwgYmIubm90ZSlbYXR0ZW1wdF9vbmx5XSgiVW5hYmxlIHRvIGluc3RhbGwgcGFja2FnZXMuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCAnJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGlmIHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgY21kID0gIiVzICVzIC0tZm9yY2UtZGVwZW5kcyAtLWZvcmNlLXJlbW92ZSAtLWZvcmNlLXJlbW92YWwtb2YtZGVwZW5kZW50LXBhY2thZ2VzIHJlbW92ZSAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyAtLWZvcmNlLWRlcGVuZHMgcmVtb3ZlICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYub3BrZ19kaXIsIFRydWUpCisgICAgICAgICMgY3JlYXRlIHRoZSBkaXJlY3RvcnkgYmFjaywgaXQncyBuZWVkZWQgYnkgUE0gbG9jaworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5vcGtnX2RpcikKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMsIHNlbGYuY29uZmlnX2ZpbGUpLmxpc3QoZm9ybWF0KQorCisgICAgZGVmIGhhbmRsZV9iYWRfcmVjb21tZW5kYXRpb25zKHNlbGYpOgorICAgICAgICBiYWRfcmVjb21tZW5kYXRpb25zID0gc2VsZi5kLmdldFZhcigiQkFEX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGJhZF9yZWNvbW1lbmRhdGlvbnMuc3RyaXAoKSA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYub3BrZ19kaXIsICJzdGF0dXMiKQorCisgICAgICAgICMgSWYgc3RhdHVzIGZpbGUgZXhpc3RlZCwgaXQgbWVhbnMgdGhlIGJhZCByZWNvbW1lbmRhdGlvbnMgaGFzIGFscmVhZHkKKyAgICAgICAgIyBiZWVuIGhhbmRsZWQKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdHVzX2ZpbGUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgY21kID0gIiVzICVzIGluZm8gIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJ3KyIpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gYmFkX3JlY29tbWVuZGF0aW9ucy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ19pbmZvID0gY21kICsgcGtnCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHBrZ19pbmZvLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCBwYWNrYWdlIGluZm8uIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChwa2dfaW5mbywgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklnbm9yZWQgYmFkIHJlY29tbWVuZGF0aW9uOiAnJXMnIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgcGFja2FnZSIgJSBwa2cpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiU3RhdHVzOiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKCJTdGF0dXM6IGRlaW5zdGFsbCBob2xkIG5vdC1pbnN0YWxsZWRcbiIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMud3JpdGUobGluZSArICJcbiIpCisKKyAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBwYWNrYWdlIGVudHJ5IHRvIGVuc3VyZSB0aGF0IGl0CisgICAgICAgICAgICAgICAgIyBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKCJcbiIpCisKKyAgICAnJycKKyAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGR1bW15IGluc3RhbGxzIHBrZ3MgYW5kIHJldHVybnMgdGhlIGxvZyBvZiBvdXRwdXQuCisgICAgJycnCisgICAgZGVmIGR1bW15X2luc3RhbGwoc2VsZiwgcGtncyk6CisgICAgICAgIGlmIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDcmVhdGUgYW4gdGVtcCBkaXIgYXMgb3BrZyByb290IGZvciBkdW1teSBpbnN0YWxsYXRpb24KKyAgICAgICAgdGVtcF9yb290ZnMgPSBzZWxmLmQuZXhwYW5kKCcke1R9L29wa2cnKQorICAgICAgICB0ZW1wX29wa2dfZGlyID0gb3MucGF0aC5qb2luKHRlbXBfcm9vdGZzLCAndmFyL2xpYi9vcGtnJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRlbXBfb3BrZ19kaXIpCisKKyAgICAgICAgb3BrZ19hcmdzID0gIi1mICVzIC1vICVzICIgJSAoc2VsZi5jb25maWdfZmlsZSwgdGVtcF9yb290ZnMpCisgICAgICAgIG9wa2dfYXJncyArPSBzZWxmLmQuZ2V0VmFyKCJPUEtHX0FSR1MiLCBUcnVlKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyB1cGRhdGUiICUgKHNlbGYub3BrZ19jbWQsIG9wa2dfYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICAjIER1bW15IGluc3RhbGxhdGlvbgorICAgICAgICBjbWQgPSAiJXMgJXMgLS1ub2FjdGlvbiBpbnN0YWxsICVzICIgJSAoc2VsZi5vcGtnX2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wa2dfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luKHBrZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGR1bW15IGluc3RhbGwgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodGVtcF9yb290ZnMsIFRydWUpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIGJhY2t1cF9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBTYXZlIHRoZSBvcGtnbGliIGZvciBpbmNyZW1lbnQgaXBrIGltYWdlIGdlbmVyYXRpb24KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9vcGtnX2Rpcik6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zYXZlZF9vcGtnX2RpciwgVHJ1ZSkKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYub3BrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVkX29wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiByZWNvdmVyX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICAjIE1vdmUgdGhlIG9wa2dsaWIgYmFjaworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX29wa2dfZGlyKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYub3BrZ19kaXIpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLm9wa2dfZGlyLCBUcnVlKQorCisgICAgICAgICAgICBiYi5ub3RlKCdSZWNvdmVyIHBhY2thZ2luZyBkYXRhJykKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLnNhdmVkX29wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3BrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworCitjbGFzcyBEcGtnUE0oUGFja2FnZU1hbmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXRfcm9vdGZzLCBhcmNocywgYmFzZV9hcmNocywgYXB0X2NvbmZfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihEcGtnUE0sIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3RmcyA9IHRhcmdldF9yb290ZnMKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9ERUInLCBUcnVlKQorICAgICAgICBpZiBhcHRfY29uZl9kaXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtBUFRDT05GX1RBUkdFVH0vYXB0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gYXB0X2NvbmZfZGlyCisgICAgICAgIHNlbGYuYXB0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgImFwdC5jb25mIikKKyAgICAgICAgc2VsZi5hcHRfZ2V0X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiYXB0LWdldCIpCisKKyAgICAgICAgc2VsZi5hcHRfYXJncyA9IGQuZ2V0VmFyKCJBUFRfQVJHUyIsIFRydWUpCisKKyAgICAgICAgc2VsZi5hbGxfYXJjaF9saXN0ID0gYXJjaHMuc3BsaXQoKQorICAgICAgICBhbGxfbWxiX3BrZ19hcmNoX2xpc3QgPSAoc2VsZi5kLmdldFZhcignQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICdfJykuc3BsaXQoKQorICAgICAgICBzZWxmLmFsbF9hcmNoX2xpc3QuZXh0ZW5kKGFyY2ggZm9yIGFyY2ggaW4gYWxsX21sYl9wa2dfYXJjaF9saXN0IGlmIGFyY2ggbm90IGluIHNlbGYuYWxsX2FyY2hfbGlzdCkKKworICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlncyhhcmNocywgYmFzZV9hcmNocykKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBEcGtnSW5kZXhlcihzZWxmLmQsIHNlbGYuZGVwbG95X2RpcikKKworICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgYSBwYWNrYWdlJ3Mgc3RhdHVzIGluIC92YXIvbGliL2Rwa2cvc3RhdHVzIGZpbGUuCisgICAgSWYgJ3BhY2thZ2VzJyBpcyBOb25lIHRoZW4gdGhlIG5ld19zdGF0dXMgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbAorICAgIHBhY2thZ2VzCisgICAgIiIiCisgICAgZGVmIG1hcmtfcGFja2FnZXMoc2VsZiwgc3RhdHVzX3RhZywgcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSwgInIiKSBhcyBzZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSArICIudG1wIiwgIncrIikgYXMgdG1wX3NmOgorICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShyZS5zdWIociJQYWNrYWdlOiAoLio/KVxuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogXDFcblwyU3RhdHVzOiBcMyVzIiAlIHN0YXR1c190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YucmVhZCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKHBhY2thZ2VzKS5fX25hbWVfXyAhPSAibGlzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIidwYWNrYWdlcycgc2hvdWxkIGJlIGEgbGlzdCBvYmplY3QiKQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmUuc3ViKHIiUGFja2FnZTogJXNcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiAlIHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6ICVzXG5cMVN0YXR1czogXDIlcyIgJSAocGtnLCBzdGF0dXNfdGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpCisKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHN0YXR1cykKKworICAgICAgICBvcy5yZW5hbWUoc3RhdHVzX2ZpbGUgKyAiLnRtcCIsIHN0YXR1c19maWxlKQorCisgICAgIiIiCisgICAgUnVuIHRoZSBwcmUvcG9zdCBpbnN0YWxscyBmb3IgcGFja2FnZSAicGFja2FnZV9uYW1lIi4gSWYgcGFja2FnZV9uYW1lIGlzCisgICAgTm9uZSwgdGhlbiBydW4gYWxsIHByZS9wb3N0IGluc3RhbGwgc2NyaXB0bGV0cy4KKyAgICAiIiIKKyAgICBkZWYgcnVuX3ByZV9wb3N0X2luc3RhbGxzKHNlbGYsIHBhY2thZ2VfbmFtZT1Ob25lKToKKyAgICAgICAgaW5mb19kaXIgPSBzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9pbmZvIgorICAgICAgICBzdWZmaXhlcyA9IFsoIi5wcmVpbnN0IiwgIlByZWluc3RhbGwiKSwgKCIucG9zdGluc3QiLCAiUG9zdGluc3RhbGwiKV0KKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9zdGF0dXMiCisgICAgICAgIGluc3RhbGxlZF9wa2dzID0gW10KKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJyIikgYXMgc3RhdHVzOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzLnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl5QYWNrYWdlOiAoLiopIiwgbGluZSkKKyAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQobS5ncm91cCgxKSkKKworICAgICAgICBpZiBwYWNrYWdlX25hbWUgaXMgbm90IE5vbmUgYW5kIG5vdCBwYWNrYWdlX25hbWUgaW4gaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcy5lbnZpcm9uWydEJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnSVBLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydPUEtHX09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lOVEVSQ0VQVF9ESVInXSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJjZXB0X3NjcmlwdHMiKQorICAgICAgICBvcy5lbnZpcm9uWydOQVRJVkVfUk9PVCddID0gc2VsZi5kLmdldFZhcignU1RBR0lOR19ESVJfTkFUSVZFJywgVHJ1ZSkKKworICAgICAgICBmYWlsZWRfcGtncyA9IFtdCisgICAgICAgIGZvciBwa2dfbmFtZSBpbiBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgcF9mdWxsID0gb3MucGF0aC5qb2luKGluZm9fZGlyLCBwa2dfbmFtZSArIHN1ZmZpeFswXSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwX2Z1bGwpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgJXMgZm9yIHBhY2thZ2U6ICVzIC4uLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1ZmZpeFsxXS5sb3dlcigpLCBwa2dfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChwX2Z1bGwsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCIlcyBmb3IgcGFja2FnZSAlcyBmYWlsZWQgd2l0aCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWZmaXhbMV0sIHBrZ19uYW1lLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZF9wa2dzLmFwcGVuZChwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbGVuKGZhaWxlZF9wa2dzKToKKyAgICAgICAgICAgIHNlbGYubWFya19wYWNrYWdlcygidW5wYWNrZWQiLCBmYWlsZWRfcGtncykKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIG9zLmVudmlyb25bJ0FQVF9DT05GSUcnXSA9IHNlbGYuYXB0X2NvbmZfZmlsZQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICBjbWQgPSAiJXMgdXBkYXRlIiAlIHNlbGYuYXB0X2dldF9jbWQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gdXBkYXRlIHRoZSBwYWNrYWdlIGluZGV4IGZpbGVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIGlmIGF0dGVtcHRfb25seSBhbmQgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAtLWZvcmNlLXllcyAtLWFsbG93LXVuYXV0aGVudGljYXRlZCAlcyIgJSBcCisgICAgICAgICAgICAgIChzZWxmLmFwdF9nZXRfY21kLCBzZWxmLmFwdF9hcmdzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6ICVzIiAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAoYmIuZmF0YWwsIGJiLm5vdGUpW2F0dGVtcHRfb25seV0oIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgIyByZW5hbWUgKi5kcGtnLW5ldyBmaWxlcy9kaXJzCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudGFyZ2V0X3Jvb3Rmcyk6CisgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgbmV3X2RpciA9IHJlLnN1YigiXC5kcGtnLW5ldyIsICIiLCBkaXIpCisgICAgICAgICAgICAgICAgaWYgZGlyICE9IG5ld19kaXI6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShvcy5wYXRoLmpvaW4ocm9vdCwgZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCBuZXdfZGlyKSkKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbmV3X2ZpbGUgPSByZS5zdWIoIlwuZHBrZy1uZXciLCAiIiwgZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBmaWxlICE9IG5ld19maWxlOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKHJvb3QsIGZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHJvb3QsIG5ld19maWxlKSkKKworCisgICAgZGVmIHJlbW92ZShzZWxmLCBwa2dzLCB3aXRoX2RlcGVuZGVuY2llcz1UcnVlKToKKyAgICAgICAgaWYgd2l0aF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKyAgICAgICAgICAgIGNtZCA9ICIlcyBwdXJnZSAlcyIgJSAoc2VsZi5hcHRfZ2V0X2NtZCwgJyAnLmpvaW4ocGtncykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgLS1hZG1pbmRpcj0lcy92YXIvbGliL2Rwa2cgLS1pbnN0ZGlyPSVzIiBcCisgICAgICAgICAgICAgICAgICAiIC1QIC0tZm9yY2UtZGVwZW5kcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJkcGtnIiksCisgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLnRhcmdldF9yb290ZnMsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byByZW1vdmUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfbG9jaygpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbmRleGVyLndyaXRlX2luZGV4KCkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc291cmNlc19jb25mID0gb3MucGF0aC5qb2luKCIlcy9ldGMvYXB0L3NvdXJjZXMubGlzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBhcmNoX2xpc3QgPSBbXQorCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYWxsX2FyY2hfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB3aXRoIG9wZW4oc291cmNlc19jb25mLCAidysiKSBhcyBzb3VyY2VzX2ZpbGU6CisgICAgICAgICAgICBmb3IgdXJpIGluIHNlbGYuZmVlZF91cmlzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZnVsbF91cmkgPSB1cmkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZlZWRfcHJlZml4OgorICAgICAgICAgICAgICAgICAgICBmdWxsX3VyaSA9IG9zLnBhdGguam9pbih1cmksIHNlbGYuZmVlZF9wcmVmaXgpCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgZHBrZyBjaGFubmVsIGF0ICglcyknICUgdXJpKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2VzX2ZpbGUud3JpdGUoImRlYiAlcy8lcyAuL1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVsbF91cmksIGFyY2gpKQorCisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmLCBhcmNocywgYmFzZV9hcmNocyk6CisgICAgICAgIGJhc2VfYXJjaHMgPSByZS5zdWIoIl8iLCAiLSIsIGJhc2VfYXJjaHMpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5hcHRfY29uZl9kaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuYXB0X2NvbmZfZGlyLCBUcnVlKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuYXB0X2NvbmZfZGlyICsgIi9saXN0cy9wYXJ0aWFsLyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpciArICIvYXB0LmNvbmYuZC8iKQorCisgICAgICAgIGFyY2hfbGlzdCA9IFtdCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYWxsX2FyY2hfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAicHJlZmVyZW5jZXMiKSwgIncrIikgYXMgcHJlZnNfZmlsZToKKyAgICAgICAgICAgIHByaW9yaXR5ID0gODAxCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgcHJlZnNfZmlsZS53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICpcbiIKKyAgICAgICAgICAgICAgICAgICAgIlBpbjogcmVsZWFzZSBsPSVzXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW4tUHJpb3JpdHk6ICVkXG5cbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgKz0gNQorCisgICAgICAgICAgICBwa2dfZXhjbHVkZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19leGNsdWRlLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcHJlZnNfZmlsZS53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW46IHJlbGVhc2UgKlxuIgorICAgICAgICAgICAgICAgICAgICAiUGluLVByaW9yaXR5OiAtMVxuXG4iICUgcGtnKQorCisgICAgICAgIGFyY2hfbGlzdC5yZXZlcnNlKCkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAic291cmNlcy5saXN0IiksICJ3KyIpIGFzIHNvdXJjZXNfZmlsZToKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICBzb3VyY2VzX2ZpbGUud3JpdGUoImRlYiBmaWxlOiVzLyAuL1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKQorCisgICAgICAgIGJhc2VfYXJjaF9saXN0ID0gYmFzZV9hcmNocy5zcGxpdCgpCisgICAgICAgIG11bHRpbGliX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKTsKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gbXVsdGlsaWJfdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHZhcmlhbnQgPT0gImxpYjMyIjoKKyAgICAgICAgICAgICAgICBiYXNlX2FyY2hfbGlzdC5hcHBlbmQoImkzODYiKQorICAgICAgICAgICAgZWxpZiB2YXJpYW50ID09ICJsaWI2NCI6CisgICAgICAgICAgICAgICAgYmFzZV9hcmNoX2xpc3QuYXBwZW5kKCJhbWQ2NCIpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuYXB0X2NvbmZfZmlsZSwgIncrIikgYXMgYXB0X2NvbmY6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5kLmV4cGFuZCgiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L2FwdC9hcHQuY29uZi5zYW1wbGUiKSkgYXMgYXB0X2NvbmZfc2FtcGxlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGFwdF9jb25mX3NhbXBsZS5yZWFkKCkuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoX2FyY2ggPSByZS5tYXRjaCgiICBBcmNoaXRlY3R1cmUgXCIuKlwiOyQiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hfYXJjaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlX2FyY2ggaW4gYmFzZV9hcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyArPSAiXCIlc1wiOyIgJSBiYXNlX2FyY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKCIgIEFyY2hpdGVjdHVyZXMgeyVzfTtcbiIgJSBhcmNoaXRlY3R1cmVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKCIgIEFyY2hpdGVjdHVyZSBcIiVzXCI7XG4iICUgYmFzZV9hcmNocykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIiNST09URlMjIiwgc2VsZi50YXJnZXRfcm9vdGZzLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI0FQVENPTkYjIiwgc2VsZi5hcHRfY29uZl9kaXIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZShsaW5lICsgIlxuIikKKworICAgICAgICB0YXJnZXRfZHBrZ19kaXIgPSAiJXMvdmFyL2xpYi9kcGtnIiAlIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImluZm8iKSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInVwZGF0ZXMiKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInN0YXR1cyIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInN0YXR1cyIpLCAidysiKS5jbG9zZSgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGFyZ2V0X2Rwa2dfZGlyLCAiYXZhaWxhYmxlIikpOgorICAgICAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4odGFyZ2V0X2Rwa2dfZGlyLCAiYXZhaWxhYmxlIiksICJ3KyIpLmNsb3NlKCkKKworICAgIGRlZiByZW1vdmVfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ29wa2dsaWJkaXInLCBUcnVlKSksIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy8iLCBUcnVlKQorCisgICAgZGVmIGZpeF9icm9rZW5fZGVwZW5kZW5jaWVzKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBjbWQgPSAiJXMgJXMgLWYgaW5zdGFsbCIgJSAoc2VsZi5hcHRfZ2V0X2NtZCwgc2VsZi5hcHRfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZml4IGJyb2tlbiBkZXBlbmRlbmNpZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBEcGtnUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMpLmxpc3QoKQorCisKK2RlZiBnZW5lcmF0ZV9pbmRleF9maWxlcyhkKToKKyAgICBjbGFzc2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VfQ0xBU1NFUycsIFRydWUpLnJlcGxhY2UoInBhY2thZ2VfIiwgIiIpLnNwbGl0KCkKKworICAgIGluZGV4ZXJfbWFwID0geworICAgICAgICAicnBtIjogKFJwbUluZGV4ZXIsIGQuZ2V0VmFyKCdERVBMT1lfRElSX1JQTScsIFRydWUpKSwKKyAgICAgICAgImlwayI6IChPcGtnSW5kZXhlciwgZC5nZXRWYXIoJ0RFUExPWV9ESVJfSVBLJywgVHJ1ZSkpLAorICAgICAgICAiZGViIjogKERwa2dJbmRleGVyLCBkLmdldFZhcignREVQTE9ZX0RJUl9ERUInLCBUcnVlKSkKKyAgICB9CisKKyAgICByZXN1bHQgPSBOb25lCisKKyAgICBmb3IgcGtnX2NsYXNzIGluIGNsYXNzZXM6CisgICAgICAgIGlmIG5vdCBwa2dfY2xhc3MgaW4gaW5kZXhlcl9tYXA6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGluZGV4ZXJfbWFwW3BrZ19jbGFzc11bMV0pOgorICAgICAgICAgICAgcmVzdWx0ID0gaW5kZXhlcl9tYXBbcGtnX2NsYXNzXVswXShkLCBpbmRleGVyX21hcFtwa2dfY2xhc3NdWzFdKS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgIiIiCisgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gcnVuIHRoaXMgYXMgYSBzdGFuZGFsb25lIHNjcmlwdCwgZnJvbSBvdXRzaWRlIGJpdGJha2UKKyAgICBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICAiIiIKKyAgICBUQkQKKyAgICAiIiIKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5IGIvbWV0YS9saWIvb2UvcGFja2FnZWRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1ZjA0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5CkBAIC0wLDAgKzEsOTQgQEAKK2ltcG9ydCBjb2RlY3MKKworZGVmIHBhY2thZ2VkKHBrZywgZCk6CisgICAgcmV0dXJuIG9zLmFjY2VzcyhnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKSArICcucGFja2FnZWQnLCBvcy5SX09LKQorCitkZWYgcmVhZF9wa2dkYXRhZmlsZShmbik6CisgICAgcGtnZGF0YSA9IHt9CisKKyAgICBkZWYgZGVjb2RlKHN0cik6CisgICAgICAgIGMgPSBjb2RlY3MuZ2V0ZGVjb2Rlcigic3RyaW5nX2VzY2FwZSIpCisgICAgICAgIHJldHVybiBjKHN0cilbMF0KKworICAgIGlmIG9zLmFjY2Vzcyhmbiwgb3MuUl9PSyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBmID0gb3BlbihmbiwgJ3InKQorICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHIgPSByZS5jb21waWxlKCIoW146XSspOlxzKiguKikiKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHBrZ2RhdGFbbS5ncm91cCgxKV0gPSBkZWNvZGUobS5ncm91cCgyKSkKKworICAgIHJldHVybiBwa2dkYXRhCisKK2RlZiBnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKToKKyAgICByZXR1cm4gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9L3J1bnRpbWUvJXMnICUgcGtnKQorCitkZWYgaGFzX3N1YnBrZ2RhdGEocGtnLCBkKToKKyAgICByZXR1cm4gb3MuYWNjZXNzKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpLCBvcy5SX09LKQorCitkZWYgcmVhZF9zdWJwa2dkYXRhKHBrZywgZCk6CisgICAgcmV0dXJuIHJlYWRfcGtnZGF0YWZpbGUoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkpCisKK2RlZiBoYXNfcGtnZGF0YShwbiwgZCk6CisgICAgZm4gPSBkLmV4cGFuZCgnJHtQS0dEQVRBX0RJUn0vJXMnICUgcG4pCisgICAgcmV0dXJuIG9zLmFjY2Vzcyhmbiwgb3MuUl9PSykKKworZGVmIHJlYWRfcGtnZGF0YShwbiwgZCk6CisgICAgZm4gPSBkLmV4cGFuZCgnJHtQS0dEQVRBX0RJUn0vJXMnICUgcG4pCisgICAgcmV0dXJuIHJlYWRfcGtnZGF0YWZpbGUoZm4pCisKKyMKKyMgQ29sbGFwc2UgRk9PX3BrZyB2YXJpYWJsZXMgaW50byBGT08KKyMKK2RlZiByZWFkX3N1YnBrZ2RhdGFfZGljdChwa2csIGQpOgorICAgIHJldCA9IHt9CisgICAgc3ViZCA9IHJlYWRfcGtnZGF0YWZpbGUoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkpCisgICAgZm9yIHZhciBpbiBzdWJkOgorICAgICAgICBuZXd2YXIgPSB2YXIucmVwbGFjZSgiXyIgKyBwa2csICIiKQorICAgICAgICBpZiBuZXd2YXIgPT0gdmFyIGFuZCB2YXIgKyAiXyIgKyBwa2cgaW4gc3ViZDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldFtuZXd2YXJdID0gc3ViZFt2YXJdCisgICAgcmV0dXJuIHJldAorCitkZWYgX3BrZ21hcChkKToKKyAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcgcGFja2FnZSB0byByZWNpcGUgbmFtZS4iIiIKKworICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorCisgICAgcGtnbWFwID0ge30KKyAgICB0cnk6CisgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwa2dkYXRhZGlyKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBiYi53YXJuKCJObyBmaWxlcyBpbiAlcz8iICUgcGtnZGF0YWRpcikKKyAgICAgICAgZmlsZXMgPSBbXQorCisgICAgZm9yIHBuIGluIGZpbHRlcihsYW1iZGEgZjogbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIGYpKSwgZmlsZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwa2dkYXRhID0gcmVhZF9wa2dkYXRhZmlsZShvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgcG4pKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcGFja2FnZXMgPSBwa2dkYXRhLmdldCgiUEFDS0FHRVMiKSBvciAiIgorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBwa2dtYXBbcGtnXSA9IHBuCisKKyAgICByZXR1cm4gcGtnbWFwCisKK2RlZiBwa2dtYXAoZCk6CisgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHBhY2thZ2UgdG8gcmVjaXBlIG5hbWUuCisgICAgQ2FjaGUgdGhlIG1hcHBpbmcgaW4gdGhlIG1ldGFkYXRhIiIiCisKKyAgICBwa2dtYXBfZGF0YSA9IGQuZ2V0VmFyKCJfX3BrZ21hcF9kYXRhIiwgRmFsc2UpCisgICAgaWYgcGtnbWFwX2RhdGEgaXMgTm9uZToKKyAgICAgICAgcGtnbWFwX2RhdGEgPSBfcGtnbWFwKGQpCisgICAgICAgIGQuc2V0VmFyKCJfX3BrZ21hcF9kYXRhIiwgcGtnbWFwX2RhdGEpCisKKyAgICByZXR1cm4gcGtnbWFwX2RhdGEKKworZGVmIHJlY2lwZW5hbWUocGtnLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHJlY2lwZSBuYW1lIGZvciB0aGUgZ2l2ZW4gYmluYXJ5IHBhY2thZ2UgbmFtZS4iIiIKKworICAgIHJldHVybiBwa2dtYXAoZCkuZ2V0KHBrZykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weSBiL21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmViNDIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5CkBAIC0wLDAgKzEsMzYgQEAKK2ltcG9ydCBpdGVydG9vbHMKKworZGVmIGlzX29wdGlvbmFsKGZlYXR1cmUsIGQpOgorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIkZFQVRVUkVfUEFDS0FHRVNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkKKyAgICBpZiBwYWNrYWdlczoKKyAgICAgICAgcmV0dXJuIGJvb2woZC5nZXRWYXJGbGFnKCJGRUFUVVJFX1BBQ0tBR0VTXyVzIiAlIGZlYXR1cmUsICJvcHRpb25hbCIpKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBib29sKGQuZ2V0VmFyRmxhZygiUEFDS0FHRV9HUk9VUF8lcyIgJSBmZWF0dXJlLCAib3B0aW9uYWwiKSkKKworZGVmIHBhY2thZ2VzKGZlYXR1cmVzLCBkKToKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcigiRkVBVFVSRV9QQUNLQUdFU18lcyIgJSBmZWF0dXJlLCBUcnVlKQorICAgICAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFX0dST1VQXyVzIiAlIGZlYXR1cmUsIFRydWUpCisgICAgICAgIGZvciBwa2cgaW4gKHBhY2thZ2VzIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgeWllbGQgcGtnCisKK2RlZiByZXF1aXJlZF9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgcmVxID0gZmlsdGVyKGxhbWJkYSBmZWF0dXJlOiBub3QgaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIHJldHVybiBwYWNrYWdlcyhyZXEsIGQpCisKK2RlZiBvcHRpb25hbF9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgb3B0ID0gZmlsdGVyKGxhbWJkYSBmZWF0dXJlOiBpc19vcHRpb25hbChmZWF0dXJlLCBkKSwgZmVhdHVyZXMpCisgICAgcmV0dXJuIHBhY2thZ2VzKG9wdCwgZCkKKworZGVmIGFjdGl2ZV9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgcmV0dXJuIGl0ZXJ0b29scy5jaGFpbihyZXF1aXJlZF9wYWNrYWdlcyhmZWF0dXJlcywgZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wYWNrYWdlcyhmZWF0dXJlcywgZCkpCisKK2RlZiBhY3RpdmVfcmVjaXBlcyhmZWF0dXJlcywgZCk6CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICBmb3IgcGtnIGluIGFjdGl2ZV9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgICAgIHJlY2lwZSA9IG9lLnBhY2thZ2VkYXRhLnJlY2lwZW5hbWUocGtnLCBkKQorICAgICAgICBpZiByZWNpcGU6CisgICAgICAgICAgICB5aWVsZCByZWNpcGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3BhdGNoLnB5IGIvbWV0YS9saWIvb2UvcGF0Y2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4YmYxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhdGNoLnB5CkBAIC0wLDAgKzEsNjU5IEBACitpbXBvcnQgb2UucGF0aAorCitjbGFzcyBOb3RGb3VuZEVycm9yKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJFcnJvcjogJXMgbm90IGZvdW5kLiIgJSBzZWxmLnBhdGgKKworY2xhc3MgQ21kRXJyb3IoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhpdHN0YXR1cywgb3V0cHV0KToKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBleGl0c3RhdHVzCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kIEVycm9yOiBleGl0IHN0YXR1czogJWQgIE91dHB1dDpcbiVzIiAlIChzZWxmLnN0YXR1cywgc2VsZi5vdXRwdXQpCisKKworZGVmIHJ1bmNtZChhcmdzLCBkaXIgPSBOb25lKToKKyAgICBpbXBvcnQgcGlwZXMKKworICAgIGlmIGRpcjoKKyAgICAgICAgb2xkZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKGRpcikKKyAgICAgICAgb3MuY2hkaXIoZGlyKQorICAgICAgICAjIHByaW50KCJjd2Q6ICVzIC0+ICVzIiAlIChvbGRkaXIsIGRpcikpCisKKyAgICB0cnk6CisgICAgICAgIGFyZ3MgPSBbIHBpcGVzLnF1b3RlKHN0cihhcmcpKSBmb3IgYXJnIGluIGFyZ3MgXQorICAgICAgICBjbWQgPSAiICIuam9pbihhcmdzKQorICAgICAgICAjIHByaW50KCJjbWQ6ICVzIiAlIGNtZCkKKyAgICAgICAgKGV4aXRzdGF0dXMsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiBleGl0c3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBDbWRFcnJvcihleGl0c3RhdHVzID4+IDgsIG91dHB1dCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZmluYWxseToKKyAgICAgICAgaWYgZGlyOgorICAgICAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorCitjbGFzcyBQYXRjaEVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJQYXRjaCBFcnJvcjogJXMiICUgc2VsZi5tc2cKKworY2xhc3MgUGF0Y2hTZXQob2JqZWN0KToKKyAgICBkZWZhdWx0cyA9IHsKKyAgICAgICAgInN0cmlwcGF0aCI6IDEKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBkKToKKyAgICAgICAgc2VsZi5kaXIgPSBkaXIKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnBhdGNoZXMgPSBbXQorICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgZGVmIGN1cnJlbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jdXJyZW50CisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbiBvdXQgdGhlIHBhdGNoIHNldC4gIEdlbmVyYWxseSBpbmNsdWRlcyB1bmFwcGx5aW5nIGFsbAorICAgICAgICBwYXRjaGVzIGFuZCB3aXBpbmcgb3V0IGFsbCBhc3NvY2lhdGVkIG1ldGFkYXRhLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSk6CisgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoImZpbGUiKToKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlBhdGNoIGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgaW4gcGF0Y2ggaW1wb3J0LiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhdGNoWyJmaWxlIl0gPSBiYi5mZXRjaDIubG9jYWxwYXRoKHBhdGNoWyJyZW1vdGUiXSwgc2VsZi5kKQorCisgICAgICAgIGZvciBwYXJhbSBpbiBQYXRjaFNldC5kZWZhdWx0czoKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQocGFyYW0pOgorICAgICAgICAgICAgICAgIHBhdGNoW3BhcmFtXSA9IFBhdGNoU2V0LmRlZmF1bHRzW3BhcmFtXQorCisgICAgICAgIGlmIHBhdGNoLmdldCgicmVtb3RlIik6CisgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZGF0YS5leHBhbmQoYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCksIHNlbGYuZCkKKworICAgICAgICBwYXRjaFsiZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbImZpbGUiXSkKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUG9wKHNlbGYsIGZvcmNlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmVmcmVzaChzZWxmLCByZW1vdGUgPSBOb25lLCBhbGwgPSBOb25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldFBhdGNoZWRGaWxlcyhwYXRjaGZpbGUsIHN0cmlwbGV2ZWwsIHNyY2Rpcj1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlYWQgYSBwYXRjaCBmaWxlIGFuZCBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgaXQgd2lsbCBtb2RpZnkuCisgICAgICAgIFBhcmFtczoKKyAgICAgICAgICAgIHBhdGNoZmlsZTogdGhlIHBhdGNoIGZpbGUgdG8gcmVhZAorICAgICAgICAgICAgc3RyaXBsZXZlbDogdGhlIHN0cmlwIGxldmVsIGF0IHdoaWNoIHRoZSBwYXRjaCBpcyBnb2luZyB0byBiZSBhcHBsaWVkCisgICAgICAgICAgICBzcmNkaXI6IG9wdGlvbmFsIHBhdGggdG8gam9pbiBvbnRvIHRoZSBwYXRjaGVkIGZpbGUgcGF0aHMKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgbGlzdCBvZiB0dXBsZXMgb2YgZmlsZSBwYXRoIGFuZCBjaGFuZ2UgbW9kZSAoJ0EnIGZvciBhZGQsCisgICAgICAgICAgICAnRCcgZm9yIGRlbGV0ZSBvciAnTScgZm9yIG1vZGlmeSkKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIHBhdGNoZWRwYXRoKHBhdGNobGluZSk6CisgICAgICAgICAgICBmaWxlcHRoID0gcGF0Y2hsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgIGlmIGZpbGVwdGguZW5kc3dpdGgoJy9kZXYvbnVsbCcpOgorICAgICAgICAgICAgICAgIHJldHVybiAnL2Rldi9udWxsJworICAgICAgICAgICAgZmlsZXNwbGl0ID0gZmlsZXB0aC5zcGxpdChvcy5zZXApCisgICAgICAgICAgICBpZiBzdHJpcGxldmVsID4gbGVuKGZpbGVzcGxpdCk6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoJ1BhdGNoICVzIGhhcyBpbnZhbGlkIHN0cmlwIGxldmVsICVkJyAlIChwYXRjaGZpbGUsIHN0cmlwbGV2ZWwpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gb3Muc2VwLmpvaW4oZmlsZXNwbGl0W3N0cmlwbGV2ZWw6XSkKKworICAgICAgICBjb3BpZWRtb2RlID0gRmFsc2UKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICB3aXRoIG9wZW4ocGF0Y2hmaWxlKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy0tLSAnKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hwdGggPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGF0Y2hwdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBjb3BpZWRtb2RlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gcGF0Y2hwdGgKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRmaWxlID0gcGF0Y2hwdGgKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKysrICcpOgorICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWRkZWRmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKioqICcpOgorICAgICAgICAgICAgICAgICAgICBjb3BpZWRtb2RlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkZmlsZSA9IHBhdGNoZWRwYXRoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZW1vdmVkZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGlmIGFkZGVkZmlsZSBhbmQgcmVtb3ZlZGZpbGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWRmaWxlID09ICcvZGV2L251bGwnOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICdBJworICAgICAgICAgICAgICAgICAgICBlbGlmIGFkZGVkZmlsZSA9PSAnL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnRCcKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnTScKKyAgICAgICAgICAgICAgICAgICAgaWYgc3JjZGlyOgorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNyY2RpciwgYWRkZWRmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gYWRkZWRmaWxlCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZCgoZnVsbHBhdGgsIG1vZGUpKQorCisgICAgICAgIHJldHVybiBmaWxlbGlzdAorCisKK2NsYXNzIFBhdGNoVHJlZShQYXRjaFNldCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIFBhdGNoU2V0Ll9faW5pdF9fKHNlbGYsIGRpciwgZCkKKyAgICAgICAgc2VsZi5wYXRjaGRpciA9IG9zLnBhdGguam9pbihzZWxmLmRpciwgJ3BhdGNoZXMnKQorICAgICAgICBzZWxmLnNlcmllc3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJywgJ3NlcmllcycpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnBhdGNoZGlyKQorCisgICAgZGVmIF9hcHBlbmRQYXRjaEZpbGUoc2VsZiwgcGF0Y2gsIHN0cmlwcGF0aCk6CisgICAgICAgIHdpdGggb3BlbihzZWxmLnNlcmllc3BhdGgsICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUob3MucGF0aC5iYXNlbmFtZShwYXRjaCkgKyAiLCIgKyBzdHJpcHBhdGggKyAiXG4iKQorICAgICAgICBzaGVsbGNtZCA9IFsiY2F0IiwgcGF0Y2gsICI+IiAsIHNlbGYucGF0Y2hkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKV0KKyAgICAgICAgcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgIGRlZiBfcmVtb3ZlUGF0Y2goc2VsZiwgcCk6CisgICAgICAgIHBhdGNoID0ge30KKyAgICAgICAgcGF0Y2hbJ2ZpbGUnXSA9IHAuc3BsaXQoIiwiKVswXQorICAgICAgICBwYXRjaFsnc3RyaXBwYXRoJ10gPSBwLnNwbGl0KCIsIilbMV0KKyAgICAgICAgc2VsZi5fYXBwbHlwYXRjaChwYXRjaCwgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgX3JlbW92ZVBhdGNoRmlsZShzZWxmLCBhbGwgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnNlcmllc3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNlcmllc3BhdGgsICdyKycpIGFzIGY6CisgICAgICAgICAgICBwYXRjaGVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBmb3IgcCBpbiByZXZlcnNlZChwYXRjaGVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaChvcy5wYXRoLmpvaW4oc2VsZi5wYXRjaGRpciwgcC5zdHJpcCgpKSkKKyAgICAgICAgICAgIHBhdGNoZXMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlUGF0Y2gob3MucGF0aC5qb2luKHNlbGYucGF0Y2hkaXIsIHBhdGNoZXNbLTFdLnN0cmlwKCkpKQorICAgICAgICAgICAgcGF0Y2hlcy5wb3AoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmb3IgcCBpbiBwYXRjaGVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUocCkKKyAgICAgICAgIAorICAgIGRlZiBJbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlID0gTm9uZSk6CisgICAgICAgICIiIiIiIgorICAgICAgICBQYXRjaFNldC5JbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlKQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpID0gc2VsZi5fY3VycmVudCArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgIHNlbGYucGF0Y2hlcy5pbnNlcnQoaSwgcGF0Y2gpCisKKyAgICBkZWYgX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlID0gRmFsc2UsIHJldmVyc2UgPSBGYWxzZSwgcnVuID0gVHJ1ZSk6CisgICAgICAgIHNoZWxsY21kID0gWyJjYXQiLCBwYXRjaFsnZmlsZSddLCAifCIsICJwYXRjaCIsICItcCIsIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgICAgIHNoZWxsY21kLmFwcGVuZCgnLVInKQorCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gInNoIiArICItYyIgKyAiICIuam9pbihzaGVsbGNtZCkKKworICAgICAgICBpZiBub3QgZm9yY2U6CisgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy0tZHJ5LXJ1bicpCisKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNoZWxsY21kLnBvcChsZW4oc2hlbGxjbWQpIC0gMSkKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICBpZiBub3QgcmV2ZXJzZToKKyAgICAgICAgICAgIHNlbGYuX2FwcGVuZFBhdGNoRmlsZShwYXRjaFsnZmlsZSddLCBwYXRjaFsnc3RyaXBwYXRoJ10pCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIFB1c2goc2VsZiwgZm9yY2UgPSBGYWxzZSwgYWxsID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBiYi5ub3RlKCJzZWxmLl9jdXJyZW50IGlzICVzIiAlIHNlbGYuX2N1cnJlbnQpCisgICAgICAgIGJiLm5vdGUoInBhdGNoZXMgaXMgJXMiICUgc2VsZi5wYXRjaGVzKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLnBhdGNoZXM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiYXBwbHlpbmcgcGF0Y2ggJXMiICUgaSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hcHBseXBhdGNoKGksIGZvcmNlKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5leHQgPSBzZWxmLl9jdXJyZW50ICsgMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXh0ID0gMAorCisgICAgICAgICAgICBiYi5ub3RlKCJhcHBseWluZyBwYXRjaCAlcyIgJSBzZWxmLnBhdGNoZXNbbmV4dF0pCisgICAgICAgICAgICByZXQgPSBzZWxmLl9hcHBseXBhdGNoKHNlbGYucGF0Y2hlc1tuZXh0XSwgZm9yY2UpCisKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBuZXh0CisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgUG9wKHNlbGYsIGZvcmNlID0gTm9uZSwgYWxsID0gTm9uZSk6CisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoRmlsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoRmlsZShGYWxzZSkKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50ID09IDA6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gc2VsZi5fY3VycmVudCAtIDEKKworICAgIGRlZiBDbGVhbihzZWxmKToKKyAgICAgICAgIiIiIiIiCisgICAgICAgIHNlbGYuUG9wKGFsbD1UcnVlKQorCitjbGFzcyBHaXRBcHBseVRyZWUoUGF0Y2hUcmVlKToKKyAgICBwYXRjaF9saW5lX3ByZWZpeCA9ICclJSBvcmlnaW5hbCBwYXRjaCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFRyZWUuX19pbml0X18oc2VsZiwgZGlyLCBkKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0UGF0Y2hIZWFkZXIocGF0Y2hmaWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4dHJhY3QganVzdCB0aGUgaGVhZGVyIGxpbmVzIGZyb20gdGhlIHRvcCBvZiBhIHBhdGNoIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHBhdGNoZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0luZGV4OiAnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ2RpZmYgLScpIG9yIGxpbmUuc3RhcnRzd2l0aCgnLS0tJyk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcmVwYXJlQ29tbWl0KHBhdGNoZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgZ2l0IGNvbW1pdCBjb21tYW5kIGxpbmUgYmFzZWQgb24gdGhlIGhlYWRlciBmcm9tIGEgcGF0Y2ggZmlsZQorICAgICAgICAodHlwaWNhbGx5IHRoaXMgaXMgdXNlZnVsIGZvciBwYXRjaGVzIHRoYXQgY2Fubm90IGJlIGFwcGxpZWQgd2l0aCAiZ2l0IGFtIiBkdWUgdG8gZm9ybWF0dGluZykKKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgYXV0aG9yX3JlID0gcmUuY29tcGlsZSgnW1xTIF0rIDxcUytAXFMrXC5cUys+JykKKyAgICAgICAgIyBQcm9jZXNzIHBhdGNoIGhlYWRlciBhbmQgZXh0cmFjdCB1c2VmdWwgaW5mb3JtYXRpb24KKyAgICAgICAgbGluZXMgPSBHaXRBcHBseVRyZWUuZXh0cmFjdFBhdGNoSGVhZGVyKHBhdGNoZmlsZSkKKyAgICAgICAgb3V0bGluZXMgPSBbXQorICAgICAgICBhdXRob3IgPSBOb25lCisgICAgICAgIGRhdGUgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTdWJqZWN0OiAnKToKKyAgICAgICAgICAgICAgICBzdWJqZWN0ID0gbGluZS5zcGxpdCgnOicsIDEpWzFdCisgICAgICAgICAgICAgICAgIyBSZW1vdmUgYW55IFtQQVRDSF1bb2UtY29yZV0gZXRjLgorICAgICAgICAgICAgICAgIHN1YmplY3QgPSByZS5zdWIocidcWy4rP1xdXHMqJywgJycsIHN1YmplY3QpCisgICAgICAgICAgICAgICAgb3V0bGluZXMuaW5zZXJ0KDAsICclc1xuXG4nICUgc3ViamVjdC5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0Zyb206ICcpIG9yIGxpbmUuc3RhcnRzd2l0aCgnQXV0aG9yOiAnKToKKyAgICAgICAgICAgICAgICBhdXRob3J2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKS5yZXBsYWNlKCciJywgJycpCisgICAgICAgICAgICAgICAgIyBnaXQgaXMgZnVzc3kgYWJvdXQgYXV0aG9yIGZvcm1hdHRpbmcgaS5lLiBpdCBtdXN0IGJlIE5hbWUgPGVtYWlsQGRvbWFpbj4KKyAgICAgICAgICAgICAgICBpZiBhdXRob3JfcmUubWF0Y2goYXV0aG9ydmFsKToKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gYXV0aG9ydmFsCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RhdGU6ICcpOgorICAgICAgICAgICAgICAgIGlmIGRhdGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGF0ZXZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICMgVmVyeSBjcnVkZSBjaGVjayBmb3IgZGF0ZSBmb3JtYXQsIHNpbmNlIGdpdCB3aWxsIGJsb3cgdXAgaWYgaXQncyBub3QgaW4gdGhlIHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICMgZm9ybWF0LiBXaXRob3V0IGUuZy4gYSBweXRob24tZGF0ZXV0aWxzIGRlcGVuZGVuY3kgd2UgY2FuJ3QgZG8gYSB3aG9sZSBsb3QgbW9yZQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZGF0ZXZhbCkgPiAxMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRldmFsCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU2lnbmVkLW9mZi1ieTogJyk6CisgICAgICAgICAgICAgICAgYXV0aG9ydmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkucmVwbGFjZSgnIicsICcnKQorICAgICAgICAgICAgICAgICMgZ2l0IGlzIGZ1c3N5IGFib3V0IGF1dGhvciBmb3JtYXR0aW5nIGkuZS4gaXQgbXVzdCBiZSBOYW1lIDxlbWFpbEBkb21haW4+CisgICAgICAgICAgICAgICAgaWYgYXV0aG9yX3JlLm1hdGNoKGF1dGhvcnZhbCk6CisgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IGF1dGhvcnZhbAorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICMgV3JpdGUgb3V0IGNvbW1pdCBtZXNzYWdlIHRvIGEgZmlsZQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgICAgICB0bXBmaWxlID0gdGYubmFtZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0bGluZXM6CisgICAgICAgICAgICAgICAgdGYud3JpdGUobGluZSkKKyAgICAgICAgIyBQcmVwYXJlIGdpdCBjb21tYW5kCisgICAgICAgIGNtZCA9IFsiZ2l0IiwgImNvbW1pdCIsICItRiIsIHRtcGZpbGVdCisgICAgICAgICMgZ2l0IGRvZXNuJ3QgbGlrZSBwbGFpbiBlbWFpbCBhZGRyZXNzZXMgYXMgYXV0aG9ycworICAgICAgICBpZiBhdXRob3IgYW5kICc8JyBpbiBhdXRob3I6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWF1dGhvcj0iJXMiJyAlIGF1dGhvcikKKyAgICAgICAgaWYgZGF0ZToKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tZGF0ZT0iJXMiJyAlIGRhdGUpCisgICAgICAgIHJldHVybiAodG1wZmlsZSwgY21kKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0UGF0Y2hlcyh0cmVlLCBzdGFydGNvbW1pdCwgb3V0ZGlyKToKKyAgICAgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdvZXBhdGNoJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJmb3JtYXQtcGF0Y2giLCBzdGFydGNvbW1pdCwgIi1vIiwgdGVtcGRpcl0KKyAgICAgICAgICAgIG91dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgdHJlZSkKKyAgICAgICAgICAgIGlmIG91dDoKKyAgICAgICAgICAgICAgICBmb3Igc3JjZmlsZSBpbiBvdXQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihzcmNmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChHaXRBcHBseVRyZWUucGF0Y2hfbGluZV9wcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gbGluZS5zcGxpdCgpWy0xXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShzcmNmaWxlKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dGRpciwgb3V0ZmlsZSksICd3JykgYXMgb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBwYXRjaGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mLndyaXRlKGxpbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICBkZWYgX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlID0gRmFsc2UsIHJldmVyc2UgPSBGYWxzZSwgcnVuID0gVHJ1ZSk6CisgICAgICAgIGltcG9ydCBzaHV0aWwKKworICAgICAgICBkZWYgX2FwcGx5cGF0Y2hoZWxwZXIoc2hlbGxjbWQsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICAgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy1SJykKKworICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKHBhdGNoWydmaWxlJ10pCisKKyAgICAgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICAgICAgcmV0dXJuICJzaCIgKyAiLWMiICsgIiAiLmpvaW4oc2hlbGxjbWQpCisKKyAgICAgICAgICAgIHJldHVybiBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorCisgICAgICAgICMgQWRkIGhvb2tzIHdoaWNoIGFkZCBhIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIHBhdGNoIGZpbGUgbmFtZSBpbiB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgcmVwb3Jvb3QgPSAocnVuY21kKCJnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCIuc3BsaXQoKSwgc2VsZi5kaXIpIG9yICcnKS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCByZXBvcm9vdDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2Fubm90IGdldCByZXBvc2l0b3J5IHJvb3QgZm9yIGRpcmVjdG9yeSAlcyIgJSBzZWxmLmRpcikKKyAgICAgICAgY29tbWl0aG9vayA9IG9zLnBhdGguam9pbihyZXBvcm9vdCwgJy5naXQnLCAnaG9va3MnLCAnY29tbWl0LW1zZycpCisgICAgICAgIGNvbW1pdGhvb2tfYmFja3VwID0gY29tbWl0aG9vayArICcuZGV2dG9vbC1vcmlnJworICAgICAgICBhcHBseWhvb2sgPSBvcy5wYXRoLmpvaW4ocmVwb3Jvb3QsICcuZ2l0JywgJ2hvb2tzJywgJ2FwcGx5cGF0Y2gtbXNnJykKKyAgICAgICAgYXBwbHlob29rX2JhY2t1cCA9IGFwcGx5aG9vayArICcuZGV2dG9vbC1vcmlnJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21taXRob29rKToKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGNvbW1pdGhvb2ssIGNvbW1pdGhvb2tfYmFja3VwKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcHBseWhvb2spOgorICAgICAgICAgICAgc2h1dGlsLm1vdmUoYXBwbHlob29rLCBhcHBseWhvb2tfYmFja3VwKQorICAgICAgICB3aXRoIG9wZW4oY29tbWl0aG9vaywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgIyBOT1RFOiB0aGUgZm9ybWF0dGluZyBoZXJlIGlzIHNpZ25pZmljYW50OyBpZiB5b3UgY2hhbmdlIGl0IHlvdSdsbCBhbHNvIG5lZWQgdG8KKyAgICAgICAgICAgICMgY2hhbmdlIG90aGVyIHBsYWNlcyB3aGljaCByZWFkIGl0IGJhY2sKKyAgICAgICAgICAgIGYud3JpdGUoJ2VjaG8gPj4gJDFcbicpCisgICAgICAgICAgICBmLndyaXRlKCdlY2hvICIlczogJFBBVENIRklMRSIgPj4gJDFcbicgJSBHaXRBcHBseVRyZWUucGF0Y2hfbGluZV9wcmVmaXgpCisgICAgICAgIG9zLmNobW9kKGNvbW1pdGhvb2ssIDA3NTUpCisgICAgICAgIHNodXRpbC5jb3B5Mihjb21taXRob29rLCBhcHBseWhvb2spCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGNoZmlsZXZhciA9ICdQQVRDSEZJTEU9IiVzIicgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWydmaWxlJ10pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbcGF0Y2hmaWxldmFyLCAiZ2l0IiwgIi0td29yay10cmVlPSVzIiAlIHJlcG9yb290LCAiYW0iLCAiLTMiLCAiLS1rZWVwLWNyIiwgIi1wJXMiICUgcGF0Y2hbJ3N0cmlwcGF0aCddXQorICAgICAgICAgICAgICAgIHJldHVybiBfYXBwbHlwYXRjaGhlbHBlcihzaGVsbGNtZCwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIGFib3J0IHRoZSBnaXQgYW0sIG9yIHdlJ2xsIHN0aWxsIGJlIHdpdGhpbiBpdCBhdCB0aGUgZW5kCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaGVsbGNtZCA9IFsiZ2l0IiwgIi0td29yay10cmVlPSVzIiAlIHJlcG9yb290LCAiYW0iLCAiLS1hYm9ydCJdCisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgIyBGYWxsIGJhY2sgdG8gZ2l0IGFwcGx5CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICItLWdpdC1kaXI9JXMiICUgcmVwb3Jvb3QsICJhcHBseSIsICItcCVzIiAlIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9hcHBseXBhdGNoaGVscGVyKHNoZWxsY21kLCBwYXRjaCwgZm9yY2UsIHJldmVyc2UsIHJ1bikKKyAgICAgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIHBhdGNoCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IFBhdGNoVHJlZS5fYXBwbHlwYXRjaChzZWxmLCBwYXRjaCwgZm9yY2UsIHJldmVyc2UsIHJ1bikKKyAgICAgICAgICAgICAgICAjIEFkZCBhbGwgZmlsZXMKKyAgICAgICAgICAgICAgICBzaGVsbGNtZCA9IFsiZ2l0IiwgImFkZCIsICItZiIsICItQSIsICIuIl0KKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKyAgICAgICAgICAgICAgICAjIEV4Y2x1ZGUgdGhlIHBhdGNoZXMgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJyZXNldCIsICJIRUFEIiwgc2VsZi5wYXRjaGRpcl0KKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKyAgICAgICAgICAgICAgICAjIENvbW1pdCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAgKHRtcGZpbGUsIHNoZWxsY21kKSA9IHNlbGYucHJlcGFyZUNvbW1pdChwYXRjaFsnZmlsZSddKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxjbWQuaW5zZXJ0KDAsIHBhdGNoZmlsZXZhcikKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRtcGZpbGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKGNvbW1pdGhvb2spCisgICAgICAgICAgICBvcy5yZW1vdmUoYXBwbHlob29rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tbWl0aG9va19iYWNrdXApOgorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGNvbW1pdGhvb2tfYmFja3VwLCBjb21taXRob29rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwbHlob29rX2JhY2t1cCk6CisgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoYXBwbHlob29rX2JhY2t1cCwgYXBwbHlob29rKQorCisKK2NsYXNzIFF1aWx0VHJlZShQYXRjaFNldCk6CisgICAgZGVmIF9ydW5jbWQoc2VsZiwgYXJncywgcnVuID0gVHJ1ZSk6CisgICAgICAgIHF1aWx0cmMgPSBzZWxmLmQuZ2V0VmFyKCdRVUlMVFJDRklMRScsIFRydWUpCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gWyJxdWlsdCJdICsgWyItLXF1aWx0cmMiXSArIFtxdWlsdHJjXSArIGFyZ3MKKyAgICAgICAgcnVuY21kKFsicXVpbHQiXSArIFsiLS1xdWlsdHJjIl0gKyBbcXVpbHRyY10gKyBhcmdzLCBzZWxmLmRpcikKKworICAgIGRlZiBfcXVpbHRwYXRjaHBhdGgoc2VsZiwgZmlsZSk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwgb3MucGF0aC5iYXNlbmFtZShmaWxlKSkKKworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIFBhdGNoU2V0Ll9faW5pdF9fKHNlbGYsIGRpciwgZCkKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IEZhbHNlCisgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHApOgorICAgICAgICAgICAgb3MubWFrZWRpcnMocCkKKworICAgIGRlZiBDbGVhbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuY21kKFsicG9wIiwgIi1hIiwgIi1mIl0pCisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwic2VyaWVzIikpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICBkZWYgSW5pdEZyb21EaXIoc2VsZik6CisgICAgICAgICMgcmVhZCBzZXJpZXMgLT4gc2VsZi5wYXRjaGVzCisgICAgICAgIHNlcmllc3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJywgJ3NlcmllcycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRpcik6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKHNlbGYuZGlyKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZXJpZXNwYXRoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZXJpZXNwYXRoLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2ggPSB7fQorICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHBhdGNoWyJxdWlsdGZpbGUiXSA9IHNlbGYuX3F1aWx0cGF0Y2hwYXRoKHBhcnRzWzBdKQorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicXVpbHRmaWxlbWQ1Il0gPSBiYi51dGlscy5tZDVfZmlsZShwYXRjaFsicXVpbHRmaWxlIl0pCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInN0cmlwcGF0aCJdID0gcGFydHNbMV1bMjpdCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQocGF0Y2gpCisKKyAgICAgICAgICAgICMgZGV0ZXJtaW5lIHdoaWNoIHBhdGNoZXMgYXJlIGFwcGxpZWQgLT4gc2VsZi5fY3VycmVudAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInF1aWx0IiwgImFwcGxpZWQiXSwgc2VsZi5kaXIpCisgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIGlmIHN5cy5leGNfdmFsdWUub3V0cHV0LnN0cmlwKCkgPT0gIk5vIHBhdGNoZXMgYXBwbGllZCI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBvdXRwdXQgPSBbdmFsIGZvciB2YWwgaW4gb3V0cHV0LnNwbGl0KCdcbicpIGlmIG5vdCB2YWwuc3RhcnRzd2l0aCgnIycpXQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNlbGYucGF0Y2hlczoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSkgPT0gb3V0cHV0Wy0xXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYucGF0Y2hlcy5pbmRleChwYXRjaCkKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKworICAgIGRlZiBJbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlID0gTm9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmluaXRpYWxpemVkOgorICAgICAgICAgICAgc2VsZi5Jbml0RnJvbURpcigpCisgICAgICAgIFBhdGNoU2V0LkltcG9ydChzZWxmLCBwYXRjaCwgZm9yY2UpCisgICAgICAgIG9lLnBhdGguc3ltbGluayhwYXRjaFsiZmlsZSJdLCBzZWxmLl9xdWlsdHBhdGNocGF0aChwYXRjaFsiZmlsZSJdKSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgInBhdGNoZXMiLCAic2VyaWVzIiksICJhIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUob3MucGF0aC5iYXNlbmFtZShwYXRjaFsiZmlsZSJdKSArICIgLXAiICsgcGF0Y2hbInN0cmlwcGF0aCJdICsgIlxuIikKKyAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZSJdID0gc2VsZi5fcXVpbHRwYXRjaHBhdGgocGF0Y2hbImZpbGUiXSkKKyAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdKQorCisgICAgICAgICMgVE9ETzogZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGJlaW5nIGltcG9ydGVkOgorICAgICAgICAjICAgICAgMSkgaXMgYWxyZWFkeSBpbXBvcnRlZCwgYW5kIGlzIHRoZSBzYW1lCisgICAgICAgICMgICAgICAyKSBpcyBhbHJlYWR5IGltcG9ydGVkLCBidXQgZGlmZmVycworCisgICAgICAgIHNlbGYucGF0Y2hlcy5pbnNlcnQoc2VsZi5fY3VycmVudCBvciAwLCBwYXRjaCkKKworCisgICAgZGVmIFB1c2goc2VsZiwgZm9yY2UgPSBGYWxzZSwgYWxsID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICAjIHF1aWx0IHB1c2ggWy1mXQorCisgICAgICAgIGFyZ3MgPSBbInB1c2giXQorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItZiIpCisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItYSIpCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuY21kKGFyZ3MsIHJ1bikKKworICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gMAorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSA9IE5vbmUsIGFsbCA9IE5vbmUpOgorICAgICAgICAjIHF1aWx0IHBvcCBbLWZdCisgICAgICAgIGFyZ3MgPSBbInBvcCJdCisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1mIikKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1hIikKKworICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50ID09IDA6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gc2VsZi5fY3VycmVudCAtIDEKKworICAgIGRlZiBSZWZyZXNoKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgaWYga3dhcmdzLmdldCgicmVtb3RlIik6CisgICAgICAgICAgICBwYXRjaCA9IHNlbGYucGF0Y2hlc1trd2FyZ3NbInBhdGNoIl1dCisgICAgICAgICAgICBpZiBub3QgcGF0Y2g6CisgICAgICAgICAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcigiTm8gcGF0Y2ggZm91bmQgYXQgaW5kZXggJXMgaW4gcGF0Y2hzZXQuIiAlIGt3YXJnc1sicGF0Y2giXSkKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaFsicmVtb3RlIl0pCisgICAgICAgICAgICBpZiB0eXBlID09ICJmaWxlIjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgICAgICAgICAgaWYgbm90IHBhdGNoLmdldCgiZmlsZSIpIGFuZCBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCkKKworICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShwYXRjaFsicXVpbHRmaWxlIl0sIHBhdGNoWyJmaWxlIl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlVuYWJsZSB0byBkbyBhIHJlbW90ZSByZWZyZXNoIG9mICVzLCB1bnN1cHBvcnRlZCByZW1vdGUgdXJsIHNjaGVtZSAlcy4iICUgKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbInF1aWx0ZmlsZSJdKSwgdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHF1aWx0IHJlZnJlc2gKKyAgICAgICAgICAgIGFyZ3MgPSBbInJlZnJlc2giXQorICAgICAgICAgICAgaWYga3dhcmdzLmdldCgicXVpbHRmaWxlIik6CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShrd2FyZ3NbInF1aWx0ZmlsZSJdKSkKKyAgICAgICAgICAgIGVsaWYga3dhcmdzLmdldCgicGF0Y2giKToKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChvcy5wYXRoLmJhc2VuYW1lKHNlbGYucGF0Y2hlc1trd2FyZ3NbInBhdGNoIl1dWyJxdWlsdGZpbGUiXSkpCisgICAgICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworY2xhc3MgUmVzb2x2ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2hzZXQsIHRlcm1pbmFsKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmVzb2x2ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmV2ZXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBGaW5hbGl6ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKK2NsYXNzIE5PT1BSZXNvbHZlcihSZXNvbHZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBwYXRjaHNldAorICAgICAgICBzZWxmLnRlcm1pbmFsID0gdGVybWluYWwKKworICAgIGRlZiBSZXNvbHZlKHNlbGYpOgorICAgICAgICBvbGRkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihzZWxmLnBhdGNoc2V0LmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5QdXNoKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKyAgICAgICAgICAgIHJhaXNlCisKKyMgUGF0Y2ggcmVzb2x2ZXIgd2hpY2ggcmVsaWVzIG9uIHRoZSB1c2VyIGRvaW5nIGFsbCB0aGUgd29yayBpbnZvbHZlZCBpbiB0aGUKKyMgcmVzb2x1dGlvbiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHJlZnJlc2hpbmcgdGhlIHJlbW90ZSBjb3B5IG9mIHRoZSBwYXRjaAorIyBmaWxlcyAodGhlIHVybHMpLgorY2xhc3MgVXNlclJlc29sdmVyKFJlc29sdmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2hzZXQsIHRlcm1pbmFsKToKKyAgICAgICAgc2VsZi5wYXRjaHNldCA9IHBhdGNoc2V0CisgICAgICAgIHNlbGYudGVybWluYWwgPSB0ZXJtaW5hbAorCisgICAgIyBGb3JjZSBhIHB1c2ggaW4gdGhlIHBhdGNoc2V0LCB0aGVuIGRyb3AgdG8gYSBzaGVsbCBmb3IgdGhlIHVzZXIgdG8KKyAgICAjIHJlc29sdmUgYW55IHJlamVjdGVkIGh1bmtzCisgICAgZGVmIFJlc29sdmUoc2VsZik6CisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgICAgIG9zLmNoZGlyKHNlbGYucGF0Y2hzZXQuZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhdGNoc2V0LlB1c2goRmFsc2UpCisgICAgICAgIGV4Y2VwdCBDbWRFcnJvciBhcyB2OgorICAgICAgICAgICAgIyBQYXRjaCBhcHBsaWNhdGlvbiBmYWlsZWQKKyAgICAgICAgICAgIHBhdGNoY21kID0gc2VsZi5wYXRjaHNldC5QdXNoKFRydWUsIEZhbHNlLCBGYWxzZSkKKworICAgICAgICAgICAgdCA9IHNlbGYucGF0Y2hzZXQuZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHQ6CisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJCdWlsZCIsICJUIG5vdCBzZXQiKQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHQpCisgICAgICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgICAgICByY2ZpbGUgPSAiJXMvYmFzaHJjLiVzLiVzIiAlICh0LCBzdHIob3MuZ2V0cGlkKCkpLCByYW5kb20ucmFuZG9tKCkpCisgICAgICAgICAgICB3aXRoIG9wZW4ocmNmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnKioqIE1hbnVhbCBwYXRjaCByZXNvbHV0aW9uIG1vZGUgKioqJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICdEcm9wcGluZyB0byBhIHNoZWxsLCBzbyBwYXRjaCByZWplY3RzIGNhbiBiZSBmaXhlZCBtYW51YWxseS4nXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoImVjaG8gJ1J1biBcInF1aWx0IHJlZnJlc2hcIiB3aGVuIHBhdGNoIGlzIGNvcnJlY3RlZCwgcHJlc3MgQ1RSTCtEIHRvIGV4aXQuJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICcnXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIiAiLmpvaW4ocGF0Y2hjbWQpICsgIlxuIikKKyAgICAgICAgICAgIG9zLmNobW9kKHJjZmlsZSwgMDc3NSkKKworICAgICAgICAgICAgc2VsZi50ZXJtaW5hbCgiYmFzaCAtLXJjZmlsZSAiICsgcmNmaWxlLCAnUGF0Y2ggUmVqZWN0czogUGxlYXNlIGZpeCBwYXRjaCByZWplY3RzIG1hbnVhbGx5Jywgc2VsZi5wYXRjaHNldC5kKQorCisgICAgICAgICAgICAjIENvbnN0cnVjdCBhIG5ldyBQYXRjaFNldCBhZnRlciB0aGUgdXNlcidzIGNoYW5nZXMsIGNvbXBhcmUgdGhlCisgICAgICAgICAgICAjIHNldHMsIGNoZWNraW5nIHBhdGNoZXMgZm9yIG1vZGlmaWNhdGlvbnMsIGFuZCBkb2luZyBhIHJlbW90ZQorICAgICAgICAgICAgIyByZWZyZXNoIG9uIGVhY2guCisgICAgICAgICAgICBvbGRwYXRjaHNldCA9IHNlbGYucGF0Y2hzZXQKKyAgICAgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBvbGRwYXRjaHNldC5fX2NsYXNzX18oc2VsZi5wYXRjaHNldC5kaXIsIHNlbGYucGF0Y2hzZXQuZCkKKworICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNlbGYucGF0Y2hzZXQucGF0Y2hlczoKKyAgICAgICAgICAgICAgICBvbGRwYXRjaCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Igb3BhdGNoIGluIG9sZHBhdGNoc2V0LnBhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIG9wYXRjaFsicXVpbHRmaWxlIl0gPT0gcGF0Y2hbInF1aWx0ZmlsZSJdOgorICAgICAgICAgICAgICAgICAgICAgICAgb2xkcGF0Y2ggPSBvcGF0Y2gKKworICAgICAgICAgICAgICAgIGlmIG9sZHBhdGNoOgorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicmVtb3RlIl0gPSBvbGRwYXRjaFsicmVtb3RlIl0KKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0Y2hbInF1aWx0ZmlsZSJdID09IG9sZHBhdGNoWyJxdWlsdGZpbGUiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGNoWyJxdWlsdGZpbGVtZDUiXSAhPSBvbGRwYXRjaFsicXVpbHRmaWxlbWQ1Il06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiUGF0Y2ggJXMgaGFzIGNoYW5nZWQsIHVwZGF0aW5nIHJlbW90ZSB1cmwgJXMiICUgKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbInF1aWx0ZmlsZSJdKSwgcGF0Y2hbInJlbW90ZSJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVzZXIgY2hhbmdlPyAgcmVtb3RlIHJlZnJlc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoc2V0LlJlZnJlc2gocmVtb3RlPVRydWUsIHBhdGNoPXNlbGYucGF0Y2hzZXQucGF0Y2hlcy5pbmRleChwYXRjaCkpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBkaWQgbm90IGZpeCB0aGUgcHJvYmxlbS4gIEFib3J0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlBhdGNoIGFwcGxpY2F0aW9uIGZhaWxlZCwgYW5kIHVzZXIgZGlkIG5vdCBmaXggYW5kIHJlZnJlc2ggdGhlIHBhdGNoLiIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBvcy5jaGRpcihvbGRkaXIpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYXRoLnB5IGIvbWV0YS9saWIvb2UvcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTNlYmZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvcGF0aC5weQpAQCAtMCwwICsxLDI0MyBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgZ2xvYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcy5wYXRoCisKK2RlZiBqb2luKCpwYXRocyk6CisgICAgIiIiTGlrZSBvcy5wYXRoLmpvaW4gYnV0IGRvZXNuJ3QgdHJlYXQgYWJzb2x1dGUgUkhTIHNwZWNpYWxseSIiIgorICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKCIvIi5qb2luKHBhdGhzKSkKKworZGVmIHJlbGF0aXZlKHNyYywgZGVzdCk6CisgICAgIiIiIFJldHVybiBhIHJlbGF0aXZlIHBhdGggZnJvbSBzcmMgdG8gZGVzdC4KKworICAgID4+PiByZWxhdGl2ZSgiL3Vzci9iaW4iLCAiL3RtcC9mb28vYmFyIikKKyAgICAuLi8uLi90bXAvZm9vL2JhcgorCisgICAgPj4+IHJlbGF0aXZlKCIvdXNyL2JpbiIsICIvdXNyL2xpYiIpCisgICAgLi4vbGliCisKKyAgICA+Pj4gcmVsYXRpdmUoIi90bXAiLCAiL3RtcC9mb28vYmFyIikKKyAgICBmb28vYmFyCisgICAgIiIiCisKKyAgICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKGRlc3QsIHNyYykKKworZGVmIG1ha2VfcmVsYXRpdmVfc3ltbGluayhwYXRoKToKKyAgICAiIiIgQ29udmVydCBhbiBhYnNvbHV0ZSBzeW1saW5rIHRvIGEgcmVsYXRpdmUgb25lICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisgICAgbGluayA9IG9zLnJlYWRsaW5rKHBhdGgpCisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobGluayk6CisgICAgICAgIHJldHVybgorCisgICAgIyBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3IgZGlyZWN0b3J5CisgICAgYW5jZXN0b3IgPSBwYXRoCisgICAgZGVwdGggPSAwCisgICAgd2hpbGUgYW5jZXN0b3IgYW5kIG5vdCBsaW5rLnN0YXJ0c3dpdGgoYW5jZXN0b3IpOgorICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnJwYXJ0aXRpb24oJy8nKVswXQorICAgICAgICBkZXB0aCArPSAxCisKKyAgICBpZiBub3QgYW5jZXN0b3I6CisgICAgICAgIHByaW50KCJtYWtlX3JlbGF0aXZlX3N5bWxpbmsoKSBFcnJvcjogdW5hYmxlIHRvIGZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiAlcyBhbmQgaXRzIHRhcmdldCIgJSBwYXRoKQorICAgICAgICByZXR1cm4KKworICAgIGJhc2UgPSBsaW5rLnBhcnRpdGlvbihhbmNlc3RvcilbMl0uc3RyaXAoJy8nKQorICAgIHdoaWxlIGRlcHRoID4gMToKKyAgICAgICAgYmFzZSA9ICIuLi8iICsgYmFzZQorICAgICAgICBkZXB0aCAtPSAxCisKKyAgICBvcy5yZW1vdmUocGF0aCkKKyAgICBvcy5zeW1saW5rKGJhc2UsIHBhdGgpCisKK2RlZiBmb3JtYXRfZGlzcGxheShwYXRoLCBtZXRhZGF0YSk6CisgICAgIiIiIFByZXBhcmUgYSBwYXRoIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLiAiIiIKKyAgICByZWwgPSByZWxhdGl2ZShtZXRhZGF0YS5nZXRWYXIoIlRPUERJUiIsIFRydWUpLCBwYXRoKQorICAgIGlmIGxlbihyZWwpID4gbGVuKHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZWwKKworZGVmIGNvcHl0cmVlKHNyYywgZHN0KToKKyAgICAjIFdlIGNvdWxkIHVzZSBzb21ldGhpbmcgbGlrZSBzaHV0aWwuY29weXRyZWUgaGVyZSBidXQgaXQgdHVybnMgb3V0IHRvCisgICAgIyB0byBiZSBzbG93LiBJdCB0YWtlcyB0d2ljZSBhcyBsb25nIGNvcHlpbmcgdG8gYW4gZW1wdHkgZGlyZWN0b3J5LiAKKyAgICAjIElmIGRzdCBhbHJlYWR5IGhhcyBjb250ZW50cyBwZXJmb3JtYW5jZSBjYW4gYmUgMTUgdGltZSBzbG93ZXIKKyAgICAjIFRoaXMgd2F5IHdlIGFsc28gcHJlc2VydmUgaGFyZGxpbmtzIGJldHdlZW4gZmlsZXMgaW4gdGhlIHRyZWUuCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZHN0KQorICAgIGNtZCA9ICd0YXIgLWNmIC0gLUMgJXMgLXAgLiB8IHRhciAteGYgLSAtQyAlcycgJSAoc3JjLCBkc3QpCisgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgY29weWhhcmRsaW5rdHJlZShzcmMsIGRzdCk6CisgICAgIiIiIE1ha2UgdGhlIGhhcmQgbGluayB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgY29weS4gIiIiCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKKyAgICBpZiBvcy5wYXRoLmlzZGlyKHNyYykgYW5kIG5vdCBsZW4ob3MubGlzdGRpcihzcmMpKToKKyAgICAgICAgcmV0dXJuCQorCisgICAgaWYgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gIG9zLnN0YXQoZHN0KS5zdF9kZXYpOgorICAgICAgICAjIE5lZWQgdG8gY29weSBkaXJlY3RvcmllcyBvbmx5IHdpdGggdGFyIGZpcnN0IHNpbmNlIGNwIHdpbGwgZXJyb3IgaWYgdHdvIAorICAgICAgICAjIHdyaXRlcnMgdHJ5IGFuZCBjcmVhdGUgYSBkaXJlY3RvcnkgYXQgdGhlIHNhbWUgdGltZQorICAgICAgICBjbWQgPSAnY2QgJXM7IGZpbmQgLiAtdHlwZSBkIC1wcmludCB8IHRhciAtY2YgLSAtQyAlcyAtcCAtLWZpbGVzLWZyb20gLSAtLW5vLXJlY3Vyc2lvbiB8IHRhciAteGYgLSAtQyAlcycgJSAoc3JjLCBzcmMsIGRzdCkKKyAgICAgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBjbWQgPSAnY2QgJXM7IGZpbmQgLiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJXMnICUgKHNyYywgZHN0KQorICAgICAgICBjaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgZWxzZToKKyAgICAgICAgY29weXRyZWUoc3JjLCBkc3QpCisKK2RlZiByZW1vdmUocGF0aCwgcmVjdXJzZT1UcnVlKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIHJtIC1mIG9yIHJtIC1yZiIiIgorICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIHJlY3Vyc2UgYW5kIGV4Yy5lcnJubyA9PSBlcnJuby5FSVNESVI6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShuYW1lKQorICAgICAgICAgICAgZWxpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBzeW1saW5rKHNvdXJjZSwgZGVzdGluYXRpb24sIGZvcmNlPUZhbHNlKToKKyAgICAiIiJDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIiIiCisgICAgdHJ5OgorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIHJlbW92ZShkZXN0aW5hdGlvbikKKyAgICAgICAgb3Muc3ltbGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUIG9yIG9zLnJlYWRsaW5rKGRlc3RpbmF0aW9uKSAhPSBzb3VyY2U6CisgICAgICAgICAgICByYWlzZQorCitjbGFzcyBDYWxsZWRQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0Y29kZSwgY21kLCBvdXRwdXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5yZXRjb2RlID0gcmV0Y29kZQorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZCB3aXRoIG91dHB1dCAlcyIgJSAoc2VsZi5jbWQsIHNlbGYucmV0Y29kZSwgc2VsZi5vdXRwdXQpCisKKyMgTm90IG5lZWRlZCB3aGVuIHdlIG1vdmUgdG8gcHl0aG9uIDIuNworZGVmIGNoZWNrX291dHB1dCgqcG9wZW5hcmdzLCAqKmt3YXJncyk6CisgICAgciIiIlJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzIGFuZCByZXR1cm4gaXRzIG91dHB1dCBhcyBhIGJ5dGUgc3RyaW5nLgorCisgICAgSWYgdGhlIGV4aXQgY29kZSB3YXMgbm9uLXplcm8gaXQgcmFpc2VzIGEgQ2FsbGVkUHJvY2Vzc0Vycm9yLiAgVGhlCisgICAgQ2FsbGVkUHJvY2Vzc0Vycm9yIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlIGluIHRoZSByZXR1cm5jb2RlCisgICAgYXR0cmlidXRlIGFuZCBvdXRwdXQgaW4gdGhlIG91dHB1dCBhdHRyaWJ1dGUuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIFBvcGVuIGNvbnN0cnVjdG9yLiAgRXhhbXBsZToKKworICAgID4+PiBjaGVja19vdXRwdXQoWyJscyIsICItbCIsICIvZGV2L251bGwiXSkKKyAgICAnY3J3LXJ3LXJ3LSAxIHJvb3Qgcm9vdCAxLCAzIE9jdCAxOCAgMjAwNyAvZGV2L251bGxcbicKKworICAgIFRoZSBzdGRvdXQgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQgYXMgaXQgaXMgdXNlZCBpbnRlcm5hbGx5LgorICAgIFRvIGNhcHR1cmUgc3RhbmRhcmQgZXJyb3IgaW4gdGhlIHJlc3VsdCwgdXNlIHN0ZGVycj1TVERPVVQuCisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsiL2Jpbi9zaCIsICItYyIsCisgICAgLi4uICAgICAgICAgICAgICAgImxzIC1sIG5vbl9leGlzdGVudF9maWxlIDsgZXhpdCAwIl0sCisgICAgLi4uICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQorICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKKyAgICAiIiIKKyAgICBpZiAnc3Rkb3V0JyBpbiBrd2FyZ3M6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhcmd1bWVudCBub3QgYWxsb3dlZCwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLicpCisgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgKnBvcGVuYXJncywgKiprd2FyZ3MpCisgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgcmV0Y29kZSA9IHByb2Nlc3MucG9sbCgpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgY21kID0ga3dhcmdzLmdldCgiYXJncyIpCisgICAgICAgIGlmIGNtZCBpcyBOb25lOgorICAgICAgICAgICAgY21kID0gcG9wZW5hcmdzWzBdCisgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBjbWQsIG91dHB1dD1vdXRwdXQpCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgZmluZChkaXIsICoqd2Fsa29wdGlvbnMpOgorICAgICIiIiBHaXZlbiBhIGRpcmVjdG9yeSwgcmVjdXJzZXMgaW50byB0aGF0IGRpcmVjdG9yeSwKKyAgICByZXR1cm5pbmcgYWxsIGZpbGVzIGFzIGFic29sdXRlIHBhdGhzLiAiIiIKKworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpciwgKip3YWxrb3B0aW9ucyk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgeWllbGQgb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisKKworIyMgcmVhbHBhdGgoKSByZWxhdGVkIGZ1bmN0aW9ucworZGVmIF9faXNfcGF0aF9iZWxvdyhmaWxlLCByb290KToKKyAgICByZXR1cm4gKGZpbGUgKyBvcy5wYXRoLnNlcCkuc3RhcnRzd2l0aChyb290KQorCitkZWYgX19yZWFscGF0aF9yZWwoc3RhcnQsIHJlbF9wYXRoLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgIiIiQ2FsY3VsYXRlcyByZWFsIHBhdGggb2Ygc3ltbGluayAnc3RhcnQnICsgJ3JlbF9wYXRoJyBiZWxvdworICAgICdyb290Jzsgbm8gcGFydCBvZiAnc3RhcnQnIGJlbG93ICdyb290JyBtdXN0IGNvbnRhaW4gc3ltbGlua3MuICIiIgorICAgIGhhdmVfZGlyID0gVHJ1ZQorCisgICAgZm9yIGQgaW4gcmVsX3BhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICBpZiBub3QgaGF2ZV9kaXIgYW5kIG5vdCBhc3N1bWVfZGlyOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTk9FTlQsICJubyBzdWNoIGRpcmVjdG9yeSAlcyIgJSBzdGFydCkKKworICAgICAgICBpZiBkID09IG9zLnBhdGgucGFyZGlyOiAjICcuLicKKyAgICAgICAgICAgIGlmIGxlbihzdGFydCkgPj0gbGVuKHJvb3QpOgorICAgICAgICAgICAgICAgICMgZG8gbm90IGZvbGxvdyAnLi4nIGJlZm9yZSByb290CisgICAgICAgICAgICAgICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUoc3RhcnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZW1pdCB3YXJuaW5nPworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChzdGFydCwgaGF2ZV9kaXIpID0gX19yZWFscGF0aChvcy5wYXRoLmpvaW4oc3RhcnQsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorCisgICAgICAgIGFzc2VydChfX2lzX3BhdGhfYmVsb3coc3RhcnQsIHJvb3QpKQorCisgICAgcmV0dXJuIHN0YXJ0CisKK2RlZiBfX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICB3aGlsZSBvcy5wYXRoLmlzbGluayhmaWxlKSBhbmQgbGVuKGZpbGUpID49IGxlbihyb290KToKKyAgICAgICAgaWYgbG9vcF9jbnQgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsIGZpbGUpCisKKyAgICAgICAgbG9vcF9jbnQgLT0gMQorICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnJlYWRsaW5rKGZpbGUpKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICAgICAgICAgICB0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpCisgICAgICAgICAgICBhc3NlcnQoX19pc19wYXRoX2JlbG93KHRkaXIsIHJvb3QpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGRpciA9IHJvb3QKKworICAgICAgICBmaWxlID0gX19yZWFscGF0aF9yZWwodGRpciwgdGFyZ2V0LCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgIHRyeToKKyAgICAgICAgaXNfZGlyID0gb3MucGF0aC5pc2RpcihmaWxlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgaXNfZGlyID0gZmFsc2UKKworICAgIHJldHVybiAoZmlsZSwgaXNfZGlyKQorCitkZWYgcmVhbHBhdGgoZmlsZSwgcm9vdCwgdXNlX3BoeXNkaXIgPSBUcnVlLCBsb29wX2NudCA9IDEwMCwgYXNzdW1lX2RpciA9IEZhbHNlKToKKyAgICAiIiIgUmV0dXJucyB0aGUgY2Fub25pY2FsIHBhdGggb2YgJ2ZpbGUnIHdpdGggYXNzdW1pbmcgYQorICAgIHRvcGxldmVsICdyb290JyBkaXJlY3RvcnkuIFdoZW4gJ3VzZV9waHlzZGlyJyBpcyBzZXQsIGFsbAorICAgIHByZWNlZGluZyBwYXRoIGNvbXBvbmVudHMgb2YgJ2ZpbGUnIHdpbGwgYmUgcmVzb2x2ZWQgZmlyc3Q7CisgICAgdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgdW5sZXNzIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBpcworICAgIG5vIHN5bWxpbmsgaW4gdGhlIHBhdGguIFdoZW4gJ2Fzc3VtZV9kaXInIGlzIG5vdCBzZXQsIG1pc3NpbmcKKyAgICBwYXRoIGNvbXBvbmVudHMgd2lsbCByYWlzZSBhbiBFTk9FTlQgZXJyb3IiIiIKKworICAgIHJvb3QgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3QpCisgICAgZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZSkKKworICAgIGlmIG5vdCByb290LmVuZHN3aXRoKG9zLnBhdGguc2VwKToKKyAgICAgICAgIyBsZXR0aW5nIHJvb3QgZW5kIHdpdGggJy8nIG1ha2VzIHNvbWUgdGhpbmdzIGVhc2llcgorICAgICAgICByb290ID0gcm9vdCArIG9zLnBhdGguc2VwCisKKyAgICBpZiBub3QgX19pc19wYXRoX2JlbG93KGZpbGUsIHJvb3QpOgorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlZBTCwgImZpbGUgJyVzJyBpcyBub3QgYmVsb3cgcm9vdCIgJSBmaWxlKQorCisgICAgdHJ5OgorICAgICAgICBpZiB1c2VfcGh5c2RpcjoKKyAgICAgICAgICAgIGZpbGUgPSBfX3JlYWxwYXRoX3JlbChyb290LCBmaWxlWyhsZW4ocm9vdCkgLSAxKTpdLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGUgPSBfX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKVswXQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUxPT1A6CisgICAgICAgICAgICAjIG1ha2UgRUxPT1AgbW9yZSByZWFkYWJsZTsgd2l0aG91dCBjYXRjaGluZyBpdCwgdGhlcmUgd2lsbAorICAgICAgICAgICAgIyBiZSBwcmludGVkIGEgYmFja3RyYWNlIHdpdGggMTAwcyBvZiBPU0Vycm9yIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICMgZWxzZQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTE9PUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtdWNoIHJlY3Vyc2lvbnMgd2hpbGUgcmVzb2x2aW5nICclcyc7IGxvb3AgaW4gJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgZS5zdHJlcnJvcikpCisKKyAgICAgICAgcmFpc2UKKworICAgIHJldHVybiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkgYi9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjYmNiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Byc2VydmljZS5weQpAQCAtMCwwICsxLDEyNiBAQAorCitkZWYgcHJzZXJ2X21ha2VfY29ubihkLCBjaGVjayA9IEZhbHNlKToKKyAgICBpbXBvcnQgcHJzZXJ2LnNlcnYKKyAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoIlBSU0VSVl9IT1NUIiwgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgdHJ5OgorICAgICAgICBjb25uID0gTm9uZQorICAgICAgICBjb25uID0gcHJzZXJ2LnNlcnYuUFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3RfcGFyYW1zWzBdLCBpbnQoaG9zdF9wYXJhbXNbMV0pKQorICAgICAgICBpZiBjaGVjazoKKyAgICAgICAgICAgIGlmIG5vdCBjb25uLnBpbmcoKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3NlcnZpY2Ugbm90IGF2YWlsYWJsZScpCisgICAgICAgIGQuc2V0VmFyKCJfX1BSU0VSVl9DT05OIixjb25uKQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoIkNvbm5lY3RpbmcgdG8gUFIgc2VydmljZSAlczolcyBmYWlsZWQ6ICVzIiAlIChob3N0X3BhcmFtc1swXSwgaG9zdF9wYXJhbXNbMV0sIHN0cihleGMpKSkKKworICAgIHJldHVybiBjb25uCisKK2RlZiBwcnNlcnZfZHVtcF9kYihkKToKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSk6CisgICAgICAgIGJiLmVycm9yKCJOb3QgdXNpbmcgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICBjb25uID0gcHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5lcnJvcigiTWFraW5nIGNvbm5lY3Rpb24gZmFpbGVkIHRvIHJlbW90ZSBQUiBzZXJ2aWNlIikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjZHVtcCBkYgorICAgIG9wdF92ZXJzaW9uID0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04nLCBUcnVlKQorICAgIG9wdF9wa2dhcmNoID0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1BLR0FSQ0gnLCBUcnVlKQorICAgIG9wdF9jaGVja3N1bSA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DSEVDS1NVTScsIFRydWUpCisgICAgb3B0X2NvbCA9ICgiMSIgPT0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX0NPTCcsIFRydWUpKQorICAgIHJldHVybiBjb25uLmV4cG9ydChvcHRfdmVyc2lvbiwgb3B0X3BrZ2FyY2gsIG9wdF9jaGVja3N1bSwgb3B0X2NvbCkKKworZGVmIHByc2Vydl9pbXBvcnRfZGIoZCwgZmlsdGVyX3ZlcnNpb249Tm9uZSwgZmlsdGVyX3BrZ2FyY2g9Tm9uZSwgZmlsdGVyX2NoZWNrc3VtPU5vbmUpOgorICAgIGlmIG5vdCBkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKToKKyAgICAgICAgYmIuZXJyb3IoIk5vdCB1c2luZyBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UiKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgY29ubiA9IGQuZ2V0VmFyKCJfX1BSU0VSVl9DT05OIiwgVHJ1ZSkKKyAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgIGNvbm4gPSBwcnNlcnZfbWFrZV9jb25uKGQpCisgICAgICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgICAgIGJiLmVycm9yKCJNYWtpbmcgY29ubmVjdGlvbiBmYWlsZWQgdG8gcmVtb3RlIFBSIHNlcnZpY2UiKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAjZ2V0IHRoZSBlbnRyeSB2YWx1ZXMKKyAgICBpbXBvcnRlZCA9IFtdCisgICAgcHJlZml4ID0gIlBSQVVUTyQiCisgICAgZm9yIHYgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIHYuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgKHJlbWFpbiwgc2VwLCBjaGVja3N1bSkgPSB2LnJwYXJ0aXRpb24oJyQnKQorICAgICAgICAgICAgKHJlbWFpbiwgc2VwLCBwa2dhcmNoKSA9IHJlbWFpbi5ycGFydGl0aW9uKCckJykKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgdmVyc2lvbikgPSByZW1haW4ucnBhcnRpdGlvbignJCcpCisgICAgICAgICAgICBpZiAocmVtYWluICsgJyQnICE9IHByZWZpeCkgb3IgXAorICAgICAgICAgICAgICAgKGZpbHRlcl92ZXJzaW9uIGFuZCBmaWx0ZXJfdmVyc2lvbiAhPSB2ZXJzaW9uKSBvciBcCisgICAgICAgICAgICAgICAoZmlsdGVyX3BrZ2FyY2ggYW5kIGZpbHRlcl9wa2dhcmNoICE9IHBrZ2FyY2gpIG9yIFwKKyAgICAgICAgICAgICAgIChmaWx0ZXJfY2hlY2tzdW0gYW5kIGZpbHRlcl9jaGVja3N1bSAhPSBjaGVja3N1bSk6CisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gaW50KGQuZ2V0VmFyKHJlbWFpbiArICckJyArIHZlcnNpb24gKyAnJCcgKyBwa2dhcmNoICsgJyQnICsgY2hlY2tzdW0sIFRydWUpKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKCJOb3QgdmFsaWQgdmFsdWUgb2YgJXM6JXMiICUgKHYsc3RyKGV4YykpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXQgPSBjb25uLmltcG9ydG9uZSh2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUpCisgICAgICAgICAgICBpZiByZXQgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoImltcG9ydGluZyglcywlcywlcywlZCkgZmFpbGVkLiBEQiBtYXkgaGF2ZSBsYXJnZXIgdmFsdWUgJWQiICUgKHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSxyZXQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgIGltcG9ydGVkLmFwcGVuZCgodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKSkKKyAgICByZXR1cm4gaW1wb3J0ZWQKKworZGVmIHByc2Vydl9leHBvcnRfdG9maWxlKGQsIG1ldGFpbmZvLCBkYXRhaW5mbywgbG9ja2Rvd24sIG5vbWF4PUZhbHNlKToKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICAjaW5pdGlsaXplIHRoZSBvdXRwdXQgZmlsZQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcignUFJTRVJWX0RVTVBESVInLCBUcnVlKSkKKyAgICBkZiA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUEZJTEUnLCBUcnVlKQorICAgICN3cml0ZSBkYXRhCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBkZikKKyAgICBmID0gb3BlbihkZiwgImEiKQorICAgIGlmIG1ldGFpbmZvOgorICAgICAgICAjZHVtcCBjb2x1bW4gaW5mbyAKKyAgICAgICAgZi53cml0ZSgiI1BSX2NvcmVfdmVyID0gXCIlc1wiXG5cbiIgJSBtZXRhaW5mb1snY29yZV92ZXInXSk7CisgICAgICAgIGYud3JpdGUoIiNUYWJsZTogJXNcbiIgJSBtZXRhaW5mb1sndGJsX25hbWUnXSkKKyAgICAgICAgZi53cml0ZSgiI0NvbHVtbnM6XG4iKQorICAgICAgICBmLndyaXRlKCIjbmFtZSAgICAgIFx0IHR5cGUgICAgXHQgbm90biAgICBcdCBkZmx0ICAgIFx0IHBrXG4iKQorICAgICAgICBmLndyaXRlKCIjLS0tLS0tLS0tLVx0IC0tLS0tLS0tXHQgLS0tLS0tLS1cdCAtLS0tLS0tLVx0IC0tLS1cbiIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihtZXRhaW5mb1snY29sX2luZm8nXSkpOgorICAgICAgICAgICAgZi53cml0ZSgiIyUxMHNcdCAlOHNcdCAlOHNcdCAlOHNcdCAlNHNcbiIgJSAKKyAgICAgICAgICAgICAgICAgICAgKG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWyduYW1lJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ3R5cGUnXSwgCisgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnbm90bnVsbCddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWydkZmx0X3ZhbHVlJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ3BrJ10pKQorICAgICAgICBmLndyaXRlKCJcbiIpCisKKyAgICBpZiBsb2NrZG93bjoKKyAgICAgICAgZi53cml0ZSgiUFJTRVJWX0xPQ0tET1dOID0gXCIxXCJcblxuIikKKworICAgIGlmIGRhdGFpbmZvOgorICAgICAgICBpZHggPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YWluZm8pKToKKyAgICAgICAgICAgIHBrZ2FyY2ggPSBkYXRhaW5mb1tpXVsncGtnYXJjaCddCisgICAgICAgICAgICB2YWx1ZSA9IGRhdGFpbmZvW2ldWyd2YWx1ZSddCisgICAgICAgICAgICBpZiBwa2dhcmNoIG5vdCBpbiBpZHg6CisgICAgICAgICAgICAgICAgaWR4W3BrZ2FyY2hdID0gaQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA+IGRhdGFpbmZvW2lkeFtwa2dhcmNoXV1bJ3ZhbHVlJ106CisgICAgICAgICAgICAgICAgaWR4W3BrZ2FyY2hdID0gaQorICAgICAgICAgICAgZi53cml0ZSgiUFJBVVRPJCVzJCVzJCVzID0gXCIlc1wiXG4iICUgCisgICAgICAgICAgICAgICAgKHN0cihkYXRhaW5mb1tpXVsndmVyc2lvbiddKSwgcGtnYXJjaCwgc3RyKGRhdGFpbmZvW2ldWydjaGVja3N1bSddKSwgc3RyKHZhbHVlKSkpCisgICAgICAgIGlmIG5vdCBub21heDoKKyAgICAgICAgICAgIGZvciBpIGluIGlkeDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJQUkFVVE9fJXNfJXMgPSBcIiVzXCJcbiIgJSAoc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3ZlcnNpb24nXSksc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3BrZ2FyY2gnXSksc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3ZhbHVlJ10pKSkKKyAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCitkZWYgcHJzZXJ2X2NoZWNrX2F2YWlsKGQpOgorICAgIGhvc3RfcGFyYW1zID0gZmlsdGVyKE5vbmUsIChkLmdldFZhcigiUFJTRVJWX0hPU1QiLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKSkKKyAgICB0cnk6CisgICAgICAgIGlmIGxlbihob3N0X3BhcmFtcykgIT0gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW50KGhvc3RfcGFyYW1zWzFdKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGJiLmZhdGFsKCdVbmRlZmluZWQvaW5jb3JyZWN0IFBSU0VSVl9IT1NUIHZhbHVlLiBGb3JtYXQ6ICJob3N0OnBvcnQiJykKKyAgICBlbHNlOgorICAgICAgICBwcnNlcnZfbWFrZV9jb25uKGQsIFRydWUpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9xYS5weSBiL21ldGEvbGliL29lL3FhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2RhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9xYS5weQpAQCAtMCwwICsxLDExMSBAQAorY2xhc3MgRUxGRmlsZToKKyAgICBFSV9OSURFTlQgPSAxNgorCisgICAgRUlfQ0xBU1MgICAgICA9IDQKKyAgICBFSV9EQVRBICAgICAgID0gNQorICAgIEVJX1ZFUlNJT04gICAgPSA2CisgICAgRUlfT1NBQkkgICAgICA9IDcKKyAgICBFSV9BQklWRVJTSU9OID0gOAorCisgICAgIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVJX0NMQVNTCisgICAgRUxGQ0xBU1NOT05FID0gMAorICAgIEVMRkNMQVNTMzIgICA9IDEKKyAgICBFTEZDTEFTUzY0ICAgPSAyCisKKyAgICAjIHBvc3NpYmxlIHZhbHVlIGZvciBFSV9WRVJTSU9OCisgICAgRVZfQ1VSUkVOVCAgID0gMQorCisgICAgIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVJX0RBVEEKKyAgICBFTEZEQVRBTk9ORSAgPSAwCisgICAgRUxGREFUQTJMU0IgID0gMQorICAgIEVMRkRBVEEyTVNCICA9IDIKKworICAgIGRlZiBteV9hc3NlcnQoc2VsZiwgZXhwZWN0YXRpb24sIHJlc3VsdCk6CisgICAgICAgIGlmIG5vdCBleHBlY3RhdGlvbiA9PSByZXN1bHQ6CisgICAgICAgICAgICAjcHJpbnQgIicleCcsJyV4JyAlcyIgJSAob3JkKGV4cGVjdGF0aW9uKSwgb3JkKHJlc3VsdCksIHNlbGYubmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiaXRzID0gMCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5iaXRzID0gYml0cworICAgICAgICBzZWxmLm9iamR1bXBfb3V0cHV0ID0ge30KKworICAgIGRlZiBvcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlKHNlbGYubmFtZSwgInIiKQorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLmZpbGUucmVhZChFTEZGaWxlLkVJX05JREVOVCs0KQorCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KGxlbihzZWxmLmRhdGEpLCBFTEZGaWxlLkVJX05JREVOVCs0KQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMF0sIGNocigweDdmKSApCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVsxXSwgJ0UnKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMl0sICdMJykKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzNdLCAnRicpCisgICAgICAgIGlmIHNlbGYuYml0cyA9PSAwOgorICAgICAgICAgICAgaWYgc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdID09IGNocihFTEZGaWxlLkVMRkNMQVNTMzIpOgorICAgICAgICAgICAgICAgIHNlbGYuYml0cyA9IDMyCisgICAgICAgICAgICBlbGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBjaHIoRUxGRmlsZS5FTEZDTEFTUzY0KToKKyAgICAgICAgICAgICAgICBzZWxmLmJpdHMgPSA2NAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vdCAzMi1iaXQgb3IgNjQuLiBsZXRzIGFzc2VydAorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRUxGIGJ1dCBub3QgMzIgb3IgNjQgYml0LiIpCisgICAgICAgIGVsaWYgc2VsZi5iaXRzID09IDMyOgorICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBjaHIoRUxGRmlsZS5FTEZDTEFTUzMyKSkKKyAgICAgICAgZWxpZiBzZWxmLmJpdHMgPT0gNjQ6CisgICAgICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10sIGNocihFTEZGaWxlLkVMRkNMQVNTNjQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IHNwZWNpZnkgdW5rbm93biwgMzIgb3IgNjQgYml0IHNpemUuIikKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfVkVSU0lPTl0sIGNocihFTEZGaWxlLkVWX0NVUlJFTlQpICkKKworICAgICAgICBzZWxmLnNleCA9IHNlbGYuZGF0YVtFTEZGaWxlLkVJX0RBVEFdCisgICAgICAgIGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEFOT05FKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2VsZi5zZXggPT0gRUxGREFUQU5PTkUiKQorICAgICAgICBlbGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEEyTFNCKToKKyAgICAgICAgICAgIHNlbGYuc2V4ID0gIjwiCisgICAgICAgIGVsaWYgc2VsZi5zZXggPT0gY2hyKEVMRkZpbGUuRUxGREFUQTJNU0IpOgorICAgICAgICAgICAgc2VsZi5zZXggPSAiPiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBzZWxmLnNleCIpCisKKyAgICBkZWYgb3NBYmkoc2VsZik6CisgICAgICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfT1NBQkldKQorCisgICAgZGVmIGFiaVZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQUJJVkVSU0lPTl0pCisKKyAgICBkZWYgYWJpU2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYml0cworCisgICAgZGVmIGlzTGl0dGxlRW5kaWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXggPT0gIjwiCisKKyAgICBkZWYgaXNCaWdFbmdpYW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNleCA9PSAiPiIKKworICAgIGRlZiBtYWNoaW5lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2Uga25vdyB0aGUgc2V4IHN0b3JlZCBpbiBzZWxmLnNleCBhbmQgd2UKKyAgICAgICAga25vdyB0aGUgcG9zaXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBzdHJ1Y3QKKyAgICAgICAgKGEsKSA9IHN0cnVjdC51bnBhY2soc2VsZi5zZXgrIkgiLCBzZWxmLmRhdGFbMTg6MjBdKQorICAgICAgICByZXR1cm4gYQorCisgICAgZGVmIHJ1bl9vYmpkdW1wKHNlbGYsIGNtZCwgZCk6CisgICAgICAgIGltcG9ydCBiYi5wcm9jZXNzCisgICAgICAgIGltcG9ydCBzeXMKKworICAgICAgICBpZiBjbWQgaW4gc2VsZi5vYmpkdW1wX291dHB1dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0KKworICAgICAgICBvYmpkdW1wID0gZC5nZXRWYXIoJ09CSkRVTVAnLCBUcnVlKQorCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsiTENfQUxMIl0gPSAiQyIKKyAgICAgICAgZW52WyJQQVRIIl0gPSBkLmdldFZhcignUEFUSCcsIFRydWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiJXMgJXMgJXMiICUgKG9iamR1bXAsIGNtZCwgc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYub2JqZHVtcF9vdXRwdXRbY21kXSA9IGJiLnByb2Nlc3MucnVuKFtvYmpkdW1wLCBjbWQsIHNlbGYubmFtZV0sIGVudj1lbnYsIHNoZWxsPUZhbHNlKVswXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYub2JqZHVtcF9vdXRwdXRbY21kXQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCIlcyAlcyAlcyBmYWlsZWQ6ICVzIiAlIChvYmpkdW1wLCBjbWQsIHNlbGYubmFtZSwgZSkpCisgICAgICAgICAgICByZXR1cm4gIiIKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5IGIvbWV0YS9saWIvb2UvcmVjaXBldXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYTcyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5CkBAIC0wLDAgKzEsNzQwIEBACisjIFV0aWxpdHkgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCBtb2RpZnlpbmcgcmVjaXBlcworIworIyBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSB0aGUgT0UgbGF5ZXIgaW5kZXgKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGV4dHdyYXAKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgdXRpbHMKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCByZQoraW1wb3J0IGZubWF0Y2gKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0LCBkZWZhdWx0ZGljdAorCisKKyMgSGVscCB1cyB0byBmaW5kIHBsYWNlcyB0byBpbnNlcnQgdmFsdWVzCityZWNpcGVfcHJvZ3Jlc3Npb24gPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJywgJ0xJQ0VOU0UnLCAnTElDX0ZJTEVTX0NIS1NVTScsICdQUk9WSURFUycsICdERVBFTkRTJywgJ1BSJywgJ1BWJywgJ1NSQ1JFVicsICdTUkNfVVJJJywgJ1MnLCAnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJywgJ2RvX3BhdGNoJywgJ0VYVFJBX09FQ09ORicsICdkb19jb25maWd1cmUnLCAnRVhUUkFfT0VNQUtFJywgJ2RvX2NvbXBpbGUnLCAnZG9faW5zdGFsbCcsICdkb19wb3B1bGF0ZV9zeXNyb290JywgJ0lOSVRTQ1JJUFQnLCAnVVNFUkFERCcsICdHUk9VUEFERCcsICdQQUNLQUdFUycsICdGSUxFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlBST1ZJREVTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ0FMTE9XX0VNUFRZJywgJ2RvX3BhY2thZ2UnLCAnZG9fZGVwbG95J10KKyMgVmFyaWFibGVzIHRoYXQgc29tZXRpbWVzIGFyZSBhIGJpdCBsb25nIGJ1dCBzaG91bGRuJ3QgYmUgd3JhcHBlZAorbm93cmFwX3ZhcnMgPSBbJ1NVTU1BUlknLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUiddCitsaXN0X3ZhcnMgPSBbJ1NSQ19VUkknLCAnTElDX0ZJTEVTX0NIS1NVTSddCittZXRhX3ZhcnMgPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJ10KKworCitkZWYgcG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pOgorICAgICIiIkNvbnZlcnQgYSByZWNpcGUgbmFtZSAoUE4pIHRvIHRoZSBwYXRoIHRvIHRoZSByZWNpcGUgZmlsZSIiIgorICAgIGltcG9ydCBiYi5wcm92aWRlcnMKKworICAgIGlmIHBuIGluIGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG46CisgICAgICAgIGZpbGVuYW1lcyA9IGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG5bcG5dCisgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwgY29va2VyLmRhdGEsIGNvb2tlci5yZWNpcGVjYWNoZSwgY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbikKKyAgICAgICAgcmV0dXJuIGJlc3RbM10KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2RlZiBnZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKToKKyAgICAiIiJJZiBhIHJlY2lwZSBjb3VsZCBub3QgYmUgZm91bmQsIGZpbmQgb3V0IHdoeSBpZiBwb3NzaWJsZSIiIgorICAgIGltcG9ydCBiYi50YXNrZGF0YQorICAgIHRhc2tkYXRhID0gYmIudGFza2RhdGEuVGFza0RhdGEoTm9uZSwgc2tpcGxpc3Q9Y29va2VyLnNraXBsaXN0KQorICAgIHJldHVybiB0YXNrZGF0YS5nZXRfcmVhc29ucyhwbikKKworCitkZWYgcGFyc2VfcmVjaXBlKGZuLCBhcHBlbmRmaWxlcywgZCk6CisgICAgIiIiCisgICAgUGFyc2UgYW4gaW5kaXZpZHVhbCByZWNpcGUgZmlsZSwgb3B0aW9uYWxseSB3aXRoIGEgbGlzdCBvZgorICAgIGJiYXBwZW5kIGZpbGVzLgorICAgICIiIgorICAgIGltcG9ydCBiYi5jYWNoZQorICAgIGVudmRhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGFwcGVuZGZpbGVzLCBkKQorICAgIHJldHVybiBlbnZkYXRhCisKKworZGVmIHBhcnNlX3JlY2lwZV9zaW1wbGUoY29va2VyLCBwbiwgZCwgYXBwZW5kcz1UcnVlKToKKyAgICAiIiIKKyAgICBQYXJzZSBhIHJlY2lwZSBhbmQgb3B0aW9uYWxseSBhbGwgYmJhcHBlbmRzIHRoYXQgYXBwbHkgdG8gaXQKKyAgICBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgICIiIgorICAgIGltcG9ydCBiYi5wcm92aWRlcnMKKworICAgIHJlY2lwZWZpbGUgPSBwbl90b19yZWNpcGUoY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgc2tpcHJlYXNvbnMgPSBnZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKQorICAgICAgICAjIFdlIG1heSBhcyB3ZWxsIHJlLXVzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlciBoZXJlCisgICAgICAgIGlmIHNraXByZWFzb25zOgorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoc2tpcHJlYXNvbnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcignVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICVzJyAlIHBuKQorICAgIGlmIGFwcGVuZHM6CisgICAgICAgIGFwcGVuZGZpbGVzID0gY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQorICAgIHJldHVybiBwYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kZmlsZXMsIGQpCisKKworZGVmIGdldF92YXJfZmlsZXMoZm4sIHZhcmxpc3QsIGQpOgorICAgICIiIkZpbmQgdGhlIGZpbGUgaW4gd2hpY2ggZWFjaCBvZiBhIGxpc3Qgb2YgdmFyaWFibGVzIGlzIHNldC4KKyAgICBOb3RlOiByZXF1aXJlcyB2YXJpYWJsZSBoaXN0b3J5IHRvIGJlIGVuYWJsZWQgd2hlbiBwYXJzaW5nLgorICAgICIiIgorICAgIHZhcmZpbGVzID0ge30KKyAgICBmb3IgdiBpbiB2YXJsaXN0OgorICAgICAgICBoaXN0b3J5ID0gZC52YXJoaXN0b3J5LnZhcmlhYmxlKHYpCisgICAgICAgIGZpbGVzID0gW10KKyAgICAgICAgZm9yIGV2ZW50IGluIGhpc3Rvcnk6CisgICAgICAgICAgICBpZiAnZmlsZScgaW4gZXZlbnQgYW5kIG5vdCAnZmxhZycgaW4gZXZlbnQ6CisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGV2ZW50WydmaWxlJ10pCisgICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZpbGVzWy0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IE5vbmUKKyAgICAgICAgdmFyZmlsZXNbdl0gPSBhY3R1YWxmaWxlCisKKyAgICByZXR1cm4gdmFyZmlsZXMKKworCitkZWYgcGF0Y2hfcmVjaXBlX2ZpbGUoZm4sIHZhbHVlcywgcGF0Y2g9RmFsc2UsIHJlbHBhdGg9JycpOgorICAgICIiIlVwZGF0ZSBvciBpbnNlcnQgdmFyaWFibGUgdmFsdWVzIGludG8gYSByZWNpcGUgZmlsZSAoYXNzdW1pbmcgeW91CisgICAgICAgaGF2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIGV4YWN0IGZpbGUgeW91IHdhbnQgdG8gdXBkYXRlLikKKyAgICAgICBOb3RlIHRoYXQgc29tZSBtYW51YWwgaW5zcGVjdGlvbi9pbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkCisgICAgICAgc2luY2UgdGhpcyBjYW5ub3QgaGFuZGxlIGFsbCBzaXR1YXRpb25zLgorICAgICIiIgorICAgIHJlbWFpbmluZ25hbWVzID0ge30KKyAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICByZW1haW5pbmduYW1lc1trXSA9IHJlY2lwZV9wcm9ncmVzc2lvbi5pbmRleChrKSBpZiBrIGluIHJlY2lwZV9wcm9ncmVzc2lvbiBlbHNlIC0xCisgICAgcmVtYWluaW5nbmFtZXMgPSBPcmRlcmVkRGljdChzb3J0ZWQocmVtYWluaW5nbmFtZXMuaXRlcml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFsxXSkpCisKKyAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgIGRlZiBvdXRwdXR2YWx1ZShuYW1lKToKKyAgICAgICAgICAgIHJhd3RleHQgPSAnJXMgPSAiJXMiXG4nICUgKG5hbWUsIHZhbHVlc1tuYW1lXSkKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gbm93cmFwX3ZhcnM6CisgICAgICAgICAgICAgICAgdGYud3JpdGUocmF3dGV4dCkKKyAgICAgICAgICAgIGVsaWYgbmFtZSBpbiBsaXN0X3ZhcnM6CisgICAgICAgICAgICAgICAgc3BsaXR2YWx1ZSA9IHZhbHVlc1tuYW1lXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsdWUpID4gMToKKyAgICAgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gJyBcXFxuJyArICgnICcgKiAobGVuKG5hbWUpICsgNCkpCisgICAgICAgICAgICAgICAgICAgIHRmLndyaXRlKCclcyA9ICIlcyVzIlxuJyAlIChuYW1lLCBsaW5lc3BsaXQuam9pbihzcGxpdHZhbHVlKSwgbGluZXNwbGl0KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShyYXd0ZXh0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3cmFwcGVkID0gdGV4dHdyYXAud3JhcChyYXd0ZXh0KQorICAgICAgICAgICAgICAgIGZvciB3cmFwbGluZSBpbiB3cmFwcGVkWzotMV06CisgICAgICAgICAgICAgICAgICAgIHRmLndyaXRlKCclcyBcXFxuJyAlIHdyYXBsaW5lKQorICAgICAgICAgICAgICAgIHRmLndyaXRlKCclc1xuJyAlIHdyYXBwZWRbLTFdKQorCisgICAgICAgIHRmbiA9IHRmLm5hbWUKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAjIEZpcnN0IHJ1bnRocm91Z2ggLSBmaW5kIGV4aXN0aW5nIG5hbWVzIChzbyB3ZSBrbm93IG5vdCB0byBpbnNlcnQgYmFzZWQgb24gcmVjaXBlX3Byb2dyZXNzaW9uKQorICAgICAgICAgICAgIyBTZWNvbmQgcnVudGhyb3VnaCAtIG1ha2UgdGhlIGNoYW5nZXMKKyAgICAgICAgICAgIGV4aXN0aW5nbmFtZXMgPSBbXQorICAgICAgICAgICAgZm9yIHJ1bnRocm91Z2ggaW4gWzEsIDJdOgorICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcmVjaXBlX3Byb2dyZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgnXiVzKF9wcmVwZW5kfF9hcHBlbmQpKlsgPzo9KF0nICUgcCwgbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1haW5pbmduYW1lc1trXSA+IC0xIGFuZCByZWNpcGVfcHJvZ3Jlc3Npb24uaW5kZXgocCkgPiByZW1haW5pbmduYW1lc1trXSBhbmQgcnVudGhyb3VnaCA+IDEgYW5kIG5vdCBrIGluIGV4aXN0aW5nbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcmVtYWluaW5nbmFtZXNba10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJ14lc1sgPzo9XScgJSBrLCBsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycm5hbWUgPSBrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJ1bnRocm91Z2ggPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nbmFtZXMuYXBwZW5kKGspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcmVtYWluaW5nbmFtZXNba10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJuYW1lIGFuZCBydW50aHJvdWdoID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXR2YWx1ZShjdXJybmFtZSkKKworICAgICAgICAgICAgICAgICAgICBpZiBjdXJybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNsaW5lLmVuZHN3aXRoKCdcXCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgcnVudGhyb3VnaCA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShsaW5lKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICBpZiByZW1haW5pbmduYW1lczoKKyAgICAgICAgICAgIHRmLndyaXRlKCdcbicpCisgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoaykKKworICAgIHdpdGggb3Blbih0Zm4sICdVJykgYXMgZjoKKyAgICAgICAgdG9saW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBpZiBwYXRjaDoKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAnVScpIGFzIGY6CisgICAgICAgICAgICBmcm9tbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIHJlbGZuID0gb3MucGF0aC5yZWxwYXRoKGZuLCByZWxwYXRoKQorICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZnJvbWxpbmVzLCB0b2xpbmVzLCAnYS8lcycgJSByZWxmbiwgJ2IvJXMnICUgcmVsZm4pCisgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisgICAgICAgIHJldHVybiBkaWZmCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlbGluZXModG9saW5lcykKKyAgICAgICAgb3MucmVtb3ZlKHRmbikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGxvY2FsaXNlX2ZpbGVfdmFycyhmbiwgdmFyZmlsZXMsIHZhcmxpc3QpOgorICAgICIiIkdpdmVuIGEgbGlzdCBvZiB2YXJpYWJsZXMgYW5kIHZhcmlhYmxlIGhpc3RvcnkgKGZldGNoZWQgd2l0aCBnZXRfdmFyX2ZpbGVzKCkpCisgICAgZmluZCB3aGVyZSBlYWNoIHZhcmlhYmxlIHNob3VsZCBiZSBzZXQvY2hhbmdlZC4gVGhpcyBoYW5kbGVzIGZvciBleGFtcGxlIHdoZXJlIGEKKyAgICByZWNpcGUgaW5jbHVkZXMgYW4gaW5jIGZpbGUgd2hlcmUgdmFyaWFibGVzIG1pZ2h0IGJlIGNoYW5nZWQgLSBpbiBtb3N0IGNhc2VzCisgICAgd2Ugd2FudCB0byB1cGRhdGUgdGhlIGluYyBmaWxlIHdoZW4gY2hhbmdpbmcgdGhlIHZhcmlhYmxlIHZhbHVlIHJhdGhlciB0aGFuIGFkZGluZworICAgIGl0IHRvIHRoZSByZWNpcGUgaXRzZWxmLgorICAgICIiIgorICAgIGZuZGlyID0gb3MucGF0aC5kaXJuYW1lKGZuKSArIG9zLnNlcAorCisgICAgZmlyc3RfbWV0YV9maWxlID0gTm9uZQorICAgIGZvciB2IGluIG1ldGFfdmFyczoKKyAgICAgICAgZiA9IHZhcmZpbGVzLmdldCh2LCBOb25lKQorICAgICAgICBpZiBmOgorICAgICAgICAgICAgYWN0dWFsZGlyID0gb3MucGF0aC5kaXJuYW1lKGYpICsgb3Muc2VwCisgICAgICAgICAgICBpZiBhY3R1YWxkaXIuc3RhcnRzd2l0aChmbmRpcik6CisgICAgICAgICAgICAgICAgZmlyc3RfbWV0YV9maWxlID0gZgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBmaWxldmFycyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgZm9yIHYgaW4gdmFybGlzdDoKKyAgICAgICAgZiA9IHZhcmZpbGVzW3ZdCisgICAgICAgICMgT25seSByZXR1cm4gZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSByZWNpcGUgb3IgaW4gc29tZSBkaXJlY3RvcnkgYmVsb3cgdGhlcmUKKyAgICAgICAgIyAodGhpcyBleGNsdWRlcyBiYmNsYXNzIGZpbGVzIGFuZCBjb21tb24gaW5jIGZpbGVzIHRoYXQgd291bGRuJ3QgYmUgYXBwcm9wcmlhdGUgdG8gc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAjIGluIGlmIHdlIHdlcmUgZ29pbmcgdG8gc2V0IGEgdmFsdWUgc3BlY2lmaWMgdG8gdGhpcyByZWNpcGUpCisgICAgICAgIGlmIGY6CisgICAgICAgICAgICBhY3R1YWxmaWxlID0gZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBWYXJpYWJsZSBpc24ndCBpbiBhIGZpbGUsIGlmIGl0J3Mgb25lIG9mIHRoZSAibWV0YSIgdmFycywgdXNlIHRoZSBmaXJzdCBmaWxlIHdpdGggYSBtZXRhIHZhciBpbiBpdAorICAgICAgICAgICAgaWYgZmlyc3RfbWV0YV9maWxlOgorICAgICAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmaXJzdF9tZXRhX2ZpbGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZuCisKKyAgICAgICAgYWN0dWFsZGlyID0gb3MucGF0aC5kaXJuYW1lKGFjdHVhbGZpbGUpICsgb3Muc2VwCisgICAgICAgIGlmIG5vdCBhY3R1YWxkaXIuc3RhcnRzd2l0aChmbmRpcik6CisgICAgICAgICAgICBhY3R1YWxmaWxlID0gZm4KKyAgICAgICAgZmlsZXZhcnNbYWN0dWFsZmlsZV0uYXBwZW5kKHYpCisKKyAgICByZXR1cm4gZmlsZXZhcnMKKworZGVmIHBhdGNoX3JlY2lwZShkLCBmbiwgdmFydmFsdWVzLCBwYXRjaD1GYWxzZSwgcmVscGF0aD0nJyk6CisgICAgIiIiTW9kaWZ5IGEgbGlzdCBvZiB2YXJpYWJsZSB2YWx1ZXMgaW4gdGhlIHNwZWNpZmllZCByZWNpcGUuIEhhbmRsZXMgaW5jIGZpbGVzIGlmCisgICAgdXNlZCBieSB0aGUgcmVjaXBlLgorICAgICIiIgorICAgIHZhcmxpc3QgPSB2YXJ2YWx1ZXMua2V5cygpCisgICAgdmFyZmlsZXMgPSBnZXRfdmFyX2ZpbGVzKGZuLCB2YXJsaXN0LCBkKQorICAgIGxvY3MgPSBsb2NhbGlzZV9maWxlX3ZhcnMoZm4sIHZhcmZpbGVzLCB2YXJsaXN0KQorICAgIHBhdGNoZXMgPSBbXQorICAgIGZvciBmLHYgaW4gbG9jcy5pdGVyaXRlbXMoKToKKyAgICAgICAgdmFscyA9IHtrOiB2YXJ2YWx1ZXNba10gZm9yIGsgaW4gdn0KKyAgICAgICAgcGF0Y2hkYXRhID0gcGF0Y2hfcmVjaXBlX2ZpbGUoZiwgdmFscywgcGF0Y2gsIHJlbHBhdGgpCisgICAgICAgIGlmIHBhdGNoOgorICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQocGF0Y2hkYXRhKQorCisgICAgaWYgcGF0Y2g6CisgICAgICAgIHJldHVybiBwYXRjaGVzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCisKK2RlZiBjb3B5X3JlY2lwZV9maWxlcyhkLCB0Z3RfZGlyLCB3aG9sZV9kaXI9RmFsc2UsIGRvd25sb2FkPVRydWUpOgorICAgICIiIkNvcHkgKGxvY2FsKSByZWNpcGUgZmlsZXMsIGluY2x1ZGluZyBib3RoIGZpbGVzIGluY2x1ZGVkIHZpYSBpbmNsdWRlL3JlcXVpcmUsCisgICAgYW5kIGZpbGVzIHJlZmVycmVkIHRvIGluIHRoZSBTUkNfVVJJIHZhcmlhYmxlLiIiIgorICAgIGltcG9ydCBiYi5mZXRjaDIKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgIyBGSVhNRSBuZWVkIGEgd2FybmluZyBpZiB0aGUgdW5leHBhbmRlZCBTUkNfVVJJIHZhbHVlIGNvbnRhaW5zIHZhcmlhYmxlIHJlZmVyZW5jZXMKKworICAgIHVyaXMgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHVyaXMsIGQpCisgICAgaWYgZG93bmxvYWQ6CisgICAgICAgIGZldGNoLmRvd25sb2FkKCkKKworICAgICMgQ29weSBsb2NhbCBmaWxlcyB0byB0YXJnZXQgZGlyZWN0b3J5IGFuZCBnYXRoZXIgYW55IHJlbW90ZSBmaWxlcworICAgIGJiX2RpciA9IG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScsIFRydWUpKSArIG9zLnNlcAorICAgIHJlbW90ZXMgPSBbXQorICAgIGluY2x1ZGVzID0gW3BhdGggZm9yIHBhdGggaW4gZC5nZXRWYXIoJ0JCSU5DTFVERUQnLCBUcnVlKS5zcGxpdCgpIGlmCisgICAgICAgICAgICAgICAgcGF0aC5zdGFydHN3aXRoKGJiX2RpcikgYW5kIG9zLnBhdGguZXhpc3RzKHBhdGgpXQorICAgIGZvciBwYXRoIGluIGZldGNoLmxvY2FscGF0aHMoKSArIGluY2x1ZGVzOgorICAgICAgICAjIE9ubHkgaW1wb3J0IGZpbGVzIHRoYXQgYXJlIHVuZGVyIHRoZSBtZXRhIGRpcmVjdG9yeQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoYmJfZGlyKToKKyAgICAgICAgICAgIGlmIG5vdCB3aG9sZV9kaXI6CisgICAgICAgICAgICAgICAgcmVscGF0aCA9IG9zLnBhdGgucmVscGF0aChwYXRoLCBiYl9kaXIpCisgICAgICAgICAgICAgICAgc3ViZGlyID0gb3MucGF0aC5qb2luKHRndF9kaXIsIG9zLnBhdGguZGlybmFtZShyZWxwYXRoKSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3ViZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoc3ViZGlyKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MihwYXRoLCBvcy5wYXRoLmpvaW4odGd0X2RpciwgcmVscGF0aCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZW1vdGVzLmFwcGVuZChwYXRoKQorICAgICMgU2ltcGx5IGNvcHkgd2hvbGUgbWV0YSBkaXIsIGlmIHJlcXVlc3RlZAorICAgIGlmIHdob2xlX2RpcjoKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGJiX2RpciwgdGd0X2RpcikKKworICAgIHJldHVybiByZW1vdGVzCisKKworZGVmIGdldF9yZWNpcGVfcGF0Y2hlcyhkKToKKyAgICAiIiJHZXQgYSBsaXN0IG9mIHRoZSBwYXRjaGVzIGluY2x1ZGVkIGluIFNSQ19VUkkgd2l0aGluIGEgcmVjaXBlLiIiIgorICAgIHBhdGNoZmlsZXMgPSBbXQorICAgICMgRXhlY3V0ZSBzcmNfcGF0Y2hlcygpIGRlZmluZWQgaW4gcGF0Y2guYmJjbGFzcyAtIHRoaXMgd29ya3Mgc2luY2UgdGhhdCBjbGFzcworICAgICMgaXMgaW5oZXJpdGVkIGdsb2JhbGx5CisgICAgcGF0Y2hlcyA9IGJiLnV0aWxzLmV4ZWNfZmxhdF9weXRob25fZnVuYygnc3JjX3BhdGNoZXMnLCBkKQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgcGF0Y2hmaWxlcy5hcHBlbmQobG9jYWwpCisgICAgcmV0dXJuIHBhdGNoZmlsZXMKKworCitkZWYgZ2V0X3JlY2lwZV9wYXRjaGVkX2ZpbGVzKGQpOgorICAgICIiIgorICAgIEdldCB0aGUgbGlzdCBvZiBwYXRjaGVzIGZvciBhIHJlY2lwZSBhbG9uZyB3aXRoIHRoZSBmaWxlcyBlYWNoIHBhdGNoIG1vZGlmaWVzLgorICAgIFBhcmFtczoKKyAgICAgICAgZDogdGhlIGRhdGFzdG9yZSBmb3IgdGhlIHJlY2lwZQorICAgIFJldHVybnM6CisgICAgICAgIGEgZGljdCBtYXBwaW5nIHBhdGNoIGZpbGUgcGF0aCB0byBhIGxpc3Qgb2YgdHVwbGVzIG9mIGNoYW5nZWQgZmlsZXMgYW5kCisgICAgICAgIGNoYW5nZSBtb2RlICgnQScgZm9yIGFkZCwgJ0QnIGZvciBkZWxldGUgb3IgJ00nIGZvciBtb2RpZnkpCisgICAgIiIiCisgICAgaW1wb3J0IG9lLnBhdGNoCisgICAgIyBFeGVjdXRlIHNyY19wYXRjaGVzKCkgZGVmaW5lZCBpbiBwYXRjaC5iYmNsYXNzIC0gdGhpcyB3b3JrcyBzaW5jZSB0aGF0IGNsYXNzCisgICAgIyBpcyBpbmhlcml0ZWQgZ2xvYmFsbHkKKyAgICBwYXRjaGVzID0gYmIudXRpbHMuZXhlY19mbGF0X3B5dGhvbl9mdW5jKCdzcmNfcGF0Y2hlcycsIGQpCisgICAgcGF0Y2hlZGZpbGVzID0ge30KKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgXywgXywgcGF0Y2hmaWxlLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBzdHJpcGxldmVsID0gaW50KHBhcm1bJ3N0cmlwbGV2ZWwnXSkKKyAgICAgICAgcGF0Y2hlZGZpbGVzW3BhdGNoZmlsZV0gPSBvZS5wYXRjaC5QYXRjaFNldC5nZXRQYXRjaGVkRmlsZXMocGF0Y2hmaWxlLCBzdHJpcGxldmVsLCBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1MnLCBUcnVlKSwgcGFybS5nZXQoJ3BhdGNoZGlyJywgJycpKSkKKyAgICByZXR1cm4gcGF0Y2hlZGZpbGVzCisKKworZGVmIHZhbGlkYXRlX3BuKHBuKToKKyAgICAiIiJQZXJmb3JtIHZhbGlkYXRpb24gb24gYSByZWNpcGUgbmFtZSAoUE4pIGZvciBhIG5ldyByZWNpcGUuIiIiCisgICAgcmVzZXJ2ZWRfbmFtZXMgPSBbJ2ZvcmNldmFyaWFibGUnLCAnYXBwZW5kJywgJ3ByZXBlbmQnLCAncmVtb3ZlJ10KKyAgICBpZiBub3QgcmUubWF0Y2goJ1swLTlhLXotLl0rJywgcG4pOgorICAgICAgICByZXR1cm4gJ1JlY2lwZSBuYW1lICIlcyIgaXMgaW52YWxpZDogb25seSBjaGFyYWN0ZXJzIDAtOSwgYS16LCAtIGFuZCAuIGFyZSBhbGxvd2VkJyAlIHBuCisgICAgZWxpZiBwbiBpbiByZXNlcnZlZF9uYW1lczoKKyAgICAgICAgcmV0dXJuICdSZWNpcGUgbmFtZSAiJXMiIGlzIGludmFsaWQ6IGlzIGEgcmVzZXJ2ZWQga2V5d29yZCcgJSBwbgorICAgIGVsaWYgcG4uc3RhcnRzd2l0aCgncG4tJyk6CisgICAgICAgIHJldHVybiAnUmVjaXBlIG5hbWUgIiVzIiBpcyBpbnZhbGlkOiBuYW1lcyBzdGFydGluZyB3aXRoICJwbi0iIGFyZSByZXNlcnZlZCcgJSBwbgorICAgIHJldHVybiAnJworCisKK2RlZiBnZXRfYmJhcHBlbmRfcGF0aChkLCBkZXN0bGF5ZXJkaXIsIHdpbGRjYXJkdmVyPUZhbHNlKToKKyAgICAiIiJEZXRlcm1pbmUgaG93IGEgYmJhcHBlbmQgZm9yIGEgcmVjaXBlIHNob3VsZCBiZSBuYW1lZCBhbmQgbG9jYXRlZCB3aXRoaW4gYW5vdGhlciBsYXllciIiIgorCisgICAgaW1wb3J0IGJiLmNvb2tlcmRhdGEKKworICAgIGRlc3RsYXllcmRpciA9IG9zLnBhdGguYWJzcGF0aChkZXN0bGF5ZXJkaXIpCisgICAgcmVjaXBlZmlsZSA9IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICByZWNpcGVmbiA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSlbMF0KKyAgICBpZiB3aWxkY2FyZHZlciBhbmQgJ18nIGluIHJlY2lwZWZuOgorICAgICAgICByZWNpcGVmbiA9IHJlY2lwZWZuLnNwbGl0KCdfJywgMSlbMF0gKyAnXyUnCisgICAgYXBwZW5kZm4gPSByZWNpcGVmbiArICcuYmJhcHBlbmQnCisKKyAgICAjIFBhcnNlIHRoZSBzcGVjaWZpZWQgbGF5ZXIncyBsYXllci5jb25mIGZpbGUgZGlyZWN0bHksIGluIGNhc2UgdGhlIGxheWVyIGlzbid0IGluIGJibGF5ZXJzLmNvbmYKKyAgICBjb25mZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgY29uZmRhdGEuc2V0VmFyKCdCQkZJTEVTJywgJycpCisgICAgY29uZmRhdGEuc2V0VmFyKCdMQVlFUkRJUicsIGRlc3RsYXllcmRpcikKKyAgICBkZXN0bGF5ZXJjb25mID0gb3MucGF0aC5qb2luKGRlc3RsYXllcmRpciwgImNvbmYiLCAibGF5ZXIuY29uZiIpCisgICAgY29uZmRhdGEgPSBiYi5jb29rZXJkYXRhLnBhcnNlX2NvbmZpZ19maWxlKGRlc3RsYXllcmNvbmYsIGNvbmZkYXRhKQorCisgICAgb3JpZ2xheWVyZGlyID0gZmluZF9sYXllcmRpcihyZWNpcGVmaWxlKQorICAgIGlmIG5vdCBvcmlnbGF5ZXJkaXI6CisgICAgICAgIHJldHVybiAoTm9uZSwgRmFsc2UpCisgICAgIyBOb3cgam9pbiB0aGlzIHRvIHRoZSBwYXRoIHdoZXJlIHRoZSBiYmFwcGVuZCBpcyBnb2luZyBhbmQgY2hlY2sgaWYgaXQgaXMgY292ZXJlZCBieSBCQkZJTEVTCisgICAgYXBwZW5kcGF0aCA9IG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsIG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIG9yaWdsYXllcmRpciksIGFwcGVuZGZuKQorICAgIGNsb3NlcGF0aCA9ICcnCisgICAgcGF0aG9rID0gVHJ1ZQorICAgIGZvciBiYmZpbGVzcGVjIGluIGNvbmZkYXRhLmdldFZhcignQkJGSUxFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoYXBwZW5kcGF0aCwgYmJmaWxlc3BlYyk6CisgICAgICAgICAgICAjIE91ciBhcHBlbmQgcGF0aCB3b3Jrcywgd2UncmUgZG9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiBiYmZpbGVzcGVjLnN0YXJ0c3dpdGgoZGVzdGxheWVyZGlyKSBhbmQgZm5tYXRjaC5mbm1hdGNoY2FzZSgndGVzdC5iYmFwcGVuZCcsIG9zLnBhdGguYmFzZW5hbWUoYmJmaWxlc3BlYykpOgorICAgICAgICAgICAgIyBUcnkgdG8gZmluZCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBwYXRoCisgICAgICAgICAgICBpZiBsZW4oYmJmaWxlc3BlYykgPiBsZW4oY2xvc2VwYXRoKToKKyAgICAgICAgICAgICAgICBjbG9zZXBhdGggPSBiYmZpbGVzcGVjCisgICAgZWxzZToKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHRoZSBiYmFwcGVuZCBsYXllciBhbmQgdGhlIG9yaWdpbmFsIHJlY2lwZSdzIGxheWVyIGRvbid0IGhhdmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgIGlmIGNsb3NlcGF0aDoKKyAgICAgICAgICAgICMgYmJhcHBlbmQgbGF5ZXIncyBsYXllci5jb25mIGF0IGxlYXN0IGhhcyBhIHNwZWMgdGhhdCBwaWNrcyB1cCAuYmJhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICMgTm93IHdlIGp1c3QgbmVlZCB0byBzdWJzdGl0dXRlIG91dCBhbnkgd2lsZGNhcmRzCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKGNsb3NlcGF0aCksIGRlc3RsYXllcmRpcikKKyAgICAgICAgICAgIGlmICdyZWNpcGVzLSonIGluIGFwcGVuZHN1YmRpcjoKKyAgICAgICAgICAgICAgICAjIFRyeSB0byBjb3B5IHRoaXMgcGFydCBmcm9tIHRoZSBvcmlnaW5hbCByZWNpcGUgcGF0aAorICAgICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaCgnL3JlY2lwZXMtW14vXSsvJywgcmVjaXBlZmlsZSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZHN1YmRpciA9IGFwcGVuZHN1YmRpci5yZXBsYWNlKCcvcmVjaXBlcy0qLycsIHJlcy5ncm91cCgwKSkKKyAgICAgICAgICAgICMgVGhpcyBpcyBjcnVkZSwgYnV0IHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnKicsIHJlY2lwZWZuLnNwbGl0KCdfJylbMF0pCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnPycsICdhJykKKyAgICAgICAgICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCBhcHBlbmRzdWJkaXIsIGFwcGVuZGZuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aG9rID0gRmFsc2UKKyAgICByZXR1cm4gKGFwcGVuZHBhdGgsIHBhdGhvaykKKworCitkZWYgYmJhcHBlbmRfcmVjaXBlKHJkLCBkZXN0bGF5ZXJkaXIsIHNyY2ZpbGVzLCBpbnN0YWxsPU5vbmUsIHdpbGRjYXJkdmVyPUZhbHNlLCBtYWNoaW5lPU5vbmUsIGV4dHJhbGluZXM9Tm9uZSwgcmVtb3ZldmFsdWVzPU5vbmUpOgorICAgICIiIgorICAgIFdyaXRlcyBhIGJiYXBwZW5kIGZpbGUgZm9yIGEgcmVjaXBlCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgcmQ6IGRhdGEgZGljdGlvbmFyeSBmb3IgdGhlIHJlY2lwZQorICAgICAgICBkZXN0bGF5ZXJkaXI6IGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBsYXllciB0byBwbGFjZSB0aGUgYmJhcHBlbmQgaW4KKyAgICAgICAgICAgIChzdWJkaXJlY3RvcnkgcGF0aCBmcm9tIHRoZXJlIHdpbGwgYmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5KQorICAgICAgICBzcmNmaWxlczogZGljdCBvZiBzb3VyY2UgZmlsZXMgdG8gYWRkIHRvIFNSQ19VUkksIHdoZXJlIHRoZSB2YWx1ZQorICAgICAgICAgICAgaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSB0byBiZSBhZGRlZCwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUKKyAgICAgICAgICAgIG9yaWdpbmFsIGZpbGVuYW1lIGFzIGl0IHdvdWxkIGFwcGVhciBpbiBTUkNfVVJJIG9yIE5vbmUgaWYgaXQKKyAgICAgICAgICAgIGlzbid0IGFscmVhZHkgcHJlc2VudC4gWW91IG1heSBwYXNzIE5vbmUgZm9yIHRoaXMgcGFyYW1ldGVyIGlmCisgICAgICAgICAgICB5b3Ugc2ltcGx5IHdhbnQgdG8gc3BlY2lmeSB5b3VyIG93biBjb250ZW50IHZpYSB0aGUgZXh0cmFsaW5lcworICAgICAgICAgICAgcGFyYW1ldGVyLgorICAgICAgICBpbnN0YWxsOiBkaWN0IG1hcHBpbmcgZW50cmllcyBpbiBzcmNmaWxlcyB0byBhIHR1cGxlIG9mIHR3byBlbGVtZW50czoKKyAgICAgICAgICAgIGluc3RhbGwgcGF0aCAoKndpdGhvdXQqICR7RH0gcHJlZml4KSBhbmQgcGVybWlzc2lvbiB2YWx1ZSAoYXMgYQorICAgICAgICAgICAgc3RyaW5nLCBlLmcuICcwNjQ0JykuCisgICAgICAgIHdpbGRjYXJkdmVyOiBUcnVlIHRvIHVzZSBhICUgd2lsZGNhcmQgaW4gdGhlIGJiYXBwZW5kIGZpbGVuYW1lLCBvcgorICAgICAgICAgICAgRmFsc2UgdG8gbWFrZSB0aGUgYmJhcHBlbmQgc3BlY2lmaWMgdG8gdGhlIHJlY2lwZSB2ZXJzaW9uLgorICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgSWYgc3BlY2lmaWVkLCBtYWtlIHRoZSBjaGFuZ2VzIGluIHRoZSBiYmFwcGVuZCBzcGVjaWZpYyB0byB0aGlzCisgICAgICAgICAgICBtYWNoaW5lLiBUaGlzIHdpbGwgYWxzbyBjYXVzZSBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorICAgICAgICAgICAgdG8gYmUgYWRkZWQgdG8gdGhlIGJiYXBwZW5kLgorICAgICAgICBleHRyYWxpbmVzOgorICAgICAgICAgICAgRXh0cmEgbGluZXMgdG8gYWRkIHRvIHRoZSBiYmFwcGVuZC4gVGhpcyBtYXkgYmUgYSBkaWN0IG9mIG5hbWUKKyAgICAgICAgICAgIHZhbHVlIHBhaXJzLCBvciBzaW1wbHkgYSBsaXN0IG9mIHRoZSBsaW5lcy4KKyAgICAgICAgcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgVmFyaWFibGUgdmFsdWVzIHRvIHJlbW92ZSAtIGEgZGljdCBvZiBuYW1lcy92YWx1ZXMuCisgICAgIiIiCisKKyAgICBpZiBub3QgcmVtb3ZldmFsdWVzOgorICAgICAgICByZW1vdmV2YWx1ZXMgPSB7fQorCisgICAgIyBEZXRlcm1pbmUgaG93IHRoZSBiYmFwcGVuZCBzaG91bGQgYmUgbmFtZWQKKyAgICBhcHBlbmRwYXRoLCBwYXRob2sgPSBnZXRfYmJhcHBlbmRfcGF0aChyZCwgZGVzdGxheWVyZGlyLCB3aWxkY2FyZHZlcikKKyAgICBpZiBub3QgYXBwZW5kcGF0aDoKKyAgICAgICAgYmIuZXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgbGF5ZXIgZGlyZWN0b3J5IGNvbnRhaW5pbmcgJXMnICUgcmVjaXBlZmlsZSkKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorICAgIGlmIG5vdCBwYXRob2s6CisgICAgICAgIGJiLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgY29ycmVjdCBzdWJkaXJlY3RvcnkgcGF0aCBmb3IgYmJhcHBlbmQgZmlsZSAtIGNoZWNrIHRoYXQgd2hhdCAlcyBhZGRzIHRvIEJCRklMRVMgYWxzbyBtYXRjaGVzIC5iYmFwcGVuZCBmaWxlcy4gVXNpbmcgJXMgZm9yIG5vdywgYnV0IHVudGlsIHlvdSBmaXggdGhpcyB0aGUgYmJhcHBlbmQgd2lsbCBub3QgYmUgYXBwbGllZC4nICUgKG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgb3MucGF0aC5kaXJuYW1lKGFwcGVuZHBhdGgpKSkKKworICAgIGFwcGVuZGRpciA9IG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihhcHBlbmRkaXIpCisKKyAgICAjIEZJWE1FIGNoZWNrIGlmIHRoZSBiYmFwcGVuZCBkb2Vzbid0IGdldCBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyIHByaW9yaXR5IGxheWVyPworCisgICAgbGF5ZXJkaXJzID0gW29zLnBhdGguYWJzcGF0aChsYXllcmRpcikgZm9yIGxheWVyZGlyIGluIHJkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKS5zcGxpdCgpXQorICAgIGlmIG5vdCBvcy5wYXRoLmFic3BhdGgoZGVzdGxheWVyZGlyKSBpbiBsYXllcmRpcnM6CisgICAgICAgIGJiLndhcm4oJ1NwZWNpZmllZCBsYXllciBpcyBub3QgY3VycmVudGx5IGVuYWJsZWQgaW4gYmJsYXllcnMuY29uZiwgeW91IHdpbGwgbmVlZCB0byBhZGQgaXQgYmVmb3JlIHRoaXMgYmJhcHBlbmQgd2lsbCBiZSBhY3RpdmUnKQorCisgICAgYmJhcHBlbmRsaW5lcyA9IFtdCisgICAgaWYgZXh0cmFsaW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleHRyYWxpbmVzLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBleHRyYWxpbmVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKChuYW1lLCAnPScsIHZhbHVlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRG8gb3VyIGJlc3QgdG8gc3BsaXQgaXQKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGV4dHJhbGluZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoTm9uZSwgMikKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA9PSAzOgorICAgICAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCh0dXBsZShzcGxpdGxpbmUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCBleHRyYWxpbmVzIHZhbHVlIHBhc3NlZCcpCisKKyAgICBkZWYgcG9wbGluZSh2YXJuYW1lKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihiYmFwcGVuZGxpbmVzKSk6CisgICAgICAgICAgICBpZiBiYmFwcGVuZGxpbmVzW2ldWzBdID09IHZhcm5hbWU6CisgICAgICAgICAgICAgICAgbGluZSA9IGJiYXBwZW5kbGluZXMucG9wKGkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBhcHBlbmRsaW5lKHZhcm5hbWUsIG9wLCB2YWx1ZSk6CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgorICAgICAgICAgICAgaXRlbSA9IGJiYXBwZW5kbGluZXNbaV0KKyAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0gdmFybmFtZToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzW2ldID0gKGl0ZW1bMF0sIGl0ZW1bMV0sIGl0ZW1bMl0gKyAnICcgKyB2YWx1ZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKHZhcm5hbWUsIG9wLCB2YWx1ZSkpCisKKyAgICBkZXN0c3ViZGlyID0gcmQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaWYgc3JjZmlsZXM6CisgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKCgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQnLCAnOj0nLCAnJHtUSElTRElSfS8ke1BOfTonKSkKKworICAgIGFwcGVuZG92ZXJyaWRlID0gJycKKyAgICBpZiBtYWNoaW5lOgorICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ1BBQ0tBR0VfQVJDSCcsICc9JywgJyR7TUFDSElORV9BUkNIfScpKQorICAgICAgICBhcHBlbmRvdmVycmlkZSA9ICdfJXMnICUgbWFjaGluZQorICAgIGNvcHlmaWxlcyA9IHt9CisgICAgaWYgc3JjZmlsZXM6CisgICAgICAgIGluc3RmdW5jbGluZXMgPSBbXQorICAgICAgICBmb3IgbmV3ZmlsZSwgb3JpZ3NyY2ZpbGUgaW4gc3JjZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzcmNmaWxlID0gb3JpZ3NyY2ZpbGUKKyAgICAgICAgICAgIHNyY3VyaWVudHJ5ID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHNyY2ZpbGU6CisgICAgICAgICAgICAgICAgc3JjZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUobmV3ZmlsZSkKKyAgICAgICAgICAgICAgICBzcmN1cmllbnRyeSA9ICdmaWxlOi8vJXMnICUgc3JjZmlsZQorICAgICAgICAgICAgICAgICMgRG91YmxlLWNoZWNrIGl0J3Mgbm90IHRoZXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAjIEZJWE1FIGRvIHdlIGNhcmUgaWYgdGhlIGVudHJ5IGlzIGFkZGVkIGJ5IGFub3RoZXIgYmJhcHBlbmQgdGhhdCBtaWdodCBnbyBhd2F5PworICAgICAgICAgICAgICAgIGlmIG5vdCBzcmN1cmllbnRyeSBpbiByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kbGluZSgnU1JDX1VSSV9hcHBlbmQlcycgJSBhcHBlbmRvdmVycmlkZSwgJz0nLCAnICcgKyBzcmN1cmllbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGxpbmUoJ1NSQ19VUkknLCAnKz0nLCBzcmN1cmllbnRyeSkKKyAgICAgICAgICAgIGNvcHlmaWxlc1tuZXdmaWxlXSA9IHNyY2ZpbGUKKyAgICAgICAgICAgIGlmIGluc3RhbGw6CisgICAgICAgICAgICAgICAgaW5zdGl0ZW0gPSBpbnN0YWxsLnBvcChuZXdmaWxlLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIGluc3RpdGVtOgorICAgICAgICAgICAgICAgICAgICAoZGVzdHBhdGgsIHBlcm1zKSA9IGluc3RpdGVtCisgICAgICAgICAgICAgICAgICAgIGluc3RkZXN0cGF0aCA9IHJlcGxhY2VfZGlyX3ZhcnMoZGVzdHBhdGgsIHJkKQorICAgICAgICAgICAgICAgICAgICBpbnN0ZGlybGluZSA9ICdpbnN0YWxsIC1kICR7RH0lcycgJSBvcy5wYXRoLmRpcm5hbWUoaW5zdGRlc3RwYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5zdGRpcmxpbmUgaW4gaW5zdGZ1bmNsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMuYXBwZW5kKGluc3RkaXJsaW5lKQorICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZCgnaW5zdGFsbCAtbSAlcyAke1dPUktESVJ9LyVzICR7RH0lcycgJSAocGVybXMsIG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSksIGluc3RkZXN0cGF0aCkpCisgICAgICAgIGlmIGluc3RmdW5jbGluZXM6CisgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ2RvX2luc3RhbGxfYXBwZW5kJXMoKScgJSBhcHBlbmRvdmVycmlkZSwgJycsIGluc3RmdW5jbGluZXMpKQorCisgICAgYmIubm90ZSgnV3JpdGluZyBhcHBlbmQgZmlsZSAlcycgJSBhcHBlbmRwYXRoKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwZW5kcGF0aCk6CisgICAgICAgICMgV29yayBhcm91bmQgbGFjayBvZiBub25sb2NhbCBpbiBweXRob24gMgorICAgICAgICBleHR2YXJzID0geydkZXN0c3ViZGlyJzogZGVzdHN1YmRpcn0KKworICAgICAgICBkZWYgYXBwZW5kZmlsZV92YXJmdW5jKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJzoKKyAgICAgICAgICAgICAgICBpZiBvcmlndmFsdWUuc3RhcnRzd2l0aCgnJHtUSElTRElSfS8nKToKKyAgICAgICAgICAgICAgICAgICAgcG9wbGluZSgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQnKQorICAgICAgICAgICAgICAgICAgICBleHR2YXJzWydkZXN0c3ViZGlyJ10gPSByZC5leHBhbmQob3JpZ3ZhbHVlLnNwbGl0KCcke1RISVNESVJ9LycsIDEpWzFdLnJzdHJpcCgnOicpKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lID09ICdQQUNLQUdFX0FSQ0gnOgorICAgICAgICAgICAgICAgIGlmIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIHBvcGxpbmUoJ1BBQ0tBR0VfQVJDSCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAobWFjaGluZSwgTm9uZSwgNCwgRmFsc2UpCisgICAgICAgICAgICBlbGlmIHZhcm5hbWUuc3RhcnRzd2l0aCgnZG9faW5zdGFsbF9hcHBlbmQnKToKKyAgICAgICAgICAgICAgICBmdW5jID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIGZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIG9yaWd2YWx1ZS5zdHJpcCgnXG4nKS5zcGxpdGxpbmVzKCldCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZ1bmNbMl06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBpbiBpbnN0ZnVuY2xpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW5zdGZ1bmNsaW5lcywgTm9uZSwgNCwgRmFsc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gb3JpZ3ZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZW1vdmV2YXIgPSB2YXJuYW1lCisgICAgICAgICAgICAgICAgaWYgdmFybmFtZSBpbiBbJ1NSQ19VUkknLCAnU1JDX1VSSV9hcHBlbmQlcycgJSBhcHBlbmRvdmVycmlkZV06CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXZhciA9ICdTUkNfVVJJJworICAgICAgICAgICAgICAgICAgICBsaW5lID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZVsyXSBub3QgaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwuYXBwZW5kKGxpbmVbMl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBbbGluZVsyXV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBpZiByZW1vdmV2YXIgaW4gcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSByZW1vdmV2YWx1ZXNbcmVtb3ZldmFyXQorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlbW92ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmUgaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwucmVtb3ZlKHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJlbW92ZWl0ZW0gaW4gcmVtb3ZlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWl0ZW0gaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLnJlbW92ZShyZW1vdmVpdGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBzcGxpdHZhbAorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obmV3dmFsdWUpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSBpdCdzIHdyaXR0ZW4gb3V0IGFzIG9uZSBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnX2FwcGVuZCcgaW4gdmFybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9ICcgJyArIG5ld3ZhbHVlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3dmFsdWVbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlIGFuZCAob3AgaW4gWycrPScsICcuPSddIG9yICdfYXBwZW5kJyBpbiB2YXJuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBwb2ludCBhcHBlbmRpbmcgbm90aGluZworICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHZhcm5hbWUuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSA0CisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAtMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ld3ZhbHVlLCBOb25lLCBpbmRlbnQsIFRydWUpCisgICAgICAgICAgICByZXR1cm4gKG9yaWd2YWx1ZSwgTm9uZSwgNCwgRmFsc2UpCisKKyAgICAgICAgdmFybmFtZXMgPSBbaXRlbVswXSBmb3IgaXRlbSBpbiBiYmFwcGVuZGxpbmVzXQorICAgICAgICBpZiByZW1vdmV2YWx1ZXM6CisgICAgICAgICAgICB2YXJuYW1lcy5leHRlbmQocmVtb3ZldmFsdWVzLmtleXMoKSkKKworICAgICAgICB3aXRoIG9wZW4oYXBwZW5kcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgKHVwZGF0ZWQsIG5ld2xpbmVzKSA9IGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEoZiwgdmFybmFtZXMsIGFwcGVuZGZpbGVfdmFyZnVuYykKKworICAgICAgICBkZXN0c3ViZGlyID0gZXh0dmFyc1snZGVzdHN1YmRpciddCisgICAgZWxzZToKKyAgICAgICAgdXBkYXRlZCA9IEZhbHNlCisgICAgICAgIG5ld2xpbmVzID0gW10KKworICAgIGlmIGJiYXBwZW5kbGluZXM6CisgICAgICAgIGZvciBsaW5lIGluIGJiYXBwZW5kbGluZXM6CisgICAgICAgICAgICBpZiBsaW5lWzBdLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMge1xuICAgICVzXG59XG4nICUgKGxpbmVbMF0sICdcbiAgICAnLmpvaW4obGluZVsyXSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICVzICIlcyJcblxuJyAlIGxpbmUpCisgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisKKyAgICBpZiB1cGRhdGVkOgorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKG5ld2xpbmVzKQorCisgICAgaWYgY29weWZpbGVzOgorICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgZGVzdHN1YmRpciA9IG9zLnBhdGguam9pbihkZXN0c3ViZGlyLCBtYWNoaW5lKQorICAgICAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBjb3B5ZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmaWxlZGVzdCA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIGRlc3RzdWJkaXIsIG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmFic3BhdGgobmV3ZmlsZSkgIT0gb3MucGF0aC5hYnNwYXRoKGZpbGVkZXN0KToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdDb3B5aW5nICVzIHRvICVzJyAlIChuZXdmaWxlLCBmaWxlZGVzdCkpCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmaWxlZGVzdCkpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG5ld2ZpbGUsIGZpbGVkZXN0KQorCisgICAgcmV0dXJuIChhcHBlbmRwYXRoLCBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCBkZXN0c3ViZGlyKSkKKworCitkZWYgZmluZF9sYXllcmRpcihmbik6CisgICAgIiIiIEZpZ3VyZSBvdXQgcmVsYXRpdmUgcGF0aCB0byBiYXNlIG9mIGxheWVyIGZvciBhIGZpbGUgKGUuZy4gYSByZWNpcGUpIiIiCisgICAgcHRoID0gb3MucGF0aC5kaXJuYW1lKGZuKQorICAgIGxheWVyZGlyID0gJycKKyAgICB3aGlsZSBwdGg6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICdjb25mJywgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgICAgICBsYXllcmRpciA9IHB0aAorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHRoID0gb3MucGF0aC5kaXJuYW1lKHB0aCkKKyAgICByZXR1cm4gbGF5ZXJkaXIKKworCitkZWYgcmVwbGFjZV9kaXJfdmFycyhwYXRoLCBkKToKKyAgICAiIiJSZXBsYWNlIGNvbW1vbiBkaXJlY3RvcnkgcGF0aHMgd2l0aCBhcHByb3ByaWF0ZSB2YXJpYWJsZSByZWZlcmVuY2VzIChlLmcuIC9ldGMgYmVjb21lcyAke3N5c2NvbmZkaXJ9KSIiIgorICAgIGRpcnZhcnMgPSB7fQorICAgICMgU29ydCBieSBsZW5ndGggc28gd2UgZ2V0IHRoZSB2YXJpYWJsZXMgd2UncmUgaW50ZXJlc3RlZCBpbiBmaXJzdAorICAgIGZvciB2YXIgaW4gc29ydGVkKGQua2V5cygpLCBrZXk9bGVuKToKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKCdkaXInKSBhbmQgdmFyLmxvd2VyKCkgPT0gdmFyOgorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCcvJykgYW5kIG5vdCAnXG4nIGluIHZhbHVlIGFuZCB2YWx1ZSBub3QgaW4gZGlydmFyczoKKyAgICAgICAgICAgICAgICBkaXJ2YXJzW3ZhbHVlXSA9IHZhcgorICAgIGZvciBkaXJwYXRoIGluIHNvcnRlZChkaXJ2YXJzLmtleXMoKSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShkaXJwYXRoLCAnJHslc30nICUgZGlydmFyc1tkaXJwYXRoXSkKKyAgICByZXR1cm4gcGF0aAorCitkZWYgZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2LCB1cmlfdHlwZSk6CisgICAgIiIiCisgICAgR2V0IFBWIHdpdGhvdXQgU1JDUFYgY29tbW9uIGluIFNDTSdzIGZvciBub3cgb25seQorICAgIHN1cHBvcnQgZ2l0LgorCisgICAgUmV0dXJucyB0dXBsZSB3aXRoIHB2LCBwcmVmaXggYW5kIHN1ZmZpeC4KKyAgICAiIiIKKyAgICBwZnggPSAnJworICAgIHNmeCA9ICcnCisKKyAgICBpZiB1cmlfdHlwZSA9PSAnZ2l0JzoKKyAgICAgICAgZ2l0X3JlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPHBmeD52PykoP1A8dmVyPlteXCtdKikoKD9QPHNmeD5cKyhnaXQpP3I/KEFVVE9JTkNcKykpKD9QPHJldj4uKikpPyIpCisgICAgICAgIG0gPSBnaXRfcmVnZXgubWF0Y2gocHYpCisKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHB2ID0gbS5ncm91cCgndmVyJykKKyAgICAgICAgICAgIHBmeCA9IG0uZ3JvdXAoJ3BmeCcpCisgICAgICAgICAgICBzZnggPSBtLmdyb3VwKCdzZngnKQorICAgIGVsc2U6CisgICAgICAgIHJlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPHBmeD4odnxyKT8pKD9QPHZlcj4uKikiKQorICAgICAgICBtID0gcmVnZXgubWF0Y2gocHYpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwdiA9IG0uZ3JvdXAoJ3ZlcicpCisgICAgICAgICAgICBwZnggPSBtLmdyb3VwKCdwZngnKQorCisgICAgcmV0dXJuIChwdiwgcGZ4LCBzZngpCisKK2RlZiBnZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24ocmQpOgorICAgICIiIgorICAgICAgICBHZXQgdXBzdHJlYW0gdmVyc2lvbiBvZiByZWNpcGUgdXNpbmcgYmIuZmV0Y2gyIG1ldGhvZHMgd2l0aCBzdXBwb3J0IGZvcgorICAgICAgICBodHRwLCBodHRwcywgZnRwIGFuZCBnaXQuCisKKyAgICAgICAgYmIuZmV0Y2gyIGV4Y2VwdGlvbnMgY2FuIGJlIHJhaXNlZCwKKyAgICAgICAgICAgIEZldGNoRXJyb3Igd2hlbiBkb24ndCBoYXZlIG5ldHdvcmsgYWNjZXNzIG9yIHVwc3RyZWFtIHNpdGUgZG9uJ3QgcmVzcG9uc2UuCisgICAgICAgICAgICBOb01ldGhvZEVycm9yIHdoZW4gdXJpIGxhdGVzdF92ZXJzaW9uc3RyaW5nIG1ldGhvZCBpc24ndCBpbXBsZW1lbnRlZC4KKworICAgICAgICBSZXR1cm5zIGEgZGljdG9uYXJ5IHdpdGggdmVyc2lvbiwgdHlwZSBhbmQgZGF0ZXRpbWUuCisgICAgICAgIFR5cGUgY2FuIGJlIEEgZm9yIEF1dG9tYXRpYywgTSBmb3IgTWFudWFsIGFuZCBVIGZvciBVbmtub3duLgorICAgICIiIgorICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBkZWNvZGV1cmwKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorCisgICAgcnUgPSB7fQorICAgIHJ1Wyd2ZXJzaW9uJ10gPSAnJworICAgIHJ1Wyd0eXBlJ10gPSAnVScKKyAgICBydVsnZGF0ZXRpbWUnXSA9ICcnCisKKyAgICAjIFhYWDogSWYgZG9uJ3QgaGF2ZSBTUkNfVVJJIG1lYW5zIHRoYXQgZG9uJ3QgaGF2ZSB1cHN0cmVhbSBzb3VyY2VzIHNvCisgICAgIyByZXR1cm5zIDEuMC4KKyAgICBzcmNfdXJpcyA9IHJkLmdldFZhcignU1JDX1VSSScsIFRydWUpCisgICAgaWYgbm90IHNyY191cmlzOgorICAgICAgICBydVsndmVyc2lvbiddID0gJzEuMCcKKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdNJworICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHJldHVybiBydQorCisgICAgIyBYWFg6IHdlIHN1cHBvc2UgdGhhdCB0aGUgZmlyc3QgZW50cnkgcG9pbnRzIHRvIHRoZSB1cHN0cmVhbSBzb3VyY2VzCisgICAgc3JjX3VyaSA9IHNyY191cmlzLnNwbGl0KClbMF0KKyAgICB1cmlfdHlwZSwgXywgXywgXywgXywgXyA9ICBkZWNvZGV1cmwoc3JjX3VyaSkKKworICAgIHB2ID0gcmQuZ2V0VmFyKCdQVicsIFRydWUpCisKKyAgICBtYW51YWxfdXBzdHJlYW1fdmVyc2lvbiA9IHJkLmdldFZhcigiUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04iLCBUcnVlKQorICAgIGlmIG1hbnVhbF91cHN0cmVhbV92ZXJzaW9uOgorICAgICAgICAjIG1hbnVhbCB0cmFja2luZyBvZiB1cHN0cmVhbSB2ZXJzaW9uLgorICAgICAgICBydVsndmVyc2lvbiddID0gbWFudWFsX3Vwc3RyZWFtX3ZlcnNpb24KKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdNJworCisgICAgICAgIG1hbnVhbF91cHN0cmVhbV9kYXRlID0gcmQuZ2V0VmFyKCJDSEVDS19EQVRFIiwgVHJ1ZSkKKyAgICAgICAgaWYgbWFudWFsX3Vwc3RyZWFtX2RhdGU6CisgICAgICAgICAgICBkYXRlID0gZGF0ZXRpbWUuc3RycHRpbWUobWFudWFsX3Vwc3RyZWFtX2RhdGUsICIlYiAlZCwgJVkiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHJ1WydkYXRldGltZSddID0gZGF0ZQorCisgICAgZWxpZiB1cmlfdHlwZSA9PSAiZmlsZSI6CisgICAgICAgICMgZmlsZXMgYXJlIGFsd2F5cyB1cC10by1kYXRlCisgICAgICAgIHJ1Wyd2ZXJzaW9uJ10gPSAgcHYKKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdBJworICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGV0aW1lLm5vdygpCisgICAgZWxzZToKKyAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKHNyY191cmksIHJkKQorICAgICAgICBwdXB2ZXIgPSB1ZC5tZXRob2QubGF0ZXN0X3ZlcnNpb25zdHJpbmcodWQsIHJkKQorICAgICAgICAodXB2ZXJzaW9uLCByZXZpc2lvbikgPSBwdXB2ZXIKKworICAgICAgICAjIGZvcm1hdCBnaXQgdmVyc2lvbiB2ZXJzaW9uK2dpdEFVVE9JTkMrSEFTSAorICAgICAgICBpZiB1cmlfdHlwZSA9PSAnZ2l0JzoKKyAgICAgICAgICAgIChwdiwgcGZ4LCBzZngpID0gZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2LCB1cmlfdHlwZSkKKworICAgICAgICAgICAgIyBpZiBjb250YWlucyByZXZpc2lvbiBidXQgbm90IHVwdmVyc2lvbiB1c2UgY3VycmVudCBwdgorICAgICAgICAgICAgaWYgdXB2ZXJzaW9uID09ICcnIGFuZCByZXZpc2lvbjoKKyAgICAgICAgICAgICAgICB1cHZlcnNpb24gPSBwdgorCisgICAgICAgICAgICBpZiB1cHZlcnNpb246CisgICAgICAgICAgICAgICAgdG1wID0gdXB2ZXJzaW9uCisgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gJycKKworICAgICAgICAgICAgICAgIGlmIHBmeDoKKyAgICAgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gcGZ4ICsgdG1wCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gdG1wCisKKyAgICAgICAgICAgICAgICBpZiBzZng6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHVwdmVyc2lvbiArIHNmeCArIHJldmlzaW9uWzoxMF0KKworICAgICAgICBpZiB1cHZlcnNpb246CisgICAgICAgICAgICBydVsndmVyc2lvbiddID0gdXB2ZXJzaW9uCisgICAgICAgICAgICBydVsndHlwZSddID0gJ0EnCisKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorCisgICAgcmV0dXJuIHJ1CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9yb290ZnMucHkgYi9tZXRhL2xpYi9vZS9yb290ZnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1M2ZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Jvb3Rmcy5weQpAQCAtMCwwICsxLDk4NCBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCAqCitmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCAqCitpbXBvcnQgb2UucGF0aAoraW1wb3J0IGZpbGVjbXAKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCByZQorCisKK2NsYXNzIFJvb3RmcyhvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIERvIG5vdCBpbnN0YW50aWF0ZSB0aGlzIGRpcmVjdGx5LgorICAgICIiIgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wbSA9IE5vbmUKKyAgICAgICAgc2VsZi5pbWFnZV9yb290ZnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKworICAgICAgICBzZWxmLmluc3RhbGxfb3JkZXIgPSBNYW5pZmVzdC5JTlNUQUxMX09SREVSCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfbG9nX2NoZWNrKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2xvZ19jaGVja193YXJuKHNlbGYpOgorICAgICAgICByID0gcmUuY29tcGlsZSgnXih3YXJufFdhcm58Tk9URTogd2FybnxOT1RFOiBXYXJufFdBUk5JTkc6KScpCisgICAgICAgIGxvZ19wYXRoID0gc2VsZi5kLmV4cGFuZCgiJHtUfS9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgd2l0aCBvcGVuKGxvZ19wYXRoLCAncicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxvZzoKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lIG9yICdOT1RFOicgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCBhIHdhcm5pbmcgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZSAoa2V5d29yZCBcJyVzXCcpOlxuW2xvZ19jaGVja10gJXMnCisJCQkJICAgICUgKHNlbGYuZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG0uZ3JvdXAoKSwgbGluZSkpCisKKyAgICBkZWYgX2xvZ19jaGVja19lcnJvcihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoc2VsZi5sb2dfY2hlY2tfcmVnZXgpCisgICAgICAgIGxvZ19wYXRoID0gc2VsZi5kLmV4cGFuZCgiJHtUfS9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgd2l0aCBvcGVuKGxvZ19wYXRoLCAncicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMAorICAgICAgICAgICAgbWVzc2FnZSA9ICJcbiIKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxvZzoKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbSA9IHIuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBsb2dmaWxlIChrZXl3b3JkIFwnJXNcJyk6XG5bbG9nX2NoZWNrXSAlcycKKwkJCQkgICAgJSAoc2VsZi5kLmdldFZhcignUE4nLCBUcnVlKSwgbS5ncm91cCgpLCBsaW5lKSkKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID49IDEgYW5kIGZvdW5kX2Vycm9yIDw9IDU6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gbGluZSArICdcbicKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgKz0gMQorCisgICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPT0gNjoKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwobWVzc2FnZSkKKworICAgIGRlZiBfaW5zZXJ0X2ZlZWRfdXJpcyhzZWxmKToKKyAgICAgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBzZWxmLnBtLmluc2VydF9mZWVkc191cmlzKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfaGFuZGxlX2ludGVyY2VwdF9mYWlsdXJlKHNlbGYsIGZhaWxlZF9zY3JpcHQpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGUgX2NsZWFudXAoKSBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgdG8gY2xlYW4tdXAgc3R1ZmYgdGhhdCB3ZSBkb24ndCByZWFsbHkKKyAgICB3YW50IHRvIGVuZCB1cCBvbiB0YXJnZXQuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBSUE0sIHRoZSBEQiBsb2Nrcy4KKyAgICBUaGUgbWV0aG9kIGlzIGNhbGxlZCwgb25jZSwgYXQgdGhlIGVuZCBvZiBjcmVhdGUoKSBtZXRob2QuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3NldHVwX2RiZ19yb290ZnMoc2VsZiwgZGlycyk6CisgICAgICAgIGdlbl9kZWJ1Z2ZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfR0VOX0RFQlVHRlMnLCBUcnVlKSBvciAnMCcKKyAgICAgICAgaWYgZ2VuX2RlYnVnZnMgIT0gJzEnOgorICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYi5ub3RlKCIgIFJlbmFtaW5nIHRoZSBvcmlnaW5hbCByb290ZnMuLi4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMsIHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJykKKworICAgICAgICBiYi5ub3RlKCIgIENyZWF0aW5nIGRlYnVnIHJvb3Rmcy4uLiIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcykKKworICAgICAgICBiYi5ub3RlKCIgIENvcHlpbmcgYmFjayBwYWNrYWdlIGRhdGFiYXNlLi4uIikKKyAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzICsgb3MucGF0aC5kaXJuYW1lKGRpcikpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnICsgZGlyLCBzZWxmLmltYWdlX3Jvb3RmcyArIGRpcikKKworICAgICAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgICAgICMgQ29weSBmaWxlcyBsb2NhdGVkIGluIC91c3IvbGliL2RlYnVnIG9yIC91c3Ivc3JjL2RlYnVnCisgICAgICAgIGZvciBkaXIgaW4gWyIvdXNyL2xpYi9kZWJ1ZyIsICIvdXNyL3NyYy9kZWJ1ZyJdOgorICAgICAgICAgICAgc3JjID0gc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnICsgZGlyCisgICAgICAgICAgICBpZiBjcGF0aC5leGlzdHMoc3JjKToKKyAgICAgICAgICAgICAgICBkc3QgPSBzZWxmLmltYWdlX3Jvb3RmcyArIGRpcgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZHN0KSkKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjLCBkc3QpCisKKyAgICAgICAgIyBDb3B5IGZpbGVzIHdpdGggc3VmZml4ICcuZGVidWcnIG9yIGxvY2F0ZWQgaW4gJy5kZWJ1ZycgZGlyLgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpOgorICAgICAgICAgICAgcmVsYXRpdmVfZGlyID0gcm9vdFtsZW4oc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnKTpdCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuZGVidWcnKSBvciAnLy5kZWJ1ZycgaW4gcmVsYXRpdmVfZGlyOgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMgKyByZWxhdGl2ZV9kaXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KG9zLnBhdGguam9pbihyb290LCBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9yb290ZnMgKyByZWxhdGl2ZV9kaXIpCisKKyAgICAgICAgYmIubm90ZSgiICBJbnN0YWxsIGNvbXBsZW1lbnRhcnkgJyotZGJnJyBwYWNrYWdlcy4uLiIpCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCcqLWRiZycpCisKKyAgICAgICAgYmIubm90ZSgiICBSZW5hbWUgZGVidWcgcm9vdGZzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmltYWdlX3Jvb3RmcyArICctZGJnJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMsIHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1kYmcnKQorCisgICAgICAgIGJiLm5vdGUoIiAgUmVzdG9yZWluZyBvcmlnaW5hbCByb290ZnMuLi4iKQorICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnLCBzZWxmLmltYWdlX3Jvb3RmcykKKworICAgIGRlZiBfZXhlY19zaGVsbF9jbWQoc2VsZiwgY21kKToKKyAgICAgICAgZmFrZXJvb3RjbWQgPSBzZWxmLmQuZ2V0VmFyKCdGQUtFUk9PVCcsIFRydWUpCisgICAgICAgIGlmIGZha2Vyb290Y21kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZXhlY19jbWQgPSBbZmFrZXJvb3RjbWQsIGNtZF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZWNfY21kID0gY21kCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoZXhlY19jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICByZXR1cm4oIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIiMjIyMjIyBHZW5lcmF0ZSByb290ZnMgIyMjIyMjIyIpCisgICAgICAgIHByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUFJFUFJPQ0VTU19DT01NQU5EIiwgVHJ1ZSkKKyAgICAgICAgcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCIsIFRydWUpCisKKyAgICAgICAgcG9zdGluc3RfaW50ZXJjZXB0c19kaXIgPSBzZWxmLmQuZ2V0VmFyKCJQT1NUSU5TVF9JTlRFUkNFUFRTX0RJUiIsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdF9pbnRlcmNlcHRzX2RpcjoKKyAgICAgICAgICAgIHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzIikKKyAgICAgICAgaW50ZXJjZXB0c19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJjZXB0X3NjcmlwdHMiKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShpbnRlcmNlcHRzX2RpciwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUocG9zdGluc3RfaW50ZXJjZXB0c19kaXIsIGludGVyY2VwdHNfZGlyKQorCisgICAgICAgIHNodXRpbC5jb3B5KHNlbGYuZC5leHBhbmQoIiR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQiKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlICsKKyAgICAgICAgICAgICAgICAgICAgIi9SRUFETUVfLV9ET19OT1RfREVMRVRFX0ZJTEVTX0lOX1RISVNfRElSRUNUT1JZLnR4dCIpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICAjIGNhbGwgdGhlIHBhY2thZ2UgbWFuYWdlciBkZXBlbmRlbnQgY3JlYXRlIG1ldGhvZAorICAgICAgICBzZWxmLl9jcmVhdGUoKQorCisgICAgICAgIHN5c2NvbmZkaXIgPSBzZWxmLmltYWdlX3Jvb3RmcyArIHNlbGYuZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3lzY29uZmRpcikKKyAgICAgICAgd2l0aCBvcGVuKHN5c2NvbmZkaXIgKyAiL3ZlcnNpb24iLCAidysiKSBhcyB2ZXI6CisgICAgICAgICAgICB2ZXIud3JpdGUoc2VsZi5kLmdldFZhcignQlVJTEROQU1FJywgVHJ1ZSkgKyAiXG4iKQorCisgICAgICAgIHNlbGYuX3J1bl9pbnRlcmNlcHRzKCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBwb3N0X3Byb2Nlc3NfY21kcykKKworICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBkZWxheWVkX3Bvc3RpbnN0cyA9IHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0cygpCisgICAgICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgY29uZmlndXJlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9mZmxpbmUgYW5kIHJvb3RmcyBpcyByZWFkLW9ubHk6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMpCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignVVNFX0RFVkZTJywgVHJ1ZSkgIT0gIjEiOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2RldmZzKCkKKworICAgICAgICBzZWxmLl91bmluc3RhbGxfdW5uZWVkZWQoKQorCisgICAgICAgIHNlbGYuX2luc2VydF9mZWVkX3VyaXMoKQorCisgICAgICAgIHNlbGYuX3J1bl9sZGNvbmZpZygpCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignVVNFX0RFUE1PRCcsIFRydWUpICE9ICIwIjoKKyAgICAgICAgICAgIHNlbGYuX2dlbmVyYXRlX2tlcm5lbF9tb2R1bGVfZGVwcygpCisKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisgICAgICAgIHNlbGYuX2xvZ19jaGVjaygpCisKKyAgICBkZWYgX3VuaW5zdGFsbF91bm5lZWRlZChzZWxmKToKKyAgICAgICAgIyBSZW1vdmUgdW5uZWVkZWQgaW5pdCBzY3JpcHQgc3ltbGlua3MKKyAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMgPSBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKQorICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBOb25lOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9pbml0LmQvcnVuLXBvc3RpbnN0cyIpKToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbInVwZGF0ZS1yYy5kIiwgIi1mIiwgIi1yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydW4tcG9zdGluc3RzIiwgInJlbW92ZSJdKQorCisgICAgICAgIHJ1bnRpbWVfcGtnbWFuYWdlID0gYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgc3lzdmNvbXBhdF9pbl9kaXN0cm8gPSBiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgWyAic3lzdGVtZCIsICJzeXN2aW5pdCIgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBGYWxzZSwgc2VsZi5kKQorICAgICAgICBpbWFnZV9yb3JmcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJyZWFkLW9ubHktcm9vdGZzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBGYWxzZSwgc2VsZi5kKQorICAgICAgICBpZiBzeXN2Y29tcGF0X2luX2Rpc3RybyBhbmQgbm90IGltYWdlX3JvcmZzOgorICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gInVwZGF0ZS1yYy5kIgorICAgICAgICBpZiBub3QgcnVudGltZV9wa2dtYW5hZ2U6CisgICAgICAgICAgICAjIFJlbW92ZSBjb21wb25lbnRzIHRoYXQgd2UgZG9uJ3QgbmVlZCBpZiB3ZSdyZSBub3QgZ29pbmcgdG8gaW5zdGFsbAorICAgICAgICAgICAgIyBhZGRpdGlvbmFsIHBhY2thZ2VzIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgIGlmIGRlbGF5ZWRfcG9zdGluc3RzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZGlyID0gc2VsZi5kLmV4cGFuZCgnJHtXT1JLRElSfS9pbnN0YWxsZWRfcGtncy50eHQnKQorICAgICAgICAgICAgICAgIHBrZ3NfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGluc3RhbGxlZF9wa2dzX2RpciwgInIrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NfaW5zdGFsbGVkID0gaW5zdGFsbGVkX3BrZ3MucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnX2luc3RhbGxlZCBpbiBwa2dzX2luc3RhbGxlZFs6XToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IHBrZ19pbnN0YWxsZWQuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIGluIFsidXBkYXRlLXJjLmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZS1wYXNzd2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhZG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZS1hbHRlcm5hdGl2ZXMiLCBwa2dfdG9fcmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJST09URlNfQk9PVFNUUkFQX0lOU1RBTEwiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnc19pbnN0YWxsZWQucmVtb3ZlKHBrZ19pbnN0YWxsZWQpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGtnc190b19yZW1vdmUpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnc190b19yZW1vdmUsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAjIFVwZGF0ZSBpbnN0YWxsZWRfcGtncy50eHQKKyAgICAgICAgICAgICAgICAgICAgb3BlbihpbnN0YWxsZWRfcGtnc19kaXIsICJ3KyIpLndyaXRlKCdcbicuam9pbihwa2dzX2luc3RhbGxlZCkpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2F2ZV9wb3N0aW5zdHMoKQorCisgICAgICAgIHBvc3RfdW5pbnN0YWxsX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EIiwgVHJ1ZSkKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF91bmluc3RhbGxfY21kcykKKworICAgICAgICBpZiBub3QgcnVudGltZV9wa2dtYW5hZ2U6CisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgcGFja2FnZSBtYW5hZ2VyIGRhdGEgZmlsZXMKKyAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgIGRlZiBfcnVuX2ludGVyY2VwdHMoc2VsZik6CisgICAgICAgIGludGVyY2VwdHNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKworICAgICAgICBiYi5ub3RlKCJSdW5uaW5nIGludGVyY2VwdCBzY3JpcHRzOiIpCisgICAgICAgIG9zLmVudmlyb25bJ0QnXSA9IHNlbGYuaW1hZ2Vfcm9vdGZzCisgICAgICAgIGZvciBzY3JpcHQgaW4gb3MubGlzdGRpcihpbnRlcmNlcHRzX2Rpcik6CisgICAgICAgICAgICBzY3JpcHRfZnVsbCA9IG9zLnBhdGguam9pbihpbnRlcmNlcHRzX2Rpciwgc2NyaXB0KQorCisgICAgICAgICAgICBpZiBzY3JpcHQgPT0gInBvc3RpbnN0X2ludGVyY2VwdCIgb3Igbm90IG9zLmFjY2VzcyhzY3JpcHRfZnVsbCwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYmIubm90ZSgiPiBFeGVjdXRpbmcgJXMgaW50ZXJjZXB0IC4uLiIgJSBzY3JpcHQpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoc2NyaXB0X2Z1bGwpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCJUaGUgcG9zdGluc3RhbGwgaW50ZXJjZXB0IGhvb2sgJyVzJyBmYWlsZWQgKGV4aXQgY29kZTogJWQpISBTZWUgbG9nIGZvciBkZXRhaWxzISIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHNjcmlwdCwgZS5yZXR1cm5jb2RlKSkKKworICAgICAgICAgICAgICAgIHdpdGggb3BlbihzY3JpcHRfZnVsbCkgYXMgaW50ZXJjZXB0OgorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkX3BrZ3MgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGludGVyY2VwdC5yZWFkKCkuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl4jI1BLR1M6KC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRfcGtncyA9IG0uZ3JvdXAoMSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVnaXN0ZXJlZF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVGhlIHBvc3RpbnN0YWxscyBmb3IgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWxsIGJlIHBvc3Rwb25lZCBmb3IgZmlyc3QgYm9vdDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZF9wa2dzKQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgdGhlIGJhY2tlbmQgZGVwZW5kZW50IGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShyZWdpc3RlcmVkX3BrZ3MpCisKKyAgICBkZWYgX3J1bl9sZGNvbmZpZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignTERDT05GSUdERVBFTkQnLCBUcnVlKToKKyAgICAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZzogbGRjb25maWcgLXIiICsgc2VsZi5pbWFnZV9yb290ZnMgKyAiLWMgbmV3IC12IikKKyAgICAgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsnbGRjb25maWcnLCAnLXInLCBzZWxmLmltYWdlX3Jvb3RmcywgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3JywgJy12J10pCisKKyAgICBkZWYgX2NoZWNrX2Zvcl9rZXJuZWxfbW9kdWxlcyhzZWxmLCBtb2R1bGVzX2Rpcik6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG1vZHVsZXNfZGlyLCB0b3Bkb3duPVRydWUpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZm91bmRfa28gPSBuYW1lLmVuZHN3aXRoKCIua28iKQorICAgICAgICAgICAgICAgIGlmIGZvdW5kX2tvOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRfa28KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2dlbmVyYXRlX2tlcm5lbF9tb2R1bGVfZGVwcyhzZWxmKToKKyAgICAgICAgbW9kdWxlc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsICdsaWInLCAnbW9kdWxlcycpCisgICAgICAgICMgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9kdWxlcyBkb24ndCBib3RoZXIgdG8gZG8gdGhlIGRlcG1vZAorICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfZm9yX2tlcm5lbF9tb2R1bGVzKG1vZHVsZXNfZGlyKToKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vIEtlcm5lbCBNb2R1bGVzIGZvdW5kLCBub3QgcnVubmluZyBkZXBtb2QiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga2VybmVsX2FiaV92ZXJfZmlsZSA9IG9lLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLCAia2VybmVsLWRlcG1vZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlcm5lbC1hYml2ZXJzaW9uJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGtlcm5lbF9hYmlfdmVyX2ZpbGUpOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGtlcm5lbC1hYml2ZXJzaW9uIGZpbGUgZm91bmQgKCVzKSwgY2Fubm90IHJ1biBkZXBtb2QsIGFib3J0aW5nIiAlIGtlcm5lbF9hYmlfdmVyX2ZpbGUpCisKKyAgICAgICAga2VybmVsX3ZlciA9IG9wZW4oa2VybmVsX2FiaV92ZXJfZmlsZSkucmVhZCgpLnN0cmlwKCcgXG4nKQorICAgICAgICB2ZXJzaW9uZWRfbW9kdWxlc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsIG1vZHVsZXNfZGlyLCBrZXJuZWxfdmVyKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih2ZXJzaW9uZWRfbW9kdWxlc19kaXIpCisKKyAgICAgICAgc2VsZi5fZXhlY19zaGVsbF9jbWQoWydkZXBtb2R3cmFwcGVyJywgJy1hJywgJy1iJywgc2VsZi5pbWFnZV9yb290ZnMsIGtlcm5lbF92ZXJdKQorCisgICAgIiIiCisgICAgQ3JlYXRlIGRldmZzOgorICAgICogSU1BR0VfREVWSUNFX1RBQkxFIGlzIHRoZSBvbGQgbmFtZSB0byBhbiBhYnNvbHV0ZSBwYXRoIHRvIGEgZGV2aWNlIHRhYmxlIGZpbGUKKyAgICAqIElNQUdFX0RFVklDRV9UQUJMRVMgaXMgYSBuZXcgbmFtZSBmb3IgYSBmaWxlLCBvciBsaXN0IG9mIGZpbGVzLCBzZWFjaGVkCisgICAgICBmb3IgaW4gdGhlIEJCUEFUSAorICAgIElmIG5laXRoZXIgYXJlIHNwZWNpZmllZCB0aGVuIHRoZSBkZWZhdWx0IG5hbWUgb2YgZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0CisgICAgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBCQlBBVEggKHNhbWUgYXMgdGhlIG9sZCB2ZXJzaW9uLikKKyAgICAiIiIKKyAgICBkZWYgX2NyZWF0ZV9kZXZmcyhzZWxmKToKKyAgICAgICAgZGV2dGFibGVfbGlzdCA9IFtdCisgICAgICAgIGRldnRhYmxlID0gc2VsZi5kLmdldFZhcignSU1BR0VfREVWSUNFX1RBQkxFJywgVHJ1ZSkKKyAgICAgICAgaWYgZGV2dGFibGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZXZ0YWJsZV9saXN0LmFwcGVuZChkZXZ0YWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRldnRhYmxlcyA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0RFVklDRV9UQUJMRVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgZGV2dGFibGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGV2dGFibGVzID0gJ2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCcKKyAgICAgICAgICAgIGZvciBkZXZ0YWJsZSBpbiBkZXZ0YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBkZXZ0YWJsZV9saXN0LmFwcGVuZCgiJXMiICUgYmIudXRpbHMud2hpY2goc2VsZi5kLmdldFZhcignQkJQQVRIJywgVHJ1ZSksIGRldnRhYmxlKSkKKworICAgICAgICBmb3IgZGV2dGFibGUgaW4gZGV2dGFibGVfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsibWFrZWRldnMiLCAiLXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLCAiLUQiLCBkZXZ0YWJsZV0pCisKKworY2xhc3MgUnBtUm9vdGZzKFJvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKFJwbVJvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5sb2dfY2hlY2tfcmVnZXggPSAnKHVucGFja2luZyBvZiBhcmNoaXZlIGZhaWxlZHxDYW5ub3QgZmluZCBwYWNrYWdlJ1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfGV4aXQgMXxFUlJPUjogfEVycm9yOiB8RXJyb3IgfEVSUk9SICdcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3xGYWlsZWQgfEZhaWxlZDogfEZhaWxlZCR8RmFpbGVkXChcZCtcKTopJworICAgICAgICBzZWxmLm1hbmlmZXN0ID0gUnBtTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYucG0gPSBScG1QTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignVEFSR0VUX1ZFTkRPUicsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9IHNlbGYuZC5nZXRWYXIoJ0lOQ19SUE1fSU1BR0VfR0VOJywgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiAhPSAiMSI6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBtLnJlY292ZXJ5X3BhY2thZ2luZ19kYXRhKCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1RFTVBfUk9PVEZTJywgVHJ1ZSksIFRydWUpCisKKyAgICAgICAgc2VsZi5wbS5jcmVhdGVfY29uZmlncygpCisKKyAgICAnJycKKyAgICBXaGlsZSBycG0gaW5jcmVtZW50YWwgaW1hZ2UgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLCBpdCB3aWxsIHJlbW92ZSB0aGUKKyAgICB1bm5lZWRlZCBwa2dzIGJ5IGNvbXBhcmluZyB0aGUgbmV3IGluc3RhbGwgc29sdXRpb24gbWFuaWZlc3QgYW5kIHRoZQorICAgIG9sZCBpbnN0YWxsZWQgbWFuaWZlc3QuCisgICAgJycnCisgICAgZGVmIF9jcmVhdGVfaW5jcmVtZW50YWwoc2VsZiwgcGtnc19pbml0aWFsX2luc3RhbGwpOgorICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKworICAgICAgICAgICAgcGtnc190b19pbnN0YWxsID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc19pbml0aWFsX2luc3RhbGw6CisgICAgICAgICAgICAgICAgcGtnc190b19pbnN0YWxsICs9IHBrZ3NfaW5pdGlhbF9pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgICAgICBpbnN0YWxsZWRfbWFuaWZlc3QgPSBzZWxmLnBtLmxvYWRfb2xkX2luc3RhbGxfc29sdXRpb24oKQorICAgICAgICAgICAgc29sdXRpb25fbWFuaWZlc3QgPSBzZWxmLnBtLmR1bXBfaW5zdGFsbF9zb2x1dGlvbihwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgICAgIHBrZ190b19yZW1vdmUgPSBsaXN0KCkKKyAgICAgICAgICAgIGZvciBwa2cgaW4gaW5zdGFsbGVkX21hbmlmZXN0OgorICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gc29sdXRpb25fbWFuaWZlc3Q6CisgICAgICAgICAgICAgICAgICAgIHBrZ190b19yZW1vdmUuYXBwZW5kKHBrZykKKworICAgICAgICAgICAgc2VsZi5wbS51cGRhdGUoKQorCisgICAgICAgICAgICBiYi5ub3RlKCdpbmNyZW1lbnRhbCB1cGRhdGUgLS0gdXBncmFkZSBwYWNrYWdlcyBpbiBwbGFjZSAnKQorICAgICAgICAgICAgc2VsZi5wbS51cGdyYWRlKCkKKyAgICAgICAgICAgIGlmIHBrZ190b19yZW1vdmUgIT0gW106CisgICAgICAgICAgICAgICAgYmIubm90ZSgnaW5jcmVtZW50YWwgcmVtb3ZlZDogJXMnICUgJyAnLmpvaW4ocGtnX3RvX3JlbW92ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnX3RvX3JlbW92ZSkKKworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBycG1fcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgcnBtX3Bvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKworICAgICAgICAjIHVwZGF0ZSBQTSBpbmRleCBmaWxlcworICAgICAgICBzZWxmLnBtLndyaXRlX2luZGV4KCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBycG1fcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLmR1bXBfYWxsX2F2YWlsYWJsZV9wa2dzKCkKKworICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9pbmNyZW1lbnRhbChwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgc2VsZi5wbS51cGRhdGUoKQorCisgICAgICAgIHBrZ3MgPSBbXQorICAgICAgICBwa2dzX2F0dGVtcHQgPSBbXQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgPT0gTWFuaWZlc3QuUEtHX1RZUEVfQVRURU1QVF9PTkxZOgorICAgICAgICAgICAgICAgIHBrZ3NfYXR0ZW1wdCArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvZXRjL3JwbScsICcvdmFyL2xpYi9ycG0nLCAnL3Zhci9saWIvc21hcnQnXSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBycG1fcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrKCkKKworICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0uYmFja3VwX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBzZWxmLnBtLnJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RlcGVuZHNfbGlzdCgpOgorICAgICAgICByZXR1cm4gWydERVBMT1lfRElSX1JQTScsICdJTkNfUlBNX0lNQUdFX0dFTicsICdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsCisgICAgICAgICAgICAgICAgJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsICdSUE1fUFJFRkVSX0VMRl9BUkNIJ10KKworICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMiKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBvc3RpbnN0X2Rpcik6CisgICAgICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIocG9zdGluc3RfZGlyKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgnRGVsYXllZCBwYWNrYWdlIHNjcmlwdGxldDogJXMnICUgZikKKyAgICAgICAgICAgIHJldHVybiBmaWxlcworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICAjIHRoaXMgaXMganVzdCBhIHN0dWIuIEZvciBSUE0sIHRoZSBmYWlsZWQgcG9zdGluc3RhbGxzIGFyZQorICAgICAgICAjIGFscmVhZHkgc2F2ZWQgaW4gL2V0Yy9ycG0tcG9zdGluc3RzCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbG9nX2NoZWNrX2Vycm9yKHNlbGYpOgorICAgICAgICByID0gcmUuY29tcGlsZSgnKHVucGFja2luZyBvZiBhcmNoaXZlIGZhaWxlZHxDYW5ub3QgZmluZCBwYWNrYWdlfGV4aXQgMXxFUlJ8RmFpbCknKQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3VuZF9lcnJvciA9IDAKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiXG4iCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2cucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGlmICdsb2dfY2hlY2snIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBzaCAteCBtYXkgZW1pdCBjb2RlIHdoaWNoIGlzbid0IGFjdHVhbGx5IGV4ZWN1dGVkCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrJyk6CisJCSAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbSA9IHIuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ2xvZ19jaGVjazogVGhlcmUgd2VyZSBlcnJvciBtZXNzYWdlcyBpbiB0aGUgbG9nZmlsZScpCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ2xvZ19jaGVjazogTWF0Y2hlZCBrZXl3b3JkOiBbJXNdXG5cbicgJSBtLmdyb3VwKCkpCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA+PSAxIGFuZCBmb3VuZF9lcnJvciA8PSA1OgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGxpbmUgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yICs9IDEKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID09IDY6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgcnBtX3Bvc3RpbnN0c19kaXIgPSBzZWxmLmltYWdlX3Jvb3RmcyArIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcnBtLXBvc3RpbnN0cy8nKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocnBtX3Bvc3RpbnN0c19kaXIpCisKKyAgICAgICAgIyBTYXZlIHRoZSBwYWNrYWdlIHBvc3RpbnN0YWxscyBpbiAvZXRjL3JwbS1wb3N0aW5zdHMKKyAgICAgICAgZm9yIHBrZyBpbiByZWdpc3RlcmVkX3BrZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYucG0uc2F2ZV9ycG1wb3N0aW5zdChwa2cpCisKKyAgICBkZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAgICMgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgcG9zdHByb2Nlc3MgY29tbWFuZHMsIHJwbSBpcyBjYWxsZWQgc2V2ZXJhbAorICAgICAgICAjIHRpbWVzIHRvIGdldCB0aGUgZmlsZXMgaW5zdGFsbGVkLCBkZXBlbmRlbmNpZXMsIGV0Yy4gVGhpcyBjcmVhdGVzIHRoZQorICAgICAgICAjIF9fZGIuMDAqIChCZXJrZWxleSBEQiBmaWxlcyB0aGF0IGhvbGQgbG9ja3MsIHJwbSBzcGVjaWZpYyBlbnZpcm9ubWVudAorICAgICAgICAjIHNldHRpbmdzLCBldGMuKSwgdGhhdCBzaG91bGQgbm90IGdldCBpbnRvIHRoZSBmaW5hbCByb290ZnMKKyAgICAgICAgc2VsZi5wbS51bmxvY2tfcnBtX2RiKCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGggKyAiL3RtcCIpIGFuZCBub3Qgb3MubGlzdGRpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGggKyAiL3RtcCIpOgorICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiLCBUcnVlKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCkgYW5kIG5vdCBvcy5saXN0ZGlyKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCk6CisgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgsIFRydWUpCisKK2NsYXNzIERwa2dPcGtnUm9vdGZzKFJvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihEcGtnT3BrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKworICAgIGRlZiBfZ2V0X3BrZ3NfcG9zdGluc3RzKHNlbGYsIHN0YXR1c19maWxlKToKKyAgICAgICAgZGVmIF9nZXRfcGtnX2RlcGVuZHNfbGlzdChwa2dfZGVwZW5kcyk6CisgICAgICAgICAgICBwa2dfZGVwZW5kc19saXN0ID0gW10KKyAgICAgICAgICAgICMgZmlsdGVyIHZlcnNpb24gcmVxdWlyZW1lbnRzIGxpa2UgbGliYyAoPj0gMS4xKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBwa2dfZGVwZW5kcy5zcGxpdCgnLCAnKToKKyAgICAgICAgICAgICAgICBtX2RlcCA9IHJlLm1hdGNoKCJeKC4qKSBcKC4qXCkkIiwgZGVwKQorICAgICAgICAgICAgICAgIGlmIG1fZGVwOgorICAgICAgICAgICAgICAgICAgICBkZXAgPSBtX2RlcC5ncm91cCgxKQorICAgICAgICAgICAgICAgIHBrZ19kZXBlbmRzX2xpc3QuYXBwZW5kKGRlcCkKKworICAgICAgICAgICAgcmV0dXJuIHBrZ19kZXBlbmRzX2xpc3QKKworICAgICAgICBwa2dzID0ge30KKyAgICAgICAgcGtnX25hbWUgPSAiIgorICAgICAgICBwa2dfc3RhdHVzX21hdGNoID0gRmFsc2UKKyAgICAgICAgcGtnX2RlcGVuZHMgPSAiIgorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSkgYXMgc3RhdHVzOgorICAgICAgICAgICAgZGF0YSA9IHN0YXR1cy5yZWFkKCkKKyAgICAgICAgICAgIHN0YXR1cy5jbG9zZSgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBkYXRhLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIG1fcGtnID0gcmUubWF0Y2goIl5QYWNrYWdlOiAoLiopIiwgbGluZSkKKyAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IHJlLm1hdGNoKCJeU3RhdHVzOi4qdW5wYWNrZWQiLCBsaW5lKQorICAgICAgICAgICAgICAgIG1fZGVwZW5kcyA9IHJlLm1hdGNoKCJeRGVwZW5kczogKC4qKSIsIGxpbmUpCisKKyAgICAgICAgICAgICAgICBpZiBtX3BrZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnX25hbWUgYW5kIHBrZ19zdGF0dXNfbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ19uYW1lXSA9IF9nZXRfcGtnX2RlcGVuZHNfbGlzdChwa2dfZGVwZW5kcykKKworICAgICAgICAgICAgICAgICAgICBwa2dfbmFtZSA9IG1fcGtnLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHBrZ19zdGF0dXNfbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBwa2dfZGVwZW5kcyA9ICIiCisgICAgICAgICAgICAgICAgZWxpZiBtX3N0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3N0YXR1c19tYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIG1fZGVwZW5kcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX2RlcGVuZHMgPSBtX2RlcGVuZHMuZ3JvdXAoMSkKKworICAgICAgICAjIHJlbW92ZSBwYWNrYWdlIGRlcGVuZGVuY2llcyBub3QgaW4gcG9zdGluc3RzCisgICAgICAgIHBrZ19uYW1lcyA9IHBrZ3Mua2V5cygpCisgICAgICAgIGZvciBwa2dfbmFtZSBpbiBwa2dfbmFtZXM6CisgICAgICAgICAgICBkZXBzID0gcGtnc1twa2dfbmFtZV1bOl0KKworICAgICAgICAgICAgZm9yIGQgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkIG5vdCBpbiBwa2dfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX25hbWVdLnJlbW92ZShkKQorCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0c19jb21tb24oc2VsZiwgc3RhdHVzX2ZpbGUpOgorICAgICAgICBkZWYgX2RlcF9yZXNvbHZlKGdyYXBoLCBub2RlLCByZXNvbHZlZCwgc2Vlbik6CisgICAgICAgICAgICBzZWVuLmFwcGVuZChub2RlKQorCisgICAgICAgICAgICBmb3IgZWRnZSBpbiBncmFwaFtub2RlXToKKyAgICAgICAgICAgICAgICBpZiBlZGdlIG5vdCBpbiByZXNvbHZlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZWRnZSBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJQYWNrYWdlcyAlcyBhbmQgJXMgaGF2ZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBwb3N0aW5zdHMgc2NyaXB0cy4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobm9kZSwgZWRnZSkpCisgICAgICAgICAgICAgICAgICAgIF9kZXBfcmVzb2x2ZShncmFwaCwgZWRnZSwgcmVzb2x2ZWQsIHNlZW4pCisKKyAgICAgICAgICAgIHJlc29sdmVkLmFwcGVuZChub2RlKQorCisgICAgICAgIHBrZ19saXN0ID0gW10KKworICAgICAgICBwa2dzID0gc2VsZi5fZ2V0X3BrZ3NfcG9zdGluc3RzKHN0YXR1c19maWxlKQorICAgICAgICBpZiBwa2dzOgorICAgICAgICAgICAgcm9vdCA9ICJfX3BhY2thZ2Vncm91cF9wb3N0aW5zdF9fIgorICAgICAgICAgICAgcGtnc1tyb290XSA9IHBrZ3Mua2V5cygpCisgICAgICAgICAgICBfZGVwX3Jlc29sdmUocGtncywgcm9vdCwgcGtnX2xpc3QsIFtdKQorICAgICAgICAgICAgcGtnX2xpc3QucmVtb3ZlKHJvb3QpCisKKyAgICAgICAgaWYgbGVuKHBrZ19saXN0KSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gcGtnX2xpc3QKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHNfY29tbW9uKHNlbGYsIGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpOgorICAgICAgICBudW0gPSAwCisgICAgICAgIGZvciBwIGluIHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0cygpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdF9wb3N0aW5zdF9kaXIpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmNfcG9zdGluc3RfZGlyLCBwICsgIi5wb3N0aW5zdCIpKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4oc3JjX3Bvc3RpbnN0X2RpciwgcCArICIucG9zdGluc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZHN0X3Bvc3RpbnN0X2RpciwgIiUwM2QtJXMiICUgKG51bSwgcCkpKQorCisgICAgICAgICAgICBudW0gKz0gMQorCitjbGFzcyBEcGtnUm9vdGZzKERwa2dPcGtnUm9vdGZzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKKyAgICAgICAgc3VwZXIoRHBrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5sb2dfY2hlY2tfcmVnZXggPSAnXkU6JworCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmltYWdlX3Jvb3RmcywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1RFTVBfUk9PVEZTJywgVHJ1ZSksIFRydWUpCisgICAgICAgIHNlbGYubWFuaWZlc3QgPSBEcGtnTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorICAgICAgICBzZWxmLnBtID0gRHBrZ1BNKGQsIGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdEUEtHX0FSQ0gnLCBUcnVlKSkKKworCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IHNlbGYubWFuaWZlc3QucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIGRlYl9wcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignREVCX1BSRVBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorICAgICAgICBkZWJfcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdERUJfUE9TVFBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorCisgICAgICAgIGFsdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30vdmFyL2xpYi9kcGtnL2FsdGVybmF0aXZlcyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhbHRfZGlyKQorCisgICAgICAgICMgdXBkYXRlIFBNIGluZGV4IGZpbGVzCisgICAgICAgIHNlbGYucG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIGRlYl9wcmVfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBmb3IgcGtnX3R5cGUgaW4gc2VsZi5pbnN0YWxsX29yZGVyOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRmFsc2UsIFRydWVdW3BrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWV0pCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvdmFyL2xpYi9kcGtnJ10pCisKKyAgICAgICAgc2VsZi5wbS5maXhfYnJva2VuX2RlcGVuZGVuY2llcygpCisKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJpbnN0YWxsZWQiKQorCisgICAgICAgIHNlbGYucG0ucnVuX3ByZV9wb3N0X2luc3RhbGxzKCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBkZWJfcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnREVQTE9ZX0RJUl9ERUInLCAnREVCX1NES19BUkNIJywgJ0FQVENPTkZfVEFSR0VUJywgJ0FQVF9BUkdTJywgJ0RQS0dfQVJDSCcsICdERUJfUFJFUFJPQ0VTU19DT01NQU5EUycsICdERUJfUE9TVFBST0NFU1NfQ09NTUFORFMnXQorCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi5pbWFnZV9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9zdGF0dXMiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHNfY29tbW9uKHN0YXR1c19maWxlKQorCisgICAgZGVmIF9zYXZlX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgZHN0X3Bvc3RpbnN0X2RpciA9IHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGViLXBvc3RpbnN0cyIpCisgICAgICAgIHNyY19wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30vdmFyL2xpYi9kcGtnL2luZm8iKQorICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9wb3N0aW5zdHNfY29tbW9uKGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpCisKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCByZWdpc3RlcmVkX3BrZ3MpOgorICAgICAgICBzZWxmLnBtLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgT3BrZ1Jvb3RmcyhEcGtnT3BrZ1Jvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKE9wa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJyhleGl0IDF8Q29sbGVjdGVkIGVycm9ycyknCisKKyAgICAgICAgc2VsZi5tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBtYW5pZmVzdF9kaXIpCisgICAgICAgIHNlbGYub3BrZ19jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfVEFSR0VUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wa2dfYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIFRydWUpCisKKyAgICAgICAgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPSBzZWxmLmQuZ2V0VmFyKCdJTkNfSVBLX0lNQUdFX0dFTicsIFRydWUpIG9yICIiCisgICAgICAgIGlmIHNlbGYuX3JlbW92ZV9vbGRfcm9vdGZzKCk6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgICAgICBzZWxmLnBtID0gT3BrZ1BNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dfYXJjaHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBtID0gT3BrZ1BNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dfYXJjaHMpCisgICAgICAgICAgICBzZWxmLnBtLnJlY292ZXJfcGFja2FnaW5nX2RhdGEoKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorCisgICAgZGVmIF9wcmVsaW5rX2ZpbGUoc2VsZiwgcm9vdF9kaXIsIGZpbGVuYW1lKToKKyAgICAgICAgYmIubm90ZSgncHJlbGluayAlcyBpbiAlcycgJSAoZmlsZW5hbWUsIHJvb3RfZGlyKSkKKyAgICAgICAgcHJlbGlua19jZmcgPSBvZS5wYXRoLmpvaW4ocm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mJykpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwcmVsaW5rX2NmZyk6CisgICAgICAgICAgICBzaHV0aWwuY29weShzZWxmLmQuZXhwYW5kKCcke1NUQUdJTkdfRElSX05BVElWRX0ke3N5c2NvbmZkaXJfbmF0aXZlfS9wcmVsaW5rLmNvbmYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWxpbmtfY2ZnKQorCisgICAgICAgIGNtZF9wcmVsaW5rID0gc2VsZi5kLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0vcHJlbGluaycpCisgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFtjbWRfcHJlbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXJvb3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFtUicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mJyldKQorCisgICAgJycnCisgICAgQ29tcGFyZSB0d28gZmlsZXMgd2l0aCB0aGUgc2FtZSBrZXkgdHdpY2UgdG8gc2VlIGlmIHRoZXkgYXJlIGVxdWFsLgorICAgIElmIHRoZXkgYXJlIG5vdCBlcXVhbCwgaXQgbWVhbnMgdGhleSBhcmUgZHVwbGljYXRlZCBhbmQgY29tZSBmcm9tCisgICAgZGlmZmVyZW50IHBhY2thZ2VzLgorICAgIDFzdDogQ29tYXByZSB0aGVtIGRpcmVjdGx5OworICAgIDJuZDogV2hpbGUgaW5jcmVtZW50YWwgaW1hZ2UgY3JlYXRpb24gaXMgZW5hYmxlZCwgb25lIG9mIHRoZQorICAgICAgICAgZmlsZXMgY291bGQgYmUgcHJvYmFseSBwcmVsaW5rZWQgaW4gdGhlIHByZXZpb3VzIGltYWdlCisgICAgICAgICBjcmVhdGlvbiBhbmQgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCwgc28gd2UgbmVlZCB0bworICAgICAgICAgcHJlbGluayB0aGUgb3RoZXIgb25lIGFuZCBjb21wYXJlIHRoZW0uCisgICAgJycnCisgICAgZGVmIF9maWxlX2VxdWFsKHNlbGYsIGtleSwgZjEsIGYyKToKKworICAgICAgICAjIEJvdGggb2YgdGhlbSBhcmUgbm90IHByZWxpbmtlZAorICAgICAgICBpZiBmaWxlY21wLmNtcChmMSwgZjIpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiBzZWxmLmltYWdlX3Jvb3RmcyBub3QgaW4gZjE6CisgICAgICAgICAgICBzZWxmLl9wcmVsaW5rX2ZpbGUoZjEucmVwbGFjZShrZXksICcnKSwgZjEpCisKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9yb290ZnMgbm90IGluIGYyOgorICAgICAgICAgICAgc2VsZi5fcHJlbGlua19maWxlKGYyLnJlcGxhY2Uoa2V5LCAnJyksIGYyKQorCisgICAgICAgICMgQm90aCBvZiB0aGVtIGFyZSBwcmVsaW5rZWQKKyAgICAgICAgaWYgZmlsZWNtcC5jbXAoZjEsIGYyKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBOb3QgZXF1YWwKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdhcyByZXVzZWQgZnJvbSB0aGUgb2xkIGltcGxlbWVudGF0aW9uLgorICAgIFNlZSBjb21taXQ6ICJpbWFnZS5iYmNsYXNzOiBBZGRlZCB2YXJpYWJsZXMgZm9yIG11bHRpbGliIHN1cHBvcnQuIiBieQorICAgIExpYW5oYW8gTHUuCisgICAgIiIiCisgICAgZGVmIF9tdWx0aWxpYl9zYW5pdHlfdGVzdChzZWxmLCBkaXJzKToKKworICAgICAgICBhbGxvd19yZXBsYWNlID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJSRV9BTExPV19SRVAiLCBUcnVlKQorICAgICAgICBpZiBhbGxvd19yZXBsYWNlIGlzIE5vbmU6CisgICAgICAgICAgICBhbGxvd19yZXBsYWNlID0gIiIKKworICAgICAgICBhbGxvd19yZXAgPSByZS5jb21waWxlKHJlLnN1YigiXHwkIiwgIiIsIGFsbG93X3JlcGxhY2UpKQorICAgICAgICBlcnJvcl9wcm9tcHQgPSAiTXVsdGlsaWIgY2hlY2sgZXJyb3I6IgorCisgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgZm9yIHJvb3QsIHN1YmZvbGRlcnMsIHN1YmZpbGVzIGluIG9zLndhbGsoZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBzdWJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgICAgICAgICBrZXkgPSBzdHIob3MucGF0aC5qb2luKCIvIiwgb3MucGF0aC5yZWxwYXRoKGl0ZW0sIGRpcikpKQorCisgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2sgd2hldGhlciB0aGUgZmlsZSBpcyBhbGxvdyB0byByZXBsYWNlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbGxvd19yZXAubWF0Y2goa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXNba2V5XSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhpdGVtKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2VxdWFsKGtleSwgZmlsZXNba2V5XSwgaXRlbSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGR1cGxpY2F0ZSBmaWxlcyAlcyAlcyBpcyBub3QgdGhlIHNhbWVcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3JfcHJvbXB0LCBpdGVtLCBmaWxlc1trZXldKSkKKworICAgICAgICAgICAgICAgICAgICAjcGFzcyB0aGUgY2hlY2ssIGFkZCB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNba2V5XSA9IGl0ZW0KKworICAgIGRlZiBfbXVsdGlsaWJfdGVzdF9pbnN0YWxsKHNlbGYsIHBrZ3MpOgorICAgICAgICBtbF90ZW1wID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVEVNUF9ST09URlMiLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobWxfdGVtcCkKKworICAgICAgICBkaXJzID0gW3NlbGYuaW1hZ2Vfcm9vdGZzXQorCisgICAgICAgIGZvciB2YXJpYW50IGluIHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIG1sX3RhcmdldF9yb290ZnMgPSBvcy5wYXRoLmpvaW4obWxfdGVtcCwgdmFyaWFudCkKKworICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKG1sX3RhcmdldF9yb290ZnMsIFRydWUpCisKKyAgICAgICAgICAgIG1sX29wa2dfY29uZiA9IG9zLnBhdGguam9pbihtbF90ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgKyAiLSIgKyBvcy5wYXRoLmJhc2VuYW1lKHNlbGYub3BrZ19jb25mKSkKKworICAgICAgICAgICAgbWxfcG0gPSBPcGtnUE0oc2VsZi5kLCBtbF90YXJnZXRfcm9vdGZzLCBtbF9vcGtnX2NvbmYsIHNlbGYucGtnX2FyY2hzKQorCisgICAgICAgICAgICBtbF9wbS51cGRhdGUoKQorICAgICAgICAgICAgbWxfcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgICAgICBkaXJzLmFwcGVuZChtbF90YXJnZXRfcm9vdGZzKQorCisgICAgICAgIHNlbGYuX211bHRpbGliX3Nhbml0eV90ZXN0KGRpcnMpCisKKyAgICAnJycKKyAgICBXaGlsZSBpcGsgaW5jcmVtZW50YWwgaW1hZ2UgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLCBpdCB3aWxsIHJlbW92ZSB0aGUKKyAgICB1bm5lZWRlZCBwa2dzIGJ5IGNvbXBhcmluZyB0aGUgb2xkIGZ1bGwgbWFuaWZlc3QgaW4gcHJldmlvdXMgZXhpc3RpbmcKKyAgICBpbWFnZSBhbmQgdGhlIG5ldyBmdWxsIG1hbmlmZXN0IGluIHRoZSBjdXJyZW50IGltYWdlLgorICAgICcnJworICAgIGRlZiBfcmVtb3ZlX2V4dHJhX3BhY2thZ2VzKHNlbGYsIHBrZ3NfaW5pdGlhbF9pbnN0YWxsKToKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPT0gIjEiOgorICAgICAgICAgICAgIyBQYXJzZSBmdWxsIG1hbmlmZXN0IGluIHByZXZpb3VzIGV4aXN0aW5nIGltYWdlIGNyZWF0aW9uIHNlc3Npb24KKyAgICAgICAgICAgIG9sZF9mdWxsX21hbmlmZXN0ID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9mdWxsX21hbmlmZXN0KCkKKworICAgICAgICAgICAgIyBDcmVhdGUgZnVsbCBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgaW1hZ2Ugc2Vzc2lvbiwgdGhlIG9sZCBvbmUKKyAgICAgICAgICAgICMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbmV3IG9uZS4KKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3QuY3JlYXRlX2Z1bGwoc2VsZi5wbSkKKworICAgICAgICAgICAgIyBQYXJzZSBmdWxsIG1hbmlmZXN0IGluIGN1cnJlbnQgaW1hZ2UgY3JlYXRpb24gc2Vzc2lvbgorICAgICAgICAgICAgbmV3X2Z1bGxfbWFuaWZlc3QgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2Z1bGxfbWFuaWZlc3QoKQorCisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIG9sZF9mdWxsX21hbmlmZXN0OgorICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gbmV3X2Z1bGxfbWFuaWZlc3Q6CisgICAgICAgICAgICAgICAgICAgIHBrZ190b19yZW1vdmUuYXBwZW5kKHBrZykKKworICAgICAgICAgICAgaWYgcGtnX3RvX3JlbW92ZSAhPSBbXToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdkZWNyZW1lbnRhbCByZW1vdmVkOiAlcycgJSAnICcuam9pbihwa2dfdG9fcmVtb3ZlKSkKKyAgICAgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZShwa2dfdG9fcmVtb3ZlKQorCisgICAgJycnCisgICAgQ29tcGFyZSB3aXRoIHByZXZpb3VzIGV4aXN0aW5nIGltYWdlIGNyZWF0aW9uLCBpZiBzb21lIGNvbmRpdGlvbnMKKyAgICB0cmlnZ2VyZWQsIHRoZSBwcmV2aW91cyBvbGQgaW1hZ2Ugc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgVGhlIGNvbmRpdGlvbnMgaW5jbHVkZSBhbnkgb2YgJ1BBQ0tBR0VfRVhDTFVERSwgTk9fUkVDT01NRU5EQVRJT05TCisgICAgYW5kIEJBRF9SRUNPTU1FTkRBVElPTlMnIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgJycnCisgICAgZGVmIF9yZW1vdmVfb2xkX3Jvb3RmcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gIT0gIjEiOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB2YXJzX2xpc3RfZmlsZSA9IHNlbGYuZC5leHBhbmQoJyR7VH0vdmFyc19saXN0JykKKworICAgICAgICBvbGRfdmFyc19saXN0ID0gIiIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModmFyc19saXN0X2ZpbGUpOgorICAgICAgICAgICAgb2xkX3ZhcnNfbGlzdCA9IG9wZW4odmFyc19saXN0X2ZpbGUsICdyKycpLnJlYWQoKQorCisgICAgICAgIG5ld192YXJzX2xpc3QgPSAnJXM6JXM6JXNcbicgJSBcCisgICAgICAgICAgICAgICAgKChzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkgb3IgJycpLnN0cmlwKCksCisgICAgICAgICAgICAgICAgIChzZWxmLmQuZ2V0VmFyKCdOT19SRUNPTU1FTkRBVElPTlMnLCBUcnVlKSBvciAnJykuc3RyaXAoKSwKKyAgICAgICAgICAgICAgICAgKHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScsIFRydWUpIG9yICcnKS5zdHJpcCgpKQorICAgICAgICBvcGVuKHZhcnNfbGlzdF9maWxlLCAndysnKS53cml0ZShuZXdfdmFyc19saXN0KQorCisgICAgICAgIGlmIG9sZF92YXJzX2xpc3QgIT0gbmV3X3ZhcnNfbGlzdDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGtnc190b19pbnN0YWxsID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKyAgICAgICAgb3BrZ19wcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgb3BrZ19wb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorICAgICAgICByb290ZnNfcG9zdF9pbnN0YWxsX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdST09URlNfUE9TVElOU1RBTExfQ09NTUFORCcsIFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgUE0gaW5kZXggZmlsZXMsIHVubGVzcyB1c2VycyBwcm92aWRlIHRoZWlyIG93biBmZWVkcworICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKSBvciAiIikgIT0gIjEiOgorICAgICAgICAgICAgc2VsZi5wbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgb3BrZ19wcmVfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBzZWxmLnBtLmhhbmRsZV9iYWRfcmVjb21tZW5kYXRpb25zKCkKKworICAgICAgICBpZiBzZWxmLmluY19vcGtnX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfZXh0cmFfcGFja2FnZXMocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBzZWxmLmluc3RhbGxfb3JkZXI6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICAgICAgIyBGb3IgbXVsdGlsaWIsIHdlIHBlcmZvcm0gYSBzYW5pdHkgdGVzdCBiZWZvcmUgZmluYWwgaW5zdGFsbAorICAgICAgICAgICAgICAgICMgSWYgc2FuaXR5IHRlc3QgZmFpbHMsIGl0IHdpbGwgYXV0b21hdGljYWxseSBkbyBhIGJiLmZhdGFsKCkKKyAgICAgICAgICAgICAgICAjIGFuZCB0aGUgaW5zdGFsbGF0aW9uIHdpbGwgc3RvcAorICAgICAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX01VTFRJTElCOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdWx0aWxpYl90ZXN0X2luc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSkKKworICAgICAgICAgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRmFsc2UsIFRydWVdW3BrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWV0pCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvdmFyL2xpYi9vcGtnJ10pCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgb3BrZ19wb3N0X3Byb2Nlc3NfY21kcykKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcm9vdGZzX3Bvc3RfaW5zdGFsbF9jbWRzKQorCisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0uYmFja3VwX3BhY2thZ2luZ19kYXRhKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RlcGVuZHNfbGlzdCgpOgorICAgICAgICByZXR1cm4gWydJUEtHQ09ORl9TREsnLCAnSVBLX0ZFRURfVVJJUycsICdERVBMT1lfRElSX0lQSycsICdJUEtHQ09ORl9UQVJHRVQnLCAnSU5DX0lQS19JTUFHRV9HRU4nLCAnT1BLR19BUkdTJywgJ09QS0dMSUJESVInLCAnT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnT1BLR0xJQkRJUiddCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ09QS0dMSUJESVInLCBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BrZyIsICJzdGF0dXMiKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzX2NvbW1vbihzdGF0dXNfZmlsZSkKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIGRzdF9wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2lway1wb3N0aW5zdHMiKQorICAgICAgICBzcmNfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtPUEtHTElCRElSfS9vcGtnL2luZm8iKQorICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9wb3N0aW5zdHNfY29tbW9uKGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpCisKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCByZWdpc3RlcmVkX3BrZ3MpOgorICAgICAgICBzZWxmLnBtLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKK2RlZiBnZXRfY2xhc3NfZm9yX3R5cGUoaW1ndHlwZSk6CisgICAgcmV0dXJuIHsicnBtIjogUnBtUm9vdGZzLAorICAgICAgICAgICAgImlwayI6IE9wa2dSb290ZnMsCisgICAgICAgICAgICAiZGViIjogRHBrZ1Jvb3Rmc31baW1ndHlwZV0KKworZGVmIHZhcmlhYmxlX2RlcGVuZHMoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGltZ190eXBlID0gZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgIGNscyA9IGdldF9jbGFzc19mb3JfdHlwZShpbWdfdHlwZSkKKyAgICByZXR1cm4gY2xzLl9kZXBlbmRzX2xpc3QoKQorCitkZWYgY3JlYXRlX3Jvb3RmcyhkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgZW52X2JrcCA9IG9zLmVudmlyb24uY29weSgpCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgUnBtUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBPcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICBEcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKworICAgIG9zLmVudmlyb24uY2xlYXIoKQorICAgIG9zLmVudmlyb24udXBkYXRlKGVudl9ia3ApCisKKworZGVmIGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIGZvcm1hdD1Ob25lLCByb290ZnNfZGlyPU5vbmUpOgorICAgIGlmIG5vdCByb290ZnNfZGlyOgorICAgICAgICByb290ZnNfZGlyID0gZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgcmV0dXJuIFJwbVBrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImlwayI6CisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGlzIGFzIGEgc3RhbmRhbG9uZSBzY3JpcHQsIGZyb20gb3V0c2lkZSBiaXRiYWtlCisgICAgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgIiIiCisgICAgVEJECisgICAgIiIiCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9zZGsucHkgYi9tZXRhL2xpYi9vZS9zZGsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYTBmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Nkay5weQpAQCAtMCwwICsxLDM0OSBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2Zyb20gb2UubWFuaWZlc3QgaW1wb3J0ICoKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCAqCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBnbG9iCisKKworY2xhc3MgU2RrKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuc2RrX291dHB1dCA9IHNlbGYuZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKQorICAgICAgICBzZWxmLnNka19uYXRpdmVfcGF0aCA9IHNlbGYuZC5nZXRWYXIoJ1NES1BBVEhOQVRJVkUnLCBUcnVlKS5zdHJpcCgnLycpCisgICAgICAgIHNlbGYudGFyZ2V0X3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgVHJ1ZSkuc3RyaXAoJy8nKQorICAgICAgICBzZWxmLnN5c2NvbmZkaXIgPSBzZWxmLmQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkuc3RyaXAoJy8nKQorCisgICAgICAgIHNlbGYuc2RrX3RhcmdldF9zeXNyb290ID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi50YXJnZXRfcGF0aCkKKyAgICAgICAgc2VsZi5zZGtfaG9zdF9zeXNyb290ID0gc2VsZi5zZGtfb3V0cHV0CisKKyAgICAgICAgaWYgbWFuaWZlc3RfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2RpciA9IHNlbGYuZC5nZXRWYXIoIlNES19ESVIiLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBtYW5pZmVzdF9kaXIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zZGtfb3V0cHV0LCBUcnVlKQorCisgICAgICAgIHNlbGYuaW5zdGFsbF9vcmRlciA9IE1hbmlmZXN0LklOU1RBTExfT1JERVIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfcG9wdWxhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuc2RrX291dHB1dCkKKworICAgICAgICAjIGNhbGwgYmFja2VuZCBkZXBlbmRlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgc2VsZi5fcG9wdWxhdGUoKQorCisgICAgICAgICMgRG9uJ3Qgc2hpcCBhbnkgbGliR0wgaW4gdGhlIFNESworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbGliZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYkdMKiIpKQorCisgICAgICAgICMgRml4IG9yIHJlbW92ZSBicm9rZW4gLmxhIGZpbGVzCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsaWJkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKi5sYSIpKQorCisgICAgICAgICMgTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0cyBmaWxlc3lzdGVtCisgICAgICAgIGxpbmtfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zeXNjb25mZGlyLCAibGQuc28uY2FjaGUiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGxpbmtfbmFtZSkpCisgICAgICAgIG9zLnN5bWxpbmsoIi9ldGMvbGQuc28uY2FjaGUiLCBsaW5rX25hbWUpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcignU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCBUcnVlKSkKKworCitjbGFzcyBScG1TZGsoU2RrKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1TZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCkKKyAgICAgICAgc2VsZi5ob3N0X21hbmlmZXN0ID0gUnBtTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgdGFyZ2V0X3Byb3ZpZGVuYW1lID0gWycvYmluL3NoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvYmluL2Jhc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL2VudicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9iaW4vcGVybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGtnY29uZmlnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gUnBtUE0oZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka190YXJnZXRfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdUQVJHRVRfVkVORE9SJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Byb3ZpZGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNka19wcm92aWRlbmFtZSA9IFsnL2Jpbi9zaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnL2Jpbi9iYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9lbnYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL3BlcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZ2NvbmZpZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliR0wuc28oKSg2NGJpdCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYkdMLnNvJworICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IFJwbVBNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignU0RLX1ZFTkRPUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNka19wcm92aWRlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNES19QQUNLQUdFX0FSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNES19PUyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIHBtLmNyZWF0ZV9jb25maWdzKCkKKyAgICAgICAgcG0ud3JpdGVfaW5kZXgoKQorICAgICAgICBwbS5kdW1wX2FsbF9hdmFpbGFibGVfcGtncygpCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5yZW1vdmVfcGFja2FnaW5nX2RhdGEoKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLmhvc3RfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICAjIE1vdmUgaG9zdCBSUE0gbGlicmFyeSBkYXRhCisgICAgICAgIG5hdGl2ZV9ycG1fc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJycG0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG5hdGl2ZV9ycG1fc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiIpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1vdmVmaWxlKGYsIG5hdGl2ZV9ycG1fc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKyAgICAgICAgIyBNb3ZlIGhvc3Qgc3lzY29uZmlnIGRhdGEKKyAgICAgICAgbmF0aXZlX3N5c2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignc3lzY29uZmRpcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfc3lzY29uZl9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAiZXRjIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfc3lzY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAiZXRjIiksIFRydWUpCisKKworY2xhc3MgT3BrZ1NkayhTZGspOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKE9wa2dTZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfVEFSR0VUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5ob3N0X2NvbmYgPSBzZWxmLmQuZ2V0VmFyKCJJUEtHQ09ORl9TREsiLCBUcnVlKQorCisgICAgICAgIHNlbGYudGFyZ2V0X21hbmlmZXN0ID0gT3BrZ01hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0gPSBPcGtnUE0oZCwgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsIHNlbGYudGFyZ2V0X2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi5ob3N0X3BtID0gT3BrZ1BNKGQsIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwgc2VsZi5ob3N0X2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJTREtfUEFDS0FHRV9BUkNIUyIsIFRydWUpKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpIG9yICIiKSAhPSAiMSI6CisgICAgICAgICAgICBwbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgcG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3MpCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIFRBUkdFVCBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi50YXJnZXRfcG0sIHNlbGYudGFyZ2V0X21hbmlmZXN0KQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtLmluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLmQuZ2V0VmFyKCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICB0YXJnZXRfc3lzY29uZmRpciA9IG9zLnBhdGguam9pbihzZWxmLnNka190YXJnZXRfc3lzcm9vdCwgc2VsZi5zeXNjb25mZGlyKQorICAgICAgICBob3N0X3N5c2NvbmZkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfaG9zdF9zeXNyb290LCBzZWxmLnN5c2NvbmZkaXIpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRhcmdldF9zeXNjb25mZGlyKQorICAgICAgICBzaHV0aWwuY29weShzZWxmLnRhcmdldF9jb25mLCB0YXJnZXRfc3lzY29uZmRpcikKKyAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKHRhcmdldF9zeXNjb25mZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzZWxmLnRhcmdldF9jb25mKSksIDA2NDQpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGhvc3Rfc3lzY29uZmRpcikKKyAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5ob3N0X2NvbmYsIGhvc3Rfc3lzY29uZmRpcikKKyAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGhvc3Rfc3lzY29uZmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5ob3N0X2NvbmYpKSwgMDY0NCkKKworICAgICAgICBuYXRpdmVfb3BrZ19zdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAib3BrZyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfb3BrZ19zdGF0ZV9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiwgImxpYiIsICJvcGtnIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfb3BrZ19zdGF0ZV9kaXIpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsICJ2YXIiKSwgVHJ1ZSkKKworCitjbGFzcyBEcGtnU2RrKFNkayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoRHBrZ1Nkaywgc2VsZikuX19pbml0X18oZCwgbWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYudGFyZ2V0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoIkFQVENPTkZfVEFSR0VUIiwgVHJ1ZSksICJhcHQiKQorICAgICAgICBzZWxmLmhvc3RfY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcigiQVBUQ09ORl9UQVJHRVQiLCBUcnVlKSwgImFwdC1zZGsiKQorCisgICAgICAgIHNlbGYudGFyZ2V0X21hbmlmZXN0ID0gRHBrZ01hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IERwa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0gPSBEcGtnUE0oZCwgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiRFBLR19BUkNIIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X2NvbmZfZGlyKQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IERwa2dQTShkLCBzZWxmLnNka19ob3N0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJTREtfUEFDS0FHRV9BUkNIUyIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiREVCX1NES19BUkNIIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvc3RfY29uZl9kaXIpCisKKyAgICBkZWYgX2NvcHlfYXB0X2Rpcl90byhzZWxmLCBkc3RfZGlyKToKKyAgICAgICAgc3RhZ2luZ19ldGNkaXJfbmF0aXZlID0gc2VsZi5kLmdldFZhcigiU1RBR0lOR19FVENESVJfTkFUSVZFIiwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoZHN0X2RpciwgVHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUob3MucGF0aC5qb2luKHN0YWdpbmdfZXRjZGlyX25hdGl2ZSwgImFwdCIpLCBkc3RfZGlyKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIHBtLndyaXRlX2luZGV4KCkKKyAgICAgICAgcG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3MpCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIFRBUkdFVCBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi50YXJnZXRfcG0sIHNlbGYudGFyZ2V0X21hbmlmZXN0KQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtLmluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLmQuZ2V0VmFyKCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIHNlbGYuX2NvcHlfYXB0X2Rpcl90byhvcy5wYXRoLmpvaW4oc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsICJldGMiLCAiYXB0IikpCisKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBOQVRJVkVTREsgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYuaG9zdF9wbSwgc2VsZi5ob3N0X21hbmlmZXN0KQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoIlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIHNlbGYuX2NvcHlfYXB0X2Rpcl90byhvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRjIiwgImFwdCIpKQorCisgICAgICAgIG5hdGl2ZV9kcGtnX3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhciIsICJsaWIiLCAiZHBrZyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfZHBrZ19zdGF0ZV9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiwgImxpYiIsICJkcGtnIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfZHBrZ19zdGF0ZV9kaXIpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsICJ2YXIiKSwgVHJ1ZSkKKworCitkZWYgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIHRhcmdldCwgZm9ybWF0PU5vbmUsIHJvb3Rmc19kaXI9Tm9uZSk6CisgICAgaWYgcm9vdGZzX2RpciBpcyBOb25lOgorICAgICAgICBzZGtfb3V0cHV0ID0gZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKQorICAgICAgICB0YXJnZXRfcGF0aCA9IGQuZ2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgVHJ1ZSkuc3RyaXAoJy8nKQorCisgICAgICAgIHJvb3Rmc19kaXIgPSBbc2RrX291dHB1dCwgb3MucGF0aC5qb2luKHNka19vdXRwdXQsIHRhcmdldF9wYXRoKV1bdGFyZ2V0IGlzIFRydWVdCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgYXJjaF92YXIgPSBbIlNES19QQUNLQUdFX0FSQ0hTIiwgTm9uZV1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIG9zX3ZhciA9IFsiU0RLX09TIiwgTm9uZV1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIHJldHVybiBScG1Qa2dzTGlzdChkLCByb290ZnNfZGlyLCBhcmNoX3Zhciwgb3NfdmFyKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBjb25mX2ZpbGVfdmFyID0gWyJJUEtHQ09ORl9TREsiLCAiSVBLR0NPTkZfVEFSR0VUIl1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgZC5nZXRWYXIoY29uZl9maWxlX3ZhciwgVHJ1ZSkpLmxpc3QoZm9ybWF0KQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImRlYiI6CisgICAgICAgIHJldHVybiBEcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpcikubGlzdChmb3JtYXQpCisKK2RlZiBwb3B1bGF0ZV9zZGsoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGVudl9ia3AgPSBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIFJwbVNkayhkLCBtYW5pZmVzdF9kaXIpLnBvcHVsYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBPcGtnU2RrKGQsIG1hbmlmZXN0X2RpcikucG9wdWxhdGUoKQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImRlYiI6CisgICAgICAgIERwa2dTZGsoZCwgbWFuaWZlc3RfZGlyKS5wb3B1bGF0ZSgpCisKKyAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3NzdGF0ZXNpZy5weSBiL21ldGEvbGliL29lL3NzdGF0ZXNpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQ2NzEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5CkBAIC0wLDAgKzEsMjkxIEBACitpbXBvcnQgYmIuc2lnZ2VuCisKK2RlZiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNpZ2dlbiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKToKKyAgICAjIFJldHVybiBUcnVlIGlmIHdlIHNob3VsZCBrZWVwIHRoZSBkZXBlbmRlbmN5LCBGYWxzZSB0byBkcm9wIGl0CisgICAgZGVmIGlzTmF0aXZlKHgpOgorICAgICAgICByZXR1cm4geC5lbmRzd2l0aCgiLW5hdGl2ZSIpCisgICAgZGVmIGlzQ3Jvc3MoeCk6CisgICAgICAgIHJldHVybiAiLWNyb3NzLSIgaW4geAorICAgIGRlZiBpc05hdGl2ZVNESyh4KToKKyAgICAgICAgcmV0dXJuIHguc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpCisgICAgZGVmIGlzS2VybmVsKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gaW5oZXJpdHMuZmluZCgiL21vZHVsZS1iYXNlLmJiY2xhc3MiKSAhPSAtMSBvciBpbmhlcml0cy5maW5kKCIvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcyIpICE9IC0xCisgICAgZGVmIGlzUGFja2FnZUdyb3VwKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gIi9wYWNrYWdlZ3JvdXAuYmJjbGFzcyIgaW4gaW5oZXJpdHMKKyAgICBkZWYgaXNBbGxBcmNoKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gIi9hbGxhcmNoLmJiY2xhc3MiIGluIGluaGVyaXRzCisgICAgZGVmIGlzSW1hZ2UoZm4pOgorICAgICAgICByZXR1cm4gIi9pbWFnZS5iYmNsYXNzIiBpbiAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorCisgICAgIyBBbHdheXMgaW5jbHVkZSBvdXIgb3duIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisgICAgaWYgcmVjaXBlbmFtZSA9PSBkZXBuYW1lOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBRdWlsdCAocGF0Y2ggYXBwbGljYXRpb24pIGNoYW5naW5nIGlzbid0IGxpa2VseSB0byBhZmZlY3QgYW55dGhpbmcKKyAgICBleGNsdWRlbGlzdCA9IFsncXVpbHQtbmF0aXZlJywgJ3N1YnZlcnNpb24tbmF0aXZlJywgJ2dpdC1uYXRpdmUnXQorICAgIGlmIGRlcG5hbWUgaW4gZXhjbHVkZWxpc3QgYW5kIHJlY2lwZW5hbWUgIT0gZGVwbmFtZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIEV4Y2x1ZGUgd2VsbCBkZWZpbmVkIHJlY2lwZS0+ZGVwZW5kZW5jeQorICAgIGlmICIlcy0+JXMiICUgKHJlY2lwZW5hbWUsIGRlcG5hbWUpIGluIHNpZ2dlbi5zYWZlcmVjaXBlZGVwczoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIERvbid0IGNoYW5nZSBuYXRpdmUvY3Jvc3MvbmF0aXZlc2RrIHJlY2lwZSBkZXBlbmRlbmNpZXMgYW55IGZ1cnRoZXIKKyAgICBpZiBpc05hdGl2ZShyZWNpcGVuYW1lKSBvciBpc0Nyb3NzKHJlY2lwZW5hbWUpIG9yIGlzTmF0aXZlU0RLKHJlY2lwZW5hbWUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBPbmx5IHRhcmdldCBwYWNrYWdlcyBiZXlvbmQgaGVyZQorCisgICAgIyBhbGxhcmNoIHBhY2thZ2Vncm91cHMgYXJlIGFzc3VtZWQgdG8gaGF2ZSB3ZWxsIGJlaGF2ZWQgbmFtZXMgd2hpY2ggZG9uJ3QgY2hhbmdlIGJldHdlZW4gYXJjaGl0ZWN1cmVzL3R1bmVzCisgICAgaWYgaXNQYWNrYWdlR3JvdXAoZm4pIGFuZCBpc0FsbEFyY2goZm4pOgorICAgICAgICByZXR1cm4gRmFsc2UgIAorCisgICAgIyBFeGNsdWRlIHdlbGwgZGVmaW5lZCBtYWNoaW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGRvbid0IGNoYW5nZSBBQkkKKyAgICBpZiBkZXBuYW1lIGluIHNpZ2dlbi5hYmlzYWZlcmVjaXBlcyBhbmQgbm90IGlzSW1hZ2UoZm4pOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgS2VybmVsIG1vZHVsZXMgYXJlIHdlbGwgbmFtZXNwYWNlZC4gV2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24gdGhlIGtlcm5lbCdzIGNoZWNrc3VtCisgICAgIyBpZiB3ZSdyZSBqdXN0IGRvaW5nIGFuIFJSRUNPTU1FTkRTX3h4eCA9ICJrZXJuZWwtbW9kdWxlLSoiLCBub3QgbGVhc3QgYmVjYXVzZSB0aGUgY2hlY2tzdW0KKyAgICAjIGlzIG1hY2hpbmUgc3BlY2lmaWMuCisgICAgIyBUaGVyZWZvcmUgaWYgd2UncmUgbm90IGEga2VybmVsIG9yIGEgbW9kdWxlIHJlY2lwZSAoaW5oZXJpdGluZyB0aGUga2VybmVsIGNsYXNzZXMpCisgICAgIyBhbmQgd2UgcmVjY29tZW5kIGEga2VybmVsLW1vZHVsZSwgd2UgZXhjbHVkZSB0aGUgZGVwZW5kZW5jeS4KKyAgICBkZXBmbiA9IGRlcC5yc3BsaXQoIi4iLCAxKVswXQorICAgIGlmIGRhdGFDYWNoZSBhbmQgaXNLZXJuZWwoZGVwZm4pIGFuZCBub3QgaXNLZXJuZWwoZm4pOgorICAgICAgICBmb3IgcGtnIGluIGRhdGFDYWNoZS5ydW5yZWNzW2ZuXToKKyAgICAgICAgICAgIGlmICIgIi5qb2luKGRhdGFDYWNoZS5ydW5yZWNzW2ZuXVtwa2ddKS5maW5kKCJrZXJuZWwtbW9kdWxlLSIpICE9IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBEZWZhdWx0IHRvIGtlZXAgZGVwZW5kZW5jaWVzCisgICAgcmV0dXJuIFRydWUKKworZGVmIHNzdGF0ZV9sb2NrZWRzaWdzKGQpOgorICAgIHNpZ3MgPSB7fQorICAgIHR5cGVzID0gKGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU19UWVBFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIHQgaW4gdHlwZXM6CisgICAgICAgIGxvY2tlZHNpZ3MgPSAoZC5nZXRWYXIoIlNJR0dFTl9MT0NLRURTSUdTXyVzIiAlIHQsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBscyBpbiBsb2NrZWRzaWdzOgorICAgICAgICAgICAgcG4sIHRhc2ssIGggPSBscy5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICBpZiBwbiBub3QgaW4gc2lnczoKKyAgICAgICAgICAgICAgICBzaWdzW3BuXSA9IHt9CisgICAgICAgICAgICBzaWdzW3BuXVt0YXNrXSA9IGgKKyAgICByZXR1cm4gc2lncworCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpYyk6CisgICAgbmFtZSA9ICJPRUJhc2ljIgorICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFiaXNhZmVyZWNpcGVzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHNlbGYuc2FmZXJlY2lwZWRlcHMgPSAoZGF0YS5nZXRWYXIoIlNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBwYXNzCisgICAgZGVmIHJ1bmRlcF9jaGVjayhzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIHNzdGF0ZV9ydW5kZXBmaWx0ZXIoc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKQorCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljSGFzaChiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoKToKKyAgICBuYW1lID0gIk9FQmFzaWNIYXNoIgorICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFiaXNhZmVyZWNpcGVzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHNlbGYuc2FmZXJlY2lwZWRlcHMgPSAoZGF0YS5nZXRWYXIoIlNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLmxvY2tlZHNpZ3MgPSBzc3RhdGVfbG9ja2Vkc2lncyhkYXRhKQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hlcyA9IHt9CisgICAgICAgIHNlbGYubG9ja2VkcG5tYXAgPSB7fQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hmbiA9IHt9CisgICAgICAgIHNlbGYubWFjaGluZSA9IGRhdGEuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5taXNtYXRjaF9tc2dzID0gW10KKyAgICAgICAgcGFzcworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSkKKworICAgIGRlZiBnZXRfdGFza2RhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5nZXRfdGFza2RhdGEoKQorICAgICAgICByZXR1cm4gKGRhdGEsIHNlbGYubG9ja2VkcG5tYXAsIHNlbGYubG9ja2VkaGFzaGZuKQorCisgICAgZGVmIHNldF90YXNrZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgY29yZWRhdGEsIHNlbGYubG9ja2VkcG5tYXAsIHNlbGYubG9ja2VkaGFzaGZuID0gZGF0YQorICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5zZXRfdGFza2RhdGEoY29yZWRhdGEpCisKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuZHVtcF9sb2NrZWRzaWdzKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2gsIHNlbGYpLmR1bXBfc2lncyhkYXRhQ2FjaGUsIG9wdGlvbnMpCisKKyAgICBkZWYgZ2V0X3Rhc2toYXNoKHNlbGYsIGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpOgorICAgICAgICBoID0gc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZ2V0X3Rhc2toYXNoKGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpCisKKyAgICAgICAgcmVjaXBlbmFtZSA9IGRhdGFDYWNoZS5wa2dfZm5bZm5dCisgICAgICAgIHNlbGYubG9ja2VkcG5tYXBbZm5dID0gcmVjaXBlbmFtZQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hmbltmbl0gPSBkYXRhQ2FjaGUuaGFzaGZuW2ZuXQorICAgICAgICBpZiByZWNpcGVuYW1lIGluIHNlbGYubG9ja2Vkc2lnczoKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5sb2NrZWRzaWdzW3JlY2lwZW5hbWVdOgorICAgICAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgICAgICAgICBoX2xvY2tlZCA9IHNlbGYubG9ja2Vkc2lnc1tyZWNpcGVuYW1lXVt0YXNrXQorICAgICAgICAgICAgICAgIHNlbGYubG9ja2VkaGFzaGVzW2tdID0gaF9sb2NrZWQKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2toYXNoW2tdID0gaF9sb2NrZWQKKyAgICAgICAgICAgICAgICAjYmIud2FybigiVXNpbmcgJXMgJXMgJXMiICUgKHJlY2lwZW5hbWUsIHRhc2ssIGgpKQorCisgICAgICAgICAgICAgICAgaWYgaCAhPSBoX2xvY2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taXNtYXRjaF9tc2dzLmFwcGVuZCgnVGhlICVzOiVzIHNpZyAoJXMpIGNoYW5nZWQsIHVzZSBsb2NrZWQgc2lnICVzIHRvIGluc3RlYWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChyZWNpcGVuYW1lLCB0YXNrLCBoLCBoX2xvY2tlZCkpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gaF9sb2NrZWQKKyAgICAgICAgI2JiLndhcm4oIiVzICVzICVzIiAlIChyZWNpcGVuYW1lLCB0YXNrLCBoKSkKKyAgICAgICAgcmV0dXJuIGgKKworICAgIGRlZiBkdW1wX3NpZ3Rhc2soc2VsZiwgZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSk6CisgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgaWYgayBpbiBzZWxmLmxvY2tlZGhhc2hlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSkKKworICAgIGRlZiBkdW1wX2xvY2tlZHNpZ3Moc2VsZiwgc2lnZmlsZT1Ob25lLCB0YXNrZmlsdGVyPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2lnZmlsZToKKyAgICAgICAgICAgIHNpZ2ZpbGUgPSBvcy5nZXRjd2QoKSArICIvbG9ja2VkLXNpZ3MuaW5jIgorCisgICAgICAgIGJiLnBsYWluKCJXcml0aW5nIGxvY2tlZCBzaWdzIHRvICVzIiAlIHNpZ2ZpbGUpCisgICAgICAgIHR5cGVzID0ge30KKyAgICAgICAgZm9yIGsgaW4gc2VsZi5ydW50YXNrZGVwczoKKyAgICAgICAgICAgIGlmIHRhc2tmaWx0ZXI6CisgICAgICAgICAgICAgICAgaWYgbm90IGsgaW4gdGFza2ZpbHRlcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZuID0gay5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICB0ID0gc2VsZi5sb2NrZWRoYXNoZm5bZm5dLnNwbGl0KCIgIilbMV0uc3BsaXQoIjoiKVs1XQorICAgICAgICAgICAgdCA9ICd0LScgKyB0LnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICBpZiB0IG5vdCBpbiB0eXBlczoKKyAgICAgICAgICAgICAgICB0eXBlc1t0XSA9IFtdCisgICAgICAgICAgICB0eXBlc1t0XS5hcHBlbmQoaykKKworICAgICAgICB3aXRoIG9wZW4oc2lnZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZm9yIHQgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfJXMgPSAiXFxcbicgJSB0KQorICAgICAgICAgICAgICAgIHR5cGVzW3RdLnNvcnQoKQorICAgICAgICAgICAgICAgIHNvcnRlZGsgPSBzb3J0ZWQodHlwZXNbdF0sIGtleT1sYW1iZGEgazogc2VsZi5sb2NrZWRwbm1hcFtrLnJzcGxpdCgiLiIsMSlbMF1dKQorICAgICAgICAgICAgICAgIGZvciBrIGluIHNvcnRlZGs6CisgICAgICAgICAgICAgICAgICAgIGZuID0gay5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBrLnJzcGxpdCgiLiIsMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiAgICAiICsgc2VsZi5sb2NrZWRwbm1hcFtmbl0gKyAiOiIgKyB0YXNrICsgIjoiICsgc2VsZi50YXNraGFzaFtrXSArICIgXFxcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgICJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdTSUdHRU5fTE9DS0VEU0lHU19UWVBFU18lcyA9ICIlcyInICUgKHNlbGYubWFjaGluZSwgIiAiLmpvaW4odHlwZXMua2V5cygpKSkpCisKKyAgICBkZWYgY2hlY2toYXNoZXMoc2VsZiwgbWlzc2VkLCByZXQsIHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQpOgorICAgICAgICBjaGVja2xldmVsID0gZC5nZXRWYXIoIlNJR0dFTl9MT0NLRURTSUdTX0NIRUNLX0xFVkVMIiwgVHJ1ZSkKKyAgICAgICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiByZXQ6CisgICAgICAgICAgICAgICAgZm9yIHBuIGluIHNlbGYubG9ja2Vkc2lnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgc3FfaGFzaFt0YXNrXSBpbiBzZWxmLmxvY2tlZHNpZ3NbcG5dLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncy5hcHBlbmQoIkxvY2tlZCBzaWcgaXMgc2V0IGZvciAlczolcyAoJXMpIHlldCBub3QgaW4gc3N0YXRlIGNhY2hlPyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocG4sIHNxX3Rhc2tbdGFza10sIHNxX2hhc2hbdGFza10pKQorCisgICAgICAgIGlmIHNlbGYubWlzbWF0Y2hfbXNncyBhbmQgY2hlY2tsZXZlbCA9PSAnd2Fybic6CisgICAgICAgICAgICBiYi53YXJuKCJcbiIuam9pbihzZWxmLm1pc21hdGNoX21zZ3MpKQorICAgICAgICBlbGlmIHNlbGYubWlzbWF0Y2hfbXNncyBhbmQgY2hlY2tsZXZlbCA9PSAnZXJyb3InOgorICAgICAgICAgICAgYmIuZmF0YWwoIlxuIi5qb2luKHNlbGYubWlzbWF0Y2hfbXNncykpCisKKworIyBJbnNlcnQgdGhlc2UgY2xhc3NlcyBpbnRvIHNpZ2dlbidzIG5hbWVzcGFjZSBzbyBpdCBjYW4gc2VlIGFuZCBzZWxlY3QgdGhlbQorYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvck9FQmFzaWMgPSBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljCitiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2ggPSBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljSGFzaAorCisKK2RlZiBmaW5kX3NpZ2luZm8ocG4sIHRhc2tuYW1lLCB0YXNraGFzaGxpc3QsIGQpOgorICAgICIiIiBGaW5kIHNpZ25hdHVyZSBkYXRhIGZpbGVzIGZvciBjb21wYXJpc29uIHB1cnBvc2VzICIiIgorCisgICAgaW1wb3J0IGZubWF0Y2gKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgaWYgdGFza2hhc2hsaXN0OgorICAgICAgICBoYXNoZmlsZXMgPSB7fQorCisgICAgaWYgbm90IHRhc2tuYW1lOgorICAgICAgICAjIFdlIGhhdmUgdG8gZGVyaXZlIHBuIGFuZCB0YXNrbmFtZQorICAgICAgICBrZXkgPSBwbgorICAgICAgICBzcGxpdGl0ID0ga2V5LnNwbGl0KCcuYmIuJykKKyAgICAgICAgdGFza25hbWUgPSBzcGxpdGl0WzFdCisgICAgICAgIHBuID0gb3MucGF0aC5iYXNlbmFtZShzcGxpdGl0WzBdKS5zcGxpdCgnXycpWzBdCisgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCd2aXJ0dWFsOm5hdGl2ZTonKToKKyAgICAgICAgICAgIHBuID0gcG4gKyAnLW5hdGl2ZScKKworICAgIGZpbGVkYXRlcyA9IHt9CisKKyAgICAjIEZpcnN0IHNlYXJjaCBpbiBzdGFtcHMgZGlyCisgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdNVUxUSU1BQ0hfVEFSR0VUX1NZUycsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsIHBuKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BWJywgJyonKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSJywgJyonKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0VYVEVORFBFJywgJycpCisgICAgc3RhbXAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVEFNUCcsIFRydWUpCisgICAgZmlsZXNwZWMgPSAnJXMuJXMuc2lnZGF0YS4qJyAlIChzdGFtcCwgdGFza25hbWUpCisgICAgZm91bmRhbGwgPSBGYWxzZQorICAgIGltcG9ydCBnbG9iCisgICAgZm9yIGZ1bGxwYXRoIGluIGdsb2IuZ2xvYihmaWxlc3BlYyk6CisgICAgICAgIG1hdGNoID0gRmFsc2UKKyAgICAgICAgaWYgdGFza2hhc2hsaXN0OgorICAgICAgICAgICAgZm9yIHRhc2toYXNoIGluIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmdWxscGF0aC5lbmRzd2l0aCgnLiVzJyAlIHRhc2toYXNoKToKKyAgICAgICAgICAgICAgICAgICAgaGFzaGZpbGVzW3Rhc2toYXNoXSA9IGZ1bGxwYXRoCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IGxlbih0YXNraGFzaGxpc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRhbGwgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbGVkYXRlc1tmdWxscGF0aF0gPSBvcy5zdGF0KGZ1bGxwYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgIGlmIG5vdCB0YXNraGFzaGxpc3Qgb3IgKGxlbihmaWxlZGF0ZXMpIDwgMiBhbmQgbm90IGZvdW5kYWxsKToKKyAgICAgICAgIyBUaGF0IGRpZG4ndCB3b3JrLCBsb29rIGluIHNzdGF0ZS1jYWNoZQorICAgICAgICBoYXNoZXMgPSB0YXNraGFzaGxpc3Qgb3IgWycqJ10KKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGZvciBoYXNodmFsIGluIGhhc2hlczoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsICcqJykKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdUQVJHRVRfT1MnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsIHBuKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFYnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUicsICcqJykKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX1RBU0tIQVNIJywgaGFzaHZhbCkKKyAgICAgICAgICAgIHN3c3BlYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9TV1NQRUMnLCBUcnVlKQorICAgICAgICAgICAgaWYgdGFza25hbWUgaW4gWydkb19mZXRjaCcsICdkb191bnBhY2snLCAnZG9fcGF0Y2gnLCAnZG9fcG9wdWxhdGVfbGljJywgJ2RvX3ByZWNvbmZpZ3VyZSddIGFuZCBzd3NwZWM6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1NUQVRFX1BLR1NQRUMnLCAnJHtTU1RBVEVfU1dTUEVDfScpCisgICAgICAgICAgICBlbGlmIHBuLmVuZHN3aXRoKCctbmF0aXZlJykgb3IgIi1jcm9zcy0iIGluIHBuIG9yICItY3Jvc3NzZGstIiBpbiBwbjoKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTU1RBVEVfRVhUUkFQQVRIJywgIiR7TkFUSVZFTFNCU1RSSU5HfS8iKQorICAgICAgICAgICAgc3N0YXRlbmFtZSA9IHRhc2tuYW1lWzM6XQorICAgICAgICAgICAgZmlsZXNwZWMgPSAnJXNfJXMuKi5zaWdpbmZvJyAlIChsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSksIHNzdGF0ZW5hbWUpCisKKyAgICAgICAgICAgIGlmIGhhc2h2YWwgIT0gJyonOgorICAgICAgICAgICAgICAgIHNzdGF0ZWRpciA9ICIlcy8lcyIgJSAoZC5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKSwgaGFzaHZhbFs6Ml0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNzdGF0ZWRpciA9IGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3N0YXRlZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZnVsbHBhdGgsIGZpbGVzcGVjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoZmlsZXNbaGFzaHZhbF0gPSBmdWxscGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVkYXRlc1tmdWxscGF0aF0gPSBvcy5zdGF0KGZ1bGxwYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgcmV0dXJuIGhhc2hmaWxlcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmaWxlZGF0ZXMKKworYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyA9IGZpbmRfc2lnaW5mbworCisKK2RlZiBzc3RhdGVfZ2V0X21hbmlmZXN0X2ZpbGVuYW1lKHRhc2ssIGQpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgc3N0YXRlIG1hbmlmZXN0IGZpbGUgcGF0aCBmb3IgYSBwYXJ0aWN1bGFyIHRhc2suCisgICAgQWxzbyByZXR1cm5zIHRoZSBkYXRhc3RvcmUgdGhhdCBjYW4gYmUgdXNlZCB0byBxdWVyeSByZWxhdGVkIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBkMiA9IGQuY3JlYXRlQ29weSgpCisgICAgZXh0cmFpbmYgPSBkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3RhbXAtZXh0cmEtaW5mbycsIFRydWUpCisgICAgaWYgZXh0cmFpbmY6CisgICAgICAgIGQyLnNldFZhcigiU1NUQVRFX01BTk1BQ0giLCBleHRyYWluZikKKyAgICByZXR1cm4gKGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFORklMRVBSRUZJWH0uJXMiICUgdGFzayksIGQyKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdGVybWluYWwucHkgYi9tZXRhL2xpYi9vZS90ZXJtaW5hbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmE4OTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdGVybWluYWwucHkKQEAgLTAsMCArMSwyNjMgQEAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb2UuY2xhc3N1dGlscworaW1wb3J0IHNobGV4Citmcm9tIGJiLnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBFeGVjdXRpb25FcnJvcgorZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLk9FLlRlcm1pbmFsJykKKworCitjbGFzcyBVbnN1cHBvcnRlZFRlcm1pbmFsKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBOb1N1cHBvcnRlZFRlcm1pbmFscyhFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBSZWdpc3RyeShvZS5jbGFzc3V0aWxzLkNsYXNzUmVnaXN0cnkpOgorICAgIGNvbW1hbmQgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICBzdXBlcihSZWdpc3RyeSwgY2xzKS5fX2luaXRfXyhuYW1lLmxvd2VyKCksIGJhc2VzLCBhdHRycykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbXBsZW1lbnRlZChjbHMpOgorICAgICAgICByZXR1cm4gYm9vbChjbHMuY29tbWFuZCkKKworCitjbGFzcyBUZXJtaW5hbChQb3Blbik6CisgICAgX19tZXRhY2xhc3NfXyA9IFJlZ2lzdHJ5CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgZm10X3NoX2NtZCA9IHNlbGYuZm9ybWF0X2NvbW1hbmQoc2hfY21kLCB0aXRsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgUG9wZW4uX19pbml0X18oc2VsZiwgZm10X3NoX2NtZCwgZW52PWVudikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoc2VsZi5uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGZvcm1hdF9jb21tYW5kKHNlbGYsIHNoX2NtZCwgdGl0bGUpOgorICAgICAgICBmbXQgPSB7J3RpdGxlJzogdGl0bGUgb3IgJ1Rlcm1pbmFsJywgJ2NvbW1hbmQnOiBzaF9jbWR9CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzaGxleC5zcGxpdChzZWxmLmNvbW1hbmQuZm9ybWF0KCoqZm10KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbZWxlbWVudC5mb3JtYXQoKipmbXQpIGZvciBlbGVtZW50IGluIHNlbGYuY29tbWFuZF0KKworY2xhc3MgWFRlcm1pbmFsKFRlcm1pbmFsKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoJ0RJU1BMQVknKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoc2VsZi5uYW1lKQorCitjbGFzcyBHbm9tZShYVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnZ25vbWUtdGVybWluYWwgLXQgInt0aXRsZX0iIC0tZGlzYWJsZS1mYWN0b3J5IC14IHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICAjIFJlY2VudCB2ZXJzaW9ucyBvZiBnbm9tZS10ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IG5vbi1VVEY4IGNoYXJzZXQ6CisgICAgICAgICMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjEyNzsgYXMgYSB3b3JrYXJvdW5kLAorICAgICAgICAjIGNsZWFyaW5nIHRoZSBMQ19BTEwgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gaXQgdXNlcyB0aGUgbG9jYWxlLgorICAgICAgICAjIE9uY2UgZml4ZWQgb24gdGhlIGdub21lLXRlcm1pbmFsIHByb2plY3QsIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgICAgIGlmIG9zLmdldGVudignTENfQUxMJyk6IG9zLnB1dGVudignTENfQUxMJywnJykKKworICAgICAgICAjIENoZWNrIHZlcnNpb24KKyAgICAgICAgdmVybnVtID0gY2hlY2tfdGVybWluYWxfdmVyc2lvbigiZ25vbWUtdGVybWluYWwiKQorICAgICAgICBpZiB2ZXJudW0gYW5kIExvb3NlVmVyc2lvbih2ZXJudW0pID49ICczLjEwJzoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnR25vbWUtVGVybWluYWwgMy4xMCBvciBsYXRlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGlzYWJsZS1mYWN0b3J5JykKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICdnbm9tZS10ZXJtaW5hbCAtdCAie3RpdGxlfSIgLXgge2NvbW1hbmR9JworICAgICAgICBYVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBNYXRlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdtYXRlLXRlcm1pbmFsIC10ICJ7dGl0bGV9IiAteCB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIFhmY2UoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3hmY2U0LXRlcm1pbmFsIC1UICJ7dGl0bGV9IiAtZSAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIKKworY2xhc3MgVGVybWlub2xvZ3koWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3Rlcm1pbm9sb2d5IC1UPSJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIEtvbnNvbGUoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ2tvbnNvbGUgLS1ub2ZvcmsgLXAgdGFidGl0bGU9Int0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICAjIENoZWNrIHZlcnNpb24KKyAgICAgICAgdmVybnVtID0gY2hlY2tfdGVybWluYWxfdmVyc2lvbigia29uc29sZSIpCisgICAgICAgIGlmIHZlcm51bSBhbmQgTG9vc2VWZXJzaW9uKHZlcm51bSkgPCAnMi4wLjAnOgorICAgICAgICAgICAgIyBLb25zb2xlIGZyb20gS0RFIDMueAorICAgICAgICAgICAgc2VsZi5jb21tYW5kID0gJ2tvbnNvbGUgLVQgInt0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICAgICAgWFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgWFRlcm0oWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3h0ZXJtIC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAxCisKK2NsYXNzIFJ4dnQoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3J4dnQgLVQgInt0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDEKKworY2xhc3MgU2NyZWVuKFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3NjcmVlbiAtRCAtbSAtdCAie3RpdGxlfSIgLVMgZGV2c2hlbGwge2NvbW1hbmR9JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIHNfaWQgPSAiZGV2c2hlbGxfJWkiICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgc2VsZi5jb21tYW5kID0gInNjcmVlbiAtRCAtbSAtdCBcInt0aXRsZX1cIiAtUyAlcyB7Y29tbWFuZH0iICUgc19pZAorICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgIG1zZyA9ICdTY3JlZW4gc3RhcnRlZC4gUGxlYXNlIGNvbm5lY3QgaW4gYW5vdGhlciB0ZXJtaW5hbCB3aXRoICcgXAorICAgICAgICAgICAgJyJzY3JlZW4gLXIgJXMiJyAlIHNfaWQKKyAgICAgICAgaWYgKGQpOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Mb2dFeGVjVFRZKG1zZywgInNjcmVlbiAtciAlcyIgJSBzX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSwgMTApLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorCitjbGFzcyBUbXV4UnVubmluZyhUZXJtaW5hbCk6CisgICAgIiIiT3BlbiBhIG5ldyBwYW5lIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgdG11eCB3aW5kb3ciIiIKKyAgICBuYW1lID0gJ3RtdXgtcnVubmluZycKKyAgICBjb21tYW5kID0gJ3RtdXggc3BsaXQtd2luZG93ICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMi43NQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IG9zLmdldGVudignVE1VWCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgcnVubmluZycpCisKKyAgICAgICAgaWYgbm90IGNoZWNrX3RtdXhfcGFuZV9zaXplKCd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IHBhbmUgdG9vIHNtYWxsJykKKworICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisKK2NsYXNzIFRtdXhOZXdXaW5kb3coVGVybWluYWwpOgorICAgICIiIk9wZW4gYSBuZXcgd2luZG93IGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgdG11eCBzZXNzaW9uIiIiCisgICAgbmFtZSA9ICd0bXV4LW5ldy13aW5kb3cnCisgICAgY29tbWFuZCA9ICd0bXV4IG5ldy13aW5kb3cgLW4gInt0aXRsZX0iICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMi43MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IG9zLmdldGVudignVE1VWCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgcnVubmluZycpCisKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBUbXV4KFRlcm1pbmFsKToKKyAgICAiIiJTdGFydCBhIG5ldyB0bXV4IHNlc3Npb24gYW5kIHdpbmRvdyIiIgorICAgIGNvbW1hbmQgPSAndG11eCBuZXcgLWQgLXMgZGV2c2hlbGwgLW4gZGV2c2hlbGwgIntjb21tYW5kfSInCisgICAgcHJpb3JpdHkgPSAwLjc1CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgaWYgbm90IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAndG11eCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgaW5zdGFsbGVkJykKKworICAgICAgICAjIFRPRE86IGNvbnNpZGVyIHVzaW5nIGEgJ2RldnNoZWxsJyBzZXNzaW9uIHNoYXJlZCBhbW9uZ3N0IGFsbAorICAgICAgICAjIGRldnNoZWxscywgaWYgaXQncyBhbHJlYWR5IHRoZXJlLCBhZGQgYSBuZXcgd2luZG93IHRvIGl0LgorICAgICAgICB3aW5kb3dfbmFtZSA9ICdkZXZzaGVsbC0laScgJSBvcy5nZXRwaWQoKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9ICd0bXV4IG5ldyAtZCAtcyB7MH0gLW4gezB9ICJ7e2NvbW1hbmR9fSInLmZvcm1hdCh3aW5kb3dfbmFtZSkKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCisgICAgICAgIGF0dGFjaF9jbWQgPSAndG11eCBhdHQgLXQgezB9Jy5mb3JtYXQod2luZG93X25hbWUpCisgICAgICAgIG1zZyA9ICdUbXV4IHN0YXJ0ZWQuIFBsZWFzZSBjb25uZWN0IGluIGFub3RoZXIgdGVybWluYWwgd2l0aCBgdG11eCBhdHQgLXQgezB9YCcuZm9ybWF0KHdpbmRvd19uYW1lKQorICAgICAgICBpZiBkOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Mb2dFeGVjVFRZKG1zZywgYXR0YWNoX2NtZCwgMC41LCAxMCksIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIud2Fybihtc2cpCisKK2NsYXNzIEN1c3RvbShUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdmYWxzZScgIyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIKKyAgICBwcmlvcml0eSA9IDMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBzZWxmLmNvbW1hbmQgPSBkIGFuZCBkLmdldFZhcignT0VfVEVSTUlOQUxfQ1VTVE9NQ01EJywgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5jb21tYW5kOgorICAgICAgICAgICAgaWYgbm90ICd7Y29tbWFuZH0nIGluIHNlbGYuY29tbWFuZDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQgKz0gJyB7Y29tbWFuZH0nCisgICAgICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgICAgICBsb2dnZXIud2FybignQ3VzdG9tIHRlcm1pbmFsIHdhcyBzdGFydGVkLicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ05vIGN1c3RvbSB0ZXJtaW5hbCAoT0VfVEVSTUlOQUxfQ1VTVE9NQ01EKSBzZXQnKQorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgnT0VfVEVSTUlOQUxfQ1VTVE9NQ01EIG5vdCBzZXQnKQorCisKK2RlZiBwcmlvcml0aXplZCgpOgorICAgIHJldHVybiBSZWdpc3RyeS5wcmlvcml0aXplZCgpCisKK2RlZiBzcGF3bl9wcmVmZXJyZWQoc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAiIiJTcGF3biB0aGUgZmlyc3Qgc3VwcG9ydGVkIHRlcm1pbmFsLCBieSBwcmlvcml0eSIiIgorICAgIGZvciB0ZXJtaW5hbCBpbiBwcmlvcml0aXplZCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGF3bih0ZXJtaW5hbC5uYW1lLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgICAgICBicmVhaworICAgICAgICBleGNlcHQgVW5zdXBwb3J0ZWRUZXJtaW5hbDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgTm9TdXBwb3J0ZWRUZXJtaW5hbHMoKQorCitkZWYgc3Bhd24obmFtZSwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAiIiJTcGF3biB0aGUgc3BlY2lmaWVkIHRlcm1pbmFsLCBieSBuYW1lIiIiCisgICAgbG9nZ2VyLmRlYnVnKDEsICdBdHRlbXB0aW5nIHRvIHNwYXduIHRlcm1pbmFsICIlcyInLCBuYW1lKQorICAgIHRyeToKKyAgICAgICAgdGVybWluYWwgPSBSZWdpc3RyeS5yZWdpc3RyeVtuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbChuYW1lKQorCisgICAgcGlwZSA9IHRlcm1pbmFsKHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKyAgICBvdXRwdXQgPSBwaXBlLmNvbW11bmljYXRlKClbMF0KKyAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmFpc2UgRXhlY3V0aW9uRXJyb3Ioc2hfY21kLCBwaXBlLnJldHVybmNvZGUsIG91dHB1dCkKKworZGVmIGNoZWNrX3RtdXhfcGFuZV9zaXplKHRtdXgpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorICAgIHRyeToKKyAgICAgICAgcCA9IHN1Yi5Qb3BlbignJXMgbGlzdC1wYW5lcyAtRiAiI3s/cGFuZV9hY3RpdmUsI3twYW5lX2hlaWdodH0sfSInICUgdG11eCwKKyAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNpemUgPSBpbnQob3V0LnN0cmlwKCkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorICAgIGlmIHNpemUvMiA+PSAxOToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24odGVybWluYWxOYW1lKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICB0cnk6CisgICAgICAgIHAgPSBzdWIuUG9wZW4oWydzaCcsICctYycsICclcyAtLXZlcnNpb24nICUgdGVybWluYWxOYW1lXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICB2ZXJfaW5mbyA9IG91dC5yc3RyaXAoKS5zcGxpdCgnXG4nKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKyAgICB2ZXJudW0gPSBOb25lCisgICAgZm9yIHZlciBpbiB2ZXJfaW5mbzoKKyAgICAgICAgaWYgdmVyLnN0YXJ0c3dpdGgoJ0tvbnNvbGUnKToKKyAgICAgICAgICAgIHZlcm51bSA9IHZlci5zcGxpdCgnICcpWy0xXQorICAgICAgICBpZiB2ZXIuc3RhcnRzd2l0aCgnR05PTUUgVGVybWluYWwnKToKKyAgICAgICAgICAgIHZlcm51bSA9IHZlci5zcGxpdCgnICcpWy0xXQorICAgIHJldHVybiB2ZXJudW0KKworZGVmIGRpc3Ryb19uYW1lKCk6CisgICAgdHJ5OgorICAgICAgICBwID0gUG9wZW4oWydsc2JfcmVsZWFzZScsICctaSddKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBkaXN0cm8gPSBvdXQuc3BsaXQoJzonKVsxXS5zdHJpcCgpLmxvd2VyKCkKKyAgICBleGNlcHQ6CisgICAgICAgIGRpc3RybyA9ICJ1bmtub3duIgorICAgIHJldHVybiBkaXN0cm8KZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2UvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4ODg4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfbGljZW5zZS5weQpAQCAtMCwwICsxLDY4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvZS5saWNlbnNlCisKK2NsYXNzIFNlZW5WaXNpdG9yKG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zZWVuID0gW10KKyAgICAgICAgb2UubGljZW5zZS5MaWNlbnNlVmlzaXRvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIHZpc2l0X1N0cihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5zZWVuLmFwcGVuZChub2RlLnMpCisKK2NsYXNzIFRlc3RTaW5nbGVMaWNlbnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsaWNlbnNlcyA9IFsKKyAgICAgICAgIkdQTHYyIiwKKyAgICAgICAgIkxHUEwtMi4wIiwKKyAgICAgICAgIkFydGlzdGljIiwKKyAgICAgICAgIk1JVCIsCisgICAgICAgICJHUEx2MysiLAorICAgICAgICAiRk9PX0JBUiIsCisgICAgXQorICAgIGludmFsaWRfbGljZW5zZXMgPSBbIkdQTC9CU0QiXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwYXJzZShsaWNlbnNlc3RyKToKKyAgICAgICAgdmlzaXRvciA9IFNlZW5WaXNpdG9yKCkKKyAgICAgICAgdmlzaXRvci52aXNpdF9zdHJpbmcobGljZW5zZXN0cikKKyAgICAgICAgcmV0dXJuIHZpc2l0b3Iuc2VlbgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2xpY2Vuc2VzKHNlbGYpOgorICAgICAgICBmb3IgbGljZW5zZSBpbiBzZWxmLmxpY2Vuc2VzOgorICAgICAgICAgICAgbGljZW5zZXMgPSBzZWxmLnBhcnNlKGxpY2Vuc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaWNlbnNlcywgW2xpY2Vuc2VdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9saWNlbnNlcyhzZWxmKToKKyAgICAgICAgZm9yIGxpY2Vuc2UgaW4gc2VsZi5pbnZhbGlkX2xpY2Vuc2VzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhvZS5saWNlbnNlLkludmFsaWRMaWNlbnNlKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGxpY2Vuc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5saWNlbnNlLCBsaWNlbnNlKQorCitjbGFzcyBUZXN0U2ltcGxlQ29tYmluYXRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0ZXN0cyA9IHsKKyAgICAgICAgIkZPTyZCQVIiOiBbIkZPTyIsICJCQVIiXSwKKyAgICAgICAgIkJBWiAmIE1PTyI6IFsiQkFaIiwgIk1PTyJdLAorICAgICAgICAiQUxQSEF8QkVUQSI6IFsiQUxQSEEiXSwKKyAgICAgICAgIkJBWiZNT098Rk9PIjogWyJGT08iXSwKKyAgICAgICAgIkZPTyZCQVJ8QkFaIjogWyJGT08iLCAiQkFSIl0sCisgICAgfQorICAgIHByZWZlcnJlZCA9IFsiQUxQSEEiLCAiRk9PIiwgIkJBUiJdCisKKyAgICBkZWYgdGVzdF90ZXN0cyhzZWxmKToKKyAgICAgICAgZGVmIGNob29zZShhLCBiKToKKyAgICAgICAgICAgIGlmIGFsbChsaWMgaW4gc2VsZi5wcmVmZXJyZWQgZm9yIGxpYyBpbiBiKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYQorCisgICAgICAgIGZvciBsaWNlbnNlLCBleHBlY3RlZCBpbiBzZWxmLnRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBsaWNlbnNlcyA9IG9lLmxpY2Vuc2UuZmxhdHRlbmVkX2xpY2Vuc2VzKGxpY2Vuc2UsIGNob29zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpY2Vuc2VzLCBleHBlY3RlZCkKKworY2xhc3MgVGVzdENvbXBsZXhDb21iaW5hdGlvbnMoVGVzdFNpbXBsZUNvbWJpbmF0aW9ucyk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICJGT08gJiAoQkFSIHwgQkFaKSZNT08iOiBbIkZPTyIsICJCQVIiLCAiTU9PIl0sCisgICAgICAgICIoQUxQSEF8KEJFVEEmVEhFVEEpfE9NRUdBKSZERUxUQSI6IFsiT01FR0EiLCAiREVMVEEiXSwKKyAgICAgICAgIigoQUxQSEF8QkVUQSkmRk9PKXxCQVoiOiBbIkJFVEEiLCAiRk9PIl0sCisgICAgICAgICIoR1BMLTIuMHxQcm9wcmlldGFyeSkmQlNELTQtY2xhdXNlJk1JVCI6IFsiR1BMLTIuMCIsICJCU0QtNC1jbGF1c2UiLCAiTUlUIl0sCisgICAgfQorICAgIHByZWZlcnJlZCA9IFsiQkFSIiwgIk9NRUdBIiwgIkJFVEEiLCAiR1BMLTIuMCJdCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0MWNlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfcGF0aC5weQpAQCAtMCwwICsxLDg5IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvZSwgb2UucGF0aAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHNodXRpbAorCitjbGFzcyBUZXN0UmVhbFBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIERJUlMgPSBbICJhIiwgImIiLCAiZXRjIiwgInNiaW4iLCAidXNyIiwgInVzci9iaW4iLCAidXNyL2JpblgiLCAidXNyL3NiaW4iLCAidXNyL2luY2x1ZGUiLCAidXNyL2luY2x1ZGUvZ2RibSIgXQorICAgIEZJTEVTID0gWyAiZXRjL3Bhc3N3ZCIsICJiL2ZpbGUiIF0KKyAgICBMSU5LUyA9IFsKKyAgICAgICAgKCAiYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiApLAorICAgICAgICAoICJiaW5YIiwgICAgICAgICAgICAidXNyL2JpblgiLCAgICAgICAgICAgICAiL3Vzci9iaW5YIiApLAorICAgICAgICAoICJjIiwgICAgICAgICAgICAgICAiYnJva2VuIiwgICAgICAgICAgICAgICAiL2Jyb2tlbiIgKSwKKyAgICAgICAgKCAiZXRjL3Bhc3N3ZC0xIiwgICAgInBhc3N3ZCIsICAgICAgICAgICAgICAgIi9ldGMvcGFzc3dkIiApLAorICAgICAgICAoICJldGMvcGFzc3dkLTIiLCAgICAicGFzc3dkLTEiLCAgICAgICAgICAgICAiL2V0Yy9wYXNzd2QiICksCisgICAgICAgICggImV0Yy9wYXNzd2QtMyIsICAgICIvZXRjL3Bhc3N3ZC0xIiwgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKKyAgICAgICAgKCAiZXRjL3NoYWRvdy0xIiwgICAgIi9ldGMvc2hhZG93IiwgICAgICAgICAgIi9ldGMvc2hhZG93IiApLAorICAgICAgICAoICJldGMvc2hhZG93LTIiLCAgICAiL2V0Yy9zaGFkb3ctMSIsICAgICAgICAiL2V0Yy9zaGFkb3ciICksCisgICAgICAgICggInByb2ctQSIsICAgICAgICAgICJiaW4vcHJvZy1BIiwgICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUEiICksCisgICAgICAgICggInByb2ctQiIsICAgICAgICAgICIvYmluL3Byb2ctQiIsICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUIiICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1DIiwgICIuLi8uLi9zYmluL3Byb2ctQyIsICAgICIvc2Jpbi9wcm9nLUMiICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1EIiwgICIvc2Jpbi9wcm9nLUQiLCAgICAgICAgICIvc2Jpbi9wcm9nLUQiICksCisgICAgICAgICggInVzci9iaW5YL3Byb2ctRSIsICIuLi9zYmluL3Byb2ctRSIsICAgICAgIE5vbmUgKSwKKyAgICAgICAgKCAidXNyL2Jpbi9wcm9nLUYiLCAgIi4uLy4uLy4uL3NiaW4vcHJvZy1GIiwgIi9zYmluL3Byb2ctRiIgKSwKKyAgICAgICAgKCAibG9vcCIsICAgICAgICAgICAgImEvbG9vcCIsICAgICAgICAgICAgICAgTm9uZSApLAorICAgICAgICAoICJhL2xvb3AiLCAgICAgICAgICAiLi4vbG9vcCIsICAgICAgICAgICAgICBOb25lICksCisgICAgICAgICggImIvdGVzdCIsICAgICAgICAgICJmaWxlL2ZvbyIsICAgICAgICAgICAgICIvYi9maWxlL2ZvbyIgKSwKKyAgICBdCisKKyAgICBMSU5LU19QSFlTID0gWworICAgICAgICAoICIuLyIsICAgICAgICAgICIvIiwgICAgICAgICAgICAgICAgIiIgKSwKKyAgICAgICAgKCAiYmluWC9wcm9nLUUiLCAiL3Vzci9zYmluL3Byb2ctRSIsICIvc2Jpbi9wcm9nLUUiICksCisgICAgXQorCisgICAgRVhDRVBUSU9OUyA9IFsKKyAgICAgICAgKCAibG9vcCIsICAgZXJybm8uRUxPT1AgKSwKKyAgICAgICAgKCAiYi90ZXN0IiwgZXJybm8uRU5PRU5UICksCisgICAgXQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICNvcy5zeXN0ZW0oInRyZWUgLUYgJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudG1wZGlyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXggPSAib2UtdGVzdF9wYXRoIikKKyAgICAgICAgc2VsZi5yb290ID0gb3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiUiIpCisKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiX3JlYWwiKSkKKyAgICAgICAgb3Muc3ltbGluaygiX3JlYWwiLCBzZWxmLnJvb3QpCisKKyAgICAgICAgZm9yIGQgaW4gc2VsZi5ESVJTOgorICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZCkpCisgICAgICAgIGZvciBmIGluIHNlbGYuRklMRVM6CisgICAgICAgICAgICBmaWxlKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGYpLCAidyIpCisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1M6CisgICAgICAgICAgICBvcy5zeW1saW5rKGxbMV0sIG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGxbMF0pKQorCisgICAgZGVmIF9fcmVhbHBhdGgoc2VsZiwgZmlsZSwgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBUcnVlKToKKyAgICAgICAgcmV0dXJuIG9lLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZmlsZSksIHNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBhc3N1bWVfZGlyKQorCisgICAgZGVmIHRlc3Rfbm9ybShzZWxmKToKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LUzoKKyAgICAgICAgICAgIGlmIGxbMl0gPT0gTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0YXJnZXRfcCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBUcnVlKQorICAgICAgICAgICAgdGFyZ2V0X2wgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgRmFsc2UpCisKKyAgICAgICAgICAgIGlmIGxbMl0gIT0gRmFsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRfcCwgdGFyZ2V0X2wpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzJdLCB0YXJnZXRfcFtsZW4oc2VsZi5yb290KTpdKQorCisgICAgZGVmIHRlc3RfcGh5cyhzZWxmKToKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LU19QSFlTOgorICAgICAgICAgICAgdGFyZ2V0X3AgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgVHJ1ZSkKKyAgICAgICAgICAgIHRhcmdldF9sID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIEZhbHNlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMV0sIHRhcmdldF9wW2xlbihzZWxmLnJvb3QpOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMl0sIHRhcmdldF9sW2xlbihzZWxmLnJvb3QpOl0pCisKKyAgICBkZWYgdGVzdF9sb29wKHNlbGYpOgorICAgICAgICBmb3IgZSBpbiBzZWxmLkVYQ0VQVElPTlM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChPU0Vycm9yLCByJ1xbRXJybm8gJXVcXScgJSBlWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3JlYWxwYXRoLCBlWzBdLCBGYWxzZSwgRmFsc2UpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3R5cGVzLnB5IGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF90eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjdjYzMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF90eXBlcy5weQpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2UubWFrZXR5cGUgaW1wb3J0IGNyZWF0ZSwgZmFjdG9yeQorCitjbGFzcyBUZXN0VHlwZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRJc0luc3RhbmNlKHNlbGYsIG9iaiwgY2xzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iaiwgY2xzKSkKKworICAgIGRlZiBhc3NlcnRJc05vdChzZWxmLCBvYmosIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0RmFsc2Uob2JqIGlzIG90aGVyKQorCisgICAgZGVmIGFzc2VydEZhY3RvcnlDcmVhdGVkKHNlbGYsIHZhbHVlLCB0eXBlLCAqKmZsYWdzKToKKyAgICAgICAgY2xzID0gZmFjdG9yeSh0eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGNscywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNyZWF0ZSh2YWx1ZSwgdHlwZSwgKipmbGFncyksIGNscykKKworY2xhc3MgVGVzdEJvb2xlYW5UeXBlKFRlc3RUeXBlcyk6CisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnJywgJ2Jvb2xlYW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjcmVhdGUsICdmb28nLCAnYm9vbGVhbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3JlYXRlLCBvYmplY3QoKSwgJ2Jvb2xlYW4nKQorCisgICAgZGVmIHRlc3RfdHJ1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgneScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3llcycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJzEnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0JywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1ZScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ1RSVUUnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0cnVFJywgJ2Jvb2xlYW4nKSkKKworICAgIGRlZiB0ZXN0X2ZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbicsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdubycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCcwJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2YnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFsc2UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnRkFMU0UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFMc2UnLCAnYm9vbGVhbicpKQorCisgICAgZGVmIHRlc3RfYm9vbF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCd5JywgJ2Jvb2xlYW4nKSwgRmFsc2UpCisKK2NsYXNzIFRlc3RMaXN0KFRlc3RUeXBlcyk6CisgICAgZGVmIGFzc2VydExpc3RFcXVhbChzZWxmLCB2YWx1ZSwgdmFsaWQsIHNlcD1Ob25lKToKKyAgICAgICAgb2JqID0gY3JlYXRlKHZhbHVlLCAnbGlzdCcsIHNlcGFyYXRvcj1zZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB2YWxpZCkKKyAgICAgICAgaWYgc2VwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc2VwYXJhdG9yLCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG9iaiksIG9iai5zZXBhcmF0b3Iuam9pbihvYmopKQorCisgICAgZGVmIHRlc3RfbGlzdF9ub3NlcChzZWxmKToKKyAgICAgICAgdGVzdGxpc3QgPSBbJ2FscGhhJywgJ2JldGEnLCAndGhldGEnXQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgYmV0YSB0aGV0YScsIHRlc3RsaXN0KQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgIGJldGFcdHRoZXRhJywgdGVzdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdhbHBoYScsIFsnYWxwaGEnXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfdXNlcnNlcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2ZvbzpiYXInLCBbJ2ZvbycsICdiYXInXSwgJzonKQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnZm9vOmJhcjpiYXonLCBbJ2ZvbycsICdiYXInLCAnYmF6J10sICc6JykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdXRpbHMucHkgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWFjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3V0aWxzLnB5CkBAIC0wLDAgKzEsNTEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZS51dGlscyBpbXBvcnQgcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0KKworY2xhc3MgVGVzdFBhY2thZ2VzRmlsdGVyT3V0U3lzdGVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHRoYXQgb2UudXRpbHMucGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0gd29ya3MuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgYmIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ2Fubm90IGltcG9ydCBiYiIpCisKKyAgICAgICAgZCA9IGJiLmRhdGFfc21hcnQuRGF0YVNtYXJ0KCkKKyAgICAgICAgZC5zZXRWYXIoIlBOIiwgImZvbyIpCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZG9jIGZvby1kZXYiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kb2MgZm9vLWRhdGEgZm9vLWRldiIpCisgICAgICAgIHBrZ3MgPSBwYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ3MsIFsiZm9vLWRhdGEiXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1sb2NhbGUtZW4tZ2IiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kYXRhIGZvby1sb2NhbGUtZW4tZ2IiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbImZvby1kYXRhIl0pCisKKworY2xhc3MgVGVzdFRyaW1WZXJzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF92ZXJzaW9uX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKE5vbmUsIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbigoMSwgMiwgMyksIDIpCisKKyAgICBkZWYgdGVzdF9udW1fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oIjEuMi4zIiwgLTEpCisKKyAgICBkZWYgdGVzdF92YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMSksICIxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMiksICIxLjIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyaW1fdmVyc2lvbigiMS4yLjMiLCAzKSwgIjEuMi4zIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgNCksICIxLjIuMyIpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90eXBlcy5weSBiL21ldGEvbGliL29lL3R5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDdjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS90eXBlcy5weQpAQCAtMCwwICsxLDE1MyBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBvcworCisKK2NsYXNzIE9FTGlzdChsaXN0KToKKyAgICAiIiJPcGVuRW1iZWRkZWQgJ2xpc3QnIHR5cGUKKworICAgIEFjdHMgYXMgYW4gb3JkaW5hcnkgbGlzdCwgYnV0IGlzIGNvbnN0cnVjdGVkIGZyb20gYSBzdHJpbmcgdmFsdWUgYW5kIGEKKyAgICBzZXBhcmF0b3IgKG9wdGlvbmFsKSwgYW5kIHJlLWpvaW5zIGl0c2VsZiB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZyB3aXRoCisgICAgc3RyKCkuICBTZXQgdGhlIHZhcmlhYmxlIHR5cGUgZmxhZyB0byAnbGlzdCcgdG8gdXNlIHRoaXMgdHlwZSwgYW5kIHRoZQorICAgICdzZXBhcmF0b3InIGZsYWcgbWF5IGJlIHNwZWNpZmllZCAoZGVmYXVsdGluZyB0byB3aGl0ZXNwYWNlKS4iIiIKKworICAgIG5hbWUgPSAibGlzdCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgc2VwYXJhdG9yID0gTm9uZSk6CisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmLCB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIGlmIHNlcGFyYXRvciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5zZXBhcmF0b3IgPSAiICIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VwYXJhdG9yID0gc2VwYXJhdG9yCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VwYXJhdG9yLmpvaW4oc2VsZikKKworZGVmIGNob2ljZSh2YWx1ZSwgY2hvaWNlcyk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdjaG9pY2UnIHR5cGUKKworICAgIEFjdHMgYXMgYSBtdWx0aXBsZSBjaG9pY2UgZm9yIHRoZSB1c2VyLiAgVG8gdXNlIHRoaXMsIHNldCB0aGUgdmFyaWFibGUKKyAgICB0eXBlIGZsYWcgdG8gJ2Nob2ljZScsIGFuZCBzZXQgdGhlICdjaG9pY2VzJyBmbGFnIHRvIGEgc3BhY2Ugc2VwYXJhdGVkCisgICAgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNob2ljZSBhY2NlcHRzIGEgc3RyaW5nLCBub3QgJyVzJyIgJSB0eXBlKHZhbHVlKSkKKworICAgIHZhbHVlID0gdmFsdWUubG93ZXIoKQorICAgIGNob2ljZXMgPSBjaG9pY2VzLmxvd2VyKCkKKyAgICBpZiB2YWx1ZSBub3QgaW4gY2hvaWNlcy5zcGxpdCgpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGNob2ljZSAnJXMnLiAgVmFsaWQgY2hvaWNlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGNob2ljZXMpKQorICAgIHJldHVybiB2YWx1ZQorCitjbGFzcyBOb01hdGNoKG9iamVjdCk6CisgICAgIiIiU3R1YiBweXRob24gcmVnZXggcGF0dGVybiBvYmplY3Qgd2hpY2ggbmV2ZXIgbWF0Y2hlcyBhbnl0aGluZyIiIgorICAgIGRlZiBmaW5kYWxsKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZmluZGl0ZXIoc2VsZiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBtYXRjaChzZWxmLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZWFyY2goc2VsZiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzcGxpdChzZWxmLCBzdHJpbmcsIG1heHNwbGl0PTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGNvdW50PTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN1Ym4ocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworTm9NYXRjaCA9IE5vTWF0Y2goKQorCitkZWYgcmVnZXgodmFsdWUsIHJlZ2V4ZmxhZ3M9Tm9uZSk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdyZWdleCcgdHlwZQorCisgICAgQWN0cyBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgcmV0dXJuaW5nIHRoZSBwcmUtY29tcGlsZWQgcmVndWxhcgorICAgIGV4cHJlc3Npb24gcGF0dGVybiBvYmplY3QuICBUbyB1c2UgdGhpcyB0eXBlLCBzZXQgdGhlIHZhcmlhYmxlIHR5cGUgZmxhZworICAgIHRvICdyZWdleCcsIGFuZCBvcHRpb25hbGx5LCBzZXQgdGhlICdyZWdleGZsYWdzJyB0eXBlIHRvIGEgc3BhY2Ugc2VwYXJhdGVkCisgICAgbGlzdCBvZiB0aGUgZmxhZ3MgdG8gY29udHJvbCB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIChlLmcuCisgICAgRk9PW3JlZ2V4ZmxhZ3NdICs9ICdpZ25vcmVjYXNlJykuICBTZWUgdGhlIHB5dGhvbiBkb2N1bWVudGF0aW9uIG9uIHRoZQorICAgICdyZScgbW9kdWxlIGZvciBhIGxpc3Qgb2YgdmFsaWQgZmxhZ3MuIiIiCisKKyAgICBmbGFndmFsID0gMAorICAgIGlmIHJlZ2V4ZmxhZ3M6CisgICAgICAgIGZvciBmbGFnIGluIHJlZ2V4ZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIGZsYWcgPSBmbGFnLnVwcGVyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmbGFndmFsIHw9IGdldGF0dHIocmUsIGZsYWcpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCByZWdleCBmbGFnICclcyciICUgZmxhZykKKworICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgIyBMZXQncyBlbnN1cmUgdGhhdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYW4gdW5kZWZpbmVkIG9yIGVtcHR5CisgICAgICAgICMgdmFyaWFibGUgaXMgdG8gbWF0Y2ggbm90aGluZy4gSWYgdGhlIHVzZXIgZXhwbGljaXRseSB3YW50cyB0byBtYXRjaAorICAgICAgICAjIGFueXRoaW5nLCB0aGV5IGNhbiBtYXRjaCAnLionIGluc3RlYWQuCisgICAgICAgIHJldHVybiBOb01hdGNoCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiByZS5jb21waWxlKHZhbHVlLCBmbGFndmFsKQorICAgIGV4Y2VwdCByZS5lcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcmVnZXggdmFsdWUgJyVzJzogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGV4Yy5hcmdzWzBdKSkKKworZGVmIGJvb2xlYW4odmFsdWUpOgorICAgICIiIk9wZW5FbWJlZGRlZCAnYm9vbGVhbicgdHlwZQorCisgICAgVmFsaWQgdmFsdWVzIGZvciB0cnVlOiAneWVzJywgJ3knLCAndHJ1ZScsICd0JywgJzEnCisgICAgVmFsaWQgdmFsdWVzIGZvciBmYWxzZTogJ25vJywgJ24nLCAnZmFsc2UnLCAnZicsICcwJworICAgICIiIgorCisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImJvb2xlYW4gYWNjZXB0cyBhIHN0cmluZywgbm90ICclcyciICUgdHlwZSh2YWx1ZSkpCisKKyAgICB2YWx1ZSA9IHZhbHVlLmxvd2VyKCkKKyAgICBpZiB2YWx1ZSBpbiAoJ3llcycsICd5JywgJ3RydWUnLCAndCcsICcxJyk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiB2YWx1ZSBpbiAoJ25vJywgJ24nLCAnZmFsc2UnLCAnZicsICcwJyk6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgYm9vbGVhbiB2YWx1ZSAnJXMnIiAlIHZhbHVlKQorCitkZWYgaW50ZWdlcih2YWx1ZSwgbnVtYmVyYmFzZT0xMCk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdpbnRlZ2VyJyB0eXBlCisKKyAgICBEZWZhdWx0cyB0byBiYXNlIDEwLCBidXQgdGhpcyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBvcHRpb25hbAorICAgICdudW1iZXJiYXNlJyBmbGFnLiIiIgorCisgICAgcmV0dXJuIGludCh2YWx1ZSwgaW50KG51bWJlcmJhc2UpKQorCitfZmxvYXQgPSBmbG9hdAorZGVmIGZsb2F0KHZhbHVlLCBmcm9taGV4PSdmYWxzZScpOgorICAgICIiIk9wZW5FbWJlZGRlZCBmbG9hdGluZyBwb2ludCB0eXBlCisKKyAgICBUbyB1c2UgdGhpcyB0eXBlLCBzZXQgdGhlIHR5cGUgZmxhZyB0byAnZmxvYXQnLCBhbmQgb3B0aW9uYWxseSBzZXQgdGhlCisgICAgJ2Zyb21oZXgnIGZsYWcgdG8gYSB0cnVlIHZhbHVlIChvYmV5aW5nIHRoZSBzYW1lIHJ1bGVzIGFzIGZvciB0aGUKKyAgICAnYm9vbGVhbicgdHlwZSkgaWYgdGhlIHZhbHVlIGlzIGluIGJhc2UgMTYgcmF0aGVyIHRoYW4gYmFzZSAxMC4iIiIKKworICAgIGlmIGJvb2xlYW4oZnJvbWhleCk6CisgICAgICAgIHJldHVybiBfZmxvYXQuZnJvbWhleCh2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX2Zsb2F0KHZhbHVlKQorCitkZWYgcGF0aCh2YWx1ZSwgcmVsYXRpdmV0bz0nJywgbm9ybWFsaXplPSd0cnVlJywgbXVzdGV4aXN0PSdmYWxzZScpOgorICAgIHZhbHVlID0gb3MucGF0aC5qb2luKHJlbGF0aXZldG8sIHZhbHVlKQorCisgICAgaWYgYm9vbGVhbihub3JtYWxpemUpOgorICAgICAgICB2YWx1ZSA9IG9zLnBhdGgubm9ybXBhdGgodmFsdWUpCisKKyAgICBpZiBib29sZWFuKG11c3RleGlzdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW4odmFsdWUsICdyJykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ7MH06IHsxfSIuZm9ybWF0KHZhbHVlLCBvcy5zdHJlcnJvcihlcnJuby5FTk9FTlQpKSkKKworICAgIHJldHVybiB2YWx1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdXRpbHMucHkgYi9tZXRhL2xpYi9vZS91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWUwODdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdXRpbHMucHkKQEAgLTAsMCArMSwyNzMgQEAKK3RyeToKKyAgICAjIFB5dGhvbiAyCisgICAgaW1wb3J0IGNvbW1hbmRzIGFzIGNtZHN0YXR1cworZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHl0aG9uIDMKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBjbWRzdGF0dXMKKworZGVmIHJlYWRfZmlsZShmaWxlbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbiggZmlsZW5hbWUsICJyIiApCisgICAgZXhjZXB0IElPRXJyb3IgYXMgcmVhc29uOgorICAgICAgICByZXR1cm4gIiIgIyBXQVJOSU5HOiBjYW4ndCByYWlzZSBhbiBlcnJvciBub3cgYmVjYXVzZSBvZiB0aGUgbmV3IFJERVBFTkRTIGhhbmRsaW5nLiBUaGlzIGlzIGEgYml0IHVnbHkuIDpNOgorICAgIGVsc2U6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZGF0YQorICAgIHJldHVybiBOb25lCisKK2RlZiBpZmVsc2UoY29uZGl0aW9uLCBpZnRydWUgPSBUcnVlLCBpZmZhbHNlID0gRmFsc2UpOgorICAgIGlmIGNvbmRpdGlvbjoKKyAgICAgICAgcmV0dXJuIGlmdHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBpZmZhbHNlCisKK2RlZiBjb25kaXRpb25hbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICBpZiBkLmdldFZhcih2YXJpYWJsZSwxKSA9PSBjaGVja3ZhbHVlOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGxlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgaWYgZmxvYXQoZC5nZXRWYXIodmFyaWFibGUsMSkpIDw9IGZsb2F0KGNoZWNrdmFsdWUpOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIHZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKGQuZ2V0VmFyKHZhcmlhYmxlLFRydWUpLCBjaGVja3ZhbHVlKQorICAgIGlmIHJlc3VsdCA8PSAwOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGJvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCk6CisgICAgdmFsMSA9IGQuZ2V0VmFyKHZhcmlhYmxlMSwgVHJ1ZSkKKyAgICB2YWwyID0gZC5nZXRWYXIodmFyaWFibGUyLCBUcnVlKQorICAgIHZhbDEgPSBzZXQodmFsMS5zcGxpdCgpKQorICAgIHZhbDIgPSBzZXQodmFsMi5zcGxpdCgpKQorICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgIGNoZWNrdmFsdWUgPSBzZXQoY2hlY2t2YWx1ZS5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIGNoZWNrdmFsdWUgPSBzZXQoY2hlY2t2YWx1ZSkKKyAgICBpZiBjaGVja3ZhbHVlLmlzc3Vic2V0KHZhbDEpIGFuZCBjaGVja3ZhbHVlLmlzc3Vic2V0KHZhbDIpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oY2hlY2t2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiIKKworZGVmIHNldF9pbnRlcnNlY3QodmFyaWFibGUxLCB2YXJpYWJsZTIsIGQpOgorICAgICIiIgorICAgIEV4cGFuZCBib3RoIHZhcmlhYmxlcywgaW50ZXJwcmV0IHRoZW0gYXMgbGlzdHMgb2Ygc3RyaW5ncywgYW5kIHJldHVybiB0aGUKKyAgICBpbnRlcnNlY3Rpb24gYXMgYSBmbGF0dGVuZWQgc3RyaW5nLgorCisgICAgRm9yIGV4YW1wbGU6CisgICAgczEgPSAiYSBiIGMiCisgICAgczIgPSAiYiBjIGQiCisgICAgczMgPSBzZXRfaW50ZXJzZWN0KHMxLCBzMikKKyAgICA9PiBzMyA9ICJiIGMiCisgICAgIiIiCisgICAgdmFsMSA9IHNldChkLmdldFZhcih2YXJpYWJsZTEsIFRydWUpLnNwbGl0KCkpCisgICAgdmFsMiA9IHNldChkLmdldFZhcih2YXJpYWJsZTIsIFRydWUpLnNwbGl0KCkpCisgICAgcmV0dXJuICIgIi5qb2luKHZhbDEgJiB2YWwyKQorCitkZWYgcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgICMgU2VlIGlmIHZhciBlbmRzIHdpdGggYW55IG9mIHRoZSBzdWZmaXhlcyBsaXN0ZWQgYW5kCisgICAgIyByZW1vdmUgaXQgaWYgZm91bmQKKyAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICBpZiB2YXIuZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgIHZhciA9IHZhci5yZXBsYWNlKHN1ZmZpeCwgIiIpCisKKyAgICBwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgIGlmIHByZWZpeCBhbmQgdmFyLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgdmFyID0gdmFyLnJlcGxhY2UocHJlZml4LCAiIikKKworICAgIHJldHVybiB2YXIKKworZGVmIHN0cl9maWx0ZXIoZiwgc3RyLCBkKToKKyAgICBmcm9tIHJlIGltcG9ydCBtYXRjaAorICAgIHJldHVybiAiICIuam9pbihmaWx0ZXIobGFtYmRhIHg6IG1hdGNoKGYsIHgsIDApLCBzdHIuc3BsaXQoKSkpCisKK2RlZiBzdHJfZmlsdGVyX291dChmLCBzdHIsIGQpOgorICAgIGZyb20gcmUgaW1wb3J0IG1hdGNoCisgICAgcmV0dXJuICIgIi5qb2luKGZpbHRlcihsYW1iZGEgeDogbm90IG1hdGNoKGYsIHgsIDApLCBzdHIuc3BsaXQoKSkpCisKK2RlZiBwYXJhbV9ib29sKGNmZywgZmllbGQsIGRmbHQgPSBOb25lKToKKyAgICAiIiJMb29rdXAgPGZpZWxkPiBpbiA8Y2ZnPiBtYXAgYW5kIGNvbnZlcnQgaXQgdG8gYSBib29sZWFuOyB0YWtlCisgICAgPGRmbHQ+IHdoZW4gdGhpcyA8ZmllbGQ+IGRvZXMgbm90IGV4aXN0IiIiCisgICAgdmFsdWUgPSBjZmcuZ2V0KGZpZWxkLCBkZmx0KQorICAgIHN0cnZhbHVlID0gc3RyKHZhbHVlKS5sb3dlcigpCisgICAgaWYgc3RydmFsdWUgaW4gKCd5ZXMnLCAneScsICd0cnVlJywgJ3QnLCAnMScpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgc3RydmFsdWUgaW4gKCdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHZhbHVlIGZvciBib29sZWFuIHBhcmFtZXRlciAnJXMnOiAnJXMnIiAlIChmaWVsZCwgdmFsdWUpKQorCitkZWYgaW5oZXJpdHMoZCwgKmNsYXNzZXMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBtZXRhZGF0YSBpbmhlcml0cyBhbnkgb2YgdGhlIHNwZWNpZmllZCBjbGFzc2VzIiIiCisgICAgcmV0dXJuIGFueShiYi5kYXRhLmluaGVyaXRzX2NsYXNzKGNscywgZCkgZm9yIGNscyBpbiBjbGFzc2VzKQorCitkZWYgZmVhdHVyZXNfYmFja2ZpbGwodmFyLGQpOgorICAgICMgVGhpcyBjb25zdHJ1Y3QgYWxsb3dzIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgdG8gdmFyaWFibGUgc3BlY2lmaWVkCisgICAgIyBhcyB2YXIKKyAgICAjIEV4YW1wbGUgZm9yIHZhciA9ICJESVNUUk9fRkVBVFVSRVMiCisgICAgIyBUaGlzIGNvbnN0cnVjdCBhbGxvd3MgdGhlIGFkZGl0aW9uIG9mIG5ldyBmZWF0dXJlcyB0byBESVNUUk9fRkVBVFVSRVMKKyAgICAjIHRoYXQgaWYgbm90IHByZXNlbnQgd291bGQgZGlzYWJsZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5LCB3aXRob3V0CisgICAgIyBkaXN0dXJiaW5nIGRpc3RyaWJ1dGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgc2V0IERJU1RST19GRUFUVVJFUy4KKyAgICAjIERpc3RyaWJ1dGlvbnMgd2FudGluZyB0byBlbGlkZSBhIHZhbHVlIGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTCBzaG91bGQKKyAgICAjIGFkZCB0aGUgZmVhdHVyZSB0byBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRAorICAgIGZlYXR1cmVzID0gKGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBiYWNrZmlsbCA9IChkLmdldFZhcih2YXIrIl9CQUNLRklMTCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgY29uc2lkZXJlZCA9IChkLmdldFZhcih2YXIrIl9CQUNLRklMTF9DT05TSURFUkVEIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGFkZGZlYXR1cmVzID0gW10KKyAgICBmb3IgZmVhdHVyZSBpbiBiYWNrZmlsbDoKKyAgICAgICAgaWYgZmVhdHVyZSBub3QgaW4gZmVhdHVyZXMgYW5kIGZlYXR1cmUgbm90IGluIGNvbnNpZGVyZWQ6CisgICAgICAgICAgICBhZGRmZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSkKKworICAgIGlmIGFkZGZlYXR1cmVzOgorICAgICAgICBkLmFwcGVuZFZhcih2YXIsICIgIiArICIgIi5qb2luKGFkZGZlYXR1cmVzKSkKKworCitkZWYgcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgbGlzdCBvZiBwYWNrYWdlcyBmcm9tIFBBQ0tBR0VTIHdpdGggdGhlICJzeXN0ZW0iIHBhY2thZ2VzIHN1Y2ggYXMKKyAgICBQTi1kYmcgUE4tZG9jIFBOLWxvY2FsZS1lYi1nYiByZW1vdmVkLgorICAgICIiIgorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBibGFja2xpc3QgPSBtYXAobGFtYmRhIHN1ZmZpeDogcG4gKyBzdWZmaXgsICgnJywgJy1kYmcnLCAnLWRldicsICctZG9jJywgJy1sb2NhbGUnLCAnLXN0YXRpY2RldicpKQorICAgIGxvY2FsZXBrZyA9IHBuICsgIi1sb2NhbGUtIgorICAgIHBrZ3MgPSBbXQorCisgICAgZm9yIHBrZyBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBwa2cgbm90IGluIGJsYWNrbGlzdCBhbmQgbG9jYWxlcGtnIG5vdCBpbiBwa2c6CisgICAgICAgICAgICBwa2dzLmFwcGVuZChwa2cpCisgICAgcmV0dXJuIHBrZ3MKKworZGVmIGdldHN0YXR1c291dHB1dChjbWQpOgorICAgIHJldHVybiBjbWRzdGF0dXMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKworCitkZWYgdHJpbV92ZXJzaW9uKHZlcnNpb24sIG51bV9wYXJ0cz0yKToKKyAgICAiIiIKKyAgICBSZXR1cm4ganVzdCB0aGUgZmlyc3QgPG51bV9wYXJ0cz4gb2YgPHZlcnNpb24+LCBzcGxpdCBieSBwZXJpb2RzLiAgRm9yCisgICAgZXhhbXBsZSwgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIDIpIHdpbGwgcmV0dXJuICIxLjIiLgorICAgICIiIgorICAgIGlmIHR5cGUodmVyc2lvbikgaXMgbm90IHN0cjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJWZXJzaW9uIHNob3VsZCBiZSBhIHN0cmluZyIpCisgICAgaWYgbnVtX3BhcnRzIDwgMToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHNwbGl0IHRvIHBhcnRzIDwgMSIpCisKKyAgICBwYXJ0cyA9IHZlcnNpb24uc3BsaXQoIi4iKQorICAgIHRyaW1tZWQgPSAiLiIuam9pbihwYXJ0c1s6bnVtX3BhcnRzXSkKKyAgICByZXR1cm4gdHJpbW1lZAorCitkZWYgY3B1X2NvdW50KCk6CisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKKworZGVmIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhkLCBjbWRzKToKKyAgICBpZiBjbWRzIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgZm9yIGNtZCBpbiBjbWRzLnN0cmlwKCkuc3BsaXQoJzsnKToKKyAgICAgICAgY21kID0gY21kLnN0cmlwKCkKKyAgICAgICAgaWYgY21kICE9ICcnOgorICAgICAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICVzIC4uLiIgJSBjbWQpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoY21kLCBkKQorCitkZWYgbXVsdGlwcm9jZXNzX2V4ZWMoY29tbWFuZHMsIGZ1bmN0aW9uKToKKyAgICBpbXBvcnQgc2lnbmFsCisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworCisgICAgaWYgbm90IGNvbW1hbmRzOgorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBpbml0X3dvcmtlcigpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgbnByb2MgPSBtaW4obXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpLCBsZW4oY29tbWFuZHMpKQorICAgIHBvb2wgPSBiYi51dGlscy5tdWx0aXByb2Nlc3Npbmdwb29sKG5wcm9jLCBpbml0X3dvcmtlcikKKyAgICBpbWFwID0gcG9vbC5pbWFwKGZ1bmN0aW9uLCBjb21tYW5kcykKKworICAgIHRyeToKKyAgICAgICAgcmVzID0gbGlzdChpbWFwKQorICAgICAgICBwb29sLmNsb3NlKCkKKyAgICAgICAgcG9vbC5qb2luKCkKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGZvciByZXN1bHQgaW4gcmVzOgorICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcG9vbC50ZXJtaW5hdGUoKQorICAgICAgICBwb29sLmpvaW4oKQorICAgICAgICByYWlzZQorCitkZWYgc3F1YXNoc3BhY2VzKHN0cmluZyk6CisgICAgaW1wb3J0IHJlCisgICAgcmV0dXJuIHJlLnN1YigiXHMrIiwgIiAiLCBzdHJpbmcpLnN0cmlwKCkKKworIworIyBQeXRob24gMi43IGRvZXNuJ3QgaGF2ZSB0aHJlYWRlZCBwb29scyAoanVzdCBtdWx0aXByb2Nlc3NpbmcpCisjIHNvIGltcGxlbWVudCBhIHZlcnNpb24gaGVyZQorIworCitmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQorZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorCitjbGFzcyBUaHJlYWRlZFdvcmtlcihUaHJlYWQpOgorICAgICIiIlRocmVhZCBleGVjdXRpbmcgdGFza3MgZnJvbSBhIGdpdmVuIHRhc2tzIHF1ZXVlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2tzLCB3b3JrZXJfaW5pdCwgd29ya2VyX2VuZCk6CisgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnRhc2tzID0gdGFza3MKKyAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisKKyAgICAgICAgc2VsZi53b3JrZXJfaW5pdCA9IHdvcmtlcl9pbml0CisgICAgICAgIHNlbGYud29ya2VyX2VuZCA9IHdvcmtlcl9lbmQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGZyb20gUXVldWUgaW1wb3J0IEVtcHR5CisKKyAgICAgICAgaWYgc2VsZi53b3JrZXJfaW5pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud29ya2VyX2luaXQoc2VsZikKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMsIGFyZ3MsIGthcmdzID0gc2VsZi50YXNrcy5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi53b3JrZXJfZW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndvcmtlcl9lbmQoc2VsZikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCAqYXJncywgKiprYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcHJpbnQgZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tzLnRhc2tfZG9uZSgpCisKK2NsYXNzIFRocmVhZGVkUG9vbDoKKyAgICAiIiJQb29sIG9mIHRocmVhZHMgY29uc3VtaW5nIHRhc2tzIGZyb20gYSBxdWV1ZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fd29ya2VycywgbnVtX3Rhc2tzLCB3b3JrZXJfaW5pdD1Ob25lLAorICAgICAgICAgICAgd29ya2VyX2VuZD1Ob25lKToKKyAgICAgICAgc2VsZi50YXNrcyA9IFF1ZXVlKG51bV90YXNrcykKKyAgICAgICAgc2VsZi53b3JrZXJzID0gW10KKworICAgICAgICBmb3IgXyBpbiByYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXIgPSBUaHJlYWRlZFdvcmtlcihzZWxmLnRhc2tzLCB3b3JrZXJfaW5pdCwgd29ya2VyX2VuZCkKKyAgICAgICAgICAgIHNlbGYud29ya2Vycy5hcHBlbmQod29ya2VyKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisKKyAgICBkZWYgYWRkX3Rhc2soc2VsZiwgZnVuYywgKmFyZ3MsICoqa2FyZ3MpOgorICAgICAgICAiIiJBZGQgYSB0YXNrIHRvIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLnB1dCgoZnVuYywgYXJncywga2FyZ3MpKQorCisgICAgZGVmIHdhaXRfY29tcGxldGlvbihzZWxmKToKKyAgICAgICAgIiIiV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhbGwgdGhlIHRhc2tzIGluIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLmpvaW4oKQorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5qb2luKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRhOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIG1vZHVsZXMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkgYi9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmY5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5CkBAIC0wLDAgKzEsMjAxIEBACisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgdG8gdGVzdGltYWdlLmJiY2xhc3MgdG8gZGVwbG95IGltYWdlcyBhbmQgcnVuCisjIHRlc3RzIHVzaW5nIGEgIm1hc3RlciBpbWFnZSIgLSB0aGlzIGlzIGEgImtub3duIGdvb2QiIGltYWdlIHRoYXQgaXMKKyMgaW5zdGFsbGVkIG9udG8gdGhlIGRldmljZSBhcyBwYXJ0IG9mIGluaXRpYWwgc2V0dXAgYW5kIHdpbGwgYmUgYm9vdGVkIGludG8KKyMgd2l0aCBubyBpbnRlcmFjdGlvbjsgd2UgY2FuIHRoZW4gdXNlIGl0IHRvIGRlcGxveSB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkCisjIHRvIGEgc2Vjb25kIHBhcnRpdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHMuCisjCisjIEZvciBhbiBleGFtcGxlIG1hc3RlciBpbWFnZSwgc2VlIGNvcmUtaW1hZ2UtdGVzdG1hc3RlcgorIyAobWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIpCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdGltZQoraW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0IG9lcWEudGFyZ2V0Y29udHJvbAoraW1wb3J0IG9lcWEudXRpbHMuc3NoY29udHJvbCBhcyBzc2hjb250cm9sCitpbXBvcnQgb2VxYS51dGlscy5jb21tYW5kcyBhcyBjb21tYW5kcworZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKKworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2NsYXNzIE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQob2VxYS50YXJnZXRjb250cm9sLkJhc2VUYXJnZXQpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gWyd0YXIuZ3onLCAndGFyLmJ6MiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICAgICAgIyB0YXJnZXQgaXAKKyAgICAgICAgYWRkciA9IGQuZ2V0VmFyKCJURVNUX1RBUkdFVF9JUCIsIFRydWUpIG9yIGJiLmZhdGFsKCdQbGVhc2Ugc2V0IFRFU1RfVEFSR0VUX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgeW91IHdhbnQgdG8gcnVuIHRoZSB0ZXN0cyBvbi4nKQorICAgICAgICBzZWxmLmlwID0gYWRkci5zcGxpdCgiOiIpWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IGFkZHIuc3BsaXQoIjoiKVsxXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IE5vbmUKKyAgICAgICAgYmIubm90ZSgiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGQuZ2V0VmFyKCJURVNUX1NFUlZFUl9JUCIsIFRydWUpCisgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9pcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnaXAnLCAncm91dGUnLCAnZ2V0Jywgc2VsZi5pcCBdKS5zcGxpdCgiXG4iKVswXS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3N0IElQIGFkZHJlc3MgKGFsdGVybmF0aXZlbHkgeW91IGNhbiBzZXQgVEVTVF9TRVJWRVJfSVAgd2l0aCB0aGUgSVAgYWRkcmVzcyBvZiB0aGlzIG1hY2hpbmUpOiAlcyIgJSBlKQorICAgICAgICBiYi5ub3RlKCJTZXJ2ZXIgSVA6ICVzIiAlIHNlbGYuc2VydmVyX2lwKQorCisgICAgICAgICMgdGVzdCByb290ZnMgKyBrZXJuZWwKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGUgPSBzZWxmLmdldF9pbWFnZV9mc3R5cGUoZCkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgJy4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYua2VybmVsID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFIiwgRmFsc2UpICsgJy0nICsgZC5nZXRWYXIoJ01BQ0hJTkUnLCBGYWxzZSkgKyAnLmJpbicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICAjIHdlIGNvdWxkJ3ZlIGNoZWNrZWQgdGhhdCBJTUFHRV9GU1RZUEVTIGNvbnRhaW5zIHRhci5neiBidXQgdGhlIGNvbmZpZyBmb3IgcnVubmluZyB0ZXN0aW1hZ2UgbWlnaHQgbm90IGJlCisgICAgICAgICAgICAjIHRoZSBzYW1lIGFzIHRoZSBjb25maWcgd2l0aCB3aGljaCB0aGUgaW1hZ2Ugd2FzIGJ1aWxkLCBpZQorICAgICAgICAgICAgIyB5b3UgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8gd2l0aCBJTUFHRV9GU1RZUEVTICs9ICJ0YXIuZ3oiCisgICAgICAgICAgICAjIGFuZCB5b3VyIGF1dG9idWlsZGVyIG92ZXJ3cml0ZXMgdGhlIGNvbmZpZywgYWRkcyB0aGUgdGVzdCBiaXRzIGFuZCBydW5zIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZQorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHJvb3RmcyBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgaW1hZ2UgP1xuSWYgeWVzLCBkaWQgeW91IGJ1aWxkIGl0IHdpdGggSU1BR0VfRlNUWVBFUyArPSBcInRhci5nelwiID8gXAorICAgICAgICAgICAgICAgICAgICAgIFxuRXhwZWN0ZWQgcGF0aDogJXMiICUgc2VsZi5yb290ZnMpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLmtlcm5lbCk6CisgICAgICAgICAgICBiYi5mYXRhbCgiTm8ga2VybmVsIGZvdW5kLiBFeHBlY3RlZCBwYXRoOiAlcyIgJSBzZWxmLmtlcm5lbCkKKworICAgICAgICAjIG1hc3RlciBzc2ggY29ubmVjdGlvbgorICAgICAgICBzZWxmLm1hc3RlciA9IE5vbmUKKyAgICAgICAgIyBpZiB0aGUgdXNlciBrbm93cyB3aGF0IHRoZXkgYXJlIGRvaW5nLCB0aGVuIGJ5IGFsbCBtZWFucy4uLgorICAgICAgICBzZWxmLnVzZXJfY21kcyA9IGQuZ2V0VmFyKCJURVNUX0RFUExPWV9DTURTIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IE5vbmUKKworICAgICAgICAjIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdGhhdCBjb250cm9scyB0aGUgcG93ZXIgZm9yIGEgYm9hcmQKKyAgICAgICAgIyBlLmc6IFRFU1RfUE9XRVJDT05UUk9MX0NNRCA9ICIvaG9tZS91c2VyL215c2NyaXB0cy9wb3dlcmNvbnRyb2wucHkgJHtNQUNISU5FfSB3aGF0LWV2ZXItb3RoZXItYXJncy10aGUtc2NyaXB0LXdhbnRzIgorICAgICAgICAjIHRoZSBjb21tYW5kIHNob3VsZCB0YWtlIGFzIHRoZSBsYXN0IGFyZ3VtZW50ICJvZmYiIGFuZCAib24iIGFuZCAiY3ljbGUiIChvZmYsIG9uKQorICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9jbWQgPSBkLmdldFZhcigiVEVTVF9QT1dFUkNPTlRST0xfQ01EIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9hcmdzID0gZC5nZXRWYXIoIlRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1MiLCBGYWxzZSkgb3IgIiIKKworICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfY21kID0gZC5nZXRWYXIoIlRFU1RfU0VSSUFMQ09OVFJPTF9DTUQiLCBUcnVlKSBvciBOb25lCisgICAgICAgIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzID0gZC5nZXRWYXIoIlRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTIiwgRmFsc2UpIG9yICIiCisKKyAgICAgICAgc2VsZi5vcmlnZW52ID0gb3MuZW52aXJvbgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQgb3Igc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgICMgdGhlIGV4dGVybmFsIHNjcmlwdCBmb3IgY29udHJvbGxpbmcgcG93ZXIgbWlnaHQgdXNlIHNzaAorICAgICAgICAgICAgIyBzc2ggKyBrZXlzIG1lYW5zIHdlIG5lZWQgdGhlIG9yaWdpbmFsIHVzZXIgZW52CisgICAgICAgICAgICBiYm9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKSBvciB7fQorICAgICAgICAgICAgZm9yIGtleSBpbiBiYm9yaWdlbnY6CisgICAgICAgICAgICAgICAgdmFsID0gYmJvcmlnZW52LmdldFZhcihrZXksIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdlbnZba2V5XSA9IHN0cih2YWwpCisKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9jbWQgPSAiJXMgJXMiICUgKHNlbGYucG93ZXJjb250cm9sX2NtZCwgc2VsZi5wb3dlcmNvbnRyb2xfYXJncykKKyAgICAgICAgaWYgc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzOgorICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsY29udHJvbF9jbWQgPSAiJXMgJXMiICUgKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzKQorCisgICAgZGVmIHBvd2VyX2N0bChzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQ6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMiICUgKHNlbGYucG93ZXJjb250cm9sX2NtZCwgbXNnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbW1hbmRzLnJ1bkNtZChjbWQsIGFzc2VydF9lcnJvcj1GYWxzZSwgcHJlZXhlY19mbj1vcy5zZXRzaWQsIGVudj1zZWxmLm9yaWdlbnYpCisgICAgICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoc3RyKGUpKQorCisgICAgZGVmIHBvd2VyX2N5Y2xlKHNlbGYsIGNvbm4pOgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQ6CisgICAgICAgICAgICAjIGJlIG5pY2UsIGRvbid0IGp1c3QgY3V0IHBvd2VyCisgICAgICAgICAgICBjb25uLnJ1bigic2h1dGRvd24gLWggbm93IikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICBzZWxmLnBvd2VyX2N0bCgiY3ljbGUiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBjb25uLnJ1bigicmVib290IikKKyAgICAgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJGYWlsZWQgcmVib290aW5nIHRhcmdldCBhbmQgbm8gcG93ZXIgY29udHJvbCBjb21tYW5kIGRlZmluZWQuIFlvdSBuZWVkIHRvIG1hbnVhbGx5IHJlc2V0IHRoZSBkZXZpY2UuXG4lcyIgJSBvdXRwdXQpCisKKyAgICBkZWYgX3dhaXRfdW50aWxfYm9vdGVkKHNlbGYpOgorICAgICAgICAnJycgV2FpdHMgdW50aWwgdGhlIHRhcmdldCBkZXZpY2UgaGFzIGJvb3RlZCAoaWYgd2UgaGF2ZSBqdXN0IHBvd2VyIGN5Y2xlZCBpdCkgJycnCisgICAgICAgICMgU3ViY2xhc3NlcyB3aXRoIGJldHRlciBtZXRob2RzIG9mIGRldGVybWluaW5nIGJvb3QgY2FuIG92ZXJyaWRlIHRoaXMKKyAgICAgICAgdGltZS5zbGVlcCgxMjApCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICAjIGJhc2UgY2xhc3MganVzdCBzZXRzIHRoZSBzc2ggbG9nIGZpbGUgZm9yIHVzCisgICAgICAgIHN1cGVyKE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCisgICAgICAgIHNlbGYubWFzdGVyID0gc3NoY29udHJvbC5TU0hDb250cm9sKGlwPXNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHRpbWVvdXQ9NjAwLCBwb3J0PXNlbGYucG9ydCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzZWxmLm1hc3Rlci5ydW4oImNhdCAvZXRjL21hc3RlcmltYWdlIikKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICAjIFdlJ3JlIG5vdCBib290ZWQgaW50byB0aGUgbWFzdGVyIGltYWdlLCBzbyB0cnkgcmVib290aW5nCisgICAgICAgICAgICBiYi5wbGFpbigiJXMgLSBib290aW5nIGludG8gdGhlIG1hc3RlciBpbWFnZSIgJSBzZWxmLnBuKQorICAgICAgICAgICAgc2VsZi5wb3dlcl9jdGwoImN5Y2xlIikKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfdW50aWxfYm9vdGVkKCkKKworICAgICAgICBiYi5wbGFpbigiJXMgLSBkZXBsb3lpbmcgaW1hZ2Ugb24gdGFyZ2V0IiAlIHNlbGYucG4pCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5tYXN0ZXIucnVuKCJjYXQgL2V0Yy9tYXN0ZXJpbWFnZSIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHNzaCBjb25uZWN0aXZpdHkgb3IgdGFyZ2V0IGlzbid0IHJ1bm5pbmcgYSBtYXN0ZXIgaW1hZ2UuXG4lcyIgJSBvdXRwdXQpCisgICAgICAgIGlmIHNlbGYudXNlcl9jbWRzOgorICAgICAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IHNlbGYudXNlcl9jbWRzLnNwbGl0KCJcbiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RlcGxveSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgZGVwbG95aW5nIHRlc3QgaW1hZ2U6ICVzIiAlIGUpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gYm9vdCB0ZXN0IGltYWdlIG9uIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzZWxmLl9zdGFydCgpCisgICAgICAgICMgc2V0IHRoZSBzc2ggb2JqZWN0IGZvciB0aGUgdGFyZ2V0L3Rlc3QgaW1hZ2UKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc3NoY29udHJvbC5TU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHBvcnQ9c2VsZi5wb3J0KQorICAgICAgICBiYi5wbGFpbigiJXMgLSBzdGFydCBydW5uaW5nIHRlc3RzIiAlIHNlbGYucG4pCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gcmVib290L3Bvd2VyY3ljbGUgdGFyZ2V0IiAlIHNlbGYucG4pCisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5jb25uZWN0aW9uKQorCisKK2NsYXNzIEd1bW1pYm9vdFRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoR3VtbWlib290VGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICAjIHRoaXMgdGhlIHZhbHVlIHdlIG5lZWQgdG8gc2V0IGluIHRoZSBMb2FkZXJFbnRyeU9uZVNob3QgRUZJIHZhcmlhYmxlCisgICAgICAgICMgc28gdGhlIHN5c3RlbSBib290cyB0aGUgJ3Rlc3QnIGJvb3Rsb2FkZXIgbGFiZWwgYW5kIG5vdCB0aGUgZGVmYXVsdAorICAgICAgICAjIFRoZSBmaXJzdCBmb3VyIGJ5dGVzIGFyZSBFRkkgYml0cywgYW5kIHRoZSByZXN0IGlzIGFuIHV0Zi0xNmxlIHN0cmluZworICAgICAgICAjIChFRkkgdmFycyB2YWx1ZXMgbmVlZCB0byBiZSB1dGYtMTYpCisgICAgICAgICMgJCBlY2hvIC1lbiAidGVzdFwwIiB8IGljb252IC1mIGFzY2lpIC10IHV0Zi0xNmxlIHwgaGV4ZHVtcCAtQworICAgICAgICAjIDAwMDAwMDAwICA3NCAwMCA2NSAwMCA3MyAwMCA3NCAwMCAgMDAgMDAgICAgICAgICAgICAgICAgICAgIHx0LmUucy50Li4ufAorICAgICAgICBzZWxmLmVmaXZhcnZhbHVlID0gcidceDA3XHgwMFx4MDBceDAwXHg3NFx4MDBceDY1XHgwMFx4NzNceDAwXHg3NFx4MDBceDAwXHgwMCcKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IFsKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgYm9vdCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW9kcHJvYmUgZWZpdmFyZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtdCBlZml2YXJmcyBlZml2YXJmcyAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzJywKKyAgICAgICAgICAgICAgICAnY3Agfi90ZXN0LWtlcm5lbCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgJ3ByaW50ZiAiJXMiID4gL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFycy9Mb2FkZXJFbnRyeU9uZVNob3QtNGE2N2IwODItMGE0Yy00MWNmLWI2YzctNDQwYjI5YmI4YzRmJyAlIHNlbGYuZWZpdmFydmFsdWUKKyAgICAgICAgICAgICAgICBdCisKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IG1vdW50ZWQKKyAgICAgICAgc2VsZi5tYXN0ZXIucnVuKCJ1bW91bnQgL2Jvb3Q7IHVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IHVtb3VudCAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzOyIpCisgICAgICAgICMgZnJvbSBub3cgb24sIGV2ZXJ5IGRlcGxveSBjbWQgc2hvdWxkIHJldHVybiAwCisgICAgICAgICMgZWxzZSBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gYnkgc3NoY29udHJvbAorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuIiArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgIyB0aGVyZSBhcmUgYmV0dGVyIHdheXMgdGhhbiBhIHRpbWVvdXQgYnV0IHRoaXMgc2hvdWxkIHdvcmsgZm9yIG5vdworICAgICAgICB0aW1lLnNsZWVwKDEyMCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weSBiL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWI3YjFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy90ZXN0dGFyZ2V0bG9hZGVyLnB5CkBAIC0wLDAgKzEsNzAgQEAKK2ltcG9ydCB0eXBlcworaW1wb3J0IGJiCitpbXBvcnQgb3MKKworIyBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGEgdGVzdCB0YXJnZXQgY29udHJvbGxlcgorY2xhc3MgVGVzdFRhcmdldExvYWRlcjoKKworICAgICMgU2VhcmNoIG9lcWEuY29udHJvbGxlcnMgbW9kdWxlIGRpcmVjdG9yeSBmb3IgYW5kIHJldHVybiBhIGNvbnRyb2xsZXIgIAorICAgICMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gdGFyZ2V0IG5hbWUuIAorICAgICMgQXR0cmlidXRlRXJyb3IgcmFpc2VkIGlmIG5vdCBmb3VuZC4KKyAgICAjIEltcG9ydEVycm9yIHJhaXNlZCBpZiBhIHByb3ZpZGVkIG1vZHVsZSBjYW4gbm90IGJlIGltcG9ydGVkLgorICAgIGRlZiBnZXRfY29udHJvbGxlcl9tb2R1bGUoc2VsZiwgdGFyZ2V0LCBiYnBhdGgpOgorICAgICAgICBjb250cm9sbGVyc2xpc3QgPSBzZWxmLmdldF9jb250cm9sbGVyX21vZHVsZW5hbWVzKGJicGF0aCkKKyAgICAgICAgYmIubm90ZSgiQXZhaWxhYmxlIGNvbnRyb2xsZXIgbW9kdWxlczogJXMiICUgc3RyKGNvbnRyb2xsZXJzbGlzdCkpCisgICAgICAgIGNvbnRyb2xsZXIgPSBzZWxmLmxvYWRfY29udHJvbGxlcl9mcm9tX25hbWUodGFyZ2V0LCBjb250cm9sbGVyc2xpc3QpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyCisKKyAgICAjIFJldHVybiBhIGxpc3Qgb2YgYWxsIHB5dGhvbiBtb2R1bGVzIGluIGxpYi9vZXFhL2NvbnRyb2xsZXJzIGZvciBlYWNoCisgICAgIyBsYXllciBpbiBiYnBhdGgKKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXJfbW9kdWxlbmFtZXMoc2VsZiwgYmJwYXRoKToKKworICAgICAgICBjb250cm9sbGVyc2xpc3QgPSBbXQorCisgICAgICAgIGRlZiBhZGRfY29udHJvbGxlcl9saXN0KHBhdGgpOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ0NvbnRyb2xsZXJzIGRpcmVjdG9yeSAlcyBleGlzdHMgYnV0IGlzIG1pc3NpbmcgX19pbml0X18ucHknICUgcGF0aCkKKyAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIocGF0aCkgaWYgZi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoJ18nKV0pCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSAnb2VxYS5jb250cm9sbGVycy4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiBjb250cm9sbGVyc2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzbGlzdC5hcHBlbmQobW9kdWxlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkR1cGxpY2F0ZSBjb250cm9sbGVyIG1vZHVsZSBmb3VuZCBmb3IgJXMsIG9ubHkgb25lIGFkZGVkLiBMYXllcnMgc2hvdWxkIGNyZWF0ZSB1bmlxdWUgY29udHJvbGxlciBtb2R1bGUgbmFtZXMiICUgbW9kdWxlKQorCisgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgIGNvbnRyb2xsZXJwYXRoID0gb3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsICdjb250cm9sbGVycycpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnU2VhcmNoaW5nIGZvciB0YXJnZXQgY29udHJvbGxlcnMgaW4gJXMnICUgY29udHJvbGxlcnBhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb250cm9sbGVycGF0aCk6CisgICAgICAgICAgICAgICAgYWRkX2NvbnRyb2xsZXJfbGlzdChjb250cm9sbGVycGF0aCkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJzbGlzdAorCisgICAgIyBTZWFyY2ggZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyIGZyb20gZ2l2ZW4gdGFyZ2V0IG5hbWUgYW5kCisgICAgIyBzZXQgb2YgbW9kdWxlIG5hbWVzLiAKKyAgICAjIFJhaXNlIEF0dHJpYnV0ZUVycm9yIGlmIG5vdCBmb3VuZC4KKyAgICAjIFJhaXNlIEltcG9ydEVycm9yIGlmIGEgcHJvdmlkZWQgbW9kdWxlIGNhbiBub3QgYmUgaW1wb3J0ZWQKKyAgICBkZWYgbG9hZF9jb250cm9sbGVyX2Zyb21fbmFtZShzZWxmLCB0YXJnZXQsIG1vZHVsZW5hbWVzKToKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlbmFtZXM6CisgICAgICAgICAgICBvYmogPSBzZWxmLmxvYWRfY29udHJvbGxlcl9mcm9tX21vZHVsZSh0YXJnZXQsIG5hbWUpCisgICAgICAgICAgICBpZiBvYmo6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiVW5hYmxlIHRvIGxvYWQgezB9IGZyb20gYXZhaWxhYmxlIG1vZHVsZXM6IHsxfSIuZm9ybWF0KHRhcmdldCwgc3RyKG1vZHVsZW5hbWVzKSkpCisKKyAgICAjIFNlYXJjaCBmb3IgYW5kIHJldHVybiBhIGNvbnRyb2xsZXIgb3IgTm9uZSBmcm9tIGdpdmVuIG1vZHVsZSBuYW1lCisgICAgZGVmIGxvYWRfY29udHJvbGxlcl9mcm9tX21vZHVsZShzZWxmLCB0YXJnZXQsIG1vZHVsZW5hbWUpOgorICAgICAgICBvYmogPSBOb25lCisgICAgICAgICMgaW1wb3J0IG1vZHVsZSwgYWxsb3dpbmcgaXQgdG8gcmFpc2UgaW1wb3J0IGV4Y2VwdGlvbgorICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZW5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFt0YXJnZXRdKQorICAgICAgICAjIGxvb2sgZm9yIHRhcmdldCBjbGFzcyBpbiB0aGUgbW9kdWxlLCBjYXRjaGluZyBhbnkgZXhjZXB0aW9ucyBhcyBpdAorICAgICAgICAjIGlzIHZhbGlkIHRoYXQgYSBtb2R1bGUgbWF5IG5vdCBoYXZlIHRoZSB0YXJnZXQgY2xhc3MuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCB0YXJnZXQpCisgICAgICAgICAgICBpZiBvYmo6IAorICAgICAgICAgICAgICAgIGZyb20gb2VxYS50YXJnZXRjb250cm9sIGltcG9ydCBCYXNlVGFyZ2V0CisgICAgICAgICAgICAgICAgaWYgKG5vdCBpc2luc3RhbmNlKG9iaiwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpKToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVGFyZ2V0IHswfSBmb3VuZCwgYnV0IG5vdCBvZiB0eXBlIENsYXNzIi5mb3JtYXQodGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBpZiggbm90IGlzc3ViY2xhc3Mob2JqLCBCYXNlVGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRhcmdldCB7MH0gZm91bmQsIGJ1dCBzdWJjbGFzcyBpcyBub3QgQmFzZVRhcmdldCIuZm9ybWF0KHRhcmdldCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgcmV0dXJuIG9iagpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkgYi9tZXRhL2xpYi9vZXFhL29ldGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmU2OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkKQEAgLTAsMCArMSwyMTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIE1haW4gdW5pdHRlc3QgbW9kdWxlIHVzZWQgYnkgdGVzdGltYWdlLmJiY2xhc3MKKyMgVGhpcyBwcm92aWRlcyB0aGUgb2VSdW50aW1lVGVzdCBiYXNlIGNsYXNzIHdoaWNoIGlzIGluaGVyaXRlZCBieSBhbGwgdGVzdHMgaW4gbWV0YS9saWIvb2VxYS9ydW50aW1lLgorCisjIEl0IGFsc28gaGFzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBhbmQgaXQncyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc3RhcnRpbmcgdGhlIHRlc3RzCisKK2ltcG9ydCBvcywgcmUsIG1tYXAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYmIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCBMb2dSZXN1bHRzLCBnZXR0YWcKK2Zyb20gc3lzIGltcG9ydCBleGNfaW5mbywgZXhjX2NsZWFyCisKK2RlZiBnZXRWYXIob2JqKToKKyAgICAjZXh0ZW5kIGZvcm0gZGljdCwgaWYgYSB2YXJpYWJsZSBkaWRuJ3QgZXhpc3RzLCBuZWVkIGZpbmQgaXQgaW4gdGVzdGNhc2UKKyAgICBjbGFzcyBWYXJEaWN0KGRpY3QpOgorICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgIHJldHVybiBnZXR0YWcob2JqLCBrZXkpCisgICAgcmV0dXJuIFZhckRpY3QoKQorCitkZWYgY2hlY2tUYWdzKHRjLCB0YWdleHApOgorICAgIHJldHVybiBldmFsKHRhZ2V4cCwgTm9uZSwgZ2V0VmFyKHRjKSkKKworCitkZWYgZmlsdGVyQnlUYWdFeHAodGVzdHN1aXRlLCB0YWdleHApOgorICAgIGlmIG5vdCB0YWdleHA6CisgICAgICAgIHJldHVybiB0ZXN0c3VpdGUKKyAgICBjYXNlTGlzdCA9IFtdCisgICAgZm9yIGVhY2ggaW4gdGVzdHN1aXRlOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlYWNoLCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlKToKKyAgICAgICAgICAgIGlmIGNoZWNrVGFncyhlYWNoLCB0YWdleHApOgorICAgICAgICAgICAgICAgIGNhc2VMaXN0LmFwcGVuZChlYWNoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FzZUxpc3QuYXBwZW5kKGZpbHRlckJ5VGFnRXhwKGVhY2gsIHRhZ2V4cCkpCisgICAgcmV0dXJuIHRlc3RzdWl0ZS5fX2NsYXNzX18oY2FzZUxpc3QpCisKK2RlZiBsb2FkVGVzdHModGMsIHR5cGU9InJ1bnRpbWUiKToKKyAgICBpZiB0eXBlID09ICJydW50aW1lIjoKKyAgICAgICAgIyBzZXQgdGhlIGNvbnRleHQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB0ZXN0IGNsYXNzCisgICAgICAgIHNldGF0dHIob2VUZXN0LCAidGMiLCB0YykKKyAgICAgICAgIyBzZXQgcHMgY29tbWFuZCB0byB1c2UKKyAgICAgICAgc2V0YXR0cihvZVJ1bnRpbWVUZXN0LCAicHNjbWQiLCAicHMgLWVmIiBpZiBvZVRlc3QuaGFzUGFja2FnZSgicHJvY3BzIikgZWxzZSAicHMiKQorICAgICAgICAjIHByZXBhcmUgdGVzdCBzdWl0ZSwgbG9hZGVyIGFuZCBydW5uZXIKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGVsaWYgdHlwZSA9PSAic2RrIjoKKyAgICAgICAgIyBzZXQgdGhlIGNvbnRleHQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB0ZXN0IGNsYXNzCisgICAgICAgIHNldGF0dHIob2VUZXN0LCAidGMiLCB0YykKKyAgICB0ZXN0bG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgdGVzdGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKyAgICBzdWl0ZXMgPSBbdGVzdGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShuYW1lKSBmb3IgbmFtZSBpbiB0Yy50ZXN0c2xpc3RdCisgICAgc3VpdGVzID0gZmlsdGVyQnlUYWdFeHAoc3VpdGVzLCBnZXRhdHRyKHRjLCAidGFnZXhwIiwgTm9uZSkpCisKKyAgICBkZWYgZ2V0VGVzdHModGVzdCk6CisgICAgICAgICcnJ1JldHVybiBhbGwgaW5kaXZpZHVhbCB0ZXN0cyBleGVjdXRlZCB3aGVuIHJ1bm5pbmcgdGhlIHN1aXRlLicnJworICAgICAgICAjIFVuZm9ydHVuYXRlbHkgdW5pdHRlc3QgZG9lcyBub3QgaGF2ZSBhbiBBUEkgZm9yIHRoaXMsIHNvIHdlIGhhdmUKKyAgICAgICAgIyB0byByZWx5IG9uIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFRoaXMgb25seSBuZWVkcyB0byB3b3JrCisgICAgICAgICMgZm9yIFRlc3RTdWl0ZSBjb250YWluaW5nIFRlc3RDYXNlLgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHRlc3QsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKQorICAgICAgICBpZiBtZXRob2Q6CisgICAgICAgICAgICAjIGxlYWYgY2FzZTogYSBUZXN0Q2FzZQorICAgICAgICAgICAgeWllbGQgdGVzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBMb29rIGludG8gVGVzdFN1aXRlLgorICAgICAgICAgICAgdGVzdHMgPSBnZXRhdHRyKHRlc3QsICdfdGVzdHMnLCBbXSkKKyAgICAgICAgICAgIGZvciB0MSBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBmb3IgdDIgaW4gZ2V0VGVzdHModDEpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0MgorCisgICAgIyBEZXRlcm1pbmUgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VpdGVzIGJ5IGxvb2tpbmcgZm9yIEBza2lwVW5sZXNzUGFzc2VkCisgICAgIyBtZXRob2QgYW5ub3RhdGlvbnMuIFN1aXRlIEEgZGVwZW5kcyBvbiBzdWl0ZSBCIGlmIGFueSBtZXRob2QgaW4gQQorICAgICMgZGVwZW5kcyBvbiBhIG1ldGhvZCBvbiBCLgorICAgIGZvciBzdWl0ZSBpbiBzdWl0ZXM6CisgICAgICAgIHN1aXRlLmRlcGVuZGVuY2llcyA9IFtdCisgICAgICAgIHN1aXRlLmRlcHRoID0gMAorICAgICAgICBmb3IgdGVzdCBpbiBnZXRUZXN0cyhzdWl0ZSk6CisgICAgICAgICAgICBtZXRob2RuYW1lID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RNZXRob2ROYW1lJywgTm9uZSkKKyAgICAgICAgICAgIGlmIG1ldGhvZG5hbWU6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih0ZXN0LCBtZXRob2RuYW1lKQorICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBnZXRhdHRyKG1ldGhvZCwgJ19kZXBlbmRzX29uJywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwX3N1aXRlIGluIHN1aXRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcGVuZHNfb24gaW4gW2dldGF0dHIodCwgJ190ZXN0TWV0aG9kTmFtZScsIE5vbmUpIGZvciB0IGluIGdldFRlc3RzKGRlcF9zdWl0ZSldOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcF9zdWl0ZSBub3QgaW4gc3VpdGUuZGVwZW5kZW5jaWVzIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwX3N1aXRlIGlzIG5vdCBzdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGUuZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBfc3VpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRlc3QgJXMgd2FzIGRlY2xhcmVkIGFzIEBza2lwVW5sZXNzUGFzc2VkKCclcycpIGJ1dCB0aGF0IHRlc3QgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIG5vdCBhY3RpdmUuIFdpbGwgcnVuIHRoZSB0ZXN0IGFueXdheS4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3QsIGRlcGVuZHNfb24pKQorICAgICMgVXNlIGJydXRlLWZvcmNlIHRvcG9sb2dpY2FsIHNvcnQgdG8gZGV0ZXJtaW5lIG9yZGVyaW5nLiBTb3J0IGJ5CisgICAgIyBkZXB0aCAoaGlnaGVyIGRlcHRoID0gbXVzdCBydW4gbGF0ZXIpLCB3aXRoIG9yaWdpbmFsIG9yZGVyaW5nIHRvCisgICAgIyBicmVhayB0aWVzLgorICAgIGRlZiBzZXRfc3VpdGVfZGVwdGgoc3VpdGUpOgorICAgICAgICBmb3IgZGVwIGluIHN1aXRlLmRlcGVuZGVuY2llczoKKyAgICAgICAgICAgIG5ld19kZXB0aCA9IHNldF9zdWl0ZV9kZXB0aChkZXApICsgMQorICAgICAgICAgICAgaWYgbmV3X2RlcHRoID4gc3VpdGUuZGVwdGg6CisgICAgICAgICAgICAgICAgc3VpdGUuZGVwdGggPSBuZXdfZGVwdGgKKyAgICAgICAgcmV0dXJuIHN1aXRlLmRlcHRoCisgICAgZm9yIGluZGV4LCBzdWl0ZSBpbiBlbnVtZXJhdGUoc3VpdGVzKToKKyAgICAgICAgc2V0X3N1aXRlX2RlcHRoKHN1aXRlKQorICAgICAgICBzdWl0ZS5pbmRleCA9IGluZGV4CisgICAgc3VpdGVzLnNvcnQoY21wPWxhbWJkYSBhLGI6IGNtcCgoYS5kZXB0aCwgYS5pbmRleCksIChiLmRlcHRoLCBiLmluZGV4KSkpCisgICAgcmV0dXJuIHRlc3Rsb2FkZXIuc3VpdGVDbGFzcyhzdWl0ZXMpCisKK2RlZiBydW5UZXN0cyh0YywgdHlwZT0icnVudGltZSIpOgorCisgICAgc3VpdGUgPSBsb2FkVGVzdHModGMsIHR5cGUpCisgICAgYmIubm90ZSgiVGVzdCBtb2R1bGVzICAlcyIgJSB0Yy50ZXN0c2xpc3QpCisgICAgaWYgaGFzYXR0cih0YywgInRhZ2V4cCIpIGFuZCB0Yy50YWdleHA6CisgICAgICAgIGJiLm5vdGUoIkZpbHRlciB0ZXN0IGNhc2VzIGJ5IHRhZ3M6ICVzIiAlIHRjLnRhZ2V4cCkKKyAgICBiYi5ub3RlKCJGb3VuZCAlcyB0ZXN0cyIgJSBzdWl0ZS5jb3VudFRlc3RDYXNlcygpKQorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKQorICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisKKyAgICByZXR1cm4gcmVzdWx0CisKK0BMb2dSZXN1bHRzCitjbGFzcyBvZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGFzUGFja2FnZShzZWxmLCBwa2cpOgorICAgICAgICBmb3IgaXRlbSBpbiBvZVRlc3QudGMucGtnbWFuaWZlc3Quc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiByZS5tYXRjaChwa2csIGl0ZW0pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhc0ZlYXR1cmUoc2VsZixmZWF0dXJlKToKKworICAgICAgICBpZiBmZWF0dXJlIGluIG9lVGVzdC50Yy5pbWFnZWZlYXR1cmVzIG9yIFwKKyAgICAgICAgICAgICAgICBmZWF0dXJlIGluIG9lVGVzdC50Yy5kaXN0cm9mZWF0dXJlczoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3Mgb2VSdW50aW1lVGVzdChvZVRlc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIHNlbGYudGFyZ2V0ID0gb2VSdW50aW1lVGVzdC50Yy50YXJnZXQKKyAgICAgICAgc3VwZXIob2VSdW50aW1lVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBDaGVjayBpZiB0ZXN0IG5lZWRzIHRvIHJ1bgorICAgICAgICBpZiBzZWxmLnRjLnNpZ3Rlcm06CisgICAgICAgICAgICBzZWxmLmZhaWwoIkdvdCBTSUdURVJNIikKKyAgICAgICAgZWxpZiAodHlwZShzZWxmLnRhcmdldCkuX19uYW1lX18gPT0gIlFlbXVUYXJnZXQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRhcmdldC5jaGVjaygpLCBtc2cgPSAiUWVtdSBub3QgcnVubmluZz8iKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIElmIGEgdGVzdCBmYWlscyBvciB0aGVyZSBpcyBhbiBleGNlcHRpb24KKyAgICAgICAgaWYgbm90IGV4Y19pbmZvKCkgPT0gKE5vbmUsIE5vbmUsIE5vbmUpOgorICAgICAgICAgICAgZXhjX2NsZWFyKCkKKyAgICAgICAgICAgICNPbmx5IGR1bXAgZm9yIFFlbXVUYXJnZXQKKyAgICAgICAgICAgIGlmICh0eXBlKHNlbGYudGFyZ2V0KS5fX25hbWVfXyA9PSAiUWVtdVRhcmdldCIpOgorICAgICAgICAgICAgICAgIHNlbGYudGMuaG9zdF9kdW1wZXIuY3JlYXRlX2RpcihzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQudGFyZ2V0X2R1bXBlci5kdW1wX3RhcmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGMuaG9zdF9kdW1wZXIuZHVtcF9kaXIpCisgICAgICAgICAgICAgICAgcHJpbnQgKCIlcyBkdW1wIGRhdGEgc3RvcmVkIGluICVzIiAlIChzZWxmLl90ZXN0TWV0aG9kTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfZGlyKSkKKworICAgICNUT0RPOiB1c2UgcGFja2FnZV9tYW5hZ2VyLnB5IHRvIGluc3RhbGwgcGFja2FnZXMgb24gYW55IHR5cGUgb2YgaW1hZ2UKKyAgICBkZWYgaW5zdGFsbF9wYWNrYWdlcyhzZWxmLCBwYWNrYWdlbGlzdCk6CisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgKHN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bigic21hcnQgaW5zdGFsbCAteSAiK3BhY2thZ2UpCisgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKK2NsYXNzIG9lU0RLVGVzdChvZVRlc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIHNlbGYuc2RrdGVzdGRpciA9IG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyCisgICAgICAgIHN1cGVyKG9lU0RLVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBoYXNIb3N0UGFja2FnZShzZWxmLCBwa2cpOgorCisgICAgICAgIGlmIHJlLnNlYXJjaChwa2csIG9lVGVzdC50Yy5ob3N0cGtnbWFuaWZlc3QpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQorCitkZWYgZ2V0bW9kdWxlKHBvcz0yKToKKyAgICAjIHN0YWNrIHJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyBjb250YWluZyBmcmFtZSBpbmZvcm1hdGlvbgorICAgICMgRmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdCB0aGUgaXMgY3VycmVudCBmcmFtZSwgY2FsbGVyIGlzIDEKKyAgICBmcmFtZWluZm8gPSBpbnNwZWN0LnN0YWNrKClbcG9zXQorICAgIG1vZG5hbWUgPSBpbnNwZWN0LmdldG1vZHVsZW5hbWUoZnJhbWVpbmZvWzFdKQorICAgICNtb2RuYW1lID0gaW5zcGVjdC5nZXRtb2R1bGUoZnJhbWVpbmZvWzBdKS5fX25hbWVfXworICAgIHJldHVybiBtb2RuYW1lCisKK2RlZiBza2lwTW9kdWxlKHJlYXNvbiwgcG9zPTIpOgorICAgIG1vZG5hbWUgPSBnZXRtb2R1bGUocG9zKQorICAgIGlmIG1vZG5hbWUgbm90IGluIG9lVGVzdC50Yy50ZXN0c3JlcXVpcmVkOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiJXM6ICVzIiAlIChtb2RuYW1lLCByZWFzb24pKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiXG5UZXN0ICVzIHdhbnRzIHRvIGJlIHNraXBwZWQuXG5SZWFzb24gaXM6ICVzIiBcCisgICAgICAgICAgICAgICAgIlxuVGVzdCB3YXMgcmVxdWlyZWQgaW4gVEVTVF9TVUlURVMsIHNvIGVpdGhlciB0aGUgY29uZGl0aW9uIGZvciBza2lwcGluZyBpcyB3cm9uZyIgXAorICAgICAgICAgICAgICAgICJcbm9yIHRoZSBpbWFnZSByZWFsbHkgZG9lc24ndCBoYXZlIHRoZSByZXF1aXJlZCBmZWF0dXJlL3BhY2thZ2Ugd2hlbiBpdCBzaG91bGQuIiAlIChtb2RuYW1lLCByZWFzb24pKQorCitkZWYgc2tpcE1vZHVsZUlmKGNvbmQsIHJlYXNvbik6CisKKyAgICBpZiBjb25kOgorICAgICAgICBza2lwTW9kdWxlKHJlYXNvbiwgMykKKworZGVmIHNraXBNb2R1bGVVbmxlc3MoY29uZCwgcmVhc29uKToKKworICAgIGlmIG5vdCBjb25kOgorICAgICAgICBza2lwTW9kdWxlKHJlYXNvbiwgMykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVuZXhwb3J0ZWQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bmV4cG9ydGVkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2NDQyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bmV4cG9ydGVkLnB5CkBAIC0wLDAgKzEsMTQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIHNjcmlwdCBzaG91bGQgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0gdG8gcnVuIGltYWdlIHRlc3RzLgorIyBJdCBuZWVkcyBhIGpzb24gZmlsZSBhcyBpbnB1dCBhcyBleHBvcnRlZCBieSB0aGUgYnVpbGQuCisjIEUuZyBmb3IgYW4gYWxyZWFkeSBidWlsdCBpbWFnZToKKyMtIGV4cG9ydCB0aGUgdGVzdHM6CisjICAgVEVTVF9FWFBPUlRfT05MWSA9ICIxIgorIyAgIFRFU1RfVEFSR0VUICA9ICJzaW1wbGVyZW1vdGUiCisjICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC43LjIiCisjICAgVEVTVF9TRVJWRVJfSVAgPSAiMTkyLjE2OC43LjEiCisjIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZQorIyBTZXR1cCB5b3VyIHRhcmdldCwgZS5nIGZvciBxZW11OiBydW5xZW11IGNvcmUtaW1hZ2Utc2F0bworIyBjZCBidWlsZC90bXAvdGVzdGltYWdlL2NvcmUtaW1hZ2Utc2F0bworIyAuL3J1bmV4cG9ydGVkLnB5IHRlc3RkYXRhLmpzb24KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisKK3RyeToKKyAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IGpzb24KKworc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIm9lcWEiKSkpCisKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IHJ1blRlc3RzCitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAorZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IGdldF9ob3N0X2R1bXBlcgorCisjIHRoaXMgaXNuJ3QgcHJldHR5IGJ1dCB3ZSBuZWVkIGEgZmFrZSB0YXJnZXQgb2JqZWN0CisjIGZvciBydW5uaW5nIHRoZSB0ZXN0cyBleHRlcm5hbGx5IGFzIHdlIGRvbid0IGNhcmUKKyMgYWJvdXQgZGVwbG95L3N0YXJ0IHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY29ubmVjdGlvbiBtZXRob2RzIChydW4sIGNvcHkpCitjbGFzcyBGYWtlVGFyZ2V0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorICAgICAgICBzZWxmLmRhdGV0aW1lID0gdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJyx0aW1lLmdtdGltZSgpKQorICAgICAgICBzZWxmLnRlc3RkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICBkZWYgZXhwb3J0U3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuc3NobG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIHNzaGxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAic3NoX3RhcmdldF9sb2ciKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhzc2hsb2dsaW5rKToKKyAgICAgICAgICAgIG9zLnVubGluayhzc2hsb2dsaW5rKQorICAgICAgICBvcy5zeW1saW5rKHNlbGYuc3NobG9nLCBzc2hsb2dsaW5rKQorICAgICAgICBwcmludCgiU1NIIGxvZyBmaWxlOiAlcyIgJSAgc2VsZi5zc2hsb2cpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woc2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKworICAgIGRlZiBydW4oc2VsZiwgY21kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJ1bihjbWQsIHRpbWVvdXQpCisKKyAgICBkZWYgY29weV90byhzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfdG8obG9jYWxwYXRoLCByZW1vdGVwYXRoKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfZnJvbShyZW1vdGVwYXRoLCBsb2NhbHBhdGgpCisKKworY2xhc3MgTXlEYXRhRGljdChkaWN0KToKKyAgICBkZWYgZ2V0VmFyKHNlbGYsIGtleSwgdW51c2VkID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldChrZXksICIiKQorCitjbGFzcyBUZXN0Q29udGV4dChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kID0gTm9uZQorICAgICAgICBzZWxmLnRhcmdldCA9IE5vbmUKKworZGVmIG1haW4oKToKKworICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbb3B0aW9uc10gPGpzb24gZmlsZT4iCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRhcmdldC1pcCIsIGRlc3Q9ImlwIiwgaGVscD0iVGhlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBtYWNoaW5lLiBVc2UgdGhpcyB0byBcCisgICAgICAgICAgICBvdmVyd3JpdGUgdGhlIHZhbHVlIGRldGVybWluZWQgZnJvbSBURVNUX1RBUkdFVF9JUCBhdCBidWlsZCB0aW1lIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1zZXJ2ZXItaXAiLCBkZXN0PSJzZXJ2ZXJfaXAiLCBoZWxwPSJUaGUgSVAgYWRkcmVzcyBvZiB0aGlzIG1hY2hpbmUuIFVzZSB0aGlzIHRvIFwKKyAgICAgICAgICAgIG92ZXJ3cml0ZSB0aGUgdmFsdWUgZGV0ZXJtaW5lZCBmcm9tIFRFU1RfU0VSVkVSX0lQIGF0IGJ1aWxkIHRpbWUuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWQiLCAiLS1kZXBsb3ktZGlyIiwgZGVzdD0iZGVwbG95X2RpciIsIGhlbHA9IkZ1bGwgcGF0aCB0byB0aGUgcGFja2FnZSBmZWVkcywgdGhhdCB0aGlzIFwKKyAgICAgICAgICAgIHRoZSBjb250ZW50cyBvZiB3aGF0IHVzZWQgdG8gYmUgREVQTE9ZX0RJUiBvbiB0aGUgYnVpbGQgbWFjaGluZS4gSWYgbm90IHNwZWNpZmllZCBpdCB3aWxsIHVzZSB0aGUgdmFsdWUgXAorICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBqc29uIGlmIHRoYXQgZGlyZWN0b3J5IGFjdHVhbGx5IGV4aXN0cyBvciBpdCB3aWxsIGVycm9yIG91dC4iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxvZy1kaXIiLCBkZXN0PSJsb2dfZGlyIiwgaGVscD0iVGhpcyBzZXRzIHRoZSBwYXRoIGZvciBURVNUX0xPR19ESVIuIElmIG5vdCBzcGVjaWZpZWQgXAorICAgICAgICAgICAgdGhlIGN1cnJlbnQgZGlyIGlzIHVzZWQuIFRoaXMgaXMgdXNlZCBmb3IgdXN1YWxseSBjcmVhdGluZyBhIHNzaCBsb2cgZmlsZSBhbmQgYSBzY3AgdGVzdCBmaWxlLiIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHBhcnNlci5lcnJvcigiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuIFRoZSBvbmUgYW5kIG9ubHkgYXJndW1lbnQgc2hvdWxkIGJlIGEganNvbiBmaWxlIGV4cG9ydGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0iKQorCisgICAgd2l0aCBvcGVuKGFyZ3NbMF0sICJyIikgYXMgZjoKKyAgICAgICAgbG9hZGVkID0ganNvbi5sb2FkKGYpCisKKyAgICBpZiBvcHRpb25zLmlwOgorICAgICAgICBsb2FkZWRbInRhcmdldCJdWyJpcCJdID0gb3B0aW9ucy5pcAorICAgIGlmIG9wdGlvbnMuc2VydmVyX2lwOgorICAgICAgICBsb2FkZWRbInRhcmdldCJdWyJzZXJ2ZXJfaXAiXSA9IG9wdGlvbnMuc2VydmVyX2lwCisKKyAgICBkID0gTXlEYXRhRGljdCgpCisgICAgZm9yIGtleSBpbiBsb2FkZWRbImQiXS5rZXlzKCk6CisgICAgICAgIGRba2V5XSA9IGxvYWRlZFsiZCJdW2tleV0KKworICAgIGlmIG9wdGlvbnMubG9nX2RpcjoKKyAgICAgICAgZFsiVEVTVF9MT0dfRElSIl0gPSBvcHRpb25zLmxvZ19kaXIKKyAgICBlbHNlOgorICAgICAgICBkWyJURVNUX0xPR19ESVIiXSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQorICAgIGlmIG9wdGlvbnMuZGVwbG95X2RpcjoKKyAgICAgICAgZFsiREVQTE9ZX0RJUiJdID0gb3B0aW9ucy5kZXBsb3lfZGlyCisgICAgZWxzZToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZFsiREVQTE9ZX0RJUiJdKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhlIHBhdGggdG8gREVQTE9ZX0RJUiBkb2VzIG5vdCBleGlzdHM6ICVzIiAlIGRbIkRFUExPWV9ESVIiXSkKKworCisgICAgdGFyZ2V0ID0gRmFrZVRhcmdldChkKQorICAgIGZvciBrZXkgaW4gbG9hZGVkWyJ0YXJnZXQiXS5rZXlzKCk6CisgICAgICAgIHNldGF0dHIodGFyZ2V0LCBrZXksIGxvYWRlZFsidGFyZ2V0Il1ba2V5XSkKKworICAgIGhvc3RfZHVtcGVyID0gZ2V0X2hvc3RfZHVtcGVyKGQpCisgICAgaG9zdF9kdW1wZXIucGFyZW50X2RpciA9IGxvYWRlZFsiaG9zdF9kdW1wZXIiXVsicGFyZW50X2RpciJdCisgICAgaG9zdF9kdW1wZXIuY21kcyA9IGxvYWRlZFsiaG9zdF9kdW1wZXIiXVsiY21kcyJdCisKKyAgICB0YyA9IFRlc3RDb250ZXh0KCkKKyAgICBzZXRhdHRyKHRjLCAiZCIsIGQpCisgICAgc2V0YXR0cih0YywgInRhcmdldCIsIHRhcmdldCkKKyAgICBzZXRhdHRyKHRjLCAiaG9zdF9kdW1wZXIiLCBob3N0X2R1bXBlcikKKyAgICBmb3Iga2V5IGluIGxvYWRlZC5rZXlzKCk6CisgICAgICAgIGlmIGtleSAhPSAiZCIgYW5kIGtleSAhPSAidGFyZ2V0IiBhbmQga2V5ICE9ICJob3N0X2R1bXBlciI6CisgICAgICAgICAgICBzZXRhdHRyKHRjLCBrZXksIGxvYWRlZFtrZXldKQorCisgICAgdGFyZ2V0LmV4cG9ydFN0YXJ0KCkKKyAgICBydW5UZXN0cyh0YykKKworICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YzZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3B0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzljNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3B0ZXN0LnB5CkBAIC0wLDAgKzEsMTI1IEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCBzaHV0aWwKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMubG9ncGFyc2VyIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMuaHR0cHNlcnZlciBpbXBvcnQgSFRUUFNlcnZpY2UKK2ltcG9ydCBiYgoraW1wb3J0IGdsb2IKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCBScG1Qa2dzTGlzdAoraW1wb3J0IHN1YnByb2Nlc3MKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZmVhdHVyZSIpCisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic21hcnQiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHNtYXJ0IGluc3RhbGxlZCIpCisgICAgaWYgInBhY2thZ2VfcnBtIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJQQUNLQUdFX0NMQVNTRVMiLCBUcnVlKS5zcGxpdCgpWzBdOgorICAgICAgICBza2lwTW9kdWxlKCJScG0gaXMgbm90IHRoZSBwcmltYXJ5IHBhY2thZ2UgbWFuYWdlciIpCisKK2NsYXNzIFB0ZXN0UnVubmVyVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgICMgYSBwdGVzdCBsb2cgcGFyc2VyCisgICAgZGVmIHBhcnNlX3B0ZXN0KHNlbGYsIGxvZ2ZpbGUpOgorICAgICAgICBwYXJzZXIgPSBMcGFyc2VyKHRlc3RfMF9wYXNzX3JlZ2V4PSJeUEFTUzooLispIiwgdGVzdF8wX2ZhaWxfcmVnZXg9Il5GQUlMOiguKykiLCBzZWN0aW9uXzBfYmVnaW5fcmVnZXg9Il5CRUdJTjogLiovKC4rKS9wdGVzdCIsIHNlY3Rpb25fMF9lbmRfcmVnZXg9Il5FTkQ6IC4qLyguKykvcHRlc3QiKQorICAgICAgICBwYXJzZXIuaW5pdCgpCisgICAgICAgIHJlc3VsdCA9IFJlc3VsdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHJlc3VsdF90dXBsZSA9IHBhcnNlci5wYXJzZV9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdF90dXBsZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBsaW5lX3R5cGUsIGNhdGVnb3J5LCBzdGF0dXMsIG5hbWUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICdzZWN0aW9uJyBhbmQgc3RhdHVzID09ICdiZWdpbic6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9zZWN0aW9uID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICd0ZXN0JyBhbmQgc3RhdHVzID09ICdwYXNzJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3JlKGN1cnJlbnRfc2VjdGlvbiwgbmFtZSwgc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICd0ZXN0JyBhbmQgc3RhdHVzID09ICdmYWlsJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3JlKGN1cnJlbnRfc2VjdGlvbiwgbmFtZSwgc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJlc3VsdC5zb3J0X3Rlc3RzKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgICNub3RlIHRoZSBleGlzdGluZyBjaGFubmVscyB0aGF0IGFyZSBvbiB0aGUgYm9hcmQgYmVmb3JlIGNyZWF0aW5nIG5ldyBvbmVzCisjICAgICAgICBzZWxmLmV4aXN0aW5nY2hhbm5lbHMgPSBzZXQoKQorIyAgICAgICAgKHN0YXR1cywgcmVzdWx0KSA9IG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bignc21hcnQgY2hhbm5lbCAtLXNob3cgfCBncmVwICJcWyInLCAwKQorIyAgICAgICAgZm9yIHggaW4gcmVzdWx0LnNwbGl0KCJcbiIpOgorIyAgICAgICAgICAgIHNlbGYuZXhpc3RpbmdjaGFubmVscy5hZGQoeCkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlciA9IEhUVFBTZXJ2aWNlKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuc2VydmVyX2lwKQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0YXJ0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0b3AoKQorICAgICAgICAjcmVtb3ZlIGNyZWF0ZWQgY2hhbm5lbHMgdG8gYmUgYWJsZSB0byByZXBlYXQgdGhlIHRlc3RzIG9uIHNhbWUgaW1hZ2UKKyMgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1zaG93IHwgZ3JlcCAiXFsiJywgMCkKKyMgICAgICAgIGZvciB4IGluIHJlc3VsdC5zcGxpdCgiXG4iKToKKyMgICAgICAgICAgICBpZiB4IG5vdCBpbiBzZWxmLmV4aXN0aW5nY2hhbm5lbHM6CisjICAgICAgICAgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bignc21hcnQgY2hhbm5lbCAtLXJlbW92ZSAnK3hbMTotMV0rJyAteScsIDApCisKKyAgICBkZWYgYWRkX3NtYXJ0X2NoYW5uZWwoc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBzZWxmLnRjLmQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZGVwbG95X3VybCA9ICdodHRwOi8vJXM6JXMvJXMnICUoc2VsZi50YXJnZXQuc2VydmVyX2lwLCBzZWxmLnJlcG9fc2VydmVyLnBvcnQsIGltYWdlX3BrZ3R5cGUpCisgICAgICAgIHBrZ2FyY2hzID0gc2VsZi50Yy5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnJlcGxhY2UoIi0iLCJfIikuc3BsaXQoKQorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKCclcy8lcycgJSAoc2VsZi5yZXBvX3NlcnZlci5yb290X2RpciwgaW1hZ2VfcGtndHlwZSkpOgorICAgICAgICAgICAgaWYgYXJjaCBpbiBwa2dhcmNoczoKKyAgICAgICAgICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLXkgLS1hZGQge2F9IHR5cGU9cnBtLW1kIGJhc2V1cmw9e3V9L3thfScuZm9ybWF0KGE9YXJjaCwgdT1kZXBsb3lfdXJsKSwgMCkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzbWFydCB1cGRhdGUnLCAwKQorCisgICAgZGVmIGluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLCBnbG9icz1Ob25lKToKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGxlZF9wa2dzLnR4dCIpCisgICAgICAgIHNlbGYucGtnc19saXN0ID0gUnBtUGtnc0xpc3Qob2VSdW50aW1lVGVzdC50Yy5kLCBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignYXJjaF92YXInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignb3NfdmFyJywgVHJ1ZSkpCisgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19maWxlLCAidysiKSBhcyBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLndyaXRlKHNlbGYucGtnc19saXN0Lmxpc3QoImFyY2giKSkKKworICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvZS1wa2dkYXRhLXV0aWwiKSwKKyAgICAgICAgICAgICAgICItcCIsIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksICJnbG9iIiwgaW5zdGFsbGVkX3BrZ3NfZmlsZSwKKyAgICAgICAgICAgICAgIGdsb2JzXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgLi4uIikKKyAgICAgICAgICAgIGNvbXBsZW1lbnRhcnlfcGtncyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDb3VsZCBub3QgY29tcHV0ZSBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGxpc3QuIENvbW1hbmQgIgorICAgICAgICAgICAgICAgICAgICAgIiclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBjb21wbGVtZW50YXJ5X3BrZ3Muc3BsaXQoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnB0ZXN0X2xvZyA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLFRydWUpLCAicHRlc3QtJXMubG9nIiAlIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkpCisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3B0ZXN0cnVubmVyKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9zbWFydF9jaGFubmVsKCkKKyAgICAgICAgKHJ1bm5lcnN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bignd2hpY2ggcHRlc3QtcnVubmVyJywgMCkKKyAgICAgICAgY29uZCA9IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgicHRlc3QtcnVubmVyIikgYW5kIG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicHRlc3QiKSBhbmQgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCItcHRlc3QiKSBhbmQgKHJ1bm5lcnN0YXR1cyAhPSAwKQorICAgICAgICBpZiBjb25kOgorICAgICAgICAgICAgc2VsZi5pbnN0YWxsX3BhY2thZ2VzKHNlbGYuaW5zdGFsbF9jb21wbGVtZW50YXJ5KCIqLXB0ZXN0IikpCisgICAgICAgICAgICBzZWxmLmluc3RhbGxfcGFja2FnZXMoWydwdGVzdC1ydW5uZXInXSkKKworICAgICAgICAocnVubmVyc3RhdHVzLCByZXN1bHQpID0gc2VsZi50YXJnZXQucnVuKCcvdXNyL2Jpbi9wdGVzdC1ydW5uZXIgPiAvdG1wL3B0ZXN0LmxvZyAyPiYxJywgMCkKKyAgICAgICAgI2V4aXQgY29kZSBpcyAhPTAgZXZlbiBpZiBwdGVzdC1ydW5uZXIgZXhlY3V0ZXMgYmVjYXVzZSBzb21lIHB0ZXN0IHRlc3RzIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXJzdGF0dXMgIT0gMTI3LCBtc2c9IkNhbm5vdCBleGVjdXRlIHB0ZXN0LXJ1bm5lciEiKQorICAgICAgICBzZWxmLnRhcmdldC5jb3B5X2Zyb20oJy90bXAvcHRlc3QubG9nJywgc2VsZi5wdGVzdF9sb2cpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLnB0ZXN0X2xvZywgInB0ZXN0LmxvZyIpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJzZV9wdGVzdCgicHRlc3QubG9nIikKKyAgICAgICAgbG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24gPSAiLi9yZXN1bHRzIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2dfcmVzdWx0c190b19sb2NhdGlvbik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uKQorICAgICAgICBvcy5tYWtlZGlycyhsb2dfcmVzdWx0c190b19sb2NhdGlvbikKKworICAgICAgICByZXN1bHQubG9nX2FzX2ZpbGVzKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uLCB0ZXN0X3N0YXR1cyA9IFsncGFzcycsJ2ZhaWwnXSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9fcWVtdXRpbnkucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3FlbXV0aW55LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzI5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3FlbXV0aW55LnB5CkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMucWVtdXRpbnlydW5uZXIgaW1wb3J0ICoKKworY2xhc3MgUWVtdVRpbnlUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHRlc3RfYm9vdF90aW55KHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuX3NlcmlhbCgndW5hbWUgLWEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInlvY3RvLXRpbnkiIGluIG91dHB1dCwgbXNnPSJDYW5ub3QgZGV0ZWN0IHBva3kgdGlueSBib290ISIpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmNiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRjdnMucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgQnVpbGRDdnNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9mdHAuZ251Lm9yZy9ub24tZ251L2N2cy9zb3VyY2UvZmVhdHVyZS8xLjEyLjEzL2N2cy0xLjEyLjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfY3ZzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRpcHRhYmxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWUyNTJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgQnVpbGRJcHRhYmxlc1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gVGFyZ2V0QnVpbGRQcm9qZWN0KG9lUnVudGltZVRlc3QudGMudGFyZ2V0LCBvZVJ1bnRpbWVUZXN0LnRjLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL25ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvaXB0YWJsZXMtMS40LjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfaXB0YWJsZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYjA2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weQpAQCAtMCwwICsxLDI4IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBUYXJnZXRCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCitjbGFzcyBTdWRva3VUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50L3N1ZG9rdS1zYXZhbnQtMS4zL3N1ZG9rdS1zYXZhbnQtMS4zLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nvbm5tYW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2OWU1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5CkBAIC0wLDAgKzEsNTQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiY29ubm1hbiIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBjb25ubWFuIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIENvbm5tYW5UZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNlcnZpY2Vfc3RhdHVzKHNlbGYsIHNlcnZpY2UpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInN5c3RlbWQiKToKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCBzdGF0dXMgLWwgJXMnICUgc2VydmljZSkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGdldCBzdGF0dXMgb3IgbG9ncyBmb3IgJXMiICUgc2VydmljZQorCisgICAgQHRlc3RjYXNlKDk2MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2Nvbm5tYW5kX2hlbHAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy91c3Ivc2Jpbi9jb25ubWFuZCAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgyMjEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfY29ubm1hbmRfaGVscCcpCisgICAgZGVmIHRlc3RfY29ubm1hbmRfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCcpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcHJpbnQgc2VsZi5zZXJ2aWNlX3N0YXR1cygiY29ubm1hbiIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGNvbm5tYW5kIHByb2Nlc3MgcnVubmluZyIpCisKKyAgICBAdGVzdGNhc2UoMjIzKQorICAgIGRlZiB0ZXN0X29ubHlfb25lX2Nvbm5tYW5kX2luX2JhY2tncm91bmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgT25seSBvbmUgY29ubm1hbmQgaW4gYmFja2dyb3VuZAorICAgICAgICBFeHBlY3RlZDogICAgVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBjb25ubWFuZCBpbnN0YW5jZSBpbiBiYWNrZ3JvdW5kLgorICAgICAgICBQcm9kdWN0OiAgICAgQlNQcworICAgICAgICBBdXRob3I6ICAgICAgQWxleGFuZHJ1IEdlb3JnZXNjdSA8YWxleGFuZHJ1LmMuZ2Vvcmdlc2N1QGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCAnY29ubm1hbmQnIGlzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZAorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbY11vbm5tYW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gZmluZCAiY29ubm1hbmQiIHByb2Nlc3MgcnVubmluZyBpbiBiYWNrZ3JvdW5kLicpCisKKyAgICAgICAgIyBTdGFydCBhIG5ldyBpbnN0YW5jZSBvZiAnY29ubm1hbmQnCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2Nvbm5tYW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gc3RhcnQgYSBuZXcgImNvbm5tYW5kIiBwcm9jZXNzLicpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBvbmx5IG9uZSAnY29ubm1hbmQnIGlzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZAorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbY11vbm5tYW5kIHwgd2MgLWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBmaW5kICJjb25ubWFuZCIgcHJvY2VzcyBydW5uaW5nIGluIGJhY2tncm91bmQuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBpbnQob3V0cHV0KSwgJ0ZvdW5kIHt9IGNvbm5tYW5kIHByb2Nlc3NlcyBydW5uaW5nLCBleHBlY3RlZCAxLicuZm9ybWF0KG91dHB1dCkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9kYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOGZlODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weQpAQCAtMCwwICsxLDMxIEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgoraW1wb3J0IHJlCisKK2NsYXNzIERhdGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSkgPT0gInN5c3RlbWQiOgorICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RvcCBzeXN0ZW1kLXRpbWVzeW5jZCcpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKSA9PSAic3lzdGVtZCI6CisgICAgICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCBzdGFydCBzeXN0ZW1kLXRpbWVzeW5jZCcpCisKKyAgICBAdGVzdGNhc2UoMjExKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfZGF0ZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZGF0ZSArIiVZLSVtLSVkICVUIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byBnZXQgaW5pdGlhbCBkYXRlLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgb2xkRGF0ZSA9IG91dHB1dAorCisgICAgICAgIHNhbXBsZURhdGUgPSAnIjIwMTYtMDgtMDkgMTA6MDA6MDAiJworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJkYXRlIC1zICVzIiAlIHNhbXBsZURhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkRhdGUgc2V0IGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGF0ZSAtUiIpCisgICAgICAgIHAgPSByZS5tYXRjaCgnVHVlLCAwOSBBdWcgMjAxNiAxMDowMDouLiBcKzAwMDAnLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLCBtc2c9IlRoZSBkYXRlIHdhcyBub3Qgc2V0IGNvcnJlY3RseSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZGF0ZSAtcyAiJXMiJyAlIG9sZERhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byByZXNldCBkYXRlLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTU2OWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RmLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworCitjbGFzcyBEZlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjM0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfZGYoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGYgLyB8IHNlZCAtbiAnMnAnIHwgYXdrICd7cHJpbnQgJDR9JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQob3V0cHV0KT41MTIwLCBtc2c9Ik5vdCBlbm91Z2ggc3BhY2Ugb24gaW1hZ2UuIEN1cnJlbnQgc2l6ZSBpcyAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzMTQ3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9kbWVzZy5weQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKworY2xhc3MgRG1lc2dUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIxNSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2RtZXNnKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdkbWVzZyB8IGdyZXAgLXYgbW1jaS1wbDE4eCB8IGdyZXAgLXYgImVycm9yIGNoYW5naW5nIG5ldCBpbnRlcmZhY2UgbmFtZSIgfCBncmVwIC1pdiAiZG1hIHRpbWVvdXQiIHwgZ3JlcCAtdiB1c2JoaWQgfCBncmVwIC1pIGVycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDEsIG1zZyA9ICJFcnJvciBtZXNzYWdlcyBpbiBkbWVzZyBsb2c6ICVzIiAlIG91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4MzM5NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK3N0YXRpYyBpbnQgX19pbml0IGhlbGxvX2luaXQodm9pZCkKK3sKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiSGVsbG8gd29ybGQhXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoZWxsb19jbGVhbnVwKHZvaWQpCit7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkNsZWFuaW5nIHVwIGhlbGxvbW9kLlxuIik7Cit9CisKK21vZHVsZV9pbml0KGhlbGxvX2luaXQpOworbW9kdWxlX2V4aXQoaGVsbG9fY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZSBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTJkNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kX21ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorb2JqLW0gOj0gaGVsbG9tb2QubworS0RJUiA6PSAvdXNyL3NyYy9rZXJuZWwKKworYWxsOgorCSQoTUFLRSkgLUMgJChLRElSKSBNPSQoUFdEKSBtb2R1bGVzCisKK2NsZWFuOgorCSQoTUFLRSkgLUMgJChLRElSKSBNPSQoUFdEKSBjbGVhbgpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuYyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4Mzg5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmMKQEAgLTAsMCArMSwyNiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitkb3VibGUgY29udmVydChsb25nIGxvbmcgbCkKK3sKKyAgcmV0dXJuIChkb3VibGUpbDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pIHsKKworICBsb25nIGxvbmcgbCA9IDEwOworICBkb3VibGUgZjsKKyAgZG91YmxlIGNoZWNrID0gMTAuMDsKKworICBmID0gY29udmVydChsKTsKKyAgcHJpbnRmKCJjb252ZXJ0OiAlbGxkID0+ICVmXG4iLCBsLCBmKTsKKyAgaWYgKCBmICE9IGNoZWNrICkgZXhpdCgxKTsKKworICBmID0gMTIzNC42NzsKKyAgY2hlY2sgPSAxMjM0LjA7CisgIHByaW50ZigiZmxvb3JmKCVmKSA9ICVmXG4iLCBmLCBmbG9vcmYoZikpOworICBpZiAoIGZsb29yZihmKSAhPSBjaGVjaykgZXhpdCgxKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcCBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTFhNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuY3BwCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGxpbWl0cz4KKworaW50IG1haW4oKSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5YzhmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsCkBAIC0wLDAgKzEsMiBAQAorJGEgPSA5LjAxZSsyMSAtIDkuMDFlKzIxICsgMC4wMTsKK3ByaW50ICgidGhlIHZhbHVlIG9mIGEgaXMgIiwgJGEsICJcbiIpOwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2EyMjczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgb3MKKworb3Muc3lzdGVtKCd0b3VjaCAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCisKK2EgPSA5LjAxZSsyMSAtIDkuMDFlKzIxICsgMC4wMQorcHJpbnQgInRoZSB2YWx1ZSBvZiBhIGlzICVzIiAlIGEKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0bWFrZWZpbGUgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdG1ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTg0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdG1ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAordGVzdDogdGVzdC5vCisJZ2NjIC1vIHRlc3QgdGVzdC5vIC1sbQordGVzdC5vOiB0ZXN0LmMKKwlnY2MgLWMgdGVzdC5jCisKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9nY2MucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZ2NjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGNkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZ2NjLnB5CkBAIC0wLDAgKzEsNDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgR2NjQ29tcGlsZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3QuYyIpLCAiL3RtcC90ZXN0LmMiKQorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdG1ha2VmaWxlIiksICIvdG1wL3Rlc3RtYWtlZmlsZSIpCisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LmNwcCIpLCAiL3RtcC90ZXN0LmNwcCIpCisKKyAgICBAdGVzdGNhc2UoMjAzKQorICAgIGRlZiB0ZXN0X2djY19jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnY2MgL3RtcC90ZXN0LmMgLW8gL3RtcC90ZXN0IC1sbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9ImdjYyBjb21waWxlIGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy90bXAvdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgY29tcGlsZWQgZmlsZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMjAwKQorICAgIGRlZiB0ZXN0X2dwcF9jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnKysgL3RtcC90ZXN0LmMgLW8gL3RtcC90ZXN0IC1sbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9ImcrKyBjb21waWxlIGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy90bXAvdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgY29tcGlsZWQgZmlsZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE0MikKKyAgICBkZWYgdGVzdF9ncHAyX2NvbXBpbGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2crKyAvdG1wL3Rlc3QuY3BwIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnKysgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIwNCkKKyAgICBkZWYgdGVzdF9tYWtlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdjZCAvdG1wOyBtYWtlIC1mIHRlc3RtYWtlZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgbWFrZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QuYyAvdG1wL3Rlc3QubyAvdG1wL3Rlc3QgL3RtcC90ZXN0bWFrZWZpbGUiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2tlcm5lbG1vZHVsZS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9rZXJuZWxtb2R1bGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4MTcyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9rZXJuZWxtb2R1bGUucHkKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworCitjbGFzcyBLZXJuZWxNb2R1bGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAiaGVsbG9tb2QuYyIpLCAiL3RtcC9oZWxsb21vZC5jIikKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgImhlbGxvbW9kX21ha2VmaWxlIiksICIvdG1wL01ha2VmaWxlIikKKworICAgIEB0ZXN0Y2FzZSgnMzE2JykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X2djY19jb21waWxlJykKKyAgICBkZWYgdGVzdF9rZXJuZWxfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbWRzID0gWworICAgICAgICAgICAgJ2NkIC91c3Ivc3JjL2tlcm5lbCAmJiBtYWtlIHNjcmlwdHMnLAorICAgICAgICAgICAgJ2NkIC90bXAgJiYgbWFrZScsCisgICAgICAgICAgICAnY2QgL3RtcCAmJiBpbnNtb2QgaGVsbG9tb2Qua28nLAorICAgICAgICAgICAgJ2xzbW9kIHwgZ3JlcCBoZWxsb21vZCcsCisgICAgICAgICAgICAnZG1lc2cgfCBncmVwIEhlbGxvJywKKyAgICAgICAgICAgICdybW1vZCBoZWxsb21vZCcsICdkbWVzZyB8IGdyZXAgIkNsZWFuaW5nIHVwIGhlbGxvbW9kIicKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIGNtZCBpbiBjbWRzOgorICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihjbWQsIDkwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlxuIi5qb2luKFtjbWQsIG91dHB1dF0pKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3JtIC1mIC90bXAvTWFrZWZpbGUgL3RtcC9oZWxsb21vZC5jJykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9sZGQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbGRkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjM4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbGRkLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCitjbGFzcyBMZGRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2MikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2xkZF9leGlzdHMoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIGxkZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAibGRkIGRvZXMgbm90IGV4aXN0IGluIFBBVEg6IHdoaWNoIGxkZDogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIzOSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9sZGRfZXhpc3RzJykKKyAgICBkZWYgdGVzdF9sZGRfcnRsZGxpc3RfY2hlY2soc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2ZvciBpIGluICQod2hpY2ggbGRkIHwgeGFyZ3MgY2F0IHwgZ3JlcCAiXlJUTERMSVNUInxjdXQgLWRcJz1cJyAtZjJ8dHIgLWQgXCciXCcpOyBkbyB0ZXN0IC1mICRpICYmIGVjaG8gJGkgJiYgYnJlYWs7IGRvbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gImxkZCBwYXRoIG5vdCBjb3JyZWN0IG9yIFJUTERMSVNUIGZpbGVzIGRvbid0IGV4aXN0LiAiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xvZ3JvdGF0ZS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9sb2dyb3RhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkNzkxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9sb2dyb3RhdGUucHkKQEAgLTAsMCArMSwyOCBAQAorIyBUaGlzIHRlc3Qgc2hvdWxkIGNvdmVyIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy90cl9zaG93X2Nhc2UuY2dpP2Nhc2VfaWQ9Mjg5IHRlc3RjYXNlCisjIE5vdGUgdGhhdCB0aGUgaW1hZ2UgdW5kZXIgdGVzdCBtdXN0IGhhdmUgbG9ncm90YXRlIGluc3RhbGxlZAorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImxvZ3JvdGF0ZSIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBsb2dyb3RhdGUgcGFja2FnZSBpbiBpbWFnZSIpCisKKworY2xhc3MgTG9ncm90YXRlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfMV9sb2dyb3RhdGVfc2V0dXAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiQ291bGQgbm90IGNyZWF0ZSBsb2dyb3RhdGVfZGlyLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigic2VkIC1pICdzI3d0bXAgeyN3dG1wIHtcXG4gICAgb2xkZGlyIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpciMnIC9ldGMvbG9ncm90YXRlLmNvbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkNvdWxkIG5vdCB3cml0ZSB0byBsb2dyb3RhdGUuY29uZiBmaWxlLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzKSIgJSAoc3RhdHVzLCBvdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDI4OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF8xX2xvZ3JvdGF0ZV9zZXR1cCIpCisgICAgZGVmIHRlc3RfMl9sb2dyb3RhdGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ3JvdGF0ZSAtZiAvZXRjL2xvZ3JvdGF0ZS5jb25mJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJsb2dyb3RhdGUgc2VydmljZSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuIFN0YXR1cyBhbmQgb3V0cHV0OiAlcyBhbmQgJXMiICUgKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKCdscyAtbGEgL2hvbWUvcm9vdC9sb2dyb3RhdGVfZGlyLyB8IHdjIC1sJylbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChvdXRwdXQpPj0zLCBtc2cgPSAibmV3IGxvZ2ZpbGUgY291bGQgbm90IGJlIGNyZWF0ZWQuIExpc3Qgb2YgZmlsZXMgd2l0aGluIGxvZyBkaXJlY3Rvcnk6ICVzIiAlKHNlbGYudGFyZ2V0LnJ1bignbHMgLWxhIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpcicpWzFdKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWJjYzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL211bHRpbGliLnB5CkBAIC0wLDAgKzEsNDggQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgbXVsdGlsaWJzID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiTVVMVElMSUJTIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiAibXVsdGlsaWI6bGliMzIiIG5vdCBpbiBtdWx0aWxpYnM6CisgICAgICAgIHNraXBNb2R1bGUoInRoaXMgaXNuJ3QgYSBtdWx0aWxpYjpsaWIzMiBpbWFnZSIpCisKKworY2xhc3MgTXVsdGlsaWJUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIHMpOgorICAgICAgICAiIiIKKyAgICAgICAgUGFyc2UgdGhlIG91dHB1dCBvZiByZWFkZWxmIC1oIGFuZCByZXR1cm4gdGhlIGJpbmFyeSBjbGFzcywgb3IgZmFpbC4KKyAgICAgICAgIiIiCisgICAgICAgIGwgPSBbbC5zcGxpdCgpWzFdIGZvciBsIGluIHMuc3BsaXQoJ1xuJykgaWYgIkNsYXNzOiIgaW4gbF0KKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHJldHVybiBsWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNhbm5vdCBwYXJzZSByZWFkZWxmIG91dHB1dFxuIiArIHMpCisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2NoZWNrX211bHRpbGliX2xpYmMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGF0IGEgbXVsdGlsaWIgaW1hZ2UgaGFzIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbGliYyBpbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvbGliL2xpYmMuc28uNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL2xpYi9saWJjLnNvLjYiKQorICAgICAgICBjbGFzczMyID0gc2VsZi5wYXJzZShvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvbGliNjQvbGliYy5zby42IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJGYWlsZWQgdG8gcmVhZGVsZiAvbGliNjQvbGliYy5zby42IikKKyAgICAgICAgY2xhc3M2NCA9IHNlbGYucGFyc2Uob3V0cHV0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3MzMiwgIkVMRjMyIiwgbXNnPSIvbGliL2xpYmMuc28uNiBpc24ndCBFTEYzMiAoaXMgJXMpIiAlIGNsYXNzMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3M2NCwgIkVMRjY0IiwgbXNnPSIvbGliNjQvbGliYy5zby42IGlzbid0IEVMRjY0IChpcyAlcykiICUgY2xhc3M2NCkKKworICAgIEB0ZXN0Y2FzZSgnMjc5JykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9jaGVja19tdWx0aWxpYl9saWJjJykKKyAgICBkZWYgdGVzdF9maWxlX2Nvbm5tYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoJ2xpYjMyLWNvbm5tYW4tZ25vbWUnKSwgbXNnPSJUaGlzIHRlc3QgYXNzdW1lcyBsaWIzMi1jb25ubWFuLWdub21lIGlzIGluc3RhbGxlZCIpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvdXNyL2Jpbi9jb25ubWFuLWFwcGxldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL3Vzci9iaW4vY29ubm1hbi1hcHBsZXQiKQorICAgICAgICB0aGVjbGFzcyA9IHNlbGYucGFyc2Uob3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWNsYXNzLCAiRUxGMzIiLCBtc2c9ImNvbm5tYW4tYXBwbGV0IGlzbid0IEVMRjMyIChpcyAlcykiICUgdGhlY2xhc3MpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFtLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODIwNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhbS5weQpAQCAtMCwwICsxLDI1IEBACisjIFRoaXMgdGVzdCBzaG91bGQgY292ZXIgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD0yODcgdGVzdGNhc2UKKyMgTm90ZSB0aGF0IHRoZSBpbWFnZSB1bmRlciB0ZXN0IG11c3QgaGF2ZSAicGFtIiBpbiBESVNUUk9fRkVBVFVSRVMKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJwYW0iKToKKyAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSAncGFtJyBpbiBESVNUUk9fRkVBVFVSRVMiKQorCisKK2NsYXNzIFBhbUJhc2ljVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyODcpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wYW0oc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ2luIC0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAxLCBtc2cgPSAibG9naW4gY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdwYXNzd2QgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJwYXNzd2QgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdSAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInN1IGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndXNlcmFkZCAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInVzZXJhZGQgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9wYXJzZWxvZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwOTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9wYXJzZWxvZ3MucHkKQEAgLTAsMCArMSwyNTcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworI2luIHRoZSBmdXR1cmUgdGhlc2UgbGlzdHMgY291bGQgYmUgbW92ZWQgb3V0c2lkZSBvZiBtb2R1bGUKK2Vycm9ycyA9IFsiZXJyb3IiLCAiY2Fubm90IiwgImNhblwndCIsICJmYWlsZWQiXQorCitjb21tb25fZXJyb3JzID0gWworICAgICIoV1cpIHdhcm5pbmcsIChFRSkgZXJyb3IsIChOSSkgbm90IGltcGxlbWVudGVkLCAoPz8pIHVua25vd24uIiwKKyAgICAiZG1hIHRpbWVvdXQiLAorICAgICJjYW5cJ3QgYWRkIGhpZCBkZXZpY2U6IiwKKyAgICAidXNiaGlkOiBwcm9iZSBvZiAiLAorICAgICJfT1NDIGZhaWxlZCAoQUVfRVJST1IpIiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX1NVUFBPUlQpIiwKKyAgICAiQUVfQUxSRUFEWV9FWElTVFMiLAorICAgICJBQ1BJIF9PU0MgcmVxdWVzdCBmYWlsZWQgKEFFX1NVUFBPUlQpIiwKKyAgICAiY2FuXCd0IGRpc2FibGUgQVNQTSIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcInZlc2FcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSB2ZXNhIiwKKyAgICAiRmFpbGVkIHRvIGxvYWQgbW9kdWxlIFwibW9kZXNldHRpbmdcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBtb2Rlc2V0dGluZyIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcImdseFwiIiwKKyAgICAiRmFpbGVkIHRvIGxvYWQgbW9kdWxlIFwiZmJkZXZcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBmYmRldiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBnbHgiLAorICAgICJbZHJtXSBDYW5ub3QgZmluZCBhbnkgY3J0YyBvciBzaXplcyAtIGdvaW5nIDEwMjR4NzY4IiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX05PVF9GT1VORCk7IGRpc2FibGluZyBBU1BNIiwKKyAgICAiT3BlbiBBQ1BJIGZhaWxlZCAoL3Zhci9ydW4vYWNwaWQuc29ja2V0KSAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkiLAorICAgICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uIGNhbm5vdCBiZSBlbmFibGVkOiBub24tUEFFIGtlcm5lbCEiLAorICAgICJoZC46IHBvc3NpYmx5IGZhaWxlZCBvcGNvZGUiLAorICAgICdORVRMSU5LIElOSVRJQUxJWkFUSU9OIEZBSUxFRCcsCisgICAgJ2tlcm5lbDogQ2Fubm90IGZpbmQgbWFwIGZpbGUnLAorICAgICdvbWFwX2h3bW9kOiBkZWJ1Z3NzOiBfd2FpdF90YXJnZXRfZGlzYWJsZSBmYWlsZWQnLAorICAgICdWR0EgYXJiaXRlcjogY2Fubm90IG9wZW4ga2VybmVsIGFyYml0ZXIsIG5vIG11bHRpLWNhcmQgc3VwcG9ydCcsCisgICAgJ0ZhaWxlZCB0byBmaW5kIFVSTDpodHRwOi8vaXB2NC5jb25ubWFuLm5ldC9vbmxpbmUvc3RhdHVzLmh0bWwnLAorICAgICdPbmxpbmUgY2hlY2sgZmFpbGVkIGZvcicsCisgICAgXQorCit4ODZfY29tbW9uID0gWworICAgICdbZHJtOnBzYl9kb19pbml0XSAqRVJST1IqIERlYnVnIGlzJywKKyAgICAnd3JvbmcgRUxGIGNsYXNzJywKKyAgICAnQ291bGQgbm90IGVuYWJsZSBQb3dlckJ1dHRvbiBldmVudCcsCisgICAgJ3Byb2JlIG9mIExOWFBXUkJOOjAwIGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCitdICsgY29tbW9uX2Vycm9ycworCitxZW11eDg2X2NvbW1vbiA9IFsKKyAgICAnRmFzdCBUU0MgY2FsaWJyYXRpb24nLCAKKyAgICAnd3JvbmcgRUxGIGNsYXNzJywKKyAgICAiZmFpbCB0byBhZGQgTU1DT05GSUcgaW5mb3JtYXRpb24sIGNhbid0IGFjY2VzcyBleHRlbmRlZCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSB1bmRlciB0aGlzIGJyaWRnZS4iLAorICAgICJjYW4ndCBjbGFpbSBCQVIgIiwKK10gKyBjb21tb25fZXJyb3JzCisKK2lnbm9yZV9lcnJvcnMgPSB7IAorICAgICdkZWZhdWx0JyA6IGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXV4ODYnIDogWworICAgICAgICAnRmFpbGVkIHRvIGFjY2VzcyBwZXJmY3RyIG1zciAoTVNSJywKKyAgICAgICAgXSArIHFlbXV4ODZfY29tbW9uLAorICAgICdxZW11eDg2LTY0JyA6IHFlbXV4ODZfY29tbW9uLAorICAgICdxZW11bWlwcycgOiBbCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInLAorICAgICAgICAncGNpIDAwMDA6MDA6MDAuMDogW0Zpcm13YXJlIEJ1Z106IHJlZyAweC4uOiBpbnZhbGlkIEJBUiAoY2FuXCd0IHNpemUpJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXVtaXBzNjQnIDogWworICAgICAgICAncGNpIDAwMDA6MDA6MDAuMDogW0Zpcm13YXJlIEJ1Z106IHJlZyAweC4uOiBpbnZhbGlkIEJBUiAoY2FuXCd0IHNpemUpJywKKyAgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11cHBjJyA6IFsKKyAgICAgICAgJ1BDSSAwMDAwOjAwIENhbm5vdCByZXNlcnZlIExlZ2FjeSBJTyBbaW8gIDB4MDAwMC0weDBmZmZdJywKKyAgICAgICAgJ2hvc3Qgc2lkZSA4MC13aXJlIGNhYmxlIGRldGVjdGlvbiBmYWlsZWQsIGxpbWl0aW5nIG1heCBzcGVlZCcsCisgICAgICAgICdtb2RlICI2NDB4NDgwIiB0ZXN0IGZhaWxlZCcsCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdWFybScgOiBbCisgICAgICAgICdtbWNpLXBsMTh4OiBwcm9iZSBvZiBmcGdhOjA1IGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCisgICAgICAgICdtbWNpLXBsMTh4OiBwcm9iZSBvZiBmcGdhOjBiIGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11YXJtNjQnIDogWworICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCisgICAgICAgICcoRUUpIFNlcnZlciB0ZXJtaW5hdGVkIHdpdGggZXJyb3IgKDEpLiBDbG9zaW5nIGxvZyBmaWxlLicsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdlbWVubG93JyA6IFsKKyAgICAgICAgJ1tGaXJtd2FyZSBCdWddOiBBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2JkcnYiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYmRydicsCisgICAgICAgICcoRUUpIG9wZW4gL2Rldi9mYjA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLAorICAgICAgICAnKEVFKSBBSUdMWDogcmV2ZXJ0aW5nIHRvIHNvZnR3YXJlIHJlbmRlcmluZycsCisgICAgICAgIF0gKyB4ODZfY29tbW9uLAorICAgICdjb3JlMl8zMicgOiBbCisgICAgICAgICdBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnW0Zpcm13YXJlIEJ1Z106IEFDUEk6IE5vIF9CUUMgbWV0aG9kLCBjYW5ub3QgZGV0ZXJtaW5lIGluaXRpYWwgYnJpZ2h0bmVzcycsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSAicHNiIicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSBwc2InLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYmRydiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiZHJ2JywKKyAgICAgICAgJyhFRSkgb3BlbiAvZGV2L2ZiMDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsCisgICAgICAgICcoRUUpIEFJR0xYOiByZXZlcnRpbmcgdG8gc29mdHdhcmUgcmVuZGVyaW5nJywKKyAgICAgICAgXSArIHg4Nl9jb21tb24sCisgICAgJ2ludGVsLWNvcmVpNy02NCcgOiBbCisgICAgICAgICJjb250cm9sbGVyIGNhbid0IGRvIERFVlNMUCwgdHVybmluZyBvZmYiLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnY3Jvd25iYXknIDogeDg2X2NvbW1vbiwKKyAgICAnZ2VuZXJpY3g4NicgOiB4ODZfY29tbW9uLAorICAgICdnZW5lcmljeDg2LTY0JyA6IHg4Nl9jb21tb24sCisgICAgJ2VkZ2Vyb3V0ZXInIDogWworICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdtaW5ub3cnIDogWworICAgICAgICAnbmV0bGluayBpbml0IGZhaWxlZCcsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdqYXNwZXJmb3Jlc3QnIDogWworICAgICAgICAnQWN0aXZhdGVkIHNlcnZpY2UgXCdvcmcuYmx1ZXpcJyBmYWlsZWQ6JywKKyAgICAgICAgJ1VuYWJsZSB0byBmaW5kIE5GQyBuZXRsaW5rIGZhbWlseScsCisgICAgICAgICduZXRsaW5rIGluaXQgZmFpbGVkJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCit9CisKK2xvZ19sb2NhdGlvbnMgPSBbIi92YXIvbG9nLyIsIi92YXIvbG9nL2RtZXNnIiwgIi90bXAvZG1lc2dfb3V0cHV0LmxvZyJdCisKK2NsYXNzIFBhcnNlTG9nc1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5pZ25vcmVfZXJyb3JzID0gaWdub3JlX2Vycm9ycworICAgICAgICBzZWxmLmxvZ19sb2NhdGlvbnMgPSBsb2dfbG9jYXRpb25zCisgICAgICAgIHNlbGYubXNnID0gIiIKKworICAgIGRlZiBnZXRNYWNoaW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiTUFDSElORSIsIFRydWUpCisKKyAgICAjZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIENQVSBvZiB0aGUgbWFjaGluZSB0byBkaXNwbGF5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dC4gVGhpcyBpbmZvIG1pZ2h0IGJlIHVzZWZ1bCBpbiBzb21lIGNhc2VzLgorICAgIGRlZiBnZXRIYXJkd2FyZUluZm8oc2VsZik6CisgICAgICAgIGh3aSA9ICIiCisgICAgICAgIChzdGF0dXMsIGNwdV9uYW1lKSA9IHNlbGYudGFyZ2V0LnJ1bigiY2F0IC9wcm9jL2NwdWluZm8gfCBncmVwIFwibW9kZWwgbmFtZVwiIHwgaGVhZCAtbjEgfCBhd2sgJ0JFR0lOe0ZTPVwiOlwifXtwcmludCAkMn0nIikKKyAgICAgICAgKHN0YXR1cywgY3B1X3BoeXNpY2FsX2NvcmVzKSA9IHNlbGYudGFyZ2V0LnJ1bigiY2F0IC9wcm9jL2NwdWluZm8gfCBncmVwIFwiY3B1IGNvcmVzXCIgfCBoZWFkIC1uMSB8IGF3ayB7J3ByaW50ICQ0J30iKQorICAgICAgICAoc3RhdHVzLCBjcHVfbG9naWNhbF9jb3JlcykgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcInByb2Nlc3NvclwiIHwgd2MgLWwiKQorICAgICAgICAoc3RhdHVzLCBjcHVfYXJjaCkgPSBzZWxmLnRhcmdldC5ydW4oInVuYW1lIC1tIikKKyAgICAgICAgaHdpICs9ICJNYWNoaW5lIGluZm9ybWF0aW9uOiBcbiIKKyAgICAgICAgaHdpICs9ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgIGh3aSArPSAiTWFjaGluZSBuYW1lOiAiK3NlbGYuZ2V0TWFjaGluZSgpKyJcbiIKKyAgICAgICAgaHdpICs9ICJDUFU6ICIrc3RyKGNwdV9uYW1lKSsiXG4iCisgICAgICAgIGh3aSArPSAiQXJjaDogIitzdHIoY3B1X2FyY2gpKyJcbiIKKyAgICAgICAgaHdpICs9ICJQaHlzaWNhbCBjb3JlczogIitzdHIoY3B1X3BoeXNpY2FsX2NvcmVzKSsiXG4iCisgICAgICAgIGh3aSArPSAiTG9naWNhbCBjb3JlczogIitzdHIoY3B1X2xvZ2ljYWxfY29yZXMpKyJcbiIKKyAgICAgICAgaHdpICs9ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgIHJldHVybiBod2kKKworICAgICNnbyB0aHJvdWdoIHRoZSBsb2cgbG9jYXRpb25zIHByb3ZpZGVkIGFuZCBpZiBpdCdzIGEgZm9sZGVyIGNyZWF0ZSBhIGxpc3Qgd2l0aCBhbGwgdGhlIC5sb2cgZmlsZXMgaW4gaXQsIGlmIGl0J3MgYSBmaWxlIGp1c3QgYWRkIAorICAgICNpdCB0byB0aGF0IGxpc3QKKyAgICBkZWYgZ2V0TG9nTGlzdChzZWxmLCBsb2dfbG9jYXRpb25zKToKKyAgICAgICAgbG9ncyA9IFtdCisgICAgICAgIGZvciBsb2NhdGlvbiBpbiBsb2dfbG9jYXRpb25zOgorICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigidGVzdCAtZiAiK3N0cihsb2NhdGlvbikpCisgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKHN0cihsb2NhdGlvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInRlc3QgLWQgIitzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCk6CisgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImZpbmQgIitzdHIobG9jYXRpb24pKyIvKi5sb2cgLW1heGRlcHRoIDEgLXR5cGUgZiIpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCk6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbG9nZmlsZSBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ncy5hcHBlbmQob3MucGF0aC5qb2luKGxvY2F0aW9uLHN0cihsb2dmaWxlKSkpCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICAjY29weSB0aGUgbG9nIGZpbGVzIHRvIGJlIHBhcnNlZCBsb2NhbGx5CisgICAgZGVmIHRyYW5zZmVyX2xvZ3Moc2VsZiwgbG9nX2xpc3QpOgorICAgICAgICB0YXJnZXRfbG9ncyA9ICd0YXJnZXRfbG9ncycKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9sb2dzKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRhcmdldF9sb2dzKQorICAgICAgICBmb3IgZiBpbiBsb2dfbGlzdDoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LmNvcHlfZnJvbShmLCB0YXJnZXRfbG9ncykKKworICAgICNnZXQgdGhlIGxvY2FsIGxpc3Qgb2YgbG9ncworICAgIGRlZiBnZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZiwgbG9nX2xvY2F0aW9ucyk6CisgICAgICAgIHNlbGYudHJhbnNmZXJfbG9ncyhzZWxmLmdldExvZ0xpc3QobG9nX2xvY2F0aW9ucykpCisgICAgICAgIGxvZ3MgPSBbIG9zLnBhdGguam9pbigndGFyZ2V0X2xvZ3MnLGYpIGZvciBmIGluIG9zLmxpc3RkaXIoJ3RhcmdldF9sb2dzJykgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKCd0YXJnZXRfbG9ncycsZikpIF0KKyAgICAgICAgcmV0dXJuIGxvZ3MKKworICAgICNidWlsZCB0aGUgZ3JlcCBjb21tYW5kIHRvIGJlIHVzZWQgd2l0aCBmaWx0ZXJzIGFuZCBleGNsdXNpb25zCisgICAgZGVmIGJ1aWxkX2dyZXBjbWQoc2VsZiwgZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2cpOgorICAgICAgICBncmVwY21kID0gImdyZXAgIgorICAgICAgICBncmVwY21kICs9Ii1FaSBcIiIKKyAgICAgICAgZm9yIGVycm9yIGluIGVycm9yczoKKyAgICAgICAgICAgIGdyZXBjbWQgKz0gZXJyb3IrInwiCisgICAgICAgIGdyZXBjbWQgPSBncmVwY21kWzotMV0KKyAgICAgICAgZ3JlcGNtZCArPSAiXCIgIitzdHIobG9nKSsiIHwgZ3JlcCAtRWl2IFwnIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnJvcmxpc3QgPSBpZ25vcmVfZXJyb3JzW3NlbGYuZ2V0TWFjaGluZSgpXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLm1zZyArPSAiTm8gaWdub3JlIGxpc3QgZm91bmQgZm9yIHRoaXMgbWFjaGluZSwgdXNpbmcgZGVmYXVsdFxuIgorICAgICAgICAgICAgZXJyb3JsaXN0ID0gaWdub3JlX2Vycm9yc1snZGVmYXVsdCddCisgICAgICAgIGZvciBpZ25vcmVfZXJyb3IgaW4gZXJyb3JsaXN0OgorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIigiLCAiXCgiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIikiLCAiXCkiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIiciLCAiLiIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiPyIsICJcPyIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiWyIsICJcWyIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiXSIsICJcXSIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiKiIsICJcKiIpCisgICAgICAgICAgICBncmVwY21kICs9IGlnbm9yZV9lcnJvcisifCIKKyAgICAgICAgZ3JlcGNtZCA9IGdyZXBjbWRbOi0xXQorICAgICAgICBncmVwY21kICs9ICJcJyIKKyAgICAgICAgcmV0dXJuIGdyZXBjbWQKKworICAgICNncmVwIG9ubHkgdGhlIGVycm9ycyBzbyB0aGF0IHRoZWlyIGNvbnRleHQgY291bGQgYmUgY29sbGVjdGVkLiBEZWZhdWx0IGNvbnRleHQgaXMgMTAgbGluZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZXJyb3IgaXRzZWxmCisgICAgZGVmIHBhcnNlX2xvZ3Moc2VsZiwgZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2dzLCBsaW5lc19iZWZvcmUgPSAxMCwgbGluZXNfYWZ0ZXIgPSAxMCk6CisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICByZXogPSBbXQorICAgICAgICBncmVwX291dHB1dCA9ICcnCisgICAgICAgIGZvciBsb2cgaW4gbG9nczoKKyAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgICAgIHRoZWdyZXAgPSBzZWxmLmJ1aWxkX2dyZXBjbWQoZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2cpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQodGhlZ3JlcCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiAocmVzdWx0IGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICByZXN1bHRzW2xvZy5yZXBsYWNlKCd0YXJnZXRfbG9ncy8nLCcnKV0gPSB7fQorICAgICAgICAgICAgICAgIHJleiA9IHJlc3VsdC5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmb3IgeHJleiBpbiByZXo6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAiZ3JlcCBcIlxcIitzdHIoeHJleikrIlwiIC1CICIrc3RyKGxpbmVzX2JlZm9yZSkrIiAtQSAiK3N0cihsaW5lc19hZnRlcikrIiAiK3N0cihsb2cpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY29tbWFuZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2xvZy5yZXBsYWNlKCd0YXJnZXRfbG9ncy8nLCcnKV1beHJlel09Z3JlcF9vdXRwdXQKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgICNnZXQgdGhlIG91dHB1dCBvZiBkbWVzZyBhbmQgd3JpdGUgaXQgaW4gYSBmaWxlLiBUaGlzIGZpbGUgaXMgYWRkZWQgdG8gbG9nX2xvY2F0aW9ucy4KKyAgICBkZWYgd3JpdGVfZG1lc2coc2VsZik6CisgICAgICAgIChzdGF0dXMsIGRtZXNnKSA9IHNlbGYudGFyZ2V0LnJ1bigiZG1lc2ciKQorICAgICAgICAoc3RhdHVzLCBkbWVzZzIpID0gc2VsZi50YXJnZXQucnVuKCJlY2hvIFwiIitzdHIoZG1lc2cpKyJcIiA+IC90bXAvZG1lc2dfb3V0cHV0LmxvZyIpCisKKyAgICBAdGVzdGNhc2UoMTA1OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3BhcnNlbG9ncyhzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9kbWVzZygpCisgICAgICAgIGxvZ19saXN0ID0gc2VsZi5nZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZi5sb2dfbG9jYXRpb25zKQorICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlX2xvZ3Moc2VsZi5lcnJvcnMsIHNlbGYuaWdub3JlX2Vycm9ycywgbG9nX2xpc3QpCisgICAgICAgIHByaW50IHNlbGYuZ2V0SGFyZHdhcmVJbmZvKCkKKyAgICAgICAgZXJyY291bnQgPSAwCisgICAgICAgIGZvciBsb2cgaW4gcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIkxvZzogIitsb2crIlxuIgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICBmb3IgZXJyb3IgaW4gcmVzdWx0W2xvZ106CisgICAgICAgICAgICAgICAgZXJyY291bnQgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICJDZW50cmFsIGVycm9yOiAiK3N0cihlcnJvcikrIlxuIgorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICAiKioqKioqKioqKioqKioqKioqKioqKipcbiIKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAgcmVzdWx0W3N0cihsb2cpXVtzdHIoZXJyb3IpXSsiXG4iCisgICAgICAgICAgICAgICAgc2VsZi5tc2cgKz0gICIqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICBzZWxmLm1zZyArPSAiJXMgZXJyb3JzIGZvdW5kIGluIGxvZ3MuIiAlIGVycmNvdW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyY291bnQsIDAsIG1zZz1zZWxmLm1zZykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BlcmwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0NGQwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5CkBAIC0wLDAgKzEsMzAgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJwZXJsIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHBlcmwgcGFja2FnZSBpbiB0aGUgaW1hZ2UiKQorCisKK2NsYXNzIFBlcmxUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LnBsIiksICIvdG1wL3Rlc3QucGwiKQorCisgICAgQHRlc3RjYXNlKDExNDEpCisgICAgZGVmIHRlc3RfcGVybF9leGlzdHMoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIHBlcmwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQZXJsIGJpbmFyeSBub3QgaW4gUEFUSCBvciBub3Qgb24gdGFyZ2V0LiIpCisKKyAgICBAdGVzdGNhc2UoMjA4KQorICAgIGRlZiB0ZXN0X3Blcmxfd29ya3Moc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3BlcmwgL3RtcC90ZXN0LnBsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iRXhpdCBzdGF0dXMgd2FzIG5vdCAwLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICJ0aGUgdmFsdWUgb2YgYSBpcyAwLjAxIiwgbXNnPSJJbmNvcnJlY3Qgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QucGwiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM0NjAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2NsYXNzIFBpbmdUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2NCkKKyAgICBkZWYgdGVzdF9waW5nKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgNjAKKyAgICAgICAgd2hpbGUgY291bnQgPCA1IGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CisgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigicGluZyAtYyAxICVzIiAlIHNlbGYudGFyZ2V0LmlwLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgb3V0cHV0ICs9IHByb2MuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgaWYgcHJvYy5wb2xsKCkgPT0gMDoKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCA1LCBtc2cgPSAiRXhwZWN0ZWQgNSBjb25zZWN1dGl2ZSByZXBsaWVzLCBnb3QgJWQuXG5waW5nIG91dHB1dCBpczpcbiVzIiAlIChjb3VudCxvdXRwdXQpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3B5dGhvbi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlZGI3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKQEAgLTAsMCArMSwzNSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInB5dGhvbiIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBweXRob24gcGFja2FnZSBpbiB0aGUgaW1hZ2UiKQorCisKK2NsYXNzIFB5dGhvblRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3QucHkiKSwgIi90bXAvdGVzdC5weSIpCisKKyAgICBAdGVzdGNhc2UoMTE0NSkKKyAgICBkZWYgdGVzdF9weXRob25fZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBweXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQeXRob24gYmluYXJ5IG5vdCBpbiBQQVRIIG9yIG5vdCBvbiB0YXJnZXQuIikKKworICAgIEB0ZXN0Y2FzZSg5NjUpCisgICAgZGVmIHRlc3RfcHl0aG9uX3N0ZG91dChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncHl0aG9uIC90bXAvdGVzdC5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkV4aXQgc3RhdHVzIHdhcyBub3QgMC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNDYpCisgICAgZGVmIHRlc3RfcHl0aG9uX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdscyAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlB5dGhvbiB0ZXN0IGZpbGUgZ2VuZXJhdGUgZmFpbGVkLiIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QucHkgL3RtcC90ZXN0ZmlsZS5weXRob24iKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3JwbS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhYWUyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKQEAgLTAsMCArMSwxMDEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgZm5tYXRjaAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJycG0gbW9kdWxlIHNraXBwZWQ6IHRhcmdldCBkb2Vzbid0IGhhdmUgcGFja2FnZS1tYW5hZ2VtZW50IGluIElNQUdFX0ZFQVRVUkVTIikKKyAgICBpZiAicGFja2FnZV9ycG0iICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlBBQ0tBR0VfQ0xBU1NFUyIsIFRydWUpLnNwbGl0KClbMF06CisgICAgICAgICAgICBza2lwTW9kdWxlKCJycG0gbW9kdWxlIHNraXBwZWQ6IHRhcmdldCBkb2Vzbid0IGhhdmUgcnBtIGFzIHByaW1hcnkgcGFja2FnZSBtYW5hZ2VyIikKKworCitjbGFzcyBScG1CYXNpY1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoOTYwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3RfcnBtX2hlbHAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxOTEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2hlbHAnKQorICAgIGRlZiB0ZXN0X3JwbV9xdWVyeShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1xIHJwbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InN0YXR1cyBhbmQgb3V0cHV0OiAlcyBhbmQgJXMiICUgKHN0YXR1cyxvdXRwdXQpKQorCitjbGFzcyBScG1JbnN0YWxsUmVtb3ZlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBwa2dhcmNoID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSkucmVwbGFjZSgiLSIsICJfIikKKyAgICAgICAgcnBtZGlyID0gb3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKSwgInJwbSIsIHBrZ2FyY2gpCisgICAgICAgICMgcGljayBycG0tZG9jIGFzIGEgdGVzdCBmaWxlIHRvIGdldCBpbnN0YWxsZWQsIGJlY2F1c2UgaXQncyBzbWFsbCBhbmQgaXQgd2lsbCBhbHdheXMgYmUgYnVpbHQgZm9yIHN0YW5kYXJkIHRhcmdldHMKKyAgICAgICAgZm9yIGYgaW4gZm5tYXRjaC5maWx0ZXIob3MubGlzdGRpcihycG1kaXIpLCAicnBtLWRvYy0qLiVzLnJwbSIgJSBwa2dhcmNoKToKKyAgICAgICAgICAgIHRlc3RycG1maWxlID0gZgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihycG1kaXIsdGVzdHJwbWZpbGUpLCAiL3RtcC9ycG0tZG9jLnJwbSIpCisKKyAgICBAdGVzdGNhc2UoMTkyKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3JwbV9oZWxwJykKKyAgICBkZWYgdGVzdF9ycG1faW5zdGFsbChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1pdmggL3RtcC9ycG0tZG9jLnJwbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byBpbnN0YWxsIHJwbS1kb2MgcGFja2FnZTogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDE5NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faW5zdGFsbCcpCisgICAgZGVmIHRlc3RfcnBtX3JlbW92ZShzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWUgcnBtLWRvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byByZW1vdmUgcnBtLWRvYyBwYWNrYWdlOiAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA5NikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3JwbV9xdWVyeV9ub25yb290KHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd1c2VyYWRkIHRlc3QxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXR1cyA9PSAwLCBtc2c9IkZhaWxlZCB0byBjcmVhdGUgbmV3IHVzZXIiKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdWRvIC11IHRlc3QxIGlkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcodGVzdDEpJyBpbiBvdXRwdXQsIG1zZz0iRmFpbGVkIHRvIGV4ZWN1dGUgYXMgbmV3IHVzZXIiKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdWRvIC11IHRlc3QxIHJwbSAtcWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXM6ICVzLiBDYW5ub3QgcnVuIHJwbSAtcWEiICUgc3RhdHVzKQorCisgICAgQHRlc3RjYXNlKDE5NSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faW5zdGFsbCcpCisgICAgZGVmIHRlc3RfY2hlY2tfcnBtX2luc3RhbGxfcmVtb3ZhbF9sb2dfZmlsZV9zaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIHJwbSBpbnN0YWxsL3JlbW92YWwgbG9nIGZpbGUgc2l6ZQorICAgICAgICBFeHBlY3RlZDogICAgVGhlcmUgc2hvdWxkIGJlIHNvbWUgbWV0aG9kIHRvIGtlZXAgcnBtIGxvZyBpbiBhIHNtYWxsIHNpemUgLgorICAgICAgICBQcm9kdWN0OiAgICAgQlNQcworICAgICAgICBBdXRob3I6ICAgICAgQWxleGFuZHJ1IEdlb3JnZXNjdSA8YWxleGFuZHJ1LmMuZ2Vvcmdlc2N1QGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisgICAgICAgIGRiX2ZpbGVzX2NtZCA9ICdscyAvdmFyL2xpYi9ycG0vX19kYi4qJworICAgICAgICBnZXRfbG9nX3NpemVfY21kID0gImR1IC92YXIvbGliL3JwbS9sb2cvbG9nLiogfCBhd2sgJ3twcmludCAkMX0nIgorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgc29tZSBkYXRhYmFzZSBmaWxlcyBhcmUgdW5kZXIgL3Zhci9saWIvcnBtIGFzICdfX2RiLnh4eCcKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihkYl9maWxlc19jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGZpbmQgZGF0YWJhc2UgZmlsZXMgdW5kZXIgL3Zhci9saWIvcnBtLyBhcyBfX2RiLnh4eCcpCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIHBhY2thZ2UganVzdCBpbiBjYXNlCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorCisgICAgICAgICMgSW5zdGFsbC9SZW1vdmUgYSBwYWNrYWdlIDEwIHRpbWVzCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtaXZoIC90bXAvcnBtLWRvYy5ycG0nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICJGYWlsZWQgdG8gaW5zdGFsbCBycG0tZG9jIHBhY2thZ2UuIFJlYXNvbjoge30iLmZvcm1hdChvdXRwdXQpKQorCisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWUgcnBtLWRvYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgIkZhaWxlZCB0byByZW1vdmUgcnBtLWRvYyBwYWNrYWdlLiBSZWFzb246IHt9Ii5mb3JtYXQob3V0cHV0KSkKKworICAgICAgICAjIEdldCB0aGUgc2l6ZSBvZiBsb2cgZmlsZQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKGdldF9sb2dfc2l6ZV9jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGdldCB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgbG9nIGZpbGUuJykKKworICAgICAgICAjIENvbXBhcmUgZWFjaCBsb2cgc2l6ZQorICAgICAgICBmb3IgbG9nX2ZpbGVfc2l6ZSBpbiBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChpbnQobG9nX2ZpbGVfc2l6ZSksIDExMjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTG9nIGZpbGUgc2l6ZSBpcyBncmVhdGVyIHRoYXQgZXhwZWN0ZWQgKH4xME1CKSwgZm91bmQge30gYnl0ZXMnLmZvcm1hdChsb2dfZmlsZV9zaXplKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3JtIC1mIC90bXAvcnBtLWRvYy5ycG0nKQorCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9zY2FuZWxmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTAyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weQpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInBheC11dGlscyIpOgorICAgICAgICBza2lwTW9kdWxlKCJwYXgtdXRpbHMgcGFja2FnZSBub3QgaW5zdGFsbGVkIikKKworY2xhc3MgU2NhbmVsZlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2NhbmNtZCA9ICdzY2FuZWxmIC0tcXVpZXQgLS1yZWN1cnNpdmUgLS1tb3VudCAtLWxkcGF0aCAtLXBhdGgnCisKKyAgICBAdGVzdGNhc2UoOTY2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NhbmVsZl90ZXh0cmVsKHNlbGYpOgorICAgICAgICAjIHByaW50IFRFWFRSRUwgaW5mb3JtYXRpb24KKyAgICAgICAgc2VsZi5zY2FuY21kICs9ICIgLS10ZXh0cmVsIgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKHNlbGYuc2NhbmNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgIiIsICJcbiIuam9pbihbc2VsZi5zY2FuY21kLCBvdXRwdXRdKSkKKworICAgIEB0ZXN0Y2FzZSg5NjcpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zY2FuZWxmX3JwYXRoKHNlbGYpOgorICAgICAgICAjIHByaW50IFJQQVRIIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuc2NhbmNtZCArPSAiIC0tcnBhdGgiCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oc2VsZi5zY2FuY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5zdHJpcCgpLCAiIiwgIlxuIi5qb2luKFtzZWxmLnNjYW5jbWQsIG91dHB1dF0pKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjcC5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9zY3AucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlODdkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9zY3AucHkKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgc2tpcFVubGVzc1Bhc3NlZCwgdGVzdGNhc2UKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IChvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImRyb3BiZWFyIikgb3Igb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJvcGVuc3NoLXNzaGQiKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHNzaCBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU2NwVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMjApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zY3BfZmlsZShzZWxmKToKKyAgICAgICAgdGVzdF9sb2dfZGlyID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgdGVzdF9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9sb2dfZGlyLCAndGVzdF9zY3BfZmlsZScpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X2ZpbGVfcGF0aCwgJ3cnKSBhcyB0ZXN0X3NjcF9maWxlOgorICAgICAgICAgICAgdGVzdF9zY3BfZmlsZS5zZWVrKDIgKiogMjIgLSAxKQorICAgICAgICAgICAgdGVzdF9zY3BfZmlsZS53cml0ZShvcy5saW5lc2VwKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQuY29weV90byh0ZXN0X2ZpbGVfcGF0aCwgJy90bXAvdGVzdF9zY3BfZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiRmlsZSBjb3VsZCBub3QgYmUgY29waWVkLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigibHMgLWxhIC90bXAvdGVzdF9zY3BfZmlsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiU0NQIHRlc3QgZmFpbGVkIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9za2VsZXRvbmluaXQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2tlbGV0b25pbml0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMGNiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2tlbGV0b25pbml0LnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgVGhpcyB0ZXN0IHNob3VsZCBjb3ZlciBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvdHJfc2hvd19jYXNlLmNnaT9jYXNlX2lkPTI4NCB0ZXN0Y2FzZQorIyBOb3RlIHRoYXQgdGhlIGltYWdlIHVuZGVyIHRlc3QgbXVzdCBoYXZlIG1ldGEtc2tlbGV0b24gbGF5ZXIgaW4gYmJsYXllcnMgYW5kIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBzZXJ2aWNlIiBpbiBsb2NhbC5jb25mCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic2VydmljZSIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzZXJ2aWNlIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIFNrZWxldG9uQmFzaWNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIGRlZiB0ZXN0X3NrZWxldG9uX2F2YWlsYWJpbGl0eShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbHMgL2V0Yy9pbml0LmQvc2tlbGV0b24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInNrZWxldG9uIGluaXQgc2NyaXB0IG5vdCBmb3VuZC4gT3V0cHV0OlxuJXMgIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9ICBzZWxmLnRhcmdldC5ydW4oJ2xzIC91c3Ivc2Jpbi9za2VsZXRvbi10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJza2VsZXRvbi10ZXN0IG5vdCBmb3VuZC4gT3V0cHV0OlxuJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDI4NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9za2VsZXRvbl9hdmFpbGFiaWxpdHknKQorICAgIEB1bml0dGVzdC5za2lwSWYoInN5c3RlbWQiID09IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBGYWxzZSksICJOb3QgYXBwcm9waWF0ZSBmb3Igc3lzdGVtZCBpbWFnZSIpCisgICAgZGVmIHRlc3Rfc2tlbGV0b25fc2NyaXB0KHNlbGYpOgorICAgICAgICBvdXRwdXQxID0gc2VsZi50YXJnZXQucnVuKCIvZXRjL2luaXQuZC9za2VsZXRvbiBzdGFydCIpWzFdCisgICAgICAgIChzdGF0dXMsIG91dHB1dDIpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbc11rZWxldG9uLXRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIlNrZWxldG9uIHNjcmlwdCBjb3VsZCBub3QgYmUgc3RhcnRlZDpcbiVzXG4lcyIgJSAob3V0cHV0MSwgb3V0cHV0MikpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxNjY4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9zbWFydC5weQpAQCAtMCwwICsxLDE3NSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcmUKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMuaHR0cHNlcnZlciBpbXBvcnQgSFRUUFNlcnZpY2UKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZmVhdHVyZSIpCisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic21hcnQiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHNtYXJ0IGluc3RhbGxlZCIpCisgICAgaWYgInBhY2thZ2VfcnBtIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJQQUNLQUdFX0NMQVNTRVMiLCBUcnVlKS5zcGxpdCgpWzBdOgorICAgICAgICBza2lwTW9kdWxlKCJScG0gaXMgbm90IHRoZSBwcmltYXJ5IHBhY2thZ2UgbWFuYWdlciIpCisKK2NsYXNzIFNtYXJ0VGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2hlbHAnKQorICAgIGRlZiBzbWFydChzZWxmLCBjb21tYW5kLCBleHBlY3RlZCA9IDApOgorICAgICAgICBjb21tYW5kID0gJ3NtYXJ0ICVzJyAlIGNvbW1hbmQKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzZWxmLnRhcmdldC5ydW4oY29tbWFuZCwgMTUwMCkKKyAgICAgICAgbWVzc2FnZSA9IG9zLmxpbmVzZXAuam9pbihbY29tbWFuZCwgb3V0cHV0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIGV4cGVjdGVkLCBtZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IiBpbiBvdXRwdXQsIG1lc3NhZ2UpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworY2xhc3MgU21hcnRCYXNpY1Rlc3QoU21hcnRUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg3MTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zbWFydF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCctLWhlbHAnKQorCisgICAgQHRlc3RjYXNlKDk2OCkKKyAgICBkZWYgdGVzdF9zbWFydF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCctLXZlcnNpb24nKQorCisgICAgQHRlc3RjYXNlKDcyMSkKKyAgICBkZWYgdGVzdF9zbWFydF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdpbmZvIHB5dGhvbi1zbWFydHBtJykKKworICAgIEB0ZXN0Y2FzZSg0MjEpCisgICAgZGVmIHRlc3Rfc21hcnRfcXVlcnkoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3F1ZXJ5IHB5dGhvbi1zbWFydHBtJykKKworICAgIEB0ZXN0Y2FzZSg3MjApCisgICAgZGVmIHRlc3Rfc21hcnRfc2VhcmNoKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdzZWFyY2ggcHl0aG9uLXNtYXJ0cG0nKQorCisgICAgQHRlc3RjYXNlKDcyMikKKyAgICBkZWYgdGVzdF9zbWFydF9zdGF0cyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnc3RhdHMnKQorCitjbGFzcyBTbWFydFJlcG9UZXN0KFNtYXJ0VGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXBvbGlzdCA9IFtdCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIgPSBIVFRQU2VydmljZShvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnNlcnZlcl9pcCkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdGFydCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdG9wKCkKKyAgICAgICAgZm9yIGkgaW4gc2VsZi5yZXBvbGlzdDoKKyAgICAgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bignc21hcnQgY2hhbm5lbCAteSAtLXJlbW92ZSAnK3N0cihpKSkKKworICAgIEB0ZXN0Y2FzZSgxMTQzKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWwoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwnLCAxKQorCisgICAgQHRlc3RjYXNlKDcxOSkKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX2FkZChzZWxmKToKKyAgICAgICAgaW1hZ2VfcGtndHlwZSA9IHNlbGYudGMuZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgICAgICBkZXBsb3lfdXJsID0gJ2h0dHA6Ly8lczolcy8lcycgJShzZWxmLnRhcmdldC5zZXJ2ZXJfaXAsIHNlbGYucmVwb19zZXJ2ZXIucG9ydCwgaW1hZ2VfcGtndHlwZSkKKyAgICAgICAgcGtnYXJjaHMgPSBzZWxmLnRjLmQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgVHJ1ZSkucmVwbGFjZSgiLSIsIl8iKS5zcGxpdCgpCisgICAgICAgIGZvciBhcmNoIGluIG9zLmxpc3RkaXIoJyVzLyVzJyAlIChzZWxmLnJlcG9fc2VydmVyLnJvb3RfZGlyLCBpbWFnZV9wa2d0eXBlKSk6CisgICAgICAgICAgICBpZiBhcmNoIGluIHBrZ2FyY2hzOgorICAgICAgICAgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLXkgLS1hZGQge2F9IHR5cGU9cnBtLW1kIGJhc2V1cmw9e3V9L3thfScuZm9ybWF0KGE9YXJjaCwgdT1kZXBsb3lfdXJsKSkKKyAgICAgICAgICAgICAgICBzZWxmLnJlcG9saXN0LmFwcGVuZChhcmNoKQorICAgICAgICBzZWxmLnNtYXJ0KCd1cGRhdGUnKQorCisgICAgQHRlc3RjYXNlKDk2OSkKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1oZWxwJykKKworICAgIEB0ZXN0Y2FzZSg5NzApCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tbGlzdCcpCisKKyAgICBAdGVzdGNhc2UoOTcxKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfc2hvdyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLXNob3cnKQorCisgICAgQHRlc3RjYXNlKDcxNykKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX3JwbXN5cyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLXNob3cgcnBtc3lzJykKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWRpc2FibGUgcnBtc3lzJykKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSBycG1zeXMnKQorCisgICAgQHRlc3RjYXNlKDExNDQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfY2hhbm5lbF9hZGQnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2luc3RhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IHBzcGxhc2gtZGVmYXVsdCcpCisKKyAgICBAdGVzdGNhc2UoNzI4KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2luc3RhbGxfZGVwZW5kZW5jeShzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IHBzcGxhc2gtZGVmYXVsdCcpCisKKyAgICBAdGVzdGNhc2UoNzIzKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2Zyb21fZGlzayhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2Rvd25sb2FkIHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgLi9wc3BsYXNoLWRlZmF1bHQqJykKKworICAgIEB0ZXN0Y2FzZSg3MjUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfY2hhbm5lbF9hZGQnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2luc3RhbGxfZnJvbV9odHRwKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLnNtYXJ0KCdkb3dubG9hZCAtLXVybHMgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgdXJsID0gcmUuc2VhcmNoKCcoaHR0cDovLy4qL3BzcGxhc2gtZGVmYXVsdC4qXC5ycG0pJywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsLCBtc2c9IkNvdWxuJ3QgZmluZCBkb3dubG9hZCB1cmwgaW4gJXMiICUgb3V0cHV0KQorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSAlcycgJSB1cmwuZ3JvdXAoMCkpCisKKyAgICBAdGVzdGNhc2UoNzI5KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3JlaW5zdGFsbChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgncmVpbnN0YWxsIC15IHBzcGxhc2gtZGVmYXVsdCcpCisKKyAgICBAdGVzdGNhc2UoNzI3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZW1vdGVfcmVwbyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgndXBkYXRlJykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gnKQorCisgICAgQHRlc3RjYXNlKDcyNikKKyAgICBkZWYgdGVzdF9zbWFydF9sb2NhbF9kaXIoc2VsZik6CisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignbWtkaXIgL3RtcC9teXJwbWRpcicpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1hZGQgbXlycG1kaXIgdHlwZT1ycG0tZGlyIHBhdGg9L3RtcC9teXJwbWRpciAteScpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignY2QgL3RtcC9teXJwbWRpcicpCisgICAgICAgIHNlbGYuc21hcnQoJ2Rvd25sb2FkIHBzcGxhc2gnKQorICAgICAgICBvdXRwdXQgPSBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tbGlzdCcpCisgICAgICAgIGZvciBpIGluIG91dHB1dC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmICgicnBtc3lzIiAhPSBzdHIoaSkpIGFuZCAoIm15cnBtZGlyIiAhPSBzdHIoaSkpOgorICAgICAgICAgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1kaXNhYmxlICcrc3RyKGkpKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2NkIC9ob21lL3Jvb3QnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIHBzcGxhc2gnKQorICAgICAgICBmb3IgaSBpbiBvdXRwdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiAoInJwbXN5cyIgIT0gc3RyKGkpKSBhbmQgKCJteXJwbWRpciIgIT0gc3RyKGkpKToKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZW5hYmxlICcrc3RyKGkpKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tcmVtb3ZlIG15cnBtZGlyIC15JykKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCJybSAtcmYgL3RtcC9teXJwbWRpciIpCisKKyAgICBAdGVzdGNhc2UoNzE4KQorICAgIGRlZiB0ZXN0X3NtYXJ0X2FkZF9ycG1kaXIoc2VsZik6CisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignbWtkaXIgL3RtcC9teXJwbWRpcicpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1hZGQgbXlycG1kaXIgdHlwZT1ycG0tZGlyIHBhdGg9L3RtcC9teXJwbWRpciAteScpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1kaXNhYmxlIG15cnBtZGlyIC15JykKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnY2hhbm5lbCAtLXNob3cgbXlycG1kaXInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImRpc2FibGVkID0geWVzIiBpbiBvdXRwdXQsIG1zZz0iRmFpbGVkIHRvIGRpc2FibGUgcnBtIGRpciIpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1lbmFibGUgIG15cnBtZGlyIC15JykKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnY2hhbm5lbCAtLXNob3cgbXlycG1kaXInKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCJkaXNhYmxlZCA9IHllcyIgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBlbmFibGUgcnBtIGRpciIpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1yZW1vdmUgbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oInJtIC1yZiAvdG1wL215cnBtZGlyIikKKworICAgIEB0ZXN0Y2FzZSg3MzEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfY2hhbm5lbF9hZGQnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3JlbW92ZV9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IHBzcGxhc2gnKQorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaCcpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NzaC5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9zc2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3NmQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9zc2gucHkKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IChvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImRyb3BiZWFyIikgb3Igb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJvcGVuc3NoIikpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzc2ggcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFNzaFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjI0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3BpbmcnKQorICAgIGRlZiB0ZXN0X3NzaChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndW5hbWUgLWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJTU0ggVGVzdCBmYWlsZWQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignY2F0IC9ldGMvbWFzdGVyaW1hZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMSwgbXNnPSJUaGlzIGlzbid0IHRoZSByaWdodCBpbWFnZSAgLSAvZXRjL21hc3RlcmltYWdlIHNob3VsZG4ndCBiZSBoZXJlICVzIiAlIG91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9zeXNsb2cucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MDFkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzbG9nLnB5CkBAIC0wLDAgKzEsNDUgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IChvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImJ1c3lib3gtc3lzbG9nIikgb3Igb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJzeXNrbG9nZCIpKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc3lzbG9nIHBhY2thZ2UgaW4gaW1hZ2UiKQorCitjbGFzcyBTeXNsb2dUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIwMSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfaGVscCIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX3J1bm5pbmcoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgLWkgW3NdeXNsb2dkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ibm8gc3lzbG9nZCBwcm9jZXNzLCBwcyBvdXRwdXQ6ICVzIiAlIHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kKVsxXSkKKworY2xhc3MgU3lzbG9nVGVzdENvbmZpZyhvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgxMTQ5KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19ydW5uaW5nIikKKyAgICBkZWYgdGVzdF9zeXNsb2dfbG9nZ2VyKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ2dlciBmb29iYXIgJiYgdGVzdCAtZSAvdmFyL2xvZy9tZXNzYWdlcyAmJiBncmVwIGZvb2JhciAvdmFyL2xvZy9tZXNzYWdlcyB8fCBsb2dyZWFkIHwgZ3JlcCBmb29iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJUZXN0IGxvZyBzdHJpbmcgbm90IGZvdW5kIGluIC92YXIvbG9nL21lc3NhZ2VzLiBPdXRwdXQ6ICVzICIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE1MCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfcnVubmluZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX3Jlc3RhcnQoc2VsZik6CisgICAgICAgIGlmICJzeXN0ZW1kIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpOgorICAgICAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvZXRjL2luaXQuZC9zeXNsb2cgcmVzdGFydCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCByZXN0YXJ0IHN5c2xvZy5zZXJ2aWNlJykKKworICAgIEB0ZXN0Y2FzZSgyMDIpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX3Jlc3RhcnQiKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19sb2dnZXIiKQorICAgIEB1bml0dGVzdC5za2lwSWYoInN5c3RlbWQiID09IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBGYWxzZSksICJOb3QgYXBwcm9waWF0ZSBmb3Igc3lzdGVtZCBpbWFnZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInN5c2tsb2dkIikgb3Igbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiYnVzeWJveCIpLCAiTm9uLWJ1c3lib3ggc3lzbG9nIikKKyAgICBkZWYgdGVzdF9zeXNsb2dfc3RhcnR1cF9jb25maWcoc2VsZik6CisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignZWNobyAiTE9HRklMRT0vdmFyL2xvZy90ZXN0IiA+PiAvZXRjL3N5c2xvZy1zdGFydHVwLmNvbmYnKQorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy9ldGMvaW5pdC5kL3N5c2xvZyByZXN0YXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iQ291bGQgbm90IHJlc3RhcnQgc3lzbG9nIHNlcnZpY2UuIFN0YXR1cyBhbmQgb3V0cHV0OiAlcyBhbmQgJXMiICUgKHN0YXR1cyxvdXRwdXQpKQorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ2dlciBmb29iYXIgJiYgZ3JlcCBmb29iYXIgL3Zhci9sb2cvdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlRlc3QgbG9nIHN0cmluZyBub3QgZm91bmQuIE91dHB1dDogJXMgIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCJzZWQgLWkgJ3MjTE9HRklMRT0vdmFyL2xvZy90ZXN0IyMnIC9ldGMvc3lzbG9nLXN0YXJ0dXAuY29uZiIpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignL2V0Yy9pbml0LmQvc3lzbG9nIHJlc3RhcnQnKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzdGVtZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQzOTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHkKQEAgLTAsMCArMSwxMDEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJzeXN0ZW1kIik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJ0YXJnZXQgZG9lc24ndCBoYXZlIHN5c3RlbWQgaW4gRElTVFJPX0ZFQVRVUkVTIikKKyAgICBpZiAic3lzdGVtZCIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIFRydWUpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgic3lzdGVtZCBpcyBub3QgdGhlIGluaXQgbWFuYWdlciBmb3IgdGhpcyBpbWFnZSIpCisKKworY2xhc3MgU3lzdGVtZFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBkZWYgc3lzdGVtY3RsKHNlbGYsIGFjdGlvbiA9ICcnLCB0YXJnZXQgPSAnJywgZXhwZWN0ZWQgPSAwLCB2ZXJib3NlID0gRmFsc2UpOgorICAgICAgICBjb21tYW5kID0gJ3N5c3RlbWN0bCAlcyAlcycgJSAoYWN0aW9uLCB0YXJnZXQpCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKGNvbW1hbmQpCisgICAgICAgIG1lc3NhZ2UgPSAnXG4nLmpvaW4oW2NvbW1hbmQsIG91dHB1dF0pCisgICAgICAgIGlmIHN0YXR1cyAhPSBleHBlY3RlZCBhbmQgdmVyYm9zZToKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RhdHVzIC0tZnVsbCAlcycgJSB0YXJnZXQpWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBleHBlY3RlZCwgbWVzc2FnZSkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIFN5c3RlbWRCYXNpY1Rlc3RzKFN5c3RlbWRUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJy0tdmVyc2lvbicpCisKKyAgICBAdGVzdGNhc2UoNTUxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbV9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnbGlzdC11bml0LWZpbGVzJykKKworICAgIGRlZiBzZXR0bGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBCbG9jayB1bnRpbCBzeXN0ZW1kIGhhcyBmaW5pc2hlZCBhY3RpdmF0aW5nIGFueSB1bml0cyBiZWluZyBhY3RpdmF0ZWQsCisgICAgICAgIG9yIHVudGlsIHR3byBtaW51dGVzIGhhcyBlbGFwc2VkLgorCisgICAgICAgIFJldHVybnMgYSB0dXBsZSwgZWl0aGVyIChUcnVlLCAnJykgaWYgYWxsIHVuaXRzIGhhdmUgZmluaXNoZWQKKyAgICAgICAgYWN0aXZhdGluZywgb3IgKEZhbHNlLCBtZXNzYWdlIHN0cmluZykgaWYgdGhlcmUgYXJlIHN0aWxsIHVuaXRzCisgICAgICAgIGFjdGl2YXRpbmcgKGdlbmVyYWxseSwgZmFpbGluZyB1bml0cyB0aGF0IHJlc3RhcnQpLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgKDYwICogMikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgLS1zdGF0ZT1hY3RpdmF0aW5nJykKKyAgICAgICAgICAgIGlmICIwIGxvYWRlZCB1bml0cyBsaXN0ZWQiIGluIG91dHB1dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKFRydWUsICcnKQorICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPj0gZW5kdGltZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEZhbHNlLCBvdXRwdXQpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgQHRlc3RjYXNlKDU1MCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1kX2Jhc2ljJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2ZhaWxlZChzZWxmKToKKyAgICAgICAgc2V0dGxlZCwgb3V0cHV0ID0gc2VsZi5zZXR0bGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0dGxlZCwgbXNnPSJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc3lzdGVtZCB0byBzZXR0bGU6XG4iICsgb3V0cHV0KQorCisgICAgICAgIG91dHB1dCA9IHNlbGYuc3lzdGVtY3RsKCdsaXN0LXVuaXRzJywgJy0tZmFpbGVkJykKKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goIjAgbG9hZGVkIHVuaXRzIGxpc3RlZCIsIG91dHB1dCkKKyAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgb3V0cHV0ICs9IHNlbGYuc3lzdGVtY3RsKCdzdGF0dXMgLS1mdWxsIC0tZmFpbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoLCBtc2c9IlNvbWUgc3lzdGVtZCB1bml0cyBmYWlsZWQ6XG4lcyIgJSBvdXRwdXQpCisKKworY2xhc3MgU3lzdGVtZFNlcnZpY2VUZXN0cyhTeXN0ZW1kVGVzdCk6CisKKyAgICBkZWYgY2hlY2tfZm9yX2F2YWhpKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5oYXNQYWNrYWdlKCdhdmFoaS1kYWVtb24nKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBkZXBlbmRlbmN5IG5vdCBtZXQ6IG5lZWQgYXZhaGktZGFlbW9uIGluc3RhbGxlZCBvbiB0YXJnZXQiKQorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9zdGF0dXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2F2YWhpKCkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ3N0YXR1cyAtLWZ1bGwnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnKQorCisgICAgQHRlc3RjYXNlKDY5NSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1kX3N0YXR1cycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9zdG9wX3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9hdmFoaSgpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdG9wJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2lzLWFjdGl2ZScsICdhdmFoaS1kYWVtb24uc2VydmljZScsIGV4cGVjdGVkPTMsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ3N0YXJ0JywnYXZhaGktZGFlbW9uLnNlcnZpY2UnKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnaXMtYWN0aXZlJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJywgdmVyYm9zZT1UcnVlKQorCisgICAgQHRlc3RjYXNlKDY5NikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1kX2Jhc2ljJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2Rpc2FibGVfZW5hYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9hdmFoaSgpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdkaXNhYmxlJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2lzLWVuYWJsZWQnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnLCBleHBlY3RlZD0xKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnZW5hYmxlJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2lzLWVuYWJsZWQnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnKQorCitjbGFzcyBTeXN0ZW1kSm91cm5hbFRlc3RzKFN5c3RlbWRUZXN0KToKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfam91cm5hbChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignam91cm5hbGN0bCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBvdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvdm5jLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3ZuYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzFkZWZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3ZuYy5weQpAQCAtMCwwICsxLDIwIEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlVW5sZXNzCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgoraW1wb3J0IHJlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIHNraXBNb2R1bGVVbmxlc3Mob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCd4MTF2bmMnKSwgIk5vIHgxMXZuYyBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgVk5DVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMTMpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF92bmMoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3gxMXZuYyAtZGlzcGxheSA6MCAtYmcgLW8geDExdm5jLmxvZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IngxMXZuYyBzZXJ2ZXIgZmFpbGVkIHRvIHN0YXJ0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHBvcnQgPSByZS5zZWFyY2goJ1BPUlQ9WzAtOV0qJywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydCwgbXNnPSJMaXN0ZW5pbmcgcG9ydCBub3Qgc3BlY2lmaWVkIGluIGNvbW1hbmQgb3V0cHV0OiAlcyIgJW91dHB1dCkKKworICAgICAgICB2bmNwb3J0ID0gcG9ydC5ncm91cCgwKS5zcGxpdCgnPScpWzFdCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ25ldHN0YXQgLW50bCB8IGdyZXAgIjolcyInICUgdm5jcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ieDExdm5jIHNlcnZlciBub3QgcnVubmluZyBvbiBwb3J0ICVzXG5cbiVzIiAlICh2bmNwb3J0LCBzZWxmLnRhcmdldC5ydW4oJ25ldHN0YXQgLW50bDsgY2F0IHgxMXZuYy5sb2cnKVsxXSkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveDMybGliLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3gzMmxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVlMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3gzMmxpYi5weQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAjY2hlY2sgaWYgREVGQVVMVFRVTkUgaXMgc2V0IGFuZCBpdCdzIHZhbHVlIGlzOiB4ODYtNjQteDMyCisgICAgICAgIGRlZmF1bHR0dW5lID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKQorICAgICAgICBpZiAieDg2LTY0LXgzMiIgbm90IGluIGRlZmF1bHR0dW5lOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgiREVGQVVMVFRVTkUgaXMgbm90IHNldCB0byB4ODYtNjQteDMyIikKKworY2xhc3MgWDMybGliVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyODEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3NoIikKKyAgICBkZWYgdGVzdF94MzJfZmlsZShzZWxmKToKKyAgICAgICAgc3RhdHVzMSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIHwgZ3JlcCBDbGFzcyB8IGdyZXAgRUxGMzIiKVswXQorICAgICAgICBzdGF0dXMyID0gc2VsZi50YXJnZXQucnVuKCJyZWFkZWxmIC1oIC9iaW4vbHMgfCBncmVwIE1hY2hpbmUgfCBncmVwIFg4Ni02NCIpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0dXMxID09IDAgYW5kIHN0YXR1czIgPT0gMCwgbXNnPSIvYmluL2xzIGlzbid0IGFuIFg4Ni02NCBFTEYzMiBiaW5hcnkuIHJlYWRlbGYgc2F5czogJXMiICUgc2VsZi50YXJnZXQucnVuKCJyZWFkZWxmIC1oIC9iaW4vbHMiKVsxXSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS94b3JnLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3hvcmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiY2QzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS94b3JnLnB5CkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgieDExLWJhc2UiKToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoInRhcmdldCBkb2Vzbid0IGhhdmUgeDExIGluIElNQUdFX0ZFQVRVUkVTIikKKworCitjbGFzcyBYb3JnVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgxMTUxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3RfeG9yZ19ydW5uaW5nKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgIGdyZXAgLXYgeGluaXQgfCBncmVwIFtYXW9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlhvcmcgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHJ1bm5pbmcgJXMiICUgc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQpWzFdKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZGsvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL3Nkay9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YzZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvX19pbml0X18ucHkKQEAgLTAsMCArMSwzIEBACisjIEVuYWJsZSBvdGhlciBsYXllcnMgdG8gaGF2ZSB0ZXN0cyBpbiB0aGUgc2FtZSBuYW1lZCBkaXJlY3RvcnkKK2Zyb20gcGtndXRpbCBpbXBvcnQgZXh0ZW5kX3BhdGgKK19fcGF0aF9fID0gZXh0ZW5kX3BhdGgoX19wYXRoX18sIF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRjdnMucHkgYi9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGN2cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE0NmZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRjdnMucHkKQEAgLTAsMCArMSwyNSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKKworY2xhc3MgQnVpbGRDdnNUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9jdnMvIiwgb2VTREtUZXN0LnRjLnNka2Vudiwgb2VTREtUZXN0LnRjLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Z0cC5nbnUub3JnL25vbi1nbnUvY3ZzL3NvdXJjZS9mZWF0dXJlLzEuMTIuMTMvY3ZzLTEuMTIuMTMudGFyLmJ6MiIpCisgICAgICAgIHNlbGYucHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKKworICAgIGRlZiB0ZXN0X2N2cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9pbnN0YWxsKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBpbnN0YWxsIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL2J1aWxkaXB0YWJsZXMucHkgYi9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGlwdGFibGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmU1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGlwdGFibGVzLnB5CkBAIC0wLDAgKzEsMjYgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgU0RLQnVpbGRQcm9qZWN0CisKKworY2xhc3MgQnVpbGRJcHRhYmxlc1Rlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBTREtCdWlsZFByb2plY3Qob2VTREtUZXN0LnRjLnNka3Rlc3RkaXIgKyAiL2lwdGFibGVzLyIsIG9lU0RLVGVzdC50Yy5zZGtlbnYsIG9lU0RLVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2lwdGFibGVzL2ZpbGVzL2lwdGFibGVzLTEuNC4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgZGVmIHRlc3RfaXB0YWJsZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZHN1ZG9rdS5weSBiL21ldGEvbGliL29lcWEvc2RrL2J1aWxkc3Vkb2t1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTc3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZHN1ZG9rdS5weQpAQCAtMCwwICsxLDI2IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFNES0J1aWxkUHJvamVjdAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VTREtUZXN0Lmhhc1BhY2thZ2UoImd0a1wrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBndGsrIGluIG1hbmlmZXN0IikKKworY2xhc3MgU3Vkb2t1VGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFNES0J1aWxkUHJvamVjdChvZVNES1Rlc3QudGMuc2RrdGVzdGRpciArICIvc3Vkb2t1LyIsIG9lU0RLVGVzdC50Yy5zZGtlbnYsIG9lU0RLVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50L3N1ZG9rdS1zYXZhbnQtMS4zL3N1ZG9rdS1zYXZhbnQtMS4zLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBkZWYgdGVzdF9zdWRva3Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTk0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3Nkay9nY2MucHkKQEAgLTAsMCArMSwzNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgbWFjaGluZSA9IG9lU0RLVGVzdC50Yy5kLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgaWYgbm90IG9lU0RLVGVzdC5oYXNIb3N0UGFja2FnZSgicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSIgKyBtYWNoaW5lKToKKyAgICAgICAgc2tpcE1vZHVsZSgiU0RLIGRvZXNuJ3QgY29udGFpbiBhIGNyb3NzLWNhbmFkaWFuIHRvb2xjaGFpbiIpCisKKworY2xhc3MgR2NjQ29tcGlsZVRlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiBbJ3Rlc3QuYycsICd0ZXN0LmNwcCcsICd0ZXN0bWFrZWZpbGUnXToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oc2VsZi50Yy5maWxlc2RpciwgZiksIHNlbGYudGMuc2RrdGVzdGRpciArIGYpCisKKyAgICBkZWYgdGVzdF9nY2NfY29tcGlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCckQ0MgJXMvdGVzdC5jIC1vICVzL3Rlc3QgLWxtJyAlIChzZWxmLnRjLnNka3Rlc3RkaXIsIHNlbGYudGMuc2RrdGVzdGRpcikpCisKKyAgICBkZWYgdGVzdF9ncHBfY29tcGlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCckQ1hYICVzL3Rlc3QuYyAtbyAlcy90ZXN0IC1sbScgJSAoc2VsZi50Yy5zZGt0ZXN0ZGlyLCBzZWxmLnRjLnNka3Rlc3RkaXIpKQorCisgICAgZGVmIHRlc3RfZ3BwMl9jb21waWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJyRDWFggJXMvdGVzdC5jcHAgLW8gJXMvdGVzdCAtbG0nICUgKHNlbGYudGMuc2RrdGVzdGRpciwgc2VsZi50Yy5zZGt0ZXN0ZGlyKSkKKworICAgIGRlZiB0ZXN0X21ha2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignY2QgJXM7IG1ha2UgLWYgdGVzdG1ha2VmaWxlJyAlIHNlbGYudGMuc2RrdGVzdGRpcikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzZWxmLnRjLnNka3Rlc3RkaXIgKyBmIGZvciBmIGluIFsndGVzdC5jJywgJ3Rlc3QuY3BwJywgJ3Rlc3QubycsICd0ZXN0JywgJ3Rlc3RtYWtlZmlsZSddXQorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShmKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZGsvcGVybC5weSBiL21ldGEvbGliL29lcWEvc2RrL3BlcmwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmNDIyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2RrL3BlcmwucHkKQEAgLTAsMCArMSwyOCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lU0RLVGVzdC5oYXNIb3N0UGFja2FnZSgibmF0aXZlc2RrLXBlcmwiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcGVybCBwYWNrYWdlIGluIHRoZSBTREsiKQorCisKK2NsYXNzIFBlcmxUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gWyd0ZXN0LnBsJ106CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHNlbGYudGMuZmlsZXNkaXIsIGYpLCBzZWxmLnRjLnNka3Rlc3RkaXIgKyBmKQorICAgICAgICBzZWxmLnRlc3RmaWxlID0gc2VsZi50Yy5zZGt0ZXN0ZGlyICsgInRlc3QucGwiCisKKyAgICBkZWYgdGVzdF9wZXJsX2V4aXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCd3aGljaCBwZXJsJykKKworICAgIGRlZiB0ZXN0X3Blcmxfd29ya3Moc2VsZik6CisgICAgICAgIHNlbGYuX3J1bigncGVybCAlcy90ZXN0LnBsJyAlIHNlbGYudGMuc2RrdGVzdGRpcikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoIiVzL3Rlc3QucGwiICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmZhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3Nkay9weXRob24ucHkKQEAgLTAsMCArMSwzMiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lU0RLVGVzdC5oYXNIb3N0UGFja2FnZSgibmF0aXZlc2RrLXB5dGhvbiIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBweXRob24gcGFja2FnZSBpbiB0aGUgU0RLIikKKworCitjbGFzcyBQeXRob25UZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gWyd0ZXN0LnB5J106CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHNlbGYudGMuZmlsZXNkaXIsIGYpLCBzZWxmLnRjLnNka3Rlc3RkaXIgKyBmKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX2V4aXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCd3aGljaCBweXRob24nKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3N0ZG91dChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fcnVuKCdweXRob24gJXMvdGVzdC5weScgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnN0cmlwKCksICJ0aGUgdmFsdWUgb2YgYSBpcyAwLjAxIiwgbXNnPSJJbmNvcnJlY3Qgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9weXRob25fdGVzdGZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignbHMgL3RtcC90ZXN0ZmlsZS5weXRob24nKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSgiJXMvdGVzdC5weSIgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSgiL3RtcC90ZXN0ZmlsZS5weXRob24iKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkOTUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKQEAgLTAsMCArMSwyIEBACitmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzlhZTdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fc3N0YXRldGVzdHNfbm9hdXRvLnB5CkBAIC0wLDAgKzEsOTUgQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEuc2VsZnRlc3Quc3N0YXRlIGltcG9ydCBTU3RhdGVCYXNlCisKKworY2xhc3MgUmVidWlsZEZyb21TU3RhdGUoU1N0YXRlQmFzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGRpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSkKKworICAgIGRlZiBnZXRfZGVwX3RhcmdldHMoc2VsZiwgcHJpbWFyeV90YXJnZXRzKToKKyAgICAgICAgZm91bmRfdGFyZ2V0cyA9IFtdCisgICAgICAgIGJpdGJha2UoIi1nICIgKyAnICcuam9pbihtYXAoc3RyLCBwcmltYXJ5X3RhcmdldHMpKSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAncG4tYnVpbGRsaXN0JyksICdyJykgYXMgcG5maWxlOgorICAgICAgICAgICAgZm91bmRfdGFyZ2V0cyA9IHBuZmlsZS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHJldHVybiBmb3VuZF90YXJnZXRzCisKKyAgICBkZWYgY29uZmlndXJlX2J1aWxkZGlyKHNlbGYsIGJ1aWxkZGlyKToKKyAgICAgICAgb3MubWtkaXIoYnVpbGRkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoYnVpbGRkaXIpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYnKSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvbG9jYWwuY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2xvY2FsLmNvbmYnKSkKKyAgICAgICAgY29uZmlnID0ge30KKyAgICAgICAgY29uZmlnWydkZWZhdWx0X3NzdGF0ZV9kaXInXSA9ICJTU1RBVEVfRElSID89IFwiJHtUT1BESVJ9L3NzdGF0ZS1jYWNoZVwiIgorICAgICAgICBjb25maWdbJ251bGxfc3N0YXRlX21pcnJvcnMnXSA9ICJTU1RBVEVfTUlSUk9SUyA9IFwiXCIiCisgICAgICAgIGNvbmZpZ1snZGVmYXVsdF90bXBfZGlyJ10gPSAiVE1QRElSID0gXCIke1RPUERJUn0vdG1wXCIiCisgICAgICAgIGZvciBrZXkgaW4gY29uZmlnOgorICAgICAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvc2VsZnRlc3QuaW5jJyksIGNvbmZpZ1trZXldKQorICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpLCAnY29uZi9iYmxheWVycy5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvYmJsYXllcnMuY29uZicpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpLCAnY29uZi9hdXRvLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9hdXRvLmNvbmYnKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGhhcmRsaW5rX3RyZWUoc2VsZiwgc3JjLCBkc3QpOgorICAgICAgICBvcy5ta2Rpcihkc3QpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoZHN0KQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzcmMpOgorICAgICAgICAgICAgaWYgcm9vdCA9PSBzcmM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkc3QsIHJvb3Quc3BsaXQoc3JjKVsxXVsxOl0pKQorICAgICAgICAgICAgZm9yIHNzdGF0ZV9maWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG9zLmxpbmsob3MucGF0aC5qb2luKHJvb3QsIHNzdGF0ZV9maWxlKSwgb3MucGF0aC5qb2luKGRzdCwgcm9vdC5zcGxpdChzcmMpWzFdWzE6XSwgc3N0YXRlX2ZpbGUpKQorCisgICAgZGVmIHJ1bl90ZXN0X3NzdGF0ZV9yZWJ1aWxkKHNlbGYsIHByaW1hcnlfdGFyZ2V0cywgcmVsb2NhdGU9RmFsc2UsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPUZhbHNlKToKKyAgICAgICAgYnVpbGRBID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdidWlsZEEnKQorICAgICAgICBpZiByZWxvY2F0ZToKKyAgICAgICAgICAgIGJ1aWxkQiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnYnVpbGRCJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1aWxkQiA9IGJ1aWxkQQorCisgICAgICAgIGlmIHJlYnVpbGRfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgcmVidWlsZF90YXJnZXRzID0gc2VsZi5nZXRfZGVwX3RhcmdldHMocHJpbWFyeV90YXJnZXRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVidWlsZF90YXJnZXRzID0gcHJpbWFyeV90YXJnZXRzCisKKyAgICAgICAgc2VsZi5jb25maWd1cmVfYnVpbGRkaXIoYnVpbGRBKQorICAgICAgICBydW5DbWQoKCIuICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICIgJSAoZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgYnVpbGRBKSkgKyAnYml0YmFrZSAgJyArICcgJy5qb2luKG1hcChzdHIsIHByaW1hcnlfdGFyZ2V0cykpLCBzaGVsbD1UcnVlLCBleGVjdXRhYmxlPScvYmluL2Jhc2gnKQorICAgICAgICBzZWxmLmhhcmRsaW5rX3RyZWUob3MucGF0aC5qb2luKGJ1aWxkQSwgJ3NzdGF0ZS1jYWNoZScpLCBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3NzdGF0ZS1jYWNoZS1idWlsZEEnKSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZEEpCisKKyAgICAgICAgZmFpbGVkX3JlYnVpbGQgPSBbXQorICAgICAgICBmYWlsZWRfY2xlYW5zc3RhdGUgPSBbXQorICAgICAgICBmb3IgdGFyZ2V0IGluIHJlYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJlX2J1aWxkZGlyKGJ1aWxkQikKKyAgICAgICAgICAgIHNlbGYuaGFyZGxpbmtfdHJlZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3NzdGF0ZS1jYWNoZS1idWlsZEEnKSwgb3MucGF0aC5qb2luKGJ1aWxkQiwgJ3NzdGF0ZS1jYWNoZScpKQorCisgICAgICAgICAgICByZXN1bHRfY2xlYW5zc3RhdGUgPSBydW5DbWQoKCIuICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICIgJSAoZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgYnVpbGRCKSkgKyAnYml0YmFrZSAtY2NsZWFuc3N0YXRlICcgKyB0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfY2xlYW5zc3RhdGUuc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgZmFpbGVkX2NsZWFuc3N0YXRlLmFwcGVuZCh0YXJnZXQpCisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZEIpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgcmVzdWx0X2J1aWxkID0gcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQikpICsgJ2JpdGJha2UgJyArIHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlLCBzaGVsbD1UcnVlLCBleGVjdXRhYmxlPScvYmluL2Jhc2gnKQorICAgICAgICAgICAgaWYgbm90IHJlc3VsdF9idWlsZC5zdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBmYWlsZWRfcmVidWlsZC5hcHBlbmQodGFyZ2V0KQorCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGJ1aWxkQikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZhaWxlZF9yZWJ1aWxkLCBtc2c9IlRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGZhaWxlZCB0byByZWJ1aWxkOiAlcyIgJSAnICcuam9pbihtYXAoc3RyLCBmYWlsZWRfcmVidWlsZCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZhaWxlZF9jbGVhbnNzdGF0ZSwgbXNnPSJUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBmYWlsZWQgY2xlYW5zc3RhdGUoYWxsIG90aGVycyBoYXZlIHBhc3NlZCBib3RoIGNsZWFuc3N0YXRlIGFuZCByZWJ1aWxkIGZyb20gc3N0YXRlIHRlc3RzKTogJXMiICUgJyAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX2NsZWFuc3N0YXRlKSkpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfcmVsb2NhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfcmVidWlsZChbJ2NvcmUtaW1hZ2Utc2F0by1zZGsnXSwgcmVsb2NhdGU9VHJ1ZSwgcmVidWlsZF9kZXBlbmRlbmNpZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NzdGF0ZV9yZWJ1aWxkKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9yZWJ1aWxkKFsnY29yZS1pbWFnZS1zYXRvLXNkayddLCByZWxvY2F0ZT1GYWxzZSwgcmVidWlsZF9kZXBlbmRlbmNpZXM9VHJ1ZSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L190b2FzdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjQ2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L190b2FzdGVyLnB5CkBAIC0wLDAgKzEsMzIwIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNobGV4LCBzdWJwcm9jZXNzCitpbXBvcnQgdXJsbGliLCBjb21tYW5kcywgdGltZSwgZ2V0cGFzcywgcmUsIGpzb24sIHNobGV4CisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZAorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4vLi4vLi4vLi4vJywgJ2JpdGJha2UvbGliL3RvYXN0ZXInKSkpCitvcy5lbnZpcm9uLnNldGRlZmF1bHQoIkRKQU5HT19TRVRUSU5HU19NT0RVTEUiLCAidG9hc3Rlcm1haW4uc2V0dGluZ3MiKQorCitpbXBvcnQgdG9hc3Rlcm1haW4uc2V0dGluZ3MKK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgVG9hc3RlclNldHVwKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIHJlY2lwZV9wYXJzZShzZWxmLCBmaWxlX3BhdGgsIHZhcik6CisgICAgICAgIGZvciBsaW5lIGluIG9wZW4oZmlsZV9wYXRoLCdyJyk6CisgICAgICAgICAgICBpZiBsaW5lLmZpbmQodmFyKSA+IC0xOgorICAgICAgICAgICAgICAgIHZhbCA9IGxpbmUuc3BsaXQoIiA9ICIpWzFdLnJlcGxhY2UoIlwiIiwgIiIpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgZml4X2ZpbGVfcGF0aChzZWxmLCBmaWxlX3BhdGgpOgorICAgICAgICBpZiAiOiIgaW4gZmlsZV9wYXRoOgorICAgICAgICAgICAgZmlsZV9wYXRoPWZpbGVfcGF0aC5zcGxpdCgiOiIpWzJdCisgICAgICAgIHJldHVybiBmaWxlX3BhdGgKKworY2xhc3MgVG9hc3Rlcl9EQl9UZXN0cyhUb2FzdGVyU2V0dXApOgorCisgICAgIyBDaGVjayBpZiBidWlsZCBuYW1lIGlzIHVuaXF1ZSAtIHRjX2lkPTc5NQorICAgIEB0ZXN0Y2FzZSg3OTUpCisgICAgZGVmIHRlc3RfQnVpbGRfVW5pcXVlX05hbWUoc2VsZik6CisgICAgICAgIGFsbF9idWlsZHMgPSBCdWlsZC5vYmplY3RzLmFsbCgpLmNvdW50KCkKKyAgICAgICAgZGlzdGluY3RfYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykuZGlzdGluY3QoKS5jb3VudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdGluY3RfYnVpbGRzLCBhbGxfYnVpbGRzLCBtc2cgPSAnQnVpbGQgbmFtZSBpcyBub3QgdW5pcXVlJykKKworICAgICMgQ2hlY2sgaWYgYnVpbGQgY29vY2tlciBsb2cgcGF0aCBpcyB1bmlxdWUgLSB0Y19pZD04MTkKKyAgICBAdGVzdGNhc2UoODE5KQorICAgIGRlZiB0ZXN0X0J1aWxkX1VuaXF1ZV9Db29rZXJfTG9nX1BhdGgoc2VsZik6CisgICAgICAgIGRpc3RpbmN0X3BhdGggPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnY29va2VyX2xvZ19wYXRoJykuZGlzdGluY3QoKS5jb3VudCgpCisgICAgICAgIHRvdGFsX2J1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpLmNvdW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0aW5jdF9wYXRoLCB0b3RhbF9idWlsZHMsIG1zZyA9ICdCdWlsZCBjb29ja2VyIGxvZyBwYXRoIGlzIG5vdCB1bmlxdWUnKQorCisgICAgIyBDaGVjayBpZiB0YXNrIG9yZGVyIGlzIHVuaXF1ZSBmb3Igb25lIGJ1aWxkIC0gdGM9ODI0CisgICAgQHRlc3RjYXNlKDgyNCkKKyAgICBkZWYgdGVzdF9UYXNrX1VuaXF1ZV9PcmRlcihzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0b3RhbF90YXNrX29yZGVyID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkWydpZCddKS52YWx1ZXMoJ29yZGVyJykuY291bnQoKQorICAgICAgICAgICAgZGlzdGluY3RfdGFza19vcmRlciA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZFsnaWQnXSkudmFsdWVzKCdvcmRlcicpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICAgICAgaWYgKHRvdGFsX3Rhc2tfb3JkZXIgIT0gZGlzdGluY3RfdGFza19vcmRlcik6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQoYnVpbGRbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBidWlsZCBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgdGFzayBvcmRlciBzZXF1ZW5jZSBmb3Igb25lIGJ1aWxkIC0gdGM9ODI1CisgICAgQHRlc3RjYXNlKDgyNSkKKyAgICBkZWYgdGVzdF9UYXNrX09yZGVyX1NlcXVlbmNlKHNlbGYpOgorICAgICAgICBidWlsZHMgPSBidWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihRKGJ1aWxkID0gYnVpbGRbJ2lkJ10pLCB+UShvcmRlciA9IE5vbmUpLCB+USh0YXNrX25hbWVfX2NvbnRhaW5zID0gJ19zZXRzY2VuZScpKS52YWx1ZXMoJ2lkJywgJ29yZGVyJykub3JkZXJfYnkoIm9yZGVyIikKKyAgICAgICAgICAgIGNudF90YXNrcyA9IDAKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgICAgIGNudF90YXNrcyArPSAxCisgICAgICAgICAgICAgICAgaWYgKHRhc2tbJ29yZGVyJ10gIT0gY250X3Rhc2tzKToKKyAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIGRpc2tfaW8gbWF0Y2hlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEVuZFRpbWVJTyBhbmQgU3RhcnRUaW1lSU8gaW4gYnVpbGQgc3RhdHMgLSB0Yz04MjgKKyAgICAjIyMgdGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkICMjIworICAgICNkZWYgdGVzdF9UYXNrX0Rpc2tfSU9fVEM4Mjgoc2VsZik6CisKKyAgICAjIENoZWNrIGlmIG91dGNvbWUgPSAyIChTU1RBVEUpIHRoZW4gc3N0YXRlX3Jlc3VsdCBtdXN0IGJlIDMgKFJFU1RPUkVEKSAtIHRjPTgzMgorICAgIEB0ZXN0Y2FzZSg4MzIpCisgICAgZGVmIHRlc3RfVGFza19JZl9PdXRjb21lXzJfU3N0YXRlX1Jlc3VsdF9NdXN0X0JlXzMoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihvdXRjb21lID0gMikudmFsdWVzKCdpZCcsICdzc3RhdGVfcmVzdWx0JykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHJvd1snc3N0YXRlX3Jlc3VsdCddICE9IDMpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBvdXRjb21lID0gMSAoQ09WRVJFRCkgb3IgMyAoRVhJU1RJTkcpIHRoZW4gc3N0YXRlX3Jlc3VsdCBtdXN0IGJlIDAgKFNTVEFURV9OQSkgLSB0Yz04MzMKKyAgICBAdGVzdGNhc2UoODMzKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8xXzNfU3N0YXRlX1Jlc3VsdF9NdXN0X0JlXzAoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihvdXRjb21lX19pbiA9ICgxLCAzKSkudmFsdWVzKCdpZCcsICdzc3RhdGVfcmVzdWx0JykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHRhc2tbJ3NzdGF0ZV9yZXN1bHQnXSAhPSAwKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSBpcyAwIChTVUNDRVNTKSBvciA0IChGQUlMRUQpIHRoZW4gc3N0YXRlX3Jlc3VsdCBtdXN0IGJlIDAgKE5BKSwgMSAoTUlTUykgb3IgMiAoRkFJTEVEKSAtIHRjPTgzNAorICAgIEB0ZXN0Y2FzZSg4MzQpCisgICAgZGVmIHRlc3RfVGFza19JZl9PdXRjb21lXzBfNF9Tc3RhdGVfUmVzdWx0X011c3RfQmVfMF8xXzIoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihvdXRjb21lX19pbiA9ICgwLCA0KSkudmFsdWVzKCdpZCcsICdzc3RhdGVfcmVzdWx0JykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHRhc2tbJ3NzdGF0ZV9yZXN1bHQnXSBub3QgaW4gWzAsIDEsIDJdKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IFRSVUUgKDEpLCBzY3JpcHRfdHlwZSBtdXN0IGJlIDAgKENPRElOR19OQSksIDIgKENPRElOR19QWVRIT04pLCAzIChDT0RJTkdfU0hFTEwpIC0gdGM9ODkxCisgICAgQHRlc3RjYXNlKDg5MSkKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfVHJ1ZV9TY3JpcHRfVHlwZV8wXzJfMyhzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKHRhc2tfZXhlY3V0ZWQgPSAxKS52YWx1ZXMoJ2lkJywgJ3NjcmlwdF90eXBlJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHRhc2tbJ3NjcmlwdF90eXBlJ10gbm90IGluIFswLCAyLCAzXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHRhc2tfZXhlY3V0ZWQgPSBUUlVFICgxKSwgb3V0Y29tZSBtdXN0IGJlIDAgKFNVQ0NFU1MpIG9yIDQgKEZBSUxFRCkgLSB0Yz04MzYKKyAgICBAdGVzdGNhc2UoODM2KQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfVGFza19FeGVjdXRlZF9UcnVlX091dGNvbWVfMF80KHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIodGFza19leGVjdXRlZCA9IDEpLnZhbHVlcygnaWQnLCAnb3V0Y29tZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydvdXRjb21lJ10gbm90IGluIFswLCA0XSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHRhc2tfZXhlY3V0ZWQgPSBGQUxTRSAoMCksIHNjcmlwdF90eXBlIG11c3QgYmUgMCAtIHRjPTg5MAorICAgIEB0ZXN0Y2FzZSg4OTApCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX0ZhbHNlX1NjcmlwdF9UeXBlXzAoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkID0gMCkudmFsdWVzKCdpZCcsICdzY3JpcHRfdHlwZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzY3JpcHRfdHlwZSddICE9IDApOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gRkFMU0UgKDApIGFuZCBidWlsZCBvdXRjb21lID0gU1VDQ0VFREVEICgwKSwgdGFzayBvdXRjb21lIG11c3QgYmUgMSAoQ09WRVJFRCksIDIgKENBQ0hFRCksIDMgKFBSRUJVSUxUKSwgNSAoRU1QVFkpIC0gdGM9ODM3CisgICAgQHRlc3RjYXNlKDgzNykKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfRmFsc2VfT3V0Y29tZV8xXzJfM181KHNlbGYpOgorICAgICAgICBidWlsZHMgPSBCdWlsZC5vYmplY3RzLmZpbHRlcihvdXRjb21lID0gMCkudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRbJ2lkJ10sIHRhc2tfZXhlY3V0ZWQgPSAwKS52YWx1ZXMoJ2lkJywgJ291dGNvbWUnKQorICAgICAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgaWYgKHRhc2tbJ291dGNvbWUnXSBub3QgaW4gWzEsIDIsIDMsIDVdKToKKyAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIEtleSB2ZXJpZmljYXRpb24gLSB0Yz04ODgKKyAgICBAdGVzdGNhc2UoODg4KQorICAgIGRlZiB0ZXN0X1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZShzZWxmKToKKyAgICAgICAgcm93cyA9IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLnZhbHVlcygnaWQnLCAndGFyZ2V0X2lkJywgJ3BhY2thZ2VfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHJvdyBpbiByb3dzOgorICAgICAgICAgICAgdGFyZ2V0ID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGlkID0gcm93Wyd0YXJnZXRfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sncGFja2FnZV9pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGlmIChub3QgdGFyZ2V0IG9yIG5vdCBwYWNrYWdlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChyb3dbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXJnZXQgaW5zdGFsbGVkIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIEtleSB2ZXJpZmljYXRpb24gLSB0Yz04ODkKKyAgICBAdGVzdGNhc2UoODg5KQorICAgIGRlZiB0ZXN0X1Rhc2tfRGVwZW5kZW5jeShzZWxmKToKKyAgICAgICAgcm93cyA9IFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLnZhbHVlcygnaWQnLCAndGFza19pZCcsICdkZXBlbmRzX29uX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciByb3cgaW4gcm93czoKKyAgICAgICAgICAgIHRhc2tfaWQgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGlkID0gcm93Wyd0YXNrX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgZGVwZW5kc19vbl9pZCA9IFRhc2sub2JqZWN0cy5maWx0ZXIoaWQgPSByb3dbJ2RlcGVuZHNfb25faWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHRhc2tfaWQgb3Igbm90IGRlcGVuZHNfb25faWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHJvd1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgZGVwZW5kZW5jeSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgYnVpbGQgdGFyZ2V0IGZpbGVfbmFtZSBpcyBwb3B1bGF0ZWQgb25seSBpZiBpc19pbWFnZT10cnVlIEFORCBvcm1fYnVpbGQub3V0Y29tZT0wIHRoZW4gaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBpdHMgc2l6ZSBtYXRjaGVzIHRoZSBmaWxlX3NpemUgdmFsdWUKKyAgICAjIyMgTmVlZCB0byBhZGQgdGhlIHRjIGluIHRoZSB0ZXN0IHJ1bgorICAgIEB0ZXN0Y2FzZSgxMDM3KQorICAgIGRlZiB0ZXN0X1RhcmdldF9GaWxlX05hbWVfUG9wdWxhdGVkKHNlbGYpOgorICAgICAgICBidWlsZHMgPSBCdWlsZC5vYmplY3RzLmZpbHRlcihvdXRjb21lID0gMCkudmFsdWVzKCdpZCcpCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkX2lkID0gYnVpbGRbJ2lkJ10sIGlzX2ltYWdlID0gMSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHRhcmdldHM6CisgICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGVzID0gVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIodGFyZ2V0X2lkID0gdGFyZ2V0WydpZCddKS52YWx1ZXMoJ2lkJywgJ2ZpbGVfbmFtZScsICdmaWxlX3NpemUnKQorICAgICAgICAgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICAgICAgICAgIGZvciBmaWxlX2luZm8gaW4gdGFyZ2V0X2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaWQgPSBmaWxlX2luZm9bJ2lkJ10KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGVfbmFtZSA9IGZpbGVfaW5mb1snZmlsZV9uYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGVfc2l6ZSA9IGZpbGVfaW5mb1snZmlsZV9zaXplJ10KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vdCB0YXJnZXRfZmlsZV9uYW1lIG9yIG5vdCB0YXJnZXRfZmlsZV9zaXplKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0X2ZpbGVfbmFtZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9zLnBhdGguZ2V0c2l6ZSh0YXJnZXRfZmlsZV9uYW1lKSAhPSB0YXJnZXRfZmlsZV9zaXplKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFyZ2V0X2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFyZ2V0IGltYWdlIGZpbGUgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIEtleSB2ZXJpZmljYXRpb24gLSB0Yz04ODQKKyAgICBAdGVzdGNhc2UoODg0KQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfRGVwZW5kZW5jeShzZWxmKToKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGRlcHMgPSBQYWNrYWdlX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3BhY2thZ2VfaWQnLCAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIChkZXBbJ3BhY2thZ2VfaWQnXSA9PSBkZXBbJ2RlcGVuZHNfb25faWQnXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQoZGVwWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBSZWNpcGUga2V5IHZlcmlmaWNhdGlvbiwgcmVjaXBlIG5hbWUgZG9lcyBub3QgZGVwZW5kcyBvbiBhIHJlY2lwZSBoYXZpbmcgdGhlIHNhbWUgbmFtZSAtIHRjPTg4MworICAgIEB0ZXN0Y2FzZSg4ODMpCisgICAgZGVmIHRlc3RfUmVjaXBlX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIGRlcHMgPSBSZWNpcGVfRGVwZW5kZW5jeS5vYmplY3RzLnZhbHVlcygnaWQnLCAncmVjaXBlX2lkJywgJ2RlcGVuZHNfb25faWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgaWYgKG5vdCBkZXBbJ3JlY2lwZV9pZCddIG9yIG5vdCBkZXBbJ2RlcGVuZHNfb25faWQnXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQoZGVwWydpZCddKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGlkID0gZGVwWydyZWNpcGVfaWQnXSkudmFsdWVzKCduYW1lJykKKyAgICAgICAgICAgICAgICBkZXBfbmFtZSA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihpZCA9IGRlcFsnZGVwZW5kc19vbl9pZCddKS52YWx1ZXMoJ25hbWUnKQorICAgICAgICAgICAgICAgIGlmIChuYW1lID09IGRlcF9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQoZGVwWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcmVjaXBlIGRlcGVuZGVuY3kgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHBhY2thZ2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyICgwLTkpIC0gdGM9ODQ2CisgICAgQHRlc3RjYXNlKDg0NikKKyAgICBkZWYgdGVzdF9QYWNrYWdlX05hbWVfRm9yX051bWJlcihzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAnbmFtZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIChwYWNrYWdlWyduYW1lJ11bMF0uaXNkaWdpdCgpIGlzIFRydWUpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIHZlcnNpb24gc3RhcnRzIHdpdGggYSBudW1iZXIgKDAtOSkgLSB0Yz04NDcKKyAgICBAdGVzdGNhc2UoODQ3KQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfVmVyc2lvbl9TdGFydHNfV2l0aF9OdW1iZXIoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ3ZlcnNpb24nKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiAocGFja2FnZVsndmVyc2lvbiddWzBdLmlzZGlnaXQoKSBpcyBGYWxzZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHBhY2thZ2UgcmV2aXNpb24gc3RhcnRzIHdpdGggJ3InIC0gdGM9ODQ4CisgICAgQHRlc3RjYXNlKDg0OCkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1JldmlzaW9uX1N0YXJ0c19XaXRoX3Ioc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ3JldmlzaW9uJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgKHBhY2thZ2VbJ3JldmlzaW9uJ11bMF0uc3RhcnRzd2l0aCgiciIpIGlzIEZhbHNlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBwYWNrYWdlIGJ1aWxkX2lkCisgICAgIyMjIFRDIG11c3QgYmUgYWRkZWQgaW4gdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzOCkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX0J1aWxkX0lkKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICdidWlsZF9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGJ1aWxkX2lkID0gQnVpbGQub2JqZWN0cy5maWx0ZXIoaWQgPSBwYWNrYWdlWydidWlsZF9pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGlmIChub3QgYnVpbGRfaWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayB0aGUgdmFsaWRpdHkgb2YgcGFja2FnZSByZWNpcGVfaWQKKyAgICAjIyMgVEMgbXVzdCBiZSBhZGRlZCBpbiB0ZXN0IHJ1bgorICAgIEB0ZXN0Y2FzZSgxMDM5KQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfUmVjaXBlX0lkKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICdyZWNpcGVfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICByZWNpcGVfaWQgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoaWQgPSBwYWNrYWdlWydyZWNpcGVfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHJlY2lwZV9pZCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHBhY2thZ2UgaW5zdGFsbGVkX3NpemUgZmllbGQgaXMgbm90IG51bGwKKyAgICAjIyMgVEMgbXVzdCBiZSBhZGVkIGluIHRlc3QgcnVuCisgICAgQHRlc3RjYXNlKDEwNDApCisgICAgZGVmIHRlc3RfUGFja2FnZV9JbnN0YWxsZWRfU2l6ZV9Ob3RfTlVMTChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKGluc3RhbGxlZF9zaXplX19pc251bGwgPSBUcnVlKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIGFsbCBsYXllcnMgcmVxdWVzdHMgcmV0dXJuIGV4aXQgY29kZSBpcyAyMDAgLSB0Yz04NDMKKyAgICBAdGVzdGNhc2UoODQzKQorICAgIGRlZiB0ZXN0X0xheWVyc19SZXF1ZXN0c19FeGl0X0NvZGUoc2VsZik6CisgICAgICAgIGxheWVycyA9IExheWVyLm9iamVjdHMudmFsdWVzKCdpZCcsICdsYXllcl9pbmRleF91cmwnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgIHJlc3AgPSB1cmxsaWIudXJsb3BlbihsYXllclsnbGF5ZXJfaW5kZXhfdXJsJ10pCisgICAgICAgICAgICBpZiAocmVzcC5nZXRjb2RlKCkgIT0gMjAwKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChsYXllclsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIGxheWVyIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBkamFuZ28gc2VydmVyIHN0YXJ0cyByZWdhcmRsZXNzIG9mIHRoZSB0aW1lem9uZSBzZXQgb24gdGhlIG1hY2hpbmUgLSB0Yz05MDUKKyAgICBAdGVzdGNhc2UoOTA1KQorICAgIGRlZiB0ZXN0X1N0YXJ0X0RqYW5nb19UaW1lem9uZShzZWxmKToKKyAgICAgICAgY3VycmVudF9wYXRoID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgem9uZWZpbGVsaXN0ID0gW10KKyAgICAgICAgWk9ORUlORk9QQVRIID0gJy91c3Ivc2hhcmUvem9uZWluZm8vJworICAgICAgICBvcy5jaGRpcigiLi4vYml0YmFrZS9saWIvdG9hc3Rlci8iKQorICAgICAgICBjbnRfZXJyID0gMAorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihaT05FSU5GT1BBVEgpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKFpPTkVJTkZPUEFUSCwgZmlsZW5hbWUpKToKKyAgICAgICAgICAgICAgICB6b25lZmlsZWxpc3QuYXBwZW5kKGZpbGVuYW1lKQorICAgICAgICBmb3IgayBpbiByYW5nZShsZW4oem9uZWZpbGVsaXN0KSk6CisgICAgICAgICAgICBpZiBrIDw9IDU6CisgICAgICAgICAgICAgICAgZmlsZXMgPSB6b25lZmlsZWxpc3Rba10KKyAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oImV4cG9ydCBUWj0iK3N0cihmaWxlcykrIjsgcHl0aG9uIG1hbmFnZS5weSBydW5zZXJ2ZXIgPiAvZGV2L251bGwgMj4mMSAmIikKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgICAgICAgICAgcGlkID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoInBzIGF1eCB8IGdyZXAgJ1svdV1zci9iaW4vcHl0aG9uIG1hbmFnZS5weSBydW5zZXJ2ZXInIHwgYXdrICd7cHJpbnQgJDJ9JyIsIHNoZWxsID0gVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBwaWQ6CisgICAgICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgia2lsbCAtOSAiK3N0cihwaWQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHpvbmVmaWxlbGlzdFtrXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbnRfZXJyLCAwLCBtc2cgPSAnRXJyb3JzIGRqYW5nbyBzZXJ2ZXIgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aW1lem9uZTogJXMnICUgY250X2VycikKKyAgICAgICAgb3MuY2hkaXIoY3VycmVudF9wYXRoKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmFhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Jhc2UucHkKQEAgLTAsMCArMSwxNTMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisKKyMgREVTQ1JJUFRJT04KKyMgQmFzZSBjbGFzcyBpbmhlcml0ZWQgYnkgdGVzdCBjbGFzc2VzIGluIG1ldGEvbGliL3NlbGZ0ZXN0CisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGVycm5vCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IExvZ1Jlc3VsdHMKKworQExvZ1Jlc3VsdHMKK2NsYXNzIG9lU2VsZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInNlbGZ0ZXN0LmJhc2UiKQorICAgIGxvbmdNZXNzYWdlID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9InJ1blRlc3QiKToKKyAgICAgICAgc2VsZi5idWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgICAgIHNlbGYubG9jYWxjb25mX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpCisgICAgICAgIHNlbGYudGVzdGluY19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL3NlbGZ0ZXN0LmluYyIpCisgICAgICAgIHNlbGYubG9jYWxfYmJsYXllcnNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKKyAgICAgICAgc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuaW5jIikKKyAgICAgICAgc2VsZi50ZXN0bGF5ZXJfcGF0aCA9IG9lU2VsZlRlc3QudGVzdGxheWVyX3BhdGgKKyAgICAgICAgc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzID0gW10KKyAgICAgICAgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXAgPSBbXQorICAgICAgICBzdXBlcihvZVNlbGZUZXN0LCBzZWxmKS5fX2luaXRfXyhtZXRob2ROYW1lKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihzZWxmLmJ1aWxkZGlyKQorICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcHJldmlvdXMgdGVzdCBsZWZ0IGFyb3VuZCBpbiBjb25maWcgb3IgaW5jIGZpbGVzCisgICAgICAgICMgaWYgaXQgZmFpbGVkIHNvIHdlIG5lZWQgYSBmcmVzaCBzdGFydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0aW5jX3BhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRlc3RsYXllcl9wYXRoKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gJ3Rlc3RfcmVjaXBlLmluYyc6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgZikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICMgdGVzdHMgbWlnaHQgbmVlZCB0aGVpciBvd24gc2V0dXAKKyAgICAgICAgIyBidXQgaWYgdGhleSBvdmVyd3JpdGUgdGhpcyBvbmUgdGhleSBoYXZlIHRvIGNhbGwKKyAgICAgICAgIyBzdXBlciBlYWNoIHRpbWUsIHNvIGxldCdzIGdpdmUgdGhlbSBhbiBhbHRlcm5hdGl2ZQorICAgICAgICBzZWxmLnNldFVwTG9jYWwoKQorCisgICAgZGVmIHNldFVwTG9jYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzOgorICAgICAgICAgICAgZmFpbGVkX2V4dHJhX2NvbW1hbmRzID0gW10KKyAgICAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kczoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoY29tbWFuZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQuc3RhdHVzID09ICAwOgorICAgICAgICAgICAgICAgICAgICBmYWlsZWRfZXh0cmFfY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpCisgICAgICAgICAgICBpZiBmYWlsZWRfZXh0cmFfY29tbWFuZHM6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygidGVhckRvd24gY29tbWFuZHMgaGF2ZSBmYWlsZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBmYWlsZWRfZXh0cmFfY29tbWFuZHMpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiVHJ5aW5nIHRvIG1vdmUgb24uIikKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXA6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLl90cmFja19mb3JfY2xlYW51cDoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgICAgICAgICAgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXAgPSBbXQorCisgICAgICAgIHNlbGYudGVhckRvd25Mb2NhbCgpCisKKyAgICBkZWYgdGVhckRvd25Mb2NhbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIyBhZGQgdGVzdCBzcGVjaWZpYyBjb21tYW5kcyB0byB0aGUgdGVhckRvd24gbWV0aG9kLgorICAgIGRlZiBhZGRfY29tbWFuZF90b190ZWFyRG93bihzZWxmLCBjb21tYW5kKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFkZGluZyBjb21tYW5kICclcycgdG8gdGVhckRvd24gZm9yIHRoaXMgdGVzdC4iICUgY29tbWFuZCkKKyAgICAgICAgc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKQorICAgICMgYWRkIHRlc3Qgc3BlY2lmaWMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gYmUgcmVtb3ZlZCBpbiB0aGUgdGVhckRvd24gbWV0aG9kCisgICAgZGVmIHRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQWRkaW5nIHBhdGggJyVzJyB0byBiZSBjbGVhbmVkIHVwIHdoZW4gdGVzdCBpcyBvdmVyIiAlIHBhdGgpCisgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwLmFwcGVuZChwYXRoKQorCisgICAgIyB3cml0ZSB0byA8YnVpbGRkaXI+L2NvbmYvc2VsZnRlc3QuaW5jCisgICAgZGVmIHdyaXRlX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQorCisgICAgIyBhcHBlbmQgdG8gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYworICAgIGRlZiBhcHBlbmRfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQXBwZW5kaW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpCisKKyAgICAjIHJlbW92ZSBkYXRhIGZyb20gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYworICAgIGRlZiByZW1vdmVfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcblwlc1xuIiAlIChzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQorCisgICAgIyB3cml0ZSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMKKyAgICBkZWYgd3JpdGVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSwgZGF0YSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoaW5jX2ZpbGUsIGRhdGEpCisKKyAgICAjIGFwcGVuZCBkYXRhIHRvIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYworICAgIGRlZiBhcHBlbmRfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSwgZGF0YSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQXBwZW5kaW5nIHRvOiAlc1xuJXNcbiIgJSAoaW5jX2ZpbGUsIGRhdGEpKQorICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUoaW5jX2ZpbGUsIGRhdGEpCisKKyAgICAjIHJlbW92ZSBkYXRhIGZyb20gbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jCisgICAgZGVmIHJlbW92ZV9yZWNpcGVpbmMoc2VsZiwgcmVjaXBlLCBkYXRhKToKKyAgICAgICAgaW5jX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bGF5ZXJfcGF0aCwgJ3JlY2lwZXMtdGVzdCcsIHJlY2lwZSwgJ3Rlc3RfcmVjaXBlLmluYycpCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuJXNcbiIgJSAoaW5jX2ZpbGUsIGRhdGEpKQorICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShpbmNfZmlsZSwgZGF0YSkKKworICAgICMgZGVsZXRlIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYyBmaWxlCisgICAgZGVmIGRlbGV0ZV9yZWNpcGVpbmMoc2VsZiwgcmVjaXBlKToKKyAgICAgICAgaW5jX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bGF5ZXJfcGF0aCwgJ3JlY2lwZXMtdGVzdCcsIHJlY2lwZSwgJ3Rlc3RfcmVjaXBlLmluYycpCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJEZWxldGluZyBmaWxlOiAlcyIgJSBpbmNfZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKGluY19maWxlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICMgd3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL2JibGF5ZXJzLmluYworICAgIGRlZiB3cml0ZV9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKKworICAgICMgYXBwZW5kIHRvIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMKKyAgICBkZWYgYXBwZW5kX2JibGF5ZXJzX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMKKyAgICBkZWYgcmVtb3ZlX2JibGF5ZXJzX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJlbW92aW5nIGZyb206ICVzXG5cJXNcbiIgJSAoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJsYXllcnMucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzE3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5CkBAIC0wLDAgKzEsNjIgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgZ2V0X2JiX3ZhcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIEJpdGJha2VMYXllcnMob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzU2KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd2Nyb3NzZGVwZW5kcyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWNyb3NzLWRlcGVuZHMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FzcGVsbCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIk5vIGRlcGVuZGVuY2llcyB3ZXJlIHNob3duLiBiaXRiYWtlLWxheWVycyBzaG93LWNyb3NzLWRlcGVuZHMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDgzKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd2xheWVycyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbWV0YS1zZWxmdGVzdCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIk5vIGxheWVycyB3ZXJlIHNob3duLiBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoOTMpCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93YXBwZW5kcyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQnIGluIHJlc3VsdC5vdXRwdXQsIG1zZz0ieGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYmFwcGVuZCBmaWxlIHdhcyBub3QgcmVjb2duaXNlZC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctYXBwZW5kcyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoOTApCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93b3ZlcmxheWVkKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctb3ZlcmxheWVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhc3BlbGwnIGluIHJlc3VsdC5vdXRwdXQsIG1zZz0iYXNwZWxsIG92ZXJsYXllZCByZWNpcGUgd2FzIG5vdCByZWNvZ25pc2VkIGJpdGJha2UtbGF5ZXJzIHNob3ctb3ZlcmxheWVkICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoOTUpCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuKHNlbGYpOgorICAgICAgICB0ZXN0b3V0ZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2Rpcih0ZXN0b3V0ZGlyKSwgbXNnID0gInRlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuIHNob3VsZCBub3QgZXhpc3QgYXQgdGhpcyBwb2ludCBpbiB0aW1lIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZXN0b3V0ZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGZsYXR0ZW4gJXMnICUgdGVzdG91dGRpcikKKyAgICAgICAgYmJfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0b3V0ZGlyLCAncmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoYmJfZmlsZSksIG1zZyA9ICJDYW5ub3QgZmluZCB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiIGluIHRoZSB0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbiBsb2NhbCBkaXIuIikKKyAgICAgICAgY29udGVudHMgPSBmdG9vbHMucmVhZF9maWxlKGJiX2ZpbGUpCisgICAgICAgIGZpbmRfaW5fY29udGVudHMgPSByZS5zZWFyY2goIiMjIyMjIGJiYXBwZW5kZWQgZnJvbSBtZXRhLXNlbGZ0ZXN0ICMjIyMjXG4oLipcbikqaW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMiLCBjb250ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfaW5fY29udGVudHMsIG1zZyA9ICJGbGF0dGVuaW5nIGxheWVycyBkaWQgbm90IHdvcmsuIGJpdGJha2UtbGF5ZXJzIGZsYXR0ZW4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExOTUpCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19hZGRfcmVtb3ZlKHNlbGYpOgorICAgICAgICB0ZXN0X2xheWVyID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksICdtZXRhLXNrZWxldG9uJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCAiVGhpcyB0ZXN0IGNhbm5vdCBydW4gd2l0aCBtZXRhLXNrZWxldG9uIGluIGJibGF5ZXJzLmNvbmYuIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAiU29tZXRoaW5nIHdyb25nIGhhcHBlbmVkLiBtZXRhLXNrZWxldG9uIGxheWVyIHdhcyBub3QgYWRkZWQgdG8gY29uZi9iYmxheWVycy5jb25mLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcycgJSB0ZXN0X2xheWVyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJtZXRhLXNrZWxldG9uIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBhdCB0aGlzIHN0ZXAuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIlNvbWV0aGluZyB3cm9uZyBoYXBwZW5lZC4gbWV0YS1za2VsZXRvbiBsYXllciB3YXMgbm90IGFkZGVkIHRvIGNvbmYvYmJsYXllcnMuY29uZi4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi9tZXRhLXNrZWxldG9uJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAibWV0YS1za2VsZXRvbiBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYXQgdGhpcyBzdGVwLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNjg2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JidGVzdHMucHkKQEAgLTAsMCArMSwyMDEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIEJpdGJha2VUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg3ODkpCisgICAgZGVmIHRlc3RfcnVuX2JpdGJha2VfZnJvbV9kaXJfMShzZWxmKToKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdjb25mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYml0YmFrZSgnLWUnKS5zdGF0dXMsIDAsIG1zZyA9ICJiaXRiYWtlIGNvdWxkbid0IHJ1biBmcm9tIFwiY29uZlwiIGRpciIpCisKKyAgICBAdGVzdGNhc2UoNzkwKQorICAgIGRlZiB0ZXN0X3J1bl9iaXRiYWtlX2Zyb21fZGlyXzIoc2VsZik6CisgICAgICAgIG15X2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG15X2VudlsnQkJQQVRIJ10gPSBteV9lbnZbJ0JVSUxERElSJ10KKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKG9zLmVudmlyb25bJ0JVSUxERElSJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpdGJha2UoJy1lJywgZW52PW15X2Vudikuc3RhdHVzLCAwLCBtc2cgPSAiYml0YmFrZSBjb3VsZG4ndCBydW4gZnJvbSBidWlsZGRpciIpCisKKyAgICBAdGVzdGNhc2UoODA2KQorICAgIGRlZiB0ZXN0X2V2ZW50X2hhbmRsZXIoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUICs9IFwidGVzdF9ldmVudHNcIiIpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGZpbmRfYnVpbGRfc3RhcnRlZCA9IHJlLnNlYXJjaCgiTk9URTogVGVzdCBmb3IgYmJcLmV2ZW50XC5CdWlsZFN0YXJ0ZWQoXG4uKikqTk9URTogUHJlcGFyaW5nIFJ1blF1ZXVlIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZmluZF9idWlsZF9jb21wbGV0ZWQgPSByZS5zZWFyY2goIlRhc2tzIFN1bW1hcnk6LiooXG4uKikqTk9URTogVGVzdCBmb3IgYmJcLmV2ZW50XC5CdWlsZENvbXBsZXRlZCIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2J1aWxkX3N0YXJ0ZWQsIG1zZyA9ICJNYXRjaCBmYWlsZWQgaW46XG4lcyIgICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfYnVpbGRfY29tcGxldGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50JyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiXCJUZXN0IGZvciBiYi5ldmVudC5JbnZhbGlkRXZlbnRcIiBtZXNzYWdlIGZvdW5kIGR1cmluZyBiaXRiYWtlIHByb2Nlc3MuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMykKKyAgICBkZWYgdGVzdF9sb2NhbF9zc3RhdGUoc2VsZik6CisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZSAtY2NsZWFuc3N0YXRlJykKKyAgICAgICAgYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgYml0YmFrZSgnbTQtbmF0aXZlIC1jY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtNC1uYXRpdmUnKQorICAgICAgICBmaW5kX3NldHNjZW5lID0gcmUuc2VhcmNoKCJtNC1uYXRpdmUuKmRvXy4qX3NldHNjZW5lIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfc2V0c2NlbmUsIG1zZyA9ICJObyBcIm00LW5hdGl2ZS4qZG9fLipfc2V0c2NlbmVcIiBtZXNzYWdlIGZvdW5kIGR1cmluZyBiaXRiYWtlIG00LW5hdGl2ZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQgKQorCisgICAgQHRlc3RjYXNlKDEwNSkKKyAgICBkZWYgdGVzdF9iaXRiYWtlX2ludmFsaWRfcmVjaXBlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYiBhc2RmJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgcmVjaXBlIGZpbGUgbWF0Y2hpbmcgJ2FzZGYnIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIGFzZGYgcmVjaXBlIGRvZXNuJ3QgZXhpc3QsIGJpdGJha2UgZGlkbid0IG91dHB1dCBhbnkgZXJyLiBtZXNzYWdlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDcpCisgICAgZGVmIHRlc3RfYml0YmFrZV9pbnZhbGlkX3RhcmdldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogTm90aGluZyBQUk9WSURFUyAnYXNkZiciIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJUaG91Z2ggbm8gJ2FzZGYnIHRhcmdldCBleGlzdHMsIGJpdGJha2UgZGlkbid0IG91dHB1dCBhbnkgZXJyLiBtZXNzYWdlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDYpCisgICAgZGVmIHRlc3Rfd2FybmluZ3NfZXJyb3JzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYiBhc2RmJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBmaW5kX3dhcm5pbmdzID0gcmUuc2VhcmNoKCJTdW1tYXJ5OiBUaGVyZSB3LnsyLDN9PyBbMS05XVswLTldKiBXQVJOSU5HIG1lc3NhZ2VzKiBzaG93biIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZpbmRfZXJyb3JzID0gcmUuc2VhcmNoKCJTdW1tYXJ5OiBUaGVyZSB3LnsyLDN9PyBbMS05XVswLTldKiBFUlJPUiBtZXNzYWdlcyogc2hvd24iLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF93YXJuaW5ncywgbXNnPSJEaWQgbm90IGZpbmQgdGhlIG11bWJlciBvZiB3YXJuaW5ncyBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZDpcbiIgKyByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9lcnJvcnMsIG1zZz0iRGlkIG5vdCBmaW5kIHRoZSBtdW1iZXIgb2YgZXJyb3JzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1aWxkOlxuIiArIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA4KQorICAgIGRlZiB0ZXN0X2ludmFsaWRfcGF0Y2goc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCAnU1JDX1VSSSArPSAiZmlsZTovL21hbi0xLjVoMS1tYWtlLnBhdGNoIicpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ21hbiAtYyBwYXRjaCcsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCdtYW4nKQorICAgICAgICBiaXRiYWtlKCctY2NsZWFuIG1hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogcGF0Y2hfZG9fcGF0Y2giIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJUaG91Z2ggbm8gbWFuLTEuNWgxLW1ha2UucGF0Y2ggZmlsZSBleGlzdHMsIGJpdGJha2UgZGlkbid0IG91dHB1dCBhbnkgZXJyLiBtZXNzYWdlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxNjMpCisgICAgZGVmIHRlc3RfZm9yY2VfdGFzayhzZWxmKToKKyAgICAgICAgYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiBtNC1uYXRpdmUnKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctQyBjb21waWxlIG00LW5hdGl2ZScpCisgICAgICAgIGxvb2tfZm9yX3Rhc2tzID0gWydkb19jb21waWxlJywgJ2RvX2luc3RhbGwnLCAnZG9fcG9wdWxhdGVfc3lzcm9vdCddCisgICAgICAgIGZvciB0YXNrIGluIGxvb2tfZm9yX3Rhc2tzOgorICAgICAgICAgICAgZmluZF90YXNrID0gcmUuc2VhcmNoKCJtNC1uYXRpdmUuKiVzIiAlIHRhc2ssIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF90YXNrLCBtc2cgPSAiQ291bGRuJ3QgZmluZCAlcyB0YXNrLiBiaXRiYWtlIG91dHB1dCAlcyIgJSAodGFzaywgcmVzdWx0Lm91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMTY3KQorICAgIGRlZiB0ZXN0X2JpdGJha2VfZyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWcgY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUnKQorICAgICAgICBmb3IgZiBpbiBbJ3BuLWJ1aWxkbGlzdCcsICdwbi1kZXBlbmRzLmRvdCcsICdwYWNrYWdlLWRlcGVuZHMuZG90JywgJ3Rhc2stZGVwZW5kcy5kb3QnXToKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTk9URTogUE4gYnVpbGQgbGlzdCBzYXZlZCB0byBcJ3BuLWJ1aWxkbGlzdFwnJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gZGVwZW5kZW5jeSBcInBuLWJ1aWxkbGlzdFwiIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgdGhlIGdpdmVuIHRhc2sgdGFyZ2V0LiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdvcGVuc3NoJyBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAncG4tYnVpbGRsaXN0JykpLCBtc2cgPSAiTm8gXCJvcGVuc3NoXCIgZGVwZW5kZW5jeSBmb3VuZCBpbiBwbi1idWlsZGxpc3QgZmlsZS4iKQorCisgICAgQHRlc3RjYXNlKDg5OSkKKyAgICBkZWYgdGVzdF9pbWFnZV9tYW5pZmVzdChzZWxmKToKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgZGVwbG95ZGlyID0gZ2V0X2JiX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgaW1hZ2VuYW1lID0gZ2V0X2JiX3ZhcigiSU1BR0VfTElOS19OQU1FIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBtYW5pZmVzdCA9IG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltYWdlbmFtZSArICIubWFuaWZlc3QiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2xpbmsobWFuaWZlc3QpLCBtc2c9Ik5vIG1hbmlmZXN0IGZpbGUgY3JlYXRlZCBmb3IgaW1hZ2UuIEl0IHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbiAlcyIgJSBtYW5pZmVzdCkKKworICAgIEB0ZXN0Y2FzZSgxNjgpCisgICAgZGVmIHRlc3RfaW52YWxpZF9yZWNpcGVfc3JjX3VyaShzZWxmKToKKyAgICAgICAgZGF0YSA9ICdTUkNfVVJJID0gImZpbGU6Ly9pbnZhbGlkIicKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ21hbicsIGRhdGEpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK1NTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCisiIiIpCisgICAgICAgIGJpdGJha2UoJy1jY2xlYW5hbGwgbWFuJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWMgZmV0Y2ggbWFuJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBiaXRiYWtlKCctY2NsZWFuYWxsIG1hbicpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnbWFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCBtc2c9IkNvbW1hbmQgc3VjY2VkZWQgd2hlbiBpdCBzaG91bGQgaGF2ZSBmYWlsZWQuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0ZldGNoZXIgZmFpbHVyZTogVW5hYmxlIHRvIGZpbmQgZmlsZSBmaWxlOi8vaW52YWxpZCBhbnl3aGVyZS4gVGhlIHBhdGhzIHRoYXQgd2VyZSBzZWFyY2hlZCB3ZXJlOicgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlwiaW52YWxpZFwiIGZpbGUgXAorZG9lc24ndCBleGlzdCwgeWV0IG5vIGVycm9yIG1lc3NhZ2UgZW5jb3VudGVyZWQuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0VSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IEZldGNoZXIgZmFpbHVyZSBmb3IgVVJMOiBcJ2ZpbGU6Ly9pbnZhbGlkXCcuIFVuYWJsZSB0byBmZXRjaCBVUkwgZnJvbSBhbnkgc291cmNlLicgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlwiaW52YWxpZFwiIGZpbGUgXAorZG9lc24ndCBleGlzdCwgeWV0IGZldGNoZXIgZGlkbid0IHJlcG9ydCBhbnkgZXJyb3IuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDE3MSkKKyAgICBkZWYgdGVzdF9yZW5hbWVfZG93bmxvYWRlZF9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitTU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorIiIiKQorICAgICAgICBkYXRhID0gJ1NSQ19VUklfYXBwZW5kID0gIjtkb3dubG9hZGZpbGVuYW1lPXRlc3QtYXNwZWxsLnRhci5neiInCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdhc3BlbGwnLCBkYXRhKQorICAgICAgICBiaXRiYWtlKCctY2NsZWFuYWxsIGFzcGVsbCcpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1jIGZldGNoIGFzcGVsbCcsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCdhc3BlbGwnKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYml0YmFrZSwgJy1jY2xlYW5hbGwgYXNwZWxsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCBtc2cgPSAiQ291bGRuJ3QgZmV0Y2ggYXNwZWxsLiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIkRMX0RJUiIpLCAndGVzdC1hc3BlbGwudGFyLmd6JykpLCBtc2cgPSAiRmlsZSByZW5hbWUgZmFpbGVkLiBObyBjb3JyZXNwb25kaW5nIHRlc3QtYXNwZWxsLnRhci5neiBmaWxlIGZvdW5kIHVuZGVyICVzIiAlIHN0cihnZXRfYmJfdmFyKCJETF9ESVIiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcigiRExfRElSIiksICd0ZXN0LWFzcGVsbC50YXIuZ3ouZG9uZScpKSwgIkZpbGUgcmVuYW1lIGZhaWxlZC4gTm8gY29ycmVzcG9uZGluZyB0ZXN0LWFzcGVsbC50YXIuZ3ouZG9uZSBmaWxlIGZvdW5kIHVuZGVyICVzIiAlIHN0cihnZXRfYmJfdmFyKCJETF9ESVIiKSkpCisKKyAgICBAdGVzdGNhc2UoMTAyOCkKKyAgICBkZWYgdGVzdF9lbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJURVNUX0VOVj1cImxvY2FsY29uZlwiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucmVtb3ZlX2NvbmZpZywgIlRFU1RfRU5WPVwibG9jYWxjb25mXCIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLWUgfCBncmVwIFRFU1RfRU5WPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbG9jYWxjb25mJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiYml0YmFrZSBkaWRuJ3QgcmVwb3J0IGFueSB2YWx1ZSBmb3IgVEVTVF9FTlYgdmFyaWFibGUuIFRvIHRlc3QsIHJ1biAnYml0YmFrZSAtZSB8IGdyZXAgVEVTVF9FTlY9JyIpCisKKyAgICBAdGVzdGNhc2UoMTAyOSkKKyAgICBkZWYgdGVzdF9kcnlfcnVuKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLW4gbTQtbmF0aXZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiYml0YmFrZSBkcnkgcnVuIGRpZG4ndCBydW4gYXMgZXhwZWN0ZWQuICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTAzMCkKKyAgICBkZWYgdGVzdF9qdXN0X3BhcnNlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLXAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsICJlcnJvcnMgZW5jb3VudGVyZWQgd2hlbiBwYXJzaW5nIHJlY2lwZXMuICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTAzMSkKKyAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLXMgfCBncmVwIHdnZXQnKQorICAgICAgICBmaW5kID0gcmUuc2VhcmNoKCJ3Z2V0ICo6KFswLTlhLXpBLVpcLlwtXSspIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmQsICJObyB2ZXJzaW9uIHJldHVybmVkIGZvciBzZWFyY2hlZCByZWNpcGUuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzIpCisgICAgZGVmIHRlc3RfcHJlZmlsZShzZWxmKToKKyAgICAgICAgcHJlY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9wcmVmaWxlLmNvbmYnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHByZWNvbmYpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHByZWNvbmYgLCJURVNUX1BSRUZJTEU9XCJwcmVmaWxlXCIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLXIgY29uZi9wcmVmaWxlLmNvbmYgLWUgfCBncmVwIFRFU1RfUFJFRklMRT0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3ByZWZpbGUnIGluIHJlc3VsdC5vdXRwdXQsICJQcmVjb25maWd1cmUgZmlsZSBcInByZWZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uICIpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiVEVTVF9QUkVGSUxFPVwibG9jYWxjb25mXCIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5yZW1vdmVfY29uZmlnLCAiVEVTVF9QUkVGSUxFPVwibG9jYWxjb25mXCIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLXIgY29uZi9wcmVmaWxlLmNvbmYgLWUgfCBncmVwIFRFU1RfUFJFRklMRT0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2FsY29uZicgaW4gcmVzdWx0Lm91dHB1dCwgIlByZWNvbmZpZ3VyZSBmaWxlIFwicHJlZmlsZS5jb25mXCJ3YXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4iKQorCisgICAgQHRlc3RjYXNlKDEwMzMpCisgICAgZGVmIHRlc3RfcG9zdGZpbGUoc2VsZik6CisgICAgICAgIHBvc3Rjb25mID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdjb25mL3Bvc3RmaWxlLmNvbmYnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHBvc3Rjb25mKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShwb3N0Y29uZiAsICJURVNUX1BPU1RGSUxFPVwicG9zdGZpbGVcIiIpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiVEVTVF9QT1NURklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucmVtb3ZlX2NvbmZpZywgIlRFU1RfUE9TVEZJTEU9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtUiBjb25mL3Bvc3RmaWxlLmNvbmYgLWUgfCBncmVwIFRFU1RfUE9TVEZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdwb3N0ZmlsZScgaW4gcmVzdWx0Lm91dHB1dCwgIlBvc3Rjb25maWd1cmUgZmlsZSBcInBvc3RmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiIpCisKKyAgICBAdGVzdGNhc2UoMTAzNCkKKyAgICBkZWYgdGVzdF9jaGVja3VyaShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1jIGNoZWNrdXJpIG00JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCBtc2cgPSAiXCJjaGVja3VyaVwiIHRhc2sgd2FzIG5vdCBleGVjdXRlZC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTAzNSkKKyAgICBkZWYgdGVzdF9jb250aW51ZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKKyIiIikKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ21hbicsIlxuZG9fZmFpbF90YXNrICgpIHtcbmV4aXQgMSBcbn1cblxuYWRkdGFzayBkb19mYWlsX3Rhc2sgYmVmb3JlIGRvX2ZldGNoXG4iICkKKyAgICAgICAgcnVuQ21kKCdiaXRiYWtlIC1jIGNsZWFuYWxsIG1hbiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIG1hbiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIC1rJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBlcnJvcnBvcyA9IHJlc3VsdC5vdXRwdXQuZmluZCgnRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogZG9fZmFpbF90YXNrJykKKyAgICAgICAgbWFudmVyID0gcmUuc2VhcmNoKCJOT1RFOiByZWNpcGUgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0oLio/KTogdGFzayBkb191bnBhY2s6IFN0YXJ0ZWQiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBjb250aW51ZXBvcyA9IHJlc3VsdC5vdXRwdXQuZmluZCgnTk9URTogcmVjaXBlIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtJXM6IHRhc2sgZG9fdW5wYWNrOiBTdGFydGVkJyAlIG1hbnZlci5ncm91cCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGVycm9ycG9zLGNvbnRpbnVlcG9zLCBtc2cgPSAiYml0YmFrZSBkaWRuJ3QgcGFzcyBkb19mYWlsX3Rhc2suIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExMTkpCisgICAgZGVmIHRlc3Rfbm9uX2dwbHYzKHNlbGYpOgorICAgICAgICBkYXRhID0gJ0lOQ09NUEFUSUJMRV9MSUNFTlNFID0gIkdQTHYzIicKKyAgICAgICAgY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9sb2NhbC5jb25mJykKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKGNvbmYgLGRhdGEpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZSwgY29uZiAsZGF0YSkKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgncmVhZGxpbmUnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgIkJpdGJha2UgZmFpbGVkLCBleGl0IGNvZGUgJXMsIG91dHB1dCAlcyIgJSAocmVzdWx0LnN0YXR1cywgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0bXAvZGVwbG95L2xpY2Vuc2VzL3JlYWRsaW5lL2dlbmVyaWNfR1BMdjMnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3RtcC9kZXBsb3kvbGljZW5zZXMvcmVhZGxpbmUvZ2VuZXJpY19HUEx2MicpKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRoaXN0b3J5LnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZGhpc3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjYWU0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRoaXN0b3J5LnB5CkBAIC0wLDAgKzEsNDUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBkYXRldGltZQorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBDb21tYW5kLCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCisKKworY2xhc3MgQnVpbGRoaXN0b3J5QmFzZShvZVNlbGZUZXN0KToKKworICAgIGRlZiBjb25maWdfYnVpbGRoaXN0b3J5KHNlbGYsIHRtcF9iaF9sb2NhdGlvbj1GYWxzZSk6CisgICAgICAgIGlmIChub3QgJ2J1aWxkaGlzdG9yeScgaW4gZ2V0X2JiX3ZhcignVVNFUl9DTEFTU0VTJykpIGFuZCAobm90ICdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ0lOSEVSSVQnKSk6CisgICAgICAgICAgICBhZGRfYnVpbGRoaXN0b3J5X2NvbmZpZyA9ICdJTkhFUklUICs9ICJidWlsZGhpc3RvcnkiXG5CVUlMREhJU1RPUllfQ09NTUlUID0gIjEiJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGFkZF9idWlsZGhpc3RvcnlfY29uZmlnKQorCisgICAgICAgIGlmIHRtcF9iaF9sb2NhdGlvbjoKKyAgICAgICAgICAgICMgVXNpbmcgYSB0ZW1wb3JhcnkgYnVpbGRoaXN0b3J5IGxvY2F0aW9uIGZvciB0ZXN0aW5nCisgICAgICAgICAgICB0bXBfYmhfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0bXBfYnVpbGRoaXN0b3J5XyVzIiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkKKyAgICAgICAgICAgIGJ1aWxkaGlzdG9yeV9kaXJfY29uZmlnID0gIkJVSUxESElTVE9SWV9ESVIgPSBcIiVzXCIiICUgdG1wX2JoX2RpcgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGJ1aWxkaGlzdG9yeV9kaXJfY29uZmlnKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0bXBfYmhfZGlyKQorCisgICAgZGVmIHJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHNlbGYsIHRhcmdldCwgZ2xvYmFsX2NvbmZpZz0nJywgdGFyZ2V0X2NvbmZpZz0nJywgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9RmFsc2UsIGVycm9yX3JlZ2V4PScnKToKKyAgICAgICAgaWYgY2hhbmdlX2JoX2xvY2F0aW9uOgorICAgICAgICAgICAgdG1wX2JoX2xvY2F0aW9uID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG1wX2JoX2xvY2F0aW9uID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25maWdfYnVpbGRoaXN0b3J5KHRtcF9iaF9sb2NhdGlvbikKKworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZykKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbiAlcyIgJSB0YXJnZXQpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UodGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhnbG9iYWxfY29uZmlnKQorICAgICAgICBzZWxmLnJlbW92ZV9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnKQorCisgICAgICAgIGlmIGV4cGVjdF9lcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJFcnJvciBleHBlY3RlZCBmb3IgZ2xvYmFsIGNvbmZpZyAnJXMnIGFuZCB0YXJnZXQgY29uZmlnICclcyciICUgKGdsb2JhbF9jb25maWcsIHRhcmdldF9jb25maWcpKQorICAgICAgICAgICAgc2VhcmNoX2Zvcl9lcnJvciA9IHJlLnNlYXJjaChlcnJvcl9yZWdleCwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWFyY2hfZm9yX2Vycm9yLCBtc2c9IkNvdWxkIG5vdCBmaW5kIGRlc2lyZWQgZXJyb3IgaW4gb3V0cHV0OiAlcyIgJSBlcnJvcl9yZWdleCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgbXNnPSJDb21tYW5kICdiaXRiYWtlICVzJyBoYXMgZmFpbGVkIHVuZXhwZWN0ZWRseTogJXMiICUgKHRhcmdldCwgcmVzdWx0Lm91dHB1dCkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRvcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzgwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weQpAQCAtMCwwICsxLDE0OSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBnbG9iIGFzIGcKK2ltcG9ydCBwZXhwZWN0IGFzIHAKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS5zZWxmdGVzdC5idWlsZGhpc3RvcnkgaW1wb3J0IEJ1aWxkaGlzdG9yeUJhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgSW1hZ2VPcHRpb25zVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzYxKQorICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsX2ltYWdlX2dlbmVyYXRpb24oc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBnZXRfYmJfdmFyKCJJTUFHRV9QS0dUWVBFIikKKyAgICAgICAgaWYgaW1hZ2VfcGtndHlwZSAhPSAncnBtJzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ05vdCB1c2luZyBSUE0gYXMgbWFpbiBwYWNrYWdlIGZvcm1hdCcpCisgICAgICAgIGJpdGJha2UoIi1jIGNsZWFuYWxsIGNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdJTkNfUlBNX0lNQUdFX0dFTiA9ICIxIicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBsb2dfZGF0YV9maWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCAiY29yZS1pbWFnZS1taW5pbWFsIiksICJ0ZW1wL2xvZy5kb19yb290ZnMiKQorICAgICAgICBsb2dfZGF0YV9jcmVhdGVkID0gZnRvb2xzLnJlYWRfZmlsZShsb2dfZGF0YV9maWxlKQorICAgICAgICBpbmNyZW1lbnRhbF9jcmVhdGVkID0gcmUuc2VhcmNoKCJOT1RFOiBsb2FkIG9sZCBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsXG5OT1RFOiBvbGQgaW5zdGFsbCBzb2x1dGlvbiBub3QgZXhpc3Rcbk5PVEU6IGNyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsKFxuLiopKk5PVEU6IEluc3RhbGxpbmcgdGhlIGZvbGxvd2luZyBwYWNrYWdlczouKnBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIiwgbG9nX2RhdGFfY3JlYXRlZCkKKyAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKCdJTUFHRV9GRUFUVVJFUyArPSAic3NoLXNlcnZlci1vcGVuc3NoIicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNyZW1lbnRhbF9jcmVhdGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICUgbG9nX2RhdGFfY3JlYXRlZCkKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbG9nX2RhdGFfcmVtb3ZlZCA9IGZ0b29scy5yZWFkX2ZpbGUobG9nX2RhdGFfZmlsZSkKKyAgICAgICAgaW5jcmVtZW50YWxfcmVtb3ZlZCA9IHJlLnNlYXJjaCgiTk9URTogbG9hZCBvbGQgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbFxuTk9URTogY3JlYXRpbmcgbmV3IGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGwoXG4uKikqTk9URTogaW5jcmVtZW50YWwgcmVtb3ZlZDouKm9wZW5zc2gtc3NoZC0uKiIsIGxvZ19kYXRhX3JlbW92ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNyZW1lbnRhbF9yZW1vdmVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICUgbG9nX2RhdGFfcmVtb3ZlZCkKKworICAgIEB0ZXN0Y2FzZSg5MjUpCisgICAgZGVmIHRlc3Rfcm1fb2xkX2ltYWdlKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXIgPSBnZXRfYmJfdmFyKCJERVBMT1lfRElSX0lNQUdFIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBpbWFnZW5hbWUgPSBnZXRfYmJfdmFyKCJJTUFHRV9MSU5LX05BTUUiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGRlcGxveWRpcl9maWxlcyA9IG9zLmxpc3RkaXIoZGVwbG95ZGlyKQorICAgICAgICB0cmFja19vcmlnaW5hbF9maWxlcyA9IFtdCisgICAgICAgIGZvciBpbWFnZV9maWxlIGluIGRlcGxveWRpcl9maWxlczoKKyAgICAgICAgICAgIGlmIGltYWdlbmFtZSBpbiBpbWFnZV9maWxlIGFuZCBvcy5wYXRoLmlzbGluayhvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWFnZV9maWxlKSk6CisgICAgICAgICAgICAgICAgdHJhY2tfb3JpZ2luYWxfZmlsZXMuYXBwZW5kKG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VfZmlsZSkpKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlJNX09MRF9JTUFHRSA9IFwiMVwiIikKKyAgICAgICAgYml0YmFrZSgiLUMgcm9vdGZzIGNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGRlcGxveWRpcl9maWxlcyA9IG9zLmxpc3RkaXIoZGVwbG95ZGlyKQorICAgICAgICByZW1haW5pbmdfbm90X2V4cGVjdGVkID0gW3BhdGggZm9yIHBhdGggaW4gdHJhY2tfb3JpZ2luYWxfZmlsZXMgaWYgb3MucGF0aC5iYXNlbmFtZShwYXRoKSBpbiBkZXBsb3lkaXJfZmlsZXNdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtYWluaW5nX25vdF9leHBlY3RlZCwgbXNnPSJcblRoZSBmb2xsb3dpbmcgaW1hZ2UgZmlsZXMgd2VyZSBub3QgcmVtb3ZlZDogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQpKSkKKworICAgIEB0ZXN0Y2FzZSgyODYpCisgICAgZGVmIHRlc3RfY2NhY2hlX3Rvb2woc2VsZik6CisgICAgICAgIGJpdGJha2UoImNjYWNoZS1uYXRpdmUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsICdjY2FjaGUtbmF0aXZlJyksICJjY2FjaGUiKSksIG1zZyA9ICJObyBjY2FjaGUgZm91bmQgdW5kZXIgJXMiICUgc3RyKGdldF9iYl92YXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsICdjY2FjaGUtbmF0aXZlJykpKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU5IRVJJVCArPSAiY2NhY2hlIicpCisgICAgICAgIGJpdGJha2UoIm00IC1jIGNsZWFuc3N0YXRlIikKKyAgICAgICAgYml0YmFrZSgibTQgLWMgY29tcGlsZSIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChiaXRiYWtlLCAnY2NhY2hlLW5hdGl2ZSAtY2NsZWFuc3N0YXRlJykKKyAgICAgICAgcmVzID0gcnVuQ21kKCJncmVwIGNjYWNoZSAlcyIgJSAob3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCJtNCIpLCJ0ZW1wL2xvZy5kb19jb21waWxlIikpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzLnN0YXR1cywgbXNnPSJObyBtYXRjaCBmb3IgY2NhY2hlIGluIG00IGxvZy5kb19jb21waWxlLiBGb3IgZnVydGhlciBkZXRhaWxzOiAlcyIgJSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcigiV09SS0RJUiIsIm00IiksInRlbXAvbG9nLmRvX2NvbXBpbGUiKSkKKworCitjbGFzcyBEaXNrTW9uVGVzdChvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyNzcpCisgICAgZGVmIHRlc3Rfc3RvcHRhc2tfYmVoYXZpb3Ioc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiU1RPUFRBU0tTLCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogTm8gbmV3IHRhc2tzIGNhbiBiZSBleGVjdXRlZCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyAiU1RPUFRBU0tTIiEnIGluIHJlcy5vdXRwdXQsIG1zZyA9ICJUYXNrcyBzaG91bGQgaGF2ZSBzdG9wcGVkLiBEaXNrIG1vbml0b3IgaXMgc2V0IHRvIFNUT1BUQVNLOiAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiQUJPUlQsJHtUTVBESVJ9LDEwMDAwMEcsMTAwSyInKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJtNCIsIGlnbm9yZV9zdGF0dXMgPSBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0VSUk9SOiBJbW1lZGlhdGVseSBhYm9ydCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyAiQUJPUlQiIScgaW4gcmVzLm91dHB1dCwgIlRhc2tzIHNob3VsZCBoYXZlIGJlZW4gYWJvcnRlZCBpbW1lZGlhdGVsbHkuIERpc2sgbW9uaXRvciBpcyBzZXQgdG8gQUJPUlQ6ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0JCX0RJU0tNT05fRElSUyA9ICJXQVJOLCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1dBUk5JTkc6IFRoZSBmcmVlIHNwYWNlJyBpbiByZXMub3V0cHV0LCBtc2cgPSAiQSB3YXJuaW5nIHNob3VsZCBoYXZlIGJlZW4gZGlzcGxheWVkIGZvciBkaXNrIG1vbml0b3IgaXMgc2V0IHRvIFdBUk46ICVzIiAlcmVzLm91dHB1dCkKKworY2xhc3MgU2FuaXR5T3B0aW9uc1Rlc3Qob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoOTI3KQorICAgIGRlZiB0ZXN0X29wdGlvbnNfd2FybnFhX2Vycm9ycWFfc3dpdGNoKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIC1jY2xlYW5zc3RhdGUiKQorCisgICAgICAgIGlmICJwYWNrYWdlcy1saXN0IiBub3QgaW4gZ2V0X2JiX3ZhcigiRVJST1JfUUEiKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJFUlJPUl9RQV9hcHBlbmQgPSBcIiBwYWNrYWdlcy1saXN0XCIiKQorCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ1BBQ0tBR0VTICs9IFwiJHtQTn0tZGJnXCInKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIiwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIiBpbiByZXMub3V0cHV0LCBtc2c9cmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAxLCBtc2cgPSAiYml0YmFrZSByZXBvcnRlZCBleGl0IGNvZGUgJXMuIEl0IHNob3VsZCBoYXZlIGJlZW4gMS4gQml0YmFrZSBvdXRwdXQ6ICVzIiAlIChzdHIocmVzLnN0YXR1cyksIHJlcy5vdXRwdXQpKQorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdQQUNLQUdFUyArPSBcIiR7UE59LWRiZ1wiJykKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdFUlJPUl9RQV9yZW1vdmUgPSAicGFja2FnZXMtbGlzdCInKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ1dBUk5fUUFfYXBwZW5kID0gIiBwYWNrYWdlcy1saXN0IicpCisgICAgICAgIGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgLWNjbGVhbnNzdGF0ZSIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIldBUk5JTkc6IFFBIElzc3VlOiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLWRiZyBpcyBsaXN0ZWQgaW4gUEFDS0FHRVMgbXVsdGlwbGUgdGltZXMsIHRoaXMgbGVhZHMgdG8gcGFja2FnaW5nIGVycm9ycy4iIGluIHJlcy5vdXRwdXQsIG1zZz1yZXMub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDI3OCkKKyAgICBkZWYgdGVzdF9zYW5pdHlfdXNlcnNwYWNlX2RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnV0FSTl9RQV9hcHBlbmQgPSAiIHVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIHVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiJykKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSBnemlwIG5mcy11dGlscyIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoImd6aXAgbmZzLXV0aWxzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJXQVJOSU5HOiBRQSBJc3N1ZTogZ3ppcCIgaW4gcmVzLm91dHB1dCwgIldBUk5JTkc6IFFBIElzc3VlOiBnemlwIG1lc3NhZ2UgaXMgbm90IHByZXNlbnQgaW4gYml0YmFrZSdzIG91dHB1dDogJXMiICUgcmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJXQVJOSU5HOiBRQSBJc3N1ZTogbmZzLXV0aWxzIiBpbiByZXMub3V0cHV0LCAiV0FSTklORzogUUEgSXNzdWU6IG5mcy11dGlscyBtZXNzYWdlIGlzIG5vdCBwcmVzZW50IGluIGJpdGJha2UncyBvdXRwdXQ6ICVzIiAlIHJlcy5vdXRwdXQpCisKK2NsYXNzIEJ1aWxkaGlzdG9yeVRlc3RzKEJ1aWxkaGlzdG9yeUJhc2UpOgorCisgICAgQHRlc3RjYXNlKDI5MykKKyAgICBkZWYgdGVzdF9idWlsZGhpc3RvcnlfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24oJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihnZXRfYmJfdmFyKCdCVUlMREhJU1RPUllfRElSJykpLCAiYnVpbGRoaXN0b3J5IGRpciB3YXMgbm90IGNyZWF0ZWQuIikKKworICAgIEB0ZXN0Y2FzZSgyOTQpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2J1aWxkdGltZV9wcl9iYWNrd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NsZWFudXAtd29ya2RpcicpCisgICAgICAgIHRhcmdldCA9ICd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJworICAgICAgICBlcnJvciA9ICJFUlJPUjogUUEgSXNzdWU6IFBhY2thZ2UgdmVyc2lvbiBmb3IgcGFja2FnZSAlcyB3ZW50IGJhY2t3YXJkcyB3aGljaCB3b3VsZCBicmVhayBwYWNrYWdlIGZlZWRzIGZyb20gKC4qLXIxIHRvIC4qLXIwKSIgJSB0YXJnZXQKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMVwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPVRydWUpCisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjBcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPVRydWUsIGVycm9yX3JlZ2V4PWVycm9yKQorCitjbGFzcyBCdWlsZEltYWdlc1Rlc3Qob2VTZWxmVGVzdCk6CisgICAgQHRlc3RjYXNlKDU2MykKKyAgICBkZWYgdGVzdF9kaXJlY3RmYihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdGVzdCB0aGUgYnVpbGQgb2YgZGlyZWN0ZmIgaW1hZ2UgZm9yIGFybSBhcmNoLgorICAgICAgICBJbiBlc3NlbmNlIHdlIGJ1aWxkIGEgY29yZWltYWdlZGlyZWN0ZmIgYW5kIHRlc3QgdGhlIGV4aXRjb2RlIG9mIGJpdGJha2UgdGhhdCBpbiBjYXNlIG9mIHN1Y2Nlc3MgaXMgMC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NsZWFudXB3b3JrZGlyJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIkRJU1RST19GRUFUVVJFU19yZW1vdmUgPSBcIngxMVwiXG5ESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gXCIgZGlyZWN0ZmJcIlxuTUFDSElORSA/Pz0gXCJxZW11YXJtXCIiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJjb3JlLWltYWdlLWRpcmVjdGZiIiwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDAsICJcbmNvcmVpbWFnZWRpcmVjdGZiIGZhaWxlZCB0byBidWlsZC4gUGxlYXNlIGNoZWNrIGxvZ3MgZm9yIGZ1cnRoZXIgZGV0YWlscy5cbmJpdGJha2Ugb3V0cHV0ICVzIiAlIHJlcy5vdXRwdXQpCisKK2NsYXNzIEFyY2hpdmVyVGVzdChvZVNlbGZUZXN0KToKKyAgICBAdGVzdGNhc2UoOTI2KQorICAgIGRlZiB0ZXN0X2FyY2hfd29ya19kaXJfYW5kX2V4cG9ydF9zb3VyY2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IGZvciBhcmNoaXZpbmcgdGhlIHdvcmsgZGlyZWN0b3J5IGFuZCBleHBvcnRpbmcgdGhlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NsZWFudXB3b3JrZGlyJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIklOSEVSSVQgPSBcImFyY2hpdmVyXCJcbkFSQ0hJVkVSX01PREVbc3JjXSA9IFwib3JpZ2luYWxcIlxuQVJDSElWRVJfTU9ERVtzcnBtXSA9IFwiMVwiIikKKyAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAwLCAiXG5Db3VsZG4ndCBidWlsZCB4Y3Vyc29ydHJhbnNwYXJlbnR0aGVtZS5cbmJpdGJha2Ugb3V0cHV0ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHBrZ3NfcGF0aCA9IGcuZ2xvYihzdHIoc2VsZi5idWlsZGRpcikgKyAiL3RtcC9kZXBsb3kvc291cmNlcy9hbGxhcmNoKi94Y3VycyoiKQorICAgICAgICBzcmNfZmlsZV9nbG9iID0gc3RyKHBrZ3NfcGF0aFswXSkgKyAiL3hjdXJzb3IqLnNyYy5ycG0iCisgICAgICAgIHRhcl9maWxlX2dsb2IgPSBzdHIocGtnc19wYXRoWzBdKSArICIveGN1cnNvcioudGFyLmd6IgorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGcuZ2xvYihzcmNfZmlsZV9nbG9iKSBhbmQgZy5nbG9iKHRhcl9maWxlX2dsb2IpKSwgIkNvdWxkbid0IGZpbmQgLnNyYy5ycG0gYW5kIC50YXIuZ3ogZmlsZXMgdW5kZXIgdG1wL2RlcGxveS9zb3VyY2VzL2FsbGFyY2gqL3hjdXJzb3IqIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTczMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9kZXZ0b29sLnB5CkBAIC0wLDAgKzEsOTcxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgZ2xvYgorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGNyZWF0ZV90ZW1wX2xheWVyLCBydW5xZW11Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgRGV2dG9vbEJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHNlbGYsIHJlY2lwZWZpbGUsIGNoZWNrdmFycywgY2hlY2tpbmhlcml0cyk6CisgICAgICAgIHdpdGggb3BlbihyZWNpcGVmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmICc9JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgICAgICAgICAgdmFyID0gc3BsaXRsaW5lWzBdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXRsaW5lWzFdLnN0cmlwKCkuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICBpZiB2YXIgaW4gY2hlY2t2YXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHZhbHVlID0gY2hlY2t2YXJzLnBvcCh2YXIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBuZWVkdmFsdWUsICd2YWx1ZXMgZm9yICVzIGRvIG5vdCBtYXRjaCcgJSB2YXIpCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdpbmhlcml0ICcpOgorICAgICAgICAgICAgICAgICAgICBpbmhlcml0cyA9IGxpbmUuc3BsaXQoKVsxOl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrdmFycywge30sICdTb21lIHZhcmlhYmxlcyBub3QgZm91bmQ6ICVzJyAlIGNoZWNrdmFycykKKworICAgICAgICBmb3IgaW5oZXJpdCBpbiBjaGVja2luaGVyaXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpbmhlcml0LCBpbmhlcml0cywgJ01pc3NpbmcgaW5oZXJpdCBvZiAlcycgJSBpbmhlcml0KQorCisgICAgZGVmIF9jaGVja19iYmFwcGVuZChzZWxmLCB0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBhcHBlbmRkaXIpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctYXBwZW5kcycsIGN3ZD1zZWxmLmJ1aWxkZGlyKQorICAgICAgICByZXN1bHRsaW5lcyA9IHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpCisgICAgICAgIGlucmVjaXBlID0gRmFsc2UKKyAgICAgICAgYmJhcHBlbmRzID0gW10KKyAgICAgICAgYmJhcHBlbmRmaWxlID0gTm9uZQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHRsaW5lczoKKyAgICAgICAgICAgIGlmIGlucmVjaXBlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnICcpOgorICAgICAgICAgICAgICAgICAgICBiYmFwcGVuZHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBsaW5lID09ICclczonICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKToKKyAgICAgICAgICAgICAgICBpbnJlY2lwZSA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGVuKGJiYXBwZW5kcyksIDIsICclcyByZWNpcGUgaXMgYmVpbmcgYmJhcHBlbmRlZCBieSBhbm90aGVyIGxheWVyIC0gYmJhcHBlbmRzIGZvdW5kOlxuICAlcycgJSAodGVzdHJlY2lwZSwgJ1xuICAnLmpvaW4oYmJhcHBlbmRzKSkpCisgICAgICAgIGZvciBiYmFwcGVuZCBpbiBiYmFwcGVuZHM6CisgICAgICAgICAgICBpZiBiYmFwcGVuZC5zdGFydHN3aXRoKGFwcGVuZGRpcik6CisgICAgICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gYmJhcHBlbmQKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdiYmFwcGVuZCBmb3IgcmVjaXBlICVzIGRvZXMgbm90IHNlZW0gdG8gYmUgY3JlYXRlZCBpbiB0ZXN0IGxheWVyJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJldHVybiBiYmFwcGVuZGZpbGUKKworICAgIGRlZiBfY3JlYXRlX3RlbXBfbGF5ZXIoc2VsZiwgdGVtcGxheWVyZGlyLCBhZGRsYXllciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHk9OTk5LCByZWNpcGVwYXRoc3BlYz0ncmVjaXBlcy0qLyonKToKKyAgICAgICAgY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCB0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eSwgcmVjaXBlcGF0aHNwZWMpCisgICAgICAgIGlmIGFkZGxheWVyOgorICAgICAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzIHx8IHRydWUnICUgdGVtcGxheWVyZGlyKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKworICAgIGRlZiBfcHJvY2Vzc19sc19vdXRwdXQoc2VsZiwgb3V0cHV0KToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnZlcnQgbHMgLWwgb3V0cHV0IHRvIGEgZm9ybWF0IHdlIGNhbiByZWFzb25hYmx5IGNvbXBhcmUgZnJvbSBvbmUgY29udGV4dAorICAgICAgICB0byBhbm90aGVyIChlLmcuIGZyb20gaG9zdCB0byB0YXJnZXQpCisgICAgICAgICIiIgorICAgICAgICBmaWxlbGlzdCA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIC4gb24gcGVybXMKKyAgICAgICAgICAgIHNwbGl0bGluZVswXSA9IHNwbGl0bGluZVswXS5yc3RyaXAoJy4nKQorICAgICAgICAgICAgIyBSZW1vdmUgbGVhZGluZyAuIG9uIHBhdGhzCisgICAgICAgICAgICBzcGxpdGxpbmVbLTFdID0gc3BsaXRsaW5lWy0xXS5sc3RyaXAoJy4nKQorICAgICAgICAgICAgIyBEcm9wIGZpZWxkcyB3ZSBkb24ndCB3YW50IHRvIGNvbXBhcmUKKyAgICAgICAgICAgIGRlbCBzcGxpdGxpbmVbN10KKyAgICAgICAgICAgIGRlbCBzcGxpdGxpbmVbNl0KKyAgICAgICAgICAgIGRlbCBzcGxpdGxpbmVbNV0KKyAgICAgICAgICAgIGRlbCBzcGxpdGxpbmVbNF0KKyAgICAgICAgICAgIGRlbCBzcGxpdGxpbmVbMV0KKyAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZCgnICcuam9pbihzcGxpdGxpbmUpKQorICAgICAgICByZXR1cm4gZmlsZWxpc3QKKworCitjbGFzcyBEZXZ0b29sVGVzdHMoRGV2dG9vbEJhc2UpOgorCisgICAgQHRlc3RjYXNlKDExNTgpCisgICAgZGVmIHRlc3RfY3JlYXRlX3dvcmtzcGFjZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy93b3Jrc3BhY2UnIG5vdCBpbiByZXN1bHQub3V0cHV0LCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBsYXllciBpbiBiYmxheWVycy5jb25mJykKKyAgICAgICAgIyBUcnkgY3JlYXRpbmcgYSB3b3Jrc3BhY2UgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIHBhdGgKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgbXNnID0gIk5vIHdvcmtzcGFjZSBjcmVhdGVkLiBkZXZ0b29sIG91dHB1dDogJXMgIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgd29ya3NwYWNlIGxheWVyIHdpdGggdGhlIGRlZmF1bHQgcGF0aAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgbXNnID0gIk5vIHdvcmtzcGFjZSBjcmVhdGVkLiBkZXZ0b29sIG91dHB1dDogJXMgIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4od29ya3NwYWNlZGlyLCByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNTkpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9hZGQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIEZldGNoIHNvdXJjZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cuaXZhcmNoLmNvbS9wcm9ncmFtcy9zb3VyY2VzL3B2LTEuNS4zLnRhci5iejInCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnd2dldCAlcycgJSB1cmwsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3RhciB4ZnYgcHYtMS41LjMudGFyLmJ6MicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3B2LTEuNS4zJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdjb25maWd1cmUnKSksICdVbmFibGUgdG8gZmluZCBjb25maWd1cmUgc2NyaXB0IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW5zc3RhdGUgcHYnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkIHB2ICVzJyAlIHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdwdicsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlIChoYXZlIHRvIGRvIHRoaXMgKmFmdGVyKiBkZXZ0b29sIGFkZCBzaW5jZSB0aGUgcmVjaXBlIG9ubHkgZXhpc3RzIHRoZW4pCisgICAgICAgIGJpdGJha2UoJ3B2IC1jIGNsZWFuc3N0YXRlJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYnVpbGQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkIHB2JykKKyAgICAgICAgaW5zdGFsbGRpciA9IGdldF9iYl92YXIoJ0QnLCAncHYnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zdGFsbGRpciwgJ0NvdWxkIG5vdCBxdWVyeSBpbnN0YWxsZGlyIHZhcmlhYmxlJykKKyAgICAgICAgYmluZGlyID0gZ2V0X2JiX3ZhcignYmluZGlyJywgJ3B2JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJpbmRpciwgJ0NvdWxkIG5vdCBxdWVyeSBiaW5kaXIgdmFyaWFibGUnKQorICAgICAgICBpZiBiaW5kaXJbMF0gPT0gJy8nOgorICAgICAgICAgICAgYmluZGlyID0gYmluZGlyWzE6XQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGluc3RhbGxkaXIsIGJpbmRpciwgJ3B2JykpLCAncHYgYmluYXJ5IG5vdCBmb3VuZCBpbiBEJykKKworICAgIEB0ZXN0Y2FzZSgxMTYyKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2xpYnJhcnkoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIFdlIGRvbid0IGhhdmUgdGhlIGFiaWxpdHkgdG8gcGljayB1cCB0aGlzIGRlcGVuZGVuY3kgYXV0b21hdGljYWxseSB5ZXQuLi4KKyAgICAgICAgYml0YmFrZSgnbGlidXNiMScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5pbnRyYTJuZXQuY29tL2VuL2RldmVsb3Blci9saWJmdGRpL2Rvd25sb2FkL2xpYmZ0ZGkxLTEuMS50YXIuYnoyJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3dnZXQgJXMnICUgdXJsLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd0YXIgeGZ2IGxpYmZ0ZGkxLTEuMS50YXIuYnoyJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbGliZnRkaTEtMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdDTWFrZUxpc3RzLnR4dCcpKSwgJ1VuYWJsZSB0byBmaW5kIENNYWtlTGlzdHMudHh0IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQgKGFuZCB1c2UgLVYgc28gd2UgdGVzdCB0aGF0IHRvbykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgbGliZnRkaSAlcyAtViAxLjEnICUgc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYmZ0ZGknLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZSAoaGF2ZSB0byBkbyB0aGlzICphZnRlciogZGV2dG9vbCBhZGQgc2luY2UgdGhlIHJlY2lwZSBvbmx5IGV4aXN0cyB0aGVuKQorICAgICAgICBiaXRiYWtlKCdsaWJmdGRpIC1jIGNsZWFuc3N0YXRlJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYnVpbGQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkIGxpYmZ0ZGknKQorICAgICAgICBzdGFnaW5nX2xpYmRpciA9IGdldF9iYl92YXIoJ1NUQUdJTkdfTElCRElSJywgJ2xpYmZ0ZGknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhZ2luZ19saWJkaXIsICdDb3VsZCBub3QgcXVlcnkgU1RBR0lOR19MSUJESVIgdmFyaWFibGUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHN0YWdpbmdfbGliZGlyLCAnbGliZnRkaTEuc28uMi4xLjAnKSksICJsaWJmdGRpIGJpbmFyeSBub3QgZm91bmQgaW4gU1RBR0lOR19MSUJESVIuIE91dHB1dCBvZiBkZXZ0b29sIGJ1aWxkIGxpYmZ0ZGkgJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgcmVzZXQKKyAgICAgICAgc3RhbXBwcmVmaXggPSBnZXRfYmJfdmFyKCdTVEFNUCcsICdsaWJmdGRpJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IGxpYmZ0ZGknKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGliZnRkaScsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeCwgJ1VuYWJsZSB0byBnZXQgU1RBTVAgdmFsdWUgZm9yIHJlY2lwZSBsaWJmdGRpJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeCArICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRjaGVzLCAnU3RhbXAgZmlsZXMgZXhpc3QgZm9yIHJlY2lwZSBsaWJmdGRpIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3RhZ2luZ19saWJkaXIsICdsaWJmdGRpMS5zby4yLjEuMCcpKSwgJ2xpYmZ0ZGkgYmluYXJ5IHN0aWxsIGZvdW5kIGluIFNUQUdJTkdfTElCRElSIGFmdGVyIGNsZWFuaW5nJykKKworICAgIEB0ZXN0Y2FzZSgxMTYwKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2ZldGNoKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHRlc3R2ZXIgPSAnMC4yMycKKyAgICAgICAgdXJsID0gJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9NL01hcmt1cFNhZmUvTWFya3VwU2FmZS0lcy50YXIuZ3onICUgdGVzdHZlcgorICAgICAgICB0ZXN0cmVjaXBlID0gJ3B5dGhvbi1tYXJrdXBzYWZlJworICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkLiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ3NldHVwLnB5JykpLCAnVW5hYmxlIHRvIGZpbmQgc2V0dXAucHkgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCclcy5iYicgJSB0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L01hcmt1cFNhZmUtJXMnICUgdGVzdHZlcgorICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybAorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICAjIFRyeSB3aXRoIHZlcnNpb24gc3BlY2lmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzaHV0aWwucm10cmVlKHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtZiAlcyAtViAlcycgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmwsIHRlc3R2ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ3NldHVwLnB5JykpLCAnVW5hYmxlIHRvIGZpbmQgc2V0dXAucHkgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCclc18lcy5iYicgJSAodGVzdHJlY2lwZSwgdGVzdHZlciksIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vTWFya3VwU2FmZS0ke1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwucmVwbGFjZSh0ZXN0dmVyLCAnJHtQVn0nKQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQHRlc3RjYXNlKDExNjEpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9hZGRfZmV0Y2hfZ2l0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHVybCA9ICdnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saWJtYXRjaGJveCcKKyAgICAgICAgY2hlY2tyZXYgPSAnNDYyZjA2NTIwNTVkODljNjQ4ZGRkNTRmZDdiMDNmMTc1YzJjNjk3MycKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdsaWJtYXRjaGJveDInCisgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW5zc3RhdGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtZiAlcycgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlLmFjJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlLmFjIGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX2dpdC5iYicsIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JworICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMS4wK2dpdCR7U1JDUFZ9JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybAorICAgICAgICBjaGVja3ZhcnNbJ1NSQ1JFViddID0gJyR7QVVUT1JFVn0nCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisgICAgICAgICMgVHJ5IHdpdGggcmV2aXNpb24gYW5kIHZlcnNpb24gc3BlY2lmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzaHV0aWwucm10cmVlKHNyY2RpcikKKyAgICAgICAgdXJsX3JldiA9ICclcztyZXY9JXMnICUgKHVybCwgY2hlY2tyZXYpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgIiVzIiAtViAxLjUnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsX3JldikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlLmFjJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlLmFjIGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX2dpdC5iYicsIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JworICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMS41K2dpdCR7U1JDUFZ9JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybAorICAgICAgICBjaGVja3ZhcnNbJ1NSQ1JFViddID0gY2hlY2tyZXYKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEB0ZXN0Y2FzZSgxMTY0KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCdtZGFkbSAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVHJ5IG1vZGlmeWluZyBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gbWRhZG0nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IG1kYWRtIC14ICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnYXBwZW5kcycsICdtZGFkbV8qLmJiYXBwZW5kJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVzLCAnYmJhcHBlbmQgbm90IGNyZWF0ZWQgJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdtZGFkbScsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIFRyeSBidWlsZGluZworICAgICAgICBiaXRiYWtlKCdtZGFkbScpCisgICAgICAgICMgVHJ5IG1ha2luZyAobWlub3IpIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHNvdXJjZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoInNlZCAtaSAncyFeXC5USC4qIS5USCBNREFETSA4IFwiXCIgdjkuOTk5LWN1c3RvbSEnICVzIiAlIG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbWRhZG0uOC5pbicpKQorICAgICAgICBiaXRiYWtlKCdtZGFkbSAtYyBwYWNrYWdlJykKKyAgICAgICAgcGtnZCA9IGdldF9iYl92YXIoJ1BLR0QnLCAnbWRhZG0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGtnZCwgJ0NvdWxkIG5vdCBxdWVyeSBQS0dEIHZhcmlhYmxlJykKKyAgICAgICAgbWFuZGlyID0gZ2V0X2JiX3ZhcignbWFuZGlyJywgJ21kYWRtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmRpciwgJ0NvdWxkIG5vdCBxdWVyeSBtYW5kaXIgdmFyaWFibGUnKQorICAgICAgICBpZiBtYW5kaXJbMF0gPT0gJy8nOgorICAgICAgICAgICAgbWFuZGlyID0gbWFuZGlyWzE6XQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBrZ2QsIG1hbmRpciwgJ21hbjgnLCAnbWRhZG0uOCcpLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnLlRIJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZS5yc3RyaXAoKSwgJy5USCBNREFETSA4ICIiIHY5Ljk5OS1jdXN0b20nLCAnbWFuIGZpbGUgbm90IG1vZGlmaWVkLiBtYW4gc2VhcmNoZWQgZmlsZSBwYXRoOiAlcycgJSBvcy5wYXRoLmpvaW4ocGtnZCwgbWFuZGlyLCAnbWFuOCcsICdtZGFkbS44JykpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHJlc2V0CisgICAgICAgIHN0YW1wcHJlZml4ID0gZ2V0X2JiX3ZhcignU1RBTVAnLCAnbWRhZG0nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgbWRhZG0nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWRhZG0nLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgbWRhZG0nKQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKHN0YW1wcHJlZml4ICsgJyonKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGNoZXMsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlIG1kYWRtIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJykKKworICAgIEB0ZXN0Y2FzZSgxMTY2KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X2ludmFsaWQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgc29tZSByZWNpcGVzCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKworICAgICAgICB0ZXN0cmVjaXBlcyA9ICdwZXJmIGtlcm5lbC1kZXZzcmMgcGFja2FnZS1pbmRleCBjb3JlLWltYWdlLW1pbmltYWwgbWV0YS10b29sY2hhaW4gcGFja2FnZWdyb3VwLWNvcmUtc2RrIG1ldGEtaWRlLXN1cHBvcnQnLnNwbGl0KCkKKyAgICAgICAgIyBGaW5kIGFjdHVhbCBuYW1lIG9mIGdjYy1zb3VyY2Ugc2luY2UgaXQgbm93IGluY2x1ZGVzIHRoZSB2ZXJzaW9uIC0gY3J1ZGUsIGJ1dCBnb29kIGVub3VnaCBmb3IgdGhpcyBwdXJwb3NlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1yZWNpcGVzIGdjYy1zb3VyY2UqJykKKyAgICAgICAgcmVhZGluZyA9IEZhbHNlCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCc9PScpOgorICAgICAgICAgICAgICAgIHJlYWRpbmcgPSBUcnVlCisgICAgICAgICAgICBlbGlmIHJlYWRpbmcgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKKyAgICAgICAgICAgICAgICB0ZXN0cmVjaXBlcy5hcHBlbmQobGluZS5zcGxpdCgnOicpWzBdKQorICAgICAgICBmb3IgdGVzdHJlY2lwZSBpbiB0ZXN0cmVjaXBlczoKKyAgICAgICAgICAgICMgQ2hlY2sgaXQncyBhIHZhbGlkIHJlY2lwZQorICAgICAgICAgICAgYml0YmFrZSgnJXMgLWUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgICMgZGV2dG9vbCBleHRyYWN0IHNob3VsZCBmYWlsCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZXh0cmFjdCAlcyAlcycgJSAodGVzdHJlY2lwZSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGZhaWxlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzJyAlICh0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0ZldGNoaW5nICcsIHJlc3VsdC5vdXRwdXQsICdkZXZ0b29sIGV4dHJhY3Qgb24gJXMgc2hvdWxkIGhhdmUgZXJyb3JlZCBvdXQgYmVmb3JlIHRyeWluZyB0byBmZXRjaCcgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdkZXZ0b29sIGV4dHJhY3Qgb24gJXMgc2hvdWxkIGhhdmUgZ2l2ZW4gYW4gRVJST1InICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgICMgZGV2dG9vbCBtb2RpZnkgc2hvdWxkIGZhaWwKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ2RldnRvb2wgbW9kaWZ5IG9uICVzIHNob3VsZCBoYXZlIGZhaWxlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzJyAlICAodGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdFUlJPUjogJywgcmVzdWx0Lm91dHB1dCwgJ2RldnRvb2wgbW9kaWZ5IG9uICVzIHNob3VsZCBoYXZlIGdpdmVuIGFuIEVSUk9SJyAlIHRlc3RyZWNpcGUpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9uYXRpdmUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgc29tZSByZWNpcGVzCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKworICAgICAgICBiYmNsYXNzZXh0ZW5kZWQgPSBGYWxzZQorICAgICAgICBpbmhlcml0bmF0aXZlID0gRmFsc2UKKyAgICAgICAgdGVzdHJlY2lwZXMgPSAnbXRvb2xzLW5hdGl2ZSBhcHQtbmF0aXZlIGRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUnLnNwbGl0KCkKKyAgICAgICAgZm9yIHRlc3RyZWNpcGUgaW4gdGVzdHJlY2lwZXM6CisgICAgICAgICAgICBjaGVja2V4dGVuZCA9ICduYXRpdmUnIGluIChnZXRfYmJfdmFyKCdCQkNMQVNTRVhURU5EJywgdGVzdHJlY2lwZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5vdCBiYmNsYXNzZXh0ZW5kZWQ6CisgICAgICAgICAgICAgICAgYmJjbGFzc2V4dGVuZGVkID0gY2hlY2tleHRlbmQKKyAgICAgICAgICAgIGlmIG5vdCBpbmhlcml0bmF0aXZlOgorICAgICAgICAgICAgICAgIGluaGVyaXRuYXRpdmUgPSBub3QgY2hlY2tleHRlbmQKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdFUlJPUjogJywgcmVzdWx0Lm91dHB1dCwgJ0VSUk9SIGluIGRldnRvb2wgbW9kaWZ5IG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIGJ1aWxkIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIHJlc2V0IG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmJjbGFzc2V4dGVuZGVkLCAnTm9uZSBvZiB0aGVzZSByZWNpcGVzIGFyZSBCQkNMQVNTRVhURU5EZWQgdG8gbmF0aXZlIC0gbmVlZCB0byBhZGp1c3QgdGVzdHJlY2lwZXMgbGlzdDogJXMnICUgJywgJy5qb2luKHRlc3RyZWNpcGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluaGVyaXRuYXRpdmUsICdOb25lIG9mIHRoZXNlIHJlY2lwZXMgZG8gImluaGVyaXQgbmF0aXZlIiAtIG5lZWQgdG8gYWRqdXN0IHRlc3RyZWNpcGVzIGxpc3Q6ICVzJyAlICcsICcuam9pbih0ZXN0cmVjaXBlcykpCisKKworICAgIEB0ZXN0Y2FzZSgxMTY1KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWtlbGZpbWFnZScKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnbWtlbGZpbWFnZV8qLmJiYXBwZW5kJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVzLCAnYmJhcHBlbmQgbm90IGNyZWF0ZWQnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgVHJ5IGJ1aWxkaW5nCisgICAgICAgIGJpdGJha2UodGVzdHJlY2lwZSkKKworICAgIEB0ZXN0Y2FzZSgxMTY3KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X2xvY2FsZmlsZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ2xpZ2h0dHBkJworICAgICAgICBzcmNfdXJpID0gKGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKSBvciAnJykuc3BsaXQoKQorICAgICAgICBmb3VuZGxvY2FsID0gRmFsc2UKKyAgICAgICAgZm9yIGl0ZW0gaW4gc3JjX3VyaToKKyAgICAgICAgICAgIGlmIGl0ZW0uc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZCAnLnBhdGNoJyBub3QgaW4gaXRlbToKKyAgICAgICAgICAgICAgICBmb3VuZGxvY2FsID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZGxvY2FsLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBmZXRjaCBsb2NhbCBmaWxlcyBhbmQgaXQgc2VlbXMgdGhhdCBpdCBubyBsb25nZXIgZG9lcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlCisgICAgICAgIGJpdGJha2UoJyVzIC1jIGNsZWFuc3N0YXRlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgVHJ5IG1vZGlmeWluZyBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnYXBwZW5kcycsICclc18qLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcKKyAgICAgICAgYml0YmFrZSh0ZXN0cmVjaXBlKQorCisgICAgQHRlc3RjYXNlKDExNjkpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtaW5pY29tJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gTk9UIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIEFkZCBhIGNvdXBsZSBvZiBjb21taXRzCisgICAgICAgICMgRklYTUU6IHRoaXMgb25seSB0ZXN0cyBhZGRpbmcsIG5lZWQgdG8gYWxzbyB0ZXN0IHVwZGF0ZSBhbmQgcmVtb3ZlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQWRkaXRpb25hbCBsaW5lIiA+PiBSRUFETUUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIFJFQURNRSInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICJBIG5ldyBmaWxlIiA+IGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgYWRkIGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgYSBuZXcgZmlsZSInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgc2hvdWxkIGJlIG1vZGlmaWVkJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0YXR1cyksIDMsICdMZXNzL21vcmUgZmlsZXMgbW9kaWZpZWQgdGhhbiBleHBlY3RlZC4gRW50aXJlIHN0YXR1czpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBsaW5lIGluIHN0YXR1czoKKyAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJzAwMDEtQ2hhbmdlLXRoZS1SRUFETUUucGF0Y2gnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnPz8gJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbGlmIGxpbmUuZW5kc3dpdGgoJzAwMDItQWRkLWEtbmV3LWZpbGUucGF0Y2gnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnPz8gJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbGlmIHJlLnNlYXJjaCgnJXNfW15fXSouYmIkJyAlIHRlc3RyZWNpcGUsIGxpbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgTSAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1VuZXhwZWN0ZWQgbW9kaWZpZWQgZmlsZSBpbiBzdGF0dXM6ICVzJyAlIGxpbmUpCisKKyAgICBAdGVzdGNhc2UoMTE3MikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfZ2l0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtdGQtdXRpbHMnCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcGF0Y2hlcyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBzcmNfdXJpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBlbnRyeS5zdGFydHN3aXRoKCdmaWxlOi8vJykgYW5kIGVudHJ5LmVuZHN3aXRoKCcucGF0Y2gnKToKKyAgICAgICAgICAgICAgICBwYXRjaGVzLmFwcGVuZChlbnRyeVs3Ol0uc3BsaXQoJzsnKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihwYXRjaGVzKSwgMCwgJ1RoZSAlcyByZWNpcGUgZG9lcyBub3QgYXBwZWFyIHRvIGNvbnRhaW4gYW55IHBhdGNoZXMsIHNvIHRoaXMgdGVzdCB3aWxsIG5vdCBiZSBlZmZlY3RpdmUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb3VwbGUgb2YgY29tbWl0cworICAgICAgICAjIEZJWE1FOiB0aGlzIG9ubHkgdGVzdHMgYWRkaW5nLCBuZWVkIHRvIGFsc28gdGVzdCB1cGRhdGUgYW5kIHJlbW92ZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIiMgQWRkaXRpb25hbCBsaW5lIiA+PiBNYWtlZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgTWFrZWZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQSBuZXcgZmlsZSIgPiBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGFkZCBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIGEgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAtcmYgJXM7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIHNob3VsZCBiZSBtb2RpZmllZCcgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzdGF0dXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKHBhdGNoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJyBEICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goJyVzX1teX10qLmJiJCcgJSB0ZXN0cmVjaXBlLCBsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJyBNICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gc3RhdHVzOiAlcycgJSBsaW5lKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBkaWZmICVzJyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSksIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIGFkZGxpbmVzID0gWydTUkNSRVYgPSAiLioiJywgJ1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdCInXQorICAgICAgICBzcmN1cmlsaW5lcyA9IHNyY191cmkuc3BsaXQoKQorICAgICAgICBzcmN1cmlsaW5lc1swXSA9ICdTUkNfVVJJID0gIicgKyBzcmN1cmlsaW5lc1swXQorICAgICAgICBzcmN1cmlsaW5lcy5hcHBlbmQoJyInKQorICAgICAgICByZW1vdmVsaW5lcyA9IFsnU1JDUkVWID0gIi4qIiddICsgc3JjdXJpbGluZXMKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJysrKycpIG9yIGxpbmUuc3RhcnRzd2l0aCgnLS0tJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcrJyk6CisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gYWRkbGluZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKGl0ZW0sIGxpbmVbMTpdLnN0cmlwKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZWQsICdVbmV4cGVjdGVkIGRpZmYgYWRkIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIHJlbW92ZWxpbmVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChpdGVtLCBsaW5lWzE6XS5zdHJpcCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVkLCAnVW5leHBlY3RlZCBkaWZmIHJlbW92ZSBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAjIE5vdyB0cnkgd2l0aCBhdXRvIG1vZGUKKyAgICAgICAgcnVuQ21kKCdjZCAlczsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsJykKKyAgICAgICAgdG9wbGV2ZWxkaXIgPSByZXN1bHQub3V0cHV0LnN0cmlwKCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzdGF0dXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICByZWxwYXRjaHBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdG9wbGV2ZWxkaXIpLCB0ZXN0cmVjaXBlKQorICAgICAgICBleHBlY3RlZHN0YXR1cyA9IFsoJ00nLCBvcy5wYXRoLnJlbHBhdGgocmVjaXBlZmlsZSwgdG9wbGV2ZWxkaXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICclcy8wMDAxLUNoYW5nZS10aGUtTWFrZWZpbGUucGF0Y2gnICUgcmVscGF0Y2hwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICclcy8wMDAyLUFkZC1hLW5ldy1maWxlLnBhdGNoJyAlIHJlbHBhdGNocGF0aCldCisgICAgICAgIGZvciBsaW5lIGluIHN0YXR1czoKKyAgICAgICAgICAgIHN0YXR1c2xpbmUgPSBsaW5lLnNwbGl0KE5vbmUsIDEpCisgICAgICAgICAgICBmb3IgZnN0YXR1cywgZm4gaW4gZXhwZWN0ZWRzdGF0dXM6CisgICAgICAgICAgICAgICAgaWYgZm4gPT0gc3RhdHVzbGluZVsxXToKKyAgICAgICAgICAgICAgICAgICAgaWYgZnN0YXR1cyAhPSBzdGF0dXNsaW5lWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgbW9kaWZpZWQgZmlsZSBpbiBsaW5lOiAlcycgJSBsaW5lKQorCisgICAgQHRlc3RjYXNlKDExNzApCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2FwcGVuZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWRhZG0nCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBOT1QgYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICB0ZW1wc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdzb3VyY2UnKQorICAgICAgICB0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xheWVyJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBzcmNkaXIpKQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wc3JjZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIEFkZCBhIGNvbW1pdAorICAgICAgICByZXN1bHQgPSBydW5DbWQoInNlZCAncyFcXCgjZGVmaW5lIFZFUlNJT05cXFcqXCJbXlwiXSpcXClcIiFcXDEtY3VzdG9tXCIhJyAtaSBSZWFkTWUuYyIsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkFkZCBvdXIgY3VzdG9tIHZlcnNpb24iJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAtZiAlcy8qLnBhdGNoOyBnaXQgY2hlY2tvdXQgLicgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlKSkKKyAgICAgICAgIyBDcmVhdGUgYSB0ZW1wb3JhcnkgbGF5ZXIgYW5kIGFkZCBpdCB0byBiYmxheWVycy5jb25mCisgICAgICAgIHNlbGYuX2NyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgVHJ1ZSwgJ3NlbGZ0ZXN0dXBkYXRlcmVjaXBlJykKKyAgICAgICAgIyBDcmVhdGUgdGhlIGJiYXBwZW5kCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOicsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlIGlzIHN0aWxsIGNsZWFuCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIENoZWNrIGJiYXBwZW5kIHdhcyBjcmVhdGVkCisgICAgICAgIHNwbGl0cGF0aCA9IG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKS5zcGxpdChvcy5zZXApCisgICAgICAgIGFwcGVuZGRpciA9IG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsIHNwbGl0cGF0aFstMl0sIHNwbGl0cGF0aFstMV0pCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIGFwcGVuZGRpcikKKyAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSwgJzAwMDEtQWRkLW91ci1jdXN0b20tdmVyc2lvbi5wYXRjaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhwYXRjaGZpbGUpLCAnUGF0Y2ggZmlsZSBub3QgY3JlYXRlZCcpCisKKyAgICAgICAgIyBDaGVjayBiYmFwcGVuZCBjb250ZW50cworICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUFkZC1vdXItY3VzdG9tLXZlcnNpb24ucGF0Y2giXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKworICAgICAgICAjIENoZWNrIHdlIGNhbiBydW4gaXQgYWdhaW4gYW5kIGJiYXBwZW5kIGlzbid0IG1vZGlmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICMgRHJvcCBuZXcgY29tbWl0IGFuZCBjaGVjayBwYXRjaCBnZXRzIGRlbGV0ZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmVzZXQgSEVBRF4nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGRlbGV0ZWQnKQorICAgICAgICBleHBlY3RlZGxpbmVzMiA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMyLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIFB1dCBjb21taXQgYmFjayBhbmQgY2hlY2sgd2UgY2FuIHJ1biBpdCBpZiBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgICAgIG9zLnJlbW92ZShiYmFwcGVuZGZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQWRkIG91ciBjdXN0b20gdmVyc2lvbiInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6IFNwZWNpZmllZCBsYXllciBpcyBub3QgY3VycmVudGx5IGVuYWJsZWQgaW4gYmJsYXllcnMuY29uZicsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhwYXRjaGZpbGUpLCAnUGF0Y2ggZmlsZSBub3QgY3JlYXRlZCAod2l0aCBkaXNhYmxlZCBsYXllciknKQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICMgRGVsZXRpbmcgaXNuJ3QgZXhwZWN0ZWQgdG8gd29yayB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzCisKKyAgICBAdGVzdGNhc2UoMTE3MSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfYXBwZW5kX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbXRkLXV0aWxzJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIGZvciBlbnRyeSBpbiBzcmNfdXJpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBlbnRyeS5zdGFydHN3aXRoKCdnaXQ6Ly8nKToKKyAgICAgICAgICAgICAgICBnaXRfdXJpID0gZW50cnkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgdGVtcHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc291cmNlJykKKyAgICAgICAgdGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsYXllcicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wc3JjZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcHNyY2RpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb21taXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICIjIEFkZGl0aW9uYWwgbGluZSIgPj4gTWFrZWZpbGUnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLWYgJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0IC4nICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSkpCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGxheWVyCisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJykpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX0NPTExFQ1RJT05TICs9ICJvZXNlbGZ0ZXN0dGVtcGxheWVyIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiXiR7TEFZRVJESVJ9LyJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUFJJT1JJVFlfb2VzZWxmdGVzdHRlbXBsYXllciA9ICI5OTkiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiMSJcbicpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcyB8fCB0cnVlJyAlIHRlbXBsYXllcmRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgIyBDcmVhdGUgdGhlIGJiYXBwZW5kCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzonLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZSBpcyBzdGlsbCBjbGVhbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDaGVjayBiYmFwcGVuZCB3YXMgY3JlYXRlZAorICAgICAgICBzcGxpdHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkuc3BsaXQob3Muc2VwKQorICAgICAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCBzcGxpdHBhdGhbLTJdLCBzcGxpdHBhdGhbLTFdKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBhcHBlbmRkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSkpLCAnUGF0Y2ggZGlyZWN0b3J5IHNob3VsZCBub3QgYmUgY3JlYXRlZCcpCisKKyAgICAgICAgIyBDaGVjayBiYmFwcGVuZCBjb250ZW50cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorCisgICAgICAgICMgQ2hlY2sgd2UgY2FuIHJ1biBpdCBhZ2FpbiBhbmQgYmJhcHBlbmQgaXNuJ3QgbW9kaWZpZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICMgRHJvcCBuZXcgY29tbWl0IGFuZCBjaGVjayBTUkNSRVYgY2hhbmdlcworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXNldCBIRUFEXicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSkpLCAnUGF0Y2ggZGlyZWN0b3J5IHNob3VsZCBub3QgYmUgY3JlYXRlZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgPSAiJXMiXG4nICUgZ2l0X3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICMgUHV0IGNvbW1pdCBiYWNrIGFuZCBjaGVjayB3ZSBjYW4gcnVuIGl0IGlmIGxheWVyIGlzbid0IGluIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgb3MucmVtb3ZlKGJiYXBwZW5kZmlsZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGN3ZD1zZWxmLmJ1aWxkZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6IFNwZWNpZmllZCBsYXllciBpcyBub3QgY3VycmVudGx5IGVuYWJsZWQgaW4gYmJsYXllcnMuY29uZicsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSkpLCAnUGF0Y2ggZGlyZWN0b3J5IHNob3VsZCBub3QgYmUgY3JlYXRlZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgPSAiJXMiXG4nICUgZ2l0X3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICMgRGVsZXRpbmcgaXNuJ3QgZXhwZWN0ZWQgdG8gd29yayB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzCisKKyAgICBAdGVzdGNhc2UoMTE2MykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2V4dHJhY3Qoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgICMgVHJ5IGRldnRvb2wgZXh0cmFjdAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZXh0cmFjdCByZW1ha2UgJXMnICUgdGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUuYW0nKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorCisgICAgQHRlc3RjYXNlKDExNjgpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9yZXNldF9hbGwoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHRlc3RyZWNpcGUxID0gJ21kYWRtJworICAgICAgICB0ZXN0cmVjaXBlMiA9ICdjcm9uaWUnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHRlc3RyZWNpcGUxLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZTEpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAteCAlcyAlcycgJSAodGVzdHJlY2lwZTIsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlMikpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZTEpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCAlcycgJSB0ZXN0cmVjaXBlMikKKyAgICAgICAgc3RhbXBwcmVmaXgxID0gZ2V0X2JiX3ZhcignU1RBTVAnLCB0ZXN0cmVjaXBlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4MSwgJ1VuYWJsZSB0byBnZXQgU1RBTVAgdmFsdWUgZm9yIHJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlMSkKKyAgICAgICAgc3RhbXBwcmVmaXgyID0gZ2V0X2JiX3ZhcignU1RBTVAnLCB0ZXN0cmVjaXBlMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4MiwgJ1VuYWJsZSB0byBnZXQgU1RBTVAgdmFsdWUgZm9yIHJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlMikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlMSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlMiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odGVzdHJlY2lwZTEsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odGVzdHJlY2lwZTIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIG1hdGNoZXMxID0gZ2xvYi5nbG9iKHN0YW1wcHJlZml4MSArICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRjaGVzMSwgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgJXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQnICUgdGVzdHJlY2lwZTEpCisgICAgICAgIG1hdGNoZXMyID0gZ2xvYi5nbG9iKHN0YW1wcHJlZml4MiArICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRjaGVzMiwgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgJXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQnICUgdGVzdHJlY2lwZTIpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2RlcGxveV90YXJnZXQoc2VsZik6CisgICAgICAgICMgTk9URTogV2hpbHN0IHRoaXMgdGVzdCB3b3VsZCBzZWVtaW5nbHkgYmUgYmV0dGVyIHBsYWNlZCBhcyBhIHJ1bnRpbWUgdGVzdCwKKyAgICAgICAgIyB1bmZvcnR1bmF0ZWx5IHRoZSBydW50aW1lIHRlc3RzIHJ1biB1bmRlciBiaXRiYWtlIGFuZCB5b3UgY2FuJ3QgcnVuCisgICAgICAgICMgZGV2dG9vbCB3aXRoaW4gYml0YmFrZSAoc2luY2UgZGV2dG9vbCBuZWVkcyB0byBydW4gYml0YmFrZSBpdHNlbGYpLgorICAgICAgICAjIEFkZGl0aW9uYWxseSB3ZSBhcmUgdGVzdGluZyBidWlsZC10aW1lIGZ1bmN0aW9uYWxpdHkgYXMgd2VsbCwgc28KKyAgICAgICAgIyByZWFsbHkgdGhpcyBoYXMgdG8gYmUgZG9uZSBhcyBhbiBvZS1zZWxmdGVzdCB0ZXN0LgorICAgICAgICAjCisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICBtYWNoaW5lID0gZ2V0X2JiX3ZhcignTUFDSElORScpCisgICAgICAgIGlmIG5vdCBtYWNoaW5lLnN0YXJ0c3dpdGgoJ3FlbXUnKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ1RoaXMgdGVzdCBvbmx5IHdvcmtzIHdpdGggcWVtdSBtYWNoaW5lcycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygnL2V0Yy9ydW5xZW11LW5vc3VkbycpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnWW91IG11c3Qgc2V0IHVwIHRhcCBkZXZpY2VzIHdpdGggc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzIGJlZm9yZSBydW5uaW5nIHRoaXMgdGVzdCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnUEFUSD0iJFBBVEg6L3NiaW46L3Vzci9zYmluIiBpcCB0dW50YXAgc2hvdycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgaWYgcmVzdWx0LnN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdQQVRIPSIkUEFUSDovc2JpbjovdXNyL3NiaW4iIGlmY29uZmlnIC1hJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgaWYgcmVzdWx0LnN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgaWYgdGFwIGRldmljZXMgZXhpc3Qgd2l0aCBpZmNvbmZpZyBvciBpcDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ3RhcCcpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdObyB0YXAgZGV2aWNlcyBmb3VuZCAtIHlvdSBtdXN0IHNldCB1cCB0YXAgZGV2aWNlcyB3aXRoIHNjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QnKQorICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIERlZmluaXRpb25zCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWRhZG0nCisgICAgICAgIHRlc3RmaWxlID0gJy9zYmluL21kYWRtJworICAgICAgICB0ZXN0aW1hZ2UgPSAnb2Utc2VsZnRlc3QtaW1hZ2UnCisgICAgICAgIHRlc3Rjb21tYW5kID0gJy9zYmluL21kYWRtIC0taGVscCcKKyAgICAgICAgIyBCdWlsZCBhbiBpbWFnZSB0byBydW4KKyAgICAgICAgYml0YmFrZSgiJXMgcWVtdS1uYXRpdmUgcWVtdS1oZWxwZXItbmF0aXZlIiAlIHRlc3RpbWFnZSkKKyAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RpbWFnZSkKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bigncm0gLWYgJXMvJXMqJyAlIChkZXBsb3lfZGlyX2ltYWdlLCB0ZXN0aW1hZ2UpKQorICAgICAgICAjIENsZWFuIHJlY2lwZSBzbyB0aGUgZmlyc3QgZGVwbG95IHdpbGwgZmFpbAorICAgICAgICBiaXRiYWtlKCIlcyAtYyBjbGVhbiIgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBkZXZ0b29sIG1vZGlmeQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgVGVzdCB0aGF0IGRlcGxveS10YXJnZXQgYXQgdGhpcyBwb2ludCBmYWlscyAocHJvcGVybHkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1uICVzIHJvb3RAbG9jYWxob3N0JyAlIHRlc3RyZWNpcGUsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LCAwLCAnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IHNob3VsZCBoYXZlIGZhaWxlZCwgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlc3VsdC5vdXRwdXQsICdUcmFjZWJhY2snLCAnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IHNob3VsZCBoYXZlIGZhaWxlZCB3aXRoIGEgcHJvcGVyIGVycm9yIG5vdCBhIHRyYWNlYmFjaywgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCB0cnkgYSBkcnktcnVuIG9mIGRlcGxveS10YXJnZXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGRlcGxveS10YXJnZXQgLW4gJXMgcm9vdEBsb2NhbGhvc3QnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignICAlcycgJSB0ZXN0ZmlsZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBCb290IHRoZSBpbWFnZQorICAgICAgICB3aXRoIHJ1bnFlbXUodGVzdGltYWdlLCBzZWxmKSBhcyBxZW11OgorICAgICAgICAgICAgIyBOb3cgcmVhbGx5IHRlc3QgZGVwbG95LXRhcmdldAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGRlcGxveS10YXJnZXQgLWMgJXMgcm9vdEAlcycgJSAodGVzdHJlY2lwZSwgcWVtdS5pcCkpCisgICAgICAgICAgICAjIFJ1biBhIHRlc3QgY29tbWFuZCB0byBzZWUgaWYgaXQgd2FzIGluc3RhbGxlZCBwcm9wZXJseQorICAgICAgICAgICAgc3NoYXJncyA9ICctbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubycKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSkKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgaXQgZGVwbG95ZWQgYWxsIG9mIHRoZSBmaWxlcyB3aXRoIHRoZSByaWdodCBvd25lcnNoaXAvcGVybXMKKyAgICAgICAgICAgICMgRmlyc3QgbG9vayBvbiB0aGUgaG9zdCAtIG5lZWQgdG8gZG8gdGhpcyB1bmRlciBwc2V1ZG8gdG8gZ2V0IHRoZSBjb3JyZWN0IG93bmVyc2hpcC9wZXJtcworICAgICAgICAgICAgaW5zdGFsbGRpciA9IGdldF9iYl92YXIoJ0QnLCB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgZmFrZXJvb3RlbnYgPSBnZXRfYmJfdmFyKCdGQUtFUk9PVEVOVicsIHRlc3RyZWNpcGUpCisgICAgICAgICAgICBmYWtlcm9vdGNtZCA9IGdldF9iYl92YXIoJ0ZBS0VST09UQ01EJywgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnJXMgJXMgZmluZCAuIC10eXBlIGYgLWV4ZWMgbHMgLWwge30gXDsnICUgKGZha2Vyb290ZW52LCBmYWtlcm9vdGNtZCksIGN3ZD1pbnN0YWxsZGlyKQorICAgICAgICAgICAgZmlsZWxpc3QxID0gc2VsZi5fcHJvY2Vzc19sc19vdXRwdXQocmVzdWx0Lm91dHB1dCkKKworICAgICAgICAgICAgIyBOb3cgbG9vayBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICB0ZW1wZGlyMiA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyMikKKyAgICAgICAgICAgIHRtcGZpbGVsaXN0ID0gb3MucGF0aC5qb2luKHRlbXBkaXIyLCAnZmlsZXMudHh0JykKKyAgICAgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbGlzdCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGVsaXN0MToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3BsaXRsaW5lWy0xXSArICdcbicpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2NhdCAlcyB8IHNzaCAtcSAlcyByb290QCVzIFwneGFyZ3MgbHMgLWxcJycgJSAodG1wZmlsZWxpc3QsIHNzaGFyZ3MsIHFlbXUuaXApKQorICAgICAgICAgICAgZmlsZWxpc3QyID0gc2VsZi5fcHJvY2Vzc19sc19vdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIGZpbGVsaXN0MS5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5zcGxpdCgpWy0xXSkKKyAgICAgICAgICAgIGZpbGVsaXN0Mi5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5zcGxpdCgpWy0xXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZWxpc3QxLCBmaWxlbGlzdDIpCisgICAgICAgICAgICAjIFRlc3QgdW5kZXBsb3ktdGFyZ2V0CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IC1jICVzIHJvb3RAJXMnICUgKHRlc3RyZWNpcGUsIHFlbXUuaXApKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdzc2ggJXMgcm9vdEAlcyAlcycgJSAoc3NoYXJncywgcWVtdS5pcCwgdGVzdGNvbW1hbmQpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgMCwgJ3VuZGVwbG95LXRhcmdldCBkaWQgbm90IHJlbW92ZSBjb21tYW5kIGFzIGl0IHNob3VsZCBoYXZlJykKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfYnVpbGRfaW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3QgZGV2dG9vbCBidWlsZC1pbWFnZSBwbHVnaW4iIiIKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIGltYWdlID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgaW1hZ2UpCisgICAgICAgIGJpdGJha2UoJyVzIC1jIGNsZWFuJyAlIGltYWdlKQorICAgICAgICAjIEFkZCB0YXJnZXQgYW5kIG5hdGl2ZSByZWNpcGVzIHRvIHdvcmtzcGFjZQorICAgICAgICBmb3IgcmVjaXBlIGluICgnbWRhZG0nLCAncGFydGVkLW5hdGl2ZScpOgorICAgICAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSByZWNpcGUpCisgICAgICAgICAgICBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlIChyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIFRyeSB0byBidWlsZCBpbWFnZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQtaW1hZ2UgJXMnICUgaW1hZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LCAwLCAnZGV2dG9vbCBidWlsZC1pbWFnZSBmYWlsZWQnKQorICAgICAgICAjIENoZWNrIGlmIGltYWdlLmJiYXBwZW5kIGhhcyByZXF1aXJlZCBjb250ZW50CisgICAgICAgIGJiYXBwZW5kID0gb3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCBpbWFnZSsnLmJiYXBwZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGJiYXBwZW5kKSwgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgTk9URTogbmF0aXZlIHJlY2lwZSBwYXJ0ZWQtbmF0aXZlIHNob3VsZCBub3QgYmUgaW4gSU1BR0VfSU5TVEFMTF9hcHBlbmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgbWRhZG0iXG4nIGluIG9wZW4oYmJhcHBlbmQpLnJlYWRsaW5lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBtZGFkbSIgbm90IGZvdW5kIGluICVzJyAlIGJiYXBwZW5kKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGdyYWRlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBDaGVjayBwYXJhbWV0ZXJzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGdyYWRlIC1oJykKKyAgICAgICAgZm9yIHBhcmFtIGluICdyZWNpcGVuYW1lIHNyY3RyZWUgLS12ZXJzaW9uIC1WIC0tYnJhbmNoIC1iIC0ta2VlcC10ZW1wIC0tbm8tcGF0Y2gnLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHBhcmFtLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIEZvciB0aGUgbW9tZW50LCB3ZSBhcmUgdXNpbmcgYSByZWFsIHJlY2lwZS4KKyAgICAgICAgcmVjaXBlPSdkZXZ0b29sLXVwZ3JhZGUnCisgICAgICAgIHZlcnNpb249JzAuMicKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAjIENoZWNrIHRoYXQgcmVjaXBlIGlzIG5vdCBhbHJlYWR5IHVuZGVyIGRldnRvb2wgY29udHJvbAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgdXBncmFkZS4gQ29kZSBkb2VzIG5vdCBjaGVjayBpZiBuZXcgUFYgaXMgb2xkZXIgb3IgbmV3ZXIgdGhhdCBjdXJyZW50IFBWLCBzbywgaXQgbWF5IGJlIHRoYXQKKyAgICAgICAgIyB3ZSBhcmUgZG93bmdyYWRpbmcgaW5zdGVhZCBvZiB1cGdyYWRpbmcuCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGdyYWRlICVzICVzIC1WICVzJyAlIChyZWNpcGUsIHRlbXBkaXIsIHZlcnNpb24pKQorICAgICAgICAjIENoZWNrIGlmIHNyY3RyZWUgYXQgbGVhc3QgaXMgcG9wdWxhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ob3MubGlzdGRpcih0ZW1wZGlyKSkgPiAwLCAnc2NydHJlZSAoJXMpIHNob3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBuZXcgKCVzKSBzb3VyY2UgY29kZScgJSAodGVtcGRpciwgdmVyc2lvbikpCisgICAgICAgICMgQ2hlY2sgbmV3IHJlY2lwZSBmb2xkZXIgaXMgcHJlc2VudAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwncmVjaXBlcycscmVjaXBlKSksICdSZWNpcGUgZm9sZGVyIHNob3VsZCBleGlzdCcpCisgICAgICAgICMgQ2hlY2sgbmV3IHJlY2lwZSBmaWxlIGlzIHByZXNlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsJ3JlY2lwZXMnLHJlY2lwZSwiJXNfJXMuYmIiICUgKHJlY2lwZSx2ZXJzaW9uKSkpLCAnUmVjaXBlIGZvbGRlciBzaG91bGQgZXhpc3QnKQorICAgICAgICAjIENoZWNrIGRldnRvb2wgc3RhdHVzIGFuZCBtYWtlIHN1cmUgcmVjaXBlIGlzIHByZXNlbnQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgZGV2dG9vbCByZXNldCByZWNpcGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0ICVzIC1uJyAlIHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZmZjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2ltYWdlZmVhdHVyZXMucHkKQEAgLTAsMCArMSwxNjggQEAKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgcnVucWVtdQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworCitjbGFzcyBJbWFnZUZlYXR1cmVzKG9lU2VsZlRlc3QpOgorCisgICAgdGVzdF91c2VyID0gJ3Rlc3RlcicKKyAgICByb290X3VzZXIgPSAncm9vdCcKKworICAgIEB0ZXN0Y2FzZSgxMTA3KQorICAgIGRlZiB0ZXN0X25vbl9yb290X3VzZXJfY2FuX2Nvbm5lY3RfdmlhX3NzaF93aXRob3V0X3Bhc3N3b3JkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogQ2hlY2sgaWYgbm9uIHJvb3QgdXNlciBjYW4gY29ubmVjdCB2aWEgc3NoIHdpdGhvdXQgcGFzc3dvcmQKKyAgICAgICAgRXhwZWN0ZWQ6IDEuIENvbm5lY3Rpb24gdG8gdGhlIGltYWdlIHZpYSBzc2ggdXNpbmcgcm9vdCB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAyLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHRlc3RlciB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIFByb2R1Y3Q6IG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAic3NoLXNlcnZlci1vcGVuc3NoIGVtcHR5LXJvb3QtcGFzc3dvcmQgYWxsb3ctZW1wdHktcGFzc3dvcmQiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdJTkhFUklUICs9ICJleHRyYXVzZXJzIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnRVhUUkFfVVNFUlNfUEFSQU1TID0gInVzZXJhZGQgLXAgXCdcJyB7fTsgdXNlcm1vZCAtcyAvYmluL3NoIHt9OyInLmZvcm1hdChzZWxmLnRlc3RfdXNlciwgc2VsZi50ZXN0X3VzZXIpCisKKyAgICAgICAgIyBBcHBlbmQgJ2ZlYXR1cmVzJyB0byBsb2NhbC5jb25mCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisKKyAgICAgICAgd2l0aCBydW5xZW11KCJjb3JlLWltYWdlLW1pbmltYWwiLCBzZWxmKSBhcyBxZW11OgorICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHNzaCB3aXRoIGVhY2ggdXNlciBpbnRvIHFlbXUgd2l0aCBlbXB0eSBwYXNzd29yZAorICAgICAgICAgICAgZm9yIHVzZXIgaW4gW3NlbGYucm9vdF91c2VyLCBzZWxmLnRlc3RfdXNlcl06CisgICAgICAgICAgICAgICAgc3NoID0gU1NIQ29udHJvbChpcD1xZW11LmlwLCBsb2dmaWxlPXFlbXUuc3NobG9nLCB1c2VyPXVzZXIpCisgICAgICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzc2gucnVuKCJ0cnVlIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyICVzIGZhaWxlZCB3aXRoICVzJyAlICh1c2VyLCBvdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDExMTUpCisgICAgZGVmIHRlc3RfYWxsX3VzZXJzX2Nhbl9jb25uZWN0X3ZpYV9zc2hfd2l0aG91dF9wYXNzd29yZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBpZiBhbGwgdXNlcnMgY2FuIGNvbm5lY3QgdmlhIHNzaCB3aXRob3V0IHBhc3N3b3JkCisgICAgICAgIEV4cGVjdGVkOiAxLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHJvb3QgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBOT1QgYmUgYWxsb3dlZC4KKyAgICAgICAgICAgICAgICAgIDIuIENvbm5lY3Rpb24gdG8gdGhlIGltYWdlIHZpYSBzc2ggdXNpbmcgdGVzdGVyIHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgYmUgYWxsb3dlZC4KKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJzc2gtc2VydmVyLW9wZW5zc2ggYWxsb3ctZW1wdHktcGFzc3dvcmQiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdJTkhFUklUICs9ICJleHRyYXVzZXJzIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnRVhUUkFfVVNFUlNfUEFSQU1TID0gInVzZXJhZGQgLXAgXCdcJyB7fTsgdXNlcm1vZCAtcyAvYmluL3NoIHt9OyInLmZvcm1hdChzZWxmLnRlc3RfdXNlciwgc2VsZi50ZXN0X3VzZXIpCisKKyAgICAgICAgIyBBcHBlbmQgJ2ZlYXR1cmVzJyB0byBsb2NhbC5jb25mCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisKKyAgICAgICAgd2l0aCBydW5xZW11KCJjb3JlLWltYWdlLW1pbmltYWwiLCBzZWxmKSBhcyBxZW11OgorICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHNzaCB3aXRoIGVhY2ggdXNlciBpbnRvIHFlbXUgd2l0aCBlbXB0eSBwYXNzd29yZAorICAgICAgICAgICAgZm9yIHVzZXIgaW4gW3NlbGYucm9vdF91c2VyLCBzZWxmLnRlc3RfdXNlcl06CisgICAgICAgICAgICAgICAgc3NoID0gU1NIQ29udHJvbChpcD1xZW11LmlwLCBsb2dmaWxlPXFlbXUuc3NobG9nLCB1c2VyPXVzZXIpCisgICAgICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzc2gucnVuKCJ0cnVlIikKKyAgICAgICAgICAgICAgICBpZiB1c2VyID09ICdyb290JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciByb290IHdhcyBhbGxvd2VkIHdoZW4gaXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4nKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAnc3NoIHRvIHVzZXIgdGVzdGVyIGZhaWxlZCB3aXRoICVzJyAlIG91dHB1dCkKKworCisgICAgQHRlc3RjYXNlKDExMTQpCisgICAgZGVmIHRlc3RfcnBtX3ZlcnNpb25fNF9zdXBwb3J0X29uX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIHJwbSB2ZXJzaW9uIDQgc3VwcG9ydCBvbiBpbWFnZQorICAgICAgICBFeHBlY3RlZDogICAgUnBtIHZlcnNpb24gbXVzdCBiZSA0LngKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdQUkVGRVJSRURfVkVSU0lPTl9ycG0gPSAiNC4lIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnUFJFRkVSUkVEX1ZFUlNJT05fcnBtLW5hdGl2ZSA9ICI0LiUiXG4nCisgICAgICAgICMgVXNlIG9wZW5zc2ggaW4gSU1BR0VfSU5TVEFMTCBpbnN0ZWFkIG9mIHNzaC1zZXJ2ZXItb3BlbnNzaCBpbiBFWFRSQV9JTUFHRV9GRUFUVVJFUyBhcyBhIHdvcmthcm91bmQgZm9yIGJ1ZyA4MDQ3CisgICAgICAgIGZlYXR1cmVzICs9ICdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgb3BlbnNzaCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX0lNQUdFX0ZFQVRVUkVTID0gImVtcHR5LXJvb3QtcGFzc3dvcmQgYWxsb3ctZW1wdHktcGFzc3dvcmQgcGFja2FnZS1tYW5hZ2VtZW50IlxuJworICAgICAgICBmZWF0dXJlcyArPSAnUlBNUk9PVEZTREVQRU5EU19yZW1vdmUgPSAicnBtcmVzb2x2ZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCInCisKKyAgICAgICAgIyBBcHBlbmQgJ2ZlYXR1cmVzJyB0byBsb2NhbC5jb25mCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisKKyAgICAgICAgIyBDaGVjayB0aGUgbmF0aXZlIHZlcnNpb24gb2YgcnBtIGlzIGNvcnJlY3QKKyAgICAgICAgbmF0aXZlX2JpbmRpciA9IGdldF9iYl92YXIoJ1NUQUdJTkdfQklORElSX05BVElWRScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChvcy5wYXRoLmpvaW4obmF0aXZlX2JpbmRpciwgJ3JwbScpICsgJyAtLXZlcnNpb24nKQorICAgICAgICBzZWxmLmFzc2VydEluKCd2ZXJzaW9uIDQuJywgcmVzdWx0Lm91dHB1dCkKKworICAgICAgICAjIENoZWNrIG1hbmlmZXN0IGZvciB0aGUgcnBtIHBhY2thZ2UKKyAgICAgICAgZGVwbG95ZGlyID0gZ2V0X2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScpCisgICAgICAgIGltZ25hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9MSU5LX05BTUUnLCAnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltZ25hbWUpICsgJy5tYW5pZmVzdCcsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPiAyOgorICAgICAgICAgICAgICAgICAgICBycG1fdmVyc2lvbiA9IHNwbGl0bGluZVsyXQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdGxpbmVbMF0gPT0gJ3JwbSc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcnBtX3ZlcnNpb24uc3RhcnRzd2l0aCgnNC4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JwbSB2ZXJzaW9uICVzIGZvdW5kIGluIGltYWdlLCBleHBlY3RlZCA0LngnICUgcnBtX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ05vIHJwbSBwYWNrYWdlIGZvdW5kIGluIGltYWdlJykKKworICAgICAgICAjIE5vdyBkbyBhIGNvdXBsZSBvZiBydW50aW1lIHRlc3RzCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgIGNvbW1hbmQgPSAicnBtIC0tdmVyc2lvbiIKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gcWVtdS5ydW4oY29tbWFuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIHJ1biBjb21tYW5kICIlcyI6ICVzJyAlIChjb21tYW5kLCBvdXRwdXQpKQorICAgICAgICAgICAgZm91bmRfcnBtX3ZlcnNpb24gPSBvdXRwdXQuc3RyaXAoKQorCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcmV0cmlldmVkIHJwbSB2ZXJzaW9uIGlzIHRoZSBleHBlY3RlZCBvbmUKKyAgICAgICAgICAgIGlmIHJwbV92ZXJzaW9uIG5vdCBpbiBmb3VuZF9ycG1fdmVyc2lvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1JQTSB2ZXJzaW9uIGlzIG5vdCB7fSwgZm91bmQgaW5zdGVhZCB7fS4nLmZvcm1hdChycG1fdmVyc2lvbiwgZm91bmRfcnBtX3ZlcnNpb24pKQorCisgICAgICAgICAgICAjIFRlc3QgdGhhdCB0aGUgcnBtIGRhdGFiYXNlIGlzIHRoZXJlIGFuZCB3b3JraW5nCisgICAgICAgICAgICBjb21tYW5kID0gInJwbSAtcWEiCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuKGNvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBydW4gY29tbWFuZCAiJXMiOiAlcycgJSAoY29tbWFuZCwgb3V0cHV0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BhY2thZ2Vncm91cC1jb3JlLWJvb3QnLCBvdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdidXN5Ym94Jywgb3V0cHV0KQorCisKKyAgICBAdGVzdGNhc2UoMTExNikKKyAgICBkZWYgdGVzdF9jbHV0dGVyX2ltYWdlX2Nhbl9iZV9idWlsdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBpZiBjbHV0dGVyIGltYWdlIGNhbiBiZSBidWlsdAorICAgICAgICBFeHBlY3RlZDogICAgMS4gY29yZS1pbWFnZS1jbHV0dGVyIGNhbiBiZSBidWlsdAorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLWNsdXR0ZXIKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1jbHV0dGVyJykKKworICAgIEB0ZXN0Y2FzZSgxMTE3KQorICAgIGRlZiB0ZXN0X3dheWxhbmRfc3VwcG9ydF9pbl9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBXYXlsYW5kIHN1cHBvcnQgaW4gaW1hZ2UKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIFdheWxhbmQgaW1hZ2UgY2FuIGJlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAyLiBXYXlsYW5kIGZlYXR1cmUgY2FuIGJlIGluc3RhbGxlZAorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0RJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHdheWxhbmQiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgKz0gIndheWxhbmQgd2VzdG9uIicKKworICAgICAgICAjIEFwcGVuZCAnZmVhdHVyZXMnIHRvIGxvY2FsLmNvbmYKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLXdlc3RvbgorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLXdlc3RvbicpCisKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGF5ZXJhcHBlbmQucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MmE2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5CkBAIC0wLDAgKzEsOTYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgoraW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIExheWVyQXBwZW5kVGVzdHMob2VTZWxmVGVzdCk6CisgICAgbGF5ZXJjb25mID0gIiIiCisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYXBwZW5kIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSBhIHJlY2lwZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcyovKi5iYiAke0xBWUVSRElSfS9yZWNpcGVzKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gIm1ldGEtbGF5ZXJJTlQiCitCQkZJTEVfUEFUVEVSTl9tZXRhLWxheWVySU5UIDo9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX21ldGEtbGF5ZXJJTlQgPSAiNiIKKyIiIgorICAgIHJlY2lwZSA9ICIiIgorTElDRU5TRT0iQ0xPU0VEIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworcHl0aG9uIGRvX2J1aWxkKCkgeworICAgIGJiLnBsYWluKCdCdWlsZGluZyAuLi4nKQorfQorYWRkdGFzayBidWlsZAorIiIiCisgICAgYXBwZW5kID0gIiIiCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKK1NSQ19VUklfYXBwZW5kID0gIiBmaWxlOi8vYXBwZW5kdGVzdC50eHQiCisKK3N5c3Jvb3Rfc3RhZ2VfYWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2FwcGVuZHRlc3QudHh0ICR7U1lTUk9PVF9ERVNURElSfS8KK30KKworIiIiCisKKyAgICBhcHBlbmQyID0gIiIiCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKK1NSQ19VUklfYXBwZW5kICs9ICJmaWxlOi8vYXBwZW5kdGVzdC50eHQiCisiIiIKKyAgICBsYXllcmFwcGVuZCA9ICJCQkxBWUVSUyArPSBcIkNPUkVCQVNFL21ldGEtbGF5ZXJ0ZXN0MCBDT1JFQkFTRS9tZXRhLWxheWVydGVzdDEgQ09SRUJBU0UvbWV0YS1sYXllcnRlc3QyXCIiCisKKyAgICBkZWYgdGVhckRvd25Mb2NhbChzZWxmKToKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi5idWlsZGRpciArICIvY29uZi9iYmxheWVycy5jb25mIiwgc2VsZi5sYXllcmFwcGVuZC5yZXBsYWNlKCJDT1JFQkFTRSIsIHNlbGYuYnVpbGRkaXIgKyAiLy4uIikpCisKKyAgICBAdGVzdGNhc2UoMTE5NikKKyAgICBkZWYgdGVzdF9sYXllcl9hcHBlbmRzKHNlbGYpOgorICAgICAgICBjb3JlYmFzZSA9IGdldF9iYl92YXIoIkNPUkVCQVNFIikKKyAgICAgICAgc3RhZ2luZ2RpciA9IGdldF9iYl92YXIoIlNUQUdJTkdfRElSX1RBUkdFVCIpCisgICAgICAgIGZvciBsIGluIFsiMCIsICIxIiwgIjIiXToKKyAgICAgICAgICAgIGxheWVyID0gb3MucGF0aC5qb2luKGNvcmViYXNlLCAibWV0YS1sYXllcnRlc3QiICsgbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMobGF5ZXIpKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIpCisgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvY29uZiIpCisgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL2NvbmYvbGF5ZXIuY29uZiIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYubGF5ZXJjb25mLnJlcGxhY2UoIklOVCIsIGwpKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdCIpCisgICAgICAgICAgICBpZiBsID09ICIwIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmIiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5yZWNpcGUpCisgICAgICAgICAgICBlbGlmIGwgPT0gIjEiOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC5iYmFwcGVuZCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmFwcGVuZCkKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdCIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJMYXllciAxIHRlc3QiKQorICAgICAgICAgICAgZWxpZiBsID09ICIyIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmJhcHBlbmQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hcHBlbmQyKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0IikKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIkxheWVyIDIgdGVzdCIpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGxheWVyKQorICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUoc2VsZi5idWlsZGRpciArICIvY29uZi9iYmxheWVycy5jb25mIiwgc2VsZi5sYXllcmFwcGVuZC5yZXBsYWNlKCJDT1JFQkFTRSIsIHNlbGYuYnVpbGRkaXIgKyAiLy4uIikpCisgICAgICAgIGJpdGJha2UoImxheWVyYXBwZW5kdGVzdCIpCisgICAgICAgIGRhdGEgPSBmdG9vbHMucmVhZF9maWxlKHN0YWdpbmdkaXIgKyAiL2FwcGVuZHRlc3QudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTGF5ZXIgMiB0ZXN0IikKKyAgICAgICAgb3MucmVtb3ZlKGNvcmViYXNlICsgIi9tZXRhLWxheWVydGVzdDIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIGJpdGJha2UoImxheWVyYXBwZW5kdGVzdCIpCisgICAgICAgIGRhdGEgPSBmdG9vbHMucmVhZF9maWxlKHN0YWdpbmdkaXIgKyAiL2FwcGVuZHRlc3QudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTGF5ZXIgMSB0ZXN0IikKKyAgICAgICAgd2l0aCBvcGVuKGNvcmViYXNlICsgIi9tZXRhLWxheWVydGVzdDIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkxheWVyIDIgdGVzdCIpCisgICAgICAgIGJpdGJha2UoImxheWVyYXBwZW5kdGVzdCIpCisgICAgICAgIGRhdGEgPSBmdG9vbHMucmVhZF9maWxlKHN0YWdpbmdkaXIgKyAiL2FwcGVuZHRlc3QudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTGF5ZXIgMiB0ZXN0IikKKworCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGljLWNoZWNrc3VtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2I5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weQpAQCAtMCwwICsxLDMxIEBACitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlCitmcm9tIG9lcWEudXRpbHMgaW1wb3J0IENvbW1hbmRFcnJvcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIExpY2Vuc2VUZXN0cyhvZVNlbGZUZXN0KToKKworICAgICMgVmVyaWZ5IHRoYXQgY2hhbmdpbmcgYSBsaWNlbnNlIGZpbGUgdGhhdCBoYXMgYW4gYWJzb2x1dGUgcGF0aCBjYXVzZXMKKyAgICAjIHRoZSBsaWNlbnNlIHFhIHRvIGZhaWwgZHVlIHRvIGEgbWlzbWF0Y2hlZCBtZDVzdW0uCisgICAgQHRlc3RjYXNlKDExOTcpCisgICAgZGVmIHRlc3Rfbm9ubWF0Y2hpbmdfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIGJpdGJha2VfY21kID0gJy1jIGNvbmZpZ3VyZSBlbXB0eXRlc3QnCisgICAgICAgIGVycm9yX21zZyA9ICdFUlJPUjogZW1wdHl0ZXN0OiBUaGUgbmV3IG1kNSBjaGVja3N1bSBpcyA4ZDc3N2YzODVkM2RmZWM4ODE1ZDIwZjc0OTYwMjZkYycKKworICAgICAgICBsaWNfZmlsZSwgbGljX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgb3MuY2xvc2UobGljX2ZpbGUpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAobGljX3BhdGgpCisKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ2VtcHR5dGVzdCcsICdJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIicpCisgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYygnZW1wdHl0ZXN0JywgJ0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyVzO21kNT1kNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSInICUgbGljX3BhdGgpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoYml0YmFrZV9jbWQpCisKKyAgICAgICAgd2l0aCBvcGVuKGxpY19wYXRoLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKKworICAgICAgICByZXN1bHQgPSBiaXRiYWtlKGJpdGJha2VfY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGlmIGVycm9yX21zZyBub3QgaW4gcmVzdWx0Lm91dHB1dDoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lc2NyaXB0cy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VzY3JpcHRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxY2Q1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lc2NyaXB0cy5weQpAQCAtMCwwICsxLDU0IEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS5zZWxmdGVzdC5idWlsZGhpc3RvcnkgaW1wb3J0IEJ1aWxkaGlzdG9yeUJhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgQ29tbWFuZCwgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIFRlc3RTY3JpcHRzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDMwMCkKKyAgICBkZWYgdGVzdF9jbGVhbnVwX3dvcmtkaXIoc2VsZik6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZ2V0X2JiX3ZhcignV09SS0RJUicsICdnemlwJykpCisgICAgICAgIG9sZF92ZXJzaW9uX3JlY2lwZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmInKQorICAgICAgICBvbGRfdmVyc2lvbiA9ICcxLjMuMTInCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgZ3ppcCIpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgLWIgJXMiICUgb2xkX3ZlcnNpb25fcmVjaXBlKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnZXRfYmJfdmFyKCdXT1JLRElSJywgIi1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShnZXRfYmJfdmFyKCdXT1JLRElSJywgIi1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZ2V0X2JiX3ZhcignV09SS0RJUicsICdnemlwJykpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBpbml0aWFsX2NvbnRlbnRzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5pdGlhbF9jb250ZW50cyA9IFtdCisKKyAgICAgICAgYml0YmFrZSgnZ3ppcCcpCisgICAgICAgIGludGVybWVkaWFyeV9jb250ZW50cyA9IG9zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgYml0YmFrZSgiLWIgJXMiICUgb2xkX3ZlcnNpb25fcmVjaXBlKQorICAgICAgICBydW5DbWQoJ2NsZWFudXAtd29ya2RpcicpCisgICAgICAgIHJlbWFpbmluZ19jb250ZW50cyA9IG9zLmxpc3RkaXIocGF0aCkKKworICAgICAgICBleHBlY3RlZF9jb250ZW50cyA9IFt4IGZvciB4IGluIGludGVybWVkaWFyeV9jb250ZW50cyBpZiB4IG5vdCBpbiBpbml0aWFsX2NvbnRlbnRzXQorICAgICAgICByZW1haW5pbmdfbm90X2V4cGVjdGVkID0gW3ggZm9yIHggaW4gcmVtYWluaW5nX2NvbnRlbnRzIGlmIHggbm90IGluIGV4cGVjdGVkX2NvbnRlbnRzXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQsIG1zZz0iTm90IGFsbCBuZWNlc3NhcnkgY29udGVudCBoYXMgYmVlbiBkZWxldGVkIGZyb20gJXM6ICVzIiAlIChwYXRoLCAnLCAnLmpvaW4obWFwKHN0ciwgcmVtYWluaW5nX25vdF9leHBlY3RlZCkpKSkKKyAgICAgICAgZXhwZWN0ZWRfbm90X3JlbWFpbmluZyA9IFt4IGZvciB4IGluIGV4cGVjdGVkX2NvbnRlbnRzIGlmIHggbm90IGluIHJlbWFpbmluZ19jb250ZW50c10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleHBlY3RlZF9ub3RfcmVtYWluaW5nLCBtc2c9IlRoZSBzY3JpcHQgcmVtb3ZlZCBleHRyYSBjb250ZW50cyBmcm9tICVzOiAlcyIgJSAocGF0aCwgJywgJy5qb2luKG1hcChzdHIsIGV4cGVjdGVkX25vdF9yZW1haW5pbmcpKSkpCisKK2NsYXNzIEJ1aWxkaGlzdG9yeURpZmZUZXN0cyhCdWlsZGhpc3RvcnlCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgyOTUpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2RpZmYoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NsZWFudXAtd29ya2RpcicpCisgICAgICAgIHRhcmdldCA9ICd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJworICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIxXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249VHJ1ZSkKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMFwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9VHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJidWlsZGhpc3RvcnktZGlmZiAtcCAlcyIgJSBnZXRfYmJfdmFyKCdCVUlMREhJU1RPUllfRElSJykpCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9ICdQUiBjaGFuZ2VkIGZyb20gInIxIiB0byAicjAiJworICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWRfb3V0cHV0IGluIHJlc3VsdC5vdXRwdXQsIG1zZz0iRGlkIG5vdCBmaW5kIGV4cGVjdGVkIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzhiMDNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wa2dkYXRhLnB5CkBAIC0wLDAgKzEsMjI2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGZubWF0Y2gKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgT2VQa2dkYXRhVXRpbFRlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBwa2dkYXRhCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdCIpCisgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nIGJpdGJha2UgdG8gZ2VuZXJhdGUgcGtnZGF0YScpCisgICAgICAgIGJpdGJha2UoJ2dsaWJjIGJ1c3lib3ggemxpYiBiYXNoJykKKworICAgIEB0ZXN0Y2FzZSgxMjAzKQorICAgIGRlZiB0ZXN0X2xvb2t1cF9wa2coc2VsZik6CisgICAgICAgICMgRm9yd2FyZCB0ZXN0cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnICJnbGliYyBidXN5Ym94IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2xpYmM2XG5idXN5Ym94JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyB6bGliLWRldicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2xpYnotZGV2JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyBub25leGlzdGVudHBrZycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCAiU3RhdHVzIGRpZmZlcmVudCB0aGFuIDEuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnRVJST1I6IFRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGZvdW5kOiBub25leGlzdGVudHBrZycpCisgICAgICAgICMgUmV2ZXJzZSB0ZXN0cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIC1yICJsaWJjNiBidXN5Ym94IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2dsaWJjXG5idXN5Ym94JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAtciBsaWJ6LWRldicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWItZGV2JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAtciBub25leGlzdGVudHBrZycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCAiU3RhdHVzIGRpZmZlcmVudCB0aGFuIDEuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnRVJST1I6IFRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGZvdW5kOiBub25leGlzdGVudHBrZycpCisKKyAgICBAdGVzdGNhc2UoMTIwNSkKKyAgICBkZWYgdGVzdF9yZWFkX3ZhbHVlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCByZWFkLXZhbHVlIFBOIGxpYnoxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnemxpYicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIHJlYWQtdmFsdWUgUEtHU0laRSBiYXNoJykKKyAgICAgICAgcGtnc2l6ZSA9IGludChyZXN1bHQub3V0cHV0LnN0cmlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwa2dzaXplLCAxLCAiU2l6ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDEuICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE5OCkKKyAgICBkZWYgdGVzdF9maW5kX3BhdGgoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGZpbmQtcGF0aCAvbGliL2xpYmMuc28uNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2dsaWJjOiAvbGliL2xpYmMuc28uNicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGZpbmQtcGF0aCAvYmluL2Jhc2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdiYXNoOiAvYmluL2Jhc2gnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL25vdC9leGlzdCcsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCAiU3RhdHVzIGRpZmZlcmVudCB0aGFuIDEuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnRVJST1I6IFVuYWJsZSB0byBmaW5kIGFueSBwYWNrYWdlIHByb2R1Y2luZyBwYXRoIC9ub3QvZXhpc3QnKQorCisgICAgQHRlc3RjYXNlKDEyMDQpCisgICAgZGVmIHRlc3RfbG9va3VwX3JlY2lwZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXJlY2lwZSAibGliYzYtc3RhdGljZGV2IGJ1c3lib3giJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnZ2xpYmNcbmJ1c3lib3gnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlIGxpYnotZGJnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnemxpYicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorCisgICAgQHRlc3RjYXNlKDEyMDIpCisgICAgZGVmIHRlc3RfbGlzdF9wa2dzKHNlbGYpOgorICAgICAgICAjIE5vIGFyZ3VtZW50cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MnKQorICAgICAgICBwa2dsaXN0ID0gcmVzdWx0Lm91dHB1dC5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dsaWJjLXV0aWxzJywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIE5vIHBrZ3NwZWMsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1yJykKKyAgICAgICAgcGtnbGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJjNi11dGlscycsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnbGlzdC5yZW1vdmUoJ3psaWItcHRlc3QnKSAjIGluIGNhc2UgcHRlc3QgaXMgZGlzYWJsZWQKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWyd6bGliJywgJ3psaWItZGJnJywgJ3psaWItZGV2JywgJ3psaWItZG9jJywgJ3psaWItc3RhdGljZGV2J10sICJQYWNrYWdlcyBsaXN0ZWQgYWZ0ZXIgcmVtb3ZlOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCwgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtcicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwa2dsaXN0LnJlbW92ZSgnbGliei1wdGVzdCcpICMgaW4gY2FzZSBwdGVzdCBpcyBkaXNhYmxlZAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ2xpYnotZGJnJywgJ2xpYnotZGV2JywgJ2xpYnotZG9jJywgJ2xpYnotc3RhdGljZGV2JywgJ2xpYnoxJ10sICJQYWNrYWdlcyBsaXN0ZWQgYWZ0ZXIgcmVtb3ZlOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgdW5wYWNrYWdlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtdScpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCB1bnBhY2thZ2VkLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC11IC1yJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotbG9jYWxlJywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHBrZ3NwZWMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgIiotZCoiJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWyd6bGliLWRiZycsICd6bGliLWRldicsICd6bGliLWRvYyddLCAiUGFja2FnZXMgbGlzdGVkOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgcGtnc3BlYywgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtciAiKi1kKiInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ2xpYnotZGJnJywgJ2xpYnotZGV2JywgJ2xpYnotZG9jJ10sICJQYWNrYWdlcyBsaXN0ZWQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTIwMSkKKyAgICBkZWYgdGVzdF9saXN0X3BrZ19maWxlcyhzZWxmKToKKyAgICAgICAgZGVmIHNwbGl0b3V0cHV0KG91dHB1dCk6CisgICAgICAgICAgICBmaWxlcyA9IHt9CisgICAgICAgICAgICBjdXJwa2cgPSBOb25lCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnXHQnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN1cnBrZywgJ1VuZXhwZWN0ZWQgbm9uLXBhY2thZ2UgbGluZTpcbiVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVzW2N1cnBrZ10uYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZS5yc3RyaXAoKS5lbmRzd2l0aCgnOicpLCAnSW52YWxpZCBwYWNrYWdlIGxpbmUgaW4gb3V0cHV0OlxuJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgY3VycGtnID0gbGluZS5zcGxpdCgnOicpWzBdCisgICAgICAgICAgICAgICAgICAgIGZpbGVzW2N1cnBrZ10gPSBbXQorICAgICAgICAgICAgcmV0dXJuIGZpbGVzCisgICAgICAgIGJhc2VfbGliZGlyID0gZ2V0X2JiX3ZhcignYmFzZV9saWJkaXInKQorICAgICAgICBsaWJkaXIgPSBnZXRfYmJfdmFyKCdsaWJkaXInKQorICAgICAgICBpbmNsdWRlZGlyID0gZ2V0X2JiX3ZhcignaW5jbHVkZWRpcicpCisgICAgICAgIG1hbmRpciA9IGdldF9iYl92YXIoJ21hbmRpcicpCisgICAgICAgICMgVGVzdCByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIHpsaWItZGV2IHpsaWItZG9jJykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgIyBUZXN0IHJ1bnRpbWUgcGFja2FnZSBuYW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1yIGxpYnoxIGxpYnotZGV2JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGZpbGVzWydsaWJ6MSddKSwgMSkKKyAgICAgICAgbGlic3BlYyA9IG9zLnBhdGguam9pbihiYXNlX2xpYmRpciwgJ2xpYnouc28uMS4qJykKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gZmlsZXNbJ2xpYnoxJ106CisgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZpbGVpdGVtLCBsaWJzcGVjKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQsICdDb3VsZCBub3QgZmluZCB6bGliIGxpYnJhcnkgZmlsZSAlcyBpbiBsaWJ6MSBwYWNrYWdlIGZpbGUgbGlzdDogJXMnICUgKGxpYnNwZWMsIGZpbGVzWydsaWJ6MSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliJykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3psaWItbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgKGlnbm9yZSBwdGVzdCwgbWlnaHQgbm90IGJlIHRoZXJlIGRlcGVuZGluZyBvbiBjb25maWcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ3psaWItZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWyd6bGliLWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ3psaWItc3RhdGljZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtcicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGliei1sb2NhbGUnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ2xpYnotZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snbGliei1zdGF0aWNkZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZSwgdW5wYWNrYWdlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC11JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpICMgdGhpcyBpcyB0aGUga2V5IG9uZQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWyd6bGliLXN0YXRpY2RldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lLCB1bnBhY2thZ2VkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXIgLXUnKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpICMgdGhpcyBpcyB0aGUga2V5IG9uZQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWydsaWJ6LWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snbGliei1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWydsaWJ6LXN0YXRpY2RldiddKQorCisgICAgQHRlc3RjYXNlKDEyMDApCisgICAgZGVmIHRlc3RfZ2xvYihzZWxmKToKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdwa2dkYXRhcWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHBrZ2xpc3RmaWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdwa2dsaXN0JykKKyAgICAgICAgd2l0aCBvcGVuKHBrZ2xpc3RmaWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdsaWJjNlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2xpYnoxXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnYnVzeWJveFxuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZ2xvYiAlcyAiKi1kZXYiJyAlIHBrZ2xpc3RmaWxlKQorICAgICAgICBkZXNpcmVkcmVzdWx0ID0gWydsaWJjNi1kZXYnLCAnbGliei1kZXYnLCAnYnVzeWJveC1kZXYnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpLCBzb3J0ZWQoZGVzaXJlZHJlc3VsdCkpCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBzaG91bGQgbm90IGVycm9yIChiZWNhdXNlIHdoZW4gd2UgdXNlIHRoaXMgZHVyaW5nIHJvb3RmcyBjb25zdHJ1Y3Rpb24sIHNvbWV0aW1lcyB0aGUgY29tcGxlbWVudGFyeSBwYWNrYWdlIHdvbid0IGV4aXN0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLW5vbmV4aXN0ZW50IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnJykKKyAgICAgICAgIyBUZXN0IGV4Y2x1ZGUgb3B0aW9uCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotZGV2ICotZGJnIiAteCAiXmxpYnoiJyAlIHBrZ2xpc3RmaWxlKQorICAgICAgICByZXN1bHRsaXN0ID0gcmVzdWx0Lm91dHB1dC5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotZGV2JywgcmVzdWx0bGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGliei1kYmcnLCByZXN1bHRsaXN0KQorCisgICAgQHRlc3RjYXNlKDEyMDYpCisgICAgZGVmIHRlc3Rfc3BlY2lmeV9wa2dkYXRhZGlyKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCAtcCAlcyBsb29rdXAtcGtnIGdsaWJjJyAlIGdldF9iYl92YXIoJ1BLR0RBVEFfRElSJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2xpYmM2JykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcHJzZXJ2aWNlLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wcnNlcnZpY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4N2ZiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcHJzZXJ2aWNlLnB5CkBAIC0wLDAgKzEsMTIxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IGRhdGV0aW1lCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIEJpdGJha2VQclRlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIGdldF9wcl92ZXJzaW9uKHNlbGYsIHBhY2thZ2VfbmFtZSk6CisgICAgICAgIHBrZ2RhdGFfZGlyID0gZ2V0X2JiX3ZhcignUEtHREFUQV9ESVInKQorICAgICAgICBwYWNrYWdlX2RhdGFfZmlsZSA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwYWNrYWdlX25hbWUpCisgICAgICAgIHBhY2thZ2VfZGF0YSA9IGZ0b29scy5yZWFkX2ZpbGUocGFja2FnZV9kYXRhX2ZpbGUpCisgICAgICAgIGZpbmRfcHIgPSByZS5zZWFyY2goIlBLR1I6IHJbMC05XStcLihbMC05XSspIiwgcGFja2FnZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9wciwgIk5vIFBLRyByZXZpc2lvbiBmb3VuZCBpbiAlcyIgJSBwYWNrYWdlX2RhdGFfZmlsZSkKKyAgICAgICAgcmV0dXJuIGludChmaW5kX3ByLmdyb3VwKDEpKQorCisgICAgZGVmIGdldF90YXNrX3N0YW1wKHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVjaXBlX3Rhc2spOgorICAgICAgICBzdGFtcGRhdGEgPSBnZXRfYmJfdmFyKCdTVEFNUCcsIHRhcmdldD1wYWNrYWdlX25hbWUpLnNwbGl0KCcvJykKKyAgICAgICAgcHJlZml4ID0gc3RhbXBkYXRhWy0xXQorICAgICAgICBwYWNrYWdlX3N0YW1wc19wYXRoID0gIi8iLmpvaW4oc3RhbXBkYXRhWzotMV0pCisgICAgICAgIHN0YW1wcyA9IFtdCisgICAgICAgIGZvciBzdGFtcCBpbiBvcy5saXN0ZGlyKHBhY2thZ2Vfc3RhbXBzX3BhdGgpOgorICAgICAgICAgICAgZmluZF9zdGFtcCA9IHJlLm1hdGNoKCIlc1wuJXNcLihbYS16MC05XXszMn0pIiAlIChwcmVmaXgsIHJlY2lwZV90YXNrKSwgc3RhbXApCisgICAgICAgICAgICBpZiBmaW5kX3N0YW1wOgorICAgICAgICAgICAgICAgIHN0YW1wcy5hcHBlbmQoZmluZF9zdGFtcC5ncm91cCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3RhbXBzKSA9PSAwLCBtc2c9IkNvdW5kIG5vdCBmaW5kIHN0YW1wIGZvciB0YXNrICVzIGZvciByZWNpcGUgJXMiICUgKHJlY2lwZV90YXNrLCBwYWNrYWdlX25hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihzdGFtcHMpID4gMSwgbXNnPSJGb3VuZCBtdWx0aXBsZSAlcyBzdGFtcHMgZm9yIHRoZSAlcyByZWNpcGUgaW4gdGhlICVzIGRpcmVjdG9yeS4iICUgKHJlY2lwZV90YXNrLCBwYWNrYWdlX25hbWUsIHBhY2thZ2Vfc3RhbXBzX3BhdGgpKQorICAgICAgICByZXR1cm4gc3RyKHN0YW1wc1swXSkKKworICAgIGRlZiBpbmNyZW1lbnRfcGFja2FnZV9wcihzZWxmLCBwYWNrYWdlX25hbWUpOgorICAgICAgICBpbmNfZGF0YSA9ICJkb19wYWNrYWdlX2FwcGVuZCgpIHtcbmJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdGVzdF9wcnNlcnYnLCBkKVxufVxuZG9fdGVzdF9wcnNlcnYoKSB7XG5lY2hvIFwiVGhlIGN1cnJlbnQgZGF0ZSBpczogJXNcIlxufSIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKQorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYyhwYWNrYWdlX25hbWUsIGluY19kYXRhKQorICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlICVzIiAlIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcmVzID0gYml0YmFrZShwYWNrYWdlX25hbWUsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAwLCBtc2c9cmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJOT1RFOiBTdGFydGVkIFBSU2VydmVyIHdpdGggREJmaWxlIiBpbiByZXMub3V0cHV0LCBtc2c9cmVzLm91dHB1dCkKKworICAgIGRlZiBjb25maWdfcHJfdGVzdHMoc2VsZiwgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3R5cGU9J3JwbScsIHByX3NvY2tldD0nbG9jYWxob3N0OjAnKToKKyAgICAgICAgY29uZmlnX3BhY2thZ2VfZGF0YSA9ICdQQUNLQUdFX0NMQVNTRVMgPSAicGFja2FnZV8lcyInICUgcGFja2FnZV90eXBlCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGNvbmZpZ19wYWNrYWdlX2RhdGEpCisgICAgICAgIGNvbmZpZ19zZXJ2ZXJfZGF0YSA9ICdQUlNFUlZfSE9TVCA9ICIlcyInICUgcHJfc29ja2V0CisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfc2VydmVyX2RhdGEpCisKKyAgICBkZWYgcnVuX3Rlc3RfcHJfc2VydmljZShzZWxmLCBwYWNrYWdlX25hbWUsIHBhY2thZ2VfdHlwZT0ncnBtJywgdHJhY2tfdGFzaz0nZG9fcGFja2FnZScsIHByX3NvY2tldD0nbG9jYWxob3N0OjAnKToKKyAgICAgICAgc2VsZi5jb25maWdfcHJfdGVzdHMocGFja2FnZV9uYW1lLCBwYWNrYWdlX3R5cGUsIHByX3NvY2tldCkKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMSA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorICAgICAgICBzdGFtcF8xID0gc2VsZi5nZXRfdGFza19zdGFtcChwYWNrYWdlX25hbWUsIHRyYWNrX3Rhc2spCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzIgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc3RhbXBfMiA9IHNlbGYuZ2V0X3Rhc2tfc3RhbXAocGFja2FnZV9uYW1lLCB0cmFja190YXNrKQorCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgJXMiICUgcGFja2FnZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJfMiAtIHByXzEgPT0gMSwgIlN0ZXAgYmV0d2VlbiBzYW1lIHBrZy4gcmV2aXNpb24gaXMgZ3JlYXRlciB0aGFuIDEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBfMSAhPSBzdGFtcF8yLCAiRGlmZmVyZW50IHBrZyByZXYuIGJ1dCBzYW1lIHN0YW1wOiAlcyIgJSBzdGFtcF8xKQorCisgICAgZGVmIHJ1bl90ZXN0X3ByX2V4cG9ydF9pbXBvcnQoc2VsZiwgcGFja2FnZV9uYW1lLCByZXBsYWNlX2N1cnJlbnRfZGI9VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3ByX3Rlc3RzKHBhY2thZ2VfbmFtZSkKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMSA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorCisgICAgICAgIGV4cG9ydGVkX2RiX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2V4cG9ydC5pbmMnKQorICAgICAgICBleHBvcnRfcmVzdWx0ID0gcnVuQ21kKCJiaXRiYWtlLXByc2Vydi10b29sIGV4cG9ydCAlcyIgJSBleHBvcnRlZF9kYl9wYXRoLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwb3J0X3Jlc3VsdC5zdGF0dXMsIDAsIG1zZz0iUFIgU2VydmljZSBkYXRhYmFzZSBleHBvcnQgZmFpbGVkOiAlcyIgJSBleHBvcnRfcmVzdWx0Lm91dHB1dCkKKworICAgICAgICBpZiByZXBsYWNlX2N1cnJlbnRfZGI6CisgICAgICAgICAgICBjdXJyZW50X2RiX3BhdGggPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignUEVSU0lTVEVOVF9ESVInKSwgJ3Byc2Vydi5zcWxpdGUzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhjdXJyZW50X2RiX3BhdGgpLCBtc2c9IlBhdGggdG8gY3VycmVudCBQUiBTZXJ2aWNlIGRhdGFiYXNlIGlzIGludmFsaWQ6ICVzIiAlIGN1cnJlbnRfZGJfcGF0aCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShjdXJyZW50X2RiX3BhdGgpCisKKyAgICAgICAgaW1wb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBpbXBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBvcy5yZW1vdmUoZXhwb3J0ZWRfZGJfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRfcmVzdWx0LnN0YXR1cywgMCwgbXNnPSJQUiBTZXJ2aWNlIGRhdGFiYXNlIGltcG9ydCBmYWlsZWQ6ICVzIiAlIGltcG9ydF9yZXN1bHQub3V0cHV0KQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8yID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSAlcyIgJSBwYWNrYWdlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcl8yIC0gcHJfMSA9PSAxLCAiU3RlcCBiZXR3ZWVuIHNhbWUgcGtnLiByZXZpc2lvbiBpcyBncmVhdGVyIHRoYW4gMSIpCisKKyAgICBAdGVzdGNhc2UoOTMwKQorICAgIGRlZiB0ZXN0X2ltcG9ydF9leHBvcnRfcmVwbGFjZV9kYihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KCdtNCcpCisKKyAgICBAdGVzdGNhc2UoOTMxKQorICAgIGRlZiB0ZXN0X2ltcG9ydF9leHBvcnRfb3ZlcnJpZGVfZGIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfZXhwb3J0X2ltcG9ydCgnbTQnLCByZXBsYWNlX2N1cnJlbnRfZGI9RmFsc2UpCisKKyAgICBAdGVzdGNhc2UoOTMyKQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfcnBtX2FyY2hfZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ3JwbScsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzQpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9kZWJfYXJjaF9kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAnZGViJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzMykKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2lwa19hcmNoX2RlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdpcGsnLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTM1KQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfcnBtX2FyY2hfaW5kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdycG0nLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTM3KQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfZGViX2FyY2hfaW5kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdkZWInLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTM2KQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfaXBrX2FyY2hfaW5kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdpcGsnLCAnZG9fcGFja2FnZScpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0YWQ2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcmVjaXBldG9vbC5weQpAQCAtMCwwICsxLDU1NCBAQAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdXJscGFyc2UKKworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGNyZWF0ZV90ZW1wX2xheWVyCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKK2Zyb20gb2VxYS5zZWxmdGVzdCBpbXBvcnQgZGV2dG9vbAorCisKK3RlbXBsYXllcmRpciA9IE5vbmUKKworCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBnbG9iYWwgdGVtcGxheWVyZGlyCisgICAgdGVtcGxheWVyZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2xxYScpCisgICAgY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCAnc2VsZnRlc3RyZWNpcGV0b29sJykKKyAgICBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIpCisKKworZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgcnVuQ21kKCdybSAtcmYgJXMnICUgdGVtcGxheWVyZGlyKQorCisKK2NsYXNzIFJlY2lwZXRvb2xCYXNlKGRldnRvb2wuRGV2dG9vbEJhc2UpOgorICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgorICAgICAgICBzZWxmLnRlbXBsYXllcmRpciA9IHRlbXBsYXllcmRpcgorICAgICAgICBzZWxmLnRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncmVjaXBldG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLnRlbXBkaXIpCisgICAgICAgIHNlbGYudGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAndGVzdGZpbGUnKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnVGVzdCBmaWxlXG4nKQorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIHJ1bkNtZCgncm0gLXJmICVzL3JlY2lwZXMtKicgJSBzZWxmLnRlbXBsYXllcmRpcikKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKHNlbGYsIGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKworICAgICAgICAjIENoZWNrIHRoZSBiYmFwcGVuZCB3YXMgY3JlYXRlZCBhbmQgYXBwbGllcyBwcm9wZXJseQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorCisgICAgICAgICMgQ2hlY2sgdGhlIGJiYXBwZW5kIGNvbnRlbnRzCisgICAgICAgIGlmIGV4cGVjdGVkbGluZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpLCAiRXhwZWN0ZWQgbGluZXMgYXJlIG5vdCBwcmVzZW50IGluICVzIiAlIGJiYXBwZW5kZmlsZSkKKworICAgICAgICAjIENoZWNrIGZpbGUgd2FzIGNvcGllZAorICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZm9yIGV4cGVjdGVkZmlsZSBpbiBleHBlY3RlZGZpbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmaWxlc2RpciwgZXhwZWN0ZWRmaWxlKSksICdFeHBlY3RlZCBmaWxlICVzIHRvIGJlIGNvcGllZCBuZXh0IHRvIGJiYXBwZW5kLCBidXQgaXQgd2FzblwndCcgJSBleHBlY3RlZGZpbGUpCisKKyAgICAgICAgIyBDaGVjayBubyBvdGhlciBmaWxlcyBjcmVhdGVkCisgICAgICAgIGNyZWF0ZWRmaWxlcyA9IFtdCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKGZpbGVzZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGNyZWF0ZWRmaWxlcy5hcHBlbmQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmKSwgZmlsZXNkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ydGVkKGNyZWF0ZWRmaWxlcyksIHNvcnRlZChleHBlY3RlZGZpbGVzKSkKKworICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlLCByZXN1bHQub3V0cHV0CisKKworY2xhc3MgUmVjaXBldG9vbFRlc3RzKFJlY2lwZXRvb2xCYXNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHNobGlicy9wa2dkYXRhCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdCIpCisgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nIGJpdGJha2UgdG8gZ2VuZXJhdGUgcGtnZGF0YScpCisgICAgICAgIGJpdGJha2UoJy1jIHBhY2thZ2VkYXRhIGJhc2UtZmlsZXMgY29yZXV0aWxzIGJ1c3lib3ggc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICMgU2hvdWxkbid0IGxlYXZlIGFueSB0cmFjZXMgb2YgdGhpcyBhcnRpZmljaWFsIHJlY2lwZSBiZWhpbmQKKyAgICAgICAgYml0YmFrZSgnLWMgY2xlYW5zc3RhdGUgc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZShzZWxmLCB0ZXN0cmVjaXBlLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgZXhwZWN0ZWRmaWxlcyk6CisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgJXMgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXMpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbChzZWxmLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgY2hlY2tlcnJvcik6CisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBkZXN0ZmlsZSwgbmV3ZmlsZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdDb21tYW5kICIlcyIgc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBkaWRuXCd0JyAlIGNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZm9yIGVycm9yc3RyIGluIGNoZWNrZXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVycm9yc3RyLCByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNzcpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEJhc2ljIHRlc3QKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ2Jhc2UtZmlsZXMnLCAnL2V0Yy9tb3RkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnbW90ZCddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW52YWxpZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHNvbWUgY29tbWFuZHMgdGhhdCBzaG91bGQgZXJyb3IKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZXRjL3Bhc3N3ZCcsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9ldGMvcGFzc3dkIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbCcsICd1c2VyYWRkJywgJ2V4dHJhdXNlcnMnXSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZXRjL3RpbWVzdGFtcCcsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9ldGMvdGltZXN0YW1wIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbCddKQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9kZXYvY29uc29sZScsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9kZXYvY29uc29sZSBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc2KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hbHRlcm5hdGl2ZXMoc2VsZik6CisgICAgICAgICMgTm93IHRyeSB3aXRoIGEgZmlsZSB3ZSBrbm93IHNob3VsZCBiZSBhbiBhbHRlcm5hdGl2ZQorICAgICAgICAjICh0aGlzIGlzIHZlcnkgbXVjaCBhIGZha2UgZXhhbXBsZSwgYnV0IG9uZSB3ZSBrbm93IGlzIHJlbGlhYmx5IGFuIGFsdGVybmF0aXZlKQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9iaW4vbHMnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiBGaWxlIC9iaW4vbHMgaXMgYW4gYWx0ZXJuYXRpdmUgcG9zc2libHkgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyByZWNpcGVzOicsICdjb3JldXRpbHMnLCAnYnVzeWJveCddKQorICAgICAgICBjb3JlYmFzZSA9IGdldF9iYl92YXIoJ0NPUkVCQVNFJykKKyAgICAgICAgIyBOZWVkIGEgdGVzdCBmaWxlIC0gc2hvdWxkIGJlIGV4ZWN1dGFibGUKKyAgICAgICAgdGVzdGZpbGUyID0gb3MucGF0aC5qb2luKGNvcmViYXNlLCAnb2UtaW5pdC1idWlsZC1lbnYnKQorICAgICAgICB0ZXN0ZmlsZTJuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh0ZXN0ZmlsZTIpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovLyVzIlxuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8lcyAke0R9JHtiYXNlX2JpbmRpcn0vbHNcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdjb3JldXRpbHMnLCAnL2Jpbi9scycsIHRlc3RmaWxlMiwgJy1yIGNvcmV1dGlscycsIGV4cGVjdGVkbGluZXMsIFt0ZXN0ZmlsZTJuYW1lXSkKKyAgICAgICAgIyBOb3cgdHJ5IGJiYXBwZW5kaW5nIHRoZSBzYW1lIGZpbGUgYWdhaW4sIGNvbnRlbnRzIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAgIGJiYXBwZW5kZmlsZSwgXyA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ2NvcmV1dGlscycsICcvYmluL2xzJywgc2VsZi50ZXN0ZmlsZSwgJy1yIGNvcmV1dGlscycsIGV4cGVjdGVkbGluZXMsIFt0ZXN0ZmlsZTJuYW1lXSkKKyAgICAgICAgIyBCdXQgZmlsZSBzaG91bGQgaGF2ZQorICAgICAgICBjb3BpZWRmaWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShiYmFwcGVuZGZpbGUpLCAnY29yZXV0aWxzJywgdGVzdGZpbGUybmFtZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkaWZmIC1xICVzICVzJyAlICh0ZXN0ZmlsZTIsIGNvcGllZGZpbGUpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ05ldyBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY29waWVkIGJ1dCB3YXMgbm90ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE3OCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYmluYXJ5KHNlbGYpOgorICAgICAgICAjIFRyeSBhcHBlbmRpbmcgYSBiaW5hcnkgZmlsZQorICAgICAgICAjIC9iaW4vbHMgY2FuIGJlIGEgc3ltbGluayB0byAvdXNyL2Jpbi9scworICAgICAgICBscyA9IG9zLnBhdGgucmVhbHBhdGgoIi9iaW4vbHMiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvYmluL2xzICVzIC1yIGNvcmV1dGlscycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIGxzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignV0FSTklORzogJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaXMgYSBiaW5hcnknLCByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNzMpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2FkZChzZWxmKToKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCdDT1JFQkFTRScpCisgICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NvbWV0aGluZycsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICAjIFRyeSBhZGRpbmcgYW5vdGhlciBmaWxlLCB0aGlzIHRpbWUgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIGlzIGV4ZWN1dGFibGUKKyAgICAgICAgIyAoc28gd2UncmUgdGVzdGluZyB0aGF0LCBwbHVzIG1vZGlmeWluZyBhbiBleGlzdGluZyBiYmFwcGVuZCkKKyAgICAgICAgdGVzdGZpbGUyID0gb3MucGF0aC5qb2luKGNvcmViYXNlLCAnb2UtaW5pdC1idWlsZC1lbnYnKQorICAgICAgICB0ZXN0ZmlsZTJuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh0ZXN0ZmlsZTIpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIFxcXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBmaWxlOi8vJXMgXFxcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8lcyAke0R9JHtkYXRhZGlyfS9zY3JpcHRuYW1lXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NjcmlwdG5hbWUnLCB0ZXN0ZmlsZTIsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZScsIHRlc3RmaWxlMm5hbWVdKQorCisgICAgQHRlc3RjYXNlKDExNzQpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2FkZF9iaW5kaXIoc2VsZik6CisgICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZSwgdGhpcyB0aW1lIHRvIGEgbG9jYXRpb24gc3VjaCB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgZXhlY3V0YWJsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7YmluZGlyfS9zZWxmdGVzdC1yZWNpcGV0b29sLXRlc3RiaW5cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9iaW4vc2VsZnRlc3QtcmVjaXBldG9vbC10ZXN0YmluJywgc2VsZi50ZXN0ZmlsZSwgJy1yIG5ldGJhc2UnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTc1KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGRfbWFjaGluZShzZWxmKToKKyAgICAgICAgIyBUcnkgYXJiaXRyYXJ5IGZpbGUgYWRkIHRvIGEgcmVjaXBlLCB0aGlzIHRpbWUgdG8gYSBsb2NhdGlvbiBzdWNoIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBleGVjdXRhYmxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSV9hcHBlbmRfbXltYWNoaW5lID0gIiBmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kX215bWFjaGluZSgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc29tZXRoaW5nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3Ivc2hhcmUvc29tZXRoaW5nJywgc2VsZi50ZXN0ZmlsZSwgJy1yIG5ldGJhc2UgLW0gbXltYWNoaW5lJywgZXhwZWN0ZWRsaW5lcywgWydteW1hY2hpbmUvdGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODQpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX29yaWcoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFuZCBpbiBkb19pbnN0YWxsIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExOTEpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3RvZGlyKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhbmQgaW4gZG9faW5zdGFsbCB3aXRoIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSByYXRoZXIgdGhhbiBmaWxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXRvZGlyJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnc2VsZnRlc3QtcmVwbGFjZW1lLXRvZGlyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg3KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9yZW5hbWVkKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSB3aXRoIGEgZGlmZmVyZW50IG5hbWUgdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcmVuYW1lZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ2ZpbGUxJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTkwKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9zdWJkaXIoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGluIGEgc3ViZGlyCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXN1YmRpclxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXN1YmRpcicsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg5KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9zcmNfZ2xvYihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYXMgYSBnbG9iCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZScsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgxKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBkb19pbnN0YWxsIGFzIGEgZ2xvYgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODIpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2luc3RfdG9kaXJfZ2xvYihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIGRvX2luc3RhbGwgYXMgYSBnbG9iIHdpdGggZGVzdGluYXRpb24gYXMgYSBkaXJlY3RvcnkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZScsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg1KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9wYXRjaChzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGFkZGVkIGJ5IGEgcGF0Y2ggaW4gU1JDX1VSSQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke3N5c2NvbmZkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wYXRjaGVkXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL2V0Yy9zZWxmdGVzdC1yZXBsYWNlbWUtcGF0Y2hlZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1dBUk5JTkc6ICcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FkZC1maWxlLnBhdGNoJywgbGluZSwgJ1VuZXhwZWN0ZWQgd2FybmluZyBmb3VuZCBpbiBvdXRwdXQ6XG4lcycgJSBsaW5lKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1BhdGNoIHdhcm5pbmcgbm90IGZvdW5kIGluIG91dHB1dDpcbiVzJyAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg4KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9zY3JpcHQoc2VsZik6CisgICAgICAgICMgTm93LCBhIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYnV0IGluc3RhbGxlZCBieSBhIHNjcmlwdCAoc28gbm8gbWVudGlvbiBpbiBkb19pbnN0YWxsKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zY3JpcHRlZFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXNjcmlwdGVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODApCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2luc3RfZnVuYyhzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluc3RhbGxlZCBmcm9tIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IGRvX2luc3RhbGwKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcG9zdGluc3RhbGwoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBjcmVhdGVkIGJ5IGEgcG9zdGluc3RhbGwgc2NyaXB0IChhbmQgZXhwbGljaXRseSBtZW50aW9uZWQgaW4gaXQpCisgICAgICAgICMgRmlyc3QgdHJ5IHdpdGhvdXQgc3BlY2lmeWluZyByZWNpcGUKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdCcsIHNlbGYudGVzdGZpbGUsIFsnRmlsZSAvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdCBtYXkgYmUgd3JpdHRlbiBvdXQgaW4gYSBwcmUvcG9zdGluc3RhbGwgc2NyaXB0IG9mIHRoZSBmb2xsb3dpbmcgcmVjaXBlczonLCAnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJ10pCisgICAgICAgICMgTm93IHNwZWNpZnkgcmVjaXBlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QnLCBzZWxmLnRlc3RmaWxlLCAnLXIgc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorCisgICAgQHRlc3RjYXNlKDExNzkpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2V4dGxheWVyKHNlbGYpOgorICAgICAgICAjIFRyeSBjcmVhdGluZyBhIGJiYXBwZW5kIGluIGEgbGF5ZXIgdGhhdCdzIG5vdCBpbiBiYmxheWVycy5jb25mIGFuZCBoYXMgYSBkaWZmZXJlbnQgc3RydWN0dXJlCisgICAgICAgIGV4dHRlbXBsYXllcmRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdleHRsYXllcicpCisgICAgICAgIHNlbGYuX2NyZWF0ZV90ZW1wX2xheWVyKGV4dHRlbXBsYXllcmRpciwgRmFsc2UsICdvZXNlbGZ0ZXN0ZXh0bGF5ZXInLCByZWNpcGVwYXRoc3BlYz0nbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLSovKicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzIC91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcgJXMnICUgKGV4dHRlbXBsYXllcmRpciwgc2VsZi50ZXN0ZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGNyZWF0ZWRmaWxlcyA9IFtdCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKGV4dHRlbXBsYXllcmRpcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBjcmVhdGVkZmlsZXMuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIGV4dHRlbXBsYXllcmRpcikpCisgICAgICAgIGNyZWF0ZWRmaWxlcy5yZW1vdmUoJ2NvbmYvbGF5ZXIuY29uZicpCisgICAgICAgIGV4cGVjdGVkZmlsZXMgPSBbJ21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy10ZXN0L3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUuYmJhcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtdGVzdC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoY3JlYXRlZGZpbGVzKSwgc29ydGVkKGV4cGVjdGVkZmlsZXMpKQorCisgICAgQHRlc3RjYXNlKDExOTIpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3dpbGRjYXJkKHNlbGYpOgorCisgICAgICAgIGRlZiB0cnlfYXBwZW5kZmlsZV93YyhvcHRpb25zKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzIC9ldGMvcHJvZmlsZSAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIHNlbGYudGVzdGZpbGUsIG9wdGlvbnMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudGVtcGxheWVyZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgnLmJiYXBwZW5kJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBiYmFwcGVuZGZpbGUgPSBmCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGJiYXBwZW5kZmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ05vIGJiYXBwZW5kIGZpbGUgY3JlYXRlZCcpCisgICAgICAgICAgICBydW5DbWQoJ3JtIC1yZiAlcy9yZWNpcGVzLSonICUgc2VsZi50ZW1wbGF5ZXJkaXIpCisgICAgICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlCisKKyAgICAgICAgIyBDaGVjayB3aXRob3V0IHdpbGRjYXJkIG9wdGlvbgorICAgICAgICByZWNpcGVmbiA9IG9zLnBhdGguYmFzZW5hbWUoZ2V0X2JiX3ZhcignRklMRScsICdiYXNlLWZpbGVzJykpCisgICAgICAgIGZpbGVuYW1lID0gdHJ5X2FwcGVuZGZpbGVfd2MoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW5hbWUsIHJlY2lwZWZuLnJlcGxhY2UoJy5iYicsICcuYmJhcHBlbmQnKSkKKyAgICAgICAgIyBOb3cgY2hlY2sgd2l0aCB3aWxkY2FyZCBvcHRpb24KKyAgICAgICAgZmlsZW5hbWUgPSB0cnlfYXBwZW5kZmlsZV93YygnLXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVuYW1lLCByZWNpcGVmbi5zcGxpdCgnXycpWzBdICsgJ18lLmJiYXBwZW5kJykKKworICAgIEB0ZXN0Y2FzZSgxMTkzKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlKHNlbGYpOgorICAgICAgICAjIFRyeSBhZGRpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcHNyYyA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdzcmN0cmVlJykKKyAgICAgICAgb3MubWFrZWRpcnModGVtcHNyYykKKyAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdsb2dyb3RhdGVfMy44LjcuYmInKQorICAgICAgICBzcmN1cmkgPSAnaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvby9sb2dyb3RhdGUvbG9ncm90YXRlLTMuOC43LnRhci5neicKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGNyZWF0ZSAtbyAlcyAlcyAteCAlcycgJSAocmVjaXBlZmlsZSwgc3JjdXJpLCB0ZW1wc3JjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZWZpbGUpKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9ICdHUEx2MicKKyAgICAgICAgY2hlY2t2YXJzWydMSUNfRklMRVNfQ0hLU1VNJ10gPSAnZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwJworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9ICdodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9vL2xvZ3JvdGF0ZS9sb2dyb3RhdGUtJHtQVn0udGFyLmd6JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUklbbWQ1c3VtXSddID0gJzk5ZTA4NTAzZWYyNGMzZTJlM2ZmNzRjYzVmM2JlMjEzJworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUklbc2hhMjU2c3VtXSddID0gJ2Y2YmE2OTFmNDBlMzBlNjQwZWZhMjc1MmMxZjk0OTlhM2Y5NzM4MjU3NjYwOTk0ZGU3MGE0NWZlMDBkMTJiNjQnCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAdGVzdGNhc2UoMTE5NCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZV9naXQoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gc2hsaWJzL3BrZ2RhdGEKKyAgICAgICAgYml0YmFrZSgnbGlicG5nIHBhbmdvIGxpYngxMSBsaWJ4ZXh0IGpwZWcnKQorICAgICAgICAjIFRyeSBhZGRpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcHNyYyA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdzcmN0cmVlJykKKyAgICAgICAgb3MubWFrZWRpcnModGVtcHNyYykKKyAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdsaWJtYXRjaGJveC5iYicpCisgICAgICAgIHNyY3VyaSA9ICdnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saWJtYXRjaGJveCcKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGNyZWF0ZSAtbyAlcyAlcyAteCAlcycgJSAocmVjaXBlZmlsZSwgc3JjdXJpLCB0ZW1wc3JjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZWZpbGUpLCAncmVjaXBldG9vbCBkaWQgbm90IGNyZWF0ZSByZWNpcGUgZmlsZTsgb3V0cHV0OlxuJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSAnTEdQTHYyLjEnCisgICAgICAgIGNoZWNrdmFyc1snTElDX0ZJTEVTX0NIS1NVTSddID0gJ2ZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCcKKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9naXQnCisgICAgICAgIGNoZWNrdmFyc1snUFYnXSA9ICcxLjArZ2l0JHtTUkNQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gc3JjdXJpCisgICAgICAgIGNoZWNrdmFyc1snREVQRU5EUyddID0gJ2xpYnBuZyBwYW5nbyBsaWJ4MTEgbGlieGV4dCBqcGVnJworICAgICAgICBpbmhlcml0cyA9IFsnYXV0b3Rvb2xzJywgJ3BrZ2NvbmZpZyddCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgaW5oZXJpdHMpCisKKworY2xhc3MgUmVjaXBldG9vbEFwcGVuZHNyY0Jhc2UoUmVjaXBldG9vbEJhc2UpOgorICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZShzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0ZmlsZSwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgZXhwZWN0ZWRmaWxlcyk6CisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGUgJXMgJXMgJXMgJXMgJXMnICUgKG9wdGlvbnMsIHNlbGYudGVtcGxheWVyZGlyLCB0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0ZmlsZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXMpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGVzLCBleHBlY3RlZGxpbmVzPU5vbmUsIGV4cGVjdGVkZmlsZXM9Tm9uZSwgZGVzdGRpcj1Ob25lLCBvcHRpb25zPScnKToKKworICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgb3B0aW9ucyArPSAnIC1EICVzJyAlIGRlc3RkaXIKKworICAgICAgICBpZiBleHBlY3RlZGZpbGVzIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZGZpbGVzID0gW29zLnBhdGguYmFzZW5hbWUoZikgZm9yIGYgaW4gbmV3ZmlsZXNdCisKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZXMgJXMgJXMgJXMgJXMnICUgKG9wdGlvbnMsIHNlbGYudGVtcGxheWVyZGlyLCB0ZXN0cmVjaXBlLCAnICcuam9pbihuZXdmaWxlcykpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2ZhaWwoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUsIGNoZWNrZXJyb3IpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlICVzICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUgb3IgJycpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnQ29tbWFuZCAiJXMiIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgZGlkblwndCcgJSBjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBlcnJvcnN0ciBpbiBjaGVja2Vycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlcnJvcnN0ciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9maXJzdF9maWxlX3VyaShyZWNpcGUpOgorICAgICAgICAnJydSZXR1cm4gdGhlIGZpcnN0IGZpbGU6Ly8gaW4gU1JDX1VSSSBmb3IgdGhlIHNwZWNpZmllZCByZWNpcGUuJycnCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgcmVjaXBlKS5zcGxpdCgpCisgICAgICAgIGZvciB1cmkgaW4gc3JjX3VyaToKKyAgICAgICAgICAgIHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisgICAgICAgICAgICBpZiBwLnNjaGVtZSA9PSAnZmlsZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHAubmV0bG9jICsgcC5wYXRoCisKKyAgICBkZWYgX3Rlc3RfYXBwZW5kc3JjZmlsZShzZWxmLCB0ZXN0cmVjaXBlLCBmaWxlbmFtZT1Ob25lLCBkZXN0ZGlyPU5vbmUsIGhhc19zcmNfdXJpPVRydWUsIHNyY2Rpcj1Ob25lLCBuZXdmaWxlPU5vbmUsIG9wdGlvbnM9JycpOgorICAgICAgICBpZiBuZXdmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBuZXdmaWxlID0gc2VsZi50ZXN0ZmlsZQorCisgICAgICAgIGlmIHNyY2RpcjoKKyAgICAgICAgICAgIGlmIGRlc3RkaXI6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3ViZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgZGVzdGRpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3ViZGlyID0gc3JjZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcHRpb25zICs9ICIgLVciCisgICAgICAgICAgICBleHBlY3RlZF9zdWJkaXIgPSBkZXN0ZGlyCisKKyAgICAgICAgaWYgZmlsZW5hbWU6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gb3MucGF0aC5qb2luKGRlc3RkaXIsIGZpbGVuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IGZpbGVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUobmV3ZmlsZSkKKyAgICAgICAgICAgIGlmIGRlc3RkaXI6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSBkZXN0ZGlyICsgb3Muc2VwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gJy4nICsgb3Muc2VwCisKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBpZiBoYXNfc3JjX3VyaToKKyAgICAgICAgICAgIHVyaSA9ICdmaWxlOi8vJXMnICUgZmlsZW5hbWUKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3N1YmRpcjoKKyAgICAgICAgICAgICAgICB1cmkgKz0gJztzdWJkaXI9JXMnICUgZXhwZWN0ZWRfc3ViZGlyCisgICAgICAgICAgICBleHBlY3RlZGxpbmVzWzA6MF0gPSBbJ1NSQ19VUkkgKz0gIiVzIlxuJyAlIHVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RwYXRoLCBvcHRpb25zLCBleHBlY3RlZGxpbmVzLCBbZmlsZW5hbWVdKQorCisgICAgZGVmIF90ZXN0X2FwcGVuZHNyY2ZpbGVzKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGVzLCBleHBlY3RlZGZpbGVzPU5vbmUsIGRlc3RkaXI9Tm9uZSwgb3B0aW9ucz0nJyk6CisgICAgICAgIGlmIGV4cGVjdGVkZmlsZXMgaXMgTm9uZToKKyAgICAgICAgICAgIGV4cGVjdGVkZmlsZXMgPSBbb3MucGF0aC5iYXNlbmFtZShuKSBmb3IgbiBpbiBuZXdmaWxlc10KKworICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlcyh0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRmaWxlcz1leHBlY3RlZGZpbGVzLCBkZXN0ZGlyPWRlc3RkaXIsIG9wdGlvbnM9b3B0aW9ucykKKworICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpLnNwbGl0KCkKKyAgICAgICAgZm9yIGYgaW4gZXhwZWN0ZWRmaWxlczoKKyAgICAgICAgICAgIGlmIGRlc3RkaXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmlsZTovLyVzO3N1YmRpcj0lcycgJSAoZiwgZGVzdGRpciksIHNyY191cmkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGU6Ly8lcycgJSBmLCBzcmNfdXJpKQorCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgc2VsZi50ZW1wbGF5ZXJkaXIpCisgICAgICAgIGZpbGVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShiYmFwcGVuZGZpbGUpLCB0ZXN0cmVjaXBlKQorICAgICAgICBmaWxlc2V4dHJhcGF0aHMgPSBnZXRfYmJfdmFyKCdGSUxFU0VYVFJBUEFUSFMnLCB0ZXN0cmVjaXBlKS5zcGxpdCgnOicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZmlsZXNkaXIsIGZpbGVzZXh0cmFwYXRocykKKworCitjbGFzcyBSZWNpcGV0b29sQXBwZW5kc3JjVGVzdHMoUmVjaXBldG9vbEFwcGVuZHNyY0Jhc2UpOgorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKCdiYXNlLWZpbGVzJywgJ2EtZmlsZScpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfYmFzaWNfd2lsZGNhcmQoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzZS1maWxlcycKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsICdhLWZpbGUnLCBvcHRpb25zPSctdycpCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgc2VsZi50ZW1wbGF5ZXJkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZShiYmFwcGVuZGZpbGUpLCAnJXNfJSUuYmJhcHBlbmQnICUgdGVzdHJlY2lwZSkKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9zdWJkaXJfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsICdhLWZpbGUnLCAndG1wJykKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9zdWJkaXJfYmFzaWNfZGlyZGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKCdiYXNlLWZpbGVzJywgZGVzdGRpcj0ndG1wJykKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9zcmNkaXJfYmFzaWMoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzaCcKKyAgICAgICAgc3JjZGlyID0gZ2V0X2JiX3ZhcignUycsIHRlc3RyZWNpcGUpCisgICAgICAgIHdvcmtkaXIgPSBnZXRfYmJfdmFyKCdXT1JLRElSJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHNyY2Rpciwgd29ya2RpcikKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsICdhLWZpbGUnLCBzcmNkaXI9c3ViZGlyKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2V4aXN0aW5nX2luX3NyY191cmkoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzZS1maWxlcycKKyAgICAgICAgZmlsZXBhdGggPSBzZWxmLl9nZXRfZmlyc3RfZmlsZV91cmkodGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVwYXRoLCAnVW5hYmxlIHRvIHRlc3QsIG5vIGZpbGU6Ly8gdXJpIGZvdW5kIGluIFNSQ19VUkkgZm9yICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBmaWxlcGF0aCwgaGFzX3NyY191cmk9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfZXhpc3RpbmdfaW5fc3JjX3VyaV9kaWZmX3BhcmFtcyhzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNlLWZpbGVzJworICAgICAgICBzdWJkaXIgPSAndG1wJworICAgICAgICBmaWxlcGF0aCA9IHNlbGYuX2dldF9maXJzdF9maWxlX3VyaSh0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZXBhdGgsICdVbmFibGUgdG8gdGVzdCwgbm8gZmlsZTovLyB1cmkgZm91bmQgaW4gU1JDX1VSSSBmb3IgJXMnICUgdGVzdHJlY2lwZSkKKworICAgICAgICBvdXRwdXQgPSBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIHN1YmRpciwgaGFzX3NyY191cmk9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJ3dpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMnIGluIGwgZm9yIGwgaW4gb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9yZXBsYWNlX2ZpbGVfc3JjZGlyKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2gnCisgICAgICAgIGZpbGVwYXRoID0gJ01ha2VmaWxlLmluJworICAgICAgICBzcmNkaXIgPSBnZXRfYmJfdmFyKCdTJywgdGVzdHJlY2lwZSkKKyAgICAgICAgd29ya2RpciA9IGdldF9iYl92YXIoJ1dPUktESVInLCB0ZXN0cmVjaXBlKQorICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgoc3JjZGlyLCB3b3JrZGlyKQorCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBmaWxlcGF0aCwgc3JjZGlyPXN1YmRpcikKKyAgICAgICAgYml0YmFrZSgnJXM6ZG9fdW5wYWNrJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihzZWxmLnRlc3RmaWxlLCAncicpLnJlYWQoKSwgb3Blbihvcy5wYXRoLmpvaW4oc3JjZGlyLCBmaWxlcGF0aCksICdyJykucmVhZCgpKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlc19iYXNpYyhzZWxmLCBkZXN0ZGlyPU5vbmUpOgorICAgICAgICBuZXdmaWxlcyA9IFtzZWxmLnRlc3RmaWxlXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA1KToKKyAgICAgICAgICAgIHRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJWQnICUgaSkKKyAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZSAlZFxuJyAlIGkpCisgICAgICAgICAgICBuZXdmaWxlcy5hcHBlbmQodGVzdGZpbGUpCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZXMoJ2djYycsIG5ld2ZpbGVzLCBkZXN0ZGlyPWRlc3RkaXIsIG9wdGlvbnM9Jy1XJykKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWNfc3ViZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlc19iYXNpYyhkZXN0ZGlyPSd0ZXN0ZGlyJykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRlLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4OTcyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRlLnB5CkBAIC0wLDAgKzEsNTMgQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCisKKworY2xhc3MgU1N0YXRlQmFzZShvZVNlbGZUZXN0KToKKworICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgorICAgICAgICBzZWxmLnRlbXBfc3N0YXRlX2xvY2F0aW9uID0gTm9uZQorICAgICAgICBzZWxmLnNzdGF0ZV9wYXRoID0gZ2V0X2JiX3ZhcignU1NUQVRFX0RJUicpCisgICAgICAgIHNlbGYuZGlzdHJvID0gZ2V0X2JiX3ZhcignTkFUSVZFTFNCU1RSSU5HJykKKyAgICAgICAgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlID0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgsIHNlbGYuZGlzdHJvKQorCisgICAgIyBDcmVhdGVzIGEgc3BlY2lhbCBzc3RhdGUgY29uZmlndXJhdGlvbiB3aXRoIHRoZSBvcHRpb24gdG8gYWRkIHNzdGF0ZSBtaXJyb3JzCisgICAgZGVmIGNvbmZpZ19zc3RhdGUoc2VsZiwgdGVtcF9zc3RhdGVfbG9jYXRpb249RmFsc2UsIGFkZF9sb2NhbF9taXJyb3JzPVtdKToKKyAgICAgICAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbiA9IHRlbXBfc3N0YXRlX2xvY2F0aW9uCisKKyAgICAgICAgaWYgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbjoKKyAgICAgICAgICAgIHRlbXBfc3N0YXRlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgInRlbXBfc3N0YXRlXyVzIiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkKKyAgICAgICAgICAgIGNvbmZpZ190ZW1wX3NzdGF0ZSA9ICJTU1RBVEVfRElSID0gXCIlc1wiIiAlIHRlbXBfc3N0YXRlX3BhdGgKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfdGVtcF9zc3RhdGUpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBfc3N0YXRlX3BhdGgpCisgICAgICAgIHNlbGYuc3N0YXRlX3BhdGggPSBnZXRfYmJfdmFyKCdTU1RBVEVfRElSJykKKyAgICAgICAgc2VsZi5kaXN0cm8gPSBnZXRfYmJfdmFyKCdOQVRJVkVMU0JTVFJJTkcnKQorICAgICAgICBzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zc3RhdGVfcGF0aCwgc2VsZi5kaXN0cm8pCisKKyAgICAgICAgaWYgYWRkX2xvY2FsX21pcnJvcnM6CisgICAgICAgICAgICBjb25maWdfc2V0X3NzdGF0ZV9pZl9ub3Rfc2V0ID0gJ1NTVEFURV9NSVJST1JTID89ICIiJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zZXRfc3N0YXRlX2lmX25vdF9zZXQpCisgICAgICAgICAgICBmb3IgbG9jYWxfbWlycm9yIGluIGFkZF9sb2NhbF9taXJyb3JzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5qb2luKGxvY2FsX21pcnJvcikgPT0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgpLCBtc2c9J0Nhbm5vdCBhZGQgdGhlIGN1cnJlbnQgc3N0YXRlIHBhdGggYXMgYSBzc3RhdGUgbWlycm9yJykKKyAgICAgICAgICAgICAgICBjb25maWdfc3N0YXRlX21pcnJvciA9ICJTU1RBVEVfTUlSUk9SUyArPSBcImZpbGU6Ly8uKiBmaWxlOi8vLyVzL1BBVEhcIiIgJSBsb2NhbF9taXJyb3IKKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NzdGF0ZV9taXJyb3IpCisKKyAgICAjIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgc3N0YXRlIGZpbGVzCisgICAgZGVmIHNlYXJjaF9zc3RhdGUoc2VsZiwgZmlsZW5hbWVfcmVnZXgsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSk6CisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYuc3N0YXRlX3BhdGgpOgorICAgICAgICAgICAgaWYgZGlzdHJvX3NwZWNpZmljIGFuZCByZS5zZWFyY2goIiVzL1thLXowLTldezJ9JCIgJSBzZWxmLmRpc3Rybywgcm9vdCk6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaChmaWxlbmFtZV9yZWdleCwgZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGYpCisgICAgICAgICAgICBpZiBkaXN0cm9fbm9uc3BlY2lmaWMgYW5kIHJlLnNlYXJjaCgiJXMvW2EtejAtOV17Mn0kIiAlIHNlbGYuc3N0YXRlX3BhdGgsIHJvb3QpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goZmlsZW5hbWVfcmVnZXgsIGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZXRlc3RzLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTA2YjIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weQpAQCAtMCwwICsxLDMwOCBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS5zZWxmdGVzdC5zc3RhdGUgaW1wb3J0IFNTdGF0ZUJhc2UKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBTU3RhdGVUZXN0cyhTU3RhdGVCYXNlKToKKworICAgICMgVGVzdCBzc3RhdGUgZmlsZXMgY3JlYXRpb24gYW5kIHRoZWlyIGxvY2F0aW9uCisgICAgZGVmIHJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihzZWxmLCB0YXJnZXRzLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb24pCisKKyAgICAgICAgaWYgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb246CisgICAgICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbiddICsgdGFyZ2V0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQorCisgICAgICAgIGJpdGJha2UodGFyZ2V0cykKKyAgICAgICAgZmlsZV90cmFja2VyID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIGlmIHNob3VsZF9wYXNzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVfdHJhY2tlciAsIG1zZz0iQ291bGQgbm90IGZpbmQgc3N0YXRlIGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmlsZV90cmFja2VyICwgbXNnPSJGb3VuZCBzc3RhdGUgZmlsZXMgaW4gdGhlIHdyb25nIHBsYWNlIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgIEB0ZXN0Y2FzZSg5NzUpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NyZWF0aW9uX2Rpc3Ryb19zcGVjaWZpY19wYXNzKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydiaW51dGlscy1jcm9zcy0nKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc1KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fc3BlY2lmaWNfZmFpbChzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnYmludXRpbHMtY3Jvc3MtJysgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBzaG91bGRfcGFzcz1GYWxzZSkKKworICAgIEB0ZXN0Y2FzZSg5NzYpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NyZWF0aW9uX2Rpc3Ryb19ub25zcGVjaWZpY19wYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzYpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NyZWF0aW9uX2Rpc3Ryb19ub25zcGVjaWZpY19mYWlsKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9RmFsc2UpCisKKworICAgICMgVGVzdCB0aGUgc3N0YXRlIGZpbGVzIGRlbGV0aW9uIHBhcnQgb2YgdGhlIGRvX2NsZWFuc3N0YXRlIHRhc2sKKyAgICBkZWYgcnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayhzZWxmLCB0YXJnZXRzLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb24pCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICB0Z3pfY3JlYXRlZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGd6X2NyZWF0ZWQsIG1zZz0iQ291bGQgbm90IGZpbmQgc3N0YXRlIC50Z3ogZmlsZXMgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgICAgIHNpZ2luZm9fY3JlYXRlZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnNpZ2luZm8kJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpZ2luZm9fY3JlYXRlZCwgbXNnPSJDb3VsZCBub3QgZmluZCBzc3RhdGUgLnNpZ2luZm8gZmlsZXMgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQorICAgICAgICB0Z3pfcmVtb3ZlZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHRnel9yZW1vdmVkLCBtc2c9ImRvX2NsZWFuc3N0YXRlIGRpZG4ndCByZW1vdmUgLnRneiBzc3RhdGUgZmlsZXMgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgQHRlc3RjYXNlKDk3NykKKyAgICBkZWYgdGVzdF9jbGVhbnNzdGF0ZV90YXNrX2Rpc3Ryb19zcGVjaWZpY19ub25zcGVjaWZpYyhzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayhbJ2JpbnV0aWxzLWNyb3NzLScgKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJywgJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDk3NykKKyAgICBkZWYgdGVzdF9jbGVhbnNzdGF0ZV90YXNrX2Rpc3Ryb19ub25zcGVjaWZpYyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKFsnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDk3NykKKyAgICBkZWYgdGVzdF9jbGVhbnNzdGF0ZV90YXNrX2Rpc3Ryb19zcGVjaWZpYyhzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayhbJ2JpbnV0aWxzLWNyb3NzLScrIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnLCAnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisKKyAgICAjIFRlc3QgcmVidWlsZGluZyBvZiBkaXN0cm8tc3BlY2lmaWMgc3N0YXRlIGZpbGVzCisgICAgZGVmIHJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShzZWxmLCB0YXJnZXRzLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uKQorCisgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQorCisgICAgICAgIGJpdGJha2UodGFyZ2V0cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUpID09IFtdLCBtc2c9IkZvdW5kIGRpc3RybyBub24tc3BlY2lmaWMgc3N0YXRlIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKyAgICAgICAgZmlsZV90cmFja2VyXzEgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVfdHJhY2tlcl8xKSA+PSBsZW4odGFyZ2V0cyksIG1zZyA9ICJOb3QgYWxsIHNzdGF0ZSBmaWxlcyB3YXJlIGNyZWF0ZWQgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlICsgIl9vbGQiKQorICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlLCBzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUgKyAiX29sZCIpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKQorCisgICAgICAgIGJpdGJha2UoWyctY2NsZWFuJ10gKyB0YXJnZXRzKQorICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIGZpbGVfdHJhY2tlcl8yID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmaWxlX3RyYWNrZXJfMikgPj0gbGVuKHRhcmdldHMpLCBtc2cgPSAiTm90IGFsbCBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBub3RfcmVjcmVhdGVkID0gW3ggZm9yIHggaW4gZmlsZV90cmFja2VyXzEgaWYgeCBub3QgaW4gZmlsZV90cmFja2VyXzJdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3RfcmVjcmVhdGVkID09IFtdLCBtc2c9IlRoZSBmb2xsb3dpbmcgc3N0YXRlIGZpbGVzIHdhcmUgbm90IHJlY3JlYXRlZDogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIG5vdF9yZWNyZWF0ZWQpKSkKKworICAgICAgICBjcmVhdGVkX29uY2UgPSBbeCBmb3IgeCBpbiBmaWxlX3RyYWNrZXJfMiBpZiB4IG5vdCBpbiBmaWxlX3RyYWNrZXJfMV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZWRfb25jZSA9PSBbXSwgbXNnPSJUaGUgZm9sbG93aW5nIHNzdGF0ZSBmaWxlcyB3YXJlIGNyZWF0ZWQgb25seSBpbiB0aGUgc2Vjb25kIHJ1bjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIGNyZWF0ZWRfb25jZSkpKQorCisgICAgQHRlc3RjYXNlKDE3NSkKKyAgICBkZWYgdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGVfY3Jvc3NfbmF0aXZlX3RhcmdldHMoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShbJ2JpbnV0aWxzLWNyb3NzLScgKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJ10sIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoMTc1KQorICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9jcm9zc190YXJnZXQoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShbJ2JpbnV0aWxzLWNyb3NzLScgKyB0YXJnZXRhcmNoXSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSgxNzUpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX25hdGl2ZV90YXJnZXQoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKFsnYmludXRpbHMtbmF0aXZlJ10sIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKworICAgICMgVGVzdCB0aGUgc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQgc2NyaXB0LiBFYWNoIGVsZW1lbnQgaW4gdGhlIGdsb2JhbF9jb25maWcgbGlzdCBpcyB1c2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiB0aGUgdGFyZ2V0X2NvbmZpZyBsaXN0CisgICAgIyBnbG9iYWxfY29uZmlnIGVsZW1lbnRzIGFyZSBleHBlY3RlZCB0byBub3QgZ2VuZXJhdGUgYW55IHNzdGF0ZSBmaWxlcyB0aGF0IHdvdWxkIGJlIHJlbW92ZWQgYnkgc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggKHN1Y2ggYXMgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIE1BQ0hJTkUpCisgICAgZGVmIHJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdChzZWxmLCB0YXJnZXQsIGdsb2JhbF9jb25maWc9WycnXSwgdGFyZ2V0X2NvbmZpZz1bJyddLCBpZ25vcmVfcGF0dGVybnM9W10pOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmdldF9jb25maWcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZ2xvYmFsX2NvbmZpZykgPT0gbGVuKHRhcmdldF9jb25maWcpLCBtc2c9J0xpc3RzIGdsb2JhbF9jb25maWcgYW5kIHRhcmdldF9jb25maWcgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzJykKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIGFkZF9sb2NhbF9taXJyb3JzPVtzZWxmLnNzdGF0ZV9wYXRoXSkKKworICAgICAgICAjIElmIGJ1aWxkaGlzdG9yeSBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGRpc2FibGUgdmVyc2lvbi1nb2luZy1iYWNrd2FyZHMgUUEgY2hlY2tzIGZvciB0aGlzIHRlc3QuIEl0IG1heSByZXBvcnQgZXJyb3JzIG90aGVyd2lzZS4KKyAgICAgICAgaWYgKCdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ1VTRVJfQ0xBU1NFUycpKSBvciAoJ2J1aWxkaGlzdG9yeScgaW4gZ2V0X2JiX3ZhcignSU5IRVJJVCcpKToKKyAgICAgICAgICAgIHJlbW92ZV9lcnJvcnNfY29uZmlnID0gJ0VSUk9SX1FBX3JlbW92ZSA9ICJ2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyInCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcocmVtb3ZlX2Vycm9yc19jb25maWcpCisKKyAgICAgICAgIyBGb3Igbm90IHRoaXMgb25seSBjaGVja3MgaWYgcmFuZG9tIHNzdGF0ZSB0YXNrcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgYXMgYSBncm91cC4KKyAgICAgICAgIyBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBhZGQgY29udHJvbCBvdmVyIHdoYXQgdGFza3Mgd2UgY2hlY2sgZm9yLgorCisgICAgICAgIHNzdGF0ZV9hcmNoc19saXN0ID0gW10KKyAgICAgICAgZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZSA9IFtdCisgICAgICAgIGZvciBpZHggaW4gcmFuZ2UobGVuKHRhcmdldF9jb25maWcpKToKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhnbG9iYWxfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzc3RhdGVfYXJjaCA9IGdldF9iYl92YXIoJ1NTVEFURV9QS0dBUkNIJywgdGFyZ2V0KQorICAgICAgICAgICAgaWYgbm90IHNzdGF0ZV9hcmNoIGluIHNzdGF0ZV9hcmNoc19saXN0OgorICAgICAgICAgICAgICAgIHNzdGF0ZV9hcmNoc19saXN0LmFwcGVuZChzc3RhdGVfYXJjaCkKKyAgICAgICAgICAgIGlmIHRhcmdldF9jb25maWdbaWR4XSA9PSB0YXJnZXRfY29uZmlnWy0xXToKKyAgICAgICAgICAgICAgICB0YXJnZXRfc3N0YXRlX2JlZm9yZV9idWlsZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykKKyAgICAgICAgICAgIGJpdGJha2UoIi1jY2xlYW4gJXMiICUgdGFyZ2V0KQorICAgICAgICAgICAgcmVzdWx0ID0gYml0YmFrZSh0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHRhcmdldF9jb25maWdbaWR4XSA9PSB0YXJnZXRfY29uZmlnWy0xXToKKyAgICAgICAgICAgICAgICB0YXJnZXRfc3N0YXRlX2FmdGVyX2J1aWxkID0gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgKz0gW3ggZm9yIHggaW4gdGFyZ2V0X3NzdGF0ZV9hZnRlcl9idWlsZCBpZiB4IG5vdCBpbiB0YXJnZXRfc3N0YXRlX2JlZm9yZV9idWlsZCBpZiBub3QgYW55KHBhdHRlcm4gaW4geCBmb3IgcGF0dGVybiBpbiBpZ25vcmVfcGF0dGVybnMpXQorICAgICAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKGdsb2JhbF9jb25maWdbaWR4XSkKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWdbaWR4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgbXNnID0gImJ1aWxkIG9mICVzIGZhaWxlZCB3aXRoICVzIiAlICh0YXJnZXQsIHJlc3VsdC5vdXRwdXQpKQorCisgICAgICAgIHJ1bkNtZCgic3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggLXkgLS1jYWNoZS1kaXI9JXMgLS1yZW1vdmUtZHVwbGljYXRlZCAtLWV4dHJhLWFyY2hzPSVzIiAlIChzZWxmLnNzdGF0ZV9wYXRoLCAnLCcuam9pbihtYXAoc3RyLCBzc3RhdGVfYXJjaHNfbGlzdCkpKSkKKyAgICAgICAgYWN0dWFsX3JlbWFpbmluZ19zc3RhdGUgPSBbeCBmb3IgeCBpbiBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpIGlmIG5vdCBhbnkocGF0dGVybiBpbiB4IGZvciBwYXR0ZXJuIGluIGlnbm9yZV9wYXR0ZXJucyldCisKKyAgICAgICAgYWN0dWFsX25vdF9leHBlY3RlZCA9IFt4IGZvciB4IGluIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlIGlmIHggbm90IGluIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYWN0dWFsX25vdF9leHBlY3RlZCwgbXNnPSJGaWxlcyBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYnV0IHdhcmUgbm90OiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgYWN0dWFsX25vdF9leHBlY3RlZCkpKQorICAgICAgICBleHBlY3RlZF9ub3RfYWN0dWFsID0gW3ggZm9yIHggaW4gZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZSBpZiB4IG5vdCBpbiBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZV0KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleHBlY3RlZF9ub3RfYWN0dWFsLCBtc2c9IkV4dHJhIGZpbGVzIHdhcmUgcmVtb3ZlZDogJXMiICcsICcuam9pbihtYXAoc3RyLCBleHBlY3RlZF9ub3RfYWN0dWFsKSkpCisKKyAgICBAdGVzdGNhc2UoOTczKQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19wcl8xKHNlbGYpOgorICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KKyAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCcnKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMCInKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCisKKyAgICBAdGVzdGNhc2UoOTc4KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19wcl8yKHNlbGYpOgorICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KKyAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCcnKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMCInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjEiJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDk3OSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMyhzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnTUFDSElORSA9ICJxZW11eDg2LTY0IicpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIwIicpCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKGdsb2JhbF9jb25maWdbMF0pCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYiJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjEiJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDk3NCkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfbWFjaGluZShzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnTUFDSElORSA9ICJxZW11eDg2LTY0IicpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCcnKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnTUFDSElORSA9ICJxZW11eDg2IicpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCcnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCisKKyAgICBAdGVzdGNhc2UoMTI3MCkKKyAgICBkZWYgdGVzdF9zc3RhdGVfMzJfNjRfc2FtZV9oYXNoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgZm9yIGJvdGggbmF0aXZlIGFuZCB0YXJnZXQgc2hvdWxkIG5vdCB2YXJ5IHdoZXRoZXIKKyAgICAgICAgdGhleSdyZSBidWlsdCBvbiBhIDMyIG9yIDY0IGJpdCBzeXN0ZW0uIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0d28gZGlmZmVyZW50IAorICAgICAgICBidWlsZCBtYWNoaW5lcyBhbmQgcnVubmluZyBhIGJ1aWxkcywgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlcyBjYWxsaW5nIHVuYW1lKCkKKyAgICAgICAgbWFudWFsbHkgYW5kIGNoZWNrIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHRvcGRpciA9IGdldF9iYl92YXIoJ1RPUERJUicpCisgICAgICAgIHRhcmdldHZlbmRvciA9IGdldF9iYl92YXIoJ1RBUkdFVF9WRU5ET1InKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCitCVUlMRF9BUkNIID0gXCJ4ODZfNjRcIgorQlVJTERfT1MgPSBcImxpbnV4XCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKK0JVSUxEX0FSQ0ggPSBcImk2ODZcIgorQlVJTERfT1MgPSBcImxpbnV4XCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisKKyAgICAgICAgZGVmIGdldF9maWxlcyhkKToKKyAgICAgICAgICAgIGYgPSBbXQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAgICAgICAgZi5leHRlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpIGZvciBuYW1lIGluIGZpbGVzKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy8iKQorICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iKQorICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpLnJlcGxhY2UoImk2ODYtbGludXgiLCAieDg2XzY0LWxpbnV4IikucmVwbGFjZSgiaTY4NiIgKyB0YXJnZXR2ZW5kb3IgKyAiLWxpbnV4IiwgIng4Nl82NCIgKyB0YXJnZXR2ZW5kb3IgKyAiLWxpbnV4IiwgKSBmb3IgeCBpbiBmaWxlczJdCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmaWxlczEsIGZpbGVzMikKKworCisgICAgQHRlc3RjYXNlKDEyNzEpCisgICAgZGVmIHRlc3Rfc3N0YXRlX25hdGl2ZWxzYnN0cmluZ19zYW1lX2hhc2goc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2Ygd2hpY2hldmVyIE5BVElWRUxTQlNUUklORyBpcworICAgICAgICBkZXRlY3RlZC4gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHR3byBkaWZmZXJlbnQgYnVpbGQgbWFjaGluZXMgYW5kIHJ1bm5pbmcgCisgICAgICAgIGJ1aWxkcywgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlcyBtYW51YWxseSBhbmQgY2hlY2sgdXNpbmcgYml0YmFrZSAtUy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdG9wZGlyID0gZ2V0X2JiX3ZhcignVE9QRElSJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgorTkFUSVZFTFNCU1RSSU5HID0gXCJEaXN0cm9BXCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKK05BVElWRUxTQlNUUklORyA9IFwiRGlzdHJvQlwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorCisgICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6CisgICAgICAgICAgICBmID0gW10KKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgorICAgICAgICAgICAgICAgIGYuZXh0ZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSBmb3IgbmFtZSBpbiBmaWxlcykKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKSBmb3IgeCBpbiBmaWxlczJdCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmaWxlczEsIGZpbGVzMikKKworICAgIGRlZiB0ZXN0X3NzdGF0ZV9hbGxhcmNoX3NhbWVzaWdzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgb2ZmIGFsbGFyY2ggcGFja2FnZXMgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHdoaWNoZXZlciAKKyAgICAgICAgTUFDSElORSBpcyBzZXQuIENoZWNrIHRoaXMgdXNpbmcgYml0YmFrZSAtUy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdG9wZGlyID0gZ2V0X2JiX3ZhcignVE9QRElSJykKKyAgICAgICAgdGFyZ2V0b3MgPSBnZXRfYmJfdmFyKCdUQVJHRVRfT1MnKQorICAgICAgICB0YXJnZXR2ZW5kb3IgPSBnZXRfYmJfdmFyKCdUQVJHRVRfVkVORE9SJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgorTUFDSElORSA9IFwicWVtdXg4NlwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJ3b3JsZCAtUyBub25lIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKK01BQ0hJTkUgPSBcInFlbXVhcm1cIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoIndvcmxkIC1TIG5vbmUiKQorCisgICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6CisgICAgICAgICAgICBmID0gW10KKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiAiZG9fYnVpbGQiIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgZi5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy9hbGwiICsgdGFyZ2V0dmVuZG9yICsgIi0iICsgdGFyZ2V0b3MpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzL2FsbCIgKyB0YXJnZXR2ZW5kb3IgKyAiLSIgKyB0YXJnZXRvcykKKyAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKSBmb3IgeCBpbiBmaWxlczJdCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZpbGVzMSwgZmlsZXMyKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3dpYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM1NGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkKQEAgLTAsMCArMSwyMzYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEFVVEhPUlMKKyMgRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+CisKKyIiIlRlc3QgY2FzZXMgZm9yIHdpYy4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gZ2xvYiBpbXBvcnQgZ2xvYgorZnJvbSBzaHV0aWwgaW1wb3J0IHJtdHJlZQorCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKKworY2xhc3MgV2ljKG9lU2VsZlRlc3QpOgorICAgICIiIldpYyB0ZXN0IGNsYXNzLiIiIgorCisgICAgcmVzdWx0ZGlyID0gIi92YXIvdG1wL3dpYy9idWlsZC8iCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAiIiJCdWlsZCB3aWMgcnVudGltZSBkZXBlbmRlbmNpZXMuIiIiCisgICAgICAgIGJpdGJha2UoJ3N5c2xpbnV4IHN5c2xpbnV4LW5hdGl2ZSBwYXJ0ZWQtbmF0aXZlIGdwdGZkaXNrLW5hdGl2ZSAnCisgICAgICAgICAgICAgICAgJ2Rvc2ZzdG9vbHMtbmF0aXZlIG10b29scy1uYXRpdmUnKQorICAgICAgICBXaWMuaW1hZ2VfaXNfcmVhZHkgPSBGYWxzZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgYmVmb3JlIGVhY2ggdGVzdCBtZXRob2QuIiIiCisgICAgICAgIGlmIG5vdCBXaWMuaW1hZ2VfaXNfcmVhZHk6CisgICAgICAgICAgICAjIGJ1aWxkIGNvcmUtaW1hZ2UtbWluaW1hbCB3aXRoIHJlcXVpcmVkIGZlYXR1cmVzCisgICAgICAgICAgICBmZWF0dXJlcyA9ICdJTUFHRV9GU1RZUEVTICs9ICIgaGRkaW1nIlxuTUFDSElORV9GRUFUVVJFU19hcHBlbmQgPSAiIGVmaSJcbicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKyAgICAgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgICAgICAjIHNldCB0aGlzIGNsYXNzIHZhcmlhYmxlIHRvIGF2b2lkIGJ1aWRpbmcgaW1hZ2UgbWFueSB0aW1lcworICAgICAgICAgICAgV2ljLmltYWdlX2lzX3JlYWR5ID0gVHJ1ZQorCisgICAgICAgIHJtdHJlZShzZWxmLnJlc3VsdGRpciwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgZGVmIHRlc3QwMV9oZWxwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyAtLWhlbHAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyAtLWhlbHAnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDAyX2NyZWF0ZWhlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSAtLWhlbHAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBjcmVhdGUgLS1oZWxwJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwM19saXN0aGVscChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgbGlzdCAtLWhlbHAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBsaXN0IC0taGVscCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDRfYnVpbGRfaW1hZ2VfbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIGRlZiB0ZXN0MDVfYnVpbGRfYXJ0aWZhY3RzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBjcmVhdGUgZGlyZWN0ZGlzayBwcm92aWRpbmcgYWxsIGFydGlmYWN0cy4iIiIKKyAgICAgICAgdmFycyA9IGRpY3QoKHZhci5sb3dlcigpLCBnZXRfYmJfdmFyKHZhciwgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFyIGluICgnU1RBR0lOR19EQVRBRElSJywgJ0RFUExPWV9ESVJfSU1BR0UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NUQUdJTkdfRElSX05BVElWRScsICdJTUFHRV9ST09URlMnKSkKKyAgICAgICAgc3RhdHVzID0gcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1iICUoc3RhZ2luZ19kYXRhZGlyKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1rICUoZGVwbG95X2Rpcl9pbWFnZSlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItbiAlKHN0YWdpbmdfZGlyX25hdGl2ZSlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItciAlKGltYWdlX3Jvb3RmcylzIiAlIHZhcnMpLnN0YXR1cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQorCisgICAgZGVmIHRlc3QwNl9ncHRfaW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgY29yZS1pbWFnZS1taW5pbWFsIHdpdGggZ3B0IHRhYmxlIGFuZCBVVUlEIGJvb3QiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzay1ncHQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQorCisgICAgZGVmIHRlc3QwN191bnN1cHBvcnRlZF9zdWJjb21tYW5kKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVuc3VwcG9ydGVkIHN1YmNvbW1hbmQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBydW5DbWQoJ3dpYyB1bnN1cHBvcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDA4X25vX2NvbW1hbmQoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIHdpdGhvdXQgY29tbWFuZCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJ1bkNtZCgnd2ljJywgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDA5X2hlbHBfa2lja3N0YXJ0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBoZWxwIG92ZXJ2aWV3IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBvdmVydmlldycpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MTBfaGVscF9wbHVnaW5zKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBoZWxwIHBsdWdpbnMiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIHBsdWdpbnMnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDExX2hlbHBfa2lja3N0YXJ0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBoZWxwIGtpY2tzdGFydCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAga2lja3N0YXJ0Jykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxMl9jb21wcmVzc19nemlwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXByZXNzaW5nIGFuIGltYWdlIHdpdGggZ3ppcCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgZ3ppcCIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdGRpc2stKi5kaXJlY3QuZ3oiKSkpCisKKyAgICBkZWYgdGVzdDEzX2NvbXByZXNzX2d6aXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCBiemlwMiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgYnppcDIiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RkaXNrLSouZGlyZWN0LmJ6MiIpKSkKKworICAgIGRlZiB0ZXN0MTRfY29tcHJlc3NfZ3ppcChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIHh6IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyB4eiIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdGRpc2stKi5kaXJlY3QueHoiKSkpCisKKyAgICBkZWYgdGVzdDE1X3dyb25nX2NvbXByZXNzb3Ioc2VsZik6CisgICAgICAgICIiIlRlc3QgaG93IHdpYyBicmVha3MgaWYgd3JvbmcgY29tcHJlc3NvciBpcyBwcm92aWRlZCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgd3JvbmciLCBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MTZfcm9vdGZzX2luZGlyZWN0X3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIlRlc3QgdXNhZ2Ugb2Ygcm9vdGZzIHBsdWdpbiB3aXRoIHJvb3RmcyByZWNpcGVzIiIiCisgICAgICAgIHdrcyA9ICJkaXJlY3RkaXNrLW11bHRpLXJvb3RmcyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXJvb3RmcyByb290ZnMxPWNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXJvb3RmcyByb290ZnMyPWNvcmUtaW1hZ2UtbWluaW1hbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHdrcykuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzKi5kaXJlY3QiICUgd2tzKSkpCisKKyAgICBkZWYgdGVzdDE3X3Jvb3Rmc19hcnRpZmFjdHMoc2VsZik6CisgICAgICAgICIiIlRlc3QgdXNhZ2Ugb2Ygcm9vdGZzIHBsdWdpbiB3aXRoIHJvb3RmcyBwYXRocyIiIgorICAgICAgICB2YXJzID0gZGljdCgodmFyLmxvd2VyKCksIGdldF9iYl92YXIodmFyLCAnY29yZS1pbWFnZS1taW5pbWFsJykpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2YXIgaW4gKCdTVEFHSU5HX0RBVEFESVInLCAnREVQTE9ZX0RJUl9JTUFHRScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1RBR0lOR19ESVJfTkFUSVZFJywgJ0lNQUdFX1JPT1RGUycpKQorICAgICAgICB2YXJzWyd3a3MnXSA9ICJkaXJlY3RkaXNrLW11bHRpLXJvb3RmcyIKKyAgICAgICAgc3RhdHVzID0gcnVuQ21kKCJ3aWMgY3JlYXRlICUod2tzKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1iICUoc3RhZ2luZ19kYXRhZGlyKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1rICUoZGVwbG95X2Rpcl9pbWFnZSlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItbiAlKHN0YWdpbmdfZGlyX25hdGl2ZSlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXJvb3Rmcy1kaXIgcm9vdGZzMT0lKGltYWdlX3Jvb3RmcylzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXJvb3Rmcy1kaXIgcm9vdGZzMj0lKGltYWdlX3Jvb3RmcylzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIHZhcnMpLnN0YXR1cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSh3a3Mpcy0qLmRpcmVjdCIgJSB2YXJzKSkpCisKKyAgICBkZWYgdGVzdDE4X2lzb19pbWFnZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBoeWJyaWQgaXNvIGltYWdld2l0aCBsZWdhY3kgYW5kIEVGSSBib290IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIG1raHlicmlkaXNvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiSFlCUklEX0lTT19JTUctKi5kaXJlY3QiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiSFlCUklEX0lTT19JTUctKi5pc28iKSkpCisKKyAgICBkZWYgdGVzdDE5X2ltYWdlX2VudihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBnZW5lcmF0aW9uIG9mIDxpbWFnZT4uZW52IGZpbGVzLiIiIgorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHN0ZGlyID0gZ2V0X2JiX3ZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgaW1hZ2UpCisgICAgICAgIGltZ2RhdGFkaXIgPSBvcy5wYXRoLmpvaW4oc3RkaXIsICdpbWdkYXRhJykKKworICAgICAgICBiYXNlbmFtZSA9IGdldF9iYl92YXIoJ0lNQUdFX0JBU0VOQU1FJywgaW1hZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZW5hbWUsIGltYWdlKQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGltZ2RhdGFkaXIsIGJhc2VuYW1lKSArICcuZW52JworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocGF0aCkpCisKKyAgICAgICAgd2ljdmFycyA9IHNldChnZXRfYmJfdmFyKCdXSUNWQVJTJywgaW1hZ2UpLnNwbGl0KCkpCisgICAgICAgICMgZmlsdGVyIG91dCBvcHRpb25hbCB2YXJpYWJsZXMKKyAgICAgICAgd2ljdmFycyA9IHdpY3ZhcnMuZGlmZmVyZW5jZSgoJ0hERERJUicsICdJTUFHRV9CT09UX0ZJTEVTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lOSVRSRCcsICdJU09ESVInKSkKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGVudmZpbGU6CisgICAgICAgICAgICBjb250ZW50ID0gZGljdChsaW5lLnNwbGl0KCI9IiwgMSkgZm9yIGxpbmUgaW4gZW52ZmlsZSkKKyAgICAgICAgICAgICMgdGVzdCBpZiB2YXJpYWJsZXMgdXNlZCBieSB3aWMgcHJlc2VudCBpbiB0aGUgLmVudiBmaWxlCisgICAgICAgICAgICBmb3IgdmFyIGluIHdpY3ZhcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhciBpbiBjb250ZW50LCAiJXMgaXMgbm90IGluIC5lbnYgZmlsZSIgJSB2YXIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbnRlbnRbdmFyXSkKKworICAgIGRlZiB0ZXN0MjBfd2ljX2ltYWdlX3R5cGUoc2VsZik6CisgICAgICAgICIiIlRlc3QgYnVpbGRpbmcgd2ljIGltYWdlcyBieSBiaXRiYWtlIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYml0YmFrZSgnd2ljLWltYWdlLW1pbmltYWwnKS5zdGF0dXMpCisKKyAgICAgICAgZGVwbG95X2RpciA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBtYWNoaW5lID0gZ2V0X2JiX3ZhcignTUFDSElORScpCisgICAgICAgIHByZWZpeCA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyLCAnd2ljLWltYWdlLW1pbmltYWwtJXMuJyAlIG1hY2hpbmUpCisgICAgICAgICMgY2hlY2sgaWYgd2UgaGF2ZSByZXN1bHQgaW1hZ2UgYW5kIG1hbmlmZXN0cyBzeW1saW5rcworICAgICAgICAjIHBvaW50aW5nIHRvIGV4aXN0aW5nIGZpbGVzCisgICAgICAgIGZvciBzdWZmaXggaW4gKCd3aWMuYnoyJywgJ21hbmlmZXN0Jyk6CisgICAgICAgICAgICBwYXRoID0gcHJlZml4ICsgc3VmZml4CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2xpbmsocGF0aCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5yZWFscGF0aChwYXRoKSkpCisKKyAgICBkZWYgdGVzdDIxX3FlbXV4ODZfZGlyZWN0ZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBxZW11eC04Ni1kaXJlY3RkaXNrIGltYWdlIiIiCisgICAgICAgIGltYWdlID0gInFlbXV4ODYtZGlyZWN0ZGlzayIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW1hZ2UpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIGltYWdlKSkpCisKKyAgICBkZWYgdGVzdDIyX21rZ3VtbWlkaXNrKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIG1rZ3VtbWlkaXNrIGltYWdlIiIiCisgICAgICAgIGltYWdlID0gIm1rZ3VtbWlkaXNrIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbWFnZSkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKKworICAgIGRlZiB0ZXN0MjNfbWtlZmlkaXNrKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIG1rZWZpZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJta2VmaWRpc2siCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGltYWdlKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSBpbWFnZSkpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5IGIvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzBkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3RhcmdldGNvbnRyb2wucHkKQEAgLTAsMCArMSwyNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGVzdGltYWdlLmJiY2xhc3MgZm9yIHNldHRpbmcgdXAgYW5kIGNvbnRyb2xsaW5nIGEgdGFyZ2V0IG1hY2hpbmUuCisKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBiYgoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gb2VxYS51dGlscy5zc2hjb250cm9sIGltcG9ydCBTU0hDb250cm9sCitmcm9tIG9lcWEudXRpbHMucWVtdXJ1bm5lciBpbXBvcnQgUWVtdVJ1bm5lcgorZnJvbSBvZXFhLnV0aWxzLnFlbXV0aW55cnVubmVyIGltcG9ydCBRZW11VGlueVJ1bm5lcgorZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IFRhcmdldER1bXBlcgorZnJvbSBvZXFhLmNvbnRyb2xsZXJzLnRlc3R0YXJnZXRsb2FkZXIgaW1wb3J0IFRlc3RUYXJnZXRMb2FkZXIKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorCitkZWYgZ2V0X3RhcmdldF9jb250cm9sbGVyKGQpOgorICAgIHRlc3R0YXJnZXQgPSBkLmdldFZhcigiVEVTVF9UQVJHRVQiLCBUcnVlKQorICAgICMgb2xkLCBzaW1wbGUgbmFtZXMKKyAgICBpZiB0ZXN0dGFyZ2V0ID09ICJxZW11IjoKKyAgICAgICAgcmV0dXJuIFFlbXVUYXJnZXQoZCkKKyAgICBlbGlmIHRlc3R0YXJnZXQgPT0gInNpbXBsZXJlbW90ZSI6CisgICAgICAgIHJldHVybiBTaW1wbGVSZW1vdGVUYXJnZXQoZCkKKyAgICBlbHNlOgorICAgICAgICAjIHVzZSB0aGUgY2xhc3MgbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGlzIGl0IGEgY29yZSBjbGFzcyBkZWZpbmVkIGhlcmU/CisgICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0YXR0cihzeXMubW9kdWxlc1tfX25hbWVfX10sIHRlc3R0YXJnZXQpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgbm9wZSwgcGVyaGFwcyBhIGxheWVyIGRlZmluZWQgb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICB0ZXN0dGFyZ2V0bG9hZGVyID0gVGVzdFRhcmdldExvYWRlcigpCisgICAgICAgICAgICAgICAgY29udHJvbGxlciA9IHRlc3R0YXJnZXRsb2FkZXIuZ2V0X2NvbnRyb2xsZXJfbW9kdWxlKHRlc3R0YXJnZXQsIGJicGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gaW1wb3J0IHswfSBmcm9tIGF2YWlsYWJsZSBjb250cm9sbGVyIG1vZHVsZXM6XG57MX0iLmZvcm1hdCh0ZXN0dGFyZ2V0LHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgVEVTVF9UQVJHRVQgLSAiICsgc3RyKGUpKQorICAgICAgICByZXR1cm4gY29udHJvbGxlcihkKQorCisKK2NsYXNzIEJhc2VUYXJnZXQob2JqZWN0KToKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFtdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCisgICAgICAgIHNlbGYuZGF0ZXRpbWUgPSBkLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBzZWxmLnRlc3RkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorCisgICAgICAgIHNlbGYuc3NobG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIHNzaGxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAic3NoX3RhcmdldF9sb2ciKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhzc2hsb2dsaW5rKToKKyAgICAgICAgICAgIG9zLnVubGluayhzc2hsb2dsaW5rKQorICAgICAgICBvcy5zeW1saW5rKHNlbGYuc3NobG9nLCBzc2hsb2dsaW5rKQorICAgICAgICBiYi5ub3RlKCJTU0ggbG9nIGZpbGU6ICVzIiAlICBzZWxmLnNzaGxvZykKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2V4dHJhX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1hdGNoX2ltYWdlX2ZzdHlwZShzZWxmLCBkLCBpbWFnZV9mc3R5cGVzPU5vbmUpOgorICAgICAgICBpZiBub3QgaW1hZ2VfZnN0eXBlczoKKyAgICAgICAgICAgIGltYWdlX2ZzdHlwZXMgPSBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpLnNwbGl0KCcgJykKKyAgICAgICAgcG9zc2libGVfaW1hZ2VfZnN0eXBlcyA9IFtmc3R5cGUgZm9yIGZzdHlwZSBpbiBzZWxmLnN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzIGlmIGZzdHlwZSBpbiBpbWFnZV9mc3R5cGVzXQorICAgICAgICBpZiBwb3NzaWJsZV9pbWFnZV9mc3R5cGVzOgorICAgICAgICAgICAgcmV0dXJuIHBvc3NpYmxlX2ltYWdlX2ZzdHlwZXNbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2ltYWdlX2ZzdHlwZShzZWxmLCBkKToKKyAgICAgICAgaW1hZ2VfZnN0eXBlID0gc2VsZi5tYXRjaF9pbWFnZV9mc3R5cGUoZCkKKyAgICAgICAgaWYgaW1hZ2VfZnN0eXBlOgorICAgICAgICAgICAgcmV0dXJuIGltYWdlX2ZzdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZmF0YWwoIklNQUdFX0ZTVFlQRVMgc2hvdWxkIGNvbnRhaW4gYSBUYXJnZXQgQ29udHJvbGxlciBzdXBwb3J0ZWQgaW1hZ2UgZnN0eXBlOiAlcyAiICUgJywgJy5qb2luKG1hcChzdHIsIHNlbGYuc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMpKSkKKworICAgIGRlZiByZXN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgc2VsZi5zdGFydChwYXJhbXMpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNtZCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5ydW4oY21kLCB0aW1lb3V0KQorCisgICAgZGVmIGNvcHlfdG8oc2VsZiwgbG9jYWxwYXRoLCByZW1vdGVwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X3RvKGxvY2FscGF0aCwgcmVtb3RlcGF0aCkKKworICAgIGRlZiBjb3B5X2Zyb20oc2VsZiwgcmVtb3RlcGF0aCwgbG9jYWxwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X2Zyb20ocmVtb3RlcGF0aCwgbG9jYWxwYXRoKQorCisKKworY2xhc3MgUWVtdVRhcmdldChCYXNlVGFyZ2V0KToKKworICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gWydleHQzJywgJ2V4dDQnLCAnY3Bpby5neiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisKKyAgICAgICAgc3VwZXIoUWVtdVRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKworICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZSA9IHNlbGYuZ2V0X2ltYWdlX2ZzdHlwZShkKQorICAgICAgICBzZWxmLnFlbXVsb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAicWVtdV9ib290X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBzZWxmLm9yaWdyb290ZnMgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICcuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLnJvb3RmcyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICctdGVzdGltYWdlLicgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5rZXJuZWwgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgZC5nZXRWYXIoIktFUk5FTF9JTUFHRVRZUEUiLCBGYWxzZSkgKyAnLScgKyBkLmdldFZhcignTUFDSElORScsIEZhbHNlKSArICcuYmluJykKKyAgICAgICAgZHVtcF90YXJnZXRfY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF90YXJnZXQiLCBUcnVlKQorICAgICAgICBkdW1wX2hvc3RfY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IiwgVHJ1ZSkKKyAgICAgICAgZHVtcF9kaXIgPSBkLmdldFZhcigiVEVTVElNQUdFX0RVTVBfRElSIiwgVHJ1ZSkKKworICAgICAgICAjIExvZyBRZW11UnVubmVyIGxvZyBvdXRwdXQgdG8gYSBmaWxlCisgICAgICAgIGltcG9ydCBvZS5wYXRoCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnRlc3RkaXIpCisgICAgICAgIHNlbGYucWVtdXJ1bm5lcmxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICdxZW11cnVubmVyX2xvZy4lcycgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5RZW11UnVubmVyJykKKyAgICAgICAgbG9nZ2VyaGFuZGxlciA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoc2VsZi5xZW11cnVubmVybG9nKQorICAgICAgICBsb2dnZXJoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKSkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2VyaGFuZGxlcikKKyAgICAgICAgb2UucGF0aC5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUoc2VsZi5xZW11cnVubmVybG9nKSwgb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgJ3FlbXVydW5uZXJfbG9nJyksIGZvcmNlPVRydWUpCisKKyAgICAgICAgaWYgZC5nZXRWYXIoIkRJU1RSTyIsIFRydWUpID09ICJwb2t5LXRpbnkiOgorICAgICAgICAgICAgc2VsZi5ydW5uZXIgPSBRZW11VGlueVJ1bm5lcihtYWNoaW5lPWQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzPXNlbGYucm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkuZ2V0VmFyKCJESVNQTEFZIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmlsZSA9IHNlbGYucWVtdWxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgPSBzZWxmLmtlcm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290dGltZSA9IGludChkLmdldFZhcigiVEVTVF9RRU1VQk9PVF9USU1FT1VUIiwgVHJ1ZSkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ydW5uZXIgPSBRZW11UnVubmVyKG1hY2hpbmU9ZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnM9c2VsZi5yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wZGlyID0gZC5nZXRWYXIoIlRNUERJUiIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKS5nZXRWYXIoIkRJU1BMQVkiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dmaWxlID0gc2VsZi5xZW11bG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3R0aW1lID0gaW50KGQuZ2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiLCBUcnVlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9kaXIgPSBkdW1wX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wX2hvc3RfY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi50YXJnZXRfZHVtcGVyID0gVGFyZ2V0RHVtcGVyKGR1bXBfdGFyZ2V0X2NtZHMsIGR1bXBfZGlyLCBzZWxmLnJ1bm5lcikKKworICAgIGRlZiBkZXBsb3koc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnRlc3RkaXIpCisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5vcmlncm9vdGZzLCBzZWxmLnJvb3RmcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkVycm9yIGNvcHlpbmcgcm9vdGZzOiAlcyIgJSBlKQorCisgICAgICAgIHFlbXVsb2dsaW5rID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInFlbXVfYm9vdF9sb2ciKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhxZW11bG9nbGluayk6CisgICAgICAgICAgICBvcy51bmxpbmsocWVtdWxvZ2xpbmspCisgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5xZW11bG9nLCBxZW11bG9nbGluaykKKworICAgICAgICBiYi5ub3RlKCJyb290ZnMgZmlsZTogJXMiICUgIHNlbGYucm9vdGZzKQorICAgICAgICBiYi5ub3RlKCJRZW11IGxvZyBmaWxlOiAlcyIgJSBzZWxmLnFlbXVsb2cpCisgICAgICAgIHN1cGVyKFFlbXVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJ1bm5lci5zdGFydChwYXJhbXMpOgorICAgICAgICAgICAgc2VsZi5pcCA9IHNlbGYucnVubmVyLmlwCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IHNlbGYucnVubmVyLnNlcnZlcl9pcAorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gU1NIQ29udHJvbChpcD1zZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucWVtdWxvZyk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYucWVtdWxvZywgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigiUWVtdSBsb2cgb3V0cHV0IGZyb20gJXM6XG4lcyIgJSAoc2VsZi5xZW11bG9nLCBmLnJlYWQoKSkpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtIEZBSUxFRCB0byBzdGFydCBxZW11IC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgYm9vdCBsb2ciICUgc2VsZi5wbikKKworICAgIGRlZiBjaGVjayhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVubmVyLmlzX2FsaXZlKCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bm5lci5zdG9wKCkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKworICAgIGRlZiByZXN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXIucmVzdGFydChwYXJhbXMpOgorICAgICAgICAgICAgc2VsZi5pcCA9IHNlbGYucnVubmVyLmlwCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IHNlbGYucnVubmVyLnNlcnZlcl9pcAorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gU1NIQ29udHJvbChpcD1zZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgdG8gcmUtc3RhcnQgcWVtdSAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIGJvb3QgbG9nIiAlIHNlbGYucG4pCisKKyAgICBkZWYgcnVuX3NlcmlhbChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVubmVyLnJ1bl9zZXJpYWwoY29tbWFuZCkKKworCitjbGFzcyBTaW1wbGVSZW1vdGVUYXJnZXQoQmFzZVRhcmdldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKFNpbXBsZVJlbW90ZVRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgYWRkciA9IGQuZ2V0VmFyKCJURVNUX1RBUkdFVF9JUCIsIFRydWUpIG9yIGJiLmZhdGFsKCdQbGVhc2Ugc2V0IFRFU1RfVEFSR0VUX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgeW91IHdhbnQgdG8gcnVuIHRoZSB0ZXN0cyBvbi4nKQorICAgICAgICBzZWxmLmlwID0gYWRkci5zcGxpdCgiOiIpWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IGFkZHIuc3BsaXQoIjoiKVsxXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IE5vbmUKKyAgICAgICAgYmIubm90ZSgiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGQuZ2V0VmFyKCJURVNUX1NFUlZFUl9JUCIsIFRydWUpCisgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9pcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnaXAnLCAncm91dGUnLCAnZ2V0Jywgc2VsZi5pcCBdKS5zcGxpdCgiXG4iKVswXS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3N0IElQIGFkZHJlc3MgKGFsdGVybmF0aXZlbHkgeW91IGNhbiBzZXQgVEVTVF9TRVJWRVJfSVAgd2l0aCB0aGUgSVAgYWRkcmVzcyBvZiB0aGlzIG1hY2hpbmUpOiAlcyIgJSBlKQorICAgICAgICBiYi5ub3RlKCJTZXJ2ZXIgSVA6ICVzIiAlIHNlbGYuc2VydmVyX2lwKQorCisgICAgZGVmIGRlcGxveShzZWxmKToKKyAgICAgICAgc3VwZXIoU2ltcGxlUmVtb3RlVGFyZ2V0LCBzZWxmKS5kZXBsb3koKQorCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gU1NIQ29udHJvbChzZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCBwb3J0PXNlbGYucG9ydCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9fX2luaXRfXy5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2MDA0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNSBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgbW9kdWxlcyBpbiB0aGUgc2FtZSBuYW1lZCBkaXJlY3RvcnkKK2Zyb20gcGtndXRpbCBpbXBvcnQgZXh0ZW5kX3BhdGgKK19fcGF0aF9fID0gZXh0ZW5kX3BhdGgoX19wYXRoX18sIF9fbmFtZV9fKQorCisKKyMgQm9ycm93ZWQgZnJvbSBDYWxsZWRQcm9jZXNzRXJyb3IKKworY2xhc3MgQ29tbWFuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJldGNvZGUsIGNtZCwgb3V0cHV0ID0gTm9uZSk6CisgICAgICAgIHNlbGYucmV0Y29kZSA9IHJldGNvZGUKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQgd2l0aCBvdXRwdXQ6ICVzIiAlIChzZWxmLmNtZCwgc2VsZi5yZXRjb2RlLCBzZWxmLm91dHB1dCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlMmNiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkKQEAgLTAsMCArMSwyMjQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgaXMgbWFpbmx5IHVzZWQgYnkgc2NyaXB0cy9vZS1zZWxmdGVzdCBhbmQgbW9kdWxlcyB1bmRlciBtZXRhL29lcWEvc2VsZnRlc3QKKyMgSXQgcHJvdmlkZXMgYSBjbGFzcyBhbmQgbWV0aG9kcyBmb3IgcnVubmluZyBjb21tYW5kcyBvbiB0aGUgaG9zdCBpbiBhIGNvbnZpZW5lbnQgd2F5IGZvciB0ZXN0cy4KKworCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBsb2dnaW5nCitmcm9tIG9lcWEudXRpbHMgaW1wb3J0IENvbW1hbmRFcnJvcgorZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBmdG9vbHMKK2ltcG9ydCByZQoraW1wb3J0IGNvbnRleHRsaWIKKworY2xhc3MgQ29tbWFuZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kLCBiZz1GYWxzZSwgdGltZW91dD1Ob25lLCBkYXRhPU5vbmUsICoqb3B0aW9ucyk6CisKKyAgICAgICAgc2VsZi5kZWZhdWx0b3B0cyA9IHsKKyAgICAgICAgICAgICJzdGRvdXQiOiBzdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAic3RkZXJyIjogc3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAic3RkaW4iOiBOb25lLAorICAgICAgICAgICAgInNoZWxsIjogRmFsc2UsCisgICAgICAgICAgICAiYnVmc2l6ZSI6IC0xLAorICAgICAgICB9CisKKyAgICAgICAgc2VsZi5jbWQgPSBjb21tYW5kCisgICAgICAgIHNlbGYuYmcgPSBiZworICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgICAgICBzZWxmLm9wdGlvbnMgPSBkaWN0KHNlbGYuZGVmYXVsdG9wdHMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jbWQsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgc2VsZi5vcHRpb25zWyJzaGVsbCJdID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLmRhdGE6CisgICAgICAgICAgICBzZWxmLm9wdGlvbnNbJ3N0ZGluJ10gPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgc2VsZi5vcHRpb25zLnVwZGF0ZShvcHRpb25zKQorCisgICAgICAgIHNlbGYuc3RhdHVzID0gTm9uZQorICAgICAgICBzZWxmLm91dHB1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5lcnJvciA9IE5vbmUKKyAgICAgICAgc2VsZi50aHJlYWQgPSBOb25lCisKKyAgICAgICAgc2VsZi5sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigidXRpbHMuY29tbWFuZHMiKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLmNtZCwgKipzZWxmLm9wdGlvbnMpCisKKyAgICAgICAgZGVmIGNvbW1UaHJlYWQoKToKKyAgICAgICAgICAgIHNlbGYub3V0cHV0LCBzZWxmLmVycm9yID0gc2VsZi5wcm9jZXNzLmNvbW11bmljYXRlKHNlbGYuZGF0YSkKKworICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNvbW1UaHJlYWQpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKworICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUnVubmluZyBjb21tYW5kICclcyciICUgc2VsZi5jbWQpCisKKyAgICAgICAgaWYgbm90IHNlbGYuYmc6CisgICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKHNlbGYudGltZW91dCkKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICAjIGxldCdzIGdpdmUgaXQgbW9yZSB0aW1lIHRvIHRlcm1pbmF0ZSBncmFjZWZ1bGx5IGJlZm9yZSBraWxsaW5nIGl0CisgICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKDUpCisgICAgICAgICAgICBpZiBzZWxmLnRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCisgICAgICAgIHNlbGYub3V0cHV0ID0gc2VsZi5vdXRwdXQucnN0cmlwKCkKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnByb2Nlc3MucG9sbCgpCisKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZCBhcyBleGl0IGNvZGUuIiAlIChzZWxmLmNtZCwgc2VsZi5zdGF0dXMpKQorICAgICAgICAjIGxvZ2dpbmcgdGhlIGNvbXBsZXRlIG91dHB1dCBpcyBpbnNhbmUKKyAgICAgICAgIyBiaXRiYWtlIC1lIG91dHB1dCBpcyByZWFsbHkgYmlnCisgICAgICAgICMgYW5kIG1ha2VzIHRoZSBsb2cgZmlsZSB1c2VsZXNzCisgICAgICAgIGlmIHNlbGYuc3RhdHVzOgorICAgICAgICAgICAgbG91dCA9ICJcbiIuam9pbihzZWxmLm91dHB1dC5zcGxpdGxpbmVzKClbLTIwOl0pCisgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiTGFzdCAyMCBsaW5lczpcbiVzIiAlIGxvdXQpCisKKworY2xhc3MgUmVzdWx0KG9iamVjdCk6CisgICAgcGFzcworCisKK2RlZiBydW5DbWQoY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSwgdGltZW91dD1Ob25lLCBhc3NlcnRfZXJyb3I9VHJ1ZSwgKipvcHRpb25zKToKKyAgICByZXN1bHQgPSBSZXN1bHQoKQorCisgICAgY21kID0gQ29tbWFuZChjb21tYW5kLCB0aW1lb3V0PXRpbWVvdXQsICoqb3B0aW9ucykKKyAgICBjbWQucnVuKCkKKworICAgIHJlc3VsdC5jb21tYW5kID0gY29tbWFuZAorICAgIHJlc3VsdC5zdGF0dXMgPSBjbWQuc3RhdHVzCisgICAgcmVzdWx0Lm91dHB1dCA9IGNtZC5vdXRwdXQKKyAgICByZXN1bHQucGlkID0gY21kLnByb2Nlc3MucGlkCisKKyAgICBpZiByZXN1bHQuc3RhdHVzIGFuZCBub3QgaWdub3JlX3N0YXR1czoKKyAgICAgICAgaWYgYXNzZXJ0X2Vycm9yOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZDpcbiVzIiAlIChjb21tYW5kLCByZXN1bHQuc3RhdHVzLCByZXN1bHQub3V0cHV0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIENvbW1hbmRFcnJvcihyZXN1bHQuc3RhdHVzLCBjb21tYW5kLCByZXN1bHQub3V0cHV0KQorCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBiaXRiYWtlKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgcG9zdGNvbmZpZz1Ob25lLCAqKm9wdGlvbnMpOgorCisgICAgaWYgcG9zdGNvbmZpZzoKKyAgICAgICAgcG9zdGNvbmZpZ19maWxlID0gb3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpLCAnb2VxYS1wb3N0LmNvbmYnKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShwb3N0Y29uZmlnX2ZpbGUsIHBvc3Rjb25maWcpCisgICAgICAgIGV4dHJhX2FyZ3MgPSAiLVIgJXMiICUgcG9zdGNvbmZpZ19maWxlCisgICAgZWxzZToKKyAgICAgICAgZXh0cmFfYXJncyA9ICIiCisKKyAgICBpZiBpc2luc3RhbmNlKGNvbW1hbmQsIGJhc2VzdHJpbmcpOgorICAgICAgICBjbWQgPSAiYml0YmFrZSAiICsgZXh0cmFfYXJncyArICIgIiArIGNvbW1hbmQKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSBbICJiaXRiYWtlIiBdICsgW2EgZm9yIGEgaW4gKGNvbW1hbmQgKyBleHRyYV9hcmdzLnNwbGl0KCIgIikpIGlmIGEgbm90IGluIFsiIl1dCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzLCB0aW1lb3V0LCAqKm9wdGlvbnMpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgcG9zdGNvbmZpZzoKKyAgICAgICAgICAgIG9zLnJlbW92ZShwb3N0Y29uZmlnX2ZpbGUpCisKKworZGVmIGdldF9iYl9lbnYodGFyZ2V0PU5vbmUsIHBvc3Rjb25maWc9Tm9uZSk6CisgICAgaWYgdGFyZ2V0OgorICAgICAgICByZXR1cm4gYml0YmFrZSgiLWUgJXMiICUgdGFyZ2V0LCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpLm91dHB1dAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBiaXRiYWtlKCItZSIsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykub3V0cHV0CisKK2RlZiBnZXRfYmJfdmFyKHZhciwgdGFyZ2V0PU5vbmUsIHBvc3Rjb25maWc9Tm9uZSk6CisgICAgdmFsID0gTm9uZQorICAgIGJiZW52ID0gZ2V0X2JiX2Vudih0YXJnZXQsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykKKyAgICBsYXN0bGluZSA9IE5vbmUKKyAgICBmb3IgbGluZSBpbiBiYmVudi5zcGxpdGxpbmVzKCk6CisgICAgICAgIGlmIHJlLnNlYXJjaCgiXihleHBvcnQgKT8lcz0iICUgdmFyLCBsaW5lKToKKyAgICAgICAgICAgIHZhbCA9IGxpbmUuc3BsaXQoJz0nLCAxKVsxXQorICAgICAgICAgICAgdmFsID0gdmFsLnN0cmlwKCdcIicpCisgICAgICAgICAgICBicmVhaworICAgICAgICBlbGlmIHJlLm1hdGNoKCJ1bnNldCAlcyQiICUgdmFyLCBsaW5lKToKKyAgICAgICAgICAgICMgSGFuZGxlIFt1bmV4cG9ydF0gdmFyaWFibGVzCisgICAgICAgICAgICBpZiBsYXN0bGluZS5zdGFydHN3aXRoKCcjICAgIicpOgorICAgICAgICAgICAgICAgIHZhbCA9IGxhc3RsaW5lLnNwbGl0KCdcIicpWzFdCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbGFzdGxpbmUgPSBsaW5lCisgICAgcmV0dXJuIHZhbAorCitkZWYgZ2V0X3Rlc3RfbGF5ZXIoKToKKyAgICBsYXllcnMgPSBnZXRfYmJfdmFyKCJCQkxBWUVSUyIpLnNwbGl0KCkKKyAgICB0ZXN0bGF5ZXIgPSBOb25lCisgICAgZm9yIGwgaW4gbGF5ZXJzOgorICAgICAgICBpZiAnficgaW4gbDoKKyAgICAgICAgICAgIGwgPSBvcy5wYXRoLmV4cGFuZHVzZXIobCkKKyAgICAgICAgaWYgIi9tZXRhLXNlbGZ0ZXN0IiBpbiBsIGFuZCBvcy5wYXRoLmlzZGlyKGwpOgorICAgICAgICAgICAgdGVzdGxheWVyID0gbAorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdGVzdGxheWVyCisKK2RlZiBjcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5PTk5OSwgcmVjaXBlcGF0aHNwZWM9J3JlY2lwZXMtKi8qJyk6CisgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnKSkKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IlxuJykKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vJXMvKi5iYiBcXCcgJSByZWNpcGVwYXRoc3BlYykKKyAgICAgICAgZi53cml0ZSgnICAgICAgICAgICAgJHtMQVlFUkRJUn0vJXMvKi5iYmFwcGVuZCJcbicgJSByZWNpcGVwYXRoc3BlYykKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX0NPTExFQ1RJT05TICs9ICIlcyJcbicgJSB0ZW1wbGF5ZXJuYW1lKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl8lcyA9ICJeJHtMQVlFUkRJUn0vIlxuJyAlIHRlbXBsYXllcm5hbWUpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QUklPUklUWV8lcyA9ICIlZCJcbicgJSAodGVtcGxheWVybmFtZSwgcHJpb3JpdHkpKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfJXMgPSAiMSJcbicgJSB0ZW1wbGF5ZXJuYW1lKQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgcnVucWVtdShwbiwgdGVzdCk6CisKKyAgICBpbXBvcnQgYmIudGluZm9pbAorICAgIGltcG9ydCBiYi5idWlsZAorCisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKEZhbHNlKQorICAgIHRyeToKKyAgICAgICAgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOSU5HKQorICAgICAgICBpbXBvcnQgb2VxYS50YXJnZXRjb250cm9sCisgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCJURVNUX0xPR19ESVIiLCAiJHtXT1JLRElSfS90ZXN0aW1hZ2UiKQorICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcigiVEVTVF9RRU1VQk9PVF9USU1FT1VUIiwgIjEwMDAiKQorICAgICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICAgICAgcmVjaXBlZmlsZSA9IG9lLnJlY2lwZXV0aWxzLnBuX3RvX3JlY2lwZSh0aW5mb2lsLmNvb2tlciwgcG4pCisgICAgICAgIHJlY2lwZWRhdGEgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgW10sIHRpbmZvaWwuY29uZmlnX2RhdGEpCisKKyAgICAgICAgIyBUaGUgUWVtdVJ1bm5lciBsb2cgaXMgc2F2ZWQgb3V0LCBidXQgd2UgbmVlZCB0byBlbnN1cmUgaXQgaXMgYXQgdGhlIHJpZ2h0CisgICAgICAgICMgbG9nIGxldmVsIChhbmQgdGhlbiBlbnN1cmUgdGhhdCBzaW5jZSBpdCdzIGEgY2hpbGQgb2YgdGhlIEJpdEJha2UgbG9nZ2VyLAorICAgICAgICAjIHdlIGRpc2FibGUgcHJvcGFnYXRpb24gc28gd2UgZG9uJ3QgdGhlbiBzZWUgdGhlIGxvZyBldmVudHMgb24gdGhlIGNvbnNvbGUpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLlFlbXVSdW5uZXInKQorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgbG9nZ2VyLnByb3BhZ2F0ZSA9IEZhbHNlCisgICAgICAgIGxvZ2RpciA9IHJlY2lwZWRhdGEuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKQorCisgICAgICAgIHFlbXUgPSBvZXFhLnRhcmdldGNvbnRyb2wuUWVtdVRhcmdldChyZWNpcGVkYXRhKQorICAgIGZpbmFsbHk6CisgICAgICAgICMgV2UgbmVlZCB0byBzaHV0IGRvd24gdGluZm9pbCBlYXJseSBoZXJlIGluIGNhc2Ugd2UgYWN0dWFsbHkgd2FudAorICAgICAgICAjIHRvIHJ1biB0aW5mb2lsLXVzaW5nIHV0aWxpdGllcyB3aXRoIHRoZSBydW5uaW5nIFFFTVUgaW5zdGFuY2UuCisgICAgICAgICMgTHVja2lseSBRZW11VGFyZ2V0IGRvZXNuJ3QgbmVlZCBpdCBhZnRlciB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQorCisgICAgdHJ5OgorICAgICAgICBxZW11LmRlcGxveSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHFlbXUuc3RhcnQoKQorICAgICAgICBleGNlcHQgYmIuYnVpbGQuRnVuY0ZhaWxlZDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHN0YXJ0IFFFTVUgLSBzZWUgdGhlIGxvZ3MgaW4gJXMnICUgbG9nZGlyKQorCisgICAgICAgIHlpZWxkIHFlbXUKKworICAgIGZpbmFsbHk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHFlbXUuc3RvcCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJhODhmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS91dGlscy9kZWNvcmF0b3JzLnB5CkBAIC0wLDAgKzEsMjIyIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBTb21lIGN1c3RvbSBkZWNvcmF0b3JzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdW5pdHRlc3RzCisjIE1vc3QgdXNlZnVsIGlzIHNraXBVbmxlc3NQYXNzZWQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yCisjIGNyZWF0aW5nIGRlcGVuZGVjaWVzIGJldHdlZW4gdHdvIHRlc3QgbWV0aG9kcy4KKworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgc2lnbmFsCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKKworI2dldCB0aGUgInJlc3VsdCIgb2JqZWN0IGZyb20gb25lIG9mIHRoZSB1cHBlciBmcmFtZXMgcHJvdmlkZWQgdGhhdCBvbmUgb2YgdGhlc2UgdXBwZXIgZnJhbWVzIGlzIGEgdW5pdHRlc3QuY2FzZSBmcmFtZQorY2xhc3MgZ2V0UmVzdWx0cyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgI2R5bmFtaWNhbGx5IGRldGVybWluZSB0aGUgdW5pdHRlc3QuY2FzZSBmcmFtZSBhbmQgdXNlIGl0IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgdGVzdCBtZXRob2QKKyAgICAgICAgaWRlbnQgPSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudAorICAgICAgICB1cHBlcmYgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKClbaWRlbnRdCisgICAgICAgIHdoaWxlICh1cHBlcmYuZl9nbG9iYWxzWydfX25hbWVfXyddICE9ICd1bml0dGVzdC5jYXNlJyk6CisgICAgICAgICAgICB1cHBlcmYgPSB1cHBlcmYuZl9iYWNrCisKKyAgICAgICAgZGVmIGhhbmRsZUxpc3QoaXRlbXMpOgorICAgICAgICAgICAgcmV0ID0gW10KKyAgICAgICAgICAgICMgaXRlbXMgaXMgYSBsaXN0IG9mIHR1cGxlcywgKHRlc3QsIGZhaWx1cmUpIG9yIChfRXJyb3JIYW5kbGVyKCksIEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgZm9yIGkgaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgcyA9IGlbMF0uaWQoKQorICAgICAgICAgICAgICAgICNIYW5kbGUgdGhlIF9FcnJvckhvbGRlciBvYmplY3RzIGZyb20gc2tpcE1vZHVsZSBmYWlsdXJlcworICAgICAgICAgICAgICAgIGlmICJzZXRVcE1vZHVsZSAoIiBpbiBzOgorICAgICAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHMucmVwbGFjZSgic2V0VXBNb2R1bGUgKCIsICIiKS5yZXBsYWNlKCIpIiwiIikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0LmFwcGVuZChzKQorICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBzZWxmLmZhaWxsaXN0ID0gaGFuZGxlTGlzdCh1cHBlcmYuZl9sb2NhbHNbJ3Jlc3VsdCddLmZhaWx1cmVzKQorICAgICAgICBzZWxmLmVycm9ybGlzdCA9IGhhbmRsZUxpc3QodXBwZXJmLmZfbG9jYWxzWydyZXN1bHQnXS5lcnJvcnMpCisgICAgICAgIHNlbGYuc2tpcGxpc3QgPSBoYW5kbGVMaXN0KHVwcGVyZi5mX2xvY2Fsc1sncmVzdWx0J10uc2tpcHBlZCkKKworICAgIGRlZiBnZXRGYWlsTGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmFpbGxpc3QKKworICAgIGRlZiBnZXRFcnJvckxpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVycm9ybGlzdAorCisgICAgZGVmIGdldFNraXBMaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5za2lwbGlzdAorCitjbGFzcyBza2lwSWZGYWlsdXJlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZix0ZXN0Y2FzZSk6CisgICAgICAgIHNlbGYudGVzdGNhc2UgPSB0ZXN0Y2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsZik6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCisgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIChyZXMuZ2V0RmFpbExpc3QoKSBvciByZXMuZ2V0RXJyb3JMaXN0KCkpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBkZXBlbmRlbmN5IG5vdCBtZXQ6ICVzIiAlIHNlbGYudGVzdGNhc2UpCisgICAgICAgICAgICByZXR1cm4gZigqYXJncykKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZi5fX25hbWVfXworICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisKK2NsYXNzIHNraXBJZlNraXBwZWQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZixmKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncyk6CisgICAgICAgICAgICByZXMgPSBnZXRSZXN1bHRzKCkKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdGNhc2UgaW4gcmVzLmdldFNraXBMaXN0KCk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGRlcGVuZGVuY3kgbm90IG1ldDogJXMiICUgc2VsZi50ZXN0Y2FzZSkKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmLl9fbmFtZV9fCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3Mgc2tpcFVubGVzc1Bhc3NlZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdGVzdGNhc2UpOgorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJlcyA9IGdldFJlc3VsdHMoKQorICAgICAgICAgICAgaWYgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0U2tpcExpc3QoKSBvciBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UgaW4gcmVzLmdldEZhaWxMaXN0KCkgb3IgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRFcnJvckxpc3QoKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiAlcyIgJSBzZWxmLnRlc3RjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi5fX25hbWVfXyA9IGYuX19uYW1lX18KKyAgICAgICAgd3JhcHBlZF9mLl9kZXBlbmRzX29uID0gc2VsZi50ZXN0Y2FzZQorICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisKK2NsYXNzIHRlc3RjYXNlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKToKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBmdW5jKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncykKKyAgICAgICAgd3JhcHBlZF9mLnRlc3RfY2FzZSA9IHNlbGYudGVzdF9jYXNlCisgICAgICAgIHdyYXBwZWRfZi5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyBOb1BhcnNpbmdGaWx0ZXIobG9nZ2luZy5GaWx0ZXIpOgorICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcmV0dXJuIHJlY29yZC5sZXZlbG5vID09IDEwMAorCitkZWYgTG9nUmVzdWx0cyhvcmlnaW5hbF9jbGFzcyk6CisgICAgb3JpZ19tZXRob2QgPSBvcmlnaW5hbF9jbGFzcy5ydW4KKworICAgICNyZXdyaXRlIHRoZSBydW4gbWV0aG9kIG9mIHVuaXR0ZXN0LlRlc3RDYXNlIHRvIGFkZCB0ZXN0Y2FzZSBsb2dnaW5nCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQsICphcmdzLCAqKmt3cyk6CisgICAgICAgIG9yaWdfbWV0aG9kKHNlbGYsIHJlc3VsdCwgKmFyZ3MsICoqa3dzKQorICAgICAgICBwYXNzZWQgPSBUcnVlCisgICAgICAgIHRlc3RNZXRob2QgPSBnZXRhdHRyKHNlbGYsIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQorICAgICAgICAjaWYgdGVzdCBjYXNlIGlzIGRlY29yYXRlZCB0aGVuIHVzZSBpdCdzIG51bWJlciwgZWxzZSB1c2UgaXQncyBuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfY2FzZSA9IHRlc3RNZXRob2QudGVzdF9jYXNlCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHRlc3RfY2FzZSA9IHNlbGYuX3Rlc3RNZXRob2ROYW1lCisKKyAgICAgICAgY2xhc3NfbmFtZSA9IHN0cih0ZXN0TWV0aG9kLmltX2NsYXNzKS5zcGxpdCgiJyIpWzFdCisKKyAgICAgICAgI2NyZWF0ZSBjdXN0b20gbG9nZ2luZyBsZXZlbCBmb3IgZmlsdGVyaW5nLgorICAgICAgICBjdXN0b21fbG9nX2xldmVsID0gMTAwCisgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKGN1c3RvbV9sb2dfbGV2ZWwsICdSRVNVTFRTJykKKyAgICAgICAgY2FsbGVyID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKworICAgICAgICBkZWYgcmVzdWx0cyhzZWxmLCBtZXNzYWdlLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgaWYgc2VsZi5pc0VuYWJsZWRGb3IoY3VzdG9tX2xvZ19sZXZlbCk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2coY3VzdG9tX2xvZ19sZXZlbCwgbWVzc2FnZSwgKmFyZ3MsICoqa3dzKQorICAgICAgICBsb2dnaW5nLkxvZ2dlci5yZXN1bHRzID0gcmVzdWx0cworCisgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9b3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCdyZXN1bHRzLScrY2FsbGVyKycubG9nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW1vZGU9J3cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJUg6JU06JVMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPWN1c3RvbV9sb2dfbGV2ZWwpCisgICAgICAgIGZvciBoYW5kbGVyIGluIGxvZ2dpbmcucm9vdC5oYW5kbGVyczoKKyAgICAgICAgICAgIGhhbmRsZXIuYWRkRmlsdGVyKE5vUGFyc2luZ0ZpbHRlcigpKQorICAgICAgICBsb2NhbF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihjYWxsZXIpCisKKyAgICAgICAgI2NoZWNrIHN0YXR1cyBvZiB0ZXN0cyBhbmQgcmVjb3JkIGl0CisKKyAgICAgICAgZm9yIChuYW1lLCBtc2cpIGluIHJlc3VsdC5lcnJvcnM6CisgICAgICAgICAgICBpZiAoc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gc3RyKG5hbWUpLnNwbGl0KCcgJylbMF0pIGFuZCAoY2xhc3NfbmFtZSBpbiBzdHIobmFtZSkuc3BsaXQoJyAnKVsxXSk6CisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogRVJST1IiKQorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6XG4iK21zZykKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQorICAgICAgICBmb3IgKG5hbWUsIG1zZykgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IHN0cihuYW1lKS5zcGxpdCgnICcpWzBdKSBhbmQgKGNsYXNzX25hbWUgaW4gc3RyKG5hbWUpLnNwbGl0KCcgJylbMV0pOgorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IEZBSUxFRCIpCisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjpcbiIrbXNnKQorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgIGZvciAobmFtZSwgbXNnKSBpbiByZXN1bHQuc2tpcHBlZDoKKyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBzdHIobmFtZSkuc3BsaXQoJyAnKVswXSkgYW5kIChjbGFzc19uYW1lIGluIHN0cihuYW1lKS5zcGxpdCgnICcpWzFdKToKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBTS0lQUEVEIikKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQorICAgICAgICBpZiBwYXNzZWQ6CisgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBQQVNTRUQiKQorCisgICAgb3JpZ2luYWxfY2xhc3MucnVuID0gcnVuCisgICAgcmV0dXJuIG9yaWdpbmFsX2NsYXNzCisKK2NsYXNzIFRpbWVPdXQoQmFzZUV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgdGltZW91dChzZWNvbmRzKToKKyAgICBkZWYgZGVjb3JhdG9yKGZuKToKKyAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdhbGFybScpOgorICAgICAgICAgICAgQHdyYXBzKGZuKQorICAgICAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncywgKiprdyk6CisgICAgICAgICAgICAgICAgY3VycmVudF9mcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorICAgICAgICAgICAgICAgIGRlZiByYWlzZVRpbWVPdXQoc2lnbmFsLCBmcmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZyYW1lIGlzIG5vdCBjdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZU91dCgnJXMgc2Vjb25kcycgJSBzZWNvbmRzKQorICAgICAgICAgICAgICAgIHByZXZfaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHJhaXNlVGltZU91dCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybShzZWNvbmRzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oKmFyZ3MsICoqa3cpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHByZXZfaGFuZGxlcikKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBmbgorICAgIHJldHVybiBkZWNvcmF0b3IKKworX190YWdfcHJlZml4ID0gInRhZ19fIgorZGVmIHRhZygqYXJncywgKiprd2FyZ3MpOgorICAgICIiIkRlY29yYXRvciB0aGF0IGFkZHMgYXR0cmlidXRlcyB0byBjbGFzc2VzIG9yIGZ1bmN0aW9ucworICAgIGZvciB1c2Ugd2l0aCB0aGUgQXR0cmlidXRlICgtYSkgcGx1Z2luLgorICAgICIiIgorICAgIGRlZiB3cmFwX29iKG9iKToKKyAgICAgICAgZm9yIG5hbWUgaW4gYXJnczoKKyAgICAgICAgICAgIHNldGF0dHIob2IsIF9fdGFnX3ByZWZpeCArIG5hbWUsIFRydWUpCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKG9iLCBfX3RhZ19wcmVmaXggKyBuYW1lLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG9iCisgICAgcmV0dXJuIHdyYXBfb2IKKworZGVmIGdldHRhZyhvYmosIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICBrZXkgPSBfX3RhZ19wcmVmaXggKyBrZXkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIob2JqLCBrZXksIGRlZmF1bHQpCisgICAgdGNfbWV0aG9kID0gZ2V0YXR0cihvYmosIG9iai5fdGVzdE1ldGhvZE5hbWUpCisgICAgcmV0ID0gZ2V0YXR0cih0Y19tZXRob2QsIGtleSwgZ2V0YXR0cihvYmosIGtleSwgZGVmYXVsdCkpCisgICAgcmV0dXJuIHJldAorCitkZWYgZ2V0QWxsVGFncyhvYmopOgorICAgIGRlZiBfX2dldHRhZ3Mobyk6CisgICAgICAgIHIgPSB7a1tsZW4oX190YWdfcHJlZml4KTpdOmdldGF0dHIobyxrKSBmb3IgayBpbiBkaXIobykgaWYgay5zdGFydHN3aXRoKF9fdGFnX3ByZWZpeCl9CisgICAgICAgIHJldHVybiByCisgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHJldHVybiBfX2dldHRhZ3Mob2JqKQorICAgIHRjX21ldGhvZCA9IGdldGF0dHIob2JqLCBvYmouX3Rlc3RNZXRob2ROYW1lKQorICAgIHJldCA9IF9fZ2V0dGFncyhvYmopCisgICAgcmV0LnVwZGF0ZShfX2dldHRhZ3ModGNfbWV0aG9kKSkKKyAgICByZXR1cm4gcmV0CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlODcxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvZHVtcC5weQpAQCAtMCwwICsxLDg3IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBlcnJubworaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgaXRlcnRvb2xzCitmcm9tIGNvbW1hbmRzIGltcG9ydCBydW5DbWQKKworZGVmIGdldF9ob3N0X2R1bXBlcihkKToKKyAgICBjbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX2hvc3QiLCBUcnVlKQorICAgIHBhcmVudF9kaXIgPSBkLmdldFZhcigiVEVTVElNQUdFX0RVTVBfRElSIiwgVHJ1ZSkKKyAgICByZXR1cm4gSG9zdER1bXBlcihjbWRzLCBwYXJlbnRfZGlyKQorCisKK2NsYXNzIEJhc2VEdW1wZXIob2JqZWN0KToKKyAgICAiIiIgQmFzZSBjbGFzcyB0byBkdW1wIGNvbW1hbmRzIGZyb20gaG9zdC90YXJnZXQgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kcywgcGFyZW50X2Rpcik6CisgICAgICAgIHNlbGYuY21kcyA9IFtdCisgICAgICAgIHNlbGYucGFyZW50X2RpciA9IHBhcmVudF9kaXIKKyAgICAgICAgaWYgbm90IGNtZHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZm9yIGNtZCBpbiBjbWRzLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgY21kID0gY21kLmxzdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgY21kIG9yIGNtZFswXSA9PSAnIyc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuY21kcy5hcHBlbmQoY21kKQorCisgICAgZGVmIGNyZWF0ZV9kaXIoc2VsZiwgZGlyX3N1ZmZpeCk6CisgICAgICAgIGR1bXBfc3ViZGlyID0gKCIlc18lcyIgJSAoCisgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZJW0lZCVIJU0nKSwKKyAgICAgICAgICAgICAgICBkaXJfc3VmZml4KSkKKyAgICAgICAgZHVtcF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJlbnRfZGlyLCBkdW1wX3N1YmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZHVtcF9kaXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIGVyci5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisgICAgICAgIHNlbGYuZHVtcF9kaXIgPSBkdW1wX2RpcgorCisgICAgZGVmIF93cml0ZV9kdW1wKHNlbGYsIGNvbW1hbmQsIG91dHB1dCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgSG9zdER1bXBlcik6CisgICAgICAgICAgICBwcmVmaXggPSAiaG9zdCIKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYsIFRhcmdldER1bXBlcik6CisgICAgICAgICAgICBwcmVmaXggPSAidGFyZ2V0IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gInVua25vd24iCisgICAgICAgIGZvciBpIGluIGl0ZXJ0b29scy5jb3VudCgpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSAiJXNfJTAyZF8lcyIgJSAocHJlZml4LCBpLCBjb21tYW5kKQorICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kdW1wX2RpciwgZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZnVsbG5hbWUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHdpdGggb3BlbihmdWxsbmFtZSwgJ3cnKSBhcyBkdW1wX2ZpbGU6CisgICAgICAgICAgICBkdW1wX2ZpbGUud3JpdGUob3V0cHV0KQorCisKK2NsYXNzIEhvc3REdW1wZXIoQmFzZUR1bXBlcik6CisgICAgIiIiIENsYXNzIHRvIGdldCBkdW1wcyBmcm9tIHRoZSBob3N0IHJ1bm5pbmcgdGhlIHRlc3RzICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIpOgorICAgICAgICBzdXBlcihIb3N0RHVtcGVyLCBzZWxmKS5fX2luaXRfXyhjbWRzLCBwYXJlbnRfZGlyKQorCisgICAgZGVmIGR1bXBfaG9zdChzZWxmLCBkdW1wX2Rpcj0iIik6CisgICAgICAgIGlmIGR1bXBfZGlyOgorICAgICAgICAgICAgc2VsZi5kdW1wX2RpciA9IGR1bXBfZGlyCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5jbWRzOgorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZHVtcChjbWQuc3BsaXQoKVswXSwgcmVzdWx0Lm91dHB1dCkKKworCitjbGFzcyBUYXJnZXREdW1wZXIoQmFzZUR1bXBlcik6CisgICAgIiIiIENsYXNzIHRvIGdldCBkdW1wcyBmcm9tIHRhcmdldCwgaXQgb25seSB3b3JrcyB3aXRoIFFlbXVSdW5uZXIgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kcywgcGFyZW50X2RpciwgcWVtdXJ1bm5lcik6CisgICAgICAgIHN1cGVyKFRhcmdldER1bXBlciwgc2VsZikuX19pbml0X18oY21kcywgcGFyZW50X2RpcikKKyAgICAgICAgc2VsZi5ydW5uZXIgPSBxZW11cnVubmVyCisKKyAgICBkZWYgZHVtcF90YXJnZXQoc2VsZiwgZHVtcF9kaXI9IiIpOgorICAgICAgICBpZiBkdW1wX2RpcjoKKyAgICAgICAgICAgIHNlbGYuZHVtcF9kaXIgPSBkdW1wX2RpcgorICAgICAgICBmb3IgY21kIGluIHNlbGYuY21kczoKKyAgICAgICAgICAgICMgV2UgY2FuIGNvbnRpbnVlIHdpdGggdGhlIHRlc3RpbmcgaWYgc2VyaWFsIGNvbW1hbmRzIGZhaWwKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi5ydW5uZXIucnVuX3NlcmlhbChjbWQpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfZHVtcChjbWQuc3BsaXQoKVswXSwgb3V0cHV0KQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHByaW50KCJUcmllZCB0byBkdW1wIGluZm8gZnJvbSB0YXJnZXQgYnV0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZXJpYWwgY29uc29sZSBmYWlsZWQiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9mdG9vbHMucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2Z0b29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGViZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS91dGlscy9mdG9vbHMucHkKQEAgLTAsMCArMSwyNyBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKKworZGVmIHdyaXRlX2ZpbGUocGF0aCwgZGF0YSk6CisgICAgd2RhdGEgPSBkYXRhLnJzdHJpcCgpICsgIlxuIgorICAgIHdpdGggb3BlbihwYXRoLCAidyIpIGFzIGY6CisgICAgICAgIGYud3JpdGUod2RhdGEpCisKK2RlZiBhcHBlbmRfZmlsZShwYXRoLCBkYXRhKToKKyAgICB3ZGF0YSA9IGRhdGEucnN0cmlwKCkgKyAiXG4iCisgICAgd2l0aCBvcGVuKHBhdGgsICJhIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUod2RhdGEpCisKK2RlZiByZWFkX2ZpbGUocGF0aCk6CisgICAgZGF0YSA9IE5vbmUKKyAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIHJlbW92ZV9mcm9tX2ZpbGUocGF0aCwgZGF0YSk6CisgICAgbGluZXMgPSByZWFkX2ZpbGUocGF0aCkuc3BsaXRsaW5lcygpCisgICAgcm1kYXRhID0gZGF0YS5zdHJpcCgpLnNwbGl0bGluZXMoKQorICAgIGZvciBsIGluIHJtZGF0YToKKyAgICAgICAgZm9yIGMgaW4gcmFuZ2UoMCwgbGluZXMuY291bnQobCkpOgorICAgICAgICAgICAgaSA9IGxpbmVzLmluZGV4KGwpCisgICAgICAgICAgICBkZWwobGluZXNbaV0pCisgICAgd3JpdGVfZmlsZShwYXRoLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5IGIvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTE4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2h0dHBzZXJ2ZXIucHkKQEAgLTAsMCArMSwzNSBAQAoraW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcworCitjbGFzcyBIVFRQU2VydmVyKFNpbXBsZUhUVFBTZXJ2ZXIuQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisKKyAgICBkZWYgc2VydmVyX3N0YXJ0KHNlbGYsIHJvb3RfZGlyKToKKyAgICAgICAgaW1wb3J0IHNpZ25hbAorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0RGTCkKKyAgICAgICAgb3MuY2hkaXIocm9vdF9kaXIpCisgICAgICAgIHNlbGYuc2VydmVfZm9yZXZlcigpCisKK2NsYXNzIEhUVFBSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0X3N0ciwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKK2NsYXNzIEhUVFBTZXJ2aWNlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdF9kaXIsIGhvc3Q9JycpOgorICAgICAgICBzZWxmLnJvb3RfZGlyID0gcm9vdF9kaXIKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSAwCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gSFRUUFNlcnZlcigoc2VsZi5ob3N0LCBzZWxmLnBvcnQpLCBIVFRQUmVxdWVzdEhhbmRsZXIpCisgICAgICAgIGlmIHNlbGYucG9ydCA9PSAwOgorICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2ZXIuc2VydmVyX3BvcnQKKyAgICAgICAgc2VsZi5wcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuc2VydmVyLnNlcnZlcl9zdGFydCwgYXJncz1bc2VsZi5yb290X2Rpcl0pCisgICAgICAgIHNlbGYucHJvY2Vzcy5zdGFydCgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0ZSgpCisgICAgICAgIHNlbGYucHJvY2Vzcy5qb2luKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5IGIvbWV0YS9saWIvb2VxYS91dGlscy9sb2dwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiNTAzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5CkBAIC0wLDAgKzEsMTI1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBmdG9vbHMKKworCisjIEEgcGFyc2VyIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgd2VhdGhlciBhIGxpbmUgaXMgYSB0ZXN0IHJlc3VsdCBvciBhIHNlY3Rpb24gc3RhdGVtZW50LgorY2xhc3MgTHBhcnNlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfMF9wYXNzX3JlZ2V4LCB0ZXN0XzBfZmFpbF9yZWdleCwgc2VjdGlvbl8wX2JlZ2luX3JlZ2V4PU5vbmUsIHNlY3Rpb25fMF9lbmRfcmVnZXg9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAjIEluaXRpYWxpemUgdGhlIGFyZ3VtZW50cyBkaWN0aW9uYXJ5CisgICAgICAgIGlmIGt3YXJnczoKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGt3YXJncworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcmdzID0ge30KKworICAgICAgICAjIEFkZCB0aGUgZGVmYXVsdCBhcmdzIHRvIHRoZSBkaWN0aW9uYXJ5CisgICAgICAgIHNlbGYuYXJnc1sndGVzdF8wX3Bhc3NfcmVnZXgnXSA9IHRlc3RfMF9wYXNzX3JlZ2V4CisgICAgICAgIHNlbGYuYXJnc1sndGVzdF8wX2ZhaWxfcmVnZXgnXSA9IHRlc3RfMF9mYWlsX3JlZ2V4CisgICAgICAgIGlmIHNlY3Rpb25fMF9iZWdpbl9yZWdleDoKKyAgICAgICAgICAgIHNlbGYuYXJnc1snc2VjdGlvbl8wX2JlZ2luX3JlZ2V4J10gPSBzZWN0aW9uXzBfYmVnaW5fcmVnZXgKKyAgICAgICAgaWYgc2VjdGlvbl8wX2VuZF9yZWdleDoKKyAgICAgICAgICAgIHNlbGYuYXJnc1snc2VjdGlvbl8wX2VuZF9yZWdleCddID0gc2VjdGlvbl8wX2VuZF9yZWdleAorCisgICAgICAgIHNlbGYudGVzdF9wb3NzaWJsZV9zdGF0dXMgPSBbJ3Bhc3MnLCAnZmFpbCcsICdlcnJvciddCisgICAgICAgIHNlbGYuc2VjdGlvbl9wb3NzaWJsZV9zdGF0dXMgPSBbJ2JlZ2luJywgJ2VuZCddCisKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IEZhbHNlCisKKworICAgICMgSW5pdGlhbGl6ZSB0aGUgcGFyc2VyIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgorICAgIGRlZiBpbml0KHNlbGYpOgorCisgICAgICAgICMgZXh0cmEgYXJndW1lbnRzIGNhbiBiZSBhZGRlZCBieSB0aGUgdXNlciB0byBkZWZpbmUgbmV3IHRlc3QgYW5kIHNlY3Rpb24gY2F0ZWdvcmllcy4gVGhleSBtdXN0IGZvbGxvdyBhIHByZS1kZWZpbmVkIHBhdHRlcm46IDx0eXBlPl88Y2F0ZWdvcnlfbmFtZT5fPHN0YXR1cz5fcmVnZXgKKyAgICAgICAgc2VsZi50ZXN0X2FyZ3VtZW50X3BhdHRlcm4gPSAiXnRlc3RfKC4rPylfKCVzKV9yZWdleCIgJSAnfCcuam9pbihtYXAoc3RyLCBzZWxmLnRlc3RfcG9zc2libGVfc3RhdHVzKSkKKyAgICAgICAgc2VsZi5zZWN0aW9uX2FyZ3VtZW50X3BhdHRlcm4gPSAiXnNlY3Rpb25fKC4rPylfKCVzKV9yZWdleCIgJSAnfCcuam9pbihtYXAoc3RyLCBzZWxmLnNlY3Rpb25fcG9zc2libGVfc3RhdHVzKSkKKworICAgICAgICAjIEluaXRpYWxpemUgdGhlIHRlc3QgYW5kIHNlY3Rpb24gcmVnZXggZGljdGlvbmFyaWVzCisgICAgICAgIHNlbGYudGVzdF9yZWdleCA9IHt9CisgICAgICAgIHNlbGYuc2VjdGlvbl9yZWdleCA9e30KKworICAgICAgICBmb3IgYXJnLCB2YWx1ZSBpbiBzZWxmLmFyZ3MuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RoZSB2YWx1ZSBvZiBwcm92aWRlZCBhcmd1bWVudCAlcyBpcyAlcy4gU2hvdWxkIGhhdmUgYSB2YWxpZCB2YWx1ZS4nICUgKGtleSwgdmFsdWUpKQorICAgICAgICAgICAgaXNfdGVzdCA9ICByZS5zZWFyY2goc2VsZi50ZXN0X2FyZ3VtZW50X3BhdHRlcm4sIGFyZykKKyAgICAgICAgICAgIGlzX3NlY3Rpb24gPSByZS5zZWFyY2goc2VsZi5zZWN0aW9uX2FyZ3VtZW50X3BhdHRlcm4sIGFyZykKKyAgICAgICAgICAgIGlmIGlzX3Rlc3Q6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzX3Rlc3QuZ3JvdXAoMSkgaW4gc2VsZi50ZXN0X3JlZ2V4OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnZXhbaXNfdGVzdC5ncm91cCgxKV0gPSB7fQorICAgICAgICAgICAgICAgIHNlbGYudGVzdF9yZWdleFtpc190ZXN0Lmdyb3VwKDEpXVtpc190ZXN0Lmdyb3VwKDIpXSA9IHJlLmNvbXBpbGUodmFsdWUpCisgICAgICAgICAgICBlbGlmIGlzX3NlY3Rpb246CisgICAgICAgICAgICAgICAgaWYgbm90IGlzX3NlY3Rpb24uZ3JvdXAoMSkgaW4gc2VsZi5zZWN0aW9uX3JlZ2V4OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXhbaXNfc2VjdGlvbi5ncm91cCgxKV0gPSB7fQorICAgICAgICAgICAgICAgIHNlbGYuc2VjdGlvbl9yZWdleFtpc19zZWN0aW9uLmdyb3VwKDEpXVtpc19zZWN0aW9uLmdyb3VwKDIpXSA9IHJlLmNvbXBpbGUodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVE9ETzogTWFrZSB0aGVzZSBjYWxsIGEgdHJhY2ViYWNrIGluc3RlYWQgb2YgYSBzaW1wbGUgZXhjZXB0aW9uLi4KKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwcm92aWRlZCBhcmd1bWVudCBuYW1lIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IHZhbGlkIHR5cGUuIFBsZWFzZSBnaXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR5cGVzOlxuZm9yIHRlc3RzOiAlc1xuZm9yIHNlY3Rpb25zOiAlcyIgJSAoc2VsZi50ZXN0X2FyZ3VtZW50X3BhdHRlcm4sIHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuKSkKKworICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gVHJ1ZQorCisgICAgIyBQYXJzZSBhIGxpbmUgYW5kIHJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHR5cGUgb2YgcmVzdWx0ICh0ZXN0L3NlY3Rpb24pIGFuZCBpdHMgY2F0ZWdvcnksIHN0YXR1cyBhbmQgbmFtZQorICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhlIHBhcnNlciBpcyBub3QgaW5pdGlhbGl6ZWQuLiIpCisKKyAgICAgICAgZm9yIHRlc3RfY2F0ZWdvcnksIHRlc3Rfc3RhdHVzX2xpc3QgaW4gc2VsZi50ZXN0X3JlZ2V4Lml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgdGVzdF9zdGF0dXMsIHN0YXR1c19yZWdleCBpbiB0ZXN0X3N0YXR1c19saXN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0gc3RhdHVzX3JlZ2V4LnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIHRlc3RfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsndGVzdCcsIHRlc3RfY2F0ZWdvcnksIHRlc3Rfc3RhdHVzLCB0ZXN0X25hbWUuZ3JvdXAoMSldCisKKyAgICAgICAgZm9yIHNlY3Rpb25fY2F0ZWdvcnksIHNlY3Rpb25fc3RhdHVzX2xpc3QgaW4gc2VsZi5zZWN0aW9uX3JlZ2V4Lml0ZW1zKCk6CisgICAgICAgICAgICBmb3Igc2VjdGlvbl9zdGF0dXMsIHN0YXR1c19yZWdleCBpbiBzZWN0aW9uX3N0YXR1c19saXN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VjdGlvbl9uYW1lID0gc3RhdHVzX3JlZ2V4LnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIHNlY3Rpb25fbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnc2VjdGlvbicsIHNlY3Rpb25fY2F0ZWdvcnksIHNlY3Rpb25fc3RhdHVzLCBzZWN0aW9uX25hbWUuZ3JvdXAoMSldCisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgUmVzdWx0KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucmVzdWx0X2RpY3QgPSB7fQorCisgICAgZGVmIHN0b3JlKHNlbGYsIHNlY3Rpb24sIHRlc3QsIHN0YXR1cyk6CisgICAgICAgIGlmIG5vdCBzZWN0aW9uIGluIHNlbGYucmVzdWx0X2RpY3Q6CisgICAgICAgICAgICBzZWxmLnJlc3VsdF9kaWN0W3NlY3Rpb25dID0gW10KKworICAgICAgICBzZWxmLnJlc3VsdF9kaWN0W3NlY3Rpb25dLmFwcGVuZCgodGVzdCwgc3RhdHVzKSkKKworICAgICMgc29ydCB0ZXN0cyBieSB0aGUgdGVzdCBuYW1lKHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB0dXBsZSksIGZvciBlYWNoIHNlY3Rpb24uIFRoaXMgY2FuIGJlIGhlbHBmdWwgd2hlbiB1c2luZyBnaXQgdG8gZGlmZiBmb3IgY2hhbmdlcyBieSBtYWtpbmcgc3VyZSB0aGV5IGFyZSBhbHdheXMgaW4gdGhlIHNhbWUgb3JkZXIuCisgICAgZGVmIHNvcnRfdGVzdHMoc2VsZik6CisgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucmVzdWx0X2RpY3Q6CisgICAgICAgICAgICBzb3J0ZWRfcmVzdWx0cyA9IHNvcnRlZChzZWxmLnJlc3VsdF9kaWN0W3BhY2thZ2VdLCBrZXk9bGFtYmRhIHR1cDogdHVwWzBdKQorICAgICAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtwYWNrYWdlXSA9IHNvcnRlZF9yZXN1bHRzCisKKyAgICAjIExvZyB0aGUgcmVzdWx0cyBhcyBmaWxlcy4gVGhlIGZpbGUgbmFtZSBpcyB0aGUgc2VjdGlvbiBuYW1lIGFuZCB0aGUgY29udGVudHMgYXJlIHRoZSB0ZXN0cyBpbiB0aGF0IHNlY3Rpb24uCisgICAgZGVmIGxvZ19hc19maWxlcyhzZWxmLCB0YXJnZXRfZGlyLCB0ZXN0X3N0YXR1cyk6CisgICAgICAgIHN0YXR1c19yZWdleCA9IHJlLmNvbXBpbGUoJ3wnLmpvaW4obWFwKHN0ciwgdGVzdF9zdGF0dXMpKSkKKyAgICAgICAgaWYgbm90IHR5cGUodGVzdF9zdGF0dXMpID09IHR5cGUoW10pOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJ0ZXN0X3N0YXR1cyBzaG91bGQgYmUgYSBsaXN0LiBHb3QgIiArIHN0cih0ZXN0X3N0YXR1cykgKyAiIGluc3RlYWQuIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9kaXIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUYXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0OiAlcyIgJSB0YXJnZXRfZGlyKQorCisgICAgICAgIGZvciBzZWN0aW9uLCB0ZXN0X3Jlc3VsdHMgaW4gc2VsZi5yZXN1bHRfZGljdC5pdGVtcygpOgorICAgICAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgICAgIGZvciB4IGluIHRlc3Rfc3RhdHVzOgorICAgICAgICAgICAgICAgIHByZWZpeCArPXgrJy4nCisgICAgICAgICAgICBpZiAoc2VjdGlvbiAhPSAnJyk6CisgICAgICAgICAgICAgICAgcHJlZml4ICs9IHNlY3Rpb24KKyAgICAgICAgICAgIHNlY3Rpb25fZmlsZSA9IG9zLnBhdGguam9pbih0YXJnZXRfZGlyLCBwcmVmaXgpCisgICAgICAgICAgICAjIHB1cmdlIHRoZSBmaWxlIGNvbnRlbnRzIGlmIGl0IGV4aXN0cworICAgICAgICAgICAgb3BlbihzZWN0aW9uX2ZpbGUsICd3JykuY2xvc2UoKQorICAgICAgICAgICAgZm9yIHRlc3RfcmVzdWx0IGluIHRlc3RfcmVzdWx0czoKKyAgICAgICAgICAgICAgICAodGVzdF9uYW1lLCBzdGF0dXMpID0gdGVzdF9yZXN1bHQKKyAgICAgICAgICAgICAgICAjIHdlIGxvZyBvbmx5IHRoZSB0ZXN0cyB3aXRoIHN0YXR1cyBpbiB0aGUgdGVzdF9zdGF0dXMgbGlzdAorICAgICAgICAgICAgICAgIG1hdGNoX3N0YXR1cyA9IHN0YXR1c19yZWdleC5zZWFyY2goc3RhdHVzKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoX3N0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlY3Rpb25fZmlsZSwgc3RhdHVzICsgIjogIiArIHRlc3RfbmFtZSkKKworICAgICMgTm90IHlldCBpbXBsZW1lbnRlZCEKKyAgICBkZWYgbG9nX3RvX2xhdmEoc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzJjOWRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS91dGlscy9xZW11cnVubmVyLnB5CkBAIC0wLDAgKzEsNTE5IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIGZvciBzdGFydGluZyBxZW11IGltYWdlcyB1c2luZyBydW5xZW11LgorIyBJdCdzIHVzZWQgYnkgdGVzdGltYWdlLmJiY2xhc3MuCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBlcnJubworaW1wb3J0IHRocmVhZGluZworZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IEhvc3REdW1wZXIKKworaW1wb3J0IGxvZ2dpbmcKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlFlbXVSdW5uZXIiKQorCitjbGFzcyBRZW11UnVubmVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hY2hpbmUsIHJvb3RmcywgZGlzcGxheSwgdG1wZGlyLCBkZXBsb3lfZGlyX2ltYWdlLCBsb2dmaWxlLCBib290dGltZSwgZHVtcF9kaXIsIGR1bXBfaG9zdF9jbWRzKToKKworICAgICAgICAjIFBvcGVuIG9iamVjdCBmb3IgcnVucWVtdQorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCisgICAgICAgICMgcGlkIG9mIHRoZSBxZW11IHByb2Nlc3MgdGhhdCBydW5xZW11IHdpbGwgc3RhcnQKKyAgICAgICAgc2VsZi5xZW11cGlkID0gTm9uZQorICAgICAgICAjIHRhcmdldCBpcCAtIGZyb20gdGhlIGNvbW1hbmQgbGluZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICAjIGhvc3QgaXAgLSB3aGVyZSBxZW11IGlzIHJ1bm5pbmcKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCisKKyAgICAgICAgc2VsZi5tYWNoaW5lID0gbWFjaGluZQorICAgICAgICBzZWxmLnJvb3RmcyA9IHJvb3RmcworICAgICAgICBzZWxmLmRpc3BsYXkgPSBkaXNwbGF5CisgICAgICAgIHNlbGYudG1wZGlyID0gdG1wZGlyCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSA9IGRlcGxveV9kaXJfaW1hZ2UKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLmJvb3R0aW1lID0gYm9vdHRpbWUKKyAgICAgICAgc2VsZi5sb2dnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKworICAgICAgICBzZWxmLnJ1bnFlbXV0aW1lID0gNjAKKyAgICAgICAgc2VsZi5ob3N0X2R1bXBlciA9IEhvc3REdW1wZXIoZHVtcF9ob3N0X2NtZHMsIGR1bXBfZGlyKQorCisgICAgZGVmIGNyZWF0ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICBzb2NrLmJpbmQoKCIxMjcuMC4wLjEiLDApKQorICAgICAgICAgICAgc29jay5saXN0ZW4oMikKKyAgICAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDcmVhdGVkIGxpc3RlbmluZyBzb2NrZXQgZm9yIHFlbXUgc2VyaWFsIGNvbnNvbGUgb246IDEyNy4wLjAuMTolcyIgJSBwb3J0KQorICAgICAgICAgICAgcmV0dXJuIChzb2NrLCBwb3J0KQorCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCisKKyAgICBkZWYgZ2V0T3V0cHV0KHNlbGYsIG8pOgorICAgICAgICBpbXBvcnQgZmNudGwKKyAgICAgICAgZmwgPSBmY250bC5mY250bChvLCBmY250bC5GX0dFVEZMKQorICAgICAgICBmY250bC5mY250bChvLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHJldHVybiBvcy5yZWFkKG8uZmlsZW5vKCksIDEwMDAwMDApCisKKworICAgIGRlZiBoYW5kbGVTSUdDSExEKHNlbGYsIHNpZ251bSwgZnJhbWUpOgorICAgICAgICBpZiBzZWxmLnJ1bnFlbXUgYW5kIHNlbGYucnVucWVtdS5wb2xsKCk6CisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygncnVucWVtdSBleGl0ZWQgd2l0aCBjb2RlICVkJyAlIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgc2VsZi5nZXRPdXRwdXQoc2VsZi5ydW5xZW11LnN0ZG91dCkpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQorICAgICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKworICAgIGRlZiBzdGFydChzZWxmLCBxZW11cGFyYW1zID0gTm9uZSk6CisgICAgICAgIGlmIHNlbGYuZGlzcGxheToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRJU1BMQVkiXSA9IHNlbGYuZGlzcGxheQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUbyBzdGFydCBxZW11IEkgbmVlZCBhIFggZGVza3RvcCwgcGxlYXNlIHNldCBESVNQTEFZIGNvcnJlY3RseSAoZS5nLiBESVNQTEFZPToxKSIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucm9vdGZzKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiSW52YWxpZCByb290ZnMgJXMiICUgc2VsZi5yb290ZnMpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYudG1wZGlyKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiSW52YWxpZCBUTVBESVIgcGF0aCAlcyIgJSBzZWxmLnRtcGRpcikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiT0VfVE1QRElSIl0gPSBzZWxmLnRtcGRpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiSW52YWxpZCBERVBMT1lfRElSX0lNQUdFIHBhdGggJXMiICUgc2VsZi5kZXBsb3lfZGlyX2ltYWdlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJERVBMT1lfRElSX0lNQUdFIl0gPSBzZWxmLmRlcGxveV9kaXJfaW1hZ2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0aHJlYWRzb2NrLCB0aHJlYWRwb3J0ID0gc2VsZi5jcmVhdGVfc29ja2V0KCkKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCwgc2VsZi5zZXJ2ZXJwb3J0ID0gc2VsZi5jcmVhdGVfc29ja2V0KCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgbXNnOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQ6ICVzIiAlIG1zZ1sxXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgU2V0IHRoaXMgZmxhZyBzbyB0aGF0IFFlbXUgZG9lc24ndCBkbyBhbnkgZ3JhYnMgYXMgU0RMIGdyYWJzIGludGVyYWN0CisgICAgICAgICMgYmFkbHkgd2l0aCBzY3JlZW5zYXZlcnMuCisgICAgICAgIG9zLmVudmlyb25bIlFFTVVfRE9OVF9HUkFCIl0gPSAiMSIKKyAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gJ2Jvb3RwYXJhbXM9ImNvbnNvbGU9dHR5MSBjb25zb2xlPXR0eVMwLDExNTIwMG44IiBxZW11cGFyYW1zPSItc2VyaWFsIHRjcDoxMjcuMC4wLjE6e30iJy5mb3JtYXQodGhyZWFkcG9ydCkKKyAgICAgICAgaWYgcWVtdXBhcmFtczoKKyAgICAgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9IHNlbGYucWVtdXBhcmFtc1s6LTFdICsgIiAiICsgcWVtdXBhcmFtcyArICIgIiArICdcIicKKworICAgICAgICBzZWxmLm9yaWdjaGxkaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0NITEQpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYuaGFuZGxlU0lHQ0hMRCkKKworICAgICAgICBsYXVuY2hfY21kID0gJ3J1bnFlbXUgdGNwc2VyaWFsPSVzICVzICVzICVzJyAlIChzZWxmLnNlcnZlcnBvcnQsIHNlbGYubWFjaGluZSwgc2VsZi5yb290ZnMsIHNlbGYucWVtdXBhcmFtcykKKyAgICAgICAgIyBGSVhNRTogV2UgcGFzcyBpbiBzdGRpbj1zdWJwcm9jZXNzLlBJUEUgaGVyZSB0byB3b3JrIGFyb3VuZCBzdHR5CisgICAgICAgICMgYmxvY2tpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcnVucWVtdSBzY3JpcHQgd2hlbiB1c2luZyB0aGlzIHdpdGhpbgorICAgICAgICAjIG9lLXNlbGZ0ZXN0ICh0aGlzIG1ha2VzIHN0dHkgZXJyb3Igb3V0IGltbWVkaWF0ZWx5KS4gVGhlcmUgb3VnaHQKKyAgICAgICAgIyB0byBiZSBhIHByb3BlciBmaXggYnV0IHRoaXMgd2lsbCBzdWZmaWNlIGZvciBub3cuCisgICAgICAgIHNlbGYucnVucWVtdSA9IHN1YnByb2Nlc3MuUG9wZW4obGF1bmNoX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHByZWV4ZWNfZm49b3Muc2V0cGdycCkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW5xZW11LnN0ZG91dAorCisgICAgICAgICMKKyAgICAgICAgIyBXZSBuZWVkIHRoZSBwcmVleGVjX2ZuIGFib3ZlIHNvIHRoYXQgYWxsIHJ1bnFlbXUgcHJvY2Vzc2VzIGNhbiBlYXNpbHkgYmUga2lsbGVkIAorICAgICAgICAjIChieSBraWxsaW5nIHRoZWlyIHByb2Nlc3MgZ3JvdXApLiBUaGlzIHByZXNlbnRzIGEgcHJvYmxlbSBpZiB0aGlzIGNvbnRyb2xsaW5nCisgICAgICAgICMgcHJvY2VzcyBpdHNlbGYgaXMga2lsbGVkIGhvd2V2ZXIgc2luY2UgdGhvc2UgcHJvY2Vzc2VzIGRvbid0IG5vdGljZSB0aGUgZGVhdGggCisgICAgICAgICMgb2YgdGhlIHBhcmVudCBhbmQgbWVycmlseSBjb250aW51ZSBvbi4KKyAgICAgICAgIworICAgICAgICAjIFJhdGhlciB0aGFuIGhhY2sgcnVucWVtdSB0byBkZWFsIHdpdGggdGhpcywgd2UgYWRkIHNvbWV0aGluZyBoZXJlIGluc3RlYWQuIAorICAgICAgICAjIEJhc2ljYWxseSB3ZSBmb3JrIG9mZiBhbm90aGVyIHByb2Nlc3Mgd2hpY2ggaG9sZHMgYW4gb3BlbiBwaXBlIHRvIHRoZSBwYXJlbnQKKyAgICAgICAgIyBhbmQgYWxzbyBpcyBzZXRwZ3JwLiBJZi93aGVuIHRoZSBwaXBlIHNlZXMgRU9GIGZyb20gdGhlIHBhcmVudCBkaWVpbmcsIGl0IGtpbGxzCisgICAgICAgICMgdGhlIHByb2Nlc3MgZ3JvdXAuIFRoaXMgaXMgbGlrZSBwY3RybCdzIFBERUFUSFNJRyBidXQgZm9yIGEgcHJvY2VzcyBncm91cAorICAgICAgICAjIHJhdGhlciB0aGFuIGEgc2luZ2xlIHByb2Nlc3MuCisgICAgICAgICMKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLm1vbml0b3JwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgc2VsZi5tb25pdG9ycGlkOgorICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgIHNlbGYubW9uaXRvcnBpcGUgPSBvcy5mZG9wZW4odywgInciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjaGlsZCBwcm9jZXNzCisgICAgICAgICAgICBvcy5zZXRwZ3JwKCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICByID0gb3MuZmRvcGVuKHIpCisgICAgICAgICAgICB4ID0gci5yZWFkKCkKKyAgICAgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHNlbGYucnVucWVtdS5waWQpLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIHN5cy5leGl0KDApCisKKyAgICAgICAgbG9nZ2VyLmluZm8oInJ1bnFlbXUgc3RhcnRlZCwgcGlkIGlzICVzIiAlIHNlbGYucnVucWVtdS5waWQpCisgICAgICAgIGxvZ2dlci5pbmZvKCJ3YWl0aW5nIGF0IG1vc3QgJXMgc2Vjb25kcyBmb3IgcWVtdSBwaWQiICUgc2VsZi5ydW5xZW11dGltZSkKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5ydW5xZW11dGltZQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc19hbGl2ZSgpIGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlOgorICAgICAgICAgICAgICAgICAgICAjIE5vIHBvaW50IHdhaXRpbmcgYW55IGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygncnVucWVtdSBleGl0ZWQgd2l0aCBjb2RlICVkJyAlIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJxZW11IHN0YXJ0ZWQgLSBxZW11IHByb2NjZXMgcGlkIGlzICVzIiAlIHNlbGYucWVtdXBpZCkKKyAgICAgICAgICAgIGNtZGxpbmUgPSAnJworICAgICAgICAgICAgd2l0aCBvcGVuKCcvcHJvYy8lcy9jbWRsaW5lJyAlIHNlbGYucWVtdXBpZCkgYXMgcDoKKyAgICAgICAgICAgICAgICBjbWRsaW5lID0gcC5yZWFkKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpcHMgPSByZS5maW5kYWxsKCIoKD86WzAtOV17MSwzfVwuKXszfVswLTldezEsM30pIiwgY21kbGluZS5zcGxpdCgiaXA9IilbMV0pCisgICAgICAgICAgICAgICAgaWYgbm90IGlwcyBvciBsZW4oaXBzKSAhPSAzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pcCA9IGlwc1swXQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGlwc1sxXQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3IsIFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkbid0IGdldCBpcCBmcm9tIHFlbXUgcHJvY2VzcyBhcmd1bWVudHMhIEhlcmUgaXMgdGhlIHFlbXUgY29tbWFuZCBsaW5lIHVzZWQ6XG4lc1xuYW5kIG91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSAoY21kbGluZSwgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oInFlbXUgY21kbGluZSB1c2VkOlxue30iLmZvcm1hdChjbWRsaW5lKSkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXJnZXQgSVA6ICVzIiAlIHNlbGYuaXApCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKKworICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0aW5nIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgICAgIHNlbGYudGhyZWFkID0gTG9nZ2luZ1RocmVhZChzZWxmLmxvZywgdGhyZWFkc29jaywgbG9nZ2VyKQorICAgICAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYudGhyZWFkLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQud2FpdChzZWxmLmJvb3R0aW1lKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkRpZG4ndCByZWNlaXZlIGEgY29uc29sZSBjb25uZWN0aW9uIGZyb20gcWVtdS4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVyZSBpcyB0aGUgcWVtdSBjb21tYW5kIGxpbmUgdXNlZDpcbiVzXG5hbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIChjbWRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldE91dHB1dChvdXRwdXQpKSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3BfdGhyZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldhaXRpbmcgYXQgbW9zdCAlZCBzZWNvbmRzIGZvciBsb2dpbiBiYW5uZXIiICUgc2VsZi5ib290dGltZSkKKyAgICAgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYuYm9vdHRpbWUKKyAgICAgICAgICAgIHNvY2tsaXN0ID0gW3NlbGYuc2VydmVyX3NvY2tldF0KKyAgICAgICAgICAgIHJlYWNoZWRsb2dpbiA9IEZhbHNlCisgICAgICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgICAgICBxZW11c29jayA9IE5vbmUKKyAgICAgICAgICAgIGJvb3Rsb2cgPSAnJworICAgICAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCBlbmR0aW1lIGFuZCBub3Qgc3RvcHJlYWQ6CisgICAgICAgICAgICAgICAgc3JlYWQsIHN3cml0ZSwgc2Vycm9yID0gc2VsZWN0LnNlbGVjdChzb2NrbGlzdCwgW10sIFtdLCA1KQorICAgICAgICAgICAgICAgIGZvciBzb2NrIGluIHNyZWFkOgorICAgICAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIHNlbGYuc2VydmVyX3NvY2tldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHFlbXVzb2NrLCBhZGRyID0gc2VsZi5zZXJ2ZXJfc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBxZW11c29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xpc3QuYXBwZW5kKHFlbXVzb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xpc3QucmVtb3ZlKHNlbGYuc2VydmVyX3NvY2tldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb25uZWN0aW9uIGZyb20gJXM6JXMiICUgYWRkcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzb2NrLnJlY3YoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGxvZyArPSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCIuKiBsb2dpbjoiLCBib290bG9nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gcWVtdXNvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHJlYWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWNoZWRsb2dpbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJlYWNoZWQgbG9naW4gYmFubmVyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xpc3QucmVtb3ZlKHNvY2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHJlYWQgPSBUcnVlCisKKyAgICAgICAgICAgIGlmIG5vdCByZWFjaGVkbG9naW46CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRhcmdldCBkaWRuJ3QgcmVhY2hlZCBsb2dpbiBib290IGluICVkIHNlY29uZHMiICUgc2VsZi5ib290dGltZSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9ICJcbiIuam9pbihib290bG9nLnNwbGl0bGluZXMoKVstMjU6XSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiTGFzdCAyNSBsaW5lcyBvZiB0ZXh0OlxuJXMiICUgbGluZXMpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNoZWNrIGZ1bGwgYm9vdCBsb2c6ICVzIiAlIHNlbGYubG9nZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgICMgSWYgd2UgYXJlIG5vdCBhYmxlIHRvIGxvZ2luIHRoZSB0ZXN0cyBjYW4gY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi5ydW5fc2VyaWFsKCJyb290XG4iLCByYXc9VHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goInJvb3RAW2EtekEtWjAtOVwtXSs6fiMiLCBvdXRwdXQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxvZ2dlZCBhcyByb290IGluIHNlcmlhbCBjb25zb2xlIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ291bGRuJ3QgbG9naW4gaW50byBzZXJpYWwgY29uc29sZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFzIHJvb3QgdXNpbmcgYmxhbmsgcGFzc3dvcmQiKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZXJpYWwgY29uc29sZSBmYWlsZWQgd2hpbGUgdHJ5aW5nIHRvIGxvZ2luIikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlFlbXUgcGlkIGRpZG4ndCBhcHBlYXJlZCBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBzZWxmLmlzX2FsaXZlKCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnN0b3BfdGhyZWFkKCkKKyAgICAgICAgaWYgc2VsZi5ydW5xZW11OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgc2VsZi5vcmlnY2hsZGhhbmRsZXIpCisgICAgICAgICAgICBvcy5raWxsKHNlbGYubW9uaXRvcnBpZCwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VuZGluZyBTSUdURVJNIHRvIHJ1bnFlbXUiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHNlbGYucnVucWVtdS5waWQpLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FU1JDSDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgICAgIHdoaWxlIHNlbGYucnVucWVtdS5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIGlmIHNlbGYucnVucWVtdS5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VuZGluZyBTSUdLSUxMIHRvIHJ1bnFlbXUiKQorICAgICAgICAgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHNlbGYucnVucWVtdS5waWQpLCBzaWduYWwuU0lHS0lMTCkKKyAgICAgICAgICAgIHNlbGYucnVucWVtdSA9IE5vbmUKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc2VydmVyX3NvY2tldCcpIGFuZCBzZWxmLnNlcnZlcl9zb2NrZXQ6CisgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gTm9uZQorICAgICAgICBzZWxmLnFlbXVwaWQgPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYub3JpZ2NobGRoYW5kbGVyKQorCisgICAgZGVmIHN0b3BfdGhyZWFkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRocmVhZCBhbmQgc2VsZi50aHJlYWQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLnN0b3AoKQorICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisKKyAgICBkZWYgcmVzdGFydChzZWxmLCBxZW11cGFyYW1zID0gTm9uZSk6CisgICAgICAgIGxvZ2dlci5pbmZvKCJSZXN0YXJ0aW5nIHFlbXUgcHJvY2VzcyIpCisgICAgICAgIGlmIHNlbGYucnVucWVtdS5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIGlmIHNlbGYuc3RhcnQocWVtdXBhcmFtcyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucnVucWVtdToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBxZW11X2NoaWxkID0gc2VsZi5maW5kX2NoaWxkKHN0cihzZWxmLnJ1bnFlbXUucGlkKSkKKyAgICAgICAgaWYgcWVtdV9jaGlsZDoKKyAgICAgICAgICAgIHNlbGYucWVtdXBpZCA9IHFlbXVfY2hpbGRbMF0KKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvcHJvYy8iICsgc3RyKHNlbGYucWVtdXBpZCkpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGZpbmRfY2hpbGQoc2VsZixwYXJlbnRfcGlkKToKKyAgICAgICAgIworICAgICAgICAjIFdhbGsgdGhlIHByb2Nlc3MgdHJlZSBmcm9tIHRoZSBwcm9jZXNzIHNwZWNpZmllZCBsb29raW5nIGZvciBhIHFlbXUtc3lzdGVtLiBSZXR1cm4gaXRzIFtwaWQnY21kXQorICAgICAgICAjCisgICAgICAgIHBzID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BzJywgJ2F4d3cnLCAnLW8nLCAncGlkLHBwaWQsY29tbWFuZCddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIHByb2Nlc3NlcyA9IHBzLnNwbGl0KCdcbicpCisgICAgICAgIG5maWVsZHMgPSBsZW4ocHJvY2Vzc2VzWzBdLnNwbGl0KCkpIC0gMQorICAgICAgICBwaWRzID0ge30KKyAgICAgICAgY29tbWFuZHMgPSB7fQorICAgICAgICBmb3Igcm93IGluIHByb2Nlc3Nlc1sxOl06CisgICAgICAgICAgICBkYXRhID0gcm93LnNwbGl0KE5vbmUsIG5maWVsZHMpCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZGF0YVsxXSBub3QgaW4gcGlkczoKKyAgICAgICAgICAgICAgICBwaWRzW2RhdGFbMV1dID0gW10KKworICAgICAgICAgICAgcGlkc1tkYXRhWzFdXS5hcHBlbmQoZGF0YVswXSkKKyAgICAgICAgICAgIGNvbW1hbmRzW2RhdGFbMF1dID0gZGF0YVsyXQorCisgICAgICAgIGlmIHBhcmVudF9waWQgbm90IGluIHBpZHM6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICBwYXJlbnRzID0gW10KKyAgICAgICAgbmV3cGFyZW50cyA9IHBpZHNbcGFyZW50X3BpZF0KKyAgICAgICAgd2hpbGUgbmV3cGFyZW50czoKKyAgICAgICAgICAgIG5leHQgPSBbXQorICAgICAgICAgICAgZm9yIHAgaW4gbmV3cGFyZW50czoKKyAgICAgICAgICAgICAgICBpZiBwIGluIHBpZHM6CisgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIHBpZHNbcF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuIG5vdCBpbiBwYXJlbnRzIGFuZCBuIG5vdCBpbiBuZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYXBwZW5kKG4pCisgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4gcGFyZW50czoKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgbmV3cGFyZW50cyA9IG5leHQKKyAgICAgICAgI3ByaW50ICJDaGlsZHJlbiBtYXRjaGluZyAlczoiICUgc3RyKHBhcmVudHMpCisgICAgICAgIGZvciBwIGluIHBhcmVudHM6CisgICAgICAgICAgICAjIE5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIHJ1bnFlbXUtaW50ZXJuYWwgcnVucyAibGRkIHFlbXUtc3lzdGVtLXh4eHgiCisgICAgICAgICAgICAjIEFsc28sIG9sZCB2ZXJzaW9ucyBvZiBsZGQgKDIuMTEpIHJ1biAiTERfWFhYWCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgYmFzZWNtZCA9IGNvbW1hbmRzW3BdLnNwbGl0KClbMF0KKyAgICAgICAgICAgIGJhc2VjbWQgPSBvcy5wYXRoLmJhc2VuYW1lKGJhc2VjbWQpCisgICAgICAgICAgICBpZiAicWVtdS1zeXN0ZW0iIGluIGJhc2VjbWQgYW5kICItc2VyaWFsIHRjcCIgaW4gY29tbWFuZHNbcF06CisgICAgICAgICAgICAgICAgcmV0dXJuIFtpbnQocCksY29tbWFuZHNbcF1dCisKKyAgICBkZWYgcnVuX3NlcmlhbChzZWxmLCBjb21tYW5kLCByYXc9RmFsc2UpOgorICAgICAgICAjIFdlIGFzc3VtZSB0YXJnZXQgc3lzdGVtIGhhdmUgZWNobyB0byBnZXQgY29tbWFuZCBzdGF0dXMKKyAgICAgICAgaWYgbm90IHJhdzoKKyAgICAgICAgICAgIGNvbW1hbmQgPSAiJXM7IGVjaG8gJD9cbiIgJSBjb21tYW5kCisgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5zZW5kYWxsKGNvbW1hbmQpCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgIHN0b3ByZWFkID0gRmFsc2UKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpKzUKKyAgICAgICAgd2hpbGUgdGltZS50aW1lKCk8ZW5kdGltZSBhbmQgbm90IHN0b3ByZWFkOgorICAgICAgICAgICAgc3JlYWQsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNlcnZlcl9zb2NrZXRdLFtdLFtdLDUpCisgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICBhbnN3ZXIgPSBzb2NrLnJlY3YoMTAyNCkKKyAgICAgICAgICAgICAgICBpZiBhbnN3ZXI6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gYW5zd2VyCisgICAgICAgICAgICAgICAgICAgICMgU2VhcmNoIHRoZSBwcm9tcHQgdG8gc3RvcAorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goIlthLXpBLVowLTldK0BbYS16QS1aMC05XC1dKzp+IyIsIGRhdGEpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHJlYWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm8gZGF0YSBvbiBzZXJpYWwgY29uc29sZSBzb2NrZXQiKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgaWYgcmF3OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBSZW1vdmUgZmlyc3QgbGluZSAoY29tbWFuZCBsaW5lKSBhbmQgbGFzdCBsaW5lIChwcm9tcHQpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5maW5kKCckP1xyXG4nKSs0OmRhdGEucmZpbmQoJ1xyXG4nKV0KKyAgICAgICAgICAgICAgICBpbmRleCA9IGRhdGEucmZpbmQoJ1xyXG4nKQorICAgICAgICAgICAgICAgIGlmIGluZGV4ID09IC0xOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXNfY21kID0gZGF0YQorICAgICAgICAgICAgICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXNfY21kID0gZGF0YVtpbmRleCsyOl0KKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbOmluZGV4XQorICAgICAgICAgICAgICAgIGlmIChzdGF0dXNfY21kID09ICIwIik6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgcmV0dXJuIChzdGF0dXMsIHN0cihkYXRhKSkKKworCisgICAgZGVmIF9kdW1wX2hvc3Qoc2VsZik6CisgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIuY3JlYXRlX2RpcigicWVtdSIpCisgICAgICAgIGxvZ2dlci53YXJuKCJRZW11IGVuZGVkIHVuZXhwZWN0ZWRseSwgZHVtcCBkYXRhIGZyb20gaG9zdCIKKyAgICAgICAgICAgICAgICAiIGlzIGluICVzIiAlIHNlbGYuaG9zdF9kdW1wZXIuZHVtcF9kaXIpCisgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIuZHVtcF9ob3N0KCkKKworIyBUaGlzIGNsYXNzIGlzIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhIHNvY2tldCBhbmQgcGFzc2luZyBpdCB0byBsb2dmdW5jCisjIHRvIGJlIHByb2Nlc3NlZC4gSXQncyBjb21wbGV0ZWx5IGV2ZW50IGRyaXZlbiBhbmQgaGFzIGEgc3RyYWlnaHRmb3J3YXJkCisjIGV2ZW50IGxvb3AuIFRoZSBtZWNoYW5pc20gZm9yIHN0b3BwaW5nIHRoZSB0aHJlYWQgaXMgYSBzaW1wbGUgcGlwZSB3aGljaAorIyB3aWxsIHdha2UgdXAgdGhlIHBvbGwgYW5kIGFsbG93IGZvciB0ZWFyaW5nIGV2ZXJ5dGhpbmcgZG93bi4KK2NsYXNzIExvZ2dpbmdUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2Z1bmMsIHNvY2ssIGxvZ2dlcik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbl9lc3RhYmxpc2hlZCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuc2VydmVyc29jayA9IHNvY2sKKyAgICAgICAgc2VsZi5sb2dmdW5jID0gbG9nZnVuYworICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICBzZWxmLnJlYWRzb2NrID0gTm9uZQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisgICAgICAgIHNlbGYuZXJyb3JldmVudHMgPSBzZWxlY3QuUE9MTEVSUiB8IHNlbGVjdC5QT0xMSFVQIHwgc2VsZWN0LlBPTExOVkFMCisgICAgICAgIHNlbGYucmVhZGV2ZW50cyA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQorCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZiwgdGFyZ2V0PXNlbGYudGhyZWFkdGFyZ2V0KQorCisgICAgZGVmIHRocmVhZHRhcmdldChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5ldmVudGxvb3AoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi50ZWFyZG93bigpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJTdGFydGluZyBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgIHNlbGYucmVhZHBpcGUsIHNlbGYud3JpdGVwaXBlID0gb3MucGlwZSgpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQucnVuKHNlbGYpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RvcHBpbmcgbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICBpZiBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgICBvcy53cml0ZShzZWxmLndyaXRlcGlwZSwgInN0b3AiKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJUZWFyaW5nIGRvd24gbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICBzZWxmLmNsb3NlX3NvY2tldChzZWxmLnNlcnZlcnNvY2spCisKKyAgICAgICAgaWYgc2VsZi5yZWFkc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY2xvc2Vfc29ja2V0KHNlbGYucmVhZHNvY2spCisKKyAgICAgICAgc2VsZi5jbG9zZV9pZ25vcmVfZXJyb3Ioc2VsZi5yZWFkcGlwZSkKKyAgICAgICAgc2VsZi5jbG9zZV9pZ25vcmVfZXJyb3Ioc2VsZi53cml0ZXBpcGUpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisKKyAgICBkZWYgZXZlbnRsb29wKHNlbGYpOgorICAgICAgICBwb2xsID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBldmVudG1hc2sgPSBzZWxmLmVycm9yZXZlbnRzIHwgc2VsZi5yZWFkZXZlbnRzCisgICAgICAgIHBvbGwucmVnaXN0ZXIoc2VsZi5zZXJ2ZXJzb2NrLmZpbGVubygpKQorICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYucmVhZHBpcGUsIGV2ZW50bWFzaykKKworICAgICAgICBicmVha291dCA9IEZhbHNlCisgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RhcnRpbmcgdGhyZWFkIGV2ZW50IGxvb3AiKQorICAgICAgICB3aGlsZSBub3QgYnJlYWtvdXQ6CisgICAgICAgICAgICBldmVudHMgPSBwb2xsLnBvbGwoKQorICAgICAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKKyAgICAgICAgICAgICAgICAjIEFuIGVycm9yIG9jY3VycmVkLCBiYWlsIG91dAorICAgICAgICAgICAgICAgIGlmIGV2ZW50WzFdICYgc2VsZi5lcnJvcmV2ZW50czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHNlbGYuc3RyaW5naWZ5X2V2ZW50KGV2ZW50WzFdKSkKKworICAgICAgICAgICAgICAgICMgRXZlbnQgdG8gc3RvcCB0aGUgdGhyZWFkCisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZWFkcGlwZSA9PSBldmVudFswXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RvcCBldmVudCByZWNlaXZlZCIpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrb3V0ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgIyBBIGNvbm5lY3Rpb24gcmVxdWVzdCB3YXMgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuc2VydmVyc29jay5maWxlbm8oKSA9PSBldmVudFswXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiQ29ubmVjdGlvbiByZXF1ZXN0IHJlY2VpdmVkIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkc29jaywgXyA9IHNlbGYuc2VydmVyc29jay5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWRzb2NrLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICAgICAgICAgIHBvbGwudW5yZWdpc3RlcihzZWxmLnNlcnZlcnNvY2suZmlsZW5vKCkpCisgICAgICAgICAgICAgICAgICAgIHBvbGwucmVnaXN0ZXIoc2VsZi5yZWFkc29jay5maWxlbm8oKSkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJTZXR0aW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZXZlbnQiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQuc2V0KCkKKworICAgICAgICAgICAgICAgICMgQWN0dWFsIGRhdGEgdG8gYmUgbG9nZ2VkCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnJlYWRzb2NrLmZpbGVubygpID09IGV2ZW50WzBdOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZnVuYyhkYXRhKQorCisgICAgIyBTaW5jZSB0aGUgc29ja2V0IGlzIG5vbi1ibG9ja2luZyBtYWtlIHN1cmUgdG8gaG9ub3IgRUFHQUlOCisgICAgIyBhbmQgRVdPVUxEQkxPQ0suCisgICAgZGVmIHJlY3Yoc2VsZiwgY291bnQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkc29jay5yZWN2KGNvdW50KQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBR0FJTiBvciBlLmVycm5vID09IGVycm5vLkVXT1VMREJMT0NLOgorICAgICAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm8gZGF0YSBvbiByZWFkIHJlYWR5IHNvY2tldCIpCisgICAgICAgIGVsaWYgbm90IGRhdGE6CisgICAgICAgICAgICAjIFRoaXMgYWN0dWFsbHkgbWVhbnMgYW4gb3JkZXJseSBzaHV0ZG93bgorICAgICAgICAgICAgIyBoYXBwZW5lZC4gQnV0IGZvciB0aGlzIGNvZGUgaXQgY291bnRzIGFzIGFuCisgICAgICAgICAgICAjIGVycm9yIHNpbmNlIHRoZSBjb25uZWN0aW9uIHNob3VsZG4ndCBnbyBhd2F5CisgICAgICAgICAgICAjIHVudGlsIHFlbXUgZXhpdHMuCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvbnNvbGUgY29ubmVjdGlvbiBjbG9zZWQgdW5leHBlY3RlZGx5IikKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHN0cmluZ2lmeV9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIHZhbCA9ICcnCisgICAgICAgIGlmIHNlbGVjdC5QT0xMRVJSID09IGV2ZW50OgorICAgICAgICAgICAgdmFsID0gJ1BPTExFUicKKyAgICAgICAgZWxpZiBzZWxlY3QuUE9MTEhVUCA9PSBldmVudDoKKyAgICAgICAgICAgIHZhbCA9ICdQT0xMSFVQJworICAgICAgICBlbGlmIHNlbGVjdC5QT0xMTlZBTCA9PSBldmVudDoKKyAgICAgICAgICAgIHZhbCA9ICdQT0xMTlZBTCcKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIGNsb3NlX3NvY2tldChzZWxmLCBzb2NrKToKKyAgICAgICAgc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIGRlZiBjbG9zZV9pZ25vcmVfZXJyb3Ioc2VsZiwgZmQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5IGIvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk1MTAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weQpAQCAtMCwwICsxLDE3MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyBmb3Igc3RhcnRpbmcgcWVtdSBpbWFnZXMgb2YgcG9reSB0aW55LgorIyBJdCdzIHVzZWQgYnkgdGVzdGltYWdlLmJiY2xhc3MuCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBiYgorZnJvbSBxZW11cnVubmVyIGltcG9ydCBRZW11UnVubmVyCisKK2NsYXNzIFFlbXVUaW55UnVubmVyKFFlbXVSdW5uZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hY2hpbmUsIHJvb3RmcywgZGlzcGxheSwgdG1wZGlyLCBkZXBsb3lfZGlyX2ltYWdlLCBsb2dmaWxlLCBrZXJuZWwsIGJvb3R0aW1lKToKKworICAgICAgICAjIFBvcGVuIG9iamVjdCBmb3IgcnVucWVtdQorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCisgICAgICAgICMgcGlkIG9mIHRoZSBxZW11IHByb2Nlc3MgdGhhdCBydW5xZW11IHdpbGwgc3RhcnQKKyAgICAgICAgc2VsZi5xZW11cGlkID0gTm9uZQorICAgICAgICAjIHRhcmdldCBpcCAtIGZyb20gdGhlIGNvbW1hbmQgbGluZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICAjIGhvc3QgaXAgLSB3aGVyZSBxZW11IGlzIHJ1bm5pbmcKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCisKKyAgICAgICAgc2VsZi5tYWNoaW5lID0gbWFjaGluZQorICAgICAgICBzZWxmLnJvb3RmcyA9IHJvb3RmcworICAgICAgICBzZWxmLmRpc3BsYXkgPSBkaXNwbGF5CisgICAgICAgIHNlbGYudG1wZGlyID0gdG1wZGlyCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSA9IGRlcGxveV9kaXJfaW1hZ2UKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLmJvb3R0aW1lID0gYm9vdHRpbWUKKworICAgICAgICBzZWxmLnJ1bnFlbXV0aW1lID0gNjAKKyAgICAgICAgc2VsZi5zb2NrZXRmaWxlID0gImNvbnNvbGUuc29jayIKKyAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gTm9uZQorICAgICAgICBzZWxmLmtlcm5lbCA9IGtlcm5lbAorCisKKyAgICBkZWYgY3JlYXRlX3NvY2tldChzZWxmKToKKyAgICAgICAgdHJpZXMgPSAzCisgICAgICAgIHdoaWxlIHRyaWVzID4gMDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LmNvbm5lY3Qoc2VsZi5zb2NrZXRmaWxlKQorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0ZWQgbGlzdGVuaW5nIHNvY2tldCBmb3IgcWVtdSBzZXJpYWwgY29uc29sZS4iKQorICAgICAgICAgICAgICAgIHRyaWVzID0gMAorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jbG9zZSgpCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldC4iKQorICAgICAgICAgICAgICAgIHRyaWVzIC09IDEKKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzIiAlIG1zZykKKworICAgIGRlZiBzdGFydChzZWxmLCBxZW11cGFyYW1zID0gTm9uZSk6CisKKyAgICAgICAgaWYgc2VsZi5kaXNwbGF5OgorICAgICAgICAgICAgb3MuZW52aXJvblsiRElTUExBWSJdID0gc2VsZi5kaXNwbGF5CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5lcnJvcigiVG8gc3RhcnQgcWVtdSBJIG5lZWQgYSBYIGRlc2t0b3AsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MSkiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICBiYi5lcnJvcigiSW52YWxpZCByb290ZnMgJXMiICUgc2VsZi5yb290ZnMpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYudG1wZGlyKToKKyAgICAgICAgICAgIGJiLmVycm9yKCJJbnZhbGlkIFRNUERJUiBwYXRoICVzIiAlIHNlbGYudG1wZGlyKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJPRV9UTVBESVIiXSA9IHNlbGYudG1wZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRlcGxveV9kaXJfaW1hZ2UpOgorICAgICAgICAgICAgYmIuZXJyb3IoIkludmFsaWQgREVQTE9ZX0RJUl9JTUFHRSBwYXRoICVzIiAlIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiREVQTE9ZX0RJUl9JTUFHRSJdID0gc2VsZi5kZXBsb3lfZGlyX2ltYWdlCisKKyAgICAgICAgIyBTZXQgdGhpcyBmbGFnIHNvIHRoYXQgUWVtdSBkb2Vzbid0IGRvIGFueSBncmFicyBhcyBTREwgZ3JhYnMgaW50ZXJhY3QKKyAgICAgICAgIyBiYWRseSB3aXRoIHNjcmVlbnNhdmVycy4KKyAgICAgICAgb3MuZW52aXJvblsiUUVNVV9ET05UX0dSQUIiXSA9ICIxIgorICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSAnLS1hcHBlbmQgInJvb3Q9L2Rldi9yYW0wIGNvbnNvbGU9dHR5UzAiIC1ub2dyYXBoaWMgLXNlcmlhbCB1bml4OiVzLHNlcnZlcixub3dhaXQnICUgc2VsZi5zb2NrZXRmaWxlCisKKyAgICAgICAgbGF1bmNoX2NtZCA9ICdxZW11LXN5c3RlbS1pMzg2IC1rZXJuZWwgJXMgLWluaXRyZCAlcyAlcycgJSAoc2VsZi5rZXJuZWwsIHNlbGYucm9vdGZzLCBzZWxmLnFlbXVwYXJhbXMpCisgICAgICAgIHNlbGYucnVucWVtdSA9IHN1YnByb2Nlc3MuUG9wZW4obGF1bmNoX2NtZCxzaGVsbD1UcnVlLHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULHByZWV4ZWNfZm49b3Muc2V0cGdycCkKKworICAgICAgICBiYi5ub3RlKCJydW5xZW11IHN0YXJ0ZWQsIHBpZCBpcyAlcyIgJSBzZWxmLnJ1bnFlbXUucGlkKQorICAgICAgICBiYi5ub3RlKCJ3YWl0aW5nIGF0IG1vc3QgJXMgc2Vjb25kcyBmb3IgcWVtdSBwaWQiICUgc2VsZi5ydW5xZW11dGltZSkKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5ydW5xZW11dGltZQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc19hbGl2ZSgpIGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgaWYgc2VsZi5pc19hbGl2ZSgpOgorICAgICAgICAgICAgYmIubm90ZSgicWVtdSBzdGFydGVkIC0gcWVtdSBwcm9jY2VzIHBpZCBpcyAlcyIgJSBzZWxmLnFlbXVwaWQpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIubm90ZSgiUWVtdSBwaWQgZGlkbid0IGFwcGVhcmVkIGluICVzIHNlY29uZHMiICUgc2VsZi5ydW5xZW11dGltZSkKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucnVucWVtdS5zdGRvdXQKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBiYi5ub3RlKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgb3V0cHV0LnJlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBzZWxmLmlzX2FsaXZlKCkKKworICAgIGRlZiBydW5fc2VyaWFsKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuc2VuZGFsbChjb21tYW5kKydcbicpCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgIHN0b3ByZWFkID0gRmFsc2UKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpKzUKKyAgICAgICAgd2hpbGUgdGltZS50aW1lKCk8ZW5kdGltZSBhbmQgbm90IHN0b3ByZWFkOgorICAgICAgICAgICAgICAgIHNyZWFkLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2ZXJfc29ja2V0XSxbXSxbXSw1KQorICAgICAgICAgICAgICAgIGZvciBzb2NrIGluIHNyZWFkOgorICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbnN3ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gYW5zd2VyCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHJlYWQgPSBUcnVlCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgc3RhdHVzID0gMQorICAgICAgICByZXR1cm4gKHN0YXR1cywgc3RyKGRhdGEpKQorCisgICAgZGVmIGZpbmRfY2hpbGQoc2VsZixwYXJlbnRfcGlkKToKKyAgICAgICAgIworICAgICAgICAjIFdhbGsgdGhlIHByb2Nlc3MgdHJlZSBmcm9tIHRoZSBwcm9jZXNzIHNwZWNpZmllZCBsb29raW5nIGZvciBhIHFlbXUtc3lzdGVtLiBSZXR1cm4gaXRzIFtwaWQnY21kXQorICAgICAgICAjCisgICAgICAgIHBzID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BzJywgJ2F4d3cnLCAnLW8nLCAncGlkLHBwaWQsY29tbWFuZCddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIHByb2Nlc3NlcyA9IHBzLnNwbGl0KCdcbicpCisgICAgICAgIG5maWVsZHMgPSBsZW4ocHJvY2Vzc2VzWzBdLnNwbGl0KCkpIC0gMQorICAgICAgICBwaWRzID0ge30KKyAgICAgICAgY29tbWFuZHMgPSB7fQorICAgICAgICBmb3Igcm93IGluIHByb2Nlc3Nlc1sxOl06CisgICAgICAgICAgICBkYXRhID0gcm93LnNwbGl0KE5vbmUsIG5maWVsZHMpCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZGF0YVsxXSBub3QgaW4gcGlkczoKKyAgICAgICAgICAgICAgICBwaWRzW2RhdGFbMV1dID0gW10KKworICAgICAgICAgICAgcGlkc1tkYXRhWzFdXS5hcHBlbmQoZGF0YVswXSkKKyAgICAgICAgICAgIGNvbW1hbmRzW2RhdGFbMF1dID0gZGF0YVsyXQorCisgICAgICAgIGlmIHBhcmVudF9waWQgbm90IGluIHBpZHM6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICBwYXJlbnRzID0gW10KKyAgICAgICAgbmV3cGFyZW50cyA9IHBpZHNbcGFyZW50X3BpZF0KKyAgICAgICAgd2hpbGUgbmV3cGFyZW50czoKKyAgICAgICAgICAgIG5leHQgPSBbXQorICAgICAgICAgICAgZm9yIHAgaW4gbmV3cGFyZW50czoKKyAgICAgICAgICAgICAgICBpZiBwIGluIHBpZHM6CisgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIHBpZHNbcF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuIG5vdCBpbiBwYXJlbnRzIGFuZCBuIG5vdCBpbiBuZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYXBwZW5kKG4pCisgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4gcGFyZW50czoKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgbmV3cGFyZW50cyA9IG5leHQKKyAgICAgICAgI3ByaW50ICJDaGlsZHJlbiBtYXRjaGluZyAlczoiICUgc3RyKHBhcmVudHMpCisgICAgICAgIGZvciBwIGluIHBhcmVudHM6CisgICAgICAgICAgICAjIE5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIHJ1bnFlbXUtaW50ZXJuYWwgcnVucyAibGRkIHFlbXUtc3lzdGVtLXh4eHgiCisgICAgICAgICAgICAjIEFsc28sIG9sZCB2ZXJzaW9ucyBvZiBsZGQgKDIuMTEpIHJ1biAiTERfWFhYWCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgYmFzZWNtZCA9IGNvbW1hbmRzW3BdLnNwbGl0KClbMF0KKyAgICAgICAgICAgIGJhc2VjbWQgPSBvcy5wYXRoLmJhc2VuYW1lKGJhc2VjbWQpCisgICAgICAgICAgICBpZiAicWVtdS1zeXN0ZW0iIGluIGJhc2VjbWQgYW5kICItc2VyaWFsIHVuaXgiIGluIGNvbW1hbmRzW3BdOgorICAgICAgICAgICAgICAgIHJldHVybiBbaW50KHApLGNvbW1hbmRzW3BdXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY1MDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS91dGlscy9zc2hjb250cm9sLnB5CkBAIC0wLDAgKzEsMTU0IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBQcm92aWRlcyBhIGNsYXNzIGZvciBzZXR0aW5nIHVwIHNzaCBjb25uZWN0aW9ucywKKyMgcnVubmluZyBjb21tYW5kcyBhbmQgY29weWluZyBmaWxlcyB0by9mcm9tIGEgdGFyZ2V0LgorIyBJdCdzIHVzZWQgYnkgdGVzdGltYWdlLmJiY2xhc3MgYW5kIHRlc3RzIGluIGxpYi9vZXFhL3J1bnRpbWUuCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgc2VsZWN0CisKKworY2xhc3MgU1NIUHJvY2VzcyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKm9wdGlvbnMpOgorCisgICAgICAgIHNlbGYuZGVmYXVsdG9wdHMgPSB7CisgICAgICAgICAgICAic3Rkb3V0Ijogc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgInN0ZGVyciI6IHN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgInN0ZGluIjogTm9uZSwKKyAgICAgICAgICAgICJzaGVsbCI6IEZhbHNlLAorICAgICAgICAgICAgImJ1ZnNpemUiOiAtMSwKKyAgICAgICAgICAgICJwcmVleGVjX2ZuIjogb3Muc2V0c2lkLAorICAgICAgICB9CisgICAgICAgIHNlbGYub3B0aW9ucyA9IGRpY3Qoc2VsZi5kZWZhdWx0b3B0cykKKyAgICAgICAgc2VsZi5vcHRpb25zLnVwZGF0ZShvcHRpb25zKQorICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBOb25lCisgICAgICAgIHNlbGYucHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGFydHRpbWUgPSBOb25lCisgICAgICAgIHNlbGYubG9nZmlsZSA9IE5vbmUKKworICAgICAgICAjIFVuc2V0IERJU1BMQVkgd2hpY2ggbWVhbnMgd2Ugd29uJ3QgdHJpZ2dlciBTU0hfQVNLUEFTUworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBpZiAiRElTUExBWSIgaW4gZW52OgorICAgICAgICAgICAgZGVsIGVudlsnRElTUExBWSddCisgICAgICAgIHNlbGYub3B0aW9uc1snZW52J10gPSBlbnYKKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgZi53cml0ZSgiJXMiICUgbXNnKQorCisgICAgZGVmIF9ydW4oc2VsZiwgY29tbWFuZCwgdGltZW91dD1Ob25lLCBsb2dmaWxlPU5vbmUpOgorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgb3V0cHV0ID0gJycKKyAgICAgICAgc2VsZi5wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLCAqKnNlbGYub3B0aW9ucykKKyAgICAgICAgaWYgdGltZW91dDoKKyAgICAgICAgICAgIGVuZHRpbWUgPSBzZWxmLnN0YXJ0dGltZSArIHRpbWVvdXQKKyAgICAgICAgICAgIGVvZiA9IEZhbHNlCisgICAgICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IGVuZHRpbWUgYW5kIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgaWYgc2VsZWN0LnNlbGVjdChbc2VsZi5wcm9jZXNzLnN0ZG91dF0sIFtdLCBbXSwgNSlbMF0gIT0gW106CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYucHJvY2Vzcy5zdGRvdXQuZmlsZW5vKCksIDEwMjQpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnN0ZG91dC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBlb2YgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKKworCisgICAgICAgICAgICAjIHByb2Nlc3MgaGFzbid0IHJldHVybmVkIHlldAorICAgICAgICAgICAgaWYgbm90IGVvZjoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3MudGVybWluYXRlKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBsYXN0bGluZSA9ICJcblByb2Nlc3Mga2lsbGVkIC0gbm8gb3V0cHV0IGZvciAlZCBzZWNvbmRzLiBUb3RhbCBydW5uaW5nIHRpbWU6ICVkIHNlY29uZHMuIiAlICh0aW1lb3V0LCB0aW1lLnRpbWUoKSAtIHNlbGYuc3RhcnR0aW1lKQorICAgICAgICAgICAgICAgIHNlbGYubG9nKGxhc3RsaW5lKQorICAgICAgICAgICAgICAgIG91dHB1dCArPSBsYXN0bGluZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5wcm9jZXNzLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIHNlbGYubG9nKG91dHB1dC5yc3RyaXAoKSkKKworICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucHJvY2Vzcy53YWl0KCkKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQucnN0cmlwKCkKKworICAgIGRlZiBydW4oc2VsZiwgY29tbWFuZCwgdGltZW91dD1Ob25lLCBsb2dmaWxlPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9ydW4oY29tbWFuZCwgdGltZW91dCwgbG9nZmlsZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBOZWVkIHRvIGd1YXJkIGFnYWluc3QgYSBTeXN0ZW1FeGl0IG9yIG90aGVyIGV4Y2VwdGlvbiBvY2N1cmluZyB3aGlsc3QgcnVubmluZworICAgICAgICAgICAgIyBhbmQgZW5zdXJlIHdlIGRvbid0IGxlYXZlIGEgcHJvY2VzcyBiZWhpbmQuCisgICAgICAgICAgICBpZiBzZWxmLnByb2Nlc3MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIChzZWxmLnN0YXR1cywgc2VsZi5vdXRwdXQpCisKK2NsYXNzIFNTSENvbnRyb2wob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXAsIGxvZ2ZpbGU9Tm9uZSwgdGltZW91dD0zMDAsIHVzZXI9J3Jvb3QnLCBwb3J0PU5vbmUpOgorICAgICAgICBzZWxmLmlwID0gaXAKKyAgICAgICAgc2VsZi5kZWZhdWx0dGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5pZ25vcmVfc3RhdHVzID0gVHJ1ZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYudXNlciA9IHVzZXIKKyAgICAgICAgc2VsZi5zc2hfb3B0aW9ucyA9IFsKKyAgICAgICAgICAgICAgICAnLW8nLCAnVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCcsCisgICAgICAgICAgICAgICAgJy1vJywgJ1N0cmljdEhvc3RLZXlDaGVja2luZz1ubycsCisgICAgICAgICAgICAgICAgJy1vJywgJ0xvZ0xldmVsPUVSUk9SJworICAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5zc2ggPSBbJ3NzaCcsICctbCcsIHNlbGYudXNlciBdICsgc2VsZi5zc2hfb3B0aW9ucworICAgICAgICBzZWxmLnNjcCA9IFsnc2NwJ10gKyBzZWxmLnNzaF9vcHRpb25zCisgICAgICAgIGlmIHBvcnQ6CisgICAgICAgICAgICBzZWxmLnNzaCA9IHNlbGYuc3NoICsgWyAnLXAnLCBwb3J0IF0KKyAgICAgICAgICAgIHNlbGYuc2NwID0gc2VsZi5zY3AgKyBbICctUCcsIHBvcnQgXQorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgX2ludGVybmFsX3J1bihzZWxmLCBjb21tYW5kLCB0aW1lb3V0PU5vbmUsIGlnbm9yZV9zdGF0dXMgPSBUcnVlKToKKyAgICAgICAgc2VsZi5sb2coIltSdW5uaW5nXSQgJXMiICUgIiAiLmpvaW4oY29tbWFuZCkpCisKKyAgICAgICAgcHJvYyA9IFNTSFByb2Nlc3MoKQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHByb2MucnVuKGNvbW1hbmQsIHRpbWVvdXQsIGxvZ2ZpbGU9c2VsZi5sb2dmaWxlKQorCisgICAgICAgIHNlbGYubG9nKCJbQ29tbWFuZCByZXR1cm5lZCAnJWQnIGFmdGVyICUuMmYgc2Vjb25kc10iICUgKHN0YXR1cywgdGltZS50aW1lKCkgLSBwcm9jLnN0YXJ0dGltZSkpCisKKyAgICAgICAgaWYgc3RhdHVzIGFuZCBub3QgaWdub3JlX3N0YXR1czoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQ6XG4lcyIgJSAoY29tbWFuZCwgc3RhdHVzLCBvdXRwdXQpKQorCisgICAgICAgIHJldHVybiAoc3RhdHVzLCBvdXRwdXQpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kIC0gc3NoIGNvbW1hbmQgdG8gcnVuCisgICAgICAgIHRpbWVvdXQ9PHZhbD4gLSBraWxsIGNvbW1hbmQgaWYgdGhlcmUgaXMgbm8gb3V0cHV0IGFmdGVyIDx2YWw+IHNlY29uZHMKKyAgICAgICAgdGltZW91dD1Ob25lIC0ga2lsbCBjb21tYW5kIGlmIHRoZXJlIGlzIG5vIG91dHB1dCBhZnRlciBhIGRlZmF1bHQgdmFsdWUgc2Vjb25kcworICAgICAgICB0aW1lb3V0PTAgLSBubyB0aW1lb3V0LCBsZXQgY29tbWFuZCBydW4gdW50aWwgaXQgcmV0dXJucworICAgICAgICAiIiIKKworICAgICAgICAjIFdlIG5lZWQgdG8gc291cmNlIC9ldGMvcHJvZmlsZSBmb3IgYSBwcm9wZXIgUEFUSCBvbiB0aGUgdGFyZ2V0CisgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNzaCArIFtzZWxmLmlwLCAnIC4gL2V0Yy9wcm9maWxlOyAnICsgY29tbWFuZF0KKworICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIHNlbGYuZGVmYXVsdHRpbWVvdXQsIHNlbGYuaWdub3JlX3N0YXR1cykKKyAgICAgICAgaWYgdGltZW91dCA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBOb25lLCBzZWxmLmlnbm9yZV9zdGF0dXMpCisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgdGltZW91dCwgc2VsZi5pZ25vcmVfc3RhdHVzKQorCisgICAgZGVmIGNvcHlfdG8oc2VsZiwgbG9jYWxwYXRoLCByZW1vdGVwYXRoKToKKyAgICAgICAgY29tbWFuZCA9IHNlbGYuc2NwICsgW2xvY2FscGF0aCwgJyVzQCVzOiVzJyAlIChzZWxmLnVzZXIsIHNlbGYuaXAsIHJlbW90ZXBhdGgpXQorICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9RmFsc2UpCisKKyAgICBkZWYgY29weV9mcm9tKHNlbGYsIHJlbW90ZXBhdGgsIGxvY2FscGF0aCk6CisgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFsnJXNAJXM6JXMnICUgKHNlbGYudXNlciwgc2VsZi5pcCwgcmVtb3RlcGF0aCksIGxvY2FscGF0aF0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1MGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkKQEAgLTAsMCArMSwxMzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFByb3ZpZGVzIGEgY2xhc3MgZm9yIGF1dG9tYXRpbmcgYnVpbGQgdGVzdHMgZm9yIHByb2plY3RzCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworY2xhc3MgQnVpbGRQcm9qZWN0KCk6CisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lLCB0bXBkaXI9Ii90bXAvIik6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi51cmkgPSB1cmkKKyAgICAgICAgc2VsZi5hcmNoaXZlID0gb3MucGF0aC5iYXNlbmFtZSh1cmkpCisgICAgICAgIHNlbGYubG9jYWxhcmNoaXZlID0gb3MucGF0aC5qb2luKHRtcGRpcixzZWxmLmFyY2hpdmUpCisgICAgICAgIHNlbGYuZm5hbWUgPSByZS5zdWIocicudGFyLmJ6Mnx0YXIuZ3okJywgJycsIHNlbGYuYXJjaGl2ZSkKKyAgICAgICAgaWYgZm9sZGVybmFtZToKKyAgICAgICAgICAgIHNlbGYuZm5hbWUgPSBmb2xkZXJuYW1lCisKKyAgICAjIERvd25sb2FkIHNlbGYuYXJjaGl2ZSB0byBzZWxmLmxvY2FsYXJjaGl2ZQorICAgIGRlZiBfZG93bmxvYWRfYXJjaGl2ZShzZWxmKToKKworICAgICAgICBkbF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKQorICAgICAgICBpZiBkbF9kaXIgYW5kIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihkbF9kaXIsIHNlbGYuYXJjaGl2ZSkpOgorICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUob3MucGF0aC5qb2luKGRsX2Rpciwgc2VsZi5hcmNoaXZlKSwgc2VsZi5sb2NhbGFyY2hpdmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBleHBvcnR2YXJzID0gWydIVFRQX1BST1hZJywgJ2h0dHBfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdIVFRQU19QUk9YWScsICdodHRwc19wcm94eScsCisgICAgICAgICAgICAgICAgICAgICAgJ0ZUUF9QUk9YWScsICdmdHBfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdGVFBTX1BST1hZJywgJ2Z0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdOT19QUk9YWScsICdub19wcm94eScsCisgICAgICAgICAgICAgICAgICAgICAgJ0FMTF9QUk9YWScsICdhbGxfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdTT0NLUzVfVVNFUicsICdTT0NLUzVfUEFTU1dEJ10KKworICAgICAgICBjbWQgPSAnJworICAgICAgICBmb3IgdmFyIGluIGV4cG9ydHZhcnM6CisgICAgICAgICAgICB2YWwgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgICAgICBjbWQgPSAnZXhwb3J0ICcgKyB2YXIgKyAnPVwiJXNcIjsgJXMnICUgKHZhbCwgY21kKQorCisgICAgICAgIGNtZCA9IGNtZCArICJ3Z2V0IC1PICVzICVzIiAlIChzZWxmLmxvY2FsYXJjaGl2ZSwgc2VsZi51cmkpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAjIFRoaXMgbWV0aG9kIHNob3VsZCBwcm92aWRlIGEgd2F5IHRvIHJ1biBhIGNvbW1hbmQgaW4gdGhlIGRlc2lyZWQgZW52aXJvbm1lbnQuCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgcGFzcworCisgICAgIyBUaGUgdGltZW91dCBwYXJhbWV0ZXIgb2YgdGFyZ2V0LnJ1biBpcyBzZXQgdG8gMCB0byBtYWtlIHRoZSBzc2ggY29tbWFuZAorICAgICMgcnVuIHdpdGggbm8gdGltZW91dC4KKyAgICBkZWYgcnVuX2NvbmZpZ3VyZShzZWxmLCBjb25maWd1cmVfYXJncz0nJywgZXh0cmFfY21kcz0nJyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW4oJ2NkICVzOyAlcyAuL2NvbmZpZ3VyZSAlcycgJSAoc2VsZi50YXJnZXRkaXIsIGV4dHJhX2NtZHMsIGNvbmZpZ3VyZV9hcmdzKSkKKworICAgIGRlZiBydW5fbWFrZShzZWxmLCBtYWtlX2FyZ3M9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuKCdjZCAlczsgbWFrZSAlcycgJSAoc2VsZi50YXJnZXRkaXIsIG1ha2VfYXJncykpCisKKyAgICBkZWYgcnVuX2luc3RhbGwoc2VsZiwgaW5zdGFsbF9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bignY2QgJXM7IG1ha2UgaW5zdGFsbCAlcycgJSAoc2VsZi50YXJnZXRkaXIsIGluc3RhbGxfYXJncykpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYuX3J1bigncm0gLXJmICVzJyAlIHNlbGYudGFyZ2V0ZGlyKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoJ3JtIC1mICVzJyAlIHNlbGYubG9jYWxhcmNoaXZlLCBzaGVsbD1UcnVlKQorICAgICAgICBwYXNzCisKK2NsYXNzIFRhcmdldEJ1aWxkUHJvamVjdChCdWlsZFByb2plY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhcmdldCwgZCwgdXJpLCBmb2xkZXJuYW1lPU5vbmUpOgorICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldAorICAgICAgICBzZWxmLnRhcmdldGRpciA9ICJ+LyIKKyAgICAgICAgQnVpbGRQcm9qZWN0Ll9faW5pdF9fKHNlbGYsIGQsIHVyaSwgZm9sZGVybmFtZSwgdG1wZGlyPSIvdG1wIikKKworICAgIGRlZiBkb3dubG9hZF9hcmNoaXZlKHNlbGYpOgorCisgICAgICAgIHNlbGYuX2Rvd25sb2FkX2FyY2hpdmUoKQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5jb3B5X3RvKHNlbGYubG9jYWxhcmNoaXZlLCBzZWxmLnRhcmdldGRpcikKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBjb3B5IGFyY2hpdmUgdG8gdGFyZ2V0LCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd0YXIgeGYgJXMlcyAtQyAlcycgJSAoc2VsZi50YXJnZXRkaXIsIHNlbGYuYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGV4dHJhY3QgYXJjaGl2ZSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgI0NoYW5nZSB0YXJnZXRkaXIgdG8gcHJvamVjdCBmb2xkZXIKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSBzZWxmLnRhcmdldGRpciArIHNlbGYuZm5hbWUKKworICAgICMgVGhlIHRpbWVvdXQgcGFyYW1ldGVyIG9mIHRhcmdldC5ydW4gaXMgc2V0IHRvIDAgdG8gbWFrZSB0aGUgc3NoIGNvbW1hbmQKKyAgICAjIHJ1biB3aXRoIG5vIHRpbWVvdXQuCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnJ1bihjbWQsIDApWzBdCisKKworY2xhc3MgU0RLQnVpbGRQcm9qZWN0KEJ1aWxkUHJvamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdHBhdGgsIHNka2VudiwgZCwgdXJpLCBmb2xkZXJuYW1lPU5vbmUpOgorICAgICAgICBzZWxmLnNka2VudiA9IHNka2VudgorICAgICAgICBzZWxmLnRlc3RkaXIgPSB0ZXN0cGF0aAorICAgICAgICBzZWxmLnRhcmdldGRpciA9IHRlc3RwYXRoCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZXN0cGF0aCkKKyAgICAgICAgc2VsZi5kYXRldGltZSA9IGQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpCisgICAgICAgIHNlbGYudGVzdGxvZ2RpciA9IGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0bG9nZGlyKQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bG9nZGlyLCAic2RrX3RhcmdldF9sb2cuJXMiICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgQnVpbGRQcm9qZWN0Ll9faW5pdF9fKHNlbGYsIGQsIHVyaSwgZm9sZGVybmFtZSwgdG1wZGlyPXRlc3RwYXRoKQorCisgICAgZGVmIGRvd25sb2FkX2FyY2hpdmUoc2VsZik6CisKKyAgICAgICAgc2VsZi5fZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICAgICAgY21kID0gJ3RhciB4ZiAlcyVzIC1DICVzJyAlIChzZWxmLnRhcmdldGRpciwgc2VsZi5hcmNoaXZlLCBzZWxmLnRhcmdldGRpcikKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjQ2hhbmdlIHRhcmdldGRpciB0byBwcm9qZWN0IGZvbGRlcgorICAgICAgICBzZWxmLnRhcmdldGRpciA9IHNlbGYudGFyZ2V0ZGlyICsgc2VsZi5mbmFtZQorCisgICAgZGVmIHJ1bl9jb25maWd1cmUoc2VsZiwgY29uZmlndXJlX2FyZ3M9JycpOgorICAgICAgICByZXR1cm4gc3VwZXIoU0RLQnVpbGRQcm9qZWN0LCBzZWxmKS5ydW5fY29uZmlndXJlKGNvbmZpZ3VyZV9hcmdzPShjb25maWd1cmVfYXJncyBvciAnJENPTkZJR1VSRV9GTEFHUycpLCBleHRyYV9jbWRzPScgZ251LWNvbmZpZ2l6ZTsgJykKKworICAgIGRlZiBydW5faW5zdGFsbChzZWxmLCBpbnN0YWxsX2FyZ3M9JycpOgorICAgICAgICByZXR1cm4gc3VwZXIoU0RLQnVpbGRQcm9qZWN0LCBzZWxmKS5ydW5faW5zdGFsbChpbnN0YWxsX2FyZ3M9KGluc3RhbGxfYXJncyBvciAiREVTVERJUj0lcy8uLi9pbnN0YWxsIiAlIHNlbGYudGFyZ2V0ZGlyKSkKKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgorICAgICAgICBzZWxmLmxvZygiUnVubmluZyAuICVzOyAiICUgc2VsZi5zZGtlbnYgKyBjbWQpCisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoIi4gJXM7ICIgJSBzZWxmLnNka2VudiArIGNtZCwgc2hlbGw9VHJ1ZSkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC5pbmMgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDE1NjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJBIGRhZW1vbiBmb3IgZGVsaXZlcmluZyBBQ1BJIGV2ZW50cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYWNwaWQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTMzMTQwJmF0aWQ9NDA3MzQxIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2FjcGlkMi9hY3BpZC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9hY3BpZC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImFjcGlkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhY3BpZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlzZWQgLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZycgJHtXT1JLRElSfS9pbml0ID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2FjcGlkCisJY2htb2QgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hY3BpZAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hY3BpCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2V2ZW50cworCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2FjcGlkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vYWNwaWQuc2VydmljZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MGU3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2FjcGlkLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1BQ1BJIEV2ZW50IERhZW1vbgorQWZ0ZXI9c3lzbG9nLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRXhlY1N0YXJ0PUBTQklORElSQC9hY3BpZAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBmZjM4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvaW5pdApAQCAtMCwwICsxLDMxIEBACisjISAvYmluL3NoIC1lCisKK3Rlc3QgLXggL3Vzci9zYmluL2FjcGlkIHx8IGV4aXQgMAordGVzdCAtZCAvcHJvYy9hY3BpIHx8IGV4aXQgMAorbWtkaXIgLXAgL2V0Yy9hY3BpL2V2ZW50cworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZWNobyAtbiAiU3RhcnRpbmcgQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlIGRhZW1vbjogIgorICAgIGlmIFsgISAtZCAvZXRjL2FjcGkvZXZlbnRzIF07IHRoZW4KKyAgICAgICAgZWNobyAiVGhlcmUgaXMgbm90IGFueSBydWxlIGNvbmZpZ3VyYXRpb24gZmlsZS4iCisgICAgZWxzZQorICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtbyAtUyAteCAvdXNyL3NiaW4vYWNwaWQgLS0gLWMgL2V0Yy9hY3BpL2V2ZW50cworICAgICAgICBlY2hvICJhY3BpZC4iCisgICAgZmkKKyAgICA7OworICBzdG9wKQorICAgIGVjaG8gLW4gIlN0b3BwaW5nIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSBkYWVtb246ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtbyAtSyAteCAvdXNyL3NiaW4vYWNwaWQKKyAgICBlY2hvICJhY3BpZC4iCisgICAgOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpIAorICAgICQwIHN0b3AKKyAgICAkMCBzdGFydAorICAgIDs7CisgICopCisgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2FjcGlkIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKyAgICBleGl0IDEKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkXzIuMC4yMy5iYiBiL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWRfMi4wLjIzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzE3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkXzIuMC4yMy5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgYWNwaWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FjcGlkLmg7ZW5kbGluZT0yNDttZDU9MzI0YTljZjIyNWFlNjlkZGFhZDFiZjlkOTQyMTE1YjUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkN2JjZGNkZWZjZDUzYjAzNzMwZTUwYmE4NDI1NTRlYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0Mzk2YWFlYzEzNTEwYzNhMWZhYTk0MWExNWE0YjUzMzViNmFlNGZiZWM4NDM4YjkyNDliODhjM2I2NjE4N2VlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY3YmIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmIKQEAgLTAsMCArMSw2NyBAQAorIyBDb3B5cmlnaHQgTWF0dGhpYXMgSGVudGdlcyA8ZGV2ZWxAaGVudGdlcy5uZXQ+IChjKSAyMDA3CisjIExpY2Vuc2U6IE1JVCAoc2VlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCisjICAgICAgICAgICAgICAgZm9yIGEgY29weSBvZiB0aGUgbGljZW5zZSkKKyMKKyMgRmlsZW5hbWU6IGFsc2Etc3RhdGUuYmIKKworU1VNTUFSWSA9ICJBbHNhIHNjZW5hcmlvIGZpbGVzIHRvIGVuYWJsZSBhbHNhIHN0YXRlIHJlc3RvcmF0aW9uIgorREVTQ1JJUFRJT04gPSAiQWxzYSBTY2VuYXJpbyBGaWxlcyAtIGFuIGluaXQgc2NyaXB0IGFuZCBzdGF0ZSBmaWxlcyB0byByZXN0b3JlIFwKK3NvdW5kIHN0YXRlIGF0IHN5c3RlbSBib290IGFuZCBzYXZlIGl0IGF0IHN5c3RlbSBzaHV0IGRvd24uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1BWID0gIjAuMi4wIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiXAorICBmaWxlOi8vYXNvdW5kLmNvbmYgXAorICBmaWxlOi8vYXNvdW5kLnN0YXRlIFwKKyAgZmlsZTovL2Fsc2Etc3RhdGUtaW5pdCBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBBcyB0aGUgcmVjaXBlIGRvZXNuJ3QgaW5oZXJpdCBzeXN0ZW1kLmJiY2xhc3MsIHdlIG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUKKyMgbWFudWFsbHkgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcG9zdGluc3QvcHJlaW5zdCBnZW5lcmF0ZWQuCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJhbHNhLXN0YXRlIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMzkgUyAuIHN0b3AgMzEgMCA2IC4iCisKK2RvX2luc3RhbGwoKSB7CisgICAgIyBPbmx5IGluc3RhbGwgdGhlIGluaXQgc2NyaXB0IHdoZW4gJ3N5c3Zpbml0JyBpcyBpbiBESVNUUk9fRkVBVFVSRVMuCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwlzZWQgLWkgLWUgInM6I1NUQVRFRElSIzoke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhOmciICR7V09SS0RJUn0vYWxzYS1zdGF0ZS1pbml0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9hbHNhLXN0YXRlLWluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Fsc2Etc3RhdGUKKyAgICBmaQorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2EKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXNvdW5kLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8qLnN0YXRlICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhCit9CisKK1BBQ0tBR0VTICs9ICJhbHNhLXN0YXRlcyIKKworUlJFQ09NTUVORFNfYWxzYS1zdGF0ZSA9ICJhbHNhLXN0YXRlcyIKKworUkRFUEVORFNfJHtQTn0gPSAiYWxzYS11dGlscy1hbHNhY3RsIgorRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQgJHtzeXNjb25mZGlyfS9hc291bmQuY29uZiIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2Fzb3VuZC5jb25mIgorCitGSUxFU19hbHNhLXN0YXRlcyA9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhLyouc3RhdGUiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSgpIHsKKwlpZiB0ZXN0IC16ICIkRCIKKwl0aGVuCisJCWlmIHRlc3QgLXggJHtzYmluZGlyfS9hbHNhY3RsCisJCXRoZW4KKwkJCSR7c2JpbmRpcn0vYWxzYWN0bCAtZiAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhL2Fzb3VuZC5zdGF0ZSByZXN0b3JlCisJCWZpCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdCBiL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWU1OWNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS1pbml0CkBAIC0wLDAgKzEsMzkgQEAKKyMhIC9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IE1hdHRoaWFzIEhlbnRnZXMgPGRldmVsQGhlbnRnZXMubmV0PiAoYykgMjAwNworIyBMaWNlbnNlOiBHUEwgKHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dCBmb3IgYSBjb3B5IG9mIHRoZSBsaWNlbnNlKQorIworIyBGaWxlbmFtZTogYWxzYS1zdGF0ZQorIyBEYXRlOiAyMDA3MDMwOCAoWU1EKQorCisjIHNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5CisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCithc291bmRfcmVzdG9yZSgpeworCWVjaG8gIkFMU0E6IFJlc3RvcmluZyBtaXhlciBzZXR0aW5ncy4uLiIKKwlpZiB0ZXN0IC14IC91c3Ivc2Jpbi9hbHNhY3RsIC1hIC1lICNTVEFURURJUiMvYXNvdW5kLnN0YXRlCisJdGhlbgorCQkvdXNyL3NiaW4vYWxzYWN0bCAtZiAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZSByZXN0b3JlICYKKwlmaQorfQorCithc291bmRfc3RvcmUoKXsKKwllY2hvICJBTFNBOiBTdG9yaW5nIG1peGVyIHNldHRpbmdzLi4uIgorCWlmIHRlc3QgLXggL3Vzci9zYmluL2Fsc2FjdGwKKwl0aGVuCisJCS91c3Ivc2Jpbi9hbHNhY3RsIC1mICNTVEFURURJUiMvYXNvdW5kLnN0YXRlIHN0b3JlCisJZmkKK30KKworY2FzZSAiJDEiIGluCitzdGFydCkJCWFzb3VuZF9yZXN0b3JlIDs7CitzdG9wKQkJYXNvdW5kX3N0b3JlIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgL3Vzci9zYmluL2Fsc2FjdGw7CisgICAgZXhpdCAkPworICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9hbHNhLXN0YXRlIHtzdGFydHxzdG9wfHN0YXR1c30iCisgICAgZXhpdCAxCisgIDs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuY29uZiBiL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fzb3VuZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjUzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuY29uZgpAQCAtMCwwICsxIEBACisjIEdsb2JhbCBhbHNhLWxpYiBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkMWNjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fzb3VuZC5zdGF0ZQpAQCAtMCwwICsxIEBACisjIER1bW15IGZpbGUsIGRvIG5vdCBkZWxldGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmFiODIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZC5zZXJ2aWNlCkBAIC0wLDAgKzEsNyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1BZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IGRhZW1vbgorQWZ0ZXI9cmVtb3RlLWZzLnRhcmdldAorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL2RlZmF1bHQvYXBtZAorRXhlY1N0YXJ0PUBTQklORElSQC9hcG1kIC1QIEBTWVNDT05GRElSQC9hcG0vYXBtZF9wcm94eSAkQVBNRApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eSBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4ZWU0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisjIAorIyBhcG1kX3Byb3h5IC0gcHJvZ3JhbSBkaXNwYXRjaGVyIGZvciBBUE0gZGFlbW9uCisjCisjIFdyaXR0ZW4gYnkgQ3JhaWcgTWFya3dhcmR0IChjcmFpZ21AbGhlYW1haWwuZ3NmYy5uYXNhLmdvdikgMjEgTWF5IDE5OTkKKyMgTW9kaWZpZWQgZm9yIERlYmlhbiBieSBBdmVyeSBQZW5uYXJ1bgorIworIyBUaGlzIHNoZWxsIHNjcmlwdCBpcyBjYWxsZWQgYnkgdGhlIEFQTSBkYWVtb24gKGFwbWQpIHdoZW4gYSBwb3dlcgorIyBtYW5hZ2VtZW50IGV2ZW50IG9jY3Vycy4gIEl0cyBmaXJzdCBhbmQgc2Vjb25kIGFyZ3VtZW50cyBkZXNjcmliZSB0aGUKKyMgZXZlbnQuICBGb3IgZXhhbXBsZSwgYXBtZCB3aWxsIGNhbGwgImFwbWRfcHJveHkgc3VzcGVuZCBzeXN0ZW0iIGp1c3QKKyMgYmVmb3JlIHRoZSBzeXN0ZW0gaXMgc3VzcGVuZGVkLgorIworIyBIZXJlIGFyZSB0aGUgcG9zc2libGUgYXJndW1lbnRzOgorIworIyBzdGFydCAgICAgICAgICAgICAgLSBBUE0gZGFlbW9uIGhhcyBzdGFydGVkCisjIHN0b3AgICAgICAgICAgICAgICAtIEFQTSBkYWVtb24gaXMgc2h1dHRpbmcgZG93bgorIyBzdXNwZW5kIGNyaXRpY2FsICAgLSBBUE0gc3lzdGVtIGluZGljYXRlcyBjcml0aWNhbCBzdXNwZW5kICgrKykKKyMgc3VzcGVuZCBzeXN0ZW0gICAgIC0gQVBNIHN5c3RlbSBoYXMgcmVxdWVzdGVkIHN1c3BlbmQgbW9kZQorIyBzdXNwZW5kIHVzZXIgICAgICAgLSBVc2VyIGhhcyByZXF1ZXN0ZWQgc3VzcGVuZCBtb2RlCisjIHN0YW5kYnkgc3lzdGVtICAgICAtIEFQTSBzeXN0ZW0gaGFzIHJlcXVlc3RlZCBzdGFuZGJ5IG1vZGUgCisjIHN0YW5kYnkgdXNlciAgICAgICAtIFVzZXIgaGFzIHJlcXVlc3RlZCBzdGFuZGJ5IG1vZGUKKyMgcmVzdW1lIHN1c3BlbmQgICAgIC0gU3lzdGVtIGhhcyByZXN1bWVkIGZyb20gc3VzcGVuZCBtb2RlCisjIHJlc3VtZSBzdGFuZGJ5ICAgICAtIFN5c3RlbSBoYXMgcmVzdW1lZCBmcm9tIHN0YW5kYnkgbW9kZQorIyByZXN1bWUgY3JpdGljYWwgICAgLSBTeXN0ZW0gaGFzIHJlc3VtZWQgZnJvbSBjcml0aWNhbCBzdXNwZW5kCisjIGNoYW5nZSBiYXR0ZXJ5ICAgICAtIEFQTSBzeXN0ZW0gcmVwb3J0ZWQgbG93IGJhdHRlcnkKKyMgY2hhbmdlIHBvd2VyICAgICAgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCBBQy9iYXR0ZXJ5IGNoYW5nZQorIyBjaGFuZ2UgdGltZSAgICAgICAgLSBBUE0gc3lzdGVtIHJlcG9ydGVkIHRpbWUgY2hhbmdlICgqKQorIyBjaGFuZ2UgY2FwYWJpbGl0eSAgLSBBUE0gc3lzdGVtIHJlcG9ydGVkIGNvbmZpZy4gY2hhbmdlICgrKQorIworIyAoKikgLSBBUE0gZGFlbW9uIG1heSBiZSBjb25maWd1cmVkIHRvIG5vdCBjYWxsIHRoZXNlIHNlcXVlbmNlcworIyAoKykgLSBBdmFpbGFibGUgaWYgQVBNIGtlcm5lbCBzdXBwb3J0cyBpdC4KKyMgKCsrKSAtICJzdXNwZW5kIGNyaXRpY2FsIiBpcyBuZXZlciBwYXNzZWQgdG8gYXBtZCBmcm9tIHRoZSBrZXJuZWwsCisjICAgc28gd2Ugd2lsbCBuZXZlciBzZWUgaXQgaGVyZS4gIFNjcmlwdHMgdGhhdCBwcm9jZXNzICJyZXN1bWUKKyMgICBjcml0aWNhbCIgZXZlbnRzIG5lZWQgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudC4KKyMKKyMgSXQgaXMgdGhlIHByb3h5IHNjcmlwdCdzIHJlc3BvbnNpYmlsaXR5IHRvIGV4YW1pbmUgdGhlIEFQTSBzdGF0dXMKKyMgKHZpYSAvcHJvYy9hcG0pIG9yIG90aGVyIHN0YXR1cyBhbmQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb25zLgorIyBGb3IgZXhhbXBsZSwgdGhlIHNjcmlwdCBtaWdodCB1bm1vdW50IG5ldHdvcmsgZHJpdmVzIGJlZm9yZSB0aGUKKyMgbWFjaGluZSBpcyBzdXNwZW5kZWQuCisjCisjIEluIERlYmlhbiwgdGhlIHVzdWFsIHdheSBvZiBhZGRpbmcgZnVuY3Rpb25hbGl0eSB0byB0aGUgcHJveHkgaXMgdG8KKyMgYWRkIGEgc2NyaXB0IHRvIC9ldGMvYXBtL2V2ZW50LmQuICBUaGlzIHNjcmlwdCB3aWxsIGJlIGNhbGxlZCBieQorIyBhcG1kX3Byb3h5ICh2aWEgcnVuLXBhcnRzKSB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cy4KKyMKKyMgSWYgaXQgaXMgaW1wb3J0YW50IHRoYXQgYSBjZXJ0YWluIHNldCBvZiBzY3JpcHQgYmUgcnVuIGluIGEgY2VydGFpbgorIyBvcmRlciBvbiBzdXNwZW5kIGFuZCBpbiBhIGRpZmZlcmVudCBvcmRlciBvbiByZXN1bWUsIHRoZW4gcHV0IGFsbAorIyB0aGUgc2NyaXB0cyBpbiAvZXRjL2FwbS9zY3JpcHRzLmQgaW5zdGVhZCBvZiAvZXRjL2FwbS9ldmVudC5kIGFuZAorIyBzeW1saW5rIHRvIHRoZXNlIGZyb20gL2V0Yy9hcG0vc3VzcGVuZC5kLCAvZXRjL2FwbS9yZXN1bWUuZCBhbmQKKyMgL2V0Yy9hcG0vb3RoZXIuZCB1c2luZyBuYW1lcyB3aG9zZSBsZXhpY29ncmFwaGljYWwgb3JkZXIgaXMgdGhlIHNhbWUKKyMgYXMgdGhlIGRlc2lyZWQgb3JkZXIgb2YgZXhlY3V0aW9uLgorIworIyBJZiB0aGUga2VybmVsJ3MgQVBNIGRyaXZlciBzdXBwb3J0cyBpdCwgYXBtZF9wcm94eSBjYW4gcmV0dXJuIGEgbm9uLXplcm8KKyMgZXhpdCBzdGF0dXMgb24gc3VzcGVuZCBhbmQgc3RhbmRieSBldmVudHMsIGluZGljYXRpbmcgdGhhdCB0aGUgc3VzcGVuZAorIyBvciBzdGFuZGJ5IGV2ZW50IHNob3VsZCBiZSByZWplY3RlZC4KKyMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitzZXQgLWUKKworIyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgeWV0IHdvcmssIGJlY2F1c2UgY3VycmVudCBrZXJuZWxzICh1cCB0byBhdCBsZWFzdAorIyAyLjQuMjApIGRvIG5vdCBzdXBwb3J0IHJlamVjdGlvbiBvZiBBUE0gZXZlbnRzLiAgU3VwcG9ydGluZyB0aGlzIHdvdWxkCisjIHJlcXVpcmUgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgQVBNIGRyaXZlci4gIFdlIHdpbGwgcmUtZW5hYmxlCisjIHRoaXMgZmVhdHVyZSBpZiB0aGUgZHJpdmVyIGlzIGV2ZXIgbW9kaWZpZWQuICAgICAgIC0tIGNwaEBkZWJpYW4ub3JnCisjCisjU1VTUEVORF9PTl9BQz1mYWxzZQorI1sgLXIgL2V0Yy9hcG0vYXBtZF9wcm94eS5jb25mIF0gJiYgLiAvZXRjL2FwbS9hcG1kX3Byb3h5LmNvbmYKKyMKKyNpZiBbICIke1NVU1BFTkRfT05fQUN9IiA9ICJmYWxzZSIgLWEgIiR7Mn0iID0gInN5c3RlbSIgXSBcCisjCSYmIG9uX2FjX3Bvd2VyID4vZGV2L251bGw7IHRoZW4KKyMgICAgIyBSZWplY3Qgc3lzdGVtIHN1c3BlbmRzIGFuZCBzdGFuZGJ5cyBpZiB3ZSBhcmUgb24gQUMgcG93ZXIKKyMgICAgZXhpdCAxICAjIFJlamVjdCAoTk9URSBrZXJuZWwgc3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQpCisjZmkKKworaWYgWyAiJHsxfSIgPSAic3VzcGVuZCIgLW8gIiR7MX0iID0gInN0YW5kYnkiIF07IHRoZW4KKyAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9ldmVudC5kCisgICAgaWYgWyAtZCAvZXRjL2FwbS9zdXNwZW5kLmQgXTsgdGhlbgorICAgICAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9zdXNwZW5kLmQKKyAgICBmaQorZWxpZiBbICIkezF9IiA9ICJyZXN1bWUiIF07IHRoZW4KKyAgICBpZiBbIC1kIC9ldGMvYXBtL3Jlc3VtZS5kIF07IHRoZW4KKyAgICAgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vcmVzdW1lLmQKKyAgICBmaQorICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL2V2ZW50LmQKK2Vsc2UKKyAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9ldmVudC5kCisgICAgaWYgWyAtZCAvZXRjL2FwbS9vdGhlci5kIF07IHRoZW4KKyAgICAgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vb3RoZXIuZAorICAgIGZpCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZiBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTExNDVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eS5jb25mCkBAIC0wLDAgKzEsMTYgQEAKKyMgL2V0Yy9hcG0vYXBtZF9wcm94eS5jb25mOiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGFwbWQuCisjCisjIFRoaXMgZmlsZSBpcyBtYW5hZ2VkIGJ5IGRlYmNvbmYgd2hlbiBpbnN0YWxsaW5nIG9yIHJlY29uZmlndXJpbmcgdGhlCisjIHBhY2thZ2UuICBJdCBpcyBnZW5lcmF0ZWQgYnkgbWVyZ2luZyB0aGUgYW5zd2VycyBnYXRoZXJlZCBieSBkZWJjb25mCisjIGludG8gdGhlIHRlbXBsYXRlIGZpbGUgIi91c3Ivc2hhcmUvYXBtZC9hcG1kX3Byb3h5LmNvbmYiLgorCisjIFRoZSBmb2xsb3dpbmcgZG9lc24ndCB5ZXQgd29yaywgYmVjYXVzZSBjdXJyZW50IGtlcm5lbHMgKHVwIHRvIGF0IGxlYXN0CisjIDIuNC4yMCkgZG8gbm90IHN1cHBvcnQgcmVqZWN0aW9uIG9mIEFQTSBldmVudHMuICBTdXBwb3J0aW5nIHRoaXMgd291bGQKKyMgcmVxdWlyZSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBBUE0gZHJpdmVyLiAgV2Ugd2lsbCByZS1lbmFibGUKKyMgdGhpcyBmZWF0dXJlIGlmIHRoZSBkcml2ZXIgaXMgZXZlciBtb2RpZmllZC4gICAgICAgLS0gY3BoQGRlYmlhbi5vcmcKKyMKKyMgU2V0IHRoZSBmb2xsb3dpbmcgdG8gImZhbHNlIiBpZiB5b3Ugd2FudCB0byByZWplY3Qgc3lzdGVtIHN1c3BlbmQgb3IKKyMgc3lzdGVtIHN0YW5kYnkgcmVxdWVzdHMgd2hlbiB0aGUgY29tcHV0ZXIgaXMgcnVubmluZyBvbiBBQyBwb3dlci4KKyMgT3RoZXJ3aXNlIHNldCB0aGlzIHRvICJ0cnVlIi4gIFN1Y2ggcmVxdWVzdHMgYXJlIG5ldmVyIHJlamVjdGVkIHdoZW4KKyMgdGhlIGNvbXB1dGVyIGlzIHJ1bm5pbmcgb24gYmF0dGVyeSBwb3dlci4KKyNTVVNQRU5EX09OX0FDPXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2RlZmF1bHQgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzk2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9kZWZhdWx0CkBAIC0wLDAgKzEsOCBAQAorIworIyBEZWZhdWx0IGZvciAvZXRjL2luaXQuZC9hcG1kCisjCisKKyMgQXMgYXBtZCBjYW4gYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzLCB3ZSB1c2UgdGhlIGZvbGxvd2luZyB2YXJpYWJsZQorIyB0byBzdG9yZSB0aGVtLCBlLmcuLCBBUE1EPSItdyA1IC1wIDIiLgorIyBTZWUgdGhlIG1hbnVhbCBwYWdlIGFwbWQoOCkgZm9yIGRldGFpbHMuCitBUE1EPSItLXByb3h5LXRpbWVvdXQgMzAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9pbml0IGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMGI0MWFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvaW5pdApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGFwbWQKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgICRyZW1vdGVfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IGRhZW1vbgorIyMjIEVORCBJTklUIElORk8KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK1BBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KKworWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCitbIC1mIC9ldGMvZGVmYXVsdC9hcG1kIF0gJiYgLiAvZXRjL2RlZmF1bHQvYXBtZAorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKwllY2hvIC1uICJTdGFydGluZyBhZHZhbmNlZCBwb3dlciBtYW5hZ2VtZW50IGRhZW1vbjogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC14IC91c3Ivc2Jpbi9hcG1kIC0tIFwKKwkJLVAgL2V0Yy9hcG0vYXBtZF9wcm94eSAkQVBNRAorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkgICAgZWNobyAiYXBtZC4iCisJZWxzZQorCSAgICBlY2hvICIoZmFpbGVkLikiCisJZmkKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgYWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCBkYWVtb246ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyBcCisJCS14IC91c3Ivc2Jpbi9hcG1kCisJZWNobyAiYXBtZC4iCisJOzsKKyAgICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9hcG1kOworCWV4aXQgJD8KKwk7OworICAgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKSAKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwlleGl0CisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9hcG1kIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDEzMyBAQAorRnJvbSAzNTk1OTMzZDIyMWYwYmE4MzY5MTdkZWJjMDc3NmI4NzIzOTcyZWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDExIEF1ZyAyMDE1IDE3OjQwOjUwICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBQYXRjaCB3aXRoIGZpeGVzIHByb3ZpZGVkIGJ5IERlYmlhbi4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2EvYXBtZC9hcG1kXzMuMi4yLTE1LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgTWFrZWZpbGUgfCAgMiArLQorIGFwbS5jICAgIHwgIDMgKystCisgYXBtLmggICAgfCAgOSArKysrKysrKysKKyBhcG1kLmMgICB8IDE1ICsrKysrKysrLS0tLS0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGJmMzQ2ZDkuLjkyZmMwZmQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC00Myw3ICs0Myw3IEBAIERFU1RESVI9CisgCisgQ0M9Z2NjCisgQ0ZMQUdTPS1PIC1nCistWFRSQUNGTEFHUz0tV2FsbCAtcGlwZSAtSS4gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIFwKKytYVFJBQ0ZMQUdTPS1XYWxsIC1waXBlIC1JLiAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgLUkvdXNyL1gxMVI2L2luY2x1ZGUgXAorIAkJLUkvdXNyL3NyYy9saW51eC0yLjIvaW5jbHVkZSAtSSAvdXNyL3NyYy9saW51eC0yLjAvaW5jbHVkZSBcCisgCQktRFZFUlNJT049XCIkKFZFUlNJT04pXCIgXAorIAkJLURERUZBVUxUX1BST1hZX05BTUU9XCIkKFBST1hZX0RJUikvYXBtZF9wcm94eVwiCitkaWZmIC0tZ2l0IGEvYXBtLmMgYi9hcG0uYworaW5kZXggYjIxYzA1Ny4uMDM1OWIxYyAxMDA2NDQKKy0tLSBhL2FwbS5jCisrKysgYi9hcG0uYworQEAgLTIxOSwxMiArMjE5LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCX0KKyAJfQorIAkJCQkJCQkJCQkJCQkgICAgCistCisrI2lmIDAKKyAgICAgaWYgKCEoaS5hcG1fZmxhZ3MgJiBBUE1fMzJfQklUX1NVUFBPUlQpKQorICAgICB7CisgCWZwcmludGYoc3RkZXJyLCAiMzItYml0IEFQTSBpbnRlcmZhY2Ugbm90IHN1cHBvcnRlZFxuIik7CisgCWV4aXQoMSk7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgICAgaWYgKHZlcmJvc2UgJiYgKGkuYXBtX2ZsYWdzICYgMHgxMCkpCisgCXByaW50ZigiQVBNIEJJT1MgUG93ZXIgTWFuYWdlbWVudCBpcyBjdXJyZW50bHkgZGlzYWJsZWRcbiIpOworZGlmZiAtLWdpdCBhL2FwbS5oIGIvYXBtLmgKK2luZGV4IGZiMjRkZmQuLjgyNGNjMDYgMTAwNjQ0CistLS0gYS9hcG0uaAorKysrIGIvYXBtLmgKK0BAIC0yMCw2ICsyMCwxMyBAQAorICAqICRJZDogYXBtLmgsdiAxLjcgMTk5OS8wNy8wNSAyMjozMToxMSBhcGVud2FyciBFeHAgJAorICAqIAorICAqLworKyNpZm5kZWYgX0FQTV9ICisrI2RlZmluZSBfQVBNX0ggMQorKworKyNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCisrI2RlZmluZSBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCitAQCAtOTMsMyArMTAwLDUgQEAgZXh0ZXJuIGludCBhcG1fcmVqZWN0KGludCBmZCk7CisgI2Vsc2UKKyAjZGVmaW5lIGFwbV9yZWplY3QoZmQpICAgKC1FSU5WQUwpCisgI2VuZGlmCisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvYXBtZC5jIGIvYXBtZC5jCitpbmRleCA0OWVkM2ExLi41NjBmNTM2IDEwMDY0NAorLS0tIGEvYXBtZC5jCisrKysgYi9hcG1kLmMKK0BAIC0zNDMsNyArMzQzLDcgQEAgc3RhdGljIGludCBjYWxsX3Byb3h5KGFwbV9ldmVudF90IGV2ZW50KQorIAkJLyogcGFyZW50ICovCisgCQlpbnQgc3RhdHVzLCByZXR2YWw7CisgCQlzc2l6ZV90IGxlbjsKKy0JCXRpbWVfdCB0aW1lX2xpbWl0OworKwkJdGltZV90IGNvdW50ZG93bjsKKyAKKyAJCWlmIChwaWQgPCAwKSB7CisgCQkJLyogQ291bGRuJ3QgZm9yayAqLworQEAgLTM1Niw4ICszNTYsOSBAQCBzdGF0aWMgaW50IGNhbGxfcHJveHkoYXBtX2V2ZW50X3QgZXZlbnQpCisgCQkvKiBDYXB0dXJlIHRoZSBjaGlsZCdzIG91dHB1dCwgaWYgYW55LCBidXQgb25seSB1bnRpbCBpdCB0ZXJtaW5hdGVzICovCisgCQljbG9zZShmZHNbMV0pOworIAkJZmNudGwoZmRzWzBdLCBGX1NFVEZMLCBPX1JET05MWXxPX05PTkJMT0NLKTsKKy0JCXRpbWVfbGltaXQgPSB0aW1lKDApICsgcHJveHlfdGltZW91dDsKKysJCWNvdW50ZG93biA9IHByb3h5X3RpbWVvdXQ7CisgCQlkbyB7CisrCQkJY291bnRkb3duIC09IDE7CisgCQkJd2hpbGUgKChsZW4gPSByZWFkKGZkc1swXSwgbGluZSwgc2l6ZW9mKGxpbmUpLTEpKSA+IDApIHsKKyAJCQkJbGluZVtsZW5dID0gMDsKKyAJCQkJQVBNRF9TWVNMT0coTE9HX0lORk8sICIrICVzIiwgbGluZSk7CitAQCAtMzcyLDE2ICszNzMsMTYgQEAgc3RhdGljIGludCBjYWxsX3Byb3h5KGFwbV9ldmVudF90IGV2ZW50KQorIAkJCQlnb3RvIHByb3h5X2RvbmU7CisgCQkJfQorIAkJCQkKKy0JCQlzbGVlcCgxKTsKKysJCQl3aGlsZSAoc2xlZXAoMSkgPiAwKSA7CisgCQl9IHdoaWxlICgKKy0JCQkodGltZSgwKSA8IHRpbWVfbGltaXQpCisrCQkJKGNvdW50ZG93biA+PSAwKQorIAkJCXx8IChwcm94eV90aW1lb3V0IDwgMCkKKyAJCSk7CisgCisgCQlBUE1EX1NZU0xPRyhMT0dfTk9USUNFLCAiUHJveHkgaGFzIGJlZW4gcnVubmluZyBtb3JlIHRoYW4gJWQgc2Vjb25kczsga2lsbGluZyBpdCIsIHByb3h5X3RpbWVvdXQpOworIAorIAkJa2lsbChwaWQsIFNJR1RFUk0pOworLQkJdGltZV9saW1pdCA9IHRpbWUoMCkgKyA1OworKwkJY291bnRkb3duID0gNTsKKyAJCWRvIHsKKyAJCQlyZXR2YWwgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgV05PSEFORyk7CisgCQkJaWYgKHJldHZhbCA9PSBwaWQpCitAQCAtMzkyLDkgKzM5Myw5IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCQkJZ290byBwcm94eV9kb25lOworIAkJCX0KKyAKKy0JCQlzbGVlcCgxKTsKKysJCQl3aGlsZSAoc2xlZXAoMSkgPiAwKSA7CisgCistCQl9IHdoaWxlICh0aW1lKDApIDwgdGltZV9saW1pdCk7CisrCQl9IHdoaWxlIChjb3VudGRvd24gPj0gMCk7CisgCisgCQlraWxsKHBpZCwgU0lHS0lMTCk7CisgCQlzdGF0dXMgPSBfX1dfRVhJVENPREUoMCwgU0lHS0lMTCk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNGVlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCBieSBSUCB0byBhZGRyZXNzICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iIGVycm9yOgorICAgY29tbWl0IDM1ZGUwNWU2MWI4OGMwODA4YTVlODg1YmIwZWZkZjQyMDU1NWQ1YWQKKyAgIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PgorICAgRGF0ZTogICBTdW4gSnVuIDEgMTY6MTM6MzggMjAwOCArMDAwMAorCisgICBhcG1kOiBVc2UgbGlidG9vbCAtLXRhZyBvcHRpb25zIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggbGlidG9vbCAyLjIuNCAoZnJvbSBwb2t5KQorCitIb3dldmVyIEkgZGlkbid0IHNlZSBzYW1lIGlzc3VlIHdpdGggY3VycmVudCBsaWJ0b29sLTIuMi4xMC4gQWxzbyBwZXIgbXkgdW5kZXJzdGFuZGluZywKK3RoZSBkZWZhdWx0IHRhZywgaWYgbm90IHNwZWNpZmllZCwgZmFsbHMgYmFjayB0byBDQy4gU28gZGlzYWJsZSBpdCBmcm9tIHBhdGNoaW5nLCBidXQKK2tlZXAgaXQgaGVyZS4gSWYgd2UgZW5jb3VudGVyIHNpbWlsYXIgaXNzdWUgaW4gdGhlIGZ1dHVyZSwgd2UgY291bGQgdGhlbiBwdXNoIHVwc3RyZWFtCisKK0NvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA3LTE2CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGFwbWQtMy4yLjIub3JpZy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwbWQtMy4yLjIub3JpZy5vcmlnL01ha2VmaWxlCTIwMDQtMDEtMDQgMDg6MTM6MTguMDAwMDAwMDAwICswMDAwCisrKysgYXBtZC0zLjIuMi5vcmlnL01ha2VmaWxlCTIwMDgtMDQtMjEgMTc6MTA6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtNTgsOSArNTcsOCBAQAorICNDRkxBR1M9LU8zIC1tNDg2IC1mb21pdC1mcmFtZS1wb2ludGVyCisgI0xERkxBR1M9LXMKKyAKKy1MSUJUT09MPWxpYnRvb2wgLS1xdWlldAorLUxUX0NPTVBJTEUgPSAkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ0MpCistTFRfTElOSyA9ICQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykKKytMVF9DT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKQorK0xUX0xJTksgPSAkKExJQlRPT0wpICAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDKQorIExUX0lOU1RBTEwgPSAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIGluc3RhbGwKKyBMVF9DTEVBTiA9ICQoTElCVE9PTCkgLS1tb2RlPWNsZWFuIHJtCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC91bmxpbnV4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvdW5saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzgyMDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvdW5saW51eC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitjb3B5IE9FIGNvbW1pdCBtZXNzYWdlIGhlcmU6CisgICBjb21taXQgOTQ1NmNkYzFjZjQzZTNiYTllNmQ4OGM2MzU2MGMxYjZmZGVlNDM1OQorICAgQXV0aG9yOiBNaWNoYWVsIEtyZWxpbiA8aGFja2VyQGtsZXZlci5uZXQ+CisgICBEYXRlOiAgIFR1ZSBNYXkgMjkgMTI6Mjc6NDUgMjAwNyArMDAwMAorCisgICBhcG1kOiBwcmV2ZW50IGJ1aWxkIGZyb20gaW50ZXJmZXJyaW5nIHdpdGggaG9zdCBrZXJuZWwgaGVhZGVycy4gQ2xvc2VzICMxMjU3CisKK2NvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA3LTEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGFwbWQtMy4yLjIub3JpZy9NYWtlZmlsZQorKysrIGFwbWQtMy4yLjIvTWFrZWZpbGUKK0BAIC00Myw4ICs0Myw3IEBACisgCisgQ0M9Z2NjCisgQ0ZMQUdTPS1PIC1nCistWFRSQUNGTEFHUz0tV2FsbCAtcGlwZSAtSS4gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIC1JL3Vzci9YMTFSNi9pbmNsdWRlIFwKKy0JCS1JL3Vzci9zcmMvbGludXgtMi4yL2luY2x1ZGUgLUkgL3Vzci9zcmMvbGludXgtMi4wL2luY2x1ZGUgXAorK1hUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIFwKKyAJCS1EVkVSU0lPTj1cIiQoVkVSU0lPTilcIiBcCisgCQktRERFRkFVTFRfUFJPWFlfTkFNRT1cIiQoUFJPWFlfRElSKS9hcG1kX3Byb3h5XCIKKyBMREZMQUdTPQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWRfMy4yLjItMTUuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZF8zLjIuMi0xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTEwNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWRfMy4yLjItMTUuYmIKQEAgLTAsMCArMSw3NiBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQiCitERVNDUklQVElPTiA9ICJUaGUgQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCAoQVBNKSBzdXBwb3J0IHByb3ZpZGVzIFwKK2FjY2VzcyB0byBiYXR0ZXJ5IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgYSBzZXQgb2YgdG9vbHMgZm9yIG1hbmFnaW5nIFwKK25vdGVib29rIHBvd2VyIGNvbnN1bXB0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9hcGVud2Fyci5jYS9hcG1kLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBtLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0xODttZDU9N2Q0YWNjMTI1MDkxMGE4OWY4NGNlM2NjNjU1N2M0YzIiCitERVBFTkRTID0gImxpYnRvb2wtY3Jvc3MiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXBtZC9hcG1kXzMuMi4yLm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGZpbGU6Ly9sZWdhY3kucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91bmxpbnV4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9hcG1kX3Byb3h5IFwKKyAgICAgICAgICAgZmlsZTovL2FwbWRfcHJveHkuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9hcG1kLnNlcnZpY2UiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImIxZTYzMDllODMzMWUwZjRlNmVmZDMxMWMyZDk3ZmE4IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiN2Y3ZDlmNjBiNzc2NmI4NTI4ODFkNDBiOGZmOTFkOGUzOWZjY2IwZDFkOTEzMTAyYTVjNzVhMmRiYjUyMzMyZCIKKworUyA9ICIke1dPUktESVJ9L2FwbWQtMy4yLjIub3JpZyIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJhcG1kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhcG1kLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBhcG1kIGRvZXNuJ3QgdXNlIHdob2xlIGF1dG90b29scy4gSnVzdCBsaWJ0b29sIGZvciBpbnN0YWxsYXRpb24KKwlvZV9ydW5tYWtlICJMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wiIGFwbSBhcG1kCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vZXZlbnQuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL290aGVyLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9zdXNwZW5kLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9yZXN1bWUuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL3NjcmlwdHMuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBtZAorCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKworCWluc3RhbGwgLW0gNDc1NSAke1N9Ly5saWJzL2FwbSAke0R9JHtiaW5kaXJ9L2FwbQorCWluc3RhbGwgLW0gMDc1NSAke1N9Ly5saWJzL2FwbWQgJHtEfSR7c2JpbmRpcn0vYXBtZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2FwbWRfcHJveHkgJHtEfSR7c3lzY29uZmRpcn0vYXBtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2FwbWRfcHJveHkuY29uZiAke0R9JHtkYXRhZGlyfS9hcG1kLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9hcG1kCisJb2VfbGliaW5zdGFsbCAtc28gbGliYXBtICR7RH0ke2xpYmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgYXBtLmggJHtEfSR7aW5jbHVkZWRpcn0KKworCXNlZCAtZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnOyBzLC9ldGMsJHtzeXNjb25mZGlyfSxnOycgJHtXT1JLRElSfS9pbml0ID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2FwbWQKKwljaG1vZCA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2FwbWQKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hcG1kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJc2VkIC1pIC1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vYXBtZC5zZXJ2aWNlCit9CisKK1BBQ0tBR0VTID0rICJsaWJhcG0gYXBtIgorCitGSUxFU19saWJhcG0gPSAiJHtsaWJkaXJ9L2xpYmFwbSR7U09MSUJTfSIKK0ZJTEVTX2FwbSA9ICIke2JpbmRpcn0vYXBtKiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmEwMmFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2VlZS1hY3BpLXNjcmlwdHNfZ2l0LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiZWVlUEMgc3BlY2lmaWMgQUNQSSBzY3JpcHRzIgorSE9NRVBBR0UgPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL2RlYmlhbi1lZWVwYy8iCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT03N2VmODNhYjVmNGFmOTM4YTkzZWRiNjFmN2I3NGYyYyIKKworU1JDUkVWID0gIjlkNGNkZWRjYTI1YjM5NjQwNWY4NTg3ZjljNGZiZjgyMjllMDQxYzIiCitQViA9ICIxLjEuMTIrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlYmlhbi5vcmcvZ2l0L2RlYmlhbi1lZWVwYy9lZWVwYy1hY3BpLXNjcmlwdHMuZ2l0IFwKKwkgICBmaWxlOi8vcmVtb3ZlLWRvYy1jaGVjay5wYXRjaCBcCisJICAgZmlsZTovL3Bvd2VyYnRuLnBhdGNoIFwKKwkgICBmaWxlOi8vcG9saWN5LWZ1bmNzICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZWVlcGMtYWNwaS1zY3JpcHRzIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGVmYXVsdC8gXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hY3BpLyIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0LworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9hY3Rpb25zLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9ldmVudHMvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2xpYi91ZGV2L3J1bGVzLmQKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2VlZXBjLWFjcGktc2NyaXB0cy8KKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FjcGktc3VwcG9ydC8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2V2ZW50cy8qICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvZXZlbnRzLworCWluc3RhbGwgLW0gNjQ0ICR7U30vbGliL3VkZXYvcnVsZXMuZC8qICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvbGliL3VkZXYvcnVsZXMuZC8KKwlpbnN0YWxsICR7U30vYWN0aW9ucy8qICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvYWN0aW9ucy8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9hY3BpbGliL2Z1bmN0aW9ucy5zaCAke0R9JHtkYXRhZGlyfS9lZWVwYy1hY3BpLXNjcmlwdHMvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcG9saWN5LWZ1bmNzICR7RH0ke2RhdGFkaXJ9L2FjcGktc3VwcG9ydC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kZWJpYW4vZWVlcGMtYWNwaS1zY3JpcHRzLmRlZmF1bHQqICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvCit9CisKK1JERVBFTkRTXyR7UE59ID0gInBtLXV0aWxzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG9saWN5LWZ1bmNzIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3BvbGljeS1mdW5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDA5OWRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3BvbGljeS1mdW5jcwpAQCAtMCwwICsxLDggQEAKK0NoZWNrUG9saWN5KCkgeworCWlmIHBpZG9mIGdub21lLXBvd2VyLW1hbmFnZXIga3Bvd2Vyc2F2ZSA+IC9kZXYvbnVsbCB8fAorCSAgIChwaWRvZiBkY29wc2VydmVyID4gL2Rldi9udWxsICYmIHRlc3QgLXggL3Vzci9iaW4vZGNvcCAmJiAvdXNyL2Jpbi9kY29wIGtkZWQga2RlZCBsb2FkZWRNb2R1bGVzIHwgZ3JlcCAtcSBrbGFwdG9wZGFlbW9uKSA7IHRoZW4KKwkJZWNobyAwOworCWVsc2UKKwkJZWNobyAxOworCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzZTU1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb3dlcmJ0bi5wYXRjaApAQCAtMCwwICsxLDIyIEBACistLS0KKyBhY3Rpb25zL3Bvd2VyLnNoIHwgICAgMyArKysKKyBldmVudHMvcG93ZXJidG4gIHwgICAgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW5hYmxlIGZlYXR1cmVdCisKK0luZGV4OiBnaXQvZXZlbnRzL3Bvd2VyYnRuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2l0L2V2ZW50cy9wb3dlcmJ0bgkyMDA4LTEwLTA4IDE3OjQzOjM1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyIEBACisrZXZlbnQ9YnV0dG9uL3Bvd2VyIFBXUkYKKythY3Rpb249L2V0Yy9hY3BpL2FjdGlvbnMvcG93ZXIuc2gKK0luZGV4OiBnaXQvYWN0aW9ucy9wb3dlci5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9hY3Rpb25zL3Bvd2VyLnNoCTIwMDgtMTAtMDggMTc6NDU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDMgQEAKKysjIS9iaW4vc2gKKysKKysvc2Jpbi9zaHV0ZG93biAtaCBub3cgIlBvd2VyIGJ1dHRvbiBwcmVzc2VkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcmVtb3ZlLWRvYy1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmIzZGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorLS0tCisgYWN0aW9ucy9ob3RrZXkuc2ggICAgIHwgICAgMyAtLS0KKyBhY3Rpb25zL3N1c3BlbmQuc2ggICAgfCAgICAzIC0tLQorIGFjdGlvbnMvdmdhLXRvZ2dsZS5zaCB8ICAgIDMgLS0tCisgYWN0aW9ucy92b2x1bWUuc2ggICAgIHwgICAgMyAtLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDEyIGRlbGV0aW9ucygtKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnaXQvZWVlcGMtYWNwaS1zY3JpcHRzL3ZvbHVtZS5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gJMjAxMS0xMS0yOSAxOToyMTo1NS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnaXQvZWVlcGMtYWNwaS1zY3JpcHRzL3ZvbHVtZS5zaAkyMDExLTExLTI5IDE5OjQxOjM2LjAwMDAwMDAwMCArMDgwMAorQEAgLTMsMTIgKzMsMTAgQEAKKyBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYyBdIHx8IFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLXdtaSBdIHx8IGV4aXQgMAorICMgVm9sdW1lIGNvbnRyb2xzCisgCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyAuICRGVU5DX0xJQgorIC4gJFBLR19ESVIvbGliL3NvdW5kLnNoCitJbmRleDogZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy9ob3RrZXkuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy9ob3RrZXkuc2gJMjAxMS0xMS0yOSAxOTozOTo1MS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDEyICsxLDEwIEBACisgIyEvYmluL3NoCisgCisgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMgXSB8fCBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy13bWkgXSB8fCBleGl0IDAKKy0jIGRvIG5vdGhpbmcgaWYgcGFja2FnZSBpcyByZW1vdmVkCisgUEtHPWVlZXBjLWFjcGktc2NyaXB0cworIFBLR19ESVI9L3Vzci9zaGFyZS9hY3BpLXN1cHBvcnQvJFBLRworIEZVTkNfTElCPSRQS0dfRElSL2xpYi9mdW5jdGlvbnMuc2gKKyBERUZBVUxUPS9ldGMvZGVmYXVsdC8kUEtHCistWyAtZSAiJEZVTkNfTElCIiBdIHx8IGV4aXQgMAorIAorIGNhc2UgJChydW5sZXZlbCkgaW4KKyAgICAgKjB8KjYpCitJbmRleDogZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWVlcGMtYWNwaS1zY3JpcHRzL3ZnYS10b2dnbGUuc2gJMjAxMS0xMS0yOSAxOToyMTo1NS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnaXQvZWVlcGMtYWNwaS1zY3JpcHRzL3ZnYS10b2dnbGUuc2gJMjAxMS0xMS0yOSAxOTo0MDoyNC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDEyICsxLDEwIEBACisgIyEvYmluL3NoCisgCisgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMgXSB8fCBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy13bWkgXSB8fCBleGl0IDAKKy0jIGRvIG5vdGhpbmcgaWYgcGFja2FnZSBpcyByZW1vdmVkCisgUEtHPWVlZXBjLWFjcGktc2NyaXB0cworIFBLR19ESVI9L3Vzci9zaGFyZS9hY3BpLXN1cHBvcnQvJFBLRworIEZVTkNfTElCPSRQS0dfRElSL2xpYi9mdW5jdGlvbnMuc2gKKyBERUZBVUxUPS9ldGMvZGVmYXVsdC8kUEtHCistWyAtZSAiJEZVTkNfTElCIiBdIHx8IGV4aXQgMAorIAorIGlmIFsgLWUgIiRERUZBVUxUIiBdOyB0aGVuIC4gIiRERUZBVUxUIjsgZmkKKyAuICRGVU5DX0xJQgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDEwNjZkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9jb25maWcKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisKK2lmIFsgLWUgL2V0Yy9mb3JtZmFjdG9yL21hY2hjb25maWcgXTsgdGhlbgorICAgIC4gL2V0Yy9mb3JtZmFjdG9yL21hY2hjb25maWcKK2ZpCisKK2lmIFsgLXogIiRIQVZFX1RPVUNIU0NSRUVOIiBdOyB0aGVuCisgICAgSEFWRV9UT1VDSFNDUkVFTj0wCitmaQorCitpZiBbIC16ICIkSEFWRV9LRVlCT0FSRCIgXTsgdGhlbgorICAgIEhBVkVfS0VZQk9BUkQ9MAorZmkKKworaWYgWyAteiAiJEhBVkVfS0VZQk9BUkRfUE9SVFJBSVQiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEX1BPUlRSQUlUPTAKK2ZpCisKK2lmIFsgLXogIiRIQVZFX0tFWUJPQVJEX0xBTkRTQ0FQRSIgXTsgdGhlbgorICAgIEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFPTAKK2ZpCisKK2lmIFsgLXogIiRESVNQTEFZX0NBTl9ST1RBVEUiIF07IHRoZW4KKyAgICBESVNQTEFZX0NBTl9ST1RBVEU9MAorZmkKKworaWYgWyAteiAiJERJU1BMQVlfT1JJRU5UQVRJT04iIF07IHRoZW4KKyAgICBESVNQTEFZX09SSUVOVEFUSU9OPTAKK2ZpCisKK2lmIFsgLWUgIi9kZXYvZmIiIF07IHRoZW4KKyAgICBpZiBbIC16ICIkRElTUExBWV9XSURUSF9QSVhFTFMiIF07IHRoZW4KKyAgICAgICAgRElTUExBWV9XSURUSF9QSVhFTFM9YC91c3Ivc2Jpbi9mYnNldCB8IGdyZXAgZ2VvbWV0cnkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdgCisgICAgZmkKKworICAgIGlmIFsgLXogIiRESVNQTEFZX0hFSUdIVF9QSVhFTFMiIF07IHRoZW4KKyAgICAgICAgRElTUExBWV9IRUlHSFRfUElYRUxTPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQzIH0nYAorICAgIGZpCisKKyAgICBpZiBbIC16ICIkRElTUExBWV9CUFAiIF07IHRoZW4KKyAgICAgICAgRElTUExBWV9CUFA9YC91c3Ivc2Jpbi9mYnNldCB8IGdyZXAgZ2VvbWV0cnkgfCBhd2sgJ3sgcHJpbnQgJDYgfSdgCisgICAgZmkKK2ZpCisKKyMgCisjIE5vIHdheSB0byBndWVzcyB0aGVzZSBvciBoYXZlIGFueSBkZWZhdWx0cworIworI0RJU1BMQVlfV0lEVEhfTU0KKyNESVNQTEFZX0hFSUdIVF9NTQorI0RJU1BMQVlfU1VCUElYRUxfT1JERVI9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvbWFjaGNvbmZpZyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvbWFjaGNvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm0vbWFjaGNvbmZpZyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtL21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjYvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ny9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVtaXBzL21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdW1pcHMvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Njc3N2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVtaXBzL21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKK0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorI0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVwcGMvbWFjaGNvbmZpZyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11cHBjL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWVhMjI3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11cHBjL21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKK0RJU1BMQVlfV0lEVEhfUElYRUxTPTgwMAorRElTUExBWV9IRUlHSFRfUElYRUxTPTYwMAorRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni02NC9tYWNoY29uZmlnIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYtNjQvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYtNjQvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2L21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzBiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJEZXZpY2UgZm9ybWZhY3RvciBpbmZvcm1hdGlvbiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQUiA9ICJyNDUiCisKK1NSQ19VUkkgPSAiZmlsZTovL2NvbmZpZyBmaWxlOi8vbWFjaGNvbmZpZyIKK1MgPSAiJHtXT1JLRElSfSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisJIyBJbnN0YWxsIGZpbGUgb25seSBpZiBpdCBoYXMgY29udGVudHMKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKwlpZiBbIC1zICIke1N9L21hY2hjb25maWciIF07IHRoZW4KKwkgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L21hY2hjb25maWcgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkMTI4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA4YTM1NmQ0YjZhMjQyY2U2M2I3MzkyMGQzZWQzM2Y4OGY5ZTEyZmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDYgU2VwIDIwMTUgMDU6MjA6NDMgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ251LWVmaTogTWFrZSBzZXRqbXAuUyBwb3J0YWJsZSB0byBBUk0KKworVGhpcyBwYXRjaCBmaXhlcyB0aGUgZm9sbG93aW5nIGVycm9yOgorCisgIC4uLi9saWIvYXJtL3NldGptcC5TOjE4OiBFcnJvcjogdW5yZWNvZ25pemVkIHN5bWJvbCB0eXBlICIiCisgIC4uLi9saWIvYXJtL3NldGptcC5TOjI2OiBFcnJvcjogdW5yZWNvZ25pemVkIHN5bWJvbCB0eXBlICIiCisKK1RoZSBwcm9ibGVtIGlzIHRoZSBhc3NlbWJseSBzeW50YXggdGhhdCBpcyB1c2VkIGlzIG5vdCBwb3J0YWJsZSB0byBBUk0sCit3aGVyZSB0aGUgJ0AnIHN5bWJvbCBpcyBhIGNvbW1lbnQ6CisKKyAgPiBOb3RlIG9uIHRhcmdldHMgd2hlcmUgdGhlIEAgY2hhcmFjdGVyIGlzIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQKKyAgPiAoZWcgQVJNKSB0aGVuIGFub3RoZXIgY2hhcmFjdGVyIGlzIHVzZWQgaW5zdGVhZC4gRm9yIGV4YW1wbGUgdGhlCisgID4gQVJNIHBvcnQgdXNlcyB0aGUgJSBjaGFyYWN0ZXIuCisKKyhGcm9tIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYmludXRpbHMvZG9jcy0yLjI1L2FzL1NlY3Rpb24uaHRtbCNTZWN0aW9uKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvYXJtL3NldGptcC5TIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9hcm0vc2V0am1wLlMgYi9saWIvYXJtL3NldGptcC5TCitpbmRleCA2ZTNmYmYwLi44NWM4NzA1IDEwMDY0NAorLS0tIGEvbGliL2FybS9zZXRqbXAuUworKysrIGIvbGliL2FybS9zZXRqbXAuUworQEAgLTE1LDcgKzE1LDcgQEAgQkFTSVMsCisgCS50ZXh0CisgCS5hcm0KKyAJLmdsb2JsCXNldGptcAorLQkudHlwZQlzZXRqbXAsIEBmdW5jdGlvbgorKwkudHlwZQlzZXRqbXAsICVmdW5jdGlvbgorIHNldGptcDoKKyAJbW92CXIzLCByMTMKKyAJc3RtaWEJcjAsIHtyMy1yMTIscjE0fQorQEAgLTIzLDYgKzIzLDYgQEAgc2V0am1wOgorIAlieAlscgorIAorIAkuZ2xvYmwJbG9uZ2ptcAorLQkudHlwZQlsb25nam1wLCBAZnVuY3Rpb24KKysJLnR5cGUJbG9uZ2ptcCwgJWZ1bmN0aW9uCisgbG9uZ2ptcDoKKyAJbGRtaWEJcjAsIHtyMy1yMTIscjE0fQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjJhZTFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDBkYWEzNTRhMTZhYTNjYWRlNTZlZDQyM2QwZjhhMDRjZjFjMjJmOWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjMgQXByIDIwMTUgMDE6NDk6MzEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliL01ha2VmaWxlOiBmaXggcGFyYWxsZWwgaXNzdWUKKworRml4ZWQ6CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvcnRsb2NrLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgcnVudGltZS9ydGRhdGEubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBydW50aW1lL3ZtLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgcnVudGltZS9lZmlydGxpYi5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9NYWtlZmlsZSB8ICAgIDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKK2luZGV4IGRjNGI5NGEuLmY2NGQxZWQgMTAwNjQ0CistLS0gYS9saWIvTWFrZWZpbGUKKysrKyBiL2xpYi9NYWtlZmlsZQorQEAgLTczLDYgKzczLDggQEAgYWxsOiBsaWJzdWJkaXJzIGxpYmVmaS5hCisgbGlic3ViZGlyczoKKyAJZm9yIHNkaXIgaW4gJChTVUJESVJTKTsgZG8gbWtkaXIgLXAgJCRzZGlyOyBkb25lCisgCisrJChPQkpTKTogbGlic3ViZGlycworKworIGxpYmVmaS5hOiAkKE9CSlMpCisgCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9wYXJhbGxlbC1tYWtlLWFyY2hpdmVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI0N2MxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGaXggcGFyYWxsZWwgbWFrZSBmYWlsdXJlIGZvciBhcmNoaXZlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIGxpYiBhbmQgZ251ZWZpIG1ha2VmaWxlcyB3ZXJlIHVzaW5nIHRoZSBsaWIuYSgpIGZvcm0gd2hpY2ggY29tcGlsZXMKK2FuZCBhcidzIGFzIGEgcGFpciBpbnN0ZWFkIG9mIGNvbXBpbGluZyBhbGwgYW5kIHRoZW4gYXInaW5nIHdoaWNoIGNhbgorcGFyYWxsZWxpemUgYmV0dGVyLiBUaGlzIHdhcyByZXN1bHRpbmcgaW4gYnVpbGQgZmFpbHVyZXMgb24gbGFyZ2VyIHZhbHVlcworb2YgLWouCisKK1NlZSBodHRwOi8vd3d3LmNoZW1pZS5mdS1iZXJsaW4uZGUvY2hlbW5ldC91c2UvaW5mby9tYWtlL21ha2VfdG9jLmh0bWwjVE9DMTA1Citmb3IgZGV0YWlscy4KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKy0tLQorIGdudWVmaS9NYWtlZmlsZSB8ICAgIDMgKystCisgbGliL01ha2VmaWxlICAgIHwgICAgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdudS1lZmktMy4wL2xpYi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1lZmktMy4wLm9yaWcvbGliL01ha2VmaWxlCisrKysgZ251LWVmaS0zLjAvbGliL01ha2VmaWxlCitAQCAtNjYsNyArNjYsOCBAQCBhbGw6IGxpYnN1YmRpcnMgbGliZWZpLmEKKyBsaWJzdWJkaXJzOgorIAlmb3Igc2RpciBpbiAkKFNVQkRJUlMpOyBkbyBta2RpciAtcCAkJHNkaXI7IGRvbmUKKyAKKy1saWJlZmkuYTogJChwYXRzdWJzdCAlLGxpYmVmaS5hKCUpLCQoT0JKUykpCisrbGliZWZpLmE6ICQoT0JKUykKKysJJChBUikgcnYgJEAgJChPQkpTKQorIAorIGNsZWFuOgorIAlybSAtZiBsaWJlZmkuYSAqfiAkKE9CSlMpICovKi5vCitJbmRleDogZ251LWVmaS0zLjAvZ251ZWZpL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251LWVmaS0zLjAub3JpZy9nbnVlZmkvTWFrZWZpbGUKKysrKyBnbnUtZWZpLTMuMC9nbnVlZmkvTWFrZWZpbGUKK0BAIC01MSw3ICs1MSw4IEBAIFRBUkdFVFMJPSBjcnQwLWVmaS0kKEFSQ0gpLm8gbGliZ251ZWZpLmEKKyAKKyBhbGw6CSQoVEFSR0VUUykKKyAKKy1saWJnbnVlZmkuYTogJChwYXRzdWJzdCAlLGxpYmdudWVmaS5hKCUpLCQoT0JKUykpCisrbGliZ251ZWZpLmE6ICQoT0JKUykKKysJJChBUikgcnYgJEAgJChPQkpTKQorIAorIGNsZWFuOgorIAlybSAtZiAkKFRBUkdFVFMpICp+ICoubyAkKE9CSlMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuMy5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpXzMuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWJhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuMy5iYgpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIkxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIEVGSSBiaW5hcmllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ251LWVmaS8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MisgfCBCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9nbnVlZmkvY3J0MC1lZmktYXJtLlM7YmVnaW5saW5lPTQ7ZW5kbGluZT05O21kNT0yMjQwZDdiYmRmMDkyODI5NGMyZjRhNjhiMTRkNjU5MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbnVlZmkvY3J0MC1lZmktYWFyY2g2NC5TO2JlZ2lubGluZT00O2VuZGxpbmU9MTY7bWQ1PWU1ODI3NjRhNDc3NmU2MGM5NWJmOWFiNjE3MzQzZDM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luYy9lZmlzaGVsbGludGYuaDtiZWdpbmxpbmU9MTM7ZW5kbGluZT0yMDttZDU9MjAyNzY2Yjc5ZDcwOGVmZjNjYzcwZmNlMTVmYjgwYzcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jL2VmaXNoZWxscGFybS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MTE7bWQ1PTQ2OGIxMjMxYjA1YmJjODRiYWUzYTBkNTc3NGUzYmI1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vZGl2NjQuUztiZWdpbmxpbmU9NjtlbmRsaW5lPTEyO21kNT1hOTZjODRmNWFkMTJiNGYwMTFmOThiNWQwMzkyNDJmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL21hdGguYztiZWdpbmxpbmU9NDtlbmRsaW5lPTEwO21kNT02NGRkMTk4N2NlZTFkY2Y1OWQxMWFhNTcyY2ZhNjQ0ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2luaXRwbGF0LmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMDttZDU9NjRkZDE5ODdjZWUxZGNmNTlkMTFhYTU3MmNmYTY0NGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9saWIxZnVuY3MuUztiZWdpbmxpbmU9OTtlbmRsaW5lPTMzO21kNT1mNTZkNWViYmM4NzEzNmJjNjZjZmUyNGRiODJiY2YwMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYWFyY2g2NC9tYXRoLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9Y2ZhZGU0YzU2MGUwMzNhN2JiMDJkYWIyODI4NzJjN2QgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FhcmNoNjQvaW5pdHBsYXQuYztiZWdpbmxpbmU9OTtlbmRsaW5lPTMzO21kNT05MDBjYjFmZmJlM2UxZGVkMzQ0MTAyYmU5MjE4MzBmMSBcCisgICAgICAgICAgICAgICAgICAgIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlLWFyY2hpdmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYi1NYWtlZmlsZS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTVhNGJjYmMxOGE5YTVlODExMGVkOTU1OTcwNjIyZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzUzMGYyMWExNWZkOWMyMTRkZDkyZDI5YTZjYWEyMGZhYzk4OTI4OTI2NzUxMjAyMGI2ZGExZjVlNmY1YjRjYiIKKworQ09NUEFUSUJMRV9IT1NUID0gIih4ODZfNjQuKnxpLjg2Lip8YWFyY2g2NC4qfGFybS4qKS1saW51eCIKKworZGVmIGdudV9lZmlfYXJjaChkKToKKyAgICBpbXBvcnQgcmUKKyAgICB0YXJjaCA9IGQuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpCisgICAgaWYgcmUubWF0Y2goImlbMzQ1Njc4OV04NiIsIHRhcmNoKToKKyAgICAgICAgcmV0dXJuICJpYTMyIgorICAgIHJldHVybiB0YXJjaAorCitFWFRSQV9PRU1BS0UgPSAiJ0FSQ0g9JHtAZ251X2VmaV9hcmNoKGQpfScgJ0NDPSR7Q0N9JyAnQVM9JHtBU30nICdMRD0ke0xEfScgJ0FSPSR7QVJ9JyBcCisgICAgICAgICAgICAgICAgJ1JBTkxJQj0ke1JBTkxJQn0nICdPQkpDT1BZPSR7T0JKQ09QWX0nICdQUkVGSVg9JHtwcmVmaXh9JyAnTElCRElSPSR7bGliZGlyfScgXAorICAgICAgICAgICAgICAgICIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExST09UPSIke0R9IgorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyoubGRzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1nbGliYy0yLjIwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YWFhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1nbGliYy0yLjIwLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMjc1ZmUwMjY5ZWNjMDBhZjQ3ODhhZmFmOWRjMTUxYTUwYjI1NjQ1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDI4IEF1ZyAyMDE0IDE5OjI2OjE0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIGdsaWJjIDIuMjAKKworKiBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmM6IHNxdWFoZXMgYmVsb3cgd2FybmluZworICB3YXJuaW5nOiAjd2FybmluZyAiX0JTRF9TT1VSQ0UgYW5kIF9TVklEX1NPVVJDRSBhcmUgZGVwcmVjYXRlZCwgdXNlIF9ERUZBVUxUX1NPVVJDRSIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworLS0tCisgZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitpbmRleCA3ZTcyNWY2Li44ZGQ4ZTY1IDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKK0BAIC0xOSw3ICsxOSw3IEBACisgCisgI2luY2x1ZGUgPGNvbmZpZy11dGlsLmg+CisgCistI2RlZmluZSBfQlNEX1NPVVJDRQorKyNkZWZpbmUgX0RFRkFVTFRfU09VUkNFCisgI2luY2x1ZGUgPGdydWIvZnMuaD4KKyAjaW5jbHVkZSA8Z3J1Yi9maWxlLmg+CisgI2luY2x1ZGUgPGdydWIvZGlzay5oPgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGMxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2dudWxpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KKysrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2dudWxpYi9NYWtlZmlsZS5hbQorQEAgLTQxMCw3ICs0MTAsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLXBhcnNlX2RoY3BfdmVuZG9yLUFkZC1taXNzaW5nLWNvbnN0LXF1YWxpZmllcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1ZTNlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLXBhcnNlX2RoY3BfdmVuZG9yLUFkZC1taXNzaW5nLWNvbnN0LXF1YWxpZmllcnMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitPcmlnaW5hbCBjb21taXQ6IGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2dydWIuZ2l0L2NvbW1pdC9ncnViLWNvcmUvbmV0L2Jvb3RwLmM/aWQ9ZjA2YzIxNzJjMGIzMjA1MmYyMmUzNzUyMzQ0NWNmOGU3YWZmYWVhMworCitGcm9tIDE0OWQyYTE0ZjQ3MjM3NzhjZWQyM2Y0Mzk0ODcyMDFjY2JmMWEyYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyMyBBcHIgMjAxNSAwNzowMzozNCArMDAwMAorU3ViamVjdDogW1BBVENIXSBwYXJzZV9kaGNwX3ZlbmRvcjogQWRkIG1pc3NpbmcgY29uc3QgcXVhbGlmaWVycy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdydWItY29yZS9uZXQvYm9vdHAuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ncnViLWNvcmUvbmV0L2Jvb3RwLmMgYi9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKK2luZGV4IGJjMDdkNTMuLjQ0MTMxZWQgMTAwNjQ0CistLS0gYS9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKKysrKyBiL2dydWItY29yZS9uZXQvYm9vdHAuYworQEAgLTUyLDkgKzUyLDkgQEAgc2V0X2Vudl9saW1uX3JvIChjb25zdCBjaGFyICppbnRlcm5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCwKKyB9CisgCisgc3RhdGljIHZvaWQKKy1wYXJzZV9kaGNwX3ZlbmRvciAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmVuZCwgaW50IGxpbWl0LCBpbnQgKm1hc2spCisrcGFyc2VfZGhjcF92ZW5kb3IgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZlbmQsIGludCBsaW1pdCwgaW50ICptYXNrKQorIHsKKy0gIGdydWJfdWludDhfdCAqcHRyLCAqcHRyMDsKKysgIGNvbnN0IGdydWJfdWludDhfdCAqcHRyLCAqcHRyMDsKKyAKKyAgIHB0ciA9IHB0cjAgPSB2ZW5kOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2ZnIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E1M2QyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NmZwpAQCAtMCwwICsxLDIgQEAKK3NlYXJjaC5maWxlICgkY21kcGF0aCkvRUZJL0JPT1QvZ3J1Yi5jZmcgcm9vdAorc2V0IHByZWZpeD0oJHJvb3QpL0VGSS9CT09UCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jaGVjay1pZi1saWJsem1hLWlzLWRpc2FibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZWNlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitEaXNhYmxlIGxpYmx6bWEgaWYgLS1lbmFibGUtbGlibHptYT1ubworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDI5LDEwICsxMDI5LDIwIEBAIGZpCisgCisgQUNfU1VCU1QoW0xJQkdFT01dKQorIAorLUFDX0NIRUNLX0xJQihbbHptYV0sIFtsem1hX2NvZGVdLAorLSAgICAgICAgICAgICBbTElCTFpNQT0iLWxsem1hIgorLSAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0xJQkxaTUFdLCBbMV0sCistICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBMWk1BIGxpYnJhcnkuXSldLCkKKytBQ19BUkdfRU5BQkxFKFtsaWJsem1hXSwKKysgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbGlibHptYV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBsaWJsem1hIGludGVncmF0aW9uIChkZWZhdWx0PWd1ZXNzZWQpXSldKQorK2lmIHRlc3QgeCIkZW5hYmxlX2xpYmx6bWEiID0geG5vIDsgdGhlbgorKyAgbGlibHptYV9leGN1c2U9ImV4cGxpY2l0bHkgZGlzYWJsZWQiCisrZmkKKysKKytpZiB0ZXN0IHgiJGxpYmx6bWFfZXhjdXNlIiA9IHggOyB0aGVuCisrICBBQ19DSEVDS19MSUIoW2x6bWFdLCBbbHptYV9jb2RlXSwKKysgICAgICAgICAgICAgICBbTElCTFpNQT0iLWxsem1hIgorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfTElCTFpNQV0sIFsxXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTFpNQSBsaWJyYXJ5Ll0pXSwpCisrZmkKKysKKyBBQ19TVUJTVChbTElCTFpNQV0pCisgCisgQUNfQVJHX0VOQUJMRShbbGliemZzXSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1lbmRpYW5uZXNzLXByb2JsZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5OTkyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK2dydWItY29yZS9uZXQvdGZ0cC5jOiBmaXggZW5kaWFubmVzcyBwcm9ibGVtLgorCisJKiBncnViLWNvcmUvbmV0L3RmdHAuYyAoYWNrKTogRml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KKwkodGZ0cF9yZWNlaXZlKTogTGlrZXdpc2UuCisJUmVwb3J0ZWQgYnk6IE1pY2hhZWwgRGF2aWRzYXZlci4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCA4MWJkYWU5Li5jMmY0MmQ1IDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0xLDMgKzEsOSBAQAorKzIwMTItMDctMDIgIFZsYWRpbWlyIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KKysKKysJKiBncnViLWNvcmUvbmV0L3RmdHAuYyAoYWNrKTogRml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KKysJKHRmdHBfcmVjZWl2ZSk6IExpa2V3aXNlLgorKwlSZXBvcnRlZCBieTogTWljaGFlbCBEYXZpZHNhdmVyLgorKworIDIwMTItMDYtMjcgIFZsYWRpbWlyIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjAwLgorZGlmZiAtLWdpdCBhL2dydWItY29yZS9uZXQvdGZ0cC5jIGIvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKK2luZGV4IDljNzBlZmIuLmQwZjM5ZWEgMTAwNjQ0CistLS0gYS9ncnViLWNvcmUvbmV0L3RmdHAuYworKysrIGIvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKK0BAIC0xNDMsNyArMTQzLDcgQEAgYWNrICh0ZnRwX2RhdGFfdCBkYXRhLCBncnViX3VpbnQxNl90IGJsb2NrKQorIAorICAgdGZ0cGhfYWNrID0gKHN0cnVjdCB0ZnRwaGRyICopIG5iX2Fjay5kYXRhOworICAgdGZ0cGhfYWNrLT5vcGNvZGUgPSBncnViX2NwdV90b19iZTE2IChURlRQX0FDSyk7CistICB0ZnRwaF9hY2stPnUuYWNrLmJsb2NrID0gYmxvY2s7CisrICB0ZnRwaF9hY2stPnUuYWNrLmJsb2NrID0gZ3J1Yl9jcHVfdG9fYmUxNiAoYmxvY2spOworIAorICAgZXJyID0gZ3J1Yl9uZXRfc2VuZF91ZHBfcGFja2V0IChkYXRhLT5zb2NrLCAmbmJfYWNrKTsKKyAgIGlmIChlcnIpCitAQCAtMjI1LDcgKzIyNSw3IEBAIHRmdHBfcmVjZWl2ZSAoZ3J1Yl9uZXRfdWRwX3NvY2tldF90IHNvY2sgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorIAkgICAgZ3J1Yl9wcmlvcml0eV9xdWV1ZV9wb3AgKGRhdGEtPnBxKTsKKyAKKyAJICAgIGlmIChmaWxlLT5kZXZpY2UtPm5ldC0+cGFja3MuY291bnQgPCA1MCkKKy0JICAgICAgZXJyID0gYWNrIChkYXRhLCB0ZnRwaC0+dS5kYXRhLmJsb2NrKTsKKysJICAgICAgZXJyID0gYWNrIChkYXRhLCBkYXRhLT5ibG9jayArIDEpOworIAkgICAgZWxzZQorIAkgICAgICB7CisgCQlmaWxlLT5kZXZpY2UtPm5ldC0+c3RhbGwgPSAxOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYWUyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWlzc3VlLXdpdGgtZmxleC0yLjUuMzcucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIGlzc3VlcyB3aGVuIHVzaW5nIGZsZXgtMi41LjM3LiBJdCB3YXMgdGFrZW4gZnJvbSB1cHN0cmVhbS4KKworT3JpZ2luYWwgYXV0aG9yIGlzOiBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUvc2NyaXB0L3l5bGV4LmwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvc2NyaXB0L3l5bGV4LmwJMjAxMi0wNi0wOCAyMzoyNDoxNS4wMDAwMDAwMDAgKzAzMDAKKysrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCTIwMTMtMDctMzEgMTQ6MzQ6NDAuNzA4MTAwOTgyICswMzAwCitAQCAtMjksNiArMjksOCBAQAorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctZGVjbGFyYXRpb25zIgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zIgorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NpZ24tY29tcGFyZSIKKyAKKyAjZGVmaW5lIHl5ZnJlZSAgICBncnViX2xleGVyX3l5ZnJlZQorICNkZWZpbmUgeXlhbGxvYyAgIGdydWJfbGV4ZXJfeXlhbGxvYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODkxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWFkZC1vZS1rZXJuZWwucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSA3YWI1NzZhN2M2MTQwNmI3ZTYzNzM5ZDFiMTEwMTdhZTMzNmI5MDA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDMgTWFyIDIwMTQgMDM6MzQ6NDggLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3J1Yi5kLzEwX2xpbnV4LmluOiBhZGQgb2UncyBrZXJuZWwgbmFtZQorCitPdXIga2VybmVsJ3MgbmFtZSBpcyBiekltYWdlLCB3ZSBuZWVkIGFkZCBpdCB0byBncnViLmQvMTBfbGludXguaW4gc28KK3RoYXQgdGhlIGdydWItbWtjb25maWcgYW5kIGdydWItaW5zdGFsbCBjYW4gd29yayBjb3JyZWN0bHkuCisKK1dlIG9ubHkgbmVlZCBhZGQgdGhlIGJ6SW1hZ2UgdG8gdXRpbC9ncnViLmQvMTBfbGludXguaW4sIGJ1dCBhbHNvIGFkZCBpdAordG8gdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIHRvIGtlZXAgY29tcGF0aWJpbGl0eS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB1dGlsL2dydWIuZC8xMF9saW51eC5pbiAgICAgfCAgICA0ICsrLS0KKyB1dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4gfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91dGlsL2dydWIuZC8xMF9saW51eC5pbiBiL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCitpbmRleCAxNDQwMmU4Li5jNThmNDE3IDEwMDY0NAorLS0tIGEvdXRpbC9ncnViLmQvMTBfbGludXguaW4KKysrKyBiL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCitAQCAtMTUzLDExICsxNTMsMTEgQEAgRU9GCisgbWFjaGluZT1gdW5hbWUgLW1gCisgY2FzZSAieCRtYWNoaW5lIiBpbgorICAgICB4aT84NiB8IHh4ODZfNjQpCistCWxpc3Q9YGZvciBpIGluIC9ib290L3ZtbGludXotKiAvdm1saW51ei0qIC9ib290L2tlcm5lbC0qIDsgZG8KKysJbGlzdD1gZm9yIGkgaW4gL2Jvb3QvYnpJbWFnZS0qIC9iekltYWdlLSogL2Jvb3Qvdm1saW51ei0qIC92bWxpbnV6LSogL2Jvb3Qva2VybmVsLSogOyBkbworICAgICAgICAgICAgICAgICAgIGlmIGdydWJfZmlsZV9pc19ub3RfZ2FyYmFnZSAiJGkiIDsgdGhlbiBlY2hvIC1uICIkaSAiIDsgZmkKKyAgICAgICAgICAgICAgIGRvbmVgIDs7CisgICAgICopIAorLQlsaXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnV6LSogL2Jvb3Qvdm1saW51eC0qIC92bWxpbnV6LSogL3ZtbGludXgtKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisrCWxpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2UtKiAvYm9vdC92bWxpbnV6LSogL2Jvb3Qvdm1saW51eC0qIC9iekltYWdlLSogL3ZtbGludXotKiAvdm1saW51eC0qIC9ib290L2tlcm5lbC0qIDsgZG8KKyAgICAgICAgICAgICAgICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIiA7IHRoZW4gZWNobyAtbiAiJGkgIiA7IGZpCisgCSAgICAgZG9uZWAgOzsKKyBlc2FjCitkaWZmIC0tZ2l0IGEvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIGIvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCitpbmRleCAxZDk0NTAyLi5iMmRlY2YzIDEwMDY0NAorLS0tIGEvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCisrKysgYi91dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4KK0BAIC0xMzgsNyArMTM4LDcgQEAgRU9GCisgRU9GCisgfQorIAorLWxpbnV4X2xpc3Q9YGZvciBpIGluIC9ib290L3ZtbGludVt4el0tKiAvdm1saW51W3h6XS0qIC9ib290L2tlcm5lbC0qOyBkbworK2xpbnV4X2xpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2VbeHpdLSogL2J6SW1hZ2VbeHpdLSogL2Jvb3Qvdm1saW51W3h6XS0qIC92bWxpbnVbeHpdLSogL2Jvb3Qva2VybmVsLSo7IGRvCisgICAgIGlmIGdydWJfZmlsZV9pc19ub3RfZ2FyYmFnZSAiJGkiOyB0aGVuCisgICAgIAliYXNlbmFtZT0kKGJhc2VuYW1lICRpKQorIAl2ZXJzaW9uPSQoZWNobyAkYmFzZW5hbWUgfCBzZWQgLWUgInMsXlteMC05XSotLCxnIikKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVmNGRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworVGhpcyBwYXRjaCBhdm9pZHMgdGhpcyBjb25maWd1cmUgZmFpbHVyZQorCitjb25maWd1cmU6MjAzMDY6IGNoZWNraW5nIHdoZXRoZXIgYGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vYnVpbGRkaXNrL2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvZW1lbmxvdycgZ2VuZXJhdGVzIGNhbGxzIHRvIGBfX2VuYWJsZV9leGVjdXRlX3N0YWNrKCknCitjb25maWd1cmU6MjAzMjA6IGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vYnVpbGRkaXNrL2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvZW1lbmxvdyAtTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1XYWxsIC1XIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3VuZGVmIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWcgLWZhbGlnbi1qdW1wcz0xIC1mYWxpZ24tbG9vcHM9MSAtZmFsaWduLWZ1bmN0aW9ucz0xIC1tbm8tbW14IC1tbm8tc3NlIC1tbm8tc3NlMiAtbW5vLTNkbm93IC1tZnBtYXRoPTM4NyAtZm5vLWR3YXJmMi1jZmktYXNtIC1tMzIgLWZuby1zdGFjay1wcm90ZWN0b3IgLW1uby1zdGFjay1hcmctcHJvYmUgLVdlcnJvciAtV25vLXRyYW1wb2xpbmVzIC1mYWxpZ24tbG9vcHM9MSAtUyBjb25mdGVzdC5jCitjb25mdGVzdC5jOjMwODo2OiBlcnJvcjogbm8gcHJldmlvdXMgcHJvdG90eXBlIGZvciAnZycgWy1XZXJyb3I9bWlzc2luZy1wcm90b3R5cGVzXQorY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK2NvbmZpZ3VyZToyMDMyMzogJD8gPSAxCitjb25maWd1cmU6MjAzMjc6IGVycm9yOiBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgZmFpbGVkIHRvIHByb2R1Y2UgYXNzZW1ibHkgY29kZQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNC8xMworCitJbmRleDogZ3J1Yi0yLjAwL2FjaW5jbHVkZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMi4wMC5vcmlnL2FjaW5jbHVkZS5tNAorKysrIGdydWItMi4wMC9hY2luY2x1ZGUubTQKK0BAIC0zMTcsNiArMzE3LDcgQEAgZG5sIENoZWNrIGlmIHRoZSBDIGNvbXBpbGVyIGdlbmVyYXRlcyBjYQorIEFDX0RFRlVOKFtncnViX0NIRUNLX0VOQUJMRV9FWEVDVVRFX1NUQUNLXSxbCisgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGAkQ0MnIGdlbmVyYXRlcyBjYWxscyB0byBgX19lbmFibGVfZXhlY3V0ZV9zdGFjaygpJ10pCisgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19TT1VSQ0UoW1sKKyt2b2lkIGcgKGludCk7Cisgdm9pZCBmIChpbnQgKCpwKSAodm9pZCkpOworIHZvaWQgZyAoaW50IGkpCisgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTU3ZjEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhpcyBjb25maWd1cmUgaXNzdWUgZm9yIGdydWIgd2hlbiAtbWZwbWF0aD1zc2UgaXMgaW4gdGhlIGdjYyBwYXJhbWV0ZXJzLgorCitjb25maWd1cmU6MjA1NzQ6IGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS91c3IvbG9jYWwvZGV2L3lvY3RvL2dydWJ0ZXN0Mi9idWlsZC90bXAvc3lzcm9vdHMvZW1lbmxvdyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1XYWxsIC1XIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3VuZGVmIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWcgLWZhbGlnbi1qdW1wcz0xIC1mYWxpZ24tbG9vcHM9MSAtZmFsaWduLWZ1bmN0aW9ucz0xIC1tbm8tbW14IC1tbm8tc3NlIC1tbm8tc3NlMiAtbW5vLTNkbm93IC1mbm8tZHdhcmYyLWNmaS1hc20gLW0zMiAtZm5vLXN0YWNrLXByb3RlY3RvciAtbW5vLXN0YWNrLWFyZy1wcm9iZSAtV2Vycm9yIC1ub3N0ZGxpYiAtV2wsLS1kZWZzeW0sX19fbWFpbj0weDgxMDAgIC1XYWxsIC1XIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgIC1ER1JVQl9NQUNISU5FX1BDQklPUz0xIC1ER1JVQl9NQUNISU5FPUkzODZfUEMgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgY29uZnRlc3QuYyAgPiY1Citjb25mdGVzdC5jOjE6MDogZXJyb3I6IFNTRSBpbnN0cnVjdGlvbiBzZXQgZGlzYWJsZWQsIHVzaW5nIDM4NyBhcml0aG1ldGljcyBbLVdlcnJvcl0KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA0LzEzCisKK0luZGV4OiBncnViLTEuOTkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0xLjk5Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ3J1Yi0xLjk5L2NvbmZpZ3VyZS5hYworQEAgLTM3OCw3ICszNzgsNyBAQCBpZiB0ZXN0ICJ4JHRhcmdldF9jcHUiID0geGkzODY7IHRoZW4KKyAKKyAgICMgU29tZSB0b29sY2hhaW5zIGVuYWJsZSB0aGVzZSBmZWF0dXJlcyBieSBkZWZhdWx0LCBidXQgdGhleSBuZWVkCisgICAjIHJlZ2lzdGVycyB0aGF0IGFyZW4ndCBzZXQgdXAgcHJvcGVybHkgaW4gR1JVQi4KKy0gIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTIC1tbm8tbW14IC1tbm8tc3NlIC1tbm8tc3NlMiAtbW5vLTNkbm93IgorKyAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLW1uby1tbXggLW1uby1zc2UgLW1uby1zc2UyIC1tbm8tM2Rub3cgLW1mcG1hdGg9Mzg3IgorIGZpCisgCisgIyBCeSBkZWZhdWx0LCBHQ0MgNC40IGdlbmVyYXRlcyAuZWhfZnJhbWUgc2VjdGlvbnMgY29udGFpbmluZyB1bndpbmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTg4ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWFsbG93LWEtY29tcGlsYXRpb24td2l0aG91dC1tY21vZGVsLWxhcmdlLnBhdGNoCkBAIC0wLDAgKzEsMTMxIEBACitBbGxvdyBhIGNvbXBpbGF0aW9uIHdpdGhvdXQgLW1jbW9kZWw9bGFyZ2UKKworSXQncyBwcm92aWRlZCBieSBWbGFkaW1pciBTZXJiaW5lbmtvLCBhbmQgaGUgd2lsbCBjb21taXQKK2l0IHVwc3RyZWFtIHNvIGl0IHNob3VsZCBiZSBiYWNrcG9ydCBwYXRjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorCistLQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWY4ZmI4YS4uMmM1ZTZlZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzIzLDkgKzcyMyw3IEBAIGlmIHRlc3QgIiR0YXJnZXRfY3B1IiA9IHg4Nl82NDsgdGhlbgorIAkJICAgICAgW2dydWJfY3ZfY2NfbWNtb2RlbD15ZXNdLAorIAkJICAgICAgW2dydWJfY3ZfY2NfbWNtb2RlbD1ub10pCisgICBdKQorLSAgaWYgdGVzdCAieCRncnViX2N2X2NjX21jbW9kZWwiID0geG5vOyB0aGVuCistICAgIEFDX01TR19FUlJPUihbLW1jbW9kZWw9bGFyZ2Ugbm90IHN1cHBvcnRlZC4gVXBncmFkZSB5b3VyIGdjYy5dKQorLSAgZWxzZQorKyAgaWYgdGVzdCAieCRncnViX2N2X2NjX21jbW9kZWwiID0geHllczsgdGhlbgorICAgICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbWNtb2RlbD1sYXJnZSIKKyAgIGZpCisgZmkKK2RpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi9lZmkvbW0uYyBiL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCitpbmRleCAxNDA5YjVkLi42ZTlkYWNlIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMKKysrKyBiL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCitAQCAtMzIsNiArMzIsMTIgQEAKKyAjZGVmaW5lIEJZVEVTX1RPX1BBR0VTKGJ5dGVzKQkoKChieXRlcykgKyAweGZmZikgPj4gMTIpCisgI2RlZmluZSBQQUdFU19UT19CWVRFUyhwYWdlcykJKChwYWdlcykgPDwgMTIpCisKKysjaWYgZGVmaW5lZCAoX19jb2RlX21vZGVsX2xhcmdlX18pIHx8ICFkZWZpbmVkIChfX3g4Nl82NF9fKQorKyNkZWZpbmUgTUFYX1VTQUJMRV9BRERSRVNTIDB4ZmZmZmZmZmYKKysjZWxzZQorKyNkZWZpbmUgTUFYX1VTQUJMRV9BRERSRVNTIDB4N2ZmZmZmZmYKKysjZW5kaWYKKysKKyAvKiBUaGUgc2l6ZSBvZiBhIG1lbW9yeSBtYXAgb2J0YWluZWQgZnJvbSB0aGUgZmlybXdhcmUuIFRoaXMgbXVzdCBiZQorICAgIGEgbXVsdGlwbGllciBvZiA0S0IuICAqLworICNkZWZpbmUgTUVNT1JZX01BUF9TSVpFCTB4MzAwMAorQEAgLTU4LDcgKzY0LDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorCisgI2lmIDEKKyAgIC8qIExpbWl0IHRoZSBtZW1vcnkgYWNjZXNzIHRvIGxlc3MgdGhhbiA0R0IgZm9yIDMyLWJpdCBwbGF0Zm9ybXMuICAqLworLSAgaWYgKGFkZHJlc3MgPiAweGZmZmZmZmZmKQorKyAgaWYgKGFkZHJlc3MgPiBNQVhfVVNBQkxFX0FERFJFU1MpCisgICAgIHJldHVybiAwOworICNlbmRpZgorCitAQCAtNjYsNyArNzIsNyBAQCBncnViX2VmaV9hbGxvY2F0ZV9wYWdlcyAoZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190IGFkZHJlc3MsCisgICBpZiAoYWRkcmVzcyA9PSAwKQorICAgICB7CisgICAgICAgdHlwZSA9IEdSVUJfRUZJX0FMTE9DQVRFX01BWF9BRERSRVNTOworLSAgICAgIGFkZHJlc3MgPSAweGZmZmZmZmZmOworKyAgICAgIGFkZHJlc3MgPSBNQVhfVVNBQkxFX0FERFJFU1M7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgdHlwZSA9IEdSVUJfRUZJX0FMTE9DQVRFX0FERFJFU1M7CitAQCAtODYsNyArOTIsNyBAQCBncnViX2VmaV9hbGxvY2F0ZV9wYWdlcyAoZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190IGFkZHJlc3MsCisgICAgIHsKKyAgICAgICAvKiBVZ2doLCB0aGUgYWRkcmVzcyAwIHdhcyBhbGxvY2F0ZWQuLi4gVGhpcyBpcyB0b28gYW5ub3lpbmcsCisgCSBzbyByZWFsbG9jYXRlIGFub3RoZXIgb25lLiAgKi8KKy0gICAgICBhZGRyZXNzID0gMHhmZmZmZmZmZjsKKysgICAgICBhZGRyZXNzID0gTUFYX1VTQUJMRV9BRERSRVNTOworICAgICAgIHN0YXR1cyA9IGVmaV9jYWxsXzQgKGItPmFsbG9jYXRlX3BhZ2VzLCB0eXBlLCBHUlVCX0VGSV9MT0FERVJfREFUQSwgcGFnZXMsICZhZGRyZXNzKTsKKyAgICAgICBncnViX2VmaV9mcmVlX3BhZ2VzICgwLCBwYWdlcyk7CisgICAgICAgaWYgKHN0YXR1cyAhPSBHUlVCX0VGSV9TVUNDRVNTKQorQEAgLTMxOSw3ICszMjUsNyBAQCBmaWx0ZXJfbWVtb3J5X21hcCAoZ3J1Yl9lZmlfbWVtb3J5X2Rlc2NyaXB0b3JfdCAqbWVtb3J5X21hcCwKKyAgICAgeworICAgICAgIGlmIChkZXNjLT50eXBlID09IEdSVUJfRUZJX0NPTlZFTlRJT05BTF9NRU1PUlkKKyAjaWYgMQorLQkgICYmIGRlc2MtPnBoeXNpY2FsX3N0YXJ0IDw9IDB4ZmZmZmZmZmYKKysJICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCA8PSBNQVhfVVNBQkxFX0FERFJFU1MKKyAjZW5kaWYKKyAJICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCArIFBBR0VTX1RPX0JZVEVTIChkZXNjLT5udW1fcGFnZXMpID4gMHgxMDAwMDAKKyAJICAmJiBkZXNjLT5udW1fcGFnZXMgIT0gMCkKK0BAIC0zMzcsOSArMzQzLDkgQEAgZmlsdGVyX21lbW9yeV9tYXAgKGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9yX3QgKm1lbW9yeV9tYXAsCisgI2lmIDEKKyAJICBpZiAoQllURVNfVE9fUEFHRVMgKGZpbHRlcmVkX2Rlc2MtPnBoeXNpY2FsX3N0YXJ0KQorIAkgICAgICArIGZpbHRlcmVkX2Rlc2MtPm51bV9wYWdlcworLQkgICAgICA+IEJZVEVTX1RPX1BBR0VTICgweDEwMDAwMDAwMExMKSkKKysJICAgICAgPiBCWVRFU19UT19QQUdFUyAoTUFYX1VTQUJMRV9BRERSRVNTKzFMTCkpCisgCSAgICBmaWx0ZXJlZF9kZXNjLT5udW1fcGFnZXMKKy0JICAgICAgPSAoQllURVNfVE9fUEFHRVMgKDB4MTAwMDAwMDAwTEwpCisrCSAgICAgID0gKEJZVEVTX1RPX1BBR0VTIChNQVhfVVNBQkxFX0FERFJFU1MrMUxMKQorIAkJIC0gQllURVNfVE9fUEFHRVMgKGZpbHRlcmVkX2Rlc2MtPnBoeXNpY2FsX3N0YXJ0KSk7CisgI2VuZGlmCisKK2RpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYyBiL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCitpbmRleCA2NWYwOWVmLi4xN2MxMjE1IDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMKKysrKyBiL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCitAQCAtMTAwLDE0ICsxMDAsMzIgQEAgZ3J1Yl9hcmNoX2RsX3JlbG9jYXRlX3N5bWJvbHMgKGdydWJfZGxfdCBtb2QsIHZvaWQgKmVoZHIpCisgCQkgICAgYnJlYWs7CisKKyAJCSAgY2FzZSBSX1g4Nl82NF9QQzMyOgorLQkJICAgICphZGRyMzIgKz0gcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWUgLQorLQkJICAgICAgICAgICAgICAoRWxmNjRfWHdvcmQpIHNlZy0+YWRkciAtIHJlbC0+cl9vZmZzZXQ7CisrCQkgICAgeworKwkJICAgICAgZ3J1Yl9pbnQ2NF90IHZhbHVlOworKwkJICAgICAgdmFsdWUgPSAoKGdydWJfaW50MzJfdCkgKmFkZHIzMikgKyByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZSAtCisrCQkJKEVsZjY0X1h3b3JkKSBzZWctPmFkZHIgLSByZWwtPnJfb2Zmc2V0OworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX2ludDMyX3QpIHZhbHVlKQorKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKKysJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKKysJCSAgICB9CisgCQkgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICBjYXNlIFJfWDg2XzY0XzMyOgorKwkJICAgIHsKKysJCSAgICAgIGdydWJfdWludDY0X3QgdmFsdWUgPSAqYWRkcjMyICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWU7CisrCQkgICAgICBpZiAodmFsdWUgIT0gKGdydWJfdWludDMyX3QpIHZhbHVlKQorKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKKysJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKKysJCSAgICB9CisrCQkgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgY2FzZSBSX1g4Nl82NF8zMlM6CistICAgICAgICAgICAgICAgICAgICAqYWRkcjMyICs9IHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCQkgICAgeworKwkJICAgICAgZ3J1Yl9pbnQ2NF90IHZhbHVlID0gKChncnViX2ludDMyX3QpICphZGRyMzIpICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWU7CisrCQkgICAgICBpZiAodmFsdWUgIT0gKGdydWJfaW50MzJfdCkgdmFsdWUpCisrCQkJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9NT0RVTEUsICJyZWxvY2F0aW9uIG91dCBvZiByYW5nZSIpOworKwkJICAgICAgKmFkZHIzMiA9IHZhbHVlOworKwkJICAgIH0KKysJCSAgICBicmVhazsKKworIAkJICBkZWZhdWx0OgorIAkJICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjEyNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBlYjYzNjhlNjVmNjk4OGVlYmFkMjZjZWJkZWMwNTdmNzk3YmNlYjQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDkgU2VwIDIwMTQgMDA6MDI6MzAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIHdpdGggZ2xpYmMgMi4yMAorCisqIGdydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYzogc3F1YWhlcyBiZWxvdyB3YXJuaW5nCisgIHdhcm5pbmc6ICN3YXJuaW5nICJfQlNEX1NPVVJDRSBhbmQgX1NWSURfU09VUkNFIGFyZSBkZXByZWNhdGVkLCB1c2UgX0RFRkFVTFRfU09VUkNFIgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKK2luZGV4IDNjYjA4OWMuLmE1MWVlMzIgMTAwNjQ0CistLS0gYS9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKKysrKyBiL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworQEAgLTE2LDcgKzE2LDcgQEAKKyAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICAqLworLSNkZWZpbmUgX0JTRF9TT1VSQ0UKKysjZGVmaW5lIF9ERUZBVUxUX1NPVVJDRQorICNpbmNsdWRlIDxncnViL2ZzLmg+CisgI2luY2x1ZGUgPGdydWIvZmlsZS5oPgorICNpbmNsdWRlIDxncnViL2Rpc2suaD4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1pbnN0YWxsLmluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY5NTFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitPdXIgdXNlIG9mIGdydWItaW5zdGFsbCBkb2Vzbid0IHJlcXVpcmUgdGhlIC14IG9wdGlvbiwgc28gd2Ugc2hvdWxkIGJlCitiZSBhYmxlIG1ha2UgdXNlIG9mIGdyZXAgdmVyc2lvbnMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LgorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogZ3J1Yi0xLjk5L3V0aWwvZ3J1Yi1pbnN0YWxsLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0xLjk5Lm9yaWcvdXRpbC9ncnViLWluc3RhbGwuaW4JMjAxMS0wOS0wOSAyMjozNzoyMC4wOTM5MDY2NzkgLTA1MDAKKysrKyBncnViLTEuOTkvdXRpbC9ncnViLWluc3RhbGwuaW4JMjAxMS0wOS0wOSAyMjozNzozMC44NTQ3Mzc4ODIgLTA1MDAKK0BAIC01MTAsNyArNTEwLDcgQEAKKyAKKyBpZiBbICJ4JHtkZXZhYnN0cmFjdGlvbl9tb2R1bGV9IiA9ICJ4IiBdIDsgdGhlbgorICAgICBpZiBbIHgiJHtpbnN0YWxsX2RldmljZX0iICE9IHggXTsgdGhlbgorLSAgICAgIGlmIGVjaG8gIiR7aW5zdGFsbF9kZXZpY2V9IiB8IGdyZXAgLXF4ICIoLiopIiA7IHRoZW4KKysgICAgICBpZiBlY2hvICIke2luc3RhbGxfZGV2aWNlfSIgfCBncmVwIC1xICIoLiopIiA7IHRoZW4KKyAgICAgICAgIGluc3RhbGxfZHJpdmU9IiR7aW5zdGFsbF9kZXZpY2V9IgorICAgICAgIGVsc2UKKyAgICAgICAgIGluc3RhbGxfZHJpdmU9ImAiJGdydWJfcHJvYmUiIC0tZGV2aWNlLW1hcD0iJHtkZXZpY2VfbWFwfSIgLS10YXJnZXQ9ZHJpdmUgLS1kZXZpY2UgIiR7aW5zdGFsbF9kZXZpY2V9ImAiIHx8IGV4aXQgMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNiZDA4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorU2lnbmVkLW9mZi1ieTogUmFkdSBNb2lzYW4gPHJhZHUubW9pc2FuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJIGhhZCBhbiBlcnJvciBiZWNhdXNlIG9mIGFuIHVudXNlZCByZXR1cm4gdmFsdWUgZm9yIHJlYWQoKS4KK0kgYWRkZWQgLVduby11bnVzZWQtcmVzdWx0LgorCitJbmRleDogZ3J1Yi0yLjAwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMi4wMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTEzIDE2OjMyOjMzLjAwMDAwMDAwMCArMDMwMAorKysrIGdydWItMi4wMC9jb25maWd1cmUuYWMJMjAxMi0wOC0xMyAxNjozODoyMi4wMDAwMDAwMDAgKzAzMDAKK0BAIC0zOTQsNyArMzk0LDcgQEAKKyBMSUJTPSIiCisgCisgIyBkZWJ1ZyBmbGFncy4KKy1XQVJOX0ZMQUdTPSItV2FsbCAtVyAtV3NoYWRvdyAtV29sZC1zdHlsZS1kZWZpbml0aW9uIC1XcG9pbnRlci1hcml0aCAtV3VuZGVmIC1XZXh0cmEgLVdhZGRyZXNzIC1XYXR0cmlidXRlcyAtV2Nhc3QtYWxpZ24gLVdjaGFyLXN1YnNjcmlwdHMgLVdjb21tZW50IC1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLVdkaXNhYmxlZC1vcHRpbWl6YXRpb24gLVdkaXYtYnktemVybyAtV2VtcHR5LWJvZHkgLVdlbmRpZi1sYWJlbHMgLVdmbG9hdC1lcXVhbCAtV2Zvcm1hdC1leHRyYS1hcmdzIC1XZm9ybWF0LXNlY3VyaXR5IC1XZm9ybWF0LXkyayAtV2ltcGxpY2l0IC1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gLVdpbXBsaWNpdC1pbnQgLVdpbml0LXNlbGYgLVdpbnQtdG8tcG9pbnRlci1jYXN0IC1XaW52YWxpZC1wY2ggLVdtYWluIC1XbWlzc2luZy1icmFjZXMgLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAtV21pc3Npbmctbm9yZXR1cm4gLVdtdWx0aWNoYXIgLVdub25udWxsIC1Xb3ZlcmZsb3cgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJpdGggLVdwb2ludGVyLXRvLWludC1jYXN0IC1XcmV0dXJuLXR5cGUgLVdzZXF1ZW5jZS1wb2ludCAtV3NoYWRvdyAtV3NpZ24tY29tcGFyZSAtV3N0cmljdC1hbGlhc2luZyAtV3N3aXRjaCAtV3RyaWdyYXBocyAtV3VuZGVmIC1XdW5rbm93bi1wcmFnbWFzIC1XdW51c2VkIC1XdW51c2VkLWZ1bmN0aW9uIC1XdW51c2VkLWxhYmVsIC1XdW51c2VkLXBhcmFtZXRlciAtV3VudXNlZC12YWx1ZSAgLVd1bnVzZWQtdmFyaWFibGUgLVd2YXJpYWRpYy1tYWNyb3MgLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIgLVd3cml0ZS1zdHJpbmdzIC1XbmVzdGVkLWV4dGVybnMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3BvaW50ZXItc2lnbiIKKytXQVJOX0ZMQUdTPSItV2FsbCAtVyAtV3NoYWRvdyAtV29sZC1zdHlsZS1kZWZpbml0aW9uIC1XcG9pbnRlci1hcml0aCAtV3VuZGVmIC1XZXh0cmEgLVdhZGRyZXNzIC1XYXR0cmlidXRlcyAtV2Nhc3QtYWxpZ24gLVdjaGFyLXN1YnNjcmlwdHMgLVdjb21tZW50IC1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLVdkaXNhYmxlZC1vcHRpbWl6YXRpb24gLVdkaXYtYnktemVybyAtV2VtcHR5LWJvZHkgLVdlbmRpZi1sYWJlbHMgLVdmbG9hdC1lcXVhbCAtV2Zvcm1hdC1leHRyYS1hcmdzIC1XZm9ybWF0LXNlY3VyaXR5IC1XZm9ybWF0LXkyayAtV2ltcGxpY2l0IC1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gLVdpbXBsaWNpdC1pbnQgLVdpbml0LXNlbGYgLVdpbnQtdG8tcG9pbnRlci1jYXN0IC1XaW52YWxpZC1wY2ggLVdtYWluIC1XbWlzc2luZy1icmFjZXMgLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAtV21pc3Npbmctbm9yZXR1cm4gLVdtdWx0aWNoYXIgLVdub25udWxsIC1Xb3ZlcmZsb3cgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJpdGggLVdwb2ludGVyLXRvLWludC1jYXN0IC1XcmV0dXJuLXR5cGUgLVdzZXF1ZW5jZS1wb2ludCAtV3NoYWRvdyAtV3NpZ24tY29tcGFyZSAtV3N0cmljdC1hbGlhc2luZyAtV3N3aXRjaCAtV3RyaWdyYXBocyAtV3VuZGVmIC1XdW5rbm93bi1wcmFnbWFzIC1XdW51c2VkIC1XdW51c2VkLWZ1bmN0aW9uIC1XdW51c2VkLWxhYmVsIC1XdW51c2VkLXBhcmFtZXRlciAtV3VudXNlZC12YWx1ZSAgLVd1bnVzZWQtdmFyaWFibGUgLVduby11bnVzZWQtcmVzdWx0IC1XdmFyaWFkaWMtbWFjcm9zIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdwb2ludGVyLXNpZ24iCisgSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAkV0FSTl9GTEFHUyIKKyBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAkV0FSTl9GTEFHUyAtZyAtV3JlZHVuZGFudC1kZWNscyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIgorIFRBUkdFVF9DQ0FTRkxBR1M9IiRUQVJHRVRfQ0NBU0ZMQUdTIC1nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItZml4LWluaXRyZC1zaXplLWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE0ZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbSA4ZmJiMTUwYTU2OTY2ZWRkZTRkYzA3YjhkMDFiZTVlYjE0OWI2NWFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ29saW4gV2F0c29uIDxjandhdHNvbkB1YnVudHUuY29tPgorRGF0ZTogU3VuLCAyMCBKYW4gMjAxMyAyMzowMzozNSArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMV0gKiBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyAoZ3J1Yl9jbWRfaW5pdHJkKTogRG9uJ3QKKyBhZGQgdGhlIGluaXRyZCBzaXplIHRvIGFkZHJfbWluLCBzaW5jZSB0aGUgaW5pdHJkIHdpbGwgYmUgYWxsb2NhdGVkIGFmdGVyCisgdGhpcyBhZGRyZXNzLgorCitjb21taXQgNmEwZGViYmQ5MTY3ZThmNzljZGVmNTQ5N2E3M2QyM2U1ODBjMGNkNCB1cHN0cmVhbQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNoYW4gSGFpIDxzaGFuLmhhaUB3aW5kcml2ZXIuY29tPgorLS0tCisgQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCA2ICsrKysrKworIGdydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIHwgMyArLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggYzJmNDJkNS4uNDBjYjUwOCAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDkgQEAKKysyMDEzLTAxLTIwICBDb2xpbiBXYXRzb24gIDxjandhdHNvbkB1YnVudHUuY29tPgorKworKwkqIGdydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIChncnViX2NtZF9pbml0cmQpOiBEb24ndCBhZGQgdGhlCisrCWluaXRyZCBzaXplIHRvIGFkZHJfbWluLCBzaW5jZSB0aGUgaW5pdHJkIHdpbGwgYmUgYWxsb2NhdGVkIGFmdGVyCisrCXRoaXMgYWRkcmVzcy4KKysKKyAyMDEyLTA3LTAyICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisgCisgCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgYi9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYworaW5kZXggNjIwODdjZi4uZTI0MjVjOCAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jCisrKysgYi9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYworQEAgLTEwOTgsOCArMTA5OCw3IEBAIGdydWJfY21kX2luaXRyZCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgIHdvcnNlIHRoYW4gdGhhdCBvZiBMaW51eCAyLjMueHgsIHNvIGF2b2lkIHRoZSBsYXN0IDY0a2IuICAqLworICAgYWRkcl9tYXggLT0gMHgxMDAwMDsKKyAKKy0gIGFkZHJfbWluID0gKGdydWJfYWRkcl90KSBwcm90X21vZGVfdGFyZ2V0ICsgcHJvdF9pbml0X3NwYWNlCistICAgICAgICAgICAgICsgcGFnZV9hbGlnbiAoc2l6ZSk7CisrICBhZGRyX21pbiA9IChncnViX2FkZHJfdCkgcHJvdF9tb2RlX3RhcmdldCArIHByb3RfaW5pdF9zcGFjZTsKKyAKKyAgIC8qIFB1dCB0aGUgaW5pdHJkIGFzIGhpZ2ggYXMgcG9zc2libGUsIDRLaUIgYWxpZ25lZC4gICovCisgICBhZGRyID0gKGFkZHJfbWF4IC0gc2l6ZSkgJiB+MHhGRkY7CistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTlhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCityZW1vdmUgdGhlIGdydWItc3BhcmM2NC1zZXR1cCBmaWxlcyBmcm9tIHRoZSB4ODYgYnVpbGRzLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCistLS0gYS9NYWtlZmlsZS51dGlsLmFtCTIwMTQtMDgtMTUgMTE6NDE6MDIuNDQxMDExMjc4IC0wNzAwCisrKysgYi9NYWtlZmlsZS51dGlsLmFtCTIwMTQtMDgtMTUgMTE6NDQ6MjYuMjQ1MDIxMTQyIC0wNzAwCitAQCAtNDY5Miw5ICs0NjkyLDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfZW11Cistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCitAQCAtNDcxNSw5ICs0NzE1LDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfaTM4Nl9wYworLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3MzgsOSArNDczOCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfZWZpCistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCitAQCAtNDc2MSw5ICs0NzYxLDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfaTM4Nl9xZW11Cistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCitAQCAtNDc4NCw5ICs0Nzg0LDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfaTM4Nl9jb3JlYm9vdAorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ4MDcsOSArNDgwNyw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfbXVsdGlib290Cistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCitAQCAtNDgzMCw5ICs0ODMwLDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfaTM4Nl9pZWVlMTI3NQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ4NTMsOSArNDg1Myw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX3g4Nl82NF9lZmkKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL3JlbW92ZS1nZXRzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0lTTyBDMTEgcmVtb3ZlcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBnZXRzKCkgZnJvbSB0aGUgQyBsYW5ndWFnZSwgZWdsaWJjIDIuMTYrIHJlbW92ZWQgaXQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZ3J1Yi0xLjk5L2dydWItY29yZS9nbnVsaWIvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL2dydWItY29yZS9nbnVsaWIvc3RkaW8uaW4uaAkyMDEwLTEyLTAxIDA2OjQ1OjQzLjAwMDAwMDAwMCAtMDgwMAorKysrIGdydWItMS45OS9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgJMjAxMi0wNy0wNCAxMjoyNTowMi4wNTcwOTkxMDcgLTA3MDAKK0BAIC0xNDAsOCArMTQwLDEwIEBACisgLyogSXQgaXMgdmVyeSByYXJlIHRoYXQgdGhlIGRldmVsb3BlciBldmVyIGhhcyBmdWxsIGNvbnRyb2wgb2Ygc3RkaW4sCisgICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZy4gIEFzc3VtZSBpdCBpcworICAgIGFsd2F5cyBkZWNsYXJlZCwgc2luY2UgaXQgaXMgcmVxdWlyZWQgYnkgQzg5LiAgKi8KKysjaWYgZGVmaW5lZCBnZXRzCisgI3VuZGVmIGdldHMKKyBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisrI2VuZGlmCisgCisgI2lmIEBHTlVMSUJfRk9QRU5ACisgIyBpZiBAUkVQTEFDRV9GT1BFTkAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvYXV0b2hlbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2F1dG9oZWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjIwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2F1dG9oZWxsLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgY29uZmlndXJlLmFjIHwgICAgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdydWItMC45Ny9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTAuOTcub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wOS0xMiAxNzozOTo1Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBncnViLTAuOTcvY29uZmlndXJlLmFjCTIwMDgtMDktMTIgMTc6NDA6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtNjAsOCArNjAsOCBAQCBBQ19QUk9HX0NDCisgX0FNX0RFUEVOREVOQ0lFUyhDQykKKyAKKyBkbmwgQmVjYXVzZSByZWNlbnQgYXV0b21ha2UgY29tcGxhaW5zIGFib3V0IEFTLCBzZXQgaXQgaGVyZS4KKy1DQ0FTPSIkQ0MiCistQUNfU1VCU1QoQ0NBUykKKytBTV9QUk9HX0FTCisrQUNfU1VCU1QoQVMpCisgCisgQUNfQVJHX1dJVEgoYmludXRpbHMsCisgICBbICAtLXdpdGgtYmludXRpbHM9RElSICAgICBzZWFyY2ggdGhlIGRpcmVjdG9yeSBESVIgdG8gZmluZCBiaW51dGlsc10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWItc3VwcG9ydC0yNTZieXRlLWlub2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjI1ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtObyBMb25nZXIgTWFpbnRhaW5lZF0KKworZGlmZiAtTmF1ciBncnViLTAuOTctODAwL3N0YWdlMi9mc3lzX2V4dDJmcy5jIGdydWItMC45Ny04MTAvc3RhZ2UyL2ZzeXNfZXh0MmZzLmMKKy0tLSBncnViLTAuOTctODAwL3N0YWdlMi9mc3lzX2V4dDJmcy5jCTIwMDgtMDctMjEgMDA6NDA6MjEuNjY4ODc5NDc1IC0wNjAwCisrKysgZ3J1Yi0wLjk3LTgxMC9zdGFnZTIvZnN5c19leHQyZnMuYwkyMDA4LTA3LTIxIDAxOjAxOjExLjA2Mzk1Mzc3MyAtMDYwMAorQEAgLTc5LDcgKzc5LDUyIEBACisgICAgIF9fdTMyIHNfcmV2X2xldmVsOwkJLyogUmV2aXNpb24gbGV2ZWwgKi8KKyAgICAgX191MTYgc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworICAgICBfX3UxNiBzX2RlZl9yZXNnaWQ7CQkvKiBEZWZhdWx0IGdpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCistICAgIF9fdTMyIHNfcmVzZXJ2ZWRbMjM1XTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworKyAgICAvKgorKyAgICAgKiBUaGVzZSBmaWVsZHMgYXJlIGZvciBFWFQyX0RZTkFNSUNfUkVWIHN1cGVyYmxvY2tzIG9ubHkuCisrICAgICAqCisrICAgICAqIE5vdGU6IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgYW5kCisrICAgICAqIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgaXMgdGhhdCBpZiB0aGVyZSBpcyBhIGJpdCBzZXQKKysgICAgICogaW4gdGhlIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCB0aGF0IHRoZSBrZXJuZWwgZG9lc24ndAorKyAgICAgKiBrbm93IGFib3V0LCBpdCBzaG91bGQgcmVmdXNlIHRvIG1vdW50IHRoZSBmaWxlc3lzdGVtLgorKyAgICAgKgorKyAgICAgKiBlMmZzY2sncyByZXF1aXJlbWVudHMgYXJlIG1vcmUgc3RyaWN0OyBpZiBpdCBkb2Vzbid0IGtub3cKKysgICAgICogYWJvdXQgYSBmZWF0dXJlIGluIGVpdGhlciB0aGUgY29tcGF0aWJsZSBvciBpbmNvbXBhdGlibGUKKysgICAgICogZmVhdHVyZSBzZXQsIGl0IG11c3QgYWJvcnQgYW5kIG5vdCB0cnkgdG8gbWVkZGxlIHdpdGgKKysgICAgICogdGhpbmdzIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZC4uLgorKyAgICAgKi8KKysgICAgX191MzIgc19maXJzdF9pbm87CQkvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgKi8KKysgICAgX191MTYgc19pbm9kZV9zaXplOwkJLyogc2l6ZSBvZiBpbm9kZSBzdHJ1Y3R1cmUgKi8KKysgICAgX191MTYgc19ibG9ja19ncm91cF9ucjsJLyogYmxvY2sgZ3JvdXAgIyBvZiB0aGlzIHN1cGVyYmxvY2sgKi8KKysgICAgX191MzIgc19mZWF0dXJlX2NvbXBhdDsJLyogY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworKyAgICBfX3UzMiBzX2ZlYXR1cmVfaW5jb21wYXQ7CS8qIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworKyAgICBfX3UzMiBzX2ZlYXR1cmVfcm9fY29tcGF0OwkvKiByZWFkb25seS1jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisrICAgIF9fdTggIHNfdXVpZFsxNl07CQkvKiAxMjgtYml0IHV1aWQgZm9yIHZvbHVtZSAqLworKyAgICBjaGFyICBzX3ZvbHVtZV9uYW1lWzE2XTsJLyogdm9sdW1lIG5hbWUgKi8KKysgICAgY2hhciAgc19sYXN0X21vdW50ZWRbNjRdOwkvKiBkaXJlY3Rvcnkgd2hlcmUgbGFzdCBtb3VudGVkICovCisrICAgIF9fdTMyIHNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsgLyogRm9yIGNvbXByZXNzaW9uICovCisrICAgIC8qCisrICAgICAqIFBlcmZvcm1hbmNlIGhpbnRzLiAgRGlyZWN0b3J5IHByZWFsbG9jYXRpb24gc2hvdWxkIG9ubHkKKysgICAgICogaGFwcGVuIGlmIHRoZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQyBmbGFnIGlzIG9uLgorKyAgICAgKi8KKysgICAgX191OCAgc19wcmVhbGxvY19ibG9ja3M7CS8qIE5yIG9mIGJsb2NrcyB0byB0cnkgdG8gcHJlYWxsb2NhdGUqLworKyAgICBfX3U4ICBzX3ByZWFsbG9jX2Rpcl9ibG9ja3M7CS8qIE5yIHRvIHByZWFsbG9jYXRlIGZvciBkaXJzICovCisrICAgIF9fdTE2IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsvKiBQZXIgZ3JvdXAgdGFibGUgZm9yIG9ubGluZSBncm93dGggKi8KKysgICAgLyoKKysgICAgICogSm91cm5hbGluZyBzdXBwb3J0IHZhbGlkIGlmIEVYVDJfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgc2V0LgorKyAgICAgKi8KKysgICAgX191OCBzX2pvdXJuYWxfdXVpZFsxNl07CS8qIHV1aWQgb2Ygam91cm5hbCBzdXBlcmJsb2NrICovCisrICAgIF9fdTMyIHNfam91cm5hbF9pbnVtOwkvKiBpbm9kZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisrICAgIF9fdTMyIHNfam91cm5hbF9kZXY7CS8qIGRldmljZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisrICAgIF9fdTMyIHNfbGFzdF9vcnBoYW47CS8qIHN0YXJ0IG9mIGxpc3Qgb2YgaW5vZGVzIHRvIGRlbGV0ZSAqLworKyAgICBfX3UzMiBzX2hhc2hfc2VlZFs0XTsJLyogSFRSRUUgaGFzaCBzZWVkICovCisrICAgIF9fdTggIHNfZGVmX2hhc2hfdmVyc2lvbjsJLyogRGVmYXVsdCBoYXNoIHZlcnNpb24gdG8gdXNlICovCisrICAgIF9fdTggIHNfam5sX2JhY2t1cF90eXBlOyAJLyogRGVmYXVsdCB0eXBlIG9mIGpvdXJuYWwgYmFja3VwICovCisrICAgIF9fdTE2IHNfcmVzZXJ2ZWRfd29yZF9wYWQ7CisrICAgIF9fdTMyIHNfZGVmYXVsdF9tb3VudF9vcHRzOworKyAgICBfX3UzMiBzX2ZpcnN0X21ldGFfYmc7CS8qIEZpcnN0IG1ldGFibG9jayBncm91cCAqLworKyAgICBfX3UzMiBzX21rZnNfdGltZTsJCS8qIFdoZW4gdGhlIGZpbGVzeXN0ZW0gd2FzIGNyZWF0ZWQgKi8KKysgICAgX191MzIgc19qbmxfYmxvY2tzWzE3XTsgCS8qIEJhY2t1cCBvZiB0aGUgam91cm5hbCBpbm9kZSAqLworKyAgICBfX3UzMiBzX3Jlc2VydmVkWzE3Ml07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKyAgIH07CisgCisgc3RydWN0IGV4dDJfZ3JvdXBfZGVzYworQEAgLTIxOCw2ICsyNjMsMTQgQEAKKyAjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0socykgICAgICAgICAgKEVYVDJfQkxPQ0tfU0laRShzKSAvIHNpemVvZiAoX191MzIpKQorICNkZWZpbmUgRVhUMl9BRERSX1BFUl9CTE9DS19CSVRTKHMpCQkobG9nMihFWFQyX0FERFJfUEVSX0JMT0NLKHMpKSkKKyAKKysjZGVmaW5lIEVYVDJfR09PRF9PTERfUkVWICAgMCAgIC8qIFRoZSBnb29kIG9sZCAob3JpZ2luYWwpIGZvcm1hdCAqLworKyNkZWZpbmUgRVhUMl9EWU5BTUlDX1JFViAgICAxICAgLyogVjIgZm9ybWF0IHcvIGR5bmFtaWMgaW5vZGUgc2l6ZXMgKi8KKysjZGVmaW5lIEVYVDJfR09PRF9PTERfSU5PREVfU0laRSAxMjgKKysjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKSAgKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/IFwKKysgICAgICAgICAgICAgICAgIEVYVDJfR09PRF9PTERfSU5PREVfU0laRSA6IFwKKysgICAgICAgICAgICAgICAgIChzKS0+c19pbm9kZV9zaXplKQorKyNkZWZpbmUgRVhUMl9JTk9ERVNfUEVSX0JMT0NLKHMpCShFWFQyX0JMT0NLX1NJWkUocykvRVhUMl9JTk9ERV9TSVpFKHMpKQorKworIC8qIGxpbnV4L2V4dDJfZnMuaCAqLworICNkZWZpbmUgRVhUMl9CTE9DS19TSVpFX0JJVFMocykgICAgICAgICgocyktPnNfbG9nX2Jsb2NrX3NpemUgKyAxMCkKKyAvKiBraW5kIG9mIGZyb20gZXh0Mi9zdXBlci5jICovCitAQCAtNTUzLDcgKzYwNiw3IEBACisgICAgICAgZ2RwID0gR1JPVVBfREVTQzsKKyAgICAgICBpbm9fYmxrID0gZ2RwW2Rlc2NdLmJnX2lub2RlX3RhYmxlICsKKyAJKCgoY3VycmVudF9pbm8gLSAxKSAlIChTVVBFUkJMT0NLLT5zX2lub2Rlc19wZXJfZ3JvdXApKQorLQkgPj4gbG9nMiAoRVhUMl9CTE9DS19TSVpFIChTVVBFUkJMT0NLKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpKSk7CisrCSA+PiBsb2cyIChFWFQyX0lOT0RFU19QRVJfQkxPQ0sgKFNVUEVSQkxPQ0spKSk7CisgI2lmZGVmIEUyREVCVUcKKyAgICAgICBwcmludGYgKCJpbm9kZSB0YWJsZSBmc2Jsb2NrPSVkXG4iLCBpbm9fYmxrKTsKKyAjZW5kaWYgLyogRTJERUJVRyAqLworQEAgLTU2NSwxMyArNjE4LDEyIEBACisgICAgICAgLyogcmVzZXQgaW5kaXJlY3QgYmxvY2tzISAqLworICAgICAgIG1hcGJsb2NrMiA9IG1hcGJsb2NrMSA9IC0xOworIAorLSAgICAgIHJhd19pbm9kZSA9IElOT0RFICsKKy0JKChjdXJyZW50X2lubyAtIDEpCistCSAmIChFWFQyX0JMT0NLX1NJWkUgKFNVUEVSQkxPQ0spIC8gc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSkgLSAxKSk7CisrICAgICAgcmF3X2lub2RlID0gKHN0cnVjdCBleHQyX2lub2RlICopKChjaGFyICopSU5PREUgKworKwkoKGN1cnJlbnRfaW5vIC0gMSkgJiAoRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSAtIDEpKSAqCisrCUVYVDJfSU5PREVfU0laRSAoU1VQRVJCTE9DSykpOworICNpZmRlZiBFMkRFQlVHCisgICAgICAgcHJpbnRmICgiaXBiPSVkLCBzaXplb2YoaW5vZGUpPSVkXG4iLAorLQkgICAgICAoRVhUMl9CTE9DS19TSVpFIChTVVBFUkJMT0NLKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpKSwKKy0JICAgICAgc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworKwkgICAgICBFWFQyX0lOT0RFU19QRVJfQkxPQ0sgKFNVUEVSQkxPQ0spLCBFWFQyX0lOT0RFX1NJWkUgKFNVUEVSQkxPQ0spKTsKKyAgICAgICBwcmludGYgKCJpbm9kZT0leCwgcmF3X2lub2RlPSV4XG4iLCBJTk9ERSwgcmF3X2lub2RlKTsKKyAgICAgICBwcmludGYgKCJvZmZzZXQgaW50byBpbm9kZSB0YWJsZSBibG9jaz0lZFxuIiwgKGludCkgcmF3X2lub2RlIC0gKGludCkgSU5PREUpOworICAgICAgIGZvciAoaSA9ICh1bnNpZ25lZCBjaGFyICopIElOT0RFOyBpIDw9ICh1bnNpZ25lZCBjaGFyICopIHJhd19pbm9kZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjdkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTdWJqZWN0OiBbUEFUQ0hdIGdydWI6IGZpeCBmb3IgYXV0b21ha2UtMS4xMgorCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IHN0YWdlMS9NYWtlZmlsZS5hbToyOiBlcnJvcjogJ3BrZ2xpYmRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgZm9yICdEQVRBJworfCBzdGFnZTIvTWFrZWZpbGUuYW06MzU6IGVycm9yOiAncGtnbGliZGlyJyBpcyBub3QgYSBsZWdpdGltYXRlIGRpcmVjdG9yeSBmb3IgJ0RBVEEnCit8IHN0YWdlMi9NYWtlZmlsZS5hbTo0NjogZXJyb3I6ICdwa2dsaWJkaXInIGlzIG5vdCBhIGxlZ2l0aW1hdGUgZGlyZWN0b3J5IGZvciAnREFUQScKK3wgYXV0b3JlY29uZjogYXV0b21ha2UgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKK3wgRVJST1I6IGF1dG9yZWNvbmYgZXhlY3V0aW9uIGZhaWxlZC4KKworVGhlIHVwc3RyZWFtIHN0YXR1cyBpcyBtYXJrZWQgYXMgJ0luYXBwcm9wcmlhdGUnIGJlY2F1c2UgdGhpcyBwcm9ibGVtIGlzIG5vdCB1bmNvbW1vbiwKK2l0IGhhcyBiZWVuIHRoZXJlIGZvciBhIGxvbmcgdGltZSBhbmQgbm8gY2hhbmdlIGluIHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBncnViLTAuOTcvc3RhZ2UxL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zdGFnZTEvTWFrZWZpbGUuYW0KKysrKyBiL3N0YWdlMS9NYWtlZmlsZS5hbQorQEAgLTEsNyArMSw3IEBACistcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKy1ub2Rpc3RfcGtnbGliX0RBVEEgPSBzdGFnZTEKKytwa2dkYXRhZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKytub2Rpc3RfcGtnZGF0YV9EQVRBID0gc3RhZ2UxCisgCistQ0xFQU5GSUxFUyA9ICQobm9kaXN0X3BrZ2xpYl9EQVRBKQorK0NMRUFORklMRVMgPSAkKG5vZGlzdF9wa2dkYXRhX0RBVEEpCisgCisgIyBXZSBjYW4ndCB1c2UgYnVpbHRpbnMgb3Igc3RhbmRhcmQgaW5jbHVkZXMuCisgQU1fQ0NBU0ZMQUdTID0gJChTVEFHRTFfQ0ZMQUdTKSAtZm5vLWJ1aWx0aW4gLW5vc3RkaW5jCitJbmRleDogZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UyL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTIvTWFrZWZpbGUuYW0KK0BAIC0yNywxMiArMjcsMTIgQEAgbGliZ3J1Yl9hX0NGTEFHUyA9ICQoR1JVQl9DRkxBR1MpIC1JJCh0b3Bfc3JjZGlyKS9saWIgXAorIAktRFVTRV9NRDVfUEFTU1dPUkRTPTEgLURTVVBQT1JUX1NFUklBTD0xIC1EU1VQUE9SVF9IRVJDVUxFUz0xCisgCisgIyBTdGFnZSAyIGFuZCBTdGFnZSAxLjUncy4KKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKS8kKGhvc3RfY3B1KS0kKGhvc3RfdmVuZG9yKQorK3BrZ2RhdGFkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKS8kKGhvc3RfY3B1KS0kKGhvc3RfdmVuZG9yKQorIAorIEVYVFJBX1BST0dSQU1TID0gbmJsb2FkZXIuZXhlYyBweGVsb2FkZXIuZXhlYyBkaXNrbGVzcy5leGVjCisgCisgaWYgRElTS0xFU1NfU1VQUE9SVAorLXBrZ2xpYl9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisrcGtnZGF0YV9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisgCWZmc19zdGFnZTFfNSBpc285NjYwX3N0YWdlMV81IGpmc19zdGFnZTFfNSBtaW5peF9zdGFnZTFfNSBcCisgCXJlaXNlcmZzX3N0YWdlMV81IHVmczJfc3RhZ2UxXzUgdnN0YWZzX3N0YWdlMV81IHhmc19zdGFnZTFfNSBcCisgCW5iZ3J1YiBweGVncnViCitAQCAtNDMsNyArNDMsNyBAQCBub2luc3RfUFJPR1JBTVMgPSBwcmVfc3RhZ2UyLmV4ZWMgc3RhcnQuZXhlYyBzdGFydF9lbHRvcml0by5leGVjIFwKKyAJcmVpc2VyZnNfc3RhZ2UxXzUuZXhlYyB1ZnMyX3N0YWdlMV81LmV4ZWMgdnN0YWZzX3N0YWdlMV81LmV4ZWMgXAorIAl4ZnNfc3RhZ2UxXzUuZXhlYyBuYmxvYWRlci5leGVjIHB4ZWxvYWRlci5leGVjIGRpc2tsZXNzLmV4ZWMKKyBlbHNlCistcGtnbGliX0RBVEEgPSBzdGFnZTIgc3RhZ2UyX2VsdG9yaXRvIGUyZnNfc3RhZ2UxXzUgZmF0X3N0YWdlMV81IFwKKytwa2dkYXRhX0RBVEEgPSBzdGFnZTIgc3RhZ2UyX2VsdG9yaXRvIGUyZnNfc3RhZ2UxXzUgZmF0X3N0YWdlMV81IFwKKyAJZmZzX3N0YWdlMV81IGlzbzk2NjBfc3RhZ2UxXzUgamZzX3N0YWdlMV81IG1pbml4X3N0YWdlMV81IFwKKyAJcmVpc2VyZnNfc3RhZ2UxXzUgdWZzMl9zdGFnZTFfNSB2c3RhZnNfc3RhZ2UxXzUgeGZzX3N0YWdlMV81Cisgbm9pbnN0X0RBVEEgPSBwcmVfc3RhZ2UyIHN0YXJ0IHN0YXJ0X2VsdG9yaXRvCitAQCAtMTA1LDcgKzEwNSw3IEBAIGVsc2UKKyBCVUlMVF9TT1VSQ0VTID0gc3RhZ2UyX3NpemUuaAorIGVuZGlmCisgCistQ0xFQU5GSUxFUyA9ICQocGtnbGliX0RBVEEpICQobm9pbnN0X0RBVEEpICQoQlVJTFRfU09VUkNFUykKKytDTEVBTkZJTEVTID0gJChwa2dkYXRhX0RBVEEpICQobm9pbnN0X0RBVEEpICQoQlVJTFRfU09VUkNFUykKKyAKKyBzdGFnZTJfc2l6ZS5oOiBwcmVfc3RhZ2UyCisgCS1ybSAtZiBzdGFnZTJfc2l6ZS5oCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9uby1yZW9yZGVyLWZ1bmN0aW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwMzdlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK0FmdGVyIHRoZSBjb21taXQgInRjbW9kZS1kZWZhdWx0OiBzd2l0Y2ggdG8gZ2NjIDQuNi4wIGZvciB4ODYsIHg4Ni02NCAmIGFybSIsCit3ZSBnb3QgYnVnIDEwOTkgKGh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5KToKKworUnVubmluZyAiaW5zdGFsbCAtLXN0YWdlMj0vc3NkL2Jvb3QvZ3J1Yi9zdGFnZTIgL2Jvb3QvZ3J1Yi9zdGFnZTEoaGQwKQorICAgICAvYm9vdC9ncnViL3N0YWdlMiBwIC9ib290L2dydWIvbWVudSBsaXN0IiBmYWlsZWQKK0Vycm9yIDY6IE1pc21hdGNoZWQgb3IgY29ycnVwdCB2ZXJzaW9uIG9mIHN0YWdlMS9zdGFnZTIKKworVGhpcyB0dXJuZWQgb3V0IHRvIGJlIGEgZ2NjJ3MgYnVnLiBTZWUKK2h0dHBzOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjA1MTMKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MzkzMzMKKworVXBzdHJlYW0gZ2NjIHNlZW1zIHVuaW50ZXJlc3RlZCBpbiB0aGUgYnVnLCBzbyBhdCBwcmVzZW50IHdlIGNhbiBkaXNhYmxlIHRoZQorb3B0aW9uIGFzIGEgd29ya2Fyb3VuZC4gVGhhbmtzIFJ5YW4gSGlsbCBmb3IgdGhlIGludmVzdGlnYXRpb24gYW5kIHRoZQord29ya2Fyb3VuZCBwYXRjaC4KKworRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+CitXZWQgSnVuIDI5IDIwOjIxOjM5IENTVCAyMDExCisKKy0tLSBncnViLTAuOTcvc3RhZ2UyL01ha2VmaWxlLmFtLm9yaWcKKysrKyBncnViLTAuOTcvc3RhZ2UyL01ha2VmaWxlLmFtCitAQCAtNzksNyArNzksNyBAQAorIEhFUkNVTEVTX0ZMQUdTID0KKyBlbmRpZgorIAorLVNUQUdFMl9DT01QSUxFID0gJChTVEFHRTJfQ0ZMQUdTKSAtZm5vLWJ1aWx0aW4gLW5vc3RkaW5jIFwKKytTVEFHRTJfQ09NUElMRSA9ICQoU1RBR0UyX0NGTEFHUykgLWZuby1yZW9yZGVyLWZ1bmN0aW9ucyAtZm5vLWJ1aWx0aW4gLW5vc3RkaW5jIFwKKyAJJChORVRCT09UX0ZMQUdTKSAkKFNFUklBTF9GTEFHUykgJChIRVJDVUxFU19GTEFHUykKKyAKKyBTVEFHRTFfNV9MSU5LID0gLW5vc3RkbGliIC1XbCwtTiAtV2wsLVR0ZXh0IC1XbCwyMDAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4ZTBhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvb2JqY29weS1hYnNvbHV0ZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACisKK1RoaXMgcGF0Y2ggaXMgZnJvbSB1YnVudHU6CisgICogb2JqY29weS1hYnNvbHV0ZS5kaWZmICh1cGRhdGUpOiBSZW1vdmUgLm5vdGUsIC5jb21tZW50LCBhbmQKKyAgICAubm90ZS5nbnUuYnVpbGQtaWQgc2VjdGlvbnMgZnJvbSBpbWFnZXMgKExQOiAjNDQ0NzAzKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyBsb25nZXIgbWFpbnRhaW5lZF0KKworSW5kZXg6IGIvYWNpbmNsdWRlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9hY2luY2x1ZGUubTQKKysrKyBiL2FjaW5jbHVkZS5tNAorQEAgLTYxLDcgKzYxLDcgQEAKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFske0NDLWNjfSBjYW5ub3QgbGluayBhdCBhZGRyZXNzICRsaW5rX2FkZHJdKQorICAgZmkKKy0gIGlmIEFDX1RSWV9DT01NQU5EKFske09CSkNPUFktb2JqY29weX0gLU8gYmluYXJ5IGNvbmZ0ZXN0LmV4ZWMgY29uZnRlc3RdKTsgdGhlbiA6CisrICBpZiBBQ19UUllfQ09NTUFORChbJHtPQkpDT1BZLW9iamNvcHl9IC0tb25seS1zZWN0aW9uPS50ZXh0IC1PIGJpbmFyeSBjb25mdGVzdC5leGVjIGNvbmZ0ZXN0XSk7IHRoZW4gOgorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoWyR7T0JKQ09QWS1vYmpjb3B5fSBjYW5ub3QgY3JlYXRlIGJpbmFyeSBmaWxlc10pCisgICBmaQorSW5kZXg6IGIvc3RhZ2UxL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zdGFnZTEvTWFrZWZpbGUuYW0KKysrKyBiL3N0YWdlMS9NYWtlZmlsZS5hbQorQEAgLTEyLDQgKzEyLDQgQEAKKworIFNVRkZJWEVTID0gLmV4ZWMKKyAuZXhlYzoKKy0JJChPQkpDT1BZKSAtTyBiaW5hcnkgJDwgJEAKKysJJChPQkpDT1BZKSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmJ1aWxkLWlkICQ8ICRACitJbmRleDogYi9zdGFnZTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3N0YWdlMi9NYWtlZmlsZS5hbQorKysrIGIvc3RhZ2UyL01ha2VmaWxlLmFtCitAQCAtMjkzLDQgKzI5Myw0IEBACisgIyBHZW5lcmFsIHJ1bGUgZm9yIG1ha2luZyBhIHJhdyBiaW5hcnkuCisgU1VGRklYRVMgPSAuZXhlYworIC5leGVjOgorLQkkKE9CSkNPUFkpIC1PIGJpbmFyeSAkPCAkQAorKwkkKE9CSkNPUFkpIC1PIGJpbmFyeSAtUiAubm90ZSAtUiAuY29tbWVudCAtUiAubm90ZS5nbnUuYnVpbGQtaWQgJDwgJEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAwLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItZWZpXzIuMDAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0NGVhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAwLmJiCkBAIC0wLDAgKzEsNjYgQEAKK3JlcXVpcmUgZ3J1YjIuaW5jCisKK0RFUEVORFNfY2xhc3MtdGFyZ2V0ID0gImdydWItZWZpLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCA9ICJkaWZmdXRpbHMgZnJlZXR5cGUiCitQUiA9ICJyMyIKKworU1JDX1VSSSArPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2NmZyBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ3J1Yi0ke1BWfSIKKworIyBEZXRlcm1pbmUgdGhlIHRhcmdldCBhcmNoIGZvciB0aGUgZ3J1YiBtb2R1bGVzCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCByZQorICAgIHRhcmdldCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgaWYgdGFyZ2V0ID09ICJ4ODZfNjQiOgorICAgICAgICBncnVidGFyZ2V0ID0gJ3g4Nl82NCcKKyAgICAgICAgZ3J1YmltYWdlID0gImJvb3R4NjQuZWZpIgorICAgIGVsaWYgcmUubWF0Y2goJ2kuODYnLCB0YXJnZXQpOgorICAgICAgICBncnVidGFyZ2V0ID0gJ2kzODYnCisgICAgICAgIGdydWJpbWFnZSA9ICJib290aWEzMi5lZmkiCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImdydWItZWZpIGlzIGluY29tcGF0aWJsZSB3aXRoIHRhcmdldCAlcyIgJSB0YXJnZXQpCisgICAgZC5zZXRWYXIoIkdSVUJfVEFSR0VUIiwgZ3J1YnRhcmdldCkKKyAgICBkLnNldFZhcigiR1JVQl9JTUFHRSIsIGdydWJpbWFnZSkKK30KKworaW5oZXJpdCBkZXBsb3kKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfSEVMUDJNQU49IgorRVhUUkFfT0VDT05GID0gIi0td2l0aC1wbGF0Zm9ybT1lZmkgLS1kaXNhYmxlLWdydWItbWtmb250IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1lZmllbXU9bm8gLS1wcm9ncmFtLXByZWZpeD0nJyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtbGlibHptYT1ubyAtLWVuYWJsZS1kZXZpY2UtbWFwcGVyPW5vIC0tZW5hYmxlLWxpYnpmcz1ubyIKKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgZ3J1Yi1ta2ltYWdlICR7RH0ke2JpbmRpcn0KK30KKworR1JVQl9CVUlMRElOID89ICJib290IGxpbnV4IGV4dDIgZmF0IHNlcmlhbCBwYXJ0X21zZG9zIHBhcnRfZ3B0IG5vcm1hbCBlZmlfZ29wIGlzbzk2NjAgc2VhcmNoIgorCitkb19kZXBsb3koKSB7CisJIyBTZWFyY2ggZm9yIHRoZSBncnViLmNmZyBvbiB0aGUgbG9jYWwgYm9vdCBtZWRpYSBieSB1c2luZyB0aGUKKwkjIGJ1aWx0IGluIGNmZyBmaWxlIHByb3ZpZGVkIHZpYSB0aGlzIHJlY2lwZQorCWdydWItbWtpbWFnZSAtYyAuLi9jZmcgLXAgL0VGSS9CT09UIC1kIC4vZ3J1Yi1jb3JlLyBcCisJICAgICAgICAgICAgICAgLU8gJHtHUlVCX1RBUkdFVH0tZWZpIC1vIC4vJHtHUlVCX0lNQUdFfSBcCisJICAgICAgICAgICAgICAgJHtHUlVCX0JVSUxESU59CisJaW5zdGFsbCAtbSA2NDQgJHtCfS8ke0dSVUJfSU1BR0V9ICR7REVQTE9ZRElSfQorfQorCitkb19kZXBsb3lfY2xhc3MtbmF0aXZlKCkgeworCToKK30KKworYWRkdGFzayBkZXBsb3kgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fYnVpbGQKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3J1Yi8ke0dSVUJfVEFSR0VUfS1lZmkvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAvYm9vdC9lZmkvRUZJL0JPT1QvJHtHUlVCX1RBUkdFVH0tZWZpLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ3J1Yi8ke0dSVUJfVEFSR0VUfS1lZmkgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3J1YiBcCisgICAgICAgICAgICAgICAgIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNWFhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi9hdXRvZ2VuLnNoLWV4Y2x1ZGUtcGMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBmZjhmNjhjYzQ4ZmQzYzMwZDU1ZTFkNTcwZDUxZjJlMDk1MmM5NjhlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDI1IEphbiAyMDE0IDIzOjQ5OjQ0IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGF1dG9nZW4uc2g6IGV4Y2x1ZGUgLnBjIGZyb20gcG8vUE9URklMRVMuaW4KKworRXhjbHVkZSB0aGUgLnBjIGZyb20gcG8vUE9URklMRVMuaW4gc2luY2UgcXVpbHQgdXNlcyAicGF0Y2ggLS1iYWNrdXAiLAord2hpY2ggd2lsbCBjcmVhdGUgdGhlIGJhY2t1cCBmaWxlIHVuZGVyIC5wYywgdGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZAorZXJyb3JzLCBmb3IgZXhhbXBsZSwgb24gQ2VudE9TIDUueCwgaWYgdGhlIGJhY2t1cCBmaWxlIGlzIG51bGwKKyhuZXdmaWxlKSwgaXQncyBtb2RlIHdpbGwgYmUgMDAwLCB0aGVuIHdlIHdpbGwgZ2V0IGVycm9ycyB3aGVuIHhnZXR0ZXh0Cit0cnkgdG8gcmVhZCBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBhdXRvZ2VuLnNoIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXV0b2dlbi5zaCBiL2F1dG9nZW4uc2gKK2luZGV4IDc0MjQ0MjguLjg0MzYxOWUgMTAwNzU1CistLS0gYS9hdXRvZ2VuLnNoCisrKysgYi9hdXRvZ2VuLnNoCitAQCAtNSw3ICs1LDcgQEAgc2V0IC1lCisgZXhwb3J0IExDX0NPTExBVEU9QworIHVuc2V0IExDX0FMTAorIAorLWZpbmQgLiAtaW5hbWUgJyouW2NoXScgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQtZ3J1Yi8qJyAhIC1pcGF0aCAnLi9idWlsZC1hdXgvKicgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL21pc2MuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL2dsb2JhbC5jJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvc2VjbWVtLmMnICAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLXdpZHRoc3BlYy5jJyAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLWFzY2lpaC5jJyB8c29ydCA+IHBvL1BPVEZJTEVTLmluCisrZmluZCAuIC1pbmFtZSAnKi5bY2hdJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC1ncnViLyonICEgLWlwYXRoICcuL2J1aWxkLWF1eC8qJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvbWlzYy5jJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvZ2xvYmFsLmMnICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9zZWNtZW0uYycgICEgLWlwYXRoICcuL3V0aWwvZ3J1Yi1nZW4td2lkdGhzcGVjLmMnICEgLWlwYXRoICcuL3V0aWwvZ3J1Yi1nZW4tYXNjaWloLmMnICEgLXBhdGggJy4vLnBjLyonIHwgc29ydCA+IHBvL1BPVEZJTEVTLmluCisgZmluZCB1dGlsIC1pbmFtZSAnKi5pbicgISAtbmFtZSBNYWtlZmlsZS5pbiAgfHNvcnQgPiBwby9QT1RGSUxFUy1zaGVsbC5pbgorIAorIGVjaG8gIkltcG9ydGluZyB1bmljb2RlLi4uIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1YjIuaW5jIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTI3NzFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYwpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkdSVUIyIGlzIHRoZSBuZXh0LWdlbmVyYXRpb24gR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIgorCitERVNDUklQVElPTiA9ICJHUlVCMiBpcyB0aGUgbmV4dCBnZW5lcmFpb24gb2YgYSBHUExlZCBib290bG9hZGVyIFwKK2ludGVuZGVkIHRvIHVuaWZ5IGJvb3Rsb2FkaW5nIGFjcm9zcyB4ODYgb3BlcmF0aW5nIHN5c3RlbXMuIEluIFwKK2FkZGl0aW9uIHRvIGxvYWRpbmcgdGhlIExpbnV4IGtlcm5lbCwgaXQgaW1wbGVtZW50cyB0aGUgTXVsdGlib290IFwKK3N0YW5kYXJkLCB3aGljaCBhbGxvd3MgZm9yIGZsZXhpYmxlIGxvYWRpbmcgb2YgbXVsdGlwbGUgYm9vdCBpbWFnZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3J1Yi8iCitTRUNUSU9OID0gImJvb3Rsb2FkZXJzIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2dydWIvZ3J1Yi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVjay1pZi1saWJsem1hLWlzLWRpc2FibGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItaW5zdGFsbC5pbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2ggXAorICAgICAgICAgICAgIgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSB4eiIKKworU1JDX1VSSVttZDVzdW1dID0gImU5Mjc1NDBiNmVkYThiMDI0ZmIwMzkxZWVhYTQwOTFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY1YjM5YTA1NThmOGM4MDIyMDljNTc0ZjRkMDJjYTI2M2E4MDRlOGE1NjRiYzZjYWYxY2QwZmQzYjNjYzExZTMiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0Lip8aS44Ni4qKS0obGludXh8ZnJlZWJzZC4qKScKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2dydWItbW91bnRdID0gIi0tZW5hYmxlLWdydWItbW91bnQsLS1kaXNhYmxlLWdydWItbW91bnQsZnVzZSIKK1BBQ0tBR0VDT05GSUdbZGV2aWNlLW1hcHBlcl0gPSAiLS1lbmFibGUtZGV2aWNlLW1hcHBlciwtLWRpc2FibGUtZGV2aWNlLW1hcHBlcixsdm0yIgorCisjIGdydWIgYW5kIGdydWItZWZpJ3Mgc3lzcm9vdC8ke2RhdGFkaXJ9L2dydWIvZ3J1Yi1ta2NvbmZpZ19saWIgYXJlCisjIGNvbmZsaWN0ZWQsIHJlbW92ZSBpdCBzaW5jZSBubyBvbmUgdXNlcyBpdC4KK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19jbGFzcy10YXJnZXQgKz0gInJlbW92ZV9zeXNyb290X21rY29uZmlnX2xpYiIKK3JlbW92ZV9zeXNyb290X21rY29uZmlnX2xpYigpIHsKKyAgICBybSAtciAiJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9ncnViL2dydWItbWtjb25maWdfbGliIgorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8wLjk3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMC45Ny5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTdhMDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMC45Ny5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkdSVUIgaXMgdGhlIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciIKK0RFU0NSSVBUSU9OID0gIkdSVUIgaXMgYSBHUExlZCBib290bG9hZGVyIGludGVuZGVkIHRvIHVuaWZ5IGJvb3Rsb2FkaW5nIGFjcm9zcyB4ODYgXAorb3BlcmF0aW5nIHN5c3RlbXMuIEluIGFkZGl0aW9uIHRvIGxvYWRpbmcgdGhlIExpbnV4IGtlcm5lbCwgaXQgaW1wbGVtZW50cyB0aGUgTXVsdGlib290IFwKK3N0YW5kYXJkLCB3aGljaCBhbGxvd3MgZm9yIGZsZXhpYmxlIGxvYWRpbmcgb2YgbXVsdGlwbGUgYm9vdCBpbWFnZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dydWIvIgorU0VDVElPTiA9ICJib290bG9hZGVycyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncnViL21haW4uYztiZWdpbmxpbmU9MztlbmRsaW5lPTk7bWQ1PTIyYTVmMjhkMjEzMGZmZjlmMmExN2VkNTRiZTkwZWQ2IgorCitSREVQRU5EU18ke1BOfSA9ICJkaWZmdXRpbHMiCitQUiA9ICJyNiIKKworU1JDX1VSSSA9ICJmdHA6Ly9hbHBoYS5nbnUub3JnL2dudS9ncnViL2dydWItJHtQVn0udGFyLmd6OyBcCisgICAgICAgICAgIGZpbGU6Ly9uby1yZW9yZGVyLWZ1bmN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvaGVsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYmpjb3B5LWFic29sdXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItc3VwcG9ydC0yNTZieXRlLWlub2RlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImNkM2YzZWI1NDQ0NmJlNjAwMzE1NjE1OGQ1MWY0ODg0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlMWQxNWQxMmRiZDNlOTIwODExMWQ2YjgwNmFkNWE5ODU3Y2E4ODUwYzQ3ODc3ZDM2NTc1YjkwNDU1OTI2MGIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworQ09NUEFUSUJMRV9IT1NUID0gImkuODYuKi1saW51eCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1jdXJzZXMiCisKK2RvX2luc3RhbGxfYXBwZW5kX3Ztd2FyZSgpIHsKKwlta2RpciAtcCAke0R9L2Jvb3QvCisJbG4gLXNmIC4uL3Vzci9saWIvZ3J1Yi97JFRBUkdFVF9BUkNIfXskVEFSR0VUX1ZFTkRPUn0vICR7RH0vYm9vdC9ncnViCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE3MDllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIGdydWIyLmluYworCitSREVQRU5EU18ke1BOfSA9ICJkaWZmdXRpbHMgZnJlZXR5cGUiCitQUiA9ICJyMSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59L2kzODYtcGMvLmRlYnVnIgorCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGxhdGZvcm09cGMgLS1kaXNhYmxlLWdydWItbWtmb250IC0tcHJvZ3JhbS1wcmVmaXg9IiIgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtbGlibHptYT1ubyAtLWVuYWJsZS1kZXZpY2UtbWFwcGVyPW5vIC0tZW5hYmxlLWxpYnpmcz1ubyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCit9CisKK0lOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCitJTlNBTkVfU0tJUF8ke1BOfS1kYmcgPSAiYXJjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjc2MGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfZ2l0LmJiCkBAIC0wLDAgKzEsNTAgQEAKK3JlcXVpcmUgZ3J1YjIuaW5jCisKK0RFUEVORFMgKz0gImF1dG9nZW4tbmF0aXZlIgorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCitERUZBVUxUX1BSRUZFUkVOQ0VfYXJtID0gIjEiCisKK1BWID0gIjIuMDArJHtTUkNQVn0iCitTUkNSRVYgPSAiODdkZTY2ZDlkODM0NDZlY2RkYjI5Y2ZiZGY3MzY5MTAyYzhlMjA5ZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ3J1Yi5naXQgXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvZ2VuLnNoLWV4Y2x1ZGUtcGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWFkZC1vZS1rZXJuZWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtd2l0aC1nbGliYy0yLjIwLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0Lip8aS44Ni4qfGFybS4qfGFhcmNoNjQuKiktKGxpbnV4Lip8ZnJlZWJzZC4qKScKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKKyMgY29uZmlndXJlLmFjIGhhcyBjb2RlIHRvIHNldCB0aGlzIGF1dG9tYWdpY2FsbHkgZnJvbSB0aGUgdGFyZ2V0IHR1cGxlCisjIGJ1dCB0aGUgT0UgZnJlZWZvcm0gb25lIChjb3JlMi1mb28tYmFyLWxpbnV4KSBkb24ndCB3b3JrIHdpdGggdGhhdC4KKworR1JVQlBMQVRGT1JNX2FybSA9ICJ1Ym9vdCIKK0dSVUJQTEFURk9STV9hYXJjaDY0ID0gImVmaSIKK0dSVUJQTEFURk9STSA/Pz0gInBjIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPSR7R1JVQlBMQVRGT1JNfSAtLWRpc2FibGUtZ3J1Yi1ta2ZvbnQgLS1wcm9ncmFtLXByZWZpeD0iIiBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtbGlibHptYT1ubyAtLWVuYWJsZS1kZXZpY2UtbWFwcGVyPW5vIC0tZW5hYmxlLWxpYnpmcz1ubyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgKCBjZCAke1N9CisgICAgICAke1N9L2F1dG9nZW4uc2ggKQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9ncnViLmQKKyAKK30KKworIyBkZWJ1Z2VkaXQgY2hva2VzIG9uIGJhcmUgbWV0YWwgYmluYXJpZXMKK0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCA9ICIxIgorCitSREVQRU5EU18ke1BOfSA9ICJkaWZmdXRpbHMgZnJlZXR5cGUiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi8uZGVidWciCisKK0lOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCitJTlNBTkVfU0tJUF8ke1BOfS1kYmcgPSAiYXJjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1NTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290L2ZpeC1vYmpjb3B5LnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gMGY3ZjllM2JiMWQwZTFiOTNmM2FkOGExZDVkN2JkZDNmYmYyNzQ5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyNyBNYXIgMjAxNCAwNzoyMDozMyArMDAwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogdXNlIG9iamNvcHkgZnJvbSB0aGUgZW52CisKK0l0IHVzZXMgdGhlICJvYmpjb3B5IiBkaXJlY3RseSwgd2hpY2ggaXMgbm90IHN1aXRhYmxlIGZvciBjcm9zcyBjb21waWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5hbSB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCitAQCAtMTksNiArMTksOCBAQAorIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00ICR7QUNMT0NBTF9GTEFHU30KKyBBTV9NQUtFRkxBR1MgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorIAorK09CSkNPUFkgPz0gb2JqY29weQorKworIGd1bW1pYm9vdGxpYmRpciA9ICQocHJlZml4KS9saWIvZ3VtbWlib290CisgCisgQU1fQ1BQRkxBR1MgPSAtaW5jbHVkZSBjb25maWcuaAorQEAgLTE0OCw3ICsxNTAsNyBAQCAkKGd1bW1pYm9vdF9zb2xpYik6ICQoZ3VtbWlib290X29iamVjdHMpCisgLkRFTEVURV9PTl9FUlJPUjogJChndW1tYm9vdF9zb2xpYikKKyAKKyAkKGd1bW1pYm9vdCk6ICQoZ3VtbWlib290X3NvbGliKQorLQkkKEFNX1ZfR0VOKSBvYmpjb3B5IC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisrCSQoQU1fVl9HRU4pICQoT0JKQ09QWSkgLWogLnRleHQgLWogLnNkYXRhIC1qIC5kYXRhIC1qIC5keW5hbWljIFwKKyAJICAtaiAuZHluc3ltIC1qIC5yZWwgLWogLnJlbGEgLWogLnJlbG9jIFwKKyAJICAtLXRhcmdldD1lZmktYXBwLSQoQVJDSCkgJDwgJEAKKyAKK0BAIC0xODMsNyArMTg1LDcgQEAgJChzdHViX3NvbGliKTogJChzdHViX29iamVjdHMpCisgLkRFTEVURV9PTl9FUlJPUjogJChndW1tYm9vdF9zb2xpYikKKyAKKyAkKHN0dWIpOiAkKHN0dWJfc29saWIpCistCSQoQU1fVl9HRU4pIG9iamNvcHkgLWogLnRleHQgLWogLnNkYXRhIC1qIC5kYXRhIC1qIC5keW5hbWljIFwKKysJJChBTV9WX0dFTikgJChPQkpDT1BZKSAtaiAudGV4dCAtaiAuc2RhdGEgLWogLmRhdGEgLWogLmR5bmFtaWMgXAorIAkgIC1qIC5keW5zeW0gLWogLnJlbCAtaiAucmVsYSAtaiAucmVsb2MgXAorIAkgIC0tdGFyZ2V0PWVmaS1hcHAtJChBUkNIKSAkPCAkQAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjM2RiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdF9naXQuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJHdW1taWJvb3QgaXMgYSBzaW1wbGUgVUVGSSBib290IG1hbmFnZXIgd2hpY2ggZXhlY3V0ZXMgY29uZmlndXJlZCBFRkkgaW1hZ2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9ndW1taWJvb3QiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworREVQRU5EUyA9ICJnbnUtZWZpIHV0aWwtbGludXgiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworaW5oZXJpdCBkZXBsb3kKKworUFYgPSAiNDgrZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiMmJjZDkxOWM2ODFjOTUyZWI4NjdlZjFiZGI0NThmMWJjNDljMmQ1NSIKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3VtbWlib290IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1vYmpjb3B5LnBhdGNoIFwKKyAgICAgICAgICAiCisKKyMgTm90ZTogQWRkIENPTVBBVElCTEVfSE9TVCBoZXJlIGlzIG9ubHkgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGdudS1lZmkKKyMgd2hpY2ggaGFzIHNldCB0aGUgQ09NUEFUSUJMRV9IT1NULCB0aGUgZ3VtbWlib290IGl0c2VsZiBtYXkgd29yayBvbgorIyBtb3JlIGhvc3RzLgorQ09NUEFUSUJMRV9IT1NUID0gIih4ODZfNjQuKnxpLjg2LiopLWxpbnV4IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW1hbnBhZ2VzIC0td2l0aC1lZmktaW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLWVmaS1sZHNkaXI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9IgorCitFWFRSQV9PRU1BS0UgKz0gImd1bW1pYm9vdGxpYmRpcj0ke2xpYmRpcn0vZ3VtbWlib290IgorCitkb19kZXBsb3kgKCkgeworICAgICAgICBpbnN0YWxsICR7Qn0vZ3VtbWlib290Ki5lZmkgJHtERVBMT1lESVJ9Cit9CithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvQ09QWUlORy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL0NPUFlJTkcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNzBjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL0NPUFlJTkcucGF0Y2gKQEAgLTAsMCArMSwzNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisKK2RpZmYgLXJ1TiBob3N0YXAtY29uZi0xLjAtb3JpZy9DT1BZSU5HIGhvc3RhcC1jb25mLTEuMC9DT1BZSU5HCistLS0gaG9zdGFwLWNvbmYtMS4wLW9yaWcvQ09QWUlORwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGhvc3RhcC1jb25mLTEuMC9DT1BZSU5HCTIwMTAtMTItMDkgMTY6MzY6NDguMDAwMDAwMDAwICswODAwCitAQCAtMCwwICsxLDM0MCBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrDAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKwwKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKwwKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKwwKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKwwKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysKKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXAtZnctbG9hZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcC1mdy1sb2FkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MGJkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXAtZnctbG9hZC5wYXRjaApAQCAtMCwwICsxLDIyIEBACisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3LmhvbGdlcnNjaHVyaWcuZGUvcGF0Y2hlci5odG1sCisjCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tIGhvc3RhcC11dGlscy0wLjIuNC9ob3N0YXBfZndfbG9hZH5ob3N0YXAtZnctbG9hZAorKysrIGhvc3RhcC11dGlscy0wLjIuNC9ob3N0YXBfZndfbG9hZAorQEAgLTYsOSArNiw5IEBACisgIyBGaXJtd2FyZSBpbWFnZXMgZm9yIHRoZSBjYXJkCisgIyBUT0RPOiBjb3VsZCB0cnkgdG8gc2VsZWN0IGNvcnJlY3QgZmlybXdhcmUgdHlwZSBhdXRvbWF0aWNhbGx5CisgCistUFJJPS9ldGMvcGNtY2lhL1BNMDEwMTAyLkhFWAorLVNUQT0vZXRjL3BjbWNpYS9SRjAxMDgwMi5IRVgKKy1QUklTTTJfU1JFQz0vdXNyL2xvY2FsL2Jpbi9wcmlzbTJfc3JlYworK1BSST0vZXRjL3BjbWNpYS9wbTAxMDEwMi5oZXgKKytTVEE9L2V0Yy9wY21jaWEvcmYwMTA4MDQuaGV4CisrUFJJU00yX1NSRUM9L3Vzci9zYmluL3ByaXNtMl9zcmVjCisgCisgc2V0IC1lCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZiBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZGE4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZgpAQCAtMCwwICsxLDE5MyBAQAorbW9kdWxlICJob3N0YXBfY3MiIG9wdHMgImNoYW5uZWw9MyBpd19tb2RlPTIgZXNzaWQ9YW55IGlnbm9yZV9jaXNfdmNjPTEiCisKK2NhcmQgIkFjdGlvbnRlYyA4MDJDSTIiCisgIG1hbmZpZCAweDE2NjgsIDB4MDEwMQorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFpcldheSA4MDIuMTEgQWRhcHRlciAoUENNQ0lBKSIKKyAgI3ZlcnNpb24gIkFpcldheSIsICI4MDIuMTEgQWRhcHRlciAoUENNQ0lBKSIKKyAgbWFuZmlkIDB4MDI2MSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQXN1cyBTcGFjZUxpbmsgV0wxMTAiCisgICBtYW5maWQgMHgwMmFhLDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCisjIyBoYW5kaGVsZHMub3JnIGJ1ZyA5NjQKK2NhcmQgIkJlbGtpbiBGNUQ2MDYwIEV0aGVybmV0IgorICAgI3ZlcnNpb24gIlBDTUNJQSIsICIxMU0gV0xBTiBDYXJkIHYyLjUiLCAiSVNMMzczMDBQIiwgIlJldkEiCisgICBtYW5maWQgMHgwMjc0LCAweDE2MTIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIDExTWJwcyBXaXJlbGVzcyBQQyBDYXJkIgorICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wxMDAgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorICBtYW5maWQgMHgwMTM4LCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgSE5XLTEwMCAxMSBNYnBzIFdpcmVsZXNzIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAyOGEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEV0wtNjUwIgorICB2ZXJzaW9uICJEIiwgIkxpbmsgRFdMLTY1MCAxMU1icHMgV0xBTiBDYXJkIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEUkMtNjUwIgorICB2ZXJzaW9uICJEIiwgIkxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEQ0Y2NjAiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwNQorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkZhcmFsbG9uIFNreUxJTkUiCisgIHZlcnNpb24gIklOVEVSU0lMIiwgIkhGQTM4NHgvSUVFRSIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJIeXBlckxpbmsgV2lyZWxlc3MgUEMgQ2FyZCAxMU1icHMiCisgIHZlcnNpb24gIkh5cGVyTGluayIsICJXaXJlbGVzcyBQQyBDYXJkIDExTWJwcyIKKyAgYmluZCAiaG9zdGFwX2NzIgorCisjIGNhcmQgIkludGVyc2lsIFBSSVNNMiAxMSBNYnBzIFdpcmVsZXNzIEFkYXB0ZXIiCisjICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisjICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxBNDExMSBTcGVjdHJ1bTI0IFdpcmVsZXNzIExBTiBQQyBDYXJkIgorICB2ZXJzaW9uICJTeW1ib2wgVGVjaG5vbG9naWVzIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV1BDMTEgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIgorICB2ZXJzaW9uICJJbnN0YW50IFdpcmVsZXNzICIsICIgTmV0d29yayBQQyBDQVJEIiwgIlZlcnNpb24gMDEuMDIiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXQ0YxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjc0LCAweDMzMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgYmluZCAiaG9zdGFwX2NzIiAKKworIyMgaGFuZGhlbGRzLm9yZyBidWcgIzc5MAorY2FyZCAiTGlua3N5cyBXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCBXQ0YxMiIKKyAgbWFuZmlkIDB4MDI4YSwgMHgwNjczCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXTEFOIENGIENhcmQiCisgIG1hbmZpZCAweDAyNzQsIDB4MzMwMQorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5FVEdFQVIgTUE3MDEgV2lyZWxlc3MgQ0YgQ2FyZCIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTm9ydGVsIE5ldHdvcmtzIGVNb2JpbGl0eSA4MDIuMTEgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4MDFlYiwgMHgwODBhCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUExBTkVYIEdlb1dhdmUgR1ctQ0YxMTAiCisgIHZlcnNpb24gIlBMQU5FWCIsICJHZW9XYXZlL0dXLUNGMTEwIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlBST1hJTSBMQU4gUEMgQ0FSRCBIQVJNT05ZIDgwMjExQiIKKyAgdmVyc2lvbiAiUFJPWElNIiwgIkxBTiBQQyBDQVJEIEhBUk1PTlkgODAyMTFCIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByb3hpbSBSYW5nZUxBTi9EUyIKKyAgdmVyc2lvbiAiUFJPWElNIiwiUmFuZ2VMQU4tRFMvTEFOIFBDIENBUkQiCisgIG1hbmZpZCAweDAxMjYsIDB4ODAwMAorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhZmV3YXkgODAyLjExYiBXaXJlbGVzcyBBZGFwdGVyIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTQU1TVU5HIDExTWJwcyBXTEFOIENhcmQiCisgIHZlcnNpb24gIlNBTVNVTkciLCAiMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCisjIG5lZWRzIGZpcm13YXJlIHVwbG9hZCB2aWEgaG9zdGFwX2Z3X2xvYWQKK2NhcmQgIlNhbkRpc2sgQ29ubmVjdFBsdXMgT0VNICgwTUIpIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDEwCisgICBiaW5kICJob3N0YXBfY3MiCisKKyMgbmVlZHMgc3BlY2lhbCBhY3RpdmF0aW9uICg+PWhvc3RhcCAwLjMuMiBvbmx5KSBwbHVzIGZpcm13YXJlIHVwbG9hZAorY2FyZCAiU2FuRGlzayBDb25uZWN0UGx1cyB3LyBNZW1vcnkiCisgICB2ZXJzaW9uICJTYW5EaXNrIiwgIkNvbm5lY3RQbHVzIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMTAxCisgICBiaW5kICJob3N0YXBfY3MiIHRvIDAKKyMgICBiaW5kICJpZGUtY3MiIHRvIDEKKworY2FyZCAiU2VuYW8vT3JpZ28gODAyMTFiIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAwMGIsMHg3MTAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNpdGVjb20gV0wtMDA3IFdMQU4gQ0YgQ2FyZCIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDA0CisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU01DMjYzMiA4MDIuMTEgKHByaXNtMikgQ2FyZCIKKyAgdmVyc2lvbiAiU01DIiwgIlNNQzI2MzJXIiwgIlZlcnNpb24gMDEuMDIiLCAiIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNwZWVkU3RyZWFtIFNTMTAyMSBXaXJlbGVzcyBBZGFwdGVyIgorICAjdmVyc2lvbiAiU2llbWVucyIsICJTcGVlZFN0cmVhbSBXaXJlbGVzcyBQQ01DSUEiCisgIG1hbmZpZCAweDAyYWMsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlpDT01BWCBBaXJSdW5uZXIvWEktMzAwIgorICAjdmVyc2lvbiAiWkNPTUFYIiwgIkFpclJ1bm5lci9YSS0zMDAiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlpvbmV0IFpDRjExMDAiCisgIG1hbmZpZCAweDAwMGIsIDB4NzEwMAorICBiaW5kICJob3N0YXBfY3MiCisgIAorY2FyZCAiV2lyZWxlc3MgTEFOIEFkYXB0ZXIgVmVyc2lvbiAwMS4wMiIKKyAgIHZlcnNpb24gIldpcmVsZXNzIiwgIkxBTiBBZGFwdGVyIiwgIlZlcnNpb24gMDEuMDIiCisjICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFtYmljb20gV0wxMTAwQyAxMU1icyBDYXJkIDgwMi4xMWIiCisgIHZlcnNpb24gIkFtYmlDb20iLCAiV0wxMTAwQyA4MDIuMTFiIENGLUNhcmQiLCAiMi4yIgorICBtYW5maWQgMHhkNjAxLDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFtYmljb20gV0wxMTAwQyAxMU1icyBDYXJkIDgwMi4xMWIiCisgIG1hbmZpZCAweGQ2MDEsMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2FuZGlzayBDb25uZWN0IFNEV0NGQi0wMDAiCisgIG1hbmZpZCAweGQ2MDEsMHgwMDA1CisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBDYXJkcyB3aXRoIEludGVyc2lsIGZpcm13YXJlIChQcmlzbSBjaGlwc2V0KQorCitjYXJkICJMaW5rc3lzIFdQQzExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCIKKyAgdmVyc2lvbiAiVGhlIExpbmtzeXMgR3JvdXAsIEluYy4iLCAiSW5zdGFudCBXaXJlbGVzcyBOZXR3b3JrIFBDIENhcmQiLCAiSVNMMzczMDBQIiwgIlJldkEiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBDb21wYWN0Rmxhc2ggV2lyZWxlc3MgQ2FyZCIKKyAgdmVyc2lvbiAiTGlua3N5cyIsICJXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBQ1RJT05URUMgUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiCisgIHZlcnNpb24gIkFDVElPTlRFQyIsICJQUklTTSBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlcnNpb24gMyIKKyAgbWFuZmlkIDB4MDI3NCwweDE2MTMKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJCRU5RIEFXTDEwMCIKKyAgdmVyc2lvbiAiQkVOUSIsICJBV0wxMDAgUENNQ0lBIEFEQVBURVIiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUHJldGVjIFdMQU4iCisgIHZlcnNpb24gIlByZXRlYyIsICJDb21wYWN0V0xBTiBDYXJkIDgwMi4xMWIiLCAiMi41IgorICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJUcmVuZE5ldCBURVcgUEMxNiIKKyAgbWFuZmlkIDB4MDI3NCwgMHgxNjAxCisgIGJpbmQgImhvc3RhcF9jcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mLXVwc3RyZWFtIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYtdXBzdHJlYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3Mzg1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mLXVwc3RyZWFtCkBAIC0wLDAgKzEsMTkxIEBACitkZXZpY2UgImhvc3RhcF9jcyIKKyAgIGNsYXNzICJuZXR3b3JrIiBtb2R1bGUgImhvc3RhcCIsICJob3N0YXBfY3MiCisKK2NhcmQgIkludGVyc2lsIFBSSVNNMiBSZWZlcmVuY2UgRGVzaWduIDExTWIvcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJJTlRFUlNJTCIsICJIRkEzODR4L0lFRUUiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSBXTDEwMCAxMU1iL3MgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDEzOCwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSBXTDIwMCIKKyAgIHZlcnNpb24gIkNvbXBhcSIsICJXTDIwMF8xMU1icHNfV2lyZWxlc3NfUENJX0NhcmQiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkVNVEFDIEEyNDI0aSAxMU1icHMgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4YzI1MCwgMHgwMDAyCisjICAgY2lzICJjaXMvRW10YWMuZGF0IgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJJbnN0YW50IFdpcmVsZXNzICIsICIgTmV0d29yayBQQyBDQVJEIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV1BDMTEgVmVyIDIuNSAxMU1icHMgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDI3NCwgMHgxNjEyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV1BDMTEgVmVyIDMgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAyNzQsIDB4MTYxMworICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdDRjEyIFdpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIgorICAgdmVyc2lvbiAiTGlua3N5cyIsICJXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIHZlcnNpb24gIkQiLCAiTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiLCAiVmVyc2lvbiAwMS4wMiIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERSQy02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyMgIHZlcnNpb24gIkQiLCAiTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiLCAiVmVyc2lvbiAwMS4wMiIKKyAgIG1hbmZpZCAweDAyOGEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJab29tQWlyIDQxMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIHZlcnNpb24gIlpvb21BaXIgMTFNYnBzIEhpZ2giLCAiUmF0ZSB3aXJlbGVzcyBOZXR3b3JraW5nIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBZGR0cm9uIEFXUC0xMDAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIHZlcnNpb24gIkFkZHRyb24iLCAiQVdQLTEwMCBXaXJlbGVzcyBQQ01DSUEiLCAiVmVyc2lvbiAwMS4wMiIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2Ftc3VuZyBTV0wyMDAwLU4gMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAyNTAsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTTUMgMjYzMlcgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIHZlcnNpb24gIlNNQyIsICJTTUMyNjMyVyIsICJWZXJzaW9uIDAxLjAyIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJCcm9NYXggRnJlZXBvcnQgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIHZlcnNpb24gIkludGVyc2lsIiwgIlBSSVNNIDJfNSBQQ01DSUEgQURBUFRFUiIsICJJU0wzNzMwMFAiLCAiRXZhbC1SZXZBIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaLUNvbSBYSTMwMCAxMU1iL3MgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlpjb21heCBYSS0zMjVIIDIwMG1XIgorIyAgIHZlcnNpb24gIiAiLCAiSUVFRSA4MDIuMTEgV2lyZWxlc3MgTEFOL1BDIENhcmQiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMDUKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiM0NvbSBBaXJDb25uZWN0IFBDSSA3NzdBIgorICAgbWFuZmlkIDB4MDEwMSwgMHgwNzc3CisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlUuUy4gUm9ib3RpY3MgSUVFRSA4MDIuMTFiIFBDLUNBUkQiCisgICB2ZXJzaW9uICJVLlMuIFJvYm90aWNzIiwgIklFRUUgODAyLjExYiBQQy1DQVJEIiwgIlZlcnNpb24gMDEuMDIiCisjICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxvbmdzaGluZSBMQ1ItODUzMSAxMU1icHMgV0xBTiBQQ01DSUEgQ0FSRCIKKyAgIHZlcnNpb24gIk9FTSIsICJQUklTTTIgSUVFRSA4MDIuMTEgUEMtQ2FyZCIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQaGlsaXBzIDgwMi4xMWIgV0xBTiBQQ01DSUEiCisgICBtYW5maWQgMHgwMDBiLCAweDczMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUHJveGltIFJhbmdlTEFOIgorIyAgIHZlcnNpb24gIlBST1hJTSIsICJSYW5nZUxBTi1EUy9MQU4gUEMgQ0FSRCIKKyAgIG1hbmZpZCAweDAxMjYsIDB4ODAwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJCdWZmYWxvIFdMSS1DRi1TMTFHIgorICAgdmVyc2lvbiAiQlVGRkFMTyIsICJXTEktQ0YtUzExRyIKKyMgIG1hbmZpZCAweDAyNmYsIDB4MDMwYgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMZXZlbC1PbmUgV1BDLTAxMDAiCisgICB2ZXJzaW9uICJEaWdpdGFsIERhdGEgQ29tbXVuaWNhdGlvbnMiLCAiV1BDLTAxMDAiLCAiVmVyc2lvbiAwMC4wMCIKKyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJCZWxraW4gODAyLjExYiBXTEFOIFBDTUNJQSIKKyAgIHZlcnNpb24gIkJlbGtpbiIsICIxMU1icHMgV2lyZWxlc3MgTm90ZWJvb2sgTmV0d29yayBBZGFwdGVyIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2VuYW8gU0wtMjAxMUNEL1NMLTIwMTFDRFBMVVMiCisgICB2ZXJzaW9uICJJTlRFUlNJTCIsICJIRkEzODR4L0lFRUUiLCAiVmVyc2lvbiAwMS4wMiIKKyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJGdWxib25kIEFpcmJvbmQgWEktMzAwQiIKKyAgIHZlcnNpb24gIiAiLCAiSUVFRSA4MDIuMTEgV2lyZWxlc3MgTEFOL1BDIENhcmQiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTmV0Z2VhciBNQTQwMSIKKyAgIHZlcnNpb24gIk5FVEdFQVIgTUE0MDEgV2lyZWxlc3MgUEMiLCAiQ2FyZCIsICJWZXJzaW9uIDAxLjAwIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFdMLTY1MCBSZXYuIFAxIgorICAgdmVyc2lvbiAiRC1MaW5rIiwgIkRXTC02NTAgV2lyZWxlc3MgUEMgQ2FyZCBSZXZQIiwgIklTTDM3MTAxUC0xMCIsICJBMyIKKyMgICBtYW5maWQgMHgwMDBiLCAweDcxMTAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU29uaWNXQUxMIExvbmcgUmFuZ2UgV2lyZWxlc3MgQ2FyZCIKKyAgIHZlcnNpb24gIlNvbmljV0FMTCIsICJMb25nIFJhbmdlIFdpcmVsZXNzIENhcmQiLCAiSVNMMzcxMDBQIiwgIjEuMCIKKyAgIG1hbmZpZCAweDAwMGIsIDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTZW5hbyBOTC0yMDExQ0QgUExVUyBFeHQyIE1lcmN1cnkiCisgICB2ZXJzaW9uICJXTEFOIiwgIjExTWJwc19QQy1DYXJkXzMuMCIsICJJU0wzNzEwMFAiLCAiRXZhbC1SZXZBIgorICAgbWFuZmlkIDB4MDAwYiwgMHg3MTAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFpcnZhc3QgV0wxMDAiCisgICB2ZXJzaW9uICJBSVJWQVNUIiwgIklFRUUgODAyLjExYiBXaXJlbGVzcyBQQ01DSUEgQ2FyZCIsICJIRkEzODYzIgorICAgbWFuZmlkIDB4NTBjMiwgMHgwMDAxCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk1pY3Jvc29mdCBXaXJlbGVzcyBOb3RlYm9vayBBZGFwdGVyIE1OLTUyMCAxLjAuMyIKKyAgIHZlcnNpb24gIk1pY3Jvc29mdCIsICJXaXJlbGVzcyBOb3RlYm9vayBBZGFwdGVyIE1OLTUyMCIsICIiLCAiMS4wLjMiCisgICBtYW5maWQgMHgwMmQyLCAweDAwMDEKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTkVUR0VBUiBNQTQwMVJBIgorICAgdmVyc2lvbiAiTkVUR0VBUiBNQTQwMVJBIFdpcmVsZXNzIFBDIiwgIkNhcmQiLCAiSVNMMzczMDBQIiwgIkV2YWwtUmV2QSIKKyAgIG1hbmZpZCAweDAwMGIsIDB4NzMwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbGxpZWQgVGVsZXN5biBBVC1XQ0w0NTIiCisgICB2ZXJzaW9uICJBbGxpZWQgVGVsZXN5biIsICJBVC1XQ0w0NTIgV2lyZWxlc3MgUENNQ0lBIFJhZGlvIiwgIlZlci4gMS4wMCIKKyAgIG1hbmZpZCAweGMwMGYsIDB4MDAwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJjb3JlZ2EgV0wgUENDTC0xMSIKKyAgIHZlcnNpb24gImNvcmVnYSIsICJXTCBQQ0NMLTExIiwgIklTTDM3MzAwUCIsICJSZXZBIgorICAgbWFuZmlkIDB4YzAwZiwgMHgwMDAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbkRpc2sgQ29ubmVjdFBsdXMiCisgICB2ZXJzaW9uICJTYW5EaXNrIiwgIkNvbm5lY3RQbHVzIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMTAxCisgICBiaW5kICJob3N0YXBfY3MiIHRvIDAKKyAgIGJpbmQgImlkZS1jcyIgdG8gMQorCitjYXJkICJBU1VTIFdMLTEwMCA4MDExYiBXTEFOIFBDIENhcmQiCisgICB2ZXJzaW9uICJBU1VTIiwgIjgwMl8xMWJfUENfQ0FSRF8yNSIsICJWZXJzaW9uIDAxLjAwIgorICAgbWFuZmlkIDB4MDJhYSwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlp5WGVsIFp5YWlyIEItMTAxIDgwMi4xMWIgV0xBTiBjYXJkIgorICAgdmVyc2lvbiAiICIsICJJRUVFIDgwMi4xMSBXaXJlbGVzcyBMQU4vUEMgQ2FyZCIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAxMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJXTEFOIFBSSVNNIFBDTUNJQSBDQVJEIDM3MzAwUCBSZXZCNiIKKyAgIHZlcnNpb24gIldMQU4iLCAiUFJJU00gUENNQ0lBIENBUkQiLCAiMzczMDBQIiwgIlJldmlzaW9uIEI2IgorICAgbWFuZmlkIDB4NTBjMiwgMHg3MzAwCisgICBiaW5kICJob3N0YXBfY3MiCisKKworIyBPcHRpb25hbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGhvc3RhcF9jcy5vCisjIG1vZHVsZSAiaG9zdGFwX2NzIiBvcHRzICJjaGFubmVsPTMgaXdfbW9kZT0zIGVzc2lkPXRlc3QgaWdub3JlX2Npc192Y2M9MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ4MzUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLm1vZGFsaWFzCkBAIC0wLDAgKzEsMjggQEAKKyMgcHJvZHVjdCBpbmZvOiAiUHJldGVjIiwgIkNvbXBhY3RXTEFOIENhcmQgODAyLjExYiIsICIyLjUiCithbGlhcyBwY21jaWE6bTAxNTZjMDAwMmYwNmZuMDBwZm4wMHBhMUNBREQzRTVwYkU2OTc2MzZDcGM3QTVCRkNGMXBkMDAwMDAwMDAgaG9zdGFwX2NzCisKKyMgbWFudWZhY3R1cmVyIElEIHdoaWNoIGV4aXN0IGluIG9yaW5vY29fY3MgQU5EIGluIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMDBCYzcxMDBmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAwMEJjNzMwMGYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDEyNmM4MDAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMTM4YzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyNTBjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDI3NGMxNjEyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjc0YzE2MTNmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyOEFjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDJBQWMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm01MEMyYzczMDBmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bUQ2MDFjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptRDYwMWMwMDA1ZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworCisjIHByb2R1Y3QgaW5mbzogIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiLCAiIiwgIiIKK2FsaWFzIHBjbWNpYTptMDI4QWMwNjczZjA2Zm4wMHBmbjAwcGEwNzMzQ0M4MXBiMEM1MkYzOTVwYzAwMDAwMDAwcGQwMDAwMDAwMCBob3N0YXBfY3MKKworIyBwcm9kdWN0IGluZm86IlBMQU5FWCBDT01NVU5JQ0FUSU9OIElOQyIsIlBMQU5FWCBHVy1DRjExWCBXaXJlbGVzcyBDRiBDYXJkIiwgIiIsICIiCithbGlhcyBwY21jaWE6bUQ2MDFjMDAxMGYwNmZuMDBwZm4wMHBhNDcwM0NGNjhwYkZBRDczMThEcGMwMDAwMDAwMHBkMDAwMDAwMDAgaG9zdGFwX2NzCisKKyMgMHgwMTU2LCAweDAwMDIgYW5kICJWZXJzaW9uIDAxLjAyIiBvbmx5IGFwcGVhciBmb3IgUHJpc20gYmFzZWQgY2FyZHMuCithbGlhcyBwY21jaWE6bTAxNTZjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjNEI3NEJBQTBwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjICJCVUZGQUxPIiwgIldMSS1DRi1TMTFHIiwgIiIsICIiCithbGlhcyBwY21jaWE6bTAyNkZjMDMwQmYwNmZuMDBwZm4wMHBhMkRFQ0VDRTNwYjgyMDY3QzE4cGMwMDAwMDAwMHBkMDAwMDAwMDAgaG9zdGFwX2NzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkNGM1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC1jb25mXzEuMC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIEhvc3RBUCAod2lmaSkgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiUENNQ0lBLWNzIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHdpcmVsZXNzIExBTiBjYXJkcyBiYXNlZCBvbiBJbnRlcnNpbCdzIFByaXNtMi8yLjUvMyBjaGlwc2V0LiIKK1NFQ1RJT04gPSAia2VybmVsL21vZHVsZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCitQUiA9ICJyMTUiCisKK1NSQ19VUkkgPSAiZmlsZTovL2hvc3RhcF9jcy5tb2RhbGlhcyBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLnBhdGNoIgorCitpbmhlcml0IGFsbGFyY2gKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kcHJvYmUuZAorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdGFwX2NzLm1vZGFsaWFzICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQvaG9zdGFwX2NzLmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLTAuNC43L2xkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMtMC40LjcvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTk5ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLTAuNC43L2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGhvc3RhcC11dGlscy0wLjQuNy5vcmlnL01ha2VmaWxlCisrKysgaG9zdGFwLXV0aWxzLTAuNC43L01ha2VmaWxlCitAQCAtMTQsMTcgKzE0LDE3IEBAIHByaXNtMl9zcmVjLm86IHByaXNtMl9zcmVjLmMgdXRpbC5oCisgaG9zdGFwX2NyeXB0X2NvbmY6IGhvc3RhcF9jcnlwdF9jb25mLmMKKworIGhvc3RhcF9kaWFnOiBob3N0YXBfZGlhZy5vIHV0aWwubworLQkkKENDKSAtbyBob3N0YXBfZGlhZyAkKENGTEFHUykgaG9zdGFwX2RpYWcubyB1dGlsLm8KKysJJChDQykgLW8gaG9zdGFwX2RpYWcgJChDRkxBR1MpICQoTERGTEFHUykgaG9zdGFwX2RpYWcubyB1dGlsLm8KKworIGhvc3RhcF9kaWFnLm86IGhvc3RhcF9kaWFnLmMgdXRpbC5oCisKKyB1dGlsLm86IHV0aWwuYyB1dGlsLmgKKworIGhvc3RhcF9pb19kZWJ1ZzogaG9zdGFwX2lvX2RlYnVnLmMKKy0JJChDQykgLW8gaG9zdGFwX2lvX2RlYnVnICQoQ0ZMQUdTKSBob3N0YXBfaW9fZGVidWcuYworKwkkKENDKSAtbyBob3N0YXBfaW9fZGVidWcgJChDRkxBR1MpICQoTERGTEFHUykgaG9zdGFwX2lvX2RlYnVnLmMKKworIGhvc3RhcF9yaWQ6IGhvc3RhcF9yaWQubyB1dGlsLm8KKy0JJChDQykgLW8gaG9zdGFwX3JpZCAkKENGTEFHUykgaG9zdGFwX3JpZC5vIHV0aWwubworKwkkKENDKSAtbyBob3N0YXBfcmlkICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9yaWQubyB1dGlsLm8KKworIGhvc3RhcF9yaWQubzogaG9zdGFwX3JpZC5jIHV0aWwuaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkOTc3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy5pbmMKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJVc2VyIG1vZGUgaGVscGVycyBmb3IgdGhlIGhvc3RhcCBkcml2ZXIiCitERVNDUklQVElPTiA9ICJUaGUgaG9zdGFwIGRyaXZlciBzdXBwb3J0cyBIb3N0IEFQIG1vZGUsIGl0IGFsbG93cyBmb3IgSUVFRSA4MDIuMTEgXAorbWFuYWdlbWVudCBmdW5jdGlvbnMgb24gdGhlIGhvc3QgY29tcHV0ZXIgYW5kIGFsbG93cyB0aGUgc3lzdGVtIHRvIGFjdCBhcyBhbiBhY2Nlc3MgcG9pbnQuIgorSE9NRVBBR0UgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vaG9zdGFwLmVwaXRlc3QuZmkvYnVnei8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorCQkJZmlsZTovL3V0aWwuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTk7bWQ1PWQzYjkyODA4NTEzMDJlNWJhMzRlNWZiNzE3NDg5YjZkIgorU0VDVElPTiA9ICJrZXJuZWwvdXNlcmxhbmQiCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJodHRwOi8vaG9zdGFwLmVwaXRlc3QuZmkvcmVsZWFzZXMvaG9zdGFwLXV0aWxzLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL2hvc3RhcC1mdy1sb2FkLnBhdGNoIgorUyA9ICIke1dPUktESVJ9L2hvc3RhcC11dGlscy0ke1BWfSIKKworQklOQVJJRVMgPSAiaG9zdGFwX2NyeXB0X2NvbmYgaG9zdGFwX2RpYWcgaG9zdGFwX2Z3X2xvYWQgaG9zdGFwX2lvX2RlYnVnIFwKKwkgICAgaG9zdGFwX3JpZCBwcmlzbTJfcGFyYW0gcHJpc20yX3NyZWMgc3BsaXRfY29tYmluZWRfaGV4IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0vCisJZm9yIGYgaW4gJHtCSU5BUklFU30KKwlkbworCQlpbnN0YWxsIC1tIDA3NTUgJGYgJHtEfSR7c2JpbmRpcn0vCisJZG9uZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1NDgxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlsc18wLjQuNy5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgaG9zdGFwLXV0aWxzLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbGRmbGFncy5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZmUwNDE1ODFiOGYwMTY2NmUzNTNiZWMyMDkxN2M4NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNmY1OThkOGUzNTZjMTYyMGZhMDA5ZWNhMGE3MDBiZjExMDVlMTY4MTdlZWZkNzdkODkxOTk0MjYxMDA5MzU1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTgxODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMvR1BMdjIucGF0Y2gKQEAgLTAsMCArMSwzNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMva2V5bWFwLnNoIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL2tleW1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWJjNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL2tleW1hcC5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKyMKKyMgbG9hZCBrZXltYXAsIGlmIGV4aXN0aW5nCisKK0tFUk5FTF9NQUpNSU49YHVuYW1lIC1yIHwgY3V0IC1kICcuJyAtZiAxLDJgCitpZiBbIC1lIC9ldGMva2V5bWFwLSRLRVJORUxfTUFKTUlOLm1hcCBdOyB0aGVuCisJbG9hZGtleXMgL2V0Yy9rZXltYXAtJEtFUk5FTF9NQUpNSU4ubWFwCitmaQorCitpZiAoIGxzICIvZXRjIiB8IGdyZXAgLXEgImtleW1hcC1leHRlbnNpb24tJHtLRVJORUxfTUFKTUlOfSIgKQordGhlbgorCWZvciBleHRlbnNpb24gaW4gYGxzIC0xIC9ldGMva2V5bWFwLWV4dGVuc2lvbi0kS0VSTkVMX01BSk1JTipgIAorCWRvCQorCQlsb2Fka2V5cyAiJGV4dGVuc2lvbiIKKwlkb25lCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTNhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMva2V5bWFwc18xLjAuYmIKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJLZXlib2FyZCBtYXBzIgorREVTQ1JJUFRJT04gPSAiS2V5bWFwcyBhbmQgaW5pdHNjcmlwdCB0byBzZXQgdGhlIGtleW1hcCBvbiBib290dXAuIgorU0VDVElPTiA9ICJiYXNlIgorCitSREVQRU5EU18ke1BOfSA9ICJrYmQiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitQUiA9ICJyMzEiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyMgQXMgdGhlIHJlY2lwZSBkb2Vzbid0IGluaGVyaXQgc3lzdGVtZC5iYmNsYXNzLCB3ZSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlCisjIG1hbnVhbGx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHBvc3RpbnN0L3ByZWluc3QgZ2VuZXJhdGVkLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitTUkNfVVJJID0gImZpbGU6Ly9rZXltYXAuc2ggXAorCSAgIGZpbGU6Ly9HUEx2Mi5wYXRjaCIKKworSU5JVFNDUklQVF9OQU1FID0gImtleW1hcC5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAxIFMgLiIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICAjIE9ubHkgaW5zdGFsbCB0aGUgc2NyaXB0IGlmICdzeXN2aW5pdCcgaXMgaW4gRElTVFJPX0ZFQVRVUkVTCisgICAgIyBUSGUgdWxpdGl0eSB0aGlzIHNjcmlwdCBwcm92aWRlcyBjb3VsZCBiZSBhY2hpZXZlZCBieSBzeXN0ZW1kLXZjb25zb2xlLXNldHVwLnNlcnZpY2UKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2tleW1hcC5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgICAgZmkKK30KKworREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sga2V5bWFwLnNlcnZpY2UKKwlmaQorfQorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzQyNGMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorbGliYWNwaTogUmVtb3ZlIFFBIHdhcm5pbmc6IE5vIEdOVV9IQVNIIGluIHRoZSBlbGYgYmluYXJ5CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisgIFVzZWZ1bCB3aXRoaW4gYml0YmFrZSBlbnZpcm9ubWVudCBvbmx5LgorCitTaWduZWQtb2ZmLWJ5OiBNdWhhbW1hZCBTaGFrZWVsIDxtdWhhbW1hZF9zaGFrZWVsQG1lbnRvci5jb20+CisKKy0tLQorIE1ha2VmaWxlICB8ICAgIDMgKystCisgY29uZmlnLm1rIHwgICAgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGxpYmFjcGktMC4yLm9yaWcvTWFrZWZpbGUKKysrKyBsaWJhY3BpLTAuMi9NYWtlZmlsZQorQEAgLTE5LDYgKzE5LDcgQEAgb3B0aW9uczoKKyAJQGVjaG8gIkNGTEFHUyAgID0gJHtDRkxBR1N9IgorIAlAZWNobyAiQ0MgICAgICAgPSAke0NDfSIKKyAJQGVjaG8gIlNPRkxBR1MgID0gJHtTT0ZMQUdTfSIKKysJQGVjaG8gIkxERkxBR1MgID0gJHtMREZMQUdTfSIKKyAJQGVjaG8gIkxEICAgICAgID0gJHtMRH0iCisgCisgLmMubzoKK0BAIC0zNCw3ICszNSw3IEBAIGxpYmFjcGkuYTogJHtPQkp9CisgCisgbGliYWNwaS5zbzogJHtPQkp9CisgCUBlY2hvIExEICRACistCUAke0NDfSAke1NPRkxBR1N9IC1vICRALiR7U09WRVJTSU9OfSAke09CSn0KKysJQCR7Q0N9ICR7U09GTEFHU30gJHtMREZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisgCisgdGVzdC1saWJhY3BpOiAke09CSl90ZXN0fQorIAlAZWNobyBMRCAkQAorLS0tIGxpYmFjcGktMC4yLm9yaWcvY29uZmlnLm1rCisrKysgbGliYWNwaS0wLjIvY29uZmlnLm1rCitAQCAtMTAsNiArMTAsNyBAQCBNQU5QUkVGSVggPSAke1BSRUZJWH0vc2hhcmUvbWFuCisgU09GTEFHUyA9IC1zaGFyZWQgLVdsLC1zb25hbWUsJHtTT05BTUV9CisgQ0ZMQUdTICs9IC1mUElDIC1nIC0tcGVkYW50aWMgLVdhbGwgLVdleHRyYQorIEFSRkxBR1MgPSBjcgorK0xERkxBR1MgPQorIAorICMgQ29tcGlsZXIgYW5kIGxpbmtlcgorIENDID0gY2MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xpYmFjcGlfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlZDM0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggbGliYWNwaSBmb3IgeDMyCisgICAgCisgICAgbGliYWNwaSBkb2Vzbid0IHVzZSBiYXNlX2xpYmRpciBmb3IgaW5zdGFsbC4gIFRoaXMgcGF0Y2ggYWRkcworICAgIGJhc2VfbGliZGlyIHN1cHBvcnQgc28gdGhhdCB4MzIgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWQgcHJvcGVybHkuCisKK1BhdGNoIFJlY2VpdmVkIGZyb206ICBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA1CisKK0luZGV4OiBsaWJhY3BpLTAuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFjcGktMC4yLm9yaWcvTWFrZWZpbGUKKysrKyBsaWJhY3BpLTAuMi9NYWtlZmlsZQorQEAgLTgsNiArOCwxMCBAQCBTUkNfdGVzdCA9IHRlc3QtbGliYWNwaS5jIGxpYmFjcGkuYyBsaXN0CisgT0JKID0gJHtTUkM6LmM9Lm99CisgT0JKX3Rlc3QgPSAke1NSQ190ZXN0Oi5jPS5vfQorIAorK2lmbmRlZiBiYXNlX2xpYmRpcgorK2Jhc2VfbGliZGlyPS9saWIKKytlbmRpZgorKworIGFsbDogb3B0aW9ucyBsaWJhY3BpLmEgbGliYWNwaS5zbyB0ZXN0LWxpYmFjcGkKKyAKKyBvcHRpb25zOgorQEAgLTQyLDEzICs0NiwxMyBAQCBpbnN0YWxsOiBhbGwKKyAJQG1rZGlyIC1wICR7REVTVERJUn0ke1BSRUZJWH0vaW5jbHVkZQorIAlAY3AgLWYgbGliYWNwaS5oICR7REVTVERJUn0ke1BSRUZJWH0vaW5jbHVkZQorIAlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vaW5jbHVkZS9saWJhY3BpLmgKKy0JQGVjaG8gaW5zdGFsbGluZyBsaWJyYXJ5IHRvICR7REVTVERJUn0ke1BSRUZJWH0vbGliCistCUBta2RpciAtcCAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAY3AgLWYgbGliYWNwaS5hICR7REVTVERJUn0ke1BSRUZJWH0vbGliCistCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfS9saWIvbGliYWNwaS5hCistCUBjcCAtZiAke1NPTkFNRX0gJHtERVNURElSfSR7UFJFRklYfS9saWIvCistCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfS9saWIvJHtTT05BTUV9CistCUBsbiAtcyAke1NPTkFNRX0gJHtERVNURElSfSR7UFJFRklYfS9saWIvbGliYWNwaS5zbworKwlAZWNobyBpbnN0YWxsaW5nIGxpYnJhcnkgdG8gJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBta2RpciAtcCAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0KKysJQGNwIC1mIGxpYmFjcGkuYSAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0KKysJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0vbGliYWNwaS5hCisrCUBjcCAtZiAke1NPTkFNRX0gJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9LworKwlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfS8ke1NPTkFNRX0KKysJQGxuIC1zICR7U09OQU1FfSAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0vbGliYWNwaS5zbworIAlAZWNobyBpbnN0YWxsaW5nIHRlc3QtbGliYWNwaSB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2JpbgorIAlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfS9iaW4KKyAJQGNwIC1mIHRlc3QtbGliYWNwaSAke0RFU1RESVJ9JHtQUkVGSVh9L2JpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL21ha2VmaWxlLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9tYWtlZmlsZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0ZWYzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9tYWtlZmlsZS1maXgucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIE1ha2VmaWxlICB8ICAgIDYgKysrLS0tCisgY29uZmlnLm1rIHwgICAgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworSW5kZXg6IGxpYmFjcGktMC4yL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWNwaS0wLjIub3JpZy9NYWtlZmlsZQkyMDA3LTA3LTI5IDE0OjA5OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmFjcGktMC4yL01ha2VmaWxlCTIwMDgtMDktMjYgMTA6MzQ6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsMTYgKzI1LDE2IEBAICR7T0JKfTogY29uZmlnLm1rIGxpYmFjcGkuaAorIAorIGxpYmFjcGkuYTogJHtPQkp9CisgCUBlY2hvIEFSICRACistCUAke0FSfSAkQCAke09CSn0KKysJJHtBUn0gJHtBUkZMQUdTfSAkQCAke09CSn0KKyAJQCR7UkFOTElCfSAkQAorIAorIGxpYmFjcGkuc286ICR7T0JKfQorIAlAZWNobyBMRCAkQAorLQlAJHtMRH0gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisrCUAke0NDfSAke1NPRkxBR1N9IC1vICRALiR7U09WRVJTSU9OfSAke09CSn0KKyAKKyB0ZXN0LWxpYmFjcGk6ICR7T0JKX3Rlc3R9CisgCUBlY2hvIExEICRACistCUAke0xEfSAtbyAkQCAke09CSl90ZXN0fSAke0xERkxBR1N9CisrCUAke0NDfSAtbyAkQCAke09CSl90ZXN0fSAke0xERkxBR1N9CisgCUBzdHJpcCAkQAorIAorIGluc3RhbGw6IGFsbAorSW5kZXg6IGxpYmFjcGktMC4yL2NvbmZpZy5taworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFjcGktMC4yLm9yaWcvY29uZmlnLm1rCTIwMDctMDctMjkgMTQ6MDk6MzQuMDAwMDAwMDAwICswMjAwCisrKysgbGliYWNwaS0wLjIvY29uZmlnLm1rCTIwMDgtMDktMjYgMTA6MzQ6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtOSw5ICs5LDEwIEBAIE1BTlBSRUZJWCA9ICR7UFJFRklYfS9zaGFyZS9tYW4KKyAjIGZsYWdzCisgU09GTEFHUyA9IC1zaGFyZWQgLVdsLC1zb25hbWUsJHtTT05BTUV9CisgQ0ZMQUdTICs9IC1mUElDIC1nIC0tcGVkYW50aWMgLVdhbGwgLVdleHRyYQorK0FSRkxBR1MgPSBjcgorIAorICMgQ29tcGlsZXIgYW5kIGxpbmtlcgorIENDID0gY2MKKyBMRCA9ICR7Q0N9CistQVIgPSBhciBjcgorK0FSID0gYXIKKyBSQU5MSUIgPSByYW5saWIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2E3NWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVc2VkIHRoZSBjcm9zcyBzdHJpcCBpbnN0ZWFkIG9mIGhvc3Qgc3RyaXAgdG8gYXZvaWQgdGhpcyBidWlsZCBlcnJvcjoKKworfCBzdHJpcDogVW5hYmxlIHRvIHJlY29nbmlzZSB0aGUgZm9ybWF0IG9mIHRoZSBpbnB1dCBmaWxlIGB0ZXN0LWxpYmFjcGknCit8IG1ha2U6ICoqKiBbdGVzdC1saWJhY3BpXSBFcnJvciAxCit8IEVSUk9SOiBvZV9ydW5tYWtlIGZhaWxlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA3CisKK0luZGV4OiBsaWJhY3BpLTAuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFjcGktMC4yLm9yaWcvTWFrZWZpbGUKKysrKyBsaWJhY3BpLTAuMi9NYWtlZmlsZQorQEAgLTM5LDcgKzM5LDcgQEAgbGliYWNwaS5zbzogJHtPQkp9CisgdGVzdC1saWJhY3BpOiAke09CSl90ZXN0fQorIAlAZWNobyBMRCAkQAorIAlAJHtDQ30gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorLQlAc3RyaXAgJEAKKysJQCR7U1RSSVB9ICRACisgCisgaW5zdGFsbDogYWxsCisgCUBlY2hvIGluc3RhbGxpbmcgaGVhZGVyIHRvICR7REVTVERJUn0ke1BSRUZJWH0vaW5jbHVkZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzAyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvbGliYWNwaV8wLjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJBQ1BJIGRhdGEgZ2F0aGVyaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHZW5lcmFsIHB1cnBvc2Ugc2hhcmVkIGxpYnJhcnkgZm9yIHByb2dyYW1zIGdhdGhlcmluZyBBQ1BJIGRhdGEgb24gTGludXguIFwKK1RoZXJtYWwgem9uZXMsIGJhdHRlcnkgaW5mb21yYXRpb24sIGZhbiBpbmZvcm1hdGlvbiBhbmQgQUMgc3RhdGVzIGFyZSBpbXBsZW1lbnRlZC4iCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5nb2xkZS5kZS9saWJhY3BpLmh0bWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWZlYzE3ZjgyZjE2NjMwYWRmMmRmYjdkMmE0NmYyMWM1IgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvZG93bmxvYWQvbGliYWNwaS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKwkgICBmaWxlOi8vdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA1YjUzZGQ3YmVhZDY2ZGRhMzVmZWM1MDJiOTEwNjZjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEzMDg2ZTMxZDQyOGI5YzEyNTk1NGQ0OGFjNDk3Yjc1NGJiYmNlMmVmMzRlYTI5ZWNkOTAzZTgyZTI1YmFkMjkiCisKK2luaGVyaXQgbGliX3BhY2thZ2UKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44NikuKi0obGludXh8ZnJlZWJzZC4qKScKKworQ0ZMQUdTICs9ICItZlBJQyIKK0VYVFJBX09FTUFLRSArPSAnU1RSSVA9ImVjaG8iJworCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFBSRUZJWD0ke2V4ZWNfcHJlZml4fQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MmNmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYWNkZWZpbmUucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorQWRkIGEgZGVzY3JpcHRpb24gdG8gdGhlIEFDX0RFRklORSBmb3IgTE9DQUxFRElSIHNvIHRoYXQgaXQgYXBwZWFycyBpbiBjb25maWcuaAorYW5kIHNpbGVuY2VzIGEgZmF0YWwgd2FybmluZy4KKworVXBzdHJlYW0tU3RhdHVzOlBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGMxMDQ2MGMuLmFhMjAyNjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTI1OCw3ICsyNTgsNyBAQCBBQ19TVUJTVChMSUJTKQorIAorIEFNX0dOVV9HRVRURVhUCisgCistQUNfREVGSU5FX1VOUVVPVEVEKExPQ0FMRURJUiwiJHByZWZpeC8kREFUQURJUk5BTUUiKQorK0FDX0RFRklORV9VTlFVT1RFRChMT0NBTEVESVIsIiRwcmVmaXgvJERBVEFESVJOQU1FIixbbG9jYWxlIGRpcmVjdG9yeV0pCisgCisgQUNfT1VUUFVUKFtNYWtlZmlsZSBpbnRsL01ha2VmaWxlIGxpYi9NYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgIG00L01ha2VmaWxlIFwKKyBtYW4vTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gc3JjL01ha2VmaWxlIGRlYmlhbi9ydWxlcyBTcGVjZmlsZSBzeXN0eXBlIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hdXRvdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDUxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYXV0b3Rvb2xzLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tIGxyenN6LTAuMTIuMjAvYWNpbmNsdWRlLm00fmF1dG90b29scwkxOTk4LTEyLTI3IDE3OjA4OjU5LjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvYWNpbmNsdWRlLm00CTIwMDQtMDUtMDkgMjI6MjY6MTkuMDAwMDAwMDAwIC0wNDAwCitAQCAtMSwxMiArMSwxMSBAQAorIGRubCBBQ19SRVBMQUNFX0dOVV9HRVRPUFQKKy1BQ19ERUZVTihBQ19SRVBMQUNFX0dOVV9HRVRPUFQsCistW0FDX0NIRUNLX0ZVTkMoZ2V0b3B0X2xvbmcsICwgW0xJQk9CSlM9IiRMSUJPQkpTIGdldG9wdDEubyBnZXRvcHQubyJdKQorLUFDX1NVQlNUKExJQk9CSlMpZG5sCistXSkKKytBQ19ERUZVTihbQUNfUkVQTEFDRV9HTlVfR0VUT1BUXSwKKytbQUNfQ0hFQ0tfRlVOQyhnZXRvcHRfbG9uZywgLCBbQUNfTElCT0JKKFtnZXRvcHQxXSkKKytBQ19MSUJPQkooW2dldG9wdF0pZG5sXSldKQorIAorIGRubAorIGRubCB0YWtlbiBmcm9tIHRheWxvciB1dWNwCistQUNfREVGVU4oTFJaU1pfRVJSTk9fREVDTCxbCisrQUNfREVGVU4oW0xSWlNaX0VSUk5PX0RFQ0xdLFsKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGVycm5vIGRlY2xhcmF0aW9uKQorIEFDX0NBQ0hFX1ZBTChscnpzel9jdl9kZWNsX2Vycm5vLAorIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGVycm5vLmg+XSwgW2ludCBpID0gZXJybm87IGVycm5vID0gMTtdLAorQEAgLTIzLDcgKzIxLDcgQEAKKyBdKQorIAorIGRubCBMUlpTWl9UWVBFX1NQRUVEX1QKKy1BQ19ERUZVTihMUlpTWl9UWVBFX1NQRUVEX1QsWworK0FDX0RFRlVOKFtMUlpTWl9UWVBFX1NQRUVEX1RdLFsKKyBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCisgQUNfUkVRVUlSRShbTFJaU1pfSEVBREVSU19URVJNX0lPXSlkbmwKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHNwZWVkX3QpCitAQCAtNjEsNyArNTksNyBAQAorIGZpCisgXSkKKyAKKy1BQ19ERUZVTihscnpzel9IRUFERVJfU1lTX1NFTEVDVCwKKytBQ19ERUZVTihbbHJ6c3pfSEVBREVSX1NZU19TRUxFQ1RdLAorIFtBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzeXMvdGltZS5oIGFuZCBzeXMvc2VsZWN0LmggbWF5IGJvdGggYmUgaW5jbHVkZWRdLAorICAgbHJ6c3pfY3ZfaGVhZGVyX3N5c19zZWxlY3QsCisgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvZ2V0dGV4dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9nZXR0ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjRhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvZ2V0dGV4dC5wYXRjaApAQCAtMCwwICsxLDIxODg0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvQUJPVVQtTkxTCTE5OTgtMDQtMjYgMDk6MjI6MzAuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9BQk9VVC1OTFMJMjAwNC0wOS0xMiAxNDo0MDozNC4zMjM3NTI5NTIgLTA0MDAKK0BAIC0xLDE0ICsxLDE0IEBACisgTm90ZXMgb24gdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAKKy0gICBGcmVlIHNvZnR3YXJlIGlzIGdvaW5nIGludGVybmF0aW9uYWwhICBUaGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0CistaXMgYSB3YXkgdG8gZ2V0IG1haW50YWluZXJzIG9mIGZyZWUgc29mdHdhcmUsIHRyYW5zbGF0b3JzLCBhbmQgdXNlcnMgYWxsCisrRnJlZSBzb2Z0d2FyZSBpcyBnb2luZyBpbnRlcm5hdGlvbmFsISAgVGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCBpcworK2Egd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAorIHRvZ2V0aGVyLCBzbyB0aGF0IHdpbGwgZ3JhZHVhbGx5IGJlY29tZSBhYmxlIHRvIHNwZWFrIG1hbnkgbGFuZ3VhZ2VzLgorIEEgZmV3IHBhY2thZ2VzIGFscmVhZHkgcHJvdmlkZSB0cmFuc2xhdGlvbnMgZm9yIHRoZWlyIG1lc3NhZ2VzLgorIAorICAgIElmIHlvdSBmb3VuZCB0aGlzIGBBQk9VVC1OTFMnIGZpbGUgaW5zaWRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgbWF5CisgYXNzdW1lIHRoYXQgdGhlIGRpc3RyaWJ1dGVkIHBhY2thZ2UgZG9lcyB1c2UgR05VIGBnZXR0ZXh0JyBpbnRlcm5hbGx5LAorLWl0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvICpub3QqCisraXRzZWxmIGF2YWlsYWJsZSBhdCB5b3VyIG5lYXJlc3QgR05VIGFyY2hpdmUgc2l0ZS4gIEJ1dCB5b3UgZG8gX25vdF8KKyBuZWVkIHRvIGluc3RhbGwgR05VIGBnZXR0ZXh0JyBwcmlvciB0byBjb25maWd1cmluZywgaW5zdGFsbGluZyBvciB1c2luZworIHRoaXMgcGFja2FnZSB3aXRoIG1lc3NhZ2VzIHRyYW5zbGF0ZWQuCisgCitAQCAtMjIsMTAgKzIyLDEwIEBACisgYGdldHRleHQnIHdoaWNoIGlzIHVzZWQuICBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQorIGBpbnRsL1ZFUlNJT04nIGZpbGUsIGluIGludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzLgorIAorLU9uZSBhZHZpc2UgaW4gYWR2YW5jZQorLT09PT09PT09PT09PT09PT09PT09PQorK1F1aWNrIGNvbmZpZ3VyYXRpb24gYWR2aWNlCisrPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKKy0gICBJZiB5b3Ugd2FudCB0byBleHBsb2l0IHRoZSBmdWxsIHBvd2VyIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCB5b3UKKytJZiB5b3Ugd2FudCB0byBleHBsb2l0IHRoZSBmdWxsIHBvd2VyIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCB5b3UKKyBzaG91bGQgY29uZmlndXJlIGl0IHVzaW5nCisgCisgICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorQEAgLTM0LDQyICszNCw0MCBAQAorIHBhY2thZ2UsIGRlc3BpdGUgdGhlIGV4aXN0ZW5jZSBvZiBpbnRlcm5hdGlvbmFsaXppbmcgY2FwYWJpbGl0aWVzIGluIHRoZQorIG9wZXJhdGluZyBzeXN0ZW0gd2hlcmUgdGhpcyBwYWNrYWdlIGlzIGJlaW5nIGluc3RhbGxlZC4gIFNvIGZhciwgb25seQorIHRoZSBgZ2V0dGV4dCcgaW1wbGVtZW50YXRpb24gaW4gdGhlIEdOVSBDIGxpYnJhcnkgdmVyc2lvbiAyIHByb3ZpZGVzIGFzCistbWFueSBmZWF0dXJlcyAoc3VjaCBhcyBsb2NhbGUgYWxpYXMgb3IgbWVzc2FnZSBpbmhlcml0YW5jZSkgYXMgdGhlCistaW1wbGVtZW50YXRpb24gaGVyZS4gIEl0IGlzIGFsc28gbm90IHBvc3NpYmxlIHRvIG9mZmVyIHRoaXMgYWRkaXRpb25hbAorLWZ1bmN0aW9uYWxpdHkgb24gdG9wIG9mIGEgYGNhdGdldHMnIGltcGxlbWVudGF0aW9uLiAgRnV0dXJlIHZlcnNpb25zIG9mCistR05VIGBnZXR0ZXh0JyB3aWxsIHZlcnkgbGlrZWx5IGNvbnZleSBldmVuIG1vcmUgZnVuY3Rpb25hbGl0eS4gIFNvIGl0CistbWlnaHQgYmUgYSBnb29kIGlkZWEgdG8gY2hhbmdlIHRvIEdOVSBgZ2V0dGV4dCcgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyttYW55IGZlYXR1cmVzIChzdWNoIGFzIGxvY2FsZSBhbGlhcywgbWVzc2FnZSBpbmhlcml0YW5jZSwgYXV0b21hdGljCisrY2hhcnNldCBjb252ZXJzaW9uIG9yIHBsdXJhbCBmb3JtIGhhbmRsaW5nKSBhcyB0aGUgaW1wbGVtZW50YXRpb24gaGVyZS4KKytJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvbiB0b3AKKytvZiBhIGBjYXRnZXRzJyBpbXBsZW1lbnRhdGlvbi4gIEZ1dHVyZSB2ZXJzaW9ucyBvZiBHTlUgYGdldHRleHQnIHdpbGwKKyt2ZXJ5IGxpa2VseSBjb252ZXkgZXZlbiBtb3JlIGZ1bmN0aW9uYWxpdHkuICBTbyBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYQorK3RvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisgCistICAgU28geW91IG5lZWQgbm90IHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCisrICAgU28geW91IG5lZWQgX25vdF8gcHJvdmlkZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIHVzaW5nIEdOVSBsaWJjIDIgb3IKKyB5b3UgaGF2ZSBpbnN0YWxsZWQgYSByZWNlbnQgY29weSBvZiB0aGUgR05VIGdldHRleHQgcGFja2FnZSB3aXRoIHRoZQorIGluY2x1ZGVkIGBsaWJpbnRsJy4KKyAKKyBJTlNUQUxMIE1hdHRlcnMKKyA9PT09PT09PT09PT09PT0KKyAKKy0gICBTb21lIHBhY2thZ2VzIGFyZSAibG9jYWxpemFibGUiIHdoZW4gcHJvcGVybHkgaW5zdGFsbGVkOyB0aGUKKy1wcm9ncmFtcyB0aGV5IGNvbnRhaW4gY2FuIGJlIG1hZGUgdG8gc3BlYWsgeW91ciBvd24gbmF0aXZlIGxhbmd1YWdlLgorLU1vc3Qgc3VjaCBwYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duCistd2F5cyB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisrU29tZSBwYWNrYWdlcyBhcmUgImxvY2FsaXphYmxlIiB3aGVuIHByb3Blcmx5IGluc3RhbGxlZDsgdGhlIHByb2dyYW1zCisrdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4gIE1vc3Qgc3VjaAorK3BhY2thZ2VzIHVzZSBHTlUgYGdldHRleHQnLiAgT3RoZXIgcGFja2FnZXMgaGF2ZSB0aGVpciBvd24gd2F5cyB0bworK2ludGVybmF0aW9uYWxpemF0aW9uLCBwcmVkYXRpbmcgR05VIGBnZXR0ZXh0Jy4KKyAKKyAgICBCeSBkZWZhdWx0LCB0aGlzIHBhY2thZ2Ugd2lsbCBiZSBpbnN0YWxsZWQgdG8gYWxsb3cgdHJhbnNsYXRpb24gb2YKKy1tZXNzYWdlcy4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hldGhlciB0aGUgc3lzdGVtIHByb3ZpZGVzCistdXNhYmxlIGBjYXRnZXRzJyAoaWYgdXNpbmcgdGhpcyBpcyBzZWxlY3RlZCBieSB0aGUgaW5zdGFsbGVyKSBvcgorLWBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgdGhlIEdOVSBgZ2V0dGV4dCcgb3duCisrbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5CisrcHJvdmlkZXMgdGhlIEdOVSBgZ2V0dGV4dCcgZnVuY3Rpb25zLiAgSWYgbm90LCB0aGUgR05VIGBnZXR0ZXh0JyBvd24KKyBsaWJyYXJ5IHdpbGwgYmUgdXNlZC4gIFRoaXMgbGlicmFyeSBpcyB3aG9sbHkgY29udGFpbmVkIHdpdGhpbiB0aGlzCisgcGFja2FnZSwgdXN1YWxseSBpbiB0aGUgYGludGwvJyBzdWJkaXJlY3RvcnksIHNvIHByaW9yIGluc3RhbGxhdGlvbiBvZgorLXRoZSBHTlUgYGdldHRleHQnIHBhY2thZ2UgaXMgKm5vdCogcmVxdWlyZWQuICBJbnN0YWxsZXJzIG1heSB1c2UKKyt0aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzIF9ub3RfIHJlcXVpcmVkLiAgSW5zdGFsbGVycyBtYXkgdXNlCisgc3BlY2lhbCBvcHRpb25zIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBmb3IgY2hhbmdpbmcgdGhlIGRlZmF1bHQKKyBiZWhhdmlvdXIuICBUaGUgY29tbWFuZHM6CisgCisgICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorLSAgICAgLi9jb25maWd1cmUgLS13aXRoLWNhdGdldHMKKyAgICAgIC4vY29uZmlndXJlIC0tZGlzYWJsZS1ubHMKKyAKKy13aWxsIHJlc3BlY3RpdmVseSBieXBhc3MgYW55IHByZS1leGlzdGluZyBgY2F0Z2V0cycgb3IgYGdldHRleHQnIHRvIHVzZQorLXRoZSBpbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgZW5hYmxlCistdGhlIHVzZSBvZiB0aGUgYGNhdGdldHMnIGZ1bmN0aW9ucyAoaWYgZm91bmQgb24gdGhlIGxvY2FsZSBzeXN0ZW0pLCBvcgorLWVsc2UsICp0b3RhbGx5KiBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorK3dpbGwgcmVzcGVjdGl2ZWx5IGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCisraW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzIHBhY2thZ2UsIG9yIGVsc2UsCisrX3RvdGFsbHlfIGRpc2FibGUgdHJhbnNsYXRpb24gb2YgbWVzc2FnZXMuCisgCisgICAgV2hlbiB5b3UgYWxyZWFkeSBoYXZlIEdOVSBgZ2V0dGV4dCcgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFuZCBydW4KKyBjb25maWd1cmUgd2l0aG91dCBhbiBvcHRpb24gZm9yIHlvdXIgbmV3IHBhY2thZ2UsIGBjb25maWd1cmUnIHdpbGwKK0BAIC04MywxOCArODEsMTAgQEAKKyAKKyB0byBwcmV2ZW50IGF1dG8tZGV0ZWN0aW9uLgorIAorLSAgIEJ5IGRlZmF1bHQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aWxsIG5vdCB0ZXN0IGZvciB0aGUgYGNhdGdldHMnCistZnVuY3Rpb24gYW5kIHRoZXJlZm9yZSB0aGV5IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29ucyBhcmUgYWxyZWFkeQorLWdpdmVuIGFib3ZlOiB0aGUgZW11bGF0aW9uIG9uIHRvcCBvZiBgY2F0Z2V0cycgY2Fubm90IHByb3ZpZGUgYWxsIHRoZQorLWV4dGVuc2lvbnMgcHJvdmlkZWQgYnkgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4gIElmIHlvdSBuZXZlcnRoZWxlc3MKKy13YW50IHRvIHVzZSB0aGUgYGNhdGdldHMnIGZ1bmN0aW9ucyB1c2UKKy0KKy0gICAgIC4vY29uZmlndXJlIC0td2l0aC1jYXRnZXRzCistCistdG8gZW5hYmxlIHRoZSB0ZXN0IGZvciBgY2F0Z2V0cycgKHRoaXMgY2F1c2VzIG5vIGhhcm0gaWYgYGNhdGdldHMnIGlzCistbm90IGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbSkuICBJZiB5b3UgcmVhbGx5IHNlbGVjdCB0aGlzIG9wdGlvbiB3ZQorLXdvdWxkIGxpa2UgdG8gaGVhciBhYm91dCB0aGUgcmVhc29ucyBiZWNhdXNlIHdlIGNhbm5vdCB0aGluayBvZiBhbnkKKy1nb29kIG9uZSBvdXJzZWxmLgorKyAgIFRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbgorK2FuZCB0aGVyZWZvcmUgaXQgd2lsbCBub3QgYmUgdXNlZC4gIFRoZSByZWFzb24gaXMgdGhhdCBldmVuIGFuCisrZW11bGF0aW9uIG9mIGBnZXR0ZXh0JyBvbiB0b3Agb2YgYGNhdGdldHMnIGNvdWxkIG5vdCBwcm92aWRlIGFsbCB0aGUKKytleHRlbnNpb25zIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuCisgCisgICAgSW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMgaGF2ZSB1c3VhbGx5IG1hbnkgYHBvL0xMLnBvJyBmaWxlcywgd2hlcmUKKyBMTCBnaXZlcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgY29kZSBpZGVudGlmeWluZyB0aGUgbGFuZ3VhZ2UuICBVbmxlc3MKK0BAIC0xMDgsNTcgKzk4LDczIEBACisgVXNpbmcgVGhpcyBQYWNrYWdlCisgPT09PT09PT09PT09PT09PT09CisgCistICAgQXMgYSB1c2VyLCBpZiB5b3VyIGxhbmd1YWdlIGhhcyBiZWVuIGluc3RhbGxlZCBmb3IgdGhpcyBwYWNrYWdlLCB5b3UKKytBcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQorIG9ubHkgaGF2ZSB0byBzZXQgdGhlIGBMQU5HJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgYXBwcm9wcmlhdGUKKy1JU08gNjM5IGBMTCcgdHdvLWxldHRlciBjb2RlIHByaW9yIHRvIHVzaW5nIHRoZSBwcm9ncmFtcyBpbiB0aGUKKy1wYWNrYWdlLiAgRm9yIGV4YW1wbGUsIGxldCdzIHN1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuLiAgQXQgdGhlCistc2hlbGwgcHJvbXB0LCBtZXJlbHkgZXhlY3V0ZSBgc2V0ZW52IExBTkcgZGUnIChpbiBgY3NoJyksCistYGV4cG9ydCBMQU5HOyBMQU5HPWRlJyAoaW4gYHNoJykgb3IgYGV4cG9ydCBMQU5HPWRlJyAoaW4gYGJhc2gnKS4gIFRoaXMKKy1jYW4gYmUgZG9uZSBmcm9tIHlvdXIgYC5sb2dpbicgb3IgYC5wcm9maWxlJyBmaWxlLCBvbmNlIGFuZCBmb3IgYWxsLgorK2BMTF9DQycgY29tYmluYXRpb24uICBIZXJlIGBMTCcgaXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUsCisrYW5kIGBDQycgaXMgYW4gSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUuICBGb3IgZXhhbXBsZSwgbGV0J3MKKytzdXBwb3NlIHRoYXQgeW91IHNwZWFrIEdlcm1hbiBhbmQgbGl2ZSBpbiBHZXJtYW55LiAgQXQgdGhlIHNoZWxsCisrcHJvbXB0LCBtZXJlbHkgZXhlY3V0ZSBgc2V0ZW52IExBTkcgZGVfREUnIChpbiBgY3NoJyksCisrYGV4cG9ydCBMQU5HOyBMQU5HPWRlX0RFJyAoaW4gYHNoJykgb3IgYGV4cG9ydCBMQU5HPWRlX0RFJyAoaW4gYGJhc2gnKS4KKytUaGlzIGNhbiBiZSBkb25lIGZyb20geW91ciBgLmxvZ2luJyBvciBgLnByb2ZpbGUnIGZpbGUsIG9uY2UgYW5kIGZvcgorK2FsbC4KKyAKKy0gICBBbiBvcGVyYXRpbmcgc3lzdGVtIG1pZ2h0IGFscmVhZHkgb2ZmZXIgbWVzc2FnZSBsb2NhbGl6YXRpb24gZm9yCistbWFueSBvZiBpdHMgcHJvZ3JhbXMsIHdoaWxlIG90aGVyIHByb2dyYW1zIGhhdmUgYmVlbiBpbnN0YWxsZWQgbG9jYWxseQorLXdpdGggdGhlIGZ1bGwgY2FwYWJpbGl0aWVzIG9mIEdOVSBgZ2V0dGV4dCcuICBKdXN0IHVzaW5nIGBnZXR0ZXh0JworLWV4dGVuZGVkIHN5bnRheCBmb3IgYExBTkcnIHdvdWxkIGJyZWFrIHByb3BlciBsb2NhbGl6YXRpb24gb2YgYWxyZWFkeQorLWF2YWlsYWJsZSBvcGVyYXRpbmcgc3lzdGVtIHByb2dyYW1zLiAgSW4gdGhpcyBjYXNlLCB1c2VycyBzaG91bGQgc2V0CistYm90aCBgTEFOR1VBR0UnIGFuZCBgTEFORycgdmFyaWFibGVzIGluIHRoZWlyIGVudmlyb25tZW50LCBhcyBwcm9ncmFtcworLXVzaW5nIEdOVSBgZ2V0dGV4dCcgZ2l2ZSBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScuICBGb3IgZXhhbXBsZSwgc29tZQorLVN3ZWRpc2ggdXNlcnMgd291bGQgcmF0aGVyIHJlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yCistd2hlbiBTd2VkaXNoIGlzIG5vdCBhdmFpbGFibGUuICBUaGlzIGlzIGVhc2lseSBhY2NvbXBsaXNoZWQgYnkgc2V0dGluZworLWBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3YnLgorKyAgIFlvdSBtaWdodCB0aGluayB0aGF0IHRoZSBjb3VudHJ5IGNvZGUgc3BlY2lmaWNhdGlvbiBpcyByZWR1bmRhbnQuCisrQnV0IGluIGZhY3QsIHNvbWUgbGFuZ3VhZ2VzIGhhdmUgZGlhbGVjdHMgaW4gZGlmZmVyZW50IGNvdW50cmllcy4gIEZvcgorK2V4YW1wbGUsIGBkZV9BVCcgaXMgdXNlZCBmb3IgQXVzdHJpYSwgYW5kIGBwdF9CUicgZm9yIEJyYXppbC4gIFRoZQorK2NvdW50cnkgY29kZSBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpYWxlY3RzLgorKworKyAgIFRoZSBsb2NhbGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgYExMX0NDJywgd2l0aCBgTEwnIGRlbm90aW5nIHRoZQorK2xhbmd1YWdlIGFuZCBgQ0MnIGRlbm90aW5nIHRoZSBjb3VudHJ5LCBpcyB0aGUgb25lIHVzZSBvbiBzeXN0ZW1zIGJhc2VkCisrb24gR05VIGxpYmMuICBPbiBvdGhlciBzeXN0ZW1zLCBzb21lIHZhcmlhdGlvbnMgb2YgdGhpcyBzY2hlbWUgYXJlCisrdXNlZCwgc3VjaCBhcyBgTEwnIG9yIGBMTF9DQy5FTkNPRElORycuICBZb3UgY2FuIGdldCB0aGUgbGlzdCBvZgorK2xvY2FsZXMgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtIGZvciB5b3VyIGNvdW50cnkgYnkgcnVubmluZyB0aGUgY29tbWFuZAorK2Bsb2NhbGUgLWEgfCBncmVwICdeTEwnJy4KKysKKysgICBOb3QgYWxsIHByb2dyYW1zIGhhdmUgdHJhbnNsYXRpb25zIGZvciBhbGwgbGFuZ3VhZ2VzLiAgQnkgZGVmYXVsdCwgYW4KKytFbmdsaXNoIG1lc3NhZ2UgaXMgc2hvd24gaW4gcGxhY2Ugb2YgYSBub25leGlzdGVudCB0cmFuc2xhdGlvbi4gIElmIHlvdQorK3VuZGVyc3RhbmQgb3RoZXIgbGFuZ3VhZ2VzLCB5b3UgY2FuIHNldCB1cCBhIHByaW9yaXR5IGxpc3Qgb2YgbGFuZ3VhZ2VzLgorK1RoaXMgaXMgZG9uZSB0aHJvdWdoIGEgZGlmZmVyZW50IGVudmlyb25tZW50IHZhcmlhYmxlLCBjYWxsZWQKKytgTEFOR1VBR0UnLiAgR05VIGBnZXR0ZXh0JyBnaXZlcyBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScgb3ZlciBgTEFORycKKytmb3IgdGhlIHB1cnBvc2Ugb2YgbWVzc2FnZSBoYW5kbGluZywgYnV0IHlvdSBzdGlsbCBuZWVkIHRvIGhhdmUgYExBTkcnCisrc2V0IHRvIHRoZSBwcmltYXJ5IGxhbmd1YWdlOyB0aGlzIGlzIHJlcXVpcmVkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZQorK3N5c3RlbSBsaWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgc29tZSBTd2VkaXNoIHVzZXJzIHdobyB3b3VsZCByYXRoZXIKKytyZWFkIHRyYW5zbGF0aW9ucyBpbiBHZXJtYW4gdGhhbiBFbmdsaXNoIGZvciB3aGVuIFN3ZWRpc2ggaXMgbm90CisrYXZhaWxhYmxlLCBzZXQgYExBTkdVQUdFJyB0byBgc3Y6ZGUnIHdoaWxlIGxlYXZpbmcgYExBTkcnIHRvIGBzdl9TRScuCisrCisrICAgU3BlY2lhbCBhZHZpY2UgZm9yIE5vcndlZ2lhbiB1c2VyczogVGhlIGxhbmd1YWdlIGNvZGUgZm9yIE5vcndlZ2lhbgorK2Jva21hKmwgY2hhbmdlZCBmcm9tIGBubycgdG8gYG5iJyByZWNlbnRseSAoaW4gMjAwMykuICBEdXJpbmcgdGhlCisrdHJhbnNpdGlvbiBwZXJpb2QsIHdoaWxlIHNvbWUgbWVzc2FnZSBjYXRhbG9ncyBmb3IgdGhpcyBsYW5ndWFnZSBhcmUKKytpbnN0YWxsZWQgdW5kZXIgYG5iJyBhbmQgc29tZSBvbGRlciBvbmVzIHVuZGVyIGBubycsIGl0J3MgcmVjb21tZW5kZWQKKytmb3IgTm9yd2VnaWFuIHVzZXJzIHRvIHNldCBgTEFOR1VBR0UnIHRvIGBuYjpubycgc28gdGhhdCBib3RoIG5ld2VyIGFuZAorK29sZGVyIHRyYW5zbGF0aW9ucyBhcmUgdXNlZC4KKysKKysgICBJbiB0aGUgYExBTkdVQUdFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYnV0IG5vdCBpbiB0aGUgYExBTkcnCisrZW52aXJvbm1lbnQgdmFyaWFibGUsIGBMTF9DQycgY29tYmluYXRpb25zIGNhbiBiZSBhYmJyZXZpYXRlZCBhcyBgTEwnCisrdG8gZGVub3RlIHRoZSBsYW5ndWFnZSdzIG1haW4gZGlhbGVjdC4gIEZvciBleGFtcGxlLCBgZGUnIGlzIGVxdWl2YWxlbnQKKyt0byBgZGVfREUnIChHZXJtYW4gYXMgc3Bva2VuIGluIEdlcm1hbnkpLCBhbmQgYHB0JyB0byBgcHRfUFQnCisrKFBvcnR1Z3Vlc2UgYXMgc3Bva2VuIGluIFBvcnR1Z2FsKSBpbiB0aGlzIGNvbnRleHQuCisgCisgVHJhbnNsYXRpbmcgVGVhbXMKKyA9PT09PT09PT09PT09PT09PQorIAorLSAgIEZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCisrRm9yIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgdG8gYmUgYSBzdWNjZXNzLCB3ZSBuZWVkIGludGVyZXN0ZWQKKyBwZW9wbGUgd2hvIGxpa2UgdGhlaXIgb3duIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCB3ZWxsLCBhbmQgd2hvIGFyZSBhbHNvCisgYWJsZSB0byBzeW5lcmdpemUgd2l0aCBvdGhlciB0cmFuc2xhdG9ycyBzcGVha2luZyB0aGUgc2FtZSBsYW5ndWFnZS4KKy1FYWNoIHRyYW5zbGF0aW9uIHRlYW0gaGFzIGl0cyBvd24gbWFpbGluZyBsaXN0LCBjb3VydGVzeSBvZiBMaW51eAorLUludGVybmF0aW9uYWwuICBZb3UgbWF5IHJlYWNoIHlvdXIgdHJhbnNsYXRpb24gdGVhbSBhdCB0aGUgYWRkcmVzcworLWBMTEBsaS5vcmcnLCByZXBsYWNpbmcgTEwgYnkgdGhlIHR3by1sZXR0ZXIgSVNPIDYzOSBjb2RlIGZvciB5b3VyCistbGFuZ3VhZ2UuICBMYW5ndWFnZSBjb2RlcyBhcmUgKm5vdCogdGhlIHNhbWUgYXMgdGhlIGNvdW50cnkgY29kZXMgZ2l2ZW4KKy1pbiBJU08gMzE2Ni4gIFRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb24gdGVhbXMgZXhpc3QsIGFzIG9mIEF1Z3VzdCAxOTk3OgorLQorLSAgICAgQ2hpbmVzZSBgemgnLCBDemVjaCBgY3MnLCBEYW5pc2ggYGRhJywgRHV0Y2ggYG5sJywgRW5nbGlzaCBgZW4nLAorLSAgICAgRXNwZXJhbnRvIGBlbycsIEZpbm5pc2ggYGZpJywgRnJlbmNoIGBmcicsIEdlcm1hbiBgZGUnLCBIdW5nYXJpYW4KKy0gICAgIGBodScsIElyaXNoIGBnYScsIEl0YWxpYW4gYGl0JywgSW5kb25lc2lhbiBgaWQnLCBKYXBhbmVzZSBgamEnLAorLSAgICAgS29yZWFuIGBrbycsIExhdGluIGBsYScsIE5vcndlZ2lhbiBgbm8nLCBQZXJzaWFuIGBmYScsIFBvbGlzaAorLSAgICAgYHBsJywgUG9ydHVndWVzZSBgcHQnLCBSdXNzaWFuIGBydScsIFNsb3ZlbmlhbiBgc2wnLCBTcGFuaXNoIGBlcycsCistICAgICBTd2VkaXNoIGBzdicsIGFuZCBUdXJraXNoIGB0cicuCistCistRm9yIGV4YW1wbGUsIHlvdSBtYXkgcmVhY2ggdGhlIENoaW5lc2UgdHJhbnNsYXRpb24gdGVhbSBieSB3cml0aW5nIHRvCistYHpoQGxpLm9yZycuCisrRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKKyt0ZWFtcyBjYW4gYmUgZm91bmQgYXQgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCdzIGhvbWVwYWdlLAorK2BodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9IVE1MLycsIGluIHRoZSAiTmF0aW9uYWwgdGVhbXMiCisrYXJlYS4KKyAKKy0gICBJZiB5b3UnZCBsaWtlIHRvIHZvbHVudGVlciB0byAqd29yayogYXQgdHJhbnNsYXRpbmcgbWVzc2FnZXMsIHlvdQorKyAgIElmIHlvdSdkIGxpa2UgdG8gdm9sdW50ZWVyIHRvIF93b3JrXyBhdCB0cmFuc2xhdGluZyBtZXNzYWdlcywgeW91Cisgc2hvdWxkIGJlY29tZSBhIG1lbWJlciBvZiB0aGUgdHJhbnNsYXRpbmcgdGVhbSBmb3IgeW91ciBvd24gbGFuZ3VhZ2UuCistVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgKm5vdCogdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKKytUaGUgc3Vic2NyaWJpbmcgYWRkcmVzcyBpcyBfbm90XyB0aGUgc2FtZSBhcyB0aGUgbGlzdCBpdHNlbGYsIGl0IGhhcworIGAtcmVxdWVzdCcgYXBwZW5kZWQuICBGb3IgZXhhbXBsZSwgc3BlYWtlcnMgb2YgU3dlZGlzaCBjYW4gc2VuZCBhCisgbWVzc2FnZSB0byBgc3YtcmVxdWVzdEBsaS5vcmcnLCBoYXZpbmcgdGhpcyBtZXNzYWdlIGJvZHk6CisgCisgICAgICBzdWJzY3JpYmUKKyAKKyAgICBLZWVwIGluIG1pbmQgdGhhdCB0ZWFtIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIHBhcnRpY2lwYXRlCistKmFjdGl2ZWx5KiBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCisrX2FjdGl2ZWx5XyBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCisgcmF0aGVyIHRoYW4gbWVyZWx5IGx1cmtpbmcgYXJvdW5kLiAgSWYgeW91ciB0ZWFtIGRvZXMgbm90IGV4aXN0IHlldCBhbmQKKyB5b3Ugd2FudCB0byBzdGFydCBvbmUsIG9yIGlmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHdoYXQgdG8gZG8gb3IgaG93IHRvCisgZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gcmVhY2ggdGhlCitAQCAtMTcxLDQzICsxNzcsNTU5IEBACisgQXZhaWxhYmxlIFBhY2thZ2VzCisgPT09PT09PT09PT09PT09PT09CisgCistICAgTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworLW1hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgQXVndXN0CistMTk5Ny4gIFRoZSBtYXRyaXggc2hvd3MsIGluIHJlZ2FyZCBvZiBlYWNoIHBhY2thZ2UsIGZvciB3aGljaCBsYW5ndWFnZXMKKy1QTyBmaWxlcyBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIHRyYW5zbGF0aW9uIGNvb3JkaW5hdGlvbi4KKytMYW5ndWFnZXMgYXJlIG5vdCBlcXVhbGx5IHN1cHBvcnRlZCBpbiBhbGwgcGFja2FnZXMuICBUaGUgZm9sbG93aW5nCisrbWF0cml4IHNob3dzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCBhcyBvZiBKYW51YXJ5CisrMjAwNC4gIFRoZSBtYXRyaXggc2hvd3MsIGluIHJlZ2FyZCBvZiBlYWNoIHBhY2thZ2UsIGZvciB3aGljaCBsYW5ndWFnZXMKKytQTyBmaWxlcyBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIHRyYW5zbGF0aW9uIGNvb3JkaW5hdGlvbiwgd2l0aCBhCisrdHJhbnNsYXRpb24gcGVyY2VudGFnZSBvZiBhdCBsZWFzdCA1MCUuCisgCistICAgICBSZWFkeSBQTyBmaWxlcyAgICBjcyBkYSBkZSBlbiBlcyBmaSBmciBpdCBqYSBrbyBubCBubyBwbCBwdCBzbCBzdgorLSAgICAgICAgICAgICAgICAgICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorLSAgICAgYmFzaCAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfCAgMworLSAgICAgYmlzb24gICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfCAgMworLSAgICAgY2xpc3AgICAgICAgICAgIHwgICAgICAgW10gW10gW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorLSAgICAgY3BpbyAgICAgICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgICAgW10gICAgW10gICAgICAgICAgfCAgNQorLSAgICAgZGlmZnV0aWxzICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gfCAgNQorLSAgICAgZW5zY3JpcHQgICAgICAgIHwgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gICAgICAgICAgW10gICAgfCAgNgorLSAgICAgZmlsZXV0aWxzICAgICAgIHwgW10gICAgW10gICAgW10gICAgW10gICAgICAgW10gW10gICAgW10gW10gW10gW10gfCAxMAorLSAgICAgZmluZHV0aWxzICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gW10gICAgW10gW10gICAgW10gICAgICAgW10gfCAgOAorLSAgICAgZmxleCAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfCAgNAorLSAgICAgZ2NhbCAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gICAgW10gICAgICAgW10gfCAgNQorLSAgICAgZ2V0dGV4dCAgICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gW10gW10gW10gW10gW10gW10gfCAxMQorLSAgICAgZ3JlcCAgICAgICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gW10gW10gW10gICAgW10gW10gfCAgOQorLSAgICAgaGVsbG8gICAgICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gW10gW10gW10gW10gW10gW10gfCAxMAorLSAgICAgaWQtdXRpbHMgICAgICAgIHwgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfCAgMworLSAgICAgaW5kZW50ICAgICAgICAgIHwgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgfCAgNAorLSAgICAgbGliYyAgICAgICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gW10gICAgW10gICAgICAgW10gfCAgNworLSAgICAgbTQgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgICAgICAgW10gfCAgNQorLSAgICAgbWFrZSAgICAgICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gW10gICAgW10gICAgICAgICAgfCAgNgorLSAgICAgbXVzaWMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfCAgMgorLSAgICAgcHR4ICAgICAgICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgICAgW10gW10gW10gW10gICAgW10gfCAgOAorLSAgICAgcmVjb2RlICAgICAgICAgIHwgICAgW10gW10gICAgW10gICAgW10gICAgICAgICAgW10gICAgW10gW10gW10gW10gfCAgOQorLSAgICAgc2gtdXRpbHMgICAgICAgIHwgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gW10gW10gW10gICAgW10gfCAgNworLSAgICAgc2hhcnV0aWxzICAgICAgIHwgICAgICAgW10gICAgW10gICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgW10gfCAgNQorLSAgICAgdGFyICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgW10gW10gICAgW10gW10gW10gW10gW10gW10gW10gfCAxMAorLSAgICAgdGV4aW5mbyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorLSAgICAgdGV4dHV0aWxzICAgICAgIHwgW10gICAgW10gICAgW10gICAgW10gICAgICAgW10gW10gW10gW10gICAgICAgW10gfCAgOQorLSAgICAgd2RpZmYgICAgICAgICAgIHwgW10gICAgW10gICAgW10gICAgW10gICAgICAgICAgW10gW10gW10gICAgICAgW10gfCAgOAorLSAgICAgICAgICAgICAgICAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJworLSAgICAgICAxNiBsYW5ndWFnZXMgICAgY3MgZGEgZGUgZW4gZXMgZmkgZnIgaXQgamEga28gbmwgbm8gcGwgcHQgc2wgc3YKKy0gICAgICAgMjcgcGFja2FnZXMgICAgICAzICAyIDI0ICAxIDE3ICAxIDI2ICAyICAxIDExIDIwICA5IDE5ICA3ICA3IDE3ICAxNjcKKysgICAgIFJlYWR5IFBPIGZpbGVzICAgICAgIGFmIGFtIGFyIGF6IGJlIGJnIGJzIGNhIGNzIGRhIGRlIGVsIGVuIGVuX0dCIGVvIGVzCisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSB8CisrICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICAgICB8CisrICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICBbXSB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAoKSBbXSBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBmaWxldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnYmlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgW10gICAgICBbXSB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAoKSAgICAgICAgW10gICAgICBbXSB8CisrICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBnbnVwZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICBbXSBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgICAgICAoKSB8CisrICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBndGljayAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisrICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8zICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisrICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAoKSB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAoKSBbXSBbXSAgICAgICAgICAgICAgICAoKSB8CisrICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAoKSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAoKSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBwdHggICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBzaC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisrICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICB8CisrICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgKCkgICAgICAgICB8CisrICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgW10gICAgICBbXSB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisrICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CisrICAgICB4ZnJlZTg2X3hrYl94bWwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAgICAgICAgICAgICAgICAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9HQiBlbyBlcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIDAgIDAgIDEgIDkgIDQgIDEgNDAgNDEgNjAgNzggMTcgIDEgICA1ICAgMTMgNjgKKysgICAgIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXQgZXUgZmEgZmkgZnIgZ2EgZ2wgaGUgaHIgaHUgaWQgaXMgaXQgamEga28gbGcKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgIHwKKysgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJhdGNoZWxvciAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIGJpc29uICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIHwKKysgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGRhcmtzdGF0ICAgICAgICAgICB8ICAgICAgICAgICAgICgpIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgIHwKKysgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIGZpbGV1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgIHwKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgIHwKKysgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIGdiaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdldHRleHQgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIHwKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgIHwKKysgICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIHwKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKysgICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKysgICAgIGdudXBnICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgIHwKKysgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jbG9jayAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1lZGl0ICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGdwaG90bzIgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICgpICgpICAgICAgIHwKKysgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdICAgIFtdIFtdICAgICAgIHwKKysgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKysgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgIHwKKysgICAgIGlkLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgIHwKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdIFtdICAgICAgIFtdIFtdIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzEgICAgICAgICB8ICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgIHwKKysgICAgIGlzb182MzkgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgIHwKKysgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgIHwKKysgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGxpYmljb252ICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgIHwKKysgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIHwKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIFtdIFtdICAgIHwKKysgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICgpICAgICAgIHwKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIG15c2VjcmV0ZGlhcnkgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwKKysgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgIHwKKysgICAgIHNoLXV0aWxzICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgIHwKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIHNpbGt5ICAgICAgICAgICAgICB8ICAgICAgICAgICgpIFtdICAgICAgICAgICAgICgpICAgICAgICgpICAgICAgICAgIHwKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNrZXRjaCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgIHwKKysgICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdICAgIFtdICAgIFtdIFtdIFtdICAgIFtdIFtdICAgICAgIHwKKysgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgIHwKKysgICAgIHRpbiAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHRwLXJvYm90ICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgIFtdIFtdIFtdIFtdIFtdIFtdICAgIHwKKysgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHV0aWwtbGludXggICAgICAgICB8IFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICgpIFtdICAgICAgIHwKKysgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdICAgIFtdICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIHwKKysgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGV1IGZhIGZpIGZyIGdhIGdsIGhlIGhyIGh1IGlkIGlzIGl0IGphIGtvIGxnCisrICAgICAgICAgICAgICAgICAgICAgICAgICAyMiAgMiAgMSAyNiAxMDYgMjggMjQgIDggMTAgNDEgMzMgIDEgMjYgMzMgMTIgIDAKKysgICAgIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmwgbm4gbm8gbnNvIHBsIHB0IHB0X0JSIHJvIHJ1CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgKCkgICAgICgpICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAoKSAoKSB8CisrICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAoKSAgICAgICAgICBbXSAgICB8CisrICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGJhdGNoZWxvciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgKCkgICAgICBbXSB8CisrICAgICBmaWxldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSAgICB8CisrICAgICBnYmlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgfAorKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gfAorKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgKCkgICAgICBbXSB8CisrICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorKyAgICAgZ251cGcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jbG9jayAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1lZGl0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gfAorKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICBbXSAgIFtdIFtdIHwKKysgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gfAorKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgW10gICAgICAgW10gICAgW10gW10gW10gW10gICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGlkLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzEgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIFtdICAgICBbXSBbXSAgW10gICAgICBbXSB8CisrICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gKCkgfAorKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIFtdICAgICBbXSAgICAgICAgIHwKKysgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICB8CisrICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICBbXSB8CisrICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICAgICBbXSB8CisrICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIG15c2VjcmV0ZGlhcnkgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgW10gW10gIFtdICAgICAgICAgfAorKyAgICAgcHR4ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgIFtdIFtdICBbXSAgIFtdIFtdIHwKKysgICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8CisrICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIHNlZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSAgICB8CisrICAgICBzaC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAorKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgIHwKKysgICAgIHNrZXRjaCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICB8CisrICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHRhciAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICBbXSAgICAgW10gICBbXSAgICB8CisrICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgIFtdIFtdICBbXSAgIFtdICAgIHwKKysgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgIFtdIHwKKysgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSB8CisrICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgeGZyZWU4Nl94a2JfeG1sICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmwgbm4gbm8gbnNvIHBsIHB0IHB0X0JSIHJvIHJ1CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgMiAgMCAgMyAxMiAgMCAxMCA2OSAgNiAgNyAgMSAgNDAgMjYgIDM2ICAgNzYgNjMKKysgICAgIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2sgc2wgc3Igc3YgdGEgdGggdHIgdWsgdmVuIHZpIHdhIHhoIHpoX0NOIHpoX1RXIHp1CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKysgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGJhdGNoZWxvciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgIDgKKysgICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisrICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTYKKysgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE0CisrICAgICBkYXJrc3RhdCAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgfCAxMgorKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMjMKKysgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTUKKysgICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBmaWxldXRpbHMgICAgICAgICAgfCAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAxNworKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMjkKKysgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzCisrICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisrICAgICBnYmlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNgorKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgW10gICAgW10gICAgICB8IDIyCisrICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNAorKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKysgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdudWNhc2ggICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8ICA5CisrICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAgOAorKyAgICAgZ251cGcgICAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTcKKysgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisrICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwgMTMKKysgICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBncGUtY29uZiAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTEKKysgICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEyCisrICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwgMTMKKysgICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtc2tldGNoYm9vayAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKysgICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBncGUtdGltZXNoZWV0ICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwgMTMKKysgICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEyCisrICAgICBncGhvdG8yICAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxMQorKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwc2RyaXZlICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBncmFtYWRvaXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgW10gW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjYKKysgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzQKKysgICAgIGlkLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisrICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMQorKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMjcKKysgICAgIGlzb18zMTY2XzEgICAgICAgICB8IFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisrICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdIFtdICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDI0CisrICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgIFtdICAgICAgICBbXSAgICBbXSAgICAgIHwgIDkKKysgICAgIGp0YWcgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAoKSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMQorKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKysgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMjAKKysgICAgIGxpYmdwZXdpZGdldCAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDEzCisrICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgfCAyNworKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgIHwgIDAKKysgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisrICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNQorKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE2CisrICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKysgICAgIG15c2VjcmV0ZGlhcnkgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNworKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKysgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNQorKyAgICAgcHR4ICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjIKKysgICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKysgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAgMgorKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKysgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI0CisrICAgICBzaC11dGlscyAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE3CisrICAgICBzaWxreSAgICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIHNrZXRjaCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIHRhciAgICAgICAgICAgICAgICB8IFtdIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDI0CisrICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNAorKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTYKKysgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisrICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgIHwgMjkKKysgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKysgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisrICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTgKKysgICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgW10gICAgW10gICAgICB8IDI0CisrICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNQorKyAgICAgeGZyZWU4Nl94a2JfeG1sICAgIHwgW10gICAgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTEKKysgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgICA2MyB0ZWFtcyAgICAgICAgICAgc2sgc2wgc3Igc3YgdGEgdGggdHIgdWsgdmVuIHZpIHdhIHhoIHpoX0NOIHpoX1RXIHp1CisrICAgICAgMTMxIGRvbWFpbnMgICAgICAgICA0NyAxOSAyOCA4MyAgMCAgMCA1OSAxMyAgMSAgIDEgMTEgIDAgIDIyICAgIDIyICAgIDAgIDEzNzMKKyAKKyAgICBTb21lIGNvdW50ZXJzIGluIHRoZSBwcmVjZWRpbmcgbWF0cml4IGFyZSBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mCisgdmlzaWJsZSBibG9ja3MgbGV0IHVzIGV4cGVjdC4gIFRoaXMgaXMgYmVjYXVzZSBhIGZldyBleHRyYSBQTyBmaWxlcyBhcmUKK0BAIC0yMjAsNiArNzQyLDI3IEBACisgbGFnIGJldHdlZW4gdGhlIG1lcmUgZXhpc3RlbmNlIGEgUE8gZmlsZSBhbmQgaXRzIHdpZGUgYXZhaWxhYmlsaXR5IGluIGEKKyBkaXN0cmlidXRpb24uCisgCistICAgSWYgQXVndXN0IDE5OTcgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weSBvZgorLXRoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLgorKyAgIElmIEphbnVhcnkgMjAwNCBzZWVtcyB0byBiZSBvbGQsIHlvdSBtYXkgZmV0Y2ggYSBtb3JlIHJlY2VudCBjb3B5IG9mCisrdGhpcyBgQUJPVVQtTkxTJyBmaWxlIG9uIG1vc3QgR05VIGFyY2hpdmUgc2l0ZXMuICBUaGUgbW9zdCB1cC10by1kYXRlCisrbWF0cml4IHdpdGggZnVsbCBwZXJjZW50YWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0CisrYGh0dHA6Ly93d3cuaXJvLnVtb250cmVhbC5jYS9jb250cmliL3BvL0hUTUwvbWF0cml4Lmh0bWwnLgorKworK1VzaW5nIGBnZXR0ZXh0JyBpbiBuZXcgcGFja2FnZXMKKys9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCisraW50ZXJuYXRpb25hbGl6ZSBpdCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlIEdOVSBgZ2V0dGV4dCcgaW4geW91cgorK3BhY2thZ2UuICBPZiBjb3Vyc2UgeW91IGhhdmUgdG8gcmVzcGVjdCB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCisraW4gcGFydGljdWxhciB0aGF0IGV2ZW4gbm9uLWZyZWUgcHJvZ3JhbXMgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzaGFyZWQKKytsaWJyYXJ5LCB3aGVyZWFzIG9ubHkgZnJlZSBzb2Z0d2FyZSBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHN0YXRpYworK2xpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KKysKKysgICBPbmNlIHRoZSBzb3VyY2VzIGFyZSBjaGFuZ2VkIGFwcHJvcHJpYXRlbHkgYW5kIHRoZSBzZXR1cCBjYW4gaGFuZGxlCisrdGhlIHVzZSBvZiBgZ2V0dGV4dCcgdGhlIG9ubHkgdGhpbmcgbWlzc2luZyBhcmUgdGhlIHRyYW5zbGF0aW9ucy4gIFRoZQorK0ZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCBpcyBhbHNvIGF2YWlsYWJsZSBmb3IgcGFja2FnZXMgd2hpY2ggYXJlIG5vdAorK2RldmVsb3BlZCBpbnNpZGUgdGhlIEdOVSBwcm9qZWN0LiAgVGhlcmVmb3JlIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiBhYm92ZQorK2FwcGxpZXMgYWxzbyBmb3IgZXZlcnkgb3RoZXIgRnJlZSBTb2Z0d2FyZSBQcm9qZWN0LiAgQ29udGFjdAorK2B0cmFuc2xhdGlvbkBpcm8udW1vbnRyZWFsLmNhJyB0byBtYWtlIHRoZSBgLnBvdCcgZmlsZXMgYXZhaWxhYmxlIHRvCisrdGhlIHRyYW5zbGF0aW9uIHRlYW1zLgorIAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9DaGFuZ2VMb2cJMTk5OC0xMi0yOSAxNzo0OTo1Ni4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL0NoYW5nZUxvZwkyMDA0LTA5LTEyIDE0OjQwOjM1Ljg0NjUyMTQ1NiAtMDQwMAorQEAgLTEsMyArMSwxMSBAQAorKzIwMDQtMDktMTIgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKysKKysJKiBNYWtlZmlsZS5hbSAoQUNMT0NBTF9BTUZMQUdTKTogTmV3IHZhcmlhYmxlLgorKwkoRVhUUkFfRElTVCk6IEFkZCBjb25maWcucnBhdGguCisrCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBBZGQgbTQvTWFrZWZpbGUuCisrCShBQ19PVVRQVVQpOiBSZW1vdmUgY29tbWFuZCB0aGF0IGNyZWF0ZWQgcG8vTWFrZWZpbGUuCisrCShBQ19MSU5LX0ZJTEVTKTogUmVtb3ZlIGludm9jYXRpb24uCisrCisgMTk5OC0xMi0yOQlVd2UgT2hzZSAgPHV3ZUBvaHNlLmRlPgorIAorIAkqIHNyYy9scnouYzogcmVtb3ZlZCBzdHBjcHkgY2FsbC4KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvY29uZmlnLnJwYXRoCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9jb25maWcucnBhdGgJMjAwNC0wOS0xMiAxNDo0MDozNC4zMjk3NTIwNDAgLTA0MDAKK0BAIC0wLDAgKzEsNTQ4IEBACisrIyEgL2Jpbi9zaAorKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisrIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisrIworKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisrIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisrIworKyMgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisrIyAgIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorKyMgICBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorKyMgICB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrIworKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisrIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorKyMgb3IKKysjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDQywgR0NDLCBMREZMQUdTLCBMRCwgd2l0aF9nbnVfbGQKKysjIHNob3VsZCBiZSBzZXQgYnkgdGhlIGNhbGxlci4KKysjCisrIyBUaGUgc2V0IG9mIGRlZmluZWQgdmFyaWFibGVzIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBzY3JpcHQuCisrCisrIyBLbm93biBsaW1pdGF0aW9uczoKKysjIC0gT24gSVJJWCA2LjUgd2l0aCBDQz0iY2MiLCB0aGUgcnVuIHRpbWUgc2VhcmNoIHBhdGNoIG11c3Qgbm90IGJlIGxvbmdlcgorKyMgICB0aGFuIDI1NiBieXRlcywgb3RoZXJ3aXNlIHRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBkdW1wIGNvcmUuIFRoZSBvbmx5CisrIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKKysjICAgZGlyZWN0b3J5IGFuZC9vciB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKysKKysjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTSRWQywKKysjIHdoaWNoIG5lZWRzICcubGliJykuCisrbGliZXh0PWEKKytzaHJleHQ9LnNvCisrCisraG9zdD0iJDEiCisraG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCisraG9zdF92ZW5kb3I9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCisraG9zdF9vcz1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKysKKysjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQy4KKysKKyt3bD0KKytpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgd2w9Jy1XbCwnCisrZWxzZQorKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgIGFpeCopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorKyAgICAgIDs7CisrICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgbmV3c29zNikKKysgICAgICA7OworKyAgICBsaW51eCopCisrICAgICAgY2FzZSAkQ0MgaW4KKysgICAgICAgIGljY3xlY2MpCisrICAgICAgICAgIHdsPSctV2wsJworKyAgICAgICAgICA7OworKyAgICAgICAgY2NjKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIHNjbzMuMnY1KikKKysgICAgICA7OworKyAgICBzb2xhcmlzKikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzdW5vczQqKQorKyAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisrICAgICAgOzsKKysgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIHN5c3Y0Kk1QKikKKysgICAgICA7OworKyAgICB1dHM0KikKKysgICAgICA7OworKyAgZXNhYworK2ZpCisrCisrIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMuCisrCisraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKytoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorK2hhcmRjb2RlX2RpcmVjdD1ubworK2hhcmRjb2RlX21pbnVzX0w9bm8KKysKKytjYXNlICIkaG9zdF9vcyIgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICB3aXRoX2dudV9sZD1ubworKyAgICBmaQorKyAgICA7OworKyAgb3BlbmJzZCopCisrICAgIHdpdGhfZ251X2xkPW5vCisrICAgIDs7CisrZXNhYworKworK2xkX3NobGlicz15ZXMKKytpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQorKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKysgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgYW1pZ2FvcyopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKysgICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAorKyAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAorKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisrICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuIHVzZQorKyAgICAgICMgdGhlbS4KKysgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICA7OworKyAgICBiZW9zKikKKysgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIDoKKysgICAgICBlbHNlCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisrICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBuZXRic2QqKQorKyAgICAgIDs7CisrICAgIHNvbGFyaXMqIHwgc3lzdjUqKQorKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgIGVsc2UKKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIDoKKysgICAgICBlbHNlCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICBlc2FjCisrICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IHllczsgdGhlbgorKyAgICAjIFVubGlrZSBsaWJ0b29sLCB3ZSB1c2UgLXJwYXRoIGhlcmUsIG5vdCAtLXJwYXRoLCBzaW5jZSB0aGUgZG9jdW1lbnRlZAorKyAgICAjIG9wdGlvbiBvZiBHTlUgbGQgaXMgY2FsbGVkIC1ycGF0aCwgbm90IC0tcnBhdGguCisrICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgIGZpCisrZWxzZQorKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgIGFpeDMqKQorKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisrICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorKyAgICAgICAgIyBicm9rZW4gY29sbGVjdDIuCisrICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGFpeDQqIHwgYWl4NSopCisrICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKysgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworKyAgICAgIGVsc2UKKysgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKysgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorKyAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisrICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisrICAgICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisrICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworKyAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBkb25lCisrICAgICAgICBlc2FjCisrICAgICAgZmkKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKysgICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorKyAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisrICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorKyAgICAgICAgICB0aGVuCisrICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisrICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisrICAgICAgICAgIGZpCisrICAgICAgICBlc2FjCisrICAgICAgZmkKKysgICAgICAjIEJlZ2luIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisrICAgICAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC5jCisrICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0CisrICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorK30nYAorKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKysgICAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KKyt9J2AKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKysgICAgICAgIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIgorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdAorKyAgICAgICMgRW5kIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisrICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisrICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorKyAgICAgIGVsc2UKKysgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworKyAgICAgICAgZWxzZQorKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGFtaWdhb3MqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKysgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICA7OworKyAgICBic2RpNCopCisrICAgICAgOzsKKysgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisrICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKysgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisrICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKyAgICAgIGxpYmV4dD1saWIKKysgICAgICA7OworKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorKyAgICAgIGlmICRDQyAtdiAyPiYxIHwgZ3JlcCAnQXBwbGUnID4vZGV2L251bGwgOyB0aGVuCisrICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGRndXgqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICA7OworKyAgICBmcmVlYnNkMSopCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgZnJlZWJzZDIuMiopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICA7OworKyAgICBmcmVlYnNkMiopCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgZnJlZWJzZCopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICA7OworKyAgICBocHV4OSopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisrICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICA7OworKyAgICBocHV4MTAqIHwgaHB1eDExKikKKysgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKysgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgaHBwYSo2NCopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgaWE2NCopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisrICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisrICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAgICAgICA7OworKyAgICAgICAgICAqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgICAgICAgOzsKKysgICAgICAgIGVzYWMKKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIG5ldGJzZCopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICA7OworKyAgICBuZXdzb3M2KQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgOzsKKysgICAgb3BlbmJzZCopCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICBlbHNlCisrICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgKikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBvczIqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIDs7CisrICAgIG9zZjMqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICA7OworKyAgICBvc2Y0KiB8IG9zZjUqKQorKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgZWxzZQorKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKysgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworKyAgICAgIGZpCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgOzsKKysgICAgc2NvMy4ydjUqKQorKyAgICAgIDs7CisrICAgIHNvbGFyaXMqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICA7OworKyAgICBzdW5vczQqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICA7OworKyAgICBzeXN2NCkKKysgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorKyAgICAgICAgc25pKQorKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworKyAgICAgICAgICA7OworKyAgICAgICAgc2llbWVucykKKysgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisrICAgICAgICAgIDs7CisrICAgICAgICBtb3Rvcm9sYSkKKysgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgc3lzdjQuMyopCisrICAgICAgOzsKKysgICAgc3lzdjQqTVAqKQorKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKysgICAgICAgIGxkX3NobGlicz15ZXMKKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIHN5c3Y0LjJ1dzIqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9taW51c19MPW5vCisrICAgICAgOzsKKysgICAgc3lzdjVPcGVuVU5JWDgqIHwgc3lzdjVVbml4V2FyZTcqIHwgIHN5c3Y1dXdbNzhdKiB8IHVuaXh3YXJlNyopCisrICAgICAgOzsKKysgICAgc3lzdjUqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisrICAgICAgOzsKKysgICAgdXRzNCopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIDs7CisrICAgICopCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgIGVzYWMKKytmaQorKworKyMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisrIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSLgorK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCisrY2FzZSAiJGhvc3Rfb3MiIGluCisrICBhaXgzKikKKysgICAgOzsKKysgIGFpeDQqIHwgYWl4NSopCisrICAgIDs7CisrICBhbWlnYW9zKikKKysgICAgOzsKKysgIGJlb3MqKQorKyAgICA7OworKyAgYnNkaTQqKQorKyAgICA7OworKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorKyAgICBzaHJleHQ9LmRsbAorKyAgICA7OworKyAgZGFyd2luKiB8IHJoYXBzb2R5KikKKysgICAgc2hyZXh0PS5keWxpYgorKyAgICA7OworKyAgZGd1eCopCisrICAgIDs7CisrICBmcmVlYnNkMSopCisrICAgIDs7CisrICBmcmVlYnNkKikKKysgICAgOzsKKysgIGdudSopCisrICAgIDs7CisrICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKysgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorKyAgICAgIGlhNjQqKQorKyAgICAgICAgc2hyZXh0PS5zbworKyAgICAgICAgOzsKKysgICAgICBocHBhKjY0KikKKysgICAgICAgIHNocmV4dD0uc2wKKysgICAgICAgIDs7CisrICAgICAgKikKKysgICAgICAgIHNocmV4dD0uc2wKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisrICAgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisrICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisrICAgICAgICA7OworKyAgICAgICopCisrICAgICAgICBjYXNlICRMRCBpbgorKyAgICAgICAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisrICAgICAgICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiA7OworKyAgICAgICAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKysgICAgICAgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKysgICAgOzsKKysgIGxpbnV4KikKKysgICAgOzsKKysgIG5ldGJzZCopCisrICAgIDs7CisrICBuZXdzb3M2KQorKyAgICA7OworKyAgbnRvLXFueCkKKysgICAgOzsKKysgIG9wZW5ic2QqKQorKyAgICA7OworKyAgb3MyKikKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc2hyZXh0PS5kbGwKKysgICAgOzsKKysgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgOzsKKysgIHNjbzMuMnY1KikKKysgICAgOzsKKysgIHNvbGFyaXMqKQorKyAgICA7OworKyAgc3Vub3M0KikKKysgICAgOzsKKysgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgOzsKKysgIHN5c3Y0Kk1QKikKKysgICAgOzsKKysgIHV0czQqKQorKyAgICA7OworK2VzYWMKKysKKytzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworK2VzY2FwZWRfd2w9YGVjaG8gIlgkd2wiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKytzaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAorK2VzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrCisrc2VkIC1lICdzL15cKFthLXpBLVowLTlfXSpcKT0vYWNsX2N2X1wxPS8nIDw8RU9GCisrCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSIkZXNjYXBlZF93bCIKKysKKysjIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KKytsaWJleHQ9IiRsaWJleHQiCisrCisrIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorK3NobGliZXh0PSIkc2hsaWJleHQiCisrCisrIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisrIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgorK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisrCisrIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KKytoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysKKysjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorKyMgcmVzdWx0aW5nIGJpbmFyeS4KKytoYXJkY29kZV9kaXJlY3Q9IiRoYXJkY29kZV9kaXJlY3QiCisrCisrIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysjIHJlc3VsdGluZyBiaW5hcnkuCisraGFyZGNvZGVfbWludXNfTD0iJGhhcmRjb2RlX21pbnVzX0wiCisrCisrRU9GCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2NvbmZpZ3VyZS5pbgkyMDA0LTA5LTEyIDE0OjM5OjU1LjE2MTcwNjQ4OCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvY29uZmlndXJlLmluCTIwMDQtMDktMTIgMTQ6NDA6MzUuODE2NTI2MDE2IC0wNDAwCitAQCAtMjYwLDExICsyNjAsMTAgQEAKKyBBTV9HTlVfR0VUVEVYVAorIAorIEFDX0RFRklORV9VTlFVT1RFRChMT0NBTEVESVIsIiRwcmVmaXgvJERBVEFESVJOQU1FIikKKy1BQ19MSU5LX0ZJTEVTKCRubHNfY3ZfaGVhZGVyX2xpYmd0LCAkbmxzX2N2X2hlYWRlcl9pbnRsKQorIAorLUFDX09VVFBVVChbTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIFwKKytBQ19PVVRQVVQoW01ha2VmaWxlIGludGwvTWFrZWZpbGUgbGliL01ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSAgbTQvTWFrZWZpbGUgXAorIG1hbi9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiBzcmMvTWFrZWZpbGUgZGViaWFuL3J1bGVzIFNwZWNmaWxlIHN5c3R5cGUgXAorIHNyYy9scnpzemJ1Z10sCistW3NlZCAtZSAiL1BPVEZJTEVTID0vciBwby9QT1RGSUxFUyIgcG8vTWFrZWZpbGUuaW4gPiBwby9NYWtlZmlsZTsgCisrWworIGNobW9kICt4IGRlYmlhbi9ydWxlczsKKyB0ZXN0IC16ICIkQ09ORklHX0hFQURFUlMiIHx8IGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaF0pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvYmluZHRleHRkb20uYwkxOTk4LTA0LTI2IDA5OjIyOjM2LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9iaW5kdGV4dGRvbS5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzQzNzQ5OTEyIC0wNDAwCitAQCAtMSw1OSArMSw3NSBAQAorIC8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBiaW5kdGV4dGRvbWFpbigzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbHNlCistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbHNlCistdm9pZCBmcmVlICgpOworLSMgZW5kaWYKKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorICNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistIyBpZm5kZWYgbWVtY3B5CistIyAgZGVmaW5lIG1lbWNweShEc3QsIFNyYywgTnVtKSBiY29weSAoU3JjLCBEc3QsIE51bSkKKy0jIGVuZGlmCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisgCisgI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrLyogV2UgaGF2ZSB0byBoYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKysjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysvKiBQcm92aWRlIGR1bW15IGltcGxlbWVudGF0aW9uIGlmIHRoaXMgaXMgb3V0c2lkZSBnbGliYy4gICovCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmUoQ0xBU1MsIE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja193cmxvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3VubG9jayhOQU1FKQorKyNlbmRpZgorKworKy8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKysgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworKyNpZiAhZGVmaW5lZCBfTElCQworKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKysjIGRlZmluZSBfbmxfZG9tYWluX2JpbmRpbmdzIGxpYmludGxfbmxfZG9tYWluX2JpbmRpbmdzCisrI2VuZGlmCisrCisrLyogU29tZSBjb21waWxlcnMsIGxpa2UgU3VuT1M0IGNjLCBkb24ndCBoYXZlIG9mZnNldG9mIGluIDxzdGRkZWYuaD4uICAqLworKyNpZm5kZWYgb2Zmc2V0b2YKKysjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKyAjZW5kaWYKKy0jaW5jbHVkZSAiZ2V0dGV4dC5oIgorLSNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKyAvKiBDb250YWlucyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBjYXRhbG9ncy4gICovCisgZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdOworKyNpZmRlZiBfTElCQworK2V4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVfaW50ZXJuYWxbXSBhdHRyaWJ1dGVfaGlkZGVuOworKyNlbHNlCisrIyBkZWZpbmUgSU5UVVNFKG5hbWUpIG5hbWUKKysjZW5kaWYKKyAKKyAvKiBMaXN0IHdpdGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucy4gICovCisgZXh0ZXJuIHN0cnVjdCBiaW5kaW5nICpfbmxfZG9tYWluX2JpbmRpbmdzOworIAorKy8qIExvY2sgdmFyaWFibGUgdG8gcHJvdGVjdCB0aGUgZ2xvYmFsIGRhdGEgaW4gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb24uICAqLworK19fbGliY19yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9ubF9zdGF0ZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCisrCisgCisgLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKK0BAIC02MSwyMyArNzcsNDEgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIEJJTkRURVhURE9NQUlOIF9fYmluZHRleHRkb21haW4KKy0jIGRlZmluZSBzdHJkdXAoc3RyKSBfX3N0cmR1cCAoc3RyKQorKyMgZGVmaW5lIEJJTkRfVEVYVERPTUFJTl9DT0RFU0VUIF9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKysjIGlmbmRlZiBzdHJkdXAKKysjICBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGVuZGlmCisgI2Vsc2UKKy0jIGRlZmluZSBCSU5EVEVYVERPTUFJTiBiaW5kdGV4dGRvbWFpbl9fCisrIyBkZWZpbmUgQklORFRFWFRET01BSU4gbGliaW50bF9iaW5kdGV4dGRvbWFpbgorKyMgZGVmaW5lIEJJTkRfVEVYVERPTUFJTl9DT0RFU0VUIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKyAjZW5kaWYKKyAKKy0vKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKy0gICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCistY2hhciAqCistQklORFRFWFRET01BSU4gKGRvbWFpbm5hbWUsIGRpcm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKysvKiBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBuYW1lICpESVJOQU1FUCBhbmQgdGhlIG91dHB1dCBjb2Rlc2V0ICpDT0RFU0VUUAorKyAgIHRvIGJlIHVzZWQgZm9yIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZy4KKysgICBJZiAqRElSTkFNRVAgb3IgKkNPREVTRVRQIGlzIE5VTEwsIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBpcyBub3QKKysgICBtb2RpZmllZCwgb25seSB0aGUgY3VycmVudCB2YWx1ZSBpcyByZXR1cm5lZC4KKysgICBJZiBESVJOQU1FUCBvciBDT0RFU0VUUCBpcyBOVUxMLCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaXMgbmVpdGhlcgorKyAgIG1vZGlmaWVkIG5vciByZXR1cm5lZC4gICovCisrc3RhdGljIHZvaWQKKytzZXRfYmluZGluZ192YWx1ZXMgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkgICAgY29uc3QgY2hhciAqKmRpcm5hbWVwLCBjb25zdCBjaGFyICoqY29kZXNldHApCisgeworICAgc3RydWN0IGJpbmRpbmcgKmJpbmRpbmc7CisrICBpbnQgbW9kaWZpZWQ7CisgCisgICAvKiBTb21lIHNhbml0eSBjaGVja3MuICAqLworICAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCB8fCBkb21haW5uYW1lWzBdID09ICdcMCcpCistICAgIHJldHVybiBOVUxMOworKyAgICB7CisrICAgICAgaWYgKGRpcm5hbWVwKQorKwkqZGlybmFtZXAgPSBOVUxMOworKyAgICAgIGlmIChjb2Rlc2V0cCkKKysJKmNvZGVzZXRwID0gTlVMTDsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIF9fbGliY19yd2xvY2tfd3Jsb2NrIChfbmxfc3RhdGVfbG9jayk7CisrCisrICBtb2RpZmllZCA9IDA7CisgCisgICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorICAgICB7CitAQCAtOTMsODEgKzEyNywxNzMgQEAKKyAJfQorICAgICB9CisgCistICBpZiAoZGlybmFtZSA9PSBOVUxMKQorLSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCistICAgIHJldHVybiBiaW5kaW5nID09IE5VTEwgPyAoY2hhciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lIDogYmluZGluZy0+ZGlybmFtZTsKKy0KKyAgIGlmIChiaW5kaW5nICE9IE5VTEwpCisgICAgIHsKKy0gICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCistCSBvbmUgYXJlIGVxdWFsIHdlIHNpbXBseSBkbyBub3RoaW5nLiAgT3RoZXJ3aXNlIHJlcGxhY2UgdGhlCistCSBvbGQgYmluZGluZy4gICovCistICAgICAgaWYgKHN0cmNtcCAoZGlybmFtZSwgYmluZGluZy0+ZGlybmFtZSkgIT0gMCkKKysgICAgICBpZiAoZGlybmFtZXApCisgCXsKKy0JICBjaGFyICpuZXdfZGlybmFtZTsKKysJICBjb25zdCBjaGFyICpkaXJuYW1lID0gKmRpcm5hbWVwOworIAorLQkgIGlmIChzdHJjbXAgKGRpcm5hbWUsIF9ubF9kZWZhdWx0X2Rpcm5hbWUpID09IDApCistCSAgICBuZXdfZGlybmFtZSA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CisrCSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKysJICAgICpkaXJuYW1lcCA9IGJpbmRpbmctPmRpcm5hbWU7CisgCSAgZWxzZQorIAkgICAgeworKwkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCisrCQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorKwkJIG9sZCBiaW5kaW5nLiAgKi8KKysJICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+ZGlybmFtZTsKKysJICAgICAgaWYgKHN0cmNtcCAoZGlybmFtZSwgcmVzdWx0KSAhPSAwKQorKwkJeworKwkJICBpZiAoc3RyY21wIChkaXJuYW1lLCBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpID09IDApCisrCQkgICAgcmVzdWx0ID0gKGNoYXIgKikgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKwkJICBlbHNlCisrCQkgICAgeworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0JICAgICAgbmV3X2Rpcm5hbWUgPSBzdHJkdXAgKGRpcm5hbWUpOworLQkgICAgICBpZiAobmV3X2Rpcm5hbWUgPT0gTlVMTCkKKy0JCXJldHVybiBOVUxMOworKwkJICAgICAgcmVzdWx0ID0gc3RyZHVwIChkaXJuYW1lKTsKKyAjZWxzZQorLQkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CistCSAgICAgIG5ld19kaXJuYW1lID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLQkgICAgICBpZiAobmV3X2Rpcm5hbWUgPT0gTlVMTCkKKy0JCXJldHVybiBOVUxMOworLQorLQkgICAgICBtZW1jcHkgKG5ld19kaXJuYW1lLCBkaXJuYW1lLCBsZW4pOworKwkJICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworKwkJICAgICAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKwkJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCQltZW1jcHkgKHJlc3VsdCwgZGlybmFtZSwgbGVuKTsKKyAjZW5kaWYKKysJCSAgICB9CisrCisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisrCQkgICAgeworKwkJICAgICAgaWYgKGJpbmRpbmctPmRpcm5hbWUgIT0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKQorKwkJCWZyZWUgKGJpbmRpbmctPmRpcm5hbWUpOworKworKwkJICAgICAgYmluZGluZy0+ZGlybmFtZSA9IHJlc3VsdDsKKysJCSAgICAgIG1vZGlmaWVkID0gMTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgICpkaXJuYW1lcCA9IHJlc3VsdDsKKyAJICAgIH0KKysJfQorIAorLQkgIGlmIChiaW5kaW5nLT5kaXJuYW1lICE9IF9ubF9kZWZhdWx0X2Rpcm5hbWUpCistCSAgICBmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKysgICAgICBpZiAoY29kZXNldHApCisrCXsKKysJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworIAorLQkgIGJpbmRpbmctPmRpcm5hbWUgPSBuZXdfZGlybmFtZTsKKysJICBpZiAoY29kZXNldCA9PSBOVUxMKQorKwkgICAgLyogVGhlIGN1cnJlbnQgYmluZGluZyBoYXMgYmUgdG8gcmV0dXJuZWQuICAqLworKwkgICAgKmNvZGVzZXRwID0gYmluZGluZy0+Y29kZXNldDsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIC8qIFRoZSBkb21haW4gaXMgYWxyZWFkeSBib3VuZC4gIElmIHRoZSBuZXcgdmFsdWUgYW5kIHRoZSBvbGQKKysJCSBvbmUgYXJlIGVxdWFsIHdlIHNpbXBseSBkbyBub3RoaW5nLiAgT3RoZXJ3aXNlIHJlcGxhY2UgdGhlCisrCQkgb2xkIGJpbmRpbmcuICAqLworKwkgICAgICBjaGFyICpyZXN1bHQgPSBiaW5kaW5nLT5jb2Rlc2V0OworKwkgICAgICBpZiAocmVzdWx0ID09IE5VTEwgfHwgc3RyY21wIChjb2Rlc2V0LCByZXN1bHQpICE9IDApCisrCQl7CisrI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorKwkJICByZXN1bHQgPSBzdHJkdXAgKGNvZGVzZXQpOworKyNlbHNlCisrCQkgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGNvZGVzZXQpICsgMTsKKysJCSAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorKwkJICAgIG1lbWNweSAocmVzdWx0LCBjb2Rlc2V0LCBsZW4pOworKyNlbmRpZgorKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChiaW5kaW5nLT5jb2Rlc2V0ICE9IE5VTEwpCisrCQkJZnJlZSAoYmluZGluZy0+Y29kZXNldCk7CisrCisrCQkgICAgICBiaW5kaW5nLT5jb2Rlc2V0ID0gcmVzdWx0OworKwkJICAgICAgYmluZGluZy0+Y29kZXNldF9jbnRyKys7CisrCQkgICAgICBtb2RpZmllZCA9IDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICAqY29kZXNldHAgPSByZXN1bHQ7CisrCSAgICB9CisgCX0KKyAgICAgfQorKyAgZWxzZSBpZiAoKGRpcm5hbWVwID09IE5VTEwgfHwgKmRpcm5hbWVwID09IE5VTEwpCisrCSAgICYmIChjb2Rlc2V0cCA9PSBOVUxMIHx8ICpjb2Rlc2V0cCA9PSBOVUxMKSkKKysgICAgeworKyAgICAgIC8qIFNpbXBseSByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVzLiAgKi8KKysgICAgICBpZiAoZGlybmFtZXApCisrCSpkaXJuYW1lcCA9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysgICAgICBpZiAoY29kZXNldHApCisrCSpjb2Rlc2V0cCA9IE5VTEw7CisrICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIFdlIGhhdmUgdG8gY3JlYXRlIGEgbmV3IGJpbmRpbmcuICAqLworLSAgICAgIHNpemVfdCBsZW47CisrICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZG9tYWlubmFtZSkgKyAxOworICAgICAgIHN0cnVjdCBiaW5kaW5nICpuZXdfYmluZGluZyA9CistCShzdHJ1Y3QgYmluZGluZyAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld19iaW5kaW5nKSk7CisrCShzdHJ1Y3QgYmluZGluZyAqKSBtYWxsb2MgKG9mZnNldG9mIChzdHJ1Y3QgYmluZGluZywgZG9tYWlubmFtZSkgKyBsZW4pOworIAorLSAgICAgIGlmIChuZXdfYmluZGluZyA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAobmV3X2JpbmRpbmcgPT0gTlVMTCwgMCkpCisrCWdvdG8gZmFpbGVkOworIAorKyAgICAgIG1lbWNweSAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGxlbik7CisrCisrICAgICAgaWYgKGRpcm5hbWVwKQorKwl7CisrCSAgY29uc3QgY2hhciAqZGlybmFtZSA9ICpkaXJuYW1lcDsKKysKKysJICBpZiAoZGlybmFtZSA9PSBOVUxMKQorKwkgICAgLyogVGhlIGRlZmF1bHQgdmFsdWUuICAqLworKwkgICAgZGlybmFtZSA9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkgPT0gMCkKKysJCWRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgY2hhciAqcmVzdWx0OworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0gICAgICBuZXdfYmluZGluZy0+ZG9tYWlubmFtZSA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CistICAgICAgaWYgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lID09IE5VTEwpCistCXJldHVybiBOVUxMOworKwkJICByZXN1bHQgPSBzdHJkdXAgKGRpcm5hbWUpOworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisgI2Vsc2UKKy0gICAgICBsZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpICsgMTsKKy0gICAgICBuZXdfYmluZGluZy0+ZG9tYWlubmFtZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0gICAgICBpZiAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPT0gTlVMTCkKKy0JcmV0dXJuIE5VTEw7CistICAgICAgbWVtY3B5IChuZXdfYmluZGluZy0+ZG9tYWlubmFtZSwgZG9tYWlubmFtZSwgbGVuKTsKKysJCSAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworKwkJICByZXN1bHQgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisrCQkgICAgZ290byBmYWlsZWRfZGlybmFtZTsKKysJCSAgbWVtY3B5IChyZXN1bHQsIGRpcm5hbWUsIGxlbik7CisgI2VuZGlmCistCistICAgICAgaWYgKHN0cmNtcCAoZGlybmFtZSwgX25sX2RlZmF1bHRfZGlybmFtZSkgPT0gMCkKKy0JbmV3X2JpbmRpbmctPmRpcm5hbWUgPSAoY2hhciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOworKwkJICBkaXJuYW1lID0gcmVzdWx0OworKwkJfQorKwkgICAgfQorKwkgICpkaXJuYW1lcCA9IGRpcm5hbWU7CisrCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSAoY2hhciAqKSBkaXJuYW1lOworKwl9CisgICAgICAgZWxzZQorKwkvKiBUaGUgZGVmYXVsdCB2YWx1ZS4gICovCisrCW5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKworKyAgICAgIG5ld19iaW5kaW5nLT5jb2Rlc2V0X2NudHIgPSAwOworKworKyAgICAgIGlmIChjb2Rlc2V0cCkKKyAJeworKwkgIGNvbnN0IGNoYXIgKmNvZGVzZXQgPSAqY29kZXNldHA7CisrCisrCSAgaWYgKGNvZGVzZXQgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgY2hhciAqcmVzdWx0OworKworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0JICBuZXdfYmluZGluZy0+ZGlybmFtZSA9IHN0cmR1cCAoZGlybmFtZSk7CistCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lID09IE5VTEwpCistCSAgICByZXR1cm4gTlVMTDsKKysJICAgICAgcmVzdWx0ID0gc3RyZHVwIChjb2Rlc2V0KTsKKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CisgI2Vsc2UKKy0JICBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKy0JICBuZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICBpZiAobmV3X2JpbmRpbmctPmRpcm5hbWUgPT0gTlVMTCkKKy0JICAgIHJldHVybiBOVUxMOworLQkgIG1lbWNweSAobmV3X2JpbmRpbmctPmRpcm5hbWUsIGRpcm5hbWUsIGxlbik7CisrCSAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGNvZGVzZXQpICsgMTsKKysJICAgICAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKwkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorKwkJZ290byBmYWlsZWRfY29kZXNldDsKKysJICAgICAgbWVtY3B5IChyZXN1bHQsIGNvZGVzZXQsIGxlbik7CisgI2VuZGlmCisrCSAgICAgIGNvZGVzZXQgPSByZXN1bHQ7CisrCSAgICAgIG5ld19iaW5kaW5nLT5jb2Rlc2V0X2NudHIrKzsKKysJICAgIH0KKysJICAqY29kZXNldHAgPSBjb2Rlc2V0OworKwkgIG5ld19iaW5kaW5nLT5jb2Rlc2V0ID0gKGNoYXIgKikgY29kZXNldDsKKyAJfQorKyAgICAgIGVsc2UKKysJbmV3X2JpbmRpbmctPmNvZGVzZXQgPSBOVUxMOworIAorICAgICAgIC8qIE5vdyBlbnF1ZXVlIGl0LiAgKi8KKyAgICAgICBpZiAoX25sX2RvbWFpbl9iaW5kaW5ncyA9PSBOVUxMCitAQCAtMTg3LDEzICszMTMsNTEgQEAKKyAJICBiaW5kaW5nLT5uZXh0ID0gbmV3X2JpbmRpbmc7CisgCX0KKyAKKy0gICAgICBiaW5kaW5nID0gbmV3X2JpbmRpbmc7CisrICAgICAgbW9kaWZpZWQgPSAxOworKworKyAgICAgIC8qIEhlcmUgd2UgZGVhbCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiAgKi8KKysgICAgICBpZiAoMCkKKysJeworKwlmYWlsZWRfY29kZXNldDoKKysJICBpZiAobmV3X2JpbmRpbmctPmRpcm5hbWUgIT0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKQorKwkgICAgZnJlZSAobmV3X2JpbmRpbmctPmRpcm5hbWUpOworKwlmYWlsZWRfZGlybmFtZToKKysJICBmcmVlIChuZXdfYmluZGluZyk7CisrCWZhaWxlZDoKKysJICBpZiAoZGlybmFtZXApCisrCSAgICAqZGlybmFtZXAgPSBOVUxMOworKwkgIGlmIChjb2Rlc2V0cCkKKysJICAgICpjb2Rlc2V0cCA9IE5VTEw7CisrCX0KKyAgICAgfQorIAorLSAgcmV0dXJuIGJpbmRpbmctPmRpcm5hbWU7CisrICAvKiBJZiB3ZSBtb2RpZmllZCBhbnkgYmluZGluZywgd2UgZmx1c2ggdGhlIGNhY2hlcy4gICovCisrICBpZiAobW9kaWZpZWQpCisrICAgICsrX25sX21zZ19jYXRfY250cjsKKysKKysgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrfQorKworKy8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorKyAgIGluIERJUk5BTUUgcmF0aGVyIHRoYW4gaW4gdGhlIHN5c3RlbSBsb2NhbGUgZGF0YSBiYXNlLiAgKi8KKytjaGFyICoKKytCSU5EVEVYVERPTUFJTiAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqZGlybmFtZSkKKyt7CisrICBzZXRfYmluZGluZ192YWx1ZXMgKGRvbWFpbm5hbWUsICZkaXJuYW1lLCBOVUxMKTsKKysgIHJldHVybiAoY2hhciAqKSBkaXJuYW1lOworK30KKysKKysvKiBTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIGZyb20gdGhlCisrICAgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSByZXR1cm5lZC4gICovCisrY2hhciAqCisrQklORF9URVhURE9NQUlOX0NPREVTRVQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmNvZGVzZXQpCisreworKyAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCBOVUxMLCAmY29kZXNldCk7CisrICByZXR1cm4gKGNoYXIgKikgY29kZXNldDsKKyB9CisgCisgI2lmZGVmIF9MSUJDCistLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrLyogQWxpYXNlcyBmb3IgZnVuY3Rpb24gbmFtZXMgaW4gR05VIEMgTGlicmFyeS4gICovCisgd2Vha19hbGlhcyAoX19iaW5kdGV4dGRvbWFpbiwgYmluZHRleHRkb21haW4pOworK3dlYWtfYWxpYXMgKF9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQsIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KTsKKyAjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9jYXQtY29tcGF0LmMJMTk5OC0wNC0yNiAwOToyMjozNy4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvY2F0LWNvbXBhdC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwyNjIgKzAsMCBAQAorLS8qIENvbXBhdGliaWxpdHkgY29kZSBmb3IgZ2V0dGV4dC11c2luZy1jYXRnZXRzIGludGVyZmFjZS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgPHN0ZGlvLmg+CistCistI2lmZGVmIFNURENfSEVBREVSUworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLWNoYXIgKmdldGVudiAoKTsKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmZGVmIEhBVkVfTkxfVFlQRVNfSAorLSMgaW5jbHVkZSA8bmxfdHlwZXMuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0vKiBYUEczIGRlZmluZXMgdGhlIHJlc3VsdCBvZiBgc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCknIGFzOgorLSAgIGBgRGlyZWN0cyBgc2V0bG9jYWxlKCknIHRvIHF1ZXJ5IGBjYXRlZ29yeScgYW5kIHJldHVybiB0aGUgY3VycmVudAorLSAgICAgc2V0dGluZyBvZiBgbG9jYWwnLicnCistICAgSG93ZXZlciBpdCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBleGFjdCBmb3JtYXQuICBBbmQgZXZlbiB3b3JzZTogUE9TSVgKKy0gICBkZWZpbmVzIHRoaXMgbm90IGF0IGFsbC4gIFNvIHdlIGNhbiB1c2UgdGhpcyBmZWF0dXJlIG9ubHkgb24gc2VsZWN0ZWQKKy0gICBzeXN0ZW0gKGUuZy4gdGhvc2UgdXNpbmcgR05VIEMgTGlicmFyeSkuICAqLworLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKKy0jZW5kaWYKKy0KKy0vKiBUaGUgY2F0YWxvZyBkZXNjcmlwdG9yLiAgKi8KKy1zdGF0aWMgbmxfY2F0ZCBjYXRhbG9nID0gKG5sX2NhdGQpIC0xOworLQorLS8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgY2F0YWxvZy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdF9jYXRhbG9nX25hbWVbXSA9ICJtZXNzYWdlcyI7CistCistLyogTmFtZSBvZiBjdXJyZW50bHkgdXNlZCBjYXRhbG9nLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lID0gZGVmYXVsdF9jYXRhbG9nX25hbWU7CistCistLyogR2V0IElEIGZvciBnaXZlbiBzdHJpbmcuICBJZiBub3QgZm91bmQgcmV0dXJuIC0xLiAgKi8KKy1zdGF0aWMgaW50IG1zZ190b19jYXRfaWQgUEFSQU1TICgoY29uc3QgY2hhciAqbXNnKSk7CistCistLyogU3Vic3RpdHV0aW9uIGZvciBzeXN0ZW1zIGxhY2tpbmcgdGhpcyBmdW5jdGlvbiBpbiB0aGVpciBDIGxpYnJhcnkuICAqLworLSNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCistc3RhdGljIGNoYXIgKnN0cGNweSBQQVJBTVMgKChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpKTsKKy0jZW5kaWYKKy0KKy0KKy0vKiBTZXQgY3VycmVudGx5IHVzZWQgZG9tYWluL2NhdGFsb2cuICAqLworLWNoYXIgKgorLXRleHRkb21haW4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLXsKKy0gIG5sX2NhdGQgbmV3X2NhdGFsb2c7CistICBjaGFyICpuZXdfbmFtZTsKKy0gIHNpemVfdCBuZXdfbmFtZV9sZW47CistICBjaGFyICpsYW5nOworLQorLSNpZiBkZWZpbmVkIEhBVkVfU0VUTE9DQUxFICYmIGRlZmluZWQgSEFWRV9MQ19NRVNTQUdFUyBcCistICAgICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorLSAgbGFuZyA9IHNldGxvY2FsZSAoTENfTUVTU0FHRVMsIE5VTEwpOworLSNlbHNlCistICBsYW5nID0gZ2V0ZW52ICgiTENfQUxMIik7CistICBpZiAobGFuZyA9PSBOVUxMIHx8IGxhbmdbMF0gPT0gJ1wwJykKKy0gICAgeworLSAgICAgIGxhbmcgPSBnZXRlbnYgKCJMQ19NRVNTQUdFUyIpOworLSAgICAgIGlmIChsYW5nID09IE5VTEwgfHwgbGFuZ1swXSA9PSAnXDAnKQorLQlsYW5nID0gZ2V0ZW52ICgiTEFORyIpOworLSAgICB9CistI2VuZGlmCistICBpZiAobGFuZyA9PSBOVUxMIHx8IGxhbmdbMF0gPT0gJ1wwJykKKy0gICAgbGFuZyA9ICJDIjsKKy0KKy0gIC8qIFNlZSB3aGV0aGVyIG5hbWUgb2YgY3VycmVudGx5IHVzZWQgZG9tYWluIGlzIGFza2VkLiAgKi8KKy0gIGlmIChkb21haW5uYW1lID09IE5VTEwpCistICAgIHJldHVybiAoY2hhciAqKSBjYXRhbG9nX25hbWU7CistCistICBpZiAoZG9tYWlubmFtZVswXSA9PSAnXDAnKQorLSAgICBkb21haW5uYW1lID0gZGVmYXVsdF9jYXRhbG9nX25hbWU7CistCistICAvKiBDb21wdXRlIGxlbmd0aCBvZiBhZGRlZCBwYXRoIGVsZW1lbnQuICAqLworLSAgbmV3X25hbWVfbGVuID0gc2l6ZW9mIChMT0NBTEVESVIpIC0gMSArIDEgKyBzdHJsZW4gKGxhbmcpCistCQkgKyBzaXplb2YgKCIvTENfTUVTU0FHRVMvIikgLSAxICsgc2l6ZW9mIChQQUNLQUdFKSAtIDEKKy0JCSArIHNpemVvZiAoIi5jYXQiKTsKKy0KKy0gIG5ld19uYW1lID0gKGNoYXIgKikgbWFsbG9jIChuZXdfbmFtZV9sZW4pOworLSAgaWYgKG5ld19uYW1lID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgc3RyY3B5IChuZXdfbmFtZSwgUEFDS0FHRSk7CistICBuZXdfY2F0YWxvZyA9IGNhdG9wZW4gKG5ld19uYW1lLCAwKTsKKy0KKy0gIGlmIChuZXdfY2F0YWxvZyA9PSAobmxfY2F0ZCkgLTEpCistICAgIHsKKy0gICAgICAvKiBOTFNQQVRIIHNlYXJjaCBkaWRuJ3Qgd29yaywgdHJ5IGFic29sdXRlIHBhdGggKi8KKy0gICAgICBzcHJpbnRmIChuZXdfbmFtZSwgIiVzLyVzL0xDX01FU1NBR0VTLyVzLmNhdCIsIExPQ0FMRURJUiwgbGFuZywKKy0JICAgICAgIFBBQ0tBR0UpOworLSAgICAgIG5ld19jYXRhbG9nID0gY2F0b3BlbiAobmV3X25hbWUsIDApOworLQorLSAgICAgIGlmIChuZXdfY2F0YWxvZyA9PSAobmxfY2F0ZCkgLTEpCistCXsKKy0JICBmcmVlIChuZXdfbmFtZSk7CistCSAgcmV0dXJuIChjaGFyICopIGNhdGFsb2dfbmFtZTsKKy0JfQorLSAgICB9CistCistICAvKiBDbG9zZSBvbGQgY2F0YWxvZy4gICovCistICBpZiAoY2F0YWxvZyAhPSAobmxfY2F0ZCkgLTEpCistICAgIGNhdGNsb3NlIChjYXRhbG9nKTsKKy0gIGlmIChjYXRhbG9nX25hbWUgIT0gZGVmYXVsdF9jYXRhbG9nX25hbWUpCistICAgIGZyZWUgKChjaGFyICopIGNhdGFsb2dfbmFtZSk7CistCistICBjYXRhbG9nID0gbmV3X2NhdGFsb2c7CistICBjYXRhbG9nX25hbWUgPSBuZXdfbmFtZTsKKy0KKy0gIHJldHVybiAoY2hhciAqKSBjYXRhbG9nX25hbWU7CistfQorLQorLWNoYXIgKgorLWJpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU7CisteworLSNpZiBIQVZFX1NFVEVOViB8fCBIQVZFX1BVVEVOVgorLSAgY2hhciAqb2xkX3ZhbCwgKm5ld192YWwsICpjcDsKKy0gIHNpemVfdCBuZXdfdmFsX2xlbjsKKy0KKy0gIC8qIFRoaXMgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlIGhlcmUgYnV0IHRvIGJlIGNvbXBhdGlibGUgZG8gaXQuICAqLworLSAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKy0gICAgcmV0dXJuIE5VTEw7CistCistICAvKiBDb21wdXRlIGxlbmd0aCBvZiBhZGRlZCBwYXRoIGVsZW1lbnQuICBJZiB3ZSB1c2Ugc2V0ZW52IHdlIGRvbid0IG5lZWQKKy0gICAgIHRoZSBmaXJzdCBieXRzIGZvciBOTFNQQVRIPSwgYnV0IHdoeSBjb21wbGljYXRlIHRoZSBjb2RlIGZvciB0aGlzCistICAgICBwZWFudXRzLiAgKi8KKy0gIG5ld192YWxfbGVuID0gc2l6ZW9mICgiTkxTUEFUSD0iKSAtIDEgKyBzdHJsZW4gKGRpcm5hbWUpCistCQkrIHNpemVvZiAoIi8lTC9MQ19NRVNTQUdFUy8lTi5jYXQiKTsKKy0KKy0gIG9sZF92YWwgPSBnZXRlbnYgKCJOTFNQQVRIIik7CistICBpZiAob2xkX3ZhbCA9PSBOVUxMIHx8IG9sZF92YWxbMF0gPT0gJ1wwJykKKy0gICAgeworLSAgICAgIG9sZF92YWwgPSBOVUxMOworLSAgICAgIG5ld192YWxfbGVuICs9IDEgKyBzaXplb2YgKExPQ0FMRURJUikgLSAxCistCSAgICAgICAgICAgICArIHNpemVvZiAoIi8lTC9MQ19NRVNTQUdFUy8lTi5jYXQiKTsKKy0gICAgfQorLSAgZWxzZQorLSAgICBuZXdfdmFsX2xlbiArPSBzdHJsZW4gKG9sZF92YWwpOworLQorLSAgbmV3X3ZhbCA9IChjaGFyICopIG1hbGxvYyAobmV3X3ZhbF9sZW4pOworLSAgaWYgKG5ld192YWwgPT0gTlVMTCkKKy0gICAgcmV0dXJuIE5VTEw7CistCistIyBpZiBIQVZFX1NFVEVOVgorLSAgY3AgPSBuZXdfdmFsOworLSMgZWxzZQorLSAgY3AgPSBzdHBjcHkgKG5ld192YWwsICJOTFNQQVRIPSIpOworLSMgZW5kaWYKKy0KKy0gIGNwID0gc3RwY3B5IChjcCwgZGlybmFtZSk7CistICBjcCA9IHN0cGNweSAoY3AsICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0OiIpOworLQorLSAgaWYgKG9sZF92YWwgPT0gTlVMTCkKKy0gICAgeworLSMgaWYgX19TVERDX18KKy0gICAgICBzdHBjcHkgKGNwLCBMT0NBTEVESVIgIi8lTC9MQ19NRVNTQUdFUy8lTi5jYXQiKTsKKy0jIGVsc2UKKy0KKy0gICAgICBjcCA9IHN0cGNweSAoY3AsIExPQ0FMRURJUik7CistICAgICAgc3RwY3B5IChjcCwgIi8lTC9MQ19NRVNTQUdFUy8lTi5jYXQiKTsKKy0jIGVuZGlmCistICAgIH0KKy0gIGVsc2UKKy0gICAgc3RwY3B5IChjcCwgb2xkX3ZhbCk7CistCistIyBpZiBIQVZFX1NFVEVOVgorLSAgc2V0ZW52ICgiTkxTUEFUSCIsIG5ld192YWwsIDEpOworLSAgZnJlZSAobmV3X3ZhbCk7CistIyBlbHNlCistICBwdXRlbnYgKG5ld192YWwpOworLSAgLyogRG8gKm5vdCogZnJlZSB0aGUgZW52aXJvbm1lbnQgZW50cnkgd2UganVzdCBlbnRlcmVkLiAgSXQgaXMgdXNlZAorLSAgICAgZnJvbSBub3cgb24uICAgKi8KKy0jIGVuZGlmCistCistI2VuZGlmCistCistICByZXR1cm4gKGNoYXIgKikgZG9tYWlubmFtZTsKKy19CistCistI3VuZGVmIGdldHRleHQKKy1jaGFyICoKKy1nZXR0ZXh0IChtc2cpCistICAgICBjb25zdCBjaGFyICptc2c7CisteworLSAgaW50IG1zZ2lkOworLQorLSAgaWYgKG1zZyA9PSBOVUxMIHx8IGNhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLSAgICByZXR1cm4gKGNoYXIgKikgbXNnOworLQorLSAgLyogR2V0IHRoZSBtZXNzYWdlIGZyb20gdGhlIGNhdGFsb2cuICBXZSBhbHdheXMgdXNlIHNldCBudW1iZXIgMS4KKy0gICAgIFRoZSBtZXNzYWdlIElEIGlzIGNvbXB1dGVkIGJ5IHRoZSBmdW5jdGlvbiBgbXNnX3RvX2NhdF9pZCcKKy0gICAgIHdoaWNoIHdvcmtzIG9uIHRoZSB0YWJsZSBnZW5lcmF0ZWQgYnkgYHBvLXRvLXRibCcuICAqLworLSAgbXNnaWQgPSBtc2dfdG9fY2F0X2lkIChtc2cpOworLSAgaWYgKG1zZ2lkID09IC0xKQorLSAgICByZXR1cm4gKGNoYXIgKikgbXNnOworLQorLSAgcmV0dXJuIGNhdGdldHMgKGNhdGFsb2csIDEsIG1zZ2lkLCAoY2hhciAqKSBtc2cpOworLX0KKy0KKy0vKiBMb29rIHRocm91Z2ggdGhlIHRhYmxlIGBfbXNnX3RibCcgd2hpY2ggaGFzIGBfbXNnX3RibF9sZW5ndGgnIGVudHJpZXMKKy0gICBmb3IgdGhlIG9uZSBlcXVhbCB0byBtc2cuICBJZiBpdCBpcyBmb3VuZCByZXR1cm4gdGhlIElELiAgSW4gY2FzZSB3aGVuCistICAgdGhlIHN0cmluZyBpcyBub3QgZm91bmQgcmV0dXJuIC0xLiAgKi8KKy1zdGF0aWMgaW50CistbXNnX3RvX2NhdF9pZCAobXNnKQorLSAgICAgY29uc3QgY2hhciAqbXNnOworLXsKKy0gIGludCBjbnQ7CistCistICBmb3IgKGNudCA9IDA7IGNudCA8IF9tc2dfdGJsX2xlbmd0aDsgKytjbnQpCistICAgIGlmIChzdHJjbXAgKG1zZywgX21zZ190YmxbY250XS5fbXNnKSA9PSAwKQorLSAgICAgIHJldHVybiBfbXNnX3RibFtjbnRdLl9tc2dfbnVtYmVyOworLQorLSAgcmV0dXJuIC0xOworLX0KKy0KKy0KKy0vKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKy0KKy0vKiBXZSBkb24ndCB3YW50IGxpYmludGwuYSB0byBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJhcnkuICBTbyB3ZQorLSAgIGF2b2lkIHRoZSBub24tc3RhbmRhcmQgZnVuY3Rpb24gc3RwY3B5LiAgSW4gR05VIEMgTGlicmFyeSB0aGlzCistICAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCB0aG91Z2guICBBbHNvIGFsbG93IHRoZSBzeW1ib2wgSEFWRV9TVFBDUFkKKy0gICB0byBiZSBkZWZpbmVkLiAgKi8KKy0jaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICoKKy1zdHBjcHkgKGRlc3QsIHNyYykKKy0gICAgIGNoYXIgKmRlc3Q7CistICAgICBjb25zdCBjaGFyICpzcmM7CisteworLSAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorLSAgICAvKiBEbyBub3RoaW5nLiAqLyA7CistICByZXR1cm4gZGVzdCAtIDE7CistfQorLSNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL0NoYW5nZUxvZwkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNC4zNDk3NDkwMDAgLTA0MDAKK0BAIC0xLDEwMjIgKzEsNCBAQAorLTE5OTctMDktMDYgMDI6MTAgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGludGxoLmluc3QuaW46IFJlZm9ybWF0IGNvcHlyaWdodC4KKy0KKy0xOTk3LTA4LTE5IDE1OjIyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAoRENHRVRURVhUKTogUmVtb3ZlIHdyb25nIGNvbW1lbnQuCistCistMTk5Ny0wOC0xNiAwMDoxMyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGF0YSk6IERvbid0IGNoYW5nZSBkaXJlY3RvcnkgdG8gaW5zdGFsbC4KKy0KKy0xOTk3LTA4LTAxIDE0OjMwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEZpeCBjb3B5cmlnaHQuCistCistCSogbG9jYWxlYWxpYXMuYzogRG9uJ3QgZGVmaW5lIHN0cmNociB1bmxlc3MgIUhBVkVfU1RSQ0hSLgorLQorLQkqIGxvYWRtc2djYXQuYzogVXBkYXRlIGNvcHlyaWdodC4gIEZpeCB0eXBvcy4KKy0KKy0JKiBsMTBuZmxpc3QuYzogRG9uJ3QgZGVmaW5lIHN0cmNociB1bmxlc3MgIUhBVkVfU1RSQ0hSLgorLQkoX25sX21ha2VfbDEwbmZsaXN0KTogSGFuZGxlIHNwb25zb3IgYW5kIHJldmlzaW9uIGNvcnJlY3RseS4KKy0KKy0JKiBnZXR0ZXh0LmM6IFVwZGF0ZSBjb3B5cmlnaHQuCistCSogZ2V0dGV4dC5oOiBMaWtld2lzZS4KKy0JKiBoYXNoLXN0cmluZy5oOiBMaWtld2lzZS4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IFJlbW9hdmUgZGVhZCBjb2RlLiAgRGVmaW5lIHN0cmNociBvbmx5IGlmCistCSFIQVZFX1NUUkNIUi4KKy0KKy0JKiBleHBsb2RlbmFtZS5jOiBJbmNsdWRlIDxzeXMvdHlwZXMuaD4uCistCistCSogZXhwbG9kZW5hbWUuYzogUmVmb3JtYXQgY29weXJpZ2h0IHRleHQuCistCShfbmxfZXhwbG9kZV9uYW1lKTogRml4IHR5cG8uCistCistCSogZGNnZXR0ZXh0LmM6IERlZmluZSBhbmQgdXNlIF9fc2V0X2Vycm5vLgorLQkoZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUpOiBEb24ndCB1c2Ugc2V0bG9jYWxlIGlmIEhBVkVfTENfTUVTU0FHRVMgaXMKKy0Jbm90IGRlZmluZWQuCistCistCSogYmluZHRleHRkb20uYzogUHJldHR5IHByaW50aW5nLgorLQorLTE5OTctMDUtMDEgMDI6MjUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGRjZ2V0dGV4dC5jIChndWVzc19jYXRlZ29yeV92YWx1ZSk6IERvbid0IGRlcGVuZCBvbgorLQlIQVZFX0xDX01FU1NBR0VTLiAgV2UgZG9uJ3QgbmVlZCB0aGUgbWFjcm8gaGVyZS4KKy0JUGF0Y2ggYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAaWxvZy5mcj4uCistCistCSogY2F0LWNvbXBhdC5jICh0ZXh0ZG9tYWluKTogRG9OJ3QgcmVmZXIgdG8gSEFWRV9TRVRMT0NBTEVfTlVMTAorLQltYWNyby4gIEluc3RlYWQgdXNlIEhBVkVfTE9DQUxFX05VTEwgYW5kIGRlZmluZSBpdCB3aGVuIHVzaW5nCistCWdsaWJjLCBhcyBpbiBkY2dldHRleHQuYy4KKy0JUGF0Y2ggYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAaWxvZy5mcj4uCistCistCSogTWFrZWZpbGUuaW4gKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLiAgUmVwb3J0ZWQgYnkgRnJhbmMsb2lzCistCVBpbmFyZC4KKy0KKy1Nb24gTWFyIDEwIDA2OjUxOjE3IDE5OTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluOiBJbXBsZW1lbnQgaGFuZGxpbmcgb2YgbGlidG9vbC4KKy0KKy0JKiBnZXR0ZXh0UC5oOiBDaGFuZ2UgZGF0YSBzdHJ1Y3R1cmVzIGZvciB1c2Ugb2YgZ2VuZXJpYyBsb3dsZXZlbAorLQlpMThuIGZpbGUgaGFuZGxpbmcuCistCistV2VkIERlYyAgNCAyMDoyMToxOCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IFB1dCBwYXJlbnRoZXNlcyBhcm91bmQgYXJndW1lbnRzIG9mIG1lbWNweSBtYWNybworLQlkZWZpbml0aW9uLgorLQkqIGxvY2FsZWFsaWFzLmM6IExpa2V3aXNlLgorLQkqIGwxMG5mbGlzdC5jOiBMaWtld2lzZS4KKy0JKiBmaW5kZG9tYWluLmM6IExpa2V3aXNlLgorLQkqIGJpbmR0ZXh0ZG9tLmM6IExpa2V3aXNlLgorLQlSZXBvcnRlZCBieSBUaG9tYXMgRXNrZW4uCistCistTW9uIE5vdiAyNSAyMjo1Nzo1MSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IE1vdmUgZGVmaW5pdGlvbiBvZiBgbWVtY3B5YCBtYWNybyB0byByaWdodAorLQlwb3NpdGlvbi4KKy0KKy1GcmkgTm92IDIyIDA0OjAxOjU4IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGZpbmRkb21haW4uYyBbIUhBVkVfU1RSSU5HX0ggJiYgIV9MSUJDXTogRGVmaW5lIG1lbWNweSB1c2luZworLSAJYmNvcHkgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4gIFJlcG9ydGVkIGJ5IFRob21hcyBFc2tlbi4KKy0JKiBiaW5kdGV4dGRvbS5jOiBMaWtld2lzZS4KKy0JKiBsMTBuZmxpc3QuYzogTGlrZXdpc2UuCistCSogbG9jYWxlYWxpYXMuYzogTGlrZXdpc2UuCistCSogdGV4dGRvbWFpbi5jOiBMaWtld2lzZS4KKy0KKy1UdWUgT2N0IDI5IDExOjEwOjI3IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChsaWJkaXIpOiBDaGFuZ2UgdG8gdXNlIGV4ZWNfcHJlZml4IGluc3RlYWQgb2YKKy0gCXByZWZpeC4gIFJlcG9ydGVkIGJ5IEtudXQtSOV2YXJkQWtzbmVzIDxldG9rbmFAZXRvLmVyaWNzc29uLnNlPi4KKy0KKy1TYXQgQXVnIDMxIDAzOjA3OjA5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jIChfbmxfbm9ybWFsaXplX2NvZGVzZXQpOiBXZSBjb252ZXJ0IHRvIGxvd2VyIGNhc2UsCistCXNvIGRvbid0IHByZXBlbmQgdXBwZXJjYXNlIGBJU08nIGZvciBvbmx5IG51bWVyaWMgYXJnLgorLQorLUZyaSBKdWwgMTkgMDA6MTU6NDYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmM6IE1vdmUgaW5jbHVzaW9uIG9mIGFyZ3ouaCwgY3R5cGUuaCwgc3RkbGliLmggYWZ0ZXIKKy0JZGVmaW5pdGlvbiBvZiBfR05VX1NPVVJDRS4gIFBhdGNoIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLQkqIE1ha2VmaWxlLmluICh1bmluc3RhbGwpOiBGaXggYW5vdGhlciBidWcgd2l0aCBgZm9yJyBsb29wIGFuZAorLQllbXB0eSBhcmd1bWVudHMuICBQYXRjaCBieSBKaW0gTWV5ZXJpbmcuICBDb3JyZWN0IG5hbWUgb3MKKy0JdW5pbnN0YWxsZWQgZmlsZXM6IG5vIGludGwtIHByZWZpeCBhbnltb3JlLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRhdGEpOiBBZ2FpbiB3b3JrIGFyb3VuZCBzaGVsbHMgd2hpY2gKKy0JY2Fubm90IGhhbmRsZSBtcHR5IGZvciBsaXN0LiAgUmVwb3J0ZWQgYnkgSmltIE1leWVyaW5nLgorLQorLVNhdCBKdWwgMTMgMTg6MTE6MzUgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBTcGxpdCBnb2FsLiAgTm93IGRlcGVuZCBvbiBpbnN0YWxsLWV4ZWMKKy0gICAgICAgIGFuZCBpbnN0YWxsLWRhdGEuCistCShpbnN0YWxsLWV4ZWMsIGluc3RhbGwtZGF0YSk6IE5ldyBnb2Fscy4gIENyZWF0ZWQgZnJvbSBmb3JtZXIKKy0JaW5zdGFsbCBnb2FsLgorLQlSZXBvcnRlZCBieSBLYXJsIEJlcnJ5LgorLQorLVNhdCBKdW4gMjIgMDQ6NTg6MTQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKE1LSU5TVEFMTERJUlMpOiBOZXcgdmFyaWFibGUuICBQYXRoIHRvCistICAgICAgICBta2luc3RhbGxkaXJzIHNjcmlwdC4KKy0JKGluc3RhbGwpOiB1c2UgTUtJTlNUQUxMRElSUyB2YXJpYWJsZSBvciBpZiB0aGUgc2NyaXB0IGlzIG5vdCBwcmVzZW50CistCXRyeSB0byBmaW5kIGl0IGluIHRoZSAkdG9wX3NjcmRpcikuCistCistV2VkIEp1biAxOSAwMjo1Njo1NiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYzogTGludXggbGliYyAqcGFydGx5KiBpbmNsdWRlcyB0aGUgYXJnel8qIGZ1bmN0aW9ucy4KKy0JR3JyLiAgV29yayBhcm91bmQgYnkgcmVuYW1pbmcgdGhlIHN0YXRpYyB2ZXJzaW9uIGFuZCB1c2UgbWFjcm9zCistCWZvciByZW5hbWluZy4KKy0KKy1UdWUgSnVuIDE4IDIwOjExOjE3IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jOiBDb3JyZWN0IHByZXNlbmNlIHRlc3QgbWFjcm9zIG9mIF9fYXJnel8qIGZ1bmN0aW9ucy4KKy0KKy0JKiBsMTBuZmxpc3QuYzogSW5jbHVkZSA8YXJnei5oPiBiYXNlZCBvbiB0ZXN0IG9mIGl0IGluc3RlYWQgd2hlbgorLQlfX2FyZ3pfKiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZS4KKy0JUmVwb3J0ZWQgYnkgQW5kcmVhcyBTY2h3YWIuCistCistVGh1IEp1biAxMyAxNToxNzo0NCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBleHBsb2RlbmFtZS5jLCBsMTBuZmxpc3QuYzogRGVmaW5lIE5VTEwgZm9yIGR1bWIgc3lzdGVtcy4KKy0KKy1UdWUgSnVuIDExIDE3OjA1OjEzIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGludGxoLmluc3QuaW4sIGxpYmdldHRleHQuaCAoZGNnZXR0ZXh0KTogUmVuYW1lIGxvY2FsIHZhcmlhYmxlCistCXJlc3VsdCB0byBfX3Jlc3VsdCB0byBwcmV2ZW50IG5hbWUgY2xhc2guCistCistCSogbDEwbmZsaXN0LmMsIGxvY2FsZWFsaWFzLmMsIGRjZ2V0dGV4dC5jOiBEZWZpbmUgX0dOVV9TT1VSQ0UgdG8KKy0gICAgICAgIGdldCBwcm90b3R5cGUgZm9yIHN0cGNweSBhbmQgc3RyY2FzZWNtcC4KKy0KKy0JKiBpbnRsaC5pbnN0LmluLCBsaWJnZXR0ZXh0Lmg6IE1vdmUgZGVjbGFyYXRpb24gb2YKKy0JYF9ubF9tc2dfY2F0X2NudHInIG91dHNpZGUgX19leHRlbnNpb25fXyBibG9jayB0byBwcmV2ZW50IHdhcm5pbmcKKy0JZnJvbSBnY2MncyAtV25lc3RlZC1leHRlcm4gb3B0aW9uLgorLQorLUZyaSBKdW4gIDcgMDE6NTg6MDAgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBSZW1vdmUgY29tbWVudC4KKy0KKy1UaHUgSnVuICA2IDE3OjI4OjE3IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogV29yayBhcm91bmQgZm9yIGFub3RoZXIgQnVnbGl4IHN0dXBpZGl0eS4KKy0JQWx3YXlzIHVzZSBhbiBgZWxzZScgY2xvc2UgZm9yIGBpZidzLiAgUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnRsaC5pbnN0KTogQ29ycmVjdCB0eXBvIGluIHBob255IHJ1bGUuCistCVJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy1UaHUgSnVuICA2IDAxOjQ5OjUyIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGRjZ2V0dGV4dC5jIChyZWFkX2FsaWFzX2ZpbGUpOiBSZW5hbWUgdmFyaWFibGUgYWxsb2NhX2xpc3QgdG8KKy0JYmxvY2tfbGlzdCBhcyB0aGUgbWFjcm8gY2FsbHMgYXNzdW1lLgorLQlQYXRjaCBieSBFcmljIEJhY2t1cy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIFshSEFWRV9BTExPQ0FdOiBEZWZpbmUgYWxsb2NhIGFzIG1hY3JvIHVzaW5nCistICAgICAgICBtYWxsb2MuCistCShyZWFkX2FsaWFzX2ZpbGUpOiBSZW5hbWUgdmFycmlhYmUgYWxsb2NhX2xpc3QgdG8gYmxvY2tfbGlzdCBhcyB0aGUKKy0JbWFjcm8gY2FsbHMgYXNzdW1lLgorLQlQYXRjaCBieSBFcmljIEJhY2t1cy4KKy0KKy0JKiBsMTBuZmxpc3QuYzogQ29ycmVjdCBjb25kaXRpb25hbCBmb3IgPGFyZ3ouaD4gaW5jbHVzaW9uLgorLQlSZXBvcnRlZCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsKTogRGVwZW5kIG9uIGFsbC1AVVNFX0lOQ0xVREVEX0xJQklOVExALCBub3QKKy0gICAgICAgIGFsbC1AVVNFX05MU0AuCistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBpbnRsaC5pbnN0IGNvbWVzIGZyb20gbG9jYWwgZGlyLCBub3QKKy0gICAgICAgICQoc3JjZGlyKS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW50bGguaW5zdCk6IFNwZWNpYWwgaGFuZGxpbmcgb2YgdGhpcyBnb2FsLiAgSWYKKy0JdXNlZCBpbiBnZXR0ZXh0LCB0aGlzIGlzIHJlYWxseSBhIHJ1bCB0byBjb25zdHJ1Y3QgdGhpcyBmaWxlLiAgSWYKKy0JdXNlZCBpbiBhbnkgb3RoZXIgcGFja2FnZSBpdCBpcyBkZWZpbmVkIGFzIGEgLlBIT05ZIHJ1bGUgd2l0aAorLQllbXB0eSBib2R5LgorLQorLQkqIGZpbmRkb21haW4uYzogRXh0cmFjdCBsb2NhbGUgZmlsZSBpbmZvcm1hdGlvbiBoYW5kbGluZyBpbnRvCistCWwxMG5maWxlLmMuICBSZW5hbWUgbG9jYWwgc3RwY3B5X18gZnVuY3Rpb24gdG8gc3RwY3B5LgorLQorLQkqIGRjZ2V0dGV4dC5jIChzdHBjcHkpOiBBZGQgbG9jYWwgZGVmaW5pdGlvbi4KKy0KKy0JKiBsMTBuZmxpc3QuYzogU29sdmUgc29tZSBwb3J0YWJpbGl0eSBwcm9ibGVtcy4gIFBhdGNoZXMgcGFydGx5IGJ5CistCVRob21hcyBFc2tlbi4gIEFkZCBsb2NhbCBkZWZpbml0aW9uIG9mIHN0cGNweS4KKy0KKy1UdWUgSnVuICA0IDAyOjQ3OjQ5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGludGxoLmluc3QuaW46IERvbid0IGRlcGVuZCBpbmNsdWRpbmcgPGxvY2FsZS5oPiBvbgorLQlIQVZFX0xPQ0FMRV9ILiAgSW5zdGVhZCBjb25maWd1cmUgbXVzdCByZXdyaXRlIHRoaXMgZmlpbGUKKy0JZGVwZW5kaW5nIG9uIHRoZSByZXN1bHQgb2YgdGhlIGNvbmZpZ3VyZSBydW4uCistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBsaWJpbnRsLmluc3QgaXMgbm93IGNhbGxlZCBpbnRsaC5pbnN0LgorLQlBZGQgcnVsZXMgZm9yIHVwZGF0aW5nIGludGxoLmluc3QgZnJvbSBpbnRsaC5pbnN0LmluLgorLQorLQkqIGxpYmludGwuaW5zdDogUmVuYW1lZCB0byBpbnRsaC5pbnN0LmluLgorLQorLQkqIGxvY2FsZWFsaWFzLmMsIGRjZ2V0dGV4dC5jIFtfX0dOVUNfX106IERlZmluZSBIQVZFX0FMTE9DQSB0byAxCistICAgICAgICBiZWNhdXNlIGdjYyBoYXMgX19idWl0bGluX2FsbG9jYS4KKy0JUmVwb3J0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCistCistTW9uIEp1biAgMyAwMDozMjoxNiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbGNoZWNrKTogTmV3IGdvYWwgdG8gZnVsZmlsbCBuZWVkcyBvZgorLSAgICAgICAgYXV0b21ha2UncyBkaXN0Y2hlY2suCistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBSZW9yZGVyIGNvbW1hbmRzIHNvIHRoYXQgVkVSU0lPTiBpcworLSAgICAgICAgZm91bmQuCistCistCSogTWFrZWZpbGUuaW4gKGdldHRleHRzcmNkaXIpOiBOb3cgdXNlIHN1YmRpcmVjdG9yeSBpbnRsLyBpbgorLSAgICAgICAgQGRhdGFkaXJAL2dldHRleHQuCistCShDT01TUkNTKTogQWRkIGwxMG5maWxlLmMuCistCShPQkpFQ1RTKTogQWRkIGwxMG5maWxlLm8uCistCShESVNURklMRVMpOiBSZW5hbWUgdG8gRElTVEZJTEUubm9ybWFsLiAgUmVtb3ZlICQoRElTVEZJTEVTLmNvbW1vbikuCistCShESVNURklMRS5nZXR0ZXh0KTogUmVtb3ZlICQoRElTVEZJTEVTLmNvbW1vbikuCistCShhbGwtZ2V0dGV4dCk6IFJlbW92ZSBnb2FsLgorLQkoaW5zdGFsbCk6IElmICQoUEFDS0FHRSkgPSBnZXR0ZXh0IGluc3RhbGwsIG90aGVyd29zZSBkbyBub3RoaW5nLiAgTm8KKy0JcGFja2FnZSBidXQgZ2V0dGV4dCBpdHNlbGYgc2hvdWxkIGluc3RhbGwgbGliaW50bC5oICsgaGVhZGVycy4KKy0JKGRpc3QpOiBFeHRlbmQgZ29hbCB0byB3b3JrIGZvciBnZXR0ZXh0LCB0b28uCistCShkaXN0LWdldHRleHQpOiBSZW1vdmUgZ29hbC4KKy0KKy0JKiBkY2dldHRleHQuYyBbIUhBVkVfQUxMT0NBXTogRGVmaW5lIG1hY3JvIGFsbG9jYSBieSB1c2luZyBtYWxsb2MuCistCistU3VuIEp1biAgMiAxNzozMzowNiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsb2FkbXNnY2F0LmMgKF9ubF9sb2FkX2RvbWFpbik6IFBhcmFtZXRlciBpcyBub3cgY29tZXMgZnJvbQorLSAgICAgICAgZmluZF9sMTBuZmlsZS4KKy0KKy1TYXQgSnVuICAxIDAyOjIzOjAzIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jIChfX2FyZ3pfbmV4dCk6IEFkZCBkZWZpbml0aW9uLgorLQorLQkqIGRjZ2V0dGV4dC5jIFshSEFWRV9BTExPQ0FdOiBBZGQgY29kZSBmb3IgaGFuZGxpbmcgbWlzc2luZyBhbGxvY2EKKy0JY29kZS4gIFVzZSBuZXcgbDEwbmZpbGUgaGFuZGxpbmcuCistCistCSogbG9jYWxlYWxpYXMuYyBbIUhBVkVfQUxMT0NBXTogQWRkIGNvZGUgZm9yIGhhbmRsaW5nIG1pc3NpbmcKKy0gICAgICAgIGFsbG9jYSBjb2RlLgorLQorLQkqIGwxMG5mbGlzdC5jOiBJbml0aWFsIHJldmlzaW9uLgorLQorLVR1ZSBBcHIgIDIgMTg6NTE6MTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsLWdldHRleHQpOiBOZXcgZ29hbC4gIFNhbWUgYXMgYWxsLXllcy4KKy0KKy1UaHUgTWFyIDI4IDIzOjAxOjIyIDE5OTYgIEthcmwgRWljaHdhbGRlciAgPGtlQGtlLmNlbnRyYWwuZGU+CistCistCSogTWFrZWZpbGUuaW4gKGdldHRleHRzcmNkaXIpOiBEZWZpbmUgdXNpbmcgQGRhdGFkaXJALgorLQorLVR1ZSBNYXIgMjYgMTI6Mzk6MTQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEluY2x1ZGUgPGN0eXBlLmg+LiAgUmVwb3J0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCistCistU2F0IE1hciAyMyAwMjowMDozNSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoc3RwY3B5KTogUmVuYW1lIHRvIHN0cGNweV9fIHRvIHByZXZlbnQgY2xhc2hpbmcKKy0gICAgICAgIHdpdGggZXh0ZXJuYWwgZGVjbGFyYXRpb24uCistCistU2F0IE1hciAgMiAwMDo0NzowOSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChhbGwtbm8pOiBSZW5hbWUgZnJvbSBhbGxfbm8uCistCistU2F0IEZlYiAxNyAwMDoyNTo1OSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGdldHRleHRQLmggW2xvYWRlZF9kb21haW5dOiBBcnJheSBgc3VjY2Vzc29yJyBtdXN0IG5vdyBjb250YWluIHVwCistICAgICAgICB0byA2MyBlbGVtZW50cyAoYmVjYXVzZSBvZiBjb2Rlc2V0IG5hbWUgbm9ybWFsaXphdGlvbikuCistCistCSogZmluZGRvbWFpbi5jOiBJbXBsZW1lbnQgY29kZXNldCBuYW1lIG5vcm1hbGl6YXRpb24uCistCistVGh1IEZlYiAxNSAwNDozOTowOSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChhbGwpOiBEZWZpbmUgdG8gYGFsbC1AVVNFX05MU0AnLgorLQkoYWxsLXllcywgYWxsX25vKTogTmV3IGdvYWxzLiAgYGFsbC1ubycgaXMgbm9vcCwgYGFsbC15ZXMnCistCWlzIGZvcm1lciBhbGwuCistCistTW9uIEphbiAxNSAyMTo0NjowMSAxOTk2ICBIb3dhcmQgR2F5bGUgIDxob3dhcmRAaGFsLmNvbT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChhbGlhc19jb21wYXJlKTogSW5jcmVtZW50IHN0cmluZyBwb2ludGVycyBpbiBsb29wCistICAgICAgICBvZiBzdHJjYXNlY21wIHJlcGxhY2VtZW50LgorLQorLUZyaSBEZWMgMjkgMjE6MTY6MzQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOiBXaG8gY29tbWVudGVkIHRoaXMgZ29hbCBvdXQgPyA6LSkKKy0KKy1GcmkgRGVjIDI5IDE1OjA4OjE2IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IFNhdmUgYGVycm5vJy4gIEZhaWxpbmcgc3lzdGVtIGNhbGxzCistCXNob3VsZCBub3QgZWZmZWN0IGl0IGJlY2F1c2UgYSBtaXNzaW5nIGNhdGFsb2cgaXMgbm8gZXJyb3IuCistCVJlcG9ydGVkIGJ5IEhhcmFsZCBLPG86Pm5pZyA8a29lbmlnQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZT4uCistCistVHVlIERlYyAxOSAyMjowOToxMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSk6IEV4cGxpY2l0bHkgdXNlICQoU0hFTEwpIGZvciBydW5uaW5nCistICAgICAgICBzaGVsbCBzY3JpcHRzLgorLQorLUZyaSBEZWMgMTUgMTc6MzQ6NTkgMTk5NSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKTogT25seSBpbnN0YWxsIGxpYnJhcnkgYW5kIGhlYWRlciB3aGVuCistCXdlIHVzZSB0aGUgb3duIGltcGxlbWVudGF0aW9uLiAgRG9uJ3QgZG8gaXQgd2hlbiB1c2luZyB0aGUKKy0Jc3lzdGVtJ3MgZ2V0dGV4dCBvciBjYXRnZXRzIGZ1bmN0aW9ucy4KKy0KKy0JKiBkY2dldHRleHQuYyAoZmluZF9tc2cpOiBNdXN0IG5vdCBzd2FwIGRvbWFpbi0+aGFzaF9zaXplIGhlcmUuCistCistU2F0IERlYyAgOSAxNjoyNDozNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMsIGxpYmludGwuaW5zdCwgbGliZ2V0dGV4dC5oLCBoYXNoLXN0cmluZy5oLAorLQlnZXR0ZXh0UC5oLCBmaW5kZG9tYWluLmMsIGRjZ2V0dGV4dC5jLCBjYXQtY29tcGF0LmM6CistCVVzZSBQQVJBTVMgaW5zdGVhZCBvZiBfX1AuICBTdWdnZXN0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCistCistVHVlIERlYyAgNSAxMTozOToxNCAxOTk1ICBMYXJyeSBTY2h3aW1tZXIgIDxyb3NlYnVkQGN5Y2xvbmUuc3RhbmZvcmQuZWR1PgorLQorLQkqIGxpYmdldHRleHQuaDogVXNlIGAjaWYgIWRlZmluZWQgKF9MSUJJTlRMX0gpJyBpbnN0ZWFkIG9mIGAjaWYKKy0JIV9MSUJJTlRMX0gnIGJlY2F1c2UgU29sYXJpcyBkZWZpbmVzIF9MSUJJTlRMX0ggYXMgZW1wdHkuCistCistTW9uIERlYyAgNCAxNTo0MjowNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6CistCUluc3RhbGwgbGliaW50bC5pbnN0IGluc3RlYWQgb2YgbGliaW50bC5oLmluc3RhbGwuCistCistU2F0IERlYyAgMiAyMjo1MTozOCAxOTk1ICBNYXJjdXMgRGFuaWVscyAgPG1hcmN1c0BzeXNjLnBkeC5lZHU+CistCistCSogY2F0LWNvbXBhdC5jICh0ZXh0ZG9tYWluKToKKy0JUmV2ZXJzZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcmUgdHJpZWQgeW91IGxvYWQuICBGaXJzdAorLQl0cnkgbG9jYWwgZmlsZSwgd2hlbiB0aGlzIGZhaWxlZCBhYnNvbHV0ZSBwYXRoLgorLQorLVdlZCBOb3YgMjkgMDI6MDM6NTMgMTk5NSAgTmVsc29uIEguIEYuIEJlZWJlICA8YmVlYmVAbWF0aC51dGFoLmVkdT4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKGJpbmR0ZXh0ZG9tYWluKTogQWRkIG1pc3NpbmcgeyB9LgorLQorLVN1biBOb3YgMjYgMTg6MjE6NDEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJpbnRsLmluc3Q6IEFkZCBtaXNzaW5nIF9fUCBkZWZpbml0aW9uLiAgUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgorLQorLQkqIE1ha2VmaWxlLmluOgorLQlBZGQgZHVtbXkgYGFsbCcgYW5kIGBkdmknIGdvYWxzLiAgUmVwb3J0ZWQgYnkgVG9tIFRyb21leS4KKy0KKy1TYXQgTm92IDI1IDE2OjEyOjAxIDE5OTUgIEZyYW5jLG9pcyBQaW5hcmQgIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4KKy0KKy0JKiBoYXNoLXN0cmluZy5oOiBDYXBpdGFsaXplIGFyZ3VtZW50cyBvZiBtYWNyb3MuCistCistU2F0IE5vdiAyNSAxMjowMTozNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBQcmV2ZW50IGZpbGVzIG5hbWVzIGxvbmdlciB0aGFuIDEzCistCWNoYXJhY3RlcnMuICBsaWJpbnRsLmguZ2xpYmMtPmxpYmludGwuZ2xpYmMsCistCWxpYmludGwuaC5pbnN0YWxsLT5saWJpbnRsLmluc3QuICBSZXBvcnRlZCBieSBKb3NodWEgUi4gUG91bHNvbi4KKy0KKy1TYXQgTm92IDI1IDExOjMxOjEyIDE5OTUgIEVyaWMgQmFja3VzICA8ZXJpY2JAbHNpZC5ocC5jb20+CistCistCSogZGNnZXR0ZXh0LmM6IEZpeCBidWcgaW4gcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscy4KKy0KKy1TYXQgTm92IDI1IDAyOjM1OjI3IDE5OTUgIE5lbHNvbiBILiBGLiBCZWViZSAgPGJlZWJlQG1hdGgudXRhaC5lZHU+CistCistCSogbGliZ2V0dGV4dC5oOiBTb2xhcmlzIGNjIGRvZXMgbm90IHVuZGVyc3RhbmQKKy0JICNpZiAhU1lNQk9MMSAmJiAhU1lNQk9MMi4gIFNhZAlidXQgdHJ1ZS4KKy0KKy1UaHUgTm92IDIzIDE2OjIyOjE0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogaGFzaC1zdHJpbmcuaCAoaGFzaF9zdHJpbmcpOgorLQlGaXggZm9yIG1hY2hpbmUgd2l0aCA+MzIgYml0IGB1bnNpZ25lZCBsb25nJ3MuCistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6CistCUZpeCBob3JyaWJsZSBidWcgaW4gbG9vcCBmb3IgYWx0ZXJuYXRpdmUgdHJhbnNsYXRpb24uCistCistVGh1IE5vdiAyMyAwMTo0NToyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHBvMnRibC5zZWQuaW4sIGxpbnV4LW1zZy5zZWQsIHhvcGVuLW1zZy5zZWQ6CistCVNvbWUgZnVydGhlciBzaW1wbGlmaWNhdGlvbnMgaW4gbWVzc2FnZSBudW1iZXIgZ2VuZXJhdGlvbi4KKy0KKy1Nb24gTm92IDIwIDIxOjA4OjQzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliaW50bC5oLmdsaWJjOiBVc2UgX19jb25zdCBpbnN0ZWFkIG9mIGNvbnN0IGluIHByb3RvdHlwZXMuCistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKToKKy0JSW5zdGFsbCBsaWJpbnRsLmguaW5zdGFsbCBpbnN0ZWFkIG9mIGxpYmludGwuaC4gIFRoaXMKKy0JaXMgYSBzdHJpcHBlZC1kb3duIHZlcnNpb24uICBTdWdnZXN0ZWQgYnkgUGV0ZXIgTWlsbGVyLgorLQorLQkqIGxpYmludGwuaC5pbnN0YWxsLCBsaWJpbnRsLmguZ2xpYmM6IEluaXRpYWwgcmV2aXNpb24uCistCistCSogbG9jYWxlYWxpYXMuYyAoX25sX2V4cGFuZF9hbGlhcywgcmVhZF9hbGlhc19maWxlKToKKy0JUHJvdGVjdCBwcm90b3R5cGVzIGluIHR5cGUgY2FzdHMgYnkgX19QLgorLQorLVR1ZSBOb3YgMTQgMTY6NDM6NTggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBoYXNoLXN0cmluZy5oOiBDb3JyZWN0IHByb3RvdHlwZSBmb3IgaGFzaF9zdHJpbmcuCistCistU3VuIE5vdiAxMiAxMjo0MjozMCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGhhc2gtc3RyaW5nLmggKGhhc2hfc3RyaW5nKTogQWRkIHByb3RvdHlwZS4KKy0KKy0JKiBnZXR0ZXh0UC5oOiBGaXggY29weXJpZ2h0LgorLQkoU1dBUCk6IEFkZCBwcm90b3R5cGUuCistCistV2VkIE5vdiAgOCAyMjo1NjozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6IEZvcmdvdCBzaXplb2YuCistCUF2b2lkIGNhbGxpbmcgKnByaW50ZiBmdW5jdGlvbi4gIFRoaXMgaW50cm9kdWNlcyBhIGJpZyBvdmVyaGVhZC4KKy0JUGF0Y2ggYnkgUm9sYW5kIE1jR3JhdGguCistCistVHVlIE5vdiAgNyAxNDoyMTowOCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYywgY2F0LWNvbXBhdC5jOiBXcm9uZyBpbmRlbnRhdGlvbiBpbiAjaWYgZm9yIHN0cGNweS4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6CistCURlZmluZSBzdWJzdGl0dXRpb24gZnVuY3Rpb24gbG9jYWwuICBUaGUgbWFjcm8gd2FzIHRvIGZsYWt5LgorLQorLQkqIGNhdC1jb21wYXQuYzogRml4IHR5cG8uCistCistCSogeG9wZW4tbXNnLnNlZCwgbGludXgtbXNnLnNlZDoKKy0JV2hpbGUgYnJpbmdpbmcgbWVzc2FnZSBudW1iZXIgdG8gcmlnaHQgcGxhY2Ugb25seSBhY2NlcHQgZGlnaXRzLgorLQorLQkqIGxpbnV4LW1zZy5zZWQsIHhvcGVuLW1zZy5zZWQ6IE5vdyB0aGF0IHRoZSBjb3VudGVyIGRvZXMgbm90IGhhdmUKKy0JbGVhZGluZyAwcyB3ZSBkb24ndCBuZWVkIHRvIHJlbW92ZSB0aGVtLiAgUmVwb3J0ZWQgYnkgTWFyY3VzCistCURhbmllbHMuCistCistCSogTWFrZWZpbGUuaW4gKC4uL3BvL2NhdC1pZC10Ymwubyk6IFVzZSAkKHRvcF9zcmRpcikgaW4KKy0JZGVwZW5kZW5jeS4gIFJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGNhdC1jb21wYXQuYzogKHN0cGNweSkgWyFfTElCQyAmJiAhSEFWRV9TVFBDUFldOiBEZWZpbmUgcmVwbGFjZW1lbnQuCistCUdlbmVyYWxseSBjbGVhbnVwIHVzaW5nICNpZiBpbnN0ZWFkIG9mICNpZm5kZWYuCistCistCSogTWFrZWZpbGUuaW46IENvcnJlY3QgdHlwb3MgaW4gY29tbWVudC4gIEJ5IEZyYW5jLG9pcyBQaW5hcmQuCistCistTW9uIE5vdiAgNiAwMDoyNzowMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IERvbid0IGluc3RhbGwgbGliaW50bC5oIGFuZCBsaWJpbnRsLmEKKy0JaWYgd2UgdXNlIGFuIGF2YWlsYWJsZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLgorLQorLVN1biBOb3YgIDUgMjI6MDI6MDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IEZpeCB0eXBvOiBIQVZFX0NBVEdFVFRTIC0+IEhBVkVfQ0FUR0VUUy4gIFJlcG9ydGVkCistCWJ5IEZyYW5jLG9pcyBQaW5hcmQuCistCistCSogbGliZ2V0dGV4dC5oOiBVc2UgI2lmIGluc3RlYWQgb2YgI2lmZGVmLyNpZm5kZWYuCistCistCSogZmluZGRvbWFpbi5jOgorLQlDb21tZW50cyBkZXNjcmliaW5nIHdoYXQgaGFzIHRvIGJlIGRvbmUgc2hvdWxkIHN0YXJ0IHdpdGggRklYTUUuCistCistU3VuIE5vdiAgNSAxOTozODowMSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBTcGxpdC4gIFVzZSBESVNURklMRVMgd2l0aCBub3JtYWwgbWVhbmluZy4KKy0JRElTVEZJTEVTLmNvbW1vbiBuYW1lcyB0aGUgZmlsZXMgY29tbW9uIHRvIGJvdGggZGlzdCBnb2Fscy4KKy0JRElTVEZJTEVTLmdldHRleHQgYXJlIHRoZSBmaWxlcyBvbmx5IGRpc3RyaWJ1dGVkIGluIEdOVSBnZXR0ZXh0LgorLQorLVN1biBOb3YgIDUgMTc6MzI6NTQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBkY2dldHRleHQuYyAoRENHRVRURVhUKTogQ29ycmVjdCBzZWFyY2hpbmcgaW4gZGVyaXZlZCBsb2NhbGVzLgorLQlUaGlzIHdhcyBuZWNlc3Nhcnkgc2luY2UgYSBjaGFuZ2UgaW4gX25sX2ZpbmRfbXNnIHNldmVyYWwgd2Vla3MKKy0JYWdvLiAgSSByZWFsbHkgZG9uJ3Qga25vdyB0aGlzIGlzIHN0aWxsIG5vdCBmaXhlZC4KKy0KKy1TdW4gTm92ICA1IDEyOjQzOjEyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOiBUZXN0IGZvciBGSUxFTkFNRSA9PSBOVUxMLiAgVGhpcworLQltaWdodCBtYXJrIGEgc3BlY2lhbCBjb25kaXRpb24uCistCistCSogZmluZGRvbWFpbi5jIChtYWtlX2VudHJ5X3JlYyk6IERvbid0IG1ha2UgaWxsZWdhbCBlbnRyeSBhcyBkZWNpZGVkLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0KTogU3VwcHJlc3MgZXJyb3IgbWVzc2FnZSB3aGVuIGxuIGZhaWxlZC4KKy0JR2V0IGZpbGVzIGZyb20gJChzcmNkaXIpIGV4cGxpY2l0bHkuCistCistCSogbGliZ2V0dGV4dC5oIChnZXR0ZXh0X2NvbnN0KTogUmVuYW1lIHRvIGdldHRleHRfbm9vcC4KKy0KKy1GcmkgTm92ICAzIDA3OjM2OjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jIChtYWtlX2VudHJ5X3JlYyk6CistCVByb3RlY3QgYWdhaW5zdCB3cm9uZyBsb2NhbGUgbmFtZXMgYnkgdGVzdGluZyBtYXNrLgorLQorLQkqIGxpYmdldHRleHQuaCAoZ2V0dGV4dF9jb25zdCk6IEFkZCBtYWNybyBkZWZpbml0aW9uLgorLQlDYXBpdGFsaXplIG1hY3JvIGFyZ3VtZW50cy4KKy0KKy1UaHUgTm92ICAyIDIzOjE1OjUxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlUZXN0IGZvciBwb2ludGVyICE9IE5VTEwgYmVmb3JlIGFjY2Vzc2luZyB2YWx1ZS4KKy0JUmVwb3J0ZWQgYnkgVG9tIFRyb21leS4KKy0KKy0JKiBnZXR0ZXh0LmMgKE5VTEwpOgorLQlEZWZpbmUgYXMgKHZvaWQqKTAgaW5zdGFkIG9mIDAuICBSZXBvcnRlZCBieSBGcmFuYyxvaXMgUGluYXJkLgorLQorLU1vbiBPY3QgMzAgMjE6Mjg6NTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluOiBTZXJpb3VzIHR5cG8gYnVnIGZpeGVkIGJ5IEppbSBNZXllcmluZy4KKy0KKy1TYXQgT2N0IDI4IDIzOjIwOjQ3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliZ2V0dGV4dC5oOiBEaXNhYmxlIGRjZ2V0dGV4dCBvcHRpbWl6YXRpb24gZm9yIFNvbGFyaXMgMi4zLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKGFsaWFzX2NvbXBhcmUpOgorLQlQZXRlciBNaWxsZXIgcmVwb3J0ZWQgdGhhdCB0b2xvd2VyIGluIHNvbWUgc3lzdGVtcyBpcworLQlldmVuIGR1bWJlciB0aGFuIEkgdGhvdWdodC4gIFByb3RlY3QgY2FsbCBieSBgaXN1cHBlcicuCistCistRnJpIE9jdCAyNyAyMjoyMjo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChsaWJkaXIsIGluY2x1ZGVkaXIpOiBOZXcgdmFyaWFibGVzLgorLQkoaW5zdGFsbC1zcmMpOiBJbnN0YWxsIGxpYmludGwuYSBhbmQgbGliaW50bC5oIGluIGNvcnJlY3QgZGlycy4KKy0KKy1GcmkgT2N0IDI3IDIyOjA3OjI5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKFNPVVJDRVMpOiBGaXggdHlwbzogaW50cmwuY29tcGF0LmMgLT4gaW50bC1jb21wYXQuYy4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluOiBQYXRjaCBmb3IgYnVnZ3kgU0VEcyBieSBDaHJpc3RpYW4gdm9uIFJvcXVlcy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jOgorLQlGaXggdHlwbyBhbmQgc3VwZXJmbG91cyB0ZXN0LiAgUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMuCistCistRnJpIE9jdCAgNiAxMTo1MjowNSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JQ29ycmVjdCBzb21lIHJlbWFpbmRlciBmcm9tIHRoZSBwcmUtQ0VOIHN5bnRheC4gIE5vdworLQl3ZSBkb24ndCBoYXZlIGEgY29uc3RhbnQgbnVtYmVyIG9mIHN1Y2Nlc3NvcnMgYW55bW9yZS4KKy0KKy1XZWQgU2VwIDI3IDIxOjQxOjEzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IEFkZCBsaWJpbnRsLmguZ2xpYmMuCistCistCSogTWFrZWZpbGUuaW4gKGRpc3QtbGliYyk6IEFkZCBnb2FsIGZvciBwYWNraW5nIHNvdXJjZXMgZm9yIGdsaWJjLgorLQkoQ09NU1JDUywgQ09NSERSUyk6IFNwbGl0dGVkIHRvIHNlcGFyYXRlIHNvdXJjZXMgc2hhcmVkIHdpdGggZ2xpYmMuCistCistCSogbG9hZG1zZ2NhdC5jOiBGb3JnZXQgdG8gY29udGludWUgI2lmIGxpbmUuCistCistCSogbG9jYWxlYWxpYXMuYzoKKy0JW19MSUJDXTogUmVuYW1lIHN0cmNhc2VjbXAgdG8gX19zdHJjYXNlY21wIHRvIGtlZXAgQU5TSSBDIG5hbWUKKy0Jc3BhY2UgY2xlYW4uCistCistCSogZGNnZXR0ZXh0LmMsIGZpbmRkb21haW4uYzogQmV0dGVyIGNvbW1lbnQgdG8gbGFzdCBjaGFuZ2UuCistCistCSogbG9hZG1zZ2NhdC5jOgorLQlbX0xJQkNdOiBSZW5hbWUgZnN0YXQsIG9wZW4sIGNsb3NlLCByZWFkLCBtbWFwLCBhbmQgbXVubWFwIHRvCistCV9fZnN0YXQsIF9fb3BlbiwgX19jbG9zZSwgX19yZWFkLCBfX21tYXAsIGFuZCBfX211bm1hcCByZXNwCistCXRvIGtlZXAgQU5TSSBDIG5hbWUgc3BhY2UgY2xlYW4uCistCistCSogZmluZGRvbWFpbi5jOgorLQlbX0xJQkNdOiBSZW5hbWUgc3RwY3B5IHRvIF9fc3RwY3B5IHRvIGtlZXAgQU5TSSBDIG5hbWUgc3BhY2UgY2xlYW4uCistCistCSogZGNnZXR0ZXh0LmM6CistCVtfTElCQ106IFJlbmFtZSBnZXRjZWQgYW5kIHN0cGNweSB0byBfX2dldGN3ZCBhbmQgX19zdHBjcHkgcmVzcCB0bworLQlrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGxpYmdldHRleHQuaDoKKy0JSW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgdGhvc2Ugb2xkIFN5c1Ygc3lzdGVtcyBvdXQgdGhlcmUuCistCVJlcG9ydGVkIGJ5IEZyYW5jZXNjbyBQb3RvcnRpYC4KKy0KKy0JKiBsb2FkbXNnY2F0LmMgKHVzZV9tbWFwKTogRGVmaW5lIGlmIGNvbXBpbGVkIGZvciBnbGliYy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOiBJbmNsdWRlIGFsbCB0aG9zZSBzdGFuZGFyZCBoZWFkZXJzCistCXVuY29uZGl0aW9uYWxseSBpZiBfTElCQyBpcyBkZWZpbmVkLgorLQorLQkqIGZpbmRkb21haW4uYzogRml4IDIgdGltZXMgZGVmaWVuZCAtPiBkZWZpbmVkLgorLQorLQkqIHRleHRkb21haW4uYzogSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbgorLQljb21waWxpbmcgZm9yIGdsaWJjLiAgSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBsb2FkbXNnY2F0LmM6IFByZXBhcmUgdG8gYmUgY29tcGlsZWQgaW4gZ2xpYmMuCistCistCSogZ2V0dGV4dC5jOgorLQlJbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mIGxpYmdldHRleHQuaCB3aGVuIGNvbXBpbGluZyBmb3IgZ2xpYmMuCistCUdldCBOVUxMIGZyb20gc3RkZGVmLmggaWYgd2UgY29tcGlsZSBmb3IgZ2xpYmMuCistCistCSogZmluZGRvbWFpbi5jOiBJbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mIGxpYmdldHRleHQuaCB3aGVuCistCWNvbXBpbGluZyBmb3IgZ2xpYmMuICBJbmNsdWRlIGFsbCB0aG9zZSBzdGFuZGFyZCBoZWFkZXJzCistCXVuY29uZGl0aW9uYWxseSBpZiBfTElCQyBpcyBkZWZpbmVkLgorLQorLQkqIGRjZ2V0dGV4dC5jOiBJbmNsdWRlIGFsbCB0aG9zZSBzdGFuZGFyZCBoZWFkZXJzIHVuY29uZGl0aW9uYWxseQorLQlpZiBfTElCQyBpcyBkZWZpbmVkLgorLQorLQkqIGRnZXR0ZXh0LmM6IElmIGNvbXBpbGVkIGluIGdsaWJjIGluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YKKy0JbGliZ2V0dGV4dC5oLgorLQkobG9jYWxlLmgpOiBEb24ndCByZWx5IG9uIEhBVkVfTE9DQUxFX0ggd2hlbiBjb21waWxpbmcgZm9yIGdsaWJjLgorLQorLQkqIGRjZ2V0dGV4dC5jOiBJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mCistCWxpYmdldHRleHQuaC4KKy0JKGdldGN3ZCk6IERvbid0IHJlbHkgb24gSEFWRV9HRVRDV0Qgd2hlbiBjb21waWxpbmcgZm9yIGdsaWJjLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6CistCUlmIGNvbXBpbGVkIGluIGdsaWJjIGluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oLgorLQorLU1vbiBTZXAgMjUgMjI6MjM6MDYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChfbmxfZXhwYW5kX2FsaWFzKTogRG9uJ3QgY2FsbCBic2VhcmNoIGlmIE5NQVAgPD0gMC4KKy0JUmVwb3J0ZWQgYnkgTWFyY3VzIERhbmllbHMuCistCistCSogY2F0LWNvbXBhdC5jIChiaW5kdGV4dGRvbWFpbik6CistCVN0cmluZyB1c2VkIGluIHB1dGVudiBtdXN0IG5vdCBiZSByZWN5Y2xlZC4KKy0JUmVwb3J0ZWQgYnkgTWFyY3VzIERhbmllbHMuCistCistCSogbGliZ2V0dGV4dC5oIChfX1VTRV9HTlVfR0VUVEVYVCk6CistCUFkZGl0aW9uYWwgc3ltYm9sIHRvIHNpZ25hbCB0aGF0IHdlIHVzZSBHTlUgZ2V0dGV4dAorLQlsaWJyYXJ5LgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlGaXggYnVnIHdpdGggdGhlIHN0cmFuZ2Ugc3RwY3B5IHJlcGxhY2VtZW50LgorLQlSZXBvcnRlZCBieSBOZWxzb24gQmVlYmUuCistCistU2F0IFNlcCAyMyAwODoyMzo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGNhdC1jb21wYXQuYzogSW5jbHVkZSA8c3RyaW5nLmg+IGZvciBzdHBjcHkgcHJvdG90eXBlLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6CistCVdoaWxlIGV4cGFuZCBzdHJkdXAgY29kZSB0ZW1wb3JhcnkgdmFyaWFibGUgYGNwJyBoaWRlZAorLQloaWdoZXIgbGV2ZWwgdmFyaWFibGUgd2l0aCBzYW1lIG5hbWUuICBSZW5hbWUgdG8gYHRwJy4KKy0KKy0JKiB0ZXh0ZG9tYWluLmMgKHRleHRkb21haW4pOgorLQlBdm9pZCB3YXJuaW5nIGJ5IHVzaW5nIHRlbXBvcmFyeSB2YXJpYWJsZSBpbiBzdHJkdXAgY29kZS4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGFwcGxpY2F0aW9uJy4KKy0KKy1UaHUgU2VwIDIxIDE1OjUxOjQ0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYyAoYWxpYXNfY29tcGFyZSk6CistCVVzZSBzdHJjYXNlY21wKCkgb25seSBpZiBhdmFpbGFibGUuICBFbHNlIHVzZQorLQlpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZS4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jOgorLQlXcmFwcGVyIGZ1bmN0aW9ucyBub3cgY2FsbCAqX18gZnVuY3Rpb25zIGluc3RlYWQgb2YgX18qLgorLQorLQkqIGxpYmdldHRleHQuaDogRGVjbGFyZSBwcm90b3R5cGVzIGZvciAqX18gZnVuY3Rpb25zIGluc3RlYWQgZm9yIF9fKi4KKy0KKy0JKiBjYXQtY29tcGF0LmMsIGxvYWRtc2djYXQuYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOgorLQlEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKKy0Jb2YgdGhlIHN0YW5kYXJkIGxpYmMgYW5kIHNvIHByZXZlbnQgbGliaW50bC5hIGZyb20gYmVpbmcgdXNlZAorLQlzdGFuZGFsb25lLgorLQlSZW5hbWUgdG8gYmluZHRleHRkb21haW5fXyBpZiBub3QgdXNlZCBpbiBHTlUgQyBMaWJyYXJ5LgorLQorLQkqIGRnZXR0ZXh0LmM6CistCVJlbmFtZSBmdW5jdGlvbiB0byBkZ2V0dGV4dF9fIGlmIG5vdCB1c2VkIGluIEdOVSBDIExpYnJhcnkuCistCistCSogZ2V0dGV4dC5jOgorLQlEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKKy0Jb2YgdGhlIHN0YW5kYXJkIGxpYmMgYW5kIHNvIHByZXZlbnQgbGliaW50bC5hIGZyb20gYmVpbmcgdXNlZAorLQlzdGFuZGFsb25lLgorLQlGdW5jdGlvbnMgbm93IGNhbGxlZCBnZXR0ZXh0X18gaWYgbm90IHVzZWQgaW4gR05VIEMgTGlicmFyeS4KKy0KKy0JKiBkY2dldHRleHQuYywgbG9jYWxlYWxpYXMuYywgdGV4dGRvbWFpbi5jLCBmaW5kZG9tYWluLmM6CistCURvbid0IHVzZSB4bWFsbG9jLCB4c3RyZHVwLCBhbmQgc3RwY3B5LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydAorLQlvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCistCXN0YW5kYWxvbmUuCistCistU3VuIFNlcCAxNyAyMzoxNDo0OSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYzogQ29ycmVjdCBzb21lIGJ1Z3MgaW4gaGFuZGxpbmcgb2YgQ0VOIHN0YW5kYXJkCistIAlsb2NhbGUgZGVmaW5pdGlvbnMuCistCistVGh1IFNlcCAgNyAwMTo0OToyOCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYzogSW1wbGVtZW50IENFTiBzeW50YXguCistCistCSogZ2V0dGV4dFAuaCAobG9hZGVkX2RvbWFpbik6IEV4dGVuZCBudW1iZXIgb2Ygc3VjY2Vzc29ycyB0byAzMS4KKy0KKy1TYXQgQXVnIDE5IDE5OjI1OjI5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGFsaWFzcGF0aCk6IFJlbW92ZSBwYXRoIHRvIFgxMSBsb2NhbGUgZGlyLgorLQorLQkqIE1ha2VmaWxlLmluOiBNYWtlIGluc3RhbGwtc3JjIGRlcGVuZCBvbiBpbnN0YWxsLiAgVGhpcyBoZWxwcworLSAJZ2V0dGV4dCB0byBpbnN0YWxsIHRoZSBzb3VyY2VzIGFuZCBvdGhlciBwYWNrYWdlcyBjYW4gdXNlIHRoZQorLSAJaW5zdGFsbCBnb2FsLgorLQorLVNhdCBBdWcgMTkgMTU6MTk6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogUmVtb3ZlIHN0dWZmIGluc3RhbGxlZCBieSBpbnN0YWxsLXNyYy4KKy0KKy1UdWUgQXVnIDE1IDEzOjEzOjUzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogVkVSU0lPTi5pbjogSW5pdGlhbCByZXZpc2lvbi4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKToKKy0JQWRkIFZFUlNJT04gZmlsZS4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZ2V0dGV4dCwgYnV0CistCWZvciBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGlzIGxpYnJhcnkuCistCistVHVlIEF1ZyAxNSAwNjoxNjo0NCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGdldHRleHRQLmggKF9ubF9maW5kX2RvbWFpbik6CistCU5ldyBwcm90b3R5cGUgYWZ0ZXIgY2hhbmdpbmcgc2VhcmNoIHN0cmF0ZWd5LgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JV2Ugbm93IHRyeSBvbmx5IHRvIGZpbmQgYSBzcGVjaWZpZWQgY2F0YWxvZy4gIEZhbGwgYmFjayB0byBvdGhlcgorLQljYXRhbG9ncyBsaXN0ZWQgaW4gdGhlIGxvY2FsZSBsaXN0IGlzIG5vdyBkb25lIGluIF9fZGNnZXR0ZXh0LgorLQorLQkqIGRjZ2V0dGV4dC5jIChfX2RjZ2V0dGV4dCk6CistCU5vdyB3ZSBwcm92aWRlIG1lc3NhZ2UgZmFsbCBiYWNrIGV2ZW4gdG8gZGlmZmVyZW50IGxhbmd1YWdlcy4KKy0JSS5lLiBpZiBhIG1lc3NhZ2UgaXMgbm90IGF2YWlsYWJsZSBpbiBvbmUgbGFuZ3VhZ2UgYWxsIHRoZSBvdGhlcgorLSAJaW4gdGhlIGxvY2FsZSBsaXN0IGEgdHJpZWQuICBGb3JtZXJseSBmYWxsIGJhY2sgd2FzIG9ubHkgcG9zc2libGUKKy0gCXdpdGhpbiBvbmUgbGFuZ3VhZ2UuICBJbXBsZW1lbnRlZCBieSBtb3Zpbmcgb25lIGxvb3AgZnJvbQorLSAJX25sX2ZpbmRfZG9tYWluIHRvIGhlcmUuCistCistTW9uIEF1ZyAxNCAyMzo0NTo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKToKKy0JRGlyZWN0b3J5IHdoZXJlIHNvdXJjZSBvZiBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGFyZSBtYWRlCistCWF2YWlsYWJsZS4KKy0JKElOU1RBTEwsIElOU1RBTExfREFUQSk6IFByb2dyYW1zIHVzZWQgZm9yIGluc3RhbGxpbmcgc291cmNlcy4KKy0JKGdldHRleHQtc3JjKTogTmV3LiAgUnVsZSB0byBpbnN0YWxsIEdOVSBnZXR0ZXh0IHNvdXJjZXMgZm9yIHVzZSBpbgorLQlnZXR0ZXh0aXplIHNoZWxsIHNjcmlwdC4KKy0KKy1TdW4gQXVnIDEzIDE0OjQwOjQ4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOgorLQlVc2UgbW1hcCBmb3IgbG9hZGluZyBvbmx5IHdoZW4gbXVubWFwIGZ1bmN0aW9uIGlzCistCWFsc28gYXZhaWxhYmxlLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogRGVwZW5kIG9uIGBhbGwnIGdvYWwuCistCistV2VkIEF1ZyAgOSAxMTowNDozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6CistCURvIG5vdCBvdmVyd3JpdGUgJ1xuJyB3aGVuIHRlcm1pbmF0aW5nIGFsaWFzIHZhbHVlIHN0cmluZy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlIYW5kbGUgbG9uZyBsaW5lcy4gIElnbm9yZSB0aGUgcmVzdCBub3QgZml0dGluZyBpbgorLQl0aGUgYnVmZmVyIGFmdGVyIHRoZSBpbml0aWFsIGBmZ2V0cycgY2FsbC4KKy0KKy1XZWQgQXVnICA5IDAwOjU0OjI5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZ2V0dGV4dFAuaCAoX25sX2xvYWRfZG9tYWluKToKKy0JQWRkIHByb3RvdHlwZSwgcmVwbGFjaW5nIHByb3RvdHlwZSBmb3IgX25sX2xvYWRfbXNnX2NhdC4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCVJlbW92ZSB1bm5lZWRlZCB2YXJpYWJsZSBmaWxlbmFtZSBhbmQgZmlsZW5hbWVfbGVuLgorLQkoZXhwYW5kX2FsaWFzKTogUmVtb3ZlIHByb3RvdHlwZSBiZWNhdXNlIGZ1bmN0aW9ucyBkb2VzIG5vdAorLSAJZXhpc3QgYW55bW9yZS4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlDaGFuZ2UgdHlwZSBvZiBmbmFtZV9sZW4gcGFyYW1ldGVyIHRvIGludC4KKy0JKHhtYWxsb2MpOiBBZGQgcHJvdG90eXBlLgorLQorLQkqIGxvYWRtc2djYXQuYzogQmV0dGVyIHByb3RvdHlwZXMgZm9yIHhtYWxsb2MuCistCistVHVlIEF1ZyAgOCAyMjozMDozOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JQWxsb3cgYWxpYXMgbmFtZSB0byBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBmb3VyIGNvbXBvbmVudHMuCistCistCSogTWFrZWZpbGUuaW4gKGFsaWFzcGF0aCk6IE5ldyB2YXJpYWJsZS4gIFNldCB0byBwcmVsaW1pbmFyeSB2YWx1ZS4KKy0JKFNPVVJDRVMpOiBBZGQgbG9jYWxlYWxpYXMuYy4KKy0JKE9CSkVDVFMpOiBBZGQgbG9jYWxlYWxpYXMuby4KKy0KKy0JKiBnZXR0ZXh0UC5oOiBBZGQgcHJvdG90eXBlIGZvciBfbmxfZXhwYW5kX2FsaWFzLgorLQorLQkqIGZpbmRkb21haW4uYzogQWxpYXNpbmcgaGFuZGxlZCBpbiBpbnRsL2xvY2FsZWFsaWFzLmMuCistCistCSogbG9jYWxlYWxpYXMuYzogQWxpYXNpbmcgZm9yIGxvY2FsZSBuYW1lcy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOiBCZXR0ZXIgcHJvdG90eXBlcyBmb3IgeG1hbGxvYyBhbmQgeHN0cmR1cC4KKy0KKy1Nb24gQXVnICA3IDIzOjQ3OjQyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IGdldHRleHQucGVybCBpcyBub3cgZm91bmQgaW4gbWlzYy8uCistCistCSogY2F0LWNvbXBhdC5jIChiaW5kdGV4dGRvbWFpbik6CistCUNvcnJlY3QgaW1wbGVtZW50YXRpb24uICBkaXJuYW1lIHBhcmFtZXRlciB3YXMgbm90IHVzZWQuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGdldHRleHRQLmggKGxvYWRlZF9kb21haW4pOgorLQlOZXcgZmllbGRzIGBzdWNjZXNzb3InIGFuZCBgZGVjaWRlZCcgZm9yIG9vLCBsYXp5CistCW1lc3NhZ2UgaGFuZGxpbmcgaW1wbGVtZW50YXRpb24uCistCistCSogZGNnZXR0ZXh0LmM6CistCUFkb3B0IGZvciBvbywgbGF6eSBtZXNzYWdlIGhhbmRsaWluZy4KKy0gIAlOb3cgd2UgY2FuIGluaGVyaXQgdHJhbnNsYXRpb25zIGZyb20gbGVzcyBzcGVjaWZpYyBsb2NhbGVzLgorLQkoZmluZF9tc2cpOiBOZXcgZnVuY3Rpb24uCistCistCSogbG9hZG1zZ2NhdC5jLCBmaW5kZG9tYWluLmM6CistCUNvbXBsZXRlIHJld3JpdGUuICBJbXBsZW1lbnQgb28sIGxhenkgbWVzc2FnZSBoYW5kbGluZyA6LSkuCistICAJV2Ugbm93IGhhdmUgYW4gYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBgTEFOR1VBR0UnIHdpdGgKKy0gCWEgaGlnaGVyIHByaW9yaXR5IHRoYW4gTENfQUxMIGZvciB0aGUgTENfTUVTU0FHRSBsb2NhbGUuCistICAJSGVyZSB3ZSBjYW4gc2V0IGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2Ygc3BlY2lmaWNhdGlvbnMgZWFjaAorLSAJb2YgdGhlIGZvcm0gYGxhbmd1YWdlW190ZXJyaXRvcnlbLmNvZGVzZXRdXVtAbW9kaWZpZXJdJy4KKy0KKy1TYXQgQXVnICA1IDA5OjU1OjQyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jICh1bmlzdGQuaCk6CistCUluY2x1ZGUgdG8gZ2V0IF9QQ19QQVRIX01BWCBkZWZpbmVkIG9uIHN5c3RlbSBoYXZpbmcgaXQuCistCistRnJpIEF1ZyAgNCAyMjo0MjowMCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoc3RwY3B5KTogSW5jbHVkZSBwcm90b3R5cGUuCistCistCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBSZW1vdmUgYGNvcHlpbmcgaW5zdGVhZCcgbWVzc2FnZS4KKy0KKy1XZWQgQXVnICAyIDE4OjUyOjAzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKElELCBUQUdTKTogRG8gbm90IHVzZSAkXi4KKy0KKy1UdWUgQXVnICAxIDIwOjA3OjExIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKFRBR1MsIElEKTogVXNlICReIGFzIGNvbW1hbmQgYXJndW1lbnQuCistCShUQUdTKTogR2l2ZSBldGFncyAtbyBvcHRpb24gdCB3cml0ZSB0byBjdXJyZW50IGRpcmVjdG9yeSwKKy0gCW5vdCAkKHNyY2RpcikuCistCShJRCk6IFVzZSAkKHNyY2RpcikgaW5zdGVhZCBvcyAkKHRvcF9zcmNkaXIpL3NyYy4KKy0JKGRpc3RjbGVhbik6IFJlbW92ZSBJRC4KKy0KKy1TdW4gSnVsIDMwIDExOjUxOjQ2IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGdudWxvY2FsZWRpcik6CistCU5ldyB2YXJpYWJsZSwgYWx3YXlzIHVzaW5nIHNoYXJlLyBmb3IgZGF0YSBkaXJlY3RvcnkuCistCShERUZTKTogQWRkIEdOVUxPQ0FMRURJUiwgdXNlZCBpbiBmaW5kZG9tYWluLmMuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZGVmYXVsdF9kaXJuYW1lKToKKy0JU2V0IHRvIEdOVUxPQ0FMRURJUiwgYmVjYXVzZSBpdCBhbHdheXMgaGFzIHRvIHBvaW50CistCXRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgR05VIGdldHRleHQgTGlicmFyeSB3cml0ZXMgaXQgdG8uCistCistCSogaW50bC1jb21wYXQuYyAodGV4dGRvbWFpbiwgYmluZHRleHRkb21haW4pOgorLQlVbmRlZmluZSBtYWNyb3MgYmVmb3JlIGZ1bmN0aW9uIGRlZmluaXRpb24uCistCistU2F0IEp1bCAyMiAwMToxMDowMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmdldHRleHQuaCAoX0xJQklOVExfSCk6CistCVByb3RlY3QgZGVmaW5pdGlvbiBpbiBjYXNlIHdoZXJlIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBhcworLQlsaWJnZXR0ZXh0Lmggb24gU29sYXJpcyBtYWNoaW5lcy4gIEFkZCBjb21tZW50IGFib3V0IHRoaXMuCistCistV2VkIEp1bCAxOSAwMjozNjo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGludGwtY29tcGF0LmMgKHRleHRkb21haW4pOiBDb3JyZWN0IHR5cG8uCistCistV2VkIEp1bCAxOSAwMTo1MTozNSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGRjZ2V0dGV4dC5jIChkY2dldHRleHQpOiBGdW5jdGlvbiBub3cgY2FsbGVkIF9fZGNnZXR0ZXh0LgorLQorLQkqIGRnZXR0ZXh0LmMgKGRnZXR0ZXh0KTogTm93IGNhbGxlZCBfX2RnZXR0ZXh0IGFuZCBjYWxscworLSAJX19kY2dldHRleHQuCistCistCSogZ2V0dGV4dC5jIChnZXR0ZXh0KToKKy0JRnVuY3Rpb24gbm93IGNhbGxlZCBfX2dldHRleHQgYW5kIGNhbGxzIF9fZGdldHRleHQuCistCistCSogdGV4dGRvbWFpbi5jICh0ZXh0ZG9tYWluKTogRnVuY3Rpb24gbm93IGNhbGxlZCBfX3RleHRkb21haW4uCistCistCSogYmluZHRleHRkb20uYyAoYmluZHRleHRkb21haW4pOiBGdW5jdGlvbiBub3cgY2FsbGVkCistIAlfX2JpbmR0ZXh0ZG9tYWluLgorLQorLQkqIGludGwtY29tcGF0LmM6IEluaXRpYWwgcmV2aXNpb24uCistCistCSogTWFrZWZpbGUuaW4gKFNPVVJDRVMpOiBBZGQgaW50bC1jb21wYXQuYy4KKy0JKE9CSkVDVFMpOiBXZSBhbHdheXMgY29tcGlsZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBmdW5jdGlvbnMuCistICAJT0JKRUNUUyBjb250YWlucyBhbGwgb2JqZWN0cyBidXQgY2F0LWNvbXBhdC5vLCAuLi9wby9jYXQtaWYtdGJsLm8sCistIAlhbmQgaW50bC1jb21wYXQuby4KKy0gIAkoR0VUVE9CSlMpOiBDb250YWlucyBub3cgb25seSBpbnRsLWNvbXBhdC5vLgorLQorLQkqIGxpYmdldHRleHQuaDoKKy0JUmUtaW5jbHVkZSBwcm90ZWN0aW9uIG1hdGNoZXMgZHVhbGlzdGljIGNoYXJhY3RlciBvZiBsaWJnZXR0ZXh0LmguCistCUZvciBhbGwgZnVuY3Rpb25zIGluIEdOVSBnZXR0ZXh0IGxpYnJhcnkgZGVmaW5lIF9fIGNvdW50ZXIgcGFydC4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cmNocik6IERlZmluZSBhcyBpbmRleCBpZiBub3QgZm91bmQgaW4gQyBsaWJyYXJ5LgorLQkoX25sX2ZpbmRfZG9tYWluKTogRm9yIHJlbGF0aXZlIHBhdGhzIHBhc3RlIC8gaW4gYmV0d2Vlbi4KKy0KKy1UdWUgSnVsIDE4IDE2OjM3OjQ1IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9hZG1zZ2NhdC5jLCBmaW5kZG9tYWluLmM6IEFkZCBpbmNsdXNpb24gb2Ygc3lzL3R5cGVzLmguCistCistCSogeG9wZW4tbXNnLnNlZDogRml4IGJ1ZyB3aXRoIGBtc2dzdHIgIiInIGxpbmVzLgorLQlBIGxpdHRsZSBiaXQgYmV0dGVyIGNvbW1lbnRzLgorLQorLVR1ZSBKdWwgMTggMDE6MTg6MjcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JcG8tbW9kZS5lbCwgbWFrZWxpbmtzLCBjb21iaW5lLXNoIGFyZSBub3cgZm91bmQgaW4gLi4vbWlzYy4KKy0KKy0JKiBwby1tb2RlLmVsLCBtYWtlbGlua3MsIGNvbWJpbmUtc2gsIGVsaXNwLWNvbXA6CistCU1vdmVkIHRvIC4uL21pc2MvLgorLQorLQkqIGxpYmdldHRleHQuaCwgZ2V0dGV4dFAuaCwgZ2V0dGV4dC5oOiBVbmlmb3JtIHRlc3QgZm9yIF9fU1REQ19fLgorLQorLVN1biBKdWwgMTYgMjI6MzM6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoSU5TVEFMTCwgSU5TVEFMTF9EQVRBKTogTmV3IHZhcmlhYmxlcy4KKy0JKGluc3RhbGwtZGF0YSwgdW5pbnN0YWxsKTogSW5zdGFsbC91bmluc3RhbGwgLmVsYyBmaWxlLgorLQorLQkqIHBvLW1vZGUuZWwgKEluc3RhbGxhdGlvbiBjb21tZW50KToKKy0JQWRkIC5wb3ggYXMgcG9zc2libGUgZXh0ZW5zaW9uIG9mIC5wbyBmaWxlcy4KKy0KKy1TdW4gSnVsIDE2IDEzOjIzOjI3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZWxpc3AtY29tcDogQ29tcGxldGUgbmV3IHZlcnNpb24gYnkgRnJhbmMsb2lzOiBUaGlzIGRvZXMgbm90CistIAlmYWlsIHdoZW4gbm90IGNvbXBpbGluZyBpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KKy0KKy1TdW4gSnVsIDE2IDAwOjEyOjE3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKC4uL3BvL2NhdC1pZC10Ymwubyk6CistCVVzZSAkKE1BS0UpIGluc3RlYWQgb2YgbWFrZSBmb3IgcmVjdXJzaXZlIG1ha2UuCistCistCSogTWFrZWZpbGUuaW4gKC5lbC5lbGMpOiBVc2UgJChTSEVMTCkgaW5zdGVhZCBvZiAvYmluL3NoLgorLQkoaW5zdGFsbC1leGVjKTogQWRkIG1pc3NpbmcgZHVtbXkgZ29hbC4KKy0JKGluc3RhbGwtZGF0YSwgdW5pbnN0YWxsKTogQCBpbiBtdWx0aS1saW5lIHNoZWxsIGNvbW1hbmQgYXQKKy0gCWJlZ2lubmluZywgbm90IGluIGZyb250IG9mIGVjaG8uICBSZXBvcnRlZCBieSBFcmljIEJhY2t1cy4KKy0KKy1TYXQgSnVsIDE1IDAwOjIxOjI4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6CistCVJlbmFtZSBsaWJnZXR0ZXh0LnBlcmwgdG8gZ2V0dGV4dC5wZXJsIHRvIGZpdCBpbiAxNCBjaGFycworLQlmaWxlIHN5c3RlbXMuCistCistCSogZ2V0dGV4dC5wZXJsOgorLSAJUmVuYW1lIHRvIGdldHRleHQucGVybCB0byBmaXQgaW4gMTQgY2hhcnMgZmlsZSBzeXN0ZW1zLgorLQorLVRodSBKdWwgMTMgMjM6MTc6MjAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IElmICFTVERDX0hFQURFUlMgdHJ5IHRvIGluY2x1ZGUgbWFsbG9jLmguCistCistVGh1IEp1bCAxMyAyMDo1NTowMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHBvMnRibC5zZWQuaW46IFByZXR0eSBwcmludGluZy4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOgorLQlDb3JyZWN0IGJ1Z3Mgd2l0aCBoYW5kbGluZyBzdWJzdGl0dXRlIGZsYWdzIGluIGJyYW5jaGVzLgorLQorLQkqIGhhc2gtc3RyaW5nLmggKGhhc2hfc3RyaW5nKToKKy0JT2xkIEsmUiBjb21waWxlcnMgZG9uJ3QgdW5kZXIgc3RhbmQgYHVuc2lnbmVkIGNoYXInLgorLQorLQkqIGdldHRleHQuaCAobmxzX3VpbnQzMik6CistCVNvbWUgb2xkIEsmUiBjb21waWxlcnMgKGVnIEhQKSBkb24ndCB1bmRlcnN0YW5kIGB1bnNpZ25lZCBpbnQnLgorLQorLQkqIGNhdC1jb21wYXQuYyAobXNnX3RvX2NhdF9pZCk6IERlLUFOU0ktZnkgcHJvdG90eXBlcy4KKy0KKy1UaHUgSnVsIDEzIDAxOjM0OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKEVMQ0ZJTEVTKTogTmV3IHZhcmlhYmxlLgorLQkoRElTVEZJTEVTKTogQWRkIGVsaXNwLWNvbXAuCistCUFkZCBpbXBsaWNpdCBydWxlIGZvciAuZWwgLT4gLmVsYyBjb21waWxhdGlvbi4KKy0JKGluc3RhbGwtZGF0YSk6IGluc3RhbGwgJEVMQ0ZJTEVTCistCShjbGVhbik6IHJlbmFtZWQgcG8tdG8tdGJsIGFuZCBwby10by1tc2cgdG8gcG8ydGJsIGFuZCBwbzJtc2cgcmVzcC4KKy0KKy0JKiBlbGlzcC1jb21wOiBJbml0aWFsIHJldmlzaW9uCistCistV2VkIEp1bCAxMiAxNjoxNDo1MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluOgorLQljYXQtaWQtdGJsLmMgaXMgbm93IGZvdW5kIGluIHBvLy4gIFRoaXMgZW5hYmxlcyB1cyB0byB1c2UgYW4gaWRlbnRpY2FsCistCWludGwvIGRpcmVjdG9yeSBpbiBhbGwgcGFja2FnZXMuCistCistCSogZGNnZXR0ZXh0LmMgKGRjZ2V0dGV4dCk6IGhhc2hpbmcgZG9lcyBub3Qgd29yayBmb3IgdGFibGUgc2l6ZSA8PSAyLgorLQorLQkqIHRleHRkb21haW4uYzogZml4IHR5cG8gKCNpZiBkZWYgLT4gI2lmIGRlZmluZWQpCistCistVHVlIEp1bCAxMSAxODo0NDo0MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChzdGFtcC1jYXQtaWQpOiB1c2UgdG9wX3NyY2RpciB0byBhZGRyZXNzIHNvdXJjZSBmaWxlcworLQkoRElTVEZJTEVTLGRpc3RjbGVhbik6IG1vdmUgdHVwZGF0ZS5wZXJsIHRvIHNyYy8KKy0KKy0JKiBwby10by10Ymwuc2VkLmluOgorLQlhZGQgYWRkaXRpb25hbCBqdW1wIHRvIGNsZWFyIGNoYW5nZSBmbGFnIHRvIHJlY29nbml6ZSBtdWx0aWxpbmUgc3RyaW5ncworLQorLVR1ZSBKdWwgMTEgMDE6MzI6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IFByb3RlY3QgaW5jbHVzaW9uIG9mIHN0ZGxpYi5oIGFuZCBzdHJpbmcuaC4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IFByb3RlY3QgaW5jbHVzaW9uIG9mIHN0ZGxpYi5oLgorLQorLQkqIGxpYmdldHRleHQuaDogUHJvdGVjdCBpbmNsdXNpb24gb2YgbG9jYWxlLmguCistCUFsbG93IHVzZSBpbiBDKysgcHJvZ3JhbXMuCistCURlZmluZSBOVUxMIGlzIG5vdCBoYXBwZW5lZCBhbHJlYWR5LgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBzaGlwIHBvLXRvLXRibC5zZWQuaW4gaW5zdGVhZCBvZgorLQlwby10by10Ymwuc2VkLgorLQkoZGlzdGNsZWFuKTogcmVtb3ZlIHBvLXRvLXRibC5zZWQgYW5kIHR1cGRhdGUucGVybC4KKy0KKy0JKiB0dXBkYXRlLnBlcmwuaW46IFN1YnN0aXR1dGUgUGVybCBwYXRoIGV2ZW4gaW4gZXhlYyBsaW5lLgorLQlEb24ndCBpbmNsdWRlIGVudHJpZXMgd2l0aG91dCB0cmFuc2xhdGlvbiBmcm9tIG9sZCAucG8gZmlsZS4KKy0KKy1UdWUgSnVsICA0IDAwOjQxOjUxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdHVwZGF0ZS5wZXJsLmluOiB1c2UgIlVwZGF0ZWQ6ICIgaW4gbXNnaWQgIiIuCistCistCSogY2F0LWNvbXBhdC5jOiBGaXggdHlwbyAoTE9DQUxESVIgLT4gTE9DQUxFRElSKS4KKy0gCURlZmluZSBnZXRlbnYgaWYgIV9fU1REQ19fLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6IFByb3RlY3Qgc3RkbGliLmggYW5kIHN0cmluZy5oIGluY2x1c2lvbi4KKy0gCURlZmluZSBmcmVlIGlmICFfX1NURENfXy4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IENoYW5nZSBERUZfTVNHX0RPTV9ESVIgdG8gTE9DQUxFRElSLgorLSAJRGVmaW5lIGZyZWUgaWYgIV9fU1REQ19fLgorLQorLQkqIGNhdC1jb21wYXQuYzogQ2hhbmdlIERFRl9NU0dfRE9NX0RJUiB0byBMT0NBTEVESVIuCistCistTW9uIEp1bCAgMyAyMzo1NjozMCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluOiBVc2UgTE9DQUxFRElSIGluc3RlYWQgb2YgREVGX01TR19ET01fRElSLgorLQlSZW1vdmUgdW5uZWVkZWQgJChzcmNkaXIpIGZyb20gTWFrZWZpbGUuaW4gZGVwZW5kZW5jeS4KKy0KKy0JKiBtYWtlbGlua3M6IEFkZCBjb3B5cmlnaHQgYW5kIHNob3J0IGRlc2NyaXB0aW9uLgorLQorLQkqIHBvLW1vZGUuZWw6IExhc3QgdmVyc2lvbiBmb3IgMC43LgorLQorLQkqIHR1cGRhdGUucGVybC5pbjogRml4IGRpZSBtZXNzYWdlLgorLQorLQkqIGRjZ2V0dGV4dC5jOiBQcm90ZWN0IGluY2x1ZGUgb2Ygc3RyaW5nLmguCistCistCSogZ2V0dGV4dC5jOiBQcm90ZWN0IGluY2x1ZGUgb2Ygc3RkbGliLmggYW5kIGZ1cnRoZXIgdHJpZXMgdG8gZ2V0IE5VTEwuCistCistCSogZmluZGRvbWFpbi5jOiBTb21lIGNvcnJlY3Rpb25zIGluIGluY2x1ZGVzLgorLQorLQkqIE1ha2VmaWxlLmluIChJTkNMVURFUyk6IFBydW5lIGxpc3QgY29ycmVjdCBwYXRoIHRvIE1ha2VmaWxlLmluLgorLQorLQkqIHBvLXRvLXRibC5zZWQ6IEFkb3B0IGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgorLQorLQkqIGxpbnV4LW1zZy5zZWQsIHhvcGVuLW1zZy5zZWQ6IEFkb3B0IGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgorLQorLVN1biBKdWwgIDIgMjM6NTU6MDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiB0dXBkYXRlLnBlcmwuaW46IENvbXBsZXRlIHJld3JpdGUgZm9yIG5ldyAucG8gZmlsZSBmb3JtYXQuCisrMjAwNC0wMS0yOSAgR05VICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisgCistU3VuIEp1bCAgMiAwMjowNjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorKwkqIFZlcnNpb24gMC4xNC4xIHJlbGVhc2VkLgorIAorLQkqIEZpcnN0IG9mZmljaWFsIHJlbGVhc2UuICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhbGwgdGhlIGNvZGUKKy0JbmVlZGVkIHRvIGludGVybmF0aW9uYWxpemUgb3duIHBhY2thZ2VzLiAgSXQgcHJvdmlkZXMgZnVuY3Rpb25zCistCXdoaWNoIGFsbG93IHRvIHVzZSB0aGUgWC9PcGVuIGNhdGdldHMgZnVuY3Rpb24gd2l0aCBhbiBpbnRlcmZhY2UKKy0JbGlrZSB0aGUgVW5pZm9ydW0gZ2V0dGV4dCBmdW5jdGlvbi4gIEZvciBzeXN0ZW0gd2hpY2ggZG9lcyBub3QKKy0JaGF2ZSBuZWl0aGVyIG9mIHRob3NlIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQuCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvY29uZmlnLmNoYXJzZXQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvY29uZmlnLmNoYXJzZXQJMjAwNC0wOS0xMiAxNDo0MDozNC4zNTQ3NDgyNDAgLTA0MDAKK0BAIC0wLDAgKzEsNjA4IEBACisrIyEgL2Jpbi9zaAorKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCB0YWJsZSBvZiBjaGFyYWN0ZXIgZW5jb2RpbmcgYWxpYXNlcy4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysjICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjICAgVVNBLgorKyMKKysjIFRoZSB0YWJsZSBjb25zaXN0cyBvZiBsaW5lcyBvZiB0aGUgZm9ybQorKyMgICAgQUxJQVMgIENBTk9OSUNBTAorKyMKKysjIEFMSUFTIGlzIHRoZSAoc3lzdGVtIGRlcGVuZGVudCkgcmVzdWx0IG9mICJubF9sYW5naW5mbyAoQ09ERVNFVCkiLgorKyMgQUxJQVMgaXMgY29tcGFyZWQgaW4gYSBjYXNlIHNlbnNpdGl2ZSB3YXkuCisrIworKyMgQ0FOT05JQ0FMIGlzIHRoZSBHTlUgY2Fub25pY2FsIG5hbWUgZm9yIHRoaXMgY2hhcmFjdGVyIGVuY29kaW5nLgorKyMgSXQgbXVzdCBiZSBhbiBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgbGliaWNvbnYuIFN1cHBvcnQgYnkgR05VIGxpYmMgaXMKKysjIGFsc28gZGVzaXJhYmxlLiBDQU5PTklDQUwgaXMgY2FzZSBpbnNlbnNpdGl2ZS4gVXN1YWxseSBhbiB1cHBlciBjYXNlCisrIyBNSU1FIGNoYXJzZXQgbmFtZSBpcyBwcmVmZXJyZWQuCisrIyBUaGUgY3VycmVudCBsaXN0IG9mIEdOVSBjYW5vbmljYWwgY2hhcnNldCBuYW1lcyBpcyBhcyBmb2xsb3dzLgorKyMKKysjICAgICAgIG5hbWUgICAgICAgICAgICAgIE1JTUU/ICAgICAgICAgICAgIHVzZWQgYnkgd2hpY2ggc3lzdGVtcworKyMgICBBU0NJSSwgQU5TSV9YMy40LTE5NjggICAgICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBJU08tODg1OS0xICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBJU08tODg1OS0yICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBJU08tODg1OS0zICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcworKyMgICBJU08tODg1OS00ICAgICAgICAgICAgICBZICAgb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktNSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktNiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IHNvbGFyaXMKKysjICAgSVNPLTg4NTktNyAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMKKysjICAgSVNPLTg4NTktOCAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCisrIyAgIElTTy04ODU5LTkgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisrIyAgIElTTy04ODU5LTEzICAgICAgICAgICAgICAgICBnbGliYworKyMgICBJU08tODg1OS0xNCAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgSVNPLTg4NTktMTUgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyBmcmVlYnNkCisrIyAgIEtPSTgtUiAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIEtPSTgtVSAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBmcmVlYnNkIGRhcndpbgorKyMgICBLT0k4LVQgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgQ1A0MzcgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDc3NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODUwICAgICAgICAgICAgICAgICAgICAgICBhaXggb3NmIGRvcworKyMgICBDUDg1MiAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODU1ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NTYgICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDg1NyAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODYxICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjIgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2NCAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODY1ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjYgICAgICAgICAgICAgICAgICAgICAgIGZyZWVic2QgZGFyd2luIGRvcworKyMgICBDUDg2OSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODc0ICAgICAgICAgICAgICAgICAgICAgICB3b2UzMiBkb3MKKysjICAgQ1A5MjIgICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDkzMiAgICAgICAgICAgICAgICAgICAgICAgYWl4IHdvZTMyIGRvcworKyMgICBDUDk0MyAgICAgICAgICAgICAgICAgICAgICAgYWl4CisrIyAgIENQOTQ5ICAgICAgICAgICAgICAgICAgICAgICBvc2Ygd29lMzIgZG9zCisrIyAgIENQOTUwICAgICAgICAgICAgICAgICAgICAgICB3b2UzMiBkb3MKKysjICAgQ1AxMDQ2ICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDExMjQgICAgICAgICAgICAgICAgICAgICAgYWl4CisrIyAgIENQMTEyNSAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1AxMTI5ICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDEyNTAgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgQ1AxMjUxICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgZGFyd2luIHdvZTMyCisrIyAgIENQMTI1MiAgICAgICAgICAgICAgICAgICAgICBhaXggd29lMzIKKysjICAgQ1AxMjUzICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIENQMTI1NCAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTUgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgd29lMzIKKysjICAgQ1AxMjU2ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIENQMTI1NyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBHQjIzMTIgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIEVVQy1KUCAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIEVVQy1LUiAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIEVVQy1UVyAgICAgICAgICAgICAgICAgICAgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisrIyAgIEJJRzUgICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBCSUc1LUhLU0NTICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcworKyMgICBHQksgICAgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IG9zZiBzb2xhcmlzIHdvZTMyIGRvcworKyMgICBHQjE4MDMwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcworKyMgICBTSElGVF9KSVMgICAgICAgICAgICAgICBZICAgaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBKT0hBQiAgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyB3b2UzMgorKyMgICBUSVMtNjIwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKysjICAgVklTQ0lJICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjCisrIyAgIFRDVk41NzEyLTEgICAgICAgICAgICAgICAgICBnbGliYworKyMgICBHRU9SR0lBTi1QUyAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgSFAtUk9NQU44ICAgICAgICAgICAgICAgICAgIGhwdXgKKysjICAgSFAtQVJBQklDOCAgICAgICAgICAgICAgICAgIGhwdXgKKysjICAgSFAtR1JFRUs4ICAgICAgICAgICAgICAgICAgIGhwdXgKKysjICAgSFAtSEVCUkVXOCAgICAgICAgICAgICAgICAgIGhwdXgKKysjICAgSFAtVFVSS0lTSDggICAgICAgICAgICAgICAgIGhwdXgKKysjICAgSFAtS0FOQTggICAgICAgICAgICAgICAgICAgIGhwdXgKKysjICAgREVDLUtBTkpJICAgICAgICAgICAgICAgICAgIG9zZgorKyMgICBERUMtSEFOWVUgICAgICAgICAgICAgICAgICAgb3NmCisrIyAgIFVURi04ICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworKyMKKysjIE5vdGU6IE5hbWVzIHdoaWNoIGFyZSBub3QgbWFya2VkIGFzIGJlaW5nIGEgTUlNRSBuYW1lIHNob3VsZCBub3QgYmUgdXNlZCBpbgorKyMgSW50ZXJuZXQgcHJvdG9jb2xzIGZvciBpbmZvcm1hdGlvbiBpbnRlcmNoYW5nZSAobWFpbCwgbmV3cywgZXRjLikuCisrIworKyMgTm90ZTogQVNDSUkgYW5kIEFOU0lfWDMuNC0xOTY4IGFyZSBzeW5vbnltb3VzIGNhbm9uaWNhbCBuYW1lcy4gQXBwbGljYXRpb25zCisrIyBtdXN0IHVuZGVyc3RhbmQgYm90aCBuYW1lcyBhbmQgdHJlYXQgdGhlbSBhcyBlcXVpdmFsZW50LgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKysjIG9yCisrIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKysKKytob3N0PSIkMSIKKytvcz1gZWNobyAiJGhvc3QiIHwgc2VkIC1lICdzL15bXi1dKi1bXi1dKi1cKC4qXCkkL1wxLydgCisrZWNobyAiIyBUaGlzIGZpbGUgY29udGFpbnMgYSB0YWJsZSBvZiBjaGFyYWN0ZXIgZW5jb2RpbmcgYWxpYXNlcywiCisrZWNobyAiIyBzdWl0YWJsZSBmb3Igb3BlcmF0aW5nIHN5c3RlbSAnJHtvc30nLiIKKytlY2hvICIjIEl0IHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbmZpZy5jaGFyc2V0LiIKKysjIExpc3Qgb2YgcmVmZXJlbmNlcywgdXBkYXRlZCBkdXJpbmcgaW5zdGFsbGF0aW9uOgorK2VjaG8gIiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAiCisrY2FzZSAiJG9zIiBpbgorKyAgICBsaW51eC1nbnVsaWJjMSopCisrCSMgTGludXggbGliYzUgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwllY2hvICJDIEFTQ0lJIgorKwllY2hvICJQT1NJWCBBU0NJSSIKKysJZm9yIGwgaW4gYWYgYWZfWkEgY2EgY2FfRVMgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgXAorKwkgICAgICAgICBlbiBlbl9BVSBlbl9CVyBlbl9DQSBlbl9ESyBlbl9HQiBlbl9JRSBlbl9OWiBlbl9VUyBlbl9aQSBcCisrCSAgICAgICAgIGVuX1pXIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIFwKKysJICAgICAgICAgZXNfSE4gZXNfTVggZXNfUEEgZXNfUEUgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgXAorKwkgICAgICAgICBldF9FRSBldSBldV9FUyBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBcCisrCSAgICAgICAgIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGlkIGlkX0lEIGluIGluX0lEIGlzIGlzX0lTIGl0IGl0X0NIIFwKKysJICAgICAgICAgaXRfSVQga2wga2xfR0wgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gcHQgcHRfQlIgcHRfUFQgc3YgXAorKwkgICAgICAgICBzdl9GSSBzdl9TRTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5pc28tODg1OS0xNSBJU08tODg1OS0xNSIKKysJICBlY2hvICIkbC5pc28tODg1OS0xNUBldXJvIElTTy04ODU5LTE1IgorKwkgIGVjaG8gIiRsQGV1cm8gSVNPLTg4NTktMTUiCisrCSAgZWNobyAiJGwuY3AtNDM3IENQNDM3IgorKwkgIGVjaG8gIiRsLmNwLTg1MCBDUDg1MCIKKysJICBlY2hvICIkbC5jcC0xMjUyIENQMTI1MiIKKysJICBlY2hvICIkbC5jcC0xMjUyQGV1cm8gQ1AxMjUyIgorKwkgICNlY2hvICIkbC5hdGFyaS1zdCBBVEFSSS1TVCIgIyBub3QgYSBjb21tb25seSB1c2VkIGVuY29kaW5nCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCSAgZWNobyAiJGwudXRmLThAZXVybyBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBjcyBjc19DWiBociBocl9IUiBodSBodV9IVSBwbCBwbF9QTCBybyByb19STyBzayBza19TSyBzbCBcCisrCSAgICAgICAgIHNsX1NJIHNyIHNyX0NTIHNyX1lVOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTIiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMiBJU08tODg1OS0yIgorKwkgIGVjaG8gIiRsLmNwLTg1MiBDUDg1MiIKKysJICBlY2hvICIkbC5jcC0xMjUwIENQMTI1MCIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBtayBta19NSyBydSBydV9SVTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS01IgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTUgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5rb2k4LXIgS09JOC1SIgorKwkgIGVjaG8gIiRsLmNwLTg2NiBDUDg2NiIKKysJICBlY2hvICIkbC5jcC0xMjUxIENQMTI1MSIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBhciBhcl9TQTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS02IgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTYgSVNPLTg4NTktNiIKKysJICBlY2hvICIkbC5jcC04NjQgQ1A4NjQiCisrCSAgI2VjaG8gIiRsLmNwLTg2OCBDUDg2OCIgIyBub3QgYSBjb21tb25seSB1c2VkIGVuY29kaW5nCisrCSAgZWNobyAiJGwuY3AtMTI1NiBDUDEyNTYiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gZWwgZWxfR1IgZ3IgZ3JfR1I7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNyIKKysJICBlY2hvICIkbC5pc28tODg1OS03IElTTy04ODU5LTciCisrCSAgZWNobyAiJGwuY3AtODY5IENQODY5IgorKwkgIGVjaG8gIiRsLmNwLTEyNTMgQ1AxMjUzIgorKwkgIGVjaG8gIiRsLmNwLTEyNTNAZXVybyBDUDEyNTMiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCSAgZWNobyAiJGwudXRmLThAZXVybyBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBoZSBoZV9JTCBpdyBpd19JTDsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS04IgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTggSVNPLTg4NTktOCIKKysJICBlY2hvICIkbC5jcC04NjIgQ1A4NjIiCisrCSAgZWNobyAiJGwuY3AtMTI1NSBDUDEyNTUiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gdHIgdHJfVFI7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktOSIKKysJICBlY2hvICIkbC5pc28tODg1OS05IElTTy04ODU5LTkiCisrCSAgZWNobyAiJGwuY3AtODU3IENQODU3IgorKwkgIGVjaG8gIiRsLmNwLTEyNTQgQ1AxMjU0IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGx0IGx0X0xUIGx2IGx2X0xWOyBkbworKwkgICNlY2hvICIkbCBCQUxUSUMiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorKwkgIGVjaG8gIiRsIElTTy04ODU5LTEzIgorKwlkb25lCisrCWZvciBsIGluIHJ1X1VBIHVrIHVrX1VBOyBkbworKwkgIGVjaG8gIiRsIEtPSTgtVSIKKysJZG9uZQorKwlmb3IgbCBpbiB6aCB6aF9DTjsgZG8KKysJICAjZWNobyAiJGwgR0JfMjMxMi04MCIgIyBub3QgYSBjb21tb25seSB1c2VkIGVuY29kaW5nLCB3cm9uZyBlbmNvZGluZyBuYW1lCisrCSAgZWNobyAiJGwgR0IyMzEyIgorKwlkb25lCisrCWZvciBsIGluIGphIGphX0pQIGphX0pQLkVVQzsgZG8KKysJICBlY2hvICIkbCBFVUMtSlAiCisrCWRvbmUKKysJZm9yIGwgaW4ga28ga29fS1I7IGRvCisrCSAgZWNobyAiJGwgRVVDLUtSIgorKwlkb25lCisrCWZvciBsIGluIHRoIHRoX1RIOyBkbworKwkgIGVjaG8gIiRsIFRJUy02MjAiCisrCWRvbmUKKysJZm9yIGwgaW4gZmEgZmFfSVI7IGRvCisrCSAgI2VjaG8gIiRsIElTSVJJLTMzNDIiICMgYSBicm9rZW4gZW5jb2RpbmcKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwk7OworKyAgICBsaW51eCogfCAqLWdudSopCisrCSMgV2l0aCBnbGliYy0yLjEgb3IgbmV3ZXIsIHdlIGRvbid0IG5lZWQgYW55IGNhbm9uaWNhbGl6YXRpb24sCisrCSMgYmVjYXVzZSBnbGliYyBoYXMgaWNvbnYgYW5kIGJvdGggZ2xpYmMgYW5kIGxpYmljb252IHN1cHBvcnQgYWxsCisrCSMgR05VIGNhbm9uaWNhbCBuYW1lcyBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGUgTWFrZWZpbGUgZG9lcyBub3QKKysJIyBuZWVkIHRvIGluc3RhbGwgdGhlIGFsaWFzIGZpbGUgYXQgYWxsLgorKwkjIFRoZSBmb2xsb3dpbmcgYXBwbGllcyBvbmx5IHRvIGdsaWJjLTIuMC54IGFuZCBvbGRlciBsaWJjcy4KKysJZWNobyAiSVNPXzY0Ni5JUlY6MTk4MyBBU0NJSSIKKysJOzsKKysgICAgYWl4KikKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS02IElTTy04ODU5LTYiCisrCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorKwllY2hvICJJU084ODU5LTggSVNPLTg4NTktOCIKKysJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisrCWVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWVjaG8gIklCTS04NTAgQ1A4NTAiCisrCWVjaG8gIklCTS04NTYgQ1A4NTYiCisrCWVjaG8gIklCTS05MjEgSVNPLTg4NTktMTMiCisrCWVjaG8gIklCTS05MjIgQ1A5MjIiCisrCWVjaG8gIklCTS05MzIgQ1A5MzIiCisrCWVjaG8gIklCTS05NDMgQ1A5NDMiCisrCWVjaG8gIklCTS0xMDQ2IENQMTA0NiIKKysJZWNobyAiSUJNLTExMjQgQ1AxMTI0IgorKwllY2hvICJJQk0tMTEyOSBDUDExMjkiCisrCWVjaG8gIklCTS0xMjUyIENQMTI1MiIKKysJZWNobyAiSUJNLWV1Y0NOIEdCMjMxMiIKKysJZWNobyAiSUJNLWV1Y0pQIEVVQy1KUCIKKysJZWNobyAiSUJNLWV1Y0tSIEVVQy1LUiIKKysJZWNobyAiSUJNLWV1Y1RXIEVVQy1UVyIKKysJZWNobyAiYmlnNSBCSUc1IgorKwllY2hvICJHQksgR0JLIgorKwllY2hvICJUSVMtNjIwIFRJUy02MjAiCisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBocHV4KikKKysJZWNobyAiaXNvODg1OTEgSVNPLTg4NTktMSIKKysJZWNobyAiaXNvODg1OTIgSVNPLTg4NTktMiIKKysJZWNobyAiaXNvODg1OTUgSVNPLTg4NTktNSIKKysJZWNobyAiaXNvODg1OTYgSVNPLTg4NTktNiIKKysJZWNobyAiaXNvODg1OTcgSVNPLTg4NTktNyIKKysJZWNobyAiaXNvODg1OTggSVNPLTg4NTktOCIKKysJZWNobyAiaXNvODg1OTkgSVNPLTg4NTktOSIKKysJZWNobyAiaXNvODg1OTE1IElTTy04ODU5LTE1IgorKwllY2hvICJyb21hbjggSFAtUk9NQU44IgorKwllY2hvICJhcmFiaWM4IEhQLUFSQUJJQzgiCisrCWVjaG8gImdyZWVrOCBIUC1HUkVFSzgiCisrCWVjaG8gImhlYnJldzggSFAtSEVCUkVXOCIKKysJZWNobyAidHVya2lzaDggSFAtVFVSS0lTSDgiCisrCWVjaG8gImthbmE4IEhQLUtBTkE4IgorKwllY2hvICJ0aXM2MjAgVElTLTYyMCIKKysJZWNobyAiYmlnNSBCSUc1IgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJocDE1Q04gR0IyMzEyIgorKwkjZWNobyAiY2NkYyA/IiAjIHdoYXQgaXMgdGhpcz8KKysJZWNobyAiU0pJUyBTSElGVF9KSVMiCisrCWVjaG8gInV0ZjggVVRGLTgiCisrCTs7CisrICAgIGlyaXgqKQorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisrCWVjaG8gImV1Y0NOIEdCMjMxMiIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJldWNLUiBFVUMtS1IiCisrCWVjaG8gImV1Y1RXIEVVQy1UVyIKKysJOzsKKysgICAgb3NmKikKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorKwllY2hvICJJU084ODU5LTggSVNPLTg4NTktOCIKKysJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisrCWVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWVjaG8gImNwODUwIENQODUwIgorKwllY2hvICJiaWc1IEJJRzUiCisrCWVjaG8gImRlY2hhbnl1IERFQy1IQU5ZVSIKKysJZWNobyAiZGVjaGFuemkgR0IyMzEyIgorKwllY2hvICJkZWNrYW5qaSBERUMtS0FOSkkiCisrCWVjaG8gImRlY2tvcmVhbiBFVUMtS1IiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiZXVjS1IgRVVDLUtSIgorKwllY2hvICJldWNUVyBFVUMtVFciCisrCWVjaG8gIkdCSyBHQksiCisrCWVjaG8gIktTQzU2MDEgQ1A5NDkiCisrCWVjaG8gInNkZWNrYW5qaSBFVUMtSlAiCisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwllY2hvICJUQUNUSVMgVElTLTYyMCIKKysJZWNobyAiVVRGLTggVVRGLTgiCisrCTs7CisrICAgIHNvbGFyaXMqKQorKwllY2hvICI2NDYgQVNDSUkiCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS0zIElTTy04ODU5LTMiCisrCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS02IElTTy04ODU5LTYiCisrCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorKwllY2hvICJJU084ODU5LTggSVNPLTg4NTktOCIKKysJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisrCWVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWVjaG8gImtvaTgtciBLT0k4LVIiCisrCWVjaG8gImFuc2ktMTI1MSBDUDEyNTEiCisrCWVjaG8gIkJJRzUgQklHNSIKKysJZWNobyAiQmlnNS1IS1NDUyBCSUc1LUhLU0NTIgorKwllY2hvICJnYjIzMTIgR0IyMzEyIgorKwllY2hvICJHQksgR0JLIgorKwllY2hvICJHQjE4MDMwIEdCMTgwMzAiCisrCWVjaG8gImNuczExNjQzIEVVQy1UVyIKKysJZWNobyAiNTYwMSBFVUMtS1IiCisrCWVjaG8gImtvX0tSLmpvaGFwOTIgSk9IQUIiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiUENLIFNISUZUX0pJUyIKKysJZWNobyAiVElTNjIwLjI1MzMgVElTLTYyMCIKKysJI2VjaG8gInN1bl9ldV9ncmVlayA/IiAjIHdoYXQgaXMgdGhpcz8KKysJZWNobyAiVVRGLTggVVRGLTgiCisrCTs7CisrICAgIGZyZWVic2QqIHwgb3MyKikKKysJIyBGcmVlQlNEIDQuMiBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKysJIyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisrCSMgTGlrZXdpc2UgZm9yIE9TLzIuIE9TLzIgaGFzIFhGcmVlODYganVzdCBsaWtlIEZyZWVCU0QuIEp1c3QKKysJIyByZXVzZSBGcmVlQlNEJ3MgbG9jYWxlIGRhdGEgZm9yIE9TLzIuCisrCWVjaG8gIkMgQVNDSUkiCisrCWVjaG8gIlVTLUFTQ0lJIEFTQ0lJIgorKwlmb3IgbCBpbiBsYV9MTiBsdF9MTjsgZG8KKysJICBlY2hvICIkbC5BU0NJSSBBU0NJSSIKKysJZG9uZQorKwlmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisrCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIGxhX0xOIFwKKysJICAgICAgICAgbHRfTE4gbmxfQkUgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwuSVNPXzg4NTktMSBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLkRJU184ODU5LTE1IElTTy04ODU5LTE1IgorKwlkb25lCisrCWZvciBsIGluIGNzX0NaIGhyX0hSIGh1X0hVIGxhX0xOIGx0X0xOIHBsX1BMIHNsX1NJOyBkbworKwkgIGVjaG8gIiRsLklTT184ODU5LTIgSVNPLTg4NTktMiIKKysJZG9uZQorKwlmb3IgbCBpbiBsYV9MTiBsdF9MVDsgZG8KKysJICBlY2hvICIkbC5JU09fODg1OS00IElTTy04ODU5LTQiCisrCWRvbmUKKysJZm9yIGwgaW4gcnVfUlUgcnVfU1U7IGRvCisrCSAgZWNobyAiJGwuS09JOC1SIEtPSTgtUiIKKysJICBlY2hvICIkbC5JU09fODg1OS01IElTTy04ODU5LTUiCisrCSAgZWNobyAiJGwuQ1A4NjYgQ1A4NjYiCisrCWRvbmUKKysJZWNobyAidWtfVUEuS09JOC1VIEtPSTgtVSIKKysJZWNobyAiemhfVFcuQklHNSBCSUc1IgorKwllY2hvICJ6aF9UVy5CaWc1IEJJRzUiCisrCWVjaG8gInpoX0NOLkVVQyBHQjIzMTIiCisrCWVjaG8gImphX0pQLkVVQyBFVUMtSlAiCisrCWVjaG8gImphX0pQLlNKSVMgU0hJRlRfSklTIgorKwllY2hvICJqYV9KUC5TaGlmdF9KSVMgU0hJRlRfSklTIgorKwllY2hvICJrb19LUi5FVUMgRVVDLUtSIgorKwk7OworKyAgICBuZXRic2QqKQorKwllY2hvICI2NDYgQVNDSUkiCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJldWNDTiBHQjIzMTIiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiZXVjS1IgRVVDLUtSIgorKwllY2hvICJldWNUVyBFVUMtVFciCisrCWVjaG8gIkJJRzUgQklHNSIKKysJZWNobyAiU0pJUyBTSElGVF9KSVMiCisrCTs7CisrICAgIGRhcndpbiopCisrCSMgRGFyd2luIDYuOCBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKysJIyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisrCWVjaG8gIkMgQVNDSUkiCisrCWZvciBsIGluIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGxhX0xOOyBkbworKwkgIGVjaG8gIiRsLlVTLUFTQ0lJIEFTQ0lJIgorKwlkb25lCisrCWZvciBsIGluIGRhX0RLIGRlX0FUIGRlX0NIIGRlX0RFIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGVzX0VTIFwKKysJICAgICAgICAgZmlfRkkgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgaXNfSVMgaXRfQ0ggaXRfSVQgbmxfQkUgXAorKwkgICAgICAgICBubF9OTCBub19OTyBwdF9QVCBzdl9TRTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE47IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS0xIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZG9uZQorKwlmb3IgbCBpbiBjc19DWiBocl9IUiBodV9IVSBsYV9MTiBwbF9QTCBzbF9TSTsgZG8KKysJICBlY2hvICIkbC5JU084ODU5LTIgSVNPLTg4NTktMiIKKysJZG9uZQorKwlmb3IgbCBpbiBsYV9MTiBsdF9MVDsgZG8KKysJICBlY2hvICIkbC5JU084ODU5LTQgSVNPLTg4NTktNCIKKysJZG9uZQorKwlmb3IgbCBpbiBydV9SVTsgZG8KKysJICBlY2hvICIkbC5LT0k4LVIgS09JOC1SIgorKwkgIGVjaG8gIiRsLklTTzg4NTktNSBJU08tODg1OS01IgorKwkgIGVjaG8gIiRsLkNQODY2IENQODY2IgorKwlkb25lCisrCWZvciBsIGluIGJnX0JHOyBkbworKwkgIGVjaG8gIiRsLkNQMTI1MSBDUDEyNTEiCisrCWRvbmUKKysJZWNobyAidWtfVUEuS09JOC1VIEtPSTgtVSIKKysJZWNobyAiemhfVFcuQklHNSBCSUc1IgorKwllY2hvICJ6aF9UVy5CaWc1IEJJRzUiCisrCWVjaG8gInpoX0NOLkVVQyBHQjIzMTIiCisrCWVjaG8gImphX0pQLkVVQyBFVUMtSlAiCisrCWVjaG8gImphX0pQLlNKSVMgU0hJRlRfSklTIgorKwllY2hvICJrb19LUi5FVUMgRVVDLUtSIgorKwk7OworKyAgICBiZW9zKikKKysJIyBCZU9TIGhhcyBhIHNpbmdsZSBsb2NhbGUsIGFuZCBpdCBoYXMgVVRGLTggZW5jb2RpbmcuCisrCWVjaG8gIiogVVRGLTgiCisrCTs7CisrICAgIG1zZG9zZGpncHAqKQorKwkjIERKR1BQIDIuMDMgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwllY2hvICIjIgorKwllY2hvICIjIFRoZSBlbmNvZGluZ3MgZ2l2ZW4gaGVyZSBtYXkgbm90IGFsbCBiZSBjb3JyZWN0LiIKKysJZWNobyAiIyBJZiB5b3UgZmluZCB0aGF0IHRoZSBlbmNvZGluZyBnaXZlbiBmb3IgeW91ciBsYW5ndWFnZSBhbmQiCisrCWVjaG8gIiMgY291bnRyeSBpcyBub3QgdGhlIG9uZSB5b3VyIERPUyBtYWNoaW5lIGFjdHVhbGx5IHVzZXMsIGp1c3QiCisrCWVjaG8gIiMgY29ycmVjdCBpdCBpbiB0aGlzIGZpbGUsIGFuZCBzZW5kIGEgbWFpbCB0byIKKysJZWNobyAiIyBKdWFuIE1hbnVlbCBHdWVycmVybyA8c3QwMDE5MDZAaHJ6MS5ocnoudHUtZGFybXN0YWR0LmRlPiIKKysJZWNobyAiIyBhbmQgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiIKKysJZWNobyAiIyIKKysJZWNobyAiQyBBU0NJSSIKKysJIyBJU08tODg1OS0xIGxhbmd1YWdlcworKwllY2hvICJjYSBDUDg1MCIKKysJZWNobyAiY2FfRVMgQ1A4NTAiCisrCWVjaG8gImRhIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJkYV9ESyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAiZGUgQ1A4NTAiCisrCWVjaG8gImRlX0FUIENQODUwIgorKwllY2hvICJkZV9DSCBDUDg1MCIKKysJZWNobyAiZGVfREUgQ1A4NTAiCisrCWVjaG8gImVuIENQODUwIgorKwllY2hvICJlbl9BVSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiZW5fQ0EgQ1A4NTAiCisrCWVjaG8gImVuX0dCIENQODUwIgorKwllY2hvICJlbl9OWiBDUDQzNyIKKysJZWNobyAiZW5fVVMgQ1A0MzciCisrCWVjaG8gImVuX1pBIENQODUwIiAjIG5vdCBDUDQzNyA/PworKwllY2hvICJlcyBDUDg1MCIKKysJZWNobyAiZXNfQVIgQ1A4NTAiCisrCWVjaG8gImVzX0JPIENQODUwIgorKwllY2hvICJlc19DTCBDUDg1MCIKKysJZWNobyAiZXNfQ08gQ1A4NTAiCisrCWVjaG8gImVzX0NSIENQODUwIgorKwllY2hvICJlc19DVSBDUDg1MCIKKysJZWNobyAiZXNfRE8gQ1A4NTAiCisrCWVjaG8gImVzX0VDIENQODUwIgorKwllY2hvICJlc19FUyBDUDg1MCIKKysJZWNobyAiZXNfR1QgQ1A4NTAiCisrCWVjaG8gImVzX0hOIENQODUwIgorKwllY2hvICJlc19NWCBDUDg1MCIKKysJZWNobyAiZXNfTkkgQ1A4NTAiCisrCWVjaG8gImVzX1BBIENQODUwIgorKwllY2hvICJlc19QWSBDUDg1MCIKKysJZWNobyAiZXNfUEUgQ1A4NTAiCisrCWVjaG8gImVzX1NWIENQODUwIgorKwllY2hvICJlc19VWSBDUDg1MCIKKysJZWNobyAiZXNfVkUgQ1A4NTAiCisrCWVjaG8gImV0IENQODUwIgorKwllY2hvICJldF9FRSBDUDg1MCIKKysJZWNobyAiZXUgQ1A4NTAiCisrCWVjaG8gImV1X0VTIENQODUwIgorKwllY2hvICJmaSBDUDg1MCIKKysJZWNobyAiZmlfRkkgQ1A4NTAiCisrCWVjaG8gImZyIENQODUwIgorKwllY2hvICJmcl9CRSBDUDg1MCIKKysJZWNobyAiZnJfQ0EgQ1A4NTAiCisrCWVjaG8gImZyX0NIIENQODUwIgorKwllY2hvICJmcl9GUiBDUDg1MCIKKysJZWNobyAiZ2EgQ1A4NTAiCisrCWVjaG8gImdhX0lFIENQODUwIgorKwllY2hvICJnZCBDUDg1MCIKKysJZWNobyAiZ2RfR0IgQ1A4NTAiCisrCWVjaG8gImdsIENQODUwIgorKwllY2hvICJnbF9FUyBDUDg1MCIKKysJZWNobyAiaWQgQ1A4NTAiICAgICMgbm90IENQNDM3ID8/CisrCWVjaG8gImlkX0lEIENQODUwIiAjIG5vdCBDUDQzNyA/PworKwllY2hvICJpcyBDUDg2MSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAiaXNfSVMgQ1A4NjEiICMgbm90IENQODUwID8/CisrCWVjaG8gIml0IENQODUwIgorKwllY2hvICJpdF9DSCBDUDg1MCIKKysJZWNobyAiaXRfSVQgQ1A4NTAiCisrCWVjaG8gImx0IENQNzc1IgorKwllY2hvICJsdF9MVCBDUDc3NSIKKysJZWNobyAibHYgQ1A3NzUiCisrCWVjaG8gImx2X0xWIENQNzc1IgorKwllY2hvICJuYiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibmJfTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gIm5sIENQODUwIgorKwllY2hvICJubF9CRSBDUDg1MCIKKysJZWNobyAibmxfTkwgQ1A4NTAiCisrCWVjaG8gIm5uIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJubl9OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibm8gQ1A4NjUiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gIm5vX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJwdCBDUDg1MCIKKysJZWNobyAicHRfQlIgQ1A4NTAiCisrCWVjaG8gInB0X1BUIENQODUwIgorKwllY2hvICJzdiBDUDg1MCIKKysJZWNobyAic3ZfU0UgQ1A4NTAiCisrCSMgSVNPLTg4NTktMiBsYW5ndWFnZXMKKysJZWNobyAiY3MgQ1A4NTIiCisrCWVjaG8gImNzX0NaIENQODUyIgorKwllY2hvICJociBDUDg1MiIKKysJZWNobyAiaHJfSFIgQ1A4NTIiCisrCWVjaG8gImh1IENQODUyIgorKwllY2hvICJodV9IVSBDUDg1MiIKKysJZWNobyAicGwgQ1A4NTIiCisrCWVjaG8gInBsX1BMIENQODUyIgorKwllY2hvICJybyBDUDg1MiIKKysJZWNobyAicm9fUk8gQ1A4NTIiCisrCWVjaG8gInNrIENQODUyIgorKwllY2hvICJza19TSyBDUDg1MiIKKysJZWNobyAic2wgQ1A4NTIiCisrCWVjaG8gInNsX1NJIENQODUyIgorKwllY2hvICJzcSBDUDg1MiIKKysJZWNobyAic3FfQUwgQ1A4NTIiCisrCWVjaG8gInNyIENQODUyIiAgICAjIENQODUyIG9yIENQODY2IG9yIENQODU1ID8/CisrCWVjaG8gInNyX0NTIENQODUyIiAjIENQODUyIG9yIENQODY2IG9yIENQODU1ID8/CisrCWVjaG8gInNyX1lVIENQODUyIiAjIENQODUyIG9yIENQODY2IG9yIENQODU1ID8/CisrCSMgSVNPLTg4NTktMyBsYW5ndWFnZXMKKysJZWNobyAibXQgQ1A4NTAiCisrCWVjaG8gIm10X01UIENQODUwIgorKwkjIElTTy04ODU5LTUgbGFuZ3VhZ2VzCisrCWVjaG8gImJlIENQODY2IgorKwllY2hvICJiZV9CRSBDUDg2NiIKKysJZWNobyAiYmcgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CisrCWVjaG8gImJnX0JHIENQODY2IiAjIG5vdCBDUDg1NSA/PworKwllY2hvICJtayBDUDg2NiIgICAgIyBub3QgQ1A4NTUgPz8KKysJZWNobyAibWtfTUsgQ1A4NjYiICMgbm90IENQODU1ID8/CisrCWVjaG8gInJ1IENQODY2IgorKwllY2hvICJydV9SVSBDUDg2NiIKKysJZWNobyAidWsgQ1AxMTI1IgorKwllY2hvICJ1a19VQSBDUDExMjUiCisrCSMgSVNPLTg4NTktNiBsYW5ndWFnZXMKKysJZWNobyAiYXIgQ1A4NjQiCisrCWVjaG8gImFyX0FFIENQODY0IgorKwllY2hvICJhcl9EWiBDUDg2NCIKKysJZWNobyAiYXJfRUcgQ1A4NjQiCisrCWVjaG8gImFyX0lRIENQODY0IgorKwllY2hvICJhcl9JUiBDUDg2NCIKKysJZWNobyAiYXJfSk8gQ1A4NjQiCisrCWVjaG8gImFyX0tXIENQODY0IgorKwllY2hvICJhcl9NQSBDUDg2NCIKKysJZWNobyAiYXJfT00gQ1A4NjQiCisrCWVjaG8gImFyX1FBIENQODY0IgorKwllY2hvICJhcl9TQSBDUDg2NCIKKysJZWNobyAiYXJfU1kgQ1A4NjQiCisrCSMgSVNPLTg4NTktNyBsYW5ndWFnZXMKKysJZWNobyAiZWwgQ1A4NjkiCisrCWVjaG8gImVsX0dSIENQODY5IgorKwkjIElTTy04ODU5LTggbGFuZ3VhZ2VzCisrCWVjaG8gImhlIENQODYyIgorKwllY2hvICJoZV9JTCBDUDg2MiIKKysJIyBJU08tODg1OS05IGxhbmd1YWdlcworKwllY2hvICJ0ciBDUDg1NyIKKysJZWNobyAidHJfVFIgQ1A4NTciCisrCSMgSmFwYW5lc2UKKysJZWNobyAiamEgQ1A5MzIiCisrCWVjaG8gImphX0pQIENQOTMyIgorKwkjIENoaW5lc2UKKysJZWNobyAiemhfQ04gR0JLIgorKwllY2hvICJ6aF9UVyBDUDk1MCIgIyBub3QgQ1A5MzggPz8KKysJIyBLb3JlYW4KKysJZWNobyAia3IgQ1A5NDkiICAgICMgbm90IENQOTM0ID8/CisrCWVjaG8gImtyX0tSIENQOTQ5IiAjIG5vdCBDUDkzNCA/PworKwkjIFRoYWkKKysJZWNobyAidGggQ1A4NzQiCisrCWVjaG8gInRoX1RIIENQODc0IgorKwkjIE90aGVyCisrCWVjaG8gImVvIENQODUwIgorKwllY2hvICJlb19FTyBDUDg1MCIKKysJOzsKKytlc2FjCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZGNnZXR0ZXh0LmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNnZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zNTk3NDc0ODAgLTA0MDAKK0BAIC0xLDU5MyArMSw1NiBAQAorLS8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRjZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZmRlZiBfX0dOVUNfXworLSMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCistIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorLSNlbHNlCistIyBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworLSMgIGluY2x1ZGUgPGFsbG9jYS5oPgorLSMgZWxzZQorLSMgIGlmZGVmIF9BSVgKKy0gI3ByYWdtYSBhbGxvY2EKKy0jICBlbHNlCistIyAgIGlmbmRlZiBhbGxvY2EKKy1jaGFyICphbGxvY2EgKCk7CistIyAgIGVuZGlmCistIyAgZW5kaWYKKy0jIGVuZGlmCistI2VuZGlmCistCistI2luY2x1ZGUgPGVycm5vLmg+CistI2lmbmRlZiBlcnJubworLWV4dGVybiBpbnQgZXJybm87CistI2VuZGlmCistI2lmbmRlZiBfX3NldF9lcnJubworLSMgZGVmaW5lIF9fc2V0X2Vycm5vKHZhbCkgZXJybm8gPSAodmFsKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLWNoYXIgKmdldGVudiAoKTsKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIF9HTlVfU09VUkNFCistIyAgZGVmaW5lIF9HTlVfU09VUkNFCTEKKy0jIGVuZGlmCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSNlbmRpZgorLSNpZiAhSEFWRV9TVFJDSFIgJiYgIWRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBzdHJjaHIKKy0jICBkZWZpbmUgc3RyY2hyIGluZGV4CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8dW5pc3RkLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImdldHRleHQuaCIKKyAjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorLSNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKy0jaWZkZWYgX0xJQkMKKy0vKiBSZW5hbWUgdGhlIG5vbiBBTlNJIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKy0gICBiZWNhdXNlIHNvbWUgQU5TSSBDIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CistICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworLSMgZGVmaW5lIGdldGN3ZCBfX2dldGN3ZAorLSMgZGVmaW5lIHN0cGNweSBfX3N0cGNweQorLSNlbHNlCistIyBpZiAhZGVmaW5lZCBIQVZFX0dFVENXRAorLWNoYXIgKmdldHdkICgpOworLSMgIGRlZmluZSBnZXRjd2QoYnVmLCBtYXgpIGdldHdkIChidWYpCistIyBlbHNlCistY2hhciAqZ2V0Y3dkICgpOworLSMgZW5kaWYKKy0jIGlmbmRlZiBIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7CistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIEFtb3VudCB0byBpbmNyZWFzZSBidWZmZXIgc2l6ZSBieSBpbiBlYWNoIHRyeS4gICovCistI2RlZmluZSBQQVRIX0lOQ1IgMzIKKy0KKy0vKiBUaGUgZm9sbG93aW5nIGlzIGZyb20gcGF0aG1heC5oLiAgKi8KKy0vKiBOb24tUE9TSVggQlNEIHN5c3RlbXMgbWlnaHQgaGF2ZSBnY2MncyBsaW1pdHMuaCwgd2hpY2ggZG9lc24ndCBkZWZpbmUKKy0gICBQQVRIX01BWCBidXQgbWlnaHQgY2F1c2UgcmVkZWZpbml0aW9uIHdhcm5pbmdzIHdoZW4gc3lzL3BhcmFtLmggaXMKKy0gICBsYXRlciBpbmNsdWRlZCAoYXMgb24gTU9SRS9CU0QgNC4zKS4gICovCistI2lmIGRlZmluZWQoX1BPU0lYX1ZFUlNJT04pIHx8IChkZWZpbmVkKEhBVkVfTElNSVRTX0gpICYmICFkZWZpbmVkKF9fR05VQ19fKSkKKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbmRpZgorLQorLSNpZm5kZWYgX1BPU0lYX1BBVEhfTUFYCistIyBkZWZpbmUgX1BPU0lYX1BBVEhfTUFYIDI1NQorLSNlbmRpZgorLQorLSNpZiAhZGVmaW5lZChQQVRIX01BWCkgJiYgZGVmaW5lZChfUENfUEFUSF9NQVgpCistIyBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCistI2VuZGlmCistCistLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKy0jaWYgZGVmaW5lZChIQVZFX1NZU19QQVJBTV9IKSAmJiAhZGVmaW5lZChQQVRIX01BWCkgJiYgIWRlZmluZWQoTUFYUEFUSExFTikKKy0jIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorLSNlbmRpZgorLQorLSNpZiAhZGVmaW5lZChQQVRIX01BWCkgJiYgZGVmaW5lZChNQVhQQVRITEVOKQorLSMgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIFBBVEhfTUFYCistIyBkZWZpbmUgUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCistI2VuZGlmCistCistLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgYHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKy0gICBgYERpcmVjdHMgYHNldGxvY2FsZSgpJyB0byBxdWVyeSBgY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKy0gICAgIHNldHRpbmcgb2YgYGxvY2FsJy4nJworLSAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgQW5kIGV2ZW4gd29yc2U6IFBPU0lYCistICAgZGVmaW5lcyB0aGlzIG5vdCBhdCBhbGwuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkCistICAgc3lzdGVtIChlLmcuIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBIQVZFX0xPQ0FMRV9OVUxMCistI2VuZGlmCistCistLyogTmFtZSBvZiB0aGUgZGVmYXVsdCBkb21haW4gdXNlZCBmb3IgZ2V0dGV4dCgzKSBwcmlvciBhbnkgY2FsbCB0bworLSAgIHRleHRkb21haW4oMykuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBpcyAibWVzc2FnZXMiLiAgKi8KKy1jb25zdCBjaGFyIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluW10gPSAibWVzc2FnZXMiOworLQorLS8qIFZhbHVlIHVzZWQgYXMgdGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KKy1jb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluOworLQorLS8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KKy1jb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXSA9IEdOVUxPQ0FMRURJUjsKKy0KKy0vKiBMaXN0IHdpdGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucyBjcmVhdGVkIGJ5IGJpbmR0ZXh0ZG9tYWluKCkKKy0gICBjYWxscy4gICovCistc3RydWN0IGJpbmRpbmcgKl9ubF9kb21haW5fYmluZGluZ3M7CistCistLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKy1zdGF0aWMgY2hhciAqZmluZF9tc2cgUEFSQU1TICgoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCistCQkJICAgICAgIGNvbnN0IGNoYXIgKm1zZ2lkKSk7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNhdGVnb3J5X3RvX25hbWUgUEFSQU1TICgoaW50IGNhdGVnb3J5KSk7Cistc3RhdGljIGNvbnN0IGNoYXIgKmd1ZXNzX2NhdGVnb3J5X3ZhbHVlIFBBUkFNUyAoKGludCBjYXRlZ29yeSwKKy0JCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKSk7CistCistCistLyogRm9yIHRob3NlIGxvb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCistICAgc29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KKy0jaWZkZWYgSEFWRV9BTExPQ0EKKy0vKiBOb3RoaW5nIGhhcyB0byBiZSBkb25lLiAgKi8KKy0jIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcmVzcykgLyogbm90aGluZyAqLworLSMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpIC8qIG5vdGhpbmcgKi8KKy0jZWxzZQorLXN0cnVjdCBibG9ja19saXN0CisteworLSAgdm9pZCAqYWRkcmVzczsKKy0gIHN0cnVjdCBibG9ja19saXN0ICpuZXh0OworLX07CistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHIpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgc3RydWN0IGJsb2NrX2xpc3QgKm5ld3AgPSAoc3RydWN0IGJsb2NrX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7ICBcCistICAgIC8qIElmIHdlIGNhbm5vdCBnZXQgYSBmcmVlIGJsb2NrIHdlIGNhbm5vdCBhZGQgdGhlIG5ldyBlbGVtZW50IHRvCSAgICAgIFwKKy0gICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCistICAgIGlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPmFkZHJlc3MgPSAoYWRkcik7CQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAgICAgXAorLSAgICAgIChsaXN0KSA9IG5ld3A7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJICAgICAgXAorLSAgICAgIHN0cnVjdCBibG9ja19saXN0ICpvbGQgPSBsaXN0OwkJCQkJICAgICAgXAorLSAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwkJCQkJCSAgICAgIFwKKy0gICAgICBmcmVlIChvbGQpOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgdW5kZWYgYWxsb2NhCistIyBkZWZpbmUgYWxsb2NhKHNpemUpIChtYWxsb2MgKHNpemUpKQorLSNlbmRpZgkvKiBoYXZlIGFsbG9jYSAqLworLQorLQorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKyAgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBEQ0dFVFRFWFQgX19kY2dldHRleHQKKysjIGRlZmluZSBEQ0lHRVRURVhUIF9fZGNpZ2V0dGV4dAorICNlbHNlCistIyBkZWZpbmUgRENHRVRURVhUIGRjZ2V0dGV4dF9fCisrIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENJR0VUVEVYVCBsaWJpbnRsX2RjaWdldHRleHQKKyAjZW5kaWYKKyAKKyAvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKyAgICBsb2NhbGUuICAqLworIGNoYXIgKgorLURDR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLSAgICAgaW50IGNhdGVnb3J5OworK0RDR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSkKKyB7CistI2lmbmRlZiBIQVZFX0FMTE9DQQorLSAgc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrX2xpc3QgPSBOVUxMOworLSNlbmRpZgorLSAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworLSAgc3RydWN0IGJpbmRpbmcgKmJpbmRpbmc7CistICBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWU7CistICBjb25zdCBjaGFyICpjYXRlZ29yeXZhbHVlOworLSAgY2hhciAqZGlybmFtZSwgKnhkb21haW5uYW1lOworLSAgY2hhciAqc2luZ2xlX2xvY2FsZTsKKy0gIGNoYXIgKnJldHZhbDsKKy0gIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworLQorLSAgLyogSWYgbm8gcmVhbCBNU0dJRCBpcyBnaXZlbiByZXR1cm4gTlVMTC4gICovCistICBpZiAobXNnaWQgPT0gTlVMTCkKKy0gICAgcmV0dXJuIE5VTEw7CistCistICAvKiBJZiBET01BSU5OQU1FIGlzIE5VTEwsIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBkZWZhdWx0IGRvbWFpbi4gIElmCistICAgICBDQVRFR09SWSBpcyBub3QgTENfTUVTU0FHRVMgdGhpcyBtaWdodCBub3QgbWFrZSBtdWNoIHNlbnNlIGJ1dCB0aGUKKy0gICAgIGRlZmludGlvbiBsZWZ0IHRoaXMgdW5kZWZpbmVkLiAgKi8KKy0gIGlmIChkb21haW5uYW1lID09IE5VTEwpCistICAgIGRvbWFpbm5hbWUgPSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKy0KKy0gIC8qIEZpcnN0IGZpbmQgbWF0Y2hpbmcgYmluZGluZy4gICovCistICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorLSAgICB7CistICAgICAgaW50IGNvbXBhcmUgPSBzdHJjbXAgKGRvbWFpbm5hbWUsIGJpbmRpbmctPmRvbWFpbm5hbWUpOworLSAgICAgIGlmIChjb21wYXJlID09IDApCistCS8qIFdlIGZvdW5kIGl0ISAgKi8KKy0JYnJlYWs7CistICAgICAgaWYgKGNvbXBhcmUgPCAwKQorLQl7CistCSAgLyogSXQgaXMgbm90IGluIHRoZSBsaXN0LiAgKi8KKy0JICBiaW5kaW5nID0gTlVMTDsKKy0JICBicmVhazsKKy0JfQorLSAgICB9CistCistICBpZiAoYmluZGluZyA9PSBOVUxMKQorLSAgICBkaXJuYW1lID0gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZTsKKy0gIGVsc2UgaWYgKGJpbmRpbmctPmRpcm5hbWVbMF0gPT0gJy8nKQorLSAgICBkaXJuYW1lID0gYmluZGluZy0+ZGlybmFtZTsKKy0gIGVsc2UKKy0gICAgeworLSAgICAgIC8qIFdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLiAgTWFrZSBpdCBhYnNvbHV0ZSBub3cuICAqLworLSAgICAgIHNpemVfdCBkaXJuYW1lX2xlbiA9IHN0cmxlbiAoYmluZGluZy0+ZGlybmFtZSkgKyAxOworLSAgICAgIHNpemVfdCBwYXRoX21heDsKKy0gICAgICBjaGFyICpyZXQ7CistCistICAgICAgcGF0aF9tYXggPSAodW5zaWduZWQpIFBBVEhfTUFYOworLSAgICAgIHBhdGhfbWF4ICs9IDI7CQkvKiBUaGUgZ2V0Y3dkIGRvY3Mgc2F5IHRvIGRvIHRoaXMuICAqLworLQorLSAgICAgIGRpcm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKHBhdGhfbWF4ICsgZGlybmFtZV9sZW4pOworLSAgICAgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgZGlybmFtZSk7CistCistICAgICAgX19zZXRfZXJybm8gKDApOworLSAgICAgIHdoaWxlICgocmV0ID0gZ2V0Y3dkIChkaXJuYW1lLCBwYXRoX21heCkpID09IE5VTEwgJiYgZXJybm8gPT0gRVJBTkdFKQorLQl7CistCSAgcGF0aF9tYXggKz0gUEFUSF9JTkNSOworLQkgIGRpcm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKHBhdGhfbWF4ICsgZGlybmFtZV9sZW4pOworLQkgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgZGlybmFtZSk7CistCSAgX19zZXRfZXJybm8gKDApOworLQl9CistCistICAgICAgaWYgKHJldCA9PSBOVUxMKQorLQl7CistCSAgLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERvbid0IHNpZ25hbCBhbgorLQkgICAgIGVycm9yIGJ1dCBzaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHN0cmluZy4gICovCistCSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CistCSAgcmV0dXJuIChjaGFyICopIG1zZ2lkOworLQl9CistCistICAgICAgc3RwY3B5IChzdHBjcHkgKHN0cmNociAoZGlybmFtZSwgJ1wwJyksICIvIiksIGJpbmRpbmctPmRpcm5hbWUpOworLSAgICB9CistCistICAvKiBOb3cgZGV0ZXJtaW5lIHRoZSBzeW1ib2xpYyBuYW1lIG9mIENBVEVHT1JZIGFuZCBpdHMgdmFsdWUuICAqLworLSAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworLSAgY2F0ZWdvcnl2YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKy0KKy0gIHhkb21haW5uYW1lID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKKy0JCQkJICsgc3RybGVuIChkb21haW5uYW1lKSArIDUpOworLSAgQUREX0JMT0NLIChibG9ja19saXN0LCB4ZG9tYWlubmFtZSk7CistCistICBzdHBjcHkgKHN0cGNweSAoc3RwY3B5IChzdHBjcHkgKHhkb21haW5uYW1lLCBjYXRlZ29yeW5hbWUpLCAiLyIpLAorLQkJICBkb21haW5uYW1lKSwKKy0JICAiLm1vIik7CistCistICAvKiBDcmVhdGluZyB3b3JraW5nIGFyZWEuICAqLworLSAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOworLSAgQUREX0JMT0NLIChibG9ja19saXN0LCBzaW5nbGVfbG9jYWxlKTsKKy0KKy0KKy0gIC8qIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHN0cmluZy4gIFRoaXMgaXMgYSBsb29wIGJlY2F1c2Ugd2UgcGVyaGFwcworLSAgICAgZ290IGFuIG9yZGVyZWQgbGlzdCBvZiBsYW5ndWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoIHRyYW5zbGF0aW9uLiAgKi8KKy0gIHdoaWxlICgxKQorLSAgICB7CistICAgICAgLyogTWFrZSBDQVRFR09SWVZBTFVFIHBvaW50IHRvIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIGxpc3QuICAqLworLSAgICAgIHdoaWxlIChjYXRlZ29yeXZhbHVlWzBdICE9ICdcMCcgJiYgY2F0ZWdvcnl2YWx1ZVswXSA9PSAnOicpCistCSsrY2F0ZWdvcnl2YWx1ZTsKKy0gICAgICBpZiAoY2F0ZWdvcnl2YWx1ZVswXSA9PSAnXDAnKQorLQl7CistCSAgLyogVGhlIHdob2xlIGNvbnRlbnRzIG9mIENBVEVHT1JZVkFMVUUgaGFzIGJlZW4gc2VhcmNoZWQgYnV0CistCSAgICAgbm8gdmFsaWQgZW50cnkgaGFzIGJlZW4gZm91bmQuICBXZSBzb2x2ZSB0aGlzIHNpdHVhdGlvbgorLQkgICAgIGJ5IGltcGxpY2l0bHkgYXBwZW5kaW5nIGEgIkMiIGVudHJ5LCBpLmUuIG5vIHRyYW5zbGF0aW9uCistCSAgICAgd2lsbCB0YWtlIHBsYWNlLiAgKi8KKy0JICBzaW5nbGVfbG9jYWxlWzBdID0gJ0MnOworLQkgIHNpbmdsZV9sb2NhbGVbMV0gPSAnXDAnOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgY2hhciAqY3AgPSBzaW5nbGVfbG9jYWxlOworLQkgIHdoaWxlIChjYXRlZ29yeXZhbHVlWzBdICE9ICdcMCcgJiYgY2F0ZWdvcnl2YWx1ZVswXSAhPSAnOicpCistCSAgICAqY3ArKyA9ICpjYXRlZ29yeXZhbHVlKys7CistCSAgKmNwID0gJ1wwJzsKKy0JfQorLQorLSAgICAgIC8qIElmIHRoZSBjdXJyZW50IGxvY2FsZSB2YWx1ZSBpcyBDIChvciBQT1NJWCkgd2UgZG9uJ3QgbG9hZCBhCistCSBkb21haW4uICBSZXR1cm4gdGhlIE1TR0lELiAgKi8KKy0gICAgICBpZiAoc3RyY21wIChzaW5nbGVfbG9jYWxlLCAiQyIpID09IDAKKy0JICB8fCBzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJQT1NJWCIpID09IDApCistCXsKKy0JICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistCSAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKy0JICByZXR1cm4gKGNoYXIgKikgbXNnaWQ7CistCX0KKy0KKy0KKy0gICAgICAvKiBGaW5kIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGNhdGFsb2cgbWF0Y2hpbmcgdGhlCistCSBET01BSU5OQU1FIGFuZCBDQVRFR09SWS4gICovCistICAgICAgZG9tYWluID0gX25sX2ZpbmRfZG9tYWluIChkaXJuYW1lLCBzaW5nbGVfbG9jYWxlLCB4ZG9tYWlubmFtZSk7CistCistICAgICAgaWYgKGRvbWFpbiAhPSBOVUxMKQorLQl7CistCSAgcmV0dmFsID0gZmluZF9tc2cgKGRvbWFpbiwgbXNnaWQpOworLQorLQkgIGlmIChyZXR2YWwgPT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgaW50IGNudDsKKy0KKy0JICAgICAgZm9yIChjbnQgPSAwOyBkb21haW4tPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorLQkJeworLQkJICByZXR2YWwgPSBmaW5kX21zZyAoZG9tYWluLT5zdWNjZXNzb3JbY250XSwgbXNnaWQpOworLQorLQkJICBpZiAocmV0dmFsICE9IE5VTEwpCistCQkgICAgYnJlYWs7CistCQl9CistCSAgICB9CistCistCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQkgICAgeworLQkgICAgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistCSAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CistCSAgICAgIHJldHVybiByZXR2YWw7CistCSAgICB9CistCX0KKy0gICAgfQorLSAgLyogTk9UUkVBQ0hFRCAqLworKyAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBOVUxMLCAwLCAwLCBjYXRlZ29yeSk7CisgfQorIAorICNpZmRlZiBfTElCQworIC8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK0lOVERFRihfX2RjZ2V0dGV4dCkKKyB3ZWFrX2FsaWFzIChfX2RjZ2V0dGV4dCwgZGNnZXR0ZXh0KTsKKyAjZW5kaWYKKy0KKy0KKy1zdGF0aWMgY2hhciAqCistZmluZF9tc2cgKGRvbWFpbl9maWxlLCBtc2dpZCkKKy0gICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisteworLSAgc2l6ZV90IHRvcCwgYWN0LCBib3R0b207CistICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluOworLQorLSAgaWYgKGRvbWFpbl9maWxlLT5kZWNpZGVkID09IDApCistICAgIF9ubF9sb2FkX2RvbWFpbiAoZG9tYWluX2ZpbGUpOworLQorLSAgaWYgKGRvbWFpbl9maWxlLT5kYXRhID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIGRvbWFpbl9maWxlLT5kYXRhOworLQorLSAgLyogTG9jYXRlIHRoZSBNU0dJRCBhbmQgaXRzIHRyYW5zbGF0aW9uLiAgKi8KKy0gIGlmIChkb21haW4tPmhhc2hfc2l6ZSA+IDIgJiYgZG9tYWluLT5oYXNoX3RhYiAhPSBOVUxMKQorLSAgICB7CistICAgICAgLyogVXNlIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKy0gICAgICBubHNfdWludDMyIGxlbiA9IHN0cmxlbiAobXNnaWQpOworLSAgICAgIG5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOworLSAgICAgIG5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKy0gICAgICBubHNfdWludDMyIGluY3IgPSAxICsgKGhhc2hfdmFsICUgKGRvbWFpbi0+aGFzaF9zaXplIC0gMikpOworLSAgICAgIG5sc191aW50MzIgbnN0ciA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPmhhc2hfdGFiW2lkeF0pOworLQorLSAgICAgIGlmIChuc3RyID09IDApCistCS8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLworLQlyZXR1cm4gTlVMTDsKKy0KKy0gICAgICBpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+b3JpZ190YWJbbnN0ciAtIDFdLmxlbmd0aCkgPT0gbGVuCistCSAgJiYgc3RyY21wIChtc2dpZCwKKy0JCSAgICAgZG9tYWluLT5kYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCSAgICAgICBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5vZmZzZXQpKSA9PSAwKQorLQlyZXR1cm4gKGNoYXIgKikgZG9tYWluLT5kYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCQkgIGRvbWFpbi0+dHJhbnNfdGFiW25zdHIgLSAxXS5vZmZzZXQpOworLQorLSAgICAgIHdoaWxlICgxKQorLQl7CistCSAgaWYgKGlkeCA+PSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3IpCistCSAgICBpZHggLT0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyOworLQkgIGVsc2UKKy0JICAgIGlkeCArPSBpbmNyOworLQorLQkgIG5zdHIgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKy0JICBpZiAobnN0ciA9PSAwKQorLQkgICAgLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gICovCistCSAgICByZXR1cm4gTlVMTDsKKy0KKy0JICBpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+b3JpZ190YWJbbnN0ciAtIDFdLmxlbmd0aCkgPT0gbGVuCistCSAgICAgICYmIHN0cmNtcCAobXNnaWQsCistCQkJIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkJICAgZG9tYWluLT5vcmlnX3RhYltuc3RyIC0gMV0ub2Zmc2V0KSkKKy0JICAgICAgICAgPT0gMCkKKy0JICAgIHJldHVybiAoY2hhciAqKSBkb21haW4tPmRhdGEKKy0JICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT50cmFuc190YWJbbnN0ciAtIDFdLm9mZnNldCk7CistCX0KKy0gICAgICAvKiBOT1RSRUFDSEVEICovCistICAgIH0KKy0KKy0gIC8qIE5vdyB3ZSB0cnkgdGhlIGRlZmF1bHQgbWV0aG9kOiAgYmluYXJ5IHNlYXJjaCBpbiB0aGUgc29ydGVkCistICAgICBhcnJheSBvZiBtZXNzYWdlcy4gICovCistICBib3R0b20gPSAwOworLSAgdG9wID0gZG9tYWluLT5uc3RyaW5nczsKKy0gIHdoaWxlIChib3R0b20gPCB0b3ApCistICAgIHsKKy0gICAgICBpbnQgY21wX3ZhbDsKKy0KKy0gICAgICBhY3QgPSAoYm90dG9tICsgdG9wKSAvIDI7CistICAgICAgY21wX3ZhbCA9IHN0cmNtcCAobXNnaWQsIGRvbWFpbi0+ZGF0YQorLQkJCSAgICAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkgICAgZG9tYWluLT5vcmlnX3RhYlthY3RdLm9mZnNldCkpOworLSAgICAgIGlmIChjbXBfdmFsIDwgMCkKKy0JdG9wID0gYWN0OworLSAgICAgIGVsc2UgaWYgKGNtcF92YWwgPiAwKQorLQlib3R0b20gPSBhY3QgKyAxOworLSAgICAgIGVsc2UKKy0JYnJlYWs7CistICAgIH0KKy0KKy0gIC8qIElmIGFuIHRyYW5zbGF0aW9uIGlzIGZvdW5kIHJldHVybiB0aGlzLiAgKi8KKy0gIHJldHVybiBib3R0b20gPj0gdG9wID8gTlVMTCA6IChjaGFyICopIGRvbWFpbi0+ZGF0YQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJICAgICBkb21haW4tPnRyYW5zX3RhYlthY3RdLm9mZnNldCk7CistfQorLQorLQorLS8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgbG9jYWxlIENBVEVHT1JZLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqCistY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpCistICAgICBpbnQgY2F0ZWdvcnk7CisteworLSAgY29uc3QgY2hhciAqcmV0dmFsOworLQorLSAgc3dpdGNoIChjYXRlZ29yeSkKKy0gIHsKKy0jaWZkZWYgTENfQ09MTEFURQorLSAgY2FzZSBMQ19DT0xMQVRFOgorLSAgICByZXR2YWwgPSAiTENfQ09MTEFURSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19DVFlQRQorLSAgY2FzZSBMQ19DVFlQRToKKy0gICAgcmV0dmFsID0gIkxDX0NUWVBFIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX01PTkVUQVJZCistICBjYXNlIExDX01PTkVUQVJZOgorLSAgICByZXR2YWwgPSAiTENfTU9ORVRBUlkiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfTlVNRVJJQworLSAgY2FzZSBMQ19OVU1FUklDOgorLSAgICByZXR2YWwgPSAiTENfTlVNRVJJQyI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19USU1FCistICBjYXNlIExDX1RJTUU6CistICAgIHJldHZhbCA9ICJMQ19USU1FIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX01FU1NBR0VTCistICBjYXNlIExDX01FU1NBR0VTOgorLSAgICByZXR2YWwgPSAiTENfTUVTU0FHRVMiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfUkVTUE9OU0UKKy0gIGNhc2UgTENfUkVTUE9OU0U6CistICAgIHJldHZhbCA9ICJMQ19SRVNQT05TRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19BTEwKKy0gIGNhc2UgTENfQUxMOgorLSAgICAvKiBUaGlzIG1pZ2h0IG5vdCBtYWtlIHNlbnNlIGJ1dCBpcyBwZXJoYXBzIGJldHRlciB0aGFuIGFueSBvdGhlcgorLSAgICAgICB2YWx1ZS4gICovCistICAgIHJldHZhbCA9ICJMQ19BTEwiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0gIGRlZmF1bHQ6CistICAgIC8qIElmIHlvdSBoYXZlIGEgYmV0dGVyIGlkZWEgZm9yIGEgZGVmYXVsdCB2YWx1ZSBsZXQgbWUga25vdy4gICovCistICAgIHJldHZhbCA9ICJMQ19YWFgiOworLSAgfQorLQorLSAgcmV0dXJuIHJldHZhbDsKKy19CistCistLyogR3Vlc3MgdmFsdWUgb2YgY3VycmVudCBsb2NhbGUgZnJvbSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqCistZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGNhdGVnb3J5LCBjYXRlZ29yeW5hbWUpCistICAgICBpbnQgY2F0ZWdvcnk7CistICAgICBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWU7CisteworLSAgY29uc3QgY2hhciAqcmV0dmFsOworLQorLSAgLyogVGhlIGhpZ2hlc3QgcHJpb3JpdHkgdmFsdWUgaXMgdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQKKy0gICAgIHZhcmlhYmxlLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb24uICAqLworLSAgcmV0dmFsID0gZ2V0ZW52ICgiTEFOR1VBR0UiKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIC8qIGBMQU5HVUFHRScgaXMgbm90IHNldC4gIFNvIHdlIGhhdmUgdG8gcHJvY2VlZCB3aXRoIHRoZSBQT1NJWAorLSAgICAgbWV0aG9kcyBvZiBsb29raW5nIHRvIGBMQ19BTEwnLCBgTENfeHh4JywgYW5kIGBMQU5HJy4gIE9uIHNvbWUKKy0gICAgIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUgYHNldGxvY2FsZScgZnVuY3Rpb24gaXRzZWxmLiAgKi8KKy0jaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgJiYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9OVUxMCistICByZXR1cm4gc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCk7CistI2Vsc2UKKy0gIC8qIFNldHRpbmcgb2YgTENfQUxMIG92ZXJ3cml0ZXMgYWxsIG90aGVyLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLQorLSAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCistICByZXR2YWwgPSBnZXRlbnYgKGNhdGVnb3J5bmFtZSk7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBMYXN0IHBvc3NpYmlsaXR5IGlzIHRoZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIC8qIFdlIHVzZSBDIGFzIHRoZSBkZWZhdWx0IGRvbWFpbi4gIFBPU0lYIHNheXMgdGhpcyBpcyBpbXBsZW1lbnRhdGlvbgorLSAgICAgZGVmaW5lZC4gICovCistICByZXR1cm4gIkMiOworLSNlbmRpZgorLX0KKy0KKy0vKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKy0KKy0vKiBXZSBkb24ndCB3YW50IGxpYmludGwuYSB0byBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJhcnkuICBTbyB3ZQorLSAgIGF2b2lkIHRoZSBub24tc3RhbmRhcmQgZnVuY3Rpb24gc3RwY3B5LiAgSW4gR05VIEMgTGlicmFyeSB0aGlzCistICAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCB0aG91Z2guICBBbHNvIGFsbG93IHRoZSBzeW1ib2wgSEFWRV9TVFBDUFkKKy0gICB0byBiZSBkZWZpbmVkLiAgKi8KKy0jaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICoKKy1zdHBjcHkgKGRlc3QsIHNyYykKKy0gICAgIGNoYXIgKmRlc3Q7CistICAgICBjb25zdCBjaGFyICpzcmM7CisteworLSAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorLSAgICAvKiBEbyBub3RoaW5nLiAqLyA7CistICByZXR1cm4gZGVzdCAtIDE7CistfQorLSNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RjaWdldHRleHQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kY2lnZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zNjk3NDU5NjAgLTA0MDAKK0BAIC0wLDAgKzEsMTIxOSBAQAorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcm5hbCBkY2lnZXR0ZXh0IGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIG1lbXBjcHkoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFCTEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKyNpZmRlZiBfX0dOVUNfXworKyMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisrIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorKyNlbHNlCisrIyBpZmRlZiBfTVNDX1ZFUgorKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorKyMgZWxzZQorKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgIGVsc2UKKysjICAgaWZkZWYgX0FJWAorKyAjcHJhZ21hIGFsbG9jYQorKyMgICBlbHNlCisrIyAgICBpZm5kZWYgYWxsb2NhCisrY2hhciAqYWxsb2NhICgpOworKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaWZuZGVmIGVycm5vCisrZXh0ZXJuIGludCBlcnJubzsKKysjZW5kaWYKKysjaWZuZGVmIF9fc2V0X2Vycm5vCisrIyBkZWZpbmUgX19zZXRfZXJybm8odmFsKSBlcnJubyA9ICh2YWwpCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2lmIGRlZmluZWQgSEFWRV9VTklTVERfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDx1bmlzdGQuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrI2lmZGVmIF9MSUJDCisrICAvKiBHdWVzcyB3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS4KKysgICAgIFNldCB0byAxIG9ubHkgaWYgeW91IGtub3cgZm9yIHN1cmUuICBJbiBjYXNlIG9mIGRvdWJ0LCBzZXQgdG8gMC4gICovCisrIyBpZiBkZWZpbmVkIF9fYWxwaGFfXyB8fCBkZWZpbmVkIF9fYXJtX18gfHwgZGVmaW5lZCBfX2kzODZfXyBcCisrICAgICB8fCBkZWZpbmVkIF9fbTY4a19fIHx8IGRlZmluZWQgX19zMzkwX18KKysjICBkZWZpbmUgSU5URElWMF9SQUlTRVNfU0lHRlBFIDEKKysjIGVsc2UKKysjICBkZWZpbmUgSU5URElWMF9SQUlTRVNfU0lHRlBFIDAKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKysjIGluY2x1ZGUgPHNpZ25hbC5oPgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIEhBVkVfU1lTX1BBUkFNX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZWxzZQorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorKyNlbmRpZgorKyNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorKworKy8qIFRocmVhZCBzYWZldHluZXNzLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrI2Vsc2UKKysvKiBQcm92aWRlIGR1bW15IGltcGxlbWVudGF0aW9uIGlmIHRoaXMgaXMgb3V0c2lkZSBnbGliYy4gICovCisrIyBkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUywgTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3JkbG9jayhOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfdW5sb2NrKE5BTUUpCisrI2VuZGlmCisrCisrLyogQWxpZ25tZW50IG9mIHR5cGVzLiAgKi8KKysjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBfX0dOVUNfXyA+PSAyCisrIyBkZWZpbmUgYWxpZ25vZihUWVBFKSBfX2FsaWdub2ZfXyAoVFlQRSkKKysjZWxzZQorKyMgZGVmaW5lIGFsaWdub2YoVFlQRSkgXAorKyAgICAoKGludCkgJigoc3RydWN0IHsgY2hhciBkdW1teTE7IFRZUEUgZHVtbXkyOyB9ICopIDApLT5kdW1teTIpCisrI2VuZGlmCisrCisrLyogVGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiB0aGUgc3RhbmRhbG9uZSBsaWJpbnRsLmEgbXVzdCBoYXZlIGRpZmZlcmVudAorKyAgIG5hbWVzIHRoYW4gdGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiBHTlUgbGliYywgb3RoZXJ3aXNlIHByb2dyYW1zCisrICAgdXNpbmcgbGliaW50bC5hIGNhbm5vdCBiZSBsaW5rZWQgc3RhdGljYWxseS4gICovCisrI2lmICFkZWZpbmVkIF9MSUJDCisrIyBkZWZpbmUgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4gbGliaW50bF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluCisrIyBkZWZpbmUgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gbGliaW50bF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluCisrIyBkZWZpbmUgX25sX2RlZmF1bHRfZGlybmFtZSBsaWJpbnRsX25sX2RlZmF1bHRfZGlybmFtZQorKyMgZGVmaW5lIF9ubF9kb21haW5fYmluZGluZ3MgbGliaW50bF9ubF9kb21haW5fYmluZGluZ3MKKysjZW5kaWYKKysKKysvKiBTb21lIGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRlZi5oPi4gICovCisrI2lmbmRlZiBvZmZzZXRvZgorKyMgZGVmaW5lIG9mZnNldG9mKHR5cGUsaWRlbnQpICgoc2l6ZV90KSYoKCh0eXBlKikwKS0+aWRlbnQpKQorKyNlbmRpZgorKworKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKysKKysjaWZkZWYgX0xJQkMKKysvKiBSZW5hbWUgdGhlIG5vbiBBTlNJIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKysgICBiZWNhdXNlIHNvbWUgQU5TSSBDIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CisrICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworKyMgZGVmaW5lIGdldGN3ZCBfX2dldGN3ZAorKyMgaWZuZGVmIHN0cGNweQorKyMgIGRlZmluZSBzdHBjcHkgX19zdHBjcHkKKysjIGVuZGlmCisrIyBkZWZpbmUgdGZpbmQgX190ZmluZAorKyNlbHNlCisrIyBpZiAhZGVmaW5lZCBIQVZFX0dFVENXRAorK2NoYXIgKmdldHdkICgpOworKyMgIGRlZmluZSBnZXRjd2QoYnVmLCBtYXgpIGdldHdkIChidWYpCisrIyBlbHNlCisrIyAgaWYgVk1TCisrIyAgIGRlZmluZSBnZXRjd2QoYnVmLCBtYXgpIChnZXRjd2QpIChidWYsIG1heCwgMCkKKysjICBlbHNlCisrY2hhciAqZ2V0Y3dkICgpOworKyMgIGVuZGlmCisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfU1RQQ1BZCisrc3RhdGljIGNoYXIgKnN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9NRU1QQ1BZCisrc3RhdGljIHZvaWQgKm1lbXBjcHkgKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBBbW91bnQgdG8gaW5jcmVhc2UgYnVmZmVyIHNpemUgYnkgaW4gZWFjaCB0cnkuICAqLworKyNkZWZpbmUgUEFUSF9JTkNSIDMyCisrCisrLyogVGhlIGZvbGxvd2luZyBpcyBmcm9tIHBhdGhtYXguaC4gICovCisrLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUgZ2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCisrICAgUEFUSF9NQVggYnV0IG1pZ2h0IGNhdXNlIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyB3aGVuIHN5cy9wYXJhbS5oIGlzCisrICAgbGF0ZXIgaW5jbHVkZWQgKGFzIG9uIE1PUkUvQlNEIDQuMykuICAqLworKyNpZiBkZWZpbmVkIF9QT1NJWF9WRVJTSU9OIHx8IChkZWZpbmVkIEhBVkVfTElNSVRTX0ggJiYgIWRlZmluZWQgX19HTlVDX18pCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIF9QT1NJWF9QQVRIX01BWAorKyMgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTUKKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgUEFUSF9NQVggJiYgZGVmaW5lZCBfUENfUEFUSF9NQVgKKysjIGRlZmluZSBQQVRIX01BWCAocGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSA8IDEgPyAxMDI0IDogcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSkKKysjZW5kaWYKKysKKysvKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4uICAqLworKyNpZiBkZWZpbmVkIEhBVkVfU1lTX1BBUkFNX0ggJiYgIWRlZmluZWQgUEFUSF9NQVggJiYgIWRlZmluZWQgTUFYUEFUSExFTgorKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2VuZGlmCisrCisrI2lmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgTUFYUEFUSExFTgorKyMgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKysjZW5kaWYKKysKKysjaWZuZGVmIFBBVEhfTUFYCisrIyBkZWZpbmUgUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCisrI2VuZGlmCisrCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpdCBtYXkgYmUgY29uY2F0ZW5hdGVkIHRvIGEgZGlyZWN0b3J5IHBhdGhuYW1lLgorKyAgIElTX1BBVEhfV0lUSF9ESVIoUCkgIHRlc3RzIHdoZXRoZXIgUCBjb250YWlucyBhIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uLgorKyAqLworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorKyMgZGVmaW5lIEhBU19ERVZJQ0UoUCkgXAorKyAgICAoKCgoUClbMF0gPj0gJ0EnICYmIChQKVswXSA8PSAnWicpIHx8ICgoUClbMF0gPj0gJ2EnICYmIChQKVswXSA8PSAneicpKSBcCisrICAgICAmJiAoUClbMV0gPT0gJzonKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgKElTU0xBU0ggKChQKVswXSkgfHwgSEFTX0RFVklDRSAoUCkpCisrIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSBcCisrICAgIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCB8fCBzdHJjaHIgKFAsICdcXCcpICE9IE5VTEwgfHwgSEFTX0RFVklDRSAoUCkpCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgSVNTTEFTSCAoKFApWzBdKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMKQorKyNlbmRpZgorKworKy8qIFRoaXMgaXMgdGhlIHR5cGUgdXNlZCBmb3IgdGhlIHNlYXJjaCB0cmVlIHdoZXJlIGtub3duIHRyYW5zbGF0aW9ucworKyAgIGFyZSBzdG9yZWQuICAqLworK3N0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90CisreworKyAgLyogRG9tYWluIGluIHdoaWNoIHRvIHNlYXJjaC4gICovCisrICBjaGFyICpkb21haW5uYW1lOworKworKyAgLyogVGhlIGNhdGVnb3J5LiAgKi8KKysgIGludCBjYXRlZ29yeTsKKysKKysgIC8qIFN0YXRlIG9mIHRoZSBjYXRhbG9nIGNvdW50ZXIgYXQgdGhlIHBvaW50IHRoZSBzdHJpbmcgd2FzIGZvdW5kLiAgKi8KKysgIGludCBjb3VudGVyOworKworKyAgLyogQ2F0YWxvZyB3aGVyZSB0aGUgc3RyaW5nIHdhcyBmb3VuZC4gICovCisrICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW47CisrCisrICAvKiBBbmQgZmluYWxseSB0aGUgdHJhbnNsYXRpb24uICAqLworKyAgY29uc3QgY2hhciAqdHJhbnNsYXRpb247CisrICBzaXplX3QgdHJhbnNsYXRpb25fbGVuZ3RoOworKworKyAgLyogUG9pbnRlciB0byB0aGUgc3RyaW5nIGluIHF1ZXN0aW9uLiAgKi8KKysgIGNoYXIgbXNnaWRbWkVST107CisrfTsKKysKKysvKiBSb290IG9mIHRoZSBzZWFyY2ggdHJlZSB3aXRoIGtub3duIHRyYW5zbGF0aW9ucy4gIFdlIGNhbiB1c2UgdGhpcworKyAgIG9ubHkgaWYgdGhlIHN5c3RlbSBwcm92aWRlcyB0aGUgYHRzZWFyY2gnIGZ1bmN0aW9uIGZhbWlseS4gICovCisrI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPHNlYXJjaC5oPgorKworK3N0YXRpYyB2b2lkICpyb290OworKworKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgdHNlYXJjaCBfX3RzZWFyY2gKKysjIGVuZGlmCisrCisrLyogRnVuY3Rpb24gdG8gY29tcGFyZSB0d28gZW50cmllcyBpbiB0aGUgdGFibGUgb2Yga25vd24gdHJhbnNsYXRpb25zLiAgKi8KKytzdGF0aWMgaW50CisrdHJhbnNjbXAgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKKyt7CisrICBjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqczE7CisrICBjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqczI7CisrICBpbnQgcmVzdWx0OworKworKyAgczEgPSAoY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikgcDE7CisrICBzMiA9IChjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKSBwMjsKKysKKysgIHJlc3VsdCA9IHN0cmNtcCAoczEtPm1zZ2lkLCBzMi0+bXNnaWQpOworKyAgaWYgKHJlc3VsdCA9PSAwKQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gc3RyY21wIChzMS0+ZG9tYWlubmFtZSwgczItPmRvbWFpbm5hbWUpOworKyAgICAgIGlmIChyZXN1bHQgPT0gMCkKKysJLyogV2UgY29tcGFyZSB0aGUgY2F0ZWdvcnkgbGFzdCAodGhvdWdoIHRoaXMgaXMgdGhlIGNoZWFwZXN0CisrCSAgIG9wZXJhdGlvbikgc2luY2UgaXQgaXMgaG9wZWZ1bGx5IGFsd2F5cyB0aGUgc2FtZSAobmFtZWx5CisrCSAgIExDX01FU1NBR0VTKS4gICovCisrCXJlc3VsdCA9IHMxLT5jYXRlZ29yeSAtIHMyLT5jYXRlZ29yeTsKKysgICAgfQorKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrI2VuZGlmCisrCisrI2lmbmRlZiBJTlRWQVJERUYKKysjIGRlZmluZSBJTlRWQVJERUYobmFtZSkKKysjZW5kaWYKKysjaWZuZGVmIElOVFVTRQorKyMgZGVmaW5lIElOVFVTRShuYW1lKSBuYW1lCisrI2VuZGlmCisrCisrLyogTmFtZSBvZiB0aGUgZGVmYXVsdCBkb21haW4gdXNlZCBmb3IgZ2V0dGV4dCgzKSBwcmlvciBhbnkgY2FsbCB0bworKyAgIHRleHRkb21haW4oMykuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBpcyAibWVzc2FnZXMiLiAgKi8KKytjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluW10gYXR0cmlidXRlX2hpZGRlbiA9ICJtZXNzYWdlcyI7CisrCisrLyogVmFsdWUgdXNlZCBhcyB0aGUgZGVmYXVsdCBkb21haW4gZm9yIGdldHRleHQoMykuICAqLworK2NvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGF0dHJpYnV0ZV9oaWRkZW4KKysgICAgID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CisrCisrLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworKyNpZiBkZWZpbmVkIF9fRU1YX18KKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW107CisrI2Vsc2UKKytjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXSA9IExPQ0FMRURJUjsKKytJTlRWQVJERUYgKF9ubF9kZWZhdWx0X2Rpcm5hbWUpCisrI2VuZGlmCisrCisrLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMgY3JlYXRlZCBieSBiaW5kdGV4dGRvbWFpbigpCisrICAgY2FsbHMuICAqLworK3N0cnVjdCBiaW5kaW5nICpfbmxfZG9tYWluX2JpbmRpbmdzOworKworKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIGNoYXIgKnBsdXJhbF9sb29rdXAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbiwKKysJCQkgICAgdW5zaWduZWQgbG9uZyBpbnQgbiwKKysJCQkgICAgY29uc3QgY2hhciAqdHJhbnNsYXRpb24sIHNpemVfdCB0cmFuc2xhdGlvbl9sZW4pCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKytzdGF0aWMgY29uc3QgY2hhciAqZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGludCBjYXRlZ29yeSwKKysJCQkJCSBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisrIyBkZWZpbmUgY2F0ZWdvcnlfdG9fbmFtZShjYXRlZ29yeSkJX25sX2NhdGVnb3J5X25hbWVzW2NhdGVnb3J5XQorKyNlbHNlCisrc3RhdGljIGNvbnN0IGNoYXIgKmNhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkgaW50ZXJuYWxfZnVuY3Rpb247CisrI2VuZGlmCisrCisrCisrLyogRm9yIHRob3NlIGxvb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrICAgc29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KKysjaWZkZWYgSEFWRV9BTExPQ0EKKysvKiBOb3RoaW5nIGhhcyB0byBiZSBkb25lLiAgKi8KKysjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisrIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHJlc3MpIC8qIG5vdGhpbmcgKi8KKysjIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3RoaW5nICovCisrI2Vsc2UKKytzdHJ1Y3QgYmxvY2tfbGlzdAorK3sKKysgIHZvaWQgKmFkZHJlc3M7CisrICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV4dDsKKyt9OworKyMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyKQkJCQkJCSAgICAgIFwKKysgIGRvIHsJCQkJCQkJCQkgICAgICBcCisrICAgIHN0cnVjdCBibG9ja19saXN0ICpuZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAorKyAgICAvKiBJZiB3ZSBjYW5ub3QgZ2V0IGEgZnJlZSBibG9jayB3ZSBjYW5ub3QgYWRkIHRoZSBuZXcgZWxlbWVudCB0bwkgICAgICBcCisrICAgICAgIHRoZSBsaXN0LiAgKi8JCQkJCQkJICAgICAgXAorKyAgICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKKysgICAgICBuZXdwLT5hZGRyZXNzID0gKGFkZHIpOwkJCQkJCSAgICAgIFwKKysgICAgICBuZXdwLT5uZXh0ID0gKGxpc3QpOwkJCQkJCSAgICAgIFwKKysgICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCisrICAgIH0JCQkJCQkJCQkgICAgICBcCisrICB9IHdoaWxlICgwKQorKyMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAgXAorKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKysgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewkJCQkJCSAgICAgIFwKKysgICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwKKysgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsJCQkJCQkgICAgICBcCisrICAgICAgZnJlZSAob2xkLT5hZGRyZXNzKTsJCQkJCQkgICAgICBcCisrICAgICAgZnJlZSAob2xkKTsJCQkJCQkJICAgICAgXAorKyAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysjIHVuZGVmIGFsbG9jYQorKyMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKKysjIGRlZmluZSBmcmVlYShwKSBmcmVlIChwKQorKyNlbmRpZgkvKiBoYXZlIGFsbG9jYSAqLworKworKworKyNpZmRlZiBfTElCQworKy8qIExpc3Qgb2YgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdHJhbnNsYXRpb25zLiAgKi8KKyt0eXBlZGVmIHN0cnVjdCB0cmFuc21lbV9saXN0CisreworKyAgc3RydWN0IHRyYW5zbWVtX2xpc3QgKm5leHQ7CisrICBjaGFyIGRhdGFbWkVST107CisrfSB0cmFuc21lbV9ibG9ja190OworK3N0YXRpYyBzdHJ1Y3QgdHJhbnNtZW1fbGlzdCAqdHJhbnNtZW1fbGlzdDsKKysjZWxzZQorK3R5cGVkZWYgdW5zaWduZWQgY2hhciB0cmFuc21lbV9ibG9ja190OworKyNlbmRpZgorKworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKysgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisrICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisrICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBEQ0lHRVRURVhUIF9fZGNpZ2V0dGV4dAorKyNlbHNlCisrIyBkZWZpbmUgRENJR0VUVEVYVCBsaWJpbnRsX2RjaWdldHRleHQKKysjZW5kaWYKKysKKysvKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKysjaWZkZWYgX0xJQkMKKytfX2xpYmNfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZCAoLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKyNlbmRpZgorKworKy8qIENoZWNraW5nIHdoZXRoZXIgdGhlIGJpbmFyaWVzIHJ1bnMgU1VJRCBtdXN0IGJlIGRvbmUgYW5kIGdsaWJjIHByb3ZpZGVzCisrICAgZWFzaWVyIG1ldGhvZHMgdGhlcmVmb3JlIHdlIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIEVOQUJMRV9TRUNVUkUgX19saWJjX2VuYWJsZV9zZWN1cmUKKysjIGRlZmluZSBERVRFUk1JTkVfU0VDVVJFCisrI2Vsc2UKKysjIGlmbmRlZiBIQVZFX0dFVFVJRAorKyMgIGRlZmluZSBnZXR1aWQoKSAwCisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfR0VUR0lECisrIyAgZGVmaW5lIGdldGdpZCgpIDAKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9HRVRFVUlECisrIyAgZGVmaW5lIGdldGV1aWQoKSBnZXR1aWQoKQorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX0dFVEVHSUQKKysjICBkZWZpbmUgZ2V0ZWdpZCgpIGdldGdpZCgpCisrIyBlbmRpZgorK3N0YXRpYyBpbnQgZW5hYmxlX3NlY3VyZTsKKysjIGRlZmluZSBFTkFCTEVfU0VDVVJFIChlbmFibGVfc2VjdXJlID09IDEpCisrIyBkZWZpbmUgREVURVJNSU5FX1NFQ1VSRSBcCisrICBpZiAoZW5hYmxlX3NlY3VyZSA9PSAwKQkJCQkJCSAgICAgIFwKKysgICAgewkJCQkJCQkJCSAgICAgIFwKKysgICAgICBpZiAoZ2V0dWlkICgpICE9IGdldGV1aWQgKCkgfHwgZ2V0Z2lkICgpICE9IGdldGVnaWQgKCkpCQkgICAgICBcCisrCWVuYWJsZV9zZWN1cmUgPSAxOwkJCQkJCSAgICAgIFwKKysgICAgICBlbHNlCQkJCQkJCQkgICAgICBcCisrCWVuYWJsZV9zZWN1cmUgPSAtMTsJCQkJCQkgICAgICBcCisrICAgIH0KKysjZW5kaWYKKysKKysvKiBHZXQgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIHRoZSBwbHVyYWwgZXhwcmVzc2lvbi4gICovCisrI2luY2x1ZGUgImV2YWwtcGx1cmFsLmgiCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisrICAgQ0FURUdPUlkgbG9jYWxlIGFuZCwgaWYgUExVUkFMIGlzIG5vbnplcm8sIHNlYXJjaCBvdmVyIHN0cmluZworKyAgIGRlcGVuZGluZyBvbiB0aGUgcGx1cmFsIGZvcm0gZGV0ZXJtaW5lZCBieSBOLiAgKi8KKytjaGFyICoKKytEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKysJICAgIGludCBwbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IG4sIGludCBjYXRlZ29yeSkKKyt7CisrI2lmbmRlZiBIQVZFX0FMTE9DQQorKyAgc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrX2xpc3QgPSBOVUxMOworKyNlbmRpZgorKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworKyAgc3RydWN0IGJpbmRpbmcgKmJpbmRpbmc7CisrICBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWU7CisrICBjb25zdCBjaGFyICpjYXRlZ29yeXZhbHVlOworKyAgY2hhciAqZGlybmFtZSwgKnhkb21haW5uYW1lOworKyAgY2hhciAqc2luZ2xlX2xvY2FsZTsKKysgIGNoYXIgKnJldHZhbDsKKysgIHNpemVfdCByZXRsZW47CisrICBpbnQgc2F2ZWRfZXJybm87CisrI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKysgIHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpzZWFyY2g7CisrICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKmZvdW5kcCA9IE5VTEw7CisrICBzaXplX3QgbXNnaWRfbGVuOworKyNlbmRpZgorKyAgc2l6ZV90IGRvbWFpbm5hbWVfbGVuOworKworKyAgLyogSWYgbm8gcmVhbCBNU0dJRCBpcyBnaXZlbiByZXR1cm4gTlVMTC4gICovCisrICBpZiAobXNnaWQxID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyNpZmRlZiBfTElCQworKyAgaWYgKGNhdGVnb3J5IDwgMCB8fCBjYXRlZ29yeSA+PSBfX0xDX0xBU1QgfHwgY2F0ZWdvcnkgPT0gTENfQUxMKQorKyAgICAvKiBCb2d1cy4gICovCisrICAgIHJldHVybiAocGx1cmFsID09IDAKKysJICAgID8gKGNoYXIgKikgbXNnaWQxCisrCSAgICAvKiBVc2UgdGhlIEdlcm1hbmljIHBsdXJhbCBydWxlLiAgKi8KKysJICAgIDogbiA9PSAxID8gKGNoYXIgKikgbXNnaWQxIDogKGNoYXIgKikgbXNnaWQyKTsKKysjZW5kaWYKKysKKysgIF9fbGliY19yd2xvY2tfcmRsb2NrIChfbmxfc3RhdGVfbG9jayk7CisrCisrICAvKiBJZiBET01BSU5OQU1FIGlzIE5VTEwsIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBkZWZhdWx0IGRvbWFpbi4gIElmCisrICAgICBDQVRFR09SWSBpcyBub3QgTENfTUVTU0FHRVMgdGhpcyBtaWdodCBub3QgbWFrZSBtdWNoIHNlbnNlIGJ1dCB0aGUKKysgICAgIGRlZmluaXRpb24gbGVmdCB0aGlzIHVuZGVmaW5lZC4gICovCisrICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorKyAgICBkb21haW5uYW1lID0gX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CisrCisrICAvKiBPUy8yIHNwZWNpZmljOiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbGliaW50bCB2ZXJzaW9ucyAgKi8KKysjaWZkZWYgTENfTUVTU0FHRVNfQ09NUEFUCisrICBpZiAoY2F0ZWdvcnkgPT0gTENfTUVTU0FHRVNfQ09NUEFUKQorKyAgICBjYXRlZ29yeSA9IExDX01FU1NBR0VTOworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrICBtc2dpZF9sZW4gPSBzdHJsZW4gKG1zZ2lkMSkgKyAxOworKworKyAgLyogVHJ5IHRvIGZpbmQgdGhlIHRyYW5zbGF0aW9uIGFtb25nIHRob3NlIHdoaWNoIHdlIGZvdW5kIGF0CisrICAgICBzb21lIHRpbWUuICAqLworKyAgc2VhcmNoID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopCisrCSAgIGFsbG9jYSAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkgKyBtc2dpZF9sZW4pOworKyAgbWVtY3B5IChzZWFyY2gtPm1zZ2lkLCBtc2dpZDEsIG1zZ2lkX2xlbik7CisrICBzZWFyY2gtPmRvbWFpbm5hbWUgPSAoY2hhciAqKSBkb21haW5uYW1lOworKyAgc2VhcmNoLT5jYXRlZ29yeSA9IGNhdGVnb3J5OworKworKyAgZm91bmRwID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICoqKSB0ZmluZCAoc2VhcmNoLCAmcm9vdCwgdHJhbnNjbXApOworKyAgZnJlZWEgKHNlYXJjaCk7CisrICBpZiAoZm91bmRwICE9IE5VTEwgJiYgKCpmb3VuZHApLT5jb3VudGVyID09IF9ubF9tc2dfY2F0X2NudHIpCisrICAgIHsKKysgICAgICAvKiBOb3cgZGVhbCB3aXRoIHBsdXJhbC4gICovCisrICAgICAgaWYgKHBsdXJhbCkKKysJcmV0dmFsID0gcGx1cmFsX2xvb2t1cCAoKCpmb3VuZHApLT5kb21haW4sIG4sICgqZm91bmRwKS0+dHJhbnNsYXRpb24sCisrCQkJCSgqZm91bmRwKS0+dHJhbnNsYXRpb25fbGVuZ3RoKTsKKysgICAgICBlbHNlCisrCXJldHZhbCA9IChjaGFyICopICgqZm91bmRwKS0+dHJhbnNsYXRpb247CisrCisrICAgICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysgICAgICByZXR1cm4gcmV0dmFsOworKyAgICB9CisrI2VuZGlmCisrCisrICAvKiBQcmVzZXJ2ZSB0aGUgYGVycm5vJyB2YWx1ZS4gICovCisrICBzYXZlZF9lcnJubyA9IGVycm5vOworKworKyAgLyogU2VlIHdoZXRoZXIgdGhpcyBpcyBhIFNVSUQgYmluYXJ5IG9yIG5vdC4gICovCisrICBERVRFUk1JTkVfU0VDVVJFOworKworKyAgLyogRmlyc3QgZmluZCBtYXRjaGluZyBiaW5kaW5nLiAgKi8KKysgIGZvciAoYmluZGluZyA9IF9ubF9kb21haW5fYmluZGluZ3M7IGJpbmRpbmcgIT0gTlVMTDsgYmluZGluZyA9IGJpbmRpbmctPm5leHQpCisrICAgIHsKKysgICAgICBpbnQgY29tcGFyZSA9IHN0cmNtcCAoZG9tYWlubmFtZSwgYmluZGluZy0+ZG9tYWlubmFtZSk7CisrICAgICAgaWYgKGNvbXBhcmUgPT0gMCkKKysJLyogV2UgZm91bmQgaXQhICAqLworKwlicmVhazsKKysgICAgICBpZiAoY29tcGFyZSA8IDApCisrCXsKKysJICAvKiBJdCBpcyBub3QgaW4gdGhlIGxpc3QuICAqLworKwkgIGJpbmRpbmcgPSBOVUxMOworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIGlmIChiaW5kaW5nID09IE5VTEwpCisrICAgIGRpcm5hbWUgPSAoY2hhciAqKSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrICBlbHNlIGlmIChJU19BQlNPTFVURV9QQVRIIChiaW5kaW5nLT5kaXJuYW1lKSkKKysgICAgZGlybmFtZSA9IGJpbmRpbmctPmRpcm5hbWU7CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUgbm93LiAgKi8KKysgICAgICBzaXplX3QgZGlybmFtZV9sZW4gPSBzdHJsZW4gKGJpbmRpbmctPmRpcm5hbWUpICsgMTsKKysgICAgICBzaXplX3QgcGF0aF9tYXg7CisrICAgICAgY2hhciAqcmV0OworKworKyAgICAgIHBhdGhfbWF4ID0gKHVuc2lnbmVkIGludCkgUEFUSF9NQVg7CisrICAgICAgcGF0aF9tYXggKz0gMjsJCS8qIFRoZSBnZXRjd2QgZG9jcyBzYXkgdG8gZG8gdGhpcy4gICovCisrCisrICAgICAgZm9yICg7OykKKysJeworKwkgIGRpcm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKHBhdGhfbWF4ICsgZGlybmFtZV9sZW4pOworKwkgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgZGlybmFtZSk7CisrCisrCSAgX19zZXRfZXJybm8gKDApOworKwkgIHJldCA9IGdldGN3ZCAoZGlybmFtZSwgcGF0aF9tYXgpOworKwkgIGlmIChyZXQgIT0gTlVMTCB8fCBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBicmVhazsKKysKKysJICBwYXRoX21heCArPSBwYXRoX21heCAvIDI7CisrCSAgcGF0aF9tYXggKz0gUEFUSF9JTkNSOworKwl9CisrCisrICAgICAgaWYgKHJldCA9PSBOVUxMKQorKwkvKiBXZSBjYW5ub3QgZ2V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgRG9uJ3Qgc2lnbmFsIGFuCisrCSAgIGVycm9yIGJ1dCBzaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHN0cmluZy4gICovCisrCWdvdG8gcmV0dXJuX3VudHJhbnNsYXRlZDsKKysKKysgICAgICBzdHBjcHkgKHN0cGNweSAoc3RyY2hyIChkaXJuYW1lLCAnXDAnKSwgIi8iKSwgYmluZGluZy0+ZGlybmFtZSk7CisrICAgIH0KKysKKysgIC8qIE5vdyBkZXRlcm1pbmUgdGhlIHN5bWJvbGljIG5hbWUgb2YgQ0FURUdPUlkgYW5kIGl0cyB2YWx1ZS4gICovCisrICBjYXRlZ29yeW5hbWUgPSBjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSk7CisrICBjYXRlZ29yeXZhbHVlID0gZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGNhdGVnb3J5LCBjYXRlZ29yeW5hbWUpOworKworKyAgZG9tYWlubmFtZV9sZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpOworKyAgeGRvbWFpbm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnluYW1lKQorKwkJCQkgKyBkb21haW5uYW1lX2xlbiArIDUpOworKyAgQUREX0JMT0NLIChibG9ja19saXN0LCB4ZG9tYWlubmFtZSk7CisrCisrICBzdHBjcHkgKG1lbXBjcHkgKHN0cGNweSAoc3RwY3B5ICh4ZG9tYWlubmFtZSwgY2F0ZWdvcnluYW1lKSwgIi8iKSwKKysJCSAgZG9tYWlubmFtZSwgZG9tYWlubmFtZV9sZW4pLAorKwkgICIubW8iKTsKKysKKysgIC8qIENyZWF0aW5nIHdvcmtpbmcgYXJlYS4gICovCisrICBzaW5nbGVfbG9jYWxlID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5dmFsdWUpICsgMSk7CisrICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIHNpbmdsZV9sb2NhbGUpOworKworKworKyAgLyogU2VhcmNoIGZvciB0aGUgZ2l2ZW4gc3RyaW5nLiAgVGhpcyBpcyBhIGxvb3AgYmVjYXVzZSB3ZSBwZXJoYXBzCisrICAgICBnb3QgYW4gb3JkZXJlZCBsaXN0IG9mIGxhbmd1YWdlcyB0byBjb25zaWRlciBmb3IgdGhlIHRyYW5zbGF0aW9uLiAgKi8KKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgLyogTWFrZSBDQVRFR09SWVZBTFVFIHBvaW50IHRvIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIGxpc3QuICAqLworKyAgICAgIHdoaWxlIChjYXRlZ29yeXZhbHVlWzBdICE9ICdcMCcgJiYgY2F0ZWdvcnl2YWx1ZVswXSA9PSAnOicpCisrCSsrY2F0ZWdvcnl2YWx1ZTsKKysgICAgICBpZiAoY2F0ZWdvcnl2YWx1ZVswXSA9PSAnXDAnKQorKwl7CisrCSAgLyogVGhlIHdob2xlIGNvbnRlbnRzIG9mIENBVEVHT1JZVkFMVUUgaGFzIGJlZW4gc2VhcmNoZWQgYnV0CisrCSAgICAgbm8gdmFsaWQgZW50cnkgaGFzIGJlZW4gZm91bmQuICBXZSBzb2x2ZSB0aGlzIHNpdHVhdGlvbgorKwkgICAgIGJ5IGltcGxpY2l0bHkgYXBwZW5kaW5nIGEgIkMiIGVudHJ5LCBpLmUuIG5vIHRyYW5zbGF0aW9uCisrCSAgICAgd2lsbCB0YWtlIHBsYWNlLiAgKi8KKysJICBzaW5nbGVfbG9jYWxlWzBdID0gJ0MnOworKwkgIHNpbmdsZV9sb2NhbGVbMV0gPSAnXDAnOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgY2hhciAqY3AgPSBzaW5nbGVfbG9jYWxlOworKwkgIHdoaWxlIChjYXRlZ29yeXZhbHVlWzBdICE9ICdcMCcgJiYgY2F0ZWdvcnl2YWx1ZVswXSAhPSAnOicpCisrCSAgICAqY3ArKyA9ICpjYXRlZ29yeXZhbHVlKys7CisrCSAgKmNwID0gJ1wwJzsKKysKKysJICAvKiBXaGVuIHRoaXMgaXMgYSBTVUlEIGJpbmFyeSB3ZSBtdXN0IG5vdCBhbGxvdyBhY2Nlc3NpbmcgZmlsZXMKKysJICAgICBvdXRzaWRlIHRoZSBkZWRpY2F0ZWQgZGlyZWN0b3JpZXMuICAqLworKwkgIGlmIChFTkFCTEVfU0VDVVJFICYmIElTX1BBVEhfV0lUSF9ESVIgKHNpbmdsZV9sb2NhbGUpKQorKwkgICAgLyogSW5nb3JlIHRoaXMgZW50cnkuICAqLworKwkgICAgY29udGludWU7CisrCX0KKysKKysgICAgICAvKiBJZiB0aGUgY3VycmVudCBsb2NhbGUgdmFsdWUgaXMgQyAob3IgUE9TSVgpIHdlIGRvbid0IGxvYWQgYQorKwkgZG9tYWluLiAgUmV0dXJuIHRoZSBNU0dJRC4gICovCisrICAgICAgaWYgKHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIkMiKSA9PSAwCisrCSAgfHwgc3RyY21wIChzaW5nbGVfbG9jYWxlLCAiUE9TSVgiKSA9PSAwKQorKwlicmVhazsKKysKKysgICAgICAvKiBGaW5kIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGNhdGFsb2cgbWF0Y2hpbmcgdGhlCisrCSBET01BSU5OQU1FIGFuZCBDQVRFR09SWS4gICovCisrICAgICAgZG9tYWluID0gX25sX2ZpbmRfZG9tYWluIChkaXJuYW1lLCBzaW5nbGVfbG9jYWxlLCB4ZG9tYWlubmFtZSwgYmluZGluZyk7CisrCisrICAgICAgaWYgKGRvbWFpbiAhPSBOVUxMKQorKwl7CisrCSAgcmV0dmFsID0gX25sX2ZpbmRfbXNnIChkb21haW4sIGJpbmRpbmcsIG1zZ2lkMSwgJnJldGxlbik7CisrCisrCSAgaWYgKHJldHZhbCA9PSBOVUxMKQorKwkgICAgeworKwkgICAgICBpbnQgY250OworKworKwkgICAgICBmb3IgKGNudCA9IDA7IGRvbWFpbi0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisrCQl7CisrCQkgIHJldHZhbCA9IF9ubF9maW5kX21zZyAoZG9tYWluLT5zdWNjZXNzb3JbY250XSwgYmluZGluZywKKysJCQkJCSBtc2dpZDEsICZyZXRsZW4pOworKworKwkJICBpZiAocmV0dmFsICE9IE5VTEwpCisrCQkgICAgeworKwkJICAgICAgZG9tYWluID0gZG9tYWluLT5zdWNjZXNzb3JbY250XTsKKysJCSAgICAgIGJyZWFrOworKwkJICAgIH0KKysJCX0KKysJICAgIH0KKysKKysJICBpZiAocmV0dmFsICE9IE5VTEwpCisrCSAgICB7CisrCSAgICAgIC8qIEZvdW5kIHRoZSB0cmFuc2xhdGlvbiBvZiBNU0dJRDEgaW4gZG9tYWluIERPTUFJTjoKKysJCSBzdGFydGluZyBhdCBSRVRWQUwsIFJFVExFTiBieXRlcy4gICovCisrCSAgICAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworKwkgICAgICBpZiAoZm91bmRwID09IE5VTEwpCisrCQl7CisrCQkgIC8qIENyZWF0ZSBhIG5ldyBlbnRyeSBhbmQgYWRkIGl0IHRvIHRoZSBzZWFyY2ggdHJlZS4gICovCisrCQkgIHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpuZXdwOworKworKwkJICBuZXdwID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopCisrCQkgICAgbWFsbG9jIChvZmZzZXRvZiAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QsIG1zZ2lkKQorKwkJCSAgICArIG1zZ2lkX2xlbiArIGRvbWFpbm5hbWVfbGVuICsgMSk7CisrCQkgIGlmIChuZXdwICE9IE5VTEwpCisrCQkgICAgeworKwkJICAgICAgbmV3cC0+ZG9tYWlubmFtZSA9CisrCQkJbWVtcGNweSAobmV3cC0+bXNnaWQsIG1zZ2lkMSwgbXNnaWRfbGVuKTsKKysJCSAgICAgIG1lbWNweSAobmV3cC0+ZG9tYWlubmFtZSwgZG9tYWlubmFtZSwgZG9tYWlubmFtZV9sZW4gKyAxKTsKKysJCSAgICAgIG5ld3AtPmNhdGVnb3J5ID0gY2F0ZWdvcnk7CisrCQkgICAgICBuZXdwLT5jb3VudGVyID0gX25sX21zZ19jYXRfY250cjsKKysJCSAgICAgIG5ld3AtPmRvbWFpbiA9IGRvbWFpbjsKKysJCSAgICAgIG5ld3AtPnRyYW5zbGF0aW9uID0gcmV0dmFsOworKwkJICAgICAgbmV3cC0+dHJhbnNsYXRpb25fbGVuZ3RoID0gcmV0bGVuOworKworKwkJICAgICAgLyogSW5zZXJ0IHRoZSBlbnRyeSBpbiB0aGUgc2VhcmNoIHRyZWUuICAqLworKwkJICAgICAgZm91bmRwID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICoqKQorKwkJCXRzZWFyY2ggKG5ld3AsICZyb290LCB0cmFuc2NtcCk7CisrCQkgICAgICBpZiAoZm91bmRwID09IE5VTEwKKysJCQkgIHx8IF9fYnVpbHRpbl9leHBlY3QgKCpmb3VuZHAgIT0gbmV3cCwgMCkpCisrCQkJLyogVGhlIGluc2VydCBmYWlsZWQuICAqLworKwkJCWZyZWUgKG5ld3ApOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICAvKiBXZSBjYW4gdXBkYXRlIHRoZSBleGlzdGluZyBlbnRyeS4gICovCisrCQkgICgqZm91bmRwKS0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CisrCQkgICgqZm91bmRwKS0+ZG9tYWluID0gZG9tYWluOworKwkJICAoKmZvdW5kcCktPnRyYW5zbGF0aW9uID0gcmV0dmFsOworKwkJICAoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKysJCX0KKysjZW5kaWYKKysJICAgICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKysKKysJICAgICAgLyogTm93IGRlYWwgd2l0aCBwbHVyYWwuICAqLworKwkgICAgICBpZiAocGx1cmFsKQorKwkJcmV0dmFsID0gcGx1cmFsX2xvb2t1cCAoZG9tYWluLCBuLCByZXR2YWwsIHJldGxlbik7CisrCisrCSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrCSAgICAgIHJldHVybiByZXR2YWw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyByZXR1cm5fdW50cmFuc2xhdGVkOgorKyAgLyogUmV0dXJuIHRoZSB1bnRyYW5zbGF0ZWQgTVNHSUQuICAqLworKyAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysjaWZuZGVmIF9MSUJDCisrICBpZiAoIUVOQUJMRV9TRUNVUkUpCisrICAgIHsKKysgICAgICBleHRlcm4gdm9pZCBfbmxfbG9nX3VudHJhbnNsYXRlZCAoY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsCisrCQkJCQljb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkJY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisrCQkJCQlpbnQgcGx1cmFsKTsKKysgICAgICBjb25zdCBjaGFyICpsb2dmaWxlbmFtZSA9IGdldGVudiAoIkdFVFRFWFRfTE9HX1VOVFJBTlNMQVRFRCIpOworKworKyAgICAgIGlmIChsb2dmaWxlbmFtZSAhPSBOVUxMICYmIGxvZ2ZpbGVuYW1lWzBdICE9ICdcMCcpCisrCV9ubF9sb2dfdW50cmFuc2xhdGVkIChsb2dmaWxlbmFtZSwgZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIHBsdXJhbCk7CisrICAgIH0KKysjZW5kaWYKKysgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisrICByZXR1cm4gKHBsdXJhbCA9PSAwCisrCSAgPyAoY2hhciAqKSBtc2dpZDEKKysJICAvKiBVc2UgdGhlIEdlcm1hbmljIHBsdXJhbCBydWxlLiAgKi8KKysJICA6IG4gPT0gMSA/IChjaGFyICopIG1zZ2lkMSA6IChjaGFyICopIG1zZ2lkMik7CisrfQorKworKworK2NoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2ZpbmRfbXNnIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKysJICAgICAgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcsIGNvbnN0IGNoYXIgKm1zZ2lkLAorKwkgICAgICBzaXplX3QgKmxlbmd0aHApCisreworKyAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKysgIG5sc191aW50MzIgbnN0cmluZ3M7CisrICBzaXplX3QgYWN0OworKyAgY2hhciAqcmVzdWx0OworKyAgc2l6ZV90IHJlc3VsdGxlbjsKKysKKysgIGlmIChkb21haW5fZmlsZS0+ZGVjaWRlZCA9PSAwKQorKyAgICBfbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nKTsKKysKKysgIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKysKKysgIG5zdHJpbmdzID0gZG9tYWluLT5uc3RyaW5nczsKKysKKysgIC8qIExvY2F0ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCisrICBpZiAoZG9tYWluLT5oYXNoX3RhYiAhPSBOVUxMKQorKyAgICB7CisrICAgICAgLyogVXNlIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKysgICAgICBubHNfdWludDMyIGxlbiA9IHN0cmxlbiAobXNnaWQpOworKyAgICAgIG5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOworKyAgICAgIG5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKysgICAgICBubHNfdWludDMyIGluY3IgPSAxICsgKGhhc2hfdmFsICUgKGRvbWFpbi0+aGFzaF9zaXplIC0gMikpOworKworKyAgICAgIHdoaWxlICgxKQorKwl7CisrCSAgbmxzX3VpbnQzMiBuc3RyID0KKysJICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwX2hhc2hfdGFiLCBkb21haW4tPmhhc2hfdGFiW2lkeF0pOworKworKwkgIGlmIChuc3RyID09IDApCisrCSAgICAvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgKi8KKysJICAgIHJldHVybiBOVUxMOworKworKwkgIG5zdHItLTsKKysKKysJICAvKiBDb21wYXJlIG1zZ2lkIHdpdGggdGhlIG9yaWdpbmFsIHN0cmluZyBhdCBpbmRleCBuc3RyLgorKwkgICAgIFdlIGNvbXBhcmUgdGhlIGxlbmd0aHMgd2l0aCA+PSwgbm90ID09LCBiZWNhdXNlIHBsdXJhbCBlbnRyaWVzCisrCSAgICAgYXJlIHJlcHJlc2VudGVkIGJ5IHN0cmluZ3Mgd2l0aCBhbiBlbWJlZGRlZCBOVUwuICAqLworKwkgIGlmIChuc3RyIDwgbnN0cmluZ3MKKysJICAgICAgPyBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5vcmlnX3RhYltuc3RyXS5sZW5ndGgpID49IGxlbgorKwkJJiYgKHN0cmNtcCAobXNnaWQsCisrCQkJICAgIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQkJICAgICAgZG9tYWluLT5vcmlnX3RhYltuc3RyXS5vZmZzZXQpKQorKwkJICAgID09IDApCisrCSAgICAgIDogZG9tYWluLT5vcmlnX3N5c2RlcF90YWJbbnN0ciAtIG5zdHJpbmdzXS5sZW5ndGggPiBsZW4KKysJCSYmIChzdHJjbXAgKG1zZ2lkLAorKwkJCSAgICBkb21haW4tPm9yaWdfc3lzZGVwX3RhYltuc3RyIC0gbnN0cmluZ3NdLnBvaW50ZXIpCisrCQkgICAgPT0gMCkpCisrCSAgICB7CisrCSAgICAgIGFjdCA9IG5zdHI7CisrCSAgICAgIGdvdG8gZm91bmQ7CisrCSAgICB9CisrCisrCSAgaWYgKGlkeCA+PSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3IpCisrCSAgICBpZHggLT0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyOworKwkgIGVsc2UKKysJICAgIGlkeCArPSBpbmNyOworKwl9CisrICAgICAgLyogTk9UUkVBQ0hFRCAqLworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBUcnkgdGhlIGRlZmF1bHQgbWV0aG9kOiAgYmluYXJ5IHNlYXJjaCBpbiB0aGUgc29ydGVkIGFycmF5IG9mCisrCSBtZXNzYWdlcy4gICovCisrICAgICAgc2l6ZV90IHRvcCwgYm90dG9tOworKworKyAgICAgIGJvdHRvbSA9IDA7CisrICAgICAgdG9wID0gbnN0cmluZ3M7CisrICAgICAgd2hpbGUgKGJvdHRvbSA8IHRvcCkKKysJeworKwkgIGludCBjbXBfdmFsOworKworKwkgIGFjdCA9IChib3R0b20gKyB0b3ApIC8gMjsKKysJICBjbXBfdmFsID0gc3RyY21wIChtc2dpZCwgKGRvbWFpbi0+ZGF0YQorKwkJCQkgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJCSBkb21haW4tPm9yaWdfdGFiW2FjdF0ub2Zmc2V0KSkpOworKwkgIGlmIChjbXBfdmFsIDwgMCkKKysJICAgIHRvcCA9IGFjdDsKKysJICBlbHNlIGlmIChjbXBfdmFsID4gMCkKKysJICAgIGJvdHRvbSA9IGFjdCArIDE7CisrCSAgZWxzZQorKwkgICAgZ290byBmb3VuZDsKKysJfQorKyAgICAgIC8qIE5vIHRyYW5zbGF0aW9uIHdhcyBmb3VuZC4gICovCisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgZm91bmQ6CisrICAvKiBUaGUgdHJhbnNsYXRpb24gd2FzIGZvdW5kIGF0IGluZGV4IEFDVC4gIElmIHdlIGhhdmUgdG8gY29udmVydCB0aGUKKysgICAgIHN0cmluZyB0byB1c2UgYSBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldCwgdGhpcyBpcyB0aGUgdGltZS4gICovCisrICBpZiAoYWN0IDwgbnN0cmluZ3MpCisrICAgIHsKKysgICAgICByZXN1bHQgPSAoY2hhciAqKQorKwkoZG9tYWluLT5kYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW2FjdF0ub2Zmc2V0KSk7CisrICAgICAgcmVzdWx0bGVuID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW2FjdF0ubGVuZ3RoKSArIDE7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHJlc3VsdCA9IChjaGFyICopIGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYlthY3QgLSBuc3RyaW5nc10ucG9pbnRlcjsKKysgICAgICByZXN1bHRsZW4gPSBkb21haW4tPnRyYW5zX3N5c2RlcF90YWJbYWN0IC0gbnN0cmluZ3NdLmxlbmd0aDsKKysgICAgfQorKworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfSUNPTlYKKysgIGlmIChkb21haW4tPmNvZGVzZXRfY250cgorKyAgICAgICE9IChkb21haW5iaW5kaW5nICE9IE5VTEwgPyBkb21haW5iaW5kaW5nLT5jb2Rlc2V0X2NudHIgOiAwKSkKKysgICAgeworKyAgICAgIC8qIFRoZSBkb21haW4ncyBjb2Rlc2V0IGhhcyBjaGFuZ2VkIHRocm91Z2ggYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKQorKwkgc2luY2UgdGhlIG1lc3NhZ2UgY2F0YWxvZyB3YXMgaW5pdGlhbGl6ZWQgb3IgbGFzdCBhY2Nlc3NlZC4gIFdlCisrCSBoYXZlIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY29udmVydGVyLiAgKi8KKysgICAgICBfbmxfZnJlZV9kb21haW5fY29udiAoZG9tYWluKTsKKysgICAgICBfbmxfaW5pdF9kb21haW5fY29udiAoZG9tYWluX2ZpbGUsIGRvbWFpbiwgZG9tYWluYmluZGluZyk7CisrICAgIH0KKysKKysgIGlmICgKKysjIGlmZGVmIF9MSUJDCisrICAgICAgZG9tYWluLT5jb252ICE9IChfX2djb252X3QpIC0xCisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKyAgICAgIGRvbWFpbi0+Y29udiAhPSAoaWNvbnZfdCkgLTEKKysjICBlbmRpZgorKyMgZW5kaWYKKysgICAgICApCisrICAgIHsKKysgICAgICAvKiBXZSBhcmUgc3VwcG9zZWQgdG8gZG8gYSBjb252ZXJzaW9uLiAgRmlyc3QgYWxsb2NhdGUgYW4KKysJIGFwcHJvcHJpYXRlIHRhYmxlIHdpdGggdGhlIHNhbWUgc3RydWN0dXJlIGFzIHRoZSB0YWJsZQorKwkgb2YgdHJhbnNsYXRpb25zIGluIHRoZSBmaWxlLCB3aGVyZSB3ZSBjYW4gcHV0IHRoZSBwb2ludGVycworKwkgdG8gdGhlIGNvbnZlcnRlZCBzdHJpbmdzIGluLgorKwkgVGhlcmUgaXMgYSBzbGlnaHQgY29tcGxpY2F0aW9uIHdpdGggcGx1cmFsIGVudHJpZXMuICBUaGV5CisrCSBhcmUgcmVwcmVzZW50ZWQgYnkgY29uc2VjdXRpdmUgTlVMIHRlcm1pbmF0ZWQgc3RyaW5ncy4gIFdlCisrCSBoYW5kbGUgdGhpcyBjYXNlIGJ5IGNvbnZlcnRpbmcgUkVTVUxUTEVOIGJ5dGVzLCBpbmNsdWRpbmcKKysJIE5VTHMuICAqLworKworKyAgICAgIGlmIChkb21haW4tPmNvbnZfdGFiID09IE5VTEwKKysJICAmJiAoKGRvbWFpbi0+Y29udl90YWIgPQorKwkJIChjaGFyICoqKSBjYWxsb2MgKG5zdHJpbmdzICsgZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzLAorKwkJCQkgICBzaXplb2YgKGNoYXIgKikpKQorKwkgICAgICA9PSBOVUxMKSkKKysJLyogTWFyayB0aGF0IHdlIGRpZG4ndCBzdWNjZWVkIGFsbG9jYXRpbmcgYSB0YWJsZS4gICovCisrCWRvbWFpbi0+Y29udl90YWIgPSAoY2hhciAqKikgLTE7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRvbWFpbi0+Y29udl90YWIgPT0gKGNoYXIgKiopIC0xLCAwKSkKKysJLyogTm90aGluZyB3ZSBjYW4gZG8sIG5vIG1vcmUgbWVtb3J5LiAgKi8KKysJZ290byBjb252ZXJ0ZWQ7CisrCisrICAgICAgaWYgKGRvbWFpbi0+Y29udl90YWJbYWN0XSA9PSBOVUxMKQorKwl7CisrCSAgLyogV2UgaGF2ZW4ndCB1c2VkIHRoaXMgc3RyaW5nIHNvIGZhciwgc28gaXQgaXMgbm90CisrCSAgICAgdHJhbnNsYXRlZCB5ZXQuICBEbyB0aGlzIG5vdy4gICovCisrCSAgLyogV2UgdXNlIGEgYml0IG1vcmUgZWZmaWNpZW50IG1lbW9yeSBoYW5kbGluZy4KKysJICAgICBXZSBhbGxvY2F0ZSBhbHdheXMgbGFyZ2VyIGJsb2NrcyB3aGljaCBnZXQgdXNlZCBvdmVyCisrCSAgICAgdGltZS4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gbWFueSBzbWFsbCBhbGxvY2F0aW9ucy4gICAqLworKwkgIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKQorKyMgZGVmaW5lIElOSVRJQUxfQkxPQ0tfU0laRQk0MDgwCisrCSAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZyZWVtZW07CisrCSAgc3RhdGljIHNpemVfdCBmcmVlbWVtX3NpemU7CisrCisrCSAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWY7CisrCSAgdW5zaWduZWQgY2hhciAqb3V0YnVmOworKwkgIGludCBtYWxsb2NfY291bnQ7CisrIyBpZm5kZWYgX0xJQkMKKysJICB0cmFuc21lbV9ibG9ja190ICp0cmFuc21lbV9saXN0ID0gTlVMTDsKKysjIGVuZGlmCisrCisrCSAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrCisrCSAgaW5idWYgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZXN1bHQ7CisrCSAgb3V0YnVmID0gZnJlZW1lbSArIHNpemVvZiAoc2l6ZV90KTsKKysKKysJICBtYWxsb2NfY291bnQgPSAwOworKwkgIHdoaWxlICgxKQorKwkgICAgeworKwkgICAgICB0cmFuc21lbV9ibG9ja190ICpuZXdtZW07CisrIyBpZmRlZiBfTElCQworKwkgICAgICBzaXplX3Qgbm9uX3JldmVyc2libGU7CisrCSAgICAgIGludCByZXM7CisrCisrCSAgICAgIGlmIChmcmVlbWVtX3NpemUgPCBzaXplb2YgKHNpemVfdCkpCisrCQlnb3RvIHJlc2l6ZV9mcmVlbWVtOworKworKwkgICAgICByZXMgPSBfX2djb252IChkb21haW4tPmNvbnYsCisrCQkJICAgICAmaW5idWYsIGluYnVmICsgcmVzdWx0bGVuLAorKwkJCSAgICAgJm91dGJ1ZiwKKysJCQkgICAgIG91dGJ1ZiArIGZyZWVtZW1fc2l6ZSAtIHNpemVvZiAoc2l6ZV90KSwKKysJCQkgICAgICZub25fcmV2ZXJzaWJsZSk7CisrCisrCSAgICAgIGlmIChyZXMgPT0gX19HQ09OVl9PSyB8fCByZXMgPT0gX19HQ09OVl9FTVBUWV9JTlBVVCkKKysJCWJyZWFrOworKworKwkgICAgICBpZiAocmVzICE9IF9fR0NPTlZfRlVMTF9PVVRQVVQpCisrCQl7CisrCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrCQkgIGdvdG8gY29udmVydGVkOworKwkJfQorKworKwkgICAgICBpbmJ1ZiA9IHJlc3VsdDsKKysjIGVsc2UKKysjICBpZiBIQVZFX0lDT05WCisrCSAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gKGNvbnN0IGNoYXIgKikgaW5idWY7CisrCSAgICAgIHNpemVfdCBpbmxlZnQgPSByZXN1bHRsZW47CisrCSAgICAgIGNoYXIgKm91dHB0ciA9IChjaGFyICopIG91dGJ1ZjsKKysJICAgICAgc2l6ZV90IG91dGxlZnQ7CisrCisrCSAgICAgIGlmIChmcmVlbWVtX3NpemUgPCBzaXplb2YgKHNpemVfdCkpCisrCQlnb3RvIHJlc2l6ZV9mcmVlbWVtOworKworKwkgICAgICBvdXRsZWZ0ID0gZnJlZW1lbV9zaXplIC0gc2l6ZW9mIChzaXplX3QpOworKwkgICAgICBpZiAoaWNvbnYgKGRvbWFpbi0+Y29udiwKKysJCQkgKElDT05WX0NPTlNUIGNoYXIgKiopICZpbnB0ciwgJmlubGVmdCwKKysJCQkgJm91dHB0ciwgJm91dGxlZnQpCisrCQkgICE9IChzaXplX3QpICgtMSkpCisrCQl7CisrCQkgIG91dGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIG91dHB0cjsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGlmIChlcnJubyAhPSBFMkJJRykKKysJCXsKKysJCSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysJCSAgZ290byBjb252ZXJ0ZWQ7CisrCQl9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrCSAgICByZXNpemVfZnJlZW1lbToKKysJICAgICAgLyogV2UgbXVzdCBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgb3IgcmVzaXplIHRoZSBvbGQgb25lLiAgKi8KKysJICAgICAgaWYgKG1hbGxvY19jb3VudCA+IDApCisrCQl7CisrCQkgICsrbWFsbG9jX2NvdW50OworKwkJICBmcmVlbWVtX3NpemUgPSBtYWxsb2NfY291bnQgKiBJTklUSUFMX0JMT0NLX1NJWkU7CisrCQkgIG5ld21lbSA9ICh0cmFuc21lbV9ibG9ja190ICopIHJlYWxsb2MgKHRyYW5zbWVtX2xpc3QsCisrCQkJCQkJCSBmcmVlbWVtX3NpemUpOworKyMgaWZkZWYgX0xJQkMKKysJCSAgaWYgKG5ld21lbSAhPSBOVUxMKQorKwkJICAgIHRyYW5zbWVtX2xpc3QgPSB0cmFuc21lbV9saXN0LT5uZXh0OworKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgc3RydWN0IHRyYW5zbWVtX2xpc3QgKm9sZCA9IHRyYW5zbWVtX2xpc3Q7CisrCisrCQkgICAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKysJCSAgICAgIGZyZWUgKG9sZCk7CisrCQkgICAgfQorKyMgZW5kaWYKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBtYWxsb2NfY291bnQgPSAxOworKwkJICBmcmVlbWVtX3NpemUgPSBJTklUSUFMX0JMT0NLX1NJWkU7CisrCQkgIG5ld21lbSA9ICh0cmFuc21lbV9ibG9ja190ICopIG1hbGxvYyAoZnJlZW1lbV9zaXplKTsKKysJCX0KKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5ld21lbSA9PSBOVUxMLCAwKSkKKysJCXsKKysJCSAgZnJlZW1lbSA9IE5VTEw7CisrCQkgIGZyZWVtZW1fc2l6ZSA9IDA7CisrCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrCQkgIGdvdG8gY29udmVydGVkOworKwkJfQorKworKyMgaWZkZWYgX0xJQkMKKysJICAgICAgLyogQWRkIHRoZSBibG9jayB0byB0aGUgbGlzdCBvZiBibG9ja3Mgd2UgaGF2ZSB0byBmcmVlCisrICAgICAgICAgICAgICAgICBhdCBzb21lIHBvaW50LiAgKi8KKysJICAgICAgbmV3bWVtLT5uZXh0ID0gdHJhbnNtZW1fbGlzdDsKKysJICAgICAgdHJhbnNtZW1fbGlzdCA9IG5ld21lbTsKKysKKysJICAgICAgZnJlZW1lbSA9IG5ld21lbS0+ZGF0YTsKKysJICAgICAgZnJlZW1lbV9zaXplIC09IG9mZnNldG9mIChzdHJ1Y3QgdHJhbnNtZW1fbGlzdCwgZGF0YSk7CisrIyBlbHNlCisrCSAgICAgIHRyYW5zbWVtX2xpc3QgPSBuZXdtZW07CisrCSAgICAgIGZyZWVtZW0gPSBuZXdtZW07CisrIyBlbmRpZgorKworKwkgICAgICBvdXRidWYgPSBmcmVlbWVtICsgc2l6ZW9mIChzaXplX3QpOworKwkgICAgfQorKworKwkgIC8qIFdlIGhhdmUgbm93IGluIG91ciBidWZmZXIgYSBjb252ZXJ0ZWQgc3RyaW5nLiAgUHV0IHRoaXMKKysJICAgICBpbnRvIHRoZSB0YWJsZSBvZiBjb252ZXJzaW9ucy4gICovCisrCSAgKihzaXplX3QgKikgZnJlZW1lbSA9IG91dGJ1ZiAtIGZyZWVtZW0gLSBzaXplb2YgKHNpemVfdCk7CisrCSAgZG9tYWluLT5jb252X3RhYlthY3RdID0gKGNoYXIgKikgZnJlZW1lbTsKKysJICAvKiBTaHJpbmsgZnJlZW1lbSwgYnV0IGtlZXAgaXQgYWxpZ25lZC4gICovCisrCSAgZnJlZW1lbV9zaXplIC09IG91dGJ1ZiAtIGZyZWVtZW07CisrCSAgZnJlZW1lbSA9IG91dGJ1ZjsKKysJICBmcmVlbWVtICs9IGZyZWVtZW1fc2l6ZSAmIChhbGlnbm9mIChzaXplX3QpIC0gMSk7CisrCSAgZnJlZW1lbV9zaXplID0gZnJlZW1lbV9zaXplICYgfiAoYWxpZ25vZiAoc2l6ZV90KSAtIDEpOworKworKwkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrCX0KKysKKysgICAgICAvKiBOb3cgZG9tYWluLT5jb252X3RhYlthY3RdIGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBvZiBhbGwKKysJIHRoZSBwbHVyYWwgdmFyaWFudHMuICAqLworKyAgICAgIHJlc3VsdCA9IGRvbWFpbi0+Y29udl90YWJbYWN0XSArIHNpemVvZiAoc2l6ZV90KTsKKysgICAgICByZXN1bHRsZW4gPSAqKHNpemVfdCAqKSBkb21haW4tPmNvbnZfdGFiW2FjdF07CisrICAgIH0KKysKKysgY29udmVydGVkOgorKyAgLyogVGhlIHJlc3VsdCBzdHJpbmcgaXMgY29udmVydGVkLiAgKi8KKysKKysjZW5kaWYgLyogX0xJQkMgfHwgSEFWRV9JQ09OViAqLworKworKyAgKmxlbmd0aHAgPSByZXN1bHRsZW47CisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKysvKiBMb29rIHVwIGEgcGx1cmFsIHZhcmlhbnQuICAqLworK3N0YXRpYyBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK3BsdXJhbF9sb29rdXAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpbnQgbiwKKysJICAgICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLCBzaXplX3QgdHJhbnNsYXRpb25fbGVuKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW5kYXRhID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIGRvbWFpbi0+ZGF0YTsKKysgIHVuc2lnbmVkIGxvbmcgaW50IGluZGV4OworKyAgY29uc3QgY2hhciAqcDsKKysKKysgIGluZGV4ID0gcGx1cmFsX2V2YWwgKGRvbWFpbmRhdGEtPnBsdXJhbCwgbik7CisrICBpZiAoaW5kZXggPj0gZG9tYWluZGF0YS0+bnBsdXJhbHMpCisrICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEl0IG1lYW5zIHRoZSBwbHVyYWwgZXhwcmVzc2lvbiBhbmQgdGhlCisrICAgICAgIGdpdmVuIG1heGltdW0gdmFsdWUgZG8gbm90IG1hdGNoLiAgKi8KKysgICAgaW5kZXggPSAwOworKworKyAgLyogU2tpcCBJTkRFWCBzdHJpbmdzIGF0IFRSQU5TTEFUSU9OLiAgKi8KKysgIHAgPSB0cmFuc2xhdGlvbjsKKysgIHdoaWxlIChpbmRleC0tID4gMCkKKysgICAgeworKyNpZmRlZiBfTElCQworKyAgICAgIHAgPSBfX3Jhd21lbWNociAocCwgJ1wwJyk7CisrI2Vsc2UKKysgICAgICBwID0gc3RyY2hyIChwLCAnXDAnKTsKKysjZW5kaWYKKysgICAgICAvKiBBbmQgc2tpcCBvdmVyIHRoZSBOVUwgYnl0ZS4gICovCisrICAgICAgcCsrOworKworKyAgICAgIGlmIChwID49IHRyYW5zbGF0aW9uICsgdHJhbnNsYXRpb25fbGVuKQorKwkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBJdCBtZWFucyB0aGUgcGx1cmFsIGV4cHJlc3Npb24KKysJICAgZXZhbHVhdGVkIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiB2YXJpYW50cworKwkgICBhdmFpbGFibGUgZm9yIE1TR0lEMS4gICovCisrCXJldHVybiAoY2hhciAqKSB0cmFuc2xhdGlvbjsKKysgICAgfQorKyAgcmV0dXJuIChjaGFyICopIHA7CisrfQorKworKyNpZm5kZWYgX0xJQkMKKysvKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGxvY2FsZSBDQVRFR09SWS4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrY2F0ZWdvcnlfdG9fbmFtZSAoaW50IGNhdGVnb3J5KQorK3sKKysgIGNvbnN0IGNoYXIgKnJldHZhbDsKKysKKysgIHN3aXRjaCAoY2F0ZWdvcnkpCisrICB7CisrI2lmZGVmIExDX0NPTExBVEUKKysgIGNhc2UgTENfQ09MTEFURToKKysgICAgcmV0dmFsID0gIkxDX0NPTExBVEUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfQ1RZUEUKKysgIGNhc2UgTENfQ1RZUEU6CisrICAgIHJldHZhbCA9ICJMQ19DVFlQRSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19NT05FVEFSWQorKyAgY2FzZSBMQ19NT05FVEFSWToKKysgICAgcmV0dmFsID0gIkxDX01PTkVUQVJZIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX05VTUVSSUMKKysgIGNhc2UgTENfTlVNRVJJQzoKKysgICAgcmV0dmFsID0gIkxDX05VTUVSSUMiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfVElNRQorKyAgY2FzZSBMQ19USU1FOgorKyAgICByZXR2YWwgPSAiTENfVElNRSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19NRVNTQUdFUworKyAgY2FzZSBMQ19NRVNTQUdFUzoKKysgICAgcmV0dmFsID0gIkxDX01FU1NBR0VTIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX1JFU1BPTlNFCisrICBjYXNlIExDX1JFU1BPTlNFOgorKyAgICByZXR2YWwgPSAiTENfUkVTUE9OU0UiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfQUxMCisrICBjYXNlIExDX0FMTDoKKysgICAgLyogVGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSBidXQgaXMgcGVyaGFwcyBiZXR0ZXIgdGhhbiBhbnkgb3RoZXIKKysgICAgICAgdmFsdWUuICAqLworKyAgICByZXR2YWwgPSAiTENfQUxMIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrICBkZWZhdWx0OgorKyAgICAvKiBJZiB5b3UgaGF2ZSBhIGJldHRlciBpZGVhIGZvciBhIGRlZmF1bHQgdmFsdWUgbGV0IG1lIGtub3cuICAqLworKyAgICByZXR2YWwgPSAiTENfWFhYIjsKKysgIH0KKysKKysgIHJldHVybiByZXR2YWw7CisrfQorKyNlbmRpZgorKworKy8qIEd1ZXNzIHZhbHVlIG9mIGN1cnJlbnQgbG9jYWxlIGZyb20gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorK3sKKysgIGNvbnN0IGNoYXIgKmxhbmd1YWdlOworKyAgY29uc3QgY2hhciAqcmV0dmFsOworKworKyAgLyogVGhlIGhpZ2hlc3QgcHJpb3JpdHkgdmFsdWUgaXMgdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQKKysgICAgIHZhcmlhYmxlLiAgQnV0IHdlIGRvbid0IHVzZSB0aGUgdmFsdWUgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorKyAgICAgbG9jYWxlIGlzIHRoZSBDIGxvY2FsZS4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLiAgKi8KKysgIGxhbmd1YWdlID0gZ2V0ZW52ICgiTEFOR1VBR0UiKTsKKysgIGlmIChsYW5ndWFnZSAhPSBOVUxMICYmIGxhbmd1YWdlWzBdID09ICdcMCcpCisrICAgIGxhbmd1YWdlID0gTlVMTDsKKysKKysgIC8qIFdlIGhhdmUgdG8gcHJvY2VlZCB3aXRoIHRoZSBQT1NJWCBtZXRob2RzIG9mIGxvb2tpbmcgdG8gYExDX0FMTCcsCisrICAgICBgTENfeHh4JywgYW5kIGBMQU5HJy4gIE9uIHNvbWUgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZQorKyAgICAgYHNldGxvY2FsZScgZnVuY3Rpb24gaXRzZWxmLiAgKi8KKysjaWZkZWYgX0xJQkMKKysgIHJldHZhbCA9IF9fY3VycmVudF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnkpOworKyNlbHNlCisrICByZXR2YWwgPSBfbmxfbG9jYWxlX25hbWUgKGNhdGVnb3J5LCBjYXRlZ29yeW5hbWUpOworKyNlbmRpZgorKworKyAgLyogSWdub3JlIExBTkdVQUdFIGlmIHRoZSBsb2NhbGUgaXMgc2V0IHRvICJDIiBiZWNhdXNlCisrICAgICAxLiAiQyIgbG9jYWxlIHVzdWFsbHkgdXNlcyB0aGUgQVNDSUkgZW5jb2RpbmcsIGFuZCBtb3N0IGludGVybmF0aW9uYWwKKysJbWVzc2FnZXMgdXNlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBUaGVzZSBjaGFyYWN0ZXJzIGdldCBkaXNwbGF5ZWQKKysJYXMgcXVlc3Rpb24gbWFya3MgKGlmIHVzaW5nIGdsaWJjJ3MgaWNvbnYoKSkgb3IgYXMgaW52YWxpZCA4LWJpdAorKwljaGFyYWN0ZXJzIChiZWNhdXNlIG90aGVyIGljb252KClzIHJlZnVzZSB0byBjb252ZXJ0IG1vc3Qgbm9uLUFTQ0lJCisrCWNoYXJhY3RlcnMgdG8gQVNDSUkpLiBJbiBhbnkgY2FzZSwgdGhlIG91dHB1dCBpcyB1Z2x5LgorKyAgICAgMi4gVGhlIHByZWNpc2Ugb3V0cHV0IG9mIHNvbWUgcHJvZ3JhbXMgaW4gdGhlICJDIiBsb2NhbGUgaXMgc3BlY2lmaWVkCisrCWJ5IFBPU0lYIGFuZCBzaG91bGQgbm90IGRlcGVuZCBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbGlrZQorKwkiTEFOR1VBR0UiLiAgV2UgYWxsb3cgc3VjaCBwcm9ncmFtcyB0byB1c2UgZ2V0dGV4dCgpLiAgKi8KKysgIHJldHVybiBsYW5ndWFnZSAhPSBOVUxMICYmIHN0cmNtcCAocmV0dmFsLCAiQyIpICE9IDAgPyBsYW5ndWFnZSA6IHJldHZhbDsKKyt9CisrCisrLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCisrCisrLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKysgICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworKyAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCisrICAgdG8gYmUgZGVmaW5lZC4gICovCisrI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKytzdGF0aWMgY2hhciAqCisrc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCisreworKyAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorKyAgICAvKiBEbyBub3RoaW5nLiAqLyA7CisrICByZXR1cm4gZGVzdCAtIDE7CisrfQorKyNlbmRpZgorKworKyNpZiAhX0xJQkMgJiYgIUhBVkVfTUVNUENQWQorK3N0YXRpYyB2b2lkICoKKyttZW1wY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQorK3sKKysgIHJldHVybiAodm9pZCAqKSAoKGNoYXIgKikgbWVtY3B5IChkZXN0LCBzcmMsIG4pICsgbik7CisrfQorKyNlbmRpZgorKworKworKyNpZmRlZiBfTElCQworKy8qIElmIHdlIHdhbnQgdG8gZnJlZSBhbGwgcmVzb3VyY2VzIHdlIGhhdmUgdG8gZG8gc29tZSB3b3JrIGF0CisrICAgcHJvZ3JhbSdzIGVuZC4gICovCisrbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKKyt7CisrICB2b2lkICpvbGQ7CisrCisrICB3aGlsZSAoX25sX2RvbWFpbl9iaW5kaW5ncyAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RydWN0IGJpbmRpbmcgKm9sZHAgPSBfbmxfZG9tYWluX2JpbmRpbmdzOworKyAgICAgIF9ubF9kb21haW5fYmluZGluZ3MgPSBfbmxfZG9tYWluX2JpbmRpbmdzLT5uZXh0OworKyAgICAgIGlmIChvbGRwLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJLyogWWVzLCB0aGlzIGlzIGEgcG9pbnRlciBjb21wYXJpc29uLiAgKi8KKysJZnJlZSAob2xkcC0+ZGlybmFtZSk7CisrICAgICAgZnJlZSAob2xkcC0+Y29kZXNldCk7CisrICAgICAgZnJlZSAob2xkcCk7CisrICAgIH0KKysKKysgIGlmIChfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiAhPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikKKysgICAgLyogWWVzLCBhZ2FpbiBhIHBvaW50ZXIgY29tcGFyaXNvbi4gICovCisrICAgIGZyZWUgKChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluKTsKKysKKysgIC8qIFJlbW92ZSB0aGUgc2VhcmNoIHRyZWUgd2l0aCB0aGUga25vd24gdHJhbnNsYXRpb25zLiAgKi8KKysgIF9fdGRlc3Ryb3kgKHJvb3QsIGZyZWUpOworKyAgcm9vdCA9IE5VTEw7CisrCisrICB3aGlsZSAodHJhbnNtZW1fbGlzdCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgb2xkID0gdHJhbnNtZW1fbGlzdDsKKysgICAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKysgICAgICBmcmVlIChvbGQpOworKyAgICB9CisrfQorKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RjbmdldHRleHQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kY25nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zNzU3NDUwNDggLTA0MDAKK0BAIC0wLDAgKzEsNTcgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKysjZWxzZQorKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisrIyBkZWZpbmUgRENJR0VUVEVYVCBsaWJpbnRsX2RjaWdldHRleHQKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKysgICBsb2NhbGUuICAqLworK2NoYXIgKgorK0RDTkdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCSAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbiwKKysJICAgIGludCBjYXRlZ29yeSkKKyt7CisrICByZXR1cm4gRENJR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIDEsIG4sIGNhdGVnb3J5KTsKKyt9CisrCisrI2lmZGVmIF9MSUJDCisrLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrd2Vha19hbGlhcyAoX19kY25nZXR0ZXh0LCBkY25nZXR0ZXh0KTsKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RnZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zODA3NDQyODggLTA0MDAKK0BAIC0xLDMyICsxLDMzIEBACistLyogZGdldHRleHQuYyAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGdldHRleHQoMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistYW55IGxhdGVyIHZlcnNpb24uCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy1Gb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPGxvY2FsZS5oPgorLSNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyAKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC0zNywxOCArMzgsMTYgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIERHRVRURVhUIF9fZGdldHRleHQKKy0jIGRlZmluZSBEQ0dFVFRFWFQgX19kY2dldHRleHQKKysjIGRlZmluZSBEQ0dFVFRFWFQgSU5UVVNFKF9fZGNnZXR0ZXh0KQorICNlbHNlCistIyBkZWZpbmUgREdFVFRFWFQgZGdldHRleHRfXworLSMgZGVmaW5lIERDR0VUVEVYVCBkY2dldHRleHRfXworKyMgZGVmaW5lIERHRVRURVhUIGxpYmludGxfZGdldHRleHQKKysjIGRlZmluZSBEQ0dFVFRFWFQgbGliaW50bF9kY2dldHRleHQKKyAjZW5kaWYKKyAKKyAvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBvZiB0aGUgY3VycmVudAorICAgIExDX01FU1NBR0VTIGxvY2FsZS4gICovCisgY2hhciAqCistREdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworK0RHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCkKKyB7CisgICByZXR1cm4gRENHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgTENfTUVTU0FHRVMpOworIH0KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kbmdldHRleHQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kbmdldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM4NTc0MzUyOCAtMDQwMAorQEAgLTAsMCArMSw1OSBAQAorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkbmdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZWxzZQorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorKyNlbmRpZgorKworKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisrICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRE5HRVRURVhUIF9fZG5nZXR0ZXh0CisrIyBkZWZpbmUgRENOR0VUVEVYVCBfX2RjbmdldHRleHQKKysjZWxzZQorKyMgZGVmaW5lIEROR0VUVEVYVCBsaWJpbnRsX2RuZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgb2YgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUgYW5kIHNraXAgbWVzc2FnZSBhY2NvcmRpbmcgdG8gdGhlIHBsdXJhbCBmb3JtLiAgKi8KKytjaGFyICoKKytETkdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCSAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorK3sKKysgIHJldHVybiBEQ05HRVRURVhUIChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgTENfTUVTU0FHRVMpOworK30KKysKKysjaWZkZWYgX0xJQkMKKysvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKyt3ZWFrX2FsaWFzIChfX2RuZ2V0dGV4dCwgZG5nZXR0ZXh0KTsKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9ldmFsLXBsdXJhbC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2V2YWwtcGx1cmFsLmgJMjAwNC0wOS0xMiAxNDo0MDozNC4zOTA3NDI3NjggLTA0MDAKK0BAIC0wLDAgKzEsMTA4IEBACisrLyogUGx1cmFsIGV4cHJlc3Npb24gZXZhbHVhdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBTVEFUSUMKKysjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKysjZW5kaWYKKysKKysvKiBFdmFsdWF0ZSB0aGUgcGx1cmFsIGV4cHJlc3Npb24gYW5kIHJldHVybiBhbiBpbmRleCB2YWx1ZS4gICovCisrU1RBVElDCisrdW5zaWduZWQgbG9uZyBpbnQKKytpbnRlcm5hbF9mdW5jdGlvbgorK3BsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyt7CisrICBzd2l0Y2ggKHBleHAtPm5hcmdzKQorKyAgICB7CisrICAgIGNhc2UgMDoKKysgICAgICBzd2l0Y2ggKHBleHAtPm9wZXJhdGlvbikKKysJeworKwljYXNlIHZhcjoKKysJICByZXR1cm4gbjsKKysJY2FzZSBudW06CisrCSAgcmV0dXJuIHBleHAtPnZhbC5udW07CisrCWRlZmF1bHQ6CisrCSAgYnJlYWs7CisrCX0KKysgICAgICAvKiBOT1RSRUFDSEVEICovCisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgMToKKysgICAgICB7CisrCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIGxub3QuICAqLworKwl1bnNpZ25lZCBsb25nIGludCBhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOworKwlyZXR1cm4gISBhcmc7CisrICAgICAgfQorKyAgICBjYXNlIDI6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBsZWZ0YXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJaWYgKHBleHAtPm9wZXJhdGlvbiA9PSBsb3IpCisrCSAgcmV0dXJuIGxlZnRhcmcgfHwgcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzFdLCBuKTsKKysJZWxzZSBpZiAocGV4cC0+b3BlcmF0aW9uID09IGxhbmQpCisrCSAgcmV0dXJuIGxlZnRhcmcgJiYgcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzFdLCBuKTsKKysJZWxzZQorKwkgIHsKKysJICAgIHVuc2lnbmVkIGxvbmcgaW50IHJpZ2h0YXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzFdLCBuKTsKKysKKysJICAgIHN3aXRjaCAocGV4cC0+b3BlcmF0aW9uKQorKwkgICAgICB7CisrCSAgICAgIGNhc2UgbXVsdDoKKysJCXJldHVybiBsZWZ0YXJnICogcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZGl2aWRlOgorKyNpZiAhSU5URElWMF9SQUlTRVNfU0lHRlBFCisrCQlpZiAocmlnaHRhcmcgPT0gMCkKKysJCSAgcmFpc2UgKFNJR0ZQRSk7CisrI2VuZGlmCisrCQlyZXR1cm4gbGVmdGFyZyAvIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIG1vZHVsZToKKysjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorKwkJaWYgKHJpZ2h0YXJnID09IDApCisrCQkgIHJhaXNlIChTSUdGUEUpOworKyNlbmRpZgorKwkJcmV0dXJuIGxlZnRhcmcgJSByaWdodGFyZzsKKysJICAgICAgY2FzZSBwbHVzOgorKwkJcmV0dXJuIGxlZnRhcmcgKyByaWdodGFyZzsKKysJICAgICAgY2FzZSBtaW51czoKKysJCXJldHVybiBsZWZ0YXJnIC0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgbGVzc190aGFuOgorKwkJcmV0dXJuIGxlZnRhcmcgPCByaWdodGFyZzsKKysJICAgICAgY2FzZSBncmVhdGVyX3RoYW46CisrCQlyZXR1cm4gbGVmdGFyZyA+IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGxlc3Nfb3JfZXF1YWw6CisrCQlyZXR1cm4gbGVmdGFyZyA8PSByaWdodGFyZzsKKysJICAgICAgY2FzZSBncmVhdGVyX29yX2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPj0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZXF1YWw6CisrCQlyZXR1cm4gbGVmdGFyZyA9PSByaWdodGFyZzsKKysJICAgICAgY2FzZSBub3RfZXF1YWw6CisrCQlyZXR1cm4gbGVmdGFyZyAhPSByaWdodGFyZzsKKysJICAgICAgZGVmYXVsdDoKKysJCWJyZWFrOworKwkgICAgICB9CisrCSAgfQorKwkvKiBOT1RSRUFDSEVEICovCisrCWJyZWFrOworKyAgICAgIH0KKysgICAgY2FzZSAzOgorKyAgICAgIHsKKysJLyogcGV4cC0+b3BlcmF0aW9uIG11c3QgYmUgcW1vcC4gICovCisrCXVuc2lnbmVkIGxvbmcgaW50IGJvb2xhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOworKwlyZXR1cm4gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzW2Jvb2xhcmcgPyAxIDogMl0sIG4pOworKyAgICAgIH0KKysgICAgfQorKyAgLyogTk9UUkVBQ0hFRCAqLworKyAgcmV0dXJuIDA7CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2V4cGxvZGVuYW1lLmMJMTk5OC0wNC0yNiAwOToyMjozNy4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZXhwbG9kZW5hbWUuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM5NTc0MjAwOCAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KK0BAIC0zNiwxOCArMzcsMjMgQEAKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisrY2hhciAqCisrX25sX2ZpbmRfbGFuZ3VhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgd2hpbGUgKG5hbWVbMF0gIT0gJ1wwJyAmJiBuYW1lWzBdICE9ICdfJyAmJiBuYW1lWzBdICE9ICdAJworKwkgJiYgbmFtZVswXSAhPSAnKycgJiYgbmFtZVswXSAhPSAnLCcpCisrICAgICsrbmFtZTsKKysKKysgIHJldHVybiAoY2hhciAqKSBuYW1lOworK30KKysKKysKKyBpbnQKKy1fbmxfZXhwbG9kZV9uYW1lIChuYW1lLCBsYW5ndWFnZSwgbW9kaWZpZXIsIHRlcnJpdG9yeSwgY29kZXNldCwKKy0JCSAgbm9ybWFsaXplZF9jb2Rlc2V0LCBzcGVjaWFsLCBzcG9uc29yLCByZXZpc2lvbikKKy0gICAgIGNoYXIgKm5hbWU7CistICAgICBjb25zdCBjaGFyICoqbGFuZ3VhZ2U7CistICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXI7CistICAgICBjb25zdCBjaGFyICoqdGVycml0b3J5OworLSAgICAgY29uc3QgY2hhciAqKmNvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0OworLSAgICAgY29uc3QgY2hhciAqKnNwZWNpYWw7CistICAgICBjb25zdCBjaGFyICoqc3BvbnNvcjsKKy0gICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbjsKKytfbmxfZXhwbG9kZV9uYW1lIChjaGFyICpuYW1lLAorKwkJICBjb25zdCBjaGFyICoqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKiptb2RpZmllciwKKysJCSAgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwgY29uc3QgY2hhciAqKmNvZGVzZXQsCisrCQkgIGNvbnN0IGNoYXIgKipub3JtYWxpemVkX2NvZGVzZXQsIGNvbnN0IGNoYXIgKipzcGVjaWFsLAorKwkJICBjb25zdCBjaGFyICoqc3BvbnNvciwgY29uc3QgY2hhciAqKnJldmlzaW9uKQorIHsKKyAgIGVudW0geyB1bmRlY2lkZWQsIHhwZywgY2VuIH0gc3ludGF4OworICAgY2hhciAqY3A7CitAQCAtNjcsOSArNzMsNyBAQAorICAgbWFzayA9IDA7CisgICBzeW50YXggPSB1bmRlY2lkZWQ7CisgICAqbGFuZ3VhZ2UgPSBjcCA9IG5hbWU7CistICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnXycgJiYgY3BbMF0gIT0gJ0AnCistCSAmJiBjcFswXSAhPSAnKycgJiYgY3BbMF0gIT0gJywnKQorLSAgICArK2NwOworKyAgY3AgPSBfbmxfZmluZF9sYW5ndWFnZSAoKmxhbmd1YWdlKTsKKyAKKyAgIGlmICgqbGFuZ3VhZ2UgPT0gY3ApCisgICAgIC8qIFRoaXMgZG9lcyBub3QgbWFrZSBzZW5zZTogbGFuZ3VhZ2UgaGFzIHRvIGJlIHNwZWNpZmllZC4gIFVzZQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2ZpbmRkb21haW4uYwkxOTk4LTA0LTI2IDA5OjIyOjM2LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9maW5kZG9tYWluLmMJMjAwNC0wOS0xMiAxNDo0MDozNC40MTU3Mzg5NjggLTA0MDAKK0BAIC0xLDY0ICsxLDQwIEBACisgLyogSGFuZGxlIGxpc3Qgb2YgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5vcmc+LCAxOTk1LgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgPGN0eXBlLmg+CistI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZWxzZQorLXZvaWQgZnJlZSAoKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorLSNlbmRpZgorLSNpZiAhSEFWRV9TVFJDSFIgJiYgIWRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBzdHJjaHIKKy0jICBkZWZpbmUgc3RyY2hyIGluZGV4CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisgI2lmIGRlZmluZWQgSEFWRV9VTklTVERfSCB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSAiZ2V0dGV4dC5oIgorICNpbmNsdWRlICJnZXR0ZXh0UC5oIgorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8bGliaW50bC5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworQEAgLTcwLDEwICs0Niw5IEBACisgICAgdGhlIERPTUFJTk5BTUUgYW5kIENBVEVHT1JZIHBhcmFtZXRlcnMgd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50bHkKKyAgICBlc3RhYmxpc2hlZCBiaW5kaW5ncy4gICovCisgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqCistX25sX2ZpbmRfZG9tYWluIChkaXJuYW1lLCBsb2NhbGUsIGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkaXJuYW1lOworLSAgICAgY2hhciAqbG9jYWxlOworLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9maW5kX2RvbWFpbiAoY29uc3QgY2hhciAqZGlybmFtZSwgY2hhciAqbG9jYWxlLAorKwkJIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQorIHsKKyAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKyAgIGNvbnN0IGNoYXIgKmxhbmd1YWdlOworQEAgLTk1LDkgKzcwLDkgQEAKKyAKKyAJbGFuZ3VhZ2VbX3RlcnJpdG9yeV1bK2F1ZGllbmNlXVsrc3BlY2lhbF1bLFtzcG9uc29yXVtfcmV2aXNpb25dXQorIAorLSAgICAgQmVzaWRlIHRoZSBmaXJzdCBhbGwgb2YgdGhlbSBhcmUgYWxsb3dlZCB0byBiZSBtaXNzaW5nLiAgSWYgdGhlCistICAgICBmdWxsIHNwZWNpZmllZCBsb2NhbGUgaXMgbm90IGZvdW5kLCB0aGUgbGVzcyBzcGVjaWZpYyBvbmUgYXJlCistICAgICBsb29rZWQgZm9yLiAgVGhlIHZhcmlvdXMgcGFydCB3aWxsIGJlIHN0cmlwcGVkIG9mIGFjY29yZGluZyB0bworKyAgICAgQmVzaWRlIHRoZSBmaXJzdCBwYXJ0IGFsbCBvZiB0aGVtIGFyZSBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuICBJZgorKyAgICAgdGhlIGZ1bGwgc3BlY2lmaWVkIGxvY2FsZSBpcyBub3QgZm91bmQsIHRoZSBsZXNzIHNwZWNpZmljIG9uZSBhcmUKKysgICAgIGxvb2tlZCBmb3IuICBUaGUgdmFyaW91cyBwYXJ0cyB3aWxsIGJlIHN0cmlwcGVkIG9mZiBhY2NvcmRpbmcgdG8KKyAgICAgIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisgCQkoMSkgcmV2aXNpb24KKyAJCSgyKSBzcG9uc29yCitAQCAtMTE5LDcgKzk0LDcgQEAKKyAgICAgICBpbnQgY250OworIAorICAgICAgIGlmIChyZXR2YWwtPmRlY2lkZWQgPT0gMCkKKy0JX25sX2xvYWRfZG9tYWluIChyZXR2YWwpOworKwlfbmxfbG9hZF9kb21haW4gKHJldHZhbCwgZG9tYWluYmluZGluZyk7CisgCisgICAgICAgaWYgKHJldHZhbC0+ZGF0YSAhPSBOVUxMKQorIAlyZXR1cm4gcmV0dmFsOworQEAgLTEyNyw3ICsxMDIsNyBAQAorICAgICAgIGZvciAoY250ID0gMDsgcmV0dmFsLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKyAJeworIAkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kZWNpZGVkID09IDApCistCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0pOworKwkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLCBkb21haW5iaW5kaW5nKTsKKyAKKyAJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGF0YSAhPSBOVUxMKQorIAkgICAgYnJlYWs7CitAQCAtMTQyLDEyICsxMTcsMTggQEAKKyAgIGFsaWFzX3ZhbHVlID0gX25sX2V4cGFuZF9hbGlhcyAobG9jYWxlKTsKKyAgIGlmIChhbGlhc192YWx1ZSAhPSBOVUxMKQorICAgICB7CisrI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorKyAgICAgIGxvY2FsZSA9IHN0cmR1cCAoYWxpYXNfdmFsdWUpOworKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCkKKysJcmV0dXJuIE5VTEw7CisrI2Vsc2UKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChhbGlhc192YWx1ZSkgKyAxOworICAgICAgIGxvY2FsZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKyAgICAgICBpZiAobG9jYWxlID09IE5VTEwpCisgCXJldHVybiBOVUxMOworIAorICAgICAgIG1lbWNweSAobG9jYWxlLCBhbGlhc192YWx1ZSwgbGVuKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgLyogTm93IHdlIGRldGVybWluZSB0aGUgc2luZ2xlIHBhcnRzIG9mIHRoZSBsb2NhbGUgbmFtZS4gIEZpcnN0CitAQCAtMTY4LDE0ICsxNDksMTQgQEAKKyAgICAgcmV0dXJuIE5VTEw7CisgCisgICBpZiAocmV0dmFsLT5kZWNpZGVkID09IDApCistICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsKTsKKysgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwsIGRvbWFpbmJpbmRpbmcpOworICAgaWYgKHJldHZhbC0+ZGF0YSA9PSBOVUxMKQorICAgICB7CisgICAgICAgaW50IGNudDsKKyAgICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisgCXsKKyAJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA9PSAwKQorLQkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdKTsKKysJICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSwgZG9tYWluYmluZGluZyk7CisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRhdGEgIT0gTlVMTCkKKyAJICAgIGJyZWFrOworIAl9CitAQCAtMTg1LDUgKzE2NiwyNyBAQAorICAgaWYgKGFsaWFzX3ZhbHVlICE9IE5VTEwpCisgICAgIGZyZWUgKGxvY2FsZSk7CisgCisrICAvKiBUaGUgc3BhY2UgZm9yIG5vcm1hbGl6ZWRfY29kZXNldCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICBGcmVlIGl0LiAgKi8KKysgIGlmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkKKysgICAgZnJlZSAoKHZvaWQgKikgbm9ybWFsaXplZF9jb2Rlc2V0KTsKKysKKyAgIHJldHVybiByZXR2YWw7CisgfQorKworKworKyNpZmRlZiBfTElCQworK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisreworKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqcnVucCA9IF9ubF9sb2FkZWRfZG9tYWluczsKKysKKysgIHdoaWxlIChydW5wICE9IE5VTEwpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpoZXJlID0gcnVucDsKKysgICAgICBpZiAocnVucC0+ZGF0YSAhPSBOVUxMKQorKwlfbmxfdW5sb2FkX2RvbWFpbiAoKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIHJ1bnAtPmRhdGEpOworKyAgICAgIHJ1bnAgPSBydW5wLT5uZXh0OworKyAgICAgIGZyZWUgKChjaGFyICopIGhlcmUtPmZpbGVuYW1lKTsKKysgICAgICBmcmVlIChoZXJlKTsKKysgICAgfQorK30KKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9nZXR0ZXh0LmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDIwNzM4MjA4IC0wNDAwCitAQCAtMSwxOSArMSwyMCBAQAorLS8qIEltcGxlbWVudGF0aW9uIG9mIGdldHRleHQoMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogSW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorQEAgLTIzLDIxICsyNCwxNCBAQAorICMgZGVmaW5lIF9fbmVlZF9OVUxMCisgIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyAjZWxzZQorLSMgaWZkZWYgU1REQ19IRUFERVJTCistIyAgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKy0jIGVsc2UKKy0jICBpZmRlZiBIQVZFX1NUUklOR19ICistIyAgIGluY2x1ZGUgPHN0cmluZy5oPgorLSMgIGVsc2UKKy0jICAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCistIyAgZW5kaWYKKy0jIGVuZGlmCisrIyBpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIEp1c3QgZm9yIE5VTEwuICAqLworICNlbmRpZgorIAorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8bGliaW50bC5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworQEAgLTQ4LDIwICs0MiwxOSBAQAorICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgR0VUVEVYVCBfX2dldHRleHQKKy0jIGRlZmluZSBER0VUVEVYVCBfX2RnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyAjZWxzZQorLSMgZGVmaW5lIEdFVFRFWFQgZ2V0dGV4dF9fCistIyBkZWZpbmUgREdFVFRFWFQgZGdldHRleHRfXworKyMgZGVmaW5lIEdFVFRFWFQgbGliaW50bF9nZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKyAgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorICAgIHRleHQpLiAgKi8KKyBjaGFyICoKKy1HRVRURVhUIChtc2dpZCkKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworK0dFVFRFWFQgKGNvbnN0IGNoYXIgKm1zZ2lkKQorIHsKKy0gIHJldHVybiBER0VUVEVYVCAoTlVMTCwgbXNnaWQpOworKyAgcmV0dXJuIERDR0VUVEVYVCAoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKTsKKyB9CisgCisgI2lmZGVmIF9MSUJDCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dC5oCTE5OTgtMDQtMjYgMDk6MjI6MzUuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2dldHRleHQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTA1ICswLDAgQEAKKy0vKiBJbnRlcm5hbCBoZWFkZXIgZm9yIEdOVSBnZXR0ZXh0IGludGVybmF0aW9uYWxpemF0aW9uIGZ1bmN0aW9ucworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKy0gICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCistICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworLQorLSNpZm5kZWYgX0dFVFRFWFRfSAorLSNkZWZpbmUgX0dFVFRFWFRfSCAxCistCistI2luY2x1ZGUgPHN0ZGlvLmg+CistCistI2lmIEhBVkVfTElNSVRTX0ggfHwgX0xJQkMKKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0vKiBUaGUgbWFnaWMgbnVtYmVyIG9mIHRoZSBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdC4gICovCistI2RlZmluZSBfTUFHSUMgMHg5NTA0MTJkZQorLSNkZWZpbmUgX01BR0lDX1NXQVBQRUQgMHhkZTEyMDQ5NQorLQorLS8qIFJldmlzaW9uIG51bWJlciBvZiB0aGUgY3VycmVudGx5IHVzZWQgLm1vIChiaW5hcnkpIGZpbGUgZm9ybWF0LiAgKi8KKy0jZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUiAwCistCistLyogVGhlIGZvbGxvd2luZyBjb250b3J0aW9ucyBhcmUgYW4gYXR0ZW1wdCB0byB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yCistICAgdG8gZGV0ZXJtaW5lIGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUgdGhhdCBpcyAzMiBiaXRzIHdpZGUuICBBbgorLSAgIGFsdGVybmF0aXZlIGFwcHJvYWNoIGlzIHRvIHVzZSBhdXRvY29uZidzIEFDX0NIRUNLX1NJWkVPRiBtYWNybywgYnV0CistICAgZG9pbmcgdGhhdCB3b3VsZCByZXF1aXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgY29tcGlsZSBhbmQgKnJ1bioKKy0gICB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUuICBMb2NhbGx5IHJ1bm5pbmcgY3Jvc3MtY29tcGlsZWQgZXhlY3V0YWJsZXMKKy0gICBpcyB1c3VhbGx5IG5vdCBwb3NzaWJsZS4gICovCistCistI2lmIF9fU1REQ19fCistIyBkZWZpbmUgVUlOVF9NQVhfMzJfQklUUyA0Mjk0OTY3Mjk1VQorLSNlbHNlCistIyBkZWZpbmUgVUlOVF9NQVhfMzJfQklUUyAweEZGRkZGRkZGCistI2VuZGlmCistCistLyogSWYgVUlOVF9NQVggaXNuJ3QgZGVmaW5lZCwgYXNzdW1lIGl0J3MgYSAzMi1iaXQgdHlwZS4KKy0gICBUaGlzIHNob3VsZCBiZSB2YWxpZCBmb3IgYWxsIHN5c3RlbXMgR05VIGNhcmVzIGFib3V0IGJlY2F1c2UKKy0gICB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAxNi1iaXQgc3lzdGVtcywgYW5kIG9ubHkgbW9kZXJuIHN5c3RlbXMKKy0gICAodGhhdCBjZXJ0YWlubHkgaGF2ZSA8bGltaXRzLmg+KSBoYXZlIDY0Ky1iaXQgaW50ZWdyYWwgdHlwZXMuICAqLworLQorLSNpZm5kZWYgVUlOVF9NQVgKKy0jIGRlZmluZSBVSU5UX01BWCBVSU5UX01BWF8zMl9CSVRTCistI2VuZGlmCistCistI2lmIFVJTlRfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKKy10eXBlZGVmIHVuc2lnbmVkIG5sc191aW50MzI7CistI2Vsc2UKKy0jIGlmIFVTSFJUX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBubHNfdWludDMyOworLSMgZWxzZQorLSMgIGlmIFVMT05HX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBsb25nIG5sc191aW50MzI7CistIyAgZWxzZQorLSAgLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGludGVuZGVkIHRvIHRocm93IGFuIGVycm9yLiAgVXNpbmcgI2Vycm9yIGlzCistICAgICBub3QgcG9ydGFibGUgZW5vdWdoLiAgKi8KKy0gICJDYW5ub3QgZGV0ZXJtaW5lIHVuc2lnbmVkIDMyLWJpdCBkYXRhIHR5cGUuIgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLQorLS8qIEhlYWRlciBmb3IgYmluYXJ5IC5tbyBmaWxlIGZvcm1hdC4gICovCistc3RydWN0IG1vX2ZpbGVfaGVhZGVyCisteworLSAgLyogVGhlIG1hZ2ljIG51bWJlci4gICovCistICBubHNfdWludDMyIG1hZ2ljOworLSAgLyogVGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUgZmlsZSBmb3JtYXQuICAqLworLSAgbmxzX3VpbnQzMiByZXZpc2lvbjsKKy0gIC8qIFRoZSBudW1iZXIgb2Ygc3RyaW5ncyBwYWlycy4gICovCistICBubHNfdWludDMyIG5zdHJpbmdzOworLSAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiBvcmlnaW5hbCBzdHJpbmdzLiAgKi8KKy0gIG5sc191aW50MzIgb3JpZ190YWJfb2Zmc2V0OworLSAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGlvbiBzdHJpbmdzLiAgKi8KKy0gIG5sc191aW50MzIgdHJhbnNfdGFiX29mZnNldDsKKy0gIC8qIFNpemUgb2YgaGFzaGluZyB0YWJsZS4gICovCistICBubHNfdWludDMyIGhhc2hfdGFiX3NpemU7CistICAvKiBPZmZzZXQgb2YgZmlyc3QgaGFzaGluZyBlbnRyeS4gICovCistICBubHNfdWludDMyIGhhc2hfdGFiX29mZnNldDsKKy19OworLQorLXN0cnVjdCBzdHJpbmdfZGVzYworLXsKKy0gIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLiAgKi8KKy0gIG5sc191aW50MzIgbGVuZ3RoOworLSAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKy0gIG5sc191aW50MzIgb2Zmc2V0OworLX07CistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistI2VuZGlmCS8qIGdldHRleHQuaCAgKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9nZXR0ZXh0UC5oCTE5OTgtMDQtMjYgMDk6MjI6MzUuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2dldHRleHRQLmgJMjAwNC0wOS0xMiAxNDo0MDozNC40MjY3MzcyOTYgLTA0MDAKK0BAIC0xLDMzICsxLDUzIEBACistLyogSGVhZGVyIGRlc2NyaWJpbmcgaW50ZXJuYWxzIG9mIGdldHRleHQgbGlicmFyeQorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBIZWFkZXIgZGVzY3JpYmluZyBpbnRlcm5hbHMgb2YgbGliaW50bCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmbmRlZiBfR0VUVEVYVFBfSAorICNkZWZpbmUgX0dFVFRFWFRQX0gKKyAKKysjaW5jbHVkZSA8c3RkZGVmLmg+CQkvKiBHZXQgc2l6ZV90LiAgKi8KKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgIi4uL2ljb252L2djb252X2ludC5oIgorKyNlbHNlCisrIyBpZiBIQVZFX0lDT05WCisrIyAgaW5jbHVkZSA8aWNvbnYuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrCisgI2luY2x1ZGUgImxvYWRpbmZvLmgiCisgCisrI2luY2x1ZGUgImdtby5oIgkJLyogR2V0IG5sc191aW50MzIuICAqLworKworIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpIGFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpICgpCistIyBlbmRpZgorKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKyNpZm5kZWYgYXR0cmlidXRlX2hpZGRlbgorKyMgZGVmaW5lIGF0dHJpYnV0ZV9oaWRkZW4KKysjZW5kaWYKKysKKysvKiBUZWxsIHRoZSBjb21waWxlciB3aGVuIGEgY29uZGl0aW9uYWwgb3IgaW50ZWdlciBleHByZXNzaW9uIGlzCisrICAgYWxtb3N0IGFsd2F5cyB0cnVlIG9yIGFsbW9zdCBhbHdheXMgZmFsc2UuICAqLworKyNpZm5kZWYgSEFWRV9CVUlMVElOX0VYUEVDVAorKyMgZGVmaW5lIF9fYnVpbHRpbl9leHBlY3QoZXhwciwgdmFsKSAoZXhwcikKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIFcKK0BAIC0zNSwzOCArNTUsMTYwIEBACisgI2VuZGlmCisgCisgCistc3RhdGljIG5sc191aW50MzIgU1dBUCBQQVJBTVMgKChubHNfdWludDMyIGkpKTsKKy0KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGJ5dGVzd2FwLmg+CisrIyBkZWZpbmUgU1dBUChpKSBic3dhcF8zMiAoaSkKKysjZWxzZQorIHN0YXRpYyBpbmxpbmUgbmxzX3VpbnQzMgorIFNXQVAgKGkpCisgICAgICBubHNfdWludDMyIGk7CisgeworICAgcmV0dXJuIChpIDw8IDI0KSB8ICgoaSAmIDB4ZmYwMCkgPDwgOCkgfCAoKGkgPj4gOCkgJiAweGZmMDApIHwgKGkgPj4gMjQpOworIH0KKysjZW5kaWYKKysKKyAKKysvKiBJbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcuICAqLworK3N0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MKKyt7CisrICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICAqLworKyAgc2l6ZV90IGxlbmd0aDsKKysgIC8qIFBvaW50ZXIgdG8gYWRkcmVzc2VkIHN0cmluZy4gICovCisrICBjb25zdCBjaGFyICpwb2ludGVyOworK307CisgCisrLyogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuICAqLworIHN0cnVjdCBsb2FkZWRfZG9tYWluCisgeworKyAgLyogUG9pbnRlciB0byBtZW1vcnkgY29udGFpbmluZyB0aGUgLm1vIGZpbGUuICAqLworICAgY29uc3QgY2hhciAqZGF0YTsKKysgIC8qIDEgaWYgdGhlIG1lbW9yeSBpcyBtbWFwKCllZCwgMCBpZiB0aGUgbWVtb3J5IGlzIG1hbGxvYygpZWQuICAqLworKyAgaW50IHVzZV9tbWFwOworKyAgLyogU2l6ZSBvZiBtbWFwKCllZCBtZW1vcnkuICAqLworKyAgc2l6ZV90IG1tYXBfc2l6ZTsKKysgIC8qIDEgaWYgdGhlIC5tbyBmaWxlIHVzZXMgYSBkaWZmZXJlbnQgZW5kaWFubmVzcyB0aGFuIHRoaXMgbWFjaGluZS4gICovCisgICBpbnQgbXVzdF9zd2FwOworKyAgLyogUG9pbnRlciB0byBhZGRpdGlvbmFsIG1hbGxvYygpZWQgbWVtb3J5LiAgKi8KKysgIHZvaWQgKm1hbGxvY2VkOworKworKyAgLyogTnVtYmVyIG9mIHN0YXRpYyBzdHJpbmdzIHBhaXJzLiAgKi8KKyAgIG5sc191aW50MzIgbnN0cmluZ3M7CistICBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKm9yaWdfdGFiOworLSAgc3RydWN0IHN0cmluZ19kZXNjICp0cmFuc190YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIG9yaWdpbmFsIHN0cmluZ3MgaW4gdGhlIGZpbGUuICAqLworKyAgY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKysgIC8qIFBvaW50ZXIgdG8gZGVzY3JpcHRvcnMgb2YgdHJhbnNsYXRlZCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqdHJhbnNfdGFiOworKworKyAgLyogTnVtYmVyIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5ncyBwYWlycy4gICovCisrICBubHNfdWludDMyIG5fc3lzZGVwX3N0cmluZ3M7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIG9yaWdpbmFsIHN5c2RlcCBzdHJpbmdzLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKm9yaWdfc3lzZGVwX3RhYjsKKysgIC8qIFBvaW50ZXIgdG8gZGVzY3JpcHRvcnMgb2YgdHJhbnNsYXRlZCBzeXNkZXAgc3RyaW5ncy4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICp0cmFuc19zeXNkZXBfdGFiOworKworKyAgLyogU2l6ZSBvZiBoYXNoIHRhYmxlLiAgKi8KKyAgIG5sc191aW50MzIgaGFzaF9zaXplOworLSAgbmxzX3VpbnQzMiAqaGFzaF90YWI7CisrICAvKiBQb2ludGVyIHRvIGhhc2ggdGFibGUuICAqLworKyAgY29uc3QgbmxzX3VpbnQzMiAqaGFzaF90YWI7CisrICAvKiAxIGlmIHRoZSBoYXNoIHRhYmxlIHVzZXMgYSBkaWZmZXJlbnQgZW5kaWFubmVzcyB0aGFuIHRoaXMgbWFjaGluZS4gICovCisrICBpbnQgbXVzdF9zd2FwX2hhc2hfdGFiOworKworKyAgaW50IGNvZGVzZXRfY250cjsKKysjaWZkZWYgX0xJQkMKKysgIF9fZ2NvbnZfdCBjb252OworKyNlbHNlCisrIyBpZiBIQVZFX0lDT05WCisrICBpY29udl90IGNvbnY7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgY2hhciAqKmNvbnZfdGFiOworKworKyAgc3RydWN0IGV4cHJlc3Npb24gKnBsdXJhbDsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG5wbHVyYWxzOworIH07CisgCisrLyogV2Ugd2FudCB0byBhbGxvY2F0ZSBhIHN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3QuICBCdXQgSVNPIEMKKysgICBkb2Vzbid0IGFsbG93IHplcm8gc2l6ZWQgYXJyYXlzLiAgKi8KKysjaWZkZWYgX19HTlVDX18KKysjIGRlZmluZSBaRVJPIDAKKysjZWxzZQorKyMgZGVmaW5lIFpFUk8gMQorKyNlbmRpZgorKworKy8qIEEgc2V0IG9mIHNldHRpbmdzIGJvdW5kIHRvIGEgbWVzc2FnZSBkb21haW4uICBVc2VkIHRvIHN0b3JlIHNldHRpbmdzCisrICAgZnJvbSBiaW5kdGV4dGRvbWFpbigpIGFuZCBiaW5kX3RleHRkb21haW5fY29kZXNldCgpLiAgKi8KKyBzdHJ1Y3QgYmluZGluZworIHsKKyAgIHN0cnVjdCBiaW5kaW5nICpuZXh0OworLSAgY2hhciAqZG9tYWlubmFtZTsKKyAgIGNoYXIgKmRpcm5hbWU7CisrICBpbnQgY29kZXNldF9jbnRyOwkvKiBJbmNyZW1lbnRlZCBlYWNoIHRpbWUgY29kZXNldCBjaGFuZ2VzLiAgKi8KKysgIGNoYXIgKmNvZGVzZXQ7CisrICBjaGFyIGRvbWFpbm5hbWVbWkVST107CisgfTsKKyAKKy1zdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfbmxfZmluZF9kb21haW4gUEFSQU1TICgoY29uc3QgY2hhciAqX19kaXJuYW1lLAorLQkJCQkJCSBjaGFyICpfX2xvY2FsZSwKKy0JCQkJCQkgY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7Cistdm9pZCBfbmxfbG9hZF9kb21haW4gUEFSQU1TICgoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW4pKTsKKysvKiBBIGNvdW50ZXIgd2hpY2ggaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHNvbWUgcHJldmlvdXMgdHJhbnNsYXRpb25zCisrICAgYmVjb21lIGludmFsaWQuCisrICAgVGhpcyB2YXJpYWJsZSBpcyBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBQkkgb2YgdGhlIEdOVSBsaWJpbnRsLiAgKi8KKytleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrCisrI2lmbmRlZiBfTElCQworK2NvbnN0IGNoYXIgKl9ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpOworKyNlbmRpZgorKworK3N0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9ubF9maW5kX2RvbWFpbiAoY29uc3QgY2hhciAqX19kaXJuYW1lLCBjaGFyICpfX2xvY2FsZSwKKysJCQkJCSBjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCQkgc3RydWN0IGJpbmRpbmcgKl9fZG9tYWluYmluZGluZykKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3ZvaWQgX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfX2RvbWFpbiwKKysJCSAgICAgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF91bmxvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqX19kb21haW4pCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKytjb25zdCBjaGFyICpfbmxfaW5pdF9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW5fZmlsZSwKKysJCQkJICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqX19kb21haW4sCisrCQkJCSAgc3RydWN0IGJpbmRpbmcgKl9fZG9tYWluYmluZGluZykKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3ZvaWQgX25sX2ZyZWVfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbikKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworKworK2NoYXIgKl9ubF9maW5kX21zZyAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCisrCQkgICAgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcsIGNvbnN0IGNoYXIgKm1zZ2lkLAorKwkJICAgIHNpemVfdCAqbGVuZ3RocCkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworKworKyNpZmRlZiBfTElCQworK2V4dGVybiBjaGFyICpfX2dldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpOworK2V4dGVybiBjaGFyICpfX2RnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpOworK2V4dGVybiBjaGFyICpfX2RjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorKwkJCSAgaW50IF9fY2F0ZWdvcnkpOworK2V4dGVybiBjaGFyICpfX25nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJIHVuc2lnbmVkIGxvbmcgaW50IF9fbik7CisrZXh0ZXJuIGNoYXIgKl9fZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICB1bnNpZ25lZCBsb25nIGludCBuKTsKKytleHRlcm4gY2hhciAqX19kY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpOworK2V4dGVybiBjaGFyICpfX2RjaWdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkgICBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICAgaW50IF9fcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBfX24sCisrCQkJICAgaW50IF9fY2F0ZWdvcnkpOworK2V4dGVybiBjaGFyICpfX3RleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSk7CisrZXh0ZXJuIGNoYXIgKl9fYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkgICAgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKTsKKytleHRlcm4gY2hhciAqX19iaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJY29uc3QgY2hhciAqX19jb2Rlc2V0KTsKKysjZWxzZQorKy8qIERlY2xhcmUgdGhlIGV4cG9ydGVkIGxpYmludGxfKiBmdW5jdGlvbnMsIGluIGEgd2F5IHRoYXQgYWxsb3dzIHVzIHRvCisrICAgY2FsbCB0aGVtIHVuZGVyIHRoZWlyIHJlYWwgbmFtZS4gICovCisrIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKysjIHVuZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorK2V4dGVybiBjaGFyICpsaWJpbnRsX2RjaWdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkJIGludCBfX3BsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAorKwkJCQkgaW50IF9fY2F0ZWdvcnkpOworKyNlbmRpZgorIAorIC8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworIAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2dtby5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2dtby5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDMxNzM2NTM2IC0wNDAwCitAQCAtMCwwICsxLDE0OSBAQAorKy8qIERlc2NyaXB0aW9uIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0OiBnZW5lcmFsIGZpbGUgbGF5b3V0LgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9HRVRURVhUX0gKKysjZGVmaW5lIF9HRVRURVhUX0ggMQorKworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogVGhlIG1hZ2ljIG51bWJlciBvZiB0aGUgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQuICAqLworKyNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKysjZGVmaW5lIF9NQUdJQ19TV0FQUEVEIDB4ZGUxMjA0OTUKKysKKysvKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCisrI2RlZmluZSBNT19SRVZJU0lPTl9OVU1CRVIgMAorKyNkZWZpbmUgTU9fUkVWSVNJT05fTlVNQkVSX1dJVEhfU1lTREVQX0kgMQorKworKy8qIFRoZSBmb2xsb3dpbmcgY29udG9ydGlvbnMgYXJlIGFuIGF0dGVtcHQgdG8gdXNlIHRoZSBDIHByZXByb2Nlc3NvcgorKyAgIHRvIGRldGVybWluZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgMzIgYml0cyB3aWRlLiAgQW4KKysgICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorKyAgIGFzIG9mIHZlcnNpb24gYXV0b2NvbmYtMi4xMywgdGhlIEFDX0NIRUNLX1NJWkVPRiBtYWNybyBkb2Vzbid0IHdvcmsKKysgICB3aGVuIGNyb3NzLWNvbXBpbGluZy4gICovCisrCisrI2lmIF9fU1REQ19fCisrIyBkZWZpbmUgVUlOVF9NQVhfMzJfQklUUyA0Mjk0OTY3Mjk1VQorKyNlbHNlCisrIyBkZWZpbmUgVUlOVF9NQVhfMzJfQklUUyAweEZGRkZGRkZGCisrI2VuZGlmCisrCisrLyogSWYgVUlOVF9NQVggaXNuJ3QgZGVmaW5lZCwgYXNzdW1lIGl0J3MgYSAzMi1iaXQgdHlwZS4KKysgICBUaGlzIHNob3VsZCBiZSB2YWxpZCBmb3IgYWxsIHN5c3RlbXMgR05VIGNhcmVzIGFib3V0IGJlY2F1c2UKKysgICB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAxNi1iaXQgc3lzdGVtcywgYW5kIG9ubHkgbW9kZXJuIHN5c3RlbXMKKysgICAodGhhdCBjZXJ0YWlubHkgaGF2ZSA8bGltaXRzLmg+KSBoYXZlIDY0Ky1iaXQgaW50ZWdyYWwgdHlwZXMuICAqLworKworKyNpZm5kZWYgVUlOVF9NQVgKKysjIGRlZmluZSBVSU5UX01BWCBVSU5UX01BWF8zMl9CSVRTCisrI2VuZGlmCisrCisrI2lmIFVJTlRfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKKyt0eXBlZGVmIHVuc2lnbmVkIG5sc191aW50MzI7CisrI2Vsc2UKKysjIGlmIFVTSFJUX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCisrdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBubHNfdWludDMyOworKyMgZWxzZQorKyMgIGlmIFVMT05HX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIG5sc191aW50MzI7CisrIyAgZWxzZQorKyAgLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGludGVuZGVkIHRvIHRocm93IGFuIGVycm9yLiAgVXNpbmcgI2Vycm9yIGlzCisrICAgICBub3QgcG9ydGFibGUgZW5vdWdoLiAgKi8KKysgICJDYW5ub3QgZGV0ZXJtaW5lIHVuc2lnbmVkIDMyLWJpdCBkYXRhIHR5cGUuIgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKworKy8qIEhlYWRlciBmb3IgYmluYXJ5IC5tbyBmaWxlIGZvcm1hdC4gICovCisrc3RydWN0IG1vX2ZpbGVfaGVhZGVyCisreworKyAgLyogVGhlIG1hZ2ljIG51bWJlci4gICovCisrICBubHNfdWludDMyIG1hZ2ljOworKyAgLyogVGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUgZmlsZSBmb3JtYXQuICAqLworKyAgbmxzX3VpbnQzMiByZXZpc2lvbjsKKysKKysgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgdXNlZCBpbiAubW8gZmlsZXMgd2l0aCBtYWpvciByZXZpc2lvbiAwIG9yIDEuICAqLworKworKyAgLyogVGhlIG51bWJlciBvZiBzdHJpbmdzIHBhaXJzLiAgKi8KKysgIG5sc191aW50MzIgbnN0cmluZ3M7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIG9yaWdpbmFsIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiBvcmlnX3RhYl9vZmZzZXQ7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncy4gICovCisrICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CisrICAvKiBTaXplIG9mIGhhc2ggdGFibGUuICAqLworKyAgbmxzX3VpbnQzMiBoYXNoX3RhYl9zaXplOworKyAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2ggdGFibGUgZW50cnkuICAqLworKyAgbmxzX3VpbnQzMiBoYXNoX3RhYl9vZmZzZXQ7CisrCisrICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWlub3IgcmV2aXNpb24gPj0gMS4gICovCisrCisrICAvKiBUaGUgbnVtYmVyIG9mIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSBkZXNjcmliaW5nIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworKyAgbmxzX3VpbnQzMiBzeXNkZXBfc2VnbWVudHNfb2Zmc2V0OworKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiBvcmlnaW5hbCBzeXNkZXAgc3RyaW5ncy4gICovCisrICBubHNfdWludDMyIG9yaWdfc3lzZGVwX3RhYl9vZmZzZXQ7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiB0cmFuc19zeXNkZXBfdGFiX29mZnNldDsKKyt9OworKworKy8qIERlc2NyaXB0b3IgZm9yIHN0YXRpYyBzdHJpbmcgY29udGFpbmVkIGluIHRoZSBiaW5hcnkgLm1vIGZpbGUuICAqLworK3N0cnVjdCBzdHJpbmdfZGVzYworK3sKKysgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICAqLworKyAgbmxzX3VpbnQzMiBsZW5ndGg7CisrICAvKiBPZmZzZXQgb2Ygc3RyaW5nIGluIGZpbGUuICAqLworKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisrfTsKKysKKysvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWlub3IgcmV2aXNpb24gPj0gMS4gICovCisrCisrLyogRGVzY3JpcHRvciBmb3Igc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcgc2VnbWVudC4gICovCisrc3RydWN0IHN5c2RlcF9zZWdtZW50CisreworKyAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIG5sc191aW50MzIgbGVuZ3RoOworKyAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKysgIG5sc191aW50MzIgb2Zmc2V0OworK307CisrCisrLyogRGVzY3JpcHRvciBmb3Igc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcuICAqLworK3N0cnVjdCBzeXNkZXBfc3RyaW5nCisreworKyAgLyogT2Zmc2V0IG9mIHN0YXRpYyBzdHJpbmcgc2VnbWVudHMgaW4gZmlsZS4gICovCisrICBubHNfdWludDMyIG9mZnNldDsKKysgIC8qIEFsdGVybmF0aW5nIHNlcXVlbmNlIG9mIHN0YXRpYyBhbmQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4KKysgICAgIFRoZSBsYXN0IHNlZ21lbnQgaXMgYSBzdGF0aWMgc2VnbWVudCwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICAqLworKyAgc3RydWN0IHNlZ21lbnRfcGFpcgorKyAgeworKyAgICAvKiBTaXplIG9mIHN0YXRpYyBzZWdtZW50LiAgKi8KKysgICAgbmxzX3VpbnQzMiBzZWdzaXplOworKyAgICAvKiBSZWZlcmVuY2UgdG8gc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcgc2VnbWVudCwgb3IgfjAgYXQgdGhlIGVuZC4gICovCisrICAgIG5sc191aW50MzIgc3lzZGVwcmVmOworKyAgfSBzZWdtZW50c1sxXTsKKyt9OworKworKy8qIE1hcmtlciBmb3IgdGhlIGVuZCBvZiB0aGUgc2VnbWVudHNbXSBhcnJheS4gIFRoaXMgaGFzIHRoZSB2YWx1ZSAweEZGRkZGRkZGLAorKyAgIHJlZ2FyZGxlc3Mgd2hldGhlciAnaW50JyBpcyAxNiBiaXQsIDMyIGJpdCwgb3IgNjQgYml0LiAgKi8KKysjZGVmaW5lIFNFR01FTlRTX0VORCAoKG5sc191aW50MzIpIH4wKQorKworKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworKworKyNlbmRpZgkvKiBnZXR0ZXh0LmggICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvaGFzaC1zdHJpbmcuaAkxOTk4LTA0LTI2IDA5OjIyOjM2LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9oYXNoLXN0cmluZy5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDM2NzM1Nzc2IC0wNDAwCitAQCAtMSwzNSArMSwyMyBAQAorLS8qIEltcGxlbWVudHMgYSBzdHJpbmcgaGFzaGluZyBmdW5jdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogRGVzY3JpcHRpb24gb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQ6IHN0cmluZyBoYXNoaW5nIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5Ny0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCistICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorLSAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0jaWZkZWYgSEFWRV9WQUxVRVNfSAorLSMgaW5jbHVkZSA8dmFsdWVzLmg+CistI2VuZGlmCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorLSNpZm5kZWYgUEFSQU1TCistIyBpZiBfX1NURENfXworLSMgIGRlZmluZSBQQVJBTVMoQXJncykgQXJncworLSMgZWxzZQorLSMgIGRlZmluZSBQQVJBTVMoQXJncykgKCkKKy0jIGVuZGlmCistI2VuZGlmCistCisgLyogV2UgYXNzdW1lIHRvIGhhdmUgYHVuc2lnbmVkIGxvbmcgaW50JyB2YWx1ZSB3aXRoIGF0IGxlYXN0IDMyIGJpdHMuICAqLworICNkZWZpbmUgSEFTSFdPUkRCSVRTIDMyCisgCitAQCAtMzcsMTEgKzI1LDggQEAKKyAvKiBEZWZpbmVzIHRoZSBzbyBjYWxsZWQgYGhhc2hwancnIGZ1bmN0aW9uIGJ5IFAuSi4gV2VpbmJlcmdlcgorICAgIFtzZWUgQWhvL1NldGhpL1VsbG1hbiwgQ09NUElMRVJTOiBQcmluY2lwbGVzLCBUZWNobmlxdWVzIGFuZCBUb29scywKKyAgICAxOTg2LCAxOTg3IEJlbGwgVGVsZXBob25lIExhYm9yYXRvcmllcywgSW5jLl0gICovCistc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFzaF9zdHJpbmcgUEFSQU1TICgoY29uc3QgY2hhciAqX19zdHJfcGFyYW0pKTsKKy0KKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKKy1oYXNoX3N0cmluZyAoc3RyX3BhcmFtKQorLSAgICAgY29uc3QgY2hhciAqc3RyX3BhcmFtOworK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKKytoYXNoX3N0cmluZyAoY29uc3QgY2hhciAqc3RyX3BhcmFtKQorIHsKKyAgIHVuc2lnbmVkIGxvbmcgaW50IGh2YWwsIGc7CisgICBjb25zdCBjaGFyICpzdHIgPSBzdHJfcGFyYW07CitAQCAtNTEsOCArMzYsOCBAQAorICAgd2hpbGUgKCpzdHIgIT0gJ1wwJykKKyAgICAgeworICAgICAgIGh2YWwgPDw9IDQ7CistICAgICAgaHZhbCArPSAodW5zaWduZWQgbG9uZykgKnN0cisrOworLSAgICAgIGcgPSBodmFsICYgKCh1bnNpZ25lZCBsb25nKSAweGYgPDwgKEhBU0hXT1JEQklUUyAtIDQpKTsKKysgICAgICBodmFsICs9ICh1bnNpZ25lZCBjaGFyKSAqc3RyKys7CisrICAgICAgZyA9IGh2YWwgJiAoKHVuc2lnbmVkIGxvbmcgaW50KSAweGYgPDwgKEhBU0hXT1JEQklUUyAtIDQpKTsKKyAgICAgICBpZiAoZyAhPSAwKQorIAl7CisgCSAgaHZhbCBePSBnID4+IChIQVNIV09SREJJVFMgLSA4KTsKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9pbnRsLWNvbXBhdC5jCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2ludGwtY29tcGF0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40NDE3MzUwMTYgLTA0MDAKK0BAIC0xLDc2ICsxLDEzMSBAQAorIC8qIGludGwtY29tcGF0LmMgLSBTdHViIGZ1bmN0aW9ucyB0byBjYWxsIGdldHRleHQgZnVuY3Rpb25zIGZyb20gR05VIGdldHRleHQKKyAgICBMaWJyYXJ5LgorLSAgIENvcHlyaWdodCAoQykgMTk5NSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAyMDAwLTIwMDMgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistYW55IGxhdGVyIHZlcnNpb24uCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorLVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy1Gb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKysvKiBUaGlzIGZpbGUgcmVkaXJlY3RzIHRoZSBnZXR0ZXh0IGZ1bmN0aW9ucyAod2l0aG91dCBwcmVmaXgpIHRvIHRob3NlCisrICAgZGVmaW5lZCBpbiB0aGUgaW5jbHVkZWQgR05VIGxpYmludGwgbGlicmFyeSAod2l0aCAibGliaW50bF8iIHByZWZpeCkuCisrICAgSXQgaXMgY29tcGlsZWQgaW50byBsaWJpbnRsIGluIG9yZGVyIHRvIG1ha2UgdGhlIEFNX0dOVV9HRVRURVhUIHRlc3QKKysgICBvZiBnZXR0ZXh0IDw9IDAuMTEuMiB3b3JrIHdpdGggdGhlIGxpYmludGwgbGlicmFyeSA+PSAwLjExLjMgd2hpY2gKKysgICBoYXMgdGhlIHJlZGlyZWN0aW9ucyBwcmltYXJpbHkgaW4gdGhlIDxsaWJpbnRsLmg+IGluY2x1ZGUgZmlsZS4KKysgICBJdCBpcyBhbHNvIGNvbXBpbGVkIGludG8gbGliZ251aW50bCBzbyB0aGF0IGxpYmdudWludGwuc28gY2FuIGJlIHVzZWQKKysgICBhcyBMRF9QUkVMT0FEYWJsZSBsaWJyYXJ5IG9uIGdsaWJjIHN5c3RlbXMsIHRvIHByb3ZpZGUgdGhlIGV4dHJhCisrICAgZmVhdHVyZXMgdGhhdCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsaWJjIGRvbid0IGhhdmUgKG5hbWVseSwgbG9nZ2luZykuICAqLworKworIAorICN1bmRlZiBnZXR0ZXh0CisgI3VuZGVmIGRnZXR0ZXh0CisgI3VuZGVmIGRjZ2V0dGV4dAorKyN1bmRlZiBuZ2V0dGV4dAorKyN1bmRlZiBkbmdldHRleHQKKysjdW5kZWYgZGNuZ2V0dGV4dAorICN1bmRlZiB0ZXh0ZG9tYWluCisgI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisrCisrCisrLyogV2hlbiBidWlsZGluZyBhIERMTCwgd2UgbXVzdCBleHBvcnQgc29tZSBmdW5jdGlvbnMuICBOb3RlIHRoYXQgYmVjYXVzZQorKyAgIHRoZSBmdW5jdGlvbnMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgYmluYXJ5IGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdlCisrICAgZG9uJ3QgbmVlZCB0byB1c2UgX19kZWNsc3BlYyhkbGxpbXBvcnQpIGluIGFueSBjYXNlLiAgKi8KKysjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBCVUlMRElOR19ETEwKKysjIGRlZmluZSBETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisrI2Vsc2UKKysjIGRlZmluZSBETExfRVhQT1JURUQKKysjZW5kaWYKKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy1iaW5kdGV4dGRvbWFpbiAoZG9tYWlubmFtZSwgZGlybmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICpkaXJuYW1lOworK2dldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkKQorIHsKKy0gIHJldHVybiBiaW5kdGV4dGRvbWFpbl9fIChkb21haW5uYW1lLCBkaXJuYW1lKTsKKysgIHJldHVybiBsaWJpbnRsX2dldHRleHQgKG1zZ2lkKTsKKyB9CisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistZGNnZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZCwgY2F0ZWdvcnkpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CistICAgICBpbnQgY2F0ZWdvcnk7CisrZGdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkKQorIHsKKy0gIHJldHVybiBkY2dldHRleHRfXyAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KTsKKysgIHJldHVybiBsaWJpbnRsX2RnZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZCk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWRnZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZCkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytkY2dldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCisgeworLSAgcmV0dXJuIGRnZXR0ZXh0X18gKGRvbWFpbm5hbWUsIG1zZ2lkKTsKKysgIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KTsKKyB9CisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistZ2V0dGV4dCAobXNnaWQpCistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytuZ2V0dGV4dCAoY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisgeworLSAgcmV0dXJuIGdldHRleHRfXyAobXNnaWQpOworKyAgcmV0dXJuIGxpYmludGxfbmdldHRleHQgKG1zZ2lkMSwgbXNnaWQyLCBuKTsKKyB9CisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistdGV4dGRvbWFpbiAoZG9tYWlubmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CisrZG5nZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyB7CistICByZXR1cm4gdGV4dGRvbWFpbl9fIChkb21haW5uYW1lKTsKKysgIHJldHVybiBsaWJpbnRsX2RuZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4pOworK30KKysKKysKKytETExfRVhQT1JURUQKKytjaGFyICoKKytkY25nZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICBpbnQgY2F0ZWdvcnkpCisreworKyAgcmV0dXJuIGxpYmludGxfZGNuZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4sIGNhdGVnb3J5KTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqZG9tYWlubmFtZSkKKyt7CisrICByZXR1cm4gbGliaW50bF90ZXh0ZG9tYWluIChkb21haW5uYW1lKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZHRleHRkb21haW4gKGRvbWFpbm5hbWUsIGRpcm5hbWUpOworK30KKysKKysKKytETExfRVhQT1JURUQKKytjaGFyICoKKytiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqY29kZXNldCkKKyt7CisrICByZXR1cm4gbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCAoZG9tYWlubmFtZSwgY29kZXNldCk7CisgfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2wxMG5mbGlzdC5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2wxMG5mbGlzdC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDU3NzMyNTg0IC0wNDAwCitAQCAtMSw1MiArMSw0MCBAQAorLS8qIEhhbmRsZSBsaXN0IG9mIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBzdHBjcHkoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFCTEKKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgX0dOVV9TT1VSQ0UKKy0jICBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSMgZW5kaWYKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistIyBpZm5kZWYgbWVtY3B5CistIyAgZGVmaW5lIG1lbWNweShEc3QsIFNyYywgTnVtKSBiY29weSAoU3JjLCBEc3QsIE51bSkKKy0jIGVuZGlmCistI2VuZGlmCistI2lmICFIQVZFX1NUUkNIUiAmJiAhZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIHN0cmNocgorLSMgIGRlZmluZSBzdHJjaHIgaW5kZXgKKy0jIGVuZGlmCistI2VuZGlmCisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9BUkdaX0gKKyAjIGluY2x1ZGUgPGFyZ3ouaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAKKyAjaW5jbHVkZSAibG9hZGluZm8uaCIKKyAKK0BAIC02NSwyMyArNTMsMzkgQEAKKyAvKiBSZW5hbWUgdGhlIG5vbiBBTlNJIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKyAgICBiZWNhdXNlIHNvbWUgQU5TSSBDIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CisgICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworLSMgZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIF9fc3RwY3B5KGRlc3QsIHNyYykKKysjIGlmbmRlZiBzdHBjcHkKKysjICBkZWZpbmUgc3RwY3B5KGRlc3QsIHNyYykgX19zdHBjcHkoZGVzdCwgc3JjKQorKyMgZW5kaWYKKyAjZWxzZQorICMgaWZuZGVmIEhBVkVfU1RQQ1BZCistc3RhdGljIGNoYXIgKnN0cGNweSBQQVJBTVMgKChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpKTsKKytzdGF0aWMgY2hhciAqc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOworICMgZW5kaWYKKyAjZW5kaWYKKyAKKysvKiBQYXRobmFtZSBzdXBwb3J0LgorKyAgIElTU0xBU0goQykgICAgICAgICAgIHRlc3RzIHdoZXRoZXIgQyBpcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgY2hhcmFjdGVyLgorKyAgIElTX0FCU09MVVRFX1BBVEgoUCkgIHRlc3RzIHdoZXRoZXIgUCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiAgSWYgaXQgaXMgbm90LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IG1heSBiZSBjb25jYXRlbmF0ZWQgdG8gYSBkaXJlY3RvcnkgcGF0aG5hbWUuCisrICovCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisrIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisrICAgICgoKChQKVswXSA+PSAnQScgJiYgKFApWzBdIDw9ICdaJykgfHwgKChQKVswXSA+PSAnYScgJiYgKFApWzBdIDw9ICd6JykpIFwKKysgICAgICYmIChQKVsxXSA9PSAnOicpCisrIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSAoSVNTTEFTSCAoKFApWzBdKSB8fCBIQVNfREVWSUNFIChQKSkKKysjZWxzZQorKyAgLyogVW5peCAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisrIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSBJU1NMQVNIICgoUClbMF0pCisrI2VuZGlmCisrCisgLyogRGVmaW5lIGZ1bmN0aW9uIHdoaWNoIGFyZSB1c3VhbGx5IG5vdCBhdmFpbGFibGUuICAqLworIAorICNpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX19fQVJHWl9DT1VOVAorIC8qIFJldHVybnMgdGhlIG51bWJlciBvZiBzdHJpbmdzIGluIEFSR1ouICAqLworLXN0YXRpYyBzaXplX3QgYXJnel9jb3VudF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKmFyZ3osIHNpemVfdCBsZW4pKTsKKy0KKyBzdGF0aWMgc2l6ZV90CistYXJnel9jb3VudF9fIChhcmd6LCBsZW4pCistICAgICBjb25zdCBjaGFyICphcmd6OworLSAgICAgc2l6ZV90IGxlbjsKKythcmd6X2NvdW50X18gKGNvbnN0IGNoYXIgKmFyZ3osIHNpemVfdCBsZW4pCisgeworICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgIHdoaWxlIChsZW4gPiAwKQorQEAgLTk1LDE4ICs5OSwxNyBAQAorIH0KKyAjIHVuZGVmIF9fYXJnel9jb3VudAorICMgZGVmaW5lIF9fYXJnel9jb3VudChhcmd6LCBsZW4pIGFyZ3pfY291bnRfXyAoYXJneiwgbGVuKQorKyNlbHNlCisrIyBpZmRlZiBfTElCQworKyMgIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBJTlRVU0UoX19hcmd6X2NvdW50KSAoYXJneiwgbGVuKQorKyMgZW5kaWYKKyAjZW5kaWYJLyogIV9MSUJDICYmICFIQVZFX19fQVJHWl9DT1VOVCAqLworIAorICNpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX19fQVJHWl9TVFJJTkdJRlkKKyAvKiBNYWtlICdcMCcgc2VwYXJhdGVkIGFyZyB2ZWN0b3IgQVJHWiBwcmludGFibGUgYnkgY29udmVydGluZyBhbGwgdGhlICdcMCdzCisgICAgZXhjZXB0IHRoZSBsYXN0IGludG8gdGhlIGNoYXJhY3RlciBTRVAuICAqLworLXN0YXRpYyB2b2lkIGFyZ3pfc3RyaW5naWZ5X18gUEFSQU1TICgoY2hhciAqYXJneiwgc2l6ZV90IGxlbiwgaW50IHNlcCkpOworLQorIHN0YXRpYyB2b2lkCistYXJnel9zdHJpbmdpZnlfXyAoYXJneiwgbGVuLCBzZXApCistICAgICBjaGFyICphcmd6OworLSAgICAgc2l6ZV90IGxlbjsKKy0gICAgIGludCBzZXA7CisrYXJnel9zdHJpbmdpZnlfXyAoY2hhciAqYXJneiwgc2l6ZV90IGxlbiwgaW50IHNlcCkKKyB7CisgICB3aGlsZSAobGVuID4gMCkKKyAgICAgeworQEAgLTExOSwxNyArMTIyLDE2IEBACisgfQorICMgdW5kZWYgX19hcmd6X3N0cmluZ2lmeQorICMgZGVmaW5lIF9fYXJnel9zdHJpbmdpZnkoYXJneiwgbGVuLCBzZXApIGFyZ3pfc3RyaW5naWZ5X18gKGFyZ3osIGxlbiwgc2VwKQorKyNlbHNlCisrIyBpZmRlZiBfTElCQworKyMgIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBcCisrICBJTlRVU0UoX19hcmd6X3N0cmluZ2lmeSkgKGFyZ3osIGxlbiwgc2VwKQorKyMgZW5kaWYKKyAjZW5kaWYJLyogIV9MSUJDICYmICFIQVZFX19fQVJHWl9TVFJJTkdJRlkgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfTkVYVAorLXN0YXRpYyBjaGFyICphcmd6X25leHRfXyBQQVJBTVMgKChjaGFyICphcmd6LCBzaXplX3QgYXJnel9sZW4sCistCQkJCSAgY29uc3QgY2hhciAqZW50cnkpKTsKKy0KKyBzdGF0aWMgY2hhciAqCistYXJnel9uZXh0X18gKGFyZ3osIGFyZ3pfbGVuLCBlbnRyeSkKKy0gICAgIGNoYXIgKmFyZ3o7CistICAgICBzaXplX3QgYXJnel9sZW47CistICAgICBjb25zdCBjaGFyICplbnRyeTsKKythcmd6X25leHRfXyAoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLCBjb25zdCBjaGFyICplbnRyeSkKKyB7CisgICBpZiAoZW50cnkpCisgICAgIHsKK0BAIC0xNTAsMTEgKzE1Miw4IEBACisgCisgCisgLyogUmV0dXJuIG51bWJlciBvZiBiaXRzIHNldCBpbiBYLiAgKi8KKy1zdGF0aWMgaW50IHBvcCBQQVJBTVMgKChpbnQgeCkpOworLQorIHN0YXRpYyBpbmxpbmUgaW50CistcG9wICh4KQorLSAgICAgaW50IHg7CisrcG9wIChpbnQgeCkKKyB7CisgICAvKiBXZSBhc3N1bWUgdGhhdCBubyBtb3JlIHRoYW4gMTYgYml0cyBhcmUgdXNlZC4gICovCisgICB4ID0gKCh4ICYgfjB4NTU1NSkgPj4gMSkgKyAoeCAmIDB4NTU1NSk7CitAQCAtMTY3LDMxICsxNjYsMjcgQEAKKyAKKyAMCisgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqCistX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXJsaXN0LCBkaXJsaXN0X2xlbiwgbWFzaywgbGFuZ3VhZ2UsCistCQkgICAgdGVycml0b3J5LCBjb2Rlc2V0LCBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorLQkJICAgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgZG9fYWxsb2NhdGUpCistICAgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdDsKKy0gICAgIGNvbnN0IGNoYXIgKmRpcmxpc3Q7CistICAgICBzaXplX3QgZGlybGlzdF9sZW47CistICAgICBpbnQgbWFzazsKKy0gICAgIGNvbnN0IGNoYXIgKmxhbmd1YWdlOworLSAgICAgY29uc3QgY2hhciAqdGVycml0b3J5OworLSAgICAgY29uc3QgY2hhciAqY29kZXNldDsKKy0gICAgIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfY29kZXNldDsKKy0gICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVyOworLSAgICAgY29uc3QgY2hhciAqc3BlY2lhbDsKKy0gICAgIGNvbnN0IGNoYXIgKnNwb25zb3I7CistICAgICBjb25zdCBjaGFyICpyZXZpc2lvbjsKKy0gICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworLSAgICAgaW50IGRvX2FsbG9jYXRlOworK19ubF9tYWtlX2wxMG5mbGlzdCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3QsCisrCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLAorKwkJICAgIGludCBtYXNrLCBjb25zdCBjaGFyICpsYW5ndWFnZSwgY29uc3QgY2hhciAqdGVycml0b3J5LAorKwkJICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQsIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfY29kZXNldCwKKysJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKysJCSAgICBjb25zdCBjaGFyICpzcG9uc29yLCBjb25zdCBjaGFyICpyZXZpc2lvbiwKKysJCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGRvX2FsbG9jYXRlKQorIHsKKyAgIGNoYXIgKmFic19maWxlbmFtZTsKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmxhc3QgPSBOVUxMOworKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmxhc3RwOworICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqcmV0dmFsOworICAgY2hhciAqY3A7CisrICBzaXplX3QgZGlybGlzdF9jb3VudDsKKyAgIHNpemVfdCBlbnRyaWVzOworICAgaW50IGNudDsKKyAKKysgIC8qIElmIExBTkdVQUdFIGNvbnRhaW5zIGFuIGFic29sdXRlIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uLCB3ZSBpZ25vcmUKKysgICAgIERJUkxJU1QuICAqLworKyAgaWYgKElTX0FCU09MVVRFX1BBVEggKGxhbmd1YWdlKSkKKysgICAgZGlybGlzdF9sZW4gPSAwOworKworICAgLyogQWxsb2NhdGUgcm9vbSBmb3IgdGhlIGZ1bGwgZmlsZSBuYW1lLiAgKi8KKyAgIGFic19maWxlbmFtZSA9IChjaGFyICopIG1hbGxvYyAoZGlybGlzdF9sZW4KKyAJCQkJICArIHN0cmxlbiAobGFuZ3VhZ2UpCitAQCAtMjA5LDcgKzIwNCw3IEBACisgCQkJCSAgKyAoKChtYXNrICYgQ0VOX1NQT05TT1IpICE9IDAKKyAJCQkJICAgICAgfHwgKG1hc2sgJiBDRU5fUkVWSVNJT04pICE9IDApCisgCQkJCSAgICAgPyAoMSArICgobWFzayAmIENFTl9TUE9OU09SKSAhPSAwCistCQkJCQkgICAgID8gc3RybGVuIChzcG9uc29yKSArIDEgOiAwKQorKwkJCQkJICAgICA/IHN0cmxlbiAoc3BvbnNvcikgOiAwKQorIAkJCQkJKyAoKG1hc2sgJiBDRU5fUkVWSVNJT04pICE9IDAKKyAJCQkJCSAgID8gc3RybGVuIChyZXZpc2lvbikgKyAxIDogMCkpIDogMCkKKyAJCQkJICArIDEgKyBzdHJsZW4gKGZpbGVuYW1lKSArIDEpOworQEAgLTIxNywxNCArMjEyLDE2IEBACisgICBpZiAoYWJzX2ZpbGVuYW1lID09IE5VTEwpCisgICAgIHJldHVybiBOVUxMOworIAorLSAgcmV0dmFsID0gTlVMTDsKKy0gIGxhc3QgPSBOVUxMOworLQorICAgLyogQ29uc3RydWN0IGZpbGUgbmFtZS4gICovCistICBtZW1jcHkgKGFic19maWxlbmFtZSwgZGlybGlzdCwgZGlybGlzdF9sZW4pOworLSAgX19hcmd6X3N0cmluZ2lmeSAoYWJzX2ZpbGVuYW1lLCBkaXJsaXN0X2xlbiwgJzonKTsKKy0gIGNwID0gYWJzX2ZpbGVuYW1lICsgKGRpcmxpc3RfbGVuIC0gMSk7CistICAqY3ArKyA9ICcvJzsKKysgIGNwID0gYWJzX2ZpbGVuYW1lOworKyAgaWYgKGRpcmxpc3RfbGVuID4gMCkKKysgICAgeworKyAgICAgIG1lbWNweSAoY3AsIGRpcmxpc3QsIGRpcmxpc3RfbGVuKTsKKysgICAgICBfX2FyZ3pfc3RyaW5naWZ5IChjcCwgZGlybGlzdF9sZW4sIFBBVEhfU0VQQVJBVE9SKTsKKysgICAgICBjcCArPSBkaXJsaXN0X2xlbjsKKysgICAgICBjcFstMV0gPSAnLyc7CisrICAgIH0KKysKKyAgIGNwID0gc3RwY3B5IChjcCwgbGFuZ3VhZ2UpOworIAorICAgaWYgKChtYXNrICYgVEVSUklUT1JZKSAhPSAwKQorQEAgLTI3MSw3ICsyNjgsNyBAQAorIAorICAgLyogTG9vayBpbiBsaXN0IG9mIGFscmVhZHkgbG9hZGVkIGRvbWFpbnMgd2hldGhlciBpdCBpcyBhbHJlYWR5CisgICAgICBhdmFpbGFibGUuICAqLworLSAgbGFzdCA9IE5VTEw7CisrICBsYXN0cCA9IGwxMG5maWxlX2xpc3Q7CisgICBmb3IgKHJldHZhbCA9ICpsMTBuZmlsZV9saXN0OyByZXR2YWwgIT0gTlVMTDsgcmV0dmFsID0gcmV0dmFsLT5uZXh0KQorICAgICBpZiAocmV0dmFsLT5maWxlbmFtZSAhPSBOVUxMKQorICAgICAgIHsKK0BAIC0yODYsNyArMjgzLDcgQEAKKyAJICAgIGJyZWFrOworIAkgIH0KKyAKKy0JbGFzdCA9IHJldHZhbDsKKysJbGFzdHAgPSAmcmV0dmFsLT5uZXh0OworICAgICAgIH0KKyAKKyAgIGlmIChyZXR2YWwgIT0gTlVMTCB8fCBkb19hbGxvY2F0ZSA9PSAwKQorQEAgLTI5NSw0OCArMjkyLDY2IEBACisgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgfQorIAorLSAgcmV0dmFsID0gKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKy0gICAgbWFsbG9jIChzaXplb2YgKCpyZXR2YWwpICsgKF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pCistCQkJCSogKDEgPDwgcG9wIChtYXNrKSkKKy0JCQkJKiBzaXplb2YgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikpKTsKKysgIGRpcmxpc3RfY291bnQgPSAoZGlybGlzdF9sZW4gPiAwID8gX19hcmd6X2NvdW50IChkaXJsaXN0LCBkaXJsaXN0X2xlbikgOiAxKTsKKysKKysgIC8qIEFsbG9jYXRlIGEgbmV3IGxvYWRlZF9sMTBuZmlsZS4gICovCisrICByZXR2YWwgPQorKyAgICAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKQorKyAgICBtYWxsb2MgKHNpemVvZiAoKnJldHZhbCkKKysJICAgICsgKCgoZGlybGlzdF9jb3VudCA8PCBwb3AgKG1hc2spKSArIChkaXJsaXN0X2NvdW50ID4gMSA/IDEgOiAwKSkKKysJICAgICAgICogc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopKSk7CisgICBpZiAocmV0dmFsID09IE5VTEwpCisgICAgIHJldHVybiBOVUxMOworIAorICAgcmV0dmFsLT5maWxlbmFtZSA9IGFic19maWxlbmFtZTsKKy0gIHJldHZhbC0+ZGVjaWRlZCA9IChfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSAhPSAxCisrCisrICAvKiBXZSBzZXQgcmV0dmFsLT5kYXRhIHRvIE5VTEwgaGVyZTsgaXQgaXMgZmlsbGVkIGluIGxhdGVyLgorKyAgICAgU2V0dGluZyByZXR2YWwtPmRlY2lkZWQgdG8gMSBoZXJlIG1lYW5zIHRoYXQgcmV0dmFsIGRvZXMgbm90CisrICAgICBjb3JyZXNwb25kIHRvIGEgcmVhbCBmaWxlIChkaXJsaXN0X2NvdW50ID4gMSkgb3IgaXMgbm90IHdvcnRoCisrICAgICBsb29raW5nIHVwIChpZiBhbiB1bm5vcm1hbGl6ZWQgY29kZXNldCB3YXMgc3BlY2lmaWVkKS4gICovCisrICByZXR2YWwtPmRlY2lkZWQgPSAoZGlybGlzdF9jb3VudCA+IDEKKyAJCSAgICAgfHwgKChtYXNrICYgWFBHX0NPREVTRVQpICE9IDAKKyAJCQkgJiYgKG1hc2sgJiBYUEdfTk9STV9DT0RFU0VUKSAhPSAwKSk7CisgICByZXR2YWwtPmRhdGEgPSBOVUxMOworIAorLSAgaWYgKGxhc3QgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIHJldHZhbC0+bmV4dCA9ICpsMTBuZmlsZV9saXN0OworLSAgICAgICpsMTBuZmlsZV9saXN0ID0gcmV0dmFsOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICByZXR2YWwtPm5leHQgPSBsYXN0LT5uZXh0OworLSAgICAgIGxhc3QtPm5leHQgPSByZXR2YWw7CistICAgIH0KKysgIHJldHZhbC0+bmV4dCA9ICpsYXN0cDsKKysgICpsYXN0cCA9IHJldHZhbDsKKyAKKyAgIGVudHJpZXMgPSAwOworLSAgLyogSWYgdGhlIERJUkxJU1QgaXMgYSByZWFsIGxpc3QgdGhlIFJFVFZBTCBlbnRyeSBjb3JyZXNwb25kcyBub3QgdG8KKy0gICAgIGEgcmVhbCBmaWxlLiAgU28gd2UgaGF2ZSB0byB1c2UgdGhlIERJUkxJU1Qgc2VwYXJhdGlvbiBtZWNoYW5pc20KKy0gICAgIG9mIHRoZSBpbm5lciBsb29wLiAgKi8KKy0gIGNudCA9IF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pID09IDEgPyBtYXNrIC0gMSA6IG1hc2s7CistICBmb3IgKDsgY250ID49IDA7IC0tY250KQorKyAgLyogUmVjdXJzZSB0byBmaWxsIHRoZSBpbmhlcml0YW5jZSBsaXN0IG9mIFJFVFZBTC4KKysgICAgIElmIHRoZSBESVJMSVNUIGlzIGEgcmVhbCBsaXN0IChpLmUuIERJUkxJU1RfQ09VTlQgPiAxKSwgdGhlIFJFVFZBTAorKyAgICAgZW50cnkgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHJlYWwgZmlsZTsgcmV0dmFsLT5maWxlbmFtZSBjb250YWlucworKyAgICAgY29sb25zLiAgSW4gdGhpcyBjYXNlIHdlIGxvb3AgYWNyb3NzIGFsbCBlbGVtZW50cyBvZiBESVJMSVNUIGFuZAorKyAgICAgYWNyb3NzIGFsbCBiaXQgcGF0dGVybnMgZG9taW5hdGVkIGJ5IE1BU0suCisrICAgICBJZiB0aGUgRElSTElTVCBpcyBhIHNpbmdsZSBkaXJlY3Rvcnkgb3IgZW50aXJlbHkgcmVkdW5kYW50IChpLmUuCisrICAgICBESVJMSVNUX0NPVU5UID09IDEpLCB3ZSBsb29wIGFjcm9zcyBhbGwgYml0IHBhdHRlcm5zIGRvbWluYXRlZCBieQorKyAgICAgTUFTSywgZXhjbHVkaW5nIE1BU0sgaXRzZWxmLgorKyAgICAgSW4gZWl0aGVyIGNhc2UsIHdlIGxvb3AgZG93biBmcm9tIE1BU0sgdG8gMC4gIFRoaXMgaGFzIHRoZSBlZmZlY3QKKysgICAgIHRoYXQgdGhlIGV4dHJhIGJpdHMgaW4gdGhlIGxvY2FsZSBuYW1lIGFyZSBkcm9wcGVkIGluIHRoaXMgb3JkZXI6CisrICAgICBmaXJzdCB0aGUgbW9kaWZpZXIsIHRoZW4gdGhlIHRlcnJpdG9yeSwgdGhlbiB0aGUgY29kZXNldCwgdGhlbiB0aGUKKysgICAgIG5vcm1hbGl6ZWRfY29kZXNldC4gICovCisrICBmb3IgKGNudCA9IGRpcmxpc3RfY291bnQgPiAxID8gbWFzayA6IG1hc2sgLSAxOyBjbnQgPj0gMDsgLS1jbnQpCisgICAgIGlmICgoY250ICYgfm1hc2spID09IDAKKyAJJiYgKChjbnQgJiBDRU5fU1BFQ0lGSUMpID09IDAgfHwgKGNudCAmIFhQR19TUEVDSUZJQykgPT0gMCkKKyAJJiYgKChjbnQgJiBYUEdfQ09ERVNFVCkgPT0gMCB8fCAoY250ICYgWFBHX05PUk1fQ09ERVNFVCkgPT0gMCkpCisgICAgICAgeworLQkvKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIHRoZSBESVJMSVNULiAgKi8KKy0JY2hhciAqZGlyID0gTlVMTDsKKysJaWYgKGRpcmxpc3RfY291bnQgPiAxKQorKwkgIHsKKysJICAgIC8qIEl0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudHMgb2YgdGhlIERJUkxJU1QuICAqLworKwkgICAgY2hhciAqZGlyID0gTlVMTDsKKyAKKy0Jd2hpbGUgKChkaXIgPSBfX2FyZ3pfbmV4dCAoKGNoYXIgKikgZGlybGlzdCwgZGlybGlzdF9sZW4sIGRpcikpCistCSAgICAgICAhPSBOVUxMKQorKwkgICAgd2hpbGUgKChkaXIgPSBfX2FyZ3pfbmV4dCAoKGNoYXIgKikgZGlybGlzdCwgZGlybGlzdF9sZW4sIGRpcikpCisrCQkgICAhPSBOVUxMKQorKwkgICAgICByZXR2YWwtPnN1Y2Nlc3NvcltlbnRyaWVzKytdCisrCQk9IF9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlyLCBzdHJsZW4gKGRpcikgKyAxLAorKwkJCQkgICAgICBjbnQsIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGNvZGVzZXQsCisrCQkJCSAgICAgIG5vcm1hbGl6ZWRfY29kZXNldCwgbW9kaWZpZXIsIHNwZWNpYWwsCisrCQkJCSAgICAgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgMSk7CisrCSAgfQorKwllbHNlCisgCSAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorLQkgICAgPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpciwgc3RybGVuIChkaXIpICsgMSwgY250LAorLQkJCQkgIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGNvZGVzZXQsCisrCSAgICA9IF9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlybGlzdCwgZGlybGlzdF9sZW4sCisrCQkJCSAgY250LCBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorIAkJCQkgIG5vcm1hbGl6ZWRfY29kZXNldCwgbW9kaWZpZXIsIHNwZWNpYWwsCisgCQkJCSAgc3BvbnNvciwgcmV2aXNpb24sIGZpbGVuYW1lLCAxKTsKKyAgICAgICB9CitAQCAtMzQ3LDExICszNjIsMTAgQEAKKyAMCisgLyogTm9ybWFsaXplIGNvZGVzZXQgbmFtZS4gIFRoZXJlIGlzIG5vIHN0YW5kYXJkIGZvciB0aGUgY29kZXNldAorICAgIG5hbWVzLiAgTm9ybWFsaXphdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gdXNlIGFueSBvZiB0aGUgY29tbW9uCistICAgbmFtZXMuICAqLworKyAgIG5hbWVzLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGhhcyB0byBiZQorKyAgIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworIGNvbnN0IGNoYXIgKgorLV9ubF9ub3JtYWxpemVfY29kZXNldCAoY29kZXNldCwgbmFtZV9sZW4pCistICAgICBjb25zdCBjaGFyICpjb2Rlc2V0OworLSAgICAgc2l6ZV90IG5hbWVfbGVuOworK19ubF9ub3JtYWxpemVfY29kZXNldCAoY29uc3QgY2hhciAqY29kZXNldCwgc2l6ZV90IG5hbWVfbGVuKQorIHsKKyAgIGludCBsZW4gPSAwOworICAgaW50IG9ubHlfZGlnaXQgPSAxOworQEAgLTM2MCwxMSArMzc0LDExIEBACisgICBzaXplX3QgY250OworIAorICAgZm9yIChjbnQgPSAwOyBjbnQgPCBuYW1lX2xlbjsgKytjbnQpCistICAgIGlmIChpc2FsbnVtIChjb2Rlc2V0W2NudF0pKQorKyAgICBpZiAoaXNhbG51bSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgICAgICAgeworIAkrK2xlbjsKKyAKKy0JaWYgKGlzYWxwaGEgKGNvZGVzZXRbY250XSkpCisrCWlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKSkKKyAJICBvbmx5X2RpZ2l0ID0gMDsKKyAgICAgICB9CisgCitAQCAtMzc4LDkgKzM5Miw5IEBACisgCXdwID0gcmV0dmFsOworIAorICAgICAgIGZvciAoY250ID0gMDsgY250IDwgbmFtZV9sZW47ICsrY250KQorLQlpZiAoaXNhbHBoYSAoY29kZXNldFtjbnRdKSkKKy0JICAqd3ArKyA9IHRvbG93ZXIgKGNvZGVzZXRbY250XSk7CistCWVsc2UgaWYgKGlzZGlnaXQgKGNvZGVzZXRbY250XSkpCisrCWlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKSkKKysJICAqd3ArKyA9IHRvbG93ZXIgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pOworKwllbHNlIGlmIChpc2RpZ2l0ICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKSkKKyAJICAqd3ArKyA9IGNvZGVzZXRbY250XTsKKyAKKyAgICAgICAqd3AgPSAnXDAnOworQEAgLTM5OCw5ICs0MTIsNyBAQAorICAgIHRvIGJlIGRlZmluZWQuICAqLworICNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCisgc3RhdGljIGNoYXIgKgorLXN0cGNweSAoZGVzdCwgc3JjKQorLSAgICAgY2hhciAqZGVzdDsKKy0gICAgIGNvbnN0IGNoYXIgKnNyYzsKKytzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKKyB7CisgICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9ICdcMCcpCisgICAgIC8qIERvIG5vdGhpbmcuICovIDsKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9saWJnZXR0ZXh0LmgJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbGliZ2V0dGV4dC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxODIgKzAsMCBAQAorLS8qIE1lc3NhZ2UgY2F0YWxvZ3MgZm9yIGludGVybmF0aW9uYWxpemF0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworLQorLS8qIEJlY2F1c2Ugb24gc29tZSBzeXN0ZW1zIChlLmcuIFNvbGFyaXMpIHdlIHNvbWV0aW1lcyBoYXZlIHRvIGluY2x1ZGUKKy0gICB0aGUgc3lzdGVtcyBsaWJpbnRsLmggYXMgd2VsbCBhcyB0aGlzIGZpbGUgd2UgaGF2ZSBtb3JlIGNvbXBsZXgKKy0gICBpbmNsdWRlIHByb3RlY3Rpb24gYWJvdmUuICBCdXQgdGhlIHN5c3RlbXMgaGVhZGVyIG1pZ2h0IHBlcmhhcHMgYWxzbworLSAgIGRlZmluZSBfTElCSU5UTF9IIGFuZCB0aGVyZWZvcmUgd2UgaGF2ZSB0byBwcm90ZWN0IHRoZSBkZWZpbml0aW9uIGhlcmUuICAqLworLQorLSNpZiAhZGVmaW5lZCAoX0xJQklOVExfSCkgfHwgIWRlZmluZWQgKF9MSUJHRVRURVhUX0gpCistI2lmICFkZWZpbmVkIChfTElCSU5UTF9IKQorLSMgZGVmaW5lIF9MSUJJTlRMX0gJMQorLSNlbmRpZgorLSNkZWZpbmUgX0xJQkdFVFRFWFRfSAkxCistCistLyogV2UgZGVmaW5lIGFuIGFkZGl0aW9uYWwgc3ltYm9sIHRvIHNpZ25hbCB0aGF0IHdlIHVzZSB0aGUgR05VCistICAgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dC4gICovCistI2RlZmluZSBfX1VTRV9HTlVfR0VUVEVYVCAxCistCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZiBIQVZFX0xPQ0FMRV9ICistIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKy0KKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsKKy0jZW5kaWYKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistI2lmbmRlZiBQQVJBTVMKKy0jIGlmIF9fU1REQ19fCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCistIyBlbHNlCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSAoKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWZuZGVmIE5VTEwKKy0jIGlmICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19HTlVDX18KKy0jICBkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKKy0jIGVsc2UKKy0jICBkZWZpbmUgTlVMTCAoMCkKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmICFIQVZFX0xDX01FU1NBR0VTCistLyogVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGdldHRleHQoKSBhbmQgZGdldHRleHQoKQorLSAgIGZ1bmN0aW9uLiAgQnV0IHNvbWUgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhpcyBkZWZpbmVkLiAgRGVmaW5lIGl0CistICAgdG8gYSBkZWZhdWx0IHZhbHVlLiAgKi8KKy0jIGRlZmluZSBMQ19NRVNTQUdFUyAoLTEpCistI2VuZGlmCistCistCistLyogRGVjbGFyYXRpb25zIGZvciBnZXR0ZXh0LXVzaW5nLWNhdGdldHMgaW50ZXJmYWNlLiAgRGVyaXZlZCBmcm9tCistICAgSmltIE1leWVyaW5nJ3MgbGliaW50bC5oLiAgKi8KKy1zdHJ1Y3QgX21zZ19lbnQKKy17CistICBjb25zdCBjaGFyICpfbXNnOworLSAgaW50IF9tc2dfbnVtYmVyOworLX07CistCistCistI2lmIEhBVkVfQ0FUR0VUUworLS8qIFRoZXNlIHR3byB2YXJpYWJsZXMgYXJlIGRlZmluZWQgaW4gdGhlIGF1dG9tYXRpY2FsbHkgYnkgcG8tdG8tdGJsLnNlZAorLSAgIGdlbmVyYXRlZCBmaWxlIGBjYXQtaWQtdGJsLmMnLiAgKi8KKy1leHRlcm4gY29uc3Qgc3RydWN0IF9tc2dfZW50IF9tc2dfdGJsW107CistZXh0ZXJuIGludCBfbXNnX3RibF9sZW5ndGg7CistI2VuZGlmCistCistCistLyogRm9yIGF1dG9tYXRpY2FsIGV4dHJhY3Rpb24gb2YgbWVzc2FnZXMgc29tZXRpbWVzIG5vIHJlYWwKKy0gICB0cmFuc2xhdGlvbiBpcyBuZWVkZWQuICBJbnN0ZWFkIHRoZSBzdHJpbmcgaXRzZWxmIGlzIHRoZSByZXN1bHQuICAqLworLSNkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cikgKFN0cikKKy0KKy0vKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorLSAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CistICAgdGV4dCkuICAqLworLWV4dGVybiBjaGFyICpnZXR0ZXh0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fbXNnaWQpKTsKKy1leHRlcm4gY2hhciAqZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fbXNnaWQpKTsKKy0KKy0vKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKy0gICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworLWV4dGVybiBjaGFyICpkZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpKTsKKy1leHRlcm4gY2hhciAqZGdldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkKSk7CistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCistICAgbG9jYWxlLiAgKi8KKy1leHRlcm4gY2hhciAqZGNnZXR0ZXh0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKy0JCQkJaW50IF9fY2F0ZWdvcnkpKTsKKy1leHRlcm4gY2hhciAqZGNnZXR0ZXh0X18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSk7CistCistCistLyogU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIHRvIERPTUFJTk5BTUUuCistICAgSWYgRE9NQUlOTkFNRSBpcyBudWxsLCByZXR1cm4gdGhlIGN1cnJlbnQgZGVmYXVsdC4KKy0gICBJZiBET01BSU5OQU1FIGlzICIiLCByZXNldCB0byB0aGUgZGVmYXVsdCBvZiAibWVzc2FnZXMiLiAgKi8KKy1leHRlcm4gY2hhciAqdGV4dGRvbWFpbiBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKKy1leHRlcm4gY2hhciAqdGV4dGRvbWFpbl9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkpOworLQorLS8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorLSAgIGluIERJUk5BTUUgcmF0aGVyIHRoYW4gaW4gdGhlIHN5c3RlbSBsb2NhbGUgZGF0YSBiYXNlLiAgKi8KKy1leHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkpOworLWV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbl9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkpOworLQorLSNpZiBFTkFCTEVfTkxTCistCistLyogU29sYXJpcyAyLjMgaGFzIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGJ1dCBkY2dldHRleHQgaXMgbWlzc2luZy4KKy0gICBTbyB3ZSBvbWl0IHRoaXMgb3B0aW1pemF0aW9uIGZvciBTb2xhcmlzIDIuMy4gIEJUVywgU29sYXJpcyAyLjQKKy0gICBoYXMgZGNnZXR0ZXh0LiAgKi8KKy0jIGlmICFIQVZFX0NBVEdFVFMgJiYgKCFIQVZFX0dFVFRFWFQgfHwgSEFWRV9EQ0dFVFRFWFQpCistCistIyAgZGVmaW5lIGdldHRleHQoTXNnaWQpCQkJCQkJICAgICAgXAorLSAgICAgZGdldHRleHQgKE5VTEwsIE1zZ2lkKQorLQorLSMgIGRlZmluZSBkZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZCkJCQkJCSAgICAgIFwKKy0gICAgIGRjZ2V0dGV4dCAoRG9tYWlubmFtZSwgTXNnaWQsIExDX01FU1NBR0VTKQorLQorLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3CistLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiBsb2FkbXNnY2F0LmMuICBXZSBuZWVkIGEgc2lnbiwKKy0gICB3aGV0aGVyIGEgbmV3IGNhdGFsb2cgd2FzIGxvYWRlZCwgd2hpY2ggY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhbGwKKy0gICB0cmFuc2xhdGlvbnMuICAqLworLWV4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKy0KKy0jICAgZGVmaW5lIGRjZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZCwgQ2F0ZWdvcnkpCQkJICAgICAgXAorLSAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorLSAgICh7CQkJCQkJCQkJICAgICAgXAorLSAgICAgY2hhciAqX19yZXN1bHQ7CQkJCQkJCSAgICAgIFwKKy0gICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoTXNnaWQpKQkJCQkJICAgICAgXAorLSAgICAgICB7CQkJCQkJCQkgICAgICBcCistCSBzdGF0aWMgY2hhciAqX190cmFuc2xhdGlvbl9fOwkJCQkJICAgICAgXAorLQkgc3RhdGljIGludCBfX2NhdGFsb2dfY291bnRlcl9fOwkJCQkgICAgICBcCistCSBpZiAoISBfX3RyYW5zbGF0aW9uX18gfHwgX19jYXRhbG9nX2NvdW50ZXJfXyAhPSBfbmxfbXNnX2NhdF9jbnRyKSAgICBcCistCSAgIHsJCQkJCQkJCSAgICAgIFwKKy0JICAgICBfX3RyYW5zbGF0aW9uX18gPQkJCQkJCSAgICAgIFwKKy0JICAgICAgIGRjZ2V0dGV4dF9fIChEb21haW5uYW1lLCBNc2dpZCwgQ2F0ZWdvcnkpOwkJICAgICAgXAorLQkgICAgIF9fY2F0YWxvZ19jb3VudGVyX18gPSBfbmxfbXNnX2NhdF9jbnRyOwkJCSAgICAgIFwKKy0JICAgfQkJCQkJCQkJICAgICAgXAorLQkgX19yZXN1bHQgPSBfX3RyYW5zbGF0aW9uX187CQkJCQkgICAgICBcCistICAgICAgIH0JCQkJCQkJCSAgICAgIFwKKy0gICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKy0gICAgICAgX19yZXN1bHQgPSBkY2dldHRleHRfXyAoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KTsJCSAgICAgIFwKKy0gICAgIF9fcmVzdWx0OwkJCQkJCQkJICAgICAgXAorLSAgICB9KSkKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0KKy0jZWxzZQorLQorLSMgZGVmaW5lIGdldHRleHQoTXNnaWQpIChNc2dpZCkKKy0jIGRlZmluZSBkZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZCkgKE1zZ2lkKQorLSMgZGVmaW5lIGRjZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZCwgQ2F0ZWdvcnkpIChNc2dpZCkKKy0jIGRlZmluZSB0ZXh0ZG9tYWluKERvbWFpbm5hbWUpIHdoaWxlICgwKSAvKiBub3RoaW5nICovCistIyBkZWZpbmUgYmluZHRleHRkb21haW4oRG9tYWlubmFtZSwgRGlybmFtZSkgd2hpbGUgKDApIC8qIG5vdGhpbmcgKi8KKy0KKy0jZW5kaWYKKy0KKy0vKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistCistI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGliZ251aW50bC5oLmluCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xpYmdudWludGwuaC5pbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ2MjczMTgyNCAtMDQwMAorQEAgLTAsMCArMSwzODMgQEAKKysvKiBNZXNzYWdlIGNhdGFsb2dzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9MSUJJTlRMX0gKKysjZGVmaW5lIF9MSUJJTlRMX0gJMQorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysvKiBUaGUgTENfTUVTU0FHRVMgbG9jYWxlIGNhdGVnb3J5IGlzIHRoZSBjYXRlZ29yeSB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMKKysgICBnZXR0ZXh0KCkgYW5kIGRnZXR0ZXh0KCkuICBJdCBpcyBzcGVjaWZpZWQgaW4gUE9TSVgsIGJ1dCBub3QgaW4gQU5TSSBDLgorKyAgIE9uIHN5c3RlbXMgdGhhdCBkb24ndCBkZWZpbmUgaXQsIHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgaW5zdGVhZC4KKysgICBPbiBTb2xhcmlzLCA8bG9jYWxlLmg+IGRlZmluZXMgX19MT0NBTEVfSCAob3IgX0xPQ0FMRV9IIGluIFNvbGFyaXMgMi41KQorKyAgIHRoZW4gaW5jbHVkZXMgPGxpYmludGwuaD4gKGkuZS4gdGhpcyBmaWxlISkgYW5kIHRoZW4gb25seSBkZWZpbmVzCisrICAgTENfTUVTU0FHRVMuICBUbyBhdm9pZCBhIHJlZGVmaW5pdGlvbiB3YXJuaW5nLCBkb24ndCBkZWZpbmUgTENfTUVTU0FHRVMKKysgICBpbiB0aGlzIGNhc2UuICAqLworKyNpZiAhZGVmaW5lZCBMQ19NRVNTQUdFUyAmJiAhKGRlZmluZWQgX19MT0NBTEVfSCB8fCAoZGVmaW5lZCBfTE9DQUxFX0ggJiYgZGVmaW5lZCBfX3N1bikpCisrIyBkZWZpbmUgTENfTUVTU0FHRVMgMTcyOQorKyNlbmRpZgorKworKy8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorKyAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworKyNkZWZpbmUgX19VU0VfR05VX0dFVFRFWFQgMQorKworKy8qIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1cHBvcnRlZCBmaWxlIGZvcm1hdHMuICBSZXR1cm5zIHRoZQorKyAgIG1heGltdW0gbWlub3IgcmV2aXNpb24gbnVtYmVyIHN1cHBvcnRlZCBmb3IgYSBnaXZlbiBtYWpvciByZXZpc2lvbi4gICovCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgXAorKyAgKChtYWpvcikgPT0gMCA/IDEgOiAtMSkKKysKKysvKiBSZXNvbHZlIGEgcGxhdGZvcm0gc3BlY2lmaWMgY29uZmxpY3Qgb24gREpHUFAuICBHTlUgZ2V0dGV4dCB0YWtlcworKyAgIHByZWNlZGVuY2Ugb3ZlciBfY29uaW9fZ2V0dGV4dC4gICovCisrI2lmZGVmIF9fREpHUFBfXworKyMgdW5kZWYgZ2V0dGV4dAorKyNlbmRpZgorKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKworKy8qIFdlIHJlZGlyZWN0IHRoZSBmdW5jdGlvbnMgdG8gdGhvc2UgcHJlZml4ZWQgd2l0aCAibGliaW50bF8iLiAgVGhpcyBpcworKyAgIG5lY2Vzc2FyeSwgYmVjYXVzZSBzb21lIHN5c3RlbXMgZGVmaW5lIGdldHRleHQvdGV4dGRvbWFpbi8uLi4gaW4gdGhlIEMKKysgICBsaWJyYXJ5IChuYW1lbHksIFNvbGFyaXMgMi40IGFuZCBuZXdlciwgYW5kIEdOVSBsaWJjIDIuMCBhbmQgbmV3ZXIpLgorKyAgIElmIHdlIHVzZWQgdGhlIHVucHJlZml4ZWQgbmFtZXMsIHRoZXJlIHdvdWxkIGJlIGNhc2VzIHdoZXJlIHRoZQorKyAgIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIHRoZSBsaWJpbnRsLnNvCisrICAgc2hhcmVkIGxpYnJhcnkuICBSZWNhbGwgdGhhdCBvbiBFTEYgc3lzdGVtcywgdGhlIHN5bWJvbHMgYXJlIGxvb2tlZAorKyAgIHVwIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisrICAgICAxLiBpbiB0aGUgZXhlY3V0YWJsZSwKKysgICAgIDIuIGluIHRoZSBzaGFyZWQgbGlicmFyaWVzIHNwZWNpZmllZCBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUsIGluIG9yZGVyLAorKyAgICAgMy4gaW4gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgc2hhcmVkIGxpYnJhcmllcyBzcGVjaWZpZWQgb24gdGhlIGxpbmsKKysgICAgICAgIGNvbW1hbmQgbGluZSwKKysgICAgIDQuIGluIHRoZSBkbG9wZW4oKWVkIHNoYXJlZCBsaWJyYXJpZXMsIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUKKysgICAgICAgIGRsb3BlbigpZWQuCisrICAgVGhlIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIGxpYmludGwuc28gaWYKKysgICBlaXRoZXIKKysgICAgICogLWxjIGlzIGdpdmVuIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSBhbmQgLWxpbnRsIGlzbid0LCBvcgorKyAgICAgKiAtbGMgaXMgZ2l2ZW4gb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lIGJlZm9yZSAtbGludGwsIG9yCisrICAgICAqIGxpYmludGwuc28gaXMgYSBkZXBlbmRlbmN5IG9mIGEgZGxvcGVuKCllZCBzaGFyZWQgbGlicmFyeSBidXQgbm90CisrICAgICAgIGxpbmtlZCB0byB0aGUgZXhlY3V0YWJsZSBhdCBsaW5rIHRpbWUuCisrICAgU2luY2UgU29sYXJpcyBnZXR0ZXh0KCkgYmVoYXZlcyBkaWZmZXJlbnRseSB0aGFuIEdOVSBnZXR0ZXh0KCksIHRoaXMKKysgICB3b3VsZCBiZSB1bmFjY2VwdGFibGUuCisrCisrICAgVGhlIHJlZGlyZWN0aW9uIGhhcHBlbnMgYnkgZGVmYXVsdCB0aHJvdWdoIG1hY3JvcyBpbiBDLCBzbyB0aGF0ICZnZXR0ZXh0CisrICAgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQsIGJ1dCB0aHJvdWdoIGlubGluZSBmdW5jdGlvbnMgaW4KKysgICBDKyssIGluIG9yZGVyIG5vdCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgbmFtZSBtYW5nbGluZyBvZiBjbGFzcyBmaWVsZHMgb3IKKysgICBjbGFzcyBtZXRob2RzIGNhbGxlZCAnZ2V0dGV4dCcuICAqLworKworKy8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgX0lOVExfUkVESVJFQ1RfSU5MSU5FIG9yIF9JTlRMX1JFRElSRUNUX01BQ1JPUy4KKysgICBJZiBoZSBkb2Vzbid0LCB3ZSBjaG9vc2UgdGhlIG1ldGhvZC4gIEEgdGhpcmQgcG9zc2libGUgbWV0aG9kIGlzCisrICAgX0lOVExfUkVESVJFQ1RfQVNNLCBzdXBwb3J0ZWQgb25seSBieSBHQ0MuICAqLworKyNpZiAhKGRlZmluZWQgX0lOVExfUkVESVJFQ1RfSU5MSU5FIHx8IGRlZmluZWQgX0lOVExfUkVESVJFQ1RfTUFDUk9TKQorKyMgaWYgX19HTlVDX18gPj0gMiAmJiAhZGVmaW5lZCBfX0FQUExFX0NDX18gJiYgIWRlZmluZWQgX19NSU5HVzMyX18gJiYgIShfX0dOVUNfXyA9PSAyICYmIGRlZmluZWQgX0FJWCkgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cykKKysjICBkZWZpbmUgX0lOVExfUkVESVJFQ1RfQVNNCisrIyBlbHNlCisrIyAgaWZkZWYgX19jcGx1c3BsdXMKKysjICAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX0lOTElORQorKyMgIGVsc2UKKysjICAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKy8qIEF1eGlsaWFyeSBtYWNyb3MuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9BU00KKysjIGRlZmluZSBfSU5UTF9BU00oY25hbWUpIF9fYXNtX18gKF9JTlRMX0FTTU5BTUUgKF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgI2NuYW1lKSkKKysjIGRlZmluZSBfSU5UTF9BU01OQU1FKHByZWZpeCxjbmFtZXN0cmluZykgX0lOVExfU1RSSU5HSUZZIChwcmVmaXgpIGNuYW1lc3RyaW5nCisrIyBkZWZpbmUgX0lOVExfU1RSSU5HSUZZKHByZWZpeCkgI3ByZWZpeAorKyNlbHNlCisrIyBkZWZpbmUgX0lOVExfQVNNKGNuYW1lKQorKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisrICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKysgICB0ZXh0KS4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX2dldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCkKKyt7CisrICByZXR1cm4gbGliaW50bF9nZXR0ZXh0IChfX21zZ2lkKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZ2V0dGV4dCBsaWJpbnRsX2dldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2dldHRleHQpOworKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX2RnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCkKKyt7CisrICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZGdldHRleHQgbGliaW50bF9kZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGdldHRleHQpOworKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorKyAgIGxvY2FsZS4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX2RjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorKwkJCQlpbnQgX19jYXRlZ29yeSk7Cisrc3RhdGljIGlubGluZSBjaGFyICpkY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkgICAgICAgaW50IF9fY2F0ZWdvcnkpCisreworKyAgcmV0dXJuIGxpYmludGxfZGNnZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQsIF9fY2F0ZWdvcnkpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBkY2dldHRleHQgbGliaW50bF9kY2dldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisrCQkJaW50IF9fY2F0ZWdvcnkpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kY2dldHRleHQpOworKyNlbmRpZgorKworKworKy8qIFNpbWlsYXIgdG8gYGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pOworK3N0YXRpYyBpbmxpbmUgY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCisreworKyAgcmV0dXJuIGxpYmludGxfbmdldHRleHQgKF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgbmdldHRleHQgbGliaW50bF9uZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX25nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBTaW1pbGFyIHRvIGBkZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKysgICBudW1iZXIgTi4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkMSwKKysJCQkJY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbik7Cisrc3RhdGljIGlubGluZSBjaGFyICpkbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCisrCQkJICAgICAgIGNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pCisreworKyAgcmV0dXJuIGxpYmludGxfZG5nZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZG5nZXR0ZXh0IGxpYmludGxfZG5nZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCWNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQl1bnNpZ25lZCBsb25nIGludCBfX24pCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kbmdldHRleHQpOworKyNlbmRpZgorKworKy8qIFNpbWlsYXIgdG8gYGRjZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKysgICBudW1iZXIgTi4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkJIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQljb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCXVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpCisreworKyAgcmV0dXJuIGxpYmludGxfZGNuZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkMSwgX19tc2dpZDIsIF9fbiwgX19jYXRlZ29yeSk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRjbmdldHRleHQgbGliaW50bF9kY25nZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGNuZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrCisrLyogU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIHRvIERPTUFJTk5BTUUuCisrICAgSWYgRE9NQUlOTkFNRSBpcyBudWxsLCByZXR1cm4gdGhlIGN1cnJlbnQgZGVmYXVsdC4KKysgICBJZiBET01BSU5OQU1FIGlzICIiLCByZXNldCB0byB0aGUgZGVmYXVsdCBvZiAibWVzc2FnZXMiLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKnRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkKKyt7CisrICByZXR1cm4gbGliaW50bF90ZXh0ZG9tYWluIChfX2RvbWFpbm5hbWUpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSB0ZXh0ZG9tYWluIGxpYmludGxfdGV4dGRvbWFpbgorKyNlbmRpZgorK2V4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF90ZXh0ZG9tYWluKTsKKysjZW5kaWYKKysKKysvKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKysgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSAgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZHRleHRkb21haW4gKF9fZG9tYWlubmFtZSwgX19kaXJuYW1lKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgYmluZHRleHRkb21haW4gbGliaW50bF9iaW5kdGV4dGRvbWFpbgorKyNlbmRpZgorK2V4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX2Rpcm5hbWUpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9iaW5kdGV4dGRvbWFpbik7CisrI2VuZGlmCisrCisrLyogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZQorKyAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJICAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCQkgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCkKKyt7CisrICByZXR1cm4gbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCAoX19kb21haW5uYW1lLCBfX2NvZGVzZXQpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBiaW5kX3RleHRkb21haW5fY29kZXNldCBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KTsKKysjZW5kaWYKKysKKysKKysvKiBTdXBwb3J0IGZvciBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucyBpbiAqcHJpbnRmKCksIGZvbGxvd2luZyB0aGUKKysgICBQT1NJWC9YU0kgc3BlY2lmaWNhdGlvbi4KKysgICBOb3RlOiBUaGVzZSByZXBsYWNlbWVudHMgZm9yIHRoZSAqcHJpbnRmKCkgZnVuY3Rpb25zIGFyZSB2aXNpYmxlIG9ubHkKKysgICBpbiBzb3VyY2UgZmlsZXMgdGhhdCAjaW5jbHVkZSA8bGliaW50bC5oPiBvciAjaW5jbHVkZSAiZ2V0dGV4dC5oIi4KKysgICBQYWNrYWdlcyB0aGF0IHVzZSAqcHJpbnRmKCkgaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgcmVmZXIgdG8gXygpCisrICAgb3IgZ2V0dGV4dCgpIGJ1dCBmb3Igd2hpY2ggdGhlIGZvcm1hdCBzdHJpbmcgY291bGQgYmUgdGhlIHJldHVybiB2YWx1ZQorKyAgIG9mIF8oKSBvciBnZXR0ZXh0KCkgbmVlZCB0byBhZGQgdGhpcyAjaW5jbHVkZS4gIE9oIHdlbGwuICAqLworKworKyNpZiAhQEhBVkVfUE9TSVhfUFJJTlRGQAorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2lmIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUgorKyMgaW5jbHVkZSA8c3RkYXJnLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPHZhcmFyZ3MuaD4KKysjZW5kaWYKKysKKysjdW5kZWYgZnByaW50ZgorKyNkZWZpbmUgZnByaW50ZiBsaWJpbnRsX2ZwcmludGYKKytleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOworKyN1bmRlZiB2ZnByaW50ZgorKyNkZWZpbmUgdmZwcmludGYgbGliaW50bF92ZnByaW50ZgorK2V4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKysKKysjdW5kZWYgcHJpbnRmCisrI2RlZmluZSBwcmludGYgbGliaW50bF9wcmludGYKKytleHRlcm4gaW50IHByaW50ZiAoY29uc3QgY2hhciAqLCAuLi4pOworKyN1bmRlZiB2cHJpbnRmCisrI2RlZmluZSB2cHJpbnRmIGxpYmludGxfdnByaW50ZgorK2V4dGVybiBpbnQgdnByaW50ZiAoY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKysKKysjdW5kZWYgc3ByaW50ZgorKyNkZWZpbmUgc3ByaW50ZiBsaWJpbnRsX3NwcmludGYKKytleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworKyN1bmRlZiB2c3ByaW50ZgorKyNkZWZpbmUgdnNwcmludGYgbGliaW50bF92c3ByaW50ZgorK2V4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKysKKysjaWYgQEhBVkVfU05QUklOVEZACisrCisrI3VuZGVmIHNucHJpbnRmCisrI2RlZmluZSBzbnByaW50ZiBsaWJpbnRsX3NucHJpbnRmCisrZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnNucHJpbnRmCisrI2RlZmluZSB2c25wcmludGYgbGliaW50bF92c25wcmludGYKKytleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2VuZGlmCisrCisrI2lmIEBIQVZFX0FTUFJJTlRGQAorKworKyN1bmRlZiBhc3ByaW50ZgorKyNkZWZpbmUgYXNwcmludGYgbGliaW50bF9hc3ByaW50ZgorK2V4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdmFzcHJpbnRmCisrI2RlZmluZSB2YXNwcmludGYgbGliaW50bF92YXNwcmludGYKKytleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKysKKysjZW5kaWYKKysKKysjaWYgQEhBVkVfV1BSSU5URkAKKysKKysjdW5kZWYgZndwcmludGYKKysjZGVmaW5lIGZ3cHJpbnRmIGxpYmludGxfZndwcmludGYKKytleHRlcm4gaW50IGZ3cHJpbnRmIChGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKysjdW5kZWYgdmZ3cHJpbnRmCisrI2RlZmluZSB2ZndwcmludGYgbGliaW50bF92ZndwcmludGYKKytleHRlcm4gaW50IHZmd3ByaW50ZiAoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyN1bmRlZiB3cHJpbnRmCisrI2RlZmluZSB3cHJpbnRmIGxpYmludGxfd3ByaW50ZgorK2V4dGVybiBpbnQgd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworKyN1bmRlZiB2d3ByaW50ZgorKyNkZWZpbmUgdndwcmludGYgbGliaW50bF92d3ByaW50ZgorK2V4dGVybiBpbnQgdndwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHN3cHJpbnRmCisrI2RlZmluZSBzd3ByaW50ZiBsaWJpbnRsX3N3cHJpbnRmCisrZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKysjdW5kZWYgdnN3cHJpbnRmCisrI2RlZmluZSB2c3dwcmludGYgbGliaW50bF92c3dwcmludGYKKytleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CisrCisrI2VuZGlmCisrCisrI2VuZGlmCisrCisrCisrLyogU3VwcG9ydCBmb3IgcmVsb2NhdGFibGUgcGFja2FnZXMuICAqLworKworKy8qIFNldHMgdGhlIG9yaWdpbmFsIGFuZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IG9mIHRoZSBwYWNrYWdlLgorKyAgIFJlbG9jYXRpb24gc2ltcGx5IHJlcGxhY2VzIGEgcGF0aG5hbWUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgcHJlZml4CisrICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKysgICBwcmVmaXhlcyBzaG91bGQgYmUgZGlyZWN0b3J5IG5hbWVzIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2ggKGkuZS4gdXNlICIiCisrICAgaW5zdGVhZCBvZiAiLyIpLiAgKi8KKysjZGVmaW5lIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4CisrZXh0ZXJuIHZvaWQKKysgICAgICAgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4LAorKwkJCQkgICAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeCk7CisrCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBsaWJpbnRsLmggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9saW51eC1tc2cuc2VkCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xpbnV4LW1zZy5zZWQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwMCArMCwwIEBACistIyBwbzJtc2cuc2VkIC0gQ29udmVydCBVbmlmb3J1bSBzdHlsZSAucG8gZmlsZSB0byBMaW51eCBzdHlsZSAubXNnIGZpbGUKKy0jIENvcHlyaWdodCAoQykgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorLSMKKy0jCistIyBUaGUgZmlyc3QgZGlyZWN0aXZlIGluIHRoZSAubXNnIHNob3VsZCBiZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKy0jIG1lc3NhZ2Ugc2V0IG51bWJlci4gIFdlIHVzZSBhbHdheXMgc2V0IG51bWJlciAxLgorLSMKKy0xIHsKKy0gIGlcCistJHNldCAxICMgQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHBvMm1zZy5zZWQKKy0gIGgKKy0gIHMvLiovMC8KKy0gIHgKKy19CistIworLSMgTWl0Y2gncyBvbGQgY2F0YWxvZyBmb3JtYXQgZG9lcyBub3QgYWxsb3cgY29tbWVudHMuCistIworLSMgV2UgY29weSB0aGUgb3JpZ2luYWwgbWVzc2FnZSBhcyBhIGNvbW1lbnQgaW50byB0aGUgLm1zZyBmaWxlLgorLSMKKy0vXm1zZ2lkLyB7CistICBzL21zZ2lkWyAJXSoiLy8KKy0jCistIyBUaGlzIGRvZXMgbm90IHdvcmsgbm93IHdpdGggdGhlIG5ldyBmb3JtYXQuCistIyAvIiQvISB7CistIyAgIHMvXFwkLy8KKy0jICAgcy8kLyAuLi4gKG1vcmUgbGluZXMgZm9sbG93aW5nKSIvCistIyB9CistICB4CistIyBUaGUgZm9sbG93aW5nIG5pY2Ugc29sdXRpb24gaXMgYnkKKy0jIEJydW5vIDxIYWlibGVAbWEyczIubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgorLSAgdGQKKy0jIEluY3JlbWVudCBhIGRlY2ltYWwgbnVtYmVyIGluIHBhdHRlcm4gc3BhY2UuCistIyBGaXJzdCBoaWRlIHRyYWlsaW5nIGA5JyBkaWdpdHMuCistICA6ZAorLSAgcy85XChfKlwpJC9fXDEvCistICB0ZAorLSMgQXNzdXJlIGF0IGxlYXN0IG9uZSBkaWdpdCBpcyBhdmFpbGFibGUuCistICBzL15cKF8qXCkkLzBcMS8KKy0jIEluY3JlbWVudCB0aGUgbGFzdCBkaWdpdC4KKy0gIHMvOFwoXypcKSQvOVwxLworLSAgcy83XChfKlwpJC84XDEvCistICBzLzZcKF8qXCkkLzdcMS8KKy0gIHMvNVwoXypcKSQvNlwxLworLSAgcy80XChfKlwpJC81XDEvCistICBzLzNcKF8qXCkkLzRcMS8KKy0gIHMvMlwoXypcKSQvM1wxLworLSAgcy8xXChfKlwpJC8yXDEvCistICBzLzBcKF8qXCkkLzFcMS8KKy0jIENvbnZlcnQgdGhlIGhpZGRlbiBgOScgZGlnaXRzIHRvIGAwJ3MuCistICBzL18vMC9nCistICB4CistICBHCistICBzL1woLipcKSJcblwoWzAtOV0qXCkvJCAjXDIgT3JpZ2luYWwgTWVzc2FnZTooXDEpL3AKKy19CistIworLSMgVGhlIC5tc2cgZmlsZSBjb250YWlucywgb3RoZXIgdGhlbiB0aGUgLnBvIGZpbGUsIG9ubHkgdGhlIHRyYW5zbGF0aW9ucworLSMgYnV0IGVhY2ggZ2l2ZW4gYSB1bmlxdWUgSUQuICBTdGFydGluZyBmcm9tIDEgYW5kIGluY3JlbWVudGluZyBieSAxIGZvcgorLSMgZWFjaCBtZXNzYWdlIHdlIGFzc2lnbiB0aGVtIHRvIHRoZSBtZXNzYWdlcy4KKy0jIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSAucG8gZmlsZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjYXQtaWQtdGJsLmMgZmlsZQorLSMgKHdpdGggcG8tdG8tdGJsKSBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHVzZWQgaGVyZS4gIChBdCBsZWFzdCB0aGUgb3JkZXIKKy0jIG9mIGRlY2xhcmF0aW9ucyBtdXN0IG5vdCBiZSBjaGFuZ2VkLikKKy0jCistL15tc2dzdHIvIHsKKy0gIHMvbXNnc3RyWyAJXSoiXCguKlwpIi8jIFwxLworLSMgQ2xlYXIgc3Vic3RpdHV0aW9uIGZsYWcuCistICB0YgorLSMgQXBwZW5kIHRoZSBuZXh0IGxpbmUuCistICA6YgorLSAgTgorLSMgTG9vayB3aGV0aGVyIHNlY29uZCBwYXJ0IGlzIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXG5cKSJcKC4qXCkiL1wxXDIvCistIyBZZXMsIHRoZW4gYnJhbmNoLgorLSAgdGEKKy0gIFAKKy0gIEQKKy0jIE5vdGUgdGhhdCBEIGluY2x1ZGVzIGEganVtcCB0byB0aGUgc3RhcnQhIQorLSMgV2UgZm91bmQgYSBjb250aW51YXRpb24gbGluZS4gIEJ1dCBiZWZvcmUgcHJpbnRpbmcgaW5zZXJ0ICdcJy4KKy0gIDphCistICBzL1woLipcKVwoXG4uKlwpL1wxXFxcMi8KKy0gIFAKKy0jIFdlIGNhbm5vdCB1c2UgRCBoZXJlLgorLSAgcy8uKlxuXCguKlwpL1wxLworLSAgdGIKKy19CistZAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvYWRpbmZvLmgJMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9hZGluZm8uaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ2ODczMDkxMiAtMDQwMAorQEAgLTEsOSArMSw1NCBAQAorLSNpZm5kZWYgUEFSQU1TCistIyBpZiBfX1NURENfXworLSMgIGRlZmluZSBQQVJBTVMoYXJncykgYXJncworLSMgZWxzZQorLSMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKy0jIGVuZGlmCisrLyogQ29weXJpZ2h0IChDKSAxOTk2LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfTE9BRElORk9fSAorKyNkZWZpbmUgX0xPQURJTkZPX0gJMQorKworKy8qIERlY2xhcmF0aW9ucyBvZiBsb2NhbGUgZGVwZW5kZW50IGNhdGFsb2cgbG9va3VwIGZ1bmN0aW9ucy4KKysgICBJbXBsZW1lbnRlZCBpbgorKworKyAgICAgbG9jYWxlYWxpYXMuYyAgICBQb3NzaWJseSByZXBsYWNlIGEgbG9jYWxlIG5hbWUgYnkgYW5vdGhlci4KKysgICAgIGV4cGxvZGVuYW1lLmMgICAgU3BsaXQgYSBsb2NhbGUgbmFtZSBpbnRvIGl0cyB2YXJpb3VzIGZpZWxkcy4KKysgICAgIGwxMG5mbGlzdC5jICAgICAgR2VuZXJhdGUgYSBsaXN0IG9mIGZpbGVuYW1lcyBvZiBwb3NzaWJsZSBtZXNzYWdlIGNhdGFsb2dzLgorKyAgICAgZmluZGRvbWFpbi5jICAgICBGaW5kIGFuZCBvcGVuIHRoZSByZWxldmFudCBtZXNzYWdlIGNhdGFsb2dzLgorKworKyAgIFRoZSBtYWluIGZ1bmN0aW9uIF9ubF9maW5kX2RvbWFpbigpIGluIGZpbmRkb21haW4uYyBpcyBkZWNsYXJlZAorKyAgIGluIGdldHRleHRQLmguCisrICovCisrCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworKyAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9FWFBFQ1QKKysjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCisrI2VuZGlmCisrCisrLyogU2VwYXJhdG9yIGluIFBBVEggbGlrZSBsaXN0cyBvZiBwYXRobmFtZXMuICAqLworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOycKKysjZWxzZQorKyAgLyogVW5peCAqLworKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworICNlbmRpZgorIAorIC8qIEVuY29kaW5nIG9mIGxvY2FsZSBuYW1lIHBhcnRzLiAgKi8KK0BAIC0zMiwyNyArNzcsNjkgQEAKKyB9OworIAorIAorLWV4dGVybiBjb25zdCBjaGFyICpfbmxfbm9ybWFsaXplX2NvZGVzZXQgUEFSQU1TICgoY29uc3QgY2hhciAqY29kZXNldCwKKy0JCQkJCQkgIHNpemVfdCBuYW1lX2xlbikpOworKy8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKysgICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorKyAgIG5hbWVzLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGhhcyB0byBiZQorKyAgIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworK2V4dGVybiBjb25zdCBjaGFyICpfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsCisrCQkJCQkgIHNpemVfdCBuYW1lX2xlbik7CisgCisrLyogTG9va3VwIGEgbG9jYWxlIGRlcGVuZGVudCBmaWxlLgorKyAgICpMMTBORklMRV9MSVNUIGRlbm90ZXMgYSBwb29sIG9mIGxvb2t1cCByZXN1bHRzIG9mIGxvY2FsZSBkZXBlbmRlbnQKKysgICBmaWxlcyBvZiB0aGUgc2FtZSBraW5kLCBzb3J0ZWQgaW4gZGVjcmVhc2luZyBvcmRlciBvZiAtPmZpbGVuYW1lLgorKyAgIERJUkxJU1QgYW5kIERJUkxJU1RfTEVOIGFyZSBhbiBhcmd6IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaW4gd2hpY2ggdG8KKysgICBsb29rLCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBkaXJlY3RvcnkgKGkuZS4gRElSTElTVF9MRU4gPiAwKS4KKysgICBNQVNLLCBMQU5HVUFHRSwgVEVSUklUT1JZLCBDT0RFU0VULCBOT1JNQUxJWkVEX0NPREVTRVQsIE1PRElGSUVSLAorKyAgIFNQRUNJQUwsIFNQT05TT1IsIFJFVklTSU9OIGFyZSB0aGUgcGllY2VzIG9mIHRoZSBsb2NhbGUgbmFtZSwgYXMKKysgICBwcm9kdWNlZCBieSBfbmxfZXhwbG9kZV9uYW1lKCkuICBGSUxFTkFNRSBpcyB0aGUgZmlsZW5hbWUgc3VmZml4LgorKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGxvb2t1cCByZXN1bHQsIGVpdGhlciBmb3VuZCBpbiAqTDEwTkZJTEVfTElTVCwKKysgICBvciAtIGlmIERPX0FMTE9DQVRFIGlzIG5vbnplcm8gLSBmcmVzaGx5IGFsbG9jYXRlZCwgb3IgcG9zc2libHkgTlVMTC4KKysgICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vbi1OVUxMLCBpdCBpcyBhZGRlZCB0byAqTDEwTkZJTEVfTElTVCwgYW5kCisrICAgaXRzIC0+bmV4dCBmaWVsZCBkZW5vdGVzIHRoZSBjaGFpbmluZyBpbnNpZGUgKkwxME5GSUxFX0xJU1QsIGFuZAorKyAgIGZ1cnRoZXJtb3JlIGl0cyAtPnN1Y2Nlc3NvcltdIGZpZWxkIGNvbnRhaW5zIGEgbGlzdCBvZiBvdGhlciBsb29rdXAKKysgICByZXN1bHRzIGZyb20gd2hpY2ggdGhpcyBsb29rdXAgcmVzdWx0IGluaGVyaXRzLiAgKi8KKyBleHRlcm4gc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqCistX25sX21ha2VfbDEwbmZsaXN0IFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorLQkJCSAgICBjb25zdCBjaGFyICpkaXJsaXN0LCBzaXplX3QgZGlybGlzdF9sZW4sIGludCBtYXNrLAorLQkJCSAgICBjb25zdCBjaGFyICpsYW5ndWFnZSwgY29uc3QgY2hhciAqdGVycml0b3J5LAorLQkJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LAorLQkJCSAgICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCistCQkJICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVyLCBjb25zdCBjaGFyICpzcGVjaWFsLAorLQkJCSAgICBjb25zdCBjaGFyICpzcG9uc29yLCBjb25zdCBjaGFyICpyZXZpc2lvbiwKKy0JCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSkpOworK19ubF9tYWtlX2wxMG5mbGlzdCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3QsCisrCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLCBpbnQgbWFzaywKKysJCSAgICBjb25zdCBjaGFyICpsYW5ndWFnZSwgY29uc3QgY2hhciAqdGVycml0b3J5LAorKwkJICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQsIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfY29kZXNldCwKKysJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKysJCSAgICBjb25zdCBjaGFyICpzcG9uc29yLCBjb25zdCBjaGFyICpyZXZpc2lvbiwKKysJCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGRvX2FsbG9jYXRlKTsKKyAKKysvKiBMb29rdXAgdGhlIHJlYWwgbG9jYWxlIG5hbWUgZm9yIGEgbG9jYWxlIGFsaWFzIE5BTUUsIG9yIE5VTEwgaWYKKysgICBOQU1FIGlzIG5vdCBhIGxvY2FsZSBhbGlhcyAoYnV0IHBvc3NpYmx5IGEgcmVhbCBsb2NhbGUgbmFtZSkuCisrICAgVGhlIHJldHVybiB2YWx1ZSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgbXVzdCBub3QgYmUgZnJlZWQuICAqLworK2V4dGVybiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICpuYW1lKTsKKyAKKy1leHRlcm4gY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyBQQVJBTVMgKChjb25zdCBjaGFyICpuYW1lKSk7CisrLyogU3BsaXQgYSBsb2NhbGUgbmFtZSBOQU1FIGludG8gaXRzIHBpZWNlczogbGFuZ3VhZ2UsIG1vZGlmaWVyLAorKyAgIHRlcnJpdG9yeSwgY29kZXNldCwgc3BlY2lhbCwgc3BvbnNvciwgcmV2aXNpb24uCisrICAgTkFNRSBnZXRzIGRlc3RydWN0aXZlbHkgbW9kaWZpZWQ6IE5VTCBieXRlcyBhcmUgaW5zZXJ0ZWQgaGVyZSBhbmQKKysgICB0aGVyZS4gICpMQU5HVUFHRSBnZXRzIGFzc2lnbmVkIE5BTUUuICBFYWNoIG9mICpNT0RJRklFUiwgKlRFUlJJVE9SWSwKKysgICAqQ09ERVNFVCwgKlNQRUNJQUwsICpTUE9OU09SLCAqUkVWSVNJT04gZ2V0cyBhc3NpZ25lZCBlaXRoZXIgYQorKyAgIHBvaW50ZXIgaW50byB0aGUgb2xkIE5BTUUgc3RyaW5nLCBvciBOVUxMLiAgKk5PUk1BTElaRURfQ09ERVNFVAorKyAgIGdldHMgYXNzaWduZWQgdGhlIGV4cGFuZGVkICpDT0RFU0VULCBpZiBpdCBpcyBkaWZmZXJlbnQgZnJvbSAqQ09ERVNFVDsKKysgICB0aGlzIG9uZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGhhcyB0byBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBiaXRtYXNrLCB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBvbmUKKysgICBmaWxsZWQtaW4gdmFsdWU6CisrICAgICBYUEdfTU9ESUZJRVIsIENFTl9BVURJRU5DRSAgZm9yICpNT0RJRklFUiwKKysgICAgIFRFUlJJVE9SWSAgICAgICAgICAgICAgICAgICBmb3IgKlRFUlJJVE9SWSwKKysgICAgIFhQR19DT0RFU0VUICAgICAgICAgICAgICAgICBmb3IgKkNPREVTRVQsCisrICAgICBYUEdfTk9STV9DT0RFU0VUICAgICAgICAgICAgZm9yICpOT1JNQUxJWkVEX0NPREVTRVQsCisrICAgICBDRU5fU1BFQ0lBTCAgICAgICAgICAgICAgICAgZm9yICpTUEVDSUFMLAorKyAgICAgQ0VOX1NQT05TT1IgICAgICAgICAgICAgICAgIGZvciAqU1BPTlNPUiwKKysgICAgIENFTl9SRVZJU0lPTiAgICAgICAgICAgICAgICBmb3IgKlJFVklTSU9OLgorKyAqLworK2V4dGVybiBpbnQgX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmxhbmd1YWdlLAorKwkJCSAgICAgY29uc3QgY2hhciAqKm1vZGlmaWVyLCBjb25zdCBjaGFyICoqdGVycml0b3J5LAorKwkJCSAgICAgY29uc3QgY2hhciAqKmNvZGVzZXQsCisrCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LAorKwkJCSAgICAgY29uc3QgY2hhciAqKnNwZWNpYWwsIGNvbnN0IGNoYXIgKipzcG9uc29yLAorKwkJCSAgICAgY29uc3QgY2hhciAqKnJldmlzaW9uKTsKKyAKKy1leHRlcm4gaW50IF9ubF9leHBsb2RlX25hbWUgUEFSQU1TICgoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmxhbmd1YWdlLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKiptb2RpZmllciwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqdGVycml0b3J5LAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipub3JtYWxpemVkX2NvZGVzZXQsCistCQkJCSAgICAgY29uc3QgY2hhciAqKnNwZWNpYWwsCistCQkJCSAgICAgY29uc3QgY2hhciAqKnNwb25zb3IsCistCQkJCSAgICAgY29uc3QgY2hhciAqKnJldmlzaW9uKSk7CisrLyogU3BsaXQgYSBsb2NhbGUgbmFtZSBOQU1FIGludG8gYSBsZWFkaW5nIGxhbmd1YWdlIHBhcnQgYW5kIGFsbCB0aGUKKysgICByZXN0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYW5ndWFnZSwKKysgICBpLmUuIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXN0LiAgKi8KKytleHRlcm4gY2hhciAqX25sX2ZpbmRfbGFuZ3VhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpOworKworKyNlbmRpZgkvKiBsb2FkaW5mby5oICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9hZG1zZ2NhdC5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvYWRtc2djYXQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ3MzczMDE1MiAtMDQwMAorQEAgLTEsNDIgKzEsNDU1IEBACistLyogTG9hZCBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBMb2FkIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIG1lbXBjcHkoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKysjaWZkZWYgX19HTlVDX18KKysjIHVuZGVmICBhbGxvY2EKKysjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKysjZWxzZQorKyMgaWZkZWYgX01TQ19WRVIKKysjICBpbmNsdWRlIDxtYWxsb2MuaD4KKysjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKysjIGVsc2UKKysjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICBlbHNlCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYQorK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisgI2VuZGlmCisgCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKyAjaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorICNlbmRpZgorIAorLSNpZiAoZGVmaW5lZCBIQVZFX01NQVAgJiYgZGVmaW5lZCBIQVZFX01VTk1BUCkgfHwgZGVmaW5lZCBfTElCQworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjIGluY2x1ZGUgPGxvY2FsZS5oPgorKyNlbmRpZgorKworKyNpZiAoZGVmaW5lZCBIQVZFX01NQVAgJiYgZGVmaW5lZCBIQVZFX01VTk1BUCAmJiAhZGVmaW5lZCBESVNBTExPV19NTUFQKSBcCisrICAgIHx8IChkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgX1BPU0lYX01BUFBFRF9GSUxFUykKKyAjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisrIyB1bmRlZiBIQVZFX01NQVAKKysjIGRlZmluZSBIQVZFX01NQVAJMQorKyNlbHNlCisrIyB1bmRlZiBIQVZFX01NQVAKKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSAiZ2V0dGV4dC5oIgorKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnbW8uaCIKKyAjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKysjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorKworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKysjZW5kaWYKKysKKysvKiBQcm92aWRlIGZhbGxiYWNrIHZhbHVlcyBmb3IgbWFjcm9zIHRoYXQgb3VnaHQgdG8gYmUgZGVmaW5lZCBpbiA8aW50dHlwZXMuaD4uCisrICAgTm90ZSB0aGF0IG91ciBmYWxsYmFjayB2YWx1ZXMgbmVlZCBub3QgYmUgbGl0ZXJhbCBzdHJpbmdzLCBiZWNhdXNlIHdlIGRvbid0CisrICAgdXNlIHRoZW0gd2l0aCBwcmVwcm9jZXNzb3Igc3RyaW5nIGNvbmNhdGVuYXRpb24uICAqLworKyNpZiAhZGVmaW5lZCBQUklkOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZDgKKysjIGRlZmluZSBQUklkOCAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaTggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWk4CisrIyBkZWZpbmUgUFJJaTggImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW84IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvOAorKyMgZGVmaW5lIFBSSW84ICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1OCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdTgKKysjIGRlZmluZSBQUkl1OCAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXg4CisrIyBkZWZpbmUgUFJJeDggIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYOAorKyMgZGVmaW5lIFBSSVg4ICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWQxNgorKyMgZGVmaW5lIFBSSWQxNiAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaTE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpMTYKKysjIGRlZmluZSBQUklpMTYgImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW8xNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJbzE2CisrIyBkZWZpbmUgUFJJbzE2ICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1MTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXUxNgorKyMgZGVmaW5lIFBSSXUxNiAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4MTYKKysjIGRlZmluZSBQUkl4MTYgIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWDE2CisrIyBkZWZpbmUgUFJJWDE2ICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWQzMgorKyMgZGVmaW5lIFBSSWQzMiAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaTMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpMzIKKysjIGRlZmluZSBQUklpMzIgImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW8zMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJbzMyCisrIyBkZWZpbmUgUFJJbzMyICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1MzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXUzMgorKyMgZGVmaW5lIFBSSXUzMiAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4MzIKKysjIGRlZmluZSBQUkl4MzIgIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWDMyCisrIyBkZWZpbmUgUFJJWDMyICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWQ2NAorKyMgZGVmaW5lIFBSSWQ2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxkIiA6ICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWk2NAorKyMgZGVmaW5lIFBSSWk2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxpIiA6ICJsbGkiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW82NAorKyMgZGVmaW5lIFBSSW82NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxvIiA6ICJsbG8iKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1NjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXU2NAorKyMgZGVmaW5lIFBSSXU2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImx1IiA6ICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4NjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXg2NAorKyMgZGVmaW5lIFBSSXg2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImx4IiA6ICJsbHgiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVg2NAorKyMgZGVmaW5lIFBSSVg2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxYIiA6ICJsbFgiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkTEVBU1Q4CisrIyBkZWZpbmUgUFJJZExFQVNUOCAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUxFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUxFQVNUOAorKyMgZGVmaW5lIFBSSWlMRUFTVDggImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9MRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9MRUFTVDgKKysjIGRlZmluZSBQUklvTEVBU1Q4ICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1TEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1TEVBU1Q4CisrIyBkZWZpbmUgUFJJdUxFQVNUOCAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeExFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeExFQVNUOAorKyMgZGVmaW5lIFBSSXhMRUFTVDggIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhMRUFTVDgKKysjIGRlZmluZSBQUklYTEVBU1Q4ICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZExFQVNUMTYKKysjIGRlZmluZSBQUklkTEVBU1QxNiAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUxFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlMRUFTVDE2CisrIyBkZWZpbmUgUFJJaUxFQVNUMTYgImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9MRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTEVBU1QxNgorKyMgZGVmaW5lIFBSSW9MRUFTVDE2ICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1TEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUxFQVNUMTYKKysjIGRlZmluZSBQUkl1TEVBU1QxNiAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeExFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhMRUFTVDE2CisrIyBkZWZpbmUgUFJJeExFQVNUMTYgIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTEVBU1QxNgorKyMgZGVmaW5lIFBSSVhMRUFTVDE2ICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZExFQVNUMzIKKysjIGRlZmluZSBQUklkTEVBU1QzMiAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUxFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlMRUFTVDMyCisrIyBkZWZpbmUgUFJJaUxFQVNUMzIgImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9MRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTEVBU1QzMgorKyMgZGVmaW5lIFBSSW9MRUFTVDMyICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1TEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUxFQVNUMzIKKysjIGRlZmluZSBQUkl1TEVBU1QzMiAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeExFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhMRUFTVDMyCisrIyBkZWZpbmUgUFJJeExFQVNUMzIgIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTEVBU1QzMgorKyMgZGVmaW5lIFBSSVhMRUFTVDMyICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZExFQVNUNjQKKysjIGRlZmluZSBQUklkTEVBU1Q2NCBQUklkNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUxFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlMRUFTVDY0CisrIyBkZWZpbmUgUFJJaUxFQVNUNjQgUFJJaTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9MRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTEVBU1Q2NAorKyMgZGVmaW5lIFBSSW9MRUFTVDY0IFBSSW82NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1TEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUxFQVNUNjQKKysjIGRlZmluZSBQUkl1TEVBU1Q2NCBQUkl1NjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeExFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhMRUFTVDY0CisrIyBkZWZpbmUgUFJJeExFQVNUNjQgUFJJeDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTEVBU1Q2NAorKyMgZGVmaW5lIFBSSVhMRUFTVDY0IFBSSVg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRGQVNUOAorKyMgZGVmaW5lIFBSSWRGQVNUOCAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpRkFTVDgKKysjIGRlZmluZSBQUklpRkFTVDggImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9GQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0ZBU1Q4CisrIyBkZWZpbmUgUFJJb0ZBU1Q4ICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1RkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVGQVNUOAorKyMgZGVmaW5lIFBSSXVGQVNUOCAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeEZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4RkFTVDgKKysjIGRlZmluZSBQUkl4RkFTVDggIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWEZBU1Q4CisrIyBkZWZpbmUgUFJJWEZBU1Q4ICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkRkFTVDE2CisrIyBkZWZpbmUgUFJJZEZBU1QxNiAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUZBU1QxNgorKyMgZGVmaW5lIFBSSWlGQVNUMTYgImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9GQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9GQVNUMTYKKysjIGRlZmluZSBQUklvRkFTVDE2ICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1RkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1RkFTVDE2CisrIyBkZWZpbmUgUFJJdUZBU1QxNiAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeEZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeEZBU1QxNgorKyMgZGVmaW5lIFBSSXhGQVNUMTYgIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhGQVNUMTYKKysjIGRlZmluZSBQUklYRkFTVDE2ICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkRkFTVDMyCisrIyBkZWZpbmUgUFJJZEZBU1QzMiAiZCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUZBU1QzMgorKyMgZGVmaW5lIFBSSWlGQVNUMzIgImkiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9GQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9GQVNUMzIKKysjIGRlZmluZSBQUklvRkFTVDMyICJvIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1RkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1RkFTVDMyCisrIyBkZWZpbmUgUFJJdUZBU1QzMiAidSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeEZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeEZBU1QzMgorKyMgZGVmaW5lIFBSSXhGQVNUMzIgIngiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhGQVNUMzIKKysjIGRlZmluZSBQUklYRkFTVDMyICJYIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkRkFTVDY0CisrIyBkZWZpbmUgUFJJZEZBU1Q2NCBQUklkNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaUZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUZBU1Q2NAorKyMgZGVmaW5lIFBSSWlGQVNUNjQgUFJJaTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9GQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9GQVNUNjQKKysjIGRlZmluZSBQUklvRkFTVDY0IFBSSW82NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1RkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1RkFTVDY0CisrIyBkZWZpbmUgUFJJdUZBU1Q2NCBQUkl1NjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeEZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeEZBU1Q2NAorKyMgZGVmaW5lIFBSSXhGQVNUNjQgUFJJeDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhGQVNUNjQKKysjIGRlZmluZSBQUklYRkFTVDY0IFBSSVg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkTUFYCisrIyBkZWZpbmUgUFJJZE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibGQiIDogImxsZCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlNQVgKKysjIGRlZmluZSBQUklpTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsaSIgOiAibGxpIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb01BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb01BWAorKyMgZGVmaW5lIFBSSW9NQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxvIiA6ICJsbG8iKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1TUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1TUFYCisrIyBkZWZpbmUgUFJJdU1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibHUiIDogImxsdSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhNQVgKKysjIGRlZmluZSBQUkl4TUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJseCIgOiAibGx4IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWE1BWAorKyMgZGVmaW5lIFBSSVhNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxYIiA6ICJsbFgiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklkUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkUFRSCisrIyBkZWZpbmUgUFJJZFBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibGQiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiZCIgOiBcCisrICAgImxsZCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlQVFIKKysjIGRlZmluZSBQUklpUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsaSIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJpIiA6IFwKKysgICAibGxpIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb1BUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb1BUUgorKyMgZGVmaW5lIFBSSW9QVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxvIiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gIm8iIDogXAorKyAgICJsbG8iKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl1UFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1UFRSCisrIyBkZWZpbmUgUFJJdVBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibHUiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAidSIgOiBcCisrICAgImxsdSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhQVFIKKysjIGRlZmluZSBQUkl4UFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJseCIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJ4IiA6IFwKKysgICAibGx4IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWFBUUgorKyMgZGVmaW5lIFBSSVhQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxYIiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gIlgiIDogXAorKyAgICJsbFgiKQorKyNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKK0BAIC00NCw3ICs0NTcsNiBAQAorIC8qIFJlbmFtZSB0aGUgbm9uIElTTyBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisgICAgYmVjYXVzZSBzb21lIElTTyBDIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CisgICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworLSMgZGVmaW5lIGZzdGF0ICBfX2ZzdGF0CisgIyBkZWZpbmUgb3BlbiAgIF9fb3BlbgorICMgZGVmaW5lIGNsb3NlICBfX2Nsb3NlCisgIyBkZWZpbmUgcmVhZCAgIF9fcmVhZAorQEAgLTUyLDMwICs0NjQsNDcxIEBACisgIyBkZWZpbmUgbXVubWFwIF9fbXVubWFwCisgI2VuZGlmCisgCisrLyogRm9yIHRob3NlIGxvc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKysgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworKyNpZmRlZiBIQVZFX0FMTE9DQQorKyMgZGVmaW5lIGZyZWVhKHApIC8qIG5vdGhpbmcgKi8KKysjZWxzZQorKyMgZGVmaW5lIGFsbG9jYShuKSBtYWxsb2MgKG4pCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYKKysKKysvKiBGb3Igc3lzdGVtcyB0aGF0IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IEkvTy4KKysgICBPX0JJTkFSWSBpcyB1c3VhbGx5IGRlY2xhcmVkIGluIDxmY250bC5oPi4gKi8KKysjaWYgIWRlZmluZWQgT19CSU5BUlkgJiYgZGVmaW5lZCBfT19CSU5BUlkKKysgIC8qIEZvciBNU0MtY29tcGF0aWJsZSBjb21waWxlcnMuICAqLworKyMgZGVmaW5lIE9fQklOQVJZIF9PX0JJTkFSWQorKyMgZGVmaW5lIE9fVEVYVCBfT19URVhUCisrI2VuZGlmCisrI2lmZGVmIF9fQkVPU19fCisrICAvKiBCZU9TIDUgaGFzIE9fQklOQVJZIGFuZCBPX1RFWFQsIGJ1dCB0aGV5IGhhdmUgbm8gZWZmZWN0LiAgKi8KKysjIHVuZGVmIE9fQklOQVJZCisrIyB1bmRlZiBPX1RFWFQKKysjZW5kaWYKKysvKiBPbiByZWFzb25hYmxlIHN5c3RlbXMsIGJpbmFyeSBJL08gaXMgdGhlIGRlZmF1bHQuICAqLworKyNpZm5kZWYgT19CSU5BUlkKKysjIGRlZmluZSBPX0JJTkFSWSAwCisrI2VuZGlmCisrCisrCisgLyogV2UgbmVlZCBhIHNpZ24sIHdoZXRoZXIgYSBuZXcgY2F0YWxvZyB3YXMgbG9hZGVkLCB3aGljaCBjYW4gYmUgYXNzb2NpYXRlZAorICAgIHdpdGggYWxsIHRyYW5zbGF0aW9ucy4gIFRoaXMgaXMgaW1wb3J0YW50IGlmIHRoZSB0cmFuc2xhdGlvbnMgYXJlCisgICAgY2FjaGVkIGJ5IG9uZSBvZiBHQ0MncyBmZWF0dXJlcy4gICovCistaW50IF9ubF9tc2dfY2F0X2NudHIgPSAwOworK2ludCBfbmxfbXNnX2NhdF9jbnRyOworIAorIAorKy8qIEV4cGFuZCBhIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQuICBSZXR1cm4gTlVMTCBpZiB1bnN1cHBvcnRlZC4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2dldF9zeXNkZXBfc2VnbWVudF92YWx1ZSAoY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICAvKiBUZXN0IGZvciBhbiBJU08gQyA5OSBzZWN0aW9uIDcuOC4xIGZvcm1hdCBzdHJpbmcgZGlyZWN0aXZlLgorKyAgICAgU3ludGF4OgorKyAgICAgUCBSIEkgeyBkIHwgaSB8IG8gfCB1IHwgeCB8IFggfQorKyAgICAgeyB7IHwgTEVBU1QgfCBGQVNUIH0geyA4IHwgMTYgfCAzMiB8IDY0IH0gfCBNQVggfCBQVFIgfSAgKi8KKysgIC8qIFdlIGRvbid0IHVzZSBhIHRhYmxlIG9mIDE0IHRpbWVzIDYgJ2NvbnN0IGNoYXIgKicgc3RyaW5ncyBoZXJlLCBiZWNhdXNlCisrICAgICBkYXRhIHJlbG9jYXRpb25zIGNvc3Qgc3RhcnR1cCB0aW1lLiAgKi8KKysgIGlmIChuYW1lWzBdID09ICdQJyAmJiBuYW1lWzFdID09ICdSJyAmJiBuYW1lWzJdID09ICdJJykKKysgICAgeworKyAgICAgIGlmIChuYW1lWzNdID09ICdkJyB8fCBuYW1lWzNdID09ICdpJyB8fCBuYW1lWzNdID09ICdvJyB8fCBuYW1lWzNdID09ICd1JworKwkgIHx8IG5hbWVbM10gPT0gJ3gnIHx8IG5hbWVbM10gPT0gJ1gnKQorKwl7CisrCSAgaWYgKG5hbWVbNF0gPT0gJzgnICYmIG5hbWVbNV0gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWQ4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisrCQlyZXR1cm4gUFJJaTg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXU4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisrCQlyZXR1cm4gUFJJeDg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYODsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJzEnICYmIG5hbWVbNV0gPT0gJzYnICYmIG5hbWVbNl0gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWQxNjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWkxNjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJcmV0dXJuIFBSSW8xNjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXUxNjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXgxNjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJcmV0dXJuIFBSSVgxNjsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJzMnICYmIG5hbWVbNV0gPT0gJzInICYmIG5hbWVbNl0gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWQzMjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWkzMjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJcmV0dXJuIFBSSW8zMjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXUzMjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXgzMjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJcmV0dXJuIFBSSVgzMjsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJzYnICYmIG5hbWVbNV0gPT0gJzQnICYmIG5hbWVbNl0gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWQ2NDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWk2NDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJcmV0dXJuIFBSSW82NDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXU2NDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXg2NDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJcmV0dXJuIFBSSVg2NDsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ0wnICYmIG5hbWVbNV0gPT0gJ0UnICYmIG5hbWVbNl0gPT0gJ0EnCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1MnICYmIG5hbWVbOF0gPT0gJ1QnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVs5XSA9PSAnOCcgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkTEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlMRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1TEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhMRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUODsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzldID09ICcxJyAmJiBuYW1lWzEwXSA9PSAnNicgJiYgbmFtZVsxMV0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkTEVBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpTEVBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvTEVBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1TEVBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4TEVBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYTEVBU1QxNjsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzldID09ICczJyAmJiBuYW1lWzEwXSA9PSAnMicgJiYgbmFtZVsxMV0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkTEVBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpTEVBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvTEVBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1TEVBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4TEVBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYTEVBU1QzMjsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzldID09ICc2JyAmJiBuYW1lWzEwXSA9PSAnNCcgJiYgbmFtZVsxMV0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkTEVBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpTEVBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvTEVBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1TEVBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4TEVBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYTEVBU1Q2NDsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ0YnICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1MnCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1QnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVs4XSA9PSAnOCcgJiYgbmFtZVs5XSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRGQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpRkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0ZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVGQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4RkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWEZBU1Q4OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzEnICYmIG5hbWVbOV0gPT0gJzYnICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZEZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpRkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4RkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUMTY7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs4XSA9PSAnMycgJiYgbmFtZVs5XSA9PSAnMicgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlGQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0ZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhGQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWEZBU1QzMjsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzhdID09ICc2JyAmJiBuYW1lWzldID09ICc0JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvRkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYRkFTVDY0OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgIH0KKysJICBpZiAobmFtZVs0XSA9PSAnTScgJiYgbmFtZVs1XSA9PSAnQScgJiYgbmFtZVs2XSA9PSAnWCcKKysJICAgICAgJiYgbmFtZVs3XSA9PSAnXDAnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQlyZXR1cm4gUFJJZE1BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWlNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvTUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAndScpCisrCQlyZXR1cm4gUFJJdU1BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXhNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYTUFYOworKwkgICAgICBhYm9ydCAoKTsKKysJICAgIH0KKysJICBpZiAobmFtZVs0XSA9PSAnUCcgJiYgbmFtZVs1XSA9PSAnVCcgJiYgbmFtZVs2XSA9PSAnUicKKysJICAgICAgJiYgbmFtZVs3XSA9PSAnXDAnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQlyZXR1cm4gUFJJZFBUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWlQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvUFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAndScpCisrCQlyZXR1cm4gUFJJdVBUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXhQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYUFRSOworKwkgICAgICBhYm9ydCAoKTsKKysJICAgIH0KKysJfQorKyAgICB9CisrICAvKiBUZXN0IGZvciBhIGdsaWJjIHNwZWNpZmljIHByaW50ZigpIGZvcm1hdCBkaXJlY3RpdmUgZmxhZy4gICovCisrICBpZiAobmFtZVswXSA9PSAnSScgJiYgbmFtZVsxXSA9PSAnXDAnKQorKyAgICB7CisrI2lmIGRlZmluZWQgX0xJQkMgfHwgX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDIpCisrICAgICAgLyogVGhlICdJJyBmbGFnLCBpbiBudW1lcmljIGZvcm1hdCBkaXJlY3RpdmVzLCByZXBsYWNlcyBBU0NJSSBkaWdpdHMKKysJIHdpdGggdGhlICdvdXRkaWdpdHMnIGRlZmluZWQgaW4gdGhlIExDX0NUWVBFIGxvY2FsZSBmYWNldC4gIFRoaXMgaXMKKysJIHVzZWQgZm9yIEZhcnNpIChQZXJzaWFuKSBhbmQgbWF5YmUgQXJhYmljLiAgKi8KKysgICAgICByZXR1cm4gIkkiOworKyNlbHNlCisrICAgICAgcmV0dXJuICIiOworKyNlbmRpZgorKyAgICB9CisrICAvKiBPdGhlciBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgYXJlIG5vdCB2YWxpZC4gICovCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogSW5pdGlhbGl6ZSB0aGUgY29kZXNldCBkZXBlbmRlbnQgcGFydHMgb2YgYW4gb3BlbmVkIG1lc3NhZ2UgY2F0YWxvZy4KKysgICBSZXR1cm4gdGhlIGhlYWRlciBlbnRyeS4gICovCisrY29uc3QgY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfaW5pdF9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCisrCQkgICAgICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluLAorKwkJICAgICAgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcpCisreworKyAgLyogRmluZCBvdXQgYWJvdXQgdGhlIGNoYXJhY3RlciBzZXQgdGhlIGZpbGUgaXMgZW5jb2RlZCB3aXRoLgorKyAgICAgVGhpcyBjYW4gYmUgZm91bmQgKGluIHRleHR1YWwgZm9ybSkgaW4gdGhlIGVudHJ5ICIiLiAgSWYgdGhpcworKyAgICAgZW50cnkgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhpcyBkb2VzIG5vdCBjb250YWluIHRoZSBgY2hhcnNldD0nCisrICAgICBpbmZvcm1hdGlvbiwgd2Ugd2lsbCBhc3N1bWUgdGhlIGNoYXJzZXQgbWF0Y2hlcyB0aGUgb25lIHRoZQorKyAgICAgY3VycmVudCBsb2NhbGUgYW5kIHdlIGRvbid0IGhhdmUgdG8gcGVyZm9ybSBhbnkgY29udmVyc2lvbi4gICovCisrICBjaGFyICpudWxsZW50cnk7CisrICBzaXplX3QgbnVsbGVudHJ5bGVuOworKworKyAgLyogUHJlaW5pdGlhbGl6ZSBmaWVsZHMsIHRvIGF2b2lkIHJlY3Vyc2lvbiBkdXJpbmcgX25sX2ZpbmRfbXNnLiAgKi8KKysgIGRvbWFpbi0+Y29kZXNldF9jbnRyID0KKysgICAgKGRvbWFpbmJpbmRpbmcgIT0gTlVMTCA/IGRvbWFpbmJpbmRpbmctPmNvZGVzZXRfY250ciA6IDApOworKyNpZmRlZiBfTElCQworKyAgZG9tYWluLT5jb252ID0gKF9fZ2NvbnZfdCkgLTE7CisrI2Vsc2UKKysjIGlmIEhBVkVfSUNPTlYKKysgIGRvbWFpbi0+Y29udiA9IChpY29udl90KSAtMTsKKysjIGVuZGlmCisrI2VuZGlmCisrICBkb21haW4tPmNvbnZfdGFiID0gTlVMTDsKKysKKysgIC8qIEdldCB0aGUgaGVhZGVyIGVudHJ5LiAgKi8KKysgIG51bGxlbnRyeSA9IF9ubF9maW5kX21zZyAoZG9tYWluX2ZpbGUsIGRvbWFpbmJpbmRpbmcsICIiLCAmbnVsbGVudHJ5bGVuKTsKKysKKysgIGlmIChudWxsZW50cnkgIT0gTlVMTCkKKysgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfSUNPTlYKKysgICAgICBjb25zdCBjaGFyICpjaGFyc2V0c3RyOworKworKyAgICAgIGNoYXJzZXRzdHIgPSBzdHJzdHIgKG51bGxlbnRyeSwgImNoYXJzZXQ9Iik7CisrICAgICAgaWYgKGNoYXJzZXRzdHIgIT0gTlVMTCkKKysJeworKwkgIHNpemVfdCBsZW47CisrCSAgY2hhciAqY2hhcnNldDsKKysJICBjb25zdCBjaGFyICpvdXRjaGFyc2V0OworKworKwkgIGNoYXJzZXRzdHIgKz0gc3RybGVuICgiY2hhcnNldD0iKTsKKysJICBsZW4gPSBzdHJjc3BuIChjaGFyc2V0c3RyLCAiIFx0XG4iKTsKKysKKysJICBjaGFyc2V0ID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxKTsKKysjIGlmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9NRU1QQ1BZCisrCSAgKigoY2hhciAqKSBtZW1wY3B5IChjaGFyc2V0LCBjaGFyc2V0c3RyLCBsZW4pKSA9ICdcMCc7CisrIyBlbHNlCisrCSAgbWVtY3B5IChjaGFyc2V0LCBjaGFyc2V0c3RyLCBsZW4pOworKwkgIGNoYXJzZXRbbGVuXSA9ICdcMCc7CisrIyBlbmRpZgorKworKwkgIC8qIFRoZSBvdXRwdXQgY2hhcnNldCBzaG91bGQgbm9ybWFsbHkgYmUgZGV0ZXJtaW5lZCBieSB0aGUKKysJICAgICBsb2NhbGUuICBCdXQgc29tZXRpbWVzIHRoZSBsb2NhbGUgaXMgbm90IHVzZWQgb3Igbm90IGNvcnJlY3RseQorKwkgICAgIHNldCB1cCwgc28gd2UgcHJvdmlkZSBhIHBvc3NpYmlsaXR5IGZvciB0aGUgdXNlciB0byBvdmVycmlkZQorKwkgICAgIHRoaXMuICBNb3Jlb3ZlciwgdGhlIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoCisrCSAgICAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgb3ZlcnJpZGVzIGJvdGguICAqLworKwkgIGlmIChkb21haW5iaW5kaW5nICE9IE5VTEwgJiYgZG9tYWluYmluZGluZy0+Y29kZXNldCAhPSBOVUxMKQorKwkgICAgb3V0Y2hhcnNldCA9IGRvbWFpbmJpbmRpbmctPmNvZGVzZXQ7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBvdXRjaGFyc2V0ID0gZ2V0ZW52ICgiT1VUUFVUX0NIQVJTRVQiKTsKKysJICAgICAgaWYgKG91dGNoYXJzZXQgPT0gTlVMTCB8fCBvdXRjaGFyc2V0WzBdID09ICdcMCcpCisrCQl7CisrIyBpZmRlZiBfTElCQworKwkJICBvdXRjaGFyc2V0ID0gX05MX0NVUlJFTlQgKExDX0NUWVBFLCBDT0RFU0VUKTsKKysjIGVsc2UKKysjICBpZiBIQVZFX0lDT05WCisrCQkgIGV4dGVybiBjb25zdCBjaGFyICpsb2NhbGVfY2hhcnNldCAodm9pZCk7CisrCQkgIG91dGNoYXJzZXQgPSBsb2NhbGVfY2hhcnNldCAoKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysJCX0KKysJICAgIH0KKysKKysjIGlmZGVmIF9MSUJDCisrCSAgLyogV2UgYWx3YXlzIHdhbnQgdG8gdXNlIHRyYW5zbGl0ZXJhdGlvbi4gICovCisrCSAgb3V0Y2hhcnNldCA9IG5vcm1fYWRkX3NsYXNoZXMgKG91dGNoYXJzZXQsICJUUkFOU0xJVCIpOworKwkgIGNoYXJzZXQgPSBub3JtX2FkZF9zbGFzaGVzIChjaGFyc2V0LCBOVUxMKTsKKysJICBpZiAoX19nY29udl9vcGVuIChvdXRjaGFyc2V0LCBjaGFyc2V0LCAmZG9tYWluLT5jb252LAorKwkJCSAgICBHQ09OVl9BVk9JRF9OT0NPTlYpCisrCSAgICAgICE9IF9fR0NPTlZfT0spCisrCSAgICBkb21haW4tPmNvbnYgPSAoX19nY29udl90KSAtMTsKKysjIGVsc2UKKysjICBpZiBIQVZFX0lDT05WCisrCSAgLyogV2hlbiB1c2luZyBHTlUgbGliYyA+PSAyLjIgb3IgR05VIGxpYmljb252ID49IDEuNSwKKysJICAgICB3ZSB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRpb24uICAqLworKyMgICBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDIpIHx8IF9fR0xJQkNfXyA+IDIgXAorKyAgICAgICB8fCBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDUKKysJICBpZiAoc3RyY2hyIChvdXRjaGFyc2V0LCAnLycpID09IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnRtcDsKKysKKysJICAgICAgbGVuID0gc3RybGVuIChvdXRjaGFyc2V0KTsKKysJICAgICAgdG1wID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxMCArIDEpOworKwkgICAgICBtZW1jcHkgKHRtcCwgb3V0Y2hhcnNldCwgbGVuKTsKKysJICAgICAgbWVtY3B5ICh0bXAgKyBsZW4sICIvL1RSQU5TTElUIiwgMTAgKyAxKTsKKysJICAgICAgb3V0Y2hhcnNldCA9IHRtcDsKKysKKysJICAgICAgZG9tYWluLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CisrCisrCSAgICAgIGZyZWVhIChvdXRjaGFyc2V0KTsKKysJICAgIH0KKysJICBlbHNlCisrIyAgIGVuZGlmCisrCSAgICBkb21haW4tPmNvbnYgPSBpY29udl9vcGVuIChvdXRjaGFyc2V0LCBjaGFyc2V0KTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysJICBmcmVlYSAoY2hhcnNldCk7CisrCX0KKysjZW5kaWYgLyogX0xJQkMgfHwgSEFWRV9JQ09OViAqLworKyAgICB9CisrCisrICByZXR1cm4gbnVsbGVudHJ5OworK30KKysKKysvKiBGcmVlcyB0aGUgY29kZXNldCBkZXBlbmRlbnQgcGFydHMgb2YgYW4gb3BlbmVkIG1lc3NhZ2UgY2F0YWxvZy4gICovCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2ZyZWVfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW4pCisreworKyAgaWYgKGRvbWFpbi0+Y29udl90YWIgIT0gTlVMTCAmJiBkb21haW4tPmNvbnZfdGFiICE9IChjaGFyICoqKSAtMSkKKysgICAgZnJlZSAoZG9tYWluLT5jb252X3RhYik7CisrCisrI2lmZGVmIF9MSUJDCisrICBpZiAoZG9tYWluLT5jb252ICE9IChfX2djb252X3QpIC0xKQorKyAgICBfX2djb252X2Nsb3NlIChkb21haW4tPmNvbnYpOworKyNlbHNlCisrIyBpZiBIQVZFX0lDT05WCisrICBpZiAoZG9tYWluLT5jb252ICE9IChpY29udl90KSAtMSkKKysgICAgaWNvbnZfY2xvc2UgKGRvbWFpbi0+Y29udik7CisrIyBlbmRpZgorKyNlbmRpZgorK30KKysKKyAvKiBMb2FkIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHNwZWNpZmllZCBieSBGSUxFTkFNRS4gIElmIGl0IGlzIG5vIHZhbGlkCisgICAgbWVzc2FnZSBjYXRhbG9nIGRvIG5vdGhpbmcuICAqLworIHZvaWQKKy1fbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlKQorLSAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGU7CisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfbG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQorIHsKKyAgIGludCBmZDsKKysgIHNpemVfdCBzaXplOworKyNpZmRlZiBfTElCQworKyAgc3RydWN0IHN0YXQ2NCBzdDsKKysjZWxzZQorICAgc3RydWN0IHN0YXQgc3Q7CisrI2VuZGlmCisgICBzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKmRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xOworLSNpZiAoZGVmaW5lZCBIQVZFX01NQVAgJiYgZGVmaW5lZCBIQVZFX01VTk1BUCAmJiAhZGVmaW5lZCBESVNBTExPV19NTUFQKSBcCistICAgIHx8IGRlZmluZWQgX0xJQkMKKyAgIGludCB1c2VfbW1hcCA9IDA7CistI2VuZGlmCisgICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluOworKyAgaW50IHJldmlzaW9uOworKyAgY29uc3QgY2hhciAqbnVsbGVudHJ5OworIAorICAgZG9tYWluX2ZpbGUtPmRlY2lkZWQgPSAxOworICAgZG9tYWluX2ZpbGUtPmRhdGEgPSBOVUxMOworIAorKyAgLyogTm90ZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWxlc3MgdG8gc3RvcmUgZG9tYWluYmluZGluZyBpbiBkb21haW5fZmlsZQorKyAgICAgYmVjYXVzZSBkb21haW5iaW5kaW5nIG1pZ2h0IGJlID09IE5VTEwgbm93IGJ1dCAhPSBOVUxMIGxhdGVyIChhZnRlcgorKyAgICAgYSBjYWxsIHRvIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KS4gICovCisrCisgICAvKiBJZiB0aGUgcmVjb3JkIGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbGlkIGxvY2FsZSB0aGUgRklMRU5BTUUKKyAgICAgIG1pZ2h0IGJlIE5VTEwuICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCisgICAgICBzcGVjaWZpY2F0aW9uIHRoZSBsb2NhbGUgZmlsZSBuYW1lIGlzIGRpZmZlcmVudCBmb3IgWFBHIGFuZCBDRU4KK0BAIC04NCwyNyArOTM3LDMyIEBACisgICAgIHJldHVybjsKKyAKKyAgIC8qIFRyeSB0byBvcGVuIHRoZSBhZGRyZXNzZWQgZmlsZS4gICovCistICBmZCA9IG9wZW4gKGRvbWFpbl9maWxlLT5maWxlbmFtZSwgT19SRE9OTFkpOworKyAgZmQgPSBvcGVuIChkb21haW5fZmlsZS0+ZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19CSU5BUlkpOworICAgaWYgKGZkID09IC0xKQorICAgICByZXR1cm47CisgCisgICAvKiBXZSBtdXN0IGtub3cgYWJvdXQgdGhlIHNpemUgb2YgdGhlIGZpbGUuICAqLworLSAgaWYgKGZzdGF0IChmZCwgJnN0KSAhPSAwCistICAgICAgJiYgc3Quc3Rfc2l6ZSA8IChvZmZfdCkgc2l6ZW9mIChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIpKQorKyAgaWYgKAorKyNpZmRlZiBfTElCQworKyAgICAgIF9fYnVpbHRpbl9leHBlY3QgKGZzdGF0NjQgKGZkLCAmc3QpICE9IDAsIDApCisrI2Vsc2UKKysgICAgICBfX2J1aWx0aW5fZXhwZWN0IChmc3RhdCAoZmQsICZzdCkgIT0gMCwgMCkKKysjZW5kaWYKKysgICAgICB8fCBfX2J1aWx0aW5fZXhwZWN0ICgoc2l6ZSA9IChzaXplX3QpIHN0LnN0X3NpemUpICE9IHN0LnN0X3NpemUsIDApCisrICAgICAgfHwgX19idWlsdGluX2V4cGVjdCAoc2l6ZSA8IHNpemVvZiAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyKSwgMCkpCisgICAgIHsKKyAgICAgICAvKiBTb21ldGhpbmcgd2VudCB3cm9uZy4gICovCisgICAgICAgY2xvc2UgKGZkKTsKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisrI2lmZGVmIEhBVkVfTU1BUAorICAgLyogTm93IHdlIGFyZSByZWFkeSB0byBsb2FkIHRoZSBmaWxlLiAgSWYgbW1hcCgpIGlzIGF2YWlsYWJsZSB3ZSB0cnkKKyAgICAgIHRoaXMgZmlyc3QuICBJZiBub3QgYXZhaWxhYmxlIG9yIGl0IGZhaWxlZCB3ZSB0cnkgdG8gbG9hZCBpdC4gICovCistICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtbWFwIChOVUxMLCBzdC5zdF9zaXplLCBQUk9UX1JFQUQsCisrICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtbWFwIChOVUxMLCBzaXplLCBQUk9UX1JFQUQsCisgCQkJCQkgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAKKy0gIGlmIChkYXRhICE9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgLTEpCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoZGF0YSAhPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xLCAxKSkKKyAgICAgeworICAgICAgIC8qIG1tYXAoKSBjYWxsIHdhcyBzdWNjZXNzZnVsLiAgKi8KKyAgICAgICBjbG9zZSAoZmQpOworQEAgLTExNiwyNCArOTc0LDI3IEBACisgICAgICBpdCBtYW51YWxseS4gICovCisgICBpZiAoZGF0YSA9PSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xKQorICAgICB7CistICAgICAgb2ZmX3QgdG9fcmVhZDsKKysgICAgICBzaXplX3QgdG9fcmVhZDsKKyAgICAgICBjaGFyICpyZWFkX3B0cjsKKyAKKy0gICAgICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtYWxsb2MgKHN0LnN0X3NpemUpOworKyAgICAgIGRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIG1hbGxvYyAoc2l6ZSk7CisgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAJcmV0dXJuOworIAorLSAgICAgIHRvX3JlYWQgPSBzdC5zdF9zaXplOworKyAgICAgIHRvX3JlYWQgPSBzaXplOworICAgICAgIHJlYWRfcHRyID0gKGNoYXIgKikgZGF0YTsKKyAgICAgICBkbworIAl7CisgCSAgbG9uZyBpbnQgbmIgPSAobG9uZyBpbnQpIHJlYWQgKGZkLCByZWFkX3B0ciwgdG9fcmVhZCk7CistCSAgaWYgKG5iID09IC0xKQorKwkgIGlmIChuYiA8PSAwKQorIAkgICAgeworKyNpZmRlZiBFSU5UUgorKwkgICAgICBpZiAobmIgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCisrCQljb250aW51ZTsKKysjZW5kaWYKKyAJICAgICAgY2xvc2UgKGZkKTsKKyAJICAgICAgcmV0dXJuOworIAkgICAgfQorLQorIAkgIHJlYWRfcHRyICs9IG5iOworIAkgIHRvX3JlYWQgLT0gbmI7CisgCX0KK0BAIC0xNDQsNDcgKzEwMDUsMzc4IEBACisgCisgICAvKiBVc2luZyB0aGUgbWFnaWMgbnVtYmVyIHdlIGNhbiB0ZXN0IHdoZXRoZXIgaXQgcmVhbGx5IGlzIGEgbWVzc2FnZQorICAgICAgY2F0YWxvZyBmaWxlLiAgKi8KKy0gIGlmIChkYXRhLT5tYWdpYyAhPSBfTUFHSUMgJiYgZGF0YS0+bWFnaWMgIT0gX01BR0lDX1NXQVBQRUQpCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoZGF0YS0+bWFnaWMgIT0gX01BR0lDICYmIGRhdGEtPm1hZ2ljICE9IF9NQUdJQ19TV0FQUEVELAorKwkJCTApKQorICAgICB7CisgICAgICAgLyogVGhlIG1hZ2ljIG51bWJlciBpcyB3cm9uZzogbm90IGEgbWVzc2FnZSBjYXRhbG9nIGZpbGUuICAqLworLSNpZiAoZGVmaW5lZCBIQVZFX01NQVAgJiYgZGVmaW5lZCBIQVZFX01VTk1BUCAmJiAhZGVmaW5lZCBESVNBTExPV19NTUFQKSBcCistICAgIHx8IGRlZmluZWQgX0xJQkMKKysjaWZkZWYgSEFWRV9NTUFQCisgICAgICAgaWYgKHVzZV9tbWFwKQorLQltdW5tYXAgKChjYWRkcl90KSBkYXRhLCBzdC5zdF9zaXplKTsKKysJbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc2l6ZSk7CisgICAgICAgZWxzZQorICNlbmRpZgorIAlmcmVlIChkYXRhKTsKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIGRvbWFpbl9maWxlLT5kYXRhCistICAgID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbikpOworLSAgaWYgKGRvbWFpbl9maWxlLT5kYXRhID09IE5VTEwpCisrICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBsb2FkZWRfZG9tYWluKSk7CisrICBpZiAoZG9tYWluID09IE5VTEwpCisgICAgIHJldHVybjsKKysgIGRvbWFpbl9maWxlLT5kYXRhID0gZG9tYWluOworIAorLSAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIGRvbWFpbl9maWxlLT5kYXRhOworICAgZG9tYWluLT5kYXRhID0gKGNoYXIgKikgZGF0YTsKKysgIGRvbWFpbi0+dXNlX21tYXAgPSB1c2VfbW1hcDsKKysgIGRvbWFpbi0+bW1hcF9zaXplID0gc2l6ZTsKKyAgIGRvbWFpbi0+bXVzdF9zd2FwID0gZGF0YS0+bWFnaWMgIT0gX01BR0lDOworKyAgZG9tYWluLT5tYWxsb2NlZCA9IE5VTEw7CisgCisgICAvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXZhaWxhYmxlIHRhYmxlcy4gICovCistICBzd2l0Y2ggKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5yZXZpc2lvbikpCisrICByZXZpc2lvbiA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5yZXZpc2lvbik7CisrICAvKiBXZSBzdXBwb3J0IG9ubHkgdGhlIG1ham9yIHJldmlzaW9ucyAwIGFuZCAxLiAgKi8KKysgIHN3aXRjaCAocmV2aXNpb24gPj4gMTYpCisgICAgIHsKKyAgICAgY2FzZSAwOgorKyAgICBjYXNlIDE6CisgICAgICAgZG9tYWluLT5uc3RyaW5ncyA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uc3RyaW5ncyk7CistICAgICAgZG9tYWluLT5vcmlnX3RhYiA9IChzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKysgICAgICBkb21haW4tPm9yaWdfdGFiID0gKGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqKQorIAkoKGNoYXIgKikgZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5vcmlnX3RhYl9vZmZzZXQpKTsKKy0gICAgICBkb21haW4tPnRyYW5zX3RhYiA9IChzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKysgICAgICBkb21haW4tPnRyYW5zX3RhYiA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKyAJKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+dHJhbnNfdGFiX29mZnNldCkpOworICAgICAgIGRvbWFpbi0+aGFzaF9zaXplID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPmhhc2hfdGFiX3NpemUpOworLSAgICAgIGRvbWFpbi0+aGFzaF90YWIgPSAobmxzX3VpbnQzMiAqKQorLQkoKGNoYXIgKikgZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9vZmZzZXQpKTsKKysgICAgICBkb21haW4tPmhhc2hfdGFiID0KKysJKGRvbWFpbi0+aGFzaF9zaXplID4gMgorKwkgPyAoY29uc3QgbmxzX3VpbnQzMiAqKQorKwkgICAoKGNoYXIgKikgZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9vZmZzZXQpKQorKwkgOiBOVUxMKTsKKysgICAgICBkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiA9IGRvbWFpbi0+bXVzdF9zd2FwOworKworKyAgICAgIC8qIE5vdyBkaXNwYXRjaCBvbiB0aGUgbWlub3IgcmV2aXNpb24uICAqLworKyAgICAgIHN3aXRjaCAocmV2aXNpb24gJiAweGZmZmYpCisrCXsKKysJY2FzZSAwOgorKwkgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IDA7CisrCSAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworKwkgIGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYiA9IE5VTEw7CisrCSAgYnJlYWs7CisrCWNhc2UgMToKKysJZGVmYXVsdDoKKysJICB7CisrCSAgICBubHNfdWludDMyIG5fc3lzZGVwX3N0cmluZ3M7CisrCisrCSAgICBpZiAoZG9tYWluLT5oYXNoX3RhYiA9PSBOVUxMKQorKwkgICAgICAvKiBUaGlzIGlzIGludmFsaWQuICBUaGVzZSBtaW5vciByZXZpc2lvbnMgbmVlZCBhIGhhc2ggdGFibGUuICAqLworKwkgICAgICBnb3RvIGludmFsaWQ7CisrCisrCSAgICBuX3N5c2RlcF9zdHJpbmdzID0KKysJICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm5fc3lzZGVwX3N0cmluZ3MpOworKwkgICAgaWYgKG5fc3lzZGVwX3N0cmluZ3MgPiAwKQorKwkgICAgICB7CisrCQlubHNfdWludDMyIG5fc3lzZGVwX3NlZ21lbnRzOworKwkJY29uc3Qgc3RydWN0IHN5c2RlcF9zZWdtZW50ICpzeXNkZXBfc2VnbWVudHM7CisrCQljb25zdCBjaGFyICoqc3lzZGVwX3NlZ21lbnRfdmFsdWVzOworKwkJY29uc3QgbmxzX3VpbnQzMiAqb3JpZ19zeXNkZXBfdGFiOworKwkJY29uc3QgbmxzX3VpbnQzMiAqdHJhbnNfc3lzZGVwX3RhYjsKKysJCW5sc191aW50MzIgbl9pbm1lbV9zeXNkZXBfc3RyaW5nczsKKysJCXNpemVfdCBtZW1uZWVkOworKwkJY2hhciAqbWVtOworKwkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fb3JpZ19zeXNkZXBfdGFiOworKwkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdHJhbnNfc3lzZGVwX3RhYjsKKysJCW5sc191aW50MzIgKmlubWVtX2hhc2hfdGFiOworKwkJdW5zaWduZWQgaW50IGksIGo7CisrCisrCQkvKiBHZXQgdGhlIHZhbHVlcyBvZiB0aGUgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4gICovCisrCQluX3N5c2RlcF9zZWdtZW50cyA9CisrCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uX3N5c2RlcF9zZWdtZW50cyk7CisrCQlzeXNkZXBfc2VnbWVudHMgPSAoY29uc3Qgc3RydWN0IHN5c2RlcF9zZWdtZW50ICopCisrCQkgICgoY2hhciAqKSBkYXRhCisrCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5zeXNkZXBfc2VnbWVudHNfb2Zmc2V0KSk7CisrCQlzeXNkZXBfc2VnbWVudF92YWx1ZXMgPQorKwkJICBhbGxvY2EgKG5fc3lzZGVwX3NlZ21lbnRzICogc2l6ZW9mIChjb25zdCBjaGFyICopKTsKKysJCWZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zZWdtZW50czsgaSsrKQorKwkJICB7CisrCQkgICAgY29uc3QgY2hhciAqbmFtZSA9CisrCQkgICAgICAoY2hhciAqKSBkYXRhCisrCQkgICAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ub2Zmc2V0KTsKKysJCSAgICBubHNfdWludDMyIG5hbWVsZW4gPQorKwkJICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHN5c2RlcF9zZWdtZW50c1tpXS5sZW5ndGgpOworKworKwkJICAgIGlmICghKG5hbWVsZW4gPiAwICYmIG5hbWVbbmFtZWxlbiAtIDFdID09ICdcMCcpKQorKwkJICAgICAgeworKwkJCWZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworKwkJCWdvdG8gaW52YWxpZDsKKysJCSAgICAgIH0KKysKKysJCSAgICBzeXNkZXBfc2VnbWVudF92YWx1ZXNbaV0gPSBnZXRfc3lzZGVwX3NlZ21lbnRfdmFsdWUgKG5hbWUpOworKwkJICB9CisrCisrCQlvcmlnX3N5c2RlcF90YWIgPSAoY29uc3QgbmxzX3VpbnQzMiAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ19zeXNkZXBfdGFiX29mZnNldCkpOworKwkJdHJhbnNfc3lzZGVwX3RhYiA9IChjb25zdCBubHNfdWludDMyICopCisrCQkgICgoY2hhciAqKSBkYXRhCisrCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT50cmFuc19zeXNkZXBfdGFiX29mZnNldCkpOworKworKwkJLyogQ29tcHV0ZSB0aGUgYW1vdW50IG9mIGFkZGl0aW9uYWwgbWVtb3J5IG5lZWRlZCBmb3IgdGhlCisrCQkgICBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgYW5kIHRoZSBhdWdtZW50ZWQgaGFzaCB0YWJsZS4KKysJCSAgIEF0IHRoZSBzYW1lIHRpbWUsIGFsc28gZHJvcCBzdHJpbmcgcGFpcnMgd2hpY2ggcmVmZXIgdG8KKysJCSAgIGFuIHVuZGVmaW5lZCBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnQuICAqLworKwkJbl9pbm1lbV9zeXNkZXBfc3RyaW5ncyA9IDA7CisrCQltZW1uZWVkID0gZG9tYWluLT5oYXNoX3NpemUgKiBzaXplb2YgKG5sc191aW50MzIpOworKwkJZm9yIChpID0gMDsgaSA8IG5fc3lzZGVwX3N0cmluZ3M7IGkrKykKKysJCSAgeworKwkJICAgIGludCB2YWxpZCA9IDE7CisrCQkgICAgc2l6ZV90IG5lZWRzWzJdOworKworKwkJICAgIGZvciAoaiA9IDA7IGogPCAyOyBqKyspCisrCQkgICAgICB7CisrCQkJY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKnN5c2RlcF9zdHJpbmcgPQorKwkJCSAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisrCQkJICAoKGNoYXIgKikgZGF0YQorKwkJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCWogPT0gMAorKwkJCQk/IG9yaWdfc3lzZGVwX3RhYltpXQorKwkJCQk6IHRyYW5zX3N5c2RlcF90YWJbaV0pKTsKKysJCQlzaXplX3QgbmVlZCA9IDA7CisrCQkJY29uc3Qgc3RydWN0IHNlZ21lbnRfcGFpciAqcCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworKworKwkJCWlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKSAhPSBTRUdNRU5UU19FTkQpCisrCQkJICBmb3IgKHAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czs7IHArKykKKysJCQkgICAgeworKwkJCSAgICAgIG5sc191aW50MzIgc3lzZGVwcmVmOworKworKwkJCSAgICAgIG5lZWQgKz0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworKworKwkJCSAgICAgIHN5c2RlcHJlZiA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworKwkJCSAgICAgIGlmIChzeXNkZXByZWYgPT0gU0VHTUVOVFNfRU5EKQorKwkJCQlicmVhazsKKysKKysJCQkgICAgICBpZiAoc3lzZGVwcmVmID49IG5fc3lzZGVwX3NlZ21lbnRzKQorKwkJCQl7CisrCQkJCSAgLyogSW52YWxpZC4gICovCisrCQkJCSAgZnJlZWEgKHN5c2RlcF9zZWdtZW50X3ZhbHVlcyk7CisrCQkJCSAgZ290byBpbnZhbGlkOworKwkJCQl9CisrCisrCQkJICAgICAgaWYgKHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdID09IE5VTEwpCisrCQkJCXsKKysJCQkJICAvKiBUaGlzIHBhcnRpY3VsYXIgc3RyaW5nIHBhaXIgaXMgaW52YWxpZC4gICovCisrCQkJCSAgdmFsaWQgPSAwOworKwkJCQkgIGJyZWFrOworKwkJCQl9CisrCisrCQkJICAgICAgbmVlZCArPSBzdHJsZW4gKHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdKTsKKysJCQkgICAgfQorKworKwkJCW5lZWRzW2pdID0gbmVlZDsKKysJCQlpZiAoIXZhbGlkKQorKwkJCSAgYnJlYWs7CisrCQkgICAgICB9CisrCisrCQkgICAgaWYgKHZhbGlkKQorKwkJICAgICAgeworKwkJCW5faW5tZW1fc3lzZGVwX3N0cmluZ3MrKzsKKysJCQltZW1uZWVkICs9IG5lZWRzWzBdICsgbmVlZHNbMV07CisrCQkgICAgICB9CisrCQkgIH0KKysJCW1lbW5lZWQgKz0gMiAqIG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKysJCQkgICAqIHNpemVvZiAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyk7CisrCisrCQlpZiAobl9pbm1lbV9zeXNkZXBfc3RyaW5ncyA+IDApCisrCQkgIHsKKysJCSAgICB1bnNpZ25lZCBpbnQgazsKKysKKysJCSAgICAvKiBBbGxvY2F0ZSBhZGRpdGlvbmFsIG1lbW9yeS4gICovCisrCQkgICAgbWVtID0gKGNoYXIgKikgbWFsbG9jIChtZW1uZWVkKTsKKysJCSAgICBpZiAobWVtID09IE5VTEwpCisrCQkgICAgICBnb3RvIGludmFsaWQ7CisrCisrCQkgICAgZG9tYWluLT5tYWxsb2NlZCA9IG1lbTsKKysJCSAgICBpbm1lbV9vcmlnX3N5c2RlcF90YWIgPSAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqKSBtZW07CisrCQkgICAgbWVtICs9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKysJCQkgICAqIHNpemVvZiAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyk7CisrCQkgICAgaW5tZW1fdHJhbnNfc3lzZGVwX3RhYiA9IChzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICopIG1lbTsKKysJCSAgICBtZW0gKz0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncworKwkJCSAgICogc2l6ZW9mIChzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjKTsKKysJCSAgICBpbm1lbV9oYXNoX3RhYiA9IChubHNfdWludDMyICopIG1lbTsKKysJCSAgICBtZW0gKz0gZG9tYWluLT5oYXNoX3NpemUgKiBzaXplb2YgKG5sc191aW50MzIpOworKworKwkJICAgIC8qIENvbXB1dGUgdGhlIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5ncy4gICovCisrCQkgICAgayA9IDA7CisrCQkgICAgZm9yIChpID0gMDsgaSA8IG5fc3lzZGVwX3N0cmluZ3M7IGkrKykKKysJCSAgICAgIHsKKysJCQlpbnQgdmFsaWQgPSAxOworKworKwkJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspCisrCQkJICB7CisrCQkJICAgIGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkgICAgICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKysJCQkgICAgICAoKGNoYXIgKikgZGF0YQorKwkJCSAgICAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQkgICAgaiA9PSAwCisrCQkJCSAgICA/IG9yaWdfc3lzZGVwX3RhYltpXQorKwkJCQkgICAgOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJICAgIGNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPQorKwkJCSAgICAgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworKworKwkJCSAgICBpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZikKKysJCQkJIT0gU0VHTUVOVFNfRU5EKQorKwkJCSAgICAgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorKwkJCQl7CisrCQkJCSAgbmxzX3VpbnQzMiBzeXNkZXByZWY7CisrCisrCQkJCSAgc3lzZGVwcmVmID0KKysJCQkJICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworKwkJCQkgIGlmIChzeXNkZXByZWYgPT0gU0VHTUVOVFNfRU5EKQorKwkJCQkgICAgYnJlYWs7CisrCisrCQkJCSAgaWYgKHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdID09IE5VTEwpCisrCQkJCSAgICB7CisrCQkJCSAgICAgIC8qIFRoaXMgcGFydGljdWxhciBzdHJpbmcgcGFpciBpcworKwkJCQkJIGludmFsaWQuICAqLworKwkJCQkgICAgICB2YWxpZCA9IDA7CisrCQkJCSAgICAgIGJyZWFrOworKwkJCQkgICAgfQorKwkJCQl9CisrCisrCQkJICAgIGlmICghdmFsaWQpCisrCQkJICAgICAgYnJlYWs7CisrCQkJICB9CisrCisrCQkJaWYgKHZhbGlkKQorKwkJCSAgeworKwkJCSAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJCSAgICAgIHsKKysJCQkJY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKnN5c2RlcF9zdHJpbmcgPQorKwkJCQkgIChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqKQorKwkJCQkgICgoY2hhciAqKSBkYXRhCisrCQkJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCQlqID09IDAKKysJCQkJCT8gb3JpZ19zeXNkZXBfdGFiW2ldCisrCQkJCQk6IHRyYW5zX3N5c2RlcF90YWJbaV0pKTsKKysJCQkJY29uc3QgY2hhciAqc3RhdGljX3NlZ21lbnRzID0KKysJCQkJICAoY2hhciAqKSBkYXRhCisrCQkJCSAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3N0cmluZy0+b2Zmc2V0KTsKKysJCQkJY29uc3Qgc3RydWN0IHNlZ21lbnRfcGFpciAqcCA9CisrCQkJCSAgc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7CisrCisrCQkJCS8qIENvbmNhdGVuYXRlIHRoZSBzZWdtZW50cywgYW5kIGZpbGwKKysJCQkJICAgaW5tZW1fb3JpZ19zeXNkZXBfdGFiW2tdIChmb3IgaiA9PSAwKSBhbmQKKysJCQkJICAgaW5tZW1fdHJhbnNfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMSkuICAqLworKworKwkJCQlzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICppbm1lbV90YWJfZW50cnkgPQorKwkJCQkgIChqID09IDAKKysJCQkJICAgPyBpbm1lbV9vcmlnX3N5c2RlcF90YWIKKysJCQkJICAgOiBpbm1lbV90cmFuc19zeXNkZXBfdGFiKQorKwkJCQkgICsgazsKKysKKysJCQkJaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpCisrCQkJCSAgICA9PSBTRUdNRU5UU19FTkQpCisrCQkJCSAgeworKwkJCQkgICAgLyogT25seSBvbmUgc3RhdGljIHNlZ21lbnQuICAqLworKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5sZW5ndGggPQorKwkJCQkgICAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CisrCQkJCSAgICBpbm1lbV90YWJfZW50cnktPnBvaW50ZXIgPSBzdGF0aWNfc2VnbWVudHM7CisrCQkJCSAgfQorKwkJCQllbHNlCisrCQkJCSAgeworKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gbWVtOworKworKwkJCQkgICAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisrCQkJCSAgICAgIHsKKysJCQkJCW5sc191aW50MzIgc2Vnc2l6ZSA9CisrCQkJCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKysJCQkJCW5sc191aW50MzIgc3lzZGVwcmVmID0KKysJCQkJCSAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZik7CisrCQkJCQlzaXplX3QgbjsKKysKKysJCQkJCWlmIChzZWdzaXplID4gMCkKKysJCQkJCSAgeworKwkJCQkJICAgIG1lbWNweSAobWVtLCBzdGF0aWNfc2VnbWVudHMsIHNlZ3NpemUpOworKwkJCQkJICAgIG1lbSArPSBzZWdzaXplOworKwkJCQkJICAgIHN0YXRpY19zZWdtZW50cyArPSBzZWdzaXplOworKwkJCQkJICB9CisrCisrCQkJCQlpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJCSAgYnJlYWs7CisrCisrCQkJCQluID0gc3RybGVuIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSk7CisrCQkJCQltZW1jcHkgKG1lbSwgc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0sIG4pOworKwkJCQkJbWVtICs9IG47CisrCQkJCSAgICAgIH0KKysKKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+bGVuZ3RoID0KKysJCQkJICAgICAgbWVtIC0gaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyOworKwkJCQkgIH0KKysJCQkgICAgICB9CisrCisrCQkJICAgIGsrKzsKKysJCQkgIH0KKysJCSAgICAgIH0KKysJCSAgICBpZiAoayAhPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzKQorKwkJICAgICAgYWJvcnQgKCk7CisrCisrCQkgICAgLyogQ29tcHV0ZSB0aGUgYXVnbWVudGVkIGhhc2ggdGFibGUuICAqLworKwkJICAgIGZvciAoaSA9IDA7IGkgPCBkb21haW4tPmhhc2hfc2l6ZTsgaSsrKQorKwkJICAgICAgaW5tZW1faGFzaF90YWJbaV0gPQorKwkJCVcgKGRvbWFpbi0+bXVzdF9zd2FwX2hhc2hfdGFiLCBkb21haW4tPmhhc2hfdGFiW2ldKTsKKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgbl9pbm1lbV9zeXNkZXBfc3RyaW5nczsgaSsrKQorKwkJICAgICAgeworKwkJCWNvbnN0IGNoYXIgKm1zZ2lkID0gaW5tZW1fb3JpZ19zeXNkZXBfdGFiW2ldLnBvaW50ZXI7CisrCQkJbmxzX3VpbnQzMiBoYXNoX3ZhbCA9IGhhc2hfc3RyaW5nIChtc2dpZCk7CisrCQkJbmxzX3VpbnQzMiBpZHggPSBoYXNoX3ZhbCAlIGRvbWFpbi0+aGFzaF9zaXplOworKwkJCW5sc191aW50MzIgaW5jciA9CisrCQkJICAxICsgKGhhc2hfdmFsICUgKGRvbWFpbi0+aGFzaF9zaXplIC0gMikpOworKworKwkJCWZvciAoOzspCisrCQkJICB7CisrCQkJICAgIGlmIChpbm1lbV9oYXNoX3RhYltpZHhdID09IDApCisrCQkJICAgICAgeworKwkJCQkvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgVXNlIGl0LiAgKi8KKysJCQkJaW5tZW1faGFzaF90YWJbaWR4XSA9IDEgKyBkb21haW4tPm5zdHJpbmdzICsgaTsKKysJCQkJYnJlYWs7CisrCQkJICAgICAgfQorKworKwkJCSAgICBpZiAoaWR4ID49IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcikKKysJCQkgICAgICBpZHggLT0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyOworKwkJCSAgICBlbHNlCisrCQkJICAgICAgaWR4ICs9IGluY3I7CisrCQkJICB9CisrCQkgICAgICB9CisrCisrCQkgICAgZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzID0gbl9pbm1lbV9zeXNkZXBfc3RyaW5nczsKKysJCSAgICBkb21haW4tPm9yaWdfc3lzZGVwX3RhYiA9IGlubWVtX29yaWdfc3lzZGVwX3RhYjsKKysJCSAgICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBpbm1lbV90cmFuc19zeXNkZXBfdGFiOworKworKwkJICAgIGRvbWFpbi0+aGFzaF90YWIgPSBpbm1lbV9oYXNoX3RhYjsKKysJCSAgICBkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiA9IDA7CisrCQkgIH0KKysJCWVsc2UKKysJCSAgeworKwkJICAgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IDA7CisrCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworKwkJICAgIGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYiA9IE5VTEw7CisrCQkgIH0KKysKKysJCWZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCWRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IDA7CisrCQlkb21haW4tPm9yaWdfc3lzZGVwX3RhYiA9IE5VTEw7CisrCQlkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkgICAgICB9CisrCSAgfQorKwkgIGJyZWFrOworKwl9CisgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CistICAgICAgLyogVGhpcyBpcyBhbiBpbGxlZ2FsIHJldmlzaW9uLiAgKi8KKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisrICAgICAgLyogVGhpcyBpcyBhbiBpbnZhbGlkIHJldmlzaW9uLiAgKi8KKysgICAgaW52YWxpZDoKKysgICAgICAvKiBUaGlzIGlzIGFuIGludmFsaWQgLm1vIGZpbGUuICAqLworKyAgICAgIGlmIChkb21haW4tPm1hbGxvY2VkKQorKwlmcmVlIChkb21haW4tPm1hbGxvY2VkKTsKKysjaWZkZWYgSEFWRV9NTUFQCisgICAgICAgaWYgKHVzZV9tbWFwKQorLQltdW5tYXAgKChjYWRkcl90KSBkYXRhLCBzdC5zdF9zaXplKTsKKysJbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc2l6ZSk7CisgICAgICAgZWxzZQorICNlbmRpZgorIAlmcmVlIChkYXRhKTsKK0BAIC0xOTMsNyArMTM4NSwzNiBAQAorICAgICAgIHJldHVybjsKKyAgICAgfQorIAorLSAgLyogU2hvdyB0aGF0IG9uZSBkb21haW4gaXMgY2hhbmdlZC4gIFRoaXMgbWlnaHQgbWFrZSBzb21lIGNhY2hlZAorLSAgICAgdHJhbnNsYXRpb25zIGludmFsaWQuICAqLworLSAgKytfbmxfbXNnX2NhdF9jbnRyOworKyAgLyogTm93IGluaXRpYWxpemUgdGhlIGNoYXJhY3RlciBzZXQgY29udmVydGVyIGZyb20gdGhlIGNoYXJhY3RlciBzZXQKKysgICAgIHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aCAoZm91bmQgaW4gdGhlIGhlYWRlciBlbnRyeSkgdG8gdGhlIGRvbWFpbidzCisrICAgICBzcGVjaWZpZWQgY2hhcmFjdGVyIHNldCBvciB0aGUgbG9jYWxlJ3MgY2hhcmFjdGVyIHNldC4gICovCisrICBudWxsZW50cnkgPSBfbmxfaW5pdF9kb21haW5fY29udiAoZG9tYWluX2ZpbGUsIGRvbWFpbiwgZG9tYWluYmluZGluZyk7CisrCisrICAvKiBBbHNvIGxvb2sgZm9yIGEgcGx1cmFsIHNwZWNpZmljYXRpb24uICAqLworKyAgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiAobnVsbGVudHJ5LCAmZG9tYWluLT5wbHVyYWwsICZkb21haW4tPm5wbHVyYWxzKTsKKyB9CisrCisrCisrI2lmZGVmIF9MSUJDCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX3VubG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW4pCisreworKyAgaWYgKGRvbWFpbi0+cGx1cmFsICE9ICZfX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsKQorKyAgICBfX2dldHRleHRfZnJlZV9leHAgKGRvbWFpbi0+cGx1cmFsKTsKKysKKysgIF9ubF9mcmVlX2RvbWFpbl9jb252IChkb21haW4pOworKworKyAgaWYgKGRvbWFpbi0+bWFsbG9jZWQpCisrICAgIGZyZWUgKGRvbWFpbi0+bWFsbG9jZWQpOworKworKyMgaWZkZWYgX1BPU0lYX01BUFBFRF9GSUxFUworKyAgaWYgKGRvbWFpbi0+dXNlX21tYXApCisrICAgIG11bm1hcCAoKGNhZGRyX3QpIGRvbWFpbi0+ZGF0YSwgZG9tYWluLT5tbWFwX3NpemUpOworKyAgZWxzZQorKyMgZW5kaWYJLyogX1BPU0lYX01BUFBFRF9GSUxFUyAqLworKyAgICBmcmVlICgodm9pZCAqKSBkb21haW4tPmRhdGEpOworKworKyAgZnJlZSAoZG9tYWluKTsKKyt9CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxjaGFyc2V0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9jYWxjaGFyc2V0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40Nzg3MjkzOTIgLTA0MDAKK0BAIC0wLDAgKzEsMzk4IEBACisrLyogRGV0ZXJtaW5lIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZy4KKysKKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAibG9jYWxjaGFyc2V0LmgiCisrCisrI2lmIEhBVkVfU1REREVGX0gKKysjIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpZiBIQVZFX1NUUklOR19ICisrIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorKyNlbmRpZgorKyNpZiBIQVZFX1NURExJQl9ICisrIyBpbmNsdWRlIDxzdGRsaWIuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKysjIHVuZGVmIFdJTjMyICAgLyogYXZvaWQgd2FybmluZyBvbiBtaW5ndzMyICovCisrIyBkZWZpbmUgV0lOMzIKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfX0VNWF9fCisrLyogQXNzdW1lIEVNWCBwcm9ncmFtIHJ1bnMgb24gT1MvMiwgZXZlbiBpZiBjb21waWxlZCB1bmRlciBET1MuICAqLworKyMgZGVmaW5lIE9TMgorKyNlbmRpZgorKworKyNpZiAhZGVmaW5lZCBXSU4zMgorKyMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisrIyAgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjIGVsc2UKKysjICBpZiBIQVZFX1NFVExPQ0FMRQorKyMgICBpbmNsdWRlIDxsb2NhbGUuaD4KKysjICBlbmRpZgorKyMgZW5kaWYKKysjZWxpZiBkZWZpbmVkIFdJTjMyCisrIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorKyMgaW5jbHVkZSA8d2luZG93cy5oPgorKyNlbmRpZgorKyNpZiBkZWZpbmVkIE9TMgorKyMgZGVmaW5lIElOQ0xfRE9TCisrIyBpbmNsdWRlIDxvczIuaD4KKysjZW5kaWYKKysKKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrIyBpbmNsdWRlICJyZWxvY2F0YWJsZS5oIgorKyNlbHNlCisrIyBkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjZW5kaWYKKysKKysjaWZuZGVmIERJUkVDVE9SWV9TRVBBUkFUT1IKKysjIGRlZmluZSBESVJFQ1RPUllfU0VQQVJBVE9SICcvJworKyNlbmRpZgorKworKyNpZm5kZWYgSVNTTEFTSAorKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SKQorKyNlbmRpZgorKworKyNpZiBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRAorKyMgdW5kZWYgZ2V0YworKyMgZGVmaW5lIGdldGMgZ2V0Y191bmxvY2tlZAorKyNlbmRpZgorKworKy8qIFRoZSBmb2xsb3dpbmcgc3RhdGljIHZhcmlhYmxlIGlzIGRlY2xhcmVkICd2b2xhdGlsZScgdG8gYXZvaWQgYQorKyAgIHBvc3NpYmxlIG11bHRpdGhyZWFkIHByb2JsZW0gaW4gdGhlIGZ1bmN0aW9uIGdldF9jaGFyc2V0X2FsaWFzZXMuIElmIHdlCisrICAgYXJlIHJ1bm5pbmcgaW4gYSB0aHJlYWRlZCBlbnZpcm9ubWVudCwgYW5kIGlmIHR3byB0aHJlYWRzIGluaXRpYWxpemUKKysgICAnY2hhcnNldF9hbGlhc2VzJyBzaW11bHRhbmVvdXNseSwgYm90aCB3aWxsIHByb2R1Y2UgdGhlIHNhbWUgdmFsdWUsCisrICAgYW5kIGV2ZXJ5dGhpbmcgd2lsbCBiZSBvayBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIHRvICdjaGFyc2V0X2FsaWFzZXMnCisrICAgYXJlIGF0b21pYy4gQnV0IEkgZG9uJ3Qga25vdyB3aGF0IHdpbGwgaGFwcGVuIGlmIHRoZSB0d28gYXNzaWdubWVudHMgbWl4LiAgKi8KKysjaWYgX19TVERDX18gIT0gMQorKyMgZGVmaW5lIHZvbGF0aWxlIC8qIGVtcHR5ICovCisrI2VuZGlmCisrLyogUG9pbnRlciB0byB0aGUgY29udGVudHMgb2YgdGhlIGNoYXJzZXQuYWxpYXMgZmlsZSwgaWYgaXQgaGFzIGFscmVhZHkgYmVlbgorKyAgIHJlYWQsIGVsc2UgTlVMTC4gIEl0cyBmb3JtYXQgaXM6CisrICAgQUxJQVNfMSAnXDAnIENBTk9OSUNBTF8xICdcMCcgLi4uIEFMSUFTX24gJ1wwJyBDQU5PTklDQUxfbiAnXDAnICdcMCcgICovCisrc3RhdGljIGNvbnN0IGNoYXIgKiB2b2xhdGlsZSBjaGFyc2V0X2FsaWFzZXM7CisrCisrLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY29udGVudHMgb2YgdGhlIGNoYXJzZXQuYWxpYXMgZmlsZS4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2dldF9jaGFyc2V0X2FsaWFzZXMgKCkKKyt7CisrICBjb25zdCBjaGFyICpjcDsKKysKKysgIGNwID0gY2hhcnNldF9hbGlhc2VzOworKyAgaWYgKGNwID09IE5VTEwpCisrICAgIHsKKysjaWYgIShkZWZpbmVkIFZNUyB8fCBkZWZpbmVkIFdJTjMyKQorKyAgICAgIEZJTEUgKmZwOworKyAgICAgIGNvbnN0IGNoYXIgKmRpciA9IHJlbG9jYXRlIChMSUJESVIpOworKyAgICAgIGNvbnN0IGNoYXIgKmJhc2UgPSAiY2hhcnNldC5hbGlhcyI7CisrICAgICAgY2hhciAqZmlsZV9uYW1lOworKworKyAgICAgIC8qIENvbmNhdGVuYXRlIGRpciBhbmQgYmFzZSBpbnRvIGZyZXNobHkgYWxsb2NhdGVkIGZpbGVfbmFtZS4gICovCisrICAgICAgeworKwlzaXplX3QgZGlyX2xlbiA9IHN0cmxlbiAoZGlyKTsKKysJc2l6ZV90IGJhc2VfbGVuID0gc3RybGVuIChiYXNlKTsKKysJaW50IGFkZF9zbGFzaCA9IChkaXJfbGVuID4gMCAmJiAhSVNTTEFTSCAoZGlyW2Rpcl9sZW4gLSAxXSkpOworKwlmaWxlX25hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcl9sZW4gKyBhZGRfc2xhc2ggKyBiYXNlX2xlbiArIDEpOworKwlpZiAoZmlsZV9uYW1lICE9IE5VTEwpCisrCSAgeworKwkgICAgbWVtY3B5IChmaWxlX25hbWUsIGRpciwgZGlyX2xlbik7CisrCSAgICBpZiAoYWRkX3NsYXNoKQorKwkgICAgICBmaWxlX25hbWVbZGlyX2xlbl0gPSBESVJFQ1RPUllfU0VQQVJBVE9SOworKwkgICAgbWVtY3B5IChmaWxlX25hbWUgKyBkaXJfbGVuICsgYWRkX3NsYXNoLCBiYXNlLCBiYXNlX2xlbiArIDEpOworKwkgIH0KKysgICAgICB9CisrCisrICAgICAgaWYgKGZpbGVfbmFtZSA9PSBOVUxMIHx8IChmcCA9IGZvcGVuIChmaWxlX25hbWUsICJyIikpID09IE5VTEwpCisrCS8qIE91dCBvZiBtZW1vcnkgb3IgZmlsZSBub3QgZm91bmQsIHRyZWF0IGl0IGFzIGVtcHR5LiAgKi8KKysJY3AgPSAiIjsKKysgICAgICBlbHNlCisrCXsKKysJICAvKiBQYXJzZSB0aGUgZmlsZSdzIGNvbnRlbnRzLiAgKi8KKysJICBpbnQgYzsKKysJICBjaGFyIGJ1ZjFbNTArMV07CisrCSAgY2hhciBidWYyWzUwKzFdOworKwkgIGNoYXIgKnJlc19wdHIgPSBOVUxMOworKwkgIHNpemVfdCByZXNfc2l6ZSA9IDA7CisrCSAgc2l6ZV90IGwxLCBsMjsKKysKKysJICBmb3IgKDs7KQorKwkgICAgeworKwkgICAgICBjID0gZ2V0YyAoZnApOworKwkgICAgICBpZiAoYyA9PSBFT0YpCisrCQlicmVhazsKKysJICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICcgJyB8fCBjID09ICdcdCcpCisrCQljb250aW51ZTsKKysJICAgICAgaWYgKGMgPT0gJyMnKQorKwkJeworKwkJICAvKiBTa2lwIGNvbW1lbnQsIHRvIGVuZCBvZiBsaW5lLiAgKi8KKysJCSAgZG8KKysJCSAgICBjID0gZ2V0YyAoZnApOworKwkJICB3aGlsZSAoIShjID09IEVPRiB8fCBjID09ICdcbicpKTsKKysJCSAgaWYgKGMgPT0gRU9GKQorKwkJICAgIGJyZWFrOworKwkJICBjb250aW51ZTsKKysJCX0KKysJICAgICAgdW5nZXRjIChjLCBmcCk7CisrCSAgICAgIGlmIChmc2NhbmYgKGZwLCAiJTUwcyAlNTBzIiwgYnVmMSwgYnVmMikgPCAyKQorKwkJYnJlYWs7CisrCSAgICAgIGwxID0gc3RybGVuIChidWYxKTsKKysJICAgICAgbDIgPSBzdHJsZW4gKGJ1ZjIpOworKwkgICAgICBpZiAocmVzX3NpemUgPT0gMCkKKysJCXsKKysJCSAgcmVzX3NpemUgPSBsMSArIDEgKyBsMiArIDE7CisrCQkgIHJlc19wdHIgPSAoY2hhciAqKSBtYWxsb2MgKHJlc19zaXplICsgMSk7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgcmVzX3NpemUgKz0gbDEgKyAxICsgbDIgKyAxOworKwkJICByZXNfcHRyID0gKGNoYXIgKikgcmVhbGxvYyAocmVzX3B0ciwgcmVzX3NpemUgKyAxKTsKKysJCX0KKysJICAgICAgaWYgKHJlc19wdHIgPT0gTlVMTCkKKysJCXsKKysJCSAgLyogT3V0IG9mIG1lbW9yeS4gKi8KKysJCSAgcmVzX3NpemUgPSAwOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgc3RyY3B5IChyZXNfcHRyICsgcmVzX3NpemUgLSAobDIgKyAxKSAtIChsMSArIDEpLCBidWYxKTsKKysJICAgICAgc3RyY3B5IChyZXNfcHRyICsgcmVzX3NpemUgLSAobDIgKyAxKSwgYnVmMik7CisrCSAgICB9CisrCSAgZmNsb3NlIChmcCk7CisrCSAgaWYgKHJlc19zaXplID09IDApCisrCSAgICBjcCA9ICIiOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgKihyZXNfcHRyICsgcmVzX3NpemUpID0gJ1wwJzsKKysJICAgICAgY3AgPSByZXNfcHRyOworKwkgICAgfQorKwl9CisrCisrICAgICAgaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorKwlmcmVlIChmaWxlX25hbWUpOworKworKyNlbHNlCisrCisrIyBpZiBkZWZpbmVkIFZNUworKyAgICAgIC8qIFRvIGF2b2lkIHRoZSB0cm91YmxlcyBvZiBhbiBleHRyYSBmaWxlIGNoYXJzZXQuYWxpYXNfdm1zIGluIHRoZQorKwkgc291cmNlcyBvZiBtYW55IEdOVSBwYWNrYWdlcywgc2ltcGx5IGlubGluZSB0aGUgYWxpYXNlcyBoZXJlLiAgKi8KKysgICAgICAvKiBUaGUgbGlzdCBvZiBlbmNvZGluZ3MgaXMgdGFrZW4gZnJvbSB0aGUgT3BlblZNUyA3LjMtMSBkb2N1bWVudGF0aW9uCisrCSAiQ29tcGFxIEMgUnVuLVRpbWUgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIGZvciBPcGVuVk1TIHN5c3RlbXMiCisrCSBzZWN0aW9uIDEwLjcgIkhhbmRsaW5nIERpZmZlcmVudCBDaGFyYWN0ZXIgU2V0cyIuICAqLworKyAgICAgIGNwID0gIklTTzg4NTktMSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorKwkgICAiSVNPODg1OS0yIiAiXDAiICJJU08tODg1OS0yIiAiXDAiCisrCSAgICJJU084ODU5LTUiICJcMCIgIklTTy04ODU5LTUiICJcMCIKKysJICAgIklTTzg4NTktNyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorKwkgICAiSVNPODg1OS04IiAiXDAiICJJU08tODg1OS04IiAiXDAiCisrCSAgICJJU084ODU5LTkiICJcMCIgIklTTy04ODU5LTkiICJcMCIKKysJICAgLyogSmFwYW5lc2UgKi8KKysJICAgImV1Y0pQIiAiXDAiICJFVUMtSlAiICJcMCIKKysJICAgIlNKSVMiICJcMCIgIlNISUZUX0pJUyIgIlwwIgorKwkgICAiREVDS0FOSkkiICJcMCIgIkRFQy1LQU5KSSIgIlwwIgorKwkgICAiU0RFQ0tBTkpJIiAiXDAiICJFVUMtSlAiICJcMCIKKysJICAgLyogQ2hpbmVzZSAqLworKwkgICAiZXVjVFciICJcMCIgIkVVQy1UVyIgIlwwIgorKwkgICAiREVDSEFOWVUiICJcMCIgIkRFQy1IQU5ZVSIgIlwwIgorKwkgICAiREVDSEFOWkkiICJcMCIgIkdCMjMxMiIgIlwwIgorKwkgICAvKiBLb3JlYW4gKi8KKysJICAgIkRFQ0tPUkVBTiIgIlwwIiAiRVVDLUtSIiAiXDAiOworKyMgZW5kaWYKKysKKysjIGlmIGRlZmluZWQgV0lOMzIKKysgICAgICAvKiBUbyBhdm9pZCB0aGUgdHJvdWJsZXMgb2YgaW5zdGFsbGluZyBhIHNlcGFyYXRlIGZpbGUgaW4gdGhlIHNhbWUKKysJIGRpcmVjdG9yeSBhcyB0aGUgRExMIGFuZCBvZiByZXRyaWV2aW5nIHRoZSBETEwncyBkaXJlY3RvcnkgYXQKKysJIHJ1bnRpbWUsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisrCisrICAgICAgY3AgPSAiQ1A5MzYiICJcMCIgIkdCSyIgIlwwIgorKwkgICAiQ1AxMzYxIiAiXDAiICJKT0hBQiIgIlwwIgorKwkgICAiQ1AyMDEyNyIgIlwwIiAiQVNDSUkiICJcMCIKKysJICAgIkNQMjA4NjYiICJcMCIgIktPSTgtUiIgIlwwIgorKwkgICAiQ1AyMTg2NiIgIlwwIiAiS09JOC1SVSIgIlwwIgorKwkgICAiQ1AyODU5MSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorKwkgICAiQ1AyODU5MiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorKwkgICAiQ1AyODU5MyIgIlwwIiAiSVNPLTg4NTktMyIgIlwwIgorKwkgICAiQ1AyODU5NCIgIlwwIiAiSVNPLTg4NTktNCIgIlwwIgorKwkgICAiQ1AyODU5NSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorKwkgICAiQ1AyODU5NiIgIlwwIiAiSVNPLTg4NTktNiIgIlwwIgorKwkgICAiQ1AyODU5NyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorKwkgICAiQ1AyODU5OCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorKwkgICAiQ1AyODU5OSIgIlwwIiAiSVNPLTg4NTktOSIgIlwwIgorKwkgICAiQ1AyODYwNSIgIlwwIiAiSVNPLTg4NTktMTUiICJcMCI7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNoYXJzZXRfYWxpYXNlcyA9IGNwOworKyAgICB9CisrCisrICByZXR1cm4gY3A7CisrfQorKworKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKysgICBpbnRvIG9uZSBvZiB0aGUgY2Fub25pY2FsIG5hbWVzIGxpc3RlZCBpbiBjb25maWcuY2hhcnNldC4KKysgICBUaGUgcmVzdWx0IG11c3Qgbm90IGJlIGZyZWVkOyBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KKysgICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCisrICAgbmFtZS4gICovCisrCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbmRpZgorK2NvbnN0IGNoYXIgKgorK2xvY2FsZV9jaGFyc2V0ICgpCisreworKyAgY29uc3QgY2hhciAqY29kZXNldDsKKysgIGNvbnN0IGNoYXIgKmFsaWFzZXM7CisrCisrI2lmICEoZGVmaW5lZCBXSU4zMiB8fCBkZWZpbmVkIE9TMikKKysKKysjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorKworKyAgLyogTW9zdCBzeXN0ZW1zIHN1cHBvcnQgbmxfbGFuZ2luZm8gKENPREVTRVQpIG5vd2FkYXlzLiAgKi8KKysgIGNvZGVzZXQgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7CisrCisrIyBlbHNlCisrCisrICAvKiBPbiBvbGQgc3lzdGVtcyB3aGljaCBsYWNrIGl0LCB1c2Ugc2V0bG9jYWxlIG9yIGdldGVudi4gICovCisrICBjb25zdCBjaGFyICpsb2NhbGUgPSBOVUxMOworKworKyAgLyogQnV0IG1vc3Qgb2xkIHN5c3RlbXMgZG9uJ3QgaGF2ZSBhIGNvbXBsZXRlIHNldCBvZiBsb2NhbGVzLiAgU29tZQorKyAgICAgKGxpa2UgU3VuT1MgNCBvciBESkdQUCkgaGF2ZSBvbmx5IHRoZSBDIGxvY2FsZS4gIFRoZXJlZm9yZSB3ZSBkb24ndAorKyAgICAgdXNlIHNldGxvY2FsZSBoZXJlOyBpdCB3b3VsZCByZXR1cm4gIkMiIHdoZW4gaXQgZG9lc24ndCBzdXBwb3J0IHRoZQorKyAgICAgbG9jYWxlIG5hbWUgdGhlIHVzZXIgaGFzIHNldC4gICovCisrIyAgaWYgSEFWRV9TRVRMT0NBTEUgJiYgMAorKyAgbG9jYWxlID0gc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCk7CisrIyAgZW5kaWYKKysgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysgICAgeworKyAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysJeworKwkgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisrCSAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKwkgICAgbG9jYWxlID0gZ2V0ZW52ICgiTEFORyIpOworKwl9CisrICAgIH0KKysKKysgIC8qIE9uIHNvbWUgb2xkIHN5c3RlbXMsIG9uZSB1c2VkIHRvIHNldCBsb2NhbGUgPSAiaXNvODg1OV8xIi4gT24gb3RoZXJzLAorKyAgICAgeW91IHNldCBpdCB0byAibGFuZ3VhZ2VfQ09VTlRSWS5jaGFyc2V0Ii4gSW4gYW55IGNhc2UsIHdlIHJlc29sdmUgaXQKKysgICAgIHRocm91Z2ggdGhlIGNoYXJzZXQuYWxpYXMgZmlsZS4gICovCisrICBjb2Rlc2V0ID0gbG9jYWxlOworKworKyMgZW5kaWYKKysKKysjZWxpZiBkZWZpbmVkIFdJTjMyCisrCisrICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CisrCisrICAvKiBXb2UzMiBoYXMgYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGxvY2FsZSdzIGNvZGVwYWdlIGFzIGEgbnVtYmVyLiAgKi8KKysgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBHZXRBQ1AgKCkpOworKyAgY29kZXNldCA9IGJ1ZjsKKysKKysjZWxpZiBkZWZpbmVkIE9TMgorKworKyAgY29uc3QgY2hhciAqbG9jYWxlOworKyAgc3RhdGljIGNoYXIgYnVmWzIgKyAxMCArIDFdOworKyAgVUxPTkcgY3BbM107CisrICBVTE9ORyBjcGxlbjsKKysKKysgIC8qIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGNvZGVzZXQsIGFzIHNldCBpbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwKKysgICAgIHdpdGggc3RhbmRhcmQgbGFuZ3VhZ2UgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgKi8KKysgIGxvY2FsZSA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKyAgICB7CisrICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQ1RZUEUiKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrCWxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKysgICAgfQorKyAgaWYgKGxvY2FsZSAhPSBOVUxMICYmIGxvY2FsZVswXSAhPSAnXDAnKQorKyAgICB7CisrICAgICAgLyogSWYgdGhlIGxvY2FsZSBuYW1lIGNvbnRhaW5zIGFuIGVuY29kaW5nIGFmdGVyIHRoZSBkb3QsIHJldHVybiBpdC4gICovCisrICAgICAgY29uc3QgY2hhciAqZG90ID0gc3RyY2hyIChsb2NhbGUsICcuJyk7CisrCisrICAgICAgaWYgKGRvdCAhPSBOVUxMKQorKwl7CisrCSAgY29uc3QgY2hhciAqbW9kaWZpZXI7CisrCisrCSAgZG90Kys7CisrCSAgLyogTG9vayBmb3IgdGhlIHBvc3NpYmxlIEAuLi4gdHJhaWxlciBhbmQgcmVtb3ZlIGl0LCBpZiBhbnkuICAqLworKwkgIG1vZGlmaWVyID0gc3RyY2hyIChkb3QsICdAJyk7CisrCSAgaWYgKG1vZGlmaWVyID09IE5VTEwpCisrCSAgICByZXR1cm4gZG90OworKwkgIGlmIChtb2RpZmllciAtIGRvdCA8IHNpemVvZiAoYnVmKSkKKysJICAgIHsKKysJICAgICAgbWVtY3B5IChidWYsIGRvdCwgbW9kaWZpZXIgLSBkb3QpOworKwkgICAgICBidWYgW21vZGlmaWVyIC0gZG90XSA9ICdcMCc7CisrCSAgICAgIHJldHVybiBidWY7CisrCSAgICB9CisrCX0KKysKKysgICAgICAvKiBSZXNvbHZlIHRocm91Z2ggdGhlIGNoYXJzZXQuYWxpYXMgZmlsZS4gICovCisrICAgICAgY29kZXNldCA9IGxvY2FsZTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogT1MvMiBoYXMgYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGxvY2FsZSdzIGNvZGVwYWdlIGFzIGEgbnVtYmVyLiAgKi8KKysgICAgICBpZiAoRG9zUXVlcnlDcCAoc2l6ZW9mIChjcCksIGNwLCAmY3BsZW4pKQorKwljb2Rlc2V0ID0gIiI7CisrICAgICAgZWxzZQorKwl7CisrCSAgc3ByaW50ZiAoYnVmLCAiQ1AldSIsIGNwWzBdKTsKKysJICBjb2Rlc2V0ID0gYnVmOworKwl9CisrICAgIH0KKysKKysjZW5kaWYKKysKKysgIGlmIChjb2Rlc2V0ID09IE5VTEwpCisrICAgIC8qIFRoZSBjYW5vbmljYWwgbmFtZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4gICovCisrICAgIGNvZGVzZXQgPSAiIjsKKysKKysgIC8qIFJlc29sdmUgYWxpYXMuICovCisrICBmb3IgKGFsaWFzZXMgPSBnZXRfY2hhcnNldF9hbGlhc2VzICgpOworKyAgICAgICAqYWxpYXNlcyAhPSAnXDAnOworKyAgICAgICBhbGlhc2VzICs9IHN0cmxlbiAoYWxpYXNlcykgKyAxLCBhbGlhc2VzICs9IHN0cmxlbiAoYWxpYXNlcykgKyAxKQorKyAgICBpZiAoc3RyY21wIChjb2Rlc2V0LCBhbGlhc2VzKSA9PSAwCisrCXx8IChhbGlhc2VzWzBdID09ICcqJyAmJiBhbGlhc2VzWzFdID09ICdcMCcpKQorKyAgICAgIHsKKysJY29kZXNldCA9IGFsaWFzZXMgKyBzdHJsZW4gKGFsaWFzZXMpICsgMTsKKysJYnJlYWs7CisrICAgICAgfQorKworKyAgLyogRG9uJ3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gIEdOVSBsaWJjIGFuZCBHTlUgbGliaWNvbnYgaW50ZXJwcmV0CisrICAgICB0aGUgZW1wdHkgc3RyaW5nIGFzIGRlbm90aW5nICJ0aGUgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nIiwKKysgICAgIHRodXMgR05VIGxpYmljb252IHdvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhIHNlY29uZCB0aW1lLiAgKi8KKysgIGlmIChjb2Rlc2V0WzBdID09ICdcMCcpCisrICAgIGNvZGVzZXQgPSAiQVNDSUkiOworKworKyAgcmV0dXJuIGNvZGVzZXQ7CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsY2hhcnNldC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsY2hhcnNldC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDgzNzI4NjMyIC0wNDAwCitAQCAtMCwwICsxLDQyIEBACisrLyogRGV0ZXJtaW5lIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIENIQVJTRVQgTGlicmFyeS4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfTE9DQUxDSEFSU0VUX0gKKysjZGVmaW5lIF9MT0NBTENIQVJTRVRfSAorKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKworKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKysgICBpbnRvIG9uZSBvZiB0aGUgY2Fub25pY2FsIG5hbWVzIGxpc3RlZCBpbiBjb25maWcuY2hhcnNldC4KKysgICBUaGUgcmVzdWx0IG11c3Qgbm90IGJlIGZyZWVkOyBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KKysgICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCisrICAgbmFtZS4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBsb2NhbGVfY2hhcnNldCAodm9pZCk7CisrCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKworKyNlbmRpZiAvKiBfTE9DQUxDSEFSU0VUX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGUuYWxpYXMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9jYWxlLmFsaWFzCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDk5NzI2MjAwIC0wNDAwCitAQCAtMCwwICsxLDc4IEBACisrIyBMb2NhbGUgbmFtZSBhbGlhcyBkYXRhIGJhc2UuCisrIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrIyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyMgVVNBLgorKworKyMgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgb2YKKysjIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIHdoaWNoIG5vcm1hbGx5IGNhbiBiZSBmb3VuZCBpbgorKyMJL3Vzci9saWIvWDExL2xvY2FsZS9sb2NhbGUuYWxpYXMKKysjIEEgc2luZ2xlIGxpbmUgY29udGFpbnMgdHdvIGZpZWxkczogYW4gYWxpYXMgYW5kIGEgc3Vic3RpdHV0aW9uIHZhbHVlLgorKyMgQWxsIGVudHJpZXMgYXJlIGNhc2UgaW5kZXBlbmRlbnQuCisrCisrIyBOb3RlOiBUaGlzIGZpbGUgaXMgZmFyIGZyb20gYmVpbmcgY29tcGxldGUuICBJZiB5b3UgaGF2ZSBhIHZhbHVlIGZvcgorKyMgeW91ciBvd24gc2l0ZSB3aGljaCB5b3UgdGhpbmsgbWlnaHQgYmUgdXNlZnVsIGZvciBvdGhlcnMgdG9vLCBzaGFyZQorKyMgaXQgd2l0aCB0aGUgcmVzdCBvZiB1cy4gIFNlbmQgaXQgdXNpbmcgdGhlIGBnbGliY2J1Zycgc2NyaXB0IHRvCisrIyBidWdzQGdudS5vcmcuCisrCisrIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6IAorKworK2Jva21hbAkJbmJfTk8uSVNPLTg4NTktMQorK2Jva23lbAkJbmJfTk8uSVNPLTg4NTktMQorK2NhdGFsYW4JCWNhX0VTLklTTy04ODU5LTEKKytjcm9hdGlhbglocl9IUi5JU08tODg1OS0yCisrY3plY2gJCWNzX0NaLklTTy04ODU5LTIKKytkYW5pc2ggICAgICAgICAgZGFfREsuSVNPLTg4NTktMQorK2RhbnNrCQlkYV9ESy5JU08tODg1OS0xCisrZGV1dHNjaAkJZGVfREUuSVNPLTg4NTktMQorK2R1dGNoCQlubF9OTC5JU08tODg1OS0xCisrZWVzdGkJCWV0X0VFLklTTy04ODU5LTEKKytlc3RvbmlhbglldF9FRS5JU08tODg1OS0xCisrZmlubmlzaCAgICAgICAgIGZpX0ZJLklTTy04ODU5LTEKKytmcmFu52Fpcwlmcl9GUi5JU08tODg1OS0xCisrZnJlbmNoCQlmcl9GUi5JU08tODg1OS0xCisrZ2FsZWdvCQlnbF9FUy5JU08tODg1OS0xCisrZ2FsaWNpYW4JZ2xfRVMuSVNPLTg4NTktMQorK2dlcm1hbgkJZGVfREUuSVNPLTg4NTktMQorK2dyZWVrICAgICAgICAgICBlbF9HUi5JU08tODg1OS03CisraGVicmV3ICAgICAgICAgIGhlX0lMLklTTy04ODU5LTgKKytocnZhdHNraQlocl9IUi5JU08tODg1OS0yCisraHVuZ2FyaWFuICAgICAgIGh1X0hVLklTTy04ODU5LTIKKytpY2VsYW5kaWMgICAgICAgaXNfSVMuSVNPLTg4NTktMQorK2l0YWxpYW4gICAgICAgICBpdF9JVC5JU08tODg1OS0xCisramFwYW5lc2UJamFfSlAuZXVjSlAKKytqYXBhbmVzZS5ldWMJamFfSlAuZXVjSlAKKytqYV9KUAkJamFfSlAuZXVjSlAKKytqYV9KUC51amlzCWphX0pQLmV1Y0pQCisramFwYW5lc2Uuc2ppcwlqYV9KUC5TSklTCisra29yZWFuCQlrb19LUi5ldWNLUgorK2tvcmVhbi5ldWMgCWtvX0tSLmV1Y0tSCisra29fS1IJCWtvX0tSLmV1Y0tSCisrbGl0aHVhbmlhbiAgICAgIGx0X0xULklTTy04ODU5LTEzCisrbm9fTk8JCW5iX05PLklTTy04ODU5LTEKKytub19OTy5JU08tODg1OS0xIG5iX05PLklTTy04ODU5LTEKKytub3J3ZWdpYW4gICAgICAgbmJfTk8uSVNPLTg4NTktMQorK255bm9yc2sJCW5uX05PLklTTy04ODU5LTEKKytwb2xpc2ggICAgICAgICAgcGxfUEwuSVNPLTg4NTktMgorK3BvcnR1Z3Vlc2UgICAgICBwdF9QVC5JU08tODg1OS0xCisrcm9tYW5pYW4gICAgICAgIHJvX1JPLklTTy04ODU5LTIKKytydXNzaWFuICAgICAgICAgcnVfUlUuSVNPLTg4NTktNQorK3Nsb3ZhayAgICAgICAgICBza19TSy5JU08tODg1OS0yCisrc2xvdmVuZSAgICAgICAgIHNsX1NJLklTTy04ODU5LTIKKytzbG92ZW5pYW4gICAgICAgc2xfU0kuSVNPLTg4NTktMgorK3NwYW5pc2ggICAgICAgICBlc19FUy5JU08tODg1OS0xCisrc3dlZGlzaCAgICAgICAgIHN2X1NFLklTTy04ODU5LTEKKyt0aGFpCQl0aF9USC5USVMtNjIwCisrdHVya2lzaCAgICAgICAgIHRyX1RSLklTTy04ODU5LTkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGVhbGlhcy5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZWFsaWFzLmMJMjAwNC0wOS0xMiAxNDo0MDozNC41MDU3MjUyODggLTA0MDAKK0BAIC0xLDIwICsxLDI3IEBACistLyogSGFuZGxlIGFsaWFzZXMgZm9yIGxvY2FsZSBuYW1lcworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBIYW5kbGUgYWxpYXNlcyBmb3IgbG9jYWxlIG5hbWVzLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIG1lbXBjcHkoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CitAQCAtMjIsNTYgKzI5LDQ1IEBACisgCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX19fRlNFVExPQ0tJTkcKKysjIGluY2x1ZGUgPHN0ZGlvX2V4dC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKyAjaWZkZWYgX19HTlVDX18KKysjIHVuZGVmIGFsbG9jYQorICMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisgIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorICNlbHNlCistIyBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworLSMgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgaWZkZWYgX01TQ19WRVIKKysjICBpbmNsdWRlIDxtYWxsb2MuaD4KKysjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyAjIGVsc2UKKy0jICBpZmRlZiBfQUlYCistICNwcmFnbWEgYWxsb2NhCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisgIyAgZWxzZQorLSMgICBpZm5kZWYgYWxsb2NhCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYQorIGNoYXIgKmFsbG9jYSAoKTsKKysjICAgIGVuZGlmCisgIyAgIGVuZGlmCisgIyAgZW5kaWYKKyAjIGVuZGlmCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbHNlCistY2hhciAqZ2V0ZW52ICgpOworLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZWxzZQorLXZvaWQgZnJlZSAoKTsKKy0jIGVuZGlmCistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBfR05VX1NPVVJDRQorLSMgIGRlZmluZSBfR05VX1NPVVJDRQkxCistIyBlbmRpZgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgImdldHRleHRQLmgiCisrCisrI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorKyMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorLSNlbmRpZgorLSNpZiAhSEFWRV9TVFJDSFIgJiYgIWRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBzdHJjaHIKKy0jICBkZWZpbmUgc3RyY2hyIGluZGV4CistIyBlbmRpZgorKyMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKy0KKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgI2lmZGVmIF9MSUJDCitAQCAtNzksNDMgKzc1LDQ5IEBACisgICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKyAjIGRlZmluZSBzdHJjYXNlY21wIF9fc3RyY2FzZWNtcAorKworKyMgaWZuZGVmIG1lbXBjcHkKKysjICBkZWZpbmUgbWVtcGNweSBfX21lbXBjcHkKKysjIGVuZGlmCisrIyBkZWZpbmUgSEFWRV9NRU1QQ1BZCTEKKysjIGRlZmluZSBIQVZFX19fRlNFVExPQ0tJTkcJMQorKworKy8qIFdlIG5lZWQgbG9ja2luZyBoZXJlIHNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBkaWZmZXJlbnQgcGxhY2VzLiAgKi8KKysjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrCisrX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spOworKyNlbmRpZgorKworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorICNlbmRpZgorIAorKy8qIFNvbWUgb3B0aW1pemF0aW9ucyBmb3IgZ2xpYmMuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIEZFT0YoZnApCQlmZW9mX3VubG9ja2VkIChmcCkKKysjIGRlZmluZSBGR0VUUyhidWYsIG4sIGZwKQlmZ2V0c191bmxvY2tlZCAoYnVmLCBuLCBmcCkKKysjZWxzZQorKyMgZGVmaW5lIEZFT0YoZnApCQlmZW9mIChmcCkKKysjIGRlZmluZSBGR0VUUyhidWYsIG4sIGZwKQlmZ2V0cyAoYnVmLCBuLCBmcCkKKysjZW5kaWYKKyAKKy0vKiBGb3IgdGhvc2UgbG9vc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKysvKiBGb3IgdGhvc2UgbG9zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorICAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCisgI2lmZGVmIEhBVkVfQUxMT0NBCistLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHJlc3MpIC8qIG5vdGhpbmcgKi8KKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3RoaW5nICovCisrIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworICNlbHNlCistc3RydWN0IGJsb2NrX2xpc3QKKy17CistICB2b2lkICphZGRyZXNzOworLSAgc3RydWN0IGJsb2NrX2xpc3QgKm5leHQ7CistfTsKKy0jIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV3cCA9IChzdHJ1Y3QgYmxvY2tfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsgIFwKKy0gICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorLSAgICAgICB0aGUgbGlzdC4gICovCQkJCQkJCSAgICAgIFwKKy0gICAgaWYgKG5ld3AgIT0gTlVMTCkgewkJCQkJCQkgICAgICBcCistICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCistICAgICAgbmV3cC0+bmV4dCA9IChsaXN0KTsJCQkJCQkgICAgICBcCistICAgICAgKGxpc3QpID0gbmV3cDsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsJCQkJCQkgICAgICBcCistICAgICAgc3RydWN0IGJsb2NrX2xpc3QgKm9sZCA9IGxpc3Q7CQkJCQkgICAgICBcCistICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorLSAgICAgIGZyZWUgKG9sZCk7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyB1bmRlZiBhbGxvY2EKKy0jIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCistI2VuZGlmCS8qIGhhdmUgYWxsb2NhICovCisrIyBkZWZpbmUgYWxsb2NhKG4pIG1hbGxvYyAobikKKysjIGRlZmluZSBmcmVlYShwKSBmcmVlIChwKQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDX1JFRU5UUkFOVCB8fCBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQKKysjIHVuZGVmIGZnZXRzCisrIyBkZWZpbmUgZmdldHMoYnVmLCBsZW4sIHMpIGZnZXRzX3VubG9ja2VkIChidWYsIGxlbiwgcykKKysjZW5kaWYKKysjaWYgZGVmaW5lZCBfTElCQ19SRUVOVFJBTlQgfHwgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQKKysjIHVuZGVmIGZlb2YKKysjIGRlZmluZSBmZW9mKHMpIGZlb2ZfdW5sb2NrZWQgKHMpCisrI2VuZGlmCisgCisgCisgc3RydWN0IGFsaWFzX21hcAorQEAgLTEyNSwyNiArMTI3LDQxIEBACisgfTsKKyAKKyAKKy1zdGF0aWMgc3RydWN0IGFsaWFzX21hcCAqbWFwOworLXN0YXRpYyBzaXplX3Qgbm1hcCA9IDA7Cistc3RhdGljIHNpemVfdCBtYXhtYXAgPSAwOworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBsaWJjX2ZyZWVyZXNfcHRyKGRlY2wpIGRlY2wKKysjZW5kaWYKKysKKytsaWJjX2ZyZWVyZXNfcHRyIChzdGF0aWMgY2hhciAqc3RyaW5nX3NwYWNlKTsKKytzdGF0aWMgc2l6ZV90IHN0cmluZ19zcGFjZV9hY3Q7Cisrc3RhdGljIHNpemVfdCBzdHJpbmdfc3BhY2VfbWF4OworK2xpYmNfZnJlZXJlc19wdHIgKHN0YXRpYyBzdHJ1Y3QgYWxpYXNfbWFwICptYXApOworK3N0YXRpYyBzaXplX3Qgbm1hcDsKKytzdGF0aWMgc2l6ZV90IG1heG1hcDsKKyAKKyAKKyAvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworLXN0YXRpYyBzaXplX3QgcmVhZF9hbGlhc19maWxlIFBBUkFNUyAoKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZm5hbWVfbGVuKSk7Cistc3RhdGljIHZvaWQgZXh0ZW5kX2FsaWFzX3RhYmxlIFBBUkFNUyAoKHZvaWQpKTsKKy1zdGF0aWMgaW50IGFsaWFzX2NvbXBhcmUgUEFSQU1TICgoY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMSwKKy0JCQkJICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKSk7Cisrc3RhdGljIHNpemVfdCByZWFkX2FsaWFzX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZm5hbWVfbGVuKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIGludCBleHRlbmRfYWxpYXNfdGFibGUgKHZvaWQpOworK3N0YXRpYyBpbnQgYWxpYXNfY29tcGFyZSAoY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMSwKKysJCQkgIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDIpOworIAorIAorIGNvbnN0IGNoYXIgKgorLV9ubF9leHBhbmRfYWxpYXMgKG5hbWUpCistICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSkKKyB7CistICBzdGF0aWMgY29uc3QgY2hhciAqbG9jYWxlX2FsaWFzX3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKysgIHN0YXRpYyBjb25zdCBjaGFyICpsb2NhbGVfYWxpYXNfcGF0aDsKKyAgIHN0cnVjdCBhbGlhc19tYXAgKnJldHZhbDsKKysgIGNvbnN0IGNoYXIgKnJlc3VsdCA9IE5VTEw7CisgICBzaXplX3QgYWRkZWQ7CisgCisrI2lmZGVmIF9MSUJDCisrICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysjZW5kaWYKKysKKysgIGlmIChsb2NhbGVfYWxpYXNfcGF0aCA9PSBOVUxMKQorKyAgICBsb2NhbGVfYWxpYXNfcGF0aCA9IExPQ0FMRV9BTElBU19QQVRIOworKworICAgZG8KKyAgICAgeworICAgICAgIHN0cnVjdCBhbGlhc19tYXAgaXRlbTsKK0BAIC0xNTQsMTUgKzE3MSwxOCBAQAorICAgICAgIGlmIChubWFwID4gMCkKKyAJcmV0dmFsID0gKHN0cnVjdCBhbGlhc19tYXAgKikgYnNlYXJjaCAoJml0ZW0sIG1hcCwgbm1hcCwKKyAJCQkJCSAgICAgICBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApLAorLQkJCQkJICAgICAgIChpbnQgKCopIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwKKy0JCQkJCQkJCSBjb25zdCB2b2lkICopKQorKwkJCQkJICAgICAgIChpbnQgKCopIChjb25zdCB2b2lkICosCisrCQkJCQkJCSBjb25zdCB2b2lkICopCisgCQkJCQkJKSBhbGlhc19jb21wYXJlKTsKKyAgICAgICBlbHNlCisgCXJldHZhbCA9IE5VTEw7CisgCisgICAgICAgLyogV2UgcmVhbGx5IGZvdW5kIGFuIGFsaWFzLiAgUmV0dXJuIHRoZSB2YWx1ZS4gICovCisgICAgICAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQlyZXR1cm4gcmV0dmFsLT52YWx1ZTsKKysJeworKwkgIHJlc3VsdCA9IHJldHZhbC0+dmFsdWU7CisrCSAgYnJlYWs7CisrCX0KKyAKKyAgICAgICAvKiBQZXJoYXBzIHdlIGNhbiBmaW5kIGFub3RoZXIgYWxpYXMgZmlsZS4gICovCisgICAgICAgYWRkZWQgPSAwOworQEAgLTE3MCwxMSArMTkwLDEyIEBACisgCXsKKyAJICBjb25zdCBjaGFyICpzdGFydDsKKyAKKy0JICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gPT0gJzonKQorKwkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSA9PSBQQVRIX1NFUEFSQVRPUikKKyAJICAgICsrbG9jYWxlX2FsaWFzX3BhdGg7CisgCSAgc3RhcnQgPSBsb2NhbGVfYWxpYXNfcGF0aDsKKyAKKy0JICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJ1wwJyAmJiBsb2NhbGVfYWxpYXNfcGF0aFswXSAhPSAnOicpCisrCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICdcMCcKKysJCSAmJiBsb2NhbGVfYWxpYXNfcGF0aFswXSAhPSBQQVRIX1NFUEFSQVRPUikKKyAJICAgICsrbG9jYWxlX2FsaWFzX3BhdGg7CisgCisgCSAgaWYgKHN0YXJ0IDwgbG9jYWxlX2FsaWFzX3BhdGgpCitAQCAtMTgzLDc4ICsyMDQsODcgQEAKKyAgICAgfQorICAgd2hpbGUgKGFkZGVkICE9IDApOworIAorLSAgcmV0dXJuIE5VTEw7CisrI2lmZGVmIF9MSUJDCisrICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyNlbmRpZgorKworKyAgcmV0dXJuIHJlc3VsdDsKKyB9CisgCisgCisgc3RhdGljIHNpemVfdAorLXJlYWRfYWxpYXNfZmlsZSAoZm5hbWUsIGZuYW1lX2xlbikKKy0gICAgIGNvbnN0IGNoYXIgKmZuYW1lOworLSAgICAgaW50IGZuYW1lX2xlbjsKKytpbnRlcm5hbF9mdW5jdGlvbgorK3JlYWRfYWxpYXNfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUsIGludCBmbmFtZV9sZW4pCisgeworLSNpZm5kZWYgSEFWRV9BTExPQ0EKKy0gIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKy0jZW5kaWYKKyAgIEZJTEUgKmZwOworICAgY2hhciAqZnVsbF9mbmFtZTsKKyAgIHNpemVfdCBhZGRlZDsKKyAgIHN0YXRpYyBjb25zdCBjaGFyIGFsaWFzZmlsZVtdID0gIi9sb2NhbGUuYWxpYXMiOworIAorICAgZnVsbF9mbmFtZSA9IChjaGFyICopIGFsbG9jYSAoZm5hbWVfbGVuICsgc2l6ZW9mIGFsaWFzZmlsZSk7CistICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGZ1bGxfZm5hbWUpOworKyNpZmRlZiBIQVZFX01FTVBDUFkKKysgIG1lbXBjcHkgKG1lbXBjcHkgKGZ1bGxfZm5hbWUsIGZuYW1lLCBmbmFtZV9sZW4pLAorKwkgICBhbGlhc2ZpbGUsIHNpemVvZiBhbGlhc2ZpbGUpOworKyNlbHNlCisgICBtZW1jcHkgKGZ1bGxfZm5hbWUsIGZuYW1lLCBmbmFtZV9sZW4pOworICAgbWVtY3B5ICgmZnVsbF9mbmFtZVtmbmFtZV9sZW5dLCBhbGlhc2ZpbGUsIHNpemVvZiBhbGlhc2ZpbGUpOworKyNlbmRpZgorIAorLSAgZnAgPSBmb3BlbiAoZnVsbF9mbmFtZSwgInIiKTsKKysgIGZwID0gZm9wZW4gKHJlbG9jYXRlIChmdWxsX2ZuYW1lKSwgInIiKTsKKysgIGZyZWVhIChmdWxsX2ZuYW1lKTsKKyAgIGlmIChmcCA9PSBOVUxMKQorLSAgICB7CistICAgICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CisrICAgIHJldHVybiAwOworKworKyNpZmRlZiBIQVZFX19fRlNFVExPQ0tJTkcKKysgIC8qIE5vIHRocmVhZHMgcHJlc2VudC4gICovCisrICBfX2ZzZXRsb2NraW5nIChmcCwgRlNFVExPQ0tJTkdfQllDQUxMRVIpOworKyNlbmRpZgorIAorICAgYWRkZWQgPSAwOworLSAgd2hpbGUgKCFmZW9mIChmcCkpCisrICB3aGlsZSAoIUZFT0YgKGZwKSkKKyAgICAgeworICAgICAgIC8qIEl0IGlzIGEgcmVhc29uYWJsZSBhcHByb2FjaCB0byB1c2UgYSBmaXggYnVmZmVyIGhlcmUgYmVjYXVzZQorIAkgYSkgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZmlyc3QgdHdvIGZpZWxkcworIAkgYikgdGhlc2UgZmllbGRzIG11c3QgYmUgdXNhYmxlIGFzIGZpbGUgbmFtZXMgYW5kIHNvIG11c3Qgbm90CisgCSAgICBiZSB0aGF0IGxvbmcKKy0gICAgICAgKi8KKy0gICAgICBjaGFyIGJ1ZltCVUZTSVpdOworKwkgV2UgYXZvaWQgYSBtdWx0aS1raWxvYnl0ZSBidWZmZXIgaGVyZSBzaW5jZSB0aGlzIHdvdWxkIHVzZSB1cAorKwkgc3RhY2sgc3BhY2Ugd2hpY2ggd2UgbWlnaHQgbm90IGhhdmUgaWYgdGhlIHByb2dyYW0gcmFuIG91dCBvZgorKwkgbWVtb3J5LiAgKi8KKysgICAgICBjaGFyIGJ1Zls0MDBdOworICAgICAgIGNoYXIgKmFsaWFzOworICAgICAgIGNoYXIgKnZhbHVlOworICAgICAgIGNoYXIgKmNwOworIAorLSAgICAgIGlmIChmZ2V0cyAoYnVmLCBCVUZTSVosIGZwKSA9PSBOVUxMKQorKyAgICAgIGlmIChGR0VUUyAoYnVmLCBzaXplb2YgYnVmLCBmcCkgPT0gTlVMTCkKKyAJLyogRU9GIHJlYWNoZWQuICAqLworIAlicmVhazsKKyAKKyAgICAgICBjcCA9IGJ1ZjsKKyAgICAgICAvKiBJZ25vcmUgbGVhZGluZyB3aGl0ZSBzcGFjZS4gICovCistICAgICAgd2hpbGUgKGlzc3BhY2UgKGNwWzBdKSkKKysgICAgICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJKytjcDsKKyAKKyAgICAgICAvKiBBIGxlYWRpbmcgJyMnIHNpZ25hbHMgYSBjb21tZW50IGxpbmUuICAqLworICAgICAgIGlmIChjcFswXSAhPSAnXDAnICYmIGNwWzBdICE9ICcjJykKKyAJeworIAkgIGFsaWFzID0gY3ArKzsKKy0JICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoY3BbMF0pKQorKwkgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorIAkgICAgKytjcDsKKyAJICAvKiBUZXJtaW5hdGUgYWxpYXMgbmFtZS4gICovCisgCSAgaWYgKGNwWzBdICE9ICdcMCcpCisgCSAgICAqY3ArKyA9ICdcMCc7CisgCisgCSAgLyogTm93IGxvb2sgZm9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHZhbHVlLiAgKi8KKy0JICB3aGlsZSAoaXNzcGFjZSAoY3BbMF0pKQorKwkgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorIAkgICAgKytjcDsKKyAKKyAJICBpZiAoY3BbMF0gIT0gJ1wwJykKKyAJICAgIHsKKy0JICAgICAgY2hhciAqdHA7CistCSAgICAgIHNpemVfdCBsZW47CisrCSAgICAgIHNpemVfdCBhbGlhc19sZW47CisrCSAgICAgIHNpemVfdCB2YWx1ZV9sZW47CisgCisgCSAgICAgIHZhbHVlID0gY3ArKzsKKy0JICAgICAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGNwWzBdKSkKKysJICAgICAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisgCQkrK2NwOworIAkgICAgICAvKiBUZXJtaW5hdGUgdmFsdWUuICAqLworIAkgICAgICBpZiAoY3BbMF0gPT0gJ1xuJykKK0BAIC0yNjksMjggKzI5OSw0NCBAQAorIAkJKmNwKysgPSAnXDAnOworIAorIAkgICAgICBpZiAobm1hcCA+PSBtYXhtYXApCistCQlleHRlbmRfYWxpYXNfdGFibGUgKCk7CistCistCSAgICAgIC8qIFdlIGNhbm5vdCBkZXBlbmQgb24gc3RyZHVwIGF2YWlsYWJsZSBpbiB0aGUgbGliYy4gIFNpZ2ghICAqLworLQkgICAgICBsZW4gPSBzdHJsZW4gKGFsaWFzKSArIDE7CistCSAgICAgIHRwID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLQkgICAgICBpZiAodHAgPT0gTlVMTCkKKy0JCXsKKy0JCSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworKwkJaWYgKF9fYnVpbHRpbl9leHBlY3QgKGV4dGVuZF9hbGlhc190YWJsZSAoKSwgMCkpCisgCQkgIHJldHVybiBhZGRlZDsKKy0JCX0KKy0JICAgICAgbWVtY3B5ICh0cCwgYWxpYXMsIGxlbik7CistCSAgICAgIG1hcFtubWFwXS5hbGlhcyA9IHRwOworIAorLQkgICAgICBsZW4gPSBzdHJsZW4gKHZhbHVlKSArIDE7CistCSAgICAgIHRwID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLQkgICAgICBpZiAodHAgPT0gTlVMTCkKKysJICAgICAgYWxpYXNfbGVuID0gc3RybGVuIChhbGlhcykgKyAxOworKwkgICAgICB2YWx1ZV9sZW4gPSBzdHJsZW4gKHZhbHVlKSArIDE7CisrCisrCSAgICAgIGlmIChzdHJpbmdfc3BhY2VfYWN0ICsgYWxpYXNfbGVuICsgdmFsdWVfbGVuID4gc3RyaW5nX3NwYWNlX21heCkKKyAJCXsKKy0JCSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkJICByZXR1cm4gYWRkZWQ7CisrCQkgIC8qIEluY3JlYXNlIHNpemUgb2YgbWVtb3J5IHBvb2wuICAqLworKwkJICBzaXplX3QgbmV3X3NpemUgPSAoc3RyaW5nX3NwYWNlX21heAorKwkJCQkgICAgICsgKGFsaWFzX2xlbiArIHZhbHVlX2xlbiA+IDEwMjQKKysJCQkJCT8gYWxpYXNfbGVuICsgdmFsdWVfbGVuIDogMTAyNCkpOworKwkJICBjaGFyICpuZXdfcG9vbCA9IChjaGFyICopIHJlYWxsb2MgKHN0cmluZ19zcGFjZSwgbmV3X3NpemUpOworKwkJICBpZiAobmV3X3Bvb2wgPT0gTlVMTCkKKysJCSAgICByZXR1cm4gYWRkZWQ7CisrCisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChzdHJpbmdfc3BhY2UgIT0gbmV3X3Bvb2wsIDApKQorKwkJICAgIHsKKysJCSAgICAgIHNpemVfdCBpOworKworKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG5tYXA7IGkrKykKKysJCQl7CisrCQkJICBtYXBbaV0uYWxpYXMgKz0gbmV3X3Bvb2wgLSBzdHJpbmdfc3BhY2U7CisrCQkJICBtYXBbaV0udmFsdWUgKz0gbmV3X3Bvb2wgLSBzdHJpbmdfc3BhY2U7CisrCQkJfQorKwkJICAgIH0KKysKKysJCSAgc3RyaW5nX3NwYWNlID0gbmV3X3Bvb2w7CisrCQkgIHN0cmluZ19zcGFjZV9tYXggPSBuZXdfc2l6ZTsKKyAJCX0KKy0JICAgICAgbWVtY3B5ICh0cCwgdmFsdWUsIGxlbik7CistCSAgICAgIG1hcFtubWFwXS52YWx1ZSA9IHRwOworKworKwkgICAgICBtYXBbbm1hcF0uYWxpYXMgPSBtZW1jcHkgKCZzdHJpbmdfc3BhY2Vbc3RyaW5nX3NwYWNlX2FjdF0sCisrCQkJCQlhbGlhcywgYWxpYXNfbGVuKTsKKysJICAgICAgc3RyaW5nX3NwYWNlX2FjdCArPSBhbGlhc19sZW47CisrCisrCSAgICAgIG1hcFtubWFwXS52YWx1ZSA9IG1lbWNweSAoJnN0cmluZ19zcGFjZVtzdHJpbmdfc3BhY2VfYWN0XSwKKysJCQkJCXZhbHVlLCB2YWx1ZV9sZW4pOworKwkgICAgICBzdHJpbmdfc3BhY2VfYWN0ICs9IHZhbHVlX2xlbjsKKyAKKyAJICAgICAgKytubWFwOworIAkgICAgICArK2FkZGVkOworQEAgLTI5OSwxNCArMzQ1LDExIEBACisgCisgICAgICAgLyogUG9zc2libHkgbm90IHRoZSB3aG9sZSBsaW5lIGZpdHMgaW50byB0aGUgYnVmZmVyLiAgSWdub3JlCisgCSB0aGUgcmVzdCBvZiB0aGUgbGluZS4gICovCistICAgICAgd2hpbGUgKHN0cmNociAoY3AsICdcbicpID09IE5VTEwpCistCXsKKy0JICBjcCA9IGJ1ZjsKKy0JICBpZiAoZmdldHMgKGJ1ZiwgQlVGU0laLCBmcCkgPT0gTlVMTCkKKy0JICAgIC8qIE1ha2Ugc3VyZSB0aGUgaW5uZXIgbG9vcCB3aWxsIGJlIGxlZnQuICBUaGUgb3V0ZXIgbG9vcAorLQkgICAgICAgd2lsbCBleGl0IGF0IHRoZSBgZmVvZicgdGVzdC4gICovCistCSAgICAqY3AgPSAnXG4nOworLQl9CisrICAgICAgd2hpbGUgKHN0cmNociAoYnVmLCAnXG4nKSA9PSBOVUxMKQorKwlpZiAoRkdFVFMgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApID09IE5VTEwpCisrCSAgLyogTWFrZSBzdXJlIHRoZSBpbm5lciBsb29wIHdpbGwgYmUgbGVmdC4gIFRoZSBvdXRlciBsb29wCisrCSAgICAgd2lsbCBleGl0IGF0IHRoZSBgZmVvZicgdGVzdC4gICovCisrCSAgYnJlYWs7CisgICAgIH0KKyAKKyAgIC8qIFNob3VsZCB3ZSB0ZXN0IGZvciBmZXJyb3IoKT8gIEkgdGhpbmsgd2UgaGF2ZSB0byBzaWxlbnRseSBpZ25vcmUKK0BAIC0zMTUsNDAgKzM1OCwzMyBAQAorIAorICAgaWYgKGFkZGVkID4gMCkKKyAgICAgcXNvcnQgKG1hcCwgbm1hcCwgc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSwKKy0JICAgKGludCAoKikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSkgYWxpYXNfY29tcGFyZSk7CisrCSAgIChpbnQgKCopIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIGFsaWFzX2NvbXBhcmUpOworIAorLSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworICAgcmV0dXJuIGFkZGVkOworIH0KKyAKKyAKKy1zdGF0aWMgdm9pZAorK3N0YXRpYyBpbnQKKyBleHRlbmRfYWxpYXNfdGFibGUgKCkKKyB7CisgICBzaXplX3QgbmV3X3NpemU7CisgICBzdHJ1Y3QgYWxpYXNfbWFwICpuZXdfbWFwOworIAorICAgbmV3X3NpemUgPSBtYXhtYXAgPT0gMCA/IDEwMCA6IDIgKiBtYXhtYXA7CistICBuZXdfbWFwID0gKHN0cnVjdCBhbGlhc19tYXAgKikgbWFsbG9jIChuZXdfc2l6ZQorLQkJCQkJICogc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSk7CisrICBuZXdfbWFwID0gKHN0cnVjdCBhbGlhc19tYXAgKikgcmVhbGxvYyAobWFwLCAobmV3X3NpemUKKysJCQkJCQkqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpKTsKKyAgIGlmIChuZXdfbWFwID09IE5VTEwpCisgICAgIC8qIFNpbXBseSBkb24ndCBleHRlbmQ6IHdlIGRvbid0IGhhdmUgYW55IG1vcmUgY29yZS4gICovCistICAgIHJldHVybjsKKy0KKy0gIG1lbWNweSAobmV3X21hcCwgbWFwLCBubWFwICogc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSk7CistCistICBpZiAobWF4bWFwICE9IDApCistICAgIGZyZWUgKG1hcCk7CisrICAgIHJldHVybiAtMTsKKyAKKyAgIG1hcCA9IG5ld19tYXA7CisgICBtYXhtYXAgPSBuZXdfc2l6ZTsKKysgIHJldHVybiAwOworIH0KKyAKKyAKKyBzdGF0aWMgaW50CistYWxpYXNfY29tcGFyZSAobWFwMSwgbWFwMikKKy0gICAgIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDE7CistICAgICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyOworK2FsaWFzX2NvbXBhcmUgKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDIpCisgeworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJDQVNFQ01QCisgICByZXR1cm4gc3RyY2FzZWNtcCAobWFwMS0+YWxpYXMsIG1hcDItPmFsaWFzKTsKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGVuYW1lLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9jYWxlbmFtZS5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTEwNzI0NTI4IC0wNDAwCitAQCAtMCwwICsxLDExNDIgQEAKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgbG9jYWxlLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251Lm9yZz4sIDE5OTUuICAqLworKy8qIFdpbjMyIGNvZGUgd3JpdHRlbiBieSBUb3IgTGlsbHF2aXN0IDx0bWxAaWtpLmZpPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrIyB1bmRlZiBXSU4zMiAgIC8qIGF2b2lkIHdhcm5pbmcgb24gbWluZ3czMiAqLworKyMgZGVmaW5lIFdJTjMyCisrI2VuZGlmCisrCisrI2lmZGVmIFdJTjMyCisrIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorKyMgaW5jbHVkZSA8d2luZG93cy5oPgorKy8qIExpc3Qgb2YgbGFuZ3VhZ2UgY29kZXMsIHNvcnRlZCBieSB2YWx1ZToKKysgICAweDAxIExBTkdfQVJBQklDCisrICAgMHgwMiBMQU5HX0JVTEdBUklBTgorKyAgIDB4MDMgTEFOR19DQVRBTEFOCisrICAgMHgwNCBMQU5HX0NISU5FU0UKKysgICAweDA1IExBTkdfQ1pFQ0gKKysgICAweDA2IExBTkdfREFOSVNICisrICAgMHgwNyBMQU5HX0dFUk1BTgorKyAgIDB4MDggTEFOR19HUkVFSworKyAgIDB4MDkgTEFOR19FTkdMSVNICisrICAgMHgwYSBMQU5HX1NQQU5JU0gKKysgICAweDBiIExBTkdfRklOTklTSAorKyAgIDB4MGMgTEFOR19GUkVOQ0gKKysgICAweDBkIExBTkdfSEVCUkVXCisrICAgMHgwZSBMQU5HX0hVTkdBUklBTgorKyAgIDB4MGYgTEFOR19JQ0VMQU5ESUMKKysgICAweDEwIExBTkdfSVRBTElBTgorKyAgIDB4MTEgTEFOR19KQVBBTkVTRQorKyAgIDB4MTIgTEFOR19LT1JFQU4KKysgICAweDEzIExBTkdfRFVUQ0gKKysgICAweDE0IExBTkdfTk9SV0VHSUFOCisrICAgMHgxNSBMQU5HX1BPTElTSAorKyAgIDB4MTYgTEFOR19QT1JUVUdVRVNFCisrICAgMHgxNyBMQU5HX1JIQUVUT19ST01BTkNFCisrICAgMHgxOCBMQU5HX1JPTUFOSUFOCisrICAgMHgxOSBMQU5HX1JVU1NJQU4KKysgICAweDFhIExBTkdfQ1JPQVRJQU4gPT0gTEFOR19TRVJCSUFOCisrICAgMHgxYiBMQU5HX1NMT1ZBSworKyAgIDB4MWMgTEFOR19BTEJBTklBTgorKyAgIDB4MWQgTEFOR19TV0VESVNICisrICAgMHgxZSBMQU5HX1RIQUkKKysgICAweDFmIExBTkdfVFVSS0lTSAorKyAgIDB4MjAgTEFOR19VUkRVCisrICAgMHgyMSBMQU5HX0lORE9ORVNJQU4KKysgICAweDIyIExBTkdfVUtSQUlOSUFOCisrICAgMHgyMyBMQU5HX0JFTEFSVVNJQU4KKysgICAweDI0IExBTkdfU0xPVkVOSUFOCisrICAgMHgyNSBMQU5HX0VTVE9OSUFOCisrICAgMHgyNiBMQU5HX0xBVFZJQU4KKysgICAweDI3IExBTkdfTElUSFVBTklBTgorKyAgIDB4MjggTEFOR19UQUpJSworKyAgIDB4MjkgTEFOR19GQVJTSQorKyAgIDB4MmEgTEFOR19WSUVUTkFNRVNFCisrICAgMHgyYiBMQU5HX0FSTUVOSUFOCisrICAgMHgyYyBMQU5HX0FaRVJJCisrICAgMHgyZCBMQU5HX0JBU1FVRQorKyAgIDB4MmUgTEFOR19TT1JCSUFOCisrICAgMHgyZiBMQU5HX01BQ0VET05JQU4KKysgICAweDMwIExBTkdfU1VUVQorKyAgIDB4MzEgTEFOR19UU09OR0EKKysgICAweDMyIExBTkdfVFNXQU5BCisrICAgMHgzMyBMQU5HX1ZFTkRBCisrICAgMHgzNCBMQU5HX1hIT1NBCisrICAgMHgzNSBMQU5HX1pVTFUKKysgICAweDM2IExBTkdfQUZSSUtBQU5TCisrICAgMHgzNyBMQU5HX0dFT1JHSUFOCisrICAgMHgzOCBMQU5HX0ZBRVJPRVNFCisrICAgMHgzOSBMQU5HX0hJTkRJCisrICAgMHgzYSBMQU5HX01BTFRFU0UKKysgICAweDNiIExBTkdfU0FBTUkKKysgICAweDNjIExBTkdfR0FFTElDCisrICAgMHgzZCBMQU5HX1lJRERJU0gKKysgICAweDNlIExBTkdfTUFMQVkKKysgICAweDNmIExBTkdfS0FaQUsKKysgICAweDQwIExBTkdfS1lSR1laCisrICAgMHg0MSBMQU5HX1NXQUhJTEkKKysgICAweDQyIExBTkdfVFVSS01FTgorKyAgIDB4NDMgTEFOR19VWkJFSworKyAgIDB4NDQgTEFOR19UQVRBUgorKyAgIDB4NDUgTEFOR19CRU5HQUxJCisrICAgMHg0NiBMQU5HX1BVTkpBQkkKKysgICAweDQ3IExBTkdfR1VKQVJBVEkKKysgICAweDQ4IExBTkdfT1JJWUEKKysgICAweDQ5IExBTkdfVEFNSUwKKysgICAweDRhIExBTkdfVEVMVUdVCisrICAgMHg0YiBMQU5HX0tBTk5BREEKKysgICAweDRjIExBTkdfTUFMQVlBTEFNCisrICAgMHg0ZCBMQU5HX0FTU0FNRVNFCisrICAgMHg0ZSBMQU5HX01BUkFUSEkKKysgICAweDRmIExBTkdfU0FOU0tSSVQKKysgICAweDUwIExBTkdfTU9OR09MSUFOCisrICAgMHg1MSBMQU5HX1RJQkVUQU4KKysgICAweDUyIExBTkdfV0VMU0gKKysgICAweDUzIExBTkdfQ0FNQk9ESUFOCisrICAgMHg1NCBMQU5HX0xBTworKyAgIDB4NTUgTEFOR19CVVJNRVNFCisrICAgMHg1NiBMQU5HX0dBTElDSUFOCisrICAgMHg1NyBMQU5HX0tPTktBTkkKKysgICAweDU4IExBTkdfTUFOSVBVUkkKKysgICAweDU5IExBTkdfU0lOREhJCisrICAgMHg1YSBMQU5HX1NZUklBQworKyAgIDB4NWIgTEFOR19TSU5IQUxFU0UKKysgICAweDVjIExBTkdfQ0hFUk9LRUUKKysgICAweDVkIExBTkdfSU5VS1RJVFVUCisrICAgMHg1ZSBMQU5HX0FNSEFSSUMKKysgICAweDVmIExBTkdfVEFNQVpJR0hUCisrICAgMHg2MCBMQU5HX0tBU0hNSVJJCisrICAgMHg2MSBMQU5HX05FUEFMSQorKyAgIDB4NjIgTEFOR19GUklTSUFOCisrICAgMHg2MyBMQU5HX1BBU0hUTworKyAgIDB4NjQgTEFOR19UQUdBTE9HCisrICAgMHg2NSBMQU5HX0RJVkVISQorKyAgIDB4NjYgTEFOR19FRE8KKysgICAweDY3IExBTkdfRlVMRlVMREUKKysgICAweDY4IExBTkdfSEFVU0EKKysgICAweDY5IExBTkdfSUJJQklPCisrICAgMHg2YSBMQU5HX1lPUlVCQQorKyAgIDB4NzAgTEFOR19JR0JPCisrICAgMHg3MSBMQU5HX0tBTlVSSQorKyAgIDB4NzIgTEFOR19PUk9NTworKyAgIDB4NzMgTEFOR19USUdSSU5ZQQorKyAgIDB4NzQgTEFOR19HVUFSQU5JCisrICAgMHg3NSBMQU5HX0hBV0FJSUFOCisrICAgMHg3NiBMQU5HX0xBVElOCisrICAgMHg3NyBMQU5HX1NPTUFMSQorKyAgIDB4NzggTEFOR19ZSQorKyAgIDB4NzkgTEFOR19QQVBJQU1FTlRVCisrKi8KKysvKiBNaW5ndyBoZWFkZXJzIGRvbid0IGhhdmUgbGF0ZXN0IGxhbmd1YWdlIGFuZCBzdWJsYW5ndWFnZSBjb2Rlcy4gICovCisrIyBpZm5kZWYgTEFOR19BRlJJS0FBTlMKKysjIGRlZmluZSBMQU5HX0FGUklLQUFOUyAweDM2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQUxCQU5JQU4KKysjIGRlZmluZSBMQU5HX0FMQkFOSUFOIDB4MWMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BTUhBUklDCisrIyBkZWZpbmUgTEFOR19BTUhBUklDIDB4NWUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BUkFCSUMKKysjIGRlZmluZSBMQU5HX0FSQUJJQyAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVJNRU5JQU4KKysjIGRlZmluZSBMQU5HX0FSTUVOSUFOIDB4MmIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BU1NBTUVTRQorKyMgZGVmaW5lIExBTkdfQVNTQU1FU0UgMHg0ZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FaRVJJCisrIyBkZWZpbmUgTEFOR19BWkVSSSAweDJjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQkFTUVVFCisrIyBkZWZpbmUgTEFOR19CQVNRVUUgMHgyZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0JFTEFSVVNJQU4KKysjIGRlZmluZSBMQU5HX0JFTEFSVVNJQU4gMHgyMworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0JFTkdBTEkKKysjIGRlZmluZSBMQU5HX0JFTkdBTEkgMHg0NQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0JVUk1FU0UKKysjIGRlZmluZSBMQU5HX0JVUk1FU0UgMHg1NQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0NBTUJPRElBTgorKyMgZGVmaW5lIExBTkdfQ0FNQk9ESUFOIDB4NTMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19DQVRBTEFOCisrIyBkZWZpbmUgTEFOR19DQVRBTEFOIDB4MDMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19DSEVST0tFRQorKyMgZGVmaW5lIExBTkdfQ0hFUk9LRUUgMHg1YworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0RJVkVISQorKyMgZGVmaW5lIExBTkdfRElWRUhJIDB4NjUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19FRE8KKysjIGRlZmluZSBMQU5HX0VETyAweDY2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRVNUT05JQU4KKysjIGRlZmluZSBMQU5HX0VTVE9OSUFOIDB4MjUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19GQUVST0VTRQorKyMgZGVmaW5lIExBTkdfRkFFUk9FU0UgMHgzOAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZBUlNJCisrIyBkZWZpbmUgTEFOR19GQVJTSSAweDI5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRlJJU0lBTgorKyMgZGVmaW5lIExBTkdfRlJJU0lBTiAweDYyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRlVMRlVMREUKKysjIGRlZmluZSBMQU5HX0ZVTEZVTERFIDB4NjcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HQUVMSUMKKysjIGRlZmluZSBMQU5HX0dBRUxJQyAweDNjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0FMSUNJQU4KKysjIGRlZmluZSBMQU5HX0dBTElDSUFOIDB4NTYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HRU9SR0lBTgorKyMgZGVmaW5lIExBTkdfR0VPUkdJQU4gMHgzNworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dVQVJBTkkKKysjIGRlZmluZSBMQU5HX0dVQVJBTkkgMHg3NAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dVSkFSQVRJCisrIyBkZWZpbmUgTEFOR19HVUpBUkFUSSAweDQ3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSEFVU0EKKysjIGRlZmluZSBMQU5HX0hBVVNBIDB4NjgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19IQVdBSUlBTgorKyMgZGVmaW5lIExBTkdfSEFXQUlJQU4gMHg3NQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0hFQlJFVworKyMgZGVmaW5lIExBTkdfSEVCUkVXIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ISU5ESQorKyMgZGVmaW5lIExBTkdfSElOREkgMHgzOQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0lCSUJJTworKyMgZGVmaW5lIExBTkdfSUJJQklPIDB4NjkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19JR0JPCisrIyBkZWZpbmUgTEFOR19JR0JPIDB4NzAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19JTkRPTkVTSUFOCisrIyBkZWZpbmUgTEFOR19JTkRPTkVTSUFOIDB4MjEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19JTlVLVElUVVQKKysjIGRlZmluZSBMQU5HX0lOVUtUSVRVVCAweDVkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS0FOTkFEQQorKyMgZGVmaW5lIExBTkdfS0FOTkFEQSAweDRiCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS0FOVVJJCisrIyBkZWZpbmUgTEFOR19LQU5VUkkgMHg3MQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBU0hNSVJJCisrIyBkZWZpbmUgTEFOR19LQVNITUlSSSAweDYwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS0FaQUsKKysjIGRlZmluZSBMQU5HX0tBWkFLIDB4M2YKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LT05LQU5JCisrIyBkZWZpbmUgTEFOR19LT05LQU5JIDB4NTcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LWVJHWVoKKysjIGRlZmluZSBMQU5HX0tZUkdZWiAweDQwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTEFPCisrIyBkZWZpbmUgTEFOR19MQU8gMHg1NAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBVElOCisrIyBkZWZpbmUgTEFOR19MQVRJTiAweDc2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTEFUVklBTgorKyMgZGVmaW5lIExBTkdfTEFUVklBTiAweDI2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTElUSFVBTklBTgorKyMgZGVmaW5lIExBTkdfTElUSFVBTklBTiAweDI3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFDRURPTklBTgorKyMgZGVmaW5lIExBTkdfTUFDRURPTklBTiAweDJmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFMQVkKKysjIGRlZmluZSBMQU5HX01BTEFZIDB4M2UKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19NQUxBWUFMQU0KKysjIGRlZmluZSBMQU5HX01BTEFZQUxBTSAweDRjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFMVEVTRQorKyMgZGVmaW5lIExBTkdfTUFMVEVTRSAweDNhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFOSVBVUkkKKysjIGRlZmluZSBMQU5HX01BTklQVVJJIDB4NTgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19NQVJBVEhJCisrIyBkZWZpbmUgTEFOR19NQVJBVEhJIDB4NGUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19NT05HT0xJQU4KKysjIGRlZmluZSBMQU5HX01PTkdPTElBTiAweDUwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTkVQQUxJCisrIyBkZWZpbmUgTEFOR19ORVBBTEkgMHg2MQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX09SSVlBCisrIyBkZWZpbmUgTEFOR19PUklZQSAweDQ4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfT1JPTU8KKysjIGRlZmluZSBMQU5HX09ST01PIDB4NzIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19QQVBJQU1FTlRVCisrIyBkZWZpbmUgTEFOR19QQVBJQU1FTlRVIDB4NzkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19QQVNIVE8KKysjIGRlZmluZSBMQU5HX1BBU0hUTyAweDYzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUFVOSkFCSQorKyMgZGVmaW5lIExBTkdfUFVOSkFCSSAweDQ2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUkhBRVRPX1JPTUFOQ0UKKysjIGRlZmluZSBMQU5HX1JIQUVUT19ST01BTkNFIDB4MTcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TQUFNSQorKyMgZGVmaW5lIExBTkdfU0FBTUkgMHgzYgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NBTlNLUklUCisrIyBkZWZpbmUgTEFOR19TQU5TS1JJVCAweDRmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0VSQklBTgorKyMgZGVmaW5lIExBTkdfU0VSQklBTiAweDFhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0lOREhJCisrIyBkZWZpbmUgTEFOR19TSU5ESEkgMHg1OQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NJTkhBTEVTRQorKyMgZGVmaW5lIExBTkdfU0lOSEFMRVNFIDB4NWIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TTE9WQUsKKysjIGRlZmluZSBMQU5HX1NMT1ZBSyAweDFiCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU09NQUxJCisrIyBkZWZpbmUgTEFOR19TT01BTEkgMHg3NworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NPUkJJQU4KKysjIGRlZmluZSBMQU5HX1NPUkJJQU4gMHgyZQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NVVFUKKysjIGRlZmluZSBMQU5HX1NVVFUgMHgzMAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NXQUhJTEkKKysjIGRlZmluZSBMQU5HX1NXQUhJTEkgMHg0MQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NZUklBQworKyMgZGVmaW5lIExBTkdfU1lSSUFDIDB4NWEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQUdBTE9HCisrIyBkZWZpbmUgTEFOR19UQUdBTE9HIDB4NjQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQUpJSworKyMgZGVmaW5lIExBTkdfVEFKSUsgMHgyOAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RBTUFaSUdIVAorKyMgZGVmaW5lIExBTkdfVEFNQVpJR0hUIDB4NWYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQU1JTAorKyMgZGVmaW5lIExBTkdfVEFNSUwgMHg0OQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RBVEFSCisrIyBkZWZpbmUgTEFOR19UQVRBUiAweDQ0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEVMVUdVCisrIyBkZWZpbmUgTEFOR19URUxVR1UgMHg0YQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RIQUkKKysjIGRlZmluZSBMQU5HX1RIQUkgMHgxZQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RJQkVUQU4KKysjIGRlZmluZSBMQU5HX1RJQkVUQU4gMHg1MQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RJR1JJTllBCisrIyBkZWZpbmUgTEFOR19USUdSSU5ZQSAweDczCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVFNPTkdBCisrIyBkZWZpbmUgTEFOR19UU09OR0EgMHgzMQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RTV0FOQQorKyMgZGVmaW5lIExBTkdfVFNXQU5BIDB4MzIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UVVJLTUVOCisrIyBkZWZpbmUgTEFOR19UVVJLTUVOIDB4NDIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19VS1JBSU5JQU4KKysjIGRlZmluZSBMQU5HX1VLUkFJTklBTiAweDIyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVVJEVQorKyMgZGVmaW5lIExBTkdfVVJEVSAweDIwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVVpCRUsKKysjIGRlZmluZSBMQU5HX1VaQkVLIDB4NDMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19WRU5EQQorKyMgZGVmaW5lIExBTkdfVkVOREEgMHgzMworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1ZJRVROQU1FU0UKKysjIGRlZmluZSBMQU5HX1ZJRVROQU1FU0UgMHgyYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1dFTFNICisrIyBkZWZpbmUgTEFOR19XRUxTSCAweDUyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWEhPU0EKKysjIGRlZmluZSBMQU5HX1hIT1NBIDB4MzQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZSQorKyMgZGVmaW5lIExBTkdfWUkgMHg3OAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1lJRERJU0gKKysjIGRlZmluZSBMQU5HX1lJRERJU0ggMHgzZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1lPUlVCQQorKyMgZGVmaW5lIExBTkdfWU9SVUJBIDB4NmEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19aVUxVCisrIyBkZWZpbmUgTEFOR19aVUxVIDB4MzUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfU0FVRElfQVJBQklBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfU0FVRElfQVJBQklBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfSVJBUQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0lSQVEgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19FR1lQVAorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0VHWVBUIDB4MDMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfTElCWUEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19MSUJZQSAweDA0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0FMR0VSSUEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19BTEdFUklBIDB4MDUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfTU9ST0NDTworKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX01PUk9DQ08gMHgwNgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19UVU5JU0lBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfVFVOSVNJQSAweDA3CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX09NQU4KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19PTUFOIDB4MDgKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfWUVNRU4KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19ZRU1FTiAweDA5CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1NZUklBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfU1lSSUEgMHgwYQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19KT1JEQU4KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19KT1JEQU4gMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19MRUJBTk9OCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTEVCQU5PTiAweDBjCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0tVV0FJVAorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0tVV0FJVCAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1VBRQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1VBRSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0JBSFJBSU4KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOIDB4MGYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfUUFUQVIKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19RQVRBUiAweDEwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVpFUklfTEFUSU4KKysjIGRlZmluZSBTVUJMQU5HX0FaRVJJX0xBVElOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BWkVSSV9DWVJJTExJQworKyMgZGVmaW5lIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUMgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0JFTkdBTElfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfSU5ESUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSAorKyMgZGVmaW5lIFNVQkxBTkdfQkVOR0FMSV9CQU5HTEFERVNIIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19DSElORVNFX01BQ0FVCisrIyBkZWZpbmUgU1VCTEFOR19DSElORVNFX01BQ0FVIDB4MDUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1NPVVRIX0FGUklDQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0EgMHgwNworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9KQU1BSUNBIDB4MDgKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0NBUklCQkVBTgorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU4gMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfQkVMSVpFCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0JFTElaRSAweDBhCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRAorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRCAweDBiCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9aSU1CQUJXRQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9aSU1CQUJXRSAweDBjCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9QSElMSVBQSU5FUworKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9QSElMSVBQSU5FUyAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUEKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSU5ET05FU0lBIDB4MGUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0hPTkdLT05HCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0hPTkdLT05HIDB4MGYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORElBIDB4MTAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX01BTEFZU0lBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX01BTEFZU0lBIDB4MTEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1NJTkdBUE9SRQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkUgMHgxMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9MVVhFTUJPVVJHCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRyAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX01PTkFDTworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX01PTkFDTyAweDA2CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1dFU1RJTkRJRVMKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfUkVVTklPTgorKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX1JFVU5JT04gMHgwOAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9DT05HTworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0NPTkdPIDB4MDkKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfU0VORUdBTAorKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUwgMHgwYQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTgorKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0NBTUVST09OIDB4MGIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT1RFRElWT0lSRSAweDBjCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX01BTEkKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NQUxJIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTU9ST0NDTworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX01PUk9DQ08gMHgwZQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9IQUlUSQorKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0hBSVRJIDB4MGYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19HRVJNQU5fTFVYRU1CT1VSRworKyMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkcgMHgwNAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0dFUk1BTl9MSUVDSFRFTlNURUlOCisrIyBkZWZpbmUgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTiAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfS0FTSE1JUklfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX0tBU0hNSVJJX0lORElBIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19NQUxBWV9NQUxBWVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUEgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNCisrIyBkZWZpbmUgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfTkVQQUxJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19ORVBBTElfSU5ESUEgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1BVTkpBQklfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1BVTkpBQklfSU5ESUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1BVTkpBQklfUEFLSVNUQU4KKysjIGRlZmluZSBTVUJMQU5HX1BVTkpBQklfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUEKKysjIGRlZmluZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1JPTUFOSUFOX01PTERPVkEKKysjIGRlZmluZSBTVUJMQU5HX1JPTUFOSUFOX01PTERPVkEgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NFUkJJQU5fTEFUSU4KKysjIGRlZmluZSBTVUJMQU5HX1NFUkJJQU5fTEFUSU4gMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NFUkJJQU5fQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX1NFUkJJQU5fQ1lSSUxMSUMgMHgwMworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NJTkRISV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfU0lOREhJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4KKysjIGRlZmluZSBTVUJMQU5HX1NJTkRISV9QQUtJU1RBTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9HVUFURU1BTEEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBIDB4MDQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09TVEFfUklDQSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QQU5BTUEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BIDB4MDYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQworKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9ET01JTklDQU5fUkVQVUJMSUMgMHgwNworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1ZFTkVaVUVMQSAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DT0xPTUJJQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9DT0xPTUJJQSAweDA5CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QRVJVCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BFUlUgMHgwYQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0FSR0VOVElOQSAweDBiCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0VDVUFET1IgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ0hJTEUKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ0hJTEUgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9VUlVHVUFZIDB4MGUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BBUkFHVUFZCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBUkFHVUFZIDB4MGYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQSAweDEwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9FTF9TQUxWQURPUgorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FTF9TQUxWQURPUiAweDExCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9IT05EVVJBUworKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9IT05EVVJBUyAweDEyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9OSUNBUkFHVUEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBIDB4MTMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BVRVJUT19SSUNPCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BVRVJUT19SSUNPIDB4MTQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQKKysjIGRlZmluZSBTVUJMQU5HX1NXRURJU0hfRklOTEFORCAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVEFNQVpJR0hUX0FSQUJJQworKyMgZGVmaW5lIFNVQkxBTkdfVEFNQVpJR0hUX0FSQUJJQyAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19UQU1BWklHSFRfTEFUSU4gMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RJR1JJTllBX0VUSElPUElBCisrIyBkZWZpbmUgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVElHUklOWUFfRVJJVFJFQQorKyMgZGVmaW5lIFNVQkxBTkdfVElHUklOWUFfRVJJVFJFQSAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVVJEVV9QQUtJU1RBTgorKyMgZGVmaW5lIFNVQkxBTkdfVVJEVV9QQUtJU1RBTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVVJEVV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfVVJEVV9JTkRJQSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVVpCRUtfTEFUSU4KKysjIGRlZmluZSBTVUJMQU5HX1VaQkVLX0xBVElOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19VWkJFS19DWVJJTExJQworKyMgZGVmaW5lIFNVQkxBTkdfVVpCRUtfQ1lSSUxMSUMgMHgwMgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBYUEczIGRlZmluZXMgdGhlIHJlc3VsdCBvZiAnc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCknIGFzOgorKyAgICJEaXJlY3RzICdzZXRsb2NhbGUoKScgdG8gcXVlcnkgJ2NhdGVnb3J5JyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50CisrICAgIHNldHRpbmcgb2YgJ2xvY2FsJy4iCisrICAgSG93ZXZlciBpdCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBleGFjdCBmb3JtYXQuICBOZWl0aGVyIGRvIFNVU1YyIGFuZAorKyAgIElTTyBDIDk5LiAgU28gd2UgY2FuIHVzZSB0aGlzIGZlYXR1cmUgb25seSBvbiBzZWxlY3RlZCBzeXN0ZW1zIChlLmcuCisrICAgdGhvc2UgdXNpbmcgR05VIEMgTGlicmFyeSkuICAqLworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIF9fR05VX0xJQlJBUllfXyAmJiBfX0dOVV9MSUJSQVJZX18gPj0gMikKKysjIGRlZmluZSBIQVZFX0xPQ0FMRV9OVUxMCisrI2VuZGlmCisrCisrLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxvY2FsZSdzIG5hbWUsIGFuZCBjYW5vbmljYWxpemUgaXQgaW50byBYUEcgc3ludGF4CisrICAgICBsYW5ndWFnZVtfdGVycml0b3J5Wy5jb2Rlc2V0XV1bQG1vZGlmaWVyXQorKyAgIFRoZSBjb2Rlc2V0IHBhcnQgaW4gdGhlIHJlc3VsdCBpcyBub3QgcmVsaWFibGU7IHRoZSBsb2NhbGVfY2hhcnNldCgpCisrICAgc2hvdWxkIGJlIHVzZWQgZm9yIGNvZGVzZXQgaW5mb3JtYXRpb24gaW5zdGVhZC4KKysgICBUaGUgcmVzdWx0IG11c3Qgbm90IGJlIGZyZWVkOyBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4gICovCisrCisrY29uc3QgY2hhciAqCisrX25sX2xvY2FsZV9uYW1lIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKyt7CisrICBjb25zdCBjaGFyICpyZXR2YWw7CisrCisrI2lmbmRlZiBXSU4zMgorKworKyAgLyogVXNlIHRoZSBQT1NJWCBtZXRob2RzIG9mIGxvb2tpbmcgdG8gJ0xDX0FMTCcsICdMQ194eHgnLCBhbmQgJ0xBTkcnLgorKyAgICAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlICdzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisrIyBpZiBkZWZpbmVkIEhBVkVfU0VUTE9DQUxFICYmIGRlZmluZWQgSEFWRV9MQ19NRVNTQUdFUyAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwKKysgIHJldHZhbCA9IHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpOworKyMgZWxzZQorKyAgLyogU2V0dGluZyBvZiBMQ19BTEwgb3ZlcndyaXRlcyBhbGwgb3RoZXIuICAqLworKyAgcmV0dmFsID0gZ2V0ZW52ICgiTENfQUxMIik7CisrICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisrICAgIHsKKysgICAgICAvKiBOZXh0IGNvbWVzIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIGNhdGVnb3J5LiAgKi8KKysgICAgICByZXR2YWwgPSBnZXRlbnYgKGNhdGVnb3J5bmFtZSk7CisrICAgICAgaWYgKHJldHZhbCA9PSBOVUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQorKwl7CisrCSAgLyogTGFzdCBwb3NzaWJpbGl0eSBpcyB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCisrCSAgcmV0dmFsID0gZ2V0ZW52ICgiTEFORyIpOworKwkgIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKKysJICAgIC8qIFdlIHVzZSBDIGFzIHRoZSBkZWZhdWx0IGRvbWFpbi4gIFBPU0lYIHNheXMgdGhpcyBpcworKwkgICAgICAgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gICovCisrCSAgICByZXR2YWwgPSAiQyI7CisrCX0KKysgICAgfQorKyMgZW5kaWYKKysKKysgIHJldHVybiByZXR2YWw7CisrCisrI2Vsc2UgLyogV0lOMzIgKi8KKysKKysgIC8qIFJldHVybiBhbiBYUEcgc3R5bGUgbG9jYWxlIG5hbWUgbGFuZ3VhZ2VbX3RlcnJpdG9yeV1bQG1vZGlmaWVyXS4KKysgICAgIERvbid0IGV2ZW4gYm90aGVyIGRldGVybWluaW5nIHRoZSBjb2Rlc2V0OyBpdCdzIG5vdCB1c2VmdWwgaW4gdGhpcworKyAgICAgY29udGV4dCwgYmVjYXVzZSBtZXNzYWdlIGNhdGFsb2dzIGFyZSBub3Qgc3BlY2lmaWMgdG8gYSBzaW5nbGUKKysgICAgIGNvZGVzZXQuICAqLworKworKyAgTENJRCBsY2lkOworKyAgTEFOR0lEIGxhbmdpZDsKKysgIGludCBwcmltYXJ5LCBzdWI7CisrCisrICAvKiBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHN5c3RlbSBzZXR0aW5ncyB0aHJvdWdoIGVudmlyb25tZW50CisrICAgICB2YXJpYWJsZXMsIGFzIG9uIFBPU0lYIHN5c3RlbXMuICAqLworKyAgcmV0dmFsID0gZ2V0ZW52ICgiTENfQUxMIik7CisrICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCisrICAgIHJldHVybiByZXR2YWw7CisrICByZXR2YWwgPSBnZXRlbnYgKGNhdGVnb3J5bmFtZSk7CisrICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCisrICAgIHJldHVybiByZXR2YWw7CisrICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CisrICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCisrICAgIHJldHVybiByZXR2YWw7CisrCisrICAvKiBVc2UgbmF0aXZlIFdpbjMyIEFQSSBsb2NhbGUgSUQuICAqLworKyAgbGNpZCA9IEdldFRocmVhZExvY2FsZSAoKTsKKysKKysgIC8qIFN0cmlwIG9mZiB0aGUgc29ydGluZyBydWxlcywga2VlcCBvbmx5IHRoZSBsYW5ndWFnZSBwYXJ0LiAgKi8KKysgIGxhbmdpZCA9IExBTkdJREZST01MQ0lEIChsY2lkKTsKKysKKysgIC8qIFNwbGl0IGludG8gbGFuZ3VhZ2UgYW5kIHRlcnJpdG9yeSBwYXJ0LiAgKi8KKysgIHByaW1hcnkgPSBQUklNQVJZTEFOR0lEIChsYW5naWQpOworKyAgc3ViID0gU1VCTEFOR0lEIChsYW5naWQpOworKworKyAgLyogRGlzcGF0Y2ggb24gbGFuZ3VhZ2UuCisrICAgICBTZWUgYWxzbyBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvb25saW5lZGF0L2xhbmd1YWdlcy5odG1sIC4KKysgICAgIEZvciBkZXRhaWxzIGFib3V0IGxhbmd1YWdlcywgc2VlIGh0dHA6Ly93d3cuZXRobm9sb2d1ZS5jb20vIC4gICovCisrICBzd2l0Y2ggKHByaW1hcnkpCisrICAgIHsKKysgICAgY2FzZSBMQU5HX0FGUklLQUFOUzogcmV0dXJuICJhZl9aQSI7CisrICAgIGNhc2UgTEFOR19BTEJBTklBTjogcmV0dXJuICJzcV9BTCI7CisrICAgIGNhc2UgTEFOR19BTUhBUklDOiByZXR1cm4gImFtX0VUIjsKKysgICAgY2FzZSBMQU5HX0FSQUJJQzoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQTogcmV0dXJuICJhcl9TQSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfSVJBUTogcmV0dXJuICJhcl9JUSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfRUdZUFQ6IHJldHVybiAiYXJfRUciOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0xJQllBOiByZXR1cm4gImFyX0xZIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19BTEdFUklBOiByZXR1cm4gImFyX0RaIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPOiByZXR1cm4gImFyX01BIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19UVU5JU0lBOiByZXR1cm4gImFyX1ROIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19PTUFOOiByZXR1cm4gImFyX09NIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19ZRU1FTjogcmV0dXJuICJhcl9ZRSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfU1lSSUE6IHJldHVybiAiYXJfU1kiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0pPUkRBTjogcmV0dXJuICJhcl9KTyI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfTEVCQU5PTjogcmV0dXJuICJhcl9MQiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfS1VXQUlUOiByZXR1cm4gImFyX0tXIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19VQUU6IHJldHVybiAiYXJfQUUiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0JBSFJBSU46IHJldHVybiAiYXJfQkgiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1FBVEFSOiByZXR1cm4gImFyX1FBIjsKKysJfQorKyAgICAgIHJldHVybiAiYXIiOworKyAgICBjYXNlIExBTkdfQVJNRU5JQU46IHJldHVybiAiaHlfQU0iOworKyAgICBjYXNlIExBTkdfQVNTQU1FU0U6IHJldHVybiAiYXNfSU4iOworKyAgICBjYXNlIExBTkdfQVpFUkk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gQXplcmJhaWphbmkgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrCWNhc2UgU1VCTEFOR19BWkVSSV9MQVRJTjogcmV0dXJuICJhel9BWkBsYXRpbiI7CisrCWNhc2UgU1VCTEFOR19BWkVSSV9DWVJJTExJQzogcmV0dXJuICJhel9BWkBjeXJpbGxpYyI7CisrCX0KKysgICAgICByZXR1cm4gImF6IjsKKysgICAgY2FzZSBMQU5HX0JBU1FVRToKKysgICAgICByZXR1cm4gImV1IjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAiZXVfRVMiIG9yICJldV9GUiIuICAqLworKyAgICBjYXNlIExBTkdfQkVMQVJVU0lBTjogcmV0dXJuICJiZV9CWSI7CisrICAgIGNhc2UgTEFOR19CRU5HQUxJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19CRU5HQUxJX0lORElBOiByZXR1cm4gImJuX0lOIjsKKysJY2FzZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSDogcmV0dXJuICJibl9CRCI7CisrCX0KKysgICAgICByZXR1cm4gImJuIjsKKysgICAgY2FzZSBMQU5HX0JVTEdBUklBTjogcmV0dXJuICJiZ19CRyI7CisrICAgIGNhc2UgTEFOR19CVVJNRVNFOiByZXR1cm4gIm15X01NIjsKKysgICAgY2FzZSBMQU5HX0NBTUJPRElBTjogcmV0dXJuICJrbV9LSCI7CisrICAgIGNhc2UgTEFOR19DQVRBTEFOOiByZXR1cm4gImNhX0VTIjsKKysgICAgY2FzZSBMQU5HX0NIRVJPS0VFOiByZXR1cm4gImNocl9VUyI7CisrICAgIGNhc2UgTEFOR19DSElORVNFOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1RSQURJVElPTkFMOiByZXR1cm4gInpoX1RXIjsKKysJY2FzZSBTVUJMQU5HX0NISU5FU0VfU0lNUExJRklFRDogcmV0dXJuICJ6aF9DTiI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX0hPTkdLT05HOiByZXR1cm4gInpoX0hLIjsKKysJY2FzZSBTVUJMQU5HX0NISU5FU0VfU0lOR0FQT1JFOiByZXR1cm4gInpoX1NHIjsKKysJY2FzZSBTVUJMQU5HX0NISU5FU0VfTUFDQVU6IHJldHVybiAiemhfTU8iOworKwl9CisrICAgICAgcmV0dXJuICJ6aCI7CisrICAgIGNhc2UgTEFOR19DUk9BVElBTjoJCS8qIExBTkdfQ1JPQVRJQU4gPT0gTEFOR19TRVJCSUFOCisrCQkJCSAqIFdoYXQgdXNlZCB0byBiZSBjYWxsZWQgU2VyYm8tQ3JvYXRpYW4KKysJCQkJICogc2hvdWxkIHJlYWxseSBub3cgYmUgdHdvIHNlcGFyYXRlCisrCQkJCSAqIGxhbmd1YWdlcyBiZWNhdXNlIG9mIHBvbGl0aWNhbCByZWFzb25zLgorKwkJCQkgKiAoU2F5cyB0bWwsIHdobyBrbm93cyBub3RoaW5nIGFib3V0IFNlcmJpYW4KKysJCQkJICogb3IgQ3JvYXRpYW4uKQorKwkJCQkgKiAoSSBjYW4gZmVlbCB0aG9zZSBmbGFtZXMgY29taW5nIGFscmVhZHkuKQorKwkJCQkgKi8KKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJocl9IUiI7CisrCWNhc2UgU1VCTEFOR19TRVJCSUFOX0xBVElOOiByZXR1cm4gInNyX0NTIjsKKysJY2FzZSBTVUJMQU5HX1NFUkJJQU5fQ1lSSUxMSUM6IHJldHVybiAic3JfQ1NAY3lyaWxsaWMiOworKwl9CisrICAgICAgcmV0dXJuICJociI7CisrICAgIGNhc2UgTEFOR19DWkVDSDogcmV0dXJuICJjc19DWiI7CisrICAgIGNhc2UgTEFOR19EQU5JU0g6IHJldHVybiAiZGFfREsiOworKyAgICBjYXNlIExBTkdfRElWRUhJOiByZXR1cm4gImR2X01WIjsKKysgICAgY2FzZSBMQU5HX0RVVENIOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19EVVRDSDogcmV0dXJuICJubF9OTCI7CisrCWNhc2UgU1VCTEFOR19EVVRDSF9CRUxHSUFOOiAvKiBGTEVNSVNILCBWTEFBTVMgKi8gcmV0dXJuICJubF9CRSI7CisrCX0KKysgICAgICByZXR1cm4gIm5sIjsKKysgICAgY2FzZSBMQU5HX0VETzogcmV0dXJuICJiaW5fTkciOworKyAgICBjYXNlIExBTkdfRU5HTElTSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwkvKiBTVUJMQU5HX0VOR0xJU0hfVVMgPT0gU1VCTEFOR19ERUZBVUxULiBIZWguIEkgdGhvdWdodAorKwkgKiBFbmdsaXNoIHdhcyB0aGUgbGFuZ3VhZ2Ugc3Bva2VuIGluIEVuZ2xhbmQuCisrCSAqIE9oIHdlbGwuCisrCSAqLworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9VUzogcmV0dXJuICJlbl9VUyI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1VLOiByZXR1cm4gImVuX0dCIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQVVTOiByZXR1cm4gImVuX0FVIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQ0FOOiByZXR1cm4gImVuX0NBIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfTlo6IHJldHVybiAiZW5fTloiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9FSVJFOiByZXR1cm4gImVuX0lFIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBOiByZXR1cm4gImVuX1pBIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQTogcmV0dXJuICJlbl9KTSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0NBUklCQkVBTjogcmV0dXJuICJlbl9HRCI7IC8qIEdyZW5hZGE/ICovCisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0JFTElaRTogcmV0dXJuICJlbl9CWiI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1RSSU5JREFEOiByZXR1cm4gImVuX1RUIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0U6IHJldHVybiAiZW5fWlciOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9QSElMSVBQSU5FUzogcmV0dXJuICJlbl9QSCI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQTogcmV0dXJuICJlbl9JRCI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0hPTkdLT05HOiByZXR1cm4gImVuX0hLIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfSU5ESUE6IHJldHVybiAiZW5fSU4iOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQTogcmV0dXJuICJlbl9NWSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1NJTkdBUE9SRTogcmV0dXJuICJlbl9TRyI7CisrCX0KKysgICAgICByZXR1cm4gImVuIjsKKysgICAgY2FzZSBMQU5HX0VTVE9OSUFOOiByZXR1cm4gImV0X0VFIjsKKysgICAgY2FzZSBMQU5HX0ZBRVJPRVNFOiByZXR1cm4gImZvX0ZPIjsKKysgICAgY2FzZSBMQU5HX0ZBUlNJOiByZXR1cm4gImZhX0lSIjsKKysgICAgY2FzZSBMQU5HX0ZJTk5JU0g6IHJldHVybiAiZmlfRkkiOworKyAgICBjYXNlIExBTkdfRlJFTkNIOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0g6IHJldHVybiAiZnJfRlIiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0JFTEdJQU46IC8qIFdBTExPT04gKi8gcmV0dXJuICJmcl9CRSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ0FOQURJQU46IHJldHVybiAiZnJfQ0EiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX1NXSVNTOiByZXR1cm4gImZyX0NIIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9MVVhFTUJPVVJHOiByZXR1cm4gImZyX0xVIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ086IHJldHVybiAiZnJfTUMiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX1dFU1RJTkRJRVM6IHJldHVybiAiZnIiOyAvKiBDYXJpYmJlYW4/ICovCisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfUkVVTklPTjogcmV0dXJuICJmcl9SRSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ09OR086IHJldHVybiAiZnJfQ0ciOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUw6IHJldHVybiAiZnJfU04iOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NBTUVST09OOiByZXR1cm4gImZyX0NNIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DT1RFRElWT0lSRTogcmV0dXJuICJmcl9DSSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTUFMSTogcmV0dXJuICJmcl9NTCI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTU9ST0NDTzogcmV0dXJuICJmcl9NQSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfSEFJVEk6IHJldHVybiAiZnJfSFQiOworKwl9CisrICAgICAgcmV0dXJuICJmciI7CisrICAgIGNhc2UgTEFOR19GUklTSUFOOiByZXR1cm4gImZ5X05MIjsKKysgICAgY2FzZSBMQU5HX0ZVTEZVTERFOgorKyAgICAgIC8qIFNwb2tlbiBpbiBOaWdlcmlhLCBHdWluZWEsIFNlbmVnYWwsIE1hbGksIE5pZ2VyLCBDYW1lcm9vbiwgQmVuaW4uICovCisrICAgICAgcmV0dXJuICJmZl9ORyI7CisrICAgIGNhc2UgTEFOR19HQUVMSUM6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSAweDAxOiAvKiBTQ09UVElTSCAqLyByZXR1cm4gImdkX0dCIjsKKysJY2FzZSAweDAyOiAvKiBJUklTSCAqLyByZXR1cm4gImdhX0lFIjsKKysJfQorKyAgICAgIHJldHVybiAiQyI7CisrICAgIGNhc2UgTEFOR19HQUxJQ0lBTjogcmV0dXJuICJnbF9FUyI7CisrICAgIGNhc2UgTEFOR19HRU9SR0lBTjogcmV0dXJuICJrYV9HRSI7CisrICAgIGNhc2UgTEFOR19HRVJNQU46CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTjogcmV0dXJuICJkZV9ERSI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fU1dJU1M6IHJldHVybiAiZGVfQ0giOworKwljYXNlIFNVQkxBTkdfR0VSTUFOX0FVU1RSSUFOOiByZXR1cm4gImRlX0FUIjsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHOiByZXR1cm4gImRlX0xVIjsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTl9MSUVDSFRFTlNURUlOOiByZXR1cm4gImRlX0xJIjsKKysJfQorKyAgICAgIHJldHVybiAiZGUiOworKyAgICBjYXNlIExBTkdfR1JFRUs6IHJldHVybiAiZWxfR1IiOworKyAgICBjYXNlIExBTkdfR1VBUkFOSTogcmV0dXJuICJnbl9QWSI7CisrICAgIGNhc2UgTEFOR19HVUpBUkFUSTogcmV0dXJuICJndV9JTiI7CisrICAgIGNhc2UgTEFOR19IQVVTQTogcmV0dXJuICJoYV9ORyI7CisrICAgIGNhc2UgTEFOR19IQVdBSUlBTjoKKysgICAgICAvKiBGSVhNRTogRG8gdGhleSBtZWFuIEhhd2FpaWFuICgiaGF3X1VTIiwgMTAwMCBzcGVha2VycykKKysJIG9yIEhhd2FpaSBDcmVvbGUgRW5nbGlzaCAoImNwZV9VUyIsIDYwMDAwMCBzcGVha2Vycyk/ICAqLworKyAgICAgIHJldHVybiAiY3BlX1VTIjsKKysgICAgY2FzZSBMQU5HX0hFQlJFVzogcmV0dXJuICJoZV9JTCI7CisrICAgIGNhc2UgTEFOR19ISU5ESTogcmV0dXJuICJoaV9JTiI7CisrICAgIGNhc2UgTEFOR19IVU5HQVJJQU46IHJldHVybiAiaHVfSFUiOworKyAgICBjYXNlIExBTkdfSUJJQklPOiByZXR1cm4gIm5pY19ORyI7CisrICAgIGNhc2UgTEFOR19JQ0VMQU5ESUM6IHJldHVybiAiaXNfSVMiOworKyAgICBjYXNlIExBTkdfSUdCTzogcmV0dXJuICJpZ19ORyI7CisrICAgIGNhc2UgTEFOR19JTkRPTkVTSUFOOiByZXR1cm4gImlkX0lEIjsKKysgICAgY2FzZSBMQU5HX0lOVUtUSVRVVDogcmV0dXJuICJpdV9DQSI7CisrICAgIGNhc2UgTEFOR19JVEFMSUFOOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19JVEFMSUFOOiByZXR1cm4gIml0X0lUIjsKKysJY2FzZSBTVUJMQU5HX0lUQUxJQU5fU1dJU1M6IHJldHVybiAiaXRfQ0giOworKwl9CisrICAgICAgcmV0dXJuICJpdCI7CisrICAgIGNhc2UgTEFOR19KQVBBTkVTRTogcmV0dXJuICJqYV9KUCI7CisrICAgIGNhc2UgTEFOR19LQU5OQURBOiByZXR1cm4gImtuX0lOIjsKKysgICAgY2FzZSBMQU5HX0tBTlVSSTogcmV0dXJuICJrcl9ORyI7CisrICAgIGNhc2UgTEFOR19LQVNITUlSSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJrc19QSyI7CisrCWNhc2UgU1VCTEFOR19LQVNITUlSSV9JTkRJQTogcmV0dXJuICJrc19JTiI7CisrCX0KKysgICAgICByZXR1cm4gImtzIjsKKysgICAgY2FzZSBMQU5HX0tBWkFLOiByZXR1cm4gImtrX0taIjsKKysgICAgY2FzZSBMQU5HX0tPTktBTkk6CisrICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysgICAgICByZXR1cm4gImtva19JTiI7CisrICAgIGNhc2UgTEFOR19LT1JFQU46IHJldHVybiAia29fS1IiOworKyAgICBjYXNlIExBTkdfS1lSR1laOiByZXR1cm4gImt5X0tHIjsKKysgICAgY2FzZSBMQU5HX0xBTzogcmV0dXJuICJsb19MQSI7CisrICAgIGNhc2UgTEFOR19MQVRJTjogcmV0dXJuICJsYV9WQSI7CisrICAgIGNhc2UgTEFOR19MQVRWSUFOOiByZXR1cm4gImx2X0xWIjsKKysgICAgY2FzZSBMQU5HX0xJVEhVQU5JQU46IHJldHVybiAibHRfTFQiOworKyAgICBjYXNlIExBTkdfTUFDRURPTklBTjogcmV0dXJuICJta19NSyI7CisrICAgIGNhc2UgTEFOR19NQUxBWToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUE6IHJldHVybiAibXNfTVkiOworKwljYXNlIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU06IHJldHVybiAibXNfQk4iOworKwl9CisrICAgICAgcmV0dXJuICJtcyI7CisrICAgIGNhc2UgTEFOR19NQUxBWUFMQU06IHJldHVybiAibWxfSU4iOworKyAgICBjYXNlIExBTkdfTUFMVEVTRTogcmV0dXJuICJtdF9NVCI7CisrICAgIGNhc2UgTEFOR19NQU5JUFVSSToKKysgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKyAgICAgIHJldHVybiAibW5pX0lOIjsKKysgICAgY2FzZSBMQU5HX01BUkFUSEk6IHJldHVybiAibXJfSU4iOworKyAgICBjYXNlIExBTkdfTU9OR09MSUFOOgorKyAgICAgIHJldHVybiAibW4iOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJtbl9DTiIgb3IgIm1uX01OIi4gICovCisrICAgIGNhc2UgTEFOR19ORVBBTEk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAibmVfTlAiOworKwljYXNlIFNVQkxBTkdfTkVQQUxJX0lORElBOiByZXR1cm4gIm5lX0lOIjsKKysJfQorKyAgICAgIHJldHVybiAibmUiOworKyAgICBjYXNlIExBTkdfTk9SV0VHSUFOOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19OT1JXRUdJQU5fQk9LTUFMOiByZXR1cm4gIm5vX05PIjsKKysJY2FzZSBTVUJMQU5HX05PUldFR0lBTl9OWU5PUlNLOiByZXR1cm4gIm5uX05PIjsKKysJfQorKyAgICAgIHJldHVybiAibm8iOworKyAgICBjYXNlIExBTkdfT1JJWUE6IHJldHVybiAib3JfSU4iOworKyAgICBjYXNlIExBTkdfT1JPTU86IHJldHVybiAib21fRVQiOworKyAgICBjYXNlIExBTkdfUEFQSUFNRU5UVTogcmV0dXJuICJwYXBfQU4iOworKyAgICBjYXNlIExBTkdfUEFTSFRPOgorKyAgICAgIHJldHVybiAicHMiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJwc19QSyIgb3IgInBzX0FGIi4gICovCisrICAgIGNhc2UgTEFOR19QT0xJU0g6IHJldHVybiAicGxfUEwiOworKyAgICBjYXNlIExBTkdfUE9SVFVHVUVTRToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfUE9SVFVHVUVTRTogcmV0dXJuICJwdF9QVCI7CisrCS8qIEhtbS4gU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTiA9PSBTVUJMQU5HX0RFRkFVTFQuCisrCSAgIFNhbWUgcGhlbm9tZW5vbiBhcyBTVUJMQU5HX0VOR0xJU0hfVVMgPT0gU1VCTEFOR19ERUZBVUxULiAqLworKwljYXNlIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU46IHJldHVybiAicHRfQlIiOworKwl9CisrICAgICAgcmV0dXJuICJwdCI7CisrICAgIGNhc2UgTEFOR19QVU5KQUJJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19QVU5KQUJJX0lORElBOiByZXR1cm4gInBhX0lOIjsgLyogR3VybXVraGkgc2NyaXB0ICovCisrCWNhc2UgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOOiByZXR1cm4gInBhX1BLIjsgLyogQXJhYmljIHNjcmlwdCAqLworKwl9CisrICAgICAgcmV0dXJuICJwYSI7CisrICAgIGNhc2UgTEFOR19SSEFFVE9fUk9NQU5DRTogcmV0dXJuICJybV9DSCI7CisrICAgIGNhc2UgTEFOR19ST01BTklBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfUk9NQU5JQU5fUk9NQU5JQTogcmV0dXJuICJyb19STyI7CisrCWNhc2UgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBOiByZXR1cm4gInJvX01EIjsKKysJfQorKyAgICAgIHJldHVybiAicm8iOworKyAgICBjYXNlIExBTkdfUlVTU0lBTjoKKysgICAgICByZXR1cm4gInJ1IjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAicnVfUlUiIG9yICJydV9VQSIgb3IgInJ1X01EIi4gICovCisrICAgIGNhc2UgTEFOR19TQUFNSTogLyogYWN0dWFsbHkgTm9ydGhlcm4gU2FtaSAqLyByZXR1cm4gInNlX05PIjsKKysgICAgY2FzZSBMQU5HX1NBTlNLUklUOiByZXR1cm4gInNhX0lOIjsKKysgICAgY2FzZSBMQU5HX1NJTkRISToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfU0lOREhJX0lORElBOiByZXR1cm4gInNkX0lOIjsKKysJY2FzZSBTVUJMQU5HX1NJTkRISV9QQUtJU1RBTjogcmV0dXJuICJzZF9QSyI7CisrCX0KKysgICAgICByZXR1cm4gInNkIjsKKysgICAgY2FzZSBMQU5HX1NJTkhBTEVTRTogcmV0dXJuICJzaV9MSyI7CisrICAgIGNhc2UgTEFOR19TTE9WQUs6IHJldHVybiAic2tfU0siOworKyAgICBjYXNlIExBTkdfU0xPVkVOSUFOOiByZXR1cm4gInNsX1NJIjsKKysgICAgY2FzZSBMQU5HX1NPTUFMSTogcmV0dXJuICJzb19TTyI7CisrICAgIGNhc2UgTEFOR19TT1JCSUFOOgorKyAgICAgIC8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIHN1Y2ggbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrICAgICAgcmV0dXJuICJ3ZW5fREUiOworKyAgICBjYXNlIExBTkdfU1BBTklTSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfU1BBTklTSDogcmV0dXJuICJlc19FUyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX01FWElDQU46IHJldHVybiAiZXNfTVgiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9NT0RFUk46CisrCSAgcmV0dXJuICJlc19FU0Btb2Rlcm4iOwkvKiBub3Qgc2VlbiBvbiBVbml4ICovCisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQTogcmV0dXJuICJlc19HVCI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0E6IHJldHVybiAiZXNfQ1IiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QQU5BTUE6IHJldHVybiAiZXNfUEEiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9ET01JTklDQU5fUkVQVUJMSUM6IHJldHVybiAiZXNfRE8iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEE6IHJldHVybiAiZXNfVkUiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT0xPTUJJQTogcmV0dXJuICJlc19DTyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1BFUlU6IHJldHVybiAiZXNfUEUiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkE6IHJldHVybiAiZXNfQVIiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SOiByZXR1cm4gImVzX0VDIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQ0hJTEU6IHJldHVybiAiZXNfQ0wiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9VUlVHVUFZOiByZXR1cm4gImVzX1VZIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVk6IHJldHVybiAiZXNfUFkiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9CT0xJVklBOiByZXR1cm4gImVzX0JPIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1I6IHJldHVybiAiZXNfU1YiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9IT05EVVJBUzogcmV0dXJuICJlc19ITiI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQTogcmV0dXJuICJlc19OSSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1BVRVJUT19SSUNPOiByZXR1cm4gImVzX1BSIjsKKysJfQorKyAgICAgIHJldHVybiAiZXMiOworKyAgICBjYXNlIExBTkdfU1VUVTogcmV0dXJuICJibnRfVFoiOyAvKiBvciAic3RfTFMiIG9yICJuc29fWkEiPyAqLworKyAgICBjYXNlIExBTkdfU1dBSElMSTogcmV0dXJuICJzd19LRSI7CisrICAgIGNhc2UgTEFOR19TV0VESVNIOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gInN2X1NFIjsKKysJY2FzZSBTVUJMQU5HX1NXRURJU0hfRklOTEFORDogcmV0dXJuICJzdl9GSSI7CisrCX0KKysgICAgICByZXR1cm4gInN2IjsKKysgICAgY2FzZSBMQU5HX1NZUklBQzogcmV0dXJuICJzeXJfVFIiOyAvKiBBbiBleHRpbmN0IGxhbmd1YWdlLiAgKi8KKysgICAgY2FzZSBMQU5HX1RBR0FMT0c6IHJldHVybiAidGxfUEgiOworKyAgICBjYXNlIExBTkdfVEFKSUs6IHJldHVybiAidGdfVEoiOworKyAgICBjYXNlIExBTkdfVEFNQVpJR0hUOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCS8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIFRhbWF6aWdodCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysJY2FzZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUM6IHJldHVybiAiYmVyX01BQGFyYWJpYyI7CisrCWNhc2UgU1VCTEFOR19UQU1BWklHSFRfTEFUSU46IHJldHVybiAiYmVyX01BQGxhdGluIjsKKysJfQorKyAgICAgIHJldHVybiAiYmVyX01BIjsKKysgICAgY2FzZSBMQU5HX1RBTUlMOgorKyAgICAgIHJldHVybiAidGEiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJ0YV9JTiIgb3IgInRhX0xLIiBvciAidGFfU0ciLiAgKi8KKysgICAgY2FzZSBMQU5HX1RBVEFSOiByZXR1cm4gInR0X1JVIjsKKysgICAgY2FzZSBMQU5HX1RFTFVHVTogcmV0dXJuICJ0ZV9JTiI7CisrICAgIGNhc2UgTEFOR19USEFJOiByZXR1cm4gInRoX1RIIjsKKysgICAgY2FzZSBMQU5HX1RJQkVUQU46IHJldHVybiAiYm9fQ04iOworKyAgICBjYXNlIExBTkdfVElHUklOWUE6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1RJR1JJTllBX0VUSElPUElBOiByZXR1cm4gInRpX0VUIjsKKysJY2FzZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUE6IHJldHVybiAidGlfRVIiOworKwl9CisrICAgICAgcmV0dXJuICJ0aSI7CisrICAgIGNhc2UgTEFOR19UU09OR0E6IHJldHVybiAidHNfWkEiOworKyAgICBjYXNlIExBTkdfVFNXQU5BOiByZXR1cm4gInRuX0JXIjsKKysgICAgY2FzZSBMQU5HX1RVUktJU0g6IHJldHVybiAidHJfVFIiOworKyAgICBjYXNlIExBTkdfVFVSS01FTjogcmV0dXJuICJ0a19UTSI7CisrICAgIGNhc2UgTEFOR19VS1JBSU5JQU46IHJldHVybiAidWtfVUEiOworKyAgICBjYXNlIExBTkdfVVJEVToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfVVJEVV9QQUtJU1RBTjogcmV0dXJuICJ1cl9QSyI7CisrCWNhc2UgU1VCTEFOR19VUkRVX0lORElBOiByZXR1cm4gInVyX0lOIjsKKysJfQorKyAgICAgIHJldHVybiAidXIiOworKyAgICBjYXNlIExBTkdfVVpCRUs6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1VaQkVLX0xBVElOOiByZXR1cm4gInV6X1VaIjsKKysJY2FzZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDOiByZXR1cm4gInV6X1VaQGN5cmlsbGljIjsKKysJfQorKyAgICAgIHJldHVybiAidXoiOworKyAgICBjYXNlIExBTkdfVkVOREE6IHJldHVybiAidmVfWkEiOworKyAgICBjYXNlIExBTkdfVklFVE5BTUVTRTogcmV0dXJuICJ2aV9WTiI7CisrICAgIGNhc2UgTEFOR19XRUxTSDogcmV0dXJuICJjeV9HQiI7CisrICAgIGNhc2UgTEFOR19YSE9TQTogcmV0dXJuICJ4aF9aQSI7CisrICAgIGNhc2UgTEFOR19ZSTogcmV0dXJuICJzaXRfQ04iOworKyAgICBjYXNlIExBTkdfWUlERElTSDogcmV0dXJuICJ5aV9JTCI7CisrICAgIGNhc2UgTEFOR19ZT1JVQkE6IHJldHVybiAieW9fTkciOworKyAgICBjYXNlIExBTkdfWlVMVTogcmV0dXJuICJ6dV9aQSI7CisrICAgIGRlZmF1bHQ6IHJldHVybiAiQyI7CisrICAgIH0KKysKKysjZW5kaWYKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9nLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9nLmMJMjAwNC0wOS0xMiAxNDo0MDozNC41MTU3MjM3NjggLTA0MDAKK0BAIC0wLDAgKzEsOTggQEAKKysvKiBMb2cgZmlsZSBvdXRwdXQuCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrLyogUHJpbnQgYW4gQVNDSUkgc3RyaW5nIHdpdGggcXVvdGVzIGFuZCBlc2NhcGUgc2VxdWVuY2VzIHdoZXJlIG5lZWRlZC4gICovCisrc3RhdGljIHZvaWQKKytwcmludF9lc2NhcGVkIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0cikKKyt7CisrICBwdXRjICgnIicsIHN0cmVhbSk7CisrICBmb3IgKDsgKnN0ciAhPSAnXDAnOyBzdHIrKykKKysgICAgaWYgKCpzdHIgPT0gJ1xuJykKKysgICAgICB7CisrCWZwdXRzICgiXFxuXCIiLCBzdHJlYW0pOworKwlpZiAoc3RyWzFdID09ICdcMCcpCisrCSAgcmV0dXJuOworKwlmcHV0cyAoIlxuXCIiLCBzdHJlYW0pOworKyAgICAgIH0KKysgICAgZWxzZQorKyAgICAgIHsKKysJaWYgKCpzdHIgPT0gJyInIHx8ICpzdHIgPT0gJ1xcJykKKysJICBwdXRjICgnXFwnLCBzdHJlYW0pOworKwlwdXRjICgqc3RyLCBzdHJlYW0pOworKyAgICAgIH0KKysgIHB1dGMgKCciJywgc3RyZWFtKTsKKyt9CisrCisrLyogQWRkIHRvIHRoZSBsb2cgZmlsZSBhbiBlbnRyeSBkZW5vdGluZyBhIGZhaWxlZCB0cmFuc2xhdGlvbi4gICovCisrdm9pZAorK19ubF9sb2dfdW50cmFuc2xhdGVkIChjb25zdCBjaGFyICpsb2dmaWxlbmFtZSwgY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCSAgICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCBpbnQgcGx1cmFsKQorK3sKKysgIHN0YXRpYyBjaGFyICpsYXN0X2xvZ2ZpbGVuYW1lID0gTlVMTDsKKysgIHN0YXRpYyBGSUxFICpsYXN0X2xvZ2ZpbGUgPSBOVUxMOworKyAgRklMRSAqbG9nZmlsZTsKKysKKysgIC8qIENhbiB3ZSByZXVzZSB0aGUgbGFzdCBvcGVuZWQgbG9nZmlsZT8gICovCisrICBpZiAobGFzdF9sb2dmaWxlbmFtZSA9PSBOVUxMIHx8IHN0cmNtcCAobG9nZmlsZW5hbWUsIGxhc3RfbG9nZmlsZW5hbWUpICE9IDApCisrICAgIHsKKysgICAgICAvKiBDbG9zZSB0aGUgbGFzdCB1c2VkIGxvZ2ZpbGUuICAqLworKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lICE9IE5VTEwpCisrCXsKKysJICBpZiAobGFzdF9sb2dmaWxlICE9IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGZjbG9zZSAobGFzdF9sb2dmaWxlKTsKKysJICAgICAgbGFzdF9sb2dmaWxlID0gTlVMTDsKKysJICAgIH0KKysJICBmcmVlIChsYXN0X2xvZ2ZpbGVuYW1lKTsKKysJICBsYXN0X2xvZ2ZpbGVuYW1lID0gTlVMTDsKKysJfQorKyAgICAgIC8qIE9wZW4gdGhlIGxvZ2ZpbGUuICAqLworKyAgICAgIGxhc3RfbG9nZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAobG9nZmlsZW5hbWUpICsgMSk7CisrICAgICAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgPT0gTlVMTCkKKysJcmV0dXJuOworKyAgICAgIHN0cmNweSAobGFzdF9sb2dmaWxlbmFtZSwgbG9nZmlsZW5hbWUpOworKyAgICAgIGxhc3RfbG9nZmlsZSA9IGZvcGVuIChsb2dmaWxlbmFtZSwgImEiKTsKKysgICAgICBpZiAobGFzdF9sb2dmaWxlID09IE5VTEwpCisrCXJldHVybjsKKysgICAgfQorKyAgbG9nZmlsZSA9IGxhc3RfbG9nZmlsZTsKKysKKysgIGZwcmludGYgKGxvZ2ZpbGUsICJkb21haW4gIik7CisrICBwcmludF9lc2NhcGVkIChsb2dmaWxlLCBkb21haW5uYW1lKTsKKysgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ2lkICIpOworKyAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgbXNnaWQxKTsKKysgIGlmIChwbHVyYWwpCisrICAgIHsKKysgICAgICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZF9wbHVyYWwgIik7CisrICAgICAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgbXNnaWQyKTsKKysgICAgICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dzdHJbMF0gXCJcIlxuIik7CisrICAgIH0KKysgIGVsc2UKKysgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnc3RyIFwiXCJcbiIpOworKyAgcHV0YyAoJ1xuJywgbG9nZmlsZSk7CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL01ha2VmaWxlLmluCTE5OTgtMDQtMjYgMDk6MjI6MzUuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL01ha2VmaWxlLmluCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTIxNzIyODU2IC0wNDAwCitAQCAtMSwxOSArMSwyMCBAQAorLSMgTWFrZWZpbGUgZm9yIGRpcmVjdG9yeSB3aXRoIG1lc3NhZ2UgY2F0YWxvZyBoYW5kbGluZyBpbiBHTlUgTkxTIFV0aWxpdGllcy4KKy0jIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgbGlicmFyeSBvZiBHTlUgZ2V0dGV4dAorKyMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrIyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAjCisgIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjIFVTQS4KKyAKKyBQQUNLQUdFID0gQFBBQ0tBR0VACisgVkVSU0lPTiA9IEBWRVJTSU9OQAorQEAgLTIzLDExOCArMjQsMzQxIEBACisgc3JjZGlyID0gQHNyY2RpckAKKyB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisgdG9wX2J1aWxkZGlyID0gLi4KKy1WUEFUSCA9IEBzcmNkaXJACisrI1ZQQVRIID0gJChzcmNkaXIpCisgCisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKKyB0cmFuc2Zvcm0gPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKKy1saWJkaXIgPSAkKGV4ZWNfcHJlZml4KS9saWIKKy1pbmNsdWRlZGlyID0gJChwcmVmaXgpL2luY2x1ZGUKKy1kYXRhZGlyID0gJChwcmVmaXgpL0BEQVRBRElSTkFNRUAKKytsaWJkaXIgPSBAbGliZGlyQAorK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKKytkYXRhZGlyID0gQGRhdGFkaXJACisgbG9jYWxlZGlyID0gJChkYXRhZGlyKS9sb2NhbGUKKy1nbnVsb2NhbGVkaXIgPSAkKHByZWZpeCkvc2hhcmUvbG9jYWxlCistZ2V0dGV4dHNyY2RpciA9IEBkYXRhZGlyQC9nZXR0ZXh0L2ludGwKKy1hbGlhc3BhdGggPSAkKGxvY2FsZWRpcik6LgorK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvaW50bAorK2FsaWFzcGF0aCA9ICQobG9jYWxlZGlyKQorIHN1YmRpciA9IGludGwKKyAKKyBJTlNUQUxMID0gQElOU1RBTExACisgSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKyBNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACisrbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQoTUtJTlNUQUxMRElSUykKKyAKKy1sID0gQGxACisrbCA9IEBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWEAKKyAKKyBBUiA9IGFyCisgQ0MgPSBAQ0NACisgTElCVE9PTCA9IEBMSUJUT09MQAorIFJBTkxJQiA9IEBSQU5MSUJACisrWUFDQyA9IEBJTlRMQklTT05AIC15IC1kCisrWUZMQUdTID0gLS1uYW1lLXByZWZpeD1fX2dldHRleHQKKyAKKy1ERUZTID0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIiAtREdOVUxPQ0FMRURJUj1cIiQoZ251bG9jYWxlZGlyKVwiIFwKKy0tRExPQ0FMRV9BTElBU19QQVRIPVwiJChhbGlhc3BhdGgpXCIgQERFRlNACisrREVGUyA9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgLURMT0NBTEVfQUxJQVNfUEFUSD1cIiQoYWxpYXNwYXRoKVwiIFwKKystRExJQkRJUj1cIiQobGliZGlyKVwiIC1ESU5fTElCSU5UTCBcCisrLURFTkFCTEVfUkVMT0NBVEFCTEU9MSAtRElOX0xJQlJBUlkgLURJTlNUQUxMRElSPVwiJChsaWJkaXIpXCIgLUROT19YTUFMTE9DIFwKKystRHNldF9yZWxvY2F0aW9uX3ByZWZpeD1saWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBcCisrLURyZWxvY2F0ZT1saWJpbnRsX3JlbG9jYXRlIFwKKystRERFUEVORFNfT05fTElCSUNPTlY9MSBAREVGU0AKKyBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKKyBDRkxBR1MgPSBAQ0ZMQUdTQAorIExERkxBR1MgPSBATERGTEFHU0AKKytMSUJTID0gQExJQlNACisgCisgQ09NUElMRSA9ICQoQ0MpIC1jICQoREVGUykgJChJTkNMVURFUykgJChDUFBGTEFHUykgJChDRkxBR1MpICQoWENGTEFHUykKKyAKKy1IRUFERVJTID0gJChDT01IRFJTKSBsaWJnZXR0ZXh0LmggbG9hZGluZm8uaAorLUNPTUhEUlMgPSBnZXR0ZXh0LmggZ2V0dGV4dFAuaCBoYXNoLXN0cmluZy5oCistU09VUkNFUyA9ICQoQ09NU1JDUykgaW50bC1jb21wYXQuYyBjYXQtY29tcGF0LmMKKy1DT01TUkNTID0gYmluZHRleHRkb20uYyBkY2dldHRleHQuYyBkZ2V0dGV4dC5jIGdldHRleHQuYyBcCistZmluZGRvbWFpbi5jIGxvYWRtc2djYXQuYyBsb2NhbGVhbGlhcy5jIHRleHRkb21haW4uYyBsMTBuZmxpc3QuYyBcCistZXhwbG9kZW5hbWUuYworLU9CSkVDVFMgPSBASU5UTE9CSlNAIGJpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBnZXR0ZXh0LiRsbyBcCistZmluZGRvbWFpbi4kbG8gbG9hZG1zZ2NhdC4kbG8gbG9jYWxlYWxpYXMuJGxvIHRleHRkb21haW4uJGxvIGwxMG5mbGlzdC4kbG8gXAorLWV4cGxvZGVuYW1lLiRsbworLUNBVE9CSlMgPSBjYXQtY29tcGF0LiRsbyAuLi9wby9jYXQtaWQtdGJsLiRsbworLUdFVFRPQkpTID0gaW50bC1jb21wYXQuJGxvCistRElTVEZJTEVTLmNvbW1vbiA9IENoYW5nZUxvZyBNYWtlZmlsZS5pbiBsaW51eC1tc2cuc2VkIHBvMnRibC5zZWQuaW4gXAorLXhvcGVuLW1zZy5zZWQgJChIRUFERVJTKSAkKFNPVVJDRVMpCisrSEVBREVSUyA9IFwKKysgIGdtby5oIFwKKysgIGdldHRleHRQLmggXAorKyAgaGFzaC1zdHJpbmcuaCBcCisrICBsb2FkaW5mby5oIFwKKysgIHBsdXJhbC1leHAuaCBcCisrICBldmFsLXBsdXJhbC5oIFwKKysgIGxvY2FsY2hhcnNldC5oIFwKKysgIHJlbG9jYXRhYmxlLmggXAorKyAgeHNpemUuaCBcCisrICBwcmludGYtYXJncy5oIHByaW50Zi1hcmdzLmMgXAorKyAgcHJpbnRmLXBhcnNlLmggd3ByaW50Zi1wYXJzZS5oIHByaW50Zi1wYXJzZS5jIFwKKysgIHZhc25wcmludGYuaCB2YXNud3ByaW50Zi5oIHZhc25wcmludGYuYyBcCisrICBvczJjb21wYXQuaCBcCisrICBsaWJnbnVpbnRsLmguaW4KKytTT1VSQ0VTID0gXAorKyAgYmluZHRleHRkb20uYyBcCisrICBkY2dldHRleHQuYyBcCisrICBkZ2V0dGV4dC5jIFwKKysgIGdldHRleHQuYyBcCisrICBmaW5kZG9tYWluLmMgXAorKyAgbG9hZG1zZ2NhdC5jIFwKKysgIGxvY2FsZWFsaWFzLmMgXAorKyAgdGV4dGRvbWFpbi5jIFwKKysgIGwxMG5mbGlzdC5jIFwKKysgIGV4cGxvZGVuYW1lLmMgXAorKyAgZGNpZ2V0dGV4dC5jIFwKKysgIGRjbmdldHRleHQuYyBcCisrICBkbmdldHRleHQuYyBcCisrICBuZ2V0dGV4dC5jIFwKKysgIHBsdXJhbC55IFwKKysgIHBsdXJhbC1leHAuYyBcCisrICBsb2NhbGNoYXJzZXQuYyBcCisrICByZWxvY2F0YWJsZS5jIFwKKysgIGxvY2FsZW5hbWUuYyBcCisrICBsb2cuYyBcCisrICBwcmludGYuYyBcCisrICBvc2RlcC5jIFwKKysgIG9zMmNvbXBhdC5jIFwKKysgIGludGwtY29tcGF0LmMKKytPQkpFQ1RTID0gXAorKyAgYmluZHRleHRkb20uJGxvIFwKKysgIGRjZ2V0dGV4dC4kbG8gXAorKyAgZGdldHRleHQuJGxvIFwKKysgIGdldHRleHQuJGxvIFwKKysgIGZpbmRkb21haW4uJGxvIFwKKysgIGxvYWRtc2djYXQuJGxvIFwKKysgIGxvY2FsZWFsaWFzLiRsbyBcCisrICB0ZXh0ZG9tYWluLiRsbyBcCisrICBsMTBuZmxpc3QuJGxvIFwKKysgIGV4cGxvZGVuYW1lLiRsbyBcCisrICBkY2lnZXR0ZXh0LiRsbyBcCisrICBkY25nZXR0ZXh0LiRsbyBcCisrICBkbmdldHRleHQuJGxvIFwKKysgIG5nZXR0ZXh0LiRsbyBcCisrICBwbHVyYWwuJGxvIFwKKysgIHBsdXJhbC1leHAuJGxvIFwKKysgIGxvY2FsY2hhcnNldC4kbG8gXAorKyAgcmVsb2NhdGFibGUuJGxvIFwKKysgIGxvY2FsZW5hbWUuJGxvIFwKKysgIGxvZy4kbG8gXAorKyAgcHJpbnRmLiRsbyBcCisrICBvc2RlcC4kbG8gXAorKyAgaW50bC1jb21wYXQuJGxvCisrRElTVEZJTEVTLmNvbW1vbiA9IE1ha2VmaWxlLmluIFwKKytjb25maWcuY2hhcnNldCBsb2NhbGUuYWxpYXMgcmVmLWFkZC5zaW4gcmVmLWRlbC5zaW4gJChIRUFERVJTKSAkKFNPVVJDRVMpCisrRElTVEZJTEVTLmdlbmVyYXRlZCA9IHBsdXJhbC5jCisgRElTVEZJTEVTLm5vcm1hbCA9IFZFUlNJT04KKy1ESVNURklMRVMuZ2V0dGV4dCA9IGxpYmludGwuZ2xpYmMgaW50bGguaW5zdC5pbgorK0RJU1RGSUxFUy5nZXR0ZXh0ID0gQ09QWUlORy5MSUItMi4wIENPUFlJTkcuTElCLTIuMSBsaWJpbnRsLmdsaWJjIFwKKytsaWJnbnVpbnRsLmhfdm1zIE1ha2VmaWxlLnZtcyBcCisrbGliZ251aW50bC5oLm1zdmMtc3RhdGljIGxpYmdudWludGwuaC5tc3ZjLXNoYXJlZCBSRUFETUUud29lMzIgTWFrZWZpbGUubXN2YworK0RJU1RGSUxFUy5vYnNvbGV0ZSA9IHhvcGVuLW1zZy5zZWQgbGludXgtbXNnLnNlZCBwbzJ0Ymwuc2VkLmluIGNhdC1jb21wYXQuYyBcCisrQ09QWUlORy5MSUItMiBnZXR0ZXh0LmggbGliZ2V0dGV4dC5oIHBsdXJhbC1ldmFsLmMgbGliZ251aW50bC5oCisrCisrYWxsOiBhbGwtQFVTRV9JTkNMVURFRF9MSUJJTlRMQAorK2FsbC15ZXM6IGxpYmludGwuJGxhIGxpYmludGwuaCBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIHJlZi1kZWwuc2VkCisrYWxsLW5vOiBhbGwtbm8tQEJVSUxEX0lOQ0xVREVEX0xJQklOVExACisrYWxsLW5vLXllczogbGliZ251aW50bC4kbGEKKythbGwtbm8tbm86CisrCisrbGliaW50bC5hIGxpYmdudWludGwuYTogJChPQkpFQ1RTKQorKwlybSAtZiAkQAorKwkkKEFSKSBjcnUgJEAgJChPQkpFQ1RTKQorKwkkKFJBTkxJQikgJEAKKysKKytsaWJpbnRsLmxhIGxpYmdudWludGwubGE6ICQoT0JKRUNUUykKKysJJChMSUJUT09MKSAtLW1vZGU9bGluayBcCisrCSAgJChDQykgJChDUFBGTEFHUykgJChDRkxBR1MpICQoWENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBcCisrCSAgJChPQkpFQ1RTKSBATFRMSUJJQ09OVkAgJChMSUJTKSAtbGMgXAorKwkgIC12ZXJzaW9uLWluZm8gJChMVFZfQ1VSUkVOVCk6JChMVFZfUkVWSVNJT04pOiQoTFRWX0FHRSkgXAorKwkgIC1ycGF0aCAkKGxpYmRpcikgXAorKwkgIC1uby11bmRlZmluZWQKKysKKysjIExpYnRvb2wncyBsaWJyYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIGxpYmludGwuCisrIyBCZWZvcmUgbWFraW5nIGEgZ2V0dGV4dCByZWxlYXNlLCB0aGUgZ2V0dGV4dCBtYWludGFpbmVyIG11c3QgY2hhbmdlIHRoaXMKKysjIGFjY29yZGluZyB0byB0aGUgbGlidG9vbCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICJMaWJyYXJ5IGludGVyZmFjZSB2ZXJzaW9ucyIuCisrIyBNYWludGFpbmVycyBvZiBvdGhlciBwYWNrYWdlcyB0aGF0IGluY2x1ZGUgdGhlIGludGwgZGlyZWN0b3J5IG11c3QgKm5vdCoKKysjIGNoYW5nZSB0aGVzZSB2YWx1ZXMuCisrTFRWX0NVUlJFTlQ9NworK0xUVl9SRVZJU0lPTj0wCisrTFRWX0FHRT00CisgCisgLlNVRkZJWEVTOgorLS5TVUZGSVhFUzogLmMgLm8gLmxvCisrLlNVRkZJWEVTOiAuYyAueSAubyAubG8gLnNpbiAuc2VkCisrCisgLmMubzoKKyAJJChDT01QSUxFKSAkPAorLS5jLmxvOgorLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJDwKKyAKKy1JTkNMVURFUyA9IC1JLi4gLUkuIC1JJCh0b3Bfc3JjZGlyKS9pbnRsIC1JJCh0b3Bfc3JjZGlyKS9saWIKKysueS5jOgorKwkkKFlBQ0MpICQoWUZMQUdTKSAtLW91dHB1dCAkQCAkPAorKwlybSAtZiAkKi5oCisgCistYWxsOiBhbGwtQFVTRV9JTkNMVURFRF9MSUJJTlRMQAorK2JpbmR0ZXh0ZG9tLmxvOiAkKHNyY2RpcikvYmluZHRleHRkb20uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2JpbmR0ZXh0ZG9tLmMKKytkY2dldHRleHQubG86ICQoc3JjZGlyKS9kY2dldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjZ2V0dGV4dC5jCisrZGdldHRleHQubG86ICQoc3JjZGlyKS9kZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGdldHRleHQuYworK2dldHRleHQubG86ICQoc3JjZGlyKS9nZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9nZXR0ZXh0LmMKKytmaW5kZG9tYWluLmxvOiAkKHNyY2RpcikvZmluZGRvbWFpbi5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZmluZGRvbWFpbi5jCisrbG9hZG1zZ2NhdC5sbzogJChzcmNkaXIpL2xvYWRtc2djYXQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvYWRtc2djYXQuYworK2xvY2FsZWFsaWFzLmxvOiAkKHNyY2RpcikvbG9jYWxlYWxpYXMuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvY2FsZWFsaWFzLmMKKyt0ZXh0ZG9tYWluLmxvOiAkKHNyY2RpcikvdGV4dGRvbWFpbi5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvdGV4dGRvbWFpbi5jCisrbDEwbmZsaXN0LmxvOiAkKHNyY2RpcikvbDEwbmZsaXN0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sMTBuZmxpc3QuYworK2V4cGxvZGVuYW1lLmxvOiAkKHNyY2RpcikvZXhwbG9kZW5hbWUuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2V4cGxvZGVuYW1lLmMKKytkY2lnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNpZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGNpZ2V0dGV4dC5jCisrZGNuZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjbmdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjbmdldHRleHQuYworK2RuZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RuZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZG5nZXR0ZXh0LmMKKytuZ2V0dGV4dC5sbzogJChzcmNkaXIpL25nZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9uZ2V0dGV4dC5jCisrcGx1cmFsLmxvOiAkKHNyY2RpcikvcGx1cmFsLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9wbHVyYWwuYworK3BsdXJhbC1leHAubG86ICQoc3JjZGlyKS9wbHVyYWwtZXhwLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9wbHVyYWwtZXhwLmMKKytsb2NhbGNoYXJzZXQubG86ICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvY2FsY2hhcnNldC5jCisrcmVsb2NhdGFibGUubG86ICQoc3JjZGlyKS9yZWxvY2F0YWJsZS5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworK2xvY2FsZW5hbWUubG86ICQoc3JjZGlyKS9sb2NhbGVuYW1lLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGVuYW1lLmMKKytsb2cubG86ICQoc3JjZGlyKS9sb2cuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvZy5jCisrcHJpbnRmLmxvOiAkKHNyY2RpcikvcHJpbnRmLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9wcmludGYuYworK29zZGVwLmxvOiAkKHNyY2Rpcikvb3NkZXAuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL29zZGVwLmMKKytpbnRsLWNvbXBhdC5sbzogJChzcmNkaXIpL2ludGwtY29tcGF0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCisgCistYWxsLXllczogbGliaW50bC4kbGEgaW50bGguaW5zdAorLWFsbC1ubzoKKytyZWYtYWRkLnNlZDogJChzcmNkaXIpL3JlZi1hZGQuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvQFBBQ0tBR0VAL2cnICQoc3JjZGlyKS9yZWYtYWRkLnNpbiA+IHQtcmVmLWFkZC5zZWQKKysJbXYgdC1yZWYtYWRkLnNlZCByZWYtYWRkLnNlZAorK3JlZi1kZWwuc2VkOiAkKHNyY2RpcikvcmVmLWRlbC5zaW4KKysJc2VkIC1lICcvXiMvZCcgLWUgJ3MvQCcnUEFDS0FHRScnQC9AUEFDS0FHRUAvZycgJChzcmNkaXIpL3JlZi1kZWwuc2luID4gdC1yZWYtZGVsLnNlZAorKwltdiB0LXJlZi1kZWwuc2VkIHJlZi1kZWwuc2VkCisgCistbGliaW50bC5hOiAkKE9CSkVDVFMpCistCXJtIC1mICRACistCSQoQVIpIGNydSAkQCAkKE9CSkVDVFMpCistCSQoUkFOTElCKSAkQAorK0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JLi4KKyAKKy1saWJpbnRsLmxhOiAkKE9CSkVDVFMpCistCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyAkQCAkKE9CSkVDVFMpIFwKKy0JCSAgIC12ZXJzaW9uLWluZm8gMTowIC1ycGF0aCAkKGxpYmRpcikKKytsaWJnbnVpbnRsLmg6ICQoc3JjZGlyKS9saWJnbnVpbnRsLmguaW4KKysJc2VkIC1lICdzLEAnJ0hBVkVfUE9TSVhfUFJJTlRGJydALEBIQVZFX1BPU0lYX1BSSU5URkAsZycgXAorKwkgICAgLWUgJ3MsQCcnSEFWRV9BU1BSSU5URicnQCxASEFWRV9BU1BSSU5URkAsZycgXAorKwkgICAgLWUgJ3MsQCcnSEFWRV9TTlBSSU5URicnQCxASEFWRV9TTlBSSU5URkAsZycgXAorKwkgICAgLWUgJ3MsQCcnSEFWRV9XUFJJTlRGJydALEBIQVZFX1dQUklOVEZALGcnIFwKKysJICA8ICQoc3JjZGlyKS9saWJnbnVpbnRsLmguaW4gPiBsaWJnbnVpbnRsLmgKKyAKKy0uLi9wby9jYXQtaWQtdGJsLiRsbzogLi4vcG8vY2F0LWlkLXRibC5jICQodG9wX3NyY2RpcikvcG8vJChQQUNLQUdFKS5wb3QKKy0JY2QgLi4vcG8gJiYgJChNQUtFKSBjYXQtaWQtdGJsLiRsbworK2xpYmludGwuaDogbGliZ251aW50bC5oCisrCWNwIGxpYmdudWludGwuaCBsaWJpbnRsLmgKKyAKKy1jaGVjazogYWxsCisrY2hhcnNldC5hbGlhczogJChzcmNkaXIpL2NvbmZpZy5jaGFyc2V0CisrCSQoU0hFTEwpICQoc3JjZGlyKS9jb25maWcuY2hhcnNldCAnQGhvc3RAJyA+IHQtJEAKKysJbXYgdC0kQCAkQAorIAorLSMgVGhpcyBpbnN0YWxsYXRpb24gZ29hbCBpcyBvbmx5IHVzZWQgaW4gR05VIGdldHRleHQuICBQYWNrYWdlcyB3aGljaAorLSMgb25seSB1c2UgdGhlIGxpYnJhcnkgc2hvdWxkIHVzZSBpbnN0YWxsIGluc3RlYWQuCisrY2hlY2s6IGFsbAorIAorICMgV2UgbXVzdCBub3QgaW5zdGFsbCB0aGUgbGliaW50bC5oL2xpYmludGwuYSBmaWxlcyBpZiB3ZSBhcmUgb24gYQorLSMgc3lzdGVtIHdoaWNoIGhhcyB0aGUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGluIGl0cyBDIGxpYnJhcnkgb3IgaW4gYQorLSMgc2VwYXJhdGUgbGlicmFyeSBvciB1c2UgdGhlIGNhdGdldHMgaW50ZXJmYWNlLiAgQSBzcGVjaWFsIGNhc2UgaXMKKy0jIHdoZXJlIGNvbmZpZ3VyZSBmb3VuZCBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIEdOVSBnZXR0ZXh0IGxpYnJhcnkuCisrIyBzeXN0ZW0gd2hpY2ggaGFzIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGluIGl0cyBDIGxpYnJhcnkgb3IgaW4gYQorKyMgc2VwYXJhdGUgbGlicmFyeS4KKyAjIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgb25lIHdoaWNoIGNvbWVzIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZQorICMgcGFja2FnZSwgeW91IGhhdmUgdG8gdXNlIGBjb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQnLgorIGluc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKKyBpbnN0YWxsLWV4ZWM6IGFsbAorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0IiBcCistCSAgICYmIHRlc3QgJ0BJTlRMT0JKU0AnID0gJyQoR0VUVE9CSlMpJzsgdGhlbiBcCistCSAgaWYgdGVzdCAtciAkKE1LSU5TVEFMTERJUlMpOyB0aGVuIFwKKy0JICAgICQoTUtJTlNUQUxMRElSUykgJChsaWJkaXIpICQoaW5jbHVkZWRpcik7IFwKKy0JICBlbHNlIFwKKy0JICAgICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKTsgXAorKwlpZiB7IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IH0gXAorKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpIGxpYmludGwuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9saWJpbnRsLmg7IFwKKysJICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLiRsYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCisrCSAgaWYgdGVzdCAiQFJFTE9DQVRBQkxFQCIgPSB5ZXM7IHRoZW4gXAorKwkgICAgZGVwZW5kZW5jaWVzPWBzZWQgLW4gLWUgJ3MsXmRlcGVuZGVuY3lfbGlicz1cKC4qXCksXDEscCcgPCAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGEgfCBzZWQgLWUgInMsXicsLCIgLWUgInMsJ1wkJCwsImA7IFwKKysJICAgIGlmIHRlc3QgLW4gIiQkZGVwZW5kZW5jaWVzIjsgdGhlbiBcCisrCSAgICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC5sYTsgXAorKwkgICAgZmk7IFwKKyAJICBmaTsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBpbnRsaC5pbnN0ICQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCistCSAgJChJTlNUQUxMX0RBVEEpIGxpYmludGwuYSAkKGxpYmRpcikvbGliaW50bC5hOyBcCisgCWVsc2UgXAorIAkgIDogOyBcCisgCWZpCistaW5zdGFsbC1kYXRhOiBhbGwKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gXAorLQkgIGlmIHRlc3QgLXIgJChNS0lOU1RBTExESVJTKTsgdGhlbiBcCistCSAgICAkKE1LSU5TVEFMTERJUlMpICQoZ2V0dGV4dHNyY2Rpcik7IFwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IG5vOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKysJICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSBsaWJnbnVpbnRsLiRsYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuJGxhOyBcCisrCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC5zbyAkKERFU1RESVIpJChsaWJkaXIpL3ByZWxvYWRhYmxlX2xpYmludGwuc287IFwKKysJICAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgXAorKwkgICAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgdGVzdCBAR0xJQkMyMUAgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgdGVtcD0kKERFU1RESVIpJChsaWJkaXIpL3QtY2hhcnNldC5hbGlhczsgXAorKwkgIGRlc3Q9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisrCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IHRoZW4gXAorKwkgICAgb3JpZz0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKysJICAgIHNlZCAtZiByZWYtYWRkLnNlZCAkJG9yaWcgPiAkJHRlbXA7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgICBybSAtZiAkJHRlbXA7IFwKKyAJICBlbHNlIFwKKy0JICAgICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGdldHRleHRzcmNkaXIpOyBcCisrCSAgICBpZiB0ZXN0IEBHTElCQzIxQCA9IG5vOyB0aGVuIFwKKysJICAgICAgb3JpZz1jaGFyc2V0LmFsaWFzOyBcCisrCSAgICAgIHNlZCAtZiByZWYtYWRkLnNlZCAkJG9yaWcgPiAkJHRlbXA7IFwKKysJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICAgICAgcm0gLWYgJCR0ZW1wOyBcCisrCSAgICBmaTsgXAorIAkgIGZpOyBcCistCSAgJChJTlNUQUxMX0RBVEEpIFZFUlNJT04gJChnZXR0ZXh0c3JjZGlyKS9WRVJTSU9OOyBcCistCSAgZGlzdHM9IiQoRElTVEZJTEVTLmNvbW1vbikiOyBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsb2NhbGVkaXIpOyBcCisrCSAgdGVzdCAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhcyBcCisrCSAgICAmJiBvcmlnPSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzIFwKKysJICAgIHx8IG9yaWc9JChzcmNkaXIpL2xvY2FsZS5hbGlhczsgXAorKwkgIHRlbXA9JChERVNURElSKSQobG9jYWxlZGlyKS90LWxvY2FsZS5hbGlhczsgXAorKwkgIGRlc3Q9JChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IFwKKysJICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICBybSAtZiAkJHRlbXA7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKytpbnN0YWxsLWRhdGE6IGFsbAorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSBWRVJTSU9OICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL1ZFUlNJT047IFwKKysJICAkKElOU1RBTExfREFUQSkgQ2hhbmdlTG9nLmluc3QgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvQ2hhbmdlTG9nOyBcCisrCSAgZGlzdHM9IkNPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgJChESVNURklMRVMuY29tbW9uKSI7IFwKKyAJICBmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCistCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkZmlsZSAkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAorKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKyAJICBkb25lOyBcCisrCSAgY2htb2QgYSt4ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL2NvbmZpZy5jaGFyc2V0OyBcCisrCSAgZGlzdHM9IiQoRElTVEZJTEVTLmdlbmVyYXRlZCkiOyBcCisrCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkJGRpci8kJGZpbGUgXAorKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKysJICBkb25lOyBcCisrCSAgZGlzdHM9IiQoRElTVEZJTEVTLm9ic29sZXRlKSI7IFwKKysJICBmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCisrCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKysJICBkb25lOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCisraW5zdGFsbC1zdHJpcDogaW5zdGFsbAorKworK2luc3RhbGxkaXJzOgorKwlpZiB7IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IH0gXAorKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICB0ZXN0IEBHTElCQzIxQCAhPSBubyB8fCAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxvY2FsZWRpcik7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKyAJZWxzZSBcCisgCSAgOiA7IFwKKyAJZmkKK0BAIC0xNDMsMjIgKzM2Nyw3NiBAQAorIGluc3RhbGxjaGVjazoKKyAKKyB1bmluc3RhbGw6CistCWRpc3RzPSIkKERJU1RGSUxFUy5jb21tb24pIjsgXAorLQlmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCistCSAgcm0gLWYgJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKy0JZG9uZQorKwlpZiB7IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IH0gXAorKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgcm0gLWYgJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKysJICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC4kbGE7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IG5vOyB0aGVuIFwKKysJICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL3ByZWxvYWRhYmxlX2xpYmludGwuc287IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyB0aGVuIFwKKysJICAgIHRlbXA9JChERVNURElSKSQobGliZGlyKS90LWNoYXJzZXQuYWxpYXM7IFwKKysJICAgIGRlc3Q9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWRlbC5zZWQgJCRkZXN0ID4gJCR0ZW1wOyBcCisrCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorKwkgICAgICBybSAtZiAkJGRlc3Q7IFwKKysJICAgIGVsc2UgXAorKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgZmk7IFwKKysJICAgIHJtIC1mICQkdGVtcDsgXAorKwkgIGZpOyBcCisrCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhczsgdGhlbiBcCisrCSAgICB0ZW1wPSQoREVTVERJUikkKGxvY2FsZWRpcikvdC1sb2NhbGUuYWxpYXM7IFwKKysJICAgIGRlc3Q9JChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IFwKKysJICAgIHNlZCAtZiByZWYtZGVsLnNlZCAkJGRlc3QgPiAkJHRlbXA7IFwKKysJICAgIGlmIGdyZXAgJ14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogJCQnICQkdGVtcCA+IC9kZXYvbnVsbDsgdGhlbiBcCisrCSAgICAgIHJtIC1mICQkZGVzdDsgXAorKwkgICAgZWxzZSBcCisrCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgICBmaTsgXAorKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisrCSAgZmk7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgIGZvciBmaWxlIGluIFZFUlNJT04gQ2hhbmdlTG9nIENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpOyBkbyBcCisrCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKysJICBkb25lOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisgCistaW5mbyBkdmk6CisraW5mbyBkdmkgcHMgcGRmIGh0bWw6CisgCistJChPQkpFQ1RTKTogLi4vY29uZmlnLmggbGliZ2V0dGV4dC5oCistYmluZHRleHRkb20uJGxvIGZpbmRkb21haW4uJGxvIGxvYWRtc2djYXQuJGxvOiBnZXR0ZXh0UC5oIGdldHRleHQuaCBsb2FkaW5mby5oCistZGNnZXR0ZXh0LiRsbzogZ2V0dGV4dFAuaCBnZXR0ZXh0LmggaGFzaC1zdHJpbmcuaCBsb2FkaW5mby5oCisrJChPQkpFQ1RTKTogLi4vY29uZmlnLmggbGliZ251aW50bC5oCisrYmluZHRleHRkb20uJGxvIGRjZ2V0dGV4dC4kbG8gZGNpZ2V0dGV4dC4kbG8gZGNuZ2V0dGV4dC4kbG8gZGdldHRleHQuJGxvIGRuZ2V0dGV4dC4kbG8gZmluZGRvbWFpbi4kbG8gZ2V0dGV4dC4kbG8gaW50bC1jb21wYXQuJGxvIGxvYWRtc2djYXQuJGxvIGxvY2FsZWFsaWFzLiRsbyBuZ2V0dGV4dC4kbG8gdGV4dGRvbWFpbi4kbG86ICQoc3JjZGlyKS9nZXR0ZXh0UC5oICQoc3JjZGlyKS9nbW8uaCAkKHNyY2RpcikvbG9hZGluZm8uaAorK2RjaWdldHRleHQuJGxvIGxvYWRtc2djYXQuJGxvOiAkKHNyY2RpcikvaGFzaC1zdHJpbmcuaAorK2V4cGxvZGVuYW1lLiRsbyBsMTBuZmxpc3QuJGxvOiAkKHNyY2RpcikvbG9hZGluZm8uaAorK2RjaWdldHRleHQuJGxvIGxvYWRtc2djYXQuJGxvIHBsdXJhbC4kbG8gcGx1cmFsLWV4cC4kbG86ICQoc3JjZGlyKS9wbHVyYWwtZXhwLmgKKytkY2lnZXR0ZXh0LiRsbzogJChzcmNkaXIpL2V2YWwtcGx1cmFsLmgKKytsb2NhbGNoYXJzZXQuJGxvOiAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmgKKytsb2NhbGVhbGlhcy4kbG8gbG9jYWxjaGFyc2V0LiRsbyByZWxvY2F0YWJsZS4kbG86ICQoc3JjZGlyKS9yZWxvY2F0YWJsZS5oCisrcHJpbnRmLiRsbzogJChzcmNkaXIpL3ByaW50Zi1hcmdzLmggJChzcmNkaXIpL3ByaW50Zi1hcmdzLmMgJChzcmNkaXIpL3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS93cHJpbnRmLXBhcnNlLmggJChzcmNkaXIpL3hzaXplLmggJChzcmNkaXIpL3ByaW50Zi1wYXJzZS5jICQoc3JjZGlyKS92YXNucHJpbnRmLmggJChzcmNkaXIpL3Zhc253cHJpbnRmLmggJChzcmNkaXIpL3Zhc25wcmludGYuYworIAorIHRhZ3M6IFRBR1MKKyAKKyBUQUdTOiAkKEhFQURFUlMpICQoU09VUkNFUykKKyAJaGVyZT1gcHdkYDsgY2QgJChzcmNkaXIpICYmIGV0YWdzIC1vICQkaGVyZS9UQUdTICQoSEVBREVSUykgJChTT1VSQ0VTKQorIAorK2N0YWdzOiBDVEFHUworKworK0NUQUdTOiAkKEhFQURFUlMpICQoU09VUkNFUykKKysJaGVyZT1gcHdkYDsgY2QgJChzcmNkaXIpICYmIGN0YWdzIC1vICQkaGVyZS9DVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKysKKyBpZDogSUQKKyAKKyBJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpCitAQCAtMTY2LDEyICs0NDQsMTkgQEAKKyAKKyAKKyBtb3N0bHljbGVhbjoKKy0Jcm0gLWYgKi5hICoubyAqLmxvIGNvcmUgY29yZS4qCisrCXJtIC1mICouYSAqLmxhICoubyAqLm9iaiAqLmxvIGNvcmUgY29yZS4qCisrCXJtIC1mIGxpYmdudWludGwuaCBsaWJpbnRsLmggY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCByZWYtZGVsLnNlZAorKwlybSAtZiAtciAubGlicyBfbGlicworIAorIGNsZWFuOiBtb3N0bHljbGVhbgorIAorIGRpc3RjbGVhbjogY2xlYW4KKy0Jcm0gLWYgTWFrZWZpbGUgSUQgVEFHUyBwbzJtc2cuc2VkIHBvMnRibC5zZWQgbGliaW50bC5oCisrCXJtIC1mIE1ha2VmaWxlIElEIFRBR1MKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisrCSAgcm0gLWYgQ2hhbmdlTG9nLmluc3QgJChESVNURklMRVMubm9ybWFsKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorIAorIG1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorQEAgLTE4MSwzMyArNDY2LDI3IEBACisgIyBHTlUgZ2V0dGV4dCBuZWVkcyBub3QgY29udGFpbiB0aGUgZmlsZSBgVkVSU0lPTicgYnV0IGNvbnRhaW5zIHNvbWUKKyAjIG90aGVyIGZpbGVzIHdoaWNoIHNob3VsZCBub3QgYmUgZGlzdHJpYnV0ZWQgaW4gb3RoZXIgcGFja2FnZXMuCisgZGlzdGRpciA9IC4uLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKKy1kaXN0IGRpc3RkaXI6IE1ha2VmaWxlICQoRElTVEZJTEVTKQorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9IGdldHRleHQ7IHRoZW4gXAorLQkgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLmdldHRleHQpIjsgXAorK2Rpc3QgZGlzdGRpcjogTWFrZWZpbGUKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgIDogOyBcCisgCWVsc2UgXAorLQkgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCistCWZpOyBcCistCWZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgJCRhZGRpdGlvbmFsOyBkbyBcCistCSAgbG4gJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpIDI+IC9kZXYvbnVsbCBcCistCSAgICB8fCBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcik7IFwKKy0JZG9uZQorLQorLWRpc3QtbGliYzoKKy0JdGFyIHpjdmYgaW50bC1nbGliYy50YXIuZ3ogJChDT01TUkNTKSAkKENPTUhEUlMpIGxpYmludGwuaC5nbGliYworLQorLU1ha2VmaWxlOiBNYWtlZmlsZS5pbiAuLi9jb25maWcuc3RhdHVzCistCWNkIC4uIFwKKy0JICAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKysJICBpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiOyB0aGVuIFwKKysJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLmdldHRleHQpIjsgXAorKwkgIGVsc2UgXAorKwkgICAgYWRkaXRpb25hbD0iJChESVNURklMRVMubm9ybWFsKSI7IFwKKysJICBmaTsgXAorKwkgICQoTUFLRSkgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgXAorKwkgIGZvciBmaWxlIGluIENoYW5nZUxvZyAkKERJU1RGSUxFUy5jb21tb24pICQoRElTVEZJTEVTLmdlbmVyYXRlZCkgJCRhZGRpdGlvbmFsOyBkbyBcCisrCSAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkaXI9LjsgZWxzZSBkaXI9JChzcmNkaXIpOyBmaTsgXAorKwkgICAgY3AgLXAgJCRkaXIvJCRmaWxlICQoZGlzdGRpcik7IFwKKysJICBkb25lOyBcCisrCWZpCisgCistIyBUaGUgZGVwZW5kZW5jeSBmb3IgaW50bGguaW5zdCBpcyBkaWZmZXJlbnQgaW4gZ2V0dGV4dCBhbmQgYWxsIG90aGVyCistIyBwYWNrYWdlcy4gIEJlY2F1c2Ugd2UgY2Fubm90IHlvdSBHTlUgbWFrZSBmZWF0dXJlcyB3ZSBoYXZlIHRvIHNvbHZlCistIyB0aGUgcHJvYmxlbSB3aGlsZSByZXdyaXRpbmcgTWFrZWZpbGUuaW4uCistQEdUX1lFU0BpbnRsaC5pbnN0OiBpbnRsaC5pbnN0LmluIC4uL2NvbmZpZy5zdGF0dXMKKy1AR1RfWUVTQAljZCAuLiBcCistQEdUX1lFU0AJJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gXAorLUBHVF9ZRVNACSAgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCistQEdUX05PQC5QSE9OWTogaW50bGguaW5zdAorLUBHVF9OT0BpbnRsaC5pbnN0OgorK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKysJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworKyMgVGhpcyB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCwgYnV0IGRvZXNuJ3Qgd29yayBhbnkgbW9yZSB3aXRoIGF1dG9jb25mLTIuNTcsCisrIyB3aGVuIEFDX0NPTkZJR19GSUxFUyhbaW50bC9NYWtlZmlsZTpzb21lZGlyL01ha2VmaWxlLmluXSkgaXMgdXNlZC4KKysjCWNkICQodG9wX2J1aWxkZGlyKSAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKyAKKyAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL25nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbmdldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUzMzcyMTAzMiAtMDQwMAorQEAgLTAsMCArMSw2NSBAQAorKy8qIEltcGxlbWVudGF0aW9uIG9mIG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgX19uZWVkX05VTEwKKysjIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIEp1c3QgZm9yIE5VTEwuICAqLworKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbHNlCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisrICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgTkdFVFRFWFQgX19uZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBOR0VUVEVYVCBsaWJpbnRsX25nZXR0ZXh0CisrIyBkZWZpbmUgRENOR0VUVEVYVCBsaWJpbnRsX2RjbmdldHRleHQKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisrICAgdGV4dCkuICAqLworK2NoYXIgKgorK05HRVRURVhUIChjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyt7CisrICByZXR1cm4gRENOR0VUVEVYVCAoTlVMTCwgbXNnaWQxLCBtc2dpZDIsIG4sIExDX01FU1NBR0VTKTsKKyt9CisrCisrI2lmZGVmIF9MSUJDCisrLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrd2Vha19hbGlhcyAoX19uZ2V0dGV4dCwgbmdldHRleHQpOworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL29zMmNvbXBhdC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL29zMmNvbXBhdC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTM5NzIwMTIwIC0wNDAwCitAQCAtMCwwICsxLDk4IEBACisrLyogT1MvMiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2RlZmluZSBPUzJfQVdBUkUKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysKKysvKiBBIHZlcnNpb24gb2YgZ2V0ZW52KCkgdGhhdCB3b3JrcyBmcm9tIERMTHMgKi8KKytleHRlcm4gdW5zaWduZWQgbG9uZyBEb3NTY2FuRW52IChjb25zdCB1bnNpZ25lZCBjaGFyICpwc3pOYW1lLCB1bnNpZ25lZCBjaGFyICoqcHBzelZhbHVlKTsKKysKKytjaGFyICoKKytfbmxfZ2V0ZW52IChjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOworKyAgaWYgKERvc1NjYW5FbnYgKG5hbWUsICZ2YWx1ZSkpCisrICAgIHJldHVybiBOVUxMOworKyAgZWxzZQorKyAgICByZXR1cm4gdmFsdWU7CisrfQorKworKy8qIEEgZml4ZWQgc2l6ZSBidWZmZXIuICAqLworK2NoYXIgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWVbTUFYUEFUSExFTisxXTsKKysKKytjaGFyICpfbmxvczJfbGliZGlyID0gTlVMTDsKKytjaGFyICpfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gTlVMTDsKKytjaGFyICpfbmxvczJfbG9jYWxlZGlyID0gTlVMTDsKKysKKytzdGF0aWMgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSB2b2lkCisrbmxvczJfaW5pdGlhbGl6ZSAoKQorK3sKKysgIGNoYXIgKnJvb3QgPSBnZXRlbnYgKCJVTklYUk9PVCIpOworKyAgY2hhciAqZ251bG9jYWxlZGlyID0gZ2V0ZW52ICgiR05VTE9DQUxFRElSIik7CisrCisrICBfbmxvczJfbGliZGlyID0gZ251bG9jYWxlZGlyOworKyAgaWYgKCFfbmxvczJfbGliZGlyKQorKyAgICB7CisrICAgICAgaWYgKHJvb3QpCisrICAgICAgICB7CisrICAgICAgICAgIHNpemVfdCBzbCA9IHN0cmxlbiAocm9vdCk7CisrICAgICAgICAgIF9ubG9zMl9saWJkaXIgPSAoY2hhciAqKSBtYWxsb2MgKHNsICsgc3RybGVuIChMSUJESVIpICsgMSk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xpYmRpciwgcm9vdCwgc2wpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9saWJkaXIgKyBzbCwgTElCRElSLCBzdHJsZW4gKExJQkRJUikgKyAxKTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBfbmxvczJfbGliZGlyID0gTElCRElSOworKyAgICB9CisrCisrICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gZ251bG9jYWxlZGlyOworKyAgaWYgKCFfbmxvczJfbG9jYWxlYWxpYXNwYXRoKQorKyAgICB7CisrICAgICAgaWYgKHJvb3QpCisrICAgICAgICB7CisrICAgICAgICAgIHNpemVfdCBzbCA9IHN0cmxlbiAocm9vdCk7CisrICAgICAgICAgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSAoY2hhciAqKSBtYWxsb2MgKHNsICsgc3RybGVuIChMT0NBTEVfQUxJQVNfUEFUSCkgKyAxKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlYWxpYXNwYXRoLCByb290LCBzbCk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCArIHNsLCBMT0NBTEVfQUxJQVNfUEFUSCwgc3RybGVuIChMT0NBTEVfQUxJQVNfUEFUSCkgKyAxKTsKKysgICAgICAgIH0KKysgICAgIGVsc2UKKysgICAgICAgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKysgICAgfQorKworKyAgX25sb3MyX2xvY2FsZWRpciA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xvY2FsZWRpcikKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbG9jYWxlZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVkaXIsIHJvb3QsIHNsKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlZGlyICsgc2wsIExPQ0FMRURJUiwgc3RybGVuIChMT0NBTEVESVIpICsgMSk7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgX25sb3MyX2xvY2FsZWRpciA9IExPQ0FMRURJUjsKKysgICAgfQorKworKyAgaWYgKHN0cmxlbiAoX25sb3MyX2xvY2FsZWRpcikgPD0gTUFYUEFUSExFTikKKysgICAgc3RyY3B5IChsaWJpbnRsX25sX2RlZmF1bHRfZGlybmFtZSwgX25sb3MyX2xvY2FsZWRpcik7CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL29zMmNvbXBhdC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL29zMmNvbXBhdC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTQ0NzE5MzYwIC0wNDAwCitAQCAtMCwwICsxLDQ2IEBACisrLyogT1MvMiBjb21wYXRpYmlsaXR5IGRlZmluZXMuCisrICAgVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGZyb20gY29uZmlnLmgKKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogV2hlbiBpbmNsdWRlZCBmcm9tIG9zMmNvbXBhdC5oIHdlIG5lZWQgYWxsIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9ucyAqLworKyNpZm5kZWYgT1MyX0FXQVJFCisrCisrI3VuZGVmIExJQkRJUgorKyNkZWZpbmUgTElCRElSCQkJX25sb3MyX2xpYmRpcgorK2V4dGVybiBjaGFyICpfbmxvczJfbGliZGlyOworKworKyN1bmRlZiBMT0NBTEVESVIKKysjZGVmaW5lIExPQ0FMRURJUgkJX25sb3MyX2xvY2FsZWRpcgorK2V4dGVybiBjaGFyICpfbmxvczJfbG9jYWxlZGlyOworKworKyN1bmRlZiBMT0NBTEVfQUxJQVNfUEFUSAorKyNkZWZpbmUgTE9DQUxFX0FMSUFTX1BBVEgJX25sb3MyX2xvY2FsZWFsaWFzcGF0aAorK2V4dGVybiBjaGFyICpfbmxvczJfbG9jYWxlYWxpYXNwYXRoOworKworKyNlbmRpZgorKworKyN1bmRlZiBIQVZFX1NUUkNBU0VDTVAKKysjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisrI2RlZmluZSBzdHJjYXNlY21wIHN0cmljbXAKKysjZGVmaW5lIHN0cm5jYXNlY21wIHN0cm5pY21wCisrCisrLyogV2UgaGF2ZSBvdXIgb3duIGdldGVudigpIHdoaWNoIHdvcmtzIGV2ZW4gaWYgbGlicmFyeSBpcyBjb21waWxlZCBhcyBETEwgKi8KKysjZGVmaW5lIGdldGVudiBfbmxfZ2V0ZW52CisrCisrLyogT2xkZXIgdmVyc2lvbnMgb2YgZ2V0dGV4dCB1c2VkIC0xIGFzIHRoZSB2YWx1ZSBvZiBMQ19NRVNTQUdFUyAqLworKyNkZWZpbmUgTENfTUVTU0FHRVNfQ09NUEFUICgtMSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vc2RlcC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL29zZGVwLmMJMjAwNC0wOS0xMiAxNDo0MDozNC41NTA3MTg0NDggLTA0MDAKK0BAIC0wLDAgKzEsMjQgQEAKKysvKiBPUyBkZXBlbmRlbnQgcGFydHMgb2YgbGliaW50bC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmIGRlZmluZWQgX19FTVhfXworKyMgaW5jbHVkZSAib3MyY29tcGF0LmMiCisrI2Vsc2UKKysvKiBBdm9pZCBBSVggY29tcGlsZXIgd2FybmluZy4gICovCisrdHlwZWRlZiBpbnQgZHVtbXk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcGx1cmFsLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcGx1cmFsLmMJMjAwNC0wOS0xMiAxNDo0MDozNi41NzE0MTEyNTYgLTA0MDAKK0BAIC0wLDAgKzEsMTQ5MCBAQAorKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGZyb20gcGx1cmFsLnkKKysgICBieSBHTlUgYmlzb24gMS4zNS4gICovCisrCisrI2RlZmluZSBZWUJJU09OIDEgIC8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisrCisrI2RlZmluZSB5eXBhcnNlIF9fZ2V0dGV4dHBhcnNlCisrI2RlZmluZSB5eWxleCBfX2dldHRleHRsZXgKKysjZGVmaW5lIHl5ZXJyb3IgX19nZXR0ZXh0ZXJyb3IKKysjZGVmaW5lIHl5bHZhbCBfX2dldHRleHRsdmFsCisrI2RlZmluZSB5eWNoYXIgX19nZXR0ZXh0Y2hhcgorKyNkZWZpbmUgeXlkZWJ1ZyBfX2dldHRleHRkZWJ1ZworKyNkZWZpbmUgeXluZXJycyBfX2dldHRleHRuZXJycworKyMgZGVmaW5lCUVRVU9QMgkyNTcKKysjIGRlZmluZQlDTVBPUDIJMjU4CisrIyBkZWZpbmUJQURET1AyCTI1OQorKyMgZGVmaW5lCU1VTE9QMgkyNjAKKysjIGRlZmluZQlOVU1CRVIJMjYxCisrCisrI2xpbmUgMSAicGx1cmFsLnkiCisrCisrLyogRXhwcmVzc2lvbiBwYXJzaW5nIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGhlIGJpc29uIGdlbmVyYXRlZCBwYXJzZXIgdXNlcyBhbGxvY2EuICBBSVggMyBmb3JjZXMgdXMgdG8gcHV0IHRoaXMKKysgICBkZWNsYXJhdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlIGRlY2xhcmF0aW9uIGluIGJpc29uJ3MKKysgICBza2VsZXRvbiBmaWxlIGNvbWVzIHRvbyBsYXRlLiAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4KKysgICBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUgYXJiaXRyYXJ5IHN5c3RlbSBoZWFkZXJzLiAgKi8KKysjaWYgZGVmaW5lZCBfQUlYICYmICFkZWZpbmVkIF9fR05VQ19fCisrICNwcmFnbWEgYWxsb2NhCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysKKysvKiBUaGUgbWFpbiBmdW5jdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciBpcyBjYWxsZWQgX19nZXR0ZXh0cGFyc2UsCisrICAgYnV0IHdlIHdhbnQgaXQgdG8gYmUgY2FsbGVkIFBMVVJBTF9QQVJTRS4gICovCisrI2lmbmRlZiBfTElCQworKyMgZGVmaW5lIF9fZ2V0dGV4dHBhcnNlIFBMVVJBTF9QQVJTRQorKyNlbmRpZgorKworKyNkZWZpbmUgWVlMRVhfUEFSQU0JJigoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+Y3AKKysjZGVmaW5lIFlZUEFSU0VfUEFSQU0JYXJnCisrCisrI2xpbmUgNDkgInBsdXJhbC55IgorKyNpZm5kZWYgWVlTVFlQRQorK3R5cGVkZWYgdW5pb24geworKyAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOworKyAgZW51bSBvcGVyYXRvciBvcDsKKysgIHN0cnVjdCBleHByZXNzaW9uICpleHA7CisrfSB5eXN0eXBlOworKyMgZGVmaW5lIFlZU1RZUEUgeXlzdHlwZQorKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisrI2VuZGlmCisrI2xpbmUgNTUgInBsdXJhbC55IgorKworKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApOworK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CisrCisrLyogQWxsb2NhdGlvbiBvZiBleHByZXNzaW9ucy4gICovCisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwIChpbnQgbmFyZ3MsIGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICogY29uc3QgKmFyZ3MpCisreworKyAgaW50IGk7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqbmV3cDsKKysKKysgIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCisrICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorKyAgICAgIGdvdG8gZmFpbDsKKysKKysgIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworKyAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKysgIGlmIChuZXdwICE9IE5VTEwpCisrICAgIHsKKysgICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworKyAgICAgIG5ld3AtPm9wZXJhdGlvbiA9IG9wOworKyAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKysgICAgICByZXR1cm4gbmV3cDsKKysgICAgfQorKworKyBmYWlsOgorKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzAgKGVudW0gb3BlcmF0b3Igb3ApCisreworKyAgcmV0dXJuIG5ld19leHAgKDAsIG9wLCBOVUxMKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8xIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CisrCisrICBhcmdzWzBdID0gcmlnaHQ7CisrICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworK30KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMiAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKysKKysgIGFyZ3NbMF0gPSBsZWZ0OworKyAgYXJnc1sxXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8zIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqYmV4cCwKKysJICAgc3RydWN0IGV4cHJlc3Npb24gKnRicmFuY2gsIHN0cnVjdCBleHByZXNzaW9uICpmYnJhbmNoKQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOworKworKyAgYXJnc1swXSA9IGJleHA7CisrICBhcmdzWzFdID0gdGJyYW5jaDsKKysgIGFyZ3NbMl0gPSBmYnJhbmNoOworKyAgcmV0dXJuIG5ld19leHAgKDMsIG9wLCBhcmdzKTsKKyt9CisrCisrI2lmbmRlZiBZWURFQlVHCisrIyBkZWZpbmUgWVlERUJVRyAwCisrI2VuZGlmCisrCisrCisrCisrI2RlZmluZQlZWUZJTkFMCQkyNworKyNkZWZpbmUJWVlGTEFHCQktMzI3NjgKKysjZGVmaW5lCVlZTlRCQVNFCTE2CisrCisrLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAqLworKyNkZWZpbmUgWVlUUkFOU0xBVEUoeCkgKCh1bnNpZ25lZCkoeCkgPD0gMjYxID8geXl0cmFuc2xhdGVbeF0gOiAxOCkKKysKKysvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICovCisrc3RhdGljIGNvbnN0IGNoYXIgeXl0cmFuc2xhdGVbXSA9CisreworKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDEwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDUsICAgICAyLAorKyAgICAgIDE0LCAgICAxNSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgIDEzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgNiwgICAgIDcsICAgICA4LAorKyAgICAgICA5LCAgICAxMQorK307CisrCisrI2lmIFlZREVCVUcKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlwcmhzW10gPQorK3sKKysgICAgICAgMCwgICAgIDAsICAgICAyLCAgICAgOCwgICAgMTIsICAgIDE2LCAgICAyMCwgICAgMjQsICAgIDI4LCAgICAzMiwKKysgICAgICAzNSwgICAgMzcsICAgIDM5CisrfTsKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlyaHNbXSA9CisreworKyAgICAgIDE3LCAgICAgMCwgICAgMTcsICAgICAzLCAgICAxNywgICAgMTIsICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA0LAorKyAgICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA1LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNiwgICAgMTcsICAgICAwLAorKyAgICAgIDE3LCAgICAgNywgICAgMTcsICAgICAwLCAgICAxNywgICAgIDgsICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA5LAorKyAgICAgIDE3LCAgICAgMCwgICAgMTAsICAgIDE3LCAgICAgMCwgICAgMTMsICAgICAwLCAgICAxMSwgICAgIDAsICAgIDE0LAorKyAgICAgIDE3LCAgICAxNSwgICAgIDAKKyt9OworKworKyNlbmRpZgorKworKyNpZiBZWURFQlVHCisrLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gKi8KKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlybGluZVtdID0KKyt7CisrICAgICAgIDAsICAgMTUwLCAgIDE1OCwgICAxNjIsICAgMTY2LCAgIDE3MCwgICAxNzQsICAgMTc4LCAgIDE4MiwgICAxODYsCisrICAgICAxOTAsICAgMTk0LCAgIDE5OQorK307CisrI2VuZGlmCisrCisrCisrI2lmIChZWURFQlVHKSB8fCBkZWZpbmVkIFlZRVJST1JfVkVSQk9TRQorKworKy8qIFlZVE5BTUVbVE9LRU5fTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgdG9rZW4gVE9LRU5fTlVNLiAqLworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQorK3sKKysgICIkIiwgImVycm9yIiwgIiR1bmRlZmluZWQuIiwgIic/JyIsICInfCciLCAiJyYnIiwgIkVRVU9QMiIsICJDTVBPUDIiLCAKKysgICJBRERPUDIiLCAiTVVMT1AyIiwgIichJyIsICJOVU1CRVIiLCAiJzonIiwgIiduJyIsICInKCciLCAiJyknIiwgCisrICAic3RhcnQiLCAiZXhwIiwgMAorK307CisrI2VuZGlmCisrCisrLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gKi8KKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlyMVtdID0KKyt7CisrICAgICAgIDAsICAgIDE2LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsCisrICAgICAgMTcsICAgIDE3LCAgICAxNworK307CisrCisrLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cjJbXSA9CisreworKyAgICAgICAwLCAgICAgMSwgICAgIDUsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLAorKyAgICAgICAxLCAgICAgMSwgICAgIDMKKyt9OworKworKy8qIFlZREVGQUNUW1NdIC0tIGRlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZSBTIHdoZW4gWVlUQUJMRQorKyAgIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8gbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4KKysgICBlcnJvci4gKi8KKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZhY3RbXSA9CisreworKyAgICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEwLCAgICAgMCwgICAgIDEsICAgICA5LCAgICAgMCwgICAgIDAsICAgICAwLAorKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LAorKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMAorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmZ290b1tdID0KKyt7CisrICAgICAgMjUsICAgICA1CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlwYWN0W10gPQorK3sKKysgICAgICAtOSwgICAgLTksLTMyNzY4LC0zMjc2OCwgICAgLTksICAgIDM0LC0zMjc2OCwgICAgMTEsICAgIC05LCAgICAtOSwKKysgICAgICAtOSwgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksLTMyNzY4LCAgICAyNCwgICAgMzksICAgIDQzLCAgICAxNiwKKysgICAgICAyNiwgICAgLTMsLTMyNzY4LCAgICAtOSwgICAgMzQsICAgIDIxLCAgICA1MywtMzI3NjgKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXBnb3RvW10gPQorK3sKKysgIC0zMjc2OCwgICAgLTEKKyt9OworKworKworKyNkZWZpbmUJWVlMQVNUCQk1MworKworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXRhYmxlW10gPQorK3sKKysgICAgICAgNiwgICAgIDEsICAgICAyLCAgICAgNywgICAgIDMsICAgICA0LCAgICAxNCwgICAgMTYsICAgIDE3LCAgICAxOCwKKysgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKysgICAgICAxNCwgICAgMjYsICAgIDI0LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgIDgsICAgICA5LCAgICAxMCwKKysgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTMsICAgIDE0LCAgICAyMywgICAgIDgsICAgICA5LCAgICAxMCwKKysgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxMSwKKysgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAyNworK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5Y2hlY2tbXSA9CisreworKyAgICAgICAxLCAgICAxMCwgICAgMTEsICAgICA0LCAgICAxMywgICAgMTQsICAgICA5LCAgICAgOCwgICAgIDksICAgIDEwLAorKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorKyAgICAgICA5LCAgICAgMCwgICAgMjMsICAgICA3LCAgICAgOCwgICAgIDksICAgIDE1LCAgICAgMywgICAgIDQsICAgICA1LAorKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgOCwgICAgIDksICAgIDEyLCAgICAgMywgICAgIDQsICAgICA1LAorKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgICA2LAorKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgICAwCisrfTsKKysjZGVmaW5lIFlZUFVSRSAxCisrCisrLyogLSotQy0qLSAgTm90ZSBzb21lIGNvbXBpbGVycyBjaG9rZSBvbiBjb21tZW50cyBvbiBgI2xpbmUnIGxpbmVzLiAgKi8KKysjbGluZSAzICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uL2Jpc29uLnNpbXBsZSIKKysKKysvKiBTa2VsZXRvbiBvdXRwdXQgcGFyc2VyIGZvciBiaXNvbiwKKysKKysgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKysgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGludG8gYQorKyAgIEJpc29uIG91dHB1dCBmaWxlLCB5b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxlIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisrICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyAgIGluIHZlcnNpb24gMS4yNCBvZiBCaXNvbi4gICovCisrCisrLyogVGhpcyBpcyB0aGUgcGFyc2VyIGNvZGUgdGhhdCBpcyB3cml0dGVuIGludG8gZWFjaCBiaXNvbiBwYXJzZXIgd2hlbgorKyAgIHRoZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGdyYW1tYXIuCisrICAgSXQgd2FzIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiBieSBzaW1wbGlmeWluZyB0aGUgaGFpcnkgcGFyc2VyCisrICAgdXNlZCB3aGVuICVzZW1hbnRpY19wYXJzZXIgaXMgc3BlY2lmaWVkLiAgKi8KKysKKysvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorKyAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisrICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisrICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisrCisrI2lmICEgZGVmaW5lZCAoeXlvdmVyZmxvdykgfHwgZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKQorKworKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKysKKysjIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorKyMgZWxzZQorKyMgIGlmbmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKysjICAgaWYgZGVmaW5lZCAoYWxsb2NhKSB8fCBkZWZpbmVkIChfQUxMT0NBX0gpCisrIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZkZWYgX19HTlVDX18KKysjICAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKyMgaWZkZWYgWVlTVEFDS19BTExPQworKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gKi8KKysjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoMCkKKysjIGVsc2UKKysjICBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisrIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisrIyAgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjICBlbmRpZgorKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIG1hbGxvYworKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgZnJlZQorKyMgZW5kaWYKKysjZW5kaWYgLyogISBkZWZpbmVkICh5eW92ZXJmbG93KSB8fCBkZWZpbmVkIChZWUVSUk9SX1ZFUkJPU0UpICovCisrCisrCisrI2lmICghIGRlZmluZWQgKHl5b3ZlcmZsb3cpIFwKKysgICAgICYmICghIGRlZmluZWQgKF9fY3BsdXNwbHVzKSBcCisrCSB8fCAoWVlMVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorKworKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLworK3VuaW9uIHl5YWxsb2MKKyt7CisrICBzaG9ydCB5eXNzOworKyAgWVlTVFlQRSB5eXZzOworKyMgaWYgWVlMU1BfTkVFREVECisrICBZWUxUWVBFIHl5bHM7CisrIyBlbmRpZgorK307CisrCisrLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKysjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVggKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQorKworKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorKyAgIE4gZWxlbWVudHMuICAqLworKyMgaWYgWVlMU1BfTkVFREVECisrIyAgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorKyAgICAgKChOKSAqIChzaXplb2YgKHNob3J0KSArIHNpemVvZiAoWVlTVFlQRSkgKyBzaXplb2YgKFlZTFRZUEUpKQlcCisrICAgICAgKyAyICogWVlTVEFDS19HQVBfTUFYKQorKyMgZWxzZQorKyMgIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKysgICAgICgoTikgKiAoc2l6ZW9mIChzaG9ydCkgKyBzaXplb2YgKFlZU1RZUEUpKQkJCQlcCisrICAgICAgKyBZWVNUQUNLX0dBUF9NQVgpCisrIyBlbmRpZgorKworKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworKyAgIG5vdCBvdmVybGFwLiAgKi8KKysjIGlmbmRlZiBZWUNPUFkKKysjICBpZiAxIDwgX19HTlVDX18KKysjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKKysgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisrIyAgZWxzZQorKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKKysgICAgICBkbwkJCQkJXAorKwl7CQkJCQlcCisrCSAgcmVnaXN0ZXIgWVlTSVpFX1QgeXlpOwkJXAorKwkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKKysJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorKwl9CQkJCQlcCisrICAgICAgd2hpbGUgKDApCisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisrICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisrICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKysgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorKyAgIHN0YWNrLiAgKi8KKysjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorKyAgICBkbwkJCQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKysJWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAorKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVg7CVwKKysJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIHdoaWxlICgwKQorKworKyNlbmRpZgorKworKworKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKSAmJiBkZWZpbmVkIChfX1NJWkVfVFlQRV9fKQorKyMgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKysjZW5kaWYKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkgJiYgZGVmaW5lZCAoc2l6ZV90KQorKyMgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorKyNlbmRpZgorKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKQorKyMgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisrIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorKyMgZW5kaWYKKysjZW5kaWYKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkKKysjIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKysjZW5kaWYKKysKKysjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisrI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisrI2RlZmluZSBZWUVNUFRZCQktMgorKyNkZWZpbmUgWVlFT0YJCTAKKysjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKysjZGVmaW5lIFlZQUJPUlQgCWdvdG8geXlhYm9ydGxhYgorKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycmxhYjEKKysvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisrICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKysgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisrI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKysjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKysjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKKytkbwkJCQkJCQkJXAorKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKysgICAgewkJCQkJCQkJXAorKyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorKyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorKyAgICAgIFlZUE9QU1RBQ0s7CQkJCQkJXAorKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorKyAgICB9CQkJCQkJCQlcCisrICBlbHNlCQkJCQkJCQlcCisrICAgIHsgCQkJCQkJCQlcCisrICAgICAgeXllcnJvciAoInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKTsJCQlcCisrICAgICAgWVlFUlJPUjsJCQkJCQkJXAorKyAgICB9CQkJCQkJCQlcCisrd2hpbGUgKDApCisrCisrI2RlZmluZSBZWVRFUlJPUgkxCisrI2RlZmluZSBZWUVSUkNPREUJMjU2CisrCisrCisrLyogWVlMTE9DX0RFRkFVTFQgLS0gQ29tcHV0ZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiAoYmVmb3JlIHRoZSBhY3Rpb25zCisrICAgYXJlIHJ1bikuCisrCisrICAgV2hlbiBZWUxMT0NfREVGQVVMVCBpcyBydW4sIENVUlJFTlQgaXMgc2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUKKysgICBmaXJzdCB0b2tlbi4gIEJ5IGRlZmF1bHQsIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciByYW5nZXMsIGV4dGVuZAorKyAgIGl0cyByYW5nZSB0byB0aGUgbGFzdCBzeW1ib2wuICAqLworKworKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKysjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgIAlcCisrICAgQ3VycmVudC5sYXN0X2xpbmUgICA9IFJoc1tOXS5sYXN0X2xpbmU7CVwKKysgICBDdXJyZW50Lmxhc3RfY29sdW1uID0gUmhzW05dLmxhc3RfY29sdW1uOworKyNlbmRpZgorKworKworKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworKworKyNpZiBZWVBVUkUKKysjIGlmIFlZTFNQX05FRURFRAorKyMgIGlmZGVmIFlZTEVYX1BBUkFNCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKKysjICBlbmRpZgorKyMgZWxzZSAvKiAhWVlMU1BfTkVFREVEICovCisrIyAgaWZkZWYgWVlMRVhfUEFSQU0KKysjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisrIyAgZWxzZQorKyMgICBkZWZpbmUgWVlMRVgJCXl5bGV4ICgmeXlsdmFsKQorKyMgIGVuZGlmCisrIyBlbmRpZiAvKiAhWVlMU1BfTkVFREVEICovCisrI2Vsc2UgLyogIVlZUFVSRSAqLworKyMgZGVmaW5lIFlZTEVYCQkJeXlsZXggKCkKKysjZW5kaWYgLyogIVlZUFVSRSAqLworKworKworKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKysjaWYgWVlERUJVRworKworKyMgaWZuZGVmIFlZRlBSSU5URgorKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKysjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKysjIGVuZGlmCisrCisrIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorK2RvIHsJCQkJCQlcCisrICBpZiAoeXlkZWJ1ZykJCQkJCVwKKysgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKKyt9IHdoaWxlICgwKQorKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworK2ludCB5eWRlYnVnOworKyNlbHNlIC8qICFZWURFQlVHICovCisrIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisrI2VuZGlmIC8qICFZWURFQlVHICovCisrCisrLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworKyNpZm5kZWYJWVlJTklUREVQVEgKKysjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKysjZW5kaWYKKysKKysvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorKworKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisrICAgU0laRV9NQVggPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorKyAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLworKworKyNpZiBZWU1BWERFUFRIID09IDAKKysjIHVuZGVmIFlZTUFYREVQVEgKKysjZW5kaWYKKysKKysjaWZuZGVmIFlZTUFYREVQVEgKKysjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisrI2VuZGlmCisrDAorKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKysKKysjIGlmbmRlZiB5eXN0cmxlbgorKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKQorKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisrIyAgZWxzZQorKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKytzdGF0aWMgWVlTSVpFX1QKKysjICAgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKysjICAgZWxzZQorK3l5c3RybGVuICh5eXN0cikKKysgICAgIGNvbnN0IGNoYXIgKnl5c3RyOworKyMgICBlbmRpZgorK3sKKysgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3RyOworKworKyAgd2hpbGUgKCp5eXMrKyAhPSAnXDAnKQorKyAgICBjb250aW51ZTsKKysKKysgIHJldHVybiB5eXMgLSB5eXN0ciAtIDE7CisrfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKyMgaWZuZGVmIHl5c3RwY3B5CisrIyAgaWYgZGVmaW5lZCAoX19HTElCQ19fKSAmJiBkZWZpbmVkIChfU1RSSU5HX0gpICYmIGRlZmluZWQgKF9HTlVfU09VUkNFKQorKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisrIyAgZWxzZQorKy8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKysgICBZWURFU1QuICAqLworK3N0YXRpYyBjaGFyICoKKysjICAgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorKyMgICBlbHNlCisreXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisrICAgICBjaGFyICp5eWRlc3Q7CisrICAgICBjb25zdCBjaGFyICp5eXNyYzsKKysjICAgZW5kaWYKKyt7CisrICByZWdpc3RlciBjaGFyICp5eWQgPSB5eWRlc3Q7CisrICByZWdpc3RlciBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKysKKysgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorKyAgICBjb250aW51ZTsKKysKKysgIHJldHVybiB5eWQgLSAxOworK30KKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysMCisrI2xpbmUgMzE1ICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uL2Jpc29uLnNpbXBsZSIKKysKKysKKysvKiBUaGUgdXNlciBjYW4gZGVmaW5lIFlZUEFSU0VfUEFSQU0gYXMgdGhlIG5hbWUgb2YgYW4gYXJndW1lbnQgdG8gYmUgcGFzc2VkCisrICAgaW50byB5eXBhcnNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBoYXZlIHR5cGUgdm9pZCAqLgorKyAgIEl0IHNob3VsZCBhY3R1YWxseSBwb2ludCB0byBhbiBvYmplY3QuCisrICAgR3JhbW1hciBhY3Rpb25zIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGJ5IGNhc3RpbmcgaXQKKysgICB0byB0aGUgcHJvcGVyIHBvaW50ZXIgdHlwZS4gICovCisrCisrI2lmZGVmIFlZUEFSU0VfUEFSQU0KKysjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcgdm9pZCAqWVlQQVJTRV9QQVJBTQorKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKysjIGVsc2UKKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcgWVlQQVJTRV9QQVJBTQorKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKysjIGVuZGlmCisrI2Vsc2UgLyogIVlZUEFSU0VfUEFSQU0gKi8KKysjIGRlZmluZSBZWVBBUlNFX1BBUkFNX0FSRworKyMgZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTAorKyNlbmRpZiAvKiAhWVlQQVJTRV9QQVJBTSAqLworKworKy8qIFByZXZlbnQgd2FybmluZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAgKi8KKysjaWZkZWYgX19HTlVDX18KKysjIGlmZGVmIFlZUEFSU0VfUEFSQU0KKytpbnQgeXlwYXJzZSAodm9pZCAqKTsKKysjIGVsc2UKKytpbnQgeXlwYXJzZSAodm9pZCk7CisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIFlZX0RFQ0xfVkFSSUFCTEVTIC0tIGRlcGVuZGluZyB3aGV0aGVyIHdlIHVzZSBhIHB1cmUgcGFyc2VyLAorKyAgIHZhcmlhYmxlcyBhcmUgZ2xvYmFsLCBvciBsb2NhbCB0byBZWVBBUlNFLiAgKi8KKysKKysjZGVmaW5lIFlZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMJCQlcCisrLyogVGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwkJCQlcCisraW50IHl5Y2hhcjsJCQkJCQlcCisrCQkJCQkJCVwKKysvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICovCVwKKytZWVNUWVBFIHl5bHZhbDsJCQkJCQlcCisrCQkJCQkJCVwKKysvKiBOdW1iZXIgb2YgcGFyc2UgZXJyb3JzIHNvIGZhci4gICovCQkJXAorK2ludCB5eW5lcnJzOworKworKyNpZiBZWUxTUF9ORUVERUQKKysjIGRlZmluZSBZWV9ERUNMX1ZBUklBQkxFUwkJCVwKKytZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCQkJXAorKwkJCQkJCVwKKysvKiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCVwKKytZWUxUWVBFIHl5bGxvYzsKKysjZWxzZQorKyMgZGVmaW5lIFlZX0RFQ0xfVkFSSUFCTEVTCQkJXAorK1lZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMKKysjZW5kaWYKKysKKysKKysvKiBJZiBub25yZWVudHJhbnQsIGdlbmVyYXRlIHRoZSB2YXJpYWJsZXMgaGVyZS4gKi8KKysKKysjaWYgIVlZUFVSRQorK1lZX0RFQ0xfVkFSSUFCTEVTCisrI2VuZGlmICAvKiAhWVlQVVJFICovCisrCisraW50CisreXlwYXJzZSAoWVlQQVJTRV9QQVJBTV9BUkcpCisrICAgICBZWVBBUlNFX1BBUkFNX0RFQ0wKKyt7CisrICAvKiBJZiByZWVudHJhbnQsIGdlbmVyYXRlIHRoZSB2YXJpYWJsZXMgaGVyZS4gKi8KKysjaWYgWVlQVVJFCisrICBZWV9ERUNMX1ZBUklBQkxFUworKyNlbmRpZiAgLyogIVlZUFVSRSAqLworKworKyAgcmVnaXN0ZXIgaW50IHl5c3RhdGU7CisrICByZWdpc3RlciBpbnQgeXluOworKyAgaW50IHl5cmVzdWx0OworKyAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisrICBpbnQgeXllcnJzdGF0dXM7CisrICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCisrICBpbnQgeXljaGFyMSA9IDA7CisrCisrICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorKyAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKKysgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCisrICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgorKworKyAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisrICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKysKKysgIC8qIFRoZSBzdGF0ZSBzdGFjay4gKi8KKysgIHNob3J0CXl5c3NhW1lZSU5JVERFUFRIXTsKKysgIHNob3J0ICp5eXNzID0geXlzc2E7CisrICByZWdpc3RlciBzaG9ydCAqeXlzc3A7CisrCisrICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisrICBZWVNUWVBFICp5eXZzID0geXl2c2E7CisrICByZWdpc3RlciBZWVNUWVBFICp5eXZzcDsKKysKKysjaWYgWVlMU1BfTkVFREVECisrICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLworKyAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07CisrICBZWUxUWVBFICp5eWxzID0geXlsc2E7CisrICBZWUxUWVBFICp5eWxzcDsKKysjZW5kaWYKKysKKysjaWYgWVlMU1BfTkVFREVECisrIyBkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tLCB5eWxzcC0tKQorKyNlbHNlCisrIyBkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tKQorKyNlbmRpZgorKworKyAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKysKKysKKysgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisrICAgICBhY3Rpb24gcm91dGluZXMuICAqLworKyAgWVlTVFlQRSB5eXZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICBZWUxUWVBFIHl5bG9jOworKyNlbmRpZgorKworKyAgLyogV2hlbiByZWR1Y2luZywgdGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQKKysgICAgIHJ1bGUuICovCisrICBpbnQgeXlsZW47CisrCisrICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworKworKyAgeXlzdGF0ZSA9IDA7CisrICB5eWVycnN0YXR1cyA9IDA7CisrICB5eW5lcnJzID0gMDsKKysgIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworKworKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKysgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorKyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworKworKyAgeXlzc3AgPSB5eXNzOworKyAgeXl2c3AgPSB5eXZzOworKyNpZiBZWUxTUF9ORUVERUQKKysgIHl5bHNwID0geXlsczsKKysjZW5kaWYKKysgIGdvdG8geXlzZXRzdGF0ZTsKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysgeXluZXdzdGF0ZToKKysgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisrICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuIHNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuCisrICAgICAqLworKyAgeXlzc3ArKzsKKysKKysgeXlzZXRzdGF0ZToKKysgICp5eXNzcCA9IHl5c3RhdGU7CisrCisrICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKysgICAgeworKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisrCisrI2lmZGVmIHl5b3ZlcmZsb3cKKysgICAgICB7CisrCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gVXNlIGNvcGllcyBvZgorKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisrCSAgIG1lbW9yeS4gICovCisrCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKysJc2hvcnQgKnl5c3MxID0geXlzczsKKysKKysJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisrCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgKi8KKysjIGlmIFlZTFNQX05FRURFRAorKwlZWUxUWVBFICp5eWxzMSA9IHl5bHM7CisrCS8qIFRoaXMgdXNlZCB0byBiZSBhIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywKKysJICAgYnV0IHRoYXQgbWlnaHQgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisrCXl5b3ZlcmZsb3cgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorKwkJICAgICZ5eWxzMSwgeXlzaXplICogc2l6ZW9mICgqeXlsc3ApLAorKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisrCXl5bHMgPSB5eWxzMTsKKysjIGVsc2UKKysJeXlvdmVyZmxvdyAoInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisrCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisrCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisrCQkgICAgJnl5c3RhY2tzaXplKTsKKysjIGVuZGlmCisrCXl5c3MgPSB5eXNzMTsKKysJeXl2cyA9IHl5dnMxOworKyAgICAgIH0KKysjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisrIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorKyAgICAgIGdvdG8geXlvdmVyZmxvd2xhYjsKKysjIGVsc2UKKysgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKysgICAgICBpZiAoeXlzdGFja3NpemUgPj0gWVlNQVhERVBUSCkKKysJZ290byB5eW92ZXJmbG93bGFiOworKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisrICAgICAgaWYgKHl5c3RhY2tzaXplID4gWVlNQVhERVBUSCkKKysJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworKworKyAgICAgIHsKKysJc2hvcnQgKnl5c3MxID0geXlzczsKKysJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisrCWlmICghIHl5cHRyKQorKwkgIGdvdG8geXlvdmVyZmxvd2xhYjsKKysJWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7CisrCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOworKyMgaWYgWVlMU1BfTkVFREVECisrCVlZU1RBQ0tfUkVMT0NBVEUgKHl5bHMpOworKyMgZW5kaWYKKysjIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKysJaWYgKHl5c3MxICE9IHl5c3NhKQorKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworKyAgICAgIH0KKysjIGVuZGlmCisrI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKysKKysgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisrI2lmIFlZTFNQX05FRURFRAorKyAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CisrI2VuZGlmCisrCisrICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAorKwkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisrCisrICAgICAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisrCVlZQUJPUlQ7CisrICAgIH0KKysKKysgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisrCisrICBnb3RvIHl5YmFja3VwOworKworKworKy8qLS0tLS0tLS0tLS0uCisrfCB5eWJhY2t1cC4gIHwKKytgLS0tLS0tLS0tLS0qLworK3l5YmFja3VwOgorKworKy8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworKy8qIFJlYWQgYSBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworKy8qIHl5cmVzdW1lOiAqLworKworKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisrCisrICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisrICBpZiAoeXluID09IFlZRkxBRykKKysgICAgZ290byB5eWRlZmF1bHQ7CisrCisrICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworKworKyAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GCisrICAgICBvciBhIHZhbGlkIHRva2VuIGluIGV4dGVybmFsIGZvcm0uICAqLworKworKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorKyAgICB7CisrICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisrICAgICAgeXljaGFyID0gWVlMRVg7CisrICAgIH0KKysKKysgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXljaGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3aXRoICovCisrCisrICBpZiAoeXljaGFyIDw9IDApCQkvKiBUaGlzIG1lYW5zIGVuZCBvZiBpbnB1dC4gKi8KKysgICAgeworKyAgICAgIHl5Y2hhcjEgPSAwOworKyAgICAgIHl5Y2hhciA9IFlZRU9GOwkJLyogRG9uJ3QgY2FsbCBZWUxFWCBhbnkgbW9yZSAqLworKworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKysKKysjaWYgWVlERUJVRworKyAgICAgLyogV2UgaGF2ZSB0byBrZWVwIHRoaXMgYCNpZiBZWURFQlVHJywgc2luY2Ugd2UgdXNlIHZhcmlhYmxlcworKwl3aGljaCBhcmUgZGVmaW5lZCBvbmx5IGlmIGBZWURFQlVHJyBpcyBzZXQuICAqLworKyAgICAgIGlmICh5eWRlYnVnKQorKwl7CisrCSAgWVlGUFJJTlRGIChzdGRlcnIsICJOZXh0IHRva2VuIGlzICVkICglcyIsCisrCQkgICAgIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisrCSAgLyogR2l2ZSB0aGUgaW5kaXZpZHVhbCBwYXJzZXIgYSB3YXkgdG8gcHJpbnQgdGhlIHByZWNpc2UKKysJICAgICBtZWFuaW5nIG9mIGEgdG9rZW4sIGZvciBmdXJ0aGVyIGRlYnVnZ2luZyBpbmZvLiAgKi8KKysjIGlmZGVmIFlZUFJJTlQKKysJICBZWVBSSU5UIChzdGRlcnIsIHl5Y2hhciwgeXlsdmFsKTsKKysjIGVuZGlmCisrCSAgWVlGUFJJTlRGIChzdGRlcnIsICIpXG4iKTsKKysJfQorKyNlbmRpZgorKyAgICB9CisrCisrICB5eW4gKz0geXljaGFyMTsKKysgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyMSkKKysgICAgZ290byB5eWRlZmF1bHQ7CisrCisrICB5eW4gPSB5eXRhYmxlW3l5bl07CisrCisrICAvKiB5eW4gaXMgd2hhdCB0byBkbyBmb3IgdGhpcyB0b2tlbiB0eXBlIGluIHRoaXMgc3RhdGUuCisrICAgICBOZWdhdGl2ZSA9PiByZWR1Y2UsIC15eW4gaXMgcnVsZSBudW1iZXIuCisrICAgICBQb3NpdGl2ZSA9PiBzaGlmdCwgeXluIGlzIG5ldyBzdGF0ZS4KKysgICAgICAgTmV3IHN0YXRlIGlzIGZpbmFsIHN0YXRlID0+IGRvbid0IGJvdGhlciB0byBzaGlmdCwKKysgICAgICAganVzdCByZXR1cm4gc3VjY2Vzcy4KKysgICAgIDAsIG9yIG1vc3QgbmVnYXRpdmUgbnVtYmVyID0+IGVycm9yLiAgKi8KKysKKysgIGlmICh5eW4gPCAwKQorKyAgICB7CisrICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisrCWdvdG8geXllcnJsYWI7CisrICAgICAgeXluID0gLXl5bjsKKysgICAgICBnb3RvIHl5cmVkdWNlOworKyAgICB9CisrICBlbHNlIGlmICh5eW4gPT0gMCkKKysgICAgZ290byB5eWVycmxhYjsKKysKKysgIGlmICh5eW4gPT0gWVlGSU5BTCkKKysgICAgWVlBQ0NFUFQ7CisrCisrICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKysgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsCisrCSAgICAgIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSkpOworKworKyAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hpZnRlZCB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKysgIGlmICh5eWNoYXIgIT0gWVlFT0YpCisrICAgIHl5Y2hhciA9IFlZRU1QVFk7CisrCisrICAqKyt5eXZzcCA9IHl5bHZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bGxvYzsKKysjZW5kaWYKKysKKysgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKysgICAgIHN0YXR1cy4gICovCisrICBpZiAoeXllcnJzdGF0dXMpCisrICAgIHl5ZXJyc3RhdHVzLS07CisrCisrICB5eXN0YXRlID0geXluOworKyAgZ290byB5eW5ld3N0YXRlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZGVmYXVsdDoKKysgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworKyAgaWYgKHl5biA9PSAwKQorKyAgICBnb3RvIHl5ZXJybGFiOworKyAgZ290byB5eXJlZHVjZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eXJlZHVjZToKKysgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisrICB5eWxlbiA9IHl5cjJbeXluXTsKKysKKysgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorKyAgICAgYCQkID0gJDEnLgorKworKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byB0aGUgc2VtYW50aWMgdmFsdWUgb2YKKysgICAgIHRoZSBsb29rYWhlYWQgdG9rZW4uICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKysgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisrICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKysgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisrICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworKworKyNpZiBZWUxTUF9ORUVERUQKKysgIC8qIFNpbWlsYXJseSBmb3IgdGhlIGRlZmF1bHQgbG9jYXRpb24uICBMZXQgdGhlIHVzZXIgcnVuIGFkZGl0aW9uYWwKKysgICAgIGNvbW1hbmRzIGlmIGZvciBpbnN0YW5jZSBsb2NhdGlvbnMgYXJlIHJhbmdlcy4gICovCisrICB5eWxvYyA9IHl5bHNwWzEteXlsZW5dOworKyAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXlsc3AgLSB5eWxlbiksIHl5bGVuKTsKKysjZW5kaWYKKysKKysjaWYgWVlERUJVRworKyAgLyogV2UgaGF2ZSB0byBrZWVwIHRoaXMgYCNpZiBZWURFQlVHJywgc2luY2Ugd2UgdXNlIHZhcmlhYmxlcyB3aGljaAorKyAgICAgYXJlIGRlZmluZWQgb25seSBpZiBgWVlERUJVRycgaXMgc2V0LiAgKi8KKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgaW50IHl5aTsKKysKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHZpYSBydWxlICVkIChsaW5lICVkKSwgIiwKKysJCSB5eW4sIHl5cmxpbmVbeXluXSk7CisrCisrICAgICAgLyogUHJpbnQgdGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZCwgYW5kIHRoZWlyIHJlc3VsdC4gICovCisrICAgICAgZm9yICh5eWkgPSB5eXByaHNbeXluXTsgeXlyaHNbeXlpXSA+IDA7IHl5aSsrKQorKwlZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIHl5dG5hbWVbeXlyaHNbeXlpXV0pOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiIC0+ICVzXG4iLCB5eXRuYW1lW3l5cjFbeXluXV0pOworKyAgICB9CisrI2VuZGlmCisrCisrICBzd2l0Y2ggKHl5bikgeworKworK2Nhc2UgMToKKysjbGluZSAxNTEgInBsdXJhbC55IgorK3sKKysJICAgIGlmICh5eXZzcFswXS5leHAgPT0gTlVMTCkKKysJICAgICAgWVlBQk9SVDsKKysJICAgICgoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+cmVzID0geXl2c3BbMF0uZXhwOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAyOgorKyNsaW5lIDE1OSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8zIChxbW9wLCB5eXZzcFstNF0uZXhwLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAzOgorKyNsaW5lIDE2MyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yIChsb3IsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDQ6CisrI2xpbmUgMTY3ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKGxhbmQsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDU6CisrI2xpbmUgMTcxICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgNjoKKysjbGluZSAxNzUgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA3OgorKyNsaW5lIDE3OSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDg6CisrI2xpbmUgMTgzICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgOToKKysjbGluZSAxODcgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMSAobG5vdCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMTA6CisrI2xpbmUgMTkxICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzAgKHZhcik7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDExOgorKyNsaW5lIDE5NSAicGx1cmFsLnkiCisreworKwkgICAgaWYgKCh5eXZhbC5leHAgPSBuZXdfZXhwXzAgKG51bSkpICE9IE5VTEwpCisrCSAgICAgIHl5dmFsLmV4cC0+dmFsLm51bSA9IHl5dnNwWzBdLm51bTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMTI6CisrI2xpbmUgMjAwICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSB5eXZzcFstMV0uZXhwOworKwkgIH0KKysgICAgYnJlYWs7CisrfQorKworKyNsaW5lIDcwNSAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrDAorKyAgeXl2c3AgLT0geXlsZW47CisrICB5eXNzcCAtPSB5eWxlbjsKKysjaWYgWVlMU1BfTkVFREVECisrICB5eWxzcCAtPSB5eWxlbjsKKysjZW5kaWYKKysKKysjaWYgWVlERUJVRworKyAgaWYgKHl5ZGVidWcpCisrICAgIHsKKysgICAgICBzaG9ydCAqeXlzc3AxID0geXlzcyAtIDE7CisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsKKysgICAgICB3aGlsZSAoeXlzc3AxICE9IHl5c3NwKQorKwlZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICorK3l5c3NwMSk7CisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworKyAgICB9CisrI2VuZGlmCisrCisrICAqKyt5eXZzcCA9IHl5dmFsOworKyNpZiBZWUxTUF9ORUVERUQKKysgICorK3l5bHNwID0geXlsb2M7CisrI2VuZGlmCisrCisrICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisrICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCisrCisrICB5eW4gPSB5eXIxW3l5bl07CisrCisrICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UQkFTRV0gKyAqeXlzc3A7CisrICBpZiAoeXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKysgIGVsc2UKKysgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisrCisrICBnb3RvIHl5bmV3c3RhdGU7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJsYWI6CisrICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKysgIGlmICgheXllcnJzdGF0dXMpCisrICAgIHsKKysgICAgICArK3l5bmVycnM7CisrCisrI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKysKKysgICAgICBpZiAoeXluID4gWVlGTEFHICYmIHl5biA8IFlZTEFTVCkKKysJeworKwkgIFlZU0laRV9UIHl5c2l6ZSA9IDA7CisrCSAgY2hhciAqeXltc2c7CisrCSAgaW50IHl5eCwgeXljb3VudDsKKysKKysJICB5eWNvdW50ID0gMDsKKysJICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisrCSAgICAgWVlDSEVDSy4gICovCisrCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7CisrCSAgICAgICB5eXggPCAoaW50KSAoc2l6ZW9mICh5eXRuYW1lKSAvIHNpemVvZiAoY2hhciAqKSk7IHl5eCsrKQorKwkgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXgpCisrCSAgICAgIHl5c2l6ZSArPSB5eXN0cmxlbiAoeXl0bmFtZVt5eXhdKSArIDE1LCB5eWNvdW50Kys7CisrCSAgeXlzaXplICs9IHl5c3RybGVuICgicGFyc2UgZXJyb3IsIHVuZXhwZWN0ZWQgIikgKyAxOworKwkgIHl5c2l6ZSArPSB5eXN0cmxlbiAoeXl0bmFtZVtZWVRSQU5TTEFURSAoeXljaGFyKV0pOworKwkgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlzaXplKTsKKysJICBpZiAoeXltc2cgIT0gMCkKKysJICAgIHsKKysJICAgICAgY2hhciAqeXlwID0geXlzdHBjcHkgKHl5bXNnLCAicGFyc2UgZXJyb3IsIHVuZXhwZWN0ZWQgIik7CisrCSAgICAgIHl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbWVlUUkFOU0xBVEUgKHl5Y2hhcildKTsKKysKKysJICAgICAgaWYgKHl5Y291bnQgPCA1KQorKwkJeworKwkJICB5eWNvdW50ID0gMDsKKysJCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7CisrCQkgICAgICAgeXl4IDwgKGludCkgKHNpemVvZiAoeXl0bmFtZSkgLyBzaXplb2YgKGNoYXIgKikpOworKwkJICAgICAgIHl5eCsrKQorKwkJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorKwkJICAgICAgeworKwkJCWNvbnN0IGNoYXIgKnl5cSA9ICEgeXljb3VudCA/ICIsIGV4cGVjdGluZyAiIDogIiBvciAiOworKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5cSk7CisrCQkJeXlwID0geXlzdHBjcHkgKHl5cCwgeXl0bmFtZVt5eXhdKTsKKysJCQl5eWNvdW50Kys7CisrCQkgICAgICB9CisrCQl9CisrCSAgICAgIHl5ZXJyb3IgKHl5bXNnKTsKKysJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeXllcnJvciAoInBhcnNlIGVycm9yOyBhbHNvIHZpcnR1YWwgbWVtb3J5IGV4aGF1c3RlZCIpOworKwl9CisrICAgICAgZWxzZQorKyNlbmRpZiAvKiBkZWZpbmVkIChZWUVSUk9SX1ZFUkJPU0UpICovCisrCXl5ZXJyb3IgKCJwYXJzZSBlcnJvciIpOworKyAgICB9CisrICBnb3RvIHl5ZXJybGFiMTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJsYWIxIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IGFuIGFjdGlvbiB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycmxhYjE6CisrICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKysgICAgeworKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKysJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKysKKysgICAgICAvKiByZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQgKi8KKysgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQorKwlZWUFCT1JUOworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkRpc2NhcmRpbmcgdG9rZW4gJWQgKCVzKS5cbiIsCisrCQkgIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSkpOworKyAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisrICAgIH0KKysKKysgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorKyAgICAgdG9rZW4uICAqLworKworKyAgeXllcnJzdGF0dXMgPSAzOwkJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzICovCisrCisrICBnb3RvIHl5ZXJyaGFuZGxlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJyZGVmYXVsdCAtLSBjdXJyZW50IHN0YXRlIGRvZXMgbm90IGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIHRoZSB8CisrfCBlcnJvciB0b2tlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycmRlZmF1bHQ6CisrI2lmIDAKKysgIC8qIFRoaXMgaXMgd3Jvbmc7IG9ubHkgc3RhdGVzIHRoYXQgZXhwbGljaXRseSB3YW50IGVycm9yIHRva2VucworKyAgICAgc2hvdWxkIHNoaWZ0IHRoZW0uICAqLworKworKyAgLyogSWYgaXRzIGRlZmF1bHQgaXMgdG8gYWNjZXB0IGFueSB0b2tlbiwgb2suICBPdGhlcndpc2UgcG9wIGl0LiAgKi8KKysgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworKyAgaWYgKHl5bikKKysgICAgZ290byB5eWRlZmF1bHQ7CisrI2VuZGlmCisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycnBvcCAtLSBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSB8CisrfCBlcnJvciB0b2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJwb3A6CisrICBpZiAoeXlzc3AgPT0geXlzcykKKysgICAgWVlBQk9SVDsKKysgIHl5dnNwLS07CisrICB5eXN0YXRlID0gKi0teXlzc3A7CisrI2lmIFlZTFNQX05FRURFRAorKyAgeXlsc3AtLTsKKysjZW5kaWYKKysKKysjaWYgWVlERUJVRworKyAgaWYgKHl5ZGVidWcpCisrICAgIHsKKysgICAgICBzaG9ydCAqeXlzc3AxID0geXlzcyAtIDE7CisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJFcnJvcjogc3RhdGUgc3RhY2sgbm93Iik7CisrICAgICAgd2hpbGUgKHl5c3NwMSAhPSB5eXNzcCkKKysJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKysgICAgfQorKyNlbmRpZgorKworKy8qLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycmhhbmRsZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJyaGFuZGxlOgorKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworKyAgaWYgKHl5biA9PSBZWUZMQUcpCisrICAgIGdvdG8geXllcnJkZWZhdWx0OworKworKyAgeXluICs9IFlZVEVSUk9SOworKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSBZWVRFUlJPUikKKysgICAgZ290byB5eWVycmRlZmF1bHQ7CisrCisrICB5eW4gPSB5eXRhYmxlW3l5bl07CisrICBpZiAoeXluIDwgMCkKKysgICAgeworKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorKwlnb3RvIHl5ZXJycG9wOworKyAgICAgIHl5biA9IC15eW47CisrICAgICAgZ290byB5eXJlZHVjZTsKKysgICAgfQorKyAgZWxzZSBpZiAoeXluID09IDApCisrICAgIGdvdG8geXllcnJwb3A7CisrCisrICBpZiAoeXluID09IFlZRklOQUwpCisrICAgIFlZQUNDRVBUOworKworKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU2hpZnRpbmcgZXJyb3IgdG9rZW4sICIpKTsKKysKKysgICorK3l5dnNwID0geXlsdmFsOworKyNpZiBZWUxTUF9ORUVERUQKKysgICorK3l5bHNwID0geXlsbG9jOworKyNlbmRpZgorKworKyAgeXlzdGF0ZSA9IHl5bjsKKysgIGdvdG8geXluZXdzdGF0ZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWFjY2VwdGxhYjoKKysgIHl5cmVzdWx0ID0gMDsKKysgIGdvdG8geXlyZXR1cm47CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlhYm9ydGxhYjoKKysgIHl5cmVzdWx0ID0gMTsKKysgIGdvdG8geXlyZXR1cm47CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eW92ZXJmbG93YWIgLS0gcGFyc2VyIG92ZXJmbG93IGNvbWVzIGhlcmUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlvdmVyZmxvd2xhYjoKKysgIHl5ZXJyb3IgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciKTsKKysgIHl5cmVzdWx0ID0gMjsKKysgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisreXlyZXR1cm46CisrI2lmbmRlZiB5eW92ZXJmbG93CisrICBpZiAoeXlzcyAhPSB5eXNzYSkKKysgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKysjZW5kaWYKKysgIHJldHVybiB5eXJlc3VsdDsKKyt9CisrI2xpbmUgMjA1ICJwbHVyYWwueSIKKysKKysKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCisreworKyAgaWYgKGV4cCA9PSBOVUxMKQorKyAgICByZXR1cm47CisrCisrICAvKiBIYW5kbGUgdGhlIHJlY3Vyc2l2ZSBjYXNlLiAgKi8KKysgIHN3aXRjaCAoZXhwLT5uYXJncykKKysgICAgeworKyAgICBjYXNlIDM6CisrICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzJdKTsKKysgICAgICAvKiBGQUxMVEhST1VHSCAqLworKyAgICBjYXNlIDI6CisrICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzFdKTsKKysgICAgICAvKiBGQUxMVEhST1VHSCAqLworKyAgICBjYXNlIDE6CisrICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzBdKTsKKysgICAgICAvKiBGQUxMVEhST1VHSCAqLworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICBmcmVlIChleHApOworK30KKysKKysKKytzdGF0aWMgaW50CisreXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKQorK3sKKysgIGNvbnN0IGNoYXIgKmV4cCA9ICpwZXhwOworKyAgaW50IHJlc3VsdDsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgaWYgKGV4cFswXSA9PSAnXDAnKQorKwl7CisrCSAgKnBleHAgPSBleHA7CisrCSAgcmV0dXJuIFlZRU9GOworKwl9CisrCisrICAgICAgaWYgKGV4cFswXSAhPSAnICcgJiYgZXhwWzBdICE9ICdcdCcpCisrCWJyZWFrOworKworKyAgICAgICsrZXhwOworKyAgICB9CisrCisrICByZXN1bHQgPSAqZXhwKys7CisrICBzd2l0Y2ggKHJlc3VsdCkKKysgICAgeworKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisrICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKysgICAgICB7CisrCXVuc2lnbmVkIGxvbmcgaW50IG4gPSByZXN1bHQgLSAnMCc7CisrCXdoaWxlIChleHBbMF0gPj0gJzAnICYmIGV4cFswXSA8PSAnOScpCisrCSAgeworKwkgICAgbiAqPSAxMDsKKysJICAgIG4gKz0gZXhwWzBdIC0gJzAnOworKwkgICAgKytleHA7CisrCSAgfQorKwlsdmFsLT5udW0gPSBuOworKwlyZXN1bHQgPSBOVU1CRVI7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc9JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZXF1YWw7CisrCSAgcmVzdWx0ID0gRVFVT1AyOworKwl9CisrICAgICAgZWxzZQorKwlyZXN1bHQgPSBZWUVSUkNPREU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyEnOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBub3RfZXF1YWw7CisrCSAgcmVzdWx0ID0gRVFVT1AyOworKwl9CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyYnOgorKyAgICBjYXNlICd8JzoKKysgICAgICBpZiAoZXhwWzBdID09IHJlc3VsdCkKKysJKytleHA7CisrICAgICAgZWxzZQorKwlyZXN1bHQgPSBZWUVSUkNPREU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJzwnOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBsZXNzX29yX2VxdWFsOworKwl9CisrICAgICAgZWxzZQorKwlsdmFsLT5vcCA9IGxlc3NfdGhhbjsKKysgICAgICByZXN1bHQgPSBDTVBPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJz4nOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBncmVhdGVyX29yX2VxdWFsOworKwl9CisrICAgICAgZWxzZQorKwlsdmFsLT5vcCA9IGdyZWF0ZXJfdGhhbjsKKysgICAgICByZXN1bHQgPSBDTVBPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyonOgorKyAgICAgIGx2YWwtPm9wID0gbXVsdDsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJy8nOgorKyAgICAgIGx2YWwtPm9wID0gZGl2aWRlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnJSc6CisrICAgICAgbHZhbC0+b3AgPSBtb2R1bGU7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcrJzoKKysgICAgICBsdmFsLT5vcCA9IHBsdXM7CisrICAgICAgcmVzdWx0ID0gQURET1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICctJzoKKysgICAgICBsdmFsLT5vcCA9IG1pbnVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnbic6CisrICAgIGNhc2UgJz8nOgorKyAgICBjYXNlICc6JzoKKysgICAgY2FzZSAnKCc6CisrICAgIGNhc2UgJyknOgorKyAgICAgIC8qIE5vdGhpbmcsIGp1c3QgcmV0dXJuIHRoZSBjaGFyYWN0ZXIuICAqLworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc7JzoKKysgICAgY2FzZSAnXG4nOgorKyAgICBjYXNlICdcMCc6CisrICAgICAgLyogQmUgc2FmZSBhbmQgbGV0IHRoZSB1c2VyIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4gICovCisrICAgICAgLS1leHA7CisrICAgICAgcmVzdWx0ID0gWVlFT0Y7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmVzdWx0ID0gWVlFUlJDT0RFOworKyNpZiBZWURFQlVHICE9IDAKKysgICAgICAtLWV4cDsKKysjZW5kaWYKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgKnBleHAgPSBleHA7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKytzdGF0aWMgdm9pZAorK3l5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cikKKyt7CisrICAvKiBEbyBub3RoaW5nLiAgV2UgZG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgaGVyZS4gICovCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC1leHAuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwtZXhwLmMJMjAwNC0wOS0xMiAxNDo0MDozNC41Nzg3MTQxOTIgLTA0MDAKK0BAIC0wLDAgKzEsMTU0IEBACisrLyogRXhwcmVzc2lvbiBwYXJzaW5nIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysKKysjaWYgKGRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgX19BUFBMRV9DQ19fKSBcCisrICAgIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorKworKy8qIFRoZXNlIHN0cnVjdHMgYXJlIHRoZSBjb25zdGFudCBleHByZXNzaW9uIGZvciB0aGUgZ2VybWFuaWMgcGx1cmFsCisrICAgZm9ybSBkZXRlcm1pbmF0aW9uLiAgSXQgcmVwcmVzZW50cyB0aGUgZXhwcmVzc2lvbiAgIm4gIT0gMSIuICAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwcmVzc2lvbiBwbHZhciA9CisreworKyAgLm5hcmdzID0gMCwKKysgIC5vcGVyYXRpb24gPSB2YXIsCisrfTsKKytzdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGxvbmUgPQorK3sKKysgIC5uYXJncyA9IDAsCisrICAub3BlcmF0aW9uID0gbnVtLAorKyAgLnZhbCA9CisrICB7CisrICAgIC5udW0gPSAxCisrICB9CisrfTsKKytzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUwgPQorK3sKKysgIC5uYXJncyA9IDIsCisrICAub3BlcmF0aW9uID0gbm90X2VxdWFsLAorKyAgLnZhbCA9CisrICB7CisrICAgIC5hcmdzID0KKysgICAgeworKyAgICAgIFswXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGx2YXIsCisrICAgICAgWzFdID0gKHN0cnVjdCBleHByZXNzaW9uICopICZwbG9uZQorKyAgICB9CisrICB9CisrfTsKKysKKysjIGRlZmluZSBJTklUX0dFUk1BTklDX1BMVVJBTCgpCisrCisrI2Vsc2UKKysKKysvKiBGb3IgY29tcGlsZXJzIHdpdGhvdXQgc3VwcG9ydCBmb3IgSVNPIEMgOTkgc3RydWN0L3VuaW9uIGluaXRpYWxpemVyczoKKysgICBJbml0aWFsaXphdGlvbiBhdCBydW4tdGltZS4gICovCisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uIHBsdmFyOworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiBwbG9uZTsKKytzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUw7CisrCisrc3RhdGljIHZvaWQKKytpbml0X2dlcm1hbmljX3BsdXJhbCAoKQorK3sKKysgIGlmIChwbG9uZS52YWwubnVtID09IDApCisrICAgIHsKKysgICAgICBwbHZhci5uYXJncyA9IDA7CisrICAgICAgcGx2YXIub3BlcmF0aW9uID0gdmFyOworKworKyAgICAgIHBsb25lLm5hcmdzID0gMDsKKysgICAgICBwbG9uZS5vcGVyYXRpb24gPSBudW07CisrICAgICAgcGxvbmUudmFsLm51bSA9IDE7CisrCisrICAgICAgR0VSTUFOSUNfUExVUkFMLm5hcmdzID0gMjsKKysgICAgICBHRVJNQU5JQ19QTFVSQUwub3BlcmF0aW9uID0gbm90X2VxdWFsOworKyAgICAgIEdFUk1BTklDX1BMVVJBTC52YWwuYXJnc1swXSA9ICZwbHZhcjsKKysgICAgICBHRVJNQU5JQ19QTFVSQUwudmFsLmFyZ3NbMV0gPSAmcGxvbmU7CisrICAgIH0KKyt9CisrCisrIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKSBpbml0X2dlcm1hbmljX3BsdXJhbCAoKQorKworKyNlbmRpZgorKworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK0VYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKGNvbnN0IGNoYXIgKm51bGxlbnRyeSwgc3RydWN0IGV4cHJlc3Npb24gKipwbHVyYWxwLAorKwkJCSAgIHVuc2lnbmVkIGxvbmcgaW50ICpucGx1cmFsc3ApCisreworKyAgaWYgKG51bGxlbnRyeSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqcGx1cmFsOworKyAgICAgIGNvbnN0IGNoYXIgKm5wbHVyYWxzOworKworKyAgICAgIHBsdXJhbCA9IHN0cnN0ciAobnVsbGVudHJ5LCAicGx1cmFsPSIpOworKyAgICAgIG5wbHVyYWxzID0gc3Ryc3RyIChudWxsZW50cnksICJucGx1cmFscz0iKTsKKysgICAgICBpZiAocGx1cmFsID09IE5VTEwgfHwgbnBsdXJhbHMgPT0gTlVMTCkKKysJZ290byBub19wbHVyYWw7CisrICAgICAgZWxzZQorKwl7CisrCSAgY2hhciAqZW5kcDsKKysJICB1bnNpZ25lZCBsb25nIGludCBuOworKwkgIHN0cnVjdCBwYXJzZV9hcmdzIGFyZ3M7CisrCisrCSAgLyogRmlyc3QgZ2V0IHRoZSBudW1iZXIuICAqLworKwkgIG5wbHVyYWxzICs9IDk7CisrCSAgd2hpbGUgKCpucGx1cmFscyAhPSAnXDAnICYmIGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqbnBsdXJhbHMpKQorKwkgICAgKytucGx1cmFsczsKKysJICBpZiAoISgqbnBsdXJhbHMgPj0gJzAnICYmICpucGx1cmFscyA8PSAnOScpKQorKwkgICAgZ290byBub19wbHVyYWw7CisrI2lmIGRlZmluZWQgSEFWRV9TVFJUT1VMIHx8IGRlZmluZWQgX0xJQkMKKysJICBuID0gc3RydG91bCAobnBsdXJhbHMsICZlbmRwLCAxMCk7CisrI2Vsc2UKKysJICBmb3IgKGVuZHAgPSBucGx1cmFscywgbiA9IDA7ICplbmRwID49ICcwJyAmJiAqZW5kcCA8PSAnOSc7IGVuZHArKykKKysJICAgIG4gPSBuICogMTAgKyAoKmVuZHAgLSAnMCcpOworKyNlbmRpZgorKwkgIGlmIChucGx1cmFscyA9PSBlbmRwKQorKwkgICAgZ290byBub19wbHVyYWw7CisrCSAgKm5wbHVyYWxzcCA9IG47CisrCisrCSAgLyogRHVlIHRvIHRoZSByZXN0cmljdGlvbnMgYmlzb24gaW1wb3NlcyBvbnRvIHRoZSBpbnRlcmZhY2Ugb2YgdGhlCisrCSAgICAgc2Nhbm5lciBmdW5jdGlvbiB3ZSBoYXZlIHRvIHB1dCB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgcmVzdWx0CisrCSAgICAgcGFzc2VkIHVwIGZyb20gdGhlIHBhcnNlciBpbnRvIHRoZSBzYW1lIHN0cnVjdHVyZSB3aGljaCBhZGRyZXNzCisrCSAgICAgaXMgcGFzc2VkIGRvd24gdG8gdGhlIHBhcnNlci4gICovCisrCSAgcGx1cmFsICs9IDc7CisrCSAgYXJncy5jcCA9IHBsdXJhbDsKKysJICBpZiAoUExVUkFMX1BBUlNFICgmYXJncykgIT0gMCkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKwkgICpwbHVyYWxwID0gYXJncy5yZXM7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogQnkgZGVmYXVsdCB3ZSBhcmUgdXNpbmcgdGhlIEdlcm1hbmljIGZvcm06IHNpbmd1bGFyIGZvcm0gb25seQorKyAgICAgICAgIGZvciBgb25lJywgdGhlIHBsdXJhbCBmb3JtIG90aGVyd2lzZS4gIFllcywgdGhpcyBpcyBhbHNvIHdoYXQKKysgICAgICAgICBFbmdsaXNoIGlzIHVzaW5nIHNpbmNlIEVuZ2xpc2ggaXMgYSBHZXJtYW5pYyBsYW5ndWFnZS4gICovCisrICAgIG5vX3BsdXJhbDoKKysgICAgICBJTklUX0dFUk1BTklDX1BMVVJBTCAoKTsKKysgICAgICAqcGx1cmFscCA9ICZHRVJNQU5JQ19QTFVSQUw7CisrICAgICAgKm5wbHVyYWxzcCA9IDI7CisrICAgIH0KKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcGx1cmFsLWV4cC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BsdXJhbC1leHAuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjU4NDcxMzI4MCAtMDQwMAorQEAgLTAsMCArMSwxMTggQEAKKysvKiBFeHByZXNzaW9uIHBhcnNpbmcgYW5kIGV2YWx1YXRpb24gZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAyMDAwLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9QTFVSQUxfRVhQX0gKKysjZGVmaW5lIF9QTFVSQUxfRVhQX0gKKysKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysjaWZuZGVmIGF0dHJpYnV0ZV9oaWRkZW4KKysjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisrI2VuZGlmCisrCisrCisrLyogVGhpcyBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGV4cHJlc3Npb25zIHRvIGRldGVybWluZSB0aGUKKysgICBwbHVyYWwgZm9ybS4gICovCisrc3RydWN0IGV4cHJlc3Npb24KKyt7CisrICBpbnQgbmFyZ3M7CQkJLyogTnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisrICBlbnVtIG9wZXJhdG9yCisrICB7CisrICAgIC8qIFdpdGhvdXQgYXJndW1lbnRzOiAgKi8KKysgICAgdmFyLAkJCS8qIFRoZSB2YXJpYWJsZSAibiIuICAqLworKyAgICBudW0sCQkJLyogRGVjaW1hbCBudW1iZXIuICAqLworKyAgICAvKiBVbmFyeSBvcGVyYXRvcnM6ICAqLworKyAgICBsbm90LAkJCS8qIExvZ2ljYWwgTk9ULiAgKi8KKysgICAgLyogQmluYXJ5IG9wZXJhdG9yczogICovCisrICAgIG11bHQsCQkJLyogTXVsdGlwbGljYXRpb24uICAqLworKyAgICBkaXZpZGUsCQkJLyogRGl2aXNpb24uICAqLworKyAgICBtb2R1bGUsCQkJLyogTW9kdWxvIG9wZXJhdGlvbi4gICovCisrICAgIHBsdXMsCQkJLyogQWRkaXRpb24uICAqLworKyAgICBtaW51cywJCQkvKiBTdWJ0cmFjdGlvbi4gICovCisrICAgIGxlc3NfdGhhbiwJCQkvKiBDb21wYXJpc29uLiAgKi8KKysgICAgZ3JlYXRlcl90aGFuLAkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGxlc3Nfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKysgICAgZ3JlYXRlcl9vcl9lcXVhbCwJCS8qIENvbXBhcmlzb24uICAqLworKyAgICBlcXVhbCwJCQkvKiBDb21wYXJpc29uIGZvciBlcXVhbGl0eS4gICovCisrICAgIG5vdF9lcXVhbCwJCQkvKiBDb21wYXJpc29uIGZvciBpbmVxdWFsaXR5LiAgKi8KKysgICAgbGFuZCwJCQkvKiBMb2dpY2FsIEFORC4gICovCisrICAgIGxvciwJCQkvKiBMb2dpY2FsIE9SLiAgKi8KKysgICAgLyogVGVybmFyeSBvcGVyYXRvcnM6ICAqLworKyAgICBxbW9wCQkJLyogUXVlc3Rpb24gbWFyayBvcGVyYXRvci4gICovCisrICB9IG9wZXJhdGlvbjsKKysgIHVuaW9uCisrICB7CisrICAgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsJLyogTnVtYmVyIHZhbHVlIGZvciBgbnVtJy4gICovCisrICAgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOwkvKiBVcCB0byB0aHJlZSBhcmd1bWVudHMuICAqLworKyAgfSB2YWw7CisrfTsKKysKKysvKiBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBwYXJzZXIgYW5kIGdldAorKyAgIHRoZSByZXN1bHQgaW4gYSB0aHJlYWQtc2FmZSB3YXkuICAqLworK3N0cnVjdCBwYXJzZV9hcmdzCisreworKyAgY29uc3QgY2hhciAqY3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmVzOworK307CisrCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhpcyBzb3VyY2UgY29kZSBpcyB1c2VkCisrICAgMS4gaW4gdGhlIEdOVSBDIExpYnJhcnkgbGlicmFyeSwKKysgICAyLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSwKKysgICAzLiBpbiB0aGUgR05VIGdldHRleHQgdG9vbHMuCisrICAgVGhlIGZ1bmN0aW9uIG5hbWVzIGluIGVhY2ggc2l0dWF0aW9uIG11c3QgYmUgZGlmZmVyZW50LCB0byBhbGxvdyBmb3IKKysgICBiaW5hcnkgaW5jb21wYXRpYmxlIGNoYW5nZXMgaW4gJ3N0cnVjdCBleHByZXNzaW9uJy4gIEZ1cnRoZXJtb3JlLAorKyAgIDEuIGluIHRoZSBHTlUgQyBMaWJyYXJ5IGxpYnJhcnksIHRoZSBuYW1lcyBoYXZlIGEgX18gcHJlZml4LAorKyAgIDIuKzMuIGluIHRoZSBHTlUgbGliaW50bCBsaWJyYXJ5IGFuZCBpbiB0aGUgR05VIGdldHRleHQgdG9vbHMsIHRoZSBuYW1lcworKyAgICAgICAgIG11c3QgZm9sbG93IEFOU0kgQyBhbmQgbm90IHN0YXJ0IHdpdGggX18uCisrICAgU28gd2UgaGF2ZSB0byBkaXN0aW5ndWlzaCB0aGUgdGhyZWUgY2FzZXMuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBfX2dldHRleHRfZnJlZV9leHAKKysjIGRlZmluZSBQTFVSQUxfUEFSU0UgX19nZXR0ZXh0cGFyc2UKKysjIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgX19nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbAorKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gX19nZXR0ZXh0X2V4dHJhY3RfcGx1cmFsCisrI2VsaWYgZGVmaW5lZCAoSU5fTElCSU5UTCkKKysjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gbGliaW50bF9nZXR0ZXh0X2ZyZWVfZXhwCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIGxpYmludGxfZ2V0dGV4dHBhcnNlCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIGxpYmludGxfZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwKKysjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIGxpYmludGxfZ2V0dGV4dF9leHRyYWN0X3BsdXJhbAorKyNlbHNlCisrIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIGZyZWVfcGx1cmFsX2V4cHJlc3Npb24KKysjIGRlZmluZSBQTFVSQUxfUEFSU0UgcGFyc2VfcGx1cmFsX2V4cHJlc3Npb24KKysjIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgZ2VybWFuaWNfcGx1cmFsCisrIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBleHRyYWN0X3BsdXJhbF9leHByZXNzaW9uCisrI2VuZGlmCisrCisrZXh0ZXJuIHZvaWQgRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrZXh0ZXJuIGludCBQTFVSQUxfUEFSU0UgKHZvaWQgKmFyZyk7CisrZXh0ZXJuIHN0cnVjdCBleHByZXNzaW9uIEdFUk1BTklDX1BMVVJBTCBhdHRyaWJ1dGVfaGlkZGVuOworK2V4dGVybiB2b2lkIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKGNvbnN0IGNoYXIgKm51bGxlbnRyeSwKKysJCQkJICAgICAgIHN0cnVjdCBleHByZXNzaW9uICoqcGx1cmFscCwKKysJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpucGx1cmFsc3ApCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKysjaWYgIWRlZmluZWQgKF9MSUJDKSAmJiAhZGVmaW5lZCAoSU5fTElCSU5UTCkKKytleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgcGx1cmFsX2V2YWwgKHN0cnVjdCBleHByZXNzaW9uICpwZXhwLAorKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBuKTsKKysjZW5kaWYKKysKKysjZW5kaWYgLyogX1BMVVJBTF9FWFBfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC55CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BsdXJhbC55CTIwMDQtMDktMTIgMTQ6NDA6MzQuNTg5NzEyNTIwIC0wNDAwCitAQCAtMCwwICsxLDM4MSBAQAorKyV7CisrLyogRXhwcmVzc2lvbiBwYXJzaW5nIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGhlIGJpc29uIGdlbmVyYXRlZCBwYXJzZXIgdXNlcyBhbGxvY2EuICBBSVggMyBmb3JjZXMgdXMgdG8gcHV0IHRoaXMKKysgICBkZWNsYXJhdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlIGRlY2xhcmF0aW9uIGluIGJpc29uJ3MKKysgICBza2VsZXRvbiBmaWxlIGNvbWVzIHRvbyBsYXRlLiAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4KKysgICBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUgYXJiaXRyYXJ5IHN5c3RlbSBoZWFkZXJzLiAgKi8KKysjaWYgZGVmaW5lZCBfQUlYICYmICFkZWZpbmVkIF9fR05VQ19fCisrICNwcmFnbWEgYWxsb2NhCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysKKysvKiBUaGUgbWFpbiBmdW5jdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciBpcyBjYWxsZWQgX19nZXR0ZXh0cGFyc2UsCisrICAgYnV0IHdlIHdhbnQgaXQgdG8gYmUgY2FsbGVkIFBMVVJBTF9QQVJTRS4gICovCisrI2lmbmRlZiBfTElCQworKyMgZGVmaW5lIF9fZ2V0dGV4dHBhcnNlIFBMVVJBTF9QQVJTRQorKyNlbmRpZgorKworKyNkZWZpbmUgWVlMRVhfUEFSQU0JJigoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+Y3AKKysjZGVmaW5lIFlZUEFSU0VfUEFSQU0JYXJnCisrJX0KKyslcHVyZV9wYXJzZXIKKyslZXhwZWN0IDcKKysKKysldW5pb24geworKyAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOworKyAgZW51bSBvcGVyYXRvciBvcDsKKysgIHN0cnVjdCBleHByZXNzaW9uICpleHA7CisrfQorKworKyV7CisrLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKytzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCk7Cisrc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqc3RyKTsKKysKKysvKiBBbGxvY2F0aW9uIG9mIGV4cHJlc3Npb25zLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHAgKGludCBuYXJncywgZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKiBjb25zdCAqYXJncykKKyt7CisrICBpbnQgaTsKKysgIHN0cnVjdCBleHByZXNzaW9uICpuZXdwOworKworKyAgLyogSWYgYW55IG9mIHRoZSBhcmd1bWVudCBjb3VsZCBub3QgYmUgbWFsbG9jJ2VkLCBqdXN0IHJldHVybiBOVUxMLiAgKi8KKysgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIGlmIChhcmdzW2ldID09IE5VTEwpCisrICAgICAgZ290byBmYWlsOworKworKyAgLyogQWxsb2NhdGUgYSBuZXcgZXhwcmVzc2lvbi4gICovCisrICBuZXdwID0gKHN0cnVjdCBleHByZXNzaW9uICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOworKyAgaWYgKG5ld3AgIT0gTlVMTCkKKysgICAgeworKyAgICAgIG5ld3AtPm5hcmdzID0gbmFyZ3M7CisrICAgICAgbmV3cC0+b3BlcmF0aW9uID0gb3A7CisrICAgICAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysJbmV3cC0+dmFsLmFyZ3NbaV0gPSBhcmdzW2ldOworKyAgICAgIHJldHVybiBuZXdwOworKyAgICB9CisrCisrIGZhaWw6CisrICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICBGUkVFX0VYUFJFU1NJT04gKGFyZ3NbaV0pOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMCAoZW51bSBvcGVyYXRvciBvcCkKKyt7CisrICByZXR1cm4gbmV3X2V4cCAoMCwgb3AsIE5VTEwpOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzEgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1sxXTsKKysKKysgIGFyZ3NbMF0gPSByaWdodDsKKysgIHJldHVybiBuZXdfZXhwICgxLCBvcCwgYXJncyk7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8yIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqbGVmdCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzJdOworKworKyAgYXJnc1swXSA9IGxlZnQ7CisrICBhcmdzWzFdID0gcmlnaHQ7CisrICByZXR1cm4gbmV3X2V4cCAoMiwgb3AsIGFyZ3MpOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzMgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpiZXhwLAorKwkgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqdGJyYW5jaCwgc3RydWN0IGV4cHJlc3Npb24gKmZicmFuY2gpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbM107CisrCisrICBhcmdzWzBdID0gYmV4cDsKKysgIGFyZ3NbMV0gPSB0YnJhbmNoOworKyAgYXJnc1syXSA9IGZicmFuY2g7CisrICByZXR1cm4gbmV3X2V4cCAoMywgb3AsIGFyZ3MpOworK30KKysKKyslfQorKworKy8qIFRoaXMgZGVjbGFyZXMgdGhhdCBhbGwgb3BlcmF0b3JzIGhhdmUgdGhlIHNhbWUgYXNzb2NpYXRpdml0eSBhbmQgdGhlCisrICAgcHJlY2VkZW5jZSBvcmRlciBhcyBpbiBDLiAgU2VlIFtIYXJiaXNvbiwgU3RlZWxlOiBDLCBBIFJlZmVyZW5jZSBNYW51YWxdLgorKyAgIFRoZXJlIGlzIG5vIHVuYXJ5IG1pbnVzIGFuZCBubyBiaXR3aXNlIG9wZXJhdG9ycy4KKysgICBPcGVyYXRvcnMgd2l0aCB0aGUgc2FtZSBzeW50YWN0aWMgYmVoYXZpb3VyIGhhdmUgYmVlbiBtZXJnZWQgaW50byBhIHNpbmdsZQorKyAgIHRva2VuLCB0byBzYXZlIHNwYWNlIGluIHRoZSBhcnJheSBnZW5lcmF0ZWQgYnkgYmlzb24uICAqLworKyVyaWdodCAnPycJCS8qICAgPwkJKi8KKyslbGVmdCAnfCcJCS8qICAgfHwJCSovCisrJWxlZnQgJyYnCQkvKiAgICYmCQkqLworKyVsZWZ0IEVRVU9QMgkJLyogICA9PSAhPQkqLworKyVsZWZ0IENNUE9QMgkJLyogICA8ID4gPD0gPj0JKi8KKyslbGVmdCBBRERPUDIJCS8qICAgKyAtCSovCisrJWxlZnQgTVVMT1AyCQkvKiAgICogLyAlCSovCisrJXJpZ2h0ICchJwkJLyogICAhCQkqLworKworKyV0b2tlbiA8b3A+IEVRVU9QMiBDTVBPUDIgQURET1AyIE1VTE9QMgorKyV0b2tlbiA8bnVtPiBOVU1CRVIKKysldHlwZSA8ZXhwPiBleHAKKysKKyslJQorKworK3N0YXJ0OgkgIGV4cAorKwkgIHsKKysJICAgIGlmICgkMSA9PSBOVUxMKQorKwkgICAgICBZWUFCT1JUOworKwkgICAgKChzdHJ1Y3QgcGFyc2VfYXJncyAqKSBhcmcpLT5yZXMgPSAkMTsKKysJICB9CisrCTsKKysKKytleHA6CSAgZXhwICc/JyBleHAgJzonIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8zIChxbW9wLCAkMSwgJDMsICQ1KTsKKysJICB9CisrCXwgZXhwICd8JyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAobG9yLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgJyYnIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yIChsYW5kLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgRVFVT1AyIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIENNUE9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCBBRERPUDIgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgTVVMT1AyIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKysJICB9CisrCXwgJyEnIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8xIChsbm90LCAkMik7CisrCSAgfQorKwl8ICduJworKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8wICh2YXIpOworKwkgIH0KKysJfCBOVU1CRVIKKysJICB7CisrCSAgICBpZiAoKCQkID0gbmV3X2V4cF8wIChudW0pKSAhPSBOVUxMKQorKwkgICAgICAkJC0+dmFsLm51bSA9ICQxOworKwkgIH0KKysJfCAnKCcgZXhwICcpJworKwkgIHsKKysJICAgICQkID0gJDI7CisrCSAgfQorKwk7CisrCisrJSUKKysKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCisreworKyAgaWYgKGV4cCA9PSBOVUxMKQorKyAgICByZXR1cm47CisrCisrICAvKiBIYW5kbGUgdGhlIHJlY3Vyc2l2ZSBjYXNlLiAgKi8KKysgIHN3aXRjaCAoZXhwLT5uYXJncykKKysgICAgeworKyAgICBjYXNlIDM6CisrICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzJdKTsKKysgICAgICAvKiBGQUxMVEhST1VHSCAqLworKyAgICBjYXNlIDI6CisrICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzFdKTsKKysgICAgICAvKiBGQUxMVEhST1VHSCAqLworKyAgICBjYXNlIDE6CisrICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzBdKTsKKysgICAgICAvKiBGQUxMVEhST1VHSCAqLworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICBmcmVlIChleHApOworK30KKysKKysKKytzdGF0aWMgaW50CisreXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKQorK3sKKysgIGNvbnN0IGNoYXIgKmV4cCA9ICpwZXhwOworKyAgaW50IHJlc3VsdDsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgaWYgKGV4cFswXSA9PSAnXDAnKQorKwl7CisrCSAgKnBleHAgPSBleHA7CisrCSAgcmV0dXJuIFlZRU9GOworKwl9CisrCisrICAgICAgaWYgKGV4cFswXSAhPSAnICcgJiYgZXhwWzBdICE9ICdcdCcpCisrCWJyZWFrOworKworKyAgICAgICsrZXhwOworKyAgICB9CisrCisrICByZXN1bHQgPSAqZXhwKys7CisrICBzd2l0Y2ggKHJlc3VsdCkKKysgICAgeworKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisrICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKysgICAgICB7CisrCXVuc2lnbmVkIGxvbmcgaW50IG4gPSByZXN1bHQgLSAnMCc7CisrCXdoaWxlIChleHBbMF0gPj0gJzAnICYmIGV4cFswXSA8PSAnOScpCisrCSAgeworKwkgICAgbiAqPSAxMDsKKysJICAgIG4gKz0gZXhwWzBdIC0gJzAnOworKwkgICAgKytleHA7CisrCSAgfQorKwlsdmFsLT5udW0gPSBuOworKwlyZXN1bHQgPSBOVU1CRVI7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc9JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZXF1YWw7CisrCSAgcmVzdWx0ID0gRVFVT1AyOworKwl9CisrICAgICAgZWxzZQorKwlyZXN1bHQgPSBZWUVSUkNPREU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyEnOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBub3RfZXF1YWw7CisrCSAgcmVzdWx0ID0gRVFVT1AyOworKwl9CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyYnOgorKyAgICBjYXNlICd8JzoKKysgICAgICBpZiAoZXhwWzBdID09IHJlc3VsdCkKKysJKytleHA7CisrICAgICAgZWxzZQorKwlyZXN1bHQgPSBZWUVSUkNPREU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJzwnOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBsZXNzX29yX2VxdWFsOworKwl9CisrICAgICAgZWxzZQorKwlsdmFsLT5vcCA9IGxlc3NfdGhhbjsKKysgICAgICByZXN1bHQgPSBDTVBPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJz4nOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBncmVhdGVyX29yX2VxdWFsOworKwl9CisrICAgICAgZWxzZQorKwlsdmFsLT5vcCA9IGdyZWF0ZXJfdGhhbjsKKysgICAgICByZXN1bHQgPSBDTVBPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyonOgorKyAgICAgIGx2YWwtPm9wID0gbXVsdDsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJy8nOgorKyAgICAgIGx2YWwtPm9wID0gZGl2aWRlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnJSc6CisrICAgICAgbHZhbC0+b3AgPSBtb2R1bGU7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcrJzoKKysgICAgICBsdmFsLT5vcCA9IHBsdXM7CisrICAgICAgcmVzdWx0ID0gQURET1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICctJzoKKysgICAgICBsdmFsLT5vcCA9IG1pbnVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnbic6CisrICAgIGNhc2UgJz8nOgorKyAgICBjYXNlICc6JzoKKysgICAgY2FzZSAnKCc6CisrICAgIGNhc2UgJyknOgorKyAgICAgIC8qIE5vdGhpbmcsIGp1c3QgcmV0dXJuIHRoZSBjaGFyYWN0ZXIuICAqLworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc7JzoKKysgICAgY2FzZSAnXG4nOgorKyAgICBjYXNlICdcMCc6CisrICAgICAgLyogQmUgc2FmZSBhbmQgbGV0IHRoZSB1c2VyIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4gICovCisrICAgICAgLS1leHA7CisrICAgICAgcmVzdWx0ID0gWVlFT0Y7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmVzdWx0ID0gWVlFUlJDT0RFOworKyNpZiBZWURFQlVHICE9IDAKKysgICAgICAtLWV4cDsKKysjZW5kaWYKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgKnBleHAgPSBleHA7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKytzdGF0aWMgdm9pZAorK3l5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cikKKyt7CisrICAvKiBEbyBub3RoaW5nLiAgV2UgZG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgaGVyZS4gICovCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BvMnRibC5zZWQuaW4JMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcG8ydGJsLnNlZC5pbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTAyICswLDAgQEAKKy0jIHBvMnRibC5zZWQgLSBDb252ZXJ0IFVuaWZvcnVtIHN0eWxlIC5wbyBmaWxlIHRvIGxvb2t1cCB0YWJsZSBmb3IgY2F0Z2V0cworLSMgQ29weXJpZ2h0IChDKSAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCistIworLTEgeworLSAgaVwKKy0vKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwbzJ0Ymwuc2VkIGZyb20gQFBBQ0tBR0UgTkFNRUAucG90LiAgKi9cCistXAorLSNpZiBIQVZFX0NPTkZJR19IXAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+XAorLSNlbmRpZlwKKy1cCistI2luY2x1ZGUgImxpYmdldHRleHQuaCJcCistXAorLWNvbnN0IHN0cnVjdCBfbXNnX2VudCBfbXNnX3RibFtdID0geworLSAgaAorLSAgcy8uKi8wLworLSAgeAorLX0KKy0jCistIyBXcml0ZSBtc2dpZCBlbnRyaWVzIGluIEMgYXJyYXkgZm9ybS4KKy0jCistL15tc2dpZC8geworLSAgcy9tc2dpZFsgCV0qXCgiLioiXCkvICB7XDEvCistICB0YgorLSMgQXBwZW5kIHRoZSBuZXh0IGxpbmUKKy0gIDpiCistICBOCistIyBMb29rIHdoZXRoZXIgc2Vjb25kIHBhcnQgaXMgY29udGludWF0aW9uIGxpbmUuCistICBzL1woLipcKSJcKFxuXCkiXCguKiJcKS9cMVwyXDMvCistIyBZZXMsIHRoZW4gYnJhbmNoLgorLSAgdGEKKy0jIEJlY2F1c2Ugd2UgYXNzdW1lIHRoYXQgdGhlIGlucHV0IGZpbGUgY29ycmVjdGx5IGZvcm1lZCB0aGUgbGluZQorLSMganVzdCByZWFkIGNhbm5vdCBiZSBhZ2FpbiBiZSBhIG1zZ2lkIGxpbmUuICBTbyBpdCdzIHNhZmUgdG8gaWdub3JlCistIyBpdC4KKy0gIHMvXCguKlwpXG4uKi9cMS8KKy0gIGJjCistIyBXZSBmb3VuZCBhIGNvbnRpbnVhdGlvbiBsaW5lLiAgQnV0IGJlZm9yZSBwcmludGluZyBpbnNlcnQgJ1wnLgorLSAgOmEKKy0gIHMvXCguKlwpXChcbi4qXCkvXDFcXFwyLworLSAgUAorLSMgV2UgY2Fubm90IHVzZSBEIGhlcmUuCistICBzLy4qXG5cKC4qXCkvXDEvCistIyBTb21lIGJ1Z2d5IHNlZHMgZG8gbm90IGNsZWFyIHRoZSBgc3VjY2Vzc2Z1bCBzdWJzdGl0dXRpb24gc2luY2UgbGFzdCBgYHQnJycKKy0jIGZsYWcgb24gYE4nLCBzbyB3ZSBkbyBhIGB0JyBoZXJlIHRvIGNsZWFyIGl0LgorLSAgdGIKKy0jIE5vdCByZWFjaGVkCistICA6YworLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSAgRworLSAgcy9cKC4qXClcblwoWzAtOV0qXCkvXDEsIFwyfSwvCistICBzL1woLipcKSIkL1wxLworLSAgcAorLX0KKy0jCistIyBMYXN0IGxpbmUuCistIworLSQgeworLSAgaVwKKy19O1wKKy0KKy0gIGcKKy0gIHMvMCpcKC4qXCkvaW50IF9tc2dfdGJsX2xlbmd0aCA9IFwxOy9wCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtYXJncy5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi1hcmdzLmMJMjAwNC0wOS0xMiAxNDo0MDozNC41OTU3MTE2MDggLTA0MDAKK0BAIC0wLDAgKzEsMTE5IEBACisrLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytpbnQKKytwcmludGZfZmV0Y2hhcmdzICh2YV9saXN0IGFyZ3MsIGFyZ3VtZW50cyAqYSkKKyt7CisrICBzaXplX3QgaTsKKysgIGFyZ3VtZW50ICphcDsKKysKKysgIGZvciAoaSA9IDAsIGFwID0gJmEtPmFyZ1swXTsgaSA8IGEtPmNvdW50OyBpKyssIGFwKyspCisrICAgIHN3aXRjaCAoYXAtPnR5cGUpCisrICAgICAgeworKyAgICAgIGNhc2UgVFlQRV9TQ0hBUjoKKysJYXAtPmEuYV9zY2hhciA9IHZhX2FyZyAoYXJncywgLypzaWduZWQgY2hhciovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VQ0hBUjoKKysJYXAtPmEuYV91Y2hhciA9IHZhX2FyZyAoYXJncywgLyp1bnNpZ25lZCBjaGFyKi8gaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1NIT1JUOgorKwlhcC0+YS5hX3Nob3J0ID0gdmFfYXJnIChhcmdzLCAvKnNob3J0Ki8gaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VTSE9SVDoKKysJYXAtPmEuYV91c2hvcnQgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgc2hvcnQqLyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfSU5UOgorKwlhcC0+YS5hX2ludCA9IHZhX2FyZyAoYXJncywgaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VJTlQ6CisrCWFwLT5hLmFfdWludCA9IHZhX2FyZyAoYXJncywgdW5zaWduZWQgaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0xPTkdJTlQ6CisrCWFwLT5hLmFfbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVUxPTkdJTlQ6CisrCWFwLT5hLmFfdWxvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGxvbmcgaW50KTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorKwlhcC0+YS5hX2xvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCBsb25nIGxvbmcgaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKysJYXAtPmEuYV91bG9uZ2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBjYXNlIFRZUEVfRE9VQkxFOgorKwlhcC0+YS5hX2RvdWJsZSA9IHZhX2FyZyAoYXJncywgZG91YmxlKTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKysJYXAtPmEuYV9sb25nZG91YmxlID0gdmFfYXJnIChhcmdzLCBsb25nIGRvdWJsZSk7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGNhc2UgVFlQRV9DSEFSOgorKwlhcC0+YS5hX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgICAgIGNhc2UgVFlQRV9XSURFX0NIQVI6CisrCWFwLT5hLmFfd2lkZV9jaGFyID0gdmFfYXJnIChhcmdzLCB3aW50X3QpOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBjYXNlIFRZUEVfU1RSSU5HOgorKwlhcC0+YS5hX3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3QgY2hhciAqKTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKyAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKysJYXAtPmEuYV93aWRlX3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3Qgd2NoYXJfdCAqKTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisrCWFwLT5hLmFfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgdm9pZCAqKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfc2NoYXJfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgc2lnbmVkIGNoYXIgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X3Nob3J0X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNob3J0ICopOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfaW50X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIGludCAqKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9sb25naW50X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50ICopOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGxvbmcgaW50ICopOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBkZWZhdWx0OgorKwkvKiBVbmtub3duIHR5cGUuICAqLworKwlyZXR1cm4gLTE7CisrICAgICAgfQorKyAgcmV0dXJuIDA7CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3ByaW50Zi1hcmdzLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLWFyZ3MuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjYwMTcxMDY5NiAtMDQwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiBEZWNvbXBvc2VkIHByaW50ZiBhcmd1bWVudCBsaXN0LgorKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9QUklOVEZfQVJHU19ICisrI2RlZmluZSBfUFJJTlRGX0FSR1NfSAorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvKiBHZXQgd2NoYXJfdC4gICovCisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisrI2VuZGlmCisrCisrLyogR2V0IHdpbnRfdC4gICovCisrI2lmZGVmIEhBVkVfV0lOVF9UCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCB2YV9saXN0LiAgKi8KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrCisrCisrLyogQXJndW1lbnQgdHlwZXMgKi8KKyt0eXBlZGVmIGVudW0KKyt7CisrICBUWVBFX05PTkUsCisrICBUWVBFX1NDSEFSLAorKyAgVFlQRV9VQ0hBUiwKKysgIFRZUEVfU0hPUlQsCisrICBUWVBFX1VTSE9SVCwKKysgIFRZUEVfSU5ULAorKyAgVFlQRV9VSU5ULAorKyAgVFlQRV9MT05HSU5ULAorKyAgVFlQRV9VTE9OR0lOVCwKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgIFRZUEVfTE9OR0xPTkdJTlQsCisrICBUWVBFX1VMT05HTE9OR0lOVCwKKysjZW5kaWYKKysgIFRZUEVfRE9VQkxFLAorKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICBUWVBFX0xPTkdET1VCTEUsCisrI2VuZGlmCisrICBUWVBFX0NIQVIsCisrI2lmZGVmIEhBVkVfV0lOVF9UCisrICBUWVBFX1dJREVfQ0hBUiwKKysjZW5kaWYKKysgIFRZUEVfU1RSSU5HLAorKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysgIFRZUEVfV0lERV9TVFJJTkcsCisrI2VuZGlmCisrICBUWVBFX1BPSU5URVIsCisrICBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVIsCisrICBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVIsCisrICBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVIKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyssIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUgorKyNlbmRpZgorK30gYXJnX3R5cGU7CisrCisrLyogUG9seW1vcnBoaWMgYXJndW1lbnQgKi8KKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGFyZ190eXBlIHR5cGU7CisrICB1bmlvbgorKyAgeworKyAgICBzaWduZWQgY2hhcgkJCWFfc2NoYXI7CisrICAgIHVuc2lnbmVkIGNoYXIJCWFfdWNoYXI7CisrICAgIHNob3J0CQkJYV9zaG9ydDsKKysgICAgdW5zaWduZWQgc2hvcnQJCWFfdXNob3J0OworKyAgICBpbnQJCQkJYV9pbnQ7CisrICAgIHVuc2lnbmVkIGludAkJYV91aW50OworKyAgICBsb25nIGludAkJCWFfbG9uZ2ludDsKKysgICAgdW5zaWduZWQgbG9uZyBpbnQJCWFfdWxvbmdpbnQ7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgIGxvbmcgbG9uZyBpbnQJCWFfbG9uZ2xvbmdpbnQ7CisrICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQJYV91bG9uZ2xvbmdpbnQ7CisrI2VuZGlmCisrICAgIGZsb2F0CQkJYV9mbG9hdDsKKysgICAgZG91YmxlCQkJYV9kb3VibGU7CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysgICAgbG9uZyBkb3VibGUJCQlhX2xvbmdkb3VibGU7CisrI2VuZGlmCisrICAgIGludAkJCQlhX2NoYXI7CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrICAgIHdpbnRfdAkJCWFfd2lkZV9jaGFyOworKyNlbmRpZgorKyAgICBjb25zdCBjaGFyKgkJCWFfc3RyaW5nOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysgICAgY29uc3Qgd2NoYXJfdCoJCWFfd2lkZV9zdHJpbmc7CisrI2VuZGlmCisrICAgIHZvaWQqCQkJYV9wb2ludGVyOworKyAgICBzaWduZWQgY2hhciAqCQlhX2NvdW50X3NjaGFyX3BvaW50ZXI7CisrICAgIHNob3J0ICoJCQlhX2NvdW50X3Nob3J0X3BvaW50ZXI7CisrICAgIGludCAqCQkJYV9jb3VudF9pbnRfcG9pbnRlcjsKKysgICAgbG9uZyBpbnQgKgkJCWFfY291bnRfbG9uZ2ludF9wb2ludGVyOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICBsb25nIGxvbmcgaW50ICoJCWFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlcjsKKysjZW5kaWYKKysgIH0KKysgIGE7CisrfQorK2FyZ3VtZW50OworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgYXJndW1lbnQgKmFyZzsKKyt9CisrYXJndW1lbnRzOworKworKworKy8qIEZldGNoIHRoZSBhcmd1bWVudHMsIHB1dHRpbmcgdGhlbSBpbnRvIGEuICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHByaW50Zl9mZXRjaGFyZ3MgKHZhX2xpc3QgYXJncywgYXJndW1lbnRzICphKTsKKysKKysjZW5kaWYgLyogX1BSSU5URl9BUkdTX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjYwNzcwOTc4NCAtMDQwMAorQEAgLTAsMCArMSwzNzEgQEAKKysvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MsIHVzaW5nIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaWZkZWYgX19HTlVDX18KKysjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKysjZWxzZQorKyMgaWZkZWYgX01TQ19WRVIKKysjICBpbmNsdWRlIDxtYWxsb2MuaD4KKysjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKysjIGVsc2UKKysjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICBlbHNlCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYQorK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrI2lmICFIQVZFX1BPU0lYX1BSSU5URgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrLyogV2hlbiBidWlsZGluZyBhIERMTCwgd2UgbXVzdCBleHBvcnQgc29tZSBmdW5jdGlvbnMuICBOb3RlIHRoYXQgYmVjYXVzZQorKyAgIHRoZSBmdW5jdGlvbnMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgYmluYXJ5IGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdlCisrICAgZG9uJ3QgbmVlZCB0byB1c2UgX19kZWNsc3BlYyhkbGxpbXBvcnQpIGluIGFueSBjYXNlLiAgKi8KKysjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBCVUlMRElOR19ETEwKKysjIGRlZmluZSBETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisrI2Vsc2UKKysjIGRlZmluZSBETExfRVhQT1JURUQKKysjZW5kaWYKKysKKysjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKysKKysvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLWFyZ3MuaCIuICAqLworKyNpbmNsdWRlICJwcmludGYtYXJncy5jIgorKworKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJwcmludGYtcGFyc2UuaCIuICAqLworKyNpbmNsdWRlICJwcmludGYtcGFyc2UuYyIKKysKKysvKiBEZWZpbmUgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ2YXNucHJpbnRmLmgiLiAgKi8KKysjZGVmaW5lIHZhc25wcmludGYgbGliaW50bF92YXNucHJpbnRmCisrI2luY2x1ZGUgInZhc25wcmludGYuYyIKKysjaWYgMCAvKiBub3QgbmVlZGVkICovCisrI2RlZmluZSBhc25wcmludGYgbGliaW50bF9hc25wcmludGYKKysjaW5jbHVkZSAiYXNucHJpbnRmLmMiCisrI2VuZGlmCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92ZnByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHZmcHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CisrICBlbHNlCisrICAgIHsKKysgICAgICBzaXplX3QgbGVuZ3RoOworKyAgICAgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpbnQgcmV0dmFsID0gLTE7CisrICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKwl7CisrCSAgaWYgKGZ3cml0ZSAocmVzdWx0LCAxLCBsZW5ndGgsIHN0cmVhbSkgPT0gbGVuZ3RoKQorKwkgICAgcmV0dmFsID0gbGVuZ3RoOworKwkgIGZyZWUgKHJlc3VsdCk7CisrCX0KKysgICAgICByZXR1cm4gcmV0dmFsOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfZnByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3ZmcHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92cHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICByZXR1cm4gbGliaW50bF92ZnByaW50ZiAoc3Rkb3V0LCBmb3JtYXQsIGFyZ3MpOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92cHJpbnRmIChmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdnNwcmludGYgKGNoYXIgKnJlc3VsdGJ1ZiwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2c3ByaW50ZiAocmVzdWx0YnVmLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IGxlbmd0aCA9IChzaXplX3QpIH4wIC8gKDQgKiBzaXplb2YgKGNoYXIpKTsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKHJlc3VsdGJ1ZiwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKysJeworKwkgIGZyZWUgKHJlc3VsdCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gbGVuZ3RoOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfc3ByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3ZzcHJpbnRmIChyZXN1bHRidWYsIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrI2lmIEhBVkVfU05QUklOVEYKKysKKysjIGlmIEhBVkVfREVDTF9fU05QUklOVEYKKysgICAvKiBXaW5kb3dzLiAgKi8KKysjICBkZWZpbmUgc3lzdGVtX3ZzbnByaW50ZiBfdnNucHJpbnRmCisrIyBlbHNlCisrICAgLyogVW5peC4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgdnNucHJpbnRmCisrIyBlbmRpZgorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdnNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gc3lzdGVtX3ZzbnByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICBlbHNlCisrICAgIHsKKysgICAgICBzaXplX3QgbWF4bGVuZ3RoID0gbGVuZ3RoOworKyAgICAgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmKQorKwl7CisrCSAgaWYgKG1heGxlbmd0aCA+IDApCisrCSAgICB7CisrCSAgICAgIGlmIChsZW5ndGggPCBtYXhsZW5ndGgpCisrCQlhYm9ydCAoKTsKKysJICAgICAgbWVtY3B5IChyZXN1bHRidWYsIHJlc3VsdCwgbWF4bGVuZ3RoIC0gMSk7CisrCSAgICAgIHJlc3VsdGJ1ZlttYXhsZW5ndGggLSAxXSA9ICdcMCc7CisrCSAgICB9CisrCSAgZnJlZSAocmVzdWx0KTsKKysJICByZXR1cm4gLTE7CisrCX0KKysgICAgICBlbHNlCisrCXJldHVybiBsZW5ndGg7CisrICAgIH0KKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9zbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3ZzbnByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrI2VuZGlmCisrCisrI2lmIEhBVkVfQVNQUklOVEYKKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3Zhc3ByaW50ZiAoY2hhciAqKnJlc3VsdHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIHNpemVfdCBsZW5ndGg7CisrICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICBpZiAocmVzdWx0ID09IE5VTEwpCisrICAgIHJldHVybiAtMTsKKysgICpyZXN1bHRwID0gcmVzdWx0OworKyAgcmV0dXJuIGxlbmd0aDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9hc3ByaW50ZiAoY2hhciAqKnJlc3VsdHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdmFzcHJpbnRmIChyZXN1bHRwLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNlbmRpZgorKworKyNpZiBIQVZFX0ZXUFJJTlRGCisrCisrI2luY2x1ZGUgPHdjaGFyLmg+CisrCisrI2RlZmluZSBXSURFX0NIQVJfVkVSU0lPTiAxCisrCisrLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gIndwcmludGYtcGFyc2UuaCIuICAqLworKyNpbmNsdWRlICJwcmludGYtcGFyc2UuYyIKKysKKysvKiBEZWZpbmUgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ2YXNucHJpbnRmLmgiLiAgKi8KKysjZGVmaW5lIHZhc253cHJpbnRmIGxpYmludGxfdmFzbndwcmludGYKKysjaW5jbHVkZSAidmFzbnByaW50Zi5jIgorKyNpZiAwIC8qIG5vdCBuZWVkZWQgKi8KKysjZGVmaW5lIGFzbndwcmludGYgbGliaW50bF9hc253cHJpbnRmCisrI2luY2x1ZGUgImFzbnByaW50Zi5jIgorKyNlbmRpZgorKworKyMgaWYgSEFWRV9ERUNMX19TTldQUklOVEYKKysgICAvKiBXaW5kb3dzLiAgKi8KKysjICBkZWZpbmUgc3lzdGVtX3Zzd3ByaW50ZiBfdnNud3ByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBzeXN0ZW1fdnN3cHJpbnRmIHZzd3ByaW50ZgorKyMgZW5kaWYKKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3Zmd3ByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHZmd3ByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IGxlbmd0aDsKKysgICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgICAgIGludCByZXR2YWwgPSAtMTsKKysgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpCisrCXsKKysJICBzaXplX3QgaTsKKysJICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisrCSAgICBpZiAoZnB1dHdjIChyZXN1bHRbaV0sIHN0cmVhbSkgPT0gV0VPRikKKysJICAgICAgYnJlYWs7CisrCSAgaWYgKGkgPT0gbGVuZ3RoKQorKwkgICAgcmV0dmFsID0gbGVuZ3RoOworKwkgIGZyZWUgKHJlc3VsdCk7CisrCX0KKysgICAgICByZXR1cm4gcmV0dmFsOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3Z3cHJpbnRmIChjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICByZXR1cm4gbGliaW50bF92ZndwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF93cHJpbnRmIChjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3Z3cHJpbnRmIChmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdnN3cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmICh3Y3NjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gc3lzdGVtX3Zzd3ByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICBlbHNlCisrICAgIHsKKysgICAgICBzaXplX3QgbWF4bGVuZ3RoID0gbGVuZ3RoOworKyAgICAgIHdjaGFyX3QgKnJlc3VsdCA9IGxpYmludGxfdmFzbndwcmludGYgKHJlc3VsdGJ1ZiwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKysJeworKwkgIGlmIChtYXhsZW5ndGggPiAwKQorKwkgICAgeworKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorKwkJYWJvcnQgKCk7CisrCSAgICAgIG1lbWNweSAocmVzdWx0YnVmLCByZXN1bHQsIChtYXhsZW5ndGggLSAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAwOworKwkgICAgfQorKwkgIGZyZWUgKHJlc3VsdCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gbGVuZ3RoOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfc3dwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNlbmRpZgorKworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3ByaW50Zi1wYXJzZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi1wYXJzZS5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjIyNzA3NTA0IC0wNDAwCitAQCAtMCwwICsxLDUzNyBAQAorKy8qIEZvcm1hdHRlZCBvdXRwdXQgdG8gc3RyaW5ncy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBpbmNsdWRlICJ3cHJpbnRmLXBhcnNlLmgiCisrI2Vsc2UKKysjIGluY2x1ZGUgInByaW50Zi1wYXJzZS5oIgorKyNlbmRpZgorKworKy8qIEdldCBzaXplX3QsIE5VTEwuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvKiBHZXQgaW50bWF4X3QuICAqLworKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAorKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKysjIGluY2x1ZGUgPGludHR5cGVzLmg+CisrI2VuZGlmCisrCisrLyogbWFsbG9jKCksIHJlYWxsb2MoKSwgZnJlZSgpLiAgKi8KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrLyogQ2hlY2tlZCBzaXplX3QgY29tcHV0YXRpb25zLiAgKi8KKysjaW5jbHVkZSAieHNpemUuaCIKKysKKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGRlZmluZSBQUklOVEZfUEFSU0Ugd3ByaW50Zl9wYXJzZQorKyMgZGVmaW5lIENIQVJfVCB3Y2hhcl90CisrIyBkZWZpbmUgRElSRUNUSVZFIHdjaGFyX3RfZGlyZWN0aXZlCisrIyBkZWZpbmUgRElSRUNUSVZFUyB3Y2hhcl90X2RpcmVjdGl2ZXMKKysjZWxzZQorKyMgZGVmaW5lIFBSSU5URl9QQVJTRSBwcmludGZfcGFyc2UKKysjIGRlZmluZSBDSEFSX1QgY2hhcgorKyMgZGVmaW5lIERJUkVDVElWRSBjaGFyX2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgY2hhcl9kaXJlY3RpdmVzCisrI2VuZGlmCisrCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbmRpZgorK2ludAorK1BSSU5URl9QQVJTRSAoY29uc3QgQ0hBUl9UICpmb3JtYXQsIERJUkVDVElWRVMgKmQsIGFyZ3VtZW50cyAqYSkKKyt7CisrICBjb25zdCBDSEFSX1QgKmNwID0gZm9ybWF0OwkJLyogcG9pbnRlciBpbnRvIGZvcm1hdCAqLworKyAgc2l6ZV90IGFyZ19wb3NuID0gMDsJCS8qIG51bWJlciBvZiByZWd1bGFyIGFyZ3VtZW50cyBjb25zdW1lZCAqLworKyAgc2l6ZV90IGRfYWxsb2NhdGVkOwkJCS8qIGFsbG9jYXRlZCBlbGVtZW50cyBvZiBkLT5kaXIgKi8KKysgIHNpemVfdCBhX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgYS0+YXJnICovCisrICBzaXplX3QgbWF4X3dpZHRoX2xlbmd0aCA9IDA7CisrICBzaXplX3QgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAwOworKworKyAgZC0+Y291bnQgPSAwOworKyAgZF9hbGxvY2F0ZWQgPSAxOworKyAgZC0+ZGlyID0gbWFsbG9jIChkX2FsbG9jYXRlZCAqIHNpemVvZiAoRElSRUNUSVZFKSk7CisrICBpZiAoZC0+ZGlyID09IE5VTEwpCisrICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworKyAgICByZXR1cm4gLTE7CisrCisrICBhLT5jb3VudCA9IDA7CisrICBhX2FsbG9jYXRlZCA9IDA7CisrICBhLT5hcmcgPSBOVUxMOworKworKyNkZWZpbmUgUkVHSVNURVJfQVJHKF9pbmRleF8sX3R5cGVfKSBcCisrICB7CQkJCQkJCQkJXAorKyAgICBzaXplX3QgbiA9IChfaW5kZXhfKTsJCQkJCQlcCisrICAgIGlmIChuID49IGFfYWxsb2NhdGVkKQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlzaXplX3QgbWVtb3J5X3NpemU7CQkJCQkJXAorKwlhcmd1bWVudCAqbWVtb3J5OwkJCQkJCVwKKysJCQkJCQkJCQlcCisrCWFfYWxsb2NhdGVkID0geHRpbWVzIChhX2FsbG9jYXRlZCwgMik7CQkJCVwKKysJaWYgKGFfYWxsb2NhdGVkIDw9IG4pCQkJCQkJXAorKwkgIGFfYWxsb2NhdGVkID0geHN1bSAobiwgMSk7CQkJCQlcCisrCW1lbW9yeV9zaXplID0geHRpbWVzIChhX2FsbG9jYXRlZCwgc2l6ZW9mIChhcmd1bWVudCkpOwkJXAorKwlpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCQkJCVwKKysJICAvKiBPdmVyZmxvdywgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5LiAgKi8JCQlcCisrCSAgZ290byBlcnJvcjsJCQkJCQkJXAorKwltZW1vcnkgPSAoYS0+YXJnCQkJCQkJXAorKwkJICA/IHJlYWxsb2MgKGEtPmFyZywgbWVtb3J5X3NpemUpCQkJXAorKwkJICA6IG1hbGxvYyAobWVtb3J5X3NpemUpKTsJCQkJXAorKwlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJXAorKwkgIC8qIE91dCBvZiBtZW1vcnkuICAqLwkJCQkJCVwKKysJICBnb3RvIGVycm9yOwkJCQkJCQlcCisrCWEtPmFyZyA9IG1lbW9yeTsJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgd2hpbGUgKGEtPmNvdW50IDw9IG4pCQkJCQkJXAorKyAgICAgIGEtPmFyZ1thLT5jb3VudCsrXS50eXBlID0gVFlQRV9OT05FOwkJCQlcCisrICAgIGlmIChhLT5hcmdbbl0udHlwZSA9PSBUWVBFX05PTkUpCQkJCQlcCisrICAgICAgYS0+YXJnW25dLnR5cGUgPSAoX3R5cGVfKTsJCQkJCVwKKysgICAgZWxzZSBpZiAoYS0+YXJnW25dLnR5cGUgIT0gKF90eXBlXykpCQkJCVwKKysgICAgICAvKiBBbWJpZ3VvdXMgdHlwZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCQkJXAorKyAgICAgIGdvdG8gZXJyb3I7CQkJCQkJCVwKKysgIH0KKysKKysgIHdoaWxlICgqY3AgIT0gJ1wwJykKKysgICAgeworKyAgICAgIENIQVJfVCBjID0gKmNwKys7CisrICAgICAgaWYgKGMgPT0gJyUnKQorKwl7CisrCSAgc2l6ZV90IGFyZ19pbmRleCA9IEFSR19OT05FOworKwkgIERJUkVDVElWRSAqZHAgPSAmZC0+ZGlyW2QtPmNvdW50XTsvKiBwb2ludGVyIHRvIG5leHQgZGlyZWN0aXZlICovCisrCisrCSAgLyogSW5pdGlhbGl6ZSB0aGUgbmV4dCBkaXJlY3RpdmUuICAqLworKwkgIGRwLT5kaXJfc3RhcnQgPSBjcCAtIDE7CisrCSAgZHAtPmZsYWdzID0gMDsKKysJICBkcC0+d2lkdGhfc3RhcnQgPSBOVUxMOworKwkgIGRwLT53aWR0aF9lbmQgPSBOVUxMOworKwkgIGRwLT53aWR0aF9hcmdfaW5kZXggPSBBUkdfTk9ORTsKKysJICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gTlVMTDsKKysJICBkcC0+cHJlY2lzaW9uX2VuZCA9IE5VTEw7CisrCSAgZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPSBBUkdfTk9ORTsKKysJICBkcC0+YXJnX2luZGV4ID0gQVJHX05PTkU7CisrCisrCSAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisrCSAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKysJICAgIHsKKysJICAgICAgY29uc3QgQ0hBUl9UICpucDsKKysKKysJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQk7CisrCSAgICAgIGlmICgqbnAgPT0gJyQnKQorKwkJeworKwkJICBzaXplX3QgbiA9IDA7CisrCisrCQkgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJICAgIG4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKysJCSAgaWYgKG4gPT0gMCkKKysJCSAgICAvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworKwkJICAgIGdvdG8gZXJyb3I7CisrCQkgIGlmIChzaXplX292ZXJmbG93X3AgKG4pKQorKwkJICAgIC8qIG4gdG9vIGxhcmdlLCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkgbGF0ZXIuICAqLworKwkJICAgIGdvdG8gZXJyb3I7CisrCQkgIGFyZ19pbmRleCA9IG4gLSAxOworKwkJICBjcCA9IG5wICsgMTsKKysJCX0KKysJICAgIH0KKysKKysJICAvKiBSZWFkIHRoZSBmbGFncy4gICovCisrCSAgZm9yICg7OykKKysJICAgIHsKKysJICAgICAgaWYgKCpjcCA9PSAnXCcnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19HUk9VUDsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICctJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfTEVGVDsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICcrJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfU0hPV1NJR047CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnICcpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX1NQQUNFOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJyMnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19BTFQ7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnMCcpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX1pFUk87CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCWJyZWFrOworKwkgICAgfQorKworKwkgIC8qIFBhcnNlIHRoZSBmaWVsZCB3aWR0aC4gICovCisrCSAgaWYgKCpjcCA9PSAnKicpCisrCSAgICB7CisrCSAgICAgIGRwLT53aWR0aF9zdGFydCA9IGNwOworKwkgICAgICBjcCsrOworKwkgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisrCSAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgMSkKKysJCW1heF93aWR0aF9sZW5ndGggPSAxOworKworKwkgICAgICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKysJICAgICAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKysJCXsKKysJCSAgY29uc3QgQ0hBUl9UICpucDsKKysKKysJCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkgICAgOworKwkJICBpZiAoKm5wID09ICckJykKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbiA9IDA7CisrCisrCQkgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCQluID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisrCQkgICAgICBpZiAobiA9PSAwKQorKwkJCS8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCisrCQkJZ290byBlcnJvcjsKKysJCSAgICAgIGlmIChzaXplX292ZXJmbG93X3AgKG4pKQorKwkJCS8qIG4gdG9vIGxhcmdlLCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkgbGF0ZXIuICAqLworKwkJCWdvdG8gZXJyb3I7CisrCQkgICAgICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gbiAtIDE7CisrCQkgICAgICBjcCA9IG5wICsgMTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJeworKwkJICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKKysJCSAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggPT0gQVJHX05PTkUpCisrCQkgICAgLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworKwkJICAgIGdvdG8gZXJyb3I7CisrCQl9CisrCSAgICAgIFJFR0lTVEVSX0FSRyAoZHAtPndpZHRoX2FyZ19pbmRleCwgVFlQRV9JTlQpOworKwkgICAgfQorKwkgIGVsc2UgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKysJICAgIHsKKysJICAgICAgc2l6ZV90IHdpZHRoX2xlbmd0aDsKKysKKysJICAgICAgZHAtPndpZHRoX3N0YXJ0ID0gY3A7CisrCSAgICAgIGZvciAoOyAqY3AgPj0gJzAnICYmICpjcCA8PSAnOSc7IGNwKyspCisrCQk7CisrCSAgICAgIGRwLT53aWR0aF9lbmQgPSBjcDsKKysJICAgICAgd2lkdGhfbGVuZ3RoID0gZHAtPndpZHRoX2VuZCAtIGRwLT53aWR0aF9zdGFydDsKKysJICAgICAgaWYgKG1heF93aWR0aF9sZW5ndGggPCB3aWR0aF9sZW5ndGgpCisrCQltYXhfd2lkdGhfbGVuZ3RoID0gd2lkdGhfbGVuZ3RoOworKwkgICAgfQorKworKwkgIC8qIFBhcnNlIHRoZSBwcmVjaXNpb24uICAqLworKwkgIGlmICgqY3AgPT0gJy4nKQorKwkgICAgeworKwkgICAgICBjcCsrOworKwkgICAgICBpZiAoKmNwID09ICcqJykKKysJCXsKKysJCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IGNwIC0gMTsKKysJCSAgY3ArKzsKKysJCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBjcDsKKysJCSAgaWYgKG1heF9wcmVjaXNpb25fbGVuZ3RoIDwgMikKKysJCSAgICBtYXhfcHJlY2lzaW9uX2xlbmd0aCA9IDI7CisrCisrCQkgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworKwkJICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorKwkJICAgIHsKKysJCSAgICAgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCQkgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCQk7CisrCQkgICAgICBpZiAoKm5wID09ICckJykKKysJCQl7CisrCQkJICBzaXplX3QgbiA9IDA7CisrCisrCQkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCQkgICAgbiA9IHhzdW0gKHh0aW1lcyAobiwgMTApLCAqbnAgLSAnMCcpOworKwkJCSAgaWYgKG4gPT0gMCkKKysJCQkgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKysJCQkgICAgZ290byBlcnJvcjsKKysJCQkgIGlmIChzaXplX292ZXJmbG93X3AgKG4pKQorKwkJCSAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5CisrCQkJICAgICAgIGxhdGVyLiAgKi8KKysJCQkgICAgZ290byBlcnJvcjsKKysJCQkgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gbiAtIDE7CisrCQkJICBjcCA9IG5wICsgMTsKKysJCQl9CisrCQkgICAgfQorKwkJICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPT0gQVJHX05PTkUpCisrCQkgICAgeworKwkJICAgICAgZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPSBhcmdfcG9zbisrOworKwkJICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJCS8qIGFyZ19wb3NuIHdyYXBwZWQgYXJvdW5kLiAgKi8KKysJCQlnb3RvIGVycm9yOworKwkJICAgIH0KKysJCSAgUkVHSVNURVJfQVJHIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCwgVFlQRV9JTlQpOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHNpemVfdCBwcmVjaXNpb25fbGVuZ3RoOworKworKwkJICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gY3AgLSAxOworKwkJICBmb3IgKDsgKmNwID49ICcwJyAmJiAqY3AgPD0gJzknOyBjcCsrKQorKwkJICAgIDsKKysJCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBjcDsKKysJCSAgcHJlY2lzaW9uX2xlbmd0aCA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKKysJCSAgaWYgKG1heF9wcmVjaXNpb25fbGVuZ3RoIDwgcHJlY2lzaW9uX2xlbmd0aCkKKysJCSAgICBtYXhfcHJlY2lzaW9uX2xlbmd0aCA9IHByZWNpc2lvbl9sZW5ndGg7CisrCQl9CisrCSAgICB9CisrCisrCSAgeworKwkgICAgYXJnX3R5cGUgdHlwZTsKKysKKysJICAgIC8qIFBhcnNlIGFyZ3VtZW50IHR5cGUvc2l6ZSBzcGVjaWZpZXJzLiAgKi8KKysJICAgIHsKKysJICAgICAgaW50IGZsYWdzID0gMDsKKysKKysJICAgICAgZm9yICg7OykKKysJCXsKKysJCSAgaWYgKCpjcCA9PSAnaCcpCisrCQkgICAgeworKwkJICAgICAgZmxhZ3MgfD0gKDEgPDwgKGZsYWdzICYgMSkpOworKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrCQkgIGVsc2UgaWYgKCpjcCA9PSAnTCcpCisrCQkgICAgeworKwkJICAgICAgZmxhZ3MgfD0gNDsKKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ2wnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzICs9IDg7CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysjaWZkZWYgSEFWRV9JTlRNQVhfVAorKwkJICBlbHNlIGlmICgqY3AgPT0gJ2onKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAobG9uZykpCisrCQkJeworKwkJCSAgLyogaW50bWF4X3QgPSBsb25nIGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDE2OworKwkJCX0KKysJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAoaW50bWF4X3QpID4gc2l6ZW9mIChpbnQpKQorKwkJCXsKKysJCQkgIC8qIGludG1heF90ID0gbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gODsKKysJCQl9CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysjZW5kaWYKKysJCSAgZWxzZSBpZiAoKmNwID09ICd6JyB8fCAqY3AgPT0gJ1onKQorKwkJICAgIHsKKysJCSAgICAgIC8qICd6JyBpcyBzdGFuZGFyZGl6ZWQgaW4gSVNPIEMgOTksIGJ1dCBnbGliYyB1c2VzICdaJworKwkJCSBiZWNhdXNlIHRoZSB3YXJuaW5nIGZhY2lsaXR5IGluIGdjYy0yLjk1LjIgdW5kZXJzdGFuZHMKKysJCQkgb25seSAnWicgKHNlZSBnY2MtMi45NS4yL2djYy9jLWNvbW1vbi5jOjE3ODQpLiAgKi8KKysJCSAgICAgIGlmIChzaXplb2YgKHNpemVfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIHNpemVfdCA9IGxvbmcgbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gMTY7CisrCQkJfQorKwkJICAgICAgZWxzZSBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChpbnQpKQorKwkJCXsKKysJCQkgIC8qIHNpemVfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrCQkgIGVsc2UgaWYgKCpjcCA9PSAndCcpCisrCQkgICAgeworKwkJICAgICAgaWYgKHNpemVvZiAocHRyZGlmZl90KSA+IHNpemVvZiAobG9uZykpCisrCQkJeworKwkJCSAgLyogcHRyZGlmZl90ID0gbG9uZyBsb25nICovCisrCQkJICBmbGFncyArPSAxNjsKKysJCQl9CisrCQkgICAgICBlbHNlIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGludCkpCisrCQkJeworKwkJCSAgLyogcHRyZGlmZl90ID0gbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gODsKKysJCQl9CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIGJyZWFrOworKwkJfQorKworKwkgICAgICAvKiBSZWFkIHRoZSBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCisrCSAgICAgIGMgPSAqY3ArKzsKKysJICAgICAgc3dpdGNoIChjKQorKwkJeworKwkJY2FzZSAnZCc6IGNhc2UgJ2knOgorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisrCQkgICAgdHlwZSA9IFRZUEVfTE9OR0xPTkdJTlQ7CisrCQkgIGVsc2UKKysjZW5kaWYKKysJCSAgaWYgKGZsYWdzID49IDgpCisrCQkgICAgdHlwZSA9IFRZUEVfTE9OR0lOVDsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorKwkJICAgIHR5cGUgPSBUWVBFX1NDSEFSOworKwkJICBlbHNlIGlmIChmbGFncyAmIDEpCisrCQkgICAgdHlwZSA9IFRZUEVfU0hPUlQ7CisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9JTlQ7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnbyc6IGNhc2UgJ3UnOiBjYXNlICd4JzogY2FzZSAnWCc6CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKysJCSAgICB0eXBlID0gVFlQRV9VTE9OR0xPTkdJTlQ7CisrCQkgIGVsc2UKKysjZW5kaWYKKysJCSAgaWYgKGZsYWdzID49IDgpCisrCQkgICAgdHlwZSA9IFRZUEVfVUxPTkdJTlQ7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMikKKysJCSAgICB0eXBlID0gVFlQRV9VQ0hBUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorKwkJICAgIHR5cGUgPSBUWVBFX1VTSE9SVDsKKysJCSAgZWxzZQorKwkJICAgIHR5cGUgPSBUWVBFX1VJTlQ7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnZic6IGNhc2UgJ0YnOiBjYXNlICdlJzogY2FzZSAnRSc6IGNhc2UgJ2cnOiBjYXNlICdHJzoKKysJCWNhc2UgJ2EnOiBjYXNlICdBJzoKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisrCQkgICAgdHlwZSA9IFRZUEVfTE9OR0RPVUJMRTsKKysJCSAgZWxzZQorKyNlbmRpZgorKwkJICB0eXBlID0gVFlQRV9ET1VCTEU7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnYyc6CisrCQkgIGlmIChmbGFncyA+PSA4KQorKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICAgIHR5cGUgPSBUWVBFX1dJREVfQ0hBUjsKKysjZWxzZQorKwkJICAgIGdvdG8gZXJyb3I7CisrI2VuZGlmCisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9DSEFSOworKwkJICBicmVhazsKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysJCWNhc2UgJ0MnOgorKwkJICB0eXBlID0gVFlQRV9XSURFX0NIQVI7CisrCQkgIGMgPSAnYyc7CisrCQkgIGJyZWFrOworKyNlbmRpZgorKwkJY2FzZSAncyc6CisrCQkgIGlmIChmbGFncyA+PSA4KQorKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICB0eXBlID0gVFlQRV9XSURFX1NUUklORzsKKysjZWxzZQorKwkJICAgIGdvdG8gZXJyb3I7CisrI2VuZGlmCisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9TVFJJTkc7CisrCQkgIGJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCWNhc2UgJ1MnOgorKwkJICB0eXBlID0gVFlQRV9XSURFX1NUUklORzsKKysJCSAgYyA9ICdzJzsKKysJCSAgYnJlYWs7CisrI2VuZGlmCisrCQljYXNlICdwJzoKKysJCSAgdHlwZSA9IFRZUEVfUE9JTlRFUjsKKysJCSAgYnJlYWs7CisrCQljYXNlICduJzoKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI7CisrCQkgIGVsc2UKKysjZW5kaWYKKysJCSAgaWYgKGZsYWdzID49IDgpCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSOworKwkJICBlbHNlIGlmIChmbGFncyAmIDIpCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI7CisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9JTlRfUE9JTlRFUjsKKysJCSAgYnJlYWs7CisrCQljYXNlICclJzoKKysJCSAgdHlwZSA9IFRZUEVfTk9ORTsKKysJCSAgYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJICAvKiBVbmtub3duIGNvbnZlcnNpb24gY2hhcmFjdGVyLiAgKi8KKysJCSAgZ290byBlcnJvcjsKKysJCX0KKysJICAgIH0KKysKKysJICAgIGlmICh0eXBlICE9IFRZUEVfTk9ORSkKKysJICAgICAgeworKwkJZHAtPmFyZ19pbmRleCA9IGFyZ19pbmRleDsKKysJCWlmIChkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICB7CisrCQkgICAgZHAtPmFyZ19pbmRleCA9IGFyZ19wb3NuKys7CisrCQkgICAgaWYgKGRwLT5hcmdfaW5kZXggPT0gQVJHX05PTkUpCisrCQkgICAgICAvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisrCQkgICAgICBnb3RvIGVycm9yOworKwkJICB9CisrCQlSRUdJU1RFUl9BUkcgKGRwLT5hcmdfaW5kZXgsIHR5cGUpOworKwkgICAgICB9CisrCSAgICBkcC0+Y29udmVyc2lvbiA9IGM7CisrCSAgICBkcC0+ZGlyX2VuZCA9IGNwOworKwkgIH0KKysKKysJICBkLT5jb3VudCsrOworKwkgIGlmIChkLT5jb3VudCA+PSBkX2FsbG9jYXRlZCkKKysJICAgIHsKKysJICAgICAgc2l6ZV90IG1lbW9yeV9zaXplOworKwkgICAgICBESVJFQ1RJVkUgKm1lbW9yeTsKKysKKysJICAgICAgZF9hbGxvY2F0ZWQgPSB4dGltZXMgKGRfYWxsb2NhdGVkLCAyKTsKKysJICAgICAgbWVtb3J5X3NpemUgPSB4dGltZXMgKGRfYWxsb2NhdGVkLCBzaXplb2YgKERJUkVDVElWRSkpOworKwkgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCisrCQkvKiBPdmVyZmxvdywgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5LiAgKi8KKysJCWdvdG8gZXJyb3I7CisrCSAgICAgIG1lbW9yeSA9IHJlYWxsb2MgKGQtPmRpciwgbWVtb3J5X3NpemUpOworKwkgICAgICBpZiAobWVtb3J5ID09IE5VTEwpCisrCQkvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKysJCWdvdG8gZXJyb3I7CisrCSAgICAgIGQtPmRpciA9IG1lbW9yeTsKKysJICAgIH0KKysJfQorKyAgICB9CisrICBkLT5kaXJbZC0+Y291bnRdLmRpcl9zdGFydCA9IGNwOworKworKyAgZC0+bWF4X3dpZHRoX2xlbmd0aCA9IG1heF93aWR0aF9sZW5ndGg7CisrICBkLT5tYXhfcHJlY2lzaW9uX2xlbmd0aCA9IG1heF9wcmVjaXNpb25fbGVuZ3RoOworKyAgcmV0dXJuIDA7CisrCisrZXJyb3I6CisrICBpZiAoYS0+YXJnKQorKyAgICBmcmVlIChhLT5hcmcpOworKyAgaWYgKGQtPmRpcikKKysgICAgZnJlZSAoZC0+ZGlyKTsKKysgIHJldHVybiAtMTsKKyt9CisrCisrI3VuZGVmIERJUkVDVElWRVMKKysjdW5kZWYgRElSRUNUSVZFCisrI3VuZGVmIENIQVJfVAorKyN1bmRlZiBQUklOVEZfUEFSU0UKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtcGFyc2UuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtcGFyc2UuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjYyODcwNjU5MiAtMDQwMAorQEAgLTAsMCArMSw3NSBAQAorKy8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgorKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9QUklOVEZfUEFSU0VfSAorKyNkZWZpbmUgX1BSSU5URl9QQVJTRV9ICisrCisrI2luY2x1ZGUgInByaW50Zi1hcmdzLmgiCisrCisrCisrLyogRmxhZ3MgKi8KKysjZGVmaW5lIEZMQUdfR1JPVVAJIDEJLyogJyBmbGFnICovCisrI2RlZmluZSBGTEFHX0xFRlQJIDIJLyogLSBmbGFnICovCisrI2RlZmluZSBGTEFHX1NIT1dTSUdOCSA0CS8qICsgZmxhZyAqLworKyNkZWZpbmUgRkxBR19TUEFDRQkgOAkvKiBzcGFjZSBmbGFnICovCisrI2RlZmluZSBGTEFHX0FMVAkxNgkvKiAjIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfWkVSTwkzMgorKworKy8qIGFyZ19pbmRleCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gYXJndW1lbnQgaXMgY29uc3VtZWQuICAqLworKyNkZWZpbmUgQVJHX05PTkUJKH4oc2l6ZV90KTApCisrCisrLyogQSBwYXJzZWQgZGlyZWN0aXZlLiAgKi8KKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGNvbnN0IGNoYXIqIGRpcl9zdGFydDsKKysgIGNvbnN0IGNoYXIqIGRpcl9lbmQ7CisrICBpbnQgZmxhZ3M7CisrICBjb25zdCBjaGFyKiB3aWR0aF9zdGFydDsKKysgIGNvbnN0IGNoYXIqIHdpZHRoX2VuZDsKKysgIHNpemVfdCB3aWR0aF9hcmdfaW5kZXg7CisrICBjb25zdCBjaGFyKiBwcmVjaXNpb25fc3RhcnQ7CisrICBjb25zdCBjaGFyKiBwcmVjaXNpb25fZW5kOworKyAgc2l6ZV90IHByZWNpc2lvbl9hcmdfaW5kZXg7CisrICBjaGFyIGNvbnZlcnNpb247IC8qIGQgaSBvIHUgeCBYIGYgZSBFIGcgRyBjIHMgcCBuIFUgJSBidXQgbm90IEMgUyAqLworKyAgc2l6ZV90IGFyZ19pbmRleDsKKyt9CisrY2hhcl9kaXJlY3RpdmU7CisrCisrLyogQSBwYXJzZWQgZm9ybWF0IHN0cmluZy4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBzaXplX3QgY291bnQ7CisrICBjaGFyX2RpcmVjdGl2ZSAqZGlyOworKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGg7CisrICBzaXplX3QgbWF4X3ByZWNpc2lvbl9sZW5ndGg7CisrfQorK2NoYXJfZGlyZWN0aXZlczsKKysKKysKKysvKiBQYXJzZXMgdGhlIGZvcm1hdCBzdHJpbmcuICBGaWxscyBpbiB0aGUgbnVtYmVyIE4gb2YgZGlyZWN0aXZlcywgYW5kIGZpbGxzCisrICAgaW4gZGlyZWN0aXZlc1swXSwgLi4uLCBkaXJlY3RpdmVzW04tMV0sIGFuZCBzZXRzIGRpcmVjdGl2ZXNbTl0uZGlyX3N0YXJ0CisrICAgdG8gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZy4gIEFsc28gZmlsbHMgaW4gdGhlIGFyZ190eXBlIGZpZWxkcyBvZiB0aGUKKysgICBhcmd1bWVudHMgYW5kIHRoZSBuZWVkZWQgY291bnQgb2YgYXJndW1lbnRzLiAgKi8KKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2Vsc2UKKytleHRlcm4KKysjZW5kaWYKKytpbnQgcHJpbnRmX3BhcnNlIChjb25zdCBjaGFyICpmb3JtYXQsIGNoYXJfZGlyZWN0aXZlcyAqZCwgYXJndW1lbnRzICphKTsKKysKKysjZW5kaWYgLyogX1BSSU5URl9QQVJTRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcmVmLWFkZC5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcmVmLWFkZC5zaW4JMjAwNC0wOS0xMiAxNDo0MDozNC42MzM3MDU4MzIgLTA0MDAKK0BAIC0wLDAgKzEsMzEgQEAKKysjIEFkZCB0aGlzIHBhY2thZ2UgdG8gYSBsaXN0IG9mIHJlZmVyZW5jZXMgc3RvcmVkIGluIGEgdGV4dCBmaWxlLgorKyMKKysjICAgQ29weXJpZ2h0IChDKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysjICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjICAgVVNBLgorKyMKKysjIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LgorKyMKKysvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKysgIHMvIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6Ly8KKysgIHRhCisrICA6YQorKyAgcy8gQFBBQ0tBR0VAIC8gQFBBQ0tBR0VAIC8KKysgIHRiCisrICBzLyAkLyBAUEFDS0FHRUAgLworKyAgOmIKKysgIHMvXi8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3JlZi1kZWwuc2luCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlZi1kZWwuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjM4NzA1MDcyIC0wNDAwCitAQCAtMCwwICsxLDI2IEBACisrIyBSZW1vdmUgdGhpcyBwYWNrYWdlIGZyb20gYSBsaXN0IG9mIHJlZmVyZW5jZXMgc3RvcmVkIGluIGEgdGV4dCBmaWxlLgorKyMKKysjICAgQ29weXJpZ2h0IChDKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysjICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjICAgVVNBLgorKyMKKysjIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LgorKyMKKysvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKysgIHMvIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6Ly8KKysgIHMvIEBQQUNLQUdFQCAvIC8KKysgIHMvXi8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3JlbG9jYXRhYmxlLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcmVsb2NhdGFibGUuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjY0NDcwNDE2MCAtMDQwMAorQEAgLTAsMCArMSw0NDkgQEAKKysvKiBQcm92aWRlIHJlbG9jYXRhYmxlIHBhY2thZ2VzLgorKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrCisrLyogVGVsbCBnbGliYydzIDxzdGRpby5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBnZXRsaW5lKCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpbmNsdWRlICJyZWxvY2F0YWJsZS5oIgorKworKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaWZkZWYgTk9fWE1BTExPQworKyMgZGVmaW5lIHhtYWxsb2MgbWFsbG9jCisrI2Vsc2UKKysjIGluY2x1ZGUgInhhbGxvYy5oIgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysjZW5kaWYKKysKKysjaWYgREVQRU5EU19PTl9MSUJDSEFSU0VUCisrIyBpbmNsdWRlIDxsaWJjaGFyc2V0Lmg+CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OVgorKyMgaW5jbHVkZSA8aWNvbnYuaD4KKysjZW5kaWYKKysjaWYgREVQRU5EU19PTl9MSUJJTlRMICYmIEVOQUJMRV9OTFMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZW5kaWYKKysKKysvKiBGYWtlZCBjaGVhcCAnYm9vbCcuICAqLworKyN1bmRlZiBib29sCisrI3VuZGVmIGZhbHNlCisrI3VuZGVmIHRydWUKKysjZGVmaW5lIGJvb2wgaW50CisrI2RlZmluZSBmYWxzZSAwCisrI2RlZmluZSB0cnVlIDEKKysKKysvKiBQYXRobmFtZSBzdXBwb3J0LgorKyAgIElTU0xBU0goQykgICAgICAgICAgIHRlc3RzIHdoZXRoZXIgQyBpcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgY2hhcmFjdGVyLgorKyAgIElTX1BBVEhfV0lUSF9ESVIoUCkgIHRlc3RzIHdoZXRoZXIgUCBjb250YWlucyBhIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uLgorKyAqLworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorKyMgZGVmaW5lIEhBU19ERVZJQ0UoUCkgXAorKyAgICAoKCgoUClbMF0gPj0gJ0EnICYmIChQKVswXSA8PSAnWicpIHx8ICgoUClbMF0gPj0gJ2EnICYmIChQKVswXSA8PSAneicpKSBcCisrICAgICAmJiAoUClbMV0gPT0gJzonKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgXAorKyAgICAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwgfHwgc3RyY2hyIChQLCAnXFwnKSAhPSBOVUxMIHx8IEhBU19ERVZJQ0UgKFApKQorKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAoSEFTX0RFVklDRSAoUCkgPyAyIDogMCkKKysjZWxzZQorKyAgLyogVW5peCAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisrIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwpCisrIyBkZWZpbmUgRklMRVNZU1RFTV9QUkVGSVhfTEVOKFApIDAKKysjZW5kaWYKKysKKysvKiBPcmlnaW5hbCBpbnN0YWxsYXRpb24gcHJlZml4LiAgKi8KKytzdGF0aWMgY2hhciAqb3JpZ19wcmVmaXg7Cisrc3RhdGljIHNpemVfdCBvcmlnX3ByZWZpeF9sZW47CisrLyogQ3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4LiAgKi8KKytzdGF0aWMgY2hhciAqY3Vycl9wcmVmaXg7Cisrc3RhdGljIHNpemVfdCBjdXJyX3ByZWZpeF9sZW47CisrLyogVGhlc2UgcHJlZml4ZXMgZG8gbm90IGVuZCBpbiBhIHNsYXNoLiAgQW55dGhpbmcgdGhhdCB3aWxsIGJlIGNvbmNhdGVuYXRlZAorKyAgIHRvIHRoZW0gbXVzdCBzdGFydCB3aXRoIGEgc2xhc2guICAqLworKworKy8qIFNldHMgdGhlIG9yaWdpbmFsIGFuZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IG9mIHRoaXMgbW9kdWxlLgorKyAgIFJlbG9jYXRpb24gc2ltcGx5IHJlcGxhY2VzIGEgcGF0aG5hbWUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgcHJlZml4CisrICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKysgICBwcmVmaXhlcyBzaG91bGQgYmUgZGlyZWN0b3J5IG5hbWVzIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2ggKGkuZS4gdXNlICIiCisrICAgaW5zdGVhZCBvZiAiLyIpLiAgKi8KKytzdGF0aWMgdm9pZAorK3NldF90aGlzX3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeF9hcmcsCisrCQkJICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2FyZykKKyt7CisrICBpZiAob3JpZ19wcmVmaXhfYXJnICE9IE5VTEwgJiYgY3Vycl9wcmVmaXhfYXJnICE9IE5VTEwKKysgICAgICAvKiBPcHRpbWl6YXRpb246IGlmIG9yaWdfcHJlZml4IGFuZCBjdXJyX3ByZWZpeCBhcmUgZXF1YWwsIHRoZQorKwkgcmVsb2NhdGlvbiBpcyBhIG5vcC4gICovCisrICAgICAgJiYgc3RyY21wIChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZykgIT0gMCkKKysgICAgeworKyAgICAgIC8qIER1cGxpY2F0ZSB0aGUgYXJndW1lbnQgc3RyaW5ncy4gICovCisrICAgICAgY2hhciAqbWVtb3J5OworKworKyAgICAgIG9yaWdfcHJlZml4X2xlbiA9IHN0cmxlbiAob3JpZ19wcmVmaXhfYXJnKTsKKysgICAgICBjdXJyX3ByZWZpeF9sZW4gPSBzdHJsZW4gKGN1cnJfcHJlZml4X2FyZyk7CisrICAgICAgbWVtb3J5ID0gKGNoYXIgKikgeG1hbGxvYyAob3JpZ19wcmVmaXhfbGVuICsgMSArIGN1cnJfcHJlZml4X2xlbiArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgICAgaWYgKG1lbW9yeSAhPSBOVUxMKQorKyNlbmRpZgorKwl7CisrCSAgbWVtY3B5IChtZW1vcnksIG9yaWdfcHJlZml4X2FyZywgb3JpZ19wcmVmaXhfbGVuICsgMSk7CisrCSAgb3JpZ19wcmVmaXggPSBtZW1vcnk7CisrCSAgbWVtb3J5ICs9IG9yaWdfcHJlZml4X2xlbiArIDE7CisrCSAgbWVtY3B5IChtZW1vcnksIGN1cnJfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfbGVuICsgMSk7CisrCSAgY3Vycl9wcmVmaXggPSBtZW1vcnk7CisrCSAgcmV0dXJuOworKwl9CisrICAgIH0KKysgIG9yaWdfcHJlZml4ID0gTlVMTDsKKysgIGN1cnJfcHJlZml4ID0gTlVMTDsKKysgIC8qIERvbid0IHdvcnJ5IGFib3V0IHdhc3RlZCBtZW1vcnkgaGVyZSAtIHRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBvbmx5CisrICAgICBjYWxsZWQgb25jZS4gICovCisrfQorKworKy8qIFNldHMgdGhlIG9yaWdpbmFsIGFuZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IG9mIHRoZSBwYWNrYWdlLgorKyAgIFJlbG9jYXRpb24gc2ltcGx5IHJlcGxhY2VzIGEgcGF0aG5hbWUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgcHJlZml4CisrICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKysgICBwcmVmaXhlcyBzaG91bGQgYmUgZGlyZWN0b3J5IG5hbWVzIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2ggKGkuZS4gdXNlICIiCisrICAgaW5zdGVhZCBvZiAiLyIpLiAgKi8KKyt2b2lkCisrc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeF9hcmcsIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2FyZykKKyt7CisrICBzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKworKyAgLyogTm93IG5vdGlmeSBhbGwgZGVwZW5kZW50IGxpYnJhcmllcy4gICovCisrI2lmIERFUEVORFNfT05fTElCQ0hBUlNFVAorKyAgbGliY2hhcnNldF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKysjZW5kaWYKKysjaWYgREVQRU5EU19PTl9MSUJJQ09OViAmJiBIQVZFX0lDT05WICYmIF9MSUJJQ09OVl9WRVJTSU9OID49IDB4MDEwOQorKyAgbGliaWNvbnZfc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSU5UTCAmJiBFTkFCTEVfTkxTICYmIGRlZmluZWQgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXgKKysgIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CisrI2VuZGlmCisrfQorKworKyNpZiAhZGVmaW5lZCBJTl9MSUJSQVJZIHx8IChkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIpCisrCisrLyogQ29udmVuaWVuY2UgZnVuY3Rpb246CisrICAgQ29tcHV0ZXMgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCwgYmFzZWQgb24gdGhlIG9yaWdpbmFsCisrICAgaW5zdGFsbGF0aW9uIHByZWZpeCwgdGhlIG9yaWdpbmFsIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgYSBwYXJ0aWN1bGFyCisrICAgZmlsZSwgYW5kIHRoZSBjdXJyZW50IHBhdGhuYW1lIG9mIHRoaXMgZmlsZS4gIFJldHVybnMgTlVMTCB1cG9uIGZhaWx1cmUuICAqLworKyNpZmRlZiBJTl9MSUJSQVJZCisrI2RlZmluZSBjb21wdXRlX2N1cnJfcHJlZml4IGxvY2FsX2NvbXB1dGVfY3Vycl9wcmVmaXgKKytzdGF0aWMKKysjZW5kaWYKKytjb25zdCBjaGFyICoKKytjb21wdXRlX2N1cnJfcHJlZml4IChjb25zdCBjaGFyICpvcmlnX2luc3RhbGxwcmVmaXgsCisrCQkgICAgIGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbGRpciwKKysJCSAgICAgY29uc3QgY2hhciAqY3Vycl9wYXRobmFtZSkKKyt7CisrICBjb25zdCBjaGFyICpjdXJyX2luc3RhbGxkaXI7CisrICBjb25zdCBjaGFyICpyZWxfaW5zdGFsbGRpcjsKKysKKysgIGlmIChjdXJyX3BhdGhuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogRGV0ZXJtaW5lIHRoZSByZWxhdGl2ZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgcHJlZml4LgorKyAgICAgVGhpcyBpcyBzaW1wbHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmlnX2luc3RhbGxwcmVmaXggYW5kCisrICAgICBvcmlnX2luc3RhbGxkaXIuICAqLworKyAgaWYgKHN0cm5jbXAgKG9yaWdfaW5zdGFsbHByZWZpeCwgb3JpZ19pbnN0YWxsZGlyLCBzdHJsZW4gKG9yaWdfaW5zdGFsbHByZWZpeCkpCisrICAgICAgIT0gMCkKKysgICAgLyogU2hvdWxkbid0IGhhcHBlbiAtIG5vdGhpbmcgc2hvdWxkIGJlIGluc3RhbGxlZCBvdXRzaWRlICQocHJlZml4KS4gICovCisrICAgIHJldHVybiBOVUxMOworKyAgcmVsX2luc3RhbGxkaXIgPSBvcmlnX2luc3RhbGxkaXIgKyBzdHJsZW4gKG9yaWdfaW5zdGFsbHByZWZpeCk7CisrCisrICAvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4gICovCisrICB7CisrICAgIGNvbnN0IGNoYXIgKnBfYmFzZSA9IGN1cnJfcGF0aG5hbWUgKyBGSUxFU1lTVEVNX1BSRUZJWF9MRU4gKGN1cnJfcGF0aG5hbWUpOworKyAgICBjb25zdCBjaGFyICpwID0gY3Vycl9wYXRobmFtZSArIHN0cmxlbiAoY3Vycl9wYXRobmFtZSk7CisrICAgIGNoYXIgKnE7CisrCisrICAgIHdoaWxlIChwID4gcF9iYXNlKQorKyAgICAgIHsKKysJcC0tOworKwlpZiAoSVNTTEFTSCAoKnApKQorKwkgIGJyZWFrOworKyAgICAgIH0KKysKKysgICAgcSA9IChjaGFyICopIHhtYWxsb2MgKHAgLSBjdXJyX3BhdGhuYW1lICsgMSk7CisrI2lmZGVmIE5PX1hNQUxMT0MKKysgICAgaWYgKHEgPT0gTlVMTCkKKysgICAgICByZXR1cm4gTlVMTDsKKysjZW5kaWYKKysgICAgbWVtY3B5IChxLCBjdXJyX3BhdGhuYW1lLCBwIC0gY3Vycl9wYXRobmFtZSk7CisrICAgIHFbcCAtIGN1cnJfcGF0aG5hbWVdID0gJ1wwJzsKKysgICAgY3Vycl9pbnN0YWxsZGlyID0gcTsKKysgIH0KKysKKysgIC8qIENvbXB1dGUgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBieSByZW1vdmluZyB0aGUgdHJhaWxpbmcKKysgICAgIHJlbF9pbnN0YWxsZGlyIGZyb20gaXQuICAqLworKyAgeworKyAgICBjb25zdCBjaGFyICpycCA9IHJlbF9pbnN0YWxsZGlyICsgc3RybGVuIChyZWxfaW5zdGFsbGRpcik7CisrICAgIGNvbnN0IGNoYXIgKmNwID0gY3Vycl9pbnN0YWxsZGlyICsgc3RybGVuIChjdXJyX2luc3RhbGxkaXIpOworKyAgICBjb25zdCBjaGFyICpjcF9iYXNlID0KKysgICAgICBjdXJyX2luc3RhbGxkaXIgKyBGSUxFU1lTVEVNX1BSRUZJWF9MRU4gKGN1cnJfaW5zdGFsbGRpcik7CisrCisrICAgIHdoaWxlIChycCA+IHJlbF9pbnN0YWxsZGlyICYmIGNwID4gY3BfYmFzZSkKKysgICAgICB7CisrCWJvb2wgc2FtZSA9IGZhbHNlOworKwljb25zdCBjaGFyICpycGkgPSBycDsKKysJY29uc3QgY2hhciAqY3BpID0gY3A7CisrCisrCXdoaWxlIChycGkgPiByZWxfaW5zdGFsbGRpciAmJiBjcGkgPiBjcF9iYXNlKQorKwkgIHsKKysJICAgIHJwaS0tOworKwkgICAgY3BpLS07CisrCSAgICBpZiAoSVNTTEFTSCAoKnJwaSkgfHwgSVNTTEFTSCAoKmNwaSkpCisrCSAgICAgIHsKKysJCWlmIChJU1NMQVNIICgqcnBpKSAmJiBJU1NMQVNIICgqY3BpKSkKKysJCSAgc2FtZSA9IHRydWU7CisrCQlicmVhazsKKysJICAgICAgfQorKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysJICAgIC8qIFdpbjMyLCBPUy8yLCBET1MgLSBjYXNlIGluc2lnbmlmaWNhbnQgZmlsZXN5c3RlbSAqLworKwkgICAgaWYgKCgqcnBpID49ICdhJyAmJiAqcnBpIDw9ICd6JyA/ICpycGkgLSAnYScgKyAnQScgOiAqcnBpKQorKwkJIT0gKCpjcGkgPj0gJ2EnICYmICpjcGkgPD0gJ3onID8gKmNwaSAtICdhJyArICdBJyA6ICpjcGkpKQorKwkgICAgICBicmVhazsKKysjZWxzZQorKwkgICAgaWYgKCpycGkgIT0gKmNwaSkKKysJICAgICAgYnJlYWs7CisrI2VuZGlmCisrCSAgfQorKwlpZiAoIXNhbWUpCisrCSAgYnJlYWs7CisrCS8qIFRoZSBsYXN0IHBhdGhuYW1lIGNvbXBvbmVudCB3YXMgdGhlIHNhbWUuICBvcGkgYW5kIGNwaSBub3cgcG9pbnQKKysJICAgdG8gdGhlIHNsYXNoIGJlZm9yZSBpdC4gICovCisrCXJwID0gcnBpOworKwljcCA9IGNwaTsKKysgICAgICB9CisrCisrICAgIGlmIChycCA+IHJlbF9pbnN0YWxsZGlyKQorKyAgICAgIC8qIFVuZXhwZWN0ZWQ6IFRoZSBjdXJyX2luc3RhbGxkaXIgZG9lcyBub3QgZW5kIHdpdGggcmVsX2luc3RhbGxkaXIuICAqLworKyAgICAgIHJldHVybiBOVUxMOworKworKyAgICB7CisrICAgICAgc2l6ZV90IGN1cnJfcHJlZml4X2xlbiA9IGNwIC0gY3Vycl9pbnN0YWxsZGlyOworKyAgICAgIGNoYXIgKmN1cnJfcHJlZml4OworKworKyAgICAgIGN1cnJfcHJlZml4ID0gKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgMSk7CisrI2lmZGVmIE5PX1hNQUxMT0MKKysgICAgICBpZiAoY3Vycl9wcmVmaXggPT0gTlVMTCkKKysJcmV0dXJuIE5VTEw7CisrI2VuZGlmCisrICAgICAgbWVtY3B5IChjdXJyX3ByZWZpeCwgY3Vycl9pbnN0YWxsZGlyLCBjdXJyX3ByZWZpeF9sZW4pOworKyAgICAgIGN1cnJfcHJlZml4W2N1cnJfcHJlZml4X2xlbl0gPSAnXDAnOworKworKyAgICAgIHJldHVybiBjdXJyX3ByZWZpeDsKKysgICAgfQorKyAgfQorK30KKysKKysjZW5kaWYgLyogIUlOX0xJQlJBUlkgfHwgUElDICovCisrCisrI2lmIGRlZmluZWQgUElDICYmIGRlZmluZWQgSU5TVEFMTERJUgorKworKy8qIEZ1bGwgcGF0aG5hbWUgb2Ygc2hhcmVkIGxpYnJhcnksIG9yIE5VTEwuICAqLworK3N0YXRpYyBjaGFyICpzaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKysKKysvKiBEZXRlcm1pbmUgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IHdoZW4gaXQgaXMgbG9hZGVkLiAgKi8KKysKKytCT09MIFdJTkFQSQorK0RsbE1haW4gKEhJTlNUQU5DRSBtb2R1bGVfaGFuZGxlLCBEV09SRCBldmVudCwgTFBWT0lEIHJlc2VydmVkKQorK3sKKysgICh2b2lkKSByZXNlcnZlZDsKKysKKysgIGlmIChldmVudCA9PSBETExfUFJPQ0VTU19BVFRBQ0gpCisrICAgIHsKKysgICAgICAvKiBUaGUgRExMIGlzIGJlaW5nIGxvYWRlZCBpbnRvIGFuIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyByYW5nZS4gICovCisrICAgICAgc3RhdGljIGNoYXIgbG9jYXRpb25bTUFYX1BBVEhdOworKworKyAgICAgIGlmICghR2V0TW9kdWxlRmlsZU5hbWUgKG1vZHVsZV9oYW5kbGUsIGxvY2F0aW9uLCBzaXplb2YgKGxvY2F0aW9uKSkpCisrCS8qIFNob3VsZG4ndCBoYXBwZW4uICAqLworKwlyZXR1cm4gRkFMU0U7CisrCisrICAgICAgaWYgKCFJU19QQVRIX1dJVEhfRElSIChsb2NhdGlvbikpCisrCS8qIFNob3VsZG4ndCBoYXBwZW4uICAqLworKwlyZXR1cm4gRkFMU0U7CisrCisrICAgICAgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgPSBzdHJkdXAgKGxvY2F0aW9uKTsKKysgICAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKyNlbHNlIC8qIFVuaXggKi8KKysKKytzdGF0aWMgdm9pZAorK2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKKyt7CisrI2lmIGRlZmluZWQgX19saW51eF9fICYmIF9fR0xJQkNfXyA+PSAyCisrICAvKiBMaW51eCBoYXMgL3Byb2Mvc2VsZi9tYXBzLiBnbGliYyAyIGhhcyB0aGUgZ2V0bGluZSgpIGZ1bmN0aW9uLiAgKi8KKysgIEZJTEUgKmZwOworKworKyAgLyogT3BlbiB0aGUgY3VycmVudCBwcm9jZXNzJyBtYXBzIGZpbGUuICBJdCBkZXNjcmliZXMgb25lIFZNQSBwZXIgbGluZS4gICovCisrICBmcCA9IGZvcGVuICgiL3Byb2Mvc2VsZi9tYXBzIiwgInIiKTsKKysgIGlmIChmcCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSAmZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKKysgICAgICBmb3IgKDs7KQorKwl7CisrCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworKwkgIGludCBjOworKworKwkgIGlmIChmc2NhbmYgKGZwLCAiJWx4LSVseCIsICZzdGFydCwgJmVuZCkgIT0gMikKKysJICAgIGJyZWFrOworKwkgIGlmIChhZGRyZXNzID49IHN0YXJ0ICYmIGFkZHJlc3MgPD0gZW5kIC0gMSkKKysJICAgIHsKKysJICAgICAgLyogRm91bmQgaXQuICBOb3cgc2VlIGlmIHRoaXMgbGluZSBjb250YWlucyBhIGZpbGVuYW1lLiAgKi8KKysJICAgICAgd2hpbGUgKGMgPSBnZXRjIChmcCksIGMgIT0gRU9GICYmIGMgIT0gJ1xuJyAmJiBjICE9ICcvJykKKysJCWNvbnRpbnVlOworKwkgICAgICBpZiAoYyA9PSAnLycpCisrCQl7CisrCQkgIHNpemVfdCBzaXplOworKwkJICBpbnQgbGVuOworKworKwkJICB1bmdldGMgKGMsIGZwKTsKKysJCSAgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgPSBOVUxMOyBzaXplID0gMDsKKysJCSAgbGVuID0gZ2V0bGluZSAoJnNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLCAmc2l6ZSwgZnApOworKwkJICBpZiAobGVuID49IDApCisrCQkgICAgeworKwkJICAgICAgLyogU3VjY2VzczogZmlsbGVkIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLiAgKi8KKysJCSAgICAgIGlmIChsZW4gPiAwICYmIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID09ICdcbicpCisrCQkJc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWVbbGVuIC0gMV0gPSAnXDAnOworKwkJICAgIH0KKysJCX0KKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCSAgd2hpbGUgKGMgPSBnZXRjIChmcCksIGMgIT0gRU9GICYmIGMgIT0gJ1xuJykKKysJICAgIGNvbnRpbnVlOworKwl9CisrICAgICAgZmNsb3NlIChmcCk7CisrICAgIH0KKysjZW5kaWYKKyt9CisrCisrI2VuZGlmIC8qIFdJTjMyIC8gVW5peCAqLworKworKy8qIFJldHVybiB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgY3VycmVudCBzaGFyZWQgbGlicmFyeS4KKysgICBSZXR1cm4gTlVMTCBpZiB1bmtub3duLgorKyAgIEd1YXJhbnRlZWQgdG8gd29yayBvbmx5IG9uIExpbnV4IGFuZCBXb2UzMi4gICovCisrc3RhdGljIGNoYXIgKgorK2dldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKQorK3sKKysjaWYgIShkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykKKysgIHN0YXRpYyBib29sIHRyaWVkX2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrICBpZiAoIXRyaWVkX2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUpCisrICAgIHsKKysgICAgICBmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpOworKyAgICAgIHRyaWVkX2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgPSB0cnVlOworKyAgICB9CisrI2VuZGlmCisrICByZXR1cm4gc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrfQorKworKyNlbmRpZiAvKiBQSUMgKi8KKysKKysvKiBSZXR1cm5zIHRoZSBwYXRobmFtZSwgcmVsb2NhdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24KKysgICBkaXJlY3RvcnkuICAqLworK2NvbnN0IGNoYXIgKgorK3JlbG9jYXRlIChjb25zdCBjaGFyICpwYXRobmFtZSkKKyt7CisrI2lmIGRlZmluZWQgUElDICYmIGRlZmluZWQgSU5TVEFMTERJUgorKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKysKKysgIC8qIEluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGEgc2hhcmVkIGxpYnJhcnkuICAqLworKyAgaWYgKCFpbml0aWFsaXplZCkKKysgICAgeworKyAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIG9yaWdfcHJlZml4IGFuZCBjdXJyX3ByZWZpeCBsaWtlbHkgaGF2ZSBhbHJlYWR5IGJlZW4KKysJIHNldCB0aHJvdWdoIHRoZSBtYWluIHByb2dyYW0ncyBzZXRfcHJvZ3JhbV9uYW1lX2FuZF9pbnN0YWxsZGlyCisrCSBmdW5jdGlvbi4gIFRoaXMgaXMgc3VmZmljaWVudCBpbiB0aGUgY2FzZSB0aGF0IHRoZSBsaWJyYXJ5IGhhcworKwkgaW5pdGlhbGx5IGJlZW4gaW5zdGFsbGVkIGluIHRoZSBzYW1lIG9yaWdfcHJlZml4LiAgQnV0IHdlIGNhbiBkbworKwkgYmV0dGVyLCB0byBhbHNvIGNvdmVyIHRoZSBjYXNlcyB0aGF0IDEuIGl0IGhhcyBiZWVuIGluc3RhbGxlZAorKwkgaW4gYSBkaWZmZXJlbnQgcHJlZml4IGJlZm9yZSBiZWluZyBtb3ZlZCB0byBvcmlnX3ByZWZpeCBhbmQgKGxhdGVyKQorKwkgdG8gY3Vycl9wcmVmaXgsIDIuIHVubGlrZSB0aGUgcHJvZ3JhbSwgaXQgaGFzIG5vdCBtb3ZlZCBhd2F5IGZyb20KKysJIG9yaWdfcHJlZml4LiAgKi8KKysgICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxwcmVmaXggPSBJTlNUQUxMUFJFRklYOworKyAgICAgIGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbGRpciA9IElOU1RBTExESVI7CisrICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXhfYmV0dGVyOworKworKyAgICAgIGN1cnJfcHJlZml4X2JldHRlciA9CisrCWNvbXB1dGVfY3Vycl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgb3JpZ19pbnN0YWxsZGlyLAorKwkJCSAgICAgZ2V0X3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpKTsKKysgICAgICBpZiAoY3Vycl9wcmVmaXhfYmV0dGVyID09IE5VTEwpCisrCWN1cnJfcHJlZml4X2JldHRlciA9IGN1cnJfcHJlZml4OworKworKyAgICAgIHNldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19pbnN0YWxscHJlZml4LCBjdXJyX3ByZWZpeF9iZXR0ZXIpOworKworKyAgICAgIGluaXRpYWxpemVkID0gMTsKKysgICAgfQorKyNlbmRpZgorKworKyAgLyogTm90ZTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBwZXJmb3JtIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBoZXJlLAorKyAgICAgZXZlbiBmb3IgRE9TLWxpa2UgZmlsZXN5c3RlbXMsIGJlY2F1c2UgdGhlIHBhdGhuYW1lIGFyZ3VtZW50IHdhcworKyAgICAgdHlwaWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBNYWtlZmlsZSB2YXJpYWJsZSBhcyBvcmlnX3ByZWZpeCBjYW1lCisrICAgICBmcm9tLiAgKi8KKysgIGlmIChvcmlnX3ByZWZpeCAhPSBOVUxMICYmIGN1cnJfcHJlZml4ICE9IE5VTEwKKysgICAgICAmJiBzdHJuY21wIChwYXRobmFtZSwgb3JpZ19wcmVmaXgsIG9yaWdfcHJlZml4X2xlbikgPT0gMCkKKysgICAgeworKyAgICAgIGlmIChwYXRobmFtZVtvcmlnX3ByZWZpeF9sZW5dID09ICdcMCcpCisrCS8qIHBhdGhuYW1lIGVxdWFscyBvcmlnX3ByZWZpeC4gICovCisrCXJldHVybiBjdXJyX3ByZWZpeDsKKysgICAgICBpZiAoSVNTTEFTSCAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSkpCisrCXsKKysJICAvKiBwYXRobmFtZSBzdGFydHMgd2l0aCBvcmlnX3ByZWZpeC4gICovCisrCSAgY29uc3QgY2hhciAqcGF0aG5hbWVfdGFpbCA9ICZwYXRobmFtZVtvcmlnX3ByZWZpeF9sZW5dOworKwkgIGNoYXIgKnJlc3VsdCA9CisrCSAgICAoY2hhciAqKSB4bWFsbG9jIChjdXJyX3ByZWZpeF9sZW4gKyBzdHJsZW4gKHBhdGhuYW1lX3RhaWwpICsgMSk7CisrCisrI2lmZGVmIE5PX1hNQUxMT0MKKysJICBpZiAocmVzdWx0ICE9IE5VTEwpCisrI2VuZGlmCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAocmVzdWx0LCBjdXJyX3ByZWZpeCwgY3Vycl9wcmVmaXhfbGVuKTsKKysJICAgICAgc3RyY3B5IChyZXN1bHQgKyBjdXJyX3ByZWZpeF9sZW4sIHBhdGhuYW1lX3RhaWwpOworKwkgICAgICByZXR1cm4gcmVzdWx0OworKwkgICAgfQorKwl9CisrICAgIH0KKysgIC8qIE5vdGhpbmcgdG8gcmVsb2NhdGUuICAqLworKyAgcmV0dXJuIHBhdGhuYW1lOworK30KKysKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWxvY2F0YWJsZS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlbG9jYXRhYmxlLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42NTE3MDMwOTYgLTA0MDAKK0BAIC0wLDAgKzEsNzcgQEAKKysvKiBQcm92aWRlIHJlbG9jYXRhYmxlIHBhY2thZ2VzLgorKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUkVMT0NBVEFCTEVfSAorKyNkZWZpbmUgX1JFTE9DQVRBQkxFX0gKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBUaGlzIGNhbiBiZSBlbmFibGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyZSAtLWVuYWJsZS1yZWxvY2F0YWJsZSBvcHRpb24uICAqLworKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKysKKysvKiBXaGVuIGJ1aWxkaW5nIGEgRExMLCB3ZSBtdXN0IGV4cG9ydCBzb21lIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBiZWNhdXNlCisrICAgdGhpcyBpcyBhIHByaXZhdGUgLmggZmlsZSwgd2UgZG9uJ3QgbmVlZCB0byB1c2UgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisrICAgaW4gYW55IGNhc2UuICAqLworKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIEJVSUxESU5HX0RMTAorKyMgZGVmaW5lIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKysjZWxzZQorKyMgZGVmaW5lIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRAorKyNlbmRpZgorKworKy8qIFNldHMgdGhlIG9yaWdpbmFsIGFuZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IG9mIHRoZSBwYWNrYWdlLgorKyAgIFJlbG9jYXRpb24gc2ltcGx5IHJlcGxhY2VzIGEgcGF0aG5hbWUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgcHJlZml4CisrICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKysgICBwcmVmaXhlcyBzaG91bGQgYmUgZGlyZWN0b3J5IG5hbWVzIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2ggKGkuZS4gdXNlICIiCisrICAgaW5zdGVhZCBvZiAiLyIpLiAgKi8KKytleHRlcm4gUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVEIHZvaWQKKysgICAgICAgc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeCwKKysJCQkgICAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeCk7CisrCisrLyogUmV0dXJucyB0aGUgcGF0aG5hbWUsIHJlbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uCisrICAgZGlyZWN0b3J5LiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqIHJlbG9jYXRlIChjb25zdCBjaGFyICpwYXRobmFtZSk7CisrCisrLyogTWVtb3J5IG1hbmFnZW1lbnQ6IHJlbG9jYXRlKCkgbGVha3MgbWVtb3J5LCBiZWNhdXNlIGl0IGhhcyB0byBjb25zdHJ1Y3QKKysgICBhIGZyZXNoIHBhdGhuYW1lLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSB5b3VyIHByb2dyYW0gY2FsbHMKKysgICByZWxvY2F0ZSgpIGZyZXF1ZW50bHksIHRoaW5rIGFib3V0IGNhY2hpbmcgdGhlIHJlc3VsdC4gICovCisrCisrLyogQ29udmVuaWVuY2UgZnVuY3Rpb246CisrICAgQ29tcHV0ZXMgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCwgYmFzZWQgb24gdGhlIG9yaWdpbmFsCisrICAgaW5zdGFsbGF0aW9uIHByZWZpeCwgdGhlIG9yaWdpbmFsIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgYSBwYXJ0aWN1bGFyCisrICAgZmlsZSwgYW5kIHRoZSBjdXJyZW50IHBhdGhuYW1lIG9mIHRoaXMgZmlsZS4gIFJldHVybnMgTlVMTCB1cG9uIGZhaWx1cmUuICAqLworK2V4dGVybiBjb25zdCBjaGFyICogY29tcHV0ZV9jdXJyX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorKwkJCQkJIGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbGRpciwKKysJCQkJCSBjb25zdCBjaGFyICpjdXJyX3BhdGhuYW1lKTsKKysKKysjZWxzZQorKworKy8qIEJ5IGRlZmF1bHQsIHdlIHVzZSB0aGUgaGFyZHdpcmVkIHBhdGhuYW1lcy4gICovCisrI2RlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorKworKyNlbmRpZgorKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogX1JFTE9DQVRBQkxFX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC90ZXh0ZG9tYWluLmMJMTk5OC0wNC0yNiAwOToyMjozNy4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvdGV4dGRvbWFpbi5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjU2NzAyMzM2IC0wNDAwCitAQCAtMSw1MSArMSw2MCBAQAorLS8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSB0ZXh0ZG9tYWluKDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSB0ZXh0ZG9tYWluKDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorICNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistIyBpZm5kZWYgbWVtY3B5CistIyAgZGVmaW5lIG1lbWNweShEc3QsIFNyYywgTnVtKSBiY29weSAoU3JjLCBEc3QsIE51bSkKKy0jIGVuZGlmCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisgCisgI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrLyogV2UgaGF2ZSB0byBoYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKysjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysvKiBQcm92aWRlIGR1bW15IGltcGxlbWVudGF0aW9uIGlmIHRoaXMgaXMgb3V0c2lkZSBnbGliYy4gICovCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmUoQ0xBU1MsIE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja193cmxvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3VubG9jayhOQU1FKQorKyNlbmRpZgorKworKy8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKysgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworKyNpZiAhZGVmaW5lZCBfTElCQworKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKyAvKiBOYW1lIG9mIHRoZSBkZWZhdWx0IHRleHQgZG9tYWluLiAgKi8KKy1leHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdOworK2V4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluW10gYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAvKiBEZWZhdWx0IHRleHQgZG9tYWluIGluIHdoaWNoIGVudHJpZXMgZm9yIGdldHRleHQoMykgYXJlIHRvIGJlIGZvdW5kLiAgKi8KKy1leHRlcm4gY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CisrZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgCisgLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorQEAgLTU0LDUwICs2Myw3NiBAQAorICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgVEVYVERPTUFJTiBfX3RleHRkb21haW4KKy0jIGRlZmluZSBzdHJkdXAoc3RyKSBfX3N0cmR1cCAoc3RyKQorKyMgaWZuZGVmIHN0cmR1cAorKyMgIGRlZmluZSBzdHJkdXAoc3RyKSBfX3N0cmR1cCAoc3RyKQorKyMgZW5kaWYKKyAjZWxzZQorLSMgZGVmaW5lIFRFWFRET01BSU4gdGV4dGRvbWFpbl9fCisrIyBkZWZpbmUgVEVYVERPTUFJTiBsaWJpbnRsX3RleHRkb21haW4KKyAjZW5kaWYKKyAKKysvKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKytfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKworIC8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorICAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCisgICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCisgY2hhciAqCistVEVYVERPTUFJTiAoZG9tYWlubmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CisrVEVYVERPTUFJTiAoY29uc3QgY2hhciAqZG9tYWlubmFtZSkKKyB7CistICBjaGFyICpvbGQ7CisrICBjaGFyICpuZXdfZG9tYWluOworKyAgY2hhciAqb2xkX2RvbWFpbjsKKyAKKyAgIC8qIEEgTlVMTCBwb2ludGVyIHJlcXVlc3RzIHRoZSBjdXJyZW50IHNldHRpbmcuICAqLworICAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKyAgICAgcmV0dXJuIChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworIAorLSAgb2xkID0gKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CisrICBfX2xpYmNfcndsb2NrX3dybG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgb2xkX2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworIAorICAgLyogSWYgZG9tYWluIG5hbWUgaXMgdGhlIG51bGwgc3RyaW5nIHNldCB0byBkZWZhdWx0IGRvbWFpbiAibWVzc2FnZXMiLiAgKi8KKyAgIGlmIChkb21haW5uYW1lWzBdID09ICdcMCcKKyAgICAgICB8fCBzdHJjbXAgKGRvbWFpbm5hbWUsIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluKSA9PSAwKQorLSAgICBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluOworKyAgICB7CisrICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKysgICAgICBuZXdfZG9tYWluID0gKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CisrICAgIH0KKysgIGVsc2UgaWYgKHN0cmNtcCAoZG9tYWlubmFtZSwgb2xkX2RvbWFpbikgPT0gMCkKKysgICAgLyogVGhpcyBjYW4gaGFwcGVuIGFuZCBwZW9wbGUgd2lsbCB1c2UgaXQgdG8gc2lnbmFsIHRoYXQgc29tZQorKyAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBjaGFuZ2VkLiAgKi8KKysgICAgbmV3X2RvbWFpbiA9IG9sZF9kb21haW47CisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBJZiB0aGUgZm9sbG93aW5nIG1hbGxvYyBmYWlscyBgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4nCisgCSB3aWxsIGJlIE5VTEwuICBUaGlzIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQgYW5kIHNvIHNpZ25hbHMgd2UKKyAJIGFyZSBvdXQgb2YgY29yZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorLSAgICAgIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gc3RyZHVwIChkb21haW5uYW1lKTsKKysgICAgICBuZXdfZG9tYWluID0gc3RyZHVwIChkb21haW5uYW1lKTsKKyAjZWxzZQorICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpICsgMTsKKy0gICAgICBjaGFyICpjcCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0gICAgICBpZiAoY3AgIT0gTlVMTCkKKy0JbWVtY3B5IChjcCwgZG9tYWlubmFtZSwgbGVuKTsKKy0gICAgICBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IGNwOworKyAgICAgIG5ld19kb21haW4gPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisrICAgICAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKysJbWVtY3B5IChuZXdfZG9tYWluLCBkb21haW5uYW1lLCBsZW4pOworICNlbmRpZgorKworKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisrCV9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gbmV3X2RvbWFpbjsKKyAgICAgfQorIAorLSAgaWYgKG9sZCAhPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikKKy0gICAgZnJlZSAob2xkKTsKKysgIC8qIFdlIHVzZSB0aGlzIHBvc3NpYmlsaXR5IHRvIHNpZ25hbCBhIGNoYW5nZSBvZiB0aGUgbG9hZGVkIGNhdGFsb2dzCisrICAgICBzaW5jZSB0aGlzIGlzIG1vc3QgbGlrZWx5IHRoZSBjYXNlIGFuZCB0aGVyZSBpcyBubyBvdGhlciBlYXN5IHdlCisrICAgICB0byBkbyBpdC4gIERvIGl0IG9ubHkgd2hlbiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bC4gICovCisrICBpZiAobmV3X2RvbWFpbiAhPSBOVUxMKQorKyAgICB7CisrICAgICAgKytfbmxfbXNnX2NhdF9jbnRyOworIAorLSAgcmV0dXJuIChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgICAgIGlmIChvbGRfZG9tYWluICE9IG5ld19kb21haW4gJiYgb2xkX2RvbWFpbiAhPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikKKysJZnJlZSAob2xkX2RvbWFpbik7CisrICAgIH0KKysKKysgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrCisrICByZXR1cm4gbmV3X2RvbWFpbjsKKyB9CisgCisgI2lmZGVmIF9MSUJDCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdmFzbnByaW50Zi5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc25wcmludGYuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjY2MjcwMTQyNCAtMDQwMAorQEAgLTAsMCArMSw4ODcgQEAKKysvKiB2c3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdGRpby5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBzbnByaW50ZigpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAgMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysjaWZuZGVmIElOX0xJQklOVEwKKysjIGluY2x1ZGUgPGFsbG9jYS5oPgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAidmFzbndwcmludGYuaCIKKysjZWxzZQorKyMgaW5jbHVkZSAidmFzbnByaW50Zi5oIgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgkvKiBzbnByaW50ZigpLCBzcHJpbnRmKCkgKi8KKysjaW5jbHVkZSA8c3RkbGliLmg+CS8qIGFib3J0KCksIG1hbGxvYygpLCByZWFsbG9jKCksIGZyZWUoKSAqLworKyNpbmNsdWRlIDxzdHJpbmcuaD4JLyogbWVtY3B5KCksIHN0cmxlbigpICovCisrI2luY2x1ZGUgPGVycm5vLmg+CS8qIGVycm5vICovCisrI2luY2x1ZGUgPGxpbWl0cy5oPgkvKiBDSEFSX0JJVCAqLworKyNpbmNsdWRlIDxmbG9hdC5oPgkvKiBEQkxfTUFYX0VYUCwgTERCTF9NQVhfRVhQICovCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBpbmNsdWRlICJ3cHJpbnRmLXBhcnNlLmgiCisrI2Vsc2UKKysjIGluY2x1ZGUgInByaW50Zi1wYXJzZS5oIgorKyNlbmRpZgorKworKy8qIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4gICovCisrI2luY2x1ZGUgInhzaXplLmgiCisrCisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKyMgaWZkZWYgSEFWRV9XQ1NMRU4KKysjICBkZWZpbmUgbG9jYWxfd2NzbGVuIHdjc2xlbgorKyMgZWxzZQorKyAgIC8qIFNvbGFyaXMgMi41LjEgaGFzIHdjc2xlbigpIGluIGEgc2VwYXJhdGUgbGlicmFyeSBsaWJ3LnNvLiBUbyBhdm9pZAorKyAgICAgIGEgZGVwZW5kZW5jeSB0b3dhcmRzIHRoaXMgbGlicmFyeSwgaGVyZSBpcyBhIGxvY2FsIHN1YnN0aXR1dGUuCisrICAgICAgRGVmaW5lIHRoaXMgc3Vic3RpdHV0ZSBvbmx5IG9uY2UsIGV2ZW4gaWYgdGhpcyBmaWxlIGlzIGluY2x1ZGVkCisrICAgICAgdHdpY2UgaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdC4gICovCisrIyAgaWZuZGVmIGxvY2FsX3djc2xlbl9kZWZpbmVkCisrIyAgIGRlZmluZSBsb2NhbF93Y3NsZW5fZGVmaW5lZCAxCisrc3RhdGljIHNpemVfdAorK2xvY2FsX3djc2xlbiAoY29uc3Qgd2NoYXJfdCAqcykKKyt7CisrICBjb25zdCB3Y2hhcl90ICpwdHI7CisrCisrICBmb3IgKHB0ciA9IHM7ICpwdHIgIT0gKHdjaGFyX3QpIDA7IHB0cisrKQorKyAgICA7CisrICByZXR1cm4gcHRyIC0gczsKKyt9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBkZWZpbmUgVkFTTlBSSU5URiB2YXNud3ByaW50ZgorKyMgZGVmaW5lIENIQVJfVCB3Y2hhcl90CisrIyBkZWZpbmUgRElSRUNUSVZFIHdjaGFyX3RfZGlyZWN0aXZlCisrIyBkZWZpbmUgRElSRUNUSVZFUyB3Y2hhcl90X2RpcmVjdGl2ZXMKKysjIGRlZmluZSBQUklOVEZfUEFSU0Ugd3ByaW50Zl9wYXJzZQorKyMgZGVmaW5lIFVTRV9TTlBSSU5URiAxCisrIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorKyAgIC8qIE9uIFdpbmRvd3MsIHRoZSBmdW5jdGlvbiBzd3ByaW50ZigpIGhhcyBhIGRpZmZlcmVudCBzaWduYXR1cmUgdGhhbgorKyAgICAgIG9uIFVuaXg7IHdlIHVzZSB0aGUgX3Nud3ByaW50ZigpIGZ1bmN0aW9uIGluc3RlYWQuICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBfc253cHJpbnRmCisrIyBlbHNlCisrICAgLyogVW5peC4gICovCisrIyAgZGVmaW5lIFNOUFJJTlRGIHN3cHJpbnRmCisrIyBlbmRpZgorKyNlbHNlCisrIyBkZWZpbmUgVkFTTlBSSU5URiB2YXNucHJpbnRmCisrIyBkZWZpbmUgQ0hBUl9UIGNoYXIKKysjIGRlZmluZSBESVJFQ1RJVkUgY2hhcl9kaXJlY3RpdmUKKysjIGRlZmluZSBESVJFQ1RJVkVTIGNoYXJfZGlyZWN0aXZlcworKyMgZGVmaW5lIFBSSU5URl9QQVJTRSBwcmludGZfcGFyc2UKKysjIGRlZmluZSBVU0VfU05QUklOVEYgKEhBVkVfREVDTF9fU05QUklOVEYgfHwgSEFWRV9TTlBSSU5URikKKysjIGlmIEhBVkVfREVDTF9fU05QUklOVEYKKysgICAvKiBXaW5kb3dzLiAgKi8KKysjICBkZWZpbmUgU05QUklOVEYgX3NucHJpbnRmCisrIyBlbHNlCisrICAgLyogVW5peC4gICovCisrIyAgZGVmaW5lIFNOUFJJTlRGIHNucHJpbnRmCisrIyBlbmRpZgorKyNlbmRpZgorKworK0NIQVJfVCAqCisrVkFTTlBSSU5URiAoQ0hBUl9UICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgQ0hBUl9UICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBESVJFQ1RJVkVTIGQ7CisrICBhcmd1bWVudHMgYTsKKysKKysgIGlmIChQUklOVEZfUEFSU0UgKGZvcm1hdCwgJmQsICZhKSA8IDApCisrICAgIHsKKysgICAgICBlcnJubyA9IEVJTlZBTDsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyNkZWZpbmUgQ0xFQU5VUCgpIFwKKysgIGZyZWUgKGQuZGlyKTsJCQkJCQkJCVwKKysgIGlmIChhLmFyZykJCQkJCQkJCVwKKysgICAgZnJlZSAoYS5hcmcpOworKworKyAgaWYgKHByaW50Zl9mZXRjaGFyZ3MgKGFyZ3MsICZhKSA8IDApCisrICAgIHsKKysgICAgICBDTEVBTlVQICgpOworKyAgICAgIGVycm5vID0gRUlOVkFMOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICB7CisrICAgIHNpemVfdCBidWZfbmVlZGVkbGVuZ3RoOworKyAgICBDSEFSX1QgKmJ1ZjsKKysgICAgQ0hBUl9UICpidWZfbWFsbG9jZWQ7CisrICAgIGNvbnN0IENIQVJfVCAqY3A7CisrICAgIHNpemVfdCBpOworKyAgICBESVJFQ1RJVkUgKmRwOworKyAgICAvKiBPdXRwdXQgc3RyaW5nIGFjY3VtdWxhdG9yLiAgKi8KKysgICAgQ0hBUl9UICpyZXN1bHQ7CisrICAgIHNpemVfdCBhbGxvY2F0ZWQ7CisrICAgIHNpemVfdCBsZW5ndGg7CisrCisrICAgIC8qIEFsbG9jYXRlIGEgc21hbGwgYnVmZmVyIHRoYXQgd2lsbCBob2xkIGEgZGlyZWN0aXZlIHBhc3NlZCB0bworKyAgICAgICBzcHJpbnRmIG9yIHNucHJpbnRmLiAgKi8KKysgICAgYnVmX25lZWRlZGxlbmd0aCA9CisrICAgICAgeHN1bTQgKDcsIGQubWF4X3dpZHRoX2xlbmd0aCwgZC5tYXhfcHJlY2lzaW9uX2xlbmd0aCwgNik7CisrI2lmIEhBVkVfQUxMT0NBCisrICAgIGlmIChidWZfbmVlZGVkbGVuZ3RoIDwgNDAwMCAvIHNpemVvZiAoQ0hBUl9UKSkKKysgICAgICB7CisrCWJ1ZiA9IChDSEFSX1QgKikgYWxsb2NhIChidWZfbmVlZGVkbGVuZ3RoICogc2l6ZW9mIChDSEFSX1QpKTsKKysJYnVmX21hbGxvY2VkID0gTlVMTDsKKysgICAgICB9CisrICAgIGVsc2UKKysjZW5kaWYKKysgICAgICB7CisrCXNpemVfdCBidWZfbWVtc2l6ZSA9IHh0aW1lcyAoYnVmX25lZWRlZGxlbmd0aCwgc2l6ZW9mIChDSEFSX1QpKTsKKysJaWYgKHNpemVfb3ZlcmZsb3dfcCAoYnVmX21lbXNpemUpKQorKwkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworKwlidWYgPSAoQ0hBUl9UICopIG1hbGxvYyAoYnVmX21lbXNpemUpOworKwlpZiAoYnVmID09IE5VTEwpCisrCSAgZ290byBvdXRfb2ZfbWVtb3J5XzE7CisrCWJ1Zl9tYWxsb2NlZCA9IGJ1ZjsKKysgICAgICB9CisrCisrICAgIGlmIChyZXN1bHRidWYgIT0gTlVMTCkKKysgICAgICB7CisrCXJlc3VsdCA9IHJlc3VsdGJ1ZjsKKysJYWxsb2NhdGVkID0gKmxlbmd0aHA7CisrICAgICAgfQorKyAgICBlbHNlCisrICAgICAgeworKwlyZXN1bHQgPSBOVUxMOworKwlhbGxvY2F0ZWQgPSAwOworKyAgICAgIH0KKysgICAgbGVuZ3RoID0gMDsKKysgICAgLyogSW52YXJpYW50czoKKysgICAgICAgcmVzdWx0IGlzIGVpdGhlciA9PSByZXN1bHRidWYgb3IgPT0gTlVMTCBvciBtYWxsb2MtYWxsb2NhdGVkLgorKyAgICAgICBJZiBsZW5ndGggPiAwLCB0aGVuIHJlc3VsdCAhPSBOVUxMLiAgKi8KKysKKysgICAgLyogRW5zdXJlcyB0aGF0IGFsbG9jYXRlZCA+PSBuZWVkZWQuICBBYm9ydHMgdGhyb3VnaCBhIGp1bXAgdG8KKysgICAgICAgb3V0X29mX21lbW9yeSBpZiBuZWVkZWQgaXMgU0laRV9NQVggb3Igb3RoZXJ3aXNlIHRvbyBiaWcuICAqLworKyNkZWZpbmUgRU5TVVJFX0FMTE9DQVRJT04obmVlZGVkKSBcCisrICAgIGlmICgobmVlZGVkKSA+IGFsbG9jYXRlZCkJCQkJCQkgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICBcCisrCXNpemVfdCBtZW1vcnlfc2l6ZTsJCQkJCQkgICAgIFwKKysJQ0hBUl9UICptZW1vcnk7CQkJCQkJCSAgICAgXAorKwkJCQkJCQkJCSAgICAgXAorKwlhbGxvY2F0ZWQgPSAoYWxsb2NhdGVkID4gMCA/IHh0aW1lcyAoYWxsb2NhdGVkLCAyKSA6IDEyKTsJICAgICBcCisrCWlmICgobmVlZGVkKSA+IGFsbG9jYXRlZCkJCQkJCSAgICAgXAorKwkgIGFsbG9jYXRlZCA9IChuZWVkZWQpOwkJCQkJCSAgICAgXAorKwltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYWxsb2NhdGVkLCBzaXplb2YgKENIQVJfVCkpOwkJICAgICBcCisrCWlmIChzaXplX292ZXJmbG93X3AgKG1lbW9yeV9zaXplKSkJCQkJICAgICBcCisrCSAgZ290byBvdXRfb2ZfbWVtb3J5OwkJCQkJCSAgICAgXAorKwlpZiAocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkJCQkgICAgIFwKKysJICBtZW1vcnkgPSAoQ0hBUl9UICopIG1hbGxvYyAobWVtb3J5X3NpemUpOwkJCSAgICAgXAorKwllbHNlCQkJCQkJCQkgICAgIFwKKysJICBtZW1vcnkgPSAoQ0hBUl9UICopIHJlYWxsb2MgKHJlc3VsdCwgbWVtb3J5X3NpemUpOwkJICAgICBcCisrCWlmIChtZW1vcnkgPT0gTlVMTCkJCQkJCQkgICAgIFwKKysJICBnb3RvIG91dF9vZl9tZW1vcnk7CQkJCQkJICAgICBcCisrCWlmIChyZXN1bHQgPT0gcmVzdWx0YnVmICYmIGxlbmd0aCA+IDApCQkJCSAgICAgXAorKwkgIG1lbWNweSAobWVtb3J5LCByZXN1bHQsIGxlbmd0aCAqIHNpemVvZiAoQ0hBUl9UKSk7CQkgICAgIFwKKysJcmVzdWx0ID0gbWVtb3J5OwkJCQkJCSAgICAgXAorKyAgICAgIH0KKysKKysgICAgZm9yIChjcCA9IGZvcm1hdCwgaSA9IDAsIGRwID0gJmQuZGlyWzBdOyA7IGNwID0gZHAtPmRpcl9lbmQsIGkrKywgZHArKykKKysgICAgICB7CisrCWlmIChjcCAhPSBkcC0+ZGlyX3N0YXJ0KQorKwkgIHsKKysJICAgIHNpemVfdCBuID0gZHAtPmRpcl9zdGFydCAtIGNwOworKwkgICAgc2l6ZV90IGF1Z21lbnRlZF9sZW5ndGggPSB4c3VtIChsZW5ndGgsIG4pOworKworKwkgICAgRU5TVVJFX0FMTE9DQVRJT04gKGF1Z21lbnRlZF9sZW5ndGgpOworKwkgICAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIGNwLCBuICogc2l6ZW9mIChDSEFSX1QpKTsKKysJICAgIGxlbmd0aCA9IGF1Z21lbnRlZF9sZW5ndGg7CisrCSAgfQorKwlpZiAoaSA9PSBkLmNvdW50KQorKwkgIGJyZWFrOworKworKwkvKiBFeGVjdXRlIGEgc2luZ2xlIGRpcmVjdGl2ZS4gICovCisrCWlmIChkcC0+Y29udmVyc2lvbiA9PSAnJScpCisrCSAgeworKwkgICAgc2l6ZV90IGF1Z21lbnRlZF9sZW5ndGg7CisrCisrCSAgICBpZiAoIShkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKSkKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICBhdWdtZW50ZWRfbGVuZ3RoID0geHN1bSAobGVuZ3RoLCAxKTsKKysJICAgIEVOU1VSRV9BTExPQ0FUSU9OIChhdWdtZW50ZWRfbGVuZ3RoKTsKKysJICAgIHJlc3VsdFtsZW5ndGhdID0gJyUnOworKwkgICAgbGVuZ3RoID0gYXVnbWVudGVkX2xlbmd0aDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBpZiAoIShkcC0+YXJnX2luZGV4ICE9IEFSR19OT05FKSkKKysJICAgICAgYWJvcnQgKCk7CisrCisrCSAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ24nKQorKwkgICAgICB7CisrCQlzd2l0Y2ggKGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGUpCisrCQkgIHsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9zY2hhcl9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKwkJICBjYXNlIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X3Nob3J0X3BvaW50ZXIgPSBsZW5ndGg7CisrCQkgICAgYnJlYWs7CisrCQkgIGNhc2UgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2ludF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKwkJICBjYXNlIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfbG9uZ2ludF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBjYXNlIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXIgPSBsZW5ndGg7CisrCQkgICAgYnJlYWs7CisrI2VuZGlmCisrCQkgIGRlZmF1bHQ6CisrCQkgICAgYWJvcnQgKCk7CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlhcmdfdHlwZSB0eXBlID0gYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZTsKKysJCUNIQVJfVCAqcDsKKysJCXVuc2lnbmVkIGludCBwcmVmaXhfY291bnQ7CisrCQlpbnQgcHJlZml4ZXNbMl07CisrI2lmICFVU0VfU05QUklOVEYKKysJCXNpemVfdCB0bXBfbGVuZ3RoOworKwkJQ0hBUl9UIHRtcGJ1Zls3MDBdOworKwkJQ0hBUl9UICp0bXA7CisrCisrCQkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIGZvciBjYWxsaW5nCisrCQkgICBzcHJpbnRmLiAgKi8KKysJCXsKKysJCSAgc2l6ZV90IHdpZHRoOworKwkJICBzaXplX3QgcHJlY2lzaW9uOworKworKwkJICB3aWR0aCA9IDA7CisrCQkgIGlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKysJCSAgICB7CisrCQkgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKysJCQl7CisrCQkJICBpbnQgYXJnOworKworKwkJCSAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkJICAgIGFib3J0ICgpOworKwkJCSAgYXJnID0gYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0uYS5hX2ludDsKKysJCQkgIHdpZHRoID0gKGFyZyA8IDAgPyAodW5zaWduZWQgaW50KSAoLWFyZykgOiBhcmcpOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQl7CisrCQkJICBjb25zdCBDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKysKKysJCQkgIGRvCisrCQkJICAgIHdpZHRoID0geHN1bSAoeHRpbWVzICh3aWR0aCwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworKwkJCSAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+d2lkdGhfZW5kKTsKKysJCQl9CisrCQkgICAgfQorKworKwkJICBwcmVjaXNpb24gPSA2OworKwkJICBpZiAoZHAtPnByZWNpc2lvbl9zdGFydCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKysJCSAgICB7CisrCQkgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkJeworKwkJCSAgaW50IGFyZzsKKysKKysJCQkgIGlmICghKGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKysJCQkgICAgYWJvcnQgKCk7CisrCQkJICBhcmcgPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKysJCQkgIHByZWNpc2lvbiA9IChhcmcgPCAwID8gMCA6IGFyZyk7CisrCQkJfQorKwkJICAgICAgZWxzZQorKwkJCXsKKysJCQkgIGNvbnN0IENIQVJfVCAqZGlnaXRwID0gZHAtPnByZWNpc2lvbl9zdGFydCArIDE7CisrCisrCQkJICBwcmVjaXNpb24gPSAwOworKwkJCSAgZG8KKysJCQkgICAgcHJlY2lzaW9uID0geHN1bSAoeHRpbWVzIChwcmVjaXNpb24sIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKysJCQkgIHdoaWxlIChkaWdpdHAgIT0gZHAtPnByZWNpc2lvbl9lbmQpOworKwkJCX0KKysJCSAgICB9CisrCisrCQkgIHN3aXRjaCAoZHAtPmNvbnZlcnNpb24pCisrCQkgICAgeworKworKwkJICAgIGNhc2UgJ2QnOiBjYXNlICdpJzogY2FzZSAndSc6CisrIyBpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnbyc6CisrIyBpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMzMzMzQgLyogYmluYXJ5IC0+IG9jdGFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMzMzMzQgLyogYmluYXJ5IC0+IG9jdGFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgZWxzZQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMzMzMzQgLyogYmluYXJ5IC0+IG9jdGFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAneCc6IGNhc2UgJ1gnOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduIG9yIGFsdGVybmF0ZSBmb3JtICovCisrCQkgICAgICBlbHNlCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ2YnOiBjYXNlICdGJzoKKysjIGlmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0RPVUJMRSkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChMREJMX01BWF9FWFAKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxMDsgLyogc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKERCTF9NQVhfRVhQCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLworKwkJICAgICAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIHByZWNpc2lvbik7CisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdlJzogY2FzZSAnRSc6IGNhc2UgJ2cnOiBjYXNlICdHJzoKKysJCSAgICBjYXNlICdhJzogY2FzZSAnQSc6CisrCQkgICAgICB0bXBfbGVuZ3RoID0KKysJCQkxMjsgLyogc2lnbiwgZGVjaW1hbCBwb2ludCwgZXhwb25lbnQgZXRjLiAqLworKwkJICAgICAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIHByZWNpc2lvbik7CisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdjJzoKKysjIGlmIGRlZmluZWQgSEFWRV9XSU5UX1QgJiYgIVdJREVfQ0hBUl9WRVJTSU9OCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX1dJREVfQ0hBUikKKysJCQl0bXBfbGVuZ3RoID0gTUJfQ1VSX01BWDsKKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkJdG1wX2xlbmd0aCA9IDE7CisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdzJzoKKysjIGlmZGVmIEhBVkVfV0NIQVJfVAorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX1NUUklORykKKysJCQl7CisrCQkJICB0bXBfbGVuZ3RoID0KKysJCQkgICAgbG9jYWxfd2NzbGVuIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmcpOworKworKyMgIGlmICFXSURFX0NIQVJfVkVSU0lPTgorKwkJCSAgdG1wX2xlbmd0aCA9IHh0aW1lcyAodG1wX2xlbmd0aCwgTUJfQ1VSX01BWCk7CisrIyAgZW5kaWYKKysJCQl9CisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJCXRtcF9sZW5ndGggPSBzdHJsZW4gKGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmcpOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAncCc6CisrCQkgICAgICB0bXBfbGVuZ3RoID0KKysJCQkodW5zaWduZWQgaW50KSAoc2l6ZW9mICh2b2lkICopICogQ0hBUl9CSVQKKysJCQkJCSogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKysJCQkJICAgICAgICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIDB4ICovCisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBkZWZhdWx0OgorKwkJICAgICAgYWJvcnQgKCk7CisrCQkgICAgfQorKworKwkJICBpZiAodG1wX2xlbmd0aCA8IHdpZHRoKQorKwkJICAgIHRtcF9sZW5ndGggPSB3aWR0aDsKKysKKysJCSAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOyAvKiBhY2NvdW50IGZvciB0cmFpbGluZyBOVUwgKi8KKysJCX0KKysKKysJCWlmICh0bXBfbGVuZ3RoIDw9IHNpemVvZiAodG1wYnVmKSAvIHNpemVvZiAoQ0hBUl9UKSkKKysJCSAgdG1wID0gdG1wYnVmOworKwkJZWxzZQorKwkJICB7CisrCQkgICAgc2l6ZV90IHRtcF9tZW1zaXplID0geHRpbWVzICh0bXBfbGVuZ3RoLCBzaXplb2YgKENIQVJfVCkpOworKworKwkJICAgIGlmIChzaXplX292ZXJmbG93X3AgKHRtcF9tZW1zaXplKSkKKysJCSAgICAgIC8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLworKwkJICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworKwkJICAgIHRtcCA9IChDSEFSX1QgKikgbWFsbG9jICh0bXBfbWVtc2l6ZSk7CisrCQkgICAgaWYgKHRtcCA9PSBOVUxMKQorKwkJICAgICAgLyogT3V0IG9mIG1lbW9yeS4gICovCisrCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CisrCQkgIH0KKysjZW5kaWYKKysKKysJCS8qIENvbnN0cnVjdCB0aGUgZm9ybWF0IHN0cmluZyBmb3IgY2FsbGluZyBzbnByaW50ZiBvcgorKwkJICAgc3ByaW50Zi4gICovCisrCQlwID0gYnVmOworKwkJKnArKyA9ICclJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0dST1VQKQorKwkJICAqcCsrID0gJ1wnJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0xFRlQpCisrCQkgICpwKysgPSAnLSc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19TSE9XU0lHTikKKysJCSAgKnArKyA9ICcrJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1NQQUNFKQorKwkJICAqcCsrID0gJyAnOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfQUxUKQorKwkJICAqcCsrID0gJyMnOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfWkVSTykKKysJCSAgKnArKyA9ICcwJzsKKysJCWlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKysJCSAgeworKwkJICAgIHNpemVfdCBuID0gZHAtPndpZHRoX2VuZCAtIGRwLT53aWR0aF9zdGFydDsKKysJCSAgICBtZW1jcHkgKHAsIGRwLT53aWR0aF9zdGFydCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCQkgICAgcCArPSBuOworKwkJICB9CisrCQlpZiAoZHAtPnByZWNpc2lvbl9zdGFydCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKysJCSAgeworKwkJICAgIHNpemVfdCBuID0gZHAtPnByZWNpc2lvbl9lbmQgLSBkcC0+cHJlY2lzaW9uX3N0YXJ0OworKwkJICAgIG1lbWNweSAocCwgZHAtPnByZWNpc2lvbl9zdGFydCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCQkgICAgcCArPSBuOworKwkJICB9CisrCisrCQlzd2l0Y2ggKHR5cGUpCisrCQkgIHsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorKwkJICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgorKwkJICAgICpwKysgPSAnbCc7CisrCQkgICAgLypGQUxMVEhST1VHSCovCisrI2VuZGlmCisrCQkgIGNhc2UgVFlQRV9MT05HSU5UOgorKwkJICBjYXNlIFRZUEVfVUxPTkdJTlQ6CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrCQkgIGNhc2UgVFlQRV9XSURFX0NIQVI6CisrI2VuZGlmCisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKwkJICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisrI2VuZGlmCisrCQkgICAgKnArKyA9ICdsJzsKKysJCSAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKwkJICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKysJCSAgICAqcCsrID0gJ0wnOworKwkJICAgIGJyZWFrOworKyNlbmRpZgorKwkJICBkZWZhdWx0OgorKwkJICAgIGJyZWFrOworKwkJICB9CisrCQkqcCA9IGRwLT5jb252ZXJzaW9uOworKyNpZiBVU0VfU05QUklOVEYKKysJCXBbMV0gPSAnJSc7CisrCQlwWzJdID0gJ24nOworKwkJcFszXSA9ICdcMCc7CisrI2Vsc2UKKysJCXBbMV0gPSAnXDAnOworKyNlbmRpZgorKworKwkJLyogQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgZm9yIGNhbGxpbmcgc25wcmludGYgb3Igc3ByaW50Zi4gICovCisrCQlwcmVmaXhfY291bnQgPSAwOworKwkJaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkgIHsKKysJCSAgICBpZiAoIShhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKysJCSAgICAgIGFib3J0ICgpOworKwkJICAgIHByZWZpeGVzW3ByZWZpeF9jb3VudCsrXSA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkgIH0KKysJCWlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKysJCSAgeworKwkJICAgIGlmICghKGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKysJCSAgICAgIGFib3J0ICgpOworKwkJICAgIHByZWZpeGVzW3ByZWZpeF9jb3VudCsrXSA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworKwkJICB9CisrCisrI2lmIFVTRV9TTlBSSU5URgorKwkJLyogUHJlcGFyZSBjaGVja2luZyB3aGV0aGVyIHNucHJpbnRmIHJldHVybnMgdGhlIGNvdW50CisrCQkgICB2aWEgJW4uICAqLworKwkJRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgMSkpOworKwkJcmVzdWx0W2xlbmd0aF0gPSAnXDAnOworKyNlbmRpZgorKworKwkJZm9yICg7OykKKysJCSAgeworKwkJICAgIHNpemVfdCBtYXhsZW47CisrCQkgICAgaW50IGNvdW50OworKwkJICAgIGludCByZXRjb3VudDsKKysKKysJCSAgICBtYXhsZW4gPSBhbGxvY2F0ZWQgLSBsZW5ndGg7CisrCQkgICAgY291bnQgPSAtMTsKKysJCSAgICByZXRjb3VudCA9IDA7CisrCisrI2lmIFVTRV9TTlBSSU5URgorKyMgZGVmaW5lIFNOUFJJTlRGX0JVRihhcmcpIFwKKysJCSAgICBzd2l0Y2ggKHByZWZpeF9jb3VudCkJCQkJICAgIFwKKysJCSAgICAgIHsJCQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMDoJCQkJCQkgICAgXAorKwkJCXJldGNvdW50ID0gU05QUklOVEYgKHJlc3VsdCArIGxlbmd0aCwgbWF4bGVuLCBidWYsICBcCisrCQkJCQkgICAgIGFyZywgJmNvdW50KTsJCSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMToJCQkJCQkgICAgXAorKwkJCXJldGNvdW50ID0gU05QUklOVEYgKHJlc3VsdCArIGxlbmd0aCwgbWF4bGVuLCBidWYsICBcCisrCQkJCQkgICAgIHByZWZpeGVzWzBdLCBhcmcsICZjb3VudCk7CSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAorKwkJCXJldGNvdW50ID0gU05QUklOVEYgKHJlc3VsdCArIGxlbmd0aCwgbWF4bGVuLCBidWYsICBcCisrCQkJCQkgICAgIHByZWZpeGVzWzBdLCBwcmVmaXhlc1sxXSwgYXJnLCBcCisrCQkJCQkgICAgICZjb3VudCk7CQkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgZGVmYXVsdDoJCQkJCQkgICAgXAorKwkJCWFib3J0ICgpOwkJCQkJICAgIFwKKysJCSAgICAgIH0KKysjZWxzZQorKyMgZGVmaW5lIFNOUFJJTlRGX0JVRihhcmcpIFwKKysJCSAgICBzd2l0Y2ggKHByZWZpeF9jb3VudCkJCQkJICAgIFwKKysJCSAgICAgIHsJCQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMDoJCQkJCQkgICAgXAorKwkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIGFyZyk7CQkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDE6CQkJCQkJICAgIFwKKysJCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBwcmVmaXhlc1swXSwgYXJnKTsJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAyOgkJCQkJCSAgICBcCisrCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIHByZWZpeGVzWzFdLFwKKysJCQkJCSBhcmcpOwkJCQkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBkZWZhdWx0OgkJCQkJCSAgICBcCisrCQkJYWJvcnQgKCk7CQkJCQkgICAgXAorKwkJICAgICAgfQorKyNlbmRpZgorKworKwkJICAgIHN3aXRjaCAodHlwZSkKKysJCSAgICAgIHsKKysJCSAgICAgIGNhc2UgVFlQRV9TQ0hBUjoKKysJCQl7CisrCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3NjaGFyOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VQ0hBUjoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VjaGFyOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9TSE9SVDoKKysJCQl7CisrCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3Nob3J0OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91c2hvcnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX0lOVDoKKysJCQl7CisrCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2ludDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVUlOVDoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX0xPTkdJTlQ6CisrCQkJeworKwkJCSAgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91bG9uZ2ludDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgICAgICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6CisrCQkJeworKwkJCSAgbG9uZyBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2xvbmdpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91bG9uZ2xvbmdpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNlbmRpZgorKwkJICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKysJCQl7CisrCQkJICBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2RvdWJsZTsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgICAgIGNhc2UgVFlQRV9MT05HRE9VQkxFOgorKwkJCXsKKysJCQkgIGxvbmcgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25nZG91YmxlOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjZW5kaWYKKysJCSAgICAgIGNhc2UgVFlQRV9DSEFSOgorKwkJCXsKKysJCQkgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrCQkgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKwkJCXsKKysJCQkgIHdpbnRfdCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9jaGFyOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjZW5kaWYKKysJCSAgICAgIGNhc2UgVFlQRV9TVFJJTkc6CisrCQkJeworKwkJCSAgY29uc3QgY2hhciAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3N0cmluZzsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKwkJICAgICAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorKwkJCXsKKysJCQkgIGNvbnN0IHdjaGFyX3QgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV93aWRlX3N0cmluZzsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfUE9JTlRFUjoKKysJCQl7CisrCQkJICB2b2lkICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfcG9pbnRlcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBkZWZhdWx0OgorKwkJCWFib3J0ICgpOworKwkJICAgICAgfQorKworKyNpZiBVU0VfU05QUklOVEYKKysJCSAgICAvKiBQb3J0YWJpbGl0eTogTm90IGFsbCBpbXBsZW1lbnRhdGlvbnMgb2Ygc25wcmludGYoKQorKwkJICAgICAgIGFyZSBJU08gQyA5OSBjb21wbGlhbnQuICBEZXRlcm1pbmUgdGhlIG51bWJlciBvZgorKwkJICAgICAgIGJ5dGVzIHRoYXQgc25wcmludGYoKSBoYXMgcHJvZHVjZWQgb3Igd291bGQgaGF2ZQorKwkJICAgICAgIHByb2R1Y2VkLiAgKi8KKysJCSAgICBpZiAoY291bnQgPj0gMCkKKysJCSAgICAgIHsKKysJCQkvKiBWZXJpZnkgdGhhdCBzbnByaW50ZigpIGhhcyBOVUwtdGVybWluYXRlZCBpdHMKKysJCQkgICByZXN1bHQuICAqLworKwkJCWlmIChjb3VudCA8IG1heGxlbiAmJiByZXN1bHRbbGVuZ3RoICsgY291bnRdICE9ICdcMCcpCisrCQkJICBhYm9ydCAoKTsKKysJCQkvKiBQb3J0YWJpbGl0eSBoYWNrLiAgKi8KKysJCQlpZiAocmV0Y291bnQgPiBjb3VudCkKKysJCQkgIGNvdW50ID0gcmV0Y291bnQ7CisrCQkgICAgICB9CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCS8qIHNucHJpbnRmKCkgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nCisrCQkJICAgZGlyZWN0aXZlLiAgKi8KKysJCQlpZiAocFsxXSAhPSAnXDAnKQorKwkJCSAgeworKwkJCSAgICAvKiBEb24ndCB1c2UgdGhlICclbicgZGlyZWN0aXZlOyBpbnN0ZWFkLCBsb29rCisrCQkJICAgICAgIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisrCQkJICAgIHBbMV0gPSAnXDAnOworKwkJCSAgICBjb250aW51ZTsKKysJCQkgIH0KKysJCQllbHNlCisrCQkJICB7CisrCQkJICAgIC8qIExvb2sgYXQgdGhlIHNucHJpbnRmKCkgcmV0dXJuIHZhbHVlLiAgKi8KKysJCQkgICAgaWYgKHJldGNvdW50IDwgMCkKKysJCQkgICAgICB7CisrCQkJCS8qIEhQLVVYIDEwLjIwIHNucHJpbnRmKCkgaXMgZG91Ymx5IGRlZmljaWVudDoKKysJCQkJICAgSXQgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nIGRpcmVjdGl2ZSwKKysJCQkJICAgKmFuZCogaXQgcmV0dXJucyAtMSAocmF0aGVyIHRoYW4gdGhlIGxlbmd0aAorKwkJCQkgICB0aGF0IHdvdWxkIGhhdmUgYmVlbiByZXF1aXJlZCkgd2hlbiB0aGUKKysJCQkJICAgYnVmZmVyIGlzIHRvbyBzbWFsbC4gICovCisrCQkJCXNpemVfdCBiaWdnZXJfbmVlZCA9CisrCQkJCSAgeHN1bSAoeHRpbWVzIChhbGxvY2F0ZWQsIDIpLCAxMik7CisrCQkJCUVOU1VSRV9BTExPQ0FUSU9OIChiaWdnZXJfbmVlZCk7CisrCQkJCWNvbnRpbnVlOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZQorKwkJCSAgICAgIGNvdW50ID0gcmV0Y291bnQ7CisrCQkJICB9CisrCQkgICAgICB9CisrI2VuZGlmCisrCisrCQkgICAgLyogQXR0ZW1wdCB0byBoYW5kbGUgZmFpbHVyZS4gICovCisrCQkgICAgaWYgKGNvdW50IDwgMCkKKysJCSAgICAgIHsKKysJCQlpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKysJCQkgIGZyZWUgKHJlc3VsdCk7CisrCQkJaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorKwkJCSAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKysJCQlDTEVBTlVQICgpOworKwkJCWVycm5vID0gRUlOVkFMOworKwkJCXJldHVybiBOVUxMOworKwkJICAgICAgfQorKworKyNpZiAhVVNFX1NOUFJJTlRGCisrCQkgICAgaWYgKGNvdW50ID49IHRtcF9sZW5ndGgpCisrCQkgICAgICAvKiB0bXBfbGVuZ3RoIHdhcyBpbmNvcnJlY3RseSBjYWxjdWxhdGVkIC0gZml4IHRoZQorKwkJCSBjb2RlIGFib3ZlISAgKi8KKysJCSAgICAgIGFib3J0ICgpOworKyNlbmRpZgorKworKwkJICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCisrCQkgICAgaWYgKGNvdW50ID49IG1heGxlbikKKysJCSAgICAgIHsKKysJCQkvKiBOZWVkIGF0IGxlYXN0IGNvdW50IGJ5dGVzLiAgQnV0IGFsbG9jYXRlCisrCQkJICAgcHJvcG9ydGlvbmFsbHksIHRvIGF2b2lkIGxvb3BpbmcgZXRlcm5hbGx5IGlmCisrCQkJICAgc25wcmludGYoKSByZXBvcnRzIGEgdG9vIHNtYWxsIGNvdW50LiAgKi8KKysJCQlzaXplX3QgbiA9CisrCQkJICB4bWF4ICh4c3VtIChsZW5ndGgsIGNvdW50KSwgeHRpbWVzIChhbGxvY2F0ZWQsIDIpKTsKKysKKysJCQlFTlNVUkVfQUxMT0NBVElPTiAobik7CisrI2lmIFVTRV9TTlBSSU5URgorKwkJCWNvbnRpbnVlOworKyNlbmRpZgorKwkJICAgICAgfQorKworKyNpZiBVU0VfU05QUklOVEYKKysJCSAgICAvKiBUaGUgc25wcmludGYoKSByZXN1bHQgZGlkIGZpdC4gICovCisrI2Vsc2UKKysJCSAgICAvKiBBcHBlbmQgdGhlIHNwcmludGYoKSByZXN1bHQuICAqLworKwkJICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCB0bXAsIGNvdW50ICogc2l6ZW9mIChDSEFSX1QpKTsKKysJCSAgICBpZiAodG1wICE9IHRtcGJ1ZikKKysJCSAgICAgIGZyZWUgKHRtcCk7CisrI2VuZGlmCisrCisrCQkgICAgbGVuZ3RoICs9IGNvdW50OworKwkJICAgIGJyZWFrOworKwkJICB9CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyAgICAvKiBBZGQgdGhlIGZpbmFsIE5VTC4gICovCisrICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIDEpKTsKKysgICAgcmVzdWx0W2xlbmd0aF0gPSAnXDAnOworKworKyAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZiAmJiBsZW5ndGggKyAxIDwgYWxsb2NhdGVkKQorKyAgICAgIHsKKysJLyogU2hyaW5rIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlmIHBvc3NpYmxlLiAgKi8KKysJQ0hBUl9UICptZW1vcnk7CisrCisrCW1lbW9yeSA9IChDSEFSX1QgKikgcmVhbGxvYyAocmVzdWx0LCAobGVuZ3RoICsgMSkgKiBzaXplb2YgKENIQVJfVCkpOworKwlpZiAobWVtb3J5ICE9IE5VTEwpCisrCSAgcmVzdWx0ID0gbWVtb3J5OworKyAgICAgIH0KKysKKysgICAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorKyAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisrICAgIENMRUFOVVAgKCk7CisrICAgICpsZW5ndGhwID0gbGVuZ3RoOworKyAgICByZXR1cm4gcmVzdWx0OworKworKyAgb3V0X29mX21lbW9yeToKKysgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisrICAgICAgZnJlZSAocmVzdWx0KTsKKysgICAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorKyAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisrICBvdXRfb2ZfbWVtb3J5XzE6CisrICAgIENMRUFOVVAgKCk7CisrICAgIGVycm5vID0gRU5PTUVNOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKyt9CisrCisrI3VuZGVmIFNOUFJJTlRGCisrI3VuZGVmIFVTRV9TTlBSSU5URgorKyN1bmRlZiBQUklOVEZfUEFSU0UKKysjdW5kZWYgRElSRUNUSVZFUworKyN1bmRlZiBESVJFQ1RJVkUKKysjdW5kZWYgQ0hBUl9UCisrI3VuZGVmIFZBU05QUklOVEYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC92YXNucHJpbnRmLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvdmFzbnByaW50Zi5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjY3NzAwNjY0IC0wNDAwCitAQCAtMCwwICsxLDYxIEBACisrLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1ZBU05QUklOVEZfSAorKyNkZWZpbmUgX1ZBU05QUklOVEZfSAorKworKy8qIEdldCB2YV9saXN0LiAgKi8KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrCisrLyogR2V0IHNpemVfdC4gICovCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNpZm5kZWYgX19hdHRyaWJ1dGVfXworKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkgfHwgX19TVFJJQ1RfQU5TSV9fCisrIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKysjIGVuZGlmCisrLyogVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiBgZm9ybWF0JyBhbmQgYHByaW50ZicgYXR0cmlidXRlcworKyAgIGFyZSBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDcpCisrIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0CisrIyAgZGVmaW5lIF9fcHJpbnRmX18gcHJpbnRmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZmRlZglfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gYSBzdHJpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdpdGggbWFsbG9jKCkuCisrICAgWW91IGNhbiBwYXNzIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBpbiBSRVNVTFRCVUYgYW5kIGl0cworKyAgIHNpemUgaW4gKkxFTkdUSFA7IG90aGVyd2lzZSB5b3UgcGFzcyBSRVNVTFRCVUYgPSBOVUxMLgorKyAgIElmIHN1Y2Nlc3NmdWwsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nICh0aGlzIG1heSBiZSA9IFJFU1VMVEJVRgorKyAgIGlmIG5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2FzIG5lY2Vzc2FyeSkgYW5kIHNldCAqTEVOR1RIUCB0byB0aGUKKysgICBudW1iZXIgb2YgcmVzdWx0aW5nIGJ5dGVzLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gIFVwb24gZXJyb3IsIHNldAorKyAgIGVycm5vIGFuZCByZXR1cm4gTlVMTC4gICovCisrZXh0ZXJuIGNoYXIgKiBhc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKysgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CisrZXh0ZXJuIGNoYXIgKiB2YXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisrICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOworKworKyNpZmRlZglfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogX1ZBU05QUklOVEZfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3Zhc253cHJpbnRmLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvdmFzbndwcmludGYuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjY3MzY5OTc1MiAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKy8qIHZzd3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfVkFTTldQUklOVEZfSAorKyNkZWZpbmUgX1ZBU05XUFJJTlRGX0gKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKy8qIEdldCB3Y2hhcl90LCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKysgICBzaXplIGluICpMRU5HVEhQOyBvdGhlcndpc2UgeW91IHBhc3MgUkVTVUxUQlVGID0gTlVMTC4KKysgICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0cmluZyAodGhpcyBtYXkgYmUgPSBSRVNVTFRCVUYKKysgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisrICAgbnVtYmVyIG9mIHJlc3VsdGluZyBieXRlcywgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICBVcG9uIGVycm9yLCBzZXQKKysgICBlcnJubyBhbmQgcmV0dXJuIE5VTEwuICAqLworK2V4dGVybiB3Y2hhcl90ICogYXNud3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKTsKKytleHRlcm4gd2NoYXJfdCAqIHZhc253cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworKworKyNpZmRlZglfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogX1ZBU05XUFJJTlRGX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9WRVJTSU9OCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL1ZFUlNJT04JMjAwNC0wOS0xMiAxNDo0MDozNC42Nzk2OTg4NDAgLTA0MDAKK0BAIC0xICsxIEBACistR05VIGdldHRleHQgbGlicmFyeSBmcm9tIGdldHRleHQtMC4xMC4zMgorK0dOVSBnZXR0ZXh0IGxpYnJhcnkgZnJvbSBnZXR0ZXh0LTAuMTQuMQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3dwcmludGYtcGFyc2UuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC93cHJpbnRmLXBhcnNlLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42OTU2OTY0MDggLTA0MDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBQYXJzZSBwcmludGYgZm9ybWF0IHN0cmluZy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfV1BSSU5URl9QQVJTRV9ICisrI2RlZmluZSBfV1BSSU5URl9QQVJTRV9ICisrCisrI2luY2x1ZGUgInByaW50Zi1hcmdzLmgiCisrCisrCisrLyogRmxhZ3MgKi8KKysjZGVmaW5lIEZMQUdfR1JPVVAJIDEJLyogJyBmbGFnICovCisrI2RlZmluZSBGTEFHX0xFRlQJIDIJLyogLSBmbGFnICovCisrI2RlZmluZSBGTEFHX1NIT1dTSUdOCSA0CS8qICsgZmxhZyAqLworKyNkZWZpbmUgRkxBR19TUEFDRQkgOAkvKiBzcGFjZSBmbGFnICovCisrI2RlZmluZSBGTEFHX0FMVAkxNgkvKiAjIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfWkVSTwkzMgorKworKy8qIGFyZ19pbmRleCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gYXJndW1lbnQgaXMgY29uc3VtZWQuICAqLworKyNkZWZpbmUgQVJHX05PTkUJKH4oc2l6ZV90KTApCisrCisrLyogQSBwYXJzZWQgZGlyZWN0aXZlLiAgKi8KKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGNvbnN0IHdjaGFyX3QqIGRpcl9zdGFydDsKKysgIGNvbnN0IHdjaGFyX3QqIGRpcl9lbmQ7CisrICBpbnQgZmxhZ3M7CisrICBjb25zdCB3Y2hhcl90KiB3aWR0aF9zdGFydDsKKysgIGNvbnN0IHdjaGFyX3QqIHdpZHRoX2VuZDsKKysgIHNpemVfdCB3aWR0aF9hcmdfaW5kZXg7CisrICBjb25zdCB3Y2hhcl90KiBwcmVjaXNpb25fc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiBwcmVjaXNpb25fZW5kOworKyAgc2l6ZV90IHByZWNpc2lvbl9hcmdfaW5kZXg7CisrICB3Y2hhcl90IGNvbnZlcnNpb247IC8qIGQgaSBvIHUgeCBYIGYgZSBFIGcgRyBjIHMgcCBuIFUgJSBidXQgbm90IEMgUyAqLworKyAgc2l6ZV90IGFyZ19pbmRleDsKKyt9Cisrd2NoYXJfdF9kaXJlY3RpdmU7CisrCisrLyogQSBwYXJzZWQgZm9ybWF0IHN0cmluZy4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBzaXplX3QgY291bnQ7CisrICB3Y2hhcl90X2RpcmVjdGl2ZSAqZGlyOworKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGg7CisrICBzaXplX3QgbWF4X3ByZWNpc2lvbl9sZW5ndGg7CisrfQorK3djaGFyX3RfZGlyZWN0aXZlczsKKysKKysKKysvKiBQYXJzZXMgdGhlIGZvcm1hdCBzdHJpbmcuICBGaWxscyBpbiB0aGUgbnVtYmVyIE4gb2YgZGlyZWN0aXZlcywgYW5kIGZpbGxzCisrICAgaW4gZGlyZWN0aXZlc1swXSwgLi4uLCBkaXJlY3RpdmVzW04tMV0sIGFuZCBzZXRzIGRpcmVjdGl2ZXNbTl0uZGlyX3N0YXJ0CisrICAgdG8gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZy4gIEFsc28gZmlsbHMgaW4gdGhlIGFyZ190eXBlIGZpZWxkcyBvZiB0aGUKKysgICBhcmd1bWVudHMgYW5kIHRoZSBuZWVkZWQgY291bnQgb2YgYXJndW1lbnRzLiAgKi8KKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2Vsc2UKKytleHRlcm4KKysjZW5kaWYKKytpbnQgd3ByaW50Zl9wYXJzZSAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB3Y2hhcl90X2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9XUFJJTlRGX1BBUlNFX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC94b3Blbi1tc2cuc2VkCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3hvcGVuLW1zZy5zZWQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwNCArMCwwIEBACistIyBwbzJtc2cuc2VkIC0gQ29udmVydCBVbmlmb3J1bSBzdHlsZSAucG8gZmlsZSB0byBYL09wZW4gc3R5bGUgLm1zZyBmaWxlCistIyBDb3B5cmlnaHQgKEMpIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKy0jCistIworLSMgVGhlIGZpcnN0IGRpcmVjdGl2ZSBpbiB0aGUgLm1zZyBzaG91bGQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlCistIyBtZXNzYWdlIHNldCBudW1iZXIuICBXZSB1c2UgYWx3YXlzIHNldCBudW1iZXIgMS4KKy0jCistMSB7CistICBpXAorLSRzZXQgMSAjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBwbzJtc2cuc2VkCistICBoCistICBzLy4qLzAvCistICB4CistfQorLSMKKy0jIFdlIGNvcHkgYWxsIGNvbW1lbnRzIGludG8gdGhlIC5tc2cgZmlsZS4gIFBlcmhhcHMgdGhleSBjYW4gaGVscC4KKy0jCistL14jLyBzL14jWyAJXSovJCAvcAorLSMKKy0jIFdlIGNvcHkgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgYXMgYSBjb21tZW50IGludG8gdGhlIC5tc2cgZmlsZS4KKy0jCistL15tc2dpZC8geworLSMgRG9lcyBub3Qgd29yayBub3cKKy0jICAvIiQvISB7CistIyAgICBzL1xcJC8vCistIyAgICBzLyQvIC4uLiAobW9yZSBsaW5lcyBmb2xsb3dpbmcpIi8KKy0jICB9CistICBzL15tc2dpZFsgCV0qIlwoLipcKSIkLyQgT3JpZ2luYWwgTWVzc2FnZTogXDEvCistICBwCistfQorLSMKKy0jIFRoZSAubXNnIGZpbGUgY29udGFpbnMsIG90aGVyIHRoZW4gdGhlIC5wbyBmaWxlLCBvbmx5IHRoZSB0cmFuc2xhdGlvbnMKKy0jIGJ1dCBlYWNoIGdpdmVuIGEgdW5pcXVlIElELiAgU3RhcnRpbmcgZnJvbSAxIGFuZCBpbmNyZW1lbnRpbmcgYnkgMSBmb3IKKy0jIGVhY2ggbWVzc2FnZSB3ZSBhc3NpZ24gdGhlbSB0byB0aGUgbWVzc2FnZXMuCistIyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgLnBvIGZpbGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2F0LWlkLXRibC5jIGZpbGUKKy0jICh3aXRoIHBvLXRvLXRibCkgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSB1c2VkIGhlcmUuICAoQXQgbGVhc3QgdGhlIG9yZGVyCistIyBvZiBkZWNsYXJhdGlvbnMgbXVzdCBub3QgYmUgY2hhbmdlZC4pCistIworLS9ebXNnc3RyLyB7CistICBzL21zZ3N0clsgCV0qIlwoLipcKSIvXDEvCistICB4CistIyBUaGUgZm9sbG93aW5nIG5pY2Ugc29sdXRpb24gaXMgYnkKKy0jIEJydW5vIDxIYWlibGVAbWEyczIubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgorLSAgdGQKKy0jIEluY3JlbWVudCBhIGRlY2ltYWwgbnVtYmVyIGluIHBhdHRlcm4gc3BhY2UuCistIyBGaXJzdCBoaWRlIHRyYWlsaW5nIGA5JyBkaWdpdHMuCistICA6ZAorLSAgcy85XChfKlwpJC9fXDEvCistICB0ZAorLSMgQXNzdXJlIGF0IGxlYXN0IG9uZSBkaWdpdCBpcyBhdmFpbGFibGUuCistICBzL15cKF8qXCkkLzBcMS8KKy0jIEluY3JlbWVudCB0aGUgbGFzdCBkaWdpdC4KKy0gIHMvOFwoXypcKSQvOVwxLworLSAgcy83XChfKlwpJC84XDEvCistICBzLzZcKF8qXCkkLzdcMS8KKy0gIHMvNVwoXypcKSQvNlwxLworLSAgcy80XChfKlwpJC81XDEvCistICBzLzNcKF8qXCkkLzRcMS8KKy0gIHMvMlwoXypcKSQvM1wxLworLSAgcy8xXChfKlwpJC8yXDEvCistICBzLzBcKF8qXCkkLzFcMS8KKy0jIENvbnZlcnQgdGhlIGhpZGRlbiBgOScgZGlnaXRzIHRvIGAwJ3MuCistICBzL18vMC9nCistICB4CistIyBCcmluZyB0aGUgbGluZSBpbiB0aGUgZm9ybWF0IGA8bnVtYmVyPiA8bWVzc2FnZT4nCistICBHCistICBzL15bXlxuXSokLyYgLworLSAgcy9cKC4qXClcblwoWzAtOV0qXCkvXDIgXDEvCistIyBDbGVhciBmbGFnIGZyb20gbGFzdCBzdWJzdGl0dXRpb24uCistICB0YgorLSMgQXBwZW5kIHRoZSBuZXh0IGxpbmUuCistICA6YgorLSAgTgorLSMgTG9vayB3aGV0aGVyIHNlY29uZCBwYXJ0IGlzIGEgY29udGludWF0aW9uIGxpbmUuCistICBzL1woLipcblwpIlwoLipcKSIvXDFcMi8KKy0jIFllcywgdGhlbiBicmFuY2guCistICB0YQorLSAgUAorLSAgRAorLSMgTm90ZSB0aGF0IGBEJyBpbmNsdWRlcyBhIGp1bXAgdG8gdGhlIHN0YXJ0ISEKKy0jIFdlIGZvdW5kIGEgY29udGludWF0aW9uIGxpbmUuICBCdXQgYmVmb3JlIHByaW50aW5nIGluc2VydCAnXCcuCistICA6YQorLSAgcy9cKC4qXClcKFxuLipcKS9cMVxcXDIvCistICBQCistIyBXZSBjYW5ub3QgdXNlIHRoZSBzZWQgY29tbWFuZCBgRCcgaGVyZQorLSAgcy8uKlxuXCguKlwpL1wxLworLSAgdGIKKy19CistZAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3hzaXplLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwveHNpemUuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjcwMDY5NTY0OCAtMDQwMAorQEAgLTAsMCArMSwxMDkgQEAKKysvKiB4c2l6ZS5oIC0tIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4KKysKKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1hTSVpFX0gKKysjZGVmaW5lIF9YU0laRV9ICisrCisrLyogR2V0IHNpemVfdC4gICovCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKy8qIEdldCBTSVpFX01BWC4gICovCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpZiBIQVZFX1NURElOVF9ICisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysKKysvKiBUaGUgc2l6ZSBvZiBtZW1vcnkgb2JqZWN0cyBpcyBvZnRlbiBjb21wdXRlZCB0aHJvdWdoIGV4cHJlc3Npb25zIG9mCisrICAgdHlwZSBzaXplX3QuIEV4YW1wbGU6CisrICAgICAgdm9pZCogcCA9IG1hbGxvYyAoaGVhZGVyX3NpemUgKyBuICogZWxlbWVudF9zaXplKS4KKysgICBUaGVzZSBjb21wdXRhdGlvbnMgY2FuIGxlYWQgdG8gb3ZlcmZsb3cuICBXaGVuIHRoaXMgaGFwcGVucywgbWFsbG9jKCkKKysgICByZXR1cm5zIGEgcGllY2Ugb2YgbWVtb3J5IHRoYXQgaXMgd2F5IHRvbyBzbWFsbCwgYW5kIHRoZSBwcm9ncmFtIHRoZW4KKysgICBjcmFzaGVzIHdoaWxlIGF0dGVtcHRpbmcgdG8gZmlsbCB0aGUgbWVtb3J5LgorKyAgIFRvIGF2b2lkIHRoaXMsIHRoZSBmdW5jdGlvbnMgYW5kIG1hY3JvcyBpbiB0aGlzIGZpbGUgY2hlY2sgZm9yIG92ZXJmbG93LgorKyAgIFRoZSBjb252ZW50aW9uIGlzIHRoYXQgU0laRV9NQVggcmVwcmVzZW50cyBvdmVyZmxvdy4KKysgICBtYWxsb2MgKFNJWkVfTUFYKSBpcyBub3QgZ3VhcmFudGVlZCB0byBmYWlsIC0tIHRoaW5rIG9mIGEgbWFsbG9jCisrICAgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIG1tYXAgLS0sIGl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHNpemVfb3ZlcmZsb3dfcCgpCisrICAgb3Igc2l6ZV9pbl9ib3VuZHNfcCgpIGJlZm9yZSBpbnZva2luZyBtYWxsb2MoKS4KKysgICBUaGUgZXhhbXBsZSB0aHVzIGJlY29tZXM6CisrICAgICAgc2l6ZV90IHNpemUgPSB4c3VtIChoZWFkZXJfc2l6ZSwgeHRpbWVzIChuLCBlbGVtZW50X3NpemUpKTsKKysgICAgICB2b2lkICpwID0gKHNpemVfaW5fYm91bmRzX3AgKHNpemUpID8gbWFsbG9jIChzaXplKSA6IE5VTEwpOworKyovCisrCisrLyogQ29udmVydCBhbiBhcmJpdHJhcnkgdmFsdWUgPj0gMCB0byB0eXBlIHNpemVfdC4gICovCisrI2RlZmluZSB4Y2FzdF9zaXplX3QoTikgXAorKyAgKChOKSA8PSBTSVpFX01BWCA/IChzaXplX3QpIChOKSA6IFNJWkVfTUFYKQorKworKy8qIFN1bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3hzdW0gKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyKQorK3sKKysgIHNpemVfdCBzdW0gPSBzaXplMSArIHNpemUyOworKyAgcmV0dXJuIChzdW0gPj0gc2l6ZTEgPyBzdW0gOiBTSVpFX01BWCk7CisrfQorKworKy8qIFN1bSBvZiB0aHJlZSBzaXplcywgd2l0aCBvdmVyZmxvdyBjaGVjay4gICovCisrc3RhdGljIGlubGluZSBzaXplX3QKKysjaWYgX19HTlVDX18gPj0gMworK19fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisrI2VuZGlmCisreHN1bTMgKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyLCBzaXplX3Qgc2l6ZTMpCisreworKyAgcmV0dXJuIHhzdW0gKHhzdW0gKHNpemUxLCBzaXplMiksIHNpemUzKTsKKyt9CisrCisrLyogU3VtIG9mIGZvdXIgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3hzdW00IChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMiwgc2l6ZV90IHNpemUzLCBzaXplX3Qgc2l6ZTQpCisreworKyAgcmV0dXJuIHhzdW0gKHhzdW0gKHhzdW0gKHNpemUxLCBzaXplMiksIHNpemUzKSwgc2l6ZTQpOworK30KKysKKysvKiBNYXhpbXVtIG9mIHR3byBzaXplcywgd2l0aCBvdmVyZmxvdyBjaGVjay4gICovCisrc3RhdGljIGlubGluZSBzaXplX3QKKysjaWYgX19HTlVDX18gPj0gMworK19fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisrI2VuZGlmCisreG1heCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIpCisreworKyAgLyogTm8gZXhwbGljaXQgY2hlY2sgaXMgbmVlZGVkIGhlcmUsIGJlY2F1c2UgZm9yIGFueSBuOgorKyAgICAgbWF4IChTSVpFX01BWCwgbikgPT0gU0laRV9NQVggYW5kIG1heCAobiwgU0laRV9NQVgpID09IFNJWkVfTUFYLiAgKi8KKysgIHJldHVybiAoc2l6ZTEgPj0gc2l6ZTIgPyBzaXplMSA6IHNpemUyKTsKKyt9CisrCisrLyogTXVsdGlwbGljYXRpb24gb2YgYSBjb3VudCB3aXRoIGFuIGVsZW1lbnQgc2l6ZSwgd2l0aCBvdmVyZmxvdyBjaGVjay4KKysgICBUaGUgY291bnQgbXVzdCBiZSA+PSAwIGFuZCB0aGUgZWxlbWVudCBzaXplIG11c3QgYmUgPiAwLgorKyAgIFRoaXMgaXMgYSBtYWNybywgbm90IGFuIGlubGluZSBmdW5jdGlvbiwgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgZXZlbgorKyAgIHdoZW4gTiBpcyBvZiBhIHdpZGVyIHR1cGUgYW5kIE4gPiBTSVpFX01BWC4gICovCisrI2RlZmluZSB4dGltZXMoTiwgRUxTSVpFKSBcCisrICAoKE4pIDw9IFNJWkVfTUFYIC8gKEVMU0laRSkgPyAoc2l6ZV90KSAoTikgKiAoRUxTSVpFKSA6IFNJWkVfTUFYKQorKworKy8qIENoZWNrIGZvciBvdmVyZmxvdy4gICovCisrI2RlZmluZSBzaXplX292ZXJmbG93X3AoU0laRSkgXAorKyAgKChTSVpFKSA9PSBTSVpFX01BWCkKKysvKiBDaGVjayBhZ2FpbnN0IG92ZXJmbG93LiAgKi8KKysjZGVmaW5lIHNpemVfaW5fYm91bmRzX3AoU0laRSkgXAorKyAgKChTSVpFKSAhPSBTSVpFX01BWCkKKysKKysjZW5kaWYgLyogX1hTSVpFX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvQ2hhbmdlTG9nCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNS4wNTQ2NDE4NDAgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogY29kZXNldC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogZ2V0dGV4dC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogZ2xpYmMyMS5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaWNvbnYubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludGRpdjAubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludG1heC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaW50dHlwZXMubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludHR5cGVzX2gubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludHR5cGVzLXByaS5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaXNjLXBvc2l4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsY21lc3NhZ2UubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxpYi1sZC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbGliLWxpbmsubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxpYi1wcmVmaXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxvbmdkb3VibGUubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxvbmdsb25nLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBubHMubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHBvLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwcmludGYtcG9zaXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHByb2d0ZXN0Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBzaWduZWQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHNpemVfbWF4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBzdGRpbnRfaC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogdWludG1heF90Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB1bG9uZ2xvbmcubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHdjaGFyX3QubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHdpbnRfdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogeHNpemUubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIE1ha2VmaWxlLmFtOiBOZXcgZmlsZS4KKysKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvY29kZXNldC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvY29kZXNldC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjgyMDY3NzQwOCAtMDQwMAorQEAgLTAsMCArMSwyMyBAQAorKyMgY29kZXNldC5tNCBzZXJpYWwgQU0xIChnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VUXSwgYW1fY3ZfbGFuZ2luZm9fY29kZXNldCwKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGFuZ2luZm8uaD5dLAorKyAgICAgIFtjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpO10sCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMsCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubykKKysgICAgXSkKKysgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTEFOR0lORk9fQ09ERVNFVCwgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvZ2V0dGV4dC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvZ2V0dGV4dC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjgyNjY3NjQ5NiAtMDQwMAorQEAgLTAsMCArMSw0ODcgQEAKKysjIGdldHRleHQubTQgc2VyaWFsIDI4IChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorKworK2RubCBNYWNybyB0byBhZGQgZm9yIHVzaW5nIEdOVSBnZXR0ZXh0LgorKworK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFQoW0lOVExTWU1CT0xdLCBbTkVFRFNZTUJPTF0sIFtJTlRMRElSXSkuCisrZG5sIElOVExTWU1CT0wgY2FuIGJlIG9uZSBvZiAnZXh0ZXJuYWwnLCAnbm8tbGlidG9vbCcsICd1c2UtbGlidG9vbCcuIFRoZQorK2RubCAgICBkZWZhdWx0IChpZiBpdCBpcyBub3Qgc3BlY2lmaWVkIG9yIGVtcHR5KSBpcyAnbm8tbGlidG9vbCcuCisrZG5sICAgIElOVExTWU1CT0wgc2hvdWxkIGJlICdleHRlcm5hbCcgZm9yIHBhY2thZ2VzIHdpdGggbm8gaW50bCBkaXJlY3RvcnksCisrZG5sICAgIGFuZCAnbm8tbGlidG9vbCcgb3IgJ3VzZS1saWJ0b29sJyBmb3IgcGFja2FnZXMgd2l0aCBhbiBpbnRsIGRpcmVjdG9yeS4KKytkbmwgICAgSWYgSU5UTFNZTUJPTCBpcyAndXNlLWxpYnRvb2wnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5CisrZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwubGEgd2lsbCBiZSBjcmVhdGVkIChzaGFyZWQgYW5kL29yIHN0YXRpYywKKytkbmwgICAgZGVwZW5kaW5nIG9uIC0te2VuYWJsZSxkaXNhYmxlfS17c2hhcmVkLHN0YXRpY30gYW5kIG9uIHRoZSBwcmVzZW5jZSBvZgorK2RubCAgICBBTS1ESVNBQkxFLVNIQVJFRCkuIElmIElOVExTWU1CT0wgaXMgJ25vLWxpYnRvb2wnLCBhIHN0YXRpYyBsaWJyYXJ5CisrZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwuYSB3aWxsIGJlIGNyZWF0ZWQuCisrZG5sIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcyAnbmVlZC1uZ2V0dGV4dCcsIHRoZW4gR05VIGdldHRleHQKKytkbmwgICAgaW1wbGVtZW50YXRpb25zIChpbiBsaWJjIG9yIGxpYmludGwpIHdpdGhvdXQgdGhlIG5nZXR0ZXh0KCkgZnVuY3Rpb24KKytkbmwgICAgd2lsbCBiZSBpZ25vcmVkLiAgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzCisrZG5sICAgICduZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MnLCB0aGVuIEdOVSBnZXR0ZXh0IGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0CisrZG5sICAgIHN1cHBvcnQgdGhlIElTTyBDIDk5IDxpbnR0eXBlcy5oPiBmb3JtYXRzdHJpbmcgbWFjcm9zIHdpbGwgYmUgaWdub3JlZC4KKytkbmwgSU5UTERJUiBpcyB1c2VkIHRvIGZpbmQgdGhlIGludGwgbGlicmFyaWVzLiAgSWYgZW1wdHksCisrZG5sICAgIHRoZSB2YWx1ZSBgJCh0b3BfYnVpbGRkaXIpL2ludGwvJyBpcyB1c2VkLgorK2RubAorK2RubCBUaGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmF0aW9uIGlzIG9uZSBvZiB0aHJlZSBjYXNlczoKKytkbmwgMSkgR05VIGdldHRleHQsIGFzIGluY2x1ZGVkIGluIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwgd2lsbCBiZSBjb21waWxlZAorK2RubCAgICBhbmQgdXNlZC4KKytkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IEdOVSAtLT4gaW5zdGFsbCBpbiAkKGRhdGFkaXIpCisrZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCisrZG5sIDIpIEdOVSBnZXR0ZXh0IGhhcyBiZWVuIGZvdW5kIGluIHRoZSBzeXN0ZW0ncyBDIGxpYnJhcnkuCisrZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorK2RubCAzKSBObyBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYWx3YXlzIHVzZSBFbmdsaXNoIG1zZ2lkLgorK2RubCAgICBDYXRhbG9nIGZvcm1hdDogbm9uZQorK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogbm9uZQorK2RubCBJZiBJTlRMU1lNQk9MIGlzICdleHRlcm5hbCcsIG9ubHkgY2FzZXMgMiBhbmQgMyBjYW4gb2NjdXIuCisrZG5sIFRoZSB1c2Ugb2YgLmdtbyBpcyBoaXN0b3JpY2FsIChpdCB3YXMgbmVlZGVkIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRoZQorK2RubCBHTlUgZm9ybWF0IGNhdGFsb2dzIHdoZW4gYnVpbGRpbmcgb24gYSBwbGF0Zm9ybSB3aXRoIGFuIFgvT3BlbiBnZXR0ZXh0KSwKKytkbmwgYnV0IHdlIGtlZXAgaXQgaW4gb3JkZXIgbm90IHRvIGZvcmNlIGlycmVsZXZhbnQgZmlsZW5hbWUgY2hhbmdlcyBvbiB0aGUKKytkbmwgbWFpbnRhaW5lcnMuCisrZG5sCisrQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUXSwKKytbCisrICBkbmwgQXJndW1lbnQgY2hlY2tpbmcuCisrICBpZmVsc2UoWyQxXSwgW10sICwgW2lmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLCAsIFtpZmVsc2UoWyQxXSwgW25vLWxpYnRvb2xdLCAsIFtpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgLAorKyAgICBbZXJycHJpbnQoW0VSUk9SOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCisrXSldKV0pXSldKQorKyAgaWZlbHNlKFskMl0sIFtdLCAsIFtpZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCAsIFtpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sICwKKysgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBzZWNvbmQgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQKKytdKV0pXSldKQorKyAgZGVmaW5lKGd0X2luY2x1ZGVkX2ludGwsIGlmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLCBbbm9dLCBbeWVzXSkpCisrICBkZWZpbmUoZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4LCBpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgW2xdLCBbXSkpCisrCisrICBBQ19SRVFVSVJFKFtBTV9QT19TVUJESVJTXSlkbmwKKysgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgQUNfUkVRVUlSRShbQU1fSU5UTF9TVUJESVJdKWRubAorKyAgXSkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKworKyAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorKyAgZG5sIElkZWFsbHkgd2Ugd291bGQgZG8gdGhpcyBzZWFyY2ggb25seSBhZnRlciB0aGUKKysgIGRubCAgICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrICBkbmwgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliYyIgIT0gInllcyI7IHRoZW4KKysgIGRubCB0ZXN0cy4gQnV0IGlmIGNvbmZpZ3VyZS5pbiBpbnZva2VzIEFNX0lDT05WIGFmdGVyIEFNX0dOVV9HRVRURVhUCisrICBkbmwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgbmVlZCB0byBjb250YWluIHRoZSBzYW1lIHNoZWxsIGNvZGUKKysgIGRubCBhZ2Fpbiwgb3V0c2lkZSBhbnkgJ2lmJy4gVGhlcmUgYXJlIHR3byBzb2x1dGlvbnM6CisrICBkbmwgLSBJbnZva2UgQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFkgaGVyZSwgb3V0c2lkZSBhbnkgJ2lmJy4KKysgIGRubCAtIENvbnRyb2wgdGhlIGV4cGFuc2lvbnMgaW4gbW9yZSBkZXRhaWwgdXNpbmcgQUNfUFJPVklERV9JRkVMU0UuCisrICBkbmwgU2luY2UgQUNfUFJPVklERV9JRkVMU0UgaXMgb25seSBpbiBhdXRvY29uZiA+PSAyLjUyIGFuZCBub3QKKysgIGRubCBkb2N1bWVudGVkLCB3ZSBhdm9pZCBpdC4KKysgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworKyAgICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisrICBdKQorKworKyAgZG5sIFNldCBVU0VfTkxTLgorKyAgQU1fTkxTCisrCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9bm8KKysgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9bm8KKysgIF0pCisrICBMSUJJTlRMPQorKyAgTFRMSUJJTlRMPQorKyAgUE9TVUI9CisrCisrICBkbmwgSWYgd2UgdXNlIE5MUyBmaWd1cmUgb3V0IHdoYXQgbWV0aG9kCisrICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorKyAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KKysgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBpbmNsdWRlZCBnZXR0ZXh0IGlzIHJlcXVlc3RlZF0pCisrICAgICAgQUNfQVJHX1dJVEgoaW5jbHVkZWQtZ2V0dGV4dCwKKysgICAgICAgIFsgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHVzZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpbmNsdWRlZCBoZXJlXSwKKysgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9JHdpdGh2YWwsCisrICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PW5vKQorKyAgICAgIEFDX01TR19SRVNVTFQoJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQpCisrCisrICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD0iJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiCisrICAgICAgaWYgdGVzdCAiJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisrICAgIF0pCisrICAgICAgICBkbmwgVXNlciBkb2VzIG5vdCBpbnNpc3Qgb24gdXNpbmcgR05VIE5MUyBsaWJyYXJ5LiAgRmlndXJlIG91dCB3aGF0CisrICAgICAgICBkbmwgdG8gdXNlLiAgSWYgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIHdlIHVzZSB0aGlzLiAgRWxzZSB3ZSBoYXZlCisrICAgICAgICBkbmwgdG8gZmFsbCBiYWNrIHRvIEdOVSBOTFMgbGlicmFyeS4KKysKKysgICAgICAgIGRubCBBZGQgYSB2ZXJzaW9uIG51bWJlciB0byB0aGUgY2FjaGUgbWFjcm9zLgorKyAgICAgICAgZGVmaW5lKFtndF9hcGlfdmVyc2lvbl0sIGlmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwgMywgaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgMiwgMSkpKQorKyAgICAgICAgZGVmaW5lKFtndF9jdl9mdW5jX2dudWdldHRleHRfbGliY10sIFtndF9jdl9mdW5jX2dudWdldHRleHRdZ3RfYXBpX3ZlcnNpb25bX2xpYmNdKQorKyAgICAgICAgZGVmaW5lKFtndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bF0sIFtndF9jdl9mdW5jX2dudWdldHRleHRdZ3RfYXBpX3ZlcnNpb25bX2xpYmludGxdKQorKworKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjXSwgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMsCisrICAgICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorK11pZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sCisrWyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKysjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorKyNlbmRpZgorK2NoYW5nZXF1b3RlKCwpZG5sCisrdHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrXSwgW10pW2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKytleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzO10sCisrICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArIChpbnQpIG5nZXR0ZXh0ICgiIiwgIiIsIDApXSwgW10pWyArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2RvbWFpbl9iaW5kaW5nc10sCisrICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzLAorKyAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjPW5vKV0pCisrCisrICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisrICAgICAgICAgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KKysgICAgICAgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgLCBbCisrICAgICAgICAgICAgQU1fSUNPTlZfTElOSworKyAgICAgICAgICBdKQorKyAgICAgICAgICBkbmwgU2VhcmNoIGZvciBsaWJpbnRsIGFuZCBkZWZpbmUgTElCSU5UTCwgTFRMSUJJTlRMIGFuZCBJTkNJTlRMCisrICAgICAgICAgIGRubCBhY2NvcmRpbmdseS4gRG9uJ3QgdXNlIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0sW2ljb252XSkKKysgICAgICAgICAgZG5sIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgIi1saWNvbnYiIHRvIExJQklOVEwgYW5kIExUTElCSU5UTAorKyAgICAgICAgICBkbmwgZXZlbiBpZiBsaWJpY29udiBkb2Vzbid0IGV4aXN0LgorKyAgICAgICAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdKQorKyAgICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGxdLAorKyAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsLAorKyAgICAgICAgICAgW2d0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKysgICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgorKyAgICAgICAgICAgIGd0X3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCisrICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZG9lcyBub3QgZGVwZW5kIG9uIGxpYmljb252LgorKyAgICAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorK11pZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sCisrWyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKysjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorKyNlbmRpZgorK2NoYW5nZXF1b3RlKCwpZG5sCisrdHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrXSwgW10pW2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKytleHRlcm4KKysjaWZkZWYgX19jcGx1c3BsdXMKKysiQyIKKysjZW5kaWYKKytjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzICgpO10sCisrICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CisrcmV0dXJuIChpbnQpIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKGludCkgbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKV0sCisrICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMsCisrICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD1ubykKKysgICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkZXBlbmRzIG9uIGxpYmljb252LgorKyAgICAgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgIT0geWVzICYmIHRlc3QgLW4gIiRMSUJJQ09OViI7IHRoZW4KKysgICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKysgICAgICAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorK11pZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sCisrWyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKysjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorKyNlbmRpZgorK2NoYW5nZXF1b3RlKCwpZG5sCisrdHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrXSwgW10pW2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKytleHRlcm4KKysjaWZkZWYgX19jcGx1c3BsdXMKKysiQyIKKysjZW5kaWYKKytjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzICgpO10sCisrICAgICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKKytyZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpXWlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIFsgKyAoaW50KSBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKDApXSwKKysgICAgICAgICAgICAgICBbTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgorKyAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCisrICAgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcworKyAgICAgICAgICAgICAgIF0pCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCisrICAgICAgICAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQorKyAgICAgICAgZmkKKysKKysgICAgICAgIGRubCBJZiBhbiBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkIEdOVSBnZXR0ZXh0KCkgaXMgZm91bmQsCisrICAgICAgICBkbmwgdXNlIGl0LiAgQnV0IGlmIHRoaXMgbWFjcm8gaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCwgYW5kIEdOVQorKyAgICAgICAgZG5sIGdldHRleHQgaXMgYWxyZWFkeSBwcmVpbnN0YWxsZWQgaW4gbGliaW50bCwgd2UgdXBkYXRlIHRoaXMKKysgICAgICAgIGRubCBsaWJpbnRsLiAgKENmLiB0aGUgaW5zdGFsbCBydWxlIGluIGludGwvTWFrZWZpbGUuaW4uKQorKyAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiA9ICJ5ZXMiIFwKKysgICAgICAgICAgIHx8IHsgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiIFwKKysgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtcnVudGltZSBcCisrICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXRvb2xzOyB9OyB0aGVuCisrICAgICAgICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD15ZXMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgZG5sIFJlc2V0IHRoZSB2YWx1ZXMgc2V0IGJ5IHNlYXJjaGluZyBmb3IgbGliaW50bC4KKysgICAgICAgICAgTElCSU5UTD0KKysgICAgICAgICAgTFRMSUJJTlRMPQorKyAgICAgICAgICBJTkNJTlRMPQorKyAgICAgICAgZmkKKysKKysgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgIT0gInllcyI7IHRoZW4KKysgICAgICAgICAgZG5sIEdOVSBnZXR0ZXh0IGlzIG5vdCBmb3VuZCBpbiB0aGUgQyBsaWJyYXJ5LgorKyAgICAgICAgICBkbmwgRmFsbCBiYWNrIG9uIGluY2x1ZGVkIEdOVSBnZXR0ZXh0IGxpYnJhcnkuCisrICAgICAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9eWVzCisrICAgICAgICBmaQorKyAgICAgIGZpCisrCisrICAgICAgaWYgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSBHTlUgTkxTIGxpYnJhcnkuCisrICAgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworKyAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9eWVzCisrICAgICAgICBMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTElCSUNPTlYiCisrICAgICAgICBMVExJQklOVEw9ImlmZWxzZShbJDNdLFtdLFwke3RvcF9idWlsZGRpcn0vaW50bCxbJDNdKS9saWJpbnRsLltdZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4W11hICRMVExJQklDT05WIgorKyAgICAgICAgTElCUz1gZWNobyAiICRMSUJTICIgfCBzZWQgLWUgJ3MvIC1saW50bCAvIC8nIC1lICdzL14gLy8nIC1lICdzLyAkLy8nYAorKyAgICAgIGZpCisrCisrICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisrICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdG8gdXNlIEdOVSBnZXR0ZXh0IHRvb2xzLgorKyAgICAgICAgQ0FUT0JKRVhUPS5nbW8KKysgICAgICBmaQorKyAgICBdKQorKworKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKysgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBBQ19ERUZJTkUoRU5BQkxFX05MUywgMSwKKysgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlIGxhbmd1YWdlCisrICAgaXMgcmVxdWVzdGVkLl0pCisrICAgIGVsc2UKKysgICAgICBVU0VfTkxTPW5vCisrICAgIGZpCisrICBmaQorKworKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBOTFNdKQorKyAgQUNfTVNHX1JFU1VMVChbJFVTRV9OTFNdKQorKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKysgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tXSkKKysgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgorKyAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgorKyAgICAgIGVsc2UKKysgICAgICAgIGd0X3NvdXJjZT0ibGliYyIKKysgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgZ3Rfc291cmNlPSJpbmNsdWRlZCBpbnRsIGRpcmVjdG9yeSIKKysgICAgZmkKKysgICAgQUNfTVNHX1JFU1VMVChbJGd0X3NvdXJjZV0pCisrICBmaQorKworKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKysKKysgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgorKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYmludGxdKQorKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJExJQklOVExdKQorKyAgICAgICAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSU5UTF0pCisrICAgICAgZmkKKysKKysgICAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgcGFja2FnZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgICAgQUNfREVGSU5FKEhBVkVfR0VUVEVYVCwgMSwKKysgICAgICAgW0RlZmluZSBpZiB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCisrICAgICAgQUNfREVGSU5FKEhBVkVfRENHRVRURVhULCAxLAorKyAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorKyAgICBmaQorKworKyAgICBkbmwgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgorKyAgICBQT1NVQj1wbworKyAgZmkKKysKKysgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgZG5sIElmIHRoaXMgaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCB3ZSBoYXZlIHRvIHNldCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMCisrICAgIGRubCB0byAneWVzJyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRlc3RzdWl0ZSByZXF1aXJlcyBpdC4KKysgICAgaWYgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC1ydW50aW1lIHx8IHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtdG9vbHM7IHRoZW4KKysgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworKyAgICBmaQorKworKyAgICBkbmwgTWFrZSBhbGwgdmFyaWFibGVzIHdlIHVzZSBrbm93biB0byBhdXRvY29uZi4KKysgICAgQUNfU1VCU1QoQlVJTERfSU5DTFVERURfTElCSU5UTCkKKysgICAgQUNfU1VCU1QoVVNFX0lOQ0xVREVEX0xJQklOVEwpCisrICAgIEFDX1NVQlNUKENBVE9CSkVYVCkKKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIGNvbmZpZ3VyZS5pbnMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIG5sc19jdl9oZWFkZXJfaW50bD0KKysgICAgbmxzX2N2X2hlYWRlcl9saWJndD0KKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgREFUQURJUk5BTUU9c2hhcmUKKysgICAgQUNfU1VCU1QoREFUQURJUk5BTUUpCisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIElOU1RPQkpFWFQ9Lm1vCisrICAgIEFDX1NVQlNUKElOU1RPQkpFWFQpCisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIEdFTkNBVD1nZW5jYXQKKysgICAgQUNfU1VCU1QoR0VOQ0FUKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0geWVzOyB0aGVuCisrICAgICAgSU5UTE9CSlM9IlwkKEdFVFRPQkpTKSIKKysgICAgZmkKKysgICAgQUNfU1VCU1QoSU5UTE9CSlMpCisrCisrICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KKysgICAgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVg9Z3RfbGlidG9vbF9zdWZmaXhfcHJlZml4CisrICAgIEFDX1NVQlNUKElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYKQorKyAgXSkKKysKKysgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICBJTlRMTElCUz0iJExJQklOVEwiCisrICBBQ19TVUJTVChJTlRMTElCUykKKysKKysgIGRubCBNYWtlIGFsbCBkb2N1bWVudGVkIHZhcmlhYmxlcyBrbm93biB0byBhdXRvY29uZi4KKysgIEFDX1NVQlNUKExJQklOVEwpCisrICBBQ19TVUJTVChMVExJQklOVEwpCisrICBBQ19TVUJTVChQT1NVQikKKytdKQorKworKworK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwKKytkbmwgZXhjZXB0IGZvciBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCAoYW5kIHBvc3NpYmx5IExJQlRPT0wpLCBJTlRMT0JKUywKKytkbmwgICAgICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTCwgQlVJTERfSU5DTFVERURfTElCSU5UTC4KKytBQ19ERUZVTihbQU1fSU5UTF9TVUJESVJdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCisrICBBQ19SRVFVSVJFKFtBTV9NS0lOU1RBTExESVJTXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfSVNDX1BPU0lYXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NfQ09OU1RdKWRubAorKyAgQUNfUkVRVUlSRShbYmhfQ19TSUdORURdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9PRkZfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19UWVBFX1NJWkVfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX0xPTkdfTE9OR10pZG5sCisrICBBQ19SRVFVSVJFKFtndF9UWVBFX0xPTkdET1VCTEVdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XQ0hBUl9UXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0lOVF9UXSlkbmwKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBBQ19SRVFVSVJFKFtndF9UWVBFX0lOVE1BWF9UXSkKKysgIEFDX1JFUVVJUkUoW2d0X1BSSU5URl9QT1NJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19GVU5DX0FMTE9DQV0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19GVU5DX01NQVBdKWRubAorKyAgQUNfUkVRVUlSRShbam1fR0xJQkMyMV0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9JTlRESVYwXSlkbmwKKysgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X0hFQURFUl9JTlRUWVBFU19IXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X0lOVFRZUEVTX1BSSV0pZG5sCisrICBBQ19SRVFVSVJFKFtnbF9YU0laRV0pZG5sCisrCisrICBBQ19DSEVDS19UWVBFKFtwdHJkaWZmX3RdLCAsCisrICAgIFtBQ19ERUZJTkUoW3B0cmRpZmZfdF0sIFtsb25nXSwKKysgICAgICAgW0RlZmluZSBhcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHR3byBwb2ludGVycywgaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGRlZmluZSBpdC5dKQorKyAgICBdKQorKyAgQUNfQ0hFQ0tfSEVBREVSUyhbYXJnei5oIGxpbWl0cy5oIGxvY2FsZS5oIG5sX3R5cGVzLmggbWFsbG9jLmggc3RkZGVmLmggXAorK3N0ZGxpYi5oIHN0cmluZy5oIHVuaXN0ZC5oIHN5cy9wYXJhbS5oXSkKKysgIEFDX0NIRUNLX0ZVTkNTKFthc3ByaW50ZiBmd3ByaW50ZiBnZXRjd2QgZ2V0ZWdpZCBnZXRldWlkIGdldGdpZCBnZXR1aWQgXAorK21lbXBjcHkgbXVubWFwIHB1dGVudiBzZXRlbnYgc2V0bG9jYWxlIHNucHJpbnRmIHN0cGNweSBzdHJjYXNlY21wIHN0cmR1cCBcCisrc3RydG91bCB0c2VhcmNoIHdjc2xlbiBfX2FyZ3pfY291bnQgX19hcmd6X3N0cmluZ2lmeSBfX2FyZ3pfbmV4dCBcCisrX19mc2V0bG9ja2luZ10pCisrCisrICBkbmwgVXNlIHRoZSBfc25wcmludGYgZnVuY3Rpb24gb25seSBpZiBpdCBpcyBkZWNsYXJlZCAoYmVjYXVzZSBvbiBOZXRCU0QgaXQKKysgIGRubCBpcyBkZWZpbmVkIGFzIGEgd2VhayBhbGlhcyBvZiBzbnByaW50Zjsgd2UgcHJlZmVyIHRvIHVzZSB0aGUgbGF0dGVyKS4KKysgIGd0X0NIRUNLX0RFQ0woX3NucHJpbnRmLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysgIGd0X0NIRUNLX0RFQ0woX3Nud3ByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrCisrICBkbmwgVXNlIHRoZSAqX3VubG9ja2VkIGZ1bmN0aW9ucyBvbmx5IGlmIHRoZXkgYXJlIGRlY2xhcmVkLgorKyAgZG5sIChiZWNhdXNlIHNvbWUgb2YgdGhlbSB3ZXJlIGRlZmluZWQgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBpbiBTb2xhcmlzCisrICBkbmwgMi41LjEgYnV0IHdlcmUgcmVtb3ZlZCBpbiBTb2xhcmlzIDIuNiwgd2hlcmVhcyB3ZSB3YW50IGJpbmFyaWVzIGJ1aWx0CisrICBkbmwgb24gU29sYXJpcyAyLjUuMSB0byBydW4gb24gU29sYXJpcyAyLjYpLgorKyAgZG5sIERvbid0IHVzZSBBQ19DSEVDS19ERUNMUyBiZWNhdXNlIGl0IGlzbid0IHN1cHBvcnRlZCBpbiBhdXRvY29uZi0yLjEzLgorKyAgZ3RfQ0hFQ0tfREVDTChmZW9mX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysgIGd0X0NIRUNLX0RFQ0woZmdldHNfdW5sb2NrZWQsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKyAgZ3RfQ0hFQ0tfREVDTChnZXRjX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysKKysgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisrICAgICp5ZXMpIEhBVkVfUE9TSVhfUFJJTlRGPTEgOzsKKysgICAgKikgSEFWRV9QT1NJWF9QUklOVEY9MCA7OworKyAgZXNhYworKyAgQUNfU1VCU1QoW0hBVkVfUE9TSVhfUFJJTlRGXSkKKysgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2FzcHJpbnRmIiA9IHllczsgdGhlbgorKyAgICBIQVZFX0FTUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9BU1BSSU5URj0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfQVNQUklOVEZdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfc25wcmludGYiID0geWVzOyB0aGVuCisrICAgIEhBVkVfU05QUklOVEY9MQorKyAgZWxzZQorKyAgICBIQVZFX1NOUFJJTlRGPTAKKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9TTlBSSU5URl0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY193cHJpbnRmIiA9IHllczsgdGhlbgorKyAgICBIQVZFX1dQUklOVEY9MQorKyAgZWxzZQorKyAgICBIQVZFX1dQUklOVEY9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX1dQUklOVEZdKQorKworKyAgQU1fSUNPTlYKKysgIEFNX0xBTkdJTkZPX0NPREVTRVQKKysgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9sb2NhbGVfaCA9IHllczsgdGhlbgorKyAgICBBTV9MQ19NRVNTQUdFUworKyAgZmkKKysKKysgIGRubCBpbnRsL3BsdXJhbC5jIGlzIGdlbmVyYXRlZCBmcm9tIGludGwvcGx1cmFsLnkuIEl0IHJlcXVpcmVzIGJpc29uLAorKyAgZG5sIGJlY2F1c2UgcGx1cmFsLnkgdXNlcyBiaXNvbiBzcGVjaWZpYyBmZWF0dXJlcy4gSXQgcmVxdWlyZXMgYXQgbGVhc3QKKysgIGRubCBiaXNvbi0xLjI2IGJlY2F1c2UgZWFybGllciB2ZXJzaW9ucyBnZW5lcmF0ZSBhIHBsdXJhbC5jIHRoYXQgZG9lc24ndAorKyAgZG5sIGNvbXBpbGUuCisrICBkbmwgYmlzb24gaXMgb25seSBuZWVkZWQgZm9yIHRoZSBtYWludGFpbmVyICh3aG8gdG91Y2hlcyBwbHVyYWwueSkuIEJ1dCBpbgorKyAgZG5sIG9yZGVyIHRvIGF2b2lkIHNlcGFyYXRlIE1ha2VmaWxlcyBvciAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUsIHdlIHB1dAorKyAgZG5sIHRoZSBydWxlIGluIGdlbmVyYWwgTWFrZWZpbGUuIE5vdywgc29tZSBwZW9wbGUgY2FyZWxlc3NseSB0b3VjaCB0aGUKKysgIGRubCBmaWxlcyBvciBoYXZlIGEgYnJva2VuICJtYWtlIiBwcm9ncmFtLCBoZW5jZSB0aGUgcGx1cmFsLmMgcnVsZSB3aWxsCisrICBkbmwgc29tZXRpbWVzIGZpcmUuIFRvIGF2b2lkIGFuIGVycm9yLCBkZWZpbmVzIEJJU09OIHRvICI6IiBpZiBpdCBpcyBub3QKKysgIGRubCBwcmVzZW50IG9yIHRvbyBvbGQuCisrICBBQ19DSEVDS19QUk9HUyhbSU5UTEJJU09OXSwgW2Jpc29uXSkKKysgIGlmIHRlc3QgLXogIiRJTlRMQklTT04iOyB0aGVuCisrICAgIGFjX3ZlcmNfZmFpbD15ZXMKKysgIGVsc2UKKysgICAgZG5sIEZvdW5kIGl0LCBub3cgY2hlY2sgdGhlIHZlcnNpb24uCisrICAgIEFDX01TR19DSEVDS0lORyhbdmVyc2lvbiBvZiBiaXNvbl0pCisrY2hhbmdlcXVvdGUoPDwsPj4pZG5sCisrICAgIGFjX3Byb2dfdmVyc2lvbj1gJElOVExCSVNPTiAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAncy9eLipHTlUgQmlzb24uKiBcKFswLTldKlwuWzAtOS5dKlwpLiokL1wxL3AnYAorKyAgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKysgICAgICAnJykgYWNfcHJvZ192ZXJzaW9uPSJ2LiA/Lj8/LCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKysgICAgICAxLjJbNi05XSogfCAxLlszLTldWzAtOV0qIHwgWzItOV0uKikKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrICAgICAgICAgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBvayI7IGFjX3ZlcmNfZmFpbD1ubzs7CisrICAgICAgKikgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKysgICAgZXNhYworKyAgICBBQ19NU0dfUkVTVUxUKFskYWNfcHJvZ192ZXJzaW9uXSkKKysgIGZpCisrICBpZiB0ZXN0ICRhY192ZXJjX2ZhaWwgPSB5ZXM7IHRoZW4KKysgICAgSU5UTEJJU09OPToKKysgIGZpCisrXSkKKysKKysKKytkbmwgZ3RfQ0hFQ0tfREVDTChGVU5DLCBJTkNMVURFUykKKytkbmwgQ2hlY2sgd2hldGhlciBhIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLgorK0FDX0RFRlVOKFtndF9DSEVDS19ERUNMXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkMSBpcyBkZWNsYXJlZF0sIGFjX2N2X2hhdmVfZGVjbF8kMSwKKysgICAgW0FDX1RSWV9DT01QSUxFKFskMl0sIFsKKysjaWZuZGVmICQxCisrICBjaGFyICpwID0gKGNoYXIgKikgJDE7CisrI2VuZGlmCisrXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxPXllcywgYWNfY3ZfaGF2ZV9kZWNsXyQxPW5vKV0pCisrICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfJDEgPSB5ZXM7IHRoZW4KKysgICAgZ3RfdmFsdWU9MQorKyAgZWxzZQorKyAgICBndF92YWx1ZT0wCisrICBmaQorKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX0RFQ0xfXXRyYW5zbGl0KCQxLCBbYS16XSwgW0EtWl0pLCBbJGd0X3ZhbHVlXSwKKysgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgJDEnLCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuXSkKKytdKQorKworKworK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbZ2V0dGV4dC12ZXJzaW9uXSkKKytBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfVkVSU0lPTl0sIFtdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9nbGliYzIxLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9nbGliYzIxLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODMzNjc1NDMyIC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyBnbGliYzIxLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4xLjMsIGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRlc3QgZm9yIHRoZSBHTlUgQyBMaWJyYXJ5LCB2ZXJzaW9uIDIuMSBvciBuZXdlci4KKysjIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtqbV9HTElCQzIxXSwKKysgIFsKKysgICAgQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgMi4xIG9yIG5ld2VyLAorKyAgICAgIGFjX2N2X2dudV9saWJyYXJ5XzJfMSwKKysgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisrCVsKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19HTlVfTElCUkFSWV9fCisrICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorKyAgTHVja3kgR05VIHVzZXIKKysgI2VuZGlmCisrI2VuZGlmCisrCV0sCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT1ubykKKysgICAgICBdCisrICAgICkKKysgICAgQUNfU1VCU1QoR0xJQkMyMSkKKysgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKysgIF0KKyspCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ljb252Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pY29udi5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjgzOTY3NDUyMCAtMDQwMAorQEAgLTAsMCArMSwxMDMgQEAKKysjIGljb252Lm00IHNlcmlhbCBBTTQgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaWNvbnZdKQorK10pCisrCisrQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorK1sKKysgIGRubCBTb21lIHN5c3RlbXMgaGF2ZSBpY29udiBpbiBsaWJjLCBzb21lIGhhdmUgaXQgaW4gbGliaWNvbnYgKE9TRi8xIGFuZAorKyAgZG5sIHRob3NlIHdpdGggdGhlIHN0YW5kYWxvbmUgcG9ydGFibGUgR05VIGxpYmljb252IGluc3RhbGxlZCkuCisrCisrICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgorKyAgZG5sIGFjY29yZGluZ2x5LgorKyAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQorKworKyAgZG5sIEFkZCAkSU5DSUNPTlYgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisrICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYmljb252IGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4LCBoZSB3YW50cyB0byB1c2UgaXQuIFRoZSBmaXJzdAorKyAgZG5sIEFDX1RSWV9MSU5LIHdpbGwgdGhlbiBmYWlsLCB0aGUgc2Vjb25kIEFDX1RSWV9MSU5LIHdpbGwgc3VjY2VlZC4KKysgIGFtX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lDT05WXSkKKysKKysgIEFDX0NBQ0hFX0NIRUNLKGZvciBpY29udiwgYW1fY3ZfZnVuY19pY29udiwgWworKyAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFsbGluZyBHTlUgbGliaWNvbnYiCisrICAgIGFtX2N2X2xpYl9pY29udj1ubworKyAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxpY29udi5oPl0sCisrICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKysgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisrICAgICAgIGljb252X2Nsb3NlKGNkKTtdLAorKyAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzKQorKyAgICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgIT0geWVzOyB0aGVuCisrICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisrICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8aWNvbnYuaD5dLAorKyAgICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKysgICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKysgICAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKysgICAgICAgIGFtX2N2X2xpYl9pY29udj15ZXMKKysgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzKQorKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisrICAgIGZpCisrICBdKQorKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0lDT05WLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uLl0pCisrICBmaQorKyAgaWYgdGVzdCAiJGFtX2N2X2xpYl9pY29udiIgPSB5ZXM7IHRoZW4KKysgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYmljb252XSkKKysgICAgQUNfTVNHX1JFU1VMVChbJExJQklDT05WXSkKKysgIGVsc2UKKysgICAgZG5sIElmICRMSUJJQ09OViBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkICRJTkNJQ09OVgorKyAgICBkbmwgZWl0aGVyLgorKyAgICBDUFBGTEFHUz0iJGFtX3NhdmVfQ1BQRkxBR1MiCisrICAgIExJQklDT05WPQorKyAgICBMVExJQklDT05WPQorKyAgZmkKKysgIEFDX1NVQlNUKExJQklDT05WKQorKyAgQUNfU1VCU1QoTFRMSUJJQ09OVikKKytdKQorKworK0FDX0RFRlVOKFtBTV9JQ09OVl0sCisrWworKyAgQU1fSUNPTlZfTElOSworKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGljb252IGRlY2xhcmF0aW9uXSkKKysgICAgQUNfQ0FDSEVfVkFMKGFtX2N2X3Byb3RvX2ljb252LCBbCisrICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8aWNvbnYuaD4KKytleHRlcm4KKysjaWZkZWYgX19jcGx1c3BsdXMKKysiQyIKKysjZW5kaWYKKysjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKKytzaXplX3QgaWNvbnYgKGljb252X3QgY2QsIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CisrI2Vsc2UKKytzaXplX3QgaWNvbnYoKTsKKysjZW5kaWYKKytdLCBbXSwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iIiwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iY29uc3QiKQorKyAgICAgIGFtX2N2X3Byb3RvX2ljb252PSJleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IGNkLCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOyJdKQorKyAgICBhbV9jdl9wcm90b19pY29udj1gZWNobyAiWyRdYW1fY3ZfcHJvdG9faWNvbnYiIHwgdHIgLXMgJyAnIHwgc2VkIC1lICdzLyggLygvJ2AKKysgICAgQUNfTVNHX1JFU1VMVChbJF17YWNfdDotCisrICAgICAgICAgfVskXWFtX2N2X3Byb3RvX2ljb252KQorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSUNPTlZfQ09OU1QsICRhbV9jdl9wcm90b19pY29udl9hcmcxLAorKyAgICAgIFtEZWZpbmUgYXMgY29uc3QgaWYgdGhlIGRlY2xhcmF0aW9uIG9mIGljb252KCkgbmVlZHMgY29uc3QuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50ZGl2MC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50ZGl2MC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljg0NTY3MzYwOCAtMDQwMAorQEAgLTAsMCArMSw3MiBAQAorKyMgaW50ZGl2MC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbZ3RfSU5URElWMF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRV0sCisrICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlLAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzaWduYWwuaD4KKysKKytzdGF0aWMgdm9pZAorKyNpZmRlZiBfX2NwbHVzcGx1cworK3NpZ2ZwZV9oYW5kbGVyIChpbnQgc2lnKQorKyNlbHNlCisrc2lnZnBlX2hhbmRsZXIgKHNpZykgaW50IHNpZzsKKysjZW5kaWYKKyt7CisrICAvKiBFeGl0IHdpdGggY29kZSAwIGlmIFNJR0ZQRSwgd2l0aCBjb2RlIDEgaWYgYW55IG90aGVyIHNpZ25hbC4gICovCisrICBleGl0IChzaWcgIT0gU0lHRlBFKTsKKyt9CisrCisraW50IHggPSAxOworK2ludCB5ID0gMDsKKytpbnQgejsKKytpbnQgbmFuOworKworK2ludCBtYWluICgpCisreworKyAgc2lnbmFsIChTSUdGUEUsIHNpZ2ZwZV9oYW5kbGVyKTsKKysvKiBJUklYIGFuZCBBSVggKHdoZW4gInhsYyAtcWNoZWNrIiBpcyB1c2VkKSB5aWVsZCBzaWduYWwgU0lHVFJBUC4gICovCisrI2lmIChkZWZpbmVkIChfX3NnaSkgfHwgZGVmaW5lZCAoX0FJWCkpICYmIGRlZmluZWQgKFNJR1RSQVApCisrICBzaWduYWwgKFNJR1RSQVAsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysvKiBMaW51eC9TUEFSQyB5aWVsZHMgc2lnbmFsIFNJR0lMTC4gICovCisrI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZCAoX19saW51eF9fKQorKyAgc2lnbmFsIChTSUdJTEwsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysKKysgIHogPSB4IC8geTsKKysgIG5hbiA9IHkgLyB5OworKyAgZXhpdCAoMSk7CisrfQorK10sIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPXllcywgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9bm8sCisrICAgICAgICBbCisrICAgICAgICAgICMgR3Vlc3MgYmFzZWQgb24gdGhlIENQVS4KKysgICAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorKyAgICAgICAgICAgIGFscGhhKiB8IGlbMzQ1NjddODYgfCBtNjhrIHwgczM5MCopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIjs7CisrICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyBubyI7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICBdKQorKyAgICBdKQorKyAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgorKyAgICAqeWVzKSB2YWx1ZT0xOzsKKysgICAgKikgdmFsdWU9MDs7CisrICBlc2FjCisrICBBQ19ERUZJTkVfVU5RVU9URUQoSU5URElWMF9SQUlTRVNfU0lHRlBFLCAkdmFsdWUsCisrICAgIFtEZWZpbmUgaWYgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLl0pCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50bWF4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnRtYXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NTU2NzIwODggLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGludG1heC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKytkbmwgVGVzdCB3aGV0aGVyIHRoZSBzeXN0ZW0gaGFzIHRoZSAnaW50bWF4X3QnIHR5cGUsIGJ1dCBkb24ndCBhdHRlbXB0IHRvCisrZG5sIGZpbmQgYSByZXBsYWNlbWVudCBpZiBpdCBpcyBsYWNraW5nLgorKworK0FDX0RFRlVOKFtndF9UWVBFX0lOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgQUNfQ0FDSEVfQ0hFQ0soZm9yIGludG1heF90LCBndF9jdl9jX2ludG1heF90LAorKyAgICBbQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzdGRkZWYuaD4gCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorK10sIFtpbnRtYXhfdCB4ID0gLTE7XSwgZ3RfY3ZfY19pbnRtYXhfdD15ZXMsIGd0X2N2X2NfaW50bWF4X3Q9bm8pXSkKKysgIGlmIHRlc3QgJGd0X2N2X2NfaW50bWF4X3QgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfSU5UTUFYX1QsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludHR5cGVzX2gubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludHR5cGVzX2gubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44Njg2NzAxMTIgLTA0MDAKK0BAIC0wLDAgKzEsMjggQEAKKysjIGludHR5cGVzX2gubTQgc2VyaWFsIDUgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsCisrIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KKysKKytBQ19ERUZVTihbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oLAorKyAgW0FDX1RSWV9DT01QSUxFKAorKyAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcywKKysgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8pXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisrICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludHR5cGVzLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlcy5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljg2MTY3MTE3NiAtMDQwMAorQEAgLTAsMCArMSwyNyBAQAorKyMgaW50dHlwZXMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGgKKysjIDxzeXMvdHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2d0X0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFsKKysgICAgQUNfVFJZX0NPTVBJTEUoCisrICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICAgIFtdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKQorKyAgXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0gsIDEsCisrICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlcy1wcmkubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludHR5cGVzLXByaS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljg3NDY2OTIwMCAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgaW50dHlwZXMtcHJpLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrIyBEZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB0aGUgUFJJKgorKyMgbWFjcm9zIHRvIG5vbi1zdHJpbmcgdmFsdWVzLiAgVGhpcyBpcyB0aGUgY2FzZSBvbiBBSVggNC4zLjMuCisrCisrQUNfREVGVU4oW2d0X0lOVFRZUEVTX1BSSV0sCisrWworKyAgQUNfUkVRVUlSRShbZ3RfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgaWYgdGVzdCAkZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKKysgICAgICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuLAorKyAgICAgIFsKKysgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjaWZkZWYgUFJJZDMyCisrY2hhciAqcCA9IFBSSWQzMjsKKysjZW5kaWYKKytdLCBbXSwgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj1ubywgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXMpCisrICAgICAgXSkKKysgIGZpCisrICBpZiB0ZXN0ICIkZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKFBSSV9NQUNST1NfQlJPS0VOLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pc2MtcG9zaXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2lzYy1wb3NpeC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljg4NTY2NzUyOCAtMDQwMAorQEAgLTAsMCArMSwyNiBAQAorKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYtMi41MyBhbmQgbmV3ZXIuICBSZW1vdmUgaXQgaW4gMjAwNS4KKysKKysjIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb25lIGluIGF1dG9jb25mLgorKyMgQ3VycmVudGx5IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYXV0b2NvbmYgbWFjcm8KKysjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorKyMgc3RpbGwgdXNlcyBpdC4gIE90aGVyd2lzZSwgdGhlIHVzZSBpbiBnZXR0ZXh0Lm00IG1ha2VzIGF1dG9oZWFkZXIKKysjIGdpdmUgdGhlc2UgZGlhZ25vc3RpY3M6CisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfUlVOIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKworK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorKworK0FDX0RFRlVOKFtBQ19JU0NfUE9TSVhdLAorKyAgWworKyAgICBkbmwgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvYnNvbGVzY2VudCBBQ19JU0NfUE9TSVgga2x1ZGdlLgorKyAgICBBQ19DSEVDS19MSUIoY3Bvc2l4LCBzdHJlcnJvciwgW0xJQlM9IiRMSUJTIC1sY3Bvc2l4Il0pCisrICBdCisrKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sY21lc3NhZ2UubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xjbWVzc2FnZS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjkwMjY2NDk0NCAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgbGNtZXNzYWdlLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorKworKyMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KKysKKytBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKysgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGliLWxkLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9saWItbGQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45MDg2NjQwMzIgLTA0MDAKK0BAIC0wLDAgKzEsMTEyIEBACisrIyBsaWItbGQubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgU3Vicm91dGluZXMgb2YgbGlidG9vbC5tNCwKKytkbmwgd2l0aCByZXBsYWNlbWVudHMgcy9BQ18vQUNfTElCLyBhbmQgcy9sdF9jdi9hY2xfY3YvIHRvIGF2b2lkIGNvbGxpc2lvbgorK2RubCB3aXRoIGxpYnRvb2wubTQuCisrCisrZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIHdpdGhfZ251X2xkIHRvIHllcyBvciBuby4KKytBQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKKytbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgYWNsX2N2X3Byb2dfZ251X2xkLAorK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisrKkdOVSogfCAqJ3dpdGggQkZEJyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7CisrKikKKysgIGFjbF9jdl9wcm9nX2dudV9sZD1ubyA7OworK2VzYWNdKQorK3dpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKKytdKQorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSBMRC4KKytBQ19ERUZVTihbQUNfTElCX1BST0dfTERdLAorK1tBQ19BUkdfV0lUSChnbnUtbGQsCisrWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCisrdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzLCB3aXRoX2dudV9sZD1ubykKKytBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisrICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisrICBjaG1vZCAreCBjb25mJCQuc2gKKysgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgZWxzZQorKyAgICBQQVRIX1NFUEFSQVRPUj06CisrICBmaQorKyAgcm0gLWYgY29uZiQkLnNoCisrZmkKKythY19wcm9nPWxkCisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSBHQ0NdKQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KikKKysgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisrICAqKQorKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisrICBlc2FjCisrICBjYXNlICRhY19wcm9nIGluCisrICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorKyAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KKysgICAgICBbcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJ10KKysgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZAorKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisrICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisrCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKKysgICAgICBkb25lCisrICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisrICAgICAgOzsKKysgICIiKQorKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKysgICAgYWNfcHJvZz1sZAorKyAgICA7OworKyAgKikKKysgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorKyAgICB3aXRoX2dudV9sZD11bmtub3duCisrICAgIDs7CisrICBlc2FjCisrZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorK2Vsc2UKKysgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorK2ZpCisrQUNfQ0FDSEVfVkFMKGFjbF9jdl9wYXRoX0xELAorK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisrICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQQVJBVE9SLTp9IgorKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKysgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisrICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisrICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKysgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKysgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrIDs7CisrICAgICAgKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrICBkb25lCisrICBJRlM9IiRhY19zYXZlX2lmcyIKKytlbHNlCisrICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKytmaV0pCisrTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKKytpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKCRMRCkKKytlbHNlCisrICBBQ19NU0dfUkVTVUxUKG5vKQorK2ZpCisrdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKKytBQ19MSUJfUFJPR19MRF9HTlUKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9saWItbGluay5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbGliLWxpbmsubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45MTQ2NjMxMjAgLTA0MDAKK0BAIC0wLDAgKzEsNTUxIEBACisrIyBsaWItbGluay5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorK2RubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKyAgQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVbXV9saWJzXSwgWworKyAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzPSIkTFRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzPSIkSU5DW11OQU1FIgorKyAgXSkKKysgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCisrICBMVExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicyIKKysgIElOQ1tdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUUpCisrICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIGRubCBBbHNvIHNldCBIQVZFX0xJQltdTkFNRSBzbyB0aGF0IEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gcmV1c2UgdGhlCisrICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKysgIEhBVkVfTElCW11OQU1FPXllcworKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKKytkbmwgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQKKytkbmwgaW1wbGljaXQgZGVwZW5kZW5jaWVzLCB0b2dldGhlciB3aXRoIHRoZSBzcGVjaWZpZWQgaW5jbHVkZSBmaWxlcyBhbmQKKytkbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBJZiBmb3VuZCwgaXQKKytkbmwgc2V0cyBhbmQgQUNfU1VCU1RzIEhBVkVfTElCJHtOQU1FfT15ZXMgYW5kIHRoZSBMSUIke05BTUV9IGFuZAorK2RubCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUsIGFuZAorK2RubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKKytkbmwgSEFWRV9MSUIke05BTUV9PW5vIGFuZCBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdG8gZW1wdHkuCisrQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrCisrICBkbmwgU2VhcmNoIGZvciBsaWJbXU5hbWUgYW5kIGRlZmluZSBMSUJbXU5BTUUsIExUTElCW11OQU1FIGFuZCBJTkNbXU5BTUUKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorKworKyAgZG5sIEFkZCAkSU5DW11OQU1FIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJbXU5hbWUgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisrICBkbmwgdmlhIC0td2l0aG91dC1saWJbXU5hbWUtcHJlZml4LCBoZSB3YW50cyB0byB1c2UgaXQuCisrICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVdLCBbCisrICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgIExJQlM9IiRMSUJTICRMSUJbXU5BTUUiCisrICAgIEFDX1RSWV9MSU5LKFskM10sIFskNF0sIFthY19jdl9saWJbXU5hbWU9eWVzXSwgW2FjX2N2X2xpYltdTmFtZT1ub10pCisrICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisrICBdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9MSUJbXU5BTUU9eWVzCisrICAgIEFDX0RFRklORShbSEFWRV9MSUJdTkFNRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJDEgbGlicmFyeS5dKQorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0pCisrICAgIEFDX01TR19SRVNVTFQoWyRMSUJbXU5BTUVdKQorKyAgZWxzZQorKyAgICBIQVZFX0xJQltdTkFNRT1ubworKyAgICBkbmwgSWYgJExJQltdTkFNRSBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkCisrICAgIGRubCAkSU5DW11OQU1FIGVpdGhlci4KKysgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorKyAgICBMSUJbXU5BTUU9CisrICAgIExUTElCW11OQU1FPQorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICB1bmRlZmluZShbTmFtZV0pCisrICB1bmRlZmluZShbTkFNRV0pCisrXSkKKysKKytkbmwgRGV0ZXJtaW5lIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbnQgcGFyYW1ldGVycyBuZWVkZWQgdG8gdXNlIHJwYXRoOgorK2RubCBsaWJleHQsIHNobGliZXh0LCBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorK2RubCBoYXJkY29kZV9kaXJlY3QsIGhhcmRjb2RlX21pbnVzX0wuCisrQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BST0dfTERdKSAgICAgICAgICAgIGRubCB3ZSB1c2UgJExELCAkd2l0aF9nbnVfbGQKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgICAgICAgICBkbmwgd2UgdXNlICRob3N0CisrICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW5dLCBhY2xfY3ZfcnBhdGgsIFsKKysgICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAorKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKysgICAgLiAuL2NvbmZ0ZXN0LnNoCisrICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKKysgICAgYWNsX2N2X3JwYXRoPWRvbmUKKysgIF0pCisrICB3bD0iJGFjbF9jdl93bCIKKysgIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCisrICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKysgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKysgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysgIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisrICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisrICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgd2FudHMgcnBhdGggaGFuZGxpbmcgYXQgYWxsLgorKyAgQUNfQVJHX0VOQUJMRShycGF0aCwKKysgICAgWyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRoc10sCisrICAgIDosIGVuYWJsZV9ycGF0aD15ZXMpCisrXSkKKysKKytkbmwgQUNfTElCX0xJTktGTEFHU19CT0RZKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisrZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorK2RubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0JPRFldLAorK1sKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWIkMS1wcmVmaXhdLAorK1sgIC0td2l0aC1saWIkMS1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWIkMS1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZAorKyAgZG5sICRMREZMQUdTLiBVc2luZyBicmVhZHRoLWZpcnN0LXNlYWNoLgorKyAgTElCW11OQU1FPQorKyAgTFRMSUJbXU5BTUU9CisrICBJTkNbXU5BTUU9CisrICBycGF0aGRpcnM9CisrICBsdHJwYXRoZGlycz0KKysgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKysgIG5hbWVzX25leHRfcm91bmQ9JyQxICQyJworKyAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbworKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKysgICAgbmFtZXNfbmV4dF9yb3VuZD0KKysgICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCisrICAgICAgYWxyZWFkeV9oYW5kbGVkPQorKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisrICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCisrICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisrICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCisrICAgICAgICBkbmwgU2VlIGlmIGl0IHdhcyBhbHJlYWR5IGxvY2F0ZWQgYnkgYW4gZWFybGllciBBQ19MSUJfTElOS0ZMQUdTCisrICAgICAgICBkbmwgb3IgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbGwuCisrICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAorKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKysgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kdmFsdWUiCisrICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZG5sIEFuIGVhcmxpZXIgY2FsbCB0byBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgaGFzIGRldGVybWluZWQKKysgICAgICAgICAgICBkbmwgdGhhdCB0aGlzIGxpYnJhcnkgZG9lc24ndCBleGlzdC4gU28ganVzdCBkcm9wIGl0LgorKyAgICAgICAgICAgIDoKKysgICAgICAgICAgZmkKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBsaWIkbmFtZSBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kICRMREZMQUdTCisrICAgICAgICAgIGRubCBhbmQgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUvJExUTElCTkFNRS4KKysgICAgICAgICAgZm91bmRfZGlyPQorKyAgICAgICAgICBmb3VuZF9sYT0KKysgICAgICAgICAgZm91bmRfc289CisrICAgICAgICAgIGZvdW5kX2E9CisrICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICBmb3VuZF9zbz0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGZpCisrICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKysgICAgICAgICAgICAgICAgLUwqKQorKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvbGliJG5hbWUuJGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkb25lCisrICAgICAgICAgIGZpCisrICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBkbmwgRm91bmQgdGhlIGxpYnJhcnkuCisrICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzaGFyZWQgbGlicmFyeS4gV2UgYXR0ZW1wdCB0byBoYXJkY29kZSBpdHMKKysgICAgICAgICAgICAgIGRubCBkaXJlY3RvcnkgaW50byB0aGUgZXhlY3V0YWJsZSdzIHJ1bnBhdGgsIHVubGVzcyBpdCdzIHRoZQorKyAgICAgICAgICAgICAgZG5sIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkbmwgTm8gaGFyZGNvZGluZyBpcyBuZWVkZWQuCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisrICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisrICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgZG5sIFJlbHkgb24gIi1MJGZvdW5kX2RpciIuCisrICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBMREZMQUdTCisrICAgICAgICAgICAgICAgICAgICBkbmwgb3IgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUKKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgY29tcGlsZXIuIFNvIGdpdmUgdXAuIE5vIGhhcmRjb2RpbmcuIFRoaXMgYWZmZWN0cyBvbmx5CisrICAgICAgICAgICAgICAgICAgICAgIGRubCB2ZXJ5IG9sZCBzeXN0ZW1zLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHN0YXRpYyBsaWJyYXJ5LgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9hIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkbmwgV2Ugc2hvdWxkbid0IGNvbWUgaGVyZSwgYnV0IGFueXdheSBpdCdzIGdvb2QgdG8gaGF2ZSBhCisrICAgICAgICAgICAgICAgIGRubCBmYWxsYmFjay4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgQXNzdW1lIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBuZWFyYnkuCisrICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQorKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisrICAgICAgICAgICAgICAqL2xpYiB8ICovbGliLykKKysgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICdzLC9saWIvKiQsLCdgCisrICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKysgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkSU5DTkFNRSwKKysgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisrICAgICAgICAgICAgICAgICAgICAgIElOQ1tdTkFNRT0iJHtJTkNbXU5BTUV9JHtJTkNbXU5BTUU6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBMb29rIGZvciBkZXBlbmRlbmNpZXMuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIFJlYWQgdGhlIC5sYSBmaWxlLiBJdCBkZWZpbmVzIHRoZSB2YXJpYWJsZXMKKysgICAgICAgICAgICAgIGRubCBkbG5hbWUsIGxpYnJhcnlfbmFtZXMsIG9sZF9saWJyYXJ5LCBkZXBlbmRlbmN5X2xpYnMsIGN1cnJlbnQsCisrICAgICAgICAgICAgICBkbmwgYWdlLCByZXZpc2lvbiwgaW5zdGFsbGVkLCBkbG9wZW4sIGRscHJlb3BlbiwgbGliZGlyLgorKyAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisrICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKKysgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKKysgICAgICAgICAgICAgIGRubCBXZSB1c2Ugb25seSBkZXBlbmRlbmN5X2xpYnMuCisrICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisrICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisrICAgICAgICAgICAgICAgICAgLUwqKQorKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUgYW5kICRMVExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1Mgb3IgdGhlIGFscmVhZHkKKysgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgLVIqKQorKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1sKikKKysgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4KKysgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICoubGEpCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuIFRocm93IGF3YXkgdGhlIC5sYSdzCisrICAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5OyBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIHByZWNlZGluZyAtTAorKyAgICAgICAgICAgICAgICAgICAgZG5sIG9wdGlvbi4KKysgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICopCisrICAgICAgICAgICAgICAgICAgICBkbmwgTW9zdCBsaWtlbHkgYW4gaW1tZWRpYXRlIGxpYnJhcnkgbmFtZS4KKysgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGRlcCIKKysgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JGRlcCIKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZG5sIERpZG4ndCBmaW5kIHRoZSBsaWJyYXJ5OyBhc3N1bWUgaXQgaXMgaW4gdGhlIHN5c3RlbSBkaXJlY3RvcmllcworKyAgICAgICAgICAgIGRubCBrbm93biB0byB0aGUgbGlua2VyIGFuZCBydW50aW1lIGxvYWRlci4gKEFsbCB0aGUgc3lzdGVtCisrICAgICAgICAgICAgZG5sIGRpcmVjdG9yaWVzIGtub3duIHRvIHRoZSBsaW5rZXIgc2hvdWxkIGFsc28gYmUga25vd24gdG8gdGhlCisrICAgICAgICAgICAgZG5sIHJ1bnRpbWUgbG9hZGVyLCBvdGhlcndpc2UgdGhlIHN5c3RlbSBpcyBzZXZlcmVseSBtaXNjb25maWd1cmVkLikKKysgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBkb25lCisrICBkb25lCisrICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisrICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIgbXVzdAorKyAgICAgIGRubCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uIFdlIGNhbiBhcnJhbmdlIHRoYXQgZm9yIGEKKysgICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KKysgICAgICBhbGxkaXJzPQorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisrICAgICAgZG9uZQorKyAgICAgIGRubCBOb3RlOiBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorKyAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorKyAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKysgICAgZWxzZQorKyAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisrICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorKyAgICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKysgICAgICBkb25lCisrICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisrICAgIGRubCBXaGVuIHVzaW5nIGxpYnRvb2wsIHRoZSBvcHRpb24gdGhhdCB3b3JrcyBmb3IgYm90aCBsaWJyYXJpZXMgYW5kCisrICAgIGRubCBleGVjdXRhYmxlcyBpcyAtUi4gVGhlIC1SIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisrICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgorKyAgICBkb25lCisrICBmaQorK10pCisrCisrZG5sIEFDX0xJQl9BUFBFTkRUT1ZBUihWQVIsIENPTlRFTlRTKSBhcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBDT05URU5UUyB0byBWQVIsCisrZG5sIHVubGVzcyBhbHJlYWR5IHByZXNlbnQgaW4gVkFSLgorK2RubCBXb3JrcyBvbmx5IGZvciBDUFBGTEFHUywgbm90IGZvciBMSUIqIHZhcmlhYmxlcyBiZWNhdXNlIHRoYXQgc29tZXRpbWVzCisrZG5sIGNvbnRhaW5zIHR3byBvciB0aHJlZSBjb25zZWN1dGl2ZSBlbGVtZW50cyB0aGF0IGJlbG9uZyB0b2dldGhlci4KKytBQ19ERUZVTihbQUNfTElCX0FQUEVORFRPVkFSXSwKKytbCisrICBmb3IgZWxlbWVudCBpbiBbJDJdOyBkbworKyAgICBoYXZlaXQ9CisrICAgIGZvciB4IGluICRbJDFdOyBkbworKyAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisrICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICBicmVhaworKyAgICAgIGZpCisrICAgIGRvbmUKKysgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICBbJDFdPSIke1skMV19JHtbJDFdOisgfSRlbGVtZW50IgorKyAgICBmaQorKyAgZG9uZQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xpYi1wcmVmaXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xpYi1wcmVmaXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45MjE2NjIwNTYgLTA0MDAKK0BAIC0wLDAgKzEsMTU1IEBACisrIyBsaWItcHJlZml4Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK2RubCBBQ19MSUJfQVJHX1dJVEggaXMgc3lub255bW91cyB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZi0yLjEzLCBhbmQKKytkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CisrZG5sIHJlcXVpcmUgZXhjZXNzaXZlIGJyYWNrZXRpbmcuCisraWZkZWYoW0FDX0hFTFBfU1RSSU5HXSwKKytbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorK1tBQ19ERUZVTihbQUNfXVtMSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbJDJdLFskM10sWyQ0XSldKV0pCisrCisrZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorK2RubCB0byBhY2Nlc3MgcHJldmlvdXNseSBpbnN0YWxsZWQgbGlicmFyaWVzLiBUaGUgYmFzaWMgYXNzdW1wdGlvbiBpcyB0aGF0CisrZG5sIGEgdXNlciB3aWxsIHdhbnQgcGFja2FnZXMgdG8gdXNlIG90aGVyIHBhY2thZ2VzIGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkCisrZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorK2RubCBUaGlzIG1hY3JvIGlzIG5vdCBuZWVkZWQgaWYgb25seSBBQ19MSUJfTElOS0ZMQUdTIGlzIHVzZWQgdG8gbG9jYXRlCisrZG5sIGxpYnJhcmllcywgYnV0IGlzIG90aGVyd2lzZSB2ZXJ5IGNvbnZlbmllbnQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorK1sKKysgIEFDX0JFRk9SRShbJDBdLCBbQUNfTElCX0xJTktGTEFHU10pCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKysgIHVzZV9hZGRpdGlvbmFsPXllcworKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgIF0pCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYi1wcmVmaXhdLAorK1sgIC0td2l0aC1saWItcHJlZml4Wz1ESVJdIHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorK1sKKysgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisrICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKysgICAgZWxzZQorKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICAgICAgICBdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKysgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisrICAgICAgZmkKKysgICAgZmkKKytdKQorKyAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1MsCisrICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisrICAgICAgaGF2ZWl0PQorKyAgICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorKyAgICAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisrICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorKyAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICBmaQorK10pCisrCisrZG5sIEFDX0xJQl9QUkVQQVJFX1BSRUZJWCBjcmVhdGVzIHZhcmlhYmxlcyBhY2xfZmluYWxfcHJlZml4LAorK2RubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAorK2RubCAkZXhlY19wcmVmaXggd2lsbCBleHBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKytBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfUFJFRklYXSwKKytbCisrICBkbmwgVW5mb3J0dW5hdGVseSwgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBnZXQgb25seSBmaW5hbGx5IGRldGVybWluZWQKKysgIGRubCBhdCB0aGUgZW5kIG9mIGNvbmZpZ3VyZS4KKysgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorKyAgZWxzZQorKyAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgorKyAgZmkKKysgIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgorKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisrICBmaQorKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKysgIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCisrICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisrXSkKKysKKytkbmwgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtzdGF0ZW1lbnRdKSBldmFsdWF0ZXMgc3RhdGVtZW50LCB3aXRoIHRoZQorK2RubCB2YXJpYWJsZXMgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBib3VuZCB0byB0aGUgdmFsdWVzIHRoZXkgd2lsbCBoYXZlCisrZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWF0sCisrWworKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKysgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisrICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKysgICQxCisrICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xvbmdkb3VibGUubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xvbmdkb3VibGUubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NDI2NTg4NjQgLTA0MDAKK0BAIC0wLDAgKzEsMzAgQEAKKysjIGxvbmdkb3VibGUubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlICdsb25nIGRvdWJsZScgdHlwZS4KKytkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisrCisrQUNfREVGVU4oW2d0X1RZUEVfTE9OR0RPVUJMRV0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb25nIGRvdWJsZV0sIGd0X2N2X2NfbG9uZ19kb3VibGUsCisrICAgIFtpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgICBndF9jdl9jX2xvbmdfZG91YmxlPXllcworKyAgICAgZWxzZQorKyAgICAgICBBQ19UUllfQ09NUElMRShbCisrICAgICAgICAgLyogVGhlIFN0YXJkZW50IFZpc3RyYSBrbm93cyBzaXplb2YobG9uZyBkb3VibGUpLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBpdC4gICovCisrICAgICAgICAgbG9uZyBkb3VibGUgZm9vID0gMC4wOworKyAgICAgICAgIC8qIE9uIFVsdHJpeCA0LjMgY2MsIGxvbmcgZG91YmxlIGlzIDQgYW5kIGRvdWJsZSBpcyA4LiAgKi8KKysgICAgICAgICBpbnQgYXJyYXkgWzIqKHNpemVvZihsb25nIGRvdWJsZSkgPj0gc2l6ZW9mKGRvdWJsZSkpIC0gMV07CisrICAgICAgICAgXSwgLAorKyAgICAgICAgIGd0X2N2X2NfbG9uZ19kb3VibGU9eWVzLCBndF9jdl9jX2xvbmdfZG91YmxlPW5vKQorKyAgICAgZmldKQorKyAgaWYgdGVzdCAkZ3RfY3ZfY19sb25nX2RvdWJsZSA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MT05HX0RPVUJMRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2xvbmcgZG91YmxlJyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xvbmdsb25nLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sb25nbG9uZy5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk0OTY1NzgwMCAtMDQwMAorQEAgLTAsMCArMSwyNSBAQAorKyMgbG9uZ2xvbmcubTQgc2VyaWFsIDQKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0xPTkdfTE9ORyBpZiAnbG9uZyBsb25nJyB3b3Jrcy4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9MT05HX0xPTkddLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbG9uZyBsb25nXSwgYWNfY3ZfdHlwZV9sb25nX2xvbmcsCisrICBbQUNfVFJZX0xJTksoW2xvbmcgbG9uZyBsbCA9IDFMTDsgaW50IGkgPSA2MztdLAorKyAgICBbbG9uZyBsb25nIGxsbWF4ID0gKGxvbmcgbG9uZykgLTE7CisrICAgICByZXR1cm4gbGwgPDwgaSB8IGxsID4+IGkgfCBsbG1heCAvIGxsIHwgbGxtYXggJSBsbDtdLAorKyAgICBhY19jdl90eXBlX2xvbmdfbG9uZz15ZXMsCisrICAgIGFjX2N2X3R5cGVfbG9uZ19sb25nPW5vKV0pCisrICBpZiB0ZXN0ICRhY19jdl90eXBlX2xvbmdfbG9uZyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MT05HX0xPTkcsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2xvbmcgbG9uZycgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9NYWtlZmlsZS5hbQkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvTWFrZWZpbGUuYW0JMjAwNC0wOS0xMiAxNDo0MDozNS4wNDg2NDI3NTIgLTA0MDAKK0BAIC0wLDAgKzEgQEAKKytFWFRSQV9ESVNUID0gY29kZXNldC5tNCBnZXR0ZXh0Lm00IGdsaWJjMjEubTQgaWNvbnYubTQgaW50ZGl2MC5tNCBpbnRtYXgubTQgaW50dHlwZXMubTQgaW50dHlwZXNfaC5tNCBpbnR0eXBlcy1wcmkubTQgaXNjLXBvc2l4Lm00IGxjbWVzc2FnZS5tNCBsaWItbGQubTQgbGliLWxpbmsubTQgbGliLXByZWZpeC5tNCBsb25nZG91YmxlLm00IGxvbmdsb25nLm00IG5scy5tNCBwby5tNCBwcmludGYtcG9zaXgubTQgcHJvZ3Rlc3QubTQgc2lnbmVkLm00IHNpemVfbWF4Lm00IHN0ZGludF9oLm00IHVpbnRtYXhfdC5tNCB1bG9uZ2xvbmcubTQgd2NoYXJfdC5tNCB3aW50X3QubTQgeHNpemUubTQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbmxzLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9ubHMubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NTU2NTY4ODggLTA0MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIG5scy5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KKytkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKysKKytBQ19ERUZVTihbQU1fTkxTXSwKKytbCisrICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgTkxTIGlzIHJlcXVlc3RlZF0pCisrICBkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworKyAgQUNfQVJHX0VOQUJMRShubHMsCisrICAgIFsgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorKyAgICBVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQorKyAgQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKysgIEFDX1NVQlNUKFVTRV9OTFMpCisrXSkKKysKKytBQ19ERUZVTihbQU1fTUtJTlNUQUxMRElSU10sCisrWworKyAgZG5sIElmIHRoZSBBQ19DT05GSUdfQVVYX0RJUiBtYWNybyBmb3IgYXV0b2NvbmYgaXMgdXNlZCB3ZSBwb3NzaWJseQorKyAgZG5sIGZpbmQgdGhlIG1raW5zdGFsbGRpcnMgc2NyaXB0IGluIGFub3RoZXIgc3ViZGlyIGJ1dCAkKHRvcF9zcmNkaXIpLgorKyAgZG5sIFRyeSB0byBsb2NhdGUgaXQuCisrICBNS0lOU1RBTExESVJTPQorKyAgaWYgdGVzdCAtbiAiJGFjX2F1eF9kaXIiOyB0aGVuCisrICAgIGNhc2UgIiRhY19hdXhfZGlyIiBpbgorKyAgICAgIC8qKSBNS0lOU1RBTExESVJTPSIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIiA7OworKyAgICAgICopIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9idWlsZGRpcikvJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKysgICAgZXNhYworKyAgZmkKKysgIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgorKyAgICBNS0lOU1RBTExESVJTPSJcJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzIgorKyAgZmkKKysgIEFDX1NVQlNUKE1LSU5TVEFMTERJUlMpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvcG8ubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3BvLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTYxNjU1OTc2IC0wNDAwCitAQCAtMCwwICsxLDQyNiBAQAorKyMgcG8ubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCisrZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisrCisrZG5sIENoZWNrcyBmb3IgYWxsIHByZXJlcXVpc2l0ZXMgb2YgdGhlIHBvIHN1YmRpcmVjdG9yeS4KKytBQ19ERUZVTihbQU1fUE9fU1VCRElSU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTUtJTlNUQUxMRElSU10pZG5sCisrICBBQ19SRVFVSVJFKFtBTV9OTFNdKWRubAorKworKyAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisrICBkbmwgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgZm9yICJtYWtlIGRpc3QiIHRvIHdvcmsuCisrCisrICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnZm10IGluIHRoZSBQQVRILgorKyAgZG5sIFRoZSBmaXJzdCB0ZXN0IGV4Y2x1ZGVzIFNvbGFyaXMgbXNnZm10IGFuZCBlYXJseSBHTlUgbXNnZm10IHZlcnNpb25zLgorKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIG1zZ2ZtdC4KKysgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHRk1ULCBtc2dmbXQsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorKyAgICA6KQorKyAgQUNfUEFUSF9QUk9HKEdNU0dGTVQsIGdtc2dmbXQsICRNU0dGTVQpCisrCisrICBkbmwgU2VhcmNoIGZvciBHTlUgeGdldHRleHQgMC4xMiBvciBuZXdlciBpbiB0aGUgUEFUSC4KKysgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIHhnZXR0ZXh0IGFuZCBlYXJseSBHTlUgeGdldHRleHQgdmVyc2lvbnMuCisrICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgeGdldHRleHQuCisrICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFhHRVRURVhULCB4Z2V0dGV4dCwKKysgICAgWyRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKysgICAgOikKKysgIGRubCBSZW1vdmUgbGVmdG92ZXIgZnJvbSBGcmVlQlNEIHhnZXR0ZXh0IGNhbGwuCisrICBybSAtZiBtZXNzYWdlcy5wbworKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ21lcmdlIDAuMTEgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisrICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR01FUkdFLCBtc2dtZXJnZSwKKysgICAgWyRhY19kaXIvJGFjX3dvcmQgLS11cGRhdGUgLXEgL2Rldi9udWxsIC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjFdLCA6KQorKworKyAgZG5sIFRoaXMgY291bGQgZ28gYXdheSBzb21lIGRheTsgdGhlIFBBVEhfUFJPR19XSVRIX1RFU1QgYWxyZWFkeSBkb2VzIGl0LgorKyAgZG5sIFRlc3Qgd2hldGhlciB3ZSByZWFsbHkgZm91bmQgR05VIG1zZ2ZtdC4KKysgIGlmIHRlc3QgIiRHTVNHRk1UIiAhPSAiOiI7IHRoZW4KKysgICAgZG5sIElmIGl0IGlzIG5vIEdOVSBtc2dmbXQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKKysgICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KKysgICAgaWYgJEdNU0dGTVQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgKGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgorKyAgICAgIDogOworKyAgICBlbHNlCisrICAgICAgR01TR0ZNVD1gZWNobyAiJEdNU0dGTVQiIHwgc2VkIC1lICdzLF4uKi8sLCdgCisrICAgICAgQUNfTVNHX1JFU1VMVCgKKysgICAgICAgIFtmb3VuZCAkR01TR0ZNVCBwcm9ncmFtIGlzIG5vdCBHTlUgbXNnZm10OyBpZ25vcmUgaXRdKQorKyAgICAgIEdNU0dGTVQ9IjoiCisrICAgIGZpCisrICBmaQorKworKyAgZG5sIFRoaXMgY291bGQgZ28gYXdheSBzb21lIGRheTsgdGhlIFBBVEhfUFJPR19XSVRIX1RFU1QgYWxyZWFkeSBkb2VzIGl0LgorKyAgZG5sIFRlc3Qgd2hldGhlciB3ZSByZWFsbHkgZm91bmQgR05VIHhnZXR0ZXh0LgorKyAgaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KKysgICAgZG5sIElmIGl0IGlzIG5vIEdOVSB4Z2V0dGV4dCB3ZSBkZWZpbmUgaXQgYXMgOiBzbyB0aGF0IHRoZQorKyAgICBkbmwgTWFrZWZpbGVzIHN0aWxsIGNhbiB3b3JrLgorKyAgICBpZiAkWEdFVFRFWFQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAgIChpZiAkWEdFVFRFWFQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgorKyAgICAgIDogOworKyAgICBlbHNlCisrICAgICAgQUNfTVNHX1JFU1VMVCgKKysgICAgICAgIFtmb3VuZCB4Z2V0dGV4dCBwcm9ncmFtIGlzIG5vdCBHTlUgeGdldHRleHQ7IGlnbm9yZSBpdF0pCisrICAgICAgWEdFVFRFWFQ9IjoiCisrICAgIGZpCisrICAgIGRubCBSZW1vdmUgbGVmdG92ZXIgZnJvbSBGcmVlQlNEIHhnZXR0ZXh0IGNhbGwuCisrICAgIHJtIC1mIG1lc3NhZ2VzLnBvCisrICBmaQorKworKyAgQUNfT1VUUFVUX0NPTU1BTkRTKFsKKysgICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KKysgICAgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCisrICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluCisrICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworKyAgICAgIGVzYWMKKysgICAgICAjIFBPIGRpcmVjdG9yaWVzIGhhdmUgYSBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbi5pbi4KKysgICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKKysgICAgICAgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorKyAgICAgICAgYWNfZGlyPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJS9bXi9dW14vXSokJSUnYAorKyAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisrICAgICAgICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisrICAgICAgICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCisrICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisrICAgICAgICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisrICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorKyAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisrICAgICAgICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworKyAgICAgICAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgorKyAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKKysgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKysgICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgorKyAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorKyAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uCisrICAgICAgICAgICMgcGFyYW1ldGVycy4KKysgICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgQUxMX0xJTkdVQVNfPWBzZWQgLWUgIi9eIy9kIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAorKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UuCisrICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJworKyAgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCisrICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCisrICAgICAgICAgIGZpCisrICAgICAgICAgICMgQ29tcHV0ZSBQT0ZJTEVTCisrICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorKyAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKysgICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKysgICAgICAgICAgIyBDb21wdXRlIEdNT0ZJTEVTCisrICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKysgICAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKysgICAgICAgICAgICAuKSBzcmNkaXJwcmU9IDs7CisrICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICAgIFBPRklMRVM9CisrICAgICAgICAgIFVQREFURVBPRklMRVM9CisrICAgICAgICAgIERVTU1ZUE9GSUxFUz0KKysgICAgICAgICAgR01PRklMRVM9CisrICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisrICAgICAgICAgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorKyAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisrICAgICAgICAgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorKyAgICAgICAgICBkb25lCisrICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworKyAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorKyAgICAgICAgICBJTlNUX0xJTkdVQVM9CisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKysgICAgICAgICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgICAgICAgICAgdXNlaXQ9bm8KKysgICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKysgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisrICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisrICAgICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKysgICAgICAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisrICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworKyAgICAgICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKysgICAgICAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorKyAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBDQVRBTE9HUz0KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKysgICAgICAgICAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbworKyAgICAgICAgICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIKKysgICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCisrICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1bGVzLSo7IGRvCisrICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisrICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KKysgICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsKKysgICAgICAgICAgICAgICAgKikgY2F0ICIkZiIgPj4gIiRhY19kaXIvTWFrZWZpbGUiIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZmkKKysgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBkb25lXSwKKysgICBbIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQorKyAgICAjIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMsIENBVEFMT0dTLiBCdXQgaGlkZSBpdAorKyAgICAjIGZyb20gYXV0b21ha2UuCisrICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCisrICAgICMgQ2FwdHVyZSB0aGUgdmFsdWUgb2YgTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZSBDQVRBTE9HUy4KKysgICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgorKyAgIF0pCisrXSkKKysKKytkbmwgUG9zdHByb2Nlc3NlcyBhIE1ha2VmaWxlIGluIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgUE8gZmlsZXMuCisrQUNfREVGVU4oW0FNX1BPU1RQUk9DRVNTX1BPX01BS0VGSUxFXSwKKytbCisrICAjIFdoZW4gdGhpcyBjb2RlIGlzIHJ1biwgaW4gY29uZmlnLnN0YXR1cywgdHdvIHZhcmlhYmxlcyBoYXZlIGFscmVhZHkgYmVlbgorKyAgIyBzZXQ6CisrICAjIC0gT0JTT0xFVEVfQUxMX0xJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIExJTkdVQVMgc2V0IGluIGNvbmZpZ3VyZS5pbiwKKysgICMgLSBMSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTElOR1VBUyBhdCBjb25maWd1cmUKKysgICMgICB0aW1lLgorKworK2NoYW5nZXF1b3RlKCwpZG5sCisrICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKysgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKysgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorKyAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorKyAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorKyAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorKyAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKysgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworKyAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgIGVzYWMKKysKKysgICMgRmluZCBhIHdheSB0byBlY2hvIHN0cmluZ3Mgd2l0aG91dCBpbnRlcnByZXRpbmcgYmFja3NsYXNoLgorKyAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKysgICAgZ3RfZWNobz0nZWNobycKKysgIGVsc2UKKysgICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKysgICAgICBndF9lY2hvPSdwcmludGYgJXNcbicKKysgICAgZWxzZQorKyAgICAgIGVjaG9fZnVuYyAoKSB7CisrICAgICAgICBjYXQgPDxFT1QKKyskKgorK0VPVAorKyAgICAgIH0KKysgICAgICBndF9lY2hvPSdlY2hvX2Z1bmMnCisrICAgIGZpCisrICBmaQorKworKyAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorKyAgc2VkX3hfdmFyaWFibGU9JworKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKyt4Cisrcy9QL1AvCisreAorK3RhCisrIyBZZXMgaXQgd2FzIGVtcHR5LiBMb29rIGlmIHdlIGhhdmUgdGhlIGV4cGVjdGVkIHZhcmlhYmxlIGRlZmluaXRpb24uCisrL15bCSBdKlZBUklBQkxFWwkgXSo9L3sKKysgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKysgIHMvXlsJIF0qVkFSSUFCTEVbCSBdKj0vLworKyAgYmEKKyt9CisrYmQKKys6YQorKyMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKysjIFJlbW92ZSBjb21tZW50LCBtb3JlIHByZWNpc2VseSByZXBsYWNlIGl0IHdpdGggYSBzcGFjZS4KKytzLyMuKiQvIC8KKysjIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgorK3RiCisrOmIKKytzL1xcJC8vCisrIyBQcmludCB0aGUgbGluZSwgd2l0aG91dCB0aGUgdHJhaWxpbmcgYmFja3NsYXNoLgorK3AKKyt0YworKyMgVGhlcmUgd2FzIG5vIHRyYWlsaW5nIGJhY2tzbGFzaC4gVGhlIGVuZCBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbiBpcworKyMgcmVhY2hlZC4gQ2xlYXIgdGhlIGhvbGQgc3BhY2UuCisrcy9eLiokLy8KKyt4CisrYmQKKys6YworKyMgQSB0cmFpbGluZyBiYWNrc2xhc2ggbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbiBjb250aW51ZXMgaW4gdGhlCisrIyBuZXh0IGxpbmUuIFB1dCBhIG5vbmVtcHR5IHN0cmluZyBpbnRvIHRoZSBob2xkIHNwYWNlIHRvIGluZGljYXRlIHRoaXMuCisrcy9eLiokL1AvCisreAorKzpkCisrJworK2NoYW5nZXF1b3RlKFssXSlkbmwKKysKKysgICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCisrICBzZWRfeF9QT1RGSUxFUz0iYCRndF9lY2hvIFwiJHNlZF94X3ZhcmlhYmxlXCIgfCBzZWQgLWUgJy9eICojL2QnIC1lICdzL1ZBUklBQkxFL1BPVEZJTEVTL2cnYCIKKysgIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAorKyAgIyBDb21wdXRlIFBPVEZJTEVTX0RFUFMgYXMKKysgICMgICAkKGZvcmVhY2ggZmlsZSwgJChQT1RGSUxFUyksICQodG9wX3NyY2RpcikvJChmaWxlKSkKKysgIFBPVEZJTEVTX0RFUFM9CisrICBmb3IgZmlsZSBpbiAkUE9URklMRVM7IGRvCisrICAgIFBPVEZJTEVTX0RFUFM9IiRQT1RGSUxFU19ERVBTICInJCh0b3Bfc3JjZGlyKS8nIiRmaWxlIgorKyAgZG9uZQorKyAgUE9NQUtFRklMRURFUFM9IiIKKysKKysgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKysgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKKysgIGZpCisrICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKysgICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KKysgICAgQUxMX0xJTkdVQVNfPWBzZWQgLWUgIi9eIy9kIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAorKyAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisrICBlbHNlCisrICAgICMgU2V0IEFMTF9MSU5HVUFTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgTElOR1VBUy4KKysgICAgc2VkX3hfTElOR1VBUz0iYCRndF9lY2hvIFwiJHNlZF94X3ZhcmlhYmxlXCIgfCBzZWQgLWUgJy9eICojL2QnIC1lICdzL1ZBUklBQkxFL0xJTkdVQVMvZydgIgorKyAgICBBTExfTElOR1VBU189YHNlZCAtbiAtZSAiJHNlZF94X0xJTkdVQVMiIDwgIiRhY19maWxlImAKKysgIGZpCisrICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgorKyAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJworKyAgIyBDb21wdXRlIFBPRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorKyAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQorKyAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisrICAjIENvbXB1dGUgR01PRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKysgICMgQ29tcHV0ZSBQUk9QRVJUSUVTRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykucHJvcGVydGllcykKKysgICMgQ29tcHV0ZSBDTEFTU0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLmNsYXNzKQorKyAgIyBDb21wdXRlIFFNRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnFtKQorKyAgIyBDb21wdXRlIE1TR0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLm1zZykKKysgICMgQ29tcHV0ZSBSRVNPVVJDRVNETExGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS8kKERPTUFJTikucmVzb3VyY2VzLmRsbCkKKysgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgIC4pIHNyY2RpcnByZT0gOzsKKysgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworKyAgZXNhYworKyAgUE9GSUxFUz0KKysgIFVQREFURVBPRklMRVM9CisrICBEVU1NWVBPRklMRVM9CisrICBHTU9GSUxFUz0KKysgIFBST1BFUlRJRVNGSUxFUz0KKysgIENMQVNTRklMRVM9CisrICBRTUZJTEVTPQorKyAgTVNHRklMRVM9CisrICBSRVNPVVJDRVNETExGSUxFUz0KKysgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorKyAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCisrICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisrICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKysgICAgUFJPUEVSVElFU0ZJTEVTPSIkUFJPUEVSVElFU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKysgICAgQ0xBU1NGSUxFUz0iJENMQVNTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5jbGFzcyIKKysgICAgUU1GSUxFUz0iJFFNRklMRVMgJHNyY2RpcnByZSRsYW5nLnFtIgorKyAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorKyAgICBNU0dGSUxFUz0iJE1TR0ZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcubXNnIgorKyAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgIFJFU09VUkNFU0RMTEZJTEVTPSIkUkVTT1VSQ0VTRExMRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisrICBkb25lCisrICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKysgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisrICBJTlNUX0xJTkdVQVM9CisrICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgdXNlaXQ9bm8KKysgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisrICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKysgICAgICBlbHNlCisrICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisrICAgICAgZmkKKysgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisrICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworKyAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorKyAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisrICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKysgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorKyAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorKyAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisrICAgICAgICBlc2FjCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisrICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorKyAgICAgIGZpCisrICAgIGRvbmUKKysgIGZpCisrICBDQVRBTE9HUz0KKysgIEpBVkFDQVRBTE9HUz0KKysgIFFUQ0FUQUxPR1M9CisrICBUQ0xDQVRBTE9HUz0KKysgIENTSEFSUENBVEFMT0dTPQorKyAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKysgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKysgICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKKysgICAgICBKQVZBQ0FUQUxPR1M9IiRKQVZBQ0FUQUxPR1MgXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgorKyAgICAgIFFUQ0FUQUxPR1M9IiRRVENBVEFMT0dTICRsYW5nLnFtIgorKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisrICAgICAgVENMQ0FUQUxPR1M9IiRUQ0xDQVRBTE9HUyAkZnJvYmJlZGxhbmcubXNnIgorKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJ2AKKysgICAgICBDU0hBUlBDQVRBTE9HUz0iJENTSEFSUENBVEFMT0dTICRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisrICAgIGRvbmUKKysgIGZpCisrCisrICBzZWQgLWUgInN8QFBPVEZJTEVTX0RFUFNAfCRQT1RGSUxFU19ERVBTfGciIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAUFJPUEVSVElFU0ZJTEVTQHwkUFJPUEVSVElFU0ZJTEVTfGciIC1lICJzfEBDTEFTU0ZJTEVTQHwkQ0xBU1NGSUxFU3xnIiAtZSAic3xAUU1GSUxFU0B8JFFNRklMRVN8ZyIgLWUgInN8QE1TR0ZJTEVTQHwkTVNHRklMRVN8ZyIgLWUgInN8QFJFU09VUkNFU0RMTEZJTEVTQHwkUkVTT1VSQ0VTRExMRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QEpBVkFDQVRBTE9HU0B8JEpBVkFDQVRBTE9HU3xnIiAtZSAic3xAUVRDQVRBTE9HU0B8JFFUQ0FUQUxPR1N8ZyIgLWUgInN8QFRDTENBVEFMT0dTQHwkVENMQ0FUQUxPR1N8ZyIgLWUgInN8QENTSEFSUENBVEFMT0dTQHwkQ1NIQVJQQ0FUQUxPR1N8ZyIgLWUgJ3MsXiNkaXN0ZGlyOixkaXN0ZGlyOiwnIDwgIiRhY19maWxlIiA+ICIkYWNfZmlsZS50bXAiCisrICBpZiBncmVwIC1sICdAVENMQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisrICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKysgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyskZnJvYmJlZGxhbmcubXNnOiAkbGFuZy5wbworKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorK0VPRgorKyAgICBkb25lCisrICBmaQorKyAgaWYgZ3JlcCAtbCAnQENTSEFSUENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKysgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJ2AKKysgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyskZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsOiAkbGFuZy5wbworKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAorKwlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorK0VPRgorKyAgICBkb25lCisrICBmaQorKyAgaWYgdGVzdCAtbiAiJFBPTUFLRUZJTEVERVBTIjsgdGhlbgorKyAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKytNYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCisrRU9GCisrICBmaQorKyAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3ByaW50Zi1wb3NpeC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvcHJpbnRmLXBvc2l4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTc0NjU0MDAwIC0wNDAwCitAQCAtMCwwICsxLDQ2IEBACisrIyBwcmludGYtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMy4xKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciB0aGUgcHJpbnRmKCkgZnVuY3Rpb24gc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzIHdpdGgKKytkbmwgcG9zaXRpb25zLgorKworK0FDX0RFRlVOKFtndF9QUklOVEZfUE9TSVhdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmKCkgc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzXSwKKysgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXgsCisrICAgIFsKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrLyogVGhlIHN0cmluZyAiJTIkZCAlMSRkIiwgd2l0aCBkb2xsYXIgY2hhcmFjdGVycyBwcm90ZWN0ZWQgZnJvbSB0aGUgc2hlbGwncworKyAgIGRvbGxhciBleHBhbnNpb24gKHBvc3NpYmx5IGFuIGF1dG9jb25mIGJ1ZykuICAqLworK3N0YXRpYyBjaGFyIGZvcm1hdFtdID0geyAnJScsICcyJywgJyQnLCAnZCcsICcgJywgJyUnLCAnMScsICckJywgJ2QnLCAnXDAnIH07Cisrc3RhdGljIGNoYXIgYnVmWzEwMF07CisraW50IG1haW4gKCkKKyt7CisrICBzcHJpbnRmIChidWYsIGZvcm1hdCwgMzMsIDU1KTsKKysgIHJldHVybiAoc3RyY21wIChidWYsICI1NSAzMyIpICE9IDApOworK31dLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD15ZXMsIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PW5vLAorKyAgICAgIFsKKysgICAgICAgIEFDX0VHUkVQX0NQUChub3Rwb3NpeCwgWworKyNpZiBkZWZpbmVkIF9fTmV0QlNEX18gfHwgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXworKyAgbm90cG9zaXgKKysjZW5kaWYKKysgICAgICAgIF0sIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PSJndWVzc2luZyBubyIsCisrICAgICAgICAgICBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3NpbmcgeWVzIikKKysgICAgICBdKQorKyAgICBdKQorKyAgY2FzZSAkZ3RfY3ZfZnVuY19wcmludGZfcG9zaXggaW4KKysgICAgKnllcykKKysgICAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9QUklOVEYsIDEsCisrICAgICAgICBbRGVmaW5lIGlmIHlvdXIgcHJpbnRmKCkgZnVuY3Rpb24gc3VwcG9ydHMgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuXSkKKysgICAgICA7OworKyAgZXNhYworK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3Byb2d0ZXN0Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9wcm9ndGVzdC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk5MDY1MTU2OCAtMDQwMAorQEAgLTAsMCArMSw5MSBAQAorKyMgcHJvZ3Rlc3QubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk2LgorKworKyMgU2VhcmNoIHBhdGggZm9yIGEgcHJvZ3JhbSB3aGljaCBwYXNzZXMgdGhlIGdpdmVuIHRlc3QuCisrCisrZG5sIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoVkFSSUFCTEUsIFBST0ctVE8tQ0hFQ0stRk9SLAorK2RubCAgIFRFU1QtUEVSRk9STUVELU9OLUZPVU5EX1BST0dSQU0gWywgVkFMVUUtSUYtTk9ULUZPVU5EIFssIFBBVEhdXSkKKytBQ19ERUZVTihbQU1fUEFUSF9QUk9HX1dJVEhfVEVTVF0sCisrWworKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorK2ZpCisrCisrIyBGaW5kIG91dCBob3cgdG8gdGVzdCBmb3IgZXhlY3V0YWJsZSBmaWxlcy4gRG9uJ3QgdXNlIGEgemVyby1ieXRlIGZpbGUsCisrIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KKytjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCisrIyEgL2Jpbi9zaAorK2V4aXQgMAorK19BU0VPRgorK2NobW9kICt4IGNvbmYkJC5maWxlCisraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKKytlbHNlCisrICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisrZmkKKytybSAtZiBjb25mJCQuZmlsZQorKworKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJDIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkMjsgYWNfd29yZD1bJF0yCisrQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGFjX3dvcmRdKQorK0FDX0NBQ0hFX1ZBTChhY19jdl9wYXRoXyQxLAorK1tjYXNlICJbJF0kMSIgaW4KKysgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKysgICAgYWNfY3ZfcGF0aF8kMT0iWyRdJDEiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorKyAgICA7OworKyAgKikKKysgICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICAgIGZvciBhY19kaXIgaW4gaWZlbHNlKFskNV0sICwgJFBBVEgsIFskNV0pOyBkbworKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisrICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorKyAgICAgICAgICBpZiBbJDNdOyB0aGVuCisrICAgICAgICAgICAgYWNfY3ZfcGF0aF8kMT0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKysgICAgICAgICAgICBicmVhayAyCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgZG9uZQorKyAgICBJRlM9IiRhY19zYXZlX0lGUyIKKytkbmwgSWYgbm8gNHRoIGFyZyBpcyBnaXZlbiwgbGVhdmUgdGhlIGNhY2hlIHZhcmlhYmxlIHVuc2V0LAorK2RubCBzbyBBQ19QQVRIX1BST0dTIHdpbGwga2VlcCBsb29raW5nLgorK2lmZWxzZShbJDRdLCAsICwgWyAgdGVzdCAteiAiWyRdYWNfY3ZfcGF0aF8kMSIgJiYgYWNfY3ZfcGF0aF8kMT0iJDQiCisrXSlkbmwKKysgICAgOzsKKytlc2FjXSlkbmwKKyskMT0iJGFjX2N2X3BhdGhfJDEiCisraWYgdGVzdCBpZmVsc2UoWyQ0XSwgLCBbLW4gIlskXSQxIl0sIFsiWyRdJDEiICE9ICIkNCJdKTsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVChbJF0kMSkKKytlbHNlCisrICBBQ19NU0dfUkVTVUxUKG5vKQorK2ZpCisrQUNfU1VCU1QoJDEpZG5sCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvc2lnbmVkLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zaWduZWQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45OTY2NTA2NTYgLTA0MDAKK0BAIC0wLDAgKzEsMTkgQEAKKysjIHNpZ25lZC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbYmhfQ19TSUdORURdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc2lnbmVkXSwgYmhfY3ZfY19zaWduZWQsCisrICAgW0FDX1RSWV9DT01QSUxFKCwgW3NpZ25lZCBjaGFyIHg7XSwgYmhfY3ZfY19zaWduZWQ9eWVzLCBiaF9jdl9jX3NpZ25lZD1ubyldKQorKyAgaWYgdGVzdCAkYmhfY3ZfY19zaWduZWQgPSBubzsgdGhlbgorKyAgICBBQ19ERUZJTkUoc2lnbmVkLCAsCisrICAgICAgICAgICAgICBbRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBDIGNvbXBpbGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGtleXdvcmQuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvc2l6ZV9tYXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3NpemVfbWF4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDAzNjQ5NTkyIC0wNDAwCitAQCAtMCwwICsxLDYxIEBACisrIyBzaXplX21heC5tNCBzZXJpYWwgMgorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2dsX1NJWkVfTUFYXSwKKytbCisrICBBQ19DSEVDS19IRUFERVJTKHN0ZGludC5oKQorKyAgZG5sIEZpcnN0IHRlc3Qgd2hldGhlciB0aGUgc3lzdGVtIGFscmVhZHkgaGFzIFNJWkVfTUFYLgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgU0laRV9NQVhdKQorKyAgcmVzdWx0PQorKyAgQUNfRUdSRVBfQ1BQKFtGb3VuZCBpdF0sIFsKKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2lmIEhBVkVfU1RESU5UX0gKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmZGVmIFNJWkVfTUFYCisrRm91bmQgaXQKKysjZW5kaWYKKytdLCByZXN1bHQ9eWVzKQorKyAgaWYgdGVzdCAteiAiJHJlc3VsdCI7IHRoZW4KKysgICAgZG5sIERlZmluZSBpdCBvdXJzZWx2ZXMuIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIHR5cGUgJ3NpemVfdCcgaXMgbm90IHdpZGVyCisrICAgIGRubCB0aGFuIHRoZSB0eXBlICd1bnNpZ25lZCBsb25nJy4KKysgICAgZG5sIFRoZSBfQUNfQ09NUFVURV9JTlQgbWFjcm8gd29ya3MgdXAgdG8gTE9OR19NQVgsIHNpbmNlIGl0IHVzZXMgJ2V4cHInLAorKyAgICBkbmwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byB3b3JrIGZyb20gTE9OR19NSU4gdG8gTE9OR19NQVguCisrICAgIF9BQ19DT01QVVRFX0lOVChbfihzaXplX3QpMCAvIDEwXSwgcmVzX2hpLAorKyAgICAgIFsjaW5jbHVkZSA8c3RkZGVmLmg+XSwgcmVzdWx0PT8pCisrICAgIF9BQ19DT01QVVRFX0lOVChbfihzaXplX3QpMCAlIDEwXSwgcmVzX2xvLAorKyAgICAgIFsjaW5jbHVkZSA8c3RkZGVmLmg+XSwgcmVzdWx0PT8pCisrICAgIF9BQ19DT01QVVRFX0lOVChbc2l6ZW9mIChzaXplX3QpIDw9IHNpemVvZiAodW5zaWduZWQgaW50KV0sIGZpdHNfaW5fdWludCwKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBpZiB0ZXN0ICIkZml0c19pbl91aW50IiA9IDE7IHRoZW4KKysgICAgICBkbmwgRXZlbiB0aG91Z2ggU0laRV9NQVggZml0cyBpbiBhbiB1bnNpZ25lZCBpbnQsIGl0IG11c3QgYmUgb2YgdHlwZQorKyAgICAgIGRubCAndW5zaWduZWQgbG9uZycgaWYgdGhlIHR5cGUgJ3NpemVfdCcgaXMgdGhlIHNhbWUgYXMgJ3Vuc2lnbmVkIGxvbmcnLgorKyAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkZGVmLmg+CisrICAgICAgICBleHRlcm4gc2l6ZV90IGZvbzsKKysgICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIGZvbzsKKysgICAgICAgIF0sIFtdLCBmaXRzX2luX3VpbnQ9MCkKKysgICAgZmkKKysgICAgaWYgdGVzdCAteiAiJHJlc3VsdCI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZml0c19pbl91aW50IiA9IDE7IHRoZW4KKysgICAgICAgIHJlc3VsdD0iJHJlc19oaSRyZXNfbG8iVQorKyAgICAgIGVsc2UKKysgICAgICAgIHJlc3VsdD0iJHJlc19oaSRyZXNfbG8iVUwKKysgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgZG5sIFNob3VsZG4ndCBoYXBwZW4sIGJ1dCB3aG8ga25vd3MuLi4KKysgICAgICByZXN1bHQ9J34oc2l6ZV90KTAnCisrICAgIGZpCisrICBmaQorKyAgQUNfTVNHX1JFU1VMVChbJHJlc3VsdF0pCisrICBpZiB0ZXN0ICIkcmVzdWx0IiAhPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtTSVpFX01BWF0sIFskcmVzdWx0XSwKKysgICAgICBbRGVmaW5lIGFzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHR5cGUgJ3NpemVfdCcsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvc3RkaW50X2gubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3N0ZGludF9oLm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDA5NjQ4NjgwIC0wNDAwCitAQCAtMCwwICsxLDI4IEBACisrIyBzdGRpbnRfaC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIGlmIDxzdGRpbnQuaD4gZXhpc3RzLAorKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisrCisrQUNfREVGVU4oW2ptX0FDX0hFQURFUl9TVERJTlRfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQuaF0sIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCwKKysgIFtBQ19UUllfQ09NUElMRSgKKysgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+XSwKKysgICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7XSwKKysgICAgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oPXllcywKKysgICAgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorKyAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC91aW50bWF4X3QubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3VpbnRtYXhfdC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAyMTY0Njg1NiAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgdWludG1heF90Lm00IHNlcmlhbCA3IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfUFJFUkVRKDIuMTMpCisrCisrIyBEZWZpbmUgdWludG1heF90IHRvICd1bnNpZ25lZCBsb25nJyBvciAndW5zaWduZWQgbG9uZyBsb25nJworKyMgaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZCBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VSU5UTUFYX1RdLAorK1sKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSkKKysgICAgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXMgXAorKyAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAorKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisrICAgIEFDX0RFRklORV9VTlFVT1RFRCh1aW50bWF4X3QsICRhY190eXBlLAorKyAgICAgIFtEZWZpbmUgdG8gdW5zaWduZWQgbG9uZyBvciB1bnNpZ25lZCBsb25nIGxvbmcKKysgICAgICAgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS5dKQorKyAgZWxzZQorKyAgICBBQ19ERUZJTkUoSEFWRV9VSU5UTUFYX1QsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3VpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC91bG9uZ2xvbmcubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3Vsb25nbG9uZy5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAyODY0NTc5MiAtMDQwMAorQEAgLTAsMCArMSwyNSBAQAorKyMgdWxvbmdsb25nLm00IHNlcmlhbCAzCisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkcgaWYgJ3Vuc2lnbmVkIGxvbmcgbG9uZycgd29ya3MuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMVVMTDsgaW50IGkgPSA2MztdLAorKyAgICBbdW5zaWduZWQgbG9uZyBsb25nIHVsbG1heCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1bnNpZ25lZCBsb25nIGxvbmcnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvd2NoYXJfdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvd2NoYXJfdC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAzNDY0NDg4MCAtMDQwMAorQEAgLTAsMCArMSwyMiBAQAorKyMgd2NoYXJfdC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKytkbmwgVGVzdCB3aGV0aGVyIDxzdGRkZWYuaD4gaGFzIHRoZSAnd2NoYXJfdCcgdHlwZS4KKytkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisrCisrQUNfREVGVU4oW2d0X1RZUEVfV0NIQVJfVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3Y2hhcl90XSwgZ3RfY3ZfY193Y2hhcl90LAorKyAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRkZWYuaD4KKysgICAgICAgd2NoYXJfdCBmb28gPSAod2NoYXJfdCknXDAnO10sICwKKysgICAgICAgZ3RfY3ZfY193Y2hhcl90PXllcywgZ3RfY3ZfY193Y2hhcl90PW5vKV0pCisrICBpZiB0ZXN0ICRndF9jdl9jX3djaGFyX3QgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfV0NIQVJfVCwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3djaGFyX3QnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvd2ludF90Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC93aW50X3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wNDA2NDM5NjggLTA0MDAKK0BAIC0wLDAgKzEsMjIgQEAKKysjIHdpbnRfdC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciA8d2NoYXIuaD4gaGFzIHRoZSAnd2ludF90JyB0eXBlLgorK2RubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKKysKKytBQ19ERUZVTihbZ3RfVFlQRV9XSU5UX1RdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2ludF90XSwgZ3RfY3ZfY193aW50X3QsCisrICAgIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHdjaGFyLmg+CisrICAgICAgIHdpbnRfdCBmb28gPSAod2NoYXJfdCknXDAnO10sICwKKysgICAgICAgZ3RfY3ZfY193aW50X3Q9eWVzLCBndF9jdl9jX3dpbnRfdD1ubyldKQorKyAgaWYgdGVzdCAkZ3RfY3ZfY193aW50X3QgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfV0lOVF9ULCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2ludF90JyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3hzaXplLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC94c2l6ZS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjA0NzY0MjkwNCAtMDQwMAorQEAgLTAsMCArMSwxNCBAQAorKyMgeHNpemUubTQgc2VyaWFsIDIKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX1hTSVpFXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHNpemUuaC4KKysgIEFDX1JFUVVJUkUoW2dsX1NJWkVfTUFYXSkKKysgIEFDX0NIRUNLX0hFQURFUlMoc3RkaW50LmgpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvTWFrZWZpbGUuYW0JMTk5OC0xMi0zMCAwNjoxOTo0MC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6MzUuMTIxNjMxNjU2IC0wNDAwCitAQCAtMSw1ICsxLDUgQEAKKyBTVUJESVJTID0gbGliIGludGwgc3JjIHBvIG1hbiB0ZXN0c3VpdGUKKy1FWFRSQV9ESVNUID0gY2hlY2subHJ6c3ogQ09NUEFUQUJJTElUWSBSRUFETUUuY3ZzIFJFQURNRS5pc2RuNGxpbnV4IFwKKytFWFRSQV9ESVNUID0gY29uZmlnLnJwYXRoICBjaGVjay5scnpzeiBDT01QQVRBQklMSVRZIFJFQURNRS5jdnMgUkVBRE1FLmlzZG40bGludXggXAorIAlSRUFETUUuZ2V0dGV4dCBycG1yYyBidWlsZHJwbSBzeXN0eXBlLmluIGZhc3RjaGVjay5zaCBSRUFETUUudGVzdHMgXAorIAliZW9zLXJ1bnBpcGVkLmMgZmFzdGNoZWNrLmJlb3MKKyBub2luc3RfU0NSSVBUUz1zeXN0eXBlCitAQCAtODMsMyArODMsNSBAQAorIHJwbTogJChQUikudGFyLmd6IFNwZWNmaWxlCisgCSQoc3JjZGlyKS9idWlsZHJwbSAkKHNyY2RpcikKKyAKKysKKytBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9NYWtlZmlsZS5pbgkxOTk4LTEyLTMwIDExOjMxOjQwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvTWFrZWZpbGUuaW4JMjAwNC0wOS0xMiAxNDo0MDozNS4xMDk2MzM0ODAgLTA0MDAKK0BAIC0xMjUsNyArMTI1LDcgQEAKKyAJICAmJiBDT05GSUdfRklMRVM9JEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworIAorICQoQUNMT0NBTF9NNCk6ICBjb25maWd1cmUuaW4gIGFjaW5jbHVkZS5tNAorLQljZCAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKQorKwljZCAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAtSSBtNAorIAorIGNvbmZpZy5zdGF0dXM6ICQoc3JjZGlyKS9jb25maWd1cmUKKyAJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjaworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9ta2luc3RhbGxkaXJzCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9ta2luc3RhbGxkaXJzCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzM3NzUwODI0IC0wNDAwCitAQCAtMSwzNCArMSwxNTAgQEAKKyAjISAvYmluL3NoCisgIyBta2luc3RhbGxkaXJzIC0tLSBtYWtlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKy0jIEF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorKworK3NjcmlwdHZlcnNpb249MjAwNC0wMi0xNS4yMAorKworKyMgT3JpZ2luYWwgYXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisgIyBDcmVhdGVkOiAxOTkzLTA1LTE2CistIyBMYXN0IG1vZGlmaWVkOiAxOTk1LTAzLTA1CistIyBQdWJsaWMgZG9tYWluCisrIyBQdWJsaWMgZG9tYWluLgorKyMKKysjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisrIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisrIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKyAKKyBlcnJzdGF0dXM9MAorK2Rpcm1vZGU9IiIKKyAKKy1mb3IgZmlsZSBpbiAkezErIiRAIn0gOyBkbworLSAgIHNldCBmbm9yZCBgZWNobyAiOiRmaWxlIiB8IHNlZCAtbmUgJ3MvXjpcLy8jLztzL146Ly87cy9cLy8gL2c7cy9eIy9cLy87cCdgCistICAgc2hpZnQKKyt1c2FnZT0iXAorK1VzYWdlOiBta2luc3RhbGxkaXJzIFstaF0gWy0taGVscF0gWy0tdmVyc2lvbl0gWy1tIE1PREVdIERJUiAuLi4KKyAKKy0gICBwYXRoY29tcD0KKy0gICBmb3IgZCBpbiAkezErIiRAIn0gOyBkbworLSAgICAgcGF0aGNvbXA9IiRwYXRoY29tcCRkIgorLSAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorLSAgICAgICAtKiApIHBhdGhjb21wPS4vJHBhdGhjb21wIDs7CistICAgICBlc2FjCisrQ3JlYXRlIGVhY2ggZGlyZWN0b3J5IERJUiAod2l0aCBtb2RlIE1PREUsIGlmIHNwZWNpZmllZCksIGluY2x1ZGluZyBhbGwKKytsZWFkaW5nIGZpbGUgbmFtZSBjb21wb25lbnRzLgorIAorLSAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCistICAgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiIDE+JjIKKy0gICAgICAgIG1rZGlyICIkcGF0aGNvbXAiID4gL2Rldi9udWxsIDI+JjEgfHwgbGFzdGVycj0kPworLSAgICAgZmkKKytSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAKKy0gICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisrd2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisrICBjYXNlICQxIGluCisrICAgIC1oIHwgLS1oZWxwIHwgLS1oKikgICAgICAgICAjIC1oIGZvciBoZWxwCisrICAgICAgZWNobyAiJHVzYWdlIgorKyAgICAgIGV4aXQgMAorKyAgICAgIDs7CisrICAgIC1tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIC1tIFBFUk0gYXJnCisrICAgICAgc2hpZnQKKysgICAgICB0ZXN0ICQjIC1lcSAwICYmIHsgZWNobyAiJHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KKysgICAgICBkaXJtb2RlPSQxCisrICAgICAgc2hpZnQKKysgICAgICA7OworKyAgICAtLXZlcnNpb24pCisrICAgICAgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iCisrICAgICAgZXhpdCAwCisrICAgICAgOzsKKysgICAgLS0pICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcCBvcHRpb24gcHJvY2Vzc2luZworKyAgICAgIHNoaWZ0CisrICAgICAgYnJlYWsKKysgICAgICA7OworKyAgICAtKikgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmtub3duIG9wdGlvbgorKyAgICAgIGVjaG8gIiR1c2FnZSIgMT4mMgorKyAgICAgIGV4aXQgMQorKyAgICAgIDs7CisrICAgICopICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IG5vbi1vcHQgYXJnCisrICAgICAgYnJlYWsKKysgICAgICA7OworKyAgZXNhYworK2RvbmUKKysKKytmb3IgZmlsZQorK2RvCisrICBpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKysgICAgc2hpZnQKKysgIGVsc2UKKysgICAgYnJlYWsKKysgIGZpCisrZG9uZQorKworK2Nhc2UgJCMgaW4KKysgIDApIGV4aXQgMCA7OworK2VzYWMKKysKKysjIFNvbGFyaXMgOCdzIG1rZGlyIC1wIGlzbid0IHRocmVhZC1zYWZlLiAgSWYgeW91IG1rZGlyIC1wIGEvYiBhbmQKKysjIG1rZGlyIC1wIGEvYyBhdCB0aGUgc2FtZSB0aW1lLCBib3RoIHdpbGwgZGV0ZWN0IHRoYXQgYSBpcyBtaXNzaW5nLAorKyMgb25lIHdpbGwgY3JlYXRlIGEsIHRoZW4gdGhlIG90aGVyIHdpbGwgdHJ5IHRvIGNyZWF0ZSBhIGFuZCBkaWUgd2l0aAorKyMgYSAiRmlsZSBleGlzdHMiIGVycm9yLiAgVGhpcyBpcyBhIHByb2JsZW0gd2hlbiBjYWxsaW5nIG1raW5zdGFsbGRpcnMKKysjIGZyb20gYSBwYXJhbGxlbCBtYWtlLiAgV2UgdXNlIC0tdmVyc2lvbiBpbiB0aGUgcHJvYmUgdG8gcmVzdHJpY3QKKysjIG91cnNlbHZlcyB0byBHTlUgbWtkaXIsIHdoaWNoIGlzIHRocmVhZC1zYWZlLgorK2Nhc2UgJGRpcm1vZGUgaW4KKysgICcnKQorKyAgICBpZiBta2RpciAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisrICAgICAgZWNobyAibWtkaXIgLXAgLS0gJCoiCisrICAgICAgZXhlYyBta2RpciAtcCAtLSAiJEAiCisrICAgIGVsc2UKKysgICAgICAjIE9uIE5leHRTdGVwIGFuZCBPcGVuU3RlcCwgdGhlIGBta2RpcicgY29tbWFuZCBkb2VzIG5vdAorKyAgICAgICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcworKyAgICAgICMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLCBhbmQgdGhlbiBhYm9ydCBiZWNhdXNlIGAuJyBhbHJlYWR5CisrICAgICAgIyBleGlzdHMuCisrICAgICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKysgICAgICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisrICAgIGZpCisrICAgIDs7CisrICAqKQorKyAgICBpZiBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgICB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKysgICAgICBlY2hvICJta2RpciAtbSAkZGlybW9kZSAtcCAtLSAkKiIKKysgICAgICBleGVjIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS0gIiRAIgorKyAgICBlbHNlCisrICAgICAgIyBDbGVhbiB1cCBhZnRlciBOZXh0U3RlcCBhbmQgT3BlblN0ZXAgbWtkaXIuCisrICAgICAgZm9yIGQgaW4gLi8tbSAuLy1wIC4vLS12ZXJzaW9uICIuLyRkaXJtb2RlIjsKKysgICAgICBkbworKyAgICAgICAgdGVzdCAtZCAkZCAmJiBybWRpciAkZAorKyAgICAgIGRvbmUKKysgICAgZmkKKysgICAgOzsKKytlc2FjCisrCisrZm9yIGZpbGUKKytkbworKyAgc2V0IGZub3JkIGBlY2hvICI6JGZpbGUiIHwgc2VkIC1uZSAncy9eOlwvLyMvO3MvXjovLztzL1wvLyAvZztzL14jL1wvLztwJ2AKKysgIHNoaWZ0CisrCisrICBwYXRoY29tcD0KKysgIGZvciBkCisrICBkbworKyAgICBwYXRoY29tcD0iJHBhdGhjb21wJGQiCisrICAgIGNhc2UgJHBhdGhjb21wIGluCisrICAgICAgLSopIHBhdGhjb21wPS4vJHBhdGhjb21wIDs7CisrICAgIGVzYWMKKysKKysgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisrICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIgorKworKyAgICAgIG1rZGlyICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKysKKysgICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAJZXJyc3RhdHVzPSRsYXN0ZXJyCistICAgICBmaQorKyAgICAgIGVsc2UKKysJaWYgdGVzdCAhIC16ICIkZGlybW9kZSI7IHRoZW4KKysJICBlY2hvICJjaG1vZCAkZGlybW9kZSAkcGF0aGNvbXAiCisrCSAgbGFzdGVycj0iIgorKwkgIGNobW9kICIkZGlybW9kZSIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworIAorLSAgICAgcGF0aGNvbXA9IiRwYXRoY29tcC8iCistICAgZG9uZQorKwkgIGlmIHRlc3QgISAteiAiJGxhc3RlcnIiOyB0aGVuCisrCSAgICBlcnJzdGF0dXM9JGxhc3RlcnIKKysJICBmaQorKwlmaQorKyAgICAgIGZpCisrICAgIGZpCisrCisrICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorKyAgZG9uZQorIGRvbmUKKyAKKyBleGl0ICRlcnJzdGF0dXMKKysKKysjIExvY2FsIFZhcmlhYmxlczoKKysjIG1vZGU6IHNoZWxsLXNjcmlwdAorKyMgc2gtaW5kZW50YXRpb246IDIKKysjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKysjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKysjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorKyMgRW5kOgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9ib2xkcXVvdC5zZWQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2JvbGRxdW90LnNlZAkyMDA0LTA5LTEyIDE0OjQwOjM0LjcyMzY5MjE1MiAtMDQwMAorQEAgLTAsMCArMSwxMCBAQAorK3MvIlwoW14iXSpcKSIv4oCcXDHigJ0vZworK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKKytzLyAnXChbXmAnXSpcKScgLyDigJhcMeKAmSAvZworK3MvICdcKFteYCddKlwpJyQvIOKAmFwx4oCZL2cKKytzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCisrcy/igJzigJ0vIiIvZworK3Mv4oCcL+KAnBtbMW0vZworK3Mv4oCdLxtbMG3igJ0vZworK3Mv4oCYL+KAmBtbMW0vZworK3Mv4oCZLxtbMG3igJkvZworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9jYXQtaWQtdGJsLmMJMTk5OC0xMi0yOSAwNDoyNDoyNC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2NhdC1pZC10YmwuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMjM0ICswLDAgQEAKKy0vKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwbzJ0Ymwuc2VkIGZyb20gbHJ6c3oucG90LiAgKi8KKy0KKy0jaWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKy0KKy1jb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXSA9IHsKKy0gIHsiIiwgMX0sCistICB7ImlvX21vZGUoLDIpIGluIHJic2IuYyBub3QgaW1wbGVtZW50ZWRcbiIsIDJ9LAorLSAgeyJjYXVnaHQgc2lnbmFsICVkOyBleGl0aW5nIiwgM30sCistICB7ImNvbW1hbmQgdHJpZXMiLCA0fSwKKy0gIHsicGFja2V0bGVuZ3RoIiwgNX0sCistICB7InBhY2tldGxlbmd0aCBvdXQgb2YgcmFuZ2UgMjQuLiVsZCIsIDZ9LAorLSAgeyJmcmFtZWxlbmd0aCIsIDd9LAorLSAgeyJmcmFtZWxlbmd0aCBvdXQgb2YgcmFuZ2UgMzIuLiVsZCIsIDh9LAorLSAgeyJtaW5fYnBzIiwgOX0sCistICB7Im1pbl9icHMgbXVzdCBiZSA+PSAwIiwgMTB9LAorLSAgeyJtaW5fYnBzX3RpbWUiLCAxMX0sCistICB7Im1pbl9icHNfdGltZSBtdXN0IGJlID4gMSIsIDEyfSwKKy0gIHsiaG91ciB0byBsYXJnZSAoMC4uMjMpIiwgMTN9LAorLSAgeyJ1bnBhcnNhYmxlIHN0b3AgdGltZVxuIiwgMTR9LAorLSAgeyJtaW51dGUgdG8gbGFyZ2UgKDAuLjU5KSIsIDE1fSwKKy0gIHsic3RvcCB0aW1lIHRvIHNtYWxsIiwgMTZ9LAorLSAgeyJzdG9wLWF0IiwgMTd9LAorLSAgeyJ0aW1lb3V0IiwgMTh9LAorLSAgeyJ0aW1lb3V0IG91dCBvZiByYW5nZSAxMC4uMTAwMCIsIDE5fSwKKy0gIHsic2VjdXJpdHkgdmlvbGF0aW9uOiBjYW4ndCBkbyB0aGF0IHVuZGVyIHJlc3RyaWN0ZWQgc2hlbGxcbiIsIDIwfSwKKy0gIHsid2luZG93IHNpemUiLCAyMX0sCistICB7ImNhbm5vdCB0dXJub2ZmIHN5c2xvZyIsIDIyfSwKKy0gIHsic3RhcnR1cCBkZWxheSIsIDIzfSwKKy0gIHsib3V0IG9mIG1lbW9yeSIsIDI0fSwKKy0gIHsidGhpcyBwcm9ncmFtIHdhcyBuZXZlciBpbnRlbmRlZCB0byBiZSB1c2VkIHNldHVpZFxuIiwgMjV9LAorLSAgeyJuZWVkIGF0IGxlYXN0IG9uZSBmaWxlIHRvIHNlbmQiLCAyNn0sCistICB7IkNhbid0IHNlbmQgY29tbWFuZCBpbiByZXN0cmljdGVkIG1vZGVcbiIsIDI3fSwKKy0gIHsiaG9zdG5hbWUgdG9vIGxvbmdcbiIsIDI4fSwKKy0gIHsiaWxsZWdhbCBzZXJ2ZXIgYWRkcmVzc1xuIiwgMjl9LAorLSAgeyJjYW4gcmVhZCBvbmx5IG9uZSBmaWxlIGZyb20gc3RkaW4iLCAzMH0sCistICB7IlRyYW5zZmVyIGluY29tcGxldGVcbiIsIDMxfSwKKy0gIHsiVHJhbnNmZXIgY29tcGxldGVcbiIsIDMyfSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCBvcGVuIHRtcGZpbGUgJXM6ICVzIiwgMzN9LAorLSAgeyJzZW5kX3BzZXVkbyAlczogY2Fubm90IGxzdGF0IHRtcGZpbGUgJXM6ICVzIiwgMzR9LAorLSAgeyJzZW5kX3BzZXVkbyAlczogYXZvaWRpbmcgc3ltbGluayB0cmFwIiwgMzV9LAorLSAgeyJzZW5kX3BzZXVkbyAlczogY2Fubm90IHdyaXRlIHRvIHRtcGZpbGUgJXM6ICVzIiwgMzZ9LAorLSAgeyJzZW5kX3BzZXVkbyAlczogZmFpbGVkIiwgMzd9LAorLSAgeyJzZW5kX3BzZXVkbyAlczogb2siLCAzOH0sCistICB7InRjcCBwcm90b2NvbCBpbml0IGZhaWxlZFxuIiwgMzl9LAorLSAgeyJBbnN3ZXJpbmcgVElNRVNZTkMgYXQgJXMiLCA0MH0sCistICB7InRpbWV6b25lIiwgNDF9LAorLSAgeyJ0aW1lem9uZSB1bmtub3duIiwgNDJ9LAorLSAgeyJDYW4ndCBvcGVuIGFueSByZXF1ZXN0ZWQgZmlsZXMuIiwgNDN9LAorLSAgeyJzZWN1cml0eSB2aW9sYXRpb246IG5vdCBhbGxvd2VkIHRvIHVwbG9hZCBmcm9tICVzIiwgNDR9LAorLSAgeyJjYW5ub3Qgb3BlbiAlcyIsIDQ1fSwKKy0gIHsiaXMgbm90IGEgZmlsZTogJXMiLCA0Nn0sCistICB7IiVzLyVzOiBlcnJvciBvY2N1cmVkIiwgNDd9LAorLSAgeyJza2lwcGVkOiAlcyIsIDQ4fSwKKy0gIHsiJXMvJXM6IHNraXBwZWQiLCA0OX0sCistICB7IkJ5dGVzIFNlbnQ6JTdsZCAgIEJQUzolLThsZCAgICAgICAgICAgICAgICAgICAgICAgIFxuIiwgNTB9LAorLSAgeyJTZW5kaW5nICVzLCAlbGQgYmxvY2tzOiAiLCA1MX0sCistICB7IkdpdmUgeW91ciBsb2NhbCBYTU9ERU0gcmVjZWl2ZSBjb21tYW5kIG5vdy4iLCA1Mn0sCistICB7IlNlbmRpbmc6ICVzXG4iLCA1M30sCistICB7IlRpbWVvdXQgb24gcGF0aG5hbWUiLCA1NH0sCistICB7IlJlY2VpdmVyIENhbmNlbGxlZCIsIDU1fSwKKy0gIHsiTm8gQUNLIG9uIEVPVCIsIDU2fSwKKy0gIHsiWG1vZGVtIHNlY3RvcnMva2J5dGVzIHNlbnQ6ICUzZC8lMmRrIiwgNTd9LAorLSAgeyJZbW9kZW0gc2VjdG9ycy9rYnl0ZXMgc2VudDogJTNkLyUyZGsiLCA1OH0sCistICB7IkNhbmNlbGxlZCIsIDU5fSwKKy0gIHsiVGltZW91dCBvbiBzZWN0b3IgQUNLIiwgNjB9LAorLSAgeyJOQUsgb24gc2VjdG9yIiwgNjF9LAorLSAgeyJHb3QgYnVyc3QgZm9yIHNlY3RvciBBQ0siLCA2Mn0sCistICB7IkdvdCAlMDJ4IGZvciBzZWN0b3IgQUNLIiwgNjN9LAorLSAgeyJSZXRyeSBDb3VudCBFeGNlZWRlZCIsIDY0fSwKKy0gIHsiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiwgNjV9LAorLSAgeyIlcyB2ZXJzaW9uICVzXG4iLCA2Nn0sCistICB7IlVzYWdlOiAlcyBbb3B0aW9uc10gZmlsZSAuLi5cbiIsIDY3fSwKKy0gIHsiICAgb3I6ICVzIFtvcHRpb25zXSAte2N8aX0gQ09NTUFORFxuIiwgNjh9LAorLSAgeyJTZW5kIGZpbGUocykgd2l0aCBaTU9ERU0vWU1PREVNL1hNT0RFTSBwcm90b2NvbFxuIiwgNjl9LAorLSAgeyJcCistICAgIChYKSA9IG9wdGlvbiBhcHBsaWVzIHRvIFhNT0RFTSBvbmx5XG5cCistICAgIChZKSA9IG9wdGlvbiBhcHBsaWVzIHRvIFlNT0RFTSBvbmx5XG5cCistICAgIChaKSA9IG9wdGlvbiBhcHBsaWVzIHRvIFpNT0RFTSBvbmx5XG4iLCA3MH0sCistICB7IlwKKy0gIC0rLCAtLWFwcGVuZCAgICAgICAgICAgICAgICBhcHBlbmQgdG8gZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSAoWilcblwKKy0gIC0yLCAtLXR3b3N0b3AgICAgICAgICAgICAgICB1c2UgMiBzdG9wIGJpdHNcblwKKy0gIC00LCAtLXRyeS00ayAgICAgICAgICAgICAgICBnbyB1cCB0byA0SyBibG9ja3NpemVcblwKKy0gICAgICAtLXN0YXJ0LTRrICAgICAgICAgICAgICBzdGFydCB3aXRoIDRLIGJsb2Nrc2l6ZSAoZG9lc24ndCB0cnkgOClcblwKKy0gIC04LCAtLXRyeS04ayAgICAgICAgICAgICAgICBnbyB1cCB0byA4SyBibG9ja3NpemVcblwKKy0gICAgICAtLXN0YXJ0LThrICAgICAgICAgICAgICBzdGFydCB3aXRoIDhLIGJsb2Nrc2l6ZVxuXAorLSAgLWEsIC0tYXNjaWkgICAgICAgICAgICAgICAgIEFTQ0lJIHRyYW5zZmVyIChjaGFuZ2UgQ1IvTEYgdG8gTEYpXG5cCistICAtYiwgLS1iaW5hcnkgICAgICAgICAgICAgICAgYmluYXJ5IHRyYW5zZmVyXG5cCistICAtQiwgLS1idWZzaXplIE4gICAgICAgICAgICAgYnVmZmVyIE4gYnl0ZXMgKE49PWF1dG86IGJ1ZmZlciB3aG9sZSBmaWxlKVxuXAorLSAgLWMsIC0tY29tbWFuZCBDT01NQU5EICAgICAgIGV4ZWN1dGUgcmVtb3RlIGNvbW1hbmQgQ09NTUFORCAoWilcblwKKy0gIC1DLCAtLWNvbW1hbmQtdHJpZXMgTiAgICAgICB0cnkgTiB0aW1lcyB0byBleGVjdXRlIGEgY29tbWFuZCAoWilcblwKKy0gIC1kLCAtLWRvdC10by1zbGFzaCAgICAgICAgICBjaGFuZ2UgJy4nIHRvICcvJyBpbiBwYXRobmFtZXMgKFkvWilcblwKKy0gICAgICAtLWRlbGF5LXN0YXJ0dXAgTiAgICAgICBzbGVlcCBOIHNlY29uZHMgYmVmb3JlIGRvaW5nIGFueXRoaW5nXG5cCistICAtZSwgLS1lc2NhcGUgICAgICAgICAgICAgICAgZXNjYXBlIGFsbCBjb250cm9sIGNoYXJhY3RlcnMgKFopXG5cCistICAtRSwgLS1yZW5hbWUgICAgICAgICAgICAgICAgZm9yY2UgcmVjZWl2ZXIgdG8gcmVuYW1lIGZpbGVzIGl0IGFscmVhZHkgaGFzXG5cCistICAtZiwgLS1mdWxsLXBhdGggICAgICAgICAgICAgc2VuZCBmdWxsIHBhdGhuYW1lIChZL1opXG5cCistICAtaSwgLS1pbW1lZGlhdGUtY29tbWFuZCBDTUQgc2VuZCByZW1vdGUgQ01ELCByZXR1cm4gaW1tZWRpYXRlbHkgKFopXG5cCistICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgcHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlXG5cCistICAtaywgLS0xayAgICAgICAgICAgICAgICAgICAgc2VuZCAxMDI0IGJ5dGUgcGFja2V0cyAoWClcblwKKy0gIC1MLCAtLXBhY2tldGxlbiBOICAgICAgICAgICBsaW1pdCBzdWJwYWNrZXQgbGVuZ3RoIHRvIE4gYnl0ZXMgKFopXG5cCistICAtbCwgLS1mcmFtZWxlbiBOICAgICAgICAgICAgbGltaXQgZnJhbWUgbGVuZ3RoIHRvIE4gYnl0ZXMgKGw+PUwpIChaKVxuXAorLSAgLW0sIC0tbWluLWJwcyBOICAgICAgICAgICAgIHN0b3AgdHJhbnNtaXNzaW9uIGlmIEJQUyBiZWxvdyBOXG5cCistICAtTSwgLS1taW4tYnBzLXRpbWUgTiAgICAgICAgICBmb3IgYXQgbGVhc3QgTiBzZWNvbmRzIChkZWZhdWx0OiAxMjApXG4iLCA3MX0sCistICB7IlwKKy0gIC1uLCAtLW5ld2VyICAgICAgICAgICAgICAgICBzZW5kIGZpbGUgaWYgc291cmNlIG5ld2VyIChaKVxuXAorLSAgLU4sIC0tbmV3ZXItb3ItbG9uZ2VyICAgICAgIHNlbmQgZmlsZSBpZiBzb3VyY2UgbmV3ZXIgb3IgbG9uZ2VyIChaKVxuXAorLSAgLW8sIC0tMTYtYml0LWNyYyAgICAgICAgICAgIHVzZSAxNiBiaXQgQ1JDIGluc3RlYWQgb2YgMzIgYml0IENSQyAoWilcblwKKy0gIC1PLCAtLWRpc2FibGUtdGltZW91dHMgICAgICBkaXNhYmxlIHRpbWVvdXQgY29kZSwgd2FpdCBmb3JldmVyXG5cCistICAtcCwgLS1wcm90ZWN0ICAgICAgICAgICAgICAgcHJvdGVjdCBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlIChaKVxuXAorLSAgLXIsIC0tcmVzdW1lICAgICAgICAgICAgICAgIHJlc3VtZSBpbnRlcnJ1cHRlZCBmaWxlIHRyYW5zZmVyIChaKVxuXAorLSAgLVIsIC0tcmVzdHJpY3RlZCAgICAgICAgICAgIHJlc3RyaWN0ZWQsIG1vcmUgc2VjdXJlIG1vZGVcblwKKy0gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgICBxdWlldCAobm8gcHJvZ3Jlc3MgcmVwb3J0cylcblwKKy0gIC1zLCAtLXN0b3AtYXQge0hIOk1NfCtOfSAgICBzdG9wIHRyYW5zbWlzc2lvbiBhdCBISDpNTSBvciBpbiBOIHNlY29uZHNcblwKKy0gICAgICAtLXRjcCAgICAgICAgICAgICAgICAgICBidWlsZCBhIFRDUCBjb25uZWN0aW9uIHRvIHRyYW5zbWl0IGZpbGVzXG5cCistICAgICAgLS10Y3Atc2VydmVyICAgICAgICAgICAgb3BlbiBzb2NrZXQsIHdhaXQgZm9yIGNvbm5lY3Rpb25cblwKKy0gIC11LCAtLXVubGluayAgICAgICAgICAgICAgICB1bmxpbmsgZmlsZSBhZnRlciB0cmFuc21pc3Npb25cblwKKy0gIC1VLCAtLXVucmVzdHJpY3QgICAgICAgICAgICB0dXJuIG9mZiByZXN0cmljdGVkIG1vZGUgKGlmIGFsbG93ZWQgdG8pXG5cCistICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgYmUgdmVyYm9zZSwgcHJvdmlkZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cblwKKy0gIC13LCAtLXdpbmRvd3NpemUgTiAgICAgICAgICBXaW5kb3cgaXMgTiBieXRlcyAoWilcblwKKy0gIC1YLCAtLXhtb2RlbSAgICAgICAgICAgICAgICB1c2UgWE1PREVNIHByb3RvY29sXG5cCistICAteSwgLS1vdmVyd3JpdGUgICAgICAgICAgICAgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzXG5cCistICAtWSwgLS1vdmVyd3JpdGUtb3Itc2tpcCAgICAgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzLCBlbHNlIHNraXBcblwKKy0gICAgICAtLXltb2RlbSAgICAgICAgICAgICAgICB1c2UgWU1PREVNIHByb3RvY29sXG5cCistICAtWiwgLS16bW9kZW0gICAgICAgICAgICAgICAgdXNlIFpNT0RFTSBwcm90b2NvbFxuXAorLVxuXAorLXNob3J0IG9wdGlvbnMgdXNlIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgbG9uZyBvbmVzXG4iLCA3Mn0sCistICB7ImdvdCBaUlFJTklUIiwgNzN9LAorLSAgeyJnb3QgWkNBTiIsIDc0fSwKKy0gIHsiYmxrbGVuIG5vdyAlZFxuIiwgNzV9LAorLSAgeyJ6c2VuZGZkYXRhOiBicHMgcmF0ZSAlbGQgYmVsb3cgbWluICVsZCIsIDc2fSwKKy0gIHsienNlbmRmZGF0YTogcmVhY2hlZCBzdG9wIHRpbWUiLCA3N30sCistICB7IkJ5dGVzIFNlbnQ6JTdsZC8lN2xkICAgQlBTOiUtOGxkIEVUQSAlMDJkOiUwMmQgICIsIDc4fSwKKy0gIHsiY2FsY19ibGtsZW46IHJlZHVjZWQgdG8gJWQgZHVlIHRvIGVycm9yXG4iLCA3OX0sCistICB7ImNhbGNfYmxrbGVuOiByZXR1cm5lZCBvbGQgdmFsdWUgJWQgZHVlIHRvIGxvdyBicGUgZGlmZlxuIiwgODB9LAorLSAgeyJjYWxjX2Jsa2xlbjogb2xkICVsZCwgbmV3ICVsZCwgZCAlbGRcbiIsIDgxfSwKKy0gIHsiY2FsY19ibGtsZW46IGNhbGMgdG90YWxfYnl0ZXM9JWxkLCBicGU9JWxkLCBlYz0lbGRcbiIsIDgyfSwKKy0gIHsiY2FsY19ibGtsZW46IGJsa2xlbiAlZCwgb2sgJWxkLCBmYWlsZWQgJWxkIC0+ICVsdVxuIiwgODN9LAorLSAgeyJjYWxjX2Jsa2xlbjogcmV0dXJuZWQgJWQgYXMgYmVzdFxuIiwgODR9LAorLSAgeyJcCistXG5cCistY291bnRlbTogVG90YWwgJWQgJWxkXG4iLCA4NX0sCistICB7IkJhZCBlc2NhcGUgc2VxdWVuY2UgJXgiLCA4Nn0sCistICB7IlNlbmRlciBDYW5jZWxlZCIsIDg3fSwKKy0gIHsiVElNRU9VVCIsIDg4fSwKKy0gIHsiQmFkIGRhdGEgc3VicGFja2V0IiwgODl9LAorLSAgeyJEYXRhIHN1YnBhY2tldCB0b28gbG9uZyIsIDkwfSwKKy0gIHsiR2FyYmFnZSBjb3VudCBleGNlZWRlZCIsIDkxfSwKKy0gIHsiR290ICVzIiwgOTJ9LAorLSAgeyJSZXRyeSAlZDogIiwgOTN9LAorLSAgeyJkb24ndCBoYXZlIHNldHRpbWVvZmRheSwgd2lsbCBub3Qgc2V0IHRpbWVcbiIsIDk0fSwKKy0gIHsibm90IHJ1bm5pbmcgYXMgcm9vdCAodGhpcyBpcyBnb29kISksIGNhbiBub3Qgc2V0IHRpbWVcbiIsIDk1fSwKKy0gIHsiYnl0ZXNfcGVyX2Vycm9yIiwgOTZ9LAorLSAgeyJieXRlcy1wZXItZXJyb3Igc2hvdWxkIGJlID4xMDAiLCA5N30sCistICB7Ik9fU1lOQyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwiLCA5OH0sCistICB7ImdhcmJhZ2Ugb24gY29tbWFuZGxpbmUiLCA5OX0sCistICB7IlVzYWdlOiAlcyBbb3B0aW9uc10gW2ZpbGVuYW1lLmlmLnhtb2RlbV1cbiIsIDEwMH0sCistICB7IlJlY2VpdmUgZmlsZXMgd2l0aCBaTU9ERU0vWU1PREVNL1hNT0RFTSBwcm90b2NvbFxuIiwgMTAxfSwKKy0gIHsiXAorLSAgLSssIC0tYXBwZW5kICAgICAgICAgICAgICAgIGFwcGVuZCB0byBleGlzdGluZyBmaWxlc1xuXAorLSAgLWEsIC0tYXNjaWkgICAgICAgICAgICAgICAgIEFTQ0lJIHRyYW5zZmVyIChjaGFuZ2UgQ1IvTEYgdG8gTEYpXG5cCistICAtYiwgLS1iaW5hcnkgICAgICAgICAgICAgICAgYmluYXJ5IHRyYW5zZmVyXG5cCistICAtQiwgLS1idWZzaXplIE4gICAgICAgICAgICAgYnVmZmVyIE4gYnl0ZXMgKE49PWF1dG86IGJ1ZmZlciB3aG9sZSBmaWxlKVxuXAorLSAgLWMsIC0td2l0aC1jcmMgICAgICAgICAgICAgIFVzZSAxNiBiaXQgQ1JDIChYKVxuXAorLSAgLUMsIC0tYWxsb3ctcmVtb3RlLWNvbW1hbmRzIGFsbG93IGV4ZWN1dGlvbiBvZiByZW1vdGUgY29tbWFuZHMgKFopXG5cCistICAtRCwgLS1udWxsICAgICAgICAgICAgICAgICAgd3JpdGUgYWxsIHJlY2VpdmVkIGRhdGEgdG8gL2Rldi9udWxsXG5cCistICAgICAgLS1kZWxheS1zdGFydHVwIE4gICAgICAgc2xlZXAgTiBzZWNvbmRzIGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuXAorLSAgLWUsIC0tZXNjYXBlICAgICAgICAgICAgICAgIEVzY2FwZSBjb250cm9sIGNoYXJhY3RlcnMgKFopXG5cCistICAtRSwgLS1yZW5hbWUgICAgICAgICAgICAgICAgcmVuYW1lIGFueSBmaWxlcyBhbHJlYWR5IGV4aXN0aW5nXG5cCistICAgICAgLS1lcnJvcnMgTiAgICAgICAgICAgICAgZ2VuZXJhdGUgQ1JDIGVycm9yIGV2ZXJ5IE4gYnl0ZXMgKGRlYnVnZ2luZylcblwKKy0gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICBIZWxwLCBwcmludCB0aGlzIHVzYWdlIG1lc3NhZ2VcblwKKy0gIC1tLCAtLW1pbi1icHMgTiAgICAgICAgICAgICBzdG9wIHRyYW5zbWlzc2lvbiBpZiBCUFMgYmVsb3cgTlxuXAorLSAgLU0sIC0tbWluLWJwcy10aW1lIE4gICAgICAgICAgZm9yIGF0IGxlYXN0IE4gc2Vjb25kcyAoZGVmYXVsdDogMTIwKVxuXAorLSAgLU8sIC0tZGlzYWJsZS10aW1lb3V0cyAgICAgIGRpc2FibGUgdGltZW91dCBjb2RlLCB3YWl0IGZvcmV2ZXIgZm9yIGRhdGFcblwKKy0gICAgICAtLW8tc3luYyAgICAgICAgICAgICAgICBvcGVuIG91dHB1dCBmaWxlKHMpIGluIHN5bmNocm9ub3VzIHdyaXRlIG1vZGVcblwKKy0gIC1wLCAtLXByb3RlY3QgICAgICAgICAgICAgICBwcm90ZWN0IGV4aXN0aW5nIGZpbGVzXG5cCistICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICAgcXVpZXQsIG5vIHByb2dyZXNzIHJlcG9ydHNcblwKKy0gIC1yLCAtLXJlc3VtZSAgICAgICAgICAgICAgICB0cnkgdG8gcmVzdW1lIGludGVycnVwdGVkIGZpbGUgdHJhbnNmZXIgKFopXG5cCistICAtUiwgLS1yZXN0cmljdGVkICAgICAgICAgICAgcmVzdHJpY3RlZCwgbW9yZSBzZWN1cmUgbW9kZVxuXAorLSAgLXMsIC0tc3RvcC1hdCB7SEg6TU18K059ICAgIHN0b3AgdHJhbnNtaXNzaW9uIGF0IEhIOk1NIG9yIGluIE4gc2Vjb25kc1xuXAorLSAgLVMsIC0tdGltZXN5bmMgICAgICAgICAgICAgIHJlcXVlc3QgcmVtb3RlIHRpbWUgKHR3aWNlOiBzZXQgbG9jYWwgdGltZSlcblwKKy0gICAgICAtLXN5c2xvZ1s9b2ZmXSAgICAgICAgICB0dXJuIHN5c2xvZyBvbiBvciBvZmYsIGlmIHBvc3NpYmxlXG5cCistICAtdCwgLS10aW1lb3V0IE4gICAgICAgICAgICAgc2V0IHRpbWVvdXQgdG8gTiB0ZW50aHMgb2YgYSBzZWNvbmRcblwKKy0gIC11LCAtLWtlZXAtdXBwZXJjYXNlICAgICAgICBrZWVwIHVwcGVyIGNhc2UgZmlsZW5hbWVzXG5cCistICAtVSwgLS11bnJlc3RyaWN0ICAgICAgICAgICAgZGlzYWJsZSByZXN0cmljdGVkIG1vZGUgKGlmIGFsbG93ZWQgdG8pXG5cCistICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgYmUgdmVyYm9zZSwgcHJvdmlkZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cblwKKy0gIC13LCAtLXdpbmRvd3NpemUgTiAgICAgICAgICBXaW5kb3cgaXMgTiBieXRlcyAoWilcblwKKy0gIC1YICAtLXhtb2RlbSAgICAgICAgICAgICAgICB1c2UgWE1PREVNIHByb3RvY29sXG5cCistICAteSwgLS1vdmVyd3JpdGUgICAgICAgICAgICAgWWVzLCBjbG9iYmVyIGV4aXN0aW5nIGZpbGUgaWYgYW55XG5cCistICAgICAgLS15bW9kZW0gICAgICAgICAgICAgICAgdXNlIFlNT0RFTSBwcm90b2NvbFxuXAorLSAgLVosIC0tem1vZGVtICAgICAgICAgICAgICAgIHVzZSBaTU9ERU0gcHJvdG9jb2xcblwKKy1cblwKKy1zaG9ydCBvcHRpb25zIHVzZSB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIGxvbmcgb25lc1xuIiwgMTAyfSwKKy0gIHsiJXMgd2FpdGluZyB0byByZWNlaXZlLiIsIDEwM30sCistICB7IlxyQnl0ZXMgcmVjZWl2ZWQ6ICU3bGQvJTdsZCAgIEJQUzolLTZsZCAgICAgICAgICAgICAgICBcclxuIiwgMTA0fSwKKy0gIHsiJXM6IHJlYWR5IHRvIHJlY2VpdmUgJXMiLCAxMDV9LAorLSAgeyJcckJ5dGVzIHJlY2VpdmVkOiAlN2xkICAgQlBTOiUtNmxkICAgICAgICAgICAgICAgIFxyXG4iLCAxMDZ9LAorLSAgeyJcCistXHJcblwKKy0lczogJXMgcmVtb3ZlZC5cclxuIiwgMTA3fSwKKy0gIHsiUGF0aG5hbWUgZmV0Y2ggcmV0dXJuZWQgRU9UIiwgMTA4fSwKKy0gIHsiUmVjZWl2ZWQgZHVwIFNlY3RvciIsIDEwOX0sCistICB7IlN5bmMgRXJyb3IiLCAxMTB9LAorLSAgeyJDUkMiLCAxMTF9LAorLSAgeyJDaGVja3N1bSIsIDExMn0sCistICB7IlNlY3RvciBudW1iZXIgZ2FyYmxlZCIsIDExM30sCistICB7IlNlbmRlciBDYW5jZWxsZWQiLCAxMTR9LAorLSAgeyJHb3QgMCVvIHNlY3RvciBoZWFkZXIiLCAxMTV9LAorLSAgeyJmaWxlIG5hbWUgZW5kcyB3aXRoIGEgLywgc2tpcHBlZDogJXNcbiIsIDExNn0sCistICB7InptYW5hZz0lZCwgTHptYW5hZz0lZFxuIiwgMTE3fSwKKy0gIHsiemNvbnY9JWRcbiIsIDExOH0sCistICB7ImZpbGUgZXhpc3RzLCBza2lwcGVkOiAlc1xuIiwgMTE5fSwKKy0gIHsiVElNRVNZTkM6IGhlcmUgJWxkLCByZW1vdGUgJWxkLCBkaWZmICVsZCBzZWNvbmRzXG4iLCAxMjB9LAorLSAgeyJUSU1FU1lOQzogY2Fubm90IHNldCB0aW1lOiAlc1xuIiwgMTIxfSwKKy0gIHsiY2Fubm90IHRtcGZpbGUoKSBmb3IgdGNwIHByb3RvY29sIHN5bmNocm9uaXphdGlvbiIsIDEyMn0sCistICB7IlRvcGlwZSIsIDEyM30sCistICB7IlJlY2VpdmluZzogJXNcbiIsIDEyNH0sCistICB7IkJsb2NrcyByZWNlaXZlZDogJWQiLCAxMjV9LAorLSAgeyIlczogJXMgZXhpc3RzXG4iLCAxMjZ9LAorLSAgeyIlczpcdFNlY3VyaXR5IFZpb2xhdGlvbiIsIDEyN30sCistICB7InJlbW90ZSBjb21tYW5kIGV4ZWN1dGlvbiByZXF1ZXN0ZWQiLCAxMjh9LAorLSAgeyJub3QgZXhlY3V0ZWQiLCAxMjl9LAorLSAgeyJnb3QgWlJJTklUIiwgMTMwfSwKKy0gIHsiU2tpcHBlZCIsIDEzMX0sCistICB7InJ6ZmlsZTogYnBzIHJhdGUgJWxkIGJlbG93IG1pbiAlbGQiLCAxMzJ9LAorLSAgeyJyemZpbGU6IHJlYWNoZWQgc3RvcCB0aW1lIiwgMTMzfSwKKy0gIHsiXHJCeXRlcyByZWNlaXZlZDogJTdsZC8lN2xkICAgQlBTOiUtNmxkIEVUQSAlMDJkOiUwMmQgICIsIDEzNH0sCistICB7ImZnZXRzIGZvciB0Y3AgcHJvdG9jb2wgc3luY2hyb25pemF0aW9uIGZhaWxlZDogIiwgMTM1fSwKKy0gIHsiZmlsZSBjbG9zZSBlcnJvciIsIDEzNn0sCistfTsKKy0KKy1pbnQgX21zZ190YmxfbGVuZ3RoID0gMTM2OworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9DaGFuZ2VMb2cJMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL0NoYW5nZUxvZwkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc5MzY4MTUxMiAtMDQwMAorQEAgLTEsMyArMSwxNSBAQAorKzIwMDQtMDktMTIgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKysKKysJKiBib2xkcXVvdC5zZWQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGVuQGJvbGRxdW90LmhlYWRlcjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogZW5AcXVvdC5oZWFkZXI6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGluc2VydC1oZWFkZXIuc2luOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBxdW90LnNlZDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcmVtb3ZlLXBvdGNkYXRlLnNpbjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogUnVsZXMtcXVvdDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogY2F0LWlkLXRibC5jOiBSZW1vdmUgZmlsZS4KKysJKiBzdGFtcC1jYXQtaWQ6IFJlbW92ZSBmaWxlLgorKworIC8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHBvMnRibC5zZWQgZnJvbSBscnpzei5wb3QuICAqLworIAorICNpZiBIQVZFX0NPTkZJR19ICistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL2VuQGJvbGRxdW90LmhlYWRlcgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzMxNjkwOTM2IC0wNDAwCitAQCAtMCwwICsxLDI1IEBACisrIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisrIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisrIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKysjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKysjCisrIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKysjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKysjCisrIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisrIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisrIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorKyMKKysjIFRoaXMgY2F0YWxvZyBmdXJ0aGVybW9yZSBkaXNwbGF5cyB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBxdW90YXRpb24gbWFya3MgaW4KKysjIGJvbGQgZmFjZSwgYXNzdW1pbmcgdGhlIFZUMTAwL1hUZXJtIGVzY2FwZSBzZXF1ZW5jZXMuCisrIworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9lbkBxdW90LmhlYWRlcgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vZW5AcXVvdC5oZWFkZXIJMjAwNC0wOS0xMiAxNDo0MDozNC43Mzc2OTAwMjQgLTA0MDAKK0BAIC0wLDAgKzEsMjIgQEAKKysjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKysjIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCisrIyBjaGFyYWN0ZXJzLCBvbmx5IHN1YnN0aXR1dGVzIGxpa2UgZ3JhdmUgYWNjZW50ICgweDYwKSwgYXBvc3Ryb3BoZSAoMHgyNykKKysjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorKyMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAorKyMKKysjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisrIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgorKyMgSXQgYWxzbyB0cmFuc2xhdGVzIHBhaXJzIG9mIGFwb3N0cm9waGUgKDB4MjcpIHRvCisrIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisrIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCisrIyBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFDKSBhbmQgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUQpLgorKyMKKysjIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KKysjIFdoZW4gb3V0cHV0IHRvIGFuIElTTy04ODU5LTEgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKysjIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisrIworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9pbnNlcnQtaGVhZGVyLnNpbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vaW5zZXJ0LWhlYWRlci5zaW4JMjAwNC0wOS0xMiAxNDo0MDozNC43NDM2ODkxMTIgLTA0MDAKK0BAIC0wLDAgKzEsMjMgQEAKKysjIFNlZCBzY3JpcHQgdGhhdCBpbnNlcnRzIHRoZSBmaWxlIGNhbGxlZCBIRUFERVIgYmVmb3JlIHRoZSBoZWFkZXIgZW50cnkuCisrIworKyMgQXQgZWFjaCBvY2N1cnJlbmNlIG9mIGEgbGluZSBzdGFydGluZyB3aXRoICJtc2dpZCAiLCB3ZSBleGVjdXRlIHRoZSBmb2xsb3dpbmcKKysjIGNvbW1hbmRzLiBBdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSwgaW5zZXJ0IHRoZSBmaWxlLiBBdCB0aGUgZm9sbG93aW5nCisrIyBvY2N1cnJlbmNlcywgZG8gbm90aGluZy4gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nCisrIyBvY2N1cnJlbmNlcyBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorKy9ebXNnaWQgL3sKKyt4CisrIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5LgorK3MvbS9tLworK3RhCisrIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZWFkIHRoZSBmaWxlLgorK3IgSEVBREVSCisrIyBPdXRwdXQgdGhlIGZpbGUncyBjb250ZW50cyBieSByZWFkaW5nIHRoZSBuZXh0IGxpbmUuIEJ1dCBkb24ndCBsb3NlIHRoZQorKyMgY3VycmVudCBsaW5lIHdoaWxlIGRvaW5nIHRoaXMuCisrZworK04KKytiYgorKzphCisrIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KKyt4CisrOmIKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL01ha2V2YXJzCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9NYWtldmFycwkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc0ODY4ODM1MiAtMDQwMAorQEAgLTAsMCArMSw0MSBAQAorKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisrCisrIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorK0RPTUFJTiA9ICQoUEFDS0FHRSkKKysKKysjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KKytzdWJkaXIgPSBwbworK3RvcF9idWlsZGRpciA9IC4uCisrCisrIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCisrWEdFVFRFWFRfT1BUSU9OUyA9IC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXworKworKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisrIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKKysjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKysjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorKyMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKKysjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorKyMgdGhlaXIgY29weXJpZ2h0LgorK0NPUFlSSUdIVF9IT0xERVIgPSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgaXMgdGhlIGVtYWlsIGFkZHJlc3Mgb3IgVVJMIHRvIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBzaGFsbCByZXBvcnQKKysjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorKyMgLSBTdHJpbmdzIHdoaWNoIGFyZSBub3QgZW50aXJlIHNlbnRlbmNlcywgc2VlIHRoZSBtYWludGFpbmVyIGd1aWRlbGluZXMKKysjICAgaW4gdGhlIEdOVSBnZXR0ZXh0IGRvY3VtZW50YXRpb24sIHNlY3Rpb24gJ1ByZXBhcmluZyBTdHJpbmdzJy4KKysjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorKyMgICB1bmRlcnN0b29kLgorKyMgLSBTdHJpbmdzIHdoaWNoIG1ha2UgaW52YWxpZCBhc3N1bXB0aW9ucyBhYm91dCBub3RhdGlvbiBvZiBkYXRlLCB0aW1lIG9yCisrIyAgIG1vbmV5LgorKyMgLSBQbHVyYWxpc2F0aW9uIHByb2JsZW1zLgorKyMgLSBJbmNvcnJlY3QgRW5nbGlzaCBzcGVsbGluZy4KKysjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisrIyBJdCBjYW4gYmUgeW91ciBlbWFpbCBhZGRyZXNzLCBvciBhIG1haWxpbmcgbGlzdCBhZGRyZXNzIHdoZXJlIHRyYW5zbGF0b3JzCisrIyBjYW4gd3JpdGUgdG8gd2l0aG91dCBiZWluZyBzdWJzY3JpYmVkLCBvciB0aGUgVVJMIG9mIGEgd2ViIHBhZ2UgdGhyb3VnaAorKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KKytNU0dJRF9CVUdTX0FERFJFU1MgPQorKworKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisrIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorK0VYVFJBX0xPQ0FMRV9DQVRFR09SSUVTID0KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vcXVvdC5zZWQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL3F1b3Quc2VkCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzU0Njg3NDQwIC0wNDAwCitAQCAtMCwwICsxLDYgQEAKKytzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKKytzL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCisrcy8gJ1woW15gJ10qXCknIC8g4oCYXDHigJkgL2cKKytzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCisrcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZworK3Mv4oCc4oCdLyIiL2cKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc2MjY4NjIyNCAtMDQwMAorQEAgLTAsMCArMSwxOSBAQAorKyMgU2VkIHNjcmlwdCB0aGF0IHJlbW92ZSB0aGUgUE9ULUNyZWF0aW9uLURhdGUgbGluZSBpbiB0aGUgaGVhZGVyIGVudHJ5CisrIyBmcm9tIGEgUE9UIGZpbGUuCisrIworKyMgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nIG9jY3VycmVuY2VzIG9mIHRoZQorKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorKy9eIlBPVC1DcmVhdGlvbi1EYXRlOiAuKiIkL3sKKyt4CisrIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5LgorK3MvUC9QLworK3RhCisrIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCisrZworK2QKKytiYgorKzphCisrIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KKyt4CisrOmIKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL1J1bGVzLXF1b3QJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL1J1bGVzLXF1b3QJMjAwNC0wOS0xMiAxNDo0MDozNC43Nzg2ODM3OTIgLTA0MDAKK0BAIC0wLDAgKzEsNDcgQEAKKysjIFNwZWNpYWwgTWFrZWZpbGUgcnVsZXMgZm9yIEVuZ2xpc2ggbWVzc2FnZSBjYXRhbG9ncyB3aXRoIHF1b3RhdGlvbiBtYXJrcy4KKysKKytESVNURklMRVMuY29tbW9uLmV4dHJhMSA9IHF1b3Quc2VkIGJvbGRxdW90LnNlZCBlbkBxdW90LmhlYWRlciBlbkBib2xkcXVvdC5oZWFkZXIgaW5zZXJ0LWhlYWRlci5zaW4gUnVsZXMtcXVvdAorKworKy5TVUZGSVhFUzogLmluc2VydC1oZWFkZXIgLnBvLXVwZGF0ZS1lbgorKworK2VuQHF1b3QucG8tY3JlYXRlOgorKwkkKE1BS0UpIGVuQHF1b3QucG8tdXBkYXRlCisrZW5AYm9sZHF1b3QucG8tY3JlYXRlOgorKwkkKE1BS0UpIGVuQGJvbGRxdW90LnBvLXVwZGF0ZQorKworK2VuQHF1b3QucG8tdXBkYXRlOiBlbkBxdW90LnBvLXVwZGF0ZS1lbgorK2VuQGJvbGRxdW90LnBvLXVwZGF0ZTogZW5AYm9sZHF1b3QucG8tdXBkYXRlLWVuCisrCisrLmluc2VydC1oZWFkZXIucG8tdXBkYXRlLWVuOgorKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZS1lbiQkLy8nYDsgXAorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0IjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IEdFVFRFWFRMSUJESVI9YGNkICQodG9wX3NyY2Rpcikvc3JjICYmIHB3ZGA7IGV4cG9ydCBHRVRURVhUTElCRElSOyBmaTsgXAorKwl0bXBkaXI9YHB3ZGA7IFwKKysJZWNobyAiJCRsYW5nOiI7IFwKKysJbGw9YGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzL0AuKi8vJ2A7IFwKKysJTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IFwKKysJY2QgJChzcmNkaXIpOyBcCisrCWlmICQoTVNHSU5JVCkgLWkgJChET01BSU4pLnBvdCAtLW5vLXRyYW5zbGF0b3IgLWwgJCRsbCAtbyAtIDI+L2Rldi9udWxsIHwgc2VkIC1mICQkdG1wZGlyLyQkbGFuZy5pbnNlcnQtaGVhZGVyIHwgJChNU0dDT05WKSAtdCBVVEYtOCB8ICQoTVNHRklMVEVSKSBzZWQgLWYgYGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzLy4qQC8vJ2Auc2VkIDI+L2Rldi9udWxsID4gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgdGhlbiBcCisrCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisrCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisrCSAgZWxzZSBcCisrCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisrCSAgICAgIDo7IFwKKysJICAgIGVsc2UgXAorKwkgICAgICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorKwkgICAgICBleGl0IDE7IFwKKysJICAgIGZpOyBcCisrCSAgZmk7IFwKKysJZWxzZSBcCisrCSAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKKysJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisrCWZpCisrCisrZW5AcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgorKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AcXVvdC5pbnNlcnQtaGVhZGVyCisrCisrZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKysJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQGJvbGRxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBib2xkcXVvdC5pbnNlcnQtaGVhZGVyCisrCisrbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXF1b3QKKyttb3N0bHljbGVhbi1xdW90OgorKwlybSAtZiAqLmluc2VydC1oZWFkZXIKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vc3RhbXAtY2F0LWlkCTE5OTgtMTItMzAgMDI6NTA6MDEuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9zdGFtcC1jYXQtaWQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xICswLDAgQEAKKy10aW1lc3RhbXAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvc3JjL01ha2VmaWxlLmFtCTE5OTgtMTItMjggMDM6Mzg6NDcuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0JMjAwNC0wOS0xMiAxNDo0MDo1My42NjU4MTI1MTIgLTA0MDAKK0BAIC0yLDEyICsyLDEyIEBACisgbHJ6X1NPVVJDRVM9bHJ6LmMgdGltaW5nLmMgenBlcnIuYyB6cmVhZGxpbmUuYyBjcmN0YWIuYyByYnNiLmMgem0uYyBwcm90bmFtZS5jIHRjcC5jIGxzeXNsb2cuYyBjYW5pdC5jCisgbHN6X1NPVVJDRVM9bHN6LmMgdGltaW5nLmMgenBlcnIuYyB6cmVhZGxpbmUuYyBjcmN0YWIuYyByYnNiLmMgem0uYyBwcm90bmFtZS5jIHRjcC5jIGxzeXNsb2cuYyBjYW5pdC5jCisgbm9pbnN0X0hFQURFUlMgPSB0aW1pbmcuaCB6Z2xvYmFsLmggem1vZGVtLmgKKy1kYXRhZGlyID0gJChwcmVmaXgpL0BEQVRBRElSTkFNRUAKKytkYXRhZGlyID0gJChwcmVmaXgpL3NoYXJlCisgbG9jYWxlZGlyID0gJChkYXRhZGlyKS9sb2NhbGUKKyBDRkxBR1M9QENGTEFHU0AKKyBESVNUQ0xFQU5fRklMRVM9bHJ6c3pidWcKKyAKKy1MREFERCA9IC4uL2xpYi9saWJ6bW9kZW0uYSBASU5UTExJQlNACisrTERBREQgPSAuLi9saWIvbGliem1vZGVtLmEgQExJQklOVExACisgQVVUT01BS0VfT1BUSU9OUz1hbnNpMmtucgorIEVYVFJBX0RJU1QgPSBhbnNpMmtuci4xIGFuc2kya25yLmMgbHJ6c3pidWcuaW4KKyBJTkNMVURFUyA9IC1JLi4gLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpL3NyYyAtSS4uL2ludGwgLUkkKHRvcF9zcmNkaXIpL2xpYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDZkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3otY2hlY2stbG9jYWxlLmgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSAyOGI0NzNjM2M5NjY4MmE4MjBlMjkyY2MxYmUwMDZlMTlhZWUxMWJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjQgTWF5IDIwMTMgMDE6MDc6MjQgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gbHJ6c3ogY2hlY2sgbG9jYWxlLmgKKworZml4IHRoZSBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgLU8wIGluIGEgZGVidWcgYnVpbGQ6CitscnouYzoyODQ6MTM6IGVycm9yOiAnTENfQUxMJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW3V3ZUBvaHNlLmRlXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCA2ZTIwNjRjLi5jMTA0NjBjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0xMzAsNyArMTMwLDcgQEAgQUNfQ0hFQ0tfSEVBREVSUyhmY250bC5oIGxpbWl0cy5oIHN5cy9pb2N0bC5oIHN5cy90aW1lLmggdW5pc3RkLmggc3lzL3RpbWVzLmgpCisgTFJaU1pfSEVBREVSU19URVJNX0lPCisgQUNfQ0hFQ0tfSEVBREVSUyh0ZXJtaW9zLmggc3lzL3Rlcm1pb3MuaCB0ZXJtaW8uaCBzeXMvdGVybWlvLmggc2d0dHkuaCkKKyBBQ19DSEVDS19IRUFERVJTKHN5cy9tbWFuLmggdXRpbWUuaCBzeXNsb2cuaCBzeXMvc3lzbG9nLmggc3lzL3BhcmFtLmgpCistQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc2VsZWN0Lmggc3RyaW5ncy5oIGFycGEvaW5ldC5oKQorK0FDX0NIRUNLX0hFQURFUlMoc3lzL3NlbGVjdC5oIHN0cmluZ3MuaCBsb2NhbGUuaCBhcnBhL2luZXQuaCkKKyAKKyBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyBBQ19UWVBFX1NJWkVfVAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzel9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTI5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIGZvbGxvd2luZyBpc3N1ZSB3aXRoIGF1dG9tYWtlIDEuMTIKKworfCBjb25maWd1cmUuaW46OTU6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKy4uLgorfCBsaWIvTWFrZWZpbGUuYW06MzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBsaWIvTWFrZWZpbGUuYW06IGluc3RhbGxpbmcgJy4vZGVwY29tcCcKK3wgc3JjL01ha2VmaWxlLmFtOjExOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGxyenN6LTAuMTIuMjAvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHJ6c3otMC4xMi4yMC5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIGxyenN6LTAuMTIuMjAvY29uZmlndXJlLmluCitAQCAtOTIsNyArOTIsNiBAQCBBQ19QUk9HX1JBTkxJQgorIEFDX0lTQ19QT1NJWAorIEFDX0FJWAorIEFDX01JTklYCistQU1fQ19QUk9UT1RZUEVTCisgQUNfQ19DT05TVAorIEFDX0NfSU5MSU5FCisgCitJbmRleDogbHJ6c3otMC4xMi4yMC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBscnpzei0wLjEyLjIwLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgbHJ6c3otMC4xMi4yMC9saWIvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNSBAQAorIG5vaW5zdF9MSUJSQVJJRVM9bGliem1vZGVtLmEKKyBDRkxBR1M9QENGTEFHU0AKKy1BVVRPTUFLRV9PUFRJT05TPWFuc2kya25yCisgCisgRVhUUkFfRElTVCA9IGFsbG9jYS5jIGFuc2kya25yLjEgYW5zaTJrbnIuYyBcCisgCWdldG9wdC5jIGdldG9wdDEuYyBta2Rpci5jIG1rdGltZS5jIFwKK0luZGV4OiBscnpzei0wLjEyLjIwL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxyenN6LTAuMTIuMjAub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBscnpzei0wLjEyLjIwL3NyYy9NYWtlZmlsZS5hbQorQEAgLTgsNyArOCw2IEBAIENGTEFHUz1AQ0ZMQUdTQAorIERJU1RDTEVBTl9GSUxFUz1scnpzemJ1ZworIAorIExEQUREID0gLi4vbGliL2xpYnptb2RlbS5hIEBMSUJJTlRMQAorLUFVVE9NQUtFX09QVElPTlM9YW5zaTJrbnIKKyBFWFRSQV9ESVNUID0gYW5zaTJrbnIuMSBhbnNpMmtuci5jIGxyenN6YnVnLmluCisgSU5DTFVERVMgPSAtSS4uIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMgLUkuLi9pbnRsIC1JJCh0b3Bfc3JjZGlyKS9saWIKKyAjREVGUyA9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgLURPUz1cIkBob3N0X29zQFwiIC1EQ1BVPVwiQGhvc3RfY3B1QFwiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlNTkyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBscnpzei0wLjEyLjIwX29yZy9zcmMvTWFrZWZpbGUuaW4gbHJ6c3otMC4xMi4yMF9wYXRjaC9zcmMvTWFrZWZpbGUuaW4KKy0tLSBscnpzei0wLjEyLjIwX29yZy9zcmMvTWFrZWZpbGUuaW4JMTk5OC0xMi0zMCAxNzozMTo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBscnpzei0wLjEyLjIwX3BhdGNoL3NyYy9NYWtlZmlsZS5pbgkyMDA0LTA0LTI5IDEzOjU3OjMzLjQzNDkwOTY1NiArMDIwMAorQEAgLTM3MiwxMyArMzcyLDEzIEBACisgCXJtIC1mICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzYiB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKyAJbG4gJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHN6IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIFwKKyAJCSQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzYiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCAKKy0Jcm0gLWYgJChiaW5kaXIpL2BlY2hvIGxzeCB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKysJcm0gLWYgJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHN4IHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorIAlsbiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc3ogfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgXAorIAkJJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHN4IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIAorLQlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJiIHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorKwlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscmIgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscmIgfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCistCXJtIC1mICQoYmluZGlyKS9gZWNobyBscnggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisrCXJtIC1mICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyeCB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKyAJbG4gJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJ6IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIFwKKyAJCSQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyeCB8c2VkIC1lICckKHRyYW5zZm9ybSknYCAKKyAjCXJtIC1mICQoYmluZGlyKS9gZWNobyBscnpzemJ1ZyB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNlNTdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzel8wLjEyLjIwLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIHptb2RlbS94bW9kZW0veW1vZGVtIGZpbGUgdHJhbnNmZXIiCitERVNDUklQVElPTiA9ICJMcnpzeiBpcyBhIGNvc21ldGljYWxseSBtb2RpZmllZCB6bW9kZW0veW1vZGVtL3htb2RlbSBwYWNrYWdlIGJ1aWx0IGZyb20gXAordGhlIHB1YmxpYy1kb21haW4gdmVyc2lvbiBvZiBDaHVjayBGb3JzYmVyZydzIHJ6c3ogcGFja2FnZS4gXAorVGhlc2UgcHJvZ3JhbXMgdXNlIGVycm9yIGNvcnJlY3RpbmcgcHJvdG9jb2xzICh7eix4LHl9bW9kZW0pIHRvIHNlbmQgKHN6LCBzeCwgc2IpIGFuZCBcCityZWNlaXZlIChyeiwgcngsIHJiKSBmaWxlcyBvdmVyIGEgZGlhbC1pbiBzZXJpYWwgcG9ydCBmcm9tIGEgdmFyaWV0eSBvZiBwcm9ncmFtcyBcCitydW5uaW5nIHVuZGVyIHZhcmlvdXMgb3BlcmF0aW5nIHN5c3RlbXMuICIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2hzZS5kZS91d2Uvc29mdHdhcmUvbHJ6c3ouaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorCQkJZmlsZTovL3NyYy9scnouYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT01Mjc2OTU2MzczZmY3ZDg3NTg4MzdmNjM5OWExMDQ1ZiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICIiCitQUiA9ICJyNiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9oc2UuZGUvdXdlL3JlbGVhc2VzL2xyenN6LSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCisJICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKwkgICBmaWxlOi8vZ2V0dGV4dC5wYXRjaCBcCisJICAgZmlsZTovL2FjZGVmaW5lLnBhdGNoIFwKKwkgICBmaWxlOi8vbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjVjZTZhNzRhYmM5YjllYjJhZjk0ZGZmZGZkMzcyYTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzI4YjM2YjE0YmRkYjAxNGQ5ZTljOTdjNTI0NTk4NTJmOTdiZDQwNWY4OTExM2YzMGJlZTQ1ZWQ5MjcyOGZmMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgc3JjL2xyeiBzcmMvbHN6ICR7RH0ke2JpbmRpcn0vCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInJ6IHJ4IHJiIHN6IHN4IHNiIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcnpdID0gIiR7YmluZGlyfS9scnoiCitBTFRFUk5BVElWRV9UQVJHRVRbcnhdID0gIiR7YmluZGlyfS9scnoiCitBTFRFUk5BVElWRV9UQVJHRVRbcmJdID0gIiR7YmluZGlyfS9scnoiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtzel0gPSAiJHtiaW5kaXJ9L2xzeiIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzeF0gPSAiJHtiaW5kaXJ9L2xzeiIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzYl0gPSAiJHtiaW5kaXJ9L2xzeiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjOWY5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworLS0tCisKKzcvMzAvMjAxMCAtIHJlYmFzZWQgdG8gMy4xLjUgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisxLzIyLzIwMTIgLSByZWJhc2VkIHRvIDMuMS45IGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorCitkaWZmIC1yIGFmMmIxMGNjM2MxNCBNYWtlZmlsZQorLS0tIGEvTWFrZWZpbGUJU3VuIEphbiAyMiAxODozNjozNCAyMDEyICswODAwCisrKysgYi9NYWtlZmlsZQlTdW4gSmFuIDIyIDE4OjM4OjU0IDIwMTIgKzA4MDAKK0BAIC0zNyw3ICszNyw2IEBACisgIyBDb21tYW5kcworIElOU1RBTEw9aW5zdGFsbAorIERJUklOU1RBTEw9aW5zdGFsbCAtZAorLVNUUklQPS1zCisgQ0M9JChDUk9TU19DT01QSUxFKWdjYworIEFSPSQoQ1JPU1NfQ09NUElMRSlhcgorIFJBTkxJQj0kKENST1NTX0NPTVBJTEUpcmFubGliCitAQCAtODYsNyArODUsNyBAQAorIGV4YW1wbGUubzogZXhhbXBsZS5jICQoUENJSU5DKQorIAorICU6ICUubworLQkkKENDKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICReICQoTERMSUJTKSAtbyAkQAorKwkkKENDKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICReICQoTElCX0xETElCUykgLW8gJEAKKyAKKyAlLjggJS43OiAlLm1hbgorIAlNPWBlY2hvICQoREFURSkgfCBzZWQgJ3MvLTAxLS8tSmFudWFyeS0vO3MvLTAyLS8tRmVicnVhcnktLztzLy0wMy0vLU1hcmNoLS87cy8tMDQtLy1BcHJpbC0vO3MvLTA1LS8tTWF5LS87cy8tMDYtLy1KdW5lLS87cy8tMDctLy1KdWx5LS87cy8tMDgtLy1BdWd1c3QtLztzLy0wOS0vLVNlcHRlbWJlci0vO3MvLTEwLS8tT2N0b2Jlci0vO3MvLTExLS8tTm92ZW1iZXItLztzLy0xMi0vLURlY2VtYmVyLS87cy9cKC4qXCktXCguKlwpLVwoLipcKS9cMyBcMiBcMS8nYCA7IHNlZCA8JDwgPiRAICJzL0BUT0RBWUAvJCRNLztzL0BWRVJTSU9OQC9wY2l1dGlscy0kKFZFUlNJT04pLztzI0BJRFNESVJAIyQoSURTRElSKSMiCitAQCAtMTAxLDcgKzEwMCw3IEBACisgaW5zdGFsbDogYWxsCisgIyAtYyBpcyBpZ25vcmVkIG9uIExpbnV4LCBidXQgcmVxdWlyZWQgb24gRnJlZUJTRAorIAkkKERJUklOU1RBTEwpIC1tIDc1NSAkKERFU1RESVIpJChTQklORElSKSAkKERFU1RESVIpJChJRFNESVIpICQoREVTVERJUikkKE1BTkRJUikvbWFuOCAkKERFU1RESVIpJChNQU5ESVIpL21hbjcKKy0JJChJTlNUQUxMKSAtYyAtbSA3NTUgJChTVFJJUCkgbHNwY2kgc2V0cGNpICQoREVTVERJUikkKFNCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IGxzcGNpIHNldHBjaSAkKERFU1RESVIpJChTQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDc1NSB1cGRhdGUtcGNpaWRzICQoREVTVERJUikkKFNCSU5ESVIpCisgCSQoSU5TVEFMTCkgLWMgLW0gNjQ0ICQoUENJX0lEUykgJChERVNURElSKSQoSURTRElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCBsc3BjaS44IHNldHBjaS44IHVwZGF0ZS1wY2lpZHMuOCAkKERFU1RESVIpJChNQU5ESVIpL21hbjgKK2RpZmYgLXIgYWYyYjEwY2MzYzE0IGxpYi9jb25maWd1cmUKKy0tLSBhL2xpYi9jb25maWd1cmUJU3VuIEphbiAyMiAxODozNjozNCAyMDEyICswODAwCisrKysgYi9saWIvY29uZmlndXJlCVN1biBKYW4gMjIgMTg6Mzg6NTQgMjAxMiArMDgwMAorQEAgLTE0LDYgKzE0LDEwIEBACisgCWZpCisgfQorIAorK1ZFUlNJT049JDEKKytJRFNESVI9JDIKKytETlM9eWVzCisrCisgaWYgWyAteiAiJFZFUlNJT04iIC1vIC16ICIkSURTRElSIiBdIDsgdGhlbgorIAllY2hvID4mMiAiUGxlYXNlIHJ1biB0aGUgY29uZmlndXJlIHNjcmlwdCBmcm9tIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUiCisgCWV4aXQgMQorQEAgLTIxLDggKzI1LDggQEAKKyAKKyBlY2hvX24gIkNvbmZpZ3VyaW5nIGxpYnBjaSBmb3IgeW91ciBzeXN0ZW0uLi4iCisgaWYgWyAteiAiJEhPU1QiIF0gOyB0aGVuCistCXN5cz1gdW5hbWUgLXNgCistCXJlbD1gdW5hbWUgLXJgCisrCXN5cz0kezM6LWB1bmFtZSAtc2B9CisrCXJlbD0KKyAJcmVhbHN5cz0iJHN5cyIKKyAJaWYgWyAiJHN5cyIgPSAiQUlYIiAtYSAteCAvdXNyL2Jpbi9vc2xldmVsIC1hIC14IC91c3Ivc2Jpbi9sc2F0dHIgXQorIAl0aGVuCitAQCAtMzAsNyArMzQsNyBAQAorIAkJcHJvYz1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgLUYgbmFtZSB8IGhlYWQgLTFgCisgCQljcHU9YC91c3Ivc2Jpbi9sc2F0dHIgLUYgdmFsdWUgLWwgJHByb2MgLWEgdHlwZSB8IHNlZCAncy9fLiovLydgCisgCWVsc2UKKy0JCWNwdT1gdW5hbWUgLW0gfCBzZWQgJ3MvXmkuODYkL2kzODYvO3MvXnN1bjR1JC9zcGFyYzY0LztzL15pODZwYyQvaTM4Ni87cy9eQmVQQyQvaTM4Ni87cy9eQmVNYWMkL3Bvd2VycGMvO3MvXkJlQm94JC9wb3dlcnBjLydgCisrCQljcHU9JHs0Oi1gdW5hbWUgLW0gfCBzZWQgJ3MvXmkuODYkL2kzODYvO3MvXnN1bjR1JC9zcGFyYzY0LztzL15pODZwYyQvaTM4Ni87cy9eQmVQQyQvaTM4Ni87cy9eQmVNYWMkL3Bvd2VycGMvO3MvXkJlQm94JC9wb3dlcnBjLydgfQorIAlmaQorIAlpZiBbICIkc3lzIiA9ICJHTlUva0ZyZWVCU0QiIC1vICIkc3lzIiA9ICJEcmFnb25GbHkiIF0KKyAJdGhlbgorQEAgLTQwLDcgKzQ0LDcgQEAKKyAJdGhlbgorIAkJc3lzPWN5Z3dpbgorIAlmaQorLQlIT1NUPSR7MzotJGNwdS0kc3lzfQorKwlIT1NUPSRjcHUtJHN5cworIGZpCisgWyAtbiAiJFJFTEVBU0UiIF0gJiYgcmVsPSIke1JFTEVBU0V9IgorICMgQ0FWRUFUOiB0ciBvbiBTb2xhcmlzIGlzIGEgYml0IHdlaXJkIGFuZCB0aGUgZXh0cmEgW10gaXMgb3RoZXJ3aXNlIGhhcm1sZXNzLgorQEAgLTQ5LDYgKzUzLDIxIEBACisgc3lzPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyBlY2hvICIgJGhvc3QgJHJlbCAkY3B1ICRzeXMiCisgCisraWYgWyAiJGhvc3QiID0gImxpbnV4LS1nbnVlYWJpIiBdCisrdGhlbgorKwlzeXM9bGludXgKKytmaQorKworK2lmIFsgIiRob3N0IiA9ICJsaW51eC0tdWNsaWJjIiBdCisrdGhlbgorKwlzeXM9bGludXgKKytmaQorKworK2lmIFsgIiRob3N0IiA9ICJsaW51eC0tdWNsaWJjZWFiaSIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKyBjPWNvbmZpZy5oCisgbT1jb25maWcubWsKKyBlY2hvID4kYyAnI2RlZmluZSBQQ0lfQ09ORklHX0gnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvZ3Vlc3MtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGI0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaApAQCAtMCwwICsxLDM3IEBACit0aGUgb3JpZ2luYWwgZ3Vlc3MgYWxnb3JpdGhtIGlzIGJyb2tlbiBmb3IgbWFueSBhcmNocworZm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHdvIHdvdWxkIGJyZWFrOgorCWFybS1saW51eC1nbnVlYWJpICAtLT4gc3lzPWdudWVhYmkKKwl4ODZfNjQtdW5rbm93bi1wYy1saW51eC1nbnUgIC0tPiBzeXMgPSBwYy1saW51eC1nbnUKKwordXNlIGEgc2ltcGxlciBzY2hlbWUgaGVyZSBhbmQgaG9wZSBpdCB3b3JrcyBmb3IgYWxsIHRoZSBjYXNlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworNy8zMC8yMDEwIC0gY3JlYXRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYi9jb25maWd1cmUgYi9saWIvY29uZmlndXJlCitpbmRleCA0MzE4YjA1Li44NGY2YWNiIDEwMDc1NQorLS0tIGEvbGliL2NvbmZpZ3VyZQorKysrIGIvbGliL2NvbmZpZ3VyZQorQEAgLTUzLDIwICs1Myw3IEBAIGNwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCisgc3lzPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyBlY2hvICIgJGhvc3QgJHJlbCAkY3B1ICRzeXMiCisgCistaWYgWyAiJGhvc3QiID0gImxpbnV4LS1nbnVlYWJpIiBdCistdGhlbgorLQlzeXM9bGludXgKKy1maQorLQorLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tdWNsaWJjIiBdCistdGhlbgorLQlzeXM9bGludXgKKy1maQorLQorLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tdWNsaWJjZWFiaSIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKyt7IGVjaG8gIiRob3N0IiB8IGdyZXAgbGludXg7IH0gJiYgc3lzPWxpbnV4CisgCisgYz1jb25maWcuaAorIG09Y29uZmlnLm1rCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2ZiYzZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IElvbnV0IFJhZHUgPGlvbnV0eC5yYWR1QGludGVsLmNvbT4KKworSW5kZXg6IHBjaXV0aWxzLTMuMi4wL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGNpdXRpbHMtMy4yLjAub3JpZy9NYWtlZmlsZQorKysrIHBjaXV0aWxzLTMuMi4wL01ha2VmaWxlCitAQCAtMzUsNyArMzUsNyBAQCBTSEFSRURJUj0kKFBSRUZJWCkvc2hhcmUKKyBJRFNESVI9JChTSEFSRURJUikKKyBNQU5ESVI6PSQoc2hlbGwgaWYgWyAtZCAkKFBSRUZJWCkvc2hhcmUvbWFuIF0gOyB0aGVuIGVjaG8gJChQUkVGSVgpL3NoYXJlL21hbiA7IGVsc2UgZWNobyAkKFBSRUZJWCkvbWFuIDsgZmkpCisgSU5DRElSPSQoUFJFRklYKS9pbmNsdWRlCistTElCRElSPSQoUFJFRklYKS9saWIKKytMSUJESVI9JChsaWJkaXIpCisgUEtHQ0ZESVI9JChMSUJESVIpL3BrZ2NvbmZpZworIAorICMgQ29tbWFuZHMKK0BAIC05NCw3ICs5NCw3IEBAIGV4YW1wbGU6IGV4YW1wbGUubyBsaWIvJChQQ0lMSUJfREVWKQorIGV4YW1wbGUubzogZXhhbXBsZS5jICQoUENJSU5DKQorIAorICU6ICUubworLQkkKENDKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICReICQoTElCX0xETElCUykgLW8gJEAKKysJJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpICQoTERMSUJTKSAtbyAkQAorIAorICUuOCAlLjc6ICUubWFuCisgCU09YGVjaG8gJChEQVRFKSB8IHNlZCAncy8tMDEtLy1KYW51YXJ5LS87cy8tMDItLy1GZWJydWFyeS0vO3MvLTAzLS8tTWFyY2gtLztzLy0wNC0vLUFwcmlsLS87cy8tMDUtLy1NYXktLztzLy0wNi0vLUp1bmUtLztzLy0wNy0vLUp1bHktLztzLy0wOC0vLUF1Z3VzdC0vO3MvLTA5LS8tU2VwdGVtYmVyLS87cy8tMTAtLy1PY3RvYmVyLS87cy8tMTEtLy1Ob3ZlbWJlci0vO3MvLTEyLS8tRGVjZW1iZXItLztzL1woLipcKS1cKC4qXCktXCguKlwpL1wzIFwyIFwxLydgIDsgc2VkIDwkPCA+JEAgInMvQFRPREFZQC8kJE0vO3MvQFZFUlNJT05AL3BjaXV0aWxzLSQoVkVSU0lPTikvO3MjQElEU0RJUkAjJChJRFNESVIpIyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYThjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuMy4xLmJiCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiUENJIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gJ1RoZSBQQ0kgVXRpbGl0aWVzIHBhY2thZ2UgY29udGFpbnMgYSBsaWJyYXJ5IGZvciBwb3J0YWJsZSBhY2Nlc3MgXAordG8gUENJIGJ1cyBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBzZXZlcmFsIHV0aWxpdGllcyBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuJworSE9NRVBBR0UgPSAiaHR0cDovL2F0cmV5Lmthcmxpbi5tZmYuY3VuaS5jei9+bWovcGNpdXRpbHMuc2h0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitERVBFTkRTID0gInpsaWIga21vZCIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL3V0aWxzL3BjaXV0aWxzL3BjaXV0aWxzLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3Vlc3MtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGMzNDBhMzE3OTg3ZDYxYTExZWUyY2YxMzllZjExOTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE0YTNiZGI3N2U0Y2RiZTllOTcwZTE4ODVhZjQ2ZTBiYTIwMTFiZjk3MzY0MzY4YzQ1NWFkZTBlZGQ0ZTNhOSIKKworaW5oZXJpdCBtdWx0aWxpYl9oZWFkZXIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdod2RiJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaHdkYl0gPSAiSFdEQj15ZXMsSFdEQj1ubyx1ZGV2IgorCitQQ0lfQ09ORl9GTEFHID0gIlpMSUI9eWVzIEROUz15ZXMgU0hBUkVEPXllcyIKKworIyBzZWUgY29uZmlndXJlLnBhdGNoCitkb19jb25maWd1cmUgKCkgeworCSgKKwkgIGNkIGxpYiAmJiBcCisJICAjIEVYVFJBX09FQ09ORiBmb3IgdGhpcyByZWNpcGUgY291bGQgb25seSBwb3NzaWJseSBjb250YWluICdIV0RCPXllcy9ubycsIHNvIHdlIHB1dCBpdAorCSAgIyBiZWZvcmUgLi9jb25maWd1cmUKKwkgICR7UENJX0NPTkZfRkxBR30gJHtFWFRSQV9PRUNPTkZ9IC4vY29uZmlndXJlICR7UFZ9ICR7ZGF0YWRpcn0gJHtUQVJHRVRfT1N9ICR7VEFSR0VUX0FSQ0h9CisJKQorfQorCitleHBvcnQgUFJFRklYID0gIiR7cHJlZml4fSIKK2V4cG9ydCBTQklORElSID0gIiR7c2JpbmRpcn0iCitleHBvcnQgU0hBUkVESVIgPSAiJHtkYXRhZGlyfSIKK2V4cG9ydCBNQU5ESVIgPSAiJHttYW5kaXJ9IgorCitFWFRSQV9PRU1BS0UgKz0gIiR7UENJX0NPTkZfRkxBR30iCisKKyMgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnJlYWtzIGlmIHRoZSBIT1NUIHZhcmlhYmxlIGlzIHNldAorSE9TVFt1bmV4cG9ydF0gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbCBpbnN0YWxsLWxpYgorCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJbG4gLXMgLi4vc2Jpbi9sc3BjaSAke0R9JHtiaW5kaXJ9L2xzcGNpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgcGNpL2NvbmZpZy5oCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1pZHMgbGlicGNpIgorRklMRVNfJHtQTn0taWRzID0gIiR7ZGF0YWRpcn0vcGNpLmlkcyoiCitGSUxFU19saWJwY2kgPSAiJHtsaWJkaXJ9L2xpYnBjaS5zby4qIgorU1VNTUFSWV8ke1BOfS1pZHMgPSAiUENJIHV0aWxpdGllcyAtIGRldmljZSBJRCBkYXRhYmFzZSIKK0RFU0NSSVBUSU9OXyR7UE59LWlkcyA9ICJQYWNrYWdlIHByb3ZpZGluZyB0aGUgUENJIGRldmljZSBJRCBkYXRhYmFzZSBmb3IgcGNpdXRpbHMuIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWlkcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4LzAwMDEtZml4LWEtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC8wMDAxLWZpeC1hLXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC8wMDAxLWZpeC1hLXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gNWE3OTNhMWE5ZmIzNDc3NzE5YWFiZjdlMjdmZjIyZWQxYWNkZjU1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTkgTWF5IDIwMTUgMTU6NTQ6MjQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGEgcGFyYWxsZWwgYnVpbGRpbmcgaXNzdWUKKworRml4ZWQ6Cit8ICAgc3JjL2xleF9jb25maWcuYzozNDoyNTogZmF0YWwgZXJyb3I6IHlhY2NfY29uZmlnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3wKK3wgICAgI2luY2x1ZGUgInlhY2NfY29uZmlnLmgiCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK3wgICBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorCitBbmQ6CitDb21waWxpbmcgbGV4X2NvbmZpZy5jLgorICBzcmMvbGV4X2NvbmZpZy5sOjM0OjI1OiBmYXRhbCBlcnJvcjogeWFjY19jb25maWcuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGhlcmUgYXJlIHR3byBNYWtlZmlsZSBydWxlcyB0byBnZW5lcmF0ZSBsZXhfY29uZmlnLm8sIG9uZSBpcyB0byBnZW5lcmF0ZQorbGV4X2NvbmZpZy5vIG90aGVyIGlzIHRvIGdlbmVyYXRlIHNyYy9sZXhfY29uZmlnLm8sIHNvIHdlIGNhbiByZW1vdmUgb25lLgorYW5kIGFkZCB0aGUgbmVlZGVkIGRlcGVuZGVuY2UgZm9yIGxleF9jb25maWcubworCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgMyArLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBkNDVmZGMzLi40YzUzYmMyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjQ2LDggKzI0Niw3IEBAICQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKTogJChMSUJDKSBzcmMvc3RhcnR1cC5vIHNyYy95YWNjX2NvbmZpZy5vIHNyYy9sZXhfY29uZmlnCisgCSQoUVVJRVQpICQoTEQpICQoTERGTEFHUykgLW8gJEAgJChDUlQwKSBzcmMvc3RhcnR1cC5vIHNyYy95YWNjX2NvbmZpZy5vIHNyYy9sZXhfY29uZmlnLm8gJChMSUJfT0JKUykgJChBUkNIX0xJQl9PQkpTKQorIAkkKFFVSUVUKSAkKFNUUklQQ01EKSAkQAorIAorLXlhY2NfY29uZmlnLm8gbGV4X2NvbmZpZy5vOiAlLm86ICUuYworLQkkKENDKSAtYyAtTUQgLU8gLXBpcGUgJChDUFBGTEFHUykgJDwKKytzcmMvbGV4X2NvbmZpZy5vOnNyYy95YWNjX2NvbmZpZy5oCisgCisgZGVidWd0b29sczogY2NkdiAkKENCRFVNUCkgJChDSVNEVU1QKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwY2UyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4L21ha2VmaWxlX2ZpeC5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitIYXJkY29kZWQgcGF0aHMgYXJlIGJhZC4uLgorVGhpcyBsZXRzIHVzIHVzZSB0aGUgaW5zdGFsbCBmcm9tIE9FJ3MgbmF0aXZlIHN5c3Jvb3QKK3JlYmFzZSB0aGUgcGF0Y2ggdG8gMDE4LCByZW1vdmluZyBoYXJkY29kZWQgcGF0aCBmb3IgdHJ1ZQorYXMgd2VsbC4gUmVtb3Zpbmcgb2YgLUQgaW4gaW5zdGFsbCBpbnZvY2F0aW9uIGlzIGEgbGl0dGxlCitxdWVzdGlvbmFibGUsIGlzIGl0IHNvbWUgR05VIGV4dGVudGlvbj8KKworLUtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBwY21jaWF1dGlscy0wMTgvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwY21jaWF1dGlscy0wMTgub3JpZy9NYWtlZmlsZQorKysrIHBjbWNpYXV0aWxzLTAxOC9NYWtlZmlsZQorQEAgLTc2LDcgKzc2LDcgQEAgc2JpbmRpciA9CSR7ZXhlY19wcmVmaXh9L3NiaW4KKyBtYW5kaXIgPQkke3ByZWZpeH0vdXNyL3NoYXJlL21hbgorIHVkZXZkaXIgPQkke3ByZWZpeH0vbGliL3VkZXYKKyAKKy1JTlNUQUxMID0gL3Vzci9iaW4vaW5zdGFsbCAtYworK0lOU1RBTEwgPSBpbnN0YWxsIC1jCisgSU5TVEFMTF9QUk9HUkFNID0gJHtJTlNUQUxMfQorIElOU1RBTExfREFUQSAgPSAke0lOU1RBTEx9IC1tIDY0NAorIElOU1RBTExfU0NSSVBUID0gJHtJTlNUQUxMX1BST0dSQU19CitAQCAtMTgwLDcgKzE4MCw3IEBAIGVuZGlmCisgIyBpZiBERUJVRyBpcyBlbmFibGVkLCB0aGVuIHdlIGRvIG5vdCBzdHJpcCBvciBvcHRpbWl6ZQorIGlmZXEgKCQoc3RyaXAgJChERUJVRykpLHRydWUpCisgCUNGTEFHUyAgKz0gLU8xIC1nIC1EREVCVUcgLURfR05VX1NPVVJDRQorLQlTVFJJUENNRCA9IC9iaW4vdHJ1ZSAtU2luY2Vfd2VfYXJlX2RlYnVnZ2luZworKwlTVFJJUENNRCA9IHRydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKKyBlbHNlCisgCUNGTEFHUyAgKz0gJChPUFRJTUlaQVRJT04pIC1mb21pdC1mcmFtZS1wb2ludGVyIC1EX0dOVV9TT1VSQ0UKKyAJU1RSSVBDTUQgPSAkKFNUUklQKSAtcyAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQKK0BAIC0yNzMsMzAgKzI3MywzMiBAQCBjbGVhbjoKKyAKKyBpbnN0YWxsLWhvdHBsdWc6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoaG90cGx1Z2RpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhLmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5hZ2VudAorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgaG90cGx1Zy9wY21jaWEucmMgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLnJjCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBob3RwbHVnL3BjbWNpYS5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQKKysJJChJTlNUQUxMX1BST0dSQU0pIGhvdHBsdWcvcGNtY2lhLnJjICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5yYworIAorIHVuaW5zdGFsbC1ob3RwbHVnOgorIAktIHJtIC1mICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEucmMKKyAKKyBpbnN0YWxsLXNvY2tldC1ob3RwbHVnOgorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgaG90cGx1Zy9wY21jaWFfc29ja2V0LmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LnJjCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBob3RwbHVnL3BjbWNpYV9zb2NrZXQuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5hZ2VudAorKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWFfc29ja2V0LnJjICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQucmMKKyAKKyB1bmluc3RhbGwtc29ja2V0LWhvdHBsdWc6CisgCS0gcm0gLWYgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LnJjCisgCisgaW5zdGFsbC1zb2NrZXQtdG9vbHM6CistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfU09DS0VUX1NUQVJUVVApCisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQodWRldmhlbHBlcmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKSAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkKKyAKKyB1bmluc3RhbGwtc29ja2V0LXRvb2xzOgorIAktIHJtIC1mICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKQorIAorIGluc3RhbGwtdG9vbHM6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoc2JpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EICQoUENDQVJEQ1RMKSAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgJChQQ0NBUkRDVEwpICQoREVTVERJUikkKHNiaW5kaXIpLyQoUENDQVJEQ1RMKQorIAkkKFNZTUxJTkspICQoUENDQVJEQ1RMKSAkKERFU1RESVIpJChzYmluZGlyKS8kKExTUENNQ0lBKQorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgJChQQ01DSUFfQ0hFQ0tfQlJPS0VOX0NJUykgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfQ0hFQ0tfQlJPS0VOX0NJUykKKysJJChJTlNUQUxMX1BST0dSQU0pICQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpCisgCisgdW5pbnN0YWxsLXRvb2xzOgorIAktIHJtIC1mICQoREVTVERJUikkKHNiaW5kaXIpLyQoUENDQVJEQ1RMKQorQEAgLTMwNSwyMiArMzA3LDI0IEBAIHVuaW5zdGFsbC10b29sczoKKyAKKyBpbnN0YWxsLWNvbmZpZzoKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKQorLQkkKElOU1RBTExfREFUQSkgIC1EIGNvbmZpZy9jb25maWcub3B0cyAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0cworKwkkKElOU1RBTExfREFUQSkgIGNvbmZpZy9jb25maWcub3B0cyAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0cworIAlpZiBbIC1mIGNvbmZpZy9jb25maWcub3B0cy4kKEFSQ0gpIF07IHRoZW4gXAorLQkJJChJTlNUQUxMX0RBVEEpIC1EIGNvbmZpZy9jb25maWcub3B0cy4kKEFSQ0gpICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzOyBcCisrCQkkKElOU1RBTExfREFUQSkgY29uZmlnL2NvbmZpZy5vcHRzLiQoQVJDSCkgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHM7IFwKKyAJZmkKKyAKKyB1bmluc3RhbGwtY29uZmlnOgorICMJLSBybSAtZiAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0cworIAorIGluc3RhbGwtdWRldjoKKy0JJChJTlNUQUxMX0RBVEEpIC1EICQoVURFVl9SVUxFU19GSUxFKSAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpLzYwLXBjbWNpYS5ydWxlcworKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHVkZXZydWxlc2RpcikKKysJJChJTlNUQUxMX0RBVEEpICQoVURFVl9SVUxFU19GSUxFKSAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpLzYwLXBjbWNpYS5ydWxlcworIAorIHVuaW5zdGFsbC11ZGV2OgorIAktIHJtIC1mICQoREVTVERJUikkKHVkZXZydWxlc2RpcikvNjAtcGNtY2lhLnJ1bGVzCisgCisgaW5zdGFsbC1tYW46CistCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vbWFuOC9wY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGNjYXJkY3RsLjgKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgKKysJJChJTlNUQUxMX0RBVEEpIG1hbi9tYW44L3BjY2FyZGN0bC44ICQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wY2NhcmRjdGwuOAorIAkkKFNZTUxJTkspIHBjY2FyZGN0bC44ICQoREVTVERJUikkKG1hbmRpcikvbWFuOC9sc3BjbWNpYS44CisgCisgdW5pbnN0YWxsLW1hbjoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMuaW5jIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxYzU1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMuaW5jCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiTGludXgga2VybmVsIHVzZXJsYW5kIHV0aWxpdGllcyBmb3IgdGhlIFBDTUNJQSBzdWJzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvcGNtY2lhLyIKK1NFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAidWRldiBzeXNmc3V0aWxzIGZsZXgtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAidWRldiBtb2R1bGUtaW5pdC10b29scyIKKworU1JDX1VSSSA9ICJodHRwOi8vbWlycm9yLmxpbnV4Lm9yZy5hdS9saW51eC91dGlscy9rZXJuZWwvcGNtY2lhLyR7QlB9LnRhci5iejIiCisKK1MgPSAiJHtXT1JLRElSfS9wY21jaWF1dGlscy0ke1BWfSIKKworZXhwb3J0IEhPU1RDQyA9ICIke0JVSUxEX0NDfSIKK2V4cG9ydCBldGNkaXIgPSAiJHtzeXNjb25mZGlyfSIKK2V4cG9ydCBzYmluZGlyID0gIiR7YmFzZV9zYmluZGlyfSIKK2V4cG9ydCBwY21jaWFjb25mZGlyID0gIiR7c3lzY29uZmRpcn0vcGNtY2lhIgorZXhwb3J0IHVkZXZkaXIgPSAiYHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgIgorZXhwb3J0IHVkZXZydWxlc2RpciA9ICJgcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAvcnVsZXMuZCIKK2V4cG9ydCBVREVWID0gIjEiCitMRCA9ICIke0NDfSIKK0NGTEFHUyA9KyAiLUkke1N9L3NyYyIKK0NGTEFHUyA9KyAiLURQQ01DSUFVVElMU19WRVJTSU9OPVxcIiR7UFZ9XFwiIgorCitFWFRSQV9PRU1BS0UgPSAiLWUgJ1NUUklQPWVjaG8nICdMSUJfT0JKUz0tbGMgLWxzeXNmcycgJ0xFWD1mbGV4JyIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9wY21jaWEvY29uZmlnLm9wdHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHNfMDE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1N2JkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIHBjbWNpYXV0aWxzLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbWFrZWZpbGVfZml4LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1hLXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjVkODU2NjliMzQ0MGJhYTQ1MzIzNjNkYTZjYWFmMWI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5ZTZhZTQ0MTI3OGUxNzhjMDc1MDFkNDkyMzk0ZWQyYzAzMjZmZGI2Njg5NGY2ZDA0MGVjODExYjBkYzhlZDUiCisKK1BSID0gInIxIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiovdWRldi8uZGVidWcgKi8qL3VkZXYvLmRlYnVnIgorRklMRVNfJHtQTn0gKz0gIiovdWRldiAqLyovdWRldiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG0tdXRpbHMvcG0tdXRpbHNfMS40LjEuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3BtLXV0aWxzL3BtLXV0aWxzXzEuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzUxODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BtLXV0aWxzL3BtLXV0aWxzXzEuNC4xLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBzY3JpcHRzIGZvciBwb3dlciBtYW5hZ2VtZW50IgorREVTQ1JJUFRJT04gPSAiU2ltcGxlIHNoZWxsIGNvbW1hbmQgbGluZSB0b29scyB0byBzdXNwZW5kIGFuZCBoaWJlcm5hdGUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BtLXV0aWxzLmZyZWVkZXNrdG9wLm9yZy93aWtpLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcG0tcG11LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMjttZDU9M2MxZGRiYzU0ZTczNWZiNGEwMzg2ZTE0Yzc4YTMxNDciCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9wbS11dGlscy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvcG0tdXRpbHMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTc0MmE1NTYwODljMzZjM2E4OWViMWI5NTdkYTVhNjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGVkODk5MDMyODY2ZDg4YjI5MzNhMWQzNGNjNzVlOGFlNDJkY2RlMjBlMWNjMjE4MzZiYWFhZTNkNDM3MGMwYiIKKworaW5oZXJpdCBwa2djb25maWcgYXV0b3Rvb2xzCisKK1JERVBFTkRTXyR7UE59ID0gImdyZXAgYmFzaCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgYXV0b3JlY29uZiAtZiAtaSAtcyApCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vYmluLy5kZWJ1ZyBcCisJCSAgICAke2RhdGFkaXJ9L2RvYy9wbS11dGlscy9SRUFETUUuZGVidWdnaW5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmNTI5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL0NPUFlJTkcKQEAgLTAsMCArMSwyIEBACitUaGlzIGlzIGEgYmxhbmsgQ09QWUlORyBmaWxlLCBhbmQgc2hvdWxkIGJlIGZpbGxlZCBpbiBieSBvcmlnaW5hbCBhdXRob3IgaW4gZnV0dXJlLgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9wb2ludGVyY2FsIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtL3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ni9wb2ludGVyY2FsIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY2L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ni9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjcvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ny9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjcvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACis4MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdW1pcHMvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVtaXBzL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVtaXBzL3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQ2ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXBwYy9wb2ludGVyY2FsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwNTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni02NC9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzEyODAgMCAxMDAyIDAgOTYwIDMyOCA2NTUzNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDA1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2L3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorMTI4MCAwIDEwMDIgMCA5NjAgMzI4IDY1NTM2CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MzVhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsXzAuMC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGRhdGEiCitTRUNUSU9OID0gImJhc2UiCitQUiA9ICJyMTEiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRiNWZjZmM4N2ZiNjE1ODYwZDM5OGI1ZTM4Njg1ZWRmIgorCitTUkNfVVJJID0gImZpbGU6Ly9wb2ludGVyY2FsIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkciCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwkjIE9ubHkgaW5zdGFsbCBmaWxlIGlmIGl0IGhhcyBhIGNvbnRlbnRzCisJaWYgWyAtcyAke1N9L3BvaW50ZXJjYWwgXTsgdGhlbgorCSAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKwkgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3BvaW50ZXJjYWwgJHtEfSR7c3lzY29uZmRpcn0vCisJZmkKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2FkZF9zdGRsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvYWRkX3N0ZGxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRmMjYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2FkZF9zdGRsaWIucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorIyBUaGlzIHBhdGNoIGFkZGVzIHN0ZGxpYi5oIHRvIGZpeCBjb21waWxlciB3YXJuaW5ncyBkdWUgdG8gdGhlIGV4aXQKKyMgYnVpbHQtaW4gbm90IGJlaW5nIGRlZmluZWQgYW5kIGdldHRpbmcgYW4gaW5jb3JyZWN0IGltcGxpY2l0IGRlZmluaXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NyZWF0ZWQtYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworLS0tIHNldHNlcmlhbC0yLjE3L3NldHNlcmlhbC5jCTIwMTAtMDktMDIgMTQ6MTE6MjcuNTY5NzYzMDg4IC0wNzAwCisrKysgc2V0c2VyaWFsLTIuMTdfZml4ZWQvc2V0c2VyaWFsLmMJMjAxMC0wOS0wMiAxNDoxMTowOC41NDYyNjQxMzkgLTA3MDAKK0BAIC0xMSw2ICsxMSw3IEBACisgICovCisgCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx0ZXJtaW9zLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NGFkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitPYmV5IExERkxBR1MKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gc2V0c2VyaWFsLTIuMTcub3JpZy9NYWtlZmlsZS5pbgorKysrIHNldHNlcmlhbC0yLjE3L01ha2VmaWxlLmluCitAQCAtMTMsNiArMTMsNyBAQCBTVFJJUCA9IEBTVFJJUEAKKyBDQyA9IEBDQ0AKKyBSTSA9IHJtIC1mCisgQ0ZMQUdTID0gQENGTEFHU0AKKytMREZMQUdTID0gQExERkxBR1NACisgREVGUyA9IEBERUZTQAorIElOQ1MgPSAtSS4KKyBUQVIgPSB0YXIKK0BAIC0yMCw3ICsyMSw3IEBAIFRBUiA9IHRhcgorIGFsbDogc2V0c2VyaWFsIHNldHNlcmlhbC5jYXQKKworIHNldHNlcmlhbDogc2V0c2VyaWFsLmMKKy0JJChDQykgJChDRkxBR1MpICQoREVGUykgJChJTkNTKSBzZXRzZXJpYWwuYyAtbyBzZXRzZXJpYWwKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChERUZTKSAkKElOQ1MpIHNldHNlcmlhbC5jIC1vIHNldHNlcmlhbAorCisgc2V0c2VyaWFsLmNhdDogc2V0c2VyaWFsLjgKKwlucm9mZiAtbWFuIHNldHNlcmlhbC44ID4gc2V0c2VyaWFsLmNhdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsXzIuMTcuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWxfMi4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGJkZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsXzIuMTcuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJDb250cm9scyB0aGUgY29uZmlndXJhdGlvbiBvZiBzZXJpYWwgcG9ydHMiCitERVNDUklQVElPTiA9ICJzZXRzZXJpYWwgaXMgYSBwcm9ncmFtIGRlc2lnbmVkIHRvIHNldCBhbmQvb3IgcmVwb3J0IHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHNlcmlhbCBwb3J0IgorSE9NRVBBR0UgPSAiaHR0cDovL3NldHNlcmlhbC5zb3VyY2Vmb3JnZS5uZXQiCitBVVRIT1IgPSAiVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3ZlcnNpb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTY7bWQ1PTJlN2M1OWNiOWU1N2UzNTZhZTgxZjUwZjRlNGRmZDk5IgorUFIgPSAicjMiCisKK0RFUEVORFMgKz0gImdyb2ZmLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3NldHNlcmlhbC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9zdGRsaWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzQ4NjdkNzJjNDE1NjQzMThlMDEwNzc0NWViN2EwZjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2U0NDg3ZDMyMGFjMzE1NTg1NjM0MjQxODk0MzVkMzk2ZGRmNzc5NTNiYjIzMTExYTE3YTNkMTQ4N2I1Nzk0YSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOAorCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vc2V0c2VyaWFsICAgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3NldHNlcmlhbC44ICR7RH0ke21hbmRpcn0vbWFuOAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTUuMDcuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtZnctdXRpbHNfMjAxNS4wNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGY3YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTUuMDcuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJVLUJvb3QgYm9vdGxvYWRlciBmd19wcmludGVudi9zZXRlbnYgdXRpbGl0aWVzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlcy9SRUFETUU7bWQ1PTA1MDdjZDdkYThlN2FkNmQ2NzAxOTI2ZWM5Yjg0Yzk1IgorU0VDVElPTiA9ICJib290bG9hZGVyIgorREVQRU5EUyA9ICJtdGQtdXRpbHMiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZGVueC5kZS91LWJvb3QuZ2l0O2JyYW5jaD1tYXN0ZXIiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0lOU0FORV9TS0lQXyR7UE59ID0gImFscmVhZHktc3RyaXBwZWQiCitFWFRSQV9PRU1BS0VfY2xhc3MtdGFyZ2V0ID0gJ0NST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFY9MScKK0VYVFJBX09FTUFLRV9jbGFzcy1jcm9zcyA9ICdBUkNIPSR7VEFSR0VUX0FSQ0h9IENDPSIke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSIgVj0xJworCitpbmhlcml0IHVib290LWNvbmZpZworCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlICR7VUJPT1RfTUFDSElORX0KKwlvZV9ydW5tYWtlIGVudgorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmFzZV9zYmluZGlyfS9md19wcmludGVudgorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZndfc2V0ZW52CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vdG9vbHMvZW52L2Z3X2Vudi5jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vZndfZW52LmNvbmZpZworfQorCitkb19pbnN0YWxsX2NsYXNzLWNyb3NzICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc30KKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiaW5kaXJfY3Jvc3N9L2Z3X3ByaW50ZW52CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmluZGlyX2Nyb3NzfS9md19zZXRlbnYKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2NsYXNzLWNyb3NzID0gInVib290X2Z3X3V0aWxzX2Nyb3NzIgordWJvb3RfZndfdXRpbHNfY3Jvc3MoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3NzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc30KK30KKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK0JCQ0xBU1NFWFRFTkQgPSAiY3Jvc3MiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtbWtpbWFnZV8yMDE1LjA3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNS4wNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTI5YmJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNS4wNy5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlUtQm9vdCBib290bG9hZGVyIGltYWdlIGNyZWF0aW9uIHRvb2wiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2VzL1JFQURNRTttZDU9MDUwN2NkN2RhOGU3YWQ2ZDY3MDE5MjZlYzliODRjOTUiCitTRUNUSU9OID0gImJvb3Rsb2FkZXIiCisKK0RFUEVORFMgPSAib3BlbnNzbCIKKworIyBUaGlzIHJldmlzaW9uIGNvcnJlc3BvbmRzIHRvIHRoZSB0YWcgInYyMDE1LjA3IgorIyBXZSB1c2UgdGhlIHJldmlzaW9uIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB0byBmZXRjaCBpdCBmcm9tIHRoZQorIyByZXBvIGR1cmluZyBwYXJzZQorU1JDUkVWID0gIjMzNzExYmRkNGE0ZGNlOTQyZmI1YWU4NWE2ODg5OWE4MzU3YmRkOTQiCisKK1BWID0gInYyMDE1LjA3K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZW54LmRlL3UtYm9vdC5naXQ7YnJhbmNoPW1hc3RlciIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VNQUtFID0gJ0NST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iIENDPSIke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSIgU1RSSVA9dHJ1ZSBWPTEnCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2Ugc2FuZGJveF9kZWZjb25maWcKKwlvZV9ydW5tYWtlIGNyb3NzX3Rvb2xzIE5PX1NETD0xCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSB0b29scy9ta2ltYWdlICR7RH0ke2JpbmRpcn0vdWJvb3QtbWtpbWFnZQorCWxuIC1zZiB1Ym9vdC1ta2ltYWdlICR7RH0ke2JpbmRpcn0vbWtpbWFnZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjZmZmQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LmluYwpAQCAtMCwwICsxLDI5MCBAQAorU1VNTUFSWSA9ICJVbml2ZXJzYWwgQm9vdCBMb2FkZXIgZm9yIGVtYmVkZGVkIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRlbnguZGUvd2lraS9VLUJvb3QvV2ViSG9tZSIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2Jvb3Rsb2FkZXIiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT0wNTA3Y2Q3ZGE4ZTdhZDZkNjcwMTkyNmVjOWI4NGM5NSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZGVueC5kZS91LWJvb3QuZ2l0O2JyYW5jaD1tYXN0ZXIiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgdWJvb3QtY29uZmlnIGRlcGxveQorCitFWFRSQV9PRU1BS0UgPSAnQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IENDPSIke1RBUkdFVF9QUkVGSVh9Z2NjICR7VE9PTENIQUlOX09QVElPTlN9IiBWPTEnCitFWFRSQV9PRU1BS0UgKz0gJ0hPU1RDQz0iJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30iJworCitQQUNLQUdFQ09ORklHID8/PSAib3BlbnNzbCIKKyMgdS1ib290IHdpbGwgY29tcGlsZSBpdHMgb3duIHRvb2xzIGR1cmluZyB0aGUgYnVpbGQsIHdpdGggc3BlY2lmaWMKKyMgY29uZmlndXJhdGlvbnMgKGFrYSB3aGVuIENPTkZJR19GSVRfU0lHTkFUVVJFIGlzIGVuYWJsZWQpIG9wZW5zc2wgaXMgbmVlZGVkIGFzCisjIGEgaG9zdCBidWlsZCBkZXBlbmRlbmN5LgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICIsLG9wZW5zc2wtbmF0aXZlIgorCisjIEFsbG93IHNldHRpbmcgYW4gYWRkaXRpb25hbCB2ZXJzaW9uIHN0cmluZyB0aGF0IHdpbGwgYmUgcGlja2VkIHVwIGJ5IHRoZQorIyB1LWJvb3QgYnVpbGQgc3lzdGVtIGFuZCBhcHBlbmRlZCB0byB0aGUgdS1ib290IHZlcnNpb24uICBJZiB0aGUgLnNjbXZlcnNpb24KKyMgZmlsZSBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbi4KK1VCT09UX0xPQ0FMVkVSU0lPTiA/PSAiIgorCisjIFNvbWUgdmVyc2lvbnMgb2YgdS1ib290IHVzZSAuYmluIGFuZCBvdGhlcnMgdXNlIC5pbWcuICBCeSBkZWZhdWx0IHVzZSAuYmluCisjIGJ1dCBlbmFibGUgaW5kaXZpZHVhbCByZWNpcGVzIHRvIGNoYW5nZSB0aGlzIHZhbHVlLgorVUJPT1RfU1VGRklYID8/PSAiYmluIgorVUJPT1RfSU1BR0UgPz0gInUtYm9vdC0ke01BQ0hJTkV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSIKK1VCT09UX0JJTkFSWSA/PSAidS1ib290LiR7VUJPT1RfU1VGRklYfSIKK1VCT09UX1NZTUxJTksgPz0gInUtYm9vdC0ke01BQ0hJTkV9LiR7VUJPT1RfU1VGRklYfSIKK1VCT09UX01BS0VfVEFSR0VUID89ICJhbGwiCisKKyMgT3V0cHV0IHRoZSBFTEYgZ2VuZXJhdGVkLiBTb21lIHBsYXRmb3JtcyBjYW4gdXNlIHRoZSBFTEYgZmlsZSBhbmQgZGlyZWN0bHkKKyMgbG9hZCBpdCAoSlRBRyBib290aW5nLCBRRU1VKSBhZGRpdGlvbmFsbHkgdGhlIEVMRiBjYW4gYmUgdXNlZCBmb3IgZGVidWdnaW5nCisjIHB1cnBvc2VzLgorVUJPT1RfRUxGID89ICIiCitVQk9PVF9FTEZfU1VGRklYID89ICJlbGYiCitVQk9PVF9FTEZfSU1BR0UgPz0gInUtYm9vdC0ke01BQ0hJTkV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0iCitVQk9PVF9FTEZfQklOQVJZID89ICJ1LWJvb3QuJHtVQk9PVF9FTEZfU1VGRklYfSIKK1VCT09UX0VMRl9TWU1MSU5LID89ICJ1LWJvb3QtJHtNQUNISU5FfS4ke1VCT09UX0VMRl9TVUZGSVh9IgorCisjIFNvbWUgdmVyc2lvbnMgb2YgdS1ib290IGJ1aWxkIGFuIFNQTCAoU2Vjb25kIFByb2dyYW0gTG9hZGVyKSBpbWFnZSB0aGF0CisjIHNob3VsZCBiZSBwYWNrYWdlZCBhbG9uZyB3aXRoIHRoZSB1LWJvb3QgYmluYXJ5IGFzIHdlbGwgYXMgcGxhY2VkIGluIHRoZQorIyBkZXBsb3kgZGlyZWN0b3J5LiAgRm9yIHRob3NlIHZlcnNpb25zIHRoZXkgY2FuIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcworIyB0byBhbGxvdyBwYWNrYWdpbmcgdGhlIFNQTC4KK1NQTF9CSU5BUlkgPz0gIiIKK1NQTF9JTUFHRSA/PSAiJHtTUExfQklOQVJZfS0ke01BQ0hJTkV9LSR7UFZ9LSR7UFJ9IgorU1BMX1NZTUxJTksgPz0gIiR7U1BMX0JJTkFSWX0tJHtNQUNISU5FfSIKKworIyBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBhIHNjcmlwdCBjYW4gYmUgaW5zdGFsbGVkIGFsb25nc2lkZQorIyB1LWJvb3QgdG8gYmUgdXNlZCBhdXRvbWF0aWNhbGx5IG9uIGJvb3QuICBUaGlzIGZpbGUsIHR5cGljYWxseSAndUVudi50eHQnCisjIG9yICdib290LnNjcicsIHNob3VsZCBiZSBwYWNrYWdlZCBhbG9uZyB3aXRoIHUtYm9vdCBhcyB3ZWxsIGFzIHBsYWNlZCBpbiB0aGUKKyMgZGVwbG95IGRpcmVjdG9yeS4gIE1hY2hpbmUgY29uZmlndXJhdGlvbnMgbmVlZGluZyBvbmUgb2YgdGhlc2UgZmlsZXMgc2hvdWxkCisjIGluY2x1ZGUgaXQgaW4gdGhlIFNSQ19VUkkgYW5kIHNldCB0aGUgVUJPT1RfRU5WIHBhcmFtZXRlci4KK1VCT09UX0VOVl9TVUZGSVggPz0gInR4dCIKK1VCT09UX0VOViA/PSAiIgorVUJPT1RfRU5WX0JJTkFSWSA/PSAiJHtVQk9PVF9FTlZ9LiR7VUJPT1RfRU5WX1NVRkZJWH0iCitVQk9PVF9FTlZfSU1BR0UgPz0gIiR7VUJPT1RfRU5WfS0ke01BQ0hJTkV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRU5WX1NVRkZJWH0iCitVQk9PVF9FTlZfU1lNTElOSyA/PSAiJHtVQk9PVF9FTlZ9LSR7TUFDSElORX0uJHtVQk9PVF9FTlZfU1VGRklYfSIKKworZG9fY29tcGlsZSAoKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJ2xkLWlzLWdvbGQnLCAnJywgZCl9IiA9ICJsZC1pcy1nb2xkIiBdIDsgdGhlbgorCQlzZWQgLWkgJ3MvJChDUk9TU19DT01QSUxFKWxkJC8kKENST1NTX0NPTVBJTEUpbGQuYmZkL2cnIGNvbmZpZy5taworCWZpCisKKwl1bnNldCBMREZMQUdTCisJdW5zZXQgQ0ZMQUdTCisJdW5zZXQgQ1BQRkxBR1MKKworCWlmIFsgISAtZSAke0J9Ly5zY212ZXJzaW9uIC1hICEgLWUgJHtTfS8uc2NtdmVyc2lvbiBdCisJdGhlbgorCQllY2hvICR7VUJPT1RfTE9DQUxWRVJTSU9OfSA+ICR7Qn0vLnNjbXZlcnNpb24KKwkJZWNobyAke1VCT09UX0xPQ0FMVkVSU0lPTn0gPiAke1N9Ly5zY212ZXJzaW9uCisJZmkKKyAgICAKKyAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgZm9yIHR5cGUgIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgb2VfcnVubWFrZSBPPSR7Y29uZmlnfSAke2NvbmZpZ30KKyAgICAgICAgICAgICAgICAgICAgb2VfcnVubWFrZSBPPSR7Y29uZmlnfSAke1VCT09UX01BS0VfVEFSR0VUfQorICAgICAgICAgICAgICAgICAgICBjcCAgJHtTfS8ke2NvbmZpZ30vJHtVQk9PVF9CSU5BUll9ICAke1N9LyR7Y29uZmlnfS91LWJvb3QtJHt0eXBlfS4ke1VCT09UX1NVRkZJWH0KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgZG9uZQorICAgICAgICB1bnNldCAgaQorICAgIGVsc2UKKyAgICAgICAgb2VfcnVubWFrZSAke1VCT09UX01BQ0hJTkV9CisgICAgICAgIG9lX3J1bm1ha2UgJHtVQk9PVF9NQUtFX1RBUkdFVH0KKyAgICBmaQorCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfS9ib290CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9ICR7RH0vYm9vdC91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgIGRvbmUKKyAgICAgICAgdW5zZXQgIGkKKyAgICBlbHNlCisgICAgICAgIGluc3RhbGwgLWQgJHtEfS9ib290CisgICAgICAgIGluc3RhbGwgJHtTfS8ke1VCT09UX0JJTkFSWX0gJHtEfS9ib290LyR7VUJPT1RfSU1BR0V9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CisgICAgZmkKKworICAgIGlmIFsgIngke1VCT09UX0VMRn0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vJHtVQk9PVF9FTEZ9ICR7RH0vYm9vdC91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7RH0vYm9vdC8ke1VCT09UX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgagorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9FTEZ9ICR7RH0vYm9vdC8ke1VCT09UX0VMRl9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtEfS9ib290LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAtZSAke1dPUktESVJ9L2Z3X2Vudi5jb25maWcgXSA7IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2Z3X2Vudi5jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vZndfZW52LmNvbmZpZworICAgIGZpCisKKyAgICBpZiBbICJ4JHtTUExfQklOQVJZfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdICAgCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vJHtTUExfQklOQVJZfSAke0R9L2Jvb3QvJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0R9L2Jvb3QvJHtTUExfQklOQVJZfQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICB1bnNldCAgagorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgIGkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7U1BMX0JJTkFSWX0gJHtEfS9ib290LyR7U1BMX0lNQUdFfQorICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfSAke0R9L2Jvb3QvJHtTUExfQklOQVJZfQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTlZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaW5zdGFsbCAke1dPUktESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0gJHtEfS9ib290LyR7VUJPT1RfRU5WX0lNQUdFfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTlZfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0VOVl9CSU5BUll9CisgICAgZmkKK30KKworRklMRVNfJHtQTn0gPSAiL2Jvb3QgJHtzeXNjb25mZGlyfSIKKyMgRW5zdXJlIHRoZSBzcGxpdCBkZWJ1ZyBwYXJ0IG9mIGFueSBlbGYgZmlsZXMgYXJlIHB1dCBpbnRvIGRiZworRklMRVNfJHtQTn0tZGJnICs9ICIvYm9vdC8uZGVidWciCisKK2RvX2RlcGxveSAoKSB7CisgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0RFUExPWURJUn0KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS91LWJvb3QtJHt0eXBlfS4ke1VCT09UX1NVRkZJWH0gJHtERVBMT1lESVJ9L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICBjZCAke0RFUExPWURJUn0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke1VCT09UX1NZTUxJTkt9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke1VCT09UX0JJTkFSWX0KKyAgICAgICAgICAgICAgICBmaSAKKyAgICAgICAgICAgIGRvbmUgCisgICAgICAgICAgICB1bnNldCAgagorICAgICAgICBkb25lCisgICAgICAgIHVuc2V0ICBpCisgICAgZWxzZQorICAgICAgICBpbnN0YWxsIC1kICR7REVQTE9ZRElSfQorICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0lNQUdFfQorICAgICAgICBjZCAke0RFUExPWURJUn0KKyAgICAgICAgcm0gLWYgJHtVQk9PVF9CSU5BUll9ICR7VUJPT1RfU1lNTElOS30KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfSU1BR0V9ICR7VUJPT1RfU1lNTElOS30KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfSU1BR0V9ICR7VUJPT1RfQklOQVJZfQorICAgZmkKKworICAgIGlmIFsgIngke1VCT09UX0VMRn0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vJHtVQk9PVF9FTEZ9ICR7REVQTE9ZRElSfS91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfQklOQVJZfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX1NZTUxJTkt9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9TWU1MSU5LfQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICB1bnNldCBqCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCBpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke1VCT09UX0VMRn0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0lNQUdFfQorICAgICAgICAgICAgbG4gLXNmICR7VUJPT1RfRUxGX0lNQUdFfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfQklOQVJZfQorICAgICAgICAgICAgbG4gLXNmICR7VUJPT1RfRUxGX0lNQUdFfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfU1lNTElOS30KKyAgICAgICAgZmkKKyAgICBmaQorCisKKyAgICAgaWYgWyAieCR7U1BMX0JJTkFSWX0iICE9ICJ4IiBdCisgICAgIHRoZW4KKyAgICAgICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdICAgCisgICAgICAgICB0aGVuCisgICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0RFUExPWURJUn0vJHtTUExfQklOQVJZfQorICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0RFUExPWURJUn0vJHtTUExfU1lNTElOS30tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0RFUExPWURJUn0vJHtTUExfU1lNTElOS30KKyAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgdW5zZXQgIGkKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtTUExfQklOQVJZfSAke0RFUExPWURJUn0vJHtTUExfSU1BR0V9CisgICAgICAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9CisgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfSAke0RFUExPWURJUn0vJHtTUExfQklOQVJZfQorICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9CisgICAgICAgICBmaQorICAgICBmaQorCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTlZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaW5zdGFsbCAke1dPUktESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0lNQUdFfQorICAgICAgICBybSAtZiAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfU1lNTElOS30KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfQklOQVJZfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTlZfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9TWU1MSU5LfQorICAgIGZpCit9CisKK2FkZHRhc2sgZGVwbG95IGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19jb21waWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QvMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LzAwMDEtdS1ib290LW1wYzg1eHgtdS1ib290LS5sZHMtcmVtb3ZlLV9HTE9CQUxfT0ZGU0VUX1RBQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJjZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LzAwMDEtdS1ib290LW1wYzg1eHgtdS1ib290LS5sZHMtcmVtb3ZlLV9HTE9CQUxfT0ZGU0VUX1RBQi5wYXRjaApAQCAtMCwwICsxLDE4NCBAQAorRnJvbSA5MjU5OGUxNTE1YjJlYzM4NTFhZjFmMDY0MDc1ZDA0NTdmMDEyNzJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CitEYXRlOiBNb24sIDkgRmViIDIwMTUgMTg6MzM6NTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcG93ZXJwYy9jcHUvKi91LWJvb3QqLmxkczogcmVtb3ZlIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXworIGRlZmluaXRpb24KK09yZ2FuaXphdGlvbjogTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK0luIGJpbnV0aWxzLTIuMjUsIHRoZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8gc3ltYm9scyBkZWZpbmVkIGJ5IFBST1ZJREUgaW4KK3UtYm9vdC5sZHMgb3ZlcnJpZGVzIHRoZSBsaW5rZXIgYnVpbHQtaW4gc3ltYm9scworKGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0L2dpdHdlYi5jZ2k/cD1iaW51dGlscy1nZGIuZ2l0O2E9Y29tbWl0ZGlmZjtoPWI4OTMzOTdhNGIxMzE2NjEwZjQ5ODE5MzQ0ODE3NzE1ZTQzMDVkZTkpLAorc28gdGhlIGxpbmtlciBpcyB0cmVhdGluZyBfR0xPQkFMX09GRlNFVF9UQUJMRV8gYXMgYSBkZWZpbml0aW9uIGludG8gdGhlIC5yZWxvYyBzZWN0aW9uLgorCitUbyBhbGlnbiB3aXRoIHRoZSBjaGFuZ2Ugb2YgYmludXRpbHMtMi4yNSwgdGhlIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBzeW1ib2wKK3Nob3VsZCBub3QgYmUgZGVmaW5lZCBpbiBzZWN0aW9ucywgYW5kIHRoZSBzeW1ib2xzIGluIGxpbmtlciBnZW5lcmF0ZWQgLmdvdAorc2VjdGlvbiBzaG91bGQgYmUgdXNlZChodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMDgtMDkvbXNnMDAxMjIuaHRtbCkuCisKK0ZpeGVkIHRoZSBmb2xsb3dpbmcgYnVpbGQgZXJyb3JzIHdpdGggYmludXRpbHMtMi4yNToKK3wgcG93ZXJwYy1wb2t5LWxpbnV4LWdudXNwZS1sZC5iZmQ6IF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBub3QgZGVmaW5lZCBpbiBsaW5rZXIgY3JlYXRlZCAuZ290CisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcyAgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC1zcGwubGRzICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzICAgICAgICAgICB8IDEgLQorIDEyIGZpbGVzIGNoYW5nZWQsIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcworaW5kZXggOTY1OGIyMS4uYjMyZjc0ZSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcworQEAgLTI0LDcgKzI0LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgICAqKC5maXh1cCkKK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcworaW5kZXggNzE5ODQ2NS4uNmE1MzU3MSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMKK0BAIC0zMyw3ICszMyw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzCitpbmRleCBjZDllMjNmLi5hYTgwZDNkIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzCitAQCAtMjgsNyArMjgsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcworaW5kZXggNTBjYmY4NS4uNDY5ZmMyOSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcworQEAgLTI3LDcgKzI3LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcworaW5kZXggNzc0NzcyYi4uNDEwMWVhZiAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC1zcGwubGRzCitAQCAtMjQsNyArMjQsNiBAQCBTRUNUSU9OUworIAkJX0dPVDJfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZ290MikpCisgCQlLRUVQKCooLmdvdCkpCistCQlQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAJfQorIAlfX2dvdDJfZW50cmllcyA9ICgoX0dMT0JBTF9PRkZTRVRfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PiAyKSAtIDE7CisgCitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcworaW5kZXggM2MxNzdmYS4uZGJkOGJiZSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcworQEAgLTI2LDcgKzI2LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzCitpbmRleCBmOTMzYjIxLi4wMzk5ZjkzIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcworQEAgLTQ0LDcgKzQ0LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMKK2luZGV4IGI4M2M1NTMuLmYwNDQ1NjQgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMKK0BAIC0yMiw3ICsyMiw2IEBAIFNFQ1RJT05TCisgCQlfR09UMl9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5nb3QyKSkKKyAJCUtFRVAoKiguZ290KSkKKy0JCVBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworIAkJX0ZJWFVQX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmZpeHVwKSkKKyAJfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcworaW5kZXggNWFlN2IzZS4uODg5YTRjMiAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzCitAQCAtMjksNyArMjksNiBAQCBTRUNUSU9OUworIAkJX0dPVDJfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZ290MikpCisgCQlLRUVQKCooLmdvdCkpCistCQlQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAJCV9GSVhVUF9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5maXh1cCkpCisgCX0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCitpbmRleCAyY2YwYjI1Li5mMTVlYWYzIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCitAQCAtNTAsNyArNTAsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcworaW5kZXggNTg0NjdjMi4uNmM0OGY0MCAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcworQEAgLTMyLDcgKzMyLDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzCitpbmRleCAxOTgwNTA4Li41NWRkNGUxIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcworQEAgLTQ2LDcgKzQ2LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorLS0gCisyLjQuNgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3RfMjAxNS4wNy5iYiBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdF8yMDE1LjA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDZjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3RfMjAxNS4wNy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHUtYm9vdC5pbmMKKworREVQRU5EUyArPSAiZHRjLW5hdGl2ZSIKKworIyBUaGlzIHJldmlzaW9uIGNvcnJlc3BvbmRzIHRvIHRoZSB0YWcgInYyMDE1LjA3IgorIyBXZSB1c2UgdGhlIHJldmlzaW9uIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB0byBmZXRjaCBpdCBmcm9tIHRoZQorIyByZXBvIGR1cmluZyBwYXJzZQorU1JDUkVWID0gIjMzNzExYmRkNGE0ZGNlOTQyZmI1YWU4NWE2ODg5OWE4MzU3YmRkOTQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXUtYm9vdC1tcGM4NXh4LXUtYm9vdC0ubGRzLXJlbW92ZS1fR0xPQkFMX09GRlNFVF9UQUIucGF0Y2giCisKK1BWID0gInYyMDE1LjA3K2dpdCR7U1JDUFZ9IgorCitFWFRSQV9PRU1BS0VfYXBwZW5kID0gIiBLQ0ZMQUdTPS1mZ251ODktaW5saW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE0NGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJJbml0c2NyaXB0IGZvciBlbmFibGluZyBVU0IgZ2FkZ2V0IEV0aGVybmV0IgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9DT1BZSU5HLkdQTDttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImZpbGU6Ly91c2ItZ2V0aGVyIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMIgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorICAgIGluc3RhbGwgdXNiLWdldGhlciAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZCBhbGxhcmNoCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ1c2ItZ2V0aGVyIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAyMCAwIDEgNiAuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvQ09QWUlORy5HUEwgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC9DT1BZSU5HLkdQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvQ09QWUlORy5HUEwKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvdXNiLWdldGhlciBiL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L3VzYi1nZXRoZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTgwYTBiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L3VzYi1nZXRoZXIKQEAgLTAsMCArMSwyMyBAQAorIyEgL2Jpbi9zaAorIworIyB1c2ItZXRoZXIgCVN0YXJ0IHVwIHRoZSBnYWRnZXQgdXNiIGV0aGVybmV0IGludGVyZmFjZS4KKyMKKworY2FzZSAiJDEiIGluCisJc3RhcnR8IiIpCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJJbml0aWFsaXppbmcgZ19ldGhlciBnYWRnZXQuLi4iCisJCW1vZHByb2JlIGdfZXRoZXIKKwkJaWZ1cCB1c2IwCisJCTs7CisJc3RvcCkKKwkJdGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkRpc2FibGluZyBnX2V0aGVyLi4uIgorCQlpZmRvd24gdXNiMAorCQlybW1vZCBnX2V0aGVyCisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6IHVzYi1ldGhlciB7c3RhcnR8c3RvcH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzLTAwOC9pY29udi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMtMDA4L2ljb252LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NTU1NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzLTAwOC9pY29udi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIGljb252IHN1cHBvcnQgdXNpbmcgYXV0b3Rvb2xzCit1Y2xpYmMgZG9lcyBub3QgaGF2ZSBpY29udiBpbXBsZW1lbnRhdGlvbiBpbnNpZGUgbGliYyBsaWtlIGdsaWJjLCB0aGVyZWZvcmUKK3RoZSBleGlzdGluZyBjaGVja3Mgd2VyZSBub3Qgc3VmZmljaWVudCwgaXQgd29ya2VkIGZvciBnbGliYyBidXQgbm90IGZvcgordWNsaWJjLiBUaGUgbmV3IHBhdGNoIHBvcnRhYmx5IGRldGVjdHMgdGhlIGljb252IHN1cHBvcnQgYW5kIGFkZHMgdGhlCitsaWJpY29udiB0byBsaW5rZXIgY21kbGluZQorCitUaGlzIHBhdGNoIHNob3VsZCBiZSBzdWJtaXR0ZWQgdXBzdHJlYW0gdG9vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogdXNidXRpbHMtMDA4L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwOC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHVzYnV0aWxzLTAwOC9jb25maWd1cmUuYWMKK0BAIC0xMCw3ICsxMCw5IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX1NZU19MQVJHRUZJTEUKKyAKKyBBQ19DSEVDS19IRUFERVJTKFtieXRlc3dhcC5oXSkKKy1BQ19DSEVDS19GVU5DUyhbbmxfbGFuZ2luZm8gaWNvbnZdKQorKworK0FNX0dOVV9HRVRURVhUCisrQU1fSUNPTlYKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJVU0IsIGxpYnVzYi0xLjAgPj0gMS4wLjApCisgCitJbmRleDogdXNidXRpbHMtMDA4L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXNidXRpbHMtMDA4Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyB1c2J1dGlscy0wMDgvTWFrZWZpbGUuYW0KK0BAIC0yOSw3ICsyOSw4IEBAIGxzdXNiX0NQUEZMQUdTID0gXAorIAorIGxzdXNiX0xEQUREID0gXAorIAkkKExJQlVTQl9MSUJTKSBcCistCSQoVURFVl9MSUJTKQorKwkkKFVERVZfTElCUykgXAorKwkkKExJQklDT05WKQorIAorIG1hbl9NQU5TID0gXAorIAlsc3VzYi44CVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWZkYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ZpeCBOVUxMIHBvaW50ZXIgY3Jhc2guCisKK0JlZm9yZSB1c2UgdXNiYnVzbGlzdCwgd2Ugc2hvdWxkIGNoZWNrIGlmIGl0IGlzIHZhbGlkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxzdXNiLXQuYyB8ICAgIDQgKysrKworIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbHN1c2ItdC5jIGIvbHN1c2ItdC5jCitpbmRleCBmNjA0MTU1Li41ODNhNDZhIDEwMDY0NAorLS0tIGEvbHN1c2ItdC5jCisrKysgYi9sc3VzYi10LmMKK0BAIC02NDMsNiArNjQzLDEwIEBAIHN0YXRpYyB2b2lkIHNvcnRfYnVzc2VzKHZvaWQpCisgCS8qIG5lZWQgdG8gcmV2ZXJzZSBzb3J0IGJ1cyBudW1iZXJzICovCisgCXN0cnVjdCB1c2JidXNub2RlICp0LCAqcCwgKipwcDsKKyAJaW50IHN3YXBwZWQ7CisrCisrCWlmICghdXNiYnVzbGlzdCkKKysJCXJldHVybjsKKysKKyAJZG8geworIAkJcCA9IHVzYmJ1c2xpc3Q7CisgCQlwcCA9ICZ1c2JidXNsaXN0OworLS0gCisxLjcuNC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvaWNvbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL2ljb252LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTczMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL2ljb252LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1RoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkZXRlY3RpbmcgaWNvbnYgc3VwcG9ydCB1c2luZyBhdXRvdG9vbHMKK3VjbGliYyBkb2VzIG5vdCBoYXZlIGljb252IGltcGxlbWVudGF0aW9uIGluc2lkZSBsaWJjIGxpa2UgZ2xpYmMsIHRoZXJlZm9yZQordGhlIGV4aXN0aW5nIGNoZWNrcyB3ZXJlIG5vdCBzdWZmaWNpZW50LCBpdCB3b3JrZWQgZm9yIGdsaWJjIGJ1dCBub3QgZm9yCit1Y2xpYmMuIFRoZSBuZXcgcGF0Y2ggcG9ydGFibHkgZGV0ZWN0cyB0aGUgaWNvbnYgc3VwcG9ydCBhbmQgYWRkcyB0aGUKK2xpYmljb252IHRvIGxpbmtlciBjbWRsaW5lCisKK1RoaXMgcGF0Y2ggc2hvdWxkIGJlIHN1Ym1pdHRlZCB1cHN0cmVhbSB0b28KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiB1c2J1dGlscy0wMDcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXNidXRpbHMtMDA3Lm9yaWcvY29uZmlndXJlLmFjCisrKysgdXNidXRpbHMtMDA3L2NvbmZpZ3VyZS5hYworQEAgLTEwLDcgKzEwLDkgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfU1lTX0xBUkdFRklMRQorIAorIEFDX0NIRUNLX0hFQURFUlMoW2J5dGVzd2FwLmhdKQorLUFDX0NIRUNLX0ZVTkNTKFtubF9sYW5naW5mbyBpY29udl0pCisrCisrQU1fR05VX0dFVFRFWFQKKytBTV9JQ09OVgorIAorIEFDX0FSR19FTkFCTEUoemxpYiwKKyAJQVNfSEVMUF9TVFJJTkcoLS1kaXNhYmxlLXpsaWIsZGlzYWJsZSBzdXBwb3J0IGZvciB6bGliKSkKK0luZGV4OiB1c2J1dGlscy0wMDcvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1c2J1dGlscy0wMDcub3JpZy9NYWtlZmlsZS5hbQorKysrIHVzYnV0aWxzLTAwNy9NYWtlZmlsZS5hbQorQEAgLTI3LDcgKzI3LDcgQEAgbHN1c2JfQ1BQRkxBR1MgPSBcCisgCS1EREFUQURJUj1cIiQoZGF0YWRpcilcIgorIAorIGxzdXNiX0xEQUREID0gXAorLQkkKExJQlVTQl9MSUJTKQorKwkkKExJQlVTQl9MSUJTKSAkKExJQklDT05WKQorIAorIGlmIEhBVkVfWkxJQgorIGxzdXNiX0NQUEZMQUdTICs9IC1ESEFWRV9MSUJaCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjI0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDMzM2Q1ZmJiYzAzNDgxZjFhYTIyMmJkNjhjMjYwOWRiMTY4YWUzZTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMjYgSnVsIDIwMTIgMTA6Mzc6MzIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNiLWRldmljZXM6IGF2b2lkIGRlcGVuZGVuY3kgb24gYmFzaAorCitCeSB2aXJ0dWUgb2YgaGF2aW5nICMhL2Jpbi9iYXNoIHRoaXMgc2NyaXB0IGRlY2xhcmVkIHRoYXQgaXQgcmVxdWlyZXMKK2Jhc2gsIGhvd2V2ZXIgbWFudWFsIGV4YW1pbmF0aW9uLCBjaGVja2Jhc2hpc21zIGFuZCB0ZXN0cyB3aXRoIGRhc2gKK2FuZCBidXN5Ym94IHNob3cgdGhhdCBpdCBkb2Vzbid0IGNvbnRhaW4gYW55IGJhc2hpc21zLCBzbyBjaGFuZ2UgdGhlCitoZWFkZXIgdG8gYXZvaWQgdGhlIGRlcGVuZGVuY3kuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHVzYi1kZXZpY2VzIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdXNiLWRldmljZXMgYi91c2ItZGV2aWNlcworaW5kZXggYjIwNTJlMi4uMTRhNTM1OCAxMDA3NTUKKy0tLSBhL3VzYi1kZXZpY2VzCisrKysgYi91c2ItZGV2aWNlcworQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIENvcHlyaWdodDogMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICMgICAgICAgICAgICAyMDA5IFJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDcuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTNiMmJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDcuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJIb3N0IHNpZGUgVVNCIGNvbnNvbGUgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIGxzdXNiIHV0aWxpdHkgZm9yIGluc3BlY3RpbmcgdGhlIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBVU0IgYnVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtdXNiLm9yZyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJsaWJ1c2IgemxpYiB2aXJ0dWFsL2xpYmljb252IgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvdXNiL3VzYnV0aWxzL3VzYnV0aWxzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pY29udi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmU2YzQyMjk0YmU1Yzk0MGYyMDgxOTBkMzQ3OWQ1MGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTY1YzIzNGNhZGY3YzgxYjZiMTU2N2M0NDBlM2I5YjMxYjQ0ZjUxYzI3ZGYzZTQ1NzQxYjg4ODQ4ZDhiMzdkMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBXZSBvbmx5IG5lZWQgdGhlIGNvbXByZXNzZWQgY29weSwgcmVtb3ZlIHRoZSB1bmNvbXByZXNzZWQgdmVyc2lvbgorCXJtIC1mICR7RH0ke2RhdGFkaXJ9L3VzYi5pZHMKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LWlkcyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9wa2djb25maWciCitGSUxFU18ke1BOfS1pZHMgPSAiJHtkYXRhZGlyfS91c2IqIgorCitSREVQRU5EU18ke1BOfSA9ICIke1BOfS1pZHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwOC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMmQ4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwOC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkhvc3Qgc2lkZSBVU0IgY29uc29sZSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJDb250YWlucyB0aGUgbHN1c2IgdXRpbGl0eSBmb3IgaW5zcGVjdGluZyB0aGUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gdGhlIFVTQiBidXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saW51eC11c2Iub3JnIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gImxpYnVzYiB6bGliIHZpcnR1YWwvbGliaWNvbnYgc3lzdGVtZCIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3VzYi91c2J1dGlscy91c2J1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaWNvbnYucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImNiMjAxNDhjMmU3ODQ1NzdlOTI0YTdiNGM1NjBjOGZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZkNWYxNmMyOTYxZGYzN2UyMmU0OTJjNzM2YTNlMTYyYThmZGUyNDQ4MGYyM2E0MGQ4NWY3OWFmODBkM2ZlOTUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBUaGlzIHZlcnNpb24gb2YgdXNidXRpbHMgcmVsaWVzIG9uIHRoZSB1ZGV2IGZyb20gc3lzdGVtZCwgc28gdW5sZXNzIAorIyB3ZSBjYW4gZGVjb3VwbGUgdWRldiBmcm9tIHN5c3RlbSwgd2UgcmVxdWlyZSBzeXN0ZW1kIGZvciBub3cuCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAic3lzdGVtZCIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZyIKKworUkRFUEVORFNfJHtQTn0gPSAibGlidWRldiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImxpYmJvb3N0LXN5c3RlbSBsaWJib29zdC10aHJlYWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5ZTJhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL1VwZGF0ZS14ODZlbXUtZnJvbS1YLm9yZy5wYXRjaApAQCAtMCwwICsxLDIxNzY2IEBACitGcm9tIDFhNDEwYWU1OGYyOGVlYWIzMmZhODc2MjZjZmQ1YTY2M2JhMzNjNTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCZXJuaGFyZCBXYWxsZSA8YmVybmhhcmRAYndhbGxlLmRlPgorRGF0ZTogVHVlLCAxMyBNYXkgMjAxNCAyMzo0MDo1NiArMDIwMAorU3ViamVjdDogW1BBVENIIDIvMl0gVXBkYXRlIHg4NmVtdSBmcm9tIFgub3JnCisKK1RoaXMgY29tbWl0IHVwZGF0ZXMgdGhlIHg4NmVtdSBjb3B5IGZyb20gWC5vcmcgdGFyYmFsbAorKGZ0cDovL21pcnJvci5jc2NsdWIudXdhdGVybG9vLmNhL3gub3JnL2N1cnJlbnQvc3JjL3hzZXJ2ZXIveG9yZy1zZXJ2ZXItMS4xMi4yLnRhci5iejIpLgorCitUaGlzIGZpeGVzIGEgY29tcGF0aWJpbGl0eSBpc3N1ZSBiZXR3ZWVuIHY4NmQgYW5kIFNlYUJJT1MgVkdBIEJJT1Mgd2hlcmUKK3RoZSBsZWFsIGluc3RydWN0aW9uIGlzIG5vdCBkZWNvZGVkIHByb3Blcmx5LiBSZWFkIHRoZQoraHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5lbXVsYXRvcnMucWVtdS8yNzE4MDYgdGhyZWFkIGZvciBtb3JlCitkZXRhaWxzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFdhbGxlIDxiZXJuaGFyZEBid2FsbGUuZGU+CistLS0KKyBsaWJzL3g4NmVtdS9MSUNFTlNFICAgICAgICAgICAgICAgfCAgIDE3IC0KKyBsaWJzL3g4NmVtdS9kZWJ1Zy5jICAgICAgICAgICAgICAgfCAgNTA5ICsrKy0tLQorIGxpYnMveDg2ZW11L2RlY29kZS5jICAgICAgICAgICAgICB8IDEwNjkgKysrKysrLS0tLS0tCisgbGlicy94ODZlbXUvZnB1LmMgICAgICAgICAgICAgICAgIHwgIDQ2MyArKystLS0KKyBsaWJzL3g4NmVtdS9vcHMuYyAgICAgICAgICAgICAgICAgfCAyOTQwICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQorIGxpYnMveDg2ZW11L29wczIuYyAgICAgICAgICAgICAgICB8IDE5MjkgKysrKysrKysrKystLS0tLS0tLS0tLQorIGxpYnMveDg2ZW11L3ByaW1fb3BzLmMgICAgICAgICAgICB8IDMyMTkgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQorIGxpYnMveDg2ZW11L3N5cy5jICAgICAgICAgICAgICAgICB8ICA1ODMgKysrLS0tLQorIGxpYnMveDg2ZW11L3ZhbGlkYXRlLmMgICAgICAgICAgICB8ICAgNTIgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUuaCAgICAgICAgICAgICAgfCAgIDc1ICstCisgbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmggICAgICAgIHwgIDE2MyArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaCAgICAgICB8ICAgNTcgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvZnB1LmggICAgICAgICAgfCAgIDIzICstCisgbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmggICAgIHwgICA0NCArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9vcHMuaCAgICAgICAgICB8ICAgIDYgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaCAgICAgfCAgMjUxICsrLQorIGxpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oICAgICB8ICAxODggKy0tCisgbGlicy94ODZlbXUveDg2ZW11L3ByaW1feDg2X2djYy5oIHwgICA3NyArCisgbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaCAgICAgICAgIHwgIDEwMSArLQorIGxpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oICAgICAgICB8ICAgNTAgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oICAgICAgfCAgIDM0ICstCisgMjEgZmlsZXMgY2hhbmdlZCwgNjM3OSBpbnNlcnRpb25zKCspLCA1NDcxIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJzL3g4NmVtdS9MSUNFTlNFCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaAorCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvTElDRU5TRSBiL2xpYnMveDg2ZW11L0xJQ0VOU0UKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggYTNlZGU0YS4uMDAwMDAwMAorLS0tIGEvbGlicy94ODZlbXUvTElDRU5TRQorKysrIC9kZXYvbnVsbAorQEAgLTEsMTcgKzAsMCBAQAorLSAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNlIGluZm9ybWF0aW9uCistICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKy0KKy1UaGUgeDg2ZW11IGxpYnJhcnkgaXMgdW5kZXIgYSBCU0Qgc3R5bGUgbGljZW5zZSwgY29tYXB0aWJsZQorLXdpdGggdGhlIFhGcmVlODYgYW5kIFggbGljZW5zZXMgdXNlZCBieSBYRnJlZTg2LiBUaGUKKy1vcmlnaW5hbCB4ODZlbXUgbGlicmFyaWVzIHdlcmUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworLUxpY2Vuc2UuIER1ZSB0byBsaWNlbnNlIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gdGhlIEdQTAorLWFuZCB0aGUgWEZyZWU4NiBsaWNlbnNlLCB0aGUgb3JpZ2luYWwgYXV0aG9ycyBvZiB0aGUgY29kZQorLWRlY2lkZWQgdG8gYWxsb3cgYSBsaWNlbnNlIGNoYW5nZS4gSWYgeW91IGhhdmUgc3VibWl0dGVkCistY29kZSB0byB0aGUgb3JpZ2luYWwgeDg2ZW11IHByb2plY3QsIGFuZCB5b3UgZG9uJ3QgYWdyZWUKKy13aXRoIHRoZSBsaWNlbnNlIGNoYW5nZSwgcGxlYXNlIGNvbnRhY3QgdXMgYW5kIGxldCB5b3UKKy1rbm93LiBZb3VyIGNvZGUgd2lsbCBiZSByZW1vdmVkIHRvIGNvbXBseSB3aXRoIHlvdXIgd2lzaGVzLgorLQorLUlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgYWJvdXQgdGhpcywgcGxlYXNlIHNlbmQgZW1haWwgdG8KKy14ODZlbXVAbGludXhsYWJzLmNvbSBvciBLZW5kYWxsQkBzY2l0ZWNoc29mdC5jb20gZm9yCistY2xhcmlmaWNhdGlvbi4KKy0KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9kZWJ1Zy5jIGIvbGlicy94ODZlbXUvZGVidWcuYworaW5kZXggNmZkN2YxMS4uMWE4ZDFkNiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L2RlYnVnLmMKKysrKyBiL2xpYnMveDg2ZW11L2RlYnVnLmMKK0BAIC0zOCw2ICszOCw4IEBACisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKyAjaW5jbHVkZSAieDg2ZW11L3g4NmVtdWkuaCIKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2lmbmRlZiBOT19TWVNfSEVBREVSUworICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitAQCAtNDcsNDYgKzQ5LDUxIEBACisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIHZvaWQgICAgIHByaW50X2VuY29kZWRfYnl0ZXMgKHUxNiBzLCB1MTYgbyk7Cistc3RhdGljIHZvaWQgICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24gKHZvaWQpOworLXN0YXRpYyBpbnQgICAgICBwYXJzZV9saW5lIChjaGFyICpzLCBpbnQgKnBzLCBpbnQgKm4pOworLSAgCisrc3RhdGljIHZvaWQgcHJpbnRfZW5jb2RlZF9ieXRlcyh1MTYgcywgdTE2IG8pOworK3N0YXRpYyB2b2lkIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24odm9pZCk7Cisrc3RhdGljIGludCBwYXJzZV9saW5lKGNoYXIgKnMsIGludCAqcHMsIGludCAqbik7CisrCisgLyogc2hvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgZGVidWcncyBvdXRwdXQuICovCistdm9pZCBYODZFTVVfdHJhY2VfcmVncyAodm9pZCkKKyt2b2lkCisrWDg2RU1VX3RyYWNlX3JlZ3Modm9pZCkKKyB7CistCWlmIChERUJVR19UUkFDRSgpKSB7CistCQl4ODZlbXVfZHVtcF9yZWdzKCk7CisrICAgIGlmIChERUJVR19UUkFDRSgpKSB7CisrICAgICAgICB4ODZlbXVfZHVtcF9yZWdzKCk7CisgICAgIH0KKy0JaWYgKERFQlVHX0RFQ09ERSgpICYmICEgREVCVUdfREVDT0RFX05PUFJJTlQoKSkgeworLQkJcHJpbnRrKCIlMDR4OiUwNHggIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQkJcHJpbnRfZW5jb2RlZF9ieXRlcyggTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKy0JCXByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKysgICAgaWYgKERFQlVHX0RFQ09ERSgpICYmICFERUJVR19ERUNPREVfTk9QUklOVCgpKSB7CisrICAgICAgICBwcmludGsoIiUwNHg6JTA0eCAiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICAgICAgcHJpbnRfZW5jb2RlZF9ieXRlcyhNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICAgICAgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworICAgICB9CisgfQorIAorLXZvaWQgWDg2RU1VX3RyYWNlX3hyZWdzICh2b2lkKQorK3ZvaWQKKytYODZFTVVfdHJhY2VfeHJlZ3Modm9pZCkKKyB7CistCWlmIChERUJVR19UUkFDRSgpKSB7CistCQl4ODZlbXVfZHVtcF94cmVncygpOworKyAgICBpZiAoREVCVUdfVFJBQ0UoKSkgeworKyAgICAgICAgeDg2ZW11X2R1bXBfeHJlZ3MoKTsKKyAgICAgfQorIH0KKyAKKy12b2lkIHg4NmVtdV9qdXN0X2Rpc2Fzc2VtYmxlICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSh2b2lkKQorIHsKKyAgICAgLyoKKyAgICAgICogVGhpcyByb3V0aW5lIGNhbGxlZCBpZiB0aGUgZmxhZyBERUJVR19ESVNBU1NFTUJMRSBpcyBzZXQga2luZAorICAgICAgKiBvZiBhIGhhY2shCisgICAgICAqLworLQlwcmludGsoIiUwNHg6JTA0eCAiLE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CistCXByaW50X2VuY29kZWRfYnl0ZXMoIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CistCXByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKysgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgcHJpbnRfZW5jb2RlZF9ieXRlcyhNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisgfQorIAorLXN0YXRpYyB2b2lkIGRpc2Fzc2VtYmxlX2ZvcndhcmQgKHUxNiBzZWcsIHUxNiBvZmYsIGludCBuKQorK3N0YXRpYyB2b2lkCisrZGlzYXNzZW1ibGVfZm9yd2FyZCh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKyB7CistCVg4NkVNVV9zeXNFbnYgdHJlZ3M7CistCWludCBpOworLQl1OCBvcDE7CisrICAgIFg4NkVNVV9zeXNFbnYgdHJlZ3M7CisrICAgIGludCBpOworKyAgICB1OCBvcDE7CisrCisgICAgIC8qCisgICAgICAqIGhhY2ssIGhhY2ssIGhhY2suICBXaGF0IHdlIGRvIGlzIHVzZSB0aGUgZXhhY3QgbWFjaGluZXJ5IHNldCB1cAorICAgICAgKiBmb3IgZXhlY3V0aW9uLCBleGNlcHQgdGhhdCBub3cgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBzdGF0ZQorQEAgLTExMSwxNyArMTE4LDE3IEBAIHN0YXRpYyB2b2lkIGRpc2Fzc2VtYmxlX2ZvcndhcmQgKHUxNiBzZWcsIHUxNiBvZmYsIGludCBuKQorICAgICAgKiBUaGlzIHdhcyBkb25lIGZvciBhbiBlbnRpcmVseSBkaWZmZXJlbnQgcmVhc29uLCBidXQgbWFrZXMgYQorICAgICAgKiBuaWNlIHdheSB0byBnZXQgdGhlIHN5c3RlbSB0byBoZWxwIGRlYnVnIGNvZGVzLgorICAgICAgKi8KKy0JdHJlZ3MgPSBNOworKyAgICB0cmVncyA9IE07CisgICAgIHRyZWdzLng4Ni5SX0lQID0gb2ZmOworICAgICB0cmVncy54ODYuUl9DUyA9IHNlZzsKKy0gICAgCisrCisgICAgIC8qIHJlc2V0IHRoZSBkZWNvZGluZyBidWZmZXJzICovCisgICAgIHRyZWdzLng4Ni5lbmNfc3RyX3BvcyA9IDA7CisgICAgIHRyZWdzLng4Ni5lbmNfcG9zID0gMDsKKy0gICAgCisrCisgICAgIC8qIHR1cm4gb24gdGhlICJkaXNhc3NlbWJsZSBvbmx5LCBubyBleGVjdXRlIiBmbGFnICovCisgICAgIHRyZWdzLng4Ni5kZWJ1ZyB8PSBERUJVR19ESVNBU1NFTUJMRV9GOworLSAKKysKKyAgICAgLyogRFVNUCBORVhUIG4gaW5zdHJ1Y3Rpb25zIHRvIHNjcmVlbiBpbiBzdHJhaWdodF9saW5lIGZhc2hpb24gKi8KKyAgICAgLyoKKyAgICAgICogVGhpcyBsb29rcyBsaWtlIHRoZSByZWd1bGFyIGluc3RydWN0aW9uIGZldGNoIHN0cmVhbSwgZXhjZXB0CitAQCAtMTMwLDI5OSArMTM3LDM1OSBAQCBzdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKyAgICAgICogdGhlIGluc3RydWN0aW9uLiAgWFhYIC0tLSBDSEVDSyBUSEFUIE1FTSBJUyBOT1QgQUZGRUNURUQhISEKKyAgICAgICogTm90ZSB0aGUgdXNlIG9mIGEgY29weSBvZiB0aGUgcmVnaXN0ZXIgc3RydWN0dXJlLi4uCisgICAgICAqLworLSAgICBmb3IgKGk9MDsgaTxuOyBpKyspIHsKKy0JCW9wMSA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUzw8NCkgKyAoTS54ODYuUl9JUCsrKSk7CistCQkoeDg2ZW11X29wdGFiW29wMV0pKG9wMSk7CisrICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKysgICAgICAgIG9wMSA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICAgICAgKHg4NmVtdV9vcHRhYltvcDFdKSAob3AxKTsKKyAgICAgfQorICAgICAvKiBlbmQgbWFqb3IgaGFjayBtb2RlLiAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9jaGVja19pcF9hY2Nlc3Modm9pZCkKKyB7CisgICAgIC8qIE5VTEwgYXMgb2Ygbm93ICovCisgfQorIAorLXZvaWQgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcyAodm9pZCkKKyt2b2lkCisreDg2ZW11X2NoZWNrX3NwX2FjY2Vzcyh2b2lkKQorIHsKKyB9CisgCistdm9pZCB4ODZlbXVfY2hlY2tfbWVtX2FjY2VzcyAodTMyIGR1bW15KQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfbWVtX2FjY2Vzcyh1MzIgZHVtbXkpCisgeworLQkvKiAgY2hlY2sgYm91bmRzLCBldGMgKi8KKysgICAgLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisgfQorIAorLXZvaWQgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzICh1aW50IGR1bW15MSwgdWludCBkdW1teTIpCisrdm9pZAorK3g4NmVtdV9jaGVja19kYXRhX2FjY2Vzcyh1aW50IGR1bW15MSwgdWludCBkdW1teTIpCisgeworLQkvKiAgY2hlY2sgYm91bmRzLCBldGMgKi8KKysgICAgLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisgfQorIAorLXZvaWQgeDg2ZW11X2luY19kZWNvZGVkX2luc3RfbGVuIChpbnQgeCkKKyt2b2lkCisreDg2ZW11X2luY19kZWNvZGVkX2luc3RfbGVuKGludCB4KQorIHsKKy0JTS54ODYuZW5jX3BvcyArPSB4OworKyAgICBNLng4Ni5lbmNfcG9zICs9IHg7CisgfQorIAorLXZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYgKGNoYXIgKngpCisrdm9pZAorK3g4NmVtdV9kZWNvZGVfcHJpbnRmKGNvbnN0IGNoYXIgKngpCisgeworLQlzcHJpbnRmKE0ueDg2LmRlY29kZWRfYnVmK00ueDg2LmVuY19zdHJfcG9zLCIlcyIseCk7CistCU0ueDg2LmVuY19zdHJfcG9zICs9IHN0cmxlbih4KTsKKysgICAgc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZiArIE0ueDg2LmVuY19zdHJfcG9zLCAiJXMiLCB4KTsKKysgICAgTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHgpOworIH0KKyAKKy12b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmMiAoY2hhciAqeCwgaW50IHkpCisrdm9pZAorK3g4NmVtdV9kZWNvZGVfcHJpbnRmMihjb25zdCBjaGFyICp4LCBpbnQgeSkKKyB7CistCWNoYXIgdGVtcFsxMDBdOworLQlzcHJpbnRmKHRlbXAseCx5KTsKKy0Jc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZitNLng4Ni5lbmNfc3RyX3BvcywiJXMiLHRlbXApOworLQlNLng4Ni5lbmNfc3RyX3BvcyArPSBzdHJsZW4odGVtcCk7CisrICAgIGNoYXIgdGVtcFsxMDBdOworKworKyAgICBzbnByaW50Zih0ZW1wLCBzaXplb2YodGVtcCksIHgsIHkpOworKyAgICBzcHJpbnRmKE0ueDg2LmRlY29kZWRfYnVmICsgTS54ODYuZW5jX3N0cl9wb3MsICIlcyIsIHRlbXApOworKyAgICBNLng4Ni5lbmNfc3RyX3BvcyArPSBzdHJsZW4odGVtcCk7CisgfQorIAorLXZvaWQgeDg2ZW11X2VuZF9pbnN0ciAodm9pZCkKKyt2b2lkCisreDg2ZW11X2VuZF9pbnN0cih2b2lkKQorIHsKKy0JTS54ODYuZW5jX3N0cl9wb3MgPSAwOworLQlNLng4Ni5lbmNfcG9zID0gMDsKKysgICAgTS54ODYuZW5jX3N0cl9wb3MgPSAwOworKyAgICBNLng4Ni5lbmNfcG9zID0gMDsKKyB9CisgCistc3RhdGljIHZvaWQgcHJpbnRfZW5jb2RlZF9ieXRlcyAodTE2IHMsIHUxNiBvKQorK3N0YXRpYyB2b2lkCisrcHJpbnRfZW5jb2RlZF9ieXRlcyh1MTYgcywgdTE2IG8pCisgeworICAgICBpbnQgaTsKKyAgICAgY2hhciBidWYxWzY0XTsKKy0JZm9yIChpPTA7IGk8IE0ueDg2LmVuY19wb3M7IGkrKykgeworLQkJc3ByaW50ZihidWYxKzIqaSwiJTAyeCIsIGZldGNoX2RhdGFfYnl0ZV9hYnMocyxvK2kpKTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IE0ueDg2LmVuY19wb3M7IGkrKykgeworKyAgICAgICAgc3ByaW50ZihidWYxICsgMiAqIGksICIlMDJ4IiwgZmV0Y2hfZGF0YV9ieXRlX2FicyhzLCBvICsgaSkpOworICAgICB9CistCXByaW50aygiJS0yMHMiLGJ1ZjEpOworKyAgICBwcmludGsoIiUtMjBzIiwgYnVmMSk7CisgfQorIAorLXN0YXRpYyB2b2lkIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24gKHZvaWQpCisrc3RhdGljIHZvaWQKKytwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKHZvaWQpCisgeworLQlwcmludGsoIiVzIiwgTS54ODYuZGVjb2RlZF9idWYpOworKyAgICBwcmludGsoIiVzIiwgTS54ODYuZGVjb2RlZF9idWYpOworIH0KKyAKKy12b2lkIHg4NmVtdV9wcmludF9pbnRfdmVjdCAodTE2IGl2KQorK3ZvaWQKKyt4ODZlbXVfcHJpbnRfaW50X3ZlY3QodTE2IGl2KQorIHsKKy0JdTE2IHNlZyxvZmY7CisrICAgIHUxNiBzZWcsIG9mZjsKKyAKKy0JaWYgKGl2ID4gMjU2KSByZXR1cm47CistCXNlZyAgID0gZmV0Y2hfZGF0YV93b3JkX2FicygwLGl2KjQpOworLQlvZmYgICA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCxpdio0KzIpOworLQlwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIG9mZik7CisrICAgIGlmIChpdiA+IDI1NikKKysgICAgICAgIHJldHVybjsKKysgICAgc2VnID0gZmV0Y2hfZGF0YV93b3JkX2FicygwLCBpdiAqIDQpOworKyAgICBvZmYgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKDAsIGl2ICogNCArIDIpOworKyAgICBwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIG9mZik7CisgfQorIAorLXZvaWQgWDg2RU1VX2R1bXBfbWVtb3J5ICh1MTYgc2VnLCB1MTYgb2ZmLCB1MzIgYW10KQorK3ZvaWQKKytYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCkKKyB7CistCXUzMiBzdGFydCA9IG9mZiAmIDB4ZmZmZmZmZjA7CistCXUzMiBlbmQgID0gKG9mZisxNikgJiAweGZmZmZmZmYwOworLQl1MzIgaTsKKy0JdTMyIGN1cnJlbnQ7CistCistCWN1cnJlbnQgPSBzdGFydDsKKy0Jd2hpbGUgKGVuZCA8PSBvZmYgKyBhbXQpIHsKKy0JCXByaW50aygiJTA0eDolMDR4ICIsIHNlZywgc3RhcnQpOworLQkJZm9yIChpPXN0YXJ0OyBpPCBvZmY7IGkrKykKKy0JCSAgcHJpbnRrKCIgICAiKTsKKy0JCWZvciAoICAgICAgIDsgaTwgZW5kOyBpKyspCistCQkgIHByaW50aygiJTAyeCAiLCBmZXRjaF9kYXRhX2J5dGVfYWJzKHNlZyxpKSk7CistCQlwcmludGsoIlxuIik7CistCQlzdGFydCA9IGVuZDsKKy0JCWVuZCA9IHN0YXJ0ICsgMTY7CistCX0KKysgICAgdTMyIHN0YXJ0ID0gb2ZmICYgMHhmZmZmZmZmMDsKKysgICAgdTMyIGVuZCA9IChvZmYgKyAxNikgJiAweGZmZmZmZmYwOworKyAgICB1MzIgaTsKKysgICAgdTMyIGN1cnJlbnQ7CisrCisrICAgIGN1cnJlbnQgPSBzdGFydDsKKysgICAgd2hpbGUgKGVuZCA8PSBvZmYgKyBhbXQpIHsKKysgICAgICAgIHByaW50aygiJTA0eDolMDR4ICIsIHNlZywgc3RhcnQpOworKyAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBvZmY7IGkrKykKKysgICAgICAgICAgICBwcmludGsoIiAgICIpOworKyAgICAgICAgZm9yICg7IGkgPCBlbmQ7IGkrKykKKysgICAgICAgICAgICBwcmludGsoIiUwMnggIiwgZmV0Y2hfZGF0YV9ieXRlX2FicyhzZWcsIGkpKTsKKysgICAgICAgIHByaW50aygiXG4iKTsKKysgICAgICAgIHN0YXJ0ID0gZW5kOworKyAgICAgICAgZW5kID0gc3RhcnQgKyAxNjsKKysgICAgfQorIH0KKyAKKy12b2lkIHg4NmVtdV9zaW5nbGVfc3RlcCAodm9pZCkKKyt2b2lkCisreDg2ZW11X3NpbmdsZV9zdGVwKHZvaWQpCisgeworICAgICBjaGFyIHNbMTAyNF07CisgICAgIGludCBwc1sxMF07CisgICAgIGludCBudG9rOworICAgICBpbnQgY21kOworICAgICBpbnQgZG9uZTsKKy0JCWludCBzZWdtZW50OworKyAgICBpbnQgc2VnbWVudDsKKyAgICAgaW50IG9mZnNldDsKKyAgICAgc3RhdGljIGludCBicmVha3BvaW50OworICAgICBzdGF0aWMgaW50IG5vRGVjb2RlID0gMTsKKy0gICAgCisrCisgICAgIGNoYXIgKnA7CisgCistCQlpZiAoREVCVUdfQlJFQUsoKSkgeworLQkJCQlpZiAoTS54ODYuc2F2ZWRfaXAgIT0gYnJlYWtwb2ludCkgeworLQkJCQkJCXJldHVybjsKKy0JCQkJfSBlbHNlIHsKKy0gCSAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfREVDT0RFX05PUFJJTlRfRjsKKy0JCQkJCQlNLng4Ni5kZWJ1ZyB8PSBERUJVR19UUkFDRV9GOworLQkJCQkJCU0ueDg2LmRlYnVnICY9IH5ERUJVR19CUkVBS19GOworLQkJCQkJCXByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24gKCk7CistCQkJCQkJWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKy0JCQkJfQorLQkJfQorLSAgICBkb25lPTA7CistCW9mZnNldCA9IE0ueDg2LnNhdmVkX2lwOworKyAgICBpZiAoREVCVUdfQlJFQUsoKSkgeworKyAgICAgICAgaWYgKE0ueDg2LnNhdmVkX2lwICE9IGJyZWFrcG9pbnQpIHsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfREVDT0RFX05PUFJJTlRfRjsKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19UUkFDRV9GOworKyAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19CUkVBS19GOworKyAgICAgICAgICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKysgICAgICAgICAgICBYODZFTVVfdHJhY2VfcmVncygpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGRvbmUgPSAwOworKyAgICBvZmZzZXQgPSBNLng4Ni5zYXZlZF9pcDsKKyAgICAgd2hpbGUgKCFkb25lKSB7CisgICAgICAgICBwcmludGsoIi0iKTsKKyAgICAgICAgIHAgPSBmZ2V0cyhzLCAxMDIzLCBzdGRpbik7CisgICAgICAgICBjbWQgPSBwYXJzZV9saW5lKHMsIHBzLCAmbnRvayk7CistICAgICAgICBzd2l0Y2goY21kKSB7CistICAgICAgICAgIGNhc2UgJ3UnOgorLQkJCWRpc2Fzc2VtYmxlX2ZvcndhcmQoTS54ODYuc2F2ZWRfY3MsKHUxNilvZmZzZXQsMTApOworKyAgICAgICAgc3dpdGNoIChjbWQpIHsKKysgICAgICAgIGNhc2UgJ3UnOgorKyAgICAgICAgICAgIGRpc2Fzc2VtYmxlX2ZvcndhcmQoTS54ODYuc2F2ZWRfY3MsICh1MTYpIG9mZnNldCwgMTApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdkJzogIAorLQkJCQkJCQlpZiAobnRvayA9PSAyKSB7CistCQkJCQkJCQkJc2VnbWVudCA9IE0ueDg2LnNhdmVkX2NzOworLQkJCQkJCQkJCW9mZnNldCA9IHBzWzFdOworLQkJCQkJCQkJCVg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCh1MTYpb2Zmc2V0LDE2KTsKKy0JCQkJCQkJCQlvZmZzZXQgKz0gMTY7CistCQkJCQkJCX0gZWxzZSBpZiAobnRvayA9PSAzKSB7CistCQkJCQkJCQkJc2VnbWVudCA9IHBzWzFdOworLQkJCQkJCQkJCW9mZnNldCA9IHBzWzJdOworLQkJCQkJCQkJCVg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCh1MTYpb2Zmc2V0LDE2KTsKKy0JCQkJCQkJCQlvZmZzZXQgKz0gMTY7CistCQkJCQkJCX0gZWxzZSB7CistCQkJCQkJCQkJc2VnbWVudCA9IE0ueDg2LnNhdmVkX2NzOworLQkJCQkJCQkJCVg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCh1MTYpb2Zmc2V0LDE2KTsKKy0JCQkJCQkJCQlvZmZzZXQgKz0gMTY7CistCQkJCQkJCX0KKysgICAgICAgIGNhc2UgJ2QnOgorKyAgICAgICAgICAgIGlmIChudG9rID09IDIpIHsKKysgICAgICAgICAgICAgICAgc2VnbWVudCA9IE0ueDg2LnNhdmVkX2NzOworKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwc1sxXTsKKysgICAgICAgICAgICAgICAgWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsICh1MTYpIG9mZnNldCwgMTYpOworKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG50b2sgPT0gMykgeworKyAgICAgICAgICAgICAgICBzZWdtZW50ID0gcHNbMV07CisrICAgICAgICAgICAgICAgIG9mZnNldCA9IHBzWzJdOworKyAgICAgICAgICAgICAgICBYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwgKHUxNikgb2Zmc2V0LCAxNik7CisrICAgICAgICAgICAgICAgIG9mZnNldCArPSAxNjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKysgICAgICAgICAgICAgICAgWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsICh1MTYpIG9mZnNldCwgMTYpOworKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisrICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdjJzoKKy0JCQlNLng4Ni5kZWJ1ZyBePSBERUJVR19UUkFDRUNBTExfRjsKKysgICAgICAgIGNhc2UgJ2MnOgorKyAgICAgICAgICAgIE0ueDg2LmRlYnVnIF49IERFQlVHX1RSQUNFQ0FMTF9GOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdzJzoKKy0JCQlNLng4Ni5kZWJ1ZyBePSBERUJVR19TVkNfRiB8IERFQlVHX1NZU19GIHwgREVCVUdfU1lTSU5UX0Y7CisrICAgICAgICBjYXNlICdzJzoKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyBePSBERUJVR19TVkNfRiB8IERFQlVHX1NZU19GIHwgREVCVUdfU1lTSU5UX0Y7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3InOgorLQkJCVg4NkVNVV90cmFjZV9yZWdzKCk7CisrICAgICAgICBjYXNlICdyJzoKKysgICAgICAgICAgICBYODZFTVVfdHJhY2VfcmVncygpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICd4JzoKKy0JCQlYODZFTVVfdHJhY2VfeHJlZ3MoKTsKKysgICAgICAgIGNhc2UgJ3gnOgorKyAgICAgICAgICAgIFg4NkVNVV90cmFjZV94cmVncygpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdnJzoKKysgICAgICAgIGNhc2UgJ2cnOgorICAgICAgICAgICAgIGlmIChudG9rID09IDIpIHsKKyAgICAgICAgICAgICAgICAgYnJlYWtwb2ludCA9IHBzWzFdOworLQkJaWYgKG5vRGVjb2RlKSB7CistCQkgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfREVDT0RFX05PUFJJTlRfRjsKKy0JCX0gZWxzZSB7CistCQkgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQl9CistCQlNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfVFJBQ0VfRjsKKy0JCU0ueDg2LmRlYnVnIHw9IERFQlVHX0JSRUFLX0Y7CistCQlkb25lID0gMTsKKysgICAgICAgICAgICAgICAgaWYgKG5vRGVjb2RlKSB7CisrICAgICAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19ERUNPREVfTk9QUklOVF9GOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX1RSQUNFX0Y7CisrICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0JSRUFLX0Y7CisrICAgICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAncSc6CistICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0VYSVQ7CistICAgICAgICAgIHJldHVybjsKKy0JICBjYXNlICdQJzoKKy0JICAgICAgbm9EZWNvZGUgPSAobm9EZWNvZGUpPzA6MTsKKy0JICAgICAgcHJpbnRrKCJUb2dnbGVkIGRlY29kaW5nIHRvICVzXG4iLChub0RlY29kZSk/IkZBTFNFIjoiVFJVRSIpOworLQkgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAndCc6CistCSAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAncSc6CisrICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfRVhJVDsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICBjYXNlICdQJzoKKysgICAgICAgICAgICBub0RlY29kZSA9IChub0RlY29kZSkgPyAwIDogMTsKKysgICAgICAgICAgICBwcmludGsoIlRvZ2dsZWQgZGVjb2RpbmcgdG8gJXNcbiIsIChub0RlY29kZSkgPyAiRkFMU0UiIDogIlRSVUUiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgJ3QnOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgfSAgIAorKyAgICAgICAgfQorICAgICB9CisgfQorIAorLWludCBYODZFTVVfdHJhY2Vfb24odm9pZCkKKytpbnQKKytYODZFTVVfdHJhY2Vfb24odm9pZCkKKyB7CistCXJldHVybiBNLng4Ni5kZWJ1ZyB8PSBERUJVR19TVEVQX0YgfCBERUJVR19ERUNPREVfRiB8IERFQlVHX1RSQUNFX0Y7CisrICAgIHJldHVybiBNLng4Ni5kZWJ1ZyB8PSBERUJVR19TVEVQX0YgfCBERUJVR19ERUNPREVfRiB8IERFQlVHX1RSQUNFX0Y7CisgfQorIAorLWludCBYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpCisraW50CisrWDg2RU1VX3RyYWNlX29mZih2b2lkKQorIHsKKy0JcmV0dXJuIE0ueDg2LmRlYnVnICY9IH4oREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GKTsKKysgICAgcmV0dXJuIE0ueDg2LmRlYnVnICY9IH4oREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GKTsKKyB9CisgCistc3RhdGljIGludCBwYXJzZV9saW5lIChjaGFyICpzLCBpbnQgKnBzLCBpbnQgKm4pCisrc3RhdGljIGludAorK3BhcnNlX2xpbmUoY2hhciAqcywgaW50ICpwcywgaW50ICpuKQorIHsKKyAgICAgaW50IGNtZDsKKyAKKyAgICAgKm4gPSAwOworLSAgICB3aGlsZSgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykgcysrOworKyAgICB3aGlsZSAoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpCisrICAgICAgICBzKys7CisgICAgIHBzWypuXSA9ICpzOworICAgICBzd2l0Y2ggKCpzKSB7CistICAgICAgY2FzZSAnXG4nOgorKyAgICBjYXNlICdcbic6CisgICAgICAgICAqbiArPSAxOworICAgICAgICAgcmV0dXJuIDA7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIGNtZCA9ICpzOworICAgICAgICAgKm4gKz0gMTsKKyAgICAgfQorIAorLQl3aGlsZSAoMSkgeworLQkJd2hpbGUgKCpzICE9ICcgJyAmJiAqcyAhPSAnXHQnICYmICpzICE9ICdcbicpICBzKys7CistCQkKKy0JCWlmICgqcyA9PSAnXG4nKQorLQkJCXJldHVybiBjbWQ7CistCQkKKy0JCXdoaWxlKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKSBzKys7CistCQkKKy0JCXNzY2FuZihzLCIleCIsJnBzWypuXSk7CistCQkqbiArPSAxOworLQl9CisrICAgIHdoaWxlICgxKSB7CisrICAgICAgICB3aGlsZSAoKnMgIT0gJyAnICYmICpzICE9ICdcdCcgJiYgKnMgIT0gJ1xuJykKKysgICAgICAgICAgICBzKys7CisrCisrICAgICAgICBpZiAoKnMgPT0gJ1xuJykKKysgICAgICAgICAgICByZXR1cm4gY21kOworKworKyAgICAgICAgd2hpbGUgKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKQorKyAgICAgICAgICAgIHMrKzsKKysKKysgICAgICAgIHNzY2FuZihzLCAiJXgiLCAmcHNbKm5dKTsKKysgICAgICAgICpuICs9IDE7CisrICAgIH0KKyB9CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorLXZvaWQgeDg2ZW11X2R1bXBfcmVncyAodm9pZCkKKyt2b2lkCisreDg2ZW11X2R1bXBfcmVncyh2b2lkKQorIHsKKy0JcHJpbnRrKCJcdEFYPSUwNHggICIsIE0ueDg2LlJfQVggKTsKKy0JcHJpbnRrKCJCWD0lMDR4ICAiLCBNLng4Ni5SX0JYICk7CistCXByaW50aygiQ1g9JTA0eCAgIiwgTS54ODYuUl9DWCApOworLQlwcmludGsoIkRYPSUwNHggICIsIE0ueDg2LlJfRFggKTsKKy0JcHJpbnRrKCJTUD0lMDR4ICAiLCBNLng4Ni5SX1NQICk7CistCXByaW50aygiQlA9JTA0eCAgIiwgTS54ODYuUl9CUCApOworLQlwcmludGsoIlNJPSUwNHggICIsIE0ueDg2LlJfU0kgKTsKKy0JcHJpbnRrKCJEST0lMDR4XG4iLCBNLng4Ni5SX0RJICk7CistCXByaW50aygiXHREUz0lMDR4ICAiLCBNLng4Ni5SX0RTICk7CistCXByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyApOworLQlwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MgKTsKKy0JcHJpbnRrKCJDUz0lMDR4ICAiLCBNLng4Ni5SX0NTICk7CistCXByaW50aygiSVA9JTA0eCAgICIsIE0ueDg2LlJfSVAgKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfT0YpKSAgICBwcmludGsoIk9WICIpOyAgICAgLyogQ0hFQ0tFRC4uLiAqLworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOViAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICBwcmludGsoIkROICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJVUCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfSUYpKSAgICBwcmludGsoIkVJICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJESSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfU0YpKSAgICBwcmludGsoIk5HICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfWkYpKSAgICBwcmludGsoIlpSICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOWiAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQUYpKSAgICBwcmludGsoIkFDICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfUEYpKSAgICBwcmludGsoIlBFICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTyAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSAgICBwcmludGsoIkNZICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQyAiKTsKKy0JcHJpbnRrKCJcbiIpOworKyAgICBwcmludGsoIlx0QVg9JTA0eCAgIiwgTS54ODYuUl9BWCk7CisrICAgIHByaW50aygiQlg9JTA0eCAgIiwgTS54ODYuUl9CWCk7CisrICAgIHByaW50aygiQ1g9JTA0eCAgIiwgTS54ODYuUl9DWCk7CisrICAgIHByaW50aygiRFg9JTA0eCAgIiwgTS54ODYuUl9EWCk7CisrICAgIHByaW50aygiU1A9JTA0eCAgIiwgTS54ODYuUl9TUCk7CisrICAgIHByaW50aygiQlA9JTA0eCAgIiwgTS54ODYuUl9CUCk7CisrICAgIHByaW50aygiU0k9JTA0eCAgIiwgTS54ODYuUl9TSSk7CisrICAgIHByaW50aygiREk9JTA0eFxuIiwgTS54ODYuUl9ESSk7CisrICAgIHByaW50aygiXHREUz0lMDR4ICAiLCBNLng4Ni5SX0RTKTsKKysgICAgcHJpbnRrKCJFUz0lMDR4ICAiLCBNLng4Ni5SX0VTKTsKKysgICAgcHJpbnRrKCJTUz0lMDR4ICAiLCBNLng4Ni5SX1NTKTsKKysgICAgcHJpbnRrKCJDUz0lMDR4ICAiLCBNLng4Ni5SX0NTKTsKKysgICAgcHJpbnRrKCJJUD0lMDR4ICAgIiwgTS54ODYuUl9JUCk7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkKKysgICAgICAgIHByaW50aygiT1YgIik7ICAgICAgICAgIC8qIENIRUNLRUQuLi4gKi8KKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOViAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKQorKyAgICAgICAgcHJpbnRrKCJETiAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJVUCAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfSUYpKQorKyAgICAgICAgcHJpbnRrKCJFSSAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJESSAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfU0YpKQorKyAgICAgICAgcHJpbnRrKCJORyAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJQTCAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQorKyAgICAgICAgcHJpbnRrKCJaUiAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOWiAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQUYpKQorKyAgICAgICAgcHJpbnRrKCJBQyAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOQSAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfUEYpKQorKyAgICAgICAgcHJpbnRrKCJQRSAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJQTyAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcHJpbnRrKCJDWSAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOQyAiKTsKKysgICAgcHJpbnRrKCJcbiIpOworIH0KKyAKKy12b2lkIHg4NmVtdV9kdW1wX3hyZWdzICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfZHVtcF94cmVncyh2b2lkKQorIHsKKy0JcHJpbnRrKCJcdEVBWD0lMDh4ICAiLCBNLng4Ni5SX0VBWCApOworLQlwcmludGsoIkVCWD0lMDh4ICAiLCBNLng4Ni5SX0VCWCApOworLQlwcmludGsoIkVDWD0lMDh4ICAiLCBNLng4Ni5SX0VDWCApOworLQlwcmludGsoIkVEWD0lMDh4ICBcbiIsIE0ueDg2LlJfRURYICk7CistCXByaW50aygiXHRFU1A9JTA4eCAgIiwgTS54ODYuUl9FU1AgKTsKKy0JcHJpbnRrKCJFQlA9JTA4eCAgIiwgTS54ODYuUl9FQlAgKTsKKy0JcHJpbnRrKCJFU0k9JTA4eCAgIiwgTS54ODYuUl9FU0kgKTsKKy0JcHJpbnRrKCJFREk9JTA4eFxuIiwgTS54ODYuUl9FREkgKTsKKy0JcHJpbnRrKCJcdERTPSUwNHggICIsIE0ueDg2LlJfRFMgKTsKKy0JcHJpbnRrKCJFUz0lMDR4ICAiLCBNLng4Ni5SX0VTICk7CistCXByaW50aygiU1M9JTA0eCAgIiwgTS54ODYuUl9TUyApOworLQlwcmludGsoIkNTPSUwNHggICIsIE0ueDg2LlJfQ1MgKTsKKy0JcHJpbnRrKCJFSVA9JTA4eFxuXHQiLCBNLng4Ni5SX0VJUCApOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9PRikpICAgIHByaW50aygiT1YgIik7ICAgICAvKiBDSEVDS0VELi4uICovCistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5WICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgIHByaW50aygiRE4gIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlVQICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9JRikpICAgIHByaW50aygiRUkgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkRJICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9TRikpICAgIHByaW50aygiTkcgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlBMICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9aRikpICAgIHByaW50aygiWlIgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5aICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9BRikpICAgIHByaW50aygiQUMgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5BICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9QRikpICAgIHByaW50aygiUEUgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlBPICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpICAgIHByaW50aygiQ1kgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5DICIpOworLQlwcmludGsoIlxuIik7CisrICAgIHByaW50aygiXHRFQVg9JTA4eCAgIiwgTS54ODYuUl9FQVgpOworKyAgICBwcmludGsoIkVCWD0lMDh4ICAiLCBNLng4Ni5SX0VCWCk7CisrICAgIHByaW50aygiRUNYPSUwOHggICIsIE0ueDg2LlJfRUNYKTsKKysgICAgcHJpbnRrKCJFRFg9JTA4eCAgXG4iLCBNLng4Ni5SX0VEWCk7CisrICAgIHByaW50aygiXHRFU1A9JTA4eCAgIiwgTS54ODYuUl9FU1ApOworKyAgICBwcmludGsoIkVCUD0lMDh4ICAiLCBNLng4Ni5SX0VCUCk7CisrICAgIHByaW50aygiRVNJPSUwOHggICIsIE0ueDg2LlJfRVNJKTsKKysgICAgcHJpbnRrKCJFREk9JTA4eFxuIiwgTS54ODYuUl9FREkpOworKyAgICBwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyk7CisrICAgIHByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyk7CisrICAgIHByaW50aygiU1M9JTA0eCAgIiwgTS54ODYuUl9TUyk7CisrICAgIHByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyk7CisrICAgIHByaW50aygiRUlQPSUwOHhcblx0IiwgTS54ODYuUl9FSVApOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpCisrICAgICAgICBwcmludGsoIk9WICIpOyAgICAgICAgICAvKiBDSEVDS0VELi4uICovCisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlYgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkKKysgICAgICAgIHByaW50aygiRE4gIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiVVAgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0lGKSkKKysgICAgICAgIHByaW50aygiRUkgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiREkgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1NGKSkKKysgICAgICAgIHByaW50aygiTkcgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUEwgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKKysgICAgICAgIHByaW50aygiWlIgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlogIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0FGKSkKKysgICAgICAgIHByaW50aygiQUMgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkEgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKKysgICAgICAgIHByaW50aygiUEUgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUE8gIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHByaW50aygiQ1kgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkMgIik7CisrICAgIHByaW50aygiXG4iKTsKKyB9CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZGVjb2RlLmMgYi9saWJzL3g4NmVtdS9kZWNvZGUuYworaW5kZXggN2Q5YTM0YS4uMTJmOGZiOCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L2RlY29kZS5jCisrKysgYi9saWJzL3g4NmVtdS9kZWNvZGUuYworQEAgLTQ2LDI1ICs0NiwyNyBAQAorIFJFTUFSS1M6CisgSGFuZGxlcyBhbnkgcGVuZGluZyBhc3ljaHJvbm91cyBpbnRlcnJ1cHRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11X2ludHJfaGFuZGxlKHZvaWQpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVfaW50cl9oYW5kbGUodm9pZCkKKyB7CistCXU4CWludG5vOworLQorLQlpZiAoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpIHsKKy0JCWludG5vID0gTS54ODYuaW50bm87CistCQlpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgeworLQkJCSgqX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkoaW50bm8pOworLQkJfSBlbHNlIHsKKy0JCQlwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CistCQkJQ0xFQVJfRkxBRyhGX0lGKTsKKy0JCQlDTEVBUl9GTEFHKEZfVEYpOworLQkJCXB1c2hfd29yZChNLng4Ni5SX0NTKTsKKy0JCQlNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCArIDIpOworLQkJCXB1c2hfd29yZChNLng4Ni5SX0lQKTsKKy0JCQlNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCk7CistCQkJTS54ODYuaW50ciA9IDA7CistCQl9CistCX0KKysgICAgdTggaW50bm87CisrCisrICAgIGlmIChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgeworKyAgICAgICAgaW50bm8gPSBNLng4Ni5pbnRubzsKKysgICAgICAgIGlmIChfWDg2RU1VX2ludHJUYWJbaW50bm9dKSB7CisrICAgICAgICAgICAgKCpfWDg2RU1VX2ludHJUYWJbaW50bm9dKSAoaW50bm8pOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisrICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworKyAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBtZW1fYWNjZXNzX3dvcmQoaW50bm8gKiA0ICsgMik7CisrICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBtZW1fYWNjZXNzX3dvcmQoaW50bm8gKiA0KTsKKysgICAgICAgICAgICBNLng4Ni5pbnRyID0gMDsKKysgICAgICAgIH0KKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTc1LDExICs3NywxMSBAQCBSRU1BUktTOgorIFJhaXNlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IHRvIGJlIGhhbmRsZWQgYmVmb3JlIHRoZSBleGVjdXRpb24gb2YgdGhlCisgbmV4dCBpbnN0cnVjdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgeDg2ZW11X2ludHJfcmFpc2UoCistCXU4IGludHJudW0pCisrdm9pZAorK3g4NmVtdV9pbnRyX3JhaXNlKHU4IGludHJudW0pCisgeworLQlNLng4Ni5pbnRubyA9IGludHJudW07CistCU0ueDg2LmludHIgfD0gSU5UUl9TWU5DSDsKKysgICAgTS54ODYuaW50bm8gPSBpbnRybnVtOworKyAgICBNLng4Ni5pbnRyIHw9IElOVFJfU1lOQ0g7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtODgsMzkgKzkwLDM5IEBAIE1haW4gZXhlY3V0aW9uIGxvb3AgZm9yIHRoZSBlbXVsYXRvci4gV2UgcmV0dXJuIGZyb20gaGVyZSB3aGVuIHRoZSBzeXN0ZW0KKyBoYWx0cywgd2hpY2ggaXMgbm9ybWFsbHkgY2F1c2VkIGJ5IGEgc3RhY2sgZmF1bHQgd2hlbiB3ZSByZXR1cm4gZnJvbSB0aGUKKyBvcmlnaW5hbCByZWFsIG1vZGUgY2FsbC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX2V4ZWModm9pZCkKKyt2b2lkCisrWDg2RU1VX2V4ZWModm9pZCkKKyB7CistCXU4IG9wMTsKKy0KKy0JTS54ODYuaW50ciA9IDA7CistCURCKHg4NmVtdV9lbmRfaW5zdHIoKTspCistCistICAgIGZvciAoOzspIHsKKy1EQigJCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkJICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQkJLyogSWYgZGVidWdnaW5nLCBzYXZlIHRoZSBJUCBhbmQgQ1MgdmFsdWVzLiAqLworLQkJU0FWRV9JUF9DUyhNLng4Ni5SX0NTLCBNLng4Ni5SX0lQKTsKKy0JCUlOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworLQkJaWYgKE0ueDg2LmludHIpIHsKKy0JCQlpZiAoTS54ODYuaW50ciAmIElOVFJfSEFMVEVEKSB7CistREIoICAgICAgICAgICAgIGlmIChNLng4Ni5SX1NQICE9IDApIHsKKy0gICAgICAgICAgICAgICAgICAgIHByaW50aygiaGFsdGVkXG4iKTsKKy0gICAgICAgICAgICAgICAgICAgIFg4NkVNVV90cmFjZV9yZWdzKCk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKE0ueDg2LmRlYnVnKQorLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiU2VydmljZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKKy0gICAgICAgICAgICAgICAgICAgIH0pCistCQkJCXJldHVybjsKKysgICAgdTggb3AxOworKworKyAgICBNLng4Ni5pbnRyID0gMDsKKysgICAgREIoeDg2ZW11X2VuZF9pbnN0cigpOworKyAgICAgICAgKQorKworKyAgICAgICAgZm9yICg7OykgeworKyAgICAgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgICAgIC8qIElmIGRlYnVnZ2luZywgc2F2ZSB0aGUgSVAgYW5kIENTIHZhbHVlcy4gKi8KKysgICAgICAgICAgICBTQVZFX0lQX0NTKE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVApOworKyAgICAgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CisrICAgICAgICBpZiAoTS54ODYuaW50cikgeworKyAgICAgICAgICAgIGlmIChNLng4Ni5pbnRyICYgSU5UUl9IQUxURUQpIHsKKysgICAgICAgICAgICAgICAgREIoaWYgKE0ueDg2LlJfU1AgIT0gMCkgeworKyAgICAgICAgICAgICAgICAgICBwcmludGsoImhhbHRlZFxuIik7IFg4NkVNVV90cmFjZV9yZWdzKCk7fQorKyAgICAgICAgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgaWYgKE0ueDg2LmRlYnVnKQorKyAgICAgICAgICAgICAgICAgICBwcmludGsoIlNlcnZpY2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuIik7fQorKyAgICAgICAgICAgICAgICApCisrICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgfQorLQkJCWlmICgoKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAmJiAoTS54ODYuaW50bm8gPT0gMCB8fCBNLng4Ni5pbnRubyA9PSAyKSkgfHwKKy0JCQkJIUFDQ0VTU19GTEFHKEZfSUYpKSB7CistCQkJCXg4NmVtdV9pbnRyX2hhbmRsZSgpOworLQkJCX0KKy0JCX0KKy0KKy0JCW9wMSA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JCSgqeDg2ZW11X29wdGFiW29wMV0pKG9wMSk7CisrICAgICAgICAgICAgaWYgKCgoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpICYmCisrICAgICAgICAgICAgICAgICAoTS54ODYuaW50bm8gPT0gMCB8fCBNLng4Ni5pbnRubyA9PSAyKSkgfHwKKysgICAgICAgICAgICAgICAgIUFDQ0VTU19GTEFHKEZfSUYpKSB7CisrICAgICAgICAgICAgICAgIHg4NmVtdV9pbnRyX2hhbmRsZSgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIG9wMSA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICAgICAgKCp4ODZlbXVfb3B0YWJbb3AxXSkgKG9wMSk7CisgICAgICAgICBpZiAoTS54ODYuZGVidWcgJiBERUJVR19FWElUKSB7CisgICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0VYSVQ7CisgICAgICAgICAgICAgcmV0dXJuOworQEAgLTEzMiw5ICsxMzQsMTAgQEAgREIoICAgICAgICAgICAgIGlmIChNLng4Ni5SX1NQICE9IDApIHsKKyBSRU1BUktTOgorIEhhbHRzIHRoZSBzeXN0ZW0gYnkgc2V0dGluZyB0aGUgaGFsdGVkIHN5c3RlbSBmbGFnLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfaGFsdF9zeXModm9pZCkKKyt2b2lkCisrWDg2RU1VX2hhbHRfc3lzKHZvaWQpCisgeworLQlNLng4Ni5pbnRyIHw9IElOVFJfSEFMVEVEOworKyAgICBNLng4Ni5pbnRyIHw9IElOVFJfSEFMVEVEOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTE0OSwxOSArMTUyLDE3IEBAIG5leHQgaW5zdHJ1Y3Rpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uLCBhcyAoKnN5c19yZGIpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBmZXRjaF9kZWNvZGVfbW9kcm0oCistCWludCAqbW9kLAorLQlpbnQgKnJlZ2gsCistCWludCAqcmVnbCkKKyt2b2lkCisrZmV0Y2hfZGVjb2RlX21vZHJtKGludCAqbW9kLCBpbnQgKnJlZ2gsIGludCAqcmVnbCkKKyB7CistCWludCBmZXRjaGVkOworLQorLURCKAlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQlmZXRjaGVkID0gKCpzeXNfcmRiKSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworLQlJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0JKm1vZCAgPSAoZmV0Y2hlZCA+PiA2KSAmIDB4MDM7CistCSpyZWdoID0gKGZldGNoZWQgPj4gMykgJiAweDA3OworKyAgICBpbnQgZmV0Y2hlZDsKKysKKysgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICBmZXRjaGVkID0gKCpzeXNfcmRiKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworKyAgICAqbW9kID0gKGZldGNoZWQgPj4gNikgJiAweDAzOworKyAgICAqcmVnaCA9IChmZXRjaGVkID4+IDMpICYgMHgwNzsKKyAgICAgKnJlZ2wgPSAoZmV0Y2hlZCA+PiAwKSAmIDB4MDc7CisgfQorIAorQEAgLTE3NSwxNSArMTc2LDE2IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmRiKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGZldGNoX2J5dGVfaW1tKHZvaWQpCisrdTgKKytmZXRjaF9ieXRlX2ltbSh2b2lkKQorIHsKKy0JdTggZmV0Y2hlZDsKKysgICAgdTggZmV0Y2hlZDsKKyAKKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCQl4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQlmZXRjaGVkID0gKCpzeXNfcmRiKSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworLQlJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0JcmV0dXJuIGZldGNoZWQ7CisrICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgZmV0Y2hlZCA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKysgICAgcmV0dXJuIGZldGNoZWQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMTk2LDE2ICsxOTgsMTcgQEAgbW92ZXMgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgdG8gdGhlIG5leHQgdmFsdWUuCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uLCBhcyAoKnN5c19yZHcpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGZldGNoX3dvcmRfaW1tKHZvaWQpCisrdTE2CisrZmV0Y2hfd29yZF9pbW0odm9pZCkKKyB7CistCXUxNglmZXRjaGVkOworLQorLURCKAlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JCXg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCistCWZldGNoZWQgPSAoKnN5c19yZHcpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCkpOworLQlNLng4Ni5SX0lQICs9IDI7CistCUlOQ19ERUNPREVEX0lOU1RfTEVOKDIpOworLQlyZXR1cm4gZmV0Y2hlZDsKKysgICAgdTE2IGZldGNoZWQ7CisrCisrICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgZmV0Y2hlZCA9ICgqc3lzX3JkdykgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVApKTsKKysgICAgTS54ODYuUl9JUCArPSAyOworKyAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigyKTsKKysgICAgcmV0dXJuIGZldGNoZWQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjE4LDE2ICsyMjEsMTcgQEAgbW92ZXMgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgdG8gdGhlIG5leHQgdmFsdWUuCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uLCBhcyAoKnN5c19yZHcpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGZldGNoX2xvbmdfaW1tKHZvaWQpCisrdTMyCisrZmV0Y2hfbG9uZ19pbW0odm9pZCkKKyB7CistCXUzMiBmZXRjaGVkOworLQorLURCKAlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQlmZXRjaGVkID0gKCpzeXNfcmRsKSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVApKTsKKy0JTS54ODYuUl9JUCArPSA0OworLQlJTkNfREVDT0RFRF9JTlNUX0xFTig0KTsKKy0JcmV0dXJuIGZldGNoZWQ7CisrICAgIHUzMiBmZXRjaGVkOworKworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZGwpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CisrICAgIE0ueDg2LlJfSVAgKz0gNDsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oNCk7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI1OSwzOCArMjYzLDM5IEBAIGNwdS1zdGF0ZS12YXJpYmxlIE0ueDg2Lm1vZGUuIFRoZXJlIGFyZSBzZXZlcmFsIHBvdGVudGlhbCBzdGF0ZXM6CisgCisgRWFjaCBvZiB0aGUgYWJvdmUgNyBpdGVtcyBhcmUgaGFuZGxlZCB3aXRoIGEgYml0IGluIHRoZSBtb2RlIGZpZWxkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistX0lOTElORSB1MzIgZ2V0X2RhdGFfc2VnbWVudCh2b2lkKQorK19JTkxJTkUgdTMyCisrZ2V0X2RhdGFfc2VnbWVudCh2b2lkKQorIHsKKyAjZGVmaW5lCUdFVF9TRUdNRU5UKHNlZ21lbnQpCistCXN3aXRjaCAoTS54ODYubW9kZSAmIFNZU01PREVfU0VHTUFTSykgeworLQkgIGNhc2UgMDoJCQkJCS8qIGRlZmF1bHQgY2FzZTogdXNlIGRzIHJlZ2lzdGVyICovCistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUzoKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0RTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CistCQlyZXR1cm4gIE0ueDg2LlJfRFM7CistCSAgY2FzZSBTWVNNT0RFX1NFR19EU19TUzoJLyogbm9uLW92ZXJyaWRkZW4sIHVzZSBzcyByZWdpc3RlciAqLworLQkJcmV0dXJuICBNLng4Ni5SX1NTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfQ1M6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9DUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0NTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRVM6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0VTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlM6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9GUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0ZTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfR1M6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9HUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0dTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfU1M6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX1NTOworLQkgIGRlZmF1bHQ6CisrICAgIHN3aXRjaCAoTS54ODYubW9kZSAmIFNZU01PREVfU0VHTUFTSykgeworKyAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IGNhc2U6IHVzZSBkcyByZWdpc3RlciAqLworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0RTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0RTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9EUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR19EU19TUzogICAgLyogbm9uLW92ZXJyaWRkZW4sIHVzZSBzcyByZWdpc3RlciAqLworKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfU1M7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfQ1M6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfQ1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0NTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0VTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0VTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9FUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9GUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9GUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRlM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfR1M6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfR1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0dTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX1NTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX1NTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9TUzsKKysgICAgZGVmYXVsdDoKKyAjaWZkZWYJREVCVUcKKy0JCXByaW50aygiZXJyb3I6IHNob3VsZCBub3QgaGFwcGVuOiAgbXVsdGlwbGUgb3ZlcnJpZGVzLlxuIik7CisrICAgICAgICBwcmludGsoImVycm9yOiBzaG91bGQgbm90IGhhcHBlbjogIG11bHRpcGxlIG92ZXJyaWRlcy5cbiIpOworICNlbmRpZgorLQkJSEFMVF9TWVMoKTsKKy0JCXJldHVybiAwOworLQl9CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zMDIsMTQgKzMwNywxNCBAQCBCeXRlIHZhbHVlIHJlYWQgZnJvbSB0aGUgYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZmV0Y2hfZGF0YV9ieXRlKAorLQl1aW50IG9mZnNldCkKKyt1OAorK2ZldGNoX2RhdGFfYnl0ZSh1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZGIpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmRiKSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzIxLDE0ICszMjYsMTQgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF9kYXRhX3dvcmQoCistCXVpbnQgb2Zmc2V0KQorK3UxNgorK2ZldGNoX2RhdGFfd29yZCh1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZHcpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmR3KSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzQwLDE0ICszNDUsMTQgQEAgTG9uZyB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBmZXRjaF9kYXRhX2xvbmcoCistCXVpbnQgb2Zmc2V0KQorK3UzMgorK2ZldGNoX2RhdGFfbG9uZyh1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZGwpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmRsKSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzYwLDE1ICszNjUsMTQgQEAgQnl0ZSB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGZldGNoX2RhdGFfYnl0ZV9hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQpCisrdTgKKytmZXRjaF9kYXRhX2J5dGVfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRiKSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkYikgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zODEsMTUgKzM4NSwxNCBAQCBXb3JkIHZhbHVlIHJlYWQgZnJvbSB0aGUgYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGZldGNoX2RhdGFfd29yZF9hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQpCisrdTE2CisrZmV0Y2hfZGF0YV93b3JkX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkdykoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZHcpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDAyLDE1ICs0MDUsMTQgQEAgTG9uZyB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBmZXRjaF9kYXRhX2xvbmdfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3UzMgorK2ZldGNoX2RhdGFfbG9uZ19hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZGwpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmRsKSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQyNCwxNSArNDI2LDE0IEBAIHRoZSBjdXJyZW50ICdkZWZhdWx0JyBzZWdtZW50LCB3aGljaCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfYnl0ZSgKKy0JdWludCBvZmZzZXQsCistCXU4IHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0LCB1OCB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmIpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dyYikgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDQ2LDE1ICs0NDcsMTQgQEAgdGhlIGN1cnJlbnQgJ2RlZmF1bHQnIHNlZ21lbnQsIHdoaWNoIG1heSBoYXZlIGJlZW4gb3ZlcnJpZGRlbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgc3RvcmVfZGF0YV93b3JkKAorLQl1aW50IG9mZnNldCwKKy0JdTE2IHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV93b3JkKHVpbnQgb2Zmc2V0LCB1MTYgdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3J3KSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cncpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ2OCwxNSArNDY4LDE0IEBAIHRoZSBjdXJyZW50ICdkZWZhdWx0JyBzZWdtZW50LCB3aGljaCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfbG9uZygKKy0JdWludCBvZmZzZXQsCistCXUzMiB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfbG9uZyh1aW50IG9mZnNldCwgdTMyIHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dybCkoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3JsKSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00OTAsMTYgKzQ4OSwxNCBAQCBXcml0ZXMgYSBieXRlIHZhbHVlIHRvIGFuIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgc3RvcmVfZGF0YV9ieXRlX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCwKKy0JdTggdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2J5dGVfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHU4IHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dyYikoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3JiKSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTEzLDE2ICs1MTAsMTQgQEAgV3JpdGVzIGEgd29yZCB2YWx1ZSB0byBhbiBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfd29yZF9hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQsCistCXUxNiB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTE2IHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dydykoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3J3KSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTM2LDE2ICs1MzEsMTQgQEAgV3JpdGVzIGEgbG9uZyB2YWx1ZSB0byBhbiBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfbG9uZ19hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQsCistCXUzMiB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfbG9uZ19hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTMyIHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dybCkoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3JsKSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTU5LDM3ICs1NTIsMzcgQEAgUkVNQVJLUzoKKyBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZWdpc3RlciBnaXZlbiBieSB0aGUgUi9STSBmaWVsZCBvZiB0aGUKKyBtb2RybSBieXRlLCBmb3IgYnl0ZSBvcGVyYW5kcy4gQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCogZGVjb2RlX3JtX2J5dGVfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTggKgorK2RlY29kZV9ybV9ieXRlX3JlZ2lzdGVyKGludCByZWcpCisgeworLQlzd2l0Y2ggKHJlZykgeworLSAgICAgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIkFMIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQUw7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiQ0wiKTsKKy0JCXJldHVybiAmTS54ODYuUl9DTDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJETCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RMOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIkJMIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQkw7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiQUgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9BSDsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJDSCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0NIOworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYoIkRIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfREg7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiQkgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9CSDsKKy0JfQorLQlIQUxUX1NZUygpOworLQlyZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UIFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworKyAgICBzd2l0Y2ggKHJlZykgeworKyAgICBjYXNlIDA6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJBTCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0FMOworKyAgICBjYXNlIDE6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJDTCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0NMOworKyAgICBjYXNlIDI6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJETCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0RMOworKyAgICBjYXNlIDM6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCTCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0JMOworKyAgICBjYXNlIDQ6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJBSCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0FIOworKyAgICBjYXNlIDU6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJDSCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0NIOworKyAgICBjYXNlIDY6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJESCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0RIOworKyAgICBjYXNlIDc6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCSCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0JIOworKyAgICB9CisrICAgIEhBTFRfU1lTKCk7CisrICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBOT1QgUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNjAzLDM2ICs1OTYsMzYgQEAgUkVNQVJLUzoKKyBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZWdpc3RlciBnaXZlbiBieSB0aGUgUi9STSBmaWVsZCBvZiB0aGUKKyBtb2RybSBieXRlLCBmb3Igd29yZCBvcGVyYW5kcy4gIEFsc28gZW5hYmxlcyB0aGUgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2KiBkZWNvZGVfcm1fd29yZF9yZWdpc3RlcigKKy0JaW50IHJlZykKKyt1MTYgKgorK2RlY29kZV9ybV93b3JkX3JlZ2lzdGVyKGludCByZWcpCisgeworLQlzd2l0Y2ggKHJlZykgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIkFYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQVg7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiQ1giKTsKKy0JCXJldHVybiAmTS54ODYuUl9DWDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJEWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RYOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIkJYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQlg7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiU1AiKTsKKy0JCXJldHVybiAmTS54ODYuUl9TUDsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJCUCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JQOworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYoIlNJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfU0k7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiREkiKTsKKy0JCXJldHVybiAmTS54ODYuUl9ESTsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICBzd2l0Y2ggKHJlZykgeworKyAgICBjYXNlIDA6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJBWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0FYOworKyAgICBjYXNlIDE6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJDWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0NYOworKyAgICBjYXNlIDI6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJEWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0RYOworKyAgICBjYXNlIDM6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0JYOworKyAgICBjYXNlIDQ6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJTUCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX1NQOworKyAgICBjYXNlIDU6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCUCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0JQOworKyAgICBjYXNlIDY6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJTSSIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX1NJOworKyAgICBjYXNlIDc6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJESSIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0RJOworKyAgICB9CisrICAgIEhBTFRfU1lTKCk7CisgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBOT1RSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKyB9CisgCitAQCAtNjQ3LDM2ICs2NDAsMzYgQEAgUkVNQVJLUzoKKyBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZWdpc3RlciBnaXZlbiBieSB0aGUgUi9STSBmaWVsZCBvZiB0aGUKKyBtb2RybSBieXRlLCBmb3IgZHdvcmQgb3BlcmFuZHMuICBBbHNvIGVuYWJsZXMgdGhlIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiogZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTMyICoKKytkZWNvZGVfcm1fbG9uZ19yZWdpc3RlcihpbnQgcmVnKQorIHsKKyAgICAgc3dpdGNoIChyZWcpIHsKKy0gICAgICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJFQVgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FQVg7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiRUNYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUNYOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIkVEWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VEWDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJFQlgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FQlg7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiRVNQIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVNQOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIkVCUCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VCUDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJFU0kiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FU0k7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiRURJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRURJOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgIGNhc2UgMDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVBWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VBWDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRUNYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRUNYOworKyAgICBjYXNlIDI6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFRFgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FRFg7CisrICAgIGNhc2UgMzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVCWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VCWDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRVNQIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRVNQOworKyAgICBjYXNlIDU6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQlAiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQlA7CisrICAgIGNhc2UgNjoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVTSSIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VTSTsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRURJIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRURJOworKyAgICB9CisrICAgIEhBTFRfU1lTKCk7CisgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBOT1RSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKyB9CisgCitAQCAtNjkyLDEyNiArNjg1LDEyOSBAQCBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZWdpc3RlciBnaXZlbiBieSB0aGUgUi9STSBmaWVsZCBvZiB0aGUKKyBtb2RybSBieXRlLCBmb3Igd29yZCBvcGVyYW5kcywgbW9kaWZpZWQgZnJvbSBhYm92ZSBmb3IgdGhlIHdlaXJkbworIHNwZWNpYWwgY2FzZSBvZiBzZWdyZWcgb3BlcmFuZHMuICBBbHNvIGVuYWJsZXMgdGhlIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiogZGVjb2RlX3JtX3NlZ19yZWdpc3RlcigKKy0JaW50IHJlZykKKyt1MTYgKgorK2RlY29kZV9ybV9zZWdfcmVnaXN0ZXIoaW50IHJlZykKKyB7CistCXN3aXRjaCAocmVnKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiRVMiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FUzsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJDUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0NTOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIlNTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfU1M7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiRFMiKTsKKy0JCXJldHVybiAmTS54ODYuUl9EUzsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGKCJGUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0ZTOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIkdTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfR1M7CistCSAgY2FzZSA2OgorLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIklMTEVHQUwgU0VHUkVHIik7CistCQlicmVhazsKKy0JfQorLQlIQUxUX1NZUygpOworLQlyZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UIFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworKyAgICBzd2l0Y2ggKHJlZykgeworKyAgICBjYXNlIDA6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFUyIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VTOworKyAgICBjYXNlIDE6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJDUyIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0NTOworKyAgICBjYXNlIDI6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJTUyIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX1NTOworKyAgICBjYXNlIDM6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJEUyIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0RTOworKyAgICBjYXNlIDQ6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJGUyIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0ZTOworKyAgICBjYXNlIDU6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJHUyIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0dTOworKyAgICBjYXNlIDY6CisrICAgIGNhc2UgNzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgU0VHUkVHIik7CisrICAgICAgICBicmVhazsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworKyAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UIFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworIH0KKyAKKyAvKgorICAqCisgICogcmV0dXJuIG9mZnNldCBmcm9tIHRoZSBTSUIgQnl0ZQorICAqLworLXUzMiBkZWNvZGVfc2liX2FkZHJlc3MoaW50IHNpYiwgaW50IG1vZCkKKyt1MzIKKytkZWNvZGVfc2liX2FkZHJlc3MoaW50IHNpYiwgaW50IG1vZCkKKyB7CisgICAgIHUzMiBiYXNlID0gMCwgaSA9IDAsIHNjYWxlID0gMTsKKyAKKy0gICAgc3dpdGNoKHNpYiAmIDB4MDcpIHsKKysgICAgc3dpdGNoIChzaWIgJiAweDA3KSB7CisgICAgIGNhc2UgMDoKKy0JREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRUFYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQVhdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FQVg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlERUNPREVfUFJJTlRGKCJbRUNYXSIpOworLQliYXNlID0gTS54ODYuUl9FQ1g7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VDWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistCURFQ09ERV9QUklOVEYoIltFRFhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VEWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRURYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRURYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMzoKKy0JREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRUJYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlhdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FQlg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA0OgorLQlERUNPREVfUFJJTlRGKCJbRVNQXSIpOworLQliYXNlID0gTS54ODYuUl9FU1A7CistCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VTUF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VTUDsKKysgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA1OgorLQlpZiAobW9kID09IDApIHsKKy0JICAgIGJhc2UgPSBmZXRjaF9sb25nX2ltbSgpOworLQkgICAgREVDT0RFX1BSSU5URjIoIiUwOHgiLCBiYXNlKTsKKy0JfSBlbHNlIHsKKy0JICAgIERFQ09ERV9QUklOVEYoIltFQlBdIik7CistCSAgICBiYXNlID0gTS54ODYuUl9FU1A7CistCSAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKG1vZCA9PSAwKSB7CisrICAgICAgICAgICAgYmFzZSA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHgiLCBiYXNlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlBdIik7CisrICAgICAgICAgICAgYmFzZSA9IE0ueDg2LlJfRVNQOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA2OgorLQlERUNPREVfUFJJTlRGKCJbRVNJXSIpOworLQliYXNlID0gTS54ODYuUl9FU0k7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VTSTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDc6CistCURFQ09ERV9QUklOVEYoIltFREldIik7CistCWJhc2UgPSBNLng4Ni5SX0VESTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRURJXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRURJOworKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgc3dpdGNoICgoc2liID4+IDMpICYgMHgwNykgeworICAgICBjYXNlIDA6CistCURFQ09ERV9QUklOVEYoIltFQVgiKTsKKy0JaSA9IE0ueDg2LlJfRUFYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQVgiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VBWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistCURFQ09ERV9QUklOVEYoIltFQ1giKTsKKy0JaSA9IE0ueDg2LlJfRUNYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQ1giKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VDWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistCURFQ09ERV9QUklOVEYoIltFRFgiKTsKKy0JaSA9IE0ueDg2LlJfRURYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFRFgiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VEWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDM6CistCURFQ09ERV9QUklOVEYoIltFQlgiKTsKKy0JaSA9IE0ueDg2LlJfRUJYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlgiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VCWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDQ6CistCWkgPSAwOworLQlicmVhazsKKysgICAgICAgIGkgPSAwOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JREVDT0RFX1BSSU5URigiW0VCUCIpOworLQlpID0gTS54ODYuUl9FQlA7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VCUCIpOworKyAgICAgICAgaSA9IE0ueDg2LlJfRUJQOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiW0VTSSIpOworLQlpID0gTS54ODYuUl9FU0k7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VTSSIpOworKyAgICAgICAgaSA9IE0ueDg2LlJfRVNJOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNzoKKy0JREVDT0RFX1BSSU5URigiW0VESSIpOworLQlpID0gTS54ODYuUl9FREk7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VESSIpOworKyAgICAgICAgaSA9IE0ueDg2LlJfRURJOworKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgc2NhbGUgPSAxIDw8ICgoc2liID4+IDYpICYgMHgwMyk7CisgICAgIGlmICgoKHNpYiA+PiAzKSAmIDB4MDcpICE9IDQpIHsKKy0JaWYgKHNjYWxlID09IDEpIHsKKy0JICAgIERFQ09ERV9QUklOVEYoIl0iKTsKKy0JfSBlbHNlIHsKKy0JICAgIERFQ09ERV9QUklOVEYyKCIqJWRdIiwgc2NhbGUpOworLQl9CisrICAgICAgICBpZiAoc2NhbGUgPT0gMSkgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIl0iKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIqJWRdIiwgc2NhbGUpOworKyAgICAgICAgfQorICAgICB9CisgICAgIHJldHVybiBiYXNlICsgKGkgKiBzY2FsZSk7CisgfQorQEAgLTgzNiw3NCArODMyLDc1IEBAIE5PVEU6IAlUaGUgY29kZSB3aGljaCBzcGVjaWZpZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VnbWVudCAoZHMgdnMgc3MpCisgCQlpZiBhIFNTIGFjY2VzcyBpcyBuZWVkZWQsIHNldCB0aGlzIGJpdC4gIE90aGVyd2lzZSwgRFMgYWNjZXNzCisgCQlvY2N1cnMgKHVubGVzcyBhbnkgb2YgdGhlIHNlZ21lbnQgb3ZlcnJpZGUgYml0cyBhcmUgc2V0KS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBkZWNvZGVfcm0wMF9hZGRyZXNzKAorLQlpbnQgcm0pCisrdTMyCisrZGVjb2RlX3JtMDBfYWRkcmVzcyhpbnQgcm0pCisgeworICAgICB1MzIgb2Zmc2V0OworICAgICBpbnQgc2liOworIAorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKyAgICAgICAgIC8qIDMyLWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJbRUFYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRUFYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIltFQ1hdIik7CistCQlyZXR1cm4gTS54ODYuUl9FQ1g7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VEWDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJbRUJYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJYOworLQkgIGNhc2UgNDoKKy0JCXNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CistCQlyZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMCk7CistCSAgY2FzZSA1OgorLQkJb2Zmc2V0ID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCJbJTA4eF0iLCBvZmZzZXQpOworLQkJcmV0dXJuIG9mZnNldDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJbRVNJXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRVNJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIltFREldIik7CistCQlyZXR1cm4gTS54ODYuUl9FREk7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VBWDsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRUNYXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VDWDsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRURYXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VCWDsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAwKTsKKysgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBvZmZzZXQgPSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCJbJTA4eF0iLCBvZmZzZXQpOworKyAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FU0k7CisrICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VESV0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FREk7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgLyogMTYtYml0IGFkZHJlc3NpbmcgKi8KKy0Jc3dpdGNoIChybSkgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIltCWCtTSV0iKTsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlgrU0ldIik7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9TSSkgJiAweGZmZmY7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiW0JYK0RJXSIpOworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCWCtESV0iKTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX0RJKSAmIDB4ZmZmZjsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJbQlArU0ldIik7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCUCtTSV0iKTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfU0kpICYgMHhmZmZmOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIltCUCtESV0iKTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JQK0RJXSIpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgTS54ODYuUl9ESSkgJiAweGZmZmY7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiW1NJXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfU0k7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiW0RJXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfREk7CistCSAgY2FzZSA2OgorLQkJb2Zmc2V0ID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCJbJTA0eF0iLCBvZmZzZXQpOworLQkJcmV0dXJuIG9mZnNldDsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJbQlhdIik7CistCQlyZXR1cm4gTS54ODYuUl9CWDsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltTSV0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9TSTsKKysgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbREldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfREk7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgb2Zmc2V0ID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiWyUwNHhdIiwgb2Zmc2V0KTsKKysgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9CWDsKKysgICAgICAgIH0KKysgICAgICAgIEhBTFRfU1lTKCk7CisgICAgIH0KKyAgICAgcmV0dXJuIDA7CisgfQorQEAgLTkxOSw3OSArOTE2LDgwIEBAIFJFTUFSS1M6CisgUmV0dXJuIHRoZSBvZmZzZXQgZ2l2ZW4gYnkgbW9kPTAxIGFkZHJlc3NpbmcuICBBbHNvIGVuYWJsZXMgdGhlCisgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY29kZV9ybTAxX2FkZHJlc3MoCistCWludCBybSkKKyt1MzIKKytkZWNvZGVfcm0wMV9hZGRyZXNzKGludCBybSkKKyB7CisgICAgIGludCBkaXNwbGFjZW1lbnQgPSAwOworICAgICBpbnQgc2liOworIAorICAgICAvKiBGZXRjaCBkaXNwOCBpZiBubyBTSUIgYnl0ZSAqLworICAgICBpZiAoISgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpICYmIChybSA9PSA0KSkpCistCWRpc3BsYWNlbWVudCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgZGlzcGxhY2VtZW50ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworIAorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKyAgICAgICAgIC8qIDMyLWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJWRbRUFYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQVggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VDWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUNYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGMigiJWRbRUJYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA0OgorLQkJc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCWRpc3BsYWNlbWVudCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLQkJREVDT0RFX1BSSU5URjIoIiVkIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAxKSArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGMigiJWRbRUJQXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQlAgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VTSV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRVNJICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFREldIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VESSArIGRpc3BsYWNlbWVudDsKKy0JfQorLQlIQUxUX1NZUygpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQVhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQVggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VDWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRURYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMSkgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VCUF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VCUCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRVNJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVNJICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgLyogMTYtYml0IGFkZHJlc3NpbmcgKi8KKy0Jc3dpdGNoIChybSkgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtCWCtTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCWCtTSV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtCWCtESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCWCtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfREkgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtCUCtTSV0iLCBkaXNwbGFjZW1lbnQpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtCUCtESV0iLCBkaXNwbGFjZW1lbnQpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlArREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfREkgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtTSV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0RJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlBdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtCWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCWF0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKysgICAgICAgIEhBTFRfU1lTKCk7CisgICAgIH0KKyAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgIC8qIFNIT1VMRCBOT1QgSEFQUEVOICovCisgfQorQEAgLTEwMDcsODYgKzEwMDUsODcgQEAgUkVNQVJLUzoKKyBSZXR1cm4gdGhlIG9mZnNldCBnaXZlbiBieSBtb2Q9MTAgYWRkcmVzc2luZy4gIEFsc28gZW5hYmxlcyB0aGUKKyBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZGVjb2RlX3JtMTBfYWRkcmVzcygKKy0JaW50IHJtKQorK3UzMgorK2RlY29kZV9ybTEwX2FkZHJlc3MoaW50IHJtKQorIHsKKyAgICAgdTMyIGRpc3BsYWNlbWVudCA9IDA7CisgICAgIGludCBzaWI7CisgCisgICAgIC8qIEZldGNoIGRpc3AxNiBpZiAxNi1iaXQgYWRkciBtb2RlICovCisgICAgIGlmICghKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSkKKy0JZGlzcGxhY2VtZW50ID0gKHUxNilmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgZGlzcGxhY2VtZW50ID0gKHUxNikgZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgZWxzZSB7CistCS8qIEZldGNoIGRpc3AzMiBpZiBubyBTSUIgYnl0ZSAqLworLQlpZiAocm0gIT0gNCkKKy0JICAgIGRpc3BsYWNlbWVudCA9ICh1MzIpZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgIC8qIEZldGNoIGRpc3AzMiBpZiBubyBTSUIgYnl0ZSAqLworKyAgICAgICAgaWYgKHJtICE9IDQpCisrICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gKHUzMikgZmV0Y2hfbG9uZ19pbW0oKTsKKyAgICAgfQorIAorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKyAgICAgICAgIC8qIDMyLWJpdCBhZGRyZXNzaW5nICovCistICAgICAgc3dpdGNoIChybSkgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VBWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VDWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUNYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VEWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKy0JCXJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQlhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VCWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDQ6CistCQlzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworLQkJZGlzcGxhY2VtZW50ID0gKHUzMilmZXRjaF9sb25nX2ltbSgpOworLQkJREVDT0RFX1BSSU5URjIoIiUwOHgiLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDIpICsgZGlzcGxhY2VtZW50OworLQkJYnJlYWs7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRUJQXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQlAgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRVNJXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FU0kgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRURJXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFQVhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQVggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUNYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUNYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VEWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VCWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VCWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MzIpIGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHgiLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAyKSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlAgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRVNJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVNJICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VESSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIH0KKysgICAgICAgIEhBTFRfU1lTKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICAvKiAxNi1iaXQgYWRkcmVzc2luZyAqLworLSAgICAgIHN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJTA0eFtCUCtTSV0iLCBkaXNwbGFjZW1lbnQpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtCUCtTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlArREldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlArREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfREkgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtTSV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0RJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGMigiJTA0eFtCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtCUF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlhdIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOworICAgICAvKk5PVFJFQUNIRUQgKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9mcHUuYyBiL2xpYnMveDg2ZW11L2ZwdS5jCitpbmRleCBiNzJkZTFlLi4wZGFiMDVjIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvZnB1LmMKKysrKyBiL2xpYnMveDg2ZW11L2ZwdS5jCitAQCAtNDIsNyArNDIsOCBAQAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgLyogb3Bjb2RlPTB4ZDggKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkVTQyBEOFxuIik7CitAQCAtNTIsNyArNTMsNyBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYltdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYltdID0geworICAgICAiRkxEXHREV09SRCBQVFIgIiwgIkVTQ19EOVx0IiwgIkZTVFx0RFdPUkQgUFRSICIsICJGU1RQXHREV09SRCBQVFIgIiwKKyAgICAgIkZMREVOVlx0IiwgIkZMRENXXHQiLCAiRlNURU5WXHQiLCAiRlNUQ1dcdCIsCisgCitAQCAtNjMsNyArNjQsNyBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKyAgICAgIkZMREVOVlx0IiwgIkZMRENXXHQiLCAiRlNURU5WXHQiLCAiRlNUQ1dcdCIsCisgfTsKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWIxW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworICAgICAiRkxEXHQiLCAiRkxEXHQiLCAiRkxEXHQiLCAiRkxEXHQiLAorICAgICAiRkxEXHQiLCAiRkxEXHQiLCAiRkxEXHQiLCAiRkxEXHQiLAorIAorQEAgLTg5LDEwICs5MCwxMSBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWIxW10gPSB7CisgICAgICJGUk5ESU5UIiwgIkZTQ0FMRSIsICJFU0NfRDkiLCAiRVNDX0Q5IiwKKyB9OworIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKyAvKiBvcGNvZGU9MHhkOSAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworQEAgLTEwMyw1NiArMTA1LDU4IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgI2lmZGVmIERFQlVHCisgICAgIGlmIChtb2QgIT0gMykgeworICAgICAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2Q5X3RhYiwgbW9kLCByaCwgcmwpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URih4ODZlbXVfZnB1X29wX2Q5X3RhYjFbKHJoIDw8IDMpICsgcmxdKTsKKyAgICAgfQorICNlbmRpZgorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CistCQlpZiAocmggPCA0KSB7CistCQkJCURFQ09ERV9QUklOVEYyKCJTVCglZClcbiIsIHN0a2VsZW0pOworLQkJfSBlbHNlIHsKKy0JCQkJREVDT0RFX1BSSU5URigiXG4iKTsKKy0JCX0KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworKyAgICAgICAgaWYgKHJoIDwgNCkgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCJTVCglZClcbiIsIHN0a2VsZW0pOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICAvKiBleGVjdXRlICovCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkKFg4NkVNVV9GUFVfU1RLVE9QLCBzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meGNoKFg4NkVNVV9GUFVfU1RLVE9QLCBzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHN3aXRjaCAocmwpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9ub3AoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0cChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CisgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNocyhYODZFTVVfRlBVX1NUS1RPUCk7CitAQCAtMTczLDEzMyArMTc3LDEzMyBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHN3aXRjaCAocmwpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGQxKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbDJ0KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbDJlKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkcGkoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGRsZzIoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGRsbjIoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGR6KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIC8qIDcgKi8KKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHN3aXRjaCAocmwpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mMnhtMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z5bDJ4KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnB0YW4oWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mcGF0YW4oWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meHRyYWN0KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZGVjc3RwKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2luY3N0cCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnByZW0oWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meWwyeHAxKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnNxcnQoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mcm5kaW50KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnNjYWxlKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDY6CistICAgICAgICAgICAgICBjYXNlIDc6CistICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0KFg4NkVNVV9GUFVfRkxPQVQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfRkxPQVQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGRlbnYoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkY3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0ZW52KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdGN3KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CistI2VuZGlmIC8qIFg4NkVNVV9GUFVfUFJFU0VOVCAqLworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYODZFTVVfRlBVX1BSRVNFTlQgKi8KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKKyB9CisgCisgI2lmZGVmIERFQlVHCisgCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kYV90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYV90YWJbXSA9IHsKKyAgICAgIkZJQUREXHREV09SRCBQVFIgIiwgIkZJTVVMXHREV09SRCBQVFIgIiwgIkZJQ09NXHREV09SRCBQVFIgIiwKKyAgICAgIkZJQ09NUFx0RFdPUkQgUFRSICIsCisgICAgICJGSVNVQlx0RFdPUkQgUFRSICIsICJGSVNVQlJcdERXT1JEIFBUUiAiLCAiRklESVZcdERXT1JEIFBUUiAiLAorQEAgLTMwOSw3ICszMTMsNyBAQCBjaGFyICp4ODZlbXVfZnB1X29wX2RhX3RhYltdID0geworICAgICAiRklDT01QXHREV09SRCBQVFIgIiwKKyAgICAgIkZJU1VCXHREV09SRCBQVFIgIiwgIkZJU1VCUlx0RFdPUkQgUFRSICIsICJGSURJVlx0RFdPUkQgUFRSICIsCisgICAgICJGSURJVlJcdERXT1JEIFBUUiAiLAorLSAgICAKKysKKyAgICAgIkZJQUREXHREV09SRCBQVFIgIiwgIkZJTVVMXHREV09SRCBQVFIgIiwgIkZJQ09NXHREV09SRCBQVFIgIiwKKyAgICAgIkZJQ09NUFx0RFdPUkQgUFRSICIsCisgICAgICJGSVNVQlx0RFdPUkQgUFRSICIsICJGSVNVQlJcdERXT1JEIFBUUiAiLCAiRklESVZcdERXT1JEIFBUUiAiLAorQEAgLTMxOSwxMCArMzIzLDExIEBAIGNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7CisgICAgICJFU0NfREEgICAgICIsICJFU0NfREEgIiwgIkVTQ19EQSAgICIsICJFU0NfREEgIiwKKyB9OworIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKyAvKiBvcGNvZGU9MHhkYSAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworQEAgLTMzMiw1OSArMzM3LDU5IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kYV90YWIsIG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpLFNUXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lhZGQoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faW11bChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pY29tKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ljb21wKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lzdWIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faXN1YnIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWRpdihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pZGl2cihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC0zOTIsNyArMzk3LDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1jaGFyICp4ODZlbXVfZnB1X29wX2RiX3RhYltdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RiX3RhYltdID0geworICAgICAiRklMRFx0RFdPUkQgUFRSICIsICJFU0NfREJcdDE5IiwgIkZJU1RcdERXT1JEIFBUUiAiLCAiRklTVFBcdERXT1JEIFBUUiAiLAorICAgICAiRVNDX0RCXHQxQyIsICJGTERcdFRCWVRFIFBUUiAiLCAiRVNDX0RCXHQxRSIsICJGU1RQXHRUQllURSBQVFIgIiwKKyAKK0BAIC00MDMsMTAgKzQwOCwxMSBAQCBjaGFyICp4ODZlbXVfZnB1X29wX2RiX3RhYltdID0geworICAgICAiRVNDX0RCXHQxQyIsICJGTERcdFRCWVRFIFBUUiAiLCAiRVNDX0RCXHQxRSIsICJGU1RQXHRUQllURSBQVFIgIiwKKyB9OworIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKyAvKiBvcGNvZGU9MHhkYiAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworQEAgLTQxNiwxMDQgKzQyMiwxMDYgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAjaWZkZWYgREVCVUcKKyAgICAgaWYgKG1vZCAhPSAzKSB7CisgICAgICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGJfdGFiLCBtb2QsIHJoLCBybCk7CistICAgIH0gZWxzZSBpZiAocmggPT0gNCkgeyAgICAgICAvKiA9PT0gMTEgMTAgMCBubm4gKi8KKysgICAgfQorKyAgICBlbHNlIGlmIChyaCA9PSA0KSB7ICAgICAgICAgLyogPT09IDExIDEwIDAgbm5uICovCisgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGRU5JXG4iKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkZESVNJXG4iKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkZDTEVYXG4iKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkZJTklUXG4iKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJFU0NfREIgJTB4XG4iLCAobW9kIDw8IDYpICsgKHJoIDw8IDMpICsgKHJsKSk7CisgICAgIH0KKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCisgICAgIC8qIGV4ZWN1dGUgKi8KKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHN3aXRjaCAocmwpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZW5pKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXNpKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZjbGV4KCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zpbml0KCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlsZChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9MREJMLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdHAoWDg2RU1VX0ZQVV9MREJMLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworICNlbmRpZgorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpOworIH0KKyAKKyAjaWZkZWYgREVCVUcKKy1jaGFyICp4ODZlbXVfZnB1X29wX2RjX3RhYltdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RjX3RhYltdID0geworICAgICAiRkFERFx0UVdPUkQgUFRSICIsICJGTVVMXHRRV09SRCBQVFIgIiwgIkZDT01cdFFXT1JEIFBUUiAiLAorICAgICAiRkNPTVBcdFFXT1JEIFBUUiAiLAorICAgICAiRlNVQlx0UVdPUkQgUFRSICIsICJGU1VCUlx0UVdPUkQgUFRSICIsICJGRElWXHRRV09SRCBQVFIgIiwKK0BAIC01MzIsMTAgKzU0MCwxMSBAQCBjaGFyICp4ODZlbXVfZnB1X29wX2RjX3RhYltdID0geworICAgICAiRkFERFx0IiwgIkZNVUxcdCIsICJGQ09NXHQiLCAiRkNPTVBcdCIsCisgICAgICJGU1VCUlx0IiwgIkZTVUJcdCIsICJGRElWUlx0IiwgIkZESVZcdCIsCisgfTsKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGMgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC01NDUsODUgKzU1NCw4NSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGNfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpLFNUXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICAvKiBleGVjdXRlICovCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmFkZChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZm11bChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbShzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJyKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3ViKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGl2cihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZhZGQoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZtdWwoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zjb20oWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zjb21wKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3ViKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3VicihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmRpdihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmRpdnIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisgI2Vsc2UKKy0gICAgKHZvaWQpZGVzdG9mZnNldDsKKy0gICAgKHZvaWQpc3RrZWxlbTsKKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworICNlbmRpZgorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpOworQEAgLTYzMSw3ICs2NDAsNyBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RkX3RhYltdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RkX3RhYltdID0geworICAgICAiRkxEXHRRV09SRCBQVFIgIiwgIkVTQ19ERFx0MjksIiwgIkZTVFx0UVdPUkQgUFRSICIsICJGU1RQXHRRV09SRCBQVFIgIiwKKyAgICAgIkZSU1RPUlx0IiwgIkVTQ19ERFx0MkQsIiwgIkZTQVZFXHQiLCAiRlNUU1dcdCIsCisgCitAQCAtNjQ1LDEwICs2NTQsMTEgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGRfdGFiW10gPSB7CisgICAgICJFU0NfRERcdDJDLCIsICJFU0NfRERcdDJELCIsICJFU0NfRERcdDJFLCIsICJFU0NfRERcdDJGLCIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGQgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC02NTgsNzUgKzY2OCw3NSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGRfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpLFNUXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3QoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdHAoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zyc3RvcihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnNhdmUoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RzdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisgI2Vsc2UKKy0gICAgKHZvaWQpZGVzdG9mZnNldDsKKy0gICAgKHZvaWQpc3RrZWxlbTsKKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworICNlbmRpZgorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpOworQEAgLTczNCw4ICs3NDQsNyBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RlX3RhYltdID0KKy17Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGVfdGFiW10gPSB7CisgICAgICJGSUFERFx0V09SRCBQVFIgIiwgIkZJTVVMXHRXT1JEIFBUUiAiLCAiRklDT01cdFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdFdPUkQgUFRSICIsCisgICAgICJGSVNVQlx0V09SRCBQVFIgIiwgIkZJU1VCUlx0V09SRCBQVFIgIiwgIkZJRElWXHRXT1JEIFBUUiAiLAorQEAgLTc1NSwxMCArNzY0LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RlX3RhYltdID0KKyAgICAgIkZTVUJSUFx0IiwgIkZTVUJQXHQiLCAiRkRJVlJQXHQiLCAiRkRJVlBcdCIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGUgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC03NjgsODcgKzc3OCw4NyBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGVfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpLFNUXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZhZGRwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbXVscChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgaWYgKHN0a2VsZW0gPT0gMSkKKy0gICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY29tcHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworKyAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXBwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKysgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YnJwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3VicChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnJwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGl2cChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpYWRkKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmltdWwoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWNvbShYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpY29tcChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3ViKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdWJyKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlkaXYoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWRpdnIoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC04NTYsNyArODY2LDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZl90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZl90YWJbXSA9IHsKKyAgICAgLyogbW9kID09IDAwICovCisgICAgICJGSUxEXHRXT1JEIFBUUiAiLCAiRVNDX0RGXHQzOVxuIiwgIkZJU1RcdFdPUkQgUFRSICIsICJGSVNUUFx0V09SRCBQVFIgIiwKKyAgICAgIkZCTERcdFRCWVRFIFBUUiAiLCAiRklMRFx0UVdPUkQgUFRSICIsICJGQlNUUFx0VEJZVEUgUFRSICIsCitAQCAtODc3LDEwICs4ODcsMTEgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7CisgICAgICJFU0NfREZcdDNDLCIsICJFU0NfREZcdDNELCIsICJFU0NfREZcdDNFLCIsICJFU0NfREZcdDNGLCIKKyB9OworIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKyAvKiBvcGNvZGU9MHhkZiAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworQEAgLTg5MCw3NSArOTAxLDc1IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kZl90YWIsIG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgc3RrZWxlbSA9ICh1OCkgcmw7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZClcbiIsIHN0a2VsZW0pOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmZyZWUoc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnhjaChzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3Qoc3RrZWxlbSk7ICAvKiByZWdpc3RlciB2ZXJzaW9uICovCisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0cChzdGtlbGVtKTsgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlsZChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3RwKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmJsZChYODZFTVVfRlBVX0JTRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlsZChYODZFTVVfRlBVX0xPTkcsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zic3RwKFg4NkVNVV9GUFVfQlNELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0cChYODZFTVVfRlBVX0xPTkcsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisgI2Vsc2UKKy0gICAgKHZvaWQpZGVzdG9mZnNldDsKKy0gICAgKHZvaWQpc3RrZWxlbTsKKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworICNlbmRpZgorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpOworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L29wcy5jIGIvbGlicy94ODZlbXUvb3BzLmMKK2luZGV4IDRmNTA0YzkuLjc2YjgzNTggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9vcHMuYworKysrIGIvbGlicy94ODZlbXUvb3BzLmMKK0BAIC04MSwxNyArODEsMTcgQEAgb3AxIC0gSW5zdHJ1Y3Rpb24gb3AgY29kZQorIFJFTUFSS1M6CisgSGFuZGxlcyBpbGxlZ2FsIG9wY29kZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorLSAgICB1OCBvcDEpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbGxlZ2FsX29wKHU4IG9wMSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5SX1NQICE9IDApIHsKKy0gICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBYODYgT1BDT0RFXG4iKTsKKy0gICAgVFJBQ0VfUkVHUygpOworLSAgICBwcmludGsoIiUwNHg6JTA0eDogJTAyWCBJTExFR0FMIFg4NiBPUENPREUhXG4iLAorLSAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUC0xLG9wMSk7CistICAgIEhBTFRfU1lTKCk7CistICAgICAgICB9CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIFg4NiBPUENPREVcbiIpOworKyAgICAgICAgVFJBQ0VfUkVHUygpOworKyAgICAgICAgREIocHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggSUxMRUdBTCBYODYgT1BDT0RFIVxuIiwKKysgICAgICAgICAgICAgICAgICBNLng4Ni5SX0NTLCBNLng4Ni5SX0lQIC0gMSwgb3AxKSk7CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgICAgIGVsc2UgeworICAgICAgICAgLyogSWYgd2UgZ2V0IGhlcmUsIGl0IG1lYW5zIHRoZSBzdGFjayBwb2ludGVyIGlzIGJhY2sgdG8gemVybworICAgICAgICAgICogc28gd2UgYXJlIGp1c3QgcmV0dXJuaW5nIGZyb20gYW4gZW11bGF0b3Igc2VydmljZSBjYWxsCitAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2lsbGVnYWxfb3AoCisgICAgICAgICAgKiBjYWxsLgorICAgICAgICAgICovCisgICAgICAgICBYODZFTVVfaGFsdF9zeXMoKTsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCitAQCAtMTA4LDcgKzEwOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2lsbGVnYWxfb3AoCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDAwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTQ5LDcgKzE1MCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IGFkZF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0xNjYsNyArMTY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDAxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTg4LDcgKzE5MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yMTUsNyArMjE4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI0Miw3ICsyNDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjU2LDkgKzI2MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yNjYsOCArMjcxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yODYsNyArMjkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDAyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0zMjQsNyArMzMxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBhZGRfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMzQxLDcgKzM0OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMzYyLDcgKzM3MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTM4Nyw3ICszOTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC00MTIsNyArNDIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNDI1LDkgKzQzNiw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNDM1LDggKzQ0Niw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNDU1LDcgKzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtNDczLDcgKzQ4Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtNDgxLDcgKzQ5NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQUREXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQUREXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC00ODksOCArNTA0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGFkZF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IGFkZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBhZGRfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNTAwLDcgKzUxNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RVNcbiIpOworQEAgLTUxNCw3ICs1MzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFU1xuIik7CitAQCAtNTI4LDcgKzU0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNTY5LDcgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gb3JfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtNTg2LDcgKzYwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTYwOCw3ICs2MjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTYzNSw3ICs2NTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTY2Miw3ICs2ODQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTY3Niw5ICs2OTksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02ODYsOCArNzA5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNzA2LDcgKzczMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNzQ0LDcgKzc2OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC03NjEsNyArNzg2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC03ODIsNyArODA4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTgwNyw3ICs4MzQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtODMyLDcgKzg2MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC04NDUsOSArODc0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtODU1LDggKzg4NCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTg3NSw3ICs5MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTg5Myw3ICs5MjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTkwMSw3ICs5MzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPUlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtOTA5LDggKzk0Miw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IG9yX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gb3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gb3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTIwLDcgKzk1NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRDU1xuIik7CitAQCAtOTM0LDE4ICs5NjksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLiBFc2NhcGUgZm9yIHR3by1ieXRlIG9wY29kZSAoMjg2IG9yIGJldHRlcikKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3R3b19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3R3b19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHU4IG9wMiA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgdTggb3AyID0gKCpzeXNfcmRiKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrCisgICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworLSAgICAoKng4NmVtdV9vcHRhYjJbb3AyXSkob3AyKTsKKysgICAgKCp4ODZlbXVfb3B0YWIyW29wMl0pIChvcDIpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtOTg2LDcgKzEwMjQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBhZGNfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTAwMyw3ICsxMDQxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTAyNSw3ICsxMDY0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTEwNTIsNyArMTA5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xMDc5LDcgKzExMjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTA5Myw5ICsxMTM1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTExMDMsOCArMTE0NSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTEyMyw3ICsxMTY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDEyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY19ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0xMTYxLDcgKzEyMDUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IGFkY19ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0xMTc4LDcgKzEyMjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTExOTksNyArMTI0NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTEyMjQsNyArMTI3MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTEyNDksNyArMTI5Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTEyNjIsOSArMTMxMCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gYWRjX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTI3Miw4ICsxMzIwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMjkyLDcgKzEzNDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTEzMTAsNyArMTM2MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMTMxOCw3ICsxMzY5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJBRENcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJBRENcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTEzMjYsOCArMTM3OCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBhZGNfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBhZGNfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gYWRjX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTEzMzcsNyArMTM5MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0U1NcbiIpOworQEAgLTEzNTEsNyArMTQwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQT1BcdFNTXG4iKTsKK0BAIC0xMzY1LDcgKzE0MjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMTQwNiw3ICsxNDYyLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gc2JiX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTE0MjMsNyArMTQ3OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE0NDUsNyArMTUwMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xNDcyLDcgKzE1MzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTQ5OSw3ICsxNTU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE1MTMsOSArMTU3Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNTIzLDggKzE1ODMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE1NDMsNyArMTYwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMTU4MSw3ICsxNjQzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzYmJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMTU5OCw3ICsxNjYwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xNjE5LDcgKzE2ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNjQ0LDcgKzE3MDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNjY5LDcgKzE3MzQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNjgyLDkgKzE3NDgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE2OTIsOCArMTc1OCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTcxMiw3ICsxNzc5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0xNzMwLDcgKzE3OTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTE3MzgsNyArMTgwNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU0JCXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU0JCXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0xNzQ2LDggKzE4MTYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gc2JiX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gc2JiX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IHNiYl93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0xNzU3LDcgKzE4MjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERTXG4iKTsKK0BAIC0xNzcxLDcgKzE4NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHREU1xuIik7CitAQCAtMTc4NSw3ICsxODU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE4MzAsNyArMTkwNCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CisgCistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0xODQ3LDcgKzE5MjEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xODY5LDcgKzE5NDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTg5Niw3ICsxOTcyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE5MjMsNyArMjAwMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xOTM3LDkgKzIwMTUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTk0Nyw4ICsyMDI1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xOTY3LDcgKzIwNDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTIwMDUsNyArMjA4NSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gYW5kX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTIwMjIsNyArMjEwMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjA0Myw3ICsyMTI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjA2OSw3ICsyMTUxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTIwOTQsNyArMjE3Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTIxMDcsOSArMjE5MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjExNyw4ICsyMjAxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yMTM3LDcgKzIyMjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTIxNTUsNyArMjI0MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMjE2Myw3ICsyMjUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJBTkRcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJBTkRcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTIxNzEsOCArMjI1OSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBhbmRfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBhbmRfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gYW5kX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTIxODIsNyArMjI3MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkVTOlxuIik7CitAQCAtMjE5OSw3ICsyMjg5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiREFBXG4iKTsKK0BAIC0yMjEzLDcgKzIzMDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMjI1NCw3ICsyMzQ2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gc3ViX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTIyNzEsNyArMjM2Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTIyOTMsNyArMjM4Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yMzIwLDcgKzI0MTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjM0Nyw3ICsyNDQyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTIzNjEsOSArMjQ1Nyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yMzcxLDggKzI0NjcsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTIzOTEsNyArMjQ4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMjQyOSw3ICsyNTI3LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzdWJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMjQ0Niw3ICsyNTQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDJiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yNDY3LDcgKzI1NjYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yNDkyLDcgKzI1OTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yNTE3LDcgKzI2MTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yNTMwLDkgKzI2MzIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI1NDAsOCArMjY0Miw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjU2MCw3ICsyNjYzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDJjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0yNTc4LDcgKzI2ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTI1ODYsNyArMjY5MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU1VCXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU1VCXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0yNTk0LDggKzI3MDAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gc3ViX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gc3ViX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IHN1Yl93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yNjA1LDcgKzI3MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDUzpcbiIpOworQEAgLTI2MTksNyArMjcyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDJmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBU1xuIik7CitAQCAtMjYzMyw3ICsyNzQyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTI2NzQsNyArMjc4NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHhvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0yNjkxLDcgKzI4MDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0yNzEzLDcgKzI4MjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjc0MCw3ICsyODUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI3NjcsNyArMjg4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNzgxLDkgKzI4OTUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjc5MSw4ICsyOTA1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yODExLDcgKzI5MjYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTI4NDksNyArMjk2NSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0geG9yX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTI4NjYsNyArMjk4Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjg4Nyw3ICszMDA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjkxMiw3ICszMDMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjkzNyw3ICszMDU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjk1MCw5ICszMDcwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3Jfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yOTYwLDggKzMwODAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI5ODAsNyArMzEwMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMjk5OCw3ICszMTIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0zMDA2LDcgKzMxMjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhPUlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhPUlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMzAxNCw4ICszMTM4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHhvcl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHhvcl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSB4b3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMzAyNSw3ICszMTUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU1M6XG4iKTsKK0BAIC0zMDM5LDcgKzMxNjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJBQUFcbiIpOworQEAgLTMwNTMsNyArMzE4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMzA5MSw3ICszMjE5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgY21wX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTMxMDgsNyArMzIzNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTMxMjksNyArMzI1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0zMTU0LDcgKzMyODQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMzE3OSw3ICszMzEwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTMxOTIsOSArMzMyNCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGNtcF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMyMDIsOCArMzMzNCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMyMjIsNyArMzM1NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMzI2MCw3ICszMzk0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgY21wX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTMyNzcsNyArMzQxMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMzI5OCw3ICszNDMzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTMzMjMsNyArMzQ1OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zMzQ4LDcgKzM0ODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMzM2MSw5ICszNDk5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgY21wX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMzM3MSw4ICszNTA5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMzM5MSw3ICszNTMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0zNDA5LDcgKzM1NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTM0MTcsNyArMzU1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ01QXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ01QXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0zNDI1LDggKzM1NjcsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTM0MzYsNyArMzU3OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRTOlxuIik7CitAQCAtMzQ1MCw3ICszNTk0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2YKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2Fhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFTXG4iKTsKK0BAIC0zNDY0LDE4ICszNjA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Fhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGluY19sb25nKE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBpbmNfd29yZChNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzQ4NiwxOCArMzYzNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBpbmNfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0NYID0gaW5jX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1MDgsMTggKzM2NTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gaW5jX2xvbmcoTS54ODYuUl9FRFgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9EWCA9IGluY193b3JkKE0ueDg2LlJfRFgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTMwLDE4ICszNjg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IGluY19sb25nKE0ueDg2LlJfRUJYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlggPSBpbmNfd29yZChNLng4Ni5SX0JYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzU1MiwxOCArMzcwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBpbmNfbG9uZyhNLng4Ni5SX0VTUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NQID0gaW5jX3dvcmQoTS54ODYuUl9TUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1NzQsMTggKzM3MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gaW5jX2xvbmcoTS54ODYuUl9FQlApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CUCA9IGluY193b3JkKE0ueDg2LlJfQlApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTk2LDE4ICszNzU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IGluY19sb25nKE0ueDg2LlJfRVNJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU0kgPSBpbmNfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzYxOCwxOCArMzc4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBpbmNfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RJID0gaW5jX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2NDAsMTggKzM4MDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEFYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gZGVjX2xvbmcoTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BWCA9IGRlY193b3JkKE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNjYyLDE4ICszODM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQ1hcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRDWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VDWCA9IGRlY19sb25nKE0ueDg2LlJfRUNYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQ1ggPSBkZWNfd29yZChNLng4Ni5SX0NYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzY4NCwxOCArMzg1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRFggPSBkZWNfbG9uZyhNLng4Ni5SX0VEWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RYID0gZGVjX3dvcmQoTS54ODYuUl9EWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3MDYsMTggKzM4ODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gZGVjX2xvbmcoTS54ODYuUl9FQlgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CWCA9IGRlY193b3JkKE0ueDg2LlJfQlgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzI4LDE4ICszOTA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFU1BcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRTUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTUCA9IGRlY19sb25nKE0ueDg2LlJfRVNQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU1AgPSBkZWNfd29yZChNLng4Ni5SX1NQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzc1MCwxOCArMzkzNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0QlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlAgPSBkZWNfbG9uZyhNLng4Ni5SX0VCUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JQID0gZGVjX3dvcmQoTS54ODYuUl9CUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3NzIsMTggKzM5NTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gZGVjX2xvbmcoTS54ODYuUl9FU0kpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TSSA9IGRlY193b3JkKE0ueDg2LlJfU0kpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzk0LDE4ICszOTg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFRElcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRESVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VESSA9IGRlY19sb25nKE0ueDg2LlJfRURJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfREkgPSBkZWNfd29yZChNLng4Ni5SX0RJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzgxNiwxOCArNDAwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEFYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4MzgsMTggKzQwMzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDUxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFQ1hcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUNYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzg2MCwxOCArNDA1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHREWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FRFgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfRFgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zODgyLDE4ICs0MDg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9CWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM5MDQsMjMgKzQxMDksMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFU1BcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistCS8qIEFsd2F5cyBwdXNoIChFKVNQLCBzaW5jZSB3ZSBhcmUgZW11bGF0aW5nIGFuIGkzODYgYW5kIGFib3ZlCistCSAqIHByb2Nlc3Nvci4gVGhpcyBpcyBuZWNlc3NhcnkgYXMgc29tZSBCSU9TJ2VzIHVzZSB0aGlzIHRvIGNoZWNrCistCSAqIHdoYXQgdHlwZSBvZiBwcm9jZXNzb3IgaXMgaW4gdGhlIHN5c3RlbS4KKy0JICovCistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJcHVzaF9sb25nKE0ueDg2LlJfRVNQKTsKKy0JfSBlbHNlIHsKKy0JCXB1c2hfd29yZCgodTE2KShNLng4Ni5SX1NQKSk7CisrICAgIC8qIEFsd2F5cyBwdXNoIChFKVNQLCBzaW5jZSB3ZSBhcmUgZW11bGF0aW5nIGFuIGkzODYgYW5kIGFib3ZlCisrICAgICAqIHByb2Nlc3Nvci4gVGhpcyBpcyBuZWNlc3NhcnkgYXMgc29tZSBCSU9TJ2VzIHVzZSB0aGlzIHRvIGNoZWNrCisrICAgICAqIHdoYXQgdHlwZSBvZiBwcm9jZXNzb3IgaXMgaW4gdGhlIHN5c3RlbS4KKysgICAgICovCisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRVNQKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSAoTS54ODYuUl9TUCkpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMzkzMCwxOCArNDEzOCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQlApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQlApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTUyLDE4ICs0MTYzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VTSSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9TSSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM5NzQsMTggKzQxODgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFRElcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0RJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzk5NiwxOCArNDIxMywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEFYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MDE4LDE4ICs0MjM4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQ1hcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRDWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VDWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0NYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDA0MCwxOCArNDI2MywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9EWCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQwNjIsMTggKzQyODgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlggPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MDg0LDE4ICs0MzEzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFU1BcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTUCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NQID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDEwNiwxOCArNDMzOCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0QlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlAgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CUCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxMjgsMTggKzQzNjMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU0kgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MTUwLDE4ICs0Mzg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFRElcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRESVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VESSA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RJID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDE3MiwxMiArNDQxMywxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIQURcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEFcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNDE5Miw3ICs0NDM1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUJQKTsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VTSSk7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FREkpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdTE2IG9sZF9zcCA9IE0ueDg2LlJfU1A7CisgCisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9BWCk7CitAQCAtNDIxMiwxMiArNDQ1NiwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDYxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BBRFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BBXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTQyMjUsMTYgKzQ0NzEsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBNLng4Ni5SX0VESSA9IHBvcF9sb25nKCk7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHBvcF9sb25nKCk7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IHBvcF9sb25nKCk7CistICAgICAgICBNLng4Ni5SX0VTUCArPSA0OyAgICAgICAgICAgICAgLyogc2tpcCBFU1AgKi8KKysgICAgICAgIE0ueDg2LlJfRVNQICs9IDQ7ICAgICAgIC8qIHNraXAgRVNQICovCisgICAgICAgICBNLng4Ni5SX0VCWCA9IHBvcF9sb25nKCk7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IHBvcF9sb25nKCk7CisgICAgICAgICBNLng4Ni5SX0VDWCA9IHBvcF9sb25nKCk7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RJID0gcG9wX3dvcmQoKTsKKyAgICAgICAgIE0ueDg2LlJfU0kgPSBwb3Bfd29yZCgpOworICAgICAgICAgTS54ODYuUl9CUCA9IHBvcF93b3JkKCk7CistICAgICAgICBNLng4Ni5SX1NQICs9IDI7ICAgICAgICAgICAgICAgLyogc2tpcCBTUCAqLworKyAgICAgICAgTS54ODYuUl9TUCArPSAyOyAgICAgICAgLyogc2tpcCBTUCAqLworICAgICAgICAgTS54ODYuUl9CWCA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX0RYID0gcG9wX3dvcmQoKTsKKyAgICAgICAgIE0ueDg2LlJfQ1ggPSBwb3Bfd29yZCgpOworQEAgLTQyNTEsNyArNDQ5OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJGUzpcbiIpOworQEAgLTQyNjgsNyArNDUxNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfR1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkdTOlxuIik7CitAQCAtNDI4NSw3ICs0NTM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjYgLSBwcmVmaXggZm9yIDMyLWJpdCByZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2RhdGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHJlZml4X2RhdGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiREFUQTpcbiIpOworQEAgLTQyOTksNyArNDU0OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjcgLSBwcmVmaXggZm9yIDMyLWJpdCBhZGRyZXNzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wcmVmaXhfYWRkcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wcmVmaXhfYWRkcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJBRERSOlxuIik7CitAQCAtNDMxMywyMiArNDU2NCwyNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wcmVmaXhfYWRkcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIGltbTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorICAgICBERUNPREVfUFJJTlRGMigiUFVTSFx0JXhcbiIsIGltbSk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKGltbSk7CistICAgIH0gZWxzZSB7CistICAgICAgICBwdXNoX3dvcmQoKHUxNilpbW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIGltbSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC00MzM4LDcgKzQ1OTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTQzNTEsNyArNDYwNiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworICAgICAgICAgICAgIHMzMiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKK0BAIC00MzU5LDE4ICs0NjE0LDIwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSBzcmN2YWwsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTQzODEsMjQgKzQ2MzgsMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisrICAgICAgICAgICAgcmVzID0gKHMxNikgc3JjdmFsICooczE2KSBpbW07CisrCisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworICAgICAgICAgICAgIHMzMiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKK0BAIC00NDA2LDE4ICs0NjY1LDIwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSBzcmN2YWwsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTQ0MjgsMjQgKzQ2ODksMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisrICAgICAgICAgICAgcmVzID0gKHMxNikgc3JjdmFsICooczE2KSBpbW07CisrCisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworICAgICAgICAgICAgIHMzMiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKK0BAIC00NDUzLDE4ICs0NzE2LDIwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSBzcmN2YWwsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTQ0NzUsNDIgKzQ3NDAsNDYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisrICAgICAgICAgICAgcmVzID0gKHMxNikgc3JjdmFsICooczE2KSBpbW07CisrCisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworICAgICAgICAgICAgIHMzMiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpzcmNyZWcsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBzcmNyZWcsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTMyIHJlczsKKyAgICAgICAgICAgICBzMTYgaW1tOworIAorQEAgLTQ1MTgsMTYgKzQ3ODcsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpzcmNyZWcgKiAoczE2KWltbTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogc3JjcmVnICogKHMxNikgaW1tOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC00NTM5LDE4ICs0ODA5LDIwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHMxNiBpbW07CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CistICAgIGltbSA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworKyAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCJQVVNIXHQlZFxuIiwgaW1tKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCXB1c2hfbG9uZygoczMyKWltbSk7CistICAgIH0gZWxzZSB7CistCXB1c2hfd29yZChpbW0pOworKyAgICAgICAgcHVzaF9sb25nKChzMzIpIGltbSk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoaW1tKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTQ1NjAsMTEgKzQ4MzIsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDZiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgczggIGltbTsKKysgICAgczggaW1tOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHQiKTsKK0BAIC00NTc0LDI1ICs0ODQ3LDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSBzcmN2YWwsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTQ2MDIsNDIgKzQ4NzcsNDYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisrICAgICAgICAgICAgcmVzID0gKHMxNikgc3JjdmFsICooczE2KSBpbW07CisrCisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSBzcmN2YWwsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTQ2NDcsNDIgKzQ5MjYsNDYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisrICAgICAgICAgICAgcmVzID0gKHMxNikgc3JjdmFsICooczE2KSBpbW07CisrCisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSBzcmN2YWwsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTQ2OTIsNTcgKzQ5NzUsNjIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisrICAgICAgICAgICAgcmVzID0gKHMxNikgc3JjdmFsICooczE2KSBpbW07CisrCisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqc3JjcmVnLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogc3JjcmVnLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiByZXM7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKnNyY3JlZyAqIChzMTYpaW1tOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBzcmNyZWcgKiAoczE2KSBpbW07CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTQ3NTQsNyArNTA0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5TQlxuIik7CitAQCAtNDc2OCwxMyArNTA1NywxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDZkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOU0RcbiIpOworICAgICAgICAgaW5zKDQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5TV1xuIik7CisgICAgICAgICBpbnMoMik7CisgICAgIH0KK0BAIC00Nzg3LDcgKzUwNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDZlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3V0c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk9VVFNCXG4iKTsKK0BAIC00ODAxLDEzICs1MDkzLDE1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDZmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1VUU0RcbiIpOworICAgICAgICAgb3V0cyg0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFNXXG4iKTsKKyAgICAgICAgIG91dHMoMik7CisgICAgIH0KK0BAIC00ODIwLDcgKzUxMTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX08odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX08odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4MjgsOCArNTEyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBvdmVyZmxvdyBmbGFnIGlzIHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKT1x0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpCitAQCAtNDg0Miw3ICs1MTM3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX08odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDg1MCw4ICs1MTQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBvdmVyZmxvdyBpcyBub3Qgc2V0ICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOT1x0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfT0YpKQorQEAgLTQ4NjQsNyArNTE2MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDcyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDg3Miw4ICs1MTY5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIGNhcnJ5IGZsYWcgaXMgc2V0LiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKQlx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCitAQCAtNDg4Niw3ICs1MTgzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDg5NCw4ICs1MTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBjYXJyeSBmbGFnIGlzIGNsZWFyLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTkJcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX0NGKSkKK0BAIC00OTA4LDcgKzUyMDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1oodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX1oodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ5MTYsOCArNTIxNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiB6ZXJvIGZsYWcgaXMgc2V0LiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKWlx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCitAQCAtNDkzMCw3ICs1MjI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1oodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDkzOCw4ICs1MjM4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiB6ZXJvIGZsYWcgaXMgY2xlYXIuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOWlx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfWkYpKQorQEAgLTQ5NTIsNyArNTI1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00OTYxLDggKzUyNjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkJFXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSkKK0BAIC00OTc1LDcgKzUyNzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkJFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00OTg0LDggKzUyODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkJFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgZmxhZyBpcyBjbGVhciAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTkJFXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKSkKK0BAIC00OTk4LDcgKzUzMDAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkJFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDA2LDggKzUzMDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgc2lnbiBmbGFnIGlzIHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKU1x0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9TRikpCitAQCAtNTAyMCw3ICs1MzIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTAyOCw4ICs1MzMyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBzaWduIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5TXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9TRikpCitAQCAtNTA0Miw3ICs1MzQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4N2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDUwLDggKzUzNTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgcGFyaXR5IGZsYWcgaXMgc2V0IChldmVuIHBhcml0eSkgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfUEYpKQorQEAgLTUwNjQsNyArNTM2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4N2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwNzIsOCArNTM3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgcGFyaXR5IGZsYWcgaXMgY2xlYXIgKG9kZCBwYXJpdHkpICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOUFx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfUEYpKQorQEAgLTUwODYsNyArNTM5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTA5NSw4ICs1NDAyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBub3QgZXF1YWwgdG8gb3ZlcmZsb3cgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkxcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgc2YgPSBBQ0NFU1NfRkxBRyhGX1NGKSAhPSAwOworQEAgLTUxMTEsNyArNTQxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4N2QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUxMjAsOCArNTQyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgc2lnbiBmbGFnIG5vdCBlcXVhbCB0byBvdmVyZmxvdyBmbGFnLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTkxcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgc2YgPSBBQ0NFU1NfRkxBRyhGX1NGKSAhPSAwOworQEAgLTUxMzcsNyArNTQ0NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTQ3LDggKzU0NTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICBvciB0aGUgemVybyBmbGFnIGlzIHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTEVcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgc2YgPSBBQ0NFU1NfRkxBRyhGX1NGKSAhPSAwOworQEAgLTUxNjMsNyArNTQ3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUxNzMsOCArNTQ4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICBhbmQgdGhlIHplcm8gZmxhZyBpcyBjbGVhciAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTkxFXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTg1LDIzICs1NDk1LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHU4ICgqb3BjODBfYnl0ZV9vcGVyYXRpb25bXSkodTggZCwgdTggcykgPQorLXsKKy0gICAgYWRkX2J5dGUsICAgICAgICAgICAvKiAwMCAqLworLSAgICBvcl9ieXRlLCAgICAgICAgICAgIC8qIDAxICovCistICAgIGFkY19ieXRlLCAgICAgICAgICAgLyogMDIgKi8KKy0gICAgc2JiX2J5dGUsICAgICAgICAgICAvKiAwMyAqLworLSAgICBhbmRfYnl0ZSwgICAgICAgICAgIC8qIDA0ICovCistICAgIHN1Yl9ieXRlLCAgICAgICAgICAgLyogMDUgKi8KKy0gICAgeG9yX2J5dGUsICAgICAgICAgICAvKiAwNiAqLworLSAgICBjbXBfYnl0ZSwgICAgICAgICAgIC8qIDA3ICovCisrc3RhdGljIHU4KCpvcGM4MF9ieXRlX29wZXJhdGlvbltdKSAodTggZCwgdTggcykgPSB7CisrICAgIGFkZF9ieXRlLCAgICAgICAgICAgICAgICAgICAvKiAwMCAqLworKyAgICAgICAgb3JfYnl0ZSwgICAgICAgICAgICAgICAgLyogMDEgKi8KKysgICAgICAgIGFkY19ieXRlLCAgICAgICAgICAgICAgIC8qIDAyICovCisrICAgICAgICBzYmJfYnl0ZSwgICAgICAgICAgICAgICAvKiAwMyAqLworKyAgICAgICAgYW5kX2J5dGUsICAgICAgICAgICAgICAgLyogMDQgKi8KKysgICAgICAgIHN1Yl9ieXRlLCAgICAgICAgICAgICAgIC8qIDA1ICovCisrICAgICAgICB4b3JfYnl0ZSwgICAgICAgICAgICAgICAvKiAwNiAqLworKyAgICAgICAgY21wX2J5dGUsICAgICAgICAgICAgICAgLyogMDcgKi8KKyB9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDgwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTUyOTAsNyArNTYwMCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworQEAgLTUzMDUsMzUgKzU2MTUsMzQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHUxNiAoKm9wYzgxX3dvcmRfb3BlcmF0aW9uW10pKHUxNiBkLCB1MTYgcykgPQorLXsKKy0gICAgYWRkX3dvcmQsICAgICAgICAgICAvKjAwICovCistICAgIG9yX3dvcmQsICAgICAgICAgICAgLyowMSAqLworLSAgICBhZGNfd29yZCwgICAgICAgICAgIC8qMDIgKi8KKy0gICAgc2JiX3dvcmQsICAgICAgICAgICAvKjAzICovCistICAgIGFuZF93b3JkLCAgICAgICAgICAgLyowNCAqLworLSAgICBzdWJfd29yZCwgICAgICAgICAgIC8qMDUgKi8KKy0gICAgeG9yX3dvcmQsICAgICAgICAgICAvKjA2ICovCistICAgIGNtcF93b3JkLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MTYoKm9wYzgxX3dvcmRfb3BlcmF0aW9uW10pICh1MTYgZCwgdTE2IHMpID0geworKyAgICBhZGRfd29yZCwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3Jfd29yZCwgICAgICAgICAgICAgICAgLyowMSAqLworKyAgICAgICAgYWRjX3dvcmQsICAgICAgICAgICAgICAgLyowMiAqLworKyAgICAgICAgc2JiX3dvcmQsICAgICAgICAgICAgICAgLyowMyAqLworKyAgICAgICAgYW5kX3dvcmQsICAgICAgICAgICAgICAgLyowNCAqLworKyAgICAgICAgc3ViX3dvcmQsICAgICAgICAgICAgICAgLyowNSAqLworKyAgICAgICAgeG9yX3dvcmQsICAgICAgICAgICAgICAgLyowNiAqLworKyAgICAgICAgY21wX3dvcmQsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCistc3RhdGljIHUzMiAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBkLCB1MzIgcykgPQorLXsKKy0gICAgYWRkX2xvbmcsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2xvbmcsICAgICAgICAgICAgLyowMSAqLworLSAgICBhZGNfbG9uZywgICAgICAgICAgIC8qMDIgKi8KKy0gICAgc2JiX2xvbmcsICAgICAgICAgICAvKjAzICovCistICAgIGFuZF9sb25nLCAgICAgICAgICAgLyowNCAqLworLSAgICBzdWJfbG9uZywgICAgICAgICAgIC8qMDUgKi8KKy0gICAgeG9yX2xvbmcsICAgICAgICAgICAvKjA2ICovCistICAgIGNtcF9sb25nLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MzIoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgZCwgdTMyIHMpID0geworKyAgICBhZGRfbG9uZywgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfbG9uZywgICAgICAgICAgICAgICAgLyowMSAqLworKyAgICAgICAgYWRjX2xvbmcsICAgICAgICAgICAgICAgLyowMiAqLworKyAgICAgICAgc2JiX2xvbmcsICAgICAgICAgICAgICAgLyowMyAqLworKyAgICAgICAgYW5kX2xvbmcsICAgICAgICAgICAgICAgLyowNCAqLworKyAgICAgICAgc3ViX2xvbmcsICAgICAgICAgICAgICAgLyowNSAqLworKyAgICAgICAgeG9yX2xvbmcsICAgICAgICAgICAgICAgLyowNiAqLworKyAgICAgICAgY21wX2xvbmcsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTUzODcsNyArNTY5Niw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01Mzk5LDggKzU3MDgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NDE2LDcgKzU3MjYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NDI4LDggKzU3MzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NDQ1LDcgKzU3NTYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01NDU3LDggKzU3NjgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01NDcyLDEwICs1Nzg0LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU0ODUsOSArNTc5NywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNTUwNCwyMyArNTgxNywyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEVORF9PRl9JTlNUUigpOworIH0KKyAKKy1zdGF0aWMgdTggKCpvcGM4Ml9ieXRlX29wZXJhdGlvbltdKSh1OCBzLCB1OCBkKSA9CisteworLSAgICBhZGRfYnl0ZSwgICAgICAgICAgIC8qMDAgKi8KKy0gICAgb3JfYnl0ZSwgICAgICAgICAgICAvKjAxICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgYWRjX2J5dGUsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl9ieXRlLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfYnl0ZSwgICAgICAgICAgIC8qMDQgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBzdWJfYnl0ZSwgICAgICAgICAgIC8qMDUgKi8KKy0gICAgeG9yX2J5dGUsICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgY21wX2J5dGUsICAgICAgICAgICAvKjA3ICovCisrc3RhdGljIHU4KCpvcGM4Ml9ieXRlX29wZXJhdGlvbltdKSAodTggcywgdTggZCkgPSB7CisrICAgIGFkZF9ieXRlLCAgICAgICAgICAgICAgICAgICAvKjAwICovCisrICAgICAgICBvcl9ieXRlLCAgICAgICAgICAgICAgICAvKjAxICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIGFkY19ieXRlLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl9ieXRlLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF9ieXRlLCAgICAgICAgICAgICAgIC8qMDQgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgc3ViX2J5dGUsICAgICAgICAgICAgICAgLyowNSAqLworKyAgICAgICAgeG9yX2J5dGUsICAgICAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBjbXBfYnl0ZSwgICAgICAgICAgICAgICAvKjA3ICovCisgfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC01NjA2LDcgKzU5MTksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4Ml9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CitAQCAtNTYyMCwzNSArNTkzMywzNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4Ml9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEVORF9PRl9JTlNUUigpOworIH0KKyAKKy1zdGF0aWMgdTE2ICgqb3BjODNfd29yZF9vcGVyYXRpb25bXSkodTE2IHMsIHUxNiBkKSA9CisteworLSAgICBhZGRfd29yZCwgICAgICAgICAgIC8qMDAgKi8KKy0gICAgb3Jfd29yZCwgICAgICAgICAgICAvKjAxICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgYWRjX3dvcmQsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl93b3JkLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfd29yZCwgICAgICAgICAgIC8qMDQgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBzdWJfd29yZCwgICAgICAgICAgIC8qMDUgKi8KKy0gICAgeG9yX3dvcmQsICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgY21wX3dvcmQsICAgICAgICAgICAvKjA3ICovCisrc3RhdGljIHUxNigqb3BjODNfd29yZF9vcGVyYXRpb25bXSkgKHUxNiBzLCB1MTYgZCkgPSB7CisrICAgIGFkZF93b3JkLCAgICAgICAgICAgICAgICAgICAvKjAwICovCisrICAgICAgICBvcl93b3JkLCAgICAgICAgICAgICAgICAvKjAxICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIGFkY193b3JkLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl93b3JkLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF93b3JkLCAgICAgICAgICAgICAgIC8qMDQgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgc3ViX3dvcmQsICAgICAgICAgICAgICAgLyowNSAqLworKyAgICAgICAgeG9yX3dvcmQsICAgICAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBjbXBfd29yZCwgICAgICAgICAgICAgICAvKjA3ICovCisgfTsKKyAKKy1zdGF0aWMgdTMyICgqb3BjODNfbG9uZ19vcGVyYXRpb25bXSkodTMyIHMsIHUzMiBkKSA9CisteworLSAgICBhZGRfbG9uZywgICAgICAgICAgIC8qMDAgKi8KKy0gICAgb3JfbG9uZywgICAgICAgICAgICAvKjAxICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgYWRjX2xvbmcsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl9sb25nLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfbG9uZywgICAgICAgICAgIC8qMDQgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBzdWJfbG9uZywgICAgICAgICAgIC8qMDUgKi8KKy0gICAgeG9yX2xvbmcsICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgY21wX2xvbmcsICAgICAgICAgICAvKjA3ICovCisrc3RhdGljIHUzMigqb3BjODNfbG9uZ19vcGVyYXRpb25bXSkgKHUzMiBzLCB1MzIgZCkgPSB7CisrICAgIGFkZF9sb25nLCAgICAgICAgICAgICAgICAgICAvKjAwICovCisrICAgICAgICBvcl9sb25nLCAgICAgICAgICAgICAgICAvKjAxICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIGFkY19sb25nLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl9sb25nLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF9sb25nLCAgICAgICAgICAgICAgIC8qMDQgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgc3ViX2xvbmcsICAgICAgICAgICAgICAgLyowNSAqLworKyAgICAgICAgeG9yX2xvbmcsICAgICAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBjbXBfbG9uZywgICAgICAgICAgICAgICAvKjA3ICovCisgfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtNTY2Nyw3ICs1OTc5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgZ2VuZXJhbCwgc28gdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gbGVhdmUgdGhlIHN0cmluZ3MKKyAgICAgICAgICAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZSAKKyAgICAgICAgICAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKy0gICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgc3dpdGNoIChyaCkgeworICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0Iik7CisgICAgICAgICAgICAgYnJlYWs7CitAQCAtNTcwMCw3ICs2MDEyLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTU3MTEsOCArNjAyMyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTU3MjcsNyArNjA0MCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTU3MzgsOCArNjA1MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTU3NTQsNyArNjA2OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTU3NjUsOCArNjA3OSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTU3NzksMTAgKzYwOTQsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CitAQCAtNTc5MSw5ICs2MTA2LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZXN0dmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKK0BAIC01ODEzLDcgKzYxMjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTU4NTEsNyArNjE2OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICB0ZXN0X2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTU4NjgsNyArNjE4NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTU4ODksNyArNjIwNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTU5MTQsNyArNjIzMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTU5MzksNyArNjI1OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTU5NTIsOSArNjI3Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICB0ZXN0X3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNTk2Miw4ICs2MjgzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICB0ZXN0X2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC01OTgyLDcgKzYzMDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTYwMzAsNyArNjM1Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSB0bXA7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTYwNDksNyArNjM3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTYwNjEsNyArNjM4NSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpzcmNyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MDczLDkgKzYzOTcsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOworICAgICAgICAgICAgIGRlc3R2YWwgPSB0bXA7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjA5Miw3ICs2NDE3LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYxMDQsOSArNjQyOSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTIzLDcgKzY0NDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjEzNSw5ICs2NDYxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqc3JjcmVnID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYxNTEsOSArNjQ3OCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTMyIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworQEAgLTYxNjQsOCArNjQ5MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICB0bXAgPSAqc3JjcmVnOworICAgICAgICAgICAgICpzcmNyZWcgPSAqZGVzdHJlZzsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHRtcDsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTE2IHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTYxODcsNyArNjUxNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTYyMjEsNyArNjU1MCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtNjIzOCw3ICs2NTY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1MzIgZGVzdG9mZnNldDsKK0BAIC02MjU3LDcgKzY1ODcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC02Mjc4LDcgKzY2MDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC02Mjk5LDcgKzY2MzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC02MzEwLDkgKzY2NDMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjMyMCw4ICs2NjUzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjM0MCw3ICs2Njc0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02Mzc4LDcgKzY3MTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtNjM5NSw3ICs2NzMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC02NDE2LDcgKzY3NTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNjQ0MSw3ICs2Nzc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTY0NjYsNyArNjgwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC02NDc5LDcgKzY4MTgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKK0BAIC02NDg5LDcgKzY4MjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworQEAgLTY1MDksNyArNjg0OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fU1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfUk1fU1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjU0Nyw3ICs2ODg4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fU1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9ICpzcmNyZWc7CisgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7CitAQCAtNjU2NCw0NyArNjkwNSw3NyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9TUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sZWFfd29yZF9SX00odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKy0gICAgdTE2ICpzcmNyZWc7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKyAKKy0vKgorLSAqIFRPRE86IE5lZWQgdG8gaGFuZGxlIGFkZHJlc3Mgc2l6ZSBwcmVmaXghCistICoKKy0gKiBsZWEgIGVheCxbZWF4K2VieCoyXSA/PworLSAqLworLSAgICAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTEVBXHQiKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKy0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MzIpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUxNikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CistICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUzMikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTE2KSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CistICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTMyKSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MTYpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiB1bmRlZmluZWQuICBEbyBub3RoaW5nLiAqLworICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC02NjE2LDcgKzY5ODcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZWFfd29yZF9SX00odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfU1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjY1NCw3ICs3MDI2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTY2NzcsNyArNzA0OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtNjY5OSw3ICs3MDcyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBwb3BfbG9uZygpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNjcxOCw3ICs3MDkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBwb3BfbG9uZygpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNjczNyw3ICs3MTEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBwb3BfbG9uZygpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNjc0Nyw3ICs3MTIzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgCitAQCAtNjc1NSw3ICs3MTMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBwb3BfbG9uZygpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTY3NzMsNyArNzE1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDkwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9ub3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk5PUFxuIik7CitAQCAtNjc4NiwxNCArNzE2NCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9ub3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdG1wOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEVBWCxFQ1hcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0QVgsQ1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNjgwMSwxMCArNzE4MSwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgdG1wID0gTS54ODYuUl9FQVg7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IE0ueDg2LlJfRUNYOworICAgICAgICAgTS54ODYuUl9FQ1ggPSB0bXA7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOworICAgICAgICAgTS54ODYuUl9BWCA9IE0ueDg2LlJfQ1g7CistICAgICAgICBNLng4Ni5SX0NYID0gKHUxNil0bXA7CisrICAgICAgICBNLng4Ni5SX0NYID0gKHUxNikgdG1wOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNjgxNCwxNCArNzE5NSwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdG1wOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEVBWCxFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0QVgsRFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNjgyOSwxMCArNzIxMiwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgdG1wID0gTS54ODYuUl9FQVg7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IE0ueDg2LlJfRURYOworICAgICAgICAgTS54ODYuUl9FRFggPSB0bXA7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOworICAgICAgICAgTS54ODYuUl9BWCA9IE0ueDg2LlJfRFg7CistICAgICAgICBNLng4Ni5SX0RYID0gKHUxNil0bXA7CisrICAgICAgICBNLng4Ni5SX0RYID0gKHUxNikgdG1wOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNjg0MiwxNCArNzIyNiwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9BWF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdG1wOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEVBWCxFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0QVgsQlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNjg1NywxMCArNzI0MywxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgdG1wID0gTS54ODYuUl9FQVg7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IE0ueDg2LlJfRUJYOworICAgICAgICAgTS54ODYuUl9FQlggPSB0bXA7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOworICAgICAgICAgTS54ODYuUl9BWCA9IE0ueDg2LlJfQlg7CistICAgICAgICBNLng4Ni5SX0JYID0gKHUxNil0bXA7CisrICAgICAgICBNLng4Ni5SX0JYID0gKHUxNikgdG1wOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNjg3MCwxNCArNzI1NywxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9BWF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdG1wOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEVBWCxFU1BcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0QVgsU1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNjg4NSwxMCArNzI3NCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgdG1wID0gTS54ODYuUl9FQVg7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IE0ueDg2LlJfRVNQOworICAgICAgICAgTS54ODYuUl9FU1AgPSB0bXA7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOworICAgICAgICAgTS54ODYuUl9BWCA9IE0ueDg2LlJfU1A7CistICAgICAgICBNLng4Ni5SX1NQID0gKHUxNil0bXA7CisrICAgICAgICBNLng4Ni5SX1NQID0gKHUxNikgdG1wOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNjg5OCwxNCArNzI4OCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdG1wOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEVBWCxFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0QVgsQlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNjkxMywxMCArNzMwNSwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgdG1wID0gTS54ODYuUl9FQVg7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IE0ueDg2LlJfRUJQOworICAgICAgICAgTS54ODYuUl9FQlAgPSB0bXA7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOworICAgICAgICAgTS54ODYuUl9BWCA9IE0ueDg2LlJfQlA7CistICAgICAgICBNLng4Ni5SX0JQID0gKHUxNil0bXA7CisrICAgICAgICBNLng4Ni5SX0JQID0gKHUxNikgdG1wOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNjkyNiwxNCArNzMxOSwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdG1wOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEVBWCxFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0QVgsU0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNjk0MSwxMCArNzMzNiwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgdG1wID0gTS54ODYuUl9FQVg7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IE0ueDg2LlJfRVNJOworICAgICAgICAgTS54ODYuUl9FU0kgPSB0bXA7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOworICAgICAgICAgTS54ODYuUl9BWCA9IE0ueDg2LlJfU0k7CistICAgICAgICBNLng4Ni5SX1NJID0gKHUxNil0bXA7CisrICAgICAgICBNLng4Ni5SX1NJID0gKHUxNikgdG1wOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNjk1NCwxNCArNzM1MCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdG1wOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEVBWCxFRElcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0QVgsRElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNjk2OSwxMCArNzM2NywxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgdG1wID0gTS54ODYuUl9FQVg7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IE0ueDg2LlJfRURJOworICAgICAgICAgTS54ODYuUl9FREkgPSB0bXA7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOworICAgICAgICAgTS54ODYuUl9BWCA9IE0ueDg2LlJfREk7CistICAgICAgICBNLng4Ni5SX0RJID0gKHUxNil0bXA7CisrICAgICAgICBNLng4Ni5SX0RJID0gKHUxNikgdG1wOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNjk4MiwyNSArNzM4MSwzMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2J3KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNXREVcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ0JXXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FYICYgMHg4MDAwKSB7CisgICAgICAgICAgICAgTS54ODYuUl9FQVggfD0gMHhmZmZmMDAwMDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VBWCAmPSAweDAwMDBmZmZmOworICAgICAgICAgfQorLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgaWYgKE0ueDg2LlJfQUwgJiAweDgwKSB7CisgICAgICAgICAgICAgTS54ODYuUl9BSCA9IDB4ZmY7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9BSCA9IDB4MDsKKyAgICAgICAgIH0KKyAgICAgfQorQEAgLTcwMTIsMTIgKzc0MTYsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2J3KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2N3ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDRFFcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ1dEXG4iKTsKKyAgICAgfQorICAgICBERUNPREVfUFJJTlRGKCJDV0RcbiIpOworQEAgLTcwMjUsMTMgKzc0MzEsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY3dkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBpZiAoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSB7CisgICAgICAgICAgICAgTS54ODYuUl9FRFggPSAweGZmZmZmZmZmOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfRURYID0gMHgwOworICAgICAgICAgfQorLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgaWYgKE0ueDg2LlJfQVggJiAweDgwMDApIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0RYID0gMHhmZmZmOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfRFggPSAweDA7CisgICAgICAgICB9CisgICAgIH0KK0BAIC03MDQzLDE3ICs3NDUyLDI0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2N3ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDlhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2FsbF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUxNiBmYXJzZWcsIGZhcm9mZjsKKysgICAgdTMyIGZhcnNlZywgZmFyb2ZmOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworLQlERUNPREVfUFJJTlRGKCJDQUxMXHQiKTsKKy0JZmFyb2ZmID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0JZmFyc2VnID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0JREVDT0RFX1BSSU5URjIoIiUwNHg6IiwgZmFyc2VnKTsKKy0JREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGZhcm9mZik7CistCUNBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBmYXJzZWcsIGZhcm9mZiwgIkZBUiAiKTsKKysgICAgREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgZmFyb2ZmID0gZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgIGZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBmYXJvZmYgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgZmFyc2VnID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgfQorKyAgICBERUNPREVfUFJJTlRGMigiJTA0eDoiLCBmYXJzZWcpOworKyAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgZmFyb2ZmKTsKKysgICAgQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIGZhcnNlZywgZmFyb2ZmLCAiRkFSICIpOworIAorICAgICAvKiBYWFgKKyAgICAgICogCitAQCAtNzA2NCw4ICs3NDgwLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKyAgICAgTS54ODYuUl9DUyA9IGZhcnNlZzsKKy0gICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworLSAgICBNLng4Ni5SX0lQID0gZmFyb2ZmOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VJUCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisrICAgIH0KKysgICAgTS54ODYuUl9FSVAgPSBmYXJvZmYgJiAweGZmZmY7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTcwNzQsNyArNzQ5NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDliCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF93YWl0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3dhaXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiV0FJVCIpOworQEAgLTcwODgsMTQgKzc1MTAsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfd2FpdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIGZsYWdzOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hGRFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIRlxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC03MTA0LDggKzc1MjgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgZmxhZ3MgPSAoTS54ODYuUl9FRkxHICYgRl9NU0spIHwgRl9BTFdBWVNfT047CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKGZsYWdzKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KWZsYWdzKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSBmbGFncyk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC03MTE1LDE4ICs3NTQwLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUEZEXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUEZcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRkxHID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRkxHID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNzEzNyw3ICs3NTY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2FoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTQUhGXG4iKTsKK0BAIC03MTU0LDEyICs3NTgzLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGFoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxBSEZcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQlNLng4Ni5SX0FIID0gKHU4KShNLng4Ni5SX0ZMRyAmIDB4ZmYpOworKyAgICBNLng4Ni5SX0FIID0gKHU4KSAoTS54ODYuUl9GTEcgJiAweGZmKTsKKyAgICAgLyp1bmRvY3VtZW50ZWQgVEMrKyBiZWhhdmlvcj8/PyBOb3BlLiAgSXQncyBkb2N1bWVudGVkLCBidXQKKyAgICAgICAgeW91IGhhdmUgdG9vIGxvb2sgcmVhbCBoYXJkIHRvIG5vdGljZSBpdC4gKi8KKyAgICAgTS54ODYuUl9BSCB8PSAweDI7CitAQCAtNzE3MSw3ICs3NjAxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGFoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGEwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQUxfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X0FMX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzE4OSw3ICs3NjIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FMX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BWF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IG9mZnNldDsKKyAKK0BAIC03MTk3LDEzICs3NjI5LDE1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BWF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIG9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIk1PVlx0RUFYLFslMDR4XVxuIiwgb2Zmc2V0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdEFYLFslMDR4XVxuIiwgb2Zmc2V0KTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gZmV0Y2hfZGF0YV9sb25nKG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gZmV0Y2hfZGF0YV93b3JkKG9mZnNldCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTcyMTQsNyArNzY0OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BWF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGEyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X01fQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzIzMiw3ICs3NjY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IG9mZnNldDsKKyAKK0BAIC03MjQwLDEzICs3Njc2LDE1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIG9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIk1PVlx0WyUwNHhdLEVBWFxuIiwgb2Zmc2V0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdFslMDR4XSxBWFxuIiwgb2Zmc2V0KTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhvZmZzZXQsIE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHN0b3JlX2RhdGFfd29yZChvZmZzZXQsIE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC03MjU3LDE1ICs3Njk1LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHU4ICB2YWw7CisrICAgIHU4IHZhbDsKKyAgICAgdTMyIGNvdW50OworICAgICBpbnQgaW5jOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHRCWVRFXG4iKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTcyOTIsNyArNzczMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB2YWw7CisgICAgIGludCBpbmM7CitAQCAtNzMwMSwxMyArNzc0MSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTczMjUsOSArNzc2NiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CistICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCAodTE2KXZhbCk7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCAodTE2KSB2YWwpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03MzQwLDcgKzc3ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCB2YWwxLCB2YWwyOworICAgICBpbnQgaW5jOworQEAgLTczNDgsNyArNzc5MSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdEJZVEVcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzM1OSw3ICs3ODAyLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKKyAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICAgICAgIGNtcF9ieXRlKHZhbDEsIHZhbDIpOworKyAgICAgICAgICAgIGNtcF9ieXRlKHZhbDEsIHZhbDIpOworICAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKyAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03MzY3LDcgKzc4MTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CistICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisrICAgIH0KKysgICAgZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisgICAgICAgICAvKiBSRVBORSAgKi8KKyAgICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworQEAgLTczODEsNyArNzgyNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBORTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX2J5dGUoTS54ODYuUl9TSSk7CisgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgIGNtcF9ieXRlKHZhbDEsIHZhbDIpOworQEAgLTczOTYsMjEgKzc4NDEsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgdTMyIHZhbDEsdmFsMjsKKysgICAgdTMyIHZhbDEsIHZhbDI7CisgICAgIGludCBpbmM7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ01QU1x0RFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtNDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSA0OworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ01QU1x0V09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC0yOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDI7CitAQCAtNzQyNCwxMCArNzg3MSwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICAgICAgY21wX2xvbmcodmFsMSwgdmFsMik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7CisrICAgICAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzQzNiw3ICs3ODg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworLSAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworKyAgICB9CisrICAgIGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworICAgICAgICAgLyogUkVQTkUgICovCisgICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKK0BAIC03NDQ0LDEwICs3ODkzLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX2xvbmcoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyh2YWwxLCB2YWwyKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpdmFsMSwgKHUxNil2YWwyKTsKKysgICAgICAgICAgICAgICAgY21wX3dvcmQoKHUxNikgdmFsMSwgKHUxNikgdmFsMik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKyAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKK0BAIC03NDU2LDE1ICs3OTA2LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBORTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX2xvbmcoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgY21wX2xvbmcodmFsMSwgdmFsMik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7CisrICAgICAgICAgICAgY21wX3dvcmQoKHUxNikgdmFsMSwgKHUxNikgdmFsMik7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc0NzcsNyArNzkyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90ZXN0X0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW1tOworIAorQEAgLTc0ODYsNyArNzkzOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGltbSk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistCXRlc3RfYnl0ZShNLng4Ni5SX0FMLCAodTgpaW1tKTsKKysgICAgdGVzdF9ieXRlKE0ueDg2LlJfQUwsICh1OCkgaW1tKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtNzQ5NSw3ICs3OTQ4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC03NTAzLDcgKzc5NTcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTc1MTEsOCArNzk2Niw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICB0ZXN0X2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICB0ZXN0X3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgdGVzdF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC03NTIyLDEzICs3OTc4LDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3NfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdG9zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU1RPU1x0QllURVxuIik7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03NTQyLDcgKzc5OTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIE0ueDg2LlJfQUwpOworICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisgICAgIH0KK0BAIC03NTU0LDcgKzgwMTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworICAgICB1MzIgY291bnQ7CitAQCAtNzU2MiwxMyArODAyMSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNUT1NcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNUT1NcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc1ODUsNyArODA0NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIE0ueDg2LlJfRUFYKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIE0ueDg2LlJfQVgpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzU5OCwxNCArODA1OSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvZHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMT0RTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTc2MTgsNyArODA4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQUwgPSBmZXRjaF9kYXRhX2J5dGUoTS54ODYuUl9TSSk7CisgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgfQorQEAgLTc2MzAsNyArODA5Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgICAgIHUzMiBjb3VudDsKK0BAIC03NjM4LDEzICs4MTAyLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTE9EU1x0RFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtNDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSA0OworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTE9EU1x0V09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC0yOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDI7CitAQCAtNzY2MSw3ICs4MTI2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIE0ueDg2LlJfRUFYID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfQVggPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKK0BAIC03Njc0LDcgKzgxNDAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCB2YWwyOworICAgICBpbnQgaW5jOworQEAgLTc2ODIsNyArODE0OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdEJZVEVcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzY5OCw3ICs4MTY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworLSAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworKyAgICB9CisrICAgIGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworICAgICAgICAgLyogUkVQTkUgICovCisgICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKK0BAIC03NzEwLDcgKzgxNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgIGNtcF9ieXRlKE0ueDg2LlJfQUwsIHZhbDIpOworICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzcyMyw3ICs4MTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAgICAgdTMyIHZhbDsKK0BAIC03NzMxLDEzICs4MjAxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU0NBU1x0RFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtNDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSA0OworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU0NBU1x0V09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC0yOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDI7CitAQCAtNzc1MCw5ICs4MjIxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KXZhbCk7CisrICAgICAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKyAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03NzYwLDE2ICs4MjMyLDE4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KXZhbCk7CisrICAgICAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKyAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03Nzc3LDEzICs4MjUxLDE1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBORTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgY21wX2xvbmcoTS54ODYuUl9FQVgsIHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KXZhbCk7CisrICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICB9CitAQCAtNzc5NSw3ICs4MjcxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4MTMsNyArODI5MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9DTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODMxLDcgKzgzMDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9DTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfRExfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzg0OSw3ICs4MzI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfRExfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0JMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4NjcsNyArODM0Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0JMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODg1LDcgKzgzNjYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzkwMyw3ICs4Mzg1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc5MjEsNyArODQwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03OTM5LDcgKzg0MjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTc5NDcsNyArODQzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03OTU1LDggKzg0NDEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTc5NjYsNyArODQ1Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtNzk3NCw3ICs4NDYyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVDWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdENYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTc5ODIsOCArODQ3MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0NYID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0NYID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzk5Myw3ICs4NDgzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MDAxLDcgKzg0OTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RURYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RFgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODAwOSw4ICs4NTAxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfRFggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfRFggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MDIwLDcgKzg1MTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgwMjgsNyArODUyMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQlgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRCWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MDM2LDggKzg1MzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgwNDcsNyArODU0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODA1NSw3ICs4NTUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVTUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdFNQLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwNjMsOCArODU2MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX1NQID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX1NQID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODA3NCw3ICs4NTczLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MDgyLDcgKzg1ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUJQLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QlAsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODA5MCw4ICs4NTkxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQlAgPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQlAgPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MTAxLDcgKzg2MDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgxMDksNyArODYxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFU0ksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRTSSwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MTE3LDggKzg2MjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgxMjgsNyArODYzMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9ESV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfRElfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODEzNiw3ICs4NjQyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRElfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVESSwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdERJLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgxNDQsMzEgKzg2NTEsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRElfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VESSA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfREkgPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfREkgPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCisgLyogdXNlZCBieSBvcGNvZGVzIGMwLCBkMCwgYW5kIGQyLiAqLworLXN0YXRpYyB1OCgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bXSkodTggZCwgdTggcykgPQorLXsKKy0gICAgcm9sX2J5dGUsCistICAgIHJvcl9ieXRlLAorLSAgICByY2xfYnl0ZSwKKy0gICAgcmNyX2J5dGUsCistICAgIHNobF9ieXRlLAorLSAgICBzaHJfYnl0ZSwKKy0gICAgc2hsX2J5dGUsICAgICAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKy0gICAgc2FyX2J5dGUsCistfTsKKytzdGF0aWMgdTgoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW10pICh1OCBkLCB1OCBzKSA9IHsKKysgICAgcm9sX2J5dGUsIHJvcl9ieXRlLCByY2xfYnl0ZSwgcmNyX2J5dGUsIHNobF9ieXRlLCBzaHJfYnl0ZSwgc2hsX2J5dGUsICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworK3Nhcl9ieXRlLH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtODI1MSw3ICs4NzUyLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzBfYnl0ZV9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKK0BAIC04MjY1LDM2ICs4NzY2LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB9CisgCisgLyogdXNlZCBieSBvcGNvZGVzIGMxLCBkMSwgYW5kIGQzLiAqLworLXN0YXRpYyB1MTYoKm9wY0QxX3dvcmRfb3BlcmF0aW9uW10pKHUxNiBzLCB1OCBkKSA9CisteworLSAgICByb2xfd29yZCwKKy0gICAgcm9yX3dvcmQsCistICAgIHJjbF93b3JkLAorLSAgICByY3Jfd29yZCwKKy0gICAgc2hsX3dvcmQsCistICAgIHNocl93b3JkLAorLSAgICBzaGxfd29yZCwgICAgICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworLSAgICBzYXJfd29yZCwKKy19OworK3N0YXRpYyB1MTYoKm9wY0QxX3dvcmRfb3BlcmF0aW9uW10pICh1MTYgcywgdTggZCkgPSB7CisrICAgIHJvbF93b3JkLCByb3Jfd29yZCwgcmNsX3dvcmQsIHJjcl93b3JkLCBzaGxfd29yZCwgc2hyX3dvcmQsIHNobF93b3JkLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfd29yZCx9OworIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMSwgZDEsIGFuZCBkMy4gKi8KKy1zdGF0aWMgdTMyICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bXSkodTMyIHMsIHU4IGQpID0KKy17CistICAgIHJvbF9sb25nLAorLSAgICByb3JfbG9uZywKKy0gICAgcmNsX2xvbmcsCistICAgIHJjcl9sb25nLAorLSAgICBzaGxfbG9uZywKKy0gICAgc2hyX2xvbmcsCistICAgIHNobF9sb25nLCAgICAgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCistICAgIHNhcl9sb25nLAorLX07Cisrc3RhdGljIHUzMigqb3BjRDFfbG9uZ19vcGVyYXRpb25bXSkgKHUzMiBzLCB1OCBkKSA9IHsKKysgICAgcm9sX2xvbmcsIHJvcl9sb25nLCByY2xfbG9uZywgcmNyX2xvbmcsIHNobF9sb25nLCBzaHJfbG9uZywgc2hsX2xvbmcsICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworK3Nhcl9sb25nLH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTgzNTcsNyArODg0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTgzODIsNyArODg2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg0MDcsNyArODg5NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg0MjAsNyArODkwOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgCitAQCAtODQyOSw3ICs4OTE4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtODQ0OCw3ICs4OTM4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JldF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgaW1tOworIAorQEAgLTg0NTYsOCArODk0Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYoIlJFVFx0Iik7CisgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVQiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVQiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gcG9wX3dvcmQoKTsKKyAgICAgTS54ODYuUl9TUCArPSBpbW07CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC04NDY4LDEyICs4OTU5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXRfbmVhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJSRVRcbiIpOworLQlSRVRVUk5fVFJBQ0UoIlJFVCIsTS54ODYuc2F2ZWRfY3MsTS54ODYuc2F2ZWRfaXApOworLQlUUkFDRV9BTkRfU1RFUCgpOworKyAgICBSRVRVUk5fVFJBQ0UoIlJFVCIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSBwb3Bfd29yZCgpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTg0ODMsNyArODk3NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sZXNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKK0BAIC04NTIwLDcgKzkwMTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZXNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9FUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC04NTMyLDcgKzkwMjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZXNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGRzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xkc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworQEAgLTg1NjksNyArOTA2Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xkc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICBNLng4Ni5SX0RTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogVU5ERUZJTkVEISAqLworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgfQorQEAgLTg1ODEsNyArOTA3NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xkc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtODYyMCw3ICs5MTE1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgaW1tKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlMnhcbiIsIGltbSk7CitAQCAtODYzNiw3ICs5MTMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtODY1OSw3ICs5MTU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NjgwLDcgKzkxNzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg3MDEsNyArOTE5OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODcxMiwxOSArOTIxMSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBpbW0pOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpkZXN0cmVnOworLQkJCXUzMiBpbW07CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnOworKyAgICAgICAgICAgIHUzMiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGltbTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJdTE2ICpkZXN0cmVnOworLQkJCXUxNiBpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisrICAgICAgICAgICAgdTE2IGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CitAQCAtODc0MiwxMCArOTI0MiwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZW50ZXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZW50ZXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgdTE2IGxvY2FsLGZyYW1lX3BvaW50ZXI7CistICAgIHU4ICBuZXN0aW5nOworKyAgICB1MTYgbG9jYWwsIGZyYW1lX3BvaW50ZXI7CisrICAgIHU4IG5lc3Rpbmc7CisgICAgIGludCBpOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTg3NjAsMTEgKzkyNjEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZW50ZXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZm9yIChpID0gMTsgaSA8IG5lc3Rpbmc7IGkrKykgeworICAgICAgICAgICAgIE0ueDg2LlJfQlAgLT0gMjsKKyAgICAgICAgICAgICBwdXNoX3dvcmQoZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX1NTLCBNLng4Ni5SX0JQKSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgcHVzaF93b3JkKGZyYW1lX3BvaW50ZXIpOworICAgICAgICAgfQorKyAgICAgICAgcHVzaF93b3JkKGZyYW1lX3BvaW50ZXIpOworKyAgICB9CisgICAgIE0ueDg2LlJfQlAgPSBmcmFtZV9wb2ludGVyOworLSAgICBNLng4Ni5SX1NQID0gKHUxNikoTS54ODYuUl9TUCAtIGxvY2FsKTsKKysgICAgTS54ODYuUl9TUCA9ICh1MTYpIChNLng4Ni5SX1NQIC0gbG9jYWwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC04NzczLDcgKzkyNzQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9lbnRlcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sZWF2ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sZWF2ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMRUFWRVxuIik7CitAQCAtODc4OCw3ICs5MjkwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IGltbTsKKyAKK0BAIC04Nzk2LDggKzkyOTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYoIlJFVEZcdCIpOworICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CistCVJFVFVSTl9UUkFDRSgiUkVURiIsTS54ODYuc2F2ZWRfY3MsTS54ODYuc2F2ZWRfaXApOworLQlUUkFDRV9BTkRfU1RFUCgpOworKyAgICBSRVRVUk5fVFJBQ0UoIlJFVEYiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gcG9wX3dvcmQoKTsKKyAgICAgTS54ODYuUl9DUyA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfU1AgKz0gaW1tOworQEAgLTg4MDksMTIgKzkzMTIsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXRfZmFyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlJFVEZcbiIpOworLQlSRVRVUk5fVFJBQ0UoIlJFVEYiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVRGIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfQ1MgPSBwb3Bfd29yZCgpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtODgyNSwxNSArOTMyOSwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfZmFyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludDModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW50Myh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlQgM1xuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChfWDg2RU1VX2ludHJUYWJbM10pIHsKKy0JKCpfWDg2RU1VX2ludHJUYWJbM10pKDMpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworKyAgICAgICAgKCpfWDg2RU1VX2ludHJUYWJbM10pICgzKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisgICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOworICAgICAgICAgQ0xFQVJfRkxBRyhGX1RGKTsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKK0BAIC04ODQ5LDcgKzkzNTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnQzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbnRudW07CisgCitAQCAtODg1OSw5ICs5MzY2LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGludG51bSk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChfWDg2RU1VX2ludHJUYWJbaW50bnVtXSkgeworLQkoKl9YODZFTVVfaW50clRhYltpbnRudW1dKShpbnRudW0pOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworKyAgICAgICAgKCpfWDg2RU1VX2ludHJUYWJbaW50bnVtXSkgKGludG51bSk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CitAQCAtODg3NywxNiArOTM4NSwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW50byh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlRPXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKSB7CistCWlmIChfWDg2RU1VX2ludHJUYWJbNF0pIHsKKy0JICAgICgqX1g4NkVNVV9pbnRyVGFiWzRdKSg0KTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworKyAgICAgICAgaWYgKF9YODZFTVVfaW50clRhYls0XSkgeworKyAgICAgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiWzRdKSAoNCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1RGKTsKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CitAQCAtODkwMyw3ICs5NDEzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50byh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pcmV0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2lyZXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSVJFVFxuIik7CitAQCAtODkyMSw3ICs5NDMyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaXJldCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMF9ieXRlX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtODk5OSw3ICs5NTExLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwxXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtOTAxNSw3ICs5NTI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtOTA3NSw3ICs5NTg4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MDk4LDcgKzk2MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkxMjEsNyArOTYzNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CitAQCAtOTEzMywxOSArOTY0OSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiBkZXN0dmFsOworLQkJCXUzMiAqZGVzdHJlZzsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgMSk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZXN0dmFsOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQl1MTYgZGVzdHZhbDsKKy0JCQl1MTYgKmRlc3RyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CitAQCAtOTE2Myw3ICs5NjgwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTkyNDMsNyArOTc2MSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC05MjU5LDcgKzk3NzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC05MzIxLDcgKzk4NDAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkzNDQsNyArOTg2NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTM2Nyw3ICs5ODg4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05Mzc5LDcgKzk5MDEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgCitAQCAtOTM4Nyw3ICs5OTA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgYW10KTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC05NDA1LDE2ICs5OTI4LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFtKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FhbSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBhOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJBQU1cbiIpOworLSAgICBhID0gZmV0Y2hfYnl0ZV9pbW0oKTsgICAgICAvKiB0aGlzIGlzIGEgc3R1cGlkIGVuY29kaW5nLiAqLworKyAgICBhID0gZmV0Y2hfYnl0ZV9pbW0oKTsgICAgICAgLyogdGhpcyBpcyBhIHN0dXBpZCBlbmNvZGluZy4gKi8KKyAgICAgaWYgKGEgIT0gMTApIHsKKy0JLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworLQkgICBhYW1fd29yZCh1OCB2YWwsIGludCBiYXNlIGEpICovCisrICAgICAgICAvKiBmaXg6IGFkZCBiYXNlIGRlY29kaW5nCisrICAgICAgICAgICBhYW1fd29yZCh1OCB2YWwsIGludCBiYXNlIGEpICovCisgICAgICAgICBERUNPREVfUFJJTlRGKCJFUlJPUiBERUNPRElORyBBQU1cbiIpOworICAgICAgICAgVFJBQ0VfUkVHUygpOworICAgICAgICAgSEFMVF9TWVMoKTsKK0BAIC05NDMwLDcgKzk5NTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYW0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FhZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBhOworIAorQEAgLTk0MzgsOCArOTk2Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYoIkFBRFxuIik7CisgICAgIGEgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBpZiAoYSAhPSAxMCkgeworLQkvKiBmaXg6IGFkZCBiYXNlIGRlY29kaW5nCistCSAgIGFhZF93b3JkKHUxNiB2YWwsIGludCBiYXNlIGEpICovCisrICAgICAgICAvKiBmaXg6IGFkZCBiYXNlIGRlY29kaW5nCisrICAgICAgICAgICBhYWRfd29yZCh1MTYgdmFsLCBpbnQgYmFzZSBhKSAqLworICAgICAgICAgREVDT0RFX1BSSU5URigiRVJST1IgREVDT0RJTkcgQUFNXG4iKTsKKyAgICAgICAgIFRSQUNFX1JFR1MoKTsKKyAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtOTQ1NiwxNCArOTk4MSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGxhdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94bGF0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBhZGRyOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJYTEFUXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JYWRkciA9ICh1MTYpKE0ueDg2LlJfQlggKyAodTgpTS54ODYuUl9BTCk7CisrICAgIGFkZHIgPSAodTE2KSAoTS54ODYuUl9CWCArICh1OCkgTS54ODYuUl9BTCk7CisgICAgIE0ueDg2LlJfQUwgPSBmZXRjaF9kYXRhX2J5dGUoYWRkcik7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTQ3NSw3ICsxMDAwMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hsYXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcG5lKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvb3BuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzMTYgaXA7CisgCitAQCAtOTQ4Niw3ICsxMDAxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKy0gICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiAhQUNDRVNTX0ZMQUcoRl9aRikpICAgICAgLyogQ1ggIT0gMCBhbmQgIVpGICovCisrICAgIGlmIChNLng4Ni5SX0NYICE9IDAgJiYgIUFDQ0VTU19GTEFHKEZfWkYpKSAgLyogQ1ggIT0gMCBhbmQgIVpGICovCisgICAgICAgICBNLng4Ni5SX0lQID0gaXA7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTQ5Niw3ICsxMDAyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGUxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzMTYgaXA7CisgCitAQCAtOTUwNyw3ICsxMDAzNSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGlwKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9DWCAtPSAxOworLSAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmIEFDQ0VTU19GTEFHKEZfWkYpKSAgICAgICAvKiBDWCAhPSAwIGFuZCBaRiAqLworKyAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmIEFDQ0VTU19GTEFHKEZfWkYpKSAgIC8qIENYICE9IDAgYW5kIFpGICovCisgICAgICAgICBNLng4Ni5SX0lQID0gaXA7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTUxNyw3ICsxMDA0NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzMTYgaXA7CisgCitAQCAtOTUzOCwxNiArMTAwNjcsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGUzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qY3h6KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2pjeHoodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IHRhcmdldDsKKy0gICAgczggIG9mZnNldDsKKysgICAgczggb2Zmc2V0OworIAorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIG92ZXJmbG93IGZsYWcgaXMgc2V0ICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpDWFpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIG9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5SX0NYID09IDApCitAQCAtOTU2MCwxNiArMTAwOTAsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfamN4eih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlx0Iik7CistCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleCxBTFxuIiwgcG9ydCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfQUwgPSAoKnN5c19pbmIpKHBvcnQpOworKyAgICBNLng4Ni5SX0FMID0gKCpzeXNfaW5iKSAocG9ydCk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk1NzgsMjMgKzEwMTA5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHBvcnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOXHQiKTsKKy0JcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiRUFYLCV4XG4iLCBwb3J0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJBWCwleFxuIiwgcG9ydCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkocG9ydCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KShwb3J0KTsKKysgICAgICAgIE0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKSAocG9ydCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KSAocG9ydCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NjA0LDE2ICsxMDEzOCwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9JTU1fQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHBvcnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0Iik7CistCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleCxBTFxuIiwgcG9ydCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICgqc3lzX291dGIpKHBvcnQsIE0ueDg2LlJfQUwpOworKyAgICAoKnN5c19vdXRiKSAocG9ydCwgTS54ODYuUl9BTCk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2MjIsMjMgKzEwMTU3LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF9ieXRlX0lNTV9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfd29yZF9JTU1fQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3V0X3dvcmRfSU1NX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHBvcnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0Iik7CistCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4LEVBWFxuIiwgcG9ydCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiJXgsQVhcbiIsIHBvcnQpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgKCpzeXNfb3V0bCkocG9ydCwgTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgKCpzeXNfb3V0dykocG9ydCwgTS54ODYuUl9BWCk7CisrICAgICAgICAoKnN5c19vdXRsKSAocG9ydCwgTS54ODYuUl9FQVgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgKCpzeXNfb3V0dykgKHBvcnQsIE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTY0OCwxOSArMTAxODYsMzUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X3dvcmRfSU1NX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2FsbF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICBzMTYgaXA7CisrICAgIHMxNiBpcDE2OworKyAgICBzMzIgaXAzMjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CistCWlwID0gKHMxNikgZmV0Y2hfd29yZF9pbW0oKTsKKy0JaXAgKz0gKHMxNikgTS54ODYuUl9JUDsgICAgLyogQ0hFQ0sgU0lHTiAqLworLQlERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNilpcCk7CistCUNBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBNLng4Ni5SX0NTLCBpcCwgIiIpOworKyAgICBERUNPREVfUFJJTlRGKCJDQUxMXHQiKTsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBpcDMyID0gKHMzMikgZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgIGlwMzIgKz0gKHMxNikgTS54ODYuUl9JUDsgICAgICAgLyogQ0hFQ0sgU0lHTiAqLworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpIGlwMzIpOworKyAgICAgICAgQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIE0ueDg2LlJfQ1MsIGlwMzIsICIiKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGlwMTYgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgaXAxNiArPSAoczE2KSBNLng4Ni5SX0lQOyAgICAgICAvKiBDSEVDSyBTSUdOICovCisrICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNikgaXAxNik7CisrICAgICAgICBDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgTS54ODYuUl9DUywgaXAxNiwgIiIpOworKyAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKy0gICAgTS54ODYuUl9JUCA9IGlwOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VJUCk7CisrICAgICAgICBNLng4Ni5SX0VJUCA9IGlwMzIgJiAweGZmZmY7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisrICAgICAgICBNLng4Ni5SX0VJUCA9IGlwMTY7CisrICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTY2OSwxNyArMTAyMjMsMjcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgaW50IGlwOworKyAgICB1MzIgaXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpNUFx0Iik7CistICAgIGlwID0gKHMxNilmZXRjaF93b3JkX2ltbSgpOworLSAgICBpcCArPSAoczE2KU0ueDg2LlJfSVA7CistICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KWlwKTsKKy0gICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgTS54ODYuUl9JUCA9ICh1MTYpaXA7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgaXAgPSAodTMyKSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgaXAgKz0gKHUzMikgTS54ODYuUl9FSVA7CisrICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFxuIiwgKHUzMikgaXApOworKyAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgIE0ueDg2LlJfRUlQID0gKHUzMikgaXA7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcCA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICBpcCArPSAoczE2KSBNLng4Ni5SX0lQOworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpIGlwKTsKKysgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICBNLng4Ni5SX0lQID0gKHUxNikgaXA7CisrICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTY4OCwxOCArMTAyNTIsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUxNiBjcywgaXA7CisrICAgIHUxNiBjczsKKysgICAgdTMyIGlwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdEZBUiAiKTsKKy0gICAgaXAgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGlwID0gZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGlwID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgfQorICAgICBjcyA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4OiIsIGNzKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGlwKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgTS54ODYuUl9JUCA9IGlwOworKyAgICBNLng4Ni5SX0VJUCA9IGlwICYgMHhmZmZmOworICAgICBNLng4Ni5SX0NTID0gY3M7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTcwOSwxNSArMTAyODAsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgdGFyZ2V0OworICAgICBzOCBvZmZzZXQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpNUFx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHRhcmdldDsKK0BAIC05NzI5LDEyICsxMDMwMSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX2J5dGVfQUxfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5fYnl0ZV9BTF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlx0QUwsRFhcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBNLng4Ni5SX0FMID0gKCpzeXNfaW5iKShNLng4Ni5SX0RYKTsKKysgICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikgKE0ueDg2LlJfRFgpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NzQzLDE5ICsxMDMxNiwyMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5fd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOXHRFQVgsRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5cdEFYLERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgIE0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKShNLng4Ni5SX0RYKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSAoKnN5c19pbncpKE0ueDg2LlJfRFgpOworKyAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpIChNLng4Ni5SX0RYKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSAoKnN5c19pbncpIChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk3NjUsMTIgKzEwMzQxLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X2J5dGVfRFhfQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3V0X2J5dGVfRFhfQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiT1VUXHREWCxBTFxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICgqc3lzX291dGIpKE0ueDg2LlJfRFgsIE0ueDg2LlJfQUwpOworKyAgICAoKnN5c19vdXRiKSAoTS54ODYuUl9EWCwgTS54ODYuUl9BTCk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk3NzksMTkgKzEwMzU2LDIyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0RYX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF93b3JkX0RYX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1VUXHREWCxFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1VUXHREWCxBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAoKnN5c19vdXRsKShNLng4Ni5SX0RYLCBNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CistICAgICAgICAoKnN5c19vdXR3KShNLng4Ni5SX0RYLCBNLng4Ni5SX0FYKTsKKysgICAgICAgICgqc3lzX291dGwpIChNLng4Ni5SX0RYLCBNLng4Ni5SX0VBWCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICAoKnN5c19vdXR3KSAoTS54ODYuUl9EWCwgTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05ODAxLDcgKzEwMzgxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X3dvcmRfRFhfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9jayh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb2NrKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxPQ0s6XG4iKTsKK0BAIC05ODE2LDcgKzEwMzk3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9jayh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGYyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXBuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJSRVBORVxuIik7CitAQCAtOTgzMCw3ICsxMDQxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JlcG5lKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmVwZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJSRVBFXG4iKTsKK0BAIC05ODQ0LDcgKzEwNDI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmVwZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2hhbHQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSEFMVFxuIik7CitAQCAtOTg1OCw3ICsxMDQ0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2hhbHQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21jKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjb21wbGVtZW50IHRoZSBjYXJyeSBmbGFnLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTk4NzMsNyArMTA0NTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbWModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtOTg4NSw5ICsxMDQ3MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAwICovCisrICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEJZVEUgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtOTk1Myw5ICsxMDUzOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDAgKi8KKy0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLworKyAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMDIxLDkgKzEwNjA3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMSAqLworLSAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTEwICovCisrICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEJZVEUgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTAwODksOSArMTA2NzUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTEwICovCistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTEgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0Iik7CisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTAxMjMsNyArMTA3MDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBtdWxfYnl0ZSgqZGVzdHJlZyk7ICAgICAgLyohISEgICovCisrICAgICAgICAgICAgbXVsX2J5dGUoKmRlc3RyZWcpOyAvKiEhISAgKi8KKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHQiKTsKK0BAIC0xMDE1Nyw3ICsxMDc0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTEwMTY3LDExICsxMDc1NCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLworKyAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC0xMDE4MSw4ICsxMDc2OCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTEwMjA5LDcgKzEwNzk3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBub3RfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDIzMiw3ICsxMDgyMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0V09SRCBQVFIgIik7CitAQCAtMTAyNTQsNyArMTA4NDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwMjc1LDcgKzEwODY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwMjk2LDcgKzEwODg4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDMxNyw3ICsxMDkxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDMzMCwxMSArMTA5MjQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMCAqLworLSAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCisrICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdERXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTEwMzQ0LDggKzEwOTM4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCBzcmN2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtMTAzNzIsNyArMTA5NjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdFdPUkQgUFRSICIpOworQEAgLTEwMzk1LDcgKzEwOTkxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBuZWdfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQxNyw3ICsxMTAxNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA0MzgsNyArMTEwMzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaW11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA0NTksNyArMTEwNTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNDgwLDcgKzExMDgwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGlkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNDkzLDExICsxMTA5NCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAxICovCistICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTAgKi8KKysgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTEwICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtMTA1MDcsOCArMTExMDgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC0xMDUzNSw3ICsxMTEzNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0V09SRCBQVFIgIik7CitAQCAtMTA1NTgsNyArMTExNjEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdFdPUkQgUFRSICIpOworQEAgLTEwNTgwLDcgKzExMTg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIG11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDYwMSw3ICsxMTIwNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDYyMiw3ICsxMTIyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7CitAQCAtMTA2NDMsNyArMTEyNTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0V09SRCBQVFIgIik7CitAQCAtMTA2NTYsOSArMTEyNjQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTEwICovCistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTEgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKK0BAIC0xMDY3MCw3ICsxMTI3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHRlc3RfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTEwNjk2LDcgKzExMzA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gbm90X2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0Iik7CitAQCAtMTA3MTUsNyArMTEzMjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBuZWdfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHQiKTsKK0BAIC0xMDczMywxNSArMTEzNDQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgICAgIG11bF9sb25nKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICBtdWxfbG9uZygqZGVzdHJlZyk7ICAgICAvKiEhISAgKi8KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHQiKTsKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAgICAgbXVsX3dvcmQoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLworKyAgICAgICAgICAgICAgICBtdWxfd29yZCgqZGVzdHJlZyk7ICAgICAvKiEhISAgKi8KKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIDU6CitAQCAtMTA3NTMsNyArMTEzNjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaW11bF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHQiKTsKK0BAIC0xMDc3Miw3ICsxMTM4NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkaXZfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHQiKTsKK0BAIC0xMDc5MSw3ICsxMTQwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpZGl2X2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdCIpOworQEAgLTEwODEyLDcgKzExNDI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2xjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNsZWFyIHRoZSBjYXJyeSBmbGFnLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODI3LDcgKzExNDQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0Yyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogc2V0IHRoZSBjYXJyeSBmbGFnLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODQyLDcgKzExNDU5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsaSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY2xlYXIgaW50ZXJydXB0cy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDg1Nyw3ICsxMTQ3NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsaSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3RpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGVuYWJsZSAgaW50ZXJydXB0cy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDg3Miw3ICsxMTQ5MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0aSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNsZWFyIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4ODcsNyArMTE1MDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwOTAyLDcgKzExNTIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZFX2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRkVfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHU4IGRlc3R2YWw7CitAQCAtMTA5NDQsMTMgKzExNTY2LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZFX2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIGluYyB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGluY19ieXRlKGRlc3R2YWwpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMTogICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGRlY19ieXRlKGRlc3R2YWwpOworQEAgLTExMDE5LDEyICsxMTY0MSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CistCXUxNiAqZGVzdHJlZzsKKy0JdTE2IGRlc3R2YWwsZGVzdHZhbDI7CisrICAgIHUxNiAqZGVzdHJlZzsKKysgICAgdTE2IGRlc3R2YWwsIGRlc3R2YWwyOworIAorICAgICAvKiBZZXQgYW5vdGhlciBzcGVjaWFsIGNhc2UgaW5zdHJ1Y3Rpb24uICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTEwNDAsMTQgKzExNjYzLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdERXT1JEIFBUUiAiKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RFdPUkQgUFRSICIpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKK0BAIC0xMTA3OCw3ICsxMTcwMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIGluYyB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisgCitAQCAtMTEwODYsNyArMTE3MTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGluY19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMDk1LDcgKzExNzIxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorQEAgLTExMTAzLDcgKzExNzI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTExMiwxMyArMTE3MzksMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDI6ICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAzOiAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtMTExMjcsMjYgKzExNzU0LDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDU6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDU6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgTS54ODYuUl9DUyA9IGRlc3R2YWwyOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA2OiAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHB1c2hfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExNjgsNyArMTE3OTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGluY19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMTg1LDcgKzExODE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTE5NCwxMyArMTE4MjQsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDI6ICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAzOiAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtMTEyMDksMjYgKzExODM5LDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDU6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDU6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgTS54ODYuUl9DUyA9IGRlc3R2YWwyOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA2OiAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHB1c2hfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEyNTAsNyArMTE4ODEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGluY19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMjY3LDcgKzExODk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTI3NiwxMyArMTE5MDksMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDI6ICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAzOiAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtMTEyOTEsMjYgKzExOTI0LDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDU6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDU6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgTS54ODYuUl9DUyA9IGRlc3R2YWwyOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA2OiAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHB1c2hfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEzMzAsNyArMTE5NjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBpbmNfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC0xMTM0Nyw3ICsxMTk4Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlY19sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTExMzU2LDI2ICsxMTk5MiwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZWNfd29yZCgqZGVzdHJlZyk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSAqZGVzdHJlZzsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiT1BFUkFUSU9OIFVOREVGSU5FRCAwWEZGIFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBIQUxUX1NZUygpOworICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSA0OiAgICAgICAgIC8qIGptcCAgLi4uICovCisrICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgIC8qIGptcCAgLi4uICovCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpICgqZGVzdHJlZyk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDU6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDU6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk9QRVJBVElPTiBVTkRFRklORUQgMFhGRiBcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgSEFMVF9TWVMoKTsKK0BAIC0xMTM4OCw3ICsxMjAyNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTE0MDcsOCArMTIwNDQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogU2luZ2xlIGJ5dGUgb3BlcmF0aW9uIGNvZGUgdGFibGU6CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKy17Cisrdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSAodTgpID0geworIC8qICAweDAwICovIHg4NmVtdU9wX2FkZF9ieXRlX1JNX1IsCisgLyogIDB4MDEgKi8geDg2ZW11T3BfYWRkX3dvcmRfUk1fUiwKKyAvKiAgMHgwMiAqLyB4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNLAorQEAgLTExNDE3LDcgKzEyMDUzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDA1ICovIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSwKKyAvKiAgMHgwNiAqLyB4ODZlbXVPcF9wdXNoX0VTLAorIC8qICAweDA3ICovIHg4NmVtdU9wX3BvcF9FUywKKy0KKyAvKiAgMHgwOCAqLyB4ODZlbXVPcF9vcl9ieXRlX1JNX1IsCisgLyogIDB4MDkgKi8geDg2ZW11T3Bfb3Jfd29yZF9STV9SLAorIC8qICAweDBhICovIHg4NmVtdU9wX29yX2J5dGVfUl9STSwKK0BAIC0xMTQyNiw3ICsxMjA2MSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgwZCAqLyB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSwKKyAvKiAgMHgwZSAqLyB4ODZlbXVPcF9wdXNoX0NTLAorIC8qICAweDBmICovIHg4NmVtdU9wX3R3b19ieXRlLAorLQorIC8qICAweDEwICovIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IsCisgLyogIDB4MTEgKi8geDg2ZW11T3BfYWRjX3dvcmRfUk1fUiwKKyAvKiAgMHgxMiAqLyB4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNLAorQEAgLTExNDM1LDcgKzEyMDY5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDE1ICovIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSwKKyAvKiAgMHgxNiAqLyB4ODZlbXVPcF9wdXNoX1NTLAorIC8qICAweDE3ICovIHg4NmVtdU9wX3BvcF9TUywKKy0KKyAvKiAgMHgxOCAqLyB4ODZlbXVPcF9zYmJfYnl0ZV9STV9SLAorIC8qICAweDE5ICovIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IsCisgLyogIDB4MWEgKi8geDg2ZW11T3Bfc2JiX2J5dGVfUl9STSwKK0BAIC0xMTQ0NCw3ICsxMjA3Nyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgxZCAqLyB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0sCisgLyogIDB4MWUgKi8geDg2ZW11T3BfcHVzaF9EUywKKyAvKiAgMHgxZiAqLyB4ODZlbXVPcF9wb3BfRFMsCistCisgLyogIDB4MjAgKi8geDg2ZW11T3BfYW5kX2J5dGVfUk1fUiwKKyAvKiAgMHgyMSAqLyB4ODZlbXVPcF9hbmRfd29yZF9STV9SLAorIC8qICAweDIyICovIHg4NmVtdU9wX2FuZF9ieXRlX1JfUk0sCitAQCAtMTE0NTMsNyArMTIwODUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MjUgKi8geDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NLAorIC8qICAweDI2ICovIHg4NmVtdU9wX3NlZ292cl9FUywKKyAvKiAgMHgyNyAqLyB4ODZlbXVPcF9kYWEsCistCisgLyogIDB4MjggKi8geDg2ZW11T3Bfc3ViX2J5dGVfUk1fUiwKKyAvKiAgMHgyOSAqLyB4ODZlbXVPcF9zdWJfd29yZF9STV9SLAorIC8qICAweDJhICovIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0sCitAQCAtMTE0NjIsNyArMTIwOTMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MmQgKi8geDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NLAorIC8qICAweDJlICovIHg4NmVtdU9wX3NlZ292cl9DUywKKyAvKiAgMHgyZiAqLyB4ODZlbXVPcF9kYXMsCistCisgLyogIDB4MzAgKi8geDg2ZW11T3BfeG9yX2J5dGVfUk1fUiwKKyAvKiAgMHgzMSAqLyB4ODZlbXVPcF94b3Jfd29yZF9STV9SLAorIC8qICAweDMyICovIHg4NmVtdU9wX3hvcl9ieXRlX1JfUk0sCitAQCAtMTE0NzEsNyArMTIxMDEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MzUgKi8geDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NLAorIC8qICAweDM2ICovIHg4NmVtdU9wX3NlZ292cl9TUywKKyAvKiAgMHgzNyAqLyB4ODZlbXVPcF9hYWEsCistCisgLyogIDB4MzggKi8geDg2ZW11T3BfY21wX2J5dGVfUk1fUiwKKyAvKiAgMHgzOSAqLyB4ODZlbXVPcF9jbXBfd29yZF9STV9SLAorIC8qICAweDNhICovIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0sCitAQCAtMTE0ODAsNyArMTIxMDksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4M2QgKi8geDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NLAorIC8qICAweDNlICovIHg4NmVtdU9wX3NlZ292cl9EUywKKyAvKiAgMHgzZiAqLyB4ODZlbXVPcF9hYXMsCistCisgLyogIDB4NDAgKi8geDg2ZW11T3BfaW5jX0FYLAorIC8qICAweDQxICovIHg4NmVtdU9wX2luY19DWCwKKyAvKiAgMHg0MiAqLyB4ODZlbXVPcF9pbmNfRFgsCitAQCAtMTE0ODksNyArMTIxMTcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NDUgKi8geDg2ZW11T3BfaW5jX0JQLAorIC8qICAweDQ2ICovIHg4NmVtdU9wX2luY19TSSwKKyAvKiAgMHg0NyAqLyB4ODZlbXVPcF9pbmNfREksCistCisgLyogIDB4NDggKi8geDg2ZW11T3BfZGVjX0FYLAorIC8qICAweDQ5ICovIHg4NmVtdU9wX2RlY19DWCwKKyAvKiAgMHg0YSAqLyB4ODZlbXVPcF9kZWNfRFgsCitAQCAtMTE0OTgsNyArMTIxMjUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NGQgKi8geDg2ZW11T3BfZGVjX0JQLAorIC8qICAweDRlICovIHg4NmVtdU9wX2RlY19TSSwKKyAvKiAgMHg0ZiAqLyB4ODZlbXVPcF9kZWNfREksCistCisgLyogIDB4NTAgKi8geDg2ZW11T3BfcHVzaF9BWCwKKyAvKiAgMHg1MSAqLyB4ODZlbXVPcF9wdXNoX0NYLAorIC8qICAweDUyICovIHg4NmVtdU9wX3B1c2hfRFgsCitAQCAtMTE1MDcsNyArMTIxMzMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NTUgKi8geDg2ZW11T3BfcHVzaF9CUCwKKyAvKiAgMHg1NiAqLyB4ODZlbXVPcF9wdXNoX1NJLAorIC8qICAweDU3ICovIHg4NmVtdU9wX3B1c2hfREksCistCisgLyogIDB4NTggKi8geDg2ZW11T3BfcG9wX0FYLAorIC8qICAweDU5ICovIHg4NmVtdU9wX3BvcF9DWCwKKyAvKiAgMHg1YSAqLyB4ODZlbXVPcF9wb3BfRFgsCitAQCAtMTE1MTYsMTYgKzEyMTQxLDE2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg1ZCAqLyB4ODZlbXVPcF9wb3BfQlAsCisgLyogIDB4NWUgKi8geDg2ZW11T3BfcG9wX1NJLAorIC8qICAweDVmICovIHg4NmVtdU9wX3BvcF9ESSwKKy0KKyAvKiAgMHg2MCAqLyB4ODZlbXVPcF9wdXNoX2FsbCwKKyAvKiAgMHg2MSAqLyB4ODZlbXVPcF9wb3BfYWxsLAorLS8qICAweDYyICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsICAgLyogYm91bmQgKi8KKy0vKiAgMHg2MyAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLCAgIC8qIGFycGwgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHg2MiAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJvdW5kICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4NjMgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcnBsICovCisgLyogIDB4NjQgKi8geDg2ZW11T3Bfc2Vnb3ZyX0ZTLAorIC8qICAweDY1ICovIHg4NmVtdU9wX3NlZ292cl9HUywKKyAvKiAgMHg2NiAqLyB4ODZlbXVPcF9wcmVmaXhfZGF0YSwKKyAvKiAgMHg2NyAqLyB4ODZlbXVPcF9wcmVmaXhfYWRkciwKKy0KKyAvKiAgMHg2OCAqLyB4ODZlbXVPcF9wdXNoX3dvcmRfSU1NLAorIC8qICAweDY5ICovIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0sCisgLyogIDB4NmEgKi8geDg2ZW11T3BfcHVzaF9ieXRlX0lNTSwKK0BAIC0xMTUzNCw3ICsxMjE1OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg2ZCAqLyB4ODZlbXVPcF9pbnNfd29yZCwKKyAvKiAgMHg2ZSAqLyB4ODZlbXVPcF9vdXRzX2J5dGUsCisgLyogIDB4NmYgKi8geDg2ZW11T3Bfb3V0c193b3JkLAorLQorIC8qICAweDcwICovIHg4NmVtdU9wX2p1bXBfbmVhcl9PLAorIC8qICAweDcxICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OTywKKyAvKiAgMHg3MiAqLyB4ODZlbXVPcF9qdW1wX25lYXJfQiwKK0BAIC0xMTU0Myw3ICsxMjE2Nyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg3NSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTlosCisgLyogIDB4NzYgKi8geDg2ZW11T3BfanVtcF9uZWFyX0JFLAorIC8qICAweDc3ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OQkUsCistCisgLyogIDB4NzggKi8geDg2ZW11T3BfanVtcF9uZWFyX1MsCisgLyogIDB4NzkgKi8geDg2ZW11T3BfanVtcF9uZWFyX05TLAorIC8qICAweDdhICovIHg4NmVtdU9wX2p1bXBfbmVhcl9QLAorQEAgLTExNTUyLDcgKzEyMTc1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDdkICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OTCwKKyAvKiAgMHg3ZSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTEUsCisgLyogIDB4N2YgKi8geDg2ZW11T3BfanVtcF9uZWFyX05MRSwKKy0KKyAvKiAgMHg4MCAqLyB4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSwKKyAvKiAgMHg4MSAqLyB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSwKKyAvKiAgMHg4MiAqLyB4ODZlbXVPcF9vcGM4Ml9ieXRlX1JNX0lNTSwKK0BAIC0xMTU2MSw3ICsxMjE4Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg4NSAqLyB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUiwKKyAvKiAgMHg4NiAqLyB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUiwKKyAvKiAgMHg4NyAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUiwKKy0KKyAvKiAgMHg4OCAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SLAorIC8qICAweDg5ICovIHg4NmVtdU9wX21vdl93b3JkX1JNX1IsCisgLyogIDB4OGEgKi8geDg2ZW11T3BfbW92X2J5dGVfUl9STSwKK0BAIC0xMTU3MCw3ICsxMjE5MSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg4ZCAqLyB4ODZlbXVPcF9sZWFfd29yZF9SX00sCisgLyogIDB4OGUgKi8geDg2ZW11T3BfbW92X3dvcmRfU1JfUk0sCisgLyogIDB4OGYgKi8geDg2ZW11T3BfcG9wX1JNLAorLQorIC8qICAweDkwICovIHg4NmVtdU9wX25vcCwKKyAvKiAgMHg5MSAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1gsCisgLyogIDB4OTIgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYLAorQEAgLTExNTc5LDcgKzEyMTk5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDk1ICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCwKKyAvKiAgMHg5NiAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0ksCisgLyogIDB4OTcgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJLAorLQorIC8qICAweDk4ICovIHg4NmVtdU9wX2NidywKKyAvKiAgMHg5OSAqLyB4ODZlbXVPcF9jd2QsCisgLyogIDB4OWEgKi8geDg2ZW11T3BfY2FsbF9mYXJfSU1NLAorQEAgLTExNTg4LDcgKzEyMjA3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDlkICovIHg4NmVtdU9wX3BvcGZfd29yZCwKKyAvKiAgMHg5ZSAqLyB4ODZlbXVPcF9zYWhmLAorIC8qICAweDlmICovIHg4NmVtdU9wX2xhaGYsCistCisgLyogIDB4YTAgKi8geDg2ZW11T3BfbW92X0FMX01fSU1NLAorIC8qICAweGExICovIHg4NmVtdU9wX21vdl9BWF9NX0lNTSwKKyAvKiAgMHhhMiAqLyB4ODZlbXVPcF9tb3ZfTV9BTF9JTU0sCitAQCAtMTE2MDUsOCArMTIyMjMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4YWQgKi8geDg2ZW11T3BfbG9kc193b3JkLAorIC8qICAweGFjICovIHg4NmVtdU9wX3NjYXNfYnl0ZSwKKyAvKiAgMHhhZCAqLyB4ODZlbXVPcF9zY2FzX3dvcmQsCistCistCisgLyogIDB4YjAgKi8geDg2ZW11T3BfbW92X2J5dGVfQUxfSU1NLAorIC8qICAweGIxICovIHg4NmVtdU9wX21vdl9ieXRlX0NMX0lNTSwKKyAvKiAgMHhiMiAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9ETF9JTU0sCitAQCAtMTE2MTUsNyArMTIyMzEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4YjUgKi8geDg2ZW11T3BfbW92X2J5dGVfQ0hfSU1NLAorIC8qICAweGI2ICovIHg4NmVtdU9wX21vdl9ieXRlX0RIX0lNTSwKKyAvKiAgMHhiNyAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9CSF9JTU0sCistCisgLyogIDB4YjggKi8geDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NLAorIC8qICAweGI5ICovIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSwKKyAvKiAgMHhiYSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0sCitAQCAtMTE2MjQsNyArMTIyMzksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4YmQgKi8geDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NLAorIC8qICAweGJlICovIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSwKKyAvKiAgMHhiZiAqLyB4ODZlbXVPcF9tb3Zfd29yZF9ESV9JTU0sCistCisgLyogIDB4YzAgKi8geDg2ZW11T3Bfb3BjQzBfYnl0ZV9STV9NRU0sCisgLyogIDB4YzEgKi8geDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0sCisgLyogIDB4YzIgKi8geDg2ZW11T3BfcmV0X25lYXJfSU1NLAorQEAgLTExNjQxLDE0ICsxMjI1NSwxNCBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4Y2QgKi8geDg2ZW11T3BfaW50X0lNTSwKKyAvKiAgMHhjZSAqLyB4ODZlbXVPcF9pbnRvLAorIC8qICAweGNmICovIHg4NmVtdU9wX2lyZXQsCistCisgLyogIDB4ZDAgKi8geDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xLAorIC8qICAweGQxICovIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSwKKyAvKiAgMHhkMiAqLyB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMLAorIC8qICAweGQzICovIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wsCisgLyogIDB4ZDQgKi8geDg2ZW11T3BfYWFtLAorIC8qICAweGQ1ICovIHg4NmVtdU9wX2FhZCwKKy0vKiAgMHhkNiAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLCAgIC8qIFVuZG9jdW1lbnRlZCBTRVRBTEMgaW5zdHJ1Y3Rpb24gKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhkNiAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuZG9jdW1lbnRlZCBTRVRBTEMgaW5zdHJ1Y3Rpb24gKi8KKyAvKiAgMHhkNyAqLyB4ODZlbXVPcF94bGF0LAorIC8qICAweGQ4ICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDgsCisgLyogIDB4ZDkgKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOSwKK0BAIC0xMTY1OCw3ICsxMjI3Miw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhkZCAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkLAorIC8qICAweGRlICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGUsCisgLyogIDB4ZGYgKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZiwKKy0KKyAvKiAgMHhlMCAqLyB4ODZlbXVPcF9sb29wbmUsCisgLyogIDB4ZTEgKi8geDg2ZW11T3BfbG9vcGUsCisgLyogIDB4ZTIgKi8geDg2ZW11T3BfbG9vcCwKK0BAIC0xMTY2Nyw3ICsxMjI4MCw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhlNSAqLyB4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSwKKyAvKiAgMHhlNiAqLyB4ODZlbXVPcF9vdXRfYnl0ZV9JTU1fQUwsCisgLyogIDB4ZTcgKi8geDg2ZW11T3Bfb3V0X3dvcmRfSU1NX0FYLAorLQorIC8qICAweGU4ICovIHg4NmVtdU9wX2NhbGxfbmVhcl9JTU0sCisgLyogIDB4ZTkgKi8geDg2ZW11T3BfanVtcF9uZWFyX0lNTSwKKyAvKiAgMHhlYSAqLyB4ODZlbXVPcF9qdW1wX2Zhcl9JTU0sCitAQCAtMTE2NzYsNyArMTIyODgsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZWQgKi8geDg2ZW11T3BfaW5fd29yZF9BWF9EWCwKKyAvKiAgMHhlZSAqLyB4ODZlbXVPcF9vdXRfYnl0ZV9EWF9BTCwKKyAvKiAgMHhlZiAqLyB4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCwKKy0KKyAvKiAgMHhmMCAqLyB4ODZlbXVPcF9sb2NrLAorIC8qICAweGYxICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsCisgLyogIDB4ZjIgKi8geDg2ZW11T3BfcmVwbmUsCitAQCAtMTE2ODUsNyArMTIyOTYsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZjUgKi8geDg2ZW11T3BfY21jLAorIC8qICAweGY2ICovIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0sCisgLyogIDB4ZjcgKi8geDg2ZW11T3Bfb3BjRjdfd29yZF9STSwKKy0KKyAvKiAgMHhmOCAqLyB4ODZlbXVPcF9jbGMsCisgLyogIDB4ZjkgKi8geDg2ZW11T3Bfc3RjLAorIC8qICAweGZhICovIHg4NmVtdU9wX2NsaSwKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9vcHMyLmMgYi9saWJzL3g4NmVtdS9vcHMyLmMKK2luZGV4IDA2YjdmNTYuLjVlZDJiZjYgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9vcHMyLmMKKysrKyBiL2xpYnMveDg2ZW11L29wczIuYworQEAgLTU1LDE2ICs1NSwxNCBAQCBvcDEgLSBJbnN0cnVjdGlvbiBvcCBjb2RlCisgUkVNQVJLUzoKKyBIYW5kbGVzIGlsbGVnYWwgb3Bjb2Rlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbGxlZ2FsX29wKAorLQl1OCBvcDIpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfaWxsZWdhbF9vcCh1OCBvcDIpCisgeworLQlpbnQgbW9kLCBybCwgcmg7CistCVNUQVJUX09GX0lOU1RSKCk7CistCUZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CistCURFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERVxuIik7CistCVRSQUNFX1JFR1MoKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggLyVkIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSEgKG1vZD0lZCBybD0lZClcbiIsCistCQlNLng4Ni5SX0NTLCBNLng4Ni5SX0lQLTIsb3AyLCByaCwgbW9kLCBybCk7CisrICAgIFNUQVJUX09GX0lOU1RSKCk7CisrICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERVxuIik7CisrICAgIFRSQUNFX1JFR1MoKTsKKysgICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIVxuIiwKKysgICAgICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAgLSAyLCBvcDIpOworICAgICBIQUxUX1NZUygpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtNzMsNTUgKzcxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbGxlZ2FsX29wKAorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKy1IYW5kbGVzIG9wY29kZSAweDBmLDB4MDEKKy0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ncm91cF9nKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKy17CistCWludCBtb2QsIHJsLCByaDsKKy0JdTE2ICpkZXN0cmVnOworLQl1aW50IGRlc3RvZmZzZXQ7CistCistCVNUQVJUX09GX0lOU1RSKCk7CistCUZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CistCXN3aXRjaCAocmgpIHsKKy0JCWNhc2UgNDogLy8gU01TVyAoU3RvcmUgTWFjaGluZSBTdGF0dXMgV29yZCkKKy0JCQkvLyBEZWNvZGUgdGhlIG1vZCBieXRlIHRvIGZpbmQgdGhlIGFkZHJlc3NpbmcKKy0JCQkvLyBBbHdheXMgcmV0dXJucyAweDEwIChpbml0aWFsIHZhbHVlIGFzIHBlciBpbnRlbCBtYW51YWwgdm9sdW1lIDMsIGZpZ3VyZSA4LTEKKy0JCQlzd2l0Y2ggKG1vZCkgeworLQkJCQljYXNlIDA6CistCQkJCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgMHgxMCk7CistCQkJCQlicmVhazsKKy0JCQkJY2FzZSAxOgorLQkJCQkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCQkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIDB4MTApOworLQkJCQkJYnJlYWs7CistCQkJCWNhc2UgMjoKKy0JCQkJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQkJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAweDEwKTsKKy0JCQkJCWJyZWFrOworLQkJCQljYXNlIDM6CistCQkJCQlkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCQkJKmRlc3RyZWcgPSAweDEwOworLQkJCQkJYnJlYWs7CistCQkJfQorLQkJCWJyZWFrOworLQkJZGVmYXVsdDoKKy0JCQlERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUgSU4gMEYgMDFcbiIpOworLQkJCVRSQUNFX1JFR1MoKTsKKy0JCQlwcmludGsoIiUwNHg6JTA0eDogMEYgJTAyWCAvJWQgSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFISAobW9kPSVkIHJsPSVkKVxuIiwKKy0JCQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0yLG9wMiwgcmgsIG1vZCwgcmwpOworLQkJCUhBTFRfU1lTKCk7CistCQkJYnJlYWs7CistCX0KKy0JRU5EX09GX0lOU1RSKCk7CistfQorLQorLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4MzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9yZHRzYyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfcmR0c2ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAjaWZkZWYgX19IQVNfTE9OR19MT05HX18KKyAgICAgc3RhdGljIHU2NCBjb3VudGVyID0gMDsKK0BAIC0xNTUsOTAgKzEwOCw5MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfcmR0c2ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweDgwLTB4OEYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sb25nX2p1bXAodTggb3AyKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xvbmdfanVtcCh1OCBvcDIpCisgeworICAgICBzMzIgdGFyZ2V0OworLSAgICBjaGFyICpuYW1lID0gMDsKKysgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgIGludCBjb25kID0gMDsKKyAKKyAgICAgLyogY29uZGl0aW9uYWwganVtcCB0byB3b3JkIG9mZnNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgc3dpdGNoIChvcDIpIHsKKy0gICAgICBjYXNlIDB4ODA6CisrICAgIGNhc2UgMHg4MDoKKyAgICAgICAgIG5hbWUgPSAiSk9cdCI7CistICAgICAgICBjb25kID0gIEFDQ0VTU19GTEFHKEZfT0YpOworKyAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgxOgorKyAgICBjYXNlIDB4ODE6CisgICAgICAgICBuYW1lID0gIkpOT1x0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9PRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODI6CisrICAgIGNhc2UgMHg4MjoKKyAgICAgICAgIG5hbWUgPSAiSkJcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODM6CisrICAgIGNhc2UgMHg4MzoKKyAgICAgICAgIG5hbWUgPSAiSk5CXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX0NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4NDoKKysgICAgY2FzZSAweDg0OgorICAgICAgICAgbmFtZSA9ICJKWlx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4NToKKysgICAgY2FzZSAweDg1OgorICAgICAgICAgbmFtZSA9ICJKTlpcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDg2OgorKyAgICBjYXNlIDB4ODY6CisgICAgICAgICBuYW1lID0gIkpCRVx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4NzoKKysgICAgY2FzZSAweDg3OgorICAgICAgICAgbmFtZSA9ICJKTkJFXHQiOworICAgICAgICAgY29uZCA9ICEoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDg4OgorKyAgICBjYXNlIDB4ODg6CisgICAgICAgICBuYW1lID0gIkpTXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfU0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDg5OgorKyAgICBjYXNlIDB4ODk6CisgICAgICAgICBuYW1lID0gIkpOU1x0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9TRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGE6CisrICAgIGNhc2UgMHg4YToKKyAgICAgICAgIG5hbWUgPSAiSlBcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGI6CisrICAgIGNhc2UgMHg4YjoKKyAgICAgICAgIG5hbWUgPSAiSk5QXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1BGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4YzoKKysgICAgY2FzZSAweDhjOgorICAgICAgICAgbmFtZSA9ICJKTFx0IjsKKyAgICAgICAgIGNvbmQgPSB4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGQ6CisrICAgIGNhc2UgMHg4ZDoKKyAgICAgICAgIG5hbWUgPSAiSk5MXHQiOworICAgICAgICAgY29uZCA9ICEoeG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4ZToKKysgICAgY2FzZSAweDhlOgorICAgICAgICAgbmFtZSA9ICJKTEVcdCI7CisgICAgICAgICBjb25kID0gKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorICAgICAgICAgICAgICAgICBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGY6CisrICAgIGNhc2UgMHg4ZjoKKyAgICAgICAgIG5hbWUgPSAiSk5MRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorICAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URihuYW1lKTsKKy0gICAgKHZvaWQpbmFtZTsKKysgICAgKHZvaWQpIG5hbWU7CisgICAgIHRhcmdldCA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CisgICAgIHRhcmdldCArPSAoczE2KSBNLng4Ni5SX0lQOworICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKGNvbmQpCistICAgICAgICBNLng4Ni5SX0lQID0gKHUxNil0YXJnZXQ7CisrICAgICAgICBNLng4Ni5SX0lQID0gKHUxNikgdGFyZ2V0OworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC0yNDcsODUgKzIwMSw4NiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbG9uZ19qdW1wKHU4IG9wMikKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHg5MC0weDlGCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2V0X2J5dGUodTggb3AyKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworLSAgICB1OCAgKmRlc3RyZWc7CistICAgIGNoYXIgKm5hbWUgPSAwOworKyAgICB1OCAqZGVzdHJlZzsKKysgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgIGludCBjb25kID0gMDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgc3dpdGNoIChvcDIpIHsKKy0gICAgICBjYXNlIDB4OTA6CisrICAgIGNhc2UgMHg5MDoKKyAgICAgICAgIG5hbWUgPSAiU0VUT1x0IjsKKy0gICAgICAgIGNvbmQgPSAgQUNDRVNTX0ZMQUcoRl9PRik7CisrICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9PRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTE6CisrICAgIGNhc2UgMHg5MToKKyAgICAgICAgIG5hbWUgPSAiU0VUTk9cdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkyOgorKyAgICBjYXNlIDB4OTI6CisgICAgICAgICBuYW1lID0gIlNFVEJcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTM6CisrICAgIGNhc2UgMHg5MzoKKyAgICAgICAgIG5hbWUgPSAiU0VUTkJcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk0OgorKyAgICBjYXNlIDB4OTQ6CisgICAgICAgICBuYW1lID0gIlNFVFpcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTU6CisrICAgIGNhc2UgMHg5NToKKyAgICAgICAgIG5hbWUgPSAiU0VUTlpcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk2OgorKyAgICBjYXNlIDB4OTY6CisgICAgICAgICBuYW1lID0gIlNFVEJFXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk3OgorKyAgICBjYXNlIDB4OTc6CisgICAgICAgICBuYW1lID0gIlNFVE5CRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5ODoKKysgICAgY2FzZSAweDk4OgorICAgICAgICAgbmFtZSA9ICJTRVRTXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfU0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk5OgorKyAgICBjYXNlIDB4OTk6CisgICAgICAgICBuYW1lID0gIlNFVE5TXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5YToKKysgICAgY2FzZSAweDlhOgorICAgICAgICAgbmFtZSA9ICJTRVRQXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfUEYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDliOgorKyAgICBjYXNlIDB4OWI6CisgICAgICAgICBuYW1lID0gIlNFVE5QXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1BGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5YzoKKysgICAgY2FzZSAweDljOgorICAgICAgICAgbmFtZSA9ICJTRVRMXHQiOworICAgICAgICAgY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5ZDoKKysgICAgY2FzZSAweDlkOgorICAgICAgICAgbmFtZSA9ICJTRVROTFx0IjsKKyAgICAgICAgIGNvbmQgPSB4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWU6CisrICAgIGNhc2UgMHg5ZToKKyAgICAgICAgIG5hbWUgPSAiU0VUTEVcdCI7CisgICAgICAgICBjb25kID0gKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorICAgICAgICAgICAgICAgICBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWY6CisrICAgIGNhc2UgMHg5ZjoKKyAgICAgICAgIG5hbWUgPSAiU0VUTkxFXHQiOworICAgICAgICAgY29uZCA9ICEoeG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpIHx8CisgICAgICAgICAgICAgICAgICBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfUFJJTlRGKG5hbWUpOworLSAgICAodm9pZCluYW1lOworKyAgICAodm9pZCkgbmFtZTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorQEAgLTM0Myw3ICsyOTgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2V0X2J5dGUodTggb3AyKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBjb25kID8gMHgwMSA6IDB4MDApOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IGNvbmQgPyAweDAxIDogMHgwMDsKK0BAIC0zNTcsNyArMzEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3B1c2hfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RlNcbiIpOworQEAgLTM3MSw3ICszMjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfcHVzaF9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3BvcF9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEZTXG4iKTsKK0BAIC0zODUsNyArMzQyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3BvcF9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzogQ1BVSUQgdGFrZXMgRUFYL0VDWCBhcyBpbnB1dHMsIHdyaXRlcyBFQVgvRUJYL0VDWC9FRFggYXMgb3V0cHV0CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGEyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfY3B1aWQodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkNQVUlEXG4iKTsKK0BAIC0zOTksMTEgKzM1NywxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfY3B1aWQodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworLSAgICBpbnQgYml0LGRpc3A7CisrICAgIGludCBiaXQsIGRpc3A7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkJUXHQiKTsKK0BAIC00MTksMTAgKzM3OCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTQzMSw5ICszOTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CitAQCAtNDQ2LDEwICs0MDYsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC00NTgsOSArNDE5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorQEAgLTQ3MywxMCArNDM0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNDg1LDMwICs0NDcsMzEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKnNyY3JlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKnNyY3JlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSwgRl9DRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNTIwLDExICs0ODMsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworLQl1OCBzaGlmdDsKKysgICAgdTggc2hpZnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNITERcdCIpOworQEAgLTU0Myw5ICs1MDcsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC01NTcsNyArNTIyLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC01NzQsOSArNTM5LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNTg4LDcgKzU1NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNjA1LDkgKzU3MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTYxOSwxMyArNTg2LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MzQsOSArNjAxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfbG9uZygqZGVzdHJlZywgKnNoaWZ0cmVnLCBzaGlmdCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02NDUsNyArNjEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNjU3LDcgKzYyNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTY3Nyw5ICs2NDYsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTY4OSw3ICs2NTksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNzA0LDkgKzY3NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNzE2LDcgKzY4Nyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC03MzEsOSArNzAyLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC03NDMsMjkgKzcxNSwzMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF93b3JkKCpkZXN0cmVnLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNzc3LDcgKzc1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3B1c2hfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0R1NcbiIpOworQEAgLTc5MSw3ICs3NjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfcHVzaF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wb3BfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3BvcF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEdTXG4iKTsKK0BAIC04MDUsMTEgKzc4MCwxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworLSAgICBpbnQgYml0LGRpc3A7CisrICAgIGludCBiaXQsIGRpc3A7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkJUU1x0Iik7CitAQCAtODE3LDcgKzc5Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtODI1LDEzICs4MDEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC04MzksMTYgKzgxNiwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTg1NiwxMyArODMzLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtODcwLDE2ICs4NDgsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC04ODcsNTEgKzg2NSw1MyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CistCQl9CistCQlicmVhazsKKy0JY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTMyIG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnIHw9IG1hc2s7CistCQl9IGVsc2UgeworLQkJCXUxNiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MTYgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyIG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyB8PSBtYXNrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MTYgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworICAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTk0NCwxMSArOTI0LDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CistCXU4IHNoaWZ0OworKyAgICB1OCBzaGlmdDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU0hMRFx0Iik7CitAQCAtOTY3LDkgKzk0OCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTk4MSw3ICs5NjMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTk5OCw5ICs5ODAsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMDEyLDcgKzk5NSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTAyOSw5ICsxMDEyLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTA0MywxMyArMTAyNywxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTA1OCw5ICsxMDQyLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfbG9uZygqZGVzdHJlZywgKnNoaWZ0cmVnLCBzaGlmdCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDY5LDcgKzEwNTQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0xMDgxLDcgKzEwNjYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGFkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xMTAxLDkgKzEwODcsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTExMTMsNyArMTEwMCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC0xMTI4LDkgKzExMTUsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTExNDAsNyArMTEyOCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC0xMTU1LDkgKzExNDMsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTExNjcsMjkgKzExNTYsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfbG9uZygqZGVzdHJlZywgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTEyMDEsNyArMTE5MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTIxNCwyMyArMTIwNSwyNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMilzcmN2YWwpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSBzcmN2YWwpOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC0xMjQwLDM4ICsxMjMzLDQxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpc3JjdmFsOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogZGVzdHJlZyAqIChzMTYpIHNyY3ZhbDsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpkZXN0cmVnLChzMzIpc3JjdmFsKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogZGVzdHJlZywgKHMzMikgc3JjdmFsKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtMTI4MSwzOCArMTI3Nyw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSBzcmN2YWw7CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIGRlc3RyZWcsIChzMzIpIHNyY3ZhbCk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTEzMjIsNTEgKzEzMjEsNTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNilzcmN2YWw7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBkZXN0cmVnICogKHMxNikgc3JjdmFsOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpkZXN0cmVnLChzMzIpKnNyY3JlZyk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIGRlc3RyZWcsIChzMzIpICogc3JjcmVnKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MzIgcmVzOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNikqc3JjcmVnOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogZGVzdHJlZyAqIChzMTYpICogc3JjcmVnOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0xMzc4LDkgKzEzODEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xzc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE0MTUsNyArMTQxOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9TUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNDI3LDE0OCArMTQzMSwxNTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xzc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHJfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRyX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKy0JaW50IG1vZCwgcmwsIHJoOworLQl1aW50IHNyY29mZnNldDsKKy0JaW50IGJpdCxkaXNwOworLQorLQlTVEFSVF9PRl9JTlNUUigpOworLQlERUNPREVfUFJJTlRGKCJCVFJcdCIpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlzd2l0Y2ggKG1vZCkgeworLQljYXNlIDA6CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgc3JjdmFsLG1hc2s7CistCQkJdTMyICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsICYgfm1hc2spOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgc3JjdmFsLG1hc2s7CistCQkJdTE2ICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCAmIH5tYXNrKSk7CistCQl9CistCQlicmVhazsKKy0JY2FzZSAxOgorLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyIHNyY3ZhbCxtYXNrOworLQkJCXUzMiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCX0gZWxzZSB7CistCQkJdTE2IHNyY3ZhbCxtYXNrOworLQkJCXUxNiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgJiB+bWFzaykpOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMjoKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiBzcmN2YWwsbWFzazsKKy0JCQl1MzIgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgJiB+bWFzayk7CistCQl9IGVsc2UgeworLQkJCXUxNiBzcmN2YWwsbWFzazsKKy0JCQl1MTYgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsICYgfm1hc2spKTsKKy0JCX0KKy0JCWJyZWFrOworLQljYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MzIgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkJCSpzcmNyZWcgJj0gfm1hc2s7CistCQl9IGVsc2UgeworLQkJCXUxNiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MTYgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnICY9IH5tYXNrOworLQkJfQorLQkJYnJlYWs7CistCX0KKy0JREVDT0RFX0NMRUFSX1NFR09WUigpOworLQlFTkRfT0ZfSU5TVFIoKTsKKysgICAgaW50IG1vZCwgcmwsIHJoOworKyAgICB1aW50IHNyY29mZnNldDsKKysgICAgaW50IGJpdCwgZGlzcDsKKysKKysgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKysgICAgREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKysgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKysgICAgc3dpdGNoIChtb2QpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsICYgfm1hc2spKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDE6CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgJiB+bWFzaykpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMjoKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCAmIH5tYXNrKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyIG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICAqc3JjcmVnICY9IH5tYXNrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworKyAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbGZzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CistCWludCBtb2QsIHJoLCBybDsKKysgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKKyAgICAgdWludCBzcmNvZmZzZXQ7CisgCitAQCAtMTYwMyw3ICsxNjEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICBNLng4Ni5SX0ZTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogVU5ERUZJTkVEISAqLworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgfQorQEAgLTE2MTUsOSArMTYyNSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGZzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xnc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbGdzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CistCWludCBtb2QsIHJoLCBybDsKKysgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKKyAgICAgdWludCBzcmNvZmZzZXQ7CisgCitAQCAtMTY1Miw3ICsxNjYzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xnc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICBNLng4Ni5SX0dTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogVU5ERUZJTkVEISAqLworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgfQorQEAgLTE2NjQsNyArMTY3NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGI2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xNjg1LDcgKzE2OTcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTcxMCw3ICsxNzIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE3MzUsNyArMTc0OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNzQ4LDEwICsxNzYzLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworLSAgICAgICAgICAgIHU4ICAqc3JjcmVnOworKyAgICAgICAgICAgIHU4ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTc1OSw5ICsxNzc0LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHU4ICAqc3JjcmVnOworKyAgICAgICAgICAgIHU4ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTc4MCw3ICsxNzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX21vdnp4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTE4MTksNyArMTgzNiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC0xODM2LDcgKzE4NTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTE4NDYsMjMgKzE4NjQsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChyaCkgeworICAgICBjYXNlIDQ6CistCURFQ09ERV9QUklOVEYoIkJUXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFx0Iik7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA1OgorLQlERUNPREVfUFJJTlRGKCJCVFNcdCIpOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJUU1x0Iik7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA2OgorLQlERUNPREVfUFJJTlRGKCJCVFJcdCIpOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJUUlx0Iik7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA3OgorLQlERUNPREVfUFJJTlRGKCJCVENcdCIpOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJUQ1x0Iik7CisrICAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKy0JREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFXG4iKTsKKy0JVFJBQ0VfUkVHUygpOworLQlwcmludGsoIiUwNHg6JTA0eDogJTAyWCUwMlggSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIEVYVEVOU0lPTiFcbiIsCistCQlNLng4Ni5SX0NTLCBNLng4Ni5SX0lQLTMsb3AyLCAobW9kPDw2KXwocmg8PDMpfHJsKTsKKy0JSEFMVF9TWVMoKTsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERVxuIik7CisrICAgICAgICBUUkFDRV9SRUdTKCk7CisrICAgICAgICBwcmludGsoIiUwNHg6JTA0eDogJTAyWCUwMlggSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIEVYVEVOU0lPTiFcbiIsCisrICAgICAgICAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUCAtIDMsIG9wMiwgKG1vZCA8PCA2KSB8IChyaCA8PCAzKSB8IHJsKTsKKysgICAgICAgIEhBTFRfU1lTKCk7CisgICAgIH0KKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorQEAgLTE4NzYsMjIgKzE4OTQsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHU4IHNoaWZ0OworIAorQEAgLTE5MDEsMjEgKzE5MjAsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKK0BAIC0xOTI5LDIyICsxOTQ4LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1OCBzaGlmdDsKKyAKK0BAIC0xOTU0LDIxICsxOTc0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CitAQCAtMTk4MiwyMiArMjAwMiwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTggc2hpZnQ7CisgCitAQCAtMjAwNyw3NCArMjAyOCw3NSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqc3JjcmVnOworLQkgICAgdTMyIG1hc2s7CistCSAgICB1OCBzaGlmdDsKKysgICAgICAgICAgICB1MzIgbWFzazsKKysgICAgICAgICAgICB1OCBzaGlmdDsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQkqc3JjcmVnIHw9IG1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCSpzcmNyZWcgJj0gfm1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCSpzcmNyZWcgXj0gbWFzazsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnIF49IG1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworLQkgICAgdTE2IG1hc2s7CistCSAgICB1OCBzaGlmdDsKKysgICAgICAgICAgICB1MTYgbWFzazsKKysgICAgICAgICAgICB1OCBzaGlmdDsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCSpzcmNyZWcgfD0gbWFzazsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJKnNyY3JlZyAmPSB+bWFzazsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJKnNyY3JlZyBePSBtYXNrOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgKnNyY3JlZyB8PSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTIwODYsMTEgKzIxMDgsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworLSAgICBpbnQgYml0LGRpc3A7CisrICAgIGludCBiaXQsIGRpc3A7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkJUQ1x0Iik7CitAQCAtMjA5OCw3ICsyMTIxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC0yMTA2LDEzICsyMTI5LDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMjEyMCwxNiArMjE0NCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgXiBtYXNrKSk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCBeIG1hc2spKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTIxMzcsMTMgKzIxNjEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0yMTUxLDE2ICsyMTc2LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCBeIG1hc2spKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsIF4gbWFzaykpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtMjE2OCwxMyArMjE5MywxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTIxODIsMTYgKzIyMDgsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsIF4gbWFzaykpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgXiBtYXNrKSk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgKnNyY3JlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcsICpzaGlmdHJlZzsKKyAgICAgICAgICAgICB1MzIgbWFzazsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CitAQCAtMjIwMCwxOSArMjIyNiwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkJCSpzcmNyZWcgXj0gbWFzazsKKy0JCX0gZWxzZSB7CistCQkJdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUxNiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICAqc3JjcmVnIF49IG1hc2s7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUxNiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisgICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMjIyNSw3ICsyMjUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2JzZih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjIzMywxMDUgKzIyNjEsMTE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic2YodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCU0ZcdCIpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLSAgICBzd2l0Y2gobW9kKSB7CisrICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworLSAgICBjYXNlIDM6CQkJCS8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTIzNDEsNyArMjM4MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic2YodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNyKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yMzQ5LDEwNSArMjM5MCwxMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzcih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkJTUlx0Iik7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CistICAgIHN3aXRjaChtb2QpIHsKKysgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CistICAgIGNhc2UgMzoJCQkJLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3JjdmFsID0gKkRFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmN2YWwgPSAqREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMjQ1Nyw3ICsyNTEwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzcih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI0NzQsMTggKzI1MjgsMTkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMxNikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKK0BAIC0yNDk5LDE4ICsyNTU0LDE5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMzMikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjUyNCw0NCArMjU4MCw0NiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMxNikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczE2KSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworLSAgICAgICAgICAgIHU4ICAqc3JjcmVnOworKyAgICAgICAgICAgIHU4ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IChzMzIpKChzOCkqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAoczMyKSAoKHM4KSAqIHNyY3JlZyk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CistICAgICAgICAgICAgdTggICpzcmNyZWc7CisrICAgICAgICAgICAgdTggKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gKHMxNikoKHM4KSpzcmNyZWcpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHMxNikgKChzOCkgKiBzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0yNTczLDcgKzI2MzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjU4OSw3ICsyNjQ4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistICAgICAgICBzcmN2YWwgPSAoczMyKSgoczE2KWZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKysgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczE2KSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworQEAgLTI1OTgsNyArMjY1Nyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLSAgICAgICAgc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisrICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHMxNikgZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKK0BAIC0yNjA3LDE4ICsyNjY2LDE4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLSAgICAgICAgc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisrICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHMxNikgZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICpkZXN0cmVnID0gKHMzMikoKHMxNikqc3JjcmVnKTsKKysgICAgICAgICpkZXN0cmVnID0gKHMzMikgKChzMTYpICogc3JjcmVnKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0yNjI2LDQwICsyNjg1LDQxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIH0KKyAKKyAvKiBIYW5kbGVzIG9wY29kZXMgMHhjOC0weGNmICovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzd2FwKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9ic3dhcCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCU1dBUFxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgCisgICAgIHN3aXRjaCAob3AyKSB7CistCWNhc2UgMHhjODoKKy0JICAgIE0ueDg2LlJfRUFYID0gYnN3YXBfMzIoTS54ODYuUl9FQVgpOworLQkgICAgYnJlYWs7CistCWNhc2UgMHhjOToKKy0JICAgIE0ueDg2LlJfRUNYID0gYnN3YXBfMzIoTS54ODYuUl9FQ1gpOworLQkgICAgYnJlYWs7CistCWNhc2UgMHhjYToKKy0JICAgIE0ueDg2LlJfRURYID0gYnN3YXBfMzIoTS54ODYuUl9FRFgpOworLQkgICAgYnJlYWs7CistCWNhc2UgMHhjYjoKKy0JICAgIE0ueDg2LlJfRUJYID0gYnN3YXBfMzIoTS54ODYuUl9FQlgpOworLQkgICAgYnJlYWs7CistCWNhc2UgMHhjYzoKKy0JICAgIE0ueDg2LlJfRVNQID0gYnN3YXBfMzIoTS54ODYuUl9FU1ApOworLQkgICAgYnJlYWs7CistCWNhc2UgMHhjZDoKKy0JICAgIE0ueDg2LlJfRUJQID0gYnN3YXBfMzIoTS54ODYuUl9FQlApOworLQkgICAgYnJlYWs7CistCWNhc2UgMHhjZToKKy0JICAgIE0ueDg2LlJfRVNJID0gYnN3YXBfMzIoTS54ODYuUl9FU0kpOworLQkgICAgYnJlYWs7CistCWNhc2UgMHhjZjoKKy0JICAgIE0ueDg2LlJfRURJID0gYnN3YXBfMzIoTS54ODYuUl9FREkpOworLQkgICAgYnJlYWs7CistCWRlZmF1bHQ6CistCSAgICAvKiBjYW4ndCBoYXBwZW4gKi8KKy0JICAgIGJyZWFrOworKyAgICBjYXNlIDB4Yzg6CisrICAgICAgICBNLng4Ni5SX0VBWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUFYKTsKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4Yzk6CisrICAgICAgICBNLng4Ni5SX0VDWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUNYKTsKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4Y2E6CisrICAgICAgICBNLng4Ni5SX0VEWCA9IGJzd2FwXzMyKE0ueDg2LlJfRURYKTsKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4Y2I6CisrICAgICAgICBNLng4Ni5SX0VCWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJYKTsKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4Y2M6CisrICAgICAgICBNLng4Ni5SX0VTUCA9IGJzd2FwXzMyKE0ueDg2LlJfRVNQKTsKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4Y2Q6CisrICAgICAgICBNLng4Ni5SX0VCUCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJQKTsKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4Y2U6CisrICAgICAgICBNLng4Ni5SX0VTSSA9IGJzd2FwXzMyKE0ueDg2LlJfRVNJKTsKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDB4Y2Y6CisrICAgICAgICBNLng4Ni5SX0VESSA9IGJzd2FwXzMyKE0ueDg2LlJfRURJKTsKKysgICAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgLyogY2FuJ3QgaGFwcGVuICovCisrICAgICAgICBicmVhazsKKyAgICAgfQorIAorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMjY2OSwyNSArMjcyOSwzMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnN3YXAodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBEb3VibGUgYnl0ZSBvcGVyYXRpb24gY29kZSB0YWJsZToKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKy17CistLyogIDB4MDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBHcm91cCBGIChyaW5nIDAgUE0pICAgICAgKi8KKy0vKiAgMHgwMSAqLyB4ODZlbXVPcDJfZ3JvdXBfZywgICAgIC8qIEdyb3VwIEcgKHJpbmcgMCBQTSkgICAgICAqLworLS8qICAweDAyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbGFyIChyaW5nIDAgUE0pICAgICAgICAgICovCistLyogIDB4MDMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBsc2wgKHJpbmcgMCBQTSkgICAgICAgICAgKi8KKyt2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSAodTgpID0geworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR3JvdXAgRiAocmluZyAwIFBNKSAgICAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR3JvdXAgRyAocmluZyAwIFBNKSAgICAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGFyIChyaW5nIDAgUE0pICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbHNsIChyaW5nIDAgUE0pICAgICAgICAgICovCisgLyogIDB4MDQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistLyogIDB4MDUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKy0vKiAgMHgwNiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGNsdHMgKHJpbmcgMCBQTSkgICAgICAgICAqLworLS8qICAweDA3ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbG9hZGFsbCAodW5kb2N1bWVudGVkKSAgICovCistLyogIDB4MDggKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBpbnZkIChyaW5nIDAgUE0pICAgICAgICAgKi8KKy0vKiAgMHgwOSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIHdiaW52ZCAocmluZyAwIFBNKSAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDA1ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvYWRhbGwgKHVuZG9jdW1lbnRlZCkgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDA2ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsdHMgKHJpbmcgMCBQTSkgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDA3ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvYWRhbGwgKHVuZG9jdW1lbnRlZCkgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDA4ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGludmQgKHJpbmcgMCBQTSkgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDA5ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdiaW52ZCAocmluZyAwIFBNKSAgICAgICAqLworIC8qICAweDBhICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDBiICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDBjICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDBkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDBlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDBmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDEwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDExICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDEyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3MDQsMTQgKzI3NzEsMTkgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgxZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKy0vKiAgMHgyMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiByZWczMixjcmVnIChyaW5nIDAgUE0pICovCistLyogIDB4MjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgcmVnMzIsZHJlZyAocmluZyAwIFBNKSAqLworLS8qICAweDIyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IGNyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKy0vKiAgMHgyMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiBkcmVnLHJlZzMyIChyaW5nIDAgUE0pICovCistLyogIDB4MjQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgcmVnMzIsdHJlZyAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMixjcmVnIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IHJlZzMyLGRyZWcgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgY3JlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDIzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiBkcmVnLHJlZzMyIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IHJlZzMyLHRyZWcgKHJpbmcgMCBQTSkgKi8KKyAvKiAgMHgyNSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0vKiAgMHgyNiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiB0cmVnLHJlZzMyIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IHRyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKyAvKiAgMHgyNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyOCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyOSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzIxLDcgKzI3OTMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDJkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDJlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDJmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDMwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDMxICovIHg4NmVtdU9wMl9yZHRzYywKKyAvKiAgMHgzMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzM4LDcgKzI4MDksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDNkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDNlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDNmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDQwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDQxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDQyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3NTUsNyArMjgyNSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4NGQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NGUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NGYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4NTAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NTEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NTIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjc3Miw3ICsyODQxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg1ZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg1ZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg1ZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg2MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzg5LDcgKzI4NTcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDZkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDZlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDZmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDcwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDcxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDcyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI4MDYsNyArMjg3Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4N2QgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4N2UgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4N2YgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4ODAgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4MSAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorIC8qICAweDgyICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCitAQCAtMjgyMyw3ICsyODg5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg4ZCAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorIC8qICAweDhlICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCisgLyogIDB4OGYgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKy0KKyAvKiAgMHg5MCAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCisgLyogIDB4OTEgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDkyICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKK0BAIC0yODQwLDcgKzI5MDUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDlkICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKyAvKiAgMHg5ZSAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCisgLyogIDB4OWYgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorLQorIC8qICAweGEwICovIHg4NmVtdU9wMl9wdXNoX0ZTLAorIC8qICAweGExICovIHg4NmVtdU9wMl9wb3BfRlMsCisgLyogIDB4YTIgKi8geDg2ZW11T3AyX2NwdWlkLAorQEAgLTI4NTcsOSArMjkyMSwxMCBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGFkICovIHg4NmVtdU9wMl9zaHJkX0NMLAorIC8qICAweGFlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGFmICovIHg4NmVtdU9wMl9pbXVsX1JfUk0sCistCistLyogIDB4YjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBUT0RPOiBjbXB4Y2hnICovCistLyogIDB4YjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBUT0RPOiBjbXB4Y2hnICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4YjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogY21weGNoZyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IGNtcHhjaGcgKi8KKyAvKiAgMHhiMiAqLyB4ODZlbXVPcDJfbHNzX1JfSU1NLAorIC8qICAweGIzICovIHg4NmVtdU9wMl9idHJfUiwKKyAvKiAgMHhiNCAqLyB4ODZlbXVPcDJfbGZzX1JfSU1NLAorQEAgLTI4NzQsOSArMjkzOSwxMCBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGJkICovIHg4NmVtdU9wMl9ic3IsCisgLyogIDB4YmUgKi8geDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSwKKyAvKiAgMHhiZiAqLyB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNLAorLQorLS8qICAweGMwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogeGFkZCAqLworLS8qICAweGMxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogeGFkZCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGMwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IHhhZGQgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhjMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiB4YWRkICovCisgLyogIDB4YzIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4YzMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4YzQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjg5MSw3ICsyOTU3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhjZCAqLyB4ODZlbXVPcDJfYnN3YXAsCisgLyogIDB4Y2UgKi8geDg2ZW11T3AyX2Jzd2FwLAorIC8qICAweGNmICovIHg4NmVtdU9wMl9ic3dhcCwKKy0KKyAvKiAgMHhkMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yOTA4LDcgKzI5NzMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGRkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGRlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGRmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweGUwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGUxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGUyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI5MjUsNyArMjk4OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4ZWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4ZjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvcHJpbV9vcHMuYyBiL2xpYnMveDg2ZW11L3ByaW1fb3BzLmMKK2luZGV4IGZmMTdjM2YuLjI0Zjc2YjQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9wcmltX29wcy5jCisrKysgYi9saWJzL3g4NmVtdS9wcmltX29wcy5jCitAQCAtMTAyLDE4ICsxMDIsMjMgQEAKKyAjZGVmaW5lCVBSSU1fT1BTX05PX1JFREVGSU5FX0FTTQorICNpbmNsdWRlICJ4ODZlbXUveDg2ZW11aS5oIgorIAorKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorKyNpZiBkZWZpbmVkIChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19BTUQ2NF9fKSB8fCBkZWZpbmVkKF9fYW1kNjRfXykKKysjaW5jbHVkZSAieDg2ZW11L3ByaW1feDg2X2djYy5oIgorKyNlbmRpZgorKyNlbmRpZgorKworIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistc3RhdGljIHUzMiB4ODZlbXVfcGFyaXR5X3RhYls4XSA9CisteworLQkweDk2Njk2OTk2LAorLQkweDY5OTY5NjY5LAorLQkweDY5OTY5NjY5LAorLQkweDk2Njk2OTk2LAorLQkweDY5OTY5NjY5LAorLQkweDk2Njk2OTk2LAorLQkweDk2Njk2OTk2LAorLQkweDY5OTY5NjY5LAorK3N0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPSB7CisrICAgIDB4OTY2OTY5OTYsCisrICAgIDB4Njk5Njk2NjksCisrICAgIDB4Njk5Njk2NjksCisrICAgIDB4OTY2OTY5OTYsCisrICAgIDB4Njk5Njk2NjksCisrICAgIDB4OTY2OTY5OTYsCisrICAgIDB4OTY2OTY5OTYsCisrICAgIDB4Njk5Njk2NjksCisgfTsKKyAKKyAjZGVmaW5lIFBBUklUWSh4KSAgICgoKHg4NmVtdV9wYXJpdHlfdGFiWyh4KSAvIDMyXSA+PiAoKHgpICUgMzIpKSAmIDEpID09IDApCitAQCAtMTI1LDg4ICsxMzAsOTYgQEAgc3RhdGljIHUzMiB4ODZlbXVfcGFyaXR5X3RhYls4XSA9CisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBQUEgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhYWFfd29yZCh1MTYgZCkKKyt1MTYKKythYWFfd29yZCh1MTYgZCkKKyB7CistCXUxNglyZXM7CistCWlmICgoZCAmIDB4ZikgPiAweDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCWQgKz0gMHg2OworLQkJZCArPSAweDEwMDsKKy0JCVNFVF9GTEFHKEZfQUYpOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0gZWxzZSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX0FGKTsKKy0JfQorLQlyZXMgPSAodTE2KShkICYgMHhGRjBGKTsKKy0JQ0xFQVJfRkxBRyhGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICB1MTYgcmVzOworKworKyAgICBpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CisrICAgICAgICBkICs9IDB4NjsKKysgICAgICAgIGQgKz0gMHgxMDA7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIH0KKysgICAgcmVzID0gKHUxNikgKGQgJiAweEZGMEYpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBQUEgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhYXNfd29yZCh1MTYgZCkKKyt1MTYKKythYXNfd29yZCh1MTYgZCkKKyB7CistCXUxNglyZXM7CistCWlmICgoZCAmIDB4ZikgPiAweDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCWQgLT0gMHg2OworLQkJZCAtPSAweDEwMDsKKy0JCVNFVF9GTEFHKEZfQUYpOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0gZWxzZSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX0FGKTsKKy0JfQorLQlyZXMgPSAodTE2KShkICYgMHhGRjBGKTsKKy0JQ0xFQVJfRkxBRyhGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICB1MTYgcmVzOworKworKyAgICBpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CisrICAgICAgICBkIC09IDB4NjsKKysgICAgICAgIGQgLT0gMHgxMDA7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIH0KKysgICAgcmVzID0gKHUxNikgKGQgJiAweEZGMEYpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBQUQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhYWRfd29yZCh1MTYgZCkKKyt1MTYKKythYWRfd29yZCh1MTYgZCkKKyB7CistCXUxNiBsOworLQl1OCBoYiwgbGI7CisrICAgIHUxNiBsOworKyAgICB1OCBoYiwgbGI7CisgCistCWhiID0gKHU4KSgoZCA+PiA4KSAmIDB4ZmYpOworLQlsYiA9ICh1OCkoKGQgJiAweGZmKSk7CistCWwgPSAodTE2KSgobGIgKyAxMCAqIGhiKSAmIDB4RkYpOworKyAgICBoYiA9ICh1OCkgKChkID4+IDgpICYgMHhmZik7CisrICAgIGxiID0gKHU4KSAoKGQgJiAweGZmKSk7CisrICAgIGwgPSAodTE2KSAoKGxiICsgMTAgKiBoYikgJiAweEZGKTsKKyAKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhsID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobCAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIGw7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiBsOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFNIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFtX3dvcmQodTggZCkKKyt1MTYKKythYW1fd29yZCh1OCBkKQorIHsKKyAgICAgdTE2IGgsIGw7CisgCistCWggPSAodTE2KShkIC8gMTApOworLQlsID0gKHUxNikoZCAlIDEwKTsKKy0JbCB8PSAodTE2KShoIDw8IDgpOworKyAgICBoID0gKHUxNikgKGQgLyAxMCk7CisrICAgIGwgPSAodTE2KSAoZCAlIDEwKTsKKysgICAgbCB8PSAodTE2KSAoaCA8PCA4KTsKKyAKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhsID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcobCAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhsID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobCAmIDB4ZmYpLCBGX1BGKTsKKyAgICAgcmV0dXJuIGw7CisgfQorIAorQEAgLTIxNCwxNTUgKzIyNywxNjEgQEAgdTE2IGFhbV93b3JkKHU4IGQpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGFkY19ieXRlKHU4IGQsIHU4IHMpCisrdTgKKythZGNfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorLQkJcmVzID0gMSArIGQgKyBzOworLQllbHNlCistCQlyZXMgPSBkICsgczsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcmVzID0gMSArIGQgKyBzOworKyAgICBlbHNlCisrICAgICAgICByZXMgPSBkICsgczsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFEQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFkY193b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKythZGNfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCistCQlyZXMgPSAxICsgZCArIHM7CistCWVsc2UKKy0JCXJlcyA9IGQgKyBzOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICByZXMgPSAxICsgZCArIHM7CisrICAgIGVsc2UKKysgICAgICAgIHJlcyA9IGQgKyBzOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFEQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGFkY19sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKythZGNfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgbG87CS8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgaGk7CistCXJlZ2lzdGVyIHUzMiByZXM7CistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIGxvOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgaGk7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7CisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CistCQlsbyA9IDEgKyAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CistCQlyZXMgPSAxICsgZCArIHM7CistCQl9CistCWVsc2UgeworLQkJbG8gPSAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CistCQlyZXMgPSBkICsgczsKKy0JCX0KKy0JaGkgPSAobG8gPj4gMTYpICsgKGQgPj4gMTYpICsgKHMgPj4gMTYpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgIGxvID0gMSArIChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgICAgIHJlcyA9IDEgKyBkICsgczsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworKyAgICAgICAgcmVzID0gZCArIHM7CisrICAgIH0KKysgICAgaGkgPSAobG8gPj4gMTYpICsgKGQgPj4gMTYpICsgKHMgPj4gMTYpOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhoaSAmIDB4MTAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhoaSAmIDB4MTAwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFERCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggYWRkX2J5dGUodTggZCwgdTggcykKKyt1OAorK2FkZF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhZGRfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYWRkX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFERCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKythZGRfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgbG87CS8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgaGk7CistCXJlZ2lzdGVyIHUzMiByZXM7CistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIGxvOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgaGk7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7CisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JbG8gPSAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CistCXJlcyA9IGQgKyBzOworLQloaSA9IChsbyA+PiAxNikgKyAoZCA+PiAxNikgKyAocyA+PiAxNik7CisrICAgIGxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworKyAgICByZXMgPSBkICsgczsKKysgICAgaGkgPSAobG8gPj4gMTYpICsgKGQgPj4gMTYpICsgKHMgPj4gMTYpOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhoaSAmIDB4MTAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhoaSAmIDB4MTAwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisgICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworIAorICAgICByZXR1cm4gcmVzOworIH0KK0BAIC0zNzEsMzkgKzM5MCw0MSBAQCB1MzIgYWRkX2xvbmcodTMyIGQsIHUzMiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQU5EIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBhbmRfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrYW5kX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHU4IHJlczsgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHU4IHJlczsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCAmIHM7CisrICAgIHJlcyA9IGQgJiBzOworIAorLQkvKiBzZXQgdGhlIGZsYWdzICAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIC8qIHNldCB0aGUgZmxhZ3MgICovCisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFuZF93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKythbmRfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLSAgICByZWdpc3RlciB1MTYgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MTYgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCisgICAgIHJlcyA9IGQgJiBzOworIAorICAgICAvKiBzZXQgdGhlIGZsYWdzICAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAgICAgcmV0dXJuIHJlczsKKyB9CisgCitAQCAtNDExLDQzMyArNDMyLDQ1NiBAQCB1MTYgYW5kX3dvcmQodTE2IGQsIHUxNiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQU5EIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgYW5kX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK2FuZF9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCAmIHM7CisrICAgIHJlcyA9IGQgJiBzOworIAorLQkvKiBzZXQgdGhlIGZsYWdzICAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBzZXQgdGhlIGZsYWdzICAqLworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBjbXBfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrY21wX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiBkOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIGQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBDTVAgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBjbXBfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrY21wX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGJjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisgICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIGQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBDTVAgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBjbXBfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrY21wX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGJjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiBkOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBkYWFfYnl0ZSh1OCBkKQorK3U4CisrZGFhX2J5dGUodTggZCkKKyB7CistCXUzMiByZXMgPSBkOworLQlpZiAoKGQgJiAweGYpID4gOSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworLQkJcmVzICs9IDY7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JfQorLQlpZiAocmVzID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJcmVzICs9IDB4NjA7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JfQorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4RkYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgdTMyIHJlcyA9IGQ7CisrCisrICAgIGlmICgoZCAmIDB4ZikgPiA5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CisrICAgICAgICByZXMgKz0gNjsKKysgICAgICAgIFNFVF9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIGlmIChyZXMgPiAweDlGIHx8IEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICByZXMgKz0gMHg2MDsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICB9CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhGRikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERBUyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZGFzX2J5dGUodTggZCkKKyt1OAorK2Rhc19ieXRlKHU4IGQpCisgeworLQlpZiAoKGQgJiAweGYpID4gOSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworLQkJZCAtPSA2OworLQkJU0VUX0ZMQUcoRl9BRik7CistCX0KKy0JaWYgKGQgPiAweDlGIHx8IEFDQ0VTU19GTEFHKEZfQ0YpKSB7CistCQlkIC09IDB4NjA7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JfQorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhkICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGQgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShkICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gZDsKKysgICAgaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKysgICAgICAgIGQgLT0gNjsKKysgICAgICAgIFNFVF9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIGlmIChkID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgZCAtPSAweDYwOworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgIH0KKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhkID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkoZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIGQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBERUMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGRlY19ieXRlKHU4IGQpCisrdTgKKytkZWNfYnl0ZSh1OCBkKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCisgICAgIHJlcyA9IGQgLSAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQkvKiBiYXNlZCBvbiBzdWJfYnl0ZSwgdXNlcyBzPT0xLiAgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgMSkpIHwgKH5kICYgMSk7CistCS8qIGNhcnJ5IGZsYWcgdW5jaGFuZ2VkICovCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICAvKiBiYXNlZCBvbiBzdWJfYnl0ZSwgdXNlcyBzPT0xLiAgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgMSkpIHwgKH5kICYgMSk7CisrICAgIC8qIGNhcnJ5IGZsYWcgdW5jaGFuZ2VkICovCisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERFQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGRlY193b3JkKHUxNiBkKQorK3UxNgorK2RlY193b3JkKHUxNiBkKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCisgICAgIHJlcyA9IGQgLSAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCisgICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisgICAgIC8qIGJhc2VkIG9uIHRoZSBzdWJfYnl0ZSByb3V0aW5lLCB3aXRoIHM9PTEgKi8KKyAgICAgYmMgPSAocmVzICYgKH5kIHwgMSkpIHwgKH5kICYgMSk7CisgICAgIC8qIGNhcnJ5IGZsYWcgdW5jaGFuZ2VkICovCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREVDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZGVjX2xvbmcodTMyIGQpCisrdTMyCisrZGVjX2xvbmcodTMyIGQpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKyAgICAgcmVzID0gZCAtIDE7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCisgICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworLQkvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgYmMgPSAocmVzICYgKH5kIHwgMSkpIHwgKH5kICYgMSk7CisrICAgIC8qIGNhcnJ5IGZsYWcgdW5jaGFuZ2VkICovCisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU5DIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBpbmNfYnl0ZSh1OCBkKQorK3U4CisraW5jX2J5dGUodTggZCkKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9ICgoMSAmIGQpIHwgKH5yZXMpKSAmICgxIHwgZCk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKCgxICYgZCkgfCAofnJlcykpICYgKDEgfCBkKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU5DIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgaW5jX3dvcmQodTE2IGQpCisrdTE2CisraW5jX3dvcmQodTE2IGQpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyAxOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9ICgxICYgZCkgfCAoKH5yZXMpICYgKDEgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAoMSAmIGQpIHwgKCh+cmVzKSAmICgxIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGluY19sb25nKHUzMiBkKQorK3UzMgorK2luY19sb25nKHUzMiBkKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyAxOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAoMSAmIGQpIHwgKCh+cmVzKSAmICgxIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBvcl9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgfCBzOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgfCBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IG9yX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK29yX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIHwgczsKKy0JLyogc2V0IHRoZSBjYXJyeSBmbGFnIHRvIGJlIGJpdCA4ICovCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZCB8IHM7CisrICAgIC8qIHNldCB0aGUgY2FycnkgZmxhZyB0byBiZSBiaXQgOCAqLworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG9yX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK29yX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIHwgczsKKysgICAgcmVzID0gZCB8IHM7CisgCistCS8qIHNldCB0aGUgY2FycnkgZmxhZyB0byBiZSBiaXQgOCAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBuZWdfYnl0ZSh1OCBzKQorK3U4CisrbmVnX2J5dGUodTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHU4IHJlczsKKyAgICAgcmVnaXN0ZXIgdTggYmM7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CistCXJlcyA9ICh1OCktczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKy0JICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworLQkgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKy0JICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CistCSAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKy0JYmMgPSByZXMgfCBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworKyAgICByZXMgPSAodTgpIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKysgICAgICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworKyAgICAgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKysgICAgICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CisrICAgICAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKysgICAgYmMgPSByZXMgfCBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBuZWdfd29yZCh1MTYgcykKKy17CistCXJlZ2lzdGVyIHUxNiByZXM7CistCXJlZ2lzdGVyIHUxNiBiYzsKKy0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKy0JcmVzID0gKHUxNiktczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorLQkgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CistCSAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorLQkgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKy0JICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworLQliYyA9IHJlcyB8IHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworK3UxNgorK25lZ193b3JkKHUxNiBzKQorK3sKKysgICAgcmVnaXN0ZXIgdTE2IHJlczsKKysgICAgcmVnaXN0ZXIgdTE2IGJjOworKworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworKyAgICByZXMgPSAodTE2KSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKysgICAgICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworKyAgICAgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKysgICAgICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CisrICAgICAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKysgICAgYmMgPSByZXMgfCBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgbmVnX2xvbmcodTMyIHMpCisrdTMyCisrbmVnX2xvbmcodTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgYmM7CistCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CistCXJlcyA9ICh1MzIpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7CisrICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCistCSAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKy0JICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCistCSAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorLQkgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCistCWJjID0gcmVzIHwgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CisrICAgIHJlcyA9ICh1MzIpIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBOT1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IG5vdF9ieXRlKHU4IHMpCisrdTgKKytub3RfYnl0ZSh1OCBzKQorIHsKKy0JcmV0dXJuIH5zOworKyAgICByZXR1cm4gfnM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBOT1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBub3Rfd29yZCh1MTYgcykKKyt1MTYKKytub3Rfd29yZCh1MTYgcykKKyB7CistCXJldHVybiB+czsKKysgICAgcmV0dXJuIH5zOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgbm90X2xvbmcodTMyIHMpCisrdTMyCisrbm90X2xvbmcodTMyIHMpCisgeworLQlyZXR1cm4gfnM7CisrICAgIHJldHVybiB+czsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcmNsX2J5dGUodTggZCwgdTggcykKKyt1OAorK3JjbF9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2ssIGNmOworIAorICAgICAvKiBzIGlzIHRoZSByb3RhdGUgZGlzdGFuY2UuICBJdCB2YXJpZXMgZnJvbSAwIC0gOC4gKi8KKy0JLyogaGF2ZQorKyAgICAvKiBoYXZlCisgCisgICAgICAgIENGICBCXzcgQl82IEJfNSBCXzQgQl8zIEJfMiBCXzEgQl8wIAorIAorQEAgLTg2MSw5ICs5MDUsOSBAQCB1OCByY2xfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICAyKSBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfMAorICAgICAgICAzKSBCXyhuLTEpIDwtIGNmCisgICAgICAgIDQpIEJfKG4tMikgLi4gQl8wIDwtICBiXzcgLi4gYl8oOC0obi0xKSkKKy0JICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDkpICE9IDApIHsKKysgICAgICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDkpICE9IDApIHsKKyAgICAgICAgIC8qIGV4dHJhY3QgdGhlIG5ldyBDQVJSWSBGTEFHLiAqLworICAgICAgICAgLyogQ0YgPC0gIGJfKDgtbikgICAgICAgICAgICAgKi8KKyAgICAgICAgIGNmID0gKGQgPj4gKDggLSBjbnQpKSAmIDB4MTsKK0BAIC04NzIsNyArOTE2LDcgQEAgdTggcmNsX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgICAgIGludG8gdGhlIHJhbmdlIEJfNyAuLiBCX2NudCAqLworICAgICAgICAgLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXzAgICovCisgICAgICAgICAvKiBub3RlIHRoYXQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBkb25lIGJ5IHRoZSBtYXNrICovCistCQlyZXMgPSAoZCA8PCBjbnQpICYgMHhmZjsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCkgJiAweGZmOworIAorICAgICAgICAgLyogbm93IHRoZSBoaWdoIHN0dWZmIHdoaWNoIHJvdGF0ZWQgYXJvdW5kIAorICAgICAgICAgICAgaW50byB0aGUgcG9zaXRpb25zIEJfY250LTIgLi4gQl8wICovCitAQCAtODg0LDgxICs5MjgsODEgQEAgdTggcmNsX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgIHJlcyB8PSAoZCA+PiAoOSAtIGNudCkpICYgbWFzazsKKyAKKyAgICAgICAgIC8qIGlmIHRoZSBjYXJyeSBmbGFnIHdhcyBzZXQsIG9yIGl0IGluLiAgKi8KKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKyAgICAgICAgICAgICAvKiAgQl8obi0xKSA8LSBjZiAqLworICAgICAgICAgICAgIHJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKyAgICAgICAgIH0KKyAgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSAiY2YiICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisgICAgICAgICAvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogY250PT0xLCB0aGVuIGl0IGlzIHRoZSAKKyAgICAgICAgICAgIHhvciBvZiBDRiBhbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0LiAgQmxlY2NrLiAqLworICAgICAgICAgLyogcGFyZW50aGVzaXplZCB0aGlzIGV4cHJlc3Npb24gc2luY2UgaXQgYXBwZWFycyB0bworICAgICAgICAgICAgYmUgY2F1c2luZyBPRiB0byBiZSBtaXNzZXQgKi8KKy0gICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gNikgJiAweDIpKSwgRl9PRik7CisgCisgICAgIH0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHJjbF93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3JjbF93b3JkKHUxNiBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrLCBjZjsKKysgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrLCBjZjsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTcpICE9IDApIHsKKy0JCWNmID0gKGQgPj4gKDE2IC0gY250KSkgJiAweDE7CistCQlyZXMgPSAoZCA8PCBjbnQpICYgMHhmZmZmOworLQkJbWFzayA9ICgxIDw8IChjbnQgLSAxKSkgLSAxOworLQkJcmVzIHw9IChkID4+ICgxNyAtIGNudCkpICYgbWFzazsKKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJCXJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAxNCkgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTcpICE9IDApIHsKKysgICAgICAgIGNmID0gKGQgPj4gKDE2IC0gY250KSkgJiAweDE7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpICYgMHhmZmZmOworKyAgICAgICAgbWFzayA9ICgxIDw8IChjbnQgLSAxKSkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+ICgxNyAtIGNudCkpICYgbWFzazsKKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAxNCkgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHJjbF9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3JjbF9sb25nKHUzMiBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrLCBjZjsKKysgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrLCBjZjsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMzMpICE9IDApIHsKKy0JCWNmID0gKGQgPj4gKDMyIC0gY250KSkgJiAweDE7CistCQlyZXMgPSAoZCA8PCBjbnQpICYgMHhmZmZmZmZmZjsKKy0JCW1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMzMgLSBjbnQpKSAmIG1hc2s7CistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCistCQkJcmVzIHw9IDEgPDwgKGNudCAtIDEpOworLQkJfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDMwKSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMzMpICE9IDApIHsKKysgICAgICAgIGNmID0gKGQgPj4gKDMyIC0gY250KSkgJiAweDE7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpICYgMHhmZmZmZmZmZjsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoMzMgLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisrICAgICAgICAgICAgcmVzIHw9IDEgPDwgKGNudCAtIDEpOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDMwKSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCByY3JfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrcmNyX2J5dGUodTggZCwgdTggcykKKyB7CistCXUzMglyZXMsIGNudDsKKy0JdTMyCW1hc2ssIGNmLCBvY2YgPSAwOworKyAgICB1MzIgcmVzLCBjbnQ7CisrICAgIHUzMiBtYXNrLCBjZiwgb2NmID0gMDsKKyAKKy0JLyogcm90YXRlIHJpZ2h0IHRocm91Z2ggY2FycnkgKi8KKysgICAgLyogcm90YXRlIHJpZ2h0IHRocm91Z2ggY2FycnkgKi8KKyAgICAgLyogCisgICAgICAgIHMgaXMgdGhlIHJvdGF0ZSBkaXN0YW5jZS4gIEl0IHZhcmllcyBmcm9tIDAgLSA4LgorICAgICAgICBkIGlzIHRoZSBieXRlIG9iamVjdCByb3RhdGVkLiAgCitAQCAtOTc5LDkgKzEwMjMsOSBAQCB1OCByY3JfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICAyKSBCXyg4LShuKzEpKSAuLiBCXygwKSAgPC0gIGJfKDcpIC4uIGJfKG4pCisgICAgICAgIDMpIEJfKDgtbikgPC0gY2YKKyAgICAgICAgNCkgQl8oNykgLi4gQl8oOC0obi0xKSkgPC0gIGJfKG4tMikgLi4gYl8oMCkKKy0JICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDkpICE9IDApIHsKKysgICAgICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDkpICE9IDApIHsKKyAgICAgICAgIC8qIGV4dHJhY3QgdGhlIG5ldyBDQVJSWSBGTEFHLiAqLworICAgICAgICAgLyogQ0YgPC0gIGJfKG4tMSkgICAgICAgICAgICAgICovCisgICAgICAgICBpZiAoY250ID09IDEpIHsKK0BAIC05OTAsMTEgKzEwMzQsMTIgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgICAgICAgICAwIGlmIGZsYWcgbm90IHNldAorICAgICAgICAgICAgICAgIG5vbi16ZXJvIGlmIGZsYWcgaXMgc2V0LgorICAgICAgICAgICAgICAgIGRvaW5nIGFjY2Vzc19mbGFnKC4uKSAhPSAwIGNhc3RzIHRoYXQgaW50byBlaXRoZXIgCistCQkJICAgMC4uMSBpbiBhbnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZsYWdzIHJlZ2lzdGVyCisrICAgICAgICAgICAgICAgMC4uMSBpbiBhbnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZsYWdzIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgKGkuZS4gcGFja2VkIGJpdCBhcnJheSBvciB1bnBhY2tlZC4pCisgICAgICAgICAgICAgICovCistCQkJb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKy0gICAgICAgIH0gZWxzZQorKyAgICAgICAgICAgIG9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisgICAgICAgICAgICAgY2YgPSAoZCA+PiAoY250IC0gMSkpICYgMHgxOworIAorICAgICAgICAgLyogQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiX24gICovCitAQCAtMTAxNiw5MyArMTA2MSw5NSBAQCB1OCByY3JfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICAgcmVzIHw9IChkIDw8ICg5IC0gY250KSk7CisgCisgICAgICAgICAvKiBpZiB0aGUgY2FycnkgZmxhZyB3YXMgc2V0LCBvciBpdCBpbi4gICovCistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisgICAgICAgICAgICAgLyogIEJfKDgtbikgPC0gY2YgKi8KKyAgICAgICAgICAgICByZXMgfD0gMSA8PCAoOCAtIGNudCk7CisgICAgICAgICB9CisgICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBiYXNlZCBvbiB0aGUgdmFyaWFibGUgImNmIiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIGNudD09MSwgdGhlbiBpdCBpcyB0aGUgCisgICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKyAgICAgICAgIC8qIHBhcmVudGhlc2l6ZWQuLi4gKi8KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIob2NmICsgKChkID4+IDYpICYgMHgyKSksCistCQkJCQkJCQkgRl9PRik7CistCQl9CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiA2KSAmIDB4MikpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByY3Jfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyY3Jfd29yZCh1MTYgZCwgdTggcykKKyB7CistCXUzMiByZXMsIGNudDsKKy0JdTMyCW1hc2ssIGNmLCBvY2YgPSAwOworKyAgICB1MzIgcmVzLCBjbnQ7CisrICAgIHUzMiBtYXNrLCBjZiwgb2NmID0gMDsKKyAKKy0JLyogcm90YXRlIHJpZ2h0IHRocm91Z2ggY2FycnkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTcpICE9IDApIHsKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCWNmID0gZCAmIDB4MTsKKy0JCQlvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworLQkJfSBlbHNlCistCQkJY2YgPSAoZCA+PiAoY250IC0gMSkpICYgMHgxOworLQkJbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKy0JCXJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJcmVzIHw9IChkIDw8ICgxNyAtIGNudCkpOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CistCQkJcmVzIHw9IDEgPDwgKDE2IC0gY250KTsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIob2NmICsgKChkID4+IDE0KSAmIDB4MikpLAorLQkJCQkJCQkJIEZfT0YpOworLQkJfQorLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgLyogcm90YXRlIHJpZ2h0IHRocm91Z2ggY2FycnkgKi8KKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTcpICE9IDApIHsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIGNmID0gZCAmIDB4MTsKKysgICAgICAgICAgICBvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CisrICAgICAgICByZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKysgICAgICAgIHJlcyB8PSAoZCA8PCAoMTcgLSBjbnQpKTsKKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8ICgxNiAtIGNudCk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAxNCkgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHJjcl9sb25nKHUzMiBkLCB1OCBzKQorLXsKKy0JdTMyIHJlcywgY250OworLQl1MzIgbWFzaywgY2YsIG9jZiA9IDA7CistCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQljZiA9IGQgJiAweDE7CistCQkJb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKy0JCX0gZWxzZQorLQkJCWNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKy0JCW1hc2sgPSAoMSA8PCAoMzIgLSBjbnQpKSAtIDE7CistCQlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCWlmIChjbnQgIT0gMSkKKy0JCQlyZXMgfD0gKGQgPDwgKDMzIC0gY250KSk7CistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCistCQkJcmVzIHw9IDEgPDwgKDMyIC0gY250KTsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIob2NmICsgKChkID4+IDMwKSAmIDB4MikpLAorLQkJCQkJCQkJIEZfT0YpOworLQkJfQorLQl9CistCXJldHVybiByZXM7CisrdTMyCisrcmNyX2xvbmcodTMyIGQsIHU4IHMpCisreworKyAgICB1MzIgcmVzLCBjbnQ7CisrICAgIHUzMiBtYXNrLCBjZiwgb2NmID0gMDsKKysKKysgICAgLyogcm90YXRlIHJpZ2h0IHRocm91Z2ggY2FycnkgKi8KKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMzMpICE9IDApIHsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIGNmID0gZCAmIDB4MTsKKysgICAgICAgICAgICBvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoMzIgLSBjbnQpKSAtIDE7CisrICAgICAgICByZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKysgICAgICAgIGlmIChjbnQgIT0gMSkKKysgICAgICAgICAgICByZXMgfD0gKGQgPDwgKDMzIC0gY250KSk7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisrICAgICAgICAgICAgcmVzIHw9IDEgPDwgKDMyIC0gY250KTsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIob2NmICsgKChkID4+IDMwKSAmIDB4MikpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUk9MIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCByb2xfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrcm9sX2J5dGUodTggZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKK0BAIC0xMTIxLDg3ICsxMTY4LDkwIEBAIHU4IHJvbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgIElGIG4gPiAwIAorICAgICAgICAxKSBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfKDApCisgICAgICAgIDIpIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikKKy0JICovCisrICAgICAqLworICAgICByZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA4KSAhPSAwKSB7CistCQkvKiBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfKDApICovCistCQlyZXMgPSAoZCA8PCBjbnQpOworKyAgICBpZiAoKGNudCA9IHMgJSA4KSAhPSAwKSB7CisrICAgICAgICAvKiBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfKDApICovCisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpOworIAorLQkJLyogQl8obi0xKSAuLiBCXygwKSA8LSAgYl8oNykgLi4gYl8oOC1uKSAqLworLQkJbWFzayA9ICgxIDw8IGNudCkgLSAxOworLQkJcmVzIHw9IChkID4+ICg4IC0gY250KSkgJiBtYXNrOworKyAgICAgICAgLyogQl8obi0xKSAuLiBCXygwKSA8LSAgYl8oNykgLi4gYl8oOC1uKSAqLworKyAgICAgICAgbWFzayA9ICgxIDw8IGNudCkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+ICg4IC0gY250KSkgJiBtYXNrOworIAorLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQkJLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCistCQkgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorLQkJCQkJCQkgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDYpICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgICAgICAvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogcz09MSwgdGhlbiBpdCBpcyB0aGUKKysgICAgICAgICAgIHhvciBvZiBDRiBhbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0LiAgQmxlY2NrLiAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gNikgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHJvbF93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3JvbF93b3JkKHUxNiBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAxNikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgY250KTsKKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMTYgLSBjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCistCQkJCQkJCSBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gMTQpICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAxNikgIT0gMCkgeworKyAgICAgICAgcmVzID0gKGQgPDwgY250KTsKKysgICAgICAgIG1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoMTYgLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUk9MIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgcm9sX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrcm9sX2xvbmcodTMyIGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1MzIgcmVzLCBjbnQsIG1hc2s7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDMyKSAhPSAwKSB7CistCQlyZXMgPSAoZCA8PCBjbnQpOworLQkJbWFzayA9ICgxIDw8IGNudCkgLSAxOworLQkJcmVzIHw9IChkID4+ICgzMiAtIGNudCkpICYgbWFzazsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKy0JCQkJCQkJIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9IGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworKyAgICAgICAgcmVzID0gKGQgPDwgY250KTsKKysgICAgICAgIG1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoMzIgLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gMzApICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUk9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCByb3JfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrcm9yX2J5dGUodTggZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKK0BAIC0xMjE5LDkgKzEyNjksOSBAQCB1OCByb3JfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICBJRiBuID4gMCAKKyAgICAgICAgMSkgQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiXyhuKQorICAgICAgICAyKSBCXyg3KSAuLiBCXyg4LW4pIDwtICBiXyhuLTEpIC4uIGJfKDApCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA4KSAhPSAwKSB7ICAgICAgICAgICAvKiBub3QgYSB0eXBvLCBkbyBuYWRhIGlmIGNudD09MCAqLworKyAgICAgKi8KKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeyAgIC8qIG5vdCBhIHR5cG8sIGRvIG5hZGEgaWYgY250PT0wICovCisgICAgICAgICAvKiBCXyg3KSAuLiBCXyg4LW4pIDwtICBiXyhuLTEpIC4uIGJfKDApICovCisgICAgICAgICByZXMgPSAoZCA8PCAoOCAtIGNudCkpOworIAorQEAgLTEyMzEsMjkxICsxMjgxLDMxNyBAQCB1OCByb3JfYnl0ZSh1OCBkLCB1OCBzKQorIAorICAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIgCisgICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9DRik7CistCQkvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogcz09MSwgdGhlbiBpdCBpcyB0aGUKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfQ0YpOworKyAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisgICAgICAgICAgICB4b3Igb2YgdGhlIHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMuICBCbGVjY2suICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gNiksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiA2KSwgRl9PRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHJvcl93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3Jvcl93b3JkKHUxNiBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAxNikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgKDE2IC0gY250KSk7CistCQltYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworLQkJcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDE0KSwgRl9PRik7CistCX0gZWxzZSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9DRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAxNikgIT0gMCkgeworKyAgICAgICAgcmVzID0gKGQgPDwgKDE2IC0gY250KSk7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDE0KSwgRl9PRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHJvcl9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3Jvcl9sb25nKHUzMiBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworKyAgICByZWdpc3RlciB1MzIgcmVzLCBjbnQsIG1hc2s7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDMyKSAhPSAwKSB7CistCQlyZXMgPSAoZCA8PCAoMzIgLSBjbnQpKTsKKy0JCW1hc2sgPSAoMSA8PCAoMzIgLSBjbnQpKSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKGNudCkpICYgbWFzazsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDMwKSwgRl9PRik7CistCX0gZWxzZSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQl9CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMyKSAhPSAwKSB7CisrICAgICAgICByZXMgPSAoZCA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoMzIgLSBjbnQpKSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKGNudCkpICYgbWFzazsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDMwKSwgRl9PRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSEwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHNobF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytzaGxfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCA4KSB7CistCQljbnQgPSBzICUgODsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JCS8qIGxhc3QgYml0IHNoaWZ0ZWQgb3V0IGdvZXMgaW50byBjYXJyeSBmbGFnICovCistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICg4IC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAodTgpIGQ7CistCQl9CisrICAgIGlmIChzIDwgOCkgeworKyAgICAgICAgY250ID0gcyAlIDg7CisrCisrICAgICAgICAvKiBsYXN0IGJpdCBzaGlmdGVkIG91dCBnb2VzIGludG8gY2FycnkgZmxhZyAqLworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSBkIDw8IGNudDsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoOCAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9ICh1OCkgZDsKKysgICAgICAgIH0KKyAKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCS8qIE5lZWRzIHNpbXBsaWZpY2F0aW9uLiAqLworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKAorLQkJCQkJCQkJCSgoKHJlcyAmIDB4ODApID09IDB4ODApIF4KKy0JCQkJCQkJCQkgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwKKy0JCQkvKiB3YXMgKE0ueDg2LlJfRkxHJkZfQ0YpPT1GX0NGKSksICovCistCQkJCQkJCQkJRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICAvKiBOZWVkcyBzaW1wbGlmaWNhdGlvbi4gKi8KKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwKSA9PSAweDgwKSBeCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FzIChNLng4Ni5SX0ZMRyZGX0NGKT09Rl9DRikpLCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIH0KKyAgICAgfQorLQlyZXR1cm4gKHU4KXJlczsKKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSEwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzaGxfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytzaGxfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMTYpIHsKKy0JCWNudCA9IHMgJSAxNjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJcmVzID0gZCA8PCBjbnQ7CistCQkJY2YgPSBkICYgKDEgPDwgKDE2IC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gKHUxNikgZDsKKy0JCX0KKy0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKAorLQkJCQkJCQkJCSgoKHJlcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSBeCistCQkJCQkJCQkJIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksCistCQkJCQkJCQkJRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistICAgICAgICB9CistICAgIH0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MDAwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9ICh1MTYpIGQ7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSEwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBzaGxfbG9uZyh1MzIgZCwgdTggcykKKy17CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgMzIpIHsKKy0JCWNudCA9IHMgJSAzMjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJcmVzID0gZCA8PCBjbnQ7CistCQkJY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3NobF9sb25nKHUzMiBkLCB1OCBzKQorK3sKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysKKysgICAgaWYgKHMgPCAzMikgeworKyAgICAgICAgY250ID0gcyAlIDMyOworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSBkIDw8IGNudDsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzaHJfYnl0ZSh1OCBkLCB1OCBzKQorLXsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCA4KSB7CistCQljbnQgPSBzICUgODsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSBkID4+IGNudDsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9ICh1OCkgZDsKKy0JCX0KKy0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDYpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA+PiAocy0xKSkgJiAweDEsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiAodTgpcmVzOworK3U4Cisrc2hyX2J5dGUodTggZCwgdTggcykKKyt7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrCisrICAgIGlmIChzIDwgOCkgeworKyAgICAgICAgY250ID0gcyAlIDg7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICAgICAgcmVzID0gZCA+PiBjbnQ7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gKHU4KSBkOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gNiksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoZCA+PiAocyAtIDEpKSAmIDB4MSwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2hyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2hyX3dvcmQodTE2IGQsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gZCA+PiBjbnQ7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKysgICAgaWYgKHMgPCAxNikgeworKyAgICAgICAgY250ID0gcyAlIDE2OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IGQgPj4gY250OworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorIAorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgIH0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hyX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrc2hyX2xvbmcodTMyIGQsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gZCA+PiBjbnQ7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgaWYgKHMgPCAzMikgeworKyAgICAgICAgY250ID0gcyAlIDMyOworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IGQgPj4gY250OworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHJlcyA9IGQ7CisgICAgICAgICB9CisgICAgICAgICBpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDMwKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgfQorLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcmVzID0gMDsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKyAgICAgfQorICAgICByZXR1cm4gcmVzOworIH0KK0BAIC0xNTI0LDU5MiArMTYwMCw2MzQgQEAgdTMyIHNocl9sb25nKHUzMiBkLCB1OCBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzYXJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2FyX2J5dGUodTggZCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2YsIG1hc2ssIHNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKy0JcmVzID0gZDsKKy0Jc2YgPSBkICYgMHg4MDsKKysgICAgcmVzID0gZDsKKysgICAgc2YgPSBkICYgMHg4MDsKKyAgICAgY250ID0gcyAlIDg7CistCWlmIChjbnQgPiAwICYmIGNudCA8IDgpIHsKKy0JCW1hc2sgPSAoMSA8PCAoOCAtIGNudCkpIC0gMTsKKy0JCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCWlmIChzZikgeworLQkJCXJlcyB8PSB+bWFzazsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0gICAgfSBlbHNlIGlmIChjbnQgPj0gOCkgeworKyAgICBpZiAoY250ID4gMCAmJiBjbnQgPCA4KSB7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDggLSBjbnQpKSAtIDE7CisrICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBpZiAoc2YpIHsKKysgICAgICAgICAgICByZXMgfD0gfm1hc2s7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDgpIHsKKyAgICAgICAgIGlmIChzZikgeworICAgICAgICAgICAgIHJlcyA9IDB4ZmY7CistCQkJU0VUX0ZMQUcoRl9DRik7CistCQkJQ0xFQVJfRkxBRyhGX1pGKTsKKy0JCQlTRVRfRkxBRyhGX1NGKTsKKy0JCQlTRVRfRkxBRyhGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gMDsKKy0JCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJCVNFVF9GTEFHKEZfWkYpOworLQkJCUNMRUFSX0ZMQUcoRl9TRik7CistCQkJQ0xFQVJfRkxBRyhGX1BGKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gMDsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQVIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzYXJfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytzYXJfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2YsIG1hc2ssIHNmOworIAorICAgICBzZiA9IGQgJiAweDgwMDA7CisgICAgIGNudCA9IHMgJSAxNjsKKy0JcmVzID0gZDsKKy0JaWYgKGNudCA+IDAgJiYgY250IDwgMTYpIHsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKGNudCA+IDAgJiYgY250IDwgMTYpIHsKKyAgICAgICAgIG1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CisgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworICAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgfD0gfm1hc2s7CisgICAgICAgICB9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLSAgICB9IGVsc2UgaWYgKGNudCA+PSAxNikgeworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChjbnQgPj0gMTYpIHsKKyAgICAgICAgIGlmIChzZikgeworICAgICAgICAgICAgIHJlcyA9IDB4ZmZmZjsKKy0JCQlTRVRfRkxBRyhGX0NGKTsKKy0JCQlDTEVBUl9GTEFHKEZfWkYpOworLQkJCVNFVF9GTEFHKEZfU0YpOworLQkJCVNFVF9GTEFHKEZfUEYpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgcmVzID0gMDsKKy0JCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJCVNFVF9GTEFHKEZfWkYpOworLQkJCUNMRUFSX0ZMQUcoRl9TRik7CistCQkJQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKyAgICAgICAgIH0KKyAgICAgfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQVIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBzYXJfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytzYXJfbG9uZyh1MzIgZCwgdTggcykKKyB7CisgICAgIHUzMiBjbnQsIHJlcywgY2YsIG1hc2ssIHNmOworIAorICAgICBzZiA9IGQgJiAweDgwMDAwMDAwOworICAgICBjbnQgPSBzICUgMzI7CistCXJlcyA9IGQ7CistCWlmIChjbnQgPiAwICYmIGNudCA8IDMyKSB7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmIChjbnQgPiAwICYmIGNudCA8IDMyKSB7CisgICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisgICAgICAgICByZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKyAgICAgICAgIGlmIChzZikgeworICAgICAgICAgICAgIHJlcyB8PSB+bWFzazsKKyAgICAgICAgIH0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgfSBlbHNlIGlmIChjbnQgPj0gMzIpIHsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChjbnQgPj0gMzIpIHsKKyAgICAgICAgIGlmIChzZikgeworICAgICAgICAgICAgIHJlcyA9IDB4ZmZmZmZmZmY7CistCQkJU0VUX0ZMQUcoRl9DRik7CistCQkJQ0xFQVJfRkxBRyhGX1pGKTsKKy0JCQlTRVRfRkxBRyhGX1NGKTsKKy0JCQlTRVRfRkxBRyhGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gMDsKKy0JCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJCVNFVF9GTEFHKEZfWkYpOworLQkJCUNMRUFSX0ZMQUcoRl9TRik7CistCQkJQ0xFQVJfRkxBRyhGX1BGKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gcmVzOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9aRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAwOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSExEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2hsZF93b3JkICh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMTYtY250KSk7CistCQkJY2YgPSBkICYgKDEgPDwgKDE2IC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSBeCistCQkJCQkJCQkgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksIEZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworK3UxNgorK3NobGRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDE2KSB7CisrICAgICAgICBjbnQgPSBzICUgMTY7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMTYgLSBjbnQpKTsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoMTYgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSBeCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocyAtIDEpKSAmIDB4ODAwMCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNITEQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBzaGxkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcykKKy17CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgMzIpIHsKKy0JCWNudCA9IHMgJSAzMjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJcmVzID0gKGQgPDwgY250KSB8IChmaWxsID4+ICgzMi1jbnQpKTsKKy0JCQljZiA9IGQgJiAoMSA8PCAoMzIgLSBjbnQpKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDAwMDAwKSA9PSAweDgwMDAwMDAwKSBeCistCQkJCQkJCQkgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksIEZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiByZXM7CisrdTMyCisrc2hsZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcykKKyt7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrCisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gKGQgPDwgY250KSB8IChmaWxsID4+ICgzMiAtIGNudCkpOworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICgzMiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDAwMDAwKSA9PSAweDgwMDAwMDAwKSBeCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocyAtIDEpKSAmIDB4ODAwMDAwMDAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFJEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2hyZF93b3JkICh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpCisrdTE2Cisrc2hyZF93b3JkKHUxNiBkLCB1MTYgZmlsbCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMTYpIHsKKy0JCWNudCA9IHMgJSAxNjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDE2IC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKysgICAgaWYgKHMgPCAxNikgeworKyAgICAgICAgY250ID0gcyAlIDE2OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IChkID4+IGNudCkgfCAoZmlsbCA8PCAoMTYgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKyAKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgIH0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9QRik7CisgICAgIH0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBzaHJkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcykKKyt1MzIKKytzaHJkX2xvbmcodTMyIGQsIHUzMiBmaWxsLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAzMikgeworLQkJY250ID0gcyAlIDMyOworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IChkID4+IGNudCkgfCAoZmlsbCA8PCAoMzIgLSBjbnQpKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworKyAgICBpZiAocyA8IDMyKSB7CisrICAgICAgICBjbnQgPSBzICUgMzI7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICAgICAgcmVzID0gKGQgPj4gY250KSB8IChmaWxsIDw8ICgzMiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgIH0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9QRik7CisgICAgIH0KKy0JcmV0dXJuIHJlczsKKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQkIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHNiYl9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytzYmJfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKy0JCXJlcyA9IGQgLSBzIC0gMTsKKy0JZWxzZQorLQkJcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHJlcyA9IGQgLSBzIC0gMTsKKysgICAgZWxzZQorKyAgICAgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNCQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNiYl93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKytzYmJfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisgICAgICAgICByZXMgPSBkIC0gcyAtIDE7CisgICAgIGVsc2UKKyAgICAgICAgIHJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0JCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2JiX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK3NiYl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorICAgICAgICAgcmVzID0gZCAtIHMgLSAxOworICAgICBlbHNlCisgICAgICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTVUIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHN1Yl9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytzdWJfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGJjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTVUIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzdWJfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2Cisrc3ViX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCisgICAgIHJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc3ViX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK3N1Yl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBURVNUIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHRlc3RfYnl0ZSh1OCBkLCB1OCBzKQorK3ZvaWQKKyt0ZXN0X2J5dGUodTggZCwgdTggcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKyAgICAgcmVzID0gZCAmIHM7CisgCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgICAgIC8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X3dvcmQodTE2IGQsIHUxNiBzKQorK3ZvaWQKKyt0ZXN0X3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkICYgczsKKysgICAgcmVzID0gZCAmIHM7CisgCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JLyogQUYgPT0gZG9udCBjYXJlICovCistCUNMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgLyogQUYgPT0gZG9udCBjYXJlICovCisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBURVNUIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHRlc3RfbG9uZyh1MzIgZCwgdTMyIHMpCisrdm9pZAorK3Rlc3RfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JLyogQUYgPT0gZG9udCBjYXJlICovCistCUNMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIC8qIEFGID09IGRvbnQgY2FyZSAqLworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgWE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCB4b3JfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisreG9yX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHU4IHJlczsgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHU4IHJlczsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCBeIHM7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZCBeIHM7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFhPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHhvcl93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKyt4b3Jfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLQlyZWdpc3RlciB1MTYgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MTYgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgXiBzOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBYT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiB4b3JfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisreG9yX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIF4gczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZCBeIHM7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGltdWxfYnl0ZSh1OCBzKQorK3ZvaWQKKytpbXVsX2J5dGUodTggcykKKyB7CistCXMxNiByZXMgPSAoczE2KSgoczgpTS54ODYuUl9BTCAqIChzOClzKTsKKysgICAgczE2IHJlcyA9IChzMTYpICgoczgpIE0ueDg2LlJfQUwgKiAoczgpIHMpOworIAorLQlNLng4Ni5SX0FYID0gcmVzOworLQlpZiAoKChNLng4Ni5SX0FMICYgMHg4MCkgPT0gMCAmJiBNLng4Ni5SX0FIID09IDB4MDApIHx8CistCQkoKE0ueDg2LlJfQUwgJiAweDgwKSAhPSAwICYmIE0ueDg2LlJfQUggPT0gMHhGRikpIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKy0JfQorKyAgICBNLng4Ni5SX0FYID0gcmVzOworKyAgICBpZiAoKChNLng4Ni5SX0FMICYgMHg4MCkgPT0gMCAmJiBNLng4Ni5SX0FIID09IDB4MDApIHx8CisrICAgICAgICAoKE0ueDg2LlJfQUwgJiAweDgwKSAhPSAwICYmIE0ueDg2LlJfQUggPT0gMHhGRikpIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX3dvcmQodTE2IHMpCisrdm9pZAorK2ltdWxfd29yZCh1MTYgcykKKyB7CistCXMzMiByZXMgPSAoczE2KU0ueDg2LlJfQVggKiAoczE2KXM7CisrICAgIHMzMiByZXMgPSAoczE2KSBNLng4Ni5SX0FYICogKHMxNikgczsKKyAKKy0JTS54ODYuUl9BWCA9ICh1MTYpcmVzOworLQlNLng4Ni5SX0RYID0gKHUxNikocmVzID4+IDE2KTsKKy0JaWYgKCgoTS54ODYuUl9BWCAmIDB4ODAwMCkgPT0gMCAmJiBNLng4Ni5SX0RYID09IDB4MDApIHx8CistCQkoKE0ueDg2LlJfQVggJiAweDgwMDApICE9IDAgJiYgTS54ODYuUl9EWCA9PSAweEZGKSkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworLQl9CisrICAgIE0ueDg2LlJfQVggPSAodTE2KSByZXM7CisrICAgIE0ueDg2LlJfRFggPSAodTE2KSAocmVzID4+IDE2KTsKKysgICAgaWYgKCgoTS54ODYuUl9BWCAmIDB4ODAwMCkgPT0gMCAmJiBNLng4Ni5SX0RYID09IDB4MDApIHx8CisrICAgICAgICAoKE0ueDg2LlJfQVggJiAweDgwMDApICE9IDAgJiYgTS54ODYuUl9EWCA9PSAweEZGKSkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGltdWxfbG9uZ19kaXJlY3QodTMyICpyZXNfbG8sIHUzMiogcmVzX2hpLHUzMiBkLCB1MzIgcykKKyt2b2lkCisraW11bF9sb25nX2RpcmVjdCh1MzIgKiByZXNfbG8sIHUzMiAqIHJlc19oaSwgdTMyIGQsIHUzMiBzKQorIHsKKyAjaWZkZWYJX19IQVNfTE9OR19MT05HX18KKy0JczY0IHJlcyA9IChzMzIpZCAqIChzMzIpczsKKysgICAgczY0IHJlcyA9IChzNjQpIChzMzIpIGQgKiAoczMyKSBzOworIAorLQkqcmVzX2xvID0gKHUzMilyZXM7CistCSpyZXNfaGkgPSAodTMyKShyZXMgPj4gMzIpOworKyAgICAqcmVzX2xvID0gKHUzMikgcmVzOworKyAgICAqcmVzX2hpID0gKHUzMikgKHJlcyA+PiAzMik7CisgI2Vsc2UKKy0JdTMyCWRfbG8sZF9oaSxkX3NpZ247CistCXUzMglzX2xvLHNfaGksc19zaWduOworLQl1MzIJcmxvX2xvLHJsb19oaSxyaGlfbG87CistCistCWlmICgoZF9zaWduID0gZCAmIDB4ODAwMDAwMDApICE9IDApCistCQlkID0gLWQ7CistCWRfbG8gPSBkICYgMHhGRkZGOworLQlkX2hpID0gZCA+PiAxNjsKKy0JaWYgKChzX3NpZ24gPSBzICYgMHg4MDAwMDAwMCkgIT0gMCkKKy0JCXMgPSAtczsKKy0Jc19sbyA9IHMgJiAweEZGRkY7CistCXNfaGkgPSBzID4+IDE2OworLQlybG9fbG8gPSBkX2xvICogc19sbzsKKy0JcmxvX2hpID0gKGRfaGkgKiBzX2xvICsgZF9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CistCXJoaV9sbyA9IGRfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CistCSpyZXNfbG8gPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworLQkqcmVzX2hpID0gcmhpX2xvOworLQlpZiAoZF9zaWduICE9IHNfc2lnbikgeworLQkJZCA9IH4qcmVzX2xvOworLQkJcyA9ICgoKGQgJiAweEZGRkYpICsgMSkgPj4gMTYpICsgKGQgPj4gMTYpOworLQkJKnJlc19sbyA9IH4qcmVzX2xvKzE7CistCQkqcmVzX2hpID0gfipyZXNfaGkrKHMgPj4gMTYpOworLQkJfQorKyAgICB1MzIgZF9sbywgZF9oaSwgZF9zaWduOworKyAgICB1MzIgc19sbywgc19oaSwgc19zaWduOworKyAgICB1MzIgcmxvX2xvLCBybG9faGksIHJoaV9sbzsKKysKKysgICAgaWYgKChkX3NpZ24gPSBkICYgMHg4MDAwMDAwMCkgIT0gMCkKKysgICAgICAgIGQgPSAtZDsKKysgICAgZF9sbyA9IGQgJiAweEZGRkY7CisrICAgIGRfaGkgPSBkID4+IDE2OworKyAgICBpZiAoKHNfc2lnbiA9IHMgJiAweDgwMDAwMDAwKSAhPSAwKQorKyAgICAgICAgcyA9IC1zOworKyAgICBzX2xvID0gcyAmIDB4RkZGRjsKKysgICAgc19oaSA9IHMgPj4gMTY7CisrICAgIHJsb19sbyA9IGRfbG8gKiBzX2xvOworKyAgICBybG9faGkgPSAoZF9oaSAqIHNfbG8gKyBkX2xvICogc19oaSkgKyAocmxvX2xvID4+IDE2KTsKKysgICAgcmhpX2xvID0gZF9oaSAqIHNfaGkgKyAocmxvX2hpID4+IDE2KTsKKysgICAgKnJlc19sbyA9IChybG9faGkgPDwgMTYpIHwgKHJsb19sbyAmIDB4RkZGRik7CisrICAgICpyZXNfaGkgPSByaGlfbG87CisrICAgIGlmIChkX3NpZ24gIT0gc19zaWduKSB7CisrICAgICAgICBkID0gfipyZXNfbG87CisrICAgICAgICBzID0gKCgoZCAmIDB4RkZGRikgKyAxKSA+PiAxNikgKyAoZCA+PiAxNik7CisrICAgICAgICAqcmVzX2xvID0gfipyZXNfbG8gKyAxOworKyAgICAgICAgKnJlc19oaSA9IH4qcmVzX2hpICsgKHMgPj4gMTYpOworKyAgICB9CisgI2VuZGlmCisgfQorIAorQEAgLTIxMTcsNTMgKzIyMzUsNTkgQEAgdm9pZCBpbXVsX2xvbmdfZGlyZWN0KHUzMiAqcmVzX2xvLCB1MzIqIHJlc19oaSx1MzIgZCwgdTMyIHMpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGltdWxfbG9uZyh1MzIgcykKKyt2b2lkCisraW11bF9sb25nKHUzMiBzKQorIHsKKy0JaW11bF9sb25nX2RpcmVjdCgmTS54ODYuUl9FQVgsJk0ueDg2LlJfRURYLE0ueDg2LlJfRUFYLHMpOworLQlpZiAoKChNLng4Ni5SX0VBWCAmIDB4ODAwMDAwMDApID09IDAgJiYgTS54ODYuUl9FRFggPT0gMHgwMCkgfHwKKy0JCSgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSAhPSAwICYmIE0ueDg2LlJfRURYID09IDB4RkYpKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgaW11bF9sb25nX2RpcmVjdCgmTS54ODYuUl9FQVgsICZNLng4Ni5SX0VEWCwgTS54ODYuUl9FQVgsIHMpOworKyAgICBpZiAoKChNLng4Ni5SX0VBWCAmIDB4ODAwMDAwMDApID09IDAgJiYgTS54ODYuUl9FRFggPT0gMHgwMCkgfHwKKysgICAgICAgICgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSAhPSAwICYmIE0ueDg2LlJfRURYID09IDB4RkYpKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBtdWxfYnl0ZSh1OCBzKQorK3ZvaWQKKyttdWxfYnl0ZSh1OCBzKQorIHsKKy0JdTE2IHJlcyA9ICh1MTYpKE0ueDg2LlJfQUwgKiBzKTsKKysgICAgdTE2IHJlcyA9ICh1MTYpIChNLng4Ni5SX0FMICogcyk7CisgCistCU0ueDg2LlJfQVggPSByZXM7CistCWlmIChNLng4Ni5SX0FIID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKy0JfQorKyAgICBNLng4Ni5SX0FYID0gcmVzOworKyAgICBpZiAoTS54ODYuUl9BSCA9PSAwKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBtdWxfd29yZCh1MTYgcykKKyt2b2lkCisrbXVsX3dvcmQodTE2IHMpCisgeworLQl1MzIgcmVzID0gTS54ODYuUl9BWCAqIHM7CisrICAgIHUzMiByZXMgPSBNLng4Ni5SX0FYICogczsKKyAKKy0JTS54ODYuUl9BWCA9ICh1MTYpcmVzOworLQlNLng4Ni5SX0RYID0gKHUxNikocmVzID4+IDE2KTsKKy0JaWYgKE0ueDg2LlJfRFggPT0gMCkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistICAgIH0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworKyAgICBNLng4Ni5SX0FYID0gKHUxNikgcmVzOworKyAgICBNLng4Ni5SX0RYID0gKHUxNikgKHJlcyA+PiAxNik7CisrICAgIGlmIChNLng4Ni5SX0RYID09IDApIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKyAgICAgfQorIH0KKyAKK0BAIC0yMTcxLDM2ICsyMjk1LDM4IEBAIHZvaWQgbXVsX3dvcmQodTE2IHMpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX2xvbmcodTMyIHMpCisrdm9pZAorK211bF9sb25nKHUzMiBzKQorIHsKKyAjaWZkZWYJX19IQVNfTE9OR19MT05HX18KKy0JdTY0IHJlcyA9ICh1MzIpTS54ODYuUl9FQVggKiAodTMyKXM7CisrICAgIHU2NCByZXMgPSAodTY0KSBNLng4Ni5SX0VBWCAqIHM7CisgCistCU0ueDg2LlJfRUFYID0gKHUzMilyZXM7CistCU0ueDg2LlJfRURYID0gKHUzMikocmVzID4+IDMyKTsKKysgICAgTS54ODYuUl9FQVggPSAodTMyKSByZXM7CisrICAgIE0ueDg2LlJfRURYID0gKHUzMikgKHJlcyA+PiAzMik7CisgI2Vsc2UKKy0JdTMyCWEsYV9sbyxhX2hpOworLQl1MzIJc19sbyxzX2hpOworLQl1MzIJcmxvX2xvLHJsb19oaSxyaGlfbG87CistCistCWEgPSBNLng4Ni5SX0VBWDsKKy0JYV9sbyA9IGEgJiAweEZGRkY7CistCWFfaGkgPSBhID4+IDE2OworLQlzX2xvID0gcyAmIDB4RkZGRjsKKy0Jc19oaSA9IHMgPj4gMTY7CistCXJsb19sbyA9IGFfbG8gKiBzX2xvOworLQlybG9faGkgPSAoYV9oaSAqIHNfbG8gKyBhX2xvICogc19oaSkgKyAocmxvX2xvID4+IDE2KTsKKy0JcmhpX2xvID0gYV9oaSAqIHNfaGkgKyAocmxvX2hpID4+IDE2KTsKKy0JTS54ODYuUl9FQVggPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworLQlNLng4Ni5SX0VEWCA9IHJoaV9sbzsKKysgICAgdTMyIGEsIGFfbG8sIGFfaGk7CisrICAgIHUzMiBzX2xvLCBzX2hpOworKyAgICB1MzIgcmxvX2xvLCBybG9faGksIHJoaV9sbzsKKysKKysgICAgYSA9IE0ueDg2LlJfRUFYOworKyAgICBhX2xvID0gYSAmIDB4RkZGRjsKKysgICAgYV9oaSA9IGEgPj4gMTY7CisrICAgIHNfbG8gPSBzICYgMHhGRkZGOworKyAgICBzX2hpID0gcyA+PiAxNjsKKysgICAgcmxvX2xvID0gYV9sbyAqIHNfbG87CisrICAgIHJsb19oaSA9IChhX2hpICogc19sbyArIGFfbG8gKiBzX2hpKSArIChybG9fbG8gPj4gMTYpOworKyAgICByaGlfbG8gPSBhX2hpICogc19oaSArIChybG9faGkgPj4gMTYpOworKyAgICBNLng4Ni5SX0VBWCA9IChybG9faGkgPDwgMTYpIHwgKHJsb19sbyAmIDB4RkZGRik7CisrICAgIE0ueDg2LlJfRURYID0gcmhpX2xvOworICNlbmRpZgorIAorLQlpZiAoTS54ODYuUl9FRFggPT0gMCkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworKyAgICBpZiAoTS54ODYuUl9FRFggPT0gMCkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworICAgICB9CisgfQorIAorQEAgLTIyMDgsMzA5ICsyMzM0LDMxOSBAQCB2b2lkIG11bF9sb25nKHUzMiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSURJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpZGl2X2J5dGUodTggcykKKyt2b2lkCisraWRpdl9ieXRlKHU4IHMpCisgeworICAgICBzMzIgZHZkLCBkaXYsIG1vZDsKKyAKKy0JZHZkID0gKHMxNilNLng4Ni5SX0FYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZHZkID0gKHMxNikgTS54ODYuUl9BWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHM4KSBzOworKyAgICBtb2QgPSBkdmQgJSAoczgpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4N2YpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzOClzOworLQltb2QgPSBkdmQgJSAoczgpczsKKy0JaWYgKGFicyhkaXYpID4gMHg3ZikgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JTS54ODYuUl9BTCA9IChzOCkgZGl2OworLQlNLng4Ni5SX0FIID0gKHM4KSBtb2Q7CisrICAgIH0KKysgICAgTS54ODYuUl9BTCA9IChzOCkgZGl2OworKyAgICBNLng4Ni5SX0FIID0gKHM4KSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGlkaXZfd29yZCh1MTYgcykKKyt2b2lkCisraWRpdl93b3JkKHUxNiBzKQorIHsKKy0JczMyIGR2ZCwgZGl2LCBtb2Q7CisrICAgIHMzMiBkdmQsIGRpdiwgbW9kOworIAorLQlkdmQgPSAoKChzMzIpTS54ODYuUl9EWCkgPDwgMTYpIHwgTS54ODYuUl9BWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZGl2ID0gZHZkIC8gKHMxNilzOworLQltb2QgPSBkdmQgJSAoczE2KXM7CistCWlmIChhYnMoZGl2KSA+IDB4N2ZmZikgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoZGl2ID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworKyAgICBkdmQgPSAoKChzMzIpIE0ueDg2LlJfRFgpIDw8IDE2KSB8IE0ueDg2LlJfQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzMTYpIHM7CisrICAgIG1vZCA9IGR2ZCAlIChzMTYpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4N2ZmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZGl2ID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworIAorLQlNLng4Ni5SX0FYID0gKHUxNilkaXY7CistCU0ueDg2LlJfRFggPSAodTE2KW1vZDsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIGRpdjsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaWRpdl9sb25nKHUzMiBzKQorK3ZvaWQKKytpZGl2X2xvbmcodTMyIHMpCisgeworICNpZmRlZglfX0hBU19MT05HX0xPTkdfXworLQlzNjQgZHZkLCBkaXYsIG1vZDsKKy0KKy0JZHZkID0gKCgoczY0KU0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZGl2ID0gZHZkIC8gKHMzMilzOworLQltb2QgPSBkdmQgJSAoczMyKXM7CistCWlmIChhYnMoZGl2KSA+IDB4N2ZmZmZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CisrICAgIHM2NCBkdmQsIGRpdiwgbW9kOworKworKyAgICBkdmQgPSAoKChzNjQpIE0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHMzMikgczsKKysgICAgbW9kID0gZHZkICUgKHMzMikgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHg3ZmZmZmZmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKyAjZWxzZQorLQlzMzIgZGl2ID0gMCwgbW9kOworLQlzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKy0JdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CistCXUzMiBhYnNfcyA9IHMgJiAweDdGRkZGRkZGOworLQl1MzIgYWJzX2hfZHZkID0gaF9kdmQgJiAweDdGRkZGRkZGOworLQl1MzIgaF9zID0gYWJzX3MgPj4gMTsKKy0JdTMyIGxfcyA9IGFic19zIDw8IDMxOworLQlpbnQgY291bnRlciA9IDMxOworLQlpbnQgY2Fycnk7CistCistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRvIHsKKy0JCWRpdiA8PD0gMTsKKy0JCWNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKy0JCQorLQkJaWYgKGFic19oX2R2ZCA8IChoX3MgKyBjYXJyeSkpIHsKKy0JCQloX3MgPj49IDE7CistCQkJbF9zID0gYWJzX3MgPDwgKC0tY291bnRlcik7CistCQkJY29udGludWU7CistCQl9IGVsc2UgeworLQkJCWFic19oX2R2ZCAtPSAoaF9zICsgY2FycnkpOworLQkJCWxfZHZkID0gY2FycnkgPyAoKDB4RkZGRkZGRkYgLSBsX3MpICsgbF9kdmQgKyAxKQorLQkJCQk6IChsX2R2ZCAtIGxfcyk7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworLQkJCWRpdiB8PSAxOworLQkJCWNvbnRpbnVlOworLQkJfQorLQkJCistCX0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CistCS8qIG92ZXJmbG93ICovCistCWlmIChhYnNfaF9kdmQgfHwgKGxfZHZkID4gYWJzX3MpKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQkvKiBzaWduICovCistCWRpdiB8PSAoKGhfZHZkICYgMHgxMDAwMDAwMCkgXiAocyAmIDB4MTAwMDAwMDApKTsKKy0JbW9kID0gbF9kdmQ7CisrICAgIHMzMiBkaXYgPSAwLCBtb2Q7CisrICAgIHMzMiBoX2R2ZCA9IE0ueDg2LlJfRURYOworKyAgICB1MzIgbF9kdmQgPSBNLng4Ni5SX0VBWDsKKysgICAgdTMyIGFic19zID0gcyAmIDB4N0ZGRkZGRkY7CisrICAgIHUzMiBhYnNfaF9kdmQgPSBoX2R2ZCAmIDB4N0ZGRkZGRkY7CisrICAgIHUzMiBoX3MgPSBhYnNfcyA+PiAxOworKyAgICB1MzIgbF9zID0gYWJzX3MgPDwgMzE7CisrICAgIGludCBjb3VudGVyID0gMzE7CisrICAgIGludCBjYXJyeTsKKysKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZG8geworKyAgICAgICAgZGl2IDw8PSAxOworKyAgICAgICAgY2FycnkgPSAobF9kdmQgPj0gbF9zKSA/IDAgOiAxOworKworKyAgICAgICAgaWYgKGFic19oX2R2ZCA8IChoX3MgKyBjYXJyeSkpIHsKKysgICAgICAgICAgICBoX3MgPj49IDE7CisrICAgICAgICAgICAgbF9zID0gYWJzX3MgPDwgKC0tY291bnRlcik7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBhYnNfaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKysgICAgICAgICAgICBsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKysgICAgICAgICAgICAgICAgOiAobF9kdmQgLSBsX3MpOworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBhYnNfcyA8PCAoLS1jb3VudGVyKTsKKysgICAgICAgICAgICBkaXYgfD0gMTsKKysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysKKysgICAgfSB3aGlsZSAoY291bnRlciA+IC0xKTsKKysgICAgLyogb3ZlcmZsb3cgKi8KKysgICAgaWYgKGFic19oX2R2ZCB8fCAobF9kdmQgPiBhYnNfcykpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIC8qIHNpZ24gKi8KKysgICAgZGl2IHw9ICgoaF9kdmQgJiAweDEwMDAwMDAwKSBeIChzICYgMHgxMDAwMDAwMCkpOworKyAgICBtb2QgPSBsX2R2ZDsKKyAKKyAjZW5kaWYKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ0xFQVJfRkxBRyhGX1NGKTsKKy0JU0VUX0ZMQUcoRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworIAorLQlNLng4Ni5SX0VBWCA9ICh1MzIpZGl2OworLQlNLng4Ni5SX0VEWCA9ICh1MzIpbW9kOworKyAgICBNLng4Ni5SX0VBWCA9ICh1MzIpIGRpdjsKKysgICAgTS54ODYuUl9FRFggPSAodTMyKSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgZGl2X2J5dGUodTggcykKKyt2b2lkCisrZGl2X2J5dGUodTggcykKKyB7CistCXUzMiBkdmQsIGRpdiwgbW9kOworKyAgICB1MzIgZHZkLCBkaXYsIG1vZDsKKyAKKy0JZHZkID0gTS54ODYuUl9BWDsKKysgICAgZHZkID0gTS54ODYuUl9BWDsKKyAgICAgaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgfQorLQlkaXYgPSBkdmQgLyAodTgpczsKKy0JbW9kID0gZHZkICUgKHU4KXM7CistCWlmIChhYnMoZGl2KSA+IDB4ZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICBkaXYgPSBkdmQgLyAodTgpIHM7CisrICAgIG1vZCA9IGR2ZCAlICh1OCkgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHhmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisgICAgICAgICByZXR1cm47CistCX0KKy0JTS54ODYuUl9BTCA9ICh1OClkaXY7CistCU0ueDg2LlJfQUggPSAodTgpbW9kOworKyAgICB9CisrICAgIE0ueDg2LlJfQUwgPSAodTgpIGRpdjsKKysgICAgTS54ODYuUl9BSCA9ICh1OCkgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGRpdl93b3JkKHUxNiBzKQorK3ZvaWQKKytkaXZfd29yZCh1MTYgcykKKyB7CistCXUzMiBkdmQsIGRpdiwgbW9kOworKyAgICB1MzIgZHZkLCBkaXYsIG1vZDsKKyAKKy0JZHZkID0gKCgodTMyKU0ueDg2LlJfRFgpIDw8IDE2KSB8IE0ueDg2LlJfQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICBkdmQgPSAoKCh1MzIpIE0ueDg2LlJfRFgpIDw8IDE2KSB8IE0ueDg2LlJfQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvICh1MTYpIHM7CisrICAgIG1vZCA9IGR2ZCAlICh1MTYpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4ZmZmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisgICAgICAgICByZXR1cm47CisgICAgIH0KKy0JZGl2ID0gZHZkIC8gKHUxNilzOworLQltb2QgPSBkdmQgJSAodTE2KXM7CistCWlmIChhYnMoZGl2KSA+IDB4ZmZmZikgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoZGl2ID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhkaXYgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisgCistCU0ueDg2LlJfQVggPSAodTE2KWRpdjsKKy0JTS54ODYuUl9EWCA9ICh1MTYpbW9kOworKyAgICBNLng4Ni5SX0FYID0gKHUxNikgZGl2OworKyAgICBNLng4Ni5SX0RYID0gKHUxNikgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGRpdl9sb25nKHUzMiBzKQorK3ZvaWQKKytkaXZfbG9uZyh1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXU2NCBkdmQsIGRpdiwgbW9kOworLQorLQlkdmQgPSAoKCh1NjQpTS54ODYuUl9FRFgpIDw8IDMyKSB8IE0ueDg2LlJfRUFYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkaXYgPSBkdmQgLyAodTMyKXM7CistCW1vZCA9IGR2ZCAlICh1MzIpczsKKy0JaWYgKGFicyhkaXYpID4gMHhmZmZmZmZmZikgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKysgICAgdTY0IGR2ZCwgZGl2LCBtb2Q7CisrCisrICAgIGR2ZCA9ICgoKHU2NCkgTS54ODYuUl9FRFgpIDw8IDMyKSB8IE0ueDg2LlJfRUFYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAodTMyKSBzOworKyAgICBtb2QgPSBkdmQgJSAodTMyKSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweGZmZmZmZmZmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorICNlbHNlCistCXMzMiBkaXYgPSAwLCBtb2Q7CistCXMzMiBoX2R2ZCA9IE0ueDg2LlJfRURYOworLQl1MzIgbF9kdmQgPSBNLng4Ni5SX0VBWDsKKy0KKy0JdTMyIGhfcyA9IHM7CistCXUzMiBsX3MgPSAwOworLQlpbnQgY291bnRlciA9IDMyOworLQlpbnQgY2Fycnk7CistCQkKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZG8geworLQkJZGl2IDw8PSAxOworLQkJY2FycnkgPSAobF9kdmQgPj0gbF9zKSA/IDAgOiAxOworLQkJCistCQlpZiAoaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IHMgPDwgKC0tY291bnRlcik7CistCQkJY29udGludWU7CistCQl9IGVsc2UgeworLQkJCWhfZHZkIC09IChoX3MgKyBjYXJyeSk7CistCQkJbF9kdmQgPSBjYXJyeSA/ICgoMHhGRkZGRkZGRiAtIGxfcykgKyBsX2R2ZCArIDEpCistCQkJCTogKGxfZHZkIC0gbF9zKTsKKy0JCQloX3MgPj49IDE7CistCQkJbF9zID0gcyA8PCAoLS1jb3VudGVyKTsKKy0JCQlkaXYgfD0gMTsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0JCQorLQl9IHdoaWxlIChjb3VudGVyID4gLTEpOworLQkvKiBvdmVyZmxvdyAqLworLQlpZiAoaF9kdmQgfHwgKGxfZHZkID4gcykpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCW1vZCA9IGxfZHZkOworKyAgICBzMzIgZGl2ID0gMCwgbW9kOworKyAgICBzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKysgICAgdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CisrCisrICAgIHUzMiBoX3MgPSBzOworKyAgICB1MzIgbF9zID0gMDsKKysgICAgaW50IGNvdW50ZXIgPSAzMjsKKysgICAgaW50IGNhcnJ5OworKworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkbyB7CisrICAgICAgICBkaXYgPDw9IDE7CisrICAgICAgICBjYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7CisrCisrICAgICAgICBpZiAoaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CisrICAgICAgICAgICAgaF9zID4+PSAxOworKyAgICAgICAgICAgIGxfcyA9IHMgPDwgKC0tY291bnRlcik7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBoX2R2ZCAtPSAoaF9zICsgY2FycnkpOworKyAgICAgICAgICAgIGxfZHZkID0gY2FycnkgPyAoKDB4RkZGRkZGRkYgLSBsX3MpICsgbF9kdmQgKyAxKQorKyAgICAgICAgICAgICAgICA6IChsX2R2ZCAtIGxfcyk7CisrICAgICAgICAgICAgaF9zID4+PSAxOworKyAgICAgICAgICAgIGxfcyA9IHMgPDwgKC0tY291bnRlcik7CisrICAgICAgICAgICAgZGl2IHw9IDE7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisrCisrICAgIH0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CisrICAgIC8qIG92ZXJmbG93ICovCisrICAgIGlmIChoX2R2ZCB8fCAobF9kdmQgPiBzKSkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgbW9kID0gbF9kdmQ7CisgI2VuZGlmCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCVNFVF9GTEFHKEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9FQVggPSAodTMyKWRpdjsKKy0JTS54ODYuUl9FRFggPSAodTMyKW1vZDsKKysgICAgTS54ODYuUl9FQVggPSAodTMyKSBkaXY7CisrICAgIE0ueDg2LlJfRURYID0gKHUzMikgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU4gc3RyaW5nIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGlucyhpbnQgc2l6ZSkKKyt2b2lkCisraW5zKGludCBzaXplKQorIHsKKy0JaW50IGluYyA9IHNpemU7CisrICAgIGludCBpbmMgPSBzaXplOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9ERikpIHsKKy0JCWluYyA9IC1zaXplOworLQl9CistCWlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7CisrICAgICAgICBpbmMgPSAtc2l6ZTsKKysgICAgfQorKyAgICBpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7CisgICAgICAgICAvKiBkb250IGNhcmUgd2hldGhlciBSRVBFIG9yIFJFUE5FICovCisgICAgICAgICAvKiBpbiB1bnRpbCBDWCBpcyBaRVJPLiAqLworLQkJdTMyIGNvdW50ID0gKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgPworLQkJCQkJIE0ueDg2LlJfRUNYIDogTS54ODYuUl9DWCk7CisrICAgICAgICB1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CisrICAgICAgICAgICAgICAgICAgICAgTS54ODYuUl9FQ1ggOiBNLng4Ni5SX0NYKTsKKyAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJCSgqc3lzX2luYikoTS54ODYuUl9EWCkpOworLQkJCQlNLng4Ni5SX0RJICs9IGluYzsKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc3lzX2luYikgKE0ueDg2LlJfRFgpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJCSgqc3lzX2ludykoTS54ODYuUl9EWCkpOworLQkJCQlNLng4Ni5SX0RJICs9IGluYzsKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc3lzX2ludykgKE0ueDg2LlJfRFgpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJCSgqc3lzX2lubCkoTS54ODYuUl9EWCkpOworLQkJCQlNLng4Ni5SX0RJICs9IGluYzsKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc3lzX2lubCkgKE0ueDg2LlJfRFgpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0JCU0ueDg2LlJfQ1ggPSAwOworLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJTS54ODYuUl9FQ1ggPSAwOworKyAgICAgICAgTS54ODYuUl9DWCA9IDA7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICBNLng4Ni5SX0VDWCA9IDA7CisgICAgICAgICB9CistCQlNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgIGNhc2UgMToKKy0JCQlzdG9yZV9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCistCQkJCQkJCQkoKnN5c19pbmIpKE0ueDg2LlJfRFgpKTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmIpIChNLng4Ni5SX0RYKSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKy0JCQlzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCistCQkJCQkJCQkoKnN5c19pbncpKE0ueDg2LlJfRFgpKTsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbncpIChNLng4Ni5SX0RYKSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKy0JCQlzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCistCQkJCQkJCQkoKnN5c19pbmwpKE0ueDg2LlJfRFgpKTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmwpIChNLng4Ni5SX0RYKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistCQlNLng4Ni5SX0RJICs9IGluYzsKKysgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICB9CisgfQorIAorQEAgLTI1MTgsNjMgKzI2NTQsNjUgQEAgdm9pZCBpbnMoaW50IHNpemUpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPVVQgc3RyaW5nIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIG91dHMoaW50IHNpemUpCisrdm9pZAorK291dHMoaW50IHNpemUpCisgeworICAgICBpbnQgaW5jID0gc2l6ZTsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworICAgICAgICAgaW5jID0gLXNpemU7CisgICAgIH0KKy0JaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworKyAgICBpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7CisgICAgICAgICAvKiBkb250IGNhcmUgd2hldGhlciBSRVBFIG9yIFJFUE5FICovCisgICAgICAgICAvKiBvdXQgdW50aWwgQ1ggaXMgWkVSTy4gKi8KKy0JCXUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKy0JCQkJCSBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworKyAgICAgICAgdTMyIGNvdW50ID0gKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgPworKyAgICAgICAgICAgICAgICAgICAgIE0ueDg2LlJfRUNYIDogTS54ODYuUl9DWCk7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCSgqc3lzX291dGIpKE0ueDg2LlJfRFgsCistCQkJCQkJIGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworLQkJCQlNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJKCpzeXNfb3V0dykoTS54ODYuUl9EWCwKKy0JCQkJCQkgZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CistCQkJCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgICAgICAgICAoKnN5c19vdXR3KSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQkoKnN5c19vdXRsKShNLng4Ni5SX0RYLAorLQkJCQkJCSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKy0JCQkJTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICAgICAgICAgICgqc3lzX291dGwpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistCQlNLng4Ni5SX0NYID0gMDsKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCU0ueDg2LlJfRUNYID0gMDsKKysgICAgICAgIE0ueDg2LlJfQ1ggPSAwOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworICAgICAgICAgfQorLQkJTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICBjYXNlIDE6CistCQkJKCpzeXNfb3V0YikoTS54ODYuUl9EWCwKKy0JCQkJCSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICAoKnN5c19vdXRiKSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKy0JCQkoKnN5c19vdXR3KShNLng4Ni5SX0RYLAorLQkJCQkJIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICgqc3lzX291dHcpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorLQkJCSgqc3lzX291dGwpKE0ueDg2LlJfRFgsCistCQkJCQkgZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgKCpzeXNfb3V0bCkgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgfQorIH0KKyAKK0BAIC0yNTg1LDExICsyNzIzLDEyIEBAIGFkZHIJLSBBZGRyZXNzIHRvIGZldGNoIHdvcmQgZnJvbQorIFJFTUFSS1M6CisgRmV0Y2hlcyBhIHdvcmQgZnJvbSBlbXVsYXRvciBtZW1vcnkgdXNpbmcgYW4gYWJzb2x1dGUgYWRkcmVzcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBtZW1fYWNjZXNzX3dvcmQoaW50IGFkZHIpCisrdTE2CisrbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKQorIHsKKy1EQigJaWYgKENIRUNLX01FTV9BQ0NFU1MoKSkKKy0JICB4ODZlbXVfY2hlY2tfbWVtX2FjY2VzcyhhZGRyKTspCistCXJldHVybiAoKnN5c19yZHcpKGFkZHIpOworKyAgICBEQihpZiAoQ0hFQ0tfTUVNX0FDQ0VTUygpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfbWVtX2FjY2VzcyhhZGRyKTspCisrICAgICAgICByZXR1cm4gKCpzeXNfcmR3KSAoYWRkcik7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjU5OCwxMiArMjczNywxMyBAQCBQdXNoZXMgYSB3b3JkIG9udG8gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgcHVzaF93b3JkKHUxNiB3KQorK3ZvaWQKKytwdXNoX3dvcmQodTE2IHcpCisgeworLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JTS54ODYuUl9TUCAtPSAyOworLQkoKnN5c193cncpKCgodTMyKU0ueDg2LlJfU1MgPDwgNCkgICsgTS54ODYuUl9TUCwgdyk7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIE0ueDg2LlJfU1AgLT0gMjsKKysgICAgKCpzeXNfd3J3KSAoKCh1MzIpIE0ueDg2LlJfU1MgPDwgNCkgKyBNLng4Ni5SX1NQLCB3KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjEyLDEyICsyNzUyLDEzIEBAIFB1c2hlcyBhIGxvbmcgb250byB0aGUgc3RhY2suCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzLCBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBwdXNoX2xvbmcodTMyIHcpCisrdm9pZAorK3B1c2hfbG9uZyh1MzIgdykKKyB7CistREIoCWlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKy0JICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorLQlNLng4Ni5SX1NQIC09IDQ7CistCSgqc3lzX3dybCkoKCh1MzIpTS54ODYuUl9TUyA8PCA0KSAgKyBNLng4Ni5SX1NQLCB3KTsKKysgICAgREIoaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorKyAgICAgICAgTS54ODYuUl9TUCAtPSA0OworKyAgICAoKnN5c193cmwpICgoKHUzMikgTS54ODYuUl9TUyA8PCA0KSArIE0ueDg2LlJfU1AsIHcpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI2MjYsMTUgKzI3NjcsMTYgQEAgUG9wcyBhIHdvcmQgZnJvbSB0aGUgc3RhY2suCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzLCBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHBvcF93b3JkKHZvaWQpCisrdTE2CisrcG9wX3dvcmQodm9pZCkKKyB7CistCXJlZ2lzdGVyIHUxNiByZXM7CisrICAgIHJlZ2lzdGVyIHUxNiByZXM7CisgCistREIoCWlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKy0JICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorLQlyZXMgPSAoKnN5c19yZHcpKCgodTMyKU0ueDg2LlJfU1MgPDwgNCkgICsgTS54ODYuUl9TUCk7CistCU0ueDg2LlJfU1AgKz0gMjsKKy0JcmV0dXJuIHJlczsKKysgICAgREIoaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorKyAgICAgICAgcmVzID0gKCpzeXNfcmR3KSAoKCh1MzIpIE0ueDg2LlJfU1MgPDwgNCkgKyBNLng4Ni5SX1NQKTsKKysgICAgTS54ODYuUl9TUCArPSAyOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI2NDMsMTQgKzI3ODUsMTUgQEAgUG9wcyBhIGxvbmcgZnJvbSB0aGUgc3RhY2suCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzLCBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHBvcF9sb25nKHZvaWQpCisrdTMyCisrcG9wX2xvbmcodm9pZCkKKyB7CisgICAgIHJlZ2lzdGVyIHUzMiByZXM7CisgCistREIoCWlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKy0JICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorLQlyZXMgPSAoKnN5c19yZGwpKCgodTMyKU0ueDg2LlJfU1MgPDwgNCkgICsgTS54ODYuUl9TUCk7CistCU0ueDg2LlJfU1AgKz0gNDsKKysgICAgREIoaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorKyAgICAgICAgcmVzID0gKCpzeXNfcmRsKSAoKCh1MzIpIE0ueDg2LlJfU1MgPDwgNCkgKyBNLng4Ni5SX1NQKTsKKysgICAgTS54ODYuUl9TUCArPSA0OworICAgICByZXR1cm4gcmVzOworIH0KKyAKK0BAIC0yNjU4LDQ1ICsyODAxLDU5IEBAIERCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisgUkVNQVJLUzoKKyBDUFVJRCB0YWtlcyBFQVgvRUNYIGFzIGlucHV0cywgd3JpdGVzIEVBWC9FQlgvRUNYL0VEWCBhcyBvdXRwdXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgY3B1aWQgKHZvaWQpCisteworLQl1MzIgZmVhdHVyZSA9IE0ueDg2LlJfRUFYOworLQorLQlzd2l0Y2ggKGZlYXR1cmUpIHsKKy0JY2FzZSAwOgorLQkJLyogUmVnYXJkbGVzcyBpZiB3ZSBoYXZlIHJlYWwgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSwgdGhlIGVtdWxhdG9yCistCQkgKiB3aWxsIG9ubHkgc3VwcG9ydCB1cHRvIGZlYXR1cmUgMSwgd2hpY2ggd2Ugc2V0IGluIHJlZ2lzdGVyIEVBWC4KKy0JCSAqIFJlZ2lzdGVycyBFQlg6RURYOkVDWCBjb250YWluIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBDUFUuCistCQkgKi8KKy0JCU0ueDg2LlJfRUFYID0gMTsKKy0JCS8qIEVCWDpFRFg6RUNYID0gIkdlbnVpbmVJbnRlbCIgKi8KKy0JCU0ueDg2LlJfRUJYID0gMHg3NTZlNjU0NzsKKy0JCU0ueDg2LlJfRURYID0gMHg0OTY1NmU2OTsKKy0JCU0ueDg2LlJfRUNYID0gMHg2YzY1NzQ2ZTsKKy0JCWJyZWFrOworLQljYXNlIDE6CistCQkvKiBJZiB3ZSBkb24ndCBoYXZlIHg4NiBjb21wYXRpYmxlIGhhcmR3YXJlLCB3ZSByZXR1cm4gdmFsdWVzIGZyb20gYW4KKy0JCSAqIEludGVsIDQ4NmR4NDsgd2hpY2ggd2FzIG9uZSBvZiB0aGUgZmlyc3QgcHJvY2Vzc29ycyB0byBoYXZlIENQVUlELgorLQkJICovCistCQlNLng4Ni5SX0VBWCA9IDB4MDAwMDA0ODA7CistCQlNLng4Ni5SX0VCWCA9IDB4MDAwMDAwMDA7CistCQlNLng4Ni5SX0VDWCA9IDB4MDAwMDAwMDA7CistCQlNLng4Ni5SX0VEWCA9IDB4MDAwMDAwMDI7CS8qIFZNRSAqLworLQkJLyogSW4gdGhlIGNhc2UgdGhhdCB3ZSBoYXZlIGhhcmR3YXJlIENQVUlEIGluc3RydWN0aW9uLCB3ZSBtYWtlIHN1cmUKKy0JCSAqIHRoYXQgdGhlIGZlYXR1cmVzIHJlcG9ydGVkIGFyZSBsaW1pdGVkIHRvIFRTQyBhbmQgVk1FLgorLQkJICovCistCQlNLng4Ni5SX0VEWCAmPSAweDAwMDAwMDEyOworLQkJYnJlYWs7CistCWRlZmF1bHQ6CistCQkvKiBGaW5hbGx5LCB3ZSBkb24ndCBzdXBwb3J0IGFueSBhZGRpdGlvbmFsIGZlYXR1cmVzLiAgTW9zdCBDUFVzCistCQkgKiByZXR1cm4gYWxsIHplcm9zIHdoZW4gcXVlcmllZCBmb3IgaW52YWxpZCBvciB1bnN1cHBvcnRlZCBmZWF0dXJlCistCQkgKiBudW1iZXJzLgorLQkJICovCistCQlNLng4Ni5SX0VBWCA9IDA7CistCQlNLng4Ni5SX0VCWCA9IDA7CistCQlNLng4Ni5SX0VDWCA9IDA7CistCQlNLng4Ni5SX0VEWCA9IDA7CistCQlicmVhazsKKy0JfQorLX0KKyt2b2lkCisrY3B1aWQodm9pZCkKKyt7CisrICAgIHUzMiBmZWF0dXJlID0gTS54ODYuUl9FQVg7CisgCisrI2lmZGVmIFg4NkVNVV9IQVNfSFdfQ1BVSUQKKysgICAgLyogSWYgdGhlIHBsYXRmb3JtIGFsbG93cyBpdCwgd2Ugd2lsbCBiYXNlIG91ciB2YWx1ZXMgb24gdGhlIHJlYWwKKysgICAgICogcmVzdWx0cyBmcm9tIHRoZSBDUFVJRCBpbnN0cnVjdGlvbi4gIFdlIGxpbWl0IHN1cHBvcnQgdG8gdGhlCisrICAgICAqIGZpcnN0IHR3byBmZWF0dXJlcywgYW5kIHRoZSByZXN1bHRzIG9mIHRob3NlIGFyZSBzYW5pdGl6ZWQuCisrICAgICAqLworKyAgICBpZiAoZmVhdHVyZSA8PSAxKQorKyAgICAgICAgaHdfY3B1aWQoJk0ueDg2LlJfRUFYLCAmTS54ODYuUl9FQlgsICZNLng4Ni5SX0VDWCwgJk0ueDg2LlJfRURYKTsKKysjZW5kaWYKKysKKysgICAgc3dpdGNoIChmZWF0dXJlKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIC8qIFJlZ2FyZGxlc3MgaWYgd2UgaGF2ZSByZWFsIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUsIHRoZSBlbXVsYXRvcgorKyAgICAgICAgICogd2lsbCBvbmx5IHN1cHBvcnQgdXB0byBmZWF0dXJlIDEsIHdoaWNoIHdlIHNldCBpbiByZWdpc3RlciBFQVguCisrICAgICAgICAgKiBSZWdpc3RlcnMgRUJYOkVEWDpFQ1ggY29udGFpbiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgQ1BVLgorKyAgICAgICAgICovCisrICAgICAgICBNLng4Ni5SX0VBWCA9IDE7CisrI2lmbmRlZiBYODZFTVVfSEFTX0hXX0NQVUlECisrICAgICAgICAvKiBFQlg6RURYOkVDWCA9ICJHZW51aW5lSW50ZWwiICovCisrICAgICAgICBNLng4Ni5SX0VCWCA9IDB4NzU2ZTY1NDc7CisrICAgICAgICBNLng4Ni5SX0VEWCA9IDB4NDk2NTZlNjk7CisrICAgICAgICBNLng4Ni5SX0VDWCA9IDB4NmM2NTc0NmU7CisrI2VuZGlmCisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAxOgorKyNpZm5kZWYgWDg2RU1VX0hBU19IV19DUFVJRAorKyAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSB4ODYgY29tcGF0aWJsZSBoYXJkd2FyZSwgd2UgcmV0dXJuIHZhbHVlcyBmcm9tIGFuCisrICAgICAgICAgKiBJbnRlbCA0ODZkeDQ7IHdoaWNoIHdhcyBvbmUgb2YgdGhlIGZpcnN0IHByb2Nlc3NvcnMgdG8gaGF2ZSBDUFVJRC4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAweDAwMDAwNDgwOworKyAgICAgICAgTS54ODYuUl9FQlggPSAweDAwMDAwMDAwOworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAweDAwMDAwMDAwOworKyAgICAgICAgTS54ODYuUl9FRFggPSAweDAwMDAwMDAyOyAgICAgICAvKiBWTUUgKi8KKysjZWxzZQorKyAgICAgICAgLyogSW4gdGhlIGNhc2UgdGhhdCB3ZSBoYXZlIGhhcmR3YXJlIENQVUlEIGluc3RydWN0aW9uLCB3ZSBtYWtlIHN1cmUKKysgICAgICAgICAqIHRoYXQgdGhlIGZlYXR1cmVzIHJlcG9ydGVkIGFyZSBsaW1pdGVkIHRvIFRTQyBhbmQgVk1FLgorKyAgICAgICAgICovCisrICAgICAgICBNLng4Ni5SX0VEWCAmPSAweDAwMDAwMDEyOworKyNlbmRpZgorKyAgICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgICAvKiBGaW5hbGx5LCB3ZSBkb24ndCBzdXBwb3J0IGFueSBhZGRpdGlvbmFsIGZlYXR1cmVzLiAgTW9zdCBDUFVzCisrICAgICAgICAgKiByZXR1cm4gYWxsIHplcm9zIHdoZW4gcXVlcmllZCBmb3IgaW52YWxpZCBvciB1bnN1cHBvcnRlZCBmZWF0dXJlCisrICAgICAgICAgKiBudW1iZXJzLgorKyAgICAgICAgICovCisrICAgICAgICBNLng4Ni5SX0VBWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0VCWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0VDWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0VEWCA9IDA7CisrICAgICAgICBicmVhazsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9zeXMuYyBiL2xpYnMveDg2ZW11L3N5cy5jCitpbmRleCA0ZDkwZWEzLi5jNTE0ZGRlIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvc3lzLmMKKysrKyBiL2xpYnMveDg2ZW11L3N5cy5jCitAQCAtNDcsMjIzICs0NywxMzMgQEAKKyAjaW5jbHVkZSAieDg2ZW11L3ByaW1fb3BzLmgiCisgI2lmbmRlZiBOT19TWVNfSEVBREVSUworICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysjZW5kaWYKKyAKKy1YODZFTVVfc3lzRW52CQlfWDg2RU1VX2VudjsJCS8qIEdsb2JhbCBlbXVsYXRvciBtYWNoaW5lIHN0YXRlICovCistWDg2RU1VX2ludHJGdW5jcwlfWDg2RU1VX2ludHJUYWJbMjU2XTsKKysjaWZkZWYgX19HTlVDX18KKyAKKy0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLSNpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2FscGhhKQorLS8qIHRvIGNvcGUgd2l0aCBicm9rZW4gZWdjcy0xLjEuMiA6LSgoKCggKi8KKy0KKy0jZGVmaW5lIEFMUEhBX1VBTE9BRFMKKy0vKgorLSAqIGlubGluZSBmdW5jdGlvbnMgdG8gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzCistICogZnJvbSBsaW51eC9pbmNsdWRlL2FzbS1hbHBoYS91bmFsaWduZWQuaAorLSAqLworLQorLS8qCistICogRUdDUyAxLjEga25vd3MgYWJvdXQgYXJiaXRyYXJ5IHVuYWxpZ25lZCBsb2Fkcy4gIERlZmluZSBzb21lCistICogcGFja2VkIHN0cnVjdHVyZXMgdG8gdGFsayBhYm91dCBzdWNoIHRoaW5ncyB3aXRoLgorLSAqLworLQorLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy1zdHJ1Y3QgX191bmFfdTY0IHsgdW5zaWduZWQgbG9uZyAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTMyIHsgdW5zaWduZWQgaW50ICAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTE2IHsgdW5zaWduZWQgc2hvcnQgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy0jZW5kaWYKKysvKiBEZWZpbmUgc29tZSBwYWNrZWQgc3RydWN0dXJlcyB0byB1c2Ugd2l0aCB1bmFsaWduZWQgYWNjZXNzZXMgKi8KKysKKytzdHJ1Y3QgX191bmFfdTY0IHsKKysgICAgdTY0IHggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworK307Cisrc3RydWN0IF9fdW5hX3UzMiB7CisrICAgIHUzMiB4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyt9OworK3N0cnVjdCBfX3VuYV91MTYgeworKyAgICB1MTYgeCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisrfTsKKysKKysvKiBFbGVtZW50YWwgdW5hbGlnbmVkIGxvYWRzICovCisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsZHFfdSh1bnNpZ25lZCBsb25nICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHU2NAorK2xkcV91KHU2NCAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0JY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKikgcjExOworLQlyZXR1cm4gcHRyLT54OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjI7CistCV9fYXNtX18oImxkcV91ICUwLCUzXG5cdCIKKy0JCSJsZHFfdSAlMSwlNFxuXHQiCistCQkiZXh0cWwgJTAsJTIsJTBcblx0IgorLQkJImV4dHFoICUxLCUyLCUxIgorLQkJOiI9JnIiIChyMSksICI9JnIiIChyMikKKy0JCToiciIgKHIxMSksCistCQkgIm0iICgqcjExKSwKKy0JCSAibSIgKCooY29uc3QgdW5zaWduZWQgbG9uZyAqKSg3KyhjaGFyICopIHIxMSkpKTsKKy0JcmV0dXJuIHIxIHwgcjI7CistI2VuZGlmCisrICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICopIHA7CisrCisrICAgIHJldHVybiBwdHItPng7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbGRsX3UodW5zaWduZWQgaW50ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUzMgorK2xkbF91KHUzMiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0JY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKikgcjExOworLQlyZXR1cm4gcHRyLT54OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjI7CistCV9fYXNtX18oImxkcV91ICUwLCUzXG5cdCIKKy0JCSJsZHFfdSAlMSwlNFxuXHQiCistCQkiZXh0bGwgJTAsJTIsJTBcblx0IgorLQkJImV4dGxoICUxLCUyLCUxIgorLQkJOiI9JnIiIChyMSksICI9JnIiIChyMikKKy0JCToiciIgKHIxMSksCistCQkgIm0iICgqcjExKSwKKy0JCSAibSIgKCooY29uc3QgdW5zaWduZWQgbG9uZyAqKSgzKyhjaGFyICopIHIxMSkpKTsKKy0JcmV0dXJuIHIxIHwgcjI7CistI2VuZGlmCisrICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHA7CisrCisrICAgIHJldHVybiBwdHItPng7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbGR3X3UodW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTE2CisrbGR3X3UodTE2ICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQljb25zdCBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqKSByMTE7CistCXJldHVybiBwdHItPng7CistI2Vsc2UKKy0JdW5zaWduZWQgbG9uZyByMSxyMjsKKy0JX19hc21fXygibGRxX3UgJTAsJTNcblx0IgorLQkJImxkcV91ICUxLCU0XG5cdCIKKy0JCSJleHR3bCAlMCwlMiwlMFxuXHQiCistCQkiZXh0d2ggJTEsJTIsJTEiCistCQk6Ij0mciIgKHIxKSwgIj0mciIgKHIyKQorLQkJOiJyIiAocjExKSwKKy0JCSAibSIgKCpyMTEpLAorLQkJICJtIiAoKihjb25zdCB1bnNpZ25lZCBsb25nICopKDErKGNoYXIgKikgcjExKSkpOworLQlyZXR1cm4gcjEgfCByMjsKKy0jZW5kaWYKKysgICAgY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKikgcDsKKysKKysgICAgcmV0dXJuIHB0ci0+eDsKKyB9CisgCistLyoKKy0gKiBFbGVtZW50YWwgdW5hbGlnbmVkIHN0b3JlcyAKKy0gKi8KKysvKiBFbGVtZW50YWwgdW5hbGlnbmVkIHN0b3JlcyAqLworIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3RxX3UodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgbG9uZyAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RxX3UodTY0IHZhbCwgdTY0ICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQlzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistCXB0ci0+eCA9IHI1OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjIscjMscjQ7CistCistCV9fYXNtX18oImxkcV91ICUzLCUxXG5cdCIKKy0JCSJsZHFfdSAlMiwlMFxuXHQiCistCQkiaW5zcWggJTYsJTcsJTVcblx0IgorLQkJImluc3FsICU2LCU3LCU0XG5cdCIKKy0JCSJtc2txaCAlMywlNywlM1xuXHQiCistCQkibXNrcWwgJTIsJTcsJTJcblx0IgorLQkJImJpcyAlMywlNSwlM1xuXHQiCistCQkiYmlzICUyLCU0LCUyXG5cdCIKKy0JCSJzdHFfdSAlMywlMVxuXHQiCistCQkic3RxX3UgJTIsJTAiCistCQk6Ij1tIiAoKnIxMSksCistCQkgIj1tIiAoKih1bnNpZ25lZCBsb25nICopKDcrKGNoYXIgKikgcjExKSksCistCQkgIj0mciIgKHIxKSwgIj0mciIgKHIyKSwgIj0mciIgKHIzKSwgIj0mciIgKHI0KQorLQkJOiJyIiAocjUpLCAiciIgKHIxMSkpOworLSNlbmRpZgorKyAgICBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoc3RydWN0IF9fdW5hX3U2NCAqKSBwOworKworKyAgICBwdHItPnggPSB2YWw7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3RsX3UodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgaW50ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKKytzdGxfdSh1MzIgdmFsLCB1MzIgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCXN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0JcHRyLT54ID0gcjU7CistI2Vsc2UKKy0JdW5zaWduZWQgbG9uZyByMSxyMixyMyxyNDsKKy0KKy0JX19hc21fXygibGRxX3UgJTMsJTFcblx0IgorLQkJImxkcV91ICUyLCUwXG5cdCIKKy0JCSJpbnNsaCAlNiwlNywlNVxuXHQiCistCQkiaW5zbGwgJTYsJTcsJTRcblx0IgorLQkJIm1za2xoICUzLCU3LCUzXG5cdCIKKy0JCSJtc2tsbCAlMiwlNywlMlxuXHQiCistCQkiYmlzICUzLCU1LCUzXG5cdCIKKy0JCSJiaXMgJTIsJTQsJTJcblx0IgorLQkJInN0cV91ICUzLCUxXG5cdCIKKy0JCSJzdHFfdSAlMiwlMCIKKy0JCToiPW0iICgqcjExKSwKKy0JCSAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikoMysoY2hhciAqKSByMTEpKSwKKy0JCSAiPSZyIiAocjEpLCAiPSZyIiAocjIpLCAiPSZyIiAocjMpLCAiPSZyIiAocjQpCistCQk6InIiIChyNSksICJyIiAocjExKSk7CistI2VuZGlmCisrICAgIHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTMyICopIHA7CisrCisrICAgIHB0ci0+eCA9IHZhbDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdm9pZCBzdHdfdSh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBzaG9ydCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3R3X3UodTE2IHZhbCwgdTE2ICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQlzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoc3RydWN0IF9fdW5hX3UxNiAqKSByMTE7CistCXB0ci0+eCA9IHI1OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjIscjMscjQ7CistCistCV9fYXNtX18oImxkcV91ICUzLCUxXG5cdCIKKy0JCSJsZHFfdSAlMiwlMFxuXHQiCistCQkiaW5zd2ggJTYsJTcsJTVcblx0IgorLQkJImluc3dsICU2LCU3LCU0XG5cdCIKKy0JCSJtc2t3aCAlMywlNywlM1xuXHQiCistCQkibXNrd2wgJTIsJTcsJTJcblx0IgorLQkJImJpcyAlMywlNSwlM1xuXHQiCistCQkiYmlzICUyLCU0LCUyXG5cdCIKKy0JCSJzdHFfdSAlMywlMVxuXHQiCistCQkic3RxX3UgJTIsJTAiCistCQk6Ij1tIiAoKnIxMSksCistCQkgIj1tIiAoKih1bnNpZ25lZCBsb25nICopKDErKGNoYXIgKikgcjExKSksCistCQkgIj0mciIgKHIxKSwgIj0mciIgKHIyKSwgIj0mciIgKHIzKSwgIj0mciIgKHI0KQorLQkJOiJyIiAocjUpLCAiciIgKHIxMSkpOworLSNlbmRpZgorKyAgICBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoc3RydWN0IF9fdW5hX3UxNiAqKSBwOworKworKyAgICBwdHItPnggPSB2YWw7CisgfQorKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIV9fR05VQ19fICovCisgCistI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA8IDMpKSAmJiBcCistICAgICAgICAgICAgIChkZWZpbmVkIChfX2lhNjRfXykgfHwgZGVmaW5lZCAoaWE2NF9fKSkKKy0jZGVmaW5lIElBNjRfVUFMT0FEUworLS8qCistICogRUdDUyAxLjEga25vd3MgYWJvdXQgYXJiaXRyYXJ5IHVuYWxpZ25lZCBsb2Fkcy4gIERlZmluZSBzb21lCistICogcGFja2VkIHN0cnVjdHVyZXMgdG8gdGFsayBhYm91dCBzdWNoIHRoaW5ncyB3aXRoLgorLSAqLworLXN0cnVjdCBfX3VuYV91NjQgeyB1bnNpZ25lZCBsb25nICB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OworLXN0cnVjdCBfX3VuYV91MzIgeyB1bnNpZ25lZCBpbnQgICB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OworLXN0cnVjdCBfX3VuYV91MTYgeyB1bnNpZ25lZCBzaG9ydCB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OworLQorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKKy1fX3VsZHEgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTY0CisrbGRxX3UodTY0ICogcCkKKyB7CistICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICopIHIxMTsKKy0gICAgcmV0dXJuIHB0ci0+eDsKKysgICAgdTY0IHJldDsKKysKKysgICAgbWVtbW92ZSgmcmV0LCBwLCBzaXplb2YoKnApKTsKKysgICAgcmV0dXJuIHJldDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworLXVsZGwgKGNvbnN0IHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1MzIKKytsZGxfdSh1MzIgKiBwKQorIHsKKy0gICAgY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKikgcjExOworLSAgICByZXR1cm4gcHRyLT54OworKyAgICB1MzIgcmV0OworKworKyAgICBtZW1tb3ZlKCZyZXQsIHAsIHNpemVvZigqcCkpOworKyAgICByZXR1cm4gcmV0OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCistdWxkdyAoY29uc3QgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTE2CisrbGR3X3UodTE2ICogcCkKKyB7CistICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICopIHIxMTsKKy0gICAgcmV0dXJuIHB0ci0+eDsKKysgICAgdTE2IHJldDsKKysKKysgICAgbWVtbW92ZSgmcmV0LCBwLCBzaXplb2YoKnApKTsKKysgICAgcmV0dXJuIHJldDsKKyB9CisgCisgc3RhdGljIF9faW5saW5lX18gdm9pZAorLXVzdHEgKHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgKiByMTEpCisrc3RxX3UodTY0IHZhbCwgdTY0ICogcCkKKyB7CistICAgIHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTY0ICopIHIxMTsKKy0gICAgcHRyLT54ID0gcjU7CisrICAgIHU2NCB0bXAgPSB2YWw7CisrCisrICAgIG1lbW1vdmUocCwgJnRtcCwgc2l6ZW9mKCpwKSk7CisgfQorIAorIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKKy11c3RsICh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBpbnQgKiByMTEpCisrc3RsX3UodTMyIHZhbCwgdTMyICogcCkKKyB7CistICAgIHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0gICAgcHRyLT54ID0gcjU7CisrICAgIHUzMiB0bXAgPSB2YWw7CisrCisrICAgIG1lbW1vdmUocCwgJnRtcCwgc2l6ZW9mKCpwKSk7CisgfQorIAorIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKKy11c3R3ICh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBzaG9ydCAqIHIxMSkKKytzdHdfdSh1MTYgdmFsLCB1MTYgKiBwKQorIHsKKy0gICAgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLSAgICBwdHItPnggPSByNTsKKysgICAgdTE2IHRtcCA9IHZhbDsKKysKKysgICAgbWVtbW92ZShwLCAmdG1wLCBzaXplb2YoKnApKTsKKyB9CisgCistI2VuZGlmCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX0dOVUNfXyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrWDg2RU1VX3N5c0VudiBfWDg2RU1VX2VudjsgICAgICAvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZSAqLworK1g4NkVNVV9pbnRyRnVuY3MgX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFBBUkFNRVRFUlM6CitAQCAtMjc1LDE5ICsxODUsMjAgQEAgQnl0ZSB2YWx1ZSByZWFkIGZyb20gZW11bGF0b3IgbWVtb3J5LgorIFJFTUFSS1M6CisgUmVhZHMgYSBieXRlIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBYODZBUEkgcmRiKAorLSAgICB1MzIgYWRkcikKKyt1OCBYODZBUEkKKytyZGIodTMyIGFkZHIpCisgeworLQl1OCB2YWw7CistCistCWlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKy0JCURCKHByaW50aygibWVtX3JlYWQ6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorLQl2YWwgPSAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIpOworLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDEgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0JcmV0dXJuIHZhbDsKKysgICAgdTggdmFsOworKworKyAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAxKSB7CisrICAgICAgICBEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgKQorKyAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgIH0KKysgICAgdmFsID0gKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIpOworKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggMSAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgcmV0dXJuIHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zMDAsMzIgKzIxMSwyNyBAQCBXb3JkIHZhbHVlIHJlYWQgZnJvbSBlbXVsYXRvciBtZW1vcnkuCisgUkVNQVJLUzoKKyBSZWFkcyBhIHdvcmQgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IFg4NkFQSSByZHcoCistCXUzMiBhZGRyKQorK3UxNiBYODZBUEkKKytyZHcodTMyIGFkZHIpCisgeworLQl1MTYgdmFsID0gMDsKKysgICAgdTE2IHZhbCA9IDA7CisgCistCWlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDIpIHsKKy0JCURCKHByaW50aygibWVtX3JlYWQ6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorKyAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CisrICAgICAgICBEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgKQorKyAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgIH0KKyAjaWZkZWYgX19CSUdfRU5ESUFOX18KKy0JaWYgKGFkZHIgJiAweDEpIHsKKy0JCXZhbCA9ICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIpIHwKKy0JCQkgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA8PCA4KSk7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkJdmFsID0gbGR3X3UoKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2VsaWYgIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgIHZhbCA9IHVsZHcoKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2Vsc2UKKy0JCXZhbCA9ICoodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpOworKyAgICBpZiAoYWRkciAmIDB4MSkgeworKyAgICAgICAgdmFsID0gKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkpOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKy0JCURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDIgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0gICAgcmV0dXJuIHZhbDsKKysgICAgICAgIHZhbCA9IGxkd191KCh1MTYgKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCAyIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICByZXR1cm4gdmFsOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTMzNywzNCArMjQzLDI5IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIGVtdWxhdG9yIG1lbW9yeS4KKyBSRU1BUktTOgorIFJlYWRzIGEgbG9uZyB2YWx1ZSBmcm9tIHRoZSBlbXVsYXRvciBtZW1vcnkuIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIFg4NkFQSSByZGwoCistCXUzMiBhZGRyKQorK3UzMiBYODZBUEkKKytyZGwodTMyIGFkZHIpCisgeworLQl1MzIgdmFsID0gMDsKKysgICAgdTMyIHZhbCA9IDA7CisgCistCWlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDQpIHsKKy0JCURCKHByaW50aygibWVtX3JlYWQ6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorKyAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSA0KSB7CisrICAgICAgICBEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgKQorKyAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgIH0KKyAjaWZkZWYgX19CSUdfRU5ESUFOX18KKy0JaWYgKGFkZHIgJiAweDMpIHsKKy0JCXZhbCA9ICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSB8CistCQkJICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDIpIDw8IDE2KSB8CistCQkJICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPDwgMjQpKTsKKy0JCX0KKy0JZWxzZQorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEFMUEhBX1VBTE9BRFMpCistCQl2YWwgPSBsZGxfdSgodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxpZiAgZGVmaW5lZChJQTY0X1VBTE9BRFMpCistICAgICAgICB2YWwgPSB1bGRsKCh1MzIqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCQl2YWwgPSAqKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgaWYgKGFkZHIgJiAweDMpIHsKKysgICAgICAgIHZhbCA9ICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDApIHwKKysgICAgICAgICAgICAgICAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA8PCA4KSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPDwgMTYpIHwKKysgICAgICAgICAgICAgICAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAzKSA8PCAyNCkpOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCA0IC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistCXJldHVybiB2YWw7CisrICAgICAgICB2YWwgPSBsZGxfdSgodTMyICopIChNLm1lbV9iYXNlICsgYWRkcikpOworKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggNCAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgcmV0dXJuIHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zNzUsMTcgKzI3NiwxNyBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIGJ5dGUgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZBUEkgd3JiKAorLQl1MzIgYWRkciwKKy0JdTggdmFsKQorK3ZvaWQgWDg2QVBJCisrd3JiKHUzMiBhZGRyLCB1OCB2YWwpCisgeworLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDEgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0gICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMSkgeworLQkJREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorLQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggMSA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMSkgeworKyAgICAgICAgICAgIERCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgICAgICkKKysgICAgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKysgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM5NiwzMCArMjk3LDI0IEBAIHZhbAkJLSBWYWx1ZSB0byBzdG9yZQorIFJFTUFSS1M6CisgV3JpdGVzIGEgd29yZCB2YWx1ZSB0byBlbXVsYXRvciBtZW1vcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkFQSSB3cncoCistCXUzMiBhZGRyLAorLQl1MTYgdmFsKQorK3ZvaWQgWDg2QVBJCisrd3J3KHUzMiBhZGRyLCB1MTYgdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAyIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCistCWlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDIpIHsKKy0JCURCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDIgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDIpIHsKKysgICAgICAgICAgICBEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICAgICApCisrICAgICAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgICAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgxKSB7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gMCkgJiAweGZmOworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+IDgpICYgMHhmZjsKKy0JCX0KKy0JZWxzZQorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEFMUEhBX1VBTE9BRFMpCistCSBzdHdfdSh2YWwsKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2VsaWYgZGVmaW5lZChJQTY0X1VBTE9BRFMpCistICAgICB1c3R3KHZhbCwodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxzZQorLQkgKih1MTYqKShNLm1lbV9iYXNlICsgYWRkcikgPSB2YWw7CisrICAgIGlmIChhZGRyICYgMHgxKSB7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAwKSAmIDB4ZmY7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisrICAgIH0KKysgICAgZWxzZQorICNlbmRpZgorKyAgICAgICAgc3R3X3UodmFsLCAodTE2ICopIChNLm1lbV9iYXNlICsgYWRkcikpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQzMCwzMiArMzI1LDI2IEBAIHZhbAkJLSBWYWx1ZSB0byBzdG9yZQorIFJFTUFSS1M6CisgV3JpdGVzIGEgbG9uZyB2YWx1ZSB0byBlbXVsYXRvciBtZW1vcnkuIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZBUEkgd3JsKAorLQl1MzIgYWRkciwKKy0JdTMyIHZhbCkKKyt2b2lkIFg4NkFQSQorK3dybCh1MzIgYWRkciwgdTMyIHZhbCkKKyB7CistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggNCA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSA0KSB7CistCQlEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCA0IDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSA0KSB7CisrICAgICAgICAgICAgREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICAgICAgfQorICNpZmRlZiBfX0JJR19FTkRJQU5fXworLQlpZiAoYWRkciAmIDB4MSkgeworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+ICAwKSAmIDB4ZmY7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gIDgpICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDIpID0gKHZhbCA+PiAxNikgJiAweGZmOworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPSAodmFsID4+IDI0KSAmIDB4ZmY7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkgc3RsX3UodmFsLCh1MzIqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgdXN0bCh2YWwsKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2Vsc2UKKy0JICoodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworKyAgICBpZiAoYWRkciAmIDB4MSkgeworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gMCkgJiAweGZmOworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPSAodmFsID4+IDI0KSAmIDB4ZmY7CisrICAgIH0KKysgICAgZWxzZQorICNlbmRpZgorKyAgICAgICAgc3RsX3UodmFsLCAodTMyICopIChNLm1lbV9iYXNlICsgYWRkcikpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ2NiwxMiArMzU1LDEyIEBAIFJFVFVSTjoKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIGJ5dGUgcmVhZCBmdW5jdGlvbi4gRG9lc24ndCBwZXJmb3JtIHJlYWwgaW5iLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHU4IFg4NkFQSSBwX2luYigKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTggWDg2QVBJCisrcF9pbmIoWDg2RU1VX3Bpb0FkZHIgYWRkcikKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJpbmIgJSMwNHggXG4iLCBhZGRyKTspCistCXJldHVybiAwOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJpbmIgJSMwNHggXG4iLCBhZGRyKTspCisrICAgICAgICByZXR1cm4gMDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00ODIsMTIgKzM3MSwxMiBAQCBSRVRVUk46CisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyB3b3JkIHJlYWQgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIGludy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB1MTYgWDg2QVBJIHBfaW53KAorLQlYODZFTVVfcGlvQWRkciBhZGRyKQorK3N0YXRpYyB1MTYgWDg2QVBJCisrcF9pbncoWDg2RU1VX3Bpb0FkZHIgYWRkcikKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJpbncgJSMwNHggXG4iLCBhZGRyKTspCistCXJldHVybiAwOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJpbncgJSMwNHggXG4iLCBhZGRyKTspCisrICAgICAgICByZXR1cm4gMDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00OTgsMTIgKzM4NywxMiBAQCBSRVRVUk46CisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBsb25nIHJlYWQgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIGlubC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB1MzIgWDg2QVBJIHBfaW5sKAorLQlYODZFTVVfcGlvQWRkciBhZGRyKQorK3N0YXRpYyB1MzIgWDg2QVBJCisrcF9pbmwoWDg2RU1VX3Bpb0FkZHIgYWRkcikKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJpbmwgJSMwNHggXG4iLCBhZGRyKTspCistCXJldHVybiAwOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJpbmwgJSMwNHggXG4iLCBhZGRyKTspCisrICAgICAgICByZXR1cm4gMDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01MTMsMTMgKzQwMiwxMiBAQCB2YWwgICAgIC0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIGJ5dGUgd3JpdGUgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIG91dGIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCBYODZBUEkgcF9vdXRiKAorLQlYODZFTVVfcGlvQWRkciBhZGRyLAorLQl1OCB2YWwpCisrc3RhdGljIHZvaWQgWDg2QVBJCisrcF9vdXRiKFg4NkVNVV9waW9BZGRyIGFkZHIsIHU4IHZhbCkKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJvdXRiICUjMDJ4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCistICAgIHJldHVybjsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygib3V0YiAlIzAyeCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUyOSwxMyArNDE3LDEyIEBAIHZhbCAgICAgLSBWYWx1ZSB0byBzdG9yZQorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gd29yZCB3cml0ZSBmdW5jdGlvbi4gRG9lc24ndCBwZXJmb3JtIHJlYWwgb3V0dy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIFg4NkFQSSBwX291dHcoCistCVg4NkVNVV9waW9BZGRyIGFkZHIsCistCXUxNiB2YWwpCisrc3RhdGljIHZvaWQgWDg2QVBJCisrcF9vdXR3KFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygib3V0dyAlIzA0eCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorLQlyZXR1cm47CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoIm91dHcgJSMwNHggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKysgICAgICAgIHJldHVybjsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01NDUsMjkgKzQzMiwyOSBAQCB2YWwgICAgIC0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIDtvbmcgd3JpdGUgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIG91dGwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCBYODZBUEkgcF9vdXRsKAorLQlYODZFTVVfcGlvQWRkciBhZGRyLAorLQl1MzIgdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0bChYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoIm91dGwgJSMwOHggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKy0gICAgcmV0dXJuOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJvdXRsICUjMDh4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCisrICAgICAgICByZXR1cm47CisgfQorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistdTggIAkoWDg2QVBJUCBzeXNfcmRiKSh1MzIgYWRkcikgCQkJICAgICAgICAgICAgPSByZGI7CistdTE2IAkoWDg2QVBJUCBzeXNfcmR3KSh1MzIgYWRkcikgCQkJICAgICAgICAgICAgPSByZHc7CistdTMyIAkoWDg2QVBJUCBzeXNfcmRsKSh1MzIgYWRkcikgCQkJICAgICAgICAgICAgPSByZGw7Cistdm9pZCAJKFg4NkFQSVAgc3lzX3dyYikodTMyIGFkZHIsdTggdmFsKSAJCSAgICAgICAgICAgID0gd3JiOworLXZvaWQgCShYODZBUElQIHN5c193cncpKHUzMiBhZGRyLHUxNiB2YWwpIAkgICAgICAgICAgICA9IHdydzsKKy12b2lkIAkoWDg2QVBJUCBzeXNfd3JsKSh1MzIgYWRkcix1MzIgdmFsKSAJICAgICAgICAgICAgPSB3cmw7CistdTggIAkoWDg2QVBJUCBzeXNfaW5iKShYODZFTVVfcGlvQWRkciBhZGRyKQkgICAgICAgICAgICA9IHBfaW5iOworLXUxNiAJKFg4NkFQSVAgc3lzX2ludykoWDg2RU1VX3Bpb0FkZHIgYWRkcikJICAgICAgICAgICAgPSBwX2ludzsKKy11MzIgCShYODZBUElQIHN5c19pbmwpKFg4NkVNVV9waW9BZGRyIGFkZHIpICAgICAgICAgICAgICA9IHBfaW5sOworLXZvaWQgCShYODZBUElQIHN5c19vdXRiKShYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpIAk9IHBfb3V0YjsKKy12b2lkIAkoWDg2QVBJUCBzeXNfb3V0dykoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCkJPSBwX291dHc7Cistdm9pZCAJKFg4NkFQSVAgc3lzX291dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpCT0gcF9vdXRsOworK3U4KFg4NkFQSVAgc3lzX3JkYikgKHUzMiBhZGRyKSA9IHJkYjsKKyt1MTYoWDg2QVBJUCBzeXNfcmR3KSAodTMyIGFkZHIpID0gcmR3OworK3UzMihYODZBUElQIHN5c19yZGwpICh1MzIgYWRkcikgPSByZGw7Cisrdm9pZCAoWDg2QVBJUCBzeXNfd3JiKSAodTMyIGFkZHIsIHU4IHZhbCkgPSB3cmI7Cisrdm9pZCAoWDg2QVBJUCBzeXNfd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpID0gd3J3OworK3ZvaWQgKFg4NkFQSVAgc3lzX3dybCkgKHUzMiBhZGRyLCB1MzIgdmFsKSA9IHdybDsKKysKKyt1OChYODZBUElQIHN5c19pbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKSA9IHBfaW5iOworK3UxNihYODZBUElQIHN5c19pbncpIChYODZFTVVfcGlvQWRkciBhZGRyKSA9IHBfaW53OworK3UzMihYODZBUElQIHN5c19pbmwpIChYODZFTVVfcGlvQWRkciBhZGRyKSA9IHBfaW5sOworK3ZvaWQgKFg4NkFQSVAgc3lzX291dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpID0gcF9vdXRiOworK3ZvaWQgKFg4NkFQSVAgc3lzX291dHcpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKSA9IHBfb3V0dzsKKyt2b2lkIChYODZBUElQIHN5c19vdXRsKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCkgPSBwX291dGw7CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKK0BAIC01ODAsOCArNDY3LDggQEAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zIHdoaWNoIGFjY2VzcworIG1lbW9yeSBzcGFjZSwgYWxsb3dpbmcgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zCisgYW5kIGhvb2sgdGhlbSBvdXQgYXMgbmVjZXNzYXJ5IGZvciB0aGVpciBhcHBsaWNhdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3NldHVwTWVtRnVuY3MoCistCVg4NkVNVV9tZW1GdW5jcyAqZnVuY3MpCisrdm9pZAorK1g4NkVNVV9zZXR1cE1lbUZ1bmNzKFg4NkVNVV9tZW1GdW5jcyAqIGZ1bmNzKQorIHsKKyAgICAgc3lzX3JkYiA9IGZ1bmNzLT5yZGI7CisgICAgIHN5c19yZHcgPSBmdW5jcy0+cmR3OworQEAgLTYwMCw4ICs0ODcsOCBAQCBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBwb2ludGVycyB0byBmdW5jdGlvbnMgd2hpY2ggYWNjZXNzCisgSS9PIHNwYWNlLCBhbGxvd2luZyB0aGUgdXNlciBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSB0aGVzZSBmdW5jdGlvbnMKKyBhbmQgaG9vayB0aGVtIG91dCBhcyBuZWNlc3NhcnkgZm9yIHRoZWlyIGFwcGxpY2F0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfc2V0dXBQaW9GdW5jcygKKy0JWDg2RU1VX3Bpb0Z1bmNzICpmdW5jcykKKyt2b2lkCisrWDg2RU1VX3NldHVwUGlvRnVuY3MoWDg2RU1VX3Bpb0Z1bmNzICogZnVuY3MpCisgeworICAgICBzeXNfaW5iID0gZnVuY3MtPmluYjsKKyAgICAgc3lzX2ludyA9IGZ1bmNzLT5pbnc7CitAQCAtNjI0LDE3ICs1MTEsMTcgQEAgaW4gdGhlIGVtdWxhdG9yIHZpYSB0aGUgaW50ZXJydXB0IHZlY3RvciB0YWJsZS4gVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uCisgdG8gZ2V0IGNvbnRyb2wgd2hlbiB0aGUgY29kZSBiZWluZyBlbXVsYXRlZCBleGVjdXRlcyBzcGVjaWZpYyBzb2Z0d2FyZQorIGludGVycnVwdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9zZXR1cEludHJGdW5jcygKKy0JWDg2RU1VX2ludHJGdW5jcyBmdW5jc1tdKQorK3ZvaWQKKytYODZFTVVfc2V0dXBJbnRyRnVuY3MoWDg2RU1VX2ludHJGdW5jcyBmdW5jc1tdKQorIHsKKyAgICAgaW50IGk7CistICAgIAorLQlmb3IgKGk9MDsgaSA8IDI1NjsgaSsrKQorLQkJX1g4NkVNVV9pbnRyVGFiW2ldID0gTlVMTDsKKy0JaWYgKGZ1bmNzKSB7CistCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCistCQkJX1g4NkVNVV9pbnRyVGFiW2ldID0gZnVuY3NbaV07CistCQl9CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKysgICAgICAgIF9YODZFTVVfaW50clRhYltpXSA9IE5VTEw7CisrICAgIGlmIChmdW5jcykgeworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorKyAgICAgICAgICAgIF9YODZFTVVfaW50clRhYltpXSA9IGZ1bmNzW2ldOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNjQ5LDE1ICs1MzYsMTUgQEAgc28gdGhhdCB0aGUgY29kZSBpbiB0aGUgZW11bGF0b3Igd2lsbCBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBzb2Z0d2FyZQorIGludGVycnVwdCBhcyBwZXIgbm9ybWFsLiBUaGlzIGVzc2VudGlhbGx5IGFsbG93cyBzeXN0ZW0gY29kZSB0byBhY3RpdmVseQorIGhvb2sgYW5kIGhhbmRsZSBjZXJ0YWluIHNvZnR3YXJlIGludGVycnVwdHMgYXMgbmVjZXNzYXJ5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfcHJlcGFyZUZvckludCgKKy0JaW50IG51bSkKKyt2b2lkCisrWDg2RU1VX3ByZXBhcmVGb3JJbnQoaW50IG51bSkKKyB7CistICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKyAgICAgQ0xFQVJfRkxBRyhGX1RGKTsKKyAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworICAgICBNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKG51bSAqIDQgKyAyKTsKKyAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICBNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKG51bSAqIDQpOworLQlNLng4Ni5pbnRyID0gMDsKKysgICAgTS54ODYuaW50ciA9IDA7CisgfQorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMgYi9saWJzL3g4NmVtdS92YWxpZGF0ZS5jCitpbmRleCAyMzlmNmMxLi40YzM2ZTFkIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvdmFsaWRhdGUuYworKysrIGIvbGlicy94ODZlbXUvdmFsaWRhdGUuYworQEAgLTU5MSw1OCArNTkxLDYyIEBACisgICAgICAgICBwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9CisgCistdm9pZCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisrdm9pZAorK3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKKyB7CisgICAgIHZhX2xpc3QgYXJncHRyOworKworICAgICB2YV9zdGFydChhcmdwdHIsIGZtdCk7CisgICAgIHZmcHJpbnRmKHN0ZG91dCwgZm10LCBhcmdwdHIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgdmFfZW5kKGFyZ3B0cik7CisgfQorIAorLWNoYXIgKiBwcmludF9mbGFncyhjaGFyICpidWYsdWxvbmcgZmxhZ3MpCisrY2hhciAqCisrcHJpbnRfZmxhZ3MoY2hhciAqYnVmLCB1bG9uZyBmbGFncykKKyB7CisgICAgIGNoYXIgKnNlcGFyYXRvciA9ICIiOworIAorICAgICBidWZbMF0gPSAwOworICAgICBpZiAoZmxhZ3MgJiBGX0NGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJDRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJDRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfUEYpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIlBGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIlBGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9BRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiQUYiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiQUYiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1pGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJaRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJaRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfU0YpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIlNGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIlNGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9PRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiT0YiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiT0YiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoc2VwYXJhdG9yWzBdID09IDApCistICAgICAgICBzdHJjcHkoYnVmLCJOb25lIik7CisrICAgICAgICBzdHJjcHkoYnVmLCAiTm9uZSIpOworICAgICByZXR1cm4gYnVmOworIH0KKyAKKy1pbnQgbWFpbihpbnQgYXJnYykKKytpbnQKKyttYWluKGludCBhcmdjKQorIHsKKy0gICAgdWxvbmcgICBkZWZfZmxhZ3M7CisrICAgIHVsb25nIGRlZl9mbGFnczsKKyAgICAgaW50IHRyYWNlID0gZmFsc2U7CisgCisgICAgIGlmIChhcmdjID4gMSkKK0BAIC02NzMsNyArNjc3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MpCisgICAgIFZBTF9MT05HX0xPTkdfQklOQVJZKGNtcF9sb25nKTsKKyAKKyAgICAgVkFMX0JZVEVfVU5BUlkoZGFhX2J5dGUpOworLSAgICBWQUxfQllURV9VTkFSWShkYXNfYnl0ZSk7ICAgLy8gRmFpbHMgZm9yIDB4OUEgKG91dCBvZiByYW5nZSBhbnl3YXkpCisrICAgIFZBTF9CWVRFX1VOQVJZKGRhc19ieXRlKTsgICAvKiBGYWlscyBmb3IgMHg5QSAob3V0IG9mIHJhbmdlIGFueXdheSkgKi8KKyAKKyAgICAgVkFMX0JZVEVfVU5BUlkoZGVjX2J5dGUpOworICAgICBWQUxfV09SRF9VTkFSWShkZWNfd29yZCk7CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11LmggYi9saWJzL3g4NmVtdS94ODZlbXUuaAoraW5kZXggNzk1ZTJkNi4uNTAxZGQ5MSAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUuaAorQEAgLTU2LDcgKzU2LDcgQEAgdHlwZWRlZiBpbnQgWDg2RU1VX3Bpb0FkZHI7CisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hY3JvcyBhbmQgdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgUEFDSworLSMgcHJhZ21hCVBBQ0sgICAvKiBEb24ndCBwYWNrIHN0cnVjdHMgd2l0aCBmdW5jdGlvbiBwb2ludGVycyEgKi8KKysjcHJhZ21hCVBBQ0sgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHBhY2sgc3RydWN0cyB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzISAqLworICNlbmRpZgorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtODEsMTMgKzgxLDEzIEBAIG91dHcgICAgLSBGdW5jdGlvbiB0byB3cml0ZSBhIHdvcmQgdG8gYW4gSS9PIHBvcnQKKyBvdXRsICAgIC0gRnVuY3Rpb24gdG8gd3JpdGUgYSBkd29yZCB0byBhbiBJL08gcG9ydAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1OCAgCShYODZBUElQIGluYikoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistCXUxNiAJKFg4NkFQSVAgaW53KShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy0JdTMyIAkoWDg2QVBJUCBpbmwpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLQl2b2lkIAkoWDg2QVBJUCBvdXRiKShYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworLQl2b2lkIAkoWDg2QVBJUCBvdXR3KShYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0bCkoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCk7CistCX0gWDg2RU1VX3Bpb0Z1bmNzOworKyAgICB1OChYODZBUElQIGluYikgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICB1MTYoWDg2QVBJUCBpbncpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgdTMyKFg4NkFQSVAgaW5sKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIHZvaWQgKFg4NkFQSVAgb3V0YikgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHU4IHZhbCk7CisrICAgIHZvaWQgKFg4NkFQSVAgb3V0dykgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpOworKyAgICB2b2lkIChYODZBUElQIG91dGwpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKTsKKyt9IFg4NkVNVV9waW9GdW5jczsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CitAQCAtMTEyLDEzICsxMTIsMTMgQEAgd3J3ICAgIAktIEZ1bmN0aW9uIHRvIHdyaXRlIGEgd29yZCB0byBhbiBhZGRyZXNzCisgd3JsICAgIAktIEZ1bmN0aW9uIHRvIHdyaXRlIGEgZHdvcmQgdG8gYW4gYWRkcmVzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1OCAgCShYODZBUElQIHJkYikodTMyIGFkZHIpOworLQl1MTYgCShYODZBUElQIHJkdykodTMyIGFkZHIpOworLQl1MzIgCShYODZBUElQIHJkbCkodTMyIGFkZHIpOworLQl2b2lkIAkoWDg2QVBJUCB3cmIpKHUzMiBhZGRyLCB1OCB2YWwpOworLQl2b2lkIAkoWDg2QVBJUCB3cncpKHUzMiBhZGRyLCB1MTYgdmFsKTsKKy0Jdm9pZAkoWDg2QVBJUCB3cmwpKHUzMiBhZGRyLCB1MzIgdmFsKTsKKy0JfSBYODZFTVVfbWVtRnVuY3M7CisrICAgIHU4KFg4NkFQSVAgcmRiKSAodTMyIGFkZHIpOworKyAgICB1MTYoWDg2QVBJUCByZHcpICh1MzIgYWRkcik7CisrICAgIHUzMihYODZBUElQIHJkbCkgKHUzMiBhZGRyKTsKKysgICAgdm9pZCAoWDg2QVBJUCB3cmIpICh1MzIgYWRkciwgdTggdmFsKTsKKysgICAgdm9pZCAoWDg2QVBJUCB3cncpICh1MzIgYWRkciwgdTE2IHZhbCk7CisrICAgIHZvaWQgKFg4NkFQSVAgd3JsKSAodTMyIGFkZHIsIHUzMiB2YWwpOworK30gWDg2RU1VX21lbUZ1bmNzOworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBIZXJlIGFyZSB0aGUgZGVmYXVsdCBtZW1vcnkgcmVhZCBhbmQgd3JpdGUKK0BAIC0xMzIsMjkgKzEzMiwyOSBAQCBleHRlcm4gdm9pZCBYODZBUEkgd3J3KHUzMiBhZGRyLCB1MTYgdmFsKTsKKyBleHRlcm4gdm9pZCBYODZBUEkgd3JsKHUzMiBhZGRyLCB1MzIgdmFsKTsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYQlFTkRfUEFDSworKyNwcmFnbWEJRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKy10eXBlZGVmIHZvaWQgKFg4NkFQSVAgWDg2RU1VX2ludHJGdW5jcykoaW50IG51bSk7CisrdHlwZWRlZiB2b2lkIChYODZBUElQIFg4NkVNVV9pbnRyRnVuY3MpIChpbnQgbnVtKTsKKyBleHRlcm4gWDg2RU1VX2ludHJGdW5jcyBfWDg2RU1VX2ludHJUYWJbMjU2XTsKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKy12b2lkIAlYODZFTVVfc2V0dXBNZW1GdW5jcyhYODZFTVVfbWVtRnVuY3MgKmZ1bmNzKTsKKy12b2lkIAlYODZFTVVfc2V0dXBQaW9GdW5jcyhYODZFTVVfcGlvRnVuY3MgKmZ1bmNzKTsKKy12b2lkIAlYODZFTVVfc2V0dXBJbnRyRnVuY3MoWDg2RU1VX2ludHJGdW5jcyBmdW5jc1tdKTsKKy12b2lkIAlYODZFTVVfcHJlcGFyZUZvckludChpbnQgbnVtKTsKKysgICAgdm9pZCBYODZFTVVfc2V0dXBNZW1GdW5jcyhYODZFTVVfbWVtRnVuY3MgKiBmdW5jcyk7CisrICAgIHZvaWQgWDg2RU1VX3NldHVwUGlvRnVuY3MoWDg2RU1VX3Bpb0Z1bmNzICogZnVuY3MpOworKyAgICB2b2lkIFg4NkVNVV9zZXR1cEludHJGdW5jcyhYODZFTVVfaW50ckZ1bmNzIGZ1bmNzW10pOworKyAgICB2b2lkIFg4NkVNVV9wcmVwYXJlRm9ySW50KGludCBudW0pOworIAorIC8qIGRlY29kZS5jICovCisgCistdm9pZCAJWDg2RU1VX2V4ZWModm9pZCk7Cistdm9pZCAJWDg2RU1VX2hhbHRfc3lzKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV9leGVjKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV9oYWx0X3N5cyh2b2lkKTsKKyAKKyAjaWZkZWYJREVCVUcKKyAjZGVmaW5lCUhBTFRfU1lTKCkJXAorQEAgLTE2Niw4ICsxNjYsOCBAQCB2b2lkIAlYODZFTVVfaGFsdF9zeXModm9pZCk7CisgCisgLyogRGVidWcgb3B0aW9ucyAqLworIAorLSNkZWZpbmUgREVCVUdfREVDT0RFX0YgICAgICAgICAgMHgwMDAwMDEgLyogcHJpbnQgZGVjb2RlZCBpbnN0cnVjdGlvbiAgKi8KKy0jZGVmaW5lIERFQlVHX1RSQUNFX0YgICAgICAgICAgIDB4MDAwMDAyIC8qIGR1bXAgcmVncyBiZWZvcmUvYWZ0ZXIgZXhlY3V0aW9uICovCisrI2RlZmluZSBERUJVR19ERUNPREVfRiAgICAgICAgICAweDAwMDAwMSAgICAgICAgLyogcHJpbnQgZGVjb2RlZCBpbnN0cnVjdGlvbiAgKi8KKysjZGVmaW5lIERFQlVHX1RSQUNFX0YgICAgICAgICAgIDB4MDAwMDAyICAgICAgICAvKiBkdW1wIHJlZ3MgYmVmb3JlL2FmdGVyIGV4ZWN1dGlvbiAqLworICNkZWZpbmUgREVCVUdfU1RFUF9GICAgICAgICAgICAgMHgwMDAwMDQKKyAjZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFX0YgICAgIDB4MDAwMDA4CisgI2RlZmluZSBERUJVR19CUkVBS19GICAgICAgICAgICAweDAwMDAxMAorQEAgLTE3NSwyNCArMTc1LDIzIEBAIHZvaWQgCVg4NkVNVV9oYWx0X3N5cyh2b2lkKTsKKyAjZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1NfRiAgICAgIDB4MDAwMDQwCisgI2RlZmluZSBERUJVR19GU19GICAgICAgICAgICAgICAweDAwMDA4MAorICNkZWZpbmUgREVCVUdfUFJPQ19GICAgICAgICAgICAgMHgwMDAxMDAKKy0jZGVmaW5lIERFQlVHX1NZU0lOVF9GICAgICAgICAgIDB4MDAwMjAwIC8qIGJpb3Mgc3lzdGVtIGludGVycnVwdHMuICovCisrI2RlZmluZSBERUJVR19TWVNJTlRfRiAgICAgICAgICAweDAwMDIwMCAgICAgICAgLyogYmlvcyBzeXN0ZW0gaW50ZXJydXB0cy4gKi8KKyAjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTF9GICAgICAgIDB4MDAwNDAwCisgI2RlZmluZSBERUJVR19JTlNUUlVNRU5UX0YgICAgICAweDAwMDgwMAorLSNkZWZpbmUgREVCVUdfTUVNX1RSQUNFX0YgICAgICAgMHgwMDEwMDAgCistI2RlZmluZSBERUJVR19JT19UUkFDRV9GICAgICAgICAweDAwMjAwMCAKKysjZGVmaW5lIERFQlVHX01FTV9UUkFDRV9GICAgICAgIDB4MDAxMDAwCisrI2RlZmluZSBERUJVR19JT19UUkFDRV9GICAgICAgICAweDAwMjAwMAorICNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMX1JFR1NfRiAgMHgwMDQwMDAKKy0jZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YgIDB4MDA4MDAwIAorKyNkZWZpbmUgREVCVUdfREVDT0RFX05PUFJJTlRfRiAgMHgwMDgwMDAKKyAjZGVmaW5lIERFQlVHX0VYSVQgICAgICAgICAgICAgIDB4MDEwMDAwCisgI2RlZmluZSBERUJVR19TWVNfRiAgICAgICAgICAgICAoREVCVUdfU1ZDX0Z8REVCVUdfRlNfRnxERUJVR19QUk9DX0YpCisgCistdm9pZCAJWDg2RU1VX3RyYWNlX3JlZ3Modm9pZCk7Cistdm9pZCAJWDg2RU1VX3RyYWNlX3hyZWdzKHZvaWQpOworLXZvaWQgCVg4NkVNVV9kdW1wX21lbW9yeSh1MTYgc2VnLCB1MTYgb2ZmLCB1MzIgYW10KTsKKy1pbnQgCVg4NkVNVV90cmFjZV9vbih2b2lkKTsKKy1pbnQgCVg4NkVNVV90cmFjZV9vZmYodm9pZCk7CisrICAgIHZvaWQgWDg2RU1VX3RyYWNlX3JlZ3Modm9pZCk7CisrICAgIHZvaWQgWDg2RU1VX3RyYWNlX3hyZWdzKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV9kdW1wX21lbW9yeSh1MTYgc2VnLCB1MTYgb2ZmLCB1MzIgYW10KTsKKysgICAgaW50IFg4NkVNVV90cmFjZV9vbih2b2lkKTsKKysgICAgaW50IFg4NkVNVV90cmFjZV9vZmYodm9pZCk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfWDg2RU1VX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1g4NkVNVV9IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmggYi9saWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaAoraW5kZXggNDdhYWNiNi4uMzg1YjgwNCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaAorQEAgLTQ1LDY1ICs0NSw2NSBAQAorIAorICNkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0hfRiAgICAgICAgICAgICAgICAweDEKKyAjZGVmaW5lIENIRUNLX1NQX0FDQ0VTU19GICAgICAgICAgICAgICAgMHgyCistI2RlZmluZSBDSEVDS19NRU1fQUNDRVNTX0YgICAgICAgICAgICAgIDB4NCAvKnVzaW5nIHJlZ3VsYXIgbGluZWFyIHBvaW50ZXIgKi8KKy0jZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTX0YgICAgICAgICAgICAgMHg4IC8qdXNpbmcgc2VnbWVudDpvZmZzZXQqLworKyNkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTU19GICAgICAgICAgICAgICAweDQgICAgIC8qdXNpbmcgcmVndWxhciBsaW5lYXIgcG9pbnRlciAqLworKyNkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1NfRiAgICAgICAgICAgICAweDggICAgIC8qdXNpbmcgc2VnbWVudDpvZmZzZXQgKi8KKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBDSEVDS19JUF9GRVRDSCgpICAgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfSVBfRkVUQ0hfRikKKy0jIGRlZmluZSBDSEVDS19TUF9BQ0NFU1MoKSAgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfU1BfQUNDRVNTX0YpCistIyBkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTUygpICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX01FTV9BQ0NFU1NfRikKKy0jIGRlZmluZSBDSEVDS19EQVRBX0FDQ0VTUygpICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfREFUQV9BQ0NFU1NfRikKKysjZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkgICAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19JUF9GRVRDSF9GKQorKyNkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTKCkgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX1NQX0FDQ0VTU19GKQorKyNkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTUygpICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX01FTV9BQ0NFU1NfRikKKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19EQVRBX0FDQ0VTU19GKQorICNlbHNlCistIyBkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0goKQorLSMgZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpCistIyBkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTUygpCistIyBkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1MoKQorKyNkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0goKQorKyNkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKQorKyNkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1MoKQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIERFQlVHX0lOU1RSVU1FTlQoKSAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU5TVFJVTUVOVF9GKQorLSMgZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX0YpCistIyBkZWZpbmUgREVCVUdfVFJBQ0UoKSAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRV9GKQorLSMgZGVmaW5lIERFQlVHX1NURVAoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1RFUF9GKQorLSMgZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRElTQVNTRU1CTEVfRikKKy0jIGRlZmluZSBERUJVR19CUkVBSygpICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0JSRUFLX0YpCistIyBkZWZpbmUgREVCVUdfU1ZDKCkgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TVkNfRikKKy0jIGRlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIChNLng4Ni5kZWJ1ZyAmIERFQlVHX1NBVkVfSVBfQ1NfRikKKy0KKy0jIGRlZmluZSBERUJVR19GUygpICAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0ZTX0YpCistIyBkZWZpbmUgREVCVUdfUFJPQygpICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19QUk9DX0YpCistIyBkZWZpbmUgREVCVUdfU1lTSU5UKCkgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNJTlRfRikKKy0jIGRlZmluZSBERUJVR19UUkFDRUNBTEwoKSAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9GKQorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTFJFR1MoKSAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VDQUxMX1JFR1NfRikKKy0jIGRlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NZU19GKQorLSMgZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfTUVNX1RSQUNFX0YpCistIyBkZWZpbmUgREVCVUdfSU9fVFJBQ0UoKSAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19JT19UUkFDRV9GKQorLSMgZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX05PUFJJTlRfRikKKysjZGVmaW5lIERFQlVHX0lOU1RSVU1FTlQoKSAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU5TVFJVTUVOVF9GKQorKyNkZWZpbmUgREVCVUdfREVDT0RFKCkgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19ERUNPREVfRikKKysjZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX1NURVAoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1RFUF9GKQorKyNkZWZpbmUgREVCVUdfRElTQVNTRU1CTEUoKSAgIAkoTS54ODYuZGVidWcgJiBERUJVR19ESVNBU1NFTUJMRV9GKQorKyNkZWZpbmUgREVCVUdfQlJFQUsoKSAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19CUkVBS19GKQorKyNkZWZpbmUgREVCVUdfU1ZDKCkgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TVkNfRikKKysjZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1MoKSAgICAgKE0ueDg2LmRlYnVnICYgREVCVUdfU0FWRV9JUF9DU19GKQorKworKyNkZWZpbmUgREVCVUdfRlMoKSAgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19GU19GKQorKyNkZWZpbmUgREVCVUdfUFJPQygpICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19QUk9DX0YpCisrI2RlZmluZSBERUJVR19TWVNJTlQoKSAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NZU0lOVF9GKQorKyNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRUNBTExfRikKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTFJFR1MoKSAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VDQUxMX1JFR1NfRikKKysjZGVmaW5lIERFQlVHX1NZUygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1lTX0YpCisrI2RlZmluZSBERUJVR19NRU1fVFJBQ0UoKSAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX01FTV9UUkFDRV9GKQorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0UoKSAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19JT19UUkFDRV9GKQorKyNkZWZpbmUgREVCVUdfREVDT0RFX05PUFJJTlQoKSAoTS54ODYuZGVidWcgJiBERUJVR19ERUNPREVfTk9QUklOVF9GKQorICNlbHNlCistIyBkZWZpbmUgREVCVUdfSU5TVFJVTUVOVCgpICAgIAkwCistIyBkZWZpbmUgREVCVUdfREVDT0RFKCkgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfVFJBQ0UoKSAgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfU1RFUCgpICAgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfRElTQVNTRU1CTEUoKSAgIAkwCistIyBkZWZpbmUgREVCVUdfQlJFQUsoKSAgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfU1ZDKCkgICAgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfU0FWRV9JUF9DUygpICAgICAwCistIyBkZWZpbmUgREVCVUdfRlMoKSAgICAgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfUFJPQygpICAgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfU1lTSU5UKCkgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfVFJBQ0VDQUxMKCkgICAgIAkwCistIyBkZWZpbmUgREVCVUdfVFJBQ0VDQUxMUkVHUygpIAkwCistIyBkZWZpbmUgREVCVUdfU1lTKCkgICAgICAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfTUVNX1RSQUNFKCkgICAgIAkwCistIyBkZWZpbmUgREVCVUdfSU9fVFJBQ0UoKSAgICAgIAkwCistIyBkZWZpbmUgREVCVUdfREVDT0RFX05PUFJJTlQoKSAwCisrI2RlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCTAKKysjZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfVFJBQ0UoKSAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJMAorKyNkZWZpbmUgREVCVUdfQlJFQUsoKSAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TVkMoKSAgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1MoKSAgICAgMAorKyNkZWZpbmUgREVCVUdfRlMoKSAgICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19QUk9DKCkgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMKCkgICAgIAkwCisrI2RlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCTAKKysjZGVmaW5lIERFQlVHX1NZUygpICAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfTUVNX1RSQUNFKCkgICAgIAkwCisrI2RlZmluZSBERUJVR19JT19UUkFDRSgpICAgICAgCTAKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgMAorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworIAorLSMgZGVmaW5lIERFQ09ERV9QUklOVEYoeCkgICAgIAlpZiAoREVCVUdfREVDT0RFKCkpIFwKKysjZGVmaW5lIERFQ09ERV9QUklOVEYoeCkgICAgIAlpZiAoREVCVUdfREVDT0RFKCkpIFwKKyAJCQkJCQkJCQl4ODZlbXVfZGVjb2RlX3ByaW50Zih4KQorLSMgZGVmaW5lIERFQ09ERV9QUklOVEYyKHgseSkgIAlpZiAoREVCVUdfREVDT0RFKCkpIFwKKysjZGVmaW5lIERFQ09ERV9QUklOVEYyKHgseSkgIAlpZiAoREVCVUdfREVDT0RFKCkpIFwKKyAJCQkJCQkJCQl4ODZlbXVfZGVjb2RlX3ByaW50ZjIoeCx5KQorIAorIC8qCitAQCAtMTIzLDEwICsxMjMsMTAgQEAKKyAJCU0ueDg2LnNhdmVkX2lwID0geTsgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKKyAJfQorICNlbHNlCistIyBkZWZpbmUgSU5DX0RFQ09ERURfSU5TVF9MRU4oeCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGKHgpCistIyBkZWZpbmUgREVDT0RFX1BSSU5URjIoeCx5KQorLSMgZGVmaW5lIFNBVkVfSVBfQ1MoeCx5KQorKyNkZWZpbmUgSU5DX0RFQ09ERURfSU5TVF9MRU4oeCkKKysjZGVmaW5lIERFQ09ERV9QUklOVEYoeCkKKysjZGVmaW5lIERFQ09ERV9QUklOVEYyKHgseSkKKysjZGVmaW5lIFNBVkVfSVBfQ1MoeCx5KQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworQEAgLTEzNywxMyArMTM3LDEzIEBACisgCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAlpZiAoREVCVUdfVFJBQ0UoKSB8fCBERUJVR19ERUNPREUoKSkgWDg2RU1VX3RyYWNlX3JlZ3MoKQorICNlbHNlCistIyBkZWZpbmUgVFJBQ0VfUkVHUygpCisrI2RlZmluZSBUUkFDRV9SRUdTKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBTSU5HTEVfU1RFUCgpCQlpZiAoREVCVUdfU1RFUCgpKSB4ODZlbXVfc2luZ2xlX3N0ZXAoKQorKyNkZWZpbmUgU0lOR0xFX1NURVAoKQkJaWYgKERFQlVHX1NURVAoKSkgeDg2ZW11X3NpbmdsZV9zdGVwKCkKKyAjZWxzZQorLSMgZGVmaW5lIFNJTkdMRV9TVEVQKCkKKysjZGVmaW5lIFNJTkdMRV9TVEVQKCkKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIFRSQUNFX0FORF9TVEVQKCkJXAorQEAgLTE1MSwyOSArMTUxLDI5IEBACisgCVNJTkdMRV9TVEVQKCkKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBTVEFSVF9PRl9JTlNUUigpCistIyBkZWZpbmUgRU5EX09GX0lOU1RSKCkJCUVuZE9mVGhlSW5zdHJ1Y3Rpb25Qcm9jZWR1cmU6IHg4NmVtdV9lbmRfaW5zdHIoKTsKKy0jIGRlZmluZSBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKQl4ODZlbXVfZW5kX2luc3RyKCk7CisrI2RlZmluZSBTVEFSVF9PRl9JTlNUUigpCisrI2RlZmluZSBFTkRfT0ZfSU5TVFIoKQkJRW5kT2ZUaGVJbnN0cnVjdGlvblByb2NlZHVyZTogeDg2ZW11X2VuZF9pbnN0cigpOworKyNkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkJeDg2ZW11X2VuZF9pbnN0cigpOworICNlbHNlCistIyBkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUigpCistIyBkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkKKysjZGVmaW5lIFNUQVJUX09GX0lOU1RSKCkKKysjZGVmaW5lIEVORF9PRl9JTlNUUigpCisrI2RlZmluZSBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lICBDQUxMX1RSQUNFKHUsdix3LHgscykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrI2RlZmluZSAgQ0FMTF9UUkFDRSh1LHYsdyx4LHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAlpZiAoREVCVUdfVFJBQ0VDQUxMUkVHUygpKQkJCQkJCQkJCVwKKyAJCXg4NmVtdV9kdW1wX3JlZ3MoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAlpZiAoREVCVUdfVFJBQ0VDQUxMKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgCQlwcmludGsoIiUwNHg6JTA0eDogQ0FMTCAlcyUwNHg6JTA0eFxuIiwgdSAsIHYsIHMsIHcsIHgpOworLSMgZGVmaW5lIFJFVFVSTl9UUkFDRShuLHUsdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrI2RlZmluZSBSRVRVUk5fVFJBQ0Uobix1LHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAlpZiAoREVCVUdfVFJBQ0VDQUxMUkVHUygpKQkJCQkJCQkJCVwKKyAJCXg4NmVtdV9kdW1wX3JlZ3MoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAlpZiAoREVCVUdfVFJBQ0VDQUxMKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgCQlwcmludGsoIiUwNHg6JTA0eDogJXNcbiIsdSx2LG4pOworICNlbHNlCistIyBkZWZpbmUgQ0FMTF9UUkFDRSh1LHYsdyx4LHMpCistIyBkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KQorKyNkZWZpbmUgQ0FMTF9UUkFDRSh1LHYsdyx4LHMpCisrI2RlZmluZSBSRVRVUk5fVFJBQ0Uobix1LHYpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCitAQCAtMTg1LDI2ICsxODUsMjUgQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKy1leHRlcm4gdm9pZCB4ODZlbXVfaW5jX2RlY29kZWRfaW5zdF9sZW4gKGludCB4KTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZiAoY2hhciAqeCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYyIChjaGFyICp4LCBpbnQgeSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2p1c3RfZGlzYXNzZW1ibGUgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9zaW5nbGVfc3RlcCAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2VuZF9pbnN0ciAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2R1bXBfcmVncyAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2R1bXBfeHJlZ3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9wcmludF9pbnRfdmVjdCAodTE2IGl2KTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfaW5zdHJ1bWVudF9pbnN0cnVjdGlvbiAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcyAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcyAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MgKHUzMiBwKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MgKHVpbnQgcywgdWludCBvKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2luY19kZWNvZGVkX2luc3RfbGVuKGludCB4KTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYoY29uc3QgY2hhciAqeCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmMihjb25zdCBjaGFyICp4LCBpbnQgeSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9qdXN0X2Rpc2Fzc2VtYmxlKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAodm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9lbmRfaW5zdHIodm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3JlZ3Modm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3hyZWdzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QodTE2IGl2KTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2luc3RydW1lbnRfaW5zdHJ1Y3Rpb24odm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19pcF9hY2Nlc3Modm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3Modm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzKHUzMiBwKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHVpbnQgcywgdWludCBvKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9ERUJVR19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9ERUJVR19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oIGIvbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oCitpbmRleCA2MWNkNGRjLi40OWExZjdiIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmgKK0BAIC01MiwzNyArNTIsMzYgQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKy12b2lkIAl4ODZlbXVfaW50cl9yYWlzZSAodTggdHlwZSk7Cistdm9pZCAgICBmZXRjaF9kZWNvZGVfbW9kcm0gKGludCAqbW9kLGludCAqcmVnaCxpbnQgKnJlZ2wpOworLXU4ICAgICAgZmV0Y2hfYnl0ZV9pbW0gKHZvaWQpOworLXUxNiAgICAgZmV0Y2hfd29yZF9pbW0gKHZvaWQpOworLXUzMiAgICAgZmV0Y2hfbG9uZ19pbW0gKHZvaWQpOworLXU4ICAgICAgZmV0Y2hfZGF0YV9ieXRlICh1aW50IG9mZnNldCk7CistdTggICAgICBmZXRjaF9kYXRhX2J5dGVfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKy11MTYgICAgIGZldGNoX2RhdGFfd29yZCAodWludCBvZmZzZXQpOworLXUxNiAgICAgZmV0Y2hfZGF0YV93b3JkX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CistdTMyICAgICBmZXRjaF9kYXRhX2xvbmcgKHVpbnQgb2Zmc2V0KTsKKy11MzIgICAgIGZldGNoX2RhdGFfbG9uZ19hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworLXZvaWQgICAgc3RvcmVfZGF0YV9ieXRlICh1aW50IG9mZnNldCwgdTggdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfYnl0ZV9hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHU4IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX3dvcmQgKHVpbnQgb2Zmc2V0LCB1MTYgdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfd29yZF9hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUxNiB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV9sb25nICh1aW50IG9mZnNldCwgdTMyIHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX2xvbmdfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKKy11OCogCWRlY29kZV9ybV9ieXRlX3JlZ2lzdGVyKGludCByZWcpOworLXUxNiogCWRlY29kZV9ybV93b3JkX3JlZ2lzdGVyKGludCByZWcpOworLXUzMiogCWRlY29kZV9ybV9sb25nX3JlZ2lzdGVyKGludCByZWcpOworLXUxNiogCWRlY29kZV9ybV9zZWdfcmVnaXN0ZXIoaW50IHJlZyk7CistdTMyCWRlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKTsKKy11MzIJZGVjb2RlX3JtMDFfYWRkcmVzcyhpbnQgcm0pOworLXUzMglkZWNvZGVfcm0xMF9hZGRyZXNzKGludCBybSk7CistdTMyCWRlY29kZV9zaWJfYWRkcmVzcyhpbnQgc2liLCBpbnQgbW9kKTsKKysgICAgdm9pZCB4ODZlbXVfaW50cl9yYWlzZSh1OCB0eXBlKTsKKysgICAgdm9pZCBmZXRjaF9kZWNvZGVfbW9kcm0oaW50ICptb2QsIGludCAqcmVnaCwgaW50ICpyZWdsKTsKKysgICAgdTggZmV0Y2hfYnl0ZV9pbW0odm9pZCk7CisrICAgIHUxNiBmZXRjaF93b3JkX2ltbSh2b2lkKTsKKysgICAgdTMyIGZldGNoX2xvbmdfaW1tKHZvaWQpOworKyAgICB1OCBmZXRjaF9kYXRhX2J5dGUodWludCBvZmZzZXQpOworKyAgICB1OCBmZXRjaF9kYXRhX2J5dGVfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworKyAgICB1MTYgZmV0Y2hfZGF0YV93b3JkKHVpbnQgb2Zmc2V0KTsKKysgICAgdTE2IGZldGNoX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CisrICAgIHUzMiBmZXRjaF9kYXRhX2xvbmcodWludCBvZmZzZXQpOworKyAgICB1MzIgZmV0Y2hfZGF0YV9sb25nX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX2J5dGUodWludCBvZmZzZXQsIHU4IHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfd29yZCh1aW50IG9mZnNldCwgdTE2IHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV93b3JkX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MTYgdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX2xvbmcodWludCBvZmZzZXQsIHUzMiB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfbG9uZ19hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTMyIHZhbCk7CisrICAgIHU4ICpkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKTsKKysgICAgdTE2ICpkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKTsKKysgICAgdTMyICpkZWNvZGVfcm1fbG9uZ19yZWdpc3RlcihpbnQgcmVnKTsKKysgICAgdTE2ICpkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpOworKyAgICB1MzIgZGVjb2RlX3JtMDBfYWRkcmVzcyhpbnQgcm0pOworKyAgICB1MzIgZGVjb2RlX3JtMDFfYWRkcmVzcyhpbnQgcm0pOworKyAgICB1MzIgZGVjb2RlX3JtMTBfYWRkcmVzcyhpbnQgcm0pOworKyAgICB1MzIgZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX0RFQ09ERV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9ERUNPREVfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9mcHUuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHUuaAoraW5kZXggNWZiMjcxNC4uMWMxMTQ5OCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9mcHUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oCitAQCAtNDAsMjIgKzQwLDIxIEBACisgI2RlZmluZSBfX1g4NkVNVV9GUFVfSAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKyAvKiB0aGVzZSBoYXZlIHRvIGJlIGRlZmluZWQsIHdoZXRoZXIgODA4NyBzdXBwb3J0IGNvbXBpbGVkIGluIG9yIG5vdC4gKi8KKyAKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4ICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGMgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYgKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDgodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOSh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGUodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZih1OCBvcDEpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX0ZQVV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9GUFVfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oIGIvbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmgKK2luZGV4IGU1OWI4MDcuLjVhNzgwZTYgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmgKK0BAIC00MiwyMyArNDIsMjMgQEAKKyAjaWZkZWYgWDg2X0ZQVV9TVVBQT1JUCisgCisgI2lmZGVmIFBBQ0sKKy0jIHByYWdtYSBQQUNLCisrI3ByYWdtYSBQQUNLCisgI2VuZGlmCisgCisgLyogQmFzaWMgODA4NyByZWdpc3RlciBjYW4gaG9sZCBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6ICovCisgCisgdW5pb24geDg2X2ZwdV9yZWdfdSB7CistICAgIHM4ICAgICAgICAgICAgICAgICAgdGVuYnl0ZXNbMTBdOworLSAgICBkb3VibGUgICAgICAgICAgICAgIGR2YWw7CistICAgIGZsb2F0ICAgICAgICAgICAgICAgZnZhbDsKKy0gICAgczE2ICAgICAgICAgICAgICAgICBzdmFsOworLSAgICBzMzIgICAgICAgICAgICAgICAgIGx2YWw7CistCX07CisrICAgIHM4IHRlbmJ5dGVzWzEwXTsKKysgICAgZG91YmxlIGR2YWw7CisrICAgIGZsb2F0IGZ2YWw7CisrICAgIHMxNiBzdmFsOworKyAgICBzMzIgbHZhbDsKKyt9OworIAorIHN0cnVjdCB4ODZfZnB1X3JlZyB7CistCXVuaW9uIHg4Nl9mcHVfcmVnX3UgcmVnOworLQljaGFyICAgICAgICAgICAgICAgIHRhZzsKKy0JfTsKKysgICAgdW5pb24geDg2X2ZwdV9yZWdfdSByZWc7CisrICAgIGNoYXIgdGFnOworK307CisgCisgLyoKKyAgKiBTaW5jZSB3ZSBhcmUgbm90IGdvaW5nIHRvIHdvcnJ5IGFib3V0IHRoZSBwcm9ibGVtcyBvZiBhbGlhc2luZworQEAgLTgzLDE0ICs4MywxNCBAQCBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeworICNkZWZpbmUgIFg4Nl9GUFVfU1RLVE9QICAwCisgCisgc3RydWN0IHg4Nl9mcHVfcmVnaXN0ZXJzIHsKKy0gICAgc3RydWN0IHg4Nl9mcHVfcmVnICB4ODZfZnB1X3N0YWNrWzhdOworLSAgICBpbnQgICAgICAgICAgICAgICAgIHg4Nl9mcHVfZmxhZ3M7CistICAgIGludCAgICAgICAgICAgICAgICAgeDg2X2ZwdV9jb25maWc7ICAgICAgICAgLyogcm91bmRpbmcgbW9kZXMsIGV0Yy4gKi8KKy0gICAgc2hvcnQgICAgICAgICAgICAgICB4ODZfZnB1X3RvcywgeDg2X2ZwdV9ib3M7CistCX07CisrICAgIHN0cnVjdCB4ODZfZnB1X3JlZyB4ODZfZnB1X3N0YWNrWzhdOworKyAgICBpbnQgeDg2X2ZwdV9mbGFnczsKKysgICAgaW50IHg4Nl9mcHVfY29uZmlnOyAgICAgICAgIC8qIHJvdW5kaW5nIG1vZGVzLCBldGMuICovCisrICAgIHNob3J0IHg4Nl9mcHVfdG9zLCB4ODZfZnB1X2JvczsKKyt9OworIAorICNpZmRlZiBFTkRfUEFDSworLSMgcHJhZ21hIEVORF9QQUNLCisrI3ByYWdtYSBFTkRfUEFDSworICNlbmRpZgorIAorIC8qCitAQCAtMTA0LDE2ICsxMDQsMTYgQEAgc3RydWN0IHg4Nl9mcHVfcmVnaXN0ZXJzIHsKKyAgKiBpbnN0cnVjdGlvbnMuCisgICovCisgCistI2VuZGlmIC8qIFg4Nl9GUFVfU1VQUE9SVCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWDg2X0ZQVV9TVVBQT1JUICovCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkgICAgIAlcCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjMyKHQsbW9kLHJoLHJsKSAgICAgCVwKKyAJREVDT0RFX1BSSU5URih0Wyhtb2Q8PDMpKyhyaCldKTsKKy0jIGRlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkgICAgCVwKKysjZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMjU2KHQsbW9kLHJoLHJsKSAgICAJXAorIAlERUNPREVfUFJJTlRGKHRbKG1vZDw8NikrKHJoPDwzKSsocmwpXSk7CisgI2Vsc2UKKy0jIGRlZmluZSBERUNPREVfUFJJTlRJTlNUUjMyKHQsbW9kLHJoLHJsKQorLSMgZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMjU2KHQsbW9kLHJoLHJsKQorKyNkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkKKysjZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMjU2KHQsbW9kLHJoLHJsKQorICNlbmRpZgorIAorLSNlbmRpZiAvKiBfX1g4NkVNVV9GUFVfUkVHU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9GUFVfUkVHU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L29wcy5oIGIvbGlicy94ODZlbXUveDg2ZW11L29wcy5oCitpbmRleCA2NWVhNjc2Li4xYmMwN2E0IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L29wcy5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvb3BzLmgKK0BAIC0zOSw3ICszOSw3IEBACisgI2lmbmRlZiBfX1g4NkVNVV9PUFNfSAorICNkZWZpbmUgX19YODZFTVVfT1BTX0gKKyAKKy1leHRlcm4gdm9pZCAoKng4NmVtdV9vcHRhYlsweDEwMF0pKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzB4MTAwXSkodTggb3AyKTsKKytleHRlcm4gdm9pZCAoKng4NmVtdV9vcHRhYlsweDEwMF0pICh1OCBvcDEpOworK2V4dGVybiB2b2lkICgqeDg2ZW11X29wdGFiMlsweDEwMF0pICh1OCBvcDIpOworIAorLSNlbmRpZiAvKiBfX1g4NkVNVV9PUFNfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfT1BTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oCitpbmRleCBlMDIzY2Y4Li5hY2ExMzJiIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oCitAQCAtNDksMTQgKzQ5LDE2IEBACisgI2RlZmluZQlfX0hBVkVfSU5MSU5FX0FTU0VNQkxFUl9fCisgI2VuZGlmCisgCistdTMyCQlnZXRfZmxhZ3NfYXNtKHZvaWQpOworK3UzMiBnZXRfZmxhZ3NfYXNtKHZvaWQpOworKworICNwcmFnbWEgYXV4IGdldF9mbGFnc19hc20gPQkJCVwKKyAJInB1c2hmIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSJwb3AJZWF4IiAgICAgICAgICAgICAgICAgIAlcCisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTE2ICAgICBhYWFfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGFhYV93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGFhYV93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjcsNyArNjksOCBAQCB1MTYgICAgIGFhYV93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUxNiAgICAgYWFzX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBhYXNfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBhYXNfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc4LDcgKzgxLDggQEAgdTE2ICAgICBhYXNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MTYgICAgIGFhZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgYWFkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggYWFkX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04OSw3ICs5Myw4IEBAIHUxNiAgICAgYWFkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTE2ICAgICBhYW1fd29yZF9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1MTYgYWFtX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBhYW1fd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTEwMCw3ICsxMDUsOCBAQCB1MTYgICAgIGFhbV93b3JkX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTggICAgICBhZGNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBhZGNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGFkY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTExLDcgKzExNyw4IEBAIHU4ICAgICAgYWRjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIGFkY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IGFkY193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGNfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTEyMiw3ICsxMjksOCBAQCB1MTYgICAgIGFkY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIGFkY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIGFkY19sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGNfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTEzMyw3ICsxNDEsOCBAQCB1MzIgICAgIGFkY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgYWRkX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggYWRkX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGRfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE0NCw3ICsxNTMsOCBAQCB1OCAgICAgIGFkZF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBhZGRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBhZGRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggYWRkX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xNTUsNyArMTY1LDggQEAgdTE2ICAgICBhZGRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBhZGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBhZGRfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggYWRkX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xNjYsNyArMTc3LDggQEAgdTMyICAgICBhZGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGFuZF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IGFuZF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggYW5kX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xNzcsNyArMTg5LDggQEAgdTggICAgICBhbmRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgYW5kX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgYW5kX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGFuZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTg4LDcgKzIwMSw4IEBAIHUxNiAgICAgYW5kX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgYW5kX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgYW5kX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGFuZF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTk5LDcgKzIxMyw4IEBAIHUzMiAgICAgYW5kX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBjbXBfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBjbXBfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGNtcF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjEwLDcgKzIyNSw4IEBAIHU4ICAgICAgY21wX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIGNtcF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IGNtcF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBjbXBfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTIyMSw3ICsyMzcsOCBAQCB1MTYgICAgIGNtcF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIGNtcF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIGNtcF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBjbXBfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTIzMiw3ICsyNDksOCBAQCB1MzIgICAgIGNtcF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgZGFhX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggZGFhX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBkYWFfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI0Myw3ICsyNjEsOCBAQCB1OCAgICAgIGRhYV9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTggICAgICBkYXNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBkYXNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGRhc19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjU0LDcgKzI3Myw4IEBAIHU4ICAgICAgZGFzX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11OCAgICAgIGRlY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IGRlY19ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNjUsNyArMjg1LDggQEAgdTggICAgICBkZWNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXUxNiAgICAgZGVjX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBkZWNfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBkZWNfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI3Niw3ICsyOTcsOCBAQCB1MTYgICAgIGRlY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUzMiAgICAgZGVjX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworK3UzMiBkZWNfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkKTsKKysKKyAjcHJhZ21hIGF1eCBkZWNfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI4Nyw3ICszMDksOCBAQCB1MzIgICAgIGRlY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4XTsKKyAKKy11OCAgICAgIGluY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IGluY19ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yOTgsNyArMzIxLDggQEAgdTggICAgICBpbmNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXUxNiAgICAgaW5jX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBpbmNfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBpbmNfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTMwOSw3ICszMzMsOCBAQCB1MTYgICAgIGluY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUzMiAgICAgaW5jX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworK3UzMiBpbmNfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkKTsKKysKKyAjcHJhZ21hIGF1eCBpbmNfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTMyMCw3ICszNDUsOCBAQCB1MzIgICAgIGluY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4XTsKKyAKKy11OCAgICAgIG9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggb3JfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IG9yX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMzEsNyArMzU3LDggQEAgdTggICAgICBvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBvcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IG9yX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IG9yX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zNDIsNyArMzY5LDggQEAgdTE2ICAgICBvcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIG9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgb3JfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggb3JfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM1Myw3ICszODEsOCBAQCB1MzIgICAgIG9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBuZWdfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBuZWdfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IG5lZ19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzY0LDcgKzM5Myw4IEBAIHU4ICAgICAgbmVnX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIG5lZ193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgbmVnX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggbmVnX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zNzUsNyArNDA1LDggQEAgdTE2ICAgICBuZWdfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIG5lZ19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgbmVnX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggbmVnX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zODYsNyArNDE3LDggQEAgdTMyICAgICBuZWdfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBub3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBub3RfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IG5vdF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzk3LDcgKzQyOSw4IEBAIHU4ICAgICAgbm90X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIG5vdF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgbm90X3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggbm90X3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00MDgsNyArNDQxLDggQEAgdTE2ICAgICBub3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIG5vdF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgbm90X2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggbm90X2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00MTksNyArNDUzLDggQEAgdTMyICAgICBub3RfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICByY2xfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCByY2xfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDMwLDcgKzQ2NSw4IEBAIHU4ICAgICAgcmNsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGNsXTsKKyAKKy11MTYgICAgIHJjbF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyt1MTYgcmNsX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcmNsX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00NDEsNyArNDc3LDggQEAgdTE2ICAgICByY2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGNsXTsKKyAKKy11MzIgICAgIHJjbF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyt1MzIgcmNsX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcmNsX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00NTIsNyArNDg5LDggQEAgdTMyICAgICByY2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBjbF07CisgCistdTggICAgICByY3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCByY3JfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDYzLDcgKzUwMSw4IEBAIHU4ICAgICAgcmNyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGNsXTsKKyAKKy11MTYgICAgIHJjcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyt1MTYgcmNyX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcmNyX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00NzQsNyArNTEzLDggQEAgdTE2ICAgICByY3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGNsXTsKKyAKKy11MzIgICAgIHJjcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyt1MzIgcmNyX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcmNyX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00ODUsNyArNTI1LDggQEAgdTMyICAgICByY3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBjbF07CisgCistdTggICAgICByb2xfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCByb2xfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDk2LDcgKzUzNyw4IEBAIHU4ICAgICAgcm9sX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGNsXTsKKyAKKy11MTYgICAgIHJvbF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyt1MTYgcm9sX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcm9sX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01MDcsNyArNTQ5LDggQEAgdTE2ICAgICByb2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGNsXTsKKyAKKy11MzIgICAgIHJvbF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyt1MzIgcm9sX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcm9sX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01MTgsNyArNTYxLDggQEAgdTMyICAgICByb2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBjbF07CisgCistdTggICAgICByb3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCByb3JfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTI5LDcgKzU3Myw4IEBAIHU4ICAgICAgcm9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGNsXTsKKyAKKy11MTYgICAgIHJvcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyt1MTYgcm9yX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcm9yX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01NDAsNyArNTg1LDggQEAgdTE2ICAgICByb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGNsXTsKKyAKKy11MzIgICAgIHJvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyt1MzIgcm9yX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcm9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01NTEsNyArNTk3LDggQEAgdTMyICAgICByb3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBjbF07CisgCistdTggICAgICBzaGxfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzaGxfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTYyLDcgKzYwOSw4IEBAIHU4ICAgICAgc2hsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGNsXTsKKyAKKy11MTYgICAgIHNobF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyt1MTYgc2hsX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01NzMsNyArNjIxLDggQEAgdTE2ICAgICBzaGxfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGNsXTsKKyAKKy11MzIgICAgIHNobF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyt1MzIgc2hsX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01ODQsNyArNjMzLDggQEAgdTMyICAgICBzaGxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBjbF07CisgCistdTggICAgICBzaHJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzaHJfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTk1LDcgKzY0NSw4IEBAIHU4ICAgICAgc2hyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGNsXTsKKyAKKy11MTYgICAgIHNocl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyt1MTYgc2hyX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hyX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02MDYsNyArNjU3LDggQEAgdTE2ICAgICBzaHJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGNsXTsKKyAKKy11MzIgICAgIHNocl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyt1MzIgc2hyX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hyX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02MTcsNyArNjY5LDggQEAgdTMyICAgICBzaHJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBjbF07CisgCistdTggICAgICBzYXJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzYXJfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjI4LDcgKzY4MSw4IEBAIHU4ICAgICAgc2FyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGNsXTsKKyAKKy11MTYgICAgIHNhcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyt1MTYgc2FyX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2FyX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02MzksNyArNjkzLDggQEAgdTE2ICAgICBzYXJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGNsXTsKKyAKKy11MzIgICAgIHNhcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyt1MzIgc2FyX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2FyX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02NTAsNyArNzA1LDggQEAgdTMyICAgICBzYXJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBjbF07CisgCistdTE2CQlzaGxkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKyt1MTYgc2hsZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxkX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02NjEsNyArNzE3LDggQEAgdTE2CQlzaGxkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggZHggY2xdOworIAorLXUzMiAgICAgc2hsZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrdTMyIHNobGRfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsZF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjcyLDcgKzcyOSw4IEBAIHUzMiAgICAgc2hsZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlZHggY2xdOworIAorLXUxNgkJc2hyZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrdTE2IHNocmRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hyZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjgzLDcgKzc0MSw4IEBAIHUxNgkJc2hyZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGR4IGNsXTsKKyAKKy11MzIgICAgIHNocmRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworK3UzMiBzaHJkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocmRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY5NCw3ICs3NTMsOCBAQCB1MzIgICAgIHNocmRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWR4IGNsXTsKKyAKKy11OCAgICAgIHNiYl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHNiYl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2JiX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03MDUsNyArNzY1LDggQEAgdTggICAgICBzYmJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgc2JiX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgc2JiX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IHNiYl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzE2LDcgKzc3Nyw4IEBAIHUxNiAgICAgc2JiX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgc2JiX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgc2JiX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IHNiYl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzI3LDcgKzc4OSw4IEBAIHUzMiAgICAgc2JiX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBzdWJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzdWJfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHN1Yl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzM4LDcgKzgwMSw4IEBAIHU4ICAgICAgc3ViX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIHN1Yl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IHN1Yl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzdWJfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc0OSw3ICs4MTMsOCBAQCB1MTYgICAgIHN1Yl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIHN1Yl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIHN1Yl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzdWJfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc2MCw3ICs4MjUsOCBAQCB1MzIgICAgIHN1Yl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXZvaWQJdGVzdF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3ZvaWQgdGVzdF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggdGVzdF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzcwLDcgKzgzNiw4IEBAIHZvaWQJdGVzdF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAlwYXJtIFtlZGldIFthbF0gW2JsXSAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdm9pZAl0ZXN0X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt2b2lkIHRlc3Rfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggdGVzdF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzgwLDcgKzg0Nyw4IEBAIHZvaWQJdGVzdF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2F4XSBbYnhdICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy12b2lkCXRlc3RfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3ZvaWQgdGVzdF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCB0ZXN0X2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03OTAsNyArODU4LDggQEAgdm9pZAl0ZXN0X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJcGFybSBbZWRpXSBbZWF4XSBbZWJ4XSAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICB4b3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCB4b3JfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHhvcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODAxLDcgKzg3MCw4IEBAIHU4ICAgICAgeG9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIHhvcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IHhvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCB4b3Jfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTgxMiw3ICs4ODIsOCBAQCB1MTYgICAgIHhvcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIHhvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIHhvcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCB4b3JfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTgyMyw3ICs4OTQsOCBAQCB1MzIgICAgIHhvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXZvaWQgICAgaW11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyt2b2lkIGltdWxfYnl0ZV9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBpbXVsX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MzQsNyArOTA2LDggQEAgdm9pZCAgICBpbXVsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1OCBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFthbF0gW2JsXSAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgYXggYmxdOworIAorLXZvaWQgICAgaW11bF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZCx1MTYgcyk7Cisrdm9pZCBpbXVsX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTE2ICogZHgsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggaW11bF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODQ2LDcgKzkxOSw4IEBAIHZvaWQgICAgaW11bF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZCx1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbYnhdXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgYXggYnggZHhdOworIAorLXZvaWQgICAgaW11bF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkLHUzMiBzKTsKKyt2b2lkIGltdWxfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiAqIGVheCwgdTMyICogZWR4LCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGltdWxfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg1OCw3ICs5MzIsOCBAQCB2b2lkICAgIGltdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2VheF0gW2VieF0gXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgZWF4IGVieCBlZHhdOworIAorLXZvaWQgICAgbXVsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1OCBkLHU4IHMpOworK3ZvaWQgbXVsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggbXVsX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04NjksNyArOTQ0LDggQEAgdm9pZCAgICBtdWxfYnl0ZV9hc20odTMyICpmbGFncyx1MTYgKmF4LHU4IGQsdTggcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2FsXSBbYmxdICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VzaSBheCBibF07CisgCistdm9pZCAgICBtdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworK3ZvaWQgbXVsX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTE2ICogZHgsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggbXVsX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04ODEsNyArOTU3LDggQEAgdm9pZCAgICBtdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJ4IGR4XTsKKyAKKy12b2lkICAgIG11bF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkLHUzMiBzKTsKKyt2b2lkIG11bF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyICogZWF4LCB1MzIgKiBlZHgsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggbXVsX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04OTMsNyArOTcwLDggQEAgdm9pZCAgICBtdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2VheF0gW2VieF0gXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgZWF4IGVieCBlZHhdOworIAorLXZvaWQJaWRpdl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4ICphbCx1OCAqYWgsdTE2IGQsdTggcyk7Cisrdm9pZCBpZGl2X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCAqIGFsLCB1OCAqIGFoLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggaWRpdl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTA1LDcgKzk4Myw4IEBAIHZvaWQJaWRpdl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4ICphbCx1OCAqYWgsdTE2IGQsdTggcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbYmxdXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgYXggYmxdOworIAorLXZvaWQJaWRpdl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZGxvLHUxNiBkaGksdTE2IHMpOworK3ZvaWQgaWRpdl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZGxvLCB1MTYgZGhpLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggaWRpdl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTE3LDcgKzk5Niw4IEBAIHZvaWQJaWRpdl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZGxvLHUxNiBkaGksdTE2IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2R4XSBbYnhdXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgYXggZHggYnhdOworIAorLXZvaWQJaWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7Cisrdm9pZCBpZGl2X2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGRsbywgdTMyIGRoaSwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkyOSw3ICsxMDA5LDggQEAgdm9pZAlpZGl2X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGRsbyx1MzIgZGhpLHUzMiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbZWF4XSBbZWR4XSBbZWJ4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlZHggZWJ4XTsKKyAKKy12b2lkCWRpdl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4ICphbCx1OCAqYWgsdTE2IGQsdTggcyk7Cisrdm9pZCBkaXZfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4ICogYWwsIHU4ICogYWgsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBkaXZfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTk0MSw3ICsxMDIyLDggQEAgdm9pZAlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2JsXVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJsXTsKKyAKKy12b2lkCWRpdl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZGxvLHUxNiBkaGksdTE2IHMpOworK3ZvaWQgZGl2X3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTE2ICogZHgsIHUxNiBkbG8sIHUxNiBkaGksIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBkaXZfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTk1Myw3ICsxMDM1LDggQEAgdm9pZAlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtkeF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGR4IGJ4XTsKKyAKKy12b2lkCWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7Cisrdm9pZCBkaXZfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiAqIGVheCwgdTMyICogZWR4LCB1MzIgZGxvLCB1MzIgZGhpLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NjcsNCArMTA1MCw0IEBAIHZvaWQJZGl2X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGRsbyx1MzIgZGhpLHUzMiBzKTsKKyAKKyAjZW5kaWYKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfUFJJTV9BU01fSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfUFJJTV9BU01fSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oIGIvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmgKK2luZGV4IGJlYTgzNTcuLjBmMGU3OGQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmgKK0BAIC00MCwxMDIgKzQwLDEwMiBAQAorICNkZWZpbmUgX19YODZFTVVfUFJJTV9PUFNfSAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKy11MTYgICAgIGFhYV93b3JkICh1MTYgZCk7CistdTE2ICAgICBhYXNfd29yZCAodTE2IGQpOworLXUxNiAgICAgYWFkX3dvcmQgKHUxNiBkKTsKKy11MTYgICAgIGFhbV93b3JkICh1OCBkKTsKKy11OCAgICAgIGFkY19ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIGFkY193b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgYWRjX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBhZGRfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBhZGRfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGFkZF9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgYW5kX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgYW5kX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBhbmRfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIGNtcF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIGNtcF93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgY21wX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBkYWFfYnl0ZSAodTggZCk7CistdTggICAgICBkYXNfYnl0ZSAodTggZCk7CistdTggICAgICBkZWNfYnl0ZSAodTggZCk7CistdTE2ICAgICBkZWNfd29yZCAodTE2IGQpOworLXUzMiAgICAgZGVjX2xvbmcgKHUzMiBkKTsKKy11OCAgICAgIGluY19ieXRlICh1OCBkKTsKKy11MTYgICAgIGluY193b3JkICh1MTYgZCk7CistdTMyICAgICBpbmNfbG9uZyAodTMyIGQpOworLXU4ICAgICAgb3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBvcl93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgb3JfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIG5lZ19ieXRlICh1OCBzKTsKKy11MTYgICAgIG5lZ193b3JkICh1MTYgcyk7CistdTMyICAgICBuZWdfbG9uZyAodTMyIHMpOworLXU4ICAgICAgbm90X2J5dGUgKHU4IHMpOworLXUxNiAgICAgbm90X3dvcmQgKHUxNiBzKTsKKy11MzIgICAgIG5vdF9sb25nICh1MzIgcyk7CistdTggICAgICByY2xfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICByY2xfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgcmNsX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHJjcl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHJjcl93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICByY3JfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgcm9sX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcm9sX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJvbF9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICByb3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICByb3Jfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgcm9yX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHNobF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHNobF93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICBzaGxfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgc2hyX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc2hyX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHNocl9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICBzYXJfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzYXJfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgc2FyX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11MTYgICAgIHNobGRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKy11MzIgICAgIHNobGRfbG9uZyAodTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKy11MTYgICAgIHNocmRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKy11MzIgICAgIHNocmRfbG9uZyAodTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKy11OCAgICAgIHNiYl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHNiYl93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgc2JiX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBzdWJfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzdWJfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHN1Yl9sb25nICh1MzIgZCwgdTMyIHMpOworLXZvaWQgICAgdGVzdF9ieXRlICh1OCBkLCB1OCBzKTsKKy12b2lkICAgIHRlc3Rfd29yZCAodTE2IGQsIHUxNiBzKTsKKy12b2lkICAgIHRlc3RfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIHhvcl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHhvcl93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgeG9yX2xvbmcgKHUzMiBkLCB1MzIgcyk7Cistdm9pZCAgICBpbXVsX2J5dGUgKHU4IHMpOworLXZvaWQgICAgaW11bF93b3JkICh1MTYgcyk7Cistdm9pZCAgICBpbXVsX2xvbmcgKHUzMiBzKTsKKy12b2lkIAlpbXVsX2xvbmdfZGlyZWN0KHUzMiAqcmVzX2xvLCB1MzIqIHJlc19oaSx1MzIgZCwgdTMyIHMpOworLXZvaWQgICAgbXVsX2J5dGUgKHU4IHMpOworLXZvaWQgICAgbXVsX3dvcmQgKHUxNiBzKTsKKy12b2lkICAgIG11bF9sb25nICh1MzIgcyk7Cistdm9pZCAgICBpZGl2X2J5dGUgKHU4IHMpOworLXZvaWQgICAgaWRpdl93b3JkICh1MTYgcyk7Cistdm9pZCAgICBpZGl2X2xvbmcgKHUzMiBzKTsKKy12b2lkICAgIGRpdl9ieXRlICh1OCBzKTsKKy12b2lkICAgIGRpdl93b3JkICh1MTYgcyk7Cistdm9pZCAgICBkaXZfbG9uZyAodTMyIHMpOworLXZvaWQgICAgaW5zIChpbnQgc2l6ZSk7Cistdm9pZCAgICBvdXRzIChpbnQgc2l6ZSk7CistdTE2ICAgICBtZW1fYWNjZXNzX3dvcmQgKGludCBhZGRyKTsKKy12b2lkICAgIHB1c2hfd29yZCAodTE2IHcpOworLXZvaWQgICAgcHVzaF9sb25nICh1MzIgdyk7CistdTE2ICAgICBwb3Bfd29yZCAodm9pZCk7CistdTMyCQlwb3BfbG9uZyAodm9pZCk7CisrICAgIHUxNiBhYWFfd29yZCh1MTYgZCk7CisrICAgIHUxNiBhYXNfd29yZCh1MTYgZCk7CisrICAgIHUxNiBhYWRfd29yZCh1MTYgZCk7CisrICAgIHUxNiBhYW1fd29yZCh1OCBkKTsKKysgICAgdTggYWRjX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBhZGNfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgYWRjX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdTggYWRkX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBhZGRfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgYWRkX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdTggYW5kX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBhbmRfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgYW5kX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdTggY21wX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBjbXBfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgY21wX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdTggZGFhX2J5dGUodTggZCk7CisrICAgIHU4IGRhc19ieXRlKHU4IGQpOworKyAgICB1OCBkZWNfYnl0ZSh1OCBkKTsKKysgICAgdTE2IGRlY193b3JkKHUxNiBkKTsKKysgICAgdTMyIGRlY19sb25nKHUzMiBkKTsKKysgICAgdTggaW5jX2J5dGUodTggZCk7CisrICAgIHUxNiBpbmNfd29yZCh1MTYgZCk7CisrICAgIHUzMiBpbmNfbG9uZyh1MzIgZCk7CisrICAgIHU4IG9yX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBvcl93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiBvcl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IG5lZ19ieXRlKHU4IHMpOworKyAgICB1MTYgbmVnX3dvcmQodTE2IHMpOworKyAgICB1MzIgbmVnX2xvbmcodTMyIHMpOworKyAgICB1OCBub3RfYnl0ZSh1OCBzKTsKKysgICAgdTE2IG5vdF93b3JkKHUxNiBzKTsKKysgICAgdTMyIG5vdF9sb25nKHUzMiBzKTsKKysgICAgdTggcmNsX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiByY2xfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiByY2xfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcmNyX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcmNyX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCByb2xfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHJvbF93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHJvbF9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggcm9yX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiByb3Jfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiByb3JfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHNobF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2hsX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgc2hsX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCBzaHJfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHNocl93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHNocl9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggc2FyX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzYXJfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiBzYXJfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHUxNiBzaGxkX3dvcmQodTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKysgICAgdTMyIHNobGRfbG9uZyh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworKyAgICB1MTYgc2hyZF93b3JkKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrICAgIHUzMiBzaHJkX2xvbmcodTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysgICAgdTggc2JiX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzYmJfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgc2JiX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdTggc3ViX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzdWJfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgc3ViX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdm9pZCB0ZXN0X2J5dGUodTggZCwgdTggcyk7CisrICAgIHZvaWQgdGVzdF93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHZvaWQgdGVzdF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IHhvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgeG9yX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHhvcl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHZvaWQgaW11bF9ieXRlKHU4IHMpOworKyAgICB2b2lkIGltdWxfd29yZCh1MTYgcyk7CisrICAgIHZvaWQgaW11bF9sb25nKHUzMiBzKTsKKysgICAgdm9pZCBpbXVsX2xvbmdfZGlyZWN0KHUzMiAqIHJlc19sbywgdTMyICogcmVzX2hpLCB1MzIgZCwgdTMyIHMpOworKyAgICB2b2lkIG11bF9ieXRlKHU4IHMpOworKyAgICB2b2lkIG11bF93b3JkKHUxNiBzKTsKKysgICAgdm9pZCBtdWxfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgaWRpdl9ieXRlKHU4IHMpOworKyAgICB2b2lkIGlkaXZfd29yZCh1MTYgcyk7CisrICAgIHZvaWQgaWRpdl9sb25nKHUzMiBzKTsKKysgICAgdm9pZCBkaXZfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBkaXZfd29yZCh1MTYgcyk7CisrICAgIHZvaWQgZGl2X2xvbmcodTMyIHMpOworKyAgICB2b2lkIGlucyhpbnQgc2l6ZSk7CisrICAgIHZvaWQgb3V0cyhpbnQgc2l6ZSk7CisrICAgIHUxNiBtZW1fYWNjZXNzX3dvcmQoaW50IGFkZHIpOworKyAgICB2b2lkIHB1c2hfd29yZCh1MTYgdyk7CisrICAgIHZvaWQgcHVzaF9sb25nKHUzMiB3KTsKKysgICAgdTE2IHBvcF93b3JkKHZvaWQpOworKyAgICB1MzIgcG9wX2xvbmcodm9pZCk7CisrICAgIHZvaWQgY3B1aWQodm9pZCk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfUFJJTV9PUFNfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfUFJJTV9PUFNfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY0NmVjOWQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaAorQEAgLTAsMCArMSw3NyBAQAorKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrKgorKyogSW5saW5lIGhlbHBlcnMgZm9yIHg4NmVtdQorKyoKKysqIENvcHlyaWdodCAoQykgMjAwOCBCYXJ0IFRyb2phbm93c2tpLCBTeW1iaW8gVGVjaG5vbG9naWVzLCBMTEMKKysqCisrKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKgorKyogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kCisrKiAgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorKyogIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKKysqICBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KKysqICBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIHRoZSBhdXRob3JzIG5vdCBiZSB1c2VkCisrKiAgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorKyogIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRoZSBhdXRob3JzIG1ha2VzIG5vCisrKiAgcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4KKysqICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorKyoKKysqICBUSEUgQVVUSE9SUyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKysqICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisrKiAgRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKKysqICBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GCisrKiAgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCisrKiAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorKyogIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrKgorKyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyoKKysqIExhbmd1YWdlOiAgICAgR05VIEMKKysqIEVudmlyb25tZW50OiAgR0NDIG9uIGkzODYgb3IgeDg2LTY0CisrKiBEZXZlbG9wZXI6ICAgIEJhcnQgVHJvamFub3dza2kKKysqCisrKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBkZWZpbmVzIGEgZmV3IHg4NiBtYWNyb3MgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUKKysqICAgICAgICAgICAgICAgZW11bGF0b3IgdG8gZXhlY3V0ZSBuYXRpdmUgaW5zdHJ1Y3Rpb25zLgorKyoKKysqICAgICAgICAgICAgICAgRm9yIFBJQyB2cyBub24tUElDIGNvZGUgcmVmZXIgdG86CisrKiAgICAgICAgICAgICAgIGh0dHA6Ly9zYW0uem95Lm9yZy9ibG9nLzIwMDctMDQtMTMtc2hsaWItd2l0aC1ub24tcGljLWNvZGUtaGF2ZS1pbmxpbmUtYXNzZW1ibHktYW5kLXBpYy1taXgtd2VsbAorKyoKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKyNpZm5kZWYgX19YODZFTVVfUFJJTV9YODZfR0NDX0gKKysjZGVmaW5lIF9fWDg2RU1VX1BSSU1fWDg2X0dDQ19ICisrCisrI2luY2x1ZGUgIng4NmVtdS90eXBlcy5oIgorKworKyNpZiAhZGVmaW5lZChfX0dOVUNfXykgfHwgIShkZWZpbmVkIChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19BTUQ2NF9fKSB8fCBkZWZpbmVkKF9fYW1kNjRfXykpCisrI2Vycm9yIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGdjYyBvbiBpMzg2IG9yIHg4Ni02NCBzeXN0ZW0KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChfX1BJQ19fKSAmJiBkZWZpbmVkKF9faTM4Nl9fKQorKworKyNkZWZpbmUgWDg2RU1VX0hBU19IV19DUFVJRCAxCisrc3RhdGljIGlubGluZSB2b2lkCisraHdfY3B1aWQodTMyICogYSwgdTMyICogYiwgdTMyICogYywgdTMyICogZCkKKyt7CisrICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlJWVieCAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgICAgICJjcHVpZCAgICAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZsICUlZWJ4LCAlMSAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgICAgICJwb3BsICUlZWJ4ICAgICAgIFxuXHQiOiI9YSIoKmEpLCAiPXIiKCpiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIj1jIigqYyksICI9ZCIoKmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiYSIoKmEpLCAiYyIoKmMpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiY2MiKTsKKyt9CisrCisrI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhIChfX1BJQ19fICYmIF9faTM4Nl9fKSAqLworKworKyNkZWZpbmUgeDg2RU1VX0hBU19IV19DUFVJRCAxCisrc3RhdGljIGlubGluZSB2b2lkCisraHdfY3B1aWQodTMyICogYSwgdTMyICogYiwgdTMyICogYywgdTMyICogZCkKKyt7CisrICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJjcHVpZCI6Ij1hIigqYSksICI9YiIoKmIpLCAiPWMiKCpjKSwgIj1kIigqZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgOiJhIigqYSksICJjIigqYykKKysgICAgICAgICAgICAgICAgICAgICAgICAgOiJjYyIpOworK30KKysKKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fUElDX18gJiYgX19pMzg2X18gKi8KKysKKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fWDg2X0dDQ19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmgKK2luZGV4IDUyY2Y4ZTQuLjZiZDA2MTEgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvcmVncy5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcmVncy5oCitAQCAtNDIsNyArNDIsNyBAQAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmIFBBQ0sKKy0jIHByYWdtYSBQQUNLCisrI3ByYWdtYSBQQUNLCisgI2VuZGlmCisgCisgLyoKK0BAIC02NCw0OCArNjQsNDggQEAKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CisgICAgIHUzMiBlX3JlZzsKKy0JfSBJMzJfcmVnX3Q7CisrfSBJMzJfcmVnX3Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1MTYgZmlsbGVyMCwgeF9yZWc7CistCX0gSTE2X3JlZ190OworKyAgICB1MTYgZmlsbGVyMCwgeF9yZWc7CisrfSBJMTZfcmVnX3Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1OCBmaWxsZXIwLCBmaWxsZXIxLCBoX3JlZywgbF9yZWc7CistCX0gSThfcmVnX3Q7CisrICAgIHU4IGZpbGxlcjAsIGZpbGxlcjEsIGhfcmVnLCBsX3JlZzsKKyt9IEk4X3JlZ190OworIAorLSNlbHNlIC8qICFfX0JJR19FTkRJQU5fXyAqLworKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIV9fQklHX0VORElBTl9fICovCisgCisgdHlwZWRlZiBzdHJ1Y3QgeworICAgICB1MzIgZV9yZWc7CistCX0gSTMyX3JlZ190OworK30gSTMyX3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTE2IHhfcmVnOworLQl9IEkxNl9yZWdfdDsKKysgICAgdTE2IHhfcmVnOworK30gSTE2X3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggbF9yZWcsIGhfcmVnOworLQl9IEk4X3JlZ190OworKyAgICB1OCBsX3JlZywgaF9yZWc7CisrfSBJOF9yZWdfdDsKKyAKKy0jZW5kaWYgLyogQklHX0VORElBTiAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQklHX0VORElBTiAqLworIAorIHR5cGVkZWYgdW5pb24geworLQlJMzJfcmVnX3QgICBJMzJfcmVnOworLQlJMTZfcmVnX3QgICBJMTZfcmVnOworLQlJOF9yZWdfdCAgICBJOF9yZWc7CistCX0gaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyOworKyAgICBJMzJfcmVnX3QgSTMyX3JlZzsKKysgICAgSTE2X3JlZ190IEkxNl9yZWc7CisrICAgIEk4X3JlZ190IEk4X3JlZzsKKyt9IGkzODZfZ2VuZXJhbF9yZWdpc3RlcjsKKyAKKyBzdHJ1Y3QgaTM4Nl9nZW5lcmFsX3JlZ3MgeworLQlpMzg2X2dlbmVyYWxfcmVnaXN0ZXIgQSwgQiwgQywgRDsKKy0JfTsKKysgICAgaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIEEsIEIsIEMsIEQ7CisrfTsKKyAKKyB0eXBlZGVmIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyBHZW5fcmVnX3Q7CisgCisgc3RydWN0IGkzODZfc3BlY2lhbF9yZWdzIHsKKy0JaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIFNQLCBCUCwgU0ksIERJLCBJUDsKKy0JdTMyIEZMQUdTOworLQl9OworKyAgICBpMzg2X2dlbmVyYWxfcmVnaXN0ZXIgU1AsIEJQLCBTSSwgREksIElQOworKyAgICB1MzIgRkxBR1M7CisrfTsKKyAKKyAvKiAgCisgICogU2VnbWVudCByZWdpc3RlcnMgaGVyZSByZXByZXNlbnQgdGhlIDE2IGJpdCBxdWFudGl0aWVzCitAQCAtMTE0LDcgKzExNCw3IEBAIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyB7CisgCisgc3RydWN0IGkzODZfc2VnbWVudF9yZWdzIHsKKyAgICAgdTE2IENTLCBEUywgU1MsIEVTLCBGUywgR1M7CistCX07CisrfTsKKyAKKyAvKiA4IGJpdCByZWdpc3RlcnMgKi8KKyAjZGVmaW5lIFJfQUggIGdlbi5BLkk4X3JlZy5oX3JlZworQEAgLTI1OCw5ICsyNTgsOSBAQCBzdHJ1Y3QgaTM4Nl9zZWdtZW50X3JlZ3MgeworICNkZWZpbmUgIElOVFJfSEFMVEVEICAgICAgICAgIDB4NAorIAorIHR5cGVkZWYgc3RydWN0IHsKKy0gICAgc3RydWN0IGkzODZfZ2VuZXJhbF9yZWdzICAgIGdlbjsKKy0gICAgc3RydWN0IGkzODZfc3BlY2lhbF9yZWdzICAgIHNwYzsKKy0gICAgc3RydWN0IGkzODZfc2VnbWVudF9yZWdzICAgIHNlZzsKKysgICAgc3RydWN0IGkzODZfZ2VuZXJhbF9yZWdzIGdlbjsKKysgICAgc3RydWN0IGkzODZfc3BlY2lhbF9yZWdzIHNwYzsKKysgICAgc3RydWN0IGkzODZfc2VnbWVudF9yZWdzIHNlZzsKKyAgICAgLyoKKyAgICAgICogTU9ERSBjb250YWlucyBpbmZvcm1hdGlvbiBvbjoKKyAgICAgICogIFJFUEUgcHJlZml4ICAgICAgICAgICAgIDIgYml0cyAgcmVwZSxyZXBuZQorQEAgLTI3MywyMSArMjczLDIxIEBAIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICogIEV4dGVybiBpbnRlcnJ1cHQgICAgICAgIDEgYml0cworICAgICAgKiAgSGFsdGVkICAgICAgICAgICAgICAgICAgMSBiaXRzCisgICAgICAqLworLSAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTsKKy0gICAgdm9sYXRpbGUgaW50ICAgICAgICAgICAgICAgIGludHI7ICAgLyogbWFzayBvZiBwZW5kaW5nIGludGVycnVwdHMgKi8KKy0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnOworKyAgICB1MzIgbW9kZTsKKysgICAgdm9sYXRpbGUgaW50IGludHI7ICAgICAgICAgIC8qIG1hc2sgb2YgcGVuZGluZyBpbnRlcnJ1cHRzICovCisrICAgIGludCBkZWJ1ZzsKKyAjaWZkZWYgREVCVUcKKy0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrOworLSAgICB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRfaXA7CistICAgIHUxNiAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZF9jczsKKy0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19wb3M7CistICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBlbmNfc3RyX3BvczsKKy0gICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9idWZbMzJdOyAvKiBlbmNvZGVkIGJ5dGUgc3RyZWFtICAqLworLSAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZF9idWZbMjU2XTsgLyogZGlzYXNzZW1ibGVkIHN0cmluZ3MgKi8KKysgICAgaW50IGNoZWNrOworKyAgICB1MTYgc2F2ZWRfaXA7CisrICAgIHUxNiBzYXZlZF9jczsKKysgICAgaW50IGVuY19wb3M7CisrICAgIGludCBlbmNfc3RyX3BvczsKKysgICAgY2hhciBkZWNvZGVfYnVmWzMyXTsgICAgICAgIC8qIGVuY29kZWQgYnl0ZSBzdHJlYW0gICovCisrICAgIGNoYXIgZGVjb2RlZF9idWZbMjU2XTsgICAgICAvKiBkaXNhc3NlbWJsZWQgc3RyaW5ncyAqLworICNlbmRpZgorLSAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgaW50bm87CistICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhZFszXTsKKy0JfSBYODZFTVVfcmVnczsKKysgICAgdTggaW50bm87CisrICAgIHU4IF9fcGFkWzNdOworK30gWDg2RU1VX3JlZ3M7CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorQEAgLTMwMCwyMCArMzAwLDIwIEBAIHByaXZhdGUJCQktIHByaXZhdGUgZGF0YSBwb2ludGVyCisgeDg2CQkJLSBYODYgcmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyB0eXBlZGVmIHN0cnVjdCB7CistCXVuc2lnbmVkIGxvbmcJbWVtX2Jhc2U7CistCXVuc2lnbmVkIGxvbmcJbWVtX3NpemU7CistCXZvaWQqICAgICAgICAJcHJpdmF0ZTsKKy0JWDg2RU1VX3JlZ3MJCXg4NjsKKy0JfSBYODZFTVVfc3lzRW52OworKyAgICB1bnNpZ25lZCBsb25nIG1lbV9iYXNlOworKyAgICB1bnNpZ25lZCBsb25nIG1lbV9zaXplOworKyAgICB2b2lkICpwcml2YXRlOworKyAgICBYODZFTVVfcmVncyB4ODY7CisrfSBYODZFTVVfc3lzRW52OworIAorICNpZmRlZiBFTkRfUEFDSworLSMgcHJhZ21hIEVORF9QQUNLCisrI3ByYWdtYSBFTkRfUEFDSworICNlbmRpZgorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorIC8qIEdsb2JhbCBlbXVsYXRvciBtYWNoaW5lIHN0YXRlLgorQEAgLTMyMSwxNyArMzIxLDE2IEBAIGV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgICogV2Uga2VlcCBpdCBnbG9iYWwgdG8gYXZvaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gdGhlIGNvZGUgZm9yIHNwZWVkLgorICAqLworIAorLWV4dGVybiAgICBYODZFTVVfc3lzRW52CV9YODZFTVVfZW52OworKyAgICBleHRlcm4gWDg2RU1VX3N5c0VudiBfWDg2RU1VX2VudjsKKyAjZGVmaW5lICAgTSAgICAgICAgICAgICBfWDg2RU1VX2VudgorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgLyogRnVuY3Rpb24gdG8gbG9nIGluZm9ybWF0aW9uIGF0IHJ1bnRpbWUgKi8KKyAKKy12b2lkCXByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CisrICAgIHZvaWQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9SRUdTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1JFR1NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oIGIvbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmgKK2luZGV4IGMwYzA5YzEuLjVhNmVmMDEgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmgKK0BAIC0zNiw3ICszNiw2IEBACisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCistCisgI2lmbmRlZiBfX1g4NkVNVV9UWVBFU19ICisgI2RlZmluZSBfX1g4NkVNVV9UWVBFU19ICisgCitAQCAtNjEsNDYgKzYwLDIxIEBACisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hY3JvcyBhbmQgdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKy0vKiBDdXJyZW50bHkgb25seSBmb3IgTGludXgvMzJiaXQgKi8KKy0jdW5kZWYgIF9fSEFTX0xPTkdfTE9OR19fCistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKE5PX0xPTkdfTE9ORykKKy0jZGVmaW5lIF9fSEFTX0xPTkdfTE9OR19fCistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGludC5oPgorIAorLS8qIFRha2VuIGZyb20gWG1kLmggKi8KKy0jdW5kZWYgTlVNMzIKKy0jaWYgZGVmaW5lZCAoX0xQNjQpIHx8IFwKKy0gICAgZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgXAorLSAgICBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKGlhNjQpIHx8IFwKKy0gICAgZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgXAorLSAgICBkZWZpbmVkKF9fczM5MHhfXykgfHwgXAorLSAgICAoZGVmaW5lZChfX2hwcGFfXykgJiYgZGVmaW5lZChfX0xQNjQpKSB8fCBcCistICAgIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKGFtZDY0KSB8fCBcCistICAgIChkZWZpbmVkKF9fc2dpKSAmJiAoX01JUFNfU1pMT05HID09IDY0KSkKKy0jZGVmaW5lIE5VTTMyIGludAorLSNlbHNlCistI2RlZmluZSBOVU0zMiBsb25nCistI2VuZGlmCisrdHlwZWRlZiB1aW50OF90IHU4OworK3R5cGVkZWYgdWludDE2X3QgdTE2OworK3R5cGVkZWYgdWludDMyX3QgdTMyOworK3R5cGVkZWYgdWludDY0X3QgdTY0OworIAorLXR5cGVkZWYgdW5zaWduZWQgY2hhciAJCXU4OworLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgCQl1MTY7CistdHlwZWRlZiB1bnNpZ25lZCBOVU0zMiAJCXUzMjsKKy0jaWZkZWYgX19IQVNfTE9OR19MT05HX18KKy10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAJdTY0OworLSNlbmRpZgorK3R5cGVkZWYgaW50OF90IHM4OworK3R5cGVkZWYgaW50MTZfdCBzMTY7CisrdHlwZWRlZiBpbnQzMl90IHMzMjsKKyt0eXBlZGVmIGludDY0X3QgczY0OworIAorLXR5cGVkZWYgY2hhciAJCQkJczg7CistdHlwZWRlZiBzaG9ydCAJCQkJczE2OworLXR5cGVkZWYgTlVNMzIgCQkJCXMzMjsKKy0jaWZkZWYgX19IQVNfTE9OR19MT05HX18KKy10eXBlZGVmIGxvbmcgbG9uZyAJCQlzNjQ7CistI2VuZGlmCistCistdHlwZWRlZiB1bnNpZ25lZCBpbnQJCQl1aW50OworLXR5cGVkZWYgaW50IAkJCQlzaW50OworK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CisrdHlwZWRlZiBpbnQgc2ludDsKKyAKKyB0eXBlZGVmIHUxNiBYODZFTVVfcGlvQWRkcjsKKyAKKy0jdW5kZWYgTlVNMzIKKy0KKy0jZW5kaWYJLyogX19YODZFTVVfVFlQRVNfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfVFlQRVNfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmggYi9saWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oCitpbmRleCAxMTJlZTM2Li5mMTFkYzEwIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaAorQEAgLTM4LDcgKzM4LDYgQEAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy0KKyAjaWZuZGVmIF9fWDg2RU1VX1g4NkVNVUlfSAorICNkZWZpbmUgX19YODZFTVVfWDg2RU1VSV9ICisgCitAQCAtNzQsMjkgKzczLDI4IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisrI2VuZGlmCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5saW5lIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistZXh0ZXJuIHU4ICAJKFg4NkFQSVAgc3lzX3JkYikodTMyIGFkZHIpOworLWV4dGVybiB1MTYgCShYODZBUElQIHN5c19yZHcpKHUzMiBhZGRyKTsKKy1leHRlcm4gdTMyIAkoWDg2QVBJUCBzeXNfcmRsKSh1MzIgYWRkcik7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dyYikodTMyIGFkZHIsdTggdmFsKTsKKy1leHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3J3KSh1MzIgYWRkcix1MTYgdmFsKTsKKy1leHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3JsKSh1MzIgYWRkcix1MzIgdmFsKTsKKysgICAgZXh0ZXJuIHU4KFg4NkFQSVAgc3lzX3JkYikgKHUzMiBhZGRyKTsKKysgICAgZXh0ZXJuIHUxNihYODZBUElQIHN5c19yZHcpICh1MzIgYWRkcik7CisrICAgIGV4dGVybiB1MzIoWDg2QVBJUCBzeXNfcmRsKSAodTMyIGFkZHIpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3JiKSAodTMyIGFkZHIsIHU4IHZhbCk7CisrICAgIGV4dGVybiB2b2lkIChYODZBUElQIHN5c193cncpICh1MzIgYWRkciwgdTE2IHZhbCk7CisrICAgIGV4dGVybiB2b2lkIChYODZBUElQIHN5c193cmwpICh1MzIgYWRkciwgdTMyIHZhbCk7CisgCistZXh0ZXJuIHU4ICAJKFg4NkFQSVAgc3lzX2luYikoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistZXh0ZXJuIHUxNiAJKFg4NkFQSVAgc3lzX2ludykoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistZXh0ZXJuIHUzMiAJKFg4NkFQSVAgc3lzX2lubCkoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dGIpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTggdmFsKTsKKy1leHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0dykoWDg2RU1VX3Bpb0FkZHIgYWRkcix1MTYgdmFsKTsKKy1leHRlcm4gdm9pZAkoWDg2QVBJUCBzeXNfb3V0bCkoWDg2RU1VX3Bpb0FkZHIgYWRkcix1MzIgdmFsKTsKKysgICAgZXh0ZXJuIHU4KFg4NkFQSVAgc3lzX2luYikgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICBleHRlcm4gdTE2KFg4NkFQSVAgc3lzX2ludykgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICBleHRlcm4gdTMyKFg4NkFQSVAgc3lzX2lubCkgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0YikgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHU4IHZhbCk7CisrICAgIGV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXR3KSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCk7CisrICAgIGV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXRsKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfWDg2RU1VSV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9YODZFTVVJX0ggKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvYXItZnJvbS1lbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9hci1mcm9tLWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGNiYzcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvYXItZnJvbS1lbnYucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRml4IGNyb3NzIGxpbmsgdXNpbmcgaG9zdC1jcm9zcyBhcgorCitJZiBidWlsZGluZyBvbiAzMmJpdCBob3N0IGFuZCBjcmVhdGluZyA2NGJpdCBsaWJyYXJpZXMsIHRoZSB0YXJnZXQKK3BhY2thZ2UgYnVpbGRzIHNob3VsZCBub3QgaW52b2tlIHRoZSAzMmJpdCBob3N0cydzIGFyLiAgU3BlY2lmaWNhbGx5Cit5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBsaWtlOgorCit4ODZfNjQtbGludXgtZ2NjICAtbTY0IC0tc3lzcm9vdD0vb3B0L3FlbXV4ODYtNjQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYtNjQgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLUxsaWJzL3g4NmVtdSB2ODZfeDg2ZW11Lm8gdjg2X21lbS5vIHY4Nl9jb21tb24ubyAgdjg2Lm8gLWx4ODZlbXUgLW8gdjg2ZAorbGlicy94ODZlbXUvbGlieDg2ZW11LmE6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEFyY2hpdmUgaGFzIG5vIGluZGV4OyBydW4gcmFubGliIHRvIGFkZCBvbmUKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgbGlicy94ODZlbXUvTWFrZWZpbGUgfCAgICA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvbGlicy94ODZlbXUvTWFrZWZpbGUKKysrKyBiL2xpYnMveDg2ZW11L01ha2VmaWxlCitAQCAtMSw3ICsxLDExIEBACisgT0JKUyA9IGRlY29kZS5vIGZwdS5vIG9wcy5vIG9wczIubyBwcmltX29wcy5vIHN5cy5vCisgCisraWZlcSAoJChBUiksKQorKwlBUiA9IGFyCisrZW5kaWYKKysKKyBsaWJ4ODZlbXUuYTogJChPQkpTKQorLQlhciBydiAkQCAkKworKwkkKEFSKSBydiAkQCAkKworIAorICUubzogJS5jCisgCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvZmJzZXR1cCBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2Zic2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmE0MDljYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2Zic2V0dXAKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2ggCisKKy9zYmluL21vZHByb2JlIHV2ZXNhZmIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZiBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzc4OTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvdXZlc2FmYi5jb25mCkBAIC0wLDAgKzEsMiBAQAorIyBMb2FkIHV2ZXNhZmIua28gYXQgYm9vdAordXZlc2FmYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MDIwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZF8wLjEuMTAuYmIKQEAgLTAsMCArMSw2OSBAQAorU1VNTUFSWSA9ICJVc2VyIHN1cHBvcnQgYmluYXJ5IGZvciB0aGUgdXZlc2FmYiBrZXJuZWwgbW9kdWxlIgorSE9NRVBBR0UgPSAiaHR0cDovL2Rldi5nZW50b28ub3JnL35zcG9jay9wcm9qZWN0cy91dmVzYWZiLyIKKworIyB0aGUgY29weXJpZ2h0IGluZm8gaXMgYXQgdGhlIGJvdHRvbSBvZiBSRUFETUUsIGV4cGVjdCBicmVhaworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9OTRhYzE5NzFlNGYyMzA5ZGMzMjJkNTk4ZTdiMWY3ZGQiCisKK0RFUEVORFMgPSAidmlydHVhbC9rZXJuZWwiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLXV2ZXNhZmIiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGlzdGZpbGVzLmdlbnRvby5vcmcvZGlzdGZpbGVzLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Zic2V0dXAgXAorICAgICAgICAgICBmaWxlOi8vdXZlc2FmYi5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2FyLWZyb20tZW52LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTFjNzkyYmE3Yjg3NGFkOGM0M2YwZDNkYTRjZmFiZTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjM0OTY0YWUxOGVmNjhjODQ5M2FkZDJjZTE1MGUzYjQ1MDJiYWRlYjBkOTE5NGI0YmQ4MTI0MWQyNWU2NzM1YyIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Nnx4ODZfNjQpLiotbGludXgnCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJmYnNldHVwIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMCBTIC4iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJLi9jb25maWd1cmUgLS13aXRoLXg4NmVtdQorfQorCitkb19jb21waWxlICgpIHsKKwlLRElSPSIke1NUQUdJTkdfRElSX0hPU1R9L3VzciIgbWFrZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIHY4NmQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKworICAgICAgICAjIE9ubHkgaW5zdGFsbCBmYnNldHVwIHNjcmlwdCBpZiAnc3lzdmluaXQnIGlzIGluIERJU1RST19GRUFUVVJFUworICAgICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9mYnNldHVwICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9mYnNldHVwCisgICAgICAgIGZpCisKKyAgICAgICAgIyBJbnN0YWxsIHN5c3RlbWQgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZAorICAgICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdXZlc2FmYi5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisgICAgICAgIGZpCit9CisKKyMgQXMgdGhlIHJlY2lwZSBkb2Vzbid0IGluaGVyaXQgc3lzdGVtZC5iYmNsYXNzLCB3ZSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlCisjIG1hbnVhbGx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHBvc3RpbnN0L3ByZWluc3QgZ2VuZXJhdGVkLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitERVBFTkRTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUnLCcnLGQpfSIKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQgc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayBmYnNldHVwLnNlcnZpY2UKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzEuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLXVpXzAuNi4zMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWE0ZDcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzEuYmIKQEAgLTAsMCArMSw3MiBAQAorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY29tbW9uL2FkZHJlc3MuaDtlbmRsaW5lPTI1O21kNT1iMWQxZDJjZGExYzA3ZWI4NDhlYTdkNjIxNTcxMmQ5ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jb3JlL2Rucy5oO2VuZGxpbmU9MjM7bWQ1PTZmZTgyNTkwYjgxYWEwZGRlYTUwOTViNTQ4ZTJmZGNiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWRhZW1vbi9tYWluLmM7ZW5kbGluZT0yMTttZDU9OWVlNzczNjhjNTQwN2FmNzdjYWFlZjFiMDcyODU5NjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY2xpZW50L2NsaWVudC5oO2VuZGxpbmU9MjM7bWQ1PWY0YWM3NDFhMjVjNGY0MzQwMzliYTNlMThjODY3NGNmIgorCityZXF1aXJlIGF2YWhpLmluYworCitpbmhlcml0IHB5dGhvbi1kaXIgcHl0aG9ubmF0aXZlCisKK1BBQ0tBR0VDT05GSUcgPz89ICJweXRob24iCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS1lbmFibGUtcHl0aG9uLC0tZGlzYWJsZS1weXRob24scHl0aG9uLW5hdGl2ZSBweXRob24iCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmYyMjc0NWI4ZjczNjhhZDVhMGEzZmRkYWMzNDNmMmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM3MjcxOWIyNGUyZGQ3NWRlNmY1OWJiMTMxNWU2MDBkYjRmZDA5MjgwNWJkMTIwMWVkMGNiNjUxYTJkYWI0OCIKKworREVQRU5EUyArPSAiYXZhaGkgZ3RrKyBsaWJnbGFkZSIKKworQVZBSElfR1RLID0gIi0tZW5hYmxlLWd0ayAtLWRpc2FibGUtZ3RrMyIKKworUyA9ICIke1dPUktESVJ9L2F2YWhpLSR7UFZ9IgorCitQQUNLQUdFUyA9ICIke1BOfSAke1BOfS11dGlscyAke1BOfS1kYmcgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1kb2MgcHl0aG9uLWF2YWhpIGF2YWhpLWRpc2NvdmVyIGF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJhdmFoaS11aSouc28uKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJhdmFoLXVpKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGliYXZhaGktdWkuYSIKKworRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9L2IqICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2IqIgorCitGSUxFU19weXRob24tYXZhaGkgPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYXZhaGkgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYXZhaGlfZGlzY292ZXIiCitGSUxFU19hdmFoaS1kaXNjb3ZlciA9ICIke2JpbmRpcn0vYXZhaGktZGlzY292ZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvYXZhaGktZGlzY292ZXIuZGVza3RvcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludGVyZmFjZXMvYXZhaGktZGlzY292ZXIqIgorRklMRVNfYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZSA9ICIke2JpbmRpcn0vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXZhaGkvaW50ZXJmYWNlcy9hdmFoaS1kaXNjb3Zlci5nbGFkZSIKKworUkRFUEVORFNfYXZhaGktZGlzY292ZXIgPSAicHl0aG9uLWF2YWhpIHB5dGhvbi1weWd0ayIKK1JERVBFTkRTX3B5dGhvbi1hdmFoaSA9ICJweXRob24tY29yZSBweXRob24tZGJ1cyIKKworCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gJHtEfSR7c3lzY29uZmRpcn0gLXJmCisJcm0gJHtEfSR7YmFzZV9saWJkaXJ9IC1yZgorCXJtICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0gLXJmCisJIyBUaGUgJHtzeXN0ZW1kX3VuaXRkaXJ9IGlzIC9saWIvc3lzdGVtZCwgc28gd2UgbmVlZCBybWRpciAvbGliLAorCSMgYnV0IG5vdCAke2Jhc2VfbGliZGlyfSBoZXJlLiBBbmQgdGhlIC9saWIgbWF5IG5vdCBleGlzdAorCSMgd2hpdGhvdXQgc3lzdGVtZC4KKwlbICEgLWQgJHtEfS9saWIgXSB8fCBybWRpciAke0R9L2xpYiAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eQorCXJtICR7RH0ke2JpbmRpcn0vYXZhaGktYioKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLXAqCisJcm0gJHtEfSR7YmluZGlyfS9hdmFoaS1yKgorCXJtICR7RH0ke2JpbmRpcn0vYXZhaGktcyoKKwlybSAke0R9JHtpbmNsdWRlZGlyfS9hdmFoaS1jKiAtcmYKKwlybSAke0R9JHtpbmNsdWRlZGlyfS9hdmFoaS1nKiAtcmYKKwlybSAke0R9JHtsaWJkaXJ9L2xpYmF2YWhpLWMqCisJcm0gJHtEfSR7bGliZGlyfS9saWJhdmFoaS1nKgorCXJtICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2F2YWhpLWMqCisJcm0gJHtEfSR7bGliZGlyfS9wa2djb25maWcvYXZhaGktZyoKKwlybSAke0R9JHtzYmluZGlyfSAtcmYKKwlybSAke0R9JHtkYXRhZGlyfS9hdmFoaS9hKgorCXJtICR7RH0ke2RhdGFkaXJ9L2F2YWhpL3MqCisJcm0gJHtEfSR7ZGF0YWRpcn0vbG9jYWxlLyAtcmYKKwlybSAke0R9JHtkYXRhZGlyfS9kYnVzKiAtcmYKKwlybSAke0R9JHttYW5kaXJ9L21hbjEvYSoKKwlybSAke0R9JHttYW5kaXJ9L21hbjUgLXJmCisJcm0gJHtEfSR7bWFuZGlyfS9tYW44IC1yZgorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTE5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYwpAQCAtMCwwICsxLDE1OCBAQAorU1VNTUFSWSA9ICJBdmFoaSBJUHY0TEwgbmV0d29yayBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gZGFlbW9uIgorREVTQ1JJUFRJT04gPSAnQXZhaGkgaXMgYSBmdWxseSBMR1BMIGZyYW1ld29yayBmb3IgTXVsdGljYXN0IEROUyBTZXJ2aWNlIERpc2NvdmVyeS4gSXQgXAorYWxsb3dzIHByb2dyYW1zIHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIHNlcnZpY2VzIGFuZCBob3N0cyBydW5uaW5nIG9uIGEgbG9jYWwgbmV0d29yayBcCit3aXRoIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIFRoaXMgdG9vbCBpbXBsZW1lbnRzIElQdjRMTCwgIkR5bmFtaWMgQ29uZmlndXJhdGlvbiBvZiBcCitJUHY0IExpbmstTG9jYWwgQWRkcmVzc2VzIiAoSUVURiBSRkMzOTI3KSwgYSBwcm90b2NvbCBmb3IgYXV0b21hdGljIElQIGFkZHJlc3MgXAorY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsaW5rLWxvY2FsIDE2OS4yNTQuMC4wLzE2IHJhbmdlIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgY2VudHJhbCBcCitzZXJ2ZXIuJworQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4iCitIT01FUEFHRSA9ICJodHRwOi8vYXZhaGkub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYXZhaGkub3JnL3JlcG9ydCIKK1NFQ1RJT04gPSAibmV0d29yayIKKworIyBtYWpvciBwYXJ0IGlzIHVuZGVyIExHUEx2Mi4xKywgYnV0IHNldmVyYWwgLmR0ZCwgLnhzbCwgaW5pdHNjcmlwdHMgYW5kCisjIHB5dGhvbiBzY3JpcHRzIGFyZSB1bmRlciBHUEx2MisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorCitJTkNfUFIgPSAicjExIgorCitERVBFTkRTID0gImV4cGF0IGxpYmNhcCBsaWJkYWVtb24gZGJ1cyBnbGliLTIuMCIKKworU1JDX1VSSSA9ICJodHRwOi8vYXZhaGkub3JnL2Rvd25sb2FkL2F2YWhpLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgZmlsZTovLzAwYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgZmlsZTovLzk5YXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgZmlsZTovL2luaXRzY3JpcHQucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9hdmFoaV9maXhfaW5zdGFsbF9pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfYXV0b21ha2VfMS4xMi54LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vb3V0LW9mLXRyZWUucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly8wMDAxLWF2YWhpLWZpeC1hdmFoaS1zdGF0dXMtY29tbWFuZC1lcnJvci1wcm9tcHQucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9yZXVzZXBvcnQtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICIKKworVVNFUkFERF9QQUNLQUdFUyA9ICJhdmFoaS1kYWVtb24gYXZhaGktYXV0b2lwZCIKK1VTRVJBRERfUEFSQU1fYXZhaGktZGFlbW9uID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9hdmFoaS1kYWVtb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLXNoZWxsIC9iaW4vZmFsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGF2YWhpIgorCitVU0VSQUREX1BBUkFNX2F2YWhpLWF1dG9pcGQgPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvcnVuL2F2YWhpLWF1dG9pcGQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLXNoZWxsIC9iaW4vZmFsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1jIFwiQXZhaGkgYXV0b2lwIGRhZW1vblwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpLWF1dG9pcGQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBnZXR0ZXh0IHVzZXJhZGQKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIFwKKyAgICAgICAgICAgICAtLXdpdGgtYXZhaGktcHJpdi1hY2Nlc3MtZ3JvdXA9YWRtIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtc3RhY2stcHJvdGVjdG9yIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtZ2RibSBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLW1vbm8gXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1tb25vZG9jIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtcXQzIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtcXQ0IFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtcHl0aG9uIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtZG94eWdlbi1kb2MgXAorICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1NZU1ZJTklUfSBcCisgICAgICAgICAgICAgJHtFWFRSQV9PRUNPTkZfU1lTVEVNRH0gXAorICAgICAgICAgICAgICR7QVZBSElfR1RLfSBcCisgICAgICAgICAgICIKKworIyBUaGUgZGlzdHJvIGNob2ljZSBkZXRlcm1pbmVzIHdoYXQgaW5pdCBzY3JpcHRzIGFyZSBpbnN0YWxsZWQKK0VYVFJBX09FQ09ORl9TWVNWSU5JVCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCctLXdpdGgtZGlzdHJvPWRlYmlhbicsJy0td2l0aC1kaXN0cm89bm9uZScsZCl9IgorRVhUUkFfT0VDT05GX1NZU1RFTUQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCctLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8nLCctLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXInLGQpfSIKKworQVZBSElfR1RLID89ICItLWRpc2FibGUtZ3RrIC0tZGlzYWJsZS1ndGszIgorCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxpbnRsIgorTERGTEFHU19hcHBlbmRfdWNsaW51eC11Y2xpYmMgPSAiIC1saW50bCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2VkICdzOkFNX0NIRUNLX1BZTU9EOmVjaG8gIm5vIHB5bW9kIiAjQU1fQ0hFQ0tfUFlNT0Q6ZycgLWkgJHtTfS9jb25maWd1cmUuYWMKK30KKworCitQQUNLQUdFUyA9KyAiYXZhaGktZGFlbW9uIGxpYmF2YWhpLWNvbW1vbiBsaWJhdmFoaS1jb3JlIGxpYmF2YWhpLWNsaWVudCBhdmFoaS1kbnNjb25mZCBsaWJhdmFoaS1nbGliIGxpYmF2YWhpLXVpIGF2YWhpLWF1dG9pcGQgYXZhaGktdXRpbHMiCisKKyMgQXMgYXZhaGkgZG9lc24ndCBwdXQgYW55IGZpbGVzIGludG8gUE4sIGNsZWFyIHRoZSBmaWxlcyBsaXN0IHRvIGF2b2lkIHByb2JsZW1zCisjIGlmIGV4dHJhIGxpYnJhcmllcyBhcHBlYXIuCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19hdmFoaS1hdXRvaXBkID0gIiR7c2JpbmRpcn0vYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYXZhaGkvYXZhaGktYXV0b2lwZC5hY3Rpb24gXAorICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RoY3AvKi9hdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGhjcGMuZC8wMGF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3VkaGNwYy5kLzk5YXZhaGktYXV0b2lwZCIKK0ZJTEVTX2xpYmF2YWhpLWNvbW1vbiA9ICIke2xpYmRpcn0vbGliYXZhaGktY29tbW9uLnNvLioiCitGSUxFU19saWJhdmFoaS1jb3JlID0gIiR7bGliZGlyfS9saWJhdmFoaS1jb3JlLnNvLioiCitGSUxFU19hdmFoaS1kYWVtb24gPSAiJHtzYmluZGlyfS9hdmFoaS1kYWVtb24gXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYXZhaGkvYXZhaGktZGFlbW9uLmNvbmYgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYXZhaGkvaG9zdHMgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYXZhaGkvc2VydmljZXMgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGJ1cy0xIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9hdmFoaS1kYWVtb24gXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXZhaGkvaW50cm9zcGVjdGlvbi8qLmludHJvc3BlY3QgXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXZhaGkvYXZhaGktc2VydmljZS5kdGQgXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXZhaGkvc2VydmljZS10eXBlcyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIgorRklMRVNfbGliYXZhaGktY2xpZW50ID0gIiR7bGliZGlyfS9saWJhdmFoaS1jbGllbnQuc28uKiIKK0ZJTEVTX2xpYmF2YWhpLXVpID0gIiR7bGliZGlyfS9saWJhdmFoaS11aS5zby4qIgorRklMRVNfYXZhaGktZG5zY29uZmQgPSAiJHtzYmluZGlyfS9hdmFoaS1kbnNjb25mZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWRuc2NvbmZkLmFjdGlvbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9hdmFoaS1kbnNjb25mZCIKK0ZJTEVTX2xpYmF2YWhpLWdsaWIgPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWdsaWIuc28uKiIKK0ZJTEVTX2xpYmF2YWhpLWdvYmplY3QgPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWdvYmplY3Quc28uKiIKK0ZJTEVTX2F2YWhpLXV0aWxzID0gIiR7YmluZGlyfS9hdmFoaS0qIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAiYXZhaGktZGFlbW9uICg9ICR7RVhURU5EUEtHVn0pIGxpYmF2YWhpLWNvcmUgKD0gJHtFWFRFTkRQS0dWfSkgbGliYXZhaGktY2xpZW50ICg9ICR7RVhURU5EUEtHVn0pIgorCisjIHVjbGliYyBoYXMgbm8gbnNzCitSUkVDT01NRU5EU19hdmFoaS1kYWVtb25fYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGxpYm5zcy1tZG5zIgorUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGxpYm5zcy1tZG5zIgorCitSUkVDT01NRU5EU19hdmFoaS1kZXYgPSAiZXhwYXQtZGV2IGxpYmNhcC1kZXYgbGliZGFlbW9uLWRldiBkYnVzLWRldiBnbGliLTIuMC1kZXYgdXBkYXRlLXJjLmQtZGV2IgorUlJFQ09NTUVORFNfYXZhaGktZGV2X2FwcGVuZF9saWJjLWdsaWJjID0gIiBnZXR0ZXh0LWRldiIKKworUlJFQ09NTUVORFNfYXZhaGktZGV2W25vZGVwcnJlY3NdID0gIjEiCisKK0NPTkZGSUxFU19hdmFoaS1kYWVtb24gPSAiJHtzeXNjb25mZGlyfS9hdmFoaS9hdmFoaS1kYWVtb24uY29uZiIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJhdmFoaS1kYWVtb24gYXZhaGktZG5zY29uZmQiCitJTklUU0NSSVBUX05BTUVfYXZhaGktZGFlbW9uID0gImF2YWhpLWRhZW1vbiIKK0lOSVRTQ1JJUFRfUEFSQU1TX2F2YWhpLWRhZW1vbiA9ICJkZWZhdWx0cyAyMSAxOSIKK0lOSVRTQ1JJUFRfTkFNRV9hdmFoaS1kbnNjb25mZCA9ICJhdmFoaS1kbnNjb25mZCIKK0lOSVRTQ1JJUFRfUEFSQU1TX2F2YWhpLWRuc2NvbmZkID0gImRlZmF1bHRzIDIyIDE5IgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGRvbid0IGluc3RhbGwgL3Zhci9ydW4gd2hlbiBwb3B1bGF0aW5nIHJvb3Rmcy4gRG8gaXQgdGhyb3VnaCB2b2xhdGlsZQorCSMgL3Zhci9ydW4gb2YgY3VycmVudCB2ZXJzaW9uIGlzIGVtcHR5LCBzbyBqdXN0IHJlbW92ZSBpdC4KKwkjIGlmIC92YXIvcnVuIGJlY29tZSBub24tZW1wdHkgaW4gdGhlIGZ1dHVyZSwgbmVlZCB0byBpbnN0YWxsIGl0IHZpYSB2b2xhdGlsZQorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtsb2NhbHN0YXRlZGlyfQorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9kYnVzLTEvaW50ZXJmYWNlcworCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2RhdGFkaXJ9L2RidXMtMQorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2F2YWhpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kCisJaW5zdGFsbCAke1dPUktESVJ9LzAwYXZhaGktYXV0b2lwZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCWluc3RhbGwgJHtXT1JLRElSfS85OWF2YWhpLWF1dG9pcGQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQKK30KKworIyBBdCB0aGUgdGltZSB0aGUgcG9zdGluc3QgcnVucywgZGJ1cyBtaWdodCBub3QgYmUgc2V0dXAgc28gb25seSByZXN0YXJ0IGlmIHJ1bm5pbmcgCisjIERvbid0IGV4aXQgZWFybHksIGJlY2F1c2UgdXBkYXRlLXJjLmQgbmVlZHMgdG8gcnVuIHN1YnNlcXVlbnRseS4KKworcGtnX3Bvc3RpbnN0X2F2YWhpLWRhZW1vbiAoKSB7CitpZiBbIC16ICIkRCIgXTsgdGhlbgorCWtpbGxhbGwgLXEgLUhVUCBkYnVzLWRhZW1vbiB8fCB0cnVlCitmaQorfQorCitwa2dfcG9zdHJtX2F2YWhpLWRhZW1vbiAoKSB7CisJZGVsdXNlciBhdmFoaSB8fCB0cnVlCisJZGVsZ3JvdXAgYXZhaGkgfHwgdHJ1ZQorfQorCitwa2dfcG9zdHJtX2F2YWhpLWF1dG9pcGQgKCkgeworCWRlbHVzZXIgYXZhaGktYXV0b2lwZCB8fCB0cnVlCisJZGVsZ3JvdXAgYXZhaGktYXV0b2lwZCB8fCB0cnVlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpXzAuNi4zMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGlfMC42LjMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzk2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpXzAuNi4zMS5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIGF2YWhpLmluYworCitpbmhlcml0IHN5c3RlbWQKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1kYWVtb24gJHtQTn0tZG5zY29uZmQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tZGFlbW9uID0gImF2YWhpLWRhZW1vbi5zZXJ2aWNlIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWRuc2NvbmZkID0gImF2YWhpLWRuc2NvbmZkLnNlcnZpY2UiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmg7ZW5kbGluZT0yNTttZDU9YjFkMWQyY2RhMWMwN2ViODQ4ZWE3ZDYyMTU3MTJkOWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY29yZS9kbnMuaDtlbmRsaW5lPTIzO21kNT02ZmU4MjU5MGI4MWFhMGRkZWE1MDk1YjU0OGUyZmRjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1kYWVtb24vbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTllZTc3MzY4YzU0MDdhZjc3Y2FhZWYxYjA3Mjg1OTY5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNsaWVudC9jbGllbnQuaDtlbmRsaW5lPTIzO21kNT1mNGFjNzQxYTI1YzRmNDM0MDM5YmEzZTE4Yzg2NzRjZiIKKworUFIgPSAiJHtJTkNfUFJ9LjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZjIyNzQ1YjhmNzM2OGFkNWEwYTNmZGRhYzM0M2YyZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzcyNzE5YjI0ZTJkZDc1ZGU2ZjU5YmIxMzE1ZTYwMGRiNGZkMDkyODA1YmQxMjAxZWQwY2I2NTFhMmRhYjQ4IgorCitERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUiCisKK1BBQ0tBR0VTID0rICJsaWJhdmFoaS1nb2JqZWN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWF2YWhpLWZpeC1hdmFoaS1zdGF0dXMtY29tbWFuZC1lcnJvci1wcm9tcHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwMDEtYXZhaGktZml4LWF2YWhpLXN0YXR1cy1jb21tYW5kLWVycm9yLXByb21wdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkwZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWF2YWhpLWZpeC1hdmFoaS1zdGF0dXMtY29tbWFuZC1lcnJvci1wcm9tcHQucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBmNzc0YWMyNWY0MzZhNzgyY2NjY2M0ZGJlNjgzNzhhNjg0NTk2Nzk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDcgTm92IDIwMTMgMTQ6MzY6MjggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYXZhaGk6IGZpeCBhdmFoaSBzdGF0dXMgY29tbWFuZCBlcnJvciBwcm9tcHQKKworc2VydmljZSAtLXN0YXR1cy1hbGwgY29tbWFuZCB3aWxsIGRpc3BsYXkgd3Jvbmcgc3RhdHVzIGZvciBhdmFoaS1kYWVtb24uCitUaGlzIGNvbW1pdCBmaXggdGhpcyBlcnJvciBwcm9tcHQgYW5kIG1ha2Ugc2VydmljZSBkaXNwbGF5IHJpZ2h0IHN0YXR1cworZm9yIGF2YWhpLWRhZW1vbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluIHwgICAxNCArKysrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitpbmRleCA0NzkzYjQ2Li40OWVjMzU4IDEwMDc1NQorLS0tIGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCisrKysgYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4KK0BAIC0xNTMsNyArMTUzLDE1IEBAIGRfcmVsb2FkKCkgeworICMgICAgICAgRnVuY3Rpb24gdGhhdCBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBkYWVtb24vc2VydmljZS4KKyAjCisgZF9zdGF0dXMoKSB7CistICAgICREQUVNT04gLWMgJiYgZWNobyAiJERFU0MgaXMgcnVubmluZyIgfHwgZWNobyAiJERFU0MgaXMgbm90IHJ1bm5pbmciCisrICAgICREQUVNT04gLWMKKysgICAgc3RhdHVzPSQ/CisrICAgIGlmIFsgJHN0YXR1cyA9IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAiJERFU0MgaXMgcnVubmluZyIKKysgICAgICAgIHJldHVybiAwCisrICAgIGVsc2UKKysgICAgICAgIGVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nIgorKyAgICAgICAgcmV0dXJuIDMKKysgICAgZmkKKyB9CisgCisgY2FzZSAiJDEiIGluCitAQCAtMTgyLDkgKzE5MCw5IEBAIGNhc2UgIiQxIiBpbgorICAgICAgICAgZF9zdGF0dXMKKyAJOzsKKyAgICAgKikKKy0gICAgICAgIGVjaG8gIlVzYWdlOiAkU0NSSVBUTkFNRSB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxyZWxvYWR9IiA+JjIKKysgICAgICAgIGVjaG8gIlVzYWdlOiAkU0NSSVBUTkFNRSB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxyZWxvYWR8c3RhdHVzfSIgPiYyCisgICAgICAgICBleGl0IDEKKyAgICAgICAgIDs7CisgZXNhYworIAorLWV4aXQgMAorK2V4aXQgJD8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwYXZhaGktYXV0b2lwZCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDBhdmFoaS1hdXRvaXBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWI4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwYXZhaGktYXV0b2lwZApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB1ZGhjcGMiICYmIGV4aXQgMQorCitjYXNlICIkMSIgaW4KKworCWRlY29uZmlnfHJlbmV3fGJvdW5kKQorCQkvdXNyL3NiaW4vYXZhaGktYXV0b2lwZCAtayAkaW50ZXJmYWNlIDI+IC9kZXYvbnVsbAorCQk7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy85OWF2YWhpLWF1dG9pcGQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzk5YXZhaGktYXV0b2lwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzRjZGFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy85OWF2YWhpLWF1dG9pcGQKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1sgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdWRoY3BjIiAmJiBleGl0IDEKKworY2FzZSAiJDEiIGluCisKKwlsZWFzZWZhaWwpCisJCS91c3Ivc2Jpbi9hdmFoaS1hdXRvaXBkIC13RCAkaW50ZXJmYWNlIDI+IC9kZXYvbnVsbAorCQk7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9hdmFoaV9maXhfaW5zdGFsbF9pc3N1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmMjBlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeGVzIHRoaXMgaW5zdGFsbCBpc3N1ZQorI3wgL2Jpbi9zaDogbGluZSAwOiBjZDogL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay9pNTg2LXBva3ktbGludXgvYXZhaGktMC42LjMxLXIzLjAvaW1hZ2UvL3Vzci9iaW46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLXV0aWxzL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmFtCitAQCAtNTQsNiArNTQsNyBAQCBhdmFoaV9zZXRfaG9zdF9uYW1lX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTCisgYXZhaGlfc2V0X2hvc3RfbmFtZV9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorIAorIGluc3RhbGwtZXhlYy1sb2NhbDoKKysJJChNS0RJUl9QKSAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisgCWNkICQoREVTVERJUikvJChiaW5kaXIpICYmIFwKKyAJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lIGF2YWhpLXJlc29sdmUtYWRkcmVzcyBhdmFoaS1icm93c2UtZG9tYWlucyBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgYXZhaGktcHVibGlzaC1zZXJ2aWNlICYmIFwKKyAJCSQoTE5fUykgYXZhaGktcmVzb2x2ZSBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSAmJiBcCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktdXRpbHMvTWFrZWZpbGUuaW4KKysrKyBhdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvTWFrZWZpbGUuaW4KK0BAIC05MDYsNiArOTA2LDcgQEAgdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMKKyAKKyAKKyBASEFWRV9EQlVTX1RSVUVAaW5zdGFsbC1leGVjLWxvY2FsOgorK0BIQVZFX0RCVVNfVFJVRUAJJChNS0RJUl9QKSAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisgQEhBVkVfREJVU19UUlVFQAljZCAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisgQEhBVkVfREJVU19UUlVFQAkJcm0gLWYgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgYXZhaGktcmVzb2x2ZS1hZGRyZXNzIGF2YWhpLWJyb3dzZS1kb21haW5zIGF2YWhpLXB1Ymxpc2gtYWRkcmVzcyBhdmFoaS1wdWJsaXNoLXNlcnZpY2UgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJCSQoTE5fUykgYXZhaGktcmVzb2x2ZSBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSAmJiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2ZpeF9mb3JfYXV0b21ha2VfMS4xMi54LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM0YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b2Fta2UgMS4xMi54IGhhcyBkZXByaWNhdGVkIHVzZSBvZiBta2Rpcl9wICwgYW5kIHJlY29tbWVuZHMgdXNlIG9mIE1LRElSX1AKK2luc3RlYWQuIEZpeGVkIHRoZSBhdXRvbWFrZSBmaWxlcyBhY2NvcmRpbmdseSB0byBhdm9pZCB3YXJuaW5nLWVycm9ycy4KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzA5CisKKworSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS1kYWVtb24vTWFrZWZpbGUuYW0KKysrKyBhdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCitAQCAtMTY5LDcgKzE2OSw3IEBAIHhtbGxpbnQ6CisgCWRvbmUKKyAKKyBpbnN0YWxsLWRhdGEtbG9jYWw6CistCXRlc3QgLXogIiQobG9jYWxzdGF0ZWRpcikvcnVuIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChsb2NhbHN0YXRlZGlyKS9ydW4iCisrCXRlc3QgLXogIiQobG9jYWxzdGF0ZWRpcikvcnVuIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsb2NhbHN0YXRlZGlyKS9ydW4iCisgCisgdXBkYXRlLXN5c3RlbWQ6CisgCWN1cmwgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3N5c3RlbWQvcGxhaW4vc3JjL3NkLWRhZW1vbi5jID4gc2QtZGFlbW9uLmMKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KKysrKyBhdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9NYWtlZmlsZS5hbQorQEAgLTc2LDcgKzc2LDcgQEAgZGhjbGllbnRlbnRlcmRpciA9ICQoc3lzY29uZmRpcikvZGhjcC9kaAorIGRoY2xpZW50ZXhpdGRpciA9ICQoc3lzY29uZmRpcikvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzLmQKKyAKKyBpbnN0YWxsLWV4ZWMtaG9vazogZGhjbGllbnQtZXhpdC1ob29rIGRoY2xpZW50LWVudGVyLWhvb2sKKy0JJChta2Rpcl9wKSAkKERFU1RESVIpJChkaGNsaWVudGVudGVyZGlyKSAkKERFU1RESVIpJChkaGNsaWVudGV4aXRkaXIpCisrCSQoTUtESVJfUCkgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKQorIAkkKElOU1RBTEwpIGRoY2xpZW50LWVudGVyLWhvb2sgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikvYXZhaGktYXV0b2lwZAorIAkkKElOU1RBTEwpIGRoY2xpZW50LWV4aXQtaG9vayAkKERFU1RESVIpJChkaGNsaWVudGV4aXRkaXIpL2F2YWhpLWF1dG9pcGQKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM4ODllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9pbml0c2NyaXB0LnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC0tZ2l0IGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitpbmRleCAzMGEyYzJmLi5iNTg0OGE4IDEwMDc1NQorLS0tIGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCisrKysgYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4KK0BAIC0xLDIgKzEsMTQgQEAKKyAjIS9iaW4vc2gKKy0KKysjIyMgQkVHSU4gSU5JVCBJTkZPCisrIyBQcm92aWRlczogICAgICAgICAgYXZhaGkKKysjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzIGRidXMKKysjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIGRidXMKKysjIFNob3VsZC1TdGFydDoJICAgICAkc3lzbG9nCisrIyBTaG91bGQtU3RvcDogICAgICAgJHN5c2xvZworKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKysjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorKyMgU2hvcnQtRGVzY3JpcHRpb246IEF2YWhpIG1ETlMvRE5TLVNEIERhZW1vbgorKyMgRGVzY3JpcHRpb246ICAgICAgIFplcm9jb25mIGRhZW1vbiBmb3IgY29uZmlndXJpbmcgeW91ciBuZXR3b3JrIAorKyMgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkKKysjIyMgRU5EIElOSVQgSU5GTworKyMKK2RpZmYgLS1naXQgYS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluCitpbmRleCBhYzM0ODA0Li5mOTVjMzQwIDEwMDc1NQorLS0tIGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZG5zY29uZmQuaW4KKysrKyBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluCitAQCAtMSwxICsxLDE0IEBACisgIyEvYmluL3NoCisrIyMjIEJFR0lOIElOSVQgSU5GTworKyMgUHJvdmlkZXM6ICAgICAgICAgIGF2YWhpLWRuc2NvbmZkCisrIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyBhdmFoaQorKyMgUmVxdWlyZWQtU3RvcDogICAgICRyZW1vdGVfZnMgYXZhaGkKKysjIFNob3VsZC1TdGFydDoJICAgICAkc3lzbG9nCisrIyBTaG91bGQtU3RvcDogICAgICAgJHN5c2xvZworKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKysjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorKyMgU2hvcnQtRGVzY3JpcHRpb246IEF2YWhpIG1ETlMvRE5TLVNEIEROUyBjb25maWd1cmF0aW9uCisrIyBEZXNjcmlwdGlvbjogICAgICAgWmVyb2NvbmYgZGFlbW9uIGZvciBjb25maWd1cmluZyB5b3VyIG5ldHdvcmsgCisrIyAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseQorKyMjIyBFTkQgSU5JVCBJTkZPCisrIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9vdXQtb2YtdHJlZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvb3V0LW9mLXRyZWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0NzZjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvb3V0LW9mLXRyZWUucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGE2MmRjOTVkNzU2OTFlYTRhZWZhODZkOGJiZTU0YzYyYWZkNzhmZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxNyBTZXAgMjAxMyAxMjoyNzozNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBidWlsZC1zeXM6IGZpeCBvdXQtb2YtdHJlZSBidWlsZHMgd2l0aG91dCB4bWx0b21hbgorCitJZiBtYW5wYWdlcyBhcmUgZW5hYmxlZCBidXQgeG1sdG9tYW4gaXNuJ3QgcHJlc2VudCwgb3V0LW9mLXRyZWUgYnVpbGRzIGZhaWwKK2JlY2F1c2UgaXQgY2hlY2tzIGluc2lkZSB0aGUgYnVpbGQgZGlyZWN0b3J5IGZvciB0aGUgcHJlLWdlbmVyYXRlZCBtYW5wYWdlcy4KKworRml4IHRoaXMgYnkgdXNpbmcgJHNyY2RpciB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGluc2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeS4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWRlYmNlMi4uMDQ3YzdhZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTAyMSw3ICsxMDIxLDcgQEAgaWYgdGVzdCB4JG1hbnBhZ2VzID0geHllcyA7IHRoZW4KKyAgICAgZmkKKyAKKyAgICAgaWYgdGVzdCB4JGhhdmVfeG1sdG9tYW4gPSB4bm8gLW8geCR4bWx0b21hbiA9IHhubzsgdGhlbgorLSAgICAgICAgaWYgISB0ZXN0IC1lIG1hbi9hdmFoaS1kYWVtb24uOCA7IHRoZW4KKysgICAgICAgIGlmICEgdGVzdCAtZSAkc3JjZGlyL21hbi9hdmFoaS1kYWVtb24uOCA7IHRoZW4KKyAgICAgICAgICAgICBBQ19NU0dfRVJST1IoWyoqKiB4bWx0b21hbiB3YXMgbm90IGZvdW5kIG9yIHdhcyBkaXNhYmxlZCwgaXQgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1hbnBhZ2VzIGFzIHRoZXkgaGF2ZSBub3QgYmVlbiBwcmUtYnVpbHQsIGluc3RhbGwgeG1sdG9tYW4sIHBhc3MgLS1kaXNhYmxlLW1hbnBhZ2VzIG9yIGRvbnQgcGFzcyAtLWRpc2FibGUteG1sdG9tYW5dKQorICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgZmkKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9yZXVzZXBvcnQtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL3JldXNlcG9ydC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjgxYzJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9yZXVzZXBvcnQtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRml4IGF2YWhpLWRhZW1vbiB3aGVuIHJ1bm5pbmcgb24ga2VybmVsIDwgMy45IChwYXRjaCB0YWtlbiBmcm9tIFVidW50dSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyAodW5tYWludGFpbmVkIHVwc3RyZWFtKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRGVzY3JpcHRpb246IFNPX1JFVVNFUE9SVCBtYXkgbm90IGV4aXN0IGluIHJ1bm5pbmcga2VybmVsCisgV2hlbiB1c2Vyc3BhY2UgZGVmaW5lcyBTT19SRVVTRVBPUlQgd2Ugd2lsbCBhdHRlbXB0IHRvIGVuYWJsZSBzb2NrZXQKKyBwb3J0IG51bWJlciByZXVzZS4gIEhvd2V2ZXIgaWYgdGhlIHJ1bm5pbmcga2VybmVsIGRvZXMgbm90IHN1cHBvcnQKKyB0aGlzIGNhbGwgaXQgd2lsbCBmYWlsIHByZXZlbnRpbmcgZGFlbW9uIHN0YXJ0dXAuICBJZiB0aGlzIGNhbGwgaXMKKyBwcmVzZW50IGJ1dCBmYWlscyBFTk9QUk9UT09QVCB0aGVuIHdlIGtub3cgdGhhdCBhY3R1YWxseSB0aGUga2VybmVsCisgZG9lcyBub3Qgc3VwcG9ydCBpdCBhbmQgd2Ugc2hvdWxkIGNvbnRpbnVlIGFzIGlmIHdlIGRpZCBub3QgaGF2ZSB0aGUKKyBjYWxsIGF0IGFsbC4gIChMUDogIzEyMjgyMDQpCisgLgorIFRoaXMgcGF0Y2ggY291bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBkZWJpYW4gcGFja2FnZSBhZnRlciBqZXNzaWUgcmVsZWFzZS4KK0F1dGhvcjogQW5keSBXaGl0Y3JvZnQgPGFwd0BjYW5vbmljYWwuY29tPgorCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvc29ja2V0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS1jb3JlL3NvY2tldC5jCTIwMTMtMDktMjAgMTY6MzY6NTAuMDAwMDAwMDAwICswMTAwCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvc29ja2V0LmMJMjAxMy0wOS0yMCAxNjozODoyMy43ODE4NjM2NDQgKzAxMDAKK0BAIC0xNzcsNyArMTc3LDggQEAKKyAgICAgeWVzID0gMTsKKyAgICAgaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFUE9SVCwgJnllcywgc2l6ZW9mKHllcykpIDwgMCkgeworICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlNPX1JFVVNFUE9SVCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKy0gICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIGlmIChlcnJubyAhPSBFTk9QUk9UT09QVCkKKysgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgIH0KKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1MjUxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK3htbDItY29uZmlnIGlzIGRpc2FibGVkLCBzbyBjaGFuZ2UgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gdXNlIHBrZ2NvbmZpZyB0byBmaW5kCitsaWJ4bWwyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDE4ICsrKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBkNTY2ZTFjLi5jOWVmM2E2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yMTAyLDIxICsyMTAyLDkgQEAgY2FzZSAiJHVzZV9saWJ4bWwyIiBpbgorIAkJRFNUX0xJQlhNTDJfSU5DPSIiCisgCQk7OworIAlhdXRvfHllcykKKy0JCWNhc2UgWGAoeG1sMi1jb25maWcgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbGAgaW4KKy0JCVgyLltbNjc4OV1dLiopCistCQkJbGlieG1sMl9saWJzPWB4bWwyLWNvbmZpZyAtLWxpYnNgCistCQkJbGlieG1sMl9jZmxhZ3M9YHhtbDItY29uZmlnIC0tY2ZsYWdzYAorLQkJCTs7CistCQkqKQorLQkJCWxpYnhtbDJfbGlicz0KKy0JCQlsaWJ4bWwyX2NmbGFncz0KKy0JCQk7OworLQkJZXNhYworLQkJOzsKKy0JKikKKy0JCWlmIHRlc3QgLWYgIiR1c2VfbGlieG1sMi9iaW4veG1sMi1jb25maWciIDsgdGhlbgorLQkJCWxpYnhtbDJfbGlicz1gJHVzZV9saWJ4bWwyL2Jpbi94bWwyLWNvbmZpZyAtLWxpYnNgCistCQkJbGlieG1sMl9jZmxhZ3M9YCR1c2VfbGlieG1sMi9iaW4veG1sMi1jb25maWcgLS1jZmxhZ3NgCisrCQlpZiBwa2ctY29uZmlnIC0tZXhpc3RzIGxpYnhtbC0yLjAgOyB0aGVuCisrCQkJbGlieG1sMl9saWJzPWBwa2ctY29uZmlnIGxpYnhtbC0yLjAgLS1saWJzYAorKwkJCWxpYnhtbDJfY2ZsYWdzPWBwa2ctY29uZmlnIGxpYnhtbC0yLjAgLS1jZmxhZ3NgCisgCQlmaQorIAkJOzsKKyBlc2FjCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjE1MDkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvMDAwMS1nZW4uYy1leHRlbmQtRElSTkFNRVNJWkUtZnJvbS0yNTYtdG8tNTEyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTdWJqZWN0OiBnZW4uYzogZXh0ZW5kIERJUk5BTUVTSVpFIGZyb20gMjU2IHRvIDUxMgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvZG5zL2dlbi5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2Rucy9nZW4uYyBiL2xpYi9kbnMvZ2VuLmMKK2luZGV4IDdhN2RhZmIuLjUxYTA0MzUgMTAwNjQ0CistLS0gYS9saWIvZG5zL2dlbi5jCisrKysgYi9saWIvZG5zL2dlbi5jCitAQCAtMTQ4LDcgKzE0OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGNvcHlyaWdodFtdID0KKyAjZGVmaW5lIFRZUEVDTEFTU0JVRiAoVFlQRUNMQVNTTEVOICsgMSkKKyAjZGVmaW5lIFRZUEVDTEFTU0ZNVCAiJSIgU1RSKFRZUEVDTEFTU0xFTikgIlstMC05YS16XV8lZCIKKyAjZGVmaW5lIEFUVFJJQlVURVNJWkUgMjU2CistI2RlZmluZSBESVJOQU1FU0laRSAyNTYKKysjZGVmaW5lIERJUk5BTUVTSVpFIDUxMgorIAorIHN0YXRpYyBzdHJ1Y3QgY2MgeworIAlzdHJ1Y3QgY2MgKm5leHQ7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTZkNWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1jb25mZ2VuLWJ1aWxkLXVuaXguby1vbmNlLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gOWI0MDYxOWZmNmZkZGZlZjI3NThiYTc5Nzc4OWY4NDg3ZjQxMmRmMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxNiBGZWIgMjAxNSAwMDo1MDowMSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjb25mZ2VuOiBkb24ndCBidWlsZCB1bml4Lm8gdHdpY2UKKworRml4ZWQ6Cit1bml4L29zLm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVGhpcyBpcyBiZWNhdXNlIG9zLm8gd2FzIGJ1aWx0IHR3aWNlOgorKiBUaGUgaW1wbGljaXR5IHJ1bGUgKGRlcGVuZHMgb24gdW5peC9vcy5vKQorKiBUaGUgIm1ha2UgYWxsIiBpbiB1bml4IHN1YmRpciAoZGVwZW5kcyBvbiB1bml4L29zLm8pCisKK0RlcGVuZCBvbiBzdWJkaXJzIHdoaWNoIGlzIHVuaXggb25seSByYXRoZXIgdGhhbiB1bml4L29zLm8gd2lsbCBmaXggdGhlCitwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBiaW4vY29uZmdlbi9NYWtlZmlsZS5pbiB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbiBiL2Jpbi9jb25mZ2VuL01ha2VmaWxlLmluCitpbmRleCA4YjNlNWFhLi40ODY4YTI0IDEwMDY0NAorLS0tIGEvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4KKysrKyBiL2Jpbi9jb25mZ2VuL01ha2VmaWxlLmluCitAQCAtNzQsMTEgKzc0LDExIEBAIHJuZGMtY29uZmdlbi5AT0A6IHJuZGMtY29uZmdlbi5jCisgZGRucy1jb25mZ2VuLkBPQDogZGRucy1jb25mZ2VuLmMKKyAJJHtMSUJUT09MX01PREVfQ09NUElMRX0gJHtDQ30gJHtBTExfQ0ZMQUdTfSAtYyAke3NyY2Rpcn0vZGRucy1jb25mZ2VuLmMKKyAKKy1ybmRjLWNvbmZnZW5ARVhFRVhUQDogcm5kYy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7VU9CSlN9ICR7Q09ORkRFUExJQlN9IAorK3JuZGMtY29uZmdlbkBFWEVFWFRAOiBybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtDT05GREVQTElCU30gJChTVUJESVJTKQorIAlleHBvcnQgQkFTRU9CSlM9InJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSI7IFwKKyAJJHtGSU5BTEJVSUxEQ01EfQorIAorLWRkbnMtY29uZmdlbkBFWEVFWFRAOiBkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30gJHtDT05GREVQTElCU30gCisrZGRucy1jb25mZ2VuQEVYRUVYVEA6IGRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke0NPTkZERVBMSUJTfSAkKFNVQkRJUlMpCisgCWV4cG9ydCBCQVNFT0JKUz0iZGRucy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7VU9CSlN9IjsgXAorIAkke0ZJTkFMQlVJTERDTUR9CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtZW5zdXJlLXNlYXJjaGluZy1mb3ItanNvbi1oZWFkZXJzLXNlYXJjaGVzLXN5c3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkZjNiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtZW5zdXJlLXNlYXJjaGluZy1mb3ItanNvbi1oZWFkZXJzLXNlYXJjaGVzLXN5c3IucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA5NDczZDI5ODQzNTc5ODAyZTk2YjAyOTNhM2U5NTNmZWQ5M2RlODJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDkgSnVuIDIwMTUgMTE6MjI6MDAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmluZDogZW5zdXJlIHNlYXJjaGluZyBmb3IganNvbiBoZWFkZXJzIHNlYXJjaGVzIHN5c3Jvb3QKKworQmluZCBjYW4gZmFpbCBjb25maWd1cmUgYnkgZGV0ZWN0aW5nIGhlYWRlcnMgdy9vIGxpYnNbMV0sIG9yCitpdCBjYW4gZmFpbCB0aGUgaG9zdCBjb250YW1pbmF0aW9uIGNoZWNrIGFzIHBlciBiZWxvdzoKKworRVJST1I6IFRoaXMgYXV0b2NvbmYgbG9nIGluZGljYXRlcyBlcnJvcnMsIGl0IGxvb2tlZCBhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2hpbGUgZGV0ZXJtaW5pbmcgc3lzdGVtIGNhcGFiaWxpdGllcy4KK1JlcnVuIGNvbmZpZ3VyZSB0YXNrIGFmdGVyIGZpeGluZyB0aGlzLiBUaGUgcGF0aCB3YXMgJ2J1aWxkL3RtcC93b3JrL2NvcmUyLTY0LXBva3ktbGludXgvYmluZC85LjEwLjItcjEvYnVpbGQnCitFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBkb19xYV9jb25maWd1cmUKK0VSUk9SOiBMb2dmaWxlIG9mIGZhaWx1cmUgc3RvcmVkIGluOiBidWlsZC90bXAvd29yay9jb3JlMi02NC1wb2t5LWxpbnV4L2JpbmQvOS4xMC4yLXIxL3RlbXAvbG9nLmRvX2NvbmZpZ3VyZS41MjQyCitFUlJPUjogVGFzayA1IChtZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjIuYmIsIGRvX2NvbmZpZ3VyZSkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICcxJworTk9URTogVGFza3MgU3VtbWFyeTogQXR0ZW1wdGVkIDc3MyB0YXNrcyBvZiB3aGljaCA3NjggZGlkbid0IG5lZWQgdG8gYmUgcmVydW4gYW5kIDEgZmFpbGVkLgorTm8gY3VycmVudGx5IHJ1bm5pbmcgdGFza3MgKDc3MyBvZiA3ODEpCisKK1N1bW1hcnk6IDEgdGFzayBmYWlsZWQ6CisgIC9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjIuYmIsIGRvX2NvbmZpZ3VyZQorCitPbmUgd2F5IHRvIGZpeCBpdCB3b3VsZCBiZSB0byB1bmNvbmRpdGlvbmFsbHkgZGlzYWJsZSBqc29uIGluIGJpbmQKK2NvbmZpZ3VyZVsyXSBidXQgaGVyZSB3ZSBmaXggaXQgYnkgdXNpbmcgdGhlIHBhdGggdG8gd2hlcmUgd2Ugd291bGQKK3B1dCB0aGUgaGVhZGVyIGlmIHdlIGhhZCBqc29uIGluIHRoZSBzeXNyb290LCBpbiBjYXNlIHNvbWVvbmUgd2FudHMKK3RvIG1ha2UgdXNlIG9mIHRoZSBjb21iaW5hdGlvbiBzb21lIGRheS4KKworWzFdIGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvdGlja2V0LzQ1MzA1CitbMl0gaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy9jaGFuZ2VzZXQvMTI2NDA2CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggYzllZjNhNjAxMzQzLi4xN2ExZjYxM2U5YWMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTIxMzksNyArMjEzOSw3IEBAIGNhc2UgIiR1c2VfbGlianNvbiIgaW4KKyAJCWxpYmpzb25fbGlicz0iIgorIAkJOzsKKyAJYXV0b3x5ZXMpCistCQlmb3IgZCBpbiAvdXNyIC91c3IvbG9jYWwgL29wdC9sb2NhbAorKwkJZm9yIGQgaW4gIiR7U1RBR0lOR19JTkNESVJ9IgorIAkJZG8KKyAJCQlpZiB0ZXN0IC1mICIke2R9L2luY2x1ZGUvanNvbi9qc29uLmgiCisgCQkJdGhlbgorLS0gCisyLjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kOSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODY3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kOQpAQCAtMCwwICsxLDIgQEAKKyMgc3RhcnR1cCBvcHRpb25zIGZvciB0aGUgc2VydmVyCitPUFRJT05TPSItdSBiaW5kIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkMzQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2NvbmYucGF0Y2gKQEAgLTAsMCArMSwzMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKwordGhlIHBhdGNoIGlzIGltcG9ydGVkIGZyb20gb3BlbmVtYmVkZGVkIHByb2plY3QKKworMTEvMzAvMjAxMCAtIFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMCBiaW5kLTkuMy4xL2NvbmYvZGIuMAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjAJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIuMAkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKzsKKys7IEJJTkQgcmV2ZXJzZSBkYXRhIGZpbGUgZm9yIGJyb2FkY2FzdCB6b25lCisrOworKyRUVEwJNjA0ODAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJIDYwNDgwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjEyNyBiaW5kLTkuMy4xL2NvbmYvZGIuMTI3CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMTI3CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjEyNwkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMyBAQAorKzsKKys7IEJJTkQgcmV2ZXJzZSBkYXRhIGZpbGUgZm9yIGxvY2FsIGxvb3BiYWNrIGludGVyZmFjZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KKysxLjAuMAlJTglQVFIJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmVtcHR5IGJpbmQtOS4zLjEvY29uZi9kYi5lbXB0eQorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmVtcHR5CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLmVtcHR5CTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDE0IEBACisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBlbXB0eSByZmMxOTE4IHpvbmUKKys7CisrOyBETyBOT1QgRURJVCBUSElTIEZJTEUgLSBpdCBpcyB1c2VkIGZvciBtdWx0aXBsZSB6b25lcy4KKys7IEluc3RlYWQsIGNvcHkgaXQsIGVkaXQgbmFtZWQuY29uZiwgYW5kIHVzZSB0aGF0IGNvcHkuCisrOworKyRUVEwJODY0MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgIDg2NDAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMjU1IGJpbmQtOS4zLjEvY29uZi9kYi4yNTUKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4yNTUJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIuMjU1CTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEyIEBACisrOworKzsgQklORCByZXNlcnZlIGRhdGEgZmlsZSBmb3IgYnJvYWRjYXN0IHpvbmUKKys7CisrJFRUTAk2MDQ4MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgNjA0ODAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIubG9jYWwgYmluZC05LjMuMS9jb25mL2RiLmxvY2FsCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIubG9jYWwJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIubG9jYWwJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTMgQEAKKys7CisrOyBCSU5EIGRhdGEgZmlsZSBmb3IgbG9jYWwgbG9vcGJhY2sgaW50ZXJmYWNlCisrOworKyRUVEwJNjA0ODAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJIDYwNDgwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorK0AJSU4JQQkxMjcuMC4wLjEKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5yb290IGJpbmQtOS4zLjEvY29uZi9kYi5yb290CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIucm9vdAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi5yb290CTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrCisrOyA8PD4+IERpRyA5LjIuMyA8PD4+IG5zIC4gQGEucm9vdC1zZXJ2ZXJzLm5ldC4KKys7OyBnbG9iYWwgb3B0aW9uczogIHByaW50Y21kCisrOzsgR290IGFuc3dlcjoKKys7OyAtPj5IRUFERVI8PC0gb3Bjb2RlOiBRVUVSWSwgc3RhdHVzOiBOT0VSUk9SLCBpZDogMTg5NDQKKys7OyBmbGFnczogcXIgYWEgcmQ7IFFVRVJZOiAxLCBBTlNXRVI6IDEzLCBBVVRIT1JJVFk6IDAsIEFERElUSU9OQUw6IDEzCisrCisrOzsgUVVFU1RJT04gU0VDVElPTjoKKys7LgkJCQlJTglOUworKworKzs7IEFOU1dFUiBTRUNUSU9OOgorKy4JCQk1MTg0MDAJSU4JTlMJQS5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJQi5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJQy5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJRC5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJRS5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJRi5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJRy5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJSC5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJSS5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJSi5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJSy5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJTC5ST09ULVNFUlZFUlMuTkVULgorKy4JCQk1MTg0MDAJSU4JTlMJTS5ST09ULVNFUlZFUlMuTkVULgorKworKzs7IEFERElUSU9OQUwgU0VDVElPTjoKKytBLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTguNDEuMC40CisrQi5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjIyOC43OS4yMDEKKytDLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMzMuNC4xMgorK0QuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTEyOC44LjEwLjkwCisrRS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjIwMy4yMzAuMTAKKytGLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuNS41LjI0MQorK0cuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4xMTIuMzYuNAorK0guUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTEyOC42My4yLjUzCisrSS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjM2LjE0OC4xNworK0ouUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi41OC4xMjguMzAKKytLLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTMuMC4xNC4xMjkKKytMLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTguMzIuNjQuMTIKKytNLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkyMDIuMTIuMjcuMzMKKysKKys7OyBRdWVyeSB0aW1lOiA4MSBtc2VjCisrOzsgU0VSVkVSOiAxOTguNDEuMC40IzUzKGEucm9vdC1zZXJ2ZXJzLm5ldC4pCisrOzsgV0hFTjogU3VuIEZlYiAgMSAxMToyNzoxNCAyMDA0CisrOzsgTVNHIFNJWkUgIHJjdmQ6IDQzNgorKworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYJMjAwNS0wNy0xMCAyMjozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNDkgQEAKKysvLyBUaGlzIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIEJJTkQgRE5TIHNlcnZlciBuYW1lZC4KKysvLworKy8vIElmIHlvdSBhcmUganVzdCBhZGRpbmcgem9uZXMsIHBsZWFzZSBkbyB0aGF0IGluIC9ldGMvYmluZC9uYW1lZC5jb25mLmxvY2FsCisrCisraW5jbHVkZSAiL2V0Yy9iaW5kL25hbWVkLmNvbmYub3B0aW9ucyI7CisrCisrLy8gcHJpbWUgdGhlIHNlcnZlciB3aXRoIGtub3dsZWRnZSBvZiB0aGUgcm9vdCBzZXJ2ZXJzCisrem9uZSAiLiIgeworKwl0eXBlIGhpbnQ7CisrCWZpbGUgIi9ldGMvYmluZC9kYi5yb290IjsKKyt9OworKworKy8vIGJlIGF1dGhvcml0YXRpdmUgZm9yIHRoZSBsb2NhbGhvc3QgZm9yd2FyZCBhbmQgcmV2ZXJzZSB6b25lcywgYW5kIGZvcgorKy8vIGJyb2FkY2FzdCB6b25lcyBhcyBwZXIgUkZDIDE5MTIKKysKKyt6b25lICJsb2NhbGhvc3QiIHsKKysJdHlwZSBtYXN0ZXI7CisrCWZpbGUgIi9ldGMvYmluZC9kYi5sb2NhbCI7CisrfTsKKysKKyt6b25lICIxMjcuaW4tYWRkci5hcnBhIiB7CisrCXR5cGUgbWFzdGVyOworKwlmaWxlICIvZXRjL2JpbmQvZGIuMTI3IjsKKyt9OworKworK3pvbmUgIjAuaW4tYWRkci5hcnBhIiB7CisrCXR5cGUgbWFzdGVyOworKwlmaWxlICIvZXRjL2JpbmQvZGIuMCI7CisrfTsKKysKKyt6b25lICIyNTUuaW4tYWRkci5hcnBhIiB7CisrCXR5cGUgbWFzdGVyOworKwlmaWxlICIvZXRjL2JpbmQvZGIuMjU1IjsKKyt9OworKworKy8vIHpvbmUgImNvbSIgeyB0eXBlIGRlbGVnYXRpb24tb25seTsgfTsKKysvLyB6b25lICJuZXQiIHsgdHlwZSBkZWxlZ2F0aW9uLW9ubHk7IH07CisrCisrLy8gRnJvbSB0aGUgcmVsZWFzZSBub3RlczoKKysvLyAgQmVjYXVzZSBtYW55IG9mIG91ciB1c2VycyBhcmUgdW5jb21mb3J0YWJsZSByZWNlaXZpbmcgdW5kZWxlZ2F0ZWQgYW5zd2VycworKy8vICBmcm9tIHJvb3Qgb3IgdG9wIGxldmVsIGRvbWFpbnMsIG90aGVyIHRoYW4gYSBmZXcgZm9yIHdob20gdGhhdCBiZWhhdmlvdXIKKysvLyAgaGFzIGJlZW4gdHJ1c3RlZCBhbmQgZXhwZWN0ZWQgZm9yIHF1aXRlIHNvbWUgbGVuZ3RoIG9mIHRpbWUsIHdlIGhhdmUgbm93CisrLy8gIGludHJvZHVjZWQgdGhlICJyb290LWRlbGVnYXRpb25zLW9ubHkiIGZlYXR1cmUgd2hpY2ggYXBwbGllcyBkZWxlZ2F0aW9uLW9ubHkKKysvLyAgbG9naWMgdG8gYWxsIHRvcCBsZXZlbCBkb21haW5zLCBhbmQgdG8gdGhlIHJvb3QgZG9tYWluLiAgQW4gZXhjZXB0aW9uIGxpc3QKKysvLyAgc2hvdWxkIGJlIHNwZWNpZmllZCwgaW5jbHVkaW5nICJNVVNFVU0iIGFuZCAiREUiLCBhbmQgYW55IG90aGVyIHRvcCBsZXZlbAorKy8vICBkb21haW5zIGZyb20gd2hvbSB1bmRlbGVnYXRlZCByZXNwb25zZXMgYXJlIGV4cGVjdGVkIGFuZCB0cnVzdGVkLgorKy8vIHJvb3QtZGVsZWdhdGlvbi1vbmx5IGV4Y2x1ZGUgeyAiREUiOyAiTVVTRVVNIjsgfTsKKysKKytpbmNsdWRlICIvZXRjL2JpbmQvbmFtZWQuY29uZi5sb2NhbCI7CitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZi5sb2NhbCBiaW5kLTkuMy4xL2NvbmYvbmFtZWQuY29uZi5sb2NhbAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYubG9jYWwJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvbmFtZWQuY29uZi5sb2NhbAkyMDA1LTA3LTEwIDIyOjE0OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw4IEBACisrLy8KKysvLyBEbyBhbnkgbG9jYWwgY29uZmlndXJhdGlvbiBoZXJlCisrLy8KKysKKysvLyBDb25zaWRlciBhZGRpbmcgdGhlIDE5MTggem9uZXMgaGVyZSwgaWYgdGhleSBhcmUgbm90IHVzZWQgaW4geW91cgorKy8vIG9yZ2FuaXphdGlvbgorKy8vaW5jbHVkZSAiL2V0Yy9iaW5kL3pvbmVzLnJmYzE5MTgiOworKworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYub3B0aW9ucyBiaW5kLTkuMy4xL2NvbmYvbmFtZWQuY29uZi5vcHRpb25zCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZi5vcHRpb25zCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYub3B0aW9ucwkyMDA1LTA3LTEwIDIyOjE0OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyNCBAQAorK29wdGlvbnMgeworKwlkaXJlY3RvcnkgIi92YXIvY2FjaGUvYmluZCI7CisrCisrCS8vIElmIHRoZXJlIGlzIGEgZmlyZXdhbGwgYmV0d2VlbiB5b3UgYW5kIG5hbWVzZXJ2ZXJzIHlvdSB3YW50CisrCS8vIHRvIHRhbGsgdG8sIHlvdSBtaWdodCBuZWVkIHRvIHVuY29tbWVudCB0aGUgcXVlcnktc291cmNlCisrCS8vIGRpcmVjdGl2ZSBiZWxvdy4gIFByZXZpb3VzIHZlcnNpb25zIG9mIEJJTkQgYWx3YXlzIGFza2VkCisrCS8vIHF1ZXN0aW9ucyB1c2luZyBwb3J0IDUzLCBidXQgQklORCA4LjEgYW5kIGxhdGVyIHVzZSBhbiB1bnByaXZpbGVnZWQKKysJLy8gcG9ydCBieSBkZWZhdWx0LgorKworKwkvLyBxdWVyeS1zb3VyY2UgYWRkcmVzcyAqIHBvcnQgNTM7CisrCisrCS8vIElmIHlvdXIgSVNQIHByb3ZpZGVkIG9uZSBvciBtb3JlIElQIGFkZHJlc3NlcyBmb3Igc3RhYmxlIAorKwkvLyBuYW1lc2VydmVycywgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZW0gYXMgZm9yd2FyZGVycy4gIAorKwkvLyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBibG9jaywgYW5kIGluc2VydCB0aGUgYWRkcmVzc2VzIHJlcGxhY2luZyAKKysJLy8gdGhlIGFsbC0wJ3MgcGxhY2Vob2xkZXIuCisrCisrCS8vIGZvcndhcmRlcnMgeworKwkvLyAJMC4wLjAuMDsKKysJLy8gfTsKKysKKysJYXV0aC1ueGRvbWFpbiBubzsgICAgIyBjb25mb3JtIHRvIFJGQzEwMzUKKysKKyt9OworKworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL3pvbmVzLnJmYzE5MTggYmluZC05LjMuMS9jb25mL3pvbmVzLnJmYzE5MTgKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi96b25lcy5yZmMxOTE4CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL3pvbmVzLnJmYzE5MTgJMjAwNS0wNy0xMCAyMjoxNDoxMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjAgQEAKKyt6b25lICIxMC5pbi1hZGRyLmFycGEiICAgICAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKysgCisrem9uZSAiMTYuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMTcuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMTguMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMTkuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjAuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjEuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjIuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjMuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjQuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjUuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjYuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjcuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjguMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMjkuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMzAuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07Cisrem9uZSAiMzEuMTcyLmluLWFkZHIuYXJwYSIgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07CisrCisrem9uZSAiMTY4LjE5Mi5pbi1hZGRyLmFycGEiIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07CitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2luaXQuZCBiaW5kLTkuMy4xL2luaXQuZAorLS0tIGJpbmQtOS4zLjEub3JpZy9pbml0LmQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2luaXQuZAkyMDA1LTA3LTEwIDIzOjA5OjU4LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3MCBAQAorKyMhL2Jpbi9zaAorKworK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKysKKysjIGZvciBhIGNocm9vdGVkIHNlcnZlcjogIi11IGJpbmQgLXQgL3Zhci9saWIvbmFtZWQiCisrIyBEb24ndCBtb2RpZnkgdGhpcyBsaW5lLCBjaGFuZ2Ugb3IgY3JlYXRlIC9ldGMvZGVmYXVsdC9iaW5kOS4KKytPUFRJT05TPSIiCisrCisrdGVzdCAtZiAvZXRjL2RlZmF1bHQvYmluZDkgJiYgLiAvZXRjL2RlZmF1bHQvYmluZDkKKysKKyt0ZXN0IC14IC91c3Ivc2Jpbi9ybmRjIHx8IGV4aXQgMAorKworK2Nhc2UgIiQxIiBpbgorKyAgICBzdGFydCkKKysJZWNobyAtbiAiU3RhcnRpbmcgZG9tYWluIG5hbWUgc2VydmljZTogbmFtZWQiCisrCisrCW1vZHByb2JlIGNhcGFiaWxpdHkgPi9kZXYvbnVsbCAyPiYxIHx8IHRydWUKKysJaWYgWyAhIC1mIC9ldGMvYmluZC9ybmRjLmtleSBdOyB0aGVuCisrCSAgICAvdXNyL3NiaW4vcm5kYy1jb25mZ2VuIC1hIC1iIDUxMiAtciAvZGV2L3VyYW5kb20KKysJICAgIGNobW9kIDA2NDAgL2V0Yy9iaW5kL3JuZGMua2V5CisrCWZpCisrCWlmIFsgLWYgL3Zhci9ydW4vbmFtZWQvbmFtZWQucGlkIF07IHRoZW4KKysJICAgIHBzIGBjYXQgL3Zhci9ydW4vbmFtZWQvbmFtZWQucGlkYCA+IC9kZXYvbnVsbCAmJiBleGl0IDEKKysJZmkKKysKKysJIyBkaXJzIHVuZGVyIC92YXIvcnVuIGNhbiBnbyBhd2F5IG9uIHJlYm9vdHMuCisrCW1rZGlyIC1wIC92YXIvcnVuL25hbWVkCisrCW1rZGlyIC1wIC92YXIvY2FjaGUvYmluZAorKwljaG1vZCA3NzUgL3Zhci9ydW4vbmFtZWQKKysJY2hvd24gcm9vdDpiaW5kIC92YXIvcnVuL25hbWVkID4vZGV2L251bGwgMj4mMSB8fCB0cnVlCisrCisrCWlmIFsgISAteCAvdXNyL3NiaW4vbmFtZWQgXTsgdGhlbgorKwkgICAgZWNobyAibmFtZWQgYmluYXJ5IG1pc3NpbmcgLSBub3Qgc3RhcnRpbmciCisrCSAgICBleGl0IDEKKysJZmkKKysJaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4vbmFtZWQgXAorKwkJLS1waWRmaWxlIC92YXIvcnVuL25hbWVkL25hbWVkLnBpZCAtLSAkT1BUSU9OUzsgdGhlbgorKwkgICAgaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF0gOyB0aGVuCisrCQllY2hvICJuYW1lc2VydmVyIDEyNy4wLjAuMSIgfCAvc2Jpbi9yZXNvbHZjb25mIC1hIGxvCisrCSAgICBmaQorKwlmaQorKwllY2hvICIuIgkKKysgICAgOzsKKysKKysgICAgc3RvcCkKKysJZWNobyAtbiAiU3RvcHBpbmcgZG9tYWluIG5hbWUgc2VydmljZTogbmFtZWQiCisrCWlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdOyB0aGVuCisrCSAgICAvc2Jpbi9yZXNvbHZjb25mIC1kIGxvCisrCWZpCisrCS91c3Ivc2Jpbi9ybmRjIHN0b3AgPi9kZXYvbnVsbCAyPiYxCisrCWVjaG8gIi4iCQorKyAgICA7OworKworKyAgICByZWxvYWQpCisrCS91c3Ivc2Jpbi9ybmRjIHJlbG9hZAorKyAgICA7OworKworKyAgICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKysJJDAgc3RvcAorKwlzbGVlcCAyCisrCSQwIHN0YXJ0CisrICAgIDs7CisrICAgIAorKyAgICAqKQorKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYmluZCB7c3RhcnR8c3RvcHxyZWxvYWR8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKysJZXhpdCAxCisrICAgIDs7CisrZXNhYworKworK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZG9udC10ZXN0LW9uLWhvc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9kb250LXRlc3Qtb24taG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg5ZDZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZG9udC10ZXN0LW9uLWhvc3QucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnkgU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYmluZC05LjkuNS9iaW4vTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiaW5kLTkuOS41Lm9yaWcvYmluL01ha2VmaWxlLmluCisrKysgYmluZC05LjkuNS9iaW4vTWFrZWZpbGUuaW4KK0BAIC0xOSw3ICsxOSw3IEBAIHNyY2RpciA9CUBzcmNkaXJACisgVlBBVEggPQkJQHNyY2RpckAKKyB0b3Bfc3JjZGlyID0JQHRvcF9zcmNkaXJACisgCistU1VCRElSUyA9CW5hbWVkIHJuZGMgZGlnIGRlbHYgZG5zc2VjIHRvb2xzIHRlc3RzIG5zdXBkYXRlIFwKKytTVUJESVJTID0JbmFtZWQgcm5kYyBkaWcgZGVsdiBkbnNzZWMgdG9vbHMgbnN1cGRhdGUgXAorIAkJY2hlY2sgY29uZmdlbiBAUFlUSE9OX1RPT0xTQCBAUEtDUzExX1RPT0xTQAorIFRBUkdFVFMgPQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZ2VuZXJhdGUtcm5kYy1rZXkuc2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9nZW5lcmF0ZS1ybmRjLWtleS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIwMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZ2VuZXJhdGUtcm5kYy1rZXkuc2gKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworaWYgWyAhIC1zIC9ldGMvYmluZC9ybmRjLmtleSBdOyB0aGVuCisgICAgZWNobyAtbiAiR2VuZXJhdGluZyAvZXRjL2JpbmQvcm5kYy5rZXk6IgorICAgIC91c3Ivc2Jpbi9ybmRjLWNvbmZnZW4gLWEgLWIgNTEyIC1yIC9kZXYvdXJhbmRvbQorICAgIGNobW9kIDA2NDAgL2V0Yy9iaW5kL3JuZGMua2V5CitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGI5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9pbml0LmQtYWRkLXN1cHBvcnQtZm9yLXJlYWQtb25seS1yb290ZnMucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorU3ViamVjdDogaW5pdC5kOiBhZGQgc3VwcG9ydCBmb3IgcmVhZC1vbmx5IHJvb3RmcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBpbml0LmQgfCAgIDQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaW5pdC5kIGIvaW5pdC5kCitpbmRleCAwMTExZWQ0Li4yNDY3N2M4IDEwMDY0NAorLS0tIGEvaW5pdC5kCisrKysgYi9pbml0LmQKK0BAIC02LDggKzYsNDggQEAgUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorICMgRG9uJ3QgbW9kaWZ5IHRoaXMgbGluZSwgY2hhbmdlIG9yIGNyZWF0ZSAvZXRjL2RlZmF1bHQvYmluZDkuCisgT1BUSU9OUz0iIgorIAorK3Rlc3QgLWYgL2V0Yy9kZWZhdWx0L3JjUyAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKKyB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9iaW5kOSAmJiAuIC9ldGMvZGVmYXVsdC9iaW5kOQorIAorKyMgVGhpcyBmdW5jdGlvbiBpcyBoZXJlIGJlY2F1c2UgaXQncyBwb3NzaWJsZSB0aGF0IC92YXIgYW5kIC8gYXJlIG9uIGRpZmZlcmVudCBwYXJ0aXRpb25zLgorK2lzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gKCkgeworKyAgICBESVJFQ1RPUlk9JDEKKysgICAgZGlyPWByZWFkbGluayAtZiAkRElSRUNUT1JZYAorKyAgICB3aGlsZSB0cnVlOyBkbworKwlpZiBbICEgLWQgIiRkaXIiIF07IHRoZW4KKysJICAgIGVjaG8gIkVSUk9SOiAkZGlyIGlzIG5vdCBhIGRpcmVjdG9yeSIKKysJICAgIGV4aXQgMQorKwllbHNlCisrCSAgICBmb3IgZmxhZyBpbiBgYXdrIC12IGRpcj0kZGlyICd7IGlmICgkMiA9PSBkaXIpIHsgcHJpbnQgIkZPVU5EIjsgc3BsaXQoJDQsRkxBR1MsIiwiKSB9IH07IFwKKysJCUVORCB7IGZvciAoZiBpbiBGTEFHUykgcHJpbnQgRkxBR1NbZl0gfScgPCAvcHJvYy9tb3VudHNgOyBkbworKwkJWyAiJGZsYWciID0gIkZPVU5EIiBdICYmIHBhcnRpdGlvbj0icmVhZC13cml0ZSIKKysJCVsgIiRmbGFnIiA9ICJybyIgXSAmJiB7IHBhcnRpdGlvbj0icmVhZC1vbmx5IjsgYnJlYWs7IH0KKysJICAgIGRvbmUKKysJICAgIGlmIFsgIiRkaXIiID0gIi8iIC1vIC1uICIkcGFydGl0aW9uIiBdOyB0aGVuCisrCQlicmVhaworKwkgICAgZWxzZQorKwkJZGlyPWBkaXJuYW1lICRkaXJgCisrCSAgICBmaQorKwlmaQorKyAgICBkb25lCisrICAgIFsgIiRwYXJ0aXRpb24iID0gInJlYWQtb25seSIgXSAmJiBlY2hvICJ5ZXMiIHx8IGVjaG8gIm5vIgorK30KKysKKytiaW5kX21vdW50ICgpIHsKKysgICAgb2xkZGlyPSQxCisrICAgIG5ld2Rpcj0kMgorKyAgICBta2RpciAtcCAkb2xkZGlyCisrICAgIGNwIC1hICRuZXdkaXIvKiAkb2xkZGlyCisrICAgIG1vdW50IC0tYmluZCAkb2xkZGlyICRuZXdkaXIKKyt9CisrCisrIyBEZWFsIHdpdGggcmVhZC1vbmx5IHJvb3RmcworK2lmIFsgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF07IHRoZW4KKysgICAgWyAiJFZFUkJPU0UiICE9ICJubyIgXSAmJiBlY2hvICJXQVJOOiBzdGFydCBiaW5kIHNlcnZpY2UgaW4gcmVhZC1vbmx5IHJvb3RmcyIKKysgICAgWyBgaXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAvZXRjL2JpbmRgID0gInllcyIgXSAmJiBiaW5kX21vdW50IC92YXIvdm9sYXRpbGUvYmluZC9ldGMgL2V0Yy9iaW5kCisrICAgIFsgYGlzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gL3Zhci9uYW1lZGAgPSAieWVzIiBdICYmIGJpbmRfbW91bnQgL3Zhci92b2xhdGlsZS9iaW5kL25hbWVkIC92YXIvbmFtZWQKKytmaQorKworIHRlc3QgLXggL3Vzci9zYmluL3JuZGMgfHwgZXhpdCAwCisgCisgY2FzZSAiJDEiIGluCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWFrZS1ldGMtaW5pdGQtYmluZC1zdG9wLXdvcmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDZmM2UzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWFrZS1ldGMtaW5pdGQtYmluZC1zdG9wLXdvcmsucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorYmluZDogbWFrZSAiL2V0Yy9pbml0LmQvYmluZCBzdG9wIiB3b3JrCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworQWRkIHNvbWUgY29uZmlndXJhdGlvbnMsIG1ha2Ugcm5kYyBjb21tYW5kIGJlIGFibGUgdG8gY29udHJvbHMKK3RoZSBuYW1lZCBkYWVtb24uCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmYvbmFtZWQuY29uZiB8ICAgIDUgKysrKysKKyBjb25mL3JuZGMuY29uZiAgfCAgICA1ICsrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb25mL3JuZGMuY29uZgorCitkaWZmIC0tZ2l0IGEvY29uZi9uYW1lZC5jb25mIGIvY29uZi9uYW1lZC5jb25mCitpbmRleCA5NTgyOWNmLi5jODg5OWU3IDEwMDY0NAorLS0tIGEvY29uZi9uYW1lZC5jb25mCisrKysgYi9jb25mL25hbWVkLmNvbmYKK0BAIC00NywzICs0Nyw4IEBAIHpvbmUgIjI1NS5pbi1hZGRyLmFycGEiIHsKKyAvLyByb290LWRlbGVnYXRpb24tb25seSBleGNsdWRlIHsgIkRFIjsgIk1VU0VVTSI7IH07CisgCisgaW5jbHVkZSAiL2V0Yy9iaW5kL25hbWVkLmNvbmYubG9jYWwiOworK2luY2x1ZGUgIi9ldGMvYmluZC9ybmRjLmtleSIgOworK2NvbnRyb2xzIHsKKysJaW5ldCAxMjcuMC4wLjEgYWxsb3cgeyBsb2NhbGhvc3Q7IH0KKysJa2V5cyB7IHJuZGMta2V5OyB9OworK307CitkaWZmIC0tZ2l0IGEvY29uZi9ybmRjLmNvbmYgYi9jb25mL3JuZGMuY29uZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEwYjQ4MWQKKy0tLSAvZGV2L251bGwKKysrKyBiL2NvbmYvcm5kYy5jb25mCitAQCAtMCwwICsxLDUgQEAKKytpbmNsdWRlICIvZXRjL2JpbmQvcm5kYy5rZXkiOworK29wdGlvbnMgeworKwlkZWZhdWx0LXNlcnZlciAgbG9jYWxob3N0OworKwlkZWZhdWx0LWtleSAgICAgcm5kYy1rZXk7CisrfTsKKworLS0gCisxLjcuNS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWlwczEtbm90LXN1cHBvcnQtb3Bjb2RlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzMDc5NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmCkBAIC0wLDAgKzEsMTA0IEBACitiaW5kOiBwb3J0IGEgcGF0Y2ggdG8gZml4IGEgYnVpbGQgZmFpbHVyZQorCittaXBzMSBkb2VzIG5vdCBzdXBwb3J0IGxsIGFuZCBzYyBpbnN0cnVjdGlvbnMsIGFuZCBsZWFkIHRvIGJlbG93IGVycm9yLCBub3cKK3dlIHBvcnQgYSBwYXRjaCBmcm9tIGRlYmlhbiB0byBmaXggaXQKK1todHRwOi8vc2VjdXJpdHkuZGViaWFuLm9yZy9kZWJpYW4tc2VjdXJpdHkvcG9vbC91cGRhdGVzL21haW4vYi9iaW5kOS9iaW5kOV85LjguNC5kZnNnLlAxLTYrbm11MitkZWI3dTEuZGlmZi5nel0KKworfCB7c3RhbmRhcmQgaW5wdXR9OiBBc3NlbWJsZXIgbWVzc2FnZXM6Cit8IHtzdGFuZGFyZCBpbnB1dH06NDc6IEVycm9yOiBPcGNvZGUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHByb2Nlc3NvcjogbWlwczEgKG1pcHMxKSBgbGwgJDMsMCgkNiknCit8IHtzdGFuZGFyZCBpbnB1dH06NTA6IEVycm9yOiBPcGNvZGUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHByb2Nlc3NvcjogbWlwczEgKG1pcHMxKSBgc2MgJDMsMCgkNiknCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKy0tLSBiaW5kOS05LjguNC5kZnNnLlAxLm9yaWcvbGliL2lzYy9taXBzL2luY2x1ZGUvaXNjL2F0b21pYy5oCisrKysgYmluZDktOS44LjQuZGZzZy5QMS9saWIvaXNjL21pcHMvaW5jbHVkZS9pc2MvYXRvbWljLmgKK0BAIC0zMSwxOCArMzEsMjAgQEAKKyBpc2NfYXRvbWljX3hhZGQoaXNjX2ludDMyX3QgKnAsIGludCB2YWwpIHsKKyAJaXNjX2ludDMyX3Qgb3JpZzsKKyAKKy0JLyogYWRkIGlzIGEgY2hlYXQsIHNpbmNlIE1JUFMgaGFzIG5vIG1vdiBpbnN0cnVjdGlvbiAqLworLQlfX2FzbV9fIHZvbGF0aWxlICgKKy0JICAgICIxOiIKKy0JICAgICJsbCAkMywgJTFcbiIKKy0JICAgICJhZGQgJTAsICQwLCAkM1xuIgorLQkgICAgImFkZCAkMywgJDMsICUyXG4iCistCSAgICAic2MgJDMsICUxXG4iCistCSAgICAiYmVxICQzLCAwLCAxYiIKKy0JICAgIDogIj0mciIob3JpZykKKy0JICAgIDogIm0iKCpwKSwgInIiKHZhbCkKKy0JICAgIDogIm1lbW9yeSIsICIkMyIKKy0JCSk7CisrCV9fYXNtX18gX192b2xhdGlsZV9fICgKKysJIgkuc2V0CXB1c2gJCVxuIgorKwkiCS5zZXQJbWlwczIJCVxuIgorKwkiCS5zZXQJbm9yZW9yZGVyCVxuIgorKwkiCS5zZXQJbm9hdAkJXG4iCisrCSIxOglsbAkkMSwgJTEJCVxuIgorKwkiCWFkZHUJJTAsICQxLCAlMglcbiIKKysJIglzYwklMCwgJTEJCVxuIgorKwkiCWJlcXoJJTAsIDFiCQlcbiIKKysJIgltb3ZlCSUwLCAkMQkJXG4iCisrCSIJLnNldAlwb3AJCVxuIgorKwk6ICI9JnIiIChvcmlnKSwgIitSIiAoKnApCisrCTogInIiICh2YWwpCisrCTogIm1lbW9yeSIpOworIAorIAlyZXR1cm4gKG9yaWcpOworIH0KK0BAIC01MiwxNiArNTQsNyBAQAorICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZAorIGlzY19hdG9taWNfc3RvcmUoaXNjX2ludDMyX3QgKnAsIGlzY19pbnQzMl90IHZhbCkgeworLQlfX2FzbV9fIHZvbGF0aWxlICgKKy0JICAgICIxOiIKKy0JICAgICJsbCAkMywgJTBcbiIKKy0JICAgICJhZGQgJDMsICQwLCAlMVxuIgorLQkgICAgInNjICQzLCAlMFxuIgorLQkgICAgImJlcSAkMywgMCwgMWIiCistCSAgICA6CistCSAgICA6ICJtIigqcCksICJyIih2YWwpCistCSAgICA6ICJtZW1vcnkiLCAiJDMiCistCQkpOworKwkqcCA9IHZhbDsKKyB9CisgCisgLyoKK0BAIC03MiwyMCArNjUsMjMgQEAKKyBzdGF0aWMgaW5saW5lIGlzY19pbnQzMl90CisgaXNjX2F0b21pY19jbXB4Y2hnKGlzY19pbnQzMl90ICpwLCBpbnQgY21wdmFsLCBpbnQgdmFsKSB7CisgCWlzY19pbnQzMl90IG9yaWc7CisrCWlzY19pbnQzMl90IHRtcDsKKyAKKy0JX19hc21fXyB2b2xhdGlsZSgKKy0JICAgICIxOiIKKy0JICAgICJsbCAkMywgJTFcbiIKKy0JICAgICJhZGQgJTAsICQwLCAkM1xuIgorLQkgICAgImJuZSAkMywgJTIsIDJmXG4iCistCSAgICAiYWRkICQzLCAkMCwgJTNcbiIKKy0JICAgICJzYyAkMywgJTFcbiIKKy0JICAgICJiZXEgJDMsIDAsIDFiXG4iCistCSAgICAiMjoiCistCSAgICA6ICI9JnIiKG9yaWcpCistCSAgICA6ICJtIigqcCksICJyIihjbXB2YWwpLCAiciIodmFsKQorLQkgICAgOiAibWVtb3J5IiwgIiQzIgorLQkJKTsKKysJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorKwkiCS5zZXQJcHVzaAkJXG4iCisrCSIJLnNldAltaXBzMgkJXG4iCisrCSIJLnNldAlub3Jlb3JkZXIJXG4iCisrCSIJLnNldAlub2F0CQlcbiIKKysJIjE6CWxsCSQxLCAlMQkJXG4iCisrCSIJYm5lCSQxLCAlMywgMmYJXG4iCisrCSIJbW92ZQklMiwgJTQJCVxuIgorKwkiCXNjCSUyLCAlMQkJXG4iCisrCSIJYmVxegklMiwgMWIJCVxuIgorKwkiMjoJbW92ZQklMCwgJDEJCVxuIgorKwkiCS5zZXQJcG9wCQlcbiIKKysJOiAiPSZyIihvcmlnKSwgIitSIiAoKnApLCAiPXIiICh0bXApCisrCTogInIiKGNtcHZhbCksICJyIih2YWwpCisrCTogIm1lbW9yeSIpOworIAorIAlyZXR1cm4gKG9yaWcpOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL25hbWVkLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9uYW1lZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTU2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9uYW1lZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMjIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QmVya2VsZXkgSW50ZXJuZXQgTmFtZSBEb21haW4gKEROUykKK1dhbnRzPW5zcy1sb29rdXAudGFyZ2V0CitCZWZvcmU9bnNzLWxvb2t1cC50YXJnZXQKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9iaW5kOQorUElERmlsZT0vcnVuL25hbWVkL25hbWVkLnBpZAorCitFeGVjU3RhcnRQcmU9QFNCSU5ESVJAL2dlbmVyYXRlLXJuZGMta2V5LnNoCitFeGVjU3RhcnQ9QFNCSU5ESVJAL25hbWVkICRPUFRJT05TCisKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9zaCAtYyAnQFNCSU5ESVJAL3JuZGMgcmVsb2FkID4gL2Rldi9udWxsIDI+JjEgfHwgQEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQnCisKK0V4ZWNTdG9wPUBCQVNFX0JJTkRJUkAvc2ggLWMgJ0BTQklORElSQC9ybmRjIHN0b3AgPiAvZGV2L251bGwgMj4mMSB8fCBAQkFTRV9CSU5ESVJAL2tpbGwgLVRFUk0gJE1BSU5QSUQnCisKK1ByaXZhdGVUbXA9dHJ1ZQorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhZTI4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMi1QNC5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJJU0MgSW50ZXJuZXQgRG9tYWluIE5hbWUgU2VydmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pc2Mub3JnL3N3L2JpbmQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiSVNDICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0wYTk1ZjUyYTBhYjZjNWY1MmRlZGM5YTQ1ZTdhYmIzZiIKKworREVQRU5EUyA9ICJvcGVuc3NsIGxpYmNhcCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaXNjLm9yZy9pc2MvYmluZDkvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyYXRlLXJuZGMta2V5LnNoIFwKKyAgICAgICAgICAgZmlsZTovL25hbWVkLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vYmluZDkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjhiMWY1MDY0ODM3NzU2YzkzOGVhZGMxNTM3ZGVjNWM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMwMGIyMWVjMWRlZjIxMjk1N2YyOGVmZTlkMTBhYWM1MmQ2ZWM1MTVlODRmYmYyYzQyMTQzZjVkNzE0MjljYjgiCisKK0VOQUJMRV9JUFY2ID0gIi0tZW5hYmxlLWlwdjY9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ3llcycsICdubycsIGQpfSIKK0VYVFJBX09FQ09ORiA9ICIgJHtFTkFCTEVfSVBWNn0gLS13aXRoLXJhbmRvbWRldj0vZGV2L3JhbmRvbSAtLWRpc2FibGUtdGhyZWFkcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZXZwb2xsIC0tZGlzYWJsZS1lcG9sbCAtLXdpdGgtZ29zdD1ubyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1nc3NhcGk9bm8gLS13aXRoLWVjZHNhPXllcyBcCisgICAgICAgICAgICAgICAgIC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9L2JpbmQgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtb3BlbnNzbD0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAiCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kIHVzZXJhZGQgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz0gIiIKK1BBQ0tBR0VDT05GSUdbaHR0cHN0YXRzXSA9ICItLXdpdGgtbGlieG1sMiwtLXdpdGhvdXQtbGlieG1sMixsaWJ4bWwyIgorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgL3Zhci9jYWNoZS9iaW5kIC0tbm8tY3JlYXRlLWhvbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgYmluZCIKKworSU5JVFNDUklQVF9OQU1FID0gImJpbmQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm5hbWVkLnNlcnZpY2UiCisKK1BBUkFMTEVMX01BS0UgPSAiIgorCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tY29yZSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK1BBQ0tBR0VfQkVGT1JFX1BOICs9ICIke1BOfS11dGlscyIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9ob3N0ICR7YmluZGlyfS9kaWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9pc2MtY29uZmlnLmgiCitGSUxFU18ke1BOfSArPSAiJHtzYmluZGlyfS9nZW5lcmF0ZS1ybmRjLWtleS5zaCIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworCSMgY2xlYW4gaG9zdCBwYXRoIGluIGlzYy1jb25maWcuc2ggYmVmb3JlIHRoZSBoYXJkbGluayBjcmVhdGVkCisJIyBieSAibWFrZSBpbnN0YWxsIjoKKwkjICAgYmluZDktY29uZmlnIC0+IGlzYy1jb25maWcuc2gKKwlzZWQgLWkgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LCIgJHtCfS9pc2MtY29uZmlnLnNoCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtICIke0R9JHtiaW5kaXJ9L25zbG9va3VwIgorCXJtICIke0R9JHttYW5kaXJ9L21hbjEvbnNsb29rdXAuMSIKKwlybWRpciAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuIgorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICIke0R9JHtsb2NhbHN0YXRlZGlyfSIKKwlpbnN0YWxsIC1kICIke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9iaW5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2JpbmQiCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIgorCWluc3RhbGwgLW0gNjQ0ICR7U30vY29uZi8qICIke0R9JHtzeXNjb25mZGlyfS9iaW5kLyIKKwlpbnN0YWxsIC1tIDc1NSAiJHtTfS9pbml0LmQiICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYmluZCIKKwlzZWQgLWkgLWUgJzFzLCMhLipweXRob24sIyEgL3Vzci9iaW4vZW52IHB5dGhvbiwnICR7RH0ke3NiaW5kaXJ9L2Ruc3NlYy1jb3ZlcmFnZSAke0R9JHtzYmluZGlyfS9kbnNzZWMtY2hlY2tkcworCisJIyBJbnN0YWxsIHN5c3RlbWQgcmVsYXRlZCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYmluZAorCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9L2dlbmVyYXRlLXJuZGMta2V5LnNoICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25hbWVkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbmFtZWQuc2VydmljZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYmluZDkgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorfQorCitDT05GRklMRVNfJHtQTn0gPSAiIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZiBcCisJJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYubG9jYWwgXAorCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mLm9wdGlvbnMgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi4wIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuMTI3IFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuZW1wdHkgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi5sb2NhbCBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLnJvb3QgXAorCSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5YzQ0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS5pbmMKQEAgLTAsMCArMSwxMDUgQEAKK1NVTU1BUlkgPSAiTGludXggQmx1ZXRvb3RoIFN0YWNrIFVzZXJsYW5kIFY1IgorREVTQ1JJUFRJT04gPSAiTGludXggQmx1ZXRvb3RoIHN0YWNrIFY1IHVzZXJsYW5kIGNvbXBvbmVudHMuICBUaGVzZSBpbmNsdWRlIGEgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCBkYWVtb25zLCB0b29scyBhbmQgc3lzdGVtIGxpYnJhcmllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmJsdWV6Lm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWZiNTA0YjY3YzUwMzMxZmM3ODczNGZlZDkwZmIwZTA5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OWJjNTRiOTNjZDdlMTdiZjAzZjUyNTEzZjM5ZjkyNmUiCitERVBFTkRTID0gInVkZXYgbGlidXNiIGRidXMtZ2xpYiBnbGliLTIuMCBsaWJjaGVjayByZWFkbGluZSIKK1BST1ZJREVTICs9ICJibHVlei1oY2lkdW1wIgorUlBST1ZJREVTXyR7UE59ICs9ICJibHVlei1oY2lkdW1wIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImJsdWV6NCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9iZXgtcHJvZmlsZXMiCitQQUNLQUdFQ09ORklHW29iZXgtcHJvZmlsZXNdID0gIi0tZW5hYmxlLW9iZXgsLS1kaXNhYmxlLW9iZXgsbGliaWNhbCIKK1BBQ0tBR0VDT05GSUdbZXhwZXJpbWVudGFsXSA9ICItLWVuYWJsZS1leHBlcmltZW50YWwsLS1kaXNhYmxlLWV4cGVyaW1lbnRhbCwiCisKK1NSQ19VUkkgPSAiXAorICAgICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvYmx1ZXRvb3RoL2JsdWV6LSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovL2JsdWV0b290aC5jb25mIFwKKyIKK1MgPSAiJHtXT1JLRElSfS9ibHVlei0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZyBzeXN0ZW1kCisKK0VYVFJBX09FQ09ORiA9ICJcCisgIC0tZW5hYmxlLXRvb2xzIFwKKyAgLS1kaXNhYmxlLWN1cHMgXAorICAtLWVuYWJsZS10ZXN0IFwKKyAgLS1lbmFibGUtZGF0YWZpbGVzIFwKKyAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJy0tZW5hYmxlLXN5c3RlbWQnLCAnLS1kaXNhYmxlLXN5c3RlbWQnLCBkKX0gXAorICAtLWVuYWJsZS1saWJyYXJ5IFwKKyIKKworIyBibHVlejUgYnVpbGRzIGEgbGFyZ2UgbnVtYmVyIG9mIHVzZWZ1bCB1dGlsaXRpZXMgYnV0IGRvZXMgbm90CisjIGluc3RhbGwgdGhlbS4gIFNwZWNpZnkgd2hpY2ggb25lcyB3ZSB3YW50IHB1dCBpbnRvICR7UE59LW5vaW5zdC10b29scy4KK05PSU5TVF9UT09MU19SRUFETElORSA/Pz0gIiIKK05PSU5TVF9UT09MU19FWFBFUklNRU5UQUwgPz89ICIiCitOT0lOU1RfVE9PTFMgPSAiIFwKKyAgICAke05PSU5TVF9UT09MU19SRUFETElORX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2V4cGVyaW1lbnRhbCcsICcke05PSU5TVF9UT09MU19FWFBFUklNRU5UQUx9JywgJycsIGQpfSBcCisiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYmx1ZXRvb3RoLworCWlmIFsgLWYgJHtTfS9wcm9maWxlcy9hdWRpby9hdWRpby5jb25mIF07IHRoZW4KKwkgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vcHJvZmlsZXMvYXVkaW8vYXVkaW8uY29uZiAke0R9LyR7c3lzY29uZmRpcn0vYmx1ZXRvb3RoLworCWZpCisJaWYgWyAtZiAke1N9L3Byb2ZpbGVzL25ldHdvcmsvbmV0d29yay5jb25mIF07IHRoZW4KKwkgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vcHJvZmlsZXMvbmV0d29yay9uZXR3b3JrLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCWlmIFsgLWYgJHtTfS9wcm9maWxlcy9pbnB1dC9pbnB1dC5jb25mIF07IHRoZW4KKwkgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vcHJvZmlsZXMvaW5wdXQvaW5wdXQuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vYmx1ZXRvb3RoLworCWZpCisJIyBhdF9jb25zb2xlIGRvZXNuJ3QgcmVhbGx5IHdvcmsgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiBPRSwgc28gcHVuY2ggc29tZSBtb3JlIGhvbGVzIHNvIHBlb3BsZSBjYW4gYWN0dWFsbHkgdXNlIEJUCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYmx1ZXRvb3RoLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZC8KKworCSMgSW5zdGFsbCBkZXNpcmVkIHRvb2xzIHRoYXQgdXBzdHJlYW0gbGVhdmVzIGluIGJ1aWxkIGFyZWEKKyAgICAgICAgZm9yIGYgaW4gJHtOT0lOU1RfVE9PTFN9IDsgZG8KKwkgICAgaW5zdGFsbCAtbSA3NTUgJHtCfS8kZiAke0R9LyR7YmluZGlyfQorCWRvbmUKK30KKworQUxMT1dfRU1QVFlfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIxIgorUEFDS0FHRVMgPSsgImxpYmFzb3VuZC1tb2R1bGUtYmx1ZXogJHtQTn0tdGVzdHRvb2xzICR7UE59LW9iZXggJHtQTn0tbm9pbnN0LXRvb2xzIgorCitGSUxFU19saWJhc291bmQtbW9kdWxlLWJsdWV6ID0gIiR7bGliZGlyfS9hbHNhLWxpYi9saWIqLnNvICR7ZGF0YWRpcn0vYWxzYSIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vYmx1ZXRvb3RoL3BsdWdpbnMvKi5zbyAke2Jhc2VfbGliZGlyfS91ZGV2LyAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvICR7c3lzdGVtZF91bml0ZGlyfS8gJHtkYXRhZGlyfS9kYnVzLTEiCitGSUxFU18ke1BOfS1kZXYgKz0gIlwKKyAgJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyoubGEgXAorICAke2xpYmRpcn0vYWxzYS1saWIvKi5sYSBcCisiCisKK0ZJTEVTXyR7UE59LW9iZXggPSAiJHtsaWJleGVjZGlyfS9ibHVldG9vdGgvb2JleGQgXAorICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzdGVtZC91c2VyL29iZXguc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzL29yZy5ibHVlei5vYmV4LnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1vYmV4ID0gIm9iZXguc2VydmljZSIKKworRklMRVNfJHtQTn0tdGVzdHRvb2xzID0gIiR7bGliZGlyfS9ibHVlei90ZXN0LyoiCisKK2RlZiBnZXRfbm9pbnN0X3Rvb2xzX3BhdGhzIChkLCBiYiwgdG9vbHMpOgorICAgIHMgPSBsaXN0KCkKKyAgICBiaW5kaXIgPSBkLmdldFZhcigiYmluZGlyIiwgVHJ1ZSkKKyAgICBmb3IgYmRwIGluIHRvb2xzLnNwbGl0KCk6CisgICAgICAgIGYgPSBvcy5wYXRoLmJhc2VuYW1lKGJkcCkKKyAgICAgICAgcy5hcHBlbmQoIiVzLyVzIiAlIChiaW5kaXIsIGYpKQorICAgIHJldHVybiAiXG4iLmpvaW4ocykKKworRklMRVNfJHtQTn0tbm9pbnN0LXRvb2xzID0gIiR7QGdldF9ub2luc3RfdG9vbHNfcGF0aHMoZCwgYmIsIGQuZ2V0VmFyKCdOT0lOU1RfVE9PTFMnLCBUcnVlKSl9IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgJHtsaWJleGVjZGlyfS9ibHVldG9vdGgvLmRlYnVnIFwKKyAgJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLy5kZWJ1ZyBcCisgICR7bGliZGlyfS8qLy5kZWJ1ZyBcCisgICovdWRldi8uZGVidWcgXAorICAqLyovdWRldi8uZGVidWcgXAorICAiCisKK1JERVBFTkRTXyR7UE59LXRlc3R0b29scyArPSAicHl0aG9uIHB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJibHVldG9vdGguc2VydmljZSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4NDViYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9ibHVldG9vdGguY29uZgpAQCAtMCwwICsxLDE3IEBACis8IS0tIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHNwZWNpZmllcyB0aGUgcmVxdWlyZWQgc2VjdXJpdHkgcG9saWNpZXMKKyAgICAgZm9yIEJsdWV0b290aCBjb3JlIGRhZW1vbiB0byB3b3JrLiAtLT4KKworPCFET0NUWVBFIGJ1c2NvbmZpZyBQVUJMSUMgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKKyAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgorPGJ1c2NvbmZpZz4KKworICA8IS0tIC4uL3N5c3RlbS5jb25mIGhhdmUgZGVuaWVkIGV2ZXJ5dGhpbmcsIHNvIHdlIGp1c3QgcHVuY2ggc29tZSBob2xlcyAtLT4KKworICA8cG9saWN5IGNvbnRleHQ9ImRlZmF1bHQiPgorICAgIDxhbGxvdyBvd249Im9yZy5ibHVleiIvPgorICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJvcmcuYmx1ZXoiLz4KKyAgICA8YWxsb3cgc2VuZF9pbnRlcmZhY2U9Im9yZy5ibHVlei5BZ2VudDEiLz4KKyAgICA8YWxsb3cgc2VuZF90eXBlPSJtZXRob2RfY2FsbCIvPgorICA8L3BvbGljeT4KKworPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS4zMy5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjMzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzczOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS4zMy5iYgpAQCAtMCwwICsxLDUyIEBACityZXF1aXJlIGJsdWV6NS5pbmMKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ODc4MmRjMzNkOWE4YjYzNDRjNGNjMWFmNzBjOGE5OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxODAxODA3YTEzNTA2Njc4Y2JmZWIxNWM2YTRiODllY2I1NzM5ZWZlMTA2N2ViNDY0ZGE2NjQxZDczMTQzNmQzIgorCisjIG5vaW5zdCBwcm9ncmFtcyBpbiBNYWtlZmlsZS50b29scyB0aGF0IGFyZSBjb25kaXRpb25hbCBvbiBSRUFETElORQorIyBzdXBwb3J0CitOT0lOU1RfVE9PTFNfUkVBRExJTkUgPz0gIiBcCisgICAgYXR0cmliL2dhdHR0b29sIFwKKyAgICB0b29scy9vYmV4LWNsaWVudC10b29sIFwKKyAgICB0b29scy9vYmV4LXNlcnZlci10b29sIFwKKyAgICB0b29scy9ibHVldG9vdGgtcGxheWVyIFwKKyAgICB0b29scy9vYmV4Y3RsIFwKKyIKKworIyBub2luc3QgcHJvZ3JhbXMgaW4gTWFrZWZpbGUudG9vbHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gRVhQRVJJTUVOVEFMCisjIHN1cHBvcnQKK05PSU5TVF9UT09MU19FWFBFUklNRU5UQUwgPz0gIiBcCisgICAgZW11bGF0b3IvYnR2aXJ0IFwKKyAgICBlbXVsYXRvci9iMWVlIFwKKyAgICBlbXVsYXRvci9oZnAgXAorICAgIHRvb2xzLzNkc3AgXAorICAgIHRvb2xzL21nbXQtdGVzdGVyIFwKKyAgICB0b29scy9nYXAtdGVzdGVyIFwKKyAgICB0b29scy9sMmNhcC10ZXN0ZXIgXAorICAgIHRvb2xzL3Njby10ZXN0ZXIgXAorICAgIHRvb2xzL3NtcC10ZXN0ZXIgXAorICAgIHRvb2xzL2hjaS10ZXN0ZXIgXAorICAgIHRvb2xzL3JmY29tbS10ZXN0ZXIgXAorICAgIHRvb2xzL2JkYWRkciBcCisgICAgdG9vbHMvYXZpbmZvIFwKKyAgICB0b29scy9hdnRlc3QgXAorICAgIHRvb2xzL3Njb3Rlc3QgXAorICAgIHRvb2xzL2FtcHRlc3QgXAorICAgIHRvb2xzL2h3ZGIgXAorICAgIHRvb2xzL2hjaWV2ZW50bWFzayBcCisgICAgdG9vbHMvaGNpc2VjZmlsdGVyIFwKKyAgICB0b29scy9idG1nbXQgXAorICAgIHRvb2xzL2J0aW5mbyBcCisgICAgdG9vbHMvYnRhdHRhY2ggXAorICAgIHRvb2xzL2J0c25vb3AgXAorICAgIHRvb2xzL2J0cHJveHkgXAorICAgIHRvb2xzL2J0aW90ZXN0IFwKKyAgICB0b29scy9tY2FwdGVzdCBcCisgICAgdG9vbHMvY2x0ZXN0IFwKKyAgICB0b29scy9vb2J0ZXN0IFwKKyAgICB0b29scy9zZXEyYnNlcSBcCisgICAgdG9vbHMvaWJlYWNvbiBcCisgICAgdG9vbHMvYnRnYXR0LWNsaWVudCBcCisgICAgdG9vbHMvYnRnYXR0LXNlcnZlciBcCisgICAgdG9vbHMvZ2F0dC1zZXJ2aWNlIFwKKyAgICBwcm9maWxlcy9pYXAvaWFwZCBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDRjMjhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkNvbm5tYW4gY29uZmlnIHRvIHNldHVwIHdpcmVkIGludGVyZmFjZSBvbiBxZW11IG1hY2hpbmVzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBpcyB0aGUgQ29ubk1hbiBjb25maWd1cmF0aW9uIHRvIHNldCB1cCBhIFdpcmVkIFwKK25ldHdvcmsgaW50ZXJmYWNlIGZvciBhIHFlbXUgbWFjaGluZS4iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK1NSQ19VUklfYXBwZW5kX3FlbXVhbGwgPSAiIGZpbGU6Ly93aXJlZC5jb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcmVkLXNldHVwIFwKKyIKK1BSID0gInIyIgorCitTID0gIiR7V09SS0RJUn0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0ZJTEVTXyR7UE59ID0gIiR7bG9jYWxzdGF0ZWRpcn0vKiAke2xpYmRpcn0vKiIKKworZG9faW5zdGFsbCgpIHsKKyAgICAjQ29uZmlndXJlIFdpcmVkIG5ldHdvcmsgaW50ZXJmYWNlIGluIGNhc2Ugb2YgcWVtdSogbWFjaGluZXMKKyAgICBpZiB0ZXN0IC1lICR7V09SS0RJUn0vd2lyZWQuY29uZmlnICYmIHRlc3QgLWUgJHtXT1JLRElSfS93aXJlZC1zZXR1cDsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9jb25ubWFuCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3dpcmVkLmNvbmZpZyAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvY29ubm1hbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vY29ubm1hbgorICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS93aXJlZC1zZXR1cCAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4KKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Njg5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQtc2V0dXAKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK0NPTkZJR0Y9L3Zhci9saWIvY29ubm1hbi93aXJlZC5jb25maWcKKworIyBFeHRyYWN0IHdpcmVkIG5ldHdvcmsgY29uZmlnIGZyb20gL3Byb2MvY21kbGluZQorTkVUX0NPTkY9YGNhdCAvcHJvYy9jbWRsaW5lIHxzZWQgLW5lICdzL14uKmlwPVwoW14gXSpcKTpcKFteIF0qXCk6XChbXiBdKlwpOlwoW14gXSpcKS4qJC9cMVwvXDRcL1wzL3AnYAorCisjIENoZWNrIGlmIGV0aDAgaXMgYWxyZWFkeSBzZXQgdmlhIGtlcm5lbCBjbWRsaW5lCitpZiBbICJ4JE5FVF9DT05GIiA9ICJ4IiBdOyB0aGVuCisJIyBXaXJlZCBpbnRlcmZhY2UgaXMgbm90IGNvbmZpZ3VyZWQgdmlhIGtlcm5lbCBjbWRsaW5lCisJIyBSZW1vdmUgY29ubm1hbiBjb25maWcgZmlsZSB0ZW1wbGF0ZQorCXJtIC1mICR7Q09ORklHRn0KK2Vsc2UKKwkjIFNldHVwIGEgY29ubm1hbiBjb25maWcgYWNjb3JkaW5nbHkKKwlzZWQgLWkgLWUgInN8XklQdjQgPS4qfElQdjQgPSAke05FVF9DT05GfXwiICR7Q09ORklHRn0KK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQuY29uZmlnIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk5OGNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLmNvbmZpZwpAQCAtMCwwICsxLDkgQEAKK1tnbG9iYWxdCitOYW1lID0gV2lyZWQKK0Rlc2NyaXB0aW9uID0gV2lyZWQgbmV0d29yayBjb25maWd1cmF0aW9uCisKK1tzZXJ2aWNlX2V0aGVybmV0XQorVHlwZSA9IGV0aGVybmV0CitJUHY0ID0KK01BQyA9IDUyOjU0OjAwOjEyOjM0OjU2CitOYW1lc2VydmVycyA9IDguOC44LjgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lLzAwMDEtUmVtb3ZlZC1pY29uLWZyb20tY29ubm1hbi1nbm9tZS1hYm91dC1hcHBsZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTc1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNTkwN2EyM2FkMmY0OTcwMjk2MGEzM2Y5ZTIwMzk1NTI2NzNlYWJjNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMTcgRGVjIDIwMTIgMTQ6MDE6MTggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlZCBpY29uIGZyb20gY29ubm1hbi1nbm9tZSAiYWJvdXQiIGFwcGxldAorCitUaGUgY29ubm1hbi1nbm9tZSAiYWJvdXQiIGFwcGxldCBzaG93ZWQgYSBwaWN0dXJlIHRoYXQKK2NhbiBub3QgYmUgZGlzcGxheWVkLiBUaGVyZSBpcyBubyBkZXNpZ25hdGVkIHBpY3R1cmUKK2luIGNvbm5tYW4tZ25vbWUgdG8gYmUgdXNlZCBpbiB0aGUgYWJvdXQgc2VjdGlvbiwgc28KK2l0IHdhcyByZW1vdmVkLgorCitbT0UtQ29yZSAjMjUwOV0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KKy0tLQorIGFwcGxldC9tYWluLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hcHBsZXQvbWFpbi5jIGIvYXBwbGV0L21haW4uYworaW5kZXggZjEyZDM3MS4uYzdiM2M3ZiAxMDA2NDQKKy0tLSBhL2FwcGxldC9tYWluLmMKKysrKyBiL2FwcGxldC9tYWluLmMKK0BAIC0yMTIsNyArMjEyLDcgQEAgc3RhdGljIHZvaWQgYWJvdXRfY2FsbGJhY2soR3RrV2lkZ2V0ICppdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCisgCQkJImNvbW1lbnRzIiwgXygiQSBjb25uZWN0aW9uIG1hbmFnZXIgZm9yIHRoZSBHTk9NRSBkZXNrdG9wIiksCisgCQkJImF1dGhvcnMiLCBhdXRob3JzLAorIAkJCSJ0cmFuc2xhdG9yLWNyZWRpdHMiLCBfKCJ0cmFuc2xhdG9yLWNyZWRpdHMiKSwKKy0JCQkibG9nby1pY29uLW5hbWUiLCAibmV0d29yay13aXJlbGVzcyIsIE5VTEwpOworKwkJCU5VTEwpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzZXR0aW5nc19jYWxsYmFjayhHdGtXaWRnZXQgKml0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9jb25ubWFuLWdub21lLWZpeC1kYnVzLWludGVyZmFjZS1uYW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDA0OWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaApAQCAtMCwwICsxLDE4NyBAQAorY29ubm1hbi1nbm9tZTogZml4IGRidXMgaW50ZXJmYWNlIG5hbWUKKworVGhpcyBwYXRjaCByZXNvbHZlcyBmb2xsb3dpbmcgZXJyb3I6CisKKyJjb25ubWFuLWRidXMueG1sIjogImNvbm5tYW4iIGlzIG5vdCBhIHZhbGlkIEQtQnVzIGludGVyZmFjZSBuYW1lCisKK2h0dHBzOi8vNTAyNTUyLmJ1Z3MuZ2VudG9vLm9yZy9hdHRhY2htZW50LmNnaT9pZD0zODA2NTIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbW1vbi9jb25ubWFuLWNsaWVudC5jIHwgMjQgKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgY29tbW9uL2Nvbm5tYW4tY2xpZW50LmggfCAgNCArKy0tCisgY29tbW9uL2Nvbm5tYW4tZGJ1cy5jICAgfCAgNiArKystLS0KKyBjb21tb24vY29ubm1hbi1kYnVzLnhtbCB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jIGIvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMKK2luZGV4IGM1NWUyNWMuLjlkODE4YjIgMTAwNjQ0CistLS0gYS9jb21tb24vY29ubm1hbi1jbGllbnQuYworKysrIGIvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMKK0BAIC0yODksNyArMjg5LDcgQEAgZ2Jvb2xlYW4gY29ubm1hbl9jbGllbnRfc2V0X2lwdjQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIAorIAlnX3ZhbHVlX2luaXQoJnZhbHVlLCBEQlVTX1RZUEVfR19ESUNUSU9OQVJZKTsKKyAJZ192YWx1ZV9zZXRfYm94ZWQoJnZhbHVlLCBpcHY0KTsKKy0JcmV0ID0gY29ubm1hbl9zZXRfcHJvcGVydHkocHJveHksICJJUHY0LkNvbmZpZ3VyYXRpb24iLCAmdmFsdWUsIE5VTEwpOworKwlyZXQgPSBuZXRfY29ubm1hbl9zZXRfcHJvcGVydHkocHJveHksICJJUHY0LkNvbmZpZ3VyYXRpb24iLCAmdmFsdWUsIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgCitAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X3Bvd2VyZWQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIAlnX3ZhbHVlX3NldF9ib29sZWFuKCZ2YWx1ZSwgcG93ZXJlZCk7CisgCisgCWVycm9yID0gTlVMTDsKKy0JY29ubm1hbl9zZXRfcHJvcGVydHkocHJveHksICJQb3dlcmVkIiwgJnZhbHVlLCAmZXJyb3IpOworKwluZXRfY29ubm1hbl9zZXRfcHJvcGVydHkocHJveHksICJQb3dlcmVkIiwgJnZhbHVlLCAmZXJyb3IpOworIAlpZiggZXJyb3IgKQorIAkJZnByaW50ZiAoc3RkZXJyLCAiZXJyb3I6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisgCitAQCAtMzI1LDcgKzMyNSw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X3Bvd2VyZWQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIH0KKyAKKyB2b2lkIGNvbm5tYW5fY2xpZW50X3NjYW4oQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorLQkJCQkJCWNvbm5tYW5fc2Nhbl9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcl9kYXRhKQorKwkJCQkJCW5ldF9jb25ubWFuX3NjYW5fcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSkKKyB7CisgCUNvbm5tYW5DbGllbnRQcml2YXRlICpwcml2ID0gQ09OTk1BTl9DTElFTlRfR0VUX1BSSVZBVEUoY2xpZW50KTsKKyAJREJ1c0dQcm94eSAqcHJveHk7CitAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2NhbihDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX3NjYW5fYXN5bmMocHJveHksIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworKwluZXRfY29ubm1hbl9zY2FuX2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK0BAIC0zNTMsNyArMzUzLDcgQEAgZ2Jvb2xlYW4gY29ubm1hbl9jbGllbnRfZ2V0X29mZmxpbmVfc3RhdHVzKENvbm5tYW5DbGllbnQgKmNsaWVudCkKKyAKKyAJREJHKCJjbGllbnQgJXAiLCBjbGllbnQpOworIAorLQlyZXQgPSBjb25ubWFuX2dldF9wcm9wZXJ0aWVzKHByaXYtPm1hbmFnZXIsICZoYXNoLCBOVUxMKTsKKysJcmV0ID0gbmV0X2Nvbm5tYW5fZ2V0X3Byb3BlcnRpZXMocHJpdi0+bWFuYWdlciwgJmhhc2gsIE5VTEwpOworIAorIAlpZiAocmV0ID09IEZBTFNFKQorIAkJZ290byBkb25lOworQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9vZmZsaW5lbW9kZShDb25ubWFuQ2xpZW50ICpjbGllbnQsIGdib29sZWFuIHN0YXR1cykKKyAJZ192YWx1ZV9pbml0KCZ2YWx1ZSwgR19UWVBFX0JPT0xFQU4pOworIAlnX3ZhbHVlX3NldF9ib29sZWFuKCZ2YWx1ZSwgc3RhdHVzKTsKKyAKKy0JY29ubm1hbl9zZXRfcHJvcGVydHkocHJpdi0+bWFuYWdlciwgIk9mZmxpbmVNb2RlIiwgJnZhbHVlLCBOVUxMKTsKKysJbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByaXYtPm1hbmFnZXIsICJPZmZsaW5lTW9kZSIsICZ2YWx1ZSwgTlVMTCk7CisgfQorIAorIHN0YXRpYyBnYm9vbGVhbiBuZXR3b3JrX2Rpc2Nvbm5lY3QoR3RrVHJlZU1vZGVsICptb2RlbCwgR3RrVHJlZVBhdGggKnBhdGgsCitAQCAtMzk4LDcgKzM5OCw3IEBAIHN0YXRpYyBnYm9vbGVhbiBuZXR3b3JrX2Rpc2Nvbm5lY3QoR3RrVHJlZU1vZGVsICptb2RlbCwgR3RrVHJlZVBhdGggKnBhdGgsCisgCQlyZXR1cm4gVFJVRTsKKyAKKyAJaWYgKHR5cGUgPT0gQ09OTk1BTl9UWVBFX1dJRkkpCistCQljb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworKwkJbmV0X2Nvbm5tYW5fZGlzY29ubmVjdChwcm94eSwgTlVMTCk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyAKK0BAIC00MjIsMTMgKzQyMiwxMyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3QoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaykKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlyZXR1cm47CisgCistCWNvbm5tYW5fY29ubmVjdChwcm94eSwgTlVMTCk7CisrCW5ldF9jb25ubWFuX2Nvbm5lY3QocHJveHksIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgfQorIAorIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdF9hc3luYyhDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorLQkJY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSkKKysJCW5ldF9jb25ubWFuX2Nvbm5lY3RfcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJkYXRhKQorIHsKKyAJQ29ubm1hbkNsaWVudFByaXZhdGUgKnByaXYgPSBDT05OTUFOX0NMSUVOVF9HRVRfUFJJVkFURShjbGllbnQpOworIAlEQnVzR1Byb3h5ICpwcm94eTsKK0BAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0X2FzeW5jKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmssCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJZ290byBkb25lOworIAorLQljb25ubWFuX2Nvbm5lY3RfYXN5bmMocHJveHksIGNhbGxiYWNrLCB1c2VyZGF0YSk7CisrCW5ldF9jb25ubWFuX2Nvbm5lY3RfYXN5bmMocHJveHksIGNhbGxiYWNrLCB1c2VyZGF0YSk7CisgCisgZG9uZToKKyAJcmV0dXJuOworQEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X2Rpc2Nvbm5lY3QoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaykKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlyZXR1cm47CisgCistCWNvbm5tYW5fZGlzY29ubmVjdChwcm94eSwgTlVMTCk7CisrCW5ldF9jb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgfQorQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3JlbW92ZShDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKQorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKy0JY29ubm1hbl9yZW1vdmUocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9yZW1vdmUocHJveHksIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgfQorZGlmZiAtLWdpdCBhL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oIGIvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmgKK2luZGV4IDllMmU2ZDUuLjk4MjQxZGUgMTAwNjQ0CistLS0gYS9jb21tb24vY29ubm1hbi1jbGllbnQuaAorKysrIGIvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmgKK0BAIC03MCwxMyArNzAsMTMgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfcG93ZXJlZChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCisgZ2Jvb2xlYW4gY29ubm1hbl9jbGllbnRfc2V0X2lwdjQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIAkJCQlzdHJ1Y3QgaXB2NF9jb25maWcgKmlwdjRfY29uZmlnKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X3NjYW4oQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorLQkJCQkJCQljb25ubWFuX3NjYW5fcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSk7CisrCQkJCQkJCW5ldF9jb25ubWFuX3NjYW5fcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSk7CisgCisgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspOworIHZvaWQgY29ubm1hbl9jbGllbnRfZGlzY29ubmVjdChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyBnY2hhciAqY29ubm1hbl9jbGllbnRfZ2V0X3NlY3VyaXR5KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspOworIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdF9hc3luYyhDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorLQkJCQljb25ubWFuX2Nvbm5lY3RfcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJkYXRhKTsKKysJCQkJbmV0X2Nvbm5tYW5fY29ubmVjdF9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcmRhdGEpOworIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X3JlbWVtYmVyKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmssCisgCQkJCQkJCWdib29sZWFuIHJlbWVtYmVyKTsKKyAKK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1kYnVzLmMgYi9jb21tb24vY29ubm1hbi1kYnVzLmMKK2luZGV4IGI4MmIzZTEuLjU0M2ViNDMgMTAwNjQ0CistLS0gYS9jb21tb24vY29ubm1hbi1kYnVzLmMKKysrKyBiL2NvbW1vbi9jb25ubWFuLWRidXMuYworQEAgLTY1NSwxNSArNjU1LDE1IEBAIERCdXNHUHJveHkgKmNvbm5tYW5fZGJ1c19jcmVhdGVfbWFuYWdlcihEQnVzR0Nvbm5lY3Rpb24gKmNvbm4sCisgCisgCURCRygiZ2V0dGluZyBtYW5hZ2VyIHByb3BlcnRpZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfcHJvcGVydGllc19hc3luYyhwcm94eSwgbWFuYWdlcl9wcm9wZXJ0aWVzLCBzdG9yZSk7CisrCW5ldF9jb25ubWFuX2dldF9wcm9wZXJ0aWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3Byb3BlcnRpZXMsIHN0b3JlKTsKKyAKKyAJREJHKCJnZXR0aW5nIHRlY2hub2xvZ2llcyIpOworIAorLQljb25ubWFuX2dldF90ZWNobm9sb2dpZXNfYXN5bmMocHJveHksIG1hbmFnZXJfdGVjaG5vbG9naWVzLCBzdG9yZSk7CisrCW5ldF9jb25ubWFuX2dldF90ZWNobm9sb2dpZXNfYXN5bmMocHJveHksIG1hbmFnZXJfdGVjaG5vbG9naWVzLCBzdG9yZSk7CisgCisgCURCRygiZ2V0dGluZyBzZXJ2aWNlcyIpOworIAorLQljb25ubWFuX2dldF9zZXJ2aWNlc19hc3luYyhwcm94eSwgbWFuYWdlcl9zZXJ2aWNlcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfc2VydmljZXNfYXN5bmMocHJveHksIG1hbmFnZXJfc2VydmljZXMsIHN0b3JlKTsKKyAKKyAJcmV0dXJuIHByb3h5OworIH0KK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1kYnVzLnhtbCBiL2NvbW1vbi9jb25ubWFuLWRidXMueG1sCitpbmRleCA1NmI5NTgyLi4wMTk5ZDUyIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwKKysrKyBiL2NvbW1vbi9jb25ubWFuLWRidXMueG1sCitAQCAtMSw3ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKyAKKyA8bm9kZSBuYW1lPSIvIj4KKy0gIDxpbnRlcmZhY2UgbmFtZT0iY29ubm1hbiI+CisrICA8aW50ZXJmYWNlIG5hbWU9Im5ldC5jb25ubWFuIj4KKyAgICAgPG1ldGhvZCBuYW1lPSJHZXRQcm9wZXJ0aWVzIj4KKyAgICAgICA8YXJnIHR5cGU9ImF7c3Z9IiBkaXJlY3Rpb249Im91dCIvPgorICAgICA8L21ldGhvZD4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAxLnBuZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyNDdjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAyLnBuZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0ZmI5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAzLnBuZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlYjQwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA0LnBuZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1NDQxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA1LnBuZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0MGFjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9udWxsX2NoZWNrX2Zvcl9pcHY0X2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIxY2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorSW4gbmV0d29ya3MgdGhhdCBkb24ndCBoYXZlIGEgREhDUCBzZXJ2ZXIgY29uZmlndXJlZCwgaXB2NCBhZGRyZXNzCithbGxvY2F0aW9uIGZhaWxzIGFuZCB0aGUgaXB2NCBzdHJ1Y3R1cmUgZG9lc24ndCBnZXQgcG9wdWxhdGVkLiBXaGVuCit0aGUgR1VJIGlzIHRyeWluZyB0byByZWFkIHRoZSBpcHY0X2NvbmZpZy5tZXRob2QgZmllbGQgdG8gc2VlIHdoZXRoZXIKK2l0IGNvbnRhaW5zICJkaGNwIiBzdHJpbmcsIGEgc2VnbWVudGF0aW9uIGZhdWx0IGlzIGdlbmVyYXRlZC4KKworRXRoZXJuZXQgbWFudWFsIGNvbmZpZ3VyYXRpb24gYmVoYXZpb3IgcmVtYWlucyB1bmNoYW5nZWQgYWZ0ZXIgdGhpcyBmaXguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBFbWlsaWEgQ2lvYmFudSA8ZW1pbGlhLm1hcmlhLnNpbHZpYS5jaW9iYW51QGludGVsLmNvbT4KK0luZGV4OiBnaXQvcHJvcGVydGllcy9ldGhlcm5ldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvcHJvcGVydGllcy9ldGhlcm5ldC5jCisrKysgZ2l0L3Byb3BlcnRpZXMvZXRoZXJuZXQuYworQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIGFkZF9ldGhlcm5ldF9zZXJ2aWNlKEd0a1dpZGdldCAqbWFpCisKKyAJZGF0YS0+YnV0dG9uID0gYnV0dG9uOworCistCWlmIChnX3N0cl9lcXVhbChpcHY0X2NvbmZpZy5tZXRob2QsICJkaGNwIikgPT0gVFJVRSkKKysJaWYgKCFpcHY0X2NvbmZpZy5tZXRob2QgfHwgZ19zdHJfZXF1YWwoaXB2NF9jb25maWcubWV0aG9kLCAiZGhjcCIpID09IFRSVUUpCisgCQl1cGRhdGVfZXRoZXJuZXRfaXB2NChkYXRhLCBDT05OTUFOX1BPTElDWV9ESENQKTsKKyAJZWxzZQorIAkJdXBkYXRlX2V0aGVybmV0X2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfTUFOVUFMKTsKK0luZGV4OiBnaXQvcHJvcGVydGllcy93aWZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9wcm9wZXJ0aWVzL3dpZmkuYworKysrIGdpdC9wcm9wZXJ0aWVzL3dpZmkuYworQEAgLTIzMCw3ICsyMzAsNyBAQCBzdGF0aWMgdm9pZCB3aWZpX2lwY29uZmlnKEd0a1dpZGdldCAqdGFiCisKKyAJZGF0YS0+aXB2NF9jb25maWcgPSBpcHY0X2NvbmZpZzsKKworLQlpZiAoZ19zdHJfZXF1YWwoaXB2NF9jb25maWcubWV0aG9kLCAiZGhjcCIpID09IFRSVUUpCisrCWlmICghaXB2NF9jb25maWcubWV0aG9kIHx8IGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorIAkJdXBkYXRlX3dpZmlfaXB2NChkYXRhLCBDT05OTUFOX1BPTElDWV9ESENQKTsKKyAJZWxzZQorIAkJdXBkYXRlX3dpZmlfaXB2NChkYXRhLCBDT05OTUFOX1BPTElDWV9NQU5VQUwpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTc1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZV8wLjcuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJHVEsrIGZyb250ZW5kIGZvciB0aGUgQ29ubk1hbiBuZXR3b3JrIGNvbm5lY3Rpb24gbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb25ubWFuLm5ldC8iCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Byb3BlcnRpZXMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTUwYzc3YzgxODcxMzA4YjAzM2FiN2ExNTA0NjI2YWZiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb25ubWFuLWRidXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1kZTZiNDg1YzBlNzE3YTAyMzY0MDJkMjIwMTg3NzE3YSIKKworREVQRU5EUyA9ICJndGsrIGRidXMtZ2xpYiBpbnRsdG9vbC1uYXRpdmUiCisKKyMgMC43IHRhZworU1JDUkVWID0gImNmM2MzMjViMjNkYWU4NDNjNTQ5OWExMTM1OTFjZmJjOThhY2IxNDMiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vY29ubmVjdGl2aXR5L2Nvbm5tYW4tZ25vbWUuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmVtb3ZlZC1pY29uLWZyb20tY29ubm1hbi1nbm9tZS1hYm91dC1hcHBsZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW1hZ2VzLyogXAorICAgICAgICAgICBmaWxlOi8vY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ3RrLWljb24tY2FjaGUgcGtnY29uZmlnCisKK1JERVBFTkRTXyR7UE59ID0gImNvbm5tYW4iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ltYWdlcy8qICR7RH0vdXNyL3NoYXJlL2ljb25zL2hpY29sb3IvMjJ4MjIvYXBwcy8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RjNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4uaW5jCkBAIC0wLDAgKzEsMjExIEBACitTVU1NQVJZID0gIkEgZGFlbW9uIGZvciBtYW5hZ2luZyBpbnRlcm5ldCBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBDb25uTWFuIHByb2plY3QgcHJvdmlkZXMgYSBkYWVtb24gZm9yIG1hbmFnaW5nIFwKK2ludGVybmV0IGNvbm5lY3Rpb25zIHdpdGhpbiBlbWJlZGRlZCBkZXZpY2VzIHJ1bm5pbmcgdGhlIExpbnV4IFwKK29wZXJhdGluZyBzeXN0ZW0uICBUaGUgQ29ubmVjdGlvbiBNYW5hZ2VyIGlzIGRlc2lnbmVkIHRvIGJlIHNsaW0gYW5kIFwKK3RvIHVzZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlLCBzbyBpdCBjYW4gYmUgZWFzaWx5IGludGVncmF0ZWQuIFwKK0l0IGlzIGEgZnVsbHkgbW9kdWxhciBzeXN0ZW0gdGhhdCBjYW4gYmUgZXh0ZW5kZWQsIHRocm91Z2ggcGx1Zy1pbnMsIFwKK3RvIHN1cHBvcnQgYWxsIGtpbmRzIG9mIHdpcmVkIG9yIHdpcmVsZXNzIHRlY2hub2xvZ2llcy4gQWxzbywgXAorY29uZmlndXJhdGlvbiBtZXRob2RzLCBsaWtlIERIQ1AgYW5kIGRvbWFpbiBuYW1lIHJlc29sdmluZywgYXJlIFwKK2ltcGxlbWVudGVkIHVzaW5nIHBsdWctaW5zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb25ubWFuLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vMDEub3JnL2ppcmEvYnJvd3NlL0NNIgorTElDRU5TRSAgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTQ4NmEyNzlhNmFiMGM4ZDE1MmJjZGEzYTViNWVkYzM2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgc3lzdGVtZCB1cGRhdGUtcmMuZCBibHVldG9vdGgKKworREVQRU5EUyAgPSAiZGJ1cyBnbGliLTIuMCBwcHAgaXB0YWJsZXMiCisKK0lOQ19QUiA9ICJyMjAiCisKK0VYVFJBX09FQ09ORiArPSAiXAorICAgIGFjX2N2X3BhdGhfV1BBU1VQUExJQ0FOVD0ke3NiaW5kaXJ9L3dwYV9zdXBwbGljYW50IFwKKyAgICBhY19jdl9wYXRoX1BQUEQ9JHtzYmluZGlyfS9wcHBkIFwKKyAgICAtLWVuYWJsZS1kZWJ1ZyBcCisgICAgLS1lbmFibGUtbG9vcGJhY2sgXAorICAgIC0tZW5hYmxlLWV0aGVybmV0IFwKKyAgICAtLWVuYWJsZS10b29scyBcCisgICAgLS1lbmFibGUtdGVzdCBcCisgICAgLS1kaXNhYmxlLXBvbGtpdCBcCisgICAgLS1lbmFibGUtY2xpZW50IFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIndpc3ByIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywnd2lmaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICczZycsJzNnJywgJycsIGQpfSBcCisiCisKKyMgSWYgeW91IHdhbnQgQ29ubk1hbiB0byBzdXBwb3J0IFZQTiwgYWRkIGZvbGxvd2luZyBzdGF0ZW1lbnQgaW50bworIyBsb2NhbC5jb25mIG9yIGRpc3RybyBjb25maWcKKyMgUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tY29ubm1hbiA9ICIgb3BlbnZwbiB2cG5jIGwydHAgcHB0cCIKKworUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRoLXN5c3RlbWR1bml0ZGlyPSIKK1BBQ0tBR0VDT05GSUdbd2lmaV0gPSAiLS1lbmFibGUtd2lmaSwgLS1kaXNhYmxlLXdpZmksIHdwYS1zdXBwbGljYW50LCB3cGEtc3VwcGxpY2FudCIKK1BBQ0tBR0VDT05GSUdbYmx1ZXpdID0gIi0tZW5hYmxlLWJsdWV0b290aCwgLS1kaXNhYmxlLWJsdWV0b290aCwgJHtCTFVFWn0sICR7QkxVRVp9IgorUEFDS0FHRUNPTkZJR1szZ10gPSAiLS1lbmFibGUtb2Zvbm8sIC0tZGlzYWJsZS1vZm9ubywgb2Zvbm8sIG9mb25vIgorUEFDS0FHRUNPTkZJR1t0aXN0XSA9ICItLWVuYWJsZS10aXN0LC0tZGlzYWJsZS10aXN0LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnZwbl0gPSAiLS1lbmFibGUtb3BlbnZwbiAtLXdpdGgtb3BlbnZwbj0ke3NiaW5kaXJ9L29wZW52cG4sLS1kaXNhYmxlLW9wZW52cG4sLG9wZW52cG4iCitQQUNLQUdFQ09ORklHW3ZwbmNdID0gIi0tZW5hYmxlLXZwbmMgLS13aXRoLXZwbmM9JHtzYmluZGlyfS92cG5jLC0tZGlzYWJsZS12cG5jLCx2cG5jIgorUEFDS0FHRUNPTkZJR1tsMnRwXSA9ICItLWVuYWJsZS1sMnRwIC0td2l0aC1sMnRwPSR7c2JpbmRpcn0veGwydHBkLC0tZGlzYWJsZS1sMnRwLCx4bDJ0cGQiCitQQUNLQUdFQ09ORklHW3BwdHBdID0gIi0tZW5hYmxlLXBwdHAgLS13aXRoLXBwdHA9JHtzYmluZGlyfS9wcHRwLC0tZGlzYWJsZS1wcHRwLCxwcHRwLWxpbnV4IgorIyBXSVNQciBzdXBwb3J0IGZvciBsb2dnaW5nIGludG8gaG90c3BvdHMsIHJlcXVpcmVzIFRMUworUEFDS0FHRUNPTkZJR1t3aXNwcl0gPSAiLS1lbmFibGUtd2lzcHIsLS1kaXNhYmxlLXdpc3ByLGdudXRscywiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJjb25ubWFuIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDUgNSAyIDMgLiBzdG9wIDIyIDAgMSA2IC4iCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgc3lzdGVtZF9wYWNrYWdlcyA9ICIke1BOfSIKKyAgICBwa2djb25maWcgPSBkLmdldFZhcignUEFDS0FHRUNPTkZJRycsIFRydWUpCisgICAgaWYgKCdvcGVudnBuJyBvciAndnBuYycgb3IgJ2wydHAnIG9yICdwcHRwJykgaW4gcGtnY29uZmlnLnNwbGl0KCk6CisgICAgICAgIHN5c3RlbWRfcGFja2FnZXMgKz0gIiAke1BOfS12cG4iCisgICAgZC5zZXRWYXIoJ1NZU1RFTURfUEFDS0FHRVMnLCBzeXN0ZW1kX3BhY2thZ2VzKQorfQorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiY29ubm1hbi5zZXJ2aWNlIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXZwbiA9ICJjb25ubWFuLXZwbi5zZXJ2aWNlIgorU1lTVEVNRF9XSVJFRF9TRVRVUCA9ICJFeGVjU3RhcnRQcmU9LSR7bGliZGlyfS9jb25ubWFuL3dpcmVkLXNldHVwIgorCisjIFRoaXMgYWxsb3dzICpldmVyeW9uZSogdG8gYWNjZXNzIENvbm5NYW4gb3ZlciBEQnVzLCB3aXRob3V0IGFueSBhY2Nlc3MKKyMgY29udHJvbC4gIFJlYWxseSB0aGUgYXRfY29uc29sZSBmbGFnIHNob3VsZCB3b3JrLCB3aGljaCB3b3VsZCBtZWFuIHRoYXQKKyMgYm90aCB0aGlzIGFuZCB0aGUgeHVzZXIgcGF0Y2ggY2FuIGJlIGRyb3BwZWQuCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgczpkZW55OmFsbG93OmcgJHtTfS9zcmMvY29ubm1hbi1kYnVzLmNvbmYKKwlzZWQgLWkgLWUgczpkZW55OmFsbG93OmcgJHtTfS92cG4vdnBuLWRidXMuY29uZgorCisJc2VkIC1pICJzI0V4ZWNTdGFydD0jJHtTWVNURU1EX1dJUkVEX1NFVFVQfVxuRXhlY1N0YXJ0PSMiICR7Qn0vc3JjL2Nvbm5tYW4uc2VydmljZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jb25ubWFuICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jb25ubWFuCisJCXNlZCAtaSBzJUBMSUJESVJAJSR7bGliZGlyfSUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nvbm5tYW4KKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdG9vbHMvKi10ZXN0ICR7RH0ke2JpbmRpcn0KKwlpZiBbIC1lICR7Qn0vdG9vbHMvd2lzcHIgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtCfS90b29scy93aXNwciAke0R9JHtiaW5kaXJ9CisJZmkKKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9jbGllbnQvY29ubm1hbmN0bCAke0R9JHtiaW5kaXJ9CisKKwkjIFdlIGRvbid0IG5lZWQgdG8gcGFja2FnZSBhbiBlbXB0eSBkaXJlY3RvcnkKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4vc2NyaXB0cworCisJIyBBdXRvbWFrZSAxLjEyIHdvbid0IGluc3RhbGwgZW1wdHkgZGlyZWN0b3JpZXMsIGJ1dCB3ZSBuZWVkIHRoZQorCSMgcGx1Z2lucyBkaXJlY3RvcnkgdG8gYmUgcHJlc2VudCBmb3Igb3duZXJzaGlwCisJbWtkaXIgLXAgJHtEfSR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMKK30KKworIyBUaGVzZSB1c2VkIHRvIGJlIHBsdWdpbnMsIGJ1dCBub3cgdGhleSBhcmUgY29yZQorUlBST1ZJREVTXyR7UE59ID0gIlwKKwljb25ubWFuLXBsdWdpbi1sb29wYmFjayBcCisJY29ubm1hbi1wbHVnaW4tZXRoZXJuZXQgXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2JsdWV0b290aCcsJ2Nvbm5tYW4tcGx1Z2luLWJsdWV0b290aCcsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3dpZmknLCdjb25ubWFuLXBsdWdpbi13aWZpJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnM2cnLCdjb25ubWFuLXBsdWdpbi1vZm9ubycsICcnLCBkKX0gXAorCSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorCWRidXMgXAorCSR7QGJhc2VfY29uZGl0aW9uYWwoJ1JPT1RMRVNTX1gnLCAnMScsICd4dXNlci1hY2NvdW50JywgJycsIGQpfSBcCisJIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeJHtQTn0tcGx1Z2luLS4qIgorCitkZWYgYWRkX3JkZXBlbmRzKGJiLCBkLCBmaWxlLCBwa2csIGRlcG1hcCwgbXVsdGlsaWJfcHJlZml4LCBhZGRfaW5zYW5lX3NraXApOgorICAgIHBsdWdpbnR5cGUgPSBwa2cuc3BsaXQoICctJyApWy0xXQorICAgIGlmIHBsdWdpbnR5cGUgaW4gZGVwbWFwOgorICAgICAgICByZGVwZW5kcyA9IG1hcChsYW1iZGEgeDogbXVsdGlsaWJfcHJlZml4ICsgeCwgXAorICAgICAgICAgICAgICAgICAgICAgICBkZXBtYXBbcGx1Z2ludHlwZV0uc3BsaXQoKSkKKyAgICAgICAgZC5zZXRWYXIoIlJERVBFTkRTXyVzIiAlIHBrZywgIiAiLmpvaW4ocmRlcGVuZHMpKQorICAgIGlmIGFkZF9pbnNhbmVfc2tpcDoKKyAgICAgICAgZC5hcHBlbmRWYXIoIklOU0FORV9TS0lQXyVzIiAlIHBrZywgImRldi1zbyIpCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGRlcG1hcCA9IGRpY3QocHBwZD0icHBwIikKKyAgICBtdWx0aWxpYl9wcmVmaXggPSAoZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkgb3IgIiIpCisKKyAgICBob29rID0gbGFtYmRhIGZpbGUscGtnLHgseSx6OiBcCisgICAgICAgIGFkZF9yZGVwZW5kcyhiYiwgZCwgZmlsZSwgcGtnLCBkZXBtYXAsIG11bHRpbGliX3ByZWZpeCwgRmFsc2UpCisgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLycpCisgICAgcGx1Z2luX25hbWUgPSBkLmV4cGFuZCgnJHtQTn0tcGx1Z2luLSVzJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5fZGlyLCAnXiguKikuc28kJywgcGx1Z2luX25hbWUsIFwKKyAgICAgICAgJyR7UE59IHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBob29rPWhvb2ssIHByZXBlbmQ9VHJ1ZSApCisKKyAgICBob29rID0gbGFtYmRhIGZpbGUscGtnLHgseSx6OiBcCisgICAgICAgIGFkZF9yZGVwZW5kcyhiYiwgZCwgZmlsZSwgcGtnLCBkZXBtYXAsIG11bHRpbGliX3ByZWZpeCwgVHJ1ZSkKKyAgICBwbHVnaW5fZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuLycpCisgICAgcGx1Z2luX25hbWUgPSBkLmV4cGFuZCgnJHtQTn0tcGx1Z2luLXZwbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgJ14oLiopLnNvJCcsIHBsdWdpbl9uYW1lLCBcCisgICAgICAgICcke1BOfSBWUE4gcGx1Z2luIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIGhvb2s9aG9vaywgcHJlcGVuZD1UcnVlICkKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzICR7UE59LXRlc3RzICR7UE59LWNsaWVudCIKKworRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3dpc3ByIgorCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2JpbmRpcn0vKi10ZXN0ICR7bGliZGlyfS8ke0JQTn0vdGVzdC8qIgorUkRFUEVORFNfJHtQTn0tdGVzdHMgPSAicHl0aG9uLWRidXMgcHl0aG9uLXB5Z29iamVjdCBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1mY250bCBweXRob24tbmV0Y2xpZW50IgorCitGSUxFU18ke1BOfS1jbGllbnQgPSAiJHtiaW5kaXJ9L2Nvbm5tYW5jdGwiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiAke2xpYmV4ZWNkaXJ9LyogJHtsaWJkaXJ9L2xpYiouc28uKiBcCisgICAgICAgICAgICAke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zIFwKKyAgICAgICAgICAgICR7c3lzY29uZmRpcn0gJHtzaGFyZWRzdGF0ZWRpcn0gJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS8qICR7YmFzZV9zYmluZGlyfS8qICR7YmFzZV9saWJkaXJ9Lyouc28qICR7ZGF0YWRpcn0vJHtQTn0gXAorICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzLyoiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2Nvbm5tYW4vKi8uZGVidWciCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2Nvbm5tYW4vKi8qLmxhIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tdnBuIgorCitTVU1NQVJZXyR7UE59LXZwbiA9ICJBIGRhZW1vbiBmb3IgbWFuYWdpbmcgVlBOIGNvbm5lY3Rpb25zIHdpdGhpbiBlbWJlZGRlZCBkZXZpY2VzIgorREVTQ1JJUFRJT05fJHtQTn0tdnBuID0gIlRoZSBDb25uTWFuIFZQTiBwcm92aWRlcyBhIGRhZW1vbiBmb3IgXAorbWFuYWdpbmcgVlBOIGNvbm5lY3Rpb25zIHdpdGhpbiBlbWJlZGRlZCBkZXZpY2VzIHJ1bm5pbmcgdGhlIExpbnV4IFwKK29wZXJhdGluZyBzeXN0ZW0uICBUaGUgY29ubm1hbi12cG5kIGhhbmRsZXMgYWxsIHRoZSBWUE4gY29ubmVjdGlvbnMgXAorYW5kIHN0YXJ0cy9zdG9wcyBWUE4gY2xpZW50IHByb2Nlc3NlcyB3aGVuIG5lY2Vzc2FyeS4gVGhlIGNvbm5tYW4tdnBuZCBcCitwcm92aWRlcyBhIERCdXMgQVBJIGZvciBtYW5hZ2luZyBWUE4gY29ubmVjdGlvbnMuIEFsbCB0aGUgZGlmZmVyZW50IFwKK1ZQTiB0ZWNobm9naWVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBwbHVnLWlucy4iCitGSUxFU18ke1BOfS12cG4gKz0gIiR7c2JpbmRpcn0vY29ubm1hbi12cG5kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvY29ubm1hbi12cG4tZGJ1cy5jb25mIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzL25ldC5jb25ubWFuLnZwbi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9jb25ubWFuLXZwbi5zZXJ2aWNlIgorCitTVU1NQVJZXyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbiA9ICJBbiBPcGVuVlBOIHBsdWdpbiBmb3IgQ29ubk1hbiBWUE4iCitERVNDUklQVElPTl8ke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4gPSAiVGhlIENvbm5NYW4gT3BlblZQTiBwbHVnaW4gdXNlcyBvcGVudnBuIGNsaWVudCBcCit0byBjcmVhdGUgYSBWUE4gY29ubmVjdGlvbiB0byBPcGVuVlBOIHNlcnZlci4iCitGSUxFU18ke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4gKz0gIiR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMvb3BlbnZwbi1zY3JpcHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi9vcGVudnBuLnNvIgorUkRFUEVORFNfJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuICs9ICIke1BOfS12cG4iCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCdvcGVudnBuJywnJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuJywgJycsIGQpfSIKKworU1VNTUFSWV8ke1BOfS1wbHVnaW4tdnBuLXZwbmMgPSAiQSB2cG5jIHBsdWdpbiBmb3IgQ29ubk1hbiBWUE4iCitERVNDUklQVElPTl8ke1BOfS1wbHVnaW4tdnBuLXZwbmMgPSAiVGhlIENvbm5NYW4gdnBuYyBwbHVnaW4gdXNlcyB2cG5jIGNsaWVudCBcCit0byBjcmVhdGUgYSBWUE4gY29ubmVjdGlvbiB0byBDaXNjbzMwMDAgVlBOIENvbmNlbnRyYXRvci4iCitGSUxFU18ke1BOfS1wbHVnaW4tdnBuLXZwbmMgKz0gIiR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMvb3BlbmNvbm5lY3Qtc2NyaXB0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vdnBuYy5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tdnBuYyArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywndnBuYycsJyR7UE59LXBsdWdpbi12cG4tdnBuYycsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi1sMnRwID0gIkEgTDJUUCBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1sMnRwID0gIlRoZSBDb25uTWFuIEwyVFAgcGx1Z2luIHVzZXMgeGwydHBkIGRhZW1vbiBcCit0byBjcmVhdGUgYSBWUE4gY29ubmVjdGlvbiB0byBMMlRQIHNlcnZlci4iCitGSUxFU18ke1BOfS1wbHVnaW4tdnBuLWwydHAgKz0gIiR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMvbGlicHBwLXBsdWdpbi5zbyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi9sMnRwLnNvIgorUkRFUEVORFNfJHtQTn0tcGx1Z2luLXZwbi1sMnRwICs9ICIke1BOfS12cG4iCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCdsMnRwJywnJHtQTn0tcGx1Z2luLXZwbi1sMnRwJywgJycsIGQpfSIKKworU1VNTUFSWV8ke1BOfS1wbHVnaW4tdnBuLXBwdHAgPSAiQSBQUFRQIHBsdWdpbiBmb3IgQ29ubk1hbiBWUE4iCitERVNDUklQVElPTl8ke1BOfS1wbHVnaW4tdnBuLXBwdHAgPSAiVGhlIENvbm5NYW4gUFBUUCBwbHVnaW4gdXNlcyBwcHRwLWxpbnV4IGNsaWVudCBcCit0byBjcmVhdGUgYSBWUE4gY29ubmVjdGlvbiB0byBQUFRQIHNlcnZlci4iCitGSUxFU18ke1BOfS1wbHVnaW4tdnBuLXBwdHAgKz0gIiR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMvbGlicHBwLXBsdWdpbi5zbyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi9wcHRwLnNvIgorUkRFUEVORFNfJHtQTn0tcGx1Z2luLXZwbi1wcHRwICs9ICIke1BOfS12cG4iCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCdwcHRwJywnJHtQTn0tcGx1Z2luLXZwbi1wcHRwJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYwM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1wbHVnaW4uaC1DaGFuZ2UtdmlzaWJpbGl0eS10by1kZWZhdWx0LWZvci1kZWJ1Zy1zeW1iLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNGRkYWY3OGRhZDVhOWVlNGEwNjU4MjM1ZjcxYjc1MTMyMTkyMTIzZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDcgQXByIDIwMTIgMTg6NTI6MTIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGx1Z2luLmg6IENoYW5nZSB2aXNpYmlsaXR5IHRvIGRlZmF1bHQgZm9yIGRlYnVnIHN5bWJvbHMKKworZ29sZCByZWZ1c2VzIHRvIGxpbmsgaW4gdW5kZWZpbmVkIHdlYWsgc3ltYm9scyB3aGljaAoraGF2ZSBoaWRkZW4gdmlzaWJpbGl0eQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgaW5jbHVkZS9wbHVnaW4uaCB8ICAgIDQgKystLQorIDEgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wbHVnaW4uaCBiL2luY2x1ZGUvcGx1Z2luLmgKK2luZGV4IDY5MmE0ZTUuLmE5MzYxYzMgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3BsdWdpbi5oCisrKysgYi9pbmNsdWRlL3BsdWdpbi5oCitAQCAtODksOSArODksOSBAQCBzdHJ1Y3QgY29ubm1hbl9wbHVnaW5fZGVzYyB7CisgI2Vsc2UKKyAjZGVmaW5lIENPTk5NQU5fUExVR0lOX0RFRklORShuYW1lLCBkZXNjcmlwdGlvbiwgdmVyc2lvbiwgcHJpb3JpdHksIGluaXQsIGV4aXQpIFwKKyAJCWV4dGVybiBzdHJ1Y3QgY29ubm1hbl9kZWJ1Z19kZXNjIF9fc3RhcnRfX19kZWJ1Z1tdIFwKKy0JCQkJX19hdHRyaWJ1dGVfXyAoKHdlYWssIHZpc2liaWxpdHkoImhpZGRlbiIpKSk7IFwKKysJCQkJX19hdHRyaWJ1dGVfXyAoKHdlYWssIHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOyBcCisgCQlleHRlcm4gc3RydWN0IGNvbm5tYW5fZGVidWdfZGVzYyBfX3N0b3BfX19kZWJ1Z1tdIFwKKy0JCQkJX19hdHRyaWJ1dGVfXyAoKHdlYWssIHZpc2liaWxpdHkoImhpZGRlbiIpKSk7IFwKKysJCQkJX19hdHRyaWJ1dGVfXyAoKHdlYWssIHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOyBcCisgCQlleHRlcm4gc3RydWN0IGNvbm5tYW5fcGx1Z2luX2Rlc2MgY29ubm1hbl9wbHVnaW5fZGVzYyBcCisgCQkJCV9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJc3RydWN0IGNvbm5tYW5fcGx1Z2luX2Rlc2MgY29ubm1hbl9wbHVnaW5fZGVzYyA9IHsgXAorLS0gCisxLjcuNS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9hZGRfeHVzZXJfZGJ1c19wZXJtaXNzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2IzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9hZGRfeHVzZXJfZGJ1c19wZXJtaXNzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK0JlY2F1c2UgUG9reSBkb2Vzbid0IHN1cHBvcnQgYXRfY29uc29sZSB3ZSBuZWVkIHRvIHNwZWNpYWwtY2FzZSB0aGUgc2Vzc2lvbgordXNlci4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvc3JjL2Nvbm5tYW4tZGJ1cy5jb25mIGIvc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCitpbmRleCA5OGE3NzNlLi40NjY4MDljIDEwMDY0NAorLS0tIGEvc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCisrKysgYi9zcmMvY29ubm1hbi1kYnVzLmNvbmYKK0BAIC04LDYgKzgsOSBAQAorICAgICAgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJuZXQuY29ubm1hbi5Db3VudGVyIi8+CisgICAgICAgICA8YWxsb3cgc2VuZF9pbnRlcmZhY2U9Im5ldC5jb25ubWFuLk5vdGlmaWNhdGlvbiIvPgorICAgICA8L3BvbGljeT4KKysgICAgPHBvbGljeSB1c2VyPSJ4dXNlciI+CisrICAgICAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ibmV0LmNvbm5tYW4iLz4KKysgICAgPC9wb2xpY3k+CisgICAgIDxwb2xpY3kgYXRfY29uc29sZT0idHJ1ZSI+CisgICAgICAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ibmV0LmNvbm5tYW4iLz4KKyAgICAgPC9wb2xpY3k+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9jb25ubWFuIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vY29ubm1hbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjdhOTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vY29ubm1hbgpAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKworREFFTU9OPS91c3Ivc2Jpbi9jb25ubWFuZAorUElERklMRT0vdmFyL3J1bi9jb25ubWFuZC5waWQKK0RFU0M9IkNvbm5lY3Rpb24gTWFuYWdlciIKKworaWYgWyAtZiAvZXRjL2RlZmF1bHQvY29ubm1hbiBdIDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L2Nvbm5tYW4KK2ZpCisKK3NldCAtZQorCituZnNyb290PTAKKworZXhlYyA5PCYwIDwgL3Byb2MvbW91bnRzCit3aGlsZSByZWFkIGRldiBtdHB0IGZzdHlwZSByZXN0OyBkbworCWlmIHRlc3QgJG10cHQgPSAiLyIgOyB0aGVuCisJCWNhc2UgJGZzdHlwZSBpbgorCQkgICAgbmZzIHwgbmZzNCkKKwkJCW5mc3Jvb3Q9MQorCQkJYnJlYWsKKwkJCTs7CisJCSAgICAqKQorCQkJOzsKKwkJZXNhYworCWZpCitkb25lCisKK2RvX3N0YXJ0KCkgeworCUVYVFJBX1BBUkFNPSIiCisJaWYgdGVzdCAkbmZzcm9vdCAtZXEgMSA7IHRoZW4KKwkgICAgTkVUX0RFVlM9YGNhdCAvcHJvYy9uZXQvZGV2IHwgc2VkIC1uZSAncy9eXChbYS16QS1aMC05IF0qXCk6LiokL1wxL3AnYAorCSAgICBORVRfQUREUj1gY2F0IC9wcm9jL2NtZGxpbmUgfCBzZWQgLW5lICdzL14uKmlwPVwoW14gOl0qXCkuKiQvXDEvcCdgCisKKwkgICAgaWYgWyAhIC16ICIkTkVUX0FERFIiIF07IHRoZW4KKwkJaWYgWyAiJE5FVF9BRERSIiA9IGRoY3AgXTsgdGhlbgorCQkgICAgZXRobj1gaWZjb25maWcgfCBncmVwICJeZXRoIiB8IHNlZCAtZSAicy9cKGV0aFswLTldXClcKC4qXCkvXDEvImAKKwkJICAgIGlmIFsgISAteiAiJGV0aG4iIF07IHRoZW4KKwkJCUVYVFJBX1BBUkFNPSItSSAkZXRobiIKKwkJICAgIGZpCisJCWVsc2UKKwkJICAgIGZvciBpIGluICRORVRfREVWUzsgZG8KKwkJCUFERFI9YGlmY29uZmlnICRpIHwgc2VkICdzL2FkZHI6Ly9nJyB8IHNlZCAtbmUgJ3MvXi4qaW5ldCBcKFswLTkuXSpcKSAuKiQvXDEvcCdgCisJCQlpZiBbICIkTkVUX0FERFIiID0gIiRBRERSIiBdOyB0aGVuCisJCQkgICAgRVhUUkFfUEFSQU09Ii1JICRpIgorCQkJICAgIGJyZWFrCisJCQlmaQorCQkgICAgZG9uZQorCQlmaQorCSAgICBmaQorCWZpCisJaWYgWyAtZiBATElCRElSQC9jb25ubWFuL3dpcmVkLXNldHVwIF0gOyB0aGVuCisJCS4gQExJQkRJUkAvY29ubm1hbi93aXJlZC1zZXR1cAorCWZpCisJJERBRU1PTiAkRVhUUkFfUEFSQU0KK30KKworZG9fc3RvcCgpIHsKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIGNvbm5tYW5kIC0tcXVpZXQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nICRERVNDIgorCWRvX3N0YXJ0CisJOzsKKyAgc3RvcCkKKwllY2hvICJTdG9wcGluZyAkREVTQyIKKwlkb19zdG9wCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAiUmVzdGFydGluZyAkREVTQyIKKwlkb19zdG9wCisJc2xlZXAgMQorCWRvX3N0YXJ0CisJOzsKKyAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzAuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDczNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMwLmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgY29ubm1hbi5pbmMKKworU1JDX1VSSSAgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9uZXR3b3JrLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkX3h1c2VyX2RidXNfcGVybWlzc2lvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29ubm1hbiBcCisgICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNGEzZWZkYmQ2Nzk2OTIyZGI5YzZmNjZkYTU3ODg3ZmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM1ZTQ2NGJhY2M5YzI3ZWQ0ZTcyNjlmYjliNTA1OWYwNzk0N2Y1YmUyNjQzM2I1OTIxMjEzMzY2M2ZmYTk5MSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiY29ubm1hbi1jb25mIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4M2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLmluYwpAQCAtMCwwICsxLDExNSBAQAorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitTVU1NQVJZID0gIkludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0gREhDUCBwYWNrYWdlIgorREVTQ1JJUFRJT04gPSAiREhDUCAoRHluYW1pYyBIb3N0IENvbmZpZ3VyYXRpb24gUHJvdG9jb2wpIGlzIGEgcHJvdG9jb2wgXAord2hpY2ggYWxsb3dzIGluZGl2aWR1YWwgZGV2aWNlcyBvbiBhbiBJUCBuZXR3b3JrIHRvIGdldCB0aGVpciBvd24gXAorbmV0d29yayBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gYSBzZXJ2ZXIuICBESENQIGhlbHBzIG1ha2UgaXQgXAorZWFzaWVyIHRvIGFkbWluaXN0ZXIgZGV2aWNlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaXNjLm9yZy8iCisKK0xJQ0VOU0UgPSAiSVNDIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTtiZWdpbmxpbmU9NDttZDU9YzVjNjRkNjk2MTA3Zjg0YjU2ZmUzMzdkMTRkYTE3NTMiCisKK0RFUEVORFMgPSAib3BlbnNzbCBiaW5kIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pc2Mub3JnL2lzYy9kaGNwLyR7UFZ9L2RoY3AtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5pdC1yZWxheSBmaWxlOi8vZGVmYXVsdC1yZWxheSBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LXNlcnZlciBmaWxlOi8vZGVmYXVsdC1zZXJ2ZXIgXAorICAgICAgICAgICBmaWxlOi8vZGhjbGllbnQuY29uZiBmaWxlOi8vZGhjcGQuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9kaGNwZC5zZXJ2aWNlIGZpbGU6Ly9kaGNyZWxheS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2RoY3BkNi5zZXJ2aWNlICIKKworaW5oZXJpdCBhdXRvdG9vbHMgc3lzdGVtZAorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNlcnZlciAke1BOfS1yZWxheSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zZXJ2ZXIgPSAiZGhjcGQuc2VydmljZSBkaGNwZDYuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tc2VydmVyID0gImRpc2FibGUiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1yZWxheSA9ICJkaGNyZWxheS5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRV8ke1BOfS1yZWxheSA9ICJkaXNhYmxlIgorCitUQVJHRVRfQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorRVhUUkFfT0VDT05GID0gIi0td2l0aC1zcnYtbGVhc2UtZmlsZT0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkLmxlYXNlcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLXNydjYtbGVhc2UtZmlsZT0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jbGktbGVhc2UtZmlsZT0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50LmxlYXNlcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWNsaTYtbGVhc2UtZmlsZT0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50Ni5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1saWJiaW5kPSR7U1RBR0lOR19MSUJESVJ9LyBcCisgICAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGhjcAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtcmVsYXkgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3AtcmVsYXkKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0LXJlbGF5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZGhjcC1yZWxheQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtc2VydmVyICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXNlcnZlcgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RlZmF1bHQtc2VydmVyICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZGhjcC1zZXJ2ZXIKKworCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY2xpZW50LmNvbmYqCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vZGhjcGQuY29uZioKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNsaWVudC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AvZGhjbGllbnQuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3BkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZGhjcC9kaGNwZC5jb25mCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisJaWYgWyAiJHtzYmluZGlyfSIgIT0gIiR7YmFzZV9zYmluZGlyfSIgXTsgdGhlbgorCQltdiAke0R9JHtzYmluZGlyfS9kaGNsaWVudCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWZpCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vY2xpZW50L3NjcmlwdHMvbGludXggJHtEfSR7YmFzZV9zYmluZGlyfS9kaGNsaWVudC1zY3JpcHQKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjcGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3BkNi5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjcmVsYXkuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNyZWxheS5zZXJ2aWNlCisJc2VkIC1pIC1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCisJc2VkIC1pIC1lICdzLEBiYXNlX2JpbmRpckAsJHtiYXNlX2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UKKwlzZWQgLWkgLWUgJ3MsQGxvY2Fsc3RhdGVkaXJALCR7bG9jYWxzdGF0ZWRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UKK30KKworUEFDS0FHRVMgKz0gImRoY3Atc2VydmVyIGRoY3Atc2VydmVyLWNvbmZpZyBkaGNwLWNsaWVudCBkaGNwLXJlbGF5IGRoY3Atb21zaGVsbCIKKworRklMRVNfJHtQTn0gPSAiIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JERVBFTkRTXyR7UE59LXN0YXRpY2RldiA9ICIiCisKK0ZJTEVTXyR7UE59LXNlcnZlciA9ICIke3NiaW5kaXJ9L2RoY3BkICR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3Atc2VydmVyIgorUlJFQ09NTUVORFNfJHtQTn0tc2VydmVyID0gImRoY3Atc2VydmVyLWNvbmZpZyIKKworRklMRVNfJHtQTn0tc2VydmVyLWNvbmZpZyA9ICIke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZGhjcC1zZXJ2ZXIgJHtzeXNjb25mZGlyfS9kaGNwL2RoY3BkLmNvbmYiCisKK0ZJTEVTXyR7UE59LXJlbGF5ID0gIiR7c2JpbmRpcn0vZGhjcmVsYXkgJHtzeXNjb25mZGlyfS9pbml0LmQvZGhjcC1yZWxheSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZGhjcC1yZWxheSIKKworRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7YmFzZV9zYmluZGlyfS9kaGNsaWVudCAke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQtc2NyaXB0ICR7c3lzY29uZmRpcn0vZGhjcC9kaGNsaWVudC5jb25mIgorUkRFUEVORFNfJHtQTn0tY2xpZW50ID0gImJhc2giCisKK0ZJTEVTXyR7UE59LW9tc2hlbGwgPSAiJHtiaW5kaXJ9L29tc2hlbGwiCisKK3BrZ19wb3N0aW5zdF9kaGNwLXNlcnZlcigpIHsKKyAgICBta2RpciAtcCAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwCisgICAgdG91Y2ggJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMKKyAgICB0b3VjaCAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKK30KKworcGtnX3Bvc3RpbnN0X2RoY3AtY2xpZW50KCkgeworICAgIG1rZGlyIC1wICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AKK30KKworcGtnX3Bvc3RybV9kaGNwLXNlcnZlcigpIHsKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkLmxlYXNlcworICAgIHJtIC1mICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQ2LmxlYXNlcworCisgICAgaWYgISBybWRpciAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIk5vdCByZW1vdmluZyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwIGFzIGl0IGlzIG5vbi1lbXB0eS4iCisgICAgZmkKK30KKworcGtnX3Bvc3RybV9kaGNwLWNsaWVudCgpIHsKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50LmxlYXNlcworICAgIHJtIC1mICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjbGllbnQ2LmxlYXNlcworCisgICAgaWYgISBybWRpciAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIk5vdCByZW1vdmluZyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwIGFzIGl0IGlzIG5vbi1lbXB0eS4iCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDNjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RlZmluZSBtYWNybyBfUEFUSF9ESENQRF9DT05GIGFuZCBfUEFUSF9ESENMSUVOVF9DT05GCisKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSA8b2Ugc3BlY2lmaWM+CisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGVzL3NpdGUuaCB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZXMvc2l0ZS5oIGIvaW5jbHVkZXMvc2l0ZS5oCitpbmRleCBkODdiMzA5Li4xN2JjNDBkIDEwMDY0NAorLS0tIGEvaW5jbHVkZXMvc2l0ZS5oCisrKysgYi9pbmNsdWRlcy9zaXRlLmgKK0BAIC0xMzksNyArMTM5LDggQEAKKyAvKiBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0aGUgZGhjcGQuY29uZiBmaWxlIHRvIGdvIHNvbWV3aGVyZSBvdGhlciB0aGFuCisgICAgdGhlIGRlZmF1bHQgbG9jYXRpb24uICAgQnkgZGVmYXVsdCwgaXQgZ29lcyBpbiAvZXRjL2RoY3BkLmNvbmYuICovCisgCistLyogI2RlZmluZSBfUEFUSF9ESENQRF9DT05GCSIvZXRjL2RoY3BkLmNvbmYiICovCisrI2RlZmluZSBfUEFUSF9ESENQRF9DT05GCSIvZXRjL2RoY3AvZGhjcGQuY29uZiIKKysjZGVmaW5lIF9QQVRIX0RIQ0xJRU5UX0NPTkYJIi9ldGMvZGhjcC9kaGNsaWVudC5jb25mIgorIAorIC8qIE5ldHdvcmsgQVBJIGRlZmluaXRpb25zLiAgIFlvdSBkbyBub3QgbmVlZCB0byBjaG9vc2Ugb25lIG9mIHRoZXNlIC0gaWYKKyAgICB5b3UgZG9uJ3QgY2hvb3NlLCBvbmUgd2lsbCBiZSBjaG9zZW4gZm9yIHlvdSBpbiB5b3VyIHN5c3RlbSdzIGNvbmZpZworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWE1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitkaGNwLWNsaWVudDogZml4IGludm9rZSBkaGNsaWVudC1zY3JpcHQgZmFpbGVkIG9uIFJlYWQtb25seSBmaWxlIHN5c3RlbQorCitJbiByZWFkLW9ubHkgZmlsZSBzeXN0ZW0sICcvZXRjJyBpcyBvbiB0aGUgcmVhZG9ubHkgcGFydGl0aW9uLAorYW5kICcvZXRjL3Jlc29sdi5jb25mJyBpcyBzeW1saW5rZWQgdG8gYSBzZXBhcmF0ZSB3cml0YWJsZQorcGFydGl0aW9uLgorCitJbiB0aGlzIHNpdHVhdGlvbiwgd2Ugc2hvdWxkIHVzZSBzaGVsbCB2YXJpYWJsZSB0byBpbnN0ZWFkIG9mCit0ZW1wIGZpbGVzICcvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50JyBhbmQgJy9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2Jy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjbGllbnQvc2NyaXB0cy9saW51eCB8IDIwICsrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jbGllbnQvc2NyaXB0cy9saW51eCBiL2NsaWVudC9zY3JpcHRzL2xpbnV4CistLS0gYS9jbGllbnQvc2NyaXB0cy9saW51eAorKysrIGIvY2xpZW50L3NjcmlwdHMvbGludXgKK0BAIC0yNywyNyArMjcsMjUgQEAgaXA9L3NiaW4vaXAKKyAKKyBtYWtlX3Jlc29sdl9jb25mKCkgeworICAgaWYgWyB4IiRuZXdfZG9tYWluX25hbWVfc2VydmVycyIgIT0geCBdOyB0aGVuCistICAgIGNhdCAvZGV2L251bGwgPiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CistICAgIGNobW9kIDY0NCAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisrICAgIHJlc29sdl9jb25mPSIiCisgICAgIGlmIFsgeCIkbmV3X2RvbWFpbl9zZWFyY2giICE9IHggXTsgdGhlbgorLSAgICAgIGVjaG8gc2VhcmNoICRuZXdfZG9tYWluX3NlYXJjaCA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisrICAgICAgcmVzb2x2X2NvbmY9InNlYXJjaCAke25ld19kb21haW5fc2VhcmNofVxuIgorICAgICBlbGlmIFsgeCIkbmV3X2RvbWFpbl9uYW1lIiAhPSB4IF07IHRoZW4KKyAgICAgICAjIE5vdGUgdGhhdCB0aGUgREhDUCAnRG9tYWluIE5hbWUgT3B0aW9uJyBpcyByZWFsbHkganVzdCBhIGRvbWFpbgorICAgICAgICMgbmFtZSwgYW5kIHRoYXQgdGhpcyBwcmFjdGljZSBvZiB1c2luZyB0aGUgZG9tYWluIG5hbWUgb3B0aW9uIGFzCisgICAgICAgIyBhIHNlYXJjaCBwYXRoIGlzIGJvdGggbm9uc3RhbmRhcmQgYW5kIGRlcHJlY2F0ZWQuCistICAgICAgZWNobyBzZWFyY2ggJG5ld19kb21haW5fbmFtZSA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisrICAgICAgcmVzb2x2X2NvbmY9InNlYXJjaCAke25ld19kb21haW5fbmFtZX1cbiIKKyAgICAgZmkKKyAgICAgZm9yIG5hbWVzZXJ2ZXIgaW4gJG5ld19kb21haW5fbmFtZV9zZXJ2ZXJzOyBkbworLSAgICAgIGVjaG8gbmFtZXNlcnZlciAkbmFtZXNlcnZlciA+Pi9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKKysgICAgICByZXNvbHZfY29uZj0iJHtyZXNvbHZfY29uZn1uYW1lc2VydmVyICR7bmFtZXNlcnZlcn1cbiIKKyAgICAgZG9uZQorIAorLSAgICBtdiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50IC9ldGMvcmVzb2x2LmNvbmYKKysgICAgZWNobyAtZSAiJHtyZXNvbHZfY29uZn0iID4gL2V0Yy9yZXNvbHYuY29uZgorICAgZWxpZiBbICJ4JHtuZXdfZGhjcDZfbmFtZV9zZXJ2ZXJzfSIgIT0geCBdIDsgdGhlbgorLSAgICBjYXQgL2Rldi9udWxsID4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKKy0gICAgY2htb2QgNjQ0IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2CisrICAgIHJlc29sdl9jb25mPSIiCisgCisgICAgIGlmIFsgIngke25ld19kaGNwNl9kb21haW5fc2VhcmNofSIgIT0geCBdIDsgdGhlbgorLSAgICAgIGVjaG8gc2VhcmNoICR7bmV3X2RoY3A2X2RvbWFpbl9zZWFyY2h9ID4+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2CisrICAgICAgcmVzb2x2X2NvbmY9InNlYXJjaCAke25ld19kaGNwNl9kb21haW5fc2VhcmNofVxuIgorICAgICBmaQorICAgICBzaG9wdCAtcyBub2Nhc2VtYXRjaCAKKyAgICAgZm9yIG5hbWVzZXJ2ZXIgaW4gJHtuZXdfZGhjcDZfbmFtZV9zZXJ2ZXJzfSA7IGRvCitAQCAtNTksMTEgKzU3LDExIEBAIG1ha2VfcmVzb2x2X2NvbmYoKSB7CisgICAgICAgZWxzZQorIAl6b25lX2lkPQorICAgICAgIGZpCistICAgICAgZWNobyBuYW1lc2VydmVyICR7bmFtZXNlcnZlcn0kem9uZV9pZCA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICAgIHJlc29sdl9jb25mPSIke3Jlc29sdl9jb25mfW5hbWVzZXJ2ZXIgJHtuYW1lc2VydmVyfSR6b25lX2lkXG4iCisgICAgIGRvbmUKKyAgICAgc2hvcHQgLXUgbm9jYXNlbWF0Y2ggCisgCistICAgIG12IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2IC9ldGMvcmVzb2x2LmNvbmYKKysgICAgZWNobyAtZSAiJHtyZXNvbHZfY29uZn0iID4gL2V0Yy9yZXNvbHYuY29uZgorICAgZmkKKyB9CisgCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKKy0tLSBjbGllbnQvc2NyaXB0cy9ic2RvcworKysrIGNsaWVudC9zY3JpcHRzL2JzZG9zCitAQCAtNDcsNiArNDcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKKy0tLSBjbGllbnQvc2NyaXB0cy9mcmVlYnNkCisrKysgY2xpZW50L3NjcmlwdHMvZnJlZWJzZAorQEAgLTU3LDYgKzU3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvbGludXgKKysrKyBjbGllbnQvc2NyaXB0cy9saW51eAorQEAgLTY5LDYgKzY5LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvbmV0YnNkCisrKysgY2xpZW50L3NjcmlwdHMvbmV0YnNkCitAQCAtNDcsNiArNDcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKKy0tLSBjbGllbnQvc2NyaXB0cy9vcGVuYnNkCisrKysgY2xpZW50L3NjcmlwdHMvb3BlbmJzZAorQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvc29sYXJpcworKysrIGNsaWVudC9zY3JpcHRzL3NvbGFyaXMKK0BAIC00Nyw2ICs0NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4LWV4dGVybmFsLWJpbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjkxZmRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4LWV4dGVybmFsLWJpbmQucGF0Y2gKQEAgLTAsMCArMSwxMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisxMS8zMC8yMDEwCistLXdpdGgtbGliYmluZD1QQVRIIGlzIGF2YWlsYWJsZSBidXQgbm90IHVzZWQgYnkgTWFrZWZpbGUsCit0aGlzIHBhdGNoIGlzIHRvIGFsbG93IGJ1aWxkaW5nIHdpdGggZXh0ZXJuYWwgYmluZAorCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGRoY3AtNC4zLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL01ha2VmaWxlLmFtCitAQCAtMjUsNyArMjUsNyBAQCBFWFRSQV9ESVNUID0gUkVMTk9URVMgTElDRU5TRSBcCisgCSAgICAgYmluZC9NYWtlZmlsZSBiaW5kL2JpbmQudGFyLmd6IGJpbmQvdmVyc2lvbi50bXAgXAorIAkgICAgIGNvbW1vbi90ZXN0cy9BdGZmaWxlIHNlcnZlci90ZXN0cy9BdGZmaWxlCisgCistU1VCRElSUyA9IGJpbmQgaW5jbHVkZXMgdGVzdHMgY29tbW9uIGRzdCBvbWFwaXAgY2xpZW50IGRoY3BjdGwgcmVsYXkgc2VydmVyCisrU1VCRElSUyA9IGluY2x1ZGVzIHRlc3RzIGNvbW1vbiBkc3Qgb21hcGlwIGNsaWVudCBkaGNwY3RsIHJlbGF5IHNlcnZlcgorIAorIG5vYmFzZV9pbmNsdWRlX0hFQURFUlMgPSBkaGNwY3RsL2RoY3BjdGwuaAorIAorSW5kZXg6IGRoY3AtNC4zLjAvY2xpZW50L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL2NsaWVudC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvY2xpZW50L01ha2VmaWxlLmFtCitAQCAtNCw4ICs0LDggQEAgZGhjbGllbnRfU09VUkNFUyA9IGNscGFyc2UuYyBkaGNsaWVudC5jCisgCQkgICBzY3JpcHRzL2JzZG9zIHNjcmlwdHMvZnJlZWJzZCBzY3JpcHRzL2xpbnV4IHNjcmlwdHMvbWFjb3MgXAorIAkJICAgc2NyaXB0cy9uZXRic2Qgc2NyaXB0cy9uZXh0c3RlcCBzY3JpcHRzL29wZW5ic2QgXAorIAkJICAgc2NyaXB0cy9zb2xhcmlzIHNjcmlwdHMvb3BlbndydAorLWRoY2xpZW50X0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSAuLi9iaW5kL2xpYi9saWJpcnMuYSBcCistCQkgLi4vYmluZC9saWIvbGliZG5zLmEgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKytkaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgJChsaWJiaW5kKS9saWJpcnMuYSBcCisrCQkgJChsaWJiaW5kKS9saWJkbnMuYSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyBtYW5fTUFOUyA9IGRoY2xpZW50LjggZGhjbGllbnQtc2NyaXB0LjggZGhjbGllbnQuY29uZi41IGRoY2xpZW50LmxlYXNlcy41CisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCitJbmRleDogZGhjcC00LjMuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgZGhjcC00LjMuMC9jb25maWd1cmUuYWMKK0BAIC01NjYsNiArNTY2LDcgQEAgbm8pCisgCWxpYmJpbmQ9IiR1c2VfbGliYmluZCIKKyAJOzsKKyBlc2FjCisrQUNfU1VCU1QoW2xpYmJpbmRdKQorIAorICMgT3BlbkxEQVAgc3VwcG9ydC4KKyBBQ19BUkdfV0lUSChsZGFwLAorSW5kZXg6IGRoY3AtNC4zLjAvZGhjcGN0bC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9kaGNwY3RsL01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9kaGNwY3RsL01ha2VmaWxlLmFtCitAQCAtNiwxMiArNiwxMiBAQCBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKKyBvbXNoZWxsX1NPVVJDRVMgPSBvbXNoZWxsLmMKKyBvbXNoZWxsX0xEQUREID0gbGliZGhjcGN0bC5hIC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkgICAgICAgIC4uL2JpbmQvbGliL2xpYmlycy5hIC4uL2JpbmQvbGliL2xpYmRucy5hIFwKKy0JICAgICAgICAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorKwkgICAgICAgICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCisrCSAgICAgICAgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgCisgbGliZGhjcGN0bF9hX1NPVVJDRVMgPSBkaGNwY3RsLmMgY2FsbGJhY2suYyByZW1vdGUuYworIAorIGNsdGVzdF9TT1VSQ0VTID0gY2x0ZXN0LmMKKyBjbHRlc3RfTERBREQgPSBsaWJkaGNwY3RsLmEgLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCSAgICAgICAuLi9iaW5kL2xpYi9saWJpcnMuYSAuLi9iaW5kL2xpYi9saWJkbnMuYSBcCistICAgICAgICAgICAgICAgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKysJICAgICAgICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCisrICAgICAgICAgICAgICAgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCitJbmRleDogZGhjcC00LjMuMC9vbWFwaXAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvb21hcGlwL01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9vbWFwaXAvTWFrZWZpbGUuYW0KK0BAIC0xMCw2ICsxMCw2IEBAIG1hbl9NQU5TID0gb21hcGkuMworIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorIHN2dGVzdF9TT1VSQ0VTID0gdGVzdC5jCistc3Z0ZXN0X0xEQUREID0gbGlib21hcGkuYSAuLi9iaW5kL2xpYi9saWJpcnMuYSAuLi9iaW5kL2xpYi9saWJkbnMuYSBcCistCQkuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorK3N2dGVzdF9MREFERCA9IGxpYm9tYXBpLmEgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKKysJCSQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIAorSW5kZXg6IGRoY3AtNC4zLjAvcmVsYXkvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvcmVsYXkvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL3JlbGF5L01ha2VmaWxlLmFtCitAQCAtMyw4ICszLDggQEAgQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdAorIHNiaW5fUFJPR1JBTVMgPSBkaGNyZWxheQorIGRoY3JlbGF5X1NPVVJDRVMgPSBkaGNyZWxheS5jCisgZGhjcmVsYXlfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JCSAuLi9iaW5kL2xpYi9saWJpcnMuYSAuLi9iaW5kL2xpYi9saWJkbnMuYSBcCistCQkgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKysJCSAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKwkJICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIG1hbl9NQU5TID0gZGhjcmVsYXkuOAorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorSW5kZXg6IGRoY3AtNC4zLjAvc2VydmVyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL3NlcnZlci9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvc2VydmVyL01ha2VmaWxlLmFtCitAQCAtMTQsOCArMTQsOCBAQCBkaGNwZF9TT1VSQ0VTID0gZGhjcGQuYyBkaGNwLmMgYm9vdHAuYyBjCisgCisgZGhjcGRfQ0ZMQUdTID0gJChMREFQX0NGTEFHUykKKyBkaGNwZF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkgICAgICAuLi9kaGNwY3RsL2xpYmRoY3BjdGwuYSAuLi9iaW5kL2xpYi9saWJpcnMuYSBcCistCSAgICAgIC4uL2JpbmQvbGliL2xpYmRucy5hIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCSAgICAgIC4uL2RoY3BjdGwvbGliZGhjcGN0bC5hICQobGliYmluZCkvbGliaXJzLmEgXAorKwkgICAgICAkKGxpYmJpbmQpL2xpYmRucy5hICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIAorIG1hbl9NQU5TID0gZGhjcGQuOCBkaGNwZC5jb25mLjUgZGhjcGQubGVhc2VzLjUKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4c2VwYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlNzVhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTA4IEBACitGaXggb3V0IG9mIHRyZWUgYnVpbGRzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzAzLzIxCisKK1JlYmFzZSB0byA0LjMuMQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY2xpZW50L01ha2VmaWxlLmFtICB8IDYgKysrKy0tCisgY29tbW9uL01ha2VmaWxlLmFtICB8IDIgKy0KKyBkaGNwY3RsL01ha2VmaWxlLmFtIHwgMiArKworIGRzdC9NYWtlZmlsZS5hbSAgICAgfCAyICstCisgb21hcGlwL01ha2VmaWxlLmFtICB8IDIgKysKKyByZWxheS9NYWtlZmlsZS5hbSAgIHwgMiArLQorIHNlcnZlci9NYWtlZmlsZS5hbSAgfCAyICstCisgNyBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L01ha2VmaWxlLmFtIGIvY2xpZW50L01ha2VmaWxlLmFtCitpbmRleCA4NDExOTYwLi4xNzQwZjcyIDEwMDY0NAorLS0tIGEvY2xpZW50L01ha2VmaWxlLmFtCisrKysgYi9jbGllbnQvTWFrZWZpbGUuYW0KK0BAIC00LDYgKzQsOCBAQAorICMgcHJvZHVjdGlvbiBjb2RlLiBTYWRseSwgd2UgYXJlIG5vdCB0aGVyZSB5ZXQuCisgU1VCRElSUyA9IC4gdGVzdHMKKyAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworKworIGRpc3Rfc3lzY29uZl9EQVRBID0gZGhjbGllbnQuY29uZi5leGFtcGxlCisgc2Jpbl9QUk9HUkFNUyA9IGRoY2xpZW50CisgZGhjbGllbnRfU09VUkNFUyA9IGNscGFyc2UuYyBkaGNsaWVudC5jIGRoYzYuYyBcCitAQCAtMTcsOCArMTksOCBAQCBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKKyBkaGNsaWVudC5vOiBkaGNsaWVudC5jCisgCSQoQ09NUElMRSkgLURDTElFTlRfUEFUSD0nIlBBVEg9JChzYmluZGlyKTovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiInIFwKKy0JCSAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtYyBkaGNsaWVudC5jCisrCQkgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLWMgJChzcmNkaXIpL2RoY2xpZW50LmMKKyAKKyBkaGM2Lm86IGRoYzYuYworIAkkKENPTVBJTEUpIC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCistCQkgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLWMgZGhjNi5jCisrCQkgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLWMgJChzcmNkaXIpL2RoYzYuYworZGlmZiAtLWdpdCBhL2NvbW1vbi9NYWtlZmlsZS5hbSBiL2NvbW1vbi9NYWtlZmlsZS5hbQoraW5kZXggZWRkZWYwNS4uNWNlMDQ1ZiAxMDA2NDQKKy0tLSBhL2NvbW1vbi9NYWtlZmlsZS5hbQorKysrIGIvY29tbW9uL01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1BTV9DUFBGTEFHUyA9IC1JLi4gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikgLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKKyBBTV9DRkxBR1MgPSAkKExEQVBfQ0ZMQUdTKQorIAorIG5vaW5zdF9MSUJSQVJJRVMgPSBsaWJkaGNwLmEKK2RpZmYgLS1naXQgYS9kaGNwY3RsL01ha2VmaWxlLmFtIGIvZGhjcGN0bC9NYWtlZmlsZS5hbQoraW5kZXggMjk4N2E1My4uY2Q3MmQ3NSAxMDA2NDQKKy0tLSBhL2RoY3BjdGwvTWFrZWZpbGUuYW0KKysrKyBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK0BAIC0xLDMgKzEsNSBAQAorK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzIC1JJCh0b3Bfc3JjZGlyKQorKworIGJpbl9QUk9HUkFNUyA9IG9tc2hlbGwKKyBsaWJfTElCUkFSSUVTID0gbGliZGhjcGN0bC5hCisgbm9pbnN0X1BST0dSQU1TID0gY2x0ZXN0CitkaWZmIC0tZ2l0IGEvZHN0L01ha2VmaWxlLmFtIGIvZHN0L01ha2VmaWxlLmFtCitpbmRleCA4OTM3ZmU4Li5hMTQ3OThiIDEwMDY0NAorLS0tIGEvZHN0L01ha2VmaWxlLmFtCisrKysgYi9kc3QvTWFrZWZpbGUuYW0KK0BAIC0xLDQgKzEsNCBAQAorLUFNX0NQUEZMQUdTID0gLURNSU5JUkVTX0xJQiAtREhNQUNfTUQ1CisrQU1fQ1BQRkxBR1MgPSAtRE1JTklSRVNfTElCIC1ESE1BQ19NRDUgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCisgbGliX0xJQlJBUklFUyA9IGxpYmRzdC5hCisgCitkaWZmIC0tZ2l0IGEvb21hcGlwL01ha2VmaWxlLmFtIGIvb21hcGlwL01ha2VmaWxlLmFtCitpbmRleCA1MDc0NDc5Li45YzBmYWIzIDEwMDY0NAorLS0tIGEvb21hcGlwL01ha2VmaWxlLmFtCisrKysgYi9vbWFwaXAvTWFrZWZpbGUuYW0KK0BAIC0xLDMgKzEsNSBAQAorK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisrCisgbGliX0xJQlJBUklFUyA9IGxpYm9tYXBpLmEKKyBub2luc3RfUFJPR1JBTVMgPSBzdnRlc3QKKyAKK2RpZmYgLS1naXQgYS9yZWxheS9NYWtlZmlsZS5hbSBiL3JlbGF5L01ha2VmaWxlLmFtCitpbmRleCBlYzcyYTMxLi5mODQyMDcxIDEwMDY0NAorLS0tIGEvcmVsYXkvTWFrZWZpbGUuYW0KKysrKyBiL3JlbGF5L01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1BTV9DUFBGTEFHUyA9IC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisrQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKKyBzYmluX1BST0dSQU1TID0gZGhjcmVsYXkKKyBkaGNyZWxheV9TT1VSQ0VTID0gZGhjcmVsYXkuYworZGlmZiAtLWdpdCBhL3NlcnZlci9NYWtlZmlsZS5hbSBiL3NlcnZlci9NYWtlZmlsZS5hbQoraW5kZXggYTQ0NmYwYi4uZDBiODczYSAxMDA2NDQKKy0tLSBhL3NlcnZlci9NYWtlZmlsZS5hbQorKysrIGIvc2VydmVyL01ha2VmaWxlLmFtCitAQCAtNCw3ICs0LDcgQEAKKyAjIHByb2R1Y3Rpb24gY29kZS4gU2FkbHksIHdlIGFyZSBub3QgdGhlcmUgeWV0LgorIFNVQkRJUlMgPSAuIHRlc3RzCisgCistQU1fQ1BQRkxBR1MgPSAtSS4uIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCisgZGlzdF9zeXNjb25mX0RBVEEgPSBkaGNwZC5jb25mLmV4YW1wbGUKKyBzYmluX1BST0dSQU1TID0gZGhjcGQKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9saW5rLXdpdGgtbGNyeXB0by5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2UxMGIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQXV0aG9yOiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitEYXRlOiAgIFRodSBGZWIgMiAyMzo1OToxMSAyMDEyICswMjAwCisKK0Zyb20gNC4yLjAgZmluYWwgcmVsZWFzZSwgLWxjcnlwdG8gY2hlY2sgd2FzIHJlbW92ZWQgYW5kIHdlIGNvbXBpbGUgc3RhdGljIGxpYnJhcmllcworZnJvbSBiaW5kIHRoYXQgYXJlIGxpbmtlZCB0byBsaWJjcnlwdG8uIFRoaXMgaXMgd2h5IGkgYWRkZWQgYSBwYXRjaCBpbiBvcmRlciB0byBhZGQKKy1sY3J5cHRvIHRvIExJQlMuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZGhjcC00LjIuMy1QMi1yMC9kaGNwLTQuMi4zLVAyL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4yLjMtUDIub3JpZy9jb25maWd1cmUuYWMJMjAxMi0wMi0wMiAxODowNDoyMC44NDMwMjMxOTYgKzAyMDAKKysrKyBkaGNwLTQuMi4zLVAyL2NvbmZpZ3VyZS5hYwkyMDEyLTAyLTAyIDE3OjU4OjE2LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ1Niw2ICs0NTYsMTAgQEAKKyAjIExvb2sgZm9yIG9wdGlvbmFsIGhlYWRlcnMuCisgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc29ja2V0LmggbmV0L2lmX2RsLmggbmV0L2lmNi5oIHJlZ2V4LmgpCisgCisrIyBmaW5kIGFuIE1ENSBsaWJyYXJ5CisrQUNfU0VBUkNIX0xJQlMoTUQ1X0luaXQsIFtjcnlwdG9dKQorK0FDX1NFQVJDSF9MSUJTKE1ENUluaXQsIFtjcnlwdG9dKQorKworICMgU29sYXJpcyBuZWVkcyBzb21lIGxpYnJhcmllcyBmb3IgZnVuY3Rpb25zCisgQUNfU0VBUkNIX0xJQlMoc29ja2V0LCBbc29ja2V0XSkKKyBBQ19TRUFSQ0hfTElCUyhpbmV0X250b2EsIFtuc2xdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkZDZhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2gKQEAgLTAsMCArMSwxNzYgQEAKK0ZvdW5kIHRoaXMgcGF0Y2ggaGVyZToKK2h0dHBzOi8vbGlzdHMuaXNjLm9yZy9waXBlcm1haWwvZGhjcC11c2Vycy8yMDExLUphbnVhcnkvMDEyOTEwLmh0bWwKKworYW5kIG1hZGUgc29tZSBhZGp1c3RtZW50cy91cGRhdGVzIHRvIG1ha2UgaXQgd29yayB3aXRoIHRoaXMgdmVyc2lvbi4KK1dhc24ndCBhYmxlIHRvIGZpbmQgdGhhdCB3aHkgdGhpcyBwYXRjaCB3YXMgbm90IGFjY2VwdGVkIGJ5IElTQyBESENQIGRldmVsb3BlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNdWhhbW1hZCBTaGFrZWVsIDxtdWhhbW1hZF9zaGFrZWVsQG1lbnRvci5jb20+CisKKy0tLSBkaGNwLTQuMi41LVAxL2NsaWVudC9zY3JpcHRzL2xpbnV4Lm9yaWcJMjAxMy0wOS0wNCAxMjoyMjo1NS4wMDAwMDAwMDAgKzA1MDAKKysrKyBkaGNwLTQuMi41LVAxL2NsaWVudC9zY3JpcHRzL2xpbnV4CTIwMTMtMDktMDQgMTI6NTI6MTkuMDY4NzYxNTE4ICswNTAwCitAQCAtMTAzLDE3ICsxMDMsMTEgQEAKKyBpZiBbIHgkb2xkX2Jyb2FkY2FzdF9hZGRyZXNzICE9IHggXTsgdGhlbgorICAgb2xkX2Jyb2FkY2FzdF9hcmc9ImJyb2FkY2FzdCAkb2xkX2Jyb2FkY2FzdF9hZGRyZXNzIgorIGZpCistaWYgWyB4JG5ld19zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KKy0gIG5ld19zdWJuZXRfYXJnPSJuZXRtYXNrICRuZXdfc3VibmV0X21hc2siCistZmkKKy1pZiBbIHgkb2xkX3N1Ym5ldF9tYXNrICE9IHggXTsgdGhlbgorLSAgb2xkX3N1Ym5ldF9hcmc9Im5ldG1hc2sgJG9sZF9zdWJuZXRfbWFzayIKKy1maQorLWlmIFsgeCRhbGlhc19zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KKy0gIGFsaWFzX3N1Ym5ldF9hcmc9Im5ldG1hc2sgJGFsaWFzX3N1Ym5ldF9tYXNrIgorK2lmIFsgLW4gIiRuZXdfc3VibmV0X21hc2siIF07IHRoZW4KKysgICAgbmV3X21hc2s9Ii8kbmV3X3N1Ym5ldF9tYXNrIgorIGZpCistaWYgWyB4JG5ld19pbnRlcmZhY2VfbXR1ICE9IHggXTsgdGhlbgorLSAgbXR1X2FyZz0ibXR1ICRuZXdfaW50ZXJmYWNlX210dSIKKytpZiBbIC1uICIkYWxpYXNfc3VibmV0X21hc2siIF07IHRoZW4KKysgICAgYWxpYXNfbWFzaz0iLyRhbGlhc19zdWJuZXRfbWFzayIKKyBmaQorIGlmIFsgeCRJRl9NRVRSSUMgIT0geCBdOyB0aGVuCisgICBtZXRyaWNfYXJnPSJtZXRyaWMgJElGX01FVFJJQyIKK0BAIC0xMjcsOSArMTIxLDkgQEAKKyBpZiBbIHgkcmVhc29uID0geFBSRUlOSVQgXTsgdGhlbgorICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgQnJpbmcgZG93biBhbGlhcyBpbnRlcmZhY2UuIEl0cyByb3V0ZXMgd2lsbCBkaXNhcHBlYXIgdG9vLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCistICBpZmNvbmZpZyAkaW50ZXJmYWNlIDAgdXAKKysgICR7aXB9IGxpbmsgc2V0IGRldiAke2ludGVyZmFjZX0gdXAKKyAKKyAgICMgV2UgbmVlZCB0byBnaXZlIHRoZSBrZXJuZWwgc29tZSB0aW1lIHRvIGdldCB0aGUgaW50ZXJmYWNlIHVwLgorICAgc2xlZXAgMQorQEAgLTE1NiwyNSArMTUwLDMwIEBACisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdICYmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXSAmJiBcCisgCQlbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4JG9sZF9pcF9hZGRyZXNzIF07IHRoZW4KKyAgICAgIyBQb3NzaWJsZSBuZXcgYWxpYXMuIFJlbW92ZSBvbGQgYWxpYXMuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MC0gaW5ldCAwCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorICAgZmkKKyAgIGlmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4IF0gJiYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHgkbmV3X2lwX2FkZHJlc3MgXTsgdGhlbgorICAgICAjIElQIGFkZHJlc3MgY2hhbmdlZC4gQnJpbmdpbmcgZG93biB0aGUgaW50ZXJmYWNlIHdpbGwgZGVsZXRlIGFsbCByb3V0ZXMsCisgICAgICMgYW5kIGNsZWFyIHRoZSBBUlAgY2FjaGUuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAwIGRvd24KKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQorIAorICAgZmkKKyAgIGlmIFsgeCRvbGRfaXBfYWRkcmVzcyA9IHggXSB8fCBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCRuZXdfaXBfYWRkcmVzcyBdIHx8IFwKKyAgICAgIFsgeCRyZWFzb24gPSB4Qk9VTkQgXSB8fCBbIHgkcmVhc29uID0geFJFQk9PVCBdOyB0aGVuCisgCistICAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAkbmV3X2lwX2FkZHJlc3MgJG5ld19zdWJuZXRfYXJnIFwKKy0JCQkJCSRuZXdfYnJvYWRjYXN0X2FyZyAkbXR1X2FyZworKyAgICAke2lwfSAtNCBhZGRyIGFkZCAke25ld19pcF9hZGRyZXNzfSR7bmV3X21hc2t9ICR7bmV3X2Jyb2FkY2FzdF9hcmd9IFwKKysgICAgICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKysgICAgaWYgWyAtbiAiJG5ld19pbnRlcmZhY2VfbXR1IiBdOyB0aGVuCisrICAgICAgIyBzZXQgTVRVCisrICAgICAgJHtpcH0gbGluayBzZXQgZGV2ICR7aW50ZXJmYWNlfSBtdHUgJHtuZXdfaW50ZXJmYWNlX210dX0KKysgICAgZmkKKyAgICAgIyBBZGQgYSBuZXR3b3JrIHJvdXRlIHRvIHRoZSBjb21wdXRlZCBuZXR3b3JrIGFkZHJlc3MuCisgICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbworICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQlyb3V0ZSBhZGQgLWhvc3QgJHJvdXRlciBkZXYgJGludGVyZmFjZQorKyAgICAgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKyAgICAgICBmaQorLSAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgJHttZXRyaWNfYXJnfSA+L2Rldi9udWxsIDI+JjEKKyAgICAgZG9uZQorICAgZWxzZQorICAgICAjIHdlIGhhdmVuJ3QgY2hhbmdlZCB0aGUgYWRkcmVzcywgaGF2ZSB3ZSBjaGFuZ2VkIG90aGVyIG9wdGlvbnMgICAgICAgICAgIAorQEAgLTE4MiwyMSArMTgxLDIzIEBACisgICAgIGlmIFsgeCRuZXdfcm91dGVycyAhPSB4IF0gJiYgWyB4JG5ld19yb3V0ZXJzICE9IHgkb2xkX3JvdXRlcnMgXSA7IHRoZW4KKyAgICAgICAjIGlmIHdlJ3ZlIGNoYW5nZWQgcm91dGVycyBkZWxldGUgdGhlIG9sZCBhbmQgYWRkIHRoZSBuZXcuCisgICAgICAgZm9yIHJvdXRlciBpbiAkb2xkX3JvdXRlcnM7IGRvCistICAgICAgICByb3V0ZSBkZWwgZGVmYXVsdCBndyAkcm91dGVyCisrICAgICAgICAke2lwfSAtNCByb3V0ZSBkZWxldGUgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9CisgICAgICAgZG9uZQorICAgICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbworICAgICAgICAgaWYgWyAieCRuZXdfc3VibmV0X21hc2siID0gIngyNTUuMjU1LjI1NS4yNTUiIF0gOyB0aGVuCistCSAgcm91dGUgYWRkIC1ob3N0ICRyb3V0ZXIgZGV2ICRpbnRlcmZhY2UKKy0JZmkKKy0Jcm91dGUgYWRkIGRlZmF1bHQgZ3cgJHJvdXRlciAkbWV0cmljX2FyZyBkZXYgJGludGVyZmFjZQorKwkgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHtyb3V0ZXJ9IGRldiAkaW50ZXJmYWNlID4vZGV2L251bGwgMj4mMQorKwkgICAgZmkKKysgICAgICAgICR7aXB9IC00IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAke3JvdXRlcn0gZGV2ICR7aW50ZXJmYWNlfSBcCisrICAgICAgICAgICR7bWV0cmljX2FyZ30gPi9kZXYvbnVsbCAyPiYxCisgICAgICAgZG9uZQorICAgICBmaQorICAgZmkKKyAgIGlmIFsgeCRuZXdfaXBfYWRkcmVzcyAhPSB4JGFsaWFzX2lwX2FkZHJlc3MgXSAmJiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07CisgICAgdGhlbgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZworLSAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgJGludGVyZmFjZTowCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19tYXNrfSBcCisrICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICBmaQorICAgbWFrZV9yZXNvbHZfY29uZgorICAgZXhpdF93aXRoX2hvb2tzIDAKK0BAIC0yMDYsNDIgKzIwNyw0OSBAQAorICAgIHx8IFsgeCRyZWFzb24gPSB4U1RPUCBdOyB0aGVuCisgICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKyAgICAgIyBUdXJuIG9mZiBhbGlhcyBpbnRlcmZhY2UuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MC0gaW5ldCAwCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorICAgZmkKKyAgIGlmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKyAgICAgIyBTaHV0IGRvd24gaW50ZXJmYWNlLCB3aGljaCB3aWxsIGRlbGV0ZSByb3V0ZXMgYW5kIGNsZWFyIGFycCBjYWNoZS4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9CisgICBmaQorICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MCBpbmV0ICRhbGlhc19pcF9hZGRyZXNzICRhbGlhc19zdWJuZXRfYXJnCistICAgIHJvdXRlIGFkZCAtaG9zdCAkYWxpYXNfaXBfYWRkcmVzcyAkaW50ZXJmYWNlOjAKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSR7YWxpYXNfbmV0d29ya19hcmd9IFwKKysgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30gZGV2ICR7aW50ZXJmYWNlfSA+L2Rldi9udWxsIDI+JjEKKyAgIGZpCisgICBleGl0X3dpdGhfaG9va3MgMAorIGZpCisgCisgaWYgWyB4JHJlYXNvbiA9IHhUSU1FT1VUIF07IHRoZW4KKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgIGZpCisrICAke2lwfSAtNCBhZGRyIGFkZCAke25ld19pcF9hZGRyZXNzfSR7bmV3X21hc2t9ICR7bmV3X2Jyb2FkY2FzdF9hcmd9IFwKKysgICAgICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQorKyAgaWYgWyAtbiAiJG5ld19pbnRlcmZhY2VfbXR1IiBdOyB0aGVuCisrICAgICMgc2V0IE1UVQorKyAgICBpcCBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IG10dSAke25ld19pbnRlcmZhY2VfbXR1fQorICAgZmkKKy0gIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAkbmV3X2lwX2FkZHJlc3MgJG5ld19zdWJuZXRfYXJnIFwKKy0JCQkJCSRuZXdfYnJvYWRjYXN0X2FyZyAkbXR1X2FyZworICAgc2V0ICRuZXdfcm91dGVycworICAgaWYgcGluZyAtcSAtYyAxICQxOyB0aGVuCisgICAgIGlmIFsgeCRuZXdfaXBfYWRkcmVzcyAhPSB4JGFsaWFzX2lwX2FkZHJlc3MgXSAmJiBcCisgCQkJWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCistICAgICAgaWZjb25maWcgJGludGVyZmFjZTowIGluZXQgJGFsaWFzX2lwX2FkZHJlc3MgJGFsaWFzX3N1Ym5ldF9hcmcKKy0gICAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgZGV2ICRpbnRlcmZhY2U6MAorKyAgICAgICR7aXB9IC00IGFkZHIgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30ke2FsaWFzX21hc2t9IFwKKysgICAgICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICAgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30gZGV2ICR7aW50ZXJmYWNlfSA+L2Rldi9udWxsIDI+JjEKKyAgICAgZmkKKyAgICAgZm9yIHJvdXRlciBpbiAkbmV3X3JvdXRlcnM7IGRvCisgICAgICAgaWYgWyAieCRuZXdfc3VibmV0X21hc2siID0gIngyNTUuMjU1LjI1NS4yNTUiIF0gOyB0aGVuCistCXJvdXRlIGFkZCAtaG9zdCAkcm91dGVyIGRldiAkaW50ZXJmYWNlCisrCSAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHtyb3V0ZXJ9IGRldiAkaW50ZXJmYWNlID4vZGV2L251bGwgMj4mMQorICAgICAgIGZpCistICAgICAgcm91dGUgYWRkIGRlZmF1bHQgZ3cgJHJvdXRlciAkbWV0cmljX2FyZyBkZXYgJGludGVyZmFjZQorKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAke3JvdXRlcn0gZGV2ICR7aW50ZXJmYWNlfSBcCisrICAgICAgICAke21ldHJpY19hcmd9ID4vZGV2L251bGwgMj4mMQorICAgICBkb25lCisgICAgIG1ha2VfcmVzb2x2X2NvbmYKKyAgICAgZXhpdF93aXRoX2hvb2tzIDAKKyAgIGZpCistICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgMCBkb3duCisrICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0KKyAgIGV4aXRfd2l0aF9ob29rcyAxCisgZmkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhMDVmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy4yLmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgZGhjcC5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9saW5rLXdpdGgtbGNyeXB0by5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4c2VwYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWEyODQ4NzVkZDJjMTJkZGQzODg0MTZkNjkxNTZhNjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjI0NmM5YjM1ODc1OWY2Y2RjYzQ1MTA0Y2FhZjc2ZTczMmEyMTFkYmJiYmY2NGEyMWY0OTljOGRiMTI5ODE2NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXJlbGF5IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RlZmF1bHQtcmVsYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2MWYwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXJlbGF5CkBAIC0wLDAgKzEsMTIgQEAKKyMgRGVmYXVsdHMgZm9yIGRoY3AtcmVsYXkgaW5pdHNjcmlwdAorIyBzb3VyY2VkIGJ5IC9ldGMvaW5pdC5kL2RoY3AtcmVsYXkKKworIyBXaGF0IHNlcnZlcnMgc2hvdWxkIHRoZSBESENQIHJlbGF5IGZvcndhcmQgcmVxdWVzdHMgdG8/CisjIGUuZzogU0VSVkVSUz0iMTkyLjE2OC4wLjEiCitTRVJWRVJTPSIiCisKKyMgT24gd2hhdCBpbnRlcmZhY2VzIHNob3VsZCB0aGUgREhDUCByZWxheSAoZGhyZWxheSkgc2VydmUgREhDUCByZXF1ZXN0cz8KK0lOVEVSRkFDRVM9IiIKKworIyBBZGRpdGlvbmFsIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBESENQIHJlbGF5IGRhZW1vbj8KK09QVElPTlM9IiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlciBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzg1ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RlZmF1bHQtc2VydmVyCkBAIC0wLDAgKzEsNyBAQAorIyBEZWZhdWx0cyBmb3IgZGhjcCBpbml0c2NyaXB0CisjIHNvdXJjZWQgYnkgL2V0Yy9pbml0LmQvZGhjcC1zZXJ2ZXIKKyMgaW5zdGFsbGVkIGF0IC9ldGMvZGVmYXVsdC9kaGNwLXNlcnZlciBieSB0aGUgbWFpbnRhaW5lciBzY3JpcHRzCisKKyMgT24gd2hhdCBpbnRlcmZhY2VzIHNob3VsZCB0aGUgREhDUCBzZXJ2ZXIgKGRoY3BkKSBzZXJ2ZSBESENQIHJlcXVlc3RzPworIyAgICAgICBTZXBhcmF0ZSBtdWx0aXBsZSBpbnRlcmZhY2VzIHdpdGggc3BhY2VzLCBlLmcuICJldGgwIGV0aDEiLgorSU5URVJGQUNFUz0iIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjbGllbnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTZkY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LmNvbmYKQEAgLTAsMCArMSw1MCBAQAorIyBDb25maWd1cmF0aW9uIGZpbGUgZm9yIC9zYmluL2RoY2xpZW50LCB3aGljaCBpcyBpbmNsdWRlZCBpbiBEZWJpYW4ncworIwlkaGNwMy1jbGllbnQgcGFja2FnZS4KKyMKKyMgVGhpcyBpcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGRoY2xpZW50LiBTZWUgZGhjbGllbnQuY29uZidzCisjCW1hbiBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeW50YXggb2YgdGhpcyBmaWxlCisjCWFuZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHRoZSBwYXJhbWV0ZXJzIHVuZGVyc3Rvb2QgYnkKKyMJZGhjbGllbnQuCisjCisjIE5vcm1hbGx5LCBpZiB0aGUgREhDUCBzZXJ2ZXIgcHJvdmlkZXMgcmVhc29uYWJsZSBpbmZvcm1hdGlvbiBhbmQgZG9lcworIwlub3QgbGVhdmUgYW55dGhpbmcgb3V0IChsaWtlIHRoZSBkb21haW4gbmFtZSwgZm9yIGV4YW1wbGUpLCB0aGVuCisjCWZldyBjaGFuZ2VzIG11c3QgYmUgbWFkZSB0byB0aGlzIGZpbGUsIGlmIGFueS4KKyMKKworI3NlbmQgaG9zdC1uYW1lICJhbmRhcmUuZnVndWUuY29tIjsKKyNzZW5kIGRoY3AtY2xpZW50LWlkZW50aWZpZXIgMTowOmEwOjI0OmFiOmZiOjljOworI3NlbmQgZGhjcC1sZWFzZS10aW1lIDM2MDA7Cisjc3VwZXJzZWRlIGRvbWFpbi1uYW1lICJmdWd1ZS5jb20gaG9tZS52aXguY29tIjsKKyNwcmVwZW5kIGRvbWFpbi1uYW1lLXNlcnZlcnMgMTI3LjAuMC4xOworcmVxdWVzdCBzdWJuZXQtbWFzaywgYnJvYWRjYXN0LWFkZHJlc3MsIHRpbWUtb2Zmc2V0LCByb3V0ZXJzLAorCWRvbWFpbi1uYW1lLCBkb21haW4tbmFtZS1zZXJ2ZXJzLCBob3N0LW5hbWUsCisJbmV0Ymlvcy1uYW1lLXNlcnZlcnMsIG5ldGJpb3Mtc2NvcGU7CisjcmVxdWlyZSBzdWJuZXQtbWFzaywgZG9tYWluLW5hbWUtc2VydmVyczsKKyN0aW1lb3V0IDYwOworI3JldHJ5IDYwOworI3JlYm9vdCAxMDsKKyNzZWxlY3QtdGltZW91dCA1OworI2luaXRpYWwtaW50ZXJ2YWwgMjsKKyNzY3JpcHQgIi9ldGMvZGhjcDMvZGhjbGllbnQtc2NyaXB0IjsKKyNtZWRpYSAiLWxpbmswIC1saW5rMSAtbGluazIiLCAibGluazAgbGluazEiOworI3JlamVjdCAxOTIuMzMuMTM3LjIwOTsKKworI2FsaWFzIHsKKyMgIGludGVyZmFjZSAiZXRoMCI7CisjICBmaXhlZC1hZGRyZXNzIDE5Mi41LjUuMjEzOworIyAgb3B0aW9uIHN1Ym5ldC1tYXNrIDI1NS4yNTUuMjU1LjI1NTsKKyN9CisKKyNsZWFzZSB7CisjICBpbnRlcmZhY2UgImV0aDAiOworIyAgZml4ZWQtYWRkcmVzcyAxOTIuMzMuMTM3LjIwMDsKKyMgIG1lZGl1bSAibGluazAgbGluazEiOworIyAgb3B0aW9uIGhvc3QtbmFtZSAiYW5kYXJlLnN3aWZ0bWVkaWEuY29tIjsKKyMgIG9wdGlvbiBzdWJuZXQtbWFzayAyNTUuMjU1LjI1NS4wOworIyAgb3B0aW9uIGJyb2FkY2FzdC1hZGRyZXNzIDE5Mi4zMy4xMzcuMjU1OworIyAgb3B0aW9uIHJvdXRlcnMgMTkyLjMzLjEzNy4yNTA7CisjICBvcHRpb24gZG9tYWluLW5hbWUtc2VydmVycyAxMjcuMC4wLjE7CisjICByZW5ldyAyIDIwMDAvMS8xMiAwMDowMDowMTsKKyMgIHJlYmluZCAyIDIwMDAvMS8xMiAwMDowMDowMTsKKyMgIGV4cGlyZSAyIDIwMDAvMS8xMiAwMDowMDowMTsKKyN9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuY29uZiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDFjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuY29uZgpAQCAtMCwwICsxLDEwOCBAQAorIworIyBTYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBJU0MgZGhjcGQgZm9yIERlYmlhbgorIworIyAkSWQ6IGRoY3BkLmNvbmYsdiAxLjEuMS4xIDIwMDIvMDUvMjEgMDA6MDc6NDQgcGVsb3kgRXhwICQKKyMKKworIyBUaGUgZGRucy11cGRhdGVzLXN0eWxlIHBhcmFtZXRlciBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VydmVyIHdpbGwKKyMgYXR0ZW1wdCB0byBkbyBhIEROUyB1cGRhdGUgd2hlbiBhIGxlYXNlIGlzIGNvbmZpcm1lZC4gV2UgZGVmYXVsdCB0byB0aGUKKyMgYmVoYXZpb3Igb2YgdGhlIHZlcnNpb24gMiBwYWNrYWdlcyAoJ25vbmUnLCBzaW5jZSBESENQIHYyIGRpZG4ndAorIyBoYXZlIHN1cHBvcnQgZm9yIERETlMuKQorZGRucy11cGRhdGUtc3R5bGUgbm9uZTsKKworIyBvcHRpb24gZGVmaW5pdGlvbnMgY29tbW9uIHRvIGFsbCBzdXBwb3J0ZWQgbmV0d29ya3MuLi4KK29wdGlvbiBkb21haW4tbmFtZSAiZXhhbXBsZS5vcmciOworb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgbnMxLmV4YW1wbGUub3JnLCBuczIuZXhhbXBsZS5vcmc7CisKK2RlZmF1bHQtbGVhc2UtdGltZSA2MDA7CittYXgtbGVhc2UtdGltZSA3MjAwOworCisjIElmIHRoaXMgREhDUCBzZXJ2ZXIgaXMgdGhlIG9mZmljaWFsIERIQ1Agc2VydmVyIGZvciB0aGUgbG9jYWwKKyMgbmV0d29yaywgdGhlIGF1dGhvcml0YXRpdmUgZGlyZWN0aXZlIHNob3VsZCBiZSB1bmNvbW1lbnRlZC4KKyNhdXRob3JpdGF0aXZlOworCisjIFVzZSB0aGlzIHRvIHNlbmQgZGhjcCBsb2cgbWVzc2FnZXMgdG8gYSBkaWZmZXJlbnQgbG9nIGZpbGUgKHlvdSBhbHNvCisjIGhhdmUgdG8gaGFjayBzeXNsb2cuY29uZiB0byBjb21wbGV0ZSB0aGUgcmVkaXJlY3Rpb24pLgorbG9nLWZhY2lsaXR5IGxvY2FsNzsKKworIyBObyBzZXJ2aWNlIHdpbGwgYmUgZ2l2ZW4gb24gdGhpcyBzdWJuZXQsIGJ1dCBkZWNsYXJpbmcgaXQgaGVscHMgdGhlIAorIyBESENQIHNlcnZlciB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIHRvcG9sb2d5LgorCisjc3VibmV0IDEwLjE1Mi4xODcuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgeworI30KKworIyBUaGlzIGlzIGEgdmVyeSBiYXNpYyBzdWJuZXQgZGVjbGFyYXRpb24uCisKKyNzdWJuZXQgMTAuMjU0LjIzOS4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMjI0IHsKKyMgIHJhbmdlIDEwLjI1NC4yMzkuMTAgMTAuMjU0LjIzOS4yMDsKKyMgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMzktMC0xLmV4YW1wbGUub3JnLCBydHItMjM5LTAtMi5leGFtcGxlLm9yZzsKKyN9CisKKyMgVGhpcyBkZWNsYXJhdGlvbiBhbGxvd3MgQk9PVFAgY2xpZW50cyB0byBnZXQgZHluYW1pYyBhZGRyZXNzZXMsCisjIHdoaWNoIHdlIGRvbid0IHJlYWxseSByZWNvbW1lbmQuCisKKyNzdWJuZXQgMTAuMjU0LjIzOS4zMiBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSBkeW5hbWljLWJvb3RwIDEwLjI1NC4yMzkuNDAgMTAuMjU0LjIzOS42MDsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxMC4yNTQuMjM5LjMxOworIyAgb3B0aW9uIHJvdXRlcnMgcnRyLTIzOS0zMi0xLmV4YW1wbGUub3JnOworI30KKworIyBBIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGZvciBhbiBpbnRlcm5hbCBzdWJuZXQuCisjc3VibmV0IDEwLjUuNS4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMjI0IHsKKyMgIHJhbmdlIDEwLjUuNS4yNiAxMC41LjUuMzA7CisjICBvcHRpb24gZG9tYWluLW5hbWUtc2VydmVycyBuczEuaW50ZXJuYWwuZXhhbXBsZS5vcmc7CisjICBvcHRpb24gZG9tYWluLW5hbWUgImludGVybmFsLmV4YW1wbGUub3JnIjsKKyMgIG9wdGlvbiByb3V0ZXJzIDEwLjUuNS4xOworIyAgb3B0aW9uIGJyb2FkY2FzdC1hZGRyZXNzIDEwLjUuNS4zMTsKKyMgIGRlZmF1bHQtbGVhc2UtdGltZSA2MDA7CisjICBtYXgtbGVhc2UtdGltZSA3MjAwOworI30KKworIyBIb3N0cyB3aGljaCByZXF1aXJlIHNwZWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGNhbiBiZSBsaXN0ZWQgaW4KKyMgaG9zdCBzdGF0ZW1lbnRzLiAgIElmIG5vIGFkZHJlc3MgaXMgc3BlY2lmaWVkLCB0aGUgYWRkcmVzcyB3aWxsIGJlCisjIGFsbG9jYXRlZCBkeW5hbWljYWxseSAoaWYgcG9zc2libGUpLCBidXQgdGhlIGhvc3Qtc3BlY2lmaWMgaW5mb3JtYXRpb24KKyMgd2lsbCBzdGlsbCBjb21lIGZyb20gdGhlIGhvc3QgZGVjbGFyYXRpb24uCisKKyNob3N0IHBhc3NhY2FnbGlhIHsKKyMgIGhhcmR3YXJlIGV0aGVybmV0IDA6MDpjMDo1ZDpiZDo5NTsKKyMgIGZpbGVuYW1lICJ2bXVuaXgucGFzc2FjYWdsaWEiOworIyAgc2VydmVyLW5hbWUgInRvY2NhdGEuZnVndWUuY29tIjsKKyN9CisKKyMgRml4ZWQgSVAgYWRkcmVzc2VzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgaG9zdHMuICAgVGhlc2UgYWRkcmVzc2VzCisjIHNob3VsZCBub3QgYWxzbyBiZSBsaXN0ZWQgYXMgYmVpbmcgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFzc2lnbm1lbnQuCisjIEhvc3RzIGZvciB3aGljaCBmaXhlZCBJUCBhZGRyZXNzZXMgaGF2ZSBiZWVuIHNwZWNpZmllZCBjYW4gYm9vdCB1c2luZworIyBCT09UUCBvciBESENQLiAgIEhvc3RzIGZvciB3aGljaCBubyBmaXhlZCBhZGRyZXNzIGlzIHNwZWNpZmllZCBjYW4gb25seQorIyBiZSBib290ZWQgd2l0aCBESENQLCB1bmxlc3MgdGhlcmUgaXMgYW4gYWRkcmVzcyByYW5nZSBvbiB0aGUgc3VibmV0CisjIHRvIHdoaWNoIGEgQk9PVFAgY2xpZW50IGlzIGNvbm5lY3RlZCB3aGljaCBoYXMgdGhlIGR5bmFtaWMtYm9vdHAgZmxhZworIyBzZXQuCisjaG9zdCBmYW50YXNpYSB7CisjICBoYXJkd2FyZSBldGhlcm5ldCAwODowMDowNzoyNjpjMDphNTsKKyMgIGZpeGVkLWFkZHJlc3MgZmFudGFzaWEuZnVndWUuY29tOworI30KKworIyBZb3UgY2FuIGRlY2xhcmUgYSBjbGFzcyBvZiBjbGllbnRzIGFuZCB0aGVuIGRvIGFkZHJlc3MgYWxsb2NhdGlvbgorIyBiYXNlZCBvbiB0aGF0LiAgIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGEgY2FzZSB3aGVyZSBhbGwgY2xpZW50cworIyBpbiBhIGNlcnRhaW4gY2xhc3MgZ2V0IGFkZHJlc3NlcyBvbiB0aGUgMTAuMTcuMjI0LzI0IHN1Ym5ldCwgYW5kIGFsbAorIyBvdGhlciBjbGllbnRzIGdldCBhZGRyZXNzZXMgb24gdGhlIDEwLjAuMjkvMjQgc3VibmV0LgorCisjY2xhc3MgImZvbyIgeworIyAgbWF0Y2ggaWYgc3Vic3RyaW5nIChvcHRpb24gdmVuZG9yLWNsYXNzLWlkZW50aWZpZXIsIDAsIDQpID0gIlNVTlciOworI30KKworI3NoYXJlZC1uZXR3b3JrIDIyNC0yOSB7CisjICBzdWJuZXQgMTAuMTcuMjI0LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHsKKyMgICAgb3B0aW9uIHJvdXRlcnMgcnRyLTIyNC5leGFtcGxlLm9yZzsKKyMgIH0KKyMgIHN1Ym5ldCAxMC4wLjI5LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHsKKyMgICAgb3B0aW9uIHJvdXRlcnMgcnRyLTI5LmV4YW1wbGUub3JnOworIyAgfQorIyAgcG9vbCB7CisjICAgIGFsbG93IG1lbWJlcnMgb2YgImZvbyI7CisjICAgIHJhbmdlIDEwLjE3LjIyNC4xMCAxMC4xNy4yMjQuMjUwOworIyAgfQorIyAgcG9vbCB7CisjICAgIGRlbnkgbWVtYmVycyBvZiAiZm9vIjsKKyMgICAgcmFuZ2UgMTAuMC4yOS4xMCAxMC4wLjI5LjIzMDsKKyMgIH0KKyN9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNGY5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuc2VydmljZQpAQCAtMCwwICsxLDE1IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPURIQ1B2NCBTZXJ2ZXIgRGFlbW9uCitEb2N1bWVudGF0aW9uPW1hbjpkaGNwZCg4KSBtYW46ZGhjcGQuY29uZig1KQorQWZ0ZXI9bmV0d29yay50YXJnZXQKK0FmdGVyPXRpbWUtc3luYy50YXJnZXQKKworW1NlcnZpY2VdCitQSURGaWxlPUBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQucGlkCitFbnZpcm9ubWVudEZpbGU9QFNZU0NPTkZESVJAL2RlZmF1bHQvZGhjcC1zZXJ2ZXIKK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL3N5c2NvbmZpZy9kaGNwLXNlcnZlcgorRXhlY1N0YXJ0UHJlPUBiYXNlX2JpbmRpckAvdG91Y2ggQGxvY2Fsc3RhdGVkaXJAL2xpYi9kaGNwL2RoY3BkLmxlYXNlcworRXhlY1N0YXJ0PUBTQklORElSQC9kaGNwZCAtZiAtY2YgQFNZU0NPTkZESVJAL2RoY3AvZGhjcGQuY29uZiAtcGYgQGxvY2Fsc3RhdGVkaXJAL3J1bi9kaGNwZC5waWQgJERIQ1BEQVJHUyAtcSAkSU5URVJGQUNFUworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5NmFiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZDYuc2VydmljZQpAQCAtMCwwICsxLDE1IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPURIQ1B2NiBTZXJ2ZXIgRGFlbW9uCitEb2N1bWVudGF0aW9uPW1hbjpkaGNwZCg4KSBtYW46ZGhjcGQuY29uZig1KQorQWZ0ZXI9bmV0d29yay50YXJnZXQKK0FmdGVyPXRpbWUtc3luYy50YXJnZXQKKworW1NlcnZpY2VdCitQSURGaWxlPUBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQ2LnBpZAorRW52aXJvbm1lbnRGaWxlPUBTWVNDT05GRElSQC9kZWZhdWx0L2RoY3Atc2VydmVyCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9zeXNjb25maWcvZGhjcGQ2CitFeGVjU3RhcnRQcmU9QGJhc2VfYmluZGlyQC90b3VjaCBAbG9jYWxzdGF0ZWRpckAvbGliL2RoY3AvZGhjcGQ2LmxlYXNlcworRXhlY1N0YXJ0PUBTQklORElSQC9kaGNwZCAtZiAtNiAtY2YgQFNZU0NPTkZESVJAL2RoY3AvZGhjcGQuY29uZiAtcGYgQGxvY2Fsc3RhdGVkaXJAL3J1bi9kaGNwZDYucGlkICRESENQREFSR1MgLXEgJElOVEVSRkFDRVMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3JlbGF5LnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcmVsYXkuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQ4MTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3JlbGF5LnNlcnZpY2UKQEAgLTAsMCArMSw5IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPURIQ1AgUmVsYXkgQWdlbnQgRGFlbW9uCitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcmVsYXkgLWQgLS1uby1waWQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtcmVsYXkgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvaW5pdC1yZWxheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTlhN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtcmVsYXkKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisjCisjICRJZDogZGhjcDMtcmVsYXksdiAxLjEgMjAwNC8wNC8xNiAxNTo0MTowOCBtbCBFeHAgJAorIworCisjIEl0IGlzIG5vdCBzYWZlIHRvIHN0YXJ0IGlmIHdlIGRvbid0IGhhdmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uLi4KK2lmIFsgISAtZiAvZXRjL2RlZmF1bHQvZGhjcC1yZWxheSBdOyB0aGVuCisJZWNobyAiL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkgZG9lcyBub3QgZXhpc3QhIC0gQWJvcnRpbmcuLi4iCisJZWNobyAiY3JlYXRlIHRoaXMgZmlsZSB0byBmaXggdGhlIHByb2JsZW0uIgorCWV4aXQgMQorZmkKKworIyBSZWFkIGluaXQgc2NyaXB0IGNvbmZpZ3VyYXRpb24gKGludGVyZmFjZXMgdGhlIGRhZW1vbiBzaG91bGQgbGlzdGVuIG9uCisjIGFuZCB0aGUgREhDUCBzZXJ2ZXIgd2Ugc2hvdWxkIGZvcndhcmQgcmVxdWVzdHMgdG8uKQorLiAvZXRjL2RlZmF1bHQvZGhjcC1yZWxheQorCisjIEJ1aWxkIGNvbW1hbmQgbGluZSBmb3IgaW50ZXJmYWNlcyAod2lsbCBiZSBwYXNzZWQgdG8gZGhyZWxheSBiZWxvdy4pCitJRkNNRD0iIgoraWYgdGVzdCAiJElOVEVSRkFDRVMiICE9ICIiOyB0aGVuCisJZm9yIEkgaW4gJElOVEVSRkFDRVM7IGRvCisJCUlGQ01EPSR7SUZDTUR9Ii1pICIke0l9IiAiCisJZG9uZQorZmkKKworREhDUkVMQVlQSUQ9L3Zhci9ydW4vZGhjcmVsYXkucGlkCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0KQorCQlzdGFydC1zdG9wLWRhZW1vbiAtUyAteCAvdXNyL3NiaW4vZGhjcmVsYXkgLS0gLXEgJE9QVElPTlMgJElGQ01EICRTRVJWRVJTCisJCTs7CisJc3RvcCkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXggL3Vzci9zYmluL2RoY3JlbGF5CisJCTs7CisJcmVzdGFydCB8IGZvcmNlLXJlbG9hZCkKKwkJJDAgc3RvcAorCQlzbGVlcCAyCisJCSQwIHN0YXJ0CisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2RoY3AtcmVsYXkge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorCQlleGl0IDEgCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YzIwODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvaW5pdC1zZXJ2ZXIKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisjCisjICRJZDogZGhjcDMtc2VydmVyLmluaXQuZCx2IDEuNCAyMDAzLzA3LzEzIDE5OjEyOjQxIG1keiBFeHAgJAorIworCit0ZXN0IC1mIC91c3Ivc2Jpbi9kaGNwZCB8fCBleGl0IDAKKworIyBJdCBpcyBub3Qgc2FmZSB0byBzdGFydCBpZiB3ZSBkb24ndCBoYXZlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLi4uCitpZiBbICEgLWYgL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyIF07IHRoZW4KKwllY2hvICIvZXRjL2RlZmF1bHQvZGhjcC1zZXJ2ZXIgZG9lcyBub3QgZXhpc3QhIC0gQWJvcnRpbmcuLi4iCisJZXhpdCAwCitmaQorCisjIFJlYWQgaW5pdCBzY3JpcHQgY29uZmlndXJhdGlvbiAoc28gZmFyIG9ubHkgaW50ZXJmYWNlcyB0aGUgZGFlbW9uCisjIHNob3VsZCBsaXN0ZW4gb24uKQorLiAvZXRjL2RlZmF1bHQvZGhjcC1zZXJ2ZXIKKworY2FzZSAiJDEiIGluCisJc3RhcnQpCisJCWVjaG8gLW4gIlN0YXJ0aW5nIERIQ1Agc2VydmVyOiAiCisJCXRlc3QgLWQgL3Zhci9saWIvZGhjcC8gfHwgbWtkaXIgLXAgL3Zhci9saWIvZGhjcC8KKwkJdGVzdCAtZiAvdmFyL2xpYi9kaGNwL2RoY3BkLmxlYXNlcyB8fCB0b3VjaCAvdmFyL2xpYi9kaGNwL2RoY3BkLmxlYXNlcwkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2RoY3BkIC0tIC1xICRJTlRFUkZBQ0VTCisJCWVjaG8gIi4iCisJCTs7CisJc3RvcCkKKwkJZWNobyAtbiAiU3RvcHBpbmcgREhDUCBzZXJ2ZXI6IGRoY3BkMyIKKwkJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXggL3Vzci9zYmluL2RoY3BkCisJCWVjaG8gIi4iCisJCTs7CisJcmVzdGFydCB8IGZvcmNlLXJlbG9hZCkKKwkJJDAgc3RvcAorCQlzbGVlcCAyCisJCSQwIHN0YXJ0CisJCWlmIFsgIiQ/IiAhPSAiMCIgXTsgdGhlbgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2RoY3Atc2VydmVyIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKwkJZXhpdCAxIAorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzYTRlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiVENQIC8gSVAgbmV0d29ya2luZyBhbmQgdHJhZmZpYyBjb250cm9sIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIklwcm91dGUyIGlzIGEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgZm9yIGNvbnRyb2xsaW5nIFwKK1RDUCAvIElQIG5ldHdvcmtpbmcgYW5kIHRyYWZmaWMgY29udHJvbCBpbiBMaW51eC4gIE9mIHRoZSB1dGlsaXRpZXMgaXAgXAorYW5kIHRjIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQuICBpcCBjb250cm9scyBJUHY0IGFuZCBJUHY2IFwKK2NvbmZpZ3VyYXRpb24gYW5kIHRjIHN0YW5kcyBmb3IgdHJhZmZpYyBjb250cm9sLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTIiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lwL2lwLmM7YmVnaW5saW5lPTM7ZW5kbGluZT04O21kNT02ODlkNjkxZDA0MTBhNGI2NGQzODk5ZjhkNmUzMTgxNyIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgaXB0YWJsZXMgZWxmdXRpbHMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitFWFRSQV9PRU1BS0UgPSAiQ0M9JyR7Q0N9JyBLRVJORUxfSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSBET0NESVI9JHtkb2NkaXJ9L2lwcm91dGUyIFNVQkRJUlM9J2xpYiB0YyBpcCcgU0JJTkRJUj0nJHtiYXNlX3NiaW5kaXJ9JyBMSUJESVI9JyR7bGliZGlyfSciCisKK2RvX2luc3RhbGwgKCkgeworICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwKKyAgICBtdiAke0R9JHtiYXNlX3NiaW5kaXJ9L2lwICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaXAuaXByb3V0ZTIKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9CisgICAgbXYgJHtEfS9zaGFyZS8qICR7RH0ke2RhdGFkaXJ9LyB8fCB0cnVlCisgICAgcm0gJHtEfS9zaGFyZSAtcmYgfHwgdHJ1ZQorfQorCisjIFRoZSAuc28gZmlsZXMgaW4gaXByb3V0ZTItdGMgYXJlIG1vZHVsZXMsIG5vdCB0cmFkaXRpb25hbCBsaWJyYXJpZXMKK0lOU0FORV9TS0lQXyR7UE59LXRjID0gImRldi1zbyIKKworUEFDS0FHRVMgPSsgIiR7UE59LXRjIgorRklMRVNfJHtQTn0tdGMgPSAiJHtiYXNlX3NiaW5kaXJ9L3RjKiBcCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vdGMvKi5zbyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdGMvLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJpcCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtpcF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lwLiR7QlBOfSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpcF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lwIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljN2Q0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorU3ViamVjdDogW1BBVENIXSBpcHJvdXRlMjogZGUtYmFzaCBzY3JpcHRzCisKK2RlLWJhc2ggdGhlc2UgdHdvIHNjcmlwdHMgdG8gbWFrZSBpcHJvdXRlMiBub3QgZGVwZW5kIG9uIGJhc2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGlwL2lmY2ZnIHwgICAxNSArKysrKysrKy0tLS0tLS0KKyBpcC9ydHByICB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2lwL2lmY2ZnIGIvaXAvaWZjZmcKK2luZGV4IDA4M2Q5ZGYuLjYwYmNmMWYgMTAwNjQ0CistLS0gYS9pcC9pZmNmZworKysrIGIvaXAvaWZjZmcKK0BAIC0xLDEyICsxLDEzIEBACistIyEgL2Jpbi9iYXNoCisrIyEgL2Jpbi9zaAorIAorIENoZWNrRm9yd2FyZGluZyAoKSB7CistICBsb2NhbCBzYmFzZSBmd2QKKysgIGxvY2FsIHNiYXNlIGZ3ZCBmb3J3YXJkaW5nCisgICBzYmFzZT0vcHJvYy9zeXMvbmV0L2lwdjQvY29uZgorICAgZndkPTAKKyAgIGlmIFsgLWQgJHNiYXNlIF07IHRoZW4KKyAgICAgZm9yIGRpciBpbiAkc2Jhc2UvKi9mb3J3YXJkaW5nOyBkbworLSAgICAgIGZ3ZD0kWyRmd2QgKyBgY2F0ICRkaXJgXQorKyAgICAgIGZvcndhcmRpbmc9YGNhdCAkZGlyYAorKyAgICAgIGZ3ZD0kKCgkZndkKyRmb3J3YXJkaW5nKSkKKyAgICAgZG9uZQorICAgZWxzZQorICAgICBmd2Q9MgorQEAgLTEyNywxMiArMTI4LDEyIEBAIGZpCisgYXJwaW5nIC1xIC1BIC1jIDEgLUkgJGRldiAkaXBhZGRyCisgbm9hcnA9JD8KKyAoIHNsZWVwIDIgOworLSAgYXJwaW5nIC1xIC1VIC1jIDEgLUkgJGRldiAkaXBhZGRyICkgPiYgL2Rldi9udWxsIDwvZGV2L251bGwgJgorKyAgYXJwaW5nIC1xIC1VIC1jIDEgLUkgJGRldiAkaXBhZGRyICkgPiAvZGV2L251bGwgMj4mMSA8L2Rldi9udWxsICYKKyAKKy1pcCByb3V0ZSBhZGQgdW5yZWFjaGFibGUgMjI0LjAuMC4wLzI0ID4mIC9kZXYvbnVsbAorLWlwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyNTUuMjU1LjI1NS4yNTUgPiYgL2Rldi9udWxsCisraXAgcm91dGUgYWRkIHVucmVhY2hhYmxlIDIyNC4wLjAuMC8yNCA+IC9kZXYvbnVsbCAyPiYxCisraXAgcm91dGUgYWRkIHVucmVhY2hhYmxlIDI1NS4yNTUuMjU1LjI1NSA+IC9kZXYvbnVsbCAyPiYxCisgaWYgWyBgaXAgbGluayBscyAkZGV2IHwgZ3JlcCAtYyBNVUxUSUNBU1RgIC1nZSAxIF07IHRoZW4KKy0gIGlwIHJvdXRlIGFkZCAyMjQuMC4wLjAvNCBkZXYgJGRldiBzY29wZSBnbG9iYWwgPiYgL2Rldi9udWxsCisrICBpcCByb3V0ZSBhZGQgMjI0LjAuMC4wLzQgZGV2ICRkZXYgc2NvcGUgZ2xvYmFsID4gL2Rldi9udWxsIDI+JjEKKyBmaQorIAorIGlmIFsgJGZ3ZCAtZXEgMCBdOyB0aGVuCitkaWZmIC0tZ2l0IGEvaXAvcnRwciBiL2lwL3J0cHIKK2luZGV4IGMzNjI5ZmQuLjY3NDE5OGQgMTAwNjQ0CistLS0gYS9pcC9ydHByCisrKysgYi9pcC9ydHByCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvYmluL2Jhc2gKKysjISAvYmluL3NoCisgCisgZXhlYyB0ciAiW1xcXFxdIiAiWworIF0iCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9jb25maWd1cmUtY3Jvc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjY2MDljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9jb25maWd1cmUtY3Jvc3MucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4NWIwNTg5YjQ4NDNjMDNlOGU2ZmQ5NDE2ZDcxZWE0NDlhNzNjNWMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFRodSwgMyBOb3YgMjAxMSAxMDo0NjoxNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBtYWtlIGNvbmZpZ3VyZSBjcm9zcyBjb21waWxlIHNhZmUKKworQWNjb3JkaW5nIHRvIEtldmluIFRpYW46CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorCitJbmRleDogaXByb3V0ZTItMy43LjAvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXByb3V0ZTItMy43LjAub3JpZy9jb25maWd1cmUKKysrKyBpcHJvdXRlMi0zLjcuMC9jb25maWd1cmUKK0BAIC0yLDYgKzIsNyBAQAorICMgVGhpcyBpcyBub3QgYW4gYXV0Y29uZiBnZW5lcmF0ZWQgY29uZmlndXJlCisgIworIElOQ0xVREU9JHsxOi0iJFBXRC9pbmNsdWRlIn0KKytTWVNST09UPSQxCisgCisgIyBNYWtlIGEgdGVtcCBkaXJlY3RvcnkgaW4gYnVpbGQgdHJlZS4KKyBUTVBESVI9JChta3RlbXAgLWQgY29uZmlnLlhYWFhYWCkKK0BAIC0xNTgsNyArMTU5LDcgQEAgY2hlY2tfaXB0X2xpYl9kaXIoKQorIAkJcmV0dXJuCisgCWZpCisgCistCWZvciBkaXIgaW4gL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYgorKwlmb3IgZGlyIGluICRTWVNST09UL2xpYiAkU1lTUk9PVC91c3IvbGliICRTWVNST09UL3Vzci9sb2NhbC9saWIKKyAJZG8KKyAJCWZvciBmaWxlIGluICRkaXIve3h0YWJsZXMsaXB0YWJsZXN9L2xpYip0XypzbyA7IGRvCisgCQkJaWYgWyAtZiAkZmlsZSBdOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGRiMGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEuMS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGlwcm91dGUyLmluYworCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmV0LyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMzkyOTBjYjNhNTVkMzhkZDhkMTBlMTlhMzA5NDEwOWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzMwNzdhOTg5ZWZiOTM0NDUwYmQ2NTVjYmQ5YWFkZGFhNzQ3Y2I2OTZjNjRkMGM5YTMzMjM3NjhhNmE4ZTY2ZiIKKworIyBDRkxBR1MgYXJlIGNvbXB1dGVkIGluIE1ha2VmaWxlIGFuZCByZWZlcmVuY2UgQ0NPUFRTCisjCitFWFRSQV9PRU1BS0VfYXBwZW5kID0gIiBDQ09QVFM9JyR7Q0ZMQUdTfSciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvaW5pdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmMjllOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvaW5pdApAQCAtMCwwICsxLDc4IEBACisjISAvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBpcmRhCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yayAkcmVtb3RlX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yayAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogSW5mcmFyZWQgcG9ydCBzdXBwb3J0CisjIyMgRU5EIElOSVQgSU5GTworCitOQU1FPSJpcmF0dGFjaCIKK3Rlc3QgLXggIiRJUkRBX0RBRU1PTiIgfHwgSVJEQV9EQUVNT049L3Vzci9zYmluL2lyYXR0YWNoCit0ZXN0IC16ICIkSVJBVFRBQ0hfUElEIiAmJiBJUkFUVEFDSF9QSUQ9L3Zhci9ydW4vaXJhdHRhY2gucGlkCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCittb2R1bGVfaWQoKSB7CisgICAgICAgIGF3ayAnQkVHSU4geyBGUz0iOiAiIH0gL0hhcmR3YXJlLyB7IHByaW50ICQyIH0gJyA8L3Byb2MvY3B1aW5mbworfQorCitpZiBbICEgLWYgL2V0Yy9zeXNjb25maWcvaXJkYSBdOyB0aGVuCisgICAgY2FzZSBgbW9kdWxlX2lkYCBpbgorCSJIUCBpUEFRIEgyMjAwIiB8ICJIUCBpUEFRIEhYNDcwMCIgfCAiSFRDIFVuaXZlcnNhbCIpCisJICAgIElSREE9eWVzCisJICAgIERFVklDRT0vZGV2L3R0eVMyCisJICAgIERPTkdMRT0KKwkgICAgRElTQ09WRVJZPQorCSAgICA7OworCSopCisJICAgIElSREE9eWVzCisJICAgIERFVklDRT0vZGV2L3R0eVMxCisJICAgIERPTkdMRT0KKwkgICAgRElTQ09WRVJZPQorCSAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgICAuIC9ldGMvc3lzY29uZmlnL2lyZGEKK2ZpCisKKyMgQ2hlY2sgdGhhdCBpcmRhIGlzIHVwLgorWyAke0lSREF9ID0gIm5vIiBdICYmIGV4aXQgMAorCitbIC1mIC91c3Ivc2Jpbi9pcmF0dGFjaCBdIHx8IGV4aXQgMAorCitBUkdTPQoraWYgWyAkRE9OR0xFIF07IHRoZW4KKwlBUkdTPSIkQVJHUyAtZCAkRE9OR0xFIgorZmkKK2lmIFsgIiRESVNDT1ZFUlkiID0gInllcyIgXTt0aGVuCisJQVJHUz0iJEFSR1MgLXMiCitmaQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgSXJEQTogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAiJElSREFfREFFTU9OIiAke0RFVklDRX0gJHtBUkdTfSAtLXBpZGZpbGUgIiRJUkFUVEFDSF9QSUQiCisJc2xlZXAgMQorCVsgLWYgL3Zhci9ydW4vaXJhdHRhY2gucGlkIF0gJiYgZWNobyAiIGRvbmUiIHx8IGVjaG8gIiBmYWlsIgorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgSXJEQTogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjICIkSVJEQV9EQUVNT04iIC0tcGlkZmlsZSAiJElSQVRUQUNIX1BJRCIKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwk7OworICBzdGF0dXMpCisJc3RhdHVzIGlyYXR0YWNoCisJZXhpdCAkPworCTs7CisgICopCisJTj0vZXRjL2luaXQuZC8kTkFNRQorCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxzdGF0dXN9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2xkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTVmZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvZmluZGNoaXAvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9maW5kY2hpcC9NYWtlZmlsZQorQEAgLTY1LDUgKzY1LDUgQEAgaW5zdGFsbDogZmluZGNoaXAKKworIGdmaW5kY2hpcDogZ2ZpbmRjaGlwLmMKKwkkKHBybl9jYykKKy0JJChFQ01EKSkkKENDKSAkKENGTEFHUykgYGd0ay1jb25maWcgLS1jZmxhZ3NgICAkPCAtbyAkQCBgZ3RrLWNvbmZpZyAtLWxpYnNgCisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBgZ3RrLWNvbmZpZyAtLWNmbGFnc2AgICQ8IC1vICRAIGBndGstY29uZmlnIC0tbGlic2AKKworLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJhdHRhY2gvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmF0dGFjaC9NYWtlZmlsZQorQEAgLTQ5LDEzICs0OSwxMyBAQCBhbGw6ICQoVEFSR0VUUykKKworIGlyYXR0YWNoOiBpcmF0dGFjaC5vIHV0aWwubworCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgaXJhdHRhY2gubyB1dGlsLm8gLW8gJEAKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIGlyYXR0YWNoLm8gdXRpbC5vIC1vICRACisKKworCisgZG9uZ2xlX2F0dGFjaDogZG9uZ2xlX2F0dGFjaC5vCisJJChwcm5fY2NfbykKKy0JJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSBkb25nbGVfYXR0YWNoLm8gLW8gJEAKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIGRvbmdsZV9hdHRhY2gubyAtbyAkQAorCisKKyBpbnN0YWxsOiAkKFRBUkdFVFMpCistLS0gaXJkYS11dGlscy0wLjkuMTgub3JpZy9pcmRhZHVtcC9NYWtlZmlsZQorKysrIGlyZGEtdXRpbHMtMC45LjE4L2lyZGFkdW1wL01ha2VmaWxlCitAQCAtNDAsNyArNDAsNyBAQCBsaWJfaXJkYWR1bXAuYTogJChMSUJJUkRBRFVNUF9PQkpTKQorCisgaXJkYWR1bXA6ICQoSVJEQURVTVBfT0JKUykgJChMSUJJUkRBRFVNUF9UQVJHRVQpCisJJChwcm5fY2NfbykKKy0JJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSBgcGtnLWNvbmZpZyAtLWxpYnMgZ2xpYi0yLjBgIC1vICAkKElSREFEVU1QX1RBUkdFVCkgJDwgJChMSUJJUkRBRFVNUF9UQVJHRVQpCisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBgcGtnLWNvbmZpZyAtLWxpYnMgZ2xpYi0yLjBgIC1vICAkKElSREFEVU1QX1RBUkdFVCkgJDwgJChMSUJJUkRBRFVNUF9UQVJHRVQpCisKKworIC5jLm86CistLS0gaXJkYS11dGlscy0wLjkuMTgub3JpZy9pcmRhcGluZy9NYWtlZmlsZQorKysrIGlyZGEtdXRpbHMtMC45LjE4L2lyZGFwaW5nL01ha2VmaWxlCitAQCAtNTYsNyArNTYsNyBAQCBhbGw6ICQoVEFSR0VUUykKKworIGlyZGFwaW5nOiAkKE9CSlMpCisJJChwcm5fY2NfbykKKy0JJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKE9CSlMpIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkKE9CSlMpIC1vICRACisKKworIC5jLm86CistLS0gaXJkYS11dGlscy0wLjkuMTgub3JpZy9pcm5ldGQvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcm5ldGQvTWFrZWZpbGUKK0BAIC01MCw3ICs1MCw3IEBAIGFsbDogJChUQVJHRVRTKQorCisgaXJuZXRkOiAkKE9CSlMpCisJJChwcm5fY2NfbykKKy0JJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKE9CSlMpIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkKE9CSlMpIC1vICRACisKKworIGluc3RhbGw6IGlybmV0ZAorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvcHNpb24vTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9wc2lvbi9NYWtlZmlsZQorQEAgLTI1LDQgKzI1LDQgQEAgaW5zdGFsbDogJChQU0lPTl9UQVJHRVRTKQorIENGTEFHUyArPSAtZyAtSS4uL2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAkKFJQTV9PUFRfRkxBR1MpCisgaXJwc2lvbjU6CisJJChwcm5fY2NfbykKKy0JJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKFBTSU9OX1NSQykgLW8gJEAKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChQU0lPTl9TUkMpIC1vICRACitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWMzYjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHNfMC45LjE4LmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIGZpbGVzIGZvciBJckRBIgorREVTQ1JJUFRJT04gPSAiUHJvdmlkZXMgY29tbW9uIGZpbGVzIG5lZWRlZCB0byB1c2UgSXJEQS4gXAorSXJEQSBhbGxvd3MgY29tbXVuaWNhdGlvbiBvdmVyIEluZnJhcmVkIHdpdGggb3RoZXIgZGV2aWNlcyBcCitzdWNoIGFzIHBob25lcyBhbmQgbGFwdG9wcy4iCitIT01FUEFHRSA9ICJodHRwOi8vaXJkYS5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJpcmRhLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaXJkYWR1bXAvQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc21jaW5pdC9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYW4vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaXJkYWR1bXAvaXJkYWR1bXAuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI0O21kNT1kNzhiOWRjZTNjZDc4YzIyMjAyNTBjOWM3YTJiZTE3OCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vaXJkYS9pcmRhLXV0aWxzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NGRjMTJhYTRjM2Y2MWZjY2I4ZDg5MTliZjQwNzliYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MTk4MDU1MWU0NmIyZWFhOWUxN2FkMzFjYmMxYTYzODA3NDYxMWZjMzNiZmYzNDE2M2QxMGM3YTY3YTlmZGM2IgorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ0NDPSR7Q0N9JyBcCisgICAgJ0xEPSR7TER9JyBcCisgICAgJ0NGTEFHUz0ke0NGTEFHU30nIFwKKyAgICAnTERGTEFHUz0ke0xERkxBR1N9JyBcCisgICAgJ1NZU19JTkNMVURFUz0nIFwKKyAgICAnVj0xJyBcCisiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJpcmF0dGFjaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIDIwIgorCitUQVJHRVRTID8/PSAiaXJhdHRhY2ggaXJkYXBpbmciCitkb19jb21waWxlICgpIHsKKwlmb3IgdCBpbiAke1RBUkdFVFN9OyBkbworCQlvZV9ydW5tYWtlIC1DICR0CisJZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJZm9yIHQgaW4gJHtUQVJHRVRTfTsgZG8KKwkJb2VfcnVubWFrZSAtQyAkdCBST09UPSIke0R9IiBpbnN0YWxsCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8ke0lOSVRTQ1JJUFRfTkFNRX0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3LzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTc3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3LzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gNTMxMGFiYmE4NjRjZmUzYThiNjVhZjEzMDcyOTQ0NzYwNDE5MGIyOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUdWUsIDI5IE5vdiAyMDExIDE3OjAzOjI3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGl3OiB2ZXJzaW9uLnNoOiBkb24ndCB1c2UgZ2l0IGRlc2NyaWJlIGZvciB2ZXJzaW9uaW5nCisKK0l0IHdpbGwgZGV0ZWN0IHRvcC1sZXZlbCBnaXQgcmVwb3NpdG9yaWVzIGxpa2UgdGhlIEFuZ3N0cm9tIHNldHVwLXNjcmlwdHMgYW5kIGJyZWFrLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKy0tLQorIHZlcnNpb24uc2ggfCAxNiArLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3ZlcnNpb24uc2ggYi92ZXJzaW9uLnNoCitpbmRleCAxMWQxMjRiLi41ZDQyM2M0IDEwMDc1NQorLS0tIGEvdmVyc2lvbi5zaAorKysrIGIvdmVyc2lvbi5zaAorQEAgLTMsMjEgKzMsNyBAQAorIFZFUlNJT049IjMuMTUiCisgT1VUPSIkMSIKKyAKKy1pZiBbIC1kIC5naXQgXSAmJiBoZWFkPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgMj4vZGV2L251bGxgOyB0aGVuCistCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC0tdW5tZXJnZWQgPiAvZGV2L251bGwKKy0JZGVzY3I9JChnaXQgZGVzY3JpYmUpCistCistCSMgb24gZ2l0IGJ1aWxkcyBjaGVjayB0aGF0IHRoZSB2ZXJzaW9uIG51bWJlciBhYm92ZQorLQkjIGlzIGNvcnJlY3QuLi4KKy0JWyAiJHtkZXNjciUlLSp9IiA9ICJ2JFZFUlNJT04iIF0gfHwgZXhpdCAyCistCistCXY9IiR7ZGVzY3Ijdn0iCistCWlmIGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQgfCByZWFkIGR1bW15IDsgdGhlbgorLQkJdj0iJHYiLWRpcnR5CistCWZpCistZWxzZQorLQl2PSIkVkVSU0lPTiIKKy1maQorK3Y9IiRWRVJTSU9OIgorIAorIGVjaG8gJyNpbmNsdWRlICJpdy5oIicgPiAiJE9VVCIKKyBlY2hvICJjb25zdCBjaGFyIGl3X3ZlcnNpb25bXSA9IFwiJHZcIjsiID4+ICIkT1VUIgorLS0gCisxLjcuNy4zCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3L3NlcGFyYXRlLW9iamRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvc2VwYXJhdGUtb2JqZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4M2Y4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3L3NlcGFyYXRlLW9iamRpci5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDllMjdmYzJlMWIzZGM4YzM2ZWY2YTUwMmVkZmZjM2EzZDg0ZDlkZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNzoyMzo0OCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBTdXBwb3J0IHNlcGFyYXRpb24gb2YgU1JDRElSIGFuZCBPQkpESVIKKworVHlwaWNhbCB1c2Ugb2YgVlBBVEggdG8gbG9jYXRlIHRoZSBzb3VyY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKworLS0tCisgTWFrZWZpbGUgICB8IDcgKysrKystLQorIHZlcnNpb24uc2ggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA1NDg1OTFhLi5kYThkMzNhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMSw1ICsxLDggQEAKKyBNQUtFRkxBR1MgKz0gLS1uby1wcmludC1kaXJlY3RvcnkKKyAKKytTUkNESVIgPz0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKKytPQkpESVIgPz0gJChQV0QpCisrVlBBVEggPSAkKFNSQ0RJUikKKyBQUkVGSVggPz0gL3VzcgorIFNCSU5ESVIgPz0gJChQUkVGSVgpL3NiaW4KKyBNQU5ESVIgPz0gJChQUkVGSVgpL3NoYXJlL21hbgorQEAgLTk1LDExICs5OCwxMSBAQCBWRVJTSU9OX09CSlMgOj0gJChmaWx0ZXItb3V0IHZlcnNpb24ubywgJChPQkpTKSkKKyB2ZXJzaW9uLmM6IHZlcnNpb24uc2ggJChwYXRzdWJzdCAlLm8sJS5jLCQoVkVSU0lPTl9PQkpTKSkgbmw4MDIxMS5oIGl3LmggTWFrZWZpbGUgXAorIAkJJCh3aWxkY2FyZCAuZ2l0L2luZGV4IC5naXQvcmVmcy90YWdzKQorIAlAJChOUSkgJyBHRU4gJyAkQAorLQkkKFEpLi92ZXJzaW9uLnNoICRACisrCSQoUSljZCAkKFNSQ0RJUikgJiYgLi92ZXJzaW9uLnNoICQoT0JKRElSKS8kQAorIAorICUubzogJS5jIGl3Lmggbmw4MDIxMS5oCisgCUAkKE5RKSAnIENDICAnICRACistCSQoUSkkKENDKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKKysJJChRKSQoQ0MpIC1JJChTUkNESVIpICQoQ0ZMQUdTKSAtYyAtbyAkQCAkPAorIAorIGlmZXEgKCQoSVdfQU5EUk9JRF9CVUlMRCksKQorIGl3OgkkKE9CSlMpCitkaWZmIC0tZ2l0IGEvdmVyc2lvbi5zaCBiL3ZlcnNpb24uc2gKK2luZGV4IDUzNTQzODMuLmZhOTU0Y2YgMTAwNzU1CistLS0gYS92ZXJzaW9uLnNoCisrKysgYi92ZXJzaW9uLnNoCitAQCAtNSw1ICs1LDUgQEAgT1VUPSIkMSIKKyAKKyB2PSIkVkVSU0lPTiIKKyAKKy1lY2hvICcjaW5jbHVkZSAiaXcuaCInID4gIiRPVVQiCisrZWNobyAnI2luY2x1ZGUgPGl3Lmg+JyA+ICIkT1VUIgorIGVjaG8gImNvbnN0IGNoYXIgaXdfdmVyc2lvbltdID0gXCIkdlwiOyIgPj4gIiRPVVQiCistLSAKKzIuMi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pd180LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYjBlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC4xLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAibmw4MDIxMSBiYXNlZCBDTEkgY29uZmlndXJhdGlvbiB1dGlsaXR5IGZvciB3aXJlbGVzcyBkZXZpY2VzIgorREVTQ1JJUFRJT04gPSAiaXcgaXMgYSBuZXcgbmw4MDIxMSBiYXNlZCBDTEkgY29uZmlndXJhdGlvbiB1dGlsaXR5IGZvciBcCit3aXJlbGVzcyBkZXZpY2VzLiBJdCBzdXBwb3J0cyBhbG1vc3QgYWxsIG5ldyBkcml2ZXJzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIFwKK3RvIHRoZSBrZXJuZWwgcmVjZW50bHkuICIKK0hPTUVQQUdFID0gImh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RvY3VtZW50YXRpb24vaXciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3ODYxOGE1YzRhZjI1ZTliOTNlZjBiZTFhOTNmNzc0IgorCitERVBFTkRTID0gImxpYm5sIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9pdy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VwYXJhdGUtb2JqZGlyLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjY4YzI4MjI4NWM3MWM5NTYwNjk5NTdlOWNhMTBhNmE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE0YmZjNjI3YjM3ZjdmNjA3ZTRmZmE2M2E3MGRlZDE1ZmEyZWE4NTE3N2Y3MDNjYjE3ZDdmZTM2ZjljOGYzM2QiCisKK2luaGVyaXQgcGtnY29uZmlnCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgLWYgJyR7U30vTWFrZWZpbGUnIFwKKyAgICBcCisgICAgJ1BSRUZJWD0ke3ByZWZpeH0nIFwKKyAgICAnU0JJTkRJUj0ke3NiaW5kaXJ9JyBcCisgICAgJ01BTkRJUj0ke21hbmRpcn0nIFwKKyIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjkzNmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJuc3MtbWRucy9saWJuc3MtbWRuc18wLjEwLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTmFtZSBTZXJ2aWNlIFN3aXRjaCBtb2R1bGUgZm9yIE11bHRpY2FzdCBETlMgKHplcm9jb25mKSBuYW1lIHJlc29sdXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9uc3MtbWRucy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK0RFUEVORFMgPSAiYXZhaGkiCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9uc3MtbWRucy9uc3MtbWRucy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMzkzOGYxNzY0NmVmYmI1MGFhNzBiYTVmOTlmNTFkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZTY4M2MyZTdjMzkyMTgxNDcwNmQ2MmZiYmQzZTljYmY0OTNhNzVmYTAwMjU1ZTBlNzE1NTA4ZDgxMzRmYTZkIgorCitTID0gIiR7V09SS0RJUn0vbnNzLW1kbnMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FQ09ORiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLWRpc2FibGUtbHlueCAtLWVuYWJsZS1hdmFoaSIKKworIyBzdXBwcmVzcyB3YXJuaW5nLCBidXQgZG9uJ3QgYm90aGVyIHdpdGggYXV0b25hbWVyCitMRUFEX1NPTkFNRSA9ICJsaWJuc3NfbWRucy5zbyIKK0RFQklBTk5BTUVfJHtQTn0gPSAibGlibnNzLW1kbnMiCisKK1JERVBFTkRTXyR7UE59ID0gImF2YWhpLWRhZW1vbiIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxtZG5zXD4vLycgXAorCQktZSAncy9cKF5ob3N0czouKlwpXChcPGZpbGVzXD5cKVwoLipcKVwoXDxkbnNcPlwpXCguKlwpL1wxXDIgbWRuczRfbWluaW1hbCBbTk9URk9VTkQ9cmV0dXJuXVwzXDQgbWRuc1w1LycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQorCitwa2dfcHJlcm1fJHtQTn0gKCkgeworCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG1kbnNcPi8vJyBcCisJCS1lICcvXmhvc3RzOi9zL1xzKm1kbnM0X21pbmltYWxcc1wrXFtOT1RGT1VORD1yZXR1cm5cXS8vJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3M2MyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwLmluYwpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIkludGVyZmFjZSBmb3IgdXNlci1sZXZlbCBuZXR3b3JrIHBhY2tldCBjYXB0dXJlIgorREVTQ1JJUFRJT04gPSAiTGlicGNhcCBwcm92aWRlcyBhIHBvcnRhYmxlIGZyYW1ld29yayBmb3IgbG93LWxldmVsIG5ldHdvcmsgXAorbW9uaXRvcmluZy4gIExpYnBjYXAgY2FuIHByb3ZpZGUgbmV0d29yayBzdGF0aXN0aWNzIGNvbGxlY3Rpb24sIFwKK3NlY3VyaXR5IG1vbml0b3JpbmcgYW5kIG5ldHdvcmsgZGVidWdnaW5nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudGNwZHVtcC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTUzMDY3JmF0aWQ9NDY5NTc3IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTFkNGIwMzY2NTU3OTUxYzg0YTk0ZmFiZTM1MjlmODY3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BjYXAuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT0zOWFmMzUxMGUwMTFmMzRiODg3MmYxMjBiMWRjMzFkMiIKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitJTkNfUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy50Y3BkdW1wLm9yZy9yZWxlYXNlLyR7QlB9LnRhci5neiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wY2FwLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBibHVldG9vdGgKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wY2FwPWxpbnV4IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tibHVlejRdID0gIi0tZW5hYmxlLWJsdWV0b290aCwtLWRpc2FibGUtYmx1ZXRvb3RoLGJsdWV6NCIKKyMgQWRkIGEgZHVtbXkgUEFDS0FHRUNPTkZJRyBmb3IgYmx1ZXo1IHNpbmNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgbGlicGNhcC4KK1BBQ0tBR0VDT05GSUdbYmx1ZXo1XSA9ICIsLCIKK1BBQ0tBR0VDT05GSUdbY2FudXNiXSA9ICItLWVuYWJsZS1jYW51c2IsLS1lbmFibGUtY2FudXNiPW5vLGxpYnVzYiIKK1BBQ0tBR0VDT05GSUdbZGJ1c10gPSAiLS1lbmFibGUtZGJ1cywtLWRpc2FibGUtZGJ1cyxkYnVzIgorUEFDS0FHRUNPTkZJR1tsaWJubF0gPSAiLS13aXRoLWxpYm5sLC0td2l0aG91dC1saWJubCxsaWJubCIKKworQ1BQRkxBR1NfcHJlcGVuZCA9ICItSSR7U30gIgorQ0ZMQUdTX3ByZXBlbmQgPSAiLUkke1N9ICIKK0NYWEZMQUdTX3ByZXBlbmQgPSAiLUkke1N9ICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisgICAgICAgIGNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorICAgIGZpCisgICAgc2VkIC1pIC1lJ3MsXlZfUlBBVEhfT1BUPS4qJCxWX1JQQVRIX09QVD0sJyAke1N9L3BjYXAtY29uZmlnLmluCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9hY2xvY2FsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvYWNsb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTUxOTgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvYWNsb2NhbC5wYXRjaApAQCAtMCwwICsxLDE2NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbGlicGNhcC0xLjEuMS1vcmlnL2FjbG9jYWwubTQgbGlicGNhcC0xLjEuMS9hY2xvY2FsLm00CistLS0gbGlicGNhcC0xLjEuMS1vcmlnL2FjbG9jYWwubTQJMjAxMC0wNi0yOSAxMDo0NjozMi44MTUxMTc1NjkgKzA4MDAKKysrKyBsaWJwY2FwLTEuMS4xL2FjbG9jYWwubTQJMjAxMC0wNi0yOSAxMDo0OToxNy4xNTAxNDk5NDkgKzA4MDAKK0BAIC0zNyw3ICszNyw3IEBACisgZG5sIEFDX0xCTF9DX0lOSVQuICBOb3csIHdlIHJ1biBBQ19MQkxfQ19JTklUX0JFRk9SRV9DQywgQUNfUFJPR19DQywKKyBkbmwgYW5kIEFDX0xCTF9DX0lOSVQgYXQgdGhlIHRvcCBsZXZlbC4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfQ19JTklUX0JFRk9SRV9DQywKKytBQ19ERUZVTihbQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0NdLAorIFsKKyAgICAgQUNfQkVGT1JFKFskMF0sIFtBQ19MQkxfQ19JTklUXSkKKyAgICAgQUNfQkVGT1JFKFskMF0sIFtBQ19QUk9HX0NDXSkKK0BAIC05MCw3ICs5MCw3IEBACisgZG5sICAgICBMREZMQUdTCisgZG5sICAgICBMQkxfQ0ZMQUdTCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0NfSU5JVCwKKytBQ19ERUZVTihbQUNfTEJMX0NfSU5JVF0sCisgWworICAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xCTF9GSVhJTkNMVURFU10pCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfTEJMX0RFVkVMXSkKK0BAIC0yMTcsNyArMjE3LDcgQEAKKyBkbmwJVl9TT05BTUVfT1BUCisgZG5sCVZfUlBBVEhfT1BUCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1NITElCU19JTklULAorK0FDX0RFRlVOKFtBQ19MQkxfU0hMSUJTX0lOSVRdLAorICAgICBbQUNfUFJFUkVRKDIuNTApCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorIAkgICAgIworQEAgLTM2MSw3ICszNjEsNyBAQAorICMgTWFrZSBzdXJlIHdlIHVzZSB0aGUgVl9DQ09QVCBmbGFncywgYmVjYXVzZSBzb21lIG9mIHRob3NlIG1pZ2h0CisgIyBkaXNhYmxlIGlubGluaW5nLgorICMKKy1BQ19ERUZVTihBQ19MQkxfQ19JTkxJTkUsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOTElORV0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlubGluZSkKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIENGTEFHUz0iJFZfQ0NPUFQiCitAQCAtNDA3LDcgKzQwNyw3IEBACisgZG5sCisgZG5sCUFDX0xCTF9GSVhJTkNMVURFUworIGRubAorLUFDX0RFRlVOKEFDX0xCTF9GSVhJTkNMVURFUywKKytBQ19ERUZVTihbQUNfTEJMX0ZJWElOQ0xVREVTXSwKKyAgICAgW2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorIAkgICAgQUNfTVNHX0NIRUNLSU5HKGZvciBBTlNJIGlvY3RsIGRlZmluaXRpb25zKQorIAkgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9nY2NfZml4aW5jbHVkZXMsCitAQCAtNDUzLDcgKzQ1Myw3IEBACisgZG5sCSQyICh5YWNjIGFwcGVuZGVkKQorIGRubAkkMyAob3B0aW9uYWwgZmxleCBhbmQgYmlzb24gLVAgcHJlZml4KQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9MRVhfQU5EX1lBQ0MsCisrQUNfREVGVU4oW0FDX0xCTF9MRVhfQU5EX1lBQ0NdLAorICAgICBbQUNfQVJHX1dJVEgoZmxleCwgWyAgLS13aXRob3V0LWZsZXggICAgICAgICAgZG9uJ3QgdXNlIGZsZXhdKQorICAgICBBQ19BUkdfV0lUSChiaXNvbiwgWyAgLS13aXRob3V0LWJpc29uICAgICAgICAgZG9uJ3QgdXNlIGJpc29uXSkKKyAgICAgaWYgdGVzdCAiJHdpdGhfZmxleCIgPSBubyA7IHRoZW4KK0BAIC01MDYsNyArNTA2LDcgQEAKKyBkbmwKKyBkbmwJREVDTFdBSVRTVEFUVVMgKGRlZmluZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1VOSU9OX1dBSVQsCisrQUNfREVGVU4oW0FDX0xCTF9VTklPTl9XQUlUXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB1bmlvbiB3YWl0IGlzIHVzZWQpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfdW5pb25fd2FpdCwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTUzNSw3ICs1MzUsNyBAQAorIGRubAorIGRubAlIQVZFX1NPQ0tBRERSX1NBX0xFTiAoZGVmaW5lZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfU09DS0FERFJfU0FfTEVOLAorK0FDX0RFRlVOKFtBQ19MQkxfU09DS0FERFJfU0FfTEVOXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiBzb2NrYWRkciBzdHJ1Y3QgaGFzIHRoZSBzYV9sZW4gbWVtYmVyKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX3NvY2thZGRyX2hhc19zYV9sZW4sCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC01NjAsNyArNTYwLDcgQEAKKyBkbmwKKyBkbmwJSEFWRV9TT0NLQUREUl9TVE9SQUdFIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9TT0NLQUREUl9TVE9SQUdFLAorK0FDX0RFRlVOKFtBQ19MQkxfU09DS0FERFJfU1RPUkFHRV0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHJfc3RvcmFnZSBzdHJ1Y3QgZXhpc3RzKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX2hhc19zb2NrYWRkcl9zdG9yYWdlLAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtNTkzLDcgKzU5Myw3IEBACisgZG5sIHdvbid0IGJlIHVzaW5nIGNvZGUgdGhhdCB3b3VsZCB1c2UgdGhhdCBtZW1iZXIsIG9yIHdlIHdvdWxkbid0CisgZG5sIGNvbXBpbGUgaW4gYW55IGNhc2UpLgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9IUF9QUEFfSU5GT19UX0RMX01PRFVMRV9JRF8xLAorK0FDX0RFRlVOKFtBQ19MQkxfSFBfUFBBX0lORk9fVF9ETF9NT0RVTEVfSURfMV0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgZGxfaHBfcHBhX2luZm9fdCBzdHJ1Y3QgaGFzIGRsX21vZHVsZV9pZF8xIG1lbWJlcikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9kbF9ocF9wcGFfaW5mb190X2hhc19kbF9tb2R1bGVfaWRfMSwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTYxOSw3ICs2MTksNyBAQAorIGRubAorIGRubAlhY19jdl9sYmxfaGF2ZV9ydW5fcGF0aCAoeWVzIG9yIG5vKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9IQVZFX1JVTl9QQVRILAorK0FDX0RFRlVOKFtBQ19MQkxfSEFWRV9SVU5fUEFUSF0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoZm9yICR7Q0MtY2N9IC1SKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX2hhdmVfcnVuX3BhdGgsCisgCVtlY2hvICdtYWluKCl7fScgPiBjb25mdGVzdC5jCitAQCAtNjQ0LDcgKzY0NCw3IEBACisgZG5sCisgZG5sCUxCTF9BTElHTiAoREVGSU5FRCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfVU5BTElHTkVEX0FDQ0VTUywKKytBQ19ERUZVTihbQUNfTEJMX1VOQUxJR05FRF9BQ0NFU1NdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHVuYWxpZ25lZCBhY2Nlc3NlcyBmYWlsKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsLAorIAlbY2FzZSAiJGhvc3RfY3B1IiBpbgorQEAgLTc0OSw3ICs3NDksNyBAQAorIGRubAlIQVZFX09TX1BST1RPX0ggKGRlZmluZWQpCisgZG5sCW9zLXByb3RvLmggKHN5bWxpbmtlZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfREVWRUwsCisrQUNfREVGVU4oW0FDX0xCTF9ERVZFTF0sCisgICAgIFtybSAtZiBvcy1wcm90by5oCisgICAgIGlmIHRlc3QgIiR7TEJMX0NGTEFHUytzZXR9IiA9IHNldDsgdGhlbgorIAkgICAgJDE9IiQkMSAke0xCTF9DRkxBR1N9IgorQEAgLTg4Niw3ICs4ODYsNyBAQAorIGRubCBzdGF0aWNhbGx5IGFuZCBoYXBwZW4gdG8gaGF2ZSBhIGxpYnJlc29sdi5hIGx5aW5nIGFyb3VuZCAoYW5kIG5vCisgZG5sIGxpYm5zbC5hKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTElCUkFSWV9ORVQsIFsKKytBQ19ERUZVTihbQUNfTEJMX0xJQlJBUllfTkVUXSwgWworICAgICAjIE1vc3Qgb3BlcmF0aW5nIHN5c3RlbXMgaGF2ZSBnZXRob3N0YnluYW1lKCkgaW4gdGhlIGRlZmF1bHQgc2VhcmNoZWQKKyAgICAgIyBsaWJyYXJpZXMgKGkuZS4gbGliYyk6CisgICAgICMgU29tZSBPU2VzIChlZy4gU29sYXJpcykgcGxhY2UgaXQgaW4gbGlibnNsCitAQCAtOTA5LDcgKzkwOSw3IEBACisgZG5sIFRlc3QgZm9yIF9fYXR0cmlidXRlX18KKyBkbmwKKyAKKy1BQ19ERUZVTihBQ19DX19fQVRUUklCVVRFX18sIFsKKytBQ19ERUZVTihbQUNfQ19fX0FUVFJJQlVURV9fXSwgWworIEFDX01TR19DSEVDS0lORyhmb3IgX19hdHRyaWJ1dGVfXykKKyBBQ19DQUNIRV9WQUwoYWNfY3ZfX19hdHRyaWJ1dGVfXywgWworIEFDX0NPTVBJTEVfSUZFTFNFKAorQEAgLTk0Nyw3ICs5NDcsNyBAQAorIGRubAorIGRubCAtU2NvdHQgQmFycm9uCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1RQQUNLRVRfU1RBVFMsCisrQUNfREVGVU4oW0FDX0xCTF9UUEFDS0VUX1NUQVRTXSwKKyAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGlmX3BhY2tldC5oIGhhcyB0cGFja2V0X3N0YXRzIGRlZmluZWQpCisgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF90cGFja2V0X3N0YXRzLAorICAgIEFDX1RSWV9DT01QSUxFKFsKK0BAIC05NzYsNyArOTc2LDcgQEAKKyBkbmwgZG9lc24ndCBoYXZlIHRoYXQgbWVtYmVyICh3aGljaCBpcyBPSywgYXMgZWl0aGVyIHdlIHdvbid0IGJlIHVzaW5nCisgZG5sIGNvZGUgdGhhdCB3b3VsZCB1c2UgdGhhdCBtZW1iZXIsIG9yIHdlIHdvdWxkbid0IGNvbXBpbGUgaW4gYW55IGNhc2UpLgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9MSU5VWF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0ksCisrQUNfREVGVU4oW0FDX0xCTF9MSU5VWF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0ldLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHRwYWNrZXRfYXV4ZGF0YSBzdHJ1Y3QgaGFzIHRwX3ZsYW5fdGNpIG1lbWJlcikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9kbF9ocF9wcGFfaW5mb190X2hhc19kbF9tb2R1bGVfaWRfMSwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTEwMDMsNyArMTAwMyw3IEBACisgZG5sIAorIGRubCAJSEFWRV9ETFBJX1BBU1NJVkUgKGRlZmluZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0RMX1BBU1NJVkVfUkVRX1QsCisrQUNfREVGVU4oW0FDX0xCTF9ETF9QQVNTSVZFX1JFUV9UXSwKKyAgICAgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgZGxfcGFzc2l2ZV9yZXFfdCBzdHJ1Y3QgZXhpc3RzKQorICAgICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX2hhc19kbF9wYXNzaXZlX3JlcV90LAorICAgICAgICAgICAgICAgICBBQ19UUllfQ09NUElMRShbCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvbGlicGNhcC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODYxNTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvbGlicGNhcC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDcxIEBACitGcm9tIDg4ODcxMzJlODU4OTJhNzJhODRjYTM4NzhlNjBmMjU0YWQyY2U5MzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb2UgTWFjRG9uYWxkIDxqb2VfbWFjZG9uYWxkQG1lbnRvci5jb20+CitEYXRlOiBUdWUsIDI0IEZlYiAyMDE1IDE1OjU2OjA2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYnBjYXA6IHBrZ2NvbmZpZyBzdXBwb3J0CisKK0FkZGluZyBiYXNpYyBzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBwa2ctY29uZmlnLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb2UgTWFjRG9uYWxkIDxqb2VfbWFjZG9uYWxkQG1lbnRvci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiAgIHwgIDUgKysrKysKKyBjb25maWd1cmUuaW4gIHwgIDEgKworIGxpYnBjYXAucGMuaW4gfCAxMCArKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnBjYXAucGMuaW4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDFjMmQ3NDUuLjFmMjVmYWYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC02MCw2ICs2MCwxMCBAQCBWX1JQQVRIX09QVCA9IEBWX1JQQVRIX09QVEAKKyBERVBFTkRFTkNZX0NGTEFHID0gQERFUEVOREVOQ1lfQ0ZMQUdACisgUFJPRz1saWJwY2FwCisgCisrIyBwa2djb25maWcgc3VwcG9ydAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGxpYnBjYXAucGMKKysKKyAjIFN0YW5kYXJkIENGTEFHUworIEZVTExfQ0ZMQUdTID0gJChDQ09QVCkgJChJTkNMUykgJChERUZTKSAkKENGTEFHUykKKyAKK0BAIC0yNzUsNiArMjc5LDcgQEAgRVhUUkFfRElTVCA9IFwKKyAJbGJsL29zLXNvbGFyaXMyLmggXAorIAlsYmwvb3Mtc3Vub3M0LmggXAorIAlsYmwvb3MtdWx0cml4NC5oIFwKKysJbGlicGNhcC5wYyBcCisgCW1pc3Npbmcvc25wcmludGYuYyBcCisgCW1rZGVwIFwKKyAJbXNkb3MvYmluMmMuYyBcCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCA4ZjVjODZiLi5mYjUxYjM1IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0xNzAwLDYgKzE3MDAsNyBAQCBlc2FjCisgQUNfUFJPR19JTlNUQUxMCisgCisgQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfRklMRVMoW2xpYnBjYXAucGNdKQorIAorIEFDX09VVFBVVF9DT01NQU5EUyhbaWYgdGVzdCAtZiAuZGV2ZWw7IHRoZW4KKyAJZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oCitkaWZmIC0tZ2l0IGEvbGlicGNhcC5wYy5pbiBiL2xpYnBjYXAucGMuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40Zjc4YWQ4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJwY2FwLnBjLmluCitAQCAtMCwwICsxLDEwIEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogbGlicGNhcAorK0Rlc2NyaXB0aW9uOiBTeXN0ZW0taW5kZXBlbmRlbnQgaW50ZXJmYWNlIGZvciB1c2VyLWxldmVsIHBhY2tldCBjYXB0dXJlLgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1scGNhcAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwXzEuNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXBfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExNTQzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwXzEuNi4yLmJiCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgbGlicGNhcC5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2FjbG9jYWwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2xpYnBjYXAtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNWYxNDE5MWMxYTY4NGE3NTUzMmM3MzljMmM0MDU5ZmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWRiM2UyOTk4ZjFlZWJhMmM3NmRhNTVkYTVkNDc0MjQ4ZmUxOWM0NGY0OWUxNWNhYzhhNzk2YTJjN2UxOTY5MCIKKworIworIyBtYWtlIGluc3RhbGwgZG9lc24ndCBjb3ZlciB0aGUgc2hhcmVkIGxpYgorIyBtYWtlIGluc3RhbGwtc2hhcmVkIGlzIGp1c3QgYnJva2VuIChubyBzeW1saW5rcykKKyMKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICNyZW1vdmUgaGFyZGNvZGVkIHJlZmVyZW5jZXMgdG8gL3Vzci9pbmNsdWRlCisgICAgc2VkICdzfFwoWyAiXidcJydJXVwrXCkvdXNyL2luY2x1ZGUvfFwxJHtTVEFHSU5HX0lOQ0RJUn0vfGcnIC1pICR7U30vY29uZmlndXJlLmluCit9CisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgb2VfcnVubWFrZSBpbnN0YWxsLXNoYXJlZCBERVNURElSPSR7RH0KKyAgICBvZV9saWJpbnN0YWxsIC1hIC1zbyBsaWJwY2FwICR7RH0ke2xpYmRpcn0KKyAgICBzZWQgInN8QFZFUlNJT05AfCR7UFZ9fCIgLWkgJHtCfS9saWJwY2FwLnBjCisgICAgaW5zdGFsbCAtRCAtbSAwNjQ0IGxpYnBjYXAucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbGlicGNhcC5wYworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mb19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZjJiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mb19naXQuYmIKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJNb2JpbGUgQnJvYWRiYW5kIFNlcnZpY2UgUHJvdmlkZXIgRGF0YWJhc2UiCitTRUNUSU9OID0gIm5ldHdvcmsiCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc5NjQ1NzliMmE4ZWNlNGJjNjc0NGQyZGM5YThiMDQiCitTUkNSRVYgPSAiZDA2ZWJkMzE0YTdjZGQwODdkMzhlNDk2NmMxOWRlNDJjOGM1NTI0NiIKK1BWID0gIjIwMTQwNjE4K2dpdHIke1NSQ1BWfSIKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZy9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8iCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL01ha2VmaWxlLmFtLWRvLW5vdC1zaGlwLXZlcnNpb24uaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjg3NWUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSBiZmQzMmQ2OGNmYzlmMWUzMWRhYjg4ZTA3NDQ2ZDFjMDJiYzgwYjVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDEyIEZlYiAyMDE1IDAwOjM5OjI5IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlLmFtOiBkbyBub3Qgc2hpcCB2ZXJzaW9uLmgKKworVGhlIEhFQURFUlMnIG5hbWUgaGFzIGJlZW4gY2hhbmdlZCB0byBwa2dpbmNsdWRlX0hFQURFUlMsIHNvIHVzZQorbm9kaXN0X3BrZ2luY2x1ZGVfSEVBREVSUywgb3RoZXJ3aXNlIHZlcnNpb24uaCB3b3VsZCBiZSBzaGlwcGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5hbSB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzMzM0NzkwLi42OWNkNThmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTAsMTEgKzEwLDExIEBAIHBrZ2luY2x1ZGVfSEVBREVSUyA9IGluY2x1ZGUvdHlwZXMuaCBpbmNsdWRlL2xvZy5oIGluY2x1ZGUvcGx1Z2luLmggXAorIAkJCWluY2x1ZGUvdGx2LmggaW5jbHVkZS9zZXR0aW5nLmggaW5jbHVkZS9kZXZpY2UuaCBcCisgCQkJaW5jbHVkZS9uZmNfY29weS5oIGluY2x1ZGUvc25lcC5oCisgCistbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGluY2x1ZGUvdmVyc2lvbi5oCisrbm9kaXN0X3BrZ2luY2x1ZGVfSEVBREVSUyA9IGluY2x1ZGUvdmVyc2lvbi5oCisgCisgbm9pbnN0X0hFQURFUlMgPSBpbmNsdWRlL2RidXMuaAorIAorLWxvY2FsX2hlYWRlcnMgPSAkKGZvcmVhY2ggZmlsZSwkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChub2Rpc3RfaW5jbHVkZV9IRUFERVJTKSBcCisrbG9jYWxfaGVhZGVycyA9ICQoZm9yZWFjaCBmaWxlLCQocGtnaW5jbHVkZV9IRUFERVJTKSAkKG5vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMpIFwKKyAJCQkkKG5vaW5zdF9IRUFERVJTKSwgaW5jbHVkZS9uZWFyLyQobm90ZGlyICQoZmlsZSkpKQorIAorIGdkYnVzX3NvdXJjZXMgPSBnZGJ1cy9nZGJ1cy5oIGdkYnVzL21haW5sb29wLmMgZ2RidXMvd2F0Y2guYyBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL01ha2VmaWxlLmFtLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjYwNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA0M2FjYzU2ZDU1MDZjN2UzMThmNzE3ZmIzNjM0YmMxNmUzNDM4OTEzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDE1IEphbiAyMDE1IDE4OjEyOjA3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlLmFtOiBmaXggcGFyYWxsZWwgaXNzdWUKKworVGhlcmUgbWlnaHQgYmUgbm8gc3JjIGRpciBpZiBzcmMvYnVpbHRpbi5oIHJ1bnMgZWFybGllciwgY3JlYXRlIGl0IHRvCitmaXggdGhlIHJhY2UgaXNzdWU6CisKK3NyYy9nZW5idWlsdGluIG5mY3R5cGUxIG5mY3R5cGUyIG5mY3R5cGUzIG5mY3R5cGU0IHAycCA+IHNyYy9idWlsdGluLmgKKy9iaW4vc2g6IHNyYy9idWlsdGluLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDMyNDEzMTEuLmE0M2VhYTIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xNjQsNiArMTY0LDcgQEAgTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbiBcCisgc3JjL3BsdWdpbi4kKE9CSkVYVCk6IHNyYy9idWlsdGluLmgKKyAKKyBzcmMvYnVpbHRpbi5oOiBzcmMvZ2VuYnVpbHRpbiAkKGJ1aWx0aW5fc291cmNlcykKKysJJChBTV9WX2F0KSQoTUtESVJfUCkgc3JjCisgCSQoQU1fVl9HRU4pJChzcmNkaXIpL3NyYy9nZW5idWlsdGluICQoYnVpbHRpbl9tb2R1bGVzKSA+ICRACisgCisgJChzcmNfbmVhcmRfT0JKRUNUUykgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvbmVhcmQuaW4gYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL25lYXJkLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2Q0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL25lYXJkLmluCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorIworIyBzdGFydC9zdG9wIG5lYXJkIGRhZW1vbi4KKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmVhcmQKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUyAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTkZDIGRhZW1vbgorIyBEZXNjcmlwdGlvbjogICAgICAgbmVhcmQgaXMgYSBkYWVtb24gdXNlZCB0byBlbmFibGUgTkZDIGZlYXR1cmVzCisjIyMgRU5EIElOSVQgSU5GTworCitEQUVNT049QGluc3RhbGxwYXRoQC9uZWFyZAorUElERklMRT0vdmFyL3J1bi9uZWFyZC5waWQKK0RFU0M9IkxpbnV4IE5GQyBkYWVtb24iCisKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L25lYXJkIF0gOyB0aGVuCisJLiAvZXRjL2RlZmF1bHQvbmVhcmQKK2ZpCisKK3NldCAtZQorCitkb19zdGFydCgpIHsKKwkkREFFTU9OCit9CisKK2RvX3N0b3AoKSB7CisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBuZWFyZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkZjcwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmRfMC4xNS5iYgpAQCAtMCwwICsxLDYxIEBACitTVU1NQVJZID0gIkxpbnV4IE5GQyBkYWVtb24iCitERVNDUklQVElPTiA9ICJBIGRhZW1vbiBmb3IgdGhlIExpbnV4IE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiBzdGFjayIKK0hPTUVQQUdFID0gImh0dHA6Ly8wMS5vcmcvbGludXgtbmZjIgorTElDRU5TRSA9ICJHUEx2MiIKKworREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIGxpYm5sIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay9uZmMvJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL25lYXJkLmluIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmFtLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNzQ2Y2U2MmVlZWY4OGU4ZGU5MDc2NWUwMGE3NWExYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NTFmNjUxM2QzMmNkYWY4YTQyNjI1NWQwM2FmZjM4YTY2MjBhODliMDU2N2VjMmIzNjYwNmM2MzMwYTkzMzUzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgZmlsZTovL3NyYy9uZWFyLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9MzU4ZTRkZWVmZWYyNTFhNDc2MWUxZmZhY2M5NjVkMTMgXAorICIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgYmx1ZXRvb3RoCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZCAtLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8gLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vdXNlci8sLS1kaXNhYmxlLXN5c3RlbWQiCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtdG9vbHMiCisKKyMgVGhpcyB3b3VsZCBjb3B5IG5lYXJkIHN0YXJ0LXN0b3Agc2hlbGwgYW5kIHRlc3Qgc2NyaXB0cworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCQlzZWQgInM6QGluc3RhbGxwYXRoQDoke2xpYmV4ZWNkaXJ9L25mYzoiICR7V09SS0RJUn0vbmVhcmQuaW4gXAorCQkgID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25lYXJkCisJCWNobW9kIDA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25lYXJkCisJZmkKKworCSMgSW5zdGFsbCB0aGUgdGVzdHMgZm9yIG5lYXJkLXRlc3RzCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L25lYXJkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vdGVzdC8qICR7RH0ke2xpYmRpcn0vJHtCUE59LworCWluc3RhbGwgLW0gMDc1NSAke0J9L3Rvb2xzL25mY3Rvb2wvbmZjdG9vbCAke0R9JHtsaWJkaXJ9LyR7QlBOfS8KK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzIgorCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vJHtCUE59LyotdGVzdCIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLy5kZWJ1ZyIKKworUkRFUEVORFNfJHtQTn0gPSAiZGJ1cyBweXRob24gcHl0aG9uLWRidXMgcHl0aG9uLXB5Z29iamVjdCIKKworIyBCbHVleiAmIFdpZmkgYXJlIG5vdCBtYW5kYXRvcnkgZXhjZXB0IGZvciBoYW5kb3ZlcgorUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsJ3dwYS1zdXBwbGljYW50JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0tdGVzdHMgPSAicHl0aG9uIHB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJuZWFyZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIDY0IgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmVhcmQuc2VydmljZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2ZpbGVzL25mcy11dGlscy1kZWJpYW5pemUtc3RhcnQtc3RhdGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9maWxlcy9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDAyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9maWxlcy9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1tQQVRDSF0gbmZzLXV0aWxzOiBkZWJpYW5pemUgc3RhcnQtc3RhdGQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK21ha2Ugc3RhcnQtc3RhdGQgY29tbWFuZCB0byB1c2UgbmZzY29tbW9uIGNvbmZpZ3VyZSwgdG9vLgorCitTaWduZWQtb2ZmLWJ5OiBIZW5yaWsgUmlvbWFyIDxoZW5yaWsucmlvbWFyQGVyaWNzc29uLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQgfCA5ICsrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkIGIvdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQKK2luZGV4IGVjOTM4M2IuLjM5NjliOGMgMTAwNzU1CistLS0gYS91dGlscy9zdGF0ZC9zdGFydC1zdGF0ZAorKysrIGIvdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQKK0BAIC02LDYgKzYsMTMgQEAKKyAjIHNpdGUuCisgUEFUSD0iL3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW4iCisgCisrIyBSZWFkIGNvbmZpZworK0RFRkFVTFRGSUxFPS9ldGMvZGVmYXVsdC9uZnMtY29tbW9uCisrTkVFRF9JRE1BUEQ9CisraWYgWyAtZiAkREVGQVVMVEZJTEUgXTsgdGhlbgorKyAgICAuICRERUZBVUxURklMRQorK2ZpCisrCisgIyBGaXJzdCB0cnkgc3lzdGVtZCBpZiBpdCdzIGluc3RhbGxlZC4KKyBpZiBzeXN0ZW1jdGwgLS1oZWxwID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAjIFF1aXQgb25seSBpZiB0aGUgY2FsbCB3b3JrZWQuCitAQCAtMTMsNCArMjAsNCBAQCBpZiBzeXN0ZW1jdGwgLS1oZWxwID4vZGV2L251bGwgMj4mMTsgdGhlbgorIGZpCisgCisgIyBGYWxsIGJhY2sgdG8gbGF1bmNoaW5nIGl0IG91cnNlbHZlcy4KKy1leGVjIHJwYy5zdGF0ZCAtLW5vLW5vdGlmeQorK2V4ZWMgcnBjLnN0YXRkIC0tbm8tbm90aWZ5ICRTVEFURE9QVFMKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzUyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWdldHRpbmctdV8tdHlwZWRlZnMucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSBhNWU5NWE0MmU3YmNlZGRjOWVjYWQwNjY5NGMxYTA1ODhmNGJhZmM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMTQgQXByIDIwMTUgMDc6MjI6NDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgZ2V0dGluZyB1XyogdHlwZWRlZnMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBjZmcuaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY2ZnLmggYi9jZmcuaAoraW5kZXggZDRkNGNhYi4uZmU0OWU4ZiAxMDA2NDQKKy0tLSBhL2NmZy5oCisrKysgYi9jZmcuaAorQEAgLTMzLDYgKzMzLDcgQEAKKyAjaWZuZGVmIF9DT05GX0hfCisgI2RlZmluZSBfQ09ORl9IXworIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSAicXVldWUuaCIKKyAKKyBzdHJ1Y3QgY29uZl9saXN0X25vZGUgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzM2RhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL1NldF9ub2JvZHlfdXNlcl9ncm91cC5wYXRjaApAQCAtMCwwICsxLDE4IEBACitTZXQgbm9ib2R5IHVzZXIgYW5kIGdyb3VwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tIGEvaWRtYXBkLmNvbmYKKysrKyBiL2lkbWFwZC5jb25mCitAQCAtMTcsOCArMTcsOCBAQAorIAorIFtNYXBwaW5nXQorIAorLSNOb2JvZHktVXNlciA9IG5vYm9keQorLSNOb2JvZHktR3JvdXAgPSBub2JvZHkKKytOb2JvZHktVXNlciA9IG5vYm9keQorK05vYm9keS1Hcm91cCA9IG5vZ3JvdXAKKyAKKyBbVHJhbnNsYXRpb25dCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9maXgtYWMtcHJlcmVxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvZml4LWFjLXByZXJlcS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODFjN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvZml4LWFjLXByZXJlcS5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMSw3ICsxLDcgQEAKKyAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisgIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorIAorLUFDX1BSRVJFUShbMi42OF0pCisrQUNfUFJFUkVRKFsyLjY1XSkKKyBBQ19JTklUKFtsaWJuZnNpZG1hcF0sWzAuMjVdLFtsaW51eC1uZnNAdmdlci5rZXJuZWwub3JnXSkKKyBBQ19DT05GSUdfU1JDRElSKFtuZnNpZG1hcC5oXSkKKyBBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcF8wLjI1LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXBfMC4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjU3OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXBfMC4yNS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIk5GUyBpZCBtYXBwaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNpdGkudW1pY2guZWR1L3Byb2plY3RzL25mc3Y0L2xpbnV4LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kOWM2YTJhMGNhNjAxN2ZkYTdjZDkwNWVkMjczOWIzNyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNpdGkudW1pY2guZWR1L3Byb2plY3RzL25mc3Y0L2xpbnV4L2xpYm5mc2lkbWFwLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWFjLXByZXJlcS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYWM0ODkzYzkyNzE2YWRkMWExNDQ3YWUwMWRmNzdhYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NTZkMjQ1ZDg0NDAwZTEwMzBmOGY0MGE1YTI3ZGE3NjM3MDY5MGM0YTkzMmJhZjI0OTExMGYwNDdmZTdlZmNmIgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWxkYXAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyR7QlBOfS0ke1BWfS9pZG1hcGQuY29uZiAke0R9JHtzeXNjb25mZGlyfS9pZG1hcGQuY29uZgorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtY29uZmlndXJlLUFsbG93LXRvLWV4cGxpY2l0bHktZGlzYWJsZS1uZnNpZG1hcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI1ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtY29uZmlndXJlLUFsbG93LXRvLWV4cGxpY2l0bHktZGlzYWJsZS1uZnNpZG1hcC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDliODRjZmYzMDU4NjZhYmQxNTBjZjFhNGM2ZTdlNWViZjhhN2ViM2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDE1IE5vdiAyMDEzIDIzOjIxOjM1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogQWxsb3cgdG8gZXhwbGljaXRseSBkaXNhYmxlIG5mc2lkbWFwCisKKyoga2V5dXRpbHMgYXZhaWxhYmlsaXR5IGlzIGF1dG9kZXRlY3RlZCBhbmQgYnVpbGRzIGFyZW4ndCByZXByb2R1Y2libGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDEwICsrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJmNDMzZDYuLjI4YThmNjIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY5LDYgKzY5LDEyIEBAIEFDX0FSR19FTkFCTEUobmZzdjQsCisgCUFDX1NVQlNUKGVuYWJsZV9uZnN2NCkKKyAJQU1fQ09ORElUSU9OQUwoQ09ORklHX05GU1Y0LCBbdGVzdCAiJGVuYWJsZV9uZnN2NCIgPSAieWVzIl0pCisgCisrQUNfQVJHX0VOQUJMRShuZnNpZG1hcCwKKysgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmZzaWRtYXBdLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgc3VwcG9ydCBmb3IgTkZTdjQgaWRtYXBwZXIgQDw6QGRlZmF1bHQ9eWVzQDo+QF0pXSwKKysgICAgICAgIGVuYWJsZV9uZnNpZG1hcD0kZW5hYmxldmFsLAorKyAgICAgICAgZW5hYmxlX25mc2lkbWFwPXllcykKKysKKyBBQ19BUkdfRU5BQkxFKG5mc3Y0MSwKKyAJW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uZnN2NDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgc3VwcG9ydCBmb3IgTkZTdjQxIEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCitAQCAtMjk2LDcgKzMwMiw3IEBAIGZpCisgCisgZG5sIGVuYWJsZSBuZnNpZG1hcCB3aGVuIGl0cyBzdXBwb3J0IGJ5IGxpYm5mc2lkbWFwCisgQU1fQ09ORElUSU9OQUwoQ09ORklHX05GU0RDTFRSQUNLLCBbdGVzdCAiJGVuYWJsZV9uZnNkY2x0cmFjayIgPSAieWVzIiBdKQorLUFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNJRE1BUCwgW3Rlc3QgIiRhY19jdl9oZWFkZXJfa2V5dXRpbHNfaCRhY19jdl9saWJfbmZzaWRtYXBfbmZzNF9vd25lcl90b191aWQiID0gInllc3llcyJdKQorK0FNX0NPTkRJVElPTkFMKENPTkZJR19ORlNJRE1BUCwgW3Rlc3QgIiRlbmFibGVfbmZzaWRtYXAkYWNfY3ZfaGVhZGVyX2tleXV0aWxzX2gkYWNfY3ZfbGliX25mc2lkbWFwX25mczRfb3duZXJfdG9fdWlkIiA9ICJ5ZXN5ZXN5ZXMiXSkKKyAKKyAKKyBpZiB0ZXN0ICIka25mc2RfY3ZfZ2xpYmMyIiA9IG5vOyB0aGVuCistLSAKKzEuOC40LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1tb3VudGQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtbW91bnRkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzZGRjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtbW91bnRkLnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ORlMgTW91bnQgRGFlbW9uCitBZnRlcj1ycGNiaW5kLnNlcnZpY2UgbmZzLXNlcnZlci5zZXJ2aWNlCitSZXF1aXJlcz1ycGNiaW5kLnNlcnZpY2UgbmZzLXNlcnZlci5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvbmZzLXV0aWxzLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjLm1vdW50ZCAtRiAkTU9VTlREX09QVFMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zZXJ2ZXIuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc2VydmVyLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3ZDdhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc2VydmVyLnNlcnZpY2UKQEAgLTAsMCArMSwxOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ORlMgU2VydmVyCitSZXF1aXJlcz1ycGNiaW5kLnNlcnZpY2UgbmZzLW1vdW50ZC5zZXJ2aWNlCitBZnRlcj1ycGNiaW5kLnNlcnZpY2UKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL25mcy11dGlscy5jb25mCitFeGVjU3RhcnRQcmU9QFNCSU5ESVJAL2V4cG9ydGZzIC1yCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwYy5uZnNkICRORlNEX09QVFMgJE5GU0RfQ09VTlQKK0V4ZWNTdG9wPUBTQklORElSQC9ycGMubmZzZCAwCitFeGVjU3RvcFBvc3Q9QFNCSU5ESVJAL2V4cG9ydGZzIC1mCitFeGVjUmVsb2FkPUBTQklORElSQC9leHBvcnRmcyAtcgorU3RhbmRhcmRFcnJvcj1zeXNsb2cKK1JlbWFpbkFmdGVyRXhpdD15ZXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NmRhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXN0YXRkLnNlcnZpY2UKQEAgLTAsMCArMSwxMiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ORlMgZmlsZSBsb2NraW5nIHNlcnZpY2UKK0FmdGVyPXJwY2JpbmQuc2VydmljZQorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlCitCZWZvcmU9cmVtb3RlLWZzLXByZS50YXJnZXQKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9uZnMtdXRpbHMuY29uZgorRXhlY1N0YXJ0PUBTQklORElSQC9ycGMuc3RhdGQgLUYgJFNUQVREX09QVFMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLTEuMi4zLXNtLW5vdGlmeS1yZXNfaW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGY4MTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRml4ZXMgZXJyb3JzIGxpa2UKK3NtLW5vdGlmeVsxMDcwXTogRE5TIHJlc29sdXRpb24gb2YgYS5iLmMuZC4uY29tIGZhaWxlZDsgcmV0cnlpbmcgbGF0ZXIKK1RoaXMgZXJyb3Igd2lsbCBvY2N1ciBhbnl0aW1lIHNtLW5vdGlmeSBpcyBydW4gYmVmb3JlIHRoZSBuZXR3b3JrIGlmIGZ1bGx5IHVwLAord2hpY2ggaXMgaGFwcGVuaW5nIG1vcmUgYW5kIG1vcmUgd2l0aCBwYXJhbGxlbCBzdGFydHVwIHN5c3RlbXMuCitUaGUgcmVzX2luaXQoKSBjYWxsIGlzIHNpbXBsZSwgc2FmZSwgcXVpY2ssIGFuZCBhIHBhdGNoIHRvIHVzZSBpdCBzaG91bGQgYmUKK2FibGUgdG8gZ28gdXBzdHJlYW0uICBQcmVzdW1hYmx5IHRoZSB3aG9sZSByZWFzb24gc20tbm90aWZ5IHRyaWVzIHNldmVyYWwKK3RpbWVzIGlzIHRvIHdhaXQgZm9yIHBvc3NpYmxlIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYnV0IHdpdGhvdXQKK2NhbGxpbmcgcmVzX2luaXQoKSBpdCB3aWxsIG5ldmVyIGJlIGF3YXJlIG9mIHRob3NlIGNoYW5nZXMKKworQmFja3BvcnRlZCBkcm9tIEZlZG9yYQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKworZGlmZiAtdXAgbmZzLXV0aWxzLTEuMi4zL3V0aWxzL3N0YXRkL3NtLW5vdGlmeS5jLm9yaWcgbmZzLXV0aWxzLTEuMi4zL3V0aWxzL3N0YXRkL3NtLW5vdGlmeS5jCistLS0gbmZzLXV0aWxzLTEuMi4zL3V0aWxzL3N0YXRkL3NtLW5vdGlmeS5jLm9yaWcJMjAxMC0wOS0yOCAwODoyNDoxNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBuZnMtdXRpbHMtMS4yLjMvdXRpbHMvc3RhdGQvc20tbm90aWZ5LmMJMjAxMC0xMC0xNSAxNjo0NDo0My40ODcxMTk2MDEgLTA0MDAKK0BAIC0yOCw2ICsyOCw5IEBACisgI2luY2x1ZGUgPG5ldGRiLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGdycC5oPgorKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisrI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyAKKyAjaW5jbHVkZSAic29ja2FkZHIuaCIKKyAjaW5jbHVkZSAieGxvZy5oIgorQEAgLTg0LDYgKzg3LDcgQEAgc21uX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQorIAl9OworIAlpbnQgZXJyb3I7CisgCisrCXJlc19pbml0KCk7CisgCWVycm9yID0gZ2V0YWRkcmluZm8obmFtZSwgTlVMTCwgJmhpbnQsICZhaSk7CisgCWlmIChlcnJvciAhPSAwKSB7CisgCQl4bG9nKERfR0VORVJBTCwgImdldGFkZHJpbmZvKDMpOiAlcyIsIGdhaV9zdHJlcnJvcihlcnJvcikpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5M2YxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLURvLW5vdC1wYXNzLUNGTEFHUy10by1nY2Mtd2hpbGUtYnVpbGRpbmcucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorbmZzLXV0aWxzOiBEbyBub3QgcGFzcyBDRkxBR1MgdG8gZ2NjIHdoaWxlIGJ1aWxkaW5nCisKK0RvIG5vdCBwYXNzIENGTEFHUy9MREZMQUdTIHRvIGdjYyB3aGlsZSBidWlsZGluZywgVGhlIG5lZWRlZCBmbGFncyBoYXMKK2JlZW4gcGFzc2VkIGJ5IHh4eF9DRkxBR1M9JChDRkxBR1NfRk9SX0JVSUxEKS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0gfCAgICAyICsrCisgdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtICAgfCAgICAyICsrCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtIGIvdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0KK2luZGV4IDMxNTY4MTUuLjE3MjlmZDEgMTAwNjQ0CistLS0gYS90b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbQorKysrIGIvdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsOCBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorIENDPSQoQ0NfRk9SX0JVSUxEKQorK0NGTEFHUz0KKytMREZMQUdTPQorIExJQlRPT0wgPSBATElCVE9PTEAgLS10YWc9Q0MKKyAKKyBub2luc3RfUFJPR1JBTVMgPSB0ZXN0bGsKK2RpZmYgLS1naXQgYS90b29scy9ycGNnZW4vTWFrZWZpbGUuYW0gYi90b29scy9ycGNnZW4vTWFrZWZpbGUuYW0KK2luZGV4IDhhOWVjODkuLjhiYWNkYWEgMTAwNjQ0CistLS0gYS90b29scy9ycGNnZW4vTWFrZWZpbGUuYW0KKysrKyBiL3Rvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw4IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgQ0M9JChDQ19GT1JfQlVJTEQpCisrQ0ZMQUdTPQorK0xERkxBR1M9CisgTElCVE9PTCA9IEBMSUJUT09MQCAtLXRhZz1DQworIAorIG5vaW5zdF9QUk9HUkFNUyA9IHJwY2dlbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTAwN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy5jb25mCkBAIC0wLDAgKzEsMzUgQEAKKyMgUGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gbmZzLXV0aWxzIChjbGllbnRzICYgc2VydmVyKSBzZXJ2aWNlIGZpbGVzLgorIworCisjIE9wdGlvbnMgdG8gcGFzcyB0byBycGMubmZzZC4KK05GU0RfT1BUUz0iIgorCisjIE51bWJlciBvZiBzZXJ2ZXJzIHRvIHN0YXJ0IHVwOyB0aGUgZGVmYXVsdCBpcyA4IHNlcnZlcnMuCitORlNEX0NPVU5UPSIiCisKKyMgV2hlcmUgdG8gbW91bnQgbmZzZCBmaWxlc3lzdGVtOyB0aGUgZGVmYXVsdCBpcyAiL3Byb2MvZnMvbmZzZCIuCitQUk9DTkZTRF9NT1VOVFBPSU5UPSIiCisKKyMgT3B0aW9ucyB1c2VkIHRvIG1vdW50IG5mc2QgZmlsZXN5c3RlbTsgdGhlIGRlZmF1bHQgaXMgInJ3LG5vZGV2LG5vZXhlYyxub3N1aWQiLgorUFJPQ05GU0RfTU9VTlRPUFRTPSIiCisKKyMgT3B0aW9ucyBmb3IgcnBjLm1vdW50ZC4KKyMgSWYgeW91IGhhdmUgYSBwb3J0LWJhc2VkIGZpcmV3YWxsLCB5b3UgbWlnaHQgd2FudCB0byBzZXQgdXAKKyMgYSBmaXhlZCBwb3J0IGhlcmUgdXNpbmcgdGhlIC0tcG9ydCBvcHRpb24uCitNT1VOVERfT1BUUz0iIgorCisjIFBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG5mcy1jb21tb24gKG5mcyBjbGllbnRzICYgc2VydmVyKSBpbml0IHNjcmlwdC4KKyMKKworIyBJZiB5b3UgZG8gbm90IHNldCB2YWx1ZXMgZm9yIHRoZSBORUVEXyBvcHRpb25zLCB0aGV5IHdpbGwgYmUgYXR0ZW1wdGVkCisjIGF1dG9kZXRlY3RlZDsgdGhpcyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbW9zdCBwZW9wbGUuIFZhbGlkIGFsdGVybmF0aXZlcworIyBmb3IgdGhlIE5FRURfIG9wdGlvbnMgYXJlICJ5ZXMiIGFuZCAibm8iLgorCisjIERvIHlvdSB3YW50IHRvIHN0YXJ0IHRoZSBzdGF0ZCBkYWVtb24/IEl0IGlzIG5vdCBuZWVkZWQgZm9yIE5GU3Y0LgorTkVFRF9TVEFURD0iIgorCisjIE9wdGlvbnMgdG8gcGFzcyB0byBycGMuc3RhdGQuCisjIE4uQi4gc3RhdGQgbm9ybWFsbHkgcnVucyBvbiBib3RoIGNsaWVudCBhbmQgc2VydmVyLCBhbmQgcnVuLXRpbWUKKyMgb3B0aW9ucyBzaG91bGQgYmUgc3BlY2lmaWVkIGFjY29yZGluZ2x5LgorIyBTVEFURF9PUFRTPSItcCAzMjc2NSAtbyAzMjc2NiIKK1NUQVREX09QVFM9IiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNjb21tb24gYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjI2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzY29tbW9uCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmZzLWNvbW1vbgorIyBSZXF1aXJlZC1TdGFydDogICAgJHBvcnRtYXAgaHdjbG9jaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHBvcnRtYXAgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE5GUyBzdXBwb3J0IGZvciBib3RoIGNsaWVudCBhbmQgc2VydmVyCisjIERlc2NyaXB0aW9uOiAgICAgICBORlMgaXMgYSBwb3B1bGFyIHByb3RvY29sIGZvciBmaWxlIHNoYXJpbmcgYWNyb3NzCisjICAgICAgICAgICAgICAgICAgICBUQ1AvSVAgbmV0d29ya3MuIFRoaXMgc2VydmljZSBwcm92aWRlcyB2YXJpb3VzCisjICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgTkZTIG1vdW50cy4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIFN0YXJ0dXAgc2NyaXB0IGZvciBuZnMtdXRpbHMKKyMKKyMKKyMgTG9jYXRpb24gb2YgZXhlY3V0YWJsZXM6CisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14ICIkTkZTX1NUQVREIiB8fCBORlNfU1RBVEQ9L3Vzci9zYmluL3JwYy5zdGF0ZAordGVzdCAteiAiJFNUQVREX1BJRCIgJiYgU1RBVERfUElEPS92YXIvcnVuL3JwYy5zdGF0ZC5waWQKKyMKKyMgVGhlIGRlZmF1bHQgc3RhdGUgZGlyZWN0b3J5IGlzIC92YXIvbGliL25mcwordGVzdCAtbiAiJE5GU19TVEFURURJUiIgfHwgTkZTX1NUQVRFRElSPS92YXIvbGliL25mcworIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3RhcnR1cCBhbmQgc2h1dGRvd24gZnVuY3Rpb25zLgorIyAgQWN0dWFsIHN0YXJ0dXAvc2h1dGRvd24gaXMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisKK3N0YXJ0X3N0YXRkKCl7CisJZWNobyAtbiAic3RhcnRpbmcgc3RhdGQ6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyAiJE5GU19TVEFURCIgLS1waWRmaWxlICIkU1RBVERfUElEIgorCWVjaG8gZG9uZQorfQorc3RvcF9zdGF0ZCgpeworCWVjaG8gLW4gJ3N0b3BwaW5nIHN0YXRkOiAnCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLXBpZGZpbGUgIiRTVEFURF9QSUQiCisJZWNobyBkb25lCit9CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBzdXBwb3J0ZWQgb3B0aW9uczoKKyMgIHN0YXJ0CisjICBzdG9wCisjICByZXN0YXJ0OiBzdG9wcyBhbmQgc3RhcnRzIG1vdW50ZAorI0ZJWE1FOiBuZWVkIHRvIGNyZWF0ZSB0aGUgL3Zhci9saWIvbmZzLy4uLiBkaXJlY3RvcmllcworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCXN0YXJ0X3N0YXRkOzsKKyAgc3RvcCkKKwlzdG9wX3N0YXRkOzsKKyAgc3RhdHVzKQorCXN0YXR1cyAkTkZTX1NUQVRECisJZXhpdCAkPzs7CisgIHJlc3RhcnQpCisJJDAgc3RvcAorCSQwIHN0YXJ0OzsKKyAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR9IgorCWV4aXQgMTs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzc2VydmVyIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc3NlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWQ5M2E1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc3NlcnZlcgpAQCAtMCwwICsxLDEzMCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBuZnMta2VybmVsLXNlcnZlcgorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyBuZnMtY29tbW9uICRwb3J0bWFwIGh3Y2xvY2sKKyMgUmVxdWlyZWQtU3RvcDogICAgICRyZW1vdGVfZnMgbmZzLWNvbW1vbiAkcG9ydG1hcCBod2Nsb2NrCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogS2VybmVsIE5GUyBzZXJ2ZXIgc3VwcG9ydAorIyBEZXNjcmlwdGlvbjogICAgICAgTkZTIGlzIGEgcG9wdWxhciBwcm90b2NvbCBmb3IgZmlsZSBzaGFyaW5nIGFjcm9zcworIyAgICAgICAgICAgICAgICAgICAgVENQL0lQIG5ldHdvcmtzLiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgTkZTIHNlcnZlcgorIyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgY29uZmlndXJlZCB2aWEgdGhlCisjICAgICAgICAgICAgICAgICAgICAvZXRjL2V4cG9ydHMgZmlsZS4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIFN0YXJ0dXAgc2NyaXB0IGZvciBuZnMtdXRpbHMKKyMKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworIworIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTkZTX1NFUlZFUlMgbWF5IGJlIHNldCBpbiAvZXRjL2RlZmF1bHQvbmZzZAorIyBPdGhlciBjb250cm9sIHZhcmlhYmxlcyBtYXkgYmUgb3ZlcnJpZGRlbiBoZXJlIHRvbwordGVzdCAtciAvZXRjL2RlZmF1bHQvbmZzZCAmJiAuIC9ldGMvZGVmYXVsdC9uZnNkCisjCisjIExvY2F0aW9uIG9mIGV4ZWN1dGFibGVzOgordGVzdCAteCAiJE5GU19NT1VOVEQiIHx8IE5GU19NT1VOVEQ9L3Vzci9zYmluL3JwYy5tb3VudGQKK3Rlc3QgLXggIiRORlNfTkZTRCIgfHwgTkZTX05GU0Q9L3Vzci9zYmluL3JwYy5uZnNkCisjCisjIFRoZSB1c2VyIG1vZGUgcHJvZ3JhbSBtdXN0IGFsc28gZXhpc3QgKGl0IGp1c3Qgc3RhcnRzIHRoZSBrZXJuZWwKKyMgdGhyZWFkcyB1c2luZyB0aGUga2VybmVsIG1vZHVsZSBjb2RlKS4KK3Rlc3QgLXggIiRORlNfTU9VTlREIiB8fCBleGl0IDAKK3Rlc3QgLXggIiRORlNfTkZTRCIgfHwgZXhpdCAwCisjCisjIERlZmF1bHQgaXMgOCB0aHJlYWRzLCB2YWx1ZSBpcyBzZXR0YWJsZSBiZXR3ZWVuIDEgYW5kIHRoZSB0cnVlbHkKKyMgcmlkaWN1bG91cyA5OQordGVzdCAiJE5GU19TRVJWRVJTIiAhPSAiIiAmJiB0ZXN0ICIkTkZTX1NFUlZFUlMiIC1ndCAwICYmIHRlc3QgIiRORlNfU0VSVkVSUyIgLWx0IDEwMCB8fCBORlNfU0VSVkVSUz04CisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdGFydHVwIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuCisjICBBY3R1YWwgc3RhcnR1cC9zaHV0ZG93biBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKyNtb3VudGQKK3N0YXJ0X21vdW50ZCgpeworCWVjaG8gLW4gJ3N0YXJ0aW5nIG1vdW50ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1leGVjICIkTkZTX01PVU5URCIgLS0gIi1mIC9ldGMvZXhwb3J0cyAkQCIKKwllY2hvIGRvbmUKK30KK3N0b3BfbW91bnRkKCl7CisJZWNobyAtbiAnc3RvcHBpbmcgbW91bnRkOiAnCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjICIkTkZTX01PVU5URCIKKwllY2hvIGRvbmUKK30KKyMKKyNuZnNkCitzdGFydF9uZnNkKCl7CisgICAgICAgIG1vZHByb2JlIC1xIG5mc2QKKwlncmVwIC1xIG5mc2QgL3Byb2MvZmlsZXN5c3RlbXMgfHwgeworCQllY2hvIE5GUyBkYWVtb24gc3VwcG9ydCBub3QgZW5hYmxlZCBpbiBrZXJuZWwKKwkJZXhpdCAxCisgICAgICAgIH0KKwlncmVwIC1xIG5mc2QgL3Byb2MvbW91bnRzIHx8IG1vdW50IC10IG5mc2QgbmZzZCAvcHJvYy9mcy9uZnNkCisJZ3JlcCAtcSBuZnNkIC9wcm9jL21vdW50cyB8fCB7CisJCWVjaG8gbmZzZCBmaWxlc3lzdGVtIGNvdWxkIG5vdCBiZSBtb3VudGVkIGF0IC9wcm9jL2ZzL25mc2QKKwkJZXhpdCAxCisgICAgICAgIH0KKworCWVjaG8gLW4gInN0YXJ0aW5nICQxIG5mc2Qga2VybmVsIHRocmVhZHM6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyAiJE5GU19ORlNEIiAtLSAiJEAiCisJZWNobyBkb25lCit9CitkZWxheV9uZnNkKCl7CisJZm9yIGRlbGF5IGluIDAgMSAyIDMgNCA1IDYgNyA4IDkgCisJZG8KKwkJaWYgcGlkb2YgbmZzZCA+L2Rldi9udWxsCisJCXRoZW4KKwkJCWVjaG8gLW4gLgorCQkJc2xlZXAgMQorCQllbHNlCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKwlyZXR1cm4gMQorfQorc3RvcF9uZnNkKCl7CisJIyBXQVJOSU5HOiB0aGlzIGtpbGxzIGFueSBwcm9jZXNzIHdpdGggdGhlIGV4ZWN1dGFibGUKKwkjIG5hbWUgJ25mc2QnLgorCWVjaG8gLW4gJ3N0b3BwaW5nIG5mc2Q6ICcKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXNpZ25hbCAxIC0tbmFtZSBuZnNkCisJaWYgZGVsYXlfbmZzZCB8fCB7CisJCWVjaG8gZmFpbGVkCisJCWVjaG8gJyB1c2luZyBzaWduYWwgOTogJworCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXNpZ25hbCA5IC0tbmFtZSBuZnNkCisJCWRlbGF5X25mc2QKKwl9CisJdGhlbgorCQllY2hvIGRvbmUKKwllbHNlCisJCWVjaG8gZmFpbGVkCisJZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgc3VwcG9ydGVkIG9wdGlvbnM6CisjICBzdGFydAorIyAgc3RvcAorIyAgcmVsb2FkOiByZWxvYWRzIHRoZSBleHBvcnRzIGZpbGUKKyMgIHJlc3RhcnQ6IHN0b3BzIGFuZCBzdGFydHMgbW91bnRkCisjRklYTUU6IG5lZWQgdG8gY3JlYXRlIHRoZSAvdmFyL2xpYi9uZnMvLi4uIGRpcmVjdG9yaWVzCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZXhwb3J0ZnMgLXIKKwlzdGFydF9uZnNkICIkTkZTX1NFUlZFUlMiCisJc3RhcnRfbW91bnRkCisJdGVzdCAtciAvZXRjL2V4cG9ydHMgJiYgZXhwb3J0ZnMgLWE7OworICBzdG9wKQlleHBvcnRmcyAtdWEKKwlzdG9wX21vdW50ZAorCXN0b3BfbmZzZDs7CisgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL3JwYy5tb3VudGQKKwlSRVRWQUw9JD8KKwlzdGF0dXMgbmZzZAorCXJ2YWw9JD8KKwlbICRSRVRWQUwgLWVxIDAgXSAmJiBleGl0ICRydmFsCisJZXhpdCAkUkVUVkFMOzsKKyAgcmVsb2FkKQl0ZXN0IC1yIC9ldGMvZXhwb3J0cyAmJiBleHBvcnRmcyAtcjs7CisgIHJlc3RhcnQpCisJJDAgc3RvcAorCSQwIHN0YXJ0OzsKKyAgKikJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZWxvYWR8cmVzdGFydH0iCisJZXhpdCAxOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9wcm9jLWZzLW5mc2QubW91bnQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvcHJvYy1mcy1uZnNkLm1vdW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDgwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvcHJvYy1mcy1uZnNkLm1vdW50CkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ORlNEIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbQorQWZ0ZXI9c3lzdGVtZC1tb2R1bGVzLWxvYWQuc2VydmljZQorCitbTW91bnRdCitXaGF0PW5mc2QKK1doZXJlPS9wcm9jL2ZzL25mc2QKK1R5cGU9bmZzZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTAxZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHNfMS4zLjEuYmIKQEAgLTAsMCArMSwxNDEgQEAKK1NVTU1BUlkgPSAidXNlcnNwYWNlIHV0aWxpdGllcyBmb3Iga2VybmVsIG5mcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBuZnMtdXRpbHMgcGFja2FnZSBwcm92aWRlcyBhIGRhZW1vbiBmb3IgdGhlIGtlcm5lbCBcCitORlMgc2VydmVyIGFuZCByZWxhdGVkIHRvb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9uZnMuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIk1JVCAmIEdQTHYyKyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk1ZjNhOTNhNWMzYzc4ODhkZTYyM2I0NmVhMDg1YTg0IgorCisjIHV0aWwtbGludXggZm9yIGxpYmJsa2lkCitERVBFTkRTID0gImxpYmNhcCBsaWJuZnNpZG1hcCBsaWJldmVudCB1dGlsLWxpbnV4IHNxbGl0ZTMiCitSREVQRU5EU18ke1BOfS1jbGllbnQgPSAicnBjYmluZCBiYXNoIgorUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tY2xpZW50IGJhc2giCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLW5mc2QiCisKK2luaGVyaXQgdXNlcmFkZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59LWNsaWVudCIKK1VTRVJBRERfUEFSQU1fJHtQTn0tY2xpZW50ID0gIi0tc3lzdGVtICAtLWhvbWUtZGlyIC92YXIvbGliL25mcyBcCisJCQkgICAgICAtLXNoZWxsIC9iaW4vZmFsc2UgLS11c2VyLWdyb3VwIHJwY3VzZXIiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9uZnMtdXRpbHMvJHtQVn0vbmZzLXV0aWxzLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1BbGxvdy10by1leHBsaWNpdGx5LWRpc2FibGUtbmZzaWRtYXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmZzLXV0aWxzLTEuMi4zLXNtLW5vdGlmeS1yZXNfaW5pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnNzZXJ2ZXIgXAorICAgICAgICAgICBmaWxlOi8vbmZzY29tbW9uIFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL25mcy1zZXJ2ZXIuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtbW91bnRkLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vbmZzLXN0YXRkLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vcHJvYy1mcy1uZnNkLm1vdW50IFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy1kZWJpYW5pemUtc3RhcnQtc3RhdGQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGRlNjc2YjlmZjM0YjhmOWFkZGMxZDA4MDBmYWJkZjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmY3OWQ3MGI3YjU4YjJjOGY5Yjc5OGM1ODcyMTEyN2U4MmJiOTYwMjJhZGMwNGE1YzRjYjI1MTYzMGU2OTZiOCIKKworIyBPbmx5IGtlcm5lbC1tb2R1bGUtbmZzZCBpcyByZXF1aXJlZCBoZXJlIChidXQgY2FuIGJlIGJ1aWx0LWluKSAgLSB0aGUgbmZzZCBtb2R1bGUgd2lsbAorIyBwdWxsIGluIHRoZSByZW1haW5kZXIgb2YgdGhlIGRlcGVuZGVuY2llcy4KKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfSAke1BOfS1jbGllbnQiCitJTklUU0NSSVBUX05BTUUgPSAibmZzc2VydmVyIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCitJTklUU0NSSVBUX05BTUVfJHtQTn0tY2xpZW50ID0gIm5mc2NvbW1vbiIKK0lOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LWNsaWVudCA9ICJkZWZhdWx0cyAxOSAyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHVwZGF0ZS1yYy5kIHN5c3RlbWQgcGtnY29uZmlnCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuZnMtc2VydmVyLnNlcnZpY2UgbmZzLW1vdW50ZC5zZXJ2aWNlIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWNsaWVudCA9ICJuZnMtc3RhdGQuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEUgPSAiZGlzYWJsZSIKKworIyAtLWVuYWJsZS11dWlkIGlzIG5lZWQgZm9yIGNyb3NzLWNvbXBpbGluZworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zdGF0ZHVzZXI9cnBjdXNlciBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtbW91bnRjb25maWcgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYm1vdW50LW1vdW50IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzdjQxIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS11dWlkIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZ3NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdGlycGMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uZnNkY2x0cmFjayBcCisgICAgICAgICAgICAgICAgLS13aXRoLXN0YXRkcGF0aD0vdmFyL2xpYi9uZnMvc3RhdGQgXAorICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC10Y3Atd3JhcHBlcnMsLS13aXRob3V0LXRjcC13cmFwcGVycyx0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW25mc2lkbWFwXSA9ICItLWVuYWJsZS1uZnNpZG1hcCwtLWRpc2FibGUtbmZzaWRtYXAsa2V5dXRpbHMiCisKK0lOSElCSVRfQVVUT19TVEFHRSA9ICIxIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tY2xpZW50ICR7UE59LXN0YXRzIgorCitDT05GRklMRVNfJHtQTn0tY2xpZW50ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvZXRhYiBcCisJCQkgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvcm10YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3h0YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkL3N0YXRlIFwKKwkJCSAgICR7c3lzY29uZmRpcn0vbmZzbW91bnQuY29uZiIKKworRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7YmFzZV9zYmluZGlyfS8qbW91bnQubmZzKiAke3NiaW5kaXJ9LypzdGF0ZCBcCisJCSAgICAgICR7c2JpbmRpcn0vcnBjLmlkbWFwZCAke3NiaW5kaXJ9L3NtLW5vdGlmeSBcCisJCSAgICAgICR7c2JpbmRpcn0vc2hvd21vdW50ICR7c2JpbmRpcn0vbmZzc3RhdCBcCisJCSAgICAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcyBcCisJCSAgICAgICR7c3lzY29uZmRpcn0vbmZzLXV0aWxzLmNvbmYgXAorCQkgICAgICAke3N5c2NvbmZkaXJ9L25mc21vdW50LmNvbmYgXAorCQkgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9uZnNjb21tb24gXAorCQkgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL25mcy1zdGF0ZC5zZXJ2aWNlIgorRklMRVNfJHtQTn0tc3RhdHMgPSAiJHtzYmluZGlyfS9tb3VudHN0YXRzICR7c2JpbmRpcn0vbmZzaW9zdGF0IgorUkRFUEVORFNfJHtQTn0tc3RhdHMgPSAicHl0aG9uIgorCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgc2VkIC1pIC1lICdzLHNiaW5kaXIgPSAvc2JpbixzYmluZGlyID0gJHtiYXNlX3NiaW5kaXJ9LGcnIFwKKyAgICAgICAgICAgICR7U30vdXRpbHMvbW91bnQvTWFrZWZpbGUuYW0KKworICAgICAgICBzZWQgLWkgLWUgJ3Msc2JpbmRpciA9IC9zYmluLHNiaW5kaXIgPSAke2Jhc2Vfc2JpbmRpcn0sZycgXAorICAgICAgICAgICAgJHtTfS91dGlscy9vc2RfbG9naW4vTWFrZWZpbGUuYW0KK30KKworIyBNYWtlIGNsZWFuIG5lZWRlZCBiZWNhdXNlIHRoZSBwYWNrYWdlIGNvbWVzIHdpdGgKKyMgcHJlY29tcGlsZWQgNjQtYml0IG9iamVjdHMgdGhhdCBicmVhayB0aGUgYnVpbGQKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwltYWtlIGNsZWFuCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mc3NlcnZlciAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmZzc2VydmVyCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzY29tbW9uICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZnNjb21tb24KKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mcy11dGlscy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vdXRpbHMvbW91bnQvbmZzbW91bnQuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1zZXJ2ZXIuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtbW91bnRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLXN0YXRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKwkgICAgZWNobyAibmZzZCIgPiAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC9uZnNkLmNvbmYKKwkgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJvYy1mcy1uZnNkLm1vdW50ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzLworCSAgICBsbiAtc2YgLi4vcHJvYy1mcy1uZnNkLm1vdW50ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3Byb2MtZnMtbmZzZC5tb3VudAorCWZpCisKKwkjIGtlcm5lbCBjb2RlIGFzIG9mIDMuOCBoYXJkLWNvZGVzIHRoaXMgcGF0aCBhcyBhIGRlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0vdmFyL2xpYi9uZnMvdjRyZWNvdmVyeQorCisJIyBjaG93biB0aGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzCisJY2hvd24gLVIgcnBjdXNlcjpycGN1c2VyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvc3RhdGQKKwljaG1vZCAwNjQ0ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvc3RhdGQvc3RhdGUKKworCSMgdGhlIGZvbGxvd2luZyBhcmUgYnVpbHQgYnkgQ0NfRk9SX0JVSUxECisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZGVidWcKKwlybSAtZiAke0R9JHtzYmluZGlyfS9ycGNnZW4KKwlybSAtZiAke0R9JHtzYmluZGlyfS9sb2NrdGVzdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDE1YTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMKQEAgLTAsMCArMSwzNyBAQAorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vZm9uby5vcmciCitTVU1NQVJZICA9ICJvcGVuIHNvdXJjZSB0ZWxlcGhvbnkiCitERVNDUklQVElPTiA9ICJvRm9ubyBpcyBhIHN0YWNrIGZvciBtb2JpbGUgdGVsZXBob255IGRldmljZXMgb24gTGludXguIG9Gb25vIHN1cHBvcnRzIHNwZWFraW5nIHRvIHRlbGVwaG9ueSBkZXZpY2VzIHRocm91Z2ggc3BlY2lmaWMgZHJpdmVycywgb3Igd2l0aCBnZW5lcmljIEFUIGNvbW1hbmRzLiIKK0xJQ0VOU0UgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29mb25vLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9M2NlMTdkNTk3OGVmMzQ0NWRlZjI2NWI5ODg5OWMyZWUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBzeXN0ZW1kIGJsdWV0b290aAorCitERVBFTkRTICA9ICJkYnVzIGdsaWItMi4wIHVkZXYgbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvIgorCitJTklUU0NSSVBUX05BTUUgPSAib2Zvbm8iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyAyMiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCisgICAgIgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRoLXN5c3RlbWR1bml0ZGlyPSIKK1BBQ0tBR0VDT05GSUdbYmx1ZXpdID0gIi0tZW5hYmxlLWJsdWV0b290aCwgLS1kaXNhYmxlLWJsdWV0b290aCwgJHtCTFVFWn0iCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtdGVzdCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9mb25vLnNlcnZpY2UiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vb2Zvbm8gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL29mb25vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyIKKworUkRFUEVORFNfJHtQTn0gKz0gImRidXMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2ICR7c3lzdGVtZF91bml0ZGlyfSIKK0ZJTEVTXyR7UE59LXRlc3RzID0gIiR7bGliZGlyfS8ke0JQTn0vdGVzdCIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbiBweXRob24tcHlnb2JqZWN0IHB5dGhvbi1kYnVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby8wMDAxLWJhY2t0cmFjZS1EaXNhYmxlLWZvci1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vLzAwMDEtYmFja3RyYWNlLURpc2FibGUtZm9yLW5vbi1nbGliYy1DLWxpYnJhcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDZiNmRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby8wMDAxLWJhY2t0cmFjZS1EaXNhYmxlLWZvci1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSAyZDcyOWFmMDg5N2Q3ZDcyYjgzZDExMTg3NmZlYmY5ZTBlZWMxYTY4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMyBBcHIgMjAxNSAyMDo1MDo1NiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBiYWNrdHJhY2U6IERpc2FibGUgZm9yIG5vbi1nbGliYyBDIGxpYnJhcmllcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIHNyYy9sb2cuYyB8IDUgKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbG9nLmMgYi9zcmMvbG9nLmMKK2luZGV4IGZlYmM4NzQuLjlkYjRhZTcgMTAwNjQ0CistLS0gYS9zcmMvbG9nLmMKKysrKyBiL3NyYy9sb2cuYworQEAgLTMwLDcgKzMwLDkgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKysjaWZkZWYgX19HTElCQ19fCisgI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPGRsZmNuLmg+CisgCisgI2luY2x1ZGUgIm9mb25vLmgiCitAQCAtMjE5LDggKzIyMSw5IEBAIHN0YXRpYyB2b2lkIHNpZ25hbF9oYW5kbGVyKGludCBzaWdubykKKyB7CisgCW9mb25vX2Vycm9yKCJBYm9ydGluZyAoc2lnbmFsICVkKSBbJXNdIiwgc2lnbm8sIHByb2dyYW1fZXhlYyk7CisgCisrI2lmZGVmIF9fR0xJQkNfXworIAlwcmludF9iYWNrdHJhY2UoMik7CistCisrI2VuZGlmCisgCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyB9CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhjYTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9SZXZlcnQtdGVzdC1Db252ZXJ0LXRvLVB5dGhvbi0zLnBhdGNoCkBAIC0wLDAgKzEsMTI3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitGcm9tIDU3MmZjMjNmNmVmZDY1YTJlZjllNmM5NTdiMjUwNjEwODczODY3MmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorRGF0ZTogTW9uLCAyNSBBdWcgMjAxNCAxNjo1OTozOSArMDMwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInRlc3Q6IENvbnZlcnQgdG8gUHl0aG9uIDMiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgYzAyN2FiOWZiYzFhOGU4YzllNzZiY2QxMjNkZjFhZDc2OTYzMDdjMi4KKy0tLQorIHRlc3QvYWN0aXZhdGUtY29udGV4dCAgICAgICAgICB8ICAyICstCisgdGVzdC9hbnN3ZXItY2FsbHMgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2JhY2t0cmFjZSAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2FuY2VsLXVzc2QgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZSAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1kaWFsLW51bWJlciAgICAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWhhbmd1cCAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtbGlzdC1jYWxsICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMgICAgICB8ICAyICstCisgdGVzdC9jaGFuZ2UtcGluICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0ICAgfCAgMiArLQorIHRlc3QvY3JlYXRlLW1tcy1jb250ZXh0ICAgICAgICB8ICAyICstCisgdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eSAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2RlYWN0aXZhdGUtYWxsICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZGVhY3RpdmF0ZS1jb250ZXh0ICAgICAgICB8ICAyICstCisgdGVzdC9kaWFsLW51bWJlciAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nICAgfCAgMiArLQorIHRlc3QvZGlzYWJsZS1ncHJzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNhYmxlLW1vZGVtICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2Rpc3BsYXktaWNvbiAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZW5hYmxlLWNicyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9lbmFibGUtZ3BycyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VuYWJsZS1tb2RlbSAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZW50ZXItcGluICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9nZXQtaWNvbiAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2dldC1vcGVyYXRvcnMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZ2V0LXRlY2gtcHJlZmVyZW5jZSAgICAgICB8ICAyICstCisgdGVzdC9oYW5ndXAtYWN0aXZlICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hhbmd1cC1hbGwgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLWNhbGwgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eSAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hvbGQtYW5kLWFuc3dlciAgICAgICAgICAgfCAgMiArLQorIHRlc3QvaW5pdGlhdGUtdXNzZCAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L2xpc3QtY2FsbHMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbGlzdC1jb250ZXh0cyAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9saXN0LW1lc3NhZ2VzICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3QtbW9kZW1zICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbGlzdC1vcGVyYXRvcnMgICAgICAgICAgICB8ICAyICstCisgdGVzdC9sb2NrLXBpbiAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xvY2tkb3duLW1vZGVtICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbW9uaXRvci1vZm9ubyAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L29mZmxpbmUtbW9kZW0gICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvb25saW5lLW1vZGVtICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9wcml2YXRlLWNoYXQgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncyAgfCAgMiArLQorIHRlc3QvcmVjZWl2ZS1zbXMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZWplY3QtY2FsbHMgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3JlbGVhc2UtYW5kLWFuc3dlciAgICAgICAgfCAgMiArLQorIHRlc3QvcmVsZWFzZS1hbmQtc3dhcCAgICAgICAgICB8ICAyICstCisgdGVzdC9yZW1vdmUtY29udGV4dHMgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Jlc2V0LXBpbiAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXNtcyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NlbmQtdXNzZCAgICAgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9zZW5kLXZjYWwgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NlbmQtdmNhcmQgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZyAgICAgICB8ICAyICstCisgdGVzdC9zZXQtY2JzLXRvcGljcyAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5ICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWZhc3QtZG9ybWFuY3kgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtZ3NtLWJhbmQgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1taWMtdm9sdW1lICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LW1tcy1kZXRhaWxzICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtbXNpc2RuICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXNwZWFrZXItdm9sdW1lICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC10dHkgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXVtdHMtYmFuZCAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzICAgICAgIHwgIDIgKy0KKyB0ZXN0L3N3YXAtY2FsbHMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlICAgICB8ICAyICstCisgdGVzdC90ZXN0LWNhbGwtYmFycmluZyAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYWxsLXNldHRpbmdzICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LWNicyAgICAgICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3QvdGVzdC1nbnNzICAgICAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1tb2RlbSAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtcGhvbmVib29rICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1wdXNoLW5vdGlmaWNhdGlvbiAgICB8ICAyICstCisgdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc21zICAgICAgICAgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyB0ZXN0L3Rlc3Qtc3MgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zcy1jb250cm9sLWNiICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcyAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zdGstbWVudSAgICAgICAgICAgICB8IDM0ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyB0ZXN0L3VubG9jay1waW4gICAgICAgICAgICAgICAgfCAgMiArLQorIDk0IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L2FjdGl2YXRlLWNvbnRleHQgYi90ZXN0L2FjdGl2YXRlLWNvbnRleHQKK2luZGV4IGU0ZmM3MDIuLjQyNDEzOTYgMTAwNzU1CistLS0gYS90ZXN0L2FjdGl2YXRlLWNvbnRleHQKKysrKyBiL3Rlc3QvYWN0aXZhdGUtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2Fuc3dlci1jYWxscyBiL3Rlc3QvYW5zd2VyLWNhbGxzCitpbmRleCBkYWE3OTRiLi40NWZmMDhmIDEwMDc1NQorLS0tIGEvdGVzdC9hbnN3ZXItY2FsbHMKKysrKyBiL3Rlc3QvYW5zd2VyLWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9iYWNrdHJhY2UgYi90ZXN0L2JhY2t0cmFjZQoraW5kZXggMDNjNzYzMi4uYzYyNDcwOSAxMDA3NTUKKy0tLSBhL3Rlc3QvYmFja3RyYWNlCisrKysgYi90ZXN0L2JhY2t0cmFjZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgb3MKKyBpbXBvcnQgcmUKK2RpZmYgLS1naXQgYS90ZXN0L2NhbmNlbC11c3NkIGIvdGVzdC9jYW5jZWwtdXNzZAoraW5kZXggZTc1NTliYS4uMTc5N2YyNiAxMDA3NTUKKy0tLSBhL3Rlc3QvY2FuY2VsLXVzc2QKKysrKyBiL3Rlc3QvY2FuY2VsLXVzc2QKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZSBiL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUKK2luZGV4IDNhZGMxNGQuLjBkZGMwY2QgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCisrKysgYi90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZSBiL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQoraW5kZXggYWMxNmEyZC4uYTNjY2EwMSAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQorKysrIGIvdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1kaWFsLW51bWJlciBiL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgoraW5kZXggNjgzNDMxZS4uOWNkZmIyNCAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgorKysrIGIvdGVzdC9jZG1hLWRpYWwtbnVtYmVyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1oYW5ndXAgYi90ZXN0L2NkbWEtaGFuZ3VwCitpbmRleCA0MWZmYTYwLi40OTNlY2U0IDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWhhbmd1cAorKysrIGIvdGVzdC9jZG1hLWhhbmd1cAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtbGlzdC1jYWxsIGIvdGVzdC9jZG1hLWxpc3QtY2FsbAoraW5kZXggYjEzMjM1My4uNWQzNmE2OSAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1saXN0LWNhbGwKKysrKyBiL3Rlc3QvY2RtYS1saXN0LWNhbGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzIGIvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscworaW5kZXggYTYwYzg2ZS4uYTI4NmIwZSAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKKysrKyBiL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9jaGFuZ2UtcGluIGIvdGVzdC9jaGFuZ2UtcGluCitpbmRleCAzMDFjNmNlLi4wMDBjZTUzIDEwMDc1NQorLS0tIGEvdGVzdC9jaGFuZ2UtcGluCisrKysgYi90ZXN0L2NoYW5nZS1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dCBiL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQKK2luZGV4IDEwODkwNTMuLmVmZDA5OTggMTAwNzU1CistLS0gYS90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0CisrKysgYi90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0IGIvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKK2luZGV4IDU5ODMzNmYuLmU1YmUwOGQgMTAwNzU1CistLS0gYS90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dAorKysrIGIvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eSBiL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkKK2luZGV4IDFiNzYwMTAuLjk3MDQ3YzMgMTAwNzU1CistLS0gYS90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5CisrKysgYi90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvZGVhY3RpdmF0ZS1hbGwgYi90ZXN0L2RlYWN0aXZhdGUtYWxsCitpbmRleCA1YWE4NTg3Li40MjcwMDllIDEwMDc1NQorLS0tIGEvdGVzdC9kZWFjdGl2YXRlLWFsbAorKysrIGIvdGVzdC9kZWFjdGl2YXRlLWFsbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RlYWN0aXZhdGUtY29udGV4dCBiL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0CitpbmRleCA1Yzg2YTcxLi5kZjQ3ZDJlIDEwMDc1NQorLS0tIGEvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQKKysrKyBiL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlhbC1udW1iZXIgYi90ZXN0L2RpYWwtbnVtYmVyCitpbmRleCBmZTVhZGFkLi5lZTY3NGQ5IDEwMDc1NQorLS0tIGEvdGVzdC9kaWFsLW51bWJlcgorKysrIGIvdGVzdC9kaWFsLW51bWJlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nIGIvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZworaW5kZXggODExZTRmYS4uMzYwOTgxNiAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKKysrKyBiL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorZGlmZiAtLWdpdCBhL3Rlc3QvZGlzYWJsZS1ncHJzIGIvdGVzdC9kaXNhYmxlLWdwcnMKK2luZGV4IDYxY2UyMTYuLmM2YzQwYTUgMTAwNzU1CistLS0gYS90ZXN0L2Rpc2FibGUtZ3BycworKysrIGIvdGVzdC9kaXNhYmxlLWdwcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9kaXNhYmxlLW1vZGVtIGIvdGVzdC9kaXNhYmxlLW1vZGVtCitpbmRleCA2ZmJhODU3Li5jYThjOGQ4IDEwMDc1NQorLS0tIGEvdGVzdC9kaXNhYmxlLW1vZGVtCisrKysgYi90ZXN0L2Rpc2FibGUtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9kaXNwbGF5LWljb24gYi90ZXN0L2Rpc3BsYXktaWNvbgoraW5kZXggYWM0MDgxOC4uNzUzZDE0ZCAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlzcGxheS1pY29uCisrKysgYi90ZXN0L2Rpc3BsYXktaWNvbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2VuYWJsZS1jYnMgYi90ZXN0L2VuYWJsZS1jYnMKK2luZGV4IDRhOGJmNjYuLmMwOGJmMmIgMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1jYnMKKysrKyBiL3Rlc3QvZW5hYmxlLWNicworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2VuYWJsZS1ncHJzIGIvdGVzdC9lbmFibGUtZ3BycworaW5kZXggNjhkNWVmMC4uODY2NDg5MSAxMDA3NTUKKy0tLSBhL3Rlc3QvZW5hYmxlLWdwcnMKKysrKyBiL3Rlc3QvZW5hYmxlLWdwcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtbW9kZW0gYi90ZXN0L2VuYWJsZS1tb2RlbQoraW5kZXggZmM1OTU4YS4uZGZhYWFhOCAxMDA3NTUKKy0tLSBhL3Rlc3QvZW5hYmxlLW1vZGVtCisrKysgYi90ZXN0L2VuYWJsZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2VudGVyLXBpbiBiL3Rlc3QvZW50ZXItcGluCitpbmRleCA5NTU2MzYzLi5jNmVlNjY5IDEwMDc1NQorLS0tIGEvdGVzdC9lbnRlci1waW4KKysrKyBiL3Rlc3QvZW50ZXItcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZ2V0LWljb24gYi90ZXN0L2dldC1pY29uCitpbmRleCA1NTY5YTMzLi5mZGFhZWU3IDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtaWNvbgorKysrIGIvdGVzdC9nZXQtaWNvbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2dldC1vcGVyYXRvcnMgYi90ZXN0L2dldC1vcGVyYXRvcnMKK2luZGV4IDBmMzVjODAuLjYyMzU0YzUgMTAwNzU1CistLS0gYS90ZXN0L2dldC1vcGVyYXRvcnMKKysrKyBiL3Rlc3QvZ2V0LW9wZXJhdG9ycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UgYi90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKK2luZGV4IDdiYTYzNjUuLjc3ZDIwZDAgMTAwNzU1CistLS0gYS90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKKysrKyBiL3Rlc3QvZ2V0LXRlY2gtcHJlZmVyZW5jZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9oYW5ndXAtYWN0aXZlIGIvdGVzdC9oYW5ndXAtYWN0aXZlCitpbmRleCA4MmUwZWIwLi41YWY2MmFiIDEwMDc1NQorLS0tIGEvdGVzdC9oYW5ndXAtYWN0aXZlCisrKysgYi90ZXN0L2hhbmd1cC1hY3RpdmUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9oYW5ndXAtYWxsIGIvdGVzdC9oYW5ndXAtYWxsCitpbmRleCAzYTAxMzhkLi4zMjkzM2RiIDEwMDc1NQorLS0tIGEvdGVzdC9oYW5ndXAtYWxsCisrKysgYi90ZXN0L2hhbmd1cC1hbGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9oYW5ndXAtY2FsbCBiL3Rlc3QvaGFuZ3VwLWNhbGwKK2luZGV4IDVhMmRlMjAuLjQ0NzAyMGMgMTAwNzU1CistLS0gYS90ZXN0L2hhbmd1cC1jYWxsCisrKysgYi90ZXN0L2hhbmd1cC1jYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkgYi90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5CitpbmRleCAyNDc1MWMzLi40OGZlMzQyIDEwMDc1NQorLS0tIGEvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQorKysrIGIvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2hvbGQtYW5kLWFuc3dlciBiL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCitpbmRleCBkYTNiZTU3Li4yYzQ3ZTI3IDEwMDc1NQorLS0tIGEvdGVzdC9ob2xkLWFuZC1hbnN3ZXIKKysrKyBiL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaW5pdGlhdGUtdXNzZCBiL3Rlc3QvaW5pdGlhdGUtdXNzZAoraW5kZXggZmFmNTBkMC4uZDcwMjJmMSAxMDA3NTUKKy0tLSBhL3Rlc3QvaW5pdGlhdGUtdXNzZAorKysrIGIvdGVzdC9pbml0aWF0ZS11c3NkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworQEAgLTQ1LDcgKzQ1LDcgQEAgaWYgc3RhdGUgPT0gImlkbGUiOgorIHByaW50KCJTdGF0ZTogJXMiICUgKHN0YXRlKSkKKyAKKyB3aGlsZSBzdGF0ZSA9PSAidXNlci1yZXNwb25zZSI6CistCXJlc3BvbnNlID0gaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQorKwlyZXNwb25zZSA9IHJhd19pbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCisgCisgCXJlc3VsdCA9IHVzc2QuUmVzcG9uZChyZXNwb25zZSwgdGltZW91dD0xMDApCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LWNhbGxzIGIvdGVzdC9saXN0LWNhbGxzCitpbmRleCBmM2VlOTkxLi4wODY2OGM2IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LWNhbGxzCisrKysgYi90ZXN0L2xpc3QtY2FsbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3QtY29udGV4dHMgYi90ZXN0L2xpc3QtY29udGV4dHMKK2luZGV4IDc4Mjc4Y2EuLmYwZDQwOTQgMTAwNzU1CistLS0gYS90ZXN0L2xpc3QtY29udGV4dHMKKysrKyBiL3Rlc3QvbGlzdC1jb250ZXh0cworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1tZXNzYWdlcyBiL3Rlc3QvbGlzdC1tZXNzYWdlcworaW5kZXggOWY1YmNlMy4uY2ZjY2JlYSAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1tZXNzYWdlcworKysrIGIvdGVzdC9saXN0LW1lc3NhZ2VzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LW1vZGVtcyBiL3Rlc3QvbGlzdC1tb2RlbXMKK2luZGV4IGI5ZjUxMGEuLmVkNjYxMjQgMTAwNzU1CistLS0gYS90ZXN0L2xpc3QtbW9kZW1zCisrKysgYi90ZXN0L2xpc3QtbW9kZW1zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LW9wZXJhdG9ycyBiL3Rlc3QvbGlzdC1vcGVyYXRvcnMKK2luZGV4IDA2NGM0ZTMuLjM0OWJmNDEgMTAwNzU1CistLS0gYS90ZXN0L2xpc3Qtb3BlcmF0b3JzCisrKysgYi90ZXN0L2xpc3Qtb3BlcmF0b3JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvbG9jay1waW4gYi90ZXN0L2xvY2stcGluCitpbmRleCA5NmVhOWMyLi41NTc5NzM1IDEwMDc1NQorLS0tIGEvdGVzdC9sb2NrLXBpbgorKysrIGIvdGVzdC9sb2NrLXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2xvY2tkb3duLW1vZGVtIGIvdGVzdC9sb2NrZG93bi1tb2RlbQoraW5kZXggNGUwNDIwNS4uNzgxYWJiNiAxMDA3NTUKKy0tLSBhL3Rlc3QvbG9ja2Rvd24tbW9kZW0KKysrKyBiL3Rlc3QvbG9ja2Rvd24tbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9tb25pdG9yLW9mb25vIGIvdGVzdC9tb25pdG9yLW9mb25vCitpbmRleCA4ODMwNzU3Li5iZDMxNjE3IDEwMDc1NQorLS0tIGEvdGVzdC9tb25pdG9yLW9mb25vCisrKysgYi90ZXN0L21vbml0b3Itb2Zvbm8KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitAQCAtNiw3ICs2LDcgQEAgaW1wb3J0IGRidXMKKyBpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCisgCisgX2RidXMycHkgPSB7CistCWRidXMuU3RyaW5nIDogc3RyLAorKwlkYnVzLlN0cmluZyA6IHVuaWNvZGUsCisgCWRidXMuVUludDMyIDogaW50LAorIAlkYnVzLkludDMyIDogaW50LAorIAlkYnVzLkludDE2IDogaW50LAorZGlmZiAtLWdpdCBhL3Rlc3Qvb2ZmbGluZS1tb2RlbSBiL3Rlc3Qvb2ZmbGluZS1tb2RlbQoraW5kZXggZThjMDQzYS4uZWExZjUyMiAxMDA3NTUKKy0tLSBhL3Rlc3Qvb2ZmbGluZS1tb2RlbQorKysrIGIvdGVzdC9vZmZsaW5lLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzLCBzeXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L29ubGluZS1tb2RlbSBiL3Rlc3Qvb25saW5lLW1vZGVtCitpbmRleCAwMjljNGE1Li4zMTBlZDdkIDEwMDc1NQorLS0tIGEvdGVzdC9vbmxpbmUtbW9kZW0KKysrKyBiL3Rlc3Qvb25saW5lLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzLCBzeXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3ByaXZhdGUtY2hhdCBiL3Rlc3QvcHJpdmF0ZS1jaGF0CitpbmRleCBlN2U1NDA2Li5lZjJlZjZjIDEwMDc1NQorLS0tIGEvdGVzdC9wcml2YXRlLWNoYXQKKysrKyBiL3Rlc3QvcHJpdmF0ZS1jaGF0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzIGIvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKK2luZGV4IDhhM2VjZmEuLjBmMDU4YjIgMTAwNzU1CistLS0gYS90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncworKysrIGIvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IG9zCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3JlY2VpdmUtc21zIGIvdGVzdC9yZWNlaXZlLXNtcworaW5kZXggYTBjNjkxNS4uYzIzZWIxNCAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVjZWl2ZS1zbXMKKysrKyBiL3Rlc3QvcmVjZWl2ZS1zbXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWplY3QtY2FsbHMgYi90ZXN0L3JlamVjdC1jYWxscworaW5kZXggNzFiMjQzZS4uOWVkZjFmZiAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVqZWN0LWNhbGxzCisrKysgYi90ZXN0L3JlamVjdC1jYWxscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyIGIvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKK2luZGV4IGRlYzhlMTcuLjI1ZmQ4MTggMTAwNzU1CistLS0gYS90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlcgorKysrIGIvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWxlYXNlLWFuZC1zd2FwIGIvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCitpbmRleCBjYjhjODRlLi43YjM1NjlmIDEwMDc1NQorLS0tIGEvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCisrKysgYi90ZXN0L3JlbGVhc2UtYW5kLXN3YXAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9yZW1vdmUtY29udGV4dHMgYi90ZXN0L3JlbW92ZS1jb250ZXh0cworaW5kZXggYjU0MTg0ZS4uYzUwODJjYiAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVtb3ZlLWNvbnRleHRzCisrKysgYi90ZXN0L3JlbW92ZS1jb250ZXh0cworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvcmVzZXQtcGluIGIvdGVzdC9yZXNldC1waW4KK2luZGV4IDNmYmQxMjYuLmI0MjkyNTQgMTAwNzU1CistLS0gYS90ZXN0L3Jlc2V0LXBpbgorKysrIGIvdGVzdC9yZXNldC1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMgYi90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycworaW5kZXggYjRmYzA1ZS4uNzQ5YzcxMCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzCisrKysgYi90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NlbmQtc21zIGIvdGVzdC9zZW5kLXNtcworaW5kZXggOTg4MDhhYS4uZTA2NDQ0ZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2VuZC1zbXMKKysrKyBiL3Rlc3Qvc2VuZC1zbXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXVzc2QgYi90ZXN0L3NlbmQtdXNzZAoraW5kZXggYTIwZTA5OC4uZTU4NTg4MyAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2VuZC11c3NkCisrKysgYi90ZXN0L3NlbmQtdXNzZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK0BAIC00Niw3ICs0Niw3IEBAIGlmIHN0YXRlID09ICJpZGxlIjoKKyBwcmludCgiU3RhdGU6ICVzIiAlIChzdGF0ZSkpCisgCisgd2hpbGUgc3RhdGUgPT0gInVzZXItcmVzcG9uc2UiOgorLQlyZXNwb25zZSA9IGlucHV0KCJFbnRlciByZXNwb25zZTogIikKKysJcmVzcG9uc2UgPSByYXdfaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQorIAorIAlwcmludCh1c3NkLlJlc3BvbmQocmVzcG9uc2UsIHRpbWVvdXQ9MTAwKSkKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3NlbmQtdmNhbCBiL3Rlc3Qvc2VuZC12Y2FsCitpbmRleCA1NjZkYWVmLi43ZjgyNzJiIDEwMDc1NQorLS0tIGEvdGVzdC9zZW5kLXZjYWwKKysrKyBiL3Rlc3Qvc2VuZC12Y2FsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC12Y2FyZCBiL3Rlc3Qvc2VuZC12Y2FyZAoraW5kZXggNGRlZGY1MS4uMjUwYjM2ZiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2VuZC12Y2FyZAorKysrIGIvdGVzdC9zZW5kLXZjYXJkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZyBiL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZworaW5kZXggNDlkMWNlMC4uOWZkMzU4YiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZworKysrIGIvdGVzdC9zZXQtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1jYnMtdG9waWNzIGIvdGVzdC9zZXQtY2JzLXRvcGljcworaW5kZXggZGI5NWUxNi4uNzhkNmQ0NCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWNicy10b3BpY3MKKysrKyBiL3Rlc3Qvc2V0LWNicy10b3BpY3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eSBiL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkKK2luZGV4IDVmZjdhNjcuLjY0YTZmYjggMTAwNzU1CistLS0gYS90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5CisrKysgYi90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kgYi90ZXN0L3NldC1mYXN0LWRvcm1hbmN5CitpbmRleCBlZjc3YmNkLi43YmY3NzE1IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQorKysrIGIvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1nc20tYmFuZCBiL3Rlc3Qvc2V0LWdzbS1iYW5kCitpbmRleCBiMzdiY2I1Li4zYzE3YzEwIDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtZ3NtLWJhbmQKKysrKyBiL3Rlc3Qvc2V0LWdzbS1iYW5kCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LW1pYy12b2x1bWUgYi90ZXN0L3NldC1taWMtdm9sdW1lCitpbmRleCBjZDZjNzNmLi5lMGJmZjQ5IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtbWljLXZvbHVtZQorKysrIGIvdGVzdC9zZXQtbWljLXZvbHVtZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1tbXMtZGV0YWlscyBiL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCitpbmRleCA2ZWU1OWZhLi5kMmQwODM4IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtbW1zLWRldGFpbHMKKysrKyBiL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LW1zaXNkbiBiL3Rlc3Qvc2V0LW1zaXNkbgoraW5kZXggYjVmZTgxOS4uMDFmMjg0ZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1zaXNkbgorKysrIGIvdGVzdC9zZXQtbXNpc2RuCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZCBiL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAoraW5kZXggNjk4YzhiNi4uOWUzZTA1OCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAorKysrIGIvdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lIGIvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKK2luZGV4IDZkNGUzMDEuLjc5NjJmMzkgMTAwNzU1CistLS0gYS90ZXN0L3NldC1zcGVha2VyLXZvbHVtZQorKysrIGIvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlIGIvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCitpbmRleCBiNTQ5YWJjLi4yNjY2Y2JkIDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCisrKysgYi90ZXN0L3NldC10ZWNoLXByZWZlcmVuY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdHR5IGIvdGVzdC9zZXQtdHR5CitpbmRleCBlZWQxZmJhLi41M2Q2Yjk5IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtdHR5CisrKysgYi90ZXN0L3NldC10dHkKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdW10cy1iYW5kIGIvdGVzdC9zZXQtdW10cy1iYW5kCitpbmRleCAwYmFlNWM0Li5jMWU2NDQ4IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtdW10cy1iYW5kCisrKysgYi90ZXN0L3NldC11bXRzLWJhbmQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzIGIvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCitpbmRleCAyODhkNGUxLi5hNGVmZTRmIDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCisrKysgYi90ZXN0L3NldC11c2Utc21zLXJlcG9ydHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zd2FwLWNhbGxzIGIvdGVzdC9zd2FwLWNhbGxzCitpbmRleCAwMThhOGQzLi5lZWIyNTdiIDEwMDc1NQorLS0tIGEvdGVzdC9zd2FwLWNhbGxzCisrKysgYi90ZXN0L3N3YXAtY2FsbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UgYi90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQoraW5kZXggNmU4N2U2MS4uMGYxZjU3ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlCisrKysgYi90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtYmFycmluZyBiL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcKK2luZGV4IGVlZGI2OWYuLmJlNGFiNTcgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCisrKysgYi90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nIGIvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZworaW5kZXggNWRiODRkNy4uMDFhNzI5NCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKKysrKyBiL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MgYi90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncworaW5kZXggNDM1NTk0Yy4uNWQ3ZWU0OSAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzCisrKysgYi90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtY2JzIGIvdGVzdC90ZXN0LWNicworaW5kZXggYTVjZWMwNi4uMTNjZGQ4MCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1jYnMKKysrKyBiL3Rlc3QvdGVzdC1jYnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCitAQCAtNzgsNyArNzgsNyBAQCBkZWYgc2V0X3RvcGljcyhjYnMpOgorIAlpbnZhbGlkRGF0YSA9IEZhbHNlOworIAlpbmRleCA9IDAKKyAKKy0JdG9waWNzID0gaW5wdXQoJ0VudGVyIHRoZSB0b3BpYyBJRChzKSB5b3Ugd2FudCB0byByZWdpc3RlciB0bzogJykKKysJdG9waWNzID0gcmF3X2lucHV0KCdFbnRlciB0aGUgdG9waWMgSUQocykgeW91IHdhbnQgdG8gcmVnaXN0ZXIgdG86ICcpCisgCisgCXdoaWxlIGluZGV4IDwgbGVuKHRvcGljcyk6CisgCQlpZiB0b3BpY3NbaW5kZXhdID09ICcsJyBvciB0b3BpY3NbaW5kZXhdID09ICctJzoKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtZ25zcyBiL3Rlc3QvdGVzdC1nbnNzCitpbmRleCA2YWU2NGRiLi5hYTBiMTYwIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWduc3MKKysrKyBiL3Rlc3QvdGVzdC1nbnNzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIGltcG9ydCBzeXMKK0BAIC00MCw3ICs0MCw3IEBAIGRlZiBwcmludF9tZW51KCk6CisgZGVmIHN0ZGluX2hhbmRsZXIoY2hhbm5lbCwgY29uZGl0aW9uLCBnbnNzLCBwYXRoKToKKyAJaW5fa2V5ID0gb3MucmVhZChjaGFubmVsLnVuaXhfZ2V0X2ZkKCksIDE2MCkucnN0cmlwKCkuZGVjb2RlKCdVVEYtOCcpCisgCWlmIGluX2tleSA9PSAnMCc6CistCQl4bWwgPSBpbnB1dCgndHlwZSB0aGUgZWxlbWVudCBhbmQgcHJlc3MgZW50ZXI6ICcpCisrCQl4bWwgPSByYXdfaW5wdXQoJ3R5cGUgdGhlIGVsZW1lbnQgYW5kIHByZXNzIGVudGVyOiAnKQorIAkJdHJ5OgorIAkJCWduc3MuU2VuZFBvc2l0aW9uaW5nRWxlbWVudChkYnVzLlN0cmluZyh4bWwpKQorIAkJCXByaW50KCJvayIpCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZyBiL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcKK2luZGV4IDQzMjg2MmUuLmI5M2ZiZjMgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCisrKysgYi90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtbW9kZW0gYi90ZXN0L3Rlc3QtbW9kZW0KK2luZGV4IGFhMzhiMWYuLjI5ZGJmMTQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtbW9kZW0KKysrKyBiL3Rlc3QvdGVzdC1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24gYi90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KK2luZGV4IDY4YjQzNDcuLmM1YWQ1ODYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KKysrKyBiL3Rlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXBob25lYm9vayBiL3Rlc3QvdGVzdC1waG9uZWJvb2sKK2luZGV4IDQyNjQ2ZDMuLjExNmZkNGYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtcGhvbmVib29rCisrKysgYi90ZXN0L3Rlc3QtcGhvbmVib29rCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzLCBzeXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24gYi90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KK2luZGV4IGQ5NzJhZDMuLmVjYzZhZmIgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KKysrKyBiL3Rlc3QvdGVzdC1wdXNoLW5vdGlmaWNhdGlvbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nIGIvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZworaW5kZXggZjIyZWZkMi4uMTg4YWMxZSAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKKysrKyBiL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNtcyBiL3Rlc3QvdGVzdC1zbXMKK2luZGV4IDMwYWM2NTEuLjQ5OTM1ZTEgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc21zCisrKysgYi90ZXN0L3Rlc3Qtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorICMgLSotIGNvZGluZzogdXRmLTggLSotCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCitAQCAtMTMyLDcgKzEzMiw3IEBAIGRlZiBzdGRpbl9oYW5kbGVyKGNoYW5uZWwsIGNvbmRpdGlvbiwgc21zLCB2YWx1ZSwgbnVtYmVyKToKKyAJCWxvY2sgPSAib24iCisgCQlpZiBpbl9rZXkgPT0gJzAnOgorIAkJCXByaW50X3NlbmRfc21zX21lbnUoKQorLQkJCXNtc190eXBlID0gaW5wdXQoJ1NlbGVjdCBTTVMgdHlwZTogJykKKysJCQlzbXNfdHlwZSA9IHJhd19pbnB1dCgnU2VsZWN0IFNNUyB0eXBlOiAnKQorIAorIAkJCWlmIHNtc190eXBlID09ICcxJzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCB2YWx1ZSkKK0BAIC0xNTAsNDkgKzE1MCw0OSBAQCBkZWYgc3RkaW5faGFuZGxlcihjaGFubmVsLCBjb25kaXRpb24sIHNtcywgdmFsdWUsIG51bWJlcik6CisgCisgCQllbGlmIGluX2tleSA9PSAnMSc6CisgCQkJbWVzc2FnZV9kZWxpdmVyeV9yZXBvcnQoc21zLCAxKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoMSkiICsgdmFsdWUgKworIAkJCQkJCSI6IFVzZURlbGl2ZXJ5UmVwb3J0c1tUUlVFXSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzInOgorIAkJCW1lc3NhZ2VfZGVsaXZlcnlfcmVwb3J0KHNtcywgMCkKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDIpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogVXNlRGVsaXZlcnlSZXBvcnRzW0ZBTFNFXSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzMnOgorIAkJCW1lc3NhZ2Vfc2VydmljZV9jZW50ZXJfYWRkcmVzcyhzbXMsIFNDQSkKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDMpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogU2VydmljZUNlbnRlckFkZHJlc3MiKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICc0JzoKKyAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJwcy1vbmx5IikKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDQpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogQmVhcmVyW3BzLW9ubHldIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnNSc6CisgCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAiY3Mtb25seSIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig1KSAiICsgdmFsdWUgKworIAkJCQkJCSI6IEJlYXJlcltjcy1vbmx5XSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzYnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgInBzLXByZWZlcnJlZCIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig2KSAiICsgdmFsdWUgKworIAkJCQkJCSI6IEJlYXJlcltwcy1wcmVmZXJyZWRdIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnNyc6CisgCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAiY3MtcHJlZmVycmVkIikKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLG51bWJlciwgKCIoNykgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbY3MtcHJlZmVycmVkXSIpKQorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcyBiL3Rlc3QvdGVzdC1zcworaW5kZXggNGNkODczMi4uMmM4MDgwNiAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zcworKysrIGIvdGVzdC90ZXN0LXNzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKK2luZGV4IGRkYWU2ZDMuLjg2YmFjOWIgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYgorKysrIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgoraW5kZXggMDk1ZWI1ZC4uZDMwYmY0ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmCisrKysgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCitpbmRleCA4MTgwNDc0Li5lMGVkMWQxIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MKKysrKyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zdGstbWVudSBiL3Rlc3QvdGVzdC1zdGstbWVudQoraW5kZXggMGNmOGZhMi4uYWMwYTViZCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zdGstbWVudQorKysrIGIvdGVzdC90ZXN0LXN0ay1tZW51CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQkJaW5kZXggKz0gMQorIAorIAkJcHJpbnQoIlxuRGVmYXVsdDogJWQiICUgKGRlZmF1bHQpKQorLQkJc2VsZWN0ID0gaW5wdXQoIkVudGVyIFNlbGVjdGlvbiAodCwgYik6IikKKysJCXNlbGVjdCA9IHJhd19pbnB1dCgiRW50ZXIgU2VsZWN0aW9uICh0LCBiKToiKQorIAorIAkJaWYgc2VsZWN0ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTc1LDcgKzc1LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiRGlzcGxheVRleHQgKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCisgCQlwcmludCgiVXJnZW50OiAoJWQpIiAlICh1cmdlbnQpKQorLQkJa2V5ID0gaW5wdXQoIlByZXNzIHJldHVybiB0byBjbGVhciAoJ3QnIHRlcm1pbmF0ZXMsICIKKysJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGNsZWFyICgndCcgdGVybWluYXRlcywgIgorIAkJCQkJCSInYicgZ29lcyBiYWNrLCAnbicgYnVzeSwgIgorIAkJCQkJCSIndycgcmV0dXJuIGFuZCB3YWl0KToiKQorIAorQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJIaWRlIHR5cGluZzogKCVzKSIgJSAoaGlkZV90eXBpbmcpKQorIAkJcHJpbnQoIkVudGVyIGNoYXJhY3RlcnMsIG1pbjogJWQsIG1heDogJWQ6IiAlIChtaW5fY2hhcnMsCisgCQkJCQkJCQltYXhfY2hhcnMpKQorLQkJdXNlcmluID0gaW5wdXQoIiIpCisrCQl1c2VyaW4gPSByYXdfaW5wdXQoIiIpCisgCisgCQlyZXR1cm4gdXNlcmluCisgCitAQCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkhpZGUgdHlwaW5nOiAoJXMpIiAlIChoaWRlX3R5cGluZykpCisgCQlwcmludCgiRW50ZXIgZGlnaXRzLCBtaW46ICVkLCBtYXg6ICVkOiIgJSAobWluX2NoYXJzLAorIAkJCQkJCQkJbWF4X2NoYXJzKSkKKy0JCXVzZXJpbiA9IGlucHV0KCIndCcgdGVybWluYXRlcywgJ2InIGdvZXMgYmFjazoiKQorKwkJdXNlcmluID0gcmF3X2lucHV0KCIndCcgdGVybWluYXRlcywgJ2InIGdvZXMgYmFjazoiKQorIAorIAkJaWYgdXNlcmluID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTEzNiw3ICsxMzYsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIFJlcXVlc3RLZXkoc2VsZiwgdGl0bGUsIGljb24pOgorIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBLZXkgKHQsIGIpOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIEtleSAodCwgYik6IikKKyAKKyAJCWlmIGtleSA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xNTAsNyArMTUwLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0RGlnaXQoc2VsZiwgdGl0bGUsIGljb24pOgorIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBEaWdpdCAodCwgYik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgRGlnaXQgKHQsIGIpOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTY0LDcgKzE2NCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgUmVxdWVzdFF1aWNrRGlnaXQoc2VsZiwgdGl0bGUsIGljb24pOgorIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJRdWljayBkaWdpdCAoMC05LCAqLCAjLCB0LCBiKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJRdWljayBkaWdpdCAoMC05LCAqLCAjLCB0LCBiKToiKQorIAorIAkJaWYga2V5ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTE3OCw3ICsxNzgsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIFJlcXVlc3RDb25maXJtYXRpb24oc2VsZiwgdGl0bGUsIGljb24pOgorIAkJcHJpbnQoIlRpdGxlOiAoJXMpIiAlICh0aXRsZSkpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIGIsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgYiwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xOTQsNyArMTk0LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBDb25maXJtQ2FsbFNldHVwKHNlbGYsIGluZm8sIGljb24pOgorIAkJcHJpbnQoIkluZm9ybWF0aW9uOiAoJXMpIiAlIChpbmZvKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCB5LCBuKToiKQorIAorIAkJaWYga2V5ID09ICd0JzoKKyAJCQlyYWlzZSBFbmRTZXNzaW9uKCJVc2VyIHdpc2hlcyB0byB0ZXJtaW5hdGUgc2Vzc2lvbiIpCitAQCAtMjA5LDcgKzIwOSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkluZm9ybWF0aW9uOiAoJXMpIiAlIChpbmZvKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorIAkJcHJpbnQoIlVSTCAoJXMpIiAlICh1cmwpKQorLQkJa2V5ID0gaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAoeSwgbik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh5LCBuKToiKQorIAorIAkJaWYga2V5ID09ICd5JzoKKyAJCQlyZXR1cm4gVHJ1ZQorQEAgLTIzMiw3ICsyMzIsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXNpZ25hbC5hbGFybSg1KQorIAorIAkJdHJ5OgorLQkJCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gZW5kIGJlZm9yZSBlbmQgb2YiCisrCQkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyByZXR1cm4gdG8gZW5kIGJlZm9yZSBlbmQgb2YiCisgCQkJCQkJCSAiIHNpbmdsZSB0b25lICh0KToiKQorIAkJCXNpZ25hbC5hbGFybSgwKQorIAorQEAgLTI1MCw3ICsyNTAsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJMb29wVG9uZTogJXMiICUgKHRvbmUpKQorIAkJcHJpbnQoIlRleHQ6ICVzIiAlICh0ZXh0KSkKKyAJCXByaW50KCJJY29uOiAlZCIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gZW5kIGJlZm9yZSB0aW1lb3V0ICIKKysJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgdGltZW91dCAiCisgCQkJCSIoJ3QnIHRlcm1pbmF0ZXMsICd3JyByZXR1cm4gYW5kIHdhaXQpOiIpCisgCisgCQlpZiBrZXkgPT0gJ3cnOgorQEAgLTI3OSw3ICsyNzksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIERpc3BsYXlBY3Rpb24oc2VsZiwgdGV4dCwgaWNvbik6CisgCQlwcmludCgiVGV4dDogKCVzKSIgJSAodGV4dCkpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJQcmVzcyAndCcgdG8gdGVybWluYXRlIHRoZSBzZXNzaW9uICIpCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzICd0JyB0byB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gIikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTI4OSw3ICsyODksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIENvbmZpcm1PcGVuQ2hhbm5lbChzZWxmLCBpbmZvLCBpY29uKToKKyAJCXByaW50KCJPcGVuIGNoYW5uZWwgY29uZmlybWF0aW9uOiAoJXMpIiAlIChpbmZvKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCB5LCBuKToiKQorIAorIAkJaWYga2V5ID09ICd0JzoKKyAJCQlyYWlzZSBFbmRTZXNzaW9uKCJVc2VyIHdpc2hlcyB0byB0ZXJtaW5hdGUgc2Vzc2lvbiIpCitAQCAtMjk5LDcgKzI5OSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJCXJldHVybiBGYWxzZQorIAorIF9kYnVzMnB5ID0geworLQlkYnVzLlN0cmluZyA6IHN0ciwKKysJZGJ1cy5TdHJpbmcgOiB1bmljb2RlLAorIAlkYnVzLlVJbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQxNiA6IGludCwKK0BAIC0zOTYsNyArMzk2LDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAJCWV4Y2VwdDoKKyAJCQlwYXNzCisgCistCQlzZWxlY3QgPSBpbnQoaW5wdXQoIkVudGVyIFNlbGVjdGlvbjogIikpCisrCQlzZWxlY3QgPSBpbnQocmF3X2lucHV0KCJFbnRlciBTZWxlY3Rpb246ICIpKQorIAkJc3RrLlNlbGVjdEl0ZW0oc2VsZWN0LCBwYXRoKQorIAllbGlmIG1vZGUgPT0gJ2FnZW50JzoKKyAJCXBhdGggPSAiL3Rlc3QvYWdlbnQiCitkaWZmIC0tZ2l0IGEvdGVzdC91bmxvY2stcGluIGIvdGVzdC91bmxvY2stcGluCitpbmRleCA2MWY0NzY1Li4xMGI2NjI2IDEwMDc1NQorLS0tIGEvdGVzdC91bmxvY2stcGluCisrKysgYi90ZXN0L3VubG9jay1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vb2Zvbm8gYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL29mb25vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTk3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL29mb25vCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCitEQUVNT049L3Vzci9zYmluL29mb25vZAorUElERklMRT0vdmFyL3J1bi9vZm9ub2QucGlkCitERVNDPSJUZWxlcGhvbnkgZGFlbW9uIgorCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9vZm9ubyBdIDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L29mb25vCitmaQorCitzZXQgLWUKKworZG9fc3RhcnQoKSB7CisJJERBRU1PTgorfQorCitkb19zdG9wKCkgeworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgb2Zvbm9kIC0tcXVpZXQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nICRERVNDIgorCWRvX3N0YXJ0CisJOzsKKyAgc3RvcCkKKwllY2hvICJTdG9wcGluZyAkREVTQyIKKwlkb19zdG9wCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAiUmVzdGFydGluZyAkREVTQyIKKwlkb19zdG9wCisJc2xlZXAgMQorCWRvX3N0YXJ0CisJOzsKKyAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmYxM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjE2LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgb2Zvbm8uaW5jCisKK1NSQ19VUkkgID0gIlwKKyAgJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9uZXR3b3JrLyR7QlBOfS8ke0JQfS50YXIueHogXAorICBmaWxlOi8vb2Zvbm8gXAorICBmaWxlOi8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaCBcCisgIGZpbGU6Ly8wMDAxLWJhY2t0cmFjZS1EaXNhYmxlLWZvci1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImMzMWI1YjU1YTFkNjgzNTRiZmY3NzFkM2VkZjAyODI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwM2I5OGRhZGVjZThiYzgwNGMwYmQxNmI5NmQzZGI1YTNiYjBmODRhZjY0YjNkNjc5MjRkYTJkMWE3NTRiMDciCisKK0NGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EX0dOVV9TT1VSQ0UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWZiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIG9mb25vLmluYworCitTCSA9ICIke1dPUktESVJ9L2dpdCIKK1NSQ1JFViA9ICIxNDU0NGQ1OTk2ODM2ZjYyODYxM2MyY2U1NDQzODBlZTZmYzhmNTE0IgorUFYJID0gIjAuMTItZ2l0JHtTUkNQVn0iCitQUiA9ICJyNSIKKworU1JDX1VSSSAgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9uZXR3b3JrL29mb25vL29mb25vLmdpdCBcCisJICAgIGZpbGU6Ly9vZm9ubyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAke1N9L2Jvb3RzdHJhcAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGMyNWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaApAQCAtMCwwICsxLDY5IEBACitBZGp1c3QgdGVzdCBjYXNlcyB0byB3b3JrIHdpdGggYnVzeWJveC4KKworLSBSZXBsYWNlIGRkIHBhcmFtZXRlciAib2JzIiB3aXRoICJicyIuCistIFJlcGxhY2UgImhlYWQgLTxudW0+IiB3aXRoICJoZWFkIC1uIDxudW0+Ii4KKworU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL2NpcGhlci1zcGVlZC5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2gtNi44cDEub3JpZy9yZWdyZXNzL2NpcGhlci1zcGVlZC5zaAorKysrIG9wZW5zc2gtNi44cDEvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKK0BAIC0xNyw3ICsxNyw3IEBAIGZvciBjIGluIGAke1NTSH0gLVEgY2lwaGVyYDsgZG8gbj0wOyBmb3IKKyAJCXByaW50ZiAiJS02MHMiICIkYy8kbToiCisgCQkoICR7U1NIfSAtbyAnY29tcHJlc3Npb24gbm8nIFwKKyAJCQktRiAkT0JKL3NzaF9wcm94eSAtMiAtbSAkbSAtYyAkYyBzb21laG9zdCBcCistCQkJZXhlYyBzaCAtYyBcJyJkZCBvZj0vZGV2L251bGwgb2JzPTMyayJcJyBcCisrCQkJZXhlYyBzaCAtYyBcJyJkZCBvZj0vZGV2L251bGwgYnM9MzJrIlwnIFwKKyAJCTwgJHtEQVRBfSApIDI+JjEgfCBnZXRieXRlcworIAorIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCitAQCAtNDIsNyArNDIsNyBAQCBmb3IgYyBpbiAkY2lwaGVyczsgZG8KKyAJCXByaW50ZiAiJS02MHMiICIkYzoiCisgCQkoICR7U1NIfSAtbyAnY29tcHJlc3Npb24gbm8nIFwKKyAJCQktRiAkT0JKL3NzaF9wcm94eSAtMSAtYyAkYyBzb21laG9zdCBcCistCQkJZXhlYyBzaCAtYyBcJyJkZCBvZj0vZGV2L251bGwgb2JzPTMyayJcJyBcCisrCQkJZXhlYyBzaCAtYyBcJyJkZCBvZj0vZGV2L251bGwgYnM9MzJrIlwnIFwKKyAJCTwgJHtEQVRBfSApIDI+JjEgfCBnZXRieXRlcworIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgCQkJZmFpbCAic3NoIC0xIGZhaWxlZCB3aXRoIGNpcGhlciAkYyIKK0luZGV4OiBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NoLTYuOHAxLm9yaWcvcmVncmVzcy90cmFuc2Zlci5zaAorKysrIG9wZW5zc2gtNi44cDEvcmVncmVzcy90cmFuc2Zlci5zaAorQEAgLTE1LDcgKzE1LDcgQEAgZm9yIHAgaW4gJHtTU0hfUFJPVE9DT0xTfTsgZG8KKyAJZm9yIHMgaW4gMTAgMTAwIDFrIDMyayA2NGsgMTI4ayAyNTZrOyBkbworIAkJdHJhY2UgInByb3RvICRwIGRkLXNpemUgJHtzfSIKKyAJCXJtIC1mICR7Q09QWX0KKy0JCWRkIGlmPSREQVRBIG9icz0ke3N9IDI+IC9kZXYvbnVsbCB8IFwKKysJCWRkIGlmPSREQVRBIGJzPSR7c30gMj4gL2Rldi9udWxsIHwgXAorIAkJCSR7U1NIfSAtcSAtJHAgLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgImNhdCA+ICR7Q09QWX0iCisgCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAJCQlmYWlsICJzc2ggY2F0ICREQVRBIGZhaWxlZCIKK0luZGV4OiBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MveWVzLWhlYWQuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NoLTYuOHAxLm9yaWcvcmVncmVzcy95ZXMtaGVhZC5zaAorKysrIG9wZW5zc2gtNi44cDEvcmVncmVzcy95ZXMtaGVhZC5zaAorQEAgLTQsNyArNCw3IEBACisgdGlkPSJ5ZXMgcGlwZSBoZWFkIgorIAorIGZvciBwIGluICR7U1NIX1BST1RPQ09MU307IGRvCistCWxpbmVzPWAke1NTSH0gLSRwIC1GICRPQkovc3NoX3Byb3h5IHRoaXNob3N0ICdzaCAtYyAid2hpbGUgdHJ1ZTtkbyBlY2hvIHllcztkb25lIHwgX1BPU0lYMl9WRVJTSU9OPTE5OTIwOSBoZWFkIC0yMDAwIicgfCAoc2xlZXAgMyA7IHdjIC1sKWAKKysJbGluZXM9YCR7U1NIfSAtJHAgLUYgJE9CSi9zc2hfcHJveHkgdGhpc2hvc3QgJ3NoIC1jICJ3aGlsZSB0cnVlO2RvIGVjaG8geWVzO2RvbmUgfCBfUE9TSVgyX1ZFUlNJT049MTk5MjA5IGhlYWQgLW4gMjAwMCInIHwgKHNsZWVwIDMgOyB3YyAtbClgCisgCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorIAkJZmFpbCAieWVzfGhlYWQgdGVzdCBmYWlsZWQiCisgCQlsaW5lcyA9IDA7CitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL2tleS1vcHRpb25zLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3Mva2V5LW9wdGlvbnMuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3Mva2V5LW9wdGlvbnMuc2gKK0BAIC01NCw3ICs1NCw3IEBAIGZvciBwIGluICR7U1NIX1BST1RPQ09MU307IGRvCisgCWZpCisgCisgCXNlZCAncy8uKi9mcm9tPSInIiRmIiciICYvJyAkb3JpZ2tleXMgPiRhdXRoa2V5cworLQlmcm9tPWBoZWFkIC0xICRhdXRoa2V5cyB8IGN1dCAtZjEgLWQgJyAnYAorKwlmcm9tPWBoZWFkIC1uIDEgJGF1dGhrZXlzIHwgY3V0IC1mMSAtZCAnICdgCisgCXZlcmJvc2UgImtleSBvcHRpb24gcHJvdG8gJHAgJGZyb20iCisgCXI9YCR7U1NIfSAtJHAgLXEgLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgJ2VjaG8gdHJ1ZSdgCisgCWlmIFsgIiRyIiA9ICJ0cnVlIiBdOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ0YTM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvaW5pdApAQCAtMCwwICsxLDExNSBAQAorIyEgL2Jpbi9zaAorc2V0IC1lCisKK1BJREZJTEU9L3Zhci9ydW4vc3NoZC5waWQKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworIyAvZXRjL2luaXQuZC9zc2g6IHN0YXJ0IGFuZCBzdG9wIHRoZSBPcGVuQlNEICJzZWN1cmUgc2hlbGwiIGRhZW1vbgorCit0ZXN0IC14IC91c3Ivc2Jpbi9zc2hkIHx8IGV4aXQgMAorKCAvdXNyL3NiaW4vc3NoZCAtXD8gMj4mMSB8IGdyZXAgLXEgT3BlblNTSCApIDI+L2Rldi9udWxsIHx8IGV4aXQgMAorCisjIC9ldGMvZGVmYXVsdC9zc2ggbWF5IHNldCBTWVNDT05GRElSIGFuZCBTU0hEX09QVFMKK2lmIHRlc3QgLWYgL2V0Yy9kZWZhdWx0L3NzaDsgdGhlbgorICAgIC4gL2V0Yy9kZWZhdWx0L3NzaAorZmkKKworWyAteiAiJFNZU0NPTkZESVIiIF0gJiYgU1lTQ09ORkRJUj0vZXRjL3NzaAorbWtkaXIgLXAgJFNZU0NPTkZESVIKKworSE9TVF9LRVlfUlNBPSRTWVNDT05GRElSL3NzaF9ob3N0X3JzYV9rZXkKK0hPU1RfS0VZX0RTQT0kU1lTQ09ORkRJUi9zc2hfaG9zdF9kc2Ffa2V5CitIT1NUX0tFWV9FQ0RTQT0kU1lTQ09ORkRJUi9zc2hfaG9zdF9lY2RzYV9rZXkKK0hPU1RfS0VZX0VEMjU1MTk9JFNZU0NPTkZESVIvc3NoX2hvc3RfZWQyNTUxOV9rZXkKKworY2hlY2tfZm9yX25vX3N0YXJ0KCkgeworICAgICMgZm9yZ2V0IGl0IGlmIHdlJ3JlIHRyeWluZyB0byBzdGFydCwgYW5kIC9ldGMvc3NoL3NzaGRfbm90X3RvX2JlX3J1biBleGlzdHMKKyAgICBpZiBbIC1lICRTWVNDT05GRElSL3NzaGRfbm90X3RvX2JlX3J1biBdOyB0aGVuCisJZWNobyAiT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIG5vdCBpbiB1c2UgKCRTWVNDT05GRElSL3NzaGRfbm90X3RvX2JlX3J1bikiCisJZXhpdCAwCisgICAgZmkKK30KKworY2hlY2tfcHJpdnNlcF9kaXIoKSB7CisgICAgIyBDcmVhdGUgdGhlIFByaXZTZXAgZW1wdHkgZGlyIGlmIG5lY2Vzc2FyeQorICAgIGlmIFsgISAtZCAvdmFyL3J1bi9zc2hkIF07IHRoZW4KKwlta2RpciAvdmFyL3J1bi9zc2hkCisJY2htb2QgMDc1NSAvdmFyL3J1bi9zc2hkCisgICAgZmkKK30KKworY2hlY2tfY29uZmlnKCkgeworCS91c3Ivc2Jpbi9zc2hkIC10IHx8IGV4aXQgMQorfQorCitjaGVja19rZXlzKCkgeworCSMgY3JlYXRlIGtleXMgaWYgbmVjZXNzYXJ5CisJaWYgWyAhIC1mICRIT1NUX0tFWV9SU0EgXTsgdGhlbgorCQllY2hvICIgIGdlbmVyYXRpbmcgc3NoIFJTQSBrZXkuLi4iCisJCXNzaC1rZXlnZW4gLXEgLWYgJEhPU1RfS0VZX1JTQSAtTiAnJyAtdCByc2EKKwlmaQorCWlmIFsgISAtZiAkSE9TVF9LRVlfRUNEU0EgXTsgdGhlbgorCQllY2hvICIgIGdlbmVyYXRpbmcgc3NoIEVDRFNBIGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRUNEU0EgLU4gJycgLXQgZWNkc2EKKwlmaQorCWlmIFsgISAtZiAkSE9TVF9LRVlfRFNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBEU0Ega2V5Li4uIgorCQlzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9EU0EgLU4gJycgLXQgZHNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0VEMjU1MTkgXTsgdGhlbgorCQllY2hvICIgIGdlbmVyYXRpbmcgc3NoIEVEMjU1MTkga2V5Li4uIgorCQlzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9FRDI1NTE5IC1OICcnIC10IGVkMjU1MTkKKwlmaQorfQorCitleHBvcnQgUEFUSD0iJHtQQVRIOiskUEFUSDp9L3Vzci9zYmluOi9zYmluIgorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJY2hlY2tfZm9yX25vX3N0YXJ0CisJZWNobyAiU3RhcnRpbmcgT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyOiBzc2hkIgorCWNoZWNrX2tleXMKKwljaGVja19wcml2c2VwX2RpcgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1wICRQSURGSUxFIC14IC91c3Ivc2Jpbi9zc2hkIC0tICRTU0hEX09QVFMKKyAgICAgICAgZWNobyAiZG9uZS4iCisJOzsKKyAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAiU3RvcHBpbmcgT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyOiBzc2hkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1wICRQSURGSUxFIC14IC91c3Ivc2Jpbi9zc2hkCisgICAgICAgIGVjaG8gIi4iCisJOzsKKworICByZWxvYWR8Zm9yY2UtcmVsb2FkKQorCWNoZWNrX2Zvcl9ub19zdGFydAorCWNoZWNrX2tleXMKKwljaGVja19jb25maWcKKyAgICAgICAgZWNobyAtbiAiUmVsb2FkaW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcidzIGNvbmZpZ3VyYXRpb24iCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXAgJFBJREZJTEUgLXMgMSAteCAvdXNyL3NiaW4vc3NoZAorCWVjaG8gIi4iCisJOzsKKworICByZXN0YXJ0KQorICAJY2hlY2tfa2V5cworCWNoZWNrX2NvbmZpZworICAgICAgICBlY2hvIC1uICJSZXN0YXJ0aW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtcCAkUElERklMRSAtLW9rbm9kbyAteCAvdXNyL3NiaW4vc3NoZAorCWNoZWNrX2Zvcl9ub19zdGFydAorCWNoZWNrX3ByaXZzZXBfZGlyCisJc2xlZXAgMgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1wICRQSURGSUxFIC14IC91c3Ivc2Jpbi9zc2hkIC0tICRTU0hEX09QVFMKKwllY2hvICIuIgorCTs7CisKKyAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4vc3NoZAorCWV4aXQgJD8KKyAgOzsKKworICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9zc2gge3N0YXJ0fHN0b3B8c3RhdHVzfHJlbG9hZHxmb3JjZS1yZWxvYWR8cmVzdGFydH0iCisJZXhpdCAxCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2NGMwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9ydW4tcHRlc3QKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworZXhwb3J0IFRFU1RfU0hFTEw9c2gKKworY2QgcmVncmVzcworbWFrZSAtayAuT0JKRElSPWBwd2RgIC5DVVJESVI9YHB3ZGAgU1VETz0ic3VkbyIgdGVzdHMgXAorICAgICAgICB8IHNlZCAtZSAncy9ec2tpcHBlZC9TS0lQOiAvZycgLWUgJ3MvXm9rIC9QQVNTOiAvZycgLWUgJ3MvXmZhaWxlZC9GQUlMOiAvZycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaF9jb25maWcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTE5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hfY29uZmlnCkBAIC0wLDAgKzEsNDggQEAKKyMJJE9wZW5CU0Q6IHNzaF9jb25maWcsdiAxLjI4IDIwMTMvMDkvMTYgMTE6MzU6NDMgc3RoZW4gRXhwICQKKworIyBUaGlzIGlzIHRoZSBzc2ggY2xpZW50IHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFNlZQorIyBzc2hfY29uZmlnKDUpIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhpcyBmaWxlIHByb3ZpZGVzIGRlZmF1bHRzIGZvcgorIyB1c2VycywgYW5kIHRoZSB2YWx1ZXMgY2FuIGJlIGNoYW5nZWQgaW4gcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlcworIyBvciBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisjIENvbmZpZ3VyYXRpb24gZGF0YSBpcyBwYXJzZWQgYXMgZm9sbG93czoKKyMgIDEuIGNvbW1hbmQgbGluZSBvcHRpb25zCisjICAyLiB1c2VyLXNwZWNpZmljIGZpbGUKKyMgIDMuIHN5c3RlbS13aWRlIGZpbGUKKyMgQW55IGNvbmZpZ3VyYXRpb24gdmFsdWUgaXMgb25seSBjaGFuZ2VkIHRoZSBmaXJzdCB0aW1lIGl0IGlzIHNldC4KKyMgVGh1cywgaG9zdC1zcGVjaWZpYyBkZWZpbml0aW9ucyBzaG91bGQgYmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgZGVmYXVsdHMgYXQgdGhlIGVuZC4KKworIyBTaXRlLXdpZGUgZGVmYXVsdHMgZm9yIHNvbWUgY29tbW9ubHkgdXNlZCBvcHRpb25zLiAgRm9yIGEgY29tcHJlaGVuc2l2ZQorIyBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zLCB0aGVpciBtZWFuaW5ncyBhbmQgZGVmYXVsdHMsIHBsZWFzZSBzZWUgdGhlCisjIHNzaF9jb25maWcoNSkgbWFuIHBhZ2UuCisKK0hvc3QgKgorICBGb3J3YXJkQWdlbnQgeWVzCisgIEZvcndhcmRYMTEgeWVzCisjICAgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gbm8KKyMgICBSU0FBdXRoZW50aWNhdGlvbiB5ZXMKKyMgICBQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHllcworIyAgIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vCisjICAgR1NTQVBJQXV0aGVudGljYXRpb24gbm8KKyMgICBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIG5vCisjICAgQmF0Y2hNb2RlIG5vCisjICAgQ2hlY2tIb3N0SVAgeWVzCisjICAgQWRkcmVzc0ZhbWlseSBhbnkKKyMgICBDb25uZWN0VGltZW91dCAwCisjICAgU3RyaWN0SG9zdEtleUNoZWNraW5nIGFzaworIyAgIElkZW50aXR5RmlsZSB+Ly5zc2gvaWRlbnRpdHkKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkX3JzYQorIyAgIElkZW50aXR5RmlsZSB+Ly5zc2gvaWRfZHNhCisjICAgUG9ydCAyMgorIyAgIFByb3RvY29sIDIsMQorIyAgIENpcGhlciAzZGVzCisjICAgQ2lwaGVycyBhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0cixhcmNmb3VyMjU2LGFyY2ZvdXIxMjgsYWVzMTI4LWNiYywzZGVzLWNiYworIyAgIE1BQ3MgaG1hYy1tZDUsaG1hYy1zaGExLHVtYWMtNjRAb3BlbnNzaC5jb20saG1hYy1yaXBlbWQxNjAKKyMgICBFc2NhcGVDaGFyIH4KKyMgICBUdW5uZWwgbm8KKyMgICBUdW5uZWxEZXZpY2UgYW55OmFueQorIyAgIFBlcm1pdExvY2FsQ29tbWFuZCBubworIyAgIFZpc3VhbEhvc3RLZXkgbm8KKyMgICBQcm94eUNvbW1hbmQgc3NoIC1xIC1XICVoOiVwIGdhdGV3YXkuZXhhbXBsZS5jb20KKyMgICBSZWtleUxpbWl0IDFHIDFoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODgyZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZApAQCAtMCwwICsxLDEwIEBACisjJVBBTS0xLjAKKworYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgcmVxdWlyZWQgICAgIHBhbV9ub2xvZ2luLnNvCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCitzZXNzaW9uICAgIG9wdGlvbmFsICAgICBwYW1fa2V5aW5pdC5zbyBmb3JjZSByZXZva2UKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fbG9naW51aWQuc28KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZC5zb2NrZXQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmMzOWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZC5zb2NrZXQKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitDb25mbGljdHM9c3NoZC5zZXJ2aWNlCisKK1tTb2NrZXRdCitFeGVjU3RhcnRQcmU9QEJBU0VfQklORElSQC9ta2RpciAtcCAvdmFyL3J1bi9zc2hkCitMaXN0ZW5TdHJlYW09MjIKK0FjY2VwdD15ZXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1zb2NrZXRzLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZEAuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyZDY4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRALnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1PcGVuU1NIIFBlci1Db25uZWN0aW9uIERhZW1vbgorV2FudHM9c3NoZGdlbmtleXMuc2VydmljZQorQWZ0ZXI9c3NoZGdlbmtleXMuc2VydmljZQorCitbU2VydmljZV0KK0V4ZWNTdGFydD0tQFNCSU5ESVJAL3NzaGQgLWkKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1N0YW5kYXJkSW5wdXQ9c29ja2V0CitTdGFuZGFyZEVycm9yPXN5c2xvZworS2lsbE1vZGU9cHJvY2VzcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jb25maWcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDhiZDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jb25maWcKQEAgLTAsMCArMSwxMzMgQEAKKyMJJE9wZW5CU0Q6IHNzaGRfY29uZmlnLHYgMS44MCAyMDA4LzA3LzAyIDAyOjI0OjE4IGRqbSBFeHAgJAorCisjIFRoaXMgaXMgdGhlIHNzaGQgc2VydmVyIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFNlZQorIyBzc2hkX2NvbmZpZyg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworIyBUaGlzIHNzaGQgd2FzIGNvbXBpbGVkIHdpdGggUEFUSD0vdXNyL2JpbjovYmluOi91c3Ivc2Jpbjovc2JpbgorCisjIFRoZSBzdHJhdGVneSB1c2VkIGZvciBvcHRpb25zIGluIHRoZSBkZWZhdWx0IHNzaGRfY29uZmlnIHNoaXBwZWQgd2l0aAorIyBPcGVuU1NIIGlzIHRvIHNwZWNpZnkgb3B0aW9ucyB3aXRoIHRoZWlyIGRlZmF1bHQgdmFsdWUgd2hlcmUKKyMgcG9zc2libGUsIGJ1dCBsZWF2ZSB0aGVtIGNvbW1lbnRlZC4gIFVuY29tbWVudGVkIG9wdGlvbnMgY2hhbmdlIGEKKyMgZGVmYXVsdCB2YWx1ZS4KKworI1BvcnQgMjIKKyNBZGRyZXNzRmFtaWx5IGFueQorI0xpc3RlbkFkZHJlc3MgMC4wLjAuMAorI0xpc3RlbkFkZHJlc3MgOjoKKworIyBUaGUgZGVmYXVsdCByZXF1aXJlcyBleHBsaWNpdCBhY3RpdmF0aW9uIG9mIHByb3RvY29sIDEKK1Byb3RvY29sIDIKKworIyBIb3N0S2V5IGZvciBwcm90b2NvbCB2ZXJzaW9uIDEKKyNIb3N0S2V5IC9ldGMvc3NoL3NzaF9ob3N0X2tleQorIyBIb3N0S2V5cyBmb3IgcHJvdG9jb2wgdmVyc2lvbiAyCisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9yc2Ffa2V5CisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9kc2Ffa2V5CisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9lY2RzYV9rZXkKKyNIb3N0S2V5IC9ldGMvc3NoL3NzaF9ob3N0X2VkMjU1MTlfa2V5CisKKyMgTGlmZXRpbWUgYW5kIHNpemUgb2YgZXBoZW1lcmFsIHZlcnNpb24gMSBzZXJ2ZXIga2V5CisjS2V5UmVnZW5lcmF0aW9uSW50ZXJ2YWwgMWgKKyNTZXJ2ZXJLZXlCaXRzIDEwMjQKKworIyBDaXBoZXJzIGFuZCBrZXlpbmcKKyNSZWtleUxpbWl0IGRlZmF1bHQgbm9uZQorCisjIExvZ2dpbmcKKyMgb2Jzb2xldGVzIFF1aWV0TW9kZSBhbmQgRmFzY2lzdExvZ2dpbmcKKyNTeXNsb2dGYWNpbGl0eSBBVVRICisjTG9nTGV2ZWwgSU5GTworCisjIEF1dGhlbnRpY2F0aW9uOgorCisjTG9naW5HcmFjZVRpbWUgMm0KKyNQZXJtaXRSb290TG9naW4geWVzCisjU3RyaWN0TW9kZXMgeWVzCisjTWF4QXV0aFRyaWVzIDYKKyNNYXhTZXNzaW9ucyAxMAorCisjUlNBQXV0aGVudGljYXRpb24geWVzCisjUHVia2V5QXV0aGVudGljYXRpb24geWVzCisKKyMgVGhlIGRlZmF1bHQgaXMgdG8gY2hlY2sgYm90aCAuc3NoL2F1dGhvcml6ZWRfa2V5cyBhbmQgLnNzaC9hdXRob3JpemVkX2tleXMyCisjIGJ1dCB0aGlzIGlzIG92ZXJyaWRkZW4gc28gaW5zdGFsbGF0aW9ucyB3aWxsIG9ubHkgY2hlY2sgLnNzaC9hdXRob3JpemVkX2tleXMKK0F1dGhvcml6ZWRLZXlzRmlsZSAuc3NoL2F1dGhvcml6ZWRfa2V5cworCisjQXV0aG9yaXplZFByaW5jaXBhbHNGaWxlIG5vbmUKKworI0F1dGhvcml6ZWRLZXlzQ29tbWFuZCBub25lCisjQXV0aG9yaXplZEtleXNDb21tYW5kVXNlciBub2JvZHkKKworIyBGb3IgdGhpcyB0byB3b3JrIHlvdSB3aWxsIGFsc28gbmVlZCBob3N0IGtleXMgaW4gL2V0Yy9zc2gvc3NoX2tub3duX2hvc3RzCisjUmhvc3RzUlNBQXV0aGVudGljYXRpb24gbm8KKyMgc2ltaWxhciBmb3IgcHJvdG9jb2wgdmVyc2lvbiAyCisjSG9zdGJhc2VkQXV0aGVudGljYXRpb24gbm8KKyMgQ2hhbmdlIHRvIHllcyBpZiB5b3UgZG9uJ3QgdHJ1c3Qgfi8uc3NoL2tub3duX2hvc3RzIGZvcgorIyBSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiBhbmQgSG9zdGJhc2VkQXV0aGVudGljYXRpb24KKyNJZ25vcmVVc2VyS25vd25Ib3N0cyBubworIyBEb24ndCByZWFkIHRoZSB1c2VyJ3Mgfi8ucmhvc3RzIGFuZCB+Ly5zaG9zdHMgZmlsZXMKKyNJZ25vcmVSaG9zdHMgeWVzCisKKyMgVG8gZGlzYWJsZSB0dW5uZWxlZCBjbGVhciB0ZXh0IHBhc3N3b3JkcywgY2hhbmdlIHRvIG5vIGhlcmUhCisjUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMKKyNQZXJtaXRFbXB0eVBhc3N3b3JkcyBubworCisjIENoYW5nZSB0byBubyB0byBkaXNhYmxlIHMva2V5IHBhc3N3b3JkcworQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiBubworCisjIEtlcmJlcm9zIG9wdGlvbnMKKyNLZXJiZXJvc0F1dGhlbnRpY2F0aW9uIG5vCisjS2VyYmVyb3NPckxvY2FsUGFzc3dkIHllcworI0tlcmJlcm9zVGlja2V0Q2xlYW51cCB5ZXMKKyNLZXJiZXJvc0dldEFGU1Rva2VuIG5vCisKKyMgR1NTQVBJIG9wdGlvbnMKKyNHU1NBUElBdXRoZW50aWNhdGlvbiBubworI0dTU0FQSUNsZWFudXBDcmVkZW50aWFscyB5ZXMKKworIyBTZXQgdGhpcyB0byAneWVzJyB0byBlbmFibGUgUEFNIGF1dGhlbnRpY2F0aW9uLCBhY2NvdW50IHByb2Nlc3NpbmcsCisjIGFuZCBzZXNzaW9uIHByb2Nlc3NpbmcuIElmIHRoaXMgaXMgZW5hYmxlZCwgUEFNIGF1dGhlbnRpY2F0aW9uIHdpbGwKKyMgYmUgYWxsb3dlZCB0aHJvdWdoIHRoZSBDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uIGFuZAorIyBQYXNzd29yZEF1dGhlbnRpY2F0aW9uLiAgRGVwZW5kaW5nIG9uIHlvdXIgUEFNIGNvbmZpZ3VyYXRpb24sCisjIFBBTSBhdXRoZW50aWNhdGlvbiB2aWEgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiBtYXkgYnlwYXNzCisjIHRoZSBzZXR0aW5nIG9mICJQZXJtaXRSb290TG9naW4gd2l0aG91dC1wYXNzd29yZCIuCisjIElmIHlvdSBqdXN0IHdhbnQgdGhlIFBBTSBhY2NvdW50IGFuZCBzZXNzaW9uIGNoZWNrcyB0byBydW4gd2l0aG91dAorIyBQQU0gYXV0aGVudGljYXRpb24sIHRoZW4gZW5hYmxlIHRoaXMgYnV0IHNldCBQYXNzd29yZEF1dGhlbnRpY2F0aW9uCisjIGFuZCBDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uIHRvICdubycuCisjVXNlUEFNIG5vCisKKyNBbGxvd0FnZW50Rm9yd2FyZGluZyB5ZXMKKyNBbGxvd1RjcEZvcndhcmRpbmcgeWVzCisjR2F0ZXdheVBvcnRzIG5vCisjWDExRm9yd2FyZGluZyBubworI1gxMURpc3BsYXlPZmZzZXQgMTAKKyNYMTFVc2VMb2NhbGhvc3QgeWVzCisjUGVybWl0VFRZIHllcworI1ByaW50TW90ZCB5ZXMKKyNQcmludExhc3RMb2cgeWVzCisjVENQS2VlcEFsaXZlIHllcworI1VzZUxvZ2luIG5vCitVc2VQcml2aWxlZ2VTZXBhcmF0aW9uIHNhbmRib3ggIyBEZWZhdWx0IGZvciBuZXcgaW5zdGFsbGF0aW9ucy4KKyNQZXJtaXRVc2VyRW52aXJvbm1lbnQgbm8KK0NvbXByZXNzaW9uIG5vCitDbGllbnRBbGl2ZUludGVydmFsIDE1CitDbGllbnRBbGl2ZUNvdW50TWF4IDQKKyNVc2VETlMgeWVzCisjUGlkRmlsZSAvdmFyL3J1bi9zc2hkLnBpZAorI01heFN0YXJ0dXBzIDEwOjMwOjEwMAorI1Blcm1pdFR1bm5lbCBubworI0Nocm9vdERpcmVjdG9yeSBub25lCisjVmVyc2lvbkFkZGVuZHVtIG5vbmUKKworIyBubyBkZWZhdWx0IGJhbm5lciBwYXRoCisjQmFubmVyIG5vbmUKKworIyBvdmVycmlkZSBkZWZhdWx0IG9mIG5vIHN1YnN5c3RlbXMKK1N1YnN5c3RlbQlzZnRwCS91c3IvbGliZXhlYy9zZnRwLXNlcnZlcgorCisjIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyBzZXR0aW5ncyBvbiBhIHBlci11c2VyIGJhc2lzCisjTWF0Y2ggVXNlciBhbm9uY3ZzCisjCVgxMUZvcndhcmRpbmcgbm8KKyMJQWxsb3dUY3BGb3J3YXJkaW5nIG5vCisjCVBlcm1pdFRUWSBubworIwlGb3JjZUNvbW1hbmQgY3ZzIHNlcnZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZGdlbmtleXMuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRnZW5rZXlzLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1MDg2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRnZW5rZXlzLnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1PcGVuU1NIIEtleSBHZW5lcmF0aW9uCitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfcnNhX2tleQorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvc3NoL3NzaF9ob3N0X2RzYV9rZXkKK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL3NzaC9zc2hfaG9zdF9lY2RzYV9rZXkKK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL3NzaC9zc2hfaG9zdF9lZDI1NTE5X2tleQorCitbU2VydmljZV0KK0V4ZWNTdGFydD1AQklORElSQC9zc2gta2V5Z2VuIC1BCitUeXBlPW9uZXNob3QKK1JlbWFpbkFmdGVyRXhpdD15ZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3ZvbGF0aWxlcy45OV9zc2hkIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvdm9sYXRpbGVzLjk5X3NzaGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkMmFmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3ZvbGF0aWxlcy45OV9zc2hkCkBAIC0wLDAgKzEsMiBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9zc2hkIG5vbmUKK2Ygcm9vdCByb290IDA2NDQgL3Zhci9sb2cvbGFzdGxvZyBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjFwMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuMXAxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZWI0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjFwMS5iYgpAQCAtMCwwICsxLDE1NCBAQAorU1VNTUFSWSA9ICJTZWN1cmUgcmxvZ2luL3JzaC9yY3AvdGVsbmV0IHJlcGxhY2VtZW50IgorREVTQ1JJUFRJT04gPSAiU2VjdXJlIHJsb2dpbi9yc2gvcmNwL3RlbG5ldCByZXBsYWNlbWVudCAoT3BlblNTSCkgXAorU3NoIChTZWN1cmUgU2hlbGwpIGlzIGEgcHJvZ3JhbSBmb3IgbG9nZ2luZyBpbnRvIGEgcmVtb3RlIG1hY2hpbmUgXAorYW5kIGZvciBleGVjdXRpbmcgY29tbWFuZHMgb24gYSByZW1vdGUgbWFjaGluZS4iCitIT01FUEFHRSA9ICJodHRwOi8vb3BlbnNzaC5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9ZTMyNjA0NTY1N2U4NDI1NDFkM2YzNWFhZGE0NDI1MDciCisKK0RFUEVORFMgPSAiemxpYiBvcGVuc3NsIgorREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAub3BlbmJzZC5vcmcvcHViL09wZW5CU0QvT3BlblNTSC9wb3J0YWJsZS9vcGVuc3NoLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hkX2NvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hfY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vc3NoZC5zb2NrZXQgXAorICAgICAgICAgICBmaWxlOi8vc3NoZEAuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hkZ2Vua2V5cy5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcy45OV9zc2hkIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vc3NoZCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3MDk3MzZiYzhhOGMyNTNiYzRlZWI0ODI5ODg4Y2E1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZjMGE2ZDJkMWQwNjNkNWM2NmRmZmQ5NTI0OTNkMGNkYTI1NmNhZDIwNGY2ODFkZTBmODRlZjg1YjJhZDg0MjgiCisKK2luaGVyaXQgdXNlcmFkZCB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHN5c3RlbWQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgorVVNFUkFERF9QQVJBTV8ke1BOfS1zc2hkID0gIi0tc3lzdGVtIC0tbm8tY3JlYXRlLWhvbWUgLS1ob21lLWRpciAvdmFyL3J1bi9zc2hkIC0tc2hlbGwgL2Jpbi9mYWxzZSAtLXVzZXItZ3JvdXAgc3NoZCIKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0tc3NoZCIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1zc2hkID0gInNzaGQiCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfS1zc2hkID0gImRlZmF1bHRzIDkiCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tc3NoZCIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zc2hkID0gInNzaGQuc29ja2V0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcHRlc3QKKworIyBMRlMgc3VwcG9ydDoKK0NGTEFHUyArPSAiLURfX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKKyMgbG9naW4gcGF0aCBpcyBoYXJkY29kZWQgaW4gc3NoZAorRVhUUkFfT0VDT05GID0gIidMT0dJTl9QUk9HUkFNPSR7YmFzZV9iaW5kaXJ9L2xvZ2luJyBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS13aXRoLXBhbScsICctLXdpdGhvdXQtcGFtJywgZCl9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtemxpYi12ZXJzaW9uLWNoZWNrIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcHJpdnNlcC1wYXRoPS92YXIvcnVuL3NzaGQgXAorICAgICAgICAgICAgICAgIC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9L3NzaCBcCisgICAgICAgICAgICAgICAgLS13aXRoLXhhdXRoPS91c3IvYmluL3hhdXRoIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3RyaXAgXAorICAgICAgICAgICAgICAgICIKKworIyBTaW5jZSB3ZSBkbyBub3QgZGVwZW5kIG9uIGxpYmJzZCwgd2UgZG8gbm90IHdhbnQgY29uZmlndXJlIHRvIHVzZSBpdAorIyBqdXN0IGJlY2F1c2UgaXQgZmluZHMgbGlidXRpbC5oLiAgQnV0LCBzcGVjaWZ5aW5nIC0tZGlzYWJsZS1saWJ1dGlsCisjIGNhdXNlcyBjb21waWxlIGVycm9ycywgc28uLi4KK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfYnNkX2xpYnV0aWxfaD1ubyBhY19jdl9oZWFkZXJfbGlidXRpbF9oPW5vIgorCisjIHBhc3N3ZCBwYXRoIGlzIGhhcmRjb2RlZCBpbiBzc2hkCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9QQVRIX1BBU1NXRF9QUk9HPSR7YmluZGlyfS9wYXNzd2QiCisKKyMgV2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24gbGliYmxvY2tmaWxlCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX21haWxsb2NrX2g9bm8iCisKKyMgVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHVjbGliYyBiZWNhdXNlIGluY2x1ZGluZyBzdGRpby5oCisjIHB1bGxzIGluIHB0aHJlYWRzLmggYW5kIGNhdXNlcyBjb25mbGljdHMgaW4gZnVuY3Rpb24gcHJvdG90eXBlcy4KKyMgVGhpcyByZXN1bHRzIGluIGNvbXBpbGF0aW9uIGZhaWx1cmUsIHNvIHVubGVzcyB0aGlzIGlzIGZpeGVkLAorIyBkaXNhYmxlIHBhbSBmb3IgdWNsaWJjLgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYz0iIC0td2l0aG91dC1wYW0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlleHBvcnQgTEQ9IiR7Q0N9IgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRfY29uZmlnICR7Qn0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoX2NvbmZpZyAke0J9LworCWlmIFsgISAtZSBhY2luY2x1ZGUubTQgLWEgLWUgYWNsb2NhbC5tNCBdOyB0aGVuCisJCWNwIGFjbG9jYWwubTQgYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICAgICAgIyBza2lwIHJlZ3Jlc3MvdW5pdHRlc3RzLyBiaW5hcmllczogdGhpcyB3aWxsIHNpbGVudGx5IHNraXAKKyAgICAgICAgIyB1bml0dGVzdHMgaW4gcnVuLXB0ZXN0cyB3aGljaCBpcyBnb29kIGJlY2F1c2UgdGhleSBhcmUgc28gc2xvdy4KKyAgICAgICAgb2VfcnVubWFrZSByZWdyZXNzL21vZHBpcGUgcmVncmVzcy9zZXR1aWQtYWxsb3dlZCByZWdyZXNzL25ldGNhdAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gMDc1NSAke1dPUktESVJ9L3NzaGQgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZAorCQlzZWQgLWkgLWUgJ3M6I1VzZVBBTSBubzpVc2VQQU0geWVzOicgJHtXT1JLRElSfS9zc2hkX2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkCisJcm0gLWYgJHtEfSR7YmluZGlyfS9zbG9naW4gJHtEfSR7ZGF0YWRpcn0vU3NoLmJpbgorCXJtZGlyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bi9zc2hkICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biAke0R9JHtsb2NhbHN0YXRlZGlyfQorCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS92b2xhdGlsZXMuOTlfc3NoZCAke0R9LyR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOTlfc3NoZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2NvbnRyaWIvc3NoLWNvcHktaWQgJHtEfSR7YmluZGlyfQorCisJIyBDcmVhdGUgY29uZmlnIGZpbGVzIGZvciByZWFkLW9ubHkgcm9vdGZzCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zc2gKKwlpbnN0YWxsIC1tIDY0NCAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJc2VkIC1pICcvSG9zdEtleS9kJyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKwllY2hvICJIb3N0S2V5IC92YXIvcnVuL3NzaC9zc2hfaG9zdF9yc2Ffa2V5IiA+PiAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKwllY2hvICJIb3N0S2V5IC92YXIvcnVuL3NzaC9zc2hfaG9zdF9kc2Ffa2V5IiA+PiAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKwllY2hvICJIb3N0S2V5IC92YXIvcnVuL3NzaC9zc2hfaG9zdF9lY2RzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZEAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRnZW5rZXlzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3NoZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCXNlZCAtaSAtZSAic3xeU0ZUUFNFUlZFUj0uKnxTRlRQU0VSVkVSPSR7bGliZGlyfS8ke1BOfS9zZnRwLXNlcnZlcnwiIHJlZ3Jlc3MvdGVzdC1leGVjLnNoCisJY3AgLXIgcmVncmVzcyAke0R9JHtQVEVTVF9QQVRIfQorfQorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitQQUNLQUdFUyA9KyAiJHtQTn0ta2V5Z2VuICR7UE59LXNjcCAke1BOfS1zc2ggJHtQTn0tc3NoZCAke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIiCitGSUxFU18ke1BOfS1zY3AgPSAiJHtiaW5kaXJ9L3NjcC4ke0JQTn0iCitGSUxFU18ke1BOfS1zc2ggPSAiJHtiaW5kaXJ9L3NzaC4ke0JQTn0gJHtzeXNjb25mZGlyfS9zc2gvc3NoX2NvbmZpZyIKK0ZJTEVTXyR7UE59LXNzaGQgPSAiJHtzYmluZGlyfS9zc2hkICR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbSIKK0ZJTEVTXyR7UE59LXNzaGQgKz0gIiR7c3lzY29uZmRpcn0vc3NoL21vZHVsaSAke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyAke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X3NzaGQgJHtzeXNjb25mZGlyfS9wYW0uZC9zc2hkIgorRklMRVNfJHtQTn0tc2Z0cCA9ICIke2JpbmRpcn0vc2Z0cCIKK0ZJTEVTXyR7UE59LXNmdHAtc2VydmVyID0gIiR7bGliZXhlY2Rpcn0vc2Z0cC1zZXJ2ZXIiCitGSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS9zc2gqICR7bGliZXhlY2Rpcn0vc3NoKiIKK0ZJTEVTXyR7UE59LWtleWdlbiA9ICIke2JpbmRpcn0vc3NoLWtleWdlbiIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXNjcCAke1BOfS1zc2ggJHtQTn0tc3NoZCAke1BOfS1rZXlnZW4iCitSREVQRU5EU18ke1BOfS1zc2hkICs9ICIke1BOfS1rZXlnZW4gJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtLXBsdWdpbi1rZXlpbml0IHBhbS1wbHVnaW4tbG9naW51aWQnLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LXNmdHAgJHtQTn0tbWlzYyAke1BOfS1zZnRwLXNlcnZlciBtYWtlIgorCitSUFJPVklERVNfJHtQTn0tc3NoID0gInNzaCIKK1JQUk9WSURFU18ke1BOfS1zc2hkID0gInNzaGQiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiZHJvcGJlYXIiCitSQ09ORkxJQ1RTXyR7UE59LXNzaGQgPSAiZHJvcGJlYXIiCitSQ09ORkxJQ1RTXyR7UE59LWtleWdlbiA9ICJzc2gta2V5Z2VuIgorCitDT05GRklMRVNfJHtQTn0tc3NoZCA9ICIke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyIKK0NPTkZGSUxFU18ke1BOfS1zc2ggPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoX2NvbmZpZyIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiOTAiCitBTFRFUk5BVElWRV8ke1BOfS1zY3AgPSAic2NwIgorQUxURVJOQVRJVkVfJHtQTn0tc3NoID0gInNzaCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGNmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC5pbmMKQEAgLTAsMCArMSwyMTQgQEAKK1NVTU1BUlkgPSAiU2VjdXJlIFNvY2tldCBMYXllciIKK0RFU0NSSVBUSU9OID0gIlNlY3VyZSBTb2NrZXQgTGF5ZXIgKFNTTCkgYmluYXJ5IGFuZCByZWxhdGVkIGNyeXB0b2dyYXBoaWMgdG9vbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvbmV3cy92dWxuZXJhYmlsaXRpZXMuaHRtbCIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorCisjICJvcGVuc3NsIHwgU1NMZWF5IiBkdWFsIGxpY2Vuc2UKK0xJQ0VOU0UgPSAib3BlbnNzbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWY5YThmOTY4MTA3MzQ1ZTBiNzVhYThjMmVjYWE3ZWM4IgorCitERVBFTkRTID0gInBlcmwtbmF0aXZlLXJ1bnRpbWUiCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIG9wZW5zc2wtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL29wZW5zc2wtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAiCitTID0gIiR7V09SS0RJUn0vb3BlbnNzbC0ke1BWfSIKKworUEFDS0FHRUNPTkZJR1twZXJsXSA9ICIsLCwiCisKK0FSX2FwcGVuZCA9ICIgciIKKyMgQXZvaWQgYmluYXJpZXMgYmVpbmcgbWFya2VkIGFzIHJlcXVpcmluZyBhbiBleGVjdXRhYmxlIHN0YWNrIHNpbmNlIGl0IAorIyBkb2Vzbid0KHdoaWNoIGNhdXNlcyBhbmQgdGhpcyBjYXVzZXMgaXNzdWVzIHdpdGggU0VMaW51eAorQ0ZMQUcgPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctRExfRU5ESUFOJywgJy1EQl9FTkRJQU4nLCBkKX0gXAorCS1EVEVSTUlPICR7Q0ZMQUdTfSAtV2FsbCAtV2EsLS1ub2V4ZWNzdGFjayIKKworIyAtMDIgZG9lcyBub3Qgd29yayBvbiBtaXBzZWw6IHNzaCBoYW5ncyB3aGVuIGl0IHRyaWVzIHRvIHJlYWQgL2Rldi91cmFuZG9tCitDRkxBR19tdHgtMSA6PSAiJHtAJyR7Q0ZMQUd9Jy5yZXBsYWNlKCctTzInLCAnJyl9IgorQ0ZMQUdfbXR4LTIgOj0gIiR7QCcke0NGTEFHfScucmVwbGFjZSgnLU8yJywgJycpfSIKKworZXhwb3J0IERJUlMgPSAiY3J5cHRvIHNzbCBhcHBzIgorZXhwb3J0IEVYX0xJQlMgPSAiLWxnY2MgLWxkbCIKK2V4cG9ydCBBUyA9ICIke0NDfSAtYyIKKworaW5oZXJpdCBwa2djb25maWcgc2l0ZWluZm8gbXVsdGlsaWJfaGVhZGVyIHB0ZXN0CisKK1BBQ0tBR0VTID0rICJsaWJjcnlwdG8gbGlic3NsICR7UE59LW1pc2Mgb3BlbnNzbC1jb25mIgorRklMRVNfbGliY3J5cHRvID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTfSIKK0ZJTEVTX2xpYnNzbCA9ICIke2xpYmRpcn0vbGlic3NsLnNvLioiCitGSUxFU18ke1BOfSA9KyAiICR7bGliZGlyfS9zc2wvKiIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3NzbC9taXNjICR7YmluZGlyfS9jX3JlaGFzaCIKK1JERVBFTkRTXyR7UE59LW1pc2MgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncGVybCcsICdwZXJsJywgJycsIGQpfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vbGliY3J5cHRvJHtTT0xJQlNERVZ9IgorCisjIEFkZCB0aGUgb3BlbnNzbC5jbmYgZmlsZSB0byB0aGUgb3BlbnNzbC1jb25mIHBhY2thZ2UuICBNYWtlIHRoZSBsaWJjcnlwdG8KKyMgcGFja2FnZSBSUkVDT01NRU5EUyBvbiB0aGlzIHBhY2thZ2UuICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBjb25maWd1cmF0aW9uCisjIGZpbGUgdG8gYmUgaW5zdGFsbGVkIGZvciBib3RoIHRoZSBiYXNlIG9wZW5zc2wgcGFja2FnZSBhbmQgdGhlIGxpYmNyeXB0bworIyBwYWNrYWdlIHNpbmNlIHRoZSBiYXNlIG9wZW5zc2wgcGFja2FnZSBkZXBlbmRzIG9uIHRoZSBsaWJjcnlwdG8gcGFja2FnZS4KK0ZJTEVTX29wZW5zc2wtY29uZiA9ICIke2xpYmRpcn0vc3NsL29wZW5zc2wuY25mIgorQ09ORkZJTEVTX29wZW5zc2wtY29uZiA9ICIke2xpYmRpcn0vc3NsL29wZW5zc2wuY25mIgorUlJFQ09NTUVORFNfbGliY3J5cHRvICs9ICJvcGVuc3NsLWNvbmYiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0tbWlzYyBtYWtlIHBlcmwgcGVybC1tb2R1bGUtZmlsZWhhbmRsZSBiYyIKKworIyBSZW1vdmUgdGhpcyB0byBlbmFibGUgU1NMdjMuIFNTTHYzIGlzIGRlZmF1bHRlZCB0byBkaXNhYmxlZCBkdWUgdG8gdGhlIFBPT0RMRQorIyB2dWxuZXJhYmlsaXR5CitFWFRSQV9PRUNPTkYgPSAiIC1uby1zc2wzIgorCitkb19jb25maWd1cmVfcHJlcGVuZF9kYXJ3aW4gKCkgeworCXNlZCAtaSAtZSAnL3ZlcnNpb24tc2NyaXB0PW9wZW5zc2xcLmxkL2QnIENvbmZpZ3VyZQorfQorCitkb19jb25maWd1cmUgKCkgeworCWNkIHV0aWwKKwlwZXJsIHBlcmxwYXRoLnBsICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfQorCWNkIC4uCisJbG4gLXNmIGFwcHMvb3BlbnNzbC5wb2QgY3J5cHRvL2NyeXB0by5wb2Qgc3NsL3NzbC5wb2QgZG9jLworCisJb3M9JHtIT1NUX09TfQorCWNhc2UgJG9zIGluCisJbGludXgtdWNsaWJjIHxcCisJbGludXgtdWNsaWJjZWFiaSB8XAorCWxpbnV4LWdudWVhYmkgfFwKKwlsaW51eC11Y2xpYmNzcGUgfFwKKwlsaW51eC1nbnVzcGUgfFwKKwlsaW51eC1tdXNsKikKKwkJb3M9bGludXgKKwkJOzsKKwkJKikKKwkJOzsKKwllc2FjCisJdGFyZ2V0PSIkb3MtJHtIT1NUX0FSQ0h9IgorCWNhc2UgJHRhcmdldCBpbgorCWxpbnV4LWFybSkKKwkJdGFyZ2V0PWxpbnV4LWFybXY0CisJCTs7CisJbGludXgtYXJtZWIpCisJCXRhcmdldD1saW51eC1lbGYtYXJtZWIKKwkJOzsKKwlsaW51eC1hYXJjaDY0KikKKwkJdGFyZ2V0PWxpbnV4LWdlbmVyaWM2NAorCQk7OworCWxpbnV4LXNoMykKKwkJdGFyZ2V0PWRlYmlhbi1zaDMKKwkJOzsKKwlsaW51eC1zaDQpCisJCXRhcmdldD1kZWJpYW4tc2g0CisJCTs7CisJbGludXgtaTQ4NikKKwkJdGFyZ2V0PWRlYmlhbi1pMzg2LWk0ODYKKwkJOzsKKwlsaW51eC1pNTg2IHwgbGludXgtdmlhYzMpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNTg2CisJCTs7CisJbGludXgtaTY4NikKKwkJdGFyZ2V0PWRlYmlhbi1pMzg2LWk2ODYvY21vdgorCQk7OworCWxpbnV4LWdudXgzMi14ODZfNjQpCisJCXRhcmdldD1saW51eC14MzIKKwkJOzsKKwlsaW51eC1nbnU2NC14ODZfNjQpCisJCXRhcmdldD1saW51eC14ODZfNjQKKwkJOzsKKwlsaW51eC1taXBzKQorCQl0YXJnZXQ9ZGViaWFuLW1pcHMKKwkJOzsKKwlsaW51eC1taXBzZWwpCisJCXRhcmdldD1kZWJpYW4tbWlwc2VsCisJCTs7CisgICAgICAgIGxpbnV4LSotbWlwczY0KQorICAgICAgICAgICAgICAgdGFyZ2V0PWxpbnV4LW1pcHMKKyAgICAgICAgICAgICAgICA7OworCWxpbnV4LW1pY3JvYmxhemUqKQorCQl0YXJnZXQ9bGludXgtZ2VuZXJpYzMyCisJCTs7CisJbGludXgtcG93ZXJwYykKKwkJdGFyZ2V0PWxpbnV4LXBwYworCQk7OworCWxpbnV4LXBvd2VycGM2NCkKKwkJdGFyZ2V0PWxpbnV4LXBwYzY0CisJCTs7CisJbGludXgtc3VwZXJzcGFyYykKKwkJdGFyZ2V0PWxpbnV4LXNwYXJjdjgKKwkJOzsKKwlsaW51eC1zcGFyYykKKwkJdGFyZ2V0PWxpbnV4LXNwYXJjdjgKKwkJOzsKKwlkYXJ3aW4taTM4NikKKwkJdGFyZ2V0PWRhcndpbi1pMzg2LWNjCisJCTs7CisJZXNhYworCSMgaW5qZWN0IG1hY2hpbmUtc3BlY2lmaWMgZmxhZ3MKKwlzZWQgLWkgLWUgInN8XlwoXCIkdGFyZ2V0XCIsXHMqXCJbXjpdXCtcKTpcKFteOl1cK1wpfFwxOiR7Q0ZMQUd9fGciIENvbmZpZ3VyZQorICAgICAgICB1c2VwcmVmaXg9JHtwcmVmaXh9CisgICAgICAgIGlmIFsgIngkdXNlcHJlZml4IiA9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgdXNlcHJlZml4PS8KKyAgICAgICAgZmkgICAgICAgIAorCXBlcmwgLi9Db25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHNoYXJlZCAtLXByZWZpeD0kdXNlcHJlZml4IC0tb3BlbnNzbGRpcj0ke2xpYmRpcn0vc3NsIC0tbGliZGlyPWBiYXNlbmFtZSAke2xpYmRpcn1gICR0YXJnZXQKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisgICAgc2VkIC1pICdzL1woKE9QRU5TU0w9XCkiLioiL1wxIm9wZW5zc2wiLycgTWFrZWZpbGUKK30KKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZQorfQorCitkb19jb21waWxlX3B0ZXN0ICgpIHsKKwlvZV9ydW5tYWtlIGJ1aWxkdGVzdAorfQorCitkb19pbnN0YWxsICgpIHsKKwkjIENyZWF0ZSAke0R9LyR7cHJlZml4fSB0byBmaXggcGFyYWxsZWwgaXNzdWVzCisJbWtkaXIgLXAgJHtEfS8ke3ByZWZpeH0vCisKKwlvZV9ydW5tYWtlIElOU1RBTExfUFJFRklYPSIke0R9IiBNQU5ESVI9IiR7bWFuZGlyfSIgaW5zdGFsbAorCisJb2VfbGliaW5zdGFsbCAtc28gbGliY3J5cHRvICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1zbyBsaWJzc2wgJHtEfSR7bGliZGlyfQorCisJIyBNb3ZpbmcgbGliY3J5cHRvIHRvIC9saWIKKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfS8ke2Jhc2VfbGliZGlyfS8KKwkJbXYgJHtEfSR7bGliZGlyfS9saWJjcnlwdG8qICR7RH0ke2Jhc2VfbGliZGlyfS8KKwkJc2VkIC1pIHMjbGliZGlyPVwkXHtleGVjX3ByZWZpeFx9XC9saWIjbGliZGlyPSR7YmFzZV9saWJkaXJ9IyAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGliY3J5cHRvLnBjCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKwljcCAtLWRlcmVmZXJlbmNlIC1SIGluY2x1ZGUvb3BlbnNzbCAke0R9JHtpbmNsdWRlZGlyfQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIG9wZW5zc2wvb3BlbnNzbGNvbmYuaAorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCAncGVybCcsICcnLCBkKX0iID0gInBlcmwiIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7U30vdG9vbHMvY19yZWhhc2ggJHtEfSR7YmluZGlyfQorCQlzZWQgLWkgLWUgJzFzLC4qLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS9jX3JlaGFzaAorCQlzZWQgLWkgLWUgJzFzLC4qLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbAorCQlzZWQgLWkgLWUgJzFzLC4qLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy90c2dldAorCQkjIFRoZSBjX3JlaGFzaCB1dGlsaXR5IGlzbid0IGluc3RhbGxlZCBieSB0aGUgbm9ybWFsIGluc3RhbGxhdGlvbiBwcm9jZXNzLgorCWVsc2UKKwkJcm0gLWYgJHtEfSR7YmluZGlyfS9jX3JlaGFzaAorCQlybSAtZiAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL0NBLnBsICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvdHNnZXQKKwlmaQorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwljcCAtciBNYWtlZmlsZSB0ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgY2VydHMgJHtEfSR7UFRFU1RfUEFUSH0KKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJbG4gLXNmIC91c3IvbGliL3NzbC9taXNjL0NBLnNoICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJbG4gLXNmIC91c3IvbGliL3NzbC9vcGVuc3NsLmNuZiAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJbG4gLXNmIC91c3IvYmluL29wZW5zc2wgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJY3AgYXBwcy9zZXJ2ZXIyLnBlbSAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAorCWluc3RhbGwgdXRpbC9vcGVuc3Nsd3JhcC5zaCAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCisJaW5zdGFsbCB1dGlsL3NobGliX3dyYXAuc2ggICAgICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vb3BlbnNzbCBcCisJICAgIE9QRU5TU0xfQ09ORj0ke2xpYmRpcn0vc3NsL29wZW5zc2wuY25mIFwKKwkgICAgU1NMX0NFUlRfRElSPSR7bGliZGlyfS9zc2wvY2VydHMgXAorCSAgICBTU0xfQ0VSVF9GSUxFPSR7bGliZGlyfS9zc2wvY2VydC5wZW0gXAorCSAgICBPUEVOU1NMX0VOR0lORVM9JHtsaWJkaXJ9L3NzbC9lbmdpbmVzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDk0NDZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvTWFrZWZpbGVzLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK0FkZCAnYnVpbGR0ZXN0JyBhbmQgJ3J1bnRlc3QnIHRhcmdldHMgdG8gTWFrZWZpbGUsIHRvIGJ1aWxkIGFuZCBydW4gdGVzdHMKK2Nyb3NzLWNvbXBpbGVkLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitJbmRleDogb3BlbnNzbC0xLjAuMi9NYWtlZmlsZS5vcmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvTWFrZWZpbGUub3JnCisrKysgb3BlbnNzbC0xLjAuMi9NYWtlZmlsZS5vcmcKK0BAIC00NTEsOCArNDUxLDE2IEBAIHJlaGFzaC50aW1lOiBjZXJ0cyBhcHBzCisgdGVzdDogICB0ZXN0cworIAorIHRlc3RzOiByZWhhc2gKKysJJChNQUtFKSBidWlsZHRlc3QKKysJJChNQUtFKSBydW50ZXN0CisrCisrYnVpbGR0ZXN0OgorKwlAKGNkIHRlc3QgJiYgXAorKwkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIGV4ZSBhcHBzKTsKKysKKytydW50ZXN0OgorIAlAKGNkIHRlc3QgJiYgZWNobyAidGVzdGluZy4uLiIgJiYgXAorLQkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIHRlc3RzICk7CisrCSQoQ0xFQVJFTlYpICYmICQoTUFLRSkgLWUgJChCVUlMREVOVikgVE9QPS4uIFRFU1RTPSckKFRFU1RTKScgT1BFTlNTTF9ERUJVR19NRU1PUlk9b24gT1BFTlNTTF9DT05GPS4uL2FwcHMvb3BlbnNzbC5jbmYgYWxsdGVzdHMgKTsKKyAJT1BFTlNTTF9DT05GPWFwcHMvb3BlbnNzbC5jbmYgdXRpbC9vcGVuc3Nsd3JhcC5zaCB2ZXJzaW9uIC1hCisgCisgcmVwb3J0OgorSW5kZXg6IG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy90ZXN0L01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMi90ZXN0L01ha2VmaWxlCitAQCAtMTM3LDcgKzEzNyw3IEBAIHRlc3RzOglleGUgYXBwcyAkKFRFU1RTKQorIGFwcHM6CisgCUAoY2QgLi47ICQoTUFLRSkgRElSUz1hcHBzIGFsbCkKKyAKKy1hbGx0ZXN0czogXAorK2FsbC10ZXN0cz0gXAorIAl0ZXN0X2RlcyB0ZXN0X2lkZWEgdGVzdF9zaGEgdGVzdF9tZDQgdGVzdF9tZDUgdGVzdF9obWFjIFwKKyAJdGVzdF9tZDIgdGVzdF9tZGMyIHRlc3Rfd3AgXAorIAl0ZXN0X3JtZCB0ZXN0X3JjMiB0ZXN0X3JjNCB0ZXN0X3JjNSB0ZXN0X2JmIHRlc3RfY2FzdCB0ZXN0X2FlcyBcCitAQCAtMTQ4LDYgKzE0OCwxMSBAQCBhbGx0ZXN0czogXAorIAl0ZXN0X2pwYWtlIHRlc3Rfc3JwIHRlc3RfY21zIHRlc3Rfb2NzcCB0ZXN0X3YzbmFtZSB0ZXN0X2hlYXJ0YmVhdCBcCisgCXRlc3RfY29uc3RhbnRfdGltZQorIAorK2FsbHRlc3RzOgorKwlAKGZvciBpIGluICQoYWxsLXRlc3RzKTsgZG8gXAorKwkoICQoTUFLRSkgJCRpICYmIGVjaG8gIlBBU1M6ICQkaSIgKSB8fCBlY2hvICJGQUlMOiAkJGkiOyBcCisrCWRvbmUpCisrCisgdGVzdF9ldnA6ICQoRVZQVEVTVCkkKEVYRV9FWFQpIGV2cHRlc3RzLnR4dAorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKEVWUFRFU1QpIGV2cHRlc3RzLnR4dAorIAorQEAgLTIxMyw3ICsyMTgsNyBAQCB0ZXN0X3g1MDk6IC4uL2FwcHMvb3BlbnNzbCQoRVhFX0VYVCkgdHg1CisgCWVjaG8gdGVzdCBzZWNvbmQgeDUwOXYzIGNlcnRpZmljYXRlCisgCXNoIC4vdHg1MDkgdjMtY2VydDIucGVtIDI+L2Rldi9udWxsCisgCistdGVzdF9yc2E6ICQoUlNBVEVTVCkkKEVYRV9FWFQpIC4uL2FwcHMvb3BlbnNzbCQoRVhFX0VYVCkgdHJzYSB0ZXN0cnNhLnBlbQorK3Rlc3RfcnNhOiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRyc2EgdGVzdHJzYS5wZW0KKyAJQHNoIC4vdHJzYSAyPi9kZXYvbnVsbAorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKFJTQVRFU1QpCisgCitAQCAtMzEzLDExICszMTgsMTEgQEAgdGVzdF90c2E6IC4uL2FwcHMvb3BlbnNzbCQoRVhFX0VYVCkgdGVzdAorIAkgIHNoIC4vdGVzdHRzYTsgXAorIAlmaQorIAorLXRlc3RfaWdlOiAkKElHRVRFU1QpJChFWEVfRVhUKQorK3Rlc3RfaWdlOgorIAlAZWNobyAiVGVzdCBJR0UgbW9kZSIKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChJR0VURVNUKQorIAorLXRlc3RfanBha2U6ICQoSlBBS0VURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X2pwYWtlOgorIAlAZWNobyAiVGVzdCBKUEFLRSIKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChKUEFLRVRFU1QpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NvbmZpZ3VyZS10YXJnZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWU3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgbnVtYmVyIG9mIGNvbG9ucyBhcmUgaW1wb3J0YW50IDopCisKKworLS0tCisgQ29uZmlndXJlIHwgICAxNiArKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykKKworSW5kZXg6IG9wZW5zc2wtMS4wLjJhL0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJhLm9yaWcvQ29uZmlndXJlCisrKysgb3BlbnNzbC0xLjAuMmEvQ29uZmlndXJlCitAQCAtNDQzLDYgKzQ0MywyMyBAQCBteSAldGFibGU9KAorICJsaW51eC1hbHBoYS1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCisgImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCisgCisrIAorKyMgTGludXggb24gQVJNCisrImxpbnV4LWVsZi1hcm0iLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtZWxmLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWdudWVhYmktYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWdudWVhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtdWNsaWJjZWFiaS1hcm0iLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtdWNsaWJjZWFiaS1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKworKyJsaW51eC1hdnIzMiIsIiRFTlZ7J0NDJ306LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuIiwKKysKKysjIyMjIExpbnV4IG9uIE1JUFMvTUlQUzY0CisrImxpbnV4LW1pcHMiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1taXBzNjQiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLW1hYmk9NjQgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LW1pcHM2NGVsIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1tYWJpPTY0IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1taXBzZWwiLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKworICMgQW5kcm9pZDogbGludXgtKiBidXQgd2l0aG91dCBwb2ludGVycyB0byBoZWFkZXJzIGFuZCBsaWJzLgorICJhbmRyb2lkIiwiZ2NjOi1tYW5kcm9pZCAtSVwkKEFORFJPSURfREVWKS9pbmNsdWRlIC1CXCQoQU5EUk9JRF9ERVYpL2xpYiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisgImFuZHJvaWQteDg2IiwiZ2NjOi1tYW5kcm9pZCAtSVwkKEFORFJPSURfREVWKS9pbmNsdWRlIC1CXCQoQU5EUk9JRF9ERVYpL2xpYiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306Ii5ldmFse215ICRhc209JHt4ODZfZWxmX2FzbX07JGFzbT1+cy86ZWxmLzphbmRyb2lkLzskYXNtfS4iOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY3J5cHRvX3VzZV9iaWdpbnRfaW5feDg2LTY0X3BlcmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jcnlwdG9fdXNlX2JpZ2ludF9pbl94ODYtNjRfcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzk3YWYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY3J5cHRvX3VzZV9iaWdpbnRfaW5feDg2LTY0X3BlcmwucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdGVyYW0gU3RhdHVzOiBCYWNrcG9ydAorCitXaGVuIGJ1aWxkaW5nIG9uIHgzMiBzeXN0ZW1zIHdoZXJlIHRoZSBkZWZhdWx0IHR5cGUgaXMgMzJiaXQsIG1ha2Ugc3VyZQord2UgY2FuIHRyYW5zcGFyZW50bHkgcmVwcmVzZW50IDY0Yml0IGludGVnZXJzLiAgT3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoCitidWlsZCBlcnJvcnMgbGlrZToKKy91c3IvYmluL3BlcmwgYXNtL2doYXNoLXg4Nl82NC5wbCBlbGYgPiBnaGFzaC14ODZfNjQucworSW50ZWdlciBvdmVyZmxvdyBpbiBoZXhhZGVjaW1hbCBudW1iZXIgYXQgYXNtLy4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIGxpbmUgMjAxLCA8PiBsaW5lIDg5MC4KKy4uLgorZ2hhc2gteDg2XzY0LnM6IEFzc2VtYmxlciBtZXNzYWdlczoKK2doYXNoLXg4Nl82NC5zOjg5MDogRXJyb3I6IGp1bmsgJy4xNTQ3MzM1NTQ3OTk5NWUrMTknIGFmdGVyIGV4cHJlc3Npb24KKworV2UgZG9uJ3QgZW5hYmxlIHRoaXMgZ2xvYmFsbHkgYXMgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgd2UnZCBnZXQKKzMyYml0IHZhbHVlcyBpbnRlcnByZXRlZCBhcyB1bnNpZ25lZCB3aGVuIHdlIG5lZWQgdGhlbSBhcyBzaWduZWQuCisKK1JlcG9ydGVkLWJ5OiBCZXJ0cmFuZCBKYWNxdWluIDxiZXJ0cmFuZEBqYWNxdWluLmJ6aD4KK1VSTDogaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvNTQyNjE4CisKK1NpZ25lZC1vZmYtQnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCitJbmRleDogb3BlbnNzbC0xLjAuMmEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMmEub3JpZy9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKKysrKyBvcGVuc3NsLTEuMC4yYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKK0BAIC0xOTQsNyArMTk0LDEwIEBAIG15ICVnbG9iYWxzOworICAgICB9CisgICAgIHN1YiBvdXQgeworICAgICAJbXkgJHNlbGYgPSBzaGlmdDsKKy0KKysJIyBXaGVuIGJ1aWxkaW5nIG9uIHgzMiBBQklzLCB0aGUgZXhwYW5kZWQgaGV4IHZhbHVlIG1pZ2h0IGJlIHRvbworKwkjIGJpZyB0byBmaXQgaW50byAzMmJpdHMuIEVuYWJsZSB0cmFuc3BhcmVudCA2NGJpdCBzdXBwb3J0IGhlcmUKKysJIyBzbyB3ZSBjYW4gc2FmZWx5IHByaW50IGl0IG91dC4KKysJdXNlIGJpZ2ludDsKKyAJaWYgKCRnYXMpIHsKKyAJICAgICMgU29sYXJpcyAvdXNyL2Njcy9iaW4vYXMgY2FuJ3QgaGFuZGxlIG11bHRpcGxpY2F0aW9ucworIAkgICAgIyBpbiAkc2VsZi0+e3ZhbHVlfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlNTRkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSA4M2YzMThkNjhiYmRhYjFjYTg5OGM5NDU3NmE4MzhjYzk3ZGY0NzAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHVkd2lnIE51c3NlbCA8bHVkd2lnLm51c3NlbEBzdXNlLmRlPgorRGF0ZTogV2VkLCAyMSBBcHIgMjAxMCAxNTo1MjoxMCArMDIwMAorU3ViamVjdDogW1BBVENIXSBhbHNvIGNyZWF0ZSBvbGQgaGFzaCBmb3IgY29tcGF0aWJpbGl0eQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK2RpZmYgLS1naXQgYS90b29scy9jX3JlaGFzaC5pbiBiL3Rvb2xzL2NfcmVoYXNoLmluCitpbmRleCBiMDg2ZmY5Li5iNzc3ZDc5IDEwMDY0NAorLS0tIGEvdG9vbHMvY19yZWhhc2guaW4KKysrKyBiL3Rvb2xzL2NfcmVoYXNoLmluCitAQCAtOCw4ICs4LDYgQEAgbXkgJHByZWZpeDsKKyAKKyBteSAkb3BlbnNzbCA9ICRFTlZ7T1BFTlNTTH0gfHwgIm9wZW5zc2wiOworIG15ICRwd2Q7CistbXkgJHg1MDloYXNoID0gIi1zdWJqZWN0X2hhc2giOworLW15ICRjcmxoYXNoID0gIi1oYXNoIjsKKyBteSAkdmVyYm9zZSA9IDA7CisgbXkgJHN5bWxpbmtfZXhpc3RzPWV2YWwge3N5bWxpbmsoIiIsIiIpOyAxfTsKKyBteSAkcmVtb3ZlbGlua3MgPSAxOworQEAgLTE4LDEwICsxNiw3IEBAIG15ICRyZW1vdmVsaW5rcyA9IDE7Cisgd2hpbGUgKCAkQVJHVlswXSA9fiAvXi0vICkgeworICAgICBteSAkZmxhZyA9IHNoaWZ0IEBBUkdWOworICAgICBsYXN0IGlmICggJGZsYWcgZXEgJy0tJyk7CistICAgIGlmICggJGZsYWcgZXEgJy1vbGQnKSB7CistCSAgICAkeDUwOWhhc2ggPSAiLXN1YmplY3RfaGFzaF9vbGQiOworLQkgICAgJGNybGhhc2ggPSAiLWhhc2hfb2xkIjsKKy0gICAgfSBlbHNpZiAoICRmbGFnIGVxICctaCcpIHsKKysgICAgaWYgKCAkZmxhZyBlcSAnLWgnKSB7CisgCSAgICBoZWxwKCk7CisgICAgIH0gZWxzaWYgKCAkZmxhZyBlcSAnLW4nICkgeworIAkgICAgJHJlbW92ZWxpbmtzID0gMDsKK0BAIC0xMTMsNyArMTA4LDkgQEAgc3ViIGhhc2hfZGlyIHsKKyAJCQluZXh0OworIAkJfQorIAkJbGlua19oYXNoX2NlcnQoJGZuYW1lKSBpZigkY2VydCk7CisrCQlsaW5rX2hhc2hfY2VydF9vbGQoJGZuYW1lKSBpZigkY2VydCk7CisgCQlsaW5rX2hhc2hfY3JsKCRmbmFtZSkgaWYoJGNybCk7CisrCQlsaW5rX2hhc2hfY3JsX29sZCgkZm5hbWUpIGlmKCRjcmwpOworIAl9CisgfQorIAorQEAgLTE0Niw2ICsxNDMsNyBAQCBzdWIgY2hlY2tfZmlsZSB7CisgCisgc3ViIGxpbmtfaGFzaF9jZXJ0IHsKKyAJCW15ICRmbmFtZSA9ICRfWzBdOworKwkJbXkgJHg1MDloYXNoID0gJF9bMV0gfHwgJy1zdWJqZWN0X2hhc2gnOworIAkJJGZuYW1lID1+IHMvJy8nXFwnJy9nOworIAkJbXkgKCRoYXNoLCAkZnByaW50KSA9IGAiJG9wZW5zc2wiIHg1MDkgJHg1MDloYXNoIC1maW5nZXJwcmludCAtbm9vdXQgLWluICIkZm5hbWUiYDsKKyAJCWNob21wICRoYXNoOworQEAgLTE3NiwxMSArMTc0LDIxIEBAIHN1YiBsaW5rX2hhc2hfY2VydCB7CisgCQkkaGFzaGxpc3R7JGhhc2h9ID0gJGZwcmludDsKKyB9CisgCisrc3ViIGxpbmtfaGFzaF9jZXJ0X29sZCB7CisrCQlsaW5rX2hhc2hfY2VydCgkX1swXSwgJy1zdWJqZWN0X2hhc2hfb2xkJyk7CisrfQorKworK3N1YiBsaW5rX2hhc2hfY3JsX29sZCB7CisrCQlsaW5rX2hhc2hfY3JsKCRfWzBdLCAnLWhhc2hfb2xkJyk7CisrfQorKworKworICMgU2FtZSBhcyBhYm92ZSBleGNlcHQgZm9yIGEgQ1JMLiBDUkwgbGlua3MgYXJlIG9mIHRoZSBmb3JtIDxoYXNoPi5yPG4+CisgCisgc3ViIGxpbmtfaGFzaF9jcmwgeworIAkJbXkgJGZuYW1lID0gJF9bMF07CisrCQlteSAkY3JsaGFzaCA9ICRfWzFdIHx8ICItaGFzaCI7CisgCQkkZm5hbWUgPX4gcy8nLydcXCcnL2c7CisgCQlteSAoJGhhc2gsICRmcHJpbnQpID0gYCIkb3BlbnNzbCIgY3JsICRjcmxoYXNoIC1maW5nZXJwcmludCAtbm9vdXQgLWluICckZm5hbWUnYDsKKyAJCWNob21wICRoYXNoOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTRkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY2EucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0wLjkuOG0vYXBwcy9DQS5wbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMC45LjhtLm9yaWcvYXBwcy9DQS5wbC5pbgkyMDA2LTA0LTI4IDAwOjI4OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMC45LjhtL2FwcHMvQ0EucGwuaW4JMjAxMC0wMi0yNyAwMDozNjo1MS4wMDAwMDAwMDAgKzAwMDAKK0BAIC02NSw2ICs2NSw3IEBACisgZm9yZWFjaCAoQEFSR1YpIHsKKyAJaWYgKCAvXigtXD98LWh8LWhlbHApJC8gKSB7CisgCSAgICBwcmludCBTVERFUlIgInVzYWdlOiBDQSAtbmV3Y2VydHwtbmV3cmVxfC1uZXdyZXEtbm9kZXN8LW5ld2NhfC1zaWdufC12ZXJpZnlcbiI7CisrCSAgICBwcmludCBTVERFUlIgInVzYWdlOiBDQSAtc2lnbmNlcnQgY2VydGZpbGUga2V5ZmlsZXwtbmV3Y2VydHwtbmV3cmVxfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworIAkgICAgZXhpdCAwOworIAl9IGVsc2lmICgvXi1uZXdjZXJ0JC8pIHsKKyAJICAgICMgY3JlYXRlIGEgY2VydGlmaWNhdGUKK0BAIC0xNjUsNiArMTY2LDcgQEAKKyAJfSBlbHNlIHsKKyAJICAgIHByaW50IFNUREVSUiAiVW5rbm93biBhcmcgJF9cbiI7CisgCSAgICBwcmludCBTVERFUlIgInVzYWdlOiBDQSAtbmV3Y2VydHwtbmV3cmVxfC1uZXdyZXEtbm9kZXN8LW5ld2NhfC1zaWdufC12ZXJpZnlcbiI7CisrCSAgICBwcmludCBTVERFUlIgInVzYWdlOiBDQSAtc2lnbmNlcnQgY2VydGZpbGUga2V5ZmlsZXwtbmV3Y2VydHwtbmV3cmVxfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworIAkgICAgZXhpdCAxOworIAl9CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDQzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMi9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvQ29uZmlndXJlCisrKysgb3BlbnNzbC0xLjAuMi9Db25maWd1cmUKK0BAIC0xMDcsNiArMTA3LDEwIEBAIG15ICRnY2NfZGV2dGVhbV93YXJuID0gIi1XYWxsIC1wZWRhbnRpYworIAorIG15ICRjbGFuZ19kaXNhYmxlZF93YXJuaW5ncyA9ICItV25vLWxhbmd1YWdlLWV4dGVuc2lvbi10b2tlbiAtV25vLWV4dGVuZGVkLW9mZnNldG9mIC1Xbm8tcGFkZGVkIC1Xbm8tc2hvcnRlbi02NC10by0zMiAtV25vLWZvcm1hdC1ub25saXRlcmFsIC1Xbm8tbWlzc2luZy1ub3JldHVybiAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1zaWduLWNvbnZlcnNpb24gLVduby11bnJlYWNoYWJsZS1jb2RlIC1Xbm8tY29udmVyc2lvbiAtV25vLWRvY3VtZW50YXRpb24gLVduby1taXNzaW5nLXZhcmlhYmxlLWRlY2xhcmF0aW9ucyAtV25vLWNhc3QtYWxpZ24gLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcy1kaXNjYXJkcy1xdWFsaWZpZXJzIC1Xbm8tbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtV25vLXVudXNlZC1tYWNyb3MgLVduby1kaXNhYmxlZC1tYWNyby1leHBhbnNpb24gLVduby1jb25kaXRpb25hbC11bmluaXRpYWxpemVkIC1Xbm8tc3dpdGNoLWVudW0iOworIAorKyMgVGhlcmUgYXJlIG5vIHNlcGFyYXRlIENGTEFHUy9DUFBGTEFHUy9MREZMQUdTLCBzZXQgZXZlcnl0aGluZyBpbiBDRkxBR1MKKytteSAkZGViaWFuX2NmbGFncyA9IGBkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgQ0ZMQUdTYCAuIGBkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgQ1BQRkxBR1NgIC4gYGRwa2ctYnVpbGRmbGFncyAtLWdldCBMREZMQUdTYCAuICItV2EsLS1ub2V4ZWNzdGFjayAtV2FsbCI7CisrJGRlYmlhbl9jZmxhZ3MgPX4gcy9cbi8gL2c7CisrCisgbXkgJHN0cmljdF93YXJuaW5ncyA9IDA7CisgCisgbXkgJHg4Nl9nY2NfZGVzPSJERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIjsKK0BAIC0zNDMsNiArMzQ3LDU1IEBAIG15ICV0YWJsZT0oCisgIm9zZjEtYWxwaGEtY2MiLCAgImNjOi1zdGQxIC10dW5lIGhvc3QgLU80IC1yZWFkb25seV9zdHJpbmdzOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAorICJ0cnU2NC1hbHBoYS1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1mYXN0IC1yZWFkb25seV9zdHJpbmdzOjotcHRocmVhZDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6LW1zeW06LnNvIiwKKyAKKysjIERlYmlhbiBHTlUvKiAodmFyaW91cyBhcmNoaXRlY3R1cmVzKQorKyJkZWJpYW4tYWxwaGEiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFscGhhLWV2NCIsImdjYzotRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tY3B1PWV2NDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFscGhhLWV2NSIsImdjYzotRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tY3B1PWV2NTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybTY0IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tYXJtZWwiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tYXJtaGYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tYW1kNjQiLCAiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjoiLAorKyJkZWJpYW4tYXZyMzIiLCAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtZm9taXQtZnJhbWUtcG9pbnRlcjo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HX0JGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1rZnJlZWJzZC1hbWQ2NCIsImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1rZnJlZWJzZC1pMzg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk0ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1ocHBhIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1odXJkLWkzODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYSwtLW5vZXhlY3N0YWNrIC1nIC1tdHVuZT1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taWE2NCIsImdjYzotRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taTM4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pMzg2LWk0ODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tYXJjaD1pNDg2OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taTM4Ni1pNTg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWFyY2g9aTU4Njo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYtaTY4Ni9jbW92IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWFyY2g9aTY4Njo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW02OGsiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHMiLCAgICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwc2VsIiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHNuMzIiLCAgICJtaXBzNjQtbGludXgtZ251YWJpbjMyLWdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzbjMyZWwiLCAgICJtaXBzNjRlbC1saW51eC1nbnVhYmluMzItZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHM2NCIsICAgIm1pcHM2NC1saW51eC1nbnVhYmk2NC1nY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwczY0ZWwiLCAgICJtaXBzNjRlbC1saW51eC1nbnVhYmk2NC1nY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbmV0YnNkLWkzODYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLW00ODY6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW5ldGJzZC1tNjhrIiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9OjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW5ldGJzZC1zcGFyYyIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfSAtbXY4OjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW9wZW5ic2QtYWxwaGEiLCJnY2M6LURURVJNSU9TICR7ZGViaWFuX2NmbGFnc306Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW9wZW5ic2QtaTM4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLW00ODY6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLW1pcHMiLCJnY2M6LURMX0VORElBTiAke2RlYmlhbl9jZmxhZ3N9OjoodW5rbm93bik6OkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUjoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW9yMWsiLCAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1wb3dlcnBjIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXBvd2VycGNzcGUiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjMzJfYXNtfTpsaW51eDMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcHBjNjQiLCJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2FzbX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1wcGM2NGVsIiwiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjRsZTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zMzkwIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKKysiZGViaWFuLXMzOTB4IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDMiLCAgICJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc2g0IiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNoM2ViIiwgICAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNoNGViIiwgICAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW0zMnIiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc3BhcmMiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc3BhcmMtdjgiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tY3B1PXY4IC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zcGFyYy12OSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1jcHU9djkgLVdhLC1BdjhwbHVzIC1EVUxUUkFTUEFSQyAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc3BhcmM2NCIsImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtRFVMVFJBU1BBUkMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXgzMiIsImdjYzotbXgzMiAtRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1teDMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6eDMyIiwKKysKKyAjIyMjCisgIyMjIyBWYXJpZXR5IG9mIExJTlVYOi0pCisgIyMjIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg1ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1kaXIucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMGMub3JpZy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMToyNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMTozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMzEsNyArMTMxLDcgQEAKKyAKKyBNQUtFRklMRT0gTWFrZWZpbGUKKyAKKy1NQU5ESVI9JChPUEVOU1NMRElSKS9tYW4KKytNQU5ESVI9L3Vzci9zaGFyZS9tYW4KKyBNQU4xPTEKKyBNQU4zPTMKKyBNQU5TVUZGSVg9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjMWQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tc2VjdGlvbi5wYXRjaApAQCAtMCwwICsxLDM0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5vcmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wYy5vcmlnL01ha2VmaWxlLm9yZwkyMDEwLTEyLTEyIDE2OjExOjM3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLm9yZwkyMDEwLTEyLTEyIDE2OjEzOjI4LjAwMDAwMDAwMCArMDEwMAorQEAgLTE2MCw3ICsxNjAsOCBAQAorIE1BTkRJUj0vdXNyL3NoYXJlL21hbgorIE1BTjE9MQorIE1BTjM9MworLU1BTlNVRkZJWD0KKytNQU5TVUZGSVg9c3NsCisrTUFOU0VDVElPTj1TU0wKKyBIVE1MU1VGRklYPWh0bWwKKyBIVE1MRElSPSQoT1BFTlNTTERJUikvaHRtbAorIFNIRUxMPS9iaW4vc2gKK0BAIC02NTEsNyArNjUyLDcgQEAKKyAJCWVjaG8gImluc3RhbGxpbmcgbWFuJCRzZWMvJCRmbi4kJHtzZWN9JChNQU5TVUZGSVgpIjsgXAorIAkJKGNkIGAkKFBFUkwpIHV0aWwvZGlybmFtZS5wbCAkJGlgOyBcCisgCQlzaCAtYyAiJCRwb2QybWFuIFwKKy0JCQktLXNlY3Rpb249JCRzZWMgLS1jZW50ZXI9T3BlblNTTCBcCisrCQkJLS1zZWN0aW9uPSQke3NlY30kKE1BTlNFQ1RJT04pIC0tY2VudGVyPU9wZW5TU0wgXAorIAkJCS0tcmVsZWFzZT0kKFZFUlNJT04pIGBiYXNlbmFtZSAkJGlgIikgXAorIAkJCT4gICQoSU5TVEFMTF9QUkVGSVgpJChNQU5ESVIpL21hbiQkc2VjLyQkZm4uJCR7c2VjfSQoTUFOU1VGRklYKTsgXAorIAkJJChQRVJMKSB1dGlsL2V4dHJhY3QtbmFtZXMucGwgPCAkJGkgfCBcCitAQCAtNjY4LDcgKzY2OSw3IEBACisgCQllY2hvICJpbnN0YWxsaW5nIG1hbiQkc2VjLyQkZm4uJCR7c2VjfSQoTUFOU1VGRklYKSI7IFwKKyAJCShjZCBgJChQRVJMKSB1dGlsL2Rpcm5hbWUucGwgJCRpYDsgXAorIAkJc2ggLWMgIiQkcG9kMm1hbiBcCistCQkJLS1zZWN0aW9uPSQkc2VjIC0tY2VudGVyPU9wZW5TU0wgXAorKwkJCS0tc2VjdGlvbj0kJHtzZWN9JChNQU5TRUNUSU9OKSAtLWNlbnRlcj1PcGVuU1NMIFwKKyAJCQktLXJlbGVhc2U9JChWRVJTSU9OKSBgYmFzZW5hbWUgJCRpYCIpIFwKKyAJCQk+ICAkKElOU1RBTExfUFJFRklYKSQoTUFORElSKS9tYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCk7IFwKKyAJCSQoUEVSTCkgdXRpbC9leHRyYWN0LW5hbWVzLnBsIDwgJCRpIHwgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjY2IzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMGMub3JpZy9NYWtlZmlsZS5zaGFyZWQJMjAxMC0wOC0yMSAxMzozNjo0OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5zaGFyZWQJMjAxMC0xMi0xMiAxNjoxMzozNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNTMsNyArMTUzLDcgQEAKKyAJTk9BTExTWU1TRkxBR1M9Jy1XbCwtLW5vLXdob2xlLWFyY2hpdmUnOyBcCisgCVNIQVJFREZMQUdTPSIkKENGTEFHUykgJChTSEFSRURfTERGTEFHUykgLXNoYXJlZCAtV2wsLUJzeW1ib2xpYyAtV2wsLXNvbmFtZT0kJFNITElCJCRTSExJQl9TT1ZFUiQkU0hMSUJfU1VGRklYIgorIAorLURPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIC1XbCwtcnBhdGgsJChMSUJSUEFUSCkiCisrRE9fR05VX0FQUD1MREZMQUdTPSIkKENGTEFHUykiCisgCisgI1RoaXMgaXMgcmF0aGVyIHNwZWNpYWwuICBJdCdzIGEgc3BlY2lhbCB0YXJnZXQgd2l0aCB3aGljaCBvbmUgY2FuIGxpbmsKKyAjYXBwbGljYXRpb25zIHdpdGhvdXQgYm90aGVyaW5nIHdpdGggYW55IGZlYXR1cmVzIHRoYXQgaGF2ZSBhbnl0aGluZyB0bwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDQwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMGMub3JpZy9NYWtlZmlsZS5zaGFyZWQJMjAxMC0xMi0xMiAxNjoxMzozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5zaGFyZWQJMjAxMC0xMi0xMiAxNjoxMzo0NC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNTEsNyArMTUxLDcgQEAKKyAJU0hMSUJfU1VGRklYPTsgXAorIAlBTExTWU1TRkxBR1M9Jy1XbCwtLXdob2xlLWFyY2hpdmUnOyBcCisgCU5PQUxMU1lNU0ZMQUdTPSctV2wsLS1uby13aG9sZS1hcmNoaXZlJzsgXAorLQlTSEFSRURGTEFHUz0iJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCIKKysJU0hBUkVERkxBR1M9IiQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKSAtc2hhcmVkIC1XbCwtc29uYW1lPSQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVgiCisgCisgRE9fR05VX0FQUD1MREZMQUdTPSIkKENGTEFHUykiCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vcGljLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3BpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmRhMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3BpYy5wYXRjaApAQCAtMCwwICsxLDE3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Rlcy9hc20vZGVzYm90aC5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFjLm9yaWcvY3J5cHRvL2Rlcy9hc20vZGVzYm90aC5wbAkyMDAxLTEwLTI0IDIzOjIwOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwJMjAxMi0wNy0yOSAxNDoxNToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNiw2ICsxNiwxMSBAQAorIAorIAkmcHVzaCgiZWRpIik7CisgCisrCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50MCIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MCIpOworKwkmYmxpbmRwb3AoImVicCIpOworKwkmYWRkICAgICgiZWJwIiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDAiKSAuICJdIik7CisrCisgCSZjb21tZW50KCIiKTsKKyAJJmNvbW1lbnQoIkxvYWQgdGhlIGRhdGEgd29yZHMiKTsKKyAJJm1vdigkTCwmRFdQKDAsImVieCIsIiIsMCkpOworQEAgLTQ3LDE1ICs1MiwyMSBAQAorIAkmbW92KCZzd3RtcCgyKSwJKERXQygoJGVuYyk/IjEiOiIwIikpKTsKKyAJJm1vdigmc3d0bXAoMSksCSJlYXgiKTsKKyAJJm1vdigmc3d0bXAoMCksCSJlYngiKTsKKy0JJmNhbGwoIkRFU19lbmNyeXB0MiIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworKwkmY2FsbCgiREVTX2VuY3J5cHQyXEBQTFQiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKyAJJm1vdigmc3d0bXAoMiksCShEV0MoKCRlbmMpPyIwIjoiMSIpKSk7CisgCSZtb3YoJnN3dG1wKDEpLAkiZWRpIik7CisgCSZtb3YoJnN3dG1wKDApLAkiZWJ4Iik7CistCSZjYWxsKCJERVNfZW5jcnlwdDIiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKysJJmNhbGwoIkRFU19lbmNyeXB0MlxAUExUIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisgCSZtb3YoJnN3dG1wKDIpLAkoRFdDKCgkZW5jKT8iMSI6IjAiKSkpOworIAkmbW92KCZzd3RtcCgxKSwJImVzaSIpOworIAkmbW92KCZzd3RtcCgwKSwJImVieCIpOworLQkmY2FsbCgiREVTX2VuY3J5cHQyIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisrCSZjYWxsKCJERVNfZW5jcnlwdDJcQFBMVCIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworIAorIAkmc3RhY2tfcG9wKDMpOworIAkmbW92KCRMLCZEV1AoMCwiZWJ4IiwiIiwwKSk7CitJbmRleDogb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20vY2JjLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWMub3JpZy9jcnlwdG8vcGVybGFzbS9jYmMucGwJMjAxMS0wNy0xMyAwODoyMjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcGVybGFzbS9jYmMucGwJMjAxMi0wNy0yOSAxNDoxNToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjIsNyArMTIyLDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgaW4gYXJyYXkgZm9yIGNhbGwKKyAJJm1vdigmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApLAkiZWJ4Iik7CSMKKyAKKy0JJmNhbGwoJGVuY19mdW5jKTsKKysJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50MCIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MCIpOworKwkmYmxpbmRwb3AoImVieCIpOworKwkmYWRkCSgiZWJ4IiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDAiKSAuICJdIik7CisrCSZjYWxsKCIkZW5jX2Z1bmNcQFBMVCIpOworIAorIAkmbW92KCJlYXgiLAkmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSk7CisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOworQEAgLTE4NSw3ICsxODksMTEgQEAKKyAJJm1vdigmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSwJImVheCIpOwkjIHB1dCBpbiBhcnJheSBmb3IgY2FsbAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCksCSJlYngiKTsJIworIAorLQkmY2FsbCgkZW5jX2Z1bmMpOworKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQxIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQxIik7CisrCSZibGluZHBvcCgiZWJ4Iik7CisrCSZhZGQJKCJlYngiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MSIpIC4gIl0iKTsKKysJJmNhbGwoIiRlbmNfZnVuY1xAUExUIik7CisgCisgCSZtb3YoImVheCIsCSZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApKTsKKyAJJm1vdigiZWJ4IiwJJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSk7CitAQCAtMjE4LDcgKzIyNiwxMSBAQAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApLAkiZWF4Iik7CSMgcHV0IGJhY2sKKyAJJm1vdigmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApLAkiZWJ4Iik7CSMKKyAKKy0JJmNhbGwoJGRlY19mdW5jKTsKKysJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50MiIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MiIpOworKwkmYmxpbmRwb3AoImVieCIpOworKwkmYWRkCSgiZWJ4IiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDIiKSAuICJdIik7CisrCSZjYWxsKCIkZGVjX2Z1bmNcQFBMVCIpOworIAorIAkmbW92KCJlYXgiLAkmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSk7CSMgZ2V0IHJldHVybgorIAkmbW92KCJlYngiLAkmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApKTsJIworQEAgLTI2MSw3ICsyNzMsMTEgQEAKKyAJJm1vdigmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSwJImVheCIpOwkjIHB1dCBiYWNrCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRkZWNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDMiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDMiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQzIikgLiAiXSIpOworKwkmY2FsbCgiJGRlY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOwkjIGdldCByZXR1cm4KKyAJJm1vdigiZWJ4IiwJJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSk7CSMKK0luZGV4OiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbAkyMDExLTEyLTA5IDIwOjE2OjM1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbAkyMDEyLTA3LTI5IDE0OjE1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE2MSw2ICsxNjEsNyBAQAorIAlpZiAoJDo6bWFjb3N4KQl7IHB1c2ggKEBvdXQsIiR0bXAsMlxuIik7IH0KKyAJZWxzaWYgKCQ6OmVsZikJeyBwdXNoIChAb3V0LCIkdG1wLDRcbiIpOyB9CisgCWVsc2UJCXsgcHVzaCAoQG91dCwiJHRtcFxuIik7IH0KKysJaWYgKCQ6OmVsZikJeyBwdXNoIChAb3V0LCIuaGlkZGVuXHRPUEVOU1NMX2lhMzJjYXBfUFxuIik7IH0KKyAgICAgfQorICAgICBwdXNoKEBvdXQsJGluaXRzZWcpIGlmICgkaW5pdHNlZyk7CisgfQorQEAgLTIxOCw4ICsyMTksMjMgQEAKKyAgICAgZWxzaWYgKCQ6OmVsZikKKyAgICAgewkkaW5pdHNlZy49PDxfX187CisgLnNlY3Rpb24JLmluaXQKKytfX18KKysgICAgICAgIGlmICgkOjpwaWMpCisrCXsgICAkaW5pdHNlZy49PDxfX187CisrCXB1c2hsCSVlYngKKysJY2FsbAkucGljX3BvaW50MAorKy5waWNfcG9pbnQwOgorKwlwb3BsCSVlYngKKysJYWRkbAlcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0ucGljX3BvaW50MF0sJWVieAorKwljYWxsCSRmXEBQTFQKKysJcG9wbAklZWJ4CisrX19fCisrCX0KKysJZWxzZQorKwl7ICAgJGluaXRzZWcuPTw8X19fOworIAljYWxsCSRmCisgX19fCisrCX0KKyAgICAgfQorICAgICBlbHNpZiAoJDo6Y29mZikKKyAgICAgeyAgICRpbml0c2VnLj08PF9fXzsJIyBhcHBsaWVzIHRvIGJvdGggQ3lnd2luIGFuZCBNaW5ndworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by94ODZjcHVpZC5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFjLm9yaWcvY3J5cHRvL3g4NmNwdWlkLnBsCTIwMTItMDItMjggMTU6MjA6MzQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3g4NmNwdWlkLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtOCw2ICs4LDggQEAKKyAKKyBmb3IgKEBBUkdWKSB7ICRzc2UyPTEgaWYgKC8tRE9QRU5TU0xfSUEzMl9TU0UyLyk7IH0KKyAKKytwdXNoKEBvdXQsICIuaGlkZGVuIE9QRU5TU0xfaWEzMmNhcF9QXG4iKTsKKysKKyAmZnVuY3Rpb25fYmVnaW4oIk9QRU5TU0xfaWEzMl9jcHVpZCIpOworIAkmeG9yCSgiZWR4IiwiZWR4Iik7CisgCSZwdXNoZgkoKTsKK0BAIC0xMzksOSArMTQxLDcgQEAKKyAmc2V0X2xhYmVsKCJub2NwdWlkIik7CisgJmZ1bmN0aW9uX2VuZCgiT1BFTlNTTF9pYTMyX2NwdWlkIik7CisgCistJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpOworLQorLSZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3JkdHNjIiwiRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3JkdHNjIik7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcGljbWV1cCgiZWN4IiwiT1BFTlNTTF9pYTMyY2FwX1AiKTsKK0BAIC0xNTUsNyArMTU1LDcgQEAKKyAjIFRoaXMgd29ya3MgaW4gUmluZyAwIG9ubHkgW3JlYWQgREpHUFArTVMtRE9TK3ByaXZpbGVnZWQgRFBNSSBob3N0XSwKKyAjIGJ1dCBpdCdzIHNhZmUgdG8gY2FsbCBpdCBvbiBhbnkgW3N1cHBvcnRlZF0gMzItYml0IHBsYXRmb3JtLi4uCisgIyBKdXN0IGNoZWNrIGZvciBbbm9uLV16ZXJvIHJldHVybiB2YWx1ZS4uLgorLSZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX2luc3RydW1lbnRfaGFsdCIsIkVYVFJOXHRfT1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQiKTsKKysmZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9pbnN0cnVtZW50X2hhbHQiKTsKKyAJJnBpY21ldXAoImVjeCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CisgCSZidAkoJkRXUCgwLCJlY3giKSw0KTsKKyAJJmpuYwkoJmxhYmVsKCJub2hhbHQiKSk7CSMgbm8gVFNDCitAQCAtMjIyLDcgKzIyMiw3IEBACisgCSZyZXQJKCk7CisgJmZ1bmN0aW9uX2VuZF9CKCJPUEVOU1NMX2Zhcl9zcGluIik7CisgCistJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfd2lwZV9jcHUiLCJFWFRSTlx0X09QRU5TU0xfaWEzMmNhcF9QOkRXT1JEIik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfd2lwZV9jcHUiKTsKKyAJJnhvcgkoImVheCIsImVheCIpOworIAkmeG9yCSgiZWR4IiwiZWR4Iik7CisgCSZwaWNtZXVwKCJlY3giLCJPUEVOU1NMX2lhMzJjYXBfUCIpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDkxODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vdmVyc2lvbi1zY3JpcHQucGF0Y2gKQEAgLTAsMCArMSw0NjYzIEBACitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUub3JpZy9Db25maWd1cmUJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9Db25maWd1cmUJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjUxLDYgKzE2NTEsOCBAQAorIAkJfQorIAl9CisgCisrJHNoYXJlZF9sZGZsYWcgLj0gIiAtV2wsLS12ZXJzaW9uLXNjcmlwdD1vcGVuc3NsLmxkIjsKKysKKyBvcGVuKElOLCc8TWFrZWZpbGUub3JnJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBNYWtlZmlsZS5vcmc6JCFcbiI7CisgdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKKyBvcGVuKE9VVCwiPiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgJE1ha2VmaWxlLm5ldzokIVxuIjsKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9vcGVuc3NsLmxkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIyOjE5OjA4LjYwMTgyNzI2NiArMDEwMAorQEAgLTAsMCArMSw0NjE1IEBACisrT1BFTlNTTF8xLjAuMCB7CisrCWdsb2JhbDoKKysJCUJJT19mX3NzbDsKKysJCUJJT19uZXdfYnVmZmVyX3NzbF9jb25uZWN0OworKwkJQklPX25ld19zc2w7CisrCQlCSU9fbmV3X3NzbF9jb25uZWN0OworKwkJQklPX3Byb3h5X3NzbF9jb3B5X3Nlc3Npb25faWQ7CisrCQlCSU9fc3NsX2NvcHlfc2Vzc2lvbl9pZDsKKysJCUJJT19zc2xfc2h1dGRvd247CisrCQlkMmlfU1NMX1NFU1NJT047CisrCQlEVExTdjFfY2xpZW50X21ldGhvZDsKKysJCURUTFN2MV9tZXRob2Q7CisrCQlEVExTdjFfc2VydmVyX21ldGhvZDsKKysJCUVSUl9sb2FkX1NTTF9zdHJpbmdzOworKwkJaTJkX1NTTF9TRVNTSU9OOworKwkJa3NzbF9idWlsZF9wcmluY2lwYWxfMjsKKysJCWtzc2xfY2dldF90a3Q7CisrCQlrc3NsX2NoZWNrX2F1dGhlbnQ7CisrCQlrc3NsX2N0eF9mcmVlOworKwkJa3NzbF9jdHhfbmV3OworKwkJa3NzbF9jdHhfc2V0a2V5OworKwkJa3NzbF9jdHhfc2V0cHJpbmM7CisrCQlrc3NsX2N0eF9zZXRzdHJpbmc7CisrCQlrc3NsX2N0eF9zaG93OworKwkJa3NzbF9lcnJfc2V0OworKwkJa3NzbF9rcmI1X2ZyZWVfZGF0YV9jb250ZW50czsKKysJCWtzc2xfc2dldF90a3Q7CisrCQlrc3NsX3NraXBfY29uZm91bmQ7CisrCQlrc3NsX3ZhbGlkYXRlX3RpbWVzOworKwkJUEVNX3JlYWRfYmlvX1NTTF9TRVNTSU9OOworKwkJUEVNX3JlYWRfU1NMX1NFU1NJT047CisrCQlQRU1fd3JpdGVfYmlvX1NTTF9TRVNTSU9OOworKwkJUEVNX3dyaXRlX1NTTF9TRVNTSU9OOworKwkJU1NMX2FjY2VwdDsKKysJCVNTTF9hZGRfY2xpZW50X0NBOworKwkJU1NMX2FkZF9kaXJfY2VydF9zdWJqZWN0c190b19zdGFjazsKKysJCVNTTF9hZGRfZGlyX2NlcnRfc3VianNfdG9fc3RrOworKwkJU1NMX2FkZF9maWxlX2NlcnRfc3ViamVjdHNfdG9fc3RhY2s7CisrCQlTU0xfYWRkX2ZpbGVfY2VydF9zdWJqc190b19zdGs7CisrCQlTU0xfYWxlcnRfZGVzY19zdHJpbmc7CisrCQlTU0xfYWxlcnRfZGVzY19zdHJpbmdfbG9uZzsKKysJCVNTTF9hbGVydF90eXBlX3N0cmluZzsKKysJCVNTTF9hbGVydF90eXBlX3N0cmluZ19sb25nOworKwkJU1NMX2NhbGxiYWNrX2N0cmw7CisrCQlTU0xfY2hlY2tfcHJpdmF0ZV9rZXk7CisrCQlTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uOworKwkJU1NMX0NJUEhFUl9nZXRfYml0czsKKysJCVNTTF9DSVBIRVJfZ2V0X25hbWU7CisrCQlTU0xfQ0lQSEVSX2dldF92ZXJzaW9uOworKwkJU1NMX2NsZWFyOworKwkJU1NMX0NPTVBfYWRkX2NvbXByZXNzaW9uX21ldGhvZDsKKysJCVNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzOworKwkJU1NMX0NPTVBfZ2V0X2NvbXByZXNzX21ldGhvZHM7CisrCQlTU0xfQ09NUF9nZXRfbmFtZTsKKysJCVNTTF9jb25uZWN0OworKwkJU1NMX2NvcHlfc2Vzc2lvbl9pZDsKKysJCVNTTF9jdHJsOworKwkJU1NMX0NUWF9hZGRfY2xpZW50X0NBOworKwkJU1NMX0NUWF9hZGRfc2Vzc2lvbjsKKysJCVNTTF9DVFhfY2FsbGJhY2tfY3RybDsKKysJCVNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXk7CisrCQlTU0xfQ1RYX2N0cmw7CisrCQlTU0xfQ1RYX2ZsdXNoX3Nlc3Npb25zOworKwkJU1NMX0NUWF9mcmVlOworKwkJU1NMX0NUWF9nZXRfY2VydF9zdG9yZTsKKysJCVNTTF9DVFhfZ2V0X2NsaWVudF9DQV9saXN0OworKwkJU1NMX0NUWF9nZXRfY2xpZW50X2NlcnRfY2I7CisrCQlTU0xfQ1RYX2dldF9leF9kYXRhOworKwkJU1NMX0NUWF9nZXRfZXhfbmV3X2luZGV4OworKwkJU1NMX0NUWF9nZXRfaW5mb19jYWxsYmFjazsKKysJCVNTTF9DVFhfZ2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX0NUWF9nZXRfdGltZW91dDsKKysJCVNTTF9DVFhfZ2V0X3ZlcmlmeV9jYWxsYmFjazsKKysJCVNTTF9DVFhfZ2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9DVFhfZ2V0X3ZlcmlmeV9tb2RlOworKwkJU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnM7CisrCQlTU0xfQ1RYX25ldzsKKysJCVNTTF9DVFhfcmVtb3ZlX3Nlc3Npb247CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X2dldF9jYjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfbmV3X2NiOworKwkJU1NMX0NUWF9zZXNzX2dldF9yZW1vdmVfY2I7CisrCQlTU0xfQ1RYX3Nlc3Npb25zOworKwkJU1NMX0NUWF9zZXNzX3NldF9nZXRfY2I7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X25ld19jYjsKKysJCVNTTF9DVFhfc2Vzc19zZXRfcmVtb3ZlX2NiOworKwkJU1NMX0NUWF9zZXQxX3BhcmFtOworKwkJU1NMX0NUWF9zZXRfY2VydF9zdG9yZTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2I7CisrCQlTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0OworKwkJU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfY2I7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfY2VydF9lbmdpbmU7CisrCQlTU0xfQ1RYX3NldF9jb29raWVfZ2VuZXJhdGVfY2I7CisrCQlTU0xfQ1RYX3NldF9jb29raWVfdmVyaWZ5X2NiOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2I7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YTsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzOworKwkJU1NMX0NUWF9zZXRfZGVmX3Bhc3N3ZF9jYl91ZDsKKysJCVNTTF9DVFhfc2V0X2RlZl92ZXJpZnlfcGF0aHM7CisrCQlTU0xfQ1RYX3NldF9leF9kYXRhOworKwkJU1NMX0NUWF9zZXRfZ2VuZXJhdGVfc2Vzc2lvbl9pZDsKKysJCVNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3B1cnBvc2U7CisrCQlTU0xfQ1RYX3NldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4dDsKKysJCVNTTF9DVFhfc2V0X3NzbF92ZXJzaW9uOworKwkJU1NMX0NUWF9zZXRfdGltZW91dDsKKysJCVNTTF9DVFhfc2V0X3RtcF9kaF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3RtcF9lY2RoX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfdG1wX3JzYV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3RydXN0OworKwkJU1NMX0NUWF9zZXRfdmVyaWZ5OworKwkJU1NMX0NUWF9zZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX0NUWF91c2VfY2VydF9jaGFpbl9maWxlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9BU04xOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5OworKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlOworKwkJU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hpbnQ7CisrCQlTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5OworKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleV9maWxlOworKwkJU1NMX2RvX2hhbmRzaGFrZTsKKysJCVNTTF9kdXA7CisrCQlTU0xfZHVwX0NBX2xpc3Q7CisrCQlTU0xlYXlfYWRkX3NzbF9hbGdvcml0aG1zOworKwkJU1NMX2ZyZWU7CisrCQlTU0xfZ2V0MV9zZXNzaW9uOworKwkJU1NMX2dldF9jZXJ0aWZpY2F0ZTsKKysJCVNTTF9nZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfZ2V0X2NpcGhlcnM7CisrCQlTU0xfZ2V0X2NsaWVudF9DQV9saXN0OworKwkJU1NMX2dldF9jdXJyZW50X2NpcGhlcjsKKysJCVNTTF9nZXRfY3VycmVudF9jb21wcmVzc2lvbjsKKysJCVNTTF9nZXRfY3VycmVudF9leHBhbnNpb247CisrCQlTU0xfZ2V0X2RlZmF1bHRfdGltZW91dDsKKysJCVNTTF9nZXRfZXJyb3I7CisrCQlTU0xfZ2V0X2V4X2RhdGE7CisrCQlTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4OworKwkJU1NMX2dldF9leF9kX1g1MDlfU1RPUkVfQ1RYX2lkeDsKKysJCVNTTF9nZXRfZXhfbmV3X2luZGV4OworKwkJU1NMX2dldF9mZDsKKysJCVNTTF9nZXRfZmluaXNoZWQ7CisrCQlTU0xfZ2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfZ2V0X3BlZXJfY2VydF9jaGFpbjsKKysJCVNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZTsKKysJCVNTTF9nZXRfcGVlcl9maW5pc2hlZDsKKysJCVNTTF9nZXRfcHJpdmF0ZWtleTsKKysJCVNTTF9nZXRfcHNrX2lkZW50aXR5OworKwkJU1NMX2dldF9wc2tfaWRlbnRpdHlfaGludDsKKysJCVNTTF9nZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfZ2V0X3JiaW87CisrCQlTU0xfZ2V0X3JlYWRfYWhlYWQ7CisrCQlTU0xfZ2V0X3JmZDsKKysJCVNTTF9nZXRfc2VydmVybmFtZTsKKysJCVNTTF9nZXRfc2VydmVybmFtZV90eXBlOworKwkJU1NMX2dldF9zZXNzaW9uOworKwkJU1NMX2dldF9zaGFyZWRfY2lwaGVyczsKKysJCVNTTF9nZXRfc2h1dGRvd247CisrCQlTU0xfZ2V0X1NTTF9DVFg7CisrCQlTU0xfZ2V0X3NzbF9tZXRob2Q7CisrCQlTU0xfZ2V0X3ZlcmlmeV9jYWxsYmFjazsKKysJCVNTTF9nZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX2dldF92ZXJpZnlfbW9kZTsKKysJCVNTTF9nZXRfdmVyaWZ5X3Jlc3VsdDsKKysJCVNTTF9nZXRfdmVyc2lvbjsKKysJCVNTTF9nZXRfd2JpbzsKKysJCVNTTF9nZXRfd2ZkOworKwkJU1NMX2hhc19tYXRjaGluZ19zZXNzaW9uX2lkOworKwkJU1NMX2xpYnJhcnlfaW5pdDsKKysJCVNTTF9sb2FkX2NsaWVudF9DQV9maWxlOworKwkJU1NMX2xvYWRfZXJyb3Jfc3RyaW5nczsKKysJCVNTTF9uZXc7CisrCQlTU0xfcGVlazsKKysJCVNTTF9wZW5kaW5nOworKwkJU1NMX3JlYWQ7CisrCQlTU0xfcmVuZWdvdGlhdGU7CisrCQlTU0xfcmVuZWdvdGlhdGVfcGVuZGluZzsKKysJCVNTTF9yc3RhdGVfc3RyaW5nOworKwkJU1NMX3JzdGF0ZV9zdHJpbmdfbG9uZzsKKysJCVNTTF9TRVNTSU9OX2NtcDsKKysJCVNTTF9TRVNTSU9OX2ZyZWU7CisrCQlTU0xfU0VTU0lPTl9nZXRfZXhfZGF0YTsKKysJCVNTTF9TRVNTSU9OX2dldF9leF9uZXdfaW5kZXg7CisrCQlTU0xfU0VTU0lPTl9nZXRfaWQ7CisrCQlTU0xfU0VTU0lPTl9nZXRfdGltZTsKKysJCVNTTF9TRVNTSU9OX2dldF90aW1lb3V0OworKwkJU1NMX1NFU1NJT05faGFzaDsKKysJCVNTTF9TRVNTSU9OX25ldzsKKysJCVNTTF9TRVNTSU9OX3ByaW50OworKwkJU1NMX1NFU1NJT05fcHJpbnRfZnA7CisrCQlTU0xfU0VTU0lPTl9zZXRfZXhfZGF0YTsKKysJCVNTTF9TRVNTSU9OX3NldF90aW1lOworKwkJU1NMX1NFU1NJT05fc2V0X3RpbWVvdXQ7CisrCQlTU0xfc2V0MV9wYXJhbTsKKysJCVNTTF9zZXRfYWNjZXB0X3N0YXRlOworKwkJU1NMX3NldF9iaW87CisrCQlTU0xfc2V0X2NpcGhlcl9saXN0OworKwkJU1NMX3NldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9zZXRfY29ubmVjdF9zdGF0ZTsKKysJCVNTTF9zZXRfZXhfZGF0YTsKKysJCVNTTF9zZXRfZmQ7CisrCQlTU0xfc2V0X2dlbmVyYXRlX3Nlc3Npb25faWQ7CisrCQlTU0xfc2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfc2V0X21zZ19jYWxsYmFjazsKKysJCVNTTF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjazsKKysJCVNTTF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjazsKKysJCVNTTF9zZXRfcHVycG9zZTsKKysJCVNTTF9zZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfc2V0X3JlYWRfYWhlYWQ7CisrCQlTU0xfc2V0X3JmZDsKKysJCVNTTF9zZXRfc2Vzc2lvbjsKKysJCVNTTF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0OworKwkJU1NMX3NldF9zZXNzaW9uX3NlY3JldF9jYjsKKysJCVNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0OworKwkJU1NMX3NldF9zZXNzaW9uX3RpY2tldF9leHRfY2I7CisrCQlTU0xfc2V0X3NodXRkb3duOworKwkJU1NMX3NldF9TU0xfQ1RYOworKwkJU1NMX3NldF9zc2xfbWV0aG9kOworKwkJU1NMX3NldF90bXBfZGhfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3RtcF9lY2RoX2NhbGxiYWNrOworKwkJU1NMX3NldF90bXBfcnNhX2NhbGxiYWNrOworKwkJU1NMX3NldF90cnVzdDsKKysJCVNTTF9zZXRfdmVyaWZ5OworKwkJU1NMX3NldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfc2V0X3ZlcmlmeV9yZXN1bHQ7CisrCQlTU0xfc2V0X3dmZDsKKysJCVNTTF9zaHV0ZG93bjsKKysJCVNTTF9zdGF0ZTsKKysJCVNTTF9zdGF0ZV9zdHJpbmc7CisrCQlTU0xfc3RhdGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfdXNlX2NlcnRpZmljYXRlOworKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZV9BU04xOworKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZV9maWxlOworKwkJU1NMX3VzZV9Qcml2YXRlS2V5OworKwkJU1NMX3VzZV9Qcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF91c2VfcHNrX2lkZW50aXR5X2hpbnQ7CisrCQlTU0xfdXNlX1JTQVByaXZhdGVLZXk7CisrCQlTU0xfdXNlX1JTQVByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF91c2VfUlNBUHJpdmF0ZUtleV9maWxlOworKwkJU1NMdjIzX2NsaWVudF9tZXRob2Q7CisrCQlTU0x2MjNfbWV0aG9kOworKwkJU1NMdjIzX3NlcnZlcl9tZXRob2Q7CisrCQlTU0x2Ml9jbGllbnRfbWV0aG9kOworKwkJU1NMdjJfbWV0aG9kOworKwkJU1NMdjJfc2VydmVyX21ldGhvZDsKKysJCVNTTHYzX2NsaWVudF9tZXRob2Q7CisrCQlTU0x2M19tZXRob2Q7CisrCQlTU0x2M19zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX3ZlcnNpb247CisrCQlTU0xfd2FudDsKKysJCVNTTF93cml0ZTsKKysJCVRMU3YxX2NsaWVudF9tZXRob2Q7CisrCQlUTFN2MV9tZXRob2Q7CisrCQlUTFN2MV9zZXJ2ZXJfbWV0aG9kOworKworKworKwkJU1NMZWF5OworKwkJU1NMZWF5X3ZlcnNpb247CisrCQlBU04xX0JJVF9TVFJJTkdfYXNuMV9tZXRoOworKwkJQVNOMV9IRUFERVJfZnJlZTsKKysJCUFTTjFfSEVBREVSX25ldzsKKysJCUFTTjFfSUE1U1RSSU5HX2FzbjFfbWV0aDsKKysJCUFTTjFfSU5URUdFUl9nZXQ7CisrCQlBU04xX0lOVEVHRVJfc2V0OworKwkJQVNOMV9JTlRFR0VSX3RvX0JOOworKwkJQVNOMV9PQkpFQ1RfY3JlYXRlOworKwkJQVNOMV9PQkpFQ1RfZnJlZTsKKysJCUFTTjFfT0JKRUNUX25ldzsKKysJCUFTTjFfUFJJTlRBQkxFX3R5cGU7CisrCQlBU04xX1NUUklOR19jbXA7CisrCQlBU04xX1NUUklOR19kdXA7CisrCQlBU04xX1NUUklOR19mcmVlOworKwkJQVNOMV9TVFJJTkdfbmV3OworKwkJQVNOMV9TVFJJTkdfcHJpbnQ7CisrCQlBU04xX1NUUklOR19zZXQ7CisrCQlBU04xX1NUUklOR190eXBlX25ldzsKKysJCUFTTjFfVFlQRV9mcmVlOworKwkJQVNOMV9UWVBFX25ldzsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX3RvX3N0cmluZzsKKysJCUFTTjFfVVRDVElNRV9jaGVjazsKKysJCUFTTjFfVVRDVElNRV9wcmludDsKKysJCUFTTjFfVVRDVElNRV9zZXQ7CisrCQlBU04xX2NoZWNrX2luZmluaXRlX2VuZDsKKysJCUFTTjFfZDJpX2JpbzsKKysJCUFTTjFfZDJpX2ZwOworKwkJQVNOMV9kaWdlc3Q7CisrCQlBU04xX2R1cDsKKysJCUFTTjFfZ2V0X29iamVjdDsKKysJCUFTTjFfaTJkX2JpbzsKKysJCUFTTjFfaTJkX2ZwOworKwkJQVNOMV9vYmplY3Rfc2l6ZTsKKysJCUFTTjFfcGFyc2U7CisrCQlBU04xX3B1dF9vYmplY3Q7CisrCQlBU04xX3NpZ247CisrCQlBU04xX3ZlcmlmeTsKKysJCUJGX2NiY19lbmNyeXB0OworKwkJQkZfY2ZiNjRfZW5jcnlwdDsKKysJCUJGX2VjYl9lbmNyeXB0OworKwkJQkZfZW5jcnlwdDsKKysJCUJGX29mYjY0X2VuY3J5cHQ7CisrCQlCRl9vcHRpb25zOworKwkJQkZfc2V0X2tleTsKKysJCUJJT19DT05ORUNUX2ZyZWU7CisrCQlCSU9fQ09OTkVDVF9uZXc7CisrCQlCSU9fYWNjZXB0OworKwkJQklPX2N0cmw7CisrCQlCSU9faW50X2N0cmw7CisrCQlCSU9fZGVidWdfY2FsbGJhY2s7CisrCQlCSU9fZHVtcDsKKysJCUJJT19kdXBfY2hhaW47CisrCQlCSU9fZl9iYXNlNjQ7CisrCQlCSU9fZl9idWZmZXI7CisrCQlCSU9fZl9jaXBoZXI7CisrCQlCSU9fZl9tZDsKKysJCUJJT19mX251bGw7CisrCQlCSU9fZl9wcm94eV9zZXJ2ZXI7CisrCQlCSU9fZmRfbm9uX2ZhdGFsX2Vycm9yOworKwkJQklPX2ZkX3Nob3VsZF9yZXRyeTsKKysJCUJJT19maW5kX3R5cGU7CisrCQlCSU9fZnJlZTsKKysJCUJJT19mcmVlX2FsbDsKKysJCUJJT19nZXRfYWNjZXB0X3NvY2tldDsKKysJCUJJT19nZXRfZmlsdGVyX2JpbzsKKysJCUJJT19nZXRfaG9zdF9pcDsKKysJCUJJT19nZXRfcG9ydDsKKysJCUJJT19nZXRfcmV0cnlfQklPOworKwkJQklPX2dldF9yZXRyeV9yZWFzb247CisrCQlCSU9fZ2V0aG9zdGJ5bmFtZTsKKysJCUJJT19nZXRzOworKwkJQklPX25ldzsKKysJCUJJT19uZXdfYWNjZXB0OworKwkJQklPX25ld19jb25uZWN0OworKwkJQklPX25ld19mZDsKKysJCUJJT19uZXdfZmlsZTsKKysJCUJJT19uZXdfZnA7CisrCQlCSU9fbmV3X3NvY2tldDsKKysJCUJJT19wb3A7CisrCQlCSU9fcHJpbnRmOworKwkJQklPX3B1c2g7CisrCQlCSU9fcHV0czsKKysJCUJJT19yZWFkOworKwkJQklPX3NfYWNjZXB0OworKwkJQklPX3NfY29ubmVjdDsKKysJCUJJT19zX2ZkOworKwkJQklPX3NfZmlsZTsKKysJCUJJT19zX21lbTsKKysJCUJJT19zX251bGw7CisrCQlCSU9fc19wcm94eV9jbGllbnQ7CisrCQlCSU9fc19zb2NrZXQ7CisrCQlCSU9fc2V0OworKwkJQklPX3NldF9jaXBoZXI7CisrCQlCSU9fc2V0X3RjcF9uZGVsYXk7CisrCQlCSU9fc29ja19jbGVhbnVwOworKwkJQklPX3NvY2tfZXJyb3I7CisrCQlCSU9fc29ja19pbml0OworKwkJQklPX3NvY2tfbm9uX2ZhdGFsX2Vycm9yOworKwkJQklPX3NvY2tfc2hvdWxkX3JldHJ5OworKwkJQklPX3NvY2tldF9pb2N0bDsKKysJCUJJT193cml0ZTsKKysJCUJOX0NUWF9mcmVlOworKwkJQk5fQ1RYX25ldzsKKysJCUJOX01PTlRfQ1RYX2ZyZWU7CisrCQlCTl9NT05UX0NUWF9uZXc7CisrCQlCTl9NT05UX0NUWF9zZXQ7CisrCQlCTl9hZGQ7CisrCQlCTl9hZGRfd29yZDsKKysJCUJOX2hleDJibjsKKysJCUJOX2JpbjJibjsKKysJCUJOX2JuMmhleDsKKysJCUJOX2JuMmJpbjsKKysJCUJOX2NsZWFyOworKwkJQk5fY2xlYXJfYml0OworKwkJQk5fY2xlYXJfZnJlZTsKKysJCUJOX2NtcDsKKysJCUJOX2NvcHk7CisrCQlCTl9kaXY7CisrCQlCTl9kaXZfd29yZDsKKysJCUJOX2R1cDsKKysJCUJOX2ZyZWU7CisrCQlCTl9mcm9tX21vbnRnb21lcnk7CisrCQlCTl9nY2Q7CisrCQlCTl9nZW5lcmF0ZV9wcmltZTsKKysJCUJOX2dldF93b3JkOworKwkJQk5faXNfYml0X3NldDsKKysJCUJOX2lzX3ByaW1lOworKwkJQk5fbHNoaWZ0OworKwkJQk5fbHNoaWZ0MTsKKysJCUJOX21hc2tfYml0czsKKysJCUJOX21vZDsKKysJCUJOX21vZF9leHA7CisrCQlCTl9tb2RfZXhwX21vbnQ7CisrCQlCTl9tb2RfZXhwX3NpbXBsZTsKKysJCUJOX21vZF9pbnZlcnNlOworKwkJQk5fbW9kX211bDsKKysJCUJOX21vZF9tdWxfbW9udGdvbWVyeTsKKysJCUJOX21vZF93b3JkOworKwkJQk5fbXVsOworKwkJQk5fbmV3OworKwkJQk5fbnVtX2JpdHM7CisrCQlCTl9udW1fYml0c193b3JkOworKwkJQk5fb3B0aW9uczsKKysJCUJOX3ByaW50OworKwkJQk5fcHJpbnRfZnA7CisrCQlCTl9yYW5kOworKwkJQk5fcmVjaXByb2NhbDsKKysJCUJOX3JzaGlmdDsKKysJCUJOX3JzaGlmdDE7CisrCQlCTl9zZXRfYml0OworKwkJQk5fc2V0X3dvcmQ7CisrCQlCTl9zcXI7CisrCQlCTl9zdWI7CisrCQlCTl90b19BU04xX0lOVEVHRVI7CisrCQlCTl91Y21wOworKwkJQk5fdmFsdWVfb25lOworKwkJQlVGX01FTV9mcmVlOworKwkJQlVGX01FTV9ncm93OworKwkJQlVGX01FTV9uZXc7CisrCQlCVUZfc3RyZHVwOworKwkJQ09ORl9mcmVlOworKwkJQ09ORl9nZXRfbnVtYmVyOworKwkJQ09ORl9nZXRfc2VjdGlvbjsKKysJCUNPTkZfZ2V0X3N0cmluZzsKKysJCUNPTkZfbG9hZDsKKysJCUNSWVBUT19hZGRfbG9jazsKKysJCUNSWVBUT19kYmdfZnJlZTsKKysJCUNSWVBUT19kYmdfbWFsbG9jOworKwkJQ1JZUFRPX2RiZ19yZWFsbG9jOworKwkJQ1JZUFRPX2RiZ19yZW1hbGxvYzsKKysJCUNSWVBUT19mcmVlOworKwkJQ1JZUFRPX2dldF9hZGRfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfaWRfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2xvY2tfbmFtZTsKKysJCUNSWVBUT19nZXRfbG9ja2luZ19jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19sb2NrOworKwkJQ1JZUFRPX21hbGxvYzsKKysJCUNSWVBUT19tZW1fY3RybDsKKysJCUNSWVBUT19tZW1fbGVha3M7CisrCQlDUllQVE9fbWVtX2xlYWtzX2NiOworKwkJQ1JZUFRPX21lbV9sZWFrc19mcDsKKysJCUNSWVBUT19yZWFsbG9jOworKwkJQ1JZUFRPX3JlbWFsbG9jOworKwkJQ1JZUFRPX3NldF9hZGRfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfaWRfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2xvY2tpbmdfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fdGhyZWFkX2lkOworKwkJREhfY2hlY2s7CisrCQlESF9jb21wdXRlX2tleTsKKysJCURIX2ZyZWU7CisrCQlESF9nZW5lcmF0ZV9rZXk7CisrCQlESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzOworKwkJREhfbmV3OworKwkJREhfc2l6ZTsKKysJCURIcGFyYW1zX3ByaW50OworKwkJREhwYXJhbXNfcHJpbnRfZnA7CisrCQlEU0FfZnJlZTsKKysJCURTQV9nZW5lcmF0ZV9rZXk7CisrCQlEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyczsKKysJCURTQV9pc19wcmltZTsKKysJCURTQV9uZXc7CisrCQlEU0FfcHJpbnQ7CisrCQlEU0FfcHJpbnRfZnA7CisrCQlEU0Ffc2lnbjsKKysJCURTQV9zaWduX3NldHVwOworKwkJRFNBX3NpemU7CisrCQlEU0FfdmVyaWZ5OworKwkJRFNBcGFyYW1zX3ByaW50OworKwkJRFNBcGFyYW1zX3ByaW50X2ZwOworKwkJRVJSX2NsZWFyX2Vycm9yOworKwkJRVJSX2Vycm9yX3N0cmluZzsKKysJCUVSUl9mcmVlX3N0cmluZ3M7CisrCQlFUlJfZnVuY19lcnJvcl9zdHJpbmc7CisrCQlFUlJfZ2V0X2Vycl9zdGF0ZV90YWJsZTsKKysJCUVSUl9nZXRfZXJyb3I7CisrCQlFUlJfZ2V0X2Vycm9yX2xpbmU7CisrCQlFUlJfZ2V0X3N0YXRlOworKwkJRVJSX2dldF9zdHJpbmdfdGFibGU7CisrCQlFUlJfbGliX2Vycm9yX3N0cmluZzsKKysJCUVSUl9sb2FkX0FTTjFfc3RyaW5nczsKKysJCUVSUl9sb2FkX0JJT19zdHJpbmdzOworKwkJRVJSX2xvYWRfQk5fc3RyaW5nczsKKysJCUVSUl9sb2FkX0JVRl9zdHJpbmdzOworKwkJRVJSX2xvYWRfQ09ORl9zdHJpbmdzOworKwkJRVJSX2xvYWRfREhfc3RyaW5nczsKKysJCUVSUl9sb2FkX0RTQV9zdHJpbmdzOworKwkJRVJSX2xvYWRfRVJSX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9FVlBfc3RyaW5nczsKKysJCUVSUl9sb2FkX09CSl9zdHJpbmdzOworKwkJRVJSX2xvYWRfUEVNX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9QUk9YWV9zdHJpbmdzOworKwkJRVJSX2xvYWRfUlNBX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9YNTA5X3N0cmluZ3M7CisrCQlFUlJfbG9hZF9jcnlwdG9fc3RyaW5nczsKKysJCUVSUl9sb2FkX3N0cmluZ3M7CisrCQlFUlJfcGVla19lcnJvcjsKKysJCUVSUl9wZWVrX2Vycm9yX2xpbmU7CisrCQlFUlJfcHJpbnRfZXJyb3JzOworKwkJRVJSX3ByaW50X2Vycm9yc19mcDsKKysJCUVSUl9wdXRfZXJyb3I7CisrCQlFUlJfcmVhc29uX2Vycm9yX3N0cmluZzsKKysJCUVSUl9yZW1vdmVfc3RhdGU7CisrCQlFVlBfQnl0ZXNUb0tleTsKKysJCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXA7CisrCQlFVlBfQ2lwaGVyRmluYWw7CisrCQlFVlBfQ2lwaGVySW5pdDsKKysJCUVWUF9DaXBoZXJVcGRhdGU7CisrCQlFVlBfRGVjb2RlQmxvY2s7CisrCQlFVlBfRGVjb2RlRmluYWw7CisrCQlFVlBfRGVjb2RlSW5pdDsKKysJCUVWUF9EZWNvZGVVcGRhdGU7CisrCQlFVlBfRGVjcnlwdEZpbmFsOworKwkJRVZQX0RlY3J5cHRJbml0OworKwkJRVZQX0RlY3J5cHRVcGRhdGU7CisrCQlFVlBfRGlnZXN0RmluYWw7CisrCQlFVlBfRGlnZXN0SW5pdDsKKysJCUVWUF9EaWdlc3RVcGRhdGU7CisrCQlFVlBfRW5jb2RlQmxvY2s7CisrCQlFVlBfRW5jb2RlRmluYWw7CisrCQlFVlBfRW5jb2RlSW5pdDsKKysJCUVWUF9FbmNvZGVVcGRhdGU7CisrCQlFVlBfRW5jcnlwdEZpbmFsOworKwkJRVZQX0VuY3J5cHRJbml0OworKwkJRVZQX0VuY3J5cHRVcGRhdGU7CisrCQlFVlBfT3BlbkZpbmFsOworKwkJRVZQX09wZW5Jbml0OworKwkJRVZQX1BLRVlfYXNzaWduOworKwkJRVZQX1BLRVlfY29weV9wYXJhbWV0ZXJzOworKwkJRVZQX1BLRVlfZnJlZTsKKysJCUVWUF9QS0VZX21pc3NpbmdfcGFyYW1ldGVyczsKKysJCUVWUF9QS0VZX25ldzsKKysJCUVWUF9QS0VZX3NhdmVfcGFyYW1ldGVyczsKKysJCUVWUF9QS0VZX3NpemU7CisrCQlFVlBfUEtFWV90eXBlOworKwkJRVZQX1NlYWxGaW5hbDsKKysJCUVWUF9TZWFsSW5pdDsKKysJCUVWUF9TaWduRmluYWw7CisrCQlFVlBfVmVyaWZ5RmluYWw7CisrCQlFVlBfYWRkX2FsaWFzOworKwkJRVZQX2FkZF9jaXBoZXI7CisrCQlFVlBfYWRkX2RpZ2VzdDsKKysJCUVWUF9iZl9jYmM7CisrCQlFVlBfYmZfY2ZiNjQ7CisrCQlFVlBfYmZfZWNiOworKwkJRVZQX2JmX29mYjsKKysJCUVWUF9jbGVhbnVwOworKwkJRVZQX2Rlc19jYmM7CisrCQlFVlBfZGVzX2NmYjY0OworKwkJRVZQX2Rlc19lY2I7CisrCQlFVlBfZGVzX2VkZTsKKysJCUVWUF9kZXNfZWRlMzsKKysJCUVWUF9kZXNfZWRlM19jYmM7CisrCQlFVlBfZGVzX2VkZTNfY2ZiNjQ7CisrCQlFVlBfZGVzX2VkZTNfb2ZiOworKwkJRVZQX2Rlc19lZGVfY2JjOworKwkJRVZQX2Rlc19lZGVfY2ZiNjQ7CisrCQlFVlBfZGVzX2VkZV9vZmI7CisrCQlFVlBfZGVzX29mYjsKKysJCUVWUF9kZXN4X2NiYzsKKysJCUVWUF9kc3M7CisrCQlFVlBfZHNzMTsKKysJCUVWUF9lbmNfbnVsbDsKKysJCUVWUF9nZXRfY2lwaGVyYnluYW1lOworKwkJRVZQX2dldF9kaWdlc3RieW5hbWU7CisrCQlFVlBfZ2V0X3B3X3Byb21wdDsKKysJCUVWUF9pZGVhX2NiYzsKKysJCUVWUF9pZGVhX2NmYjY0OworKwkJRVZQX2lkZWFfZWNiOworKwkJRVZQX2lkZWFfb2ZiOworKwkJRVZQX21kMjsKKysJCUVWUF9tZDU7CisrCQlFVlBfbWRfbnVsbDsKKysJCUVWUF9yYzJfY2JjOworKwkJRVZQX3JjMl9jZmI2NDsKKysJCUVWUF9yYzJfZWNiOworKwkJRVZQX3JjMl9vZmI7CisrCQlFVlBfcmM0OworKwkJRVZQX3JlYWRfcHdfc3RyaW5nOworKwkJRVZQX3NldF9wd19wcm9tcHQ7CisrCQlFVlBfc2hhOworKwkJRVZQX3NoYTE7CisrCQlNRDI7CisrCQlNRDJfRmluYWw7CisrCQlNRDJfSW5pdDsKKysJCU1EMl9VcGRhdGU7CisrCQlNRDJfb3B0aW9uczsKKysJCU1ENTsKKysJCU1ENV9GaW5hbDsKKysJCU1ENV9Jbml0OworKwkJTUQ1X1VwZGF0ZTsKKysJCU1EQzI7CisrCQlNREMyX0ZpbmFsOworKwkJTURDMl9Jbml0OworKwkJTURDMl9VcGRhdGU7CisrCQlORVRTQ0FQRV9TUEtBQ19mcmVlOworKwkJTkVUU0NBUEVfU1BLQUNfbmV3OworKwkJTkVUU0NBUEVfU1BLSV9mcmVlOworKwkJTkVUU0NBUEVfU1BLSV9uZXc7CisrCQlORVRTQ0FQRV9TUEtJX3NpZ247CisrCQlORVRTQ0FQRV9TUEtJX3ZlcmlmeTsKKysJCU9CSl9hZGRfb2JqZWN0OworKwkJT0JKX2JzZWFyY2g7CisrCQlPQkpfY2xlYW51cDsKKysJCU9CSl9jbXA7CisrCQlPQkpfY3JlYXRlOworKwkJT0JKX2R1cDsKKysJCU9CSl9sbjJuaWQ7CisrCQlPQkpfbmV3X25pZDsKKysJCU9CSl9uaWQybG47CisrCQlPQkpfbmlkMm9iajsKKysJCU9CSl9uaWQyc247CisrCQlPQkpfb2JqMm5pZDsKKysJCU9CSl9zbjJuaWQ7CisrCQlPQkpfdHh0Mm5pZDsKKysJCVBFTV9BU04xX3JlYWQ7CisrCQlQRU1fQVNOMV9yZWFkX2JpbzsKKysJCVBFTV9BU04xX3dyaXRlOworKwkJUEVNX0FTTjFfd3JpdGVfYmlvOworKwkJUEVNX1NlYWxGaW5hbDsKKysJCVBFTV9TZWFsSW5pdDsKKysJCVBFTV9TZWFsVXBkYXRlOworKwkJUEVNX1NpZ25GaW5hbDsKKysJCVBFTV9TaWduSW5pdDsKKysJCVBFTV9TaWduVXBkYXRlOworKwkJUEVNX1g1MDlfSU5GT19yZWFkOworKwkJUEVNX1g1MDlfSU5GT19yZWFkX2JpbzsKKysJCVBFTV9YNTA5X0lORk9fd3JpdGVfYmlvOworKwkJUEVNX2Rla19pbmZvOworKwkJUEVNX2RvX2hlYWRlcjsKKysJCVBFTV9nZXRfRVZQX0NJUEhFUl9JTkZPOworKwkJUEVNX3Byb2NfdHlwZTsKKysJCVBFTV9yZWFkOworKwkJUEVNX3JlYWRfREhwYXJhbXM7CisrCQlQRU1fcmVhZF9EU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfRFNBcGFyYW1zOworKwkJUEVNX3JlYWRfUEtDUzc7CisrCQlQRU1fcmVhZF9Qcml2YXRlS2V5OworKwkJUEVNX3JlYWRfUlNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX1g1MDk7CisrCQlQRU1fcmVhZF9YNTA5X0NSTDsKKysJCVBFTV9yZWFkX1g1MDlfUkVROworKwkJUEVNX3JlYWRfYmlvOworKwkJUEVNX3JlYWRfYmlvX0RIcGFyYW1zOworKwkJUEVNX3JlYWRfYmlvX0RTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9iaW9fRFNBcGFyYW1zOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M3OworKwkJUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9iaW9fUlNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5OworKwkJUEVNX3JlYWRfYmlvX1g1MDlfQ1JMOworKwkJUEVNX3JlYWRfYmlvX1g1MDlfUkVROworKwkJUEVNX3dyaXRlOworKwkJUEVNX3dyaXRlX0RIcGFyYW1zOworKwkJUEVNX3dyaXRlX0RTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfRFNBcGFyYW1zOworKwkJUEVNX3dyaXRlX1BLQ1M3OworKwkJUEVNX3dyaXRlX1ByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfUlNBUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9YNTA5OworKwkJUEVNX3dyaXRlX1g1MDlfQ1JMOworKwkJUEVNX3dyaXRlX1g1MDlfUkVROworKwkJUEVNX3dyaXRlX2JpbzsKKysJCVBFTV93cml0ZV9iaW9fREhwYXJhbXM7CisrCQlQRU1fd3JpdGVfYmlvX0RTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfYmlvX0RTQXBhcmFtczsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzc7CisrCQlQRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfYmlvX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDk7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ1JMOworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X1JFUTsKKysJCVBLQ1M3X0RJR0VTVF9mcmVlOworKwkJUEtDUzdfRElHRVNUX25ldzsKKysJCVBLQ1M3X0VOQ1JZUFRfZnJlZTsKKysJCVBLQ1M3X0VOQ1JZUFRfbmV3OworKwkJUEtDUzdfRU5DX0NPTlRFTlRfZnJlZTsKKysJCVBLQ1M3X0VOQ19DT05URU5UX25ldzsKKysJCVBLQ1M3X0VOVkVMT1BFX2ZyZWU7CisrCQlQS0NTN19FTlZFTE9QRV9uZXc7CisrCQlQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9kaWdlc3Q7CisrCQlQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9mcmVlOworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfbmV3OworKwkJUEtDUzdfUkVDSVBfSU5GT19mcmVlOworKwkJUEtDUzdfUkVDSVBfSU5GT19uZXc7CisrCQlQS0NTN19TSUdORURfZnJlZTsKKysJCVBLQ1M3X1NJR05FRF9uZXc7CisrCQlQS0NTN19TSUdORVJfSU5GT19mcmVlOworKwkJUEtDUzdfU0lHTkVSX0lORk9fbmV3OworKwkJUEtDUzdfU0lHTl9FTlZFTE9QRV9mcmVlOworKwkJUEtDUzdfU0lHTl9FTlZFTE9QRV9uZXc7CisrCQlQS0NTN19kdXA7CisrCQlQS0NTN19mcmVlOworKwkJUEtDUzdfbmV3OworKwkJUFJPWFlfRU5UUllfYWRkX25vcHJveHk7CisrCQlQUk9YWV9FTlRSWV9jbGVhcl9ub3Byb3h5OworKwkJUFJPWFlfRU5UUllfZnJlZTsKKysJCVBST1hZX0VOVFJZX2dldF9ub3Byb3h5OworKwkJUFJPWFlfRU5UUllfbmV3OworKwkJUFJPWFlfRU5UUllfc2V0X3NlcnZlcjsKKysJCVBST1hZX2FkZF9ub3Byb3h5OworKwkJUFJPWFlfYWRkX3NlcnZlcjsKKysJCVBST1hZX2NoZWNrX2J5X2hvc3Q7CisrCQlQUk9YWV9jaGVja191cmw7CisrCQlQUk9YWV9jbGVhcl9ub3Byb3h5OworKwkJUFJPWFlfZnJlZTsKKysJCVBST1hZX2dldF9ub3Byb3h5OworKwkJUFJPWFlfZ2V0X3Byb3hpZXM7CisrCQlQUk9YWV9nZXRfcHJveHlfZW50cnk7CisrCQlQUk9YWV9sb2FkX2NvbmY7CisrCQlQUk9YWV9uZXc7CisrCQlQUk9YWV9wcmludDsKKysJCVJBTkRfYnl0ZXM7CisrCQlSQU5EX2NsZWFudXA7CisrCQlSQU5EX2ZpbGVfbmFtZTsKKysJCVJBTkRfbG9hZF9maWxlOworKwkJUkFORF9zY3JlZW47CisrCQlSQU5EX3NlZWQ7CisrCQlSQU5EX3dyaXRlX2ZpbGU7CisrCQlSQzJfY2JjX2VuY3J5cHQ7CisrCQlSQzJfY2ZiNjRfZW5jcnlwdDsKKysJCVJDMl9lY2JfZW5jcnlwdDsKKysJCVJDMl9lbmNyeXB0OworKwkJUkMyX29mYjY0X2VuY3J5cHQ7CisrCQlSQzJfc2V0X2tleTsKKysJCVJDNDsKKysJCVJDNF9vcHRpb25zOworKwkJUkM0X3NldF9rZXk7CisrCQlSU0FQcml2YXRlS2V5X2FzbjFfbWV0aDsKKysJCVJTQVByaXZhdGVLZXlfZHVwOworKwkJUlNBUHVibGljS2V5X2R1cDsKKysJCVJTQV9QS0NTMV9TU0xlYXk7CisrCQlSU0FfZnJlZTsKKysJCVJTQV9nZW5lcmF0ZV9rZXk7CisrCQlSU0FfbmV3OworKwkJUlNBX25ld19tZXRob2Q7CisrCQlSU0FfcHJpbnQ7CisrCQlSU0FfcHJpbnRfZnA7CisrCQlSU0FfcHJpdmF0ZV9kZWNyeXB0OworKwkJUlNBX3ByaXZhdGVfZW5jcnlwdDsKKysJCVJTQV9wdWJsaWNfZGVjcnlwdDsKKysJCVJTQV9wdWJsaWNfZW5jcnlwdDsKKysJCVJTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlSU0Ffc2lnbjsKKysJCVJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HOworKwkJUlNBX3NpemU7CisrCQlSU0FfdmVyaWZ5OworKwkJUlNBX3ZlcmlmeV9BU04xX09DVEVUX1NUUklORzsKKysJCVNIQTsKKysJCVNIQTE7CisrCQlTSEExX0ZpbmFsOworKwkJU0hBMV9Jbml0OworKwkJU0hBMV9VcGRhdGU7CisrCQlTSEFfRmluYWw7CisrCQlTSEFfSW5pdDsKKysJCVNIQV9VcGRhdGU7CisrCQlPcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtczsKKysJCU9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzOworKwkJT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHM7CisrCQlUWFRfREJfY3JlYXRlX2luZGV4OworKwkJVFhUX0RCX2ZyZWU7CisrCQlUWFRfREJfZ2V0X2J5X2luZGV4OworKwkJVFhUX0RCX2luc2VydDsKKysJCVRYVF9EQl9yZWFkOworKwkJVFhUX0RCX3dyaXRlOworKwkJWDUwOV9BTEdPUl9mcmVlOworKwkJWDUwOV9BTEdPUl9uZXc7CisrCQlYNTA5X0FUVFJJQlVURV9mcmVlOworKwkJWDUwOV9BVFRSSUJVVEVfbmV3OworKwkJWDUwOV9DSU5GX2ZyZWU7CisrCQlYNTA5X0NJTkZfbmV3OworKwkJWDUwOV9DUkxfSU5GT19mcmVlOworKwkJWDUwOV9DUkxfSU5GT19uZXc7CisrCQlYNTA5X0NSTF9hZGRfZXh0OworKwkJWDUwOV9DUkxfY21wOworKwkJWDUwOV9DUkxfZGVsZXRlX2V4dDsKKysJCVg1MDlfQ1JMX2R1cDsKKysJCVg1MDlfQ1JMX2ZyZWU7CisrCQlYNTA5X0NSTF9nZXRfZXh0OworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9DUkxfbmV3OworKwkJWDUwOV9DUkxfc2lnbjsKKysJCVg1MDlfQ1JMX3ZlcmlmeTsKKysJCVg1MDlfRVhURU5TSU9OX2NyZWF0ZV9ieV9OSUQ7CisrCQlYNTA5X0VYVEVOU0lPTl9jcmVhdGVfYnlfT0JKOworKwkJWDUwOV9FWFRFTlNJT05fZHVwOworKwkJWDUwOV9FWFRFTlNJT05fZnJlZTsKKysJCVg1MDlfRVhURU5TSU9OX2dldF9jcml0aWNhbDsKKysJCVg1MDlfRVhURU5TSU9OX2dldF9kYXRhOworKwkJWDUwOV9FWFRFTlNJT05fZ2V0X29iamVjdDsKKysJCVg1MDlfRVhURU5TSU9OX25ldzsKKysJCVg1MDlfRVhURU5TSU9OX3NldF9jcml0aWNhbDsKKysJCVg1MDlfRVhURU5TSU9OX3NldF9kYXRhOworKwkJWDUwOV9FWFRFTlNJT05fc2V0X29iamVjdDsKKysJCVg1MDlfSU5GT19mcmVlOworKwkJWDUwOV9JTkZPX25ldzsKKysJCVg1MDlfTE9PS1VQX2J5X2FsaWFzOworKwkJWDUwOV9MT09LVVBfYnlfZmluZ2VycHJpbnQ7CisrCQlYNTA5X0xPT0tVUF9ieV9pc3N1ZXJfc2VyaWFsOworKwkJWDUwOV9MT09LVVBfYnlfc3ViamVjdDsKKysJCVg1MDlfTE9PS1VQX2N0cmw7CisrCQlYNTA5X0xPT0tVUF9maWxlOworKwkJWDUwOV9MT09LVVBfZnJlZTsKKysJCVg1MDlfTE9PS1VQX2hhc2hfZGlyOworKwkJWDUwOV9MT09LVVBfaW5pdDsKKysJCVg1MDlfTE9PS1VQX25ldzsKKysJCVg1MDlfTE9PS1VQX3NodXRkb3duOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9OSUQ7CisrCQlYNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X09CSjsKKysJCVg1MDlfTkFNRV9FTlRSWV9kdXA7CisrCQlYNTA5X05BTUVfRU5UUllfZnJlZTsKKysJCVg1MDlfTkFNRV9FTlRSWV9nZXRfZGF0YTsKKysJCVg1MDlfTkFNRV9FTlRSWV9nZXRfb2JqZWN0OworKwkJWDUwOV9OQU1FX0VOVFJZX25ldzsKKysJCVg1MDlfTkFNRV9FTlRSWV9zZXRfZGF0YTsKKysJCVg1MDlfTkFNRV9FTlRSWV9zZXRfb2JqZWN0OworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeTsKKysJCVg1MDlfTkFNRV9jbXA7CisrCQlYNTA5X05BTUVfZGVsZXRlX2VudHJ5OworKwkJWDUwOV9OQU1FX2RpZ2VzdDsKKysJCVg1MDlfTkFNRV9kdXA7CisrCQlYNTA5X05BTUVfZW50cnlfY291bnQ7CisrCQlYNTA5X05BTUVfZnJlZTsKKysJCVg1MDlfTkFNRV9nZXRfZW50cnk7CisrCQlYNTA5X05BTUVfZ2V0X2luZGV4X2J5X05JRDsKKysJCVg1MDlfTkFNRV9nZXRfaW5kZXhfYnlfT0JKOworKwkJWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRDsKKysJCVg1MDlfTkFNRV9nZXRfdGV4dF9ieV9PQko7CisrCQlYNTA5X05BTUVfaGFzaDsKKysJCVg1MDlfTkFNRV9uZXc7CisrCQlYNTA5X05BTUVfb25lbGluZTsKKysJCVg1MDlfTkFNRV9wcmludDsKKysJCVg1MDlfTkFNRV9zZXQ7CisrCQlYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzOworKwkJWDUwOV9PQkpFQ1RfcmV0cmlldmVfYnlfc3ViamVjdDsKKysJCVg1MDlfT0JKRUNUX3VwX3JlZl9jb3VudDsKKysJCVg1MDlfUEtFWV9mcmVlOworKwkJWDUwOV9QS0VZX25ldzsKKysJCVg1MDlfUFVCS0VZX2ZyZWU7CisrCQlYNTA5X1BVQktFWV9nZXQ7CisrCQlYNTA5X1BVQktFWV9uZXc7CisrCQlYNTA5X1BVQktFWV9zZXQ7CisrCQlYNTA5X1JFUV9JTkZPX2ZyZWU7CisrCQlYNTA5X1JFUV9JTkZPX25ldzsKKysJCVg1MDlfUkVRX2R1cDsKKysJCVg1MDlfUkVRX2ZyZWU7CisrCQlYNTA5X1JFUV9nZXRfcHVia2V5OworKwkJWDUwOV9SRVFfbmV3OworKwkJWDUwOV9SRVFfcHJpbnQ7CisrCQlYNTA5X1JFUV9wcmludF9mcDsKKysJCVg1MDlfUkVRX3NldF9wdWJrZXk7CisrCQlYNTA5X1JFUV9zZXRfc3ViamVjdF9uYW1lOworKwkJWDUwOV9SRVFfc2V0X3ZlcnNpb247CisrCQlYNTA5X1JFUV9zaWduOworKwkJWDUwOV9SRVFfdG9fWDUwOTsKKysJCVg1MDlfUkVRX3ZlcmlmeTsKKysJCVg1MDlfUkVWT0tFRF9hZGRfZXh0OworKwkJWDUwOV9SRVZPS0VEX2RlbGV0ZV9leHQ7CisrCQlYNTA5X1JFVk9LRURfZnJlZTsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0OworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfTklEOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9jcml0aWM7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfUkVWT0tFRF9uZXc7CisrCQlYNTA5X1NJR19mcmVlOworKwkJWDUwOV9TSUdfbmV3OworKwkJWDUwOV9TVE9SRV9DVFhfY2xlYW51cDsKKysJCVg1MDlfU1RPUkVfQ1RYX2luaXQ7CisrCQlYNTA5X1NUT1JFX2FkZF9jZXJ0OworKwkJWDUwOV9TVE9SRV9hZGRfbG9va3VwOworKwkJWDUwOV9TVE9SRV9mcmVlOworKwkJWDUwOV9TVE9SRV9nZXRfYnlfc3ViamVjdDsKKysJCVg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnM7CisrCQlYNTA5X1NUT1JFX25ldzsKKysJCVg1MDlfU1RPUkVfc2V0X2RlZmF1bHRfcGF0aHM7CisrCQlYNTA5X1ZBTF9mcmVlOworKwkJWDUwOV9WQUxfbmV3OworKwkJWDUwOV9hZGRfZXh0OworKwkJWDUwOV9hc24xX21ldGg7CisrCQlYNTA5X2NlcnRpZmljYXRlX3R5cGU7CisrCQlYNTA5X2NoZWNrX3ByaXZhdGVfa2V5OworKwkJWDUwOV9jbXBfY3VycmVudF90aW1lOworKwkJWDUwOV9kZWxldGVfZXh0OworKwkJWDUwOV9kaWdlc3Q7CisrCQlYNTA5X2R1cDsKKysJCVg1MDlfZnJlZTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9hcmVhOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2RpcjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXJfZW52OworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGU7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZV9lbnY7CisrCQlYNTA5X2dldF9kZWZhdWx0X3ByaXZhdGVfZGlyOworKwkJWDUwOV9nZXRfZXh0OworKwkJWDUwOV9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlYNTA5X2dldF9leHRfY291bnQ7CisrCQlYNTA5X2dldF9pc3N1ZXJfbmFtZTsKKysJCVg1MDlfZ2V0X3B1YmtleTsKKysJCVg1MDlfZ2V0X3B1YmtleV9wYXJhbWV0ZXJzOworKwkJWDUwOV9nZXRfc2VyaWFsTnVtYmVyOworKwkJWDUwOV9nZXRfc3ViamVjdF9uYW1lOworKwkJWDUwOV9nbXRpbWVfYWRqOworKwkJWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9jbXA7CisrCQlYNTA5X2lzc3Vlcl9hbmRfc2VyaWFsX2hhc2g7CisrCQlYNTA5X2lzc3Vlcl9uYW1lX2NtcDsKKysJCVg1MDlfaXNzdWVyX25hbWVfaGFzaDsKKysJCVg1MDlfbG9hZF9jZXJ0X2ZpbGU7CisrCQlYNTA5X25ldzsKKysJCVg1MDlfcHJpbnQ7CisrCQlYNTA5X3ByaW50X2ZwOworKwkJWDUwOV9zZXRfaXNzdWVyX25hbWU7CisrCQlYNTA5X3NldF9ub3RBZnRlcjsKKysJCVg1MDlfc2V0X25vdEJlZm9yZTsKKysJCVg1MDlfc2V0X3B1YmtleTsKKysJCVg1MDlfc2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfc2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfc2V0X3ZlcnNpb247CisrCQlYNTA5X3NpZ247CisrCQlYNTA5X3N1YmplY3RfbmFtZV9jbXA7CisrCQlYNTA5X3N1YmplY3RfbmFtZV9oYXNoOworKwkJWDUwOV90b19YNTA5X1JFUTsKKysJCVg1MDlfdmVyaWZ5OworKwkJWDUwOV92ZXJpZnlfY2VydDsKKysJCVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nOworKwkJWDUwOXYzX2FkZF9leHQ7CisrCQlYNTA5djNfYWRkX2V4dGVuc2lvbjsKKysJCVg1MDl2M19hZGRfbmV0c2NhcGVfZXh0ZW5zaW9uczsKKysJCVg1MDl2M19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9uczsKKysJCVg1MDl2M19jbGVhbnVwX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfZGF0YV90eXBlX2J5X05JRDsKKysJCVg1MDl2M19kYXRhX3R5cGVfYnlfT0JKOworKwkJWDUwOXYzX2RlbGV0ZV9leHQ7CisrCQlYNTA5djNfZ2V0X2V4dDsKKysJCVg1MDl2M19nZXRfZXh0X2J5X05JRDsKKysJCVg1MDl2M19nZXRfZXh0X2J5X09CSjsKKysJCVg1MDl2M19nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOXYzX2dldF9leHRfY291bnQ7CisrCQlYNTA5djNfcGFja19zdHJpbmc7CisrCQlYNTA5djNfcGFja190eXBlX2J5X05JRDsKKysJCVg1MDl2M19wYWNrX3R5cGVfYnlfT0JKOworKwkJWDUwOXYzX3VucGFja19zdHJpbmc7CisrCQlfZGVzX2NyeXB0OworKwkJYTJkX0FTTjFfT0JKRUNUOworKwkJYTJpX0FTTjFfSU5URUdFUjsKKysJCWEyaV9BU04xX1NUUklORzsKKysJCWFzbjFfRmluaXNoOworKwkJYXNuMV9HZXRTZXF1ZW5jZTsKKysJCWJuX2Rpdl93b3JkczsKKysJCWJuX2V4cGFuZDI7CisrCQlibl9tdWxfYWRkX3dvcmRzOworKwkJYm5fbXVsX3dvcmRzOworKwkJQk5fdWFkZDsKKysJCUJOX3VzdWI7CisrCQlibl9zcXJfd29yZHM7CisrCQlfb3NzbF9vbGRfY3J5cHQ7CisrCQlkMmlfQVNOMV9CSVRfU1RSSU5HOworKwkJZDJpX0FTTjFfQk9PTEVBTjsKKysJCWQyaV9BU04xX0hFQURFUjsKKysJCWQyaV9BU04xX0lBNVNUUklORzsKKysJCWQyaV9BU04xX0lOVEVHRVI7CisrCQlkMmlfQVNOMV9PQkpFQ1Q7CisrCQlkMmlfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlkMmlfQVNOMV9QUklOVEFCTEU7CisrCQlkMmlfQVNOMV9QUklOVEFCTEVTVFJJTkc7CisrCQlkMmlfQVNOMV9TRVQ7CisrCQlkMmlfQVNOMV9UNjFTVFJJTkc7CisrCQlkMmlfQVNOMV9UWVBFOworKwkJZDJpX0FTTjFfVVRDVElNRTsKKysJCWQyaV9BU04xX2J5dGVzOworKwkJZDJpX0FTTjFfdHlwZV9ieXRlczsKKysJCWQyaV9ESHBhcmFtczsKKysJCWQyaV9EU0FQcml2YXRlS2V5OworKwkJZDJpX0RTQVByaXZhdGVLZXlfYmlvOworKwkJZDJpX0RTQVByaXZhdGVLZXlfZnA7CisrCQlkMmlfRFNBUHVibGljS2V5OworKwkJZDJpX0RTQXBhcmFtczsKKysJCWQyaV9ORVRTQ0FQRV9TUEtBQzsKKysJCWQyaV9ORVRTQ0FQRV9TUEtJOworKwkJZDJpX05ldHNjYXBlX1JTQTsKKysJCWQyaV9QS0NTNzsKKysJCWQyaV9QS0NTN19ESUdFU1Q7CisrCQlkMmlfUEtDUzdfRU5DUllQVDsKKysJCWQyaV9QS0NTN19FTkNfQ09OVEVOVDsKKysJCWQyaV9QS0NTN19FTlZFTE9QRTsKKysJCWQyaV9QS0NTN19JU1NVRVJfQU5EX1NFUklBTDsKKysJCWQyaV9QS0NTN19SRUNJUF9JTkZPOworKwkJZDJpX1BLQ1M3X1NJR05FRDsKKysJCWQyaV9QS0NTN19TSUdORVJfSU5GTzsKKysJCWQyaV9QS0NTN19TSUdOX0VOVkVMT1BFOworKwkJZDJpX1BLQ1M3X2JpbzsKKysJCWQyaV9QS0NTN19mcDsKKysJCWQyaV9Qcml2YXRlS2V5OworKwkJZDJpX1B1YmxpY0tleTsKKysJCWQyaV9SU0FQcml2YXRlS2V5OworKwkJZDJpX1JTQVByaXZhdGVLZXlfYmlvOworKwkJZDJpX1JTQVByaXZhdGVLZXlfZnA7CisrCQlkMmlfUlNBUHVibGljS2V5OworKwkJZDJpX1g1MDk7CisrCQlkMmlfWDUwOV9BTEdPUjsKKysJCWQyaV9YNTA5X0FUVFJJQlVURTsKKysJCWQyaV9YNTA5X0NJTkY7CisrCQlkMmlfWDUwOV9DUkw7CisrCQlkMmlfWDUwOV9DUkxfSU5GTzsKKysJCWQyaV9YNTA5X0NSTF9iaW87CisrCQlkMmlfWDUwOV9DUkxfZnA7CisrCQlkMmlfWDUwOV9FWFRFTlNJT047CisrCQlkMmlfWDUwOV9OQU1FOworKwkJZDJpX1g1MDlfTkFNRV9FTlRSWTsKKysJCWQyaV9YNTA5X1BLRVk7CisrCQlkMmlfWDUwOV9QVUJLRVk7CisrCQlkMmlfWDUwOV9SRVE7CisrCQlkMmlfWDUwOV9SRVFfSU5GTzsKKysJCWQyaV9YNTA5X1JFUV9iaW87CisrCQlkMmlfWDUwOV9SRVFfZnA7CisrCQlkMmlfWDUwOV9SRVZPS0VEOworKwkJZDJpX1g1MDlfU0lHOworKwkJZDJpX1g1MDlfVkFMOworKwkJZDJpX1g1MDlfYmlvOworKwkJZDJpX1g1MDlfZnA7CisrCQlERVNfY2JjX2Nrc3VtOworKwkJREVTX2NiY19lbmNyeXB0OworKwkJREVTX2NibG9ja19wcmludF9maWxlOworKwkJREVTX2NmYjY0X2VuY3J5cHQ7CisrCQlERVNfY2ZiX2VuY3J5cHQ7CisrCQlERVNfZGVjcnlwdDM7CisrCQlERVNfZWNiM19lbmNyeXB0OworKwkJREVTX2VjYl9lbmNyeXB0OworKwkJREVTX2VkZTNfY2JjX2VuY3J5cHQ7CisrCQlERVNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJREVTX2VkZTNfb2ZiNjRfZW5jcnlwdDsKKysJCURFU19lbmNfcmVhZDsKKysJCURFU19lbmNfd3JpdGU7CisrCQlERVNfZW5jcnlwdDE7CisrCQlERVNfZW5jcnlwdDI7CisrCQlERVNfZW5jcnlwdDM7CisrCQlERVNfZmNyeXB0OworKwkJREVTX2lzX3dlYWtfa2V5OworKwkJREVTX2tleV9zY2hlZDsKKysJCURFU19uY2JjX2VuY3J5cHQ7CisrCQlERVNfb2ZiNjRfZW5jcnlwdDsKKysJCURFU19vZmJfZW5jcnlwdDsKKysJCURFU19vcHRpb25zOworKwkJREVTX3BjYmNfZW5jcnlwdDsKKysJCURFU19xdWFkX2Nrc3VtOworKwkJREVTX3JhbmRvbV9rZXk7CisrCQlfb3NzbF9vbGRfZGVzX3JhbmRvbV9zZWVkOworKwkJX29zc2xfb2xkX2Rlc19yZWFkXzJwYXNzd29yZHM7CisrCQlfb3NzbF9vbGRfZGVzX3JlYWRfcGFzc3dvcmQ7CisrCQlfb3NzbF9vbGRfZGVzX3JlYWRfcHc7CisrCQlfb3NzbF9vbGRfZGVzX3JlYWRfcHdfc3RyaW5nOworKwkJREVTX3NldF9rZXk7CisrCQlERVNfc2V0X29kZF9wYXJpdHk7CisrCQlERVNfc3RyaW5nX3RvXzJrZXlzOworKwkJREVTX3N0cmluZ190b19rZXk7CisrCQlERVNfeGNiY19lbmNyeXB0OworKwkJREVTX3h3aGl0ZV9pbjJvdXQ7CisrCQlmY3J5cHRfYm9keTsKKysJCWkyYV9BU04xX0lOVEVHRVI7CisrCQlpMmFfQVNOMV9PQkpFQ1Q7CisrCQlpMmFfQVNOMV9TVFJJTkc7CisrCQlpMmRfQVNOMV9CSVRfU1RSSU5HOworKwkJaTJkX0FTTjFfQk9PTEVBTjsKKysJCWkyZF9BU04xX0hFQURFUjsKKysJCWkyZF9BU04xX0lBNVNUUklORzsKKysJCWkyZF9BU04xX0lOVEVHRVI7CisrCQlpMmRfQVNOMV9PQkpFQ1Q7CisrCQlpMmRfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlpMmRfQVNOMV9QUklOVEFCTEU7CisrCQlpMmRfQVNOMV9TRVQ7CisrCQlpMmRfQVNOMV9UWVBFOworKwkJaTJkX0FTTjFfVVRDVElNRTsKKysJCWkyZF9BU04xX2J5dGVzOworKwkJaTJkX0RIcGFyYW1zOworKwkJaTJkX0RTQVByaXZhdGVLZXk7CisrCQlpMmRfRFNBUHJpdmF0ZUtleV9iaW87CisrCQlpMmRfRFNBUHJpdmF0ZUtleV9mcDsKKysJCWkyZF9EU0FQdWJsaWNLZXk7CisrCQlpMmRfRFNBcGFyYW1zOworKwkJaTJkX05FVFNDQVBFX1NQS0FDOworKwkJaTJkX05FVFNDQVBFX1NQS0k7CisrCQlpMmRfTmV0c2NhcGVfUlNBOworKwkJaTJkX1BLQ1M3OworKwkJaTJkX1BLQ1M3X0RJR0VTVDsKKysJCWkyZF9QS0NTN19FTkNSWVBUOworKwkJaTJkX1BLQ1M3X0VOQ19DT05URU5UOworKwkJaTJkX1BLQ1M3X0VOVkVMT1BFOworKwkJaTJkX1BLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMOworKwkJaTJkX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlpMmRfUEtDUzdfU0lHTkVEOworKwkJaTJkX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJaTJkX1BLQ1M3X1NJR05fRU5WRUxPUEU7CisrCQlpMmRfUEtDUzdfYmlvOworKwkJaTJkX1BLQ1M3X2ZwOworKwkJaTJkX1ByaXZhdGVLZXk7CisrCQlpMmRfUHVibGljS2V5OworKwkJaTJkX1JTQVByaXZhdGVLZXk7CisrCQlpMmRfUlNBUHJpdmF0ZUtleV9iaW87CisrCQlpMmRfUlNBUHJpdmF0ZUtleV9mcDsKKysJCWkyZF9SU0FQdWJsaWNLZXk7CisrCQlpMmRfWDUwOTsKKysJCWkyZF9YNTA5X0FMR09SOworKwkJaTJkX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX1g1MDlfQ0lORjsKKysJCWkyZF9YNTA5X0NSTDsKKysJCWkyZF9YNTA5X0NSTF9JTkZPOworKwkJaTJkX1g1MDlfQ1JMX2JpbzsKKysJCWkyZF9YNTA5X0NSTF9mcDsKKysJCWkyZF9YNTA5X0VYVEVOU0lPTjsKKysJCWkyZF9YNTA5X05BTUU7CisrCQlpMmRfWDUwOV9OQU1FX0VOVFJZOworKwkJaTJkX1g1MDlfUEtFWTsKKysJCWkyZF9YNTA5X1BVQktFWTsKKysJCWkyZF9YNTA5X1JFUTsKKysJCWkyZF9YNTA5X1JFUV9JTkZPOworKwkJaTJkX1g1MDlfUkVRX2JpbzsKKysJCWkyZF9YNTA5X1JFUV9mcDsKKysJCWkyZF9YNTA5X1JFVk9LRUQ7CisrCQlpMmRfWDUwOV9TSUc7CisrCQlpMmRfWDUwOV9WQUw7CisrCQlpMmRfWDUwOV9iaW87CisrCQlpMmRfWDUwOV9mcDsKKysJCWlkZWFfY2JjX2VuY3J5cHQ7CisrCQlpZGVhX2NmYjY0X2VuY3J5cHQ7CisrCQlpZGVhX2VjYl9lbmNyeXB0OworKwkJaWRlYV9lbmNyeXB0OworKwkJaWRlYV9vZmI2NF9lbmNyeXB0OworKwkJaWRlYV9vcHRpb25zOworKwkJaWRlYV9zZXRfZGVjcnlwdF9rZXk7CisrCQlpZGVhX3NldF9lbmNyeXB0X2tleTsKKysJCWxoX2RlbGV0ZTsKKysJCWxoX2RvYWxsOworKwkJbGhfZG9hbGxfYXJnOworKwkJbGhfZnJlZTsKKysJCWxoX2luc2VydDsKKysJCWxoX25ldzsKKysJCWxoX25vZGVfc3RhdHM7CisrCQlsaF9ub2RlX3N0YXRzX2JpbzsKKysJCWxoX25vZGVfdXNhZ2Vfc3RhdHM7CisrCQlsaF9ub2RlX3VzYWdlX3N0YXRzX2JpbzsKKysJCWxoX3JldHJpZXZlOworKwkJbGhfc3RhdHM7CisrCQlsaF9zdGF0c19iaW87CisrCQlsaF9zdHJoYXNoOworKwkJc2tfZGVsZXRlOworKwkJc2tfZGVsZXRlX3B0cjsKKysJCXNrX2R1cDsKKysJCXNrX2ZpbmQ7CisrCQlza19mcmVlOworKwkJc2tfaW5zZXJ0OworKwkJc2tfbmV3OworKwkJc2tfcG9wOworKwkJc2tfcG9wX2ZyZWU7CisrCQlza19wdXNoOworKwkJc2tfc2V0X2NtcF9mdW5jOworKwkJc2tfc2hpZnQ7CisrCQlza191bnNoaWZ0OworKwkJc2tfemVybzsKKysJCUJJT19mX25iaW9fdGVzdDsKKysJCUFTTjFfVFlQRV9nZXQ7CisrCQlBU04xX1RZUEVfc2V0OworKwkJUEtDUzdfY29udGVudF9mcmVlOworKwkJRVJSX2xvYWRfUEtDUzdfc3RyaW5nczsKKysJCVg1MDlfZmluZF9ieV9pc3N1ZXJfYW5kX3NlcmlhbDsKKysJCVg1MDlfZmluZF9ieV9zdWJqZWN0OworKwkJUEtDUzdfY3RybDsKKysJCVBLQ1M3X3NldF90eXBlOworKwkJUEtDUzdfc2V0X2NvbnRlbnQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19zZXQ7CisrCQlQS0NTN19hZGRfc2lnbmVyOworKwkJUEtDUzdfYWRkX2NlcnRpZmljYXRlOworKwkJUEtDUzdfYWRkX2NybDsKKysJCVBLQ1M3X2NvbnRlbnRfbmV3OworKwkJUEtDUzdfZGF0YVNpZ247CisrCQlQS0NTN19kYXRhVmVyaWZ5OworKwkJUEtDUzdfZGF0YUluaXQ7CisrCQlQS0NTN19hZGRfc2lnbmF0dXJlOworKwkJUEtDUzdfY2VydF9mcm9tX3NpZ25lcl9pbmZvOworKwkJUEtDUzdfZ2V0X3NpZ25lcl9pbmZvOworKwkJRVZQX2RlbGV0ZV9hbGlhczsKKysJCUVWUF9tZGMyOworKwkJUEVNX3JlYWRfYmlvX1JTQVB1YmxpY0tleTsKKysJCVBFTV93cml0ZV9iaW9fUlNBUHVibGljS2V5OworKwkJZDJpX1JTQVB1YmxpY0tleV9iaW87CisrCQlpMmRfUlNBUHVibGljS2V5X2JpbzsKKysJCVBFTV9yZWFkX1JTQVB1YmxpY0tleTsKKysJCVBFTV93cml0ZV9SU0FQdWJsaWNLZXk7CisrCQlkMmlfUlNBUHVibGljS2V5X2ZwOworKwkJaTJkX1JTQVB1YmxpY0tleV9mcDsKKysJCUJJT19jb3B5X25leHRfcmV0cnk7CisrCQlSU0FfZmxhZ3M7CisrCQlYNTA5X1NUT1JFX2FkZF9jcmw7CisrCQlYNTA5X2xvYWRfY3JsX2ZpbGU7CisrCQlFVlBfcmMyXzQwX2NiYzsKKysJCUVWUF9yYzRfNDA7CisrCQlFVlBfQ0lQSEVSX0NUWF9pbml0OworKwkJSE1BQzsKKysJCUhNQUNfSW5pdDsKKysJCUhNQUNfVXBkYXRlOworKwkJSE1BQ19GaW5hbDsKKysJCUVSUl9nZXRfbmV4dF9lcnJvcl9saWJyYXJ5OworKwkJRVZQX1BLRVlfY21wX3BhcmFtZXRlcnM7CisrCQlITUFDX2NsZWFudXA7CisrCQlCSU9fcHRyX2N0cmw7CisrCQlCSU9fbmV3X2ZpbGVfaW50ZXJuYWw7CisrCQlCSU9fbmV3X2ZwX2ludGVybmFsOworKwkJQklPX3NfZmlsZV9pbnRlcm5hbDsKKysJCUJOX0JMSU5ESU5HX2NvbnZlcnQ7CisrCQlCTl9CTElORElOR19pbnZlcnQ7CisrCQlCTl9CTElORElOR191cGRhdGU7CisrCQlSU0FfYmxpbmRpbmdfb247CisrCQlSU0FfYmxpbmRpbmdfb2ZmOworKwkJaTJ0X0FTTjFfT0JKRUNUOworKwkJQk5fQkxJTkRJTkdfbmV3OworKwkJQk5fQkxJTkRJTkdfZnJlZTsKKysJCUVWUF9jYXN0NV9jYmM7CisrCQlFVlBfY2FzdDVfY2ZiNjQ7CisrCQlFVlBfY2FzdDVfZWNiOworKwkJRVZQX2Nhc3Q1X29mYjsKKysJCUJGX2RlY3J5cHQ7CisrCQlDQVNUX3NldF9rZXk7CisrCQlDQVNUX2VuY3J5cHQ7CisrCQlDQVNUX2RlY3J5cHQ7CisrCQlDQVNUX2VjYl9lbmNyeXB0OworKwkJQ0FTVF9jYmNfZW5jcnlwdDsKKysJCUNBU1RfY2ZiNjRfZW5jcnlwdDsKKysJCUNBU1Rfb2ZiNjRfZW5jcnlwdDsKKysJCVJDMl9kZWNyeXB0OworKwkJT0JKX2NyZWF0ZV9vYmplY3RzOworKwkJQk5fZXhwOworKwkJQk5fbXVsX3dvcmQ7CisrCQlCTl9zdWJfd29yZDsKKysJCUJOX2RlYzJibjsKKysJCUJOX2JuMmRlYzsKKysJCUJJT19naGJuX2N0cmw7CisrCQlDUllQVE9fZnJlZV9leF9kYXRhOworKwkJQ1JZUFRPX2dldF9leF9kYXRhOworKwkJQ1JZUFRPX3NldF9leF9kYXRhOworKwkJRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9DUllQVE9saWJfc3RyaW5nczsKKysJCUVWUF9QS0VZX2JpdHM7CisrCQlNRDVfVHJhbnNmb3JtOworKwkJU0hBMV9UcmFuc2Zvcm07CisrCQlTSEFfVHJhbnNmb3JtOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2NoYWluOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2N1cnJlbnRfY2VydDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leF9kYXRhOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2NlcnQ7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfY2hhaW47CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3I7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZXhfZGF0YTsKKysJCUNSWVBUT19kdXBfZXhfZGF0YTsKKysJCUNSWVBUT19nZXRfbmV3X2xvY2tpZDsKKysJCUNSWVBUT19uZXdfZXhfZGF0YTsKKysJCVJTQV9zZXRfZXhfZGF0YTsKKysJCVJTQV9nZXRfZXhfZGF0YTsKKysJCVJTQV9nZXRfZXhfbmV3X2luZGV4OworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX3R5cGVfMTsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV90eXBlXzI7CisrCQlSU0FfcGFkZGluZ19hZGRfU1NMdjIzOworKwkJUlNBX3BhZGRpbmdfYWRkX25vbmU7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV90eXBlXzE7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV90eXBlXzI7CisrCQlSU0FfcGFkZGluZ19jaGVja19TU0x2MjM7CisrCQlSU0FfcGFkZGluZ19jaGVja19ub25lOworKwkJYm5fYWRkX3dvcmRzOworKwkJZDJpX05ldHNjYXBlX1JTQV8yOworKwkJQ1JZUFRPX2dldF9leF9uZXdfaW5kZXg7CisrCQlSSVBFTUQxNjBfSW5pdDsKKysJCVJJUEVNRDE2MF9VcGRhdGU7CisrCQlSSVBFTUQxNjBfRmluYWw7CisrCQlSSVBFTUQxNjA7CisrCQlSSVBFTUQxNjBfVHJhbnNmb3JtOworKwkJUkM1XzMyX3NldF9rZXk7CisrCQlSQzVfMzJfZWNiX2VuY3J5cHQ7CisrCQlSQzVfMzJfZW5jcnlwdDsKKysJCVJDNV8zMl9kZWNyeXB0OworKwkJUkM1XzMyX2NiY19lbmNyeXB0OworKwkJUkM1XzMyX2NmYjY0X2VuY3J5cHQ7CisrCQlSQzVfMzJfb2ZiNjRfZW5jcnlwdDsKKysJCUJOX2JuMm1waTsKKysJCUJOX21waTJibjsKKysJCUFTTjFfQklUX1NUUklOR19nZXRfYml0OworKwkJQVNOMV9CSVRfU1RSSU5HX3NldF9iaXQ7CisrCQlCSU9fZ2V0X2V4X2RhdGE7CisrCQlCSU9fZ2V0X2V4X25ld19pbmRleDsKKysJCUJJT19zZXRfZXhfZGF0YTsKKysJCVg1MDl2M19nZXRfa2V5X3VzYWdlOworKwkJWDUwOXYzX3NldF9rZXlfdXNhZ2U7CisrCQlhMmlfWDUwOXYzX2tleV91c2FnZTsKKysJCWkyYV9YNTA5djNfa2V5X3VzYWdlOworKwkJRVZQX1BLRVlfZGVjcnlwdDsKKysJCUVWUF9QS0VZX2VuY3J5cHQ7CisrCQlQS0NTN19SRUNJUF9JTkZPX3NldDsKKysJCVBLQ1M3X2FkZF9yZWNpcGllbnQ7CisrCQlQS0NTN19hZGRfcmVjaXBpZW50X2luZm87CisrCQlQS0NTN19zZXRfY2lwaGVyOworKwkJQVNOMV9UWVBFX2dldF9pbnRfb2N0ZXRzdHJpbmc7CisrCQlBU04xX1RZUEVfZ2V0X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX3NldF9pbnRfb2N0ZXRzdHJpbmc7CisrCQlBU04xX1RZUEVfc2V0X29jdGV0c3RyaW5nOworKwkJQVNOMV9VVENUSU1FX3NldF9zdHJpbmc7CisrCQlFUlJfYWRkX2Vycm9yX2RhdGE7CisrCQlFUlJfc2V0X2Vycm9yX2RhdGE7CisrCQlFVlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW07CisrCQlFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjE7CisrCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2OworKwkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdjsKKysJCUVWUF9yYzVfMzJfMTJfMTZfY2JjOworKwkJRVZQX3JjNV8zMl8xMl8xNl9jZmI2NDsKKysJCUVWUF9yYzVfMzJfMTJfMTZfZWNiOworKwkJRVZQX3JjNV8zMl8xMl8xNl9vZmI7CisrCQlhc24xX2FkZF9lcnJvcjsKKysJCWQyaV9BU04xX0JNUFNUUklORzsKKysJCWkyZF9BU04xX0JNUFNUUklORzsKKysJCUJJT19mX2JlcjsKKysJCUJOX2luaXQ7CisrCQlDT01QX0NUWF9uZXc7CisrCQlDT01QX0NUWF9mcmVlOworKwkJQ09NUF9DVFhfY29tcHJlc3NfYmxvY2s7CisrCQlDT01QX0NUWF9leHBhbmRfYmxvY2s7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhfbmV3X2luZGV4OworKwkJT0JKX05BTUVfYWRkOworKwkJQklPX3NvY2tldF9uYmlvOworKwkJRVZQX3JjMl82NF9jYmM7CisrCQlPQkpfTkFNRV9jbGVhbnVwOworKwkJT0JKX05BTUVfZ2V0OworKwkJT0JKX05BTUVfaW5pdDsKKysJCU9CSl9OQU1FX25ld19pbmRleDsKKysJCU9CSl9OQU1FX3JlbW92ZTsKKysJCUJOX01PTlRfQ1RYX2NvcHk7CisrCQlCSU9fbmV3X3NvY2tzNGFfY29ubmVjdDsKKysJCUJJT19zX3NvY2tzNGFfY29ubmVjdDsKKysJCVBST1hZX3NldF9jb25uZWN0X21vZGU7CisrCQlSQU5EX1NTTGVheTsKKysJCVJBTkRfc2V0X3JhbmRfbWV0aG9kOworKwkJUlNBX21lbW9yeV9sb2NrOworKwkJYm5fc3ViX3dvcmRzOworKwkJYm5fbXVsX25vcm1hbDsKKysJCWJuX211bF9jb21iYTg7CisrCQlibl9tdWxfY29tYmE0OworKwkJYm5fc3FyX25vcm1hbDsKKysJCWJuX3Nxcl9jb21iYTg7CisrCQlibl9zcXJfY29tYmE0OworKwkJYm5fY21wX3dvcmRzOworKwkJYm5fbXVsX3JlY3Vyc2l2ZTsKKysJCWJuX211bF9wYXJ0X3JlY3Vyc2l2ZTsKKysJCWJuX3Nxcl9yZWN1cnNpdmU7CisrCQlibl9tdWxfbG93X25vcm1hbDsKKysJCUJOX1JFQ1BfQ1RYX2luaXQ7CisrCQlCTl9SRUNQX0NUWF9uZXc7CisrCQlCTl9SRUNQX0NUWF9mcmVlOworKwkJQk5fUkVDUF9DVFhfc2V0OworKwkJQk5fbW9kX211bF9yZWNpcHJvY2FsOworKwkJQk5fbW9kX2V4cF9yZWNwOworKwkJQk5fZGl2X3JlY3A7CisrCQlCTl9DVFhfaW5pdDsKKysJCUJOX01PTlRfQ1RYX2luaXQ7CisrCQlSQU5EX2dldF9yYW5kX21ldGhvZDsKKysJCVBLQ1M3X2FkZF9hdHRyaWJ1dGU7CisrCQlQS0NTN19hZGRfc2lnbmVkX2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2RpZ2VzdF9mcm9tX2F0dHJpYnV0ZXM7CisrCQlQS0NTN19nZXRfYXR0cmlidXRlOworKwkJUEtDUzdfZ2V0X2lzc3Vlcl9hbmRfc2VyaWFsOworKwkJUEtDUzdfZ2V0X3NpZ25lZF9hdHRyaWJ1dGU7CisrCQlDT01QX2NvbXByZXNzX2Jsb2NrOworKwkJQ09NUF9leHBhbmRfYmxvY2s7CisrCQlDT01QX3JsZTsKKysJCUNPTVBfemxpYjsKKysJCW1zX3RpbWVfZGlmZjsKKysJCW1zX3RpbWVfbmV3OworKwkJbXNfdGltZV9mcmVlOworKwkJbXNfdGltZV9jbXA7CisrCQltc190aW1lX2dldDsKKysJCVBLQ1M3X3NldF9hdHRyaWJ1dGVzOworKwkJUEtDUzdfc2V0X3NpZ25lZF9hdHRyaWJ1dGVzOworKwkJWDUwOV9BVFRSSUJVVEVfY3JlYXRlOworKwkJWDUwOV9BVFRSSUJVVEVfZHVwOworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfY2hlY2s7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9wcmludDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX3NldDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX3NldF9zdHJpbmc7CisrCQlBU04xX1RJTUVfcHJpbnQ7CisrCQlCQVNJQ19DT05TVFJBSU5UU19mcmVlOworKwkJQkFTSUNfQ09OU1RSQUlOVFNfbmV3OworKwkJRVJSX2xvYWRfWDUwOVYzX3N0cmluZ3M7CisrCQlORVRTQ0FQRV9DRVJUX1NFUVVFTkNFX2ZyZWU7CisrCQlORVRTQ0FQRV9DRVJUX1NFUVVFTkNFX25ldzsKKysJCU9CSl90eHQyb2JqOworKwkJUEVNX3JlYWRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCVBFTV9yZWFkX05TX0NFUlRfU0VROworKwkJUEVNX3JlYWRfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fcmVhZF9iaW9fTlNfQ0VSVF9TRVE7CisrCQlQRU1fd3JpdGVfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCVBFTV93cml0ZV9OU19DRVJUX1NFUTsKKysJCVBFTV93cml0ZV9iaW9fTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCVBFTV93cml0ZV9iaW9fTlNfQ0VSVF9TRVE7CisrCQlYNTA5VjNfRVhUX2FkZDsKKysJCVg1MDlWM19FWFRfYWRkX2FsaWFzOworKwkJWDUwOVYzX0VYVF9hZGRfY29uZjsKKysJCVg1MDlWM19FWFRfY2xlYW51cDsKKysJCVg1MDlWM19FWFRfY29uZjsKKysJCVg1MDlWM19FWFRfY29uZl9uaWQ7CisrCQlYNTA5VjNfRVhUX2dldDsKKysJCVg1MDlWM19FWFRfZ2V0X25pZDsKKysJCVg1MDlWM19FWFRfcHJpbnQ7CisrCQlYNTA5VjNfRVhUX3ByaW50X2ZwOworKwkJWDUwOVYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zOworKwkJWDUwOVYzX2FkZF92YWx1ZTsKKysJCVg1MDlWM19hZGRfdmFsdWVfYm9vbDsKKysJCVg1MDlWM19hZGRfdmFsdWVfaW50OworKwkJWDUwOVYzX2NvbmZfZnJlZTsKKysJCVg1MDlWM19nZXRfdmFsdWVfYm9vbDsKKysJCVg1MDlWM19nZXRfdmFsdWVfaW50OworKwkJWDUwOVYzX3BhcnNlX2xpc3Q7CisrCQlkMmlfQVNOMV9HRU5FUkFMSVpFRFRJTUU7CisrCQlkMmlfQVNOMV9USU1FOworKwkJZDJpX0JBU0lDX0NPTlNUUkFJTlRTOworKwkJZDJpX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlkMmlfZXh0X2t1OworKwkJZXh0X2t1X2ZyZWU7CisrCQlleHRfa3VfbmV3OworKwkJaTJkX0FTTjFfR0VORVJBTElaRURUSU1FOworKwkJaTJkX0FTTjFfVElNRTsKKysJCWkyZF9CQVNJQ19DT05TVFJBSU5UUzsKKysJCWkyZF9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJaTJkX2V4dF9rdTsKKysJCUVWUF9NRF9DVFhfY29weTsKKysJCWkyZF9BU04xX0VOVU1FUkFURUQ7CisrCQlkMmlfQVNOMV9FTlVNRVJBVEVEOworKwkJQVNOMV9FTlVNRVJBVEVEX3NldDsKKysJCUFTTjFfRU5VTUVSQVRFRF9nZXQ7CisrCQlCTl90b19BU04xX0VOVU1FUkFURUQ7CisrCQlBU04xX0VOVU1FUkFURURfdG9fQk47CisrCQlpMmFfQVNOMV9FTlVNRVJBVEVEOworKwkJYTJpX0FTTjFfRU5VTUVSQVRFRDsKKysJCWkyZF9HRU5FUkFMX05BTUU7CisrCQlkMmlfR0VORVJBTF9OQU1FOworKwkJR0VORVJBTF9OQU1FX25ldzsKKysJCUdFTkVSQUxfTkFNRV9mcmVlOworKwkJR0VORVJBTF9OQU1FU19uZXc7CisrCQlHRU5FUkFMX05BTUVTX2ZyZWU7CisrCQlkMmlfR0VORVJBTF9OQU1FUzsKKysJCWkyZF9HRU5FUkFMX05BTUVTOworKwkJaTJ2X0dFTkVSQUxfTkFNRVM7CisrCQlpMnNfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlzMmlfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlYNTA5VjNfRVhUX2NoZWNrX2NvbmY7CisrCQloZXhfdG9fc3RyaW5nOworKwkJc3RyaW5nX3RvX2hleDsKKysJCURFU19lZGUzX2NiY21fZW5jcnlwdDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9PQUVQOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfT0FFUDsKKysJCVg1MDlfQ1JMX3ByaW50X2ZwOworKwkJWDUwOV9DUkxfcHJpbnQ7CisrCQlpMnZfR0VORVJBTF9OQU1FOworKwkJdjJpX0dFTkVSQUxfTkFNRTsKKysJCWkyZF9QS0VZX1VTQUdFX1BFUklPRDsKKysJCWQyaV9QS0VZX1VTQUdFX1BFUklPRDsKKysJCVBLRVlfVVNBR0VfUEVSSU9EX25ldzsKKysJCVBLRVlfVVNBR0VfUEVSSU9EX2ZyZWU7CisrCQl2MmlfR0VORVJBTF9OQU1FUzsKKysJCWkyc19BU04xX0lOVEVHRVI7CisrCQlYNTA5VjNfRVhUX2QyaTsKKysJCW5hbWVfY21wOworKwkJc3RyX2R1cDsKKysJCWkyc19BU04xX0VOVU1FUkFURUQ7CisrCQlpMnNfQVNOMV9FTlVNRVJBVEVEX1RBQkxFOworKwkJQklPX3NfbG9nOworKwkJQklPX2ZfcmVsaWFibGU7CisrCQlQS0NTN19kYXRhRmluYWw7CisrCQlQS0NTN19kYXRhRGVjb2RlOworKwkJWDUwOVYzX0VYVF9DUkxfYWRkX2NvbmY7CisrCQlCTl9zZXRfcGFyYW1zOworKwkJQk5fZ2V0X3BhcmFtczsKKysJCUJJT19nZXRfZXhfbnVtOworKwkJQklPX3NldF9leF9mcmVlX2Z1bmM7CisrCQlFVlBfcmlwZW1kMTYwOworKwkJQVNOMV9USU1FX3NldDsKKysJCWkyZF9BVVRIT1JJVFlfS0VZSUQ7CisrCQlkMmlfQVVUSE9SSVRZX0tFWUlEOworKwkJQVVUSE9SSVRZX0tFWUlEX25ldzsKKysJCUFVVEhPUklUWV9LRVlJRF9mcmVlOworKwkJQVNOMV9zZXFfdW5wYWNrOworKwkJQVNOMV9zZXFfcGFjazsKKysJCUFTTjFfdW5wYWNrX3N0cmluZzsKKysJCUFTTjFfcGFja19zdHJpbmc7CisrCQlQS0NTMTJfcGFja19zYWZlYmFnOworKwkJUEtDUzEyX01BS0VfS0VZQkFHOworKwkJUEtDUzhfZW5jcnlwdDsKKysJCVBLQ1MxMl9NQUtFX1NIS0VZQkFHOworKwkJUEtDUzEyX3BhY2tfcDdkYXRhOworKwkJUEtDUzEyX3BhY2tfcDdlbmNkYXRhOworKwkJUEtDUzEyX2FkZF9sb2NhbGtleWlkOworKwkJUEtDUzEyX2FkZF9mcmllbmRseW5hbWVfYXNjOworKwkJUEtDUzEyX2FkZF9mcmllbmRseW5hbWVfdW5pOworKwkJUEtDUzEyX2dldF9mcmllbmRseW5hbWU7CisrCQlQS0NTMTJfcGJlX2NyeXB0OworKwkJUEtDUzEyX2RlY3J5cHRfZDJpOworKwkJUEtDUzEyX2kyZF9lbmNyeXB0OworKwkJUEtDUzEyX2luaXQ7CisrCQlQS0NTMTJfa2V5X2dlbl9hc2M7CisrCQlQS0NTMTJfa2V5X2dlbl91bmk7CisrCQlQS0NTMTJfZ2VuX21hYzsKKysJCVBLQ1MxMl92ZXJpZnlfbWFjOworKwkJUEtDUzEyX3NldF9tYWM7CisrCQlQS0NTMTJfc2V0dXBfbWFjOworKwkJT1BFTlNTTF9hc2MydW5pOworKwkJT1BFTlNTTF91bmkyYXNjOworKwkJaTJkX1BLQ1MxMl9CQUdTOworKwkJUEtDUzEyX0JBR1NfbmV3OworKwkJZDJpX1BLQ1MxMl9CQUdTOworKwkJUEtDUzEyX0JBR1NfZnJlZTsKKysJCWkyZF9QS0NTMTI7CisrCQlkMmlfUEtDUzEyOworKwkJUEtDUzEyX25ldzsKKysJCVBLQ1MxMl9mcmVlOworKwkJaTJkX1BLQ1MxMl9NQUNfREFUQTsKKysJCVBLQ1MxMl9NQUNfREFUQV9uZXc7CisrCQlkMmlfUEtDUzEyX01BQ19EQVRBOworKwkJUEtDUzEyX01BQ19EQVRBX2ZyZWU7CisrCQlpMmRfUEtDUzEyX1NBRkVCQUc7CisrCQlQS0NTMTJfU0FGRUJBR19uZXc7CisrCQlkMmlfUEtDUzEyX1NBRkVCQUc7CisrCQlQS0NTMTJfU0FGRUJBR19mcmVlOworKwkJRVJSX2xvYWRfUEtDUzEyX3N0cmluZ3M7CisrCQlQS0NTMTJfUEJFX2FkZDsKKysJCVBLQ1M4X2FkZF9rZXl1c2FnZTsKKysJCVBLQ1MxMl9nZXRfYXR0cl9nZW47CisrCQlQS0NTMTJfcGFyc2U7CisrCQlQS0NTMTJfY3JlYXRlOworKwkJaTJkX1BLQ1MxMl9iaW87CisrCQlpMmRfUEtDUzEyX2ZwOworKwkJZDJpX1BLQ1MxMl9iaW87CisrCQlkMmlfUEtDUzEyX2ZwOworKwkJaTJkX1BCRVBBUkFNOworKwkJUEJFUEFSQU1fbmV3OworKwkJZDJpX1BCRVBBUkFNOworKwkJUEJFUEFSQU1fZnJlZTsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19uZXc7CisrCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZTsKKysJCUVWUF9QS0NTODJQS0VZOworKwkJRVZQX1BLRVkyUEtDUzg7CisrCQlQS0NTOF9zZXRfYnJva2VuOworKwkJRVZQX1BCRV9BTEdPUl9DaXBoZXJJbml0OworKwkJRVZQX1BCRV9hbGdfYWRkOworKwkJUEtDUzVfcGJlX3NldDsKKysJCUVWUF9QQkVfY2xlYW51cDsKKysJCWkyZF9TWE5FVDsKKysJCWQyaV9TWE5FVDsKKysJCVNYTkVUX25ldzsKKysJCVNYTkVUX2ZyZWU7CisrCQlpMmRfU1hORVRJRDsKKysJCWQyaV9TWE5FVElEOworKwkJU1hORVRJRF9uZXc7CisrCQlTWE5FVElEX2ZyZWU7CisrCQlEU0FfU0lHX25ldzsKKysJCURTQV9TSUdfZnJlZTsKKysJCURTQV9kb19zaWduOworKwkJRFNBX2RvX3ZlcmlmeTsKKysJCWQyaV9EU0FfU0lHOworKwkJaTJkX0RTQV9TSUc7CisrCQlpMmRfQVNOMV9WSVNJQkxFU1RSSU5HOworKwkJZDJpX0FTTjFfVklTSUJMRVNUUklORzsKKysJCWkyZF9BU04xX1VURjhTVFJJTkc7CisrCQlkMmlfQVNOMV9VVEY4U1RSSU5HOworKwkJaTJkX0RJUkVDVE9SWVNUUklORzsKKysJCWQyaV9ESVJFQ1RPUllTVFJJTkc7CisrCQlpMmRfRElTUExBWVRFWFQ7CisrCQlkMmlfRElTUExBWVRFWFQ7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOTsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5OworKwkJaTJkX1BCS0RGMlBBUkFNOworKwkJUEJLREYyUEFSQU1fbmV3OworKwkJZDJpX1BCS0RGMlBBUkFNOworKwkJUEJLREYyUEFSQU1fZnJlZTsKKysJCWkyZF9QQkUyUEFSQU07CisrCQlQQkUyUEFSQU1fbmV3OworKwkJZDJpX1BCRTJQQVJBTTsKKysJCVBCRTJQQVJBTV9mcmVlOworKwkJZDJpX0FTTjFfU0VUX09GX0dFTkVSQUxfTkFNRTsKKysJCWkyZF9BU04xX1NFVF9PRl9HRU5FUkFMX05BTUU7CisrCQlkMmlfQVNOMV9TRVRfT0ZfU1hORVRJRDsKKysJCWkyZF9BU04xX1NFVF9PRl9TWE5FVElEOworKwkJZDJpX0FTTjFfU0VUX09GX1BPTElDWVFVQUxJTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BPTElDWVFVQUxJTkZPOworKwkJZDJpX0FTTjFfU0VUX09GX1BPTElDWUlORk87CisrCQlpMmRfQVNOMV9TRVRfT0ZfUE9MSUNZSU5GTzsKKysJCVNYTkVUX2FkZF9pZF9hc2M7CisrCQlTWE5FVF9hZGRfaWRfdWxvbmc7CisrCQlTWE5FVF9hZGRfaWRfSU5URUdFUjsKKysJCVNYTkVUX2dldF9pZF9hc2M7CisrCQlTWE5FVF9nZXRfaWRfdWxvbmc7CisrCQlTWE5FVF9nZXRfaWRfSU5URUdFUjsKKysJCVg1MDlWM19zZXRfY29uZl9saGFzaDsKKysJCWkyZF9DRVJUSUZJQ0FURVBPTElDSUVTOworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19uZXc7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX2ZyZWU7CisrCQlkMmlfQ0VSVElGSUNBVEVQT0xJQ0lFUzsKKysJCWkyZF9QT0xJQ1lJTkZPOworKwkJUE9MSUNZSU5GT19uZXc7CisrCQlkMmlfUE9MSUNZSU5GTzsKKysJCVBPTElDWUlORk9fZnJlZTsKKysJCWkyZF9QT0xJQ1lRVUFMSU5GTzsKKysJCVBPTElDWVFVQUxJTkZPX25ldzsKKysJCWQyaV9QT0xJQ1lRVUFMSU5GTzsKKysJCVBPTElDWVFVQUxJTkZPX2ZyZWU7CisrCQlpMmRfVVNFUk5PVElDRTsKKysJCVVTRVJOT1RJQ0VfbmV3OworKwkJZDJpX1VTRVJOT1RJQ0U7CisrCQlVU0VSTk9USUNFX2ZyZWU7CisrCQlpMmRfTk9USUNFUkVGOworKwkJTk9USUNFUkVGX25ldzsKKysJCWQyaV9OT1RJQ0VSRUY7CisrCQlOT1RJQ0VSRUZfZnJlZTsKKysJCVg1MDlWM19nZXRfc3RyaW5nOworKwkJWDUwOVYzX2dldF9zZWN0aW9uOworKwkJWDUwOVYzX3N0cmluZ19mcmVlOworKwkJWDUwOVYzX3NlY3Rpb25fZnJlZTsKKysJCVg1MDlWM19zZXRfY3R4OworKwkJczJpX0FTTjFfSU5URUdFUjsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX21hbGxvY19sb2NrZWQ7CisrCQlDUllQVE9fZnJlZV9sb2NrZWQ7CisrCQlCTl9tb2RfZXhwMl9tb250OworKwkJRVJSX2dldF9lcnJvcl9saW5lX2RhdGE7CisrCQlFUlJfcGVla19lcnJvcl9saW5lX2RhdGE7CisrCQlQS0NTMTJfUEJFX2tleWl2Z2VuOworKwkJWDUwOV9BTEdPUl9kdXA7CisrCQlkMmlfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVDsKKysJCWkyZF9BU04xX1NFVF9PRl9ESVNUX1BPSU5UOworKwkJaTJkX0NSTF9ESVNUX1BPSU5UUzsKKysJCUNSTF9ESVNUX1BPSU5UU19uZXc7CisrCQlDUkxfRElTVF9QT0lOVFNfZnJlZTsKKysJCWQyaV9DUkxfRElTVF9QT0lOVFM7CisrCQlpMmRfRElTVF9QT0lOVDsKKysJCURJU1RfUE9JTlRfbmV3OworKwkJZDJpX0RJU1RfUE9JTlQ7CisrCQlESVNUX1BPSU5UX2ZyZWU7CisrCQlpMmRfRElTVF9QT0lOVF9OQU1FOworKwkJRElTVF9QT0lOVF9OQU1FX25ldzsKKysJCURJU1RfUE9JTlRfTkFNRV9mcmVlOworKwkJZDJpX0RJU1RfUE9JTlRfTkFNRTsKKysJCVg1MDlWM19hZGRfdmFsdWVfdWNoYXI7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9BVFRSSUJVVEU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfTkFNRV9FTlRSWTsKKysJCWQyaV9BU04xX1NFVF9PRl9BU04xX1RZUEU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BVFRSSUJVVEU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9FWFRFTlNJT047CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9OQU1FX0VOVFJZOworKwkJWDUwOVYzX0VYVF9pMmQ7CisrCQlYNTA5VjNfRVhUX3ZhbF9wcm47CisrCQlYNTA5VjNfRVhUX2FkZF9saXN0OworKwkJRVZQX0NJUEhFUl90eXBlOworKwkJRVZQX1BCRV9DaXBoZXJJbml0OworKwkJWDUwOVYzX2FkZF92YWx1ZV9ib29sX25mOworKwkJZDJpX0FTTjFfVUlOVEVHRVI7CisrCQlza192YWx1ZTsKKysJCXNrX251bTsKKysJCXNrX3NldDsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X1JFVk9LRUQ7CisrCQlza19zb3J0OworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfUkVWT0tFRDsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0FMR09SOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQ1JMOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQUxHT1I7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9DUkw7CisrCQlpMmRfQVNOMV9TRVRfT0ZfUEtDUzdfU0lHTkVSX0lORk87CisrCQlpMmRfQVNOMV9TRVRfT0ZfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTN19TSUdORVJfSU5GTzsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTN19SRUNJUF9JTkZPOworKwkJUEtDUzVfUEJFX2FkZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzg7CisrCQlpMmRfUEtDUzhfZnA7CisrCQlQRU1fcmVhZF9iaW9fUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX2Jpb19QOF9QUklWX0tFWV9JTkZPOworKwkJZDJpX1BLQ1M4X2JpbzsKKysJCWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPX2ZwOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3dyaXRlX2Jpb19QOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3JlYWRfUEtDUzg7CisrCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GT19iaW87CisrCQlkMmlfUEtDUzhfZnA7CisrCQlQRU1fd3JpdGVfUEtDUzg7CisrCQlQRU1fcmVhZF9QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3JlYWRfUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX2Jpb19QS0NTODsKKysJCVBFTV93cml0ZV9QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3dyaXRlX1A4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTNV9QQkVfa2V5aXZnZW47CisrCQlpMmRfUEtDUzhfYmlvOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk9fZnA7CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GT19iaW87CisrCQlCSU9fc19iaW87CisrCQlQS0NTNV9wYmUyX3NldDsKKysJCVBLQ1M1X1BCS0RGMl9ITUFDX1NIQTE7CisrCQlQS0NTNV92Ml9QQkVfa2V5aXZnZW47CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9QS0NTOFByaXZhdGVLZXk7CisrCQlCSU9fY3RybF9nZXRfcmVhZF9yZXF1ZXN0OworKwkJQklPX2N0cmxfcGVuZGluZzsKKysJCUJJT19jdHJsX3dwZW5kaW5nOworKwkJQklPX25ld19iaW9fcGFpcjsKKysJCUJJT19jdHJsX2dldF93cml0ZV9ndWFyYW50ZWU7CisrCQlDUllQVE9fbnVtX2xvY2tzOworKwkJQ09ORl9sb2FkX2JpbzsKKysJCUNPTkZfbG9hZF9mcDsKKysJCWkyZF9BU04xX1NFVF9PRl9BU04xX09CSkVDVDsKKysJCWQyaV9BU04xX1NFVF9PRl9BU04xX09CSkVDVDsKKysJCVBLQ1M3X3NpZ25hdHVyZVZlcmlmeTsKKysJCVJTQV9zZXRfbWV0aG9kOworKwkJUlNBX2dldF9tZXRob2Q7CisrCQlSU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUlNBX2NoZWNrX2tleTsKKysJCU9CSl9vYmoydHh0OworKwkJRFNBX2R1cF9ESDsKKysJCVg1MDlfUkVRX2dldF9leHRlbnNpb25zOworKwkJWDUwOV9SRVFfc2V0X2V4dGVuc2lvbl9uaWRzOworKwkJQklPX253cml0ZTsKKysJCVg1MDlfUkVRX2V4dGVuc2lvbl9uaWQ7CisrCQlCSU9fbnJlYWQ7CisrCQlYNTA5X1JFUV9nZXRfZXh0ZW5zaW9uX25pZHM7CisrCQlCSU9fbndyaXRlMDsKKysJCVg1MDlfUkVRX2FkZF9leHRlbnNpb25zX25pZDsKKysJCUJJT19ucmVhZDA7CisrCQlYNTA5X1JFUV9hZGRfZXh0ZW5zaW9uczsKKysJCUJJT19uZXdfbWVtX2J1ZjsKKysJCURIX3NldF9leF9kYXRhOworKwkJREhfc2V0X21ldGhvZDsKKysJCURTQV9PcGVuU1NMOworKwkJREhfZ2V0X2V4X2RhdGE7CisrCQlESF9nZXRfZXhfbmV3X2luZGV4OworKwkJRFNBX25ld19tZXRob2Q7CisrCQlESF9uZXdfbWV0aG9kOworKwkJREhfT3BlblNTTDsKKysJCURTQV9nZXRfZXhfbmV3X2luZGV4OworKwkJREhfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNBX3NldF9leF9kYXRhOworKwkJREhfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNBX2dldF9leF9kYXRhOworKwkJWDUwOVYzX0VYVF9SRVFfYWRkX2NvbmY7CisrCQlORVRTQ0FQRV9TUEtJX3ByaW50OworKwkJTkVUU0NBUEVfU1BLSV9zZXRfcHVia2V5OworKwkJTkVUU0NBUEVfU1BLSV9iNjRfZW5jb2RlOworKwkJTkVUU0NBUEVfU1BLSV9nZXRfcHVia2V5OworKwkJTkVUU0NBUEVfU1BLSV9iNjRfZGVjb2RlOworKwkJVVRGOF9wdXRjOworKwkJVVRGOF9nZXRjOworKwkJUlNBX251bGxfbWV0aG9kOworKwkJQVNOMV90YWcyc3RyOworKwkJQklPX2N0cmxfcmVzZXRfcmVhZF9yZXF1ZXN0OworKwkJRElTUExBWVRFWFRfbmV3OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfZnJlZTsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2QyaTsKKysJCVg1MDlfc2V0X2V4X2RhdGE7CisrCQlYNTA5X3JlamVjdF9zZXRfYml0X2FzYzsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfdHh0OworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9OSUQ7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MDsKKysJCVBFTV9yZWFkX1g1MDlfQVVYOworKwkJZDJpX0FVVEhPUklUWV9JTkZPX0FDQ0VTUzsKKysJCVBFTV93cml0ZV9QVUJLRVk7CisrCQlBQ0NFU1NfREVTQ1JJUFRJT05fbmV3OworKwkJWDUwOV9DRVJUX0FVWF9mcmVlOworKwkJZDJpX0FDQ0VTU19ERVNDUklQVElPTjsKKysJCVg1MDlfdHJ1c3RfY2xlYXI7CisrCQlYNTA5X1RSVVNUX2FkZDsKKysJCUFTTjFfVklTSUJMRVNUUklOR19uZXc7CisrCQlYNTA5X2FsaWFzX3NldDE7CisrCQlBU04xX1BSSU5UQUJMRVNUUklOR19mcmVlOworKwkJRVZQX1BLRVlfZ2V0MV9EU0E7CisrCQlBU04xX0JNUFNUUklOR19uZXc7CisrCQlBU04xX21ic3RyaW5nX2NvcHk7CisrCQlBU04xX1VURjhTVFJJTkdfbmV3OworKwkJRFNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCWkyZF9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlBU04xX1Q2MVNUUklOR19mcmVlOworKwkJRFNBX3NldF9tZXRob2Q7CisrCQlYNTA5X2dldF9leF9kYXRhOworKwkJQVNOMV9TVFJJTkdfdHlwZTsKKysJCVg1MDlfUFVSUE9TRV9nZXRfYnlfc25hbWU7CisrCQlBU04xX1RJTUVfZnJlZTsKKysJCUFTTjFfT0NURVRfU1RSSU5HX2NtcDsKKysJCUFTTjFfQklUX1NUUklOR19uZXc7CisrCQlYNTA5X2dldF9leHRfZDJpOworKwkJUEVNX3JlYWRfYmlvX1g1MDlfQVVYOworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZmF1bHRfbWFza19hc2M7CisrCQlBU04xX1NUUklOR19zZXRfZGVmX21hc2tfYXNjOworKwkJUEVNX3dyaXRlX2Jpb19SU0FfUFVCS0VZOworKwkJQVNOMV9JTlRFR0VSX2NtcDsKKysJCWQyaV9SU0FfUFVCS0VZX2ZwOworKwkJWDUwOV90cnVzdF9zZXRfYml0X2FzYzsKKysJCVBFTV93cml0ZV9iaW9fRFNBX1BVQktFWTsKKysJCVg1MDlfU1RPUkVfQ1RYX2ZyZWU7CisrCQlFVlBfUEtFWV9zZXQxX0RTQTsKKysJCWkyZF9EU0FfUFVCS0VZX2ZwOworKwkJWDUwOV9sb2FkX2NlcnRfY3JsX2ZpbGU7CisrCQlBU04xX1RJTUVfbmV3OworKwkJaTJkX1JTQV9QVUJLRVk7CisrCQlYNTA5X1NUT1JFX0NUWF9wdXJwb3NlX2luaGVyaXQ7CisrCQlQRU1fcmVhZF9SU0FfUFVCS0VZOworKwkJZDJpX1g1MDlfQVVYOworKwkJaTJkX0RTQV9QVUJLRVk7CisrCQlYNTA5X0NFUlRfQVVYX3ByaW50OworKwkJUEVNX3JlYWRfRFNBX1BVQktFWTsKKysJCWkyZF9SU0FfUFVCS0VZX2JpbzsKKysJCUFTTjFfQklUX1NUUklOR19udW1fYXNjOworKwkJaTJkX1BVQktFWTsKKysJCUFTTjFfVVRDVElNRV9mcmVlOworKwkJRFNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfYnlfaWQ7CisrCQlBQ0NFU1NfREVTQ1JJUFRJT05fZnJlZTsKKysJCVBFTV9yZWFkX2Jpb19QVUJLRVk7CisrCQlBU04xX1NUUklOR19zZXRfYnlfTklEOworKwkJWDUwOV9QVVJQT1NFX2dldF9pZDsKKysJCURJU1BMQVlURVhUX2ZyZWU7CisrCQlPVEhFUk5BTUVfbmV3OworKwkJWDUwOV9DRVJUX0FVWF9uZXc7CisrCQlYNTA5X1RSVVNUX2NsZWFudXA7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X09CSjsKKysJCVg1MDlfQ1JMX2dldF9leHRfZDJpOworKwkJWDUwOV9QVVJQT1NFX2dldDBfbmFtZTsKKysJCVBFTV9yZWFkX1BVQktFWTsKKysJCWkyZF9EU0FfUFVCS0VZX2JpbzsKKysJCWkyZF9PVEhFUk5BTUU7CisrCQlBU04xX09DVEVUX1NUUklOR19mcmVlOworKwkJQVNOMV9CSVRfU1RSSU5HX3NldF9hc2M7CisrCQlYNTA5X2dldF9leF9uZXdfaW5kZXg7CisrCQlBU04xX1NUUklOR19UQUJMRV9jbGVhbnVwOworKwkJWDUwOV9UUlVTVF9nZXRfYnlfaWQ7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X3RydXN0OworKwkJQVNOMV9TVFJJTkdfbGVuZ3RoOworKwkJZDJpX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTjsKKysJCUFTTjFfUFJJTlRBQkxFU1RSSU5HX25ldzsKKysJCVg1MDlWM19nZXRfZDJpOworKwkJQVNOMV9FTlVNRVJBVEVEX2ZyZWU7CisrCQlpMmRfWDUwOV9DRVJUX0FVWDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF90cnVzdDsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZhdWx0X21hc2s7CisrCQlYNTA5X1NUT1JFX0NUWF9uZXc7CisrCQlFVlBfUEtFWV9nZXQxX1JTQTsKKysJCURJUkVDVE9SWVNUUklOR19mcmVlOworKwkJUEVNX3dyaXRlX1g1MDlfQVVYOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfc2V0OworKwkJZDJpX0RTQV9QVUJLRVlfZnA7CisrCQlkMmlfUlNBX1BVQktFWTsKKysJCVg1MDlfVFJVU1RfZ2V0MF9uYW1lOworKwkJWDUwOV9UUlVTVF9nZXQwOworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX2ZyZWU7CisrCQlBU04xX0lBNVNUUklOR19uZXc7CisrCQlkMmlfRFNBX1BVQktFWTsKKysJCVg1MDlfY2hlY2tfcHVycG9zZTsKKysJCUFTTjFfRU5VTUVSQVRFRF9uZXc7CisrCQlkMmlfUlNBX1BVQktFWV9iaW87CisrCQlkMmlfUFVCS0VZOworKwkJWDUwOV9UUlVTVF9nZXRfdHJ1c3Q7CisrCQlYNTA5X1RSVVNUX2dldF9mbGFnczsKKysJCUFTTjFfQk1QU1RSSU5HX2ZyZWU7CisrCQlBU04xX1Q2MVNUUklOR19uZXc7CisrCQlBU04xX1VUQ1RJTUVfbmV3OworKwkJaTJkX0FVVEhPUklUWV9JTkZPX0FDQ0VTUzsKKysJCUVWUF9QS0VZX3NldDFfUlNBOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X3B1cnBvc2U7CisrCQlBU04xX0lBNVNUUklOR19mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0FVWDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfY291bnQ7CisrCQlDUllQVE9fYWRkX2luZm87CisrCQlYNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X3R4dDsKKysJCUFTTjFfU1RSSU5HX2dldF9kZWZhdWx0X21hc2s7CisrCQlYNTA5X2FsaWFzX2dldDA7CisrCQlBU04xX1NUUklOR19kYXRhOworKwkJaTJkX0FDQ0VTU19ERVNDUklQVElPTjsKKysJCVg1MDlfdHJ1c3Rfc2V0X2JpdDsKKysJCUFTTjFfQklUX1NUUklOR19mcmVlOworKwkJUEVNX3JlYWRfYmlvX1JTQV9QVUJLRVk7CisrCQlYNTA5X2FkZDFfcmVqZWN0X29iamVjdDsKKysJCVg1MDlfY2hlY2tfdHJ1c3Q7CisrCQlQRU1fcmVhZF9iaW9fRFNBX1BVQktFWTsKKysJCVg1MDlfUFVSUE9TRV9hZGQ7CisrCQlBU04xX1NUUklOR19UQUJMRV9nZXQ7CisrCQlBU04xX1VURjhTVFJJTkdfZnJlZTsKKysJCWQyaV9EU0FfUFVCS0VZX2JpbzsKKysJCVBFTV93cml0ZV9SU0FfUFVCS0VZOworKwkJZDJpX09USEVSTkFNRTsKKysJCVg1MDlfcmVqZWN0X3NldF9iaXQ7CisrCQlQRU1fd3JpdGVfRFNBX1BVQktFWTsKKysJCVg1MDlfUFVSUE9TRV9nZXQwX3NuYW1lOworKwkJRVZQX1BLRVlfc2V0MV9ESDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX2R1cDsKKysJCUFTTjFfQklUX1NUUklOR19zZXQ7CisrCQlYNTA5X1RSVVNUX2dldF9jb3VudDsKKysJCUFTTjFfSU5URUdFUl9mcmVlOworKwkJT1RIRVJOQU1FX2ZyZWU7CisrCQlpMmRfUlNBX1BVQktFWV9mcDsKKysJCUFTTjFfSU5URUdFUl9kdXA7CisrCQlkMmlfWDUwOV9DRVJUX0FVWDsKKysJCVBFTV93cml0ZV9iaW9fUFVCS0VZOworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX2ZyZWU7CisrCQlYNTA5X1BVUlBPU0VfY2xlYW51cDsKKysJCUFTTjFfbWJzdHJpbmdfbmNvcHk7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9uZXc7CisrCQlFVlBfUEtFWV9nZXQxX0RIOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfbmV3OworKwkJQVNOMV9JTlRFR0VSX25ldzsKKysJCWkyZF9YNTA5X0FVWDsKKysJCUFTTjFfQklUX1NUUklOR19uYW1lX3ByaW50OworKwkJWDUwOV9jbXA7CisrCQlBU04xX1NUUklOR19sZW5ndGhfc2V0OworKwkJRElSRUNUT1JZU1RSSU5HX25ldzsKKysJCVg1MDlfYWRkMV90cnVzdF9vYmplY3Q7CisrCQlQS0NTMTJfbmV3cGFzczsKKysJCVNNSU1FX3dyaXRlX1BLQ1M3OworKwkJU01JTUVfcmVhZF9QS0NTNzsKKysJCURFU19zZXRfa2V5X2NoZWNrZWQ7CisrCQlQS0NTN192ZXJpZnk7CisrCQlQS0NTN19lbmNyeXB0OworKwkJREVTX3NldF9rZXlfdW5jaGVja2VkOworKwkJU01JTUVfY3JsZl9jb3B5OworKwkJaTJkX0FTTjFfUFJJTlRBQkxFU1RSSU5HOworKwkJUEtDUzdfZ2V0MF9zaWduZXJzOworKwkJUEtDUzdfZGVjcnlwdDsKKysJCVNNSU1FX3RleHQ7CisrCQlQS0NTN19zaW1wbGVfc21pbWVjYXA7CisrCQlQS0NTN19nZXRfc21pbWVjYXA7CisrCQlQS0NTN19zaWduOworKwkJUEtDUzdfYWRkX2F0dHJpYl9zbWltZWNhcDsKKysJCUNSWVBUT19kYmdfc2V0X29wdGlvbnM7CisrCQlDUllQVE9fcmVtb3ZlX2FsbF9pbmZvOworKwkJQ1JZUFRPX2dldF9tZW1fZGVidWdfZnVuY3Rpb25zOworKwkJQ1JZUFRPX2lzX21lbV9jaGVja19vbjsKKysJCUNSWVBUT19zZXRfbWVtX2RlYnVnX2Z1bmN0aW9uczsKKysJCUNSWVBUT19wb3BfaW5mbzsKKysJCUNSWVBUT19wdXNoX2luZm9fOworKwkJQ1JZUFRPX3NldF9tZW1fZGVidWdfb3B0aW9uczsKKysJCVBFTV93cml0ZV9QS0NTOFByaXZhdGVLZXlfbmlkOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXlfbmlkOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZLZXlfbmlkOworKwkJZDJpX1BLQ1M4UHJpdmF0ZUtleV9iaW87CisrCQlBU04xX05VTExfZnJlZTsKKysJCWQyaV9BU04xX05VTEw7CisrCQlBU04xX05VTExfbmV3OworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9iaW87CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X2ZwOworKwkJaTJkX0FTTjFfTlVMTDsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfbmlkX2ZwOworKwkJZDJpX1BLQ1M4UHJpdmF0ZUtleV9mcDsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfbmlkX2JpbzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlJbmZvX2ZwOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleUluZm9fYmlvOworKwkJUEVNX2NiOworKwkJaTJkX1ByaXZhdGVLZXlfZnA7CisrCQlkMmlfUHJpdmF0ZUtleV9iaW87CisrCQlkMmlfUHJpdmF0ZUtleV9mcDsKKysJCWkyZF9Qcml2YXRlS2V5X2JpbzsKKysJCVg1MDlfcmVqZWN0X2NsZWFyOworKwkJWDUwOV9UUlVTVF9zZXRfZGVmYXVsdDsKKysJCWQyaV9BdXRvUHJpdmF0ZUtleTsKKysJCVg1MDlfQVRUUklCVVRFX2dldDBfdHlwZTsKKysJCVg1MDlfQVRUUklCVVRFX3NldDFfZGF0YTsKKysJCVg1MDlhdF9nZXRfYXR0cjsKKysJCVg1MDlhdF9nZXRfYXR0cl9jb3VudDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV9OSUQ7CisrCQlYNTA5X0FUVFJJQlVURV9zZXQxX29iamVjdDsKKysJCVg1MDlfQVRUUklCVVRFX2NvdW50OworKwkJWDUwOV9BVFRSSUJVVEVfY3JlYXRlX2J5X09CSjsKKysJCVg1MDlfQVRUUklCVVRFX2dldDBfb2JqZWN0OworKwkJWDUwOWF0X2dldF9hdHRyX2J5X05JRDsKKysJCVg1MDlhdF9hZGQxX2F0dHI7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX2RhdGE7CisrCQlYNTA5YXRfZGVsZXRlX2F0dHI7CisrCQlYNTA5YXRfZ2V0X2F0dHJfYnlfT0JKOworKwkJUkFORF9hZGQ7CisrCQlCSU9fbnVtYmVyX3dyaXR0ZW47CisrCQlCSU9fbnVtYmVyX3JlYWQ7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQxX2NoYWluOworKwkJRVJSX2xvYWRfUkFORF9zdHJpbmdzOworKwkJUkFORF9wc2V1ZG9fYnl0ZXM7CisrCQlYNTA5X1JFUV9nZXRfYXR0cl9ieV9OSUQ7CisrCQlYNTA5X1JFUV9nZXRfYXR0cjsKKysJCVg1MDlfUkVRX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlYNTA5X1JFUV9nZXRfYXR0cl9ieV9PQko7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X05JRDsKKysJCVg1MDlfUkVRX2FkZDFfYXR0cl9ieV9PQko7CisrCQlYNTA5X1JFUV9nZXRfYXR0cl9jb3VudDsKKysJCVg1MDlfUkVRX2FkZDFfYXR0cjsKKysJCVg1MDlfUkVRX2RlbGV0ZV9hdHRyOworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV9PQko7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfdHh0OworKwkJWDUwOV9BVFRSSUJVVEVfY3JlYXRlX2J5X3R4dDsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQk5fcHNldWRvX3JhbmQ7CisrCQlCTl9pc19wcmltZV9mYXN0dGVzdDsKKysJCUJOX0NUWF9lbmQ7CisrCQlCTl9DVFhfc3RhcnQ7CisrCQlCTl9DVFhfZ2V0OworKwkJRVZQX1BLRVkyUEtDUzhfYnJva2VuOworKwkJQVNOMV9TVFJJTkdfVEFCTEVfYWRkOworKwkJQ1JZUFRPX2RiZ19nZXRfb3B0aW9uczsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19uZXc7CisrCQlDUllQVE9fZ2V0X21lbV9kZWJ1Z19vcHRpb25zOworKwkJREVTX2NyeXB0OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X1JFUV9ORVc7CisrCQlQRU1fd3JpdGVfWDUwOV9SRVFfTkVXOworKwkJQklPX2NhbGxiYWNrX2N0cmw7CisrCQlSQU5EX2VnZDsKKysJCVJBTkRfc3RhdHVzOworKwkJYm5fZHVtcDE7CisrCQlERVNfY2hlY2tfa2V5X3Bhcml0eTsKKysJCWxoX251bV9pdGVtczsKKysJCVJBTkRfZXZlbnQ7CisrCQlEU09fbmV3OworKwkJRFNPX25ld19tZXRob2Q7CisrCQlEU09fZnJlZTsKKysJCURTT19mbGFnczsKKysJCURTT191cDsKKysJCURTT19zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlEU09fZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNPX2dldF9tZXRob2Q7CisrCQlEU09fc2V0X21ldGhvZDsKKysJCURTT19sb2FkOworKwkJRFNPX2JpbmRfdmFyOworKwkJRFNPX01FVEhPRF9udWxsOworKwkJRFNPX01FVEhPRF9vcGVuc3NsOworKwkJRFNPX01FVEhPRF9kbGZjbjsKKysJCURTT19NRVRIT0Rfd2luMzI7CisrCQlFUlJfbG9hZF9EU09fc3RyaW5nczsKKysJCURTT19NRVRIT0RfZGw7CisrCQlOQ09ORl9sb2FkOworKwkJTkNPTkZfbG9hZF9mcDsKKysJCU5DT05GX25ldzsKKysJCU5DT05GX2dldF9zdHJpbmc7CisrCQlOQ09ORl9mcmVlOworKwkJTkNPTkZfZ2V0X251bWJlcjsKKysJCUNPTkZfZHVtcF9mcDsKKysJCU5DT05GX2xvYWRfYmlvOworKwkJTkNPTkZfZHVtcF9mcDsKKysJCU5DT05GX2dldF9zZWN0aW9uOworKwkJTkNPTkZfZHVtcF9iaW87CisrCQlDT05GX2R1bXBfYmlvOworKwkJTkNPTkZfZnJlZV9kYXRhOworKwkJQ09ORl9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFUlJfZXJyb3Jfc3RyaW5nX247CisrCQlCSU9fc25wcmludGY7CisrCQlEU09fY3RybDsKKysJCWkyZF9BU04xX1NFVF9PRl9BU04xX0lOVEVHRVI7CisrCQlpMmRfQVNOMV9TRVRfT0ZfUEtDUzEyX1NBRkVCQUc7CisrCQlpMmRfQVNOMV9TRVRfT0ZfUEtDUzc7CisrCQlCSU9fdmZyZWU7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9JTlRFR0VSOworKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1MxMl9TQUZFQkFHOworKwkJQVNOMV9VVENUSU1FX2dldDsKKysJCVg1MDlfUkVRX2RpZ2VzdDsKKysJCVg1MDlfQ1JMX2RpZ2VzdDsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTNzsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9rZXlfbGVuZ3RoOworKwkJRVZQX0NJUEhFUl9DVFhfY3RybDsKKysJCUJOX21vZF9leHBfbW9udF93b3JkOworKwkJUkFORF9lZ2RfYnl0ZXM7CisrCQlYNTA5X1JFUV9nZXQxX2VtYWlsOworKwkJWDUwOV9nZXQxX2VtYWlsOworKwkJWDUwOV9lbWFpbF9mcmVlOworKwkJaTJkX1JTQV9ORVQ7CisrCQlkMmlfUlNBX05FVF8yOworKwkJZDJpX1JTQV9ORVQ7CisrCQlEU09fYmluZF9mdW5jOworKwkJQ1JZUFRPX2dldF9uZXdfZHlubG9ja2lkOworKwkJc2tfbmV3X251bGw7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfZGVzdHJveV9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19kZXN0cm95X2NiOworKwkJQ1JZUFRPX2Rlc3Ryb3lfZHlubG9ja2lkOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX3NpemU7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYjsKKysJCUNSWVBUT19zZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2xvY2tfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfZHlubG9ja19sb2NrX2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfZGVzdHJveV9jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja192YWx1ZTsKKysJCUNSWVBUT19nZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NiOworKwkJYzJpX0FTTjFfQklUX1NUUklORzsKKysJCWkyY19BU04xX0JJVF9TVFJJTkc7CisrCQlSQU5EX3BvbGw7CisrCQljMmlfQVNOMV9JTlRFR0VSOworKwkJaTJjX0FTTjFfSU5URUdFUjsKKysJCUJJT19kdW1wX2luZGVudDsKKysJCUFTTjFfcGFyc2VfZHVtcDsKKysJCWMyaV9BU04xX09CSkVDVDsKKysJCVg1MDlfTkFNRV9wcmludF9leF9mcDsKKysJCUFTTjFfU1RSSU5HX3ByaW50X2V4X2ZwOworKwkJWDUwOV9OQU1FX3ByaW50X2V4OworKwkJQVNOMV9TVFJJTkdfcHJpbnRfZXg7CisrCQlNRDQ7CisrCQlNRDRfVHJhbnNmb3JtOworKwkJTUQ0X0ZpbmFsOworKwkJTUQ0X1VwZGF0ZTsKKysJCU1ENF9Jbml0OworKwkJRVZQX21kNDsKKysJCWkyZF9QVUJLRVlfYmlvOworKwkJaTJkX1BVQktFWV9mcDsKKysJCWQyaV9QVUJLRVlfYmlvOworKwkJQVNOMV9TVFJJTkdfdG9fVVRGODsKKysJCUJJT192cHJpbnRmOworKwkJQklPX3ZzbnByaW50ZjsKKysJCWQyaV9QVUJLRVlfZnA7CisrCQlYNTA5X2NtcF90aW1lOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X3RpbWU7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQxX2lzc3VlcjsKKysJCVg1MDlfT0JKRUNUX3JldHJpZXZlX21hdGNoOworKwkJWDUwOV9PQkpFQ1RfaWR4X2J5X3N1YmplY3Q7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZmxhZ3M7CisrCQlYNTA5X1NUT1JFX0NUWF90cnVzdGVkX3N0YWNrOworKwkJWDUwOV90aW1lX2FkajsKKysJCVg1MDlfY2hlY2tfaXNzdWVkOworKwkJQVNOMV9VVENUSU1FX2NtcF90aW1lX3Q7CisrCQlERVNfc2V0X3dlYWtfa2V5X2ZsYWc7CisrCQlERVNfY2hlY2tfa2V5OworKwkJREVTX3J3X21vZGU7CisrCQlSU0FfUEtDUzFfUlNBcmVmOworKwkJWDUwOV9rZXlpZF9zZXQxOworKwkJQklPX25leHQ7CisrCQlEU09fTUVUSE9EX3ZtczsKKysJCUJJT19mX2xpbmVidWZmZXI7CisrCQlCTl9ibnRlc3RfcmFuZDsKKysJCU9QRU5TU0xfaXNzZXR1Z2lkOworKwkJQk5fcmFuZF9yYW5nZTsKKysJCUVSUl9sb2FkX0VOR0lORV9zdHJpbmdzOworKwkJRU5HSU5FX3NldF9EU0E7CisrCQlFTkdJTkVfZ2V0X2ZpbmlzaF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9SU0E7CisrCQlFTkdJTkVfZ2V0X0JOX21vZF9leHA7CisrCQlEU0FfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfc2V0X0RIOworKwkJRU5HSU5FX3NldF9kZWZfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfaW5pdDsKKysJCURIX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJUlNBX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2ZpbmlzaDsKKysJCUVOR0lORV9sb2FkX3B1YmxpY19rZXk7CisrCQlFTkdJTkVfZ2V0X0RIOworKwkJRU5HSU5FX2N0cmw7CisrCQlFTkdJTkVfZ2V0X2luaXRfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2luaXRfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRFNBOworKwkJRU5HSU5FX2dldF9uYW1lOworKwkJRU5HSU5FX2dldF9sYXN0OworKwkJRU5HSU5FX2dldF9wcmV2OworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0RIOworKwkJRU5HSU5FX2dldF9SU0E7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHQ7CisrCQlFTkdJTkVfZ2V0X1JBTkQ7CisrCQlFTkdJTkVfZ2V0X2ZpcnN0OworKwkJRU5HSU5FX2J5X2lkOworKwkJRU5HSU5FX3NldF9maW5pc2hfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2RlZl9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9CTl9tb2RfZXhwX2NydDsKKysJCVJTQV9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9zZXRfUlNBOworKwkJRU5HSU5FX2xvYWRfcHJpdmF0ZV9rZXk7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfUkFORDsKKysJCUVOR0lORV9zZXRfQk5fbW9kX2V4cDsKKysJCUVOR0lORV9yZW1vdmU7CisrCQlFTkdJTkVfZnJlZTsKKysJCUVOR0lORV9nZXRfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfZ2V0X25leHQ7CisrCQlFTkdJTkVfc2V0X25hbWU7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfRFNBOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfUlNBOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X1JBTkQ7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cDsKKysJCUVOR0lORV9zZXRfUkFORDsKKysJCUVOR0lORV9zZXRfaWQ7CisrCQlFTkdJTkVfc2V0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0RIOworKwkJRU5HSU5FX25ldzsKKysJCUVOR0lORV9nZXRfaWQ7CisrCQlEU0Ffc2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfYWRkOworKwkJREhfc2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfZ2V0X0RTQTsKKysJCUVOR0lORV9nZXRfY3RybF9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfY3RybF9mdW5jdGlvbjsKKysJCUJOX3BzZXVkb19yYW5kX3JhbmdlOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X3ZlcmlmeV9jYjsKKysJCUVSUl9sb2FkX0NPTVBfc3RyaW5nczsKKysJCVBLQ1MxMl9pdGVtX2RlY3J5cHRfZDJpOworKwkJQVNOMV9VVEY4U1RSSU5HX2l0OworKwkJRU5HSU5FX3VucmVnaXN0ZXJfY2lwaGVyczsKKysJCUVOR0lORV9nZXRfY2lwaGVyczsKKysJCWQyaV9PQ1NQX0JBU0lDUkVTUDsKKysJCUtSQjVfQ0hFQ0tTVU1faXQ7CisrCQlFQ19QT0lOVF9hZGQ7CisrCQlBU04xX2l0ZW1fZXhfaTJkOworKwkJT0NTUF9DRVJUSURfaXQ7CisrCQlkMmlfT0NTUF9SRVNQQllURVM7CisrCQlYNTA5VjNfYWRkMV9pMmQ7CisrCQlQS0NTN19FTlZFTE9QRV9pdDsKKysJCVVJX2FkZF9pbnB1dF9ib29sZWFuOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfUlNBOworKwkJWDUwOVYzX0VYVF9uY29uZjsKKysJCUFTTjFfR0VORVJBTFNUUklOR19mcmVlOworKwkJZDJpX09DU1BfQ0VSVFNUQVRVUzsKKysJCVg1MDlfUkVWT0tFRF9zZXRfc2VyaWFsTnVtYmVyOworKwkJWDUwOV9wcmludF9leDsKKysJCU9DU1BfT05FUkVRX2dldDFfZXh0X2QyaTsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfUkFORDsKKysJCUVOR0lORV9sb2FkX2R5bmFtaWM7CisrCQlQQktERjJQQVJBTV9pdDsKKysJCUVYVEVOREVEX0tFWV9VU0FHRV9uZXc7CisrCQlFQ19HUk9VUF9jbGVhcl9mcmVlOworKwkJT0NTUF9zZW5kcmVxX2JpbzsKKysJCUFTTjFfaXRlbV9kaWdlc3Q7CisrCQlPQ1NQX0JBU0lDUkVTUF9kZWxldGVfZXh0OworKwkJT0NTUF9TSUdOQVRVUkVfaXQ7CisrCQlYNTA5X0NSTF9pdDsKKysJCU9DU1BfQkFTSUNSRVNQX2FkZF9leHQ7CisrCQlLUkI1X0VOQ0tFWV9pdDsKKysJCVVJX21ldGhvZF9zZXRfY2xvc2VyOworKwkJWDUwOV9TVE9SRV9zZXRfcHVycG9zZTsKKysJCWkyZF9BU04xX0dFTkVSQUxTVFJJTkc7CisrCQlPQ1NQX3Jlc3BvbnNlX3N0YXR1czsKKysJCWkyZF9PQ1NQX1NFUlZJQ0VMT0M7CisrCQlFTkdJTkVfZ2V0X2RpZ2VzdF9lbmdpbmU7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfR0ZwOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfT0JKOworKwkJX29zc2xfb2xkX2Rlc19yYW5kb21fa2V5OworKwkJQVNOMV9UNjFTVFJJTkdfaXQ7CisrCQlFQ19HUk9VUF9tZXRob2Rfb2Y7CisrCQlpMmRfS1JCNV9BUFJFUTsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDsKKysJCUFTTjFfUFJJTlRBQkxFX25ldzsKKysJCUhNQUNfSW5pdF9leDsKKysJCWQyaV9LUkI1X0FVVEhFTlQ7CisrCQlPQ1NQX2FyY2hpdmVfY3V0b2ZmX25ldzsKKysJCUVDX1BPSU5UX3NldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9zZXRfSnByb2pfY29vcmRzX0dGcDsKKysJCV9vc3NsX29sZF9kZXNfaXNfd2Vha19rZXk7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X09CSjsKKysJCUVDX1BPSU5UX29jdDJwb2ludDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2NvdW50OworKwkJVUlfY3RybDsKKysJCV9zaGFkb3dfREVTX3J3X21vZGU7CisrCQlhc24xX2RvX2FkYjsKKysJCUFTTjFfdGVtcGxhdGVfaTJkOworKwkJRU5HSU5FX3JlZ2lzdGVyX0RIOworKwkJVUlfY29uc3RydWN0X3Byb21wdDsKKysJCVg1MDlfU1RPUkVfc2V0X3RydXN0OworKwkJVUlfZHVwX2lucHV0X3N0cmluZzsKKysJCWQyaV9LUkI1X0FQUkVROworKwkJRVZQX01EX0NUWF9jb3B5X2V4OworKwkJT0NTUF9yZXF1ZXN0X2lzX3NpZ25lZDsKKysJCWkyZF9PQ1NQX1JFUUlORk87CisrCQlLUkI1X0VOQ0tFWV9mcmVlOworKwkJT0NTUF9yZXNwX2dldDA7CisrCQlHRU5FUkFMX05BTUVfaXQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9pdDsKKysJCVg1MDlfU1RPUkVfc2V0X2ZsYWdzOworKwkJRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfc2V0X2NvbXByX2Nvb3Jkc19HRnA7CisrCQlPQ1NQX3Jlc3BvbnNlX3N0YXR1c19zdHI7CisrCQlkMmlfT0NTUF9SRVZPS0VESU5GTzsKKysJCU9DU1BfYmFzaWNfYWRkMV9jZXJ0OworKwkJRVJSX2dldF9pbXBsZW1lbnRhdGlvbjsKKysJCUVWUF9DaXBoZXJGaW5hbF9leDsKKysJCU9DU1BfQ0VSVFNUQVRVU19uZXc7CisrCQlDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YTsKKysJCU9DU1BfcmVzcF9maW5kOworKwkJQk5fbm5tb2Q7CisrCQlYNTA5X0NSTF9zb3J0OworKwkJWDUwOV9SRVZPS0VEX3NldF9yZXZvY2F0aW9uRGF0ZTsKKysJCUVOR0lORV9yZWdpc3Rlcl9SQU5EOworKwkJT0NTUF9TRVJWSUNFTE9DX25ldzsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZHNfR0ZwOworKwkJX29zc2xfb2xkX2Rlc19vcHRpb25zOworKwkJU1hORVRfaXQ7CisrCQlVSV9kdXBfaW5wdXRfYm9vbGVhbjsKKysJCVBLQ1MxMl9hZGRfQ1NQTmFtZV9hc2M7CisrCQlFQ19QT0lOVF9pc19hdF9pbmZpbml0eTsKKysJCUVOR0lORV9sb2FkX2NyeXB0b2RldjsKKysJCURTT19jb252ZXJ0X2ZpbGVuYW1lOworKwkJUE9MSUNZUVVBTElORk9faXQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfY2lwaGVyczsKKysJCUJOX21vZF9sc2hpZnRfcXVpY2s7CisrCQlEU09fc2V0X2ZpbGVuYW1lOworKwkJQVNOMV9pdGVtX2ZyZWU7CisrCQlLUkI1X1RLVEJPRFlfZnJlZTsKKysJCUFVVEhPUklUWV9LRVlJRF9pdDsKKysJCUtSQjVfQVBSRVFCT0RZX25ldzsKKysJCVg1MDlWM19FWFRfUkVRX2FkZF9uY29uZjsKKysJCUVOR0lORV9jdHJsX2NtZF9zdHJpbmc7CisrCQlpMmRfT0NTUF9SRVNQREFUQTsKKysJCUVWUF9NRF9DVFhfaW5pdDsKKysJCUVYVEVOREVEX0tFWV9VU0FHRV9mcmVlOworKwkJUEtDUzdfQVRUUl9TSUdOX2l0OworKwkJVUlfYWRkX2Vycm9yX3N0cmluZzsKKysJCUtSQjVfQ0hFQ0tTVU1fZnJlZTsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0OworKwkJRU5HSU5FX2xvYWRfdWJzZWM7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2RpZ2VzdHM7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9pdDsKKysJCVBLQ1MxMl91bnBhY2tfYXV0aHNhZmVzOworKwkJQVNOMV9pdGVtX3VucGFjazsKKysJCU5FVFNDQVBFX1NQS0FDX2l0OworKwkJWDUwOV9SRVZPS0VEX2l0OworKwkJQVNOMV9TVFJJTkdfZW5jb2RlOworKwkJRVZQX2Flc18xMjhfZWNiOworKwkJS1JCNV9BVVRIRU5UX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0OworKwkJT0NTUF9jZXJ0X3N0YXR1c19zdHI7CisrCQlkMmlfT0NTUF9SRVFVRVNUOworKwkJVUlfZHVwX2luZm9fc3RyaW5nOworKwkJX29zc2xfb2xkX2Rlc194d2hpdGVfaW4yb3V0OworKwkJUEtDUzEyX2l0OworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9jcml0OworKwkJT0NTUF9DRVJUU1RBVFVTX2ZyZWU7CisrCQlfb3NzbF9vbGRfZGVzX2NyeXB0OworKwkJQVNOMV9pdGVtX2kyZDsKKysJCUVWUF9EZWNyeXB0RmluYWxfZXg7CisrCQlFTkdJTkVfbG9hZF9vcGVuc3NsOworKwkJRU5HSU5FX2dldF9jbWRfZGVmbnM7CisrCQlFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2ZuOworKwkJRVZQX0VuY3J5cHRGaW5hbF9leDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9kaWdlc3RzOworKwkJWDUwOV9nZXQwX3B1YmtleV9iaXRzdHI7CisrCQlhc24xX2V4X2kyYzsKKysJCUVOR0lORV9yZWdpc3Rlcl9SU0E7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9EU0E7CisrCQlfb3NzbF9vbGRfZGVzX2tleV9zY2hlZDsKKysJCVg1MDlfRVhURU5TSU9OX2l0OworKwkJaTJkX0tSQjVfQVVUSEVOVDsKKysJCVNYTkVUSURfaXQ7CisrCQlkMmlfT0NTUF9TSU5HTEVSRVNQOworKwkJRURJUEFSVFlOQU1FX25ldzsKKysJCVBLQ1MxMl9jZXJ0YmFnMng1MDk7CisrCQlfb3NzbF9vbGRfZGVzX29mYjY0X2VuY3J5cHQ7CisrCQlkMmlfRVhURU5ERURfS0VZX1VTQUdFOworKwkJRVJSX3ByaW50X2Vycm9yc19jYjsKKysJCUVOR0lORV9zZXRfY2lwaGVyczsKKysJCWQyaV9LUkI1X0FQUkVRQk9EWTsKKysJCVVJX21ldGhvZF9nZXRfZmx1c2hlcjsKKysJCVg1MDlfUFVCS0VZX2l0OworKwkJX29zc2xfb2xkX2Rlc19lbmNfcmVhZDsKKysJCVBLQ1M3X0VOQ1JZUFRfaXQ7CisrCQlpMmRfT0NTUF9SRVNQT05TRTsKKysJCUVDX0dST1VQX2dldF9jb2ZhY3RvcjsKKysJCVBLQ1MxMl91bnBhY2tfcDdkYXRhOworKwkJZDJpX0tSQjVfQVVUSERBVEE7CisrCQlPQ1NQX2NvcHlfbm9uY2U7CisrCQlLUkI1X0FVVEhEQVRBX25ldzsKKysJCU9DU1BfUkVTUERBVEFfbmV3OworKwkJRUNfR0ZwX21vbnRfbWV0aG9kOworKwkJT0NTUF9SRVZPS0VESU5GT19mcmVlOworKwkJVUlfZ2V0X2V4X2RhdGE7CisrCQlLUkI1X0FQUkVRQk9EWV9mcmVlOworKwkJRUNfR1JPVVBfZ2V0MF9nZW5lcmF0b3I7CisrCQlVSV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlYNTA5VjNfc2V0X25jb25mOworKwkJUEtDUzEyX2l0ZW1faTJkX2VuY3J5cHQ7CisrCQlYNTA5X2FkZDFfZXh0X2kyZDsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX2l0OworKwkJS1JCNV9QUklOQ05BTUVfbmV3OworKwkJUEtDUzEyX1NBRkVCQUdfaXQ7CisrCQlFQ19HUk9VUF9nZXRfb3JkZXI7CisrCQlkMmlfT0NTUF9SRVNQSUQ7CisrCQlPQ1NQX3JlcXVlc3RfdmVyaWZ5OworKwkJTkNPTkZfZ2V0X251bWJlcl9lOworKwkJX29zc2xfb2xkX2Rlc19kZWNyeXB0MzsKKysJCVg1MDlfc2lnbmF0dXJlX3ByaW50OworKwkJT0NTUF9TSU5HTEVSRVNQX2ZyZWU7CisrCQlFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXM7CisrCQlpMmRfT0NTUF9PTkVSRVE7CisrCQlPQ1NQX1JFUVVFU1RfYWRkX2V4dDsKKysJCU9DU1BfUkVTUEJZVEVTX25ldzsKKysJCUVWUF9NRF9DVFhfY3JlYXRlOworKwkJT0NTUF9yZXNwX2ZpbmRfc3RhdHVzOworKwkJWDUwOV9BTEdPUl9pdDsKKysJCUFTTjFfVElNRV9pdDsKKysJCU9DU1BfcmVxdWVzdF9zZXQxX25hbWU7CisrCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2NvdW50OworKwkJVUlfZ2V0MF9yZXN1bHQ7CisrCQlQS0NTMTJfQVVUSFNBRkVTX2l0OworKwkJRVZQX2Flc18yNTZfZWNiOworKwkJUEtDUzEyX3BhY2tfYXV0aHNhZmVzOworKwkJQVNOMV9JQTVTVFJJTkdfaXQ7CisrCQlVSV9nZXRfaW5wdXRfZmxhZ3M7CisrCQlFQ19HUk9VUF9zZXRfZ2VuZXJhdG9yOworKwkJX29zc2xfb2xkX2Rlc19zdHJpbmdfdG9fMmtleXM7CisrCQlPQ1NQX0NFUlRJRF9mcmVlOworKwkJWDUwOV9DRVJUX0FVWF9pdDsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VkZTNfY2JjX2VuY3J5cHQ7CisrCQlSQU5EX3NldF9yYW5kX2VuZ2luZTsKKysJCURTT19nZXRfbG9hZGVkX2ZpbGVuYW1lOworKwkJWDUwOV9BVFRSSUJVVEVfaXQ7CisrCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2J5X05JRDsKKysJCVBLQ1MxMl9kZWNyeXB0X3NrZXk7CisrCQlLUkI1X0FVVEhFTlRfaXQ7CisrCQlVSV9kdXBfZXJyb3Jfc3RyaW5nOworKwkJUlNBUHVibGljS2V5X2l0OworKwkJaTJkX09DU1BfUkVRVUVTVDsKKysJCVBLQ1MxMl94NTA5Y3JsMmNlcnRiYWc7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfaXQ7CisrCQlBU04xX2l0ZW1fc2lnbjsKKysJCVg1MDlfQ1JMX3NldF9pc3N1ZXJfbmFtZTsKKysJCU9CSl9OQU1FX2RvX2FsbF9zb3J0ZWQ7CisrCQlpMmRfT0NTUF9CQVNJQ1JFU1A7CisrCQlpMmRfT0NTUF9SRVNQQllURVM7CisrCQlQS0NTMTJfdW5wYWNrX3A3ZW5jZGF0YTsKKysJCUhNQUNfQ1RYX2luaXQ7CisrCQlFTkdJTkVfZ2V0X2RpZ2VzdDsKKysJCU9DU1BfUkVTUE9OU0VfcHJpbnQ7CisrCQlLUkI1X1RLVEJPRFlfaXQ7CisrCQlBQ0NFU1NfREVTQ1JJUFRJT05faXQ7CisrCQlQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9pdDsKKysJCVBCRTJQQVJBTV9pdDsKKysJCVBLQ1MxMl9jZXJ0YmFnMng1MDljcmw7CisrCQlQS0NTN19TSUdORURfaXQ7CisrCQlFTkdJTkVfZ2V0X2NpcGhlcjsKKysJCWkyZF9PQ1NQX0NSTElEOworKwkJT0NTUF9TSU5HTEVSRVNQX25ldzsKKysJCUVOR0lORV9jbWRfaXNfZXhlY3V0YWJsZTsKKysJCVJTQV91cF9yZWY7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfaXQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfRFNBOworKwkJWDUwOVYzX0VYVF9hZGRfbmNvbmZfc2s7CisrCQlFTkdJTkVfc2V0X2xvYWRfcHVia2V5X2Z1bmN0aW9uOworKwkJUEtDUzhfZGVjcnlwdDsKKysJCVBFTV9ieXRlc19yZWFkX2JpbzsKKysJCURJUkVDVE9SWVNUUklOR19pdDsKKysJCWQyaV9PQ1NQX0NSTElEOworKwkJRUNfUE9JTlRfaXNfb25fY3VydmU7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZXhfZnVuY3Rpb25zOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2V4X2Z1bmNzOworKwkJZDJpX0tSQjVfQ0hFQ0tTVU07CisrCQlBU04xX2l0ZW1fZHVwOworKwkJWDUwOV9pdDsKKysJCUJOX21vZF9hZGQ7CisrCQlLUkI1X0FVVEhEQVRBX2ZyZWU7CisrCQlfb3NzbF9vbGRfZGVzX2NiY19ja3N1bTsKKysJCUFTTjFfaXRlbV92ZXJpZnk7CisrCQlDUllQVE9fc2V0X21lbV9leF9mdW5jdGlvbnM7CisrCQlFQ19QT0lOVF9nZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfZ2V0X0pwcm9qX2Nvb3Jkc19HRnA7CisrCQlaTE9OR19pdDsKKysJCUNSWVBUT19nZXRfbG9ja2VkX21lbV9leF9mdW5jdGlvbnM7CisrCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZXhfZnVuY3M7CisrCQlBU04xX1RJTUVfY2hlY2s7CisrCQlVSV9nZXQwX3VzZXJfZGF0YTsKKysJCUhNQUNfQ1RYX2NsZWFudXA7CisrCQlEU0FfdXBfcmVmOworKwkJX29zc2xfb2xkX2Rlc19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlfb3NzbF9vZGVzX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCUFTTjFfQk1QU1RSSU5HX2l0OworKwkJQVNOMV90YWcyYml0OworKwkJVUlfbWV0aG9kX3NldF9mbHVzaGVyOworKwkJWDUwOV9vY3NwaWRfcHJpbnQ7CisrCQlLUkI1X0VOQ0RBVEFfaXQ7CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHVia2V5X2Z1bmN0aW9uOworKwkJVUlfYWRkX3VzZXJfZGF0YTsKKysJCU9DU1BfUkVRVUVTVF9kZWxldGVfZXh0OworKwkJVUlfZ2V0X21ldGhvZDsKKysJCU9DU1BfT05FUkVRX2ZyZWU7CisrCQlBU04xX1BSSU5UQUJMRVNUUklOR19pdDsKKysJCVg1MDlfQ1JMX3NldF9uZXh0VXBkYXRlOworKwkJT0NTUF9SRVFVRVNUX2l0OworKwkJT0NTUF9CQVNJQ1JFU1BfaXQ7CisrCQlBRVNfZWNiX2VuY3J5cHQ7CisrCQlCTl9tb2Rfc3FyOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9pdDsKKysJCUdFTkVSQUxfTkFNRVNfaXQ7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfaXQ7CisrCQlBU04xX0ZCT09MRUFOX2l0OworKwkJVUlfc2V0X2V4X2RhdGE7CisrCQlfb3NzbF9vbGRfZGVzX3N0cmluZ190b19rZXk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1JTQTsKKysJCWQyaV9LUkI1X1BSSU5DTkFNRTsKKysJCU9DU1BfUkVTUEJZVEVTX2l0OworKwkJWDUwOV9DSU5GX2l0OworKwkJRU5HSU5FX3VucmVnaXN0ZXJfZGlnZXN0czsKKysJCWQyaV9FRElQQVJUWU5BTUU7CisrCQlkMmlfT0NTUF9TRVJWSUNFTE9DOworKwkJRU5HSU5FX2dldF9kaWdlc3RzOworKwkJX29zc2xfb2xkX2Rlc19zZXRfb2RkX3Bhcml0eTsKKysJCU9DU1BfUkVTUERBVEFfZnJlZTsKKysJCWQyaV9LUkI1X1RJQ0tFVDsKKysJCU9USEVSTkFNRV9pdDsKKysJCUVWUF9NRF9DVFhfY2xlYW51cDsKKysJCWQyaV9BU04xX0dFTkVSQUxTVFJJTkc7CisrCQlYNTA5X0NSTF9zZXRfdmVyc2lvbjsKKysJCUJOX21vZF9zdWI7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9OSUQ7CisrCQlFTkdJTkVfZ2V0X2V4X25ld19pbmRleDsKKysJCU9DU1BfUkVRVUVTVF9mcmVlOworKwkJT0NTUF9SRVFVRVNUX2FkZDFfZXh0X2kyZDsKKysJCVg1MDlfVkFMX2l0OworKwkJRUNfUE9JTlRzX21ha2VfYWZmaW5lOworKwkJRUNfUE9JTlRfbXVsOworKwkJWDUwOVYzX0VYVF9hZGRfbmNvbmY7CisrCQlYNTA5X1RSVVNUX3NldDsKKysJCVg1MDlfQ1JMX2FkZDFfZXh0X2kyZDsKKysJCV9vc3NsX29sZF9kZXNfZmNyeXB0OworKwkJRElTUExBWVRFWFRfaXQ7CisrCQlYNTA5X0NSTF9zZXRfbGFzdFVwZGF0ZTsKKysJCU9DU1BfQkFTSUNSRVNQX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9hZGQxX2V4dF9pMmQ7CisrCQlkMmlfS1JCNV9BVVRIRU5UQk9EWTsKKysJCUNSWVBUT19zZXRfZXhfZGF0YV9pbXBsZW1lbnRhdGlvbjsKKysJCUNSWVBUT19zZXRfZXhfZGF0YV9pbXBsOworKwkJS1JCNV9FTkNEQVRBX25ldzsKKysJCURTT191cF9yZWY7CisrCQlPQ1NQX2NybF9yZWFzb25fc3RyOworKwkJVUlfZ2V0MF9yZXN1bHRfc3RyaW5nOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX25ldzsKKysJCVg1MDlfU0lHX2l0OworKwkJRVJSX3NldF9pbXBsZW1lbnRhdGlvbjsKKysJCUVSUl9sb2FkX0VDX3N0cmluZ3M7CisrCQlVSV9nZXQwX2FjdGlvbl9zdHJpbmc7CisrCQlPQ1NQX09ORVJFUV9nZXRfZXh0OworKwkJRUNfUE9JTlRfbWV0aG9kX29mOworKwkJaTJkX0tSQjVfQVBSRVFCT0RZOworKwkJX29zc2xfb2xkX2Rlc19lY2IzX2VuY3J5cHQ7CisrCQlDUllQVE9fZ2V0X21lbV9leF9mdW5jdGlvbnM7CisrCQlFTkdJTkVfZ2V0X2V4X2RhdGE7CisrCQlVSV9kZXN0cm95X21ldGhvZDsKKysJCUFTTjFfaXRlbV9pMmRfYmlvOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9PQko7CisrCQlBU04xX3ByaW1pdGl2ZV9uZXc7CisrCQlBU04xX1BSSU5UQUJMRV9pdDsKKysJCUVWUF9hZXNfMTkyX2VjYjsKKysJCU9DU1BfU0lHTkFUVVJFX25ldzsKKysJCUxPTkdfaXQ7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfaXQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfYWRkMV9leHRfaTJkOworKwkJZDJpX09DU1BfQ0VSVElEOworKwkJQVNOMV9pdGVtX2QyaV9mcDsKKysJCUNSTF9ESVNUX1BPSU5UU19pdDsKKysJCUdFTkVSQUxfTkFNRV9wcmludDsKKysJCU9DU1BfU0lOR0xFUkVTUF9kZWxldGVfZXh0OworKwkJUEtDUzEyX1NBRkVCQUdTX2l0OworKwkJZDJpX09DU1BfU0lHTkFUVVJFOworKwkJT0NTUF9yZXF1ZXN0X2FkZDFfbm9uY2U7CisrCQlFTkdJTkVfc2V0X2NtZF9kZWZuczsKKysJCU9DU1BfU0VSVklDRUxPQ19mcmVlOworKwkJRUNfR1JPVVBfZnJlZTsKKysJCUFTTjFfQklUX1NUUklOR19pdDsKKysJCVg1MDlfUkVRX2l0OworKwkJX29zc2xfb2xkX2Rlc19jYmNfZW5jcnlwdDsKKysJCUVSUl91bmxvYWRfc3RyaW5nczsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfaXQ7CisrCQlFRElQQVJUWU5BTUVfZnJlZTsKKysJCU9DU1BfUkVRSU5GT19mcmVlOworKwkJRUNfR1JPVVBfbmV3X2N1cnZlX0dGcDsKKysJCU9DU1BfUkVRVUVTVF9nZXQxX2V4dF9kMmk7CisrCQlQS0NTMTJfaXRlbV9wYWNrX3NhZmViYWc7CisrCQlhc24xX2V4X2MyaTsKKysJCUVOR0lORV9yZWdpc3Rlcl9kaWdlc3RzOworKwkJaTJkX09DU1BfUkVWT0tFRElORk87CisrCQlhc24xX2VuY19yZXN0b3JlOworKwkJVUlfZnJlZTsKKysJCVVJX25ld19tZXRob2Q7CisrCQlFVlBfRW5jcnlwdEluaXRfZXg7CisrCQlYNTA5X3B1YmtleV9kaWdlc3Q7CisrCQlFQ19QT0lOVF9pbnZlcnQ7CisrCQlPQ1NQX2Jhc2ljX3NpZ247CisrCQlpMmRfT0NTUF9SRVNQSUQ7CisrCQlPQ1NQX2NoZWNrX25vbmNlOworKwkJRU5HSU5FX2N0cmxfY21kOworKwkJZDJpX0tSQjVfRU5DS0VZOworKwkJT0NTUF9wYXJzZV91cmw7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dDsKKysJCU9DU1BfQ1JMSURfZnJlZTsKKysJCU9DU1BfQkFTSUNSRVNQX2dldDFfZXh0X2QyaTsKKysJCVJTQVByaXZhdGVLZXlfaXQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0RIOworKwkJaTJkX0VESVBBUlRZTkFNRTsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZHNfR0ZwOworKwkJT0NTUF9DUkxJRF9uZXc7CisrCQlFTkdJTkVfZ2V0X2ZsYWdzOworKwkJT0NTUF9PTkVSRVFfaXQ7CisrCQlVSV9wcm9jZXNzOworKwkJQVNOMV9JTlRFR0VSX2l0OworKwkJRVZQX0NpcGhlckluaXRfZXg7CisrCQlVSV9nZXRfc3RyaW5nX3R5cGU7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9ESDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRFNBOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCWJuX2R1cF9leHBhbmQ7CisrCQlPQ1NQX2NlcnRfaWRfbmV3OworKwkJQkFTSUNfQ09OU1RSQUlOVFNfaXQ7CisrCQlCTl9tb2RfYWRkX3F1aWNrOworKwkJRUNfUE9JTlRfbmV3OworKwkJRVZQX01EX0NUWF9kZXN0cm95OworKwkJT0NTUF9SRVNQQllURVNfZnJlZTsKKysJCUVWUF9hZXNfMTI4X2NiYzsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXQxX2V4dF9kMmk7CisrCQlFQ19QT0lOVF9mcmVlOworKwkJREhfdXBfcmVmOworKwkJWDUwOV9OQU1FX0VOVFJZX2l0OworKwkJVUlfZ2V0X2V4X25ld19pbmRleDsKKysJCUJOX21vZF9zdWJfcXVpY2s7CisrCQlPQ1NQX09ORVJFUV9hZGRfZXh0OworKwkJT0NTUF9yZXF1ZXN0X3NpZ247CisrCQlFVlBfRGlnZXN0RmluYWxfZXg7CisrCQlFTkdJTkVfc2V0X2RpZ2VzdHM7CisrCQlPQ1NQX2lkX2lzc3Vlcl9jbXA7CisrCQlPQkpfTkFNRV9kb19hbGw7CisrCQlFQ19QT0lOVHNfbXVsOworKwkJRU5HSU5FX3JlZ2lzdGVyX2NvbXBsZXRlOworKwkJWDUwOVYzX0VYVF9uY29uZl9uaWQ7CisrCQlBU04xX1NFUVVFTkNFX2l0OworKwkJVUlfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUkFORF9xdWVyeV9lZ2RfYnl0ZXM7CisrCQlVSV9tZXRob2RfZ2V0X3dyaXRlcjsKKysJCVVJX09wZW5TU0w7CisrCQlQRU1fZGVmX2NhbGxiYWNrOworKwkJRU5HSU5FX2NsZWFudXA7CisrCQlESVNUX1BPSU5UX2l0OworKwkJT0NTUF9TSU5HTEVSRVNQX2l0OworKwkJZDJpX0tSQjVfVEtUQk9EWTsKKysJCUVDX1BPSU5UX2NtcDsKKysJCU9DU1BfUkVWT0tFRElORk9fbmV3OworKwkJaTJkX09DU1BfQ0VSVFNUQVRVUzsKKysJCU9DU1BfYmFzaWNfYWRkMV9ub25jZTsKKysJCUFTTjFfaXRlbV9leF9kMmk7CisrCQlCTl9tb2RfbHNoaWZ0MV9xdWljazsKKysJCVVJX3NldF9tZXRob2Q7CisrCQlPQ1NQX2lkX2dldDBfaW5mbzsKKysJCUJOX21vZF9zcXJ0OworKwkJRUNfR1JPVVBfY29weTsKKysJCUtSQjVfRU5DREFUQV9mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jZmJfZW5jcnlwdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X09CSjsKKysJCU9DU1BfY2VydF90b19pZDsKKysJCU9DU1BfUkVTUElEX25ldzsKKysJCU9DU1BfUkVTUERBVEFfaXQ7CisrCQlkMmlfT0NTUF9SRVNQREFUQTsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfY29tcGxldGU7CisrCQlPQ1NQX2NoZWNrX3ZhbGlkaXR5OworKwkJUEtDUzEyX0JBR1NfaXQ7CisrCQlPQ1NQX3VybF9zdmNsb2NfbmV3OworKwkJQVNOMV90ZW1wbGF0ZV9mcmVlOworKwkJT0NTUF9TSU5HTEVSRVNQX2FkZF9leHQ7CisrCQlLUkI1X0FVVEhFTlRCT0RZX2l0OworKwkJWDUwOV9zdXBwb3J0ZWRfZXh0ZW5zaW9uOworKwkJaTJkX0tSQjVfQVVUSERBVEE7CisrCQlVSV9tZXRob2RfZ2V0X29wZW5lcjsKKysJCUVOR0lORV9zZXRfZXhfZGF0YTsKKysJCU9DU1BfUkVRVUVTVF9wcmludDsKKysJCUNCSUdOVU1faXQ7CisrCQlLUkI1X1RJQ0tFVF9uZXc7CisrCQlLUkI1X0FQUkVRX25ldzsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9HRnA7CisrCQlLUkI1X0VOQ0tFWV9uZXc7CisrCQlBU04xX3RlbXBsYXRlX2QyaTsKKysJCV9vc3NsX29sZF9kZXNfcXVhZF9ja3N1bTsKKysJCU9DU1Bfc2luZ2xlX2dldDBfc3RhdHVzOworKwkJQk5fc3dhcDsKKysJCVBPTElDWUlORk9faXQ7CisrCQlFTkdJTkVfc2V0X2Rlc3Ryb3lfZnVuY3Rpb247CisrCQlhc24xX2VuY19mcmVlOworKwkJT0NTUF9SRVNQSURfaXQ7CisrCQlFQ19HUk9VUF9uZXc7CisrCQlFVlBfYWVzXzI1Nl9jYmM7CisrCQlpMmRfS1JCNV9QUklOQ05BTUU7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQyOworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0MzsKKysJCVBLQ1M4X1BSSVZfS0VZX0lORk9faXQ7CisrCQlPQ1NQX1JFUUlORk9faXQ7CisrCQlQQkVQQVJBTV9pdDsKKysJCUtSQjVfQVVUSEVOVEJPRFlfbmV3OworKwkJWDUwOV9DUkxfYWRkMF9yZXZva2VkOworKwkJRURJUEFSVFlOQU1FX2l0OworKwkJTkVUU0NBUEVfU1BLSV9pdDsKKysJCVVJX2dldDBfdGVzdF9zdHJpbmc7CisrCQlFTkdJTkVfZ2V0X2NpcGhlcl9lbmdpbmU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2NpcGhlcnM7CisrCQlFQ19QT0lOVF9jb3B5OworKwkJQk5fa3JvbmVja2VyOworKwkJX29zc2xfb2xkX2Rlc19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlfb3NzbF9vZGVzX2VkZTNfb2ZiNjRfZW5jcnlwdDsKKysJCVVJX21ldGhvZF9nZXRfcmVhZGVyOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9jb3VudDsKKysJCUFTTjFfRU5VTUVSQVRFRF9pdDsKKysJCVVJX3NldF9yZXN1bHQ7CisrCQlpMmRfS1JCNV9USUNLRVQ7CisrCQlYNTA5X3ByaW50X2V4X2ZwOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X3BhZGRpbmc7CisrCQlkMmlfT0NTUF9SRVNQT05TRTsKKysJCUFTTjFfVVRDVElNRV9pdDsKKysJCV9vc3NsX29sZF9kZXNfZW5jX3dyaXRlOworKwkJT0NTUF9SRVNQT05TRV9uZXc7CisrCQlBRVNfc2V0X2VuY3J5cHRfa2V5OworKwkJT0NTUF9yZXNwX2NvdW50OworKwkJS1JCNV9DSEVDS1NVTV9uZXc7CisrCQlFTkdJTkVfbG9hZF9jc3dpZnQ7CisrCQlPQ1NQX29uZXJlcV9nZXQwX2lkOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X2NpcGhlcnM7CisrCQlOT1RJQ0VSRUZfaXQ7CisrCQlYNTA5VjNfRVhUX0NSTF9hZGRfbmNvbmY7CisrCQlPQ1NQX1JFVk9LRURJTkZPX2l0OworKwkJQUVTX2VuY3J5cHQ7CisrCQlPQ1NQX1JFUVVFU1RfbmV3OworKwkJQVNOMV9BTllfaXQ7CisrCQlDUllQVE9fZXhfZGF0YV9uZXdfY2xhc3M7CisrCQlfb3NzbF9vbGRfZGVzX25jYmNfZW5jcnlwdDsKKysJCWkyZF9LUkI1X1RLVEJPRFk7CisrCQlFQ19QT0lOVF9jbGVhcl9mcmVlOworKwkJQUVTX2RlY3J5cHQ7CisrCQlhc24xX2VuY19pbml0OworKwkJVUlfZ2V0X3Jlc3VsdF9tYXhzaXplOworKwkJT0NTUF9DRVJUSURfbmV3OworKwkJRU5HSU5FX3VucmVnaXN0ZXJfUkFORDsKKysJCVVJX21ldGhvZF9nZXRfY2xvc2VyOworKwkJZDJpX0tSQjVfRU5DREFUQTsKKysJCU9DU1BfcmVxdWVzdF9vbmVyZXFfY291bnQ7CisrCQlPQ1NQX2Jhc2ljX3ZlcmlmeTsKKysJCUtSQjVfQVVUSEVOVEJPRFlfZnJlZTsKKysJCUFTTjFfaXRlbV9kMmk7CisrCQlBU04xX3ByaW1pdGl2ZV9mcmVlOworKwkJaTJkX0VYVEVOREVEX0tFWV9VU0FHRTsKKysJCWkyZF9PQ1NQX1NJR05BVFVSRTsKKysJCWFzbjFfZW5jX3NhdmU7CisrCQlFTkdJTkVfbG9hZF9udXJvbjsKKysJCV9vc3NsX29sZF9kZXNfcGNiY19lbmNyeXB0OworKwkJUEtDUzEyX01BQ19EQVRBX2l0OworKwkJT0NTUF9hY2NlcHRfcmVzcG9uc2VzX25ldzsKKysJCWFzbjFfZG9fbG9jazsKKysJCVBLQ1M3X0FUVFJfVkVSSUZZX2l0OworKwkJS1JCNV9BUFJFUUJPRFlfaXQ7CisrCQlpMmRfT0NTUF9TSU5HTEVSRVNQOworKwkJQVNOMV9pdGVtX2V4X25ldzsKKysJCVVJX2FkZF92ZXJpZnlfc3RyaW5nOworKwkJX29zc2xfb2xkX2Rlc19zZXRfa2V5OworKwkJS1JCNV9QUklOQ05BTUVfaXQ7CisrCQlFVlBfRGVjcnlwdEluaXRfZXg7CisrCQlpMmRfT0NTUF9DRVJUSUQ7CisrCQlBU04xX2l0ZW1fZDJpX2JpbzsKKysJCUVDX1BPSU5UX2RibDsKKysJCWFzbjFfZ2V0X2Nob2ljZV9zZWxlY3RvcjsKKysJCWkyZF9LUkI1X0NIRUNLU1VNOworKwkJRU5HSU5FX3NldF90YWJsZV9mbGFnczsKKysJCUFFU19vcHRpb25zOworKwkJRU5HSU5FX2xvYWRfY2hpbDsKKysJCU9DU1BfaWRfY21wOworKwkJT0NTUF9CQVNJQ1JFU1BfbmV3OworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfTklEOworKwkJS1JCNV9BUFJFUV9pdDsKKysJCUVOR0lORV9nZXRfZGVzdHJveV9mdW5jdGlvbjsKKysJCUNPTkZfc2V0X25jb25mOworKwkJQVNOMV9QUklOVEFCTEVfZnJlZTsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfTklEOworKwkJRElTVF9QT0lOVF9OQU1FX2l0OworKwkJWDUwOVYzX2V4dGVuc2lvbnNfcHJpbnQ7CisrCQlfb3NzbF9vbGRfZGVzX2NmYjY0X2VuY3J5cHQ7CisrCQlYNTA5X1JFVk9LRURfYWRkMV9leHRfaTJkOworKwkJX29zc2xfb2xkX2Rlc19vZmJfZW5jcnlwdDsKKysJCUtSQjVfVEtUQk9EWV9uZXc7CisrCQlBU04xX09DVEVUX1NUUklOR19pdDsKKysJCUVSUl9sb2FkX1VJX3N0cmluZ3M7CisrCQlpMmRfS1JCNV9FTkNLRVk7CisrCQlBU04xX3RlbXBsYXRlX25ldzsKKysJCU9DU1BfU0lHTkFUVVJFX2ZyZWU7CisrCQlBU04xX2l0ZW1faTJkX2ZwOworKwkJS1JCNV9QUklOQ05BTUVfZnJlZTsKKysJCVBLQ1M3X1JFQ0lQX0lORk9faXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfaXQ7CisrCQlFQ19HRnBfc2ltcGxlX21ldGhvZDsKKysJCUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdDsKKysJCU9DU1BfcmVxdWVzdF9vbmVyZXFfZ2V0MDsKKysJCVVJX21ldGhvZF9zZXRfd3JpdGVyOworKwkJS1JCNV9BVVRIRU5UX25ldzsKKysJCVg1MDlfQ1JMX0lORk9faXQ7CisrCQlEU09fc2V0X25hbWVfY29udmVydGVyOworKwkJQUVTX3NldF9kZWNyeXB0X2tleTsKKysJCVBLQ1M3X0RJR0VTVF9pdDsKKysJCVBLQ1MxMl94NTA5MmNlcnRiYWc7CisrCQlFVlBfRGlnZXN0SW5pdF9leDsKKysJCWkyYV9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlPQ1NQX1JFU1BPTlNFX2l0OworKwkJUEtDUzdfRU5DX0NPTlRFTlRfaXQ7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMF9pZDsKKysJCUVDX1BPSU5UX21ha2VfYWZmaW5lOworKwkJRFNPX2dldF9maWxlbmFtZTsKKysJCU9DU1BfQ0VSVFNUQVRVU19pdDsKKysJCU9DU1BfcmVxdWVzdF9hZGQxX2NlcnQ7CisrCQlVSV9nZXQwX291dHB1dF9zdHJpbmc7CisrCQlVSV9kdXBfdmVyaWZ5X3N0cmluZzsKKysJCUJOX21vZF9sc2hpZnQ7CisrCQlLUkI1X0FVVEhEQVRBX2l0OworKwkJYXNuMV9zZXRfY2hvaWNlX3NlbGVjdG9yOworKwkJT0NTUF9iYXNpY19hZGQxX3N0YXR1czsKKysJCU9DU1BfUkVTUElEX2ZyZWU7CisrCQlhc24xX2dldF9maWVsZF9wdHI7CisrCQlVSV9hZGRfaW5wdXRfc3RyaW5nOworKwkJT0NTUF9DUkxJRF9pdDsKKysJCWkyZF9LUkI1X0FVVEhFTlRCT0RZOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfY291bnQ7CisrCQlFTkdJTkVfbG9hZF9hdGFsbGE7CisrCQlYNTA5X05BTUVfaXQ7CisrCQlVU0VSTk9USUNFX2l0OworKwkJT0NTUF9SRVFJTkZPX25ldzsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHQ7CisrCQlDUllQVE9fZ2V0X2V4X2RhdGFfaW1wbGVtZW50YXRpb247CisrCQlDUllQVE9fZ2V0X2V4X2RhdGFfaW1wbDsKKysJCUFTTjFfaXRlbV9wYWNrOworKwkJaTJkX0tSQjVfRU5DREFUQTsKKysJCVg1MDlfUFVSUE9TRV9zZXQ7CisrCQlYNTA5X1JFUV9JTkZPX2l0OworKwkJVUlfbWV0aG9kX3NldF9vcGVuZXI7CisrCQlBU04xX2l0ZW1fZXhfZnJlZTsKKysJCUFTTjFfQk9PTEVBTl9pdDsKKysJCUVOR0lORV9nZXRfdGFibGVfZmxhZ3M7CisrCQlVSV9jcmVhdGVfbWV0aG9kOworKwkJT0NTUF9PTkVSRVFfYWRkMV9leHRfaTJkOworKwkJX3NoYWRvd19ERVNfY2hlY2tfa2V5OworKwkJZDJpX09DU1BfUkVRSU5GTzsKKysJCVVJX2FkZF9pbmZvX3N0cmluZzsKKysJCVVJX2dldF9yZXN1bHRfbWluc2l6ZTsKKysJCUFTTjFfTlVMTF9pdDsKKysJCUJOX21vZF9sc2hpZnQxOworKwkJZDJpX09DU1BfT05FUkVROworKwkJT0NTUF9PTkVSRVFfbmV3OworKwkJS1JCNV9USUNLRVRfaXQ7CisrCQlFVlBfYWVzXzE5Ml9jYmM7CisrCQlLUkI1X1RJQ0tFVF9mcmVlOworKwkJVUlfbmV3OworKwkJT0NTUF9yZXNwb25zZV9jcmVhdGU7CisrCQlfb3NzbF9vbGRfZGVzX3hjYmNfZW5jcnlwdDsKKysJCVBLQ1M3X2l0OworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9jcml0OworKwkJRU5HSU5FX3NldF9mbGFnczsKKysJCV9vc3NsX29sZF9kZXNfZWNiX2VuY3J5cHQ7CisrCQlPQ1NQX3Jlc3BvbnNlX2dldDFfYmFzaWM7CisrCQlFVlBfRGlnZXN0OworKwkJT0NTUF9PTkVSRVFfZGVsZXRlX2V4dDsKKysJCUFTTjFfVEJPT0xFQU5faXQ7CisrCQlBU04xX2l0ZW1fbmV3OworKwkJQVNOMV9USU1FX3RvX2dlbmVyYWxpemVkdGltZTsKKysJCUJJR05VTV9pdDsKKysJCUFFU19jYmNfZW5jcnlwdDsKKysJCUVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9sb2FkX3ByaXZrZXlfZm47CisrCQlPQ1NQX1JFU1BPTlNFX2ZyZWU7CisrCQlVSV9tZXRob2Rfc2V0X3JlYWRlcjsKKysJCWkyZF9BU04xX1Q2MVNUUklORzsKKysJCUVDX1BPSU5UX3NldF90b19pbmZpbml0eTsKKysJCUVSUl9sb2FkX09DU1Bfc3RyaW5nczsKKysJCUVDX1BPSU5UX3BvaW50Mm9jdDsKKysJCUtSQjVfQVBSRVFfZnJlZTsKKysJCUFTTjFfT0JKRUNUX2l0OworKwkJT0NTUF9jcmxJRF9uZXc7CisrCQlPQ1NQX2NybElEMl9uZXc7CisrCQlDT05GX21vZHVsZXNfbG9hZF9maWxlOworKwkJQ09ORl9pbW9kdWxlX3NldF91c3JfZGF0YTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9zdHJpbmc7CisrCQlDT05GX21vZHVsZV9nZXRfdXNyX2RhdGE7CisrCQlBU04xX2FkZF9vaWRfbW9kdWxlOworKwkJQ09ORl9tb2R1bGVzX2ZpbmlzaDsKKysJCU9QRU5TU0xfY29uZmlnOworKwkJQ09ORl9tb2R1bGVzX3VubG9hZDsKKysJCUNPTkZfaW1vZHVsZV9nZXRfdmFsdWU7CisrCQlDT05GX21vZHVsZV9zZXRfdXNyX2RhdGE7CisrCQlDT05GX3BhcnNlX2xpc3Q7CisrCQlDT05GX21vZHVsZV9hZGQ7CisrCQlDT05GX2dldDFfZGVmYXVsdF9jb25maWdfZmlsZTsKKysJCUNPTkZfaW1vZHVsZV9nZXRfZmxhZ3M7CisrCQlDT05GX2ltb2R1bGVfZ2V0X21vZHVsZTsKKysJCUNPTkZfbW9kdWxlc19sb2FkOworKwkJQ09ORl9pbW9kdWxlX2dldF9uYW1lOworKwkJRVJSX3BlZWtfdG9wX2Vycm9yOworKwkJQ09ORl9pbW9kdWxlX2dldF91c3JfZGF0YTsKKysJCUNPTkZfaW1vZHVsZV9zZXRfZmxhZ3M7CisrCQlFTkdJTkVfYWRkX2NvbmZfbW9kdWxlOworKwkJRVJSX3BlZWtfbGFzdF9lcnJvcl9saW5lOworKwkJRVJSX3BlZWtfbGFzdF9lcnJvcl9saW5lX2RhdGE7CisrCQlFUlJfcGVla19sYXN0X2Vycm9yOworKwkJREVTX3JlYWRfMnBhc3N3b3JkczsKKysJCURFU19yZWFkX3Bhc3N3b3JkOworKwkJVUlfVVRJTF9yZWFkX3B3OworKwkJVUlfVVRJTF9yZWFkX3B3X3N0cmluZzsKKysJCUVOR0lORV9sb2FkX2FlcDsKKysJCUVOR0lORV9sb2FkX3N1cmV3YXJlOworKwkJT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfbm9jb25mOworKwkJT1BFTlNTTF9hZGRfYWxsX2FsZ29fbm9jb25mOworKwkJT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvX2NvbmY7CisrCQlPUEVOU1NMX2xvYWRfYnVpbHRpbl9tb2R1bGVzOworKwkJQUVTX29mYjEyOF9lbmNyeXB0OworKwkJQUVTX2N0cjEyOF9lbmNyeXB0OworKwkJQUVTX2NmYjEyOF9lbmNyeXB0OworKwkJRU5HSU5FX2xvYWRfNDc1OGNjYTsKKysJCV9vc3NsXzA5Nl9kZXNfcmFuZG9tX3NlZWQ7CisrCQlFVlBfYWVzXzI1Nl9vZmI7CisrCQlFVlBfYWVzXzE5Ml9vZmI7CisrCQlFVlBfYWVzXzEyOF9jZmIxMjg7CisrCQlFVlBfYWVzXzI1Nl9jZmIxMjg7CisrCQlFVlBfYWVzXzEyOF9vZmI7CisrCQlFVlBfYWVzXzE5Ml9jZmIxMjg7CisrCQlDT05GX21vZHVsZXNfZnJlZTsKKysJCU5DT05GX2RlZmF1bHQ7CisrCQlPUEVOU1NMX25vX2NvbmZpZzsKKysJCU5DT05GX1dJTjMyOworKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfbmV3OworKwkJRVZQX2Rlc19lZGVfZWNiOworKwkJaTJkX0FTTjFfVU5JVkVSU0FMU1RSSU5HOworKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfZnJlZTsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX2l0OworKwkJZDJpX0FTTjFfVU5JVkVSU0FMU1RSSU5HOworKwkJRVZQX2Rlc19lZGUzX2VjYjsKKysJCVg1MDlfUkVRX3ByaW50X2V4OworKwkJRU5HSU5FX3VwX3JlZjsKKysJCUJVRl9NRU1fZ3Jvd19jbGVhbjsKKysJCUNSWVBUT19yZWFsbG9jX2NsZWFuOworKwkJQlVGX3N0cmxjYXQ7CisrCQlCSU9faW5kZW50OworKwkJQlVGX3N0cmxjcHk7CisrCQlPcGVuU1NMRGllOworKwkJT1BFTlNTTF9jbGVhbnNlOworKwkJRU5HSU5FX3NldHVwX2JzZF9jcnlwdG9kZXY7CisrCQlFUlJfcmVsZWFzZV9lcnJfc3RhdGVfdGFibGU7CisrCQlFVlBfYWVzXzEyOF9jZmI4OworKwkJRklQU19jb3JydXB0X3JzYTsKKysJCUZJUFNfc2VsZnRlc3RfZGVzOworKwkJRVZQX2Flc18xMjhfY2ZiMTsKKysJCUVWUF9hZXNfMTkyX2NmYjg7CisrCQlGSVBTX21vZGVfc2V0OworKwkJRklQU19zZWxmdGVzdF9kc2E7CisrCQlFVlBfYWVzXzI1Nl9jZmI4OworKwkJRklQU19hbGxvd19tZDU7CisrCQlERVNfZWRlM19jZmJfZW5jcnlwdDsKKysJCUVWUF9kZXNfZWRlM19jZmI4OworKwkJRklQU19yYW5kX3NlZWRlZDsKKysJCUFFU19jZmJyX2VuY3J5cHRfYmxvY2s7CisrCQlBRVNfY2ZiOF9lbmNyeXB0OworKwkJRklQU19yYW5kX3NlZWQ7CisrCQlGSVBTX2NvcnJ1cHRfZGVzOworKwkJRVZQX2Flc18xOTJfY2ZiMTsKKysJCUZJUFNfc2VsZnRlc3RfYWVzOworKwkJRklQU19zZXRfcHJuZ19rZXk7CisrCQlFVlBfZGVzX2NmYjg7CisrCQlGSVBTX2NvcnJ1cHRfZHNhOworKwkJRklQU190ZXN0X21vZGU7CisrCQlGSVBTX3JhbmRfbWV0aG9kOworKwkJRVZQX2Flc18yNTZfY2ZiMTsKKysJCUVSUl9sb2FkX0ZJUFNfc3RyaW5nczsKKysJCUZJUFNfY29ycnVwdF9hZXM7CisrCQlGSVBTX3NlbGZ0ZXN0X3NoYTE7CisrCQlGSVBTX3NlbGZ0ZXN0X3JzYTsKKysJCUZJUFNfY29ycnVwdF9zaGExOworKwkJRVZQX2Rlc19jZmIxOworKwkJRklQU19kc2FfY2hlY2s7CisrCQlBRVNfY2ZiMV9lbmNyeXB0OworKwkJRVZQX2Rlc19lZGUzX2NmYjE7CisrCQlGSVBTX3JhbmRfY2hlY2s7CisrCQlGSVBTX21kNV9hbGxvd2VkOworKwkJRklQU19tb2RlOworKwkJRklQU19zZWxmdGVzdF9mYWlsZWQ7CisrCQlza19pc19zb3J0ZWQ7CisrCQlYNTA5X2NoZWNrX2NhOworKwkJSE1BQ19DVFhfc2V0X2ZsYWdzOworKwkJZDJpX1BST1hZX0NFUlRfSU5GT19FWFRFTlNJT047CisrCQlQUk9YWV9QT0xJQ1lfaXQ7CisrCQlpMmRfUFJPWFlfUE9MSUNZOworKwkJaTJkX1BST1hZX0NFUlRfSU5GT19FWFRFTlNJT047CisrCQlkMmlfUFJPWFlfUE9MSUNZOworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9uZXc7CisrCQlQUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OX2ZyZWU7CisrCQlQUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OX2l0OworKwkJUFJPWFlfUE9MSUNZX2ZyZWU7CisrCQlQUk9YWV9QT0xJQ1lfbmV3OworKwkJQk5fTU9OVF9DVFhfc2V0X2xvY2tlZDsKKysJCUZJUFNfc2VsZnRlc3Rfcm5nOworKwkJRVZQX3NoYTM4NDsKKysJCUVWUF9zaGE1MTI7CisrCQlFVlBfc2hhMjI0OworKwkJRVZQX3NoYTI1NjsKKysJCUZJUFNfc2VsZnRlc3RfaG1hYzsKKysJCUZJUFNfY29ycnVwdF9ybmc7CisrCQlCTl9tb2RfZXhwX21vbnRfY29uc3R0aW1lOworKwkJUlNBX1g5MzFfaGFzaF9pZDsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1g5MzE7CisrCQlSU0FfdmVyaWZ5X1BLQ1MxX1BTUzsKKysJCVJTQV9wYWRkaW5nX2FkZF9YOTMxOworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTUzsKKysJCVBLQ1MxX01HRjE7CisrCQlCTl9YOTMxX2dlbmVyYXRlX1hwcTsKKysJCVJTQV9YOTMxX2dlbmVyYXRlX2tleTsKKysJCUJOX1g5MzFfZGVyaXZlX3ByaW1lOworKwkJQk5fWDkzMV9nZW5lcmF0ZV9wcmltZTsKKysJCVJTQV9YOTMxX2Rlcml2ZTsKKysJCUJJT19uZXdfZGdyYW07CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMzg0OworKwkJRVJSX3NldF9tYXJrOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0MF9jcmxzOworKwkJRU5HSU5FX3NldF9TVE9SRTsKKysJCUVOR0lORV9yZWdpc3Rlcl9FQ0RTQTsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3Rfc3RhcnRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3Rfc3RhcnRfZnVuY3Rpb247CisrCQlCTl9CTElORElOR19pbnZlcnRfZXg7CisrCQlOQU1FX0NPTlNUUkFJTlRTX2ZyZWU7CisrCQlTVE9SRV9BVFRSX0lORk9fc2V0X251bWJlcjsKKysJCUJOX0JMSU5ESU5HX2dldF90aHJlYWRfaWQ7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXQwX3BhcmFtOworKwkJUE9MSUNZX01BUFBJTkdfaXQ7CisrCQlTVE9SRV9wYXJzZV9hdHRyc19zdGFydDsKKysJCVBPTElDWV9DT05TVFJBSU5UU19mcmVlOworKwkJRVZQX1BLRVlfYWRkMV9hdHRyX2J5X05JRDsKKysJCUJOX25pc3RfbW9kXzE5MjsKKysJCUVDX0dST1VQX2dldF90cmlub21pYWxfYmFzaXM7CisrCQlTVE9SRV9zZXRfbWV0aG9kOworKwkJR0VORVJBTF9TVUJUUkVFX2ZyZWU7CisrCQlOQU1FX0NPTlNUUkFJTlRTX2l0OworKwkJRUNESF9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlQS0NTMTJfYWRkX3NhZmU7CisrCQlFQ19LRVlfbmV3X2J5X2N1cnZlX25hbWU7CisrCQlTVE9SRV9tZXRoX2dldF91cGRhdGVfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3VwZGF0ZV9zdG9yZV9mdW5jdGlvbjsKKysJCUVOR0lORV9yZWdpc3Rlcl9FQ0RIOworKwkJU0hBNTEyX1VwZGF0ZTsKKysJCWkyZF9FQ1ByaXZhdGVLZXk7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMTkyOworKwkJU1RPUkVfbW9kaWZ5X2NlcnRpZmljYXRlOworKwkJRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtOworKwkJRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZHNfR0YybTsKKysJCUJOX0dGMm1fbW9kX2V4cF9hcnI7CisrCQlTVE9SRV9BVFRSX0lORk9fbW9kaWZ5X251bWJlcjsKKysJCVg1MDlfa2V5aWRfZ2V0MDsKKysJCUVOR0lORV9sb2FkX2dtcDsKKysJCXBpdGVtX25ldzsKKysJCUJOX0dGMm1fbW9kX211bF9hcnI7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfZW5kcDsKKysJCW8yaV9FQ1B1YmxpY0tleTsKKysJCUVDX0tFWV9jb3B5OworKwkJQklPX2R1bXBfZnA7CisrCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcGFyZW50OworKwkJRUNfR1JPVVBfY2hlY2tfZGlzY3JpbWluYW50OworKwkJaTJvX0VDUHVibGljS2V5OworKwkJRUNfS0VZX3ByZWNvbXB1dGVfbXVsdDsKKysJCWEyaV9JUEFERFJFU1M7CisrCQlTVE9SRV9tZXRoX3NldF9pbml0aWFsaXNlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9pbml0aWFsaXNlX2Z1bmN0aW9uOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2RlcHRoOworKwkJWDUwOV9WRVJJRllfUEFSQU1faW5oZXJpdDsKKysJCUVDX1BPSU5UX3BvaW50MmJuOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9kbjsKKysJCVg1MDlfcG9saWN5X3RyZWVfZ2V0MF9wb2xpY2llczsKKysJCUVDX0dST1VQX25ld19jdXJ2ZV9HRjJtOworKwkJU1RPUkVfZGVzdHJveV9tZXRob2Q7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9TVE9SRTsKKysJCUVWUF9QS0VZX2dldDFfRUNfS0VZOworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfbnVtYmVyOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0VDREg7CisrCQlFQ19LRVlfZ2V0X2NvbnZfZm9ybTsKKysJCUFTTjFfT0NURVRfU1RSSU5HX05ERUZfaXQ7CisrCQlTVE9SRV9kZWxldGVfcHVibGljX2tleTsKKysJCVNUT1JFX2dldF9wdWJsaWNfa2V5OworKwkJU1RPUkVfbW9kaWZ5X2FyYml0cmFyeTsKKysJCUVOR0lORV9nZXRfc3RhdGljX3N0YXRlOworKwkJcHF1ZXVlX2l0ZXJhdG9yOworKwkJRUNEU0FfU0lHX25ldzsKKysJCU9QRU5TU0xfRElSX2VuZDsKKysJCUJOX0dGMm1fbW9kX3NxcjsKKysJCUVDX1BPSU5UX2JuMnBvaW50OworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X2RlcHRoOworKwkJRUNfS0VZX3NldF9hc24xX2ZsYWc7CisrCQlTVE9SRV9nZXRfbWV0aG9kOworKwkJRUNfS0VZX2dldF9rZXlfbWV0aG9kX2RhdGE7CisrCQlFQ0RTQV9zaWduX2V4OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfZW5kOworKwkJRUNfR1JPVVBfZ2V0X3BvaW50X2NvbnZlcnNpb25fZm9ybTsKKysJCUVDX0dST1VQX2dldF9wb2ludF9jb252X2Zvcm07CisrCQlTVE9SRV9tZXRob2Rfc2V0X3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfQVRUUl9JTkZPX2luOworKwkJUEVNX3JlYWRfYmlvX0VDUEtQYXJhbWV0ZXJzOworKwkJRUNfR1JPVVBfZ2V0X3BlbnRhbm9taWFsX2Jhc2lzOworKwkJRVZQX1BLRVlfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUJOX0JMSU5ESU5HX3NldF9mbGFnczsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfcG9saWNpZXM7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX25hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfcHVycG9zZTsKKysJCVNUT1JFX2dldF9udW1iZXI7CisrCQlFQ0RTQV9zaWduX3NldHVwOworKwkJQk5fR0YybV9tb2Rfc29sdmVfcXVhZF9hcnI7CisrCQlFQ19LRVlfdXBfcmVmOworKwkJUE9MSUNZX01BUFBJTkdfZnJlZTsKKysJCUJOX0dGMm1fbW9kX2RpdjsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9mbGFnczsKKysJCUVDX0tFWV9mcmVlOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9uZXh0X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X25leHRfZnVuY3Rpb247CisrCQlQRU1fd3JpdGVfYmlvX0VDUHJpdmF0ZUtleTsKKysJCWQyaV9FQ19QVUJLRVk7CisrCQlTVE9SRV9tZXRoX2dldF9nZW5lcmF0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfZ2VuZXJhdGVfZnVuY3Rpb247CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X2VuZF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9lbmRfZnVuY3Rpb247CisrCQlwcXVldWVfcHJpbnQ7CisrCQlFQ19HUk9VUF9oYXZlX3ByZWNvbXB1dGVfbXVsdDsKKysJCUVDX0tFWV9wcmludF9mcDsKKysJCUJOX0dGMm1fbW9kX2FycjsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9DRVJUX1BBSVI7CisrCQlFVlBfUEtFWV9jbXA7CisrCQlYNTA5X3BvbGljeV9sZXZlbF9ub2RlX2NvdW50OworKwkJU1RPUkVfbmV3X2VuZ2luZTsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9zdGFydDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX25ldzsKKysJCUVDREhfZ2V0X2V4X2RhdGE7CisrCQlFVlBfUEtFWV9nZXRfYXR0cjsKKysJCUVDRFNBX2RvX3NpZ247CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9FQ0RIOworKwkJRUNESF9PcGVuU1NMOworKwkJRUNfS0VZX3NldF9jb252X2Zvcm07CisrCQlFQ19QT0lOVF9kdXA7CisrCQlHRU5FUkFMX1NVQlRSRUVfbmV3OworKwkJU1RPUkVfbGlzdF9jcmxfZW5kcDsKKysJCUVDX2dldF9idWlsdGluX2N1cnZlczsKKysJCVg1MDlfcG9saWN5X25vZGVfZ2V0MF9xdWFsaWZpZXJzOworKwkJWDUwOV9wY3lfbm9kZV9nZXQwX3F1YWxpZmllcnM7CisrCQlTVE9SRV9saXN0X2NybF9lbmQ7CisrCQlFVlBfUEtFWV9zZXQxX0VDX0tFWTsKKysJCUJOX0dGMm1fbW9kX3NxcnRfYXJyOworKwkJaTJkX0VDUHJpdmF0ZUtleV9iaW87CisrCQlFQ1BLUGFyYW1ldGVyc19wcmludF9mcDsKKysJCXBxdWV1ZV9maW5kOworKwkJRUNEU0FfU0lHX2ZyZWU7CisrCQlQRU1fd3JpdGVfYmlvX0VDUEtQYXJhbWV0ZXJzOworKwkJU1RPUkVfbWV0aG9kX3NldF9jdHJsX2Z1bmN0aW9uOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X2VuZDsKKysJCUVDX0tFWV9zZXRfcHJpdmF0ZV9rZXk7CisrCQlwcXVldWVfcGVlazsKKysJCVNUT1JFX2dldF9hcmJpdHJhcnk7CisrCQlTVE9SRV9zdG9yZV9jcmw7CisrCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcG9saWN5OworKwkJUEtDUzEyX2FkZF9zYWZlczsKKysJCUJOX0JMSU5ESU5HX2NvbnZlcnRfZXg7CisrCQlYNTA5X3BvbGljeV90cmVlX2ZyZWU7CisrCQlPUEVOU1NMX2lhMzJjYXBfbG9jOworKwkJQk5fR0YybV9wb2x5MmFycjsKKysJCVNUT1JFX2N0cmw7CisrCQlTVE9SRV9BVFRSX0lORk9fY29tcGFyZTsKKysJCUJOX2dldDBfbmlzdF9wcmltZV8yMjQ7CisrCQlpMmRfRUNQYXJhbWV0ZXJzOworKwkJaTJkX0VDUEtQYXJhbWV0ZXJzOworKwkJQk5fR0VOQ0JfY2FsbDsKKysJCWQyaV9FQ1BLUGFyYW1ldGVyczsKKysJCVNUT1JFX21ldGhfc2V0X2dlbmVyYXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9nZW5lcmF0ZV9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfRUNESDsKKysJCU5BTUVfQ09OU1RSQUlOVFNfbmV3OworKwkJU0hBMjU2X0luaXQ7CisrCQlFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5OworKwkJUEVNX3dyaXRlX2Jpb19FQ19QVUJLRVk7CisrCQlTVE9SRV9BVFRSX0lORk9fc2V0X2NzdHI7CisrCQlTVE9SRV9saXN0X2NybF9uZXh0OworKwkJU1RPUkVfQVRUUl9JTkZPX2luX3JhbmdlOworKwkJRUNQYXJhbWV0ZXJzX3ByaW50OworKwkJU1RPUkVfbWV0aF9zZXRfZGVsZXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9kZWxldGVfZnVuY3Rpb247CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX25leHQ7CisrCQlBU04xX2dlbmVyYXRlX25jb25mOworKwkJQlVGX21lbWR1cDsKKysJCUJOX0dGMm1fbW9kX211bDsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3RfbmV4dF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9uZXh0X2Z1bmN0aW9uOworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfZG47CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X25leHQ7CisrCQlFQ19HUk9VUF9zZXRfc2VlZDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF90cnVzdDsKKysJCVNUT1JFX0FUVFJfSU5GT19mcmVlOworKwkJU1RPUkVfZ2V0X3ByaXZhdGVfa2V5OworKwkJRVZQX1BLRVlfZ2V0X2F0dHJfY291bnQ7CisrCQlTVE9SRV9BVFRSX0lORk9fbmV3OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX0dGMm07CisrCQlTVE9SRV9tZXRoX3NldF9yZXZva2VfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X3Jldm9rZV9mdW5jdGlvbjsKKysJCVNUT1JFX3N0b3JlX251bWJlcjsKKysJCUJOX2lzX3ByaW1lX2V4OworKwkJU1RPUkVfcmV2b2tlX3B1YmxpY19rZXk7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmFtOworKwkJU1RPUkVfZGVsZXRlX2FyYml0cmFyeTsKKysJCVBFTV9yZWFkX1g1MDlfQ0VSVF9QQUlSOworKwkJWDUwOV9TVE9SRV9zZXRfZGVwdGg7CisrCQlFQ0RTQV9nZXRfZXhfZGF0YTsKKysJCVNIQTIyNDsKKysJCUJJT19kdW1wX2luZGVudF9mcDsKKysJCUVDX0tFWV9zZXRfZ3JvdXA7CisrCQlCVUZfc3RybmR1cDsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfc3RhcnQ7CisrCQlCTl9HRjJtX21vZDsKKysJCVg1MDlfUkVRX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJRUNfR1JPVVBfZ2V0X3NlZWRfbGVuOworKwkJRVJSX2xvYWRfU1RPUkVfc3RyaW5nczsKKysJCVBFTV9yZWFkX2Jpb19FQ19QVUJLRVk7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X2VuZDsKKysJCWkyZF9FQ19QVUJLRVk7CisrCQlFQ0RTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlBU04xX3B1dF9lb2M7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhwbGljaXRfcG9saWN5OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4cGxfcG9saWN5OworKwkJWDUwOV9WRVJJRllfUEFSQU1fdGFibGVfY2xlYW51cDsKKysJCVNUT1JFX21vZGlmeV9wcml2YXRlX2tleTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2ZyZWU7CisrCQlFQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGU7CisrCQlFQ19HRnBfbmlzdF9tZXRob2Q7CisrCQlTVE9SRV9tZXRoX3NldF9tb2RpZnlfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X21vZGlmeV9mdW5jdGlvbjsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX25leHQ7CisrCQlFTkdJTkVfbG9hZF9wYWRsb2NrOworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX25hbWU7CisrCQlYNTA5X0NFUlRfUEFJUl9pdDsKKysJCVNUT1JFX21ldGhfZ2V0X3Jldm9rZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfcmV2b2tlX2Z1bmN0aW9uOworKwkJU1RPUkVfbWV0aG9kX3NldF9nZXRfZnVuY3Rpb247CisrCQlTVE9SRV9tb2RpZnlfbnVtYmVyOworKwkJU1RPUkVfbWV0aG9kX2dldF9zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX3N0b3JlX3ByaXZhdGVfa2V5OworKwkJQk5fR0YybV9tb2Rfc3FyX2FycjsKKysJCVJTQV9zZXR1cF9ibGluZGluZzsKKysJCUJJT19zX2RhdGFncmFtOworKwkJU1RPUkVfTWVtb3J5OworKwkJc2tfZmluZF9leDsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9HRjJtOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0VDRFNBOworKwkJUE9MSUNZX0NPTlNUUkFJTlRTX25ldzsKKysJCUJOX0dGMm1fbW9kX3NxcnQ7CisrCQlFQ0RIX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVDX0tFWV9nZW5lcmF0ZV9rZXk7CisrCQlTSEEzODRfVXBkYXRlOworKwkJQk5fR0YybV9hcnIycG9seTsKKysJCVNUT1JFX21ldGhvZF9nZXRfZ2V0X2Z1bmN0aW9uOworKwkJU1RPUkVfbWV0aF9zZXRfY2xlYW51cF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfY2xlYW51cF9mdW5jdGlvbjsKKysJCUVDX0dST1VQX2NoZWNrOworKwkJZDJpX0VDUHJpdmF0ZUtleV9iaW87CisrCQlFQ19LRVlfaW5zZXJ0X2tleV9tZXRob2RfZGF0YTsKKysJCVNUT1JFX21ldGhfZ2V0X2xvY2tfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xvY2tfc3RvcmVfZnVuY3Rpb247CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZGVwdGg7CisrCQlTSEEyMjRfRmluYWw7CisrCQlTVE9SRV9tZXRoX3NldF91cGRhdGVfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X3VwZGF0ZV9zdG9yZV9mdW5jdGlvbjsKKysJCVNIQTIyNF9VcGRhdGU7CisrCQlkMmlfRUNQcml2YXRlS2V5OworKwkJQVNOMV9pdGVtX25kZWZfaTJkOworKwkJU1RPUkVfZGVsZXRlX3ByaXZhdGVfa2V5OworKwkJRVJSX3BvcF90b19tYXJrOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9TVE9SRTsKKysJCVg1MDlfcG9saWN5X2xldmVsX2dldDBfbm9kZTsKKysJCWkyZF9QS0NTN19OREVGOworKwkJRUNfR1JPVVBfZ2V0X2RlZ3JlZTsKKysJCUFTTjFfZ2VuZXJhdGVfdjM7CisrCQlTVE9SRV9BVFRSX0lORk9fbW9kaWZ5X2NzdHI7CisrCQlYNTA5X3BvbGljeV90cmVlX2xldmVsX2NvdW50OworKwkJQk5fR0YybV9hZGQ7CisrCQlFQ19LRVlfZ2V0MF9ncm91cDsKKysJCVNUT1JFX2dlbmVyYXRlX2NybDsKKysJCVNUT1JFX3N0b3JlX3B1YmxpY19rZXk7CisrCQlYNTA5X0NFUlRfUEFJUl9mcmVlOworKwkJU1RPUkVfcmV2b2tlX3ByaXZhdGVfa2V5OworKwkJQk5fbmlzdF9tb2RfMjI0OworKwkJU0hBNTEyX0ZpbmFsOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9kbjsKKysJCVNUT1JFX21ldGhfZ2V0X2luaXRpYWxpc2VfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2luaXRpYWxpc2VfZnVuY3Rpb247CisrCQlTVE9SRV9kZWxldGVfbnVtYmVyOworKwkJaTJkX0VDX1BVQktFWV9iaW87CisrCQlCSU9fZGdyYW1fbm9uX2ZhdGFsX2Vycm9yOworKwkJRUNfR1JPVVBfZ2V0X2FzbjFfZmxhZzsKKysJCVNUT1JFX0FUVFJfSU5GT19pbl9leDsKKysJCVNUT1JFX2xpc3RfY3JsX3N0YXJ0OworKwkJRUNESF9nZXRfZXhfbmV3X2luZGV4OworKwkJU1RPUkVfbWV0aF9nZXRfbW9kaWZ5X2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9tb2RpZnlfZnVuY3Rpb247CisrCQl2MmlfQVNOMV9CSVRfU1RSSU5HOworKwkJU1RPUkVfc3RvcmVfY2VydGlmaWNhdGU7CisrCQlPQkpfYnNlYXJjaF9leDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9kZWZhdWx0OworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9zaGExc3RyOworKwkJQk5fR0YybV9tb2RfaW52OworKwkJQk5fR0YybV9tb2RfZXhwOworKwkJU1RPUkVfbW9kaWZ5X3B1YmxpY19rZXk7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X3N0YXJ0X2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X3N0YXJ0X2Z1bmN0aW9uOworKwkJRUNfR1JPVVBfZ2V0MF9zZWVkOworKwkJU1RPUkVfc3RvcmVfYXJiaXRyYXJ5OworKwkJU1RPUkVfbWV0aF9zZXRfdW5sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF91bmxvY2tfc3RvcmVfZnVuY3Rpb247CisrCQlCTl9HRjJtX21vZF9kaXZfYXJyOworKwkJRU5HSU5FX3NldF9FQ0RTQTsKKysJCVNUT1JFX2NyZWF0ZV9tZXRob2Q7CisrCQlFQ1BLUGFyYW1ldGVyc19wcmludDsKKysJCUVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5OworKwkJUEVNX3dyaXRlX0VDX1BVQktFWTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDE7CisrCQlFQ0RIX3NldF9tZXRob2Q7CisrCQl2MmlfR0VORVJBTF9OQU1FX2V4OworKwkJRUNESF9zZXRfZXhfZGF0YTsKKysJCVNUT1JFX2dlbmVyYXRlX2tleTsKKysJCUJOX25pc3RfbW9kXzUyMTsKKysJCVg1MDlfcG9saWN5X3RyZWVfZ2V0MF9sZXZlbDsKKysJCUVDX0dST1VQX3NldF9wb2ludF9jb252ZXJzaW9uX2Zvcm07CisrCQlFQ19HUk9VUF9zZXRfcG9pbnRfY29udl9mb3JtOworKwkJUEVNX3JlYWRfRUNfUFVCS0VZOworKwkJaTJkX0VDRFNBX1NJRzsKKysJCUVDRFNBX09wZW5TU0w7CisrCQlTVE9SRV9kZWxldGVfY3JsOworKwkJRUNfS0VZX2dldF9lbmNfZmxhZ3M7CisrCQlBU04xX2NvbnN0X2NoZWNrX2luZmluaXRlX2VuZDsKKysJCUVWUF9QS0VZX2RlbGV0ZV9hdHRyOworKwkJRUNEU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0YybTsKKysJCUVDX1BPSU5UX3NldF9jb21wcl9jb29yZHNfR0YybTsKKysJCUVDX0dST1VQX2NtcDsKKysJCVNUT1JFX3Jldm9rZV9jZXJ0aWZpY2F0ZTsKKysJCUJOX2dldDBfbmlzdF9wcmltZV8yNTY7CisrCQlTVE9SRV9tZXRoX2dldF9kZWxldGVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2RlbGV0ZV9mdW5jdGlvbjsKKysJCVNIQTIyNF9Jbml0OworKwkJUEVNX3JlYWRfRUNQcml2YXRlS2V5OworKwkJU0hBNTEyX0luaXQ7CisrCQlTVE9SRV9wYXJzZV9hdHRyc19lbmRwOworKwkJQk5fc2V0X25lZ2F0aXZlOworKwkJRVJSX2xvYWRfRUNEU0Ffc3RyaW5nczsKKysJCUVDX0dST1VQX2dldF9iYXNpc190eXBlOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X25leHQ7CisrCQlpMnZfQVNOMV9CSVRfU1RSSU5HOworKwkJU1RPUkVfT0JKRUNUX2ZyZWU7CisrCQlCTl9uaXN0X21vZF8zODQ7CisrCQlpMmRfWDUwOV9DRVJUX1BBSVI7CisrCQlQRU1fd3JpdGVfRUNQS1BhcmFtZXRlcnM7CisrCQlFQ0RIX2NvbXB1dGVfa2V5OworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfc2hhMXN0cjsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRUNESDsKKysJCXBxdWV1ZV9wb3A7CisrCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9jc3RyOworKwkJUE9MSUNZX0NPTlNUUkFJTlRTX2l0OworKwkJU1RPUkVfZ2V0X2V4X25ld19pbmRleDsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2J5X09CSjsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2FkZDBfcG9saWN5OworKwkJQk5fR0YybV9tb2Rfc29sdmVfcXVhZDsKKysJCVNIQTI1NjsKKysJCWkyZF9FQ1ByaXZhdGVLZXlfZnA7CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfdXNlcl9wb2xpY2llczsKKysJCVg1MDlfcGN5X3RyZWVfZ2V0MF91c3JfcG9saWNpZXM7CisrCQlPUEVOU1NMX0RJUl9yZWFkOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9FQ0RTQTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2xvb2t1cDsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybTsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRzX0dGMm07CisrCQlFQ19HUk9VUF9kdXA7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfRUNEU0E7CisrCQlFQ19LRVlfbmV3OworKwkJU0hBMjU2X1RyYW5zZm9ybTsKKysJCUVDX0tFWV9zZXRfZW5jX2ZsYWdzOworKwkJRUNEU0FfdmVyaWZ5OworKwkJRUNfUE9JTlRfcG9pbnQyaGV4OworKwkJRU5HSU5FX2dldF9TVE9SRTsKKysJCVNIQTUxMjsKKysJCVNUT1JFX2dldF9jZXJ0aWZpY2F0ZTsKKysJCUVDRFNBX2RvX3NpZ25fZXg7CisrCQlFQ0RTQV9kb192ZXJpZnk7CisrCQlkMmlfRUNQcml2YXRlS2V5X2ZwOworKwkJU1RPUkVfZGVsZXRlX2NlcnRpZmljYXRlOworKwkJU0hBNTEyX1RyYW5zZm9ybTsKKysJCVg1MDlfU1RPUkVfc2V0MV9wYXJhbTsKKysJCVNUT1JFX21ldGhvZF9nZXRfY3RybF9mdW5jdGlvbjsKKysJCVNUT1JFX2ZyZWU7CisrCQlQRU1fd3JpdGVfRUNQcml2YXRlS2V5OworKwkJU1RPUkVfbWV0aF9nZXRfdW5sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF91bmxvY2tfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9nZXRfZXhfZGF0YTsKKysJCUVDX0tFWV9zZXRfcHVibGljX2tleTsKKysJCVBFTV9yZWFkX0VDUEtQYXJhbWV0ZXJzOworKwkJWDUwOV9DRVJUX1BBSVJfbmV3OworKwkJRU5HSU5FX3JlZ2lzdGVyX1NUT1JFOworKwkJUlNBX2dlbmVyYXRlX2tleV9leDsKKysJCURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4OworKwkJRUNQYXJhbWV0ZXJzX3ByaW50X2ZwOworKwkJWDUwOVYzX05BTUVfZnJvbV9zZWN0aW9uOworKwkJRVZQX1BLRVlfYWRkMV9hdHRyOworKwkJU1RPUkVfbW9kaWZ5X2NybDsKKysJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfc3RhcnQ7CisrCQlQT0xJQ1lfTUFQUElOR1NfaXQ7CisrCQlHRU5FUkFMX1NVQlRSRUVfaXQ7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfbmFtZTsKKysJCVBFTV93cml0ZV9YNTA5X0NFUlRfUEFJUjsKKysJCUJJT19kdW1wX2luZGVudF9jYjsKKysJCWQyaV9YNTA5X0NFUlRfUEFJUjsKKysJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfZW5kcDsKKysJCWFzbjFfY29uc3RfRmluaXNoOworKwkJaTJkX0VDX1BVQktFWV9mcDsKKysJCUJOX25pc3RfbW9kXzI1NjsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2FkZDBfdGFibGU7CisrCQlwcXVldWVfZnJlZTsKKysJCUJOX0JMSU5ESU5HX2NyZWF0ZV9wYXJhbTsKKysJCUVDRFNBX3NpemU7CisrCQlkMmlfRUNfUFVCS0VZX2JpbzsKKysJCUJOX2dldDBfbmlzdF9wcmltZV81MjE7CisrCQlTVE9SRV9BVFRSX0lORk9fbW9kaWZ5X3NoYTFzdHI7CisrCQlCTl9nZW5lcmF0ZV9wcmltZV9leDsKKysJCUVDX0dST1VQX25ld19ieV9jdXJ2ZV9uYW1lOworKwkJU0hBMjU2X0ZpbmFsOworKwkJREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leDsKKysJCVBFTV9yZWFkX2Jpb19FQ1ByaXZhdGVLZXk7CisrCQlTVE9SRV9tZXRoX2dldF9jbGVhbnVwX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9jbGVhbnVwX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9FQ0RIOworKwkJZDJpX0VDRFNBX1NJRzsKKysJCUJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4OworKwkJRUNEU0Ffc2lnbjsKKysJCVg1MDlfcG9saWN5X2NoZWNrOworKwkJRVZQX1BLRVlfZ2V0X2F0dHJfYnlfTklEOworKwkJU1RPUkVfc2V0X2V4X2RhdGE7CisrCQlFTkdJTkVfZ2V0X0VDRFNBOworKwkJRVZQX2VjZHNhOworKwkJQk5fQkxJTkRJTkdfZ2V0X2ZsYWdzOworKwkJUEtDUzEyX2FkZF9jZXJ0OworKwkJU1RPUkVfT0JKRUNUX25ldzsKKysJCUVSUl9sb2FkX0VDREhfc3RyaW5nczsKKysJCUVDX0tFWV9kdXA7CisrCQlFVlBfQ0lQSEVSX0NUWF9yYW5kX2tleTsKKysJCUVDRFNBX3NldF9tZXRob2Q7CisrCQlhMmlfSVBBRERSRVNTX05DOworKwkJZDJpX0VDUGFyYW1ldGVyczsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kOworKwkJU1RPUkVfZ2V0X2NybDsKKysJCVg1MDlfUE9MSUNZX05PREVfcHJpbnQ7CisrCQlTSEEzODRfSW5pdDsKKysJCUVDX0dGMm1fc2ltcGxlX21ldGhvZDsKKysJCUVDRFNBX3NldF9leF9kYXRhOworKwkJU0hBMzg0X0ZpbmFsOworKwkJUEtDUzdfc2V0X2RpZ2VzdDsKKysJCUVDX0tFWV9wcmludDsKKysJCVNUT1JFX21ldGhfc2V0X2xvY2tfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xvY2tfc3RvcmVfZnVuY3Rpb247CisrCQlFQ0RTQV9nZXRfZXhfbmV3X2luZGV4OworKwkJU0hBMzg0OworKwkJUE9MSUNZX01BUFBJTkdfbmV3OworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9lbmRwOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wb2xpY3lfdHJlZTsKKysJCUVDX0dST1VQX3NldF9hc24xX2ZsYWc7CisrCQlFQ19LRVlfY2hlY2tfa2V5OworKwkJZDJpX0VDX1BVQktFWV9mcDsKKysJCVBLQ1M3X3NldDBfdHlwZV9vdGhlcjsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0NFUlRfUEFJUjsKKysJCXBxdWV1ZV9uZXh0OworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9lbmRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3RfZW5kX2Z1bmN0aW9uOworKwkJRVZQX1BLRVlfYWRkMV9hdHRyX2J5X09CSjsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF90aW1lOworKwkJcHF1ZXVlX25ldzsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9FQ0RIOworKwkJU1RPUkVfbmV3X21ldGhvZDsKKysJCVBLQ1MxMl9hZGRfa2V5OworKwkJRFNPX21lcmdlOworKwkJRUNfUE9JTlRfaGV4MnBvaW50OworKwkJQklPX2R1bXBfY2I7CisrCQlTSEEyNTZfVXBkYXRlOworKwkJcHF1ZXVlX2luc2VydDsKKysJCXBpdGVtX2ZyZWU7CisrCQlCTl9HRjJtX21vZF9pbnZfYXJyOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRUNEU0E7CisrCQlCTl9CTElORElOR19zZXRfdGhyZWFkX2lkOworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfODE5MjsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2NsZWFyX2ZsYWdzOworKwkJZ2V0X3JmYzI0MDlfcHJpbWVfMTAyNDsKKysJCURIX2NoZWNrX3B1Yl9rZXk7CisrCQlnZXRfcmZjMzUyNl9wcmltZV8yMDQ4OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfNjE0NDsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzE1MzY7CisrCQlnZXRfcmZjMzUyNl9wcmltZV8zMDcyOworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfNDA5NjsKKysJCWdldF9yZmMyNDA5X3ByaW1lXzc2ODsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFnczsKKysJCUVWUF9DSVBIRVJfQ1RYX25ldzsKKysJCUVWUF9DSVBIRVJfQ1RYX2ZyZWU7CisrCQlDYW1lbGxpYV9jYmNfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2ZiMV9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2ZiOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY3RyMTI4X2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmJyX2VuY3J5cHRfYmxvY2s7CisrCQlDYW1lbGxpYV9kZWNyeXB0OworKwkJQ2FtZWxsaWFfZWNiX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9lbmNyeXB0OworKwkJQ2FtZWxsaWFfb2ZiMTI4X2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9zZXRfa2V5OworKwkJRVZQX2NhbWVsbGlhXzEyOF9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8xMjhfZWNiOworKwkJRVZQX2NhbWVsbGlhXzEyOF9vZmI7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NiYzsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzE5Ml9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMTkyX29mYjsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2JjOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2VjYjsKKysJCUVWUF9jYW1lbGxpYV8yNTZfb2ZiOworKwkJYTJpX2lwYWRkOworKwkJQVNJZGVudGlmaWVyc19mcmVlOworKwkJaTJkX0FTSWRPclJhbmdlOworKwkJRVZQX0NJUEhFUl9ibG9ja19zaXplOworKwkJdjNfYXNpZF9pc19jYW5vbmljYWw7CisrCQlJUEFkZHJlc3NDaG9pY2VfZnJlZTsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YTsKKysJCUJJT19zZXRfY2FsbGJhY2tfYXJnOworKwkJdjNfYWRkcl9hZGRfcHJlZml4OworKwkJSVBBZGRyZXNzT3JSYW5nZV9pdDsKKysJCUJJT19zZXRfZmxhZ3M7CisrCQlBU0lkZW50aWZpZXJzX2l0OworKwkJdjNfYWRkcl9nZXRfcmFuZ2U7CisrCQlCSU9fbWV0aG9kX3R5cGU7CisrCQl2M19hZGRyX2luaGVyaXRzOworKwkJSVBBZGRyZXNzQ2hvaWNlX2l0OworKwkJQUVTX2lnZV9lbmNyeXB0OworKwkJdjNfYWRkcl9hZGRfcmFuZ2U7CisrCQlFVlBfQ0lQSEVSX0NUWF9uaWQ7CisrCQlkMmlfQVNSYW5nZTsKKysJCXYzX2FkZHJfYWRkX2luaGVyaXQ7CisrCQl2M19hc2lkX2FkZF9pZF9vcl9yYW5nZTsKKysJCXYzX2FkZHJfdmFsaWRhdGVfcmVzb3VyY2Vfc2V0OworKwkJRVZQX0NJUEhFUl9pdl9sZW5ndGg7CisrCQlFVlBfTURfdHlwZTsKKysJCXYzX2FzaWRfY2Fub25pemU7CisrCQlJUEFkZHJlc3NSYW5nZV9mcmVlOworKwkJdjNfYXNpZF9hZGRfaW5oZXJpdDsKKysJCUVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGg7CisrCQlJUEFkZHJlc3NSYW5nZV9uZXc7CisrCQlBU0lkT3JSYW5nZV9uZXc7CisrCQlFVlBfTURfc2l6ZTsKKysJCUVWUF9NRF9DVFhfdGVzdF9mbGFnczsKKysJCUJJT19jbGVhcl9mbGFnczsKKysJCWkyZF9BU1JhbmdlOworKwkJSVBBZGRyZXNzUmFuZ2VfaXQ7CisrCQlJUEFkZHJlc3NDaG9pY2VfbmV3OworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX25ldzsKKysJCUFTUmFuZ2VfZnJlZTsKKysJCUVWUF9NRF9wa2V5X3R5cGU7CisrCQlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdzOworKwkJSVBBZGRyZXNzRmFtaWx5X2ZyZWU7CisrCQlpMmRfSVBBZGRyZXNzRmFtaWx5OworKwkJSVBBZGRyZXNzT3JSYW5nZV9uZXc7CisrCQlFVlBfQ0lQSEVSX2ZsYWdzOworKwkJdjNfYXNpZF92YWxpZGF0ZV9yZXNvdXJjZV9zZXQ7CisrCQlkMmlfSVBBZGRyZXNzUmFuZ2U7CisrCQlBRVNfYmlfaWdlX2VuY3J5cHQ7CisrCQlCSU9fZ2V0X2NhbGxiYWNrOworKwkJSVBBZGRyZXNzT3JSYW5nZV9mcmVlOworKwkJdjNfYWRkcl9zdWJzZXQ7CisrCQlkMmlfSVBBZGRyZXNzRmFtaWx5OworKwkJdjNfYXNpZF9zdWJzZXQ7CisrCQlCSU9fdGVzdF9mbGFnczsKKysJCWkyZF9BU0lkZW50aWZpZXJDaG9pY2U7CisrCQlBU1JhbmdlX2l0OworKwkJZDJpX0FTSWRlbnRpZmllcnM7CisrCQlBU1JhbmdlX25ldzsKKysJCWQyaV9JUEFkZHJlc3NDaG9pY2U7CisrCQl2M19hZGRyX2dldF9hZmk7CisrCQlFVlBfQ0lQSEVSX2tleV9sZW5ndGg7CisrCQlFVlBfQ2lwaGVyOworKwkJaTJkX0lQQWRkcmVzc09yUmFuZ2U7CisrCQlBU0lkT3JSYW5nZV9pdDsKKysJCUVWUF9DSVBIRVJfbmlkOworKwkJaTJkX0lQQWRkcmVzc0Nob2ljZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemU7CisrCQlBU0lkZW50aWZpZXJzX25ldzsKKysJCXYzX2FkZHJfdmFsaWRhdGVfcGF0aDsKKysJCUlQQWRkcmVzc0ZhbWlseV9uZXc7CisrCQlFVlBfTURfQ1RYX3NldF9mbGFnczsKKysJCXYzX2FkZHJfaXNfY2Fub25pY2FsOworKwkJaTJkX0lQQWRkcmVzc1JhbmdlOworKwkJSVBBZGRyZXNzRmFtaWx5X2l0OworKwkJdjNfYXNpZF9pbmhlcml0czsKKysJCUVWUF9DSVBIRVJfQ1RYX2NpcGhlcjsKKysJCUVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YTsKKysJCUVWUF9NRF9ibG9ja19zaXplOworKwkJRVZQX0NJUEhFUl9DVFhfZmxhZ3M7CisrCQl2M19hc2lkX3ZhbGlkYXRlX3BhdGg7CisrCQlkMmlfSVBBZGRyZXNzT3JSYW5nZTsKKysJCXYzX2FkZHJfY2Fub25pemU7CisrCQlBU0lkZW50aWZpZXJDaG9pY2VfaXQ7CisrCQlFVlBfTURfQ1RYX21kOworKwkJZDJpX0FTSWRlbnRpZmllckNob2ljZTsKKysJCUJJT19tZXRob2RfbmFtZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aDsKKysJCUFTSWRPclJhbmdlX2ZyZWU7CisrCQlBU0lkZW50aWZpZXJDaG9pY2VfZnJlZTsKKysJCUJJT19nZXRfY2FsbGJhY2tfYXJnOworKwkJQklPX3NldF9jYWxsYmFjazsKKysJCWQyaV9BU0lkT3JSYW5nZTsKKysJCWkyZF9BU0lkZW50aWZpZXJzOworKwkJU0VFRF9kZWNyeXB0OworKwkJU0VFRF9lbmNyeXB0OworKwkJU0VFRF9jYmNfZW5jcnlwdDsKKysJCUVWUF9zZWVkX29mYjsKKysJCVNFRURfY2ZiMTI4X2VuY3J5cHQ7CisrCQlTRUVEX29mYjEyOF9lbmNyeXB0OworKwkJRVZQX3NlZWRfY2JjOworKwkJU0VFRF9lY2JfZW5jcnlwdDsKKysJCUVWUF9zZWVkX2VjYjsKKysJCVNFRURfc2V0X2tleTsKKysJCUVWUF9zZWVkX2NmYjEyODsKKysJCVg1MDlfRVhURU5TSU9OU19pdDsKKysJCVg1MDlfZ2V0MV9vY3NwOworKwkJT0NTUF9SRVFfQ1RYX2ZyZWU7CisrCQlpMmRfWDUwOV9FWFRFTlNJT05TOworKwkJT0NTUF9zZW5kcmVxX25iaW87CisrCQlPQ1NQX3NlbmRyZXFfbmV3OworKwkJZDJpX1g1MDlfRVhURU5TSU9OUzsKKysJCVg1MDlfQUxHT1JTX2l0OworKwkJWDUwOV9BTEdPUl9nZXQwOworKwkJWDUwOV9BTEdPUl9zZXQwOworKwkJQUVTX3Vud3JhcF9rZXk7CisrCQlBRVNfd3JhcF9rZXk7CisrCQlYNTA5YXRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCUFTTjFfVFlQRV9zZXQxOworKwkJQVNOMV9TVFJJTkdfc2V0MDsKKysJCWkyZF9YNTA5X0FMR09SUzsKKysJCUJJT19mX3psaWI7CisrCQlDT01QX3psaWJfY2xlYW51cDsKKysJCWQyaV9YNTA5X0FMR09SUzsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9mcmVlOworKwkJUEVNX3dyaXRlX0NNUzsKKysJCUNNU19hZGQwX0NlcnRpZmljYXRlQ2hvaWNlczsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfT0JKOworKwkJRVJSX2xvYWRfQ01TX3N0cmluZ3M7CisrCQlDTVNfc2lnbl9yZWNlaXB0OworKwkJaTJkX0NNU19Db250ZW50SW5mbzsKKysJCUNNU19zaWduZWRfZGVsZXRlX2F0dHI7CisrCQlkMmlfQ01TX2JpbzsKKysJCUNNU191bnNpZ25lZF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdmVyaWZ5OworKwkJU01JTUVfcmVhZF9DTVM7CisrCQlDTVNfZGVjcnlwdF9zZXQxX2tleTsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfYWxnczsKKysJCUNNU19hZGQxX2NlcnQ7CisrCQlDTVNfc2V0X2RldGFjaGVkOworKwkJQ01TX2VuY3J5cHQ7CisrCQlDTVNfRW52ZWxvcGVkRGF0YV9jcmVhdGU7CisrCQlDTVNfdW5jb21wcmVzczsKKysJCUNNU19hZGQwX2NybDsKKysJCUNNU19TaWduZXJJbmZvX3ZlcmlmeV9jb250ZW50OworKwkJQ01TX3Vuc2lnbmVkX2dldDBfZGF0YV9ieV9PQko7CisrCQlQRU1fd3JpdGVfYmlvX0NNUzsKKysJCUNNU191bnNpZ25lZF9nZXRfYXR0cjsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfY2VydF9jbXA7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2dldDBfYWxnczsKKysJCUNNU19SZWNpcEluZm9fa3RyaV9nZXQwX2FsZ3M7CisrCQlDTVNfQ29udGVudEluZm9fZnJlZTsKKysJCUNNU19maW5hbDsKKysJCUNNU19hZGRfc2ltcGxlX3NtaW1lY2FwOworKwkJQ01TX1NpZ25lckluZm9fdmVyaWZ5OworKwkJQ01TX2RhdGE7CisrCQlDTVNfQ29udGVudEluZm9faXQ7CisrCQlkMmlfQ01TX1JlY2VpcHRSZXF1ZXN0OworKwkJQ01TX2NvbXByZXNzOworKwkJQ01TX2RpZ2VzdF9jcmVhdGU7CisrCQlDTVNfU2lnbmVySW5mb19jZXJ0X2NtcDsKKysJCUNNU19TaWduZXJJbmZvX3NpZ247CisrCQlDTVNfZGF0YV9jcmVhdGU7CisrCQlpMmRfQ01TX2JpbzsKKysJCUNNU19FbmNyeXB0ZWREYXRhX3NldDFfa2V5OworKwkJQ01TX2RlY3J5cHQ7CisrCQlpbnRfc21pbWVfd3JpdGVfQVNOMTsKKysJCUNNU191bnNpZ25lZF9kZWxldGVfYXR0cjsKKysJCUNNU191bnNpZ25lZF9nZXRfYXR0cl9jb3VudDsKKysJCUNNU19hZGRfc21pbWVjYXA7CisrCQlQRU1fcmVhZF9DTVM7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyX2J5X09CSjsKKysJCWQyaV9DTVNfQ29udGVudEluZm87CisrCQlDTVNfYWRkX3N0YW5kYXJkX3NtaW1lY2FwOworKwkJQ01TX0NvbnRlbnRJbmZvX25ldzsKKysJCUNNU19SZWNpcGllbnRJbmZvX3R5cGU7CisrCQlDTVNfZ2V0MF90eXBlOworKwkJQ01TX2lzX2RldGFjaGVkOworKwkJQ01TX3NpZ247CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cjsKKysJCUNNU191bnNpZ25lZF9nZXRfYXR0cl9ieV9PQko7CisrCQlTTUlNRV93cml0ZV9DTVM7CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9kZWNyeXB0OworKwkJQ01TX2dldDBfUmVjaXBpZW50SW5mb3M7CisrCQlDTVNfYWRkMF9SZXZvY2F0aW9uSW5mb0Nob2ljZTsKKysJCUNNU19kZWNyeXB0X3NldDFfcGtleTsKKysJCUNNU19TaWduZXJJbmZvX3NldDFfc2lnbmVyX2NlcnQ7CisrCQlDTVNfZ2V0MF9zaWduZXJzOworKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2dldDBfdmFsdWVzOworKwkJQ01TX3NpZ25lZF9nZXQwX2RhdGFfYnlfT0JKOworKwkJQ01TX2dldDBfU2lnbmVySW5mb3M7CisrCQlDTVNfYWRkMF9jZXJ0OworKwkJQ01TX0VuY3J5cHRlZERhdGFfZW5jcnlwdDsKKysJCUNNU19kaWdlc3RfdmVyaWZ5OworKwkJQ01TX3NldDFfc2lnbmVyc19jZXJ0czsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19zZXQwX2tleTsKKysJCUNNU19TaWduZWREYXRhX2luaXQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rZWtyaV9nZXQwX2lkOworKwkJQ01TX3ZlcmlmeV9yZWNlaXB0OworKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2l0OworKwkJUEVNX3JlYWRfYmlvX0NNUzsKKysJCUNNU19nZXQxX2NybHM7CisrCQlDTVNfYWRkMF9yZWNpcGllbnRfa2V5OworKwkJU01JTUVfcmVhZF9BU04xOworKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X25ldzsKKysJCUNNU19nZXQwX2NvbnRlbnQ7CisrCQlDTVNfZ2V0MV9SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X09CSjsKKysJCUNNU19SZWNpcGllbnRJbmZvX2tla3JpX2lkX2NtcDsKKysJCUNNU19hZGQxX1JlY2VpcHRSZXF1ZXN0OworKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9zaWduZXJfaWQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X05JRDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHI7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyX2J5X05JRDsKKysJCUNNU19nZXQxX2NlcnRzOworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfTklEOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlDTVNfZGF0YUZpbmFsOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX3NpZ25lcl9pZDsKKysJCUNNU19SZWNpcEluZm9fa3RyaV9nZXQwX3NpZ3JfaWQ7CisrCQlpMmRfQ01TX1JlY2VpcHRSZXF1ZXN0OworKwkJQ01TX2FkZDFfcmVjaXBpZW50X2NlcnQ7CisrCQlDTVNfZGF0YUluaXQ7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19kZWNyeXB0OworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9jb3VudDsKKysJCUNNU19nZXQwX2VDb250ZW50VHlwZTsKKysJCUNNU19zZXQxX2VDb250ZW50VHlwZTsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9jcmVhdGUwOworKwkJQ01TX2FkZDFfc2lnbmVyOworKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9wa2V5OworKwkJRU5HSU5FX3NldF9sb2FkX3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfbGRfc3NsX2NsbnRfY2VydF9mbjsKKysJCUVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9zc2xfY2xpZW50X2NlcnRfZm47CisrCQlFTkdJTkVfbG9hZF9zc2xfY2xpZW50X2NlcnQ7CisrCQlFTkdJTkVfbG9hZF9jYXBpOworKwkJT1BFTlNTTF9pc3NlcnZpY2U7CisrCQlGSVBTX2RzYV9zaWdfZGVjb2RlOworKwkJRVZQX0NJUEhFUl9DVFhfY2xlYXJfZmxhZ3M7CisrCQlGSVBTX3JhbmRfc3RhdHVzOworKwkJRklQU19yYW5kX3NldF9rZXk7CisrCQlDUllQVE9fc2V0X21lbV9pbmZvX2Z1bmN0aW9uczsKKysJCVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leDsKKysJCWludF9FUlJfc2V0X3N0YXRlX2Z1bmM7CisrCQlpbnRfRVZQX01EX3NldF9lbmdpbmVfY2FsbGJhY2tzOworKwkJaW50X0NSWVBUT19zZXRfZG9fZHlubG9ja19jYWxsYmFjazsKKysJCUZJUFNfcm5nX3N0aWNrOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzOworKwkJQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leDsKKysJCUZJUFNfc2VsZnRlc3RfY2hlY2s7CisrCQlGSVBTX3JhbmRfc2V0X2R0OworKwkJQ1JZUFRPX2RiZ19wb3BfaW5mbzsKKysJCUZJUFNfZHNhX2ZyZWU7CisrCQlSU0FfWDkzMV9kZXJpdmVfZXg7CisrCQlGSVBTX3JzYV9uZXc7CisrCQlGSVBTX3JhbmRfYnl0ZXM7CisrCQlmaXBzX2NpcGhlcl90ZXN0OworKwkJRVZQX0NJUEhFUl9DVFhfdGVzdF9mbGFnczsKKysJCUNSWVBUT19tYWxsb2NfZGVidWdfaW5pdDsKKysJCUNSWVBUT19kYmdfcHVzaF9pbmZvOworKwkJRklQU19jb3JydXB0X3JzYV9rZXlnZW47CisrCQlGSVBTX2RoX25ldzsKKysJCUZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuOworKwkJRklQU19kaF9mcmVlOworKwkJZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0OworKwkJRVZQX2FkZF9hbGdfbW9kdWxlOworKwkJaW50X1JBTkRfaW5pdF9lbmdpbmVfY2FsbGJhY2tzOworKwkJaW50X0VWUF9DSVBIRVJfc2V0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlpbnRfRVZQX01EX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCUZJUFNfcmFuZF90ZXN0X21vZGU7CisrCQlGSVBTX3JhbmRfcmVzZXQ7CisrCQlGSVBTX2RzYV9uZXc7CisrCQlpbnRfUkFORF9zZXRfY2FsbGJhY2tzOworKwkJQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXg7CisrCQlpbnRfRVJSX2xpYl9pbml0OworKwkJaW50X0VWUF9DSVBIRVJfaW5pdF9lbmdpbmVfY2FsbGJhY2tzOworKwkJRklQU19yc2FfZnJlZTsKKysJCUZJUFNfZHNhX3NpZ19lbmNvZGU7CisrCQlDUllQVE9fZGJnX3JlbW92ZV9hbGxfaW5mbzsKKysJCU9QRU5TU0xfaW5pdDsKKysJCUNSWVBUT19zdHJkdXA7CisrCQlKUEFLRV9TVEVQM0FfcHJvY2VzczsKKysJCUpQQUtFX1NURVAxX3JlbGVhc2U7CisrCQlKUEFLRV9nZXRfc2hhcmVkX2tleTsKKysJCUpQQUtFX1NURVAzQl9pbml0OworKwkJSlBBS0VfU1RFUDFfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMV9pbml0OworKwkJSlBBS0VfU1RFUDNCX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQMl9nZW5lcmF0ZTsKKysJCUpQQUtFX0NUWF9uZXc7CisrCQlKUEFLRV9DVFhfZnJlZTsKKysJCUpQQUtFX1NURVAzQl9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDNBX3JlbGVhc2U7CisrCQlKUEFLRV9TVEVQMl9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDNCX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDFfcHJvY2VzczsKKysJCUpQQUtFX1NURVAzQV9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAyX3JlbGVhc2U7CisrCQlKUEFLRV9TVEVQM0FfaW5pdDsKKysJCUVSUl9sb2FkX0pQQUtFX3N0cmluZ3M7CisrCQlKUEFLRV9TVEVQMl9pbml0OworKwkJcHF1ZXVlX3NpemU7CisrCQlpMmRfVFNfQUNDVVJBQ1k7CisrCQlpMmRfVFNfTVNHX0lNUFJJTlRfZnA7CisrCQlpMmRfVFNfTVNHX0lNUFJJTlQ7CisrCQlFVlBfUEtFWV9wcmludF9wdWJsaWM7CisrCQlFVlBfUEtFWV9DVFhfbmV3OworKwkJaTJkX1RTX1RTVF9JTkZPOworKwkJRVZQX1BLRVlfYXNuMV9maW5kOworKwkJRFNPX01FVEhPRF9iZW9zOworKwkJVFNfQ09ORl9sb2FkX2NlcnQ7CisrCQlUU19SRVFfZ2V0X2V4dDsKKysJCUVWUF9QS0VZX3NpZ25faW5pdDsKKysJCUFTTjFfaXRlbV9wcmludDsKKysJCVRTX1RTVF9JTkZPX3NldF9ub25jZTsKKysJCVRTX1JFU1BfZHVwOworKwkJRU5HSU5FX3JlZ2lzdGVyX3BrZXlfbWV0aHM7CisrCQlFVlBfUEtFWV9hc24xX2FkZDA7CisrCQlQS0NTN19hZGQwX2F0dHJpYl9zaWduaW5nX3RpbWU7CisrCQlpMmRfVFNfVFNUX0lORk9fZnA7CisrCQlCSU9fYXNuMV9nZXRfcHJlZml4OworKwkJVFNfVFNUX0lORk9fc2V0X3RpbWU7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9kZWNyeXB0OworKwkJRVZQX1BLRVlfc2V0X3R5cGVfc3RyOworKwkJRVZQX1BLRVlfQ1RYX2dldF9rZXlnZW5faW5mbzsKKysJCVRTX1JFUV9zZXRfcG9saWN5X2lkOworKwkJZDJpX1RTX1JFU1BfZnA7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZ2luZTsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfZW5nOworKwkJV0hJUkxQT09MX0luaXQ7CisrCQlUU19SRVNQX3NldF9zdGF0dXNfaW5mbzsKKysJCUVWUF9QS0VZX2tleWdlbjsKKysJCUVWUF9EaWdlc3RTaWduSW5pdDsKKysJCVRTX0FDQ1VSQUNZX3NldF9taWxsaXM7CisrCQlUU19SRVFfZHVwOworKwkJR0VORVJBTF9OQU1FX2R1cDsKKysJCUFTTjFfU0VRVUVOQ0VfQU5ZX2l0OworKwkJV0hJUkxQT09MOworKwkJWDUwOV9TVE9SRV9nZXQxX2NybHM7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoOworKwkJRVZQX1BLRVlfYXNuMV9uZXc7CisrCQlCSU9fbmV3X05ERUY7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aDsKKysJCVRTX01TR19JTVBSSU5UX3NldF9hbGdvOworKwkJaTJkX1RTX1RTVF9JTkZPX2JpbzsKKysJCVRTX1RTVF9JTkZPX3NldF9vcmRlcmluZzsKKysJCVRTX1RTVF9JTkZPX2dldF9leHRfYnlfT0JKOworKwkJQ1JZUFRPX1RIUkVBRElEX3NldF9wb2ludGVyOworKwkJVFNfQ09ORl9nZXRfdHNhX3NlY3Rpb247CisrCQlTTUlNRV93cml0ZV9BU04xOworKwkJVFNfUkVTUF9DVFhfc2V0X3NpZ25lcl9rZXk7CisrCQlFVlBfUEtFWV9lbmNyeXB0X29sZDsKKysJCUVWUF9QS0VZX2VuY3J5cHRfaW5pdDsKKysJCUNSWVBUT19USFJFQURJRF9jcHk7CisrCQlBU04xX1BDVFhfZ2V0X2NlcnRfZmxhZ3M7CisrCQlpMmRfRVNTX1NJR05JTkdfQ0VSVDsKKysJCVRTX0NPTkZfbG9hZF9rZXk7CisrCQlpMmRfQVNOMV9TRVFVRU5DRV9BTlk7CisrCQlkMmlfVFNfTVNHX0lNUFJJTlRfYmlvOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfcHVibGljOworKwkJYjJpX1B1YmxpY0tleV9iaW87CisrCQlCSU9fYXNuMV9zZXRfcHJlZml4OworKwkJRVZQX1BLRVlfbmV3X21hY19rZXk7CisrCQlCSU9fbmV3X0NNUzsKKysJCUNSWVBUT19USFJFQURJRF9jbXA7CisrCQlUU19SRVFfZXh0X2ZyZWU7CisrCQlFVlBfUEtFWV9hc24xX3NldF9mcmVlOworKwkJRVZQX1BLRVlfZ2V0MF9hc24xOworKwkJZDJpX05FVFNDQVBFX1g1MDk7CisrCQlFVlBfUEtFWV92ZXJpZnlfcmVjb3Zlcl9pbml0OworKwkJRVZQX1BLRVlfQ1RYX3NldF9kYXRhOworKwkJRVZQX1BLRVlfa2V5Z2VuX2luaXQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc3RhdHVzX2luZm87CisrCQlUU19NU0dfSU1QUklOVF9nZXRfYWxnbzsKKysJCVRTX1JFUV9wcmludF9iaW87CisrCQlFVlBfUEtFWV9DVFhfY3RybF9zdHI7CisrCQlFVlBfUEtFWV9nZXRfZGVmYXVsdF9kaWdlc3RfbmlkOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTN19zdHJlYW07CisrCQlUU19NU0dfSU1QUklOVF9wcmludF9iaW87CisrCQlCTl9hc2MyYm47CisrCQlUU19SRVFfZ2V0X3BvbGljeV9pZDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X2FzbjFfbWV0aHM7CisrCQlFTkdJTkVfc2V0X2RlZl9wa2V5X2FzbjFfbWV0aHM7CisrCQlkMmlfVFNfQUNDVVJBQ1k7CisrCQlEU09fZ2xvYmFsX2xvb2t1cDsKKysJCVRTX0NPTkZfc2V0X3RzYV9uYW1lOworKwkJaTJkX0FTTjFfU0VUX0FOWTsKKysJCUVOR0lORV9sb2FkX2dvc3Q7CisrCQlXSElSTFBPT0xfQml0VXBkYXRlOworKwkJQVNOMV9QQ1RYX2dldF9mbGFnczsKKysJCVRTX1RTVF9JTkZPX2dldF9leHRfYnlfTklEOworKwkJVFNfUkVTUF9uZXc7CisrCQlFU1NfQ0VSVF9JRF9kdXA7CisrCQlUU19TVEFUVVNfSU5GT19kdXA7CisrCQlUU19SRVFfZGVsZXRlX2V4dDsKKysJCUVWUF9EaWdlc3RWZXJpZnlGaW5hbDsKKysJCUVWUF9QS0VZX3ByaW50X3BhcmFtczsKKysJCWkyZF9DTVNfYmlvX3N0cmVhbTsKKysJCVRTX1JFUV9nZXRfbXNnX2ltcHJpbnQ7CisrCQlPQkpfZmluZF9zaWdpZF9ieV9hbGdzOworKwkJVFNfVFNUX0lORk9fZ2V0X3NlcmlhbDsKKysJCVRTX1JFUV9nZXRfbm9uY2U7CisrCQlYNTA5X1BVQktFWV9zZXQwX3BhcmFtOworKwkJRVZQX1BLRVlfQ1RYX3NldDBfa2V5Z2VuX2luZm87CisrCQlESVNUX1BPSU5UX3NldF9kcG5hbWU7CisrCQlpMmRfSVNTVUlOR19ESVNUX1BPSU5UOworKwkJQVNOMV9TRVRfQU5ZX2l0OworKwkJRVZQX1BLRVlfQ1RYX2dldF9kYXRhOworKwkJVFNfU1RBVFVTX0lORk9fcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfZGVyaXZlX2luaXQ7CisrCQlkMmlfVFNfVFNUX0lORk87CisrCQlFVlBfUEtFWV9hc24xX2FkZF9hbGlhczsKKysJCWQyaV9UU19SRVNQX2JpbzsKKysJCU9USEVSTkFNRV9jbXA7CisrCQlHRU5FUkFMX05BTUVfc2V0MF92YWx1ZTsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fZ2V0MF9hbGc7CisrCQlUU19SRVNQX0NUWF9uZXc7CisrCQlUU19SRVNQX3NldF90c3RfaW5mbzsKKysJCVBLQ1M3X2ZpbmFsOworKwkJRVZQX1BLRVlfYmFzZV9pZDsKKysJCVRTX1JFU1BfQ1RYX3NldF9zaWduZXJfY2VydDsKKysJCVRTX1JFUV9zZXRfbXNnX2ltcHJpbnQ7CisrCQlFVlBfUEtFWV9DVFhfY3RybDsKKysJCVRTX0NPTkZfc2V0X2RpZ2VzdHM7CisrCQlkMmlfVFNfTVNHX0lNUFJJTlQ7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jdHJsOworKwkJVFNfUkVRX2dldF9leHRfYnlfTklEOworKwkJUEtDUzVfcGJlX3NldDBfYWxnb3I7CisrCQlCTl9CTElORElOR190aHJlYWRfaWQ7CisrCQlUU19BQ0NVUkFDWV9uZXc7CisrCQlYNTA5X0NSTF9NRVRIT0RfZnJlZTsKKysJCUFTTjFfUENUWF9nZXRfbm1fZmxhZ3M7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9zaWduOworKwkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQ7CisrCQlFVlBfUEtFWV9kZWNyeXB0X2luaXQ7CisrCQlORVRTQ0FQRV9YNTA5X2ZyZWU7CisrCQlpMmJfUFZLX2JpbzsKKysJCUVWUF9QS0VZX3ByaW50X3ByaXZhdGU7CisrCQlHRU5FUkFMX05BTUVfZ2V0MF92YWx1ZTsKKysJCWIyaV9QVktfYmlvOworKwkJQVNOMV9VVENUSU1FX2FkajsKKysJCVRTX1RTVF9JTkZPX25ldzsKKysJCUVWUF9NRF9kb19hbGxfc29ydGVkOworKwkJVFNfQ09ORl9zZXRfZGVmYXVsdF9lbmdpbmU7CisrCQlUU19BQ0NVUkFDWV9zZXRfc2Vjb25kczsKKysJCVRTX1RTVF9JTkZPX2dldF90aW1lOworKwkJUEtDUzhfcGtleV9nZXQwOworKwkJRVZQX1BLRVlfYXNuMV9nZXQwOworKwkJT0JKX2FkZF9zaWdpZDsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX3NpZ247CisrCQlFVlBfUEtFWV9wYXJhbWdlbl9pbml0OworKwkJRVZQX1BLRVlfc2lnbjsKKysJCU9CSl9zaWdpZF9mcmVlOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfaW5pdDsKKysJCWQyaV9FU1NfSVNTVUVSX1NFUklBTDsKKysJCUlTU1VJTkdfRElTVF9QT0lOVF9uZXc7CisrCQlBU04xX1RJTUVfYWRqOworKwkJVFNfT0JKX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeV9yZWNvdmVyOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdnJmeV9yZWNvdmVyOworKwkJVFNfUkVTUF9nZXRfc3RhdHVzX2luZm87CisrCQlDTVNfc3RyZWFtOworKwkJRVZQX1BLRVlfQ1RYX3NldF9jYjsKKysJCVBLQ1M3X3RvX1RTX1RTVF9JTkZPOworKwkJQVNOMV9QQ1RYX2dldF9vaWRfZmxhZ3M7CisrCQlUU19UU1RfSU5GT19hZGRfZXh0OworKwkJRVZQX1BLRVlfbWV0aF9zZXRfZGVyaXZlOworKwkJaTJkX1RTX1JFU1BfZnA7CisrCQlpMmRfVFNfTVNHX0lNUFJJTlRfYmlvOworKwkJVFNfUkVTUF9DVFhfc2V0X2FjY3VyYWN5OworKwkJVFNfUkVRX3NldF9ub25jZTsKKysJCUVTU19DRVJUX0lEX25ldzsKKysJCUVOR0lORV9wa2V5X2FzbjFfZmluZF9zdHI7CisrCQlUU19SRVFfZ2V0X2V4dF9jb3VudDsKKysJCUJVRl9yZXZlcnNlOworKwkJVFNfVFNUX0lORk9fcHJpbnRfYmlvOworKwkJZDJpX0lTU1VJTkdfRElTVF9QT0lOVDsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoczsKKysJCWkyYl9Qcml2YXRlS2V5X2JpbzsKKysJCWkyZF9UU19SRVNQOworKwkJYjJpX1B1YmxpY0tleTsKKysJCVRTX1ZFUklGWV9DVFhfY2xlYW51cDsKKysJCVRTX1NUQVRVU19JTkZPX2ZyZWU7CisrCQlUU19SRVNQX3ZlcmlmeV90b2tlbjsKKysJCU9CSl9ic2VhcmNoX2V4XzsKKysJCUFTTjFfYm5fcHJpbnQ7CisrCQlFVlBfUEtFWV9hc24xX2dldF9jb3VudDsKKysJCUVOR0lORV9yZWdpc3Rlcl9wa2V5X2FzbjFfbWV0aHM7CisrCQlBU04xX1BDVFhfc2V0X25tX2ZsYWdzOworKwkJRVZQX0RpZ2VzdFZlcmlmeUluaXQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9tZXRoczsKKysJCVRTX1RTVF9JTkZPX2dldF9wb2xpY3lfaWQ7CisrCQlUU19SRVFfZ2V0X2NlcnRfcmVxOworKwkJWDUwOV9DUkxfc2V0X21ldGhfZGF0YTsKKysJCVBLQ1M4X3BrZXlfc2V0MDsKKysJCUFTTjFfU1RSSU5HX2NvcHk7CisrCQlkMmlfVFNfVFNUX0lORk9fZnA7CisrCQlYNTA5X0NSTF9tYXRjaDsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X3ByaXZhdGU7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2QyaTsKKysJCVRTX1JFU1BfQ1RYX2FkZF9wb2xpY3k7CisrCQlkMmlfVFNfUkVTUDsKKysJCVRTX0NPTkZfbG9hZF9jZXJ0czsKKysJCVRTX1RTVF9JTkZPX2dldF9tc2dfaW1wcmludDsKKysJCUVSUl9sb2FkX1RTX3N0cmluZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfdmVyc2lvbjsKKysJCUVWUF9QS0VZX0NUWF9kdXA7CisrCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnk7CisrCQlpMmJfUHVibGljS2V5X2JpbzsKKysJCVRTX0NPTkZfc2V0X2NlcnRzOworKwkJRVZQX1BLRVlfYXNuMV9nZXQwX2luZm87CisrCQlUU19WRVJJRllfQ1RYX2ZyZWU7CisrCQlUU19SRVFfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVRTX1JFU1BfQ1RYX3NldF9zZXJpYWxfY2I7CisrCQlYNTA5X0NSTF9nZXRfbWV0aF9kYXRhOworKwkJVFNfUkVTUF9DVFhfc2V0X3RpbWVfY2I7CisrCQlUU19NU0dfSU1QUklOVF9nZXRfbXNnOworKwkJVFNfVFNUX0lORk9fZXh0X2ZyZWU7CisrCQlUU19SRVFfZ2V0X3ZlcnNpb247CisrCQlUU19SRVFfYWRkX2V4dDsKKysJCUVWUF9QS0VZX0NUWF9zZXRfYXBwX2RhdGE7CisrCQlPQkpfYnNlYXJjaF87CisrCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnljdHg7CisrCQlpMmRfUEtDUzdfYmlvX3N0cmVhbTsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfbnVtZXJpYzsKKysJCVBLQ1M3X3NpZ25fYWRkX3NpZ25lcjsKKysJCWQyaV9UU19UU1RfSU5GT19iaW87CisrCQlUU19UU1RfSU5GT19nZXRfb3JkZXJpbmc7CisrCQlUU19SRVNQX3ByaW50X2JpbzsKKysJCVRTX1RTVF9JTkZPX2dldF9leHRzOworKwkJSE1BQ19DVFhfY29weTsKKysJCVBLQ1M1X3BiZTJfc2V0X2l2OworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aHM7CisrCQliMmlfUHJpdmF0ZUtleTsKKysJCUVWUF9QS0VZX0NUWF9nZXRfYXBwX2RhdGE7CisrCQlUU19SRVFfc2V0X2NlcnRfcmVxOworKwkJQ1JZUFRPX1RIUkVBRElEX3NldF9jYWxsYmFjazsKKysJCVRTX0NPTkZfc2V0X3NlcmlhbDsKKysJCVRTX1RTVF9JTkZPX2ZyZWU7CisrCQlkMmlfVFNfUkVRX2ZwOworKwkJVFNfUkVTUF92ZXJpZnlfcmVzcG9uc2U7CisrCQlpMmRfRVNTX0lTU1VFUl9TRVJJQUw7CisrCQlUU19BQ0NVUkFDWV9nZXRfc2Vjb25kczsKKysJCUVWUF9DSVBIRVJfZG9fYWxsOworKwkJYjJpX1ByaXZhdGVLZXlfYmlvOworKwkJT0NTUF9DRVJUSURfZHVwOworKwkJWDUwOV9QVUJLRVlfZ2V0MF9wYXJhbTsKKysJCVRTX01TR19JTVBSSU5UX2R1cDsKKysJCVBLQ1M3X3ByaW50X2N0eDsKKysJCWkyZF9UU19SRVFfYmlvOworKwkJRVZQX3doaXJscG9vbDsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X3BhcmFtOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfZW5jcnlwdDsKKysJCUFTTjFfUENUWF9zZXRfZmxhZ3M7CisrCQlpMmRfRVNTX0NFUlRfSUQ7CisrCQlUU19WRVJJRllfQ1RYX25ldzsKKysJCVRTX1JFU1BfQ1RYX3NldF9leHRlbnNpb25fY2I7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX3BrZXlfbWV0aHM7CisrCQlUU19SRVNQX0NUWF9zZXRfc3RhdHVzX2luZm9fY29uZDsKKysJCVRTX1JFU1BfQ1RYX3NldF9zdGF0X2luZm9fY29uZDsKKysJCUVWUF9QS0VZX3ZlcmlmeTsKKysJCVdISVJMUE9PTF9GaW5hbDsKKysJCVg1MDlfQ1JMX01FVEhPRF9uZXc7CisrCQlFVlBfRGlnZXN0U2lnbkZpbmFsOworKwkJVFNfUkVTUF9DVFhfc2V0X2RlZl9wb2xpY3k7CisrCQlORVRTQ0FQRV9YNTA5X2l0OworKwkJVFNfUkVTUF9jcmVhdGVfcmVzcG9uc2U7CisrCQlQS0NTN19TSUdORVJfSU5GT19nZXQwX2FsZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfbm9uY2U7CisrCQlFVlBfUEtFWV9kZWNyeXB0X29sZDsKKysJCVRTX1RTVF9JTkZPX3NldF9wb2xpY3lfaWQ7CisrCQlUU19DT05GX3NldF9lc3NfY2VydF9pZF9jaGFpbjsKKysJCUVWUF9QS0VZX0NUWF9nZXQwX3BrZXk7CisrCQlkMmlfVFNfUkVROworKwkJRVZQX1BLRVlfYXNuMV9maW5kX3N0cjsKKysJCUJJT19mX2FzbjE7CisrCQlFU1NfU0lHTklOR19DRVJUX25ldzsKKysJCUVWUF9QQkVfZmluZDsKKysJCVg1MDlfQ1JMX2dldDBfYnlfY2VydDsKKysJCUVWUF9QS0VZX2Rlcml2ZTsKKysJCWkyZF9UU19SRVE7CisrCQlUU19UU1RfSU5GT19kZWxldGVfZXh0OworKwkJRVNTX0lTU1VFUl9TRVJJQUxfZnJlZTsKKysJCUFTTjFfUENUWF9zZXRfc3RyX2ZsYWdzOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9zdHI7CisrCQlUU19DT05GX3NldF9zaWduZXJfa2V5OworKwkJVFNfQUNDVVJBQ1lfZ2V0X21pbGxpczsKKysJCVRTX1JFU1BfZ2V0X3Rva2VuOworKwkJVFNfQUNDVVJBQ1lfZHVwOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X2FzbjFfbWV0aHM7CisrCQlFTkdJTkVfcmVnX2FsbF9wa2V5X2FzbjFfbWV0aHM7CisrCQlYNTA5X0NSTF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlDUllQVE9fVEhSRUFESURfaGFzaDsKKysJCUNNU19Db250ZW50SW5mb19wcmludF9jdHg7CisrCQlUU19SRVNQX2ZyZWU7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfZnJlZTsKKysJCUVTU19JU1NVRVJfU0VSSUFMX25ldzsKKysJCUNNU19hZGQxX2NybDsKKysJCVBLQ1M3X2FkZDFfYXR0cmliX2RpZ2VzdDsKKysJCVRTX1JFU1BfQ1RYX2FkZF9tZDsKKysJCVRTX1RTVF9JTkZPX2R1cDsKKysJCUVOR0lORV9zZXRfcGtleV9hc24xX21ldGhzOworKwkJUEVNX3dyaXRlX2Jpb19QYXJhbWV0ZXJzOworKwkJVFNfVFNUX0lORk9fZ2V0X2FjY3VyYWN5OworKwkJWDUwOV9DUkxfZ2V0MF9ieV9zZXJpYWw7CisrCQlUU19UU1RfSU5GT19zZXRfdmVyc2lvbjsKKysJCVRTX1JFU1BfQ1RYX2dldF90c3RfaW5mbzsKKysJCVRTX1JFU1BfdmVyaWZ5X3NpZ25hdHVyZTsKKysJCUNSWVBUT19USFJFQURJRF9nZXRfY2FsbGJhY2s7CisrCQlUU19UU1RfSU5GT19nZXRfdHNhOworKwkJVFNfU1RBVFVTX0lORk9fbmV3OworKwkJRVZQX1BLRVlfQ1RYX2dldF9jYjsKKysJCVRTX1JFUV9nZXRfZXh0X2QyaTsKKysJCUdFTkVSQUxfTkFNRV9zZXQwX290aGVybmFtZTsKKysJCVRTX1RTVF9JTkZPX2dldF9leHRfY291bnQ7CisrCQlUU19SRVNQX0NUWF9nZXRfcmVxdWVzdDsKKysJCWkyZF9ORVRTQ0FQRV9YNTA5OworKwkJRU5HSU5FX2dldF9wa2V5X21ldGhfZW5naW5lOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfc2lnbmN0eDsKKysJCUVWUF9QS0VZX2FzbjFfY29weTsKKysJCUFTTjFfVFlQRV9jbXA7CisrCQlFVlBfQ0lQSEVSX2RvX2FsbF9zb3J0ZWQ7CisrCQlFVlBfUEtFWV9DVFhfZnJlZTsKKysJCUlTU1VJTkdfRElTVF9QT0lOVF9pdDsKKysJCWQyaV9UU19NU0dfSU1QUklOVF9mcDsKKysJCVg1MDlfU1RPUkVfZ2V0MV9jZXJ0czsKKysJCUVWUF9QS0VZX0NUWF9nZXRfb3BlcmF0aW9uOworKwkJZDJpX0VTU19TSUdOSU5HX0NFUlQ7CisrCQlUU19DT05GX3NldF9vcmRlcmluZzsKKysJCUVWUF9QQkVfYWxnX2FkZF90eXBlOworKwkJVFNfUkVRX3NldF92ZXJzaW9uOworKwkJRVZQX1BLRVlfZ2V0MDsKKysJCUJJT19hc24xX3NldF9zdWZmaXg7CisrCQlpMmRfVFNfU1RBVFVTX0lORk87CisrCQlFVlBfTURfZG9fYWxsOworKwkJVFNfVFNUX0lORk9fc2V0X2FjY3VyYWN5OworKwkJUEtDUzdfYWRkX2F0dHJpYl9jb250ZW50X3R5cGU7CisrCQlFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZTsKKysJCUVWUF9QS0VZX21ldGhfYWRkMDsKKysJCVRTX1RTVF9JTkZPX3NldF90c2E7CisrCQlFVlBfUEtFWV9tZXRoX25ldzsKKysJCVdISVJMUE9PTF9VcGRhdGU7CisrCQlUU19DT05GX3NldF9hY2N1cmFjeTsKKysJCUFTTjFfUENUWF9zZXRfb2lkX2ZsYWdzOworKwkJRVNTX1NJR05JTkdfQ0VSVF9kdXA7CisrCQlkMmlfVFNfUkVRX2JpbzsKKysJCVg1MDlfdGltZV9hZGpfZXg7CisrCQlUU19SRVNQX0NUWF9hZGRfZmxhZ3M7CisrCQlkMmlfVFNfU1RBVFVTX0lORk87CisrCQlUU19NU0dfSU1QUklOVF9zZXRfbXNnOworKwkJQklPX2FzbjFfZ2V0X3N1ZmZpeDsKKysJCVRTX1JFUV9mcmVlOworKwkJRVZQX1BLRVlfbWV0aF9mcmVlOworKwkJVFNfUkVRX2dldF9leHRzOworKwkJVFNfUkVTUF9DVFhfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHM7CisrCQlUU19SRVNQX0NUWF9zZXRfY2xrX3ByZWNfZGlnaXRzOworKwkJVFNfUkVTUF9DVFhfYWRkX2ZhaWx1cmVfaW5mbzsKKysJCWkyZF9UU19SRVNQX2JpbzsKKysJCUVWUF9QS0VZX0NUWF9nZXQwX3BlZXJrZXk7CisrCQlQRU1fd3JpdGVfYmlvX0NNU19zdHJlYW07CisrCQlUU19SRVFfbmV3OworKwkJVFNfTVNHX0lNUFJJTlRfbmV3OworKwkJRVZQX1BLRVlfbWV0aF9maW5kOworKwkJRVZQX1BLRVlfaWQ7CisrCQlUU19UU1RfSU5GT19zZXRfc2VyaWFsOworKwkJYTJpX0dFTkVSQUxfTkFNRTsKKysJCVRTX0NPTkZfc2V0X2NyeXB0b19kZXZpY2U7CisrCQlFVlBfUEtFWV92ZXJpZnlfaW5pdDsKKysJCVRTX0NPTkZfc2V0X3BvbGljaWVzOworKwkJQVNOMV9QQ1RYX25ldzsKKysJCUVTU19DRVJUX0lEX2ZyZWU7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9wa2V5X21ldGhzOworKwkJVFNfTVNHX0lNUFJJTlRfZnJlZTsKKysJCVRTX1ZFUklGWV9DVFhfaW5pdDsKKysJCVBLQ1M3X3N0cmVhbTsKKysJCVRTX1JFU1BfQ1RYX3NldF9jZXJ0czsKKysJCVRTX0NPTkZfc2V0X2RlZl9wb2xpY3k7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9hZGo7CisrCQlORVRTQ0FQRV9YNTA5X25ldzsKKysJCVRTX0FDQ1VSQUNZX2ZyZWU7CisrCQlUU19SRVNQX2dldF90c3RfaW5mbzsKKysJCUVWUF9QS0VZX2Rlcml2ZV9zZXRfcGVlcjsKKysJCVBFTV9yZWFkX2Jpb19QYXJhbWV0ZXJzOworKwkJVFNfQ09ORl9zZXRfY2xvY2tfcHJlY2lzaW9uX2RpZ2l0czsKKysJCVRTX0NPTkZfc2V0X2Nsa19wcmVjX2RpZ2l0czsKKysJCUVTU19JU1NVRVJfU0VSSUFMX2R1cDsKKysJCVRTX0FDQ1VSQUNZX2dldF9taWNyb3M7CisrCQlBU04xX1BDVFhfZ2V0X3N0cl9mbGFnczsKKysJCU5BTUVfQ09OU1RSQUlOVFNfY2hlY2s7CisrCQlBU04xX0JJVF9TVFJJTkdfY2hlY2s7CisrCQlYNTA5X2NoZWNrX2FraWQ7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9wa2V5X2FzbjFfbWV0aHM7CisrCQlFTkdJTkVfdW5yZWdfcGtleV9hc24xX21ldGhzOworKwkJQVNOMV9QQ1RYX2ZyZWU7CisrCQlQRU1fd3JpdGVfYmlvX0FTTjFfc3RyZWFtOworKwkJaTJkX0FTTjFfYmlvX3N0cmVhbTsKKysJCVRTX1g1MDlfQUxHT1JfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY2xlYW51cDsKKysJCUVWUF9QS0VZX2FzbjFfZnJlZTsKKysJCUVTU19TSUdOSU5HX0NFUlRfZnJlZTsKKysJCVRTX1RTVF9JTkZPX3NldF9tc2dfaW1wcmludDsKKysJCUdFTkVSQUxfTkFNRV9jbXA7CisrCQlkMmlfQVNOMV9TRVRfQU5ZOworKwkJRU5HSU5FX3NldF9wa2V5X21ldGhzOworKwkJaTJkX1RTX1JFUV9mcDsKKysJCWQyaV9BU04xX1NFUVVFTkNFX0FOWTsKKysJCUdFTkVSQUxfTkFNRV9nZXQwX290aGVyTmFtZTsKKysJCWQyaV9FU1NfQ0VSVF9JRDsKKysJCU9CSl9maW5kX3NpZ2lkX2FsZ3M7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9rZXlnZW47CisrCQlQS0NTNV9QQktERjJfSE1BQzsKKysJCUVWUF9QS0VZX3BhcmFtZ2VuOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfcGFyYW1nZW47CisrCQlCSU9fbmV3X1BLQ1M3OworKwkJRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXI7CisrCQlUU19leHRfcHJpbnRfYmlvOworKwkJVFNfQVNOMV9JTlRFR0VSX3ByaW50X2JpbzsKKysJCWNoZWNrX2RlZmVyOworKwkJRFNPX3BhdGhieWFkZHI7CisrCQlFVlBfUEtFWV9zZXRfdHlwZTsKKysJCVRTX0FDQ1VSQUNZX3NldF9taWNyb3M7CisrCQlUU19SRVFfdG9fVFNfVkVSSUZZX0NUWDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2NvcHk7CisrCQlBU04xX1BDVFhfc2V0X2NlcnRfZmxhZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0OworKwkJRVZQX1BLRVlfYXNuMV9zZXRfY3RybDsKKysJCVRTX1RTVF9JTkZPX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlFVlBfUEtFWV9DVFhfbmV3X2lkOworKwkJVFNfUkVRX2dldF9leHRfYnlfT0JKOworKwkJVFNfQ09ORl9zZXRfc2lnbmVyX2NlcnQ7CisrCQlYNTA5X05BTUVfaGFzaF9vbGQ7CisrCQlBU04xX1RJTUVfc2V0X3N0cmluZzsKKysJCUVWUF9NRF9mbGFnczsKKysJCVRTX1JFU1BfQ1RYX2ZyZWU7CisrCQlEU0FwYXJhbXNfZHVwOworKwkJREhwYXJhbXNfZHVwOworKwkJT0NTUF9SRVFfQ1RYX2FkZDFfaGVhZGVyOworKwkJT0NTUF9SRVFfQ1RYX3NldDFfcmVxOworKwkJWDUwOV9TVE9SRV9zZXRfdmVyaWZ5X2NiOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2NybDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcGFyZW50X2N0eDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9pc3N1ZXI7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cl9pc3N1ZXI7CisrCQlYNTA5X2lzc3Vlcl9uYW1lX2hhc2hfb2xkOworKwkJWDUwOV9zdWJqZWN0X25hbWVfaGFzaF9vbGQ7CisrCQlFVlBfQ0lQSEVSX0NUWF9jb3B5OworKwkJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0b3I7CisrCQlVSV9tZXRob2RfZ2V0X3Byb21wdF9jb25zdHJ1Y3RyOworKwkJVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0b3I7CisrCQlVSV9tZXRob2Rfc2V0X3Byb21wdF9jb25zdHJ1Y3RyOworKwkJRVZQX3JlYWRfcHdfc3RyaW5nX21pbjsKKysJCUNSWVBUT19jdHMxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZGVjcnlwdF9ibG9jazsKKysJCUNSWVBUT19jZmIxMjhfMV9lbmNyeXB0OworKwkJQ1JZUFRPX2NiYzEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX2N0cjEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX29mYjEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX2N0czEyOF9kZWNyeXB0OworKwkJQ1JZUFRPX2N0czEyOF9lbmNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2NiYzEyOF9kZWNyeXB0OworKwkJQ1JZUFRPX2NmYjEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX2NmYjEyOF84X2VuY3J5cHQ7CisrCisrCWxvY2FsOgorKwkJKjsKKyt9OworKworKworK09QRU5TU0xfMS4wLjEgeworKwlnbG9iYWw6CisrCQlTU0xfcmVuZWdvdGlhdGVfYWJicmV2aWF0ZWQ7CisrCQlUTFN2MV8xX21ldGhvZDsKKysJCVRMU3YxXzFfY2xpZW50X21ldGhvZDsKKysJCVRMU3YxXzFfc2VydmVyX21ldGhvZDsKKysJCVNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfc3JwX2NsaWVudF9wd2RfY2I7CisrCQlTU0xfZ2V0X3NycF9nOworKwkJU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfc3JwX3VuX2NiOworKwkJU1NMX2dldF9zcnBfdXNlcmluZm87CisrCQlTU0xfc2V0X3NycF9zZXJ2ZXJfcGFyYW07CisrCQlTU0xfc2V0X3NycF9zZXJ2ZXJfcGFyYW1fcHc7CisrCQlTU0xfZ2V0X3NycF9OOworKwkJU1NMX2dldF9zcnBfdXNlcm5hbWU7CisrCQlTU0xfQ1RYX3NldF9zcnBfcGFzc3dvcmQ7CisrCQlTU0xfQ1RYX3NldF9zcnBfc3RyZW5ndGg7CisrCQlTU0xfQ1RYX3NldF9zcnBfdmVyaWZ5X3BhcmFtX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfc3JwX3ZmeV9wYXJhbV9jYjsKKysJCVNTTF9DVFhfc2V0X3NycF9jYl9hcmc7CisrCQlTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWU7CisrCQlTU0xfQ1RYX1NSUF9DVFhfaW5pdDsKKysJCVNTTF9TUlBfQ1RYX2luaXQ7CisrCQlTUlBfQ2FsY19BX3BhcmFtOworKwkJU1JQX2dlbmVyYXRlX3NlcnZlcl9tYXN0ZXJfc2VjcmV0OworKwkJU1JQX2dlbl9zZXJ2ZXJfbWFzdGVyX3NlY3JldDsKKysJCVNTTF9DVFhfU1JQX0NUWF9mcmVlOworKwkJU1JQX2dlbmVyYXRlX2NsaWVudF9tYXN0ZXJfc2VjcmV0OworKwkJU1JQX2dlbl9jbGllbnRfbWFzdGVyX3NlY3JldDsKKysJCVNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdXNlcm5hbWU7CisrCQlTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VuOworKwkJU1NMX1NSUF9DVFhfZnJlZTsKKysJCVNTTF9zZXRfZGVidWc7CisrCQlTU0xfU0VTU0lPTl9nZXQwX3BlZXI7CisrCQlUTFN2MV8yX2NsaWVudF9tZXRob2Q7CisrCQlTU0xfU0VTU0lPTl9zZXQxX2lkX2NvbnRleHQ7CisrCQlUTFN2MV8yX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfY2FjaGVfaGl0OworKwkJU1NMX2dldDBfa3NzbF9jdHg7CisrCQlTU0xfc2V0MF9rc3NsX2N0eDsKKysJCVNTTF9zZXRfc3RhdGU7CisrCQlTU0xfQ0lQSEVSX2dldF9pZDsKKysJCVRMU3YxXzJfbWV0aG9kOworKwkJa3NzbF9jdHhfZ2V0MF9jbGllbnRfcHJpbmM7CisrCQlTU0xfZXhwb3J0X2tleWluZ19tYXRlcmlhbDsKKysJCVNTTF9zZXRfdGxzZXh0X3VzZV9zcnRwOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZF9jYjsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2Fkdl9jYjsKKysJCVNTTF9nZXQwX25leHRfcHJvdG9fbmVnb3RpYXRlZDsKKysJCVNTTF9nZXRfc2VsZWN0ZWRfc3J0cF9wcm9maWxlOworKwkJU1NMX0NUWF9zZXRfdGxzZXh0X3VzZV9zcnRwOworKwkJU1NMX3NlbGVjdF9uZXh0X3Byb3RvOworKwkJU1NMX2dldF9zcnRwX3Byb2ZpbGVzOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxlY3RfY2I7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbF9jYjsKKysJCVNTTF9TRVNTSU9OX2dldF9jb21wcmVzc19pZDsKKysKKysJCVNSUF9WQkFTRV9nZXRfYnlfdXNlcjsKKysJCVNSUF9DYWxjX3NlcnZlcl9rZXk7CisrCQlTUlBfY3JlYXRlX3ZlcmlmaWVyOworKwkJU1JQX2NyZWF0ZV92ZXJpZmllcl9CTjsKKysJCVNSUF9DYWxjX3U7CisrCQlTUlBfVkJBU0VfZnJlZTsKKysJCVNSUF9DYWxjX2NsaWVudF9rZXk7CisrCQlTUlBfZ2V0X2RlZmF1bHRfZ047CisrCQlTUlBfQ2FsY194OworKwkJU1JQX0NhbGNfQjsKKysJCVNSUF9WQkFTRV9uZXc7CisrCQlTUlBfY2hlY2tfa25vd25fZ05fcGFyYW07CisrCQlTUlBfQ2FsY19BOworKwkJU1JQX1ZlcmlmeV9BX21vZF9OOworKwkJU1JQX1ZCQVNFX2luaXQ7CisrCQlTUlBfVmVyaWZ5X0JfbW9kX047CisrCQlFQ19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3JkaW5hdGVzOworKwkJRUNfS0VZX3NldF9wdWJfa2V5X2FmZl9jb29yZHM7CisrCQlFVlBfYWVzXzE5Ml9jdHI7CisrCQlFVlBfUEtFWV9tZXRoX2dldDBfaW5mbzsKKysJCUVWUF9QS0VZX21ldGhfY29weTsKKysJCUVSUl9hZGRfZXJyb3JfdmRhdGE7CisrCQlFVlBfYWVzXzEyOF9jdHI7CisrCQlFVlBfYWVzXzI1Nl9jdHI7CisrCQlFQ19HRnBfbmlzdHAyMjRfbWV0aG9kOworKwkJRUNfS0VZX2dldF9mbGFnczsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1NfbWdmMTsKKysJCUVWUF9hZXNfMTI4X3h0czsKKysJCUVWUF9hZXNfMjU2X3h0czsKKysJCUVWUF9hZXNfMTI4X2djbTsKKysJCUVDX0tFWV9jbGVhcl9mbGFnczsKKysJCUVDX0tFWV9zZXRfZmxhZ3M7CisrCQlFVlBfYWVzXzI1Nl9jY207CisrCQlSU0FfdmVyaWZ5X1BLQ1MxX1BTU19tZ2YxOworKwkJRVZQX2Flc18xMjhfY2NtOworKwkJRVZQX2Flc18xOTJfZ2NtOworKwkJWDUwOV9BTEdPUl9zZXRfbWQ7CisrCQlSQU5EX2luaXRfZmlwczsKKysJCUVWUF9hZXNfMjU2X2djbTsKKysJCUVWUF9hZXNfMTkyX2NjbTsKKysJCUNNQUNfQ1RYX2NvcHk7CisrCQlDTUFDX0NUWF9mcmVlOworKwkJQ01BQ19DVFhfZ2V0MF9jaXBoZXJfY3R4OworKwkJQ01BQ19DVFhfY2xlYW51cDsKKysJCUNNQUNfSW5pdDsKKysJCUNNQUNfVXBkYXRlOworKwkJQ01BQ19yZXN1bWU7CisrCQlDTUFDX0NUWF9uZXc7CisrCQlDTUFDX0ZpbmFsOworKwkJQ1JZUFRPX2N0cjEyOF9lbmNyeXB0X2N0cjMyOworKwkJQ1JZUFRPX2djbTEyOF9yZWxlYXNlOworKwkJQ1JZUFRPX2NjbTEyOF9kZWNyeXB0X2NjbTY0OworKwkJQ1JZUFRPX2NjbTEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX2djbTEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX3h0czEyOF9lbmNyeXB0OworKwkJRVZQX3JjNF9obWFjX21kNTsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2RlY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fZ2NtMTI4X3NldGl2OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdDsKKysJCUVWUF9hZXNfMTI4X2NiY19obWFjX3NoYTE7CisrCQlDUllQVE9fZ2NtMTI4X3RhZzsKKysJCUNSWVBUT19jY20xMjhfZW5jcnlwdF9jY202NDsKKysJCUVOR0lORV9sb2FkX3JkcmFuZDsKKysJCUNSWVBUT19jY20xMjhfc2V0aXY7CisrCQlDUllQVE9fbmlzdGN0czEyOF9lbmNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2djbTEyOF9hYWQ7CisrCQlDUllQVE9fY2NtMTI4X2luaXQ7CisrCQlDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0OworKwkJQ1JZUFRPX2djbTEyOF9uZXc7CisrCQlDUllQVE9fY2NtMTI4X3RhZzsKKysJCUNSWVBUT19jY20xMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jY20xMjhfYWFkOworKwkJQ1JZUFRPX2djbTEyOF9pbml0OworKwkJQ1JZUFRPX2djbTEyOF9kZWNyeXB0OworKwkJRU5HSU5FX2xvYWRfcnNheDsKKysJCUNSWVBUT19nY20xMjhfZGVjcnlwdF9jdHIzMjsKKysJCUNSWVBUT19nY20xMjhfZW5jcnlwdF9jdHIzMjsKKysJCUNSWVBUT19nY20xMjhfZmluaXNoOworKwkJRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMTsKKysJCVBLQ1M1X3Bia2RmMl9zZXQ7CisrCQlDTVNfYWRkMF9yZWNpcGllbnRfcGFzc3dvcmQ7CisrCQlDTVNfZGVjcnlwdF9zZXQxX3Bhc3N3b3JkOworKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9wYXNzd29yZDsKKysJCVJBTkRfc2V0X2ZpcHNfZHJiZ190eXBlOworKwkJWDUwOV9SRVFfc2lnbl9jdHg7CisrCQlSU0FfUFNTX1BBUkFNU19uZXc7CisrCQlYNTA5X0NSTF9zaWduX2N0eDsKKysJCVg1MDlfc2lnbmF0dXJlX2R1bXA7CisrCQlkMmlfUlNBX1BTU19QQVJBTVM7CisrCQlSU0FfUFNTX1BBUkFNU19pdDsKKysJCVJTQV9QU1NfUEFSQU1TX2ZyZWU7CisrCQlYNTA5X3NpZ25fY3R4OworKwkJaTJkX1JTQV9QU1NfUEFSQU1TOworKwkJQVNOMV9pdGVtX3NpZ25fY3R4OworKwkJRUNfR0ZwX25pc3RwNTIxX21ldGhvZDsKKysJCUVDX0dGcF9uaXN0cDI1Nl9tZXRob2Q7CisrCQlPUEVOU1NMX3N0ZGVycjsKKysJCU9QRU5TU0xfY3B1aWRfc2V0dXA7CisrCQlPUEVOU1NMX3Nob3dmYXRhbDsKKysJCUJJT19uZXdfZGdyYW1fc2N0cDsKKysJCUJJT19kZ3JhbV9zY3RwX21zZ193YWl0aW5nOworKwkJQklPX2RncmFtX3NjdHBfd2FpdF9mb3JfZHJ5OworKwkJQklPX3NfZGF0YWdyYW1fc2N0cDsKKysJCUJJT19kZ3JhbV9pc19zY3RwOworKwkJQklPX2RncmFtX3NjdHBfbm90aWZpY2F0aW9uX2NiOworK30gT1BFTlNTTF8xLjAuMDsKKysKKytPUEVOU1NMXzEuMC4xZCB7CisrCWdsb2JhbDoKKysJCUNSWVBUT19tZW1jbXA7CisrfSBPUEVOU1NMXzEuMC4xOworKworK09QRU5TU0xfMS4wLjIgeworKwlnbG9iYWw6CisrCQlTU0xfQ1RYX3NldF9hbHBuX3Byb3RvczsKKysJCVNTTF9zZXRfYWxwbl9wcm90b3M7CisrCQlTU0xfQ1RYX3NldF9hbHBuX3NlbGVjdF9jYjsKKysJCVNTTF9nZXQwX2FscG5fc2VsZWN0ZWQ7CisrCQlTU0xfQ1RYX3NldF9jdXN0b21fY2xpX2V4dDsKKysJCVNTTF9DVFhfc2V0X2N1c3RvbV9zcnZfZXh0OworKwkJU1NMX0NUWF9zZXRfc3J2X3N1cHBfZGF0YTsKKysJCVNTTF9DVFhfc2V0X2NsaV9zdXBwX2RhdGE7CisrCQlTU0xfc2V0X2NlcnRfY2I7CisrCQlTU0xfQ1RYX3VzZV9zZXJ2ZXJpbmZvOworKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mb19maWxlOworKwkJU1NMX0NUWF9zZXRfY2VydF9jYjsKKysJCVNTTF9DVFhfZ2V0MF9wYXJhbTsKKysJCVNTTF9nZXQwX3BhcmFtOworKwkJU1NMX2NlcnRzX2NsZWFyOworKwkJRFRMU3YxXzJfbWV0aG9kOworKwkJRFRMU3YxXzJfc2VydmVyX21ldGhvZDsKKysJCURUTFN2MV8yX2NsaWVudF9tZXRob2Q7CisrCQlEVExTX21ldGhvZDsKKysJCURUTFNfc2VydmVyX21ldGhvZDsKKysJCURUTFNfY2xpZW50X21ldGhvZDsKKysJCVNTTF9DVFhfZ2V0X3NzbF9tZXRob2Q7CisrCQlTU0xfQ1RYX2dldDBfY2VydGlmaWNhdGU7CisrCQlTU0xfQ1RYX2dldDBfcHJpdmF0ZWtleTsKKysJCVNTTF9DT01QX3NldDBfY29tcHJlc3Npb25fbWV0aG9kczsKKysJCVNTTF9DT01QX2ZyZWVfY29tcHJlc3Npb25fbWV0aG9kczsKKysJCVNTTF9DSVBIRVJfZmluZDsKKysJCVNTTF9pc19zZXJ2ZXI7CisrCQlTU0xfQ09ORl9DVFhfbmV3OworKwkJU1NMX0NPTkZfQ1RYX2ZpbmlzaDsKKysJCVNTTF9DT05GX0NUWF9mcmVlOworKwkJU1NMX0NPTkZfQ1RYX3NldF9mbGFnczsKKysJCVNTTF9DT05GX0NUWF9jbGVhcl9mbGFnczsKKysJCVNTTF9DT05GX0NUWF9zZXQxX3ByZWZpeDsKKysJCVNTTF9DT05GX0NUWF9zZXRfc3NsOworKwkJU1NMX0NPTkZfQ1RYX3NldF9zc2xfY3R4OworKwkJU1NMX0NPTkZfY21kOworKwkJU1NMX0NPTkZfY21kX2FyZ3Y7CisrCQlTU0xfQ09ORl9jbWRfdmFsdWVfdHlwZTsKKysJCVNTTF90cmFjZTsKKysJCVNTTF9DSVBIRVJfc3RhbmRhcmRfbmFtZTsKKysJCVNTTF9nZXRfdGxzYV9yZWNvcmRfYnluYW1lOworKwkJQVNOMV9USU1FX2RpZmY7CisrCQlCSU9faGV4X3N0cmluZzsKKysJCUNNU19SZWNpcGllbnRJbmZvX2dldDBfcGtleV9jdHg7CisrCQlDTVNfUmVjaXBpZW50SW5mb19lbmNyeXB0OworKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9wa2V5X2N0eDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfbWRfY3R4OworKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9zaWduYXR1cmU7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfYWxnOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX3Jla3M7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfb3JpZ19pZDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfb3JpZ19pZF9jbXA7CisrCQlDTVNfUmVjaXBpZW50RW5jcnlwdGVkS2V5X2dldDBfaWQ7CisrCQlDTVNfUmVjaXBpZW50RW5jcnlwdGVkS2V5X2NlcnRfY21wOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9zZXQwX3BrZXk7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfY3R4OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9kZWNyeXB0OworKwkJQ01TX1NoYXJlZEluZm9fZW5jb2RlOworKwkJREhfY29tcHV0ZV9rZXlfcGFkZGVkOworKwkJZDJpX0RIeHBhcmFtczsKKysJCWkyZF9ESHhwYXJhbXM7CisrCQlESF9nZXRfMTAyNF8xNjA7CisrCQlESF9nZXRfMjA0OF8yMjQ7CisrCQlESF9nZXRfMjA0OF8yNTY7CisrCQlESF9LREZfWDlfNDI7CisrCQlFQ0RIX0tERl9YOV82MjsKKysJCUVDRFNBX01FVEhPRF9uZXc7CisrCQlFQ0RTQV9NRVRIT0RfZnJlZTsKKysJCUVDRFNBX01FVEhPRF9zZXRfYXBwX2RhdGE7CisrCQlFQ0RTQV9NRVRIT0RfZ2V0X2FwcF9kYXRhOworKwkJRUNEU0FfTUVUSE9EX3NldF9zaWduOworKwkJRUNEU0FfTUVUSE9EX3NldF9zaWduX3NldHVwOworKwkJRUNEU0FfTUVUSE9EX3NldF92ZXJpZnk7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X2ZsYWdzOworKwkJRUNEU0FfTUVUSE9EX3NldF9uYW1lOworKwkJRVZQX2Rlc19lZGUzX3dyYXA7CisrCQlFVlBfYWVzXzEyOF93cmFwOworKwkJRVZQX2Flc18xOTJfd3JhcDsKKysJCUVWUF9hZXNfMjU2X3dyYXA7CisrCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGEyNTY7CisrCQlFVlBfYWVzXzI1Nl9jYmNfaG1hY19zaGEyNTY7CisrCQlDUllQVE9fMTI4X3dyYXA7CisrCQlDUllQVE9fMTI4X3Vud3JhcDsKKysJCU9DU1BfUkVRX0NUWF9uYmlvOworKwkJT0NTUF9SRVFfQ1RYX25ldzsKKysJCU9DU1Bfc2V0X21heF9yZXNwb25zZV9sZW5ndGg7CisrCQlPQ1NQX1JFUV9DVFhfaTJkOworKwkJT0NTUF9SRVFfQ1RYX25iaW9fZDJpOworKwkJT0NTUF9SRVFfQ1RYX2dldDBfbWVtX2JpbzsKKysJCU9DU1BfUkVRX0NUWF9odHRwOworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX09BRVBfbWdmMTsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVBfbWdmMTsKKysJCVJTQV9PQUVQX1BBUkFNU19mcmVlOworKwkJUlNBX09BRVBfUEFSQU1TX2l0OworKwkJUlNBX09BRVBfUEFSQU1TX25ldzsKKysJCVNTTF9nZXRfc2lnYWxnczsKKysJCVNTTF9nZXRfc2hhcmVkX3NpZ2FsZ3M7CisrCQlTU0xfY2hlY2tfY2hhaW47CisrCQlYNTA5X2NoYWluX3VwX3JlZjsKKysJCVg1MDlfaHR0cF9uYmlvOworKwkJWDUwOV9DUkxfaHR0cF9uYmlvOworKwkJWDUwOV9SRVZPS0VEX2R1cDsKKysJCWkyZF9yZV9YNTA5X3RiczsKKysJCVg1MDlfZ2V0MF9zaWduYXR1cmU7CisrCQlYNTA5X2dldF9zaWduYXR1cmVfbmlkOworKwkJWDUwOV9DUkxfZGlmZjsKKysJCVg1MDlfY2hhaW5fY2hlY2tfc3VpdGViOworKwkJWDUwOV9DUkxfY2hlY2tfc3VpdGViOworKwkJWDUwOV9jaGVja19ob3N0OworKwkJWDUwOV9jaGVja19lbWFpbDsKKysJCVg1MDlfY2hlY2tfaXA7CisrCQlYNTA5X2NoZWNrX2lwX2FzYzsKKysJCVg1MDlfU1RPUkVfc2V0X2xvb2t1cF9jcmxzX2NiOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9zdG9yZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaG9zdDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2FkZDFfaG9zdDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9ob3N0ZmxhZ3M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX3BlZXJuYW1lOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9lbWFpbDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaXA7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwX2FzYzsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2dldDBfbmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2dldF9jb3VudDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2dldDA7CisrCQlYNTA5VjNfRVhUX2ZyZWU7CisrCQlFQ19HUk9VUF9nZXRfbW9udF9kYXRhOworKwkJRUNfY3VydmVfbmlkMm5pc3Q7CisrCQlFQ19jdXJ2ZV9uaXN0Mm5pZDsKKysJCVBFTV93cml0ZV9iaW9fREh4cGFyYW1zOworKwkJUEVNX3dyaXRlX0RIeHBhcmFtczsKKysJCVNTTF9DVFhfYWRkX2NsaWVudF9jdXN0b21fZXh0OworKwkJU1NMX0NUWF9hZGRfc2VydmVyX2N1c3RvbV9leHQ7CisrCQlTU0xfZXh0ZW5zaW9uX3N1cHBvcnRlZDsKKysJCUJVRl9zdHJubGVuOworKwkJc2tfZGVlcF9jb3B5OworKwkJU1NMX3Rlc3RfZnVuY3Rpb25zOworK30gT1BFTlNTTF8xLjAuMWQ7CisrCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9vcGVuc3NsLmxkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9vcGVuc3NsLmxkCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDEwIEBACisrT1BFTlNTTF8xLjAuMCB7CisrCWdsb2JhbDoKKysJCWJpbmRfZW5naW5lOworKwkJdl9jaGVjazsKKysJCU9QRU5TU0xfaW5pdDsKKysJCU9QRU5TU0xfZmluaXNoOworKwlsb2NhbDoKKysJCSo7CisrfTsKKysKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL2NjZ29zdC9vcGVuc3NsLmxkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMCBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQliaW5kX2VuZ2luZTsKKysJCXZfY2hlY2s7CisrCQlPUEVOU1NMX2luaXQ7CisrCQlPUEVOU1NMX2ZpbmlzaDsKKysJbG9jYWw6CisrCQkqOworK307CisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0M2JjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tOiBSYXBoYWVsIEdlaXNzZXJ0IDxnZWlzc2VydEBkZWJpYW4ub3JnPgorRGVzY3JpcHRpb246IG1ha2UgWDUwOV92ZXJpZnlfY2VydCBpbmRpY2F0ZSB0aGF0IGFueSBjZXJ0aWZpY2F0ZSB3aG9zZQorIG5hbWUgY29udGFpbnMgIkRpZ2ljZXJ0IFNkbi4gQmhkLiIgKGZyb20gTWFsYXlzaWEpIGlzIHJldm9rZWQuCitGb3J3YXJkZWQ6IG5vdC1uZWVkZWQKK09yaWdpbjogdmVuZG9yCitMYXN0LVVwZGF0ZTogMjAxMS0xMS0wNQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJ+YmV0YTEub3JpZy9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCTIwMTQtMDItMjUgMDA6MTY6MTIuNDg4MDI4ODQ0ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCTIwMTQtMDItMjUgMDA6MTY6MTIuNDg0MDI4OTI5ICswMTAwCitAQCAtOTY0LDEwICs5NjQsMTEgQEAKKyAJZm9yIChpID0gc2tfWDUwOV9udW0oY3R4LT5jaGFpbikgLSAxOyBpID49IDA7IGktLSkKKyAJCXsKKyAJCXggPSBza19YNTA5X3ZhbHVlKGN0eC0+Y2hhaW4sIGkpOworLQkJLyogTWFyayBEaWdpTm90YXIgY2VydGlmaWNhdGVzIGFzIHJldm9rZWQsIG5vIG1hdHRlcgorLQkJICogd2hlcmUgaW4gdGhlIGNoYWluIHRoZXkgYXJlLgorKwkJLyogTWFyayBjZXJ0aWZpY2F0ZXMgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIG5hbWVzIGFzCisrCQkgKiByZXZva2VkLCBubyBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNoYWluIHRoZXkgYXJlLgorIAkJICovCistCQlpZiAoeC0+bmFtZSAmJiBzdHJzdHIoeC0+bmFtZSwgIkRpZ2lOb3RhciIpKQorKwkJaWYgKHgtPm5hbWUgJiYgKHN0cnN0cih4LT5uYW1lLCAiRGlnaU5vdGFyIikgfHwKKysJCQlzdHJzdHIoeC0+bmFtZSwgIkRpZ2ljZXJ0IFNkbi4gQmhkLiIpKSkKKyAJCQl7CisgCQkJY3R4LT5lcnJvciA9IFg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEOworIAkJCWN0eC0+ZXJyb3JfZGVwdGggPSBpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMWEwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbTogUmFwaGFlbCBHZWlzc2VydCA8Z2Vpc3NlcnRAZGViaWFuLm9yZz4KK0Rlc2NyaXB0aW9uOiBtYWtlIFg1MDlfdmVyaWZ5X2NlcnQgaW5kaWNhdGUgdGhhdCBhbnkgY2VydGlmaWNhdGUgd2hvc2UKKyBuYW1lIGNvbnRhaW5zICJEaWdpTm90YXIiIGlzIHJldm9rZWQuCitGb3J3YXJkZWQ6IG5vdC1uZWVkZWQKK09yaWdpbjogdmVuZG9yCitMYXN0LVVwZGF0ZTogMjAxMS0wOS0wOAorQnVnOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzYzOTc0NAorUmV2aWV3ZWQtYnk6IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KK1Jldmlld2VkLWJ5OiBEciBTdGVwaGVuIE4gSGVuc29uIDxzaGVuc29uQGRyaC1jb25zdWx0YW5jeS5jby51az4KKworVGhpcyBpcyBub3QgbWVhbnQgYXMgZmluYWwgcGF0Y2guICAKKyAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKKysrKyBvcGVuc3NsLTEuMC4yL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKK0BAIC0xMTksNiArMTE5LDcgQEAgc3RhdGljIGludCBjaGVja190cnVzdChYNTA5X1NUT1JFX0NUWCAqYworIHN0YXRpYyBpbnQgY2hlY2tfcmV2b2NhdGlvbihYNTA5X1NUT1JFX0NUWCAqY3R4KTsKKyBzdGF0aWMgaW50IGNoZWNrX2NlcnQoWDUwOV9TVE9SRV9DVFggKmN0eCk7Cisgc3RhdGljIGludCBjaGVja19wb2xpY3koWDUwOV9TVE9SRV9DVFggKmN0eCk7Cisrc3RhdGljIGludCBjaGVja19jYV9ibGFja2xpc3QoWDUwOV9TVE9SRV9DVFggKmN0eCk7CisgCisgc3RhdGljIGludCBnZXRfY3JsX3Njb3JlKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDkgKipwaXNzdWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnByZWFzb25zLCBYNTA5X0NSTCAqY3JsLCBYNTA5ICp4KTsKK0BAIC00MzgsNiArNDM5LDkgQEAgaW50IFg1MDlfdmVyaWZ5X2NlcnQoWDUwOV9TVE9SRV9DVFggKmN0eAorICAgICBpZiAoIW9rKQorICAgICAgICAgZ290byBlbmQ7CisgCisrCW9rID0gY2hlY2tfY2FfYmxhY2tsaXN0KGN0eCk7CisrCWlmKCFvaykgZ290byBlbmQ7CisrCisgI2lmbmRlZiBPUEVOU1NMX05PX1JGQzM3NzkKKyAgICAgLyogUkZDIDM3NzkgcGF0aCB2YWxpZGF0aW9uLCBub3cgdGhhdCBDUkwgY2hlY2sgaGFzIGJlZW4gZG9uZSAqLworICAgICBvayA9IHYzX2FzaWRfdmFsaWRhdGVfcGF0aChjdHgpOworQEAgLTkzOCw2ICs5NDIsMjkgQEAgc3RhdGljIGludCBjaGVja19jcmxfdGltZShYNTA5X1NUT1JFX0NUWAorICAgICByZXR1cm4gMTsKKyB9CisgCisrc3RhdGljIGludCBjaGVja19jYV9ibGFja2xpc3QoWDUwOV9TVE9SRV9DVFggKmN0eCkKKysJeworKwlYNTA5ICp4OworKwlpbnQgaTsKKysJLyogQ2hlY2sgYWxsIGNlcnRpZmljYXRlcyBhZ2FpbnN0IHRoZSBibGFja2xpc3QgKi8KKysJZm9yIChpID0gc2tfWDUwOV9udW0oY3R4LT5jaGFpbikgLSAxOyBpID49IDA7IGktLSkKKysJCXsKKysJCXggPSBza19YNTA5X3ZhbHVlKGN0eC0+Y2hhaW4sIGkpOworKwkJLyogTWFyayBEaWdpTm90YXIgY2VydGlmaWNhdGVzIGFzIHJldm9rZWQsIG5vIG1hdHRlcgorKwkJICogd2hlcmUgaW4gdGhlIGNoYWluIHRoZXkgYXJlLgorKwkJICovCisrCQlpZiAoeC0+bmFtZSAmJiBzdHJzdHIoeC0+bmFtZSwgIkRpZ2lOb3RhciIpKQorKwkJCXsKKysJCQljdHgtPmVycm9yID0gWDUwOV9WX0VSUl9DRVJUX1JFVk9LRUQ7CisrCQkJY3R4LT5lcnJvcl9kZXB0aCA9IGk7CisrCQkJY3R4LT5jdXJyZW50X2NlcnQgPSB4OworKwkJCWlmICghY3R4LT52ZXJpZnlfY2IoMCxjdHgpKQorKwkJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisgc3RhdGljIGludCBnZXRfY3JsX3NrKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDlfQ1JMICoqcGNybCwgWDUwOV9DUkwgKipwZGNybCwKKyAgICAgICAgICAgICAgICAgICAgICAgWDUwOSAqKnBpc3N1ZXIsIGludCAqcHNjb3JlLCB1bnNpZ25lZCBpbnQgKnByZWFzb25zLAorICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19PRihYNTA5X0NSTCkgKmNybHMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzQ2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaApAQCAtMCwwICsxLDY0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvZW5naW5lcy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9lbmdpbmVzL01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMi9lbmdpbmVzL01ha2VmaWxlCitAQCAtMTA3LDEzICsxMDcsMTMgQEAgaW5zdGFsbDoKKyAJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgorIAlAaWYgWyAtbiAiJChTSEFSRURfTElCUykiIF07IHRoZW4gXAorIAkJc2V0IC1lOyBcCistCQkkKFBFUkwpICQoVE9QKS91dGlsL21rZGlyLXAucGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzOyBcCisrCQkkKFBFUkwpICQoVE9QKS91dGlsL21rZGlyLXAucGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lczsgXAorIAkJZm9yIGwgaW4gJChMSUJOQU1FUyk7IGRvIFwKKyAJCQkoIGVjaG8gaW5zdGFsbGluZyAkJGw7IFwKKyAJCQkgIHBmeD1saWI7IFwKKyAJCQkgIGlmIGV4cHIgIiQoUExBVEZPUk0pIiA6ICJDeWd3aW4iID4vZGV2L251bGw7IHRoZW4gXAorIAkJCQlzZng9Ii5zbyI7IFwKKy0JCQkJY3AgY3lnJCRsLmRsbCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKysJCQkJY3AgY3lnJCRsLmRsbCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBlbHNlIFwKKyAJCQkJY2FzZSAiJChDRkxBR1MpIiBpbiBcCisgCQkJCSpEU09fQkVPUyopCXNmeD0iLnNvIjs7CVwKK0BAIC0xMjIsMTAgKzEyMiwxMCBAQCBpbnN0YWxsOgorIAkJCQkqRFNPX1dJTjMyKikJc2Z4PSJlYXkzMi5kbGwiOyBwZng9OzsJXAorIAkJCQkqKQkJc2Z4PSIuYmFkIjs7CVwKKyAJCQkJZXNhYzsgXAorLQkJCQljcCAkJHBmeCQkbCQkc2Z4ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorKwkJCQljcCAkJHBmeCQkbCQkc2Z4ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKyAJCQkgIGZpOyBcCistCQkJICBjaG1vZCA1NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCistCQkJICBtdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXcgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZnggKTsgXAorKwkJCSAgY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKysJCQkgIG12IC1mICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXcgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4ICk7IFwKKyAJCWRvbmU7IFwKKyAJZmkKKyAJQHRhcmdldD1pbnN0YWxsOyAkKFJFQ1VSU0lWRV9NQUtFKQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvZW5naW5lcy9jY2dvc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvZW5naW5lcy9jY2dvc3QvTWFrZWZpbGUKKysrKyBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCitAQCAtNDcsNyArNDcsNyBAQCBpbnN0YWxsOgorIAkJcGZ4PWxpYjsgXAorIAkJaWYgZXhwciAiJChQTEFURk9STSkiIDogIkN5Z3dpbiIgPi9kZXYvbnVsbDsgdGhlbiBcCisgCQkJc2Z4PSIuc28iOyBcCistCQkJY3AgY3lnJChMSUJOQU1FKS5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisrCQkJY3AgY3lnJChMSUJOQU1FKS5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorIAkJZWxzZSBcCisgCQkJY2FzZSAiJChDRkxBR1MpIiBpbiBcCisgCQkJKkRTT19CRU9TKikgc2Z4PSIuc28iOzsgXAorQEAgLTU2LDEwICs1NiwxMCBAQCBpbnN0YWxsOgorIAkJCSpEU09fV0lOMzIqKSBzZng9ImVheTMyLmRsbCI7IHBmeD07OyBcCisgCQkJKikgc2Z4PSIuYmFkIjs7IFwKKyAJCQllc2FjOyBcCistCQkJY3AgJCR7cGZ4fSQoTElCTkFNRSkkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKysJCQljcCAkJHtwZnh9JChMSUJOQU1FKSQkc2Z4ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKyAJCWZpOyBcCistCQljaG1vZCA1NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCistCQltdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXcgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZng7IFwKKysJCWNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisrCQltdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeDsgXAorIAlmaQorIAorIGxpbmtzOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZmluZC5wbCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpbmQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxYjQyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpbmQucGwKQEAgLTAsMCArMSw1NCBAQAord2FybiAiTGVnYWN5IGxpYnJhcnkgQHtbKGNhbGxlcigwKSlbNl1dfSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgUGVybCBjb3JlIGRpc3RyaWJ1dGlvbiBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiBQbGVhc2UgaW5zdGFsbCBpdCBmcm9tIHRoZSBDUEFOIGRpc3RyaWJ1dGlvbiBQZXJsNDo6Q29yZUxpYnMuIEl0IGlzIGJlaW5nIHVzZWQgYXQgQHtbKGNhbGxlcilbMV1dfSwgbGluZSBAe1soY2FsbGVyKVsyXV19LlxuIjsKKworIyBUaGlzIGxpYnJhcnkgaXMgZGVwcmVjYXRlZCBhbmQgdW5tYWludGFpbmVkLiBJdCBpcyBpbmNsdWRlZCBmb3IKKyMgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwgNCBzY3JpcHRzIHdoaWNoIG1heSB1c2UgaXQsIGJ1dCBpdCB3aWxsIGJlCisjIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQZXJsLiBQbGVhc2UgdXNlIHRoZSBGaWxlOjpGaW5kIG1vZHVsZQorIyBpbnN0ZWFkLgorCisjIFVzYWdlOgorIwlyZXF1aXJlICJmaW5kLnBsIjsKKyMKKyMJJmZpbmQoJy9mb28nLCcvYmFyJyk7CisjCisjCXN1YiB3YW50ZWQgeyAuLi4gfQorIwkJd2hlcmUgd2FudGVkIGRvZXMgd2hhdGV2ZXIgeW91IHdhbnQuICAkZGlyIGNvbnRhaW5zIHRoZQorIwkJY3VycmVudCBkaXJlY3RvcnkgbmFtZSwgYW5kICRfIHRoZSBjdXJyZW50IGZpbGVuYW1lIHdpdGhpbgorIwkJdGhhdCBkaXJlY3RvcnkuICAkbmFtZSBjb250YWlucyAiJGRpci8kXyIuICBZb3UgYXJlIGNkJ2VkCisjCQl0byAkZGlyIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIFRoZSBmdW5jdGlvbiBtYXkKKyMJCXNldCAkcHJ1bmUgdG8gcHJ1bmUgdGhlIHRyZWUuCisjCisjIEZvciBleGFtcGxlLAorIworIyAgIGZpbmQgLyAtbmFtZSAubmZzXCogLW10aW1lICs3IC1leGVjIHJtIC1mIHt9IFw7IC1vIC1mc3R5cGUgbmZzIC1wcnVuZQorIworIyBjb3JyZXNwb25kcyB0byB0aGlzCisjCisjCXN1YiB3YW50ZWQgeworIwkgICAgL15cLm5mcy4qJC8gJiYKKyMJICAgICgoJGRldiwkaW5vLCRtb2RlLCRubGluaywkdWlkLCRnaWQpID0gbHN0YXQoJF8pKSAmJgorIwkgICAgaW50KC1NIF8pID4gNyAmJgorIwkgICAgdW5saW5rKCRfKQorIwkgICAgfHwKKyMJICAgICgkbmxpbmsgfHwgKCgkZGV2LCRpbm8sJG1vZGUsJG5saW5rLCR1aWQsJGdpZCkgPSBsc3RhdCgkXykpKSAmJgorIwkgICAgJGRldiA8IDAgJiYKKyMJICAgICgkcHJ1bmUgPSAxKTsKKyMJfQorIworIyBTZXQgdGhlIHZhcmlhYmxlICRkb250X3VzZV9ubGluayBpZiB5b3UncmUgdXNpbmcgQUZTLCBzaW5jZSBBRlMgY2hlYXRzLgorCit1c2UgRmlsZTo6RmluZCAoKTsKKworKm5hbWUJCT0gKkZpbGU6OkZpbmQ6Om5hbWU7CisqcHJ1bmUJCT0gKkZpbGU6OkZpbmQ6OnBydW5lOworKmRpcgkJPSAqRmlsZTo6RmluZDo6ZGlyOworKnRvcGRpcgkJPSAqRmlsZTo6RmluZDo6dG9wZGlyOworKnRvcGRldgkJPSAqRmlsZTo6RmluZDo6dG9wZGV2OworKnRvcGlubwkJPSAqRmlsZTo6RmluZDo6dG9waW5vOworKnRvcG1vZGUJPSAqRmlsZTo6RmluZDo6dG9wbW9kZTsKKyp0b3BubGluawk9ICpGaWxlOjpGaW5kOjp0b3BubGluazsKKworc3ViIGZpbmQgeworICAgICZGaWxlOjpGaW5kOjpmaW5kKFwmd2FudGVkLCBAXyk7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMWVhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpeC1jaXBoZXItZGVzLWVkZTMtY2ZiMS5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitUaGlzIHBhdGNoIGFkZHMgdGhlIGZpeCBmb3Igb25lIG9mIHRoZSBjaXBoZXJzIHVzZWQgaW4gb3BlbnNzbCwgbmFtZWx5Cit0aGUgY2lwaGVyIGRlcy1lZGUzLWNmYjEuIENvbXBsZXRlIGJ1ZyBsb2cgYW5kIHBhdGNoIGlzIHByZXNlbnQgaGVyZToKK2h0dHA6Ly9ydC5vcGVuc3NsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTI4NjcKKworU2lnbmVkLU9mZi1CeTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2VfZGVzMy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by9ldnAvZV9kZXMzLmMKKysrKyBvcGVuc3NsLTEuMC4yL2NyeXB0by9ldnAvZV9kZXMzLmMKK0BAIC0yMTEsNyArMjExLDcgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmIxX2NpcGhlcihFVlBfQ0lQSAorICAgICBzaXplX3QgbjsKKyAgICAgdW5zaWduZWQgY2hhciBjWzFdLCBkWzFdOworIAorLSAgICBmb3IgKG4gPSAwOyBuIDwgaW5sOyArK24pIHsKKysgICAgZm9yIChuID0gMDsgbiAqIDggPCBpbmw7ICsrbikgeworICAgICAgICAgY1swXSA9IChpbltuIC8gOF0gJiAoMSA8PCAoNyAtIG4gJSA4KSkpID8gMHg4MCA6IDA7CisgICAgICAgICBERVNfZWRlM19jZmJfZW5jcnlwdChjLCBkLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEoY3R4KS0+a3MxLCAmZGF0YShjdHgpLT5rczIsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vZS1sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb2UtbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTJlMTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb2UtbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW4tZW1iZWRkZWRdCisKK0luZGV4OiBvcGVuc3NsLTEuMC4wL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjAub3JpZy9NYWtlZmlsZS5zaGFyZWQKKysrKyBvcGVuc3NsLTEuMC4wL01ha2VmaWxlLnNoYXJlZAorQEAgLTkyLDcgKzkyLDcgQEAKKyBMSU5LX0FQUD0JXAorICAgKCAkKFNFVF9YKTsgICBcCisgICAgIExJQkRFUFM9IiQke0xJQkRFUFM6LSQoTElCREVQUyl9IjsgXAorLSAgICBMRENNRD0iJCR7TERDTUQ6LSQoQ0MpfSI7IExERkxBR1M9IiQke0xERkxBR1M6LSQoQ0ZMQUdTKX0iOyBcCisrICAgIExEQ01EPSIkJHtMRENNRDotJChDQyl9IjsgTERGTEFHUz0iJChPRV9MREZMQUdTKSAkJHtMREZMQUdTOi0kKENGTEFHUyl9IjsgXAorICAgICBMSUJQQVRIPWBmb3IgeCBpbiAkJExJQkRFUFM7IGRvIGVjaG8gJCR4OyBkb25lIHwgc2VkIC1lICdzL14gKi1MLy87dCcgLWUgZCB8IHVuaXFgOyBcCisgICAgIExJQlBBVEg9YGVjaG8gJCRMSUJQQVRIIHwgc2VkIC1lICdzLyAvOi9nJ2A7IFwKKyAgICAgTERfTElCUkFSWV9QQVRIPSQkTElCUEFUSDokJExEX0xJQlJBUllfUEFUSCBcCitAQCAtMTAyLDcgKzEwMiw3IEBACisgICAoICQoU0VUX1gpOyAgIFwKKyAgICAgTElCREVQUz0iJCR7TElCREVQUzotJChMSUJERVBTKX0iOyBcCisgICAgIFNIQVJFRENNRD0iJCR7U0hBUkVEQ01EOi0kKENDKX0iOyBcCistICAgIFNIQVJFREZMQUdTPSIkJHtTSEFSRURGTEFHUzotJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpfSI7IFwKKysgICAgU0hBUkVERkxBR1M9IiQoT0VfTERGTEFHUykgJCR7U0hBUkVERkxBR1M6LSQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKX0iOyBcCisgICAgIExJQlBBVEg9YGZvciB4IGluICQkTElCREVQUzsgZG8gZWNobyAkJHg7IGRvbmUgfCBzZWQgLWUgJ3MvXiAqLUwvLzt0JyAtZSBkIHwgdW5pcWA7IFwKKyAgICAgTElCUEFUSD1gZWNobyAkJExJQlBBVEggfCBzZWQgLWUgJ3MvIC86L2cnYDsgXAorICAgICBMRF9MSUJSQVJZX1BBVEg9JCRMSUJQQVRIOiQkTERfTElCUkFSWV9QQVRIIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNWJmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK2h0dHBzOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0zNzU5JnVzZXI9Z3Vlc3QmcGFzcz1ndWVzdAorCitGcm9tIDYyNTdkNTliM2E2OGQyZmViOWQ2NDMxN2ExYzU1NmRjMzgxM2VlNjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBTYXQsIDIxIE1hciAyMDE1IDA2OjAxOjI1IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogdXNlIGJpZ2ludCBpbiB4ODYtNjQgcGVybAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CisKK1doZW4gYnVpbGRpbmcgb24geDMyIHN5c3RlbXMgd2hlcmUgdGhlIGRlZmF1bHQgdHlwZSBpcyAzMmJpdCwgbWFrZSBzdXJlCit3ZSBjYW4gdHJhbnNwYXJlbnRseSByZXByZXNlbnQgNjRiaXQgaW50ZWdlcnMuICBPdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGgKK2J1aWxkIGVycm9ycyBsaWtlOgorL3Vzci9iaW4vcGVybCBhc20vZ2hhc2gteDg2XzY0LnBsIGVsZiA+IGdoYXNoLXg4Nl82NC5zCitJbnRlZ2VyIG92ZXJmbG93IGluIGhleGFkZWNpbWFsIG51bWJlciBhdCBhc20vLi4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwgbGluZSAyMDEsIDw+IGxpbmUgODkwLgorLi4uCitnaGFzaC14ODZfNjQuczogQXNzZW1ibGVyIG1lc3NhZ2VzOgorZ2hhc2gteDg2XzY0LnM6ODkwOiBFcnJvcjoganVuayAnLjE1NDczMzU1NDc5OTk1ZSsxOScgYWZ0ZXIgZXhwcmVzc2lvbgorCitXZSBkb24ndCBlbmFibGUgdGhpcyBnbG9iYWxseSBhcyB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB3ZSdkIGdldAorMzJiaXQgdmFsdWVzIGludGVycHJldGVkIGFzIHVuc2lnbmVkIHdoZW4gd2UgbmVlZCB0aGVtIGFzIHNpZ25lZC4KKworUmVwb3J0ZWQtYnk6IEJlcnRyYW5kIEphY3F1aW4gPGJlcnRyYW5kQGphY3F1aW4uYnpoPgorVVJMOiBodHRwczovL2J1Z3MuZ2VudG9vLm9yZy81NDI2MTgKKy0tLQorIGNyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCBiL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAoraW5kZXggYWFlODI4OC4uMGJmOTc3NCAxMDA3NTUKKy0tLSBhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorKysrIGIvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCitAQCAtMTk1LDYgKzE5NSwxMCBAQCBteSAlZ2xvYmFsczsKKyAgICAgc3ViIG91dCB7CisgICAgIAlteSAkc2VsZiA9IHNoaWZ0OworIAorKwkjIFdoZW4gYnVpbGRpbmcgb24geDMyIEFCSXMsIHRoZSBleHBhbmRlZCBoZXggdmFsdWUgbWlnaHQgYmUgdG9vCisrCSMgYmlnIHRvIGZpdCBpbnRvIDMyYml0cy4gIEVuYWJsZSB0cmFuc3BhcmVudCA2NGJpdCBzdXBwb3J0IGhlcmUKKysJIyBzbyB3ZSBjYW4gc2FmZWx5IHByaW50IGl0IG91dC4KKysJdXNlIGJpZ2ludDsKKyAJaWYgKCRnYXMpIHsKKyAJICAgICMgU29sYXJpcyAvdXNyL2Njcy9iaW4vYXMgY2FuJ3QgaGFuZGxlIG11bHRpcGxpY2F0aW9ucworIAkgICAgIyBpbiAkc2VsZi0+e3ZhbHVlfQorLS0gCisyLjMuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmM4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitvcGVuc3NsOiBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gRVZQX0RpZ2VzdEluaXRfZXgoKQorCitXZSBzaG91bGQgYXZvaWQgYWNjZXNzaW5nIHRoZSB0eXBlIHBvaW50ZXIgaWYgaXQncyBOVUxMLAordGhpcyBjb3VsZCBoYXBwZW4gaWYgY3R4LT5kaWdlc3QgaXMgbm90IE5VTEwuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vb3BlbnNzbC1kZXZAb3BlbnNzbC5vcmcvbXNnMzI4NjAuaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBYdWZlbmcgWmhhbmcgPHh1ZmVuZy56aGFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by9ldnAvZGlnZXN0LmMKKysrKyBvcGVuc3NsLTEuMC4yL2NyeXB0by9ldnAvZGlnZXN0LmMKK0BAIC0yMDgsNyArMjA4LDcgQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYworICAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAjZW5kaWYKKy0gICAgaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpIHsKKysgICAgaWYgKHR5cGUgJiYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpKSB7CisgICAgICAgICBpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQorICAgICAgICAgICAgIE9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworICAgICAgICAgY3R4LT5kaWdlc3QgPSB0eXBlOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0OTcyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorb3BlbnNzbDogRml4IHBvZDJtYW4gZGVzLnBvZCBlcnJvciBvbiBVYnVudHUgMTIuMDQKKworVGhpcyBpcyBhIGZvcm1hdHRpbmcgZml4LCAnPWJhY2snIGlzIHJlcXVpcmVkIGJlZm9yZQorJz1oZWFkMScgb24gVWJ1bnR1IDEyLjA0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEJhb2dlbiBTaGFuZyA8YmFvZ2VuLnNoYW5nQHdpbmRyaXZlci5jb20+CitkaWZmIC11cnBOIGFfb3JpZ2luL2Rlcy5wb2QgYl9tb2RpZnkvZGVzLnBvZAorLS0tIGFfb3JpZ2luL2NyeXB0by9kZXMvZGVzLnBvZAkyMDEzLTA4LTE1IDE1OjAyOjU2LjIxMTY3NDU4OSArMDgwMAorKysrIGJfbW9kaWZ5L2NyeXB0by9kZXMvZGVzLnBvZAkyMDEzLTA4LTE1IDE1OjA0OjE0LjQzOTY3NDU4MCArMDgwMAorQEAgLTE4MSw2ICsxODEsOCBAQCB0aGUgdXVlbmNvZGVkIGZpbGUgdG8gZW1iZWQgaW4gdGhlIGJlZ2luCisgb3V0cHV0LiAgSWYgdGhlcmUgaXMgbm8gbmFtZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlIEI8LXU+LCB0aGUgbmFtZSB0ZXh0LmRlcworIHdpbGwgYmUgZW1iZWRkZWQgaW4gdGhlIGhlYWRlci4KKyAKKys9YmFjaworKworID1oZWFkMSBTRUUgQUxTTworIAorIHBzKDEpLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjZTMyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JlY2VpdmVkIGZyb20gSCBKIExpdSBAIEludGVsCitNYWtlIHRoZSBhc3NlbWJseSBzeW50YXggY29tcGF0aWJsZSB3aXRoIHgzMiBnY2MuIE90aGV3aXNlIHgzMiBnY2MgdGhyb3dzIGVycm9ycy4KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDcvMTMKKworcG9ydGVkIHRoZSBwYXRjaCB0byB0aGUgMS4wLjBlIHZlcnNpb24KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDEKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2NyeXB0by9ibi9ibi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by9ibi9ibi5oCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm4uaAorQEAgLTE3Myw2ICsxNzMsMTMgQEAgZXh0ZXJuICJDIiB7CisgIyAgZW5kaWYKKyAjIGVuZGlmCisgCisrLyogQWRkcmVzcyB0eXBlLiAgKi8KKysjaWZkZWYgX1dJTjY0CisrI2RlZmluZSBCTl9BRERSIHVuc2lnbmVkIGxvbmcgbG9uZworKyNlbHNlCisrI2RlZmluZSBCTl9BRERSIHVuc2lnbmVkIGxvbmcKKysjZW5kaWYKKysKKyAvKgorICAqIGFzc3VtaW5nIGxvbmcgaXMgNjRiaXQgLSB0aGlzIGlzIHRoZSBERUMgQWxwaGEgdW5zaWduZWQgbG9uZyBsb25nIGlzIG9ubHkKKyAgKiA2NCBiaXRzIDotKCwgZG9uJ3QgZGVmaW5lIEJOX0xMT05HIGZvciB0aGUgREVDIEFscGhhCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm5fZXhwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvY3J5cHRvL2JuL2JuX2V4cC5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm5fZXhwLmMKK0BAIC02MzgsNyArNjM4LDcgQEAgc3RhdGljIGludCBNT0RfRVhQX0NUSU1FX0NPUFlfRlJPTV9QUkVCVQorICAqIG11bHRpcGxlLgorICAqLworICNkZWZpbmUgTU9EX0VYUF9DVElNRV9BTElHTih4XykgXAorLSAgICAgICAgKCh1bnNpZ25lZCBjaGFyKikoeF8pICsgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfV0lEVEggLSAoKChzaXplX3QpKHhfKSkgJiAoTU9EX0VYUF9DVElNRV9NSU5fQ0FDSEVfTElORV9NQVNLKSkpKQorKwkoKHVuc2lnbmVkIGNoYXIqKSh4XykgKyAoTU9EX0VYUF9DVElNRV9NSU5fQ0FDSEVfTElORV9XSURUSCAtICgoKEJOX0FERFIpKHhfKSkgJiAoTU9EX0VYUF9DVElNRV9NSU5fQ0FDSEVfTElORV9NQVNLKSkpKQorIAorIC8qCisgICogVGhpcyB2YXJpYW50IG9mIEJOX21vZF9leHBfbW9udCgpIHVzZXMgZml4ZWQgd2luZG93cyBhbmQgdGhlIHNwZWNpYWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3B0ZXN0LWRlcHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdC1kZXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmQxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdC1kZXBzLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1JlbW92ZSBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9yIHRlc3QgdGFyZ2V0cworCitUaGVzZSBhcmUgcHJvYmFibHkgaGVyZSBiZWNhdXNlIHRoZSBleGVjdXRhYmxlcyBhcmVuJ3QgYWx3YXlzIGJ1aWx0IGZvcgorb3RoZXIgcGxhdGZvcm1zIChlLmcuIFdpbmRvd3MpOyBob3dldmVyIHdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoZXknbGwKK2Fsd2F5cyBiZSB0aGVyZS4gTm9uZSBvZiB0aGUgb3RoZXIgdGVzdCB0YXJnZXRzIGhhdmUgc3VjaCBkZXBlbmRlbmNpZXMKK2FuZCBpZiB3ZSBkb24ndCByZW1vdmUgdGhlbSwgbWFrZSB0cmllcyB0byByZWJ1aWxkIHRoZSBleGVjdXRhYmxlcyBhbmQKK2ZhaWxzIGR1cmluZyBydW4tcHRlc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy90ZXN0L01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMi90ZXN0L01ha2VmaWxlCitAQCAtMzMwLDcgKzMzMCw3IEBAIHRlc3RfY21zOiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIGNtcy0KKyAJQGVjaG8gIkNNUyBjb25zaXN0ZW5jeSB0ZXN0IgorIAkkKFBFUkwpIGNtcy10ZXN0LnBsCisgCistdGVzdF9zcnA6ICQoU1JQVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9zcnA6CisgCUBlY2hvICJUZXN0IFNSUCIKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vc3JwdGVzdAorIAorQEAgLTM0Miw3ICszNDIsNyBAQCB0ZXN0X3YzbmFtZTogJChWM05BTUVURVNUKSQoRVhFX0VYVCkKKyAJQGVjaG8gIlRlc3QgWDUwOXYzX2NoZWNrXyoiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoVjNOQU1FVEVTVCkKKyAKKy10ZXN0X2hlYXJ0YmVhdDogJChIRUFSVEJFQVRURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X2hlYXJ0YmVhdDoKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChIRUFSVEJFQVRURVNUKQorIAorIHRlc3RfY29uc3RhbnRfdGltZTogJChDT05TVFRJTUVURVNUKSQoRVhFX0VYVCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjIwZmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3NoYXJlZC1saWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvc2hhcmVkLWxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjYTBhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3NoYXJlZC1saWJzLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFlLm9yaWcvY3J5cHRvL01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL01ha2VmaWxlCitAQCAtMTA4LDcgKzEwOCw3IEBAICQoTElCKToJJChMSUJPQkopCisgCisgc2hhcmVkOiBidWlsZGluZi5oIGxpYiBzdWJkaXJzCisgCWlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKy0JCShjZCAuLjsgJChNQUtFKSAkKFNIQVJFRF9MSUIpKTsgXAorKwkJKGNkIC4uOyAkKE1BS0UpIC1lICQoU0hBUkVEX0xJQikpOyBcCisgCWZpCisgCisgbGliczoKK0luZGV4OiBvcGVuc3NsLTEuMC4xZS9NYWtlZmlsZS5vcmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xZS5vcmlnL01ha2VmaWxlLm9yZworKysrIG9wZW5zc2wtMS4wLjFlL01ha2VmaWxlLm9yZworQEAgLTMxMCw3ICszMTAsNyBAQCBsaWJjcnlwdG8kKFNITElCX0VYVCk6IGxpYmNyeXB0by5hIGZpcHNfCisgCisgbGlic3NsJChTSExJQl9FWFQpOiBsaWJjcnlwdG8kKFNITElCX0VYVCkgbGlic3NsLmEKKyAJQGlmIFsgIiQoU0hMSUJfVEFSR0VUKSIgIT0gIiIgXTsgdGhlbiBcCistCQkkKE1BS0UpIFNITElCRElSUz1zc2wgU0hMSUJERVBTPSctbGNyeXB0bycgYnVpbGQtc2hhcmVkOyBcCisrCQkkKE1BS0UpIC1lIFNITElCRElSUz1zc2wgU0hMSUJERVBTPSctbGNyeXB0bycgYnVpbGQtc2hhcmVkOyBcCisgCWVsc2UgXAorIAkJZWNobyAiVGhlcmUncyBubyBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoaXMgcGxhdGZvcm0iID4mMjsgXAorIAkJZXhpdCAxOyBcCitJbmRleDogb3BlbnNzbC0xLjAuMWUvc3NsL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWUub3JpZy9zc2wvTWFrZWZpbGUKKysrKyBvcGVuc3NsLTEuMC4xZS9zc2wvTWFrZWZpbGUKK0BAIC02Miw3ICs2Miw3IEBAIGxpYjoJJChMSUJPQkopCisgCisgc2hhcmVkOiBsaWIKKyAJaWYgWyAtbiAiJChTSEFSRURfTElCUykiIF07IHRoZW4gXAorLQkJKGNkIC4uOyAkKE1BS0UpICQoU0hBUkVEX0xJQikpOyBcCisrCQkoY2QgLi47ICQoTUFLRSkgLWUgJChTSEFSRURfTElCKSk7IFwKKyAJZmkKKyAKKyBmaWxlczoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQ4ZGNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4wLjJkLmJiCkBAIC0wLDAgKzEsNTcgQEAKK3JlcXVpcmUgb3BlbnNzbC5pbmMKKworIyBGb3IgdGFyZ2V0IHNpZGUgdmVyc2lvbnMgb2Ygb3BlbnNzbCBlbmFibGUgc3VwcG9ydCBmb3IgT0NGIExpbnV4IGRyaXZlcgorIyBpZiB0aGV5IGFyZSBhdmFpbGFibGUuCitERVBFTkRTICs9ICJjcnlwdG9kZXYtbGludXgiCisKK0NGTEFHICs9ICItREhBVkVfQ1JZUFRPREVWIC1EVVNFX0NSWVBUT0RFVl9ESUdFU1RTIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mOWE4Zjk2ODEwNzM0NWUwYjc1YWE4YzJlY2FhN2VjOCIKKworZXhwb3J0IERJUlMgPSAiY3J5cHRvIHNzbCBhcHBzIGVuZ2luZXMiCitleHBvcnQgT0VfTERGTEFHUz0iJHtMREZMQUdTfSIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS10YXJnZXRzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zaGFyZWQtbGlicy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb2UtbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jYS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbWFuLWRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbm8tcnBhdGgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9uby1zeW1ib2xpYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL3BpYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maW5kLnBsIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZXMtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B0ZXN0LWRlcHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vY3J5cHRvX3VzZV9iaWdpbnRfaW5feDg2LTY0X3BlcmwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOGRkNjE5YjJlNzdjYmFjNjliOTlmNTJhMDUzZDI1YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NzFjMzY0ODc3ODU2MjhhNzAzMzc0YzY1MmFkMmNlYmVhNDVmYTkyMGFlNTY4MTUxNWRmMjVkOWYyYzlhOGM4IgorCitQQUNLQUdFUyA9KyAiIFwKKwkke1BOfS1lbmdpbmVzIFwKKwkke1BOfS1lbmdpbmVzLWRiZyBcCisJIgorCitGSUxFU18ke1BOfS1lbmdpbmVzID0gIiR7bGliZGlyfS9zc2wvZW5naW5lcy8qLnNvICR7bGliZGlyfS9lbmdpbmVzIgorRklMRVNfJHtQTn0tZW5naW5lcy1kYmcgPSAiJHtsaWJkaXJ9L3NzbC9lbmdpbmVzLy5kZWJ1ZyIKKworUEFSQUxMRUxfTUFLRSA9ICIiCitQQVJBTExFTF9NQUtFSU5TVCA9ICIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICBjcCAke1dPUktESVJ9L2ZpbmQucGwgJHtTfS91dGlsL2ZpbmQucGwKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhhZjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiUlBDIHByb2dyYW0gbnVtYmVyIG1hcHBlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvcG9ydG1hcC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcG9ydG1hcC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MzE7bWQ1PTUxZmY2N2U2NmVjODRiMjAwOWIwMTdiMWY5NGFmYmY0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Zyb21fbG9jYWwuYztiZWdpbmxpbmU9OTtlbmRsaW5lPTM1O21kNT0xYmVjOTM4YTIyNjhiOGI0MjNjNTg4MDFhY2UzYWRjMSIKKworSU5JVFNDUklQVF9OQU1FID0gInBvcnRtYXAiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAxMCAyIDMgNCA1IC4gc3RvcCAzMiAwIDEgNiAuIgorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInBvcnRtYXAuc2VydmljZSIKKworUEFDS0FHRVMgPSsgInBvcnRtYXAtdXRpbHMiCitGSUxFU19wb3J0bWFwLXV0aWxzID0gIiR7YmFzZV9zYmluZGlyfS9wbWFwX3NldCAke2Jhc2Vfc2JpbmRpcn0vcG1hcF9kdW1wIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RvY2Rpcn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvZGVzdGRpci1uby1zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmJmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvZGVzdGRpci1uby1zdHJpcC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK0RhdGU6IFN1biwgMTMgTWF5IDIwMDcgMjE6MTU6MTIgKzAwMDAgKC0wNDAwKQorU3ViamVjdDogcmVzcGVjdCBERVNURElSIGFuZCBkb250IHVzZSAtcyB3aXRoIGluc3RhbGwKK1gtR2l0LVVybDogaHR0cDovL25laWwuYnJvd24ubmFtZS9naXQ/cD1wb3J0bWFwO2E9Y29tbWl0ZGlmZl9wbGFpbjtoPTYwM2M1OWI5NzhjMDRkZjIzNTRmNjhkNGEyZGM2NzZhNzU4ZmY0NmQKKworcmVzcGVjdCBERVNURElSIGFuZCBkb250IHVzZSAtcyB3aXRoIGluc3RhbGwKKworJChERVNURElSKSBpcyB0aGUgc3RhbmRhcmQgZm9yIGluc3RhbGxpbmcgaW50byBvdGhlciB0cmVlcywgbm90ICQoQkFTRURJUikgLi4uCitzbyBJJ3ZlIGNvbnZlcnRlZCB0aGUgTWFrZWZpbGUgdG8gdXNlIHRoYXQuICBJJ3ZlIGFsc28gbGVmdCBpbiAkKEJBU0VESVIpIGFzIGEKK2RlZmF1bHQgdG8gc3VwcG9ydCBvbGQgaW5zdGFsbHM7IG5vdCBzdXJlIGlmIHlvdSdkIGp1c3QgY3V0IGl0LgorCitTdHJpcHBpbmcgc2hvdWxkIGJlIGxlZnQgdG8gdGhlIHBlcnNvbiB0byBoYW5kbGUsIG5vdCBhdXRvbWF0aWNhbGx5IGRvbmUgYnkKK3RoZSBpbnN0YWxsIHN0ZXAuICBBbHNvLCBgaW5zdGFsbCAtc2AgYWx3YXlzIGNhbGxzIGBzdHJpcGAgd2hpY2ggaXMKK3dyb25nL3VuZGVzaXJlZCBpbiBjcm9zcy1jb21waWxpbmcgc2NlbmFyaW9zLgorCitTaWduZWQtb2ZmLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitTaWduZWQtb2ZmLWJ5OiBOZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRlPgorLS0tCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA5ZTlhNGI0Li41MzQzNDI4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMTM1LDEzICsxMzUsMTQgQEAgZnJvbV9sb2NhbDogQ1BQRkxBR1MgKz0gLURURVNUCisgcG9ydG1hcC5tYW4gOiBwb3J0bWFwLjgKKyAJc2VkICQoTUFOX1NFRCkgPCBwb3J0bWFwLjggPiBwb3J0bWFwLm1hbgorIAorK0RFU1RESVIgPSAkKEJBU0VESVIpCisgaW5zdGFsbDogYWxsCistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG9ydG1hcCAke0JBU0VESVJ9L3NiaW4KKy0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSAtcyBwbWFwX2R1bXAgJHtCQVNFRElSfS9zYmluCistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG1hcF9zZXQgJHtCQVNFRElSfS9zYmluCistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG9ydG1hcC5tYW4gJHtCQVNFRElSfS91c3Ivc2hhcmUvbWFuL21hbjgvcG9ydG1hcC44CistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9kdW1wLjggJHtCQVNFRElSfS91c3Ivc2hhcmUvbWFuL21hbjgKKy0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwbWFwX3NldC44ICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44CisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG9ydG1hcCAkKERFU1RESVIpL3NiaW4KKysJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSBwbWFwX2R1bXAgJChERVNURElSKS9zYmluCisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG1hcF9zZXQgJChERVNURElSKS9zYmluCisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG9ydG1hcC5tYW4gJChERVNURElSKS91c3Ivc2hhcmUvbWFuL21hbjgvcG9ydG1hcC44CisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9kdW1wLjggJChERVNURElSKS91c3Ivc2hhcmUvbWFuL21hbjgKKysJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwbWFwX3NldC44ICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44CisgCisgY2xlYW46CisgCXJtIC1mICoubyBwb3J0bWFwIHBtYXBfZHVtcCBwbWFwX3NldCBmcm9tX2xvY2FsIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MjFhYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5pbml0CkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorIworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgcG9ydG1hcAorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsKKyMgUmVxdWlyZWQtU3RvcDogICAgICRuZXR3b3JrCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBUaGUgUlBDIHBvcnRtYXBwZXIKKyMgRGVzY3JpcHRpb246ICAgICAgIFBvcnRtYXAgaXMgYSBzZXJ2ZXIgdGhhdCBjb252ZXJ0cyBSUEMgKFJlbW90ZQorIyAgICAgICAgICAgICAgICAgICAgUHJvY2VkdXJlIENhbGwpIHByb2dyYW0gbnVtYmVycyBpbnRvIERBUlBBCisjICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCBwb3J0IG51bWJlcnMuIEl0IG11c3QgYmUgcnVubmluZyBpbgorIyAgICAgICAgICAgICAgICAgICAgb3JkZXIgdG8gbWFrZSBSUEMgY2FsbHMuIFNlcnZpY2VzIHRoYXQgdXNlCisjICAgICAgICAgICAgICAgICAgICBSUEMgaW5jbHVkZSBORlMgYW5kIE5JUy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK3Rlc3QgLWYgL3NiaW4vcG9ydG1hcCB8fCBleGl0IDAKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgcG9ydG1hcCBkYWVtb24uLi4iCisgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3NiaW4vcG9ydG1hcAorCisJaWYgWyAtZiAvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUgXTsgdGhlbgorICAgICAgICAgIGVjaG8gIlJlc3RvcmluZyBvbGQgUlBDIHNlcnZpY2UgaW5mb3JtYXRpb24uLi4iCisgICAgICAgICAgc2xlZXAgMSAjIG5lZWRzIGEgc2hvcnQgcGF1c2Ugb3IgcG1hcF9zZXQgd29uJ3Qgd29yay4gOigKKwkgIHBtYXBfc2V0IDwvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUKKwkgIHJtIC1mIC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZQorICAgICAgICAgIGVjaG8gImRvbmUuIgorICAgICAgICBmaQorCisJOzsKKyAgICBzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyBwb3J0bWFwIGRhZW1vbi4uLiIKKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjIC9zYmluL3BvcnRtYXAKKwk7OworICAgIHJlbG9hZCkKKwk7OworICAgIGZvcmNlLXJlbG9hZCkKKyAgICAgICAgJDAgcmVzdGFydAorCTs7CisgICAgcmVzdGFydCkKKwkjIHBtYXBfZHVtcCBhbmQgcG1hcF9zZXQgbWF5IGJlIGluIGEgZGlmZmVyZW50IHBhY2thZ2UgYW5kIG5vdCBpbnN0YWxsZWQuLi4KKwlpZiBbIC1mIC9zYmluL3BtYXBfZHVtcCAtYSAtZiAvc2Jpbi9wbWFwX3NldCBdOyB0aGVuCisJCWRvX3N0YXRlPTEKKwllbHNlCisJCWRvX3N0YXRlPTAKKwlmaQorCVsgJGRvX3N0YXRlIC1lcSAxIF0gJiYgcG1hcF9kdW1wID4vdmFyL3J1bi9wb3J0bWFwLnN0YXRlCisgICAgICAgICQwIHN0b3AKKyAgICAgICAgJDAgc3RhcnQKKwlpZiBbICRkb19zdGF0ZSAtZXEgMSBdOyB0aGVuCisJICBpZiBbICEgLWYgL3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlIF07IHRoZW4KKyAgICAgICAgICAgIHNsZWVwIDEKKwkgICAgcG1hcF9zZXQgPC92YXIvcnVuL3BvcnRtYXAuc3RhdGUKKwkgIGZpCisJICBybSAtZiAvdmFyL3J1bi9wb3J0bWFwLnN0YXRlCisJZmkKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3BvcnRtYXAge3N0YXJ0fHN0b3B8cmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmOWQ3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVRoZSBSUEMgcG9ydG1hcHBlcgorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AQkFTRV9TQklORElSQC9wb3J0bWFwCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvdGNwZC1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyNTA1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworRnJvbTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorRGF0ZTogU3VuLCAxMyBNYXkgMjAwNyAyMToxNzozMiArMDAwMCAoLTA0MDApCitTdWJqZWN0OiBmaXggYnVpbGRpbmcgd2l0aCB0Y3BkIHN1cHBvcnQgZGlzYWJsZWQKK1gtR2l0LVVybDogaHR0cDovL25laWwuYnJvd24ubmFtZS9naXQ/cD1wb3J0bWFwO2E9Y29tbWl0ZGlmZl9wbGFpbjtoPTc4NDcyMDdhZWQxYjQ0ZmFmMDc3ZWVkMTRhOWFjOWM2ODI0NGViYTUKKworZml4IGJ1aWxkaW5nIHdpdGggdGNwZCBzdXBwb3J0IGRpc2FibGVkCisKK01ha2Ugc3VyZSBwbWFwX2NoZWNrLmMgb25seSBpbmNsdWRlcyB0Y3BkLmggd2hlbiBIT1NUU19BQ0NFU1MgaXMgZGVmaW5lZC4KKworU2lnbmVkLW9mZi1ieTogVGltb3RoeSBSZWRhZWxsaSA8ZHJpenp0QGdlbnRvby5vcmc+CitTaWduZWQtb2ZmLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitTaWduZWQtb2ZmLWJ5OiBOZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRlPgorLS0tCisKK2RpZmYgLS1naXQgYS9wbWFwX2NoZWNrLmMgYi9wbWFwX2NoZWNrLmMKK2luZGV4IDg0ZjJjMTIuLjQ0M2E4MjIgMTAwNjQ0CistLS0gYS9wbWFwX2NoZWNrLmMKKysrKyBiL3BtYXBfY2hlY2suYworQEAgLTQ0LDcgKzQ0LDkgQEAKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxycGMvcnBjZW50Lmg+CisgI2VuZGlmCisrI2lmZGVmIEhPU1RTX0FDQ0VTUworICNpbmNsdWRlIDx0Y3BkLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxncnAuaD4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI3ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXBfNi4wLmJiCkBAIC0wLDAgKzEsMzEgQEAKK3JlcXVpcmUgcG9ydG1hcC5pbmMKKworUFIgPSAicjkiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5zb3VyY2VmaWxlcy5vcmcvTmV0d29ya2luZy9Ub29scy9NaXNjZWxsYW5lbm91cy9wb3J0bWFwLTYuMC50Z3ogXAorICAgICAgICAgICBmaWxlOi8vZGVzdGRpci1uby1zdHJpcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y3BkLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wb3J0bWFwLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vcG9ydG1hcC5zZXJ2aWNlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWMxMDhhYjY4YmYwZjM0NDc3ZjgzMTc3OTFhYWYxZmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDJjODIwZDM5ZjNlNmU3MjlkMWJlYTMyODdhMmQ4YTZjNjg0ZjEwMDZmYjk2MTJmOTdkY2FkNGEyODFkNDFkZSIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfV8ke1BWfS8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLCx0Y3Atd3JhcHBlcnMiCisKK0NQUEZMQUdTICs9ICItREZBQ0lMSVRZPUxPR19EQUVNT04gLURFTkFCTEVfRE5TIC1ESE9TVFNfQUNDRVNTIgorQ0ZMQUdTICs9ICItV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1mUElDIgorRVhUUkFfT0VNQUtFICs9ICInTk9fVENQX1dSQVBQRVI9JHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndGNwLXdyYXBwZXJzJywgJycsICcxJywgZCl9JyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOC8gJHtEfSR7YmFzZV9zYmluZGlyfSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wb3J0bWFwLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcnRtYXAKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9CisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcG9ydG1hcC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgc2VkIC1pIC1lICdzLEBCQVNFX1NCSU5ESVJALCR7YmFzZV9zYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3J0bWFwLnNlcnZpY2UKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9ob3N0LXBlZXIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvaG9zdC1wZWVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTJlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvaG9zdC1wZWVyCkBAIC0wLDAgKzEsMTEgQEAKKy1kZXRhY2gKK2RlZmF1bHRyb3V0ZQorbm9jcnRzY3RzCitsb2NrCitub2F1dGgKK2xjcC1lY2hvLWludGVydmFsIDUKK2xjcC1lY2hvLWZhaWx1cmUgMwordXNlcGVlcmRucworMTE1MjAwCitsb2NhbAorYXN5bmNtYXAgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL3BwcC1kaWFsaW4gYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvcHBwLWRpYWxpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTI3NzEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL3BwcC1kaWFsaW4KQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworL3Vzci9zYmluL3BwcGQgY2FsbCBob3N0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhNzZiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9wcHAtZGlhbGluXzAuMS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkVuYWJsZXMgUFBQIGRpYWwtaW4gdGhyb3VnaCBhIHNlcmlhbCBjb25uZWN0aW9uIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gInBwcCIKK1JERVBFTkRTXyR7UE59ID0gInBwcCIKK1BSID0gInI4IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaG9zdC1wZWVyIFwKKyAgICAgICAgICAgZmlsZTovL3BwcC1kaWFsaW4iCisKK2luaGVyaXQgYWxsYXJjaCB1c2VyYWRkCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2hvc3QtcGVlciAke0R9JHtzeXNjb25mZGlyfS9wcHAvcGVlcnMvaG9zdAorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BwcC1kaWFsaW4gJHtEfSR7c2JpbmRpcn0KK30KKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAke3NiaW5kaXJ9L3BwcC1kaWFsaW4gXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLXVzZXItZ3JvdXAgLS1naWQgbm9ncm91cCBwcHAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDAwMS1wcHAtRml4LWNvbXBpbGF0aW9uLWVycm9ycy1pbi1NYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC8wMDAxLXBwcC1GaXgtY29tcGlsYXRpb24tZXJyb3JzLWluLU1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYTJkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDAwMS1wcHAtRml4LWNvbXBpbGF0aW9uLWVycm9ycy1pbi1NYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDc1IEBACitGcm9tIGJhMGY2MDU4ZDFmMjViMmI2MGZjMzFhYjI2NTZiZjEyYTcxZmZkYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgNSBOb3YgMjAxMyAxNzozMjo1NiArMDgwMAorU3ViamVjdDogW1BBVENIXSBwcHA6IEZpeCBjb21waWxhdGlvbiBlcnJvcnMgaW4gTWFrZWZpbGUKKworVGhpcyBwYXRjaCBmaXhlcyBiZWxvdyBpc3N1ZXM6CisKKzEuIE1ha2UgY2FuJ3QgZXhpdCB3aGlsZSBjb21waWxhdGlvbiBlcnJvciBvY2N1cnMgaW4gc3ViZGlyIGZvciBwbHVnaW5zIGJ1aWxkaW5nLgorCisyLiBJZiBidWlsZCBwcHAgd2l0aCBuZXdlciBrZXJuZWwgKDMuMTAuMTApLCBpdCB3aWxsIHBpY2sgJ2lmX3BwcG94LmgnIGZyb20gc3lzcm9vdC1kaXIgYW5kCisgICAnaWZfcHBwb2wydHAuaCcgZnJvbSBpdHMgb3duIHNvdXJjZSBkaXIsIHRoaXMgY2F1c2UgYmVsb3cgYnVpbGQgZXJyb3JzOgorCisgICAgICAgIGJpdGJha2VfYnVpbGQvdG1wL3N5c3Jvb3RzL2ludGVsLXg4Ni02NC91c3IvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oOjg0OjI2OgorICAgICAgICBlcnJvcjogZmllbGQgJ3BwcG9sMnRwJyBoYXMgaW5jb21wbGV0ZSB0eXBlCisgICAgICAgICAgc3RydWN0IHBwcG9sMnRwaW42X2FkZHIgcHBwb2wydHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICBiaXRiYWtlX2J1aWxkL3RtcC9zeXNyb290cy9pbnRlbC14ODYtNjQvdXNyL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaDo5OToyODoKKyAgICAgICAgZXJyb3I6IGZpZWxkICdwcHBvbDJ0cCcgaGFzIGluY29tcGxldGUgdHlwZQorICAgICAgICAgIHN0cnVjdCBwcHBvbDJ0cHYzaW42X2FkZHIgcHBwb2wydHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisKK1RoZSAnc3lzcm9vdC1kaXIvaWZfcHBwb3guaCcgZW5hYmxlZCBpcHY2IHN1cHBvcnQgYnV0IHRoZSAnc291cmNlLWRpci9pZl9wcHBvbDJ0cC5oJyBsb3N0CityZWxhdGVkIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgd2Ugc2hvdWxkIHVzZSBib3RoIGhlYWRlciBmaWxlcyBmcm9tIHN5c3Jvb3RzIHRvIGZpeCB0aGlzCitidWlsZCBmYWlsdXJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBwcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXggICAgICAgICAgfCAgICAyICstCisgcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4IHwgICAgMiArLQorIHBwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCB8ICAgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eAoraW5kZXggMGE3ZWM3Yi4uMmEyYzE1YSAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4CitAQCAtMjAsNyArMjAsNyBAQCBpbmNsdWRlIC5kZXBlbmQKKyBlbmRpZgorIAorIGFsbDoJJChQTFVHSU5TKQorLQlmb3IgZCBpbiAkKFNVQkRJUlMpOyBkbyAkKE1BS0UpICQoTUZMQUdTKSAtQyAkJGQgYWxsOyBkb25lCisrCWZvciBkIGluICQoU1VCRElSUyk7IGRvICQoTUFLRSkgJChNRkxBR1MpIC1DICQkZCBhbGwgfHwgZXhpdCAxOyBkb25lCisgCisgJS5zbzogJS5jCisgCSQoQ0MpIC1vICRAICQoTERGTEFHUykgJChDRkxBR1MpICReCitkaWZmIC0tZ2l0IGEvcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4IGIvcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4CitpbmRleCAxOWVmZjY3Li5mZWIyZjUyIDEwMDY0NAorLS0tIGEvcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4CisrKysgYi9wcHBkL3BsdWdpbnMvcHBwb2wydHAvTWFrZWZpbGUubGludXgKK0BAIC0xLDYgKzEsNiBAQAorICNDQwk9IGdjYworIENPUFRTCT0gLU8yIC1nCistQ0ZMQUdTCT0gJChDT1BUUykgLUkuIC1JLi4vLi4gLUkuLi8uLi8uLi9pbmNsdWRlIC1mUElDCisrQ0ZMQUdTCT0gJChDT1BUUykgLUkuIC1JLi4vLi4gLWZQSUMKKyBMREZMQUdTCT0gLXNoYXJlZAorIElOU1RBTEwJPSBpbnN0YWxsCisgCitkaWZmIC0tZ2l0IGEvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4IGIvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CitpbmRleCBmMDc4OTkxLi4xNWI5MTE4IDEwMDY0NAorLS0tIGEvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CisrKysgYi9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXgKK0BAIC0yNiw3ICsyNiw3IEBAIElOU1RBTEwJPSBpbnN0YWxsCisgUlBfVkVSU0lPTj0zLjhwCisgCisgQ09QVFM9LU8yIC1nCistQ0ZMQUdTPSQoQ09QVFMpIC1JLi4vLi4vLi4vaW5jbHVkZSAnLURSUF9WRVJTSU9OPSIkKFJQX1ZFUlNJT04pIicKKytDRkxBR1M9JChDT1BUUykgJy1EUlBfVkVSU0lPTj0iJChSUF9WRVJTSU9OKSInCisgYWxsOiBycC1wcHBvZS5zbyBwcHBvZS1kaXNjb3ZlcnkKKyAKKyBwcHBvZS1kaXNjb3Zlcnk6IHBwcG9lLWRpc2NvdmVyeS5vIGRlYnVnLm8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDhzZXR1cGRucyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC8wOHNldHVwZG5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODIxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDhzZXR1cGRucwpAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKK0FDVFVBTENPTkY9L3Zhci9ydW4vcmVzb2x2LmNvbmYKK1BQUENPTkY9L3Zhci9ydW4vcHBwL3Jlc29sdi5jb25mCitpZiBbIC1mICRQUFBDT05GIF0gOyB0aGVuCisJaWYgWyAtZiAkQUNUVUFMQ09ORiBdIDsgdGhlbgorCQlpZiBbICEgLWggJEFDVFVBTENPTkYgLW8gISAiYHJlYWRsaW5rICRBQ1RVQUxDT05GIDI+JjFgIiA9ICIkUFBQQ09ORiIgXSA7IHRoZW4KKwkJCW12ICRBQ1RVQUxDT05GICRBQ1RVQUxDT05GLnBwcG9yaWcKKwkJZmkKKwlmaQorCisJbG4gLXNmICRQUFBDT05GICRBQ1RVQUxDT05GCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWRlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvOTJyZW1vdmVkbnMKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKK0FDVFVBTENPTkY9L3Zhci9ydW4vcmVzb2x2LmNvbmYKK2lmIFsgLWYgJEFDVFVBTENPTkYucHBwb3JpZyBdIDsgdGhlbgorCW12ICRBQ1RVQUxDT05GLnBwcG9yaWcgJEFDVFVBTENPTkYKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZGJjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jaWZkZWZyb3V0ZS5wYXRjaApAQCAtMCwwICsxLDI5MiBAQAorVGhpcyBwYXRjaCBjb21lcyBmcm9tIE9wZW5FbWJlZGRlZC4KK1RoZSBvcmlnaW5hbCBwYXRjaCBpcyBmcm9tIERlYmlhbiAvIFN1U0UgdG8gaW1wbGVtZW50IHJlcGxhY2VkZWZhdWx0cm91dGUKK1JlYmFzZWQgaXQgdG8gZml0IHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4vc3VzZSBwYXRjaGVzXQorCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmMgcHBwLTIuNC41L3BwcGQvaXBjcC5jCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmMJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9pcGNwLmMJMjAxMC0wNi0zMCAxNjo0MDowMC40Nzg3MTY4NTUgKzA4MDAKK0BAIC0xOTgsNiArMTk4LDE2IEBACisgICAgICAgImRpc2FibGUgZGVmYXVsdHJvdXRlIG9wdGlvbiIsIE9QVF9BTElBUyB8IE9QVF9BMkNMUiwKKyAgICAgICAmaXBjcF93YW50b3B0aW9uc1swXS5kZWZhdWx0X3JvdXRlIH0sCisgCisrI2lmZGVmIF9fbGludXhfXworKyAgICB7ICJyZXBsYWNlZGVmYXVsdHJvdXRlIiwgb19ib29sLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXBjcF93YW50b3B0aW9uc1swXS5yZXBsYWNlX2RlZmF1bHRfcm91dGUsCisrICAgICAgIlJlcGxhY2UgZGVmYXVsdCByb3V0ZSIsIDEKKysgICAgfSwKKysgICAgeyAibm9yZXBsYWNlZGVmYXVsdHJvdXRlIiwgb19ib29sLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXBjcF9hbGxvd29wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlLAorKyAgICAgICJOZXZlciByZXBsYWNlIGRlZmF1bHQgcm91dGUiLCBPUFRfQTJDT1BZLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXBjcF93YW50b3B0aW9uc1swXS5yZXBsYWNlX2RlZmF1bHRfcm91dGUgfSwKKysjZW5kaWYKKyAgICAgeyAicHJveHlhcnAiLCBvX2Jvb2wsICZpcGNwX3dhbnRvcHRpb25zWzBdLnByb3h5X2FycCwKKyAgICAgICAiQWRkIHByb3h5IEFSUCBlbnRyeSIsIE9QVF9FTkFCTEV8MSwgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnByb3h5X2FycCB9LAorICAgICB7ICJub3Byb3h5YXJwIiwgb19ib29sLCAmaXBjcF9hbGxvd29wdGlvbnNbMF0ucHJveHlfYXJwLAorQEAgLTI3MSw3ICsyODEsNyBAQAorICAgICBpcF9hY3RpdmVfcGt0CisgfTsKKyAKKy1zdGF0aWMgdm9pZCBpcGNwX2NsZWFyX2FkZHJzIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCkpOworK3N0YXRpYyB2b2lkIGlwY3BfY2xlYXJfYWRkcnMgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90LCBib29sKSk7Cisgc3RhdGljIHZvaWQgaXBjcF9zY3JpcHQgX19QKChjaGFyICosIGludCkpOwkvKiBSdW4gYW4gdXAvZG93biBzY3JpcHQgKi8KKyBzdGF0aWMgdm9pZCBpcGNwX3NjcmlwdF9kb25lIF9fUCgodm9pZCAqKSk7CisgCitAQCAtMTc0Miw3ICsxNzUyLDEyIEBACisgICAgIGlmICghc2lmbnBtb2RlKHUsIFBQUF9JUCwgTlBNT0RFX1FVRVVFKSkKKyAJcmV0dXJuIDA7CisgICAgIGlmICh3by0+ZGVmYXVsdF9yb3V0ZSkKKysjaWZuZGVmIF9fbGludXhfXworIAlpZiAoc2lmZGVmYXVsdHJvdXRlKHUsIHdvLT5vdXJhZGRyLCB3by0+aGlzYWRkcikpCisrI2Vsc2UKKysJaWYgKHNpZmRlZmF1bHRyb3V0ZSh1LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3by0+cmVwbGFjZV9kZWZhdWx0X3JvdXRlKSkKKysjZW5kaWYKKyAJICAgIGRlZmF1bHRfcm91dGVfc2V0W3VdID0gMTsKKyAgICAgaWYgKHdvLT5wcm94eV9hcnApCisgCWlmIChzaWZwcm94eWFycCh1LCB3by0+aGlzYWRkcikpCitAQCAtMTgzMCw3ICsxODQ1LDggQEAKKyAgICAgICovCisgICAgIGlmIChkZW1hbmQpIHsKKyAJaWYgKGdvLT5vdXJhZGRyICE9IHdvLT5vdXJhZGRyIHx8IGhvLT5oaXNhZGRyICE9IHdvLT5oaXNhZGRyKSB7CistCSAgICBpcGNwX2NsZWFyX2FkZHJzKGYtPnVuaXQsIHdvLT5vdXJhZGRyLCB3by0+aGlzYWRkcik7CisrCSAgICBpcGNwX2NsZWFyX2FkZHJzKGYtPnVuaXQsIHdvLT5vdXJhZGRyLCB3by0+aGlzYWRkciwgCisrCQkJCSAgICAgIHdvLT5yZXBsYWNlX2RlZmF1bHRfcm91dGUpOworIAkgICAgaWYgKGdvLT5vdXJhZGRyICE9IHdvLT5vdXJhZGRyKSB7CisgCQl3YXJuKCJMb2NhbCBJUCBhZGRyZXNzIGNoYW5nZWQgdG8gJUkiLCBnby0+b3VyYWRkcik7CisgCQlzY3JpcHRfc2V0ZW52KCJPTERJUExPQ0FMIiwgaXBfbnRvYSh3by0+b3VyYWRkciksIDApOworQEAgLTE4NTUsNyArMTg3MSwxMiBAQAorIAorIAkgICAgLyogYXNzaWduIGEgZGVmYXVsdCByb3V0ZSB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgaWYgcmVxdWlyZWQgKi8KKyAJICAgIGlmIChpcGNwX3dhbnRvcHRpb25zW2YtPnVuaXRdLmRlZmF1bHRfcm91dGUpIAorKyNpZm5kZWYgX19saW51eF9fCisgCQlpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkcikpCisrI2Vsc2UKKysJCWlmIChzaWZkZWZhdWx0cm91dGUoZi0+dW5pdCwgZ28tPm91cmFkZHIsIGhvLT5oaXNhZGRyLAorKwkJCQkJICAgICB3by0+cmVwbGFjZV9kZWZhdWx0X3JvdXRlKSkKKysjZW5kaWYKKyAJCSAgICBkZWZhdWx0X3JvdXRlX3NldFtmLT51bml0XSA9IDE7CisgCisgCSAgICAvKiBNYWtlIGEgcHJveHkgQVJQIGVudHJ5IGlmIHJlcXVlc3RlZC4gKi8KK0BAIC0xOTA1LDcgKzE5MjYsMTIgQEAKKyAKKyAJLyogYXNzaWduIGEgZGVmYXVsdCByb3V0ZSB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgaWYgcmVxdWlyZWQgKi8KKyAJaWYgKGlwY3Bfd2FudG9wdGlvbnNbZi0+dW5pdF0uZGVmYXVsdF9yb3V0ZSkgCisrI2lmbmRlZiBfX2xpbnV4X18KKyAJICAgIGlmIChzaWZkZWZhdWx0cm91dGUoZi0+dW5pdCwgZ28tPm91cmFkZHIsIGhvLT5oaXNhZGRyKSkKKysjZWxzZQorKwkgICAgaWYgKHNpZmRlZmF1bHRyb3V0ZShmLT51bml0LCBnby0+b3VyYWRkciwgaG8tPmhpc2FkZHIsCisrCQkJCQkgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCQlkZWZhdWx0X3JvdXRlX3NldFtmLT51bml0XSA9IDE7CisgCisgCS8qIE1ha2UgYSBwcm94eSBBUlAgZW50cnkgaWYgcmVxdWVzdGVkLiAqLworQEAgLTE5ODMsNyArMjAwOSw3IEBACisgCXNpZm5wbW9kZShmLT51bml0LCBQUFBfSVAsIE5QTU9ERV9EUk9QKTsKKyAJc2lmZG93bihmLT51bml0KTsKKyAJaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCBpcGNwX2dvdG9wdGlvbnNbZi0+dW5pdF0ub3VyYWRkciwKKy0JCQkgaXBjcF9oaXNvcHRpb25zW2YtPnVuaXRdLmhpc2FkZHIpOworKwkJCSBpcGNwX2hpc29wdGlvbnNbZi0+dW5pdF0uaGlzYWRkciwgMCk7CisgICAgIH0KKyAKKyAgICAgLyogRXhlY3V0ZSB0aGUgaXAtZG93biBzY3JpcHQgKi8KK0BAIC0xOTk5LDEyICsyMDI1LDIxIEBACisgICogcHJveHkgYXJwIGVudHJpZXMsIGV0Yy4KKyAgKi8KKyBzdGF0aWMgdm9pZAorLWlwY3BfY2xlYXJfYWRkcnModW5pdCwgb3VyYWRkciwgaGlzYWRkcikKKytpcGNwX2NsZWFyX2FkZHJzKHVuaXQsIG91cmFkZHIsIGhpc2FkZHIsIHJlcGxhY2VkZWZhdWx0cm91dGUpCisgICAgIGludCB1bml0OworICAgICB1X2ludDMyX3Qgb3VyYWRkcjsgIC8qIGxvY2FsIGFkZHJlc3MgKi8KKyAgICAgdV9pbnQzMl90IGhpc2FkZHI7ICAvKiByZW1vdGUgYWRkcmVzcyAqLworKyAgICBib29sIHJlcGxhY2VkZWZhdWx0cm91dGU7CisgeworLSAgICBpZiAocHJveHlfYXJwX3NldFt1bml0XSkgeworKyAgICAvKiBJZiByZXBsYWNlZGVmYXVsdHJvdXRlLCBzaWZkZWZhdWx0cm91dGUgd2lsbCBiZSBjYWxsZWQgc29vbgorKyAgICAgKiB3aXRoIHJlcGxhY2VkZWZhdWx0cm91dGUgc2V0IGFuZCB0aGF0IHdpbGwgb3ZlcndyaXRlIHRoZSBjdXJyZW50CisrICAgICAqIGRlZmF1bHQgcm91dGUuIFRoaXMgaXMgdGhlIGNhc2Ugb25seSB3aGVuIGRvaW5nIGRlbWFuZCwgb3RoZXJ3aXNlCisrICAgICAqIGR1cmluZyBkZW1hbmQsIHRoaXMgY2lmZGVmYXVsdHJvdXRlIHdvdWxkIHJlc3RvcmUgdGhlIG9sZCBkZWZhdWx0CisrICAgICAqIHJvdXRlIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQgaW4gdGhpcyBjYXNlLiBJbiB0aGUgbm9uLWRlbWFuZAorKyAgICAgKiBjYXNlLCB3ZSdsbCBkZWxldGUgdGhlIGRlZmF1bHQgcm91dGUgYW5kIHJlc3RvcmUgdGhlIG9sZCBpZiB0aGVyZQorKyAgICAgKiBpcyBvbmUgc2F2ZWQgYnkgYW4gc2lmZGVmYXVsdHJvdXRlIHdpdGggcmVwbGFjZWRlZmF1bHRyb3V0ZS4KKysgICAgICovCisrICAgIGlmICghcmVwbGFjZWRlZmF1bHRyb3V0ZSAmJiBkZWZhdWx0X3JvdXRlX3NldFt1bml0XSkgeworIAljaWZwcm94eWFycCh1bml0LCBoaXNhZGRyKTsKKyAJcHJveHlfYXJwX3NldFt1bml0XSA9IDA7CisgICAgIH0KK2RpZmYgLXVyTiBwcHAtMi40LjUtb3JpZy9wcHBkL2lwY3AuaCBwcHAtMi40LjUvcHBwZC9pcGNwLmgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL2lwY3AuaAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA0MzY4MjA2MyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL2lwY3AuaAkyMDEwLTA2LTMwIDE2OjQwOjQ5LjU4NjIwMzEyOSArMDgwMAorQEAgLTcwLDYgKzcwLDcgQEAKKyAgICAgYm9vbCBvbGRfYWRkcnM7CQkvKiBVc2Ugb2xkIChJUC1BZGRyZXNzZXMpIG9wdGlvbj8gKi8KKyAgICAgYm9vbCByZXFfYWRkcjsJCS8qIEFzayBwZWVyIHRvIHNlbmQgSVAgYWRkcmVzcz8gKi8KKyAgICAgYm9vbCBkZWZhdWx0X3JvdXRlOwkJLyogQXNzaWduIGRlZmF1bHQgcm91dGUgdGhyb3VnaCBpbnRlcmZhY2U/ICovCisrICAgIGJvb2wgcmVwbGFjZV9kZWZhdWx0X3JvdXRlOyAvKiBSZXBsYWNlIGRlZmF1bHQgcm91dGUgdGhyb3VnaCBpbnRlcmZhY2U/ICovCisgICAgIGJvb2wgcHJveHlfYXJwOwkJLyogTWFrZSBwcm94eSBBUlAgZW50cnkgZm9yIHBlZXI/ICovCisgICAgIGJvb2wgbmVnX3ZqOwkJLyogVmFuIEphY29ic29uIENvbXByZXNzaW9uPyAqLworICAgICBib29sIG9sZF92ajsJCS8qIHVzZSBvbGQgKHNob3J0KSBmb3JtIG9mIFZKIG9wdGlvbj8gKi8KK2RpZmYgLXVyTiBwcHAtMi40LjUtb3JpZy9wcHBkL3BwcGQuOCBwcHAtMi40LjUvcHBwZC9wcHBkLjgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL3BwcGQuOAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA0MzY4MjA2MyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL3BwcGQuOAkyMDEwLTA2LTMwIDE2OjQyOjQ3LjEwMjQxMzg1OSArMDgwMAorQEAgLTEyMSw2ICsxMjEsMTMgQEAKKyBUaGlzIGVudHJ5IGlzIHJlbW92ZWQgd2hlbiB0aGUgUFBQIGNvbm5lY3Rpb24gaXMgYnJva2VuLiAgVGhpcyBvcHRpb24KKyBpcyBwcml2aWxlZ2VkIGlmIHRoZSBcZklub2RlZmF1bHRyb3V0ZVxmUiBvcHRpb24gaGFzIGJlZW4gc3BlY2lmaWVkLgorIC5UUAorKy5CIHJlcGxhY2VkZWZhdWx0cm91dGUKKytUaGlzIG9wdGlvbiBpcyBhIGZsYWcgdG8gdGhlIGRlZmF1bHRyb3V0ZSBvcHRpb24uIElmIGRlZmF1bHRyb3V0ZSBpcworK3NldCBhbmQgdGhpcyBmbGFnIGlzIGFsc28gc2V0LCBwcHBkIHJlcGxhY2VzIGFuIGV4aXN0aW5nIGRlZmF1bHQgcm91dGUKKyt3aXRoIHRoZSBuZXcgZGVmYXVsdCByb3V0ZS4KKysKKysKKysuVFAKKyAuQiBkaXNjb25uZWN0IFxmSXNjcmlwdAorIEV4ZWN1dGUgdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGJ5IFxmSXNjcmlwdFxmUiwgYnkgcGFzc2luZyBpdCB0byBhCisgc2hlbGwsIGFmdGVyCitAQCAtNzE3LDcgKzcyNCwxMiBAQAorIC5UUAorIC5CIG5vZGVmYXVsdHJvdXRlCisgRGlzYWJsZSB0aGUgXGZJZGVmYXVsdHJvdXRlXGZSIG9wdGlvbi4gIFRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB3aG8KKy13aXNoZXMgdG8gcHJldmVudCB1c2VycyBmcm9tIGNyZWF0aW5nIGRlZmF1bHQgcm91dGVzIHdpdGggcHBwZAorK3dpc2hlcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gYWRkaW5nIGEgZGVmYXVsdCByb3V0ZSB3aXRoIHBwcGQKKytjYW4gZG8gc28gYnkgcGxhY2luZyB0aGlzIG9wdGlvbiBpbiB0aGUgL2V0Yy9wcHAvb3B0aW9ucyBmaWxlLgorKy5UUAorKy5CIG5vcmVwbGFjZWRlZmF1bHRyb3V0ZQorK0Rpc2FibGUgdGhlIFxmSXJlcGxhY2VkZWZhdWx0cm91dGVcZlIgb3B0aW9uLiBUaGUgc3lzdGVtIGFkbWluaXN0cmF0b3Igd2hvCisrd2lzaGVzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSByZXBsYWNpbmcgYSBkZWZhdWx0IHJvdXRlIHdpdGggcHBwZAorIGNhbiBkbyBzbyBieSBwbGFjaW5nIHRoaXMgb3B0aW9uIGluIHRoZSAvZXRjL3BwcC9vcHRpb25zIGZpbGUuCisgLlRQCisgLkIgbm9kZWZsYXRlCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLmggcHBwLTIuNC41L3BwcGQvcHBwZC5oCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wcHBkLmgJMjAxMC0wNi0zMCAxNjo0MzozNi41MTQxNDgzMjcgKzA4MDAKK0BAIC02NDMsNyArNjQzLDExIEBACisgaW50ICBjaWY2YWRkciBfX1AoKGludCwgZXVpNjRfdCwgZXVpNjRfdCkpOworIAkJCQkvKiBSZW1vdmUgYW4gSVB2NiBhZGRyZXNzIGZyb20gaS9mICovCisgI2VuZGlmCisrI2lmbmRlZiBfX2xpbnV4X18KKyBpbnQgIHNpZmRlZmF1bHRyb3V0ZSBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QpKTsKKysjZWxzZQorK2ludCAgc2lmZGVmYXVsdHJvdXRlIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCwgYm9vbCByZXBsYWNlX2RlZmF1bHRfcnQpKTsKKysjZW5kaWYKKyAJCQkJLyogQ3JlYXRlIGRlZmF1bHQgcm91dGUgdGhyb3VnaCBpL2YgKi8KKyBpbnQgIGNpZmRlZmF1bHRyb3V0ZSBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QpKTsKKyAJCQkJLyogRGVsZXRlIGRlZmF1bHQgcm91dGUgdGhyb3VnaCBpL2YgKi8KK2RpZmYgLXVyTiBwcHAtMi40LjUtb3JpZy9wcHBkL3N5cy1saW51eC5jIHBwcC0yLjQuNS9wcHBkL3N5cy1saW51eC5jCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9zeXMtbGludXguYwkyMDEwLTA2LTMwIDE1OjUxOjEyLjA1MDE2NjM5OCArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL3N5cy1saW51eC5jCTIwMTAtMDYtMzAgMTY6NTQ6MDAuMzYyNzE2MjMxICswODAwCitAQCAtMjA2LDYgKzIwNiw4IEBACisgCisgc3RhdGljIGludAlpZl9pc191cDsJLyogSW50ZXJmYWNlIGhhcyBiZWVuIG1hcmtlZCB1cCAqLworIHN0YXRpYyBpbnQJaGF2ZV9kZWZhdWx0X3JvdXRlOwkvKiBHYXRld2F5IGZvciBkZWZhdWx0IHJvdXRlIGFkZGVkICovCisrc3RhdGljIHN0cnVjdCBydGVudHJ5IG9sZF9kZWZfcnQ7ICAgICAgIC8qIE9sZCBkZWZhdWx0IHJvdXRlICovCisrc3RhdGljIGludCAgICAgICBkZWZhdWx0X3J0X3JlcGxfcmVzdDsgIC8qIHJlcGxhY2UgYW5kIHJlc3RvcmUgb2xkIGRlZmF1bHQgcnQgKi8KKyBzdGF0aWMgdV9pbnQzMl90IHByb3h5X2FycF9hZGRyOwkvKiBBZGRyIGZvciBwcm94eSBhcnAgZW50cnkgYWRkZWQgKi8KKyBzdGF0aWMgY2hhciBwcm94eV9hcnBfZGV2WzE2XTsJCS8qIERldmljZSBmb3IgcHJveHkgYXJwIGVudHJ5ICovCisgc3RhdGljIHVfaW50MzJfdCBvdXJfb2xkX2FkZHI7CQkvKiBmb3IgZGV0ZWN0aW5nIGFkZHJlc3MgY2hhbmdlcyAqLworQEAgLTE1MzcsNiArMTUzOSw5IEBACisgCXAgPSBOVUxMOworICAgICB9CisgCisrICAgIFNFVF9TQV9GQU1JTFkgKHJ0LT5ydF9kc3QsICAgICBBRl9JTkVUKTsKKysgICAgU0VUX1NBX0ZBTUlMWSAocnQtPnJ0X2dhdGV3YXksIEFGX0lORVQpOworKworICAgICBTSU5fQUREUihydC0+cnRfZHN0KSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9kZXN0X2NvbF0sIE5VTEwsIDE2KTsKKyAgICAgU0lOX0FERFIocnQtPnJ0X2dhdGV3YXkpID0gc3RydG91bChjb2xzW3JvdXRlX2d3X2NvbF0sIE5VTEwsIDE2KTsKKyAgICAgU0lOX0FERFIocnQtPnJ0X2dlbm1hc2spID0gc3RydG91bChjb2xzW3JvdXRlX21hc2tfY29sXSwgTlVMTCwgMTYpOworQEAgLTE2MDYsMjAgKzE2MTEsNTEgQEAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIHNpZmRlZmF1bHRyb3V0ZSAtIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgYWRkcmVzcyBnaXZlbi4KKy0gKi8KKy0KKy1pbnQgc2lmZGVmYXVsdHJvdXRlIChpbnQgdW5pdCwgdV9pbnQzMl90IG91cmFkZHIsIHVfaW50MzJfdCBnYXRld2F5KQorLXsKKy0gICAgc3RydWN0IHJ0ZW50cnkgcnQ7CistCistICAgIGlmIChkZWZhdWx0cm91dGVfZXhpc3RzKCZydCkgJiYgc3RyY21wKHJ0LnJ0X2RldiwgaWZuYW1lKSAhPSAwKSB7CistCWlmIChydC5ydF9mbGFncyAmIFJURl9HQVRFV0FZKQorLQkgICAgZXJyb3IoIm5vdCByZXBsYWNpbmcgZXhpc3RpbmcgZGVmYXVsdCByb3V0ZSB2aWEgJUkiLAorLQkJICBTSU5fQUREUihydC5ydF9nYXRld2F5KSk7CistCWVsc2UKKy0JICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGV4aXN0aW5nIGRlZmF1bHQgcm91dGUgdGhyb3VnaCAlcyIsCistCQkgIHJ0LnJ0X2Rldik7CistCXJldHVybiAwOworKyAqCisrICogSWYgdGhlIGdsb2JhbCBkZWZhdWx0X3J0X3JlcGxfcmVzdCBmbGFnIGlzIHNldCwgdGhlbiB0aGlzIGZ1bmN0aW9uCisrICogYWxyZWFkeSByZXBsYWNlZCB0aGUgb3JpZ2luYWwgc3lzdGVtIGRlZmF1bHRyb3V0ZSB3aXRoIHNvbWUgb3RoZXIKKysgKiByb3V0ZSBhbmQgaXQgc2hvdWxkIGp1c3QgcmVwbGFjZSB0aGUgY3VycmVudCBkZWZhdWx0cm91dGUgd2l0aAorKyAqIGFub3RoZXIgb25lLCB3aXRob3V0IHNhdmluZyB0aGUgY3VycmVudCByb3V0ZS4gVXNlOiBkZW1hbmQgbW9kZSwKKysgKiB3aGVuIHBwcGQgc2V0cyBmaXJzdCBhIGRlZmF1bHRyb3V0ZSBpdCBpdCdzIHRlbXBvcmFyeSBwcHAwIGFkZHJlc3NlcworKyAqIGFuZCB0aGVuIGNoYW5nZXMgdGhlIHRlbXBvcmFyeSBhZGRyZXNzZXMgdG8gdGhlIGFkZHJlc3NlcyBmb3IgdGhlIHJlYWwKKysgKiBwcHAgY29ubmVjdGlvbiB3aGVuIGl0IGhhcyBjb21lIHVwLgorKyAqLworKworK2ludCBzaWZkZWZhdWx0cm91dGUgKGludCB1bml0LCB1X2ludDMyX3Qgb3VyYWRkciwgdV9pbnQzMl90IGdhdGV3YXksIGJvb2wgcmVwbGFjZSkKKyt7CisrICAgIHN0cnVjdCBydGVudHJ5IHJ0LCB0bXBfcnQ7CisrICAgIHN0cnVjdCBydGVudHJ5ICpkZWxfcnQgPSBOVUxMOworKworKyAgICBpZiAoZGVmYXVsdF9ydF9yZXBsX3Jlc3QpIHsKKysJLyogV2UgaGF2ZSBhbHJlYWR5IHJlY2xhY2VkIHRoZSBvcmlnaW5hbCBkZWZhdWx0cm91dGUsIGlmIHdlCisrICAgICAgICAgKiBhcmUgY2FsbGVkIGFnYWluLCB3ZSB3aWxsIGRlbGV0ZSB0aGUgY3VycmVudCBkZWZhdWx0IHJvdXRlCisrICAgICAgICAgKiBhbmQgc2V0IHRoZSBuZXcgZGVmYXVsdCByb3V0ZSBpbiB0aGlzIGZ1bmN0aW9uLiAgCisrICAgICAgICAgKiAtIHRoaXMgaXMgbm9ybWFsbHkgb25seSB0aGUgY2FzZSB0aGUgZG9pbmcgZGVtYW5kOiAqLworKwlpZiAoZGVmYXVsdHJvdXRlX2V4aXN0cyggJnRtcF9ydCApKQorKwkJZGVsX3J0ID0gJnRtcF9ydDsKKysgICAgfSBlbHNlIGlmICggZGVmYXVsdHJvdXRlX2V4aXN0cyggJm9sZF9kZWZfcnQgICAgICAgICAgICAgICAgKSAmJgorKwkgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoICBvbGRfZGVmX3J0LnJ0X2RldiwgaWZuYW1lICkgIT0gMCkgeworKwkvKiBXZSBkaWQgbm90IHlldCByZXBsYWNlIGFuIGV4aXN0aW5nIGRlZmF1bHQgcm91dGUsIGxldCdzCisrCSAqIGNoZWNrIGlmIHdlIHNob3VsZCBzYXZlIGFuZCByZXBsYWNlIGEgZGVmYXVsdCByb3V0ZToKKysgICAgICAgICAqLworKwl1X2ludDMyX3Qgb2xkX2dhdGV3YXkgPSBTSU5fQUREUihvbGRfZGVmX3J0LnJ0X2dhdGV3YXkpOworKwlpZiAob2xkX2dhdGV3YXkgIT0gZ2F0ZXdheSkgeworKwkgICAgaWYgKCFyZXBsYWNlKSB7CisrCSAgICAgICAgZXJyb3IoIm5vdCByZXBsYWNpbmcgZGVmYXVsdCByb3V0ZSB0byAlcyBbJUldIiwKKysJCQlvbGRfZGVmX3J0LnJ0X2Rldiwgb2xkX2dhdGV3YXkpOworKwkJcmV0dXJuIDA7CisrCSAgICB9IGVsc2UgeworKwkJLy8gd2UgbmVlZCB0byBjb3B5IHJ0X2RldiBiZWNhdXNlIHdlIG5lZWQgaXQgcGVybWFuZW50IHRvbzoKKysJCWNoYXIgKiB0bXBfZGV2ID0gbWFsbG9jKHN0cmxlbihvbGRfZGVmX3J0LnJ0X2RldikrMSk7CisrCQlzdHJjcHkodG1wX2Rldiwgb2xkX2RlZl9ydC5ydF9kZXYpOworKwkJb2xkX2RlZl9ydC5ydF9kZXYgPSB0bXBfZGV2OworKworKwkJbm90aWNlKCJyZXBsYWNpbmcgb2xkIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIG9sZF9nYXRld2F5KTsKKysJICAgICAgICBkZWZhdWx0X3J0X3JlcGxfcmVzdCA9IDE7CisrCQlkZWxfcnQgPSAmb2xkX2RlZl9ydDsKKysJICAgIH0KKysJfQorICAgICB9CisgCisgICAgIG1lbXNldCAoJnJ0LCAwLCBzaXplb2YgKHJ0KSk7CitAQCAtMTYzOCw2ICsxNjc0LDEyIEBACisgCSAgICBlcnJvcigiZGVmYXVsdCByb3V0ZSBpb2N0bChTSU9DQUREUlQpOiAlbSIpOworIAlyZXR1cm4gMDsKKyAgICAgfQorKyAgICBpZiAoZGVmYXVsdF9ydF9yZXBsX3Jlc3QgJiYgZGVsX3J0KQorKyAgICAgICAgaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NERUxSVCwgZGVsX3J0KSA8IDApIHsKKysJICAgIGlmICggISBva19lcnJvciAoIGVycm5vICkpCisrCSAgICAgICAgZXJyb3IoImRlbCBvbGQgZGVmYXVsdCByb3V0ZSBpb2N0bChTSU9DREVMUlQpOiAlbSglZCkiLCBlcnJubyk7CisrCSAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKyAKKyAgICAgaGF2ZV9kZWZhdWx0X3JvdXRlID0gMTsKKyAgICAgcmV0dXJuIDE7CitAQCAtMTY3Myw2ICsxNzE1LDE2IEBACisgCSAgICByZXR1cm4gMDsKKyAJfQorICAgICB9CisrICAgIGlmIChkZWZhdWx0X3J0X3JlcGxfcmVzdCkgeworKwlub3RpY2UoInJlc3RvcmluZyBvbGQgZGVmYXVsdCByb3V0ZSB0byAlcyBbJUldIiwKKysJCQlvbGRfZGVmX3J0LnJ0X2RldiwgU0lOX0FERFIob2xkX2RlZl9ydC5ydF9nYXRld2F5KSk7CisrICAgICAgICBpZiAoaW9jdGwoc29ja19mZCwgU0lPQ0FERFJULCAmb2xkX2RlZl9ydCkgPCAwKSB7CisrCSAgICBpZiAoICEgb2tfZXJyb3IgKCBlcnJubyApKQorKwkgICAgICAgIGVycm9yKCJyZXN0b3JlIGRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0FERFJUKTogJW0oJWQpIiwgZXJybm8pOworKwkgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgICAgICBkZWZhdWx0X3J0X3JlcGxfcmVzdCA9IDA7CisrICAgIH0KKyAKKyAgICAgcmV0dXJuIDE7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZmYwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY29wdHMucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorcHBwOiB1c2UgYnVpbGQgc3lzdGVtIENGTEFHUyB3aGVuIGNvbXBpbGluZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworT3ZlcnJpZGUgdGhlIGhhcmQtY29kZWQgQ09QVFMgbWFrZSB2YXJpYWJsZXMgd2l0aAorQ0ZMQUdTLiAgQWRkIENPUFRTIGludG8gb25lIE1ha2VmaWxlIHRoYXQgZGlkIG5vdAordXNlIGl0LgorCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgKKysrKyBiL3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgKK0BAIC0xMiw3ICsxMiw3IEBAIFZFUlNJT04gPSAkKHNoZWxsIGF3ayAtRiAnIicgJy9WRVJTSU9OLyAKKyBJTlNUQUxMCT0gaW5zdGFsbAorIAorIFBMVUdJTj1yYWRpdXMuc28gcmFkYXR0ci5zbyByYWRyZWFsbXMuc28KKy1DRkxBR1M9LUkuIC1JLi4vLi4gLUkuLi8uLi8uLi9pbmNsdWRlIC1PMiAtZlBJQyAtRFJDX0xPR19GQUNJTElUWT1MT0dfREFFTU9OCisrQ0ZMQUdTPS1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAkKENPUFRTKSAtZlBJQyAtRFJDX0xPR19GQUNJTElUWT1MT0dfREFFTU9OCisgCisgIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIE1pY3Jvc29mdCdzCisgIyBNUy1DSEFQIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZWRiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvZml4LUNWRS0yMDE1LTMzMTAucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorcHBwOiBCdWZmZXIgb3ZlcmZsb3cgaW4gcmFkaXVzIHBsdWdpbgorCitGcm9tOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/bXNnPTU7YnVnPTc4MjQ1MAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK09uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gNjU1MzUgcHJvY2Vzc2VzIHJ1bm5pbmcsIHBwcGQgYWJvcnRzIHdoZW4KK3NlbmRpbmcgYSAic3RhcnQiIGFjY291bnRpbmcgbWVzc2FnZSB0byB0aGUgUkFESVVTIHNlcnZlciBiZWNhdXNlIG9mIGEKK2J1ZmZlciBvdmVyZmxvdyBpbiByY19ta3NpZC4KKworVGhlIHByb2Nlc3MgaWQgaXMgdXNlZCBpbiByY19ta3NpZCB0byBnZW5lcmF0ZSBhIHBzZXVkby11bmlxdWUgc3RyaW5nLAorYXNzdW1pbmcgdGhhdCB0aGUgaGV4IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwaWQgd2lsbCBiZSBhdCBtb3N0IDQKK2NoYXJhY3RlcnMgKEZGRkYpLiBfX3NwcmludGZfY2hrKCksIHVzZWQgd2hlbiBjb21waWxpbmcgd2l0aAorb3B0aW1pemF0aW9uIGxldmVscyBncmVhdGVyIHRoYW4gMCBhbmQgRk9SVElGWV9TT1VSQ0UsIGRldGVjdHMgdGhlCitidWZmZXIgb3ZlcmZsb3cgYW5kIG1ha2VzIHBwcGQgY3Jhc2guCisKK1RoZSBmb2xsb3dpbmcgcGF0Y2ggZml4ZXMgdGhlIHByb2JsZW0uCisKKy0tLSBwcHAtMi40LjYub3JpZy9wcHBkL3BsdWdpbnMvcmFkaXVzL3V0aWwuYworKysrIHBwcC0yLjQuNi9wcHBkL3BsdWdpbnMvcmFkaXVzL3V0aWwuYworQEAgLTc3LDcgKzc3LDcgQEAgcmNfbWtzaWQgKHZvaWQpCisgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGNudCA9IDA7CisgICBzcHJpbnRmIChidWYsICIlMDhsWCUwNFglMDJoWCIsCisgCSAgICh1bnNpZ25lZCBsb25nIGludCkgdGltZSAoTlVMTCksCistCSAgICh1bnNpZ25lZCBpbnQpIGdldHBpZCAoKSwKKysJICAgKHVuc2lnbmVkIGludCkgZ2V0cGlkICgpICUgNjU1MzUsCisgCSAgIGNudCAmIDB4RkYpOworICAgY250Kys7CisgICByZXR1cm4gYnVmOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2luaXQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzAxMzYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2luaXQKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisjCisjICAgL2V0Yy9pbml0LmQvcHBwOiBzdGFydCBvciBzdG9wIFBQUCBsaW5rLgorIworIyBJZiB5b3Ugd2FudCBQUFAgc3RhcnRlZCBvbiBib290IHRpbWUgKG1vc3QgZGlhbHVwIHN5c3RlbXMgd29uJ3QgbmVlZCBpdCkKKyMgcmVuYW1lIHRoZSAvZXRjL3BwcC9ub19wcHBfb25fYm9vdCBmaWxlIHRvIC9ldGMvcHBwL3BwcF9vbl9ib290LCBhbmQKKyMgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGNvbW1lbnRzIGluIHRoYXQgZmlsZS4KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLXggL3Vzci9zYmluL3BwcGQgLWEgLWYgL2V0Yy9wcHAvcHBwX29uX2Jvb3QgfHwgZXhpdCAwCitpZiBbIC14IC9ldGMvcHBwL3BwcF9vbl9ib290IF07IHRoZW4gUlVORklMRT0xOyBmaQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgICBlY2hvIC1uICJTdGFydGluZyB1cCBQUFAgbGluazogcHBwZCIKKyAgICAgIGlmIFsgIiRSVU5GSUxFIiA9ICIxIiBdOyB0aGVuCisgICAgICAgIC9ldGMvcHBwL3BwcF9vbl9ib290CisgICAgICBlbHNlCisgICAgICAgIHBwcGQgY2FsbCBwcm92aWRlcgorICAgICAgZmkKKyAgICAgIGVjaG8gIi4iCisgICAgOzsKKyAgc3RvcCkKKyAgICAgIGVjaG8gLW4gIlNodXR0aW5nIGRvd24gUFBQIGxpbms6IHBwcGQiCisgICAgICBpZiBbICIkUlVORklMRSIgPSAiMSIgXTsgdGhlbgorICAgICAgICBwb2ZmCisgICAgICBlbHNlCisgICAgICAgIHBvZmYgcHJvdmlkZXIKKyAgICAgIGZpCisgICAgICBlY2hvICIuIgorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgL3Vzci9zYmluL3BwcGQ7CisgICAgZXhpdCAkPworICAgIDs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorICAgIGVjaG8gLW4gIlJlc3RhcnRpbmcgUFBQIGxpbms6IHBwcGQiCisgICAgaWYgWyAiJFJVTkZJTEUiID0gIjEiIF07IHRoZW4gICAgICAKKyAgICAgIHBvZmYKKyAgICAgIHNsZWVwIDUKKyAgICAgIC9ldGMvcHBwL3BwcF9vbl9ib290CisgICAgZWxzZSAgICAgICAgICAgICAgICAgIAorICAgICAgcG9mZiBwcm92aWRlcgorICAgICAgc2xlZXAgNQorICAgICAgcHBwZCBjYWxsIHByb3ZpZGVyCisgICAgZmkKKyAgICBlY2hvICIuIgorICAgIDs7CisgICopCisgICAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvcHBwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisgICAgICBleGl0IDEKKyAgICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC1kb3duIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2lwLWRvd24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZkMzU0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC1kb3duCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGlwLWRvd24sdiAxLjIgMTk5OC8wMi8xMCAyMToyMTo1NSBwaGlsIEV4cCAkCisjCisjIFRoaXMgc2NyaXB0IGlzIHJ1biBieSB0aGUgcHBwZCBfYWZ0ZXJfIHRoZSBsaW5rIGlzIGJyb3VnaHQgZG93bi4KKyMgSXQgdXNlcyBydW4tcGFydHMgdG8gcnVuIHNjcmlwdHMgaW4gL2V0Yy9wcHAvaXAtZG93bi5kLCBzbyB0byBkZWxldGUKKyMgcm91dGVzLCB1bnNldCBJUCBhZGRyZXNzZXMgZXRjLiB5b3Ugc2hvdWxkIGNyZWF0ZSBzY3JpcHQocykgdGhlcmUuCisjCisjIEJlIGF3YXJlIHRoYXQgb3RoZXIgcGFja2FnZXMgbWF5IGluY2x1ZGUgL2V0Yy9wcHAvaXAtZG93bi5kIHNjcmlwdHMgKG5hbWVkCisjIGFmdGVyIHRoYXQgcGFja2FnZSksIHNvIGNob29zZSBsb2NhbCBzY3JpcHQgbmFtZXMgd2l0aCB0aGF0IGluIG1pbmQuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorIyAgICBBcmcgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKKyMgICAgJDEgICBJbnRlcmZhY2UgbmFtZSAgICAgICAgICAgICAgICBwcHAwCisjICAgICQyICAgVGhlIHR0eSAgICAgICAgICAgICAgICAgICAgICAgdHR5UzEKKyMgICAgJDMgICBUaGUgbGluayBzcGVlZCAgICAgICAgICAgICAgICAzODQwMAorIyAgICAkNCAgIExvY2FsIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljc4CisjICAgICQ1ICAgUGVlciAgSVAgbnVtYmVyICAgICAgICAgICAgICAgMTIuMzQuNTYuOTkKKyMgICAgJDYgICBPcHRpb25hbCBgYGlwcGFyYW0nJyB2YWx1ZSAgICBmb28KKworIyBUaGUgIGVudmlyb25tZW50IGlzIGNsZWFyZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGlzIHNjcmlwdAorIyBzbyB0aGUgcGF0aCBtdXN0IGJlIHJlc2V0CitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbgorZXhwb3J0IFBBVEgKKyMgVGhlc2UgdmFyaWFibGVzIGFyZSBmb3IgdGhlIHVzZSBvZiB0aGUgc2NyaXB0cyBydW4gYnkgcnVuLXBhcnRzCitQUFBfSUZBQ0U9IiQxIgorUFBQX1RUWT0iJDIiCitQUFBfU1BFRUQ9IiQzIgorUFBQX0xPQ0FMPSIkNCIKK1BQUF9SRU1PVEU9IiQ1IgorUFBQX0lQUEFSQU09IiQ2IgorZXhwb3J0IFBQUF9JRkFDRSBQUFBfVFRZIFBQUF9TUEVFRCBQUFBfTE9DQUwgUFBQX1JFTU9URSBQUFBfSVBQQVJBTQorCisjIGFzIGFuIGFkZGl0aW9uYWwgY29udmVuaWVuY2UsICRQUFBfVFRZTkFNRSBpcyBzZXQgdG8gdGhlIHR0eSBuYW1lLAorIyBzdHJpcHBlZCBvZiAvZGV2LyAoaWYgcHJlc2VudCkgZm9yIGVhc2llciBtYXRjaGluZy4KK1BQUF9UVFlOQU1FPWAvdXNyL2Jpbi9iYXNlbmFtZSAiJDIiYAorZXhwb3J0IFBQUF9UVFlOQU1FIAorCisjIE1haW4gU2NyaXB0IHN0YXJ0cyBoZXJlCisKK3J1bi1wYXJ0cyAvZXRjL3BwcC9pcC1kb3duLmQKKworIyBsYXN0IGxpbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzJmYWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2lwLXVwCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGlwLXVwLHYgMS4yIDE5OTgvMDIvMTAgMjE6MjU6MzQgcGhpbCBFeHAgJAorIworIyBUaGlzIHNjcmlwdCBpcyBydW4gYnkgdGhlIHBwcGQgYWZ0ZXIgdGhlIGxpbmsgaXMgZXN0YWJsaXNoZWQuCisjIEl0IHVzZXMgcnVuLXBhcnRzIHRvIHJ1biBzY3JpcHRzIGluIC9ldGMvcHBwL2lwLXVwLmQsIHNvIHRvIGFkZCByb3V0ZXMsCisjIHNldCBJUCBhZGRyZXNzLCBydW4gdGhlIG1haWxxIGV0Yy4geW91IHNob3VsZCBjcmVhdGUgc2NyaXB0KHMpIHRoZXJlLgorIworIyBCZSBhd2FyZSB0aGF0IG90aGVyIHBhY2thZ2VzIG1heSBpbmNsdWRlIC9ldGMvcHBwL2lwLXVwLmQgc2NyaXB0cyAobmFtZWQKKyMgYWZ0ZXIgdGhhdCBwYWNrYWdlKSwgc28gY2hvb3NlIGxvY2FsIHNjcmlwdCBuYW1lcyB3aXRoIHRoYXQgaW4gbWluZC4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisjICAgIEFyZyAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZQorIyAgICAkMSAgIEludGVyZmFjZSBuYW1lICAgICAgICAgICAgICAgIHBwcDAKKyMgICAgJDIgICBUaGUgdHR5ICAgICAgICAgICAgICAgICAgICAgICB0dHlTMQorIyAgICAkMyAgIFRoZSBsaW5rIHNwZWVkICAgICAgICAgICAgICAgIDM4NDAwCisjICAgICQ0ICAgTG9jYWwgSVAgbnVtYmVyICAgICAgICAgICAgICAgMTIuMzQuNTYuNzgKKyMgICAgJDUgICBQZWVyICBJUCBudW1iZXIgICAgICAgICAgICAgICAxMi4zNC41Ni45OQorIyAgICAkNiAgIE9wdGlvbmFsIGBgaXBwYXJhbScnIHZhbHVlICAgIGZvbworCisjIFRoZSAgZW52aXJvbm1lbnQgaXMgY2xlYXJlZCBiZWZvcmUgZXhlY3V0aW5nIHRoaXMgc2NyaXB0CisjIHNvIHRoZSBwYXRoIG11c3QgYmUgcmVzZXQKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3Ivc2Jpbjovc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluCitleHBvcnQgUEFUSAorIyBUaGVzZSB2YXJpYWJsZXMgYXJlIGZvciB0aGUgdXNlIG9mIHRoZSBzY3JpcHRzIHJ1biBieSBydW4tcGFydHMKK1BQUF9JRkFDRT0iJDEiCitQUFBfVFRZPSIkMiIKK1BQUF9TUEVFRD0iJDMiCitQUFBfTE9DQUw9IiQ0IgorUFBQX1JFTU9URT0iJDUiCitQUFBfSVBQQVJBTT0iJDYiCitleHBvcnQgUFBQX0lGQUNFIFBQUF9UVFkgUFBQX1NQRUVEIFBQUF9MT0NBTCBQUFBfUkVNT1RFIFBQUF9JUFBBUkFNCisKKworIyBhcyBhbiBhZGRpdGlvbmFsIGNvbnZlbmllbmNlLCAkUFBQX1RUWU5BTUUgaXMgc2V0IHRvIHRoZSB0dHkgbmFtZSwKKyMgc3RyaXBwZWQgb2YgL2Rldi8gKGlmIHByZXNlbnQpIGZvciBlYXNpZXIgbWF0Y2hpbmcuCitQUFBfVFRZTkFNRT1gL3Vzci9iaW4vYmFzZW5hbWUgIiQyImAKK2V4cG9ydCBQUFBfVFRZTkFNRSAKKworIyBNYWluIFNjcmlwdCBzdGFydHMgaGVyZQorCitydW4tcGFydHMgL2V0Yy9wcHAvaXAtdXAuZAorCisjIGxhc3QgbGluZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUtcmVtb3ZlLWhhcmQtdXNyLXJlZmVyZW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk3MTdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVGhlIHBhdGNoIGNvbWVzIGZyb20gT3BlbkVtYmVkZGVkLgorUmViYXNlZCBmb3IgcHBwLTIuNC41LiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitVcGRhdGVkIGZyb20gT0UtQ2xhc3NpYyB0byBpbmNsdWRlIHRoZSBwY2FwIGh1bmsuCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXVyTiBwcHAtMi40LjUtb3JpZy9wcHBkL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBkL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA0MzY4MjA2MyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTc6MDg6MjEuODA2MzYzMDQyICswODAwCitAQCAtMTE3LDEwICsxMTcsMTAgQEAKKyAjTElCUyAgICAgKz0gLWxzaGFkb3cgJChMSUJTKQorIGVuZGlmCisgCistaWZuZXEgKCQod2lsZGNhcmQgL3Vzci9pbmNsdWRlL2NyeXB0LmgpLCkKKysjaWZuZXEgKCQod2lsZGNhcmQgL3Vzci9pbmNsdWRlL2NyeXB0LmgpLCkKKyBDRkxBR1MgICs9IC1ESEFWRV9DUllQVF9IPTEKKyBMSUJTCSs9IC1sY3J5cHQKKy1lbmRpZgorKyNlbmRpZgorIAorIGlmZGVmIE5FRURERVMKKyBpZm5kZWYgVVNFX0NSWVBUCitAQCAtMTY5LDEwICsxNjksMTAgQEAKKyBlbmRpZgorIAorIGlmZGVmIEZJTFRFUgorLWlmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9wY2FwLWJwZi5oKSwpCisrI2lmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9wY2FwLWJwZi5oKSwpCisgTElCUyAgICArPSAtbHBjYXAKKyBDRkxBR1MgICs9IC1EUFBQX0ZJTFRFUgorLWVuZGlmCisrI2VuZGlmCisgZW5kaWYKKyAKKyBpZmRlZiBIQVZFX0lORVQ2CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwOWJhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDk1IEBACitUaGUgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQKK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvY2hhdC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvY2hhdC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL2NoYXQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvY2hhdC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjMwLjQ1MDExODQ0NiArMDgwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAKKyBpbnN0YWxsOiBjaGF0CisgCW1rZGlyIC1wICQoQklORElSKSAkKE1BTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyBjaGF0ICQoQklORElSKQorKwkkKElOU1RBTEwpIC1jIGNoYXQgJChCSU5ESVIpCisgCSQoSU5TVEFMTCkgLWMgLW0gNjQ0IGNoYXQuOCAkKE1BTkRJUikKKyAKKyBjbGVhbjoKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9wcHBkL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBkL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA0MzY4MjA2MyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTI6MTEuMjE0MTcwNjA3ICswODAwCitAQCAtOTksNyArOTksNyBAQAorIENGTEFHUwkrPSAtRFVTRV9TUlAgLURPUEVOU1NMIC1JL3Vzci9sb2NhbC9zc2wvaW5jbHVkZQorIExJQlMJKz0gLWxzcnAgLUwvdXNyL2xvY2FsL3NzbC9saWIgLWxjcnlwdG8KKyBUQVJHRVRTCSs9IHNycC1lbnRyeQorLUVYVFJBSU5TVEFMTCA9ICQoSU5TVEFMTCkgLXMgLWMgLW0gNTU1IHNycC1lbnRyeSAkKEJJTkRJUikvc3JwLWVudHJ5CisrRVhUUkFJTlNUQUxMID0gJChJTlNUQUxMKSAtYyAtbSA1NTUgc3JwLWVudHJ5ICQoQklORElSKS9zcnAtZW50cnkKKyBNQU5QQUdFUyArPSBzcnAtZW50cnkuOAorIEVYVFJBQ0xFQU4gKz0gc3JwLWVudHJ5Lm8KKyBORUVEREVTPXkKK0BAIC0yMDAsNyArMjAwLDcgQEAKKyBpbnN0YWxsOiBwcHBkCisgCW1rZGlyIC1wICQoQklORElSKSAkKE1BTkRJUikKKyAJJChFWFRSQUlOU1RBTEwpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNTU1IHBwcGQgJChCSU5ESVIpL3BwcGQKKysJJChJTlNUQUxMKSAtYyAtbSA1NTUgcHBwZCAkKEJJTkRJUikvcHBwZAorIAlpZiBjaGdycCBwcHB1c2VycyAkKEJJTkRJUikvcHBwZCAyPi9kZXYvbnVsbDsgdGhlbiBcCisgCSAgY2htb2Qgby1yeCx1K3MgJChCSU5ESVIpL3BwcGQ7IGZpCisgCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQuOCAkKE1BTkRJUikKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA0NzY3NjE4NyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTM6NDcuNzUwMTgyMjY3ICswODAwCitAQCAtMzYsMTEgKzM2LDExIEBACisgCisgaW5zdGFsbDogYWxsCisgCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRpdXMuc28gJChMSUJESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNzU1IHJhZGF0dHIuc28gJChMSUJESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNzU1IHJhZHJlYWxtcy5zbyAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwZC1yYWRpdXMuOCAkKE1BTkRJUikKKy0JJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwZC1yYWRhdHRyLjggJChNQU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZGl1cy5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA3NTUgcmFkYXR0ci5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA3NTUgcmFkcmVhbG1zLnNvICQoTElCRElSKQorKwkkKElOU1RBTEwpIC1tIDQ0NCBwcHBkLXJhZGl1cy44ICQoTUFORElSKQorKwkkKElOU1RBTEwpIC1tIDQ0NCBwcHBkLXJhZGF0dHIuOCAkKE1BTkRJUikKKyAKKyByYWRpdXMuc286IHJhZGl1cy5vIGxpYnJhZGl1c2NsaWVudC5hCisgCSQoQ0MpIC1vIHJhZGl1cy5zbyAtc2hhcmVkIHJhZGl1cy5vIGxpYnJhZGl1c2NsaWVudC5hCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDc2NzYxODcgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTM6MTUuNDU0NDg2ODc3ICswODAwCitAQCAtNDMsOSArNDMsOSBAQAorIAorIGluc3RhbGw6IGFsbAorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA0NTUwIHJwLXBwcG9lLnNvICQoTElCRElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDQ1NTAgcnAtcHBwb2Uuc28gJChMSUJESVIpCisgCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoQklORElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBwcHBvZS1kaXNjb3ZlcnkgJChCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNTU1IHBwcG9lLWRpc2NvdmVyeSAkKEJJTkRJUikKKyAKKyBjbGVhbjoKKyAJcm0gLWYgKi5vICouc28gcHBwb2UtZGlzY292ZXJ5CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZHVtcC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZHVtcC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGR1bXAvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTgxODMzODMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZHVtcC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUyOjI1Ljc2MjE4MzUzNyArMDgwMAorQEAgLTE3LDUgKzE3LDUgQEAKKyAKKyBpbnN0YWxsOgorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgcHBwZHVtcCAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBwcHBkdW1wICQoQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBkdW1wLjggJChNQU5ESVIpCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwc3RhdHMvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwc3RhdHMvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTgxODMzODMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwc3RhdHMvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1Mjo0Mi40ODYzNDEwODEgKzA4MDAKK0BAIC0yMiw3ICsyMiw3IEBACisgCisgaW5zdGFsbDogcHBwc3RhdHMKKyAJLW1rZGlyIC1wICQoTUFORElSKQorLQkkKElOU1RBTEwpIC1zIC1jIHBwcHN0YXRzICQoQklORElSKQorKwkkKElOU1RBTEwpIC1jIHBwcHN0YXRzICQoQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBzdGF0cy44ICQoTUFORElSKQorIAorIHBwcHN0YXRzOiAkKFBQUFNUQVRTUkNTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BhcCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzYzMyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wYXAKQEAgLTAsMCArMSwyMiBAQAorIyBZb3UgY2FuIHVzZSB0aGlzIHNjcmlwdCB1bm1vZGlmaWVkIHRvIGNvbm5lY3QgdG8gc2l0ZXMgd2hpY2ggYWxsb3cKKyMgYXV0aGVudGljYXRpb24gdmlhIFBBUCwgQ0hBUCBhbmQgc2ltaWxhciBwcm90b2NvbHMuCisjIFRoaXMgc2NyaXB0IGNhbiBiZSBzaGFyZWQgYW1vbmcgZGlmZmVyZW50IHBwcGQgcGVlciBjb25maWd1cmF0aW9ucy4KKyMgVG8gdXNlIGl0LCBhZGQgc29tZXRoaW5nIGxpa2UgdGhpcyB0byB5b3VyIC9ldGMvcHBwL3BlZXJzLyBmaWxlOgorIworIyBjb25uZWN0ICIvdXNyL3NiaW4vY2hhdCAtdiAtZiAvZXRjL2NoYXRzY3JpcHRzL3BhcCAtVCBQSE9ORS1OVU1CRVIiCisjIHVzZXIgWU9VUi1VU0VSTkFNRS1JTi1QQVAtU0VDUkVUUworIyBub2F1dGgKKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHNlZSB0aGUgY29ubmVjdCBzcGVlZC4KKyMgSXQgd2lsbCBiZSBsb2dnZWQgdG8gc3RkZXJyIG9yIHRvIHRoZSBmaWxlIHNwZWNpZmllZCB3aXRoIHRoZSAtciBjaGF0IG9wdGlvbi4KKyNSRVBPUlQJCUNPTk5FQ1QKKworQUJPUlQJCUJVU1kKK0FCT1JUCQlWT0lDRQorQUJPUlQJCSJOTyBDQVJSSUVSIgorQUJPUlQJCSJOTyBESUFMVE9ORSIKK0FCT1JUCQkiTk8gRElBTCBUT05FIgorIiIJCUFUWgorT0sJCUFURFRcVAorQ09OTkVDVAkJIiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvZmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9mZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIxYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvZmYKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKKyMgTGV0cyBzZWUgaG93IG1hbnkgcHBwZHMgYXJlIHJ1bm5pbmcuLi4uCitzZXQgLS0gYGNhdCAvdmFyL3J1bi9wcHAqLnBpZCAyPi9kZXYvbnVsbGAKKworY2FzZSAkIyBpbgorICAwKSAjIHBwcGQgb25seSBjcmVhdGVzIGEgcGlkIGZpbGUgb25jZSBwcHAgaXMgdXAsIHNvIGxldCdzIHRyeSBraWxsaW5nIHBwcGQKKyAgICAgIyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlJ3ZlIG5vdCBnb3QgdGhhdCBmYXIgeWV0LgorICAgICBraWxsYWxsIHBwcGQKKyAgICAgOzsKKyAgMSkgIyBJZiBvbmx5IG9uZSB3YXMgcnVubmluZyB0aGVuIGl0IGNhbiBiZSBraWxsZWQgKGFwcGFyZW50bHkga2lsbGFsbAorICAgICAjIGNhdXNlZCBwcm9ibGVtcyBmb3Igc29tZSwgc28gbGV0cyB0cnkga2lsbGluZyB0aGUgcGlkIGZyb20gdGhlIGZpbGUpCisgICAgIGtpbGwgJDEKKyAgICAgOzsKKyAgKikgIyBNb3JlIHRoYW4gb25lISBBaWVlaGguLiBEb250IGtub3cgd2hpY2ggb25lIHRvIGtpbGwuCisgICAgIGVjaG8gIk1vcmUgdGhhbiBvbmUgcHBwZCBydW5uaW5nLiBOb25lIHN0b3BwZWQiCisgICAgIGV4aXQgMQorICAgICA7OworZXNhYworCitpZiBbIC1yIC92YXIvcnVuL3BwcC1xdWljayBdCit0aGVuCisgICAgcm0gLWYgL3Zhci9ydW4vcHBwLXF1aWNrCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb24gYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzA1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9uCkBAIC0wLDAgKzEsOSBAQAorIyEvYmluL3NoCisKK2lmIFsgIiQxIiA9ICJxdWljayIgXQordGhlbgorICAgIHRvdWNoIC92YXIvcnVuL3BwcC1xdWljaworICAgIHNoaWZ0CitmaQorCisvdXNyL3NiaW4vcHBwZCBjYWxsICR7MTotcHJvdmlkZXJ9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwQC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcEAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmYwYjVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcEAuc2VydmljZQpAQCAtMCwwICsxLDkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249UFBQIGxpbmsgdG8gJUkKK0JlZm9yZT1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK0V4ZWNTdGFydD1AU0JJTkRJUkAvcHBwZCBjYWxsICVJIG5vZGV0YWNoIG5vbG9nCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzkzNzYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcF9vbl9ib290CkBAIC0wLDAgKzEsMjEgQEAKKyMjIyEvYmluL3NoCisjCisjICAgUmVuYW1lIHRoaXMgZmlsZSB0byBwcHBfb25fYm9vdCBhbmQgcHBwZCB3aWxsIGJlIGZpcmVkIHVwIGFzCisjICAgc29vbiBhcyB0aGUgc3lzdGVtIGNvbWVzIHVwLCBjb25uZWN0aW5nIHRvIGBwcm92aWRlcicuCisjCisjICAgSWYgeW91IGFsc28gbWFrZSB0aGlzIGZpbGUgZXhlY3V0YWJsZSwgYW5kIHJlcGxhY2UgdGhlIGZpcnN0IGxpbmUKKyMgICB3aXRoIGp1c3QgIiMhL2Jpbi9zaCIsIHRoZSBjb21tYW5kcyBiZWxvdyB3aWxsIGJlIGV4ZWN1dGVkIGluc3RlYWQuCisjCisKKyMgVGhlIGxvY2F0aW9uIG9mIHRoZSBwcHAgZGFlbW9uIGl0c2VsZiAoc2hvdWxkbid0IG5lZWQgdG8gYmUgY2hhbmdlZCkKK1BQUEQ9L3Vzci9zYmluL3BwcGQKKworIyBUaGUgZGVmYXVsdCBwcm92aWRlciB0byBjb25uZWN0IHRvCiskUFBQRCBjYWxsIHByb3ZpZGVyCisKKyMgQWRkaXRpb25hbCBjb25uZWN0aW9ucywgd2hpY2ggd291bGQganVzdCB1c2Ugc2V0dGluZ3MgZnJvbQorIyAvZXRjL3BwcC9vcHRpb25zLjx0dHk+CisjJFBQUEQgdHR5UzAKKyMkUFBQRCB0dHlTMQorIyRQUFBEIHR0eVMyCisjJFBQUEQgdHR5UzMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBkLXJlc29sdi12YXJydW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjQxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK1RoZSBwYXRjaCBjb21lcyBmcm9tIE9wZW5FbWJlZGRlZAorUmViYXNlZCBmb3IgcHBwLTIuNC41LiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmMgcHBwLTIuNC41L3BwcGQvaXBjcC5jCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmMJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9pcGNwLmMJMjAxMC0wNi0zMCAxNzowMjozMy45MzAzOTMyODMgKzA4MDAKK0BAIC01NSw2ICs1NSw4IEBACisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgI2luY2x1ZGUgInBwcGQuaCIKKyAjaW5jbHVkZSAiZnNtLmgiCitAQCAtMjA5NSw2ICsyMDk3LDE0IEBACisgICAgIHVfaW50MzJfdCBwZWVyZG5zMSwgcGVlcmRuczI7CisgeworICAgICBGSUxFICpmOworKyAgICBzdHJ1Y3Qgc3RhdCBkaXJpbmZvOworKworKyAgICBpZihzdGF0KF9QQVRIX09VVERJUiwgJmRpcmluZm8pKSB7CisrICAgICAgICBpZihta2RpcihfUEFUSF9PVVRESVIsIDA3NzUpKSB7CisrICAgICAgICAgICAgZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzOiAlbSIsIF9QQVRIX09VVERJUik7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICB9CisgCisgICAgIGYgPSBmb3BlbihfUEFUSF9SRVNPTFYsICJ3Iik7CisgICAgIGlmIChmID09IE5VTEwpIHsKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9wcHBkL3BhdGhuYW1lcy5oIHBwcC0yLjQuNS9wcHBkL3BhdGhuYW1lcy5oCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wYXRobmFtZXMuaAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA0MzY4MjA2MyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL3BhdGhuYW1lcy5oCTIwMTAtMDYtMzAgMTc6MDM6MjAuNTk0MzcxMDU1ICswODAwCitAQCAtMzAsNyArMzAsOCBAQAorICNkZWZpbmUgX1BBVEhfVFRZT1BUCSBfUk9PVF9QQVRIICIvZXRjL3BwcC9vcHRpb25zLiIKKyAjZGVmaW5lIF9QQVRIX0NPTk5FUlJTCSBfUk9PVF9QQVRIICIvZXRjL3BwcC9jb25uZWN0LWVycm9ycyIKKyAjZGVmaW5lIF9QQVRIX1BFRVJGSUxFUwkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvcGVlcnMvIgorLSNkZWZpbmUgX1BBVEhfUkVTT0xWCSBfUk9PVF9QQVRIICIvZXRjL3BwcC9yZXNvbHYuY29uZiIKKysjZGVmaW5lIF9QQVRIX09VVERJUglfUk9PVF9QQVRIIF9QQVRIX1ZBUlJVTiAiL3BwcCIKKysjZGVmaW5lIF9QQVRIX1JFU09MVglfUEFUSF9PVVRESVIgIi9yZXNvbHYuY29uZiIKKyAKKyAjZGVmaW5lIF9QQVRIX1VTRVJPUFQJICIucHBwcmMiCisgI2RlZmluZQlfUEFUSF9QU0VVRE9OWU0JICIucHBwX3BzZXVkb255bSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlciBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRkNzFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3Byb3ZpZGVyCkBAIC0wLDAgKzEsMzUgQEAKKyMgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZvciBhIGRpYWx1cCBjb25uZWN0aW9uIGF1dGhlbnRpY2F0ZWQgd2l0aCBQQVAgb3IgQ0hBUAorIworIyBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdXNlZCBieSBwb24oMSkgYW5kIHBvZmYoMSkuCisjIFNlZSB0aGUgbWFudWFsIHBhZ2UgcHBwZCg4KSBmb3IgaW5mb3JtYXRpb24gb24gYWxsIHRoZSBvcHRpb25zLgorCisjIE1VU1QgQ0hBTkdFOiByZXBsYWNlIG15dXNlcm5hbWVAcmVhbG0gd2l0aCB0aGUgUFBQIGxvZ2luIG5hbWUgZ2l2ZW4gdG8KKyMgeW91ciBieSB5b3VyIHByb3ZpZGVyLgorIyBUaGVyZSBzaG91bGQgYmUgYSBtYXRjaGluZyBlbnRyeSB3aXRoIHRoZSBwYXNzd29yZCBpbiAvZXRjL3BwcC9wYXAtc2VjcmV0cworIyBhbmQvb3IgL2V0Yy9wcHAvY2hhcC1zZWNyZXRzLgordXNlciAibXl1c2VybmFtZUByZWFsbSIKKworIyBNVVNUIENIQU5HRTogcmVwbGFjZSAqKioqKioqKiB3aXRoIHRoZSBwaG9uZSBudW1iZXIgb2YgeW91ciBwcm92aWRlci4KKyMgVGhlIC9ldGMvY2hhdHNjcmlwdHMvcGFwIGNoYXQgc2NyaXB0IG1heSBiZSBtb2RpZmllZCB0byBjaGFuZ2UgdGhlCisjIG1vZGVtIGluaXRpYWxpemF0aW9uIHN0cmluZy4KK2Nvbm5lY3QgIi91c3Ivc2Jpbi9jaGF0IC12IC1mIC9ldGMvY2hhdHNjcmlwdHMvcGFwIC1UICoqKioqKioqIgorCisjIFNlcmlhbCBkZXZpY2UgdG8gd2hpY2ggdGhlIG1vZGVtIGlzIGNvbm5lY3RlZC4KKy9kZXYvbW9kZW0KKworIyBTcGVlZCBvZiB0aGUgc2VyaWFsIGxpbmUuCisxMTUyMDAKKworIyBBc3N1bWVzIHRoYXQgeW91ciBJUCBhZGRyZXNzIGlzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBieSB0aGUgSVNQLgorbm9pcGRlZmF1bHQKKyMgVHJ5IHRvIGdldCB0aGUgbmFtZSBzZXJ2ZXIgYWRkcmVzc2VzIGZyb20gdGhlIElTUC4KK3VzZXBlZXJkbnMKKyMgVXNlIHRoaXMgY29ubmVjdGlvbiBhcyB0aGUgZGVmYXVsdCByb3V0ZS4KK2RlZmF1bHRyb3V0ZQorCisjIE1ha2VzIHBwcGQgImRpYWwgYWdhaW4iIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbG9zdC4KK3BlcnNpc3QKKworIyBEbyBub3QgYXNrIHRoZSByZW1vdGUgdG8gYXV0aGVudGljYXRlLgorbm9hdXRoCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGMzOGUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwXzIuNC43LmJiCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgc3VwcG9ydCIKK0RFU0NSSVBUSU9OID0gInBwcCAoUGF1bCdzIFBQUCBQYWNrYWdlKSBpcyBhbiBvcGVuIHNvdXJjZSBwYWNrYWdlIHdoaWNoIGltcGxlbWVudHMgXAordGhlIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIG9uIExpbnV4IGFuZCBTb2xhcmlzIHN5c3RlbXMuIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vc2FtYmEub3JnL3BwcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9wcHAuc2FtYmEub3JnL2NnaS1iaW4vcHBwLWJ1Z3MiCitERVBFTkRTID0gImxpYnBjYXAiCitMSUNFTlNFID0gIkJTRCAmIEdQTHYyKyAmIExHUEx2MisgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BwcGQvY2NwLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yOTttZDU9ZTJjNDNmZTZlODFmZjc3ZDg3ZGM5YzI5MGE0MjRkZWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcHBwZC9wbHVnaW5zL3Bhc3Nwcm9tcHQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0zYmNiY2RiZjBlMzY5YzlhM2UwYjhjODI3NWIwNjVkOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wcHBkL3RkYi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PTRjYTNhOTk5MWIwMTEwMzhkMDg1ZDY2NzVhZTdjNGU2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NoYXQvY2hhdC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTU7bWQ1PTBkMzc0Yjg1NDVlZTVjNjJkN2FmZjFhY2JkMzhhZGQyIgorCitTUkNfVVJJID0gImh0dHA6Ly9wcHAuc2FtYmEub3JnL2Z0cC9wcHAvcHBwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaWZkZWZyb3V0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wcHBkLXJlc29sdi12YXJydW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUtcmVtb3ZlLWhhcmQtdXNyLXJlZmVyZW5jZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wb24gXAorICAgICAgICAgICBmaWxlOi8vcG9mZiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2lwLXVwIFwKKyAgICAgICAgICAgZmlsZTovL2lwLWRvd24gXAorICAgICAgICAgICBmaWxlOi8vMDhzZXR1cGRucyBcCisgICAgICAgICAgIGZpbGU6Ly85MnJlbW92ZWRucyBcCisgICAgICAgICAgIGZpbGU6Ly9jb3B0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXAgXAorICAgICAgICAgICBmaWxlOi8vcHBwX29uX2Jvb3QgXAorICAgICAgICAgICBmaWxlOi8vcHJvdmlkZXIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1wcHAtRml4LWNvbXBpbGF0aW9uLWVycm9ycy1pbi1NYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wcHBALnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vZml4LUNWRS0yMDE1LTMzMTAucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzg4MThmNDBlNmQzM2ExZDFkZTY4YTE1NTFmNjU5NWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDJlMGEzZGQzZTQ3OTllMzMxMDNmNzBlYzdkZjc1MzQ4Yzg1NDA5NjZlZTdjOTQ4ZTRlZDhhNDJiYmNjZmIzMCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHN5c3RlbWQKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiAke0xERkxBR1N9IgorRVhUUkFfT0VNQUtFID0gIlNUUklQUFJPRz0ke1NUUklQfSBNQU5ESVI9JHtEfSR7ZGF0YWRpcn0vbWFuL21hbjggSU5DRElSPSR7RH0ke2luY2x1ZGVkaXJ9IExJQkRJUj0ke0R9JHtsaWJkaXJ9L3BwcGQvJHtQVn0gQklORElSPSR7RH0ke3NiaW5kaXJ9IgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zdHJpcCIKKworIyBQYWNrYWdlIE1ha2VmaWxlIGNvbXB1dGVzIENGTEFHUywgcmVmZXJlbmNpbmcgQ09QVFMuCisjIFR5cGljYWxseSBoYXJkLWNvZGVkIHRvICctTzIgLWcnIGluIHRoZSBNYWtlZmlsZSdzLgorIworRVhUUkFfT0VNQUtFICs9ICcgQ09QVFM9IiR7Q0ZMQUdTfSAtSSR7U30vaW5jbHVkZSInCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJbWFrZSBpbnN0YWxsLWV0Y3BwcCBFVENESVI9JHtEfS8ke3N5c2NvbmZkaXJ9L3BwcAorCW1rZGlyIC1wICR7RH0ke2JpbmRpcn0vICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9pcC11cC5kLworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9pcC1kb3duLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcG9uICR7RH0ke2JpbmRpcn0vcG9uCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcG9mZiAke0R9JHtiaW5kaXJ9L3BvZmYKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9wcHAKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pcC11cCAke0R9JHtzeXNjb25mZGlyfS9wcHAvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaXAtZG93biAke0R9JHtzeXNjb25mZGlyfS9wcHAvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vMDhzZXR1cGRucyAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtdXAuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS85MnJlbW92ZWRucyAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtZG93bi5kLworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2NoYXRzY3JpcHRzCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BlZXJzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcGFwICR7RH0ke3N5c2NvbmZkaXJ9L2NoYXRzY3JpcHRzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHBwX29uX2Jvb3QgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BwcF9vbl9ib290CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHJvdmlkZXIgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BlZXJzL3Byb3ZpZGVyCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BwcEAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3BwcEAuc2VydmljZQorCXJtIC1yZiAke0R9LyR7bWFuZGlyfS9tYW44L21hbjgKKwljaG1vZCB1K3MgJHtEfSR7c2JpbmRpcn0vcHBwZAorfQorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wcHAvcGFwLXNlY3JldHMgJHtzeXNjb25mZGlyfS9wcHAvY2hhcC1zZWNyZXRzICR7c3lzY29uZmRpcn0vcHBwL29wdGlvbnMiCitQQUNLQUdFUyA9KyAiJHtQTn0tb2EgJHtQTn0tb2UgJHtQTn0tcmFkaXVzICR7UE59LXdpbmJpbmQgJHtQTn0tbWluY29ubiAke1BOfS1wYXNzd29yZCAke1BOfS1sMnRwICR7UE59LXRvb2xzIgorRklMRVNfJHtQTn0gICAgICAgID0gIiR7c3lzY29uZmRpcn0gJHtiaW5kaXJ9ICR7c2JpbmRpcn0vY2hhdCAke3NiaW5kaXJ9L3BwcGQgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wcHBALnNlcnZpY2UiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LW9hICAgICAgID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L3BwcG9hdG0uc28iCitGSUxFU18ke1BOfS1vZSAgICAgICA9ICIke3NiaW5kaXJ9L3BwcG9lLWRpc2NvdmVyeSAke2xpYmRpcn0vcHBwZC8ke1BWfS9ycC1wcHBvZS5zbyIKK0ZJTEVTXyR7UE59LXJhZGl1cyAgID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L3JhZGl1cy5zbyAke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRhdHRyLnNvICR7bGliZGlyfS9wcHBkLyR7UFZ9L3JhZHJlYWxtcy5zbyIKK0ZJTEVTXyR7UE59LXdpbmJpbmQgID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L3dpbmJpbmQuc28iCitGSUxFU18ke1BOfS1taW5jb25uICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9taW5jb25uLnNvIgorRklMRVNfJHtQTn0tcGFzc3dvcmQgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcGFzcyouc28iCitGSUxFU18ke1BOfS1sMnRwICAgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS8qbDJ0cC5zbyIKK0ZJTEVTXyR7UE59LXRvb2xzICAgID0gIiR7c2JpbmRpcn0vcHBwc3RhdHMgJHtzYmluZGlyfS9wcHBkdW1wIgorU1VNTUFSWV8ke1BOfS1vYSAgICAgICA9ICJQbHVnaW4gZm9yIFBQUCBmb3IgUFBQLW92ZXItQVRNIHN1cHBvcnQiCitTVU1NQVJZXyR7UE59LW9lICAgICAgID0gIlBsdWdpbiBmb3IgUFBQIGZvciBQUFAtb3Zlci1FdGhlcm5ldCBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS1yYWRpdXMgICA9ICJQbHVnaW4gZm9yIFBQUCBmb3IgUkFESVVTIHN1cHBvcnQiCitTVU1NQVJZXyR7UE59LXdpbmJpbmQgID0gIlBsdWdpbiBmb3IgUFBQIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IFNhbWJhIG9yIFdpbmRvd3MiCitTVU1NQVJZXyR7UE59LW1pbmNvbm4gID0gIlBsdWdpbiBmb3IgUFBQIHRvIHNldCBhIGRlbGF5IGJlZm9yZSB0aGUgaWRsZSB0aW1lb3V0IGFwcGxpZXMiCitTVU1NQVJZXyR7UE59LXBhc3N3b3JkID0gIlBsdWdpbiBmb3IgUFBQIHRvIGdldCBwYXNzd29yZHMgdmlhIGEgcGlwZSIKK1NVTU1BUllfJHtQTn0tbDJ0cCAgICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIGwydHAgc3VwcG9ydCIKK1NVTU1BUllfJHtQTn0tdG9vbHMgICAgPSAiQWRkaXRpb25hbCB0b29scyBmb3IgdGhlIFBQUCBwYWNrYWdlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvOTlfcmVzb2x2Y29uZiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mLzk5X3Jlc29sdmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5MGQ3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mLzk5X3Jlc29sdmNvbmYKQEAgLTAsMCArMSw0IEBACitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvcnVuL3Jlc29sdmNvbmYvaW50ZXJmYWNlIG5vbmUKK2Ygcm9vdCByb290IDA2NDQgL2V0Yy9yZXNvbHZjb25mL3J1bi9yZXNvbHYuY29uZiBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2Y29uZi9ydW4vZW5hYmxlLXVwZGF0ZXMgbm9uZQorbCByb290IHJvb3QgMDY0NCAvZXRjL3Jlc29sdi5jb25mIC9ldGMvcmVzb2x2Y29uZi9ydW4vcmVzb2x2LmNvbmYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvZml4LXBhdGgtZm9yLWJ1c3lib3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlYWQwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKKworYnVzeWJveCBpbnN0YWxscyByZWFkbGluayBpbnRvIC91c3IvYmluLCBzbyBlbnN1cmUgL3Vzci9iaW4KK2lzIGluIHRoZSBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcmVzb2x2Y29uZi0xLjc2L2V0Yy9yZXNvbHZjb25mL3VwZGF0ZS5kL2xpYmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSByZXNvbHZjb25mLTEuNzYub3JpZy9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCisrKysgcmVzb2x2Y29uZi0xLjc2L2V0Yy9yZXNvbHZjb25mL3VwZGF0ZS5kL2xpYmMKK0BAIC0xNiw3ICsxNiw3IEBACisgIworIAorIHNldCAtZQorLVBBVEg9L3NiaW46L2JpbgorK1BBVEg9L3NiaW46L2JpbjovdXNyL2JpbgorIAorIFsgLXggL2xpYi9yZXNvbHZjb25mL2xpc3QtcmVjb3JkcyBdIHx8IGV4aXQgMQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43Ny5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE2YjlmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzcuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJuYW1lIHNlcnZlciBpbmZvcm1hdGlvbiBoYW5kbGVyIgorREVTQ1JJUFRJT04gPSAiUmVzb2x2Y29uZiBpcyBhIGZyYW1ld29yayBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgc3lzdGVtJ3MgXAoraW5mb3JtYXRpb24gYWJvdXQgY3VycmVudGx5IGF2YWlsYWJsZSBuYW1lc2VydmVycy4gSXQgc2V0cyBcCitpdHNlbGYgdXAgYXMgdGhlIGludGVybWVkaWFyeSBiZXR3ZWVuIHByb2dyYW1zIHRoYXQgc3VwcGx5IFwKK25hbWVzZXJ2ZXIgaW5mb3JtYXRpb24gYW5kIHByb2dyYW1zIHRoYXQgbmVlZCBuYW1lc2VydmVyIFwKK2luZm9ybWF0aW9uLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiIKK0FVVEhPUiA9ICJUaG9tYXMgSG9vZCIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3Jlc29sdmNvbmYiCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTUwNTExVDIxNDcxOFovcG9vbC9tYWluL3IvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhdGgtZm9yLWJ1c3lib3gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vOTlfcmVzb2x2Y29uZiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzM2MmQ3NjZlNDdiZmMyNTM1MDBmNDJiMzAzMzBkOWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWE2ZTIxZThiYTY4MjJhNWY5MzA3NWM4YzhmZTc5NzdlMzQ3ODBiYTU1MWFmNTE5MzBkMGIzMWZkZDk5YWI1NiIKKworaW5oZXJpdCBhbGxhcmNoCisKK2RvX2NvbXBpbGUgKCkgeworCToKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3Jlc29sdmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwkJZWNobyAiZCAvcnVuLyR7QlBOfS9pbnRlcmZhY2UgLSAtIC0gLSIgXAorCQkgICAgID4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9yZXNvbHZjb25mLmNvbmYKKwlmaQorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9LyR7QlBOfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vJHtCUE59CisJbG4gLXNuZiAke2xvY2Fsc3RhdGVkaXJ9L3J1bi8ke0JQTn0gJHtEfSR7c3lzY29uZmRpcn0vJHtCUE59L3J1bgorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0gJHtEfSR7YmFzZV9zYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44ICR7RH0ke2RvY2Rpcn0vJHtQfQorCWNwIC1wUFIgZXRjLyogJHtEfSR7c3lzY29uZmRpcn0vCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0ke3N5c2NvbmZkaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vcmVzb2x2Y29uZiAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vbGlzdC1yZWNvcmRzICR7RH0ke2Jhc2VfbGliZGlyfS8ke0JQTn0KKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXVwLmQKKwlpbnN0YWxsIC1tIDA3NTUgZGViaWFuL3Jlc29sdmNvbmYuMDAwcmVzb2x2Y29uZi5pZi11cCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi11cC5kLzAwMHJlc29sdmNvbmYKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZAorCWluc3RhbGwgLW0gMDc1NSBkZWJpYW4vcmVzb2x2Y29uZi5yZXNvbHZjb25mLmlmLWRvd24gJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kL3Jlc29sdmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgUkVBRE1FICR7RH0ke2RvY2Rpcn0vJHtQfS8KKwlpbnN0YWxsIC1tIDA2NDQgbWFuL3Jlc29sdmNvbmYuOCAke0R9JHttYW5kaXJ9L21hbjgvCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgWyAteiAiJEQiIF07IHRoZW4KKwkJaWYgY29tbWFuZCAtdiBzeXN0ZW1kLXRtcGZpbGVzID4vZGV2L251bGw7IHRoZW4KKwkJCXN5c3RlbWQtdG1wZmlsZXMgLS1jcmVhdGUgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL3Jlc29sdmNvbmYuY29uZgorCQllbGlmIFsgLWUgJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCisJCWZpCisJZmkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9LyR7QlBOfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRkYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdC9NYWtlZmlsZS5pbi1maXgtZm9yLXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYzZmMDA4MGI1NTY3OWI2ZThiNWQzMzJkNmUwNWZkY2JkYTFlNDA2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCA0IE1heSAyMDE1IDAwOjU4OjQ3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlLmluOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgordnNucHJpbnRmX3IubzogZmlsZSBub3QgcmVjb2duaXplZDogRmlsZSB0cnVuY2F0ZWQKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMyBleGl0IHN0YXR1cworTWFrZWZpbGU6MTIyOiByZWNpcGUgZm9yIHRhcmdldCAnZmlsYW4nIGZhaWxlZAorCitMZXQgZmlsYW4gZGVwZW5kIG9uIHZzbnByaW50Zl9yLm8gYW5kIHNucHJpbnRlcnIubyB0byBmaXggdGhlIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGYyYTZlZGIuLjg4Yjc4NGIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xMTgsNyArMTE4LDcgQEAgUFJPQ0FOX09CSlM9cHJvY2FuX21haW4ubyBwcm9jYW4ubyBwcm9jYW4tY2RlZnMubyBob3N0YW4ubyBlcnJvci5vIHN5Y2xzLm8gc3lzdXQKKyBwcm9jYW46ICQoUFJPQ0FOX09CSlMpCisgCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoUFJPQ0FOX09CSlMpICQoQ0xJQlMpCisgCistZmlsYW46IGZpbGFuX21haW4ubyBmaWxhbi5vIGZkbmFtZS5vIGVycm9yLm8gc3ljbHMubyBzeXN1dGlscy5vIHV0aWxzLm8KKytmaWxhbjogZmlsYW5fbWFpbi5vIGZpbGFuLm8gZmRuYW1lLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0aWxzLm8gdXRpbHMubyB2c25wcmludGZfci5vIHNucHJpbnRlcnIubworIAkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBmaWxhbl9tYWluLm8gZmlsYW4ubyBmZG5hbWUubyBlcnJvci5vIHN5Y2xzLm8gc3lzdXRpbHMubyB1dGlscy5vIHZzbnByaW50Zl9yLm8gc25wcmludGVyci5vICQoQ0xJQlMpCisgCisgbGlieGlvLmE6ICQoWElPT0JKUykgJChVVExPQkpTKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThlMGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdF8xLjcuMy4wLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTXVsdGlwdXJwb3NlIHJlbGF5IGZvciBiaWRpcmVjdGlvbmFsIGRhdGEgdHJhbnNmZXIiCitERVNDUklQVElPTiA9ICJTb2NhdCBpcyBhIHJlbGF5IGZvciBiaWRpcmVjdGlvbmFsIGRhdGEgXAordHJhbnNmZXIgYmV0d2VlbiB0d28gaW5kZXBlbmRlbnQgZGF0YSBjaGFubmVscy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRlc3QtdW5yZWFjaC5vcmcvc29jYXQvIgorCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworREVQRU5EUyA9ICJvcGVuc3NsIHJlYWRsaW5lIgorCitMSUNFTlNFID0gIkdQTC0yLjArLXdpdGgtT3BlblNTTC1leGNlcHRpb24iCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTI1NztlbmRsaW5lPTI4NzttZDU9MzM4YzA1ZWFkZDAxMzg3MmFiYjFkNmUxOThlMTBhM2YiCisKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRlc3QtdW5yZWFjaC5vcmcvc29jYXQvZG93bmxvYWQvc29jYXQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi1maXgtZm9yLXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImI2MDdlZGI2NWJjNmM1N2Y0YTQzZjA2MjQ3NTA0Mjc0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3NjdlODUwYzAzMjliOWZkZjcxMWM2Y2Q0Njg1NjVjYmJiMjg3ODZiYTFhOGExY2JkNTUzMWQ0MDE2YjNlMDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X2hhdmVfel9tb2RpZmllcj15ZXMgc2NfY3Zfc3lzX2NyZGx5X3NoaWZ0PTkgXAorICAgICAgICBzY19jdl9zeXNfdGFiZGx5X3NoaWZ0PTExIHNjX2N2X3N5c19jc2l6ZV9zaGlmdD00IFwKKyAgICAgICAgYWNfY3ZfaXNwZWVkX29mZnNldD0xMyBcCisgICAgICAgIGFjX2N2X2hlYWRlcl9ic2RfbGlidXRpbF9oPW5vIFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLWVuYWJsZS1saWJ3cmFwLC0tZGlzYWJsZS1saWJ3cmFwLHRjcC13cmFwcGVycyIKKworZG9faW5zdGFsbF9wcmVwZW5kICgpIHsKKyAgICBta2RpciAtcCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9ICR7RH0ke21hbmRpcn0vbWFuMQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9hdm9pZF9zdHJpcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvYXZvaWRfc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0ZTI0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvYXZvaWRfc3RyaXAucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAord2lyZWxlc3NfdG9vbHM6IEF2b2lkIHN0cmlwcGluZyBpd211bHRpY2FsbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorICBUaGUgcmVtb3ZlZCBjb2RlIHdhcyBmcm9tIHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXVyIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUKKy0tLSB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlCTIwMTEtMDYtMTggMTE6MzU6MTIuMTgzOTA3NDUzIC0wNTAwCisrKysgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUJMjAxMS0wNi0xOCAxMTozODowOS45OTU5MDc5ODUgLTA1MDAKK0BAIC0xMzUsOSArMTM1LDggQEAKKyAKKyBtYWNhZGRyOiBtYWNhZGRyLm8gJChJV0xJQikKKyAKKy0jIEFsd2F5cyBkbyBzeW1ib2wgc3RyaXBwaW5nIGhlcmUKKyBpd211bHRpY2FsbDogaXdtdWx0aWNhbGwubworLQkkKENDKSAkKExERkxBR1MpIC1XbCwtcyAkKFhDRkxBR1MpIC1vICRAICReICQoTElCUykKKysJJChDQykgJChMREZMQUdTKSAkKFNUUklQRkxBR1MpICQoWENGTEFHUykgLW8gJEAgJF4gJChMSUJTKQorIAorICMgSXQncyBhIGtpbmQgb2YgbWFnaWMuLi4KKyB3aXJlbGVzcy5oOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMGQ4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAord2lyZWxlc3MtdG9vbHM6IFJlbW92ZSBRQSB3YXJuaW5nOiBObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorICBVc2VmdWwgd2l0aGluIGJpdGJha2UgZW52aXJvbm1lbnQgb25seS4KKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0KKyBNYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUKKysrKyB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQorQEAgLTE0NCw3ICsxNDQsNyBAQCB3aXJlbGVzcy5oOgorIAorICMgQ29tcGlsYXRpb24gb2YgdGhlIGR5bmFtaWMgbGlicmFyeQorICQoRFlOQU1JQyk6ICQoT0JKUzoubz0uc28pCistCSQoQ0MpIC1zaGFyZWQgLW8gJEAgLVdsLC1zb25hbWUsJEAgJChTVFJJUEZMQUdTKSAkKExJQlMpIC1sYyAkXgorKwkkKENDKSAtc2hhcmVkIC1vICRAIC1XbCwtc29uYW1lLCRAICQoTERGTEFHUykgJChTVFJJUEZMQUdTKSAkKExJQlMpIC1sYyAkXgorIAorICMgQ29tcGlsYXRpb24gb2YgdGhlIHN0YXRpYyBsaWJyYXJ5CisgJChTVEFUSUMpOiAkKE9CSlM6Lm89LnNvKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9tYW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL21hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTc1N2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9tYW4ucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogd2lyZWxlc3NfdG9vbHMuMzAvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3aXJlbGVzc190b29scy4zMC5vcmlnL01ha2VmaWxlCTIwMTQtMDItMDEgMDA6MjE6MDQuMTQ4NDYzMzgyIC0wODAwCisrKysgd2lyZWxlc3NfdG9vbHMuMzAvTWFrZWZpbGUJMjAxNC0wMi0wMSAwMDoyMzozNS40NDgwNzIyNzkgLTA4MDAKK0BAIC03Niw3ICs3Niw3IEBACisgSU5TVEFMTF9ESVI9ICQoUFJFRklYKS9zYmluCisgSU5TVEFMTF9MSUI9ICQoUFJFRklYKS9saWIKKyBJTlNUQUxMX0lOQz0gJChQUkVGSVgpL2luY2x1ZGUKKy1JTlNUQUxMX01BTj0gJChQUkVGSVgpL21hbgorK0lOU1RBTExfTUFOPSAkKFBSRUZJWCkvc2hhcmUvbWFuCisgCisgIyBWYXJpb3VzIGNvbW1hbmRzCisgUk0gPSBybSAtZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMmMzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2hlbiAvZXRjL2xkLnNvLmNhY2hlIGlzIHdyaXRlYWJsZSBieSB1c2VyIHJ1bm5pbmcgYml0YmFrZSB0aGVuIGl0IGNyZWF0ZXMgaW52YWxpZCBjYWNoZSAKKyhpbiBteSBjYXNlIGxpYnN0ZGMrKy5zbyBjYW5ub3QgYmUgZm91bmQgYWZ0ZXIgYnVpbGRpbmcgemxpYigtbmF0aXZlKSBhbmQgSSBoYXZlIHRvIGNhbGwgCit0b3VjaCAqL2xpYnN0ZGMrKy5zbyAmJiAvc2Jpbi9sZGNvbmZpZyB0byBmaXggaXQuCisKK1NvIHJlbW92ZSBsZGNvbmZpZyBjYWxsIGZyb20gbWFrZSBpbnN0YWxsLWxpYnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK2RpZmYgLXVOciB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCistLS0gd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZQkyMDA3LTA5LTE4IDAxOjU2OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCTIwMTItMDItMTUgMjA6NDY6NDEuNzgwNzYzNTE0ICswMTAwCitAQCAtMTYzLDcgKzE2Myw2IEBACisgCWluc3RhbGwgLW0gNzU1ICQoRFlOQU1JQykgJChJTlNUQUxMX0xJQikKKyAJbG4gLXNmbiAkKERZTkFNSUMpICQoSU5TVEFMTF9MSUIpLyQoRFlOQU1JQ19MSU5LKQorIAlAZWNobyAiKioqIERvbid0IGZvcmdldCB0byBhZGQgJChJTlNUQUxMX0xJQikgdG8gL2V0Yy9sZC5zby5jb25mLCBhbmQgcnVuIGxkY29uZmlnIGFzIHJvb3QuICoqKiIKKy0JQCQoTERDT05GSUcpIHx8IGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIGxkY29uZmlnICEgKioqIgorIAorICMgSW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnkKKyBpbnN0YWxsLXN0YXRpYzo6ICQoU1RBVElDKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy5pZi1wcmUtdXAgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTE4YTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy5pZi1wcmUtdXAKQEAgLTAsMCArMSwxMjIgQEAKKyMhL2Jpbi9zaAorCitjYXNlICIkTUVUSE9EIiBpbiBsb29wYmFjaykgZXhpdCAwIDs7IGVzYWMKKworSVdDT05GSUc9L3NiaW4vaXdjb25maWcKK0lXUFJJVj0vc2Jpbi9pd3ByaXYKKworaWYgWyAhIC14ICRJV0NPTkZJRyBdOyB0aGVuCisgIGV4aXQgMAorZmkKKworIyBEZXRlY3QgYW5kIGRvIG5vdGhpbmcgZm9yIGxpbnV4LXdsYW4tbmcgaW50ZXJmYWNlczsKKyMgd2hpY2ggYXJlIGNvbmZpZ3VyZWQgYnkgdGhpZXIgb3duIGlmLXByZS11cCBzY3JpcHQuCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfVFlQRSIgLWEgIiRJRl9XSVJFTEVTU19UWVBFIiA9ICJ3bGFuLW5nIiBdOyB0aGVuCisgIGV4aXQgMAorZmkKKworaWYgWyAtbiAiJElGX05FRURTX1JFU0VUIiBdOyB0aGVuCisgICRJV1BSSVYgIiRJRkFDRSIgcmVzZXQgMQorICBzbGVlcCAxCitmaQorCitpZiBbIC1uICIkSUZfTkVFRFNfRklSTVdBUkUiIF07IHRoZW4KKyAgJElGX05FRURTX0ZJUk1XQVJFICIkSUZBQ0UiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfU0VOUyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgc2VucyAkSUZfV0lSRUxFU1NfU0VOUworZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1JBVEUiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHJhdGUgJElGX1dJUkVMRVNTX1JBVEUKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SVFMiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHJ0cyAkSUZfV0lSRUxFU1NfUlRTCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRlJBRyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgZnJhZyAkSUZfV0lSRUxFU1NfRlJBRworZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1BPV0VSIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBwb3dlciAkSUZfV0lSRUxFU1NfUE9XRVIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUlBFUklPRCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcG93ZXIgcGVyaW9kICRJRl9XSVJFTEVTU19QT1dFUlBFUklPRAorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1BPV0VSVElNRU9VVCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcG93ZXIgdGltZW91dCAkSUZfV0lSRUxFU1NfUE9XRVJUSU1FT1VUCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfVFhQT1dFUiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgdHhwb3dlciAkSUZfV0lSRUxFU1NfVFhQT1dFUgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1JFVFJZIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiByZXRyeSAkSUZfV0lSRUxFU1NfUkVUUlkKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19OSUNLIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBuaWNrICIkSUZfV0lSRUxFU1NfTklDSyIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19OV0lEIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBud2lkICIkSUZfV0lSRUxFU1NfTldJRCIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19FTkMiIF07IHRoZW4KKyAgZXZhbCAkSVdDT05GSUcgIiRJRkFDRSIgZW5jICRJRl9XSVJFTEVTU19FTkMKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19LRVkiIF07IHRoZW4KKyAgZXZhbCAkSVdDT05GSUcgIiRJRkFDRSIga2V5ICRJRl9XSVJFTEVTU19LRVkKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19LRVkxIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBrZXkgWzFdICIkSUZfV0lSRUxFU1NfS0VZMSIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19LRVkyIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBrZXkgWzJdICIkSUZfV0lSRUxFU1NfS0VZMiIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19LRVkzIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBrZXkgWzNdICIkSUZfV0lSRUxFU1NfS0VZMyIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19LRVk0IiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBrZXkgWzRdICIkSUZfV0lSRUxFU1NfS0VZNCIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19ERUZBVUxUS0VZIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBrZXkgWyIkSUZfV0lSRUxFU1NfREVGQVVMVEtFWSJdCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZTU9ERSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5ICIkSUZfV0lSRUxFU1NfS0VZTU9ERSIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19NT0RFIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBtb2RlICRJRl9XSVJFTEVTU19NT0RFCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRlJFUSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgZnJlcSAkSUZfV0lSRUxFU1NfRlJFUQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0NIQU5ORUwiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGNoYW5uZWwgJElGX1dJUkVMRVNTX0NIQU5ORUwKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19FU1NJRCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgZXNzaWQgIiRJRl9XSVJFTEVTU19FU1NJRCIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19DT01NSVQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGNvbW1pdAorZmkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGU5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3p6ei13aXJlbGVzcy5pZi1wcmUtdXAKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIC9ldGMvbmV0d29yay9pZi1wcmUtdXAuZC96enotd2lyZWxlc3MKKyMgYnkgU3RlZmFuIFRvbWFuZWsgKHN0ZWZhbkBwaWNvLnJ1aHIuZGUpCisKKworSVdDT05GSUc9L3NiaW4vaXdjb25maWcKK0lGQ09ORklHPS9zYmluL2lmY29uZmlnCitHUkVQPS9iaW4vZ3JlcAorTE9HR0VSPS91c3IvYmluL2xvZ2dlcgorU0xFRVA9L2Jpbi9zbGVlcAorCisjIEhvdyBsb25nIGRvIHdlIHdhaXQgZm9yIGFzc29jaWF0aW9uPworUkVUUklFUz0xNQorU0xFRVBUSU1FPTEKKworIyBPbmx5IHNsZWVwIGlmIHdlIHVzZSBESENQIChhZGQgb3RoZXJzIG1ldGhvZHMgc2VwZXJhdGVkIGJ5IHNwYWNlcykKK09OTFlfRk9SPSJzdGF0aWMgZGhjcCIKKworaWYgWyAteiAiJElGX1dJUkVMRVNTX1RZUEUiIF0gJiYgZWNobyAiJE9OTFlfRk9SIiB8IGdyZXAgLXEgIiRNRVRIT0QiIDsgdGhlbgorCSRJRkNPTkZJRyAkSUZBQ0UgdXAKKwkkTE9HR0VSIENoZWNraW5nIGZvciBXTEFOIGFzc29jaWF0aW9uLi4uCisJd2hpbGUgKCBbICRSRVRSSUVTIC1ndCAwIF0gJiYgKCRJV0NPTkZJRyAiJElGQUNFIiB8ICRHUkVQIC1xICJBY2Nlc3MgUG9pbnQ6IE5vdC1Bc3NvY2lhdGVkIikgKTsgZG8KKwkJJExPR0dFUiBObyBhc3NvY2lhdGlvbiB5ZXQsICRSRVRSSUVTIHJldHJpZXMgdW50aWwgdGltZW91dAorCQlSRVRSSUVTPSQoKCRSRVRSSUVTLTEpKQorCQkkU0xFRVAgJFNMRUVQVElNRQorCWRvbmUKKwkKKwlpZiBbICRSRVRSSUVTIC1lcSAwIF07IHRoZW4KKwkJJExPR0dFUiBUaW1lb3V0IHdhaXRpbmcgZm9yIGFzc29jaWF0aW9uLCBjb250aW51aW5nIGFueXdheS4uLgorCWVsc2UKKwkJJExPR0dFUiBGb3VuZCBhc3NvY2lhdGlvbiEKKwlmaQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmVjZGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29sc18zMC5wcmU5LmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIHRoZSBMaW51eCBTdGFuZGFyZCBXaXJlbGVzcyBFeHRlbnNpb24gU3Vic3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sIgorTElDRU5TRSA9ICJHUEx2MiAmIChMR1BMdjIuMSB8IE1QTC0xLjEgfCBCU0QpIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkJZmlsZTovL2l3Y29uZmlnLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9Y2Y3MTBlYjE3OTVjMzc2ZWIxMGVhNGZmMDQ2NDljYWYgXAorCQkJZmlsZTovL2l3ZXZlbnQuYztiZWdpbmxpbmU9NTk7ZW5kbGluZT03MjttZDU9ZDY2YTEwMDI2ZDQzOTRmMGE1YjFjNTU4N2JjZTQ1MzcgXAorCQkJZmlsZTovL3NhbXBsZV9lbmMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTQ7bWQ1PTgzODM3MmJlMDc4NzQyNjBiNTY2YmFlMmY2ZWQzM2I2IgorU0VDVElPTiA9ICJiYXNlIgorUEUgPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L3dpcmVsZXNzX3Rvb2xzLiR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly93aXJlbGVzcy10b29scy5pZi1wcmUtdXAgXAorICAgICAgICAgICBmaWxlOi8venp6LXdpcmVsZXNzLmlmLXByZS11cCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImNhOTFiYTdjN2VmZjliZmZmNjkyNmIxYTM0YTQ2OTdkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFiZDljNWM5OGFiZjFmZGQxMTg5MmFjMmY4YTU2NzM3NTQ0ZmUxMDFlMWJlMjdjNjI0MWE1NjQ5NDhmMzRjNjMiCisKK1MgPSAiJHtXT1JLRElSfS93aXJlbGVzc190b29scy4zMCIKKworQ0ZMQUdTID0rICItSSR7U30iCitFWFRSQV9PRU1BS0UgPSAiLWUgJ0JVSUxEX1NIQVJFRD15JyBcCisJCSdJTlNUQUxMX0RJUj0ke0R9JHtiYXNlX3NiaW5kaXJ9JyBcCisJCSdJTlNUQUxMX0xJQj0ke0R9JHtsaWJkaXJ9JyBcCisJCSdJTlNUQUxMX0lOQz0ke0R9JHtpbmNsdWRlZGlyfScgXAorCQknSU5TVEFMTF9NQU49JHtEfSR7bWFuZGlyfSciCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBhbGwgbGliaXcuYQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7RH0gaW5zdGFsbC1pd211bHRpY2FsbCBpbnN0YWxsLWR5bmFtaWMgaW5zdGFsbC1tYW4gaW5zdGFsbC1oZHIKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IGlmcmVuYW1lICR7RH0ke3NiaW5kaXJ9L2lmcmVuYW1lCisJIyBEaXNhYmxlZCBieSBSUCAtIDIwLzgvMDggLSBXZSBkb24ndCBzZWVtIHRvIG5lZWQvdXNlIHRoZXNlCisJI2luc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZAorCSNpbnN0YWxsICR7V09SS0RJUn0vd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQvd2lyZWxlc3MtdG9vbHMKKwkjaW5zdGFsbCAke1dPUktESVJ9L3p6ei13aXJlbGVzcy5pZi1wcmUtdXAgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZC96enotd2lyZWxlc3MKK30KKworUEFDS0FHRVMgPSAibGliaXctZGJnIGlmcmVuYW1lLWRiZyAke1BOfS1kYmcgXAorbGliaXcgbGliaXctZGV2IGxpYml3LWRvYyBpZnJlbmFtZS1kb2MgaWZyZW5hbWUgJHtQTn0gJHtQTn0tZG9jIgorCitGSUxFU19saWJpdy1kYmcgPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy8qLnNvLioiCitGSUxFU19pZnJlbmFtZS1kYmcgPSAiJHtzYmluZGlyfS8uZGVidWcvaWZyZW5hbWUiCitGSUxFU19saWJpdyA9ICIke2xpYmRpcn0vKi5zby4qIgorRklMRVNfbGliaXctZGV2ID0gIiR7bGliZGlyfS8qLmEgJHtsaWJkaXJ9Lyouc28gJHtpbmNsdWRlZGlyfSIKK0ZJTEVTX2xpYml3LWRvYyA9ICIke21hbmRpcn0vbWFuNyIKK0ZJTEVTX2lmcmVuYW1lID0gIiR7c2JpbmRpcn0vaWZyZW5hbWUiCitGSUxFU19pZnJlbmFtZS1kb2MgPSAiJHttYW5kaXJ9L21hbjgvaWZyZW5hbWUuOCAke21hbmRpcn0vbWFuNS9pZnRhYi41IgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7c2JpbmRpcn0vaXcqICR7YmFzZV9zYmluZGlyfSAke2Jhc2VfYmluZGlyfSAke3N5c2NvbmZkaXJ9L25ldHdvcmsiCitGSUxFU18ke1BOfS1kb2MgPSAiJHttYW5kaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUFQLVdNTS1GaXgtaW50ZWdlci11bmRlcmZsb3ctaW4tV01NLUFjdGlvbi1mcmFtZS1wYXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtQVAtV01NLUZpeC1pbnRlZ2VyLXVuZGVyZmxvdy1pbi1XTU0tQWN0aW9uLWZyYW1lLXBhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI2NzRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUFQLVdNTS1GaXgtaW50ZWdlci11bmRlcmZsb3ctaW4tV01NLUFjdGlvbi1mcmFtZS1wYXIucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIGVmNTY2YTRkNGY3NDAyMmUxZmRiMGEyYWRkZmU4MWU2ZGU5ZjRhYWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogV2VkLCAyOSBBcHIgMjAxNSAwMjoyMTo1MyArMDMwMAorU3ViamVjdDogW1BBVENIXSBBUCBXTU06IEZpeCBpbnRlZ2VyIHVuZGVyZmxvdyBpbiBXTU0gQWN0aW9uIGZyYW1lIHBhcnNlcgorCitUaGUgbGVuZ3RoIG9mIHRoZSBXTU0gQWN0aW9uIGZyYW1lIHdhcyBub3QgcHJvcGVybHkgdmFsaWRhdGVkIGFuZCB0aGUKK2xlbmd0aCBvZiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMgKGludCBsZWZ0KSBjb3VsZCBlbmQgdXAgYmVpbmcKK25lZ2F0aXZlLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiByZWFkaW5nIHNpZ25pZmljYW50bHkgcGFzdCB0aGUgc3RhY2sKK2J1ZmZlciB3aGlsZSBwYXJzaW5nIHRoZSBJRXMgaW4gaWVlZTgwMl8xMV9wYXJzZV9lbGVtcygpIGFuZCB3aGlsZSBkb2luZworc28sIHJlc3VsdGluZyBpbiBzZWdtZW50YXRpb24gZmF1bHQuCisKK1RoaXMgY2FuIHJlc3VsdCBpbiBhbiBpbnZhbGlkIGZyYW1lIGJlaW5nIHVzZWQgZm9yIGEgZGVuaWFsIG9mIHNlcnZpY2UKK2F0dGFjayAoaG9zdGFwZCBwcm9jZXNzIGtpbGxlZCkgYWdhaW5zdCBhbiBBUCB3aXRoIGEgZHJpdmVyIHRoYXQgdXNlcworaG9zdGFwZCBmb3IgbWFuYWdlbWVudCBmcmFtZSBwcm9jZXNzaW5nIChlLmcuLCBhbGwgbWFjODAyMTEtYmFzZWQKK2RyaXZlcnMpLgorCitUaGFua3MgdG8gS29zdHlhIEtvcnRjaGluc2t5IG9mIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBhbmQKK3JlcG9ydGluZyB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL2FwL3dtbS5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvYXAvd21tLmMgYi9zcmMvYXAvd21tLmMKK2luZGV4IDZkNDE3N2MuLjMxNGUyNDQgMTAwNjQ0CistLS0gYS9zcmMvYXAvd21tLmMKKysrKyBiL3NyYy9hcC93bW0uYworQEAgLTI3NCw2ICsyNzQsOSBAQCB2b2lkIGhvc3RhcGRfd21tX2FjdGlvbihzdHJ1Y3QgaG9zdGFwZF9kYXRhICpoYXBkLAorIAkJcmV0dXJuOworIAl9CisgCisrCWlmIChsZWZ0IDwgMCkKKysJCXJldHVybjsgLyogbm90IGEgdmFsaWQgV01NIEFjdGlvbiBmcmFtZSAqLworKworIAkvKiBleHRyYWN0IHRoZSB0c3BlYyBpbmZvIGVsZW1lbnQgKi8KKyAJaWYgKGllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZWZ0LCAmZWxlbXMsIDEpID09IFBhcnNlRmFpbGVkKSB7CisgCQlob3N0YXBkX2xvZ2dlcihoYXBkLCBtZ210LT5zYSwgSE9TVEFQRF9NT0RVTEVfSUVFRTgwMjExLAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtRUFQLXB3ZC1wZWVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db21taS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1FQVAtcHdkLXBlZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbW1pLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYmFmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtRUFQLXB3ZC1wZWVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db21taS5wYXRjaApAQCAtMCwwICsxLDc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gZGQyZjA0M2M5YzQzZDE1NjQ5NGUzM2Q3Y2UyMmRiOTZlNmVmNDJjNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBGcmksIDEgTWF5IDIwMTUgMTY6Mzc6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzVdIEVBUC1wd2QgcGVlcjogRml4IHBheWxvYWQgbGVuZ3RoIHZhbGlkYXRpb24gZm9yIENvbW1pdAorIGFuZCBDb25maXJtCisKK1RoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIENvbW1pdCBhbmQgQ29uZmlybSBtZXNzYWdlIHBheWxvYWRzIHdhcyBub3QKK2NoZWNrZWQgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhpcyBjb3VsZCByZXN1bHQgaW4gYSBidWZmZXIgcmVhZAorb3ZlcmZsb3cgd2hlbiBwcm9jZXNzaW5nIGFuIGludmFsaWQgbWVzc2FnZS4KKworRml4IHRoaXMgYnkgdmVyaWZ5aW5nIHRoYXQgdGhlIHBheWxvYWQgaXMgb2YgZXhwZWN0ZWQgbGVuZ3RoIGJlZm9yZQorcHJvY2Vzc2luZyBpdC4gSW4gYWRkaXRpb24sIGVuZm9yY2UgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9uIHNlcXVlbmNlIHRvCittYWtlIHN1cmUgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBiZWhhdmlvciBpZiByZWNlaXZpbmcgYSBDb21taXQvQ29uZmlybQorbWVzc2FnZSBiZWZvcmUgdGhlIHByZXZpb3VzIGV4Y2hhbmdlcyBoYXZlIGJlZW4gY29tcGxldGVkLgorCitUaGFua3MgdG8gS29zdHlhIEtvcnRjaGluc2t5IG9mIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBhbmQKK3JlcG9ydGluZyB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyB8IDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitpbmRleCBmMmIwOTI2Li5hNjI5NDM3IDEwMDY0NAorLS0tIGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworKysrIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworQEAgLTM1NSw2ICszNTUsMjMgQEAgZWFwX3B3ZF9wZXJmb3JtX2NvbW1pdF9leGNoYW5nZShzdHJ1Y3QgZWFwX3NtICpzbSwgc3RydWN0IGVhcF9wd2RfZGF0YSAqZGF0YSwKKyAJQklHTlVNICptYXNrID0gTlVMTCwgKnggPSBOVUxMLCAqeSA9IE5VTEwsICpjb2ZhY3RvciA9IE5VTEw7CisgCXUxNiBvZmZzZXQ7CisgCXU4ICpwdHIsICpzY2FsYXIgPSBOVUxMLCAqZWxlbWVudCA9IE5VTEw7CisrCXNpemVfdCBwcmltZV9sZW4sIG9yZGVyX2xlbjsKKysKKysJaWYgKGRhdGEtPnN0YXRlICE9IFBXRF9Db21taXRfUmVxKSB7CisrCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQlnb3RvIGZpbjsKKysJfQorKworKwlwcmltZV9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5wcmltZSk7CisrCW9yZGVyX2xlbiA9IEJOX251bV9ieXRlcyhkYXRhLT5ncnAtPm9yZGVyKTsKKysKKysJaWYgKHBheWxvYWRfbGVuICE9IDIgKiBwcmltZV9sZW4gKyBvcmRlcl9sZW4pIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sCisrCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgQ29tbWl0IHBheWxvYWQgbGVuZ3RoICV1IChleHBlY3RlZCAldSkiLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBheWxvYWRfbGVuLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpICgyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSk7CisrCQlnb3RvIGZpbjsKKysJfQorIAorIAlpZiAoKChkYXRhLT5wcml2YXRlX3ZhbHVlID0gQk5fbmV3KCkpID09IE5VTEwpIHx8CisgCSAgICAoKGRhdGEtPm15X2VsZW1lbnQgPSBFQ19QT0lOVF9uZXcoZGF0YS0+Z3JwLT5ncm91cCkpID09IE5VTEwpIHx8CitAQCAtNTU0LDYgKzU3MSwxOCBAQCBlYXBfcHdkX3BlcmZvcm1fY29uZmlybV9leGNoYW5nZShzdHJ1Y3QgZWFwX3NtICpzbSwgc3RydWN0IGVhcF9wd2RfZGF0YSAqZGF0YSwKKyAJdTggY29uZltTSEEyNTZfTUFDX0xFTl0sICpjcnVmdCA9IE5VTEwsICpwdHI7CisgCWludCBvZmZzZXQ7CisgCisrCWlmIChkYXRhLT5zdGF0ZSAhPSBQV0RfQ29uZmlybV9SZXEpIHsKKysJCXJldC0+aWdub3JlID0gVFJVRTsKKysJCWdvdG8gZmluOworKwl9CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSBTSEEyNTZfTUFDX0xFTikgeworKwkJd3BhX3ByaW50ZihNU0dfSU5GTywKKysJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBDb25maXJtIHBheWxvYWQgbGVuZ3RoICV1IChleHBlY3RlZCAldSkiLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBheWxvYWRfbGVuLCBTSEEyNTZfTUFDX0xFTik7CisrCQlnb3RvIGZpbjsKKysJfQorKworIAkvKgorIAkgKiBmaXJzdCBidWlsZCB1cCB0aGUgY2lwaGVyc3VpdGUgd2hpY2ggaXMgZ3JvdXAgfCByYW5kb21fZnVuY3Rpb24gfAorIAkgKglwcmYKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtUDJQLVZhbGlkYXRlLVNTSUQtZWxlbWVudC1sZW5ndGgtYmVmb3JlLWNvcHlpbmctaXQtQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTA4YTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA5ZWQ0ZWVlMzQ1Zjg1ZTMwMjVjMzNjNmUyMGFhMjU2OTZlMzQxY2NkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8am91bmlAcWNhLnF1YWxjb21tLmNvbT4KK0RhdGU6IFR1ZSwgNyBBcHIgMjAxNSAxMTozMjoxMSArMDMwMAorU3ViamVjdDogW1BBVENIXSBQMlA6IFZhbGlkYXRlIFNTSUQgZWxlbWVudCBsZW5ndGggYmVmb3JlIGNvcHlpbmcgaXQKKyAoQ1ZFLTIwMTUtMTg2MykKKworVGhpcyBmaXhlcyBhIHBvc3NpYmxlIG1lbWNweSBvdmVyZmxvdyBmb3IgUDJQIGRldi0+b3Blcl9zc2lkIGluCitwMnBfYWRkX2RldmljZSgpLiBUaGUgbGVuZ3RoIHByb3ZpZGVkIGJ5IHRoZSBwZWVyIGRldmljZSAoMC4uMjU1IGJ5dGVzKQord2FzIHVzZWQgd2l0aG91dCBwcm9wZXIgYm91bmRzIGNoZWNraW5nIGFuZCB0aGF0IGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4KK2FyYml0cmFyeSBkYXRhIG9mIHVwIHRvIDIyMyBieXRlcyBiZWluZyB3cml0dGVuIGJleW9uZCB0aGUgZW5kIG9mIHRoZQorZGV2LT5vcGVyX3NzaWRbXSBhcnJheSAob2Ygd2hpY2ggYWJvdXQgMTUwIGJ5dGVzIHdvdWxkIGJlIGJleW9uZCB0aGUKK2hlYXAgYWxsb2NhdGlvbikgd2hlbiBwcm9jZXNzaW5nIGEgY29ycnVwdGVkIG1hbmFnZW1lbnQgZnJhbWUgZm9yIFAyUAorcGVlciBkaXNjb3ZlcnkgcHVycG9zZXMuCisKK1RoaXMgY291bGQgcmVzdWx0IGluIGNvcnJ1cHRlZCBzdGF0ZSBpbiBoZWFwLCB1bmV4cGVjdGVkIHByb2dyYW0KK2JlaGF2aW9yIGR1ZSB0byBjb3JydXB0ZWQgUDJQIHBlZXIgZGV2aWNlIGluZm9ybWF0aW9uLCBkZW5pYWwgb2Ygc2VydmljZQorZHVlIHRvIHByb2Nlc3MgY3Jhc2gsIGV4cG9zdXJlIG9mIG1lbW9yeSBjb250ZW50cyBkdXJpbmcgR08gTmVnb3RpYXRpb24sCithbmQgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLgorCitUaGFua3MgdG8gR29vZ2xlIHNlY3VyaXR5IHRlYW0gZm9yIHJlcG9ydGluZyB0aGlzIGlzc3VlIGFuZCBzbWFydAoraGFyZHdhcmUgcmVzZWFyY2ggZ3JvdXAgb2YgQWxpYmFiYSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBpdC4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8am91bmlAcWNhLnF1YWxjb21tLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHNyYy9wMnAvcDJwLmMgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9wMnAvcDJwLmMgYi9zcmMvcDJwL3AycC5jCitpbmRleCBmNTg0ZmFlLi5hNDVmZTczIDEwMDY0NAorLS0tIGEvc3JjL3AycC9wMnAuYworKysrIGIvc3JjL3AycC9wMnAuYworQEAgLTc3OCw2ICs3NzgsNyBAQCBpbnQgcDJwX2FkZF9kZXZpY2Uoc3RydWN0IHAycF9kYXRhICpwMnAsIGNvbnN0IHU4ICphZGRyLCBpbnQgZnJlcSwKKyAJaWYgKG9zX21lbWNtcChhZGRyLCBwMnBfZGV2X2FkZHIsIEVUSF9BTEVOKSAhPSAwKQorIAkJb3NfbWVtY3B5KGRldi0+aW50ZXJmYWNlX2FkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKyAJaWYgKG1zZy5zc2lkICYmCisrCSAgICBtc2cuc3NpZFsxXSA8PSBzaXplb2YoZGV2LT5vcGVyX3NzaWQpICYmCisgCSAgICAobXNnLnNzaWRbMV0gIT0gUDJQX1dJTERDQVJEX1NTSURfTEVOIHx8CisgCSAgICAgb3NfbWVtY21wKG1zZy5zc2lkICsgMiwgUDJQX1dJTERDQVJEX1NTSUQsIFAyUF9XSUxEQ0FSRF9TU0lEX0xFTikKKyAJICAgICAhPSAwKSkgeworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtV1BTLUZpeC1IVFRQLWNodW5rZWQtdHJhbnNmZXItZW5jb2RpbmctcGFyc2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjhlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtV1BTLUZpeC1IVFRQLWNodW5rZWQtdHJhbnNmZXItZW5jb2RpbmctcGFyc2VyLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSA1YWNkMjNmNDU4MWRhNTg2ODNmM2NmNWUzNmNiNzFiYmU0MDcwYmQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMTc6MDg6MzMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gV1BTOiBGaXggSFRUUCBjaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nIHBhcnNlcgorCitzdHJ0b3VsKCkgcmV0dXJuIHZhbHVlIG1heSBlbmQgdXAgb3ZlcmZsb3dpbmcgdGhlIGludCBoLT5jaHVua19zaXplIGFuZAorcmVzdWx0aW5nIGluIGEgbmVnYXRpdmUgdmFsdWUgdG8gYmUgc3RvcmVkIGFzIHRoZSBjaHVua19zaXplLiBUaGlzIGNvdWxkCityZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBtZW1jcHkgb3BlcmF0aW9uIHVzaW5nIGEgdmVyeSBsYXJnZSBsZW5ndGgKK2FyZ3VtZW50IHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIGJ1ZmZlciBvdmVyZmxvdyBhbmQgc2VnbWVudGF0aW9uIGZhdWx0LgorCitUaGlzIGNvdWxkIGhhdmUgYmVlbiB1c2VkIHRvIGNhdXNlIGEgZGVuaWFsIHNlcnZpY2UgYnkgYW55IGRldmljZSB0aGF0CitoYXMgYmVlbiBhdXRob3JpemVkIGZvciBuZXR3b3JrIGFjY2VzcyAoZWl0aGVyIHdpcmVsZXNzIG9yIHdpcmVkKS4gVGhpcword291bGQgYWZmZWN0IGJvdGggdGhlIFdQUyBVUG5QIGZ1bmN0aW9uYWxpdHkgaW4gYSBXUFMgQVAgKGhvc3RhcGQgd2l0aAordXBucF9pZmFjZSBwYXJhbWV0ZXIgc2V0IGluIHRoZSBjb25maWd1cmF0aW9uKSBhbmQgV1BTIEVSCisod3BhX3N1cHBsaWNhbnQgd2l0aCBXUFNfRVJfU1RBUlQgY29udHJvbCBpbnRlcmZhY2UgY29tbWFuZCB1c2VkKS4KKworVmFsaWRhdGUgdGhlIHBhcnNlZCBjaHVuayBsZW5ndGggdmFsdWUgdG8gYXZvaWQgdGhpcy4gSW4gYWRkaXRpb24gdG8KK3JlamVjdGluZyBuZWdhdGl2ZSB2YWx1ZXMsIHdlIGNhbiBhbHNvIHJlamVjdCBjaHVuayBzaXplIHRoYXQgd291bGQgYmUKK2xhcmdlciB0aGFuIHRoZSBtYXhpbXVtIGNvbmZpZ3VyZWQgYm9keSBsZW5ndGguCisKK1RoYW5rcyB0byBLb3N0eWEgS29ydGNoaW5za3kgb2YgR29vZ2xlIHNlY3VyaXR5IHRlYW0gZm9yIGRpc2NvdmVyaW5nIGFuZAorcmVwb3J0aW5nIHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvd3BzL2h0dHByZWFkLmMgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvd3BzL2h0dHByZWFkLmMgYi9zcmMvd3BzL2h0dHByZWFkLmMKK2luZGV4IDJmMDhmMzcuLmQyODU1ZTMgMTAwNjQ0CistLS0gYS9zcmMvd3BzL2h0dHByZWFkLmMKKysrKyBiL3NyYy93cHMvaHR0cHJlYWQuYworQEAgLTUzMyw2ICs1MzMsMTMgQEAgc3RhdGljIHZvaWQgaHR0cHJlYWRfcmVhZF9oYW5kbGVyKGludCBzZCwgdm9pZCAqZWxvb3BfY3R4LCB2b2lkICpzb2NrX2N0eCkKKyAJCQkJCWlmICghaXN4ZGlnaXQoKmNicCkpCisgCQkJCQkJZ290byBiYWQ7CisgCQkJCQloLT5jaHVua19zaXplID0gc3RydG91bChjYnAsIE5VTEwsIDE2KTsKKysJCQkJCWlmIChoLT5jaHVua19zaXplIDwgMCB8fAorKwkJCQkJICAgIGgtPmNodW5rX3NpemUgPiBoLT5tYXhfYnl0ZXMpIHsKKysJCQkJCQl3cGFfcHJpbnRmKE1TR19ERUJVRywKKysJCQkJCQkJICAgImh0dHByZWFkOiBJbnZhbGlkIGNodW5rIHNpemUgJWQiLAorKwkJCQkJCQkgICBoLT5jaHVua19zaXplKTsKKysJCQkJCQlnb3RvIGJhZDsKKysJCQkJCX0KKyAJCQkJCS8qIHRocm93IGF3YXkgY2h1bmsgaGVhZGVyCisgCQkJCQkgKiBzbyB3ZSBoYXZlIG9ubHkgcmVhbCBkYXRhCisgCQkJCQkgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLUVBUC1wd2Qtc2VydmVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDItRUFQLXB3ZC1zZXJ2ZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDc3YzJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLUVBUC1wd2Qtc2VydmVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db20ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIGUyOGE1OGJlMjYxODRjMmEyM2Y4MGI0MTBlMDk5N2VmMWJkNWQ1NzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjQwOjQ0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBFQVAtcHdkIHNlcnZlcjogRml4IHBheWxvYWQgbGVuZ3RoIHZhbGlkYXRpb24gZm9yIENvbW1pdAorIGFuZCBDb25maXJtCisKK1RoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIENvbW1pdCBhbmQgQ29uZmlybSBtZXNzYWdlIHBheWxvYWRzIHdhcyBub3QKK2NoZWNrZWQgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhpcyBjb3VsZCByZXN1bHQgaW4gYSBidWZmZXIgcmVhZAorb3ZlcmZsb3cgd2hlbiBwcm9jZXNzaW5nIGFuIGludmFsaWQgbWVzc2FnZS4KKworRml4IHRoaXMgYnkgdmVyaWZ5aW5nIHRoYXQgdGhlIHBheWxvYWQgaXMgb2YgZXhwZWN0ZWQgbGVuZ3RoIGJlZm9yZQorcHJvY2Vzc2luZyBpdC4gSW4gYWRkaXRpb24sIGVuZm9yY2UgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9uIHNlcXVlbmNlIHRvCittYWtlIHN1cmUgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBiZWhhdmlvciBpZiByZWNlaXZpbmcgYSBDb21taXQvQ29uZmlybQorbWVzc2FnZSBiZWZvcmUgdGhlIHByZXZpb3VzIGV4Y2hhbmdlcyBoYXZlIGJlZW4gY29tcGxldGVkLgorCitUaGFua3MgdG8gS29zdHlhIEtvcnRjaGluc2t5IG9mIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBhbmQKK3JlcG9ydGluZyB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYyB8IDE5ICsrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYyBiL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKK2luZGV4IDY2YmQ1ZDIuLjMxODkxMDUgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCisrKysgYi9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCitAQCAtNjU2LDkgKzY1NiwyMSBAQCBlYXBfcHdkX3Byb2Nlc3NfY29tbWl0X3Jlc3Aoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCUJJR05VTSAqeCA9IE5VTEwsICp5ID0gTlVMTCwgKmNvZmFjdG9yID0gTlVMTDsKKyAJRUNfUE9JTlQgKksgPSBOVUxMLCAqcG9pbnQgPSBOVUxMOworIAlpbnQgcmVzID0gMDsKKysJc2l6ZV90IHByaW1lX2xlbiwgb3JkZXJfbGVuOworIAorIAl3cGFfcHJpbnRmKE1TR19ERUJVRywgIkVBUC1wd2Q6IFJlY2VpdmVkIGNvbW1pdCByZXNwb25zZSIpOworIAorKwlwcmltZV9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5wcmltZSk7CisrCW9yZGVyX2xlbiA9IEJOX251bV9ieXRlcyhkYXRhLT5ncnAtPm9yZGVyKTsKKysKKysJaWYgKHBheWxvYWRfbGVuICE9IDIgKiBwcmltZV9sZW4gKyBvcmRlcl9sZW4pIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sCisrCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgQ29tbWl0IHBheWxvYWQgbGVuZ3RoICV1IChleHBlY3RlZCAldSkiLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBheWxvYWRfbGVuLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpICgyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSk7CisrCQlnb3RvIGZpbjsKKysJfQorKworIAlpZiAoKChkYXRhLT5wZWVyX3NjYWxhciA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChkYXRhLT5rID0gQk5fbmV3KCkpID09IE5VTEwpIHx8CisgCSAgICAoKGNvZmFjdG9yID0gQk5fbmV3KCkpID09IE5VTEwpIHx8CitAQCAtNzc0LDYgKzc4NiwxMyBAQCBlYXBfcHdkX3Byb2Nlc3NfY29uZmlybV9yZXNwKHN0cnVjdCBlYXBfc20gKnNtLCBzdHJ1Y3QgZWFwX3B3ZF9kYXRhICpkYXRhLAorIAl1OCBjb25mW1NIQTI1Nl9NQUNfTEVOXSwgKmNydWZ0ID0gTlVMTCwgKnB0cjsKKyAJaW50IG9mZnNldDsKKyAKKysJaWYgKHBheWxvYWRfbGVuICE9IFNIQTI1Nl9NQUNfTEVOKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbmZpcm0gcGF5bG9hZCBsZW5ndGggJXUgKGV4cGVjdGVkICV1KSIsCisrCQkJICAgKHVuc2lnbmVkIGludCkgcGF5bG9hZF9sZW4sIFNIQTI1Nl9NQUNfTEVOKTsKKysJCWdvdG8gZmluOworKwl9CisrCisgCS8qIGJ1aWxkIHVwIHRoZSBjaXBoZXJzdWl0ZTogZ3JvdXAgfCByYW5kb21fZnVuY3Rpb24gfCBwcmYgKi8KKyAJZ3JwID0gaHRvbnMoZGF0YS0+Z3JvdXBfbnVtKTsKKyAJcHRyID0gKHU4ICopICZjczsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDMtRUFQLXB3ZC1wZWVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQtci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZjZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIDQ3N2M3NDM5NWFjZDAxMjMzNDA0NTdiYTZmMTVhYjM0NWQ0MjAxNmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE5OjIzOjA0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMy81XSBFQVAtcHdkIHBlZXI6IEZpeCBUb3RhbC1MZW5ndGggcGFyc2luZyBmb3IgZnJhZ21lbnQKKyByZWFzc2VtYmx5CisKK1RoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBtZXNzYWdlIGNvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aGUKK1RvdGFsLUxlbmd0aCBmaWVsZCBzaXplLCBzbyB0aGUgbGVuZ3RoIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgY2hlY2tlZAorcHJpb3IgdG8gcmVhZGluZyB0aGUgZmllbGQgYW5kIGRlY3JlbWVudGluZyB0aGUgbGVuIHZhcmlhYmxlLiBUaGlzIGNvdWxkCitoYXZlIHJlc3VsdGVkIGluIHRoZSByZW1haW5pbmcgbGVuZ3RoIGJlY29taW5nIG5lZ2F0aXZlIGFuZCBpbnRlcnByZXRlZAorYXMgYSBodWdlIHBvc2l0aXZlIGludGVnZXIuCisKK0luIGFkZGl0aW9uLCBjaGVjayB0aGF0IHRoZXJlIGlzIG5vIGFscmVhZHkgc3RhcnRlZCBmcmFnbWVudCBpbiBwcm9ncmVzcworYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcgYnVmZmVyIGZvciByZWFzc2VtYmxpbmcgZnJhZ21lbnRzLiBUaGlzIGF2b2lkIGEKK3BvdGVudGlhbCBtZW1vcnkgbGVhayB3aGVuIHByb2Nlc3NpbmcgaW52YWxpZCBtZXNzYWdlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyB8IDEyICsrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggYTYyOTQzNy4uMWQyMDc5YiAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC04NjYsMTEgKzg2NiwyMyBAQCBlYXBfcHdkX3Byb2Nlc3Moc3RydWN0IGVhcF9zbSAqc20sIHZvaWQgKnByaXYsIHN0cnVjdCBlYXBfbWV0aG9kX3JldCAqcmV0LAorIAkgKiBpZiBpdCdzIHRoZSBmaXJzdCBmcmFnbWVudCB0aGVyZSdsbCBiZSBhIGxlbmd0aCBmaWVsZAorIAkgKi8KKyAJaWYgKEVBUF9QV0RfR0VUX0xFTkdUSF9CSVQobG1fZXhjaCkpIHsKKysJCWlmIChsZW4gPCAyKSB7CisrCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCSAgICJFQVAtcHdkOiBGcmFtZSB0b28gc2hvcnQgdG8gY29udGFpbiBUb3RhbC1MZW5ndGggZmllbGQiKTsKKysJCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisgCQl0b3RfbGVuID0gV1BBX0dFVF9CRTE2KHBvcyk7CisgCQl3cGFfcHJpbnRmKE1TR19ERUJVRywgIkVBUC1wd2Q6IEluY29taW5nIGZyYWdtZW50cyB3aG9zZSAiCisgCQkJICAgInRvdGFsIGxlbmd0aCA9ICVkIiwgdG90X2xlbik7CisgCQlpZiAodG90X2xlbiA+IDE1MDAwKQorIAkJCXJldHVybiBOVUxMOworKwkJaWYgKGRhdGEtPmluYnVmKSB7CisrCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIG5ldyBmcmFnbWVudCBzdGFydCB3aGVuIHByZXZpb3VzIGZyYWdtZW50IGlzIHN0aWxsIGluIHVzZSIpOworKwkJCXJldC0+aWdub3JlID0gVFJVRTsKKysJCQlyZXR1cm4gTlVMTDsKKysJCX0KKyAJCWRhdGEtPmluYnVmID0gd3BhYnVmX2FsbG9jKHRvdF9sZW4pOworIAkJaWYgKGRhdGEtPmluYnVmID09IE5VTEwpIHsKKyAJCQl3cGFfcHJpbnRmKE1TR19JTkZPLCAiT3V0IG9mIG1lbW9yeSB0byBidWZmZXIgIgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDQtRUFQLXB3ZC1zZXJ2ZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNC1FQVAtcHdkLXNlcnZlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzAyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDQtRUFQLXB3ZC1zZXJ2ZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gMzAzNWNjMjg5NGUwODMxOWI5MDViZDY1NjFlOGJkZGM4YzJkYjlmYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBTYXQsIDIgTWF5IDIwMTUgMTk6MjY6MDYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzVdIEVBUC1wd2Qgc2VydmVyOiBGaXggVG90YWwtTGVuZ3RoIHBhcnNpbmcgZm9yIGZyYWdtZW50CisgcmVhc3NlbWJseQorCitUaGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZSBjb3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlCitUb3RhbC1MZW5ndGggZmllbGQgc2l6ZSwgc28gdGhlIGxlbmd0aCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGNoZWNrZWQKK3ByaW9yIHRvIHJlYWRpbmcgdGhlIGZpZWxkIGFuZCBkZWNyZW1lbnRpbmcgdGhlIGxlbiB2YXJpYWJsZS4gVGhpcyBjb3VsZAoraGF2ZSByZXN1bHRlZCBpbiB0aGUgcmVtYWluaW5nIGxlbmd0aCBiZWNvbWluZyBuZWdhdGl2ZSBhbmQgaW50ZXJwcmV0ZWQKK2FzIGEgaHVnZSBwb3NpdGl2ZSBpbnRlZ2VyLgorCitJbiBhZGRpdGlvbiwgY2hlY2sgdGhhdCB0aGVyZSBpcyBubyBhbHJlYWR5IHN0YXJ0ZWQgZnJhZ21lbnQgaW4gcHJvZ3Jlc3MKK2JlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IGJ1ZmZlciBmb3IgcmVhc3NlbWJsaW5nIGZyYWdtZW50cy4gVGhpcyBhdm9pZCBhCitwb3RlbnRpYWwgbWVtb3J5IGxlYWsgd2hlbiBwcm9jZXNzaW5nIGludmFsaWQgbWVzc2FnZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgfCAxMCArKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgYi9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCitpbmRleCAzMTg5MTA1Li4yYmZjM2MyIDEwMDY0NAorLS0tIGEvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworKysrIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworQEAgLTk0MiwxMSArOTQyLDIxIEBAIHN0YXRpYyB2b2lkIGVhcF9wd2RfcHJvY2VzcyhzdHJ1Y3QgZWFwX3NtICpzbSwgdm9pZCAqcHJpdiwKKyAJICogdGhlIGZpcnN0IGZyYWdtZW50IGhhcyBhIHRvdGFsIGxlbmd0aAorIAkgKi8KKyAJaWYgKEVBUF9QV0RfR0VUX0xFTkdUSF9CSVQobG1fZXhjaCkpIHsKKysJCWlmIChsZW4gPCAyKSB7CisrCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCSAgICJFQVAtcHdkOiBGcmFtZSB0b28gc2hvcnQgdG8gY29udGFpbiBUb3RhbC1MZW5ndGggZmllbGQiKTsKKysJCQlyZXR1cm47CisrCQl9CisgCQl0b3RfbGVuID0gV1BBX0dFVF9CRTE2KHBvcyk7CisgCQl3cGFfcHJpbnRmKE1TR19ERUJVRywgIkVBUC1wd2Q6IEluY29taW5nIGZyYWdtZW50cywgdG90YWwgIgorIAkJCSAgICJsZW5ndGggPSAlZCIsIHRvdF9sZW4pOworIAkJaWYgKHRvdF9sZW4gPiAxNTAwMCkKKyAJCQlyZXR1cm47CisrCQlpZiAoZGF0YS0+aW5idWYpIHsKKysJCQl3cGFfcHJpbnRmKE1TR19ERUJVRywKKysJCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgbmV3IGZyYWdtZW50IHN0YXJ0IHdoZW4gcHJldmlvdXMgZnJhZ21lbnQgaXMgc3RpbGwgaW4gdXNlIik7CisrCQkJcmV0dXJuOworKwkJfQorIAkJZGF0YS0+aW5idWYgPSB3cGFidWZfYWxsb2ModG90X2xlbik7CisgCQlpZiAoZGF0YS0+aW5idWYgPT0gTlVMTCkgeworIAkJCXdwYV9wcmludGYoTVNHX0lORk8sICJFQVAtcHdkOiBPdXQgb2YgbWVtb3J5IHRvICIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNzM2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDUtRUFQLXB3ZC1wZWVyLUZpeC1hc3ltbWV0cmljLWZyYWdtZW50YXRpb24tYmVoYXZpb3IucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIDI4YTA2OWE1NDViMDZiOTllYjU1YWQ1M2Y2M2YyYzk5ZTY1YTk4ZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE5OjI2OjI4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNS81XSBFQVAtcHdkIHBlZXI6IEZpeCBhc3ltbWV0cmljIGZyYWdtZW50YXRpb24gYmVoYXZpb3IKKworVGhlIEwgKExlbmd0aCkgYW5kIE0gKE1vcmUpIGZsYWdzIG5lZWRzIHRvIGJlIGNsZWFyZWQgYmVmb3JlIGRlY2lkaW5nCit3aGV0aGVyIHRoZSBsb2NhbGx5IGdlbmVyYXRlZCByZXNwb25zZSByZXF1aXJlcyBmcmFnbWVudGF0aW9uLiBUaGlzCitmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGVzZSBmbGFncyBmcm9tIHRoZSBzZXJ2ZXIgY291bGQgaGF2ZSBiZWVuIGludmFsaWQKK2ZvciB0aGUgZm9sbG93aW5nIG1lc3NhZ2UuIEluIHNvbWUgY2FzZXMsIHRoaXMgY291bGQgaGF2ZSByZXN1bHRlZCBpbgordHJpZ2dlcmluZyB0aGUgd3BhYnVmIHNlY3VyaXR5IGNoZWNrIHRoYXQgd291bGQgdGVybWluYXRlIHRoZSBwcm9jZXNzCitkdWUgdG8gaW52YWxpZCBidWZmZXIgYWxsb2NhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitpbmRleCAxZDIwNzliLi5lNThiMTNhIDEwMDY0NAorLS0tIGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworKysrIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworQEAgLTk2OCw2ICs5NjgsNyBAQCBlYXBfcHdkX3Byb2Nlc3Moc3RydWN0IGVhcF9zbSAqc20sIHZvaWQgKnByaXYsIHN0cnVjdCBlYXBfbWV0aG9kX3JldCAqcmV0LAorIAkvKgorIAkgKiB3ZSBoYXZlIG91dHB1dCEgRG8gd2UgbmVlZCB0byBmcmFnbWVudCBpdD8KKyAJICovCisrCWxtX2V4Y2ggPSBFQVBfUFdEX0dFVF9FWENIQU5HRShsbV9leGNoKTsKKyAJbGVuID0gd3BhYnVmX2xlbihkYXRhLT5vdXRidWYpOworIAlpZiAoKGxlbiArIEVBUF9QV0RfSERSX1NJWkUpID4gZGF0YS0+bXR1KSB7CisgCQlyZXNwID0gZWFwX21zZ19hbGxvYyhFQVBfVkVORE9SX0lFVEYsIEVBUF9UWVBFX1BXRCwgZGF0YS0+bXR1LAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50Lzk5X3dwYV9zdXBwbGljYW50IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC85OV93cGFfc3VwcGxpY2FudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmY0ZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC85OV93cGFfc3VwcGxpY2FudApAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzAwIC92YXIvcnVuL3dwYV9zdXBwbGljYW50IG5vbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvZGVmY29uZmlnIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0ZTM5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvZGVmY29uZmlnCkBAIC0wLDAgKzEsNTUyIEBACisjIEV4YW1wbGUgd3BhX3N1cHBsaWNhbnQgYnVpbGQgdGltZSBjb25maWd1cmF0aW9uCisjCisjIFRoaXMgZmlsZSBsaXN0cyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2hlbiBidWlsZGluZyB0aGUKKyMgaG9zdGFwZCBiaW5hcnkuIEFsbCBsaW5lcyBzdGFydGluZyB3aXRoICMgYXJlIGlnbm9yZWQuIENvbmZpZ3VyYXRpb24gb3B0aW9uCisjIGxpbmVzIG11c3QgYmUgY29tbWVudGVkIG91dCBjb21wbGV0ZSwgaWYgdGhleSBhcmUgbm90IHRvIGJlIGluY2x1ZGVkLCBpLmUuLAorIyBqdXN0IHNldHRpbmcgVkFSSUFCTEU9biBpcyBub3QgZGlzYWJsaW5nIHRoYXQgdmFyaWFibGUuCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBpbiBNYWtlZmlsZSwgc28gdmFyaWFibGVzIGxpa2UgQ0ZMQUdTIGFuZCBMSUJTIGNhbiBhbHNvCisjIGJlIG1vZGlmaWVkIGZyb20gaGVyZS4gSW4gbW9zdCBjYXNlcywgdGhlc2UgbGluZXMgc2hvdWxkIHVzZSArPSBpbiBvcmRlciBub3QKKyMgdG8gb3ZlcnJpZGUgcHJldmlvdXMgdmFsdWVzIG9mIHRoZSB2YXJpYWJsZXMuCisKKworIyBVbmNvbW1lbnQgZm9sbG93aW5nIHR3byBsaW5lcyBhbmQgZml4IHRoZSBwYXRocyBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgT3BlblNTTAorIyBvciBHbnVUTFMgaW4gbm9uLWRlZmF1bHQgbG9jYXRpb24KKyNDRkxBR1MgKz0gLUkvdXNyL2xvY2FsL29wZW5zc2wvaW5jbHVkZQorI0xJQlMgKz0gLUwvdXNyL2xvY2FsL29wZW5zc2wvbGliCisKKyMgU29tZSBSZWQgSGF0IHZlcnNpb25zIHNlZW0gdG8gaW5jbHVkZSBrZXJiZXJvcyBoZWFkZXIgZmlsZXMgZnJvbSBPcGVuU1NMLCBidXQKKyMgdGhlIGtlcmJlcm9zIGZpbGVzIGFyZSBub3QgaW4gdGhlIGRlZmF1bHQgaW5jbHVkZSBwYXRoLiBGb2xsb3dpbmcgbGluZSBjYW4gYmUKKyMgdXNlZCB0byBmaXggYnVpbGQgaXNzdWVzIG9uIHN1Y2ggc3lzdGVtcyAoa3JiNS5oIG5vdCBmb3VuZCkuCisjQ0ZMQUdTICs9IC1JL3Vzci9pbmNsdWRlL2tlcmJlcm9zCisKKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIGZvciB2YXJpb3VzIGNyb3NzLWNvbXBpbGF0aW9uIHBsYXRmb3JtcworCisjIyMjIHN2ZWFzb2Z0IChlLmcuLCBmb3IgTGlua3N5cyBXUlQ1NEcpICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjQ0M9bWlwc2VsLXVjbGliYy1nY2MKKyNDQz0vb3B0L2JyY20vaG5kdG9vbHMtbWlwc2VsLXVjbGliYy9iaW4vbWlwc2VsLXVjbGliYy1nY2MKKyNDRkxBR1MgKz0gLU9zCisjQ1BQRkxBR1MgKz0gLUkuLi9zcmMvaW5jbHVkZSAtSS4uLy4uL3NyYy9yb3V0ZXIvb3BlbnNzbC9pbmNsdWRlCisjTElCUyArPSAtTC9vcHQvYnJjbS9obmR0b29scy1taXBzZWwtdWNsaWJjLTAuOS4xOS9saWIgLWxzc2wKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyBvcGVud3J0IChlLmcuLCBmb3IgTGlua3N5cyBXUlQ1NEcpICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0NDPW1pcHNlbC11Y2xpYmMtZ2NjCisjQ0M9L29wdC9icmNtL2huZHRvb2xzLW1pcHNlbC11Y2xpYmMvYmluL21pcHNlbC11Y2xpYmMtZ2NjCisjQ0ZMQUdTICs9IC1PcworI0NQUEZMQUdTPS1JLi4vc3JjL2luY2x1ZGUgLUkuLi9vcGVuc3NsLTAuOS43ZC9pbmNsdWRlIFwKKyMJLUkuLi9XUlQ1NEdTL3JlbGVhc2Uvc3JjL2luY2x1ZGUKKyNMSUJTID0gLWxzc2wKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEhvc3QgQVAgZHJpdmVyCitDT05GSUdfRFJJVkVSX0hPU1RBUD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgQWdlcmUgZHJpdmVyCisjQ09ORklHX0RSSVZFUl9IRVJNRVM9eQorIyBDaGFuZ2UgaW5jbHVkZSBkaXJlY3RvcmllcyB0byBtYXRjaCB3aXRoIHRoZSBsb2NhbCBzZXR1cAorI0NGTEFHUyArPSAtSS4uLy4uL2hjZiAtSS4uLy4uL2luY2x1ZGUgLUkuLi8uLi9pbmNsdWRlL2hjZgorI0NGTEFHUyArPSAtSS4uLy4uL2luY2x1ZGUvd2lyZWxlc3MKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBtYWR3aWZpIGRyaXZlcgorIyBEZXByZWNhdGVkOyB1c2UgQ09ORklHX0RSSVZFUl9XRVhUPXkgaW5zdGVhZC4KKyNDT05GSUdfRFJJVkVSX01BRFdJRkk9eQorIyBTZXQgaW5jbHVkZSBkaXJlY3RvcnkgdG8gdGhlIG1hZHdpZmkgc291cmNlIHRyZWUKKyNDRkxBR1MgKz0gLUkuLi8uLi9tYWR3aWZpCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgbmRpc3dyYXBwZXIKKyMgRGVwcmVjYXRlZDsgdXNlIENPTkZJR19EUklWRVJfV0VYVD15IGluc3RlYWQuCisjQ09ORklHX0RSSVZFUl9ORElTV1JBUFBFUj15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgQXRtZWwgZHJpdmVyCisjIENPTkZJR19EUklWRVJfQVRNRUw9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG9sZCBCcm9hZGNvbSBkcml2ZXIKKyMgUGxlYXNlIG5vdGUgdGhhdCB0aGUgbmV3ZXIgQnJvYWRjb20gZHJpdmVyICgiaHlicmlkIExpbnV4IGRyaXZlciIpIHN1cHBvcnRzCisjIExpbnV4IHdpcmVsZXNzIGV4dGVuc2lvbnMgYW5kIGRvZXMgbm90IG5lZWQgKG9yIGV2ZW4gd29yaykgd2l0aCB0aGUgb2xkCisjIGRyaXZlciB3cmFwcGVyLiBVc2UgQ09ORklHX0RSSVZFUl9XRVhUPXkgd2l0aCB0aGF0IGRyaXZlci4KKyNDT05GSUdfRFJJVkVSX0JST0FEQ09NPXkKKyMgRXhhbXBsZSBwYXRoIGZvciB3bGlvY3RsLmg7IGNoYW5nZSB0byBtYXRjaCB5b3VyIGNvbmZpZ3VyYXRpb24KKyNDRkxBR1MgKz0gLUkvb3B0L1dSVDU0R1MvcmVsZWFzZS9zcmMvaW5jbHVkZQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEludGVsIGlwdzIxMDAvMjIwMCBkcml2ZXIKKyMgRGVwcmVjYXRlZDsgdXNlIENPTkZJR19EUklWRVJfV0VYVD15IGluc3RlYWQuCisjQ09ORklHX0RSSVZFUl9JUFc9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIFJhbGluayBkcml2ZXIKKyNDT05GSUdfRFJJVkVSX1JBTElOSz15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgZ2VuZXJpYyBMaW51eCB3aXJlbGVzcyBleHRlbnNpb25zCisjIE5vdGU6IFdFWFQgaXMgZGVwcmVjYXRlZCBpbiB0aGUgY3VycmVudCBMaW51eCBrZXJuZWwgdmVyc2lvbiBhbmQgbm8gbmV3CisjIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgdG8gaXQuIG5sODAyMTEtYmFzZWQgaW50ZXJmYWNlIGlzIHRoZSBuZXcKKyMgcmVwbGFjZW1lbnQgZm9yIFdFWFQgYW5kIGl0cyB1c2UgYWxsb3dzIHdwYV9zdXBwbGljYW50IHRvIHByb3Blcmx5IGNvbnRyb2wKKyMgdGhlIGRyaXZlciB0byBpbXByb3ZlIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgbGlrZSByb2FtaW5nIGFuZCB0byBzdXBwb3J0IG5ldworIyBmdW5jdGlvbmFsaXR5LgorQ09ORklHX0RSSVZFUl9XRVhUPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBMaW51eCBkcml2ZXJzIHVzaW5nIHRoZSBubDgwMjExIGtlcm5lbCBpbnRlcmZhY2UKK0NPTkZJR19EUklWRVJfTkw4MDIxMT15CisKKyMgZHJpdmVyX25sODAyMTEuYyByZXF1aXJlcyBsaWJubC4gSWYgeW91IGFyZSBjb21waWxpbmcgaXQgeW91cnNlbGYKKyMgeW91IG1heSBuZWVkIHRvIHBvaW50IGhvc3RhcGQgdG8geW91ciB2ZXJzaW9uIG9mIGxpYm5sLgorIworI0NGTEFHUyArPSAtSSQ8cGF0aCB0byBsaWJubCBpbmNsdWRlIGZpbGVzPgorI0xJQlMgKz0gLUwkPHBhdGggdG8gbGlibmwgbGlicmFyeSBmaWxlcz4KKworIyBVc2UgbGlibmwgdjIuMCAob3IgMy4wKSBsaWJyYXJpZXMuCisjQ09ORklHX0xJQk5MMjA9eQorCisjIFVzZSBsaWJubCAzLjIgbGlicmFyaWVzIChpZiB0aGlzIGlzIHNlbGVjdGVkLCBDT05GSUdfTElCTkwyMCBpcyBpZ25vcmVkKQorQ09ORklHX0xJQk5MMzI9eQorCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgRnJlZUJTRCBuZXQ4MDIxMSBsYXllciAoZS5nLiwgQXRoZXJvcyBkcml2ZXIpCisjQ09ORklHX0RSSVZFUl9CU0Q9eQorI0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQorI0xJQlMgKz0gLUwvdXNyL2xvY2FsL2xpYgorI0xJQlNfcCArPSAtTC91c3IvbG9jYWwvbGliCisjTElCU19jICs9IC1ML3Vzci9sb2NhbC9saWIKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBXaW5kb3dzIE5ESVMKKyNDT05GSUdfRFJJVkVSX05ESVM9eQorI0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS93MzJhcGkvZGRrCisjTElCUyArPSAtTC91c3IvbG9jYWwvbGliCisjIEZvciBuYXRpdmUgYnVpbGQgdXNpbmcgbWluZ3cKKyNDT05GSUdfTkFUSVZFX1dJTkRPV1M9eQorIyBBZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGZvciBjcm9zcy1jb21waWxhdGlvbiBvbiBMaW51eCBob3N0IGZvciBtaW5ndyB0YXJnZXQKKyNDRkxBR1MgKz0gLUkvb3B0L21pbmd3L21pbmd3MzIvaW5jbHVkZS9kZGsKKyNMSUJTICs9IC1ML29wdC9taW5ndy9taW5ndzMyL2xpYgorI0NDPW1pbmd3MzItZ2NjCisjIEJ5IGRlZmF1bHQsIGRyaXZlcl9uZGlzIHVzZXMgV2luUGNhcCBmb3IgbG93LWxldmVsIG9wZXJhdGlvbnMuIFRoaXMgY2FuIGJlCisjIHJlcGxhY2VkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb24gd2hpY2ggcmVwbGFjZXMgV2luUGNhcCBjYWxscyB3aXRoIE5ESVNVSU8uCisjIEhvd2V2ZXIsIHRoaXMgcmVxdWlyZXMgdGhhdCBXWkMgaXMgZGlzYWJsZWQgKG5ldCBzdG9wIHd6Y3N2YykgYmVmb3JlIHN0YXJ0aW5nCisjIHdwYV9zdXBwbGljYW50LgorIyBDT05GSUdfVVNFX05ESVNVSU89eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIGRldmVsb3BtZW50IHRlc3RpbmcKKyNDT05GSUdfRFJJVkVSX1RFU1Q9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIHdpcmVkIEV0aGVybmV0IGRyaXZlcnMKK0NPTkZJR19EUklWRVJfV0lSRUQ9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIHRoZSBCcm9hZGNvbSBSb2JvU3dpdGNoIGZhbWlseQorI0NPTkZJR19EUklWRVJfUk9CT1NXSVRDSD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3Igbm8gZHJpdmVyIChlLmcuLCBXUFMgRVIgb25seSkKKyNDT05GSUdfRFJJVkVSX05PTkU9eQorCisjIEVuYWJsZSBJRUVFIDgwMi4xWCBTdXBwbGljYW50IChhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGlmIGFueSBFQVAgbWV0aG9kIGlzCisjIGluY2x1ZGVkKQorQ09ORklHX0lFRUU4MDIxWF9FQVBPTD15CisKKyMgRUFQLU1ENQorQ09ORklHX0VBUF9NRDU9eQorCisjIEVBUC1NU0NIQVB2MgorQ09ORklHX0VBUF9NU0NIQVBWMj15CisKKyMgRUFQLVRMUworQ09ORklHX0VBUF9UTFM9eQorCisjIEVBTC1QRUFQCitDT05GSUdfRUFQX1BFQVA9eQorCisjIEVBUC1UVExTCitDT05GSUdfRUFQX1RUTFM9eQorCisjIEVBUC1GQVNUCisjIE5vdGU6IElmIE9wZW5TU0wgaXMgdXNlZCBhcyB0aGUgVExTIGxpYnJhcnksIE9wZW5TU0wgMS4wIG9yIG5ld2VyIGlzIG5lZWRlZAorIyBmb3IgRUFQLUZBU1Qgc3VwcG9ydC4gT2xkZXIgT3BlblNTTCByZWxlYXNlcyB3b3VsZCBuZWVkIHRvIGJlIHBhdGNoZWQsIGUuZy4sCisjIHdpdGggb3BlbnNzbC0wLjkuOHgtdGxzLWV4dGVuc2lvbnMucGF0Y2gsIHRvIGFkZCB0aGUgbmVlZGVkIGZ1bmN0aW9ucy4KKyNDT05GSUdfRUFQX0ZBU1Q9eQorCisjIEVBUC1HVEMKK0NPTkZJR19FQVBfR1RDPXkKKworIyBFQVAtT1RQCitDT05GSUdfRUFQX09UUD15CisKKyMgRUFQLVNJTSAoZW5hYmxlIENPTkZJR19QQ1NDLCBpZiBFQVAtU0lNIGlzIHVzZWQpCisjQ09ORklHX0VBUF9TSU09eQorCisjIEVBUC1QU0sgKGV4cGVyaW1lbnRhbDsgdGhpcyBpcyBfbm90XyBuZWVkZWQgZm9yIFdQQS1QU0spCisjQ09ORklHX0VBUF9QU0s9eQorCisjIEVBUC1wd2QgKHNlY3VyZSBhdXRoZW50aWNhdGlvbiB1c2luZyBvbmx5IGEgcGFzc3dvcmQpCisjQ09ORklHX0VBUF9QV0Q9eQorCisjIEVBUC1QQVgKKyNDT05GSUdfRUFQX1BBWD15CisKKyMgTEVBUAorQ09ORklHX0VBUF9MRUFQPXkKKworIyBFQVAtQUtBIChlbmFibGUgQ09ORklHX1BDU0MsIGlmIEVBUC1BS0EgaXMgdXNlZCkKKyNDT05GSUdfRUFQX0FLQT15CisKKyMgRUFQLUFLQScgKGVuYWJsZSBDT05GSUdfUENTQywgaWYgRUFQLUFLQScgaXMgdXNlZCkuCisjIFRoaXMgcmVxdWlyZXMgQ09ORklHX0VBUF9BS0EgdG8gYmUgZW5hYmxlZCwgdG9vLgorI0NPTkZJR19FQVBfQUtBX1BSSU1FPXkKKworIyBFbmFibGUgVVNJTSBzaW11bGF0b3IgKE1pbGVuYWdlKSBmb3IgRUFQLUFLQQorI0NPTkZJR19VU0lNX1NJTVVMQVRPUj15CisKKyMgRUFQLVNBS0UKKyNDT05GSUdfRUFQX1NBS0U9eQorCisjIEVBUC1HUFNLCisjQ09ORklHX0VBUF9HUFNLPXkKKyMgSW5jbHVkZSBzdXBwb3J0IGZvciBvcHRpb25hbCBTSEEyNTYgY2lwaGVyIHN1aXRlIGluIEVBUC1HUFNLCisjQ09ORklHX0VBUF9HUFNLX1NIQTI1Nj15CisKKyMgRUFQLVROQyBhbmQgcmVsYXRlZCBUcnVzdGVkIE5ldHdvcmsgQ29ubmVjdCBzdXBwb3J0IChleHBlcmltZW50YWwpCisjQ09ORklHX0VBUF9UTkM9eQorCisjIFdpLUZpIFByb3RlY3RlZCBTZXR1cCAoV1BTKQorQ09ORklHX1dQUz15CisjIEVuYWJsZSBXU0MgMi4wIHN1cHBvcnQKKyNDT05GSUdfV1BTMj15CisjIEVuYWJsZSBXUFMgZXh0ZXJuYWwgcmVnaXN0cmFyIGZ1bmN0aW9uYWxpdHkKKyNDT05GSUdfV1BTX0VSPXkKKyMgRGlzYWJsZSBjcmVkZW50aWFscyBmb3IgYW4gb3BlbiBuZXR3b3JrIGJ5IGRlZmF1bHQgd2hlbiBhY3RpbmcgYXMgYSBXUFMKKyMgcmVnaXN0cmFyLgorI0NPTkZJR19XUFNfUkVHX0RJU0FCTEVfT1BFTj15CisjIEVuYWJsZSBXUFMgc3VwcG9ydCB3aXRoIE5GQyBjb25maWcgbWV0aG9kCisjQ09ORklHX1dQU19ORkM9eQorCisjIEVBUC1JS0V2MgorI0NPTkZJR19FQVBfSUtFVjI9eQorCisjIEVBUC1FS0UKKyNDT05GSUdfRUFQX0VLRT15CisKKyMgUEtDUyMxMiAoUEZYKSBzdXBwb3J0ICh1c2VkIHRvIHJlYWQgcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlIGZpbGUgZnJvbQorIyBhIGZpbGUgdGhhdCB1c3VhbGx5IGhhcyBleHRlbnNpb24gLnAxMiBvciAucGZ4KQorQ09ORklHX1BLQ1MxMj15CisKKyMgU21hcnRjYXJkIHN1cHBvcnQgKGkuZS4sIHByaXZhdGUga2V5IG9uIGEgc21hcnRjYXJkKSwgZS5nLiwgd2l0aCBvcGVuc3NsCisjIGVuZ2luZS4KK0NPTkZJR19TTUFSVENBUkQ9eQorCisjIFBDL1NDIGludGVyZmFjZSBmb3Igc21hcnRjYXJkcyAoVVNJTSwgR1NNIFNJTSkKKyMgRW5hYmxlIHRoaXMgaWYgRUFQLVNJTSBvciBFQVAtQUtBIGlzIGluY2x1ZGVkCisjQ09ORklHX1BDU0M9eQorCisjIFN1cHBvcnQgSFQgb3ZlcnJpZGVzIChkaXNhYmxlIEhUL0hUNDAsIG1hc2sgTUNTIHJhdGVzLCBldGMuKQorI0NPTkZJR19IVF9PVkVSUklERVM9eQorCisjIFN1cHBvcnQgVkhUIG92ZXJyaWRlcyAoZGlzYWJsZSBWSFQsIG1hc2sgTUNTIHJhdGVzLCBldGMuKQorI0NPTkZJR19WSFRfT1ZFUlJJREVTPXkKKworIyBEZXZlbG9wbWVudCB0ZXN0aW5nCisjQ09ORklHX0VBUE9MX1RFU1Q9eQorCisjIFNlbGVjdCBjb250cm9sIGludGVyZmFjZSBiYWNrZW5kIGZvciBleHRlcm5hbCBwcm9ncmFtcywgZS5nLCB3cGFfY2xpOgorIyB1bml4ID0gVU5JWCBkb21haW4gc29ja2V0cyAoZGVmYXVsdCBmb3IgTGludXgvKkJTRCkKKyMgdWRwID0gVURQIHNvY2tldHMgdXNpbmcgbG9jYWxob3N0ICgxMjcuMC4wLjEpCisjIG5hbWVkX3BpcGUgPSBXaW5kb3dzIE5hbWVkIFBpcGUgKGRlZmF1bHQgZm9yIFdpbmRvd3MpCisjIHVkcC1yZW1vdGUgPSBVRFAgc29ja2V0cyB3aXRoIHJlbW90ZSBhY2Nlc3MgKG9ubHkgZm9yIHRlc3RzIHN5c3RlbXMvcHVycG9zZSkKKyMgeSA9IHVzZSBkZWZhdWx0IChiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKKyMgSWYgdGhpcyBvcHRpb24gaXMgY29tbWVudGVkIG91dCwgY29udHJvbCBpbnRlcmZhY2UgaXMgbm90IGluY2x1ZGVkIGluIHRoZQorIyBidWlsZC4KK0NPTkZJR19DVFJMX0lGQUNFPXkKKworIyBJbmNsdWRlIHN1cHBvcnQgZm9yIEdOVSBSZWFkbGluZSBhbmQgSGlzdG9yeSBMaWJyYXJpZXMgaW4gd3BhX2NsaS4KKyMgV2hlbiBidWlsZGluZyBhIHdwYV9jbGkgYmluYXJ5IGZvciBkaXN0cmlidXRpb24sIHBsZWFzZSBub3RlIHRoYXQgdGhlc2UKKyMgbGlicmFyaWVzIGFyZSBsaWNlbnNlZCB1bmRlciBHUEwgYW5kIGFzIHN1Y2gsIEJTRCBsaWNlbnNlIG1heSBub3QgYXBwbHkgZm9yCisjIHRoZSByZXN1bHRpbmcgYmluYXJ5LgorI0NPTkZJR19SRUFETElORT15CisKKyMgSW5jbHVkZSBpbnRlcm5hbCBsaW5lIGVkaXQgbW9kZSBpbiB3cGFfY2xpLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgcmVwbGFjZW1lbnQKKyMgZm9yIEdOVSBSZWFkbGluZSB0byBwcm92aWRlIGxpbWl0ZWQgY29tbWFuZCBsaW5lIGVkaXRpbmcgYW5kIGhpc3Rvcnkgc3VwcG9ydC4KKyNDT05GSUdfV1BBX0NMSV9FRElUPXkKKworIyBSZW1vdmUgZGVidWdnaW5nIGNvZGUgdGhhdCBpcyBwcmludGluZyBvdXQgZGVidWcgbWVzc2FnZSB0byBzdGRvdXQuCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSB3cGFfc3VwcGxpY2FudCBjb25zaWRlcmFibHkKKyMgaWYgZGVidWdnaW5nIGNvZGUgaXMgbm90IG5lZWRlZC4gVGhlIHNpemUgcmVkdWN0aW9uIGNhbiBiZSBhcm91bmQgMzUlCisjIChlLmcuLCA5MCBrQikuCisjQ09ORklHX05PX1NURE9VVF9ERUJVRz15CisKKyMgUmVtb3ZlIFdQQSBzdXBwb3J0LCBlLmcuLCBmb3Igd2lyZWQtb25seSBJRUVFIDgwMi4xWCBzdXBwbGljYW50LCB0byBzYXZlCisjIDM1LTUwIGtCIGluIGNvZGUgc2l6ZS4KKyNDT05GSUdfTk9fV1BBPXkKKworIyBSZW1vdmUgSUVFRSA4MDIuMTFpL1dQQS1QZXJzb25hbCBBU0NJSSBwYXNzcGhyYXNlIHN1cHBvcnQKKyMgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieSByZW1vdmluZyBzdXBwb3J0IGZvcgorIyBjb252ZXJ0aW5nIEFTQ0lJIHBhc3NwaHJhc2VzIGludG8gUFNLLiBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVtb3ZlZCwgdGhlCisjIFBTSyBjYW4gb25seSBiZSBjb25maWd1cmVkIGFzIHRoZSA2NC1vY3RldCBoZXhzdHJpbmcgKGUuZy4sIGZyb20KKyMgd3BhX3Bhc3NwaHJhc2UpLiBUaGlzIHNhdmVzIGFib3V0IDAuNSBrQiBpbiBjb2RlIHNpemUuCisjQ09ORklHX05PX1dQQV9QQVNTUEhSQVNFPXkKKworIyBEaXNhYmxlIHNjYW4gcmVzdWx0IHByb2Nlc3NpbmcgKGFwX21vZGU9MSkgdG8gc2F2ZSBjb2RlIHNpemUgYnkgYWJvdXQgMSBrQi4KKyMgVGhpcyBjYW4gYmUgdXNlZCBpZiBhcF9zY2FuPTEgbW9kZSBpcyBuZXZlciBlbmFibGVkLgorI0NPTkZJR19OT19TQ0FOX1BST0NFU1NJTkc9eQorCisjIFNlbGVjdCBjb25maWd1cmF0aW9uIGJhY2tlbmQ6CisjIGZpbGUgPSB0ZXh0IGZpbGUgKGUuZy4sIHdwYV9zdXBwbGljYW50LmNvbmY7IG5vdGU6IHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyMJcGF0aCBpcyBnaXZlbiBvbiBjb21tYW5kIGxpbmUsIG5vdCBoZXJlOyB0aGlzIG9wdGlvbiBpcyBqdXN0IHVzZWQgdG8KKyMJc2VsZWN0IHRoZSBiYWNrZW5kIHRoYXQgYWxsb3dzIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gYmUgdXNlZCkKKyMgd2lucmVnID0gV2luZG93cyByZWdpc3RyeSAoc2VlIHdpbl9leGFtcGxlLnJlZyBmb3IgYW4gZXhhbXBsZSkKK0NPTkZJR19CQUNLRU5EPWZpbGUKKworIyBSZW1vdmUgY29uZmlndXJhdGlvbiB3cml0ZSBmdW5jdGlvbmFsaXR5IChpLmUuLCB0byBhbGxvdyB0aGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHRvIGJlIHVwZGF0ZWQgYmFzZWQgb24gcnVudGltZSBjb25maWd1cmF0aW9uIGNoYW5nZXMpLiBUaGUgcnVudGltZQorIyBjb25maWd1cmF0aW9uIGNhbiBzdGlsbCBiZSBjaGFuZ2VkLCB0aGUgY2hhbmdlcyBhcmUganVzdCBub3QgZ29pbmcgdG8gYmUKKyMgcGVyc2lzdGVudCBvdmVyIHJlc3RhcnRzLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWR1Y2UgY29kZSBzaXplIGJ5CisjIGFib3V0IDMuNSBrQi4KKyNDT05GSUdfTk9fQ09ORklHX1dSSVRFPXkKKworIyBSZW1vdmUgc3VwcG9ydCBmb3IgY29uZmlndXJhdGlvbiBibG9icyB0byByZWR1Y2UgY29kZSBzaXplIGJ5IGFib3V0IDEuNSBrQi4KKyNDT05GSUdfTk9fQ09ORklHX0JMT0JTPXkKKworIyBTZWxlY3QgcHJvZ3JhbSBlbnRyeSBwb2ludCBpbXBsZW1lbnRhdGlvbjoKKyMgbWFpbiA9IFVOSVgvUE9TSVggbGlrZSBtYWluKCkgZnVuY3Rpb24gKGRlZmF1bHQpCisjIG1haW5fd2luc3ZjID0gV2luZG93cyBzZXJ2aWNlIChyZWFkIHBhcmFtZXRlcnMgZnJvbSByZWdpc3RyeSkKKyMgbWFpbl9ub25lID0gVmVyeSBiYXNpYyBleGFtcGxlIChkZXZlbG9wbWVudCB1c2Ugb25seSkKKyNDT05GSUdfTUFJTj1tYWluCisKKyMgU2VsZWN0IHdyYXBwZXIgZm9yIG9wZXJhdGlucyBzeXN0ZW0gYW5kIEMgbGlicmFyeSBzcGVjaWZpYyBmdW5jdGlvbnMKKyMgdW5peCA9IFVOSVgvUE9TSVggbGlrZSBzeXN0ZW1zIChkZWZhdWx0KQorIyB3aW4zMiA9IFdpbmRvd3Mgc3lzdGVtcworIyBub25lID0gRW1wdHkgdGVtcGxhdGUKKyNDT05GSUdfT1M9dW5peAorCisjIFNlbGVjdCBldmVudCBsb29wIGltcGxlbWVudGF0aW9uCisjIGVsb29wID0gc2VsZWN0KCkgbG9vcCAoZGVmYXVsdCkKKyMgZWxvb3Bfd2luID0gV2luZG93cyBldmVudHMgYW5kIFdhaXRGb3JNdWx0aXBsZU9iamVjdCgpIGxvb3AKKyNDT05GSUdfRUxPT1A9ZWxvb3AKKworIyBTaG91bGQgd2UgdXNlIHBvbGwgaW5zdGVhZCBvZiBzZWxlY3Q/IFNlbGVjdCBpcyB1c2VkIGJ5IGRlZmF1bHQuCisjQ09ORklHX0VMT09QX1BPTEw9eQorCisjIFNlbGVjdCBsYXllciAyIHBhY2tldCBpbXBsZW1lbnRhdGlvbgorIyBsaW51eCA9IExpbnV4IHBhY2tldCBzb2NrZXQgKGRlZmF1bHQpCisjIHBjYXAgPSBsaWJwY2FwL2xpYmRuZXQvV2luUGNhcAorIyBmcmVlYnNkID0gRnJlZUJTRCBsaWJwY2FwCisjIHdpbnBjYXAgPSBXaW5QY2FwIHdpdGggcmVjZWl2ZSB0aHJlYWQKKyMgbmRpcyA9IFdpbmRvd3MgTkRJU1VJTyAobm90ZTogcmVxdWlyZXMgQ09ORklHX1VTRV9ORElTVUlPPXkpCisjIG5vbmUgPSBFbXB0eSB0ZW1wbGF0ZQorI0NPTkZJR19MMl9QQUNLRVQ9bGludXgKKworIyBQZWVyS2V5IGhhbmRzaGFrZSBmb3IgU3RhdGlvbiB0byBTdGF0aW9uIExpbmsgKElFRUUgODAyLjExZSBETFMpCitDT05GSUdfUEVFUktFWT15CisKKyMgSUVFRSA4MDIuMTF3IChtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24pLCBhbHNvIGtub3duIGFzIFBNRgorIyBEcml2ZXIgc3VwcG9ydCBpcyBhbHNvIG5lZWRlZCBmb3IgSUVFRSA4MDIuMTF3LgorI0NPTkZJR19JRUVFODAyMTFXPXkKKworIyBTZWxlY3QgVExTIGltcGxlbWVudGF0aW9uCisjIG9wZW5zc2wgPSBPcGVuU1NMIChkZWZhdWx0KQorIyBnbnV0bHMgPSBHbnVUTFMKKyMgaW50ZXJuYWwgPSBJbnRlcm5hbCBUTFN2MSBpbXBsZW1lbnRhdGlvbiAoZXhwZXJpbWVudGFsKQorIyBub25lID0gRW1wdHkgdGVtcGxhdGUKKyNDT05GSUdfVExTPW9wZW5zc2wKKworIyBUTFMtYmFzZWQgRUFQIG1ldGhvZHMgcmVxdWlyZSBhdCBsZWFzdCBUTFMgdjEuMC4gTmV3ZXIgdmVyc2lvbiBvZiBUTFMgKHYxLjEpCisjIGNhbiBiZSBlbmFibGVkIHRvIGdldCBhIHN0cm9uZ2VyIGNvbnN0cnVjdGlvbiBvZiBtZXNzYWdlcyB3aGVuIGJsb2NrIGNpcGhlcnMKKyMgYXJlIHVzZWQuIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHNvbWUgZXhpc3RpbmcgVExTIHYxLjAgLWJhc2VkCisjIGltcGxlbWVudGF0aW9uIG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoIFRMUyB2MS4xIG1lc3NhZ2UgKENsaWVudEhlbGxvIGlzCisjIHNlbnQgcHJpb3IgdG8gbmVnb3RpYXRpbmcgd2hpY2ggdmVyc2lvbiB3aWxsIGJlIHVzZWQpCisjQ09ORklHX1RMU1YxMT15CisKKyMgVExTLWJhc2VkIEVBUCBtZXRob2RzIHJlcXVpcmUgYXQgbGVhc3QgVExTIHYxLjAuIE5ld2VyIHZlcnNpb24gb2YgVExTICh2MS4yKQorIyBjYW4gYmUgZW5hYmxlZCB0byBlbmFibGUgdXNlIG9mIHN0cm9uZ2VyIGNyeXB0byBhbGdvcml0aG1zLiBJdCBzaG91bGQgYmUKKyMgbm90ZWQgdGhhdCBzb21lIGV4aXN0aW5nIFRMUyB2MS4wIC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IGJlIGNvbXBhdGlibGUKKyMgd2l0aCBUTFMgdjEuMiBtZXNzYWdlIChDbGllbnRIZWxsbyBpcyBzZW50IHByaW9yIHRvIG5lZ290aWF0aW5nIHdoaWNoIHZlcnNpb24KKyMgd2lsbCBiZSB1c2VkKQorI0NPTkZJR19UTFNWMTI9eQorCisjIElmIENPTkZJR19UTFM9aW50ZXJuYWwgaXMgdXNlZCwgYWRkaXRpb25hbCBsaWJyYXJ5IGFuZCBpbmNsdWRlIHBhdGhzIGFyZQorIyBuZWVkZWQgZm9yIExpYlRvbU1hdGguIEFsdGVybmF0aXZlbHksIGFuIGludGVncmF0ZWQsIG1pbmltYWwgdmVyc2lvbiBvZgorIyBMaWJUb21NYXRoIGNhbiBiZSB1c2VkLiBTZWUgYmVnaW5uaW5nIG9mIGxpYnRvbW1hdGguYyBmb3IgZGV0YWlscyBvbiBiZW5lZml0cworIyBhbmQgZHJhd2JhY2tzIG9mIHRoaXMgb3B0aW9uLgorI0NPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRIPXkKKyNpZm5kZWYgQ09ORklHX0lOVEVSTkFMX0xJQlRPTU1BVEgKKyNMVE1fUEFUSD0vdXNyL3NyYy9saWJ0b21tYXRoLTAuMzkKKyNDRkxBR1MgKz0gLUkkKExUTV9QQVRIKQorI0xJQlMgKz0gLUwkKExUTV9QQVRIKQorI0xJQlNfcCArPSAtTCQoTFRNX1BBVEgpCisjZW5kaWYKKyMgQXQgdGhlIGNvc3Qgb2YgYWJvdXQgNCBrQiBvZiBhZGRpdGlvbmFsIGJpbmFyeSBzaXplLCB0aGUgaW50ZXJuYWwgTGliVG9tTWF0aAorIyBjYW4gYmUgY29uZmlndXJlZCB0byBpbmNsdWRlIGZhc3RlciByb3V0aW5lcyBmb3IgZXhwdG1vZCwgc3FyLCBhbmQgZGl2IHRvCisjIHNwZWVkIHVwIERIIGFuZCBSU0EgY2FsY3VsYXRpb24gY29uc2lkZXJhYmx5CisjQ09ORklHX0lOVEVSTkFMX0xJQlRPTU1BVEhfRkFTVD15CisKKyMgSW5jbHVkZSBORElTIGV2ZW50IHByb2Nlc3NpbmcgdGhyb3VnaCBXTUkgaW50byB3cGFfc3VwcGxpY2FudC93cGFzdmMuCisjIFRoaXMgaXMgb25seSBmb3IgV2luZG93cyBidWlsZHMgYW5kIHJlcXVpcmVzIFdNSS1yZWxhdGVkIGhlYWRlciBmaWxlcyBhbmQKKyMgV2JlbVV1aWQuTGliIGZyb20gUGxhdGZvcm0gU0RLIGV2ZW4gd2hlbiBidWlsZGluZyB3aXRoIE1pbkdXLgorI0NPTkZJR19ORElTX0VWRU5UU19JTlRFR1JBVEVEPXkKKyNQTEFURk9STVNES0xJQj0iL29wdC9Qcm9ncmFtIEZpbGVzL01pY3Jvc29mdCBQbGF0Zm9ybSBTREsvTGliIgorCisjIEFkZCBzdXBwb3J0IGZvciBvbGQgREJ1cyBjb250cm9sIGludGVyZmFjZQorIyAoZmkuZXBpdGVzdC5ob3N0YXAuV1BBU3VwcGxpY2FudCkKKyNDT05GSUdfQ1RSTF9JRkFDRV9EQlVTPXkKKworIyBBZGQgc3VwcG9ydCBmb3IgbmV3IERCdXMgY29udHJvbCBpbnRlcmZhY2UKKyMgKGZpLncxLmhvc3RhcC53cGFfc3VwcGxpY2FudDEpCitDT05GSUdfQ1RSTF9JRkFDRV9EQlVTX05FVz15CisKKyMgQWRkIGludHJvc3BlY3Rpb24gc3VwcG9ydCBmb3IgbmV3IERCdXMgY29udHJvbCBpbnRlcmZhY2UKKyNDT05GSUdfQ1RSTF9JRkFDRV9EQlVTX0lOVFJPPXkKKworIyBBZGQgc3VwcG9ydCBmb3IgbG9hZGluZyBFQVAgbWV0aG9kcyBkeW5hbWljYWxseSBhcyBzaGFyZWQgbGlicmFyaWVzLgorIyBXaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIGVhY2ggRUFQIG1ldGhvZCBjYW4gYmUgZWl0aGVyIGluY2x1ZGVkCisjIHN0YXRpY2FsbHkgKENPTkZJR19FQVBfPG1ldGhvZD49eSkgb3IgZHluYW1pY2FsbHkgKENPTkZJR19FQVBfPG1ldGhvZD49ZHluKS4KKyMgRHluYW1pYyBFQVAgbWV0aG9kcyBhcmUgYnVpbGQgYXMgc2hhcmVkIG9iamVjdHMgKGVhcF8qLnNvKSBhbmQgdGhleSBuZWVkIHRvCisjIGJlIGxvYWRlZCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSB3cGFfc3VwcGxpY2FudCBjb25maWd1cmF0aW9uIGZpbGUKKyMgKHNlZSBsb2FkX2R5bmFtaWNfZWFwIHBhcmFtZXRlciBpbiB0aGUgZXhhbXBsZSBmaWxlKSBiZWZvcmUgYmVpbmcgdXNlZCBpbgorIyB0aGUgbmV0d29yayBibG9ja3MuCisjCisjIE5vdGUgdGhhdCBzb21lIHNoYXJlZCBwYXJ0cyBvZiBFQVAgbWV0aG9kcyBhcmUgaW5jbHVkZWQgaW4gdGhlIG1haW4gcHJvZ3JhbQorIyBhbmQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgZHluYW1pYyBFQVAgbWV0aG9kcyB1c2luZyB0aGVzZSBwYXJ0cywgdGhlCisjIG1haW4gcHJvZ3JhbSBtdXN0IGhhdmUgYmVlbiBidWlsZCB3aXRoIHRoZSBFQVAgbWV0aG9kIGVuYWJsZWQgKD15IG9yID1keW4pLgorIyBUaGlzIG1lYW5zIHRoYXQgRUFQLVRMUy9QRUFQL1RUTFMvRkFTVCBjYW5ub3QgYmUgYWRkZWQgYXMgZHluYW1pYyBsaWJyYXJpZXMKKyMgdW5sZXNzIGF0IGxlYXN0IG9uZSBvZiB0aGVtIHdhcyBpbmNsdWRlZCBpbiB0aGUgbWFpbiBidWlsZCB0byBmb3JjZSBpbmNsdXNpb24KKyMgb2YgdGhlIHNoYXJlZCBjb2RlLiBTaW1pbGFybHksIGF0IGxlYXN0IG9uZSBvZiBFQVAtU0lNL0FLQSBtdXN0IGJlIGluY2x1ZGVkCisjIGluIHRoZSBtYWluIGJ1aWxkIHRvIGJlIGFibGUgdG8gbG9hZCB0aGVzZSBtZXRob2RzIGR5bmFtaWNhbGx5LgorIworIyBQbGVhc2UgYWxzbyBub3RlIHRoYXQgdXNpbmcgZHluYW1pYyBsaWJyYXJpZXMgd2lsbCBpbmNyZWFzZSB0aGUgdG90YWwgYmluYXJ5CisjIHNpemUuIFRodXMsIGl0IG1heSBub3QgYmUgdGhlIGJlc3Qgb3B0aW9uIGZvciB0YXJnZXRzIHRoYXQgaGF2ZSBsaW1pdGVkCisjIGFtb3VudCBvZiBtZW1vcnkvZmxhc2guCisjQ09ORklHX0RZTkFNSUNfRUFQX01FVEhPRFM9eQorCisjIElFRUUgU3RkIDgwMi4xMXItMjAwOCAoRmFzdCBCU1MgVHJhbnNpdGlvbikKKyNDT05GSUdfSUVFRTgwMjExUj15CisKKyMgQWRkIHN1cHBvcnQgZm9yIHdyaXRpbmcgZGVidWcgbG9nIHRvIGEgZmlsZSAoL3RtcC93cGFfc3VwcGxpY2FudC1sb2ctIy50eHQpCisjQ09ORklHX0RFQlVHX0ZJTEU9eQorCisjIFNlbmQgZGVidWcgbWVzc2FnZXMgdG8gc3lzbG9nIGluc3RlYWQgb2Ygc3Rkb3V0CisjQ09ORklHX0RFQlVHX1NZU0xPRz15CisjIFNldCBzeXNsb2cgZmFjaWxpdHkgZm9yIGRlYnVnIG1lc3NhZ2VzCisjQ09ORklHX0RFQlVHX1NZU0xPR19GQUNJTElUWT1MT0dfREFFTU9OCisKKyMgQWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgYWxsIGRlYnVnIG1lc3NhZ2VzIChyZWdhcmRsZXNzIG9mIGRlYnVnIHZlcmJvc2l0eSkKKyMgdG8gdGhlIExpbnV4IGtlcm5lbCB0cmFjaW5nIGZhY2lsaXR5LiBUaGlzIGhlbHBzIGRlYnVnIHRoZSBlbnRpcmUgc3RhY2sgYnkKKyMgbWFraW5nIGl0IGVhc3kgdG8gcmVjb3JkIGV2ZXJ5dGhpbmcgaGFwcGVuaW5nIGZyb20gdGhlIGRyaXZlciB1cCBpbnRvIHRoZQorIyBzYW1lIGZpbGUsIGUuZy4sIHVzaW5nIHRyYWNlLWNtZC4KKyNDT05GSUdfREVCVUdfTElOVVhfVFJBQ0lORz15CisKKyMgRW5hYmxlIHByaXZpbGVnZSBzZXBhcmF0aW9uIChzZWUgUkVBRE1FICdQcml2aWxlZ2Ugc2VwYXJhdGlvbicgZm9yIGRldGFpbHMpCisjQ09ORklHX1BSSVZTRVA9eQorCisjIEVuYWJsZSBtaXRpZ2F0aW9uIGFnYWluc3QgY2VydGFpbiBhdHRhY2tzIGFnYWluc3QgVEtJUCBieSBkZWxheWluZyBNaWNoYWVsCisjIE1JQyBlcnJvciByZXBvcnRzIGJ5IGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gMCBhbmQgNjAgc2Vjb25kcworI0NPTkZJR19ERUxBWUVEX01JQ19FUlJPUl9SRVBPUlQ9eQorCisjIEVuYWJsZSB0cmFjaW5nIGNvZGUgZm9yIGRldmVsb3BlciBkZWJ1Z2dpbmcKKyMgVGhpcyB0cmFja3MgdXNlIG9mIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgcmVnaXN0cmF0aW9ucyBhbmQgcmVwb3J0cworIyBpbmNvcnJlY3QgdXNlIHdpdGggYSBiYWNrdHJhY2Ugb2YgY2FsbCAob3IgYWxsb2NhdGlvbikgbG9jYXRpb24uCisjQ09ORklHX1dQQV9UUkFDRT15CisjIEZvciBCU0QsIHVuY29tbWVudCB0aGVzZS4KKyNMSUJTICs9IC1sZXhlY2luZm8KKyNMSUJTX3AgKz0gLWxleGVjaW5mbworI0xJQlNfYyArPSAtbGV4ZWNpbmZvCisKKyMgVXNlIGxpYmJmZCB0byBnZXQgbW9yZSBkZXRhaWxzIGZvciBkZXZlbG9wZXIgZGVidWdnaW5nCisjIFRoaXMgZW5hYmxlcyB1c2Ugb2YgbGliYmZkIHRvIGdldCBtb3JlIGRldGFpbGVkIHN5bWJvbHMgZm9yIHRoZSBiYWNrdHJhY2VzCisjIGdlbmVyYXRlZCBieSBDT05GSUdfV1BBX1RSQUNFPXkuCisjQ09ORklHX1dQQV9UUkFDRV9CRkQ9eQorIyBGb3IgQlNELCB1bmNvbW1lbnQgdGhlc2UuCisjTElCUyArPSAtbGJmZCAtbGliZXJ0eSAtbHoKKyNMSUJTX3AgKz0gLWxiZmQgLWxpYmVydHkgLWx6CisjTElCU19jICs9IC1sYmZkIC1saWJlcnR5IC1segorCitDT05GSUdfVExTID0gJXNzbCUKK0NPTkZJR19DVFJMX0lGQUNFX0RCVVM9eQorQ09ORklHX0NUUkxfSUZBQ0VfREJVU19ORVc9eQorCisjIHdwYV9zdXBwbGljYW50IGRlcGVuZHMgb24gc3Ryb25nIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBiZWluZyBhdmFpbGFibGUKKyMgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gb3NfZ2V0X3JhbmRvbSgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZmV0Y2ggcmFuZG9tCisjIGRhdGEgd2hlbiBuZWVkZWQsIGUuZy4sIGZvciBrZXkgZ2VuZXJhdGlvbi4gT24gTGludXggYW5kIEJTRCBzeXN0ZW1zLCB0aGlzCisjIHdvcmtzIGJ5IHJlYWRpbmcgL2Rldi91cmFuZG9tLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGUgT1MgZW50cm9weSBwb29sCisjIG5lZWRzIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB3cGFfc3VwcGxpY2FudCBpcyBzdGFydGVkLiBUaGlzIGlzCisjIGltcG9ydGFudCBlc3BlY2lhbGx5IG9uIGVtYmVkZGVkIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBhIGhhcmR3YXJlIHJhbmRvbQorIyBudW1iZXIgZ2VuZXJhdG9yIGFuZCBtYXkgYnkgZGVmYXVsdCBzdGFydCB1cCB3aXRoIG1pbmltYWwgZW50cm9weSBhdmFpbGFibGUKKyMgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4KKyMKKyMgQXMgYSBzYWZldHkgbmV0LCB3cGFfc3VwcGxpY2FudCBpcyBieSBkZWZhdWx0IHRyeWluZyB0byBpbnRlcm5hbGx5IGNvbGxlY3QKKyMgYWRkaXRpb25hbCBlbnRyb3B5IGZvciBnZW5lcmF0aW5nIHJhbmRvbSBkYXRhIHRvIG1peCBpbiB3aXRoIHRoZSBkYXRhIGZldGNoZWQKKyMgZnJvbSB0aGUgT1MuIFRoaXMgYnkgaXRzZWxmIGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIHZlcnkgc3Ryb25nLCBidXQgaXQgbWF5CisjIGhlbHAgaW4gY2FzZXMgd2hlcmUgdGhlIHN5c3RlbSBwb29sIGlzIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseS4gSG93ZXZlciwgaXQKKyMgaXMgdmVyeSBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHRoZSBzeXN0ZW0gcG9vbCBpcyBpbml0aWFsaXplZCB3aXRoIGVub3VnaAorIyBlbnRyb3B5IGVpdGhlciBieSB1c2luZyBoYXJkd2FyZSBhc3Npc3RlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvciBieQorIyBzdG9yaW5nIHN0YXRlIG92ZXIgZGV2aWNlIHJlYm9vdHMuCisjCisjIHdwYV9zdXBwbGljYW50IGNhbiBiZSBjb25maWd1cmVkIHRvIG1haW50YWluIGl0cyBvd24gZW50cm9weSBzdG9yZSBvdmVyCisjIHJlc3RhcnRzIHRvIGVuaGFuY2UgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLiBUaGlzIGlzIG5vdCBwZXJmZWN0LCBidXQgaXQgaXMKKyMgbXVjaCBtb3JlIHNlY3VyZSB0aGFuIHVzaW5nIHRoZSBzYW1lIHNlcXVlbmNlIG9mIHJhbmRvbSBudW1iZXJzIGFmdGVyIGV2ZXJ5CisjIHJlYm9vdC4gVGhpcyBjYW4gYmUgZW5hYmxlZCB3aXRoIC1lPGVudHJvcHkgZmlsZT4gY29tbWFuZCBsaW5lIG9wdGlvbi4gVGhlCisjIHNwZWNpZmllZCBmaWxlIG5lZWRzIHRvIGJlIHJlYWRhYmxlIGFuZCB3cml0YWJsZSBieSB3cGFfc3VwcGxpY2FudC4KKyMKKyMgSWYgdGhlIG9zX2dldF9yYW5kb20oKSBpcyBrbm93biB0byBwcm92aWRlIHN0cm9uZyByYW5kb20gZGF0YSAoZS5nLiwgb24KKyMgTGludXgvQlNELCB0aGUgYm9hcmQgaW4gcXVlc3Rpb24gaXMga25vd24gdG8gaGF2ZSByZWxpYWJsZSBzb3VyY2Ugb2YgcmFuZG9tCisjIGRhdGEgZnJvbSAvZGV2L3VyYW5kb20pLCB0aGUgaW50ZXJuYWwgd3BhX3N1cHBsaWNhbnQgcmFuZG9tIHBvb2wgY2FuIGJlCisjIGRpc2FibGVkLiBUaGlzIHdpbGwgc2F2ZSBzb21lIGluIGJpbmFyeSBzaXplIGFuZCBDUFUgdXNlLiBIb3dldmVyLCB0aGlzCisjIHNob3VsZCBvbmx5IGJlIGNvbnNpZGVyZWQgZm9yIGJ1aWxkcyB0aGF0IGFyZSBrbm93biB0byBiZSB1c2VkIG9uIGRldmljZXMKKyMgdGhhdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgZGVzY3JpYmVkIGFib3ZlLgorI0NPTkZJR19OT19SQU5ET01fUE9PTD15CisKKyMgSUVFRSA4MDIuMTFuIChIaWdoIFRocm91Z2hwdXQpIHN1cHBvcnQgKG1haW5seSBmb3IgQVAgbW9kZSkKKyNDT05GSUdfSUVFRTgwMjExTj15CisKKyMgSUVFRSA4MDIuMTFhYyAoVmVyeSBIaWdoIFRocm91Z2hwdXQpIHN1cHBvcnQgKG1haW5seSBmb3IgQVAgbW9kZSkKKyMgKGRlcGVuZHMgb24gQ09ORklHX0lFRUU4MDIxMU4pCisjQ09ORklHX0lFRUU4MDIxMUFDPXkKKworIyBXaXJlbGVzcyBOZXR3b3JrIE1hbmFnZW1lbnQgKElFRUUgU3RkIDgwMi4xMXYtMjAxMSkKKyMgTm90ZTogVGhpcyBpcyBleHBlcmltZW50YWwgYW5kIG5vdCBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbi4KKyNDT05GSUdfV05NPXkKKworIyBJbnRlcndvcmtpbmcgKElFRUUgODAyLjExdSkKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byBlbmFibGUgZnVuY3Rpb25hbGl0eSB0byBpbXByb3ZlIGludGVyd29ya2luZyB3aXRoCisjIGV4dGVybmFsIG5ldHdvcmtzIChHQVMvQU5RUCB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBuZXR3b3JrcyBhbmQgbmV0d29yaworIyBzZWxlY3Rpb24gYmFzZWQgb24gYXZhaWxhYmxlIGNyZWRlbnRpYWxzKS4KKyNDT05GSUdfSU5URVJXT1JLSU5HPXkKKworIyBIb3RzcG90IDIuMAorI0NPTkZJR19IUzIwPXkKKworIyBEaXNhYmxlIHJvYW1pbmcgaW4gd3BhX3N1cHBsaWNhbnQKKyNDT05GSUdfTk9fUk9BTUlORz15CisKKyMgQVAgbW9kZSBvcGVyYXRpb25zIHdpdGggd3BhX3N1cHBsaWNhbnQKKyMgVGhpcyBjYW4gYmUgdXNlZCBmb3IgY29udHJvbGxpbmcgQVAgbW9kZSBvcGVyYXRpb25zIHdpdGggd3BhX3N1cHBsaWNhbnQuIEl0CisjIHNob3VsZCBiZSBub3RlZCB0aGF0IHRoaXMgaXMgbWFpbmx5IGFpbWVkIGF0IHNpbXBsZSBjYXNlcyBsaWtlCisjIFdQQTItUGVyc29uYWwgd2hpbGUgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb25zIGxpa2UgV1BBMi1FbnRlcnByaXNlIHdpdGggYW4KKyMgZXh0ZXJuYWwgUkFESVVTIHNlcnZlciBjYW4gYmUgc3VwcG9ydGVkIHdpdGggaG9zdGFwZC4KK0NPTkZJR19BUD15CisKK0NPTkZJR19CR1NDQU5fU0lNUExFPXkKKworIyBQMlAgKFdpLUZpIERpcmVjdCkKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byBlbmFibGUgUDJQIHN1cHBvcnQgaW4gd3BhX3N1cHBsaWNhbnQuIFNlZSBSRUFETUUtUDJQIGZvcgorIyBtb3JlIGluZm9ybWF0aW9uIG9uIFAyUCBvcGVyYXRpb25zLgorI0NPTkZJR19QMlA9eQorCisjIEVuYWJsZSBURExTIHN1cHBvcnQKKyNDT05GSUdfVERMUz15CisKKyMgV2ktRmkgRGlyZWN0CisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFdpLUZpIERpcmVjdCBleHRlbnNpb25zIGZvciBQMlAgdXNpbmcgYW4gZXh0ZXJuYWwKKyMgcHJvZ3JhbSB0byBjb250cm9sIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGV4Y2hhbmdlcyBpbiB0aGUgbWVzc2FnZXMuCisjQ09ORklHX1dJRklfRElTUExBWT15CisKKyMgQXV0b3NjYW4KKyMgVGhpcyBjYW4gYmUgdXNlZCB0byBlbmFibGUgYXV0b21hdGljIHNjYW4gc3VwcG9ydCBpbiB3cGFfc3VwcGxpY2FudC4KKyMgU2VlIHdwYV9zdXBwbGljYW50LmNvbmYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYXV0b3NjYW4gdXNhZ2UuCisjCisjIEVuYWJsaW5nIGRpcmVjdGx5IGEgbW9kdWxlIHdpbGwgZW5hYmxlIGF1dG9zY2FuIHN1cHBvcnQuCisjIEZvciBleHBvbmVudGlhbCBtb2R1bGU6CitDT05GSUdfQVVUT1NDQU5fRVhQT05FTlRJQUw9eQorIyBGb3IgcGVyaW9kaWMgbW9kdWxlOgorI0NPTkZJR19BVVRPU0NBTl9QRVJJT0RJQz15CisKKyMgUGFzc3dvcmQgKGFuZCBwYXNzcGhyYXNlLCBldGMuKSBiYWNrZW5kIGZvciBleHRlcm5hbCBzdG9yYWdlCisjIFRoZXNlIG9wdGlvbmFsIG1lY2hhbmlzbXMgY2FuIGJlIHVzZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHN0b3JpbmcgcGFzc3dvcmRzCisjIGFuZCBvdGhlciBzZWNyZXRzIGluIGV4dGVybmFsICh0byB3cGFfc3VwcGxpY2FudCkgbG9jYXRpb24uIFRoaXMgYWxsb3dzLCBmb3IKKyMgZXhhbXBsZSwgb3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyBrZXkgc3RvcmFnZSB0byBiZSB1c2VkCisjCisjIEV4dGVybmFsIHBhc3N3b3JkIGJhY2tlbmQgZm9yIHRlc3RpbmcgcHVycG9zZXMgKGRldmVsb3BlciB1c2UpCisjQ09ORklHX0VYVF9QQVNTV09SRF9URVNUPXkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWU1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCisKK1dQQV9TVVBfQklOPSIvdXNyL3NiaW4vd3BhX3N1cHBsaWNhbnQiCitXUEFfU1VQX1BOQU1FPSJ3cGFfc3VwcGxpY2FudCIKK1dQQV9TVVBfUElERklMRT0iL3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQuJElGQUNFLnBpZCIKK1dQQV9TVVBfT1BUSU9OUz0iLUIgLVAgJFdQQV9TVVBfUElERklMRSAtaSAkSUZBQ0UiCisKK1ZFUkJPU0lUWT0wCisKKworaWYgWyAtcyAiJElGX1dQQV9DT05GIiBdOyB0aGVuCisJV1BBX1NVUF9DT05GPSItYyAkSUZfV1BBX0NPTkYiCitlbHNlCisJZXhpdCAwCitmaQorCitpZiBbICEgLXggIiRXUEFfU1VQX0JJTiIgXTsgdGhlbgorCQorCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IGJpbmFyaWVzIG5vdCBleGVjdXRhYmxlIG9yIG1pc3NpbmcgZnJvbSAkV1BBX1NVUF9CSU4iCisJZmkKKwkKKwlleGl0IDEKK2ZpCisKK2lmIFsgIiRNT0RFIiA9ICJzdGFydCIgXSA7IHRoZW4KKwkjIGRyaXZlciB0eXBlIG9mIGludGVyZmFjZSwgZGVmYXVsdHMgdG8gd2V4dCB3aGVuIHVuZGVmaW5lZAorCWlmIFsgLXMgIi9ldGMvd3BhX3N1cHBsaWNhbnQvZHJpdmVyLiRJRkFDRSIgXTsgdGhlbgorCQlJRl9XUEFfRFJJVkVSPSQoY2F0ICIvZXRjL3dwYV9zdXBwbGljYW50L2RyaXZlci4kSUZBQ0UiKQorCWVsaWYgWyAteiAiJElGX1dQQV9EUklWRVIiIF07IHRoZW4KKwkJCisJCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiB3cGEtZHJpdmVyIG5vdCBwcm92aWRlZCwgdXNpbmcgXCJ3ZXh0XCIiCisJCWZpCisJCQorCQlJRl9XUEFfRFJJVkVSPSJ3ZXh0IgorCWZpCisJCisJIyBpZiB3ZSBoYXZlIHBhc3NlZCB0aGUgY3JpdGVyaWEsIHN0YXJ0IHdwYV9zdXBwbGljYW50CisJaWYgWyAtbiAiJFdQQV9TVVBfQ09ORiIgXTsgdGhlbgorCQkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6ICRXUEFfU1VQX0JJTiAkV1BBX1NVUF9PUFRJT05TICRXUEFfU1VQX0NPTkYgLUQgJElGX1dQQV9EUklWRVIiCisJCWZpCisJCQorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgXAorCQkJLS1uYW1lICRXUEFfU1VQX1BOQU1FIC0tc3RhcnRhcyAkV1BBX1NVUF9CSU4gLS1waWRmaWxlICRXUEFfU1VQX1BJREZJTEUgXAorCQkJLS0gICRXUEFfU1VQX09QVElPTlMgJFdQQV9TVVBfQ09ORiAtRCAkSUZfV1BBX0RSSVZFUgorCWZpCisKKwkjIGlmIHRoZSBpbnRlcmZhY2Ugc29ja2V0IGV4aXN0cywgdGhlbiB3cGFfc3VwcGxpY2FudCB3YXMgaW52b2tlZCBzdWNjZXNzZnVsbHkKKwlpZiBbIC1TICIkV1BBX0NPTU1PTl9DVFJMX0lGQUNFLyRJRkFDRSIgXTsgdGhlbgorCQorCQlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCQllY2hvICIkV1BBX1NVUF9QTkFNRTogY3RybF9pbnRlcmZhY2Ugc29ja2V0IGxvY2F0ZWQgYXQgJFdQQV9DT01NT05fQ1RSTF9JRkFDRS8kSUZBQ0UiCisJCWZpCisKKwkJZXhpdCAwCisJCQorCWZpCisJCitlbGlmIFsgIiRNT0RFIiA9ICJzdG9wIiBdOyB0aGVuCisKKwlpZiBbIC1mICIkV1BBX1NVUF9QSURGSUxFIiBdOyB0aGVuCisJCQorCQlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCQllY2hvICIkV1BBX1NVUF9QTkFNRTogdGVybWluYXRpbmcgJFdQQV9TVVBfUE5BTUUgZGFlbW9uIgorCQlmaQorCQkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgXAorCQkJLS1uYW1lICRXUEFfU1VQX1BOQU1FIC0tcGlkZmlsZQkkV1BBX1NVUF9QSURGSUxFCisJCQkKKwkJaWYgWyAtUyAiJFdQQV9DT01NT05fQ1RSTF9JRkFDRS8kSUZBQ0UiIF07IHRoZW4KKwkJCXJtIC1mICRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFCisJCWZpCisJCQkKKwkJaWYgWyAtZiAiJFdQQV9TVVBfUElERklMRSIgXTsgdGhlbgorCQkJcm0gLWYgJFdQQV9TVVBfUElERklMRQorCQlmaQorCWZpCisKK2ZpCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjU4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYKQEAgLTAsMCArMSw2OTAgQEAKKyMjIyMjIEV4YW1wbGUgd3BhX3N1cHBsaWNhbnQgY29uZmlndXJhdGlvbiBmaWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVGhpcyBmaWxlIGRlc2NyaWJlcyBjb25maWd1cmF0aW9uIGZpbGUgZm9ybWF0IGFuZCBsaXN0cyBhbGwgYXZhaWxhYmxlIG9wdGlvbi4KKyMgUGxlYXNlIGFsc28gdGFrZSBhIGxvb2sgYXQgc2ltcGxlciBjb25maWd1cmF0aW9uIGV4YW1wbGVzIGluICdleGFtcGxlcycKKyMgc3ViZGlyZWN0b3J5LgorIworIyBFbXB0eSBsaW5lcyBhbmQgbGluZXMgc3RhcnRpbmcgd2l0aCAjIGFyZSBpZ25vcmVkCisKKyMgTk9URSEgVGhpcyBmaWxlIG1heSBjb250YWluIHBhc3N3b3JkIGluZm9ybWF0aW9uIGFuZCBzaG91bGQgcHJvYmFibHkgYmUgbWFkZQorIyByZWFkYWJsZSBvbmx5IGJ5IHJvb3QgdXNlciBvbiBtdWx0aXVzZXIgc3lzdGVtcy4KKworIyBOb3RlOiBBbGwgZmlsZSBwYXRocyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgdXNlIGZ1bGwgKGFic29sdXRlLAorIyBub3QgcmVsYXRpdmUgdG8gd29ya2luZyBkaXJlY3RvcnkpIHBhdGggaW4gb3JkZXIgdG8gYWxsb3cgd29ya2luZyBkaXJlY3RvcnkKKyMgdG8gYmUgY2hhbmdlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHdwYV9zdXBwbGljYW50IGlzIHJ1biBpbiB0aGUgYmFja2dyb3VuZC4KKworIyBXaGV0aGVyIHRvIGFsbG93IHdwYV9zdXBwbGljYW50IHRvIHVwZGF0ZSAob3ZlcndyaXRlKSBjb25maWd1cmF0aW9uCisjCisjIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGFsbG93IHdwYV9zdXBwbGljYW50IHRvIG92ZXJ3cml0ZSBjb25maWd1cmF0aW9uCisjIGZpbGUgd2hlbmV2ZXIgY29uZmlndXJhdGlvbiBpcyBjaGFuZ2VkIChlLmcuLCBuZXcgbmV0d29yayBibG9jayBpcyBhZGRlZCB3aXRoCisjIHdwYV9jbGkgb3Igd3BhX2d1aSwgb3IgYSBwYXNzd29yZCBpcyBjaGFuZ2VkKS4gVGhpcyBpcyByZXF1aXJlZCBmb3IKKyMgd3BhX2NsaS93cGFfZ3VpIHRvIGJlIGFibGUgdG8gc3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBwZXJtYW5lbnRseS4KKyMgUGxlYXNlIG5vdGUgdGhhdCBvdmVyd3JpdGluZyBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCByZW1vdmUgdGhlIGNvbW1lbnRzIGZyb20KKyMgaXQuCisjdXBkYXRlX2NvbmZpZz0xCisKKyMgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gKHNoYXJlZCBieSBhbGwgbmV0d29yayBibG9ja3MpCisjCisjIFBhcmFtZXRlcnMgZm9yIHRoZSBjb250cm9sIGludGVyZmFjZS4gSWYgdGhpcyBpcyBzcGVjaWZpZWQsIHdwYV9zdXBwbGljYW50CisjIHdpbGwgb3BlbiBhIGNvbnRyb2wgaW50ZXJmYWNlIHRoYXQgaXMgYXZhaWxhYmxlIGZvciBleHRlcm5hbCBwcm9ncmFtcyB0bworIyBtYW5hZ2Ugd3BhX3N1cHBsaWNhbnQuIFRoZSBtZWFuaW5nIG9mIHRoaXMgc3RyaW5nIGRlcGVuZHMgb24gd2hpY2ggY29udHJvbAorIyBpbnRlcmZhY2UgbWVjaGFuaXNtIGlzIHVzZWQuIEZvciBhbGwgY2FzZXMsIHRoZSBleGlzdGVuY2Ugb2YgdGhpcyBwYXJhbWV0ZXIKKyMgaW4gY29uZmlndXJhdGlvbiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb250cm9sIGludGVyZmFjZSBpcworIyBlbmFibGVkLgorIworIyBGb3IgVU5JWCBkb21haW4gc29ja2V0cyAoZGVmYXVsdCBvbiBMaW51eCBhbmQgQlNEKTogVGhpcyBpcyBhIGRpcmVjdG9yeSB0aGF0CisjIHdpbGwgYmUgY3JlYXRlZCBmb3IgVU5JWCBkb21haW4gc29ja2V0cyBmb3IgbGlzdGVuaW5nIHRvIHJlcXVlc3RzIGZyb20KKyMgZXh0ZXJuYWwgcHJvZ3JhbXMgKENMSS9HVUksIGV0Yy4pIGZvciBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24uCisjIFRoZSBzb2NrZXQgZmlsZSB3aWxsIGJlIG5hbWVkIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgbmFtZSwgc28gbXVsdGlwbGUKKyMgd3BhX3N1cHBsaWNhbnQgcHJvY2Vzc2VzIGNhbiBiZSBydW4gYXQgdGhlIHNhbWUgdGltZSBpZiBtb3JlIHRoYW4gb25lCisjIGludGVyZmFjZSBpcyB1c2VkLgorIyAvdmFyL3J1bi93cGFfc3VwcGxpY2FudCBpcyB0aGUgcmVjb21tZW5kZWQgZGlyZWN0b3J5IGZvciBzb2NrZXRzIGFuZCBieQorIyBkZWZhdWx0LCB3cGFfY2xpIHdpbGwgdXNlIGl0IHdoZW4gdHJ5aW5nIHRvIGNvbm5lY3Qgd2l0aCB3cGFfc3VwcGxpY2FudC4KKyMKKyMgQWNjZXNzIGNvbnRyb2wgZm9yIHRoZSBjb250cm9sIGludGVyZmFjZSBjYW4gYmUgY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZQorIyBkaXJlY3RvcnkgdG8gYWxsb3cgb25seSBtZW1iZXJzIG9mIGEgZ3JvdXAgdG8gdXNlIHNvY2tldHMuIFRoaXMgd2F5LCBpdCBpcworIyBwb3NzaWJsZSB0byBydW4gd3BhX3N1cHBsaWNhbnQgYXMgcm9vdCAoc2luY2UgaXQgbmVlZHMgdG8gY2hhbmdlIG5ldHdvcmsKKyMgY29uZmlndXJhdGlvbiBhbmQgb3BlbiByYXcgc29ja2V0cykgYW5kIHN0aWxsIGFsbG93IEdVSS9DTEkgY29tcG9uZW50cyB0byBiZQorIyBydW4gYXMgbm9uLXJvb3QgdXNlcnMuIEhvd2V2ZXIsIHNpbmNlIHRoZSBjb250cm9sIGludGVyZmFjZSBjYW4gYmUgdXNlZCB0bworIyBjaGFuZ2UgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgdGhpcyBhY2Nlc3MgbmVlZHMgdG8gYmUgcHJvdGVjdGVkIGluIG1hbnkKKyMgY2FzZXMuIEJ5IGRlZmF1bHQsIHdwYV9zdXBwbGljYW50IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGdpZCAwIChyb290KS4gSWYgeW91CisjIHdhbnQgdG8gYWxsb3cgbm9uLXJvb3QgdXNlcnMgdG8gdXNlIHRoZSBjb250cm9sIGludGVyZmFjZSwgYWRkIGEgbmV3IGdyb3VwCisjIGFuZCBjaGFuZ2UgdGhpcyB2YWx1ZSB0byBtYXRjaCB3aXRoIHRoYXQgZ3JvdXAuIEFkZCB1c2VycyB0aGF0IHNob3VsZCBoYXZlCisjIGNvbnRyb2wgaW50ZXJmYWNlIGFjY2VzcyB0byB0aGlzIGdyb3VwLiBJZiB0aGlzIHZhcmlhYmxlIGlzIGNvbW1lbnRlZCBvdXQgb3IKKyMgbm90IGluY2x1ZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIGdyb3VwIHdpbGwgbm90IGJlIGNoYW5nZWQgZnJvbSB0aGUKKyMgdmFsdWUgaXQgZ290IGJ5IGRlZmF1bHQgd2hlbiB0aGUgZGlyZWN0b3J5IG9yIHNvY2tldCB3YXMgY3JlYXRlZC4KKyMKKyMgV2hlbiBjb25maWd1cmluZyBib3RoIHRoZSBkaXJlY3RvcnkgYW5kIGdyb3VwLCB1c2UgZm9sbG93aW5nIGZvcm1hdDoKKyMgRElSPS92YXIvcnVuL3dwYV9zdXBwbGljYW50IEdST1VQPXdoZWVsCisjIERJUj0vdmFyL3J1bi93cGFfc3VwcGxpY2FudCBHUk9VUD0wCisjIChncm91cCBjYW4gYmUgZWl0aGVyIGdyb3VwIG5hbWUgb3IgZ2lkKQorIworIyBGb3IgVURQIGNvbm5lY3Rpb25zIChkZWZhdWx0IG9uIFdpbmRvd3MpOiBUaGUgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLiBUaGlzCisjIHZhcmlhYmxlIGlzIGp1c3QgdXNlZCB0byBzZWxlY3QgdGhhdCB0aGUgY29udHJvbCBpbnRlcmZhY2UgaXMgdG8gYmUgY3JlYXRlZC4KKyMgVGhlIHZhbHVlIGNhbiBiZSBzZXQgdG8sIGUuZy4sIHVkcCAoY3RybF9pbnRlcmZhY2U9dWRwKQorIworIyBGb3IgV2luZG93cyBOYW1lZCBQaXBlOiBUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgc2VjdXJpdHkgZGVzY3JpcHRvcgorIyBmb3IgY29udHJvbGxpbmcgYWNjZXNzIHRvIHRoZSBjb250cm9sIGludGVyZmFjZS4gU2VjdXJpdHkgZGVzY3JpcHRvciBjYW4gYmUKKyMgc2V0IHVzaW5nIFNlY3VyaXR5IERlc2NyaXB0b3IgU3RyaW5nIEZvcm1hdCAoc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vCisjIGxpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL3NlY2F1dGh6L3NlY3VyaXR5LworIyBzZWN1cml0eV9kZXNjcmlwdG9yX3N0cmluZ19mb3JtYXQuYXNwKS4gVGhlIGRlc2NyaXB0b3Igc3RyaW5nIG5lZWRzIHRvIGJlCisjIHByZWZpeGVkIHdpdGggU0RETD0uIEZvciBleGFtcGxlLCBjdHJsX2ludGVyZmFjZT1TRERMPUQ6IHdvdWxkIHNldCBhbiBlbXB0eQorIyBEQUNMICh3aGljaCB3aWxsIHJlamVjdCBhbGwgY29ubmVjdGlvbnMpLiBTZWUgUkVBRE1FLVdpbmRvd3MudHh0IGZvciBtb3JlCisjIGluZm9ybWF0aW9uIGFib3V0IFNEREwgc3RyaW5nIGZvcm1hdC4KKyMKK2N0cmxfaW50ZXJmYWNlPS92YXIvcnVuL3dwYV9zdXBwbGljYW50CisKKyMgSUVFRSA4MDIuMVgvRUFQT0wgdmVyc2lvbgorIyB3cGFfc3VwcGxpY2FudCBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbiBJRUVFIFN0ZCA4MDIuMVgtMjAwNCB3aGljaCBkZWZpbmVzCisjIEVBUE9MIHZlcnNpb24gMi4gSG93ZXZlciwgdGhlcmUgYXJlIG1hbnkgQVBzIHRoYXQgZG8gbm90IGhhbmRsZSB0aGUgbmV3CisjIHZlcnNpb24gbnVtYmVyIGNvcnJlY3RseSAodGhleSBzZWVtIHRvIGRyb3AgdGhlIGZyYW1lcyBjb21wbGV0ZWx5KS4gSW4gb3JkZXIKKyMgdG8gbWFrZSB3cGFfc3VwcGxpY2FudCBpbnRlcm9wZXJhdGUgd2l0aCB0aGVzZSBBUHMsIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBzZXQKKyMgdG8gMSBieSBkZWZhdWx0LiBUaGlzIGNvbmZpZ3VyYXRpb24gdmFsdWUgY2FuIGJlIHVzZWQgdG8gc2V0IGl0IHRvIHRoZSBuZXcKKyMgdmVyc2lvbiAoMikuCitlYXBvbF92ZXJzaW9uPTEKKworIyBBUCBzY2FubmluZy9zZWxlY3Rpb24KKyMgQnkgZGVmYXVsdCwgd3BhX3N1cHBsaWNhbnQgcmVxdWVzdHMgZHJpdmVyIHRvIHBlcmZvcm0gQVAgc2Nhbm5pbmcgYW5kIHRoZW4KKyMgdXNlcyB0aGUgc2NhbiByZXN1bHRzIHRvIHNlbGVjdCBhIHN1aXRhYmxlIEFQLiBBbm90aGVyIGFsdGVybmF0aXZlIGlzIHRvCisjIGFsbG93IHRoZSBkcml2ZXIgdG8gdGFrZSBjYXJlIG9mIEFQIHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24gYW5kIHVzZQorIyB3cGFfc3VwcGxpY2FudCBqdXN0IHRvIHByb2Nlc3MgRUFQT0wgZnJhbWVzIGJhc2VkIG9uIElFRUUgODAyLjExIGFzc29jaWF0aW9uCisjIGluZm9ybWF0aW9uIGZyb20gdGhlIGRyaXZlci4KKyMgMTogd3BhX3N1cHBsaWNhbnQgaW5pdGlhdGVzIHNjYW5uaW5nIGFuZCBBUCBzZWxlY3Rpb24KKyMgMDogZHJpdmVyIHRha2VzIGNhcmUgb2Ygc2Nhbm5pbmcsIEFQIHNlbGVjdGlvbiwgYW5kIElFRUUgODAyLjExIGFzc29jaWF0aW9uCisjICAgIHBhcmFtZXRlcnMgKGUuZy4sIFdQQSBJRSBnZW5lcmF0aW9uKTsgdGhpcyBtb2RlIGNhbiBhbHNvIGJlIHVzZWQgd2l0aAorIyAgICBub24tV1BBIGRyaXZlcnMgd2hlbiB1c2luZyBJRUVFIDgwMi4xWCBtb2RlOyBkbyBub3QgdHJ5IHRvIGFzc29jaWF0ZSB3aXRoCisjICAgIEFQcyAoaS5lLiwgZXh0ZXJuYWwgcHJvZ3JhbSBuZWVkcyB0byBjb250cm9sIGFzc29jaWF0aW9uKS4gVGhpcyBtb2RlIG11c3QKKyMgICAgYWxzbyBiZSB1c2VkIHdoZW4gdXNpbmcgd2lyZWQgRXRoZXJuZXQgZHJpdmVycy4KKyMgMjogbGlrZSAwLCBidXQgYXNzb2NpYXRlIHdpdGggQVBzIHVzaW5nIHNlY3VyaXR5IHBvbGljeSBhbmQgU1NJRCAoYnV0IG5vdAorIyAgICBCU1NJRCk7IHRoaXMgY2FuIGJlIHVzZWQsIGUuZy4sIHdpdGggbmRpc3dyYXBwZXIgYW5kIE5ESVMgZHJpdmVycyB0bworIyAgICBlbmFibGUgb3BlcmF0aW9uIHdpdGggaGlkZGVuIFNTSURzIGFuZCBvcHRpbWl6ZWQgcm9hbWluZzsgaW4gdGhpcyBtb2RlLAorIyAgICB0aGUgbmV0d29yayBibG9ja3MgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhcmUgdHJpZWQgb25lIGJ5IG9uZSB1bnRpbAorIyAgICB0aGUgZHJpdmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBhc3NvY2lhdGlvbjsgZWFjaCBuZXR3b3JrIGJsb2NrIHNob3VsZCBoYXZlCisjICAgIGV4cGxpY2l0IHNlY3VyaXR5IHBvbGljeSAoaS5lLiwgb25seSBvbmUgb3B0aW9uIGluIHRoZSBsaXN0cykgZm9yCisjICAgIGtleV9tZ210LCBwYWlyd2lzZSwgZ3JvdXAsIHByb3RvIHZhcmlhYmxlcworYXBfc2Nhbj0xCisKKyMgRUFQIGZhc3QgcmUtYXV0aGVudGljYXRpb24KKyMgQnkgZGVmYXVsdCwgZmFzdCByZS1hdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkIGZvciBhbGwgRUFQIG1ldGhvZHMgdGhhdAorIyBzdXBwb3J0IGl0LiBUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgZmFzdCByZS1hdXRoZW50aWNhdGlvbi4KKyMgTm9ybWFsbHksIHRoZXJlIGlzIG5vIG5lZWQgdG8gZGlzYWJsZSB0aGlzLgorZmFzdF9yZWF1dGg9MQorCisjIE9wZW5TU0wgRW5naW5lIHN1cHBvcnQKKyMgVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBsb2FkIE9wZW5TU0wgZW5naW5lcy4KKyMgVGhlIHR3byBlbmdpbmVzIHRoYXQgYXJlIHN1cHBvcnRlZCBjdXJyZW50bHkgYXJlIHNob3duIGJlbG93OgorIyBUaGV5IGFyZSBib3RoIGZyb20gdGhlIG9wZW5zYyBwcm9qZWN0IChodHRwOi8vd3d3Lm9wZW5zYy5vcmcvKQorIyBCeSBkZWZhdWx0IG5vIGVuZ2luZXMgYXJlIGxvYWRlZC4KKyMgbWFrZSB0aGUgb3BlbnNjIGVuZ2luZSBhdmFpbGFibGUKKyNvcGVuc2NfZW5naW5lX3BhdGg9L3Vzci9saWIvb3BlbnNjL2VuZ2luZV9vcGVuc2Muc28KKyMgbWFrZSB0aGUgcGtjczExIGVuZ2luZSBhdmFpbGFibGUKKyNwa2NzMTFfZW5naW5lX3BhdGg9L3Vzci9saWIvb3BlbnNjL2VuZ2luZV9wa2NzMTEuc28KKyMgY29uZmlndXJlIHRoZSBwYXRoIHRvIHRoZSBwa2NzMTEgbW9kdWxlIHJlcXVpcmVkIGJ5IHRoZSBwa2NzMTEgZW5naW5lCisjcGtjczExX21vZHVsZV9wYXRoPS91c3IvbGliL3BrY3MxMS9vcGVuc2MtcGtjczExLnNvCisKKyMgRHluYW1pYyBFQVAgbWV0aG9kcworIyBJZiBFQVAgbWV0aG9kcyB3ZXJlIGJ1aWx0IGR5bmFtaWNhbGx5IGFzIHNoYXJlZCBvYmplY3QgZmlsZXMsIHRoZXkgbmVlZCB0byBiZQorIyBsb2FkZWQgaGVyZSBiZWZvcmUgYmVpbmcgdXNlZCBpbiB0aGUgbmV0d29yayBibG9ja3MuIEJ5IGRlZmF1bHQsIEVBUCBtZXRob2RzCisjIGFyZSBpbmNsdWRlZCBzdGF0aWNhbGx5IGluIHRoZSBidWlsZCwgc28gdGhlc2UgbGluZXMgYXJlIG5vdCBuZWVkZWQKKyNsb2FkX2R5bmFtaWNfZWFwPS91c3IvbGliL3dwYV9zdXBwbGljYW50L2VhcF90bHMuc28KKyNsb2FkX2R5bmFtaWNfZWFwPS91c3IvbGliL3dwYV9zdXBwbGljYW50L2VhcF9tZDUuc28KKworIyBEcml2ZXIgaW50ZXJmYWNlIHBhcmFtZXRlcnMKKyMgVGhpcyBmaWVsZCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgYXJiaXRyYXJ5IGRyaXZlciBpbnRlcmFjZSBwYXJhbWV0ZXJzLiBUaGUKKyMgZm9ybWF0IGlzIHNwZWNpZmljIHRvIHRoZSBzZWxlY3RlZCBkcml2ZXIgaW50ZXJmYWNlLiBUaGlzIGZpZWxkIGlzIG5vdCB1c2VkCisjIGluIG1vc3QgY2FzZXMuCisjZHJpdmVyX3BhcmFtPSJmaWVsZD12YWx1ZSIKKworIyBNYXhpbXVtIGxpZmV0aW1lIGZvciBQTUtTQSBpbiBzZWNvbmRzOyBkZWZhdWx0IDQzMjAwCisjZG90MTFSU05BQ29uZmlnUE1LTGlmZXRpbWU9NDMyMDAKKyMgVGhyZXNob2xkIGZvciByZWF1dGhlbnRpY2F0aW9uIChwZXJjZW50YWdlIG9mIFBNSyBsaWZldGltZSk7IGRlZmF1bHQgNzAKKyNkb3QxMVJTTkFDb25maWdQTUtSZWF1dGhUaHJlc2hvbGQ9NzAKKyMgVGltZW91dCBmb3Igc2VjdXJpdHkgYXNzb2NpYXRpb24gbmVnb3RpYXRpb24gaW4gc2Vjb25kczsgZGVmYXVsdCA2MAorI2RvdDExUlNOQUNvbmZpZ1NBVGltZW91dD02MAorCisjIG5ldHdvcmsgYmxvY2sKKyMKKyMgRWFjaCBuZXR3b3JrICh1c3VhbGx5IEFQJ3Mgc2hhcmluZyB0aGUgc2FtZSBTU0lEKSBpcyBjb25maWd1cmVkIGFzIGEgc2VwYXJhdGUKKyMgYmxvY2sgaW4gdGhpcyBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBuZXR3b3JrIGJsb2NrcyBhcmUgaW4gcHJlZmVyZW5jZSBvcmRlcgorIyAodGhlIGZpcnN0IG1hdGNoIGlzIHVzZWQpLgorIworIyBuZXR3b3JrIGJsb2NrIGZpZWxkczoKKyMKKyMgZGlzYWJsZWQ6CisjCTAgPSB0aGlzIG5ldHdvcmsgY2FuIGJlIHVzZWQgKGRlZmF1bHQpCisjCTEgPSB0aGlzIG5ldHdvcmsgYmxvY2sgaXMgZGlzYWJsZWQgKGNhbiBiZSBlbmFibGVkIHRocm91Z2ggY3RybF9pZmFjZSwKKyMJICAgIGUuZy4sIHdpdGggd3BhX2NsaSBvciB3cGFfZ3VpKQorIworIyBpZF9zdHI6IE5ldHdvcmsgaWRlbnRpZmllciBzdHJpbmcgZm9yIGV4dGVybmFsIHNjcmlwdHMuIFRoaXMgdmFsdWUgaXMgcGFzc2VkCisjCXRvIGV4dGVybmFsIGFjdGlvbiBzY3JpcHQgdGhyb3VnaCB3cGFfY2xpIGFzIFdQQV9JRF9TVFIgZW52aXJvbm1lbnQKKyMJdmFyaWFibGUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZG8gbmV0d29yayBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgorIworIyBzc2lkOiBTU0lEIChtYW5kYXRvcnkpOyBlaXRoZXIgYXMgYW4gQVNDSUkgc3RyaW5nIHdpdGggZG91YmxlIHF1b3RhdGlvbiBvcgorIwlhcyBoZXggc3RyaW5nOyBuZXR3b3JrIG5hbWUKKyMKKyMgc2Nhbl9zc2lkOgorIwkwID0gZG8gbm90IHNjYW4gdGhpcyBTU0lEIHdpdGggc3BlY2lmaWMgUHJvYmUgUmVxdWVzdCBmcmFtZXMgKGRlZmF1bHQpCisjCTEgPSBzY2FuIHdpdGggU1NJRC1zcGVjaWZpYyBQcm9iZSBSZXF1ZXN0IGZyYW1lcyAodGhpcyBjYW4gYmUgdXNlZCB0bworIwkgICAgZmluZCBBUHMgdGhhdCBkbyBub3QgYWNjZXB0IGJyb2FkY2FzdCBTU0lEIG9yIHVzZSBtdWx0aXBsZSBTU0lEczsKKyMJICAgIHRoaXMgd2lsbCBhZGQgbGF0ZW5jeSB0byBzY2FubmluZywgc28gZW5hYmxlIHRoaXMgb25seSB3aGVuIG5lZWRlZCkKKyMKKyMgYnNzaWQ6IEJTU0lEIChvcHRpb25hbCk7IGlmIHNldCwgdGhpcyBuZXR3b3JrIGJsb2NrIGlzIHVzZWQgb25seSB3aGVuCisjCWFzc29jaWF0aW5nIHdpdGggdGhlIEFQIHVzaW5nIHRoZSBjb25maWd1cmVkIEJTU0lECisjCisjIHByaW9yaXR5OiBwcmlvcml0eSBncm91cCAoaW50ZWdlcikKKyMgQnkgZGVmYXVsdCwgYWxsIG5ldHdvcmtzIHdpbGwgZ2V0IHNhbWUgcHJpb3JpdHkgZ3JvdXAgKDApLiBJZiBzb21lIG9mIHRoZQorIyBuZXR3b3JrcyBhcmUgbW9yZSBkZXNpcmFibGUsIHRoaXMgZmllbGQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBvcmRlciBpbgorIyB3aGljaCB3cGFfc3VwcGxpY2FudCBnb2VzIHRocm91Z2ggdGhlIG5ldHdvcmtzIHdoZW4gc2VsZWN0aW5nIGEgQlNTLiBUaGUKKyMgcHJpb3JpdHkgZ3JvdXBzIHdpbGwgYmUgaXRlcmF0ZWQgaW4gZGVjcmVhc2luZyBwcmlvcml0eSAoaS5lLiwgdGhlIGxhcmdlciB0aGUKKyMgcHJpb3JpdHkgdmFsdWUsIHRoZSBzb29uZXIgdGhlIG5ldHdvcmsgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzY2FuIHJlc3VsdHMpLgorIyBXaXRoaW4gZWFjaCBwcmlvcml0eSBncm91cCwgbmV0d29ya3Mgd2lsbCBiZSBzZWxlY3RlZCBiYXNlZCBvbiBzZWN1cml0eQorIyBwb2xpY3ksIHNpZ25hbCBzdHJlbmd0aCwgZXRjLgorIyBQbGVhc2Ugbm90ZSB0aGF0IEFQIHNjYW5uaW5nIHdpdGggc2Nhbl9zc2lkPTEgYW5kIGFwX3NjYW49MiBtb2RlIGFyZSBub3QKKyMgdXNpbmcgdGhpcyBwcmlvcml0eSB0byBzZWxlY3QgdGhlIG9yZGVyIGZvciBzY2FubmluZy4gSW5zdGVhZCwgdGhleSB0cnkgdGhlCisjIG5ldHdvcmtzIGluIHRoZSBvcmRlciB0aGF0IHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyMKKyMgbW9kZTogSUVFRSA4MDIuMTEgb3BlcmF0aW9uIG1vZGUKKyMgMCA9IGluZnJhc3RydWN0dXJlIChNYW5hZ2VkKSBtb2RlLCBpLmUuLCBhc3NvY2lhdGUgd2l0aCBhbiBBUCAoZGVmYXVsdCkKKyMgMSA9IElCU1MgKGFkLWhvYywgcGVlci10by1wZWVyKQorIyBOb3RlOiBJQlNTIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBrZXlfbWdtdCBOT05FIChwbGFpbnRleHQgYW5kIHN0YXRpYyBXRVApCisjIGFuZCBrZXlfbWdtdD1XUEEtTk9ORSAoZml4ZWQgZ3JvdXAga2V5IFRLSVAvQ0NNUCkuIEluIGFkZGl0aW9uLCBhcF9zY2FuIGhhcworIyB0byBiZSBzZXQgdG8gMiBmb3IgSUJTUy4gV1BBLU5vbmUgcmVxdWlyZXMgZm9sbG93aW5nIG5ldHdvcmsgYmxvY2sgb3B0aW9uczoKKyMgcHJvdG89V1BBLCBrZXlfbWdtdD1XUEEtTk9ORSwgcGFpcndpc2U9Tk9ORSwgZ3JvdXA9VEtJUCAob3IgQ0NNUCwgYnV0IG5vdAorIyBib3RoKSwgYW5kIHBzayBtdXN0IGFsc28gYmUgc2V0LgorIworIyBwcm90bzogbGlzdCBvZiBhY2NlcHRlZCBwcm90b2NvbHMKKyMgV1BBID0gV1BBL0lFRUUgODAyLjExaS9EMy4wCisjIFJTTiA9IFdQQTIvSUVFRSA4MDIuMTFpIChhbHNvIFdQQTIgY2FuIGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yIFJTTikKKyMgSWYgbm90IHNldCwgdGhpcyBkZWZhdWx0cyB0bzogV1BBIFJTTgorIworIyBrZXlfbWdtdDogbGlzdCBvZiBhY2NlcHRlZCBhdXRoZW50aWNhdGVkIGtleSBtYW5hZ2VtZW50IHByb3RvY29scworIyBXUEEtUFNLID0gV1BBIHByZS1zaGFyZWQga2V5ICh0aGlzIHJlcXVpcmVzICdwc2snIGZpZWxkKQorIyBXUEEtRUFQID0gV1BBIHVzaW5nIEVBUCBhdXRoZW50aWNhdGlvbiAodGhpcyBjYW4gdXNlIGFuIGV4dGVybmFsCisjCXByb2dyYW0sIGUuZy4sIFhzdXBwbGljYW50LCBmb3IgSUVFRSA4MDIuMVggRUFQIEF1dGhlbnRpY2F0aW9uCisjIElFRUU4MDIxWCA9IElFRUUgODAyLjFYIHVzaW5nIEVBUCBhdXRoZW50aWNhdGlvbiBhbmQgKG9wdGlvbmFsbHkpIGR5bmFtaWNhbGx5CisjCWdlbmVyYXRlZCBXRVAga2V5cworIyBOT05FID0gV1BBIGlzIG5vdCB1c2VkOyBwbGFpbnRleHQgb3Igc3RhdGljIFdFUCBjb3VsZCBiZSB1c2VkCisjIElmIG5vdCBzZXQsIHRoaXMgZGVmYXVsdHMgdG86IFdQQS1QU0sgV1BBLUVBUAorIworIyBhdXRoX2FsZzogbGlzdCBvZiBhbGxvd2VkIElFRUUgODAyLjExIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMKKyMgT1BFTiA9IE9wZW4gU3lzdGVtIGF1dGhlbnRpY2F0aW9uIChyZXF1aXJlZCBmb3IgV1BBL1dQQTIpCisjIFNIQVJFRCA9IFNoYXJlZCBLZXkgYXV0aGVudGljYXRpb24gKHJlcXVpcmVzIHN0YXRpYyBXRVAga2V5cykKKyMgTEVBUCA9IExFQVAvTmV0d29yayBFQVAgKG9ubHkgdXNlZCB3aXRoIExFQVApCisjIElmIG5vdCBzZXQsIGF1dG9tYXRpYyBzZWxlY3Rpb24gaXMgdXNlZCAoT3BlbiBTeXN0ZW0gd2l0aCBMRUFQIGVuYWJsZWQgaWYKKyMgTEVBUCBpcyBhbGxvd2VkIGFzIG9uZSBvZiB0aGUgRUFQIG1ldGhvZHMpLgorIworIyBwYWlyd2lzZTogbGlzdCBvZiBhY2NlcHRlZCBwYWlyd2lzZSAodW5pY2FzdCkgY2lwaGVycyBmb3IgV1BBCisjIENDTVAgPSBBRVMgaW4gQ291bnRlciBtb2RlIHdpdGggQ0JDLU1BQyBbUkZDIDM2MTAsIElFRUUgODAyLjExaS9ENy4wXQorIyBUS0lQID0gVGVtcG9yYWwgS2V5IEludGVncml0eSBQcm90b2NvbCBbSUVFRSA4MDIuMTFpL0Q3LjBdCisjIE5PTkUgPSBVc2Ugb25seSBHcm91cCBLZXlzIChkZXByZWNhdGVkLCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGlmIEFQcyBzdXBwb3J0CisjCXBhaXJ3aXNlIGtleXMpCisjIElmIG5vdCBzZXQsIHRoaXMgZGVmYXVsdHMgdG86IENDTVAgVEtJUAorIworIyBncm91cDogbGlzdCBvZiBhY2NlcHRlZCBncm91cCAoYnJvYWRjYXN0L211bHRpY2FzdCkgY2lwaGVycyBmb3IgV1BBCisjIENDTVAgPSBBRVMgaW4gQ291bnRlciBtb2RlIHdpdGggQ0JDLU1BQyBbUkZDIDM2MTAsIElFRUUgODAyLjExaS9ENy4wXQorIyBUS0lQID0gVGVtcG9yYWwgS2V5IEludGVncml0eSBQcm90b2NvbCBbSUVFRSA4MDIuMTFpL0Q3LjBdCisjIFdFUDEwNCA9IFdFUCAoV2lyZWQgRXF1aXZhbGVudCBQcml2YWN5KSB3aXRoIDEwNC1iaXQga2V5CisjIFdFUDQwID0gV0VQIChXaXJlZCBFcXVpdmFsZW50IFByaXZhY3kpIHdpdGggNDAtYml0IGtleSBbSUVFRSA4MDIuMTFdCisjIElmIG5vdCBzZXQsIHRoaXMgZGVmYXVsdHMgdG86IENDTVAgVEtJUCBXRVAxMDQgV0VQNDAKKyMKKyMgcHNrOiBXUEEgcHJlc2hhcmVkIGtleTsgMjU2LWJpdCBwcmUtc2hhcmVkIGtleQorIyBUaGUga2V5IHVzZWQgaW4gV1BBLVBTSyBtb2RlIGNhbiBiZSBlbnRlcmVkIGVpdGhlciBhcyA2NCBoZXgtZGlnaXRzLCBpLmUuLAorIyAzMiBieXRlcyBvciBhcyBhbiBBU0NJSSBwYXNzcGhyYXNlIChpbiB3aGljaCBjYXNlLCB0aGUgcmVhbCBQU0sgd2lsbCBiZQorIyBnZW5lcmF0ZWQgdXNpbmcgdGhlIHBhc3NwaHJhc2UgYW5kIFNTSUQpLiBBU0NJSSBwYXNzcGhyYXNlIG11c3QgYmUgYmV0d2VlbgorIyA4IGFuZCA2MyBjaGFyYWN0ZXJzIChpbmNsdXNpdmUpLgorIyBUaGlzIGZpZWxkIGlzIG5vdCBuZWVkZWQsIGlmIFdQQS1FQVAgaXMgdXNlZC4KKyMgTm90ZTogU2VwYXJhdGUgdG9vbCwgd3BhX3Bhc3NwaHJhc2UsIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIDI1Ni1iaXQga2V5cworIyBmcm9tIEFTQ0lJIHBhc3NwaHJhc2UuIFRoaXMgcHJvY2VzcyB1c2VzIGxvdCBvZiBDUFUgYW5kIHdwYV9zdXBwbGljYW50CisjIHN0YXJ0dXAgYW5kIHJlY29uZmlndXJhdGlvbiB0aW1lIGNhbiBiZSBvcHRpbWl6ZWQgYnkgZ2VuZXJhdGluZyB0aGUgUFNLIG9ubHkKKyMgb25seSB3aGVuIHRoZSBwYXNzcGhyYXNlIG9yIFNTSUQgaGFzIGFjdHVhbGx5IGNoYW5nZWQuCisjCisjIGVhcG9sX2ZsYWdzOiBJRUVFIDgwMi4xWC9FQVBPTCBvcHRpb25zIChiaXQgZmllbGQpCisjIER5bmFtaWMgV0VQIGtleSByZXF1aXJlZCBmb3Igbm9uLVdQQSBtb2RlCisjIGJpdDAgKDEpOiByZXF1aXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCB1bmljYXN0IFdFUCBrZXkKKyMgYml0MSAoMik6IHJlcXVpcmUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGJyb2FkY2FzdCBXRVAga2V5CisjIAkoMyA9IHJlcXVpcmUgYm90aCBrZXlzOyBkZWZhdWx0KQorIyBOb3RlOiBXaGVuIHVzaW5nIHdpcmVkIGF1dGhlbnRpY2F0aW9uLCBlYXBvbF9mbGFncyBtdXN0IGJlIHNldCB0byAwIGZvciB0aGUKKyMgYXV0aGVudGljYXRpb24gdG8gYmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyMKKyMgcHJvYWN0aXZlX2tleV9jYWNoaW5nOgorIyBFbmFibGUvZGlzYWJsZSBvcHBvcnR1bmlzdGljIFBNS1NBIGNhY2hpbmcgZm9yIFdQQTIuCisjIDAgPSBkaXNhYmxlZCAoZGVmYXVsdCkKKyMgMSA9IGVuYWJsZWQKKyMKKyMgd2VwX2tleTAuLjM6IFN0YXRpYyBXRVAga2V5IChBU0NJSSBpbiBkb3VibGUgcXVvdGF0aW9uLCBlLmcuICJhYmNkZSIgb3IKKyMgaGV4IHdpdGhvdXQgcXVvdGF0aW9uLCBlLmcuLCAwMTAyMDMwNDA1KQorIyB3ZXBfdHhfa2V5aWR4OiBEZWZhdWx0IFdFUCBrZXkgaW5kZXggKFRYKSAoMC4uMykKKyMKKyMgcGVlcmtleTogV2hldGhlciBQZWVyS2V5IG5lZ290aWF0aW9uIGZvciBkaXJlY3QgbGlua3MgKElFRUUgODAyLjExZSBETFMpIGlzCisjIGFsbG93ZWQuIFRoaXMgaXMgb25seSB1c2VkIHdpdGggUlNOL1dQQTIuCisjIDAgPSBkaXNhYmxlZCAoZGVmYXVsdCkKKyMgMSA9IGVuYWJsZWQKKyNwZWVya2V5PTEKKyMKKyMgRm9sbG93aW5nIGZpZWxkcyBhcmUgb25seSB1c2VkIHdpdGggaW50ZXJuYWwgRUFQIGltcGxlbWVudGF0aW9uLgorIyBlYXA6IHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFjY2VwdGVkIEVBUCBtZXRob2RzCisjCU1ENSA9IEVBUC1NRDUgKHVuc2VjdXJlIGFuZCBkb2VzIG5vdCBnZW5lcmF0ZSBrZXlpbmcgbWF0ZXJpYWwgLT4KKyMJCQljYW5ub3QgYmUgdXNlZCB3aXRoIFdQQTsgdG8gYmUgdXNlZCBhcyBhIFBoYXNlIDIgbWV0aG9kCisjCQkJd2l0aCBFQVAtUEVBUCBvciBFQVAtVFRMUykKKyMgICAgICAgTVNDSEFQVjIgPSBFQVAtTVNDSEFQdjIgKGNhbm5vdCBiZSB1c2VkIHNlcGFyYXRlbHkgd2l0aCBXUEE7IHRvIGJlIHVzZWQKKyMJCWFzIGEgUGhhc2UgMiBtZXRob2Qgd2l0aCBFQVAtUEVBUCBvciBFQVAtVFRMUykKKyMgICAgICAgT1RQID0gRUFQLU9UUCAoY2Fubm90IGJlIHVzZWQgc2VwYXJhdGVseSB3aXRoIFdQQTsgdG8gYmUgdXNlZAorIwkJYXMgYSBQaGFzZSAyIG1ldGhvZCB3aXRoIEVBUC1QRUFQIG9yIEVBUC1UVExTKQorIyAgICAgICBHVEMgPSBFQVAtR1RDIChjYW5ub3QgYmUgdXNlZCBzZXBhcmF0ZWx5IHdpdGggV1BBOyB0byBiZSB1c2VkCisjCQlhcyBhIFBoYXNlIDIgbWV0aG9kIHdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjCVRMUyA9IEVBUC1UTFMgKGNsaWVudCBhbmQgc2VydmVyIGNlcnRpZmljYXRlKQorIwlQRUFQID0gRUFQLVBFQVAgKHdpdGggdHVubmVsbGVkIEVBUCBhdXRoZW50aWNhdGlvbikKKyMJVFRMUyA9IEVBUC1UVExTICh3aXRoIHR1bm5lbGxlZCBFQVAgb3IgUEFQL0NIQVAvTVNDSEFQL01TQ0hBUFYyCisjCQkJIGF1dGhlbnRpY2F0aW9uKQorIwlJZiBub3Qgc2V0LCBhbGwgY29tcGlsZWQgaW4gbWV0aG9kcyBhcmUgYWxsb3dlZC4KKyMKKyMgaWRlbnRpdHk6IElkZW50aXR5IHN0cmluZyBmb3IgRUFQCisjIGFub255bW91c19pZGVudGl0eTogQW5vbnltb3VzIGlkZW50aXR5IHN0cmluZyBmb3IgRUFQICh0byBiZSB1c2VkIGFzIHRoZQorIwl1bmVuY3J5cHRlZCBpZGVudGl0eSB3aXRoIEVBUCB0eXBlcyB0aGF0IHN1cHBvcnQgZGlmZmVyZW50IHR1bm5lbGxlZAorIwlpZGVudGl0eSwgZS5nLiwgRUFQLVRUTFMpCisjIHBhc3N3b3JkOiBQYXNzd29yZCBzdHJpbmcgZm9yIEVBUAorIyBjYV9jZXJ0OiBGaWxlIHBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSAoUEVNL0RFUikuIFRoaXMgZmlsZSBjYW4gaGF2ZSBvbmUKKyMJb3IgbW9yZSB0cnVzdGVkIENBIGNlcnRpZmljYXRlcy4gSWYgY2FfY2VydCBhbmQgY2FfcGF0aCBhcmUgbm90CisjCWluY2x1ZGVkLCBzZXJ2ZXIgY2VydGlmaWNhdGUgd2lsbCBub3QgYmUgdmVyaWZpZWQuIFRoaXMgaXMgaW5zZWN1cmUgYW5kCisjCWEgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZSBzaG91bGQgYWx3YXlzIGJlIGNvbmZpZ3VyZWQgd2hlbiB1c2luZworIwlFQVAtVExTL1RUTFMvUEVBUC4gRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcgZGlyZWN0b3J5IG1heQorIwljaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCU9uIFdpbmRvd3MsIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzIGNhbiBiZSBsb2FkZWQgZnJvbSB0aGUgc3lzdGVtCisjCWNlcnRpZmljYXRlIHN0b3JlIGJ5IHNldHRpbmcgdGhpcyB0byBjZXJ0X3N0b3JlOi8vPG5hbWU+LCBlLmcuLAorIwljYV9jZXJ0PSJjZXJ0X3N0b3JlOi8vQ0EiIG9yIGNhX2NlcnQ9ImNlcnRfc3RvcmU6Ly9ST09UIi4KKyMJTm90ZSB0aGF0IHdoZW4gcnVubmluZyB3cGFfc3VwcGxpY2FudCBhcyBhbiBhcHBsaWNhdGlvbiwgdGhlIHVzZXIKKyMJY2VydGlmaWNhdGUgc3RvcmUgKE15IHVzZXIgYWNjb3VudCkgaXMgdXNlZCwgd2hlcmVhcyBjb21wdXRlciBzdG9yZQorIwkoQ29tcHV0ZXIgYWNjb3VudCkgaXMgdXNlZCB3aGVuIHJ1bm5pbmcgd3Bhc3ZjIGFzIGEgc2VydmljZS4KKyMgY2FfcGF0aDogRGlyZWN0b3J5IHBhdGggZm9yIENBIGNlcnRpZmljYXRlIGZpbGVzIChQRU0pLiBUaGlzIHBhdGggbWF5CisjCWNvbnRhaW4gbXVsdGlwbGUgQ0EgY2VydGlmaWNhdGVzIGluIE9wZW5TU0wgZm9ybWF0LiBDb21tb24gdXNlIGZvciB0aGlzCisjCWlzIHRvIHBvaW50IHRvIHN5c3RlbSB0cnVzdGVkIENBIGxpc3Qgd2hpY2ggaXMgb2Z0ZW4gaW5zdGFsbGVkIGludG8KKyMJZGlyZWN0b3J5IGxpa2UgL2V0Yy9zc2wvY2VydHMuIElmIGNvbmZpZ3VyZWQsIHRoZXNlIGNlcnRpZmljYXRlcyBhcmUKKyMJYWRkZWQgdG8gdGhlIGxpc3Qgb2YgdHJ1c3RlZCBDQXMuIGNhX2NlcnQgbWF5IGFsc28gYmUgaW5jbHVkZWQgaW4gdGhhdAorIwljYXNlLCBidXQgaXQgaXMgbm90IHJlcXVpcmVkLgorIyBjbGllbnRfY2VydDogRmlsZSBwYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIChQRU0vREVSKQorIwlGdWxsIHBhdGggc2hvdWxkIGJlIHVzZWQgc2luY2Ugd29ya2luZyBkaXJlY3RvcnkgbWF5IGNoYW5nZSB3aGVuCisjCXdwYV9zdXBwbGljYW50IGlzIHJ1biBpbiB0aGUgYmFja2dyb3VuZC4KKyMJQWx0ZXJuYXRpdmVseSwgYSBuYW1lZCBjb25maWd1cmF0aW9uIGJsb2IgY2FuIGJlIHVzZWQgYnkgc2V0dGluZyB0aGlzCisjCXRvIGJsb2I6Ly88YmxvYiBuYW1lPi4KKyMgcHJpdmF0ZV9rZXk6IEZpbGUgcGF0aCB0byBjbGllbnQgcHJpdmF0ZSBrZXkgZmlsZSAoUEVNL0RFUi9QRlgpCisjCVdoZW4gUEtDUyMxMi9QRlggZmlsZSAoLnAxMi8ucGZ4KSBpcyB1c2VkLCBjbGllbnRfY2VydCBzaG91bGQgYmUKKyMJY29tbWVudGVkIG91dC4gQm90aCB0aGUgcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlIHdpbGwgYmUgcmVhZCBmcm9tCisjCXRoZSBQS0NTIzEyIGZpbGUgaW4gdGhpcyBjYXNlLiBGdWxsIHBhdGggc2hvdWxkIGJlIHVzZWQgc2luY2Ugd29ya2luZworIwlkaXJlY3RvcnkgbWF5IGNoYW5nZSB3aGVuIHdwYV9zdXBwbGljYW50IGlzIHJ1biBpbiB0aGUgYmFja2dyb3VuZC4KKyMJV2luZG93cyBjZXJ0aWZpY2F0ZSBzdG9yZSBjYW4gYmUgdXNlZCBieSBsZWF2aW5nIGNsaWVudF9jZXJ0IG91dCBhbmQKKyMJY29uZmlndXJpbmcgcHJpdmF0ZV9rZXkgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKKyMJY2VydDovL3N1YnN0cmluZ190b19tYXRjaAorIwloYXNoOi8vY2VydGlmaWNhdGVfdGh1bWJwcmludF9pbl9oZXgKKyMJZm9yIGV4YW1wbGU6IHByaXZhdGVfa2V5PSJoYXNoOi8vNjMwOTNhYTljNDdmNTZhZTg4MzM0YzdiNjVhNCIKKyMJTm90ZSB0aGF0IHdoZW4gcnVubmluZyB3cGFfc3VwcGxpY2FudCBhcyBhbiBhcHBsaWNhdGlvbiwgdGhlIHVzZXIKKyMJY2VydGlmaWNhdGUgc3RvcmUgKE15IHVzZXIgYWNjb3VudCkgaXMgdXNlZCwgd2hlcmVhcyBjb21wdXRlciBzdG9yZQorIwkoQ29tcHV0ZXIgYWNjb3VudCkgaXMgdXNlZCB3aGVuIHJ1bm5pbmcgd3Bhc3ZjIGFzIGEgc2VydmljZS4KKyMJQWx0ZXJuYXRpdmVseSwgYSBuYW1lZCBjb25maWd1cmF0aW9uIGJsb2IgY2FuIGJlIHVzZWQgYnkgc2V0dGluZyB0aGlzCisjCXRvIGJsb2I6Ly88YmxvYiBuYW1lPi4KKyMgcHJpdmF0ZV9rZXlfcGFzc3dkOiBQYXNzd29yZCBmb3IgcHJpdmF0ZSBrZXkgZmlsZSAoaWYgbGVmdCBvdXQsIHRoaXMgd2lsbCBiZQorIwlhc2tlZCB0aHJvdWdoIGNvbnRyb2wgaW50ZXJmYWNlKQorIyBkaF9maWxlOiBGaWxlIHBhdGggdG8gREgvRFNBIHBhcmFtZXRlcnMgZmlsZSAoaW4gUEVNIGZvcm1hdCkKKyMJVGhpcyBpcyBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHNldHRpbmcgcGFyYW1ldGVycyBmb3IgYW4KKyMJZXBoZW1lcmFsIERIIGtleSBleGNoYW5nZS4gSW4gbW9zdCBjYXNlcywgdGhlIGRlZmF1bHQgUlNBCisjCWF1dGhlbnRpY2F0aW9uIGRvZXMgbm90IHVzZSB0aGlzIGNvbmZpZ3VyYXRpb24uIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlCisjCXNldHVwIFJTQSB0byB1c2UgZXBoZW1lcmFsIERIIGtleSBleGNoYW5nZS4gSW4gYWRkaXRpb24sIGNpcGhlcnMgd2l0aAorIwlEU0Ega2V5cyBhbHdheXMgdXNlIGVwaGVtZXJhbCBESCBrZXlzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFjaGlldmUKKyMJZm9yd2FyZCBzZWNyZWN5LiBJZiB0aGUgZmlsZSBpcyBpbiBEU0EgcGFyYW1ldGVycyBmb3JtYXQsIGl0IHdpbGwgYmUKKyMJYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgaW50byBESCBwYXJhbXMuCisjIHN1YmplY3RfbWF0Y2g6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHN1YmplY3Qgb2YgdGhlCisjCWF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4gSWYgdGhpcyBzdHJpbmcgaXMgc2V0LCB0aGUgc2VydmVyCisjCXNlcnRpZmljYXRlIGlzIG9ubHkgYWNjZXB0ZWQgaWYgaXQgY29udGFpbnMgdGhpcyBzdHJpbmcgaW4gdGhlIHN1YmplY3QuCisjCVRoZSBzdWJqZWN0IHN0cmluZyBpcyBpbiBmb2xsb3dpbmcgZm9ybWF0OgorIwkvQz1VUy9TVD1DQS9MPVNhbiBGcmFuY2lzY28vQ049VGVzdCBBUy9lbWFpbEFkZHJlc3M9YXNAZXhhbXBsZS5jb20KKyMgYWx0c3ViamVjdF9tYXRjaDogU2VtaWNvbG9uIHNlcGFyYXRlZCBzdHJpbmcgb2YgZW50cmllcyB0byBiZSBtYXRjaGVkIGFnYWluc3QKKyMJdGhlIGFsdGVybmF0aXZlIHN1YmplY3QgbmFtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyIGNlcnRpZmljYXRlLgorIwlJZiB0aGlzIHN0cmluZyBpcyBzZXQsIHRoZSBzZXJ2ZXIgc2VydGlmaWNhdGUgaXMgb25seSBhY2NlcHRlZCBpZiBpdAorIwljb250YWlucyBvbmUgb2YgdGhlIGVudHJpZXMgaW4gYW4gYWx0ZXJuYXRpdmUgc3ViamVjdCBuYW1lIGV4dGVuc2lvbi4KKyMJYWx0U3ViamVjdE5hbWUgc3RyaW5nIGlzIGluIGZvbGxvd2luZyBmb3JtYXQ6IFRZUEU6VkFMVUUKKyMJRXhhbXBsZTogRU1BSUw6c2VydmVyQGV4YW1wbGUuY29tCisjCUV4YW1wbGU6IEROUzpzZXJ2ZXIuZXhhbXBsZS5jb207RE5TOnNlcnZlcjIuZXhhbXBsZS5jb20KKyMJRm9sbG93aW5nIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6IEVNQUlMLCBETlMsIFVSSQorIyBwaGFzZTE6IFBoYXNlMSAob3V0ZXIgYXV0aGVudGljYXRpb24sIGkuZS4sIFRMUyB0dW5uZWwpIHBhcmFtZXRlcnMKKyMJKHN0cmluZyB3aXRoIGZpZWxkLXZhbHVlIHBhaXJzLCBlLmcuLCAicGVhcHZlcj0wIiBvcgorIwkicGVhcHZlcj0xIHBlYXBsYWJlbD0xIikKKyMJJ3BlYXB2ZXInIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHdoaWNoIFBFQVAgdmVyc2lvbiAoMCBvciAxKSBpcyB1c2VkLgorIwkncGVhcGxhYmVsPTEnIGNhbiBiZSB1c2VkIHRvIGZvcmNlIG5ldyBsYWJlbCwgImNsaWVudCBQRUFQIGVuY3J5cHRpb24iLAorIwl0byBiZSB1c2VkIGR1cmluZyBrZXkgZGVyaXZhdGlvbiB3aGVuIFBFQVB2MSBvciBuZXdlci4gTW9zdCBleGlzdGluZworIwlQRUFQdjEgaW1wbGVtZW50YXRpb24gc2VlbSB0byBiZSB1c2luZyB0aGUgb2xkIGxhYmVsLCAiY2xpZW50IEVBUAorIwllbmNyeXB0aW9uIiwgYW5kIHdwYV9zdXBwbGljYW50IGlzIG5vdyB1c2luZyB0aGF0IGFzIHRoZSBkZWZhdWx0IHZhbHVlLgorIwlTb21lIHNlcnZlcnMsIGUuZy4sIFJhZGlhdG9yLCBtYXkgcmVxdWlyZSBwZWFwbGFiZWw9MSBjb25maWd1cmF0aW9uIHRvCisjCWludGVyb3BlcmF0ZSB3aXRoIFBFQVB2MTsgc2VlIGVhcF90ZXN0aW5nLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgorIwkncGVhcF9vdXRlcl9zdWNjZXNzPTAnIGNhbiBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBQRUFQIGF1dGhlbnRpY2F0aW9uIG9uCisjCXR1bm5lbGVkIEVBUC1TdWNjZXNzLiBUaGlzIGlzIHJlcXVpcmVkIHdpdGggc29tZSBSQURJVVMgc2VydmVycyB0aGF0CisjCWltcGxlbWVudCBkcmFmdC1qb3NlZnNzb24tcHBwZXh0LWVhcC10bHMtZWFwLTA1LnR4dCAoZS5nLiwKKyMJTHVjZW50IE5hdmlzUmFkaXVzIHY0LjQuMCB3aXRoIFBFQVAgaW4gIklFVEYgRHJhZnQgNSIgbW9kZSkKKyMJaW5jbHVkZV90bHNfbGVuZ3RoPTEgY2FuIGJlIHVzZWQgdG8gZm9yY2Ugd3BhX3N1cHBsaWNhbnQgdG8gaW5jbHVkZQorIwlUTFMgTWVzc2FnZSBMZW5ndGggZmllbGQgaW4gYWxsIFRMUyBtZXNzYWdlcyBldmVuIGlmIHRoZXkgYXJlIG5vdAorIwlmcmFnbWVudGVkLgorIwlzaW1fbWluX251bV9jaGFsPTMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIEVBUC1TSU0gdG8gcmVxdWlyZSB0aHJlZQorIwljaGFsbGVuZ2VzIChieSBkZWZhdWx0LCBpdCBhY2NlcHRzIDIgb3IgMykKKyMgcGhhc2UyOiBQaGFzZTIgKGlubmVyIGF1dGhlbnRpY2F0aW9uIHdpdGggVExTIHR1bm5lbCkgcGFyYW1ldGVycworIwkoc3RyaW5nIHdpdGggZmllbGQtdmFsdWUgcGFpcnMsIGUuZy4sICJhdXRoPU1TQ0hBUFYyIiBmb3IgRUFQLVBFQVAgb3IKKyMJImF1dGhlYXA9TVNDSEFQVjIgYXV0aGVhcD1NRDUiIGZvciBFQVAtVFRMUykKKyMgRm9sbG93aW5nIGNlcnRpZmljYXRlL3ByaXZhdGUga2V5IGZpZWxkcyBhcmUgdXNlZCBpbiBpbm5lciBQaGFzZTIKKyMgYXV0aGVudGljYXRpb24gd2hlbiB1c2luZyBFQVAtVFRMUyBvciBFQVAtUEVBUC4KKyMgY2FfY2VydDI6IEZpbGUgcGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBmaWxlLiBUaGlzIGZpbGUgY2FuIGhhdmUgb25lIG9yIG1vcmUKKyMJdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMuIElmIGNhX2NlcnQyIGFuZCBjYV9wYXRoMiBhcmUgbm90IGluY2x1ZGVkLAorIwlzZXJ2ZXIgY2VydGlmaWNhdGUgd2lsbCBub3QgYmUgdmVyaWZpZWQuIFRoaXMgaXMgaW5zZWN1cmUgYW5kIGEgdHJ1c3RlZAorIwlDQSBjZXJ0aWZpY2F0ZSBzaG91bGQgYWx3YXlzIGJlIGNvbmZpZ3VyZWQuCisjIGNhX3BhdGgyOiBEaXJlY3RvcnkgcGF0aCBmb3IgQ0EgY2VydGlmaWNhdGUgZmlsZXMgKFBFTSkKKyMgY2xpZW50X2NlcnQyOiBGaWxlIHBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUKKyMgcHJpdmF0ZV9rZXkyOiBGaWxlIHBhdGggdG8gY2xpZW50IHByaXZhdGUga2V5IGZpbGUKKyMgcHJpdmF0ZV9rZXkyX3Bhc3N3ZDogUGFzc3dvcmQgZm9yIHByaXZhdGUga2V5IGZpbGUKKyMgZGhfZmlsZTI6IEZpbGUgcGF0aCB0byBESC9EU0EgcGFyYW1ldGVycyBmaWxlIChpbiBQRU0gZm9ybWF0KQorIyBzdWJqZWN0X21hdGNoMjogU3Vic3RyaW5nIHRvIGJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgc3ViamVjdCBvZiB0aGUKKyMJYXV0aGVudGljYXRpb24gc2VydmVyIGNlcnRpZmljYXRlLgorIyBhbHRzdWJqZWN0X21hdGNoMjogU3Vic3RyaW5nIHRvIGJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgYWx0ZXJuYXRpdmUgc3ViamVjdAorIwluYW1lIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBzZXJ2ZXIgY2VydGlmaWNhdGUuCisjCisjIGZyYWdtZW50X3NpemU6IE1heGltdW0gRUFQIGZyYWdtZW50IHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQgMTM5OCkuCisjCVRoaXMgdmFsdWUgbGltaXRzIHRoZSBmcmFnbWVudCBzaXplIGZvciBFQVAgbWV0aG9kcyB0aGF0IHN1cHBvcnQKKyMJZnJhZ21lbnRhdGlvbiAoZS5nLiwgRUFQLVRMUyBhbmQgRUFQLVBFQVApLiBUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQKKyMJc21hbGwgZW5vdWdoIHRvIG1ha2UgdGhlIEVBUCBtZXNzYWdlcyBmaXQgaW4gTVRVIG9mIHRoZSBuZXR3b3JrCisjCWludGVyZmFjZSB1c2VkIGZvciBFQVBPTC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgc3VpdGFibGUgZm9yIG1vc3QKKyMJY2FzZXMuCisjCisjIEVBUC1QU0sgdmFyaWFibGVzOgorIyBlYXBwc2s6IDE2LWJ5dGUgKDEyOC1iaXQsIDMyIGhleCBkaWdpdHMpIHByZS1zaGFyZWQga2V5IGluIGhleCBmb3JtYXQKKyMgbmFpOiB1c2VyIE5BSQorIworIyBFQVAtUEFYIHZhcmlhYmxlczoKKyMgZWFwcHNrOiAxNi1ieXRlICgxMjgtYml0LCAzMiBoZXggZGlnaXRzKSBwcmUtc2hhcmVkIGtleSBpbiBoZXggZm9ybWF0CisjCisjIEVBUC1TQUtFIHZhcmlhYmxlczoKKyMgZWFwcHNrOiAzMi1ieXRlICgyNTYtYml0LCA2NCBoZXggZGlnaXRzKSBwcmUtc2hhcmVkIGtleSBpbiBoZXggZm9ybWF0CisjCSh0aGlzIGlzIGNvbmNhdGVuYXRpb24gb2YgUm9vdC1TZWNyZXQtQSBhbmQgUm9vdC1TZWNyZXQtQikKKyMgbmFpOiB1c2VyIE5BSSAoUEVFUklEKQorIworIyBFQVAtR1BTSyB2YXJpYWJsZXM6CisjIGVhcHBzazogUHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdCAoYXQgbGVhc3QgMTI4IGJpdHMsIGkuZS4sIDMyIGhleCBkaWdpdHMpCisjIG5haTogdXNlciBOQUkgKElEX0NsaWVudCkKKyMKKyMgRUFQLUZBU1QgdmFyaWFibGVzOgorIyBwYWNfZmlsZTogRmlsZSBwYXRoIGZvciB0aGUgUEFDIGVudHJpZXMuIHdwYV9zdXBwbGljYW50IHdpbGwgbmVlZCB0byBiZSBhYmxlCisjCXRvIGNyZWF0ZSB0aGlzIGZpbGUgYW5kIHdyaXRlIHVwZGF0ZXMgdG8gaXQgd2hlbiBQQUMgaXMgYmVpbmcKKyMJcHJvdmlzaW9uZWQgb3IgcmVmcmVzaGVkLiBGdWxsIHBhdGggdG8gdGhlIGZpbGUgc2hvdWxkIGJlIHVzZWQgc2luY2UKKyMJd29ya2luZyBkaXJlY3RvcnkgbWF5IGNoYW5nZSB3aGVuIHdwYV9zdXBwbGljYW50IGlzIHJ1biBpbiB0aGUKKyMJYmFja2dyb3VuZC4gQWx0ZXJuYXRpdmVseSwgYSBuYW1lZCBjb25maWd1cmF0aW9uIGJsb2IgY2FuIGJlIHVzZWQgYnkKKyMJc2V0dGluZyB0aGlzIHRvIGJsb2I6Ly88YmxvYiBuYW1lPgorIyBwaGFzZTE6IGZhc3RfcHJvdmlzaW9uaW5nPTEgb3B0aW9uIGVuYWJsZXMgaW4tbGluZSBwcm92aXNpb25pbmcgb2YgRUFQLUZBU1QKKyMJY3JlZGVudGlhbHMgKFBBQykKKyMKKyMgd3BhX3N1cHBsaWNhbnQgc3VwcG9ydHMgbnVtYmVyIG9mICJFQVAgd29ya2Fyb3VuZHMiIHRvIHdvcmsgYXJvdW5kCisjIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzIHdpdGggaW5jb3JyZWN0bHkgYmVoYXZpbmcgYXV0aGVudGljYXRpb24gc2VydmVycy4KKyMgVGhlc2UgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIHNvbWUgb2YgdGhlIGlzc3VlcyBhcmUgcHJlc2VudCBpbiBsYXJnZQorIyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gc2VydmVycy4gU3RyaWN0IEVBUCBjb25mb3JtYW5jZSBtb2RlIGNhbiBiZQorIyBjb25maWd1cmVkIGJ5IGRpc2FibGluZyB3b3JrYXJvdW5kcyB3aXRoIGVhcF93b3JrYXJvdW5kPTAuCisKKyMgRXhhbXBsZSBibG9ja3M6CisKKyMgU2ltcGxlIGNhc2U6IFdQQS1QU0ssIFBTSyBhcyBhbiBBU0NJSSBwYXNzcGhyYXNlLCBhbGxvdyBhbGwgdmFsaWQgY2lwaGVycworbmV0d29yaz17CisJc3NpZD0ic2ltcGxlIgorCXBzaz0idmVyeSBzZWNyZXQgcGFzc3BocmFzZSIKKwlwcmlvcml0eT01Cit9CisKKyMgU2FtZSBhcyBwcmV2aW91cywgYnV0IHJlcXVlc3QgU1NJRC1zcGVjaWZpYyBzY2FubmluZyAoZm9yIEFQcyB0aGF0IHJlamVjdAorIyBicm9hZGNhc3QgU1NJRCkKK25ldHdvcms9eworCXNzaWQ9InNlY29uZCBzc2lkIgorCXNjYW5fc3NpZD0xCisJcHNrPSJ2ZXJ5IHNlY3JldCBwYXNzcGhyYXNlIgorCXByaW9yaXR5PTIKK30KKworIyBPbmx5IFdQQS1QU0sgaXMgdXNlZC4gQW55IHZhbGlkIGNpcGhlciBjb21iaW5hdGlvbiBpcyBhY2NlcHRlZC4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJcHJvdG89V1BBCisJa2V5X21nbXQ9V1BBLVBTSworCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUCBXRVAxMDQgV0VQNDAKKwlwc2s9MDZiNGJlMTlkYTI4OWY0NzVhYTQ2YTMzY2I3OTMwMjlkNGFiM2RiN2EyM2VlOTIzODJlYjAxMDZjNzJhYzdiYgorCXByaW9yaXR5PTIKK30KKworIyBPbmx5IFdQQS1FQVAgaXMgdXNlZC4gQm90aCBDQ01QIGFuZCBUS0lQIGlzIGFjY2VwdGVkLiBBbiBBUCB0aGF0IHVzZWQgV0VQMTA0CisjIG9yIFdFUDQwIGFzIHRoZSBncm91cCBjaXBoZXIgd2lsbCBub3QgYmUgYWNjZXB0ZWQuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCXByb3RvPVJTTgorCWtleV9tZ210PVdQQS1FQVAKKwlwYWlyd2lzZT1DQ01QIFRLSVAKKwlncm91cD1DQ01QIFRLSVAKKwllYXA9VExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwljbGllbnRfY2VydD0iL2V0Yy9jZXJ0L3VzZXIucGVtIgorCXByaXZhdGVfa2V5PSIvZXRjL2NlcnQvdXNlci5wcnYiCisJcHJpdmF0ZV9rZXlfcGFzc3dkPSJwYXNzd29yZCIKKwlwcmlvcml0eT0xCit9CisKKyMgRUFQLVBFQVAvTVNDSEFQdjIgY29uZmlndXJhdGlvbiBmb3IgUkFESVVTIHNlcnZlcnMgdGhhdCB1c2UgdGhlIG5ldyBwZWFwbGFiZWwKKyMgKGUuZy4sIFJhZGlhdG9yKQorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVBFQVAKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJcGhhc2UxPSJwZWFwbGFiZWw9MSIKKwlwaGFzZTI9ImF1dGg9TVNDSEFQVjIiCisJcHJpb3JpdHk9MTAKK30KKworIyBFQVAtVFRMUy9FQVAtTUQ1LUNoYWxsZW5nZSBjb25maWd1cmF0aW9uIHdpdGggYW5vbnltb3VzIGlkZW50aXR5IGZvciB0aGUKKyMgdW5lbmNyeXB0ZWQgdXNlLiBSZWFsIGlkZW50aXR5IGlzIHNlbnQgb25seSB3aXRoaW4gYW4gZW5jcnlwdGVkIFRMUyB0dW5uZWwuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VFRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWFub255bW91c19pZGVudGl0eT0iYW5vbnltb3VzQGV4YW1wbGUuY29tIgorCXBhc3N3b3JkPSJmb29iYXIiCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwlwcmlvcml0eT0yCit9CisKKyMgRUFQLVRUTFMvTVNDSEFQdjIgY29uZmlndXJhdGlvbiB3aXRoIGFub255bW91cyBpZGVudGl0eSBmb3IgdGhlIHVuZW5jcnlwdGVkCisjIHVzZS4gUmVhbCBpZGVudGl0eSBpcyBzZW50IG9ubHkgd2l0aGluIGFuIGVuY3J5cHRlZCBUTFMgdHVubmVsLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJcGhhc2UyPSJhdXRoPU1TQ0hBUFYyIgorfQorCisjIFdQQS1FQVAsIEVBUC1UVExTIHdpdGggZGlmZmVyZW50IENBIGNlcnRpZmljYXRlIHVzZWQgZm9yIG91dGVyIGFuZCBpbm5lcgorIyBhdXRoZW50aWNhdGlvbi4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJIyBQaGFzZTEgLyBvdXRlciBhdXRoZW50aWNhdGlvbgorCWFub255bW91c19pZGVudGl0eT0iYW5vbnltb3VzQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJIyBQaGFzZSAyIC8gaW5uZXIgYXV0aGVudGljYXRpb24KKwlwaGFzZTI9ImF1dGhlYXA9VExTIgorCWNhX2NlcnQyPSIvZXRjL2NlcnQvY2EyLnBlbSIKKwljbGllbnRfY2VydDI9Ii9ldGMvY2VyL3VzZXIucGVtIgorCXByaXZhdGVfa2V5Mj0iL2V0Yy9jZXIvdXNlci5wcnYiCisJcHJpdmF0ZV9rZXkyX3Bhc3N3ZD0icGFzc3dvcmQiCisJcHJpb3JpdHk9MgorfQorCisjIEJvdGggV1BBLVBTSyBhbmQgV1BBLUVBUCBpcyBhY2NlcHRlZC4gT25seSBDQ01QIGlzIGFjY2VwdGVkIGFzIHBhaXJ3aXNlIGFuZAorIyBncm91cCBjaXBoZXIuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWJzc2lkPTAwOjExOjIyOjMzOjQ0OjU1CisJcHJvdG89V1BBIFJTTgorCWtleV9tZ210PVdQQS1QU0sgV1BBLUVBUAorCXBhaXJ3aXNlPUNDTVAKKwlncm91cD1DQ01QCisJcHNrPTA2YjRiZTE5ZGEyODlmNDc1YWE0NmEzM2NiNzkzMDI5ZDRhYjNkYjdhMjNlZTkyMzgyZWIwMTA2YzcyYWM3YmIKK30KKworIyBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gU1NJRCwgc28gdXNlIGhleCBzdHJpbmcuIERlZmF1bHQgdG8gV1BBLVBTSywgV1BBLUVBUAorIyBhbmQgYWxsIHZhbGlkIGNpcGhlcnMuCituZXR3b3JrPXsKKwlzc2lkPTAwMDEwMjAzCisJcHNrPTAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYKK30KKworCisjIElFRUUgODAyLjFYL0VBUE9MIHdpdGggZHluYW1pY2FsbHkgZ2VuZXJhdGVkIFdFUCBrZXlzIChpLmUuLCBubyBXUEEpIHVzaW5nCisjIEVBUC1UTFMgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCBrZXkgZ2VuZXJhdGlvbjsgcmVxdWlyZSBib3RoIHVuaWNhc3QgYW5kCisjIGJyb2FkY2FzdCBXRVAga2V5cy4KK25ldHdvcms9eworCXNzaWQ9IjF4LXRlc3QiCisJa2V5X21nbXQ9SUVFRTgwMjFYCisJZWFwPVRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJZWFwb2xfZmxhZ3M9MworfQorCisKKyMgTEVBUCB3aXRoIGR5bmFtaWMgV0VQIGtleXMKK25ldHdvcms9eworCXNzaWQ9ImxlYXAtZXhhbXBsZSIKKwlrZXlfbWdtdD1JRUVFODAyMVgKKwllYXA9TEVBUAorCWlkZW50aXR5PSJ1c2VyIgorCXBhc3N3b3JkPSJmb29iYXIiCit9CisKKyMgUGxhaW50ZXh0IGNvbm5lY3Rpb24gKG5vIFdQQSwgbm8gSUVFRSA4MDIuMVgpCituZXR3b3JrPXsKKwlzc2lkPSJwbGFpbnRleHQtdGVzdCIKKwlrZXlfbWdtdD1OT05FCit9CisKKworIyBTaGFyZWQgV0VQIGtleSBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKQorbmV0d29yaz17CisJc3NpZD0ic3RhdGljLXdlcC10ZXN0IgorCWtleV9tZ210PU5PTkUKKwl3ZXBfa2V5MD0iYWJjZGUiCisJd2VwX2tleTE9MDEwMjAzMDQwNQorCXdlcF9rZXkyPSIxMjM0NTY3ODkwMTIzIgorCXdlcF90eF9rZXlpZHg9MAorCXByaW9yaXR5PTUKK30KKworCisjIFNoYXJlZCBXRVAga2V5IGNvbm5lY3Rpb24gKG5vIFdQQSwgbm8gSUVFRSA4MDIuMVgpIHVzaW5nIFNoYXJlZCBLZXkKKyMgSUVFRSA4MDIuMTEgYXV0aGVudGljYXRpb24KK25ldHdvcms9eworCXNzaWQ9InN0YXRpYy13ZXAtdGVzdDIiCisJa2V5X21nbXQ9Tk9ORQorCXdlcF9rZXkwPSJhYmNkZSIKKwl3ZXBfa2V5MT0wMTAyMDMwNDA1CisJd2VwX2tleTI9IjEyMzQ1Njc4OTAxMjMiCisJd2VwX3R4X2tleWlkeD0wCisJcHJpb3JpdHk9NQorCWF1dGhfYWxnPVNIQVJFRAorfQorCisKKyMgSUJTUy9hZC1ob2MgbmV0d29yayB3aXRoIFdQQS1Ob25lL1RLSVAuCituZXR3b3JrPXsKKwlzc2lkPSJ0ZXN0IGFkaG9jIgorCW1vZGU9MQorCXByb3RvPVdQQQorCWtleV9tZ210PVdQQS1OT05FCisJcGFpcndpc2U9Tk9ORQorCWdyb3VwPVRLSVAKKwlwc2s9InNlY3JldCBwYXNzcGhyYXNlIgorfQorCisKKyMgQ2F0Y2ggYWxsIGV4YW1wbGUgdGhhdCBhbGxvd3MgbW9yZSBvciBsZXNzIGFsbCBjb25maWd1cmF0aW9uIG1vZGVzCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCXNjYW5fc3NpZD0xCisJa2V5X21nbXQ9V1BBLUVBUCBXUEEtUFNLIElFRUU4MDIxWCBOT05FCisJcGFpcndpc2U9Q0NNUCBUS0lQCisJZ3JvdXA9Q0NNUCBUS0lQIFdFUDEwNCBXRVA0MAorCXBzaz0idmVyeSBzZWNyZXQgcGFzc3BocmFzZSIKKwllYXA9VFRMUyBQRUFQIFRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCXBhc3N3b3JkPSJmb29iYXIiCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwljbGllbnRfY2VydD0iL2V0Yy9jZXJ0L3VzZXIucGVtIgorCXByaXZhdGVfa2V5PSIvZXRjL2NlcnQvdXNlci5wcnYiCisJcHJpdmF0ZV9rZXlfcGFzc3dkPSJwYXNzd29yZCIKKwlwaGFzZTE9InBlYXBsYWJlbD0wIgorfQorCisjIEV4YW1wbGUgb2YgRUFQLVRMUyB3aXRoIHNtYXJ0Y2FyZCAob3BlbnNzbCBlbmdpbmUpCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VExTCisJcHJvdG89UlNOCisJcGFpcndpc2U9Q0NNUCBUS0lQCisJZ3JvdXA9Q0NNUCBUS0lQCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwljbGllbnRfY2VydD0iL2V0Yy9jZXJ0L3VzZXIucGVtIgorCisJZW5naW5lPTEKKworCSMgVGhlIGVuZ2luZSBjb25maWd1cmVkIGhlcmUgbXVzdCBiZSBhdmFpbGFibGUuIExvb2sgYXQKKwkjIE9wZW5TU0wgZW5naW5lIHN1cHBvcnQgaW4gdGhlIGdsb2JhbCBzZWN0aW9uLgorCSMgVGhlIGtleSBhdmFpbGFibGUgdGhyb3VnaCB0aGUgZW5naW5lIG11c3QgYmUgdGhlIHByaXZhdGUga2V5CisJIyBtYXRjaGluZyB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGNvbmZpZ3VyZWQgYWJvdmUuCisKKwkjIHVzZSB0aGUgb3BlbnNjIGVuZ2luZQorCSNlbmdpbmVfaWQ9Im9wZW5zYyIKKwkja2V5X2lkPSI0NSIKKworCSMgdXNlIHRoZSBwa2NzMTEgZW5naW5lCisJZW5naW5lX2lkPSJwa2NzMTEiCisJa2V5X2lkPSJpZF80NSIKKworCSMgT3B0aW9uYWwgUElOIGNvbmZpZ3VyYXRpb247IHRoaXMgY2FuIGJlIGxlZnQgb3V0IGFuZCBQSU4gd2lsbCBiZQorCSMgYXNrZWQgdGhyb3VnaCB0aGUgY29udHJvbCBpbnRlcmZhY2UKKwlwaW49IjEyMzQiCit9CisKKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIHNob3dpbmcgaG93IHRvIHVzZSBhbiBpbmxpbmVkIGJsb2IgYXMgYSBDQSBjZXJ0aWZpY2F0ZQorIyBkYXRhIGluc3RlYWQgb2YgdXNpbmcgZXh0ZXJuYWwgZmlsZQorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9ImJsb2I6Ly9leGFtcGxlYmxvYiIKKwlwcmlvcml0eT0yMAorfQorCitibG9iLWJhc2U2NC1leGFtcGxlYmxvYj17CitTR1ZzYkc4Z1YyOXliR1FoQ2c9PQorfQorCisKKyMgV2lsZGNhcmQgbWF0Y2ggZm9yIFNTSUQgKHBsYWludGV4dCBBUHMgb25seSkuIFRoaXMgZXhhbXBsZSBzZWxlY3QgYW55CisjIG9wZW4gQVAgcmVnYXJkbGVzcyBvZiBpdHMgU1NJRC4KK25ldHdvcms9eworCWtleV9tZ210PU5PTkUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxZmZlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lCkBAIC0wLDAgKzEsNyBAQAorY3RybF9pbnRlcmZhY2U9L3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQKK2N0cmxfaW50ZXJmYWNlX2dyb3VwPTAKK3VwZGF0ZV9jb25maWc9MQorCituZXR3b3JrPXsKKyAgICAgICAga2V5X21nbXQ9Tk9ORQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50XzIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI0Y2YyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjQuYmIKQEAgLTAsMCArMSwxMTYgQEAKK1NVTU1BUlkgPSAiQ2xpZW50IGZvciBXaS1GaSBQcm90ZWN0ZWQgQWNjZXNzIChXUEEpIgorSE9NRVBBR0UgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL3dwYV9zdXBwbGljYW50LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL2J1Z3ovIgorU0VDVElPTiA9ICJuZXR3b3JrIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zNmIyNzgwMTQ0N2UwNjYyZWUwMTM4ZDE3ZmU5Mzg4MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTE7ZW5kbGluZT01NjttZDU9N2YzOTM1NzlmOGIxMDlmZTkxZjNiOTc2NWQyNmM3ZDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT0zNDMwZmRhNzlmMmJhMWRkNTQ1ZjBiM2M0ZDZlNGQyNCAiCitERVBFTkRTID0gImRidXMgbGlibmwgbGliZ2NyeXB0IgorUlJFQ09NTUVORFNfJHtQTn0gPSAid3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSB3cGEtc3VwcGxpY2FudC1jbGkiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJnbnV0bHMiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLCxnbnV0bHMiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIiwsb3BlbnNzbCIKKworaW5oZXJpdCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ3cGFfc3VwcGxpY2FudC5zZXJ2aWNlIHdwYV9zdXBwbGljYW50LW5sODAyMTFALnNlcnZpY2Ugd3BhX3N1cHBsaWNhbnQtd2lyZWRALnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL3JlbGVhc2VzL3dwYV9zdXBwbGljYW50LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZjb25maWcgXAorICAgICAgICAgICBmaWxlOi8vd3BhLXN1cHBsaWNhbnQuc2ggXAorICAgICAgICAgICBmaWxlOi8vd3BhX3N1cHBsaWNhbnQuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUgXAorICAgICAgICAgICBmaWxlOi8vOTlfd3BhX3N1cHBsaWNhbnQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUDJQLVZhbGlkYXRlLVNTSUQtZWxlbWVudC1sZW5ndGgtYmVmb3JlLWNvcHlpbmctaXQtQy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVdQUy1GaXgtSFRUUC1jaHVua2VkLXRyYW5zZmVyLWVuY29kaW5nLXBhcnNlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRUFQLXB3ZC1wZWVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQtci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1FQVAtcHdkLXBlZXItRml4LWFzeW1tZXRyaWMtZnJhZ21lbnRhdGlvbi1iZWhhdmlvci5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImYwMDM3ZGJlMDM4OTdkY2FmMmFkMjcyMmU2NTkwOTVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA1OGRjODMyYzA5NjEzOWEwNTllNmRmODE0MDgwZjUwMjUxYThkMzEzYzIxYjEzMzY0YzU0YTFlNzAxMDkxMjIiCisKK1MgPSAiJHtXT1JLRElSfS93cGFfc3VwcGxpY2FudC0ke1BWfSIKKworUEFDS0FHRVNfcHJlcGVuZCA9ICJ3cGEtc3VwcGxpY2FudC1wYXNzcGhyYXNlIHdwYS1zdXBwbGljYW50LWNsaSAiCitGSUxFU193cGEtc3VwcGxpY2FudC1wYXNzcGhyYXNlID0gIiR7YmluZGlyfS93cGFfcGFzc3BocmFzZSIKK0ZJTEVTX3dwYS1zdXBwbGljYW50LWNsaSA9ICIke3NiaW5kaXJ9L3dwYV9jbGkiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzLyoiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vd3BhX3N1cHBsaWNhbnQuY29uZiIKKworZG9fY29uZmlndXJlICgpIHsKKwkke01BS0V9IC1DIHdwYV9zdXBwbGljYW50IGNsZWFuCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVmY29uZmlnIHdwYV9zdXBwbGljYW50Ly5jb25maWcKKwllY2hvICJDRkxBR1MgKz1cIi1JJHtTVEFHSU5HX0lOQ0RJUn0vbGlibmwzXCIiID4+IHdwYV9zdXBwbGljYW50Ly5jb25maWcKKwllY2hvICJEUlZfQ0ZMQUdTICs9XCItSSR7U1RBR0lOR19JTkNESVJ9L2xpYm5sM1wiIiA+PiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJCisJaWYgZWNobyAiJHtQQUNLQUdFQ09ORklHfSIgfCBncmVwIC1xdyAib3BlbnNzbCI7IHRoZW4KKyAgICAgICAgCXNzbD1vcGVuc3NsCisJZWxpZiBlY2hvICIke1BBQ0tBR0VDT05GSUd9IiB8IGdyZXAgLXF3ICJnbnV0bHMiOyB0aGVuCisgICAgICAgIAlzc2w9Z251dGxzCisJZmkKKwlpZiBbIC1uICIkc3NsIiBdOyB0aGVuCisgICAgICAgIAlzZWQgLWkgInMvJXNzbCUvJHNzbC8iIHdwYV9zdXBwbGljYW50Ly5jb25maWcKKwlmaQorCisJIyBGb3IgcmVidWlsZAorCXJtIC1mIHdwYV9zdXBwbGljYW50LyouZCB3cGFfc3VwcGxpY2FudC9kYnVzLyouZAorfQorCitleHBvcnQgRVhUUkFfQ0ZMQUdTID0gIiR7Q0ZMQUdTfSIKK2V4cG9ydCBCSU5ESVIgPSAiJHtzYmluZGlyfSIKKworZG9fY29tcGlsZSAoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTCisJc2VkIC1lICJzOkNGTEFHU1wgPS4qOiYgXCQoRVhUUkFfQ0ZMQUdTKTpnIiAtaSAke1N9L3NyYy9saWIucnVsZXMKKwlvZV9ydW5tYWtlIC1DIHdwYV9zdXBwbGljYW50Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSB3cGFfc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gNzU1IHdwYV9zdXBwbGljYW50L3dwYV9jbGkgICAgICAgICR7RH0ke3NiaW5kaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSB3cGFfc3VwcGxpY2FudC93cGFfcGFzc3BocmFzZSAke0R9JHtiaW5kaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2RvY2Rpcn0vd3BhX3N1cHBsaWNhbnQKKwlpbnN0YWxsIC1tIDY0NCB3cGFfc3VwcGxpY2FudC9SRUFETUUgJHtXT1JLRElSfS93cGFfc3VwcGxpY2FudC5jb25mICR7RH0ke2RvY2Rpcn0vd3BhX3N1cHBsaWNhbnQKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDYwMCAke1dPUktESVJ9L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZSAke0R9JHtzeXNjb25mZGlyfS93cGFfc3VwcGxpY2FudC5jb25mCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXBvc3QtZG93bi5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQvCisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS93cGEtc3VwcGxpY2FudC5zaCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kL3dwYS1zdXBwbGljYW50CisJY2QgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay8gJiYgXAorCWxuIC1zZiAuLi9pZi1wcmUtdXAuZC93cGEtc3VwcGxpY2FudCBpZi1wb3N0LWRvd24uZC93cGEtc3VwcGxpY2FudAorCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kCisJaW5zdGFsbCAtbSA2NDQgJHtTfS93cGFfc3VwcGxpY2FudC9kYnVzL2RidXMtd3BhX3N1cHBsaWNhbnQuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kCisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcworCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvZGJ1cy8qLnNlcnZpY2UgJHtEfS8ke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9LyR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwkJaW5zdGFsbCAtbSA2NDQgJHtTfS93cGFfc3VwcGxpY2FudC9zeXN0ZW1kLyouc2VydmljZSAke0R9LyR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlmaQorCisJaW5zdGFsbCAtZCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3dwYV9zdXBwbGljYW50ICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCit9CisKK3BrZ19wb3N0aW5zdF93cGEtc3VwcGxpY2FudCAoKSB7CisJIyBJZiB3ZSdyZSBvZmZsaW5lLCB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoaXMuCisJaWYgWyAieCREIiA9ICJ4IiBdOyB0aGVuCisJCWtpbGxhbGwgLXEgLUhVUCBkYnVzLWRhZW1vbiB8fCB0cnVlCisJZmkKKworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNmM0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvZmlsZXN5c3RlbXMKQEAgLTAsMCArMSw4IEBACitleHQ0CitleHQzCitleHQyCit2ZmF0CitmYXQKK2J0cmZzCittaW5peAorKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWEwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvZnN0YWIKQEAgLTAsMCArMSwxMSBAQAorIyBzdG9jayBmc3RhYiAtIHlvdSBwcm9iYWJseSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgd2l0aCBhIG1hY2hpbmUgc3BlY2lmaWMgb25lCisKKy9kZXYvcm9vdCAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgIGF1dG8gICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDEgIDEKK3Byb2MgICAgICAgICAgICAgICAgIC9wcm9jICAgICAgICAgICAgICAgIHByb2MgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgIDAKK2RldnB0cyAgICAgICAgICAgICAgIC9kZXYvcHRzICAgICAgICAgICAgIGRldnB0cyAgICAgbW9kZT0wNjIwLGdpZD01ICAgICAgIDAgIDAKK3RtcGZzICAgICAgICAgICAgICAgIC9ydW4gICAgICAgICAgICAgICAgIHRtcGZzICAgICAgbW9kZT0wNzU1LG5vZGV2LG5vc3VpZCxzdHJpY3RhdGltZSAwICAwCit0bXBmcyAgICAgICAgICAgICAgICAvdmFyL3ZvbGF0aWxlICAgICAgICB0bXBmcyAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwICAwCisKKyMgdW5jb21tZW50IHRoaXMgaWYgeW91ciBkZXZpY2UgaGFzIGEgU0QvTU1DL1RyYW5zZmxhc2ggc2xvdAorIy9kZXYvbW1jYmxrMHAxICAgICAgIC9tZWRpYS9jYXJkICAgICAgICAgIGF1dG8gICAgICAgZGVmYXVsdHMsc3luYyxub2F1dG8gIDAgIDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2hvc3QuY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9ob3N0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4YzFlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9ob3N0LmNvbmYKQEAgLTAsMCArMSwyIEBACitvcmRlciBob3N0cyxiaW5kCittdWx0aSBvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lucHV0cmMgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaW5wdXRyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWM0YzhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lucHV0cmMKQEAgLTAsMCArMSw2MSBAQAorIyAvZXRjL2lucHV0cmMgLSBnbG9iYWwgaW5wdXRyYyBmb3IgbGlicmVhZGxpbmUKKyMgU2VlIHJlYWRsaW5lKDNyZWFkbGluZSkgYW5kIGBpbmZvIHJsdXNlcm1hbicgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyMgQmUgOCBiaXQgY2xlYW4uCitzZXQgaW5wdXQtbWV0YSBvbgorc2V0IG91dHB1dC1tZXRhIG9uCisKKyMgVG8gYWxsb3cgdGhlIHVzZSBvZiA4Yml0LWNoYXJhY3RlcnMgbGlrZSB0aGUgZ2VybWFuIHVtbGF1dHMsIGNvbW1lbnQgb3V0CisjIHRoZSBsaW5lIGJlbG93LiBIb3dldmVyIHRoaXMgbWFrZXMgdGhlIG1ldGEga2V5IG5vdCB3b3JrIGFzIGEgbWV0YSBrZXksCisjIHdoaWNoIGlzIGFubm95aW5nIHRvIHRob3NlIHdoaWNoIGRvbid0IG5lZWQgdG8gdHlwZSBpbiA4LWJpdCBjaGFyYWN0ZXJzLgorCisjIHNldCBjb252ZXJ0LW1ldGEgb2ZmCisKKyMgdHJ5IHRvIGVuYWJsZSB0aGUgYXBwbGljYXRpb24ga2V5cGFkIHdoZW4gaXQgaXMgY2FsbGVkLiAgU29tZSBzeXN0ZW1zCisjIG5lZWQgdGhpcyB0byBlbmFibGUgdGhlIGFycm93IGtleXMuCisjIHNldCBlbmFibGUta2V5cGFkIG9uCisKKyMgc2VlIC91c3Ivc2hhcmUvZG9jL2Jhc2gvaW5wdXRyYy5hcnJvd3MgZm9yIG90aGVyIGNvZGVzIG9mIGFycm93IGtleXMKKworIyBkbyBub3QgYmVsbCBvbiB0YWItY29tcGxldGlvbiAKKyMgc2V0IGJlbGwtc3R5bGUgbm9uZSAKKworIyBzb21lIGRlZmF1bHRzIC8gbW9kaWZpY2F0aW9ucyBmb3IgdGhlIGVtYWNzIG1vZGUKKyRpZiBtb2RlPWVtYWNzCisKKyMgYWxsb3cgdGhlIHVzZSBvZiB0aGUgSG9tZS9FbmQga2V5cworIyAiXGVbMX4iOiBiZWdpbm5pbmctb2YtbGluZQorIyAiXGVbNH4iOiBlbmQtb2YtbGluZQorCisjIGFsbG93IHRoZSB1c2Ugb2YgdGhlIERlbGV0ZS9JbnNlcnQga2V5cworIyAiXGVbM34iOiBkZWxldGUtY2hhcgorIyAiXGVbMn4iOiBxdW90ZWQtaW5zZXJ0CisKKyMgbWFwcGluZ3MgZm9yICJwYWdlIHVwIiBhbmQgInBhZ2UgZG93biIgdG8gc3RlcCB0byB0aGUgYmVnaW5uaW5nL2VuZCAKKyMgb2YgdGhlIGhpc3RvcnkKKyMgIlxlWzV+IjogYmVnaW5uaW5nLW9mLWhpc3RvcnkKKyMgIlxlWzZ+IjogZW5kLW9mLWhpc3RvcnkKKworIyBhbHRlcm5hdGUgbWFwcGluZ3MgZm9yICJwYWdlIHVwIiBhbmQgInBhZ2UgZG93biIgdG8gc2VhcmNoIHRoZSBoaXN0b3J5CisjICJcZVs1fiI6IGhpc3Rvcnktc2VhcmNoLWJhY2t3YXJkCisjICJcZVs2fiI6IGhpc3Rvcnktc2VhcmNoLWZvcndhcmQKKworIyAjIG1hcHBpbmdzIGZvciBDdHJsLWxlZnQtYXJyb3cgYW5kIEN0cmwtcmlnaHQtYXJyb3cgZm9yIHdvcmQgbW92aW5nCisjICJcZVs1QyI6IGZvcndhcmQtd29yZAorIyAiXGVbNUQiOiBiYWNrd2FyZC13b3JkCisjICJcZVxlW0MiOiBmb3J3YXJkLXdvcmQKKyMgIlxlXGVbRCI6IGJhY2t3YXJkLXdvcmQKKworIyAkaWYgdGVybT1yeHZ0CisjICJcZVs4fiI6IGVuZC1vZi1saW5lCisjICRlbmRpZgorCisjIGZvciBub24gUkgvRGViaWFuIHh0ZXJtLCBjYW4ndCBodXJ0IGZvciBSSC9ERWJpYW4geHRlcm0KKyMgIlxlT0giOiBiZWdpbm5pbmctb2YtbGluZQorIyAiXGVPRiI6IGVuZC1vZi1saW5lCisKKyMgZm9yIGZyZWVic2QgY29uc29sZQorIyAiXGVbSCI6IGJlZ2lubmluZy1vZi1saW5lCisjICJcZVtGIjogZW5kLW9mLWxpbmUKKworJGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlLm5ldCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZS5uZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZS5uZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjBjMzFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2xpY2Vuc2VzL0dQTC0yCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9tb3RkIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL21vdGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9tb3RkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbnNzd2l0Y2guY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9uc3N3aXRjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjAzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbnNzd2l0Y2guY29uZgpAQCAtMCwwICsxLDE5IEBACisjIC9ldGMvbnNzd2l0Y2guY29uZgorIworIyBFeGFtcGxlIGNvbmZpZ3VyYXRpb24gb2YgR05VIE5hbWUgU2VydmljZSBTd2l0Y2ggZnVuY3Rpb25hbGl0eS4KKyMgSWYgeW91IGhhdmUgdGhlIGBnbGliYy1kb2MnIGFuZCBgaW5mbycgcGFja2FnZXMgaW5zdGFsbGVkLCB0cnk6CisjIGBpbmZvIGxpYmMgIk5hbWUgU2VydmljZSBTd2l0Y2giJyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmaWxlLgorCitwYXNzd2Q6ICAgICAgICAgY29tcGF0Citncm91cDogICAgICAgICAgY29tcGF0CitzaGFkb3c6ICAgICAgICAgY29tcGF0CisKK2hvc3RzOiAgICAgICAgICBmaWxlcyBkbnMKK25ldHdvcmtzOiAgICAgICBmaWxlcworCitwcm90b2NvbHM6ICAgICAgZGIgZmlsZXMKK3NlcnZpY2VzOiAgICAgICBkYiBmaWxlcworZXRoZXJzOiAgICAgICAgIGRiIGZpbGVzCitycGM6ICAgICAgICAgICAgZGIgZmlsZXMKKworbmV0Z3JvdXA6ICAgICAgIG5pcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcHJvZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2MyNjgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUKQEAgLTAsMCArMSwzNiBAQAorIyAvZXRjL3Byb2ZpbGU6IHN5c3RlbS13aWRlIC5wcm9maWxlIGZpbGUgZm9yIHRoZSBCb3VybmUgc2hlbGwgKHNoKDEpKQorIyBhbmQgQm91cm5lIGNvbXBhdGlibGUgc2hlbGxzIChiYXNoKDEpLCBrc2goMSksIGFzaCgxKSwgLi4uKS4KKworUEFUSD0iL3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbiIKK0VESVRPUj0idmkiCQkJIyBuZWVkZWQgZm9yIHBhY2thZ2VzIGxpa2UgY3JvbiwgZ2l0LWNvbW1pdAordGVzdCAteiAiJFRFUk0iICYmIFRFUk09InZ0MTAwIgkjIEJhc2ljIHRlcm1pbmFsIGNhcGFiLiBGb3Igc2NyZWVuIGV0Yy4KKworaWYgWyAhIC1lIC9ldGMvbG9jYWx0aW1lIC1hICEgLWUgL2V0Yy9UWiBdOyB0aGVuCisJVFo9IlVUQyIJCSMgVGltZSBab25lLiBMb29rIGF0IGh0dHA6Ly90aGVvcnkudXdpbm5pcGVnLmNhL2dudS9nbGliYy9saWJjXzMwMy5odG1sIAorCQkJCSMgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyB0byBzZXQgdGhpcyB0byB5b3VyIGxvY2FsIHRpbWV6b25lLgorCWV4cG9ydCBUWgorZmkKKworaWYgWyAiJEhPTUUiID0gIlJPT1RIT01FIiBdOyB0aGVuCisgICBQQVRIPSRQQVRIOi91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW4KK2ZpCitpZiBbICIkUFMxIiBdOyB0aGVuCisjIHdvcmtzIGZvciBiYXNoIGFuZCBhc2ggKG5vIG90aGVyIHNoZWxscyBrbm93biB0byBiZSBpbiB1c2UgaGVyZSkKKyAgIFBTMT0nXHVAXGg6XHdcJCAnCitmaQorCitpZiBbIC1kIC9ldGMvcHJvZmlsZS5kIF07IHRoZW4KKyAgZm9yIGkgaW4gL2V0Yy9wcm9maWxlLmQvKiA7IGRvCisgICAgLiAkaQorICBkb25lCisgIHVuc2V0IGkKK2ZpCisKK2lmIFsgLXggL3Vzci9iaW4vcmVzaXplIF07dGhlbgorICAvdXNyL2Jpbi9yZXNpemUgPi9kZXYvbnVsbAorZmkKKworZXhwb3J0IFBBVEggUFMxIE9QSUVESVIgUVBFRElSIFFURElSIEVESVRPUiBURVJNCisKK3VtYXNrIDAyMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24gYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyNzA4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9yb3RhdGlvbgpAQCAtMCwwICsxIEBACiswClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5iYXNocmMgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hhcmUvZG90LmJhc2hyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmU2MzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5iYXNocmMKQEAgLTAsMCArMSwxNiBAQAorIyB+Ly5iYXNocmM6IGV4ZWN1dGVkIGJ5IGJhc2goMSkgZm9yIG5vbi1sb2dpbiBzaGVsbHMuCisKK2V4cG9ydCBQUzE9J1xoOlx3XCQgJwordW1hc2sgMDIyCisKKyMgWW91IG1heSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiB5b3Ugd2FudCBgbHMnIHRvIGJlIGNvbG9yaXplZDoKKyMgZXhwb3J0IExTX09QVElPTlM9Jy0tY29sb3I9YXV0bycKKyMgZXZhbCBgZGlyY29sb3JzYAorIyBhbGlhcyBscz0nbHMgJExTX09QVElPTlMnCisjIGFsaWFzIGxsPSdscyAkTFNfT1BUSU9OUyAtbCcKKyMgYWxpYXMgbD0nbHMgJExTX09QVElPTlMgLWxBJworIworIyBTb21lIG1vcmUgYWxpYXMgdG8gYXZvaWQgbWFraW5nIG1pc3Rha2VzOgorIyBhbGlhcyBybT0ncm0gLWknCisjIGFsaWFzIGNwPSdjcCAtaScKKyMgYWxpYXMgbXY9J212IC1pJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTc5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hhcmUvZG90LnByb2ZpbGUKQEAgLTAsMCArMSwxMCBAQAorIyB+Ly5wcm9maWxlOiBleGVjdXRlZCBieSBCb3VybmUtY29tcGF0aWJsZSBsb2dpbiBzaGVsbHMuCisKK2lmIFsgLWYgfi8uYmFzaHJjIF07IHRoZW4KKyAgLiB+Ly5iYXNocmMKK2ZpCisKKyMgcGF0aCBzZXQgYnkgL2V0Yy9wcm9maWxlCisjIGV4cG9ydCBQQVRICisKK21lc2cgbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoZWxscyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGVsbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2Mzk4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGVsbHMKQEAgLTAsMCArMSwyIEBACisjIC9ldGMvc2hlbGxzOiB2YWxpZCBsb2dpbiBzaGVsbHMKKy9iaW4vc2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy91c2JkIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3VzYmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy91c2JkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXNfMy4wLjE0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmZTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYgpAQCAtMCwwICsxLDE3OCBAQAorU1VNTUFSWSA9ICJNaXNjZWxsYW5lb3VzIGZpbGVzIGZvciB0aGUgYmFzZSBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgYmFzZS1maWxlcyBwYWNrYWdlIGNyZWF0ZXMgdGhlIGJhc2ljIHN5c3RlbSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBwcm92aWRlcyBhIHNtYWxsIHNldCBvZiBrZXkgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIHN5c3RlbS4iCitTRUNUSU9OID0gImJhc2UiCitQUiA9ICJyODkiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGljZW5zZXMvR1BMLTI7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorIyBSZW1vdmVkIGFsbCBsaWNlbnNlIHJlbGF0ZWQgdGFza3MgaW4gdGhpcyByZWNpcGUgYXMgbGljZW5zZS5iYmNsYXNzIAorIyBub3cgZGVhbHMgd2l0aCB0aGlzLiBJbiBvcmRlciB0byBnZXQgYWNjdXJhdGUgbGljZW5zaW5nIG9uIHRvIHRoZSBpbWFnZToKKyMgU2V0IENPUFlfTElDX01BTklGRVNUIHRvIGp1c3QgY29weSBqdXN0IHRoZSBsaWNlbnNlLm1hbmlmZXN0IHRvIHRoZSBpbWFnZQorIyBGb3IgdGhlIG1hbmlmZXN0IGFuZCB0aGUgbGljZW5zZSB0ZXh0IGZvciBlYWNoIHBhY2thZ2U6CisjIFNldCBDT1BZX0xJQ19NQU5JRkVTVCBhbmQgQ09QWV9MSUNfRElSUworCitTUkNfVVJJID0gImZpbGU6Ly9yb3RhdGlvbiBcCisgICAgICAgICAgIGZpbGU6Ly9uc3N3aXRjaC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL21vdGQgXAorICAgICAgICAgICBmaWxlOi8vaW5wdXRyYyBcCisgICAgICAgICAgIGZpbGU6Ly9ob3N0LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcHJvZmlsZSBcCisgICAgICAgICAgIGZpbGU6Ly9zaGVsbHMgXAorICAgICAgICAgICBmaWxlOi8vZnN0YWIgXAorICAgICAgICAgICBmaWxlOi8vZmlsZXN5c3RlbXMgXAorICAgICAgICAgICBmaWxlOi8vaXNzdWUubmV0IFwKKyAgICAgICAgICAgZmlsZTovL2lzc3VlIFwKKyAgICAgICAgICAgZmlsZTovL3VzYmQgXAorICAgICAgICAgICBmaWxlOi8vc2hhcmUvZG90LmJhc2hyYyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFyZS9kb3QucHJvZmlsZSBcCisgICAgICAgICAgIGZpbGU6Ly9saWNlbnNlcy9HUEwtMiBcCisgICAgICAgICAgICIKK1MgPSAiJHtXT1JLRElSfSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9jZGlyX2FwcGVuZCA9ICIvJHtQfSIKK2RpcnMxNzc3ID0gIi90bXAgJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZS90bXAiCitkaXJzMjc3NSA9ICIiCitkaXJzNzU1ID0gIi9iaW4gL2Jvb3QgL2RldiAke3N5c2NvbmZkaXJ9ICR7c3lzY29uZmRpcn0vZGVmYXVsdCBcCisgICAgICAgICAgICR7c3lzY29uZmRpcn0vc2tlbCAvbGliIC9tbnQgL3Byb2MgJHtST09UX0hPTUV9IC9ydW4gL3NiaW4gXAorICAgICAgICAgICAke3ByZWZpeH0gJHtiaW5kaXJ9ICR7ZG9jZGlyfSAvdXNyL2dhbWVzICR7aW5jbHVkZWRpcn0gXAorICAgICAgICAgICAke2xpYmRpcn0gJHtzYmluZGlyfSAke2RhdGFkaXJ9IFwKKyAgICAgICAgICAgJHtkYXRhZGlyfS9jb21tb24tbGljZW5zZXMgJHtkYXRhZGlyfS9kaWN0ICR7aW5mb2Rpcn0gXAorICAgICAgICAgICAke21hbmRpcn0gJHtkYXRhZGlyfS9taXNjICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2JhY2t1cHMgJHtsb2NhbHN0YXRlZGlyfS9saWIgXAorICAgICAgICAgICAvc3lzICR7bG9jYWxzdGF0ZWRpcn0vbGliL21pc2MgJHtsb2NhbHN0YXRlZGlyfS9zcG9vbCBcCisgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUgXAorICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlL2xvZyBcCisgICAgICAgICAgIC9ob21lICR7cHJlZml4fS9zcmMgJHtsb2NhbHN0YXRlZGlyfS9sb2NhbCBcCisgICAgICAgICAgIC9tZWRpYSIKKworZGlyczc1NS1sc2IgPSAiL3NydiAgXAorICAgICAgICAgICAgICAgJHtwcmVmaXh9L2xvY2FsICR7cHJlZml4fS9sb2NhbC9iaW4gJHtwcmVmaXh9L2xvY2FsL2dhbWVzIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbC9pbmNsdWRlICR7cHJlZml4fS9sb2NhbC9saWIgJHtwcmVmaXh9L2xvY2FsL3NiaW4gXAorICAgICAgICAgICAgICAgJHtwcmVmaXh9L2xvY2FsL3NoYXJlICR7cHJlZml4fS9sb2NhbC9zcmMgXAorICAgICAgICAgICAgICAgJHtwcmVmaXh9L2xpYi9sb2NhbGUiCitkaXJzMjc3NS1sc2IgPSAiL3Zhci9tYWlsIgorCit2b2xhdGlsZXMgPSAibG9nIHRtcCIKK2NvbmZmaWxlcyA9ICIke3N5c2NvbmZkaXJ9L2RlYmlhbl92ZXJzaW9uICR7c3lzY29uZmRpcn0vaG9zdC5jb25mIFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2lucHV0cmMgJHtzeXNjb25mZGlyfS9pc3N1ZSAvJHtzeXNjb25mZGlyfS9pc3N1ZS5uZXQgXAorICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZiAke3N5c2NvbmZkaXJ9L3Byb2ZpbGUgXAorICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGVmYXVsdCIKKworIyBCeSBkZWZhdWx0IHRoZSBob3N0bmFtZSBpcyB0aGUgbWFjaGluZSBuYW1lLiBJZiB0aGUgaG9zdG5hbWUgaXMgdW5zZXQgdGhlbiBhCisjIC9ldGMvaG9zdG5hbWUgZmlsZSBpc24ndCB3cml0dGVuLCBzdWl0YWJsZSBmb3IgZW52aXJvbm1lbnRzIHdpdGggZHluYW1pYworIyBob3N0bmFtZXMuCisjCisjIFRoZSBob3N0bmFtZSBjYW4gYmUgY2hhbmdlZCBvdXRzaWRlIG9mIHRoaXMgcmVjaXBlIGJ5IHVzaW5nCisjIGhvc3RuYW1lX3BuLWJhc2UtZmlsZXMgPSAibXktaG9zdC1uYW1lIi4KK2hvc3RuYW1lID0gIiR7TUFDSElORX0iCisKK0JBU0VGSUxFU0lTU1VFSU5TVEFMTCA/PSAiZG9faW5zdGFsbF9iYXNlZmlsZXNpc3N1ZSIKKworIyBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBiYXNlLWZpbGVzLCAvcnVuIHdhcyBhIHNvZnRsaW5rIHRvIC92YXIvcnVuIGFuZCB0aGUKKyMgZGlyZWN0b3J5IHdhcyBsb2NhdGVkIGluIC92YXIvdm9sYXRsaWUvcnVuLiAgQWxzbywgL3Zhci9sb2NrIHdhcyBhIHNvZnRsaW5rCisjIHRvIC92YXIvdm9sYXRpbGUvbG9jayB3aGljaCBpcyB3aGVyZSB0aGUgcmVhbCBkaXJlY3Rvcnkgd2FzIGxvY2F0ZWQuICBOb3csCisjIC9ydW4gYW5kIC9ydW4vbG9jayBhcmUgdGhlIHJlYWwgZGlyZWN0b3JpZXMuICBJZiB3ZSBhcmUgdXBncmFkaW5nLCB3ZSBtYXkKKyMgbmVlZCB0byByZW1vdmUgdGhlIHN5bWJvbGljIGxpbmtzIGZpcnN0IGJlZm9yZSB3ZSBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzLgorIyBPdGhlcndpc2UgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiB3aWxsIGZhaWwgYW5kIHdlIHdpbGwgaGF2ZSBjaXJjdWxhciBzeW1ib2xpYworIyBsaW5rcy4KKyMgCitwa2dfcHJlaW5zdF8ke1BOfSAoKSB7CisgICAgIyEvYmluL3NoIC1lCisgICAgaWYgWyB4IiREIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgIGlmIFsgLWggIi92YXIvbG9jayIgXTsgdGhlbgorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgIHJtIC1mIC92YXIvbG9jaworICAgICAgICBmaQorCisgICAgICAgIGlmIFsgLWggIi9ydW4iIF07IHRoZW4KKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICBybSAtZiAvcnVuCisgICAgICAgIGZpCisgICAgZmkgICAgIAorfQorCitkb19pbnN0YWxsICgpIHsKKwlmb3IgZCBpbiAke2RpcnM3NTV9OyBkbworCQlpbnN0YWxsIC1tIDA3NTUgLWQgJHtEfSRkCisJZG9uZQorCWZvciBkIGluICR7ZGlyczE3Nzd9OyBkbworCQlpbnN0YWxsIC1tIDE3NzcgLWQgJHtEfSRkCisJZG9uZQorCWZvciBkIGluICR7ZGlyczI3NzV9OyBkbworCQlpbnN0YWxsIC1tIDI3NzUgLWQgJHtEfSRkCisJZG9uZQorCWZvciBkIGluICR7dm9sYXRpbGVzfTsgZG8KKwkJbG4gLXNmIHZvbGF0aWxlLyRkICR7RH0ke2xvY2Fsc3RhdGVkaXJ9LyRkCisJZG9uZQorCisJbG4gLXNuZiAuLi9ydW4gJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCisJbG4gLXNuZiAuLi9ydW4vbG9jayAke0R9JHtsb2NhbHN0YXRlZGlyfS9sb2NrCisKKwkke0JBU0VGSUxFU0lTU1VFSU5TVEFMTH0KKworCXJvdGF0aW9uPWBjYXQgJHtXT1JLRElSfS9yb3RhdGlvbmAKKwlpZiBbICIkcm90YXRpb24iICE9ICIwIiBdOyB0aGVuCisgCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yb3RhdGlvbiAke0R9JHtzeXNjb25mZGlyfS9yb3RhdGlvbgorCWZpCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9mc3RhYiAke0R9JHtzeXNjb25mZGlyfS9mc3RhYgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ZpbGVzeXN0ZW1zICR7RH0ke3N5c2NvbmZkaXJ9L2ZpbGVzeXN0ZW1zCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdXNiZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VzYmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcm9maWxlICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwlzZWQgLWkgJ3MjUk9PVEhPTUUjJHtST09UX0hPTUV9IycgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NoZWxscyAke0R9JHtzeXNjb25mZGlyfS9zaGVsbHMKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zaGFyZS9kb3QucHJvZmlsZSAke0R9JHtzeXNjb25mZGlyfS9za2VsLy5wcm9maWxlCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc2hhcmUvZG90LmJhc2hyYyAke0R9JHtzeXNjb25mZGlyfS9za2VsLy5iYXNocmMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbnB1dHJjICR7RH0ke3N5c2NvbmZkaXJ9L2lucHV0cmMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uc3N3aXRjaC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vaG9zdC5jb25mCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbW90ZCAke0R9JHtzeXNjb25mZGlyfS9tb3RkCisKKwlpZiBbICIvdXNyL2JpbiIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorCQlzZWQgLWkgInMsL3Vzci9iaW4vcmVzaXplLCR7YmluZGlyfS9yZXNpemUsIiAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlCisJZmkKKworCWxuIC1zZiAvcHJvYy9tb3VudHMgJHtEfSR7c3lzY29uZmRpcn0vbXRhYgorfQorCitESVNUUk9fVkVSU0lPTlt2YXJkZXBzZXhjbHVkZV0gKz0gIkRBVEUiCitkb19pbnN0YWxsX2Jhc2VmaWxlc2lzc3VlICgpIHsKKwlpZiBbICIke2hvc3RuYW1lfSIgXTsgdGhlbgorCQllY2hvICR7aG9zdG5hbWV9ID4gJHtEfSR7c3lzY29uZmRpcn0vaG9zdG5hbWUKKwlmaQorCisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9pc3N1ZSogICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgIGlmIFsgLW4gIiR7RElTVFJPX05BTUV9IiBdOyB0aGVuCisJCXByaW50ZiAiJHtESVNUUk9fTkFNRX0gIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZQorCQlwcmludGYgIiR7RElTVFJPX05BTUV9ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUubmV0CisJCWlmIFsgLW4gIiR7RElTVFJPX1ZFUlNJT059IiBdOyB0aGVuCisJCQlwcmludGYgIiR7RElTVFJPX1ZFUlNJT059ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJCXByaW50ZiAiJHtESVNUUk9fVkVSU0lPTn0gIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZS5uZXQKKwkJZmkKKwkJcHJpbnRmICJcXFxuIFxcXGxcbiIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJZWNobyA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZQorCQllY2hvICIlaCIgICAgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUubmV0CisJCWVjaG8gPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUubmV0CisgCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpbnV4c3RkYmFzZSgpIHsKKwlmb3IgZCBpbiAke2RpcnM3NTUtbHNifTsgZG8KKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgLWQgJHtEfSRkCisgICAgICAgIGRvbmUKKworCWZvciBkIGluICR7ZGlyczI3NzUtbHNifTsgZG8KKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDI3NzUgLWQgJHtEfSRkCisgICAgICAgIGRvbmUKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tZG9jICR7UE59ICR7UE59LWRldiAke1BOfS1kYmciCitGSUxFU18ke1BOfSA9ICIvIgorRklMRVNfJHtQTn0tZG9jID0gIiR7ZG9jZGlyfSAke2RhdGFkaXJ9L2NvbW1vbi1saWNlbnNlcyIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vZnN0YWIgJHtAWycnLCAnJHtzeXNjb25mZGlyfS9ob3N0bmFtZSddWyhkLmdldFZhcignaG9zdG5hbWUnLCBUcnVlKSAhPSAnJyldfSAke3N5c2NvbmZkaXJ9L3NoZWxscyIKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9tb3RkICR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZiAke3N5c2NvbmZkaXJ9L3Byb2ZpbGUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjM1N2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvYWRkX3NodXRkb3duLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKKworV2UgbmVlZCB0byBoYXZlIGEgc2h1dGRvd24gZ3JvdXAgdG8gYWxsb3cgdGhlIHNodXRkb3duIGljb24KK3RvIHdvcmsgY29ycmVjdGx5LiBBbnkgdXNlcnMgdGhhdCB3YW50IHRvIHVzZSBzaHV0ZG93biBsaWtlCit0aGUgeHVzZXIgc2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZ3JvdXAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWRdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK0luZGV4OiBiYXNlLXBhc3N3ZC0zLjUuMjYvZ3JvdXAubWFzdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmFzZS1wYXNzd2QtMy41LjI2Lm9yaWcvZ3JvdXAubWFzdGVyCisrKysgYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorQEAgLTM2LDUgKzM2LDYgQEAgc2FzbDoqOjQ1OgorIHBsdWdkZXY6Kjo0NjoKKyBzdGFmZjoqOjUwOgorIGdhbWVzOio6NjA6Cisrc2h1dGRvd246Kjo3MDoKKyB1c2VyczoqOjEwMDoKKyBub2dyb3VwOio6NjU1MzQ6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjMDhiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2Rpc2FibGUtZG9jcy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitEaXNhYmxlIGRvY3VtZW50YXRpb24gZm9yIG5vdyBhcyBpdCB1c2VzIHRvb2xzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCitieSBPRS1Db3JlLiBJdCB1c2VzIHNnbWx0b29scyBhbmQgcG80YS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmFzZS1wYXNzd2QtMy41LjI4Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBiYXNlLXBhc3N3ZC0zLjUuMjgvTWFrZWZpbGUuaW4KK0BAIC0yNSwxMyArMjUsMTAgQEAgZ2VuX2NvbmZpZ3VyZQk9IGNvbmZpZy5jYWNoZSBjb25maWcuc3RhdAorIAkJICBjb25mZGVmaHMuaCBjb25maWcuaCBNYWtlZmlsZQorIAorIGFsbDogdXBkYXRlLXBhc3N3ZAorLQkkKE1BS0UpIC1DIGRvYyBhbGwKKy0JJChNQUtFKSAtQyBtYW4gYWxsCisgCisgaW5zdGFsbDogYWxsCisgCW1rZGlyIC1wICQoREVTVERJUikkKHNiaW5kaXIpCisgCSQoSU5TVEFMTCkgdXBkYXRlLXBhc3N3ZCAkKERFU1RESVIpJChzYmluZGlyKS8KKy0JJChNQUtFKSAtQyBtYW4gaW5zdGFsbAorIAorIHVwZGF0ZS1wYXNzd2QubzogdmVyc2lvbi5oCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9pbnB1dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2lucHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYmJjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9pbnB1dC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitBZGQgYW4gaW5wdXQgZ3JvdXAgZm9yIHRoZSAvZGV2L2lucHV0LyogZGV2aWNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgZ3JvdXAubWFzdGVyIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK0luZGV4OiBiYXNlLXBhc3N3ZC0zLjUuMjYvZ3JvdXAubWFzdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmFzZS1wYXNzd2QtMy41LjI2Lm9yaWcvZ3JvdXAubWFzdGVyCisrKysgYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorQEAgLTEyLDYgKzEyLDcgQEAgdXVjcDoqOjEwOgorIG1hbjoqOjEyOgorIHByb3h5Oio6MTM6Cisga21lbToqOjE1OgorK2lucHV0Oio6MTk6CisgZGlhbG91dDoqOjIwOgorIGZheDoqOjIxOgorIHZvaWNlOio6MjI6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhNjkyMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vYmFzaC5wYXRjaApAQCAtMCwwICsxLDE1IEBACit1c2UgL2Jpbi9zaCBpbnN0ZWFkIG9mIC9iaW4vYmFzaCwgc2luY2UgdGhlIGxhdHRlciBtYXkgbm90IGJlIGluY2x1ZGVkIGluCitzb21lIGltYWdlcyBzdWNoIGFzIG1pbmltYWwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXJ+bm9iYXNoCisrKysgYmFzZS1wYXNzd2QvcGFzc3dkLm1hc3RlcgorQEAgLTEsNCArMSw0IEBACistcm9vdDoqOjA6MDpyb290Oi9yb290Oi9iaW4vYmFzaAorK3Jvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL3NoCisgZGFlbW9uOio6MToxOmRhZW1vbjovdXNyL3NiaW46L2Jpbi9zaAorIGJpbjoqOjI6MjpiaW46L2JpbjovYmluL3NoCisgc3lzOio6MzozOnN5czovZGV2Oi9iaW4vc2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vc2hhZG93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9zaGFkb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3YmY3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vc2hhZG93LnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK3JlbW92ZSAiKiIgZm9yIHJvb3Qgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIC9ldGMvc2hhZG93IHNvIGZhci4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXJ+bm9iYXNoCisrKysgYmFzZS1wYXNzd2QvcGFzc3dkLm1hc3RlcgorQEAgLTEsNCArMSw0IEBACistcm9vdDoqOjA6MDpyb290Oi9yb290Oi9iaW4vc2gKKytyb290OjowOjA6cm9vdDovcm9vdDovYmluL3NoCisgZGFlbW9uOio6MToxOmRhZW1vbjovdXNyL3NiaW46L2Jpbi9zaAorIGJpbjoqOjI6MjpiaW46L2JpbjovYmluL3NoCisgc3lzOio6MzozOnN5czovZGV2Oi9iaW4vc2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzliZDgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2RfMy41LjI5LmJiCkBAIC0wLDAgKzEsMTA0IEBACitTVU1NQVJZID0gIkJhc2Ugc3lzdGVtIG1hc3RlciBwYXNzd29yZC9ncm91cCBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBtYXN0ZXIgY29waWVzIG9mIHRoZSB1c2VyIGRhdGFiYXNlIGZpbGVzICgvZXRjL3Bhc3N3ZCBhbmQgL2V0Yy9ncm91cCkuICBUaGUgdXBkYXRlLXBhc3N3ZCB0b29sIGlzIGFsc28gcHJvdmlkZWQgdG8ga2VlcCB0aGUgc3lzdGVtIGRhdGFiYXNlcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGVzZSBtYXN0ZXIgZmlsZXMuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiVmVyc2lvbiAzLjUuMzggcmVxdWlyZXMgY2RlYmNvbmYgZm9yIHVwZGF0ZS1wYXNzd2QgdXRpbGl0eSIKKworU1JDX1VSSSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvZGViaWFuLythcmNoaXZlL3ByaW1hcnkvK2ZpbGVzLyR7QlBOfV8ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkX3NodXRkb3duLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vYmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub3NoYWRvdy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbnB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWRvY3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiZWNjYWM0ODA4M2ZlOGFlNTA0OGFjZDA2MmU1NDIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYwYjY2Mzg4YjJjOGU0OWMxNTY5MjQzOWQyYmVlNjNiY2RkNGJiYmY3YTc4MmM3ZjY0YWNjYzU1OTg2YjZhMzYiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImJhc2VfcGFzc3dkX3NzdGF0ZV9wb3N0aW5zdCIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtcCAtbSA3NTUgJHtCfS91cGRhdGUtcGFzc3dkICR7RH0ke3NiaW5kaXJ9LworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke21hbmRpcn0vbWFuOCAke0R9JHttYW5kaXJ9L3BsL21hbjgKKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L21hbi91cGRhdGUtcGFzc3dkLjggJHtEfSR7bWFuZGlyfS9tYW44LworCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vbWFuL3VwZGF0ZS1wYXNzd2QucGwuOCBcCisJCSR7RH0ke21hbmRpcn0vcGwvbWFuOC91cGRhdGUtcGFzc3dkLjgKKwlnemlwIC05ICR7RH0ke21hbmRpcn0vbWFuOC8qICR7RH0ke21hbmRpcn0vcGwvbWFuOC8qCisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QKKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtcCAtbSA2NDQgJHtTfS9wYXNzd2QubWFzdGVyICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkLworCXNlZCAtaSAncyM6L3Jvb3Q6Izoke1JPT1RfSE9NRX06IycgJHtEfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QvcGFzc3dkLm1hc3RlcgorCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1wIC1tIDY0NCAke1N9L2dyb3VwLm1hc3RlciAke0R9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZC8KKworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RvY2Rpcn0vJHtCUE59CisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9kZWJpYW4vY2hhbmdlbG9nICR7RH0ke2RvY2Rpcn0vJHtCUE59LworCWd6aXAgLTkgJHtEfSR7ZG9jZGlyfS8ke0JQTn0vKgorCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vUkVBRE1FICR7RH0ke2RvY2Rpcn0vJHtCUE59LworCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vZGViaWFuL2NvcHlyaWdodCAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KK30KKworYmFzZV9wYXNzd2Rfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgU3RhZ2luZyBkb2VzIG5vdCBjb3B5ICR7c3lzY29uZmRpcn0gZmlsZXMgaW50byB0aGUKKwkJIyB0YXJnZXQgc3lzcm9vdCwgc28gd2UgbmVlZCB0byBkbyBzbyBtYW51YWxseS4gV2UKKwkJIyBwdXQgdGhlc2UgZmlsZXMgaW4gdGhlIHRhcmdldCBzeXNyb290IHNvIHRoZXkgY2FuCisJCSMgYmUgdXNlZCBieSByZWNpcGVzIHdoaWNoIHVzZSBjdXN0b20gdXNlci9ncm91cAorCQkjIHBlcm1pc3Npb25zLgorCQkjIEluc3RhbGwgcGFzc3dkLm1hc3RlciBhbmQgZ3JvdXAubWFzdGVyIHRvIHN5c2NvbmZkaXIgYW5kIG12CisJCSMgdGhlbSB0byBtYWtlIHN1cmUgdGhleSBhcmUgYXRvbWljYWxseSBpbnN0YWxsLgorCQlpbnN0YWxsIC1kIC1tIDc1NSAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3N5c2NvbmZkaXJ9CisJCWZvciBpIGluIHBhc3N3ZCBncm91cDsgZG8KKwkJCWluc3RhbGwgLXAgLW0gNjQ0ICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QvJGkubWFzdGVyIFwKKwkJCQkke1NUQUdJTkdfRElSX1RBUkdFVH0ke3N5c2NvbmZkaXJ9LworCQkJbXYgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfS8kaS5tYXN0ZXIgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfS8kaQorCQlkb25lCisJZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgIyBBZGQgaW4gdGhlIHByZWluc3QgZnVuY3Rpb24gZm9yICR7UE59CisgICAgIyBXZSBoYXZlIHRvIGRvIHRoaXMgaGVyZSBhcyBwcmlvciB0byB0aGlzLCBwYXNzd2QvZ3JvdXAubWFzdGVyCisgICAgIyB3b3VsZCBiZSB1bmF2YWlsYWJsZS4gV2UgbmVlZCB0byBjcmVhdGUgdGhlc2UgZmlsZXMgYXQgcHJlaW5zdAorICAgICMgdGltZSBiZWZvcmUgdGhlIGZpbGVzIGZyb20gdGhlIHBhY2thZ2UgbWF5IGJlIGF2YWlsYWJsZSwgaGVuY2UKKyAgICAjIHN0b3JpbmcgdGhlIGRhdGEgZnJvbSB0aGUgZmlsZXMgaW4gdGhlIHByZWluc3QgZGlyZWN0bHkuCisKKyAgICBmID0gb3BlbihkLmV4cGFuZCgiJHtTVEFHSU5HX0RBVEFESVJ9L2Jhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIiKSwgJ3InKQorICAgIHBhc3N3ZCA9ICIiLmpvaW4oZi5yZWFkbGluZXMoKSkKKyAgICBmLmNsb3NlKCkKKyAgICBmID0gb3BlbihkLmV4cGFuZCgiJHtTVEFHSU5HX0RBVEFESVJ9L2Jhc2UtcGFzc3dkL2dyb3VwLm1hc3RlciIpLCAncicpCisgICAgZ3JvdXAgPSAiIi5qb2luKGYucmVhZGxpbmVzKCkpCisgICAgZi5jbG9zZSgpCisKKyAgICBwcmVpbnN0ID0gIiIiIyEvYmluL3NoCitta2RpciAtcCAkRCR7c3lzY29uZmRpcn0KK2lmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vcGFzc3dkIF07IHRoZW4KK1x0Y2F0IDw8ICdFT0YnID4gJEQke3N5c2NvbmZkaXJ9L3Bhc3N3ZAorIiIiICsgcGFzc3dkICsgIiIiRU9GCitmaQoraWYgWyAhIC1lICREJHtzeXNjb25mZGlyfS9ncm91cCBdOyB0aGVuCitcdGNhdCA8PCAnRU9GJyA+ICREJHtzeXNjb25mZGlyfS9ncm91cAorIiIiICsgZ3JvdXAgKyAiIiJFT0YKK2ZpCisiIiIKKyAgICBkLnNldFZhcigncGtnX3ByZWluc3RfJHtQTn0nLCBwcmVpbnN0KQorfQorCithZGR0YXNrIGRvX3BhY2thZ2UgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tdXBkYXRlIgorRklMRVNfJHtQTn0tdXBkYXRlID0gIiR7c2JpbmRpcn0vKiAke2RhdGFkaXJ9LyR7UE59IgorCitwa2dfcG9zdGluc3RfJHtQTn0tdXBkYXRlICgpIHsKKyMhL2Jpbi9zaAoraWYgWyAtbiAiJEQiIF07IHRoZW4KKwlleGl0IDAKK2ZpCiske3NiaW5kaXJ9L3VwZGF0ZS1wYXNzd2QKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOGY5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jCkBAIC0wLDAgKzEsNDE2IEBACitTVU1NQVJZID0gIlRpbnkgdmVyc2lvbnMgb2YgbWFueSBjb21tb24gVU5JWCB1dGlsaXRpZXMgaW4gYSBzaW5nbGUgc21hbGwgZXhlY3V0YWJsZSIKK0RFU0NSSVBUSU9OID0gIkJ1c3lCb3ggY29tYmluZXMgdGlueSB2ZXJzaW9ucyBvZiBtYW55IGNvbW1vbiBVTklYIHV0aWxpdGllcyBpbnRvIGEgc2luZ2xlIHNtYWxsIGV4ZWN1dGFibGUuIEl0IHByb3ZpZGVzIG1pbmltYWxpc3QgcmVwbGFjZW1lbnRzIGZvciBtb3N0IG9mIHRoZSB1dGlsaXRpZXMgeW91IHVzdWFsbHkgZmluZCBpbiBHTlUgZmlsZXV0aWxzLCBzaGVsbHV0aWxzLCBldGMuIFRoZSB1dGlsaXRpZXMgaW4gQnVzeUJveCBnZW5lcmFsbHkgaGF2ZSBmZXdlciBvcHRpb25zIHRoYW4gdGhlaXIgZnVsbC1mZWF0dXJlZCBHTlUgY291c2luczsgaG93ZXZlciwgdGhlIG9wdGlvbnMgdGhhdCBhcmUgaW5jbHVkZWQgcHJvdmlkZSB0aGUgZXhwZWN0ZWQgZnVuY3Rpb25hbGl0eSBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIHRoZWlyIEdOVSBjb3VudGVycGFydHMuIEJ1c3lCb3ggcHJvdmlkZXMgYSBmYWlybHkgY29tcGxldGUgUE9TSVggZW52aXJvbm1lbnQgZm9yIGFueSBzbWFsbCBvciBlbWJlZGRlZCBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5idXN5Ym94Lm5ldCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmJ1c3lib3gubmV0LyIKKworREVQRU5EUyArPSAia2Vybi10b29scy1uYXRpdmUiCisKKyMgYnppcDIgYXBwbGV0IGluIGJ1c3lib3ggaXMgYmFzZWQgb24gbGlnaHRseS1tb2RpZmllZCBiemlwMiBzb3VyY2UKKyMgdGhlIEdQTCBpcyB2ZXJzaW9uIDIgb25seQorTElDRU5TRSA9ICJHUEx2MiAmIGJ6aXAyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGUxMGRlNDg2NDJhYjc0MzE4ZTg5M2E2MTEwNWFmYmIiCisKK1NFQ1RJT04gPSAiYmFzZSIKKworIyBXaGV0aGVyIHRvIHNwbGl0IHRoZSBzdWlkIGFwcHMgaW50byBhIHNlcGVyYXRlIGJpbmFyeQorQlVTWUJPWF9TUExJVF9TVUlEID89ICIxIgorCitleHBvcnQgRVhUUkFfQ0ZMQUdTID0gIiR7Q0ZMQUdTfSIKK2V4cG9ydCBFWFRSQV9MREZMQUdTID0gIiR7TERGTEFHU30iCitleHBvcnQgRVhUUkFfT0VNQUtFICs9ICInTEQ9JHtDQ0xEfSciCisKK1BBQ0tBR0VTID0rICIke1BOfS1odHRwZCAke1BOfS11ZGhjcGQgJHtQTn0tdWRoY3BjICR7UE59LXN5c2xvZyAke1BOfS1tZGV2ICR7UE59LWh3Y2xvY2siCisKK0ZJTEVTXyR7UE59LWh0dHBkID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2J1c3lib3gtaHR0cGQgL3Nydi93d3ciCitGSUxFU18ke1BOfS1zeXNsb2cgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nKiAke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYqICR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYqICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzbG9nLnNlcnZpY2UgJHtzeXNjb25mZGlyfS9kZWZhdWx0L2J1c3lib3gtc3lzbG9nIgorRklMRVNfJHtQTn0tbWRldiA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9tZGV2ICR7c3lzY29uZmRpcn0vbWRldi5jb25mICR7c3lzY29uZmRpcn0vbWRldi8qIgorRklMRVNfJHtQTn0tdWRoY3BkID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2J1c3lib3gtdWRoY3BkIgorRklMRVNfJHtQTn0tdWRoY3BjID0gIiR7c3lzY29uZmRpcn0vdWRoY3BjLmQgJHtkYXRhZGlyfS91ZGhjcGMiCitGSUxFU18ke1BOfS1od2Nsb2NrID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2h3Y2xvY2suc2giCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0taHR0cGQgJHtQTn0tc3lzbG9nICR7UE59LXVkaGNwZCAke1BOfS1tZGV2ICR7UE59LWh3Y2xvY2siCisKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1odHRwZCA9ICJidXN5Ym94LWh0dHBkIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LWh3Y2xvY2sgPSAiaHdjbG9jay5zaCIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1tZGV2ID0gIm1kZXYiCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfS1tZGV2ID0gInN0YXJ0IDAzIFMgLiIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1zeXNsb2cgPSAic3lzbG9nIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LXVkaGNwZCA9ICJidXN5Ym94LXVkaGNwZCIgCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tc3lzbG9nIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXN5c2xvZyA9ICJidXN5Ym94LXN5c2xvZy5zZXJ2aWNlIgorCitDT05GRklMRVNfJHtQTn0tc3lzbG9nID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZi4ke0JQTn0iCitDT05GRklMRVNfJHtQTn0tbWRldiA9ICIke3N5c2NvbmZkaXJ9L21kZXYuY29uZiIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tc3lzbG9nICR7UE59LXVkaGNwYyIKKworaW5oZXJpdCBjbWwxIHN5c3RlbWQgdXBkYXRlLXJjLmQgcHRlc3QKKworIyBpbnRlcm5hbCBoZWxwZXIKK2RlZiBidXN5Ym94X2NmZyhmZWF0dXJlLCB0b2tlbnMsIGNuZiwgcmVtKToKKwlpZiB0eXBlKHRva2VucykgPT0gdHlwZSgiIik6CisJCXRva2VucyA9IFt0b2tlbnNdCisJcmVtLmV4dGVuZChbJy9eWyMgXSonICsgdG9rZW4gKyAnWyA9XS9kJyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKwlpZiBmZWF0dXJlOgorCQljbmYuZXh0ZW5kKFt0b2tlbiArICc9eScgZm9yIHRva2VuIGluIHRva2Vuc10pCisJZWxzZToKKwkJY25mLmV4dGVuZChbJyMgJyArIHRva2VuICsgJyBpcyBub3Qgc2V0JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKworIyBNYXAgZGlzdHJvIGZlYXR1cmVzIHRvIGNvbmZpZyBzZXR0aW5ncworZGVmIGZlYXR1cmVzX3RvX2J1c3lib3hfc2V0dGluZ3MoZCk6CisJY25mLCByZW0gPSAoW10sIFtdKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19GRUFUVVJFX0lQVjYnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19MRlMnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19GRElTS19TVVBQT1JUX0xBUkdFX0RJU0tTJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdubHMnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfTE9DQUxFX1NVUFBPUlQnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjQnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUFY0JywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNicsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19SRktJTEwnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19SRktJTEwnLCBjbmYsIHJlbSkKKwlyZXR1cm4gIlxuIi5qb2luKGNuZiksICJcbiIuam9pbihyZW0pCisKKyMgWCwgWSA9ICR7QGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKX0KKyMgdW5mb3J0dW5hdGVseSBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIGJpdGJha2UsIHdvcmthcm91bmQ6CitkZWYgZmVhdHVyZXNfdG9fYnVzeWJveF9jb25mKGQpOgorCWNuZiwgcmVtID0gZmVhdHVyZXNfdG9fYnVzeWJveF9zZXR0aW5ncyhkKQorCXJldHVybiBjbmYKK2RlZiBmZWF0dXJlc190b19idXN5Ym94X2RlbChkKToKKwljbmYsIHJlbSA9IGZlYXR1cmVzX3RvX2J1c3lib3hfc2V0dGluZ3MoZCkKKwlyZXR1cm4gcmVtCisKK2NvbmZpZ21hbmdsZSA9ICcvQ1JPU1NfQ09NUElMRVJfUFJFRklYL2Q7IFwKKwkJL0NPTkZJR19FWFRSQV9DRkxBR1MvZDsgXAorCQknCitPRV9GRUFUVVJFUyA6PSAiJHtAZmVhdHVyZXNfdG9fYnVzeWJveF9jb25mKGQpfSIKK09FX0RFTCAgICAgIDo9ICIke0BmZWF0dXJlc190b19idXN5Ym94X2RlbChkKX0iCitET19JUHY0IDo9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjQnLCAxLCAwLCBkKX0iCitET19JUHY2IDo9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAxLCAwLCBkKX0iCisKK3B5dGhvbiAoKSB7CisgIGlmICIke09FX0RFTH0iOgorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywgIiR7T0VfREVMfSIgKyAiXG4iKQorICBpZiAiJHtPRV9GRUFUVVJFU30iOgorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgRElTVFJPIEZFQVRVUkVTJC9hXFxcbiVzXG5cbiIgJQorICAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKChkLmV4cGFuZCgiJHtPRV9GRUFUVVJFU30iKS5zcGxpdCgiXG4iKSkpKSkKKyAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAiL14jIyMgQ1JPU1MkL2FcXFxuJXNcbiIgJQorICAgICAgICAgICAgICAgICAgKCJcXG4iLmpvaW4oWyJDT05GSUdfQ1JPU1NfQ09NUElMRVJfUFJFRklYPVwiJHtUQVJHRVRfUFJFRklYfVwiIiwKKwkJCSAgICAgICAiQ09ORklHX0VYVFJBX0NGTEFHUz1cIiR7Q0ZMQUdTfVwiIFwiJHtIT1NUX0NDX0FSQ0h9XCIiCisgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICAgICAgKSkKK30KKworZG9fcHJlcGFyZV9jb25maWcgKCkgeworCXNlZCAtZSAncyNAREFUQURJUkAjJHtkYXRhZGlyfSNnJyBcCisJCTwgJHtXT1JLRElSfS9kZWZjb25maWcgPiAke1N9Ly5jb25maWcKKwlzZWQgLWkgLWUgJy9DT05GSUdfU1RBVElDL2QnIC5jb25maWcKKwllY2hvICIjIENPTkZJR19TVEFUSUMgaXMgbm90IHNldCIgPj4gLmNvbmZpZworCWZvciBpIGluICdDUk9TUycgJ0RJU1RSTyBGRUFUVVJFUyc7IGRvIGVjaG8gIiMjIyAkaSI7IGRvbmUgPj4gXAorCQkke1N9Ly5jb25maWcKKwlzZWQgLWkgLWUgJyR7Y29uZmlnbWFuZ2xlfScgJHtTfS8uY29uZmlnCisJaWYgdGVzdCAke0RPX0lQdjR9IC1lcSAwICYmIHRlc3QgJHtET19JUHY2fSAtZXEgMDsgdGhlbgorCSAgIyBkaXNhYmxlIG5ldHdvcmtpbmcgYXBwbGV0cworCSAgbXYgJHtTfS8uY29uZmlnICR7U30vLmNvbmZpZy5vZS10bXAKKwkgIGF3ayAnQkVHSU57bmV0PTB9CisJICAvXiMgTmV0d29ya2luZyBVdGlsaXRpZXMve25ldD0xfQorCSAgL14jJC97aWYobmV0KXtuZXQ9bmV0KzF9fQorCSAge2lmKG5ldD09MiYmJDAgIX4gL14jLyYmJDEpe3ByaW50KCIjICIkMSIgaXMgbm90IHNldCIpfWVsc2V7cHJpbnR9fScgXAorCQkgICR7U30vLmNvbmZpZy5vZS10bXAgPiAke1N9Ly5jb25maWcKKwlmaQorCXNlZCAtaSAncy9DT05GSUdfSUZVUERPV05fVURIQ1BDX0NNRF9PUFRJT05TPSItUiAtbiIvQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLWIiLycgJHtTfS8uY29uZmlnCit9CisKKyMgcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNyYyB1cmkgdGhhdCBhcmUgLmNmZyBmaWxlcworZGVmIGZpbmRfY2ZncyhkKToKKyAgICBzb3VyY2VzPXNyY19wYXRjaGVzKGQsIFRydWUpCisgICAgc291cmNlc19saXN0PVtdCisgICAgZm9yIHMgaW4gc291cmNlczoKKyAgICAgICAgaWYgcy5lbmRzd2l0aCgnLmNmZycpOgorICAgICAgICAgICAgc291cmNlc19saXN0LmFwcGVuZChzKQorCisgICAgcmV0dXJuIHNvdXJjZXNfbGlzdAorCitkb19jb25maWd1cmUgKCkgeworCWRvX3ByZXBhcmVfY29uZmlnCisJbWVyZ2VfY29uZmlnLnNoIC1tIC5jb25maWcgJHtAIiAiLmpvaW4oZmluZF9jZmdzKGQpKX0KKwljbWwxX2RvX2NvbmZpZ3VyZQorfQorCitkb19jb21waWxlKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTCisJaWYgWyAiJHtCVVNZQk9YX1NQTElUX1NVSUR9IiA9ICIxIiAtYSB4YGdyZXAgIkNPTkZJR19GRUFUVVJFX0lORElWSURVQUw9eSIgLmNvbmZpZ2AgPSB4IF07IHRoZW4KKwkjIHNwbGl0IHRoZSAuY29uZmlnIGludG8gdHdvIHBhcnRzLCBhbmQgbWFrZSB0d28gYnVzeWJveCBiaW5hcmllcworCQljcCAuY29uZmlnIC5jb25maWcub3JpZworCQlvZV9ydW5tYWtlIGJ1c3lib3guY2ZnLnN1aWQKKwkJb2VfcnVubWFrZSBidXN5Ym94LmNmZy5ub3N1aWQKKwkJZm9yIGkgaW4gYGNhdCBidXN5Ym94LmNmZy5zdWlkIGJ1c3lib3guY2ZnLm5vc3VpZGA7IGRvCisJCQllY2hvICIjICRpIGlzIG5vdCBzZXQiID4+IC5jb25maWcuZGlzYWJsZS5hcHBzCisJCWRvbmUKKwkJbWVyZ2VfY29uZmlnLnNoIC1tIC5jb25maWcub3JpZyAuY29uZmlnLmRpc2FibGUuYXBwcworCQljcCAuY29uZmlnIC5jb25maWcubm9uYXBwcworCQlmb3IgcyBpbiBzdWlkIG5vc3VpZDsgZG8KKwkJCWNhdCBidXN5Ym94LmNmZy4kcyB8IHdoaWxlIHJlYWQgaXRlbTsgZG8KKwkJCQlncmVwIC13ICIkaXRlbSIgLmNvbmZpZy5vcmlnCisJCQlkb25lID4gLmNvbmZpZy5hcHAuJHMKKwkJCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnLm5vbmFwcHMgLmNvbmZpZy5hcHAuJHMKKwkJCW9lX3J1bm1ha2UgYnVzeWJveF91bnN0cmlwcGVkCisJCQltdiBidXN5Ym94X3Vuc3RyaXBwZWQgYnVzeWJveC4kcworCQkJb2VfcnVubWFrZSBidXN5Ym94LmxpbmtzCisJCQltdiBidXN5Ym94LmxpbmtzIGJ1c3lib3gubGlua3MuJHMKKwkJZG9uZQorCQkjIGNvcHkgLmNvbmZpZy5vcmlnIGJhY2sgdG8gLmNvbmZpZywgYmVjYXVzZSB0aGUgaW5zdGFsbCBwcm9jZXNzIG1heSBjaGVjayB0aGlzIGZpbGUKKwkJY3AgLmNvbmZpZy5vcmlnIC5jb25maWcKKwkJIyBjbGVhbnVwCisJCXJtIC5jb25maWcub3JpZyAuY29uZmlnLmFwcC5zdWlkIC5jb25maWcuYXBwLm5vc3VpZCAuY29uZmlnLmRpc2FibGUuYXBwcyAuY29uZmlnLm5vbmFwcHMKKwllbHNlCisJCW9lX3J1bm1ha2UgYnVzeWJveF91bnN0cmlwcGVkCisJCWNwIGJ1c3lib3hfdW5zdHJpcHBlZCBidXN5Ym94CisJCW9lX3J1bm1ha2UgYnVzeWJveC5saW5rcworCWZpCit9CisKK2RvX2luc3RhbGwgKCkgeworCWlmIFsgIiR7cHJlZml4fSIgIT0gIi91c3IiIF07IHRoZW4KKwkJc2VkIC1pICJzOl4vdXNyLzoke3ByZWZpeH0vOiIgYnVzeWJveC5saW5rcyoKKwlmaQorCWlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIi9zYmluIiBdOyB0aGVuCisJCXNlZCAtaSAiczpeL3NiaW4vOiR7YmFzZV9zYmluZGlyfS86IiBidXN5Ym94LmxpbmtzKgorCWZpCisJaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIvYmluIiBdOyB0aGVuCisJCXNlZCAtaSAiczpeL2Jpbi86JHtiYXNlX2JpbmRpcn0vOiIgYnVzeWJveC5saW5rcyoKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKworCWlmICEgZ3JlcCAtcSAiQ09ORklHX0ZFQVRVUkVfSU5ESVZJRFVBTD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJIyBJbnN0YWxsIC9iaW4vYnVzeWJveCwgYW5kIHRoZSAvYmluL3NoIGxpbmsgc28gdGhlIHBvc3RpbnN0IHNjcmlwdAorCQkjIGNhbiBydW4uIExldCB1cGRhdGUtYWx0ZXJuYXRpdmVzIGhhbmRsZSB0aGUgcmVzdC4KKwkJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJaWYgWyAiJHtCVVNZQk9YX1NQTElUX1NVSUR9IiA9ICIxIiBdOyB0aGVuCisJCQlpbnN0YWxsIC1tIDQ3NTUgJHtCfS9idXN5Ym94LnN1aWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQlpbnN0YWxsIC1tIDA3NTUgJHtCfS9idXN5Ym94Lm5vc3VpZCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJCWluc3RhbGwgLW0gMDY0NCAke1N9L2J1c3lib3gubGlua3Muc3VpZCAke0R9JHtzeXNjb25mZGlyfQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYnVzeWJveC5saW5rcy5ub3N1aWQgJHtEfSR7c3lzY29uZmRpcn0KKwkJCWlmIGdyZXAgLXEgIkNPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJCQlsbiAtc2YgYnVzeWJveC5ub3N1aWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NoCisJCQlmaQorCQkJIyBLZWVwIGEgZGVmYXVsdCBidXN5Ym94IGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gaW52b2tlIGJ1c3lib3ggZGlyZWN0bHkuCisJCQkjIFRoaXMgaXMgYWxzbyB1c2VmdWwgZm9yIHRoZSBvbiBkZXZpY2UgdXBncmFkZS4gQmVjYXVzZSB3ZSB3YW50CisJCQkjIHRvIHVzZSB0aGUgYnVzeWJveCBjb21tYW5kIGluIHBvc3RpbnN0LgorCQkJbG4gLXNmIGJ1c3lib3gubm9zdWlkICR7RH0ke2Jhc2VfYmluZGlyfS9idXN5Ym94CisJCWVsc2UKKwkJCWlmIGdyZXAgLXEgIkNPTkZJR19GRUFUVVJFX1NVSUQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJaW5zdGFsbCAtbSA0NzU1ICR7Qn0vYnVzeWJveCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJCWVsc2UKKwkJCQlpbnN0YWxsIC1tIDA3NTUgJHtCfS9idXN5Ym94ICR7RH0ke2Jhc2VfYmluZGlyfQorCQkJZmkKKwkJCWluc3RhbGwgLW0gMDY0NCAke1N9L2J1c3lib3gubGlua3MgJHtEfSR7c3lzY29uZmRpcn0KKwkJCWlmIGdyZXAgLXEgIkNPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJCQlsbiAtc2YgYnVzeWJveCAke0R9JHtiYXNlX2JpbmRpcn0vc2gKKwkJCWZpCisJCQkjIFdlIG1ha2UgdGhpcyBzeW1saW5rIGhlcmUgdG8gZWxpbWluYXRlIHRoZSBlcnJvciB3aGVuIHVwZ3JhZGluZyB0b2dldGhlcgorCQkJIyB3aXRoIGJ1c3lib3gtc3lzbG9nLiBXaXRob3V0IHRoaXMgc3ltbGluaywgdGhlIG9wa2cgbWF5IHRoaW5rIG9mIHRoZQorCQkJIyBidXN5Ym94Lm5vc3VpZCBhcyBvYnNvbGV0ZSBhbmQgcmVtb3ZlIGl0LCByZXN1bHRpbmcgaW4gZGVhZCBsaW5rcyBsaWtlCisJCQkjIC9iaW4vc2VkIC0+IC9iaW4vYnVzeWJveC5ub3N1aWQuIFRoaXMgd2lsbCBtYWtlIHVwZ3JhZGluZyBidXN5Ym94LXN5c2xvZyBmYWlsLgorCQkJIyBUaGlzIHN5bWxpbmsgd2lsbCBiZSBzYWZlbHkgZGVsZXRlZCBpbiBwb3N0aW5zdCwgdGh1cyBubyBuZWdhdGl2ZSBlZmZlY3QuCisJCQlsbiAtc2YgYnVzeWJveCAke0R9JHtiYXNlX2JpbmRpcn0vYnVzeWJveC5ub3N1aWQKKwkJZmkKKwllbHNlCisJCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwkJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9ICR7RH0ke2JpbmRpcn0gJHtEfSR7c2JpbmRpcn0KKwkJY2F0IGJ1c3lib3gubGlua3MgfCB3aGlsZSByZWFkIEZJTEU7IGRvCisJCQlOQU1FPWBiYXNlbmFtZSAiJEZJTEUiYAorCQkJaW5zdGFsbCAtbSAwNzU1ICIwX2xpYi8kTkFNRSIgIiR7RH0kRklMRS4ke0JQTn0iCisJCWRvbmUKKwkJIyBhZGQgc3VpZCBiaXQgd2hlcmUgbmVlZGVkCisJCWZvciBpIGluIGBncmVwIC1FICJBUFBMRVQuKkJCX1NVSURfKChNQVlCRXxSRVFVSVJFKSkiIGluY2x1ZGUvYXBwbGV0cy5oIHwgZ3JlcCAtdiBfQkJfU1VJRF9EUk9QIHwgY3V0IC1mIDMgLWQgJygnIHwgY3V0IC1mIDEgLWQgJywnYDsgZG8KKwkJCWZpbmQgJHtEfSAtbmFtZSAkaS4ke0JQTn0gLWV4ZWMgY2htb2QgYStzIHt9IFw7CisJCWRvbmUKKwkJaW5zdGFsbCAtbSAwNzU1IDBfbGliL2xpYmJ1c3lib3guc28uJHtQVn0gJHtEfSR7bGliZGlyfS9saWJidXN5Ym94LnNvLiR7UFZ9CisJCWxuIC1zZiBzaC4ke0JQTn0gJHtEfSR7YmFzZV9iaW5kaXJ9L3NoCisJCWxuIC1zZiBsbi4ke0JQTn0gJHtEfSR7YmFzZV9iaW5kaXJ9L2xuCisJCWxuIC1zZiB0ZXN0LiR7QlBOfSAke0R9JHtiaW5kaXJ9L3Rlc3QKKwkJaWYgWyAtZiAke0R9L2xpbnV4cmMuJHtCUE59IF07IHRoZW4KKwkJCW12ICR7RH0vbGludXhyYy4ke0JQTn0gJHtEfS9saW51eHJjCisJCWZpCisJCWluc3RhbGwgLW0gMDY0NCAke1N9L2J1c3lib3gubGlua3MgJHtEfSR7c3lzY29uZmRpcn0KKwlmaQorCisJaWYgZ3JlcCAtcSAiQ09ORklHX1NZU0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3N5c2xvZyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nLiR7QlBOfQorCQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3N5c2xvZy1zdGFydHVwLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZi4ke0JQTn0KKwkJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9zeXNsb2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZi4ke0JQTn0KKwlmaQorCWlmIGdyZXAgIkNPTkZJR19DUk9ORD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYnVzeWJveC1jcm9uICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlmaQorCWlmIGdyZXAgIkNPTkZJR19IVFRQRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYnVzeWJveC1odHRwZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJCWluc3RhbGwgLWQgJHtEfS9zcnYvd3d3CisJZmkKKwlpZiBncmVwICJDT05GSUdfVURIQ1BEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9idXN5Ym94LXVkaGNwZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJZmkKKwlpZiBncmVwICJDT05GSUdfSFdDTE9DSz15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaHdjbG9jay5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJZmkKKwlpZiBncmVwICJDT05GSUdfVURIQ1BDPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vdWRoY3BjCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc2ltcGxlLnNjcmlwdCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZC81MGRlZmF1bHQKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVmYXVsdC5zY3JpcHQgJHtEfSR7ZGF0YWRpcn0vdWRoY3BjL2RlZmF1bHQuc2NyaXB0CisJZmkKKwlpZiBncmVwICJDT05GSUdfSU5FVEQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luZXRkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9pbmV0ZC4ke0JQTn0KKwkJc2VkIC1pICJzOi91c3Ivc2Jpbi86JHtzYmluZGlyfS86IiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvaW5ldGQuJHtCUE59CisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2luZXRkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vCisJZmkKKyAgICAgICAgaWYgZ3JlcCAiQ09ORklHX01ERVY9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9tZGV2CisgICAgICAgICAgICAgICBpZiBncmVwICJDT05GSUdfRkVBVFVSRV9NREVWX0NPTkY9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vbWRldi5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L21kZXYuY29uZgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21kZXYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZmluZC10b3VjaHNjcmVlbi5zaCAke0R9JHtzeXNjb25mZGlyfS9tZGV2CisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L21kZXYtbW91bnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vbWRldgorICAgICAgICAgICAgICAgZmkKKwlmaQorCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICBpZiBncmVwIC1xICJDT05GSUdfU1lTTE9HRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgICAgIHNlZCAncyxAYmFzZV9zYmluZGlyQCwke2Jhc2Vfc2JpbmRpcn0sZycgPCAke1dPUktESVJ9L2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4gXAorCQk+ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UKKyAgICAgICAgICAgIGlmIFsgLWYgJHtXT1JLRElSfS9idXN5Ym94LXN5c2xvZy5kZWZhdWx0IF0gOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9idXN5Ym94LXN5c2xvZy5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvYnVzeWJveC1zeXNsb2cKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBsbiAtc2YgL2Rldi9udWxsICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2xvZy5zZXJ2aWNlCisgICAgICAgIGZpCisgICAgICAgIGlmIGdyZXAgLXEgIkNPTkZJR19LTE9HRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgICAgIHNlZCAncyxAYmFzZV9zYmluZGlyQCwke2Jhc2Vfc2JpbmRpcn0sZycgPCAke1dPUktESVJ9L2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisJCT4gJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vYnVzeWJveC1rbG9nZC5zZXJ2aWNlCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgUmVtb3ZlIHRoZSBzeXN2aW5pdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHN5c3RlbWQgc3lzdGVtcyB0byBhdm9pZCBjb25mdXNpb24KKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ2ZhbHNlJywgJ3RydWUnLCBkKX07IHRoZW4KKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mLiR7QlBOfQorICAgIGZpCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI1MCIKKworQUxURVJOQVRJVkVfJHtQTn0tc3lzbG9nICs9ICJzeXNsb2ctY29uZiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2ctY29uZl0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZiIKKworcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcy1zeXNsb2cnICUgKHBuKSwgJyBzeXNsb2ctaW5pdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgJ3N5c2xvZy1pbml0JywgJyVzL2luaXQuZC9zeXNsb2cnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkpKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsICdzeXNsb2ctaW5pdCcsICclcy9pbml0LmQvc3lzbG9nLiVzJyAlIChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignQlBOJywgVHJ1ZSkpKQorICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMtc3lzbG9nJyAlIChwbiksICcgc3lzbG9nLXN0YXJ0dXAtY29uZicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgJ3N5c2xvZy1zdGFydHVwLWNvbmYnLCAnJXMvc3lzbG9nLXN0YXJ0dXAuY29uZicgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSkpCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgJ3N5c2xvZy1zdGFydHVwLWNvbmYnLCAnJXMvc3lzbG9nLXN0YXJ0dXAuY29uZi4lcycgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ0JQTicsIFRydWUpKSkKK30KKworcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCAoKSB7CisgICAgIyBXZSBuZWVkIHRvIGxvYWQgdGhlIGZ1bGwgc2V0IG9mIGJ1c3lib3ggcHJvdmlkZXMgZnJvbSB0aGUgL2V0Yy9idXN5Ym94LmxpbmtzCisgICAgIyBVc2UgdGhpcyB0byBzZWUgdGhlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgd2l0aCB0aGUgcmlnaHQgaW5mb3JtYXRpb24KKworICAgIGR2YXIgPSBkLmdldFZhcignRCcsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGRlZiBzZXRfYWx0ZXJuYXRpdmVfdmFycyhsaW5rcywgdGFyZ2V0KToKKyAgICAgICAgZiA9IG9wZW4oJyVzJXMnICUgKGR2YXIsIGxpbmtzKSwgJ3InKQorICAgICAgICBmb3IgYWx0X2xpbmtfbmFtZSBpbiBmOgorICAgICAgICAgICAgYWx0X2xpbmtfbmFtZSA9IGFsdF9saW5rX25hbWUuc3RyaXAoKQorICAgICAgICAgICAgYWx0X25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGFsdF9saW5rX25hbWUpCisgICAgICAgICAgICAjIE1hdGNoIGNvcmV1dGlscworICAgICAgICAgICAgaWYgYWx0X25hbWUgPT0gJ1snOgorICAgICAgICAgICAgICAgIGFsdF9uYW1lID0gJ2xicmFja2V0JworICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIChwbiksICcgJyArIGFsdF9uYW1lKQorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgYWx0X2xpbmtfbmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCclcyVzJyAlIChkdmFyLCB0YXJnZXQpKToKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdF9uYW1lLCB0YXJnZXQpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG9zLnBhdGguZXhpc3RzKCclcy9ldGMvYnVzeWJveC5saW5rcycgJSAoZHZhcikpOgorICAgICAgICBzZXRfYWx0ZXJuYXRpdmVfdmFycygiJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzIiwgIiR7YmFzZV9iaW5kaXJ9L2J1c3lib3giKQorICAgIGVsc2U6CisgICAgICAgIHNldF9hbHRlcm5hdGl2ZV92YXJzKCIke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mubm9zdWlkIiwgIiR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkIikKKyAgICAgICAgc2V0X2FsdGVybmF0aXZlX3ZhcnMoIiR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcy5zdWlkIiwgIiR7YmFzZV9iaW5kaXJ9L2J1c3lib3guc3VpZCIpCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJIyBUaGlzIHBhcnQgb2YgY29kZSBpcyBkZWRpY2F0ZWQgdG8gdGhlIG9uIHRhcmdldCB1cGdyYWRlIHByb2JsZW0uCisJIyBJdCdzIGtub3duIHRoYXQgaWYgd2UgZG9uJ3QgbWFrZSBhcHByb3ByaWF0ZSBzeW1saW5rcyBiZWZvcmUgdXBkYXRlLWFsdGVybmF0aXZlcyBjYWxscywKKwkjIHRoZXJlIHdpbGwgYmUgZXJyb3JzIGluZGljYXRpbmcgbWlzc2luZyBjb21tYW5kcyBzdWNoIGFzICdzZWQnLgorCSMgVGhlc2Ugc3ltbGlua3Mgd2lsbCBsYXRlciBiZSB1cGRhdGVkIGJ5IHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMuCisJdGVzdCAtbiAyID4gL2Rldi9udWxsIHx8IGFsaWFzIHRlc3Q9J2J1c3lib3ggdGVzdCcKKwlpZiB0ZXN0ICJ4JEQiID0gIngiOyB0aGVuCisJCSMgUmVtb3ZlIGJ1c3lib3gubm9zdWlkIGlmIGl0J3MgYSBzeW1saW5rLCBiZWNhdXNlIHRoaXMgc2l0dWF0aW9uIGluZGljYXRlcworCQkjIHRoYXQgd2UncmUgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgdG8gYSBvbmUtYmluYXJ5IGJ1c3lib3guCisJCWlmIHRlc3QgLWggJHtiYXNlX2JpbmRpcn0vYnVzeWJveC5ub3N1aWQ7IHRoZW4KKwkJCXJtIC1mICR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkCisJCWZpCisJCWZvciBzdWZmaXggaW4gIiIgIi5ub3N1aWQiICIuc3VpZCI7IGRvCisJCQlpZiB0ZXN0IC1lICR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcyRzdWZmaXg7IHRoZW4KKwkJCQl3aGlsZSByZWFkIGxpbms7IGRvCisJCQkJCWlmIHRlc3QgISAtZSAiJGxpbmsiOyB0aGVuCisJCQkJCQljYXNlICIkbGluayIgaW4KKwkJCQkJCQkvKi8qLyopCisJCQkJCQkJCXRvPSIuLi8uLiR7YmFzZV9iaW5kaXJ9L2J1c3lib3gkc3VmZml4IgorCQkJCQkJCQk7OworCQkJCQkJCS9iaW4vKikKKwkJCQkJCQkJdG89ImJ1c3lib3gkc3VmZml4IgorCQkJCQkJCQk7OworCQkJCQkJCS8qLyopCisJCQkJCQkJCXRvPSIuLiR7YmFzZV9iaW5kaXJ9L2J1c3lib3gkc3VmZml4IgorCQkJCQkJCQk7OworCQkJCQkJZXNhYworCQkJCQkJIyB3ZSBjYW4gdXNlIGJ1c3lib3ggaGVyZSBiZWNhdXNlIGV2ZW4gaWYgd2UgYXJlIHVzaW5nIHNwbGl0dGVkIGJ1c3lib3gKKwkJCQkJCSMgd2UndmUgbWFkZSBhIHN5bWxpbmsgZnJvbSAvYmluL2J1c3lib3ggdG8gL2Jpbi9idXN5Ym94Lm5vc3VpZC4KKwkJCQkJCWJ1c3lib3ggcm0gLWYgJGxpbmsKKwkJCQkJCWJ1c3lib3ggbG4gLXMgJHRvICRsaW5rCisJCQkJCWZpCisJCQkJZG9uZSA8ICR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcyRzdWZmaXgKKwkJCWZpCisJCWRvbmUKKwlmaQorfQorCitwa2dfcHJlcm1fJHtQTn0gKCkgeworCSMgVGhpcyBpcyBzbyB5b3UgY2FuIG1ha2UgYnVzeWJveCBjb21taXQgc3VpY2lkZSAtIHJlbW92aW5nIGJ1c3lib3ggd2l0aCBubyBvdGhlciBwYWNrYWdlcworCSMgcHJvdmlkaW5nIGl0cyBmaWxlcywgdGhpcyB3aWxsIG1ha2UgdXBkYXRlLWFsdGVybmF0aXZlcyB3b3JrLCBidXQgdGhlIHVwZGF0ZS1yYy5kIHBhcnQKKwkjIGZvciBzeXNsb2csIGh0dHBkIGFuZC9vciB1ZGhjcGQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIG5vIG90aGVyIHBhY2thZ2UgcHJvdmlkaW5nIHNoCisJdG1wZGlyPWBta3RlbXAgLWQgL3RtcC9idXN5Ym94cm0tWFhYWFhYYAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9bCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3Rlc3QKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvaGVhZAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9zaAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9iYXNlbmFtZQorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9lY2hvCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL212CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2xuCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2Rpcm5hbWUKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvcm0KKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvc2VkCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3NvcnQKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvZ3JlcAorCWV4cG9ydCBQQVRIPSRQQVRIOiR0bXBkaXIKK30KKworcGtnX3ByZXJtXyR7UE59LXN5c2xvZyAoKSB7CisJIyByZW1vdmUgc3lzbG9nCisJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgorCQlpZiB0ZXN0ICIkMSIgPSAidXBncmFkZSIgLW8gIiQxIiA9ICJyZW1vdmUiOyB0aGVuCisJCQkke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2cgc3RvcAorCQlmaQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk5Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGQyOTFjMmZkZDVjYjg2MTY2MDVjNjdlY2JmYjA0Mjc0ZmEwOTQyNDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK0RhdGU6IFN1biwgNyBKdW4gMjAxNSAwMjozMjoyMyArMDIwMAorU3ViamVjdDogW1BBVENIXSBjaG93bjogZml4IGhlbHAgdGV4dAorCitEZXJpdmVkIGZyb206CitodHRwOi8vZ2l0LmJ1c3lib3gubmV0L2J1c3lib3gvY29tbWl0Lz9pZD1kMjkxYzJmZGQ1Y2I4NjE2NjA1YzY3ZWNiZmIwNDI3NGZhMDk0MjQyLgorCitPbmx5IHdoZW4gREVTS1RPUCBpcyBlbmFibGVkLCBjaG93biBoYXMgLUwsIC1IIGFuZCAtUCBvcHRpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorU2lnbmVkLW9mZi1ieTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGNvcmV1dGlscy9jaG93bi5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29yZXV0aWxzL2Nob3duLmMgYi9jb3JldXRpbHMvY2hvd24uYworaW5kZXggY2IwN2JiYy4uNjc5YzBkOCAxMDA2NDQKKy0tLSBhL2NvcmV1dGlscy9jaG93bi5jCisrKysgYi9jb3JldXRpbHMvY2hvd24uYworQEAgLTExLDcgKzExLDcgQEAKKyAvKiBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDc5MDQ5NzUvdXRpbGl0aWVzL2Nob3duLmh0bWwgKi8KKyAKKyAvL3VzYWdlOiNkZWZpbmUgY2hvd25fdHJpdmlhbF91c2FnZQorLS8vdXNhZ2U6ICAgICAgICJbLVJoTEhQIklGX0RFU0tUT1AoImN2ZiIpIl0uLi4gT1dORVJbPC58Oj5bR1JPVVBdXSBGSUxFLi4uIgorKy8vdXNhZ2U6ICAgICAgICJbLVJoIklGX0RFU0tUT1AoIkxIUGN2ZiIpIl0uLi4gT1dORVJbPC58Oj5bR1JPVVBdXSBGSUxFLi4uIgorIC8vdXNhZ2U6I2RlZmluZSBjaG93bl9mdWxsX3VzYWdlICJcblxuIgorIC8vdXNhZ2U6ICAgICAgICJDaGFuZ2UgdGhlIG93bmVyIGFuZC9vciBncm91cCBvZiBlYWNoIEZJTEUgdG8gT1dORVIgYW5kL29yIEdST1VQXG4iCisgLy91c2FnZTogICAgICJcbgktUglSZWN1cnNlIgorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDcyOWIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtaWZjb25maWctZml4LWRvdWJsZS1mcmVlLWZhdGFsLWVycm9yLWluLUlORVRfc3ByaW50LnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gYTk3Nzc3ODg5MzI4MTU3YmI3ZDA2ZWM2MThiYWQxNjcxMmE5YzM0NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CitEYXRlOiBUdWUsIDMgRmViIDIwMTUgMTI6MTE6MzAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaWZjb25maWc6IGZpeCBkb3VibGUgZnJlZSBmYXRhbCBlcnJvciBpbiBJTkVUX3NwcmludAorCitEZXJpdmVkIGZyb206CitodHRwOi8vZ2l0LmJ1c3lib3gubmV0L2J1c3lib3gvY29tbWl0Lz9pZD1hOTc3Nzc4ODkzMjgxNTdiYjdkMDZlYzYxOGJhZDE2NzEyYTljMzQ1LgorCitXaGlsZSBJTkVUX3NwcmludCBvciBJTkVUNl9zcHJpbnQgaXMgY2FsbGVkIGNpcmN1bGFybHkgYnkga2VlcGluZworaWZjb25maWdpbmcsIHNhcC0+c2FfZmFtaWx5IHdvdWxkIGJlIGNsZWFuZWQgYnkgb3RoZXIgcGFyYWxsZWwgcHJvY2Vzc2VzCitzdWNoIGFzIGRoY2xpZW50IHNvbWV0aW1lcywgYW5kIHRoZW4gdGhlcmUgd291bGQgYmUgYSBkb3VibGUgZnJlZSBlcnJvcgorbGlrZSB0aGUgZm9sbG93aW5nOgorCisgICoqKiBnbGliYyBkZXRlY3RlZCAqKiogaWZjb25maWc6IGRvdWJsZSBmcmVlIG9yIGNvcnJ1cHRpb24gKGZhc3R0b3ApOiAweDAwMGE2MDA4ICoqKgorICA9PT09PT09IEJhY2t0cmFjZTogPT09PT09PT09CisgIC9saWIvbGliYy5zby42KCsweDZiYzg0KVsweDQwMTMzYzg0XQorICAvbGliL2xpYmMuc28uNihjZnJlZSsweDk0KVsweDQwMTM4Njg0XQorICBpZmNvbmZpZ1sweDFjNDYwXQorICBpZmNvbmZpZ1sweDFjNmEwXQorICBpZmNvbmZpZ1sweDFjY2Y0XQorICBpZmNvbmZpZ1sweDE4N2M4XQorICBpZmNvbmZpZ1sweGQ1NDRdCisgIGlmY29uZmlnWzB4ZDVkY10KKyAgaWZjb25maWdbMHhkY2E4XQorICAvbGliL2xpYmMuc28uNihfX2xpYmNfc3RhcnRfbWFpbisweDExMClbMHg0MDBkZjI1OF0KKyAgPT09PT09PSBNZW1vcnkgbWFwOiA9PT09PT09PQorICAwMDAwODAwMC0wMDA5YzAwMCByLXhwIDAwMDAwMDAwIDFmOjA1IDQ0NDMyOCAgICAgL2Jpbi9idXN5Ym94CisgIDAwMGEzMDAwLTAwMGE0MDAwIHJ3LXAgMDAwOTMwMDAgMWY6MDUgNDQ0MzI4ICAgICAvYmluL2J1c3lib3gKKworVGhpcyBwYXRjaCBtb3ZlZCBmcmVlKCkgdHdvIGxpbmVzIGRvd24gdG8gYWRkcmVzcyB0aGlzIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KKy0tLQorIG5ldHdvcmtpbmcvaW50ZXJmYWNlLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbmV0d29ya2luZy9pbnRlcmZhY2UuYyBiL25ldHdvcmtpbmcvaW50ZXJmYWNlLmMKK2luZGV4IGJmN2QyYjEuLmIwNTcyZDAgMTAwNjQ0CistLS0gYS9uZXR3b3JraW5nL2ludGVyZmFjZS5jCisrKysgYi9uZXR3b3JraW5nL2ludGVyZmFjZS5jCitAQCAtOTEsOSArOTEsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogRkFTVF9GVU5DIElORVRfc3ByaW50KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBpbnQgbnVtZXJpYykKKyB7CisgCXN0YXRpYyBjaGFyICpidWZmOyAvKiBkZWZhdWx0cyB0byBOVUxMICovCisgCistCWZyZWUoYnVmZik7CisgCWlmIChzYXAtPnNhX2ZhbWlseSA9PSAweEZGRkYgfHwgc2FwLT5zYV9mYW1pbHkgPT0gMCkKKyAJCXJldHVybiAiW05PTkUgU0VUXSI7CisrCWZyZWUoYnVmZik7CisgCWJ1ZmYgPSBJTkVUX3JyZXNvbHZlKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgc2FwLCBudW1lcmljLCAweGZmZmZmZjAwKTsKKyAJcmV0dXJuIGJ1ZmY7CisgfQorQEAgLTE3Myw5ICsxNzMsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogRkFTVF9GVU5DIElORVQ2X3NwcmludChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgaW50IG51bWVyaWMpCisgeworIAlzdGF0aWMgY2hhciAqYnVmZjsKKyAKKy0JZnJlZShidWZmKTsKKyAJaWYgKHNhcC0+c2FfZmFtaWx5ID09IDB4RkZGRiB8fCBzYXAtPnNhX2ZhbWlseSA9PSAwKQorIAkJcmV0dXJuICJbTk9ORSBTRVRdIjsKKysJZnJlZShidWZmKTsKKyAJYnVmZiA9IElORVQ2X3JyZXNvbHZlKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNhcCwgbnVtZXJpYyk7CisgCXJldHVybiBidWZmOworIH0KKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmRiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBjb3B5IGNvbW1pdCBtZXNzYWdlIGZyb20gT0UgYXMgdGhlIHBhdGNoIGNvbW1lbnQ6CisjICAgIGNvbW1pdCA5OGMyNDI5MWFhMTY1ZjUzNDIzYzI3YWUwMzM4MzFjZTBiM2JiNjc2CisjICAgIEF1dGhvcjogUm9tYW4gSSBLaGltb3YgPGtoaW1vdkBhbHRlbGwucnU+CisjICAgIERhdGU6ICAgVGh1IE1hciAyNiAyMzowMzo1OCAyMDA5ICswMDAwCisjCisjICAgIGJ1c3lib3g6IHVwZGF0ZSBhcHBsZXRsaWIgZGVwZW5kZW5jeSBwYXRjaAorIyAgICAKKyMgICAgUHJldmlvdXMgdmVyc2lvbiBzdGlsbCBmYWlsZWQgZnJvbSB0aW1lIHRvIHRpbWUgb24gY2xlYW4tc3RhcnQgYnVpbGRzCisjICAgIHdpdGggNCBiaXRiYWtlIHRocmVhZHMgYW5kICctajE2Jy4gQnVpbGRpbmcgYnVzeWJveCBhcyBzb2xlIHRhcmdldCB3b3JrZWQKKyMgICAgd2VsbC4KKyMgICAgCisjICAgIFRoZSByZWFzb24gaXMgdGhhdCBwcmV2aW91cyB2ZXJzaW9uIGludHJvZHVjZWQgYSByYWNlIGJldHdlZW4gYXBwbGV0cyBtYWtlCisjICAgIHByb2Nlc3NlcyBzcGF3bmVkIGZyb20gdG9wLWxldmVsIE1ha2VmaWxlIGFuZCBmcm9tIGxpYmJiIE1ha2VmaWxlLgorIyAgICAKKyMgICAgRml4IGl0IHdpdGggaGlnaC1sZXZlbCBkZXBlbmRlbmN5IHRoYXQgZG9lc24ndCBjcmVhdGUgcmFjZXMuCisjICAgIAorIyAgICBTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5Ab3BlbmVtYmVkZGVkLm9yZz4KKyMKKyMgYWJvdmUgY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDctMDYKKworSW5kZXg6IGJ1c3lib3gtMS4xMy4yL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjEzLjIub3JpZy9NYWtlZmlsZQkyMDA5LTAzLTE5IDE1OjQ0OjM3LjQxOTI3MDI2NSArMDMwMAorKysrIGJ1c3lib3gtMS4xMy4yL01ha2VmaWxlCTIwMDktMDMtMTkgMTU6NDU6NTcuNzM3NTIxMjk2ICswMzAwCitAQCAtNDcxLDYgKzQ3MSwxMCBAQAorIAkJdXRpbC1saW51eC8gXAorIAkJdXRpbC1saW51eC92b2x1bWVfaWQvIFwKKyAKKysjIExpYiBpbnRlcmRlcHMKKysjIGxpYmJiIHVzZXMgaGVhZGVycyBnZW5lcmF0ZWQgaW4gYXBwbGV0cworK2xpYmJiOiBhcHBsZXRzCisrCisgZW5kaWYgIyBLQlVJTERfRVhUTU9ECisgCisgaWZlcSAoJChkb3QtY29uZmlnKSwxKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhODY4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgMyBNYXIgMjAxMyAxMjozMTo0MCAtMDYwMAorU3ViamVjdDogW1BBVENIXSBtZW51Y29uZmlnLGNoZWNrLWx4ZGlhZ2xvZy5zaDogQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBuY3Vyc2VzIGxvY2F0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1sgYmFzZWQgb246IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDEzLzMvMy8xMDMgXQorCitUaGlzIHBhdGNoIHN5bmNzIHVwIHdpdGggdGhlIHdheSB0aGUgbWVudWNvbmZpZyBuY3Vyc2VzIC8gY3Vyc2VzCitpcyBkZXRlY3RlZCBhbmQgdGhlIEhPU1RfRVhUUkFDRkxBR1Mgd29ya3MgaW4gdGhlIExpbnV4IGtlcm5lbAorYW5kIGl0IGFsbG93cyB0aGUgbWVudWNvbmZpZyB0byB3b3JrIHdpdGggYSBzeXNyb290IHZlcnNpb24KK29mIHRoZSBjdXJzZXMgbGlicmFyaWVzLgorCistLS0KKworSW4gc29tZSBjcm9zcyBidWlsZCBlbnZpcm9ubWVudHMgc3VjaCBhcyB0aGUgWW9jdG8gUHJvamVjdCBidWlsZAorZW52aXJvbm1lbnQgaXQgcHJvdmlkZXMgYW4gbmN1cnNlcyBsaWJyYXJ5IHRoYXQgaXMgY29tcGlsZWQKK2RpZmZlcmVudGx5IHRoYW4gdGhlIGhvc3QncyB2ZXJzaW9uLiAgVGhpcyBjYXVzZXMgZGlzcGxheSBjb3JydXB0aW9uCitwcm9ibGVtcyB3aGVuIHRoZSBob3N0J3MgY3Vyc2VzIGluY2x1ZGVzIGFyZSB1c2VkIGluc3RlYWQgb2YgdGhlCitpbmNsdWRlcyBmcm9tIHRoZSBwcm92aWRlZCBjb21waWxlciBhcmUgb3ZlcnJpZGRlbi4gIFRoZXJlIGlzIGEgc2Vjb25kCitjYXNlIHdoZXJlIHRoZXJlIGlzIG5vIGN1cnNlcyBsaWJyYXJpZXMgYXQgYWxsIG9uIHRoZSBob3N0IHN5c3RlbSBhbmQKK21lbnVjb25maWcgd2lsbCBqdXN0IGZhaWwgZW50aXJlbHkuCisKK1RoZSBzb2x1dGlvbiBpcyBzaW1wbHkgdG8gYWxsb3cgYW4gb3ZlcnJpZGUgdmFyaWFibGUgaW4KK2NoZWNrLWx4ZGlhbG9nLnNoIGZvciBlbnZpcm9ubWVudHMgc3VjaCBhcyB0aGUgWW9jdG8gUHJvamVjdC4gIEFkZGluZworYSBDUk9TU19DVVJTRVNfTElCIGFuZCBDUk9TU19DVVJTRVNfSU5DIHNvbHZlcyB0aGUgaXNzdWUgYW5kIGFsbG93aW5nCitjb21waWxpbmcgYW5kIGxpbmtpbmcgYWdhaW5zdCB0aGUgcmlnaHQgaGVhZGVycyBhbmQgbGlicmFyaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorY2M6IE1pY2hhbCBNYXJlayA8bW1hcmVrQHN1c2UuY3o+CitjYzogbGludXgta2J1aWxkQHZnZXIua2VybmVsLm9yZworLS0tCisgc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL01ha2VmaWxlICAgICAgICAgIHwgICAgMiArLQorIHNjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaCB8ICAgIDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKKysrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaAorQEAgLTQsNiArNCwxMCBAQAorICMgV2hhdCBsaWJyYXJ5IHRvIGxpbmsKKyBsZGZsYWdzKCkKKyB7CisrCWlmIFsgeCIkQ1JPU1NfQ1VSU0VTX0xJQiIgIT0geCBdOyB0aGVuCisrCQllY2hvICIkQ1JPU1NfQ1VSU0VTX0xJQiIKKysJCWV4aXQKKysJZmkKKyAJZm9yIGV4dCBpbiBzbyBhIGR5bGliIDsgZG8KKyAJCWZvciBsaWIgaW4gbmN1cnNlc3cgbmN1cnNlcyBjdXJzZXMgOyBkbworIAkJCSRjYyAtcHJpbnQtZmlsZS1uYW1lPWxpYiR7bGlifS4ke2V4dH0gfCBncmVwIC1xIC8KK0BAIC0xOSw2ICsyMywxMCBAQCBsZGZsYWdzKCkKKyAjIFdoZXJlIGlzIG5jdXJzZXMuaD8KKyBjY2ZsYWdzKCkKKyB7CisrCWlmIFsgeCIkQ1JPU1NfQ1VSU0VTX0lOQyIgIT0geCBdOyB0aGVuCisrCQllY2hvICIkQ1JPU1NfQ1VSU0VTX0lOQyIKKysJCWV4aXQKKysJZmkKKyAJaWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cvbmN1cnNlcy5oIF07IHRoZW4KKyAJCWVjaG8gJy1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IC1EQ1VSU0VTX0xPQz0iPG5jdXJzZXMuaD4iJworIAllbGlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L2N1cnNlcy5oIF07IHRoZW4KKy0tLSBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZQorKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL01ha2VmaWxlCitAQCAtNSw3ICs1LDcgQEAgY2hlY2stbHhkaWFsb2cgIDo9ICQoc3JjdHJlZSkvJChzcmMpL2NoZQorIAorICMgVXNlIHJldXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGVzIHNvIHdlIGRvIG5vdCBjYWxsIGdjYyB1bmxlc3MKKyAjIHdlIHJlYWxseSBuZWVkIHRvIGRvIHNvLiAoRG8gbm90IGNhbGwgZ2NjIGFzIHBhcnQgb2YgbWFrZSBtcnByb3BlcikKKy1IT1NUX0VYVFJBQ0ZMQUdTID0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNjZmxhZ3MpCisrSE9TVF9FWFRSQUNGTEFHUyArPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNoZWNrLWx4ZGlhbG9nKSAtY2NmbGFncykKKyBIT1NUX0xPQURMSUJFUyAgID0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWxkZmxhZ3MgJChIT1NUQ0MpKQorIAorIEhPU1RfRVhUUkFDRkxBR1MgKz0gLURMT0NBTEUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzljZTNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitGcm9tIDUzNjI2Y2QwNmEzZWYwNWVkODQ3ZGFlYTgwMmVmMGFhOTY2MWNhYTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRlcnMgRGFyYW5kZXIgPGFuZGVyc0BjaGFyZ2VzdG9ybS5zZT4KK0RhdGU6IFRodSwgMyBOb3YgMjAxMSAwODo1MTozMSArMDEwMAorU3ViamVjdDogW1BBVENIXSBidXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIGEgbmV3IG9wdGlvbiAtRCB0byB0aGUgdWRoY3BjIGNsaWVudCB0aGF0IGFsbG93cyBmb3IKK2RoY3AgcmVuZXdhbCB0byBvY2N1ciB3aXRob3V0IGhhdmluZyB0byBkb3duIHRoZSBpbnRlcmZhY2UKK2luIHRoZSBwcm9jZXNzLgorCitTaWduZWQtb2ZmLWJ5OiBHcmVnIE1vZmZhdHQgPGdyZWcubW9mZmF0dEB3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIHRvIGxhdGVzdCBCdXN5Ym94IDEuMTcuMworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK1VwZGF0ZWQgdG8gQnVzeWJveCAxLjE4LjQKK29wdGlvbiBzcGVjIGlzIGNoYW5nZWQKKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK1VwZGF0ZWQgdG8gQnVzeWJveCAxLjE5LjMKKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIERhcmFuZGVyIDxhbmRlcnNAY2hhcmdlc3Rvcm0uc2U+CisKK0ZpeGVkIG9wdGlvbnMgLWIsIC1hIGFuZCAtUC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKy0tLQorIG5ldHdvcmtpbmcvdWRoY3AvZGhjcGMuYyB8ICAgMjkgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK0luZGV4OiBidXN5Ym94LTEuMjAuMi9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBidXN5Ym94LTEuMjAuMi5vcmlnL25ldHdvcmtpbmcvdWRoY3AvZGhjcGMuYworKysrIGJ1c3lib3gtMS4yMC4yL25ldHdvcmtpbmcvdWRoY3AvZGhjcGMuYworQEAgLTI5LDYgKzI5LDkgQEAKKyAjaW5jbHVkZSA8bmV0cGFja2V0L3BhY2tldC5oPgorICNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KKyAKKysvKiBvcHRpb24gd2hldGhlciB0byBkb3duIHRoZSBpbnRlcmZhY2Ugd2hlbiByZWNvbmZpZ3VyaW5nICovCisrc3RhdGljIGludCBhbGxvd19kZWNvbmZpZyA9IDE7CisrCisgLyogInN0cnVjdCBjbGllbnRfY29uZmlnX3QgY2xpZW50X2NvbmZpZyIgaXMgaW4gYmJfY29tbW9uX2J1ZnNpejEgKi8KKyAKKyAKK0BAIC04MSw4ICs4NCw5IEBAIGVudW0geworIAlPUFRfeCA9IDEgPDwgMTgsCisgCU9QVF9mID0gMSA8PCAxOSwKKyAJT1BUX0IgPSAxIDw8IDIwLAorKwlPUFRfRCA9IDEgPDwgMjEsCisgLyogVGhlIHJlc3QgaGFzIHZhcmlhYmxlIGJpdCBwb3NpdGlvbnMsIG5lZWQgdG8gYmUgY2xldmVyICovCistCU9QVEJJVF9CID0gMjAsCisrCU9QVEJJVF9EID0gMjEsCisgCVVTRV9GT1JfTU1VKCAgICAgICAgICAgICBPUFRCSVRfYiwpCisgCUlGX0ZFQVRVUkVfVURIQ1BDX0FSUElORyhPUFRCSVRfYSwpCisgCUlGX0ZFQVRVUkVfVURIQ1BfUE9SVCggICBPUFRCSVRfUCwpCitAQCAtMTA0MCw3ICsxMDQ0LDggQEAgc3RhdGljIHZvaWQgcGVyZm9ybV9yZW5ldyh2b2lkKQorIAkJc3RhdGUgPSBSRU5FV19SRVFVRVNURUQ7CisgCQlicmVhazsKKyAJY2FzZSBSRU5FV19SRVFVRVNURUQ6IC8qIGltcGF0aWVudCBhcmUgd2U/IGZpbmUsIHNxdWFyZSAxICovCistCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCWNhc2UgUkVRVUVTVElORzoKKyAJY2FzZSBSRUxFQVNFRDoKKyAJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKK0BAIC0xMDY0LDcgKzEwNjksOCBAQCBzdGF0aWMgdm9pZCBwZXJmb3JtX3JlbGVhc2UodWludDMyX3Qgc2VyCisgCQliYl9pbmZvX21zZygiVW5pY2FzdGluZyBhIHJlbGVhc2Ugb2YgJXMgdG8gJXMiLAorIAkJCQlpbmV0X250b2EodGVtcF9hZGRyKSwgYnVmZmVyKTsKKyAJCXNlbmRfcmVsZWFzZShzZXJ2ZXJfYWRkciwgcmVxdWVzdGVkX2lwKTsgLyogdW5pY2FzdCAqLworLQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAl9CisgCWJiX2luZm9fbXNnKCJFbnRlcmluZyByZWxlYXNlZCBzdGF0ZSIpOworIAorQEAgLTEyMTUsNyArMTIyMSw3IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJLyogTyx4OiBsaXN0OyAtVCwtdCwtQSB0YWtlIG51bWVyaWMgcGFyYW0gKi8KKyAJb3B0X2NvbXBsZW1lbnRhcnkgPSAiTzo6eDo6VCs6dCs6QSsiIElGX1VESENQX1ZFUkJPU0UoIjp2diIpIDsKKyAJSUZfTE9OR19PUFRTKGFwcGxldF9sb25nX29wdGlvbnMgPSB1ZGhjcGNfbG9uZ29wdHM7KQorLQlvcHQgPSBnZXRvcHQzMihhcmd2LCAiQ1Y6SDpoOkY6aTpucDpxUnI6czpUOnQ6U0E6TzpveDpmQiIKKysJb3B0ID0gZ2V0b3B0MzIoYXJndiwgIkNWOkg6aDpGOmk6bnA6cVJyOnM6VDp0OlNBOk86b3g6ZkJEIgorIAkJVVNFX0ZPUl9NTVUoImIiKQorIAkJSUZfRkVBVFVSRV9VREhDUENfQVJQSU5HKCJhIikKKyAJCUlGX0ZFQVRVUkVfVURIQ1BfUE9SVCgiUDoiKQorQEAgLTEzMTYsNiArMTMyMiw5IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJCWxvZ21vZGUgfD0gTE9HTU9ERV9TWVNMT0c7CisgCX0KKyAKKysJaWYgKG9wdCAmIE9QVF9EKQorKwkJYWxsb3dfZGVjb25maWcgPSAwOworKworIAkvKiBNYWtlIHN1cmUgZmQgMCwxLDIgYXJlIG9wZW4gKi8KKyAJYmJfc2FuaXRpemVfc3RkaW8oKTsKKyAJLyogRXF1aXZhbGVudCBvZiBkb2luZyBhIGZmbHVzaCBhZnRlciBldmVyeSBcbiAqLworQEAgLTEzMzAsNyArMTMzOSw4IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJc3JhbmQobW9ub3RvbmljX3VzKCkpOworIAorIAlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworLQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwlpZiAoYWxsb3dfZGVjb25maWcpCisrCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAljaGFuZ2VfbGlzdGVuX21vZGUoTElTVEVOX1JBVyk7CisgCXBhY2tldF9udW0gPSAwOworIAl0aW1lb3V0ID0gMDsKK0BAIC0xNDg0LDcgKzE0OTQsOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQkJCX0KKyAJCQkJLyogVGltZWQgb3V0LCBlbnRlciBpbml0IHN0YXRlICovCisgCQkJCWJiX2luZm9fbXNnKCJMZWFzZSBsb3N0LCBlbnRlcmluZyBpbml0IHN0YXRlIik7CistCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQkJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCQkJCXN0YXRlID0gSU5JVF9TRUxFQ1RJTkc7CisgCQkJCWNsaWVudF9jb25maWcuZmlyc3Rfc2VjcyA9IDA7IC8qIG1ha2Ugc2VjcyBmaWVsZCBjb3VudCBmcm9tIDAgKi8KKyAJCQkJLyp0aW1lb3V0ID0gMDsgLSBhbHJlYWR5IGlzICovCitAQCAtMTY2Nyw3ICsxNjc4LDggQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkJCQkJCXNlbmRfZGVjbGluZSgvKnhpZCwqLyBzZXJ2ZXJfYWRkciwgcGFja2V0LnlpYWRkcik7CisgCisgCQkJCQkJaWYgKHN0YXRlICE9IFJFUVVFU1RJTkcpCistCQkJCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQkJCQkJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQkJCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCQkJCQkJY2hhbmdlX2xpc3Rlbl9tb2RlKExJU1RFTl9SQVcpOworIAkJCQkJCXN0YXRlID0gSU5JVF9TRUxFQ1RJTkc7CisgCQkJCQkJY2xpZW50X2NvbmZpZy5maXJzdF9zZWNzID0gMDsgLyogbWFrZSBzZWNzIGZpZWxkIGNvdW50IGZyb20gMCAqLworQEAgLTE3MTEsNyArMTcyMyw4IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJCQkJYmJfaW5mb19tc2coIlJlY2VpdmVkIERIQ1AgTkFLIik7CisgCQkJCXVkaGNwX3J1bl9zY3JpcHQoJnBhY2tldCwgIm5hayIpOworIAkJCQlpZiAoc3RhdGUgIT0gUkVRVUVTVElORykKKy0JCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJCQkJY2hhbmdlX2xpc3Rlbl9tb2RlKExJU1RFTl9SQVcpOworIAkJCQlzbGVlcCgzKTsgLyogYXZvaWQgZXhjZXNzaXZlIG5ldHdvcmsgdHJhZmZpYyAqLworIAkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2RlZmNvbmZpZyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1ZGY5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcKQEAgLTAsMCArMSwxMDU0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIEJ1c3lib3ggdmVyc2lvbjogMS4yMy4yCisjIFRodSBKdWwgMzAgMTE6MDA6MDAgMjAxNQorIworQ09ORklHX0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgQnVzeWJveCBTZXR0aW5ncworIworCisjCisjIEdlbmVyYWwgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfREVTS1RPUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFRSQV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5DTFVERV9TVVN2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfUE9SVEFCTEVfQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfUExBVEZPUk1fTElOVVg9eQorQ09ORklHX0ZFQVRVUkVfQlVGRkVSU19VU0VfTUFMTE9DPXkKKyMgQ09ORklHX0ZFQVRVUkVfQlVGRkVSU19HT19PTl9TVEFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fSU5fQlNTIGlzIG5vdCBzZXQKK0NPTkZJR19TSE9XX1VTQUdFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVkVSQk9TRV9VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT01QUkVTU19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX0lOU1RBTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX05PX1VTUiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NBTEVfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9VU0lOR19MT0NBTEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEVDS19VTklDT0RFX0lOX0VOViBpcyBub3Qgc2V0CitDT05GSUdfU1VCU1RfV0NIQVI9MAorQ09ORklHX0xBU1RfU1VQUE9SVEVEX1dDSEFSPTAKKyMgQ09ORklHX1VOSUNPREVfQ09NQklOSU5HX1dDSEFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX1dJREVfV0NIQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfQklESV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfTkVVVFJBTF9UQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX1BSRVNFUlZFX0JST0tFTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQU0gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVNFX1NFTkRGSUxFPXkKK0NPTkZJR19MT05HX09QVFM9eQorQ09ORklHX0ZFQVRVUkVfREVWUFRTPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0xFQU5fVVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVRNUD15CisjIENPTkZJR19GRUFUVVJFX1dUTVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUElERklMRT15CitDT05GSUdfUElEX0ZJTEVfUEFUSD0iL3Zhci9ydW4iCitDT05GSUdfRkVBVFVSRV9TVUlEPXkKK0NPTkZJR19GRUFUVVJFX1NVSURfQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX1NVSURfQ09ORklHX1FVSUVUPXkKKyMgQ09ORklHX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QUkVGRVJfQVBQTEVUUyBpcyBub3Qgc2V0CitDT05GSUdfQlVTWUJPWF9FWEVDX1BBVEg9Ii9wcm9jL3NlbGYvZXhlIgorQ09ORklHX0ZFQVRVUkVfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0hBVkVfUlBDPXkKKworIworIyBCdWlsZCBPcHRpb25zCisjCisjIENPTkZJR19TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfUElFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0xJQkJVU1lCT1ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hBUkVEX0JVU1lCT1ggaXMgbm90IHNldAorQ09ORklHX0xGUz15CisjIENPTkZJR19DUk9TU19DT01QSUxFUl9QUkVGSVggaXMgbm90IHNldAorQ09ORklHX1NZU1JPT1Q9IiIKKyMgQ09ORklHX0VYVFJBX0NGTEFHUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfTERGTEFHUz0iIgorQ09ORklHX0VYVFJBX0xETElCUz0iIgorCisjCisjIERlYnVnZ2luZyBPcHRpb25zCisjCisjIENPTkZJR19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVNTSU1JWkUgaXMgbm90IHNldAorIyBDT05GSUdfVU5JVF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfTk9fREVCVUdfTElCPXkKKyMgQ09ORklHX0RNQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfRUZFTkNFIGlzIG5vdCBzZXQKKworIworIyBJbnN0YWxsYXRpb24gT3B0aW9ucyAoIm1ha2UgaW5zdGFsbCIgYmVoYXZpb3IpCisjCitDT05GSUdfSU5TVEFMTF9BUFBMRVRfU1lNTElOS1M9eQorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfSEFSRExJTktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX1NDUklQVF9XUkFQUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9ET05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NZTUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9TSF9BUFBMRVRfSEFSRExJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9TSF9BUFBMRVRfU0NSSVBUX1dSQVBQRVIgaXMgbm90IHNldAorQ09ORklHX1BSRUZJWD0iLi9faW5zdGFsbCIKKworIworIyBCdXN5Ym94IExpYnJhcnkgVHVuaW5nCisjCitDT05GSUdfRkVBVFVSRV9TWVNURU1EPXkKK0NPTkZJR19GRUFUVVJFX1JUTUlOTUFYPXkKK0NPTkZJR19QQVNTV09SRF9NSU5MRU49NgorQ09ORklHX01ENV9TTUFMTD0xCitDT05GSUdfU0hBM19TTUFMTD0xCitDT05GSUdfRkVBVFVSRV9GQVNUX1RPUD15CisjIENPTkZJR19GRUFUVVJFX0VUQ19ORVRXT1JLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9VU0VfVEVSTUlPUz15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfTUFYX0xFTj0xMDI0CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfVkkgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRURJVElOR19ISVNUT1JZPTE1CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX1NBVkVISVNUT1JZPXkKKyMgQ09ORklHX0ZFQVRVUkVfRURJVElOR19TQVZFX09OX0VYSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRVZFUlNFX1NFQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQUJfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9VU0VSTkFNRV9DT01QTEVUSU9OPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfRkFOQ1lfUFJPTVBUPXkKKyMgQ09ORklHX0ZFQVRVUkVfRURJVElOR19BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTk9OX1BPU0lYX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfVkVSQk9TRV9DUF9NRVNTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NPUFlCVUZfS0I9NAorQ09ORklHX0ZFQVRVUkVfU0tJUF9ST09URlM9eQorQ09ORklHX01PTk9UT05JQ19TWVNDQUxMPXkKK0NPTkZJR19JT0NUTF9IRVgyU1RSX0VSUk9SPXkKK0NPTkZJR19GRUFUVVJFX0hXSUI9eQorCisjCisjIEFwcGxldHMKKyMKKworIworIyBBcmNoaXZhbCBVdGlsaXRpZXMKKyMKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX1haPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0xaTUE9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfQloyPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0daPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX1o9eQorQ09ORklHX0FSPXkKKyMgQ09ORklHX0ZFQVRVUkVfQVJfTE9OR19GSUxFTkFNRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BUl9DUkVBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVU5DT01QUkVTUyBpcyBub3Qgc2V0CitDT05GSUdfR1VOWklQPXkKK0NPTkZJR19CVU5aSVAyPXkKKyMgQ09ORklHX1VOTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xaTUFfRkFTVCBpcyBub3Qgc2V0CisjIENPTkZJR19MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOWFogaXMgbm90IHNldAorIyBDT05GSUdfWFogaXMgbm90IHNldAorIyBDT05GSUdfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0NQSU89eQorIyBDT05GSUdfRkVBVFVSRV9DUElPX08gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUElPX1AgaXMgbm90IHNldAorIyBDT05GSUdfRFBLRyBpcyBub3Qgc2V0CisjIENPTkZJR19EUEtHX0RFQiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RQS0dfREVCX0VYVFJBQ1RfT05MWSBpcyBub3Qgc2V0CitDT05GSUdfR1pJUD15CisjIENPTkZJR19GRUFUVVJFX0daSVBfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19HWklQX0ZBU1Q9MAorIyBDT05GSUdfTFpPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MWk9QX0NPTVBSX0hJR0ggaXMgbm90IHNldAorIyBDT05GSUdfUlBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQTTJDUElPIGlzIG5vdCBzZXQKK0NPTkZJR19UQVI9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0NSRUFURT15CitDT05GSUdfRkVBVFVSRV9UQVJfQVVUT0RFVEVDVD15CitDT05GSUdfRkVBVFVSRV9UQVJfRlJPTT15CitDT05GSUdfRkVBVFVSRV9UQVJfT0xER05VX0NPTVBBVElCSUxJVFk9eQorIyBDT05GSUdfRkVBVFVSRV9UQVJfT0xEU1VOX0NPTVBBVElCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFSX0dOVV9FWFRFTlNJT05TPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9UT19DT01NQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1VOQU1FX0dOQU1FIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RBUl9OT1BSRVNFUlZFX1RJTUU9eQorIyBDT05GSUdfRkVBVFVSRV9UQVJfU0VMSU5VWCBpcyBub3Qgc2V0CitDT05GSUdfVU5aSVA9eQorCisjCisjIENvcmV1dGlscworIworQ09ORklHX0JBU0VOQU1FPXkKK0NPTkZJR19DQVQ9eQorQ09ORklHX0RBVEU9eQorIyBDT05GSUdfRkVBVFVSRV9EQVRFX0lTT0ZNVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RBVEVfTkFOTyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9EQVRFX0NPTVBBVD15CisjIENPTkZJR19IT1NUSUQgaXMgbm90IHNldAorQ09ORklHX0lEPXkKK0NPTkZJR19HUk9VUFM9eQorQ09ORklHX1NIVUY9eQorQ09ORklHX1RFU1Q9eQorQ09ORklHX0ZFQVRVUkVfVEVTVF82ND15CitDT05GSUdfVE9VQ0g9eQorQ09ORklHX0ZFQVRVUkVfVE9VQ0hfTk9ERVJFRj15CitDT05GSUdfRkVBVFVSRV9UT1VDSF9TVVNWMz15CitDT05GSUdfVFI9eQorQ09ORklHX0ZFQVRVUkVfVFJfQ0xBU1NFUz15CisjIENPTkZJR19GRUFUVVJFX1RSX0VRVUlWIGlzIG5vdCBzZXQKK0NPTkZJR19VTkxJTks9eQorIyBDT05GSUdfQkFTRTY0IGlzIG5vdCBzZXQKK0NPTkZJR19XSE89eQorQ09ORklHX1VTRVJTPXkKKyMgQ09ORklHX0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVRWIGlzIG5vdCBzZXQKK0NPTkZJR19DSEdSUD15CitDT05GSUdfQ0hNT0Q9eQorQ09ORklHX0NIT1dOPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0hPV05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJPT1Q9eQorIyBDT05GSUdfQ0tTVU0gaXMgbm90IHNldAorIyBDT05GSUdfQ09NTSBpcyBub3Qgc2V0CitDT05GSUdfQ1A9eQorIyBDT05GSUdfRkVBVFVSRV9DUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0NVVD15CitDT05GSUdfREQ9eQorQ09ORklHX0ZFQVRVUkVfRERfU0lHTkFMX0hBTkRMSU5HPXkKKyMgQ09ORklHX0ZFQVRVUkVfRERfVEhJUkRfU1RBVFVTX0xJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERF9JQlNfT0JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERj15CisjIENPTkZJR19GRUFUVVJFX0RGX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19ESVJOQU1FPXkKKyMgQ09ORklHX0RPUzJVTklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVgyRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19EVT15CitDT05GSUdfRkVBVFVSRV9EVV9ERUZBVUxUX0JMT0NLU0laRV8xSz15CitDT05GSUdfRUNITz15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9FQ0hPPXkKK0NPTkZJR19FTlY9eQorQ09ORklHX0ZFQVRVUkVfRU5WX0xPTkdfT1BUSU9OUz15CisjIENPTkZJR19FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FWFBBTkRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19FWFBSPXkKK0NPTkZJR19FWFBSX01BVEhfU1VQUE9SVF82ND15CitDT05GSUdfRkFMU0U9eQorIyBDT05GSUdfRk9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19GU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfSEVBRD15CisjIENPTkZJR19GRUFUVVJFX0ZBTkNZX0hFQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU1RBTExfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19MTj15CitDT05GSUdfTE9HTkFNRT15CitDT05GSUdfTFM9eQorQ09ORklHX0ZFQVRVUkVfTFNfRklMRVRZUEVTPXkKK0NPTkZJR19GRUFUVVJFX0xTX0ZPTExPV0xJTktTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1JFQ1VSU0lWRT15CitDT05GSUdfRkVBVFVSRV9MU19TT1JURklMRVM9eQorQ09ORklHX0ZFQVRVUkVfTFNfVElNRVNUQU1QUz15CitDT05GSUdfRkVBVFVSRV9MU19VU0VSTkFNRT15CitDT05GSUdfRkVBVFVSRV9MU19DT0xPUj15CisjIENPTkZJR19GRUFUVVJFX0xTX0NPTE9SX0lTX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX01ENVNVTT15CitDT05GSUdfTUtESVI9eQorQ09ORklHX0ZFQVRVUkVfTUtESVJfTE9OR19PUFRJT05TPXkKK0NPTkZJR19NS0ZJRk89eQorQ09ORklHX01LTk9EPXkKK0NPTkZJR19NVj15CisjIENPTkZJR19GRUFUVVJFX01WX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19OT0hVUD15CitDT05GSUdfT0Q9eQorIyBDT05GSUdfUFJJTlRFTlYgaXMgbm90IHNldAorQ09ORklHX1BSSU5URj15CitDT05GSUdfUFdEPXkKK0NPTkZJR19SRUFETElOSz15CitDT05GSUdfRkVBVFVSRV9SRUFETElOS19GT0xMT1c9eQorQ09ORklHX1JFQUxQQVRIPXkKK0NPTkZJR19STT15CitDT05GSUdfUk1ESVI9eQorIyBDT05GSUdfRkVBVFVSRV9STURJUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX1NFUT15CisjIENPTkZJR19TSEExU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTI1NlNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEE1MTJTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBM1NVTSBpcyBub3Qgc2V0CitDT05GSUdfU0xFRVA9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfU0xFRVA9eQorIyBDT05GSUdfRkVBVFVSRV9GTE9BVF9TTEVFUCBpcyBub3Qgc2V0CitDT05GSUdfU09SVD15CitDT05GSUdfRkVBVFVSRV9TT1JUX0JJRz15CisjIENPTkZJR19TUExJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NQTElUX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFUPXkKK0NPTkZJR19GRUFUVVJFX1NUQVRfRk9STUFUPXkKK0NPTkZJR19TVFRZPXkKKyMgQ09ORklHX1NVTSBpcyBub3Qgc2V0CitDT05GSUdfU1lOQz15CisjIENPTkZJR19UQUMgaXMgbm90IHNldAorQ09ORklHX1RBSUw9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfVEFJTD15CitDT05GSUdfVEVFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEVFX1VTRV9CTE9DS19JTyBpcyBub3Qgc2V0CitDT05GSUdfVFJVRT15CitDT05GSUdfVFRZPXkKK0NPTkZJR19VTkFNRT15CisjIENPTkZJR19VTkVYUEFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VORVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfVU5JUT15CitDT05GSUdfVVNMRUVQPXkKKyMgQ09ORklHX1VVREVDT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VVRU5DT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19XQz15CisjIENPTkZJR19GRUFUVVJFX1dDX0xBUkdFIGlzIG5vdCBzZXQKK0NPTkZJR19XSE9BTUk9eQorQ09ORklHX1lFUz15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMKKyMKK0NPTkZJR19GRUFUVVJFX1ZFUkJPU0U9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBjcCBhbmQgbXYKKyMKKyMgQ09ORklHX0ZFQVRVUkVfUFJFU0VSVkVfSEFSRExJTktTIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbHMsIG1vcmUgYW5kIHRlbG5ldAorIworQ09ORklHX0ZFQVRVUkVfQVVUT1dJRFRIPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgZGYsIGR1LCBscworIworQ09ORklHX0ZFQVRVUkVfSFVNQU5fUkVBREFCTEU9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBtZDVzdW0sIHNoYTFzdW0sIHNoYTI1NnN1bSwgc2hhNTEyc3VtLCBzaGEzc3VtCisjCitDT05GSUdfRkVBVFVSRV9NRDVfU0hBMV9TVU1fQ0hFQ0s9eQorCisjCisjIENvbnNvbGUgVXRpbGl0aWVzCisjCitDT05GSUdfQ0hWVD15CisjIENPTkZJR19GR0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0NMRUFSPXkKK0NPTkZJR19ERUFMTE9DVlQ9eQorQ09ORklHX0RVTVBLTUFQPXkKKyMgQ09ORklHX0tCRF9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FERk9OVD15CitDT05GSUdfTE9BREtNQVA9eQorQ09ORklHX09QRU5WVD15CitDT05GSUdfUkVTRVQ9eQorIyBDT05GSUdfUkVTSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVTSVpFX1BSSU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TRVRDT05TT0xFPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0VUQ09OU09MRV9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VURk9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZPTlRfVEVYVFVBTF9NQVAgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VURk9OVF9ESVI9IiIKKyMgQ09ORklHX1NFVEtFWUNPREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVExPR0NPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0hPV0tFWSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGxvYWRmb250IGFuZCBzZXRmb250CisjCisjIENPTkZJR19GRUFUVVJFX0xPQURGT05UX1BTRjIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MT0FERk9OVF9SQVcgaXMgbm90IHNldAorCisjCisjIERlYmlhbiBVdGlsaXRpZXMKKyMKK0NPTkZJR19NS1RFTVA9eQorIyBDT05GSUdfUElQRV9QUk9HUkVTUyBpcyBub3Qgc2V0CitDT05GSUdfUlVOX1BBUlRTPXkKK0NPTkZJR19GRUFUVVJFX1JVTl9QQVJUU19MT05HX09QVElPTlM9eQorIyBDT05GSUdfRkVBVFVSRV9SVU5fUEFSVFNfRkFOQ1kgaXMgbm90IHNldAorQ09ORklHX1NUQVJUX1NUT1BfREFFTU9OPXkKK0NPTkZJR19GRUFUVVJFX1NUQVJUX1NUT1BfREFFTU9OX0ZBTkNZPXkKK0NPTkZJR19GRUFUVVJFX1NUQVJUX1NUT1BfREFFTU9OX0xPTkdfT1BUSU9OUz15CitDT05GSUdfV0hJQ0g9eQorCisjCisjIEVkaXRvcnMKKyMKK0NPTkZJR19BV0s9eQorQ09ORklHX0ZFQVRVUkVfQVdLX0xJQk09eQorQ09ORklHX0ZFQVRVUkVfQVdLX0dOVV9FWFRFTlNJT05TPXkKK0NPTkZJR19DTVA9eQorQ09ORklHX0RJRkY9eQorIyBDT05GSUdfRkVBVFVSRV9ESUZGX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9ESUZGX0RJUj15CisjIENPTkZJR19FRCBpcyBub3Qgc2V0CitDT05GSUdfUEFUQ0g9eQorQ09ORklHX1NFRD15CitDT05GSUdfVkk9eQorQ09ORklHX0ZFQVRVUkVfVklfTUFYX0xFTj0xMDI0CitDT05GSUdfRkVBVFVSRV9WSV84QklUPXkKK0NPTkZJR19GRUFUVVJFX1ZJX0NPTE9OPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1lBTktNQVJLPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1NFQVJDSD15CisjIENPTkZJR19GRUFUVVJFX1ZJX1JFR0VYX1NFQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9VU0VfU0lHTkFMUz15CisjIENPTkZJR19GRUFUVVJFX1ZJX0RPVF9DTUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9SRUFET05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1NFVE9QVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9TRVQgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfV0lOX1JFU0laRT15CisjIENPTkZJR19GRUFUVVJFX1ZJX0FTS19URVJNSU5BTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9VTkRPPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1VORE9fUVVFVUU9eQorQ09ORklHX0ZFQVRVUkVfVklfVU5ET19RVUVVRV9NQVg9MjU2CitDT05GSUdfRkVBVFVSRV9BTExPV19FWEVDPXkKKworIworIyBGaW5kaW5nIFV0aWxpdGllcworIworQ09ORklHX0ZJTkQ9eQorQ09ORklHX0ZFQVRVUkVfRklORF9QUklOVDA9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NVElNRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX01NSU49eQorQ09ORklHX0ZFQVRVUkVfRklORF9QRVJNPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfVFlQRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1hERVY9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NQVhERVBUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX05FV0VSPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9JTlVNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0ZJTkRfRVhFQz15CitDT05GSUdfRkVBVFVSRV9GSU5EX0VYRUNfUExVUz15CitDT05GSUdfRkVBVFVSRV9GSU5EX1VTRVI9eQorQ09ORklHX0ZFQVRVUkVfRklORF9HUk9VUD15CitDT05GSUdfRkVBVFVSRV9GSU5EX05PVD15CitDT05GSUdfRkVBVFVSRV9GSU5EX0RFUFRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEFSRU49eQorQ09ORklHX0ZFQVRVUkVfRklORF9TSVpFPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUFJVTkU9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0RFTEVURSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GSU5EX1BBVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9SRUdFWD15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfQ09OVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfTElOS1MgaXMgbm90IHNldAorQ09ORklHX0dSRVA9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9FR1JFUF9BTElBUz15CitDT05GSUdfRkVBVFVSRV9HUkVQX0ZHUkVQX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfQ09OVEVYVD15CitDT05GSUdfWEFSR1M9eQorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX0NPTkZJUk1BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfUVVPVEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9URVJNT1BUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9aRVJPX1RFUk0gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9SRVBMX1NUUj15CisKKyMKKyMgSW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0JPT1RDSEFSVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CT09UQ0hBUlREX0JMT0FURURfSEVBREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQk9PVENIQVJURF9DT05GSUdfRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFMVD15CisjIENPTkZJR19GRUFUVVJFX0NBTExfVEVMSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfVEVMSU5JVF9QQVRIPSIiCisjIENPTkZJR19JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVVNFX0lOSVRUQUIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9LSUxMX1JFTU9WRUQgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfS0lMTF9ERUxBWT0wCisjIENPTkZJR19GRUFUVVJFX0lOSVRfU0NUVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VYVFJBX1FVSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9DT1JFRFVNUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0lOSVRfVEVSTUlOQUxfVFlQRT0iIgorQ09ORklHX01FU0c9eQorIyBDT05GSUdfRkVBVFVSRV9NRVNHX0VOQUJMRV9PTkxZX0dST1VQIGlzIG5vdCBzZXQKKworIworIyBMb2dpbi9QYXNzd29yZCBNYW5hZ2VtZW50IFV0aWxpdGllcworIworIyBDT05GSUdfQUREX1NIRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTU9WRV9TSEVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIQURPV1BBU1NXRFMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0JCX1BXRF9HUlAgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0JCX1NIQURPVyBpcyBub3Qgc2V0CitDT05GSUdfVVNFX0JCX0NSWVBUPXkKKyMgQ09ORklHX1VTRV9CQl9DUllQVF9TSEEgaXMgbm90IHNldAorIyBDT05GSUdfQUREVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FERFVTRVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfTkFNRVMgaXMgbm90IHNldAorQ09ORklHX0xBU1RfSUQ9NjAwMDAKK0NPTkZJR19GSVJTVF9TWVNURU1fSUQ9MTAwCitDT05GSUdfTEFTVF9TWVNURU1fSUQ9OTk5CisjIENPTkZJR19BRERHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FEREdST1VQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FERFVTRVJfVE9fR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVMVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUxHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RFTF9VU0VSX0ZST01fR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfR0VUVFkgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU5fU0VTU0lPTl9BU19DSElMRCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJTl9TQ1JJUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTk9MT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFQ1VSRVRUWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVNTV0QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QQVNTV0RfV0VBS19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVFBXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUEFTU1dEIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0RFRkFVTFRfUEFTU1dEX0FMR089IiIKKyMgQ09ORklHX1NVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU1VfU1lTTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU1VfQ0hFQ0tTX1NIRUxMUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVUxPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMT0NLIGlzIG5vdCBzZXQKKworIworIyBMaW51eCBFeHQyIEZTIFByb2dzCisjCitDT05GSUdfQ0hBVFRSPXkKK0NPTkZJR19GU0NLPXkKKyMgQ09ORklHX0xTQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU5FMkZTIGlzIG5vdCBzZXQKKworIworIyBMaW51eCBNb2R1bGUgVXRpbGl0aWVzCisjCisjIENPTkZJR19NT0RJTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFBST0JFX1NNQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9EUFJPQkVfU01BTExfT1BUSU9OU19PTl9DTURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9EUFJPQkVfU01BTExfQ0hFQ0tfQUxSRUFEWV9MT0FERUQgaXMgbm90IHNldAorQ09ORklHX0lOU01PRD15CitDT05GSUdfUk1NT0Q9eQorQ09ORklHX0xTTU9EPXkKKyMgQ09ORklHX0ZFQVRVUkVfTFNNT0RfUFJFVFRZXzJfNl9PVVRQVVQgaXMgbm90IHNldAorQ09ORklHX01PRFBST0JFPXkKKyMgQ09ORklHX0ZFQVRVUkVfTU9EUFJPQkVfQkxBQ0tMSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVBNT0Q9eQorCisjCisjIE9wdGlvbnMgY29tbW9uIHRvIG11bHRpcGxlIG1vZHV0aWxzCisjCisjIENPTkZJR19GRUFUVVJFXzJfNF9NT0RVTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX1RSWV9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX1ZFUlNJT05fQ0hFQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfS1NZTU9PUFNfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FESU5LTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0xPQURfTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0xPQURfTUFQX0ZVTEwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVEFJTlRFRF9NT0RVTEU9eQorQ09ORklHX0ZFQVRVUkVfTU9EVVRJTFNfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfTU9EVVRJTFNfU1lNQk9MUz15CitDT05GSUdfREVGQVVMVF9NT0RVTEVTX0RJUj0iL2xpYi9tb2R1bGVzIgorQ09ORklHX0RFRkFVTFRfREVQTU9EX0ZJTEU9Im1vZHVsZXMuZGVwIgorCisjCisjIExpbnV4IFN5c3RlbSBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0JMT0NLREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVEFUVFIgaXMgbm90IHNldAorQ09ORklHX0ZTVFJJTT15CisjIENPTkZJR19NREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9DT05GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9SRU5BTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX1JFTkFNRV9SRUdFWFAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0xPQURfRklSTVdBUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQUNQSURfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkxLSURfVFlQRSBpcyBub3Qgc2V0CitDT05GSUdfRE1FU0c9eQorQ09ORklHX0ZFQVRVUkVfRE1FU0dfUFJFVFRZPXkKK0NPTkZJR19GQlNFVD15CitDT05GSUdfRkVBVFVSRV9GQlNFVF9GQU5DWT15CitDT05GSUdfRkVBVFVSRV9GQlNFVF9SRUFETU9ERT15CisjIENPTkZJR19GREZMVVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZERk9STUFUIGlzIG5vdCBzZXQKK0NPTkZJR19GRElTSz15CisjIENPTkZJR19GRElTS19TVVBQT1JUX0xBUkdFX0RJU0tTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0ZESVNLX1dSSVRBQkxFPXkKKyMgQ09ORklHX0ZFQVRVUkVfQUlYX0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0dJX0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU1VOX0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfT1NGX0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfR1BUX0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRkRJU0tfQURWQU5DRUQgaXMgbm90IHNldAorIyBDT05GSUdfRklOREZTIGlzIG5vdCBzZXQKK0NPTkZJR19GTE9DSz15CisjIENPTkZJR19GUkVFUkFNRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19GU0NLX01JTklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01LRlNfRVhUMiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX01JTklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUlOSVgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01LRlNfUkVJU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01LRlNfVkZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRPUFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9HRVRPUFRfTE9ORyBpcyBub3Qgc2V0CitDT05GSUdfSEVYRFVNUD15CisjIENPTkZJR19GRUFUVVJFX0hFWERVTVBfUkVWRVJTRSBpcyBub3Qgc2V0CisjIENPTkZJR19IRCBpcyBub3Qgc2V0CitDT05GSUdfSFdDTE9DSz15CitDT05GSUdfRkVBVFVSRV9IV0NMT0NLX0xPTkdfT1BUSU9OUz15CitDT05GSUdfRkVBVFVSRV9IV0NMT0NLX0FESlRJTUVfRkhTPXkKKyMgQ09ORklHX0lQQ1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ1MgaXMgbm90IHNldAorQ09ORklHX0xPU0VUVVA9eQorIyBDT05GSUdfTFNQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTFNVU0IgaXMgbm90IHNldAorQ09ORklHX01LU1dBUD15CisjIENPTkZJR19GRUFUVVJFX01LU1dBUF9VVUlEIGlzIG5vdCBzZXQKK0NPTkZJR19NT1JFPXkKK0NPTkZJR19NT1VOVD15CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0xBQkVMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01PVU5UX05GUz15CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0NJRlMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTU9VTlRfRkxBR1M9eQorQ09ORklHX0ZFQVRVUkVfTU9VTlRfRlNUQUI9eQorQ09ORklHX1BJVk9UX1JPT1Q9eQorQ09ORklHX1JEQVRFPXkKKyMgQ09ORklHX1JERVYgaXMgbm90IHNldAorIyBDT05GSUdfUkVBRFBST0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDV0FLRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1JJUFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NSSVBUUkVQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEFSQ0ggaXMgbm90IHNldAorQ09ORklHX1NXQVBPTk9GRj15CitDT05GSUdfRkVBVFVSRV9TV0FQT05fRElTQ0FSRD15CitDT05GSUdfRkVBVFVSRV9TV0FQT05fUFJJPXkKK0NPTkZJR19TV0lUQ0hfUk9PVD15CitDT05GSUdfVU1PVU5UPXkKK0NPTkZJR19GRUFUVVJFX1VNT1VOVF9BTEw9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBtb3VudC91bW91bnQKKyMKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xPT1A9eQorQ09ORklHX0ZFQVRVUkVfTU9VTlRfTE9PUF9DUkVBVEU9eQorIyBDT05GSUdfRkVBVFVSRV9NVEFCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVk9MVU1FSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9CVFJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYRkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRjJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0ZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0lTTzk2NjAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9KRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9MSU5VWFJBSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9MSU5VWFNXQVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9MVUtTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTklMRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9OVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfT0NGUzIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9SRUlTRVJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1JPTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9TWVNWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfVURGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfWEZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFV0aWxpdGllcworIworIyBDT05GSUdfQ09OU1BZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NST05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1JPTkRfRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NST05EX0NBTExfU0VORE1BSUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ1JPTkRfRElSPSIiCitDT05GSUdfTEVTUz15CitDT05GSUdfRkVBVFVSRV9MRVNTX01BWExJTkVTPTk5OTk5OTkKK0NPTkZJR19GRUFUVVJFX0xFU1NfQlJBQ0tFVFM9eQorQ09ORklHX0ZFQVRVUkVfTEVTU19GTEFHUz15CisjIENPTkZJR19GRUFUVVJFX0xFU1NfTUFSS1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX1JFR0VYUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfV0lOQ0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0FTS19URVJNSU5BTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfREFTSENNRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfTElORU5VTVMgaXMgbm90IHNldAorIyBDT05GSUdfTkFORFdSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTkREVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTEw9eQorIyBDT05GSUdfU0VUU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVNLU0VUX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUFUVEFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklERVRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJTUtWT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJUk1WT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJUlNWT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJVVBEQVRFVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQURKVElNRVggaXMgbm90IHNldAorIyBDT05GSUdfQkJDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DT01QUkVTU19CQkNPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUVQIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0JFRVBfRlJFUT0wCitDT05GSUdfRkVBVFVSRV9CRUVQX0xFTkdUSF9NUz0wCisjIENPTkZJR19DSEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9OT0ZBSUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1RUWV9ISUZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9JTVBMSUNJVF9DUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfU1dBTExPV19PUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9TRU5EX0VTQ0FQRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1ZBUl9BQk9SVF9MRU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX0NMUl9BQk9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NST05UQUIgaXMgbm90IHNldAorQ09ORklHX0RDPXkKKyMgQ09ORklHX0ZFQVRVUkVfRENfTElCTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0QgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX01PRExPQUQgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX0ZHX05QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREVWRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRUpFQ1RfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19GQlNQTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX0VSQVNFQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZRCBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEFTVF9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xBU1RfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSERQQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0dFVF9JREVOVElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1NDQU5fSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1VOUkVHSVNURVJfSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX0RSSVZFX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fVFJJU1RBVEVfSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX0dFVFNFVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFLRURFVlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NQUtFREVWU19MRUFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUFLRURFVlNfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFOIGlzIG5vdCBzZXQKK0NPTkZJR19NSUNST0NPTT15CisjIENPTkZJR19NT1VOVFBPSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBSURBVVRPUlVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURBSEVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5MRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19SWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRTSUQgaXMgbm90IHNldAorQ09ORklHX1NUUklOR1M9eQorQ09ORklHX1RJTUU9eQorIyBDT05GSUdfVElNRU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19UVFlTSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPTE5BTUUgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcgVXRpbGl0aWVzCisjCisjIENPTkZJR19OQU1FSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OQU1FSUZfRVhURU5ERUQgaXMgbm90IHNldAorIyBDT05GSUdfTkJEQ0xJRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19OQz15CisjIENPTkZJR19OQ19TRVJWRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkNfRVhUUkEgaXMgbm90IHNldAorIyBDT05GSUdfTkNfMTEwX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfUElORz15CitDT05GSUdfUElORzY9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfUElORz15CisjIENPTkZJR19XSE9JUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JUFY2PXkKKyMgQ09ORklHX0ZFQVRVUkVfVU5JWF9MT0NBTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9QUkVGRVJfSVBWNF9BRERSRVNTPXkKKyMgQ09ORklHX1ZFUkJPU0VfUkVTT0xVVElPTl9FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUElORyBpcyBub3Qgc2V0CisjIENPTkZJR19CUkNUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQlJDVExfU0hPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ETlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSX1dBS0UgaXMgbm90IHNldAorIyBDT05GSUdfRkFLRUlERU5URCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQRF9BQ0NFUFRfQlJPS0VOX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBfQVVUSEVOVElDQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRlRQR0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUFBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUEdFVFBVVF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0hPU1ROQU1FPXkKKyMgQ09ORklHX0hUVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfUkFOR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUVUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQkFTSUNfQVVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0FVVEhfTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQ0dJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQ09ORklHX1dJVEhfU0NSSVBUX0lOVEVSUFIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9TRVRfUkVNT1RFX1BPUlRfVE9fRU5WIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRU5DT0RFX1VSTF9TVFIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9FUlJPUl9QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1BST1hZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfR1pJUCBpcyBub3Qgc2V0CitDT05GSUdfSUZDT05GSUc9eQorQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfU1RBVFVTPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX01FTVNUQVJUX0lPQUREUl9JUlEgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfSFc9eQorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19CUk9BRENBU1RfUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JRkVOU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSUZQTFVHRCBpcyBub3Qgc2V0CitDT05GSUdfSUZVUERPV049eQorQ09ORklHX0lGVVBET1dOX0lGU1RBVEVfUEFUSD0iL3Zhci9ydW4vaWZzdGF0ZSIKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUF9CVUlMVElOIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lGQ09ORklHX0JVSUxUSU49eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWND15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUFY2PXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX01BUFBJTkc9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fRVhURVJOQUxfREhDUD15CisjIENPTkZJR19JTkVURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9FQ0hPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0RJU0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9EQVlUSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0NIQVJHRU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9SUEMgaXMgbm90IHNldAorQ09ORklHX0lQPXkKK0NPTkZJR19GRUFUVVJFX0lQX0FERFJFU1M9eQorQ09ORklHX0ZFQVRVUkVfSVBfTElOSz15CitDT05GSUdfRkVBVFVSRV9JUF9ST1VURT15CitDT05GSUdfRkVBVFVSRV9JUF9UVU5ORUw9eQorIyBDT05GSUdfRkVBVFVSRV9JUF9SVUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBfU0hPUlRfRk9STVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUF9SQVJFX1BST1RPQ09MUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUEFERFIgaXMgbm90IHNldAorIyBDT05GSUdfSVBMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBUVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBSVUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ0FMQyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQQ0FMQ19GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQQ0FMQ19MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX05FVFNUQVQ9eQorIyBDT05GSUdfRkVBVFVSRV9ORVRTVEFUX1dJREUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ORVRTVEFUX1BSRyBpcyBub3Qgc2V0CitDT05GSUdfTlNMT09LVVA9eQorIyBDT05GSUdfTlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05UUERfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTlRQRF9DT05GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19ST1VURT15CisjIENPTkZJR19TTEFUVEFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BTVkQgaXMgbm90IHNldAorQ09ORklHX1RFTE5FVD15CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVF9UVFlQRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9URUxORVRfQVVUT0xPR0lOPXkKKyMgQ09ORklHX1RFTE5FVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URUxORVREX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URUxORVREX0lORVREX1dBSVQgaXMgbm90IHNldAorQ09ORklHX1RGVFA9eQorIyBDT05GSUdfVEZUUEQgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciB0ZnRwL3RmdHBkCisjCitDT05GSUdfRkVBVFVSRV9URlRQX0dFVD15CitDT05GSUdfRkVBVFVSRV9URlRQX1BVVD15CisjIENPTkZJR19GRUFUVVJFX1RGVFBfQkxPQ0tTSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEZUUF9QUk9HUkVTU19CQVIgaXMgbm90IHNldAorIyBDT05GSUdfVEZUUF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VST1VURT15CisjIENPTkZJR19UUkFDRVJPVVRFNiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfU09VUkNFX1JPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9VU0VfSUNNUCBpcyBub3Qgc2V0CisjIENPTkZJR19UVU5DVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UVU5DVExfVUcgaXMgbm90IHNldAorIyBDT05GSUdfVURIQ1BDNiBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BEPXkKKyMgQ09ORklHX0RIQ1BSRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfRFVNUExFQVNFUz15CisjIENPTkZJR19GRUFUVVJFX1VESENQRF9XUklURV9MRUFTRVNfRUFSTFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfQkFTRV9JUF9PTl9NQUMgaXMgbm90IHNldAorQ09ORklHX0RIQ1BEX0xFQVNFU19GSUxFPSIvdmFyL2xpYi9taXNjL3VkaGNwZC5sZWFzZXMiCitDT05GSUdfVURIQ1BDPXkKK0NPTkZJR19GRUFUVVJFX1VESENQQ19BUlBJTkc9eQorQ09ORklHX0ZFQVRVUkVfVURIQ1BDX1NBTklUSVpFT1BUPXkKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BfREVCVUc9MAorIyBDT05GSUdfRkVBVFVSRV9VREhDUF9SRkMzMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfODAyMVEgaXMgbm90IHNldAorQ09ORklHX1VESENQQ19ERUZBVUxUX1NDUklQVD0iL3Vzci9zaGFyZS91ZGhjcGMvZGVmYXVsdC5zY3JpcHQiCitDT05GSUdfVURIQ1BDX1NMQUNLX0ZPUl9CVUdHWV9TRVJWRVJTPTgwCitDT05GSUdfSUZVUERPV05fVURIQ1BDX0NNRF9PUFRJT05TPSItUiAtbiIKKyMgQ09ORklHX1VEUFNWRCBpcyBub3Qgc2V0CisjIENPTkZJR19WQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19XR0VUPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfU1RBVFVTQkFSPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfQVVUSEVOVElDQVRJT049eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9USU1FT1VUPXkKKyMgQ09ORklHX1pDSVAgaXMgbm90IHNldAorCisjCisjIFByaW50IFV0aWxpdGllcworIworIyBDT05GSUdfTFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQUiBpcyBub3Qgc2V0CisjIENPTkZJR19MUFEgaXMgbm90IHNldAorCisjCisjIE1haWwgVXRpbGl0aWVzCisjCisjIENPTkZJR19NQUtFTUlNRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NSU1FX0NIQVJTRVQ9IiIKKyMgQ09ORklHX1BPUE1BSUxESVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QT1BNQUlMRElSX0RFTElWRVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRk9STUlNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFRk9STUlNRV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VORE1BSUwgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3MgVXRpbGl0aWVzCisjCisjIENPTkZJR19JT1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfTFNPRiBpcyBub3Qgc2V0CisjIENPTkZJR19NUFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfTk1FVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQVAgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUFNUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BXRFggaXMgbm90IHNldAorIyBDT05GSUdfU01FTUNBUCBpcyBub3Qgc2V0CitDT05GSUdfVE9QPXkKK0NPTkZJR19GRUFUVVJFX1RPUF9DUFVfVVNBR0VfUEVSQ0VOVEFHRT15CitDT05GSUdfRkVBVFVSRV9UT1BfQ1BVX0dMT0JBTF9QRVJDRU5UUz15CisjIENPTkZJR19GRUFUVVJFX1RPUF9TTVBfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX0RFQ0lNQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX1NNUF9QUk9DRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19VUFRJTUU9eQorIyBDT05GSUdfRkVBVFVSRV9VUFRJTUVfVVRNUF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFPXkKK0NPTkZJR19GVVNFUj15CitDT05GSUdfS0lMTD15CitDT05GSUdfS0lMTEFMTD15CisjIENPTkZJR19LSUxMQUxMNSBpcyBub3Qgc2V0CisjIENPTkZJR19QR1JFUCBpcyBub3Qgc2V0CitDT05GSUdfUElET0Y9eQorIyBDT05GSUdfRkVBVFVSRV9QSURPRl9TSU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QSURPRl9PTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BLSUxMIGlzIG5vdCBzZXQKK0NPTkZJR19QUz15CitDT05GSUdfRkVBVFVSRV9QU19XSURFPXkKK0NPTkZJR19GRUFUVVJFX1BTX0xPTkc9eQorIyBDT05GSUdfRkVBVFVSRV9QU19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFNfQURESVRJT05BTF9DT0xVTU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFNfVU5VU1VBTF9TWVNURU1TIGlzIG5vdCBzZXQKK0NPTkZJR19SRU5JQ0U9eQorQ09ORklHX0JCX1NZU0NUTD15CisjIENPTkZJR19GRUFUVVJFX1NIT1dfVEhSRUFEUyBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0g9eQorCisjCisjIFJ1bml0IFV0aWxpdGllcworIworIyBDT05GSUdfUlVOU1YgaXMgbm90IHNldAorIyBDT05GSUdfUlVOU1ZESVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SVU5TVkRJUl9MT0cgaXMgbm90IHNldAorIyBDT05GSUdfU1YgaXMgbm90IHNldAorQ09ORklHX1NWX0RFRkFVTFRfU0VSVklDRV9ESVI9IiIKKyMgQ09ORklHX1NWTE9HRCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFBTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRVSURHSUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5WVUlER0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVkRJUiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0ZUTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ0hDT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSENPTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfR0VURU5GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRTRUJPT0wgaXMgbm90IHNldAorIyBDT05GSUdfTE9BRF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUFUQ0hQQVRIQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU1RPUkVDT04gaXMgbm90IHNldAorIyBDT05GSUdfUlVOQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUlVOQ09OX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUxJTlVYRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRFTkZPUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0VURklMRVNfQ0hFQ0tfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVFNFQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVNUQVRVUyBpcyBub3Qgc2V0CisKKyMKKyMgU2hlbGxzCisjCitDT05GSUdfQVNIPXkKK0NPTkZJR19BU0hfQkFTSF9DT01QQVQ9eQorIyBDT05GSUdfQVNIX0lETEVfVElNRU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQVNIX0pPQl9DT05UUk9MPXkKK0NPTkZJR19BU0hfQUxJQVM9eQorQ09ORklHX0FTSF9HRVRPUFRTPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9FQ0hPPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9QUklOVEY9eQorQ09ORklHX0FTSF9CVUlMVElOX1RFU1Q9eQorQ09ORklHX0FTSF9IRUxQPXkKKyMgQ09ORklHX0FTSF9DTURDTUQgaXMgbm90IHNldAorIyBDT05GSUdfQVNIX01BSUwgaXMgbm90IHNldAorQ09ORklHX0FTSF9PUFRJTUlaRV9GT1JfU0laRT15CisjIENPTkZJR19BU0hfUkFORE9NX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0FTSF9FWFBBTkRfUFJNVD15CisjIENPTkZJR19DVFRZSEFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQkFTSF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9CUkFDRV9FWFBBTlNJT04gaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9IRUxQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSU5URVJBQ1RJVkUgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9TQVZFSElTVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0pPQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9JRiBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0xPT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQ0FTRSBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0ZVTkNUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0xPQ0FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfUkFORE9NX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9FWFBPUlRfTiBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX01PREVfWCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfU0hfSVNfQVNIPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hfSVNfSFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIX0lTX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CQVNIX0lTX0FTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JBU0hfSVNfSFVTSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9CQVNIX0lTX05PTkU9eQorQ09ORklHX1NIX01BVEhfU1VQUE9SVD15CisjIENPTkZJR19TSF9NQVRIX1NVUFBPUlRfNjQgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfU0hfRVhUUkFfUVVJRVQ9eQorIyBDT05GSUdfRkVBVFVSRV9TSF9TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hfTk9GT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0hJU1RGSUxFU0laRT15CisKKyMKKyMgU3lzdGVtIExvZ2dpbmcgVXRpbGl0aWVzCisjCitDT05GSUdfU1lTTE9HRD15CitDT05GSUdfRkVBVFVSRV9ST1RBVEVfTE9HRklMRT15CitDT05GSUdfRkVBVFVSRV9SRU1PVEVfTE9HPXkKK0NPTkZJR19GRUFUVVJFX1NZU0xPR0RfRFVQPXkKK0NPTkZJR19GRUFUVVJFX1NZU0xPR0RfQ0ZHPXkKK0NPTkZJR19GRUFUVVJFX1NZU0xPR0RfUkVBRF9CVUZGRVJfU0laRT0yNTYKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0c9eQorQ09ORklHX0ZFQVRVUkVfSVBDX1NZU0xPR19CVUZGRVJfU0laRT02NAorQ09ORklHX0xPR1JFQUQ9eQorQ09ORklHX0ZFQVRVUkVfTE9HUkVBRF9SRURVQ0VEX0xPQ0tJTkc9eQorQ09ORklHX0ZFQVRVUkVfS01TR19TWVNMT0c9eQorQ09ORklHX0tMT0dEPXkKKworIworIyBrbG9nZCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBzeXNsb2cgdG8ga2VybmVsIHByaW50ayBidWZmZXIKKyMKK0NPTkZJR19GRUFUVVJFX0tMT0dEX0tMT0dDVEw9eQorQ09ORklHX0xPR0dFUj15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZmFpbF9vbl9ub19tZWRpYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9mYWlsX29uX25vX21lZGlhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NDVmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZmFpbF9vbl9ub19tZWRpYS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIGN1cnJlbnQgYmVoYXZpb3VyIG9mIGJ1c3lib3ggaXMgdG8gdHJ5IGFsbCBmc3R5cGUgd2hlbiBhdXRvbW91bnRpbmcKK2V2ZW4gd2hlbiBubyBtZWRpYSBleGlzdHMuICBUaGUgdXRpbC1saW51eCBtb3VudCBjb21tYW5kIGJhaWxzIHdoZW4gbm8KK21lZGlhIGV4aXN0cywgc28gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgYnVzeWJveCB0byBkbyB0aGUgc2FtZS4KKworSXQgY291bGQgYWxzbyBiZSBhcmd1ZWQgdGhhdCB0aGUgS0VSTl9JTkZPIG1lc3NhZ2UgZnJvbSBidHJmcyBjb3VsZCBiZQorcmVtb3ZlZCwgYnV0IHRoYXQgd291bGQgYmUgaGFyZGVyIHRvIGFjY29tcGxpc2guCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogYnVzeWJveC0xLjIwLjIvdXRpbC1saW51eC9tb3VudC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIwLjIub3JpZy91dGlsLWxpbnV4L21vdW50LmMKKysrKyBidXN5Ym94LTEuMjAuMi91dGlsLWxpbnV4L21vdW50LmMKK0BAIC01OTgsNyArNTk4LDEzIEBAIHN0YXRpYyBpbnQgbW91bnRfaXRfbm93KHN0cnVjdCBtbnRlbnQgKm0KKyAJCQkJYnJlYWs7CisgCQkJZXJybm8gPSBlcnJub19zYXZlOworIAkJfQorLQorKwkJLyoKKysJCSAqIEJyZWFrIGlmIHRoZXJlIGlzIG5vIG1lZGlhLCBubyBwb2ludCByZXRyeWluZyBmb3IgYWxsCisrCQkgKiBmcyB0eXBlcyBzaW5jZSB0aGVyZSBpcyBubyBtZWRpYSBhdmFpbGFibGUKKysJCSAqLworKwkJaWYgKHJjID09IC0xICYmIGVycm5vID09IEVOT01FRElVTSkgeworKwkJCWJiX3BlcnJvcl9tc2dfYW5kX2RpZSgibW91bnRpbmcgJXMgb24gJXMgZmFpbGVkIiwgbXAtPm1udF9mc25hbWUsIG1wLT5tbnRfZGlyKTsKKysJCX0KKyAJCWlmICghcmMgfHwgKHZmc2ZsYWdzICYgTVNfUkRPTkxZKSB8fCAoZXJybm8gIT0gRUFDQ0VTICYmIGVycm5vICE9IEVST0ZTKSkKKyAJCQlicmVhazsKKyAJCWlmICghKHZmc2ZsYWdzICYgTVNfU0lMRU5UKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTUyOGZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldF9oZWFkZXJfdGFyLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIGNvcHkgY29tbWl0IG1lc3NhZ2UgZnJvbSBPRSBhcyB0aGUgcGF0Y2ggY29tbWVudDoKKyMgICAgY29tbWl0IDVhMGUxZDQ3M2NhN2FjYTVmZmVmZmZlOWEyZWM0NGFlN2ExZjM1YmMKKyMgICAgQXV0aG9yOiBGcmFucyBNZXVsZW5icm9la3MgPGZyYW5zbWV1bGVuYnJvZWtzQGdtYWlsLmNvbT4KKyMgICAgRGF0ZTogICBXZWQgRmViIDExIDIyOjQwOjIxIDIwMDkgKzAxMDAKKyMKKyMgICAgYnVzeWJveDogZml4IHRhciBwcm9ibGVtIHdpdGggZmlsZW5hbWVzIHRoYXQgYXJlIGV4YWN0bHkgMTAwIGJ5dGVzCisjCisjIGFib3ZlIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA3LTA2CisKKy0tLSBidXN5Ym94LTEuMTMuMi9hcmNoaXZhbC9saWJhcmNoaXZlL2dldF9oZWFkZXJfdGFyLmMub3JpZwkyMDA4LTExLTA5IDE4OjI4OjAyLjAwMDAwMDAwMCArMDEwMAorKysrIGJ1c3lib3gtMS4xMy4yL2FyY2hpdmFsL2xpYmFyY2hpdmUvZ2V0X2hlYWRlcl90YXIuYwkyMDA5LTAyLTExIDIyOjM0OjUyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI1Miw2ICsyNTIsOCBAQAorIAkJCWZpbGVfaGVhZGVyLT5uYW1lID0gY29uY2F0X3BhdGhfZmlsZSh0YXIucHJlZml4LCB0YXIubmFtZSk7CisgCQl9IGVsc2UKKyAJCQlmaWxlX2hlYWRlci0+bmFtZSA9IHhzdHJkdXAodGFyLm5hbWUpOworKwkJaWYgKHN0cmxlbihmaWxlX2hlYWRlci0+bmFtZSkgPiAxMDApIAorKwkJCWZpbGVfaGVhZGVyLT5uYW1lWzEwMF0gPSAwOworIAl9CisgCisgCS8qIFNldCBiaXRzIDEyLTE1IG9mIHRoZSBmaWxlcyBtb2RlICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiMGE0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRvcHRzLmNmZwpAQCAtMCwwICsxLDMgQEAKK0NPTkZJR19HRVRPUFQ9eQorQ09ORklHX0xPTkdfT1BUUz15CitDT05GSUdfRkVBVFVSRV9HRVRPUFRfTE9ORz15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbG9naW4tdXRpbGl0aWVzLmNmZyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9sb2dpbi11dGlsaXRpZXMuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWIyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbG9naW4tdXRpbGl0aWVzLmNmZwpAQCAtMCwwICsxLDEzIEBACitDT05GSUdfRkVBVFVSRV9TSEFET1dQQVNTV0RTPXkKK0NPTkZJR19BRERVU0VSPXkKK0NPTkZJR19GRUFUVVJFX0FERFVTRVJfTE9OR19PUFRJT05TPXkKK0NPTkZJR19BRERHUk9VUD15CitDT05GSUdfRkVBVFVSRV9BRERHUk9VUF9MT05HX09QVElPTlM9eQorQ09ORklHX0RFTFVTRVI9eQorQ09ORklHX0RFTEdST1VQPXkKK0NPTkZJR19HRVRUWT15CitDT05GSUdfTE9HSU49eQorQ09ORklHX1BBU1NXRD15CitDT05GSUdfU1U9eQorQ09ORklHX1NVTE9HSU49eQorQ09ORklHX1ZMT0NLPXkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tb3VudC12aWEtbGFiZWwuY2ZnIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L21vdW50LXZpYS1sYWJlbC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlN2FiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tb3VudC12aWEtbGFiZWwuY2ZnCkBAIC0wLDAgKzEsOSBAQAorQ09ORklHX0JMS0lEPXkKK0NPTkZJR19GRUFUVVJFX0JMS0lEX1RZUEU9eQorQ09ORklHX0ZFQVRVUkVfTU9VTlRfTEFCRUw9eQorQ09ORklHX1ZPTFVNRUlEPXkKK0NPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0JUUkZTPXkKK0NPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYVD15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GMkZTPXkKK0NPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0ZBVD15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9TUVVBU0hGUz15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDJjNzRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitUaGlzIGFkZHMgY29ubm1hbmQgdG8gdGhlIGxpc3Qgb2Yga25vdyBkaGNwIGNsaWVudHMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBidXN5Ym94LTEuMjIuMS9uZXR3b3JraW5nL2lmdXBkb3duLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBidXN5Ym94LTEuMjIuMS5vcmlnL25ldHdvcmtpbmcvaWZ1cGRvd24uYworKysrIGJ1c3lib3gtMS4yMi4xL25ldHdvcmtpbmcvaWZ1cGRvd24uYworQEAgLTUyMSw2ICs1MjEsMTAgQEAgc3RydWN0IGRoY3BfY2xpZW50X3QgeworIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBkaGNwX2NsaWVudF90IGV4dF9kaGNwX2NsaWVudHNbXSA9IHsKKysJeyAiY29ubm1hbmQiLAorKwkJInRydWUiLAorKwkJInRydWUiLAorKwl9LAorIAl7ICJkaGNwY2QiLAorIAkJImRoY3BjZFtbIC1oICVob3N0bmFtZSVdXVtbIC1pICV2ZW5kb3IlXV1bWyAtSSAlY2xpZW50JV1dW1sgLWwgJWxlYXNldGltZSVdXSAlaWZhY2UlIiwKKyAJCSJkaGNwY2QgLWsgJWlmYWNlJSIsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlNzJkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zaGExc3VtLmNmZwpAQCAtMCwwICsxIEBACitDT05GSUdfU0hBMVNVTT15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMjU2c3VtLmNmZyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zaGEyNTZzdW0uY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjUyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMjU2c3VtLmNmZwpAQCAtMCwwICsxIEBACitDT05GSUdfU0hBMjU2U1VNPXkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjIzLjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZDlmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yMy4yLmJiCkBAIC0wLDAgKzEsNTAgQEAKK3JlcXVpcmUgYnVzeWJveC5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmJ1c3lib3gubmV0L2Rvd25sb2Fkcy9idXN5Ym94LSR7UFZ9LnRhci5iejI7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgZmlsZTovL2dldF9oZWFkZXJfdGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmluZC10b3VjaHNjcmVlbi5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWNyb24gXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1odHRwZCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXVkaGNwZCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0LnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9zaW1wbGUuc2NyaXB0IFwKKyAgICAgICAgICAgZmlsZTovL2h3Y2xvY2suc2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQuYnVzeWJveCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsb2cgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLXN0YXJ0dXAuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsb2cuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYgXAorICAgICAgICAgICBmaWxlOi8vbWRldi5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL21kZXYtbW91bnQuc2ggXAorICAgICAgICAgICBmaWxlOi8vdW1vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vZGVmY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4gXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1rbG9nZC5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2ZhaWxfb25fbm9fbWVkaWEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5ldGQgXAorICAgICAgICAgICBmaWxlOi8vbG9naW4tdXRpbGl0aWVzLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaWZjb25maWctZml4LWRvdWJsZS1mcmVlLWZhdGFsLWVycm9yLWluLUlORVRfc3ByaW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudC12aWEtbGFiZWwuY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL3NoYTFzdW0uY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL3NoYTI1NnN1bS5jZmcgXAorICAgICAgICAgICBmaWxlOi8vZ2V0b3B0cy5jZmcgXAorIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICI3OTI1NjgzZDdkZDEwNWFhYmU5YjZiNjE4ZDQ4Y2M3MyIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjA1YTZmOWUyMWFhZDhjMDk4ZTM4OGFlNzdkZTdiMjM2MTk0MWFmYTcxNTdlZjc0MjE2NzAzMzk1YjE0ZTMxOWEiCisKK0VYVFJBX09FTUFLRSArPSAiVj0xIEFSQ0g9JHtUQVJHRVRfQVJDSH0gQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IFNLSVBfU1RSSVA9eSIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICAgICAgIGNwIC1yICR7Qn0vdGVzdHN1aXRlICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICBjcCAke0J9Ly5jb25maWcgICAgICAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAgbG4gLXMgL2Jpbi9idXN5Ym94ICAgJHtEfSR7UFRFU1RfUEFUSH0vYnVzeWJveAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlNzJmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF9naXQuYmIKQEAgLTAsMCArMSw1NCBAQAorcmVxdWlyZSBidXN5Ym94LmluYworCitTUkNSRVYgPSAiYmU5NDdjNGQ5N2MwZGFjYjcwM2E2ZjI0ZGQ4MTNmZjZkZDNhMzNiNiIKKyMgTG9va291dCBmb3IgUFYgYnVtcCB0b28gd2hlbiBTUkNSRVYgaXMgY2hhbmdlZAorUFYgPSAiMS4yMy4yK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2J1c3lib3gubmV0L2J1c3lib3guZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2dldF9oZWFkZXJfdGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmluZC10b3VjaHNjcmVlbi5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWNyb24gXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1odHRwZCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXVkaGNwZCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0LnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9zaW1wbGUuc2NyaXB0IFwKKyAgICAgICAgICAgZmlsZTovL2h3Y2xvY2suc2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQuYnVzeWJveCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsb2cgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLXN0YXJ0dXAuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsb2cuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYgXAorICAgICAgICAgICBmaWxlOi8vbWRldi5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL21kZXYtbW91bnQuc2ggXAorICAgICAgICAgICBmaWxlOi8vdW1vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vZGVmY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4gXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1rbG9nZC5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2ZhaWxfb25fbm9fbWVkaWEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5ldGQgXAorICAgICAgICAgICBmaWxlOi8vbG9naW4tdXRpbGl0aWVzLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaWZjb25maWctZml4LWRvdWJsZS1mcmVlLWZhdGFsLWVycm9yLWluLUlORVRfc3ByaW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudC12aWEtbGFiZWwuY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL3NoYTFzdW0uY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL3NoYTI1NnN1bS5jZmcgXAorIgorCitFWFRSQV9PRU1BS0UgKz0gIlY9MSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBTS0lQX1NUUklQPXkiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgICBjcCAtciAke0J9L3Rlc3RzdWl0ZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAgY3AgJHtCfS8uY29uZmlnICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGxuIC1zIC9iaW4vYnVzeWJveCAgICR7RH0ke1BURVNUX1BBVEh9L2J1c3lib3gKK30KKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWNyb24gYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtY3JvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMGU2YjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWNyb24KQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCitEQUVNT049L3Vzci9zYmluL2Nyb25kCitOQU1FPWNyb25kCitERVNDPSJCdXN5Ym94IFBlcmlvZGljIENvbW1hbmQgU2NoZWR1bGVyIgorQVJHUz0iLWMgL2V0Yy9jcm9uL2Nyb250YWJzIgorCit0ZXN0IC1mICREQUVNT04gfHwgZXhpdCAwCisKK3NldCAtZQorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgZWNobyAtbiAic3RhcnRpbmcgJERFU0M6ICROQU1FLi4uICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiAkTkFNRSAtYSAkREFFTU9OIC0tICRBUkdTCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJzdG9wcGluZyAkREVTQzogJE5BTUUuLi4gIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uICROQU1FCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBlY2hvIC1uICJyZXN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisgCSQwIHN0b3AKKwkkMCBzdGFydAorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVsb2FkKQorICAgIAllY2hvIC1uICJyZWxvYWRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAgICAJa2lsbGFsbCAtSFVQICQoYmFzZW5hbWUgJHtEQUVNT059KQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxyZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM4MzQ4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtaHR0cGQKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCitEQUVNT049L3Vzci9zYmluL2h0dHBkCitOQU1FPWh0dHBkCitERVNDPSJCdXN5Ym94IEhUVFAgRGFlbW9uIgorSFRUUFJPT1Q9Ii9zcnYvd3d3IgorQVJHUz0iLWggJEhUVFBST09UIgorCit0ZXN0IC1mICREQUVNT04gfHwgZXhpdCAwCisKK3NldCAtZQorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgZWNobyAtbiAic3RhcnRpbmcgJERFU0M6ICROQU1FLi4uICIKKwlpZiBbICEgLWQgJEhUVFBST09UIF07IHRoZW4KKwkJZWNobyAiJEhUVFBST09UIGlzIG1pc3NpbmcuIgorCQlleGl0IDEKKwlmaQorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1iIC1uICROQU1FIC1hICREQUVNT04gLS0gJEFSR1MKKwllY2hvICJkb25lLiIKKwk7OworICAgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gInN0b3BwaW5nICRERVNDOiAkTkFNRS4uLiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLW4gJE5BTUUKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlc3RhcnQpCisgICAgICAgIGVjaG8gInJlc3RhcnRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAJJDAgc3RvcAorCSQwIHN0YXJ0CisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZWxvYWQpCisgICAgCWVjaG8gLW4gInJlbG9hZGluZyAkREVTQzogJE5BTUUuLi4gIgorICAgIAlraWxsYWxsIC1IVVAgJChiYXNlbmFtZSAke0RBRU1PTn0pCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fHJlbG9hZH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1rbG9nZC5zZXJ2aWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Yzc3NTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbgpAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249S2VybmVsIExvZ2dpbmcgU2VydmljZQorCitbU2VydmljZV0KK0V4ZWNTdGFydD1AYmFzZV9zYmluZGlyQC9rbG9nZCAtbgorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxNmNhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1zeXNsb2cuZGVmYXVsdApAQCAtMCwwICsxLDI1IEBACitPUFRJT05TPSItQyIKKyMgVGhlIGFib3ZlIG9wdGlvbiBtZWFucyBzeXNsb2dkIHdpbGwgbG9nIHRvIDE2SyBzaG0gY2lyY3VsYXIgYnVmZmVyLgorIyBZb3UgY291bGQgdXNlIGBsb2dyZWFkJyB0byByZWFkIGl0LgorCisjIEFsbCBhdmFpbGFibGUgb3B0aW9ucyBhcmU6CisjIC1PIEZJTEUgICAgICAgOiAgICAgIExvZyB0byBGSUxFIChkZWZhdWx0Oi92YXIvbG9nL21lc3NhZ2VzKQorIyAtbCBOICAgICAgICAgIDogICAgICBMb2cgb25seSBtZXNzYWdlcyBtb3JlIHVyZ2VudCB0aGFuIHByaW8gTiAoMS04KQorIyAtUyAgICAgICAgICAgIDogICAgICBTbWFsbGVyIG91dHB1dAorIyAtcyBTSVpFICAgICAgIDogICAgICBNYXggc2l6ZSAoS0IpIGJlZm9yZSByb3RhdGlvbiAoZGVmYXVsdDoyMDBLQiwgMD1vZmYpCisjIC1iIE4gICAgICAgICAgOiAgICAgIE4gcm90YXRlZCBsb2dzIHRvIGtlZXAgKGRlZmF1bHQ6MSwgbWF4PTk5LCAwPXB1cmdlKQorIyAtUiBIT1NUWzpQT1JUXTogICAgICBMb2cgdG8gSE9TVDpQT1JUIChkZWZhdWx0IFBPUlQ6NTE0KQorIyAtTCAgICAgICAgICAgIDogICAgICBMb2cgbG9jYWxseSBhbmQgdmlhIG5ldHdvcmsKKyMgLUQgICAgICAgICAgICA6ICAgICAgRHJvcCBkdXBsaWNhdGVzCisjIC1DW3NpemVfa2JdICAgOiAgICAgIExvZyB0byBzaGFyZWQgbWVtIGJ1ZmZlciAodXNlIGxvZ3JlYWQgdG8gcmVhZCBpdCkKKyMgLWYgRklMRSAgICAgICA6ICAgICAgVXNlIEZJTEUgYXMgY29uZmlnIChkZWZhdWx0Oi9ldGMvc3lzbG9nLmNvbmYpCisjIC1tIE1JTiAgICAgICAgOiAgICAgIE1pbnV0ZXMgYmV0d2VlbiBtYXJrIGxpbmVzIChkZWZhdWx0OjIwLCAwPW9mZikKKyMgLUsgICAgICAgICAgICA6ICAgICAgTG9nIHRvIGtlcm5lbCBwcmludGsgYnVmZmVyICh1c2UgZG1lc2cgdG8gcmVhZCBpdCkKKworIyBFeGFtcGxlIDE6CisjIExvZyB0byBsb2NhbCBmaWxlIC92YXIvbG9nL215bG9nCisjIE9QVElPTlM9Ii1PIC92YXIvbG9nL215bG9nIgorIworIyBFeGFtcGxlIDI6CisjIExvZyB0byByZW1vdGUgaG9zdAorIyBPUFRJT05TPSItUiAxOTIuMTY4LjEuMTo2MDEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4gYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwNDMyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1zeXNsb2cuc2VydmljZS5pbgpAQCAtMCwwICsxLDEzIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVN5c3RlbSBMb2dnaW5nIFNlcnZpY2UKK1dhbnRzPWJ1c3lib3gta2xvZ2Quc2VydmljZQorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9kZWZhdWx0L2J1c3lib3gtc3lzbG9nCitFeGVjU3RhcnQ9QGJhc2Vfc2JpbmRpckAvc3lzbG9nZCAtbiAkT1BUSU9OUworU29ja2V0cz1zeXNsb2cuc29ja2V0CisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKK0Fsc289YnVzeWJveC1rbG9nZC5zZXJ2aWNlCitBbGlhcz1zeXNsb2cuc2VydmljZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXVkaGNwZCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC11ZGhjcGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzQzOTAzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC11ZGhjcGQKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCitEQUVNT049L3Vzci9zYmluL3VkaGNwZAorTkFNRT11ZGhjcGQKK0RFU0M9IkJ1c3lib3ggVURIQ1AgU2VydmVyIgorQVJHUz0iL2V0Yy91ZGhjcGQuY29uZiIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMQorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJaWYgWyAhIC1mIC9ldGMvdWRoY3BkLmNvbmYgXTsgdGhlbgorCQllY2hvICJlcnJvcjogL2V0Yy91ZGhjcGQuY29uZiBpcyBtaXNzaW5nLiIKKwkJZXhpdCAxCisJZmkKKwkvc2Jpbi9zdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiAkTkFNRSAtYSAkREFFTU9OIC0tICRBUkdTCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJzdG9wcGluZyAkREVTQzogJE5BTUUuLi4gIgorCS9zYmluL3N0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uICROQU1FCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBlY2hvICJyZXN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisgCSQwIHN0b3AKKwkkMCBzdGFydAorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVsb2FkKQorICAgIAllY2hvIC1uICJyZWxvYWRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAgICAJa2lsbGFsbCAtSFVQICQoYmFzZW5hbWUgJHtEQUVNT059KQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxyZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9kZWZhdWx0LnNjcmlwdCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZGVmYXVsdC5zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhYzk4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZGVmYXVsdC5zY3JpcHQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworZXhlYyBydW4tcGFydHMgLWEgIiQxIiAvZXRjL3VkaGNwYy5kCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM1ZTdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9maW5kLXRvdWNoc2NyZWVuLnNoCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2lmIGdyZXAgLXEgImlucHV0Oi4qLWUwLiosMywuKmEwLDEsXHxhZHM3ODQ2IiAvc3lzL2NsYXNzLyRNREVWL2RldmljZS9tb2RhbGlhcyA7IHRoZW4KKwlsbiAtc2YgL2Rldi8kTURFViAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMAorZmkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNWY5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2h3Y2xvY2suc2gKQEAgLTAsMCArMSw4MyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBod2Nsb2NrCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTZXQgc3lzdGVtIGNsb2NrCisjIERlc2NyaXB0aW9uOiAgICAgICBTZXQgc3lzdGVtIGNsb2NrIHRvIGhhcmR3YXJlIGNsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIFVUQworIyAgICAgICAgICAgICAgICAgICAgc2V0dGluZyBpbiAvZXRjL2RlZmF1bHQvcmNTIChzZWUgYWxzbyByY1MoNSkpLgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgV0FSTklORzogICAgICBJZiB5b3VyIGhhcmR3YXJlIGNsb2NrIGlzIG5vdCBpbiBVVEMvR01ULCB0aGlzIHNjcmlwdAorIyAgICAgICAgICAgICAgIG11c3Qga25vdyB0aGUgbG9jYWwgdGltZSB6b25lLiBUaGlzIGluZm9ybWF0aW9uIGlzCisjICAgICAgICAgICAgICAgc3RvcmVkIGluIC9ldGMvbG9jYWx0aW1lLiBUaGlzIG1pZ2h0IGJlIGEgcHJvYmxlbSBpZgorIyAgICAgICAgICAgICAgIHlvdXIgL2V0Yy9sb2NhbHRpbWUgaXMgYSBzeW1saW5rIHRvIHNvbWV0aGluZyBpbgorIyAgICAgICAgICAgICAgIC91c3Ivc2hhcmUvem9uZWluZm8gQU5EIC91c3IgaXNuJ3QgaW4gdGhlIHJvb3QKKyMgICAgICAgICAgICAgICBwYXJ0aXRpb24hIFRoZSB3b3JrYXJvdW5kIGlzIHRvIGRlZmluZSBUWiBlaXRoZXIKKyMgICAgICAgICAgICAgICBpbiAvZXRjL2RlZmF1bHQvcmNTLCBvciBpbiB0aGUgcHJvcGVyIHBsYWNlIGJlbG93LgorCitbICEgLXggL3NiaW4vaHdjbG9jayBdICYmIGV4aXQgMAorCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKKworWyAiJFVUQyIgPSAieWVzIiBdICYmIHR6PSItLXV0YyIgfHwgdHo9Ii0tbG9jYWx0aW1lIgorY2FzZSAiJDEiIGluCisgICAgICAgIHN0YXJ0KQorICAgICAgICAgICAgICAgIGlmIFsgIiRWRVJCT1NFIiAhPSBubyBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU3lzdGVtIHRpbWUgd2FzIGBkYXRlYC4iCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJTZXR0aW5nIHRoZSBTeXN0ZW0gQ2xvY2sgdXNpbmcgdGhlIEhhcmR3YXJlIENsb2NrIGFzIHJlZmVyZW5jZS4uLiIKKyAgICAgICAgICAgICAgICBmaQorCisJCWlmIFsgIiRIV0NMT0NLQUNDRVNTIiAhPSBubyBdCisJCXRoZW4KKwkJCWlmIFsgLXogIiRUWiIgXQorCQkJdGhlbgorCSAgICAgICAgICAgICAgICAgICBod2Nsb2NrICR0eiAtLWhjdG9zeXMKKwkJCWVsc2UKKwkJCSAgIFRaPSIkVFoiIGh3Y2xvY2sgJHR6IC0taGN0b3N5cworCQkJZmkKKwkJZmkKKworICAgICAgICAgICAgICAgIGlmIFsgIiRWRVJCT1NFIiAhPSBubyBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU3lzdGVtIENsb2NrIHNldC4gU3lzdGVtIGxvY2FsIHRpbWUgaXMgbm93IGBkYXRlYC4iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBzdG9wfHJlc3RhcnR8cmVsb2FkfGZvcmNlLXJlbG9hZCkKKwkJIworCQkjIFVwZGF0ZXMgdGhlIEhhcmR3YXJlIENsb2NrIHdpdGggdGhlIFN5c3RlbSBDbG9jayB0aW1lLgorCQkjIFRoaXMgd2lsbCAqb3ZlcnJpZGUqIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIEhhcmR3YXJlIENsb2NrLgorCQkjCisJCSMgV0FSTklORzogSWYgeW91IGRpc2FibGUgdGhpcywgYW55IGNoYW5nZXMgdG8gdGhlIHN5c3RlbQorCQkjICAgICAgICAgIGNsb2NrIHdpbGwgbm90IGJlIGNhcnJpZWQgYWNyb3NzIHJlYm9vdHMuCisJCSMKKwkJaWYgWyAiJFZFUkJPU0UiICE9IG5vIF0KKwkJdGhlbgorCQkJZWNobyAiU2F2aW5nIHRoZSBTeXN0ZW0gQ2xvY2sgdGltZSB0byB0aGUgSGFyZHdhcmUgQ2xvY2suLi4iCisJCWZpCisJCWlmIFsgIiRIV0NMT0NLQUNDRVNTIiAhPSBubyBdCisJCXRoZW4KKwkJCWh3Y2xvY2sgJHR6IC0tc3lzdG9oYworCQlmaQorCQlpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorCQl0aGVuCisJCQllY2hvICJIYXJkd2FyZSBDbG9jayB1cGRhdGVkIHRvIGBkYXRlYC4iCisJCWZpCisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICAgICAgOzsKKwlzaG93KQorCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlod2Nsb2NrICR0eiAtLXNob3cKKwkJZmkKKwkJOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICAgICBlY2hvICJVc2FnZTogaHdjbG9jay5zaCB7c3RhcnR8c3RvcHxzaG93fHJlbG9hZHxyZXN0YXJ0fSIgPiYyCisJCWVjaG8gIiAgICAgICBzdGFydCBzZXRzIGtlcm5lbCAoc3lzdGVtKSBjbG9jayBmcm9tIGhhcmR3YXJlIChSVEMpIGNsb2NrIiA+JjIKKwkJZWNobyAiICAgICAgIHN0b3AgYW5kIHJlbG9hZCBzZXQgaGFyZHdhcmUgKFJUQykgY2xvY2sgZnJvbSBrZXJuZWwgKHN5c3RlbSkgY2xvY2siID4mMgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgIDs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjUwYmNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCBpbmV0ZCBzdXBlciBzZXJ2ZXIuCisKK2lmICEgWyAteCAvdXNyL3NiaW4vaW5ldGQgXTsgdGhlbgorCWV4aXQgMAorZmkKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IgorCWVjaG8gLW4gIiBpbmV0ZCIgOyBzdGFydC1zdG9wLWRhZW1vbiAtUyAteCAvdXNyL3NiaW4vaW5ldGQgPiAvZGV2L251bGwKKwllY2hvICIuIgorCTs7CisgICAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjoiCisJZWNobyAtbiAiIGluZXRkIiA7IHN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9pbmV0ZCA+IC9kZXYvbnVsbAorCWVjaG8gIi4iCisJOzsKKyAgICByZXN0YXJ0KQorCWVjaG8gLW4gIlJlc3RhcnRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IgorCWVjaG8gLW4gIiBpbmV0ZCAiCisJa2lsbGFsbCAtSFVQIGluZXRkCisJZWNobyAiLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2luZXRkIHtzdGFydHxzdG9wfHJlc3RhcnR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAyZmU4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQuY29uZgpAQCAtMCwwICsxLDIwIEBACisjIC9ldGMvaW5ldGQuY29uZjogIHNlZSBpbmV0ZCg4KSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbnMuCisjCisjIEludGVybmV0IHNlcnZlciBjb25maWd1cmF0aW9uIGRhdGFiYXNlCisjCisjIElmIHlvdSB3YW50IHRvIGRpc2FibGUgYW4gZW50cnkgc28gaXQgaXNuJ3QgdG91Y2hlZCBkdXJpbmcKKyMgcGFja2FnZSB1cGRhdGVzIGp1c3QgY29tbWVudCBpdCBvdXQgd2l0aCBhIHNpbmdsZSAnIycgY2hhcmFjdGVyLgorIworIyA8c2VydmljZV9uYW1lPiA8c29ja190eXBlPiA8cHJvdG8+IDxmbGFncz4gPHVzZXI+IDxzZXJ2ZXJfcGF0aD4gPGFyZ3M+CisjCisjOklOVEVSTkFMOiBJbnRlcm5hbCBzZXJ2aWNlcworI2VjaG8JCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyNlY2hvCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCisjY2hhcmdlbglzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjY2hhcmdlbglkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCisjZGlzY2FyZAkJc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2Rpc2NhcmQJCWRncmFtCXVkcAl3YWl0CXJvb3QJaW50ZXJuYWwKKyNkYXl0aW1lCQlzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjZGF5dGltZQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCisjdGltZQkJc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI3RpbWUJCWRncmFtCXVkcAl3YWl0CXJvb3QJaW50ZXJuYWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldiBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjI1MjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2CkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCittb3VudCAtdCB0bXBmcyB0bXBmcyAvZGV2ICAtbyBzaXplPTY0ayxtb2RlPTA3NTUKK21rZGlyIC9kZXYvcHRzIC9kZXYvc2htCitjaG1vZCA3NzcgL2Rldi9zaG0KK21vdW50IC10IGRldnB0cyBkZXZwdHMgL2Rldi9wdHMKK3RvdWNoIC9kZXYvbWRldi5zZXEKK2VjaG8gIi9zYmluL21kZXYiID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnCittZGV2IC1zCisKKyMKKyMgV2UgbWlnaHQgaGF2ZSBtb3VudGVkIHNvbWV0aGluZyBvdmVyIC9kZXYsIHNlZSBpZiAvZGV2L2luaXRjdGwgaXMgdGhlcmUuCisjCitpZiB0ZXN0ICEgLXAgL2Rldi9pbml0Y3RsCit0aGVuCisgICAgICAgIHJtIC1mIC9kZXYvaW5pdGN0bAorICAgICAgICBta25vZCAtbSA2MDAgL2Rldi9pbml0Y3RsIHAKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQ2NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LW1vdW50LnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorTURFVl9BVVRPTU9VTlQ9eQorTURFVl9BVVRPTU9VTlRfUk9PVD0vcnVuL21lZGlhCitbIC1mIC9ldGMvZGVmYXVsdC9tZGV2IF0gJiYgLiAvZXRjL2RlZmF1bHQvbWRldgoraWYgWyAiJHtNREVWX0FVVE9NT1VOVH0iID0gIm4iIF0gOyB0aGVuCisJZXhpdCAwCitmaQorCitjYXNlICIkQUNUSU9OIiBpbgorCWFkZHwiIikKKwkJQUNUSU9OPSJhZGQiCisJCSMgY2hlY2sgaWYgYWxyZWFkeSBtb3VudGVkCisJCWlmIGdyZXAgLXEgIl4vZGV2LyR7TURFVn0gIiAvcHJvYy9tb3VudHMgOyB0aGVuCisJCQkjIEFscmVhZHkgbW91bnRlZAorCQkJZXhpdCAwCisJCWZpCisJCURFVkJBU0U9YGV4cHIgc3Vic3RyICRNREVWIDEgM2AKKwkJaWYgWyAiJHtERVZCQVNFfSIgPT0gIm1tYyIgXSA7IHRoZW4KKwkJCURFVkJBU0U9YGV4cHIgc3Vic3RyICRNREVWIDEgN2AKKwkJZmkKKwkJIyBjaGVjayBmb3IgInBsZWFzZSBkb24ndCBtb3VudCBpdCIgZmlsZQorCQlpZiBbIC1mICIvZGV2L25vbW91bnQuJHtERVZCQVNFfSIgXSA7IHRoZW4KKwkJCSMgYmxvY2tlZAorCQkJZXhpdCAwCisJCWZpCisJCSMgY2hlY2sgZm9yIGZ1bGwtZGlzayBwYXJ0aXRpb24KKwkJaWYgWyAiJHtERVZCQVNFfSIgPT0gIiR7TURFVn0iIF0gOyB0aGVuCisJCQlpZiBbIC1kIC9zeXMvYmxvY2svJHtERVZCQVNFfS8ke0RFVkJBU0V9KjEgXSA7IHRoZW4KKwkJCQkjIFBhcnRpdGlvbiBkZXRlY3RlZCwganVzdCBxdWl0CisJCQkJZXhpdCAwCisJCQlmaQorCQkJaWYgWyAhIC1mIC9zeXMvYmxvY2svJHtERVZCQVNFfS9zaXplIF0gOyB0aGVuCisJCQkJIyBObyBzaXplIGF0IGFsbAorCQkJCWV4aXQgMAorCQkJZmkKKwkJCWlmIFsgYGNhdCAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vc2l6ZWAgPT0gMCBdIDsgdGhlbgorCQkJCSMgZW1wdHkgZGV2aWNlLCBiYWlsIG91dAorCQkJCWV4aXQgMAorCQkJZmkKKwkJZmkKKwkJIyBmaXJzdCBhbGxvdyBmc3RhYiB0byBkZXRlcm1pbmUgdGhlIG1vdW50cG9pbnQKKwkJaWYgISBtb3VudCAvZGV2LyRNREVWID4gL2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJTU9VTlRQT0lOVD0iJHtNREVWX0FVVE9NT1VOVF9ST09UfS8kTURFViIKKwkJCW1rZGlyICIkTU9VTlRQT0lOVCIKKwkJCW1vdW50IC10IGF1dG8gL2Rldi8kTURFViAiJE1PVU5UUE9JTlQiCisJCWZpCisJCTs7CisJcmVtb3ZlKQorCQlNT1VOVFBPSU5UPWBncmVwICJeL2Rldi8kTURFVlxzIiAvcHJvYy9tb3VudHMgfCBjdXQgLWQnICcgLWYgMmAKKwkJaWYgWyAhIC16ICIkTU9VTlRQT0lOVCIgXQorCQl0aGVuCisJCQl1bW91bnQgIiRNT1VOVFBPSU5UIgorCQkJcm1kaXIgIiRNT1VOVFBPSU5UIgorCQllbHNlCisJCQl1bW91bnQgL2Rldi8kTURFVgorCQlmaQorCQk7OworCSopCisJCSMgVW5leHBlY3RlZCBrZXl3b3JkCisJCWV4aXQgMQorCQk7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2U5M2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LmNvbmYKQEAgLTAsMCArMSw0MiBAQAorJE1PREFMSUFTPS4qIDA6MCA2NjAgQG1vZHByb2JlICIkTU9EQUxJQVMiCisKK2NvbnNvbGUgMDowIDA2MDAgCitjcHVfZG1hX2xhdGVuY3kgMDowIDA2NjAgCitmYjA6MCA0NCAwNjYwIAorZnVsbCAwOjAgMDY2NiAKK2luaXRjdGwgMDowIDA2MDAgCitpcmNvbW1bMC05XS4qIDA6MjAgMDY2MCAKK2ttZW0gMDoxNSAwNjQwIAora21zZyAwOjAgMDY2MCAKK2xvZyAwOjAgMDY2NiAKK2xvb3BbMC05XS4qIDA6NiAwNjQwIAorbWVtIDA6MTUgMDY0MCAKK25ldHdvcmtfbGF0ZW5jeSAwOjAgMDY2MCAKK25ldHdvcmtfdGhyb3VnaHB1dCAwOjAgMDY2MCAKK251bGwgMDowIDA2NjYgCitwb3J0IDA6MTUgMDY0MCAKK3B0bXggMDo1IDA2NjYgCityYW1bMC05XS4qIDA6NiAwNjQwIAorcmFuZG9tIDA6MCAwNjY2IAorc2RhIDA6NiAwNjQwIAordHR5IDA6NSAwNjY2IAordHR5LiogMDowIDA2MjAgCit1cmFuZG9tIDA6MCAwNjY2IAordXNiZGV2LiogMDowIDA2NjAgKi9ldGMvbWRldi91c2Iuc2gKK3Zjcy4qIDA6NSAwNjYwIAoremVybyAwOjAgMDY2NiAKKyAKK3NuZC9wY20uKiAwOjAgMDY2MAorc25kL2NvbnRyb2wuKiAwOjAgMDY2MAorc25kL3RpbWVyIDA6MCAwNjYwCitzbmQvc2VxIDA6MCAwNjYwCitzbmQvbWluaS4qIDA6MDAgMDY2MAorCitpbnB1dC9ldmVudC4qIDA6MCAwNjYwIEAvZXRjL21kZXYvZmluZC10b3VjaHNjcmVlbi5zaAoraW5wdXQvbWljZSAwOjAgMDY2MAoraW5wdXQvbW91c2UuKiAwOjAgMDY2MAorCit0dW5bMC05XSogMDowIDA2NjAgPW5ldC8KKworW2hzXWRbYS16XVswLTldPyAwOjAgNjYwICovZXRjL21kZXYvbWRldi1tb3VudC5zaAorbW1jYmxrWzAtOV0uKiAwOjAgNjYwICovZXRjL21kZXYvbWRldi1tb3VudC5zaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94IGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlZjk0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21vdW50LmJ1c3lib3gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworZXhlYyAvYmluL2J1c3lib3ggbW91bnQgJEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwOGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2N1cnJlbnRfZGlyPSQocmVhZGxpbmsgLWYgJDApCitleHBvcnQgYmluZGlyPSQoZGlybmFtZSAkY3VycmVudF9kaXIpCisKK2NkIHRlc3RzdWl0ZSB8fCBleGl0IDEKKy4vcnVudGVzdCAtdiB8IHNlZCAtciAncy9eKFNLSVBQRUR8VU5URVNURUQpOi9TS0lQOi8nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxNjhiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc2ltcGxlLnNjcmlwdApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKworIyB1ZGhjcGMgc2NyaXB0IGVkaXRlZCBieSBUaW0gUmlrZXIgPFRpbUBSaWtlcnMub3JnPgorCitbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHVkaGNwYyIgJiYgZXhpdCAxCisKK1JFU09MVl9DT05GPSIvZXRjL3Jlc29sdi5jb25mIgorWyAtbiAiJHN1Ym5ldCIgXSAmJiBORVRNQVNLPSJuZXRtYXNrICRzdWJuZXQiCisKKyMgcmV0dXJuIDAgaWYgcm9vdCBpcyBtb3VudGVkIG9uIGEgbmV0d29yayBmaWxlc3lzdGVtCityb290X2lzX25mcygpIHsKKwlzZWQgLW4gJ3MvXlteIF0qIFwoW14gXSpcKSBcKFteIF0qXCkgLiokL1wxIFwyL3AnIC9wcm9jL21vdW50cyB8CisJZ3JlcCAtcSAiXi8gXChuZnNcfHNtYmZzXHxuY3BcfGNvZGFcKSQiCit9CisKK2hhdmVfYmluX2lwPTAKK2lmIFsgLXggL3NiaW4vaXAgXTsgdGhlbgorICBoYXZlX2Jpbl9pcD0xCisgIEJST0FEQ0FTVD0iYnJvYWRjYXN0ICsiCitmaQorCitbIC1uICIkYnJvYWRjYXN0IiBdICYmIEJST0FEQ0FTVD0iYnJvYWRjYXN0ICRicm9hZGNhc3QiCisKK2Nhc2UgIiQxIiBpbgorCWRlY29uZmlnKQorCQlpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXTsgdGhlbgorCQkJL3NiaW4vcmVzb2x2Y29uZiAtZCAiJHtpbnRlcmZhY2V9LnVkaGNwYyIKKwkJZmkKKwkJaWYgISByb290X2lzX25mcyA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgJGhhdmVfYmluX2lwIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgYWRkciBmbHVzaCBkZXYgJGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCBsaW5rIHNldCBkZXYgJGludGVyZmFjZSB1cAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvc2Jpbi9pZmNvbmZpZyAkaW50ZXJmYWNlIDAuMC4wLjAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisJCWZpCisJCTs7CisKKwlyZW5ld3xib3VuZCkKKyAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpcCBhZGRyIGFkZCBkZXYgJGludGVyZmFjZSBsb2NhbCAkaXAvJG1hc2sgJEJST0FEQ0FTVAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC9zYmluL2lmY29uZmlnICRpbnRlcmZhY2UgJGlwICRCUk9BRENBU1QgJE5FVE1BU0sKKyAgICAgICAgICAgICAgICBmaQorCisJCWlmIFsgLW4gIiRyb3V0ZXIiIF0gOyB0aGVuCisJCQlpZiAhIHJvb3RfaXNfbmZzIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgaXAgcm91dGUgZGVsIGRlZmF1bHQgZGV2ICRpbnRlcmZhY2UgMj4vZGV2L251bGwgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHJvdXRlIGRlbCBkZWZhdWx0IGd3IDAuMC4wLjAgZGV2ICRpbnRlcmZhY2UgMj4vZGV2L251bGwgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJCWZpCisKKwkJCW1ldHJpYz0xMAorCQkJZm9yIGkgaW4gJHJvdXRlciA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgJGhhdmVfYmluX2lwIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJGkgbWV0cmljICRtZXRyaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3ICRpIGRldiAkaW50ZXJmYWNlIG1ldHJpYyAkbWV0cmljIDI+L2Rldi9udWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpYz0kKCgkbWV0cmljICsgMSkpCisJCQlkb25lCisJCWZpCisKKwkJIyBVcGRhdGUgcmVzb2x2ZXIgY29uZmlndXJhdGlvbiBmaWxlCisJCVI9IiIKKwkJWyAtbiAiJGRvbWFpbiIgXSAmJiBSPSJkb21haW4gJGRvbWFpbgorIgorCQlmb3IgaSBpbiAkZG5zOyBkbworCQkJZWNobyAiJDA6IEFkZGluZyBETlMgJGkiCisJCQlSPSIke1J9bmFtZXNlcnZlciAkaQorIgorCQlkb25lCisKKwkJaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF07IHRoZW4KKwkJCWVjaG8gLW4gIiRSIiB8IC9zYmluL3Jlc29sdmNvbmYgLWEgIiR7aW50ZXJmYWNlfS51ZGhjcGMiCisJCWVsc2UKKwkJCWVjaG8gLW4gIiRSIiA+ICIkUkVTT0xWX0NPTkYiCisJCWZpCisJCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWM0ZDEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cKQEAgLTAsMCArMSw3NyBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgc3lza2xvZ2QKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICRyZW1vdGVfZnMgJHRpbWUKKyMgUmVxdWlyZWQtU3RvcDogICAgICAgICRyZW1vdGVfZnMgJHRpbWUKKyMgRGVmYXVsdC1TdGFydDogICAgICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiAgICBTeXN0ZW0gbG9nZ2VyCisjIyMgRU5EIElOSVQgSU5GTworCitzZXQgLWUKKworaWYgWyAtZiAvZXRjL3N5c2xvZy1zdGFydHVwLmNvbmYgXTsgdGhlbgorCS4gL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mCisJTE9HX0xPQ0FMPTAKKwlMT0dfUkVNT1RFPTAKKwlmb3IgRCBpbiAkREVTVElOQVRJT047IGRvCisJCWlmIFsgIiREIiA9ICJidWZmZXIiIF07IHRoZW4KKwkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLUMkQlVGRkVSU0laRSIKKwkJCUxPR19MT0NBTD0xCisJCWVsaWYgWyAiJEQiID0gImZpbGUiIF07IHRoZW4KKwkJCWlmIFsgLW4gIiRMT0dGSUxFIiBdOyB0aGVuCisJCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtTyAkTE9HRklMRSIKKwkJCWZpCisJCQlpZiBbIC1uICIkUk9UQVRFU0laRSIgXTsgdGhlbgorCQkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLXMgJFJPVEFURVNJWkUiCisJCQlmaQorCQkJaWYgWyAtbiAiJFJPVEFURUdFTlMiIF07IHRoZW4KKwkJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1iICRST1RBVEVHRU5TIgorCQkJZmkKKwkJCUxPR19MT0NBTD0xCisJCWVsaWYgWyAiJEQiID0gInJlbW90ZSIgXTsgdGhlbgorCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtUiAkUkVNT1RFIgorCQkJTE9HX1JFTU9URT0xCisJCWZpCisJZG9uZQorCWlmIFsgIiRMT0dfTE9DQUwiID0gIjEiIC1hICIkTE9HX1JFTU9URSIgPSAiMSIgXTsgdGhlbgorCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1MIgorCWZpCisJaWYgWyAiJFJFRFVDRSIgPSAieWVzIiBdOyB0aGVuCisJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLVMiCisJZmkKKwlpZiBbICIkRFJPUERVUExJQ0FURVMiID0gInllcyIgXTsgdGhlbgorCSAgICBTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1EIgorCWZpCisJaWYgWyAtbiAiJExPR0xFVkVMIiBdOyB0aGVuCisJICAgIFNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLWwgJExPR0xFVkVMIgorCWZpCitlbHNlCisJIyBkZWZhdWx0OiBsb2cgdG8gMTZLIHNobSBjaXJjdWxhciBidWZmZXIKKwlTWVNMT0dfQVJHUz0iLUMiCitmaQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgc3lzbG9nZC9rbG9nZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1iIC1uIHN5c2xvZ2QgLWEgL3NiaW4vc3lzbG9nZCAtLSAtbiAkU1lTTE9HX0FSR1MKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiBrbG9nZCAtYSAvc2Jpbi9rbG9nZCAtLSAtbgorCWVjaG8gImRvbmUiCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyBzeXNsb2dkL2tsb2dkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLW4gc3lzbG9nZAorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uIGtsb2dkCisJZWNobyAiZG9uZSIKKwk7OworICByZXN0YXJ0KQorICAJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgKikKKwllY2hvICJVc2FnZTogc3lzbG9nIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGE0NTBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2ctc3RhcnR1cC5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyMgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgdXNlZCBieSB0aGUgYnVzeWJveCBzeXNsb2cgaW5pdCBzY3JpcHQsCisjIC9ldGMvaW5pdC5kL3N5c2xvZ1suYnVzeWJveF0gdG8gc2V0IHN5c2xvZyBjb25maWd1cmF0aW9uIGF0IHN0YXJ0IHRpbWUuCisKK0RFU1RJTkFUSU9OPWZpbGUJCSMgbG9nIGRlc3RpbmF0aW9ucyAoYnVmZmVyIGZpbGUgcmVtb3RlKQorTE9HRklMRT0vdmFyL2xvZy9tZXNzYWdlcwkjIHdoZXJlIHRvIGxvZyAoZmlsZSkKK1JFTU9URT1sb2dob3N0OjUxNAkJIyB3aGVyZSB0byBsb2cgKHN5c2xvZyByZW1vdGUpCitSRURVQ0U9bm8JCQkjIHJlZHVjZS1zaXplIGxvZ2dpbmcKK0RST1BEVVBMSUNBVEVTPW5vCQkjIHdoZXRoZXIgdG8gZHJvcCBkdXBsaWNhdGUgbG9nIGVudHJpZXMKKyNST1RBVEVTSVpFPTAJCQkjIHJvdGF0ZSBsb2cgaWYgZ3Jvd24gYmV5b25kIFggW2tCeXRlXQorI1JPVEFURUdFTlM9MwkJCSMga2VlcCBYIGdlbmVyYXRpb25zIG9mIHJvdGF0ZWQgbG9ncworQlVGRkVSU0laRT02NAkJCSMgc2l6ZSBvZiBjaXJjdWxhciBidWZmZXIgW2tCeXRlXQorRk9SRUdST1VORD1ubwkJCSMgcnVuIGluIGZvcmVncm91bmQgKGRvbid0IHVzZSEpCisjTE9HTEVWRUw9NQkJCSMgbG9jYWwgbG9nIGxldmVsIChiZXR3ZWVuIDEgYW5kIDgpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWJiNjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cuY29uZgpAQCAtMCwwICsxIEBACisjICAvZXRjL3N5c2xvZy5jb25mCUNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgYnVzeWJveCdzIHN5c2xvZ2QgdXRpbGl0eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy91bW91bnQuYnVzeWJveCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvdW1vdW50LmJ1c3lib3gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjM3MzE2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvdW1vdW50LmJ1c3lib3gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworZXhlYyAvYmluL2J1c3lib3ggdW1vdW50ICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2OTJhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9NYWtldmFycwpAQCAtMCwwICsxLDQxIEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSAkKFBBQ0tBR0UpCisKKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5Lgorc3ViZGlyID0gcG8KK3RvcF9idWlsZGRpciA9IC4uCisKKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorWEdFVFRFWFRfT1BUSU9OUyA9IC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXworCisjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKyMgdGhlaXIgY29weXJpZ2h0LgorQ09QWVJJR0hUX0hPTERFUiA9IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgaXMgdGhlIGVtYWlsIGFkZHJlc3Mgb3IgVVJMIHRvIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBzaGFsbCByZXBvcnQKKyMgYnVncyBpbiB0aGUgdW50cmFuc2xhdGVkIHN0cmluZ3M6CisjIC0gU3RyaW5ncyB3aGljaCBhcmUgbm90IGVudGlyZSBzZW50ZW5jZXMsIHNlZSB0aGUgbWFpbnRhaW5lciBndWlkZWxpbmVzCisjICAgaW4gdGhlIEdOVSBnZXR0ZXh0IGRvY3VtZW50YXRpb24sIHNlY3Rpb24gJ1ByZXBhcmluZyBTdHJpbmdzJy4KKyMgLSBTdHJpbmdzIHdoaWNoIHVzZSB1bmNsZWFyIHRlcm1zIG9yIHJlcXVpcmUgYWRkaXRpb25hbCBjb250ZXh0IHRvIGJlCisjICAgdW5kZXJzdG9vZC4KKyMgLSBTdHJpbmdzIHdoaWNoIG1ha2UgaW52YWxpZCBhc3N1bXB0aW9ucyBhYm91dCBub3RhdGlvbiBvZiBkYXRlLCB0aW1lIG9yCisjICAgbW9uZXkuCisjIC0gUGx1cmFsaXNhdGlvbiBwcm9ibGVtcy4KKyMgLSBJbmNvcnJlY3QgRW5nbGlzaCBzcGVsbGluZy4KKyMgLSBJbmNvcnJlY3QgZm9ybWF0dGluZy4KKyMgSXQgY2FuIGJlIHlvdXIgZW1haWwgYWRkcmVzcywgb3IgYSBtYWlsaW5nIGxpc3QgYWRkcmVzcyB3aGVyZSB0cmFuc2xhdG9ycworIyBjYW4gd3JpdGUgdG8gd2l0aG91dCBiZWluZyBzdWJzY3JpYmVkLCBvciB0aGUgVVJMIG9mIGEgd2ViIHBhZ2UgdGhyb3VnaAorIyB3aGljaCB0aGUgdHJhbnNsYXRvcnMgY2FuIGNvbnRhY3QgeW91LgorTVNHSURfQlVHU19BRERSRVNTID0KKworIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLCBiZXlvbmQgTENfTUVTU0FHRVMsIGZvciB3aGljaCB0aGUKKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KK0VYVFJBX0xPQ0FMRV9DQVRFR09SSUVTID0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg3MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvZGVwYWdlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCistLS0gY29uc29sZS10b29scy0wLjMuMi9jb250cmliL2NvZGVwYWdlLmN+Y29kZXBhZ2UKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2NvbnRyaWIvY29kZXBhZ2UuYworQEAgLTIyOSw3ICsyMjksNyBAQAorIAkgIHJldHVybiAwOworIAorICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcCistV2FybmluZzogQ1AgZm9ybWF0IGlzIGEgaGFjayFcbgorK1dhcm5pbmc6IENQIGZvcm1hdCBpcyBhIGhhY2shXG5cCisgICAgICAgICAgVGhlIGZpbGVzIHByb2R1Y2VkIG1heSBvciBtYXkgbm90IGJlIHVzYWJsZSFcbiIpOworIAorIAlzcHJpbnRmKG91dGZpbGUsICIlZC5jcCIsIENQRW50cnlIZWFkZXIuY29kZXBhZ2UpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbXBpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTNmNTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL3Nob3drZXkuY35jb21waWxlCTE5OTktMDgtMjUgMTc6MjA6MDguMDAwMDAwMDAwIC0wNDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9zaG93a2V5LmMJMjAwNC0wNS0wOSAwMzowMzoyMy4wMDAwMDAwMDAgLTA0MDAKK0BAIC0yNjQsNyArMjY0LDYgQEAKKyAJICBicmVhazsKKyAJY2FzZSBjbWRfa2V5bWFwOgorIAkgIHByaW50ZigiKVxuIik7CistCWRlZmF1bHQ6CisgCX0KKyAgICAgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjMTAwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5pbn5jb25maWd1cmUKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5pbgorQEAgLTIsMTMgKzIsMTQgQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyAKKyAjIEluaXRpYWxpemUKKy1BQ19JTklUKGtiZHRvb2xzL2xvYWRrZXlzLnkpCisrQUNfSU5JVAorK0FDX0NPTkZJR19TUkNESVIoW2tiZHRvb2xzL2xvYWRrZXlzLnldKQorIAorIGRlZmluZShjdF91bmljb2RlZGF0YV9kZWZhdWx0LC91c3Ivc2hhcmUvdW5pZGF0YS9Vbmljb2RlRGF0YS0yLnR4dCkKKyBjdF9sb2NhbGRhdGFkaXJfZGVmYXVsdD0vdXNyL2xvY2FsL3NoYXJlICAgICAjIGlmZiAtLWVuYWJsZS1sb2NhbGRhdGFkaXIgd2l0aG91dCBzcGVjaWZpYyBkaXIKKyAKKyAjQUNfQ09ORklHX0FVWF9ESVIoYXV0b2NvbmYpCistQUNfQ0FOT05JQ0FMX1NZU1RFTQorK0FDX0NBTk9OSUNBTF9UQVJHRVQoW10pCisgQU1fSU5JVF9BVVRPTUFLRShjb25zb2xlLXRvb2xzLCAwLjMuMikKKyAKKyAjIERlZmF1bHRzCitAQCAtMjUsNyArMjYsNiBAQAorICMgaTE4biBzdHVmZgorIEFMTF9MSU5HVUFTPSJjcyBkZSBydSBnYSBmciIKKyBBTV9HTlVfR0VUVEVYVAorLUFDX09VVFBVVF9DT01NQU5EUyhbc2VkIC1lICIvUE9URklMRVMgPS9yIHBvL1BPVEZJTEVTIiBwby9NYWtlZmlsZS5pbiA+IHBvL01ha2VmaWxlXSkKKyAKKyBBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCAiL3Vzci9zaGFyZS9sb2NhbGUiKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvZml4LWxpYmNvbnNvbGUtbGlua2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTYxZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRml4IHRoZSBmb2xsb3dpbmcgZXJyb3IgZGV0ZWN0ZWQgd2l0aCBpNTg2LXBva3ltbGxpYjMyLWxpbnV4LWdjYyAodGhlCittdWx0aWxpYiB4ODYtNjQgbGliMzIgY29tcGlsZXIpOgorICAgIC4uL2xpYi9jdHV0aWxzLy5saWJzL2xpYmN0dXRpbHMuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGdldF9rZXJuZWxfc2ZtJworICAgIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitJdCBzZWVtcyB0aGF0IGxpYmN0dXRpbHMuc28gKHRoZSBsaWJyYXJ5IHRoYXQgdXNlcyBnZXRfa2VybmVsX3NmbSkgbXVzdAorYmUgc3RhdGVkIGJlZm9yZSBsaWJjb25zb2xlLnNvICh0aGUgbGlicmFyeSB0aGF0IGV4cG9ydHMgdGhlIGZ1bmN0aW9uKSB3aGVuCit1c2luZyBtdWx0aWxpYiBnY2MKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBjb25zb2xlLXRvb2xzLTAuMy4yL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcvZm9udGZpbGV0b29scy9NYWtlZmlsZS5hbQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvZm9udGZpbGV0b29scy9NYWtlZmlsZS5hbQorQEAgLTEwLDUgKzEwLDUgQEAgRVhUUkFfRElTVCA9IGZvbnRzMnZpcmZvbnQuYyB2aXJmb250LmgKKyAKKyAjIGxpYmNvbnNvbGUgaXMgbmVlZGVkIGJ5IGN0dXRpbHMKKyBMREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIFwKKy0JLi4vbGliL2N0dXRpbHMvbGliY3R1dGlscy5sYSAuLi9saWIvZ2VuZXJpYy9saWJjdGdlbmVyaWMubGEKKysJLi4vbGliL2N0dXRpbHMvbGliY3R1dGlscy5sYSBcCisrCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi92dHRvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL3Z0dG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL3Z0dG9vbHMvTWFrZWZpbGUuYW0KK0BAIC03LDkgKzcsOSBAQCBiaW5fUFJPR1JBTVMgPSBjaHZ0IGRlYWxsb2N2dCB3cml0ZXZ0IGZnCisgCXZjc3RpbWUgdnQtaXMtVVRGOCBvcGVudnQgQFJFU0laRUNPTlNACisgRVhUUkFfUFJPR1JBTVMgPSByZXNpemVjb25zCisgCistTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSBcCisrTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2N0dXRpbHMvbGliY3R1dGlscy5sYSBcCisgCS4uL2xpYi9jZm9udC9saWJjZm9udC5sYSBcCistCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisrCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisgCisgdmNzdGltZV9MREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYQorIHNjcmVlbmR1bXBfTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEKK0luZGV4OiBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL2tiZHRvb2xzL01ha2VmaWxlLmFtCisrKysgY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9NYWtlZmlsZS5hbQorQEAgLTE1LDkgKzE1LDkgQEAgRVhUUkFfUFJPR1JBTVMgPSBnZXRrZXljb2RlcyBzZXRrZXljb2RlcworIGxvYWRrZXlzX1NPVVJDRVMgPSBsb2Fka2V5cy55IGFuYWx5emUubAorIAorIFlGTEFHUyA9IC1kCistTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSBcCisrTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2N0dXRpbHMvbGliY3R1dGlscy5sYSBcCisgCS4uL2xpYi9jZm9udC9saWJjZm9udC5sYSBcCistCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisrCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisgCisgbG9hZGtleXNfTERBREQgPSAkKExEQUREKSBATEVYTElCQAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2tiZHJhdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIva2JkcmF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzcwYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2tiZHJhdGUucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorUGF0Y2ggZnJvbSBNYXR0aGlhcyBHb2VibCA8b2VAbS5nb2VibC5uZXQ+CitBZGRlZCB2aWEgT0UgYnVndHJhY2tlcjogYnVnICM0NzgKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL2tiZF9tb2RlLmMub3JpZworKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMva2JkX21vZGUuYworQEAgLTI5LDExICsyOSwxNiBAQAorICAgT1BUKCItdSAtLXVuaWNvZGUgICIsIF8oIlVURi04IG1vZGUgKFVOSUNPREUpIikpOworICAgT1BUKCItcyAtLXNjYW5jb2RlICIsIF8oInNjYW5jb2RlIG1vZGUgKFJBVykiKSk7CisgICBPUFQoIiAgIC0tbW9kZT17OGJpdCxrZXljb2RlLHVuaWNvZGUsc2NhbmNvZGV9ICIsIF8oInNldCBtb2RlIikpOworKyAgT1BUKCItciAtLXJhdGU9UkFURSAiLCBfKCJzZXQgcmVwZWF0IHJhdGUgKGRlZmF1bHQ6IDMzKSIpKTsKKysgIE9QVCgiLWQgLS1kZWxheT1ERUxBWSAiLCBfKCJzZXQgcmVwZWF0IGRlbGF5IChkZWZhdWx0OiAyNTApIikpOworIAorICAgT1BUKCItaCAtLWhlbHAgICAgICIsIEhFTFBERVNDKTsKKyAgIE9QVCgiLVYgLS12ZXJzaW9uICAiLCBWRVJTSU9OREVTQyk7CisgfQorIAorK2ludCByYXRlPS0xOworK2ludCBkZWxheT0tMTsKKysKKyBzdGF0aWMgaW50IHBhcnNlX2NtZGxpbmUgKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgICBpbnQgbW9kZSA9IC0xOworQEAgLTQ2LDExICs1MSwxMyBAQAorICAgICAgIHsgIm1vZGUiICAgICAsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbScgfSwKKyAgICAgICB7ICJzY2FuY29kZSIgLCBub19hcmd1bWVudCwgTlVMTCwgJ3MnIH0sCisgICAgICAgeyAidW5pY29kZSIgICwgbm9fYXJndW1lbnQsIE5VTEwsICd1JyB9LAorKyAgICAgIHsgInJhdGUiICAgICAsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncicgfSwKKysgICAgICB7ICJkZWxheSIgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2QnIH0sCisgICAgICAgeyBOVUxMLCAwLCBOVUxMLCAwIH0KKyAgICAgfTsKKyAgICAgaW50IGM7CisgCistICAgIHdoaWxlICggKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIlZoYWtzdSIsIGxvbmdfb3B0cywgTlVMTCkpICE9IEVPRikgCisrICAgIHdoaWxlICggKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIlZoYWtzdXI6ZDoiLCBsb25nX29wdHMsIE5VTEwpKSAhPSBFT0YpIAorICAgICAgIHN3aXRjaCAoYykgeworICAgICAgIGNhc2UgJ2gnOgorIAl1c2FnZSAoKTsKK0BAIC01OCw2ICs2NSwxNCBAQAorICAgICAgIGNhc2UgJ1YnOgorIAl2ZXJzaW9uICgpOworIAlleGl0KDApOworKyAgICAgIGNhc2UgJ3InOgorKwlyYXRlID0gYXRvaShvcHRhcmcpOworKwltb2RlID0gLTI7CisrCWJyZWFrOworKyAgICAgIGNhc2UgJ2QnOgorKwlkZWxheSA9IGF0b2kob3B0YXJnKTsKKysJbW9kZSA9IC0yOworKwlicmVhazsKKyAgICAgICBjYXNlICdhJzoKKyAJbW9kZSA9IEtfWExBVEU7CisgCWJyZWFrOworQEAgLTEyOSw2ICsxNDQsMjAgQEAKKyAgICAgICBleGl0KDApOworICAgICB9CisgICAKKysgIGlmICggcmF0ZSAhPSAtMSB8fCBkZWxheSAhPSAtMSApCisrICAgIHsKKysgICAgc3RydWN0IGtiZF9yZXBlYXQga2JkX3JlcDsKKysgICAga2JkX3JlcC5kZWxheSA9IGRlbGF5OworKyAgICBrYmRfcmVwLnBlcmlvZCA9IHJhdGU7CisrICAgIGlmIChpb2N0bChmZCwgS0RLQkRSRVAsICZrYmRfcmVwKSkKKysgICAgICB7CisrCWZwcmludGYoc3RkZXJyLCBwcm9nbmFtZSk7CisrCXBlcnJvcihfKCI6IGVycm9yIHNldHRpbmcga2V5Ym9hcmQgcmVwZWF0IG1vZGVcbiIpKTsKKysJZXhpdCgxKTsKKysgICAgICB9CisrICAgIGlmKG1vZGU9PS0yKSBleGl0KDApOworKyAgICB9CisrICAKKyAgIGlmIChpb2N0bChmZCwgS0RTS0JNT0RFLCBtb2RlKSkKKyAgICAgeworICAgICAgIGZwcmludGYoc3RkZXJyLCBwcm9nbmFtZSk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbGNtZXNzYWdlLm00IGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2xjbWVzc2FnZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ0N2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2xjbWVzc2FnZS5tNApAQCAtMCwwICsxLDI0IEBACisjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisjIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorIworIyBUaGlzIGZpbGUgY2FuIGJlIGNvcGllZCBhbmQgdXNlZCBmcmVlbHkgd2l0aG91dCByZXN0cmljdGlvbnMuICBJdCBjYW4KKyMgYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQKKyMgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQgZnVuY3Rpb25hbGl0eS4KKyMgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorIyBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKyMgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisjIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCisjIHNlcmlhbCAyCisKK0FDX0RFRlVOKFtBTV9MQ19NRVNTQUdFU10sCisgIFtpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCisgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisgICAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKyAgICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisgICAgZmkKKyAgZmldKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vLWRlcC1vbi1saWJmbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9uby1kZXAtb24tbGliZmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3MzVhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9uby1kZXAtb24tbGliZmwucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorTm8gcmVhc29uIHRvIGxpbmsgd2l0aCBsaWJmbCBzaW5jZSAnbG9hZGtleXMnIGltcGxlbWVudHMKK2l0cyBvd24geXl3cmFwKCkveXlsZXgoKSBmdW5jdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSmFjb2IgS3Jvb24gPGphY29iLmtyb29uQG1pa3JvZGlkYWt0LnNlPgorCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9rYmR0b29scy9NYWtlZmlsZS5hbQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xOSw4ICsxOSw2IEBAIExEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2wKKyAJLi4vbGliL2Nmb250L2xpYmNmb250LmxhIFwKKyAJLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSAuLi9saWIvZ2VuZXJpYy9saWJjdGdlbmVyaWMubGEKKyAKKy1sb2Fka2V5c19MREFERCA9ICQoTERBREQpIEBMRVhMSUJACistCisgYmluX1NDUklQVFMgPSBta19tb2RtYXAKKyAKKyBub2luc3RfSEVBREVSUyA9IGxvYWRrZXlzLmgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9ub2RvY3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm9kb2NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDYwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm9kb2NzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1RoZSBkb2NzIG5lZWQgdG9vbHMgd2UgZG9uJ3QgaGF2ZSB0byBidWlsZCBzbyBkaXNhYmxlIHRoZW0uCisKK0Fsc28gcmVtb3ZlIGludGwgc2luY2UgdGhlIE1ha2VmaWxlIGRvZXNuJ3Qgd29yayB3aXRoIDMuODIgYW5kIHdlCitkb24ndCB3YW50IHRvIGJ1aWxkIGxpYmludGwgYW55d2F5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitSUCAyMDEyLzEwLzE3CisKK0luZGV4OiBjb25zb2xlLXRvb2xzLTAuMy4yL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL01ha2VmaWxlLmFtCTE5OTktMDQtMTUgMDE6MzM6MjQuMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9NYWtlZmlsZS5hbQkyMDEyLTEwLTE3IDExOjQ4OjE0LjEwNzA2OTE0NSArMDAwMAorQEAgLTEsNyArMSw3IEBACisgIyAtKi0gbWFrZWZpbGUgLSotCisgQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKy1TVUJESVJTID0gbGliIGZvbnRmaWxldG9vbHMgdnR0b29scyBrYmR0b29scyBzY3JlZW5mb250dG9vbHMgY29udHJpYiBkb2MgXAorLQljb21wYXQgaW5jbHVkZSBleGFtcGxlcyBwbyBpbnRsCisrU1VCRElSUyA9IGxpYiBmb250ZmlsZXRvb2xzIHZ0dG9vbHMga2JkdG9vbHMgc2NyZWVuZm9udHRvb2xzIGNvbnRyaWIgXAorKwljb21wYXQgaW5jbHVkZSBleGFtcGxlcyBwbworIAorIEVYVFJBX0RJU1QgPSBCVUdTIFJFTEVBU0UgQ1JFRElUUyBDT1BZSU5HLmtiZCBsb2NhbC1zY3JpcHRzLyogZGViaWFuLyogKi5sc20KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi91Y2xpYmMtZmlsZW5vLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL3VjbGliYy1maWxlbm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5NTA2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi91Y2xpYmMtZmlsZW5vLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0ZpeGluZyB0aGUgbG9jYWxlIGlzc3VlcyBpc24ndCBlbm91Z2gsIGNvbnNvbGUtdG9vbHMgYWxzbyBkb2VzIGEgY291cGxlIG9mCitvdGhlciBwcmV0dHkgc3R1cGlkIHRoaW5ncyAobGlrZSBGSUxFICpmOyBmLT5fZmlsZW5vIGluc3RlYWQgb2YgZmlsZW5vKGYpKSwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2xpYi9jZm9udC9mb250c3RydWN0LmMuYXJrCTIwMDUtMDUtMjIgMTk6MTI6MzguMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9saWIvY2ZvbnQvZm9udHN0cnVjdC5jCTIwMDUtMDUtMjIgMTk6MTM6MjMuMDAwMDAwMDAwICswMDAwCitAQCAtNTAsOCArNTAsNyBAQAorICAgICogZ2V0IGZpbGVzaXplCisgICAgKi8KKyAgIAorLSAgLyogRklYTUU6IHNob3VsZCBub3QgdXNlIF9maWxlbm8gISAqLworLSAgaWYgKGZzdGF0KGZvbnRmaWxlLT5fZmlsZW5vLCAmc3RidWYpID09IC0xKQorKyAgaWYgKGZzdGF0KGZpbGVubyhmb250ZmlsZSksICZzdGJ1ZikgPT0gLTEpCisgICAgIGdvdG8gcnNmX3JldHVybl9lcnJvcjsKKyAgIAorICAgaWYgKFNfSVNSRUcoc3RidWYuc3RfbW9kZSkpCitAQCAtMjExLDggKzIxMCw3IEBACisgICAgKiBnZXQgZmlsZXNpemUKKyAgICAqLworICAgCistICAvKiBGSVhNRTogc2hvdWxkIG5vdCB1c2UgX2ZpbGVubyAhICovCistICBpZiAoZnN0YXQoZm9udGZpbGUtPl9maWxlbm8sICZzdGJ1ZikgPT0gLTEpCisrICBpZiAoZnN0YXQoZmlsZW5vKGZvbnRmaWxlKSwgJnN0YnVmKSA9PSAtMSkKKyAgICAgZ290byByZmdfcmV0dXJuX2Vycm9yOworICAgCisgICBpZiAoU19JU1JFRyhzdGJ1Zi5zdF9tb2RlKSkKKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2xpYi9jb25zb2xlL2FjbS5jLmFyawkyMDA1LTA1LTIyIDE5OjE3OjE1LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvbGliL2NvbnNvbGUvYWNtLmMJMjAwNS0wNS0yMiAxOToxNzoyMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMCw3ICszMCw3IEBACisgICBsY3RfYm9vbGVhbiBwYXJzZV9mYWlsZWQgPSBGYWxzZTsKKyAgIGxjdF9ib29sZWFuIGlzX3VuaWNvZGU7CisgCistICBpZiAoZnN0YXQoZnAtPl9maWxlbm8sICZzdGJ1ZikpIAorKyAgaWYgKGZzdGF0KGZpbGVubyhmcCksICZzdGJ1ZikpIAorICAgICBwZXJyb3IoXygiQ2Fubm90IHN0YXQgQUNNIGZpbGUiKSksIGV4aXQoMSk7CisgCisgICAvKiBmaXJzdCB0cnkgYSB3ZzE1LWNoYXJtYXAgKGdsaWJjKSBmaWxlIGZvcm1hdCAqLworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvaW5jbHVkZS9sY3QvbG9jYWwuaC5hcmsJMjAwNS0wNS0yMiAxOTowODo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2luY2x1ZGUvbGN0L2xvY2FsLmgJMjAwNS0wNS0yMiAxOTowOToxMi4wMDAwMDAwMDAgKzAwMDAKK0BAIC04LDcgKzgsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAKKyAKKy0jaWZkZWYgSEFWRV9MT0NBTEVfSAorKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxFX0gpICYmIGRlZmluZWQoSEFWRV9MSUJJTlRMX0gpCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgIyBkZWZpbmUgXyhTdHJpbmcpIGdldHRleHQgKFN0cmluZykKKyAjIGlmZGVmIGdldHRleHRfbm9vcApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGE1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHNfMC4zLjIuYmIKQEAgLTAsMCArMSwzNyBAQAorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcua2JkO21kNT05YjJkOTE1MTFkM2Q4MGQ0ZDIwYWM2ZTZiMDEzN2ZlOSIKK1NVTU1BUlkgPSAiQWxsb3dzIHlvdSB0byBzZXQtdXAgYW5kIG1hbmlwdWxhdGUgdGhlIExpbnV4IGNvbnNvbGUiCitERVNDUklQVElPTiA9ICJQcm92aWRlcyB0b29scyB0aGF0IGVuYWJsZSB0aGUgc2V0LXVwIGFuZCBtYW5pcHVsYXRpb24gb2YgdGhlIGxpbnV4IGNvbnNvbGUgYW5kIGNvbnNvbGUtZm9udCBmaWxlcy4iCitQUiA9ICJyOCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGN0L2NvbnNvbGUtdG9vbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvZGVwYWdlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb21waWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2tiZHJhdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLWZpbGVuby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2RvY3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWxpYmNvbnNvbGUtbGlua2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uby1kZXAtb24tbGliZmwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGNtZXNzYWdlLm00IFwKKyAgICAgICAgICAgZmlsZTovL01ha2V2YXJzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmYyMTU2NGZjMzhiM2FmODUzZWY3MjRiYWJkZGJhY2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWVhNmI0NDE2NzJkYWNkMjUxMDc5ZmM4NWVkMzIyZTE5NjI4MmUwZTY2YzE2MzAzZWM2NGMzYTJiMWMxMjZjMiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCW1rZGlyIC1wICR7U30vbTQKKwljcCAke1dPUktESVJ9L2xjbWVzc2FnZS5tNCAke1N9L200LworCXJtIC1mICR7U30vYWNpbmNsdWRlLm00CisJY3AgJHtXT1JLRElSfS9NYWtldmFycyAke1N9L3BvLworfQorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitiaW5kaXJfcHJvZ3MgPSAiY2h2dCBkZWFsbG9jdnQgZmdjb25zb2xlIG9wZW52dCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gIiR7YmluZGlyX3Byb2dzfSIKKworUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy02LjktY3AtaS11LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLTYuOS1jcC1pLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MmI0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy02LjktY3AtaS11LnBhdGNoCkBAIC0wLDAgKzEsMTIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGlzIHBhdGNoIHdhcyBpbXBvcnRlZCBmcm9tIHRoZSBGZWRvcmEgQ29yZSA4IGNvcmV1dGlscy02LjktOSBwYWNrYWdlLgorCitUaGUgcGFja2FnZSBpcyBzdGF0ZWQgYXMgYmVpbmcgTGljZW5zZWQgYXMgR1BMdjIrLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLS0KKworV2hlbiAiY3AgLWkgLS11cGRhdGUgb2xkIG5ldyIgd291bGQgZG8gbm90aGluZyBiZWNhdXNlICJuZXciIGlzCituZXdlciB0aGFuICJvbGQiLCBjcCB3b3VsZCBub25ldGhlbGVzcyBwcm9tcHQgZm9yIHdoZXRoZXIgaXQgaXMKK29rIHRvIG92ZXJ3cml0ZSAibmV3Ii4gIFRoZW4sIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlc3BvbnNlIChiZWNhdXNlCitvZiB0aGUgLS11cGRhdGUgb3B0aW9uKSwgY3Agd291bGQgZG8gbm90aGluZy4KKworVGhlIGZvbGxvd2luZyBwYXRjaCBlbGltaW5hdGVzIHRoZSB1bm5lY2Vzc2FyeSBwcm9tcHQgaW4gdGhhdCBjYXNlLgorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuYyBiL3NyYy9jb3B5LmMKK2luZGV4IGI3YmY3M2IuLjBlNTQ5ZDIgMTAwNjQ0CistLS0gYS9zcmMvY29weS5jCisrKysgYi9zcmMvY29weS5jCitAQCAtMTIxMCw2ICsxMjEwLDMwIEBAIGNvcHlfaW50ZXJuYWwgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAJICAgICAgcmV0dXJuIGZhbHNlOworIAkgICAgfQorCisrCSAgaWYgKCFTX0lTRElSIChzcmNfbW9kZSkgJiYgeC0+dXBkYXRlKQorKwkgICAgeworKwkgICAgICAvKiBXaGVuIHByZXNlcnZpbmcgdGltZSBzdGFtcHMgKGJ1dCBub3QgbW92aW5nIHdpdGhpbiBhIGZpbGUKKysJCSBzeXN0ZW0pLCBkb24ndCB3b3JyeSBpZiB0aGUgZGVzdGluYXRpb24gdGltZSBzdGFtcCBpcworKwkJIGxlc3MgdGhhbiB0aGUgc291cmNlIG1lcmVseSBiZWNhdXNlIG9mIHRpbWUgc3RhbXAKKysJCSB0cnVuY2F0aW9uLiAgKi8KKysJICAgICAgaW50IG9wdGlvbnMgPSAoKHgtPnByZXNlcnZlX3RpbWVzdGFtcHMKKysJCQkgICAgICAmJiAhICh4LT5tb3ZlX21vZGUKKysJCQkJICAgICYmIGRzdF9zYi5zdF9kZXYgPT0gc3JjX3NiLnN0X2RldikpCisrCQkJICAgICA/IFVUSU1FQ01QX1RSVU5DQVRFX1NPVVJDRQorKwkJCSAgICAgOiAwKTsKKysKKysJICAgICAgaWYgKDAgPD0gdXRpbWVjbXAgKGRzdF9uYW1lLCAmZHN0X3NiLCAmc3JjX3NiLCBvcHRpb25zKSkKKysJCXsKKysJCSAgLyogV2UncmUgdXNpbmcgLS11cGRhdGUgYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBub3Qgb2xkZXIKKysJCSAgICAgdGhhbiB0aGUgc291cmNlLCBzbyBkbyBub3QgY29weSBvciBtb3ZlLiAgUHJldGVuZCB0aGUKKysJCSAgICAgcmVuYW1lIHN1Y2NlZWRlZCwgc28gdGhlIGNhbGxlciAoaWYgaXQncyBtdikgZG9lc24ndAorKwkJICAgICBlbmQgdXAgcmVtb3ZpbmcgdGhlIHNvdXJjZSBmaWxlLiAgKi8KKysJCSAgaWYgKHJlbmFtZV9zdWNjZWVkZWQpCisrCQkgICAgKnJlbmFtZV9zdWNjZWVkZWQgPSB0cnVlOworKwkJICByZXR1cm4gdHJ1ZTsKKysJCX0KKysJICAgIH0KKysKKyAJICAvKiBXaGVuIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUsIHdlIG1heSBlbmQgdXAKKyAJICAgICByZXR1cm5pbmcgZWFybHksIGFuZCBoZW5jZSBub3QgY29weWluZy9tb3ZpbmcgdGhlIGZpbGUuCisgCSAgICAgVGhpcyBtYXkgYmUgZHVlIHRvIGFuIGludGVyYWN0aXZlIGBuZWdhdGl2ZScgcmVwbHkgdG8gdGhlCitAQCAtMTMwMiwzMCArMTMyNiw2IEBAIGNvcHlfaW50ZXJuYWwgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAJCSAgICAgIHJldHVybiBmYWxzZTsKKyAJCSAgICB9CisgCQl9CistCistCSAgICAgIGlmICh4LT51cGRhdGUpCistCQl7CistCQkgIC8qIFdoZW4gcHJlc2VydmluZyB0aW1lIHN0YW1wcyAoYnV0IG5vdCBtb3Zpbmcgd2l0aGluIGEgZmlsZQorLQkJICAgICBzeXN0ZW0pLCBkb24ndCB3b3JyeSBpZiB0aGUgZGVzdGluYXRpb24gdGltZSBzdGFtcCBpcworLQkJICAgICBsZXNzIHRoYW4gdGhlIHNvdXJjZSBtZXJlbHkgYmVjYXVzZSBvZiB0aW1lIHN0YW1wCistCQkgICAgIHRydW5jYXRpb24uICAqLworLQkJICBpbnQgb3B0aW9ucyA9ICgoeC0+cHJlc2VydmVfdGltZXN0YW1wcworLQkJCQkgICYmICEgKHgtPm1vdmVfbW9kZQorLQkJCQkJJiYgZHN0X3NiLnN0X2RldiA9PSBzcmNfc2Iuc3RfZGV2KSkKKy0JCQkJID8gVVRJTUVDTVBfVFJVTkNBVEVfU09VUkNFCistCQkJCSA6IDApOworLQorLQkJICBpZiAoMCA8PSB1dGltZWNtcCAoZHN0X25hbWUsICZkc3Rfc2IsICZzcmNfc2IsIG9wdGlvbnMpKQorLQkJICAgIHsKKy0JCSAgICAgIC8qIFdlJ3JlIHVzaW5nIC0tdXBkYXRlIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgbm90IG9sZGVyCistCQkJIHRoYW4gdGhlIHNvdXJjZSwgc28gZG8gbm90IGNvcHkgb3IgbW92ZS4gIFByZXRlbmQgdGhlCistCQkJIHJlbmFtZSBzdWNjZWVkZWQsIHNvIHRoZSBjYWxsZXIgKGlmIGl0J3MgbXYpIGRvZXNuJ3QKKy0JCQkgZW5kIHVwIHJlbW92aW5nIHRoZSBzb3VyY2UgZmlsZS4gICovCistCQkgICAgICBpZiAocmVuYW1lX3N1Y2NlZWRlZCkKKy0JCQkqcmVuYW1lX3N1Y2NlZWRlZCA9IHRydWU7CistCQkgICAgICByZXR1cm4gdHJ1ZTsKKy0JCSAgICB9CistCQl9CisgCSAgICB9CisKKyAJICBpZiAoeC0+bW92ZV9tb2RlKQorZGlmZiAtLWdpdCBhL3Rlc3RzL212L3VwZGF0ZSBiL3Rlc3RzL212L3VwZGF0ZQoraW5kZXggMGMwNjAyNC4uNmMzZDE0OSAxMDA3NTUKKy0tLSBhL3Rlc3RzL212L3VwZGF0ZQorKysrIGIvdGVzdHMvbXYvdXBkYXRlCitAQCAtMSw3ICsxLDcgQEAKKyAjIS9iaW4vc2gKKyAjIG1ha2Ugc3VyZSAtLXVwZGF0ZSB3b3JrcyBhcyBhZHZlcnRpc2VkCisKKy0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNCwgMjAwNi0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK0BAIC00NiwxMSArNDYsMTYgQEAgZmkKKworIGZhaWw9MAorCistZm9yIGNwX29yX212IGluIGNwIG12OyBkbworLSAgIyBUaGlzIGlzIGEgbm8tb3AuCistICAkY3Bfb3JfbXYgLS11cGRhdGUgb2xkIG5ldyB8fCBmYWlsPTEKKy0gIGNhc2UgImBjYXQgbmV3YCIgaW4gbmV3KSA7OyAqKSBmYWlsPTEgOzsgZXNhYworLSAgY2FzZSAiYGNhdCBvbGRgIiBpbiBvbGQpIDs7ICopIGZhaWw9MSA7OyBlc2FjCisrZm9yIGludGVyYWN0aXZlIGluICcnIC1pOyBkbworKyAgZm9yIGNwX29yX212IGluIGNwIG12OyBkbworKyAgICAjIFRoaXMgaXMgYSBuby1vcCwgd2l0aCBubyBwcm9tcHQuCisrICAgICMgV2l0aCBjb3JldXRpbHMtNi45IGFuZCBlYXJsaWVyLCB1c2luZyAtLXVwZGF0ZSB3aXRoIC1pIHdvdWxkCisrICAgICMgbWlzdGFrZW5seSBlbGljaXQgYSBwcm9tcHQuCisrICAgICRjcF9vcl9tdiAkaW50ZXJhY3RpdmUgLS11cGRhdGUgb2xkIG5ldyA8IC9kZXYvbnVsbCA+IG91dCAyPiYxIHx8IGZhaWw9MQorKyAgICB0ZXN0IC1zIG91dCAmJiBmYWlsPTEKKysgICAgY2FzZSAiYGNhdCBuZXdgIiBpbiBuZXcpIDs7ICopIGZhaWw9MSA7OyBlc2FjCisrICAgIGNhc2UgImBjYXQgb2xkYCIgaW4gb2xkKSA7OyAqKSBmYWlsPTEgOzsgZXNhYworKyAgZG9uZQorIGRvbmUKKworICMgVGhpcyB3aWxsIGFjdHVhbGx5IHBlcmZvcm0gdGhlIHJlbmFtZS4KKy0tCisxLjUuMy5yYzEuMTYuZzlkNmYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjczZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWJ1aWxkLXdpdGgtYWNsLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0ZpeCB0aGUgZm9sbG93aW5nIGlzc3VlIHNvIHRoYXQgY29yZXV0aWxzIGNhbiBidWlsZCB3aXRoIEFDTDoKKworY29uZmlndXJlOiBXQVJOSU5HOiBsaWJhY2wgZGV2ZWxvcG1lbnQgbGlicmFyeSB3YXMgbm90IGZvdW5kIG9yIG5vdCB1c2FibGUuCitjb25maWd1cmU6IFdBUk5JTkc6IEdOVSBjb3JldXRpbHMgd2lsbCBiZSBidWlsdCB3aXRob3V0IEFDTCBzdXBwb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbTQvYWNsLm00IHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbTQvYWNsLm00IGIvbTQvYWNsLm00CitpbmRleCBkNmE0NDhhLi5hOWQ0ODM2IDEwMDY0NAorLS0tIGEvbTQvYWNsLm00CisrKysgYi9tNC9hY2wubTQKK0BAIC0xNTksNyArMTU5LDcgQEAgQUNfREVGVU4oW2dsX0FDTF9HRVRfRklMRV0sCisgICAgICAgICAgIF1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPW5vXSwKKy0gICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9Y3Jvc3MtY29tcGlsaW5nXSldKQorKyAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT15ZXNdKV0pCisgCisgICBBU19JRihbdGVzdCAkZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZSA9IHllc10sIFskMV0sIFskMl0pCisgXSkKKy0tIAorMS43LjcKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZjYxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoZSBpbnN0YWxsIGNvbW1hbmQgZG9lc24ndCBvdmVyIHdyaXRlIHRoZSBkYW5nbGluZyBzeW1saW5rLCBmb3IKK2V4YW1wbGU6CisKKyQgaW5zdGFsbCBmaWxlQSAvdG1wL2ZpbGVBCisKK0lmIC90bXAvZmlsZUEgaXMgYSBkYW5nbGluZyBzeW1saW5rLCB0aGVyZSB3b3VsZCBiZSBhbiBlcnJvcjoKKworaW5zdGFsbDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgJy90bXAvZmlsZUEnOiBGaWxlIGV4aXN0cworCitUaGlzIGlzIGJlY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBjb2RlIGluIGNvcHkuYzoKKworICBpZiAoIW5ld19kc3QpCisgICAgeworICAgICAgaWYgKFhTVEFUICh4LCBkc3RfbmFtZSwgJmRzdF9zYikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChlcnJubyAhPSBFTk9FTlQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVycm9yICgwLCBlcnJubywgXygiY2Fubm90IHN0YXQgJXMiKSwgcXVvdGUgKGRzdF9uYW1lKSk7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG5ld19kc3QgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKK1hTVEFUKCkgdXNlIHN0YXQoKSBmb3IgZHN0X25hbWUodGhlIGRhbmdsaW5nIHN5bWxpbmsgL3RtcC9maWxlQSkgd2hlbgoraW5zdGFsbC5jIGludm9rZXMgaXQsIGFuZCBzdGF0IHdpbGwgc2V0IGVycm5vIHRvIEVOT0VOVCwgYW5kIHRoZW4KK25ld19kc3Qgd2lsbCBiZSBzZXQgdG8gdHJ1ZSB3aGljaCBtZWFucyB0aGF0IC90bXAvZmlsZUEgZG9lc24ndCBleGlzdCwKK3RoZW4gd2Ugd2lsbCBjcmVhdGUgL3RtcC9maWxlQSB3aXRob3V0IHJlbW92ZSBpdCBmaXJzdCwgc28gdGhlIGVycm9yCitjb21lcy4KKworVGhpcyBpcyBmaXhlZCBpbiBhIHdheSB3aGljaCBhZGRzIHRoZSBtZW1iZXIgY21kX2luc3RhbGwgaW4KK3N0cnVjdCBjcF9vcHRpb25zIHRvIG1ha2Ugc3VyZSBteSBjaGFuZ2Ugb25seSBhZmZlY3RlZCB0byB0aGUgaW5zdGFsbAorY29tbWFuZCBhbmQgdXNlIGxzdGF0IHRvIGZpeCB0aGUgcHJvYmxlbS4KKyAgICAKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvY29weS5jICAgIHwgICAxMCArKysrKysrKystCisgc3JjL2NvcHkuaCAgICB8ICAgIDMgKysrCisgc3JjL2luc3RhbGwuYyB8ICAgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jb3B5LmMgYi9zcmMvY29weS5jCistLS0gYS9zcmMvY29weS5jCisrKysgYi9zcmMvY29weS5jCitAQCAtMTAyOSw2ICsxMDI5LDcgQEAgY29weV9pbnRlcm5hbCAoY2hhciBjb25zdCAqc3JjX25hbWUsIGNoYXIgY29uc3QgKmRzdF9uYW1lLAorICAgYm9vbCBkZWxheWVkX29rOworICAgYm9vbCBjb3BpZWRfYXNfcmVndWxhciA9IGZhbHNlOworICAgYm9vbCBwcmVzZXJ2ZV9tZXRhZGF0YTsKKysgIGludCBkc3Rfc3RhdF9yZXN1bHQ7CisgCisgICBpZiAoeC0+bW92ZV9tb2RlICYmIHJlbmFtZV9zdWNjZWVkZWQpCisgICAgICpyZW5hbWVfc3VjY2VlZGVkID0gZmFsc2U7CitAQCAtMTA2OSw3ICsxMDcwLDE0IEBAIGNvcHlfaW50ZXJuYWwgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAKKyAgIGlmICghbmV3X2RzdCkKKyAgICAgeworLSAgICAgIGlmIChYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpICE9IDApCisrICAgICAgaWYgKCB4LT5jbWRfaW5zdGFsbCAmJiAoIHgtPmJhY2t1cF90eXBlID09IG5vX2JhY2t1cHMpKQorKyAgICAgICAgZHN0X3N0YXRfcmVzdWx0ID0gbHN0YXQgKGRzdF9uYW1lLCAmZHN0X3NiKTsKKysgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIGRzdF9zdGF0X3Jlc3VsdCA9IFhTVEFUICh4LCBkc3RfbmFtZSwgJmRzdF9zYik7CisrICAgICAgICB9CisrCisrICAgICAgaWYgKGRzdF9zdGF0X3Jlc3VsdCAhPSAwKQorIAl7CisgCSAgaWYgKGVycm5vICE9IEVOT0VOVCkKKyAJICAgIHsKK2RpZmYgLS1naXQgYS9zcmMvY29weS5oIGIvc3JjL2NvcHkuaAorLS0tIGEvc3JjL2NvcHkuaAorKysrIGIvc3JjL2NvcHkuaAorQEAgLTExNCw2ICsxMTQsOSBAQCBzdHJ1Y3QgY3Bfb3B0aW9ucworICAgICAgSWYgdGhhdCBmYWlscywgdGhlbiByZXNvcnQgdG8gY29weWluZy4gICovCisgICBib29sIG1vdmVfbW9kZTsKKyAKKysgIC8qIEZvciB0aGUgaW5zdGFsbCBjb21tYW5kICovCisrICBib29sIGNtZF9pbnN0YWxsOworKworICAgLyogV2hldGhlciB0aGlzIHByb2Nlc3MgaGFzIGFwcHJvcHJpYXRlIHByaXZpbGVnZXMgdG8gY2hvd24gYSBmaWxlCisgICAgICB3aG9zZSBvd25lciBpcyBub3QgdGhlIGVmZmVjdGl2ZSB1c2VyIElELiAgKi8KKyAgIGJvb2wgY2hvd25fcHJpdmlsZWdlczsKK2RpZmYgLS1naXQgYS9zcmMvaW5zdGFsbC5jIGIvc3JjL2luc3RhbGwuYworLS0tIGEvc3JjL2luc3RhbGwuYworKysrIGIvc3JjL2luc3RhbGwuYworQEAgLTE0OSw2ICsxNDksNyBAQCBjcF9vcHRpb25faW5pdCAoc3RydWN0IGNwX29wdGlvbnMgKngpCisgICB4LT5oYXJkX2xpbmsgPSBmYWxzZTsKKyAgIHgtPmludGVyYWN0aXZlID0gSV9VTlNQRUNJRklFRDsKKyAgIHgtPm1vdmVfbW9kZSA9IGZhbHNlOworKyAgeC0+Y21kX2luc3RhbGwgPSB0cnVlOworICAgeC0+Y2hvd25fcHJpdmlsZWdlcyA9IGNob3duX3ByaXZpbGVnZXMgKCk7CisgICB4LT5vbmVfZmlsZV9zeXN0ZW0gPSBmYWxzZTsKKyAgIHgtPnByZXNlcnZlX293bmVyc2hpcCA9IGZhbHNlOworLS0gCisxLjcuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU1YTJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC10ZXhpbmZvLnBhdGNoCkBAIC0wLDAgKzEsMzc1IEBACitGcm9tIDE3MGJlNDAyM2JiZjllOTY5OGE3MDllMDMyNjU5NDU1ODhhYzhlMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMjYgTm92IDIwMTMgMDA6MjE6NTAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZG9jL2NvcmV1dGlscy50ZXhpOiBVc2UgJ0BpdGVtJyBpbnN0ZWFkIG9mICdAaXRlbXgnCisKK1VzZSAnQGl0ZW0nIGluc3RlYWQgb2YgJ0BpdGVteCcgaW4gc2V2ZXJhbCBwbGFjZXMsIGFzIFRleGluZm8gNSByZWZ1c2VzCit0byBwcm9jZXNzIGFuICdAaXRlbXgnIHRoYXQgaXMgbm90IHByZWNlZGVkIGJ5IGFuICdAaXRlbScuICBFbnN1cmUgdGhhdAorbm9kZSBleHRlbmRlZCBuYW1lcyBpbiBtZW51cyBhbmQgc2VjdGlvbmluZyBhcmUgY29uc2lzdGVudCwgYW5kIHRoYXQKK29yZGVyaW5nIGFuZCBwcmVzZW5jZSBvZiBub2RlcyBpbiBtZW51cyBhbmQgaW4gdGhlIGFjdHVhbCB0ZXh0IGFyZQorY29uc2lzdGVudCBhcyB3ZWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtGcm9tOiBjb3JldXRpbHMuNzYyMC5uNy5uYWJibGUuY29tLCBidWcjMTE4MjhdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jL2NvcmV1dGlscy50ZXhpIHwgODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2NvcmV1dGlscy50ZXhpIGIvZG9jL2NvcmV1dGlscy50ZXhpCitpbmRleCA1ODgxNDdmLi4yZGFlM2ZlIDEwMDY0NAorLS0tIGEvZG9jL2NvcmV1dGlscy50ZXhpCisrKysgYi9kb2MvY29yZXV0aWxzLnRleGkKK0BAIC01NTUsNyArNTU1LDcgQEAgc3ltYm9saWMgbGluayB0byBhIGRpcmVjdG9yeS4gIEB4cmVme1RhcmdldCBkaXJlY3Rvcnl9LgorIEBlbmQgbWFjcm8KKyAKKyBAbWFjcm8gb3B0U2kKKy1AaXRlbXggLS1zaQorK0BpdGVtIC0tc2kKKyBAb3BpbmRleCAtLXNpCisgQGNpbmRleCBTSSBvdXRwdXQKKyBBcHBlbmQgYW4gU0ktc3R5bGUgYWJicmV2aWF0aW9uIHRvIGVhY2ggc2l6ZSwgc3VjaCBhcyBAc2FtcHtNfSBmb3IKK0BAIC01NzgsNyArNTc4LDcgQEAgVXNlIHRoZSBAb3B0aW9uey0tc2l9IG9wdGlvbiBpZiB5b3UgcHJlZmVyIHBvd2VycyBvZiAxMDAwLgorIEBlbmQgbWFjcm8KKyAKKyBAbWFjcm8gb3B0U3RyaXBUcmFpbGluZ1NsYXNoZXMKKy1AaXRlbXggQHd7QGtiZHstLXN0cmlwLXRyYWlsaW5nLXNsYXNoZXN9fQorK0BpdGVtIEB3e0BrYmR7LS1zdHJpcC10cmFpbGluZy1zbGFzaGVzfX0KKyBAb3BpbmRleCAtLXN0cmlwLXRyYWlsaW5nLXNsYXNoZXMKKyBAY2luZGV4IHN0cmlwcGluZyB0cmFpbGluZyBzbGFzaGVzCisgUmVtb3ZlIGFueSB0cmFpbGluZyBzbGFzaGVzIGZyb20gZWFjaCBAdmFye3NvdXJjZX0gYXJndW1lbnQuCitAQCAtMjQ5Niw3ICsyNDk2LDcgQEAgYnkgMTA0ODU3Ni4KKyBIb3dldmVyLCBpZiBAdmFye259IHN0YXJ0cyB3aXRoIGEgQHNhbXB7LX0sCisgcHJpbnQgYWxsIGJ1dCB0aGUgbGFzdCBAdmFye259IGJ5dGVzIG9mIGVhY2ggZmlsZS4KKyAKKy1AaXRlbXggLW4gQHZhcntufQorK0BpdGVtIC1uIEB2YXJ7bn0KKyBAaXRlbXggLS1saW5lcz1AdmFye259CisgQG9waW5kZXggLW4KKyBAb3BpbmRleCAtLWxpbmVzCitAQCAtMjYzMyw3ICsyNjMzLDcgQEAgVGhpcyBvcHRpb24gaXMgdGhlIHNhbWUgYXMgQG9wdGlvbnstLWZvbGxvdz1uYW1lIC0tcmV0cnl9LiAgVGhhdCBpcywgdGFpbAorIHdpbGwgYXR0ZW1wdCB0byByZW9wZW4gYSBmaWxlIHdoZW4gaXQgaXMgcmVtb3ZlZC4gIFNob3VsZCB0aGlzIGZhaWwsIHRhaWwKKyB3aWxsIGtlZXAgdHJ5aW5nIHVudGlsIGl0IGJlY29tZXMgYWNjZXNzaWJsZSBhZ2Fpbi4KKyAKKy1AaXRlbXggLS1yZXRyeQorK0BpdGVtIC0tcmV0cnkKKyBAb3BpbmRleCAtLXJldHJ5CisgVGhpcyBvcHRpb24gaXMgdXNlZnVsIG1haW5seSB3aGVuIGZvbGxvd2luZyBieSBuYW1lIChpLmUuLCB3aXRoCisgQG9wdGlvbnstLWZvbGxvdz1uYW1lfSkuCitAQCAtMjY0MSw3ICsyNjQxLDcgQEAgV2l0aG91dCB0aGlzIG9wdGlvbiwgd2hlbiB0YWlsIGVuY291bnRlcnMgYSBmaWxlIHRoYXQgZG9lc24ndAorIGV4aXN0IG9yIGlzIG90aGVyd2lzZSBpbmFjY2Vzc2libGUsIGl0IHJlcG9ydHMgdGhhdCBmYWN0IGFuZAorIG5ldmVyIGNoZWNrcyBpdCBhZ2Fpbi4KKyAKKy1AaXRlbXggLS1zbGVlcC1pbnRlcnZhbD1AdmFye251bWJlcn0KKytAaXRlbSAtLXNsZWVwLWludGVydmFsPUB2YXJ7bnVtYmVyfQorIEBvcGluZGV4IC0tc2xlZXAtaW50ZXJ2YWwKKyBDaGFuZ2UgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBpdGVyYXRpb25zICh0aGUgZGVmYXVsdCBpcyAxLjApLgorIER1cmluZyBvbmUgaXRlcmF0aW9uLCBldmVyeSBzcGVjaWZpZWQgZmlsZSBpcyBjaGVja2VkIHRvIHNlZSBpZiBpdCBoYXMKK0BAIC0yNjUxLDcgKzI2NTEsNyBAQCBIaXN0b3JpY2FsIGltcGxlbWVudGF0aW9ucyBvZiBAY29tbWFuZHt0YWlsfSBoYXZlIHJlcXVpcmVkIHRoYXQKKyBhbiBhcmJpdHJhcnkgZmxvYXRpbmcgcG9pbnQgbnVtYmVyICh1c2luZyBhIHBlcmlvZCBiZWZvcmUgYW55CisgZnJhY3Rpb25hbCBkaWdpdHMpLgorIAorLUBpdGVteCAtLXBpZD1AdmFye3BpZH0KKytAaXRlbSAtLXBpZD1AdmFye3BpZH0KKyBAb3BpbmRleCAtLXBpZAorIFdoZW4gZm9sbG93aW5nIGJ5IG5hbWUgb3IgYnkgZGVzY3JpcHRvciwgeW91IG1heSBzcGVjaWZ5IHRoZSBwcm9jZXNzIElELAorIEB2YXJ7cGlkfSwgb2YgdGhlIHNvbGUgd3JpdGVyIG9mIGFsbCBAdmFye2ZpbGV9IGFyZ3VtZW50cy4gIFRoZW4sIHNob3J0bHkKK0BAIC0yNjc0LDcgKzI2NzQsNyBAQCB0ZXJtaW5hdGUgdW50aWwgbG9uZyBhZnRlciB0aGUgcmVhbCB3cml0ZXIgaGFzIHRlcm1pbmF0ZWQuCisgTm90ZSB0aGF0IEBvcHRpb257LS1waWR9IGNhbm5vdCBiZSBzdXBwb3J0ZWQgb24gc29tZSBzeXN0ZW1zOyBAY29tbWFuZHt0YWlsfQorIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIHRoaXMgaXMgdGhlIGNhc2UuCisgCistQGl0ZW14IC0tbWF4LXVuY2hhbmdlZC1zdGF0cz1AdmFye259CisrQGl0ZW0gLS1tYXgtdW5jaGFuZ2VkLXN0YXRzPUB2YXJ7bn0KKyBAb3BpbmRleCAtLW1heC11bmNoYW5nZWQtc3RhdHMKKyBXaGVuIHRhaWxpbmcgYSBmaWxlIGJ5IG5hbWUsIGlmIHRoZXJlIGhhdmUgYmVlbiBAdmFye259IChkZWZhdWx0Cisgbj1AdmFsdWV7REVGQVVMVF9NQVhfTl9VTkNIQU5HRURfU1RBVFNfQkVUV0VFTl9PUEVOU30pIGNvbnNlY3V0aXZlCitAQCAtMjY4Niw3ICsyNjg2LDcgQEAgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiB3aGVuIHRhaWwgcHJpbnRzIHRoZSBsYXN0IHByZS1yb3RhdGlvbiBsaW5lcworIGFuZCB3aGVuIGl0IHByaW50cyB0aGUgbGluZXMgdGhhdCBoYXZlIGFjY3VtdWxhdGVkIGluIHRoZSBuZXcgbG9nIGZpbGUuCisgVGhpcyBvcHRpb24gaXMgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gZm9sbG93aW5nIGJ5IG5hbWUuCisgCistQGl0ZW14IC1uIEB2YXJ7bn0KKytAaXRlbSAtbiBAdmFye259CisgQGl0ZW14IC0tbGluZXM9QHZhcntufQorIEBvcGluZGV4IC1uCisgQG9waW5kZXggLS1saW5lcworQEAgLTI4MTcsNyArMjgxNyw3IEBAIG9wdGlvbi4KKyBAb3BpbmRleCAtLW51bWVyaWMtc3VmZml4ZXMKKyBVc2UgZGlnaXRzIGluIHN1ZmZpeGVzIHJhdGhlciB0aGFuIGxvd2VyLWNhc2UgbGV0dGVycy4KKyAKKy1AaXRlbXggLS12ZXJib3NlCisrQGl0ZW0gLS12ZXJib3NlCisgQG9waW5kZXggLS12ZXJib3NlCisgV3JpdGUgYSBkaWFnbm9zdGljIHRvIHN0YW5kYXJkIGVycm9yIGp1c3QgYmVmb3JlIGVhY2ggb3V0cHV0IGZpbGUgaXMgb3BlbmVkLgorIAorQEAgLTMwNTUsNyArMzA1NSw3IEBAIFByaW50IG9ubHkgdGhlIG5ld2xpbmUgY291bnRzLgorIEBvcGluZGV4IC0tbWF4LWxpbmUtbGVuZ3RoCisgUHJpbnQgb25seSB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aHMuCisgCistQGl0ZW14IC0tZmlsZXMwLWZyb209QHZhcntGSUxFfQorK0BpdGVtIC0tZmlsZXMwLWZyb209QHZhcntGSUxFfQorIEBvcGluZGV4IC0tZmlsZXMwLWZyb209QHZhcntGSUxFfQorIEBjaW5kZXggaW5jbHVkaW5nIGZpbGVzIGZyb20gQGNvbW1hbmR7ZHV9CisgUmF0aGVyIHRoYW4gcHJvY2Vzc2luZyBmaWxlcyBuYW1lZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBwcm9jZXNzIHRob3NlCitAQCAtMzI1MCw3ICszMjUwLDcgQEAgYW4gTUQ1IGNoZWNrc3VtIGluY29uc2lzdGVudCB3aXRoIHRoZSBhc3NvY2lhdGVkIGZpbGUsIG9yIGlmIG5vIHZhbGlkCisgbGluZSBpcyBmb3VuZCwgQGNvbW1hbmR7bWQ1c3VtfSBleGl0cyB3aXRoIG5vbnplcm8gc3RhdHVzLiAgT3RoZXJ3aXNlLAorIGl0IGV4aXRzIHN1Y2Nlc3NmdWxseS4KKyAKKy1AaXRlbXggLS1zdGF0dXMKKytAaXRlbSAtLXN0YXR1cworIEBvcGluZGV4IC0tc3RhdHVzCisgQGNpbmRleCB2ZXJpZnlpbmcgTUQ1IGNoZWNrc3VtcworIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBvbmx5IHdoZW4gdmVyaWZ5aW5nIGNoZWNrc3Vtcy4KK0BAIC01ODM3LDcgKzU4MzcsNyBAQCBjb21tYW5kIGxpbmUgdW5sZXNzIHRoZSBAb3B0aW9uey0tZGVyZWZlcmVuY2UtY29tbWFuZC1saW5lfSAoQG9wdGlvbnstSH0pLAorIElmIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHNwZWNpZmllcyBhIHN5bWJvbGljIGxpbmssIHNob3cgaW5mb3JtYXRpb24KKyBmb3IgdGhlIGZpbGUgdGhlIGxpbmsgcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBmb3IgdGhlIGxpbmsgaXRzZWxmLgorIAorLUBpdGVteCAtLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZS1zeW1saW5rLXRvLWRpcgorK0BpdGVtIC0tZGVyZWZlcmVuY2UtY29tbWFuZC1saW5lLXN5bWxpbmstdG8tZGlyCisgQG9waW5kZXggLS1kZXJlZmVyZW5jZS1jb21tYW5kLWxpbmUtc3ltbGluay10by1kaXIKKyBAY2luZGV4IHN5bWJvbGljIGxpbmtzLCBkZXJlZmVyZW5jaW5nCisgRG8gbm90IGRlcmVmZXJlbmNlIHN5bWJvbGljIGxpbmtzLCB3aXRoIG9uZSBleGNlcHRpb246CitAQCAtNzAxNSwxNSArNzAxNSwxNSBAQCBJZiBzcGVjaWZpZWQsIHRoZSBAdmFye2F0dHJpYnV0ZV9saXN0fSBtdXN0IGJlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QKKyBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6CisgCisgQHRhYmxlIEBzYW1wCistQGl0ZW14IG1vZGUKKytAaXRlbSBtb2RlCisgUHJlc2VydmUgdGhlIGZpbGUgbW9kZSBiaXRzIGFuZCBhY2Nlc3MgY29udHJvbCBsaXN0cy4KKy1AaXRlbXggb3duZXJzaGlwCisrQGl0ZW0gb3duZXJzaGlwCisgUHJlc2VydmUgdGhlIG93bmVyIGFuZCBncm91cC4gIE9uIG1vc3QgbW9kZXJuIHN5c3RlbXMsCisgb25seSB1c2VycyB3aXRoIGFwcHJvcHJpYXRlIHByaXZpbGVnZXMgbWF5IGNoYW5nZSB0aGUgb3duZXIgb2YgYSBmaWxlLAorIGFuZCBvcmRpbmFyeSB1c2VycworIG1heSBwcmVzZXJ2ZSB0aGUgZ3JvdXAgb3duZXJzaGlwIG9mIGEgZmlsZSBvbmx5IGlmIHRoZXkgaGFwcGVuIHRvIGJlCisgYSBtZW1iZXIgb2YgdGhlIGRlc2lyZWQgZ3JvdXAuCistQGl0ZW14IHRpbWVzdGFtcHMKKytAaXRlbSB0aW1lc3RhbXBzCisgUHJlc2VydmUgdGhlIHRpbWVzIG9mIGxhc3QgYWNjZXNzIGFuZCBsYXN0IG1vZGlmaWNhdGlvbiwgd2hlbiBwb3NzaWJsZS4KKyBJbiBnZW5lcmFsLCBpdCBpcyBub3QgcG9zc2libGUgdG8gcHJlc2VydmUgdGhlc2UgYXR0cmlidXRlcworIHdoZW4gdGhlIGFmZmVjdGVkIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLgorQEAgLTcwMzEsMTIgKzcwMzEsMTIgQEAgSG93ZXZlciwgRnJlZUJTRCBub3cgcHJvdmlkZXMgdGhlIEBjb2Rle2x1dGltZXN9IGZ1bmN0aW9uLCB3aGljaCBtYWtlcworIGl0IHBvc3NpYmlsZSBldmVuIGZvciBzeW1ib2xpYyBsaW5rcy4gIEhvd2V2ZXIsIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcworIG5vdCB5ZXQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhhdC4KKyBAYyBGSVhNRTogb25jZSB3ZSBwcm92aWRlIGx1dGltZXMgc3VwcG9ydCwgdXBkYXRlIHRoZSBhYm92ZS4KKy1AaXRlbXggbGlua3MKKytAaXRlbSBsaW5rcworIFByZXNlcnZlIGluIHRoZSBkZXN0aW5hdGlvbiBmaWxlcworIGFueSBsaW5rcyBiZXR3ZWVuIGNvcnJlc3BvbmRpbmcgc291cmNlIGZpbGVzLgorIEBjIEdpdmUgZXhhbXBsZXMgaWxsdXN0cmF0aW5nIGhvdyBoYXJkIGxpbmtzIGFyZSBwcmVzZXJ2ZWQuCisgQGMgQWxzbywgc2hvdyBob3cgc29mdCBsaW5rcyBtYXAgdG8gaGFyZCBsaW5rcyB3aXRoIC1MIGFuZCAtSC4KKy1AaXRlbXggYWxsCisrQGl0ZW0gYWxsCisgUHJlc2VydmUgYWxsIGZpbGUgYXR0cmlidXRlcy4KKyBFcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgYWxsIG9mIHRoZSBhYm92ZS4KKyBAZW5kIHRhYmxlCitAQCAtNzA0OSwxMiArNzA0OSwxMiBAQCBtb2RlIGJpdHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGZpbGUsIG1pbnVzIHRoZSBiaXRzIHNldCBpbiB0aGUKKyB1bWFzayBhbmQgbWludXMgdGhlIHNldC11c2VyLUlEIGFuZCBzZXQtZ3JvdXAtSUQgYml0cy4KKyBAeHJlZntGaWxlIHBlcm1pc3Npb25zfS4KKyAKKy1AaXRlbXggQHd7QGtiZHstLW5vLXByZXNlcnZlfT1AdmFye2F0dHJpYnV0ZV9saXN0fX0KKytAaXRlbSBAd3tAa2Jkey0tbm8tcHJlc2VydmV9PUB2YXJ7YXR0cmlidXRlX2xpc3R9fQorIEBjaW5kZXggZmlsZSBpbmZvcm1hdGlvbiwgcHJlc2VydmluZworIERvIG5vdCBwcmVzZXJ2ZSB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuICBUaGUgQHZhcnthdHRyaWJ1dGVfbGlzdH0KKyBoYXMgdGhlIHNhbWUgZm9ybSBhcyBmb3IgQG9wdGlvbnstLXByZXNlcnZlfS4KKyAKKy1AaXRlbXggLS1wYXJlbnRzCisrQGl0ZW0gLS1wYXJlbnRzCisgQG9waW5kZXggLS1wYXJlbnRzCisgQGNpbmRleCBwYXJlbnQgZGlyZWN0b3JpZXMgYW5kIEBjb21tYW5ke2NwfQorIEZvcm0gdGhlIG5hbWUgb2YgZWFjaCBkZXN0aW5hdGlvbiBmaWxlIGJ5IGFwcGVuZGluZyB0byB0aGUgdGFyZ2V0CitAQCAtNzA3MCw3ICs3MDcwLDcgQEAgY3AgLS1wYXJlbnRzIGEvYi9jIGV4aXN0aW5nX2RpcgorIGNvcGllcyB0aGUgZmlsZSBAZmlsZXthL2IvY30gdG8gQGZpbGV7ZXhpc3RpbmdfZGlyL2EvYi9jfSwgY3JlYXRpbmcKKyBhbnkgbWlzc2luZyBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IEB3e0BrYmR7LS1yZXBseX09QHZhcntob3d9fQorK0BpdGVtIEB3e0BrYmR7LS1yZXBseX09QHZhcntob3d9fQorIEBvcGluZGV4IC0tcmVwbHkKKyBAY2luZGV4IGludGVyYWN0aXZpdHkKKyBAYyBGSVhNRTogcmVtb3ZlIGluIDIwMDgKK0BAIC03NzQyLDcgKzc3NDIsNyBAQCBQcm9tcHQgd2hldGhlciB0byBvdmVyd3JpdGUgZWFjaCBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlLCByZWdhcmRsZXNzCisgb2YgaXRzIHBlcm1pc3Npb25zLgorIElmIHRoZSByZXNwb25zZSBpcyBub3QgYWZmaXJtYXRpdmUsIHRoZSBmaWxlIGlzIHNraXBwZWQuCisgCistQGl0ZW14IEB3e0BrYmR7LS1yZXBseX09QHZhcntob3d9fQorK0BpdGVtIEB3e0BrYmR7LS1yZXBseX09QHZhcntob3d9fQorIEBvcGluZGV4IC0tcmVwbHkKKyBAY2luZGV4IGludGVyYWN0aXZpdHkKKyBAYyBGSVhNRTogcmVtb3ZlIGluIDIwMDgKK0BAIC03ODQ3LDcgKzc4NDcsNyBAQCBmaWxlcyBhcmUgbmFtZWQgb3IgaWYgYSByZWN1cnNpdmUgcmVtb3ZhbCBpcyByZXF1ZXN0ZWQuICBJZ25vcmUgYW55CisgcHJldmlvdXMgQG9wdGlvbnstLWZvcmNlfSAoQG9wdGlvbnstZn0pIG9wdGlvbi4gIEVxdWl2YWxlbnQgdG8KKyBAb3B0aW9uey0taW50ZXJhY3RpdmU9b25jZX0uCisgCistQGl0ZW14IC0taW50ZXJhY3RpdmUgWz1AdmFye3doZW59XQorK0BpdGVtIC0taW50ZXJhY3RpdmUgWz1AdmFye3doZW59XQorIEBvcGluZGV4IC0taW50ZXJhY3RpdmUKKyBTcGVjaWZ5IHdoZW4gdG8gaXNzdWUgYW4gaW50ZXJhY3RpdmUgcHJvbXB0LiAgQHZhcnt3aGVufSBtYXkgYmUKKyBvbWl0dGVkLCBvciBvbmUgb2Y6CitAQCAtNzg2Niw3ICs3ODY2LDcgQEAgcmVtb3ZhbCBpcyByZXF1ZXN0ZWQuICBFcXVpdmFsZW50IHRvIEBvcHRpb257LUl9LgorIFNwZWNpZnlpbmcgQG9wdGlvbnstLWludGVyYWN0aXZlfSBhbmQgbm8gQHZhcnt3aGVufSBpcyBlcXVpdmFsZW50IHRvCisgQG9wdGlvbnstLWludGVyYWN0aXZlPWFsd2F5c30uCisgCistQGl0ZW14IC0tb25lLWZpbGUtc3lzdGVtCisrQGl0ZW0gLS1vbmUtZmlsZS1zeXN0ZW0KKyBAb3BpbmRleCAtLW9uZS1maWxlLXN5c3RlbQorIEBjaW5kZXggb25lIGZpbGUgc3lzdGVtLCByZXN0cmljdGluZyBAY29tbWFuZHtybX0gdG8KKyBXaGVuIHJlbW92aW5nIGEgaGllcmFyY2h5IHJlY3Vyc2l2ZWx5LCBza2lwIGFueSBkaXJlY3RvcnkgdGhhdCBpcyBvbiBhCitAQCAtNzg4NCw3ICs3ODg0LDcgQEAgd2FybiBhYm91dCBhbmQgc2tpcCBkaXJlY3RvcmllcyBvbiBvdGhlciBmaWxlIHN5c3RlbXMuCisgT2YgY291cnNlLCB0aGlzIHdpbGwgbm90IHNhdmUgeW91ciBAZmlsZXsvaG9tZX0gaWYgaXQgYW5kIHlvdXIKKyBjaHJvb3QgaGFwcGVuIHRvIGJlIG9uIHRoZSBzYW1lIGZpbGUgc3lzdGVtLgorIAorLUBpdGVteCAtLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBkaXNhbGxvdyByZWN1cnNpdmUgZGVzdHJ1Y3Rpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVtb3ZlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30sCitAQCAtNzg5Miw3ICs3ODkyLDcgQEAgd2hlbiB1c2VkIHdpdGggdGhlIEBvcHRpb257LS1yZWN1cnNpdmV9IG9wdGlvbi4KKyBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorIEB4cmVme1RyZWF0aW5nIC8gc3BlY2lhbGx5fS4KKyAKKy1AaXRlbXggLS1uby1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1uby1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1uby1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgYWxsb3cgcmVjdXJzaXZlIGRlc3RydWN0aW9uCisgRG8gbm90IHRyZWF0IEBmaWxley99IHNwZWNpYWxseSB3aGVuIHJlbW92aW5nIHJlY3Vyc2l2ZWx5LgorQEAgLTg4NzQsNyArODg3NCw3IEBAIGFjdHVhbGx5IGNoYW5nZXMuCisgRG8gbm90IHByaW50IGVycm9yIG1lc3NhZ2VzIGFib3V0IGZpbGVzIHdob3NlIG93bmVyc2hpcCBjYW5ub3QgYmUKKyBjaGFuZ2VkLgorIAorLUBpdGVteCBAd3tAa2Jkey0tZnJvbX09QHZhcntvbGQtb3duZXJ9fQorK0BpdGVtIEB3e0BrYmR7LS1mcm9tfT1AdmFye29sZC1vd25lcn19CisgQG9waW5kZXggLS1mcm9tCisgQGNpbmRleCBzeW1ib2xpYyBsaW5rcywgY2hhbmdpbmcgb3duZXIKKyBDaGFuZ2UgYSBAdmFye2ZpbGV9J3Mgb3duZXJzaGlwIG9ubHkgaWYgaXQgaGFzIGN1cnJlbnQgYXR0cmlidXRlcyBzcGVjaWZpZWQKK0BAIC04OTI4LDE0ICs4OTI4LDE0IEBAIGlzIGEgc3ltYm9saWMgbGluay4KKyBCeSBkZWZhdWx0LCBubyBkaWFnbm9zdGljIGlzIGlzc3VlZCBmb3Igc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQKKyBkdXJpbmcgYSByZWN1cnNpdmUgdHJhdmVyc2FsLCBidXQgc2VlIEBvcHRpb257LS12ZXJib3NlfS4KKyAKKy1AaXRlbXggLS1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgZGlzYWxsb3cgcmVjdXJzaXZlIG1vZGlmaWNhdGlvbgorIEZhaWwgdXBvbiBhbnkgYXR0ZW1wdCB0byByZWN1cnNpdmVseSBjaGFuZ2UgdGhlIHJvb3QgZGlyZWN0b3J5LCBAZmlsZXsvfS4KKyBXaXRob3V0IEBvcHRpb257LS1yZWN1cnNpdmV9LCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorIEB4cmVme1RyZWF0aW5nIC8gc3BlY2lhbGx5fS4KKyAKKy1AaXRlbXggLS1uby1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1uby1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1uby1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgYWxsb3cgcmVjdXJzaXZlIG1vZGlmaWNhdGlvbgorIENhbmNlbCB0aGUgZWZmZWN0IG9mIGFueSBwcmVjZWRpbmcgQG9wdGlvbnstLXByZXNlcnZlLXJvb3R9IG9wdGlvbi4KK0BAIC05MDU0LDE0ICs5MDU0LDE0IEBAIGlzIGEgc3ltYm9saWMgbGluay4KKyBCeSBkZWZhdWx0LCBubyBkaWFnbm9zdGljIGlzIGlzc3VlZCBmb3Igc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQKKyBkdXJpbmcgYSByZWN1cnNpdmUgdHJhdmVyc2FsLCBidXQgc2VlIEBvcHRpb257LS12ZXJib3NlfS4KKyAKKy1AaXRlbXggLS1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgZGlzYWxsb3cgcmVjdXJzaXZlIG1vZGlmaWNhdGlvbgorIEZhaWwgdXBvbiBhbnkgYXR0ZW1wdCB0byByZWN1cnNpdmVseSBjaGFuZ2UgdGhlIHJvb3QgZGlyZWN0b3J5LCBAZmlsZXsvfS4KKyBXaXRob3V0IEBvcHRpb257LS1yZWN1cnNpdmV9LCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorIEB4cmVme1RyZWF0aW5nIC8gc3BlY2lhbGx5fS4KKyAKKy1AaXRlbXggLS1uby1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1uby1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1uby1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgYWxsb3cgcmVjdXJzaXZlIG1vZGlmaWNhdGlvbgorIENhbmNlbCB0aGUgZWZmZWN0IG9mIGFueSBwcmVjZWRpbmcgQG9wdGlvbnstLXByZXNlcnZlLXJvb3R9IG9wdGlvbi4KK0BAIC05MTc1LDE0ICs5MTc1LDE0IEBAIGFjdHVhbGx5IGNoYW5nZXMuCisgRG8gbm90IHByaW50IGVycm9yIG1lc3NhZ2VzIGFib3V0IGZpbGVzIHdob3NlIHBlcm1pc3Npb25zIGNhbm5vdCBiZQorIGNoYW5nZWQuCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTYwMyw3ICs5NjAzLDcgQEAgVGhlIHByb2dyYW0gYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMuICBBbHNvIHNlZSBAcmVme0NvbW1vbiBvcHRpb25zfS4KKyBAb3BpbmRleCAtLWFsbAorIFNob3cgY291bnRzIGZvciBhbGwgZmlsZXMsIG5vdCBqdXN0IGRpcmVjdG9yaWVzLgorIAorLUBpdGVteCAtLWFwcGFyZW50LXNpemUKKytAaXRlbSAtLWFwcGFyZW50LXNpemUKKyBAb3BpbmRleCAtLWFwcGFyZW50LXNpemUKKyBQcmludCBhcHBhcmVudCBzaXplcywgcmF0aGVyIHRoYW4gZGlzayB1c2FnZS4gIFRoZSBhcHBhcmVudCBzaXplIG9mIGEKKyBmaWxlIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVwb3J0ZWQgYnkgQGNvZGV7d2MgLWN9IG9uIHJlZ3VsYXIgZmlsZXMsCitAQCAtOTY1NCw3ICs5NjU0LDcgQEAgRG9lcyBub3QgYWZmZWN0IG90aGVyIHN5bWJvbGljIGxpbmtzLiAgVGhpcyBpcyBoZWxwZnVsIGZvciBmaW5kaW5nCisgb3V0IHRoZSBkaXNrIHVzYWdlIG9mIGRpcmVjdG9yaWVzLCBzdWNoIGFzIEBmaWxley91c3IvdG1wfSwgd2hpY2gKKyBhcmUgb2Z0ZW4gc3ltYm9saWMgbGlua3MuCisgCistQGl0ZW14IC0tZmlsZXMwLWZyb209QHZhcntGSUxFfQorK0BpdGVtIC0tZmlsZXMwLWZyb209QHZhcntGSUxFfQorIEBvcGluZGV4IC0tZmlsZXMwLWZyb209QHZhcntGSUxFfQorIEBjaW5kZXggaW5jbHVkaW5nIGZpbGVzIGZyb20gQGNvbW1hbmR7ZHV9CisgUmF0aGVyIHRoYW4gcHJvY2Vzc2luZyBmaWxlcyBuYW1lZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBwcm9jZXNzIHRob3NlCitAQCAtOTczMyw3ICs5NzMzLDcgQEAgT3V0cHV0IGEgbnVsbCBieXRlIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLCByYXRoZXIgdGhhbiBhIG5ld2xpbmUuCisgVGhpcyBvcHRpb24gZW5hYmxlcyBvdGhlciBwcm9ncmFtcyB0byBwYXJzZSB0aGUgb3V0cHV0IG9mIEBjb21tYW5ke2R1fQorIGV2ZW4gd2hlbiB0aGF0IG91dHB1dCB3b3VsZCBjb250YWluIGZpbGUgbmFtZXMgd2l0aCBlbWJlZGRlZCBuZXdsaW5lcy4KKyAKKy1AaXRlbXggLS1zaQorK0BpdGVtIC0tc2kKKyBAb3BpbmRleCAtLXNpCisgQGNpbmRleCBTSSBvdXRwdXQKKyBBcHBlbmQgYW4gU0ktc3R5bGUgYWJicmV2aWF0aW9uIHRvIGVhY2ggc2l6ZSwgc3VjaCBhcyBAc2FtcHtNQn0gZm9yCitAQCAtOTc1NCwxMyArOTc1NCwxMyBAQCBEaXNwbGF5IG9ubHkgYSB0b3RhbCBmb3IgZWFjaCBhcmd1bWVudC4KKyBSZXBvcnQgdGhlIHNpemUgb2YgZWFjaCBkaXJlY3Rvcnkgc2VwYXJhdGVseSwgbm90IGluY2x1ZGluZyB0aGUgc2l6ZXMKKyBvZiBzdWJkaXJlY3Rvcmllcy4KKyAKKy1AaXRlbXggLS10aW1lCisrQGl0ZW0gLS10aW1lCisgQG9waW5kZXggLS10aW1lCisgQGNpbmRleCBsYXN0IG1vZGlmaWVkIGRhdGVzLCBkaXNwbGF5aW5nIGluIEBjb21tYW5ke2R1fQorIFNob3cgdGltZSBvZiB0aGUgbW9zdCByZWNlbnQgbW9kaWZpY2F0aW9uIG9mIGFueSBmaWxlIGluIHRoZSBkaXJlY3RvcnksCisgb3IgYW55IG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4KKyAKKy1AaXRlbXggLS10aW1lPWN0aW1lCisrQGl0ZW0gLS10aW1lPWN0aW1lCisgQGl0ZW14IC0tdGltZT1zdGF0dXMKKyBAaXRlbXggLS10aW1lPXVzZQorIEBvcGluZGV4IC0tdGltZQorQEAgLTk3NzAsNyArOTc3MCw3IEBAIG9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisgU2hvdyB0aGUgbW9zdCByZWNlbnQgc3RhdHVzIGNoYW5nZSB0aW1lICh0aGUgQHNhbXB7Y3RpbWV9IGluIHRoZSBpbm9kZSkgb2YKKyBhbnkgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LCBpbnN0ZWFkIG9mIHRoZSBtb2RpZmljYXRpb24gdGltZS4KKyAKKy1AaXRlbXggLS10aW1lPWF0aW1lCisrQGl0ZW0gLS10aW1lPWF0aW1lCisgQGl0ZW14IC0tdGltZT1hY2Nlc3MKKyBAb3BpbmRleCAtLXRpbWUKKyBAb3BpbmRleCBhdGltZUByeywgc2hvdyB0aGUgbW9zdCByZWNlbnR9CitAQCAtOTkxMSw3ICs5OTExLDcgQEAgJCBzdGF0IC0tZm9ybWF0PSVkOiVpIC8gL3VzcgorIDIwNTc6MgorIEBlbmQgZXhhbXBsZQorIAorLUBpdGVteCAtLXByaW50Zj1AdmFye2Zvcm1hdH0KKytAaXRlbSAtLXByaW50Zj1AdmFye2Zvcm1hdH0KKyBAb3BpbmRleCAtLXByaW50Zj1AdmFye2Zvcm1hdH0KKyBAY2luZGV4IG91dHB1dCBmb3JtYXQKKyBVc2UgQHZhcntmb3JtYXR9IHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGZvcm1hdC4KK0BAIC0xMjI0MCw3ICsxMjI0MCw3IEBAIE92ZXJyaWRlcyBhbGwgb3RoZXIgb3B0aW9ucy4KKyBAb3BpbmRleCAtcworIElnbm9yZWQ7IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgdmVyc2lvbnMgb2YgQGNvbW1hbmR7d2hvfS4KKyAKKy1AaXRlbXggLXUKKytAaXRlbSAtdQorIEBvcGluZGV4IC11CisgQGNpbmRleCBpZGxlIHRpbWUKKyBBZnRlciB0aGUgbG9naW4gdGltZSwgcHJpbnQgdGhlIG51bWJlciBvZiBob3VycyBhbmQgbWludXRlcyB0aGF0IHRoZQorQEAgLTEyMjU0LDcgKzEyMjU0LDcgQEAgdXNlciBoYXMgYmVlbiBpZGxlLiAgQHNhbXB7Ln0gbWVhbnMgdGhlIHVzZXIgd2FzIGFjdGl2ZSBpbiB0aGUgbGFzdCBtaW51dGUuCisgTGlzdCBvbmx5IHRoZSBlbnRyaWVzIHRoYXQgY29ycmVzcG9uZCB0byBwcm9jZXNzZXMgdmlhIHdoaWNoIHRoZQorIHN5c3RlbSBpcyB3YWl0aW5nIGZvciBhIHVzZXIgdG8gbG9naW4uICBUaGUgdXNlciBuYW1lIGlzIGFsd2F5cyBAc2FtcHtMT0dJTn0uCisgCistQGl0ZW14IC0tbG9va3VwCisrQGl0ZW0gLS1sb29rdXAKKyBAb3BpbmRleCAtLWxvb2t1cAorIEF0dGVtcHQgdG8gY2Fub25pY2FsaXplIGhvc3RuYW1lcyBmb3VuZCBpbiB1dG1wIHRocm91Z2ggYSBETlMgbG9va3VwLiAgVGhpcworIGlzIG5vdCB0aGUgZGVmYXVsdCBiZWNhdXNlIGl0IGNhbiBjYXVzZSBzaWduaWZpY2FudCBkZWxheXMgb24gc3lzdGVtcyB3aXRoCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWkxOG4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtaTE4bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTM3MjIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWkxOG4ucGF0Y2gKQEAgLTAsMCArMSw0MDUxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGlzIHBhdGNoIHdhcyBpbXBvcnRlZCBmcm9tIHRoZSBGZWRvcmEgQ29yZSA4IGNvcmV1dGlscy02LjktOSBwYWNrYWdlLgorCitUaGUgcGFja2FnZSBpcyBzdGF0ZWQgYXMgYmVpbmcgTGljZW5zZWQgYXMgR1BMdjIrLgorCitUaGUgY29tbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHVycG9zZSBpcyBsaW4xOG51eC9sc2IgY29tcGxpYW5jZS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9zb3J0LW1iLXRlc3RzCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDU4IEBACisrIyEgL2Jpbi9zaAorK2Nhc2UgJCMgaW4KKysgIDApIHh4PScuLi8uLi9zcmMvc29ydCc7OworKyAgKikgeHg9IiQxIjs7CisrZXNhYworK3Rlc3QgIiRWRVJCT1NFIiAmJiBlY2hvPWVjaG8gfHwgZWNobz06CisrJGVjaG8gdGVzdGluZyBwcm9ncmFtOiAkeHgKKytlcnJvcnM9MAorK3Rlc3QgIiRzcmNkaXIiIHx8IHNyY2Rpcj0uCisrdGVzdCAiJFZFUkJPU0UiICYmICR4eCAtLXZlcnNpb24gMj4gL2Rldi9udWxsCisrCisrZXhwb3J0IExDX0FMTD1lbl9VUy5VVEYtOAorK2xvY2FsZSAtayBMQ19DVFlQRSAyPiYxIHwgZ3JlcCAtcSBjaGFybWFwLipVVEYtOCB8fCBleGl0IDc3CisrZXJyb3JzPTAKKysKKyskeHggLXQg77ygIC1rMiAtbiBtYjEuSSA+IG1iMS5PCisrY29kZT0kPworK2lmIHRlc3QgJGNvZGUgIT0gMDsgdGhlbgorKyAgJGVjaG8gIlRlc3QgbWIxIGZhaWxlZDogJHh4IHJldHVybiBjb2RlICRjb2RlIGRpZmZlcnMgZnJvbSBleHBlY3RlZCB2YWx1ZSAwIiAxPiYyCisrICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgCisrZWxzZQorKyAgY21wIG1iMS5PICRzcmNkaXIvbWIxLlggPiAvZGV2L251bGwgMj4mMQorKyAgY2FzZSAkPyBpbgorKyAgICAwKSBpZiB0ZXN0ICIkVkVSQk9TRSI7IHRoZW4gJGVjaG8gInBhc3NlZCBtYjEiOyBmaTs7CisrICAgIDEpICRlY2hvICJUZXN0IG1iMSBmYWlsZWQ6IGZpbGVzIG1iMS5PIGFuZCAkc3JjZGlyL21iMS5YIGRpZmZlciIgMT4mMgorKyAgICAgICAoZGlmZiAtYyBtYjEuTyAkc3JjZGlyL21iMS5YKSAyPiAvZGV2L251bGwKKysgICAgICAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYDs7CisrICAgIDIpICRlY2hvICJUZXN0IG1iMSBtYXkgaGF2ZSBmYWlsZWQuIiAxPiYyCisrICAgICAgICRlY2hvIFRoZSBjb21tYW5kICJjbXAgbWIxLk8gJHNyY2Rpci9tYjEuWCIgZmFpbGVkLiAxPiYyCisrICAgICAgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWA7OworKyAgZXNhYworK2ZpCisrCisrJHh4IC10IO+8oCAtazQgLW4gbWIyLkkgPiBtYjIuTworK2NvZGU9JD8KKytpZiB0ZXN0ICRjb2RlICE9IDA7IHRoZW4KKysgICRlY2hvICJUZXN0IG1iMiBmYWlsZWQ6ICR4eCByZXR1cm4gY29kZSAkY29kZSBkaWZmZXJzIGZyb20gZXhwZWN0ZWQgdmFsdWUgMCIgMT4mMgorKyAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYAorK2Vsc2UKKysgIGNtcCBtYjIuTyAkc3JjZGlyL21iMi5YID4gL2Rldi9udWxsIDI+JjEKKysgIGNhc2UgJD8gaW4KKysgICAgMCkgaWYgdGVzdCAiJFZFUkJPU0UiOyB0aGVuICRlY2hvICJwYXNzZWQgbWIyIjsgZmk7OworKyAgICAxKSAkZWNobyAiVGVzdCBtYjIgZmFpbGVkOiBmaWxlcyBtYjIuTyBhbmQgJHNyY2Rpci9tYjIuWCBkaWZmZXIiIDE+JjIKKysgICAgICAgKGRpZmYgLWMgbWIyLk8gJHNyY2Rpci9tYjIuWCkgMj4gL2Rldi9udWxsCisrICAgICAgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWA7OworKyAgICAyKSAkZWNobyAiVGVzdCBtYjIgbWF5IGhhdmUgZmFpbGVkLiIgMT4mMgorKyAgICAgICAkZWNobyBUaGUgY29tbWFuZCAiY21wIG1iMi5PICRzcmNkaXIvbWIyLlgiIGZhaWxlZC4gMT4mMgorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgIGVzYWMKKytmaQorKworK2lmIHRlc3QgJGVycm9ycyA9IDA7IHRoZW4KKysgICRlY2hvIFBhc3NlZCBhbGwgMTEzIHRlc3RzLiAxPiYyCisrZWxzZQorKyAgJGVjaG8gRmFpbGVkICRlcnJvcnMgdGVzdHMuIDE+JjIKKytmaQorK3Rlc3QgJGVycm9ycyA9IDAgfHwgZXJyb3JzPTEKKytleGl0ICRlcnJvcnMKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMi5JCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytBcHBsZe+8oO+8oe+8oTEw77yg77ygMjAKKytCYW5hbmHvvKDvvKHvvKE177yg77ygMzAKKytDaXRydXPvvKDvvKHvvKEyMO+8oO+8oDUKKytDaGVycnnvvKDvvKHvvKEzMO+8oO+8oDEwCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9tYjIuWAkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0IEBACisrQ2l0cnVz77yg77yh77yhMjDvvKDvvKA1CisrQ2hlcnJ577yg77yh77yhMzDvvKDvvKAxMAorK0FwcGxl77yg77yh77yhMTDvvKDvvKAyMAorK0JhbmFuYe+8oO+8oe+8oTXvvKDvvKAzMAorLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvbWIxLkkJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNCBAQAorK0FwcGxl77ygMTAKKytCYW5hbmHvvKA1CisrQ2l0cnVz77ygMjAKKytDaGVycnnvvKAzMAorLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvbWIxLlgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNCBAQAorK0JhbmFuYe+8oDUKKytBcHBsZe+8oDEwCisrQ2l0cnVz77ygMjAKKytDaGVycnnvvKAzMAorLS0tIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvTWFrZWZpbGUuYW0uaTE4bgkyMDA3LTAxLTI0IDA3OjQ3OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvTWFrZWZpbGUuYW0JMjAwNy0wMy0wMSAxNTowOTo1OS4wMDAwMDAwMDAgKzAwMDAKK0BAIC02NiwxNSArNjYsMTcgQEAKKyBiaWdmaWVsZC5PIGJpZ2ZpZWxkLkUKKyAjI3Rlc3QtZmlsZXMtZW5kCisgCistRVhUUkFfRElTVCA9IFRlc3QucG0gJHgtdGVzdHMgJChleHBsaWNpdCkgJChtYWludF9nZW4pCistbm9pbnN0X1NDUklQVFMgPSAkeC10ZXN0cworK3J1bl9nZW4gKz0gbWIxLjAgbWIyLjAKKysKKytFWFRSQV9ESVNUID0gVGVzdC5wbSAkeC10ZXN0cyAkKGV4cGxpY2l0KSAkKG1haW50X2dlbikgbWIxLkkgbWIxLlggbWIyLkkgbWIyLlgKKytub2luc3RfU0NSSVBUUyA9ICR4LXRlc3RzICMgJHgtbWItdGVzdHMKKyBURVNUU19FTlZJUk9OTUVOVCA9IFwKKyAgIENVX1RFU1RfTkFNRT1gYmFzZW5hbWUgJChhYnNfc3JjZGlyKWAsJCR0c3QgXAorICAgUEFUSD0iJChWR19QQVRIX1BSRUZJWClgcHdkYC8uLi8uLi9zcmMkKFBBVEhfU0VQQVJBVE9SKSQkUEFUSCIKKyAKKyBlZGl0cGwgPSBzZWQgLWUgJ3MsQCcnUEVSTCcnQCwkKFBFUkwpLGcnIC1lICdzLEAnJ3NyY2RpcicnQCwkKHNyY2RpciksZycKKyAKKy1URVNUUyA9ICR4LXRlc3RzCisrVEVTVFMgPSAkeC10ZXN0cyAkeC1tYi10ZXN0cworIAorIG1rX3NjcmlwdCA9ICQoc3JjZGlyKS8uLi9tay1zY3JpcHQKKyAkKHNyY2RpcikvJHgtdGVzdHM6ICQobWtfc2NyaXB0KSBUZXN0LnBtIE1ha2VmaWxlLmFtCistLS0gY29yZXV0aWxzLTYuOCsvbGliL2xpbmVidWZmZXIuaC5pMThuCTIwMDUtMDUtMTQgMDc6NDQ6MjQuMDAwMDAwMDAwICswMTAwCisrKysgY29yZXV0aWxzLTYuOCsvbGliL2xpbmVidWZmZXIuaAkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTIyLDYgKzIyLDExIEBACisgCisgIyBpbmNsdWRlIDxzdGRpby5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QuICAqLworKyMgaWYgSEFWRV9XQ0hBUl9ICisrIyAgaW5jbHVkZSA8d2NoYXIuaD4KKysjIGVuZGlmCisrCisgLyogQSBgc3RydWN0IGxpbmVidWZmZXInIGhvbGRzIGEgbGluZSBvZiB0ZXh0LiAqLworIAorIHN0cnVjdCBsaW5lYnVmZmVyCitAQCAtMjksNiArMzQsOSBAQAorICAgc2l6ZV90IHNpemU7CQkJLyogQWxsb2NhdGVkLiAqLworICAgc2l6ZV90IGxlbmd0aDsJCS8qIFVzZWQuICovCisgICBjaGFyICpidWZmZXI7CisrIyBpZiBIQVZFX1dDSEFSX0gKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysjIGVuZGlmCisgfTsKKyAKKyAvKiBJbml0aWFsaXplIGxpbmVidWZmZXIgTElORUJVRkZFUiBmb3IgdXNlLiAqLworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9leHBhbmQuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL2V4cGFuZC5jCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMzgsMTEgKzM4LDI4IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAieHN0cm5kdXAuaCIKKyAKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KKyAjZGVmaW5lIFBST0dSQU1fTkFNRSAiZXhwYW5kIgorIAorQEAgLTE4Myw2ICsyMDAsNyBAQAorIAkgICAgICBzdG9wcyA9IG51bV9zdGFydCArIGxlbiAtIDE7CisgCSAgICB9CisgCX0KKysKKyAgICAgICBlbHNlCisgCXsKKyAJICBlcnJvciAoMCwgMCwgXygidGFiIHNpemUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIocyk6ICVzIiksCitAQCAtMzY1LDYgKzM4MywxNDIgQEAKKyAgICAgfQorIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytleHBhbmRfbXVsdGlieXRlICh2b2lkKQorK3sKKysgIEZJTEUgKmZwOwkJCS8qIElucHV0IHN0cmVtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBpbnB1dCBzdHJlYW0uICovCisrICBtYnN0YXRlX3QgaV9zdGF0ZV9iYWs7CS8qIEJhY2sgdXAgdGhlIElfU1RBVEUuICovCisrICBtYnN0YXRlX3Qgb19zdGF0ZTsJCS8qIEN1cnJlbnQgc2hpZnQgc3RhdGUgb2YgdGhlIG91dHB1dCBzdHJlYW0uICovCisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIGNoYXIgKmJ1ZnBvczsJCQkvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgc2l6ZV90IGJ1ZmxlbiA9IDA7CQkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIHdjaGFyX3Qgd2M7CQkJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CQkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCQkgICB3aGljaCBzaG93cyBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIGludCB0YWJfaW5kZXggPSAwOwkJLyogSW5kZXggaW4gYHRhYl9saXN0JyBvZiBuZXh0IHRhYnN0b3AuICovCisrICBpbnQgY29sdW1uID0gMDsJCS8qIENvbHVtbiBvbiBzY3JlZW4gb2YgdGhlIG5leHQgY2hhci4gKi8KKysgIGludCBuZXh0X3RhYl9jb2x1bW47CQkvKiBDb2x1bW4gdGhlIG5leHQgdGFiIHN0b3AgaXMgb24uICovCisrICBpbnQgY29udmVydCA9IDE7CQkvKiBJZiBub256ZXJvLCBwZXJmb3JtIHRyYW5zbGF0aW9ucy4gKi8KKysKKysgIGZwID0gbmV4dF9maWxlICgoRklMRSAqKSBOVUxMKTsKKysgIGlmIChmcCA9PSBOVUxMKQorKyAgICByZXR1cm47CisrCisrICBtZW1zZXQgKCZvX3N0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrICBtZW1zZXQgKCZpX3N0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBmb3IgKDs7KQorKyAgICB7CisrICAgICAgLyogUmVmaWxsIHRoZSBidWZmZXIgQlVGLiAqLworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mKGZwKSAmJiAhZmVycm9yKGZwKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgZnApOworKwkgIGJ1ZnBvcyA9IGJ1ZjsKKysJfQorKworKyAgICAgIC8qIE5vIGNoYXJhY3RlciBpcyBsZWZ0IGluIEJVRi4gKi8KKysgICAgICBpZiAoYnVmbGVuIDwgMSkKKysJeworKwkgIGZwID0gbmV4dF9maWxlIChmcCk7CisrCisrCSAgaWYgKGZwID09IE5VTEwpCisrCSAgICBicmVhazsJCS8qIE5vIG1vcmUgZmlsZXMuICovCisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBtZW1zZXQgKCZpX3N0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogR2V0IGEgd2lkZSBjaGFyYWN0ZXIuICovCisrICAgICAgaV9zdGF0ZV9iYWsgPSBpX3N0YXRlOworKyAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBidWZwb3MsIGJ1ZmxlbiwgJmlfc3RhdGUpOworKworKyAgICAgIHN3aXRjaCAobWJsZW5ndGgpCisrCXsKKysJY2FzZSAoc2l6ZV90KS0xOgkvKiBpbGxlZ2FsIGJ5dGUgc2VxdWVuY2UuICovCisrCWNhc2UgKHNpemVfdCktMjoKKysJICBtYmxlbmd0aCA9IDE7CisrCSAgaV9zdGF0ZSA9IGlfc3RhdGVfYmFrOworKwkgIGlmIChjb252ZXJ0KQorKwkgICAgeworKwkgICAgICArK2NvbHVtbjsKKysJICAgICAgaWYgKGNvbnZlcnRfZW50aXJlX2xpbmUgPT0gMCkKKysJCWNvbnZlcnQgPSAwOworKwkgICAgfQorKwkgIHB1dGNoYXIgKCpidWZwb3MpOworKwkgIGJyZWFrOworKworKwljYXNlIDA6CQkvKiBudWxsLiAqLworKwkgIG1ibGVuZ3RoID0gMTsKKysJICBpZiAoY29udmVydCAmJiBjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCSAgICBjb252ZXJ0ID0gMDsKKysJICBwdXRjaGFyICgnXDAnKTsKKysJICBicmVhazsKKysKKysJZGVmYXVsdDoKKysJICBpZiAod2MgPT0gTCdcbicpICAgLyogTEYuICovCisrCSAgICB7CisrCSAgICAgIHRhYl9pbmRleCA9IDA7CisrCSAgICAgIGNvbHVtbiA9IDA7CisrCSAgICAgIGNvbnZlcnQgPSAxOworKwkgICAgICBwdXRjaGFyICgnXG4nKTsKKysJICAgIH0KKysJICBlbHNlIGlmICh3YyA9PSBMJ1x0JyAmJiBjb252ZXJ0KQkvKiBUYWIuICovCisrCSAgICB7CisrCSAgICAgIGlmICh0YWJfc2l6ZSA9PSAwKQorKwkJeworKwkJICAvKiBEbyBub3QgbGV0IHRhYl9pbmRleCA9PSBmaXJzdF9mcmVlX3RhYjsKKysJCSAgICAgc3RvcCB3aGVuIGl0IGlzIDEgbGVzcy4gKi8KKysJCSAgd2hpbGUgKHRhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMQorKwkJICAgICAgJiYgY29sdW1uID49IHRhYl9saXN0W3RhYl9pbmRleF0pCisrCQkgICAgdGFiX2luZGV4Kys7CisrCQkgIG5leHRfdGFiX2NvbHVtbiA9IHRhYl9saXN0W3RhYl9pbmRleF07CisrCQkgIGlmICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEpCisrCQkgICAgdGFiX2luZGV4Kys7CisrCQkgIGlmIChjb2x1bW4gPj0gbmV4dF90YWJfY29sdW1uKQorKwkJICAgIG5leHRfdGFiX2NvbHVtbiA9IGNvbHVtbiArIDE7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW5leHRfdGFiX2NvbHVtbiA9IGNvbHVtbiArIHRhYl9zaXplIC0gY29sdW1uICUgdGFiX3NpemU7CisrCisrCSAgICAgIHdoaWxlIChjb2x1bW4gPCBuZXh0X3RhYl9jb2x1bW4pCisrCQl7CisrCQkgIHB1dGNoYXIgKCcgJyk7CisrCQkgICsrY29sdW1uOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UgIC8qIE90aGVycy4gKi8KKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQpCisrCQl7CisrCQkgIGlmICh3YyA9PSBMJ1xiJykKKysJCSAgICB7CisrCQkgICAgICBpZiAoY29sdW1uID4gMCkKKysJCQktLWNvbHVtbjsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICBpbnQgd2lkdGg7CQkvKiBUaGUgd2lkdGggb2YgV0MuICovCisrCisrCQkgICAgICB3aWR0aCA9IHdjd2lkdGggKHdjKTsKKysJCSAgICAgIGNvbHVtbiArPSAod2lkdGggPiAwKSA/IHdpZHRoIDogMDsKKysJCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQkJY29udmVydCA9IDA7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBmd3JpdGUgKGJ1ZnBvcywgc2l6ZW9mKGNoYXIpLCBtYmxlbmd0aCwgc3Rkb3V0KTsKKysJICAgIH0KKysJfQorKyAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrICAgIH0KKyt9CisrI2VuZGlmCisrCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKK0BAIC00MjksNyArNTgzLDEyIEBACisgCisgICBmaWxlX2xpc3QgPSAob3B0aW5kIDwgYXJnYyA/ICZhcmd2W29wdGluZF0gOiBzdGRpbl9hcmd2KTsKKyAKKy0gIGV4cGFuZCAoKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIGV4cGFuZF9tdWx0aWJ5dGUgKCk7CisrICBlbHNlCisrI2VuZGlmCisrICAgIGV4cGFuZCAoKTsKKyAKKyAgIGlmIChoYXZlX3JlYWRfc3RkaW4gJiYgZmNsb3NlIChzdGRpbikgIT0gMCkKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sICItIik7CistLS0gY29yZXV0aWxzLTYuOCsvc3JjL2pvaW4uYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL2pvaW4uYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDE2ICsyMywzMCBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3YmxhbmsoKSwgdG93dXBwZXIuICAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgImhhcmQtbG9jYWxlLmgiCisgI2luY2x1ZGUgImxpbmVidWZmZXIuaCIKKy0jaW5jbHVkZSAibWVtY2FzZWNtcC5oIgorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJzdGRpby0tLmgiCisgI2luY2x1ZGUgInhtZW1jb2xsLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKyAKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImpvaW4iCisgCitAQCAtMTA0LDEwICsxMTgsMTIgQEAKKyAvKiBMYXN0IGVsZW1lbnQgaW4gYG91dGxpc3QnLCB3aGVyZSBhIG5ldyBlbGVtZW50IGNhbiBiZSBhZGRlZC4gICovCisgc3RhdGljIHN0cnVjdCBvdXRsaXN0ICpvdXRsaXN0X2VuZCA9ICZvdXRsaXN0X2hlYWQ7CisgCistLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIG5lZ2F0aXZlLCBmaWVsZHMgYXJlIHNlcGFyYXRlZAorLSAgIGJ5IGFueSBub25lbXB0eSBzdHJpbmcgb2YgYmxhbmtzLCBvdGhlcndpc2UgYnkgZXhhY3RseSBvbmUKKy0gICB0YWIgY2hhcmFjdGVyIHdob3NlIHZhbHVlICh3aGVuIGNhc3QgdG8gdW5zaWduZWQgY2hhcikgZXF1YWxzIFRBQi4gICovCistc3RhdGljIGludCB0YWIgPSAtMTsKKysvKiBUYWIgY2hhcmFjdGVyIHNlcGFyYXRpbmcgZmllbGRzLiAgSWYgTlVMTCwgZmllbGRzIGFyZSBzZXBhcmF0ZWQKKysgICBieSBhbnkgbm9uZW1wdHkgc3RyaW5nIG9mIGJsYW5rcy4gICovCisrc3RhdGljIGNoYXIgKnRhYiA9IE5VTEw7CisrCisrLyogVGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGZvciB0YWIuICovCisrc3RhdGljIHNpemVfdCB0YWJsZW4gPSAwOworIAorIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorIHsKK0BAIC0xOTAsNiArMjA2LDggQEAKKyAKKyAvKiBGaWxsIGluIHRoZSBgZmllbGRzJyBzdHJ1Y3R1cmUgaW4gTElORS4gICovCisgCisrLyogRmlsbCBpbiB0aGUgYGZpZWxkcycgc3RydWN0dXJlIGluIExJTkUuICAqLworKworIHN0YXRpYyB2b2lkCisgeGZpZWxkcyAoc3RydWN0IGxpbmUgKmxpbmUpCisgeworQEAgLTE5OSwxMCArMjE3LDExIEBACisgICBpZiAocHRyID09IGxpbSkKKyAgICAgcmV0dXJuOworIAorLSAgaWYgKDAgPD0gdGFiKQorKyAgaWYgKHRhYiAhPSBOVUxMKQorICAgICB7CisrICAgICAgdW5zaWduZWQgY2hhciB0ID0gdGFiWzBdOworICAgICAgIGNoYXIgKnNlcDsKKy0gICAgICBmb3IgKDsgKHNlcCA9IG1lbWNociAocHRyLCB0YWIsIGxpbSAtIHB0cikpICE9IE5VTEw7IHB0ciA9IHNlcCArIDEpCisrICAgICAgZm9yICg7IChzZXAgPSBtZW1jaHIgKHB0ciwgdCwgbGltIC0gcHRyKSkgIT0gTlVMTDsgcHRyID0gc2VwICsgMSkKKyAJZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBzZXAgLSBwdHIpOworICAgICB9CisgICBlbHNlCitAQCAtMjI5LDYgKzI0OCwxNDggQEAKKyAgIGV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgbGltIC0gcHRyKTsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisreGZpZWxkc19tdWx0aWJ5dGUgKHN0cnVjdCBsaW5lICpsaW5lKQorK3sKKysgIGNoYXIgKnB0ciA9IGxpbmUtPmJ1Zi5idWZmZXI7CisrICBjaGFyIGNvbnN0ICpsaW0gPSBwdHIgKyBsaW5lLT5idWYubGVuZ3RoIC0gMTsKKysgIHdjaGFyX3Qgd2MgPSAwOworKyAgc2l6ZV90IG1ibGVuZ3RoID0gMTsKKysgIG1ic3RhdGVfdCBzdGF0ZSwgc3RhdGVfYmFrOworKworKyAgbWVtc2V0ICgmc3RhdGUsIDAsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCisrICBpZiAocHRyID09IGxpbSkKKysgICAgcmV0dXJuOworKworKyAgaWYgKHRhYiAhPSBOVUxMKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgY2hhciB0ID0gdGFiWzBdOworKyAgICAgIGNoYXIgKnNlcCA9IHB0cjsKKysgICAgICBmb3IgKDsgcHRyIDwgbGltOyBwdHIgPSBzZXAgKyBtYmxlbmd0aCkKKysJeworKwkgIHNlcCA9IHB0cjsKKysJICB3aGlsZSAoc2VwIDwgbGltKQorKwkgICAgeworKwkgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHNlcCwgbGltIC0gc2VwICsgMSwgJnN0YXRlKTsKKysKKysJICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJCXsKKysJCSAgbWJsZW5ndGggPSAxOworKwkJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKG1ibGVuZ3RoID09IHRhYmxlbiAmJiAhbWVtY21wIChzZXAsIHRhYiwgbWJsZW5ndGgpKQorKwkJYnJlYWs7CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgc2VwICs9IG1ibGVuZ3RoOworKwkJICBjb250aW51ZTsKKysJCX0KKysJICAgIH0KKysKKysJICBpZiAoc2VwID09IGxpbSkKKysJICAgIGJyZWFrOworKworKwkgIGV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKysJfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBTa2lwIGxlYWRpbmcgYmxhbmtzIGJlZm9yZSB0aGUgZmlyc3QgZmllbGQuICAqLworKyAgICAgIHdoaWxlKHB0ciA8IGxpbSkKKysgICAgICB7CisrICAgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBwdHIsIGxpbSAtIHB0ciArIDEsICZzdGF0ZSk7CisrCisrICAgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgbWJsZW5ndGggPSAxOworKyAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgICBtYmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKworKyAgICAgICAgaWYgKCFpc3dibGFuayh3YykpCisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgcHRyICs9IG1ibGVuZ3RoOworKyAgICAgIH0KKysKKysgICAgICBkbworKwl7CisrCSAgY2hhciAqc2VwOworKwkgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBwdHIsIGxpbSAtIHB0ciArIDEsICZzdGF0ZSk7CisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgbWJsZW5ndGggPSAxOworKwkgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCSAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICBzZXAgPSBwdHIgKyBtYmxlbmd0aDsKKysJICB3aGlsZSAoc2VwICE9IGxpbSkKKysJICAgIHsKKysJICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzZXAsIGxpbSAtIHNlcCArIDEsICZzdGF0ZSk7CisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCQl7CisrCQkgIG1ibGVuZ3RoID0gMTsKKysJCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBtYmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKworKwkgICAgICBpZiAoaXN3YmxhbmsgKHdjKSkKKysJCWJyZWFrOworKworKwkgICAgICBzZXAgKz0gbWJsZW5ndGg7CisrCSAgICB9CisrCisrCSAgZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBzZXAgLSBwdHIpOworKwkgIGlmIChzZXAgPT0gbGltKQorKwkgICAgcmV0dXJuOworKworKwkgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzZXAsIGxpbSAtIHNlcCArIDEsICZzdGF0ZSk7CisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgbWJsZW5ndGggPSAxOworKwkgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCSAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICBwdHIgPSBzZXAgKyBtYmxlbmd0aDsKKysJICB3aGlsZSAocHRyICE9IGxpbSkKKysJICAgIHsKKysJICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBwdHIsIGxpbSAtIHB0ciArIDEsICZzdGF0ZSk7CisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCQl7CisrCQkgIG1ibGVuZ3RoID0gMTsKKysJCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBtYmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKworKwkgICAgICBpZiAoIWlzd2JsYW5rICh3YykpCisrCQlicmVhazsKKysKKysJICAgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgICAgfQorKwl9CisrICAgICAgd2hpbGUgKHB0ciAhPSBsaW0pOworKyAgICB9CisrCisrICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIGxpbSAtIHB0cik7CisrfQorKyNlbmRpZgorKworIC8qIFJlYWQgYSBsaW5lIGZyb20gRlAgaW50byBMSU5FIGFuZCBzcGxpdCBpdCBpbnRvIGZpZWxkcy4KKyAgICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKyAKK0BAIC0yNDksNiArNDEwLDExIEBACisgICBsaW5lLT5uZmllbGRzX2FsbG9jYXRlZCA9IDA7CisgICBsaW5lLT5uZmllbGRzID0gMDsKKyAgIGxpbmUtPmZpZWxkcyA9IE5VTEw7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB4ZmllbGRzX211bHRpYnl0ZSAobGluZSk7CisrICBlbHNlCisrI2VuZGlmCisgICB4ZmllbGRzIChsaW5lKTsKKyAgIHJldHVybiB0cnVlOworIH0KK0BAIC0zMDMsNTYgKzQ2OSwxMTQgQEAKKyBrZXljbXAgKHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMSwgc3RydWN0IGxpbmUgY29uc3QgKmxpbmUyKQorIHsKKyAgIC8qIFN0YXJ0IG9mIGZpZWxkIHRvIGNvbXBhcmUgaW4gZWFjaCBmaWxlLiAgKi8KKy0gIGNoYXIgKmJlZzE7CistICBjaGFyICpiZWcyOworLQorLSAgc2l6ZV90IGxlbjE7CistICBzaXplX3QgbGVuMjsJCS8qIExlbmd0aCBvZiBmaWVsZHMgdG8gY29tcGFyZS4gICovCisrICBjaGFyICpiZWdbMl07CisrICBjaGFyICpjb3B5WzJdOworKyAgc2l6ZV90IGxlblsyXTsJLyogTGVuZ3RoIG9mIGZpZWxkcyB0byBjb21wYXJlLiAgKi8KKyAgIGludCBkaWZmOworKyAgaW50IGksIGo7CisgCisgICBpZiAoam9pbl9maWVsZF8xIDwgbGluZTEtPm5maWVsZHMpCisgICAgIHsKKy0gICAgICBiZWcxID0gbGluZTEtPmZpZWxkc1tqb2luX2ZpZWxkXzFdLmJlZzsKKy0gICAgICBsZW4xID0gbGluZTEtPmZpZWxkc1tqb2luX2ZpZWxkXzFdLmxlbjsKKysgICAgICBiZWdbMF0gPSBsaW5lMS0+ZmllbGRzW2pvaW5fZmllbGRfMV0uYmVnOworKyAgICAgIGxlblswXSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5sZW47CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGJlZzEgPSBOVUxMOworLSAgICAgIGxlbjEgPSAwOworKyAgICAgIGJlZ1swXSA9IE5VTEw7CisrICAgICAgbGVuWzBdID0gMDsKKyAgICAgfQorIAorICAgaWYgKGpvaW5fZmllbGRfMiA8IGxpbmUyLT5uZmllbGRzKQorICAgICB7CistICAgICAgYmVnMiA9IGxpbmUyLT5maWVsZHNbam9pbl9maWVsZF8yXS5iZWc7CistICAgICAgbGVuMiA9IGxpbmUyLT5maWVsZHNbam9pbl9maWVsZF8yXS5sZW47CisrICAgICAgYmVnWzFdID0gbGluZTItPmZpZWxkc1tqb2luX2ZpZWxkXzJdLmJlZzsKKysgICAgICBsZW5bMV0gPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0ubGVuOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICBiZWcyID0gTlVMTDsKKy0gICAgICBsZW4yID0gMDsKKysgICAgICBiZWdbMV0gPSBOVUxMOworKyAgICAgIGxlblsxXSA9IDA7CisgICAgIH0KKyAKKy0gIGlmIChsZW4xID09IDApCistICAgIHJldHVybiBsZW4yID09IDAgPyAwIDogLTE7CistICBpZiAobGVuMiA9PSAwKQorKyAgaWYgKGxlblswXSA9PSAwKQorKyAgICByZXR1cm4gbGVuWzFdID09IDAgPyAwIDogLTE7CisrICBpZiAobGVuWzFdID09IDApCisgICAgIHJldHVybiAxOworIAorICAgaWYgKGlnbm9yZV9jYXNlKQorICAgICB7CistICAgICAgLyogRklYTUU6IGlnbm9yZV9jYXNlIGRvZXMgbm90IHdvcmsgd2l0aCBOTFMgKGluIHBhcnRpY3VsYXIsCistICAgICAgICAgd2l0aCBtdWx0aWJ5dGUgY2hhcnMpLiAgKi8KKy0gICAgICBkaWZmID0gbWVtY2FzZWNtcCAoYmVnMSwgYmVnMiwgTUlOIChsZW4xLCBsZW4yKSk7CisrI2lmZGVmIEhBVkVfTUJSVE9XQworKyAgICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgICB7CisrICAgICAgICBzaXplX3QgbWJsZW5ndGg7CisrICAgICAgICB3Y2hhcl90IHdjLCB1d2M7CisrICAgICAgICBtYnN0YXRlX3Qgc3RhdGUsIHN0YXRlX2JhazsKKysKKysgICAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGNvcHlbaV0gPSBhbGxvY2EgKGxlbltpXSArIDEpOworKworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBNSU4gKGxlblswXSwgbGVuWzFdKTspCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgICAgICAgICAgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYmVnW2ldICsgaiwgbGVuW2ldIC0gaiwgJnN0YXRlKTsKKysKKysgICAgICAgICAgICAgICAgc3dpdGNoIChtYmxlbmd0aCkKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgY2FzZSAoc2l6ZV90KSAtMToKKysgICAgICAgICAgICAgICAgICBjYXNlIChzaXplX3QpIC0yOgorKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrICAgICAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKysgICAgICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgICAgICAgICBtYmxlbmd0aCA9IDE7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgdXdjID0gdG93dXBwZXIgKHdjKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGlmICh1d2MgIT0gd2MpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3Qgc3RhdGVfd2M7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0ICgmc3RhdGVfd2MsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2NydG9tYiAoY29weVtpXSArIGosIHV3YywgJnN0YXRlX3djKTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkgKGNvcHlbaV0gKyBqLCBiZWdbaV0gKyBqLCBtYmxlbmd0aCk7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBqICs9IG1ibGVuZ3RoOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGNvcHlbaV1bal0gPSAnXDAnOworKyAgICAgICAgICB9CisrICAgICAgfQorKyAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICB7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgY29weVtpXSA9IGFsbG9jYSAobGVuW2ldICsgMSk7CisrCisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE1JTiAobGVuWzBdLCBsZW5bMV0pOyBqKyspCisrICAgICAgICAgICAgICBjb3B5W2ldW2pdID0gdG91cHBlciAoYmVnW2ldW2pdKTsKKysKKysgICAgICAgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICAgICAgfQorKyAgICAgIH0KKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgaWYgKGhhcmRfTENfQ09MTEFURSkKKy0JcmV0dXJuIHhtZW1jb2xsIChiZWcxLCBsZW4xLCBiZWcyLCBsZW4yKTsKKy0gICAgICBkaWZmID0gbWVtY21wIChiZWcxLCBiZWcyLCBNSU4gKGxlbjEsIGxlbjIpKTsKKysgICAgICBjb3B5WzBdID0gKHVuc2lnbmVkIGNoYXIgKikgYmVnWzBdOworKyAgICAgIGNvcHlbMV0gPSAodW5zaWduZWQgY2hhciAqKSBiZWdbMV07CisgICAgIH0KKyAKKysgIGlmIChoYXJkX0xDX0NPTExBVEUpCisrICAgIHJldHVybiB4bWVtY29sbCAoKGNoYXIgKikgY29weVswXSwgbGVuWzBdLCAoY2hhciAqKSBjb3B5WzFdLCBsZW5bMV0pOworKyAgZGlmZiA9IG1lbWNtcCAoY29weVswXSwgY29weVsxXSwgTUlOIChsZW5bMF0sIGxlblsxXSkpOworKworICAgaWYgKGRpZmYpCisgICAgIHJldHVybiBkaWZmOworLSAgcmV0dXJuIGxlbjEgPCBsZW4yID8gLTEgOiBsZW4xICE9IGxlbjI7CisrICByZXR1cm4gbGVuWzBdIC0gbGVuWzFdOworIH0KKyAKKyAvKiBQcmludCBmaWVsZCBOIG9mIExJTkUgaWYgaXQgZXhpc3RzIGFuZCBpcyBub25lbXB0eSwgb3RoZXJ3aXNlCitAQCAtMzc3LDExICs2MDEsMTggQEAKKyAKKyAvKiBQcmludCB0aGUgam9pbiBvZiBMSU5FMSBhbmQgTElORTIuICAqLworIAorKyNkZWZpbmUgUFVUX1RBQl9DSEFSCQkJCQkJCVwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgICh0YWIgIT0gTlVMTCkgPwkJCQkJCQlcCisrCWZ3cml0ZSh0YWIsIHNpemVvZihjaGFyKSwgdGFibGVuLCBzdGRvdXQpIDogcHV0Y2hhciAoJyAnKTsJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCQkJCQkJCQkKKysKKyBzdGF0aWMgdm9pZAorIHByam9pbiAoc3RydWN0IGxpbmUgY29uc3QgKmxpbmUxLCBzdHJ1Y3QgbGluZSBjb25zdCAqbGluZTIpCisgeworICAgY29uc3Qgc3RydWN0IG91dGxpc3QgKm91dGxpc3Q7CistICBjaGFyIG91dHB1dF9zZXBhcmF0b3IgPSB0YWIgPCAwID8gJyAnIDogdGFiOworIAorICAgb3V0bGlzdCA9IG91dGxpc3RfaGVhZC5uZXh0OworICAgaWYgKG91dGxpc3QpCitAQCAtMzk3LDEyICs2MjgsMTIgQEAKKyAJICBpZiAoby0+ZmlsZSA9PSAwKQorIAkgICAgeworIAkgICAgICBpZiAobGluZTEgPT0gJnVuaV9ibGFuaykKKy0JICAgICAgICB7CisrCQl7CisgCQkgIGxpbmUgPSBsaW5lMjsKKyAJCSAgZmllbGQgPSBqb2luX2ZpZWxkXzI7CisgCQl9CisgCSAgICAgIGVsc2UKKy0JICAgICAgICB7CisrCQl7CisgCQkgIGxpbmUgPSBsaW5lMTsKKyAJCSAgZmllbGQgPSBqb2luX2ZpZWxkXzE7CisgCQl9CitAQCAtNDE2LDcgKzY0Nyw3IEBACisgCSAgbyA9IG8tPm5leHQ7CisgCSAgaWYgKG8gPT0gTlVMTCkKKyAJICAgIGJyZWFrOworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJfQorICAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICB9CitAQCAtNDM0LDIzICs2NjUsMjMgQEAKKyAgICAgICBwcmZpZWxkIChqb2luX2ZpZWxkXzEsIGxpbmUxKTsKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgam9pbl9maWVsZF8xICYmIGkgPCBsaW5lMS0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUxKTsKKyAJfQorICAgICAgIGZvciAoaSA9IGpvaW5fZmllbGRfMSArIDE7IGkgPCBsaW5lMS0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUxKTsKKyAJfQorIAorICAgICAgIGZvciAoaSA9IDA7IGkgPCBqb2luX2ZpZWxkXzIgJiYgaSA8IGxpbmUyLT5uZmllbGRzOyArK2kpCisgCXsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCSAgcHJmaWVsZCAoaSwgbGluZTIpOworIAl9CisgICAgICAgZm9yIChpID0gam9pbl9maWVsZF8yICsgMTsgaSA8IGxpbmUyLT5uZmllbGRzOyArK2kpCisgCXsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCSAgcHJmaWVsZCAoaSwgbGluZTIpOworIAl9CisgICAgICAgcHV0Y2hhciAoJ1xuJyk7CitAQCAtODU5LDIwICsxMDkwLDQxIEBACisgCisgCWNhc2UgJ3QnOgorIAkgIHsKKy0JICAgIHVuc2lnbmVkIGNoYXIgbmV3dGFiID0gb3B0YXJnWzBdOworLQkgICAgaWYgKCEgbmV3dGFiKQorKwkgICAgY2hhciAqbmV3dGFiOworKwkgICAgc2l6ZV90IG5ld3RhYmxlbjsKKysJICAgIGlmICghIG9wdGFyZ1swXSkKKyAJICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiZW1wdHkgdGFiIikpOworLQkgICAgaWYgKG9wdGFyZ1sxXSkKKysJICAgIG5ld3RhYiA9IHhzdHJkdXAgKG9wdGFyZyk7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgICAgaWYgKE1CX0NVUl9NQVggPiAxKQorKwkgICAgICB7CisrCQltYnN0YXRlX3Qgc3RhdGU7CisrCisrCQltZW1zZXQgKCZzdGF0ZSwgMCwgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCW5ld3RhYmxlbiA9IG1icnRvd2MgKE5VTEwsIG5ld3RhYiwKKysJCQkJICAgICBzdHJubGVuIChuZXd0YWIsIE1CX0xFTl9NQVgpLAorKwkJCQkgICAgICZzdGF0ZSk7CisrCQlpZiAobmV3dGFibGVuID09IChzaXplX3QpIDAKKysJCSAgICB8fCBuZXd0YWJsZW4gPT0gKHNpemVfdCkgLTEKKysJCSAgICB8fCBuZXd0YWJsZW4gPT0gKHNpemVfdCkgLTIpCisrCQkgIG5ld3RhYmxlbiA9IDE7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysjZW5kaWYKKysJICAgICAgbmV3dGFibGVuID0gMTsKKysJCQorKwkgICAgaWYgKG5ld3RhYmxlbiA9PSAxICYmIG5ld3RhYlsxXSkKKysJICAgICAgeworKwkJaWYgKFNUUkVRIChuZXd0YWIsICJcXDAiKSkKKysJCSAgbmV3dGFiWzBdID0gJ1wwJzsKKysJICAgICAgfQorKwkgICAgaWYgKHRhYiAhPSBOVUxMICYmIHN0cmNtcCAodGFiLCBuZXd0YWIpKQorIAkgICAgICB7CistCQlpZiAoU1RSRVEgKG9wdGFyZywgIlxcMCIpKQorLQkJICBuZXd0YWIgPSAnXDAnOworLQkJZWxzZQorLQkJICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJtdWx0aS1jaGFyYWN0ZXIgdGFiICVzIiksCistCQkJIHF1b3RlIChvcHRhcmcpKTsKKysJCWZyZWUgKG5ld3RhYik7CisrCQllcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJpbmNvbXBhdGlibGUgdGFicyIpKTsKKyAJICAgICAgfQorLQkgICAgaWYgKDAgPD0gdGFiICYmIHRhYiAhPSBuZXd0YWIpCistCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImluY29tcGF0aWJsZSB0YWJzIikpOworIAkgICAgdGFiID0gbmV3dGFiOworKwkgICAgdGFibGVuID0gbmV3dGFibGVuOworIAkgIH0KKyAJICBicmVhazsKKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvdW5pcS5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvdW5pcS5jCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMjMsNiArMjMsMTYgQEAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKS4gKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCBpc3cqIGZ1bmN0aW9ucy4gKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJhcmdtYXRjaC5oIgorICNpbmNsdWRlICJsaW5lYnVmZmVyLmgiCitAQCAtMzIsNyArNDIsMTkgQEAKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAieG1lbWNvbGwuaCIKKyAjaW5jbHVkZSAieHN0cnRvbC5oIgorLSNpbmNsdWRlICJtZW1jYXNlY21wLmgiCisrI2luY2x1ZGUgInhtZW1jb2xsLmgiCisrCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgInVuaXEiCitAQCAtMTA5LDYgKzEzMSwxMCBAQAorIC8qIFNlbGVjdCB3aGV0aGVyL2hvdyB0byBkZWxpbWl0IGdyb3VwcyBvZiBkdXBsaWNhdGUgbGluZXMuICAqLworIHN0YXRpYyBlbnVtIGRlbGltaXRfbWV0aG9kIGRlbGltaXRfZ3JvdXBzOworIAorKy8qIEZ1bmN0aW9uIHBvaW50ZXJzLiAqLworK3N0YXRpYyBjaGFyICoKKysoKmZpbmRfZmllbGQpIChzdHJ1Y3QgbGluZWJ1ZmZlciAqbGluZSk7CisrCisgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgeworICAgeyJjb3VudCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAorQEAgLTE5OCw3ICsyMjQsNyBAQAorICAgIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSdzIGZpZWxkIHRvIGJlIGNvbXBhcmVkLiAqLworIAorIHN0YXRpYyBjaGFyICoKKy1maW5kX2ZpZWxkIChjb25zdCBzdHJ1Y3QgbGluZWJ1ZmZlciAqbGluZSkKKytmaW5kX2ZpZWxkX3VuaSAoc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpCisgeworICAgc2l6ZV90IGNvdW50OworICAgY2hhciAqbHAgPSBsaW5lLT5idWZmZXI7CitAQCAtMjE5LDYgKzI0NSw4MyBAQAorICAgcmV0dXJuIGxwICsgaTsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworKworKyMgZGVmaW5lIE1CQ0hBUl9UT19XQ0hBUihXQywgTUJMRU5HVEgsIExQLCBQT1MsIFNJWkUsIFNUQVRFUCwgQ09OVkZBSUwpICBcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBtYnN0YXRlX3Qgc3RhdGVfYmFrOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgQ09OVkZBSUwgPSAwOwkJCQkJCQlcCisrICAgICAgc3RhdGVfYmFrID0gKlNUQVRFUDsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIE1CTEVOR1RIID0gbWJydG93YyAoJldDLCBMUCArIFBPUywgU0laRSAtIFBPUywgU1RBVEVQKTsJCVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCSAgKlNUQVRFUCA9IHN0YXRlX2JhazsJCQkJCQlcCisrCSAgQ09OVkZBSUwrKzsJCQkJCQkJXAorKwkgIC8qIEZhbGwgdGhyb3VnaCAqLwkJCQkJCVwKKysJY2FzZSAwOgkJCQkJCQkJXAorKwkgIE1CTEVOR1RIID0gMTsJCQkJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKytzdGF0aWMgY2hhciAqCisrZmluZF9maWVsZF9tdWx0aSAoc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpCisreworKyAgc2l6ZV90IGNvdW50OworKyAgY2hhciAqbHAgPSBsaW5lLT5idWZmZXI7CisrICBzaXplX3Qgc2l6ZSA9IGxpbmUtPmxlbmd0aCAtIDE7CisrICBzaXplX3QgcG9zOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgd2NoYXJfdCB3YzsKKysgIG1ic3RhdGVfdCAqc3RhdGVwOworKyAgaW50IGNvbnZmYWlsOworKworKyAgcG9zID0gMDsKKysgIHN0YXRlcCA9ICYobGluZS0+c3RhdGUpOworKworKyAgLyogc2tpcCBmaWVsZHMuICovCisrICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBza2lwX2ZpZWxkcyAmJiBwb3MgPCBzaXplOyBjb3VudCsrKQorKyAgICB7CisrICAgICAgd2hpbGUgKHBvcyA8IHNpemUpCisrCXsKKysJICBNQkNIQVJfVE9fV0NIQVIgKHdjLCBtYmxlbmd0aCwgbHAsIHBvcywgc2l6ZSwgc3RhdGVwLCBjb252ZmFpbCk7CisrIAorKwkgIGlmIChjb252ZmFpbCB8fCAhaXN3YmxhbmsgKHdjKSkKKysJICAgIHsKKysJICAgICAgcG9zICs9IG1ibGVuZ3RoOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJICBwb3MgKz0gbWJsZW5ndGg7CisrCX0KKysKKysgICAgICB3aGlsZSAocG9zIDwgc2l6ZSkKKysJeworKwkgIE1CQ0hBUl9UT19XQ0hBUiAod2MsIG1ibGVuZ3RoLCBscCwgcG9zLCBzaXplLCBzdGF0ZXAsIGNvbnZmYWlsKTsKKysKKysJICBpZiAoIWNvbnZmYWlsICYmIGlzd2JsYW5rICh3YykpCisrCSAgICBicmVhazsKKysKKysJICBwb3MgKz0gbWJsZW5ndGg7CisrCX0KKysgICAgfQorKworKyAgLyogc2tpcCBmaWVsZHMuICovCisrICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBza2lwX2NoYXJzICYmIHBvcyA8IHNpemU7IGNvdW50KyspCisrICAgIHsKKysgICAgICBNQkNIQVJfVE9fV0NIQVIgKHdjLCBtYmxlbmd0aCwgbHAsIHBvcywgc2l6ZSwgc3RhdGVwLCBjb252ZmFpbCk7CisrICAgICAgcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrCisrICByZXR1cm4gbHAgKyBwb3M7CisrfQorKyNlbmRpZgorKworIC8qIFJldHVybiBmYWxzZSBpZiB0d28gc3RyaW5ncyBPTEQgYW5kIE5FVyBtYXRjaCwgdHJ1ZSBpZiBub3QuCisgICAgT0xEIGFuZCBORVcgcG9pbnQgbm90IHRvIHRoZSBiZWdpbm5pbmdzIG9mIHRoZSBsaW5lcworICAgIGJ1dCByYXRoZXIgdG8gdGhlIGJlZ2lubmluZ3Mgb2YgdGhlIGZpZWxkcyB0byBjb21wYXJlLgorQEAgLTIyNyw2ICszMzAsOCBAQAorIHN0YXRpYyBib29sCisgZGlmZmVyZW50IChjaGFyICpvbGQsIGNoYXIgKm5ldywgc2l6ZV90IG9sZGxlbiwgc2l6ZV90IG5ld2xlbikKKyB7CisrICBjaGFyICpjb3B5X29sZCwgKmNvcHlfbmV3OworKworICAgaWYgKGNoZWNrX2NoYXJzIDwgb2xkbGVuKQorICAgICBvbGRsZW4gPSBjaGVja19jaGFyczsKKyAgIGlmIChjaGVja19jaGFycyA8IG5ld2xlbikKK0BAIC0yMzQsMTQgKzMzOSw5MiBAQAorIAorICAgaWYgKGlnbm9yZV9jYXNlKQorICAgICB7CistICAgICAgLyogRklYTUU6IFRoaXMgc2hvdWxkIGludm9rZSBzdHJjb2xsIHNvbWVob3cuICAqLworLSAgICAgIHJldHVybiBvbGRsZW4gIT0gbmV3bGVuIHx8IG1lbWNhc2VjbXAgKG9sZCwgbmV3LCBvbGRsZW4pOworKyAgICAgIHNpemVfdCBpOworKworKyAgICAgIGNvcHlfb2xkID0gYWxsb2NhIChvbGRsZW4gKyAxKTsKKysgICAgICBjb3B5X25ldyA9IGFsbG9jYSAob2xkbGVuICsgMSk7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8IG9sZGxlbjsgaSsrKQorKwl7CisrCSAgY29weV9vbGRbaV0gPSB0b3VwcGVyIChvbGRbaV0pOworKwkgIGNvcHlfbmV3W2ldID0gdG91cHBlciAobmV3W2ldKTsKKysJfQorICAgICB9CistICBlbHNlIGlmIChoYXJkX0xDX0NPTExBVEUpCistICAgIHJldHVybiB4bWVtY29sbCAob2xkLCBvbGRsZW4sIG5ldywgbmV3bGVuKSAhPSAwOworICAgZWxzZQorLSAgICByZXR1cm4gb2xkbGVuICE9IG5ld2xlbiB8fCBtZW1jbXAgKG9sZCwgbmV3LCBvbGRsZW4pOworKyAgICB7CisrICAgICAgY29weV9vbGQgPSAoY2hhciAqKW9sZDsKKysgICAgICBjb3B5X25ldyA9IChjaGFyICopbmV3OworKyAgICB9CisrCisrICByZXR1cm4geG1lbWNvbGwgKGNvcHlfb2xkLCBvbGRsZW4sIGNvcHlfbmV3LCBuZXdsZW4pOworK30KKysKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2RpZmZlcmVudF9tdWx0aSAoY29uc3QgY2hhciAqb2xkLCBjb25zdCBjaGFyICpuZXcsIHNpemVfdCBvbGRsZW4sIHNpemVfdCBuZXdsZW4sIG1ic3RhdGVfdCBvbGRzdGF0ZSwgbWJzdGF0ZV90IG5ld3N0YXRlKQorK3sKKysgIHNpemVfdCBpLCBqLCBjaGFyczsKKysgIGNvbnN0IGNoYXIgKnN0clsyXTsKKysgIGNoYXIgKmNvcHlbMl07CisrICBzaXplX3QgbGVuWzJdOworKyAgbWJzdGF0ZV90IHN0YXRlWzJdOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgd2NoYXJfdCB3YywgdXdjOworKyAgbWJzdGF0ZV90IHN0YXRlX2JhazsKKysKKysgIHN0clswXSA9IG9sZDsKKysgIHN0clsxXSA9IG5ldzsKKysgIGxlblswXSA9IG9sZGxlbjsKKysgIGxlblsxXSA9IG5ld2xlbjsKKysgIHN0YXRlWzBdID0gb2xkc3RhdGU7CisrICBzdGF0ZVsxXSA9IG5ld3N0YXRlOworKworKyAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKysgICAgeworKyAgICAgIGNvcHlbaV0gPSBhbGxvY2EgKGxlbltpXSArIDEpOworKworKyAgICAgIGZvciAoaiA9IDAsIGNoYXJzID0gMDsgaiA8IGxlbltpXSAmJiBjaGFycyA8IGNoZWNrX2NoYXJzOyBjaGFycysrKQorKwl7CisrCSAgc3RhdGVfYmFrID0gc3RhdGVbaV07CisrCSAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHN0cltpXSArIGosIGxlbltpXSAtIGosICYoc3RhdGVbaV0pKTsKKysKKysJICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwkgICAgeworKwkgICAgY2FzZSAoc2l6ZV90KS0xOgorKwkgICAgY2FzZSAoc2l6ZV90KS0yOgorKwkgICAgICBzdGF0ZVtpXSA9IHN0YXRlX2JhazsKKysJICAgICAgLyogRmFsbCB0aHJvdWdoICovCisrCSAgICBjYXNlIDA6CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgYnJlYWs7CisrCisrCSAgICBkZWZhdWx0OgorKwkgICAgICBpZiAoaWdub3JlX2Nhc2UpCisrCQl7CisrCQkgIHV3YyA9IHRvd3VwcGVyICh3Yyk7CisrCisrCQkgIGlmICh1d2MgIT0gd2MpCisrCQkgICAgeworKwkJICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOworKworKwkJICAgICAgbWVtc2V0ICgmc3RhdGVfd2MsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgICAgIHdjcnRvbWIgKGNvcHlbaV0gKyBqLCB1d2MsICZzdGF0ZV93Yyk7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgbWVtY3B5IChjb3B5W2ldICsgaiwgc3RyW2ldICsgaiwgbWJsZW5ndGgpOworKwkJfQorKwkgICAgICBlbHNlCisrCQltZW1jcHkgKGNvcHlbaV0gKyBqLCBzdHJbaV0gKyBqLCBtYmxlbmd0aCk7CisrCSAgICB9CisrCSAgaiArPSBtYmxlbmd0aDsKKysJfQorKyAgICAgIGNvcHlbaV1bal0gPSAnXDAnOworKyAgICAgIGxlbltpXSA9IGo7CisrICAgIH0KKysKKysgIHJldHVybiB4bWVtY29sbCAoY29weVswXSwgbGVuWzBdLCBjb3B5WzFdLCBsZW5bMV0pOworIH0KKysjZW5kaWYKKyAKKyAvKiBPdXRwdXQgdGhlIGxpbmUgaW4gbGluZWJ1ZmZlciBMSU5FIHRvIHN0YW5kYXJkIG91dHB1dAorICAgIHByb3ZpZGVkIHRoYXQgdGhlIHN3aXRjaGVzIHNheSBpdCBzaG91bGQgYmUgb3V0cHV0LgorQEAgLTI5NSwxNSArNDc4LDQzIEBACisgICAgIHsKKyAgICAgICBjaGFyICpwcmV2ZmllbGQgSUZfTElOVCAoPSBOVUxMKTsKKyAgICAgICBzaXplX3QgcHJldmxlbiBJRl9MSU5UICg9IDApOworKyNpZiBIQVZFX01CUlRPV0MKKysgICAgICBtYnN0YXRlX3QgcHJldnN0YXRlOworKworKyAgICAgIG1lbXNldCAoJnByZXZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysjZW5kaWYKKyAKKyAgICAgICB3aGlsZSAoIWZlb2YgKHN0ZGluKSkKKyAJeworIAkgIGNoYXIgKnRoaXNmaWVsZDsKKyAJICBzaXplX3QgdGhpc2xlbjsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgbWJzdGF0ZV90IHRoaXNzdGF0ZTsKKysjZW5kaWYKKysKKyAJICBpZiAocmVhZGxpbmVidWZmZXIgKHRoaXNsaW5lLCBzdGRpbikgPT0gMCkKKyAJICAgIGJyZWFrOworIAkgIHRoaXNmaWVsZCA9IGZpbmRfZmllbGQgKHRoaXNsaW5lKTsKKyAJICB0aGlzbGVuID0gdGhpc2xpbmUtPmxlbmd0aCAtIDEgLSAodGhpc2ZpZWxkIC0gdGhpc2xpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgdGhpc3N0YXRlID0gdGhpc2xpbmUtPnN0YXRlOworKworKyAgICAgICAgICAgIGlmIChwcmV2bGluZS0+bGVuZ3RoID09IDAgfHwgZGlmZmVyZW50X211bHRpCisrICAgICAgICAgICAgICAodGhpc2ZpZWxkLCBwcmV2ZmllbGQsIHRoaXNsZW4sIHByZXZsZW4sIHRoaXNzdGF0ZSwgcHJldnN0YXRlKSkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZndyaXRlICh0aGlzbGluZS0+YnVmZmVyLCBzaXplb2YgKGNoYXIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNsaW5lLT5sZW5ndGgsIHN0ZG91dCk7CisrCisrICAgICAgICAgICAgICAgIFNXQVBfTElORVMgKHByZXZsaW5lLCB0aGlzbGluZSk7CisrICAgICAgICAgICAgICAgIHByZXZmaWVsZCA9IHRoaXNmaWVsZDsKKysgICAgICAgICAgICAgICAgcHJldmxlbiA9IHRoaXNsZW47CisrICAgICAgICAgICAgICAgIHByZXZzdGF0ZSA9IHRoaXNzdGF0ZTsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgfQorKwllbHNlCisrI2VuZGlmCisgCSAgaWYgKHByZXZsaW5lLT5sZW5ndGggPT0gMAorIAkgICAgICB8fCBkaWZmZXJlbnQgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuKSkKKyAJICAgIHsKK0BAIC0zMjIsMTcgKzUzMywyNiBAQAorICAgICAgIHNpemVfdCBwcmV2bGVuOworICAgICAgIHVpbnRtYXhfdCBtYXRjaF9jb3VudCA9IDA7CisgICAgICAgYm9vbCBmaXJzdF9kZWxpbWl0ZXIgPSB0cnVlOworKyNpZiBIQVZFX01CUlRPV0MKKysgICAgICBtYnN0YXRlX3QgcHJldnN0YXRlOworKyNlbmRpZgorIAorICAgICAgIGlmIChyZWFkbGluZWJ1ZmZlciAocHJldmxpbmUsIHN0ZGluKSA9PSAwKQorIAlnb3RvIGNsb3NlZmlsZXM7CisgICAgICAgcHJldmZpZWxkID0gZmluZF9maWVsZCAocHJldmxpbmUpOworICAgICAgIHByZXZsZW4gPSBwcmV2bGluZS0+bGVuZ3RoIC0gMSAtIChwcmV2ZmllbGQgLSBwcmV2bGluZS0+YnVmZmVyKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgcHJldnN0YXRlID0gcHJldmxpbmUtPnN0YXRlOworKyNlbmRpZgorIAorICAgICAgIHdoaWxlICghZmVvZiAoc3RkaW4pKQorIAl7CisgCSAgYm9vbCBtYXRjaDsKKyAJICBjaGFyICp0aGlzZmllbGQ7CisgCSAgc2l6ZV90IHRoaXNsZW47CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIG1ic3RhdGVfdCB0aGlzc3RhdGU7CisrI2VuZGlmCisgCSAgaWYgKHJlYWRsaW5lYnVmZmVyICh0aGlzbGluZSwgc3RkaW4pID09IDApCisgCSAgICB7CisgCSAgICAgIGlmIChmZXJyb3IgKHN0ZGluKSkKK0BAIC0zNDEsNiArNTYxLDE1IEBACisgCSAgICB9CisgCSAgdGhpc2ZpZWxkID0gZmluZF9maWVsZCAodGhpc2xpbmUpOworIAkgIHRoaXNsZW4gPSB0aGlzbGluZS0+bGVuZ3RoIC0gMSAtICh0aGlzZmllbGQgLSB0aGlzbGluZS0+YnVmZmVyKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorKwkgICAgeworKyAgICAgICAgICAgICAgdGhpc3N0YXRlID0gdGhpc2xpbmUtPnN0YXRlOworKyAgICAgICAgICAgICAgbWF0Y2ggPSAhZGlmZmVyZW50X211bHRpICh0aGlzZmllbGQsIHByZXZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNsZW4sIHByZXZsZW4sIHRoaXNzdGF0ZSwgcHJldnN0YXRlKTsKKysgICAgICAgICAgICB9CisrCSAgZWxzZQorKyNlbmRpZgorIAkgIG1hdGNoID0gIWRpZmZlcmVudCAodGhpc2ZpZWxkLCBwcmV2ZmllbGQsIHRoaXNsZW4sIHByZXZsZW4pOworIAkgIG1hdGNoX2NvdW50ICs9IG1hdGNoOworIAorQEAgLTM3Myw2ICs2MDIsOSBAQAorIAkgICAgICBTV0FQX0xJTkVTIChwcmV2bGluZSwgdGhpc2xpbmUpOworIAkgICAgICBwcmV2ZmllbGQgPSB0aGlzZmllbGQ7CisgCSAgICAgIHByZXZsZW4gPSB0aGlzbGVuOworKyNpZiBIQVZFX01CUlRPV0MKKysJICAgICAgcHJldnN0YXRlID0gdGhpc3N0YXRlOworKyNlbmRpZgorIAkgICAgICBpZiAoIW1hdGNoKQorIAkJbWF0Y2hfY291bnQgPSAwOworIAkgICAgfQorQEAgLTQxNyw2ICs2NDksMTkgQEAKKyAKKyAgIGF0ZXhpdCAoY2xvc2Vfc3Rkb3V0KTsKKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBmaW5kX2ZpZWxkID0gZmluZF9maWVsZF9tdWx0aTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgZmluZF9maWVsZCA9IGZpbmRfZmllbGRfdW5pOworKyAgICB9CisrCisrCisrCisgICBza2lwX2NoYXJzID0gMDsKKyAgIHNraXBfZmllbGRzID0gMDsKKyAgIGNoZWNrX2NoYXJzID0gU0laRV9NQVg7CistLS0gY29yZXV0aWxzLTYuOCsvc3JjL2ZvbGQuYy5pMThuCTIwMDctMDItMjMgMTI6MDE6NDcuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL2ZvbGQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDExICsyMywzMyBAQAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IGlzd3ByaW50KCksIGlzd2JsYW5rKCksIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAieHN0cnRvbC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICAgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIHVuZGVmIE1CX0xFTl9NQVgKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworICNkZWZpbmUgVEFCX1dJRFRIIDgKKyAKKyAvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KK0BAIC0zNSwyMyArNTcsNDQgQEAKKyAKKyAjZGVmaW5lIEFVVEhPUlMgIkRhdmlkIE1hY0tlbnppZSIKKyAKKysjZGVmaW5lIEZBVEFMX0VSUk9SKE1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBlcnJvciAoMCwgMCwgKE1lc3NhZ2UpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgdXNhZ2UgKDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgwKQorKworK2VudW0gb3BlcmF0aW5nX21vZGUKKyt7CisrICAvKiBGb2xkIHRleHRzIGJ5IGNvbHVtbnMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKysgIGNvbHVtbl9tb2RlLAorKworKyAgLyogRm9sZCB0ZXh0cyBieSBieXRlcyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworKyAgYnl0ZV9tb2RlLAorKworKyAgLyogRm9sZCB0ZXh0cyBieSBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICBjaGFyYWN0ZXJfbW9kZSwKKyt9OworKworIC8qIFRoZSBuYW1lIHRoaXMgcHJvZ3JhbSB3YXMgcnVuIHdpdGguICovCisgY2hhciAqcHJvZ3JhbV9uYW1lOworIAorKy8qIFRoZSBhcmd1bWVudCBzaG93cyBjdXJyZW50IG1vZGUuIChEZWZhdWx0OiBjb2x1bW5fbW9kZSkgKi8KKytzdGF0aWMgZW51bSBvcGVyYXRpbmdfbW9kZSBvcGVyYXRpbmdfbW9kZTsKKysKKyAvKiBJZiBub256ZXJvLCB0cnkgdG8gYnJlYWsgb24gd2hpdGVzcGFjZS4gKi8KKyBzdGF0aWMgYm9vbCBicmVha19zcGFjZXM7CisgCistLyogSWYgbm9uemVybywgY291bnQgYnl0ZXMsIG5vdCBjb2x1bW4gcG9zaXRpb25zLiAqLworLXN0YXRpYyBib29sIGNvdW50X2J5dGVzOworLQorIC8qIElmIG5vbnplcm8sIGF0IGxlYXN0IG9uZSBvZiB0aGUgZmlsZXMgd2UgcmVhZCB3YXMgc3RhbmRhcmQgaW5wdXQuICovCisgc3RhdGljIGJvb2wgaGF2ZV9yZWFkX3N0ZGluOworIAorLXN0YXRpYyBjaGFyIGNvbnN0IHNob3J0b3B0c1tdID0gImJzdzowOjoxOjoyOjozOjo0Ojo1Ojo2Ojo3Ojo4Ojo5OjoiOworK3N0YXRpYyBjaGFyIGNvbnN0IHNob3J0b3B0c1tdID0gImJjc3c6MDo6MTo6Mjo6Mzo6NDo6NTo6Njo6Nzo6ODo6OTo6IjsKKyAKKyBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyB7CisgICB7ImJ5dGVzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdiJ30sCisrICB7ImNoYXJhY3RlcnMiLCBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKKyAgIHsic3BhY2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdzJ30sCisgICB7IndpZHRoIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd3J30sCisgICB7R0VUT1BUX0hFTFBfT1BUSU9OX0RFQ0x9LAorQEAgLTgxLDYgKzEyNCw3IEBACisgIiksIHN0ZG91dCk7CisgICAgICAgZnB1dHMgKF8oIlwKKyAgIC1iLCAtLWJ5dGVzICAgICAgICAgY291bnQgYnl0ZXMgcmF0aGVyIHRoYW4gY29sdW1uc1xuXAorKyAgLWMsIC0tY2hhcmFjdGVycyAgICBjb3VudCBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIGNvbHVtbnNcblwKKyAgIC1zLCAtLXNwYWNlcyAgICAgICAgYnJlYWsgYXQgc3BhY2VzXG5cCisgICAtdywgLS13aWR0aD1XSURUSCAgIHVzZSBXSURUSCBjb2x1bW5zIGluc3RlYWQgb2YgODBcblwKKyAiKSwgc3Rkb3V0KTsKK0BAIC05OCw3ICsxNDIsNyBAQAorIHN0YXRpYyBzaXplX3QKKyBhZGp1c3RfY29sdW1uIChzaXplX3QgY29sdW1uLCBjaGFyIGMpCisgeworLSAgaWYgKCFjb3VudF9ieXRlcykKKysgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSBieXRlX21vZGUpCisgICAgIHsKKyAgICAgICBpZiAoYyA9PSAnXGInKQorIAl7CitAQCAtMTIxLDMwICsxNjUsMTQgQEAKKyAgICB0byBzdGRvdXQsIHdpdGggbWF4aW11bSBsaW5lIGxlbmd0aCBXSURUSC4KKyAgICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKyAKKy1zdGF0aWMgYm9vbAorLWZvbGRfZmlsZSAoY2hhciBjb25zdCAqZmlsZW5hbWUsIHNpemVfdCB3aWR0aCkKKytzdGF0aWMgdm9pZAorK2ZvbGRfdGV4dCAoRklMRSAqaXN0cmVhbSwgc2l6ZV90IHdpZHRoLCBpbnQgKnNhdmVkX2Vycm5vKQorIHsKKy0gIEZJTEUgKmlzdHJlYW07CisgICBpbnQgYzsKKyAgIHNpemVfdCBjb2x1bW4gPSAwOwkJLyogU2NyZWVuIGNvbHVtbiB3aGVyZSBuZXh0IGNoYXIgd2lsbCBnby4gKi8KKyAgIHNpemVfdCBvZmZzZXRfb3V0ID0gMDsJLyogSW5kZXggaW4gYGxpbmVfb3V0JyBmb3IgbmV4dCBjaGFyLiAqLworICAgc3RhdGljIGNoYXIgKmxpbmVfb3V0ID0gTlVMTDsKKyAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGVkX291dCA9IDA7CistICBpbnQgc2F2ZWRfZXJybm87CistCistICBpZiAoU1RSRVEgKGZpbGVuYW1lLCAiLSIpKQorLSAgICB7CistICAgICAgaXN0cmVhbSA9IHN0ZGluOworLSAgICAgIGhhdmVfcmVhZF9zdGRpbiA9IHRydWU7CistICAgIH0KKy0gIGVsc2UKKy0gICAgaXN0cmVhbSA9IGZvcGVuIChmaWxlbmFtZSwgInIiKTsKKy0KKy0gIGlmIChpc3RyZWFtID09IE5VTEwpCistICAgIHsKKy0gICAgICBlcnJvciAoMCwgZXJybm8sICIlcyIsIGZpbGVuYW1lKTsKKy0gICAgICByZXR1cm4gZmFsc2U7CistICAgIH0KKyAKKyAgIHdoaWxlICgoYyA9IGdldGMgKGlzdHJlYW0pKSAhPSBFT0YpCisgICAgIHsKK0BAIC0xNzIsNiArMjAwLDE1IEBACisgCSAgICAgIGJvb2wgZm91bmRfYmxhbmsgPSBmYWxzZTsKKyAJICAgICAgc2l6ZV90IGxvZ2ljYWxfZW5kID0gb2Zmc2V0X291dDsKKyAKKysJICAgICAgLyogSWYgTElORV9PVVQgaGFzIG5vIHdpZGUgY2hhcmFjdGVyLAorKwkJIHB1dCBhIG5ldyB3aWRlIGNoYXJhY3RlciBpbiBMSU5FX09VVAorKwkJIGlmIGNvbHVtbiBpcyBiaWdnZXIgdGhhbiB3aWR0aC4gKi8KKysJICAgICAgaWYgKG9mZnNldF9vdXQgPT0gMCkKKysJCXsKKysJCSAgbGluZV9vdXRbb2Zmc2V0X291dCsrXSA9IGM7CisrCQkgIGNvbnRpbnVlOworKwkJfQorKworIAkgICAgICAvKiBMb29rIGZvciB0aGUgbGFzdCBibGFuay4gKi8KKyAJICAgICAgd2hpbGUgKGxvZ2ljYWxfZW5kKQorIAkJeworQEAgLTIxOCwxMSArMjU1LDIyNSBAQAorICAgICAgIGxpbmVfb3V0W29mZnNldF9vdXQrK10gPSBjOworICAgICB9CisgCistICBzYXZlZF9lcnJubyA9IGVycm5vOworKyAgKnNhdmVkX2Vycm5vID0gZXJybm87CisrCisrICBpZiAob2Zmc2V0X291dCkKKysgICAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mIChjaGFyKSwgKHNpemVfdCkgb2Zmc2V0X291dCwgc3Rkb3V0KTsKKysKKysgIGZyZWUobGluZV9vdXQpOworK30KKysKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytmb2xkX211bHRpYnl0ZV90ZXh0IChGSUxFICppc3RyZWFtLCBzaXplX3Qgd2lkdGgsIGludCAqc2F2ZWRfZXJybm8pCisreworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBzaXplX3QgYnVmbGVuID0gMDsJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICBjaGFyICpidWZwb3M7ICAgICAgICAgLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHdpbnRfdCB3YzsJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlciB3aGljaCBzaG93cworKwkJCSAgIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKyAgbWJzdGF0ZV90IHN0YXRlLCBzdGF0ZV9iYWs7CS8qIFN0YXRlIG9mIHRoZSBzdHJlYW0uICovCisrICBpbnQgY29udmZhaWw7CQkvKiAxLCB3aGVuIGNvbnZlcnNpb24gaXMgZmFpbGVkLiBPdGhlcndpc2UgMC4gKi8KKysKKysgIGNoYXIgKmxpbmVfb3V0ID0gTlVMTDsKKysgIHNpemVfdCBvZmZzZXRfb3V0ID0gMDsJLyogSW5kZXggaW4gYGxpbmVfb3V0JyBmb3IgbmV4dCBjaGFyLiAqLworKyAgc2l6ZV90IGFsbG9jYXRlZF9vdXQgPSAwOworKworKyAgaW50IGluY3JlbWVudDsKKysgIHNpemVfdCBjb2x1bW4gPSAwOworKworKyAgc2l6ZV90IGxhc3RfYmxhbmtfcG9zOworKyAgc2l6ZV90IGxhc3RfYmxhbmtfY29sdW1uOworKyAgaW50IGlzX2JsYW5rX3NlZW47CisrICBpbnQgbGFzdF9ibGFua19pbmNyZW1lbnQ7CisrICBpbnQgaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbms7CisrICBzaXplX3QgYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtOworKyAgaW50IGlzX2NyX2FmdGVyX2xhc3RfYmxhbms7CisrCisrI2RlZmluZSBDTEVBUl9GTEFHUwkJCQlcCisrICAgZG8JCQkJCQlcCisrICAgICB7CQkJCQkJXAorKwlsYXN0X2JsYW5rX3BvcyA9IDA7CQkJXAorKwlsYXN0X2JsYW5rX2NvbHVtbiA9IDA7CQkJXAorKwlpc19ibGFua19zZWVuID0gMDsJCQlcCisrCWlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rID0gMDsJCVwKKysJYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtID0gMDsJXAorKwlpc19jcl9hZnRlcl9sYXN0X2JsYW5rID0gMDsJCVwKKysgICAgIH0JCQkJCQlcCisrICAgd2hpbGUgKDApCisrCisrI2RlZmluZSBTVEFSVF9ORVdfTElORQkJCVwKKysgICBkbwkJCQkJXAorKyAgICAgewkJCQkJXAorKyAgICAgIHB1dGNoYXIgKCdcbicpOwkJCVwKKysgICAgICBjb2x1bW4gPSAwOwkJCVwKKysgICAgICBvZmZzZXRfb3V0ID0gMDsJCQlcCisrICAgICAgQ0xFQVJfRkxBR1M7CQkJXAorKyAgICB9CQkJCQlcCisrICAgd2hpbGUgKDApCisrCisrICBDTEVBUl9GTEFHUzsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBmb3IgKDs7IGJ1ZnBvcyArPSBtYmxlbmd0aCwgYnVmbGVuIC09IG1ibGVuZ3RoKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZmxlbiA8IE1CX0xFTl9NQVggJiYgIWZlb2YgKGlzdHJlYW0pICYmICFmZXJyb3IgKGlzdHJlYW0pKQorKwl7CisrCSAgbWVtbW92ZSAoYnVmLCBidWZwb3MsIGJ1Zmxlbik7CisrCSAgYnVmbGVuICs9IGZyZWFkIChidWYgKyBidWZsZW4sIHNpemVvZihjaGFyKSwgQlVGU0laLCBpc3RyZWFtKTsKKysJICBidWZwb3MgPSBidWY7CisrCX0KKysKKysgICAgICBpZiAoYnVmbGVuIDwgMSkKKysJYnJlYWs7CisrCisrICAgICAgLyogR2V0IGEgd2lkZSBjaGFyYWN0ZXIuICovCisrICAgICAgY29udmZhaWwgPSAwOworKyAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoKHdjaGFyX3QgKikmd2MsIGJ1ZnBvcywgYnVmbGVuLCAmc3RhdGUpOworKworKyAgICAgIHN3aXRjaCAobWJsZW5ndGgpCisrCXsKKysJY2FzZSAoc2l6ZV90KS0xOgorKwljYXNlIChzaXplX3QpLTI6CisrCSAgY29udmZhaWwrKzsKKysJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICAvKiBGYWxsIHRocm91Z2guICovCisrCisrCWNhc2UgMDoKKysJICBtYmxlbmd0aCA9IDE7CisrCSAgYnJlYWs7CisrCX0KKysKKytyZXNjYW46CisrICAgICAgaWYgKG9wZXJhdGluZ19tb2RlID09IGJ5dGVfbW9kZSkJCQkvKiBieXRlIG1vZGUgKi8KKysJaW5jcmVtZW50ID0gbWJsZW5ndGg7CisrICAgICAgZWxzZSBpZiAob3BlcmF0aW5nX21vZGUgPT0gY2hhcmFjdGVyX21vZGUpCS8qIGNoYXJhY3RlciBtb2RlICovCisrCWluY3JlbWVudCA9IDE7CisrICAgICAgZWxzZQkJCQkJCS8qIGNvbHVtbiBtb2RlICovCisrCXsKKysJICBpZiAoY29udmZhaWwpCisrCSAgICBpbmNyZW1lbnQgPSAxOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgc3dpdGNoICh3YykKKysJCXsKKysJCWNhc2UgTCdcbic6CisrCQkgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZihjaGFyKSwgb2Zmc2V0X291dCwgc3Rkb3V0KTsKKysJCSAgU1RBUlRfTkVXX0xJTkU7CisrCQkgIGNvbnRpbnVlOworKwkJICAKKysJCWNhc2UgTCdcYic6CisrCQkgIGluY3JlbWVudCA9IChjb2x1bW4gPiAwKSA/IC0xIDogMDsKKysJCSAgYnJlYWs7CisrCisrCQljYXNlIEwnXHInOgorKwkJICBpbmNyZW1lbnQgPSAtMSAqIGNvbHVtbjsKKysJCSAgYnJlYWs7CisrCisrCQljYXNlIEwnXHQnOgorKwkJICBpbmNyZW1lbnQgPSA4IC0gY29sdW1uICUgODsKKysJCSAgYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJICBpbmNyZW1lbnQgPSB3Y3dpZHRoICh3Yyk7CisrCQkgIGluY3JlbWVudCA9IChpbmNyZW1lbnQgPCAwKSA/IDAgOiBpbmNyZW1lbnQ7CisrCQl9CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoY29sdW1uICsgaW5jcmVtZW50ID4gd2lkdGggJiYgYnJlYWtfc3BhY2VzICYmIGxhc3RfYmxhbmtfcG9zKQorKwl7CisrCSAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mKGNoYXIpLCBsYXN0X2JsYW5rX3Bvcywgc3Rkb3V0KTsKKysJICBwdXRjaGFyICgnXG4nKTsKKysKKysJICBvZmZzZXRfb3V0ID0gb2Zmc2V0X291dCAtIGxhc3RfYmxhbmtfcG9zOworKwkgIGNvbHVtbiA9IGNvbHVtbiAtIGxhc3RfYmxhbmtfY29sdW1uICsgKChpc19jcl9hZnRlcl9sYXN0X2JsYW5rKQorKwkgICAgICA/IGxhc3RfYmxhbmtfaW5jcmVtZW50IDogYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtKTsKKysJICBtZW1tb3ZlIChsaW5lX291dCwgbGluZV9vdXQgKyBsYXN0X2JsYW5rX3Bvcywgb2Zmc2V0X291dCk7CisrCSAgQ0xFQVJfRkxBR1M7CisrCSAgZ290byByZXNjYW47CisrCX0KKysKKysgICAgICBpZiAoY29sdW1uICsgaW5jcmVtZW50ID4gd2lkdGggJiYgY29sdW1uICE9IDApCisrCXsKKysJICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YoY2hhciksIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCSAgU1RBUlRfTkVXX0xJTkU7CisrCSAgZ290byByZXNjYW47CisrCX0KKysKKysgICAgICBpZiAoYWxsb2NhdGVkX291dCA8IG9mZnNldF9vdXQgKyBtYmxlbmd0aCkKKysJeworKwkgIGFsbG9jYXRlZF9vdXQgKz0gMTAyNDsKKysJICBsaW5lX291dCA9IHhyZWFsbG9jIChsaW5lX291dCwgYWxsb2NhdGVkX291dCk7CisrCX0KKysKKysgICAgICBtZW1jcHkgKGxpbmVfb3V0ICsgb2Zmc2V0X291dCwgYnVmcG9zLCBtYmxlbmd0aCk7CisrICAgICAgb2Zmc2V0X291dCArPSBtYmxlbmd0aDsKKysgICAgICBjb2x1bW4gKz0gaW5jcmVtZW50OworKworKyAgICAgIGlmIChpc19ibGFua19zZWVuICYmICFjb252ZmFpbCAmJiB3YyA9PSBMJ1xyJykKKysJaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDE7CisrCisrICAgICAgaWYgKGlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rICYmICFjb252ZmFpbCAmJiB3YyA9PSBMJ1xiJykKKysJKytic19mb2xsb3dpbmdfbGFzdF9ibGFua19udW07CisrICAgICAgZWxzZQorKwlpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayA9IDA7CisrCisrICAgICAgaWYgKGJyZWFrX3NwYWNlcyAmJiAhY29udmZhaWwgJiYgaXN3YmxhbmsgKHdjKSkKKysJeworKwkgIGxhc3RfYmxhbmtfcG9zID0gb2Zmc2V0X291dDsKKysJICBsYXN0X2JsYW5rX2NvbHVtbiA9IGNvbHVtbjsKKysJICBpc19ibGFua19zZWVuID0gMTsKKysJICBsYXN0X2JsYW5rX2luY3JlbWVudCA9IGluY3JlbWVudDsKKysJICBpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayA9IDE7CisrCSAgYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtID0gMDsKKysJICBpc19jcl9hZnRlcl9sYXN0X2JsYW5rID0gMDsKKysJfQorKyAgICB9CisrCisrICAqc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAKKyAgIGlmIChvZmZzZXRfb3V0KQorICAgICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YgKGNoYXIpLCAoc2l6ZV90KSBvZmZzZXRfb3V0LCBzdGRvdXQpOworIAorKyAgZnJlZShsaW5lX291dCk7CisrfQorKyNlbmRpZgorKworKy8qIEZvbGQgZmlsZSBGSUxFTkFNRSwgb3Igc3RhbmRhcmQgaW5wdXQgaWYgRklMRU5BTUUgaXMgIi0iLAorKyAgIHRvIHN0ZG91dCwgd2l0aCBtYXhpbXVtIGxpbmUgbGVuZ3RoIFdJRFRILgorKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIDEgaWYgYW4gZXJyb3Igb2NjdXJzLiAqLworKworK3N0YXRpYyBib29sCisrZm9sZF9maWxlIChjaGFyICpmaWxlbmFtZSwgc2l6ZV90IHdpZHRoKQorK3sKKysgIEZJTEUgKmlzdHJlYW07CisrICBpbnQgc2F2ZWRfZXJybm87CisrCisrICBpZiAoU1RSRVEgKGZpbGVuYW1lLCAiLSIpKQorKyAgICB7CisrICAgICAgaXN0cmVhbSA9IHN0ZGluOworKyAgICAgIGhhdmVfcmVhZF9zdGRpbiA9IDE7CisrICAgIH0KKysgIGVsc2UKKysgICAgaXN0cmVhbSA9IGZvcGVuIChmaWxlbmFtZSwgInIiKTsKKysKKysgIGlmIChpc3RyZWFtID09IE5VTEwpCisrICAgIHsKKysgICAgICBlcnJvciAoMCwgZXJybm8sICIlcyIsIGZpbGVuYW1lKTsKKysgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgLyogRGVmaW5lIGhvdyBJU1RSRUFNIGlzIGJlaW5nIGZvbGRlZC4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIGZvbGRfbXVsdGlieXRlX3RleHQgKGlzdHJlYW0sIHdpZHRoLCAmc2F2ZWRfZXJybm8pOworKyAgZWxzZQorKyNlbmRpZgorKyAgICBmb2xkX3RleHQgKGlzdHJlYW0sIHdpZHRoLCAmc2F2ZWRfZXJybm8pOworKworICAgaWYgKGZlcnJvciAoaXN0cmVhbSkpCisgICAgIHsKKyAgICAgICBlcnJvciAoMCwgc2F2ZWRfZXJybm8sICIlcyIsIGZpbGVuYW1lKTsKK0BAIC0yNTUsNyArNTA2LDggQEAKKyAKKyAgIGF0ZXhpdCAoY2xvc2Vfc3Rkb3V0KTsKKyAKKy0gIGJyZWFrX3NwYWNlcyA9IGNvdW50X2J5dGVzID0gaGF2ZV9yZWFkX3N0ZGluID0gZmFsc2U7CisrICBvcGVyYXRpbmdfbW9kZSA9IGNvbHVtbl9tb2RlOworKyAgYnJlYWtfc3BhY2VzID0gaGF2ZV9yZWFkX3N0ZGluID0gZmFsc2U7CisgCisgICB3aGlsZSAoKG9wdGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgc2hvcnRvcHRzLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKQorICAgICB7CitAQCAtMjY0LDcgKzUxNiwxNSBAQAorICAgICAgIHN3aXRjaCAob3B0YykKKyAJeworIAljYXNlICdiJzoJCS8qIENvdW50IGJ5dGVzIHJhdGhlciB0aGFuIGNvbHVtbnMuICovCistCSAgY291bnRfYnl0ZXMgPSB0cnVlOworKwkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSBjb2x1bW5fbW9kZSkKKysJICAgIEZBVEFMX0VSUk9SIChfKCJvbmx5IG9uZSB3YXkgb2YgZm9sZGluZyBtYXkgYmUgc3BlY2lmaWVkIikpOworKwkgIG9wZXJhdGluZ19tb2RlID0gYnl0ZV9tb2RlOworKwkgIGJyZWFrOworKworKwljYXNlICdjJzoKKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gY29sdW1uX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgd2F5IG9mIGZvbGRpbmcgbWF5IGJlIHNwZWNpZmllZCIpKTsKKysJICBvcGVyYXRpbmdfbW9kZSA9IGNoYXJhY3Rlcl9tb2RlOworIAkgIGJyZWFrOworIAorIAljYXNlICdzJzoJCS8qIEJyZWFrIGF0IHdvcmQgYm91bmRhcmllcy4gKi8KKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvc29ydC5jLmkxOG4JMjAwNy0wMi0yNCAxMToyMzoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvc29ydC5jCTIwMDctMDMtMDEgMTU6MTA6NTcuMDAwMDAwMDAwICswMDAwCitAQCAtMjMsMTAgKzIzLDE5IEBACisgCisgI2luY2x1ZGUgPGNvbmZpZy5oPgorIAorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKy8qIEdldCBpc3cqIGZ1bmN0aW9ucy4gKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJhcmdtYXRjaC5oIgorICNpbmNsdWRlICJlcnJvci5oIgorQEAgLTExNiwxNCArMTI1LDM4IEBACisgLyogVGhvdXNhbmRzIHNlcGFyYXRvcjsgaWYgLTEsIHRoZW4gdGhlcmUgaXNuJ3Qgb25lLiAgKi8KKyBzdGF0aWMgaW50IHRob3VzYW5kc19zZXA7CisgCisrc3RhdGljIGludCBmb3JjZV9nZW5lcmFsX251bWNvbXBhcmUgPSAwOworKworIC8qIE5vbnplcm8gaWYgdGhlIGNvcnJlc3BvbmRpbmcgbG9jYWxlcyBhcmUgaGFyZC4gICovCisgc3RhdGljIGJvb2wgaGFyZF9MQ19DT0xMQVRFOworLSNpZiBIQVZFX05MX0xBTkdJTkZPCisrI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorIHN0YXRpYyBib29sIGhhcmRfTENfVElNRTsKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIE5PTlpFUk8oeCkgKCh4KSAhPSAwKQorIAorKy8qIGdldCBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIncyBieXRlIGxlbmd0aC4gKi8KKysjZGVmaW5lIEdFVF9CWVRFTEVOX09GX0NIQVIoTElNLCBQVFIsIE1CTEVOR1RILCBTVEFURSkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICB3Y2hhcl90IHdjOwkJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIHN0YXRlX2JhayA9IFNUQVRFOwkJCQkJCVwKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgUFRSLCBMSU0gLSBQVFIsICZTVEFURSk7CQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBzd2l0Y2ggKE1CTEVOR1RIKQkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJY2FzZSAoc2l6ZV90KS0xOgkJCQkJCVwKKysJY2FzZSAoc2l6ZV90KS0yOgkJCQkJCVwKKysJICBTVEFURSA9IHN0YXRlX2JhazsJCQkJCQlcCisrCQkvKiBGYWxsIHRocm91Z2guICovCQkJCQlcCisrCWNhc2UgMDoJCQkJCQkJCVwKKysJICBNQkxFTkdUSCA9IDE7CQkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisgLyogVGhlIGtpbmQgb2YgYmxhbmtzIGZvciAnLWInIHRvIHNraXAgaW4gdmFyaW91cyBvcHRpb25zLiAqLworIGVudW0gYmxhbmt0eXBlIHsgYmxfc3RhcnQsIGJsX2VuZCwgYmxfYm90aCB9OworIAorQEAgLTI2MSwxMyArMjk0LDExIEBACisgICAgdGhleSB3ZXJlIHJlYWQgaWYgYWxsIGtleXMgY29tcGFyZSBlcXVhbC4gICovCisgc3RhdGljIGJvb2wgc3RhYmxlOworIAorLS8qIElmIFRBQiBoYXMgdGhpcyB2YWx1ZSwgYmxhbmtzIHNlcGFyYXRlIGZpZWxkcy4gICovCistZW51bSB7IFRBQl9ERUZBVUxUID0gQ0hBUl9NQVggKyAxIH07CistCistLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIFRBQl9ERUZBVUxULCB0aGVuIGZpZWxkcyBhcmUKKysvKiBUYWIgY2hhcmFjdGVyIHNlcGFyYXRpbmcgZmllbGRzLiAgSWYgdGFiX2xlbmd0aCBpcyAwLCB0aGVuIGZpZWxkcyBhcmUKKyAgICBzZXBhcmF0ZWQgYnkgdGhlIGVtcHR5IHN0cmluZyBiZXR3ZWVuIGEgbm9uLWJsYW5rIGNoYXJhY3RlciBhbmQgYSBibGFuaworICAgIGNoYXJhY3Rlci4gKi8KKy1zdGF0aWMgaW50IHRhYiA9IFRBQl9ERUZBVUxUOworK3N0YXRpYyBjaGFyIHRhYltNQl9MRU5fTUFYICsgMV07Cisrc3RhdGljIHNpemVfdCB0YWJfbGVuZ3RoID0gMDsKKyAKKyAvKiBGbGFnIHRvIHJlbW92ZSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgbGluZXMgZnJvbSB0aGUgb3V0cHV0LgorICAgIE9ubHkgdGhlIGxhc3Qgb2YgYSBzZXF1ZW5jZSBvZiBlcXVhbCBsaW5lcyB3aWxsIGJlIG91dHB1dC4gKi8KK0BAIC02MzksNiArNjcwLDQ0IEBACisgICAgIHVwZGF0ZV9wcm9jIChwaWQpOworIH0KKyAKKysvKiBGdW5jdGlvbiBwb2ludGVycy4gKi8KKytzdGF0aWMgdm9pZAorKygqaW5pdHRhYmxlcykgKHZvaWQpOworK3N0YXRpYyBjaGFyICoKKysoKmJlZ2ZpZWxkKSAoY29uc3Qgc3RydWN0IGxpbmUqLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKik7Cisrc3RhdGljIGNoYXIgKgorKygqbGltZmllbGQpIChjb25zdCBzdHJ1Y3QgbGluZSosIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqKTsKKytzdGF0aWMgaW50CisrKCpnZXRtb250aCkgKGNoYXIgY29uc3QgKiwgc2l6ZV90KTsKKytzdGF0aWMgaW50CisrKCprZXljb21wYXJlKSAoY29uc3Qgc3RydWN0IGxpbmUgKiwgY29uc3Qgc3RydWN0IGxpbmUgKik7Cisrc3RhdGljIGludAorKygqbnVtY29tcGFyZSkgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKysKKysvKiBUZXN0IGZvciB3aGl0ZSBzcGFjZSBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorKyAgIFNldCBMRU5HVEggdGhlIGJ5dGUgbGVuZ3RoIG9mIGludmVzdGlnYXRlZCBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAqLworKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisraXNtYmJsYW5rIChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHNpemVfdCAqbGVuZ3RoKQorK3sKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2M7CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHN0ciwgbGVuLCAmc3RhdGUpOworKworKyAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysgICAgeworKyAgICAgICpsZW5ndGggPSAxOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAqbGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrICByZXR1cm4gaXN3YmxhbmsgKHdjKTsKKyt9CisrI2VuZGlmCisrCisgLyogQ2xlYW4gdXAgYW55IHJlbWFpbmluZyB0ZW1wb3JhcnkgZmlsZXMuICAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtOTc4LDcgKzEwNDcsNyBAQAorICAgZnJlZSAobm9kZSk7CisgfQorIAorLSNpZiBIQVZFX05MX0xBTkdJTkZPCisrI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorIAorIHN0YXRpYyBpbnQKKyBzdHJ1Y3RfbW9udGhfY21wIChjb25zdCB2b2lkICptMSwgY29uc3Qgdm9pZCAqbTIpCitAQCAtOTkzLDcgKzEwNjIsNyBAQAorIC8qIEluaXRpYWxpemUgdGhlIGNoYXJhY3RlciBjbGFzcyB0YWJsZXMuICovCisgCisgc3RhdGljIHZvaWQKKy1pbml0dGFibGVzICh2b2lkKQorK2luaXR0YWJsZXNfdW5pICh2b2lkKQorIHsKKyAgIHNpemVfdCBpOworIAorQEAgLTEwMDUsNyArMTA3NCw3IEBACisgICAgICAgZm9sZF90b3VwcGVyW2ldID0gdG91cHBlciAoaSk7CisgICAgIH0KKyAKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAgIC8qIElmIHdlJ3JlIG5vdCBpbiB0aGUgIkMiIGxvY2FsZSwgcmVhZCBkaWZmZXJlbnQgbmFtZXMgZm9yIG1vbnRocy4gICovCisgICBpZiAoaGFyZF9MQ19USU1FKQorICAgICB7CitAQCAtMTAzMSw2ICsxMTAwLDY0IEBACisgI2VuZGlmCisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK2luaXR0YWJsZXNfbWIgKHZvaWQpCisreworKyAgaW50IGksIGosIGssIGw7CisrICBjaGFyICpuYW1lLCAqczsKKysgIHNpemVfdCBzX2xlbiwgbWJsZW5ndGg7CisrICBjaGFyIG1iY1tNQl9MRU5fTUFYXTsKKysgIHdjaGFyX3Qgd2MsIHB3YzsKKysgIG1ic3RhdGVfdCBzdGF0ZV9tYiwgc3RhdGVfd2M7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgTU9OVEhTX1BFUl9ZRUFSOyBpKyspCisrICAgIHsKKysgICAgICBzID0gKGNoYXIgKikgbmxfbGFuZ2luZm8gKEFCTU9OXzEgKyBpKTsKKysgICAgICBzX2xlbiA9IHN0cmxlbiAocyk7CisrICAgICAgbW9udGh0YWJbaV0ubmFtZSA9IG5hbWUgPSAoY2hhciAqKSB4bWFsbG9jIChzX2xlbiArIDEpOworKyAgICAgIG1vbnRodGFiW2ldLnZhbCA9IGkgKyAxOworKworKyAgICAgIG1lbXNldCAoJnN0YXRlX21iLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgICAgIGZvciAoaiA9IDA7IGogPCBzX2xlbjspCisrCXsKKysJICBpZiAoIWlzbWJibGFuayAocyArIGosIHNfbGVuIC0gaiwgJm1ibGVuZ3RoKSkKKysJICAgIGJyZWFrOworKwkgIGogKz0gbWJsZW5ndGg7CisrCX0KKysKKysgICAgICBmb3IgKGsgPSAwOyBqIDwgc19sZW47KQorKwl7CisrCSAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIChzICsgaiksIChzX2xlbiAtIGopLCAmc3RhdGVfbWIpOworKwkgIGFzc2VydCAobWJsZW5ndGggIT0gKHNpemVfdCktMSAmJiBtYmxlbmd0aCAhPSAoc2l6ZV90KS0yKTsKKysJICBpZiAobWJsZW5ndGggPT0gMCkKKysJICAgIGJyZWFrOworKworKwkgIHB3YyA9IHRvd3VwcGVyICh3Yyk7CisrCSAgaWYgKHB3YyA9PSB3YykKKysJICAgIHsKKysJICAgICAgbWVtY3B5IChtYmMsIHMgKyBqLCBtYmxlbmd0aCk7CisrCSAgICAgIGogKz0gbWJsZW5ndGg7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBqICs9IG1ibGVuZ3RoOworKwkgICAgICBtYmxlbmd0aCA9IHdjcnRvbWIgKG1iYywgcHdjLCAmc3RhdGVfd2MpOworKwkgICAgICBhc3NlcnQgKG1ibGVuZ3RoICE9IChzaXplX3QpMCAmJiBtYmxlbmd0aCAhPSAoc2l6ZV90KS0xKTsKKysJICAgIH0KKysKKysJICBmb3IgKGwgPSAwOyBsIDwgbWJsZW5ndGg7IGwrKykKKysJICAgIG5hbWVbaysrXSA9IG1iY1tsXTsKKysJfQorKyAgICAgIG5hbWVba10gPSAnXDAnOworKyAgICB9CisrICBxc29ydCAoKHZvaWQgKikgbW9udGh0YWIsIE1PTlRIU19QRVJfWUVBUiwKKysgICAgICBzaXplb2YgKHN0cnVjdCBtb250aCksIHN0cnVjdF9tb250aF9jbXApOworK30KKysjZW5kaWYKKysKKyAvKiBTcGVjaWZ5IHRoZSBhbW91bnQgb2YgbWFpbiBtZW1vcnkgdG8gdXNlIHdoZW4gc29ydGluZy4gICovCisgc3RhdGljIHZvaWQKKyBzcGVjaWZ5X3NvcnRfc2l6ZSAoY2hhciBjb25zdCAqcykKK0BAIC0xMjQxLDcgKzEzNjgsNyBAQAorICAgIGJ5IEtFWSBpbiBMSU5FLiAqLworIAorIHN0YXRpYyBjaGFyICoKKy1iZWdmaWVsZCAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK2JlZ2ZpZWxkX3VuaSAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorIHsKKyAgIGNoYXIgKnB0ciA9IGxpbmUtPnRleHQsICpsaW0gPSBwdHIgKyBsaW5lLT5sZW5ndGggLSAxOworICAgc2l6ZV90IHN3b3JkID0ga2V5LT5zd29yZDsKK0BAIC0xMjUxLDEwICsxMzc4LDEwIEBACisgICAvKiBUaGUgbGVhZGluZyBmaWVsZCBzZXBhcmF0b3IgaXRzZWxmIGlzIGluY2x1ZGVkIGluIGEgZmllbGQgd2hlbiAtdAorICAgICAgaXMgYWJzZW50LiAgKi8KKyAKKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBzd29yZC0tKQorICAgICAgIHsKKy0Jd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYikKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYlswXSkKKyAJICArK3B0cjsKKyAJaWYgKHB0ciA8IGxpbSkKKyAJICArK3B0cjsKK0BAIC0xMjgyLDExICsxNDA5LDcwIEBACisgICByZXR1cm4gcHRyOworIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGNoYXIgKgorK2JlZ2ZpZWxkX21iIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisreworKyAgaW50IGk7CisrICBjaGFyICpwdHIgPSBsaW5lLT50ZXh0LCAqbGltID0gcHRyICsgbGluZS0+bGVuZ3RoIC0gMTsKKysgIHNpemVfdCBzd29yZCA9IGtleS0+c3dvcmQ7CisrICBzaXplX3Qgc2NoYXIgPSBrZXktPnNjaGFyOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGlmICh0YWJfbGVuZ3RoKQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIHN3b3JkLS0pCisrICAgICAgeworKwl3aGlsZSAocHRyIDwgbGltICYmIG1lbWNtcCAocHRyLCB0YWIsIHRhYl9sZW5ndGgpICE9IDApCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKwlpZiAocHRyIDwgbGltKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysgICAgICB9CisrICBlbHNlCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgc3dvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrCWlmIChwdHIgPCBsaW0pCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKwl3aGlsZSAocHRyIDwgbGltICYmICFpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKwkgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrICBpZiAoa2V5LT5za2lwc2JsYW5rcykKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKyAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBzY2hhcjsgaSsrKQorKyAgICB7CisrICAgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCisrICAgICAgaWYgKHB0ciArIG1ibGVuZ3RoID4gbGltKQorKwlicmVhazsKKysgICAgICBlbHNlCisrCXB0ciArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIHB0cjsKKyt9CisrI2VuZGlmCisrCisgLyogUmV0dXJuIHRoZSBsaW1pdCBvZiAoYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIpIHRoZSBmaWVsZAorICAgIGluIExJTkUgc3BlY2lmaWVkIGJ5IEtFWS4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistbGltZmllbGQgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKytsaW1maWVsZF91bmkgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKyB7CisgICBjaGFyICpwdHIgPSBsaW5lLT50ZXh0LCAqbGltID0gcHRyICsgbGluZS0+bGVuZ3RoIC0gMTsKKyAgIHNpemVfdCBld29yZCA9IGtleS0+ZXdvcmQsIGVjaGFyID0ga2V5LT5lY2hhcjsKK0BAIC0xMjk5LDEwICsxNDg1LDEwIEBACisgICAgICBgYmVnaW5uaW5nJyBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgZGVsaW1pdGluZyBUQUIuCisgICAgICBPdGhlcndpc2UsIGxlYXZlIFBUUiBwb2ludGluZyBhdCB0aGUgZmlyc3QgYGJsYW5rJyBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgIHRoZSBwcmVjZWRpbmcgZmllbGQuICAqLworLSAgaWYgKHRhYiAhPSBUQUJfREVGQVVMVCkKKysgIGlmICh0YWJfbGVuZ3RoKQorICAgICB3aGlsZSAocHRyIDwgbGltICYmIGV3b3JkLS0pCisgICAgICAgeworLQl3aGlsZSAocHRyIDwgbGltICYmICpwdHIgIT0gdGFiKQorKwl3aGlsZSAocHRyIDwgbGltICYmICpwdHIgIT0gdGFiWzBdKQorIAkgICsrcHRyOworIAlpZiAocHRyIDwgbGltICYmIChld29yZCB8IGVjaGFyKSkKKyAJICArK3B0cjsKK0BAIC0xMzQ4LDEwICsxNTM0LDEwIEBACisgICAgICAqLworIAorICAgLyogTWFrZSBMSU0gcG9pbnQgdG8gdGhlIGVuZCBvZiAob25lIGJ5dGUgcGFzdCkgdGhlIGN1cnJlbnQgZmllbGQuICAqLworLSAgaWYgKHRhYiAhPSBUQUJfREVGQVVMVCkKKysgIGlmICh0YWJfbGVuZ3RoKQorICAgICB7CisgICAgICAgY2hhciAqbmV3bGltOworLSAgICAgIG5ld2xpbSA9IG1lbWNociAocHRyLCB0YWIsIGxpbSAtIHB0cik7CisrICAgICAgbmV3bGltID0gbWVtY2hyIChwdHIsIHRhYlswXSwgbGltIC0gcHRyKTsKKyAgICAgICBpZiAobmV3bGltKQorIAlsaW0gPSBuZXdsaW07CisgICAgIH0KK0BAIC0xMzg0LDYgKzE1NzAsMTA3IEBACisgICByZXR1cm4gcHRyOworIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGNoYXIgKgorK2xpbWZpZWxkX21iIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisreworKyAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisrICBzaXplX3QgZXdvcmQgPSBrZXktPmV3b3JkLCBlY2hhciA9IGtleS0+ZWNoYXI7CisrICBpbnQgaTsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBpZiAodGFiX2xlbmd0aCkKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBld29yZC0tKQorKyAgICAgIHsKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiBtZW1jbXAgKHB0ciwgdGFiLCB0YWJfbGVuZ3RoKSAhPSAwKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJaWYgKHB0ciA8IGxpbSAmJiAoZXdvcmQgfCBlY2hhcikpCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKyAgICAgIH0KKysgIGVsc2UKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBld29yZC0tKQorKyAgICAgIHsKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiBpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKwkgIHB0ciArPSBtYmxlbmd0aDsKKysJaWYgKHB0ciA8IGxpbSkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgIWlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrCSAgcHRyICs9IG1ibGVuZ3RoOworKyAgICAgIH0KKysKKysKKysjIGlmZGVmIFBPU0lYX1VOU1BFQ0lGSUVECisrICAvKiBNYWtlIExJTSBwb2ludCB0byB0aGUgZW5kIG9mIChvbmUgYnl0ZSBwYXN0KSB0aGUgY3VycmVudCBmaWVsZC4gICovCisrICBpZiAodGFiX2xlbmd0aCkKKysgICAgeworKyAgICAgIGNoYXIgKm5ld2xpbSwgKnA7CisrCisrICAgICAgbmV3bGltID0gTlVMTDsKKysgICAgICBmb3IgKHAgPSBwdHI7IHAgPCBsaW07KQorKyAJeworKwkgIGlmIChtZW1jbXAgKHAsIHRhYiwgdGFiX2xlbmd0aCkgPT0gMCkKKysJICAgIHsKKysJICAgICAgbmV3bGltID0gcDsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCisrCSAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgcCArPSBtYmxlbmd0aDsKKysJfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBjaGFyICpuZXdsaW07CisrICAgICAgbmV3bGltID0gcHRyOworKworKyAgICAgIHdoaWxlIChuZXdsaW0gPCBsaW0gJiYgaXNtYmJsYW5rIChuZXdsaW0sIGxpbSAtIG5ld2xpbSwgJm1ibGVuZ3RoKSkKKysJbmV3bGltICs9IG1ibGVuZ3RoOworKyAgICAgIGlmIChwdHIgPCBsaW0pCisrCXsKKysJICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrCX0KKysgICAgICB3aGlsZSAobmV3bGltIDwgbGltICYmICFpc21iYmxhbmsgKG5ld2xpbSwgbGltIC0gbmV3bGltLCAmbWJsZW5ndGgpKQorKwluZXdsaW0gKz0gbWJsZW5ndGg7CisrICAgICAgbGltID0gbmV3bGltOworKyAgICB9CisrIyBlbmRpZgorKworKyAgLyogSWYgd2UncmUgc2tpcHBpbmcgbGVhZGluZyBibGFua3MsIGRvbid0IHN0YXJ0IGNvdW50aW5nIGNoYXJhY3RlcnMKKysgICAqICAgICAgdW50aWwgYWZ0ZXIgc2tpcHBpbmcgcGFzdCBhbnkgbGVhZGluZyBibGFua3MuICAqLworKyAgaWYgKGtleS0+c2tpcHNibGFua3MpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysgICAgICBwdHIgKz0gbWJsZW5ndGg7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgLyogQWR2YW5jZSBQVFIgYnkgRUNIQVIgKGlmIHBvc3NpYmxlKSwgYnV0IG5vIGZ1cnRoZXIgdGhhbiBMSU0uICAqLworKyAgZm9yIChpID0gMDsgaSA8IGVjaGFyOyBpKyspCisrICAgIHsKKysgICAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysKKysgICAgICBpZiAocHRyICsgbWJsZW5ndGggPiBsaW0pCisrCWJyZWFrOworKyAgICAgIGVsc2UKKysJcHRyICs9IG1ibGVuZ3RoOworKyAgICB9CisrCisrICByZXR1cm4gcHRyOworK30KKysjZW5kaWYKKysKKyAvKiBGaWxsIEJVRiByZWFkaW5nIGZyb20gRlAsIG1vdmluZyBidWYtPmxlZnQgYnl0ZXMgZnJvbSB0aGUgZW5kCisgICAgb2YgYnVmLT5idWYgdG8gdGhlIGJlZ2lubmluZyBmaXJzdC4gIElmIEVPRiBpcyByZWFjaGVkIGFuZCB0aGUKKyAgICBmaWxlIHdhc24ndCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSwgc3VwcGx5IG9uZS4gIFNldCB1cCBCVUYncyBsaW5lCitAQCAtMTQ2Niw4ICsxNzUzLDI0IEBACisgCQkgIGVsc2UKKyAJCSAgICB7CisgCQkgICAgICBpZiAoa2V5LT5za2lwc2JsYW5rcykKKy0JCQl3aGlsZSAoYmxhbmtzW3RvX3VjaGFyICgqbGluZV9zdGFydCldKQorLQkJCSAgbGluZV9zdGFydCsrOworKwkJCXsKKysjaWYgSEFWRV9NQlJUT1dDCisrCQkJICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrCQkJICAgIHsKKysJCQkgICAgICBzaXplX3QgbWJsZW5ndGg7CisrCQkJICAgICAgbWJzdGF0ZV90IHN0YXRlOworKwkJCSAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkJICAgICAgd2hpbGUgKGxpbmVfc3RhcnQgPCBsaW5lLT5rZXlsaW0gJiYKKysJCQkJICAgICBpc21iYmxhbmsgKGxpbmVfc3RhcnQsCisrCQkJCQkJbGluZS0+a2V5bGltIC0gbGluZV9zdGFydCwKKysJCQkJCQkmbWJsZW5ndGgpKQorKwkJCQlsaW5lX3N0YXJ0ICs9IG1ibGVuZ3RoOworKwkJCSAgICB9CisrCQkJICBlbHNlCisrI2VuZGlmCisrCQkJICB3aGlsZSAoYmxhbmtzW3RvX3VjaGFyICgqbGluZV9zdGFydCldKQorKwkJCSAgICBsaW5lX3N0YXJ0Kys7CisrCQkJfQorIAkJICAgICAgbGluZS0+a2V5YmVnID0gbGluZV9zdGFydDsKKyAJCSAgICB9CisgCQl9CitAQCAtMTUwMCw3ICsxODAzLDcgQEAKKyAgICBoaWRlb3VzbHkgZmFzdC4gKi8KKyAKKyBzdGF0aWMgaW50CistbnVtY29tcGFyZSAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKKytudW1jb21wYXJlX3VuaSAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKKyB7CisgICB3aGlsZSAoYmxhbmtzW3RvX3VjaGFyICgqYSldKQorICAgICBhKys7CitAQCAtMTUxMCw2ICsxODEzLDI1IEBACisgICByZXR1cm4gc3RybnVtY21wIChhLCBiLCBkZWNpbWFsX3BvaW50LCB0aG91c2FuZHNfc2VwKTsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytudW1jb21wYXJlX21iIChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQorK3sKKysgIHNpemVfdCBtYmxlbmd0aCwgbGVuOworKyAgbGVuID0gc3RybGVuIChhKTsgLyogb2theSBmb3IgVVRGLTggKi8KKysgIHdoaWxlICgqYSAmJiBpc21iYmxhbmsgKGEsIGxlbiA+IE1CX0NVUl9NQVggPyBNQl9DVVJfTUFYIDogbGVuLCAmbWJsZW5ndGgpKQorKyAgICB7CisrICAgICAgYSArPSBtYmxlbmd0aDsKKysgICAgICBsZW4gLT0gbWJsZW5ndGg7CisrICAgIH0KKysgIGxlbiA9IHN0cmxlbiAoYik7IC8qIG9rYXkgZm9yIFVURi04ICovCisrICB3aGlsZSAoKmIgJiYgaXNtYmJsYW5rIChiLCBsZW4gPiBNQl9DVVJfTUFYID8gTUJfQ1VSX01BWCA6IGxlbiwgJm1ibGVuZ3RoKSkKKysgICAgYiArPSBtYmxlbmd0aDsKKysKKysgIHJldHVybiBzdHJudW1jbXAgKGEsIGIsIGRlY2ltYWxfcG9pbnQsIHRob3VzYW5kc19zZXApOworK30KKysjZW5kaWYgLyogSEFWX0VNQlJUT1dDICovCisrCisgc3RhdGljIGludAorIGdlbmVyYWxfbnVtY29tcGFyZSAoY29uc3QgY2hhciAqc2EsIGNvbnN0IGNoYXIgKnNiKQorIHsKK0BAIC0xNTQzLDcgKzE4NjUsNyBAQAorICAgIFJldHVybiAwIGlmIHRoZSBuYW1lIGluIFMgaXMgbm90IHJlY29nbml6ZWQuICAqLworIAorIHN0YXRpYyBpbnQKKy1nZXRtb250aCAoY2hhciBjb25zdCAqbW9udGgsIHNpemVfdCBsZW4pCisrZ2V0bW9udGhfdW5pIChjaGFyIGNvbnN0ICptb250aCwgc2l6ZV90IGxlbikKKyB7CisgICBzaXplX3QgbG8gPSAwOworICAgc2l6ZV90IGhpID0gTU9OVEhTX1BFUl9ZRUFSOworQEAgLTE2OTgsMTEgKzIwMjAsNzkgQEAKKyAgIHJldHVybiBkaWZmOworIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2dldG1vbnRoX21iIChjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQorK3sKKysgIGNoYXIgKm1vbnRoOworKyAgcmVnaXN0ZXIgc2l6ZV90IGk7CisrICByZWdpc3RlciBpbnQgbG8gPSAwLCBoaSA9IE1PTlRIU19QRVJfWUVBUiwgcmVzdWx0OworKyAgY2hhciAqdG1wOworKyAgc2l6ZV90IHdjbGVuZ3RoLCBtYmxlbmd0aDsKKysgIGNvbnN0IGNoYXIgKipwcDsKKysgIGNvbnN0IHdjaGFyX3QgKip3cHA7CisrICB3Y2hhcl90ICptb250aF93Y3M7CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrICB3aGlsZSAobGVuID4gMCAmJiBpc21iYmxhbmsgKHMsIGxlbiwgJm1ibGVuZ3RoKSkKKysgICAgeworKyAgICAgIHMgKz0gbWJsZW5ndGg7CisrICAgICAgbGVuIC09IG1ibGVuZ3RoOworKyAgICB9CisrCisrICBpZiAobGVuID09IDApCisrICAgIHJldHVybiAwOworKworKyAgbW9udGggPSAoY2hhciAqKSBhbGxvY2EgKGxlbiArIDEpOworKworKyAgdG1wID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxKTsKKysgIG1lbWNweSAodG1wLCBzLCBsZW4pOworKyAgdG1wW2xlbl0gPSAnXDAnOworKyAgcHAgPSAoY29uc3QgY2hhciAqKikmdG1wOworKyAgbW9udGhfd2NzID0gKHdjaGFyX3QgKikgYWxsb2NhICgobGVuICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICB3Y2xlbmd0aCA9IG1ic3J0b3djcyAobW9udGhfd2NzLCBwcCwgbGVuICsgMSwgJnN0YXRlKTsKKysgIGFzc2VydCAod2NsZW5ndGggIT0gKHNpemVfdCktMSAmJiAqcHAgPT0gTlVMTCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgd2NsZW5ndGg7IGkrKykKKysgICAgeworKyAgICAgIG1vbnRoX3djc1tpXSA9IHRvd3VwcGVyKG1vbnRoX3djc1tpXSk7CisrICAgICAgaWYgKGlzd2JsYW5rIChtb250aF93Y3NbaV0pKQorKwl7CisrCSAgbW9udGhfd2NzW2ldID0gTCdcMCc7CisrCSAgYnJlYWs7CisrCX0KKysgICAgfQorKworKyAgd3BwID0gKGNvbnN0IHdjaGFyX3QgKiopJm1vbnRoX3djczsKKysKKysgIG1ibGVuZ3RoID0gd2NzcnRvbWJzIChtb250aCwgd3BwLCBsZW4gKyAxLCAmc3RhdGUpOworKyAgYXNzZXJ0IChtYmxlbmd0aCAhPSAoLTEpICYmICp3cHAgPT0gTlVMTCk7CisrCisrICBkbworKyAgICB7CisrICAgICAgaW50IGl4ID0gKGxvICsgaGkpIC8gMjsKKysKKysgICAgICBpZiAoc3RybmNtcCAobW9udGgsIG1vbnRodGFiW2l4XS5uYW1lLCBzdHJsZW4gKG1vbnRodGFiW2l4XS5uYW1lKSkgPCAwKQorKwloaSA9IGl4OworKyAgICAgIGVsc2UKKysJbG8gPSBpeDsKKysgICAgfQorKyAgd2hpbGUgKGhpIC0gbG8gPiAxKTsKKysKKysgIHJlc3VsdCA9ICghc3RybmNtcCAobW9udGgsIG1vbnRodGFiW2xvXS5uYW1lLCBzdHJsZW4gKG1vbnRodGFiW2xvXS5uYW1lKSkKKysgICAgICA/IG1vbnRodGFiW2xvXS52YWwgOiAwKTsKKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyNlbmRpZgorKworIC8qIENvbXBhcmUgdHdvIGxpbmVzIEEgYW5kIEIgdHJ5aW5nIGV2ZXJ5IGtleSBpbiBzZXF1ZW5jZSB1bnRpbCB0aGVyZQorICAgIGFyZSBubyBtb3JlIGtleXMgb3IgYSBkaWZmZXJlbmNlIGlzIGZvdW5kLiAqLworIAorIHN0YXRpYyBpbnQKKy1rZXljb21wYXJlIChjb25zdCBzdHJ1Y3QgbGluZSAqYSwgY29uc3Qgc3RydWN0IGxpbmUgKmIpCisra2V5Y29tcGFyZV91bmkgKGNvbnN0IHN0cnVjdCBsaW5lICphLCBjb25zdCBzdHJ1Y3QgbGluZSAqYikKKyB7CisgICBzdHJ1Y3Qga2V5ZmllbGQgY29uc3QgKmtleSA9IGtleWxpc3Q7CisgCitAQCAtMTg3NSw2ICsyMjY1LDE3OSBAQAorICAgcmV0dXJuIGtleS0+cmV2ZXJzZSA/IC1kaWZmIDogZGlmZjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytrZXljb21wYXJlX21iIChjb25zdCBzdHJ1Y3QgbGluZSAqYSwgY29uc3Qgc3RydWN0IGxpbmUgKmIpCisreworKyAgc3RydWN0IGtleWZpZWxkICprZXkgPSBrZXlsaXN0OworKworKyAgLyogRm9yIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgdGhlIGtleSBwb3NpdGlvbnMgaGF2ZSBiZWVuCisrICAgICBwcmVjb21wdXRlZCBmb3IgdXMuICovCisrICBjaGFyICp0ZXh0YSA9IGEtPmtleWJlZzsKKysgIGNoYXIgKnRleHRiID0gYi0+a2V5YmVnOworKyAgY2hhciAqbGltYSA9IGEtPmtleWxpbTsKKysgIGNoYXIgKmxpbWIgPSBiLT5rZXlsaW07CisrCisrICBzaXplX3QgbWJsZW5ndGhfYSwgbWJsZW5ndGhfYjsKKysgIHdjaGFyX3Qgd2NfYSwgd2NfYjsKKysgIG1ic3RhdGVfdCBzdGF0ZV9hLCBzdGF0ZV9iOworKworKyAgaW50IGRpZmY7CisrCisrICBtZW1zZXQgKCZzdGF0ZV9hLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrICBtZW1zZXQgKCZzdGF0ZV9iLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBmb3IgKDs7KQorKyAgICB7CisrICAgICAgdW5zaWduZWQgY2hhciAqdHJhbnNsYXRlID0gKHVuc2lnbmVkIGNoYXIgKikga2V5LT50cmFuc2xhdGU7CisrICAgICAgYm9vbCBjb25zdCAqaWdub3JlID0ga2V5LT5pZ25vcmU7CisrCisrICAgICAgLyogRmluZCB0aGUgbGVuZ3Rocy4gKi8KKysgICAgICBzaXplX3QgbGVuYSA9IGxpbWEgPD0gdGV4dGEgPyAwIDogbGltYSAtIHRleHRhOworKyAgICAgIHNpemVfdCBsZW5iID0gbGltYiA8PSB0ZXh0YiA/IDAgOiBsaW1iIC0gdGV4dGI7CisrCisrICAgICAgLyogQWN0dWFsbHkgY29tcGFyZSB0aGUgZmllbGRzLiAqLworKyAgICAgIGlmIChrZXktPnJhbmRvbSkKKysgICAgICAgIGRpZmYgPSBjb21wYXJlX3JhbmRvbSAodGV4dGEsIGxlbmEsIHRleHRiLCBsZW5iKTsKKysgICAgICBlbHNlIGlmIChrZXktPm51bWVyaWMgfCBrZXktPmdlbmVyYWxfbnVtZXJpYykKKysJeworKwkgIGNoYXIgc2F2ZWEgPSAqbGltYSwgc2F2ZWIgPSAqbGltYjsKKysKKysJICAqbGltYSA9ICpsaW1iID0gJ1wwJzsKKysJICBpZiAoZm9yY2VfZ2VuZXJhbF9udW1jb21wYXJlKQorKwkgICAgZGlmZiA9IGdlbmVyYWxfbnVtY29tcGFyZSAodGV4dGEsIHRleHRiKTsKKysJICBlbHNlCisrCSAgICBkaWZmID0gKChrZXktPm51bWVyaWMgPyBudW1jb21wYXJlIDogZ2VuZXJhbF9udW1jb21wYXJlKQorKwkJKHRleHRhLCB0ZXh0YikpOworKwkgICpsaW1hID0gc2F2ZWEsICpsaW1iID0gc2F2ZWI7CisrCX0KKysgICAgICBlbHNlIGlmIChrZXktPm1vbnRoKQorKwlkaWZmID0gZ2V0bW9udGggKHRleHRhLCBsZW5hKSAtIGdldG1vbnRoICh0ZXh0YiwgbGVuYik7CisrICAgICAgZWxzZQorKwl7CisrCSAgaWYgKGlnbm9yZSB8fCB0cmFuc2xhdGUpCisrCSAgICB7CisrCSAgICAgIGNoYXIgKmNvcHlfYSA9IChjaGFyICopIGFsbG9jYSAobGVuYSArIDEgKyBsZW5iICsgMSk7CisrCSAgICAgIGNoYXIgKmNvcHlfYiA9IGNvcHlfYSArIGxlbmEgKyAxOworKwkgICAgICBzaXplX3QgbmV3X2xlbl9hLCBuZXdfbGVuX2I7CisrCSAgICAgIHNpemVfdCBpLCBqOworKworKwkgICAgICAvKiBJZ25vcmUgYW5kL29yIHRyYW5zbGF0ZSBjaGFycyBiZWZvcmUgY29tcGFyaW5nLiAgKi8KKysjIGRlZmluZSBJR05PUkVfQ0hBUlMoTkVXX0xFTiwgTEVOLCBURVhULCBDT1BZLCBXQywgTUJMRU5HVEgsIFNUQVRFKQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICB3Y2hhcl90IHV3YzsJCQkJCQkJXAorKyAgICAgIGNoYXIgbWJjW01CX0xFTl9NQVhdOwkJCQkJCVwKKysgICAgICBtYnN0YXRlX3Qgc3RhdGVfd2M7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBmb3IgKE5FV19MRU4gPSBpID0gMDsgaSA8IExFTjspCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJICBtYnN0YXRlX3Qgc3RhdGVfYmFrOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgc3RhdGVfYmFrID0gU1RBVEU7CQkJCQkJXAorKwkgIE1CTEVOR1RIID0gbWJydG93YyAoJldDLCBURVhUICsgaSwgTEVOIC0gaSwgJlNUQVRFKTsJCVwKKysJCQkJCQkJCQlcCisrCSAgaWYgKE1CTEVOR1RIID09IChzaXplX3QpLTIgfHwgTUJMRU5HVEggPT0gKHNpemVfdCktMQkJXAorKwkgICAgICB8fCBNQkxFTkdUSCA9PSAwKQkJCQkJCVwKKysJICAgIHsJCQkJCQkJCVwKKysJICAgICAgaWYgKE1CTEVOR1RIID09IChzaXplX3QpLTIgfHwgTUJMRU5HVEggPT0gKHNpemVfdCktMSkJXAorKwkJU1RBVEUgPSBzdGF0ZV9iYWs7CQkJCQlcCisrCSAgICAgIGlmICghaWdub3JlKQkJCQkJCVwKKysJCUNPUFlbTkVXX0xFTisrXSA9IFRFWFRbaSsrXTsJCQkJXAorKwkgICAgICBjb250aW51ZTsJCQkJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICBpZiAoaWdub3JlKQkJCQkJCQlcCisrCSAgICB7CQkJCQkJCQlcCisrCSAgICAgIGlmICgoaWdub3JlID09IG5vbnByaW50aW5nICYmICFpc3dwcmludCAoV0MpKQkJXAorKwkJICAgfHwgKGlnbm9yZSA9PSBub25kaWN0aW9uYXJ5CQkJCVwKKysJCSAgICAgICAmJiAhaXN3YWxudW0gKFdDKSAmJiAhaXN3YmxhbmsgKFdDKSkpCQlcCisrCQl7CQkJCQkJCVwKKysJCSAgaSArPSBNQkxFTkdUSDsJCQkJCVwKKysJCSAgY29udGludWU7CQkJCQkJXAorKwkJfQkJCQkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgIGlmICh0cmFuc2xhdGUpCQkJCQkJXAorKwkgICAgewkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICAgICAgdXdjID0gdG93dXBwZXIoV0MpOwkJCQkJXAorKwkgICAgICBpZiAoV0MgPT0gdXdjKQkJCQkJCVwKKysJCXsJCQkJCQkJXAorKwkJICBtZW1jcHkgKG1iYywgVEVYVCArIGksIE1CTEVOR1RIKTsJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQl9CQkJCQkJCVwKKysJICAgICAgZWxzZQkJCQkJCQlcCisrCQl7CQkJCQkJCVwKKysJCSAgaSArPSBNQkxFTkdUSDsJCQkJCVwKKysJCSAgV0MgPSB1d2M7CQkJCQkJXAorKwkJICBtZW1zZXQgKCZzdGF0ZV93YywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsJCVwKKysJCQkJCQkJCQlcCisrCQkgIE1CTEVOR1RIID0gd2NydG9tYiAobWJjLCBXQywgJnN0YXRlX3djKTsJCVwKKysJCSAgYXNzZXJ0IChNQkxFTkdUSCAhPSAoc2l6ZV90KS0xICYmIE1CTEVOR1RIICE9IDApOwlcCisrCQl9CQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgICAgIGZvciAoaiA9IDA7IGogPCBNQkxFTkdUSDsgaisrKQkJCQlcCisrCQlDT1BZW05FV19MRU4rK10gPSBtYmNbal07CQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJICBlbHNlCQkJCQkJCQlcCisrCSAgICBmb3IgKGogPSAwOyBqIDwgTUJMRU5HVEg7IGorKykJCQkJXAorKwkgICAgICBDT1BZW05FV19MRU4rK10gPSBURVhUW2krK107CQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICAgIENPUFlbTkVXX0xFTl0gPSAnXDAnOwkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKwkgICAgICBJR05PUkVfQ0hBUlMgKG5ld19sZW5fYSwgbGVuYSwgdGV4dGEsIGNvcHlfYSwKKysJCQkgICAgd2NfYSwgbWJsZW5ndGhfYSwgc3RhdGVfYSk7CisrCSAgICAgIElHTk9SRV9DSEFSUyAobmV3X2xlbl9iLCBsZW5iLCB0ZXh0YiwgY29weV9iLAorKwkJCSAgICB3Y19iLCBtYmxlbmd0aF9iLCBzdGF0ZV9iKTsKKysJICAgICAgZGlmZiA9IHhtZW1jb2xsIChjb3B5X2EsIG5ld19sZW5fYSwgY29weV9iLCBuZXdfbGVuX2IpOworKwkgICAgfQorKwkgIGVsc2UgaWYgKGxlbmEgPT0gMCkKKysJICAgIGRpZmYgPSAtIE5PTlpFUk8gKGxlbmIpOworKwkgIGVsc2UgaWYgKGxlbmIgPT0gMCkKKysJICAgIGdvdG8gZ3JlYXRlcjsKKysJICBlbHNlCisrCSAgICBkaWZmID0geG1lbWNvbGwgKHRleHRhLCBsZW5hLCB0ZXh0YiwgbGVuYik7CisrCX0KKysKKysgICAgICBpZiAoZGlmZikKKysJZ290byBub3RfZXF1YWw7CisrCisrICAgICAga2V5ID0ga2V5LT5uZXh0OworKyAgICAgIGlmICghIGtleSkKKysJYnJlYWs7CisrCisrICAgICAgLyogRmluZCB0aGUgYmVnaW5uaW5nIGFuZCBsaW1pdCBvZiB0aGUgbmV4dCBmaWVsZC4gICovCisrICAgICAgaWYgKGtleS0+ZXdvcmQgIT0gLTEpCisrCWxpbWEgPSBsaW1maWVsZCAoYSwga2V5KSwgbGltYiA9IGxpbWZpZWxkIChiLCBrZXkpOworKyAgICAgIGVsc2UKKysJbGltYSA9IGEtPnRleHQgKyBhLT5sZW5ndGggLSAxLCBsaW1iID0gYi0+dGV4dCArIGItPmxlbmd0aCAtIDE7CisrCisrICAgICAgaWYgKGtleS0+c3dvcmQgIT0gLTEpCisrCXRleHRhID0gYmVnZmllbGQgKGEsIGtleSksIHRleHRiID0gYmVnZmllbGQgKGIsIGtleSk7CisrICAgICAgZWxzZQorKwl7CisrCSAgdGV4dGEgPSBhLT50ZXh0LCB0ZXh0YiA9IGItPnRleHQ7CisrCSAgaWYgKGtleS0+c2tpcHNibGFua3MpCisrCSAgICB7CisrCSAgICAgIHdoaWxlICh0ZXh0YSA8IGxpbWEgJiYgaXNtYmJsYW5rICh0ZXh0YSwgbGltYSAtIHRleHRhLCAmbWJsZW5ndGhfYSkpCisrCQl0ZXh0YSArPSBtYmxlbmd0aF9hOworKwkgICAgICB3aGlsZSAodGV4dGIgPCBsaW1iICYmIGlzbWJibGFuayAodGV4dGIsIGxpbWIgLSB0ZXh0YiwgJm1ibGVuZ3RoX2IpKQorKwkJdGV4dGIgKz0gbWJsZW5ndGhfYjsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gMDsKKysKKytncmVhdGVyOgorKyAgZGlmZiA9IDE7Cisrbm90X2VxdWFsOgorKyAgcmV0dXJuIGtleS0+cmV2ZXJzZSA/IC1kaWZmIDogZGlmZjsKKyt9CisrI2VuZGlmCisrCisgLyogQ29tcGFyZSB0d28gbGluZXMgQSBhbmQgQiwgcmV0dXJuaW5nIG5lZ2F0aXZlLCB6ZXJvLCBvciBwb3NpdGl2ZQorICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIEEgY29tcGFyZXMgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIEIuICovCisKK0BAIC0yNzQ0LDcgKzMzMDUsNyBAQAorICAgaW5pdGlhbGl6ZV9leGl0X2ZhaWx1cmUgKFNPUlRfRkFJTFVSRSk7CisgCisgICBoYXJkX0xDX0NPTExBVEUgPSBoYXJkX2xvY2FsZSAoTENfQ09MTEFURSk7CistI2lmIEhBVkVfTkxfTEFOR0lORk8KKysjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICBoYXJkX0xDX1RJTUUgPSBoYXJkX2xvY2FsZSAoTENfVElNRSk7CisgI2VuZGlmCisgCitAQCAtMjc2NSw2ICszMzI2LDI3IEBACisgICAgICAgdGhvdXNhbmRzX3NlcCA9IC0xOworICAgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgeworKyAgICAgIGluaXR0YWJsZXMgPSBpbml0dGFibGVzX21iOworKyAgICAgIGJlZ2ZpZWxkID0gYmVnZmllbGRfbWI7CisrICAgICAgbGltZmllbGQgPSBsaW1maWVsZF9tYjsKKysgICAgICBnZXRtb250aCA9IGdldG1vbnRoX21iOworKyAgICAgIGtleWNvbXBhcmUgPSBrZXljb21wYXJlX21iOworKyAgICAgIG51bWNvbXBhcmUgPSBudW1jb21wYXJlX21iOworKyAgICB9CisrICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpbml0dGFibGVzID0gaW5pdHRhYmxlc191bmk7CisrICAgICAgYmVnZmllbGQgPSBiZWdmaWVsZF91bmk7CisrICAgICAgbGltZmllbGQgPSBsaW1maWVsZF91bmk7CisrICAgICAgZ2V0bW9udGggPSBnZXRtb250aF91bmk7CisrICAgICAga2V5Y29tcGFyZSA9IGtleWNvbXBhcmVfdW5pOworKyAgICAgIG51bWNvbXBhcmUgPSBudW1jb21wYXJlX3VuaTsKKysgICAgfQorKworICAgaGF2ZV9yZWFkX3N0ZGluID0gZmFsc2U7CisgICBpbml0dGFibGVzICgpOworIAorQEAgLTMwMTUsMTMgKzM1OTcsMzUgQEAKKyAKKyAJY2FzZSAndCc6CisgCSAgeworLQkgICAgY2hhciBuZXd0YWIgPSBvcHRhcmdbMF07CistCSAgICBpZiAoISBuZXd0YWIpCisrCSAgICBjaGFyIG5ld3RhYltNQl9MRU5fTUFYICsgMV07CisrCSAgICBzaXplX3QgbmV3dGFiX2xlbmd0aCA9IDE7CisrCSAgICBzdHJuY3B5IChuZXd0YWIsIG9wdGFyZywgTUJfTEVOX01BWCk7CisrCSAgICBpZiAoISBuZXd0YWJbMF0pCisgCSAgICAgIGVycm9yIChTT1JUX0ZBSUxVUkUsIDAsIF8oImVtcHR5IHRhYiIpKTsKKy0JICAgIGlmIChvcHRhcmdbMV0pCisrI2lmIEhBVkVfTUJSVE9XQworKwkgICAgaWYgKE1CX0NVUl9NQVggPiAxKQorKwkgICAgICB7CisrCQl3Y2hhcl90IHdjOworKwkJbWJzdGF0ZV90IHN0YXRlOworKwkJc2l6ZV90IGk7CisrCisrCQltZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCW5ld3RhYl9sZW5ndGggPSBtYnJ0b3djICgmd2MsIG5ld3RhYiwgc3RybmxlbiAobmV3dGFiLAorKwkJCQkJCQkgICAgICAgTUJfTEVOX01BWCksCisrCQkJCQkgJnN0YXRlKTsKKysJCXN3aXRjaCAobmV3dGFiX2xlbmd0aCkKKysJCSAgeworKwkJICBjYXNlIChzaXplX3QpIC0xOgorKwkJICBjYXNlIChzaXplX3QpIC0yOgorKwkJICBjYXNlIDA6CisrCQkgICAgbmV3dGFiX2xlbmd0aCA9IDE7CisrCQkgIH0KKysJICAgICAgfQorKyNlbmRpZgorKwkgICAgaWYgKG5ld3RhYl9sZW5ndGggPT0gMSAmJiBvcHRhcmdbMV0pCisgCSAgICAgIHsKKyAJCWlmIChTVFJFUSAob3B0YXJnLCAiXFwwIikpCistCQkgIG5ld3RhYiA9ICdcMCc7CisrCQkgIG5ld3RhYlswXSA9ICdcMCc7CisgCQllbHNlCisgCQkgIHsKKyAJCSAgICAvKiBQcm92b2tlIHdpdGggYHNvcnQgLXR4eCcuICBDb21wbGFpbiBhYm91dAorQEAgLTMwMzIsOSArMzYzNiwxMiBAQAorIAkJCSAgIHF1b3RlIChvcHRhcmcpKTsKKyAJCSAgfQorIAkgICAgICB9CistCSAgICBpZiAodGFiICE9IFRBQl9ERUZBVUxUICYmIHRhYiAhPSBuZXd0YWIpCisrCSAgICBpZiAodGFiX2xlbmd0aAorKwkJJiYgKHRhYl9sZW5ndGggIT0gbmV3dGFiX2xlbmd0aAorKwkJICAgIHx8IG1lbWNtcCAodGFiLCBuZXd0YWIsIHRhYl9sZW5ndGgpICE9IDApKQorIAkgICAgICBlcnJvciAoU09SVF9GQUlMVVJFLCAwLCBfKCJpbmNvbXBhdGlibGUgdGFicyIpKTsKKy0JICAgIHRhYiA9IG5ld3RhYjsKKysJICAgIG1lbWNweSAodGFiLCBuZXd0YWIsIG5ld3RhYl9sZW5ndGgpOworKwkgICAgdGFiX2xlbmd0aCA9IG5ld3RhYl9sZW5ndGg7CisgCSAgfQorIAkgIGJyZWFrOworIAorLS0tIGNvcmV1dGlscy02LjgrL3NyYy91bmV4cGFuZC5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvdW5leHBhbmQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTM5LDExICszOSwyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCB3Y3dpZHRoKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJuZHVwLmgiCisgCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgICAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgInVuZXhwYW5kIgorIAorQEAgLTExMCw2ICsxMjcsMjA4IEBACisgICB7TlVMTCwgMCwgTlVMTCwgMH0KKyB9OworIAorK3N0YXRpYyBGSUxFICpuZXh0X2ZpbGUgKEZJTEUgKmZwKTsKKysKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKyt1bmV4cGFuZF9tdWx0aWJ5dGUgKHZvaWQpCisreworKyAgRklMRSAqZnA7CQkJLyogSW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBpbnB1dCBzdHJlYW0uICovCisrICBtYnN0YXRlX3QgaV9zdGF0ZV9iYWs7CS8qIEJhY2sgdXAgdGhlIElfU1RBVEUuICovCisrICBtYnN0YXRlX3Qgb19zdGF0ZTsJCS8qIEN1cnJlbnQgc2hpZnQgc3RhdGUgb2YgdGhlIG91dHB1dCBzdHJlYW0uICovCisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIGNoYXIgKmJ1ZnBvczsJCQkvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgc2l6ZV90IGJ1ZmxlbiA9IDA7CQkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIHdpbnRfdCB3YzsJCQkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJCS8qIFRoZSBieXRlIHNpemUgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyCisrCQkJCSAgIHdoaWNoIHNob3dzIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKworKyAgLyogSW5kZXggaW4gYHRhYl9saXN0JyBvZiBuZXh0IHRhYnN0b3A6ICovCisrICBpbnQgdGFiX2luZGV4ID0gMDsJCS8qIEZvciBjYWxjdWxhdGluZyB3aWR0aCBvZiBwZW5kaW5nIHRhYnMuICovCisrICBpbnQgcHJpbnRfdGFiX2luZGV4ID0gMDsJLyogRm9yIHByaW50aW5nIGFzIG1hbnkgdGFicyBhcyBwb3NzaWJsZS4gKi8KKysgIHVuc2lnbmVkIGludCBjb2x1bW4gPSAwOwkvKiBDb2x1bW4gb24gc2NyZWVuIG9mIG5leHQgY2hhci4gKi8KKysgIGludCBuZXh0X3RhYl9jb2x1bW47CQkvKiBDb2x1bW4gdGhlIG5leHQgdGFiIHN0b3AgaXMgb24uICovCisrICBpbnQgY29udmVydCA9IDE7CQkvKiBJZiBub256ZXJvLCBwZXJmb3JtIHRyYW5zbGF0aW9ucy4gKi8KKysgIHVuc2lnbmVkIGludCBwZW5kaW5nID0gMDsJLyogUGVuZGluZyBjb2x1bW5zIG9mIGJsYW5rcy4gKi8KKysKKysgIGZwID0gbmV4dF9maWxlICgoRklMRSAqKSBOVUxMKTsKKysgIGlmIChmcCA9PSBOVUxMKQorKyAgICByZXR1cm47CisrCisrICBtZW1zZXQgKCZvX3N0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrICBtZW1zZXQgKCZpX3N0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBmb3IgKDs7KQorKyAgICB7CisrICAgICAgaWYgKGJ1ZmxlbiA8IE1CX0xFTl9NQVggJiYgIWZlb2YoZnApICYmICFmZXJyb3IoZnApKQorKwl7CisrCSAgbWVtbW92ZSAoYnVmLCBidWZwb3MsIGJ1Zmxlbik7CisrCSAgYnVmbGVuICs9IGZyZWFkIChidWYgKyBidWZsZW4sIHNpemVvZihjaGFyKSwgQlVGU0laLCBmcCk7CisrCSAgYnVmcG9zID0gYnVmOworKwl9CisrCisrICAgICAgLyogR2V0IGEgd2lkZSBjaGFyYWN0ZXIuICovCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCXsKKysJICBtYmxlbmd0aCA9IDE7CisrCSAgd2MgPSBXRU9GOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaV9zdGF0ZV9iYWsgPSBpX3N0YXRlOworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoKHdjaGFyX3QgKikmd2MsIGJ1ZnBvcywgYnVmbGVuLCAmaV9zdGF0ZSk7CisrCX0KKysKKysgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwl7CisrCSAgaV9zdGF0ZSA9IGlfc3RhdGVfYmFrOworKwkgIHdjID0gTCdcMCc7CisrCX0KKysKKysgICAgICBpZiAod2MgPT0gTCcgJyAmJiBjb252ZXJ0ICYmIGNvbHVtbiA8IElOVF9NQVgpCisrCXsKKysJICArK3BlbmRpbmc7CisrCSAgKytjb2x1bW47CisrCX0KKysgICAgICBlbHNlIGlmICh3YyA9PSBMJ1x0JyAmJiBjb252ZXJ0KQorKwl7CisrCSAgaWYgKHRhYl9zaXplID09IDApCisrCSAgICB7CisrCSAgICAgIC8qIERvIG5vdCBsZXQgdGFiX2luZGV4ID09IGZpcnN0X2ZyZWVfdGFiOworKwkJIHN0b3Agd2hlbiBpdCBpcyAxIGxlc3MuICovCisrCSAgICAgIHdoaWxlICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEKKysJCSAgJiYgY29sdW1uID49IHRhYl9saXN0W3RhYl9pbmRleF0pCisrCQl0YWJfaW5kZXgrKzsKKysJICAgICAgbmV4dF90YWJfY29sdW1uID0gdGFiX2xpc3RbdGFiX2luZGV4XTsKKysJICAgICAgaWYgKHRhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMSkKKysJCXRhYl9pbmRleCsrOworKwkgICAgICBpZiAoY29sdW1uID49IG5leHRfdGFiX2NvbHVtbikKKysJCXsKKysJCSAgY29udmVydCA9IDA7CS8qIFJhbiBvdXQgb2YgdGFiIHN0b3BzLiAqLworKwkJICBnb3RvIGZsdXNoX3BlbmRfbWI7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBuZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyB0YWJfc2l6ZSAtIGNvbHVtbiAlIHRhYl9zaXplOworKwkgICAgfQorKwkgIHBlbmRpbmcgKz0gbmV4dF90YWJfY29sdW1uIC0gY29sdW1uOworKwkgIGNvbHVtbiA9IG5leHRfdGFiX2NvbHVtbjsKKysJfQorKyAgICAgIGVsc2UKKysJeworK2ZsdXNoX3BlbmRfbWI6CisrCSAgLyogRmx1c2ggcGVuZGluZyBzcGFjZXMuICBQcmludCBhcyBtYW55IHRhYnMgYXMgcG9zc2libGUsCisrCSAgICAgdGhlbiBwcmludCB0aGUgcmVzdCBhcyBzcGFjZXMuICovCisrCSAgaWYgKHBlbmRpbmcgPT0gMSkKKysJICAgIHsKKysJICAgICAgcHV0Y2hhciAoJyAnKTsKKysJICAgICAgcGVuZGluZyA9IDA7CisrCSAgICB9CisrCSAgY29sdW1uIC09IHBlbmRpbmc7CisrCSAgd2hpbGUgKHBlbmRpbmcgPiAwKQorKwkgICAgeworKwkgICAgICBpZiAodGFiX3NpemUgPT0gMCkKKysJCXsKKysJCSAgLyogRG8gbm90IGxldCBwcmludF90YWJfaW5kZXggPT0gZmlyc3RfZnJlZV90YWI7CisrCQkgICAgIHN0b3Agd2hlbiBpdCBpcyAxIGxlc3MuICovCisrCQkgIHdoaWxlIChwcmludF90YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEKKysJCSAgICAgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFtwcmludF90YWJfaW5kZXhdKQorKwkJICAgIHByaW50X3RhYl9pbmRleCsrOworKwkJICBuZXh0X3RhYl9jb2x1bW4gPSB0YWJfbGlzdFtwcmludF90YWJfaW5kZXhdOworKwkJICBpZiAocHJpbnRfdGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxKQorKwkJICAgIHByaW50X3RhYl9pbmRleCsrOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG5leHRfdGFiX2NvbHVtbiA9CisrCQkgICAgY29sdW1uICsgdGFiX3NpemUgLSBjb2x1bW4gJSB0YWJfc2l6ZTsKKysJCX0KKysJICAgICAgaWYgKG5leHRfdGFiX2NvbHVtbiAtIGNvbHVtbiA8PSBwZW5kaW5nKQorKwkJeworKwkJICBwdXRjaGFyICgnXHQnKTsKKysJCSAgcGVuZGluZyAtPSBuZXh0X3RhYl9jb2x1bW4gLSBjb2x1bW47CisrCQkgIGNvbHVtbiA9IG5leHRfdGFiX2NvbHVtbjsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICAtLXByaW50X3RhYl9pbmRleDsKKysJCSAgY29sdW1uICs9IHBlbmRpbmc7CisrCQkgIHdoaWxlIChwZW5kaW5nICE9IDApCisrCQkgICAgeworKwkJICAgICAgcHV0Y2hhciAoJyAnKTsKKysJCSAgICAgIHBlbmRpbmctLTsKKysJCSAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHdjID09IFdFT0YpCisrCSAgICB7CisrCSAgICAgIGZwID0gbmV4dF9maWxlIChmcCk7CisrCSAgICAgIGlmIChmcCA9PSBOVUxMKQorKwkJYnJlYWs7ICAgICAgICAgIC8qIE5vIG1vcmUgZmlsZXMuICovCisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBjb250aW51ZTsKKysJCX0KKysJICAgIH0KKysKKysJICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkgICAgeworKwkgICAgICBpZiAoY29udmVydCkKKysJCXsKKysJCSAgKytjb2x1bW47CisrCQkgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQkgICAgY29udmVydCA9IDA7CisrCQl9CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgcHV0Y2hhciAoYnVmWzBdKTsKKysJICAgIH0KKysJICBlbHNlIGlmIChtYmxlbmd0aCA9PSAwKQorKwkgICAgeworKwkgICAgICBpZiAoY29udmVydCAmJiBjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQljb252ZXJ0ID0gMDsKKysJICAgICAgbWJsZW5ndGggPSAxOworKwkgICAgICBwdXRjaGFyICgnXDAnKTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGlmIChjb252ZXJ0KQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgeworKwkJICAgICAgaWYgKGNvbHVtbiA+IDApCisrCQkJLS1jb2x1bW47CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgaW50IHdpZHRoOyAgICAgICAgICAgIC8qIFRoZSB3aWR0aCBvZiBXQy4gKi8KKysKKysJCSAgICAgIHdpZHRoID0gd2N3aWR0aCAod2MpOworKwkJICAgICAgY29sdW1uICs9ICh3aWR0aCA+IDApID8gd2lkdGggOiAwOworKwkJICAgICAgaWYgKGNvbnZlcnRfZW50aXJlX2xpbmUgPT0gMCkKKysJCQljb252ZXJ0ID0gMDsKKysJCSAgICB9CisrCQl9CisrCisrCSAgICAgIGlmICh3YyA9PSBMJ1xuJykKKysJCXsKKysJCSAgdGFiX2luZGV4ID0gcHJpbnRfdGFiX2luZGV4ID0gMDsKKysJCSAgY29sdW1uID0gcGVuZGluZyA9IDA7CisrCQkgIGNvbnZlcnQgPSAxOworKwkJfQorKwkgICAgICBmd3JpdGUgKGJ1ZnBvcywgc2l6ZW9mKGNoYXIpLCBtYmxlbmd0aCwgc3Rkb3V0KTsKKysJICAgIH0KKysJfQorKyAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrICAgIH0KKyt9CisrI2VuZGlmCisrCisrCisgdm9pZAorIHVzYWdlIChpbnQgc3RhdHVzKQorIHsKK0BAIC01MzEsNyArNzUwLDEyIEBACisgCisgICBmaWxlX2xpc3QgPSAob3B0aW5kIDwgYXJnYyA/ICZhcmd2W29wdGluZF0gOiBzdGRpbl9hcmd2KTsKKyAKKy0gIHVuZXhwYW5kICgpOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgdW5leHBhbmRfbXVsdGlieXRlICgpOworKyAgZWxzZQorKyNlbmRpZgorKyAgICB1bmV4cGFuZCAoKTsKKyAKKyAgIGlmIChoYXZlX3JlYWRfc3RkaW4gJiYgZmNsb3NlIChzdGRpbikgIT0gMCkKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sICItIik7CistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3ByLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9wci5jCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMzEzLDYgKzMxMywzMiBAQAorIAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IE1CX0xFTl9NQVguICAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPT0gMQorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBHZXQgTUJfQ1VSX01BWC4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKy8qIFNvbGFyaXMgMi41IGhhcyBhIGJ1ZzogPHdjaGFyLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y3R5cGUuaD4uICAqLworKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCBpc3dwcmludCgpLiAtLSBmb3Igd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIGlzd3ByaW50ICYmICFIQVZFX0lTV1BSSU5UCisrIyBkZWZpbmUgaXN3cHJpbnQod2MpIDEKKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgImhhcmQtbG9jYWxlLmgiCitAQCAtMzI0LDYgKzM1MCwxOCBAQAorICNpbmNsdWRlICJzdHJmdGltZS5oIgorICNpbmNsdWRlICJ4c3RydG9sLmgiCisgCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworKyNpZm5kZWYgSEFWRV9ERUNMX1dDV0lEVEgKKysidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorKyNlbmRpZgorKyNpZiAhSEFWRV9ERUNMX1dDV0lEVEgKKytleHRlcm4gaW50IHdjd2lkdGggKCk7CisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgInByIgorIAorQEAgLTQxNiw3ICs0NTQsMjAgQEAKKyAKKyAjZGVmaW5lIE5VTExDT0wgKENPTFVNTiAqKTAKKyAKKy1zdGF0aWMgaW50IGNoYXJfdG9fY2x1bXAgKGNoYXIgYyk7CisrLyogRnVudGlvbiBwb2ludGVycyB0byBzd2l0Y2ggZnVuY3Rpb25zIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUgb3IgZm9yCisrICAgbXVsdGlieXRlIGxvY2FsZS4gSWYgbXVsdGlieXRlIGZ1bmN0aW9ucyBkbyBub3QgZXhpc3QgaW4geW91ciBzeXN5dGVtLAorKyAgIHRoZXNlIHBvaW50ZXJzIGFsd2F5cyBwb2ludCB0aGUgZnVuY3Rpb24gZm9yIHNpbmdsZSBieXRlIGxvY2FsZS4gKi8KKytzdGF0aWMgdm9pZCAoKnByaW50X2NoYXIpIChjaGFyIGMpOworK3N0YXRpYyBpbnQgKCpjaGFyX3RvX2NsdW1wKSAoY2hhciBjKTsKKysKKysvKiBGdW5jdGlvbnMgZm9yIHNpbmdsZSBieXRlIGxvY2FsZS4gKi8KKytzdGF0aWMgdm9pZCBwcmludF9jaGFyX3NpbmdsZSAoY2hhciBjKTsKKytzdGF0aWMgaW50IGNoYXJfdG9fY2x1bXBfc2luZ2xlIChjaGFyIGMpOworKworKy8qIEZ1bmN0aW9ucyBmb3IgbXVsdGlieXRlIGxvY2FsZS4gKi8KKytzdGF0aWMgdm9pZCBwcmludF9jaGFyX211bHRpIChjaGFyIGMpOworK3N0YXRpYyBpbnQgY2hhcl90b19jbHVtcF9tdWx0aSAoY2hhciBjKTsKKysKKyBzdGF0aWMgYm9vbCByZWFkX2xpbmUgKENPTFVNTiAqcCk7Cisgc3RhdGljIGJvb2wgcHJpbnRfcGFnZSAodm9pZCk7Cisgc3RhdGljIGJvb2wgcHJpbnRfc3RvcmVkIChDT0xVTU4gKnApOworQEAgLTQyNiw2ICs0NzcsNyBAQAorIHN0YXRpYyB2b2lkIHBhZF9hY3Jvc3NfdG8gKGludCBwb3NpdGlvbik7Cisgc3RhdGljIHZvaWQgYWRkX2xpbmVfbnVtYmVyIChDT0xVTU4gKnApOworIHN0YXRpYyB2b2lkIGdldG9wdGFyZyAoY2hhciAqYXJnLCBjaGFyIHN3aXRjaF9jaGFyLCBjaGFyICpjaGFyYWN0ZXIsCisrCQkgICAgICAgaW50ICpjaGFyYWN0ZXJfbGVuZ3RoLCBpbnQgKmNoYXJhY3Rlcl93aWR0aCwKKyAJCSAgICAgICBpbnQgKm51bWJlcik7Cisgdm9pZCB1c2FnZSAoaW50IHN0YXR1cyk7Cisgc3RhdGljIHZvaWQgcHJpbnRfZmlsZXMgKGludCBudW1iZXJfb2ZfZmlsZXMsIGNoYXIgKiphdik7CitAQCAtNDQwLDcgKzQ5Miw2IEBACisgc3RhdGljIHZvaWQgcGFkX2Rvd24gKGludCBsaW5lcyk7Cisgc3RhdGljIHZvaWQgcmVhZF9yZXN0X29mX2xpbmUgKENPTFVNTiAqcCk7Cisgc3RhdGljIHZvaWQgc2tpcF9yZWFkIChDT0xVTU4gKnAsIGludCBjb2x1bW5fbnVtYmVyKTsKKy1zdGF0aWMgdm9pZCBwcmludF9jaGFyIChjaGFyIGMpOworIHN0YXRpYyB2b2lkIGNsZWFudXAgKHZvaWQpOworIHN0YXRpYyB2b2lkIHByaW50X3NlcF9zdHJpbmcgKHZvaWQpOworIHN0YXRpYyB2b2lkIHNlcGFyYXRvcl9zdHJpbmcgKGNvbnN0IGNoYXIgKm9wdGFyZ19TKTsKK0BAIC00NTUsNyArNTA2LDcgQEAKKyAgICB3ZSBzdG9yZSB0aGUgbGVmdG1vc3QgY29sdW1ucyBjb250aWd1b3VzbHkgaW4gYnVmZi4KKyAgICBUbyBwcmludCBhIGxpbmUgZnJvbSBidWZmLCBnZXQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAgICBmcm9tIGxpbmVfdmVjdG9yW2ldLCBhbmQgcHJpbnQgdXAgdG8gbGluZV92ZWN0b3JbaSArIDFdLiAqLworLXN0YXRpYyBjaGFyICpidWZmOworK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpidWZmOworIAorIC8qIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBpbiBidWZmIHdoZXJlIHRoZSBuZXh0IGNoYXJhY3RlcgorICAgIHdpbGwgYmUgc3RvcmVkLiAqLworQEAgLTU1OSw3ICs2MTAsNyBAQAorIHN0YXRpYyBib29sIHVudGFiaWZ5X2lucHV0ID0gZmFsc2U7CisgCisgLyogKC1lKSBUaGUgaW5wdXQgdGFiIGNoYXJhY3Rlci4gKi8KKy1zdGF0aWMgY2hhciBpbnB1dF90YWJfY2hhciA9ICdcdCc7Cisrc3RhdGljIGNoYXIgaW5wdXRfdGFiX2NoYXJbTUJfTEVOX01BWF0gPSAiXHQiOworIAorIC8qICgtZSkgVGFic3RvcHMgYXJlIGF0IGNoYXJzX3Blcl90YWIsIDIqY2hhcnNfcGVyX3RhYiwgMypjaGFyc19wZXJfdGFiLCAuLi4KKyAgICB3aGVyZSB0aGUgbGVmdG1vc3QgY29sdW1uIGlzIDEuICovCitAQCAtNTY5LDcgKzYyMCwxMCBAQAorIHN0YXRpYyBib29sIHRhYmlmeV9vdXRwdXQgPSBmYWxzZTsKKyAKKyAvKiAoLWkpIFRoZSBvdXRwdXQgdGFiIGNoYXJhY3Rlci4gKi8KKy1zdGF0aWMgY2hhciBvdXRwdXRfdGFiX2NoYXIgPSAnXHQnOworK3N0YXRpYyBjaGFyIG91dHB1dF90YWJfY2hhcltNQl9MRU5fTUFYXSA9ICJcdCI7CisrCisrLyogKC1pKSBUaGUgYnl0ZSBsZW5ndGggb2Ygb3V0cHV0IHRhYiBjaGFyYWN0ZXIuICovCisrc3RhdGljIGludCBvdXRwdXRfdGFiX2NoYXJfbGVuZ3RoID0gMTsKKyAKKyAvKiAoLWkpIFRoZSB3aWR0aCBvZiB0aGUgb3V0cHV0IHRhYi4gKi8KKyBzdGF0aWMgaW50IGNoYXJzX3Blcl9vdXRwdXRfdGFiID0gODsKK0BAIC02NDMsNyArNjk3LDEzIEBACisgc3RhdGljIGJvb2wgbnVtYmVyZWRfbGluZXMgPSBmYWxzZTsKKyAKKyAvKiAoLW4pIENoYXJhY3RlciB3aGljaCBmb2xsb3dzIGVhY2ggbGluZSBudW1iZXIuICovCistc3RhdGljIGNoYXIgbnVtYmVyX3NlcGFyYXRvciA9ICdcdCc7Cisrc3RhdGljIGNoYXIgbnVtYmVyX3NlcGFyYXRvcltNQl9MRU5fTUFYXSA9ICJcdCI7CisrCisrLyogKC1uKSBUaGUgYnl0ZSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlciB3aGljaCBmb2xsb3dzIGVhY2ggbGluZSBudW1iZXIuICovCisrc3RhdGljIGludCBudW1iZXJfc2VwYXJhdG9yX2xlbmd0aCA9IDE7CisrCisrLyogKC1uKSBUaGUgY2hhcmFjdGVyIHdpZHRoIG9mIHRoZSBjaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworK3N0YXRpYyBpbnQgbnVtYmVyX3NlcGFyYXRvcl93aWR0aCA9IDA7CisgCisgLyogKC1uKSBsaW5lIGNvdW50aW5nIHN0YXJ0cyB3aXRoIDFzdCBsaW5lIG9mIGlucHV0IGZpbGUgKG5vdCB3aXRoIDFzdAorICAgIGxpbmUgb2YgMXN0IHBhZ2UgcHJpbnRlZCkuICovCitAQCAtNjk2LDYgKzc1Niw3IEBACisgICAgLWF8Q09MVU1OfC1tIGlzIGEgYHNwYWNlJyBhbmQgd2l0aCB0aGUgLUogb3B0aW9uIGEgYHRhYicuICovCisgc3RhdGljIGNoYXIgKmNvbF9zZXBfc3RyaW5nID0gIiI7Cisgc3RhdGljIGludCBjb2xfc2VwX2xlbmd0aCA9IDA7Cisrc3RhdGljIGludCBjb2xfc2VwX3dpZHRoID0gMDsKKyBzdGF0aWMgY2hhciAqY29sdW1uX3NlcGFyYXRvciA9ICIgIjsKKyBzdGF0aWMgY2hhciAqbGluZV9zZXBhcmF0b3IgPSAiXHQiOworIAorQEAgLTg1Miw2ICs5MTMsMTMgQEAKKyAgIGNvbF9zZXBfbGVuZ3RoID0gKGludCkgc3RybGVuIChvcHRhcmdfUyk7CisgICBjb2xfc2VwX3N0cmluZyA9IHhtYWxsb2MgKGNvbF9zZXBfbGVuZ3RoICsgMSk7CisgICBzdHJjcHkgKGNvbF9zZXBfc3RyaW5nLCBvcHRhcmdfUyk7CisrCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBjb2xfc2VwX3dpZHRoID0gbWJzd2lkdGggKGNvbF9zZXBfc3RyaW5nLCAwKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgY29sX3NlcF93aWR0aCA9IGNvbF9zZXBfbGVuZ3RoOworIH0KKyAKKyBpbnQKK0BAIC04NzcsNiArOTQ1LDIxIEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCisrLyogRGVmaW5lIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdXNlZCwgdGhlIG9uZXMgZm9yIHNpbmdsZSBieXRlIGxvY2FsZSBvciB0aGUgb25lcworKyAgIGZvciBtdWx0aWJ5dGUgbG9jYWxlLiAqLworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgeworKyAgICAgIHByaW50X2NoYXIgPSBwcmludF9jaGFyX211bHRpOworKyAgICAgIGNoYXJfdG9fY2x1bXAgPSBjaGFyX3RvX2NsdW1wX211bHRpOworKyAgICB9CisrICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICBwcmludF9jaGFyID0gcHJpbnRfY2hhcl9zaW5nbGU7CisrICAgICAgY2hhcl90b19jbHVtcCA9IGNoYXJfdG9fY2x1bXBfc2luZ2xlOworKyAgICB9CisrCisgICBuX2ZpbGVzID0gMDsKKyAgIGZpbGVfbmFtZXMgPSAoYXJnYyA+IDEKKyAJCT8geG1hbGxvYyAoKGFyZ2MgLSAxKSAqIHNpemVvZiAoY2hhciAqKSkKK0BAIC05NDksOCArMTAzMiwxMiBAQAorIAkgIGJyZWFrOworIAljYXNlICdlJzoKKyAJICBpZiAob3B0YXJnKQorLQkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICdlJywgJmlucHV0X3RhYl9jaGFyLAorLQkJICAgICAgICZjaGFyc19wZXJfaW5wdXRfdGFiKTsKKysJICAgIHsKKysJICAgICAgaW50IGR1bW15X2xlbmd0aCwgZHVtbXlfd2lkdGg7CisrCisrCSAgICAgIGdldG9wdGFyZyAob3B0YXJnLCAnZScsIGlucHV0X3RhYl9jaGFyLCAmZHVtbXlfbGVuZ3RoLAorKwkJCSAmZHVtbXlfd2lkdGgsICZjaGFyc19wZXJfaW5wdXRfdGFiKTsKKysJICAgIH0KKyAJICAvKiBDb3VsZCBjaGVjayB0YWIgd2lkdGggPiAwLiAqLworIAkgIHVudGFiaWZ5X2lucHV0ID0gdHJ1ZTsKKyAJICBicmVhazsKK0BAIC05NjMsOCArMTA1MCwxMiBAQAorIAkgIGJyZWFrOworIAljYXNlICdpJzoKKyAJICBpZiAob3B0YXJnKQorLQkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICdpJywgJm91dHB1dF90YWJfY2hhciwKKy0JCSAgICAgICAmY2hhcnNfcGVyX291dHB1dF90YWIpOworKwkgICAgeworKwkgICAgICBpbnQgZHVtbXlfd2lkdGg7CisrCisrCSAgICAgIGdldG9wdGFyZyAob3B0YXJnLCAnaScsIG91dHB1dF90YWJfY2hhciwgJm91dHB1dF90YWJfY2hhcl9sZW5ndGgsCisrCQkJICZkdW1teV93aWR0aCwgJmNoYXJzX3Blcl9vdXRwdXRfdGFiKTsKKysJICAgIH0KKyAJICAvKiBDb3VsZCBjaGVjayB0YWIgd2lkdGggPiAwLiAqLworIAkgIHRhYmlmeV9vdXRwdXQgPSB0cnVlOworIAkgIGJyZWFrOworQEAgLTk5MSw4ICsxMDgyLDggQEAKKyAJY2FzZSAnbic6CisgCSAgbnVtYmVyZWRfbGluZXMgPSB0cnVlOworIAkgIGlmIChvcHRhcmcpCistCSAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ24nLCAmbnVtYmVyX3NlcGFyYXRvciwKKy0JCSAgICAgICAmY2hhcnNfcGVyX251bWJlcik7CisrCSAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ24nLCBudW1iZXJfc2VwYXJhdG9yLCAmbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGgsCisrCQkgICAgICAgJm51bWJlcl9zZXBhcmF0b3Jfd2lkdGgsICZjaGFyc19wZXJfbnVtYmVyKTsKKyAJICBicmVhazsKKyAJY2FzZSAnTic6CisgCSAgc2tpcF9jb3VudCA9IGZhbHNlOworQEAgLTEwMzEsNyArMTEyMiw3IEBACisgCSAgb2xkX3MgPSBmYWxzZTsKKyAJICAvKiBSZXNldCBhbiBhZGRpdGlvbmFsIGlucHV0IG9mIC1zLCAtUyBkb21pbmF0ZXMgLXMgKi8KKyAJICBjb2xfc2VwX3N0cmluZyA9ICIiOworLQkgIGNvbF9zZXBfbGVuZ3RoID0gMDsKKysJICBjb2xfc2VwX2xlbmd0aCA9IGNvbF9zZXBfd2lkdGggPSAwOworIAkgIHVzZV9jb2xfc2VwYXJhdG9yID0gdHJ1ZTsKKyAJICBpZiAob3B0YXJnKQorIAkgICAgc2VwYXJhdG9yX3N0cmluZyAob3B0YXJnKTsKK0BAIC0xMTg4LDEwICsxMjc5LDQ1IEBACisgICAgYSBudW1iZXIuICovCisgCisgc3RhdGljIHZvaWQKKy1nZXRvcHRhcmcgKGNoYXIgKmFyZywgY2hhciBzd2l0Y2hfY2hhciwgY2hhciAqY2hhcmFjdGVyLCBpbnQgKm51bWJlcikKKytnZXRvcHRhcmcgKGNoYXIgKmFyZywgY2hhciBzd2l0Y2hfY2hhciwgY2hhciAqY2hhcmFjdGVyLCBpbnQgKmNoYXJhY3Rlcl9sZW5ndGgsCisrCSAgIGludCAqY2hhcmFjdGVyX3dpZHRoLCBpbnQgKm51bWJlcikKKyB7CisgICBpZiAoIUlTRElHSVQgKCphcmcpKQorLSAgICAqY2hhcmFjdGVyID0gKmFyZysrOworKyAgICB7CisrI2lmZGVmIEhBVkVfTUJSVE9XQworKyAgICAgIGlmIChNQl9DVVJfTUFYID4gMSkJLyogZm9yIG11bHRpYnl0ZSBsb2NhbGUuICovCisrCXsKKysJICB3Y2hhcl90IHdjOworKwkgIHNpemVfdCBtYmxlbmd0aDsKKysJICBpbnQgd2lkdGg7CisrCSAgbWJzdGF0ZV90IHN0YXRlID0geydcMCd9OworKworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBhcmcsIHN0cm5sZW4oYXJnLCBNQl9MRU5fTUFYKSwgJnN0YXRlKTsKKysKKysJICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkgICAgeworKwkgICAgICAqY2hhcmFjdGVyX2xlbmd0aCA9IDE7CisrCSAgICAgICpjaGFyYWN0ZXJfd2lkdGggPSAxOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgKmNoYXJhY3Rlcl9sZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysJICAgICAgd2lkdGggPSB3Y3dpZHRoICh3Yyk7CisrCSAgICAgICpjaGFyYWN0ZXJfd2lkdGggPSAod2lkdGggPCAwKSA/IDAgOiB3aWR0aDsKKysJICAgIH0KKysKKysJICBzdHJuY3B5IChjaGFyYWN0ZXIsIGFyZywgKmNoYXJhY3Rlcl9sZW5ndGgpOworKwkgIGFyZyArPSAqY2hhcmFjdGVyX2xlbmd0aDsKKysJfQorKyAgICAgIGVsc2UJCQkvKiBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlLiAqLworKyNlbmRpZgorKwl7CisrCSAgKmNoYXJhY3RlciA9ICphcmcrKzsKKysJICAqY2hhcmFjdGVyX2xlbmd0aCA9IDE7CisrCSAgKmNoYXJhY3Rlcl93aWR0aCA9IDE7CisrCX0KKysgICAgfQorKworICAgaWYgKCphcmcpCisgICAgIHsKKyAgICAgICBsb25nIGludCB0bXBfbG9uZzsKK0BAIC0xMjU2LDcgKzEzODIsNyBAQAorIAkgIGVsc2UKKyAJICAgIGNvbF9zZXBfc3RyaW5nID0gY29sdW1uX3NlcGFyYXRvcjsKKyAKKy0JICBjb2xfc2VwX2xlbmd0aCA9IDE7CisrCSAgY29sX3NlcF9sZW5ndGggPSBjb2xfc2VwX3dpZHRoID0gMTsKKyAJICB1c2VfY29sX3NlcGFyYXRvciA9IHRydWU7CisgCX0KKyAgICAgICAvKiBJdCdzIHJhdGhlciBwb2ludGxlc3MgdG8gZGVmaW5lIGEgVEFCIHNlcGFyYXRvciB3aXRoIGNvbHVtbgorQEAgLTEyODgsMTEgKzE0MTQsMTEgQEAKKyAJICAgICBUQUJfV0lEVEggKGNoYXJzX3Blcl9pbnB1dF90YWIsIGNoYXJzX3Blcl9udW1iZXIpOyAgICovCisgCisgICAgICAgLyogRXN0aW1hdGUgY2hhcnNfcGVyX3RleHQgd2l0aG91dCBhbnkgbWFyZ2luIGFuZCBrZWVwIGl0IGNvbnN0YW50LiAqLworLSAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yID09ICdcdCcpCisrICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3JbMF0gPT0gJ1x0JykKKyAJbnVtYmVyX3dpZHRoID0gY2hhcnNfcGVyX251bWJlciArCisgCSAgVEFCX1dJRFRIIChjaGFyc19wZXJfZGVmYXVsdF90YWIsIGNoYXJzX3Blcl9udW1iZXIpOworICAgICAgIGVsc2UKKy0JbnVtYmVyX3dpZHRoID0gY2hhcnNfcGVyX251bWJlciArIDE7CisrCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKyBudW1iZXJfc2VwYXJhdG9yX3dpZHRoOworIAorICAgICAgIC8qIFRoZSBudW1iZXIgaXMgcGFydCBvZiB0aGUgY29sdW1uIHdpZHRoIHVubGVzcyB3ZSBhcmUKKyAJIHByaW50aW5nIGZpbGVzIGluIHBhcmFsbGVsLiAqLworQEAgLTEzMDcsNyArMTQzMyw3IEBACisgICAgIH0KKyAKKyAgIGNoYXJzX3Blcl9jb2x1bW4gPSAoY2hhcnNfcGVyX2xpbmUgLSBjaGFyc191c2VkX2J5X251bWJlciAtCistCQkgICAgIChjb2x1bW5zIC0gMSkgKiBjb2xfc2VwX2xlbmd0aCkgLyBjb2x1bW5zOworKwkJICAgICAoY29sdW1ucyAtIDEpICogY29sX3NlcF93aWR0aCkgLyBjb2x1bW5zOworIAorICAgaWYgKGNoYXJzX3Blcl9jb2x1bW4gPCAxKQorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJwYWdlIHdpZHRoIHRvbyBuYXJyb3ciKSk7CitAQCAtMTQzMiw3ICsxNTU4LDcgQEAKKyAKKyAgIC8qIEVubGFyZ2UgcC0+c3RhcnRfcG9zaXRpb24gb2YgZmlyc3QgY29sdW1uIHRvIHVzZSB0aGUgc2FtZSBmb3JtIG9mCisgICAgICBwYWRkaW5nX25vdF9wcmludGVkIHdpdGggYWxsIGNvbHVtbnMuICovCistICBoID0gaCArIGNvbF9zZXBfbGVuZ3RoOworKyAgaCA9IGggKyBjb2xfc2VwX3dpZHRoOworIAorICAgLyogVGhpcyBsb29wIHRha2VzIGNhcmUgb2YgYWxsIGJ1dCB0aGUgcmlnaHRtb3N0IGNvbHVtbi4gKi8KKyAKK0BAIC0xNDY2LDcgKzE1OTIsNyBAQAorIAl9CisgICAgICAgZWxzZQorIAl7CistCSAgaCA9IGhfbmV4dCArIGNvbF9zZXBfbGVuZ3RoOworKwkgIGggPSBoX25leHQgKyBjb2xfc2VwX3dpZHRoOworIAkgIGhfbmV4dCA9IGggKyBjaGFyc19wZXJfY29sdW1uOworIAl9CisgICAgIH0KK0BAIC0xNzU2LDkgKzE4ODIsOSBAQAorIGFsaWduX2NvbHVtbiAoQ09MVU1OICpwKQorIHsKKyAgIHBhZGRpbmdfbm90X3ByaW50ZWQgPSBwLT5zdGFydF9wb3NpdGlvbjsKKy0gIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGggPiAwKQorKyAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoID4gMCkKKyAgICAgeworLSAgICAgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCk7CisrICAgICAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGgpOworICAgICAgIHBhZGRpbmdfbm90X3ByaW50ZWQgPSBBTllXSEVSRTsKKyAgICAgfQorIAorQEAgLTIwMjksMTMgKzIxNTUsMTMgQEAKKyAgICAgICAvKiBNYXkgYmUgdG9vIGdlbmVyb3VzLiAqLworICAgICAgIGJ1ZmYgPSBYMlJFQUxMT0MgKGJ1ZmYsICZidWZmX2FsbG9jYXRlZCk7CisgICAgIH0KKy0gIGJ1ZmZbYnVmZl9jdXJyZW50KytdID0gYzsKKysgIGJ1ZmZbYnVmZl9jdXJyZW50KytdID0gKHVuc2lnbmVkIGNoYXIpIGM7CisgfQorIAorIHN0YXRpYyB2b2lkCisgYWRkX2xpbmVfbnVtYmVyIChDT0xVTU4gKnApCisgeworLSAgaW50IGk7CisrICBpbnQgaSwgajsKKyAgIGNoYXIgKnM7CisgICBpbnQgbGVmdF9jdXQ7CisgCitAQCAtMjA1OCwyMiArMjE4NCwyNCBAQAorICAgICAgIC8qIFRhYmlmaWNhdGlvbiBpcyBhc3N1bWVkIGZvciBtdWx0aXBsZSBjb2x1bW5zLCBhbHNvIGZvciBuLXNlcGFyYXRvcnMsCisgCSBidXQgYGRlZmF1bHQgbi1zZXBhcmF0b3IgPSBUQUInIGhhc24ndCBiZWVuIGdpdmVuIHByaW9yaXR5IG92ZXIKKyAJIGVxdWFsIGNvbHVtbl93aWR0aCBhbHNvIHNwZWNpZmllZCBieSBQT1NJWC4gKi8KKy0gICAgICBpZiAobnVtYmVyX3NlcGFyYXRvciA9PSAnXHQnKQorKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgICAgICAgICB7CisgICAgICAgICAgIGkgPSBudW1iZXJfd2lkdGggLSBjaGFyc19wZXJfbnVtYmVyOworICAgICAgICAgICB3aGlsZSAoaS0tID4gMCkKKyAJICAgIChwLT5jaGFyX2Z1bmMpICgnICcpOworICAgICAgICAgfQorICAgICAgIGVsc2UKKy0gICAgICAgIChwLT5jaGFyX2Z1bmMpIChudW1iZXJfc2VwYXJhdG9yKTsKKysJZm9yIChqID0gMDsgaiA8IG51bWJlcl9zZXBhcmF0b3JfbGVuZ3RoOyBqKyspCisrCSAgKHAtPmNoYXJfZnVuYykgKG51bWJlcl9zZXBhcmF0b3Jbal0pOworICAgICB9CisgICBlbHNlCisgICAgIC8qIFRvIGNvbXBseSB3aXRoIFBPU0lYLCB3ZSBhdm9pZCBhbnkgZXhwYW5zaW9uIG9mIGRlZmF1bHQgVEFCCisgICAgICAgIHNlcGFyYXRvciB3aXRoIGEgc2luZ2xlIGNvbHVtbiBvdXRwdXQuIE5vIGNvbHVtbl93aWR0aCByZXF1aXJlbWVudAorICAgICAgICBoYXMgdG8gYmUgY29uc2lkZXJlZC4gKi8KKyAgICAgeworLSAgICAgIChwLT5jaGFyX2Z1bmMpIChudW1iZXJfc2VwYXJhdG9yKTsKKy0gICAgICBpZiAobnVtYmVyX3NlcGFyYXRvciA9PSAnXHQnKQorKyAgICAgIGZvciAoaiA9IDA7IGogPCBudW1iZXJfc2VwYXJhdG9yX2xlbmd0aDsgaisrKQorKwkocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcltqXSk7CisrICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3JbMF0gPT0gJ1x0JykKKyAgICAgICAgIG91dHB1dF9wb3NpdGlvbiA9IFBPU19BRlRFUl9UQUIgKGNoYXJzX3Blcl9vdXRwdXRfdGFiLAorIAkJCSAgb3V0cHV0X3Bvc2l0aW9uKTsKKyAgICAgfQorQEAgLTIyMzQsNyArMjM2Miw3IEBACisgICB3aGlsZSAoZ29hbCAtIGhfb2xkID4gMQorIAkgJiYgKGhfbmV3ID0gUE9TX0FGVEVSX1RBQiAoY2hhcnNfcGVyX291dHB1dF90YWIsIGhfb2xkKSkgPD0gZ29hbCkKKyAgICAgeworLSAgICAgIHB1dGNoYXIgKG91dHB1dF90YWJfY2hhcik7CisrICAgICAgZndyaXRlIChvdXRwdXRfdGFiX2NoYXIsIHNpemVvZihjaGFyKSwgb3V0cHV0X3RhYl9jaGFyX2xlbmd0aCwgc3Rkb3V0KTsKKyAgICAgICBoX29sZCA9IGhfbmV3OworICAgICB9CisgICB3aGlsZSAoKytoX29sZCA8PSBnb2FsKQorQEAgLTIyNTQsNiArMjM4Miw3IEBACisgeworICAgY2hhciAqczsKKyAgIGludCBsID0gY29sX3NlcF9sZW5ndGg7CisrICBpbnQgbm90X3NwYWNlX2ZsYWc7CisgCisgICBzID0gY29sX3NlcF9zdHJpbmc7CisgCitAQCAtMjI2Nyw2ICsyMzk2LDcgQEAKKyAgICAgeworICAgICAgIGZvciAoOyBzZXBhcmF0b3JzX25vdF9wcmludGVkID4gMDsgLS1zZXBhcmF0b3JzX25vdF9wcmludGVkKQorIAl7CisrCSAgbm90X3NwYWNlX2ZsYWcgPSAwOworIAkgIHdoaWxlIChsLS0gPiAwKQorIAkgICAgeworIAkgICAgICAvKiAzIHR5cGVzIG9mIHNlcF9zdHJpbmdzOiBzcGFjZXMgb25seSwgc3BhY2VzIGFuZCBjaGFycywKK0BAIC0yMjgwLDEyICsyNDEwLDE1IEBACisgCQl9CisgCSAgICAgIGVsc2UKKyAJCXsKKysJCSAgbm90X3NwYWNlX2ZsYWcgPSAxOworIAkJICBpZiAoc3BhY2VzX25vdF9wcmludGVkID4gMCkKKyAJCSAgICBwcmludF93aGl0ZV9zcGFjZSAoKTsKKyAJCSAgcHV0Y2hhciAoKnMrKyk7CistCQkgICsrb3V0cHV0X3Bvc2l0aW9uOworIAkJfQorIAkgICAgfQorKwkgIGlmIChub3Rfc3BhY2VfZmxhZykKKysJICAgIG91dHB1dF9wb3NpdGlvbiArPSBjb2xfc2VwX3dpZHRoOworKworICAgICAgICAgICAvKiBzZXBfc3RyaW5nIGVuZHMgd2l0aCBzb21lIHNwYWNlcyAqLworIAkgIGlmIChzcGFjZXNfbm90X3ByaW50ZWQgPiAwKQorIAkgICAgcHJpbnRfd2hpdGVfc3BhY2UgKCk7CitAQCAtMjMxMyw3ICsyNDQ2LDcgQEAKKyAgICByZXF1aXJlZCBudW1iZXIgb2YgdGFicyBhbmQgc3BhY2VzLiAqLworIAorIHN0YXRpYyB2b2lkCistcHJpbnRfY2hhciAoY2hhciBjKQorK3ByaW50X2NoYXJfc2luZ2xlIChjaGFyIGMpCisgeworICAgaWYgKHRhYmlmeV9vdXRwdXQpCisgICAgIHsKK0BAIC0yMzM3LDYgKzI0NzAsNzQgQEAKKyAgIHB1dGNoYXIgKGMpOworIH0KKyAKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytwcmludF9jaGFyX211bHRpIChjaGFyIGMpCisreworKyAgc3RhdGljIHNpemVfdCBtYmNfcG9zID0gMDsKKysgIHN0YXRpYyBjaGFyIG1iY1tNQl9MRU5fTUFYXSA9IHsnXDAnfTsKKysgIHN0YXRpYyBtYnN0YXRlX3Qgc3RhdGUgPSB7J1wwJ307CisrICBtYnN0YXRlX3Qgc3RhdGVfYmFrOworKyAgd2NoYXJfdCB3YzsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIGludCB3aWR0aDsKKysKKysgIGlmICh0YWJpZnlfb3V0cHV0KQorKyAgICB7CisrICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrICAgICAgbWJjW21iY19wb3MrK10gPSBjOworKyAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBtYmMsIG1iY19wb3MsICZzdGF0ZSk7CisrCisrICAgICAgd2hpbGUgKG1iY19wb3MgPiAwKQorKwl7CisrCSAgc3dpdGNoIChtYmxlbmd0aCkKKysJICAgIHsKKysJICAgIGNhc2UgKHNpemVfdCktMjoKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIHJldHVybjsKKysKKysJICAgIGNhc2UgKHNpemVfdCktMToKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgICsrb3V0cHV0X3Bvc2l0aW9uOworKwkgICAgICBwdXRjaGFyIChtYmNbMF0pOworKwkgICAgICBtZW1tb3ZlIChtYmMsIG1iYyArIDEsIE1CX0NVUl9NQVggLSAxKTsKKysJICAgICAgLS1tYmNfcG9zOworKwkgICAgICBicmVhazsKKysKKysJICAgIGNhc2UgMDoKKysJICAgICAgbWJsZW5ndGggPSAxOworKworKwkgICAgZGVmYXVsdDoKKysJICAgICAgaWYgKHdjID09IEwnICcpCisrCQl7CisrCQkgIG1lbW1vdmUgKG1iYywgbWJjICsgbWJsZW5ndGgsIE1CX0NVUl9NQVggLSBtYmxlbmd0aCk7CisrCQkgIC0tbWJjX3BvczsKKysJCSAgKytzcGFjZXNfbm90X3ByaW50ZWQ7CisrCQkgIHJldHVybjsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoc3BhY2VzX25vdF9wcmludGVkID4gMCkKKysJCXByaW50X3doaXRlX3NwYWNlICgpOworKworKwkgICAgICAvKiBOb25wcmludGFibGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgd2lkdGggMCwgZXhjZXB0IEwnXGInLiAqLworKwkgICAgICBpZiAoKHdpZHRoID0gd2N3aWR0aCAod2MpKSA8IDEpCisrCQl7CisrCQkgIGlmICh3YyA9PSBMJ1xiJykKKysJCSAgICAtLW91dHB1dF9wb3NpdGlvbjsKKysJCX0KKysJICAgICAgZWxzZQorKwkJb3V0cHV0X3Bvc2l0aW9uICs9IHdpZHRoOworKworKwkgICAgICBmd3JpdGUgKG1iYywgc2l6ZW9mKGNoYXIpLCBtYmxlbmd0aCwgc3Rkb3V0KTsKKysJICAgICAgbWVtbW92ZSAobWJjLCBtYmMgKyBtYmxlbmd0aCwgTUJfQ1VSX01BWCAtIG1ibGVuZ3RoKTsKKysJICAgICAgbWJjX3BvcyAtPSBtYmxlbmd0aDsKKysJICAgIH0KKysJfQorKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgcHV0Y2hhciAoYyk7CisrfQorKyNlbmRpZgorKworIC8qIFNraXAgdG8gcGFnZSBQQUdFIGJlZm9yZSBwcmludGluZy4KKyAgICBQQUdFIG1heSBiZSBsYXJnZXIgdGhhbiB0b3RhbCBudW1iZXIgb2YgcGFnZXMuICovCisgCitAQCAtMjUxNyw5ICsyNzE4LDkgQEAKKyAJICBhbGlnbl9lbXB0eV9jb2xzID0gZmFsc2U7CisgCX0KKyAKKy0gICAgICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoID4gMCkKKysgICAgICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGggPiAwKQorIAl7CistCSAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoKTsKKysJICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCk7CisgCSAgcGFkZGluZ19ub3RfcHJpbnRlZCA9IEFOWVdIRVJFOworIAl9CisgCitAQCAtMjYyMCw5ICsyODIxLDkgQEAKKyAJfQorICAgICB9CisgCistICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoID4gMCkKKysgIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCA+IDApCisgICAgIHsKKy0gICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGgpOworKyAgICAgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoKTsKKyAgICAgICBwYWRkaW5nX25vdF9wcmludGVkID0gQU5ZV0hFUkU7CisgICAgIH0KKyAKK0BAIC0yNjM1LDggKzI4MzYsOCBAQAorICAgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA9PSAwKQorICAgICB7CisgICAgICAgb3V0cHV0X3Bvc2l0aW9uID0gcC0+c3RhcnRfcG9zaXRpb24gKyBlbmRfdmVjdG9yW2xpbmVdOworLSAgICAgIGlmIChwLT5zdGFydF9wb3NpdGlvbiAtIGNvbF9zZXBfbGVuZ3RoID09IGNoYXJzX3Blcl9tYXJnaW4pCistCW91dHB1dF9wb3NpdGlvbiAtPSBjb2xfc2VwX2xlbmd0aDsKKysgICAgICBpZiAocC0+c3RhcnRfcG9zaXRpb24gLSBjb2xfc2VwX3dpZHRoID09IGNoYXJzX3Blcl9tYXJnaW4pCisrCW91dHB1dF9wb3NpdGlvbiAtPSBjb2xfc2VwX3dpZHRoOworICAgICB9CisgCisgICByZXR1cm4gdHJ1ZTsKK0BAIC0yNjU1LDcgKzI4NTYsNyBAQAorICAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlzIDEuKSAqLworIAorIHN0YXRpYyBpbnQKKy1jaGFyX3RvX2NsdW1wIChjaGFyIGMpCisrY2hhcl90b19jbHVtcF9zaW5nbGUgKGNoYXIgYykKKyB7CisgICB1bnNpZ25lZCBjaGFyIHVjID0gYzsKKyAgIGNoYXIgKnMgPSBjbHVtcF9idWZmOworQEAgLTI2NjUsMTAgKzI4NjYsMTAgQEAKKyAgIGludCBjaGFyczsKKyAgIGludCBjaGFyc19wZXJfYyA9IDg7CisgCistICBpZiAoYyA9PSBpbnB1dF90YWJfY2hhcikKKysgIGlmIChjID09IGlucHV0X3RhYl9jaGFyWzBdKQorICAgICBjaGFyc19wZXJfYyA9IGNoYXJzX3Blcl9pbnB1dF90YWI7CisgCistICBpZiAoYyA9PSBpbnB1dF90YWJfY2hhciB8fCBjID09ICdcdCcpCisrICBpZiAoYyA9PSBpbnB1dF90YWJfY2hhclswXSB8fCBjID09ICdcdCcpCisgICAgIHsKKyAgICAgICB3aWR0aCA9IFRBQl9XSURUSCAoY2hhcnNfcGVyX2MsIGlucHV0X3Bvc2l0aW9uKTsKKyAKK0BAIC0yNzM5LDYgKzI5NDAsMTU0IEBACisgICByZXR1cm4gY2hhcnM7CisgfQorIAorKyNpZmRlZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisrY2hhcl90b19jbHVtcF9tdWx0aSAoY2hhciBjKQorK3sKKysgIHN0YXRpYyBzaXplX3QgbWJjX3BvcyA9IDA7CisrICBzdGF0aWMgY2hhciBtYmNbTUJfTEVOX01BWF0gPSB7J1wwJ307CisrICBzdGF0aWMgbWJzdGF0ZV90IHN0YXRlID0geydcMCd9OworKyAgbWJzdGF0ZV90IHN0YXRlX2JhazsKKysgIHdjaGFyX3Qgd2M7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBpbnQgd2Nfd2lkdGg7CisrICByZWdpc3RlciBjaGFyICpzID0gY2x1bXBfYnVmZjsKKysgIHJlZ2lzdGVyIGludCBpLCBqOworKyAgY2hhciBlc2NfYnVmZls0XTsKKysgIGludCB3aWR0aDsKKysgIGludCBjaGFyczsKKysgIGludCBjaGFyc19wZXJfYyA9IDg7CisrCisrICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgIG1iY1ttYmNfcG9zKytdID0gYzsKKysgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBtYmMsIG1iY19wb3MsICZzdGF0ZSk7CisrCisrICB3aWR0aCA9IDA7CisrICBjaGFycyA9IDA7CisrICB3aGlsZSAobWJjX3BvcyA+IDApCisrICAgIHsKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMjoKKysJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICByZXR1cm4gMDsKKysKKysJY2FzZSAoc2l6ZV90KS0xOgorKwkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgIG1ibGVuZ3RoID0gMTsKKysKKysJICBpZiAodXNlX2VzY19zZXF1ZW5jZSB8fCB1c2VfY250cmxfcHJlZml4KQorKwkgICAgeworKwkgICAgICB3aWR0aCA9ICs0OworKwkgICAgICBjaGFycyA9ICs0OworKwkgICAgICAqcysrID0gJ1xcJzsKKysJICAgICAgc3ByaW50ZiAoZXNjX2J1ZmYsICIlMDNvIiwgbWJjWzBdKTsKKysJICAgICAgZm9yIChpID0gMDsgaSA8PSAyOyArK2kpCisrCQkqcysrID0gKGludCkgZXNjX2J1ZmZbaV07CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICB3aWR0aCArPSAxOworKwkgICAgICBjaGFycyArPSAxOworKwkgICAgICAqcysrID0gbWJjWzBdOworKwkgICAgfQorKwkgIGJyZWFrOworKworKwljYXNlIDA6CisrCSAgbWJsZW5ndGggPSAxOworKwkJLyogRmFsbCB0aHJvdWdoICovCisrCisrCWRlZmF1bHQ6CisrCSAgaWYgKG1lbWNtcCAobWJjLCBpbnB1dF90YWJfY2hhciwgbWJsZW5ndGgpID09IDApCisrCSAgICBjaGFyc19wZXJfYyA9IGNoYXJzX3Blcl9pbnB1dF90YWI7CisrCisrCSAgaWYgKG1lbWNtcCAobWJjLCBpbnB1dF90YWJfY2hhciwgbWJsZW5ndGgpID09IDAgfHwgYyA9PSAnXHQnKQorKwkgICAgeworKwkgICAgICBpbnQgIHdpZHRoX2luYzsKKysKKysJICAgICAgd2lkdGhfaW5jID0gVEFCX1dJRFRIIChjaGFyc19wZXJfYywgaW5wdXRfcG9zaXRpb24pOworKwkgICAgICB3aWR0aCArPSB3aWR0aF9pbmM7CisrCisrCSAgICAgIGlmICh1bnRhYmlmeV9pbnB1dCkKKysJCXsKKysJCSAgZm9yIChpID0gd2lkdGhfaW5jOyBpOyAtLWkpCisrCQkgICAgKnMrKyA9ICcgJzsKKysJCSAgY2hhcnMgKz0gd2lkdGhfaW5jOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGZvciAoaSA9IDA7IGkgPCAgbWJsZW5ndGg7IGkrKykKKysJCSAgICAqcysrID0gbWJjW2ldOworKwkJICBjaGFycyArPSBtYmxlbmd0aDsKKysJCX0KKysJICAgIH0KKysJICBlbHNlIGlmICgod2Nfd2lkdGggPSB3Y3dpZHRoICh3YykpIDwgMSkKKysJICAgIHsKKysJICAgICAgaWYgKHVzZV9lc2Nfc2VxdWVuY2UpCisrCQl7CisrCQkgIGZvciAoaSA9IDA7IGkgPCBtYmxlbmd0aDsgaSsrKQorKwkJICAgIHsKKysJCSAgICAgIHdpZHRoICs9IDQ7CisrCQkgICAgICBjaGFycyArPSA0OworKwkJICAgICAgKnMrKyA9ICdcXCc7CisrCQkgICAgICBzcHJpbnRmIChlc2NfYnVmZiwgIiUwM28iLCBjKTsKKysJCSAgICAgIGZvciAoaiA9IDA7IGogPD0gMjsgKytqKQorKwkJCSpzKysgPSAoaW50KSBlc2NfYnVmZltqXTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHVzZV9jbnRybF9wcmVmaXgpCisrCQl7CisrCQkgIGlmICh3YyA8IDAyMDApCisrCQkgICAgeworKwkJICAgICAgd2lkdGggKz0gMjsKKysJCSAgICAgIGNoYXJzICs9IDI7CisrCQkgICAgICAqcysrID0gJ14nOworKwkJICAgICAgKnMrKyA9IHdjIF4gMDEwMDsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCQl7CisrCQkJICB3aWR0aCArPSA0OworKwkJCSAgY2hhcnMgKz0gNDsKKysJCQkgICpzKysgPSAnXFwnOworKwkJCSAgc3ByaW50ZiAoZXNjX2J1ZmYsICIlMDNvIiwgYyk7CisrCQkJICBmb3IgKGogPSAwOyBqIDw9IDI7ICsraikKKysJCQkgICAgKnMrKyA9IChpbnQpIGVzY19idWZmW2pdOworKwkJCX0KKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHdjID09IEwnXGInKQorKwkJeworKwkJICB3aWR0aCArPSAtMTsKKysJCSAgY2hhcnMgKz0gMTsKKysJCSAgKnMrKyA9IGM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgd2lkdGggKz0gMDsKKysJCSAgY2hhcnMgKz0gbWJsZW5ndGg7CisrCQkgIGZvciAoaSA9IDA7IGkgPCBtYmxlbmd0aDsgaSsrKQorKwkJICAgICpzKysgPSBtYmNbaV07CisrCQl9CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICB3aWR0aCArPSB3Y193aWR0aDsKKysJICAgICAgY2hhcnMgKz0gbWJsZW5ndGg7CisrCSAgICAgIGZvciAoaSA9IDA7IGkgPCBtYmxlbmd0aDsgaSsrKQorKwkJKnMrKyA9IG1iY1tpXTsKKysJICAgIH0KKysJfQorKyAgICAgIG1lbW1vdmUgKG1iYywgbWJjICsgbWJsZW5ndGgsIE1CX0NVUl9NQVggLSBtYmxlbmd0aCk7CisrICAgICAgbWJjX3BvcyAtPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgaW5wdXRfcG9zaXRpb24gKz0gd2lkdGg7CisrICByZXR1cm4gY2hhcnM7CisrfQorKyNlbmRpZgorKworIC8qIFdlJ3ZlIGp1c3QgcHJpbnRlZCBzb21lIGZpbGVzIGFuZCBuZWVkIHRvIGNsZWFuIHVwIHRoaW5ncyBiZWZvcmUKKyAgICBsb29raW5nIGZvciBtb3JlIG9wdGlvbnMgYW5kIHByaW50aW5nIHRoZSBuZXh0IGJhdGNoIG9mIGZpbGVzLgorIAorLS0tIGNvcmV1dGlscy02LjgrL3NyYy9jdXQuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL2N1dC5jCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMjksNiArMjksMTEgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCkuICAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgInN5c3RlbS5oIgorIAorICNpbmNsdWRlICJlcnJvci5oIgorQEAgLTM3LDYgKzQyLDE4IEBACisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJuZHVwLmgiCisgCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLgkqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyB1bmRlZiBNQl9MRU5fTUFYCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KKyAjZGVmaW5lIFBST0dSQU1fTkFNRSAiY3V0IgorIAorQEAgLTY3LDYgKzg0LDUyIEBACisgICAgIH0JCQkJCQkJXAorICAgd2hpbGUgKDApCisgCisrLyogUmVmaWxsIHRoZSBidWZmZXIgQlVGIHRvIGdldCBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICovCisrI2RlZmluZSBSRUZJTExfQlVGRkVSKEJVRiwgQlVGUE9TLCBCVUZMRU4sIFNUUkVBTSkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBpZiAoQlVGTEVOIDwgTUJfTEVOX01BWCAmJiAhZmVvZiAoU1RSRUFNKSAmJiAhZmVycm9yIChTVFJFQU0pKQlcCisrCXsJCQkJCQkJCVwKKysJICBtZW1tb3ZlIChCVUYsIEJVRlBPUywgQlVGTEVOKTsJCQkJXAorKwkgIEJVRkxFTiArPSBmcmVhZCAoQlVGICsgQlVGTEVOLCBzaXplb2YoY2hhciksIEJVRlNJWiwgU1RSRUFNKTsgXAorKwkgIEJVRlBPUyA9IEJVRjsJCQkJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKysvKiBHZXQgd2lkZSBjaGFyYWN0ZXIgb24gQlVGUE9TLiBCVUZQT1MgaXMgbm90IGluY2x1ZGVkIGFmdGVyIHRoYXQuCisrICAgSWYgYnl0ZSBzZXF1ZW5jZSBpcyBub3QgdmFsaWQgYXMgYSBjaGFyYWN0ZXIsIENPTlZGQUlMIGlzIDEuIE90aGVyd2lzZSAwLiAqLyAKKysjZGVmaW5lIEdFVF9ORVhUX1dDX0ZST01fQlVGRkVSKFdDLCBCVUZQT1MsIEJVRkxFTiwgTUJMRU5HVEgsIFNUQVRFLCBDT05WRkFJTCkgXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIGlmIChCVUZMRU4gPCAxKQkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJICBXQyA9IFdFT0Y7CQkJCQkJCVwKKysJICBicmVhazsJCQkJCQkJXAorKwl9CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLwkJCQkJXAorKyAgICAgIENPTlZGQUlMID0gMDsJCQkJCQkJXAorKyAgICAgIHN0YXRlX2JhayA9IFNUQVRFOwkJCQkJCVwKKysgICAgICBNQkxFTkdUSCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJldDLCBCVUZQT1MsIEJVRkxFTiwgJlNUQVRFKTsJXAorKwkJCQkJCQkJCVwKKysgICAgICBzd2l0Y2ggKE1CTEVOR1RIKQkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJY2FzZSAoc2l6ZV90KS0xOgkJCQkJCVwKKysJY2FzZSAoc2l6ZV90KS0yOgkJCQkJCVwKKysJICBDT05WRkFJTCsrOwkJCQkJCQlcCisrCSAgU1RBVEUgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkgIC8qIEZhbGwgdGhyb3Vnbi4gKi8JCQkJCQlcCisrCQkJCQkJCQkJXAorKwljYXNlIDA6CQkJCQkJCQlcCisrCSAgTUJMRU5HVEggPSAxOwkJCQkJCQlcCisrCSAgYnJlYWs7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisgc3RydWN0IHJhbmdlX3BhaXIKKyAgIHsKKyAgICAgc2l6ZV90IGxvOworQEAgLTg1LDcgKzE0OCw3IEBACisgLyogVGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgZm9yIEZJRUxEXzFfQlVGRkVSLiAgKi8KKyBzdGF0aWMgc2l6ZV90IGZpZWxkXzFfYnVmc2l6ZTsKKyAKKy0vKiBUaGUgbGFyZ2VzdCBmaWVsZCBvciBieXRlIGluZGV4IHVzZWQgYXMgYW4gZW5kcG9pbnQgb2YgYSBjbG9zZWQKKysvKiBUaGUgbGFyZ2VzdCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgaW5kZXggdXNlZCBhcyBhbiBlbmRwb2ludCBvZiBhIGNsb3NlZAorICAgIG9yIGRlZ2VuZXJhdGUgcmFuZ2Ugc3BlY2lmaWNhdGlvbjsgIHRoaXMgZG9lc24ndCBpbmNsdWRlIHRoZSBzdGFydGluZworICAgIGluZGV4IG9mIHJpZ2h0LW9wZW4tZW5kZWQgcmFuZ2VzLiAgRm9yIGV4YW1wbGUsIHdpdGggZWl0aGVyIHJhbmdlIHNwZWMKKyAgICBgMi01LDktJywgYDItMyw1LDktJyB0aGlzIHZhcmlhYmxlIHdvdWxkIGJlIHNldCB0byA1LiAgKi8KK0BAIC05NywxMCArMTYwLDExIEBACisgCisgLyogVGhpcyBpcyBhIGJpdCB2ZWN0b3IuCisgICAgSW4gYnl0ZSBtb2RlLCB3aGljaCBieXRlcyB0byBvdXRwdXQuCisrICAgSW4gY2hhcmFjdGVyIG1vZGUsIHdoaWNoIGNoYXJhY3RlcnMgdG8gb3V0cHV0LgorICAgIEluIGZpZWxkIG1vZGUsIHdoaWNoIERFTElNLXNlcGFyYXRlZCBmaWVsZHMgdG8gb3V0cHV0LgorLSAgIEJvdGggYnl0ZXMgYW5kIGZpZWxkcyBhcmUgbnVtYmVyZWQgc3RhcnRpbmcgd2l0aCAxLAorKyAgIEJ5dGVzLCBjaGFyYWN0ZXJzIGFuZCBmaWVsZHMgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggMSwKKyAgICBzbyB0aGUgemVyb3RoIGJpdCBvZiB0aGlzIGFycmF5IGlzIHVudXNlZC4KKy0gICBBIGZpZWxkIG9yIGJ5dGUgSyBoYXMgYmVlbiBzZWxlY3RlZCBpZgorKyAgIEEgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIEsgaGFzIGJlZW4gc2VsZWN0ZWQgaWYKKyAgICAoSyA8PSBNQVhfUkFOR0VfRU5EUE9JTlQgYW5kIGlzX3ByaW50YWJsZV9maWVsZChLKSkKKyAgICAgfHwgKEVPTF9SQU5HRV9TVEFSVCA+IDAgJiYgSyA+PSBFT0xfUkFOR0VfU1RBUlQpLiAgKi8KKyBzdGF0aWMgdW5zaWduZWQgY2hhciAqcHJpbnRhYmxlX2ZpZWxkOworQEAgLTEwOSw5ICsxNzMsMTIgQEAKKyAgIHsKKyAgICAgdW5kZWZpbmVkX21vZGUsCisgCistICAgIC8qIE91dHB1dCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGluIHRoZSBnaXZlbiBieXRlcy4gKi8KKysgICAgLyogT3V0cHV0IGJ5dGVzIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisgICAgIGJ5dGVfbW9kZSwKKyAKKysgICAgLyogT3V0cHV0IGNoYXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKysgICAgY2hhcmFjdGVyX21vZGUsCisrCisgICAgIC8qIE91dHB1dCB0aGUgZ2l2ZW4gZGVsaW1ldGVyLXNlcGFyYXRlZCBmaWVsZHMuICovCisgICAgIGZpZWxkX21vZGUKKyAgIH07CitAQCAtMTIxLDYgKzE4OCwxMyBAQAorIAorIHN0YXRpYyBlbnVtIG9wZXJhdGluZ19tb2RlIG9wZXJhdGluZ19tb2RlOworIAorKy8qIElmIG5vbnplcm8sIHdoZW4gaW4gYnl0ZSBtb2RlLCBkb24ndCBzcGxpdCBtdWx0aWJ5dGUgY2hhcmFjdGVycy4gICovCisrc3RhdGljIGludCBieXRlX21vZGVfY2hhcmFjdGVyX2F3YXJlOworKworKy8qIElmIG5vbnplcm8sIHRoZSBmdW5jdGlvbiBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlIGlzIHdvcmsKKysgICBpZiB0aGlzIHByb2dyYW0gcnVucyBvbiBtdWx0aWJ5dGUgbG9jYWxlLiAqLworK3N0YXRpYyBpbnQgZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlOworKworIC8qIElmIHRydWUgZG8gbm90IG91dHB1dCBsaW5lcyBjb250YWluaW5nIG5vIGRlbGltZXRlciBjaGFyYWN0ZXJzLgorICAgIE90aGVyd2lzZSwgYWxsIHN1Y2ggbGluZXMgYXJlIHByaW50ZWQuICBUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5CisgICAgd2l0aCBmaWVsZCBtb2RlLiAgKi8KK0BAIC0xMzIsNiArMjA2LDkgQEAKKyAKKyAvKiBUaGUgZGVsaW1ldGVyIGNoYXJhY3RlciBmb3IgZmllbGQgbW9kZS4gKi8KKyBzdGF0aWMgdW5zaWduZWQgY2hhciBkZWxpbTsKKysjaWYgSEFWRV9XQ0hBUl9ICisrc3RhdGljIHdjaGFyX3Qgd2NkZWxpbTsKKysjZW5kaWYKKyAKKyAvKiBUcnVlIGlmIHRoZSAtLW91dHB1dC1kZWxpbWl0ZXI9U1RSSU5HIG9wdGlvbiB3YXMgc3BlY2lmaWVkLiAgKi8KKyBzdGF0aWMgYm9vbCBvdXRwdXRfZGVsaW1pdGVyX3NwZWNpZmllZDsKK0BAIC0yMDUsNyArMjgyLDcgQEAKKyAgIC1mLCAtLWZpZWxkcz1MSVNUICAgICAgIHNlbGVjdCBvbmx5IHRoZXNlIGZpZWxkczsgIGFsc28gcHJpbnQgYW55IGxpbmVcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyBubyBkZWxpbWl0ZXIgY2hhcmFjdGVyLCB1bmxlc3NcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIC1zIG9wdGlvbiBpcyBzcGVjaWZpZWRcblwKKy0gIC1uICAgICAgICAgICAgICAgICAgICAgIChpZ25vcmVkKVxuXAorKyAgLW4gICAgICAgICAgICAgICAgICAgICAgd2l0aCAtYjogZG9uJ3Qgc3BsaXQgbXVsdGlieXRlIGNoYXJhY3RlcnNcblwKKyAiKSwgc3Rkb3V0KTsKKyAgICAgICBmcHV0cyAoXygiXAorICAgICAgIC0tY29tcGxlbWVudCAgICAgICAgY29tcGxlbWVudCB0aGUgc2V0IG9mIHNlbGVjdGVkIGJ5dGVzLCBjaGFyYWN0ZXJzXG5cCitAQCAtMzYyLDcgKzQzOSw3IEBACisgCSAgaW5fZGlnaXRzID0gZmFsc2U7CisgCSAgLyogU3RhcnRpbmcgYSByYW5nZS4gKi8KKyAJICBpZiAoZGFzaF9mb3VuZCkKKy0JICAgIEZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUgb3IgZmllbGQgbGlzdCIpKTsKKysJICAgIEZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBsaXN0IikpOworIAkgIGRhc2hfZm91bmQgPSB0cnVlOworIAkgIGZpZWxkc3RyKys7CisgCitAQCAtMzg3LDE0ICs0NjQsMTYgQEAKKyAJICAgICAgaWYgKHZhbHVlID09IDApCisgCQl7CisgCQkgIC8qIGBuLScuICBGcm9tIGBpbml0aWFsJyB0byBlbmQgb2YgbGluZS4gKi8KKy0JCSAgZW9sX3JhbmdlX3N0YXJ0ID0gaW5pdGlhbDsKKysJCSAgaWYgKGVvbF9yYW5nZV9zdGFydCA9PSAwIHx8CisrCQkgICAgICAoZW9sX3JhbmdlX3N0YXJ0ICE9IDAgJiYgZW9sX3JhbmdlX3N0YXJ0ID4gaW5pdGlhbCkpCisrCQkgICAgZW9sX3JhbmdlX3N0YXJ0ID0gaW5pdGlhbDsKKyAJCSAgZmllbGRfZm91bmQgPSB0cnVlOworIAkJfQorIAkgICAgICBlbHNlCisgCQl7CisgCQkgIC8qIGBtLW4nIG9yIGAtbicgKDEtbikuICovCisgCQkgIGlmICh2YWx1ZSA8IGluaXRpYWwpCistCQkgICAgRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSBvciBmaWVsZCBsaXN0IikpOworKwkJICAgIEZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBsaXN0IikpOworIAorIAkJICAvKiBJcyB0aGVyZSBhbHJlYWR5IGEgcmFuZ2UgZ29pbmcgdG8gZW5kIG9mIGxpbmU/ICovCisgCQkgIGlmIChlb2xfcmFuZ2Vfc3RhcnQgIT0gMCkKK0BAIC00NjcsNiArNTQ2LDkgQEAKKyAJICAgICAgaWYgKG9wZXJhdGluZ19tb2RlID09IGJ5dGVfbW9kZSkKKyAJCWVycm9yICgwLCAwLAorIAkJICAgICAgIF8oImJ5dGUgb2Zmc2V0ICVzIGlzIHRvbyBsYXJnZSIpLCBxdW90ZSAoYmFkX251bSkpOworKwkgICAgICBlbHNlIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBjaGFyYWN0ZXJfbW9kZSkKKysJCWVycm9yICgwLCAwLAorKwkJICAgICAgIF8oImNoYXJhY3RlciBvZmZzZXQgJXMgaXMgdG9vIGxhcmdlIiksIHF1b3RlIChiYWRfbnVtKSk7CisgCSAgICAgIGVsc2UKKyAJCWVycm9yICgwLCAwLAorIAkJICAgICAgIF8oImZpZWxkIG51bWJlciAlcyBpcyB0b28gbGFyZ2UiKSwgcXVvdGUgKGJhZF9udW0pKTsKK0BAIC00NzcsNyArNTU5LDcgQEAKKyAJICBmaWVsZHN0cisrOworIAl9CisgICAgICAgZWxzZQorLQlGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlIG9yIGZpZWxkIGxpc3QiKSk7CisrCUZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBsaXN0IikpOworICAgICB9CisgCisgICBtYXhfcmFuZ2VfZW5kcG9pbnQgPSAwOworQEAgLTU3MCw2ICs2NTIsNjMgQEAKKyAgICAgfQorIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrLyogVGhpcyBmdW5jdGlvbiBpcyBpbiB1c2UgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZS4KKysKKysgICAxLiBSZWFkIGZyb20gdGhlIHN0cmVhbSBTVFJFQU0sIHByaW50aW5nIHRvIHN0YW5kYXJkIG91dHB1dCBhbnkgc2VsZWN0ZWQKKysgICBjaGFyYWN0ZXJzLiAKKysKKysgICAyLiBSZWFkIGZyb20gc3RyZWFtIFNUUkVBTSwgcHJpbnRpbmcgdG8gc3RhbmRhcmQgb3V0cHV0IGFueSBzZWxlY3RlZCBieXRlcywKKysgICB3aXRob3V0IHNwbGl0dGluZyBtdWx0aWJ5dGUgY2hhcmFjdGVycy4gICovCisrIAorK3N0YXRpYyB2b2lkCisrY3V0X2NoYXJhY3RlcnNfb3JfY3V0X2J5dGVzX25vX3NwbGl0IChGSUxFICpzdHJlYW0pCisreworKyAgaW50IGlkeDsJCS8qIG51bWJlciBvZiBieXRlcyBvciBjaGFyYWN0ZXJzIGluIHRoZSBsaW5lIHNvIGZhci4gKi8KKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgY2hhciAqYnVmcG9zOwkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW47CS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgd2ludF90IHdjOwkJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CS8qIFRoZSBieXRlIHNpemUgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHdoaWNoIHNob3dzCisrCQkJICAgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrICBtYnN0YXRlX3Qgc3RhdGU7CS8qIFN0YXRlIG9mIHRoZSBzdHJlYW0uICovCisrICBpbnQgY29udmZhaWw7CQkvKiAxLCB3aGVuIGNvbnZlcnNpb24gaXMgZmFpbGVkLiBPdGhlcndpc2UgMC4gKi8KKysKKysgIGlkeCA9IDA7CisrICBidWZsZW4gPSAwOworKyAgYnVmcG9zID0gYnVmOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysgICAgICBHRVRfTkVYVF9XQ19GUk9NX0JVRkZFUiAod2MsIGJ1ZnBvcywgYnVmbGVuLCBtYmxlbmd0aCwgc3RhdGUsIGNvbnZmYWlsKTsKKysKKysgICAgICBpZiAod2MgPT0gV0VPRikKKysJeworKwkgIGlmIChpZHggPiAwKQorKwkgICAgcHV0Y2hhciAoJ1xuJyk7CisrCSAgYnJlYWs7CisrCX0KKysgICAgICBlbHNlIGlmICh3YyA9PSBMJ1xuJykKKysJeworKwkgIHB1dGNoYXIgKCdcbicpOworKwkgIGlkeCA9IDA7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBpZHggKz0gKG9wZXJhdGluZ19tb2RlID09IGJ5dGVfbW9kZSkgPyBtYmxlbmd0aCA6IDE7CisrCSAgaWYgKHByaW50X2t0aCAoaWR4LCBOVUxMKSkKKysJICAgIGZ3cml0ZSAoYnVmcG9zLCBtYmxlbmd0aCwgc2l6ZW9mKGNoYXIpLCBzdGRvdXQpOworKwl9CisrCisrICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKyAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysgICAgfQorK30KKysjZW5kaWYKKysJCSAgIAorIC8qIFJlYWQgZnJvbSBzdHJlYW0gU1RSRUFNLCBwcmludGluZyB0byBzdGFuZGFyZCBvdXRwdXQgYW55IHNlbGVjdGVkIGZpZWxkcy4gICovCisgCisgc3RhdGljIHZvaWQKK0BAIC02OTIsMTMgKzgzMSwxOTIgQEAKKyAgICAgfQorIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytjdXRfZmllbGRzX21iIChGSUxFICpzdHJlYW0pCisreworKyAgaW50IGM7CisrICB1bnNpZ25lZCBpbnQgZmllbGRfaWR4OworKyAgaW50IGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZDsKKysgIGludCBidWZmZXJfZmlyc3RfZmllbGQ7CisrICBpbnQgZW1wdHlfaW5wdXQ7CisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIGNoYXIgKmJ1ZnBvczsJCS8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICBzaXplX3QgYnVmbGVuOwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIHdpbnRfdCB3YyA9IDA7CS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlciB3aGljaCBzaG93cworKwkJCSAgIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKyAgbWJzdGF0ZV90IHN0YXRlOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQgPSAwOworKyAgZmllbGRfaWR4ID0gMTsKKysgIGJ1ZnBvcyA9IGJ1ZjsKKysgIGJ1ZmxlbiA9IDA7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgYyA9IGdldGMgKHN0cmVhbSk7CisrICBlbXB0eV9pbnB1dCA9IChjID09IEVPRik7CisrICBpZiAoYyAhPSBFT0YpCisrICAgIHVuZ2V0YyAoYywgc3RyZWFtKTsKKysgIGVsc2UKKysgICAgd2MgPSBXRU9GOworKworKyAgLyogVG8gc3VwcG9ydCB0aGUgc2VtYW50aWNzIG9mIHRoZSAtcyBmbGFnLCB3ZSBtYXkgaGF2ZSB0byBidWZmZXIKKysgICAgIGFsbCBvZiB0aGUgZmlyc3QgZmllbGQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgYGRlbGltaXRlZC4nCisrICAgICBCdXQgdGhhdCBpcyB1bm5lY2Vzc2FyeSBpZiBhbGwgbm9uLWRlbGltaXRlZCBsaW5lcyBtdXN0IGJlIHByaW50ZWQKKysgICAgIGFuZCB0aGUgZmlyc3QgZmllbGQgaGFzIGJlZW4gc2VsZWN0ZWQsIG9yIGlmIG5vbi1kZWxpbWl0ZWQgbGluZXMKKysgICAgIG11c3QgYmUgc3VwcHJlc3NlZCBhbmQgdGhlIGZpcnN0IGZpZWxkIGhhcyAqbm90KiBiZWVuIHNlbGVjdGVkLgorKyAgICAgVGhhdCBpcyBiZWNhdXNlIGEgbm9uLWRlbGltaXRlZCBsaW5lIGhhcyBleGFjdGx5IG9uZSBmaWVsZC4gICovCisrICBidWZmZXJfZmlyc3RfZmllbGQgPSAoc3VwcHJlc3Nfbm9uX2RlbGltaXRlZCBeICFwcmludF9rdGggKDEsIE5VTEwpKTsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgaWYgKGZpZWxkX2lkeCA9PSAxICYmIGJ1ZmZlcl9maXJzdF9maWVsZCkKKysJeworKwkgIGludCBsZW4gPSAwOworKworKwkgIHdoaWxlICgxKQorKwkgICAgeworKwkgICAgICBSRUZJTExfQlVGRkVSIChidWYsIGJ1ZnBvcywgYnVmbGVuLCBzdHJlYW0pOworKworKwkgICAgICBHRVRfTkVYVF9XQ19GUk9NX0JVRkZFUgorKwkJKHdjLCBidWZwb3MsIGJ1ZmxlbiwgbWJsZW5ndGgsIHN0YXRlLCBjb252ZmFpbCk7CisrCisrCSAgICAgIGlmICh3YyA9PSBXRU9GKQorKwkJYnJlYWs7CisrCisrCSAgICAgIGZpZWxkXzFfYnVmZmVyID0geHJlYWxsb2MgKGZpZWxkXzFfYnVmZmVyLCBsZW4gKyBtYmxlbmd0aCk7CisrCSAgICAgIG1lbWNweSAoZmllbGRfMV9idWZmZXIgKyBsZW4sIGJ1ZnBvcywgbWJsZW5ndGgpOworKwkgICAgICBsZW4gKz0gbWJsZW5ndGg7CisrCSAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysJICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKworKwkgICAgICBpZiAoIWNvbnZmYWlsICYmICh3YyA9PSBMJ1xuJyB8fCB3YyA9PSB3Y2RlbGltKSkKKysJCWJyZWFrOworKwkgICAgfQorKworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgYnJlYWs7CisrCisrCSAgLyogSWYgdGhlIGZpcnN0IGZpZWxkIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiBsaW5lIChpdCBpcyBub3QKKysJICAgICBkZWxpbWl0ZWQpIGFuZCB3ZSBhcmUgcHJpbnRpbmcgYWxsIG5vbi1kZWxpbWl0ZWQgbGluZXMsCisrCSAgICAgcHJpbnQgdGhpcyBvbmUuICAqLworKwkgIGlmIChjb252ZmFpbCB8fCAoIWNvbnZmYWlsICYmIHdjICE9IHdjZGVsaW0pKQorKwkgICAgeworKwkgICAgICBpZiAoc3VwcHJlc3Nfbm9uX2RlbGltaXRlZCkKKysJCXsKKysJCSAgLyogRW1wdHkuCSovCisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgZndyaXRlIChmaWVsZF8xX2J1ZmZlciwgc2l6ZW9mIChjaGFyKSwgbGVuLCBzdGRvdXQpOworKwkJICAvKiBNYWtlIHN1cmUgdGhlIG91dHB1dCBsaW5lIGlzIG5ld2xpbmUgdGVybWluYXRlZC4gICovCisrCQkgIGlmIChjb252ZmFpbCB8fCAoIWNvbnZmYWlsICYmIHdjICE9IEwnXG4nKSkKKysJCSAgICBwdXRjaGFyICgnXG4nKTsKKysJCX0KKysJICAgICAgY29udGludWU7CisrCSAgICB9CisrCisrCSAgaWYgKHByaW50X2t0aCAoMSwgTlVMTCkpCisrCSAgICB7CisrCSAgICAgIC8qIFByaW50IHRoZSBmaWVsZCwgYnV0IG5vdCB0aGUgdHJhaWxpbmcgZGVsaW1pdGVyLiAgKi8KKysJICAgICAgZndyaXRlIChmaWVsZF8xX2J1ZmZlciwgc2l6ZW9mIChjaGFyKSwgbGVuIC0gMSwgc3Rkb3V0KTsKKysJICAgICAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMTsKKysJICAgIH0KKysJICArK2ZpZWxkX2lkeDsKKysJfQorKworKyAgICAgIGlmICh3YyAhPSBXRU9GKQorKwl7CisrCSAgaWYgKHByaW50X2t0aCAoZmllbGRfaWR4LCBOVUxMKSkKKysJICAgIHsKKysJICAgICAgaWYgKGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCkKKysJCXsKKysJCSAgZndyaXRlIChvdXRwdXRfZGVsaW1pdGVyX3N0cmluZywgc2l6ZW9mIChjaGFyKSwKKysJCQkgIG91dHB1dF9kZWxpbWl0ZXJfbGVuZ3RoLCBzdGRvdXQpOworKwkJfQorKwkgICAgICBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQgPSAxOworKwkgICAgfQorKworKwkgIHdoaWxlICgxKQorKwkgICAgeworKwkgICAgICBSRUZJTExfQlVGRkVSIChidWYsIGJ1ZnBvcywgYnVmbGVuLCBzdHJlYW0pOworKworKwkgICAgICBHRVRfTkVYVF9XQ19GUk9NX0JVRkZFUgorKwkJKHdjLCBidWZwb3MsIGJ1ZmxlbiwgbWJsZW5ndGgsIHN0YXRlLCBjb252ZmFpbCk7CisrCisrCSAgICAgIGlmICh3YyA9PSBXRU9GKQorKwkJYnJlYWs7CisrCSAgICAgIGVsc2UgaWYgKCFjb252ZmFpbCAmJiAod2MgPT0gd2NkZWxpbSB8fCB3YyA9PSBMJ1xuJykpCisrCQl7CisrCQkgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysJCSAgYnVmcG9zICs9IG1ibGVuZ3RoOworKwkJICBicmVhazsKKysJCX0KKysKKysJICAgICAgaWYgKHByaW50X2t0aCAoZmllbGRfaWR4LCBOVUxMKSkKKysJCWZ3cml0ZSAoYnVmcG9zLCBtYmxlbmd0aCwgc2l6ZW9mKGNoYXIpLCBzdGRvdXQpOworKworKwkgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCSAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysJICAgIH0KKysJfQorKworKyAgICAgIGlmICgoIWNvbnZmYWlsIHx8IHdjID09IEwnXG4nKSAmJiBidWZsZW4gPCAxKQorKwl3YyA9IFdFT0Y7CisrCisrICAgICAgaWYgKCFjb252ZmFpbCAmJiB3YyA9PSB3Y2RlbGltKQorKwkrK2ZpZWxkX2lkeDsKKysgICAgICBlbHNlIGlmICh3YyA9PSBXRU9GIHx8ICghY29udmZhaWwgJiYgd2MgPT0gTCdcbicpKQorKwl7CisrCSAgaWYgKGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZAorKwkgICAgICB8fCAoIWVtcHR5X2lucHV0ICYmICEoc3VwcHJlc3Nfbm9uX2RlbGltaXRlZCAmJiBmaWVsZF9pZHggPT0gMSkpKQorKwkgICAgcHV0Y2hhciAoJ1xuJyk7CisrCSAgaWYgKHdjID09IFdFT0YpCisrCSAgICBicmVhazsKKysJICBmaWVsZF9pZHggPSAxOworKwkgIGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCA9IDA7CisrCX0KKysgICAgfQorK30KKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIGN1dF9zdHJlYW0gKEZJTEUgKnN0cmVhbSkKKyB7CistICBpZiAob3BlcmF0aW5nX21vZGUgPT0gYnl0ZV9tb2RlKQorLSAgICBjdXRfYnl0ZXMgKHN0cmVhbSk7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxICYmICFmb3JjZV9zaW5nbGVieXRlX21vZGUpCisrICAgIHsKKysgICAgICBzd2l0Y2ggKG9wZXJhdGluZ19tb2RlKQorKwl7CisrCWNhc2UgYnl0ZV9tb2RlOgorKwkgIGlmIChieXRlX21vZGVfY2hhcmFjdGVyX2F3YXJlKQorKwkgICAgY3V0X2NoYXJhY3RlcnNfb3JfY3V0X2J5dGVzX25vX3NwbGl0IChzdHJlYW0pOworKwkgIGVsc2UKKysJICAgIGN1dF9ieXRlcyAoc3RyZWFtKTsKKysJICBicmVhazsKKysKKysJY2FzZSBjaGFyYWN0ZXJfbW9kZToKKysJICBjdXRfY2hhcmFjdGVyc19vcl9jdXRfYnl0ZXNfbm9fc3BsaXQgKHN0cmVhbSk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgZmllbGRfbW9kZToKKysJICBjdXRfZmllbGRzX21iIChzdHJlYW0pOworKwkgIGJyZWFrOworKworKwlkZWZhdWx0OgorKwkgIGFib3J0ICgpOworKwl9CisrICAgIH0KKyAgIGVsc2UKKy0gICAgY3V0X2ZpZWxkcyAoc3RyZWFtKTsKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBmaWVsZF9tb2RlKQorKwljdXRfZmllbGRzIChzdHJlYW0pOworKyAgICAgIGVsc2UKKysJY3V0X2J5dGVzIChzdHJlYW0pOworKyAgICB9CisgfQorIAorIC8qIFByb2Nlc3MgZmlsZSBGSUxFIHRvIHN0YW5kYXJkIG91dHB1dC4KK0BAIC03NDgsNiArMTA2Niw4IEBACisgICBib29sIG9rOworICAgYm9vbCBkZWxpbV9zcGVjaWZpZWQgPSBmYWxzZTsKKyAgIGNoYXIgKnNwZWNfbGlzdF9zdHJpbmcgSUZfTElOVCg9IE5VTEwpOworKyAgY2hhciBtYmRlbGltW01CX0xFTl9NQVggKyAxXTsKKysgIHNpemVfdCBkZWxpbWxlbiA9IDA7CisgCisgICBpbml0aWFsaXplX21haW4gKCZhcmdjLCAmYXJndik7CisgICBwcm9ncmFtX25hbWUgPSBhcmd2WzBdOworQEAgLTc3MCw3ICsxMDkwLDYgQEAKKyAgICAgICBzd2l0Y2ggKG9wdGMpCisgCXsKKyAJY2FzZSAnYic6CistCWNhc2UgJ2MnOgorIAkgIC8qIEJ1aWxkIHRoZSBieXRlIGxpc3QuICovCisgCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IHVuZGVmaW5lZF9tb2RlKQorIAkgICAgRkFUQUxfRVJST1IgKF8oIm9ubHkgb25lIHR5cGUgb2YgbGlzdCBtYXkgYmUgc3BlY2lmaWVkIikpOworQEAgLTc3OCw2ICsxMDk3LDE0IEBACisgCSAgc3BlY19saXN0X3N0cmluZyA9IG9wdGFyZzsKKyAJICBicmVhazsKKyAKKysJY2FzZSAnYyc6CisrCSAgLyogQnVpbGQgdGhlIGNoYXJhY3RlciBsaXN0LiAqLworKwkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSB1bmRlZmluZWRfbW9kZSkKKysJICAgIEZBVEFMX0VSUk9SIChfKCJvbmx5IG9uZSB0eXBlIG9mIGxpc3QgbWF5IGJlIHNwZWNpZmllZCIpKTsKKysJICBvcGVyYXRpbmdfbW9kZSA9IGNoYXJhY3Rlcl9tb2RlOworKwkgIHNwZWNfbGlzdF9zdHJpbmcgPSBvcHRhcmc7CisrCSAgYnJlYWs7CisrCisgCWNhc2UgJ2YnOgorIAkgIC8qIEJ1aWxkIHRoZSBmaWVsZCBsaXN0LiAqLworIAkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSB1bmRlZmluZWRfbW9kZSkKK0BAIC03ODksMTAgKzExMTYsMzUgQEAKKyAJY2FzZSAnZCc6CisgCSAgLyogTmV3IGRlbGltaXRlci4gKi8KKyAJICAvKiBJbnRlcnByZXQgLWQgJycgdG8gbWVhbiBgdXNlIHRoZSBOVUwgYnl0ZSBhcyB0aGUgZGVsaW1pdGVyLicgICovCistCSAgaWYgKG9wdGFyZ1swXSAhPSAnXDAnICYmIG9wdGFyZ1sxXSAhPSAnXDAnKQorLQkgICAgRkFUQUxfRVJST1IgKF8oInRoZSBkZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiKSk7CistCSAgZGVsaW0gPSBvcHRhcmdbMF07CistCSAgZGVsaW1fc3BlY2lmaWVkID0gdHJ1ZTsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgICB7CisrCSAgICAgIGlmKE1CX0NVUl9NQVggPiAxKQorKwkJeworKwkJICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrCQkgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIGRlbGltbGVuID0gbWJydG93YyAoJndjZGVsaW0sIG9wdGFyZywgc3RybmxlbihvcHRhcmcsIE1CX0xFTl9NQVgpLCAmc3RhdGUpOworKworKwkJICBpZiAoZGVsaW1sZW4gPT0gKHNpemVfdCktMSB8fCBkZWxpbWxlbiA9PSAoc2l6ZV90KS0yKQorKwkJICAgICsrZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlOworKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgZGVsaW1sZW4gPSAoZGVsaW1sZW4gPCAxKSA/IDEgOiBkZWxpbWxlbjsKKysJCSAgICAgIGlmICh3Y2RlbGltICE9IEwnXDAnICYmICoob3B0YXJnICsgZGVsaW1sZW4pICE9ICdcMCcpCisrCQkJRkFUQUxfRVJST1IgKF8oInRoZSBkZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiKSk7CisrCQkgICAgICBtZW1jcHkgKG1iZGVsaW0sIG9wdGFyZywgZGVsaW1sZW4pOworKwkJICAgIH0KKysJCX0KKysKKysJICAgICAgaWYgKE1CX0NVUl9NQVggPD0gMSB8fCBmb3JjZV9zaW5nbGVieXRlX21vZGUpCisrI2VuZGlmCisrCQl7CisrCQkgIGlmIChvcHRhcmdbMF0gIT0gJ1wwJyAmJiBvcHRhcmdbMV0gIT0gJ1wwJykKKysJCSAgICBGQVRBTF9FUlJPUiAoXygidGhlIGRlbGltaXRlciBtdXN0IGJlIGEgc2luZ2xlIGNoYXJhY3RlciIpKTsKKysJCSAgZGVsaW0gPSAodW5zaWduZWQgY2hhcikgb3B0YXJnWzBdOworKwkJfQorKwkgICAgZGVsaW1fc3BlY2lmaWVkID0gdHJ1ZTsKKysJICB9CisgCSAgYnJlYWs7CisgCisgCWNhc2UgT1VUUFVUX0RFTElNSVRFUl9PUFRJT046CitAQCAtODA1LDYgKzExNTcsNyBAQAorIAkgIGJyZWFrOworIAorIAljYXNlICduJzoKKysJICBieXRlX21vZGVfY2hhcmFjdGVyX2F3YXJlID0gMTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSAncyc6CitAQCAtODI3LDcgKzExODAsNyBAQAorICAgaWYgKG9wZXJhdGluZ19tb2RlID09IHVuZGVmaW5lZF9tb2RlKQorICAgICBGQVRBTF9FUlJPUiAoXygieW91IG11c3Qgc3BlY2lmeSBhIGxpc3Qgb2YgYnl0ZXMsIGNoYXJhY3RlcnMsIG9yIGZpZWxkcyIpKTsKKyAKKy0gIGlmIChkZWxpbSAhPSAnXDAnICYmIG9wZXJhdGluZ19tb2RlICE9IGZpZWxkX21vZGUpCisrICBpZiAoZGVsaW1fc3BlY2lmaWVkICYmIG9wZXJhdGluZ19tb2RlICE9IGZpZWxkX21vZGUpCisgICAgIEZBVEFMX0VSUk9SIChfKCJhbiBpbnB1dCBkZWxpbWl0ZXIgbWF5IGJlIHNwZWNpZmllZCBvbmx5XAorICB3aGVuIG9wZXJhdGluZyBvbiBmaWVsZHMiKSk7CisgCitAQCAtODU0LDE1ICsxMjA3LDM0IEBACisgICAgIH0KKyAKKyAgIGlmICghZGVsaW1fc3BlY2lmaWVkKQorLSAgICBkZWxpbSA9ICdcdCc7CisrICAgIHsKKysgICAgICBkZWxpbSA9ICdcdCc7CisrI2lmZGVmIEhBVkVfTUJSVE9XQworKyAgICAgIHdjZGVsaW0gPSBMJ1x0JzsKKysgICAgICBtYmRlbGltWzBdID0gJ1x0JzsKKysgICAgICBtYmRlbGltWzFdID0gJ1wwJzsKKysgICAgICBkZWxpbWxlbiA9IDE7CisrI2VuZGlmCisrICAgIH0KKyAKKyAgIGlmIChvdXRwdXRfZGVsaW1pdGVyX3N0cmluZyA9PSBOVUxMKQorICAgICB7CistICAgICAgc3RhdGljIGNoYXIgZHVtbXlbMl07CistICAgICAgZHVtbXlbMF0gPSBkZWxpbTsKKy0gICAgICBkdW1teVsxXSA9ICdcMCc7CistICAgICAgb3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPSBkdW1teTsKKy0gICAgICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IDE7CisrI2lmZGVmIEhBVkVfTUJSVE9XQworKyAgICAgIGlmIChNQl9DVVJfTUFYID4gMSAmJiAhZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKwl7CisrCSAgb3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPSB4c3RyZHVwKG1iZGVsaW0pOworKwkgIG91dHB1dF9kZWxpbWl0ZXJfbGVuZ3RoID0gZGVsaW1sZW47CisrCX0KKysKKysgICAgICBpZiAoTUJfQ1VSX01BWCA8PSAxIHx8IGZvcmNlX3NpbmdsZWJ5dGVfbW9kZSkKKysjZW5kaWYKKysJeworKwkgIHN0YXRpYyBjaGFyIGR1bW15WzJdOyAKKysJICBkdW1teVswXSA9IGRlbGltOworKwkgIGR1bW15WzFdID0gJ1wwJzsKKysJICBvdXRwdXRfZGVsaW1pdGVyX3N0cmluZyA9IGR1bW15OworKwkgIG91dHB1dF9kZWxpbWl0ZXJfbGVuZ3RoID0gMTsKKysJfQorICAgICB9CisgCisgICBpZiAob3B0aW5kID09IGFyZ2MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtbHMteC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1scy14LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtbHMteC5wYXRjaApAQCAtMCwwICsxLDExNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gY29yZXV0aWxzLTYuOS9zcmMvbHMuYy5scy14CTIwMDctMDYtMTMgMTQ6Mjc6MzYuMDAwMDAwMDAwICswMTAwCisrKysgY29yZXV0aWxzLTYuOS9zcmMvbHMuYwkyMDA3LTA2LTEzIDE0OjI4OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTQxNTEsMTYgKzQxNTEsMTYgQEAKKyAgIHNpemVfdCBwb3MgPSAwOworICAgc2l6ZV90IGNvbHMgPSBjYWxjdWxhdGVfY29sdW1ucyAoZmFsc2UpOworICAgc3RydWN0IGNvbHVtbl9pbmZvIGNvbnN0ICpsaW5lX2ZtdCA9ICZjb2x1bW5faW5mb1tjb2xzIC0gMV07CistICBzaXplX3QgbmFtZV9sZW5ndGggPSBsZW5ndGhfb2ZfZmlsZV9uYW1lX2FuZF9mcmlsbHMgKGN3ZF9maWxlKTsKKysgIHN0cnVjdCBmaWxlaW5mbyBjb25zdCAqZiA9IHNvcnRlZF9maWxlWzBdOworKyAgc2l6ZV90IG5hbWVfbGVuZ3RoID0gbGVuZ3RoX29mX2ZpbGVfbmFtZV9hbmRfZnJpbGxzIChmKTsKKyAgIHNpemVfdCBtYXhfbmFtZV9sZW5ndGggPSBsaW5lX2ZtdC0+Y29sX2FyclswXTsKKyAKKyAgIC8qIFByaW50IGZpcnN0IGVudHJ5LiAgKi8KKy0gIHByaW50X2ZpbGVfbmFtZV9hbmRfZnJpbGxzIChjd2RfZmlsZSk7CisrICBwcmludF9maWxlX25hbWVfYW5kX2ZyaWxscyAoZik7CisgCisgICAvKiBOb3cgdGhlIHJlc3QuICAqLworICAgZm9yIChmaWxlc25vID0gMTsgZmlsZXNubyA8IGN3ZF9uX3VzZWQ7ICsrZmlsZXNubykKKyAgICAgeworLSAgICAgIHN0cnVjdCBmaWxlaW5mbyBjb25zdCAqZjsKKyAgICAgICBzaXplX3QgY29sID0gZmlsZXNubyAlIGNvbHM7CisgCisgICAgICAgaWYgKGNvbCA9PSAwKQorLS0tIGNvcmV1dGlscy02LjkvdGVzdHMvbHMvTWFrZWZpbGUuYW0ubHMteAkyMDA3LTAzLTE4IDIxOjM2OjQzLjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjkvdGVzdHMvbHMvTWFrZWZpbGUuYW0JMjAwNy0wNi0xMyAxNDoyODo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNCw3ICsyNCw3IEBACisgICBzdGF0LWR0eXBlIFwKKyAgIGlub2RlIGRhbmdsZSBmaWxlLXR5cGUgcmVjdXJzaXZlIGRpcmVkIGluZmxvb3AgXAorICAgcnQtMSB0aW1lLTEgc3ltbGluay1zbGFzaCBmb2xsb3ctc2xpbmsgbm8tYXJnIG0tb3B0aW9uIFwKKy0gIHN0YXQtdnMtZGlyZW50CisrICBzdGF0LXZzLWRpcmVudCB4LW9wdGlvbgorIAorIEVYVFJBX0RJU1QgPSAkKFRFU1RTKQorIFRFU1RTX0VOVklST05NRU5UID0gXAorLS0tIC9kZXYvbnVsbAkyMDA3LTA2LTEzIDA4OjQzOjUxLjk5MzI2MzM4MiArMDEwMAorKysrIGNvcmV1dGlscy02LjkvdGVzdHMvbHMveC1vcHRpb24JMjAwNy0wNi0xMyAxNDoyODo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNTkgQEAKKysjIS9iaW4vc2gKKysjIEV4ZXJjaXNlIHRoZSAteCBvcHRpb24uCisrCisrIyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyMgMDIxMTAtMTMwMSwgVVNBLgorKworK2lmIHRlc3QgIiRWRVJCT1NFIiA9IHllczsgdGhlbgorKyAgc2V0IC14CisrICBscyAtLXZlcnNpb24KKytmaQorKworKy4gJHNyY2Rpci8uLi9lbnZ2YXItY2hlY2sKKysuICRzcmNkaXIvLi4vbGFuZy1kZWZhdWx0CisrCisrcHdkPWBwd2RgCisrdDA9YGVjaG8gIiQwInxzZWQgJ3MsLiovLCwnYC50bXA7IHRtcD0kdDAvJCQKKyt0cmFwICdzdGF0dXM9JD87IGNkICIkcHdkIiAmJiBjaG1vZCAtUiB1K3J3eCAkdDAgJiYgcm0gLXJmICR0MCAmJiBleGl0ICRzdGF0dXMnIDAKKyt0cmFwICcoZXhpdCAkPyk7IGV4aXQgJD8nIDEgMiAxMyAxNQorKworK2ZyYW1ld29ya19mYWlsdXJlPTAKKytta2RpciAtcCAkdG1wIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKytjZCAkdG1wIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKytta2RpciBzdWJkaXIgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorK3RvdWNoIHN1YmRpci9iIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKyt0b3VjaCBzdWJkaXIvYSB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrCisraWYgdGVzdCAkZnJhbWV3b3JrX2ZhaWx1cmUgPSAxOyB0aGVuCisrICBlY2hvICIkMDogZmFpbHVyZSBpbiB0ZXN0aW5nIGZyYW1ld29yayIgMT4mMgorKyAgKGV4aXQgMSk7IGV4aXQgMQorK2ZpCisrCisrZmFpbD0wCisrCisrIyBDb3JldXRpbHMgNi44IGFuZCA2Ljkgd291bGQgb3V0cHV0IHRoaXMgaW4gdGhlIHdyb25nIG9yZGVyLgorK2xzIC14IHN1YmRpciA+IG91dCB8fCBmYWlsPTEKKytscyAtcnggc3ViZGlyID4+IG91dCB8fCBmYWlsPTEKKytjYXQgPDxcRU9GID4gZXhwIHx8IGZhaWw9MQorK2EgIGIKKytiICBhCisrRU9GCisrCisrY21wIG91dCBleHAgfHwgZmFpbD0xCisrdGVzdCAkZmFpbCA9IDEgJiYgZGlmZiBvdXQgZXhwIDI+IC9kZXYvbnVsbAorKworKyhleGl0ICRmYWlsKTsgZXhpdCAkZmFpbAorLS0tIGNvcmV1dGlscy02LjkvTkVXUy5scy14CTIwMDctMDMtMjIgMjE6MTk6NDUuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOS9ORVdTCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMTMsNiArMTMsMTEgQEAKKyAgIFVzaW5nIHByIC1tIC1zIChpLmUuIG1lcmdpbmcgZmlsZXMsIHdpdGggVEFCIGFzIHRoZSBvdXRwdXQgc2VwYXJhdG9yKQorICAgbm8gbG9uZ2VyIGluc2VydHMgZXh0cmFuZW91cyBzcGFjZXMgYmV0d2VlbiBvdXRwdXQgY29sdW1ucy4KKyAKKysqKiBCdWcgZml4ZXMKKysKKysgIGxzIC14IERJUiB3b3VsZCBzb21ldGltZXMgb3V0cHV0IHRoZSB3cm9uZyBzdHJpbmcgaW4gcGxhY2Ugb2YgdGhlCisrICBmaXJzdCBlbnRyeS4gIFtpbnRyb2R1Y2VkIGluIGNvcmV1dGlscy02LjhdCisrCisgCisgKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSA2LjggKDIwMDctMDItMjQpIFtub3QtdW5zdGFibGVdCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwNzRjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGlzIHBhdGNoIHdhcyBpbXBvcnRlZCBmcm9tIHRoZSBGZWRvcmEgQ29yZSA4IGNvcmV1dGlscy02LjktOSBwYWNrYWdlLgorCitUaGUgcGFja2FnZSBpcyBzdGF0ZWQgYXMgYmVpbmcgTGljZW5zZWQgYXMgR1BMdjIrLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBjb3JldXRpbHMtNS4yLjEvc3JjL3doby5jLm92ZXJmbG93CTIwMDUtMDUtMjUgMDk6NTk6MDYuMDAwMDAwMDAwICswMTAwCisrKysgY29yZXV0aWxzLTUuMi4xL3NyYy93aG8uYwkyMDA1LTA1LTI1IDEwOjAwOjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTc1LDcgKzc1LDcgQEAKKyAjIGRlZmluZSBORVdfVElNRSAwCisgI2VuZGlmCisgCistI2RlZmluZSBJRExFU1RSX0xFTiA2CisrI2RlZmluZSBJRExFU1RSX0xFTiAxMAorIAorICNpZiBIQVZFX1NUUlVDVF9YVE1QX1VUX1BJRAorICMgZGVmaW5lIFBJRFNUUl9ERUNMX0FORF9JTklUKFZhciwgVXRtcF9lbnQpIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzMwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5hYzo0MDogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2FjbG9jYWwtMS4xMi9wcm90b3MubTQ6MTI6IEFNX0NfUFJPVE9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LWxpbnV4L2NvcmV1dGlscy1uYXRpdmUtNi45LXIyL2NvcmV1dGlscy02LjkvbTQvam0tbWFjcm9zLm00OjEzODogZ2xfQ0hFQ0tfQUxMX1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtbGludXgvY29yZXV0aWxzLW5hdGl2ZS02LjktcjIvY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQ6MjQ6IGNvcmV1dGlsc19NQUNST1MgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6NDA6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBjb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvcmV1dGlscy02Ljkub3JpZy9tNC9qbS1tYWNyb3MubTQKKysrKyBjb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNAorQEAgLTE0MiwxMSArMTQyLDYgQEAgQUNfREVGVU4oW2dsX0NIRUNLX0FMTF9UWVBFU10sCisgICBkbmwgd2hldGhlciBmdW5jdGlvbnMgYW5kIGhlYWRlcnMgYXJlIGF2YWlsYWJsZSwgd2hldGhlciB0aGV5IHdvcmssIGV0Yy4KKyAgIEFDX1JFUVVJUkUoW0FDX1NZU19MQVJHRUZJTEVdKQorIAorLSAgZG5sIFRoaXMgdGVzdCBtdXN0IHByZWNlZGUgdGVzdHMgb2YgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzIGxpa2UKKy0gIGRubCB0aGF0IGZvciB0aGUgaW5saW5lIGtleXdvcmQsIHNpbmNlIGl0IG1heSBjaGFuZ2UgdGhlIGRlZ3JlZSB0bworLSAgZG5sIHdoaWNoIHRoZSBjb21waWxlciBzdXBwb3J0cyBzdWNoIGZlYXR1cmVzLgorLSAgQUNfUkVRVUlSRShbQU1fQ19QUk9UT1RZUEVTXSkKKy0KKyAgIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorICAgQUNfUkVRVUlSRShbQUNfQ19CSUdFTkRJQU5dKQorICAgQUNfUkVRVUlSRShbQUNfQ19WT0xBVElMRV0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkNjAwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2ZpeF9mb3JfbWFucGFnZV9idWlsZGluZy5wYXRjaApAQCAtMCwwICsxLDg1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitVc2UgbmF0aXZlIGNvcmV1dGlscyBiaW5hcmllcyB0byBidWlsZCBtYW5wYWdlcyBpbiBjcm9zcyBlbnZpcm9ubWVudC4KK1RoaXMgYXZvaWRzIG1hbiBwYWdlIGJ1aWxkIGlzc3VlcyBsaWtlIHRoaXM6CisKK3wgTWFraW5nIGFsbCBpbiBtYW4KK3wgbWFrZVsxXTogRW50ZXJpbmcgZGlyZWN0b3J5IGAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvY29yZXV0aWxzLTYuOS1yMC9jb3JldXRpbHMtNi45L21hbicKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgY3V0LjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgZGlyLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgZXhwYW5kLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgZm9sZC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGluc3RhbGwuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBqb2luLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgcHIuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBscy4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHNvcnQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSB1bmV4cGFuZC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHVuaXEuMQorfCBVcGRhdGluZyBtYW4gcGFnZSB3aG8uMQorfCBVcGRhdGluZyBtYW4gcGFnZSB2ZGlyLjEKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gZGlyLnRkL2RpcgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBjdXQudGQvY3V0Cit8IG1ha2VbMV06ICoqKiBbZGlyLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBmb2xkLnRkL2ZvbGQKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gaW5zdGFsbC50ZC9pbnN0YWxsCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGV4cGFuZC50ZC9leHBhbmQKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gam9pbi50ZC9qb2luCit8IG1ha2VbMV06ICoqKiBbY3V0LjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW2ZvbGQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbaW5zdGFsbC4xXSBFcnJvciAxMjYKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gc29ydC50ZC9zb3J0Cit8IG1ha2VbMV06ICoqKiBbZXhwYW5kLjFdIEVycm9yIDEyNgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBwci50ZC9wcgorfCBtYWtlWzFdOiAqKiogW2pvaW4uMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGxzLnRkL2xzCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHVuZXhwYW5kLnRkL3VuZXhwYW5kCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHVuaXEudGQvdW5pcQorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB3aG8udGQvd2hvCit8IG1ha2VbMV06ICoqKiBbc29ydC4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFtwci4xXSBFcnJvciAxMjYKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gdmRpci50ZC92ZGlyCit8IG1ha2VbMV06ICoqKiBbbHMuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbdW5pcS4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFt1bmV4cGFuZC4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFt3aG8uMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbdmRpci4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9jb3JldXRpbHMtNi45LXIwL2NvcmV1dGlscy02LjkvbWFuJworfCBtYWtlOiAqKiogW2FsbC1yZWN1cnNpdmVdIEVycm9yIDEKK3wgRkFUQUw6IG9lX3J1bm1ha2UgZmFpbGVkCit8IEVSUk9SOiBGdW5jdGlvbiAnZG9fY29tcGlsZScgZmFpbGVkIChzZWUgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2NvcmV1dGlscy02LjktcjAvdGVtcC9sb2cuZG9fY29tcGlsZS4xMjc4MCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbikKK05PVEU6IHBhY2thZ2UgY29yZXV0aWxzLTYuOS1yMDogdGFzayBkb19jb21waWxlOiBGYWlsZWQKK0VSUk9SOiBUYXNrIDggKC9ob21lL25pdGluL3Byai9wb2t5LmdpdC9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYiwgZG9fY29tcGlsZSkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICcxJworCisKK1RoaXMgcGF0Y2ggaXMgbWFkZSBmb3IgZ3BsdjIgY29yZXV0aWxzIHRoZSByZWNpcGUKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzAzLzE3CisKK0luZGV4OiBtYW4vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL21hbi5vcmlnL01ha2VmaWxlLmFtCisrKysgYi9tYW4vTWFrZWZpbGUuYW0KK0BAIC0xNjcsNyArMTY3LDcgQEAgbWFwcGVkX25hbWUgPSBgZWNobyAkKnxzZWQgJ3MvaW5zdGFsbC9naQorIAkgICAgICAgICAgICAkKFBFUkwpIC0tICQoc3JjZGlyKS9oZWxwMm1hbgkJXAorIAkgICAgICAgICAgICAgLS1zb3VyY2U9JyQoUEFDS0FHRV9TVFJJTkcpJwkJXAorIAkgICAgICAgICAgICAgLS1pbmNsdWRlPSQoc3JjZGlyKS8kKi54CQkJXAorLQkgICAgICAgICAgICAgLS1vdXRwdXQ9JHQvJEAgJHQvJCo7CQkJXAorKwkgICAgICAgICAgICAgLS1vdXRwdXQ9JHQvJEAgJCo7CQkJXAorIAkgICAgICAgfQkJCQkJCVwKKyAJICAgICYmIHNlZCAnc3wkKlwudGQvfHxnJyAkdC8kQCA+ICRACQkJXAorIAkgICAgJiYgY2htb2QgYS13ICRACQkJCQlcCitJbmRleDogbWFuL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9tYW4ub3JpZy9NYWtlZmlsZS5pbgorKysrIGIvbWFuL01ha2VmaWxlLmluCitAQCAtODY1LDcgKzg2NSw3IEBAIHllcy4xOgkJJChjb21tb25fZGVwKQkkKHNyY2RpcikveWVzLngJCS4KKyAJICAgICAgICAgICAgJChQRVJMKSAtLSAkKHNyY2RpcikvaGVscDJtYW4JCVwKKyAJICAgICAgICAgICAgIC0tc291cmNlPSckKFBBQ0tBR0VfU1RSSU5HKScJCVwKKyAJICAgICAgICAgICAgIC0taW5jbHVkZT0kKHNyY2RpcikvJCoueAkJCVwKKy0JICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICR0LyQqOwkJCVwKKysJICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICQqOwkJCVwKKyAJICAgICAgIH0JCQkJCQlcCisgCSAgICAmJiBzZWQgJ3N8JCpcLnRkL3x8ZycgJHQvJEAgPiAkQAkJCVwKKyAJICAgICYmIGNobW9kIGEtdyAkQAkJCQkJXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZnV0aW1lbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9mdXRpbWVucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E1OTBiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZnV0aW1lbnMucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworIyBjb3JldXRpbHMgdXNlcyBnbnVsaWIgd2hpY2ggY29uZmxpY3RzIHdpdGggbmV3ZXIgbGliYyBoZWFkZXIgb24gZnV0aW1lbnMKKyMgdGhpcyBwYXRjaCBzaW1wbHkgcmVuYW1lcyBjb3JldXRpbHMgZnV0aW1lcyB0byBhdm9pZCBjb25mbGljdGlvbgorIworIyBTaWduZWQtb2ZmLWJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xOAorIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKKworZGlmZiAtLWdpdCBhL2xpYi91dGltZW5zLmMgYi9saWIvdXRpbWVucy5jCitpbmRleCA3MWJjNTEwLi5hZTg3MGI4IDEwMDY0NAorLS0tIGEvbGliL3V0aW1lbnMuYworKysrIGIvbGliL3V0aW1lbnMuYworQEAgLTc1LDcgKzc1LDcgQEAgc3RydWN0IHV0aW1idWYKKyAgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSAoc2V0dGluZyBlcnJubykgb24gZmFpbHVyZS4gICovCisgCisgaW50CistZnV0aW1lbnMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorK2Z1dGltZW5zX2NvcmV1dGlscyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisgCSAgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKyAgIC8qIFNvbWUgTGludXgtYmFzZWQgTkZTIGNsaWVudHMgYXJlIGJ1Z2d5LCBhbmQgbWlzaGFuZGxlIHRpbWUgc3RhbXBzCitAQCAtMTg1LDUgKzE4NSw1IEBAIGZ1dGltZW5zIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKyBpbnQKKyB1dGltZW5zIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworLSAgcmV0dXJuIGZ1dGltZW5zICgtMSwgZmlsZSwgdGltZXNwZWMpOworKyAgcmV0dXJuIGZ1dGltZW5zX2NvcmV1dGlscyAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKyB9CitkaWZmIC0tZ2l0IGEvbGliL3V0aW1lbnMuaCBiL2xpYi91dGltZW5zLmgKK2luZGV4IDAwOTdhYWEuLjEzZmM0NWEgMTAwNjQ0CistLS0gYS9saWIvdXRpbWVucy5oCisrKysgYi9saWIvdXRpbWVucy5oCitAQCAtMSwzICsxLDMgQEAKKyAjaW5jbHVkZSA8dGltZS5oPgorLWludCBmdXRpbWVucyAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworK2ludCBmdXRpbWVuc19jb3JldXRpbHMgKGludCwgY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKKyBpbnQgdXRpbWVucyAoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKK2RpZmYgLS1naXQgYS9zcmMvY29weS5jIGIvc3JjL2NvcHkuYworaW5kZXggNGJkYjc1Yy4uMDQ2MzRmMSAxMDA2NDQKKy0tLSBhL3NyYy9jb3B5LmMKKysrKyBiL3NyYy9jb3B5LmMKK0BAIC01MTgsNyArNTE4LDcgQEAgY29weV9yZWcgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAgICAgICB0aW1lc3BlY1swXSA9IGdldF9zdGF0X2F0aW1lIChzcmNfc2IpOworICAgICAgIHRpbWVzcGVjWzFdID0gZ2V0X3N0YXRfbXRpbWUgKHNyY19zYik7CisgCistICAgICAgaWYgKGZ1dGltZW5zIChkZXN0X2Rlc2MsIGRzdF9uYW1lLCB0aW1lc3BlYykgIT0gMCkKKysgICAgICBpZiAoZnV0aW1lbnNfY29yZXV0aWxzIChkZXN0X2Rlc2MsIGRzdF9uYW1lLCB0aW1lc3BlYykgIT0gMCkKKyAJeworIAkgIGVycm9yICgwLCBlcnJubywgXygicHJlc2VydmluZyB0aW1lcyBmb3IgJXMiKSwgcXVvdGUgKGRzdF9uYW1lKSk7CisgCSAgaWYgKHgtPnJlcXVpcmVfcHJlc2VydmUpCitkaWZmIC0tZ2l0IGEvc3JjL3RvdWNoLmMgYi9zcmMvdG91Y2guYworaW5kZXggYTc5YzI2ZC4uNmVmMzE3ZCAxMDA2NDQKKy0tLSBhL3NyYy90b3VjaC5jCisrKysgYi9zcmMvdG91Y2guYworQEAgLTE4Miw3ICsxODIsNyBAQCB0b3VjaCAoY29uc3QgY2hhciAqZmlsZSkKKyAgICAgICB0ID0gdGltZXNwZWM7CisgICAgIH0KKyAKKy0gIG9rID0gKGZ1dGltZW5zIChmZCwgKGZkID09IFNURE9VVF9GSUxFTk8gPyBOVUxMIDogZmlsZSksIHQpID09IDApOworKyAgb2sgPSAoZnV0aW1lbnNfY29yZXV0aWxzIChmZCwgKGZkID09IFNURE9VVF9GSUxFTk8gPyBOVUxMIDogZmlsZSksIHQpID09IDApOworIAorICAgaWYgKGZkID09IFNURElOX0ZJTEVOTykKKyAgICAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzU1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9nbnVsaWJfbTQucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworIyByZW1vdmUgdGhlIGxpbmUgdG8gY2F1c2UgcmVjdXJzaXZlIGluY2x1c2lvbiBlcnJvciBmcm9tIGF1dG9yZWNvbmYsIHNpY25lCisjIG5ld2VyIGF1dG9jb25mIGhhcyBpbmNsdWRlZCB0aGlzIGRlZmluaXRpb24uIFNpbXBseSByZW5hbWUgaXQgaGVyZS4KKyMKKyMgU2lnbmVkLW9mZi1ieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKK2RpZmYgLS1naXQgYS9leHRlbnNpb25zLm00IGIvZXh0ZW5zaW9ucy5tNAoraW5kZXggMTQzYTllNS4uZjY1NThmMSAxMDA2NDQKKy0tLSBhL200L2V4dGVuc2lvbnMubTQKKysrKyBiL200L2V4dGVuc2lvbnMubTQKK0BAIC0xNiw3ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisrQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU19EVU1NWV0sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCisgICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MmNiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9tYW4tdG91Y2gucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworIyBtYW4gcGFnZSBmb3IgJ3RvdWNoJyBpcyBnZW5lcmF0ZWQgZGlmZmVyZW50bHkgZnJvbSBvdGhlcnMuIEFsbCBvdGhlciB1dGlsaXRpZXMKKyMgYXJlIHByb3ZpZGVkIHN0YXRpYyBtYW4gc291cmNlIGZpbGVzLCB3aGlsZSBmb3IgJ3RvdWNoJyBpdCByZXF1aXJlcyBoZWxwMm1hbgorIyB0byBpbnZva2UgInRvdWNoIC0taGVscCIgYW5kIHRoZW4gY29udmVydCB0aGUgb3V0cHV0IGludG8gdGhlIG1hbnVhbC4gU2luY2UgdG91Y2gKKyMgaXMgd2l0aCB0YXJnZXQgZm9ybWF0IHdoaWNoIGNhbid0IGJlIGludm9rZWQgb24gYnVpbGQgc3lzdGVtLCBkaXNhYmxlIGJ1aWxkaW5nCisjICd0b3VjaCcgbWFuIHBhZ2UgaGVyZS4KKyMKKyMgU2lnbmVkLW9mZi1ieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKK2RpZmYgLS1naXQgYS9tYW4vTWFrZWZpbGUuYW0gYi9tYW4vTWFrZWZpbGUuYW0KK2luZGV4IDMyZGY5ZDEuLjM3YjA5ZTMgMTAwNjQ0CistLS0gYS9tYW4vTWFrZWZpbGUuYW0KKysrKyBiL21hbi9NYWtlZmlsZS5hbQorQEAgLTI3LDcgKzI3LDcgQEAgZGlzdF9tYW5fTUFOUyA9IFwKKyAgIHBhc3RlLjEgcGF0aGNoay4xIHByLjEgcHJpbnRlbnYuMSBwcmludGYuMSBwdHguMSBwd2QuMSByZWFkbGluay4xIFwKKyAgIHJtLjEgcm1kaXIuMSBzZXEuMSBzaGExc3VtLjEgc2hhMjI0c3VtLjEgc2hhMjU2c3VtLjEgc2hhMzg0c3VtLjEgc2hhNTEyc3VtLjEgXAorICAgc2hyZWQuMSBzaHVmLjEgc2xlZXAuMSBzb3J0LjEgc3BsaXQuMSBzdGF0LjEgXAorLSAgc3UuMSBzdW0uMSBzeW5jLjEgdGFjLjEgdGFpbC4xIHRlZS4xIHRlc3QuMSB0b3VjaC4xIHRyLjEgdHJ1ZS4xIHRzb3J0LjEgXAorKyAgc3UuMSBzdW0uMSBzeW5jLjEgdGFjLjEgdGFpbC4xIHRlZS4xIHRlc3QuMSB0ci4xIHRydWUuMSB0c29ydC4xIFwKKyAgIHR0eS4xIHVuZXhwYW5kLjEgdW5pcS4xIHVubGluay4xIHZkaXIuMSB3Yy4xIFwKKyAgIHdob2FtaS4xIHllcy4xICQoTUFOKQorIG9wdGlvbmFsX21hbnMgPSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxYWU1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9maXgtc2VsaW51eC1mbGFzay5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGExZDM2MDUwOWZhM2E0YWZmNTdlZWRjZDUyOGNjMDM0N2E4NzUzMWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTYgU2VwIDIwMTQgMDE6NTk6MDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ251bGliLWNvbXAubTQ6IHNlbGludXgvZmxhc2suaCBzaG91bGQgcmVzcGVjdCB0bworIHdpdGhfc2VsaW51eAorCitGaXhlZCB3aGVuIGJ1aWxkIHdpdGggbWV0YS1zZWxpbnV4IGV2ZW4gd2hlbiAtLXdpdGhvdXQtc2VsaW51eDoKK3J1bmNvbi5jOjQ5OjI4OiBmYXRhbCBlcnJvcjogc2VsaW51eC9mbGFzay5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgIyBpbmNsdWRlIDxzZWxpbnV4L2ZsYXNrLmg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorY29tcGlsYXRpb24gdGVybWluYXRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbTQvZ251bGliLWNvbXAubTQgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tNC9nbnVsaWItY29tcC5tNCBiL200L2dudWxpYi1jb21wLm00CitpbmRleCA0NzJkM2EwLi41ZjA5NzM0IDEwMDY0NAorLS0tIGEvbTQvZ251bGliLWNvbXAubTQKKysrKyBiL200L2dudWxpYi1jb21wLm00CitAQCAtMTczMCwxMSArMTczMCwxMSBAQCBBQ19ERUZVTihbZ2xfSU5JVF0sCisgICAgIEFDX0xJQk9CSihbc2VsZWN0XSkKKyAgIGZpCisgICBnbF9TWVNfU0VMRUNUX01PRFVMRV9JTkRJQ0FUT1IoW3NlbGVjdF0pCistICBBQ19DSEVDS19IRUFERVJTKFtzZWxpbnV4L2ZsYXNrLmhdKQorICAgQUNfTElCT0JKKFtzZWxpbnV4LWF0XSkKKyAgIGdsX0hFQURFUlNfU0VMSU5VWF9TRUxJTlVYX0gKKyAgIGdsX0hFQURFUlNfU0VMSU5VWF9DT05URVhUX0gKKyAgIGlmIHRlc3QgIiR3aXRoX3NlbGludXgiICE9IG5vICYmIHRlc3QgIiRhY19jdl9oZWFkZXJfc2VsaW51eF9zZWxpbnV4X2giID0geWVzOyB0aGVuCisrICAgIEFDX0NIRUNLX0hFQURFUlMoW3NlbGludXgvZmxhc2suaF0pCisgICAgIEFDX0xJQk9CSihbZ2V0ZmlsZWNvbl0pCisgICBmaQorICAgZ2xfU0VSVkVOVAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg5NmExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L21hbi1kZWNvdXBsZS1tYW5wYWdlcy1mcm9tLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gYjRkMjU4NjI5ZjA5MDA2Njc4M2MzYjRjOTFiNDBmNjNiOWQwYTI5NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCA4IEZlYiAyMDE1IDE2OjUxOjU3IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1hbjogZGVjb3VwbGUgbWFucGFnZXMgZnJvbSBidWlsZAorCitUaGUgdXNlIG9mICJoZWxwMm1hbiIgZG9lc24ndCB3b3JrIGF0IGFsbCBmb3IgY3Jvc3MgY29tcGlsZSwgaW4KK2FkZGl0aW9uIHRvIHRoZSBleHRyYSByZXF1aXJlbWVudCBvZiBwZXJsIGl0IGFkZHMuCisKK0p1c3QgZGVjb3VwbGUgdGhlIG1hbnBhZ2VzIGZyb20gdGhlIGJ1aWxkIGluIG9yZGVyIHRvIHBhdmUgdGhlIHdheSBmb3IKK2ltcG9ydGluZyBwcmVidWlsdCBtYW5wYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgY3Jvc3MgYnVpbGQgc2l0dWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGRvZXNuJ3QgY2FyZSBhYm91dCB4LWNvbXBpbGUgY2FzZS5dCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGZiNGFmMjcuLjc1NzZiMmMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yMTQsNSArMjE0LDQgQEAgQU1fQ1BQRkxBR1MgPSAtSWxpYiAtSSQodG9wX3NyY2RpcikvbGliIC1Jc3JjIC1JJCh0b3Bfc3JjZGlyKS9zcmMKKyBpbmNsdWRlICQodG9wX3NyY2RpcikvbGliL2xvY2FsLm1rCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9kb2MvbG9jYWwubWsKKy1pbmNsdWRlICQodG9wX3NyY2RpcikvbWFuL2xvY2FsLm1rCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Rlc3RzL2xvY2FsLm1rCistLSAKKzIuMi4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmOGE1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1dlIGhhdmUgcHJvYmxlbSB1c2luZyBoYXJkY29kZWQgZGlyZWN0b3JpZXMgbGlrZSAvdXNyL2xvY2FsIGhlcmUKK3doaWNoIHdpbGwgYmUgY2hlY2tlZCBmb3IgY3Jvc3MgYnVpbGRzLiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHdoaWNoCitpcyB2YWxpZCBmb3IgQUlYIG9ubHkuIFdlIGRvIG5vdCBoYXZlIEFJWCBhcyBvbmUgb2Ygb3VyIHN1cHBvcnRlZAorYnVpbGQgaG9zdCBvciB0YXJnZXQuIFRoZXJlZm9yZSB3ZSBnZXQgcmlkIG9mIHRoZSBoYXJkY29kZWQgcGF0aHMKK2FuZCBtYWtlIGxpZmUgZWFzaWVyIGZvciBjcm9zcyBjb21waWxhdGlvbiBwcm9jZXNzLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Vwc3RyZWFtIGRvZXMgY2FyZSBmb3IgQUlYIHdoaWxlIHdlIG1heSBub3RdCisKK0luZGV4OiBjb3JldXRpbHMtOC4xNC9tNC9nZXRsb2FkYXZnLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29yZXV0aWxzLTguMTQub3JpZy9tNC9nZXRsb2FkYXZnLm00CTIwMTEtMDktMTkgMDg6MDk6MjQuMDAwMDAwMDAwIC0wNzAwCisrKysgY29yZXV0aWxzLTguMTQvbTQvZ2V0bG9hZGF2Zy5tNAkyMDExLTEwLTE5IDIxOjQyOjAwLjM4NTUzMzM1NyAtMDcwMAorQEAgLTQxLDE2ICs0MSw2IEBACisgICAgICAgIFtMSUJTPSItbHV0aWwgJExJQlMiIGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lPXllc10pCisgICAgZmkKKyAKKy0gICBpZiB0ZXN0ICRnbF9mdW5jX2dldGxvYWRhdmdfZG9uZSA9IG5vOyB0aGVuCistICAgICAjIFRoZXJlIGlzIGEgY29tbW9ubHkgYXZhaWxhYmxlIGxpYnJhcnkgZm9yIFJTLzYwMDAgQUlYLgorLSAgICAgIyBTaW5jZSBpdCBpcyBub3QgYSBzdGFuZGFyZCBwYXJ0IG9mIEFJWCwgaXQgbWlnaHQgYmUgaW5zdGFsbGVkIGxvY2FsbHkuCistICAgICBnbF9nZXRsb2FkYXZnX0xJQlM9JExJQlMKKy0gICAgIExJQlM9Ii1ML3Vzci9sb2NhbC9saWIgJExJQlMiCistICAgICBBQ19DSEVDS19MSUIoW2dldGxvYWRhdmddLCBbZ2V0bG9hZGF2Z10sCistICAgICAgICAgICAgICAgICAgW0xJQlM9Ii1sZ2V0bG9hZGF2ZyAkTElCUyIgZ2xfZnVuY19nZXRsb2FkYXZnX2RvbmU9eWVzXSwKKy0gICAgICAgICAgICAgICAgICBbTElCUz0kZ2xfZ2V0bG9hZGF2Z19MSUJTXSkKKy0gICBmaQorLQorICAgICMgU2V0IHVwIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBpZiBuZWNlc3NhcnkuCisgICAgaWYgdGVzdCAkZ2xfZnVuY19nZXRsb2FkYXZnX2RvbmUgPSBubzsgdGhlbgorICAgICAgSEFWRV9HRVRMT0FEQVZHPTAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmMWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiCkBAIC0wLDAgKzEsMTAyIEBACitTVU1NQVJZID0gIlRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBtYW5pcHVsYXRpb24gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBDb3JlIFV0aWxpdGllcyBwcm92aWRlIHRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBcCittYW5pcHVsYXRpb24gdXRpbGl0aWVzLiBUaGVzZSBhcmUgdGhlIGNvcmUgdXRpbGl0aWVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBleGlzdCBvbiBcCitldmVyeSBzeXN0ZW0uIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jb3JldXRpbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9scy5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTY7bWQ1PTE1ZWQ2MGY2N2IxZGI1ZmVkZDVkYmMzN2NmOGE5NTQzIgorUFIgPSAicjUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vY29yZXV0aWxzLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZ251bGliX200LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Z1dGltZW5zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1scy14LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy02LjktY3AtaS11LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1pMThuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1vdmVyZmxvdy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtZml4LWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLXRvdWNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWJ1aWxkLXdpdGgtYWNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjOTYwN2Q4NDk1ZjE2ZTk4OTA2ZTdlZDJkOTc1MWEwNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OWMyODk1YWQxNTdkZTUwZTUzMjk4YjIyZDkxZGIxMTZlZTRlMWRkM2ZkZjQwMTkyNjAyNTRlMmUzMTQ5N2IwIgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPXllcyBcCisgICAgICAgICAgICAgICAgIGFjX2N2X2Z1bmNfc3RyY29sbF93b3Jrcz15ZXMiCisKKyMgYWNsIGlzIG5vdCBhIGRlZmF1bHQgZmVhdHVyZQorIworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsJywgJ2FjbCcsICcnLCBkKX0iCisKKyMgd2l0aCwgd2l0aG91dCwgZGVwZW5kcywgcmRlcGVuZHMKKyMKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICJhY19jdl9oZWFkZXJfc3lzX2FjbF9oPXllcyxhY19jdl9oZWFkZXJfc3lzX2FjbF9oPW5vLGFjbCwiCisKKworIyBbIGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKK2JpbmRpcl9wcm9ncyA9ICJiYXNlNjQgYmFzZW5hbWUgY2tzdW0gY29tbSBjc3BsaXQgY3V0IGRpciBkaXJjb2xvcnMgZGlybmFtZSBkdSBcCisgICAgICAgICAgICAgICAgZW52IGV4cGFuZCBleHByIGZhY3RvciBmbXQgZm9sZCBncm91cHMgaGVhZCBob3N0aWQgaWQgaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgam9pbiBsaW5rIGxvZ25hbWUgbWQ1c3VtIG1rZmlmbyBuaWNlIG5sIG5vaHVwIG9kIHBhc3RlIHBhdGhjaGsgXAorICAgICAgICAgICAgICAgIHBpbmt5IHByIHByaW50ZW52IHByaW50ZiBwdHggcmVhZGxpbmsgc2VxIHNoYTFzdW0gc2hhMjI0c3VtIHNoYTI1NnN1bSBcCisgICAgICAgICAgICAgICAgc2hhMzg0c3VtIHNoYTUxMnN1bSBzaHJlZCBzaHVmIHNvcnQgc3BsaXQgc3VtIHRhYyB0YWlsIHRlZSB0ZXN0IFwKKyAgICAgICAgICAgICAgICB0ciB0c29ydCB0dHkgdW5leHBhbmQgdW5pcSB1bmxpbmsgdXNlcnMgdmRpciB3YyB3aG8gd2hvYW1pIHllcyB1cHRpbWUiCisKKyMgaG9zdG5hbWUgZ2V0cyBhIHNwZWNpYWwgdHJlYXRtZW50IGFuZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcworYmFzZV9iaW5kaXJfcHJvZ3MgPSAiY2F0IGNoZ3JwIGNobW9kIGNob3duIGNwIGRhdGUgZGQgZWNobyBmYWxzZSBraWxsIGxuIGxzIG1rZGlyIFwKKyAgICAgICAgICAgICAgICAgICAgIG1rbm9kIG12IHB3ZCBybSBybWRpciBzbGVlcCBzdHR5IHN5bmMgdG91Y2ggdHJ1ZSB1bmFtZSBob3N0bmFtZSBzdGF0IgorCitzYmluZGlyX3Byb2dzPSAiY2hyb290IgorCisjIExldCBhY2xvY2FsIHVzZSB0aGUgcmVsYXRpdmUgcGF0aCBmb3IgdGhlIG00IGZpbGUgcmF0aGVyIHRoYW4gdGhlCisjIGFic29sdXRlIHNpbmNlIGNvcmV1dGlscyBoYXMgYSBsb3Qgb2YgbTQgZmlsZXMsIG90aGVyd2lzZSB0aGVyZSBtaWdodAorIyBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiBpdCBpcyBidWlsdCBpbiBhIGxvbmcvZGVlcAorIyBkaXJlY3RvcnkuCithY3BhdGhzID0gIi1JIC4vbTQiCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJWyAiJHtiaW5kaXJ9IiAhPSAiJHtiYXNlX2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9iaW5kaXJ9LyRpOyBkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJWyAiJHtiaW5kaXJ9IiAhPSAiJHtzYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke3NiaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke3NiaW5kaXJ9LyRpOyBkb25lCisKKwkjIFsgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIFsuY29yZXV0aWxzIHdpbGwgY2F1c2UgdGhlIHNlZCBzdHVmZgorCSMgaW4gdXBkYXRlLWFsdGVybmF0aXZlcyB0byBmYWlsLCB0aGVyZWZvcmUgdXNlIGxicmFja2V0IC0gdGhlIG5hbWUgdXNlZAorCSMgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGUuCisJbXYgJHtEfSR7YmluZGlyfS9bICR7RH0ke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59CisKKwkjIE5ld2VyIHZlcnNpb25zIG9mIGNvcmV1dGlscyBkbyBub3QgaW5jbHVkZSBzdSwgdG8gbWltaWMgdGhpcyBiZWhhdmlvcgorCSMgd2Ugc2ltcGx5IHJlbW92ZSBpdC4KKwlybSAtZiAke0R9JHtiaW5kaXJ9L3N1Cit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImxicmFja2V0ICR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke3NiaW5kaXJfcHJvZ3N9IgorCitBTFRFUk5BVElWRV9QUklPUklUWVt1cHRpbWVdID0gIjEwIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbaG9zdG5hbWVdID0gIjEwIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9bIgorQUxURVJOQVRJVkVfVEFSR0VUW2xicmFja2V0XSA9ICIke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59IgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2VfYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKwkJZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBwcm9nKSkKKworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdzYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKwkJZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdzYmluZGlyJywgVHJ1ZSksIHByb2cpKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNGViY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjQuYmIKQEAgLTAsMCArMSwxMjcgQEAKK1NVTU1BUlkgPSAiVGhlIGJhc2ljIGZpbGUsIHNoZWxsIGFuZCB0ZXh0IG1hbmlwdWxhdGlvbiB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIENvcmUgVXRpbGl0aWVzIHByb3ZpZGUgdGhlIGJhc2ljIGZpbGUsIHNoZWxsIGFuZCB0ZXh0IFwKK21hbmlwdWxhdGlvbiB1dGlsaXRpZXMuIFRoZXNlIGFyZSB0aGUgY29yZSB1dGlsaXRpZXMgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGV4aXN0IG9uIFwKK2V2ZXJ5IHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jb3JldXRpbHMiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2xzLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0xNjttZDU9MzhiNzk3ODVjYTg4NTM3Yjc1ODcxNzgyYTJhM2M2YjgiCitERVBFTkRTID0gImdtcCBsaWJjYXAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vY29yZXV0aWxzLyR7QlB9LnRhci54ejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBodHRwOi8vZGlzdGZpbGVzLmdlbnRvby5vcmcvZGlzdGZpbGVzLyR7QlB9LW1hbi50YXIueHo7bmFtZT1tYW5wYWdlcyBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNDBlZmRiY2U4NjVkMjQ1OGQ4ZGEwYTlkY2VlN2MxNmMiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJhMmQ3NTI4NmE0YjllZjNhMTMwMzljMmRhMzg2OGE2MWJlNGVlOWYxN2Q4YWUzODBhMzVhOTdlNTA2OTcyMTcwIgorU1JDX1VSSVttYW5wYWdlcy5tZDVzdW1dID0gIjcyOGE5MWE1YzEwOTVhMzNjZmZiOTk1OWJiODkxOTYzIgorU1JDX1VSSVttYW5wYWdlcy5zaGEyNTZzdW1dID0gImNmMDMzM2I1ZjEzNGEzMzFlMGI0NmUyZGRmOTA2NjZmOGJkYzMyODFjMWNhMmM3Y2NiYjc1YjQzNzU4OWNlMzciCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LWdtcCIKK0VYVFJBX09FQ09ORl9jbGFzcy10YXJnZXQgPSAiLS1lbmFibGUtaW5zdGFsbC1wcm9ncmFtPWFyY2ggLS1saWJleGVjZGlyPSR7bGliZGlyfSIKKworIyBhY2wgaXMgbm90IGEgZGVmYXVsdCBmZWF0dXJlCisjCitQQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsJywgJ2FjbCcsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gIiIKKworIyB3aXRoLCB3aXRob3V0LCBkZXBlbmRzLCByZGVwZW5kcworIworUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbCwtLWRpc2FibGUtYWNsLGFjbCwiCisKKyMgWyBkZiBta3RlbXAgYmFzZTY0IGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKK2JpbmRpcl9wcm9ncyA9ICJhcmNoIGJhc2VuYW1lIGNoY29uIGNrc3VtIGNvbW0gY3NwbGl0IGN1dCBkaXIgZGlyY29sb3JzIGRpcm5hbWUgZHUgXAorICAgICAgICAgICAgICAgIGVudiBleHBhbmQgZXhwciBmYWN0b3IgZm10IGZvbGQgZ3JvdXBzIGhlYWQgaG9zdGlkIGlkIGluc3RhbGwgXAorICAgICAgICAgICAgICAgIGpvaW4gbGluayBsb2duYW1lIG1kNXN1bSBta2ZpZm8gbmljZSBubCBub2h1cCBucHJvYyBvZCBwYXN0ZSBwYXRoY2hrIFwKKyAgICAgICAgICAgICAgICBwaW5reSBwciBwcmludGVudiBwcmludGYgcHR4IHJlYWRsaW5rIHJlYWxwYXRoIHJ1bmNvbiBzZXEgc2hhMXN1bSBzaGEyMjRzdW0gc2hhMjU2c3VtIFwKKyAgICAgICAgICAgICAgICBzaGEzODRzdW0gc2hhNTEyc3VtIHNocmVkIHNodWYgc29ydCBzcGxpdCBzdGRidWYgc3VtIHRhYyB0YWlsIHRlZSB0ZXN0IHRpbWVvdXRcCisgICAgICAgICAgICAgICAgdHIgdHJ1bmNhdGUgdHNvcnQgdHR5IHVuZXhwYW5kIHVuaXEgdW5saW5rIHVwdGltZSB1c2VycyB2ZGlyIHdjIHdobyB3aG9hbWkgeWVzIgorCisjIGhvc3RuYW1lIGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKK2Jhc2VfYmluZGlyX3Byb2dzID0gImNhdCBjaGdycCBjaG1vZCBjaG93biBjcCBkYXRlIGRkIGVjaG8gZmFsc2Uga2lsbCBsbiBscyBta2RpciBcCisgICAgICAgICAgICAgICAgICAgICBta25vZCBtdiBwd2Qgcm0gcm1kaXIgc2xlZXAgc3R0eSBzeW5jIHRvdWNoIHRydWUgdW5hbWUgc3RhdCIKKworc2JpbmRpcl9wcm9ncz0gImNocm9vdCIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSBjb3JldXRpbHMgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCisjIERlYWwgd2l0aCBhIHNlcGFyYXRlIGJ1aWxkZGlyIGZhaWx1cmUgaWYgc3JjIGRvZXNuJ3QgZXhpc3Qgd2hlbiBjcmVhdGluZyB2ZXJzaW9uLmMvdmVyc2lvbi5oCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCW1rZGlyIC1wICR7Qn0vc3JjCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZvciBpIGluIGRmIG1rdGVtcCBiYXNlNjQ7IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7YmluZGlyfS8kaS4ke0JQTn07IGRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9iaW5kaXJ9LyRpLiR7QlBOfTsgZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCVsgIiR7c2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtzYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtzYmluZGlyfS8kaS4ke0JQTn07IGRvbmUKKworCSMgWyByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIGJlY2F1c2UgWy5jb3JldXRpbHMgd2lsbCBjYXVzZSB0aGUgc2VkIHN0dWZmCisJIyBpbiB1cGRhdGUtYWx0ZXJuYXRpdmVzIHRvIGZhaWwsIHRoZXJlZm9yZSB1c2UgbGJyYWNrZXQgLSB0aGUgbmFtZSB1c2VkCisJIyBmb3IgdGhlIGFjdHVhbCBzb3VyY2UgZmlsZS4KKwltdiAke0R9JHtiaW5kaXJ9L1sgJHtEfSR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0KKworCSMgcHJlYnVpbHQgbWFuIHBhZ2VzCisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW4xCisJaW5zdGFsbCAtdCAke0R9LyR7bWFuZGlyfS9tYW4xICR7U30vbWFuLyouMQorCSMgcHJlYnVpbHQgbWFuIHBhZ2VzIGRvbid0IGRvIGEgc2VwYXJhdGUgbWFuIHBhZ2UgZm9yIFsgdnMgdGVzdC4KKwkjIHNlZSBjb21tZW50IGFib3ZlIHIuZS4gc2VkIGFuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisJY3AgLWEgJHtEfSR7bWFuZGlyfS9tYW4xL3Rlc3QuMSAke0R9JHttYW5kaXJ9L21hbjEvbGJyYWNrZXQuMS4ke0JQTn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCl7CisJIyByZW1vdmUgZ3JvdXBzIHRvIGZpeCBjb25mbGljdCB3aXRoIHNoYWRvdy1uYXRpdmUKKwlybSAtZiAke0R9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dyb3VwcworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAibGJyYWNrZXQgJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7c2JpbmRpcl9wcm9nc30gYmFzZTY0IG1rdGVtcCBkZiIKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJiYXNlNjQuMSBta3RlbXAuMSBkZi4xIGxicmFja2V0LjEgZ3JvdXBzLjEga2lsbC4xIHVwdGltZS4xIHN0YXQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2Jhc2U2NF0gPSAiJHtiYXNlX2JpbmRpcn0vYmFzZTY0IgorQUxURVJOQVRJVkVfVEFSR0VUW2Jhc2U2NF0gPSAiJHtiaW5kaXJ9L2Jhc2U2NC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmFzZTY0LjFdID0gIiR7bWFuZGlyfS9tYW4xL2Jhc2U2NC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wXSA9ICIke2Jhc2VfYmluZGlyfS9ta3RlbXAiCitBTFRFUk5BVElWRV9UQVJHRVRbbWt0ZW1wXSA9ICIke2JpbmRpcn0vbWt0ZW1wLiR7QlBOfSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtta3RlbXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvbWt0ZW1wLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkZl0gPSAiJHtiYXNlX2JpbmRpcn0vZGYiCitBTFRFUk5BVElWRV9UQVJHRVRbZGZdID0gIiR7YmluZGlyfS9kZi4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGYuMV0gPSAiJHttYW5kaXJ9L21hbjEvZGYuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xicmFja2V0XSA9ICIke2JpbmRpcn0vWyIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldC4xXSA9ICIke21hbmRpcn0vbWFuMS9sYnJhY2tldC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JvdXBzLjFdID0gIiR7bWFuZGlyfS9tYW4xL2dyb3Vwcy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3VwdGltZS4xXSA9ICIke21hbmRpcn0vbWFuMS91cHRpbWUuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdGF0LjFdID0gIiR7bWFuZGlyfS9tYW4xL3N0YXQuMSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy13YWl0L2RidXMtd2FpdF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzLXdhaXQvZGJ1cy13YWl0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFkYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy13YWl0L2RidXMtd2FpdF9naXQuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJBIHNpbXBsZSB0b29sIHRvIHdhaXQgZm9yIGEgc3BlY2lmaWMgc2lnbmFsIG92ZXIgREJ1cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2RidXMtd2FpdCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJkYnVzIgorCitTUkNSRVYgPSAiNmNjNjA3N2EzNmZlMjY0OGE1Zjk5M2ZlN2MxNmM5NjMyZjk0NjUxNyIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkMDEzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliLmluYwpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkhpZ2ggbGV2ZWwgbGFuZ3VhZ2UgKEdMaWIpIGJpbmRpbmcgZm9yIEQtQnVzIgorREVTQ1JJUFRJT04gPSAiR0xpYiBiaW5kaW5ncyBmb3IgdGhlIEQtQnVzIG1lc3NhZ2UgYnVzIHRoYXQgaW50ZWdyYXRlIFwKK3RoZSBELUJ1cyBsaWJyYXJ5IHdpdGggdGhlIEdMaWIgdGhyZWFkIGFic3RyYWN0aW9uIGFuZCBtYWluIGxvb3AuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvZGJ1cyIKK0xJQ0VOU0UgPSAiQUZMLTIgfCBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jZjViM2EyZjcwODM3NTBkNTA0MzMzMTE0ZTczODY1NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kYnVzL2RidXMtZ2xpYi5oO2JlZ2lubGluZT03O2VuZGxpbmU9MjE7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorU0VDVElPTiA9ICJiYXNlIgorCitERVBFTkRTID0gImV4cGF0IGdsaWItMi4wIHZpcnR1YWwvbGliaW50bCBkYnVzLWdsaWItbmF0aXZlIGRidXMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnbGliLTIuMC1uYXRpdmUgZGJ1cy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMtZ2xpYi9kYnVzLWdsaWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLWV4YW1wbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Rlc3QtaW5zdGFsbC1tYWtlZmlsZS5wYXRjaCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKKyNkZWZhdWx0IGRpc2FibGUgcmVncmVzc2lvbiB0ZXN0cywgc29tZSB1bml0IHRlc3QgY29kZSBpbiBub24gdGVzdGluZyBjb2RlCisjUEFDS0FHRUNPTkZJR19wbi0ke1BOfSA9ICJ0ZXN0cyIgZW5hYmxlIHJlZ3Jlc3Npb24gdGVzdHMgbG9jYWwuY29uZgorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbdGVzdHNdID0gIi0tZW5hYmxlLXRlc3RzLCwsIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWludHJvc3BlY3QteG1sPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbCBcCisgICAgICAgICAgICAgICAgLS13aXRoLWRidXMtYmluZGluZy10b29sPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9kYnVzLWJpbmRpbmctdG9vbCIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRoLWludHJvc3BlY3QteG1sPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbCIKKworUEFDS0FHRVMgKz0gIiR7UE59LWJhc2gtY29tcGxldGlvbiAke1BOfS10ZXN0cy1kYmcgJHtQTn0tdGVzdHMiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvZGJ1cy1iYXNoLWNvbXBsZXRpb24uc2ggXAorICAgJHtsaWJleGVjZGlyfS9kYnVzLWJhc2gtY29tcGxldGlvbi1oZWxwZXIiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9kYnVzLTEuMC9pbmNsdWRlICR7YmluZGlyfS9kYnVzLWdsaWItdG9vbCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2RidXMtYmluZGluZy10b29sIgorCitSREVQRU5EU18ke1BOfS10ZXN0cyArPSAiZGJ1cy14MTEiCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2RhdGFkaXJ9LyR7QlBOfS90ZXN0cyIKK0ZJTEVTXyR7UE59LXRlc3RzLWRiZyA9ICIke2RhdGFkaXJ9LyR7QlBOfS90ZXN0cy8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMvY29yZS8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMvaW50ZXJmYWNlcy8uZGVidWcvKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi9uby1leGFtcGxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL25vLWV4YW1wbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjQ5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi9uby1leGFtcGxlcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitEaXNhYmxlIGNvbXBpbGluZyBleGFtcGxlcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRidXMtZ2xpYi0wLjcwL2RidXMvTWFrZWZpbGUuYW0ub3JpZwkyMDA2LTA3LTIzIDE2OjA0OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIGRidXMtZ2xpYi0wLjcwL2RidXMvTWFrZWZpbGUuYW0JMjAwNi0wNy0yMyAxNjowNDo1Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLVNVQkRJUlMgPSAuIGV4YW1wbGVzCisrU1VCRElSUyA9IC4KKyAKKyBJTkNMVURFUz0tSSQodG9wX3NyY2RpcikgJChEQlVTX0NGTEFHUykgJChEQlVTX0dMSUJfQ0ZMQUdTKSAkKERCVVNfR0xJQl9UT09MX0NGTEFHUykgLUREQlVTX0NPTVBJTEFUSU9OPTEgLUREQlVTX0xPQ0FMRURJUj1cIiQocHJlZml4KS9AREFUQURJUk5BTUVAL2xvY2FsZVwiIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyN2M4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi90ZXN0LWluc3RhbGwtbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorQ2hhbmdlIE1ha2VmaWxlLmFtIHRvIGluc3RhbGwgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGVzdCBwYWNrYWdlIHB1cnBvc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGVzdCBub3QgaW5zdGFsbCBpcyBmb3IgcHVycG9zZSBmcm9tIHVwc3RyZWFtXQorCitTaWduZWQtb2ZmLWJ5OiBZYW8gWmhhbyA8eWFvLnpoYW9Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdC9NYWtlZmlsZS5hbSAgICAgICAgICAgIHwgMyArKy0KKyB0ZXN0L2NvcmUvTWFrZWZpbGUuYW0gICAgICAgfCAzICsrLQorIHRlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbSB8IDMgKystCisgMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L01ha2VmaWxlLmFtIGIvdGVzdC9NYWtlZmlsZS5hbQoraW5kZXggMzc5YzhjMy4uNjU4MDkyNyAxMDA2NDQKKy0tLSBhL3Rlc3QvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3QvTWFrZWZpbGUuYW0KK0BAIC00OCw3ICs0OCw4IEBAIFRFU1RTID0gXAorIAkkKHRlc3Rfc2NyaXB0cykgXAorIAkkKE5VTEwpCisgCistbm9pbnN0X1BST0dSQU1TID0gXAorK3Rlc3RkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQC90ZXN0cworK3Rlc3RfUFJPR1JBTVMgPSBcCisgCSQodGVzdF9wcm9ncmFtcykgXAorIAkkKHRlc3RfcmVsYXRlZF9wcm9ncmFtcykgXAorIAkkKE5VTEwpCitkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL01ha2VmaWxlLmFtIGIvdGVzdC9jb3JlL01ha2VmaWxlLmFtCitpbmRleCBlNGJjZWI0Li41NGIwNzdkIDEwMDY0NAorLS0tIGEvdGVzdC9jb3JlL01ha2VmaWxlLmFtCisrKysgYi90ZXN0L2NvcmUvTWFrZWZpbGUuYW0KK0BAIC02NCw3ICs2NCw4IEBAIGVuZGlmCisgCisgIyMgd2UgdXNlIG5vaW5zdF9QUk9HUkFNUyBub3QgY2hlY2tfUFJPR1JBTVMgZm9yIFRFU1RTIHNvIHRoYXQgd2UKKyAjIyBidWlsZCBldmVuIHdoZW4gbm90IGRvaW5nICJtYWtlIGNoZWNrIgorLW5vaW5zdF9QUk9HUkFNUyA9IFwKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMvY29yZQorK3Rlc3RfUFJPR1JBTVMgPSBcCisgCXRlc3QtZGJ1cy1nbGliIFwKKyAJdGVzdC1lcnJvci1tYXBwaW5nIFwKKyAJdGVzdC1zZXJ2aWNlLWdsaWIgXAorZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbSBiL3Rlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbQoraW5kZXggYTk0ZDA4ZC4uNzA3ZGNhYyAxMDA2NDQKKy0tLSBhL3Rlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdC9pbnRlcmZhY2VzL01ha2VmaWxlLmFtCitAQCAtNTcsNyArNTcsOCBAQCBpZiBEQlVTX0JVSUxEX1RFU1RTCisgCisgIyMgd2UgdXNlIG5vaW5zdF9QUk9HUkFNUyBub3QgY2hlY2tfUFJPR1JBTVMgZm9yIFRFU1RTIHNvIHRoYXQgd2UKKyAjIyBidWlsZCBldmVuIHdoZW4gbm90IGRvaW5nICJtYWtlIGNoZWNrIgorLW5vaW5zdF9QUk9HUkFNUyA9IHRlc3Qtc2VydmljZSB0ZXN0LWNsaWVudAorK3Rlc3RkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQC90ZXN0cy9pbnRlcmZhY2VzCisrdGVzdF9QUk9HUkFNUyA9IHRlc3Qtc2VydmljZSB0ZXN0LWNsaWVudAorIAorIHRlc3Rfc2VydmljZV9TT1VSQ0VTID0gXAorIAl0ZXN0LWludGVyZmFjZXMuYyBcCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliXzAuMTA0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWJfMC4xMDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyNjNjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliXzAuMTA0LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBkYnVzLWdsaWIuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NDk3ZDIwNzA3MDljZjc5NmYxODc4Yzc1YTcyYTAzOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZmMxZjFhODJiZmMzZWMzZWNhZmUwNGQwZTg3YmFiN2U5OTlmNTBkY2U0ZjRhMzRkMGI4OWNhZjZiZDgyMWY2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNDA3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtdGVzdF8xLjguMjAuYmIKQEAgLTAsMCArMSw2MSBAQAorU1VNTUFSWSA9ICJELUJ1cyB0ZXN0IHBhY2thZ2UgKGZvciBELWJ1cyBmdW5jdGlvbmFsaXR5IHRlc3Rpbmcgb25seSkiCitIT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCisKK0RFUEVORFMgPSAicHl0aG9uLXB5Z29iamVjdCBkYnVzIGRidXMtZ2xpYiIKKworUkRFUEVORFNfJHtQTn0gKz0gIm1ha2UiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzL2RidXMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RtcGRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kYnVzLTEuaW5pdCAgXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNDk4OTBiYmFiZWRhYjNhMWMzZjRmNzNjN2ZmOGIyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YzRmYmY0YzY0NjIxYzk2ZTg3MWRhOTFkMmI3MjlhNWIwMDUzNmUxMTZkM2M0NjEyYTQ2OWQ5MjRiMWI3MDNhIgorCitTPSIke1dPUktESVJ9L2RidXMtJHtQVn0iCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9kYnVzOiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcHRlc3QKKworRVhUUkFfT0VDT05GX1ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnLS13aXRoLXgnLCAnLS13aXRob3V0LXgnLCBkKX0iCitFWFRSQV9PRUNPTkZfWF9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LXgiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtbW9kdWxhci10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbGVkLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jaGVja3MgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWFzc2VydHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXZlcmJvc2UtbW9kZSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhtbC1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZG94eWdlbi1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXVkaXQgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zeXN0ZW1kIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIgXAorICAgICAgICAgICAgICAgIC0td2l0aC1kYnVzLXRlc3QtZGlyPSR7UFRFU1RfUEFUSH0gXAorICAgICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1h9IgorCitkb19pbnN0YWxsKCkgeworICAgIDoKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljYXNlMT0ic2hlbGwgcHJpbnRmIHJlZnMgc3lzbG9nIgorCWZvciBpIGluICR7Y2FzZTF9OyBkbyBpbnN0YWxsICR7Qn0vdGVzdC90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwljYXNlMj0ibWFyc2hhbCBzeW50YXggY29ycnVwdCBkYnVzLWRhZW1vbiBkYnVzLWRhZW1vbi1lYXZlc2Ryb3AgbG9vcGJhY2sgcmVsYXkiCisJZm9yIGkgaW4gJHtjYXNlMn07IGRvIGluc3RhbGwgJHtCfS90ZXN0Ly5saWJzL3Rlc3QtJGkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgZG9uZQorCWNhc2UzPSJidXMgYnVzLXN5c3RlbSBidXMtbGF1bmNoLWhlbHBlciIKKwlmb3IgaSBpbiAke2Nhc2UzfTsgZG8gaW5zdGFsbCAke0J9L2J1cy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwlpbnN0YWxsICR7Qn0vZGJ1cy90ZXN0LWRidXMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWNwIC1yICR7Qn0vdGVzdC9kYXRhICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKK30KK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJiYXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MTA4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy5pbmMKQEAgLTAsMCArMSwxNzAgQEAKK1NVTU1BUlkgPSAiRC1CdXMgbWVzc2FnZSBidXMiCitERVNDUklQVElPTiA9ICJELUJ1cyBpcyBhIG1lc3NhZ2UgYnVzIHN5c3RlbSwgYSBzaW1wbGUgd2F5IGZvciBhcHBsaWNhdGlvbnMgdG8gdGFsayB0byBvbmUgYW5vdGhlci4gSW4gYWRkaXRpb24gdG8gaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24sIEQtQnVzIGhlbHBzIGNvb3JkaW5hdGUgcHJvY2VzcyBsaWZlY3ljbGU7IGl0IG1ha2VzIGl0IHNpbXBsZSBhbmQgcmVsaWFibGUgdG8gY29kZSBhIFwic2luZ2xlIGluc3RhbmNlXCIgYXBwbGljYXRpb24gb3IgZGFlbW9uLCBhbmQgdG8gbGF1bmNoIGFwcGxpY2F0aW9ucyBhbmQgZGFlbW9ucyBvbiBkZW1hbmQgd2hlbiB0aGVpciBzZXJ2aWNlcyBhcmUgbmVlZGVkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiQUZMLTIgfCBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMGRkZWQzYjU4MTQ4ZjNmMWZkODA0YjI2MzU0YWYzZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kYnVzL2RidXMuaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTIwO21kNT03NzU1YzlkN2FiY2NkNWRiZDI1YTZhOTc0NTM4YmIzYyIKK0RFUEVORFMgPSAiZXhwYXQgdmlydHVhbC9saWJpbnRsIgorUkRFUEVORFNfZGJ1c19jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfZGJ1c19jbGFzcy1uYXRpdmVzZGsgPSAiIgorUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnJHtQTn0tcHRlc3QnLCAnJywgZCl9IgorQUxMT1dfRU1QVFlfZGJ1cy1wdGVzdCA9ICIxIgorUkRFUEVORFNfZGJ1cy1wdGVzdF9jbGFzcy10YXJnZXQgPSAiZGJ1cy10ZXN0LXB0ZXN0IgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzL2RidXMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RtcGRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kYnVzLTEuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9vcy10ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoIFwKKyIKKworaW5oZXJpdCB1c2VyYWRkIGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiZGJ1cy0xIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDIgNSAzIDIgLiBzdG9wIDIwIDAgMSA2IC4iCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBuZXRkZXYiCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLXNoZWxsIC9iaW4vZmFsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgbWVzc2FnZWJ1cyIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5jb25mICR7c3lzY29uZmRpcn0vZGJ1cy0xL3Nlc3Npb24uY29uZiIKKworREVCSUFOTkFNRV8ke1BOfSA9ICJkYnVzLTEiCisKK1BBQ0tBR0VTID0rICIke1BOfS1saWIiCisKK09MRFBLR05BTUUgPSAiZGJ1cy14MTEiCitPTERQS0dOQU1FX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKKyMgZm9yIGNvbXBhdGliaWxpdHkKK1JQUk9WSURFU18ke1BOfSA9ICIke09MRFBLR05BTUV9IgorUlJFUExBQ0VTXyR7UE59ICs9ICIke09MRFBLR05BTUV9IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZGJ1cy1kYWVtb24qIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXV1aWRnZW4gXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtY2xlYW51cC1zb2NrZXRzIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXNlbmQgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbW9uaXRvciBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1sYXVuY2ggXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtcnVuLXNlc3Npb24gXAorICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9kYnVzKiBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMgXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIgorRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWIqLnNvLioiCitSUkVDT01NRU5EU18ke1BOfS1saWIgPSAiJHtQTn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9kYnVzLTEuMC9pbmNsdWRlICR7YmluZGlyfS9kYnVzLWdsaWItdG9vbCIKKworcGtnX3Bvc3RpbnN0X2RidXMoKSB7CisJIyBJZiBib3RoIHN5c3RlbWQgYW5kIHN5c3Zpbml0IGFyZSBlbmFibGVkLCBtYXNrIHRoZSBkYnVzLTEgaW5pdCBzY3JpcHQKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQgc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayBkYnVzLTEuc2VydmljZQorCWZpCisKKwlpZiBbIC16ICIkRCIgXSAmJiBbIC1lIC9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF0gOyB0aGVuCisJCS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCWZpCit9CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWRidXMtZ2xpYiIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZGlzYWJsZS1zZWxpbnV4IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCisjIFdvdWxkIGxpa2UgdG8gLS1lbmFibGUtc3lzdGVtZCBidXQgdGhhdCdzIGEgY2lyY3VsYXIgYnVpbGQtZGVwZW5kZW5jeSBiZXR3ZWVuCisjIHN5c3RlbWQ8LT5kYnVzCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXggLS1lbmFibGUteDExLWF1dG9sYXVuY2gsLS13aXRob3V0LXggLS1kaXNhYmxlLXgxMS1hdXRvbGF1bmNoLCB2aXJ0dWFsL2xpYngxMSBsaWJzbSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJCXNlZCAnczpAYmluZGlyQDoke2JpbmRpcn06JyA8ICR7V09SS0RJUn0vZGJ1cy0xLmluaXQgPiR7V09SS0RJUn0vZGJ1cy0xLmluaXQuc2gKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGJ1cy0xLmluaXQuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2RidXMtMQorCWZpCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlmb3IgaSBpbiBkYnVzLnRhcmdldC53YW50cyBzb2NrZXRzLnRhcmdldC53YW50cyBtdWx0aS11c2VyLnRhcmdldC53YW50czsgZG8gXAorCQkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8kaTsgZG9uZQorCQlpbnN0YWxsIC1tIDA2NDQgJHtCfS9idXMvZGJ1cy5zZXJ2aWNlICR7Qn0vYnVzL2RidXMuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQljZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kYnVzLnRhcmdldC53YW50cy8KKwkJbG4gLWZzIC4uL2RidXMuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RidXMudGFyZ2V0LndhbnRzL2RidXMuc29ja2V0CisJCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zb2NrZXRzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAorCQlsbiAtZnMgLi4vZGJ1cy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzL2RidXMuc2VydmljZQorCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJZWNobyAiZCBtZXNzYWdlYnVzIG1lc3NhZ2VidXMgMDc1NSAke2xvY2Fsc3RhdGVkaXJ9L3J1bi9kYnVzIG5vbmUiIFwKKwkgICAgID4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOTlfZGJ1cworCisKKwlta2RpciAtcCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cworCisJY2hvd24gbWVzc2FnZWJ1czptZXNzYWdlYnVzICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzCisKKwljaG93biByb290Om1lc3NhZ2VidXMgJHtEfSR7bGliZXhlY2Rpcn0vZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlcgorCWNobW9kIDQ3NTUgJHtEfSR7bGliZXhlY2Rpcn0vZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlcgorCisJIyBSZW1vdmUgUmVkIEhhdCBpbml0c2NyaXB0CisJcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L3JjLmQKKworCSMgUmVtb3ZlIGVtcHR5IHRlc3RleGVjIGRpcmVjdG9yeSBhcyB3ZSBkb24ndCBidWlsZCB0ZXN0cworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2RidXMtMS4wL3Rlc3QKKworCSMgUmVtb3ZlIC92YXIvcnVuIGFzIGl0IGlzIGNyZWF0ZWQgb24gc3RhcnR1cAorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZm9yIGRidXMtZ2xpYi1uYXRpdmUgaW50cm9zcGVjdGlvbiBnZW5lcmF0aW9uCisJaW5zdGFsbCAtZCAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzLworCSMgTi5CLiBpcyBiZWxvdyBpbnN0YWxsIGFjdHVhbGx5IHJlcXVpcmVkPworCWluc3RhbGwgLW0gMDY0NCBidXMvc2Vzc2lvbi5jb25mICR7RH0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvc2Vzc2lvbi5jb25mCisKKwkjIGRidXMtZ2xpYi1uYXRpdmUgYW5kIGRidXMtZ2xpYiBuZWVkIHRoaXMgeG1sIGZpbGUKKwkuL2J1cy9kYnVzLWRhZW1vbiAtLWludHJvc3BlY3QgPiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL2RidXMtYnVzLWludHJvc3BlY3QueG1sCisJCisJIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAorCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KKwlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlc2RrKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGRidXMtbGF1bmNoIGhhcyBubyBYIHN1cHBvcnQgc28gbGV0cyBub3QgaW5zdGFsbCBpdCBpbiBjYXNlIHRoZSBob3N0CisJIyBoYXMgYSBtb3JlIGZlYXR1cmVkIGFuZCB1c2VmdWwgdmVyc2lvbgorCXJtIC1mICR7RH0ke2JpbmRpcn0vZGJ1cy1sYXVuY2gKKworCSMgUmVtb3ZlIC92YXIvcnVuIHRvIGF2b2lkIFFBIGVycm9yCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorfQorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitJTlNBTkVfU0tJUF8ke1BOfS1wdGVzdCArPSAiYnVpbGQtZGVwcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2ZDljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitGcm9tIGI4Zjg0YmQzOTQ4NWQzOTc3NjI1YzlhOGI4ZThjZmY1ZDIzYmU1NmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDI3IEZlYiAyMDE0IDA5OjA1OjAyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRidXM6IGNsZWFyIGd1aWRfZnJvbV9zZXJ2ZXIgaWYgc2VuZF9uZWdvdGlhdGVfdW5peF9mZAorIGZhaWxlZAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitidXMtdGVzdCBkaXNwYXRjaCB0ZXN0IGZhaWxlZCB3aXRoIGJlbG93IGluZm9ybWF0aW9uOgorICAgIC4vYnVzL2J1cy10ZXN0OiBSdW5uaW5nIG1lc3NhZ2UgZGlzcGF0Y2ggdGVzdAorICAgIEFjdGl2YXRpbmcgc2VydmljZSBuYW1lPSdvcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVFY2hvU2VydmljZScKKyAgICBTdWNjZXNzZnVsbHkgYWN0aXZhdGVkIHNlcnZpY2UgJ29yZy5mcmVlZGVza3RvcC5EQnVzLlRlc3RTdWl0ZUVjaG9TZXJ2aWNlJworICAgIDYzNjM6IGFzc2VydGlvbiBmYWlsZWQgIl9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyKSA9PSAwIiBmaWxlICJkYnVzLWF1dGguYyIgbGluZSAxNTQ1IGZ1bmN0aW9uIHByb2Nlc3Nfb2sKKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX3ByaW50X2JhY2t0cmFjZSsweDI5KSBbMHg4MGNiOTY5XQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfYWJvcnQrMHgxNCkgWzB4ODBjZmI0NF0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX3JlYWxfYXNzZXJ0KzB4NTMpIFsweDgwYjUyYzNdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwZTI0ZGFdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19hdXRoX2RvX3dvcmsrMHgzODgpIFsweDgwZTM4NDhdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwYWVhNDldCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwYWZmZGVdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c190cmFuc3BvcnRfaGFuZGxlX3dhdGNoKzB4YjEpIFsweDgwYWQ4NDFdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19jb25uZWN0aW9uX2hhbmRsZV93YXRjaCsweDEwNCkgWzB4ODA4OTE3NF0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KGRidXNfd2F0Y2hfaGFuZGxlKzB4ZDgpIFsweDgwYjE1ZThdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19sb29wX2l0ZXJhdGUrMHg0YTkpIFsweDgwZDE1MDldCisgICAgICAuL2J1cy9idXMtdGVzdChidXNfdGVzdF9ydW5fY2xpZW50c19sb29wKzB4NWQpIFsweDgwODEyOWRdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNmNhYjBdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNmUwY2FdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNmRhNmZdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c190ZXN0X29vbV9oYW5kbGluZysweDE4YykgWzB4ODBiNWM4Y10KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODA2ZjcyM10KKyAgICAgIC4vYnVzL2J1cy10ZXN0KGJ1c19kaXNwYXRjaF90ZXN0KzB4M2MpIFsweDgwNzFhYWNdCisgICAgICAuL2J1cy9idXMtdGVzdChtYWluKzB4MWI3KSBbMHg4MDVhY2M3XQorICAgICAgL2xpYi9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHhmMykgWzB4NDVmOTE5YjNdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNWFlMzldCisKK1RoZSBzdGFjayBpcyBiZWxvdzoKKyAgICAjMCAgMHhmZmZmZTQyNSBpbiBfX2tlcm5lbF92c3lzY2FsbCAoKQorICAgICMxICAweDQ1ZmE2MmQ2IGluIHJhaXNlICgpIGZyb20gL2xpYi9saWJjLnNvLjYKKyAgICAjMiAgMHg0NWZhOTY1MyBpbiBhYm9ydCAoKSBmcm9tIC9saWIvbGliYy5zby42CisgICAgIzMgIDB4MDgwY2ZiNjUgaW4gX2RidXNfYWJvcnQgKCkgYXQgZGJ1cy1zeXNkZXBzLmM6OTQKKyAgICAjNCAgMHgwODBiNTJjMyBpbiBfZGJ1c19yZWFsX2Fzc2VydCAoY29uZGl0aW9uPTAsCisgICAgICAgIGNvbmRpdGlvbl90ZXh0PWNvbmRpdGlvbl90ZXh0QGVudHJ5PTB4ODExN2EzOCAiX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIpID09IDAiLAorICAgICAgICBmaWxlPWZpbGVAZW50cnk9MHg4MTE3MjczICJkYnVzLWF1dGguYyIsIGxpbmU9bGluZUBlbnRyeT0xNTQ1LAorICAgICAgICBmdW5jPWZ1bmNAZW50cnk9MHg4MTE3ZjhlIDxfX0ZVTkNUSU9OX18uMzQ5Mj4gInByb2Nlc3Nfb2siKQorICAgICAgICBkYXRhPTB4ODE1NzI5MCkgYXQgZGJ1cy1jb25uZWN0aW9uLmM6MTUxNQorICAgICMwICAweDAwMDAwMDMzZmVlMzUzZTkgaW4gcmFpc2UgKCkgZnJvbSAvbGliNjQvbGliYy5zby42CisgICAgIzEgIDB4MDAwMDAwMzNmZWUzODUwOCBpbiBhYm9ydCAoKSBmcm9tIC9saWI2NC9saWJjLnNvLjYKKyAgICAjMiAgMHgwMDAwMDAwMDAwNDdkNTg1IGluIF9kYnVzX2Fib3J0ICgpIGF0IGRidXMtc3lzZGVwcy5jOjk0CisgICAgIzMgIDB4MDAwMDAwMDAwMDQ2NjQ4NiBpbiBfZGJ1c19yZWFsX2Fzc2VydCAoY29uZGl0aW9uPTxvcHRpbWl6ZWQgb3V0PiwKKyAgICAgICAgY29uZGl0aW9uX3RleHQ9Y29uZGl0aW9uX3RleHRAZW50cnk9MHg0YzI5ODggIl9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyKSA9PSAwIiwKKyAgICAgICAgZmlsZT1maWxlQGVudHJ5PTB4NGMyMWE1ICJkYnVzLWF1dGguYyIsIGxpbmU9bGluZUBlbnRyeT0xNTQ2LAorICAgICAgICBmdW5jPWZ1bmNAZW50cnk9MHg0YzJmY2UgPF9fRlVOQ1RJT05fXy4zODQ1PiAicHJvY2Vzc19vayIpCisgICAgICAgIGF0IGRidXMtaW50ZXJuYWxzLmM6OTMxCisgICAgIzQgIDB4MDAwMDAwMDAwMDQ4ZDQyNCBpbiBwcm9jZXNzX29rIChhcmdzX2Zyb21fb2s9MHg3ZmZmZmZmZmU0ODAsCisgICAgICAgIGF1dGg9MHg2ZmYzNDApIGF0IGRidXMtYXV0aC5jOjE1NDYKKyAgICAjNSAgaGFuZGxlX2NsaWVudF9zdGF0ZV93YWl0aW5nX2Zvcl9kYXRhIChhdXRoPTB4NmZmMzQwLAorICAgICAgICBjb21tYW5kPTxvcHRpbWl6ZWQgb3V0PiwgYXJncz0weDdmZmZmZmZmZTQ4MCkgYXQgZGJ1cy1hdXRoLmM6MTk5NgorICAgICM2ICAweDAwMDAwMDAwMDA0OGU3ODkgaW4gcHJvY2Vzc19jb21tYW5kIChhdXRoPTB4NmZmMzQwKSBhdCBkYnVzLWF1dGguYzoyMjA4CisgICAgIzcgIF9kYnVzX2F1dGhfZG9fd29yayAoYXV0aD0weDZmZjM0MCkgYXQgZGJ1cy1hdXRoLmM6MjQ1OAorICAgICM4ICAweDAwMDAwMDAwMDA0NjA5MWQgaW4gZG9fYXV0aGVudGljYXRpb24gKAorICAgICAgICB0cmFuc3BvcnQ9dHJhbnNwb3J0QGVudHJ5PTB4NmZmYWEwLCBkb19yZWFkaW5nPWRvX3JlYWRpbmdAZW50cnk9MSwKKyAgICAgICAgZG9fd3JpdGluZz1kb193cml0aW5nQGVudHJ5PTAsCisgICAgICAgIGF1dGhfY29tcGxldGVkPWF1dGhfY29tcGxldGVkQGVudHJ5PTB4N2ZmZmZmZmZlNTVjKQorICAgICAgICBhdCBkYnVzLXRyYW5zcG9ydC1zb2NrZXQuYzo0NDIKKyAgICAjOSAgMHgwMDAwMDAwMDAwNDYxZDA4IGluIHNvY2tldF9oYW5kbGVfd2F0Y2ggKHRyYW5zcG9ydD0weDZmZmFhMCwKKyAgICAgICAgd2F0Y2g9MHg2ZjQxOTAsIGZsYWdzPTEpIGF0IGRidXMtdHJhbnNwb3J0LXNvY2tldC5jOjkyMQorICAgICMxMCAweDAwMDAwMDAwMDA0NWZhM2EgaW4gX2RidXNfdHJhbnNwb3J0X2hhbmRsZV93YXRjaCAodHJhbnNwb3J0PTB4NmZmYWEwLAorCitPbmNlIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQgZmFpbGVkLCB0aGlzIGZhaWx1cmUgd2lsbCBoYXBwZW4sIHNpbmNlCithdXRoLT5ndWlkX2Zyb21fc2VydmVyIGhhcyBiZWVuIHNldCB0byBzb21lIHZhbHVlIGJlZm9yZQorc2VuZF9uZWdvdGlhdGVfdW5peF9mZC4gc2VuZF9uZWdvdGlhdGVfdW5peF9mZCBmYWlsdXJlIHdpbGwgbGVhZCB0bwordGhpcyBhdXRoIGJlIGhhbmRsZWQgYnkgcHJvY2Vzc19vayBhZ2FpbiwgYnV0IHRoaXMgYXV0aC0+Z3VpZF9mcm9tX3NlcnZlcgoraXMgbm90IHplcm8uCisKK1NvIHdlIHNob3VsZCBjbGVhciBhdXRoLT5ndWlkX2Zyb21fc2VydmVyIGlmIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQgZmFpbGVkCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRidXMvZGJ1cy1hdXRoLmMgfCAgICA5ICsrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kYnVzL2RidXMtYXV0aC5jIGIvZGJ1cy9kYnVzLWF1dGguYworaW5kZXggZDJjMzdhNy4uMzdiNDVjNiAxMDA2NDQKKy0tLSBhL2RidXMvZGJ1cy1hdXRoLmMKKysrKyBiL2RidXMvZGJ1cy1hdXRoLmMKK0BAIC0xNTcxLDggKzE1NzEsMTMgQEAgcHJvY2Vzc19vayhEQnVzQXV0aCAqYXV0aCwKKyAgIF9kYnVzX3ZlcmJvc2UgKCJHb3QgR1VJRCAnJXMnIGZyb20gdGhlIHNlcnZlclxuIiwKKyAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikpOworIAorLSAgaWYgKGF1dGgtPnVuaXhfZmRfcG9zc2libGUpCistICAgIHJldHVybiBzZW5kX25lZ290aWF0ZV91bml4X2ZkKGF1dGgpOworKyAgaWYgKGF1dGgtPnVuaXhfZmRfcG9zc2libGUpIHsKKysgICAgIGlmICghc2VuZF9uZWdvdGlhdGVfdW5peF9mZChhdXRoKSkgeworKyAgICAgICAgIF9kYnVzX3N0cmluZ19zZXRfbGVuZ3RoICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyLCAwKTsKKysgICAgICAgICByZXR1cm4gRkFMU0U7CisrICAgICB9CisrICAgICByZXR1cm4gVFJVRTsKKysgIH0KKyAKKyAgIF9kYnVzX3ZlcmJvc2UoIk5vdCBuZWdvdGlhdGluZyB1bml4IGZkIHBhc3NpbmcsIHNpbmNlIG5vdCBwb3NzaWJsZVxuIik7CisgICByZXR1cm4gc2VuZF9iZWdpbiAoYXV0aCk7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM4NjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL2RidXMtMS5pbml0CkBAIC0wLDAgKzEsMTIzIEBACisjISAvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBkYnVzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgUmVxdWlyZWQtU3RvcDogICAgICRyZW1vdGVfZnMgJHN5c2xvZworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMQorIyBTaG9ydC1EZXNjcmlwdGlvbjogRC1CdXMgc3lzdGVtd2lkZSBtZXNzYWdlIGJ1cworIyBEZXNjcmlwdGlvbjogICAgICAgRC1CdXMgaXMgYSBzaW1wbGUgaW50ZXJwcm9jZXNzIG1lc3NhZ2luZyBzeXN0ZW0sIHVzZWQKKyMgICAgICAgICAgICAgICAgICAgIGZvciBzZW5kaW5nIG1lc3NhZ2VzIGJldHdlZW4gYXBwbGljYXRpb25zLgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjIERlYmlhbiBpbml0LmQgc2NyaXB0IGZvciBELUJVUworIyBDb3B5cmlnaHQgwqkgMjAwMyBDb2xpbiBXYWx0ZXJzIDx3YWx0ZXJzQGRlYmlhbi5vcmc+CisKKyMgc2V0IC1lCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitEQUVNT049QGJpbmRpckAvZGJ1cy1kYWVtb24KK05BTUU9ZGJ1cworREFFTU9OVVNFUj1tZXNzYWdlYnVzICAgICAgICAgICAjIG11c3QgbWF0Y2ggL2V0Yy9kYnVzLTEvc3lzdGVtLmNvbmYKK1BJREZJTEU9L3Zhci9ydW4vbWVzc2FnZWJ1cy5waWQgIyBtdXN0IG1hdGNoIC9ldGMvZGJ1cy0xL3N5c3RlbS5jb25mCitVVUlERElSPS92YXIvbGliL2RidXMKK0RFU0M9InN5c3RlbSBtZXNzYWdlIGJ1cyIKK0VWRU5URElSPS9ldGMvZGJ1cy0xL2V2ZW50LmQKKwordGVzdCAteCAkREFFTU9OIHx8IGV4aXQgMAorCisjIFNvdXJjZSBkZWZhdWx0cyBmaWxlOyBlZGl0IHRoYXQgZmlsZSB0byBjb25maWd1cmUgdGhpcyBzY3JpcHQuCitFTkFCTEVEPTEKK1BBUkFNUz0iIgoraWYgWyAtZSAvZXRjL2RlZmF1bHQvZGJ1cyBdOyB0aGVuCisgIC4gL2V0Yy9kZWZhdWx0L2RidXMKK2ZpCisKK3Rlc3QgIiRFTkFCTEVEIiAhPSAiMCIgfHwgZXhpdCAwCisKK3N0YXJ0X2l0X3VwKCkKK3sKKyAgbWtkaXIgLXAgImBkaXJuYW1lICRQSURGSUxFYCIKKyAgaWYgWyAtZSAkUElERklMRSBdOyB0aGVuCisgICAgUElERElSPS9wcm9jLyQoY2F0ICRQSURGSUxFKQorICAgIGlmIFsgLWQgJHtQSURESVJ9IC1hICAiJChyZWFkbGluayAtZiAke1BJRERJUn0vZXhlKSIgPSAiJHtEQUVNT059IiBdOyB0aGVuIAorICAgICAgZWNobyAiJERFU0MgYWxyZWFkeSBzdGFydGVkOyBub3Qgc3RhcnRpbmcuIgorICAgIGVsc2UKKyAgICAgIGVjaG8gIlJlbW92aW5nIHN0YWxlIFBJRCBmaWxlICRQSURGSUxFLiIKKyAgICAgIHJtIC1mICRQSURGSUxFCisgICAgZmkKKyAgZmkKKworICBpZiBbICEgLWQgJFVVSURESVIgXTsgdGhlbgorICAgIG1rZGlyIC1wICRVVUlERElSCisgICAgY2hvd24gJERBRU1PTlVTRVIgJFVVSURESVIKKyAgICBjaGdycCAkREFFTU9OVVNFUiAkVVVJRERJUgorICBmaQorIAorICBkYnVzLXV1aWRnZW4gLS1lbnN1cmUgIAorCisgIGVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisgIHN0YXJ0LXN0b3AtZGFlbW9uIC1vIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJFBJREZJTEUgXAorICAgIC0tdXNlciAkREFFTU9OVVNFUiAtLWV4ZWMgJERBRU1PTiAtLSAtLXN5c3RlbSAkUEFSQU1TCisgIGVjaG8gIiROQU1FLiIKKyAgaWYgWyAtZCAkRVZFTlRESVIgXTsgdGhlbgorICAgICAgcnVuLXBhcnRzIC0tYXJnPXN0YXJ0ICRFVkVOVERJUgorICBmaQorfQorCitzaHV0X2l0X2Rvd24oKQoreworICBpZiBbIC1kICRFVkVOVERJUiBdOyB0aGVuCisgICAgICAjIFRPRE86IC0tcmV2ZXJzZSB3aGVuIGJ1c3lib3ggc3VwcG9ydHMgaXQKKyAgICAgIHJ1bi1wYXJ0cyAtLWFyZz1zdG9wICRFVkVOVERJUgorICBmaQorICBlY2hvIC1uICJTdG9wcGluZyAkREVTQzogIgorICBzdGFydC1zdG9wLWRhZW1vbiAtbyAtLXN0b3AgIC0tcXVpZXQgLS1waWRmaWxlICRQSURGSUxFIFwKKyAgICAtLXVzZXIgJERBRU1PTlVTRVIKKyAgIyBXZSBubyBsb25nZXIgaW5jbHVkZSB0aGVzZSBhcmd1bWVudHMgc28gdGhhdCBzdGFydC1zdG9wLWRhZW1vbgorICAjIGNhbiBkbyBpdHMgam9iIGV2ZW4gZ2l2ZW4gdGhhdCB3ZSBtYXkgaGF2ZSBiZWVuIHVwZ3JhZGVkLgorICAjIFdlIHJlbHkgb24gdGhlIHBpZGZpbGUgYmVpbmcgc2FuZWx5IG1hbmFnZWQKKyAgIyAtLWV4ZWMgJERBRU1PTiAtLSAtLXN5c3RlbSAkUEFSQU1TCisgIGVjaG8gIiROQU1FLiIKKyAgcm0gLWYgJFBJREZJTEUKK30KKworcmVsb2FkX2l0KCkKK3sKKyAgZWNobyAtbiAiUmVsb2FkaW5nICRERVNDIGNvbmZpZzogIgorICBkYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLXN5c3RlbSAtLXR5cGU9bWV0aG9kX2NhbGwgXAorICAgICAgICAgICAgLS1kZXN0PW9yZy5mcmVlZGVza3RvcC5EQnVzIFwKKyAgICAgICAgICAgIC8gb3JnLmZyZWVkZXNrdG9wLkRCdXMuUmVsb2FkQ29uZmlnID4gL2Rldi9udWxsCisgICMgaG9wZWZ1bGx5IHRoaXMgaXMgZW5vdWdoIHRpbWUgZm9yIGRidXMgdG8gcmVsb2FkIGl0J3MgY29uZmlnIGZpbGUuCisgIGVjaG8gImRvbmUuIgorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgc3RhcnRfaXRfdXAKKyAgOzsKKyAgc3RvcCkKKyAgICBzaHV0X2l0X2Rvd24KKyAgOzsKKyAgc3RhdHVzKQorICAgIHN0YXR1cyAkREFFTU9OCisgICAgZXhpdCAkPworICA7OworICByZWxvYWR8Zm9yY2UtcmVsb2FkKQorICAgIHJlbG9hZF9pdAorICA7OworICByZXN0YXJ0KQorICAgIHNodXRfaXRfZG93bgorICAgIHNsZWVwIDEKKyAgICBzdGFydF9pdF91cAorICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC8kTkFNRSB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxyZWxvYWR8Zm9yY2UtcmVsb2FkfSIgPiYyCisgICAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL29zLXRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvb3MtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMyNTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL29zLXRlc3QucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorZGJ1czogcmVtb3ZlIGJ1aWxkIGhvc3QgdGVzdCBpbiBjb25maWd1cmUgc2NyaXB0CisKK1RoZSBkYnVzIGJ1aWxkIHRlc3RzIHRoZSBidWlsZCBob3N0IHRvIGRldGVjdCB3aGF0IGluaXRzY3JpcHQKK2Vudmlyb25tZW50IGl0IGV4cGVjdHMuICBSZW1vdmUgdGhlIHRlc3QgYW5kIHNldCBpdCB0byAicmVkaGF0IgordW5jb25kaXRpb25hbGx5IGFzIHRoZSBvZS1jb3JlIGluaXRzY3JpcHQgaGFzIGEgcmVkaGF0LXN0eWxlIHBpZCBmaWxlCitwYXRoLgorCitTaWduZWQtb2ZmLWJ5OiBBbmR5IFJvc3MgPGFuZHkucm9zc0B3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworZGlmZiAtdSBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCTIwMTItMDgtMjggMTE6MjM6NDMuMDQwNjA5ODc0IC0wNzAwCisrKysgYi9jb25maWd1cmUuYWMJMjAxMi0wOC0yOCAxMTo1NDoyNS42MDI5MTM5NDUgLTA3MDAKK0BAIC0xMzQ4LDE5ICsxMzQ4LDggQEAKKyBBU19BQ19FWFBBTkQoRVhQQU5ERURfTElCRVhFQ0RJUiwgIiRsaWJleGVjZGlyIikKKyBBU19BQ19FWFBBTkQoRVhQQU5ERURfREFUQURJUiwgIiRkYXRhZGlyIikKKyAKKy0jIyMjIENoZWNrIG91ciBvcGVyYXRpbmcgc3lzdGVtCistb3BlcmF0aW5nX3N5c3RlbT11bmtub3duCistaWYgdGVzdCAtZiAvZXRjL3JlZGhhdC1yZWxlYXNlIHx8IHRlc3QgLWYgJEVYUEFOREVEX1NZU0NPTkZESVIvcmVkaGF0LXJlbGVhc2UgOyB0aGVuCistICAgb3BlcmF0aW5nX3N5c3RlbT1yZWRoYXQKKy1maQorLQorLWlmIHRlc3QgLWYgL2V0Yy9zbGFja3dhcmUtdmVyc2lvbiB8fCB0ZXN0IC1mICRFWFBBTkRFRF9TWVNDT05GRElSL3NsYWNrd2FyZS12ZXJzaW9uIDsgdGhlbgorLSAgIG9wZXJhdGluZ19zeXN0ZW09c2xhY2t3YXJlCistZmkKKy0KKy1pZiB0ZXN0IC1mIC91c3IvYmluL2N5Z3dpbjEuZGxsIHx8IHRlc3QgLWYgJEVYUEFOREVEX0JJTkRJUi9jeWd3aW4xLmRsbCA7IHRoZW4KKy0gICBvcGVyYXRpbmdfc3lzdGVtPWN5Z3dpbgorLWZpCisrIyMjIyBCdWlsZCBob3N0IHRlc3QgcmVtb3ZlZCBmcm9tIHVwc3RyZWFtIGNvZGUsIG9wZW5lbWJlZGRlZCBpbml0c2NyaXB0IGlzIHJlZGhhdC1saWtlOgorK29wZXJhdGluZ19zeXN0ZW09cmVkaGF0CisgCisgIyMjIyBTb3J0IG91dCBpbml0IHNjcmlwdHMKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9weXRob24tY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3B5dGhvbi1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0NDAwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9weXRob24tY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1doZW4gYnVpbGRpbmcgdGhlIGRidXMtcHRlc3QgcGFja2FnZSwgd2UgaGF2ZSB0byBlbmFibGUgcHl0aG9uLiAgSG93ZXZlcgorY2hlY2tpbmcgaWYgdGhlIGhvc3Qtc3lzdGVtIHB5dGhvbiBoYXMgdGhlIG5lY2Vzc2FyeSBsaWJyYXJ5IGlzbid0IHVzZWZ1bC4KKworRGlzYWJsZSB0aGUgcHl0aG9uIG1vZHVsZSBjaGVjayBmb3IgY3Jvc3MgY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBkYnVzLTEuNi44L2NvbmZpZ3VyZS5hYy5vcmlnCTIwMTMtMDctMTEgMTQ6MTU6NTguODM0NTU0Nzk5IC0wNTAwCisrKysgZGJ1cy0xLjYuOC9jb25maWd1cmUuYWMJMjAxMy0wNy0xMSAxNDoxNDo0MC45Njk1NTQ4NDggLTA1MDAKK0BAIC0yNTcsMTMgKzI1Nyw2IEBACisgICAjIGZ1bGwgdGVzdCBjb3ZlcmFnZSBpcyByZXF1aXJlZCwgUHl0aG9uIGlzIGEgaGFyZCBkZXBlbmRlbmN5CisgICBBQ19NU0dfTk9USUNFKFtGdWxsIHRlc3QgY292ZXJhZ2UgKC0tZW5hYmxlLXRlc3RzPXllcykgcmVxdWlyZXMgUHl0aG9uLCBkYnVzLXB5dGhvbiwgcHlnb2JqZWN0XSkKKyAgIEFNX1BBVEhfUFlUSE9OKFsyLjZdKQorLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUHl0aG9uIG1vZHVsZXMgZm9yIGZ1bGwgdGVzdCBjb3ZlcmFnZV0pCistICBpZiAiJFBZVEhPTiIgLWMgImltcG9ydCBkYnVzLCBnb2JqZWN0LCBkYnVzLm1haW5sb29wLmdsaWIiOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQoW25vXSkKKy0gICAgQUNfTVNHX0VSUk9SKFtjYW5ub3QgaW1wb3J0IGRidXMsIGdvYmplY3QsIGRidXMubWFpbmxvb3AuZ2xpYiBQeXRob24gbW9kdWxlc10pCistICBmaQorIGVsc2UKKyAgICMgLS1lbmFibGUtdGVzdHMgbm90IGdpdmVuOiBkbyBub3QgYWJvcnQgaWYgUHl0aG9uIGlzIG1pc3NpbmcKKyAgIEFNX1BBVEhfUFlUSE9OKFsyLjZdLCBbXSwgWzpdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzcyZDA4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK291dHB1dCgpIHsKKyAgaWYgWyAkPyAtZXEgMCBdCisgICAgdGhlbiBlY2hvICJQQVNTOiAkaSIKKyAgICBlbHNlIGVjaG8gIkZBSUw6ICRpIgorICBmaQorfQorCitmb3IgaSBpbiBgbHMgdGVzdC90ZXN0LSpgOyBkbyAuLyRpIC4vdGVzdC9kYXRhIERCVVNfVEVTVF9IT01FRElSPS4vdGVzdCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy90bXBkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvdG1wZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDg2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvdG1wZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gNTEwNWZlZGQ3ZmExM2RhZGQyZDBkODY0ZmI3Nzg3M2I4M2I3OWE0YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUaHUsIDIzIEp1biAyMDExIDEzOjUyOjA5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGJ1aWxkc3lzOiBoYXJkY29kZSBzb2NrZXRkaXIgdG8gL3RtcAorCit0aGUgVE1QRElSIGVudiB2YXIgaXNuJ3QgYWx3YXlzIHBvaW50aW5nIHRvIHRoZSByaWdodCB0YXJnZXQgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorCitPcmlnaW5hbCBjb21tZW50OgorCisJYXZvaWQgdG8gY2hlY2sgdG1wIGRpciBhdCBidWlsZCB0aW1lLiBpbnN0ZWFkIHVzZXMgaGFyZCBjb2RlZCAvdG1wIGhlcmUKKwljb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAxMSArLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDA4MDU0Yi4uNmQyNjE4MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTQ4MywxNiArMTQ4Myw3IEBAIEFDX1NVQlNUKFRFU1RfTEFVTkNIX0hFTFBFUl9CSU5BUlkpCisgQUNfREVGSU5FX1VOUVVPVEVEKERCVVNfVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWSwgIiRURVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZIiwKKyAgICAgICAgICAgICAgICAgICAgW0Z1bGwgcGF0aCB0byB0aGUgbGF1bmNoIGhlbHBlciB0ZXN0IHByb2dyYW0gaW4gdGhlIGJ1aWxkZGlyXSkKKyAKKy0jIyMjIEZpbmQgc29ja2V0IGRpcmVjdG9yaWVzCistaWYgISB0ZXN0IC16ICIkVE1QRElSIiA7IHRoZW4KKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9JFRNUERJUgorLWVsaWYgISB0ZXN0IC16ICIkVEVNUCIgOyB0aGVuCistICAgREVGQVVMVF9TT0NLRVRfRElSPSRURU1QCistZWxpZiAhIHRlc3QgLXogIiRUTVAiIDsgdGhlbgorLSAgIERFRkFVTFRfU09DS0VUX0RJUj0kVE1QCistZWxzZQorLSAgIERFRkFVTFRfU09DS0VUX0RJUj0vdG1wCistZmkKKytERUZBVUxUX1NPQ0tFVF9ESVI9L3RtcAorIAorIERFRkFVTFRfU09DS0VUX0RJUj1gZWNobyAkREVGQVVMVF9TT0NLRVRfRElSIHwgc2VkICdzLysvJTJCL2cnYAorIAorLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjguMjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS44LjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZjIwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS44LjIwLmJiCkBAIC0wLDAgKzEsNCBAQAoraW5jbHVkZSBkYnVzLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYjQ5ODkwYmJhYmVkYWIzYTFjM2Y0ZjczYzdmZjhiMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM0ZmJmNGM2NDYyMWM5NmU4NzFkYTkxZDJiNzI5YTViMDA1MzZlMTE2ZDNjNDYxMmE0NjlkOTI0YjFiNzAzYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM3MzZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIuaW5jCkBAIC0wLDAgKzEsMTA2IEBACitTVU1NQVJZID0gIkEgbGlnaHR3ZWlnaHQgU1NIIGFuZCBTQ1AgaW1wbGVtZW50YXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vbWF0dC51Y2MuYXNuLmF1L2Ryb3BiZWFyL2Ryb3BiZWFyLmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworIyBzb21lIGZpbGVzIGFyZSBmcm9tIG90aGVyIHByb2plY3RzIGFuZCBoYXZlIG90aGVycyBsaWNlbnNlIHRlcm1zOgorIyAgIHB1YmxpYyBkb21haW4sIE9wZW5TU0ggMy41cDEsIE9wZW5TU0gzLjYuMXAyLCBQdVRUWQorTElDRU5TRSA9ICJNSVQgJiBCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWE1ZWM0MGNhZmJhMjZmYzQzOTZkMGI1NTBmODI0ZTAxIgorCitERVBFTkRTID0gInpsaWIiCitSUFJPVklERVNfJHtQTn0gPSAic3NoIHNzaGQiIAorCitERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorCitTUkNfVVJJID0gImh0dHA6Ly9tYXR0LnVjYy5hc24uYXUvZHJvcGJlYXIvcmVsZWFzZXMvZHJvcGJlYXItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1maXgtMmtiLWtleXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhcmtleS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2Ryb3BiZWFyQC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2Ryb3BiZWFyLnNvY2tldCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly8wMDA1LWRyb3BiZWFyLWVuYWJsZS1wYW0ucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMDYtZHJvcGJlYXItY29uZmlndXJhdGlvbi1maWxlLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhciIKKworUEFNX1BMVUdJTlMgPSAibGlicGFtLXJ1bnRpbWUgXAorCXBhbS1wbHVnaW4tZGVueSBcCisJcGFtLXBsdWdpbi1wZXJtaXQgXAorCXBhbS1wbHVnaW4tdW5peCBcCisJIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1BMVUdJTlN9JywgJycsIGQpfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAiZHJvcGJlYXIiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyAxMCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImRyb3BiZWFyLnNvY2tldCIKKworQ0ZMQUdTX3ByZXBlbmQgPSAiIC1JLiAiCitMRCA9ICIke0NDfSIKKworU0JJTkNPTU1BTkRTID0gImRyb3BiZWFyIGRyb3BiZWFya2V5IGRyb3BiZWFyY29udmVydCIKK0JJTkNPTU1BTkRTID0gImRiY2xpZW50IHNzaCBzY3AiCitFWFRSQV9PRU1BS0UgPSAnTVVMVEk9MSBTQ1BQUk9HUkVTUz0xIFBST0dSQU1TPSIke1NCSU5DT01NQU5EU30gJHtCSU5DT01NQU5EU30iJworRVhUUkFfT0VDT05GICs9ICJcCisgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtJywgJy0tZGlzYWJsZS1wYW0nLCBkKX0iCitDRkxBR1MgKz0gIi1EU0ZUUFNFUlZFUl9QQVRIPVxcIiR7bGliZGlyfS9vcGVuc3NoL3NmdHAtc2VydmVyXFwiIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0gXAorCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQgXAorCQkke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vZHJvcGJlYXIgXAorCQkke0R9JHtiaW5kaXJ9IFwKKwkJJHtEfSR7c2JpbmRpcn0gXAorCQkke0R9JHtsb2NhbHN0YXRlZGlyfQorCisJaW5zdGFsbCAtbSAwNzU1IGRyb3BiZWFybXVsdGkgJHtEfSR7c2JpbmRpcn0vCisJbG4gLXMgJHtzYmluZGlyfS9kcm9wYmVhcm11bHRpICR7RH0ke2JpbmRpcn0vZGJjbGllbnQKKwkKKwlmb3IgaSBpbiAke1NCSU5DT01NQU5EU30KKwlkbworCQlsbiAtcyAuL2Ryb3BiZWFybXVsdGkgJHtEfSR7c2JpbmRpcn0vJGkKKwlkb25lCisJc2VkIC1lICdzLC9ldGMsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLC91c3Ivc2Jpbiwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsL3Zhciwke2xvY2Fsc3RhdGVkaXJ9LGcnIFwKKwkJLWUgJ3MsL3Vzci9iaW4sJHtiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsL3Vzciwke3ByZWZpeH0sZycgJHtXT1JLRElSfS9pbml0ID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Ryb3BiZWFyCisJY2htb2QgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kcm9wYmVhcgorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Ryb3BiZWFyICAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwlmaQorCisJIyBkZWFsIHdpdGggc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Ryb3BiZWFya2V5LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhckAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Ryb3BiZWFyLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kcm9wYmVhci5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNjcCBzc2giCisKK0FMVEVSTkFUSVZFX1RBUkdFVCA9ICIke3NiaW5kaXJ9L2Ryb3BiZWFybXVsdGkiCisKK3BrZ19wb3N0cm1fYXBwZW5kXyR7UE59ICgpIHsKKyAgaWYgWyAtZiAiJHtzeXNjb25mZGlyfS9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkiIF07IHRoZW4KKyAgICAgICAgcm0gJHtzeXNjb25mZGlyfS9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKKyAgZmkKKyAgaWYgWyAtZiAiJHtzeXNjb25mZGlyfS9kcm9wYmVhci9kcm9wYmVhcl9kc3NfaG9zdF9rZXkiIF07IHRoZW4KKyAgICAgICAgcm0gJHtzeXNjb25mZGlyfS9kcm9wYmVhci9kcm9wYmVhcl9kc3NfaG9zdF9rZXkKKyAgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzlkNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMS11cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1N1YmplY3Q6IFtQQVRDSCAxLzZdIHVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgb3B0aW9ucy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvb3B0aW9ucy5oIGIvb3B0aW9ucy5oCitpbmRleCA3ZDA2MzIyLi43MWEyMWMyIDEwMDY0NAorLS0tIGEvb3B0aW9ucy5oCisrKysgYi9vcHRpb25zLmgKK0BAIC0yNDcsNyArMjQ3LDcgQEAgbXVjaCB0cmFmZmljLiAqLworIC8qIFRoZSBjb21tYW5kIHRvIGludm9rZSBmb3IgeGF1dGggd2hlbiB1c2luZyBYMTEgZm9yd2FyZGluZy4KKyAgKiAiLXEiIGZvciBxdWlldCAqLworICNpZm5kZWYgWEFVVEhfQ09NTUFORAorLSNkZWZpbmUgWEFVVEhfQ09NTUFORCAiL3Vzci9iaW4veGF1dGggLXEiCisrI2RlZmluZSBYQVVUSF9DT01NQU5EICJ4YXV0aCAtcSIKKyAjZW5kaWYKKyAKKyAvKiBpZiB5b3Ugd2FudCB0byBlbmFibGUgcnVubmluZyBhbiBzZnRwIHNlcnZlciAoc3VjaCBhcyB0aGUgb25lIGluY2x1ZGVkIHdpdGgKKy0tIAorMS43LjExLjcKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAzLWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNhYjAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBjNWY1YzUwNTRjMWIxNTUzOWRjY2Y4NjZlMmMzZmFiYTdlZDY4NDU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0VyaWM9MjBCPUMzPUE5bmFyZD89IDxlcmljQGV1a3JlYS5jb20+CitEYXRlOiBUaHUsIDI1IEFwciAyMDEzIDAwOjI3OjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy82XSBjb25maWd1cmU6IGFkZCBhIHZhcmlhYmxlIHRvIGFsbG93IG9wZW5wdHkgY2hlY2sgdG8gYmUgY2FjaGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBjb25maWd1cmUuYWMgfCAxMSArKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDA1NDYxZjMuLjljMTZkOTAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE2NiwxNSArMTY2LDIwIEBAIEFDX0FSR19FTkFCTEUob3BlbnB0eSwKKyAJCQlBQ19NU0dfTk9USUNFKE5vdCB1c2luZyBvcGVucHR5KQorIAkJZWxzZQorIAkJCUFDX01TR19OT1RJQ0UoVXNpbmcgb3BlbnB0eSBpZiBhdmFpbGFibGUpCistCQkJQUNfU0VBUkNIX0xJQlMob3BlbnB0eSwgdXRpbCwgW0FDX0RFRklORShIQVZFX09QRU5QVFksLEhhdmUgb3BlbnB0eSgpIGZ1bmN0aW9uKV0pCisrCQkJQUNfU0VBUkNIX0xJQlMob3BlbnB0eSwgdXRpbCwgW2Ryb3BiZWFyX2N2X2Z1bmNfaGF2ZV9vcGVucHR5PXllc10pCisgCQlmaQorIAldLAorIAlbCisgCQlBQ19NU0dfTk9USUNFKFVzaW5nIG9wZW5wdHkgaWYgYXZhaWxhYmxlKQorLQkJQUNfU0VBUkNIX0xJQlMob3BlbnB0eSwgdXRpbCwgW0FDX0RFRklORShIQVZFX09QRU5QVFkpXSkKKysJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtkcm9wYmVhcl9jdl9mdW5jX2hhdmVfb3BlbnB0eT15ZXNdKQorIAldCisgKQorLQkJCisrCisraWYgdGVzdCAieCRkcm9wYmVhcl9jdl9mdW5jX2hhdmVfb3BlbnB0eSIgPSAieHllcyI7IHRoZW4KKysJQUNfREVGSU5FKEhBVkVfT1BFTlBUWSwsSGF2ZSBvcGVucHR5KCkgZnVuY3Rpb24pCisrCW5vX3B0Y19jaGVjaz15ZXMKKysJbm9fcHRteF9jaGVjaz15ZXMKKytmaQorIAorIEFDX0FSR19FTkFCTEUoc3lzbG9nLAorIAlbICAtLWRpc2FibGUtc3lzbG9nICAgICAgICBEb24ndCBpbmNsdWRlIHN5c2xvZyBzdXBwb3J0XSwKKy0tIAorMS43LjExLjcKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNC1maXgtMmtiLWtleXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA0LWZpeC0ya2Ita2V5cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM5ZDIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNC1maXgtMmtiLWtleXMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorU3ViamVjdDogW1BBVENIIDQvNl0gZml4IDJrYiBrZXlzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGtleC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEva2V4LmggYi9rZXguaAoraW5kZXggNzI0MzBlOS4uMzc1YzY3NyAxMDA2NDQKKy0tLSBhL2tleC5oCisrKysgYi9rZXguaAorQEAgLTY3LDYgKzY3LDYgQEAgc3RydWN0IEtFWFN0YXRlIHsKKyB9OworIAorIAorLSNkZWZpbmUgTUFYX0tFWEhBU0hCVUYgMjAwMAorKyNkZWZpbmUgTUFYX0tFWEhBU0hCVUYgMzAwMAorIAorICNlbmRpZiAvKiBfS0VYX0hfICovCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDA4YzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNS1kcm9wYmVhci1lbmFibGUtcGFtLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1N1YmplY3Q6IFtQQVRDSCA1LzZdIGRyb3BiZWFyIGVuYWJsZSBwYW0KKworZHJvcGJlYXI6IFdlIG5lZWQgbW9kaWZ5IGZpbGUgb3B0aW9uLmggYmVzaWRlcyBlbmFibGluZyBwYW0gaW4gXAorY29uZmlndXJlIGlmIHdlIHdhbnQgZHJvcGJlYXIgdG8gc3VwcG9ydCBwYW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgb3B0aW9ucy5oIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGRyb3BiZWFyLTIwMTMuNjIvb3B0aW9ucy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZHJvcGJlYXItMjAxMy42Mi5vcmlnL29wdGlvbnMuaAkyMDE0LTAxLTE0IDIxOjUzOjAyLjgwMzI2MjAwOSArMDAwMAorKysrIGRyb3BiZWFyLTIwMTMuNjIvb3B0aW9ucy5oCTIwMTQtMDEtMTQgMjE6NTM6NTYuMTE5MjYzNDYyICswMDAwCitAQCAtMTkyLDkgKzE5Miw5IEBACisgICogUEFNIGNoYWxsZW5nZS9yZXNwb25zZS4KKyAgKiBZb3UgY2FuJ3QgZW5hYmxlIGJvdGggUEFTU1dPUkQgYW5kIFBBTS4gKi8KKyAKKy0jZGVmaW5lIEVOQUJMRV9TVlJfUEFTU1dPUkRfQVVUSAorKy8qI2RlZmluZSBFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgqLworIC8qIFBBTSByZXF1aXJlcyAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1wYW0gKi8KKy0vKiNkZWZpbmUgRU5BQkxFX1NWUl9QQU1fQVVUSCAqLworKyNkZWZpbmUgRU5BQkxFX1NWUl9QQU1fQVVUSAorICNkZWZpbmUgRU5BQkxFX1NWUl9QVUJLRVlfQVVUSAorIAorIC8qIFdoZXRoZXIgdG8gdGFrZSBwdWJsaWMga2V5IG9wdGlvbnMgaW4gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDYtZHJvcGJlYXItY29uZmlndXJhdGlvbi1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNGM4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitTdWJqZWN0OiBbUEFUQ0ggNi82XSBkcm9wYmVhciBjb25maWd1cmF0aW9uIGZpbGUKKworZHJvcGJlYXI6IENoYW5nZSB0aGUgcGF0aCAoIi9ldGMvcGFtLmQvc3NoZCIgYXMgZGVmYXVsdCkgdG8gZmluZCBhIHBhbSBjb25maWd1cmF0aW9uIGZpbGUgXAordG8gIi9ldGMvcGFtLmQvZHJvcGJlYXIgZm9yIGRyb3BiZWFyIHdoZW4gZW5hYmxpbmcgcGFtIHN1cHBvcnRpbmciCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLU5hdXIgZHJvcGJlYXItMjAxMy42MC1vcmlnL3N2ci1hdXRocGFtLmMgZHJvcGJlYXItMjAxMy42MC9zdnItYXV0aHBhbS5jCistLS0gZHJvcGJlYXItMjAxMy42MC1vcmlnL3N2ci1hdXRocGFtLmMJMjAxMy0xMC0xNiAxNjozNDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBkcm9wYmVhci0yMDEzLjYwL3N2ci1hdXRocGFtLmMJMjAxMy0xMC0yMSAxNzowNDowNC45Njk0MTYwNTUgKzAyMDAKK0BAIC0yMTEsNyArMjExLDcgQEAKKyAJdXNlckRhdGEucGFzc3dkID0gcGFzc3dvcmQ7CisgCisgCS8qIEluaXQgcGFtICovCistCWlmICgocmMgPSBwYW1fc3RhcnQoInNzaGQiLCBOVUxMLCAmcGFtQ29udiwgJnBhbUhhbmRsZXApKSAhPSBQQU1fU1VDQ0VTUykgeworKwlpZiAoKHJjID0gcGFtX3N0YXJ0KCJkcm9wYmVhciIsIE5VTEwsICZwYW1Db252LCAmcGFtSGFuZGxlcCkpICE9IFBBTV9TVUNDRVNTKSB7CisgCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJwYW1fc3RhcnQoKSBmYWlsZWQsIHJjPSVkLCAlcyIsIAorIAkJCQlyYywgcGFtX3N0cmVycm9yKHBhbUhhbmRsZXAsIHJjKSk7CisgCQlnb3RvIGNsZWFudXA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTAxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaApAQCAtMCwwICsxLDE0MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBkcm9wYmVhcmtleSB1dGlsaXR5IGJ1aWx0IGluIHgzMiBhYmkgZm9ybWF0LCB3aGVuIGdlbmVyYXRpbmcgc3NoCitrZXlzLCB3YXMgZ2V0dGluZyBsb3N0IGluIHRoZSBpbmZpbml0ZSBsb29wLgorCitUaGlzIHBhdGNoIGZpeGVzIHRoZSBpc3N1ZSBieSBmaXhpbmcgdHlwZXMgb2YgdmFyaWFibGVzIGFuZAorcGFyYW1ldGVycyBvZiBmdW5jdGlvbnMgdXNlZCBpbiB0aGUgY29kZSwgd2hpY2ggd2VyZSBnZXR0aW5nCit1bmRlc2lyZWQgc2l6ZSwgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB4MzIgYWJpIHRvb2xjaGFpbi4KKworMjAxMy8wNS8yMworUmVjZWl2ZWQgdGhpcyBmaXggZnJvbSBIIEogTHUuCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKyMgRGF0ZSAxMzY5MzQ0MDc5IDI1MjAwCisjIE5vZGUgSUQgYTEwYTFjNDZiODU3Y2M4YTM5MjNjM2JiNmQxNTA0YWEyNWI2MDUyZgorIyBQYXJlbnQgIGU3NjYxNDE0NWFlYTY3ZjY2ZTRhNDI1NzY4NWM3NzFlZmJhMjFhYTEKK1R5cGRlZiBtcF9kaWdpdCB0byB1bnNpZ25lZCBsb25nIGxvbmcgZm9yIE1QXzY0QklUCisKK1doZW4gR0NDIGlzIHVzZWQgd2l0aCBNUF82NEJJVCwgd2Ugc2hvdWxkIHR5cGVkZWYgbXBfZGlnaXQgdG8gdW5zaWduZWQKK2xvbmcgbG9uZyBpbnN0ZWFkIG9mIHVuc2lnbmVkIGxvbmcgc2luY2UgZm9yIHgzMiwgdW5zaWduZWQgbG9uZyBpcworMzItYml0IGFuZCB1bnNpZ25lZCBsb25nIGxvbmcgaXMgNjQtYml0IGFuZCBpdCBpcyBzYWZlIHRvIHVzZSB1bnNpZ25lZAorbG9uZyBsb25nIGZvciA2NC1iaXQgaW50ZWdlciB3aXRoIEdDQy4KKworZGlmZiAtciBlNzY2MTQxNDVhZWEgLXIgYTEwYTFjNDZiODU3IGxpYnRvbW1hdGgvdG9tbWF0aC5oCistLS0gYS9saWJ0b21tYXRoL3RvbW1hdGguaAlUaHUgQXByIDE4IDIyOjU3OjQ3IDIwMTMgKzA4MDAKKysrKyBiL2xpYnRvbW1hdGgvdG9tbWF0aC5oCVRodSBNYXkgMjMgMTQ6MjE6MTkgMjAxMyAtMDcwMAorQEAgLTczLDcgKzczLDcgQEAKKyAgICB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgICBsb25nNjQ7CisgI2VuZGlmCisKKy0gICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBtcF9kaWdpdDsKKysgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBtcF9kaWdpdDsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBtcF93b3JkIF9fYXR0cmlidXRlX18gKChtb2RlKFRJKSkpOworCisgICAgI2RlZmluZSBESUdJVF9CSVQgICAgICAgICAgNjAKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKyMgRGF0ZSAxMzY5MzQ0MjQxIDI1MjAwCisjIE5vZGUgSUQgYzc1NTVhNGNiN2RlZDNhODg0MDliYTg1ZjQwMjdiYWE3YWY1ZjUzNgorIyBQYXJlbnQgIGExMGExYzQ2Yjg1N2NjOGEzOTIzYzNiYjZkMTUwNGFhMjViNjA1MmYKK0Nhc3QgdG8gbXBfZGlnaXQgd2hlbiB1cGRhdGluZyAqcmhvCisKK1RoZXJlIGlzCisKK2ludAorbXBfbW9udGdvbWVyeV9zZXR1cCAobXBfaW50ICogbiwgbXBfZGlnaXQgKiByaG8pCisKK1dlIHNob3VsZCBjYXN0IHRvIG1wX2RpZ2l0IGluc3RlYWQgb2YgdW5zaWduZWQgbG9uZyB3aGVuIHVwZGF0aW5nCisqcmhvIHNpbmNlIG1wX2RpZ2l0IG1heSBiZSB1bnNpZ25lZCBsb25nIGxvbmcgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZworbWF5IGJlIGRpZmZlcmVudCBmcm9tIHVuc2lnbmVkIGxvbmcsIGxpa2UgaW4geDMyLgorCitkaWZmIC1yIGExMGExYzQ2Yjg1NyAtciBjNzU1NWE0Y2I3ZGUgbGlidG9tbWF0aC9ibl9tcF9tb250Z29tZXJ5X3NldHVwLmMKKy0tLSBhL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCVRodSBNYXkgMjMgMTQ6MjE6MTkgMjAxMyAtMDcwMAorKysrIGIvbGlidG9tbWF0aC9ibl9tcF9tb250Z29tZXJ5X3NldHVwLmMJVGh1IE1heSAyMyAxNDoyNDowMSAyMDEzIC0wNzAwCitAQCAtNDgsNyArNDgsNyBAQAorICNlbmRpZgorCisgICAvKiByaG8gPSAtMS9tIG1vZCBiICovCistICAqcmhvID0gKHVuc2lnbmVkIGxvbmcpKCgobXBfd29yZCkxIDw8ICgobXBfd29yZCkgRElHSVRfQklUKSkgLSB4KSAmIE1QX01BU0s7CisrICAqcmhvID0gKG1wX2RpZ2l0KSgoKG1wX3dvcmQpMSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCkpIC0geCkgJiBNUF9NQVNLOworCisgICByZXR1cm4gTVBfT0tBWTsKKyB9CisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDU0MSAyNTIwMAorIyBOb2RlIElEIDdjNjU2ZTcwNzFhNjQxMjY4OGIyZjMwYTUyOWE5YWZhYzZjN2JmNWEKKyMgUGFyZW50ICBjNzU1NWE0Y2I3ZGVkM2E4ODQwOWJhODVmNDAyN2JhYTdhZjVmNTM2CitEZWZpbmUgTFRDX0ZBU1RfVFlQRSB0byB1bnNpZ25lZCBsb25nIGxvbmcgZm9yIF9feDg2XzY0X18KKworV2Ugc2hvdWxkIGRlZmluZSBMVENfRkFTVF9UWVBFIHRvIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnN0ZWFkIG9mIHVuc2lnbmVkCitsb25nIGlmIF9feDg2XzY0X18gdG8gc3VwcG9ydCB4MzIgd2hlcmUgdW5zaWduZWQgbG9uZyBsb25nIGlzIDY0LWJpdAorYW5kIHVuc2lnbmVkIGxvbmcgaXMgMzItYml0LgorCitkaWZmIC1yIGM3NTU1YTRjYjdkZSAtciA3YzY1NmU3MDcxYTYgbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2ZnLmgKKy0tLSBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCVRodSBNYXkgMjMgMTQ6MjQ6MDEgMjAxMyAtMDcwMAorKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2ZnLmgJVGh1IE1heSAyMyAxNDoyOTowMSAyMDEzIC0wNzAwCitAQCAtNzQsNyArNzQsNyBAQAorICAgICNkZWZpbmUgRU5ESUFOX0xJVFRMRQorICAgICNkZWZpbmUgRU5ESUFOXzY0QklUV09SRAorICAgICNkZWZpbmUgTFRDX0ZBU1QKKy0gICAjZGVmaW5lIExUQ19GQVNUX1RZUEUgICAgdW5zaWduZWQgbG9uZworKyAgICNkZWZpbmUgTFRDX0ZBU1RfVFlQRSAgICB1bnNpZ25lZCBsb25nIGxvbmcKKyAjZW5kaWYKKworIC8qIGRldGVjdCBQUEMzMiAqLworIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorIyBEYXRlIDEzNjkzNDQ3MzAgMjUyMDAKKyMgTm9kZSBJRCBhN2Q0NjkwMTU4ZmFlNGVkZTJjNGU1YjU2MjMzZTgzNzMwYmYzOGVlCisjIFBhcmVudCAgN2M2NTZlNzA3MWE2NDEyNjg4YjJmMzBhNTI5YTlhZmFjNmM3YmY1YQorVXNlIHVuc2lnbmVkIGxvbmcgbG9uZyBhYXMgdW5zaWduZWQgNjQtYml0IGludGVnZXIgZm9yIHg4Ni02NCBHQ0MKKworV2Ugc2hvdWxkIHVzZSB1bnNpZ25lZCBsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZCBsb25nIGFzIHVuc2lnbmVkCis2NC1iaXQgaW50ZWdlciBmb3IgeDg2LTY0IEdDQyB0byBzdXBwb3J0IHgzMiB3aGVyZSB1bnNpZ25lZCBsb25nIGlzCiszMi1iaXQuCisKK2RpZmYgLXIgN2M2NTZlNzA3MWE2IC1yIGE3ZDQ2OTAxNThmYSBsaWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaAorLS0tIGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgJVGh1IE1heSAyMyAxNDoyOTowMSAyMDEzIC0wNzAwCisrKysgYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaAlUaHUgTWF5IDIzIDE0OjMyOjEwIDIwMTMgLTA3MDAKK0BAIC0zNDMsNyArMzQzLDcgQEAKKyAvKiA2NC1iaXQgUm90YXRlcyAqLworICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX194ODZfNjRfXykgJiYgIWRlZmluZWQoTFRDX05PX0FTTSkKKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST0w2NCh1bnNpZ25lZCBsb25nIHdvcmQsIGludCBpKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIFJPTDY0KHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb2xxICUlY2wsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCitAQCAtMzUxLDcgKzM1MSw3IEBACisgICAgcmV0dXJuIHdvcmQ7CisgfQorCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIFJPUjY0KHVuc2lnbmVkIGxvbmcgd29yZCwgaW50IGkpCisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgUk9SNjQodW5zaWduZWQgbG9uZyBsb25nIHdvcmQsIGludCBpKQorIHsKKyAgICBhc20oInJvcnEgJSVjbCwlMCIKKyAgICAgICA6Ij1yIiAod29yZCkKK0BAIC0zNjEsNyArMzYxLDcgQEAKKworICNpZm5kZWYgTFRDX05PX1JPTEMKKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST0w2NGModW5zaWduZWQgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST0w2NGModW5zaWduZWQgbG9uZyBsb25nIHdvcmQsIGNvbnN0IGludCBpKQorIHsKKyAgICBhc20oInJvbHEgJTIsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCitAQCAtMzY5LDcgKzM2OSw3IEBACisgICAgcmV0dXJuIHdvcmQ7CisgfQorCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIFJPUjY0Yyh1bnNpZ25lZCBsb25nIHdvcmQsIGNvbnN0IGludCBpKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIFJPUjY0Yyh1bnNpZ25lZCBsb25nIGxvbmcgd29yZCwgY29uc3QgaW50IGkpCisgeworICAgIGFzbSgicm9ycSAlMiwlMCIKKyAgICAgICA6Ij1yIiAod29yZCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2U3ODdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIKQEAgLTAsMCArMSw0IEBACisjJVBBTS0xLjAKKworYXV0aCAgICAgaW5jbHVkZSAgY29tbW9uLWF1dGgKK2FjY291bnQgIGluY2x1ZGUgIGNvbW1vbi1hY2NvdW50CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjNjFiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyLnNvY2tldApAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0NvbmZsaWN0cz1kcm9wYmVhci5zZXJ2aWNlCisKK1tTb2NrZXRdCitMaXN0ZW5TdHJlYW09MjIKK0FjY2VwdD15ZXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1zb2NrZXRzLnRhcmdldAorQWxzbz1kcm9wYmVhcmtleS5zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhckAuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyQC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTk5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhckAuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVNTSCBQZXItQ29ubmVjdGlvbiBTZXJ2ZXIKK1dhbnRzPWRyb3BiZWFya2V5LnNlcnZpY2UKK0FmdGVyPXN5c2xvZy50YXJnZXQgZHJvcGJlYXJrZXkuc2VydmljZQorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyCitFeGVjU3RhcnQ9LUBTQklORElSQC9kcm9wYmVhciAtaSAtciAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSAkRFJPUEJFQVJfRVhUUkFfQVJHUworRXhlY1JlbG9hZD1AQkFTRV9CSU5ESVJAL2tpbGwgLUhVUCAkTUFJTlBJRAorU3RhbmRhcmRJbnB1dD1zb2NrZXQKK0tpbGxNb2RlPXByb2Nlc3MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFya2V5LnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcmtleS5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzIxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcmtleS5zZXJ2aWNlCkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TU0ggS2V5IEdlbmVyYXRpb24KK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleQorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRXhlY1N0YXJ0PUBTQklORElSQC9kcm9wYmVhcmtleSAtdCByc2EgLWYgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKK1JlbWFpbkFmdGVyRXhpdD15ZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2luaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4ZmVkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0CkBAIC0wLDAgKzEsMTEzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6CQlzc2hkCisjIFJlcXVpcmVkLVN0YXJ0OgkkcmVtb3RlX2ZzICRzeXNsb2cgJG5ldHdvcmtpbmcKKyMgUmVxdWlyZWQtU3RvcDoJJHJlbW90ZV9mcyAkc3lzbG9nCisjIERlZmF1bHQtU3RhcnQ6CTIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOgkJMQorIyBTaG9ydC1EZXNjcmlwdGlvbjoJRHJvcGJlYXIgU2VjdXJlIFNoZWxsIHNlcnZlcgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgRG8gbm90IGNvbmZpZ3VyZSB0aGlzIGZpbGUuIEVkaXQgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIGluc3RlYWQhCisjCisKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitEQUVNT049L3Vzci9zYmluL2Ryb3BiZWFyCitOQU1FPWRyb3BiZWFyCitERVNDPSJEcm9wYmVhciBTU0ggc2VydmVyIgorUElERklMRT0vdmFyL3J1bi9kcm9wYmVhci5waWQKKworRFJPUEJFQVJfUE9SVD0yMgorRFJPUEJFQVJfRVhUUkFfQVJHUz0KK05PX1NUQVJUPTAKKworc2V0IC1lCisKK3Rlc3QgISAtciAvZXRjL2RlZmF1bHQvZHJvcGJlYXIgfHwgLiAvZXRjL2RlZmF1bHQvZHJvcGJlYXIKK3Rlc3QgIiROT19TVEFSVCIgPSAiMCIgfHwgZXhpdCAwCit0ZXN0IC14ICIkREFFTU9OIiB8fCBleGl0IDAKK3Rlc3QgISAtaCAvdmFyL3NlcnZpY2UvZHJvcGJlYXIgfHwgZXhpdCAwCisKK3JlYWRvbmx5X3Jvb3Rmcz0wCitmb3IgZmxhZyBpbiBgYXdrICd7IGlmICgkMiA9PSAiLyIpIHsgc3BsaXQoJDQsRkxBR1MsIiwiKSB9IH07IEVORCB7IGZvciAoZiBpbiBGTEFHUykgcHJpbnQgRkxBR1NbZl0gfScgPC9wcm9jL21vdW50c2A7IGRvCisgIGNhc2UgJGZsYWcgaW4KKyAgIHJvKQorICAgICByZWFkb25seV9yb290ZnM9MQorICAgICA7OworICBlc2FjCitkb25lCisKK2lmIFsgJHJlYWRvbmx5X3Jvb3RmcyA9ICIxIiBdOyB0aGVuCisgIG1rZGlyIC1wIC92YXIvbGliL2Ryb3BiZWFyCisgIERST1BCRUFSX1JTQUtFWV9ERUZBVUxUPSIvdmFyL2xpYi9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkiCisgIERST1BCRUFSX0RTU0tFWV9ERUZBVUxUPSIvdmFyL2xpYi9kcm9wYmVhci9kcm9wYmVhcl9kc3NfaG9zdF9rZXkiCitlbHNlCisgIERST1BCRUFSX1JTQUtFWV9ERUZBVUxUPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSIKKyAgRFJPUEJFQVJfRFNTS0VZX0RFRkFVTFQ9Ii9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IgorZmkKKwordGVzdCAteiAiJERST1BCRUFSX0JBTk5FUiIgfHwgXAorICBEUk9QQkVBUl9FWFRSQV9BUkdTPSIkRFJPUEJFQVJfRVhUUkFfQVJHUyAtYiAkRFJPUEJFQVJfQkFOTkVSIgordGVzdCAtbiAiJERST1BCRUFSX1JTQUtFWSIgfHwgXAorICBEUk9QQkVBUl9SU0FLRVk9JERST1BCRUFSX1JTQUtFWV9ERUZBVUxUCit0ZXN0IC1uICIkRFJPUEJFQVJfRFNTS0VZIiB8fCBcCisgIERST1BCRUFSX0RTU0tFWT0kRFJPUEJFQVJfRFNTS0VZX0RFRkFVTFQKK3Rlc3QgLW4gIiREUk9QQkVBUl9LRVlUWVBFUyIgfHwgXAorICBEUk9QQkVBUl9LRVlUWVBFUz0icnNhIgorCitnZW5fa2V5cygpIHsKK2ZvciB0IGluICREUk9QQkVBUl9LRVlUWVBFUzsgZG8KKyAgY2FzZSAkdCBpbgorICAgIHJzYSkKKyAgICAgICAgaWYgWyAtZiAiJERST1BCRUFSX1JTQUtFWSIgLWEgISAtcyAiJERST1BCRUFSX1JTQUtFWSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHJtICREUk9QQkVBUl9SU0FLRVkgfHwgdHJ1ZQorICAgICAgICBmaQorICAgICAgICB0ZXN0IC1mICREUk9QQkVBUl9SU0FLRVkgfHwgZHJvcGJlYXJrZXkgLXQgcnNhIC1mICREUk9QQkVBUl9SU0FLRVkKKwk7OworICAgIGRzYSkKKyAgICAgICAgaWYgWyAtZiAiJERST1BCRUFSX0RTU0tFWSIgLWEgISAtcyAiJERST1BCRUFSX0RTU0tFWSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHJtICREUk9QQkVBUl9EU1NLRVkgfHwgdHJ1ZQorICAgICAgICBmaQorICAgICAgICB0ZXN0IC1mICREUk9QQkVBUl9EU1NLRVkgfHwgZHJvcGJlYXJrZXkgLXQgZHNzIC1mICREUk9QQkVBUl9EU1NLRVkKKwk7OworICBlc2FjCitkb25lCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorCWdlbl9rZXlzCisJS0VZX0FSR1M9IiIKKwl0ZXN0IC1mICREUk9QQkVBUl9EU1NLRVkgJiYgS0VZX0FSR1M9IiRLRVlfQVJHUyAtZCAkRFJPUEJFQVJfRFNTS0VZIgorCXRlc3QgLWYgJERST1BCRUFSX1JTQUtFWSAmJiBLRVlfQVJHUz0iJEtFWV9BUkdTIC1yICREUk9QQkVBUl9SU0FLRVkiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXAgJFBJREZJTEUgXAorCSAgLXggIiREQUVNT04iIC0tICRLRVlfQVJHUyBcCisJICAgIC1wICIkRFJPUEJFQVJfUE9SVCIgJERST1BCRUFSX0VYVFJBX0FSR1MKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14ICIkREFFTU9OIiAtcCAkUElERklMRQorCWVjaG8gIiROQU1FLiIKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwllY2hvIC1uICJSZXN0YXJ0aW5nICRERVNDOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXggIiREQUVNT04iIC1wICRQSURGSUxFCisJc2xlZXAgMQorCUtFWV9BUkdTPSIiCisJdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLWQgJERST1BCRUFSX0RTU0tFWSIKKwl0ZXN0IC1mICREUk9QQkVBUl9SU0FLRVkgJiYgS0VZX0FSR1M9IiRLRVlfQVJHUyAtciAkRFJPUEJFQVJfUlNBS0VZIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1wICRQSURGSUxFIFwKKwkgIC14ICIkREFFTU9OIiAtLSAkS0VZX0FSR1MgXAorCSAgICAtcCAiJERST1BCRUFSX1BPUlQiICREUk9QQkVBUl9FWFRSQV9BUkdTCisJZWNobyAiJE5BTUUuIgorCTs7CisgICopCisJTj0vZXRjL2luaXQuZC8kTkFNRQorCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNS42OC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTUuNjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3NDlkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTUuNjguYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGRyb3BiZWFyLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiNzY2NGFjMTBmN2NjMjMwMWM1MzBlYjgwYzc1NmZjNWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTVlYTdjMWU5MDRmZmU0YjFjZGJlMWFkZGNhODI5MWEyNTMzZDdkMjg1ZmQyMmFjMzM2MDhlOTUwMmE2MjQ0NiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU5OTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQtMi4xLjAvYXV0b3Rvb2xzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0F2b2lkIHVzaW5nIGV4cGF0J3MgbTQgZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1dvcmthcm91bmQgc3BlY2lmaWMgdG8gb3VyIGJ1aWxkIHN5c3RlbS4KKworU2lnbmVkLW9mZi1ieTogS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworVXBkYXRlZCB0byBhcHBseSBvdmVyIGV4cGF0IDIuMS4wCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK2RpZmYgLU51cmQgZXhwYXQtMi4xLjAvY29uZmlndXJlLmluIGV4cGF0LTIuMS4wL2NvbmZpZ3VyZS5pbgorLS0tIGV4cGF0LTIuMS4wL2NvbmZpZ3VyZS5pbgkyMDEyLTAzLTA0IDAxOjQ1OjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGV4cGF0LTIuMS4wL2NvbmZpZ3VyZS5pbgkyMDEyLTA1LTEwIDIxOjA0OjQ0LjAwMDAwMDAwMCArMDMwMAorQEAgLTUxLDggKzUxLDYgQEAKKyAKKyBBQ19DT05GSUdfSEVBREVSKGV4cGF0X2NvbmZpZy5oKQorIAorLXNpbmNsdWRlKGNvbmZ0b29scy9hY19jX2JpZ2VuZGlhbl9jcm9zcy5tNCkKKy0KKyBBQ19MSUJUT09MX1dJTjMyX0RMTAorIEFDX1BST0dfTElCVE9PTAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmFmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC5pbmMKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJBIHN0cmVhbS1vcmllbnRlZCBYTUwgcGFyc2VyIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJFeHBhdCBpcyBhbiBYTUwgcGFyc2VyIGxpYnJhcnkgd3JpdHRlbiBpbiBDLiBJdCBpcyBhIHN0cmVhbS1vcmllbnRlZCBwYXJzZXIgaW4gd2hpY2ggYW4gYXBwbGljYXRpb24gcmVnaXN0ZXJzIGhhbmRsZXJzIGZvciB0aGluZ3MgdGhlIHBhcnNlciBtaWdodCBmaW5kIGluIHRoZSBYTUwgZG9jdW1lbnQgKGxpa2Ugc3RhcnQgdGFncykiCitIT01FUEFHRSA9ICJodHRwOi8vZXhwYXQuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9leHBhdC9leHBhdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBnemlwbmF0aXZlCisKKyMgVGhpcyBwYWNrYWdlIHVzZXMgYW4gYXJjaGl2ZSBmb3JtYXQga25vd24gdG8gaGF2ZSBpc3N1ZSB3aXRoIHNvbWUKKyMgdmVyc2lvbnMgb2YgZ3ppcAorZG9fdW5wYWNrW2RlcGVuZHNdICs9ICJnemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9jb25mdG9vbHMvbGlidG9vbC5tNAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjEuMC5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgZXhwYXQuaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xYjcxZjY4MTcxM2QxMjU2ZTFjMjNiMDg5MDkyMDg3NCIKKworU1JDX1VSSVttZDVzdW1dID0gImRkN2RhYjdhNWZlYTk3ZDJhNmE0M2Y1MTE0NDliN2NkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgyMzcwNTQ3MmY4MTZkZjIxYzhmNmFhMDI2ZGQxNjJiMjgwODA2ODM4YmI1NWIzNDMyYjBmYjFmY2NhN2ViODYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2Rpc2FibGVfamF2YS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZGlzYWJsZV9qYXZhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzVmMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2Rpc2FibGVfamF2YS5wYXRjaApAQCAtMCwwICsxLDM5IEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMJMjAwNi0xMS0yNyAwOTowMjowMS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2NvbmZpZ3VyZS5hYwkyMDExLTAzLTE2IDE2OjU1OjM2LjExMTM5NjU1NyAtMDcwMAorQEAgLTM2LDI3ICszNiwxNSBAQAorIGd0X0pBVkFfQ0hPSUNFCisgCisgZ3RfR0NKCistaWYgdGVzdCAtbiAiJEhBVkVfR0NKIiAmJiB0ZXN0ICIkSkFWQV9DSE9JQ0UiID0geWVzOyB0aGVuCistICBCVUlMREpBVkFFWEU9eWVzCistZWxzZQorICAgQlVJTERKQVZBRVhFPW5vCistZmkKKyBBQ19TVUJTVChCVUlMREpBVkFFWEUpCisgCisgZ3RfSkFWQUVYRUMKKyBndF9KQVZBQ09NUChbMS4zXSkKKyBBQ19DSEVDS19QUk9HKEpBUiwgamFyLCBqYXIpCistaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUNPTVAiICYmIHRlc3QgLW4gIiRKQVIiICYmIHRlc3QgIiRKQVZBX0NIT0lDRSIgIT0gbm87IHRoZW4KKy0gIEJVSUxESkFWQT15ZXMKKy1lbHNlCisgICBCVUlMREpBVkE9bm8KKy1maQorIEFDX1NVQlNUKEJVSUxESkFWQSkKKy1pZiB0ZXN0IC1uICIkSEFWRV9KQVZBRVhFQyIgJiYgdGVzdCAkQlVJTERKQVZBID0geWVzOyB0aGVuCistICBURVNUSkFWQT15ZXMKKy1lbHNlCisgICBURVNUSkFWQT1ubworLWZpCisgQUNfU1VCU1QoVEVTVEpBVkEpCisgCisgZ3RfQ1NIQVJQQ09NUApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTNmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9hY2xvY2FsX3ZlcnNpb24ucGF0Y2gKQEAgLTAsMCArMSwxMTAgQEAKKworVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSByZXF1aXJlZCB2ZXJzaW9uIG51bWJlciBmcm9tIDIuNjEgdG8gdGhlIAorY3VycmVudCAyLjY1IHZlcnNpb24gb2YgYWNsb2NhbCwgdGhpcyB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCAKK3doZW4gd2UgdXBkYXRlIGFjbG9jYWwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTY5NTI2MDczIC0wNzAwCitAQCAtMTQ4LDcgKzE0OCw3IEBACisgICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKyAgIGRubCBBdXRvY29uZiA+PSAyLjYxIHN1cHBvcnRzIGRvdHMgaW4gLS13aXRoIG9wdGlvbnMuCistICBkZWZpbmUoW05fQV9NX0VdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjFdKSxbLTFdLFt0cmFuc2xpdChbJDFdLFsuXSxbX10pXSxbJDFdKV0pCisrICBkZWZpbmUoW05fQV9NX0VdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjVdKSxbLTFdLFt0cmFuc2xpdChbJDFdLFsuXSxbX10pXSxbJDFdKV0pCisgICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgIHVzZV9hZGRpdGlvbmFsPXllcworICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRobHkvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRobHkvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU3MDUyNjkwNCAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh4L2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6MzYuMzkxNTE5Nzc1IC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh4L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41NzI1MjU3NzMgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeS9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeS9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTc4Mzk0OTE2IC0wNzAwCitAQCAtMTEsNyArMTEsNyBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisgW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh6L2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6MzYuMzkxNTE5Nzc1IC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh6L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41ODYzOTU0MTYgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC10b29scy9hY2xvY2FsLm00CTIwMDYtMTEtMjcgMDk6MzQ6MzIuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6Mjc6MDEuMTM1NjgyODA3IC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvZXhhbXBsZXMvYWNsb2NhbC5tNAkyMDA2LTExLTI3IDA5OjE2OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZXhhbXBsZXMvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI2OjUyLjU4OTM5NjY4MyAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfZ251X3NvdXJjZV9jaXJjdWxhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg2MTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfZ251X3NvdXJjZV9jaXJjdWxhci5wYXRjaApAQCAtMCwwICsxLDM0OCBAQAorCitUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gQUNfR05VX1NPVVJDRSBpbgorQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TLgorCitUaGFua3MgdG8gTWFyayBIYXRsZSBmb3IgdGhlIHRpbWVseSBwb2ludGVycyBhbmQgZml4ZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2V4dGVuc2lvbnMubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAwNi0xMS0yNyAwOToxNDozOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMTEtMDMtMTYgMjM6NTQ6MDEuNzExOTIzNDQ4IC0wNzAwCitAQCAtMTYsNDMgKzE2LDQ3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrI0FDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorKyNbCisrIyAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCisrIyAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKysjCisrIyAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrIyAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKysjICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCisrIworKyMgIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCisrI1svKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKysjI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworKyMjIHVuZGVmIF9fRVhURU5TSU9OU19fCisrIyNlbmRpZgorKyMjaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworKyMjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworKyMjZW5kaWYKKysjI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorKyMjIHVuZGVmIF9UQU5ERU1fU09VUkNFCisrIyNlbmRpZl0pCisrIyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorKyMgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKysjICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKysjICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworKyMjCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKysjCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKysjICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorKyMgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorKyMgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisrIyAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKysjICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisrIyAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCisrI10pCisgCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKyBBQ19ERUZVTihbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy0gIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0pCisrWworKyAgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKworKyAgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisrXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZ251bGliLWNvbXAubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZ251bGliLWNvbXAubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMDYtMTEtMjcgMDk6MzM6MTkuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAxMS0wMy0xNiAyMzo1MDoxNy40NzE1MzE4MzggLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyBdKQorIAorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9tYmNoYXIubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9tYmNoYXIubTQJMjAwNi0xMS0yNyAwOToxNDozOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9tYmNoYXIubTQJMjAxMS0wMy0xNiAyMzo1MDoxMC44MTQzOTY1MjkgLTA3MDAKK0BAIC05LDcgKzksNyBAQAorIAorIEFDX0RFRlVOKFtnbF9NQkNIQVJdLAorIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgZG5sIFRoZSBmb2xsb3dpbmcgbGluZSBpcyB0aGF0IHNvIHRoZSB1c2VyIGNhbiB0ZXN0IEhBVkVfV0NIQVJfSAorICAgZG5sIGJlZm9yZSAjaW5jbHVkZSAibWJjaGFyLmgiLgorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFt3Y2hhci5oXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC93Y3dpZHRoLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC93Y3dpZHRoLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAkyMDExLTAzLTE2IDIzOjUwOjA4LjM1NzM5NjI0NyAtMDcwMAorQEAgLTcsNyArNyw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfV0NXSURUSF0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDx3Y2hhci5oPiB0byBkZWNsYXJlIHdjd2lkdGgoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorICAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XQ0hBUl9UXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9tNC9sb2NrLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9tNC9sb2NrLm00CTIwMDYtMTAtMjQgMTM6NTk6NTkuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9tNC9sb2NrLm00CTIwMTEtMDMtMTYgMjM6NTA6MDQuMzU1ODkxNjc2IC0wNzAwCitAQCAtMzUsNyArMzUsNyBAQAorICAgQUNfQkVGT1JFKFskMF0sIFtnbF9BUkdQXSlkbmwKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKSBkbmwgbmVlZGVkIGZvciBwdGhyZWFkX3J3bG9ja190IG9uIGdsaWJjIHN5c3RlbXMKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkgZG5sIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zCisgICBkbmwgQ2hlY2sgZm9yIG11bHRpdGhyZWFkaW5nLgorICAgQUNfQVJHX0VOQUJMRSh0aHJlYWRzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10aHJlYWRzPXtwb3NpeHxzb2xhcmlzfHB0aHx3aW4zMn1dLCBbc3BlY2lmeSBtdWx0aXRocmVhZGluZyBBUEldKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAkyMDExLTAzLTE2IDIzOjUzOjI4LjQ4NzY3MTI2NiAtMDcwMAorQEAgLTE2LDQzICsxNiw0NyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorKyNBQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKysjWworKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCisrIworKyMgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyMgIEFDX1JFUVVJUkUoW0FDX0FJWF0pCisrIyAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorKyMKKysjICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorKyNbLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisrIyNpZm5kZWYgX19FWFRFTlNJT05TX18KKysjIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworKyMjZW5kaWYKKysjI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjI2VuZGlmCisrIyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorKyMjZW5kaWZdKQorKyMgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKysjICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCisrIyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisrIyAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKysjIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisrIwkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKysjICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKysjICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorKyMgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisrIyAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorKyMgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorKyNdKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisgQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldKQorK1sKKysgICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysKKysgICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorK10pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9mbm1hdGNoLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9mbm1hdGNoLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAkyMDA2LTExLTI3IDA5OjE0OjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9mbm1hdGNoLm00CTIwMTEtMDMtMTYgMjM6NTI6MDYuNDc3NDYzNjcxIC0wNzAwCitAQCAtOTEsNyArOTEsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX0ZOTUFUQ0hfR05VXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPGZubWF0Y2guaD4gdG8gZGVjbGFyZSBGTk1fQ0FTRUZPTEQgZXRjLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBGTk1BVENIX0g9CisgICBfQUNfRlVOQ19GTk1BVENIX0lGKFtHTlVdLCBbYWNfY3ZfZnVuY19mbm1hdGNoX2dudV0sCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRkZWxpbS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRkZWxpbS5tNAkyMDA2LTExLTI3IDA5OjE0OjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRkZWxpbS5tNAkyMDExLTAzLTE2IDIzOjUyOjIyLjg3MTY3NDg0NSAtMDcwMAorQEAgLTEyLDcgKzEyLDcgQEAKKyBbCisgCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZ2V0ZGVsaW0oKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVQTEFDRV9GVU5DUyhnZXRkZWxpbSkKKyAgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoZ2V0ZGVsaW0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRsaW5lLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRsaW5lLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAkyMDA2LTExLTI3IDA5OjE0OjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRsaW5lLm00CTIwMTEtMDMtMTYgMjM6NTE6NDkuODI5OTcxMTA4IC0wNzAwCitAQCAtMTYsNyArMTYsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX0dFVExJTkVdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RkaW8uaD4gdG8gZGVjbGFyZSBnZXRsaW5lKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX0NIRUNLX0RFQ0xTKFtnZXRsaW5lXSkKKyAKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dudWxpYi1jb21wLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMDYtMTEtMjcgMDk6MzM6MzYuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMTEtMDMtMTYgMjM6NTI6MTguOTcwNDUwNDg4IC0wNzAwCitAQCAtMjUsNyArMjUsNyBAQAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgICBBQ19SRVFVSVJFKFtnbF9MT0NLX0VBUkxZXSkKKyBdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9tYmNoYXIubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9tYmNoYXIubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CTIwMTEtMDMtMTYgMjM6NTE6NDAuODQ0NDEwMjE2IC0wNzAwCitAQCAtOSw3ICs5LDcgQEAKKyAKKyBBQ19ERUZVTihbZ2xfTUJDSEFSXSwKKyBbCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIGRubCBUaGUgZm9sbG93aW5nIGxpbmUgaXMgdGhhdCBzbyB0aGUgdXNlciBjYW4gdGVzdCBIQVZFX1dDSEFSX0gKKyAgIGRubCBiZWZvcmUgI2luY2x1ZGUgIm1iY2hhci5oIi4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbd2NoYXIuaF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cGNweS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cGNweS5tNAkyMDA2LTExLTI3IDA5OjE0OjU1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQJMjAxMS0wMy0xNiAyMzo1MjoxNC42OTEzOTYwNDUgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1NUUENQWV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBzdHBjcHkoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVQTEFDRV9GVU5DUyhzdHBjcHkpCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cGNweSA9IG5vOyB0aGVuCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBuY3B5Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBuY3B5Lm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAkyMDA2LTExLTI3IDA5OjE0OjU1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBuY3B5Lm00CTIwMTEtMDMtMTYgMjM6NTI6MTAuMzU2NjQxNDU5IC0wNzAwCitAQCAtNyw3ICs3LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19TVFBOQ1BZXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIHN0cG5jcHkoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgZG5sIEJvdGggZ2xpYmMgYW5kIEFJWCAoNC4zLjMsIDUuMSkgaGF2ZSBhbiBzdHBuY3B5KCkgZnVuY3Rpb24KKyAgIGRubCBkZWNsYXJlZCBpbiA8c3RyaW5nLmg+LiBJdHMgc2lkZSBlZmZlY3RzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvd2N3aWR0aC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvd2N3aWR0aC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvd2N3aWR0aC5tNAkyMDExLTAzLTE2IDIzOjUxOjA4LjI2MDMyNDIyMSAtMDcwMAorQEAgLTcsNyArNyw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfV0NXSURUSF0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDx3Y2hhci5oPiB0byBkZWNsYXJlIHdjd2lkdGgoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorICAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XQ0hBUl9UXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9saWJnZXR0ZXh0cG8vZ251bGliLW00L2dudWxpYi1jb21wLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9saWJnZXR0ZXh0cG8vZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMDYtMTEtMjcgMDk6MzM6NDUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDExLTAzLTE2IDIzOjUxOjAyLjAzNjA2MTMxNyAtMDcwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV0pCisgXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvbTQvcmVnZXgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvbTQvcmVnZXgubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CTIwMDYtMTEtMjcgMDk6MDI6MDUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvbTQvcmVnZXgubTQJMjAxMS0wMy0xNiAyMzo1MDo1My41MzM0NzcxOTUgLTA3MDAKK0BAIC0xMTYsNyArMTE2LDcgQEAKKyAgIGRubCB0byBnZXQgdGhlbS4KKyAKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgbWVtcGNweSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19SRVFVSVJFKFtBQ19DX1JFU1RSSUNUXSkKKyAgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfQUxMT0NBXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LWF1dG9jb25mLWxpYi1saW5rLW5vLUwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyZmU1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKKworIyBQdWxsZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyMgCisjIENvbW1lbnRlZCBieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworLS0tIGdldHRleHQtMC4xNy9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNH4JMjAwOS0wNC0xNyAxNToxMjozMC4wMDAwMDAwMDAgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAwOS0wNC0xNyAxNTozNzozOS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yNjcsNiArMjY3LDkgQEAKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgZmkKKysgICAgICAgICAgZG5sIEp1c3QgbGV0IHRoZSBjb21waWxlciBmaW5kIHRoZSBsaWJyYXJ5LCB0aGUgY29tcGlsZXIgYW5kIHVzZXIgYXJlIHNtYXJ0ZXIgdGhlbiB0aGlzIHNjcmlwdAorKyAgICAgICAgICBkbmwgd2hlbiBjcm9zcyBjb21waWxpbmcgYW5kIHdvcmtpbmcgd2l0aCBhIHJlbG9jYXRlZCBpbnN0YWxsLgorKyAgICAgICAgICBmb3VuZF9kaXI9IiIKKyAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDllNDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXZwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKKworIyBQdWxsZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyMgCisjIENvbW1lbnRlZCBieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9pbnRsL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgkyMDA2LTExLTI3IDA5OjAyOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9pbnRsL01ha2VmaWxlLmluCTIwMTEtMDMtMTYgMTY6MDQ6NDkuMTc1NDE5OTMwIC0wNzAwCitAQCAtMzUsNyArMzUsNyBAQAorICMgICAgJ21ha2UnIGRvZXMgdGhlIHdyb25nIHRoaW5nIGlmIEdOVSBnZXR0ZXh0IHdhcyBjb25maWd1cmVkIHdpdGgKKyAjICAgICIuL2NvbmZpZ3VyZSAtLXNyY2Rpcj1gcHdkYCIsIG5hbWVseSBpdCBnZXRzIGNvbmZ1c2VkIGJ5IHRoZSAubG8gYW5kIC5sYQorICMgICAgZmlsZXMgaXQgZmluZHMgaW4gc3JjZGlyID0gLi4vLi4vZ2V0dGV4dC1ydW50aW1lL2ludGwuCistVlBBVEggPSAkKHNyY2RpcikKKysjVlBBVEggPSAkKHNyY2RpcikKKyAKKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYThkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2hhcmRjb2RlX21hY3JvX3ZlcnNpb24ucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorCitUaGlzIHBhdGNoIGhhcmRjb2RlcyBpbiB2ZXJzaW9uIDAuMTcgZm9yIHRoZSBHRVRURVhUX01BQ1JPX1ZFUlNJT04sCit0aGUgdmVyc2lvbiBjaGVjayBpcyBvbmx5IHBhcnQgb2YgMC4xNyBhbmQgd2lsbCBub3QgYWZmZWN0IGFueSAwLjE2LjEKK29wZXJhdGlvbnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9tNC9wby5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC1ydW50aW1lL200L3BvLm00CTIwMTEtMDMtMTcgMDI6MjQ6MjguOTUzNTIwMjMxIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL200L3BvLm00CTIwMTEtMDMtMTcgMDI6Mjg6MjUuNDU1Mzk2ODYyIC0wNzAwCitAQCAtMjcsNiArMjcsOSBAQAorICAgQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQorICAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKyAKKysgIGRubCBIYXJkY29kZSB0aGUgTUFDUk9fVkVSU0lPTiB0byAwLjE3IGZvciBnbnV0bHMKKysgIEFDX1NVQlNUKFtHRVRURVhUX01BQ1JPX1ZFUlNJT05dLCBbMC4xN10pCisrCisgICBkbmwgUGVyZm9ybSB0aGUgZm9sbG93aW5nIHRlc3RzIGFsc28gaWYgLS1kaXNhYmxlLW5scyBoYXMgYmVlbiBnaXZlbiwKKyAgIGRubCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBmb3IgIm1ha2UgZGlzdCIgdG8gd29yay4KKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtcnVudGltZS9wby9NYWtlZmlsZS5pbi5pbgkyMDExLTAzLTE3IDAyOjI0OjI4Ljk1MzUyMDIzMSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9wby9NYWtlZmlsZS5pbi5pbgkyMDExLTAzLTE3IDAyOjI4OjA3LjU3NDM5NTE0NCAtMDcwMAorQEAgLTEwLDYgKzEwLDkgQEAKKyAjCisgIyBPcmlnaW46IGdldHRleHQtMC4xNgorIAorKyMgSGFyZGNvZGUgdGhpcyB2YWx1ZSBmb3IgZ251dGxzIGJ1aWxkaW5nIGFnYWluc3QgZ3BsdjIgY29kZQorK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTcKKysKKyBQQUNLQUdFID0gQFBBQ0tBR0VACisgVkVSU0lPTiA9IEBWRVJTSU9OQAorIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvcG8vTWFrZWZpbGUuaW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyNDoyOC45NTM1MjAyMzEgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCTIwMTEtMDMtMTcgMDI6Mjg6MDcuNTc0Mzk1MTQ0IC0wNzAwCitAQCAtMTAsNiArMTAsOSBAQAorICMKKyAjIE9yaWdpbjogZ2V0dGV4dC0wLjE2CisgCisrIyBIYXJkY29kZSB0aGlzIHZhbHVlIGZvciBnbnV0bHMgYnVpbGRpbmcgYWdhaW5zdCBncGx2MiBjb2RlCisrR0VUVEVYVF9NQUNST19WRVJTSU9OID0gMC4xNworKworIFBBQ0tBR0UgPSBAUEFDS0FHRUAKKyBWRVJTSU9OID0gQFZFUlNJT05ACisgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9saW5rbGliX2Zyb21fMC4xNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTIxMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9saW5rbGliX2Zyb21fMC4xNy5wYXRjaApAQCAtMCwwICsxLDcyMCBAQAorCisjIFB1bGxlZCBmcm9tIE9wZW5FbWJlZGRlZAorIyAKKyMgQ29tbWVudGVkIGJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMDYtMTEtMjcgMDk6MDE6NTguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAxMS0wMy0xNyAwMDozNjowOC43MTA4MzY3MjAgLTA3MDAKK0BAIC02LDEyICs2LDE0IEBACisgCisgZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorIAorLUFDX1BSRVJFUSgyLjUwKQorK0FDX1BSRVJFUSgyLjU0KQorIAorIGRubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisgZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorIGRubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCisgZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCisrZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCisgQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NdLAorIFsKKyAgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCitAQCAtMjQsMTMgKzI2LDE2IEBACisgICAgIGFjX2N2X2xpYltdTmFtZVtdX2xpYnM9IiRMSUJbXU5BTUUiCisgICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorICAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fcHJlZml4PSIkTElCW11OQU1FW11fUFJFRklYIgorICAgXSkKKyAgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCisgICBMVExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicyIKKyAgIElOQ1tdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzIgorKyAgTElCW11OQU1FW11fUFJFRklYPSIkYWNfY3ZfbGliW11OYW1lW11fcHJlZml4IgorICAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisgICBBQ19TVUJTVChbTElCXU5BTUUpCisgICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgIGRubCBBbHNvIHNldCBIQVZFX0xJQltdTkFNRSBzbyB0aGF0IEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gcmV1c2UgdGhlCisgICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKyAgIEhBVkVfTElCW11OQU1FPXllcworQEAgLTQ2LDYgKzUxLDggQEAKKyBkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKKyBkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCisgZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgorK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKKytkbmwgd2FzIGZvdW5kIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KKyBBQ19ERUZVTihbQUNfTElCX0hBVkVfTElOS0ZMQUdTXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorQEAgLTgyLDE3ICs4OSwyNCBAQAorICAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCisgICAgIExJQltdTkFNRT0KKyAgICAgTFRMSUJbXU5BTUU9CisrICAgIExJQltdTkFNRVtdX1BSRUZJWD0KKysKKyAgIGZpCisgICBBQ19TVUJTVChbSEFWRV9MSUJdTkFNRSkKKyAgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKyAgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQorICAgdW5kZWZpbmUoW05hbWVdKQorICAgdW5kZWZpbmUoW05BTUVdKQorIF0pCisgCisgZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKKy1kbmwgbGliZXh0LCBzaGxpYmV4dCwgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKy1kbmwgaGFyZGNvZGVfZGlyZWN0LCBoYXJkY29kZV9taW51c19MLgorK2RubCAgIGFjbF9saWJleHQsCisrZG5sICAgYWNsX3NobGliZXh0LAorK2RubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLAorK2RubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorK2RubCAgIGFjbF9oYXJkY29kZV9kaXJlY3QsCisrZG5sICAgYWNsX2hhcmRjb2RlX21pbnVzX0wuCisgQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCisgWworICAgZG5sIFRlbGwgYXV0b21ha2UgPj0gMS4xMCB0byBjb21wbGFpbiBpZiBjb25maWcucnBhdGggaXMgbWlzc2luZy4KK0BAIC0xMDksMTIgKzEyMywxNCBAQAorICAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorICAgXSkKKyAgIHdsPSIkYWNsX2N2X3dsIgorLSAgbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKy0gIHNobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorLSAgaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKy0gIGhhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKysgIGFjbF9saWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorKyAgYWNsX3NobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorKyAgYWNsX2xpYm5hbWVfc3BlYz0iJGFjbF9jdl9saWJuYW1lX3NwZWMiCisrICBhY2xfbGlicmFyeV9uYW1lc19zcGVjPSIkYWNsX2N2X2xpYnJhcnlfbmFtZXNfc3BlYyIKKysgIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisrICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorKyAgYWNsX2hhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisrICBhY2xfaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorICAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KKyAgIEFDX0FSR19FTkFCTEUocnBhdGgsCisgICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorQEAgLTEyNCwyMCArMTQwLDI0IEBACisgZG5sIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorIGRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKyBkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KKytkbmwgQWxzbywgc2V0cyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZSB3YXMgZm91bmQKKytkbmwgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorIEFDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0JPRFldLAorIFsKKyAgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKyAgZG5sIEF1dG9jb25mID49IDIuNjEgc3VwcG9ydHMgZG90cyBpbiAtLXdpdGggb3B0aW9ucy4KKysgIGRlZmluZShbTl9BX01fRV0sW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFttNF9QQUNLQUdFX1ZFUlNJT05dKSxbMi42MV0pLFstMV0sW3RyYW5zbGl0KFskMV0sWy5dLFtfXSldLFskMV0pXSkKKyAgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorICAgdXNlX2FkZGl0aW9uYWw9eWVzCisgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICAgXSkKKy0gIEFDX0xJQl9BUkdfV0lUSChbbGliJDEtcHJlZml4XSwKKy1bICAtLXdpdGgtbGliJDEtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCistICAtLXdpdGhvdXQtbGliJDEtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYl1OX0FfTV9FWy1wcmVmaXhdLAorK1sgIC0td2l0aC1saWJdTl9BX01fRVstcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliXU5fQV9NX0VbLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorIFsKKyAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisgICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KK0BAIC0xNTgsNiArMTc4LDcgQEAKKyAgIExJQltdTkFNRT0KKyAgIExUTElCW11OQU1FPQorICAgSU5DW11OQU1FPQorKyAgTElCW11OQU1FW11fUFJFRklYPQorICAgcnBhdGhkaXJzPQorICAgbHRycGF0aGRpcnM9CisgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CitAQCAtMTk3LDI3ICsyMTgsNTMgQEAKKyAgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgIGZvdW5kX3NvPQorICAgICAgICAgICBmb3VuZF9hPQorKyAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4dD0uc28KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHNocmV4dD0KKysgICAgICAgICAgZmkKKyAgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiIFwKKy0gICAgICAgICAgICAgICAmJiB7IHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiIFwKKy0gICAgICAgICAgICAgICAgICAgIHx8IHsgdGVzdCAiJHNobGliZXh0IiA9IGRsbCBcCistICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5kbGwuYSI7IH07IH07IHRoZW4KKy0gICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKy0gICAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgZG5sIFRoZSBzYW1lIGNvZGUgYXMgaW4gdGhlIGxvb3AgYmVsb3c6CisrICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5kbGwuYSIKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisrICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKysgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisrICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgVGhlbiBsb29rIGZvciBhIHN0YXRpYyBsaWJyYXJ5LgorKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKy0gICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCistICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IgorLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCistICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKy0gICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICBmaQorQEAgLTIyNywyNiArMjc0LDQ0IEBACisgICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgXAorLSAgICAgICAgICAgICAgICAgICAgICYmIHsgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHsgdGVzdCAiJHNobGliZXh0IiA9IGRsbCBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuZGxsLmEiOyB9OyB9OyB0aGVuCistICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgICAgIGRubCBGaXJzdCBsb29rIGZvciBhIHNoYXJlZCBsaWJyYXJ5LgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLmRsbC5hIgorLSAgICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkbmwgVGhlbiBsb29rIGZvciBhIHN0YXRpYyBsaWJyYXJ5LgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCistICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCistICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgOzsKK0BAIC0yODIsMTIgKzM0NywxMiBAQAorICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgZG5sIFRoZSBoYXJkY29kaW5nIGludG8gJExJQk5BTUUgaXMgc3lzdGVtIGRlcGVuZGVudC4KKy0gICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICBkbmwgcmVzdWx0aW5nIGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCitAQCAtMzE4LDEzICszODMsMTMgQEAKKyAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisrICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRhY2xfaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisgICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBkbmwgY29tcGlsZXIuIFNvIGdpdmUgdXAuIE5vIGhhcmRjb2RpbmcuIFRoaXMgYWZmZWN0cyBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgIGRubCB2ZXJ5IG9sZCBzeXN0ZW1zLgorQEAgLTUxMiwxOCArNTc3LDE4IEBACisgICAgIGRvbmUKKyAgIGRvbmUKKyAgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKy0gICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKyAgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisgICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisgICAgICAgYWxsZGlycz0KKyAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCistICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICAgZG9uZQorLSAgICAgIGRubCBOb3RlOiBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorKyAgICAgIGRubCBOb3RlOiBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKyAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgbGliZGlyPSIkYWxsZGlycyIKKy0gICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICAgZWxzZQorQEAgLTUzMSw3ICs1OTYsNyBAQAorICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKy0gICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorICAgICAgIGRvbmUKK0BAIC02NDIsMyArNzA3LDc5IEBACisgICBmaQorICAgQUNfU1VCU1QoWyQxXSkKKyBdKQorKworK2RubCBGb3IgdGhvc2UgY2FzZXMgd2hlcmUgYSB2YXJpYWJsZSBjb250YWlucyBzZXZlcmFsIC1MIGFuZCAtbCBvcHRpb25zCisrZG5sIHJlZmVycmluZyB0byB1bmtub3duIGxpYnJhcmllcyBhbmQgZGlyZWN0b3JpZXMsIHRoaXMgbWFjcm8gZGV0ZXJtaW5lcyB0aGUKKytkbmwgbmVjZXNzYXJ5IGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBydW50aW1lIHBhdGguCisrZG5sIEFDX0xJQl9MSU5LRkxBR1NfRlJPTV9MSUJTKFtMREFERFZBUl0sIFtMSUJTVkFMVUVdLCBbVVNFLUxJQlRPT0xdKQorK2RubCBzZXRzIExEQUREVkFSIHRvIGxpbmtlciBvcHRpb25zIG5lZWRlZCB0b2dldGhlciB3aXRoIExJQlNWQUxVRS4KKytkbmwgSWYgVVNFLUxJQlRPT0wgZXZhbHVhdGVzIHRvIG5vbi1lbXB0eSwgbGlua2luZyB3aXRoIGxpYnRvb2wgaXMgYXNzdW1lZCwKKytkbmwgb3RoZXJ3aXNlIGxpbmtpbmcgd2l0aG91dCBsaWJ0b29sIGlzIGFzc3VtZWQuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfRlJPTV9MSUJTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdKQorKyAgJDE9CisrICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorKyAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIGRpcmVjdG9yaWVzIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgIGRubCBiaW5hcnkuCisrICAgICAgcnBhdGhkaXJzPQorKyAgICAgIG5leHQ9CisrICAgICAgZm9yIG9wdCBpbiAkMjsgZG8KKysgICAgICAgIGlmIHRlc3QgLW4gIiRuZXh0IjsgdGhlbgorKyAgICAgICAgICBkaXI9IiRuZXh0IgorKyAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisrICAgICAgICAgIGlmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorKyAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgICBuZXh0PQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBjYXNlICRvcHQgaW4KKysgICAgICAgICAgICAtTCkgbmV4dD15ZXMgOzsKKysgICAgICAgICAgICAtTCopIGRpcj1gZWNobyAiWCRvcHQiIHwgc2VkIC1lICdzLF5YLUwsLCdgCisrICAgICAgICAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisrICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgbmV4dD0gOzsKKysgICAgICAgICAgICAqKSBuZXh0PSA7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0IC1uICIiJDMiIjsgdGhlbgorKyAgICAgICAgICBkbmwgbGlidG9vbCBpcyB1c2VkIGZvciBsaW5raW5nLiBVc2UgLVIgb3B0aW9ucy4KKysgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9LVIkZGlyIgorKyAgICAgICAgICBkb25lCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBUaGUgbGlua2VyIGlzIHVzZWQgZm9yIGxpbmtpbmcgZGlyZWN0bHkuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyCisrICAgICAgICAgICAgZG5sIG11c3QgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLgorKyAgICAgICAgICAgIGFsbGRpcnM9CisrICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRkaXIiCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorKyAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgICAgICAgICQxPSIkZmxhZyIKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisrICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgICAgICAgbGliZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9JGZsYWciCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgZmkKKysgIEFDX1NVQlNUKFskMV0pCisrXSkKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2F1dG9jb25mLWxpYi1saW5rL2NvbmZpZy5ycGF0aAkyMDA2LTExLTI3IDA5OjAxOjU4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL2NvbmZpZy5ycGF0aAkyMDExLTAzLTE3IDAwOjMzOjIzLjMzNjUzOTQ5MCAtMDcwMAorQEAgLTIsNyArMiw3IEBACisgIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKyAjIHJ1biB0aW1lIHNlYXJjaCBwYXRoIG9mIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZXhlY3V0YWJsZS4KKyAjCistIyAgIENvcHlyaWdodCAxOTk2LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgIENvcHlyaWdodCAxOTk2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyAgIFRha2VuIGZyb20gR05VIGxpYnRvb2wsIDIwMDEKKyAjICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKyAjCitAQCAtNDcsNiArNDcsMTggQEAKKyBkb25lCisgY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorIAorKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCisrCisrZm9yIGNjX3RlbXAgaW4gJENDIiI7IGRvCisrICBjYXNlICRjY190ZW1wIGluCisrICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKysgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKysgICAgXC0qKSA7OworKyAgICAqKSBicmVhazs7CisrICBlc2FjCisrZG9uZQorK2NjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKysKKyAjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQy4KKyAKKyB3bD0KK0BAIC02NCw3ICs3NiwxNCBAQAorICAgICAgICAgICA7OworICAgICAgIGVzYWMKKyAgICAgICA7OworLSAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisrICAgIGRhcndpbiopCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICAgIHhsYyopCisrICAgICAgICAgIHdsPSctV2wsJworKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgICA7OworKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgICAgIDs7CisgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgIHdsPSctV2wsJworQEAgLTc0LDcgKzkzLDcgQEAKKyAgICAgICA7OworICAgICBuZXdzb3M2KQorICAgICAgIDs7CistICAgIGxpbnV4KikKKysgICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgaWNjKiB8IGVjYyopCisgICAgICAgICAgIHdsPSctV2wsJworQEAgLTEwMCw3ICsxMTksNyBAQAorICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgd2w9Jy1XbCwnCisgICAgICAgOzsKKy0gICAgc2NvMy4ydjUqKQorKyAgICByZG9zKikKKyAgICAgICA7OworICAgICBzb2xhcmlzKikKKyAgICAgICB3bD0nLVdsLCcKK0BAIC0xMDgsMTEgKzEyNywxNCBAQAorICAgICBzdW5vczQqKQorICAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICAgOzsKKy0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICAgd2w9Jy1XbCwnCisgICAgICAgOzsKKyAgICAgc3lzdjQqTVAqKQorICAgICAgIDs7CisrICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKyAgICAgdW5pY29zKikKKyAgICAgICB3bD0nLVdsLCcKKyAgICAgICA7OworQEAgLTE0MSw2ICsxNjMsMTAgQEAKKyAgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgIDs7CisrICBpbnRlcml4KikKKysgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKysgICAgd2l0aF9nbnVfbGQ9eWVzCisrICAgIDs7CisgICBvcGVuYnNkKikKKyAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgOzsKK0BAIC0xODksMTEgKzIxNSwxMSBAQAorICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgZmkKKyAgICAgICA7OworLSAgICBpbnRlcml4MyopCisrICAgIGludGVyaXhbMy05XSopCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICA7OworLSAgICBsaW51eCopCisrICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgOgorICAgICAgIGVsc2UKK0BAIC0yODAsNyArMzA2LDcgQEAKKyAgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKy0gICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgICAgICAgOgorICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorQEAgLTM1OSw3ICszODUsNyBAQAorICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgIDs7CistICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisrICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIDs7CitAQCAtNDEyLDE4ICs0MzgsMjIgQEAKKyAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICA7OworICAgICBvcGVuYnNkKikKKy0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCistICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCistICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisrICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKysgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgICAgICAgICA7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICBmaQorICAgICAgIGVsc2UKKy0gICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorLSAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorLSAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqKQorLSAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKysgICAgICAgIGxkX3NobGlicz1ubworICAgICAgIGZpCisgICAgICAgOzsKKyAgICAgb3MyKikKK0BAIC00NzEsNyArNTAxLDcgQEAKKyAgICAgICAgIGxkX3NobGlicz15ZXMKKyAgICAgICBmaQorICAgICAgIDs7CistICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqKQorKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8c2NvMy4ydjUuMC5bMDI0XSopCisgICAgICAgOzsKKyAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKK0BAIC00ODgsMzMgKzUxOCw1MSBAQAorIAorICMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisgIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSLgorKyMgVW5saWtlIGxpYnRvb2wubTQsIGhlcmUgd2UgZG9uJ3QgY2FyZSBhYm91dCBfYWxsXyBuYW1lcyBvZiB0aGUgbGlicmFyeSwgYnV0CisrIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKKysjIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQorKyMgbGlua2VyIGhhcyBzcGVjaWFsIHNlYXJjaCBydWxlcy4KKytsaWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00CisgbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKKyBjYXNlICIkaG9zdF9vcyIgaW4KKyAgIGFpeDMqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgIDs7CisgICBhaXg0KiB8IGFpeDUqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGFtaWdhb3MqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgIDs7CisgICBiZW9zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBic2RpWzQ1XSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICBzaHJleHQ9LmRsbAorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLmxpYicKKyAgICAgOzsKKyAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgIHNocmV4dD0uZHlsaWIKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBkZ3V4KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBmcmVlYnNkMSopCisgICAgIDs7CistICBrZnJlZWJzZCotZ251KQorLSAgICA7OworICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgICBmcmVlYnNkWzEyM10qKQorKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JyA7OworKyAgICAgICopCisrICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcgOzsKKysgICAgZXNhYworICAgICA7OworICAgZ251KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgY2FzZSAkaG9zdF9jcHUgaW4KK0BAIC01MjgsMTAgKzU3NiwxMyBAQAorICAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKy0gIGludGVyaXgzKikKKysgIGludGVyaXhbMy05XSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CitAQCAtNTQ4LDMzICs1OTksNDYgQEAKKyAgICAgOzsKKyAgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgICAgIDs7CistICBsaW51eCopCisrICBsaW51eCogfCBrKmJzZCotZ251KQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGtuZXRic2QqLWdudSkKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBuZXRic2QqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG5ld3NvczYpCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgbnRvLXFueCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgb3BlbmJzZCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICAgOzsKKyAgIG9zMiopCisgICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgIHNocmV4dD0uZGxsCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICAgOzsKKyAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBzb2xhcmlzKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBzdW5vczQqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgIDs7CisgICBzeXN2NCB8IHN5c3Y0LjMqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIHN5c3Y0Kk1QKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICB1dHM0KikKKyAgICAgOzsKK0BAIC01ODMsNiArNjQ3LDggQEAKKyBzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworIGVzY2FwZWRfd2w9YGVjaG8gIlgkd2wiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyBzaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAorK2VzY2FwZWRfbGlibmFtZV9zcGVjPWBlY2hvICJYJGxpYm5hbWVfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorK2VzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjPWBlY2hvICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorIGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgCisgTENfQUxMPUMgc2VkIC1lICdzL15cKFthLXpBLVowLTlfXSpcKT0vYWNsX2N2X1wxPS8nIDw8RU9GCitAQCAtNTk2LDYgKzY2MiwxMiBAQAorICMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KKyBzaGxpYmV4dD0iJHNobGliZXh0IgorIAorKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCisrbGlibmFtZV9zcGVjPSIkZXNjYXBlZF9saWJuYW1lX3NwZWMiCisrCisrIyBMaWJyYXJ5IG5hbWVzIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuCisrbGlicmFyeV9uYW1lc19zcGVjPSIkZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWMiCisrCisgIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisgIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS40L3BhcmFsbGVsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTkuNC9wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGUyYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTkuNC9wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitpbnN0YWwgbGliZ2V0dGV4dGxpYi5hIGJlZm9yZSByZW1vdmluZyBpdAorCitJbiBhIG11bHRpcGxlIGpvYiBidWlsZCwgTWFrZWZpbGUgY2FuIHNpbXVsdGFuZW91c2x5CitiZSBpbnN0YWxsaW5nIGFuZCByZW1vdmluZyBsaWJnZXR0ZXh0bGliLmEuICBXZSBzZXJpYWxpemUKK3RoZSBvcGVyYXRpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1saWIvTWFrZWZpbGUuYW0KKysrKyBiL2dldHRleHQtdG9vbHMvZ251bGliLWxpYi9NYWtlZmlsZS5hbQorQEAgLTU3LDYgKzU3LDEwIEBAIGVuZGlmCisgIyBSdWxlcyBnZW5lcmF0ZWQgYW5kIGNvbGxlY3RlZCBieSBnbnVsaWItdG9vbC4KKyBpbmNsdWRlIE1ha2VmaWxlLmdudWxpYgorIAorKyMgZGVmaW5lZCBpbiBNYWtlZmlsZS5nbnVsaWIgYnV0IG1pc3NpbmcgdGhpcyBkZXBlbmRlbmN5CisrIworK2luc3RhbGwtZXhlYy1jbGVhbjogaW5zdGFsbC1saWJMVExJQlJBUklFUworKworICMgV2hpY2ggY2xhc3NlcyB0byBleHBvcnQgZnJvbSB0aGUgc2hhcmVkIGxpYnJhcnkuCisgTU9PUFBGTEFHUyArPSAtLWRsbGV4cG9ydD1zdHlsZWRfb3N0cmVhbQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40LzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllZjJhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorW1BBVENIXSBEaXNhYmxlIHRoZSB0ZXN0IHRvIGNvbnZlcnQgZXVjLWpwCisKK1JlbW92ZSB0aGUgdGVzdCAiVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzoKK05vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcyBwcm92aWRlZCIKK3NpbmNlIHdlIGRvbid0IHN1cHBvcnQgSFAtVVggYW5kIGlmIHRoZSBldWMtanAgaXMgbm90CitpbnN0YWxsZWQgb24gdGhlIGhvc3QsIHRoZSBkZXBlbmRlbmNlIHdpbGwgYmUgYnVpbHQgd2l0aG91dAoraWNvbnYgc3VwcG9ydCBhbmQgd2lsbCBjYXVzZSBndWlsZS1uYXRpdmUgYnVpbGRpbmcgZmFpbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgaWNvbnYubTQgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaWNvbnYubTQgYi9pY29udi5tNAoraW5kZXggNGUzNzM2My4uMzVmNTRiZCAxMDA2NDQKKy0tLSBhL2ljb252Lm00CisrKysgYi9pY29udi5tNAorQEAgLTE2NSw2ICsxNjUsNyBAQCBBQ19ERUZVTihbQU1fSUNPTlZfTElOS10sCisgICAgICAgfQorICAgfQorICNlbmRpZgorKyNpZiAwCisgICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgIHByb3ZpZGVkLiAgKi8KKyAgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KK0BAIC0xNzYsNiArMTc3LDcgQEAgQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorICAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCisgICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQorICAgICByZXN1bHQgfD0gMTY7CisrI2VuZGlmCisgICByZXR1cm4gcmVzdWx0OworIF1dKV0sCisgICAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sICwKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L0NPUFlJTkcgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDExZDFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L0NPUFlJTkcKQEAgLTAsMCArMSw0IEBACitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbiBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA2YmEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L01ha2VmaWxlLmluLmluCkBAIC0wLDAgKzEsNDY1IEBACisjIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcsIDIwMDktMjAxMCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisjIGZ1bmN0aW9uYWxpdHkuCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIEdOVSBnZXR0ZXh0IGlzIGNvdmVyZWQgYnkgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBpcyAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgT3JpZ2luOiBnZXR0ZXh0LTAuMTkKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTkKKworUEFDS0FHRSA9IEBQQUNLQUdFQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisKK1NFRCA9IEBTRURACitTSEVMTCA9IC9iaW4vc2gKK0BTRVRfTUFLRUAKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKKworcHJlZml4ID0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9wbworCitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorCitNS0RJUl9QID0gQE1LRElSX1BACisKK0dNU0dGTVRfID0gQEdNU0dGTVRACitHTVNHRk1UX25vID0gQEdNU0dGTVRACitHTVNHRk1UX3llcyA9IEBHTVNHRk1UXzAxNUAKK0dNU0dGTVQgPSAkKEdNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitNU0dGTVRfID0gQE1TR0ZNVEAKK01TR0ZNVF9ubyA9IEBNU0dGTVRACitNU0dGTVRfeWVzID0gQE1TR0ZNVF8wMTVACitNU0dGTVQgPSAkKE1TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKK1hHRVRURVhUXyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX25vID0gQFhHRVRURVhUQAorWEdFVFRFWFRfeWVzID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUID0gJChYR0VUVEVYVF8kKFVTRV9NU0dDVFhUKSkKK01TR01FUkdFID0gbXNnbWVyZ2UKK01TR01FUkdFX1VQREFURSA9IEBNU0dNRVJHRUAgLS11cGRhdGUKK01TR0lOSVQgPSBtc2dpbml0CitNU0dDT05WID0gbXNnY29udgorTVNHRklMVEVSID0gbXNnZmlsdGVyCisKK1BPRklMRVMgPSBAUE9GSUxFU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorVVBEQVRFUE9GSUxFUyA9IEBVUERBVEVQT0ZJTEVTQAorRFVNTVlQT0ZJTEVTID0gQERVTU1ZUE9GSUxFU0AKK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbi5pbiByZW1vdmUtcG90Y2RhdGUuc2luIFwKKyQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTEpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTIpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTMpCitESVNURklMRVMgPSAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzIFBPVEZJTEVTLmluIFwKKyQoUE9GSUxFUykgJChHTU9GSUxFUykgXAorJChESVNURklMRVMuZXh0cmExKSAkKERJU1RGSUxFUy5leHRyYTIpICQoRElTVEZJTEVTLmV4dHJhMykKKworUE9URklMRVMgPSBcCisKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorCitQT0ZJTEVTREVQU18gPSAkKHNyY2RpcikvJChET01BSU4pLnBvdAorUE9GSUxFU0RFUFNfeWVzID0gJChQT0ZJTEVTREVQU18pCitQT0ZJTEVTREVQU19ubyA9CitQT0ZJTEVTREVQUyA9ICQoUE9GSUxFU0RFUFNfJChQT19ERVBFTkRTX09OX1BPVCkpCisKK0RJU1RGSUxFU0RFUFNfID0gdXBkYXRlLXBvCitESVNURklMRVNERVBTX3llcyA9ICQoRElTVEZJTEVTREVQU18pCitESVNURklMRVNERVBTX25vID0KK0RJU1RGSUxFU0RFUFMgPSAkKERJU1RGSUxFU0RFUFNfJChESVNUX0RFUEVORFNfT05fVVBEQVRFX1BPKSkKKworIyBNYWtldmFycyBnZXRzIGluc2VydGVkIGhlcmUuIChEb24ndCByZW1vdmUgdGhpcyBsaW5lISkKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucG8gLmdtbyAubW8gLnNlZCAuc2luIC5ub3AgLnBvLWNyZWF0ZSAucG8tdXBkYXRlCisKKy5wby5tbzoKKwlAZWNobyAiJChNU0dGTVQpIC1jIC1vICRAICQ8IjsgXAorCSQoTVNHRk1UKSAtYyAtbyB0LSRAICQ8ICYmIG12IHQtJEAgJEAKKworLnBvLmdtbzoKKwlAbGFuZz1gZWNobyAkKiB8IHNlZCAtZSAncywuKi8sLCdgOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9cm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC0tdmVyYm9zZSAtbyAkJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8iOyBcCisJY2QgJChzcmNkaXIpICYmIHJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8gJiYgbXYgdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30uZ21vCisKKy5zaW4uc2VkOgorCXNlZCAtZSAnL14jL2QnICQ8ID4gdC0kQAorCW12IHQtJEAgJEAKKworCithbGw6IGFsbC1AVVNFX05MU0AKKworYWxsLXllczogc3RhbXAtcG8KK2FsbC1ubzoKKworIyBFbnN1cmUgdGhhdCB0aGUgZ2V0dGV4dCBtYWNyb3MgYW5kIHRoaXMgTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCitDSEVDS19NQUNST19WRVJTSU9OID0gXAorCXRlc3QgIiQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSIgPSAiQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIFwKKwkgIHx8IHsgZWNobyAiKioqIGVycm9yOiBnZXR0ZXh0IGluZnJhc3RydWN0dXJlIG1pc21hdGNoOiB1c2luZyBhIE1ha2VmaWxlLmluLmluIGZyb20gZ2V0dGV4dCB2ZXJzaW9uICQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSBidXQgdGhlIGF1dG9jb25mIG1hY3JvcyBhcmUgZnJvbSBnZXR0ZXh0IHZlcnNpb24gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIDE+JjI7IFwKKwkgICAgICAgZXhpdCAxOyBcCisJICAgICB9CisKKyMgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgb25seSBjcmVhdGVkIHdoZW4gbmVlZGVkLiBXaGVuIHhnZXR0ZXh0IGZpbmRzIG5vCisjIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLCBubyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBjcmVhdGVkIChiZWNhdXNlCisjIHdlIGRvbid0IHdhbnQgdG8gYm90aGVyIHRyYW5zbGF0b3JzIHdpdGggZW1wdHkgUE9UIGZpbGVzKS4gV2UgYXNzdW1lIHRoYXQKKyMgTElOR1VBUyBpcyBlbXB0eSBpbiB0aGlzIGNhc2UsIGkuZS4gJChQT0ZJTEVTKSBhbmQgJChHTU9GSUxFUykgYXJlIGVtcHR5LgorIyBJbiB0aGlzIGNhc2UsIHN0YW1wLXBvIGlzIGEgbm9wIChpLmUuIGEgcGhvbnkgdGFyZ2V0KS4KKworIyBzdGFtcC1wbyBpcyBhIHRpbWVzdGFtcCBkZW5vdGluZyB0aGUgbGFzdCB0aW1lIGF0IHdoaWNoIHRoZSBDQVRBTE9HUyBoYXZlCisjIGJlZW4gbG9vc2VseSB1cGRhdGVkLiBJdHMgcHVycG9zZSBpcyB0aGF0IHdoZW4gYSBkZXZlbG9wZXIgb3IgdHJhbnNsYXRvcgorIyBjaGVja3Mgb3V0IHRoZSBwYWNrYWdlIHZpYSBDVlMsIGFuZCB0aGUgJChET01BSU4pLnBvdCBmaWxlIGlzIG5vdCBpbiBDVlMsCisjICJtYWtlIiB3aWxsIHVwZGF0ZSB0aGUgJChET01BSU4pLnBvdCBhbmQgdGhlICQoQ0FUQUxPR1MpLCBidXQgc3Vic2VxdWVudAorIyBpbnZvY2F0aW9ucyBvZiAibWFrZSIgd2lsbCBkbyBub3RoaW5nLiBUaGlzIHRpbWVzdGFtcCB3b3VsZCBub3QgYmUgbmVjZXNzYXJ5CisjIGlmIHVwZGF0aW5nIHRoZSAkKENBVEFMT0dTKSB3b3VsZCBhbHdheXMgdG91Y2ggdGhlbTsgaG93ZXZlciwgdGhlIHJ1bGUgZm9yCisjICQoUE9GSUxFUykgaGFzIGJlZW4gZGVzaWduZWQgdG8gbm90IHRvdWNoIGZpbGVzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZQorIyBjaGFuZ2VkLgorc3RhbXAtcG86ICQoc3JjZGlyKS8kKERPTUFJTikucG90CisJQCQoQ0hFQ0tfTUFDUk9fVkVSU0lPTikKKwl0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgXAorCSAgdGVzdCAteiAiJChHTU9GSUxFUykiIHx8ICQoTUFLRSkgJChHTU9GSUxFUykKKwlAdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IHsgXAorCSAgZWNobyAidG91Y2ggc3RhbXAtcG8iICYmIFwKKwkgIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtcG9UICYmIFwKKwkgIG12IHN0YW1wLXBvVCBzdGFtcC1wbzsgXAorCX0KKworIyBOb3RlOiBUYXJnZXQgJ2FsbCcgbXVzdCBub3QgZGVwZW5kIG9uIHRhcmdldCAnJChET01BSU4pLnBvdC11cGRhdGUnLAorIyBvdGhlcndpc2UgcGFja2FnZXMgbGlrZSBHQ0MgY2FuIG5vdCBiZSBidWlsdCBpZiBvbmx5IHBhcnRzIG9mIHRoZSBzb3VyY2UKKyMgaGF2ZSBiZWVuIGRvd25sb2FkZWQuCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgJChET01BSU4pLnBvdDsgaXQgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KKyMgTm90ZSB0aGF0ICQoRE9NQUlOKS5wb3QgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCisjIFRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgdGhlIHBhY2thZ2UgeHl6IGlzIGEgR05VIG9uZSBpcyBiYXNlZCBvbiB0aGUKKyMgaGV1cmlzdGljIHdoZXRoZXIgc29tZSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG1lbnRpb25zICJHTlUgeHl6Ii4KKyMgSWYgR05VICdmaW5kJyBpcyBhdmFpbGFibGUsIHdlIGF2b2lkIGdyZXBwaW5nIHRocm91Z2ggbW9uc3RlciBmaWxlcy4KKyQoRE9NQUlOKS5wb3QtdXBkYXRlOiAkKFBPVEZJTEVTKSAkKHNyY2RpcikvUE9URklMRVMuaW4gcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXBhY2thZ2VfZ251PSIkKFBBQ0tBR0VfR05VKSI7IFwKKwl0ZXN0IC1uICIkJHBhY2thZ2VfZ251IiB8fCB7IFwKKwkgIGlmIHsgaWYgKExDX0FMTD1DIGZpbmQgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8IGdyZXAgR05VID4vZGV2L251bGw7IHRoZW4gXAorCQkgTENfQUxMPUMgZmluZCAtTCAkKHRvcF9zcmNkaXIpIC1tYXhkZXB0aCAxIC10eXBlIGYgXAorCQkJICAgICAgIC1zaXplIC0xMDAwMDAwMGMgLWV4ZWMgZ3JlcCAnR05VIEBQQUNLQUdFQCcgXAorCQkJICAgICAgIC9kZXYvbnVsbCAne30nICc7JyAyPi9kZXYvbnVsbDsgXAorCSAgICAgICBlbHNlIFwKKwkJIExDX0FMTD1DIGdyZXAgJ0dOVSBAUEFDS0FHRUAnICQodG9wX3NyY2RpcikvKiAyPi9kZXYvbnVsbDsgXAorCSAgICAgICBmaTsgXAorCSAgICAgfSB8IGdyZXAgLXYgJ2xpYnRvb2w6JyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgIHBhY2thZ2VfZ251PXllczsgXAorCSAgIGVsc2UgXAorCSAgICAgcGFja2FnZV9nbnU9bm87IFwKKwkgICBmaTsgXAorCX07IFwKKwlpZiB0ZXN0ICIkJHBhY2thZ2VfZ251IiA9ICJ5ZXMiOyB0aGVuIFwKKwkgIHBhY2thZ2VfcHJlZml4PSdHTlUgJzsgXAorCWVsc2UgXAorCSAgcGFja2FnZV9wcmVmaXg9Jyc7IFwKKwlmaTsgXAorCWlmIHRlc3QgLW4gJyQoTVNHSURfQlVHU19BRERSRVNTKScgfHwgdGVzdCAnJChQQUNLQUdFX0JVR1JFUE9SVCknID0gJ0AnUEFDS0FHRV9CVUdSRVBPUlQnQCc7IHRoZW4gXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKE1TR0lEX0JVR1NfQUREUkVTUyknOyBcCisJZWxzZSBcCisJICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoUEFDS0FHRV9CVUdSRVBPUlQpJzsgXAorCWZpOyBcCisJY2FzZSBgJChYR0VUVEVYVCkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC01XSB8IDAuMVswLTVdLiogfCAwLjE2IHwgMC4xNi5bMC0xXSopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKKwkgICAgOzsgXAorCSAgKikgXAorCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKKwkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAorCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAorCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAorCSAgICAgIC0tcGFja2FnZS1uYW1lPSIkJHtwYWNrYWdlX3ByZWZpeH1AUEFDS0FHRUAiIFwKKwkgICAgICAtLXBhY2thZ2UtdmVyc2lvbj0nQFZFUlNJT05AJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwllc2FjCisJdGVzdCAhIC1mICQoRE9NQUlOKS5wbyB8fCB7IFwKKwkgIGlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoc3JjZGlyKS8kKERPTUFJTikucG90ID4gJChET01BSU4pLjFwbyAmJiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChET01BSU4pLnBvID4gJChET01BSU4pLjJwbyAmJiBcCisJICAgIGlmIGNtcCAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChET01BSU4pLnBvOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKHNyY2RpcikvJChET01BSU4pLnBvdCAmJiBcCisJICAgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICBmaTsgXAorCX0KKworIyBUaGlzIHJ1bGUgaGFzIG5vIGRlcGVuZGVuY2llczogd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgJChET01BSU4pLnBvdCBhdAorIyBldmVyeSAibWFrZSIgaW52b2NhdGlvbiwgb25seSBjcmVhdGUgaXQgd2hlbiBpdCBpcyBtaXNzaW5nLgorIyBPbmx5ICJtYWtlICQoRE9NQUlOKS5wb3QtdXBkYXRlIiBvciAibWFrZSBkaXN0IiB3aWxsIGZvcmNlIGFuIHVwZGF0ZS4KKyQoc3JjZGlyKS8kKERPTUFJTikucG90OgorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKworIyBUaGlzIHRhcmdldCByZWJ1aWxkcyBhIFBPIGZpbGUgaWYgJChET01BSU4pLnBvdCBoYXMgY2hhbmdlZC4KKyMgTm90ZSB0aGF0IGEgUE8gZmlsZSBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KKyQoUE9GSUxFUyk6ICQoUE9GSUxFU0RFUFMpCisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MsLiovLCwnIC1lICdzL1wucG8kJC8vJ2A7IFwKKwlpZiB0ZXN0IC1mICIkKHNyY2RpcikvJCR7bGFuZ30ucG8iOyB0aGVuIFwKKwkgIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgJChNQUtFKSAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJICBlY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdCI7IFwKKwkgIGNkICQoc3JjZGlyKSBcCisJICAgICYmIHsgY2FzZSBgJChNU0dNRVJHRV9VUERBVEUpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgICAgICAgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtN10gfCAwLjFbMC03XS4qKSBcCisJICAgICAgICAgICAgICQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICAgICAgICAqKSBcCisJICAgICAgICAgICAgICQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJHtsYW5nfSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgIGVzYWM7IFwKKwkgICAgICAgfTsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkJHtsYW5nfS5wby1jcmVhdGU7IFwKKwlmaQorCisKK2luc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKK2luc3RhbGwtZXhlYzoKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAorCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCSAgZm9yIGZpbGUgaW4gTWFrZXZhcnM7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsLWRhdGEtbm86IGFsbAoraW5zdGFsbC1kYXRhLXllczogYWxsCisJQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJCRkaXI7IFwKKwkgIGlmIHRlc3QgLXIgJCRjYXQ7IHRoZW4gcmVhbGNhdD0kJGNhdDsgZWxzZSByZWFsY2F0PSQoc3JjZGlyKS8kJGNhdDsgZmk7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJHJlYWxjYXQgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbzsgXAorCSAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgYXMgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbyI7IFwKKwkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCisJICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCisJICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAorCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKKwkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAorCSAgICAgICAgICAgZmk7IFwKKwkgICAgICAgICBkb25lKTsgXAorCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICBlbHNlIFwKKwkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCisJICAgICAgICAgIDo7IFwKKwkgICAgICAgIGVsc2UgXAorCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIGZpOyBcCisJICAgICAgZmk7IFwKKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgICAgIGxuIC1zIC4uL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgbG4gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgICBjcCAtcCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBsaW5rIGFzICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIjsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtZXhlYyBpbnN0YWxsZGlycy1kYXRhCitpbnN0YWxsZGlycy1leGVjOgoraW5zdGFsbGRpcnMtZGF0YTogaW5zdGFsbGRpcnMtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKE1LRElSX1ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsZGlycy1kYXRhLW5vOgoraW5zdGFsbGRpcnMtZGF0YS15ZXM6CisJQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJCRkaXI7IFwKKwkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCisJICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCisJICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAorCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKKwkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAorCSAgICAgICAgICAgZmk7IFwKKwkgICAgICAgICBkb25lKTsgXAorCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICBlbHNlIFwKKwkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCisJICAgICAgICAgIDo7IFwKKwkgICAgICAgIGVsc2UgXAorCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIGZpOyBcCisJICAgICAgZmk7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKKyMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KK2luc3RhbGxjaGVjazoKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtZXhlYyB1bmluc3RhbGwtZGF0YQordW5pbnN0YWxsLWV4ZWM6Cit1bmluc3RhbGwtZGF0YTogdW5pbnN0YWxsLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK3VuaW5zdGFsbC1kYXRhLW5vOgordW5pbnN0YWxsLWRhdGEteWVzOgorCWNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBmb3IgbGMgaW4gTENfTUVTU0FHRVMgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2NoZWNrOiBhbGwKKworaW5mbyBkdmkgcHMgcGRmIGh0bWwgdGFncyBUQUdTIGN0YWdzIENUQUdTIElEOgorCittb3N0bHljbGVhbjoKKwlybSAtZiByZW1vdmUtcG90Y2RhdGUuc2VkCisJcm0gLWYgc3RhbXAtcG9UCisJcm0gLWYgY29yZSBjb3JlLiogJChET01BSU4pLnBvICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAqLm5ldy5wbworCXJtIC1mciAqLm8KKworY2xlYW46IG1vc3RseWNsZWFuCisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZSBNYWtlZmlsZS5pbiBQT1RGSUxFUyAqLm1vCisKK21haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCXJtIC1mIHN0YW1wLXBvICQoR01PRklMRVMpCisKK2Rpc3RkaXIgPSAkKHRvcF9idWlsZGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pLyQoc3ViZGlyKQorZGlzdCBkaXN0ZGlyOgorCXRlc3QgLXogIiQoRElTVEZJTEVTREVQUykiIHx8ICQoTUFLRSkgJChESVNURklMRVNERVBTKQorCUAkKE1BS0UpIGRpc3QyCisjIFRoaXMgaXMgYSBzZXBhcmF0ZSB0YXJnZXQgYmVjYXVzZSAndXBkYXRlLXBvJyBtdXN0IGJlIGV4ZWN1dGVkIGJlZm9yZS4KK2Rpc3QyOiBzdGFtcC1wbyAkKERJU1RGSUxFUykKKwlkaXN0cz0iJChESVNURklMRVMpIjsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzIE1ha2V2YXJzLnRlbXBsYXRlIjsgXAorCWZpOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyAkKERPTUFJTikucG90IHN0YW1wLXBvIjsgXAorCWZpOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nOyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZyI7IFwKKwlmaTsgXAorCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZy4kJGk7IHRoZW4gXAorCSAgICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2cuJCRpIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvTElOR1VBUzsgdGhlbiBkaXN0cz0iJCRkaXN0cyBMSU5HVUFTIjsgZmk7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgIGNwIC1wICQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIGNwIC1wICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCit1cGRhdGUtcG86IE1ha2VmaWxlCisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCXRlc3QgLXogIiQoVVBEQVRFUE9GSUxFUykiIHx8ICQoTUFLRSkgJChVUERBVEVQT0ZJTEVTKQorCSQoTUFLRSkgdXBkYXRlLWdtbworCisjIEdlbmVyYWwgcnVsZSBmb3IgY3JlYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tY3JlYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tY3JlYXRlJCQvLydgOyBcCisJZWNobyAiRmlsZSAkJGxhbmcucG8gZG9lcyBub3QgZXhpc3QuIElmIHlvdSBhcmUgYSB0cmFuc2xhdG9yLCB5b3UgY2FuIGNyZWF0ZSBpdCB0aHJvdWdoICdtc2dpbml0Jy4iIDE+JjI7IFwKKwlleGl0IDEKKworIyBHZW5lcmFsIHJ1bGUgZm9yIHVwZGF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLXVwZGF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZSQkLy8nYDsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJGxhbmcubmV3LnBvIjsgXAorCWNkICQoc3JjZGlyKTsgXAorCWlmIHsgY2FzZSBgJChNU0dNRVJHRSkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgKikgXAorCSAgICAgICAgICQoTVNHTUVSR0UpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQkbGFuZyAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgZXNhYzsgXAorCSAgIH07IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKKwkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwlmaQorCiskKERVTU1ZUE9GSUxFUyk6CisKK3VwZGF0ZS1nbW86IE1ha2VmaWxlICQoR01PRklMRVMpCisJQDoKKworIyBSZWNyZWF0ZSBNYWtlZmlsZSBieSBpbnZva2luZyBjb25maWcuc3RhdHVzLiBFeHBsaWNpdGx5IGludm9rZSB0aGUgc2hlbGwsCisjIGJlY2F1c2UgZXhlY3V0aW9uIHBlcm1pc3Npb24gYml0cyBtYXkgbm90IHdvcmsgb24gdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW0uCisjIFVzZSBAU0hFTExALCB3aGljaCBpcyB0aGUgc2hlbGwgZGV0ZXJtaW5lZCBieSBhdXRvY29uZiBmb3IgdGhlIHVzZSBieSBpdHMKKyMgc2NyaXB0cywgbm90ICQoU0hFTEwpIHdoaWNoIGlzIGhhcmR3aXJlZCB0byAvYmluL3NoIGFuZCBtYXkgYmUgZGVmaWNpZW50LgorTWFrZWZpbGU6IE1ha2VmaWxlLmluLmluIE1ha2V2YXJzICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzIEBQT01BS0VGSUxFREVQU0AKKwljZCAkKHRvcF9idWlsZGRpcikgXAorCSAgJiYgQFNIRUxMQCAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRALmluIHBvLWRpcmVjdG9yaWVzCisKK2ZvcmNlOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3ogYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0YmE1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9hY2xvY2FsLnRnegpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvY29uZmlnLnJwYXRoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjI1NjIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aApAQCAtMCwwICsxLDY4NCBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorIworIyAgIENvcHlyaWdodCAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgICB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAorIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisjCisjIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KKworIyBLbm93biBsaW1pdGF0aW9uczoKKyMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCisjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKKyMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCitzaHJleHQ9LnNvCisKK2hvc3Q9IiQxIgoraG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCisKK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NPTVBJTEVSX1BJQy4KKword2w9CitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB3bD0nLVdsLCcKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgOzsKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGVjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgaWNjKiB8IGlmb3J0KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBsZjk1KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBuYWdmb3IqKQorICAgICAgICAgIHdsPSctV2wsLVdsLCwnCisgICAgICAgICAgOzsKKyAgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNvbW8pCisgICAgICAgICAgd2w9Jy1sb3B0PScKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICAgKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorICAgICAgICAgICAgICB3bD0KKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpTdW5cIEMqKQorICAgICAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIDs7CisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHJkb3MqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAgICAgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICA7OworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdW5pY29zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfTElOS0VSX1NITElCUy4KKworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CitoYXJkY29kZV9kaXJlY3Q9bm8KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworZXNhYworCitsZF9zaGxpYnM9eWVzCitpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCisgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYykKKyAgICAgICAgICA7OworICAgICAgICBtNjhrKQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICA7OworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKyAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGZpCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeDMqKQorICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKyAgICAgICAgIyBicm9rZW4gY29sbGVjdDIuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZWxzZQorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorICAgICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKyAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICAgICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorICAgICAgICAgICAgOgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC5jCisgICAgICAke0NDfSAke0xERkxBR1N9IGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QKKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIgorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKyAgICAgICMgRW5kIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYykKKyAgICAgICAgICA7OworICAgICAgICBtNjhrKQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGJzZGlbNDVdKikKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKyAgICAgIGxpYmV4dD1saWIKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaWYgeyBjYXNlICRjY19iYXNlbmFtZSBpbiBpZm9ydCopIHRydWU7OyAqKSB0ZXN0ICIkR0NDIiA9IHllczs7IGVzYWM7IH07IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGRndXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICBmcmVlYnNkMi5bMDFdKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBvc2YzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBvc2Y0KiB8IG9zZjUqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorICAgICAgICAjIEJvdGggY2MgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgICAgIHNuaSkKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworICAgICAgICAgIDs7CisgICAgICAgIHNpZW1lbnMpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgOzsKKyAgICAgICAgbW90b3JvbGEpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzeXN2NC4zKikKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSLgorIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisjIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQorIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgorbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK2Nhc2UgIiRob3N0X29zIiBpbgorICBhaXgzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYWl4WzQtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGFtaWdhb3MqKQorICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgIHBvd2VycGMqKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcgOzsKKyAgICAgIG02OGspCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgYmVvcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYnNkaVs0NV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUubGliJworICAgIDs7CisgIGRhcndpbiogfCByaGFwc29keSopCisgICAgc2hyZXh0PS5keWxpYgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGRndXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGZyZWVic2RbMjNdLiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBnbnUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGhhaWt1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaWE2NCopCisgICAgICAgIHNocmV4dD0uc28KKyAgICAgICAgOzsKKyAgICAgIGhwcGEqNjQqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGludGVyaXhbMy05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgJExEIGluCisgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiA7OworICAgICAgICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKSBsaWJzdWZmPTY0IHNobGlic3VmZj02NCA7OworICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBrbmV0YnNkKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV0YnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBuZXdzb3M2KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgICpudG8qIHwgKnFueCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIG9zMiopCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgcmRvcyopCisgICAgOzsKKyAgc29sYXJpcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3Vub3M0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgc3lzdjQgfCBzeXN2NC4zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NCpNUCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgdHBmKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB1dHM0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworZXNhYworCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKK2VzY2FwZWRfbGlibmFtZV9zcGVjPWBlY2hvICJYJGxpYm5hbWVfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWM9YGVjaG8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCitMQ19BTEw9QyBzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9IiRlc2NhcGVkX3dsIgorCisjIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorc2hsaWJleHQ9IiRzaGxpYmV4dCIKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorCisjIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0iJGhhcmRjb2RlX2RpcmVjdCIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorCitFT0YKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9yZW1vdmUtcG90Y2RhdGUuc2luIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L3JlbW92ZS1wb3RjZGF0ZS5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzNmM0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9yZW1vdmUtcG90Y2RhdGUuc2luCkBAIC0wLDAgKzEsMTkgQEAKKyMgU2VkIHNjcmlwdCB0aGF0IHJlbW92ZSB0aGUgUE9ULUNyZWF0aW9uLURhdGUgbGluZSBpbiB0aGUgaGVhZGVyIGVudHJ5CisjIGZyb20gYSBQT1QgZmlsZS4KKyMKKyMgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nIG9jY3VycmVuY2VzIG9mIHRoZQorIyBwYXR0ZXJuIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisvXiJQT1QtQ3JlYXRpb24tRGF0ZTogLioiJC97Cit4CisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCitzL1AvUC8KK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlbW92ZSB0aGUgbGluZS4KK2cKK2QKK2JiCis6YQorIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KK3gKKzpiCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtbmF0aXZlXzAuMTkuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRhNDQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtbmF0aXZlXzAuMTkuNC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIk1pbmltYWwgZ2V0dGV4dCBmb3Igc3VwcG9ydGluZyBuYXRpdmUgYXV0b2NvbmYvYXV0b21ha2UiCitERVNDUklQVElPTiA9ICJDb250YWlucyB0aGUgbTQgbWFjcm9zIHN1ZmZpY2llbnQgdG8gc3VwcG9ydCBidWlsZGluZyBcCithdXRvY29uZi9hdXRvbWFrZS4gVGhpcyBwcm92aWRlcyBhIHNpZ25pZmljYW50IGJ1aWxkIHRpbWUgc3BlZWR1cCBieSBcCit0aGUgcmVtb3ZhbCBvZiBnZXR0ZXh0LW5hdGl2ZSBmcm9tIG1vc3QgZGVwZW5kZW5jeSBjaGFpbnMgKG5vdyBvbmx5IFwKK25lZWRlZCBmb3IgZ2V0dGV4dCBmb3IgdGhlIHRhcmdldCkuIgorU1JDX1VSSSA9ICJmaWxlOi8vYWNsb2NhbC50Z3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnLnJwYXRoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmluLmluIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1wb3RjZGF0ZS5zaW4gXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORyBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggXAorIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorCitMSUNFTlNFID0gIkZTRi1VbmxpbWl0ZWQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xYjIwNjc1Y2Q1MTU4NDQyZjYwMDdkMDIyZjQ2YjM1YiIKKworaW5oZXJpdCBuYXRpdmUKKworCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYWNsb2NhbC8KKwljcCAke1dPUktESVJ9LyoubTQgJHtEfSR7ZGF0YWRpcn0vYWNsb2NhbC8KKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vCisJY3AgJHtXT1JLRElSfS9jb25maWcucnBhdGggJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC8KKwljcCAke1dPUktESVJ9L01ha2VmaWxlLmluLmluICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vCisJY3AgJHtXT1JLRElSfS9yZW1vdmUtcG90Y2RhdGUuc2luICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xNi4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY3YTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTYuMS5iYgpAQCAtMCwwICsxLDEwNyBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMiCitERVNDUklQVElPTiA9ICJHTlUgZ2V0dGV4dCBpcyBhIHNldCBvZiB0b29scyB0aGF0IHByb3ZpZGVzIGEgZnJhbWV3b3JrIHRvIGhlbHAgb3RoZXIgcHJvZ3JhbXMgcHJvZHVjZSBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzLiBUaGVzZSB0b29scyBpbmNsdWRlIGEgc2V0IG9mIGNvbnZlbnRpb25zIGFib3V0IGhvdyBwcm9ncmFtcyBzaG91bGQgYmUgd3JpdHRlbiB0byBzdXBwb3J0IG1lc3NhZ2UgY2F0YWxvZ3MsIGEgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWluZyBvcmdhbml6YXRpb24gZm9yIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHRoZW1zZWx2ZXMsIGEgcnVudGltZSBsaWJyYXJ5IHN1cHBvcnRpbmcgdGhlIHJldHJpZXZhbCBvZiB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBhbmQgYSBmZXcgc3RhbmQtYWxvbmUgcHJvZ3JhbXMgdG8gbWFzc2FnZSBpbiB2YXJpb3VzIHdheXMgdGhlIHNldHMgb2YgdHJhbnNsYXRhYmxlIGFuZCBhbHJlYWR5IHRyYW5zbGF0ZWQgc3RyaW5ncy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9nZXR0ZXh0Lmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWVhMzE0NGYwNGM0MWNkMmVhZGE1ZDNmNDcyZTZlYTUiCisKK1BSID0gInI2IgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmljb252IgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorUFJPVklERVMgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvZ2V0dGV4dCIKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZXR0ZXh0L2dldHRleHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dldHRleHQtdnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlua2xpYl9mcm9tXzAuMTcucGF0Y2ggXAorCSAgIGZpbGU6Ly9nZXR0ZXh0LWF1dG9jb25mLWxpYi1saW5rLW5vLUwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9qYXZhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9hY2xvY2FsX3ZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaCBcCisgICAgICAgICAgIgorCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgLWxwdGhyZWFkICIKKworU1JDX1VSSVttZDVzdW1dID0gIjNkOWFkMjQzMDFjNmQ2YjE3ZWMzMDcwNGExM2ZlMTI3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiZjg1MGQxYTA3OWZiNWE2MWYwYTQ3YjFhOWVmZDM1ZWI0NDAzMjI1NTM3NWUxY2VkYjAyNTNiYzI3YjM3NmQiCisKK1BBUkFMTEVMX01BS0UgPSAiIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpc3AgLS1kaXNhYmxlLWNzaGFycCAtLWRpc2FibGUtb3Blbm1wIC0td2l0aG91dC1lbWFjcyIKK2FjcGF0aHMgPSAnLUkgJHtTfS9hdXRvY29uZi1saWItbGluay9tNC8gXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtcnVudGltZS9tNCBcCisgICAgICAgICAgIC1JICR7U30vZ2V0dGV4dC10b29scy9tNCcKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJcm0gLWYgJHtTfS9jb25maWcvbTQvbGlidG9vbC5tNAorfQorCisjIHRoZXNlIGxhY2sgdGhlIC54IGJlaGluZCB0aGUgLnNvLCBidXQgc2hvdWxkbid0IGJlIGluIHRoZSAtZGV2IHBhY2thZ2UKKyMgT3RoZXJ3aXNlIHlvdSBnZXQgdGhlIGZvbGxvd2luZyByZXN1bHRzOgorIyA3LjRNICAgIGdsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS1nbGliYy1pcGstMjAwOC4xLXRlc3QtMjAwODAxMDQtZXA5M3h4LnJvb3Rmcy50YXIuZ3oKKyMgMjVNICAgICB1Y2xpYmMvaW1hZ2VzL2VwOTN4eC9BbmdzdHJvbS1jb25zb2xlLWltYWdlLXVjbGliYy1pcGstMjAwOC4xLXRlc3QtMjAwODAxMDQtZXA5M3h4LnJvb3Rmcy50YXIuZ3oKKyMgYmVjYXVzZSBnZXR0ZXh0IGRlcGVuZHMgb24gZ2V0dGV4dC1kZXYsIHdoaWNoIHB1bGxzIGluIG1vcmUgLWRldiBwYWNrYWdlczoKKyMgMTUyMjggICBLaUIgL2VwOTN4eC9saWJzdGRjKystZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKyMgMTMwMCAgICBLaUIgL2VwOTN4eC91Y2xpYmMtZGV2XzAuOS4yOS1yOF9lcDkzeHguaXBrCisjIDE0MCAgICAgS2lCIC9hcm12NHQvZ2V0dGV4dC1kZXZfMC4xNC4xLXI2X2FybXY0dC5pcGsKKyMgNCAgICAgICBLaUIgL2VwOTN4eC9saWJnY2Mtcy1kZXZfNC4yLjItcjJfZXA5M3h4LmlwaworCitQQUNLQUdFUyA9KyAibGliZ2V0dGV4dGxpYiBsaWJnZXR0ZXh0c3JjIgorRklMRVNfbGliZ2V0dGV4dGxpYiA9ICIke2xpYmRpcn0vbGliZ2V0dGV4dGxpYi0qLnNvKiIKK0ZJTEVTX2xpYmdldHRleHRzcmMgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRzcmMtKi5zbyoiCisKK1BBQ0tBR0VTID0rICJnZXR0ZXh0LXJ1bnRpbWUgZ2V0dGV4dC1ydW50aW1lLWRldiBnZXR0ZXh0LXJ1bnRpbWUtc3RhdGljZGV2IGdldHRleHQtcnVudGltZS1kb2MiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyoiCisKK0ZJTEVTX2dldHRleHQtcnVudGltZSA9ICIke2JpbmRpcn0vZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L25nZXR0ZXh0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZW52c3Vic3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9nZXR0ZXh0LnNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliYXNwcmludGYke1NPREVWfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L0dOVS5HZXR0ZXh0LmRsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWVfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jaGFyc2V0LmFsaWFzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGliYXNwcmludGYuYSIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1kZXYgKz0gIiR7aW5jbHVkZWRpcn0vYXV0b3NwcmludGYuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliYXNwcmludGYke1NPTElCREVWfSIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1kZXZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9saWJpbnRsLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvLiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvbmdldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2VudnN1YnN0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC8qLjMuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2V0dGV4dC9BQk9VVC1OTFMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9jc2hhcnBkb2MvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9saWJhc3ByaW50Zi9hdXRvc3ByaW50Zi5odG1sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmZvZGlyfS9hdXRvc3ByaW50Zi5pbmZvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLWYgJHtEfSR7bGliZGlyfS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvCit9CisKKyMgQW55b25lIGluaGVyaXRpbmcgZ2V0dGV4dCB3aWxsIGhhdmUgYm90aCBnZXR0ZXh0LW5hdGl2ZSBhbmQgZ2V0dGV4dAorIyBhdmFpbGFibGUsIGFuZCB3ZSBkb24ndCB3YW50IHRvIHVzZSBvbGRlciBtYWNyb3MgZnJvbSB0aGUgdGFyZ2V0IGdldHRleHQgaW4KKyMgYSBub24tZ3BsdjMgYnVpbGQsIHNvIGtpbGwgdGhlbSBhbmQgbGV0IGRlcGVuZGVudCByZWNpcGVzIHJlbHkgb24KKyMgZ2V0dGV4dC1uYXRpdmUuCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAicmVtb3ZlX3N5c3Jvb3RfbTRfbWFjcm9zIgorCityZW1vdmVfc3lzcm9vdF9tNF9tYWNyb3MgKCkgeworICAgIHJtIC1yICIke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2FjbG9jYWwiCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xOS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmY2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xOS40LmJiCkBAIC0wLDAgKzEsMTA2IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBwcm9kdWNpbmcgbXVsdGktbGluZ3VhbCBtZXNzYWdlcyIKK0RFU0NSSVBUSU9OID0gIkdOVSBnZXR0ZXh0IGlzIGEgc2V0IG9mIHRvb2xzIHRoYXQgcHJvdmlkZXMgYSBmcmFtZXdvcmsgdG8gaGVscCBvdGhlciBwcm9ncmFtcyBwcm9kdWNlIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMuIFRoZXNlIHRvb2xzIGluY2x1ZGUgYSBzZXQgb2YgY29udmVudGlvbnMgYWJvdXQgaG93IHByb2dyYW1zIHNob3VsZCBiZSB3cml0dGVuIHRvIHN1cHBvcnQgbWVzc2FnZSBjYXRhbG9ncywgYSBkaXJlY3RvcnkgYW5kIGZpbGUgbmFtaW5nIG9yZ2FuaXphdGlvbiBmb3IgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MgdGhlbXNlbHZlcywgYSBydW50aW1lIGxpYnJhcnkgc3VwcG9ydGluZyB0aGUgcmV0cmlldmFsIG9mIHRyYW5zbGF0ZWQgbWVzc2FnZXMsIGFuZCBhIGZldyBzdGFuZC1hbG9uZSBwcm9ncmFtcyB0byBtYXNzYWdlIGluIHZhcmlvdXMgd2F5cyB0aGUgc2V0cyBvZiB0cmFuc2xhdGFibGUgYW5kIGFscmVhZHkgdHJhbnNsYXRlZCBzdHJpbmdzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZXR0ZXh0L2dldHRleHQuaHRtbCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTC0yLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK0RFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUgdmlydHVhbC9saWJpY29udiBleHBhdCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImdldHRleHQtbWluaW1hbC1uYXRpdmUiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9nZXR0ZXh0IgorUFJPVklERVNfY2xhc3MtbmF0aXZlID0gInZpcnR1YWwvZ2V0dGV4dC1uYXRpdmUiCitSQ09ORkxJQ1RTXyR7UE59ID0gInByb3h5LWxpYmludGwiCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2V0dGV4dC9nZXR0ZXh0LSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL3BhcmFsbGVsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUdbbXNnY2F0LWN1cnNlc10gPSAiLS13aXRoLWxpYm5jdXJzZXMtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9Ly4uLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcywiCisKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAtbHB0aHJlYWQgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDM1MTFhZjFlNjA0YTM0Nzg5MDBkMmMyYjRhNGE0OGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGFjOWYxZWQxYTVmOGM0ZTY1NmEyZjM3ZjViYTZiOWVlMDRjNGRmNzlhNTc1ZTg3NmIwYjY5NDZhYTQxN2YzZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saXNwZGlyIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWNzaGFycCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhc3ByaW50ZiBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1qYXZhIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5hdGl2ZS1qYXZhIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW9wZW5tcCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1hY2wgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtZ2xpYiBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1lbWFjcyBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1jdnMgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZ2l0IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYnhtbCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJjcm9jbyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJ1bmlzdHJpbmcgXAorICAgICAgICAgICAgICAgICIKKworYWNwYXRocyA9ICctSSAke1N9L2dldHRleHQtcnVudGltZS9tNCBcCisgICAgICAgICAgIC1JICR7U30vZ2V0dGV4dC10b29scy9tNCcKKworCisjIHRoZXNlIGxhY2sgdGhlIC54IGJlaGluZCB0aGUgLnNvLCBidXQgc2hvdWxkbid0IGJlIGluIHRoZSAtZGV2IHBhY2thZ2UKKyMgT3RoZXJ3aXNlIHlvdSBnZXQgdGhlIGZvbGxvd2luZyByZXN1bHRzOgorIyA3LjRNICAgIGdsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS1nbGliYy1pcGstMjAwOC4xLXRlc3QtMjAwODAxMDQtZXA5M3h4LnJvb3Rmcy50YXIuZ3oKKyMgMjVNICAgICB1Y2xpYmMvaW1hZ2VzL2VwOTN4eC9BbmdzdHJvbS1jb25zb2xlLWltYWdlLXVjbGliYy1pcGstMjAwOC4xLXRlc3QtMjAwODAxMDQtZXA5M3h4LnJvb3Rmcy50YXIuZ3oKKyMgYmVjYXVzZSBnZXR0ZXh0IGRlcGVuZHMgb24gZ2V0dGV4dC1kZXYsIHdoaWNoIHB1bGxzIGluIG1vcmUgLWRldiBwYWNrYWdlczoKKyMgMTUyMjggICBLaUIgL2VwOTN4eC9saWJzdGRjKystZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKyMgMTMwMCAgICBLaUIgL2VwOTN4eC91Y2xpYmMtZGV2XzAuOS4yOS1yOF9lcDkzeHguaXBrCisjIDE0MCAgICAgS2lCIC9hcm12NHQvZ2V0dGV4dC1kZXZfMC4xNC4xLXI2X2FybXY0dC5pcGsKKyMgNCAgICAgICBLaUIgL2VwOTN4eC9saWJnY2Mtcy1kZXZfNC4yLjItcjJfZXA5M3h4LmlwaworCitQQUNLQUdFUyA9KyAibGliZ2V0dGV4dGxpYiBsaWJnZXR0ZXh0c3JjIgorRklMRVNfbGliZ2V0dGV4dGxpYiA9ICIke2xpYmRpcn0vbGliZ2V0dGV4dGxpYi0qLnNvKiIKK0ZJTEVTX2xpYmdldHRleHRzcmMgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRzcmMtKi5zbyoiCisKK1BBQ0tBR0VTID0rICJnZXR0ZXh0LXJ1bnRpbWUgZ2V0dGV4dC1ydW50aW1lLWRldiBnZXR0ZXh0LXJ1bnRpbWUtZG9jIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUgPSAiJHtiaW5kaXJ9L2dldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9uZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2VudnN1YnN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2V0dGV4dC5zaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLnNvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L0dOVS5HZXR0ZXh0LmRsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWVfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jaGFyc2V0LmFsaWFzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2ICs9ICIke2xpYmRpcn0vbGliYXNwcmludGYuYSBcCisgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9hdXRvc3ByaW50Zi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1kZXZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAke2xpYmRpcn0vbGliaW50bC5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9saWJpbnRsLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvLiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvbmdldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2VudnN1YnN0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC8qLjMuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2V0dGV4dC9BQk9VVC1OTFMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9jc2hhcnBkb2MvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9saWJhc3ByaW50Zi9hdXRvc3ByaW50Zi5odG1sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmZvZGlyfS9hdXRvc3ByaW50Zi5pbmZvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaW50bC5zbworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXJtICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvKgorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvY29uZmlnLnJwYXRoCisJcm0gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbgorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhMTkwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtUmVtb3ZlLXRoZS13YXJuaW5nLWFib3V0LWRlcHJlY2F0ZWQtcGF0aHMtaW4tc2NoZW1hcy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDQxNTM0MjUzYjZiNjFlZDQ3NjllYjZhMzk2NjY5OGE1MGVlNzNiNzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTIgSnVuIDIwMTUgMTc6MDg6NDYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlIHRoZSB3YXJuaW5nIGFib3V0IGRlcHJlY2F0ZWQgcGF0aHMgaW4gc2NoZW1hcworCitTb21lIHNjaGVtYXMgaW4gZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyAoc3VjaCBhcyBwcm94eSBhbmQgbG9jYWxlKQorYXJlIHN0aWxsIHVzaW5nIGRlcHJlY2F0ZWQgcGF0aHMsIGFzIG9mIDMuMTYuMS4gVGhpcyBjYXVzZXMgd2FybmluZworbWVzc2FnZXMsIGFuZCBtZXRhL2xpYi9vZS9yb290ZnMucHkgY29tcGxhaW50cyBhYm91dCB0aGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorCistLS0KKyBnaW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYyB8IDYgLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYyBiL2dpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jCitpbmRleCBlNDI5NDliLi5lYzc5ZDdjIDEwMDY0NAorLS0tIGEvZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMKKysrKyBiL2dpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jCitAQCAtMTIwMiwxMiArMTIwMiw2IEBAIHBhcnNlX3N0YXRlX3N0YXJ0X3NjaGVtYSAoUGFyc2VTdGF0ZSAgKnN0YXRlLAorICAgICAgIHJldHVybjsKKyAgICAgfQorIAorLSAgaWYgKHBhdGggJiYgKGdfc3RyX2hhc19wcmVmaXggKHBhdGgsICIvYXBwcy8iKSB8fAorLSAgICAgICAgICAgICAgIGdfc3RyX2hhc19wcmVmaXggKHBhdGgsICIvZGVza3RvcC8iKSB8fAorLSAgICAgICAgICAgICAgIGdfc3RyX2hhc19wcmVmaXggKHBhdGgsICIvc3lzdGVtLyIpKSkKKy0gICAgZ19wcmludGVyciAoIndhcm5pbmc6IFNjaGVtYSAnJXMnIGhhcyBwYXRoICclcycuICBQYXRocyBzdGFydGluZyB3aXRoICIKKy0gICAgICAgICAgICAgICAgIicvYXBwcy8nLCAnL2Rlc2t0b3AvJyBvciAnL3N5c3RlbS8nIGFyZSBkZXByZWNhdGVkLlxuIiwgaWQsIHBhdGgpOworLQorICAgc3RhdGUtPnNjaGVtYV9zdGF0ZSA9IHNjaGVtYV9zdGF0ZV9uZXcgKHBhdGgsIGdldHRleHRfZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZHMsIGV4dGVuZHNfbmFtZSwgbGlzdF9vZik7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmUzNjMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1jb25maWd1cmUuYWMtRG8tbm90LXVzZS1yZWFkbGluay13aGVuLWNyb3NzLWNvbXBpbGluLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2NvbW1pdCA5YjM4ZDUwN2VjMzdiM2Q3ZDRkZjYwOTVmYTdlZDE2YjQ3ZDM5OWY3CitBdXRob3I6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiAgIFNhdCBNYXIgMjkgMjE6MTA6NDMgMjAxNCAtMDQwMAorCisgICAgY29uZmlndXJlLmFjOiBEbyBub3QgdXNlIHJlYWRsaW5rIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCisgICAgRG8gbm90IHVzZSByZWFkbGluayB0byBzZXQgQUJTX0dMSUJfUlVOVElNRV9MSUJESVIgd2hlbiBjcm9zcworICAgIGNvbXBpbGluZy4gIERvaW5nIHNvIGNhdXNlcyBob3N0IHBhdGhzIHRvIHBvdGVudGlhbGx5IHBvbGx1dGUKKyAgICB0aGUgdGFyZ2V0LgorCisgICAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSB0aGUgcGF0aCBpcyBub3QgY29udmVydGVkIHRvIGFic29sdXRlIGlmCisgICAgaXQgY29udGFpbnMgYW55ICIuLiIgcmVmZXJlbmNlcyBzbyBpdCdzIG5vdCBjb21wbGV0ZWx5IGNvcnJlY3QuCisKKyAgICBVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzU3NV0KKyAgICBTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorCitkaWZmIC1ydWIgZ2xpYi0yLjM4LjIub3JpZy9jb25maWd1cmUuYWMgZ2xpYi0yLjM4LjIvY29uZmlndXJlLmFjCistLS0gZ2xpYi0yLjM4LjIub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wNC0wMyAyMDoxNzoxMy4wMzU1NjcxNDMgLTA0MDAKKysrKyBnbGliLTIuMzguMi9jb25maWd1cmUuYWMJMjAxNC0wNC0wMyAyMDoxOTowNy4wNzE1NjYwNTcgLTA0MDAKK0BAIC0yNzUsNyArMjc1LDExIEBACisgICAgICAgICAgICBbXSwKKyAJICAgW3dpdGhfcnVudGltZV9saWJkaXI9IiJdKQorIEdMSUJfUlVOVElNRV9MSUJESVI9IiR3aXRoX3J1bnRpbWVfbGliZGlyIgorK0FTX0lGKFsgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0geWVzIF0sIFsKKytBQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpciIKKytdLCBbCisgQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9ImByZWFkbGluayAtbSAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyYCIKKytdKQorIEFDX1NVQlNUKEdMSUJfUlVOVElNRV9MSUJESVIpCisgQUNfU1VCU1QoQUJTX0dMSUJfUlVOVElNRV9MSUJESVIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTElCX1JVTlRJTUVfTElCRElSLCBbdGVzdCAieCR3aXRoX3J1bnRpbWVfbGliZGlyIiAhPSAieCJdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhYzM1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA1NTI1M2I1NWI5YzY1ZjNlMGVmYmJlMDNjYmFiMmE0YzQwMTRhMTZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCA1IEp1bCAyMDEyIDE1OjA5OjQxICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGFkZCAtbWFyY2g9aTQ4NiBpbnRvIENGTEFHUyBhdXRvbWF0aWNhbGx5CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZ2xpYiBjb25maWd1cmUgd2lsbCBjaGVjayBpZiBjdXJyZW50IGdjYyBuZWVkIC1tYXJjaD1pNDg2LAord2hlbiBnY2MgbmVlZCAtbWFyY2g9aTQ4NiBidXQgQ0ZMQUdTIGRvbid0IGhhdmUsCitnbGliIGNvbmZpZ3VyZSB3aWxsIGFib3J0IGFuZCBhZHZpc2UgdGhlIHVzZXIgdG8gYWRkIC1tYXJjaD1pNDg2IG9yIGxhdGVyLgorVGhpcyB3aWxsIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzLGl0J3Mgbm90IGdvb2QgZm9yIGF1dG9tYXRpYyBidWlsZCBzeXN0ZW0uCitzbyBjaGFuZ2UgdGhpcyB0byBhZGRpbmcgLW1hcmNoPWk0ODUgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzIG5lZWRlZC4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDYgKysrKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnbGliLTIuMzYuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGliLTIuMzYuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdsaWItMi4zNi4wL2NvbmZpZ3VyZS5hYworQEAgLTIzNzgsNyArMjM3OCw3IEBAIGRubAorIGRubCBOb3RlIHRoYXQgdGhlIGF0b21pYyBvcHMgYXJlIG9ubHkgYXZhaWxhYmxlIHdpdGggR0NDIG9uIHg4NiB3aGVuCisgZG5sIHVzaW5nIC1tYXJjaD1pNDg2IG9yIGhpZ2hlci4gIElmIHdlIGRldGVjdCB0aGF0IHRoZSBhdG9taWMgb3BzIGFyZQorIGRubCBub3QgYXZhaWxhYmxlIGJ1dCB3b3VsZCBiZSBhdmFpbGFibGUgZ2l2ZW4gdGhlIHJpZ2h0IGZsYWdzLCB3ZSB3YW50CistZG5sIHRvIGFib3J0IGFuZCBhZHZpc2UgdGhlIHVzZXIgdG8gZml4IHRoZWlyIENGTEFHUy4gIEl0J3MgYmV0dGVyIHRvIGRvCisrZG5sIHRvIGFkZCAtbWFyY2g9aTQ4NiBhdXRvbWF0aWNhbGx5IHRvIGZpeCB0aGVpciBDRkxBR1MuICBJdCdzIGJldHRlciB0byBkbworIGRubCB0aGF0IHRoZW4gdG8gc2lsZW50bHkgZmFsbCBiYWNrIG9uIGVtdWxhdGVkIGF0b21pYyBvcHMganVzdCBiZWNhdXNlCisgZG5sIHRoZSB1c2VyIGhhZCB0aGUgd3JvbmcgYnVpbGQgZW52aXJvbm1lbnQuCisKK0BAIC0yNDAxLDcgKzI0MDEsOCBAQCBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvY2stZnJlZSBhdG9taWMgaW50CisgICAgICAgICBBQ19UUllfQ09NUElMRShbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFt2b2xhdGlsZSBpbnQgYXRvbWljID0gMjtcCisgICAgICAgICAgICAgICAgICAgICAgICAgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCAoJmF0b21pYywgMiwgMyk7XSwKKy0gICAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW0dMaWIgbXVzdCBiZSBidWlsZCB3aXRoIC1tYXJjaD1pNDg2IG9yIGxhdGVyLl0pXSwKKysgICAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfV0FSTihbR0xpYiBtdXN0IGJlIGJ1aWxkIHdpdGggLW1hcmNoPWk0ODYgb3IgbGF0ZXIuXSkKKysgICAgICAgICAgICAgICAgICAgICAgIFNBVkVfQ0ZMQUdTPSIke1NBVkVfQ0ZMQUdTfSAtbWFyY2g9aTQ4NiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgW10pCisgICAgICAgICBDRkxBR1M9IiR7U0FWRV9DRkxBR1N9IgorICAgICAgIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwYzAwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FsbG93LXJ1bi1tZWRpYS1zZFgtZHJpdmUtbW91bnQtaWYtdXNlcm5hbWUtcm9vdC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGM1M2U5NGE1MjBiNTczYWEwZGNmMTI5MDNlOTU2M2ZlOGJhZGMzNGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJpdXMgQXZyYW0gPG1hcml1cy5hdnJhbUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDEyOjEwOjQxICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEFsbG93IC9ydW4vbWVkaWEvc2RYIGRyaXZlIG1vdW50IGlmIHVzZXJuYW1lIHJvb3QKKworSW4gY2FzZSB0aGF0IHRoZSB1c2VybmFtZSBsb2dnZWQgaW4gdGhlIHN5c3RlbSBpcyByb290Cit0aGUgZHJpdmVzIGFyZSBkaXJlY3RseSBtb3VudGVkIGluIC9ydW4vbWVkaWEvc2RYIGFuZAorbm90IC9ydW4vbWVkaWEvPHVzZXJuYW1lPi9zZFggYXMgdGhlIGZ1bmN0aW9uCitnX3VuaXhfbW91bnRfZ3Vlc3Nfc2hvdWxkX2Rpc3BsYXkoKSBleHBlY3RzLgorCitXaXRob3V0IHRoaXMgY2hhbmdlIFVTQiBzdGljayBtb3VudHMgYXJlIG5vdCBhY2Nlc2libGUgZnJvbQorZ3JhcGhpY2FsIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHRoZSBGaWxlIE1hbmFnZXIgKHBjbWFuZm0pLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFyaXVzIEF2cmFtIDxtYXJpdXMuYXZyYW1AaW50ZWwuY29tPgorLS0tCisgZ2lvL2d1bml4bW91bnRzLmMgfCAgICA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2lvL2d1bml4bW91bnRzLmMgYi9naW8vZ3VuaXhtb3VudHMuYworaW5kZXggNDk5OTM1NC4uZjZjMTQ3MiAxMDA2NDQKKy0tLSBhL2dpby9ndW5peG1vdW50cy5jCisrKysgYi9naW8vZ3VuaXhtb3VudHMuYworQEAgLTIxMzYsNiArMjEzNiwxMSBAQCBnX3VuaXhfbW91bnRfZ3Vlc3Nfc2hvdWxkX2Rpc3BsYXkgKEdVbml4TW91bnRFbnRyeSAqbW91bnRfZW50cnkpCisgICAgICAgICAgIG1vdW50X3BhdGhbc2l6ZW9mICgiL3J1bi9tZWRpYS8iKSAtIDEgKyB1c2VyX25hbWVfbGVuXSA9PSAnLycpCisgICAgICAgICBpc19pbl9ydW50aW1lX2RpciA9IFRSVUU7CisgCisrICAgICAgLyogQWxsb3cgbm8gdXNlcm5hbWUgaW4gcGF0aCBpbiAvcnVuL21lZGlhIGlmIGN1cnJlbnQgdXNlciBpcyByb290ICovCisrICAgICAgaWYgKHN0cmNtcCh1c2VyX25hbWUsICJyb290IikgPT0gMCAmJgorKyAgICAgICAgICBzdHJuY21wIChtb3VudF9wYXRoLCAiL3J1bi9tZWRpYS8iLCBzaXplb2YoInJ1bi9tZWRpYSIpKSA9PSAwKQorKyAgICAgICAgaXNfaW5fcnVudGltZV9kaXIgPSBUUlVFOworKworICAgICAgIGlmIChpc19pbl9ydW50aW1lX2RpciB8fCBnX3N0cl9oYXNfcHJlZml4IChtb3VudF9wYXRoLCAiL21lZGlhLyIpKQorICAgICAgICAgeworICAgICAgICAgICBjaGFyICpwYXRoOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvY29uZmlndXJlLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2OWEzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0Zyb20gMWM1NzE4NjQ4ZDQ5ZTc5NWVmZWU5MWMyMjBhMmJmOTM4NmMxODRmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjggQXByIDIwMTIgMTg6MjQ6NTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiB1c2UgJGhvc3RfYWxpYXMtbGlidG9vbCBpbnN0ZWFkIG9mIGxpYnRvb2wKKyBkaXJlY3RseQorCitQb2t5IHJlbmFtZXMgbGlidG9vbCB0byAkaG9zdF9hbGlhcy1saWJ0b29sLgorLi8kaG9zdF9hbGlhcy1saWJ0b29sIGlzbid0IGNyZWF0ZWQgdW50aWwgYWZ0ZXIgY29uZmlndXJlIHJ1bnMgd2l0aAorbGlidG9vbCA+PSAyLjIuMgorc28gd2UgY2FuJ3QgY2FsbCAjIGl0IGF0IHRoaXMgcG9pbnQuIFdlIGNhbiBzYWZlbHkgYXNzdW1lIGEgdmVyc2lvbiBpcworYXZhaWxhYmxlCitmcm9tIFBBVEggdGhvdWdoCisKK1JlYmFzZWQgdG8gZ2xpYi0yLjI3LjMgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1JlYmFzZWQgdG8gZ2xpYi0yLjMyLjEgYnkgTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDggKysrKy0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTY0NzhjNi4uOWE5M2Q2MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTQ3MCw3ICsxNDcwLDcgQEAgaWYgdGVzdCB4IiRnbGliX25hdGl2ZV93aW4zMiIgPSB4eWVzOyB0aGVuCisgICBHX01PRFVMRV9MREZMQUdTPQorIGVsc2UKKyAgIGV4cG9ydCBTRUQKKy0gIEdfTU9EVUxFX0xERkxBR1M9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKysgIEdfTU9EVUxFX0xERkxBR1M9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBmaQorIGRubCBHX01PRFVMRV9JTVBMPSBkb24ndCByZXNldCwgc28gY21kLWxpbmUgY2FuIG92ZXJyaWRlCisgR19NT0RVTEVfTkVFRF9VU0NPUkU9MAorQEAgLTE1MzUsOSArMTUzNSw5IEBAIGlmIHRlc3QgIiRHX01PRFVMRV9JTVBMIiA9ICJHX01PRFVMRV9JTVBMX0RMIjsgdGhlbgorIAlMREZMQUdTPSIkTERGTEFHUyAkR19NT0RVTEVfTERGTEFHUyIKKyBkbmwgKioqIGNoZWNrIGZvciBPU0YxLzUuMCBSVExEX0dMT0JBTCBicm9rZW5uZXNzCisgCWVjaG8gInZvaWQgZ2xpYl9wbHVnaW5fdGVzdCh2b2lkKSB7IH0iID4gcGx1Z2luLmMKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtDUFBGTEFHU30gLWMgLW8gcGx1Z2luLmxvIHBsdWdpbi5jID4vZGV2L251bGwgMj4mMQorLQkke1NIRUxMfSAuL2xpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKysJJHtTSEVMTH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisgCQkke0xERkxBR1N9IC1tb2R1bGUgLW8gcGx1Z2luLmxhIC1leHBvcnQtZHluYW1pYyBcCisgCQktc2hyZXh0ICIubyIgLWF2b2lkLXZlcnNpb24gcGx1Z2luLmxvIFwKKyAJCS1ycGF0aCAvZG9udC9jYXJlID4vZGV2L251bGwgMj4mMQorQEAgLTE2MTQsNyArMTYxNCw3IEBAIGZpCisgCisgQUNfTVNHX0NIRUNLSU5HKGZvciB0aGUgc3VmZml4IG9mIG1vZHVsZSBzaGFyZWQgbGlicmFyaWVzKQorIGV4cG9ydCBTRUQKKy1zaHJleHRfY21kcz1gLi9saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisrc2hyZXh0X2NtZHM9YC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorIGV2YWwgJHNocmV4dF9jbWRzCisgbW9kdWxlPXllcyBldmFsIHN0ZF9zaHJleHQ9JHNocmV4dF9jbWRzCisgIyBjaG9wIHRoZSBpbml0aWFsIGRvdAorLS0gCisxLjcuOC42CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3MTExMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1JlbmFtZSAncmFuZCcgdmFyaWFibGUgdG8gYXZvaWQgY29uZmxpY3QuCisKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworU2lnbmVkLW9mZi1ieTogQmrDtnJuIFN0ZW5iZXJnIDxianN0QGVuZWEuY29tPgorCitkaWZmIC11IGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuY34gZ2xpYi0yLjM0LjMvdGVzdHMvcmVmY291bnQvc2lnbmFscy5jCistLS0gZ2xpYi0yLjM0LjMvdGVzdHMvcmVmY291bnQvc2lnbmFscy5jCTIwMTItMTEtMjYgMTc6NTI6NDguMDAwMDAwMDAwICswMTAwCisrKysgZ2xpYi0yLjM0LjMvdGVzdHMvcmVmY291bnQvc2lnbmFscy5jCTIwMTMtMDItMDggMTQ6MjQ6MTAuMDUyNDc3NTQ2ICswMTAwCitAQCAtOSw3ICs5LDcgQEAKKyAjZGVmaW5lIE1ZX0lTX1RFU1RfQ0xBU1ModGNsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKHRjbGFzcyksIEdfVFlQRV9URVNUKSkKKyAjZGVmaW5lIE1ZX1RFU1RfR0VUX0NMQVNTKHRlc3QpICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgodGVzdCksIEdfVFlQRV9URVNULCBHVGVzdENsYXNzKSkKKyAKKy1zdGF0aWMgR1JhbmQgKnJhbmQ7Cisrc3RhdGljIEdSYW5kICpncmFuZDsKKyAKKyB0eXBlZGVmIHN0cnVjdCBfR1Rlc3QgR1Rlc3Q7CisgdHlwZWRlZiBzdHJ1Y3QgX0dUZXN0Q2xhc3MgR1Rlc3RDbGFzczsKK0BAIC04NCw3ICs4NCw3IEBACisgICAgICAgTlVMTAorICAgICB9OworIAorLSAgICByYW5kID0gZ19yYW5kX25ldygpOworKyAgICBncmFuZCA9IGdfcmFuZF9uZXcoKTsKKyAKKyAgICAgdGVzdF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR19UWVBFX09CSkVDVCwgIkdUZXN0IiwKKyAgICAgICAgICZ0ZXN0X2luZm8sIDApOworQEAgLTIxOCw3ICsyMTgsNyBAQAorIHN0YXRpYyB2b2lkCisgbXlfdGVzdF9kb19wcm9wIChHVGVzdCAqIHRlc3QpCisgeworLSAgdGVzdC0+dmFsdWUgPSBnX3JhbmRfaW50IChyYW5kKTsKKysgIHRlc3QtPnZhbHVlID0gZ19yYW5kX2ludCAoZ3JhbmQpOworICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAodGVzdCksICJ0ZXN0LXByb3AiKTsKKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1OWQxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItMi4wLWNvbmZpZ3VyZS1yZWFkbGluay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitjb25maWd1cmUuYWM6IGNoYW5nZSByZWFkbGluayAtZiB0byAtbQorCitDaGFuZ2UgInJlYWRsaW5rIC1mIiB0byAicmVhZGxpbmsgLW0iIHNpbmNlICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXIKK21heSBub3QgZXhpc3QuCisKK1RoaXMgcGF0Y2ggc2hvdWxkIGdvIHRvIHRoZSB1cHN0cmVhbSwgSSB3aWxsIHNlbmQgaXQgc29vbmVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjcxLDcgKzI3MSw3IEBAIEFDX0FSR19XSVRIKHJ1bnRpbWUtbGliZGlyLAorICAgICAgICAgICAgW10sCisgCSAgIFt3aXRoX3J1bnRpbWVfbGliZGlyPSIiXSkKKyBHTElCX1JVTlRJTUVfTElCRElSPSIkd2l0aF9ydW50aW1lX2xpYmRpciIKKy1BQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iYHJlYWRsaW5rIC1mICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXJgIgorK0FCU19HTElCX1JVTlRJTUVfTElCRElSPSJgcmVhZGxpbmsgLW0gJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcmAiCisgQUNfU1VCU1QoR0xJQl9SVU5USU1FX0xJQkRJUikKKyBBQ19TVUJTVChBQlNfR0xJQl9SVU5USU1FX0xJQkRJUikKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMSUJfUlVOVElNRV9MSUJESVIsIFt0ZXN0ICJ4JHdpdGhfcnVudGltZV9saWJkaXIiICE9ICJ4Il0pCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0MzUxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorIyBhbiB2ZXJ5IG9sZCBwYXRjaCBjaGVycnktcGlja2VkIGluIGV2ZXJ5IGdsaWItMi4wIHBhdGNoIGRpcmVjdG9yeS4gVGhlIGVhcmxpZXN0IGNvbnRhaW5lcgorIyBmb3IgaXQgaXMgMi42LjUgaW4gT0UuIFRoZSBlYXJsaWVzdCBjb21taXQgZm9yIGl0IGlzIGM4ZTU3MDIxMjdlNTA3ZTgyZTZmNjhhNGI4YzU0NjgwM2FjY2VhOWQKKyMgaW4gT0Ugc2lkZSB3aGljaCBwb3J0cyBmcm9tIHByZXZpb3VzIGJpdGtlZXBlciBTQ00uIEluIE9FIHNpZGUgaXQncyBvbmx5IHVzZWQgdGlsIDIuMTIuNC4KKyMKKyMga2VlcCBpdCBzaW5jZSBpdCdzIGFsd2F5cyBjbGVhbmVyIHRvIG5vdCBoYXJkY29kZSBkZXN0aW5hdGlvbiBwYXRoLiBVc2UgQGRhdGFkaXJAIGlzIG1vcmUKKyMgcG9ydGFibGUgaGVyZS4gbWFyayBmb3IgdXBzdHJlYW0KKyMKKyMgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAwNi8yNS8yMDEwCisjIFJlYmFzZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4sIDExLzE2LzIwMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gZ2xpYi0yLjI3LjMtb3JpZy9nbGliLWdldHRleHRpemUuaW4gZ2xpYi0yLjI3LjMvZ2xpYi1nZXR0ZXh0aXplLmluCistLS0gZ2xpYi0yLjI3LjMtb3JpZy9nbGliLWdldHRleHRpemUuaW4JMjAwOS0wNC0wMSAwNzowNDoyMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbGliLTIuMjcuMy9nbGliLWdldHRleHRpemUuaW4JMjAxMC0xMS0xNiAxMjo1NTowNi44NzQ2MDU5MTYgKzA4MDAKK0BAIC01Miw3ICs1Miw3IEBACisgZGF0YWRpcj1AZGF0YWRpckAKKyBkYXRhcm9vdGRpcj1AZGF0YXJvb3RkaXJACisgCistZ2V0dGV4dF9kaXI9JHByZWZpeC9zaGFyZS9nbGliLTIuMC9nZXR0ZXh0CisrZ2V0dGV4dF9kaXI9QGRhdGFkaXJAL2dsaWItMi4wL2dldHRleHQKKyAKKyB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgY2FzZSAiJDEiIGluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9wdGVzdC1wYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3B0ZXN0LXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmUwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9wdGVzdC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIHRlbXBvcmFyeSBtYXBwaW5nIGZpbGVzIGluIHRoZSBtYXBwZWRmaWxlIHRlc3QgdG8gdGhlCit1c2VyIHJ1bnRpbWUgZGlyZWN0b3J5LCB3cml0ZSB0aGVtIHRvICRUTVAuICBUaGUgcnVudGltZSBkaXJlY3RvcnkgbWF5IG5vdAorY3VycmVudGx5IGV4aXN0IGlmIHRoZSB0ZXN0IGlzIGV4ZWN1dGVkIG9uIGEgbm9uLWRlc2t0b3Agc3lzdGVtIGFuZCB0aGUgdGVzdAorZG9lc24ndCBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMgYi9nbGliL3Rlc3RzL21hcHBlZGZpbGUuYworaW5kZXggNDBlMGU2MC4uMjdhMjRiZSAxMDA2NDQKKy0tLSBhL2dsaWIvdGVzdHMvbWFwcGVkZmlsZS5jCisrKysgYi9nbGliL3Rlc3RzL21hcHBlZGZpbGUuYworQEAgLTgxLDcgKzgxLDcgQEAgdGVzdF93cml0YWJsZSAodm9pZCkKKyAgIGNvbnN0IGdjaGFyICpuZXcgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnh5eiI7CisgICBnY2hhciAqdG1wX2NvcHlfcGF0aDsKKyAKKy0gIHRtcF9jb3B5X3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF91c2VyX3J1bnRpbWVfZGlyICgpLCAiZ2xpYi10ZXN0LTQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCk7CisrICB0bXBfY29weV9wYXRoID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdG1wX2RpciAoKSwgImdsaWItdGVzdC00MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpOworIAorICAgZ19maWxlX2dldF9jb250ZW50cyAoZ190ZXN0X2dldF9maWxlbmFtZSAoR19URVNUX0RJU1QsICI0MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpLCAmY29udGVudHMsICZsZW4sICZlcnJvcik7CisgICBnX2Fzc2VydF9ub19lcnJvciAoZXJyb3IpOworQEAgLTEyNSw3ICsxMjUsNyBAQCB0ZXN0X3dyaXRhYmxlX2ZkICh2b2lkKQorICAgaW50IGZkOworICAgZ2NoYXIgKnRtcF9jb3B5X3BhdGg7CisgCistICB0bXBfY29weV9wYXRoID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9ydW50aW1lX2RpciAoKSwgImdsaWItdGVzdC00MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpOworKyAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3RtcF9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKyAKKyAgIGdfZmlsZV9nZXRfY29udGVudHMgKGdfdGVzdF9nZXRfZmlsZW5hbWUgKEdfVEVTVF9ESVNULCAiNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKSwgJmNvbnRlbnRzLCAmbGVuLCAmZXJyb3IpOworICAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBhZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEgL2Jpbi9zaAorCitnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIGdsaWIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3VjbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3VjbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE1NGZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0ZpeCBEQVRBRElSTkFNRSBvbiB1Y2xpYmMvTGludXgKKwordHJhbnNsYXRpb24gZmlsZXMgYXJlIGFsd2F5cyBpbnN0YWxsZWQgdW5kZXIgUFJFRklYL3NoYXJlL2xvY2FsZSBpbiB1Y2xpYmMKK2Jhc2VkIHN5c3RlbXMgdGhlcmVmb3JlIGxldHMgc2V0IERBVEFESVJOQU1FIHRvICJzaGFyZSIuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBnbGliLTIuMzguMi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGliLTIuMzguMi5vcmlnL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNAkyMDEzLTExLTA3IDA3OjI5OjEzLjAwMDAwMDAwMCAtMDgwMAorKysrIGdsaWItMi4zOC4yL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNAkyMDE0LTAzLTE1IDE0OjUxOjU0LjcxMjEzNTY0NCAtMDcwMAorQEAgLTIzOSw3ICsyMzksNyBAQAorIAkgICAgICBbQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgICAgIERBVEFESVJOQU1FPWxpYl0pCisgCSAgICA7OworLQkgICAgKi0qLW9wZW5ic2QqKQorKwkgICAgKi0qLW9wZW5ic2QqIHwgKi0qLWxpbnV4LXVjbGliYyopCisgCSAgICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICAgREFUQURJUk5BTUU9c2hhcmUKKyAJICAgIDs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ0LjEuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzZDM2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wXzIuNDQuMS5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGdsaWIuaW5jCisKK1BFID0gIjEiCisKK1NIUlRfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2dsaWIvJHtTSFJUX1ZFUn0vZ2xpYi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWxpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3B0ZXN0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4M2VmYmE0NzIyYTk2NzRiOTc0MzdkMWQ5OWFmNzlkYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ODExZGVhY2FmOGE1MDNkMGE5YjcwMTc3N2VhMDc5Y2E2YTQyNzdiZTEwZTNkNzMwZDIxMTI3MzVkNWVjYTA3IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJmNzkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMKQEAgLTAsMCArMSwxMDQgQEAKK1NVTU1BUlkgPSAiQSBnZW5lcmFsLXB1cnBvc2UgdXRpbGl0eSBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR0xpYiBpcyBhIGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5IGxpYnJhcnksIHdoaWNoIHByb3ZpZGVzIG1hbnkgdXNlZnVsIGRhdGEgdHlwZXMsIG1hY3JvcywgdHlwZSBjb252ZXJzaW9ucywgc3RyaW5nIHV0aWxpdGllcywgZmlsZSB1dGlsaXRpZXMsIGEgbWFpbiBsb29wIGFic3RyYWN0aW9uLCBhbmQgc28gb24uIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dsaWIvIgorCisjIHBjcmUgaXMgdW5kZXIgQlNEOworIyBkb2NzL3JlZmVyZW5jZS9DT1BZSU5HIGlzIHdpdGggYSAncHVibGljIGRvbWFpJy1saWtlIGxpY2Vuc2UhCitMSUNFTlNFID0gIkxHUEx2MisgJiBCU0QgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsaWIvZ2xpYi5oO2JlZ2lubGluZT00O2VuZGxpbmU9MTc7bWQ1PWI0ZjBmNGEzOTljMTllNWViYjIwYzMxYjc5ZDZiYzMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dtb2R1bGUvQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ21vZHVsZS9nbW9kdWxlLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YjRmMGY0YTM5OWMxOWU1ZWJiMjBjMzFiNzlkNmJjMzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xpYi9wY3JlL0NPUFlJTkc7bWQ1PTI2NmViYzNmZjc0ZWU5Y2U2ZmFkNjU1Nzc2NjdjMGY0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsaWIvcGNyZS9wY3JlLmg7YmVnaW5saW5lPTExO2VuZGxpbmU9MzU7bWQ1PWRlMjdmMmJmNjMzZDIwYTJiN2FmMGIxOTgzNDIzMjgzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvcmVmZXJlbmNlL0NPUFlJTkc7bWQ1PWY1MWE1MTAwYzE3YWY2YmFlMDA3MzVjZDc5MWUxZmNjIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgorU0VDVElPTiA9ICJsaWJzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAtbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYgbGliZmZpIHpsaWIiCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICcgZGJ1cycsICcnLCBkKX0iCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJwa2djb25maWctbmF0aXZlIGdldHRleHQtbmF0aXZlIGxpYmZmaS1uYXRpdmUgemxpYi1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstbGlidG9vbCBuYXRpdmVzZGstZ2V0dGV4dCBuYXRpdmVzZGstbGliZmZpIG5hdGl2ZXNkay16bGliICR7QlBOfS1uYXRpdmUiCisKK1BBQ0tBR0VTID0rICIke1BOfS11dGlscyAke1BOfS1iYXNoLWNvbXBsZXRpb24gJHtQTn0tY29kZWdlbiIKKworTEVBRF9TT05BTUUgPSAibGliZ2xpYi0yLjAuKiIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS8qICR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2V0dGV4dCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBndGstZG9jIHBrZ2NvbmZpZyBwdGVzdC1nbm9tZQorCitTID0gIiR7V09SS0RJUn0vZ2xpYi0ke1BWfSIKKworQ09SRUNPTkYgPSAiLS1kaXNhYmxlLWR0cmFjZSAtLWRpc2FibGUtZmFtIC0tZGlzYWJsZS1saWJlbGYgLS1kaXNhYmxlLXN5c3RlbXRhcCAtLWRpc2FibGUtbWFuIgorCitQUklOVEYgPSAiLS1lbmFibGUtaW5jbHVkZWQtcHJpbnRmPW5vIgorUFJJTlRGX2RhcndpbiA9ICItLWVuYWJsZS1pbmNsdWRlZC1wcmludGY9eWVzIgorUFJJTlRGX21pbmd3MzIgPSAiLS1lbmFibGUtaW5jbHVkZWQtcHJpbnRmPXllcyIKK0VYVFJBX09FQ09ORiA9ICIke1BSSU5URn0gJHtDT1JFQ09ORn0iCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiR7Q09SRUNPTkZ9IC0tZGlzYWJsZS1zZWxpbnV4IgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS13aXRoLWxpYmljb252PWdudSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qLCMhJHtVU1JCSU5QQVRIfS9lbnYgcHl0aG9uLCcgJHtTfS9naW8vZ2RidXMtMi4wL2NvZGVnZW4vZ2RidXMtY29kZWdlbi5pbgorfQorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSAke2xpYmRpcn0vZ2lvICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dsaWItMi4wL2dldHRleHQvbWtpbnN0YWxsZGlycyAke2RhdGFkaXJ9L2dsaWItMi4wL2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9nbGliLTIuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYioke1NPTElCU0RFVn0gXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2lvL21vZHVsZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9nZGIgJHtkYXRhZGlyfS9nZGIgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2lvL21vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dsaWItMi4wL2luc3RhbGxlZC10ZXN0cy9nbGliLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWNvZGVnZW4gPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9jb2RlZ2VuLyoucHkiCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24iCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorVVNFX05MUyA9ICJ5ZXMiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vZ3Rlc3Rlci1yZXBvcnQgXTsgdGhlbgorCQlzZWQgJHtEfSR7YmluZGlyfS9ndGVzdGVyLXJlcG9ydCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcKKwlmaQorCisJIyBSZW1vdmUgc29tZSB1bnBhY2thZ2VkIGZpbGVzCisJcm0gLWYgJHtEfSR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi8qLnB5YworCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weW8KKworCSMgU29tZSBkaXN0cm9zIGhhdmUgYm90aCAvYmluL3BlcmwgYW5kIC91c3IvYmluL3BlcmwsIGJ1dCB3ZSBzZXQgcGVybCBsb2NhdGlvbgorCSMgZm9yIHRhcmdldCBhcyAvdXNyL2Jpbi9wZXJsLCBzbyBmaXggaXQgdG8gL3Vzci9iaW4vcGVybC4KKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vZ2xpYi1ta2VudW1zIF07IHRoZW4KKwkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS9nbGliLW1rZW51bXMKKwlmaQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiXAorICAgICAgICAgICAgZ25vbWUtZGVza3RvcC10ZXN0aW5nIFwKKyAgICAgICAgICAgIHR6ZGF0YSBcCisgICAgICAgICAgICB0emRhdGEtYW1lcmljYXMgXAorICAgICAgICAgICAgdHpkYXRhLWFzaWEgXAorICAgICAgICAgICAgdHpkYXRhLWV1cm9wZSBcCisgICAgICAgICAgICB0emRhdGEtcG9zaXggXAorICAgICAgICAgICAgcHl0aG9uLXB5Z29iamVjdCBcCisgICAgICAgICAgICBweXRob24tZGJ1cyBcCisgICAgICAgICAgICBzaGFyZWQtbWltZS1pbmZvIFwKKyAgICAgICAgICAgIgorCitSREVQRU5EU18ke1BOfS1wdGVzdF9hcHBlbmRfbGliYy1nbGliYyA9ICJcCisgICAgICAgICAgICBnbGliYy1nY29udi11dGYtMTYgXAorICAgICAgICAgICAgZ2xpYmMtY2hhcm1hcC11dGYtOCBcCisgICAgICAgICAgICBnbGliYy1nY29udi1jcDEyNTUgXAorICAgICAgICAgICAgZ2xpYmMtY2hhcm1hcC1jcDEyNTUgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtdXRmLTMyIFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LXV0Zi03IFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWV1Yy1qcCBcCisgICAgICAgICAgICBnbGliYy1nY29udi1pc284ODU5LTEgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtaXNvODg1OS0xNSBcCisgICAgICAgICAgICBnbGliYy1jaGFybWFwLWludmFyaWFudCBcCisgICAgICAgICAgICBnbGliYy1sb2NhbGVkYXRhLXRyYW5zbGl0LWNqay12YXJpYW50cyBcCisgICAgICAgICAgICIKKworSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImxpYmRpciIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40NC4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MWI3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40NC4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiR0xpYiBuZXR3b3JraW5nIGV4dGVuc2lvbnMiCitERVNDUklQVElPTiA9ICJnbGliLW5ldHdvcmtpbmcgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBjZXJ0YWluIEdMaWIgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseSBpbiBHTGliIGl0c2VsZiBiZWNhdXNlIG9mIHRoZWlyIGRlcGVuZGVuY2llcy4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmdub21lLm9yZy9icm93c2UvZ2xpYi1uZXR3b3JraW5nLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjY5ODliMjBjZjNiMjZkZDVhZTI3MmUwNGE5YWNiMGIzIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOGY4YTM0MGQzYmE5OWJmZGVmMzhiNjUzZGE5Mjk2NTJlYTY2NDBlMjc5NjlkMjlmN2FjNTFmYmJlMTFhNDM0NiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImNhLWNlcnRpZmljYXRlcyBnbnV0bHMiCisKKyMgTm8gZXhwbGljaXQgZGVwZW5kZW5jeSBhcyBpdCB3b3JrcyB3aXRob3V0IGNhLWNlcnRpZmljYXRlcyBpbnN0YWxsZWQKK1BBQ0tBR0VDT05GSUdbY2EtY2VydGlmaWNhdGVzXSA9ICItLXdpdGgtY2EtY2VydGlmaWNhdGVzPSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQsLS13aXRob3V0LWNhLWNlcnRpZmljYXRlcyIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tsaWJwcm94eV0gPSAiLS13aXRoLWxpYnByb3h5LC0td2l0aG91dC1saWJwcm94eSxsaWJwcm94eSIKK1BBQ0tBR0VDT05GSUdbcGtjczExXSA9ICItLXdpdGgtcGtjczExLC0td2l0aG91dC1wa2NzMTEscDExLWtpdCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1nbm9tZS1wcm94eSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dAorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYmdpbyouc28gJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvLmRlYnVnLyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYmdpbyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLmEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NmE0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitUaGlzIGlzIGEgaGFjayB0byBmaXggYnVpbGRpbmcgdGhlIGxvY2FsZSBiaXRzIG9uIGFuIG9sZGVyCitDZW50T3MgNS5YIG1hY2hpbmUKKworSW5kZXg6IGdpdC9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCisrKysgZ2l0Lm9yaWcvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCitAQCAtMTksNiArMTksOCBAQAorICNpZm5kZWYgX0xEX0NPTkZJR19ICisgI2RlZmluZSBfTERfQ09ORklHX0gJMQorIAorKyNkZWZpbmUgRFVNTVlfTE9DQUxFX1QKKysKKyAvKiBVc2UgdGhlIGludGVybmFsIHRleHRkb21haW4gdXNlZCBmb3IgbGliYyBtZXNzYWdlcy4gICovCisgI2RlZmluZSBQQUNLQUdFIF9saWJjX2ludGxfZG9tYWlubmFtZQorICNpZm5kZWYgVkVSU0lPTgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTNlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjIuYmIKQEAgLTAsMCArMSw1OSBAQAorU1VNTUFSWSA9ICJDcm9zcyBsb2NhbGUgZ2VuZXJhdGlvbiB0b29sIGZvciBnbGliYyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2xpYmMuaHRtbCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTC0yLjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VTO21kNT1lOWE1NThlMjQzYjM2ZDMyMDlmMzgwZGViMzk0YjIxMyBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKKworaW5oZXJpdCBuYXRpdmUKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiR7RklMRV9ESVJOQU1FfS9nbGliYzoiCisKK0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCitHTElCQ19HSVRfVVJJID89ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2xpYmMuZ2l0IgorCitTUkNfVVJJID0gIiR7R0xJQkNfR0lUX1VSSX07YnJhbmNoPSR7QlJBTkNIfTtuYW1lPWdsaWJjIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9rcmFqL2xvY2FsZWRlZjticmFuY2g9bWFzdGVyO25hbWU9bG9jYWxlZGVmO2Rlc3RzdWZmaXg9Z2l0L2xvY2FsZWRlZiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX2NlbnRvc181LjgucGF0Y2ggXAorICAgICAgICAgICAke0VHTElCQ1BBVENIRVN9IFwKKyIKK0VHTElCQ1BBVENIRVMgPSAiXAorICAgICAgICAgICBmaWxlOi8vMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2ggXAorIgorCitTUkNSRVZfZ2xpYmMgPz0gImEzNGQxYzZhZmM4NjUyMWQ2YWQxNzY2MmEzYjUzNjJkODQ4MTUxNGMiCitTUkNSRVZfbG9jYWxlZGVmID89ICJjODMzMzY3MzQ4ZDM5ZGFkN2JhMDE4OTkwYmZkYWZmYWVjOGU5ZWQzIgorCisjIE1ha2VzIGZvciBhIHJhdGhlciBsb25nIHJldiAoMjIgY2hhcmFjdGVycyksIGJ1dC4uLgorIworU1JDUkVWX0ZPUk1BVCA9ICJnbGliY19sb2NhbGVkZWYiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZ2xpYmM9JHtTfSIKK0NGTEFHUyArPSAiLWZnbnU4OS1pbmxpbmUgLXN0ZD1nbnU5OSAtRElTX0lOXCh4XCk9JzAnIgorCitkb19jb25maWd1cmUgKCkgeworCSR7U30vbG9jYWxlZGVmL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KK30KKworCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2xvY2FsZWRlZiAke0R9JHtiaW5kaXJ9L2Nyb3NzLWxvY2FsZWRlZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29sbGF0ZXJhbC5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDY1NWViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29sbGF0ZXJhbC5pbmMKQEAgLTAsMCArMSwyMiBAQAorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPz0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYgXAorICAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9MR1BMLTIuMTttZDU9MWE2ZDI2OGZkMjE4Njc1ZmZlYThiZTU1Njc4OGI3ODAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliYy9pbmRleC5odG1sIgorCisjIFRoaXMgbmVlZHMgdG8gbWF0Y2ggd2l0aCBnbGliYy5pbmMsIG90aGVyd2lzZSBnbGliYy1zY3JpcHRzIGFuZCBnbGliYy1sb2NhbGUKKyMgd2lsbCBmYWlsIHRvIGZpbmQgbWFpbiBnbGliYywgZm9yIGRldGFpbHMgc2VlCisjIGh0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDE1LUphbnVhcnkvMTAwNjc5Lmh0bWwKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wb3B1bGF0ZV9zeXNyb290IgorCitDT01QQVRJQkxFX0hPU1RfbGliYy1tdXNsX2NsYXNzLXRhcmdldCA9ICJudWxsIgorQ09NUEFUSUJMRV9IT1NUX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICJudWxsIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmExNTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29tbW9uLmluYwpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiR0xJQkMgKEdOVSBDIExpYnJhcnkpIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBDIExpYnJhcnkgaXMgdXNlZCBhcyB0aGUgc3lzdGVtIEMgbGlicmFyeSBpbiBtb3N0IHN5c3RlbXMgd2l0aCB0aGUgTGludXgga2VybmVsLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2xpYmMuaHRtbCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPz0gImZpbGU6Ly9MSUNFTlNFUzttZDU9MDdhMzk0YjI2ZTA5MDJiOWZmZGVjMDM3NjUyMDk3NzAgXAorICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIFwKKyAgICAgIGZpbGU6Ly9wb3NpeC9yeHNwZW5jZXIvQ09QWVJJR0hUO21kNT1kYzU0ODViYjM5NGExM2IyMzMyZWMxYzc4NWY1ZDgzYSBcCisgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWwuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwMDg0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsNzYgQEAKK0RFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIGxpYmdjYy1pbml0aWFsIgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIgorCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKwlmaW5kICR7U30gLW5hbWUgImNvbmZpZ3VyZSIgfCB4YXJncyB0b3VjaAorCSR7U30vY29uZmlndXJlIC0taG9zdD0ke1RBUkdFVF9TWVN9IC0tYnVpbGQ9JHtCVUlMRF9TWVN9IFwKKwkJLS1wcmVmaXg9L3VzciBcCisJCS0td2l0aG91dC1jdnMgLS1kaXNhYmxlLXNhbml0eS1jaGVja3MgXAorCQktLXdpdGgtaGVhZGVycz0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9IFwKKwkJLS13aXRoLWtjb25maWc9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFwKKwkJLS1lbmFibGUtaGFja2VyLW1vZGUgLS1lbmFibGUtYWRkb25zCit9CisKK2RvX2NvbXBpbGUgKCkgeworCToKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBjcm9zcy1jb21waWxpbmc9eWVzIGluc3RhbGxfcm9vdD0ke0R9IFwKKwlpbmNsdWRlZGlyPScke2luY2x1ZGVkaXJ9JyBwcmVmaXg9JyR7cHJlZml4fScgXAorCWluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzIGluc3RhbGwtaGVhZGVycworCisJb2VfcnVubWFrZSBjc3Uvc3ViZGlyX2xpYgorCW1rZGlyIC1wICR7RH0ke2xpYmRpcn0vCisJaW5zdGFsbCAtbSA2NDQgY3N1L2NydFsxaW5dLm8gJHtEfSR7bGliZGlyfQorCisJIyBUd28gaGVhZGVycyAtLSBzdHVicy5oIGFuZCBmZWF0dXJlcy5oIC0tIGFyZW4ndCBpbnN0YWxsZWQgYnkgaW5zdGFsbC1oZWFkZXJzLAorCSMgc28gZG8gdGhlbSBieSBoYW5kLiAgV2UgY2FuIHRvbGVyYXRlIGFuIGVtcHR5IHN0dWJzLmggZm9yIHRoZSBtb21lbnQuCisJIyBTZWUgZS5nLiBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDItMDEvbXNnMDA5MDAuaHRtbAorCW1rZGlyIC1wICR7RH0ke2luY2x1ZGVkaXJ9L2dudS8KKwl0b3VjaCAke0R9JHtpbmNsdWRlZGlyfS9nbnUvc3R1YnMuaAorCWNwICR7U30vaW5jbHVkZS9mZWF0dXJlcy5oICR7RH0ke2luY2x1ZGVkaXJ9L2ZlYXR1cmVzLmgKKworCWlmIFsgLWUgJHtCfS9iaXRzL3N0ZGlvX2xpbS5oIF07IHRoZW4KKwkJY3AgJHtCfS9iaXRzL3N0ZGlvX2xpbS5oICAke0R9JHtpbmNsdWRlZGlyfS9iaXRzLworCWZpCisJIyBhZGQgbGlua3MgdG8gbGludXgtbGliYy1oZWFkZXJzOiBmaW5hbCBnbGliYyBidWlsZCBuZWVkIHRoaXMuCisJZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworCQlsbiAtcyAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9LyR0ICR7RH0ke2luY2x1ZGVkaXJ9LworCWRvbmUKK30KKworZG9faW5zdGFsbF9sb2NhbGUoKSB7CisJOgorfQorCitkb19zaXRlY29uZmlnICgpIHsKKwk6Cit9CisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImdsaWJjaW5pdGlhbF9zc3RhdGVfcG9zdGluc3QiCitnbGliY2luaXRpYWxfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgUmVjcmVhdGUgdGhlIHN5bWxpbmtzIHRvIGVuc3VyZSB0aGV5IHBvaW50IHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uCisJCWZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KKwkJCXJtIC1mICR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9JHtpbmNsdWRlZGlyfS8kdAorCQkJbG4gLXMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfS8kdCAke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSR7aW5jbHVkZWRpcn0vCisJCWRvbmUKKwlmaQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8iCisKKyMgV2UgZG9uJ3QgaW5zdGFsbCBhbnkgc2NyaXB0cyBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGV2YWN1YXRlCitkb19ldmFjdWF0ZV9zY3JpcHRzICgpIHsKKwk6Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMDFkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWxfMi4yMi5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGdsaWJjXyR7UFZ9LmJiCityZXF1aXJlIGdsaWJjLWluaXRpYWwuaW5jCisKK0RFUEVORFMgKz0gImtjb25maWctZnJvbnRlbmRzLW5hdGl2ZSIKKworIyBtYWluIGdsaWJjIHJlY2lwZXMgbXVjayB3aXRoIFRBUkdFVF9DUFBGTEFHUyB0byBwb2ludCBpbnRvCisjIGZpbmFsIHRhcmdldCBzeXNyb290IGJ1dCB3ZQorIyBhcmUgbm90IHRoZXJlIHdoZW4gYnVpbGRpbmcgZ2xpYmMtaW5pdGlhbAorIyBzbyByZXNldCBpdCBoZXJlCisKK1RBUkdFVF9DUFBGTEFHUyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sZC5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyZDY2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxkLmluYwpAQCAtMCwwICsxLDU2IEBACitkZWYgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGQsIGluZm9zLCBkaWN0KToKKyAgICB0dW5lID0gZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkgb3IgIiIKKyAgICBsaWJkaXIgPSBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSBvciAiIgorICAgIGlmIHR1bmUgaW4gZGljdDoKKyAgICAgICAgaW5mb3NbJ2xkY29uZmlnJ10uYWRkKCd7IicgKyBsaWJkaXIgKyAnLycgKyBkaWN0W3R1bmVdWzBdICsgJyIsJyArIGRpY3RbdHVuZV1bMV0gKyAnIH0nKQorICAgICAgICBpbmZvc1snbGRkcmV3cml0ZSddLmFkZChsaWJkaXIrJy8nK2RpY3RbdHVuZV1bMF0pCisKK2RlZiBnbGliY19kbF9pbmZvKGQpOgorICAgIGxkX2luZm9fYWxsID0geworICAgICAgICAibWlwcyI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0LW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0IjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzZWwiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsLW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHMtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NC1uZi1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NC1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwtbmYtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbC1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYyI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYy1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYzY0IjogWyJsZDY0LnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGM2NC1uZiI6IFsibGQ2NC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlMi0zMiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZTItNjQiOiBbImxkLWxpbnV4LXg4Ni02NC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJ4ODYiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIng4Ni02NCI6IFsibGQtbGludXgteDg2LTY0LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImk1ODYiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmVpNy0zMiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZWk3LTY0IjogWyJsZC1saW51eC14ODYtNjQuc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgIH0KKworICAgIGluZm9zID0geydsZGNvbmZpZyc6c2V0KCksICdsZGRyZXdyaXRlJzpzZXQoKX0KKyAgICBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMoZCwgaW5mb3MsIGxkX2luZm9fYWxsKQorCisgICAgI0RFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMCisgICAgb3JpZ2luYWxfdHVuZT1kLmdldFZhcigiREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwiLFRydWUpCisgICAgaWYgb3JpZ2luYWxfdHVuZToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgb3JpZ2luYWxfdHVuZSkKKyAgICAgICAgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGxvY2FsZGF0YSwgaW5mb3MsIGxkX2luZm9fYWxsKQorCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMobG9jYWxkYXRhLCBpbmZvcywgbGRfaW5mb19hbGwpCisgICAgaW5mb3NbJ2xkY29uZmlnJ10gPSAnLCcuam9pbihpbmZvc1snbGRjb25maWcnXSkKKyAgICBpbmZvc1snbGRkcmV3cml0ZSddID0gJyAnLmpvaW4oaW5mb3NbJ2xkZHJld3JpdGUnXSkKKyAgICByZXR1cm4gaW5mb3MKKworRUdMSUJDX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTID0gIiR7QGdsaWJjX2RsX2luZm8oZClbJ2xkY29uZmlnJ119IgorUlRMRExJU1QgPSAiJHtAZ2xpYmNfZGxfaW5mbyhkKVsnbGRkcmV3cml0ZSddfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZS5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNmQwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jCkBAIC0wLDAgKzEsOTYgQEAKK2luY2x1ZGUgZ2xpYmMtY29sbGF0ZXJhbC5pbmMKKworU1VNTUFSWSA9ICJMb2NhbGUgZGF0YSBmcm9tIGdsaWJjIgorCitCUE4gPSAiZ2xpYmMiCitMT0NBTEVCQVNFUE4gPSAiJHtNTFBSRUZJWH1nbGliYyIKKworIyBnbGliYy1jb2xsYXRlcmFsLmluYyBpbmhpYml0cyBhbGwgZGVmYXVsdCBkZXBzLCBidXQgZG9fcGFja2FnZSBuZWVkcyBvYmpjb3B5CisjIEVSUk9SOiBvYmpjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxMjcgKGNtZCB3YXMgJ2k1ODYtd2Vib3MtbGludXgtb2JqY29weScgLS1vbmx5LWtlZXAtZGVidWcgJ2dsaWJjLWxvY2FsZS8yLjE3LXIwL3BhY2thZ2UvdXNyL2xpYi9nY29udi9JQk0xMTY2LnNvJyAnZ2xpYmMtbG9jYWxlLzIuMTctcjAvcGFja2FnZS91c3IvbGliL2djb252Ly5kZWJ1Zy9JQk0xMTY2LnNvJykKKyMgRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogc3BsaXRfYW5kX3N0cmlwX2ZpbGVzCitCSU5VVElMU0RFUCA9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitCSU5VVElMU0RFUF9jbGFzcy1uYXRpdmVzZGsgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGs6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3BhY2thZ2VbZGVwZW5kc10gKz0gIiR7QklOVVRJTFNERVB9IgorCisjIEJpbmFyeSBsb2NhbGVzIGFyZSBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBpZiBFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OCisjIGlzIHNldC4gVGhlIGlkZWEgaXMgdG8gYXZvaWQgcnVubmluZyBsb2NhbGVkZWYgb24gdGhlIHRhcmdldCAoYXQgZmlyc3QgYm9vdCkKKyMgdG8gZGVjcmVhc2UgaW5pdGlhbCBib290IHRpbWUgYW5kIGF2b2lkIGxvY2FsZWRlZiBiZWluZyBraWxsZWQgYnkgdGhlIE9PTQorIyBraWxsZXIgd2hpY2ggdXNlZCB0byBlZmZlY3RpdmVseSBicmVhayBpMThuIG9uIG1hY2hpbmVzIHdpdGggPCAxMjhNQiBSQU0uCisKKyMgZGVmYXVsdCB0byBkaXNhYmxlZCAKK0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gPz0gIjAiCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OX3BuLW5hdGl2ZXNkay1nbGliYy1sb2NhbGUgPSAiMCIKKworI2VuYWJsZSBsb2NhbGUgZ2VuZXJhdGlvbiBvbiB0aGVzZSBhcmNoZXMKKyMgQklOQVJZX0xPQ0FMRV9BUkNIRVMgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zCitCSU5BUllfTE9DQUxFX0FSQ0hFUyA/PSAiYXJtLiogYWFyY2g2NCBpWzMtNl04NiB4ODZfNjQgcG93ZXJwYyBtaXBzIG1pcHM2NCIKKworIyBzZXQgIjEiIHRvIHVzZSBjcm9zcy1sb2NhbGVkZWYgZm9yIGxvY2FsZSBnZW5lcmF0aW9uCisjIHNldCAiMCIgZm9yIHFlbXUgZW11bGF0aW9uIG9mIG5hdGl2ZSBsb2NhbGVkZWYgZm9yIGxvY2FsZSBnZW5lcmF0aW9uCitMT0NBTEVfR0VORVJBVElPTl9XSVRIX0NST1NTLUxPQ0FMRURFRiA9ICIxIgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmMtbG9jYWxlIgorCitQQUNLQUdFUyA9ICJsb2NhbGVkZWYgJHtQTn0tZGJnIgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5sb2NhbGUtYmFzZS0uKiBcCisgICAgICAgICAgICAgICAgICAgIF5nbGliYy1nY29udi0uKiBeZ2xpYmMtY2hhcm1hcC0uKiBeZ2xpYmMtbG9jYWxlZGF0YS0uKiBeZ2xpYmMtYmluYXJ5LWxvY2FsZWRhdGEtLiogXAorICAgICAgICAgICAgICAgICAgICBeZ2xpYmMtZ2NvbnYtLiogIF5nbGliYy1jaGFybWFwLS4qICBeZ2xpYmMtbG9jYWxlZGF0YS0uKiAgXmdsaWJjLWJpbmFyeS1sb2NhbGVkYXRhLS4qIFwKKyAgICAgICAgICAgICAgICAgICAgXiR7TUxQUkVGSVh9Z2xpYmMtZ2NvbnYkIgorCisjIENyZWF0ZSBhIGdsaWJjLWJpbmFyaWVzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1iaW5hcmllcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1iaW5hcmllcyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1iaW5hcmllcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWJpbmFyeSIpICE9IC0xXSl9IgorCisjIENyZWF0ZSBhIGdsaWJjLWNoYXJtYXBzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1jaGFybWFwcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1jaGFybWFwcyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1jaGFybWFwcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWNoYXJtYXAiKSAhPSAtMV0pfSIKKworIyBDcmVhdGUgYSBnbGliYy1nY29udnMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWdjb252cyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1nY29udnMiCitSUkVDT01NRU5EU18ke0JQTn0tZ2NvbnZzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtZ2NvbnYiKSAhPSAtMV0pfSIKKworIyBDcmVhdGUgYSBnbGliYy1sb2NhbGVkYXRhcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tbG9jYWxlZGF0YXMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tbG9jYWxlZGF0YXMiCitSUkVDT01NRU5EU18ke0JQTn0tbG9jYWxlZGF0YXMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1sb2NhbGVkYXRhIikgIT0gLTFdKX0iCisKK0RFU0NSSVBUSU9OX2xvY2FsZWRlZiA9ICJnbGliYzogY29tcGlsZSBsb2NhbGUgZGVmaW5pdGlvbiBmaWxlcyIKKworIyBnbGliYy1nY29udiBpcyBkeW5hbWljYWxseSBhZGRlZCBpbnRvIFBBQ0tBR0VTLCB0aHVzCisjIEZJTEVTX2dsaWJjLWdjb252IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgaW4gbXVsdGlsaWIuCisjIEV4cGxpY2l0bHkgYWRkICR7TUxQUkVGSVh9IGZvciBGSUxFU19nbGliYy1nY29udi4KK0ZJTEVTXyR7TUxQUkVGSVh9Z2xpYmMtZ2NvbnYgPSAiJHtsaWJkaXJ9L2djb252LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nY29udi8uZGVidWcvKiIKK0ZJTEVTX2xvY2FsZWRlZiA9ICIke2JpbmRpcn0vbG9jYWxlZGVmIgorCitMT0NBTEVUUkVFU1JDID0gIiR7U1RBR0lOR19JTkNESVJ9L2dsaWJjLWxvY2FsZS1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworZG9faW5zdGFsbCAoKSB7CisJbWtkaXIgLXAgJHtEfSR7YmluZGlyfSAke0R9JHtkYXRhZGlyfSAke0R9JHtsaWJkaXJ9CisJaWYgWyAtbiAiJChscyAke0xPQ0FMRVRSRUVTUkN9LyR7YmluZGlyfSkiIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2JpbmRpcn0vKiAke0R9JHtiaW5kaXJ9CisJZmkKKwlpZiBbIC1uICIkKGxzICR7TE9DQUxFVFJFRVNSQ30vJHtsb2NhbGVkaXJ9KSIgXTsgdGhlbgorCQlta2RpciAtcCAke0R9JHtsb2NhbGVkaXJ9CisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtsb2NhbGVkaXJ9LyogJHtEfSR7bG9jYWxlZGlyfQorCWZpCisJaWYgWyAtZSAke0xPQ0FMRVRSRUVTUkN9LyR7bGliZGlyfS9nY29udiBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtsaWJkaXJ9L2djb252ICR7RH0ke2xpYmRpcn0KKwlmaQorCWlmIFsgLWUgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2kxOG4gXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vaTE4biAke0R9JHtkYXRhZGlyfQorCWZpCisJaWYgWyAtZSAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vbG9jYWxlIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2xvY2FsZSAke0R9JHtkYXRhZGlyfQorCWZpCisJY2hvd24gcm9vdC5yb290IC1SICR7RH0KKwljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9L1NVUFBPUlRFRCAke1dPUktESVJ9Cit9CisKK2luaGVyaXQgbGliYy1wYWNrYWdlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzcwMmUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjIuYmIKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBnbGliYy1sb2NhbGUuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2UuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTJiMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlLmluYwpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlIGdsaWJjLWNvbGxhdGVyYWwuaW5jCisKK1NVTU1BUlkgPSAibXRyYWNlIHV0aWxpdHkgcHJvdmlkZWQgYnkgZ2xpYmMiCitERVNDUklQVElPTiA9ICJtdHJhY2UgdXRpbGl0eSBwcm92aWRlZCBieSBnbGliYyIKK1JERVBFTkRTXyR7UE59ID0gInBlcmwiCitSUFJPVklERVNfJHtQTn0gPSAibGliYy1tdHJhY2UiCisKK1NSQyA9ICIke1NUQUdJTkdfSU5DRElSfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U1JDfS9tdHJhY2UgJHtEfSR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2OWJhZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjIyLmJiCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgZ2xpYmMtbXRyYWNlLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtb3B0aW9ucy5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1vcHRpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmQyN2YzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtb3B0aW9ucy5pbmMKQEAgLTAsMCArMSwxNjIgQEAKK2RlZiBnbGliY19jZmcoZmVhdHVyZSwgdG9rZW5zLCBjbmYpOgorICAgIGlmIHR5cGUodG9rZW5zKSA9PSB0eXBlKCIiKToKKyAgICAgICAgdG9rZW5zID0gW3Rva2Vuc10KKyAgICBpZiBmZWF0dXJlOgorICAgICAgICBjbmYuZXh0ZW5kKFt0b2tlbiArICc9eScgZm9yIHRva2VuIGluIHRva2Vuc10pCisgICAgZWxzZToKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIGNuZi5leHRlbmQoW3Rva2VuICsgJz1uJ10pCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAnT1BUSU9OX0VHTElCQ19OU1NXSVRDSCc6CisgICAgICAgICAgICAgICAgY25mLmV4dGVuZChbIk9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHPVwiJHtTfS9uc3MvbnNzd2l0Y2guY29uZlwiIl0pCisgICAgICAgICAgICAgICAgY25mLmV4dGVuZChbIk9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TPVwiJHtTfS9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zXCIiXSkKKworIyBNYXAgZGlzdHJvIGZlYXR1cmVzIHRvIGdsaWJjIG9wdGlvbnMgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b19nbGliY19zZXR0aW5ncyhkKToKKyAgICBjbmYgPSAoW10pCisKKyAgICBpcHY0ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgaXB2NiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfYmFja3RyYWNlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWJhY2t0cmFjZScsIFRydWUsIEZhbHNlLCBkKSAKKyAgICBsaWJjX2JpZ19tYWNyb3MgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtYmlnLW1hY3JvcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfYnNkID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWJzZCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY3h4X3Rlc3RzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWN4eC10ZXN0cycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY2F0Z2V0cyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jYXRnZXRzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jaGFyc2V0cyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jaGFyc2V0cycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY3J5cHQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY3J5cHQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NyeXB0X3VmYyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jcnlwdC11ZmMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2RiX2FsaWFzZXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZGItYWxpYXNlcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZW52eiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1lbnZ6JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mY3Z0ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZjdnQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2ZtdG1zZyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mbXRtc2cnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2ZzdGFiID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZzdGFiJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mdHJhdmVyc2UgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZnRyYXZlcnNlJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19nZXRsb2dpbiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1nZXRsb2dpbicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfaWRuID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWlkbicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfaW5ldF9hbmwgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaW5ldC1hbmwnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2xpYm0gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbGlibScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbG9jYWxlcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGVzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19sb2NhbGVfY29kZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGUtY29kZScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbWVtdXNhZ2UgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbWVtdXNhZ2UnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX25pcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1uaXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX25zc3dpdGNoID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLW5zc3dpdGNoJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19yY21kID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXJjbWQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3J0bGRfZGVidWcgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcnRsZC1kZWJ1ZycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfc3Bhd24gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtc3Bhd24nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3N0cmVhbXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtc3RyZWFtcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfc3VucnBjID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXN1bnJwYycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfdXRtcCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy11dG1wJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY191dG1weCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy11dG1weCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfd29yZGV4cCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy13b3JkZXhwJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF9jbGFuZ193Y2hhciA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1jbGFuZy13Y2hhcicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfcmVnZXhwID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LXJlZ2V4cCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfcmVnZXhwX2dsaWJjID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfd2NoYXJfaW8gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtd2NoYXItaW8nLCBUcnVlLCBGYWxzZSwgZCkKKworICAgICMgYXJyYW5nZSB0aGUgZGVwZW5kZW5jaWVzIGFtb25nIGdsaWJjIGNvbmZpZ3VhYmxlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIGZpbGUgb3B0aW9uLWdyb3Vwcy5kZWYgZnJvbSBnbGliYyBzb3VyY2UgY29kZQorICAgIG5ld19kZXAgPSBUcnVlCisgICAgd2hpbGUgbmV3X2RlcDoKKyAgICAgICAgbmV3X2RlcCA9IEZhbHNlCisKKyAgICAgICAgaWYgaXB2NiBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBpcHY0IGFuZCBub3QgbGliY19uc3N3aXRjaDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX25zc3dpdGNoID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfY3h4X3Rlc3RzOgorICAgICAgICAgICAgaWYgbm90IGxpYmNfcG9zaXhfd2NoYXJfaW86CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBsaWJjX3Bvc2l4X3djaGFyX2lvID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGxpYmNfbGlibToKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxpYmNfbGlibSA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2NhdGdldHMgYW5kIG5vdCBsaWJjX2xvY2FsZV9jb2RlOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfbG9jYWxlX2NvZGUgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19jcnlwdF91ZmMgYW5kIG5vdCBsaWJjX2NyeXB0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfY3J5cHQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19nZXRsb2dpbiBhbmQgbm90IGxpYmNfdXRtcDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3V0bXAgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19pbmV0X2FubCBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2xvY2FsZV9jb2RlIGFuZCBub3QgbGliY19wb3NpeF9jbGFuZ193Y2hhcjoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfbmlzOgorICAgICAgICAgICAgaWYgbm90IGlwdjQ6CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGxpYmNfc3VucnBjOgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgbGliY19zdW5ycGMgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19yY21kIGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfc3VucnBjIGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfdXRtcHggYW5kIG5vdCBsaWJjX3V0bXA6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY191dG1wID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfcG9zaXhfcmVnZXhwX2dsaWJjIGFuZCBub3QgbGliY19wb3NpeF9yZWdleHA6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19wb3NpeF9yZWdleHAgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19wb3NpeF93Y2hhcl9pbyBhbmQgbm90IGxpYmNfcG9zaXhfY2xhbmdfd2NoYXI6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19wb3NpeF9jbGFuZ193Y2hhciA9IFRydWUKKworICAgIGdsaWJjX2NmZyhpcHY2LCAnT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19iYWNrdHJhY2UsICdPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19iaWdfbWFjcm9zLCAnT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2JzZCwgJ09QVElPTl9FR0xJQkNfQlNEJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2N4eF90ZXN0cywgJ09QVElPTl9FR0xJQkNfQ1hYX1RFU1RTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NhdGdldHMsICdPUFRJT05fRUdMSUJDX0NBVEdFVFMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY2hhcnNldHMsICdPUFRJT05fRUdMSUJDX0NIQVJTRVRTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NyeXB0LCAnT1BUSU9OX0VHTElCQ19DUllQVCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jcnlwdF91ZmMsICdPUFRJT05fRUdMSUJDX0NSWVBUX1VGQycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19kYl9hbGlhc2VzLCAnT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2VudnosICdPUFRJT05fRUdMSUJDX0VOVlonLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZmN2dCwgJ09QVElPTl9FR0xJQkNfRkNWVCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mbXRtc2csICdPUFRJT05fRUdMSUJDX0ZNVE1TRycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mc3RhYiwgJ09QVElPTl9FR0xJQkNfRlNUQUInLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZnRyYXZlcnNlLCAnT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZ2V0bG9naW4sICdPUFRJT05fRUdMSUJDX0dFVExPR0lOJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2lkbiwgJ09QVElPTl9FR0xJQkNfSUROJywgY25mKQorICAgIGdsaWJjX2NmZyhpcHY0LCAnT1BUSU9OX0VHTElCQ19JTkVUJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2luZXRfYW5sLCAnT1BUSU9OX0VHTElCQ19JTkVUX0FOTCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19saWJtLCAnT1BUSU9OX0VHTElCQ19MSUJNJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2xvY2FsZXMsICdPUFRJT05fRUdMSUJDX0xPQ0FMRVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbG9jYWxlX2NvZGUsICdPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX21lbXVzYWdlLCAnT1BUSU9OX0VHTElCQ19NRU1VU0FHRScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19uaXMsICdPUFRJT05fRUdMSUJDX05JUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19uc3N3aXRjaCwgJ09QVElPTl9FR0xJQkNfTlNTV0lUQ0gnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcmNtZCwgJ09QVElPTl9FR0xJQkNfUkNNRCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19ydGxkX2RlYnVnLCAnT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3NwYXduLCAnT1BUSU9OX0VHTElCQ19TUEFXTicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19zdHJlYW1zLCAnT1BUSU9OX0VHTElCQ19TVFJFQU1TJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3N1bnJwYywgJ09QVElPTl9FR0xJQkNfU1VOUlBDJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3V0bXAsICdPUFRJT05fRUdMSUJDX1VUTVAnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfdXRtcHgsICdPUFRJT05fRUdMSUJDX1VUTVBYJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3dvcmRleHAsICdPUFRJT05fRUdMSUJDX1dPUkRFWFAnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIsICdPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF9yZWdleHAsICdPUFRJT05fUE9TSVhfUkVHRVhQJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X3JlZ2V4cF9nbGliYywgJ09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfd2NoYXJfaW8sICdPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTycsIGNuZikKKworICAgIHJldHVybiAiXG4iLmpvaW4oY25mKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtcGFja2FnZS5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjYwMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtcGFja2FnZS5pbmMKQEAgLTAsMCArMSwyMTQgQEAKKyMKKyMgRm9yIG5vdywgd2Ugd2lsbCBza2lwIGJ1aWxkaW5nIG9mIGEgZ2NjIHBhY2thZ2UgaWYgaXQgaXMgYSB1Y2xpYmMgb25lCisjIGFuZCBvdXIgYnVpbGQgaXMgbm90IGEgdWNsaWJjIG9uZSwgYW5kIHdlIHNraXAgYSBnbGliYyBvbmUgaWYgb3VyIGJ1aWxkCisjIGlzIGEgdWNsaWJjIGJ1aWxkLgorIworIyBTZWUgdGhlIG5vdGUgaW4gZ2NjL2djY18zLjQuMC5vZQorIworCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCBiYiwgcmUKKyAgICB1Y19vcyA9IChyZS5tYXRjaCgnLip1Y2xpYmMqJywgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKSAhPSBOb25lKQorICAgIGlmIHVjX29zOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggdGFyZ2V0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSkKK30KKworIyBTZXQgdGhpcyB0byB6ZXJvIGlmIHlvdSBkb24ndCB3YW50IGxkY29uZmlnIGluIHRoZSBvdXRwdXQgcGFja2FnZQorVVNFX0xEQ09ORklHID89ICIxIgorCitJTkhJQklUX1NZU1JPT1RfU1RSSVAgPSAiMSIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnIGNhdGNoc2VndiBzbG4gbnNjZCBsZGQgdHpjb2RlICR7UE59LXV0aWxzIGdsaWJjLXRocmVhZC1kYiAke1BOfS1waWMgbGliY2lkbiBsaWJtZW11c2FnZSBsaWJzZWdmYXVsdCAke1BOfS1wY3Byb2ZpbGUgbGlic290cnVzcyAke1BOfSBnbGliYy1leHRyYS1uc3MgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1kb2MiCisKKyMgVGhlIGxkLnNvIGluIHRoaXMgZ2xpYmMgc3VwcG9ydHMgdGhlIEdOVV9IQVNICitSUFJPVklERVNfJHtQTn0gPSAiZWdsaWJjIHJ0bGQoR05VX0hBU0gpIgorUlBST1ZJREVTXyR7UE59LXV0aWxzID0gImVnbGliYy11dGlscyIKK1JQUk9WSURFU18ke1BOfS1tdHJhY2UgPSAiZWdsaWJjLW10cmFjZSBsaWJjLW10cmFjZSIKK1JQUk9WSURFU18ke1BOfS1waWMgPSAiZWdsaWJjLXBpYyIKK1JQUk9WSURFU18ke1BOfS1kZXYgPSAiZWdsaWJjLWRldiBsaWJjNi1kZXYgdmlydHVhbC1saWJjLWRldiIKK1JQUk9WSURFU18ke1BOfS1zdGF0aWNkZXYgPSAiZWdsaWJjLXN0YXRpY2RldiIKK1JQUk9WSURFU18ke1BOfS1kb2MgPSAiZWdsaWJjLWRvYyIKK1JQUk9WSURFU19nbGliYy1leHRyYS1uc3MgPSAiZWdsaWJjLWV4dHJhLW5zcyIKK1JQUk9WSURFU19nbGliYy10aHJlYWQtZGIgPSAiZWdsaWJjLXRocmVhZC1kYiIKK1JQUk9WSURFU18ke1BOfS1wY3Byb2ZpbGUgPSAiZWdsaWJjLXBjcHJvZmlsZSIKK1JQUk9WSURFU18ke1BOfS1kYmcgPSAiZWdsaWJjLWRiZyIKK2xpYmNfYmFzZWxpYnMgPSAiJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJjLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliYy0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm0qLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibS0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm12ZWMtKi5zbyAke2Jhc2VfbGliZGlyfS9sZCouc28uKiAke2Jhc2VfbGliZGlyfS9sZC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdiouc28uKiAke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJydCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJydC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnV0aWwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidXRpbC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc2wtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfZmlsZXMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNzX2ZpbGVzLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzX2NvbXBhdCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc3NfY29tcGF0LSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzX2Rucyouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc3NfZG5zLSouc28gJHtiYXNlX2xpYmRpcn0vbGliZGwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliZGwtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJhbmwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliYW5sLSouc28gJHtiYXNlX2xpYmRpcn0vbGliQnJva2VuTG9jYWxlKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYkJyb2tlbkxvY2FsZS0qLnNvIgorbGliY19iYXNlbGlic19hcHBlbmRfYWFyY2g2NCA9ICIgL2xpYi9sZC1saW51eC1hYXJjaDY0Ki5zby4xIgorSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX2FhcmNoNjQgPSAiIGxpYmRpciIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJjX2Jhc2VsaWJzfSAke2xpYmV4ZWNkaXJ9LyogJHtAYmFzZV9jb25kaXRpb25hbCgnVVNFX0xEQ09ORklHJywgJzEnLCAnJHtiYXNlX3NiaW5kaXJ9L2xkY29uZmlnICR7c3lzY29uZmRpcn0vbGQuc28uY29uZicsICcnLCBkKX0iCitGSUxFU19sZGQgPSAiJHtiaW5kaXJ9L2xkZCIKK0ZJTEVTX2xpYnNlZ2ZhdWx0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYlNlZ0ZhdWx0KiIKK0ZJTEVTX2xpYmNpZG4gPSAiJHtiYXNlX2xpYmRpcn0vbGliY2lkbi0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmNpZG4uc28uKiIKK0ZJTEVTX2xpYm1lbXVzYWdlID0gIiR7YmFzZV9saWJkaXJ9L2xpYm1lbXVzYWdlLnNvIgorRklMRVNfZ2xpYmMtZXh0cmEtbnNzID0gIiR7YmFzZV9saWJkaXJ9L2xpYm5zc18qLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzXyouc28uKiIKK0ZJTEVTX3NsbiA9ICIke2Jhc2Vfc2JpbmRpcn0vc2xuIgorRklMRVNfJHtQTn0tcGljID0gIiR7bGliZGlyfS8qX3BpYy5hICR7bGliZGlyfS8qX3BpYy5tYXAgJHtsaWJkaXJ9L2xpYmNfcGljLyoubyIKK0ZJTEVTX2xpYnNvdHJ1c3MgPSAiJHtsaWJkaXJ9L2F1ZGl0L3NvdHJ1c3MtbGliLnNvIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vcnBjZ2VuICR7bGliZGlyfS8qX25vbnNoYXJlZC5hICR7YmFzZV9saWJkaXJ9Lypfbm9uc2hhcmVkLmEgJHtiYXNlX2xpYmRpcn0vKi5vICR7ZGF0YWRpcn0vYWNsb2NhbCIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLmEiCitGSUxFU19uc2NkID0gIiR7c2JpbmRpcn0vbnNjZCogJHtzeXNjb25mZGlyfS9pbml0LmQvbnNjZCAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL25zY2QqICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9uc2NkLmNvbmYgXAorICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L25zY2QuY29uZiAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk4X25zY2QgJHtsb2NhbHN0YXRlZGlyfS9kYi9uc2NkIgorRklMRVNfJHtQTn0tbXRyYWNlID0gIiR7YmluZGlyfS9tdHJhY2UiCitGSUxFU190emNvZGUgPSAiJHtiaW5kaXJ9L3R6c2VsZWN0ICR7c2JpbmRpcn0vemljICR7c2JpbmRpcn0vemR1bXAiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vKi8uZGVidWcgJHtsaWJkaXJ9L2F1ZGl0Ly5kZWJ1ZyIKK0ZJTEVTX2NhdGNoc2VndiA9ICIke2JpbmRpcn0vY2F0Y2hzZWd2IgorUkRFUEVORFNfY2F0Y2hzZWd2ID0gImxpYnNlZ2ZhdWx0IgorRklMRVNfJHtQTn0tcGNwcm9maWxlID0gIiR7YmFzZV9saWJkaXJ9L2xpYnBjcHJvZmlsZS5zbyIKK0ZJTEVTX2dsaWJjLXRocmVhZC1kYiA9ICIke2Jhc2VfbGliZGlyfS9saWJ0aHJlYWRfZGIuc28uKiAke2Jhc2VfbGliZGlyfS9saWJ0aHJlYWRfZGItKi5zbyIKK1JQUk9WSURFU18ke1BOfS1kZXYgKz0gImxpYmMtZGV2IgorUlBST1ZJREVTXyR7UE59LXN0YXRpY2RldiArPSAibGliYy1zdGF0aWNkZXYiCisKK1NVTU1BUllfc2xuID0gIlRoZSBzdGF0aWMgbG4iCitERVNDUklQVElPTl9zbG4gPSAiU2ltaWxhciB0byB0aGUgJ2xuJyB1dGlsaXR5LCBidXQgc3RhdGljYWxseSBsaW5rZWQuICBzbG4gaXMgdXNlZnVsIHRvIG1ha2Ugc3ltYm9saWMgbGlua3MgdG8gZHluYW1pYyBsaWJyYXJpZXMgaWYgdGhlIGR5bmFtaWMgbGlua2luZyBzeXN0ZW0sIGZvciBzb21lIHJlYXNvbiwgaXMgbm90IGZ1bmN0aW9uYWwuIgorU1VNTUFSWV9uc2NkID0gIk5hbWUgc2VydmljZSBjYWNoZSBkYWVtb24iCitERVNDUklQVElPTl9uc2NkID0gIm5zY2QsIG5hbWUgc2VydmljZSBjYWNoZSBkYWVtb24sIGNhY2hlcyBuYW1lIHNlcnZpY2UgbG9va3VwcyBmb3IgdGhlIHBhc3N3ZCwgZ3JvdXAgYW5kIGhvc3RzIGluZm9ybWF0aW9uLiAgSXQgY2FuIGRhbWF0aWNhbGx5IGltcHJvdmlkZSBwZXJmb3JtYW5jZSB3aXRoIHJlbW90ZSwgc3VjaCBhcyBOSVMgb3IgTklTKywgbmFtZSBzZXJ2aWNlcy4iCitTVU1NQVJZX2dsaWJjLWV4dHJhLW5zcyA9ICJoZXNpb2QsIE5JUyBhbmQgTklTKyBuc3MgbGlicmFyaWVzIgorREVTQ1JJUFRJT05fZ2xpYmMtZXh0cmEtbnNzID0gImdsaWJjOiBuaXMsIG5pc3BsdXMgYW5kIGhlc2lvZCBzZWFyY2ggc2VydmljZXMuIgorU1VNTUFSWV9sZGQgPSAicHJpbnQgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzIgorREVTQ1JJUFRJT05fbGRkID0gIiR7YmluZGlyfS9sZGQgcHJpbnRzIHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBwcm9ncmFtIG9yIHNoYXJlZCBsaWJyYXJ5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK1NVTU1BUllfJHtQTn0tdXRpbHMgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgcHJvdmlkZWQgYnkgZ2xpYmMiCitERVNDUklQVElPTl8ke1BOfS11dGlscyA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBpbmNsdWRpbmcgZ2V0Y29uZiwgaWNvbnYsIGxvY2FsZSwgZ2VuY2F0LCBycGNnZW4sIC4uLiIKK0RFU0NSSVBUSU9OX2xpYnNvdHJ1c3MgPSAiTGlicmFyeSB0byBzdXBwb3J0IHNvdHJ1c3Mgd2hpY2ggdHJhY2VzIGNhbGxzIHRocm91Z2ggUExUcyIKK0RFU0NSSVBUSU9OX3R6Y29kZSA9ICJ0emNvZGUsIHRpbWV6b25lIHpvbmVpbmZvIHV0aWxzIC0tIHppYywgemR1bXAsIHR6c2VsZWN0IgorCitpbmhlcml0IGxpYmMtY29tbW9uIG11bHRpbGliX2hlYWRlcgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vbG9jYWx0aW1lCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisKKwkjIHJlbW92ZSBlbXB0eSBnbGliYyBkaXIKKwlpZiBbIC1kICR7RH0ke2xpYmRpcn0vZ2xpYmMgLWEgISAtZSAke0R9JHtsaWJkaXJ9L2dsaWJjL3B0X2Nob3duIF07IHRoZW4KKwkJcm1kaXIgJHtEfSR7bGliZGlyfS9nbGliYworCWZpCisJb2VfbXVsdGlsaWJfaGVhZGVyIGJpdHMvc3lzY2FsbC5oCisKKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vbXRyYWNlIF07IHRoZW4KKwkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgLWUgJzJzLGV4ZWMuKnBlcmwsZXhlYyAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS9tdHJhY2UKKwlmaQorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9ycGNzdmMvcnF1b3RhKgorCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisJaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCisJCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgorCWZpCisKKwlpZiBbICIke1VTRV9MRENPTkZJR30iICE9ICIxIiBdOyB0aGVuCisJCSMgV2Ugd29uJ3Qgc2hpcCB0aGVzZSBmaWxlcyAoc2VlIEZJTEVTIGFib3ZlKSBzbyBsZXQncyBub3QgaW5zdGFsbCB0aGVtCisJCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2xkLnNvLmNvbmYKKwkJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9sZGNvbmZpZworCQkjIFRoaXMgZGlyZWN0b3J5IHdpbGwgYmUgZW1wdHkgbm93IHNvIHJlbW92ZSBpdCB0b28uCisJCSMgQnV0IGNoZWNrIHdoZXRoZXIgaXQgZXhpc3RzIGZpcnN0LCBzaW5jZSBpdCB3b24ndCBmb3IgZ2xpYmMtaW5pdGlhbC4KKwkJaWYgWyAtZCAke0R9JHtzeXNjb25mZGlyfSBdOyB0aGVuCisJCQlybWRpciAke0R9JHtzeXNjb25mZGlyfQorCQlmaQorCWZpCisKKwlpZiBlY2hvICR7UE59fGdyZXAgLXEgImdsaWJjLWluaXRpYWwiOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vZGIvbnNjZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L25zY2QvbnNjZC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uc2NkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbnNjZC9uc2NkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vbnNjZC5jb25mCisJc2VkIC1pICJzJWRhZW1vbiVzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyVnIiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbnNjZAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1N9L25zY2QvbnNjZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi9uc2NkIDc1NSByb290IHJvb3QgLSIgXAorCQkJPiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL25zY2QuY29uZgorCWVsc2UKKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCQllY2hvICJkIHJvb3Qgcm9vdCAwNzU1IC92YXIvcnVuL25zY2Qgbm9uZSIgXAorCQkJPiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OF9uc2NkCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfYWFyY2g2NCAoKSB7CisJaWYgWyAiJHtiYXNlX2xpYmRpcn0iICE9ICIvbGliIiBdIDsgdGhlbgorCQkjIFRoZSBhYXJjaDY0IEFCSSBzYXlzIHRoZSBkeW5hbWljIGxpbmtlciAtbXVzdC0gYmUgL2xpYi9sZC1saW51eC1hYXJjaDY0W19iZV0uc28uMQorCQlpbnN0YWxsIC1kICR7RH0vbGliCisJCWlmIFsgLWUgJHtEfSR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LWFhcmNoNjQuc28uMSBdOyB0aGVuCisJCQlsbiAtcyAke0BiYXNlX3BhdGhfcmVsYXRpdmUoJy9saWInLCAnJHtiYXNlX2xpYmRpcn0nKX0vbGQtbGludXgtYWFyY2g2NC5zby4xIFwKKwkJCQkke0R9L2xpYi9sZC1saW51eC1hYXJjaDY0LnNvLjEKKwkJZWxpZiBbIC1lICR7RH0ke2Jhc2VfbGliZGlyfS9sZC1saW51eC1hYXJjaDY0X2JlLnNvLjEgXTsgdGhlbgorCQkJbG4gLXMgJHtAYmFzZV9wYXRoX3JlbGF0aXZlKCcvbGliJywgJyR7YmFzZV9saWJkaXJ9Jyl9L2xkLWxpbnV4LWFhcmNoNjRfYmUuc28uMSBcCisJCQkJJHtEfS9saWIvbGQtbGludXgtYWFyY2g2NF9iZS5zby4xCisJCWZpCisJZmkKK30KKworZG9faW5zdGFsbF9sb2NhbGUgKCkgeworCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2dsaWJjLWxvY2FsZS1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCWluc3RhbGwgLWQgJHtkZXN0fSR7YmFzZV9saWJkaXJ9ICR7ZGVzdH0ke2JpbmRpcn0gJHtkZXN0fSR7bGliZGlyfSAke2Rlc3R9JHtkYXRhZGlyfQorCWlmIFsgIiR7YmFzZV9saWJkaXJ9IiAhPSAiJHtsaWJkaXJ9IiBdOyB0aGVuCisJCWNwIC1mcFBSICR7RH0ke2Jhc2VfbGliZGlyfS8qICR7ZGVzdH0ke2Jhc2VfbGliZGlyfQorCWZpCisJaWYgWyAtZSAke0R9JHtiaW5kaXJ9L2xvY2FsZWRlZiBdOyB0aGVuCisJCW12IC1mICR7RH0ke2JpbmRpcn0vbG9jYWxlZGVmICR7ZGVzdH0ke2JpbmRpcn0KKwlmaQorCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9nY29udiBdOyB0aGVuCisJCW12IC1mICR7RH0ke2xpYmRpcn0vZ2NvbnYgJHtkZXN0fSR7bGliZGlyfQorCWZpCisJaWYgWyAtZSAke0R9JHtleGVjX3ByZWZpeH0vbGliIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAke2Rlc3R9JHtleGVjX3ByZWZpeH0KKwlmaQorCWlmIFsgLWUgJHtEfSR7ZGF0YWRpcn0vaTE4biBdOyB0aGVuCisJCW12ICR7RH0ke2RhdGFkaXJ9L2kxOG4gJHtkZXN0fSR7ZGF0YWRpcn0KKwlmaQorCWNwIC1mcFBSICR7RH0ke2RhdGFkaXJ9LyogJHtkZXN0fSR7ZGF0YWRpcn0KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vbG9jYWxlLworCWNwIC1mcFBSICR7V09SS0RJUn0vU1VQUE9SVEVEICR7ZGVzdH0KK30KKworYWRkdGFzayBkb19pbnN0YWxsX2xvY2FsZSBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX3BhY2thZ2UKKworYmFzaHNjcmlwdHMgPSAibXRyYWNlIHNvdHJ1c3MgeHRyYWNlIgorCitkb19ldmFjdWF0ZV9zY3JpcHRzICgpIHsKKwl0YXJnZXQ9JHtEfSR7aW5jbHVkZWRpcn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCW1rZGlyIC1wICR0YXJnZXQKKwlmb3IgaSBpbiAke2Jhc2hzY3JpcHRzfTsgZG8KKwkJaWYgWyAtZiAke0R9JHtiaW5kaXJ9LyRpIF07IHRoZW4KKwkJCWNwICR7RH0ke2JpbmRpcn0vJGkgJHRhcmdldC8KKwkJZmkKKwlkb25lCit9CisKK2FkZHRhc2sgZXZhY3VhdGVfc2NyaXB0cyBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX3BhY2thZ2UKKworUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJnbGliY19wYWNrYWdlX3ByZXByb2Nlc3MiCisKK2dsaWJjX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJcm0gLXJmICR7UEtHRH0vJHtpbmNsdWRlZGlyfS9nbGliYy1sb2NhbGUtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlybSAtcmYgJHtQS0dEfS8ke2luY2x1ZGVkaXJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlmb3IgaSBpbiAke2Jhc2hzY3JpcHRzfTsgZG8KKwkgICAgcm0gLWYgJHtQS0dEfSR7YmluZGlyfS8kaQorCWRvbmUKKwlybSAtcmYgJHtQS0dEfS8ke2xvY2FsZWRpcn0KKwlpZiBbICIke2xpYmRpcn0iICE9ICIke2V4ZWNfcHJlZml4fS9saWIiIF07IHRoZW4KKwkJIyBUaGlzIGRpciBvbmx5IGV4aXN0cyB0byBob2xkIGxvY2FsZXMKKwkJcm0gLXJmICR7UEtHRH0ke2V4ZWNfcHJlZml4fS9saWIKKwlmaQorfQorCitwa2dfcG9zdGluc3RfbnNjZCAoKSB7CisJaWYgWyAteiAiJEQiIF07IHRoZW4KKwkJaWYgY29tbWFuZCAtdiBzeXN0ZW1kLXRtcGZpbGVzID4vZGV2L251bGw7IHRoZW4KKwkJCXN5c3RlbWQtdG1wZmlsZXMgLS1jcmVhdGUgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL25zY2QuY29uZgorCQllbGlmIFsgLWUgJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCisJCWZpCisJZmkKK30KK0NPTkZGSUxFU19uc2NkPSIke3N5c2NvbmZkaXJ9L25zY2QuY29uZiIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICJuc2NkIgorU1lTVEVNRF9TRVJWSUNFX25zY2QgPSAibnNjZC5zZXJ2aWNlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTA2NzczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMKQEAgLTAsMCArMSwxNiBAQAoraW5jbHVkZSBnbGliYy1jb2xsYXRlcmFsLmluYworCitTVU1NQVJZID0gInV0aWxpdHkgc2NyaXB0cyBwcm92aWRlZCBieSBnbGliYyIKK0RFU0NSSVBUSU9OID0gInV0aWxpdHkgc2NyaXB0cyBwcm92aWRlZCBieSBnbGliYyIKK1JERVBFTkRTXyR7UE59ID0gImJhc2ggZ2xpYmMtbXRyYWNlIgorCitTUkMgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworYmFzaHNjcmlwdHMgPSAic290cnVzcyB4dHJhY2UiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAtbSAwNzU1ICR7RH0ke2JpbmRpcn0KKwlmb3IgaSBpbiAke2Jhc2hzY3JpcHRzfTsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICR7U1JDfS8kaSAke0R9JHtiaW5kaXJ9LworCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHNfMi4yMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHNfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg5YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjIyLmJiCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgZ2xpYmMtc2NyaXB0cy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXRlc3RpbmcuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtdGVzdGluZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliYmYzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXRlc3RpbmcuaW5jCkBAIC0wLDAgKzEsOTYgQEAKK2RvX2NvbXBpbGVfYXBwZW5kICgpIHsKKwkjIG5vdyBnZW5lcmF0ZSBzY3JpcHQgdG8gZHJpdmUgdGVzdGluZworCWVjaG8gIiMhL3Vzci9iaW4vZW52IHNoIiA+JHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNldCA+PiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJIyBwcnVuZSBvdXQgdGhlIHVubmVlZGVkIHZhcnMKKwlzZWQgLWkgLWUgIi9eQkFTSC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlVTRVIvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15PUFQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15ESVJTVEFDSy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkVVSUQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15GVU5DTkFNRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkdST1VQUy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkhPU1QvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15IT01FL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eSUZTL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTENfQUxML2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTE9HTkFNRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXk1BQ0hUWVBFL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eT1NUWVBFL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUElQRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlNIRUxML2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eJy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlVJRC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlRFUk0vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QQVRDSF9HRVQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QS0dfL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUE9TSVhMWV8vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QUElEL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUFM0L2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlNITFZML2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eU1RBR0lORy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkxEX0xJQlJBUllfUEFUSC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBTRVVETy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisKKwkjIHBvaW50IHRvIHJlYWwgc3lzcm9vdCBub3QgdGhlIHRvb2xjaGFpbiBib290c3RyYXAgc3lzcm9vdAorCXNlZCAtaSAtZSAicy9cLXRjYm9vdHN0cmFwLy9nIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisKKwkjIHVzZSB0aGUgZmluYWwgY3Jvc3MtZ2NjIHRvIHRlc3Qgc2luY2Ugc29tZSB0ZXN0cyBuZWVkIGxpYnN0ZGMrKworCXNlZCAtaSAtZSAicy9eUEFUSD0uKlwuZ2NjLWNyb3NzLWluaXRpYWxcOi9QQVRIPS9nIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisKKwkjIGFwcGVuZCBleGVjdXRpb24gcGFydCBzY3JpcHQKK2NhdCA+PiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjIDw8IFNUT1AKK3RhcmdldD0iXCQxIgoraWYgWyAieFwkdGFyZ2V0IiA9ICJ4IiBdCit0aGVuCisJZWNobyAiUGxlYXNlIHNwZWNpZnkgdGhlIHRhcmdldCBtYWNoaW5lIGFuZCByZW1vdGUgdXNlciBpbiBmb3JtIG9mIHVzZXJAdGFyZ2V0IgorCWV4aXQgMTsKK2ZpCitzc2ggXCR0YXJnZXQgbHMgXCRQV0RcICAyPiYxID4gL2Rldi9udWxsCitpZiBbICJ4XCQ/IiAhPSAieDAiIF0KK3RoZW4KKwllY2hvICJGYWlsZWQgY29ubmVjdGluZyB0byBcJHRhcmdldCBpdCBjb3VsZCBiZSBiZWNhdXNlIG9mOiIKKwllY2hvICIxLiBZb3UgZG9udCBoYXZlIHBhc3N3b3JkbGVzcyBzc2ggc2V0dXAgdG8gYWNjZXNzIFwkdGFyZ2V0IgorCWVjaG8gIjIuIE5GUyBzaGFyZSBvbiBcJHRhcmdldCBpcyBub3QgbW91bnRlZCBvciBpZiBtb3VudGVkIHRoZW4gbm90IG1hdGNoaW5nIHRoZSBidWlsZCB0cmVlIGxheW91dC4iCisJZWNobyAiICAgVGhlIHRyZWUgc2hvdWxkIGJlIGFjY2Vzc2libGUgYXQgc2FtZSBsb2NhdGlvbiBvbiBidWlsZCBob3N0IGFuZCB0YXJnZXQiCisJZWNobyAiICAgWW91IGNhbiBhZGQgbmZzLWNsaWVudCB0byBJTUFHRV9GRUFUVVJFUyB0byBnZXQgdGhlIG5mcyBjbGllbnQgb24gdGFyZ2V0IgorCWVjaG8gIjMuIG5mcyBzZXJ2ZXIgb24gYnVpbGQgaG9zdCBpcyBub3QgcnVubmluZy4iCisJZWNobyAiICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlICdub19yb290X3NxdWFzaCcgYWRkZWQgaW4gL2V0Yy9leHBvcnRzIGlmIHlvdSB3YW50IgorCWVjaG8gIiAgIHRvIHRlc3QgYXMgcm9vdCB1c2VyIG9uIHRhcmdldCAodXN1YWxseSBpdHMgcmVjb21tZW5kZWQgdG8gY3JlYXRlIGEgbm9uIgorCWVjaG8gIiAgIHJvb3QgdXNlci4iCisJZWNobyAiICAgQXMgYSBzYW5pdHkgY2hlY2sgbWFrZSBzdXJlIHRoYXQgdGFyZ2V0IGNhbiByZWFkL3dyaXRlIHRvIHRoZSBnbGliYyBidWlsZCB0cmVlIgorCWVjaG8gIiAgIFBsZWFzZSByZWZlciB0byAke1N9L0VHTElCQy5jcm9zcy10ZXN0aW5nIGZvciBmdXJ0aGVyIGluc3RydWN0aW9ucyBvbiBzZXR1cCIKKwlleGl0IDEKK2ZpCisJZWNobyAiIyB3ZSB0ZXN0IHVzaW5nIGNyb3NzIGNvbXBpbGVyIGZyb20gcmVhbCBzeXNyb290IHRoZXJlZm9yZSBvdmVycmlkZSB0aGUiID4gJHtCfS9jb25maWdwYXJtcworCWVjaG8gIiMgZGVmaW5pdGlvbnMgdGhhdCBjb21lIGZyb20gJHtCfS9jb25maWcubWFrZSIgPj4gJHtCfS9jb25maWdwYXJtcworCWZncmVwIHRjYm9vdHN0cmFwICR7Qn0vY29uZmlnLm1ha2UgPiAke0J9L2NvbmZpZ3Bhcm1zCisJc2VkIC1pIC1lICJzL1wtdGNib290c3RyYXAvL2ciICR7Qn0vY29uZmlncGFybXMKKworIyBnKysgdXNlcyBmbGFnIC1ub3N0ZGluYywgc28gdGhlIGxvY2F0aW9ucyBvZiBzeXN0ZW0gaW5jbHVkZSBoZWFkZXJzIG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQKKyMgSWYgdGhlIGxvY2F0aW9ucyBhcmUgbm90IGFscmVhZHkgc3BlY2lmaWVkIGluIGNvbmZpZy5tYWtlLCB0aGVuIHdlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisjICAgIDxzeXNyb290Pi91c3IvaW5jbHVkZS9jKysvPGcrKyB2ZXJzaW9uPgorIyAgICA8c3lzcm9vdD4vdXNyL2luY2x1ZGUvYysrLzxnKysgdmVyc2lvbj4vPG1hY2hpbmU+CisKK2N4eGluY2x1ZGVzPVxgY2F0ICR7Qn0vY29uZmlnLm1ha2UgfCBnYXdrICdcJDEgPT0gImMrKy1zeXNpbmNsdWRlcyInIHwgZ2F3ayAtRiI9IiAne3ByaW50IFwkMn0nIHwgc2VkICJzL1sgXHRdXD8vL2ciXGAKKworaWYgWyAteiAiXCRjeHhpbmNsdWRlcyIgXTsgdGhlbgorICBzeXNyb290PVxgY2F0ICR7Qn0vY29uZmlncGFybXMgfCBzZWQgLW4gIi9DWFgvcCIgfCBzZWQgLWUgInMvXi4qLS1zeXNyb290PS8vIlxgCisgIGN4eD1cYGNhdCAke0J9L2NvbmZpZ3Bhcm1zIHwgZ2F3ayAnXCQxIH4gL15DWFgvJyB8IGdhd2sgLUYiPSIgJ3twcmludCBcJDJ9JyB8IGdhd2sgJ3twcmludCBcJDF9J1xgCisgIGN4eG1hY2hpbmU9XGBcJGN4eCAtZHVtcG1hY2hpbmVcYAorICBjeHh2ZXJzaW9uPVxgXCRjeHggLWR1bXB2ZXJzaW9uXGAKKyAgIyBwYXNzIHRoZSBuZXcgdmFsdWUgb2YgYysrLXN5c2luY2x1ZGVzIHZpYSBjb25maWdwYXJtcworICBlY2hvICIjIGMrKy1zeXNpbmNsdWRlcyBhZGRlZDoiID4+ICR7Qn0vY29uZmlncGFybXMKKyAgZWNobyAiYysrLXN5c2luY2x1ZGVzID0gLWlzeXN0ZW0gXCRzeXNyb290L3Vzci9pbmNsdWRlL2MrKy9cJGN4eHZlcnNpb24gLWlzeXN0ZW0gXCRzeXNyb290L3Vzci9pbmNsdWRlL2MrKy9cJGN4eHZlcnNpb24vXCRjeHhtYWNoaW5lIiA+PiAke0J9L2NvbmZpZ3Bhcm1zCitmaQorCit3cmFwcGVyPSIke1N9L3NjcmlwdHMvY3Jvc3MtdGVzdC1zc2guc2ggXCR0YXJnZXQiCitsb2NhbGVkZWY9IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9jcm9zcy1sb2NhbGVkZWYgLS1saXR0bGUtZW5kaWFuIC0tdWludDMyLWFsaWduPTQiCittYWtlIHRlc3RzLWNsZWFuCittYWtlIGNyb3NzLWxvY2FsZWRlZj0iXCRsb2NhbGVkZWYiIGNyb3NzLXRlc3Qtd3JhcHBlcj0iXCR3cmFwcGVyIiAtayBjaGVjaworcm0gLXJmICR7Qn0vY29uZmlncGFybXMKK1NUT1AKKworCWNobW9kICt4ICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZhMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMuaW5jCkBAIC0wLDAgKzEsMTA1IEBACityZXF1aXJlIGdsaWJjLWNvbW1vbi5pbmMKK3JlcXVpcmUgZ2xpYmMtbGQuaW5jCityZXF1aXJlIGdsaWJjLXRlc3RpbmcuaW5jCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQQVRIX3ByZXBlbmQgPSAiJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LiR7U1RBR0lOR0NDfToiCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCisKKyMgZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aG91dCBvcHRpbWl6YXRpb24sIGlmIHNvbWVvbmUgdHJpZXMgdG8gY29tcGlsZSBhbgorIyBlbnRpcmUgaW1hZ2UgYXMgLU8wLCB3ZSBvdmVycmlkZSBpdCB3aXRoIC1PMiBoZXJlIGFuZCBnaXZlIGEgbm90ZSBhYm91dCBpdC4KK2RlZiBnZXRfb3B0aW1pemF0aW9uKGQpOgorICAgIHNlbGVjdGVkX29wdGltaXphdGlvbiA9IGQuZ2V0VmFyKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCBUcnVlKQorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8yIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PLCAtTyAtV25vLWVycm9yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU8iLCAiLU8gLVduby1lcnJvciIpCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMCIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTzAsIC1PMiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PMCIsICItTzIiKQorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItT3MiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU9zLCAtT3MgLVduby1lcnJvciB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PcyIsICItT3MgLVduby1lcnJvciIpCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMSIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTzEsIC1PMSAtV25vLWVycm9yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU8xIiwgIi1PMSAtV25vLWVycm9yIikKKyAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uCisKK1NFTEVDVEVEX09QVElNSVpBVElPTiA6PSAiJHtAZ2V0X29wdGltaXphdGlvbihkKX0iCisKKyMgc2l0ZWNvbmZpZy5iYmNsYXNzIHJ1bnMgY29uZmlndXJlIHdoaWNoIG5lZWRzIGEgd29ya2luZyBjb21waWxlcgorIyBGb3IgdGhlIGNvbXBpbGVyIHRvIHdvcmsgd2UgbmVlZCBhIHdvcmtpbmcgbGliYyB5ZXQgbGliYyBpc24ndAorIyBpbiB0aGUgc3lzcm9vdHMgZGlyZWN0b3J5IGF0IHRoaXMgcG9pbnQuIFRoaXMgbWVhbnMgdGhlIGxpYmMuc28KKyMgbGlua2VyIHNjcmlwdCB3b24ndCB3b3JrIGFzIHRoZSAtLXN5c3Jvb3Qgc2V0dGluZyBpc24ndCBjb3JyZWN0LgorIyBIZXJlIHdlIGNyZWF0ZSBhIGhhY2tlZCB1cCBsaWJjIGxpbmtlciBzY3JpcHQgYW5kIHBhc3MgaW4gdGhlIHJpZ2h0CisjIGZsYWdzIHRvIGxldCBjb25maWd1cmUgd29yay4gVWdseS4KK0VYVFJBU0lURUNPTkZJRyA9ICJDRkxBR1M9JyR7Q0ZMQUdTfSAtV2wsLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0nIgorc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnX2dlbmNhY2hlX3ByZXBlbmQgPSAiIFwKKwlta2RpciAtcCAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKKwljcCAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0vbGliYy5zbyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKKwlzZWQgLWkgLWUgJ3MjICR7YmFzZV9saWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSNnJyAtZSAncyMgJHtsaWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0jZycgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjL2xpYmMuc287IFwKKyIKKworIyBucHRsIG5lZWRzIHVud2luZCBzdXBwb3J0IGluIGdjYywgd2hpY2ggY2FuJ3QgYmUgYnVpbHQgd2l0aG91dCBnbGliYy4KK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgbGliZ2NjLWluaXRpYWwgbGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCIKKyMgbnB0bCBuZWVkcyBsaWJnY2MgYnV0IGRsb3BlbnMgaXQsIHNvIG91ciBzaGxpYnMgY29kZSBkb2Vzbid0IGRldGVjdCB0aGlzCisjUkRFUEVORFNfJHtQTn0gKz0gIiR7QFsnJywnbGliZ2NjJ11bJ25wdGwnIGluICcke0dMSUJDX0FERE9OU30nXX0iCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjIgorUFJPVklERVMgKz0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2xpYmljb252IgoraW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgc3lzdGVtZAorcmVxdWlyZSBnbGliYy1vcHRpb25zLmluYworCisjIFRoZSBtYWluIHB1cnBvc2Ugb2Ygc2V0dGluZyB0aGlzIHZhcmlhYmxlIGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBhY2NpZGVudGx5CisjIG92ZXJyaWRpbmcgRElTVFJPX0ZFQVRSVUVTLCBjYXVzaW5nIG9ic2N1cmUgYnVpbGQgZmFpbHVyZXMgYmVjYXVzZSBvZiBsYWNrCisjIG9mIGxpYmMgZnVuY3Rpb25zLgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IgorCitMRUFEX1NPTkFNRSA9ICJsaWJjLnNvIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiIFwKKyAgYWNfY3ZfcGF0aF9CQVNIX1NIRUxMPSR7YmFzZV9iaW5kaXJ9L2Jhc2ggXAorICBsaWJjX2N2X3NsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICBsaWJjX2N2X3Jvb3RzYmluZGlyPSR7YmFzZV9zYmluZGlyfSBcCisgIGxpYmNfY3ZfbG9jYWxlZGlyPSR7bG9jYWxlZGlyfSBcCisgIGxpYmNfY3Zfc3NwPW5vIFwKKyIKKworR0xJQkNfRVhUUkFfT0VDT05GID89ICIiCitHTElCQ19FWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIiIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyMgVGhpcyBuZWVkcyB0byBtYXRjaCB3aXRoIGdsaWJjLWNvbGxhdGVyYWwuaW5jLCBvdGhlcndpc2UgZ2xpYmMtc2NyaXB0cyBhbmQgZ2xpYmMtbG9jYWxlCisjIHdpbGwgZmFpbCB0byBmaW5kIG1haW4gZ2xpYmMsIGZvciBkZXRhaWxzIHNlZQorIyBodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNS1KYW51YXJ5LzEwMDY3OS5odG1sCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworIyBnbGliYyB1c2VzIFBBUkFMTEVMTUZMQUdTIHZhcmlhYmxlIHRvIHBhc3MgcGFyYWxsZWwgYnVpbGQgaW5mbyBzbyB0cmFuc2ZlcgorIyBQQVJBTExFTF9NQUtFIGludG8gUEFSQUxMRUxNRkxBR1MgYW5kIGVtcHR5IG91dCBQQVJBTExFTF9NQUtFCitFR0xJQkNQQVJBTExFTElTTSA6PSAiUEFSQUxMRUxNRkxBR1M9IiR7UEFSQUxMRUxfTUFLRX0iIgorRVhUUkFfT0VNQUtFW3ZhcmRlcHNleGNsdWRlXSArPSAiRUdMSUJDUEFSQUxMRUxJU00iCitFWFRSQV9PRU1BS0UgKz0gIiR7RUdMSUJDUEFSQUxMRUxJU019IgorUEFSQUxMRUxfTUFLRSA9ICIiCisKKyMgZ2xpYmMgbWFrZS1zeXNjYWxscy5zaCBoYXMgYSBudW1iZXIgb2YgaXNzdWVzIHdpdGggL2Jpbi9kYXNoIGFuZAorIyBpdCdzIG91dHB1dCB3aGljaCBtYWtlIGNhbGxzIHZpYSB0aGUgU0hFTEwgYWxzbyBoYXMgaXNzdWVzLCBzbworIyBlbnN1cmUgbWFrZSB1c2VzIC9iaW4vYmFzaAorRVhUUkFfT0VNQUtFICs9ICJTSEVMTD0vYmluL2Jhc2giCisKK09FX0ZFQVRVUkVTID0gIiR7QGZlYXR1cmVzX3RvX2dsaWJjX3NldHRpbmdzKGQpfSIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtZSAicyNAQkFTSEAjL2Jpbi9zaCMiIC1pICR7U30vZWxmL2xkZC5iYXNoLmluCisJZWNobyAnJHtPRV9GRUFUVVJFU30nID4gJHtCfS9vcHRpb24tZ3JvdXBzLmNvbmZpZworfQorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXllcyAnJyB8IG9lX3J1bm1ha2UgY29uZmlnCisKKwkjIFJlbW92ZSBxdW90YXRpb24gbWFya3MgZnJvbSBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEXyouIFRoaXMgd2lsbAorCSMgYXZvaWQgaW5zdGFsbCBlcnJvci4KKwlzZWQgLWkgJ3MvXk9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfXCguKlwpPSJcKC4qXCkiJC9PUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX1wxPVwyLycgb3B0aW9uLWdyb3Vwcy5jb25maWcKK30KKworR0xJQkNfQURET05TID89ICJucHRsLGxpYmlkbiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDY2MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gMDg3NmZlYTFiNWIyNmRhODRmMjk4NzE0YTJlMjNiYTY5NjYwN2RiYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjQ4OjI0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMjddIG5hdGl2ZXNkay1nbGliYzogTG9vayBmb3IgaG9zdCBzeXN0ZW0gbGQuc28uY2FjaGUgYXMKKyB3ZWxsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBkZWZhdWx0IGxpYiBzZWFyY2ggcGF0aCBvcmRlciBpczoKKworICAxKSBMRF9MSUJSQVJZX1BBVEgKKyAgMikgUlBBVEggZnJvbSB0aGUgYmluYXJ5CisgIDMpIGxkLnNvLmNhY2hlCisgIDQpIGRlZmF1bHQgc2VhcmNoIHBhdGhzIGVtYmVkZGVkIGluIHRoZSBsaW5rZXIKKworRm9yIG5hdGl2ZXNkayBiaW5hcmllcyB3aGljaCBhcmUgYmVpbmcgdXNlZCBhbG9uZ3NpZGUgYmluYXJpZXMgb24gYSBob3N0IHN5c3RlbSwgd2UKK25lZWQgdGhlIHNlYXJjaCBwYXRocyB0byBmaXJzdGx5IHNlYXJjaCB0aGUgc2hpcHBlZCBuYXRpdmVzZGsgbGlicyBidXQgdGhlbiBhbHNvCitjb3ZlciB0aGUgaG9zdCBzeXN0ZW0uIEZvciBleGFtcGxlIHdlIHdhbnQgdGhlIGhvc3Qgc3lzdGVtJ3MgbGliR0wgYW5kIHRoaXMgbWF5IGJlCitpbiBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBsaWtlIC91c3IvbGliL21lc2EuIFRoZSBvbmx5IHBsYWNlIHRoZSBsb2NhdGlvbiBpcyBrbm93CithYm91dCBpcyBpbiB0aGUgbGQuc28uY2FjaGUgb2YgdGhlIGhvc3Qgc3lzdGVtLgorCitTaW5jZSBuYXRpdmVzZGsgaGFzIGEgc2ltcGxlIHN0cnVjdHVyZSBhbmQgZG9lc24ndCBuZWVkIHRvIHVzZSBhIGNhY2hlIGl0c2VsZiwgd2UKK3JlcHVycG9zZSB0aGUgY2FjaGUgZm9yIHVzZSBhcyBhIGxhc3QgcmVzb3J0IGluIGZpbmRpbmcgaG9zdCBzeXN0ZW0gYmluYXJpZXMuIFRoaXMKK21lYW5zIHdlIG5lZWQgdG8gc3dpdGNoIHRoZSBvcmRlciBvZiAzIGFuZCA0IGFib3ZlIHRvIG1ha2UgdGhpcyB3b3JrIGVmZmVjdGl2ZWx5LgorCitSUCAxNC8xMC8yMDEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvZGwtbG9hZC5jIHwgMTcgKysrKysrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IDBjMDUyZTQuLmY0NTA4NWEgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtMjA0MCw3ICsyMDQwLDE0IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAJZmQgPSBvcGVuX3BhdGggKG5hbWUsIG5hbWVsZW4sIG1vZGUsCisgCQkJJmxvYWRlci0+bF9ydW5wYXRoX2RpcnMsICZyZWFsbmFtZSwgJmZiLCBsb2FkZXIsCisgCQkJTEFfU0VSX1JVTlBBVEgsICZmb3VuZF9vdGhlcl9jbGFzcyk7CistCisrICAgICAgLyogdHJ5IHRoZSBkZWZhdWx0IHBhdGguICAqLworKyAgICAgIGlmIChmZCA9PSAtMQorKwkgICYmICgobCA9IGxvYWRlciA/OiBHTChkbF9ucylbbnNpZF0uX25zX2xvYWRlZCkgPT0gTlVMTAorKwkgICB8fCBfX2J1aWx0aW5fZXhwZWN0ICghKGwtPmxfZmxhZ3NfMSAmIERGXzFfTk9ERUZMSUIpLCAxKSkKKysJICYmIHJ0bGRfc2VhcmNoX2RpcnMuZGlycyAhPSAodm9pZCAqKSAtMSkKKysJZmQgPSBvcGVuX3BhdGggKG5hbWUsIG5hbWVsZW4sIG1vZGUgJiBfX1JUTERfU0VDVVJFLCAmcnRsZF9zZWFyY2hfZGlycywKKysJCQkmcmVhbG5hbWUsICZmYiwgbCwgTEFfU0VSX0RFRkFVTFQsICZmb3VuZF9vdGhlcl9jbGFzcyk7CisrICAgICAgLyogRmluYWxseSB0cnkgbGQuc28uY2FjaGUgKi8KKyAjaWZkZWYgVVNFX0xEQ09ORklHCisgICAgICAgaWYgKGZkID09IC0xCisgCSAgJiYgKF9fZ2xpYmNfbGlrZWx5ICgobW9kZSAmIF9fUlRMRF9TRUNVUkUpID09IDApCitAQCAtMjA5OSwxNCArMjEwNiw2IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAJfQorICNlbmRpZgorIAorLSAgICAgIC8qIEZpbmFsbHksIHRyeSB0aGUgZGVmYXVsdCBwYXRoLiAgKi8KKy0gICAgICBpZiAoZmQgPT0gLTEKKy0JICAmJiAoKGwgPSBsb2FkZXIgPzogR0woZGxfbnMpW25zaWRdLl9uc19sb2FkZWQpID09IE5VTEwKKy0JICAgICAgfHwgX19nbGliY19saWtlbHkgKCEobC0+bF9mbGFnc18xICYgREZfMV9OT0RFRkxJQikpKQorLQkgICYmIHJ0bGRfc2VhcmNoX2RpcnMuZGlycyAhPSAodm9pZCAqKSAtMSkKKy0JZmQgPSBvcGVuX3BhdGggKG5hbWUsIG5hbWVsZW4sIG1vZGUsICZydGxkX3NlYXJjaF9kaXJzLAorLQkJCSZyZWFsbmFtZSwgJmZiLCBsLCBMQV9TRVJfREVGQVVMVCwgJmZvdW5kX290aGVyX2NsYXNzKTsKKy0KKyAgICAgICAvKiBBZGQgYW5vdGhlciBuZXdsaW5lIHdoZW4gd2UgYXJlIHRyYWNpbmcgdGhlIGxpYnJhcnkgbG9hZGluZy4gICovCisgICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuIik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTY4ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gMDg2YjY1ZDlhYWNmZmM0N2ZjZDhkZjY4ODE4YTQ3NmE1YWU3NmZhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjUwOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMjddIG5hdGl2ZXNkay1nbGliYzogRml4IGJ1ZmZlciBvdmVycnVuIHdpdGggYSByZWxvY2F0ZWQKKyBTREsKKworV2hlbiBsZC1saW51eC0qLnNvLjIgaXMgcmVsb2NhdGVkIHRvIGEgcGF0aCB0aGF0IGlzIGxvbmdlciB0aGFuIHRoZQorb3JpZ2luYWwgZml4ZWQgbG9jYXRpb24sIHRoZSBkeW5hbWljIGxvYWRlciB3aWxsIGNyYXNoIGluIG9wZW5fcGF0aAorYmVjYXVzZSBpdCBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdCBtYXhfZGlybmFtZWxlbiBpcyBhIGZpeGVkIHNpemUgdGhhdAorbmV2ZXIgY2hhbmdlcy4KKworVGhlIGFsbG9jYXRlZCBidWZmZXIgd2lsbCBub3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGRpcmVjdG9yeQorcGF0aCBzdHJpbmcgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGZpeGVkIGxvY2F0aW9uIHByb3ZpZGVkIGF0IGJ1aWxkCit0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNESyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvZGwtbG9hZC5jIHwgMTIgKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCBmNDUwODVhLi5mMWViNWVkIDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTE3NjUsNyArMTc2NSwxOSBAQCBvcGVuX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgbW9kZSwKKyAgICAgICAgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSB3aGVuIHJ0bGQgaXMgcnVuIGRpcmVjdGx5LiAgKi8KKyAgICAgcmV0dXJuIC0xOworIAorKyAgZG8KKysgICAgeworKyAgICAgIHN0cnVjdCByX3NlYXJjaF9wYXRoX2VsZW0gKnRoaXNfZGlyID0gKmRpcnM7CisrICAgICAgaWYgKHRoaXNfZGlyLT5kaXJuYW1lbGVuID4gbWF4X2Rpcm5hbWVsZW4pCisrCXsKKysJICBtYXhfZGlybmFtZWxlbiA9IHRoaXNfZGlyLT5kaXJuYW1lbGVuOworKwl9CisrICAgIH0KKysgIHdoaWxlICgqKytkaXJzICE9IE5VTEwpOworKworICAgYnVmID0gYWxsb2NhIChtYXhfZGlybmFtZWxlbiArIG1heF9jYXBzdHJsZW4gKyBuYW1lbGVuKTsKKysKKysgIGRpcnMgPSBzcHMtPmRpcnM7CisgICBkbworICAgICB7CisgICAgICAgc3RydWN0IHJfc2VhcmNoX3BhdGhfZWxlbSAqdGhpc19kaXIgPSAqZGlyczsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODFhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2gKQEAgLTAsMCArMSwxMjYgQEAKK0Zyb20gZmQ1OTVhNWVjODg1YmNiNGMxNDQxN2RhYTIxYzJlNjFjNWI3MmU0MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjUxOjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMjddIG5hdGl2ZXNkay1nbGliYzogUmFpc2UgdGhlIHNpemUgb2YgYXJyYXlzIGNvbnRhaW5pbmcgZGwKKyBwYXRocworCitUaGlzIHBhdGNoIHB1dHMgdGhlIGR5bmFtaWMgbG9hZGVyIHBhdGggaW4gdGhlIGJpbmFyaWVzLCBTWVNURU1fRElSUyBzdHJpbmdzCithbmQgbGVuZ3RocyBhcyB3ZWxsIGFzIGxkLnNvLmNhY2hlIHBhdGggaW4gdGhlIGR5bmFtaWMgbG9hZGVyIHRvIHNwZWNpZmljCitzZWN0aW9ucyBpbiBtZW1vcnkuIFRoZSBzZWN0aW9ucyB0aGF0IGNvbnRhaW4gcGF0aHMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhIDQwOTYKK2J5dGUgc2VjdGlvbiwgd2hpY2ggaXMgdGhlIG1heGltdW0gcGF0aCBsZW5ndGggaW4gbGludXguIFRoaXMgd2lsbCBhbGxvdyB0aGUKK3JlbG9jYXRpbmcgc2NyaXB0IHRvIHBhcnNlIHRoZSBFTEYgYmluYXJ5LCBkZXRlY3QgdGhlIHNlY3Rpb24gYW5kIGVhc2lseSByZXBsYWNlCit0aGUgc3RyaW5ncyBpbiBhIGNlcnRhaW4gcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTREsgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvZGwtY2FjaGUuYyAgICAgICAgICAgICB8IDQgKysrKworIGVsZi9kbC1sb2FkLmMgICAgICAgICAgICAgIHwgNCArKy0tCisgZWxmL2ludGVycC5jICAgICAgICAgICAgICAgfCAyICstCisgZWxmL2xkY29uZmlnLmMgICAgICAgICAgICAgfCAzICsrKworIGVsZi9ydGxkLmMgICAgICAgICAgICAgICAgIHwgNSArKystLQorIHN5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oIHwgNCAtLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNhY2hlLmMgYi9lbGYvZGwtY2FjaGUuYworaW5kZXggZGVjNDliYy4uODYyZjFkOCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jYWNoZS5jCisrKysgYi9lbGYvZGwtY2FjaGUuYworQEAgLTEzMiw2ICsxMzIsMTAgQEAgZG8JCQkJCQkJCQkgICAgICBcCisgd2hpbGUgKDApCisgCisgCisrY29uc3QgY2hhciBMRF9TT19DQUNIRVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5sZHNvY2FjaGUiKSkpID0KKysJCVNZU0NPTkZESVIgIi9sZC5zby5jYWNoZSI7CisrCisrCisgaW50CisgaW50ZXJuYWxfZnVuY3Rpb24KKyBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IGYxZWI1ZWQuLmY2NjRmNTAgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtMTA0LDggKzEwNCw4IEBAIHN0YXRpYyBzaXplX3QgbWF4X2NhcHN0cmxlbiBhdHRyaWJ1dGVfcmVscm87CisgLyogR2V0IHRoZSBnZW5lcmF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRydXN0ZWQgZGlyZWN0b3JpZXMuICAqLworICNpbmNsdWRlICJ0cnVzdGVkLWRpcnMuaCIKKyAKKy1zdGF0aWMgY29uc3QgY2hhciBzeXN0ZW1fZGlyc1tdID0gU1lTVEVNX0RJUlM7Cistc3RhdGljIGNvbnN0IHNpemVfdCBzeXN0ZW1fZGlyc19sZW5bXSA9Cisrc3RhdGljIGNvbnN0IGNoYXIgc3lzdGVtX2RpcnNbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuc3lzZGlycyIpKSkgPSBTWVNURU1fRElSUzsKKyt2b2xhdGlsZSBzdGF0aWMgY29uc3Qgc2l6ZV90IHN5c3RlbV9kaXJzX2xlbltdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnN5c2RpcnNsZW4iKSkpID0KKyB7CisgICBTWVNURU1fRElSU19MRU4KKyB9OworZGlmZiAtLWdpdCBhL2VsZi9pbnRlcnAuYyBiL2VsZi9pbnRlcnAuYworaW5kZXggNDIyZWE5NWUuLjZkNjFhMzYgMTAwNjQ0CistLS0gYS9lbGYvaW50ZXJwLmMKKysrKyBiL2VsZi9pbnRlcnAuYworQEAgLTE4LDUgKzE4LDUgQEAKKyAKKyAjaW5jbHVkZSA8cnVudGltZS1saW5rZXIuaD4KKyAKKy1jb25zdCBjaGFyIF9faW52b2tlX2R5bmFtaWNfbGlua2VyX19bXSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5pbnRlcnAiKSkpCisrY29uc3QgY2hhciBfX2ludm9rZV9keW5hbWljX2xpbmtlcl9fWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmludGVycCIpKSkKKyAgID0gUlVOVElNRV9MSU5LRVI7CitkaWZmIC0tZ2l0IGEvZWxmL2xkY29uZmlnLmMgYi9lbGYvbGRjb25maWcuYworaW5kZXggZjU0ZWMyMi4uMGU3OGE4MyAxMDA2NDQKKy0tLSBhL2VsZi9sZGNvbmZpZy5jCisrKysgYi9lbGYvbGRjb25maWcuYworQEAgLTE2Nyw2ICsxNjcsOSBAQCBzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9CisgICBvcHRpb25zLCBwYXJzZV9vcHQsIE5VTEwsIGRvYywgTlVMTCwgbW9yZV9oZWxwLCBOVUxMCisgfTsKKyAKKysKKytleHRlcm4gY29uc3QgY2hhciBMRF9TT19DQUNIRVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5sZHNvY2FjaGUiKSkpOworKworIC8qIENoZWNrIGlmIHN0cmluZyBjb3JyZXNwb25kcyB0byBhbiBpbXBvcnRhbnQgaGFyZHdhcmUgY2FwYWJpbGl0eSBvcgorICAgIGEgcGxhdGZvcm0uICAqLworIHN0YXRpYyBpbnQKK2RpZmYgLS1naXQgYS9lbGYvcnRsZC5jIGIvZWxmL3J0bGQuYworaW5kZXggNjk4NzNjMi4uNmQzYWRkNyAxMDA2NDQKKy0tLSBhL2VsZi9ydGxkLmMKKysrKyBiL2VsZi9ydGxkLmMKK0BAIC05OSw2ICs5OSw3IEBAIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsCisgc3Ryb25nX2FsaWFzIChfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsLCBfX3BvaW50ZXJfY2hrX2d1YXJkKQorICNlbmRpZgorIAorK2V4dGVybiBjb25zdCBjaGFyIExEX1NPX0NBQ0hFWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxkc29jYWNoZSIpKSk7CisgCisgLyogTGlzdCBvZiBhdWRpdGluZyBEU09zLiAgKi8KKyBzdGF0aWMgc3RydWN0IGF1ZGl0X2xpc3QKK0BAIC04NzcsMTIgKzg3OCwxMiBAQCBvZiB0aGlzIGhlbHBlciBwcm9ncmFtOyBjaGFuY2VzIGFyZSB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcnVuIHRoaXMgcHJvZ3JhbS5cblwKKyAgIC0tbGlzdCAgICAgICAgICAgICAgICBsaXN0IGFsbCBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGFyZSByZXNvbHZlZFxuXAorICAgLS12ZXJpZnkgICAgICAgICAgICAgIHZlcmlmeSB0aGF0IGdpdmVuIG9iamVjdCByZWFsbHkgaXMgYSBkeW5hbWljYWxseSBsaW5rZWRcblwKKyAJCQlvYmplY3Qgd2UgY2FuIGhhbmRsZVxuXAorLSAgLS1pbmhpYml0LWNhY2hlICAgICAgIERvIG5vdCB1c2UgIiBMRF9TT19DQUNIRSAiXG5cCisrICAtLWluaGliaXQtY2FjaGUgICAgICAgRG8gbm90IHVzZSAlc1xuXAorICAgLS1saWJyYXJ5LXBhdGggUEFUSCAgIHVzZSBnaXZlbiBQQVRIIGluc3RlYWQgb2YgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnRcblwKKyAJCQl2YXJpYWJsZSBMRF9MSUJSQVJZX1BBVEhcblwKKyAgIC0taW5oaWJpdC1ycGF0aCBMSVNUICBpZ25vcmUgUlVOUEFUSCBhbmQgUlBBVEggaW5mb3JtYXRpb24gaW4gb2JqZWN0IG5hbWVzXG5cCisgCQkJaW4gTElTVFxuXAorLSAgLS1hdWRpdCBMSVNUICAgICAgICAgIHVzZSBvYmplY3RzIG5hbWVkIGluIExJU1QgYXMgYXVkaXRvcnNcbiIpOworKyAgLS1hdWRpdCBMSVNUICAgICAgICAgIHVzZSBvYmplY3RzIG5hbWVkIGluIExJU1QgYXMgYXVkaXRvcnNcbiIsIExEX1NPX0NBQ0hFKTsKKyAKKyAgICAgICArK19kbF9za2lwX2FyZ3M7CisgICAgICAgLS1fZGxfYXJnYzsKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaCBiL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCitpbmRleCA0YjQ5ODY5Li4xODAwZDAzIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmgKKysrKyBiL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCitAQCAtMjcsMTAgKzI3LDYgQEAKKyAgICgoZmxhZ3MpID09IDEgfHwgKGZsYWdzKSA9PSBfRExfQ0FDSEVfREVGQVVMVF9JRCkKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIExEX1NPX0NBQ0hFCistIyBkZWZpbmUgTERfU09fQ0FDSEUgU1lTQ09ORkRJUiAiL2xkLnNvLmNhY2hlIgorLSNlbmRpZgorLQorICNpZm5kZWYgYWRkX3N5c3RlbV9kaXIKKyAjIGRlZmluZSBhZGRfc3lzdGVtX2RpcihkaXIpIGFkZF9kaXIgKGRpcikKKyAjZW5kaWYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODc1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAyNTYwYjU2NGI1Njc0YmYyOTkwZTU2MDdmNjM0MmMxNjQ3YTVkYzRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgOCBNYXIgMjAxNSAwNDowMTowMSArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzI3XSBCYWNrcG9ydAorIGh0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1wb3J0cy8yMDA3LTEyL21zZzAwMDAwLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzIwMDctMTItMDMgIEtyaXN0aWFuIFZhbiBEZXIgVmxpZXQgIDx2YW5kZXJzQGxpcXd5ZC5jb20+CisKKyAgICAgICAgKiBiaXRzL3N0ZGlvLWxvY2suaCAoX0lPX2FjcXVpcmVfbG9ja19jbGVhcl9mbGFnczIpOiBEZWZpbmUKKworU2lnbmVkLW9mZi1ieTogS3Jpc3RpYW4gVmFuIERlciBWbGlldCA8dmFuZGVyc0BsaXF3eWQuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJpdHMvc3RkaW8tbG9jay5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2JpdHMvc3RkaW8tbG9jay5oIGIvYml0cy9zdGRpby1sb2NrLmgKK2luZGV4IDBjNWJiNjUuLjY2MzA0YTYgMTAwNjQ0CistLS0gYS9iaXRzL3N0ZGlvLWxvY2suaAorKysrIGIvYml0cy9zdGRpby1sb2NrLmgKK0BAIC00OSw2ICs0OSw4IEBAIF9fbGliY19sb2NrX2RlZmluZV9yZWN1cnNpdmUgKHR5cGVkZWYsIF9JT19sb2NrX3QpCisgICBfSU9fY2xlYW51cF9yZWdpb25fc3RhcnQgKCh2b2lkICgqKSAodm9pZCAqKSkgX0lPX2Z1bmxvY2tmaWxlLCAoX2ZwKSk7ICAgICAgXAorICAgX0lPX2Zsb2NrZmlsZSAoX2ZwKQorIAorKyMgZGVmaW5lIF9JT19hY3F1aXJlX2xvY2tfY2xlYXJfZmxhZ3MyKF9mcCkgX0lPX2FjcXVpcmVfbG9jayAoX2ZwKQorKworICMgZGVmaW5lIF9JT19yZWxlYXNlX2xvY2soX2ZwKSBcCisgICBfSU9fZnVubG9ja2ZpbGUgKF9mcCk7CQkJCQkJICAgICAgXAorICAgX0lPX2NsZWFudXBfcmVnaW9uX2VuZCAoMCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkM2Y4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxNTg0IEBACitGcm9tIGFhMGNkODI4OTJmMzJlNTg2MDIxNDNjNjk3ZWYwNTI0Njk2YTY0MjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDowMTo1MCArMDAwMAorU3ViamVjdDogW1BBVENIIDA1LzI3XSBmc2wgZTUwMC9lNTUwMC9lNjUwMC82MDNlIGZzcXJ0IGltcGxlbWVudGF0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogRWRtYXIgV2llbnNrb3NraSA8ZWRtYXJAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jICAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyAgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzICB8ICAgMSArCisgLi4uL2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcyAgICAgfCAgIDIgKworIC4uLi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMgICAgIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgMTkgZmlsZXMgY2hhbmdlZCwgMTQxOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcworCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMTAzYjRkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGRiMTdmCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEsMiBAQAorKyMgZTMwMGMzIGlzIGEgdmFyaWFudCBvZiA2MDNlIHNvIHVzZSB0aGUgc2FtZSBvcHRpbWl6YXRpb25zIGZvciBzcXJ0CisrcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43ZWFjNWZjCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2NGIyYTcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEyNTkzNDQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmE3YmM4NTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjA0ZmY4Y2MKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWMyMjdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNWVjMWJjNTE3Mjg1MTI3ODIzMWNlOTQwYjY4YjM1Y2U5Y2JmODUwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjExOjIyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMjddIHJlYWRsaWI6IEFkZCBPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMgdG8ga25vd24KKyBuYW1lcworCitUaGlzIGJvbHRzIGluIGEgaG9vayBmb3IgT0UgdG8gcGFzcyBpdHMgb3duIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIKK25hbWVzIGludG8gZ2xpYmMgZXNwZWNpYWxseSBmb3IgbXVsdGlsaWIgY2FzZSwgd2hlcmUgaXQgZGlmZmVycyBmcm9tIGFueQorb3RoZXIgZGlzdHJvcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBMaWFuaGFvIEx1IDxsaWFuaGFvLmx1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvcmVhZGxpYi5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9lbGYvcmVhZGxpYi5jIGIvZWxmL3JlYWRsaWIuYworaW5kZXggN2ZkNWI4YS4uMmY1ZGE5ZiAxMDA2NDQKKy0tLSBhL2VsZi9yZWFkbGliLmMKKysrKyBiL2VsZi9yZWFkbGliLmMKK0BAIC01MSw2ICs1MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga25vd25fbmFtZXMgaW50ZXJwcmV0ZXJzW10gPQorICNpZmRlZiBTWVNERVBfS05PV05fSU5URVJQUkVURVJfTkFNRVMKKyAgIFNZU0RFUF9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUworICNlbmRpZgorKyAgT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTCisgfTsKKyAKKyBzdGF0aWMgc3RydWN0IGtub3duX25hbWVzIGtub3duX2xpYnNbXSA9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM4ZmJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoCkBAIC0wLDAgKzEsMjA4IEBACitGcm9tIGVhOThiMWExMmI1Zjc3OWZkNzk0NzhmZjkzMGE3OWVmNjAzODc4NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxNTowNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzI3XSBwcGMvc3FydDogRml4IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3FydF9maW5pdGUnCisKK29uIHBwYyBmaXhlcyB0aGUgZXJyb3JzIGxpa2UgYmVsb3cKK3wgLi8ubGlicy9saWJwdWxzZWNvcmUtMS4xLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3NxcnRfZmluaXRlJworfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ2hhbmdlTG9nCisKKzIwMTItMDEtMDYgIEtoZW0gUmFqICA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jOiBBZGQgX18qX2Zpbml0ZSBhbGlhcy4KKyAgICAgICAgUmVtb3ZlIGNydWZ0LgorICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jOiBEaXR0by4KKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jOiBEaXR0by4KKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYzogRGl0dG8uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jICAgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAxICsKKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi4xNzk1ZmQ2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworQEAgLTM5LDE0ICszOSw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBkb3VibGUKKyBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCistI2Vsc2UKKy1kb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKy0gICAgIGRvdWJsZSBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC0xMzIsMyArMTI2LDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLmE5MTdmMzEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK0BAIC0zNywxNCArMzcsOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorICAgIHNxdWFyZSByb290LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBmbG9hdAorIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKy0jZWxzZQorLWZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorLSAgICAgZmxvYXQgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTksMyArOTMsNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uMTc5NWZkNiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTM5LDE0ICszOSw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBkb3VibGUKKyBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCistI2Vsc2UKKy1kb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKy0gICAgIGRvdWJsZSBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC0xMzIsMyArMTI2LDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uYTkxN2YzMSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzcsMTQgKzM3LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKyBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCistI2Vsc2UKKy1mbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKy0gICAgIGZsb2F0IGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTk5LDMgKzkzLDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZmE5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKQEAgLTAsMCArMSwzODcgQEAKK0Zyb20gMjQ1NmVhNDRhZWVlZGFlODdlZGI1MjJmNzdhNzk2OWQ2MzYzOTliMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjE2OjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMjddIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKKyBvdXQgX19zbG93IHZlcnNpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyAgICB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jICAgfCAgOCArKysrKysrLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyAgfCAxNCArKysrKysrKysrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMTQgKysrKysrKysrKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8ICA4ICsrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8ICA4ICsrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCAgOSArKysrKysrKy0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMTQgKysrKysrKysrKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMTIgKysrKysrKysrKy0tCisgMTIgZmlsZXMgY2hhbmdlZCwgMTE0IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK2luZGV4IDE3OTVmZDYuLmRhYTgzZjMgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC03Nyw3ICs3Nyw3IEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEyNiw0ICsxMjYsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworaW5kZXggYTkxN2YzMS4uYjgxMmNmMSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTkzLDQgKzkzLDEwIEBAIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9Cisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uMWMzNDI0NCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjgxMjY1MzUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDE3OTVmZDYuLjEzYTgxOTcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTc3LDcgKzc3LDcgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTI2LDQgKzEyNiwxMiBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggYTkxN2YzMS4uZmFlMmQ4MSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIHNxdWFyZSByb290LiAgKi8KKyAKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTMsNCArOTMsMTEgQEAgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjU0NzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gYWNmN2EwMjg4MTdlNzFlYjk5ZDc4NTAzNzY1OWFiZDRkMTIwZmZlMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjIwOjA5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMjddIFF1b3RlIGZyb20gYnVnIDE0NDMgd2hpY2ggZXhwbGFpbnMgd2hhdCB0aGUgcGF0Y2ggZG9lcworIDoKKworICBXZSBidWlsZCBzb21lIHJhbmRvbSBwcm9ncmFtIGFuZCBsaW5rIGl0IHdpdGggLWx1c3QuICBXaGVuIHdlIHJ1biBpdCwKKyAgaXQgZGllcyB3aXRoIGEgU0lHU0VHViBiZWZvcmUgcmVhY2hpbmcgbWFpbigpLgorCisgIExpYnVzdC5zbyBkZXBlbmRzIG9uIGxpYnVyY3UtYnAuc28gZnJvbSB0aGUgdXNlcm1vZGUtcmN1IHBhY2thZ2UuCisgIEFsdGhvdWdoIGxpYnVzdC5zbyBpcyBub3QgcHJlbGlua2VkLCBsaWJ1cmN1LWJwLnNvIElTIHByZWxpbmtlZDsgdGhpcworICBpcyBjcml0aWNhbC4KKworICBMaWJ1c3Quc28gdXNlcyBhIFRMUyAvIF9fdGhyZWFkIHZhcmlhYmxlIHRoYXQgaXMgZGVmaW5lZCBpbiBsaWJ1cmN1LQorICBicC5zby4gIFRoZXJlIGFyZSBzcGVjaWFsIEFSTS1zcGVjaWZpYyByZWxvY2F0aW9uIHR5cGVzIHRoYXQgYWxsb3cgdHdvCisgIHNoYXJlZCBsaWJyYXJpZXMgdG8gc2hhcmUgdGhyZWFkLXNwZWNpZmljIGRhdGEuICBUaGlzIGlzIGNyaXRpY2FsIHRvby4KKworICBPbmUgbW9yZSBjcml0aWNhbCBpc3N1ZTogYWx0aG91Z2ggbGlidXJjdS1icC5zbyBpcyBwcmVsaW5rZWQsIHdlIGNhbid0CisgIGxvYWQgaXQgYXQgaXRzIHByZWxpbmtlZCBhZGRyZXNzLCBiZWNhdXNlIHdlIGFsc28gbGluayBhZ2FpbnN0CisgIGxpYnJ0LnNvLCBhbmQgbGlicnQuc28gdXNlcyB0aGF0IGFkZHJlc3MuCisKKyAgVGhlIGR5bmFtaWMgbGlua2VyIGlzIGZvcmNlZCB0byByZWxpbmsgbGlidXJjdS1icC5zbyBhdCBhIGRpZmZlcmVudAorICBhZGRyZXNzLiAgSW4gdGhlIGNvdXJzZSBvZiByZWxpbmtpbmcsIGl0IHByb2Nlc3NlcyB0aGUgc3BlY2lhbCBBUk0KKyAgcmVsb2NhdGlvbiByZWNvcmQgbWVudGlvbmVkIGFib3ZlLiAgVGhlIHByZWxpbmtlciBoYXMgYWxyZWFkeSBmaWxsZWQKKyAgaW4gdGhlIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIHNob3J0IG9mZnNldCBpbnRvIGEgdGFibGUgb2YgdGhyZWFkLQorICBzcGVjaWZpYyBkYXRhIHRoYXQgaXMgYWxsb2NhdGVkIHBlci10aHJlYWQgZm9yIGVhY2ggbGlicmFyeSB0aGF0IHVzZXMKKyAgVExTLiAgQmVjYXVzZSB0aGUgbm9ybWFsIGJlaGF2aW9yIG9mIGEgcmVsb2NhdGlvbiBpcyB0byBhZGQgdGhlIHN5bWJvbAorICB2YWx1ZSB0byBhbiBhZGRlbmQgc3RvcmVkIGF0IHRoZSBhZGRyZXNzIGJlaW5nIHJlbG9jYXRlZCwgd2UgZW5kIHVwCisgIGFkZGluZyB0aGUgc2hvcnQgb2Zmc2V0IHRvIGl0c2VsZiwgZG91YmxpbmcgaXQuCisKKyAgTm93IHdlIGhhdmUgYW4gYXdrd2FyZCBzaXR1YXRpb24uICBUaGUgbGlidXN0LnNvIGxpYnJhcnkgZG9lc24ndCBrbm93CisgIGFib3V0IHRoZSBhZGRlbmQsIHNvIGl0cyBUTFMgZGF0YSBmb3IgdGhpcyBlbGVtZW50IGlzIGNvcnJlY3QuICBUaGUKKyAgbGlidXJjdS1icC5zbyBsaWJyYXJ5IGhhcyBhIGRpZmZlcmVudCBvZmZzZXQgZm9yIHRoZSBlbGVtZW50LiAgV2hlbiB3ZQorICBnbyB0byBpbml0aWFsaXplIHRoZSBlbGVtZW50IGZvciB0aGUgZmlyc3QgdGltZSBpbiBsaWJ1cmN1LWJwLnNvLCB3ZQorICB3cml0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgcmVzdWx0IGF0IHRoZSBkb3VibGVkIChicm9rZW4pIG9mZnNldC4KKyAgTGF0ZXIsIHdoZW4gd2UgcmVmZXIgdG8gdGhlIGFkZHJlc3MgZnJvbSBsaWJ1c3Quc28sIHdlIGNoZWNrIHRoZSB2YWx1ZQorICBhdCB0aGUgY29ycmVjdCBvZmZzZXQsIGJ1dCBpdCdzIE5VTEwsIHNvIHdlIGVhdCBob3QgU0lHU0VHVi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL2FybS9kbC1tYWNoaW5lLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmggYi9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKK2luZGV4IDZmYjIwYmQuLjg4MDU1MzcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKKysrKyBiL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAorQEAgLTQ5OSw3ICs0OTksNyBAQCBlbGZfbWFjaGluZV9yZWwgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBjb25zdCBFbGYzMl9SZWwgKnJlbG9jLAorIAorIAljYXNlIFJfQVJNX1RMU19EVFBPRkYzMjoKKyAJICBpZiAoc3ltICE9IE5VTEwpCistCSAgICAqcmVsb2NfYWRkciArPSBzeW0tPnN0X3ZhbHVlOworKwkgICAgKnJlbG9jX2FkZHIgPSBzeW0tPnN0X3ZhbHVlOworIAkgIGJyZWFrOworIAorIAljYXNlIFJfQVJNX1RMU19UUE9GRjMyOgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzFlNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDAxNzMyMmVlMjhjMTU3OWNlNmM4MTkwNDg0MmFhYWRhOWM4MjQwM2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDE5IERlYyAyMDEyIDA0OjM5OjU3IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMjddIGVnbGliYzogcnVuIGxpYm0tZXJyLXRhYi5wbCB3aXRoIHNwZWNpZmljIGRpcnMgaW4gJHtTfQorCitsaWJtLWVyci10YWIucGwgd2lsbCBwYXJzZSBhbGwgdGhlIGZpbGVzIG5hbWVkICJsaWJtLXRlc3QtdWxwcyIKK2luIHRoZSBnaXZlbiBkaXIgcmVjdXJzaXZlbHkuIFRvIGF2b2lkIHBhcnNpbmcgdGhlIG9uZSBpbgorJHtTfS8ucGMvIChpdCBkb2VzIGV4aXN0IGFmdGVyIGVnbGliYyBhZGRzIGFhcmNoNjQgc3VwcG9ydCwKKyR7U30vLnBjL2FhcmNoNjQtMDAwMS1nbGliYy1mc2YtdjEtZWFmNmYyMDUucGF0Y2gvcG9ydHMvc3lzZGVwcy8KK2FhcmNoNjQvbGlibS10ZXN0LXVscHMpLCBydW4gbGlibS1lcnItdGFiLnBsIHdpdGggc3BlY2lmaWMgZGlycworaW4gJHtTfS4KKworVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorLS0tCisgbWFudWFsL01ha2VmaWxlIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tYW51YWwvTWFrZWZpbGUgYi9tYW51YWwvTWFrZWZpbGUKK2luZGV4IDUzODIyMDguLjZiNzAxYjAgMTAwNjQ0CistLS0gYS9tYW51YWwvTWFrZWZpbGUKKysrKyBiL21hbnVhbC9NYWtlZmlsZQorQEAgLTEwNSw3ICsxMDUsOCBAQCAkKG9ianBmeClsaWJtLWVyci50ZXhpOiAkKG9ianBmeClzdGFtcC1saWJtLWVycgorICQob2JqcGZ4KXN0YW1wLWxpYm0tZXJyOiBsaWJtLWVyci10YWIucGwgJCh3aWxkY2FyZCAkKGZvcmVhY2ggZGlyLCQoc3lzZGlycyksXAorIAkJCQkJCSAgICAgJChkaXIpL2xpYm0tdGVzdC11bHBzKSkKKyAJcHdkPWBwd2RgOyBcCistCSQoUEVSTCkgJDwgJCRwd2QvLi4gPiAkKG9ianBmeClsaWJtLWVyci10bXAKKysJJChQRVJMKSAkPCAkJHB3ZC8uLi9wb3J0cyA+ICQob2JqcGZ4KWxpYm0tZXJyLXRtcAorKwkkKFBFUkwpICQ8ICQkcHdkLy4uL3N5c2RlcHMgPj4gJChvYmpwZngpbGlibS1lcnItdG1wCisgCSQobW92ZS1pZi1jaGFuZ2UpICQob2JqcGZ4KWxpYm0tZXJyLXRtcCAkKG9ianBmeClsaWJtLWVyci50ZXhpCisgCXRvdWNoICRACisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ExMTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gMWJlNDVmODcwZWJiYjAyNTliZWE1MjUwYTZkMmMyZmJjYjMzNDA5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI0OjQ2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMjddIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKKyBvdXQgX19zbG93IHZlcnNpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBjaHVucm9uZyBndW8gPEI0MDI5MEBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICB8IDYgKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCAxYzM0MjQ0Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggODEyNjUzNS4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjc3OTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDQ5NDcxYWIxZjkwZTM5MmRhOTUyMGVlYTgzMWNlODczMWJlOWZjOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDEyLzI3XSBNYWtlIGxkIC0tdmVyc2lvbiBvdXRwdXQgbWF0Y2hpbmcgZ3JvayBnb2xkJ3Mgb3V0cHV0CisKK2FkYXB0ZWQgZnJvbSBmcm9tIHVwc3RyZWFtIGJyYW5jaCByb2xhbmQvZ29sZC12cy1saWJjCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSAgICB8IDIgKy0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDQ1Y2M3Y2IuLjdkNzI5OWEgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ3MDksNyArNDcwOSw3IEBAIGVsc2UKKyAgICMgRm91bmQgaXQsIG5vdyBjaGVjayB0aGUgdmVyc2lvbi4KKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdmVyc2lvbiBvZiAkTEQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHZlcnNpb24gb2YgJExELi4uICIgPiY2OyB9CistICBhY19wcm9nX3ZlcnNpb249YCRMRCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAncy9eLipHTlUgbGQuKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICBhY19wcm9nX3ZlcnNpb249YCRMRCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAncy9eLipHTlUgW0JiaW51dGlsc2RdW14uXSogXChbMC05XVswLTldKlwuWzAtOS5dKlwpLiokL1wxL3AnYAorICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCisgICAgICcnKSBhY19wcm9nX3ZlcnNpb249InYuID8uPz8sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OworICAgICAyLjFbMC05XVswLTldKnwyLjJbMi05XSp8Mi5bMy05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qKQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggN2U5MzgzYS4uYTQ2N2E2OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtOTQxLDcgKzk0MSw3IEBAIEFDX0NIRUNLX1BST0dfVkVSKEFTLCAkQVMsIC0tdmVyc2lvbiwKKyAJCSAgWzIuMVswLTldWzAtOV0qfDIuMlsyLTldKnwyLlszLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSpdLAorIAkJICBBUz06IGNyaXRpY19taXNzaW5nPSIkY3JpdGljX21pc3NpbmcgYXMiKQorIEFDX0NIRUNLX1BST0dfVkVSKExELCAkTEQsIC0tdmVyc2lvbiwKKy0JCSAgW0dOVSBsZC4qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKV0sCisrCQkgIFtHTlUgW0JiaW51dGlsc2RdW14uXSogXChbMC05XVswLTldKlwuWzAtOS5dKlwpXSwKKyAJCSAgWzIuMVswLTldWzAtOV0qfDIuMlsyLTldKnwyLlszLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSpdLAorIAkJICBMRD06IGNyaXRpY19taXNzaW5nPSIkY3JpdGljX21pc3NpbmcgbGQiKQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmZGE5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGI1NWU0OWIxOTljNDZhMjc4YWI2NmI2YjFlM2VhYjQ4M2I5MTMxOTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNzoxMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEzLzI3XSBzeXNkZXBzL2dudS9jb25maWd1cmUuYWM6IGhhbmRsZSBjb3JyZWN0bHkKKyAkbGliY19jdl9yb290c2JpbmRpcgorCitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXR0aGlldSBDcmFwZXQgPE1hdHRoaWV1LkNyYXBldEBpbmdlbmljby5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9nbnUvY29uZmlndXJlICAgIHwgMiArLQorIHN5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZSBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQoraW5kZXggOTIzOTI5Ny4uYzVlZDNjYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlCitAQCAtMzIsNiArMzIsNiBAQCBjYXNlICIkcHJlZml4IiBpbgorICAgZWxzZQorICAgICBsaWJjX2N2X2xvY2Fsc3RhdGVkaXI9JGxvY2Fsc3RhdGVkaXIKKyAgICBmaQorLSAgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorKyAgdGVzdCAtbiAiJGxpYmNfY3Zfcm9vdHNiaW5kaXIiIHx8IGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKyAgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworaW5kZXggNjM0ZmU0ZC4uM2RiMTY5NyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjCitAQCAtMjEsNiArMjEsNiBAQCBjYXNlICIkcHJlZml4IiBpbgorICAgZWxzZQorICAgICBsaWJjX2N2X2xvY2Fsc3RhdGVkaXI9JGxvY2Fsc3RhdGVkaXIKKyAgICBmaQorLSAgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorKyAgdGVzdCAtbiAiJGxpYmNfY3Zfcm9vdHNiaW5kaXIiIHx8IGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKyAgIDs7CisgZXNhYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE1ZDJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDAyMjlkNmM5YzBlNzcyMTc3MzExOGQ1YWUxZDE3MmMyNjliYzk4MjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyODo0MSArMDAwMAorU3ViamVjdDogW1BBVENIIDE0LzI3XSBBZGQgdW51c2VkIGF0dHJpYnV0ZQorCitIZWxwcyBpbiBhdm9pZGluZyBnY2Mgd2FybmluZyB3aGVuIGhlYWRlciBpcyBpcyBpbmNsdWRlZCBpbgorYSBzb3VyY2UgZmlsZSB3aGljaCBkb2VzIG5vdCB1c2UgYm90aCBmdW5jdGlvbnMKKworICAgICAgICAqIGljb252L2djb252X2NoYXJzZXQuaCAoc3RyaXApOgorICAgICAgICBBZGQgdW51c2VkIGF0dHJpYnV0ZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBpY29udi9nY29udl9jaGFyc2V0LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pY29udi9nY29udl9jaGFyc2V0LmggYi9pY29udi9nY29udl9jaGFyc2V0LmgKK2luZGV4IDgwMjkwYmMuLjc4OTBhOGUgMTAwNjQ0CistLS0gYS9pY29udi9nY29udl9jaGFyc2V0LmgKKysrKyBiL2ljb252L2djb252X2NoYXJzZXQuaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBzdHJpcCAoY2hhciAqd3AsIGNvbnN0IGNoYXIgKnMpCisgeworICAgaW50IHNsYXNoX2NvdW50ID0gMDsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS1XaGVuLWRpc2FibGluZy1TU0UtYWxzby1tYWtlLXN1cmUtdGhhdC1mcG1hdGgtaXMtbm90LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS1XaGVuLWRpc2FibGluZy1TU0UtYWxzby1tYWtlLXN1cmUtdGhhdC1mcG1hdGgtaXMtbm90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjYxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBmMDU4Yzg4NGRkMjZkMTBjOTQ1NTBjYTUyNTJlZDY1NzY2MTRkNjU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgRmViIDIwMTUgMDM6MjM6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8yN10gV2hlbiBkaXNhYmxpbmcgU1NFIGFsc28gbWFrZSBzdXJlIHRoYXQgZnBtYXRoIGlzIG5vdAorIHNldCB0byB1c2UgU1NFIGFzIHdlbGwKKworVGhpcyBmaXhlcyBlcnJvcnMgd2hlbiB3ZSBpbmplY3Qgc3NlIG9wdGlvbnMgdGhyb3VnaCBDRkxBR1MgYW5kIG5vdwordGhhdCB3ZSBoYXZlIC1XZXJyb3IgdHVybmVkIG9uIGJ5IGRlZmF1bHQgdGhpcyB3YXJuaW5nIHR1cm5zIHRvIGJlY29tZQorZXJyb3Igb24geDg2CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3lzZGVwcy94ODYvTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3g4Ni9NYWtlZmlsZSBiL3N5c2RlcHMveDg2L01ha2VmaWxlCitpbmRleCAxOWY1ZWNhLi44MjdlYTcxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy94ODYvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMveDg2L01ha2VmaWxlCitAQCAtMSw2ICsxLDYgQEAKKyBpZmVxICgkKHN1YmRpciksZWxmKQorIENGTEFHUy0ub3MgKz0gJChpZiAkKGZpbHRlciAkKEBGKSwkKHBhdHN1YnN0ICUsJS5vcywkKGFsbC1ydGxkLXJvdXRpbmVzKSkpLFwKKy0JCSAgIC1tbm8tc3NlIC1tbm8tbW14KQorKwkJICAgLW1uby1zc2UgLW1uby1tbXggLW1mcG1hdGg9Mzg3KQorIAorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWxkLXNzZS11c2Uub3V0CisgJChvYmpwZngpdHN0LWxkLXNzZS11c2Uub3V0OiAuLi9zeXNkZXBzL3g4Ni90c3QtbGQtc3NlLXVzZS5zaCAkKG9ianBmeClsZC5zbworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODllOGIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaApAQCAtMCwwICsxLDI2MyBAQAorRnJvbSA3MDE5OWZlNTljMzhiNjIxYWI0MTIxZDdhNTU3MTliMmIyOWIzNmRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MzE6MDYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8yN10gJ3llcycgd2l0aGluIHRoZSBwYXRoIHNldHMgd3JvbmcgY29uZmlnIHZhcmlhYmxlcworCitJdCBzZWVtcyB0aGF0IHRoZSAnQUNfRUdSRVBfQ1BQKHllcy4uLicgZXhhbXBsZSBpcyBxdWl0ZSBwb3B1bGFyCitidXQgYmVpbmcgc3VjaCBhIHNob3J0IHdvcmQgdG8gZ3JlcCBpdCBpcyBsaWtlbHkgdG8gcHJvZHVjZQorZmFsc2UtcG9zaXRpdmUgbWF0Y2hlcyB3aXRoIHRoZSBwYXRoIGl0IGlzIGNvbmZpZ3VyZWQgaW50by4KKworVGhlIGNoYW5nZSBpcyB0byB1c2UgYSBtb3JlIGVsYWJvcmF0ZWQgc3RyaW5nIHRvIGdyZXAgZm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbbGliYy1hbHBoYUBzb3VyY2V3YXJlLm9yZ10KKworU2lnbmVkLW9mZi1ieTogQmVuamFtaW4gRXNxdWl2ZWwgPGJlbmphbWluLmVzcXVpdmVsQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL2FybS9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL2FybS9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL21pcHMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL21pcHMvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL25pb3MyL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUgICAgfCA4ICsrKystLS0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjIHwgOCArKysrLS0tLQorIDEyIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZSBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKK2luZGV4IDViZDM1NWEuLjNiYzU1MzcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlCitAQCAtMTQ4LDEyICsxNDgsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX19BQVJDSDY0RUJfXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgaXNfYWFyY2g2NF9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJpc19hYXJjaDY0X2JlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9hYXJjaDY0X2JlPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfYWFyY2g2NF9iZT1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCitpbmRleCA3ODUxZGQ0Li42ZTkyMzgxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYworQEAgLTEwLDggKzEwLDggQEAgR0xJQkNfUFJPVklERVMgZG5sIFNlZSBhY2xvY2FsLm00IGluIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KKyAjIHRoZSBkeW5hbWljIGxpbmtlciB2aWEgJWlmZGVmLgorIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYmlnIGVuZGlhbl0sCisgICBbbGliY19jdl9hYXJjaDY0X2JlXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX19BQVJDSDY0RUJfXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAoaXNfYWFyY2g2NF9iZSxbI2lmZGVmIF9fQUFSQ0g2NEVCX18KKysgICAgICAgICAgICAgICAgICAgICAgaXNfYWFyY2g2NF9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9hYXJjaDY0X2JlPXllcywgbGliY19jdl9hYXJjaDY0X2JlPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9hYXJjaDY0X2JlID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vY29uZmlndXJlIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlCitpbmRleCAxNTgxMTZiLi41ZWFmNTRlIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vY29uZmlndXJlCisrKysgYi9zeXNkZXBzL2FybS9jb25maWd1cmUKK0BAIC0xNTEsMTIgKzE1MSwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX0FSTV9QQ1NfVkZQCistCQkgICAgICB5ZXMKKysJCSAgICAgIHVzZV9hcm1fcGNzX3ZmcAorIAkJICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX2FybV9wY3NfdmZwIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9hcm1fcGNzX3ZmcD15ZXMKKyBlbHNlCisgICBsaWJjX2N2X2FybV9wY3NfdmZwPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjCitpbmRleCA4NTljOTJhLi4yZjRhNmUyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKK0BAIC0xNSw4ICsxNSw4IEBAIEFDX0RFRklORShQSV9TVEFUSUNfQU5EX0hJRERFTikKKyAjIHRoZSBkeW5hbWljIGxpbmtlciB2aWEgJWlmZGVmLgorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgQVJNIGhhcmQtZmxvYXQgQUJJXSwKKyAgIFtsaWJjX2N2X2FybV9wY3NfdmZwXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX19BUk1fUENTX1ZGUAorLQkJICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKHVzZV9hcm1fcGNzX3ZmcCxbI2lmZGVmIF9fQVJNX1BDU19WRlAKKysJCSAgICAgIHVzZV9hcm1fcGNzX3ZmcAorIAkJICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfYXJtX3Bjc192ZnA9eWVzLCBsaWJjX2N2X2FybV9wY3NfdmZwPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9hcm1fcGNzX3ZmcCA9IHllczsgdGhlbgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlCitpbmRleCA0ZTEzMjQ4Li5mMTRhZjk1IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZQorQEAgLTE0MywxMSArMTQzLDExIEBAIGVsc2UKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZgorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfbWlwc19uYW4yMDA4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9taXBzX25hbjIwMDg9eWVzCisgZWxzZQorICAgbGliY19jdl9taXBzX25hbjIwMDg9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworaW5kZXggYmNiZGFmZi4uYWQzMDU3ZiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMKK0BAIC02LDkgKzYsOSBAQCBkbmwgcG9zaXRpb24gaW5kZXBlbmRlbnQgd2F5LgorIGRubCBBQ19ERUZJTkUoUElfU1RBVElDX0FORF9ISURERU4pCisgCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSAyMDA4IE5hTiBlbmNvZGluZ10sCistICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh5ZXMsIFtkbmwKKysgIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHVzZV9taXBzX25hbjIwMDgsIFtkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmXSwgbGliY19jdl9taXBzX25hbjIwMDg9eWVzLCBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubyldKQorIGlmIHRlc3QgeCRsaWJjX2N2X21pcHNfbmFuMjAwOCA9IHh5ZXM7IHRoZW4KKyAgIEFDX0RFRklORShIQVZFX01JUFNfTkFOMjAwOCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZSBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlCitpbmRleCAxNGM4YTNhLi5kZGUzODE0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlCitAQCAtMTQyLDEyICsxNDIsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX19uaW9zMl9iaWdfZW5kaWFuX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgIGlzX25pb3MyX2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgImlzX25pb3MyX2JlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9uaW9zMl9iZT15ZXMKKyBlbHNlCisgICBsaWJjX2N2X25pb3MyX2JlPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYworaW5kZXggZjA1ZjQzOC4uZGM4NjM5OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYworQEAgLTQsOCArNCw4IEBAIEdMSUJDX1BST1ZJREVTIGRubCBTZWUgYWNsb2NhbC5tNCBpbiB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgIyBOaW9zIElJIGJpZyBlbmRpYW4gaXMgbm90IHlldCBzdXBwb3J0ZWQuCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBiaWcgZW5kaWFuXSwKKyAgIFtsaWJjX2N2X25pb3MyX2JlXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX19uaW9zMl9iaWdfZW5kaWFuX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKGlzX25pb3MyX2JlLFsjaWZkZWYgX19uaW9zMl9iaWdfZW5kaWFuX18KKysgICAgICAgICAgICAgICAgICAgICAgaXNfbmlvczJfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfbmlvczJfYmU9eWVzLCBsaWJjX2N2X25pb3MyX2JlPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9uaW9zMl9iZSA9IHllczsgdGhlbgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKK2luZGV4IDgzZjhiMTMuLjJiNmNiZWUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKK0BAIC0zODcsMTEgKzM4NywxMSBAQCBlbHNlCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIGRubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWYKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX21pcHNfbmFuMjAwOCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcworIGVsc2UKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYworaW5kZXggNTAzOWVjOS4uMTAzNWY3NiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYworQEAgLTk4LDkgKzk4LDkgQEAgQUNfQ09NUElMRV9JRkVMU0UoCisgTElCQ19DT05GSUdfVkFSKFttaXBzLW1vZGUtc3dpdGNoXSxbJHtsaWJjX21pcHNfbW9kZV9zd2l0Y2h9XSkKKyAKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIDIwMDggTmFOIGVuY29kaW5nXSwKKy0gIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHllcywgW2RubAorKyAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAodXNlX21pcHNfbmFuMjAwOCwgW2RubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWZdLCBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMsIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vKV0pCisgCisgbGliY19taXBzX25hbj0KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKK2luZGV4IDcwYmIxOGEuLmZmZDllM2UgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZQorQEAgLTE1NSwxMiArMTU1LDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmIF9DQUxMX0VMRiA9PSAyCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICB1c2VfcHBjX2VsZnYyX2FiaQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfcHBjX2VsZnYyX2FiaSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPW5vCitAQCAtMTg4LDEyICsxODgsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX0NBTExfRUxGCistICAgICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICAgICBpc19kZWZfY2FsbF9lbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJpc19kZWZfY2FsbF9lbGYiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj15ZXMKKyBlbHNlCisgICBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYworaW5kZXggMDgyMjkxNS4uOWEzMmZkZCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjCitAQCAtNiw4ICs2LDggQEAgTElCQ19TTElCRElSX1JUTERESVIoW2xpYjY0XSwgW2xpYjY0XSkKKyAjIERlZmluZSBkZWZhdWx0LWFiaSBhY2NvcmRpbmcgdG8gY29tcGlsZXIgZmxhZ3MuCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSBQb3dlclBDNjQgRUxGdjIgQUJJXSwKKyAgIFtsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaV0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmIF9DQUxMX0VMRiA9PSAyCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUCh1c2VfcHBjX2VsZnYyX2FiaSxbI2lmIF9DQUxMX0VMRiA9PSAyCisrICAgICAgICAgICAgICAgICAgICAgIHVzZV9wcGNfZWxmdjJfYWJpCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT15ZXMsIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmkgPSB5ZXM7IHRoZW4KK0BAIC0xOSw4ICsxOSw4IEBAIGVsc2UKKyAgICMgQ29tcGlsZXIgdGhhdCBkbyBub3Qgc3VwcG9ydCBFTEZ2MiBBQkkgZG9lcyBub3QgZGVmaW5lIF9DQUxMX0VMRgorICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGRlZmluZXMgX0NBTExfRUxGXSwKKyAgICAgW2xpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmXSwKKy0gICAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfQ0FMTF9FTEYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgIFtBQ19FR1JFUF9DUFAoaXNfZGVmX2NhbGxfZWxmLFsjaWZkZWYgX0NBTExfRUxGCisrICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2RlZl9jYWxsX2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgIF0sIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPXllcywgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9bm8pXSkKKyAgIGlmIHRlc3QgJGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmID0gbm87IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZTgyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBjOTAzMDYxMDdmYmJlMjk3OTAxMjkxN2U4Nzc0N2NlNzhjODJhYjg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MzM6MDMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8yN10gdGltZXpvbmU6IHJlLXdyaXR0ZW4gdHpzZWxlY3QgYXMgcG9zaXggc2gKKworVG8gYXZvaWQgdGhlIGJhc2ggZGVwZW5kZW5jeS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyB0aW1lem9uZS9NYWtlZmlsZSAgICAgfCAyICstCisgdGltZXpvbmUvdHpzZWxlY3Qua3NoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGltZXpvbmUvTWFrZWZpbGUgYi90aW1lem9uZS9NYWtlZmlsZQoraW5kZXggMjRjOTNjNi4uODg2YjA2ZSAxMDA2NDQKKy0tLSBhL3RpbWV6b25lL01ha2VmaWxlCisrKysgYi90aW1lem9uZS9NYWtlZmlsZQorQEAgLTEyNiw3ICsxMjYsNyBAQCAkKHRlc3RkYXRhKS9YVCU6IHRlc3RkYXRhL1hUJQorIAljcCAkPCAkQAorIAorICQob2JqcGZ4KXR6c2VsZWN0OiB0enNlbGVjdC5rc2ggJChjb21tb24tb2JqcGZ4KWNvbmZpZy5tYWtlCistCXNlZCAtZSAnc3wvYmluL2Jhc2h8JChCQVNIKXwnIFwKKysJc2VkIC1lICdzfC9iaW4vYmFzaHwvYmluL3NofCcgXAorIAkgICAgLWUgJ3N8VFpESVI9W159XSp8VFpESVI9JCh6b25lZGlyKXwnIFwKKyAJICAgIC1lICcvVFpWRVJTSU9OPS9zfHNlZV9NYWtlZmlsZXwiJCh2ZXJzaW9uKSJ8JyBcCisgCSAgICAtZSAnL1BLR1ZFUlNJT049L3N8PS4qfD0iJChQS0dWRVJTSU9OKSJ8JyBcCitkaWZmIC0tZ2l0IGEvdGltZXpvbmUvdHpzZWxlY3Qua3NoIGIvdGltZXpvbmUvdHpzZWxlY3Qua3NoCitpbmRleCA5ZDcwNjkxLi4yNWY0NWE4IDEwMDc1NQorLS0tIGEvdGltZXpvbmUvdHpzZWxlY3Qua3NoCisrKysgYi90aW1lem9uZS90enNlbGVjdC5rc2gKK0BAIC0zNSw3ICszNSw3IEBAIFJFUE9SVF9CVUdTX1RPPXR6QGlhbmEub3JnCisgCisgIyBTcGVjaWZ5IGRlZmF1bHQgdmFsdWVzIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaWYgdGhleSBhcmUgdW5zZXQuCisgOiAke0FXSz1hd2t9CistOiAke1RaRElSPWBwd2RgfQorKzogJHtUWkRJUj0kKHB3ZCl9CisgCisgIyBDaGVjayBmb3IgYXdrIFBvc2l4IGNvbXBsaWFuY2UuCisgKCRBV0sgLXYgeD15ICdCRUdJTiB7IGV4aXQgMTIzIH0nKSA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhY2JjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDYxOSBAQAorRnJvbSBlZmYwNDgwNzRhYzdiNTI1OGJiNjE1ZTVhNWIyMjFkYWExOWIxOGFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDI6NTggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8yN10gZWdsaWJjOiBDcm9zcyBidWlsZGluZyBhbmQgdGVzdGluZyBpbnN0cnVjdGlvbnMKKworUG9ydGVkIGZyb20gZWdsaWJjCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIEdMSUJDLmNyb3NzLWJ1aWxkaW5nIHwgMzgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIEdMSUJDLmNyb3NzLXRlc3RpbmcgIHwgMjA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNTg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgR0xJQkMuY3Jvc3MtYnVpbGRpbmcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgR0xJQkMuY3Jvc3MtdGVzdGluZworCitkaWZmIC0tZ2l0IGEvR0xJQkMuY3Jvc3MtYnVpbGRpbmcgYi9HTElCQy5jcm9zcy1idWlsZGluZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmU2ZTBkYTEKKy0tLSAvZGV2L251bGwKKysrKyBiL0dMSUJDLmNyb3NzLWJ1aWxkaW5nCitAQCAtMCwwICsxLDM4MyBAQAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgQ3Jvc3MtQ29tcGlsaW5nIEdMSUJDCisrICAgICAgICAgICAgICAgICAgSmltIEJsYW5keSA8amltYkBjb2Rlc291cmNlcnkuY29tPgorKworKworK0ludHJvZHVjdGlvbgorKworK01vc3QgR05VIHRvb2xzIGhhdmUgYSBzaW1wbGUgYnVpbGQgcHJvY2VkdXJlOiB5b3UgcnVuIHRoZWlyCisrJ2NvbmZpZ3VyZScgc2NyaXB0LCBhbmQgdGhlbiB5b3UgcnVuICdtYWtlJy4gIFVuZm9ydHVuYXRlbHksIHRoZQorK3Byb2Nlc3Mgb2YgY3Jvc3MtY29tcGlsaW5nIHRoZSBHTlUgQyBsaWJyYXJ5IGlzIHF1aXRlIGEgYml0IG1vcmUKKytpbnZvbHZlZDoKKysKKysxKSBCdWlsZCBhIGNyb3NzLWNvbXBpbGVyLCB3aXRoIGNlcnRhaW4gZmFjaWxpdGllcyBkaXNhYmxlZC4KKysKKysyKSBDb25maWd1cmUgdGhlIEMgbGlicmFyeSB1c2luZyB0aGUgY29tcGlsZXIgeW91IGJ1aWx0IGluIHN0ZXAgMSkuCisrICAgQnVpbGQgYSBmZXcgb2YgdGhlIEMgcnVuLXRpbWUgb2JqZWN0IGZpbGVzLCBidXQgbm90IHRoZSByZXN0IG9mIHRoZQorKyAgIGxpYnJhcnkuICBJbnN0YWxsIHRoZSBsaWJyYXJ5J3MgaGVhZGVyIGZpbGVzIGFuZCB0aGUgcnVuLXRpbWUKKysgICBvYmplY3QgZmlsZXMsIGFuZCBjcmVhdGUgYSBkdW1teSBsaWJjLnNvLgorKworKzMpIEJ1aWxkIGEgc2Vjb25kIGNyb3NzLWNvbXBpbGVyLCB1c2luZyB0aGUgaGVhZGVyIGZpbGVzIGFuZCBvYmplY3QKKysgICBmaWxlcyB5b3UgaW5zdGFsbGVkIGluIHN0ZXAgMi4KKysKKys0KSBDb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCBhIGZyZXNoIEMgbGlicmFyeSwgdXNpbmcgdGhlIGNvbXBpbGVyCisrICAgYnVpbHQgaW4gc3RlcCAzLgorKworKzUpIEJ1aWxkIGEgdGhpcmQgY3Jvc3MtY29tcGlsZXIsIGJhc2VkIG9uIHRoZSBDIGxpYnJhcnkgYnVpbHQgaW4gc3RlcCA0LgorKworK1RoZSByZWFzb24gZm9yIHRoaXMgY29tcGxleGl0eSBpcyB0aGF0LCBhbHRob3VnaCBHQ0MgYW5kIHRoZSBHTlUgQworK2xpYnJhcnkgYXJlIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHksIHRoZXkgYXJlIG5vdCBhY3R1YWxseSBpbmRlcGVuZGVudAorK29mIGVhY2ggb3RoZXI6IEdDQyByZXF1aXJlcyB0aGUgQyBsaWJyYXJ5J3MgaGVhZGVycyBhbmQgc29tZSBvYmplY3QKKytmaWxlcyB0byBjb21waWxlIGl0cyBvd24gbGlicmFyaWVzLCB3aGlsZSB0aGUgQyBsaWJyYXJ5IGRlcGVuZHMgb24KKytHQ0MncyBsaWJyYXJpZXMuICBHTElCQyBpbmNsdWRlcyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzIHRvIHRoZSBzdG9jaworK0dOVSBDIGxpYnJhcnkgdGhhdCBzaW1wbGlmeSB0aGlzIHByb2Nlc3MsIGJ1dCB0aGUgZnVuZGFtZW50YWwKKytpbnRlcmRlcGVuZGVuY3kgc3RhbmRzLgorKworK0luIHRoaXMgZG9jdW1lbnQsIHdlIGV4cGxhaW4gaG93IHRvIGNyb3NzLWNvbXBpbGUgYW4gR0xJQkMvR0NDIHBhaXIKKytmcm9tIHNvdXJjZS4gIE91ciBpbnRlbmRlZCBhdWRpZW5jZSBpcyBkZXZlbG9wZXJzIHdobyBhcmUgYWxyZWFkeQorK2ZhbWlsaWFyIHdpdGggdGhlIEdOVSB0b29sY2hhaW4gYW5kIGNvbWZvcnRhYmxlIHdvcmtpbmcgd2l0aAorK2Nyb3NzLWRldmVsb3BtZW50IHRvb2xzLiAgV2hpbGUgd2UgZG8gcHJlc2VudCBhIHdvcmtlZCBleGFtcGxlIHRvCisrYWNjb21wYW55IHRoZSBleHBsYW5hdGlvbiwgZm9yIGNsYXJpdHkncyBzYWtlIHdlIGRvIG5vdCBjb3ZlciBtYW55IG9mCisrdGhlIG9wdGlvbnMgYXZhaWxhYmxlIHRvIGNyb3NzLXRvb2xjaGFpbiB1c2Vycy4KKysKKysKKytQcmVwYXJhdGlvbgorKworK0dMSUJDIHJlcXVpcmVzIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgR05VIGJpbnV0aWxzLCBHQ0MsIGFuZCB0aGUKKytMaW51eCBrZXJuZWwuICBUaGUgd2ViIHBhZ2UgPGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9wcmVyZXF1aXNpdGVzPgorK2RvY3VtZW50cyB0aGUgY3VycmVudCByZXF1aXJlbWVudHMsIGFuZCBsaXN0cyBwYXRjaGVzIG5lZWRlZCBmb3IKKytjZXJ0YWluIHRhcmdldCBhcmNoaXRlY3R1cmVzLiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGVzZSBidWlsZAorK2luc3RydWN0aW9ucyBoYXZlIGJlZW4gdGVzdGVkIHdpdGggYmludXRpbHMgMi4yMi41MSwgR0NDIDQuNi4yLAorK2FuZCBMaW51eCAzLjEuCisrCisrRmlyc3QsIGxldCdzIHNldCBzb21lIHZhcmlhYmxlcywgdG8gc2ltcGxpZnkgbGF0ZXIgY29tbWFuZHMuICBXZSdsbAorK2J1aWxkIEdMSUJDIGFuZCBHQ0MgZm9yIGFuIEFSTSB0YXJnZXQsIGtub3duIHRvIHRoZSBMaW51eCBrZXJuZWwKKythcyAnYXJtJywgYW5kIHdlJ2xsIGRvIHRoZSBidWlsZCBvbiBhbiBJbnRlbCB4ODZfNjQgTGludXggYm94OgorKworKyAgICAkIGJ1aWxkPXg4Nl82NC1wYy1saW51eC1nbnUKKysgICAgJCBob3N0PSRidWlsZAorKyAgICAkIHRhcmdldD1hcm0tbm9uZS1saW51eC1nbnVlYWJpCisrICAgICQgbGludXhfYXJjaD1hcm0KKysKKytXZSdyZSB1c2luZyB0aGUgYWZvcmVtZW50aW9uZWQgdmVyc2lvbnMgb2YgQmludXRpbHMsIEdDQywgYW5kIExpbnV4OgorKworKyAgICAkIGJpbnV0aWxzdj1iaW51dGlscy0yLjIyLjUxCisrICAgICQgZ2Njdj1nY2MtNC42LjIKKysgICAgJCBsaW51eHY9bGludXgtMy4xCisrCisrV2UncmUgY2Fycnlpbmcgb3V0IHRoZSBlbnRpcmUgcHJvY2VzcyB1bmRlciAnfi9jcm9zcy1idWlsZCcsIHdoaWNoCisrY29udGFpbnMgdW5wYWNrZWQgc291cmNlIHRyZWVzIGZvciBiaW51dGlscywgZ2NjLCBhbmQgbGludXgga2VybmVsLAorK2Fsb25nIHdpdGggR0xJQkMgc3ZuIHRydW5rICh3aGljaCBjYW4gYmUgY2hlY2tlZC1vdXQgd2l0aAorKydzdm4gY28gaHR0cDovL3d3dy5lZ2xpYmMub3JnL3N2bi90cnVuayBlZ2xpYmMnKToKKysKKysgICAgJCB0b3A9JEhPTUUvY3Jvc3MtYnVpbGQvJHRhcmdldAorKyAgICAkIHNyYz0kSE9NRS9jcm9zcy1idWlsZC9zcmMKKysgICAgJCBscyAkc3JjCisrICAgIGJpbnV0aWxzLTIuMjIuNTEgIGdsaWJjICBnY2MtNC42LjIgIGxpbnV4LTMuMQorKworK1dlJ3JlIGdvaW5nIHRvIHBsYWNlIG91ciBidWlsZCBkaXJlY3RvcmllcyBpbiBhIHN1YmRpcmVjdG9yeSAnb2JqJywKKyt3ZSdsbCBpbnN0YWxsIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaW4gJ3Rvb2xzJywgYW5kIHdlJ2xsCisrcGxhY2Ugb3VyIHN5c3Jvb3QgKGNvbnRhaW5pbmcgZmlsZXMgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQKKytzeXN0ZW0pIGluICdzeXNyb290JzoKKysKKysgICAgJCBvYmo9JHRvcC9vYmoKKysgICAgJCB0b29scz0kdG9wL3Rvb2xzCisrICAgICQgc3lzcm9vdD0kdG9wL3N5c3Jvb3QKKysKKysKKytCaW51dGlscworKworK0NvbmZpZ3VyaW5nIGFuZCBidWlsZGluZyBiaW51dGlscyBmb3IgdGhlIHRhcmdldCBpcyBzdHJhaWdodGZvcndhcmQ6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9iaW51dGlscworKyAgICAkIGNkICRvYmovYmludXRpbHMKKysgICAgJCAkc3JjLyRiaW51dGlsc3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aC1zeXNyb290PSRzeXNyb290CisrICAgICQgbWFrZQorKyAgICAkIG1ha2UgaW5zdGFsbAorKworKworK1RoZSBGaXJzdCBHQ0MKKysKKytGb3Igb3VyIHdvcmssIHdlIG5lZWQgYSBjcm9zcy1jb21waWxlciB0YXJnZXRpbmcgYW4gQVJNIExpbnV4Cisrc3lzdGVtLiAgSG93ZXZlciwgdGhhdCBjb25maWd1cmF0aW9uIGluY2x1ZGVzIHRoZSBzaGFyZWQgbGlicmFyeQorKydsaWJnY2Nfcy5zbycsIHdoaWNoIGlzIGNvbXBpbGVkIGFnYWluc3QgdGhlIEdMSUJDIGhlYWRlcnMgKHdoaWNoIHdlCisraGF2ZW4ndCBpbnN0YWxsZWQgeWV0KSBhbmQgbGlua2VkIGFnYWluc3QgJ2xpYmMuc28nICh3aGljaCB3ZSBoYXZlbid0CisrYnVpbHQgeWV0KS4KKysKKytGb3J0dW5hdGVseSwgdGhlcmUgYXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR0NDIHdoaWNoIHRlbGwgaXQgbm90CisrdG8gYnVpbGQgJ2xpYmdjY19zLnNvJy4gIFRoZSAnLS13aXRob3V0LWhlYWRlcnMnIG9wdGlvbiBpcyBzdXBwb3NlZCB0bworK3Rha2UgY2FyZSBvZiB0aGlzLCBidXQgaXRzIGltcGxlbWVudGF0aW9uIGlzIGluY29tcGxldGUsIHNvIHlvdSBtdXN0CisrYWxzbyBjb25maWd1cmUgd2l0aCB0aGUgJy0td2l0aC1uZXdsaWInIG9wdGlvbi4gIFdoaWxlICctLXdpdGgtbmV3bGliJworK2FwcGVhcnMgdG8gbWVhbiAiVXNlIHRoZSBOZXdsaWIgQyBsaWJyYXJ5IiwgaXRzIGVmZmVjdCBpcyB0byB0ZWxsIHRoZQorK0dDQyBidWlsZCBtYWNoaW5lcnksICJEb24ndCBhc3N1bWUgdGhlcmUgaXMgYSBDIGxpYnJhcnkgYXZhaWxhYmxlLiIKKysKKytXZSBhbHNvIG5lZWQgdG8gZGlzYWJsZSBzb21lIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZQorK2J1aWx0IGFsb25nIHdpdGggR0NDLCBhbmQgc3BlY2lmeSB0aGF0IG9ubHkgdGhlIGNvbXBpbGVyIGZvciB0aGUgQworK2xhbmd1YWdlIGlzIG5lZWRlZC4KKysKKytTbywgd2UgY3JlYXRlIGEgYnVpbGQgZGlyZWN0b3J5LCBjb25maWd1cmUsIG1ha2UsIGFuZCBpbnN0YWxsLgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2NjMQorKyAgICAkIGNkICRvYmovZ2NjMQorKyAgICAkICRzcmMvJGdjY3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aG91dC1oZWFkZXJzIC0td2l0aC1uZXdsaWIgXAorKyAgICA+ICAgICAtLWRpc2FibGUtc2hhcmVkIC0tZGlzYWJsZS10aHJlYWRzIC0tZGlzYWJsZS1saWJzc3AgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGliZ29tcCAtLWRpc2FibGUtbGlibXVkZmxhcCAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorKyAgICA+ICAgICAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAtLWRpc2FibGUtbGliZmZpIFwKKysgICAgPiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwKKysKKysKKytMaW51eCBLZXJuZWwgSGVhZGVycworKworK1RvIGNvbmZpZ3VyZSBHTElCQywgd2UgYWxzbyBuZWVkIExpbnV4IGtlcm5lbCBoZWFkZXJzIGluIHBsYWNlLgorK0ZvcnR1bmF0ZWx5LCB0aGUgTGludXggbWFrZWZpbGVzIGhhdmUgYSB0YXJnZXQgdGhhdCBpbnN0YWxscyB0aGVtIGZvcgorK3VzLiAgU2luY2UgdGhlIHByb2Nlc3MgZG9lcyBtb2RpZnkgdGhlIHNvdXJjZSB0cmVlIGEgYml0LCB3ZSBtYWtlIGEKKytjb3B5IGZpcnN0OgorKworKyAgICAkIGNwIC1yICRzcmMvJGxpbnV4diAkb2JqL2xpbnV4CisrICAgICQgY2QgJG9iai9saW51eAorKworK05vdyB3ZSdyZSByZWFkeSB0byBpbnN0YWxsIHRoZSBoZWFkZXJzIGludG8gdGhlIHN5c3Jvb3Q6CisrCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIFwKKysgICAgPiBtYWtlIGhlYWRlcnNfaW5zdGFsbCBcCisrICAgID4gICAgICBBUkNIPSRsaW51eF9hcmNoIENST1NTX0NPTVBJTEU9JHRhcmdldC0gXAorKyAgICA+ICAgICAgSU5TVEFMTF9IRFJfUEFUSD0kc3lzcm9vdC91c3IKKysKKysKKytHTElCQyBIZWFkZXJzIGFuZCBQcmVsaW1pbmFyeSBPYmplY3RzCisrCisrVXNpbmcgdGhlIGNyb3NzLWNvbXBpbGVyIHdlJ3ZlIGp1c3QgYnVpbHQsIHdlIGNhbiBub3cgY29uZmlndXJlIEdMSUJDCisrd2VsbCBlbm91Z2ggdG8gaW5zdGFsbCB0aGUgaGVhZGVycyBhbmQgYnVpbGQgdGhlIG9iamVjdCBmaWxlcyB0aGF0IHRoZQorK2Z1bGwgY3Jvc3MtY29tcGlsZXIgd2lsbCBuZWVkOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2xpYmMtaGVhZGVycworKyAgICAkIGNkICRvYmovZ2xpYmMtaGVhZGVycworKyAgICAkIEJVSUxEX0NDPWdjYyBcCisrICAgID4gQ0M9JHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyBcCisrICAgID4gQ1hYPSR0b29scy9iaW4vJHRhcmdldC1nKysgXAorKyAgICA+IEFSPSR0b29scy9iaW4vJHRhcmdldC1hciBcCisrICAgID4gUkFOTElCPSR0b29scy9iaW4vJHRhcmdldC1yYW5saWIgXAorKyAgICA+ICRzcmMvZ2xpYmMvbGliYy9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXByZWZpeD0vdXNyIFwKKysgICAgPiAgICAgLS13aXRoLWhlYWRlcnM9JHN5c3Jvb3QvdXNyL2luY2x1ZGUgXAorKyAgICA+ICAgICAtLWJ1aWxkPSRidWlsZCBcCisrICAgID4gICAgIC0taG9zdD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLXByb2ZpbGUgLS13aXRob3V0LWdkIC0td2l0aG91dC1jdnMgXAorKyAgICA+ICAgICAtLWVuYWJsZS1hZGQtb25zPW5wdGwsbGliaWRuLC4uL3BvcnRzCisrCisrVGhlIG9wdGlvbiAnLS1wcmVmaXg9L3VzcicgbWF5IGxvb2sgc3RyYW5nZSwgYnV0IHlvdSBzaG91bGQgbmV2ZXIKKytjb25maWd1cmUgR0xJQkMgd2l0aCBhIHByZWZpeCBvdGhlciB0aGFuICcvdXNyJzogaW4gdmFyaW91cyBwbGFjZXMsCisrR0xJQkMncyBidWlsZCBzeXN0ZW0gY2hlY2tzIHdoZXRoZXIgdGhlIHByZWZpeCBpcyAnL3VzcicsIGFuZCBkb2VzCisrc3BlY2lhbCBoYW5kbGluZyBvbmx5IGlmIHRoYXQgaXMgdGhlIGNhc2UuICBVbmxlc3MgeW91IHVzZSB0aGlzCisrcHJlZml4LCB5b3Ugd2lsbCBnZXQgYSBzeXNyb290IHRoYXQgZG9lcyBub3QgdXNlIHRoZSBzdGFuZGFyZCBMaW51eAorK2RpcmVjdG9yeSBsYXlvdXRzIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBhIGJhc2lzIGZvciB0aGUgcm9vdAorK2ZpbGVzeXN0ZW0gb24geW91ciB0YXJnZXQgc3lzdGVtIGNvbXBhdGlibHkgd2l0aCBub3JtYWwgR0xJQkMKKytpbnN0YWxsYXRpb25zLgorKworK1RoZSAnLS13aXRoLWhlYWRlcnMnIG9wdGlvbiB0ZWxscyBHTElCQyB3aGVyZSB0aGUgTGludXggaGVhZGVycyBoYXZlCisrYmVlbiBpbnN0YWxsZWQuCisrCisrVGhlICctLWVuYWJsZS1hZGQtb25zPW5wdGwsbGliaWRuLC4uL3BvcnRzJyBvcHRpb24gdGVsbHMgR0xJQkMgdG8gbG9vaworK2ZvciB0aGUgbGlzdGVkIGdsaWJjIGFkZC1vbnMuIE1vc3Qgbm90YWJseSB0aGUgcG9ydHMgYWRkLW9uIChsb2NhdGVkCisranVzdCBhYm92ZSB0aGUgbGliYyBzb3VyY2VzIGluIHRoZSBHTElCQyBzdm4gdHJlZSkgaXMgcmVxdWlyZWQgdG8KKytzdXBwb3J0IEFSTSB0YXJnZXRzLgorKworK1dlIGNhbiBub3cgdXNlIHRoZSAnaW5zdGFsbC1oZWFkZXJzJyBtYWtlZmlsZSB0YXJnZXQgdG8gaW5zdGFsbCB0aGUKKytoZWFkZXJzOgorKworKyAgICAkIG1ha2UgaW5zdGFsbC1oZWFkZXJzIGluc3RhbGxfcm9vdD0kc3lzcm9vdCBcCisrICAgID4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycz15ZXMKKysKKytUaGUgJ2luc3RhbGxfcm9vdCcgdmFyaWFibGUgaW5kaWNhdGVzIHdoZXJlIHRoZSBmaWxlcyBzaG91bGQgYWN0dWFsbHkKKytiZSBpbnN0YWxsZWQ7IGl0cyB2YWx1ZSBpcyB0cmVhdGVkIGFzIHRoZSBwYXJlbnQgb2YgdGhlICctLXByZWZpeCcKKytkaXJlY3Rvcnkgd2UgcGFzc2VkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LCBzbyB0aGUgaGVhZGVycyB3aWxsIGdvIGluCisrJyRzeXNyb290L3Vzci9pbmNsdWRlJy4gIFRoZSAnaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycycgdmFyaWFibGUKKytyZXF1ZXN0cyBzcGVjaWFsIGhhbmRsaW5nIGZvciBjZXJ0YWluIHRyaWNreSBoZWFkZXIgZmlsZXMuCisrCisrTmV4dCwgdGhlcmUgYXJlIGEgZmV3IG9iamVjdCBmaWxlcyBuZWVkZWQgdG8gbGluayBzaGFyZWQgbGlicmFyaWVzLAorK3doaWNoIHdlIGJ1aWxkIGFuZCBpbnN0YWxsIGJ5IGhhbmQ6CisrCisrICAgICQgbWtkaXIgLXAgJHN5c3Jvb3QvdXNyL2xpYgorKyAgICAkIG1ha2UgY3N1L3N1YmRpcl9saWIKKysgICAgJCBjcCBjc3UvY3J0MS5vIGNzdS9jcnRpLm8gY3N1L2NydG4ubyAkc3lzcm9vdC91c3IvbGliCisrCisrRmluYWxseSwgJ2xpYmdjY19zLnNvJyByZXF1aXJlcyBhICdsaWJjLnNvJyB0byBsaW5rIGFnYWluc3QuICBIb3dldmVyLAorK3NpbmNlIHdlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgZXhlY3V0ZSBpdHMgY29kZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdAorK2l0IGNvbnRhaW5zLiAgU28sIHRyZWF0aW5nICcvZGV2L251bGwnIGFzIGEgQyBzb3VyY2UgZmlsZSwgd2UgcHJvZHVjZQorK2EgZHVtbXkgJ2xpYmMuc28nIGluIG9uZSBzdGVwOgorKworKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1nY2MgLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLXNoYXJlZCAteCBjIC9kZXYvbnVsbCBcCisrICAgID4gICAgICAgICAgICAgICAgICAgICAgICAtbyAkc3lzcm9vdC91c3IvbGliL2xpYmMuc28KKysKKysKKytUaGUgU2Vjb25kIEdDQworKworK1dpdGggdGhlIEdMSUJDIGhlYWRlcnMgYW5kIHNlbGVjdGVkIG9iamVjdCBmaWxlcyBpbnN0YWxsZWQsIHdlIGNhbgorK25vdyBidWlsZCBhIEdDQyB0aGF0IGlzIGNhcGFibGUgb2YgY29tcGlsaW5nIEdMSUJDLiAgV2UgY29uZmlndXJlLAorK2J1aWxkLCBhbmQgaW5zdGFsbCB0aGUgc2Vjb25kIEdDQywgYWdhaW4gYnVpbGRpbmcgb25seSB0aGUgQyBjb21waWxlciwKKythbmQgYXZvaWRpbmcgbGlicmFyaWVzIHdlIHdvbid0IHVzZToKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2djYzIKKysgICAgJCBjZCAkb2JqL2djYzIKKysgICAgJCAkc3JjLyRnY2N2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJzc3AgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGliZmZpIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisrICAgID4gICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCisrCisrCisrR0xJQkMsIENvbXBsZXRlCisrCisrV2l0aCB0aGUgc2Vjb25kIGNvbXBpbGVyIGJ1aWx0IGFuZCBpbnN0YWxsZWQsIHdlJ3JlIG5vdyByZWFkeSBmb3IgdGhlCisrZnVsbCBHTElCQyBidWlsZDoKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2dsaWJjCisrICAgICQgY2QgJG9iai9nbGliYworKyAgICAkIEJVSUxEX0NDPWdjYyBcCisrICAgID4gQ0M9JHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyBcCisrICAgID4gQ1hYPSR0b29scy9iaW4vJHRhcmdldC1nKysgXAorKyAgICA+IEFSPSR0b29scy9iaW4vJHRhcmdldC1hciBcCisrICAgID4gUkFOTElCPSR0b29scy9iaW4vJHRhcmdldC1yYW5saWIgXAorKyAgICA+ICRzcmMvZ2xpYmMvbGliYy9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXByZWZpeD0vdXNyIFwKKysgICAgPiAgICAgLS13aXRoLWhlYWRlcnM9JHN5c3Jvb3QvdXNyL2luY2x1ZGUgXAorKyAgICA+ICAgICAtLXdpdGgta2NvbmZpZz0kb2JqL2xpbnV4L3NjcmlwdHMva2NvbmZpZyBcCisrICAgID4gICAgIC0tYnVpbGQ9JGJ1aWxkIFwKKysgICAgPiAgICAgLS1ob3N0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLWRpc2FibGUtcHJvZmlsZSAtLXdpdGhvdXQtZ2QgLS13aXRob3V0LWN2cyBcCisrICAgID4gICAgIC0tZW5hYmxlLWFkZC1vbnM9bnB0bCxsaWJpZG4sLi4vcG9ydHMKKysKKytOb3RlIHRoZSBhZGRpdGlvbmFsICctLXdpdGgta2NvbmZpZycgb3B0aW9uLiBUaGlzIHRlbGxzIEdMSUJDIHdoZXJlIHRvCisrZmluZCB0aGUgaG9zdCBjb25maWcgdG9vbHMgdXNlZCBieSB0aGUga2VybmVsICdtYWtlIGNvbmZpZycgYW5kICdtYWtlCisrbWVudWNvbmZpZycuICBUaGVzZSB0b29scyBjYW4gYmUgcmUtdXNlZCBieSBHTElCQyBmb3IgaXRzIG93biAnbWFrZQorKypjb25maWcnIHN1cHBvcnQsIHdoaWNoIHdpbGwgY3JlYXRlICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgZm9yIHlvdS4KKytCdXQgZmlyc3QgbWFrZSBzdXJlIHRob3NlIHRvb2xzIGhhdmUgYmVlbiBidWlsdCBieSBydW5uaW5nIHNvbWUKKytkdW1teSAnbWFrZSAqY29uZmlnJyBjYWxscyBpbiB0aGUga2VybmVsIGRpcmVjdG9yeToKKysKKysgICAgJCBjZCAkb2JqL2xpbnV4CisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgY29uZmlnIFwKKysgICAgPiAgICAgIEFSQ0g9JGxpbnV4X2FyY2ggQ1JPU1NfQ09NUElMRT0kdGFyZ2V0LSBcCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgbWVudWNvbmZpZyBcCisrICAgID4gICAgICBBUkNIPSRsaW51eF9hcmNoIENST1NTX0NPTVBJTEU9JHRhcmdldC0gXAorKworK05vdyB3ZSBjYW4gY29uZmlndXJlIGFuZCBidWlsZCB0aGUgZnVsbCBHTElCQzoKKysKKysgICAgJCBjZCAkb2JqL2dsaWJjCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgZGVmY29uZmlnCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgbWVudWNvbmZpZworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbCBpbnN0YWxsX3Jvb3Q9JHN5c3Jvb3QKKysKKytBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGEgY29tcGxldGUgR0xJQkMgaW5zdGFsbGF0aW9uIGluICckc3lzcm9vdCcsCisrd2l0aCBoZWFkZXIgZmlsZXMsIGxpYnJhcnkgZmlsZXMsIGFuZCBtb3N0IG9mIHRoZSBDIHJ1bnRpbWUgc3RhcnR1cAorK2ZpbGVzIGluIHBsYWNlLgorKworKworK1RoZSBUaGlyZCBHQ0MKKysKKytGaW5hbGx5LCB3ZSByZWNvbXBpbGUgR0NDIGFnYWluc3QgdGhpcyBmdWxsIGluc3RhbGxhdGlvbiwgZW5hYmxpbmcKKyt3aGF0ZXZlciBsYW5ndWFnZXMgYW5kIGxpYnJhcmllcyB3ZSB3b3VsZCBsaWtlIHRvIHVzZToKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2djYzMKKysgICAgJCBjZCAkb2JqL2djYzMKKysgICAgJCAkc3JjLyRnY2N2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCBcCisrICAgID4gICAgIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJzc3AgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorKyAgICA+ICAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKysKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwKKysKKytUaGUgJy0tZW5hYmxlLV9fY3hhX2F0ZXhpdCcgb3B0aW9uIHRlbGxzIEdDQyB3aGF0IHNvcnQgb2YgQysrCisrZGVzdHJ1Y3RvciBzdXBwb3J0IHRvIGV4cGVjdCBmcm9tIHRoZSBDIGxpYnJhcnk7IGl0J3MgcmVxdWlyZWQgd2l0aAorK0dMSUJDLgorKworK0FuZCBzaW5jZSBHQ0MncyBpbnN0YWxsYXRpb24gcHJvY2VzcyBpc24ndCBkZXNpZ25lZCB0byBoZWxwIGNvbnN0cnVjdAorK3N5c3Jvb3QgdHJlZXMsIHdlIG11c3QgbWFudWFsbHkgY29weSBjZXJ0YWluIGxpYnJhcmllcyBpbnRvIHBsYWNlIGluCisrdGhlIHN5c3Jvb3QuCisrCisrICAgICQgY3AgLWQgJHRvb2xzLyR0YXJnZXQvbGliL2xpYmdjY19zLnNvKiAkc3lzcm9vdC9saWIKKysgICAgJCBjcCAtZCAkdG9vbHMvJHRhcmdldC9saWIvbGlic3RkYysrLnNvKiAkc3lzcm9vdC91c3IvbGliCisrCisrCisrVHJ5aW5nIFRoaW5ncyBPdXQKKysKKytBdCB0aGlzIHBvaW50LCAnJHRvb2xzJyBjb250YWlucyBhIGNyb3NzIHRvb2xjaGFpbiByZWFkeSB0byB1c2UKKyt0aGUgR0xJQkMgaW5zdGFsbGF0aW9uIGluICckc3lzcm9vdCc6CisrCisrICAgICQgY2F0ID4gaGVsbG8uYyA8PEVPRgorKyAgICA+ICNpbmNsdWRlIDxzdGRpby5oPgorKyAgICA+IGludAorKyAgICA+IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgPiB7CisrICAgID4gICBwdXRzICgiSGVsbG8sIHdvcmxkISIpOworKyAgICA+ICAgcmV0dXJuIDA7CisrICAgID4gfQorKyAgICA+IEVPRgorKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1nY2MgLVdhbGwgaGVsbG8uYyAtbyBoZWxsbworKyAgICAkIGNhdCA+IGMrKy1oZWxsby5jYyA8PEVPRgorKyAgICA+ICNpbmNsdWRlIDxpb3N0cmVhbT4KKysgICAgPiBpbnQKKysgICAgPiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgID4geworKyAgICA+ICAgc3RkOjpjb3V0IDw8ICJIZWxsbywgQysrIHdvcmxkISIgPDwgc3RkOjplbmRsOworKyAgICA+ICAgcmV0dXJuIDA7CisrICAgID4gfQorKyAgICA+IEVPRgorKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1nKysgLVdhbGwgYysrLWhlbGxvLmNjIC1vIGMrKy1oZWxsbworKworKworK1dlIGNhbiB1c2UgJ3JlYWRlbGYnIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGFyZSBpbmRlZWQgZXhlY3V0YWJsZXMgZm9yCisrb3VyIHRhcmdldCwgdXNpbmcgb3VyIGR5bmFtaWMgbGlua2VyOgorKworKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1yZWFkZWxmIC1obCBoZWxsbworKyAgICBFTEYgSGVhZGVyOgorKyAgICAuLi4KKysgICAgICBUeXBlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYRUMgKEV4ZWN1dGFibGUgZmlsZSkKKysgICAgICBNYWNoaW5lOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSTQorKworKyAgICAuLi4KKysgICAgUHJvZ3JhbSBIZWFkZXJzOgorKyAgICAgIFR5cGUgICAgICAgICAgIE9mZnNldCAgIFZpcnRBZGRyICAgUGh5c0FkZHIgICBGaWxlU2l6IE1lbVNpeiAgRmxnIEFsaWduCisrICAgICAgUEhEUiAgICAgICAgICAgMHgwMDAwMzQgMHgxMDAwMDAzNCAweDEwMDAwMDM0IDB4MDAxMDAgMHgwMDEwMCBSIEUgMHg0CisrICAgICAgSU5URVJQICAgICAgICAgMHgwMDAxMzQgMHgwMDAwODEzNCAweDAwMDA4MTM0IDB4MDAwMTMgMHgwMDAxMyBSICAgMHgxCisrICAgICAgICAgIFtSZXF1ZXN0aW5nIHByb2dyYW0gaW50ZXJwcmV0ZXI6IC9saWIvbGQtbGludXguc28uM10KKysgICAgICBMT0FEICAgICAgICAgICAweDAwMDAwMCAweDAwMDA4MDAwIDB4MDAwMDgwMDAgMHgwMDQyYyAweDAwNDJjIFIgRSAweDgwMDAKKysgICAgLi4uCisrCisrTG9va2luZyBhdCB0aGUgZHluYW1pYyBzZWN0aW9uIG9mIHRoZSBpbnN0YWxsZWQgJ2xpYmdjY19zLnNvJywgd2Ugc2VlCisrdGhhdCB0aGUgJ05FRURFRCcgZW50cnkgZm9yIHRoZSBDIGxpYnJhcnkgZG9lcyBpbmNsdWRlIHRoZSAnLjYnCisrc3VmZml4LCBpbmRpY2F0aW5nIHRoYXQgd2FzIGxpbmtlZCBhZ2FpbnN0IG91ciBmdWxseSBidWlsZCBHTElCQywgYW5kCisrbm90IG91ciBkdW1teSAnbGliYy5zbyc6CisrCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LXJlYWRlbGYgLWQgJHN5c3Jvb3QvbGliL2xpYmdjY19zLnNvLjEKKysgICAgRHluYW1pYyBzZWN0aW9uIGF0IG9mZnNldCAweDEwODNjIGNvbnRhaW5zIDI0IGVudHJpZXM6CisrICAgICAgVGFnICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUvVmFsdWUKKysgICAgIDB4MDAwMDAwMDEgKE5FRURFRCkgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgbGlicmFyeTogW2xpYmMuc28uNl0KKysgICAgIDB4MDAwMDAwMGUgKFNPTkFNRSkgICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5IHNvbmFtZTogW2xpYmdjY19zLnNvLjFdCisrICAgIC4uLgorKworKworK0FuZCBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUsIHdlIGNhbiBydW4gb3VyIHByb2dyYW1zOgorKworKyAgICAkICRzeXNyb290L2xpYi9sZC5zby4xIC0tbGlicmFyeS1wYXRoICRzeXNyb290L2xpYjokc3lzcm9vdC91c3IvbGliIFwKKysgICAgPiAuL2hlbGxvCisrICAgIEhlbGxvLCB3b3JsZCEKKysgICAgJCAkc3lzcm9vdC9saWIvbGQuc28uMSAtLWxpYnJhcnktcGF0aCAkc3lzcm9vdC9saWI6JHN5c3Jvb3QvdXNyL2xpYiBcCisrICAgID4gLi9jKystaGVsbG8KKysgICAgSGVsbG8sIEMrKyB3b3JsZCEKK2RpZmYgLS1naXQgYS9HTElCQy5jcm9zcy10ZXN0aW5nIGIvR0xJQkMuY3Jvc3MtdGVzdGluZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI2N2I0NjgKKy0tLSAvZGV2L251bGwKKysrKyBiL0dMSUJDLmNyb3NzLXRlc3RpbmcKK0BAIC0wLDAgKzEsMjA1IEBACisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gbW9kZTogdGV4dCAtKi0KKysKKysgICAgICAgICAgICAgICAgICAgICAgQ3Jvc3MtVGVzdGluZyBXaXRoIEdMSUJDCisrICAgICAgICAgICAgICAgICAgSmltIEJsYW5keSA8amltYkBjb2Rlc291cmNlcnkuY29tPgorKworKworK0ludHJvZHVjdGlvbgorKworK0RldmVsb3BlcnMgd3JpdGluZyBzb2Z0d2FyZSBmb3IgZW1iZWRkZWQgc3lzdGVtcyBvZnRlbiB1c2UgYSBkZXNrdG9wCisrb3Igb3RoZXIgc2ltaWxhcmx5IGNhcGFibGUgY29tcHV0ZXIgZm9yIGRldmVsb3BtZW50LCBidXQgbmVlZCB0byBydW4KKyt0ZXN0cyBvbiB0aGUgZW1iZWRkZWQgc3lzdGVtLCBvciBwZXJoYXBzIG9uIGEgc2ltdWxhdG9yLiAgV2hlbgorK2NvbmZpZ3VyZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCB0aGUgc3RvY2sgR05VIEMgbGlicmFyeSBzaW1wbHkKKytkaXNhYmxlcyBydW5uaW5nIHRlc3RzIGFsdG9nZXRoZXI6IHRoZSBjb21tYW5kICdtYWtlIHRlc3RzJyBidWlsZHMKKyt0ZXN0IHByb2dyYW1zLCBidXQgZG9lcyBub3QgcnVuIHRoZW0uICBHTElCQywgaG93ZXZlciwgcHJvdmlkZXMKKytmYWNpbGl0aWVzIGZvciBjb21waWxpbmcgdGVzdHMgYW5kIGdlbmVyYXRpbmcgZGF0YSBmaWxlcyBvbiB0aGUgYnVpbGQKKytzeXN0ZW0sIGJ1dCBydW5uaW5nIHRoZSB0ZXN0IHByb2dyYW1zIHRoZW1zZWx2ZXMgb24gYSByZW1vdGUgc3lzdGVtIG9yCisrc2ltdWxhdG9yLgorKworKworK1Rlc3QgZW52aXJvbm1lbnQgcmVxdWlyZW1lbnRzCisrCisrVGhlIHRlc3QgZW52aXJvbm1lbnQgbXVzdCBtZWV0IGNlcnRhaW4gY29uZGl0aW9ucyBmb3IgR0xJQkMncworK2Nyb3NzLXRlc3RpbmcgZmFjaWxpdGllcyB0byB3b3JrOgorKworKy0gU2hhcmVkIGZpbGVzeXN0ZW1zLiAgVGhlICdidWlsZCcgc3lzdGVtLCBvbiB3aGljaCB5b3UgY29uZmlndXJlIGFuZAorKyAgY29tcGlsZSBHTElCQywgYW5kIHRoZSAnaG9zdCcgc3lzdGVtLCBvbiB3aGljaCB5b3UgaW50ZW5kIHRvIHJ1bgorKyAgR0xJQkMsIG11c3Qgc2hhcmUgYSBmaWxlc3lzdGVtIGNvbnRhaW5pbmcgdGhlIEdMSUJDIGJ1aWxkIGFuZAorKyAgc291cmNlIHRyZWVzLiAgRmlsZXMgbXVzdCBhcHBlYXIgYXQgdGhlIHNhbWUgcGF0aHMgb24gYm90aCBzeXN0ZW1zLgorKworKy0gUmVtb3RlLXNoZWxsIGxpa2UgaW52b2NhdGlvbi4gIFRoZXJlIG11c3QgYmUgYSB3YXkgdG8gcnVuIGEgcHJvZ3JhbQorKyAgb24gdGhlIGhvc3Qgc3lzdGVtIGZyb20gdGhlIGJ1aWxkIHN5c3RlbSwgcGFzc2luZyBpdCBwcm9wZXJseSBxdW90ZWQKKysgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHNldHRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQKKysgIGluaGVyaXRpbmcgdGhlIGNhbGxlcidzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQuCisrCisrCisrVXNhZ2UKKysKKytUbyB1c2UgR0xJQkMncyBjcm9zcy10ZXN0aW5nIHN1cHBvcnQsIHByb3ZpZGUgdmFsdWVzIGZvciB0aGUKKytmb2xsb3dpbmcgTWFrZSB2YXJpYWJsZXMgd2hlbiB5b3UgaW52b2tlICdtYWtlJzoKKysKKystIGNyb3NzLXRlc3Qtd3JhcHBlcgorKworKyAgVGhpcyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGNyb3NzLXRlc3Rpbmcgd3JhcHBlciBjb21tYW5kLCBhbG9uZworKyAgd2l0aCBhbnkgYXJndW1lbnRzLgorKworKy0gY3Jvc3MtbG9jYWxlZGVmCisrCisrICBUaGlzIHNob3VsZCBiZSB0aGUgbmFtZSBvZiBhIGNyb3NzLWNhcGFibGUgbG9jYWxlZGVmIHByb2dyYW0sIGxpa2UKKysgIHRoYXQgaW5jbHVkZWQgaW4gdGhlIEdMSUJDICdsb2NhbGVkZWYnIG1vZHVsZSwgYWxvbmcgd2l0aCBhbnkKKysgIGFyZ3VtZW50cyBuZWVkZWQuCisrCisrVGhlc2UgYXJlIGVhY2ggZXhwbGFpbmVkIGluIGRldGFpbCBiZWxvdy4KKysKKysKKytUaGUgQ3Jvc3MtVGVzdGluZyBXcmFwcGVyCisrCisrVG8gcnVuIHRlc3QgcHJvZ3JhbXMgcmVsaWFibHksIHRoZSBzdG9jayBHTlUgQyBsaWJyYXJ5IHRha2VzIGNhcmUgdG8KKytlbnN1cmUgdGhhdCB0ZXN0IHByb2dyYW1zIHVzZSB0aGUgbmV3bHkgY29tcGlsZWQgZHluYW1pYyBsaW5rZXIgYW5kCisrc2hhcmVkIGxpYnJhcmllcywgYW5kIG5ldmVyIHRoZSBob3N0IHN5c3RlbSdzIGluc3RhbGxlZCBsaWJyYXJpZXMuICBUbworK2FjY29tcGxpc2ggdGhpcywgaXQgcnVucyB0aGUgdGVzdHMgYnkgZXhwbGljaXRseSBpbnZva2luZyB0aGUgZHluYW1pYworK2xpbmtlciBmcm9tIHRoZSBidWlsZCB0cmVlLCBwYXNzaW5nIGl0IGEgbGlzdCBvZiBidWlsZCB0cmVlCisrZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBzaGFyZWQgbGlicmFyaWVzLCBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZgorK3RoZSBleGVjdXRhYmxlIHRvIHJ1biBhbmQgaXRzIGFyZ3VtZW50cy4KKysKKytGb3IgZXhhbXBsZSwgd2hlcmUgb25lIG1pZ2h0IG5vcm1hbGx5IHJ1biBhIHRlc3QgcHJvZ3JhbSBsaWtlIHRoaXM6CisrCisrICAgICQgLi90c3QtZm9vIGFyZzEgYXJnMgorKworK3RoZSBHTlUgQyBsaWJyYXJ5IG1pZ2h0IHJ1biB0aGF0IHByb2dyYW0gbGlrZSB0aGlzOgorKworKyAgICAkICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworKyh3aGVyZSAkb2JqZGlyIGlzIHRoZSBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWUsIGFuZCB0aGUKKyt0cmFpbGluZyBiYWNrc2xhc2ggaW5kaWNhdGVzIGEgY29udGludWF0aW9uIG9mIHRoZSBjb21tYW5kKS4gIEluIG90aGVyCisrd29yZHMsIGVhY2ggdGVzdCBwcm9ncmFtIGludm9jYXRpb24gaXMgJ3dyYXBwZWQgdXAnIGluc2lkZSBhbiBleHBsaWNpdAorK2ludm9jYXRpb24gb2YgdGhlIGR5bmFtaWMgbGlua2VyLCB3aGljaCBtdXN0IGl0c2VsZiBleGVjdXRlIHRoZSB0ZXN0CisrcHJvZ3JhbSwgaGF2aW5nIGxvYWRlZCBzaGFyZWQgbGlicmFyaWVzIGZyb20gdGhlIGFwcHJvcHJpYXRlCisrZGlyZWN0b3JpZXMuCisrCisrVG8gc3VwcG9ydCBjcm9zcy10ZXN0aW5nLCBHTElCQyBhbGxvd3MgdGhlIGRldmVsb3BlciB0byBvcHRpb25hbGx5Cisrc2V0IHRoZSAnY3Jvc3MtdGVzdC13cmFwcGVyJyBNYWtlIHZhcmlhYmxlIHRvIGFub3RoZXIgd3JhcHBlciBjb21tYW5kLAorK3RvIHdoaWNoIGl0IHBhc3NlcyB0aGUgZW50aXJlIGR5bmFtaWMgbGlua2VyIGludm9jYXRpb24gc2hvd24gYWJvdmUgYXMKKythcmd1bWVudHMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGRldmVsb3BlciBzdXBwbGllcyBhIHdyYXBwZXIgb2YKKysnbXktd3JhcHBlciBob3N0bmFtZScsIHRoZW4gR0xJQkMgd291bGQgcnVuIHRoZSB0ZXN0IGFib3ZlIGFzCisrZm9sbG93czoKKysKKysgICAgJCBteS13cmFwcGVyIGhvc3RuYW1lIFwKKysgICAgICAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKytUaGUgJ215LXdyYXBwZXInIGNvbW1hbmQgaXMgcmVzcG9uc2libGUgZm9yIGV4ZWN1dGluZyB0aGUgY29tbWFuZAorK2dpdmVuIG9uIHRoZSBob3N0IHN5c3RlbS4KKysKKytTaW5jZSB0ZXN0cyBhcmUgcnVuIGluIHZhcnlpbmcgZGlyZWN0b3JpZXMsIHRoZSB3cmFwcGVyIHNob3VsZCBlaXRoZXIKKytiZSBpbiB5b3VyIGNvbW1hbmQgc2VhcmNoIHBhdGgsIG9yICdjcm9zcy10ZXN0LXdyYXBwZXInIHNob3VsZCBnaXZlIGFuCisrYWJzb2x1dGUgcGF0aCBmb3IgdGhlIHdyYXBwZXIuCisrCisrVGhlIHdyYXBwZXIgbXVzdCBtZWV0IHNldmVyYWwgcmVxdWlyZW1lbnRzOgorKworKy0gSXQgbXVzdCBwcmVzZXJ2ZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBBcyBleHBsYWluZWQgYWJvdmUsIHRoZQorKyAgYnVpbGQgZGlyZWN0b3J5IHRyZWUgbXVzdCBiZSB2aXNpYmxlIG9uIGJvdGggdGhlIGJ1aWxkIGFuZCBob3N0CisrICBzeXN0ZW1zLCBhdCB0aGUgc2FtZSBwYXRoLiAgVGhlIHRlc3Qgd3JhcHBlciBtdXN0IGVuc3VyZSB0aGF0IHRoZQorKyAgY3VycmVudCBkaXJlY3RvcnkgaXQgaW5oZXJpdHMgaXMgYWxzbyBpbmhlcml0ZWQgYnkgdGhlIGR5bmFtaWMKKysgIGxpbmtlciAoYW5kIHRodXMgdGhlIHRlc3QgcHJvZ3JhbSBpdHNlbGYpLgorKworKy0gSXQgbXVzdCBwcmVzZXJ2ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMnIHZhbHVlcy4gIE1hbnkgR0xJQkMgdGVzdHMKKysgIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRlc3QgcnVuczsgaW4gbmF0aXZlIHRlc3RpbmcsIGl0CisrICBpbnZva2VzIHByb2dyYW1zIGxpa2UgdGhpczoKKysKKysgICAgJCBHQ09OVl9QQVRIPSRvYmpkaXIvaWNvbnZkYXRhIFwKKysgICAgICAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKysgIFdpdGggdGhlIGNyb3NzLXRlc3Rpbmcgd3JhcHBlciwgdGhhdCBpbnZvY2F0aW9uIGJlY29tZXM6CisrCisrICAgICQgR0NPTlZfUEFUSD0kb2JqZGlyL2ljb252ZGF0YSBcCisrICAgICAgbXktd3JhcHBlciBob3N0bmFtZSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrICBIZXJlLCAnbXktd3JhcHBlcicgbXVzdCBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgaXQgc2VlcyBmb3IKKysgICdHQ09OVl9QQVRIJyB3aWxsIGJlIHNlZW4gYnkgdGhlIGR5bmFtaWMgbGlua2VyLCBhbmQgdGh1cyAndHN0LWZvbycKKysgIGl0c2VsZi4gIChUaGUgd3JhcHBlciBzdXBwbGllZCB3aXRoIEdMSUJDIHNpbXBseSBwcmVzZXJ2ZXMgdGhlCisrICB2YWx1ZXMgb2YgKmFsbCogZW52aXJvbWVudCB2YXJpYWJsZXMsIHdpdGggYSBmaXhlZCBzZXQgb2YKKysgIGV4Y2VwdGlvbnMuKQorKworKyAgSWYgeW91ciB3cmFwcGVyIGlzIGEgc2hlbGwgc2NyaXB0LCB0YWtlIGNhcmUgdG8gY29ycmVjdGx5IHByb3BhZ2F0ZQorKyAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdob3NlIHZhbHVlcyBjb250YWluIHNwYWNlcyBhbmQgc2hlbGwKKysgIG1ldGFjaGFyYWN0ZXJzLgorKworKy0gSXQgbXVzdCBwYXNzIHRoZSBjb21tYW5kJ3MgYXJndW1lbnRzLCB1bm1vZGlmaWVkLiAgVGhlIGFyZ3VtZW50cworKyAgc2VlbiBieSB0aGUgdGVzdCBwcm9ncmFtIHNob3VsZCBiZSBleGFjdGx5IHRob3NlIHNlZW4gYnkgdGhlIHdyYXBwZXIKKysgIChhZnRlciB3aGF0ZXZlciBhcmd1bWVudHMgYXJlIGdpdmVuIHRvIHRoZSB3cmFwcGVyIGl0c2VsZikuICBUaGUKKysgIEdMSUJDIHRlc3QgZnJhbWV3b3JrIHBlcmZvcm1zIGFsbCBuZWVkZWQgc2hlbGwgd29yZCBzcGxpdHRpbmcgYW5kCisrICBleHBhbnNpb24gKHdpbGRjYXJkIGV4cGFuc2lvbiwgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiwgYW5kIHNvIG9uKQorKyAgYmVmb3JlIGludm9raW5nIHRoZSB3cmFwcGVyOyBmdXJ0aGVyIGV4cGFuc2lvbiBtYXkgYnJlYWsgdGhlIHRlc3RzLgorKworKworK1RoZSAnY3Jvc3MtdGVzdC1zc2guc2gnIHNjcmlwdAorKworK0lmIHlvdSB3YW50IHRvIHVzZSAnc3NoJyAob3Igc29tZXRoaW5nIHN1ZmZpY2llbnRseSBzaW1pbGFyKSB0byBydW4KKyt0ZXN0IHByb2dyYW1zIG9uIHlvdXIgaG9zdCBzeXN0ZW0sIEdMSUJDIGluY2x1ZGVzIGEgc2hlbGwgc2NyaXB0LAorKydzY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoJywgd2hpY2ggeW91IGNhbiB1c2UgYXMgeW91ciB3cmFwcGVyCisrY29tbWFuZC4gIFRoaXMgc2NyaXB0IHRha2VzIGNhcmUgb2Ygc2V0dGluZyB0aGUgdGVzdCBjb21tYW5kJ3MgY3VycmVudAorK2RpcmVjdG9yeSwgcHJvcGFnYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWVzLCBhbmQgY2FycnlpbmcKKytjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBhbGwgYWNyb3NzIGFuICdzc2gnIGNvbm5lY3Rpb24uICBZb3UgbWF5IGV2ZW4KKytzdXBwbHkgYW4gYWx0ZXJuYXRpdmUgdG8gJ3NzaCcgb24gdGhlIGNvbW1hbmQgbGluZSwgaWYgbmVlZGVkLgorKworK0ZvciBtb3JlIGRldGFpbHMsIHBhc3MgJ2Nyb3NzLXRlc3Qtc3NoLnNoJyB0aGUgJy0taGVscCcgb3B0aW9uLgorKworKworK1RoZSBDcm9zcy1Db21waWxpbmcgTG9jYWxlIERlZmluaXRpb24gQ29tbWFuZAorKworK1NvbWUgR0xJQkMgdGVzdHMgcmVseSBvbiBsb2NhbGVzIGdlbmVyYXRlZCBlc3BlY2lhbGx5IGZvciB0aGUgdGVzdAorK3Byb2Nlc3MuICBJbiBhIG5hdGl2ZSBjb25maWd1cmF0aW9uLCB0aGVzZSB0ZXN0cyBzaW1wbHkgcnVuIHRoZQorKydsb2NhbGVkZWYnIGNvbW1hbmQgYnVpbHQgYnkgdGhlIG5vcm1hbCBHTElCQyBidWlsZCBwcm9jZXNzLAorKydsb2NhbGUvbG9jYWxlZGVmJywgdG8gcHJvY2VzcyBhbmQgaW5zdGFsbCB0aGVpciBsb2NhbGVzLiAgSG93ZXZlciwgaW4KKythIGNyb3NzLWNvbXBpbGluZyBjb25maWd1cmF0aW9uLCB0aGlzICdsb2NhbGVkZWYnIGlzIGJ1aWx0IGZvciB0aGUKKytob3N0IHN5c3RlbSwgbm90IHRoZSBidWlsZCBzeXN0ZW0sIGFuZCBzaW5jZSBpdCByZXF1aXJlcyBxdWl0ZSBhIGJpdAorK29mIG1lbW9yeSB0byBydW4gKHdlIGhhdmUgc2VlbiBpdCBmYWlsIG9uIHN5c3RlbXMgd2l0aCA2NE1pQiBvZgorK21lbW9yeSksIGl0IG1heSBub3QgYmUgcHJhY3RpY2FsIHRvIHJ1biBpdCBvbiB0aGUgaG9zdCBzeXN0ZW0uCisrCisrSWYgc2V0LCBHTElCQyB1c2VzIHRoZSAnY3Jvc3MtbG9jYWxlZGVmJyBNYWtlIHZhcmlhYmxlIGFzIHRoZSBjb21tYW5kCisrdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW0gdG8gcHJvY2VzcyBhbmQgaW5zdGFsbCBsb2NhbGVzLiAgVGhlCisrbG9jYWxlZGVmIHByb2dyYW0gYnVpbHQgZnJvbSB0aGUgR0xJQkMgJ2xvY2FsZWRlZicgbW9kdWxlIGlzCisrc3VpdGFibGUuCisrCisrVGhlIHZhbHVlIG9mICdjcm9zcy1sb2NhbGVkZWYnIG1heSBhbHNvIGluY2x1ZGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cworK3RvIGJlIHBhc3NlZCB0byB0aGUgcHJvZ3JhbTsgaWYgeW91IGFyZSB1c2luZyBHTElCQydzICdsb2NhbGVkZWYnLAorK3lvdSBtYXkgaW5jbHVkZSBlbmRpYW5uZXNzIGFuZCAndWludDMyX3QnIGFsaWdubWVudCBhcmd1bWVudHMgaGVyZS4KKysKKysKKytFeGFtcGxlCisrCisrSW4gZGV2ZWxvcGluZyBHTElCQydzIGNyb3NzLXRlc3RpbmcgZmFjaWxpdHksIHdlIGludm9rZWQgJ21ha2UnIHdpdGgKKyt0aGUgZm9sbG93aW5nIHNjcmlwdDoKKysKKysgICAgIyEvYmluL3NoCisrCisrICAgIHNyY2Rpcj0uLi4KKysgICAgdGVzdF9ob3N0bmFtZT0uLi4KKysgICAgbG9jYWxlZGVmZGlyPS4uLgorKyAgICBjcm9zc19neHg9Li4uLWcrKworKworKyAgICB3cmFwcGVyPSIkc3JjZGlyL3NjcmlwdHMvY3Jvc3MtdGVzdC1zc2guc2ggJHRlc3RfaG9zdG5hbWUiCisrICAgIGxvY2FsZWRlZj0iJGxvY2FsZWRlZmRpci9sb2NhbGVkZWYgLS1saXR0bGUtZW5kaWFuIC0tdWludDMyLWFsaWduPTQiCisrCisrICAgIG1ha2UgY3Jvc3MtdGVzdC13cmFwcGVyPSIkd3JhcHBlciIgXAorKyAgICAgICAgIGNyb3NzLWxvY2FsZWRlZj0iJGxvY2FsZWRlZiIgXAorKyAgICAgICAgIENYWD0iJGNyb3NzX2d4eCIgXAorKyAgICAgICAgICIkQCIKKysKKysKKytPdGhlciBDcm9zcy1UZXN0aW5nIENvbmNlcm5zCisrCisrSGVyZSBhcmUgbm90ZXMgb24gc29tZSBvdGhlciBpc3N1ZXMgd2hpY2ggeW91IG1heSBlbmNvdW50ZXIgaW4gcnVubmluZworK3RoZSBHTElCQyB0ZXN0cyBpbiBhIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudDoKKysKKystIFNvbWUgdGVzdHMgcmVxdWlyZSBhIEMrKyBjcm9zcy1jb21waWxlcjsgeW91IHNob3VsZCBzZXQgdGhlICdDWFgnCisrICBNYWtlIHZhcmlhYmxlIHRvIHRoZSBuYW1lIG9mIGFuIGFwcHJvcHJpYXRlIGNyb3NzLWNvbXBpbGVyLgorKworKy0gU29tZSB0ZXN0cyByZXF1aXJlIGFjY2VzcyB0byBsaWJzdGRjKysuc28uNiBhbmQgbGliZ2NjX3Muc28uMTsgd2UKKysgIHNpbXBseSBwbGFjZSBjb3BpZXMgb2YgdGhlc2UgbGlicmFyaWVzIGluIHRoZSB0b3AgR0xJQkMgYnVpbGQKKysgIGRpcmVjdG9yeS4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYjgwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2gKQEAgLTAsMCArMSwxNDM2IEBACitGcm9tIGFhN2M1ZmU4NmQwNDU4NGE5YWVkNGRjNDBiYTg1NmM2NWExZWY5YzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0NToxOCArMDAwMAorU3ViamVjdDogW1BBVENIIDE5LzI3XSBlZ2xpYmM6IEJyaW5nIEVnbGliYyBvcHRpb24gZ3JvdXAgaW5mcmFzdHJ1Y3R1cmUgdG8KKyBnbGliYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIEVHTElCQy5vcHRpb24tZ3JvdXBzICAgICAgICAgICAgICB8IDEyMiArKysrKysKKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGNvbmZpZy5tYWtlLmluICAgICAgICAgICAgICAgICAgICB8ICAgMiArCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICsKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgfCAgMTAgKworIG9wdGlvbi1ncm91cHMuZGVmICAgICAgICAgICAgICAgICB8IDg2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIG9wdGlvbi1ncm91cHMuZGVmYXVsdHMgICAgICAgICAgICB8ICA0NyArKysKKyBvcHRpb24tZ3JvdXBzLm1hayAgICAgICAgICAgICAgICAgfCAgNDEgKysKKyBvcHRpb25zLWNvbmZpZy9NYWtlZmlsZSAgICAgICAgICAgfCAgNTUgKysrCisgb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsIHwgIDU4ICsrKworIG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsICB8ICAgOCArCisgc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3ayAgICAgICAgIHwgIDYzICsrKworIDEyIGZpbGVzIGNoYW5nZWQsIDEyODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBFR0xJQkMub3B0aW9uLWdyb3VwcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb24tZ3JvdXBzLmRlZgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbi1ncm91cHMubWFrCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbnMtY29uZmlnL01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCisKK2RpZmYgLS1naXQgYS9FR0xJQkMub3B0aW9uLWdyb3VwcyBiL0VHTElCQy5vcHRpb24tZ3JvdXBzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNmE1MGI4ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvRUdMSUJDLm9wdGlvbi1ncm91cHMKK0BAIC0wLDAgKzEsMTIyIEBACisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gbW9kZTogdGV4dCAtKi0KKysKKysgICAgICAgICAgICAgIFRoZSBFR0xJQkMgQ29tcG9uZW50IENvbmZpZ3VyYXRpb24gU3lzdGVtCisrICAgICAgICAgICAgICAgICAgSmltIEJsYW5keSA8amltYkBjb2Rlc291cmNlcnkuY29tPgorKworK0ludHJvZHVjdGlvbgorKworK1RoZSBHTlUgQyBsaWJyYXJ5IChHTElCQykgcHJvdmlkZXMgYSBicm9hZCByYW5nZSBvZiBmdW5jdGlvbmFsaXR5LAorK3JhbmdpbmcgZnJvbSBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0IHRvIHRyYW5zY2VuZGVudGFsCisrbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucy4gIEl0cyB3ZWJzaXRlIGJvYXN0cyB0aGF0ICJuZWFybHkgYWxsIGtub3duIGFuZAorK3VzZWZ1bCBmdW5jdGlvbnMgZnJvbSBhbnkgb3RoZXIgQyBsaWJyYXJ5IGFyZSBhdmFpbGFibGUuIiAgVGhpcworK2V4aGF1c3RpdmUgYXBwcm9hY2ggaGFzIGJlZW4gb25lIG9mIEdMSUJDJ3Mgc3RyZW5ndGhzIG9uIGRlc2t0b3AgYW5kCisrc2VydmVyIHN5c3RlbXMsIGJ1dCBpdCBoYXMgYWxzbyBnaXZlbiBHTElCQyBhIGxhcmdlIGZvb3RwcmludCwgYm90aCBpbgorK21lbW9yeSBhbmQgb24gZGlzaywgbWFraW5nIGl0IGEgY2hhbGxlbmdlIHRvIHVzZSBpbiBlbWJlZGRlZCBzeXN0ZW1zCisrd2l0aCBsaW1pdGVkIHJlc291cmNlcy4KKysKKytUaGUgRW1iZWRkZWQgR05VIEMgbGlicmFyeSAoRUdMSUJDKSBpcyBhIHZhcmlhbnQgb2YgdGhlIEdOVSBDIGxpYnJhcnkKKytkZXNpZ25lZCB0byB3b3JrIHdlbGwgb24gZW1iZWRkZWQgc3lzdGVtcy4gIEluIHBhcnRpY3VsYXIsIEVHTElCQydzCisrY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIGFsbG93cyBlbWJlZGRlZCBkZXZlbG9wZXJzIHRvIGJ1aWxkCisrY3VzdG9taXplZCB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSB0aGF0IGluY2x1ZGUgb25seSB0aGUgZmVhdHVyZXMKKyt0aGVpciBhcHBsaWNhdGlvbiB1c2VzLCByZWR1Y2luZyBpdHMgc3BhY2UgcmVxdWlyZW1lbnRzLgorKworK0VHTElCQydzIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSBjYXRlZ29yaXplcyB0aGUgbGlicmFyeSdzCisrZnVuY3Rpb25zIGludG8gIm9wdGlvbiBncm91cHMiLCBhbmQgYWxsb3dzIHlvdSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUKKytvcHRpb24gZ3JvdXBzIGluZGl2aWR1YWxseS4gIFNvbWUgb3B0aW9uIGdyb3VwcyBkZXBlbmQgb24gb3RoZXJzOworK0VHTElCQyB0cmFja3MgdGhlc2UgcmVsYXRpb25zaGlwcywgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc2VsZWN0ZWQKKytjb25maWd1cmF0aW9uIHlpZWxkcyBhIGZ1bmN0aW9uaW5nIGxpYnJhcnkuCisrCisrCisrQ29uc2lzdGVudCBhbmQgUHJlZGljdGFibGUgQmVoYXZpb3IKKysKKytBIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgbWl4ZWQgYmxlc3Npbmc6IGlmIHRoZSBvcHRpb25zCisrb2ZmZXJlZCBhcmUgcG9vcmx5IGRlc2lnbmVkLCBpdCBjYW4gYmUgaGFyZCB0byBzZWUgd2hpY2ggY2hvaWNlcyB3aWxsCisraGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3RzLCBhbmQgY2hvaWNlcyB3aXRoIG9ic2N1cmUgY29uc2VxdWVuY2VzIGNhbgorK21ha2UgZGVidWdnaW5nIGRpZmZpY3VsdC4gIEVHTElCQydzIGNvbmZpZ3VyYXRpb24gZm9sbG93cyBzb21lIGdlbmVyYWwKKytwcmluY2lwbGVzIHRvIHJlZHVjZSB0aGVzZSByaXNrczoKKysKKystIEVHTElCQyBoYXMgYSBzaW5nbGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHRhcmdldAorKyAgYXJjaGl0ZWN0dXJlLgorKworKy0gSW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgYWxsIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQsIGFuZAorKyAgRUdMSUJDIGlzIHVwd2FyZGx5IEFQSS0gYW5kIEFCSS1jb21wYXRpYmxlIHdpdGggR0xJQkMuCisrCisrLSBBcyBtdWNoIGFzIHBvc3NpYmxlLCBjb25maWd1cmF0aW9ucyBvbmx5IGFmZmVjdCB3aGF0IGZ1bmN0aW9ucyBhcmUKKysgIHByZXNlbnQsIG5vdCBob3cgdGhleSBiZWhhdmUuICBJZiB0aGUgc3lzdGVtIHdvcmtzIHdpdGggYW4gb3B0aW9uCisrICBncm91cCBkaXNhYmxlZCwgaXQgd2lsbCBzdGlsbCB3b3JrIHdpdGggaXQgZW5hYmxlZC4KKysKKystIEFzIG11Y2ggYXMgcG9zc2libGUsIGNvbmZpZ3VyYXRpb25zIG9ubHkgc2VsZWN0IG9wdGlvbiBncm91cHMgLS0tCisrICB0aGV5IGRvIG5vdCBkZXNjcmliZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisrCisrVGhlc2UgcnVsZXMgbWVhbiB0aGF0IHlvdSBoYXZlIGEgc2ltcGxlIGRlYnVnZ2luZyBzdHJhdGVneSBhdmFpbGFibGUKKytpZiB5b3Ugc3VzcGVjdCB0aGF0IHlvdXIgRUdMSUJDIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgdGhlIHNvdXJjZSBvZiBhCisrcHJvYmxlbTogZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHJlLXRlc3QsIGFuZCB0aGVuCisrZGlzYWJsZSBvcHRpb24gZ3JvdXBzIG9uZSBieSBvbmUsIHVudGlsIHRoZSBwcm9ibGVtIHJlYXBwZWFycy4KKysKKysKKytUaGUgT3B0aW9uIEdyb3VwcworKworK1RvIHNlZSB0aGUgY3VycmVudCBmdWxsIGxpc3Qgb2YgaW1wbGVtZW50ZWQgb3B0aW9uIGdyb3VwcywgcmVmZXIgdG8gdGhlCisrZmlsZSAnb3B0aW9uLWdyb3Vwcy5kZWYnIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLCBvciBydW4KKysnbWFrZSBtZW51Y29uZmlnJyBmcm9tIHRoZSB0b3AtbGV2ZWwgYnVpbGQgZGlyZWN0b3J5LgorKworK1RoZSBQT1NJWC4xLTIwMDEgc3BlY2lmaWNhdGlvbiBpbmNsdWRlcyBhIHN1Z2dlc3RlZCBwYXJ0aXRpb24gb2YgYWxsCisrdGhlIGZ1bmN0aW9ucyBpbiB0aGUgUE9TSVggQyBBUEkgaW50byBvcHRpb24gZ3JvdXBzOiBtYXRoIGZ1bmN0aW9ucworK2xpa2UgJ3NpbicgYW5kICdjb3MnOyBuZXR3b3JraW5nIGZ1bmN0aW9ucyBsaWtlICdzb2NrZXQnIGFuZAorKydjb25uZWN0JzsgYW5kIHNvIG9uLiAgRUdMSUJDIGNvdWxkIHVzZSB0aGlzIHBhcnRpdGlvbmluZyBhcyB0aGUgYmFzaXMKKytmb3IgZnV0dXJlIG9wdGlvbiBncm91cHMuCisrCisrCisrSW1wbGVtZW50YXRpb24KKysKKytUaGUgRUdMSUJDIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSByZXNlbWJsZXMgdGhlIGFwcHJvYWNoIHVzZWQKKytieSB0aGUgTGludXgga2VybmVsIHRvIHNlbGVjdCBkZXZpY2UgZHJpdmVycywgbmV0d29yayBwcm90b2NvbHMsIGFuZAorK290aGVyIGZlYXR1cmVzLiAgQSBmaWxlIG5hbWVkICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgaW4gdGhlIHRvcC1sZXZlbAorK2J1aWxkIGRpcmVjdG9yeSBjb250YWlucyBhc3NpZ25tZW50cyB0byBNYWtlIHZhcmlhYmxlcywgZWFjaCBvZiB3aGljaAorK2VuYWJsZXMgb3IgZGlzYWJsZXMgYSBwYXJ0aWN1bGFyIG9wdGlvbiBncm91cC4gIElmIHRoZSB2YXJpYWJsZSdzCisrdmFsdWUgaXMgc2V0IHRvICd5JywgdGhlbiB0aGUgb3B0aW9uIGdyb3VwIGlzIGVuYWJsZWQ7IGlmIGl0IHNldCB0bworK2FueXRoaW5nIGVsc2UsIHRoZSBvcHRpb24gZ3JvdXAgaXMgb21pdHRlZC4gIFRoZSBmaWxlCisrJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwgZXN0YWJsaXNoZXMKKytkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHZhcmlhYmxlczsgYWxsIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQgYnkKKytkZWZhdWx0LgorKworK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgd291bGQgb21pdCBsb2NhbGUKKytkYXRhLCBidXQgaW5jbHVkZSBtYXRoZW1hdGljYWwgZnVuY3Rpb25zLCBhbmQgZXZlcnl0aGluZyBlbHNlOgorKworKyAgIE9QVElPTl9FR0xJQkNfTE9DQUxFUyA9IG4KKysgICBPUFRJT05fRUdMSUJDX0xJQk0gPSB5CisrCisrTGlrZSB0aGUgTGludXgga2VybmVsLCBFR0xJQkMgc3VwcG9ydHMgYSBzaW1pbGFyIHNldCBvZiAnKmNvbmZpZycgbWFrZQorK3RhcmdldHMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY3JlYXRlICdvcHRpb24tZ3JvdXBzLmNvbmZpZycsIHdpdGggYWxsCisrZGVwZW5kZW5jaWVzIGJldHdlZW4gb3B0aW9uIGdyb3VwcyBhdXRvbWF0aWNhbGx5IHNhdGlzZmllZC4gIFJ1bgorKydtYWtlIGhlbHAnIHRvIHNlZSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWFrZSBjb25maWcgdGFyZ2V0cy4gIEZvcgorK2V4YW1wbGUsICdtYWtlIG1lbnVjb25maWcnIHdpbGwgdXBkYXRlIHRoZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYQorK21lbnUgYmFzZWQgcHJvZ3JhbS4KKysKKytUaGUgb3B0aW9uIGdyb3VwIG5hbWVzIGFuZCB0aGVpciB0eXBlIChib29sZWFuLCBpbnQsIGhleCwgc3RyaW5nKSwgaGVscAorK2Rlc2NyaXB0aW9uLCBhbmQgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgb3B0aW9uIGdyb3VwcywgYXJlIGRlc2NyaWJlZCBieQorKydvcHRpb24tZ3JvdXBzLmRlZicgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsIGFuYWxvZ291cyB0byB0aGUKKysnS2NvbmZpZycgZmlsZXMgaW4gdGhlIExpbnV4IGtlcm5lbC4KKysKKytJbiBnZW5lcmFsLCBlYWNoIG9wdGlvbiBncm91cCB2YXJpYWJsZSBjb250cm9scyB3aGV0aGVyIGEgZ2l2ZW4gc2V0IG9mCisrb2JqZWN0IGZpbGVzIGluIEVHTElCQyBpcyBjb21waWxlZCBhbmQgaW5jbHVkZWQgaW4gdGhlIGZpbmFsCisrbGlicmFyaWVzLCBvciBvbWl0dGVkIGZyb20gdGhlIGJ1aWxkLgorKworK0VhY2ggc3ViZGlyZWN0b3J5J3MgTWFrZWZpbGUgY2F0ZWdvcml6ZXMgaXRzIHJvdXRpbmVzLCBsaWJyYXJpZXMsIGFuZAorK2V4ZWN1dGFibGVzIGJ5IG9wdGlvbiBncm91cC4gIEZvciBleGFtcGxlLCBFR0xJQkMncyAnbWF0aC9NYWtlZmlsZScKKytwbGFjZXMgdGhlICdsaWJtJyBsaWJyYXJ5IGluIHRoZSBPUFRJT05fRUdMSUJDX0xJQk0gZ3JvdXAgYXMgZm9sbG93czoKKysKKysgICBleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSA6PSBsaWJtCisrCisrRmluYWxseSwgY29tbW9uIGNvZGUgaW4gJ01ha2VydWxlcycgY2l0ZXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQorKydleHRyYS1saWJzLXknLCBzZWxlY3Rpbmcgb25seSB0aG9zZSBsaWJyYXJpZXMgdGhhdCBiZWxvbmcgdG8gZW5hYmxlZAorK29wdGlvbiBncm91cHMgdG8gYmUgYnVpbHQuCisrCisrCisrQ3VycmVudCBTdGF0dXMgYW5kIEZ1dHVyZSBEaXJlY3Rpb25zCisrCisrVGhlIEVHTElCQyBjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gZGVzY3JpYmVkIGhlcmUgaXMgc3RpbGwKKyt1bmRlciBkZXZlbG9wbWVudC4KKysKKytXZSBoYXZlIHVzZWQgdGhlIHN5c3RlbSB0byBzdWJzZXQgc29tZSBwb3J0aW9ucyBvZiBFR0xJQkMncworK0luZGV4OiBsaWJjL2NvbmZpZ3VyZS5hYworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDY1OGNjZmEuLmY5MDYzOTEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yNCw2ICsyNCw3IEBAIGVuZGlmCisgCisgaW5jbHVkZSBNYWtlY29uZmlnCisgCisraW5jbHVkZSBvcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorIAorICMgVGhpcyBpcyB0aGUgZGVmYXVsdCB0YXJnZXQ7IGl0IG1ha2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSB0ZXN0cy4KKyAuUEhPTlk6IGFsbAorZGlmZiAtLWdpdCBhL2NvbmZpZy5tYWtlLmluIGIvY29uZmlnLm1ha2UuaW4KK2luZGV4IGE5ZjU2OTYuLjI5NGY4ZDEgMTAwNjQ0CistLS0gYS9jb25maWcubWFrZS5pbgorKysrIGIvY29uZmlnLm1ha2UuaW4KK0BAIC00Nyw2ICs0Nyw4IEBAIGMrKy1zeXNpbmNsdWRlcyA9IEBDWFhfU1lTSU5DTFVERVNACisgYWxsLXdhcm5pbmdzID0gQGFsbF93YXJuaW5nc0AKKyBlbmFibGUtd2Vycm9yID0gQGVuYWJsZV93ZXJyb3JACisgCisra2NvbmZpZ190b29scyA9IEBLQ09ORklHX1RPT0xTQAorKworIGhhdmUtei1jb21icmVsb2MgPSBAbGliY19jdl96X2NvbWJyZWxvY0AKKyBoYXZlLXotZXhlY3N0YWNrID0gQGxpYmNfY3Zfel9leGVjc3RhY2tACisgaGF2ZS1CZ3JvdXAgPSBAbGliY19jdl9CZ3JvdXBACitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3ZDcyOTlhLi40MTE2NDA0IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NDEsNiArNjQxLDcgQEAgSU5TVEFMTF9JTkZPCisgUEVSTAorIEJBU0hfU0hFTEwKKyBsaWJjX2N2X2djY19zdGF0aWNfbGliZ2NjCisrS0NPTkZJR19UT09MUworIENYWF9TWVNJTkNMVURFUworIFNZU0lOQ0xVREVTCisgQVVUT0NPTkYKK0BAIC03NTUsNiArNzU2LDcgQEAgd2l0aF9mcAorIHdpdGhfYmludXRpbHMKKyB3aXRoX3NlbGludXgKKyB3aXRoX2hlYWRlcnMKKyt3aXRoX2tjb25maWcKKyB3aXRoX2RlZmF1bHRfbGluaworIGVuYWJsZV9zYW5pdHlfY2hlY2tzCisgZW5hYmxlX3NoYXJlZAorQEAgLTE0NTksNiArMTQ2MSw5IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXNlbGludXggICAgICAgICAgaWYgYnVpbGRpbmcgd2l0aCBTRUxpbnV4IHN1cHBvcnQKKyAgIC0td2l0aC1oZWFkZXJzPVBBVEggICAgIGxvY2F0aW9uIG9mIHN5c3RlbSBoZWFkZXJzIHRvIHVzZSAoZm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUpIFtkZWZhdWx0PWNvbXBpbGVyIGRlZmF1bHRdCisrICAtLXdpdGgta2NvbmZpZz1QQVRIICAgICBsb2NhdGlvbiBvZiBrY29uZmlnIHRvb2xzIHRvIHVzZSAoZnJvbSBMaW51eCBrZXJuZWwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcykgdG8gcmUtdXNlIGZvciBjb25maWd1cmluZyBFR0xJQkMgb3B0aW9uCisrICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMKKyAgIC0td2l0aC1kZWZhdWx0LWxpbmsgICAgIGRvIG5vdCB1c2UgZXhwbGljaXQgbGlua2VyIHNjcmlwdHMKKyAgIC0td2l0aC1jcHU9Q1BVICAgICAgICAgIHNlbGVjdCBjb2RlIGZvciBDUFUgdmFyaWFudAorIAorQEAgLTM1MTcsNiArMzUyMiwxNCBAQCBmaQorIAorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgta2NvbmZpZyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2tjb25maWcrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIHdpdGh2YWw9JHdpdGhfa2NvbmZpZzsgS0NPTkZJR19UT09MUz0kd2l0aHZhbAorK2Vsc2UKKysgIEtDT05GSUdfVE9PTFM9JycKKytmaQorKworKworIAorICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdC1saW5rIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfZGVmYXVsdF9saW5rK3NldH0iID0gc2V0OyB0aGVuIDoKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE0NjdhNjkuLmZjMGVkNGQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEzNiw2ICsxMzYsMTYgQEAgQUNfQVJHX1dJVEgoW2hlYWRlcnNdLAorIAkgICAgW3N5c2hlYWRlcnM9JyddKQorIEFDX1NVQlNUKHN5c2hlYWRlcnMpCisgCisrQUNfQVJHX1dJVEgoW2tjb25maWddLAorKwkgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1rY29uZmlnPVBBVEhdLAorKwkJCSAgIFtsb2NhdGlvbiBvZiBrY29uZmlnIHRvb2xzIHRvIHVzZSAoZnJvbSBMaW51eAorKwkJCSAgICBrZXJuZWwgYnVpbGRzKSB0byByZS11c2UgZm9yIGNvbmZpZ3VyaW5nIEVHTElCQworKwkJCSAgICBvcHRpb24gZ3JvdXBzXSksCisrCSAgICBbS0NPTkZJR19UT09MUz0kd2l0aHZhbF0sCisrCSAgICBbS0NPTkZJR19UT09MUz0nJ10pCisrQUNfU1VCU1QoS0NPTkZJR19UT09MUykKKysKKysKKyBBQ19TVUJTVCh1c2VfZGVmYXVsdF9saW5rKQorIEFDX0FSR19XSVRIKFtkZWZhdWx0LWxpbmtdLAorIAkgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWZhdWx0LWxpbmtdLAorZGlmZiAtLWdpdCBhL29wdGlvbi1ncm91cHMuZGVmIGIvb3B0aW9uLWdyb3Vwcy5kZWYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42YWViZDk0CistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb24tZ3JvdXBzLmRlZgorQEAgLTAsMCArMSw4NjggQEAKKysjIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIG9wdGlvbiBncm91cHMgRUdMSUJDIGN1cnJlbnRseSBzdXBwb3J0cywgaW4KKysjIGEgZm9ybWF0IGFraW4gdG8gdGhlIExpbnV4IEtjb25maWcgc3lzdGVtJ3MuICBUaGUgc3ludGF4IG1heSBjaGFuZ2UKKysjIG92ZXIgdGltZS4KKysjCisrIyBBbiBlbnRyeSBvZiB0aGUgZm9ybToKKysjCisrIyAgIGNvbmZpZyBHUk9VUF9OQU1FCisrIyAgICAgICBib29sICJvbmUtbGluZSBleHBsYW5hdGlvbiBvZiB3aGF0IHRoaXMgb3B0aW9uIGdyb3VwIGNvbnRyb2xzIgorKyMgICAgICAgaGVscAorKyMgICAgICAgICAgIE11bHRpLWxpbmUgaGVscCBleHBsYWluaW5nIHRoZSBvcHRpb24gZ3JvdXAncyBtZWFuaW5nIGluCisrIyAgICAgICAgICAgc29tZSBkZXRhaWwsIHRlcm1pbmF0ZWQgYnkgaW5kZW50YXRpb24gbGV2ZWwuCisrIworKyMgZGVmaW5lcyBhbiBvcHRpb24gZ3JvdXAgd2hvc2UgdmFyaWFibGUgaXMgR1JPVVBfTkFNRSwgd2l0aAorKyMgbWVhbmluZ2Z1bCB2YWx1ZXMgJ3knIChlbmFibGVkKSBhbmQgJ24nIChkaXNhYmxlZCkuICBUaGUKKysjIGRvY3VtZW50YXRpb24gaXMgZm9ybWF0dGVkIHRvIGJlIGNvbnN1bWVkIGJ5IHNvbWUgc29ydCBvZgorKyMgaW50ZXJhY3RpdmUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UsIGJ1dCBFR0xJQkMgZG9lc24ndCBoYXZlIHN1Y2ggYW4KKysjIGludGVyZmFjZSB5ZXQuCisrIworKyMgQW4gb3B0aW9uIG1heSBoYXZlIGEgJ2RlcGVuZHMgb24nIGxpbmUsIGluZGljYXRpbmcgd2hpY2ggb3RoZXIgb3B0aW9ucworKyMgbXVzdCBhbHNvIGJlIGVuYWJsZWQgaWYgdGhpcyBvcHRpb24gaXMuICBBdCBwcmVzZW50LCBFR0xJQkMgZG9lc24ndAorKyMgY2hlY2sgdGhhdCB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4KKysjCisrIyBPcHRpb24gZ3JvdXAgdmFyaWFibGVzIGdldCB0aGVpciBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBmaWxlCisrIyAnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycsIGluIHRoZSB0b3AgZGlyZWN0b3J5IG9mIHRoZSBFR0xJQkMgc291cmNlCisrIyB0cmVlLiAgQnkgZGVmYXVsdCwgYWxsIEVHTElCQyBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkIC0tLSB0aGVpcgorKyMgdmFyaWFibGVzIGFyZSBzZXQgdG8gJ3knLgorKyMKKysjIEFmdGVyIGluY2x1ZGluZyAnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycsIHRoZSBFR0xJQkMgbWFrZSBtYWNoaW5lcnkKKysjIGluY2x1ZGVzIHRoZSBmaWxlICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgZnJvbSB0aGUgdG9wIG9mIHRoZSBidWlsZAorKyMgdHJlZSwgaWYgaXQgaXMgcHJlc2VudC4gIERldmVsb3BlcnMgY2FuIHBsYWNlIGFzc2lnbm1lbnRzIHRvIG9wdGlvbgorKyMgZ3JvdXAgdmFyaWFibGVzIGluIHRoYXQgZmlsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuICBGb3IgZXhhbXBsZSwKKysjIHRvIGRpc2FibGUgYW4gb3B0aW9uIGdyb3VwLCBwbGFjZSBhIGxpbmUgb2YgdGhlIGZvcm06CisrIworKyMgICAgT1BUSU9OX0dST1VQX05BTUUgPSBuCisrIworKyMgaW4gJ29wdGlvbi1ncm91cHMuY29uZmlnJyBhdCB0aGUgdG9wIG9mIHlvdXIgYnVpbGQgdHJlZS4gIFRvCisrIyBleHBsaWNpdGx5IGVuYWJsZSBhbiBvcHRpb24gZ3JvdXAsIHlvdSBtYXkgYWxzbyB3cml0ZToKKysjCisrIyAgICBPUFRJT05fR1JPVVBfTkFNRSA9IHkKKysjCisrIyBhbHRob3VnaCB0aGlzIHNpbXBseSByZWVzdGFibGlzaGVzIHRoZSB2YWx1ZSBhbHJlYWR5IHNldCBieQorKyMgJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLgorKworK2NvbmZpZyBFR0xJQkNfQURWQU5DRURfSU5FVDYKKysgICBib29sICJJUHY2IEFkdmFuY2VkIFNvY2tldHMgQVBJIHN1cHBvcnQgKFJGQzM1NDIpIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgc3BlY2lmaWVkIGJ5IFJGQyAzNTQyLAorKyAgICAgICAiQWR2YW5jZWQgU29ja2V0cyBBcHBsaWNhdGlvbiBQcm9ncmFtIEludGVyZmFjZSAoQVBJKSBmb3IKKysgICAgICAgSVB2NiIuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGluZXQ2X29wdF9hcHBlbmQKKysgICAgICAgICBpbmV0Nl9vcHRfZmluZAorKyAgICAgICAgIGluZXQ2X29wdF9maW5pc2gKKysgICAgICAgICBpbmV0Nl9vcHRfZ2V0X3ZhbAorKyAgICAgICAgIGluZXQ2X29wdF9pbml0CisrICAgICAgICAgaW5ldDZfb3B0aW9uX2FsbG9jCisrICAgICAgICAgaW5ldDZfb3B0aW9uX2FwcGVuZAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9maW5kCisrICAgICAgICAgaW5ldDZfb3B0aW9uX2luaXQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fbmV4dAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9zcGFjZQorKyAgICAgICAgIGluZXQ2X29wdF9uZXh0CisrICAgICAgICAgaW5ldDZfb3B0X3NldF92YWwKKysgICAgICAgICBpbmV0Nl9ydGhfYWRkCisrICAgICAgICAgaW5ldDZfcnRoX2dldGFkZHIKKysgICAgICAgICBpbmV0Nl9ydGhfaW5pdAorKyAgICAgICAgIGluZXQ2X3J0aF9yZXZlcnNlCisrICAgICAgICAgaW5ldDZfcnRoX3NlZ21lbnRzCisrICAgICAgICAgaW5ldDZfcnRoX3NwYWNlCisrCisrY29uZmlnIEVHTElCQ19CQUNLVFJBQ0UKKysgICBib29sICJGdW5jdGlvbnMgZm9yIHByb2R1Y2luZyBiYWNrdHJhY2VzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBwcm9kdWNpbmcgYSBsaXN0IG9mCisrICAgICAgIHRoZSBmdW5jdGlvbiBjYWxscyB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlIGluIGEgdGhyZWFkLCBmcm9tCisrICAgICAgIHdpdGhpbiB0aGUgdGhyZWFkIGl0c2VsZi4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gdXNlZAorKyAgICAgICB3aXRoaW4gc2lnbmFsIGhhbmRsZXJzLCB0byBwcm9kdWNlIGRpYWdub3N0aWMgb3V0cHV0LgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBiYWNrdHJhY2UKKysgICAgICAgICBiYWNrdHJhY2Vfc3ltYm9scworKyAgICAgICAgIGJhY2t0cmFjZV9zeW1ib2xzX2ZkCisrCisrY29uZmlnIEVHTElCQ19CSUdfTUFDUk9TCisrICAgYm9vbCAiVXNlIGV4dGVuc2l2ZSBpbmxpbmUgY29kZSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIHNwZWNpZmllcyB3aGV0aGVyIGNlcnRhaW4gcGllY2VzIG9mIGNvZGUKKysgICAgICAgc2hvdWxkIGJlIGlubGluZWQgdG8gYWNoaWV2ZSBtYXhpbXVtIHNwZWVkLiAgSWYgdGhpcyBvcHRpb24KKysgICAgICAgZ3JvdXAgaXMgbm90IHNlbGVjdGVkLCBmdW5jdGlvbiBjYWxscyB3aWxsIGJlIHVzZWQgaW5zdGVhZCwKKysgICAgICAgaGVuY2UgcmVkdWNpbmcgdGhlIGxpYnJhcnkgZm9vdHByaW50LgorKworK2NvbmZpZyBFR0xJQkNfQlNECisrICAgYm9vbCAiQlNELXNwZWNpZmljIGZ1bmN0aW9ucywgYW5kIHRoZWlyIGNvbXBhdGliaWxpdHkgc3R1YnMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gQlNEIGtlcm5lbHMuCisrICAgICAgIEEgbnVtYmVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0dWIgdmVyc2lvbnMgdGhhdCBhcmUgYWxzbworKyAgICAgICBpbmNsdWRlZCBpbiBsaWJyYXJpZXMgYnVpbHQgZm9yIG5vbi1CU0Qgc3lzdGVtcyBmb3IKKysgICAgICAgY29tcGF0aWJpbGl0eS4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgY2hmbGFncworKyAgICAgICAgIGZjaGZsYWdzCisrICAgICAgICAgbGNobW9kCisrICAgICAgICAgcmV2b2tlCisrICAgICAgICAgc2V0bG9naW4KKysKKytjb25maWcgRUdMSUJDX0NYWF9URVNUUworKyAgIGJvb2wgIlRlc3RzIHRoYXQgbGluayBhZ2FpbnN0IHRoZSBzdGFuZGFyZCBDKysgbGlicmFyeS4iCisrICAgZGVwZW5kcyBvbiBQT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPICYmIEVHTElCQ19MSUJNCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBkb2VzIG5vdCBpbmNsdWRlIGFueSBDIGxpYnJhcnkgZnVuY3Rpb25zOworKyAgICAgICBpbnN0ZWFkLCBpdCBjb250cm9scyB3aGljaCBFR0xJQkMgdGVzdHMgYW4gb3JkaW5hcnkgJ21ha2UKKysgICAgICAgdGVzdHMnIHJ1bnMuICBXaXRoIHRoaXMgZ3JvdXAgZGlzYWJsZWQsIHRlc3RzIHRoYXQgd291bGQKKysgICAgICAgbm9ybWFsbHkgbGluayBhZ2FpbnN0IHRoZSBzdGFuZGFyZCBDKysgbGlicmFyeSBhcmUgbm90CisrICAgICAgIHJ1bi4KKysKKysgICAgICAgVGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJ5IGRlcGVuZHMgb24gdGhlIG1hdGggbGlicmFyeSAnbGlibScgYW5kCisrICAgICAgIHRoZSB3aWRlIGNoYXJhY3RlciBJL08gZnVuY3Rpb25zIGluY2x1ZGVkIGluIEVHTElCQy4gIFNvIHRob3NlCisrICAgICAgIG9wdGlvbiBncm91cHMgbXVzdCBiZSBlbmFibGVkIGlmIHRoaXMgdGVzdCBpcyBlbmFibGVkLgorKworK2NvbmZpZyBFR0xJQkNfQ0FUR0VUUworKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIG1lc3NhZ2UgY2F0YWxvZ3MiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfTE9DQUxFX0NPREUKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIG1lc3NhZ2UKKysgICAgICAgY2F0YWxvZ3M6IGNhdG9wZW4sIGNhdGNsb3NlLCBhbmQgY2F0Z2V0cy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZGVwZW5kcyBvbiB0aGUgRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgIG9wdGlvbiBncm91cC4KKysKKytjb25maWcgRUdMSUJDX0NIQVJTRVRTCisrICAgYm9vbCAiaWNvbnYvZ2NvbnYgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIGxpYnJhcmllcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBzZXRzIG90aGVyCisrICAgICAgIHRoYW4gQVNDSUkgKEFOU0lfWDMuNC0xOTY4KSBhbmQgVW5pY29kZSBhbmQgSVNPLTEwNjQ2IGluIHRoZWlyCisrICAgICAgIHZhcmlvdXMgZW5jb2RpbmdzLiAgVGhpcyBhZmZlY3RzIGJvdGggdGhlIGNoYXJhY3RlciBzZXRzCisrICAgICAgIHN1cHBvcnRlZCBieSB0aGUgd2lkZSBhbmQgbXVsdGlieXRlIGNoYXJhY3RlciBmdW5jdGlvbnMsIGFuZAorKyAgICAgICB0aG9zZSBzdXBwb3J0ZWQgYnkgdGhlICdpY29udicgZnVuY3Rpb25zLgorKworKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCBFR0xJQkMgc3VwcG9ydHMgb25seSB0aGUKKysgICAgICAgZm9sbG93aW5nIGNoYXJhY3RlciBzZXRzOgorKworKyAgICAgICAgICBBTlNJX1gzLjQgICAgICAgICAtIEFTQ0lJCisrICAgICAgICAgIEFOU0lfWDMuNC0xOTY4CisrICAgICAgICAgIEFOU0lfWDMuNC0xOTg2CisrICAgICAgICAgIEFTQ0lJCisrICAgICAgICAgIENQMzY3CisrICAgICAgICAgIENTQVNDSUkKKysgICAgICAgICAgSUJNMzY3CisrICAgICAgICAgIElTTy1JUi02CisrICAgICAgICAgIElTTzY0Ni1VUworKyAgICAgICAgICBJU09fNjQ2LklSVjoxOTkxCisrICAgICAgICAgIE9TRjAwMDEwMDIwCisrICAgICAgICAgIFVTCisrICAgICAgICAgIFVTLUFTQ0lJCisrCisrICAgICAgICAgIDEwNjQ2LTE6MTk5MyAgICAgIC0gSVNPIDEwNjQ2LCBpbiBiaWctZW5kaWFuIFVDUzQgZm9ybQorKyAgICAgICAgICAxMDY0Ni0xOjE5OTMvVUNTNAorKyAgICAgICAgICBDU1VDUzQKKysgICAgICAgICAgSVNPLTEwNjQ2CisrICAgICAgICAgIElTTy0xMDY0Ni9VQ1M0CisrICAgICAgICAgIE9TRjAwMDEwMTA0CisrICAgICAgICAgIE9TRjAwMDEwMTA1CisrICAgICAgICAgIE9TRjAwMDEwMTA2CisrICAgICAgICAgIFVDUy00CisrICAgICAgICAgIFVDUy00QkUKKysgICAgICAgICAgVUNTNAorKworKyAgICAgICAgICBVQ1MtNExFICAgICAgICAgICAtIElTTyAxMDY0NiwgaW4gbGl0dGxlLWVuZGlhbiBVQ1M0IGZvcm0KKysKKysgICAgICAgICAgSVNPLTEwNjQ2L1VURi04ICAgLSBJU08gMTA2NDYsIGluIFVURi04IGZvcm0KKysgICAgICAgICAgSVNPLTEwNjQ2L1VURjgKKysgICAgICAgICAgSVNPLUlSLTE5MworKyAgICAgICAgICBPU0YwNTAxMDAwMQorKyAgICAgICAgICBVVEYtOAorKyAgICAgICAgICBVVEY4CisrCisrICAgICAgICAgIElTTy0xMDY0Ni9VQ1MyICAgIC0gSVNPIDEwNjQ2LCBpbiB0YXJnZXQtZW5kaWFuIFVDUzIgZm9ybQorKyAgICAgICAgICBPU0YwMDAxMDEwMAorKyAgICAgICAgICBPU0YwMDAxMDEwMQorKyAgICAgICAgICBPU0YwMDAxMDEwMgorKyAgICAgICAgICBVQ1MtMgorKyAgICAgICAgICBVQ1MyCisrCisrICAgICAgICAgIFVDUy0yQkUgICAgICAgICAgIC0gSVNPIDEwNjQ2LCBpbiBiaWctZW5kaWFuIFVDUzIgZm9ybQorKyAgICAgICAgICBVTklDT0RFQklHCisrCisrICAgICAgICAgIFVDUy0yTEUgICAgICAgICAgIC0gSVNPIDEwNjQ2LCBpbiBsaXR0bGUtZW5kaWFuIFVDUzIgZm9ybQorKyAgICAgICAgICBVTklDT0RFTElUVExFCisrCisrICAgICAgICAgIFdDSEFSX1QgICAgICAgICAgIC0gRUdMSUJDJ3MgaW50ZXJuYWwgZm9ybSAodGFyZ2V0LWVuZGlhbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi1iaXQgSVNPIDEwNjQ2KQorKworK2NvbmZpZyBFR0xJQkNfQ1JZUFQKKysgICBib29sICJFbmNyeXB0aW9uIGxpYnJhcnkiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYmNyeXB0JyBsaWJyYXJ5IHdoaWNoCisrICAgICAgIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3Igb25lLXdheSBlbmNyeXB0aW9uLiAgU3VwcG9ydGVkCisrICAgICAgIGVuY3J5cHRpb24gYWxnb3JpdGhtcyBpbmNsdWRlIE1ENSwgU0hBLTI1NiwgU0hBLTUxMiBhbmQgREVTLgorKworK2NvbmZpZyBFR0xJQkNfQ1JZUFRfVUZDCisrICAgYm9vbCAiVWx0cmEgZmFzdCBgY3J5cHQnIGltcGxlbWVudGF0aW9uIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0NSWVBUCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBwcm92aWRlcyB1bHRyYSBmYXN0IERFUy1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZgorKyAgICAgICB0aGUgYGNyeXB0JyBmdW5jdGlvbi4gIFdoZW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgZGlzYWJsZWQsCisrICAgICAgIChhKSB0aGUgbGlicmFyeSB3aWxsIG5vdCBwcm92aWRlIHRoZSBzZXRrZXlbX3JdIGFuZCBlbmNyeXB0W19yXQorKyAgICAgICBmdW5jdGlvbnMgYW5kIChiKSB0aGUgY3J5cHRbX3JdIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwgYW5kIHNldCB0aGUKKysgICAgICAgZXJybm8gdG8gRU5PU1lTIGlmIC9zYWx0LyBwYXNzZWQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBlaXRoZXIgTUQ1LAorKyAgICAgICBTSEEtMjU2IG9yIFNIQS01MTIgYWxnb3JpdGhtLgorKworK2NvbmZpZyBFR0xJQkNfREJfQUxJQVNFUworKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBtYWlsIGFsaWFzZXMgZGF0YWJhc2UiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWR1ZXMgZnVuY3Rpb25zIGZvciBsb29raW5nIHVwIG1haWwKKysgICAgICAgYWxpYXNlcyBpbiAnL2V0Yy9hbGlhc2VzJyBvciB1c2luZyBuc3N3aXRjaC4gIEl0IGluY2x1ZGVzIHRoZQorKyAgICAgICBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZGFsaWFzZW50CisrICAgICAgICAgZ2V0YWxpYXNieW5hbWUKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZV9yCisrICAgICAgICAgZ2V0YWxpYXNlbnQKKysgICAgICAgICBnZXRhbGlhc2VudF9yCisrICAgICAgICAgc2V0YWxpYXNlbnQKKysKKysgICAgICAgV2hlbiB0aGlzIG9wdGlvbiBncm91cCBpcyBkaXNhYmxlZCwgdGhlIE5TUyBzZXJ2aWNlIGxpYnJhcmllcworKyAgICAgICBhbHNvIGxhY2sgc3VwcG9ydCBmb3IgcXVlcnlpbmcgdGhlaXIgbWFpbCBhbGlhcyB0YWJsZXMuCisrCisrY29uZmlnIEVHTElCQ19FTlZaCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBoYW5kbGluZyBlbnZ6LXN0eWxlIGVudmlyb25tZW50IHZlY3RvcnMuIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgY29udGFpbnMgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBhbmQgb3BlcmF0aW5nCisrICAgICAgIG9uIGVudnogdmVjdG9ycy4gIEFuICJlbnZ6IHZlY3RvciIgaXMgYSB2ZWN0b3Igb2Ygc3RyaW5ncyBpbiBhCisrICAgICAgIGNvbnRpZ3VvdXMgYmxvY2sgb2YgbWVtb3J5LCB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYSBuYW1lLXZhbHVlCisrICAgICAgIHBhaXIsIGFuZCBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIGZyb20gdGhlaXIgbmVpZ2hib3JzIGJ5IG51bGwKKysgICAgICAgY2hhcmFjdGVycy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICBlbnZ6X2FkZCAgICAgICAgZW52el9tZXJnZQorKyAgICAgICAgZW52el9lbnRyeSAgICAgIGVudnpfcmVtb3ZlCisrICAgICAgICBlbnZ6X2dldCAgICAgICAgZW52el9zdHJpcAorKworK2NvbmZpZyBFR0xJQkNfRkNWVAorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgY29udmVydGluZyBmbG9hdGluZy1wb2ludCBudW1iZXJzIHRvIHN0cmluZ3MiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcKKysgICAgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyB0byBzdHJpbmdzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlY3Z0ICAgICAgICAgICBxZWN2dAorKwkgZWN2dF9yCQlxZWN2dF9yCisrICAgICAgICAgZmN2dAkJcWZjdnQKKysJIGZjdnRfcgkJcWZjdnRfcgorKyAgICAgICAgIGdjdnQJCXFnY3Z0CisrCisrY29uZmlnIEVHTElCQ19GTVRNU0cKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGZvcm1hdHRpbmcgbWVzc2FnZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBhZGRzZXZlcml0eSAgICBmbXRtc2cKKysKKytjb25maWcgRUdMSUJDX0ZTVEFCCisrICAgYm9vbCAiQWNjZXNzIGZ1bmN0aW9ucyBmb3IgJ2ZzdGFiJyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyB0aGUgbW91bnQKKysgICAgICAgcG9pbnQgc3BlY2lmaWNhdGlvbiB0YWJsZSwgJy9ldGMvZnN0YWInLiAgVGhlc2UgZnVuY3Rpb25zIGFyZQorKyAgICAgICBub3QgaW5jbHVkZWQgaW4gdGhlIFBPU0lYIHN0YW5kYXJkLCB3aGljaCBwcm92aWRlcyB0aGUKKysgICAgICAgJ2dldG1udGVudCcgZmFtaWx5IG9mIGZ1bmN0aW9ucyBpbnN0ZWFkLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmRmc2VudCAgICAgICBnZXRmc3NwZWMKKysgICAgICAgICBnZXRmc2VudCAgICAgICBzZXRmc2VudAorKyAgICAgICAgIGdldGZzZmlsZQorKworK2NvbmZpZyBFR0xJQkNfRlRSQVZFUlNFCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciB0cmF2ZXJzaW5nIGZpbGUgaGllcmFyY2hpZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHRyYXZlcnNpbmcgZmlsZQorKyAgICAgICBVTklYIGZpbGUgaGllcmFjaGllcy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZnRzX29wZW4gICAgICAgZnR3CisrCSBmdHNfcmVhZAluZnR3CisrICAgICAgICAgZnRzX2NoaWxkcmVuCWZ0dzY0CisrCSBmdHNfc2V0CW5mdHc2NAorKyAgICAgICAgIGZ0c19jbG9zZQorKworK2NvbmZpZyBFR0xJQkNfR0VUTE9HSU4KKysgICBib29sICJUaGUgZ2V0bG9naW4gZnVuY3Rpb24iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfVVRNUAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBmdW5jdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgJ2dldGxvZ2luJyBhbmQgJ2dldGxvZ2luX3InCisrICAgICAgIGZ1bmN0aW9ucywgd2hpY2ggcmV0dXJuIHRoZSB1c2VyIG5hbWUgYXNzb2NpYXRlZCBieSB0aGUgbG9naW4KKysgICAgICAgYWN0aXZpdHkgd2l0aCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgY29udHJvbGxpbmcgdGVybWluYWwuCisrCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIHRoZSAnZ2xvYicgZnVuY3Rpb24gd2lsbCBub3QKKysgICAgICAgZmFsbCBiYWNrIG9uICdnZXRsb2dpbicgdG8gZmluZCB0aGUgdXNlcidzIGxvZ2luIG5hbWUgZm9yIHRpbGRlCisrICAgICAgIGV4cGFuc2lvbiB3aGVuIHRoZSAnSE9NRScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldC4KKysKKytjb25maWcgRUdMSUJDX0lETgorKyAgIGJvb2wgIkludGVybmF0aW9uYWwgZG9tYWluIG5hbWVzIHN1cHBvcnQiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYmNpZG4nIGxpYnJhcnkgd2hpY2gKKysgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgaW50ZXJuYXRpb25hbCBkb21haW4gbmFtZXMuCisrCisrY29uZmlnIEVHTElCQ19JTkVUCisrICAgYm9vbCAiTmV0d29ya2luZyBzdXBwb3J0IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgbmV0d29ya2luZy1zcGVjaWZpYyBmdW5jdGlvbnMgYW5kCisrICAgICAgIGRhdGEuICBXaXRoIEVHTElCQ19JTkVUIGRpc2FibGVkLCB0aGUgRUdMSUJDCisrICAgICAgIGluc3RhbGxhdGlvbiBhbmQgQVBJIGNoYW5nZXMgYXMgZm9sbG93czoKKysKKysgICAgICAgLSBUaGUgZm9sbG93aW5nIGxpYnJhcmllcyBhcmUgbm90IGluc3RhbGxlZDoKKysKKysgICAgICAgICBsaWJuc2wKKysgICAgICAgICBsaWJuc3NfY29tcGF0CisrICAgICAgICAgbGlibnNzX2RucworKyAgICAgICAgIGxpYm5zc19oZXNpb2QKKysgICAgICAgICBsaWJuc3NfbmlzCisrICAgICAgICAgbGlibnNzX25pc3BsdXMKKysgICAgICAgICBsaWJyZXNvbHYKKysKKysgICAgICAgLSBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGFyZSBvbWl0dGVkIGZyb20gbGliYzoKKysKKysgICAgICAgICBhdXRoZGVzX2NyZWF0ZSAgICAgICAgICAgaHN0cmVycm9yICAgICAgICAgICAgICBzdmNfZmRzZXQKKysgICAgICAgICBhdXRoZGVzX2dldHVjcmVkICAgICAgICAgaHRvbmwgICAgICAgICAgICAgICAgICBzdmNfZ2V0cmVxCisrICAgICAgICAgYXV0aGRlc19wa19jcmVhdGUgICAgICAgIGh0b25zICAgICAgICAgICAgICAgICAgc3ZjX2dldHJlcV9jb21tb24KKysgICAgICAgICBhdXRobm9uZV9jcmVhdGUgICAgICAgICAgaWZfZnJlZW5hbWVpbmRleCAgICAgICBzdmNfZ2V0cmVxX3BvbGwKKysgICAgICAgICBhdXRodW5peF9jcmVhdGUgICAgICAgICAgaWZfaW5kZXh0b25hbWUgICAgICAgICBzdmNfZ2V0cmVxc2V0CisrICAgICAgICAgYXV0aHVuaXhfY3JlYXRlX2RlZmF1bHQgIGlmX25hbWVpbmRleCAgICAgICAgICAgc3ZjX21heF9wb2xsZmQKKysgICAgICAgICBiaW5kcmVzdnBvcnQgICAgICAgICAgICAgaWZfbmFtZXRvaW5kZXggICAgICAgICBzdmNfcG9sbGZkCisrICAgICAgICAgY2FsbHJwYyAgICAgICAgICAgICAgICAgIGluNmFkZHJfYW55ICAgICAgICAgICAgc3ZjcmF3X2NyZWF0ZQorKyAgICAgICAgIGNiY19jcnlwdCAgICAgICAgICAgICAgICBpbjZhZGRyX2xvb3BiYWNrICAgICAgIHN2Y19yZWdpc3RlcgorKyAgICAgICAgIGNsbnRfYnJvYWRjYXN0ICAgICAgICAgICBpbmV0Nl9vcHRfYXBwZW5kICAgICAgIHN2Y19ydW4KKysgICAgICAgICBjbG50X2NyZWF0ZSAgICAgICAgICAgICAgaW5ldDZfb3B0X2ZpbmQgICAgICAgICBzdmNfc2VuZHJlcGx5CisrICAgICAgICAgY2xudF9wY3JlYXRlZXJyb3IgICAgICAgIGluZXQ2X29wdF9maW5pc2ggICAgICAgc3ZjdGNwX2NyZWF0ZQorKyAgICAgICAgIGNsbnRfcGVycm5vICAgICAgICAgICAgICBpbmV0Nl9vcHRfZ2V0X3ZhbCAgICAgIHN2Y3VkcF9idWZjcmVhdGUKKysgICAgICAgICBjbG50X3BlcnJvciAgICAgICAgICAgICAgaW5ldDZfb3B0X2luaXQgICAgICAgICBzdmN1ZHBfY3JlYXRlCisrICAgICAgICAgY2xudHJhd19jcmVhdGUgICAgICAgICAgIGluZXQ2X29wdGlvbl9hbGxvYyAgICAgc3ZjdWRwX2VuYWJsZWNhY2hlCisrICAgICAgICAgY2xudF9zcGNyZWF0ZWVycm9yICAgICAgIGluZXQ2X29wdGlvbl9hcHBlbmQgICAgc3ZjdW5peF9jcmVhdGUKKysgICAgICAgICBjbG50X3NwZXJybm8gICAgICAgICAgICAgaW5ldDZfb3B0aW9uX2ZpbmQgICAgICBzdmN1bml4ZmRfY3JlYXRlCisrICAgICAgICAgY2xudF9zcGVycm9yICAgICAgICAgICAgIGluZXQ2X29wdGlvbl9pbml0ICAgICAgc3ZjX3VucmVnaXN0ZXIKKysgICAgICAgICBjbG50dGNwX2NyZWF0ZSAgICAgICAgICAgaW5ldDZfb3B0aW9uX25leHQgICAgICB1c2VyMm5ldG5hbWUKKysgICAgICAgICBjbG50dWRwX2J1ZmNyZWF0ZSAgICAgICAgaW5ldDZfb3B0aW9uX3NwYWNlICAgICB4ZGVjcnlwdAorKyAgICAgICAgIGNsbnR1ZHBfY3JlYXRlICAgICAgICAgICBpbmV0Nl9vcHRfbmV4dCAgICAgICAgIHhkcl9hY2NlcHRlZF9yZXBseQorKyAgICAgICAgIGNsbnR1bml4X2NyZWF0ZSAgICAgICAgICBpbmV0Nl9vcHRfc2V0X3ZhbCAgICAgIHhkcl9hcnJheQorKyAgICAgICAgIGRlc19zZXRwYXJpdHkgICAgICAgICAgICBpbmV0Nl9ydGhfYWRkICAgICAgICAgIHhkcl9hdXRoZGVzX2NyZWQKKysgICAgICAgICBlY2JfY3J5cHQgICAgICAgICAgICAgICAgaW5ldDZfcnRoX2dldGFkZHIgICAgICB4ZHJfYXV0aGRlc192ZXJmCisrICAgICAgICAgZW5kYWxpYXNlbnQgICAgICAgICAgICAgIGluZXQ2X3J0aF9pbml0ICAgICAgICAgeGRyX2F1dGh1bml4X3Bhcm1zCisrICAgICAgICAgZW5kaG9zdGVudCAgICAgICAgICAgICAgIGluZXQ2X3J0aF9yZXZlcnNlICAgICAgeGRyX2Jvb2wKKysgICAgICAgICBlbmRuZXRlbnQgICAgICAgICAgICAgICAgaW5ldDZfcnRoX3NlZ21lbnRzICAgICB4ZHJfYnl0ZXMKKysgICAgICAgICBlbmRuZXRncmVudCAgICAgICAgICAgICAgaW5ldDZfcnRoX3NwYWNlICAgICAgICB4ZHJfY2FsbGhkcgorKyAgICAgICAgIGVuZHByb3RvZW50ICAgICAgICAgICAgICBpbmV0X2FkZHIgICAgICAgICAgICAgIHhkcl9jYWxsbXNnCisrICAgICAgICAgZW5kcnBjZW50ICAgICAgICAgICAgICAgIGluZXRfYXRvbiAgICAgICAgICAgICAgeGRyX2NoYXIKKysgICAgICAgICBlbmRzZXJ2ZW50ICAgICAgICAgICAgICAgaW5ldF9sbmFvZiAgICAgICAgICAgICB4ZHJfY3J5cHRrZXlhcmcKKysgICAgICAgICBldGhlcl9hdG9uICAgICAgICAgICAgICAgaW5ldF9tYWtlYWRkciAgICAgICAgICB4ZHJfY3J5cHRrZXlhcmcyCisrICAgICAgICAgZXRoZXJfYXRvbl9yICAgICAgICAgICAgIGluZXRfbmV0b2YgICAgICAgICAgICAgeGRyX2NyeXB0a2V5cmVzCisrICAgICAgICAgZXRoZXJfaG9zdHRvbiAgICAgICAgICAgIGluZXRfbmV0d29yayAgICAgICAgICAgeGRyX2Rlc19ibG9jaworKyAgICAgICAgIGV0aGVyX2xpbmUgICAgICAgICAgICAgICBpbmV0X25zYXBfYWRkciAgICAgICAgIHhkcl9kb3VibGUKKysgICAgICAgICBldGhlcl9udG9hICAgICAgICAgICAgICAgaW5ldF9uc2FwX250b2EgICAgICAgICB4ZHJfZW51bQorKyAgICAgICAgIGV0aGVyX250b2FfciAgICAgICAgICAgICBpbmV0X250b2EgICAgICAgICAgICAgIHhkcl9mbG9hdAorKyAgICAgICAgIGV0aGVyX250b2hvc3QgICAgICAgICAgICBpbmV0X250b3AgICAgICAgICAgICAgIHhkcl9mcmVlCisrICAgICAgICAgZnJlZWFkZHJpbmZvICAgICAgICAgICAgIGluZXRfcHRvbiAgICAgICAgICAgICAgeGRyX2dldGNyZWRyZXMKKysgICAgICAgICBmcmVlaWZhZGRycyAgICAgICAgICAgICAgaW5uZXRnciAgICAgICAgICAgICAgICB4ZHJfaHlwZXIKKysgICAgICAgICBnYWlfc3RyZXJyb3IgICAgICAgICAgICAgaXJ1c2Vyb2sgICAgICAgICAgICAgICB4ZHJfaW50CisrICAgICAgICAgZ2V0YWRkcmluZm8gICAgICAgICAgICAgIGlydXNlcm9rX2FmICAgICAgICAgICAgeGRyX2ludDE2X3QKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZSAgICAgICAgICAga2V5X2RlY3J5cHRzZXNzaW9uICAgICB4ZHJfaW50MzJfdAorKyAgICAgICAgIGdldGFsaWFzYnluYW1lX3IgICAgICAgICBrZXlfZGVjcnlwdHNlc3Npb25fcGsgIHhkcl9pbnQ2NF90CisrICAgICAgICAgZ2V0YWxpYXNlbnQgICAgICAgICAgICAgIGtleV9lbmNyeXB0c2Vzc2lvbiAgICAgeGRyX2ludDhfdAorKyAgICAgICAgIGdldGFsaWFzZW50X3IgICAgICAgICAgICBrZXlfZW5jcnlwdHNlc3Npb25fcGsgIHhkcl9rZXlidWYKKysgICAgICAgICBnZXRob3N0YnlhZGRyICAgICAgICAgICAga2V5X2dlbmRlcyAgICAgICAgICAgICB4ZHJfa2V5X25ldHN0YXJnCisrICAgICAgICAgZ2V0aG9zdGJ5YWRkcl9yICAgICAgICAgIGtleV9nZXRfY29udiAgICAgICAgICAgeGRyX2tleV9uZXRzdHJlcworKyAgICAgICAgIGdldGhvc3RieW5hbWUgICAgICAgICAgICBrZXlfc2VjcmV0a2V5X2lzX3NldCAgIHhkcl9rZXlzdGF0dXMKKysgICAgICAgICBnZXRob3N0YnluYW1lMiAgICAgICAgICAga2V5X3NldG5ldCAgICAgICAgICAgICB4ZHJfbG9uZworKyAgICAgICAgIGdldGhvc3RieW5hbWUyX3IgICAgICAgICBrZXlfc2V0c2VjcmV0ICAgICAgICAgIHhkcl9sb25nbG9uZ190CisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZV9yICAgICAgICAgIG5ldG5hbWUyaG9zdCAgICAgICAgICAgeGRybWVtX2NyZWF0ZQorKyAgICAgICAgIGdldGhvc3RlbnQgICAgICAgICAgICAgICBuZXRuYW1lMnVzZXIgICAgICAgICAgIHhkcl9uZXRuYW1lc3RyCisrICAgICAgICAgZ2V0aG9zdGVudF9yICAgICAgICAgICAgIG50b2hsICAgICAgICAgICAgICAgICAgeGRyX25ldG9iagorKyAgICAgICAgIGdldGlmYWRkcnMgICAgICAgICAgICAgICBudG9ocyAgICAgICAgICAgICAgICAgIHhkcl9vcGFxdWUKKysgICAgICAgICBnZXRpcHY0c291cmNlZmlsdGVyICAgICAgcGFzc3dkMmRlcyAgICAgICAgICAgICB4ZHJfb3BhcXVlX2F1dGgKKysgICAgICAgICBnZXRfbXlhZGRyZXNzICAgICAgICAgICAgcG1hcF9nZXRtYXBzICAgICAgICAgICB4ZHJfcG1hcAorKyAgICAgICAgIGdldG5hbWVpbmZvICAgICAgICAgICAgICBwbWFwX2dldHBvcnQgICAgICAgICAgIHhkcl9wbWFwbGlzdAorKyAgICAgICAgIGdldG5ldGJ5YWRkciAgICAgICAgICAgICBwbWFwX3JtdGNhbGwgICAgICAgICAgIHhkcl9wb2ludGVyCisrICAgICAgICAgZ2V0bmV0YnlhZGRyX3IgICAgICAgICAgIHBtYXBfc2V0ICAgICAgICAgICAgICAgeGRyX3F1YWRfdAorKyAgICAgICAgIGdldG5ldGJ5bmFtZSAgICAgICAgICAgICBwbWFwX3Vuc2V0ICAgICAgICAgICAgIHhkcnJlY19jcmVhdGUKKysgICAgICAgICBnZXRuZXRieW5hbWVfciAgICAgICAgICAgcmNtZCAgICAgICAgICAgICAgICAgICB4ZHJyZWNfZW5kb2ZyZWNvcmQKKysgICAgICAgICBnZXRuZXRlbnQgICAgICAgICAgICAgICAgcmNtZF9hZiAgICAgICAgICAgICAgICB4ZHJyZWNfZW9mCisrICAgICAgICAgZ2V0bmV0ZW50X3IgICAgICAgICAgICAgIHJlZ2lzdGVycnBjICAgICAgICAgICAgeGRycmVjX3NraXByZWNvcmQKKysgICAgICAgICBnZXRuZXRncmVudCAgICAgICAgICAgICAgcmVzX2luaXQgICAgICAgICAgICAgICB4ZHJfcmVmZXJlbmNlCisrICAgICAgICAgZ2V0bmV0Z3JlbnRfciAgICAgICAgICAgIHJleGVjICAgICAgICAgICAgICAgICAgeGRyX3JlamVjdGVkX3JlcGx5CisrICAgICAgICAgZ2V0bmV0bmFtZSAgICAgICAgICAgICAgIHJleGVjX2FmICAgICAgICAgICAgICAgeGRyX3JlcGx5bXNnCisrICAgICAgICAgZ2V0cHJvdG9ieW5hbWUgICAgICAgICAgIHJleGVjb3B0aW9ucyAgICAgICAgICAgeGRyX3JtdGNhbGxfYXJncworKyAgICAgICAgIGdldHByb3RvYnluYW1lX3IgICAgICAgICBycGNfY3JlYXRlZXJyICAgICAgICAgIHhkcl9ybXRjYWxscmVzCisrICAgICAgICAgZ2V0cHJvdG9ieW51bWJlciAgICAgICAgIHJyZXN2cG9ydCAgICAgICAgICAgICAgeGRyX3Nob3J0CisrICAgICAgICAgZ2V0cHJvdG9ieW51bWJlcl9yICAgICAgIHJyZXN2cG9ydF9hZiAgICAgICAgICAgeGRyX3NpemVvZgorKyAgICAgICAgIGdldHByb3RvZW50ICAgICAgICAgICAgICBydGltZSAgICAgICAgICAgICAgICAgIHhkcnN0ZGlvX2NyZWF0ZQorKyAgICAgICAgIGdldHByb3RvZW50X3IgICAgICAgICAgICBydXNlcm9rICAgICAgICAgICAgICAgIHhkcl9zdHJpbmcKKysgICAgICAgICBnZXRwdWJsaWNrZXkgICAgICAgICAgICAgcnVzZXJva19hZiAgICAgICAgICAgICB4ZHJfdV9jaGFyCisrICAgICAgICAgZ2V0cnBjYnluYW1lICAgICAgICAgICAgIHJ1c2VycGFzcyAgICAgICAgICAgICAgeGRyX3VfaHlwZXIKKysgICAgICAgICBnZXRycGNieW5hbWVfciAgICAgICAgICAgc2V0YWxpYXNlbnQgICAgICAgICAgICB4ZHJfdV9pbnQKKysgICAgICAgICBnZXRycGNieW51bWJlciAgICAgICAgICAgc2V0aG9zdGVudCAgICAgICAgICAgICB4ZHJfdWludDE2X3QKKysgICAgICAgICBnZXRycGNieW51bWJlcl9yICAgICAgICAgc2V0aXB2NHNvdXJjZWZpbHRlciAgICB4ZHJfdWludDMyX3QKKysgICAgICAgICBnZXRycGNlbnQgICAgICAgICAgICAgICAgc2V0bmV0ZW50ICAgICAgICAgICAgICB4ZHJfdWludDY0X3QKKysgICAgICAgICBnZXRycGNlbnRfciAgICAgICAgICAgICAgc2V0bmV0Z3JlbnQgICAgICAgICAgICB4ZHJfdWludDhfdAorKyAgICAgICAgIGdldHJwY3BvcnQgICAgICAgICAgICAgICBzZXRwcm90b2VudCAgICAgICAgICAgIHhkcl91X2xvbmcKKysgICAgICAgICBnZXRzZWNyZXRrZXkgICAgICAgICAgICAgc2V0cnBjZW50ICAgICAgICAgICAgICB4ZHJfdV9sb25nbG9uZ190CisrICAgICAgICAgZ2V0c2VydmJ5bmFtZSAgICAgICAgICAgIHNldHNlcnZlbnQgICAgICAgICAgICAgeGRyX3VuaW9uCisrICAgICAgICAgZ2V0c2VydmJ5bmFtZV9yICAgICAgICAgIHNldHNvdXJjZWZpbHRlciAgICAgICAgeGRyX3VuaXhjcmVkCisrICAgICAgICAgZ2V0c2VydmJ5cG9ydCAgICAgICAgICAgIHN2Y2F1dGhkZXNfc3RhdHMgICAgICAgeGRyX3VfcXVhZF90CisrICAgICAgICAgZ2V0c2VydmJ5cG9ydF9yICAgICAgICAgIHN2Y2Vycl9hdXRoICAgICAgICAgICAgeGRyX3Vfc2hvcnQKKysgICAgICAgICBnZXRzZXJ2ZW50ICAgICAgICAgICAgICAgc3ZjZXJyX2RlY29kZSAgICAgICAgICB4ZHJfdmVjdG9yCisrICAgICAgICAgZ2V0c2VydmVudF9yICAgICAgICAgICAgIHN2Y2Vycl9ub3Byb2MgICAgICAgICAgeGRyX3ZvaWQKKysgICAgICAgICBnZXRzb3VyY2VmaWx0ZXIgICAgICAgICAgc3ZjZXJyX25vcHJvZyAgICAgICAgICB4ZHJfd3JhcHN0cmluZworKyAgICAgICAgIGhfZXJybGlzdCAgICAgICAgICAgICAgICBzdmNlcnJfcHJvZ3ZlcnMgICAgICAgIHhlbmNyeXB0CisrICAgICAgICAgaF9lcnJubyAgICAgICAgICAgICAgICAgIHN2Y2Vycl9zeXN0ZW1lcnIgICAgICAgeHBydF9yZWdpc3RlcgorKyAgICAgICAgIGhlcnJvciAgICAgICAgICAgICAgICAgICBzdmNlcnJfd2Vha2F1dGggICAgICAgIHhwcnRfdW5yZWdpc3RlcgorKyAgICAgICAgIGhfbmVyciAgICAgICAgICAgICAgICAgICBzdmNfZXhpdAorKyAgICAgICAgIGhvc3QybmV0bmFtZSAgICAgICAgICAgICBzdmNmZF9jcmVhdGUKKysKKysgICAgICAgLSBUaGUgcnBjZ2VuLCBuc2NkLCBhbmQgcnBjaW5mbyBjb21tYW5kcyBhcmUgbm90IGluc3RhbGxlZC4KKysKKysgICAgICAgLSBUaGUgJ3JwYycgZmlsZSAoYSB0ZXh0IGZpbGUgbGlzdGluZyBSUEMgc2VydmljZXMpIGlzIG5vdCBpbnN0YWxsZWQuCisrCisrICAgICAgIFNvY2tldC1yZWxhdGVkIHN5c3RlbSBjYWxscyBkbyBub3QgZmFsbCBpbiB0aGlzIG9wdGlvbiBncm91cCwKKysgICAgICAgYmVjYXVzZSBtYW55IGFyZSBhbHNvIHVzZWQgZm9yIG90aGVyIGludGVyLXByb2Nlc3MKKysgICAgICAgY29tbXVuaWNhdGlvbiBtZWNoYW5pc21zLiAgRm9yIGV4YW1wbGUsIHRoZSAnc3lzbG9nJyByb3V0aW5lcworKyAgICAgICB1c2UgVW5peC1kb21haW4gc29ja2V0cyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBzeXNsb2cgZGFlbW9uOworKyAgICAgICBzeXNsb2cgaXMgdmFsdWFibGUgaW4gbm9uLW5ldHdvcmtlZCBjb250ZXh0cy4KKysKKytjb25maWcgRUdMSUJDX0lORVRfQU5MCisrICAgYm9vbCAiQXN5bmNocm9ub3VzIG5hbWUgbG9va3VwIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGliYW5sJyBsaWJyYXJ5IHdoaWNoCisrICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGFzeW5jaHJvbm91cyBuYW1lIGxvb2t1cC4KKysKKytjb25maWcgRUdMSUJDX0xJQk0KKysgICBib29sICJsaWJtIChtYXRoIGxpYnJhcnkpIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlICdsaWJtJyBsaWJyYXJ5LCBjb250YWluaW5nCisrICAgICAgIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMuICBJZiB0aGlzIG9wdGlvbiBncm91cCBpcyBvbWl0dGVkLCB0aGVuCisrICAgICAgIGFuIEVHTElCQyBpbnN0YWxsYXRpb24gZG9lcyBub3QgaW5jbHVkZSBzaGFyZWQgb3IgdW5zaGFyZWQgdmVyc2lvbnMKKysgICAgICAgb2YgdGhlIG1hdGggbGlicmFyeS4KKysKKysgICAgICAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgcmVtb3ZlIGFsbCBmbG9hdGluZy1wb2ludCByZWxhdGVkCisrICAgICAgIGZ1bmN0aW9uYWxpdHkgZnJvbSBFR0xJQkM7IGZvciBleGFtcGxlLCAncHJpbnRmJyBhbmQgJ3NjYW5mJworKyAgICAgICBjYW4gc3RpbGwgcHJpbnQgYW5kIHJlYWQgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdpdGggdGhpcyBvcHRpb24KKysgICAgICAgZ3JvdXAgZGlzYWJsZWQuCisrCisrICAgICAgIE5vdGUgdGhhdCB0aGUgSVNPIFN0YW5kYXJkIEMrKyBsaWJyYXJ5ICdsaWJzdGRjKysnIGRlcGVuZHMgb24KKysgICAgICAgRUdMSUJDJ3MgbWF0aCBsaWJyYXJ5ICdsaWJtJy4gIElmIHlvdSBkaXNhYmxlIHRoaXMgb3B0aW9uCisrICAgICAgIGdyb3VwLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBidWlsZCAnbGlic3RkYysrJyBhZ2FpbnN0IHRoZQorKyAgICAgICByZXN1bHRpbmcgRUdMSUJDIGluc3RhbGxhdGlvbi4KKysKKytjb25maWcgRUdMSUJDX0xPQ0FMRVMKKysgICBib29sICJMb2NhbGUgZGVmaW5pdGlvbnMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBhbGwgbG9jYWxlIGRlZmluaXRpb25zIG90aGVyIHRoYW4KKysgICAgICAgdGhhdCBmb3IgdGhlICJDIiBsb2NhbGUuICBJZiB0aGlzIG9wdGlvbiBncm91cCBpcyBvbWl0dGVkLCB0aGVuCisrICAgICAgIG9ubHkgdGhlICJDIiBsb2NhbGUgaXMgc3VwcG9ydGVkLgorKworKworK2NvbmZpZyBFR0xJQkNfTE9DQUxFX0NPREUKKysgICBib29sICJMb2NhbGUgZnVuY3Rpb25zIgorKyAgIGRlcGVuZHMgb24gUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgbG9jYWxlIHN1cHBvcnQgZnVuY3Rpb25zLCBwcm9ncmFtcywKKysgICAgICAgYW5kIGxpYnJhcmllcy4gIFdpdGggRUdMSUJDX0xPQ0FMRV9DT0RFIGRpc2FibGVkLAorKyAgICAgICBFR0xJQkMgc3VwcG9ydHMgb25seSB0aGUgJ0MnIGxvY2FsZSAoYWxzbyBrbm93biBhcyAnUE9TSVgnKSwKKysgICAgICAgYW5kIGlnbm9yZXMgdGhlIHNldHRpbmdzIG9mIHRoZSAnTEFORycgYW5kICdMQ18qJyBlbnZpcm9ubWVudAorKyAgICAgICB2YXJpYWJsZXMuCisrCisrICAgICAgIFdpdGggRUdMSUJDX0xPQ0FMRV9DT0RFIGRpc2FibGVkLCB0aGUgZm9sbG93aW5nCisrICAgICAgIGZ1bmN0aW9ucyBhcmUgb21pdHRlZCBmcm9tIGxpYmM6CisrCisrICAgICAgICAgZHVwbG9jYWxlICAgbG9jYWxlY29udiAgbmxfbGFuZ2luZm8gICAgcnBtYXRjaCAgc3RyZm1vbl9sCisrICAgICAgICAgZnJlZWxvY2FsZSAgbmV3bG9jYWxlICAgbmxfbGFuZ2luZm9fbCAgc3RyZm1vbiAgdXNlbG9jYWxlCisrCisrICAgICAgIEZ1cnRoZXJtb3JlLCBvbmx5IHRoZSBMQ19DVFlQRSBhbmQgTENfVElNRSBjYXRlZ29yaWVzIG9mIHRoZQorKyAgICAgICBzdGFuZGFyZCAiQyIgbG9jYWxlIGFyZSBhdmFpbGFibGUuCisrCisrICAgICAgIFRoZSBFR0xJQkNfQ0FUR0VUUyBvcHRpb24gZ3JvdXAgZGVwZW5kcyBvbiB0aGlzIG9wdGlvbiBncm91cC4KKysKKysKKytjb25maWcgRUdMSUJDX01FTVVTQUdFCisrICAgYm9vbCAiTWVtb3J5IHByb2ZpbGluZyBsaWJyYXJ5IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJtZW11c2FnZScgbGlicmFyeSBhbmQKKysgICAgICAgdGhlIGBtZW11c2FnZScgYW5kIGBtZW11c2FnZXN0YXQnIHV0aWxpdGllcy4KKysgICAgICAgVGhlc2UgY29tcG9uZW50cyBwcm92aWRlIG1lbW9yeSBwcm9maWxpbmcgZnVuY3Rpb25zLgorKworK2NvbmZpZyBFR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorKyAgIGludCAiTWVtb3J5IHByb2ZpbGluZyBsaWJyYXJ5IGJ1ZmZlciBzaXplIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX01FTVVTQUdFCisrICAgZGVmYXVsdCAiMzI3NjgiCisrICAgaGVscAorKyAgICAgICBMaWJtZW11c2FnZSBsaWJyYXJ5IGJ1ZmZlcnMgdGhlIHByb2ZpbGluZyBkYXRhIGluIG1lbW9yeQorKyAgICAgICBiZWZvcmUgd3JpdGluZyBpdCBvdXQgdG8gZGlzay4gIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5CisrICAgICAgIGFsbG9jYXRlcyAxLjVNIGJ1ZmZlciwgd2hpY2ggY2FuIGJlIHN1YnN0YW50aWFsIGZvciBzb21lCisrICAgICAgIHN5c3RlbXMuICBFR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRSBvcHRpb24KKysgICAgICAgYWxsb3dzIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZS4gIEl0IHNwZWNpZmllcworKyAgICAgICB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIGJ1ZmZlciBzaG91bGQgaGF2ZS4KKysgICAgICAgT24gbW9zdCBhcmNoaXRlY3R1cmVzIG9uZSBidWZmZXIgZW50cnkgYW1vdW50cyB0byA0OCBieXRlcywKKysgICAgICAgc28gc2V0dGluZyB0aGlzIG9wdGlvbiB0byB0aGUgdmFsdWUgb2YgNTEyIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mCisrICAgICAgIHRoZSBtZW1vcnkgYnVmZmVyIHRvIDI0Sy4KKysKKytjb25maWcgRUdMSUJDX05JUworKyAgIGJvb2wgIlN1cHBvcnQgZm9yIE5JUywgTklTKywgYW5kIHRoZSBzcGVjaWFsICdjb21wYXQnIHNlcnZpY2VzLiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUICYmIEVHTElCQ19TVU5SUEMKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBOSVMsIE5JUyssIGFuZCAnY29tcGF0JyBOYW1lCisrICAgICAgIFNlcnZpY2UgU3dpdGNoIHNlcnZpY2UgbGlicmFyaWVzLiAgV2hlbiBpdCBpcyBkaXNhYmxlZCwgdGhvc2UKKysgICAgICAgc2VydmljZXMgbGlicmFyaWVzIGFyZSBub3QgaW5zdGFsbGVkOyB5b3Ugc2hvdWxkIHJlbW92ZSBhbnkKKysgICAgICAgcmVmZXJlbmNlcyB0byB0aGVtIGZyb20geW91ciAnbnNzd2l0Y2guY29uZicgZmlsZS4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZGVwZW5kcyBvbiB0aGUgRUdMSUJDX0lORVQgb3B0aW9uCisrICAgICAgIGdyb3VwOyB5b3UgbXVzdCBlbmFibGUgdGhhdCB0byBlbmFibGUgdGhpcyBvcHRpb24gZ3JvdXAuCisrCisrY29uZmlnIEVHTElCQ19OU1NXSVRDSAorKyAgIGJvb2wgIk5hbWUgc2VydmljZSBzd2l0Y2ggKG5zc3dpdGNoKSBzdXBwb3J0IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlICduc3N3aXRjaCcgZmFjaWxpdHkuCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZW5hYmxlZCwgYWxsIEVHTElCQyBmdW5jdGlvbnMgZm9yCisrICAgICAgIGFjY2Vzc2luZyB2YXJpb3VzIHN5c3RlbSBkYXRhYmFzZXMgKHBhc3N3b3JkcyBhbmQgZ3JvdXBzOworKyAgICAgICBuZXR3b3JraW5nOyBhbGlhc2VzOyBwdWJsaWMga2V5czsgYW5kIHNvIG9uKSBjb25zdWx0IHRoZQorKyAgICAgICAnL2V0Yy9uc3N3aXRjaC5jb25mJyBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGVjaWRlIGhvdyB0byBoYW5kbGUKKysgICAgICAgcXVlcmllcy4KKysKKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgRUdMSUJDIHVzZXMgYSBmaXhlZCBsaXN0IG9mCisrICAgICAgIHNlcnZpY2VzIHRvIHNhdGlzZnkgcXVlcmllcyBvbiBlYWNoIGRhdGFiYXNlLCBhcyByZXF1ZXN0ZWQgYnkKKysgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBzcGVjaWZpZWQgd2hlbiBFR0xJQkMgaXMgYnVpbHQuICBZb3VyCisrICAgICAgICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgZmlsZSBtdXN0IHNldCB0aGUgZm9sbG93aW5nIHR3bworKyAgICAgICB2YXJpYWJsZXM6CisrCisrY29uZmlnIEVHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcKKysgICBzdHJpbmcgIk5zc3dpdGNoIGZpeGVkIGNvbmZpZyBmaWxlbmFtZSIKKysgICBkZXBlbmRzIG9uICFFR0xJQkNfTlNTV0lUQ0gKKysgICBkZWZhdWx0ICIiCisrICAgaGVscAorKyAgICAgICAgICBTZXQgdGhpcyB0byB0aGUgbmFtZSBvZiBhIGZpbGUgd2hvc2UgY29udGVudHMgb2JzZXJ2ZSB0aGUKKysgICAgICAgICAgc2FtZSBzeW50YXggYXMgYW4gb3JkaW5hcnkgJy9ldGMvbnNzd2l0Y2guY29uZicgZmlsZS4gIFRoZQorKyAgICAgICAgICBFR0xJQkMgYnVpbGQgcHJvY2VzcyBwYXJzZXMgdGhpcyBmaWxlIGp1c3QgYXMgRUdMSUJDIHdvdWxkCisrICAgICAgICAgIGF0IHJ1biB0aW1lIGlmIEVHTElCQ19OU1NXSVRDSCB3ZXJlIGVuYWJsZWQsIGFuZAorKyAgICAgICAgICBwcm9kdWNlcyBhIEMgbGlicmFyeSB0aGF0IHVzZXMgdGhlIG5zc3dpdGNoIHNlcnZpY2UKKysgICAgICAgICAgbGlicmFyaWVzIHRvIHNlYXJjaCBmb3IgZGF0YWJhc2UgZW50cmllcyBhcyB0aGlzIGZpbGUKKysgICAgICAgICAgc3BlY2lmaWVzLCBpbnN0ZWFkIG9mIGNvbnN1bHRpbmcgJy9ldGMvbnNzd2l0Y2guY29uZicgYXQgcnVuCisrICAgICAgICAgIHRpbWUuCisrCisrICAgICAgICAgIFRoaXMgc2hvdWxkIGJlIGFuIGFic29sdXRlIGZpbGVuYW1lLiAgVGhlIEVHTElCQyBidWlsZAorKyAgICAgICAgICBwcm9jZXNzIG1heSB1c2UgaXQgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCB3b3JraW5nCisrICAgICAgICAgIGRpcmVjdG9yaWVzLiAgSXQgbWF5IGluY2x1ZGUgcmVmZXJlbmNlcyB0byBNYWtlZmlsZQorKyAgICAgICAgICB2YXJpYWJsZXMgbGlrZSAnY29tbW9uLW9ianBmeCcgKHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCksIG9yICcuLicgKHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLgorKworKyAgICAgICAgICBUaGUgRUdMSUJDIHNvdXJjZSB0cmVlIGluY2x1ZGVzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQorKyAgICAgICAgICBuYW1lZCAnbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYnOyBmb3Igc2ltcGxlIGNvbmZpZ3VyYXRpb25zLAorKyAgICAgICAgICB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIGRlbGV0ZSByZWZlcmVuY2VzIHRvIGRhdGFiYXNlcyBub3QKKysgICAgICAgICAgbmVlZGVkIG9uIHlvdXIgc3lzdGVtLgorKworK2NvbmZpZyBFR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TCisrICAgc3RyaW5nICJOc3N3aXRjaCBmaXhlZCBmdW5jdGlvbnMgZmlsZW5hbWUiCisrICAgZGVwZW5kcyBvbiAhRUdMSUJDX05TU1dJVENICisrICAgZGVmYXVsdCAiIgorKyAgIGhlbHAKKysgICAgICAgICAgVGhlIEVHTElCQyBidWlsZCBwcm9jZXNzIHVzZXMgdGhpcyBmaWxlIHRvIGRlY2lkZSB3aGljaAorKyAgICAgICAgICBmdW5jdGlvbnMgdG8gbWFrZSBhdmFpbGFibGUgZnJvbSB3aGljaCBzZXJ2aWNlIGxpYnJhcmllcy4KKysgICAgICAgICAgVGhlIGZpbGUgJ25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMnIHNlcnZlcyBhcyBhIHNhbXBsZQorKyAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoaXMgc2V0dGluZywgYW5kIGV4cGxhaW5zIGl0cyBzeW50YXgKKysgICAgICAgICAgYW5kIG1lYW5pbmcgaW4gbW9yZSBkZXRhaWwuCisrCisrICAgICAgICAgIFRoaXMgc2hvdWxkIGJlIGFuIGFic29sdXRlIGZpbGUgbmFtZS4gIFRoZSBFR0xJQkMgYnVpbGQKKysgICAgICAgICAgcHJvY2VzcyBtYXkgdXNlIGl0IGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgd29ya2luZworKyAgICAgICAgICBkaXJlY3Rvcmllcy4gIEl0IG1heSBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gTWFrZWZpbGUKKysgICAgICAgICAgdmFyaWFibGVzIGxpa2UgJ2NvbW1vbi1vYmpwZngnICh0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLCBvciAnLi4nICh0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKS4KKysKKysgICAgICAgICAgQmUgc3VyZSB0byBtZW50aW9uIGVhY2ggZnVuY3Rpb24gaW4gZWFjaCBzZXJ2aWNlIHlvdSB3aXNoIHRvCisrICAgICAgICAgIHVzZS4gIElmIHlvdSBkbyBub3QgbWVudGlvbiBhIHNlcnZpY2UncyBmdW5jdGlvbiBoZXJlLCB0aGUKKysgICAgICAgICAgRUdMSUJDIGRhdGFiYXNlIGFjY2VzcyBmdW5jdGlvbnMgd2lsbCBub3QgZmluZCBpdCwgZXZlbiBpZgorKyAgICAgICAgICBpdCBpcyBsaXN0ZWQgaW4gdGhlIEVHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcKKysgICAgICAgICAgZmlsZS4KKysKKysgICAgICAgICAgSW4gdGhpcyBhcnJhbmdlbWVudCwgRUdMSUJDIHdpbGwgbm90IHVzZSB0aGUgJ2Rsb3BlbicgYW5kCisrICAgICAgICAgICdkbHN5bScgZnVuY3Rpb25zIHRvIGZpbmQgZGF0YWJhc2UgYWNjZXNzIGZ1bmN0aW9ucy4gIEluc3RlYWQsCisrICAgICAgICAgIGxpYmMgaGFyZC1jb2RlcyByZWZlcmVuY2VzIHRvIHRoZSBzZXJ2aWNlIGxpYnJhcmllcycgZGF0YWJhc2UKKysgICAgICAgICAgYWNjZXNzIGZ1bmN0aW9ucy4gIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGluayB5b3VyIHByb2dyYW0KKysgICAgICAgICAgYWdhaW5zdCB0aGUgbmFtZSBzZXJ2aWNlIGxpYnJhcmllcyAodGhvc2Ugd2hvc2UgbmFtZXMgc3RhcnQKKysgICAgICAgICAgd2l0aCAnbGlibnNzXycsIGluIHRoZSBzeXNyb290J3MgJy9saWInIGRpcmVjdG9yeSkgd2hvc2UKKysgICAgICAgICAgZnVuY3Rpb25zIHlvdSBpbnRlbmQgdG8gdXNlLiAgVGhpcyBhcnJhbmdlbWVudCBoZWxwcworKyAgICAgICAgICBzeXN0ZW0td2lkZSBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgZGVjaWRlIHdoaWNoIGZ1bmN0aW9ucyBhCisrICAgICAgICAgIHN5c3RlbSBhY3R1YWxseSB1c2VzLgorKworKyAgICAgICAgICBOb3RlIHRoYXQgc29tZSBuc3N3aXRjaCBzZXJ2aWNlIGxpYnJhcmllcyByZXF1aXJlIG90aGVyIG9wdGlvbgorKyAgICAgICAgICBncm91cHMgdG8gYmUgZW5hYmxlZDsgZm9yIGV4YW1wbGUsIHRoZSBFR0xJQkNfSU5FVAorKyAgICAgICAgICBvcHRpb24gZ3JvdXAgbXVzdCBiZSBlbmFibGVkIHRvIHVzZSB0aGUgJ2xpYm5zc19kbnMuc28uMicKKysgICAgICAgICAgc2VydmljZSBsaWJyYXJ5LCB3aGljaCB1c2VzIHRoZSBEb21haW4gTmFtZSBTeXN0ZW0gbmV0d29yaworKyAgICAgICAgICBwcm90b2NvbCB0byBhbnN3ZXIgcXVlcmllcy4KKysKKytjb25maWcgRUdMSUJDX1JDTUQKKysgICBib29sICJTdXBwb3J0IGZvciAncmNtZCcgYW5kIHJlbGF0ZWQgbGlicmFyeSBmdW5jdGlvbnMiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJ1bm5pbmcgY29tbWFuZHMgb24KKysgICAgICByZW1vdGUgbWFjaGluZXMgdmlhIHRoZSAncnNoJyBwcm90b2NvbCwgYW5kIGRvaW5nIGF1dGhlbnRpY2F0aW9uCisrICAgICAgcmVsYXRlZCB0byB0aG9zZSBmdW5jdGlvbnMuICBUaGlzIGFsc28gaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQKKysgICAgICB1c2UgdGhlICdyZXhlYycgcHJvdG9jb2wuCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICByY21kICAgICAgICAgICAgcnVzZXJvaworKyAgICAgICAgcmNtZF9hZiAgICAgICAgIHJ1c2Vyb2tfYWYKKysgICAgICAgIHJleGVjICAgICAgICAgICBpcnVzZXJvaworKyAgICAgICAgcmV4ZWNfYWYgICAgICAgIGlydXNlcm9rX2FmCisrICAgICAgICBycmVzdnBvcnQgICAgICAgcnVzZXJwYXNzCisrICAgICAgICBycmVzdnBvcnRfYWYKKysKKytjb25maWcgRUdMSUJDX1JUTERfREVCVUcKKysgICBib29sICJSdW50aW1lIGxpbmtlciBkZWJ1ZyBwcmludCBvdXRzIgorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBlbmFibGVzIGRlYnVnIG91dHB1dCBvZiB0aGUgcnVudGltZSBsaW5rZXIKKysgICAgICB3aGljaCBpcyBhY3RpdmF0ZWQgdmlhIExEX0RFQlVHIGFuZCBMRF9UUkFDRV9QUkVMSU5LSU5HCisrICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIGdyb3VwIHlpZWxkcworKyAgICAgIGEgc21hbGxlciBydW50aW1lIGxpbmtlciBiaW5hcnkuCisrICAgICAgQkVXQVJFOiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZ3JvdXAgaXMgbGlrZWx5IHRvIGJyZWFrCisrICAgICAgdGhlIGBsZGQnIHV0aWxpdHkgd2hpY2ggbWF5IGFsc28gYmUgdXNlZCBieSB0aGUgcHJlbGlua2VyLgorKyAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBgLS11bnVzZWQnIGxkZCBvcHRpb24gd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuCisrCisrY29uZmlnIEVHTElCQ19TUEFXTgorKyAgIGJvb2wgIlN1cHBvcnQgZm9yIFBPU0lYIHBvc2l4X3NwYXduIGZ1bmN0aW9ucyIKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIFBPU0lYIGZ1bmN0aW9ucyBmb3IgZXhlY3V0aW5nCisrICAgICAgcHJvZ3JhbXMgaW4gY2hpbGQgcHJvY2Vzc2VzIHdpdGhvdXQgdXNpbmcgJ2ZvcmsnIG9yICd2Zm9yaycuCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICBwb3NpeF9zcGF3bgorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncworKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHBncm91cAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0KKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfaW5pdAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZQorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveQorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQKKysgICAgICAgIHBvc2l4X3NwYXducAorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGFsc28gcHJvdmlkZXMgdGhlIGFiaWxpdHkgZm9yIHRoZSBpY29udiwKKysgICAgICBsb2NhbGVkZWYsIGFuZCBsb2NhbGUgcHJvZ3JhbXMgdG8gb3BlcmF0ZSB0cmFuc3BhcmVudGx5IG9uCisrICAgICAgY29tcHJlc3NlZCBjaGFyc2V0IGRlZmluaXRpb25zLiAgV2hlbiB0aGlzIG9wdGlvbiBncm91cCBpcworKyAgICAgIGRpc2FibGVkLCB0aG9zZSBwcm9ncmFtcyB3aWxsIG9ubHkgb3BlcmF0ZSBvbiB1bmNvbXByZXNzZWQKKysgICAgICBjaGFybWFwIGZpbGVzLgorKworK2NvbmZpZyBFR0xJQkNfU1RSRUFNUworKyAgIGJvb2wgIlN1cHBvcnQgZm9yIGFjY2Vzc2luZyBTVFJFQU1TLiIKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCisrICAgICAgbWVzc2FnZXMgdG8gYW5kIGZyb20gU1RSRUFNUy4gIFRoZSBTVFJFQU1TIGludGVyZmFjZSBwcm92aWRlcyBhCisrICAgICAgdW5pZm9ybSBtZWNoYW5pc20gZm9yIGltcGxlbWVudGluZyBuZXR3b3JraW5nIHNlcnZpY2VzIGFuZCBvdGhlcgorKyAgICAgIGNoYXJhY3Rlci1iYXNlZCBJL08uICAoU1RSRUFNUyBhcmUgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGgKKysgICAgICA8c3RkaW8uaD4gRklMRSBvYmplY3RzLCBhbHNvIGNhbGxlZCAnc3RyZWFtcycuKQorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgZ2V0bXNnICAgICAgICAgIHB1dHBtc2cKKysgICAgICAgIGdldHBtc2cgICAgICAgICBmYXR0YWNoCisrICAgICAgICBpc2FzdHJlYW0gICAgICAgZmRldGFjaAorKyAgICAgICAgcHV0bXNnCisrCisrY29uZmlnIEVHTElCQ19TVU5SUEMKKysgICBib29sICJTdXBwb3J0IGZvciB0aGUgU3VuICdSUEMnIHByb3RvY29sLiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSBTdW4gUlBDIHByb3RvY29scywKKysgICAgICBpbmNsdWRpbmcgdGhlICdycGNnZW4nIGFuZCAncnBjaW5mbycgcHJvZ3JhbXMuCisrCisrY29uZmlnIEVHTElCQ19VVE1QCisrICAgIGJvb2wgIk9sZGVyIGFjY2VzcyBmdW5jdGlvbnMgZm9yICd1dG1wJyBsb2dpbiByZWNvcmRzIgorKyAgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBvbGRlciAndXRlbnQnIGZhbWlseSBvZgorKyAgICAgICBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB1c2VyIGxvZ2luIHJlY29yZHMgaW4gdGhlICd1dG1wJyBmaWxlLgorKyAgICAgICBQT1NJWCBvbWl0cyB0aGVzZSBmdW5jdGlvbnMgaW4gZmF2b3Igb2YgdGhlICd1dHhlbnQnIGZhbWlseSwKKysgICAgICAgYW5kIHRoZXkgYXJlIG9ic29sZXRlIG9uIHN5c3RlbXMgb3RoZXIgdGhhbiBMaW51eC4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kdXRlbnQKKysgICAgICAgICBnZXR1dGVudAorKyAgICAgICAgIGdldHV0ZW50X3IKKysgICAgICAgICBnZXR1dGlkCisrICAgICAgICAgZ2V0dXRpZF9yCisrICAgICAgICAgZ2V0dXRsaW5lCisrICAgICAgICAgZ2V0dXRsaW5lX3IKKysgICAgICAgICBsb2d3dG1wCisrICAgICAgICAgcHV0dXRsaW5lCisrICAgICAgICAgc2V0dXRlbnQKKysgICAgICAgICB1cGR3dG1wCisrICAgICAgICAgdXRtcG5hbWUKKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXM6CisrCisrICAgICAgICAgbGlidXRpbC5zbyAoYW5kIGxpYnV0aWwuYSkKKysKKytjb25maWcgRUdMSUJDX1VUTVBYCisrICAgIGJvb2wgIlBPU0lYIGFjY2VzcyBmdW5jdGlvbnMgZm9yICd1dG1wJyBsb2dpbiByZWNvcmRzIgorKyAgICBkZXBlbmRzIG9uIEVHTElCQ19VVE1QCisrICAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIFBPU0lYIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQKKysgICAgICAgd3JpdGluZyB1c2VyIGxvZ2luIHJlY29yZHMgaW4gdGhlICd1dG1wJyBmaWxlICh1c3VhbGx5CisrICAgICAgICcvdmFyL3J1bi91dG1wJykuICBUaGUgUE9TSVggZnVuY3Rpb25zIG9wZXJhdGUgb24gJ3N0cnVjdAorKyAgICAgICB1dG1weCcgc3RydWN0dXJlcywgYXMgb3Bwb3NlZCB0byB0aGUgZmFtaWx5IG9mIG9sZGVyICd1dGVudCcKKysgICAgICAgZnVuY3Rpb25zLCB3aGljaCBvcGVyYXRlIG9uICdzdHJ1Y3QgdXRtcCcgc3RydWN0dXJlcy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kdXR4ZW50CisrICAgICAgICAgZ2V0dXRtcAorKyAgICAgICAgIGdldHV0bXB4CisrICAgICAgICAgZ2V0dXR4ZW50CisrICAgICAgICAgZ2V0dXR4aWQKKysgICAgICAgICBnZXR1dHhsaW5lCisrICAgICAgICAgcHV0dXR4bGluZQorKyAgICAgICAgIHNldHV0eGVudAorKyAgICAgICAgIHVwZHd0bXB4CisrICAgICAgICAgdXRtcHhuYW1lCisrCisrY29uZmlnIEVHTElCQ19XT1JERVhQCisrICAgIGJvb2wgIlNoZWxsLXN0eWxlIHdvcmQgZXhwYW5zaW9uIgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgJ3dvcmRleHAnIGZ1bmN0aW9uIGZvcgorKyAgICAgICAgcGVyZm9ybWluZyB3b3JkIGV4cGFuc2lvbiBpbiB0aGUgbWFubmVyIG9mIHRoZSBzaGVsbCwgYW5kIHRoZQorKyAgICAgICAgYWNjb21wYW55aW5nICd3b3JkZnJlZScgZnVuY3Rpb24uCisrCisrY29uZmlnIFBPU0lYX0NfTEFOR19XSURFX0NIQVIKKysgICAgYm9vbCAiSVNPIEMgbGlicmFyeSB3aWRlIGNoYXJhY3RlciBmdW5jdGlvbnMsIGV4Y2x1ZGluZyBJL08iCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBieSB0aGUgSVNPIEMKKysgICAgICAgIHN0YW5kYXJkIGZvciB3b3JraW5nIHdpdGggd2lkZSBhbmQgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4KKysgICAgICAgIG1lbW9yeS4gIEZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB3aWRlIGFuZCBtdWx0aWJ5dGUKKysgICAgICAgIGNoYXJhY3RlcnMgZnJvbSBhbmQgdG8gZmlsZXMgY2FsbCBpbiB0aGUKKysgICAgICAgIFBPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8gb3B0aW9uIGdyb3VwLgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGJ0b3djICAgICAgICAgbWJzaW5pdCAgICAgICB3Y3Njc3BuICAgICAgIHdjc3RvbGwKKysgICAgICAgICAgaXN3YWxudW0gICAgICBtYnNydG93Y3MgICAgIHdjc2Z0aW1lICAgICAgd2NzdG9tYnMKKysgICAgICAgICAgaXN3YWxwaGEgICAgICBtYnN0b3djcyAgICAgIHdjc2xlbiAgICAgICAgd2NzdG91bAorKyAgICAgICAgICBpc3dibGFuayAgICAgIG1idG93YyAgICAgICAgd2NzbmNhdCAgICAgICB3Y3N0b3VsbAorKyAgICAgICAgICBpc3djbnRybCAgICAgIHN3cHJpbnRmICAgICAgd2NzbmNtcCAgICAgICB3Y3N0b3VtYXgKKysgICAgICAgICAgaXN3Y3R5cGUgICAgICBzd3NjYW5mICAgICAgIHdjc25jcHkgICAgICAgd2NzeGZybQorKyAgICAgICAgICBpc3dkaWdpdCAgICAgIHRvd2N0cmFucyAgICAgd2NzcGJyayAgICAgICB3Y3RvYgorKyAgICAgICAgICBpc3dncmFwaCAgICAgIHRvd2xvd2VyICAgICAgd2NzcmNociAgICAgICB3Y3RvbWIKKysgICAgICAgICAgaXN3bG93ZXIgICAgICB0b3d1cHBlciAgICAgIHdjc3J0b21icyAgICAgd2N0cmFucworKyAgICAgICAgICBpc3dwcmludCAgICAgIHZzd3ByaW50ZiAgICAgd2Nzc3BuICAgICAgICB3Y3R5cGUKKysgICAgICAgICAgaXN3cHVuY3QgICAgICB2c3dzY2FuZiAgICAgIHdjc3N0ciAgICAgICAgd21lbWNocgorKyAgICAgICAgICBpc3dzcGFjZSAgICAgIHdjcnRvbWIgICAgICAgd2NzdG9kICAgICAgICB3bWVtY21wCisrICAgICAgICAgIGlzd3VwcGVyICAgICAgd2NzY2F0ICAgICAgICB3Y3N0b2YgICAgICAgIHdtZW1jcHkKKysgICAgICAgICAgaXN3eGRpZ2l0ICAgICB3Y3NjaHIgICAgICAgIHdjc3RvaW1heCAgICAgd21lbW1vdmUKKysgICAgICAgICAgbWJsZW4gICAgICAgICB3Y3NjbXAgICAgICAgIHdjc3RvayAgICAgICAgd21lbXNldAorKyAgICAgICAgICBtYnJsZW4gICAgICAgIHdjc2NvbGwgICAgICAgd2NzdG9sCisrICAgICAgICAgIG1icnRvd2MgICAgICAgd2NzY3B5ICAgICAgICB3Y3N0b2xkCisrCisrY29uZmlnIFBPU0lYX1JFR0VYUAorKyAgICBib29sICJSZWd1bGFyIGV4cHJlc3Npb25zIgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uCisrICAgICAgICBmdW5jdGlvbnMsIGFuZCB0aGUgYXNzb2NpYXRlZCBub24tUE9TSVggZXh0ZW5zaW9ucyBhbmQKKysgICAgICAgIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zLgorKworKyAgICAgICAgV2l0aCBQT1NJWF9SRUdFWFAgZGlzYWJsZWQsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZQorKyAgICAgICAgb21pdHRlZCBmcm9tIGxpYmM6CisrCisrICAgICAgICAgIHJlX2NvbXAgICAgICAgICAgICAgICAgIHJlX21heF9mYWlsdXJlcyAgICAgICAgIHJlZ2NvbXAKKysgICAgICAgICAgcmVfY29tcGlsZV9mYXN0bWFwICAgICAgcmVfc2VhcmNoICAgICAgICAgICAgICAgcmVnZXJyb3IKKysgICAgICAgICAgcmVfY29tcGlsZV9wYXR0ZXJuICAgICAgcmVfc2VhcmNoXzIgICAgICAgICAgICAgcmVnZXhlYworKyAgICAgICAgICByZV9leGVjICAgICAgICAgICAgICAgICByZV9zZXRfcmVnaXN0ZXJzICAgICAgICByZWdmcmVlCisrICAgICAgICAgIHJlX21hdGNoICAgICAgICAgICAgICAgIHJlX3NldF9zeW50YXggICAgICAgICAgIHJwbWF0Y2gKKysgICAgICAgICAgcmVfbWF0Y2hfMiAgICAgICAgICAgICAgcmVfc3ludGF4X29wdGlvbnMKKysKKysgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgY29tcGF0aWJpbGl0eSByZWdleHAgaW50ZXJmYWNlIGRlZmluZWQgaW4gdGhlCisrICAgICAgICA8cmVnZXhwLmg+IGhlYWRlciBmaWxlLCAnY29tcGlsZScsICdzdGVwJywgYW5kICdhZHZhbmNlJywgaXMKKysgICAgICAgIG9taXR0ZWQuCisrCisrY29uZmlnIFBPU0lYX1JFR0VYUF9HTElCQworKyAgICBib29sICJSZWd1bGFyIGV4cHJlc3Npb25zIGZyb20gR0xJQkMiCisrICAgIGRlcGVuZHMgb24gUE9TSVhfUkVHRVhQCisrICAgIGhlbHAKKysJVGhpcyBvcHRpb24gZ3JvdXAgc3BlY2lmaWVzIHdoaWNoIHJlZ3VsYXIgZXhwcmVzc2lvbgorKyAgICAgICAgbGlicmFyeSB0byB1c2UuICBUaGUgY2hvaWNlIGlzIGJldHdlZW4gcmVnZXgKKysgICAgICAgIGltcGxlbWVudGF0aW9uIGZyb20gR0xJQkMgYW5kIHJlZ2V4IGltcGxlbWVudGF0aW9uIGZyb20KKysgICAgICAgIGxpYmliZXJ0eS4gIFRoZSBHTElCQyB2YXJpYW50IGlzIGZ1bGx5IFBPU0lYIGNvbmZvcm1hbnQgYW5kCisrICAgICAgICBvcHRpbWl6ZWQgZm9yIHNwZWVkOyByZWdleCBmcm9tIGxpYmliZXJ0eSBpcyBtb3JlIHRoYW4gdHdpY2UKKysgICAgICAgIGFzIHNtYWxsIHdoaWxlIHN0aWxsIGlzIGVub3VnaCBmb3IgbW9zdCBwcmFjdGljYWwgcHVycG9zZXMuCisrCisrY29uZmlnIFBPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgYm9vbCAiSW5wdXQgYW5kIG91dHB1dCBmdW5jdGlvbnMgZm9yIHdpZGUgY2hhcmFjdGVycyIKKysgICAgZGVwZW5kcyBvbiBQT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZworKyAgICAgICAgd2lkZSBjaGFyYWN0ZXJzIHRvIGFuZCBmcm9tIDxzdGRpby5oPiBzdHJlYW1zLgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGZnZXR3YyAgICAgICAgZndwcmludGYgICAgICBwdXR3Y2hhciAgICAgIHZ3c2NhbmYKKysgICAgICAgICAgZmdldHdzICAgICAgICBmd3NjYW5mICAgICAgIHVuZ2V0d2MgICAgICAgd3ByaW50ZgorKyAgICAgICAgICBmcHV0d2MgICAgICAgIGdldHdjICAgICAgICAgdmZ3cHJpbnRmICAgICB3c2NhbmYKKysgICAgICAgICAgZnB1dHdzICAgICAgICBnZXR3Y2hhciAgICAgIHZmd3NjYW5mCisrICAgICAgICAgIGZ3aWRlICAgICAgICAgcHV0d2MgICAgICAgICB2d3ByaW50ZgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZnVydGhlciBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHVubG9ja2VkCisrICAgICAgICB2YXJpYW50cyBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBmZ2V0d2NfdW5sb2NrZWQgICAgICAgICAgIGdldHdjX3VubG9ja2VkCisrICAgICAgICAgIGZnZXR3c191bmxvY2tlZCAgICAgICAgICAgZ2V0d2NoYXJfdW5sb2NrZWQKKysgICAgICAgICAgZnB1dHdjX3VubG9ja2VkICAgICAgICAgICBwdXR3Y191bmxvY2tlZAorKyAgICAgICAgICBmcHV0d3NfdW5sb2NrZWQgICAgICAgICAgIHB1dHdjaGFyX3VubG9ja2VkCisrCisrICAgICAgICBOb3RlIHRoYXQgdGhlIEdOVSBzdGFuZGFyZCBDKysgbGlicmFyeSwgJ2xpYnN0ZGMrKy5zbycsIHVzZXMKKysgICAgICAgIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zOyB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBsaW5rIG9yIHJ1bgorKyAgICAgICAgQysrIHByb2dyYW1zIGlmIHlvdSBkaXNhYmxlIHRoaXMgb3B0aW9uIGdyb3VwLgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgYWxzbyBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nCisrICAgICAgICBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGZkb3BlbgorKyAgICAgICAgICBmb3BlbgorKyAgICAgICAgICBmb3BlbjY0CisrICAgICAgICAgIGZyZW9wZW4KKysgICAgICAgICAgZnJlb3BlbjY0CisrCisrICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYWxsIHRha2UgYW4gT1BFTlRZUEUgcGFyYW1ldGVyIHdoaWNoIG1heQorKyAgICAgICAgY29udGFpbiBhIHN0cmluZyBvZiB0aGUgZm9ybSAiLGNjcz1DSEFSU0VUIiwgaW5kaWNhdGluZyB0aGF0CisrICAgICAgICB0aGUgdW5kZXJseWluZyBmaWxlIHVzZXMgdGhlIGNoYXJhY3RlciBzZXQgbmFtZWQgQ0hBUlNFVC4KKysgICAgICAgIFRoaXMgcHJvZHVjZXMgYSB3aWRlLW9yaWVudGVkIHN0cmVhbSwgd2hpY2ggaXMgb25seSB1c2VmdWwKKysgICAgICAgIHdoZW4gdGhlIGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiB0aGlzIG9wdGlvbiBncm91cCBhcmUgcHJlc2VudC4KKysgICAgICAgIElmIHRoZSB1c2VyIGF0dGVtcHRzIHRvIG9wZW4gYSBmaWxlIHNwZWNpZnlpbmcgYSBjaGFyYWN0ZXIgc2V0CisrICAgICAgICBpbiB0aGUgT1BFTlRZUEUgcGFyYW1ldGVyLCBhbmQgRUdMSUJDIHdhcyBidWlsdCB3aXRoIHRoaXMKKysgICAgICAgIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCwgYW5kIHNldHMKKysgICAgICAgIGVycm5vIHRvIEVJTlZBTC4KKysKKysMCisrIyBUaGlzIGhlbHBzIEVtYWNzIHVzZXJzIGJyb3dzZSB0aGlzIGZpbGUgdXNpbmcgdGhlIHBhZ2UgbW90aW9uIGNvbW1hbmRzCisrIyBhbmQgY29tbWFuZHMgbGlrZSAncGFnZXMtZGlyZWN0b3J5Jy4KKysjIExvY2FsIFZhcmlhYmxlczoKKysjIHBhZ2UtZGVsaW1pdGVyOiAiXmNvbmZpZ1xccy0iCisrIyBFbmQ6CitkaWZmIC0tZ2l0IGEvb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cyBiL29wdGlvbi1ncm91cHMuZGVmYXVsdHMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44MTQxMjAxCistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb24tZ3JvdXBzLmRlZmF1bHRzCitAQCAtMCwwICsxLDQ3IEBACisrIyBUaGlzIGZpbGUgc2V0cyBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIG9wdGlvbiBncm91cCB2YXJpYWJsZXMKKysjIG1lbnRpb25lZCBpbiBvcHRpb24tZ3JvdXBzLmRlZjsgc2VlIHRoYXQgZmlsZSBmb3IgYSBkZXNjcmlwdGlvbiBvZgorKyMgZWFjaCBvcHRpb24gZ3JvdXAuCisrIworKyMgU3ViZGlyZWN0b3J5IG1ha2VmaWxlcyBpbmNsdWRlIHRoaXMgZmlsZSBiZWZvcmUgaW5jbHVkaW5nIHRoZSB1c2VyJ3MKKysjIHNldHRpbmdzIGZyb20gb3B0aW9uLWdyb3Vwcy5jb25maWcgYXQgdGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZTsKKysjIHRoYXQgZmlsZSBuZWVkIG9ubHkgcmVmZXIgdG8gdGhvc2Ugb3B0aW9ucyB3aG9zZSBkZWZhdWx0IHNldHRpbmdzCisrIyBhcmUgdG8gYmUgY2hhbmdlZC4KKysjCisrIyBCeSBkZWZhdWx0LCBhbGwgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZC4KKytPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2ID0geQorK09QVElPTl9FR0xJQkNfQkFDS1RSQUNFID0geQorK09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9IHkKKytPUFRJT05fRUdMSUJDX0JTRCA9IHkKKytPUFRJT05fRUdMSUJDX0NYWF9URVNUUyA9IHkKKytPUFRJT05fRUdMSUJDX0NBVEdFVFMgPSB5CisrT1BUSU9OX0VHTElCQ19DSEFSU0VUUyA9IHkKKytPUFRJT05fRUdMSUJDX0NSWVBUID0geQorK09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDID0geQorK09QVElPTl9FR0xJQkNfREJfQUxJQVNFUyA9IHkKKytPUFRJT05fRUdMSUJDX0VOVlogPSB5CisrT1BUSU9OX0VHTElCQ19GQ1ZUID0geQorK09QVElPTl9FR0xJQkNfRk1UTVNHID0geQorK09QVElPTl9FR0xJQkNfRlNUQUIgPSB5CisrT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UgPSB5CisrT1BUSU9OX0VHTElCQ19HRVRMT0dJTiA9IHkKKytPUFRJT05fRUdMSUJDX0lETiA9IHkKKytPUFRJT05fRUdMSUJDX0lORVQgPSB5CisrT1BUSU9OX0VHTElCQ19JTkVUX0FOTCA9IHkKKytPUFRJT05fRUdMSUJDX0xJQk0gPSB5CisrT1BUSU9OX0VHTElCQ19MT0NBTEVTID0geQorK09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgPSB5CisrT1BUSU9OX0VHTElCQ19NRU1VU0FHRSA9IHkKKytPUFRJT05fRUdMSUJDX05JUyA9IHkKKytPUFRJT05fRUdMSUJDX05TU1dJVENIID0geQorK09QVElPTl9FR0xJQkNfUkNNRCA9IHkKKytPUFRJT05fRUdMSUJDX1JUTERfREVCVUcgPSB5CisrT1BUSU9OX0VHTElCQ19TUEFXTiA9IHkKKytPUFRJT05fRUdMSUJDX1NUUkVBTVMgPSB5CisrT1BUSU9OX0VHTElCQ19TVU5SUEMgPSB5CisrT1BUSU9OX0VHTElCQ19VVE1QID0geQorK09QVElPTl9FR0xJQkNfVVRNUFggPSB5CisrT1BUSU9OX0VHTElCQ19XT1JERVhQID0geQorK09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSID0geQorK09QVElPTl9QT1NJWF9SRUdFWFAgPSB5CisrT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQyA9IHkKKytPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTyA9IHkKK2RpZmYgLS1naXQgYS9vcHRpb24tZ3JvdXBzLm1hayBiL29wdGlvbi1ncm91cHMubWFrCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjgzZTBjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9uLWdyb3Vwcy5tYWsKK0BAIC0wLDAgKzEsNDEgQEAKKysjIFNldHVwIGZpbGUgZm9yIHN1YmRpcmVjdG9yeSBNYWtlZmlsZXMgdGhhdCBkZWZpbmUgRUdMSUJDIG9wdGlvbiBncm91cHMuCisrCisrIyBFR0xJQkMgc2hvdWxkbid0IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy4gIEhvd2V2ZXIsIHRoZQorKyMgY3Jvc3MtYnVpbGQtZnJpZW5kbHkgbG9jYWxlZGVmIGluY2x1ZGVzIHRoaXMgbWFrZWZpbGUgdG8gZ2V0IG9wdGlvbgorKyMgZ3JvdXAgdmFyaWFibGUgZGVmaW5pdGlvbnM7IGl0IHVzZXMgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYWxsIHRoZQorKyMgbXVsdGlsaWJzLCBhbmQgbmVlZHMgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IG9wdGlvbiBncm91cAorKyMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBlYWNoIG11bHRpbGliLgorK29wdGlvbl9ncm91cF9jb25maWdfZmlsZSA/PSAkKG9iamRpcikvb3B0aW9uLWdyb3Vwcy5jb25maWcKKysKKysjIFJlYWQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGFsbCBvcHRpb25zLgorKyMgV2UncmUgaW5jbHVkZWQgYmVmb3JlIC4uL1J1bGVzLCBzbyB3ZSBjYW4ndCBhc3N1bWUgJCguLikgaXMgc2V0LgorK2luY2x1ZGUgJChmaXJzdHdvcmQgJCguLikgLi4vKW9wdGlvbi1ncm91cHMuZGVmYXVsdHMKKysKKysjIFJlYWQgdGhlIGRldmVsb3BlcidzIG9wdGlvbiBncm91cCBzZWxlY3Rpb25zLCBvdmVycmlkaW5nIHRoZQorKyMgZGVmYXVsdHMgZnJvbSBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzLgorKy1pbmNsdWRlICQob3B0aW9uX2dyb3VwX2NvbmZpZ19maWxlKQorKworKyMgJChjYWxsIG9wdGlvbi1kaXNhYmxlZCwgVkFSKSBpcyAneScgaWYgVkFSIGlzIG5vdCAneScsIG9yICduJyBvdGhlcndpc2UuCisrIyBWQVIgc2hvdWxkIGJlIGEgdmFyaWFibGUgbmFtZSwgbm90IGEgdmFyaWFibGUgcmVmZXJlbmNlOyB0aGlzIGlzCisrIyBsZXNzIGdlbmVyYWwsIGJ1dCBtb3JlIHRlcnNlIGZvciB0aGUgaW50ZW5kZWQgdXNlLgorKyMgWW91IGNhbiB1c2UgaXQgdG8gYWRkIGEgZmlsZSB0byBhIGxpc3QgaWYgYW4gb3B0aW9uIGdyb3VwIGlzCisrIyBkaXNhYmxlZCwgbGlrZSB0aGlzOgorKyMgICByb3V0aW5lcy0kKGNhbGwgb3B0aW9uLWRpc2FibGVkLCBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0gLi4uCisrZGVmaW5lIG9wdGlvbi1kaXNhYmxlZAorKyQoZmlyc3R3b3JkICQoc3Vic3QgeSxuLCQoZmlsdGVyIHksJCgkKHN0cmlwICQoMSkpKSkpIHkpCisrZW5kZWYKKysKKysjIEVzdGFibGlzaCAncm91dGluZXMteScsIGV0Yy4gYXMgc2ltcGx5LWV4cGFuZGVkIHZhcmlhYmxlcy4KKythdXgteQkgICAgICAgCSAgICA6PQorK2V4dHJhLWxpYnMtb3RoZXJzLXkgOj0KKytleHRyYS1saWJzLXkgICAJICAgIDo9CisrZXh0cmEtb2Jqcy15ICAgCSAgICA6PQorK2luc3RhbGwtYmluLXkgIAkgICAgOj0KKytpbnN0YWxsLW90aGVycy15ICAgIDo9CisraW5zdGFsbC1zYmluLXkgCSAgICA6PQorK290aGVycy15ICAgICAgIAkgICAgOj0KKytvdGhlcnMtcGllLXkgICAJICAgIDo9Cisrcm91dGluZXMteSAgICAgCSAgICA6PQorK3Rlc3Qtc3Jjcy15ICAgIAkgICAgOj0KKyt0ZXN0cy15ICAgICAgICAJICAgIDo9CisreHRlc3RzLXkgICAgICAgCSAgICA6PQorZGlmZiAtLWdpdCBhL29wdGlvbnMtY29uZmlnL01ha2VmaWxlIGIvb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYjAwNzA4CistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorQEAgLTAsMCArMSw1NSBAQAorKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIyBFR0xJQkMgb3B0aW9uLWdyb3VwcyBjb25maWd1cmF0aW9uIHRhcmdldHMKKysjIFRoZXNlIHRhcmdldHMgYXJlIGluY2x1ZGVkIGZyb20gdG9wLWxldmVsIG1ha2VmaWxlCisrCisraWZuZXEgKCQoa2NvbmZpZ190b29scyksKQorK2lmbmVxIChubywkKFBFUkwpKQorKworK29jZGlyIDo9IG9wdGlvbnMtY29uZmlnCisrCisrT2NvbmZpZ0RlZmF1bHRzICAgICA6PSBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCisrT2NvbmZpZ0RlZmF1bHRzX3RtcCA6PSAkKGNvbW1vbi1vYmpwZngpLnRtcC5kZWZjb25maWcKKytPY29uZmlnRGVmICAgICAgICAgIDo9IG9wdGlvbi1ncm91cHMuZGVmCisrT2NvbmZpZyAgICAgICAgICAgICA6PSAkKGNvbW1vbi1vYmpwZngpb3B0aW9uLWdyb3Vwcy5jb25maWcKKytPY29uZmlnX3RtcCAgICAgICAgIDo9ICQoY29tbW9uLW9ianBmeCkudG1wLmNvbmZpZworKworK2NvbmYgIDo9ICQoa2NvbmZpZ190b29scykvY29uZgorK21jb25mIDo9ICQoa2NvbmZpZ190b29scykvbWNvbmYKKysKKytwcmVwcm9jICA6PSAkKFBFUkwpICQob2NkaXIpL2NvbmZpZy1wcmVwcm9jLnBsCisrcG9zdHByb2MgOj0gJChQRVJMKSAkKG9jZGlyKS9jb25maWctcG9zdHByb2MucGwKKysKKytQSE9OWSArPSBkZWZjb25maWcgY29uZmlnIG1lbnVjb25maWcKKysKKytkZWZjb25maWc6ICQoY29uZikgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ0RlZikKKysJcm0gLWYgJChPY29uZmlnRGVmYXVsdHNfdG1wKQorKwlybSAtZiAkKE9jb25maWdfdG1wKQorKwkkKHByZXByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSA+ICQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkKKysJS0NPTkZJR19DT05GSUc9JChPY29uZmlnX3RtcCkgJDwgLS1kZWZjb25maWc9JChPY29uZmlnRGVmYXVsdHNfdG1wKSBcCisrCQkJCSQoT2NvbmZpZ0RlZikKKysJJChwb3N0cHJvYykgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ190bXApID4gJChPY29uZmlnKQorKwlybSAkKE9jb25maWdfdG1wKQorKwlybSAkKE9jb25maWdEZWZhdWx0c190bXApCisrCisrY29uZmlnOiAkKGNvbmYpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdEZWYpCisrCXJtIC1mICQoT2NvbmZpZ190bXApCisrCSQocHJlcHJvYykgJCh3aWxkY2FyZCAkKE9jb25maWcpKSA+ICQoT2NvbmZpZ190bXApCisrCUtDT05GSUdfQ09ORklHPSQoT2NvbmZpZ190bXApICQ8IC0tb2xkYXNrY29uZmlnICQoT2NvbmZpZ0RlZikKKysJJChwb3N0cHJvYykgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ190bXApID4gJChPY29uZmlnKQorKwlybSAkKE9jb25maWdfdG1wKQorKworK21lbnVjb25maWc6ICQobWNvbmYpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdEZWYpCisrCXJtIC1mICQoT2NvbmZpZ190bXApCisrCSQocHJlcHJvYykgJCh3aWxkY2FyZCAkKE9jb25maWcpKSA+ICQoT2NvbmZpZ190bXApCisrCUtDT05GSUdfQ09ORklHPSQoT2NvbmZpZ190bXApICQ8ICQoT2NvbmZpZ0RlZikKKysJJChwb3N0cHJvYykgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ190bXApID4gJChPY29uZmlnKQorKwlybSAkKE9jb25maWdfdG1wKQorKworKyMgSGVscCB0ZXh0IHVzZWQgYnkgbWFrZSBoZWxwCisraGVscDoKKysJQGVjaG8gICcgIGRlZmNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZnJvbSBkZWZhdWx0IGNvbmZpZycKKysJQGVjaG8gICcgIGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIGxpbmUtb3JpZW50ZWQgcHJvZ3JhbScKKysJQGVjaG8gICcgIG1lbnVjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBtZW51IGJhc2VkIHByb2dyYW0nCisrCisrZW5kaWYKKytlbmRpZgorZGlmZiAtLWdpdCBhL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbCBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRkZDFjNjMKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbAorQEAgLTAsMCArMSw1OCBAQAorKyMhL3Vzci9iaW4vcGVybAorKworKyR1c2FnZSA9ICJ1c2FnZTogJDAgPGRlZmF1bHQgY29uZmlnIGZpbGU+IDxjb25maWcgZmlsZT5cbiI7CisrCisrZGllICIkdXNhZ2UiIHVubGVzcyBAQVJHVjsKKyskZGVmYXVsdHMgPSBzaGlmdCBAQVJHVjsKKytkaWUgIiR1c2FnZSIgdW5sZXNzIEBBUkdWOworK2RpZSAiQ291bGQgbm90IG9wZW4gJEFSR1ZbMF0iIHVubGVzcyAtVCAkQVJHVlswXTsKKysKKytzdWIgeWFuayB7CisrICAgIEBvcHRpb24gPSBncmVwKCEoJF8gPX4gLyRfWzBdXHMqPS8pLCBAb3B0aW9uKTsKKyt9CisrCisrb3BlbihERUZBVUxUUywgJGRlZmF1bHRzKSB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICRkZWZhdWx0c1xuIjsKKysKKysjIGdldCB0aGUgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zIHVzaW5nIHRoZSBkZWZhdWx0IGNvbmZpZyBmaWxlCisrJGkgPSAwOworK3doaWxlICg8REVGQVVMVFM+KSB7CisrICAgIGlmICgvXlxzKk9QVElPTl8oXHcrXHMqPS4qJCkvKSB7CisrCSRvcHRpb25bJGkrK10gPSAkMTsKKysgICAgfQorK30KKysKKysjIG5vdyBnbyB0aHJvdWdoIHRoZSBjb25maWcgZmlsZSwgbWFraW5nIHRoZSBuZWNlc3NhcnkgY2hhbmdlcworK3doaWxlICg8PikgeworKyAgICBpZiAoL0xpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9uLykgeworKwkjIGNoYW5nZSB0aXRsZQorKwlzL0xpbnV4IEtlcm5lbC9PcHRpb24gR3JvdXBzLzsKKysJcHJpbnQ7CisrICAgIH0gZWxzaWYgKC9eXHMqQ09ORklHXyhcdyspXHMqPS8pIHsKKysJIyB0aGlzIGlzIGFuIGV4cGxpY2l0IG9wdGlvbiBzZXQgbGluZSwgY2hhbmdlIENPTkZJR18gdG8gT1BUSU9OXworKwkjIGJlZm9yZSBwcmludGluZyBhbmQgcmVtb3ZlIHRoaXMgb3B0aW9uIGZyb20gb3B0aW9uIGxpc3QKKysJJG9wdCA9ICQxOworKwl5YW5rKCRvcHQpOworKwlzL0NPTkZJR18vT1BUSU9OXy9nOworKwlwcmludDsKKysgICAgfSBlbHNpZiAoL15ccyojXHMrQ09ORklHXyhcdyspIGlzIG5vdCBzZXQvKSB7CisrCSMgdGhpcyBpcyBhIGNvbW1lbnQgbGluZSBmb3IgYW4gdW5zZXQgYm9vbGVhbiBvcHRpb24sIGNoYW5nZSBDT05GSUdfCisrCSMgdG8gT1BUSU9OXywgcmVtb3ZlIHRoaXMgb3B0aW9uIGZyb20gb3B0aW9uIGxpc3QsIGFuZCBjb252ZXJ0IHRvCisrCSMgZXhwbGljaXQgT1BUSU9OX0ZPTz1uCisrCSRvcHQgPSAkMTsKKysJeWFuaygkb3B0KTsKKysJcy9DT05GSUdfL09QVElPTl8vZzsKKysJcHJpbnQgIk9QVElPTl8kb3B0PW5cbiI7CisrICAgIH0gZWxzZSB7CisrCXByaW50OworKyAgICB9CisrfQorKworKyMgYW55IGJvb2xlYW4gb3B0aW9ucyBsZWZ0IGluIEBvcHRpb25zLCBhcmUgb3B0aW9ucyB0aGF0IHdlcmUgbm90IG1lbnRpb25lZCBpbgorKyMgdGhlIGNvbmZpZyBmaWxlLCBhbmQgaW1wbGljaXRseSB0aGF0IG1lYW5zIHRoZSBvcHRpb24gbXVzdCBiZSBzZXQgPW4sCisrIyBzbyBkbyB0aGF0IGhlcmUuCisrZm9yZWFjaCAkb3B0IChAb3B0aW9uKSB7CisrICAgIGlmICgkb3B0ID1+IC89XHMqW3luXS8pIHsKKysJJG9wdCA9fiBzLz1ccypbeW5dLz1uLzsKKysJcHJpbnQgIk9QVElPTl8kb3B0XG4iOworKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iODNiYjg1CistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbAorQEAgLTAsMCArMSw4IEBACisrIyEvdXNyL2Jpbi9wZXJsCisrCisraWYgKEBBUkdWKSB7CisrICAgIHdoaWxlICg8PikgeworKwlzL09QVElPTl8vQ09ORklHXy9nOworKwlwcmludDsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9zY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrIGIvc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3aworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUzM2FmMGMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sKK0BAIC0wLDAgKzEsNjMgQEAKKysjIG9wdGlvbi1ncm91cHMuYXdrIC0tLSBnZW5lcmF0ZSBvcHRpb24gZ3JvdXAgaGVhZGVyIGZpbGUKKysjIEdpdmVuIGlucHV0IGZpbGVzIGNvbnRhaW5pbmcgbWFrZWZpbGUtc3R5bGUgYXNzaWdubWVudHMgdG8gdmFyaWFibGVzLAorKyMgcHJpbnQgb3V0IGEgaGVhZGVyIGZpbGUgdGhhdCAjZGVmaW5lcyBhbiBhcHByb3ByaWF0ZSBwcmVwcm9jZXNzb3IKKysjIHN5bWJvbCBmb3IgZWFjaCB2YXJpYWJsZSBsZWZ0IHNldCB0byAneScuCisrCisrQkVHSU4geyBGUz0iPSIgfQorKworKyMgVHJpbSBzcGFjZXMuCisreyBnc3ViICgvW1s6Ymxhbms6XV0vLCAiIikgfQorKworKyMgU2tpcCBjb21tZW50cy4KKysvXiMvIHsgbmV4dCB9CisrCisrIyBQcm9jZXNzIGFzc2lnbm1lbnRzLgorK05GID09IDIgeworKyAgICB2YXJzWyQxXSA9ICQyCisrfQorKworKyMgUHJpbnQgZmluYWwgdmFsdWVzLgorK0VORCB7CisrICAgIHByaW50ICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3ayIKKysgICAgcHJpbnQgIiAgIGluIHRoZSBFR0xJQkMgc291cmNlIHRyZWUuIgorKyAgICBwcmludCAiIgorKyAgICBwcmludCAiICAgSXQgZGVmaW5lcyBtYWNyb3MgdGhhdCBpbmRpY2F0ZSB3aGljaCBFR0xJQkMgb3B0aW9uIGdyb3VwcyB3ZXJlIgorKyAgICBwcmludCAiICAgY29uZmlndXJlZCBpbiAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIHdoZW4gdGhpcyBDIGxpYnJhcnkgd2FzIgorKyAgICBwcmludCAiICAgYnVpbHQuICBGb3IgZWFjaCBvcHRpb24gZ3JvdXAgbmFtZWQgT1BUSU9OX2ZvbywgaXQgI2RlZmluZXMiCisrICAgIHByaW50ICIgICBfX09QVElPTl9mb28gdG8gYmUgMSBpZiB0aGUgZ3JvdXAgaXMgZW5hYmxlZCwgb3IgI2RlZmluZXMgdGhhdCIKKysgICAgcHJpbnQgIiAgIHN5bWJvbCB0byBiZSAwIGlmIHRoZSBncm91cCBpcyBkaXNhYmxlZC4gICovIgorKyAgICBwcmludCAiIgorKyAgICBwcmludCAiI2lmbmRlZiBfX0dOVV9PUFRJT05fR1JPVVBTX0giCisrICAgIHByaW50ICIjZGVmaW5lIF9fR05VX09QVElPTl9HUk9VUFNfSCIKKysgICAgcHJpbnQgIiIKKysKKysgICAgIyBQcm9kdWNlIGEgc29ydGVkIGxpc3Qgb2YgdmFyaWFibGUgbmFtZXMuCisrICAgIGk9MAorKyAgICBmb3IgKHZhciBpbiB2YXJzKQorKyAgICAgICAgbmFtZXNbaSsrXSA9IHZhcgorKyAgICBuID0gYXNvcnQgKG5hbWVzKQorKworKyAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykKKysgICAgeworKyAgICAgICAgdmFyID0gbmFtZXNbaV0KKysgICAgICAgIGlmICh2YXIgfiAvXk9QVElPTl8vKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICh2YXJzW3Zhcl0gPT0gInkiKQorKyAgICAgICAgICAgICAgICBwcmludCAiI2RlZmluZSBfXyIgdmFyICIgMSIKKysgICAgICAgICAgICBlbHNlIGlmICh2YXJzW3Zhcl0gPT0gIm4iKQorKyAgICAgICAgICAgICAgICBwcmludCAiI2RlZmluZSBfXyIgdmFyICIgMCIKKysJICAgIGVsc2UgaWYgKHZhcnNbdmFyXSB+IC9eWzAtOV0rLyB8fAorKwkJICAgICB2YXJzW3Zhcl0gfiAvXjB4WzAtOWFBYkJjQ2REZUVmRl0rLyB8fAorKwkJICAgICB2YXJzW3Zhcl0gfiAvXlwiLykKKysJCSBwcmludCAiI2RlZmluZSBfXyIgdmFyICIgIiB2YXJzW3Zhcl0KKysJICAgIGVsc2UKKysJCXByaW50ICIvKiAjdW5kZWYgX18iIHZhciAiICovIgorKyAgICAgICAgICAgICMgSWdub3JlIHZhcmlhYmxlcyB0aGF0IGRvbid0IGhhdmUgYm9vbGVhbiwgaW50LCBoZXgsIG9yCisrCSAgICAjIHN0cmluZyB2YWx1ZXMuIElkZWFsbHksIHRoaXMgd291bGQgYmUgZHJpdmVuIGJ5IHRoZSB0eXBlcworKwkgICAgIyBnaXZlbiBpbiBvcHRpb24tZ3JvdXBzLmRlZi4KKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBwcmludCAiIgorKyAgICBwcmludCAiI2VuZGlmIC8qIF9fR05VX09QVElPTl9HUk9VUFNfSCAqLyIKKyt9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjkzMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIDhmZTBkMjk0ODhiMzc2MDExY2RhYWE0NjJkNTU3ZmZjMGIzMWZiNjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0OToyOCArMDAwMAorU3ViamVjdDogW1BBVENIIDIwLzI3XSBlZ2xpYmM6IEhlbHAgYm9vdHN0cmFwIGNyb3NzIHRvb2xjaGFpbgorCitUYWtlbiBmcm9tIEVHTElCQywgcjE0ODQgKyByMTUyNQorCisgICAgICAgIDIwMDctMDItMjAgIEppbSBCbGFuZHkgIDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgICAgICAgICAqIE1ha2VmaWxlIChpbnN0YWxsLWhlYWRlcnMpOiBQcmVzZXJ2ZSBvbGQgYmVoYXZpb3I6IGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaCBvbmx5IGlmIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMKKyAgICAgICAgICAgICAgICBpcyBzZXQ7IG90aGVyd2lzZSwgcGxhY2UgZ251L3N0dWJzLmggb24gdGhlICdpbnN0YWxsLW90aGVycycgbGlzdC4KKworICAgICAgICAyMDA3LTAyLTE2ICBKaW0gQmxhbmR5ICA8amltYkBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICAgICAgICAgKiBNYWtlZmlsZTogQW1lbmQgbWFrZSBpbnN0YWxsLWhlYWRlcnMgdG8gaW5zdGFsbCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGZvciBidWlsZGluZyBhIGNyb3NzLWNvbXBpbGVyLiAgSW5zdGFsbCBnbnUvc3R1YnMuaCBhcworICAgICAgICAgICAgICAgIHBhcnQgb2YgJ2luc3RhbGwtaGVhZGVycycsIG5vdCAnaW5zdGFsbC1vdGhlcnMnLgorICAgICAgICAgICAgICAgIElmIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMgaXMgJ3llcycsIGluc3RhbGwgYSBkdW1teSBjb3B5IG9mCisgICAgICAgICAgICAgICAgZ251L3N0dWJzLmgsIGluc3RlYWQgb2YgY29tcHV0aW5nIHRoZSByZWFsIHRoaW5nLgorICAgICAgICAgICAgICAgICogaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaDogTmV3IGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAyMiArKysrKysrKysrKysrKysrKysrKystCisgaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCB8IDEyICsrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBmOTA2MzkxLi5lNGUxNDllIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNjksOSArNjksMTggQEAgc3ViZGlyLWRpcnMgPSBpbmNsdWRlCisgdnBhdGggJS5oICQoc3ViZGlyLWRpcnMpCisgCisgIyBXaGF0IHRvIGluc3RhbGwuCistaW5zdGFsbC1vdGhlcnMgPSAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPQorIAorKyMgSWYgd2UncmUgYm9vdHN0cmFwcGluZywgaW5zdGFsbCBhIGR1bW15IGdudS9zdHVicy5oIGFsb25nIHdpdGggdGhlCisrIyBvdGhlciBoZWFkZXJzLCBzbyAnbWFrZSBpbnN0YWxsLWhlYWRlcnMnIHByb2R1Y2VzIGEgdXNlYWJsZSBpbmNsdWRlCisrIyB0cmVlLiAgT3RoZXJ3aXNlLCBpbnN0YWxsIGdudS9zdHVicy5oIGxhdGVyLCBhZnRlciB0aGUgcmVzdCBvZiB0aGUKKysjIGJ1aWxkIGlzIGRvbmUuCisraWZlcSAoJChpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzKSx5ZXMpCisraW5zdGFsbC1oZWFkZXJzOiAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKytlbHNlCisraW5zdGFsbC1vdGhlcnMgPSAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKytlbmRpZgorKworIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgaGVhZGVycyArPSBnbnUvbGliLW5hbWVzLmgKKyBlbmRpZgorQEAgLTE1MSw2ICsxNjAsMTYgQEAgb3RoZXJzOiAkKGNvbW1vbi1vYmpwZngpdGVzdHJ1bi5zaAorIAorIHN1YmRpci1zdHVicyA6PSAkKGZvcmVhY2ggZGlyLCQoc3ViZGlycyksJChjb21tb24tb2JqcGZ4KSQoZGlyKS9zdHVicykKKyAKKysjIGdudS9zdHVicy5oIGRlcGVuZHMgKHZpYSB0aGUgc3ViZGlyICdzdHVicycgdGFyZ2V0cykgb24gYWxsIHRoZSAubworKyMgZmlsZXMgaW4gRUdMSUJDLiAgRm9yIGJvb3RzdHJhcHBpbmcgYSBHQ0MvRUdMSUJDIHBhaXIsIGFuIGVtcHR5CisrIyBnbnUvc3R1YnMuaCBpcyBnb29kIGVub3VnaC4KKytpZmVxICgkKGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMpLHllcykKKyskKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmg6IGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggJCgrZm9yY2UpCisrCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorKwkkKElOU1RBTExfREFUQSkgJDwgJEAKKysKKytpbnN0YWxsZWQtc3R1YnMgPQorK2Vsc2UKKyBpZm5kZWYgYWJpLXZhcmlhbnRzCisgaW5zdGFsbGVkLXN0dWJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisgZWxzZQorQEAgLTE3Nyw2ICsxOTYsNyBAQCAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmg6ICQoK2ZvcmNlKQorIAorIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyOiAkKGluc3RhbGxlZC1zdHVicykKKyBlbmRpZgorK2VuZGlmCisgCisgCisgIyBTaW5jZSBzdHVicy5oIGlzIG5ldmVyIG5lZWRlZCB3aGVuIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LCB3ZSBzaW1wbGlmeSB0aGUKK2RpZmYgLS1naXQgYS9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oIGIvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFkMmI2NjkKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKK0BAIC0wLDAgKzEsMTIgQEAKKysvKiBQbGFjZWhvbGRlciBzdHVicy5oIGZpbGUgZm9yIGJvb3RzdHJhcHBpbmcuCisrCisrICAgV2hlbiBib290c3RyYXBwaW5nIGEgR0NDL0VHTElCQyBwYWlyLCBHQ0MgcmVxdWlyZXMgdGhhdCB0aGUgRUdMSUJDCisrICAgaGVhZGVycyBiZSBpbnN0YWxsZWQsIGJ1dCB3ZSBjYW4ndCBmdWxseSBidWlsZCBFR0xJQkMgd2l0aG91dCB0aGF0CisrICAgR0NDLiAgU28gd2UgcnVuIHRoZSBjb21tYW5kOgorKworKyAgICAgIG1ha2UgaW5zdGFsbC1oZWFkZXJzIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzCisrCisrICAgdG8gaW5zdGFsbCB0aGUgaGVhZGVycyBHQ0MgbmVlZHMsIGJ1dCBhdm9pZCBidWlsZGluZyBjZXJ0YWluCisrICAgZGlmZmljdWx0IGhlYWRlcnMuICBUaGUgPGdudS9zdHVicy5oPiBoZWFkZXIgZGVwZW5kcywgdmlhIHRoZQorKyAgIEVHTElCQyBzdWJkaXIgJ3N0dWJzJyBtYWtlIHRhcmdldHMsIG9uIGV2ZXJ5IC5vIGZpbGUgaW4gRUdMSUJDLCBidXQKKysgICBhbiBlbXB0eSBzdHVicy5oIGxpa2UgdGhpcyB3aWxsIGRvIGZpbmUgZm9yIEdDQy4gICovCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJiOGExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gZmUyYWU0Zjg3NzkyOGRkNmJmZjViYWMzZjE1YmNlNGI1MGQyYmQxMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjUxOjE2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMjddIGVnbGliYzogY2hlcnJ5LXBpY2tlZCBmcm9tCisgaHR0cDovL3d3dy5lZ2xpYmMub3JnL2FyY2hpdmVzL3BhdGNoZXMvbXNnMDA3NzIuaHRtbAorCitJdCBoYXNuJ3QgeWV0IGJlZW4gbWVyZ2VkIGludG8gZ2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyByZXNvbHYvcmVzX2xpYmMuYyB8IDE1ICsrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcmVzb2x2L3Jlc19saWJjLmMgYi9yZXNvbHYvcmVzX2xpYmMuYworaW5kZXggZWUzZmEyMS4uMjllMjM0MCAxMDA2NDQKKy0tLSBhL3Jlc29sdi9yZXNfbGliYy5jCisrKysgYi9yZXNvbHYvcmVzX2xpYmMuYworQEAgLTIyLDEyICsyMiwxMyBAQAorICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyAjaW5jbHVkZSA8cmVzb2x2Lmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CistCisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgLyogVGhlIGZvbGxvd2luZyBiaXQgaXMgY29waWVkIGZyb20gcmVzX2RhdGEuYyAod2hlcmUgaXQgaXMgI2lmZGVmJ2VkCisgICAgb3V0KSBzaW5jZSByZXNfaW5pdCgpIHNob3VsZCBnbyBpbnRvIGxpYmMuc28gYnV0IHRoZSByZXN0IG9mIHRoYXQKKyAgICBmaWxlIHNob3VsZCBub3QuICAqLworIAorK19fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKyBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Jlc19pbml0c3RhbXAgYXR0cmlidXRlX2hpZGRlbjsKKyAvKiBXZSBoYXZlIGF0b21pYyBpbmNyZW1lbnQgb3BlcmF0aW9ucyBvbiA2NC1iaXQgcGxhdGZvcm1zLiAgKi8KKyAjaWYgX19XT1JEU0laRSA9PSA2NAorQEAgLTM1LDcgKzM2LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19yZXNfaW5pdHN0YW1wIGF0dHJpYnV0ZV9oaWRkZW47CisgIyBkZWZpbmUgYXRvbWljaW5jdW5sb2NrKGxvY2spICh2b2lkKSAwCisgIyBkZWZpbmUgYXRvbWljaW5jKHZhcikgY2F0b21pY19pbmNyZW1lbnQgKCYodmFyKSkKKyAjZWxzZQorLV9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKyAjIGRlZmluZSBhdG9taWNpbmNsb2NrKGxvY2spIF9fbGliY19sb2NrX2xvY2sgKGxvY2spCisgIyBkZWZpbmUgYXRvbWljaW5jdW5sb2NrKGxvY2spIF9fbGliY19sb2NrX3VubG9jayAobG9jaykKKyAjIGRlZmluZSBhdG9taWNpbmModmFyKSArK3ZhcgorQEAgLTk0LDcgKzk0LDE4IEBAIHJlc19pbml0KHZvaWQpIHsKKyBpbnQKKyBfX3Jlc19tYXliZV9pbml0IChyZXNfc3RhdGUgcmVzcCwgaW50IHByZWluaXQpCisgeworKwlzdGF0aWMgdGltZV90IGxhc3RfbXRpbWU7CisrCXN0cnVjdCBzdGF0IHN0YXRidWY7CisrCWludCByZXQ7CisrCisgCWlmIChyZXNwLT5vcHRpb25zICYgUkVTX0lOSVQpIHsKKysJCXJldCA9IHN0YXQgKF9QQVRIX1JFU0NPTkYsICZzdGF0YnVmKTsKKysJCV9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKwkJaWYgKChyZXQgPT0gMCkgJiYgKGxhc3RfbXRpbWUgIT0gc3RhdGJ1Zi5zdF9tdGltZSkpIHsKKysJCQlsYXN0X210aW1lID0gc3RhdGJ1Zi5zdF9tdGltZTsKKysJCQlhdG9taWNpbmMgKF9fcmVzX2luaXRzdGFtcCk7CisrCQl9CisrCQlfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworIAkJaWYgKF9fcmVzX2luaXRzdGFtcCAhPSByZXNwLT5fdS5fZXh0LmluaXRzdGFtcCkgeworIAkJCWlmIChyZXNwLT5uc2NvdW50ID4gMCkKKyAJCQkJX19yZXNfaWNsb3NlIChyZXNwLCB0cnVlKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNGM5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRnJvbSBiZTcyNzMyMjU2OTgwNzQzNDdhNzFkZTU4MDA2OTc3YmIzMDRkN2Y3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NTM6NDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMi8yN10gZWdsaWJjOiBDbGVhciBjYWNoZSBsaW5lcyBvbiBwcGM4eHgKKworMjAwNy0wNi0xMyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AY29kZXNvdXJjZXJ5LmNvbT4KKyAgICAgICAgICAgIE1hcmsgU2hpbndlbGwgIDxzaGlud2VsbEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKKyAgICAgICAgKF9fbGliY19zdGFydF9tYWluKTogRGV0ZWN0IDh4eCBwYXJ0cyBhbmQgY2xlYXIKKyAgICAgICAgX19jYWNoZV9saW5lX3NpemUgaWYgZGV0ZWN0ZWQuCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworICAgICAgICAoRExfUExBVEZPUk1fQVVYVik6IExpa2V3aXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jICB8IDE0ICsrKysrKysrKysrKystCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMgfCAxNSArKysrKysrKysrKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworaW5kZXggYzI1MDRmZi4uZDUwZjFjYiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKK0BAIC0yNCw5ICsyNCwyMSBAQCBpbnQgX19jYWNoZV9saW5lX3NpemUgYXR0cmlidXRlX2hpZGRlbjsKKyAvKiBTY2FuIHRoZSBBdXggVmVjdG9yIGZvciB0aGUgIkRhdGEgQ2FjaGUgQmxvY2sgU2l6ZSIgZW50cnkuICBJZiBmb3VuZAorICAgIHZlcmlmeSB0aGF0IHRoZSBzdGF0aWMgZXh0ZXJuIF9fY2FjaGVfbGluZV9zaXplIGlzIGRlZmluZWQgYnkgY2hlY2tpbmcKKyAgICBmb3Igbm90IE5VTEwuICBJZiBpdCBpcyBkZWZpbmVkIHRoZW4gYXNzaWduIHRoZSBjYWNoZSBibG9jayBzaXplCistICAgdmFsdWUgdG8gX19jYWNoZV9saW5lX3NpemUuICAqLworKyAgIHZhbHVlIHRvIF9fY2FjaGVfbGluZV9zaXplLiAgVGhpcyBpcyB1c2VkIGJ5IG1lbXNldCB0bworKyAgIG9wdGltaXplIHNldHRpbmcgdG8gemVyby4gIFdlIGhhdmUgdG8gZGV0ZWN0IDh4eCBwcm9jZXNzb3JzLCB3aGljaAorKyAgIGhhdmUgYnVnZ3kgZGNieiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW5ub3QgcmVwb3J0IHBhZ2UgZmF1bHRzCisrICAgY29ycmVjdGx5LiAgVGhhdCByZXF1aXJlcyByZWFkaW5nIFNQUiwgd2hpY2ggaXMgYSBwcml2aWxlZ2VkCisrICAgb3BlcmF0aW9uLiAgRm9ydHVuYXRlbHkgMi4yLjE4IGFuZCBsYXRlciBlbXVsYXRlcyBQb3dlclBDIG1mc3ByCisrICAgcmVhZHMgZnJvbSB0aGUgUFZSIHJlZ2lzdGVyLiAgICovCisgI2RlZmluZSBETF9QTEFURk9STV9BVVhWCQkJCQkJICAgICAgXAorICAgICAgIGNhc2UgQVRfRENBQ0hFQlNJWkU6CQkJCQkJICAgICAgXAorKwlpZiAoX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDIxOCkJCQkJICAgICAgXAorKwkgIHsJCQkJCQkJCSAgICAgIFwKKysJICAgIHVuc2lnbmVkIHB2ciA9IDA7CQkJCQkJICAgICAgXAorKwkgICAgYXNtICgibWZzcHIgJTAsIDI4NyIgOiAiPXIiIChwdnIpKTsJCQkJICAgICAgXAorKwkgICAgaWYgKChwdnIgJiAweGZmZmYwMDAwKSA9PSAweDAwNTAwMDAwKQkJCSAgICAgIFwKKysJICAgICAgYnJlYWs7CQkJCQkJCSAgICAgIFwKKysJICB9CQkJCQkJCQkgICAgICBcCisgCV9fY2FjaGVfbGluZV9zaXplID0gYXYtPmFfdW4uYV92YWw7CQkJCSAgICAgIFwKKyAJYnJlYWs7CisgCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworaW5kZXggYTkzNjRjNy4uYTNlZDFkNCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworQEAgLTY4LDExICs2OCwyNCBAQCBfX2xpYmNfc3RhcnRfbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorICAgICAgIHJ0bGRfZmluaSA9IE5VTEw7CisgICAgIH0KKyAKKy0gIC8qIEluaXRpYWxpemUgdGhlIF9fY2FjaGVfbGluZV9zaXplIHZhcmlhYmxlIGZyb20gdGhlIGF1eCB2ZWN0b3IuICAqLworKyAgLyogSW5pdGlhbGl6ZSB0aGUgX19jYWNoZV9saW5lX3NpemUgdmFyaWFibGUgZnJvbSB0aGUgYXV4IHZlY3Rvci4KKysgICAgIFRoaXMgaXMgdXNlZCBieSBtZW1zZXQgdG8gb3B0aW1pemUgc2V0dGluZyB0byB6ZXJvLiAgV2UgaGF2ZSB0bworKyAgICAgZGV0ZWN0IDh4eCBwcm9jZXNzb3JzLCB3aGljaCBoYXZlIGJ1Z2d5IGRjYnogaW1wbGVtZW50YXRpb25zIHRoYXQKKysgICAgIGNhbm5vdCByZXBvcnQgcGFnZSBmYXVsdHMgY29ycmVjdGx5LiAgVGhhdCByZXF1aXJlcyByZWFkaW5nIFNQUiwKKysgICAgIHdoaWNoIGlzIGEgcHJpdmlsZWdlZCBvcGVyYXRpb24uICBGb3J0dW5hdGVseSAyLjIuMTggYW5kIGxhdGVyCisrICAgICBlbXVsYXRlcyBQb3dlclBDIG1mc3ByIHJlYWRzIGZyb20gdGhlIFBWUiByZWdpc3Rlci4gICovCisgICBmb3IgKEVsZlcgKGF1eHZfdCkgKiBhdiA9IGF1eHZlYzsgYXYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK2F2KQorICAgICBzd2l0Y2ggKGF2LT5hX3R5cGUpCisgICAgICAgeworICAgICAgIGNhc2UgQVRfRENBQ0hFQlNJWkU6CisrCWlmIChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwMjE4KQorKwkgIHsKKysJICAgIHVuc2lnbmVkIHB2ciA9IDA7CisrCisrCSAgICBhc20gKCJtZnNwciAlMCwgMjg3IiA6ICI9ciIgKHB2cikgOik7CisrCSAgICBpZiAoKHB2ciAmIDB4ZmZmZjAwMDApID09IDB4MDA1MDAwMDApCisrCSAgICAgIGJyZWFrOworKwkgIH0KKyAJX19jYWNoZV9saW5lX3NpemUgPSBhdi0+YV91bi5hX3ZhbDsKKyAJYnJlYWs7CisgICAgICAgfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmM2Q3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDcxOGU3ZTVkYjFjOGIwNzNhZGI5YTc5ZWM2ZjE2NzIzOGMyZDhiZGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo1NTo1MyArMDAwMAorU3ViamVjdDogW1BBVENIIDIzLzI3XSBlZ2xpYmM6IFJlc29sdmUgX19mcHNjcl92YWx1ZXMgb24gU0g0CisKKzIwMTAtMDktMjkgIE5vYnVoaXJvIEl3YW1hdHN1ICA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgICAgICAgICAgICBBbmRyZXcgU3R1YmJzICA8YW1zQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgUmVzb2x2ZSBTSCdzIF9fZnBzY3JfdmFsdWVzIHRvIHN5bWJvbCBpbiBsaWJjLnNvLgorCisgICAgICAgICogc3lzZGVwcy9zaC9zaDQvZnB1L2ZwdV9jb250cm9sLmg6IEFkZCBDKysgX19zZXRfZnBzY3IgcHJvdG90eXBlLgorICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIChHTElCQ18yLjIpOiBBZGQgX19mcHNjcl92YWx1ZXMuCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgKF9fX2Zwc2NyX3ZhbHVlcyk6IE5ldyBjb25zdGFudC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucyB8ICAxICsKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyB8IDExICsrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zCitpbmRleCBlMDkzOGM0Li5jYTFkN2RhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zCitAQCAtMiw2ICsyLDcgQEAgbGliYyB7CisgICBHTElCQ18yLjIgeworICAgICAjIGZ1bmN0aW9ucyB1c2VkIGluIG90aGVyIGxpYnJhcmllcworICAgICBfX3hzdGF0NjQ7IF9fZnhzdGF0NjQ7IF9fbHhzdGF0NjQ7CisrICAgIF9fZnBzY3JfdmFsdWVzOworIAorICAgICAjIGEqCisgICAgIGFscGhhc29ydDY0OworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKK2luZGV4IGEwMmI3ZTIuLmI5YmUzMjYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKK0BAIC0zMCwzICszMCwxNCBAQCBFTlRSWSAoX19zeXNjYWxsX2Vycm9yKQorIAorICNkZWZpbmUgX19zeXNjYWxsX2Vycm9yIF9fc3lzY2FsbF9lcnJvcl8xCisgI2luY2x1ZGUgPHN5c2RlcHMvdW5peC9zaC9zeXNkZXAuUz4KKysKKysgICAgICAgLmRhdGEKKysgICAgICAgLmFsaWduIDMKKysgICAgICAgLmdsb2JsIF9fX2Zwc2NyX3ZhbHVlcworKyAgICAgICAudHlwZSBfX19mcHNjcl92YWx1ZXMsIEBvYmplY3QKKysgICAgICAgLnNpemUgX19fZnBzY3JfdmFsdWVzLCA4CisrX19fZnBzY3JfdmFsdWVzOgorKyAgICAgICAubG9uZyAwCisrICAgICAgIC5sb25nIDB4ODAwMDAKKyt3ZWFrX2FsaWFzIChfX19mcHNjcl92YWx1ZXMsIF9fZnBzY3JfdmFsdWVzKQorKworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxNGUyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE2ODQyIEBACitGcm9tIDJhNWQ3YmNmMGZmNzkxYzk1ZWUxMzg4NzcyNDA4YTFiZjQ0NTQ2OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTozMzo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDI0LzI3XSBlZ2xpYmM6IEZvcndhcmQgcG9ydCBlZ2xpYmMgb3B0aW9ucyBncm91cHMgc3VwcG9ydAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2Vjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKy0KKyBNYWtlcnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsKKyBhcmdwL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBhcmdwL2FyZ3AtZm10c3RyZWFtLmMgICAgICAgICAgICAgICAgICAgfCAgIDI1ICstCisgYXJncC9hcmdwLWhlbHAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArLQorIGFyZ3AvYXJncC1uYW1lZnJvYi5oICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGNhdGdldHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KKyBjcnlwdC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCisgY3J5cHQvY3J5cHQtZW50cnkuYyAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCisgY3J5cHQvY3J5cHRfY29tbW9uLmMgICAgICAgICAgICAgICAgICAgIHwgICA0MiArCisgY3J5cHQvY3J5cHRfdXRpbC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCAtCisgY3N1L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgZGVidWcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MSArLQorIGRlYnVnL3NlZ2ZhdWx0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KKyBkZWJ1Zy90c3QtY2hrMS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyBkbGZjbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCisgZWxmL2RsLXN1cHBvcnQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgZWxmL3J0bGQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQorIGV4dHJhLWxpYi5tayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBncnAvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBoZXNpb2QvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgaWNvbnYvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgaWNvbnYvZ2NvbnZfZGIuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgaWNvbnYvZ2NvbnZfdHJhbnMuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgaWNvbnYvaWNvbnZfcHJvZy5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArCisgaWNvbnZkYXRhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgIHwgICAyNyArLQorIGluY2x1ZGUvbmV0ZGIuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKworIGluZXQvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjIgKy0KKyBpbnRsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCisgaW50bC9kY2lnZXR0ZXh0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArLQorIGlvL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyBsaWJpZG4vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCisgbGliaWRuL3RvdXRmOC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQorIGxpYmlvL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjYgKy0KKyBsaWJpby9fX2ZwdXJnZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliaW8vZmlsZW9wcy5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQorIGxpYmlvL2lvZndpZGUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYgKworIGxpYmlvL2lvc2Vla29mZi5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJpby9pb3NlZWtwb3MuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliaW8vaW9zZXRidWZmZXIuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCisgbGliaW8vbGliaW9QLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIGxpYmlvL3dkdW1teWZpbGVvcHMuYyAgICAgICAgICAgICAgICAgICB8ICAxNjEgKworIGxvY2FsZS9DLWN0eXBlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKworIGxvY2FsZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKy0KKyBsb2NhbGUvY2F0bmFtZXMuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ4ICsKKyBsb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMgICAgICAgICAgICAgICAgfCAgIDMzICsKKyBsb2NhbGUvbG9jYWxlaW5mby5oICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMgICAgICAgICAgIHwgICAgNiArCisgbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYyAgICAgICAgICAgIHwgICAxNyArLQorIGxvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jICAgICAgICAgICAgICB8ICAgMjcgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYyAgICAgICAgICAgfCAgICA1ICsKKyBsb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jICAgICAgICAgICAgICAgfCAgIDMxICstCisgbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYyAgICAgICAgICAgIHwgICAgMiArLQorIGxvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYyAgICAgICAgICAgICB8ICAgIDggKworIGxvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oICAgICAgICAgICAgICAgfCAgIDU5ICstCisgbG9jYWxlL3NldGxvY2FsZS5jICAgICAgICAgICAgICAgICAgICAgIHwgICAzMCAtCisgbG9jYWxlL3hsb2NhbGUuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNyArCisgbG9jYWxlZGF0YS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAzNSArLQorIGxvZ2luL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KKyBtYWxsb2MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCisgbWFsbG9jL21lbXVzYWdlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQorIG1hbGxvYy9tZW11c2FnZS5zaCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBtYXRoL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgbWlzYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArLQorIG1pc2MvZXJyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKworIG1pc2MvZXJyb3IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIG1pc2MvdHN0LWVmZ2N2dC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBuaXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMxICstCisgbnB0bC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOCArLQorIG5wdGwvcHRocmVhZF9jcmVhdGUuYyAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIG5zY2QvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMgKy0KKyBuc2NkL25pc19oYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBuc3MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY3ICstCisgbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYgICAgICAgICAgICAgICAgIHwgICAyMiArCisgbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucyAgICAgICAgICAgIHwgIDEyMSArCisgbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jICAgICAgICAgICAgICAgIHwgIDgwMyArKysKKyBuc3MvZ2V0ZW50LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ2ICstCisgbnNzL2dldG5zc2VudF9yLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArLQorIG5zcy9uc3N3aXRjaC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDkgKy0KKyBuc3MvbnNzd2l0Y2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgcG9zaXgvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5NCArLQorIHBvc2l4L2J1Zy1yZWdleDEuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHBvc2l4L2J1Zy1yZWdleDYuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKy0KKyBwb3NpeC9mbm1hdGNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgcG9zaXgvZm5tYXRjaF9sb29wLmMgICAgICAgICAgICAgICAgICAgIHwgICAyMyArLQorIHBvc2l4L2dsb2IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKy0KKyBwb3NpeC9yZWdjb21wLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk4ICstCisgcG9zaXgvcmVnZXguaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCisgcG9zaXgvcmVnZXhfaW50ZXJuYWwuYyAgICAgICAgICAgICAgICAgIHwgICA0NSArLQorIHBvc2l4L3JlZ2V4X2ludGVybmFsLmggICAgICAgICAgICAgICAgICB8ICAgMjMgKy0KKyBwb3NpeC9yZWdleGVjLWNvbXBhdC5jICAgICAgICAgICAgICAgICAgfCAgIDM5ICsKKyBwb3NpeC9yZWdleGVjLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcxICstCisgcG9zaXgveHJlZ2V4LmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODIxNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgcHdkL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgcmVzb2x2L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArLQorIHN0ZGlvLWNvbW1vbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMzUgKy0KKyBzdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmggICAgICAgICAgICAgfCAgIDEzICsKKyBzdGRpby1jb21tb24vZnhwcmludGYuYyAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdGRpby1jb21tb24vcHJpbnRmX2ZwLmMgICAgICAgICAgICAgICAgfCAgIDIyICsKKyBzdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMgICAgICAgICAgICAgfCAgIDEzICsKKyBzdGRpby1jb21tb24vcHJpbnRmX3NpemUuYyAgICAgICAgICAgICAgfCAgICA4ICsKKyBzdGRpby1jb21tb24vc2NhbmYxNC5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdGRpby1jb21tb24vdHN0LXBvcGVuLmMgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdGRpby1jb21tb24vdHN0LXNwcmludGYuYyAgICAgICAgICAgICAgfCAgICA0ICstCisgc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYyAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMgICAgICAgICAgICAgICAgIHwgICAzMSArLQorIHN0ZGlvLWNvbW1vbi92ZnNjYW5mLmMgICAgICAgICAgICAgICAgICB8ICAgNTMgKy0KKyBzdGRsaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM0ICstCisgc3RkbGliL3N0cnRvZF9sLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCisgc3RkbGliL3RzdC1zdHJ0b2QuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyZWFtcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQorIHN0cmluZy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKy0KKyBzdHJpbmcvc3RyY29sbF9sLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJpbmcvc3RyZXJyb3JfbC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJpbmcvc3RyeGZybV9sLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJpbmcvdGVzdC1zdHJjbXAuYyAgICAgICAgICAgICAgICAgICAgfCAgIDI4IC0KKyBzdHJpbmcvdHN0LXN0cnhmcm0uYyAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdHJpbmcvdHN0LXN0cnhmcm0yLmMgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdW5ycGMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICstCisgc3lzZGVwcy9hcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQorIHN5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oICAgICAgICAgICAgICB8ICAgIDggKworIHN5c2RlcHMvZ251L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KKyBzeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUgICAgICAgfCAgIDI3ICstCisgc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jIHwgICA0MCArLQorIHN5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaCB8ICAgMjQgKy0KKyBzeXNkZXBzL25wdGwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaCAgICAgICAgICAgfCAgIDQ1ICsKKyBzeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmggICAgICAgICAgfCAgIDUwICstCisgc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYyAgICAgICAgIHwgICA3MiArCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMgICAgIHwgICAgNiArCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jICAgIHwgICAgMyArCisgdGltZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIHRpbWUvc3RyZnRpbWVfbC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKy0KKyB0aW1lL3N0cnB0aW1lX2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCisgdGltZXpvbmUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIHdjc21icy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjcgKy0KKyB3Y3NtYnMvd2NzbWJzbG9hZC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyB3Y3R5cGUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCisgMTM5IGZpbGVzIGNoYW5nZWQsIDExMzYzIGluc2VydGlvbnMoKyksIDU4MyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY3J5cHQvY3J5cHRfY29tbW9uLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliaW8vd2R1bW15ZmlsZW9wcy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxvY2FsZS9jYXRuYW1lcy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxvY2FsZS9kdW1teS1zZXRsb2NhbGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc2NkL25pc19oYXNoLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucworIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcG9zaXgvcmVnZXhlYy1jb21wYXQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBwb3NpeC94cmVnZXguYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jCisKK2RpZmYgLS1naXQgYS9NYWtlY29uZmlnIGIvTWFrZWNvbmZpZworaW5kZXggZjEzNmI4OC4uNTJkYWU4ZiAxMDA2NDQKKy0tLSBhL01ha2Vjb25maWcKKysrKyBiL01ha2Vjb25maWcKK0BAIC02MDksNyArNjA5LDcgQEAgZWxmLW9ianBmeCA9ICQoY29tbW9uLW9ianBmeCllbGYvCisgIyBhbmQgcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW0sIGNhdXNlcyB0aGF0IHByb2dyYW0gd2l0aCB0aG9zZQorICMgYXJndW1lbnRzIHRvIGJlIHJ1biBvbiB0aGUgaG9zdCBmb3Igd2hpY2ggdGhlIGxpYnJhcnkgaXMgYnVpbHQuCisgaWZuZGVmIHRlc3Qtd3JhcHBlcgorLXRlc3Qtd3JhcHBlciA9CisrdGVzdC13cmFwcGVyID0gJChjcm9zcy10ZXN0LXdyYXBwZXIpCisgZW5kaWYKKyAjIExpa2V3aXNlLCBidXQgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gaXMgcHJlY2VkZWQgYnkKKyAjIDx2YXJpYWJsZT49PHZhbHVlPiBhc3NpZ25tZW50cyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorQEAgLTEwODksNiArMTA4OSwyNCBAQCBsaWJtID0gJChjb21tb24tb2JqcGZ4KW1hdGgvbGlibS5hCisgbGlibXZlYyA9ICQoY29tbW9uLW9ianBmeCltYXRodmVjL2xpYm12ZWMuYQorIGVuZGlmCisgCisrIyBHZW5lcmF0ZSBhIGhlYWRlciBmaWxlIHRoYXQgI2RlZmluZXMgcHJlcHJvY2Vzc29yIHN5bWJvbHMgaW5kaWNhdGluZworKyMgd2hpY2ggb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZC4gIE5vdGUgdGhhdCB0aGUgb3B0aW9uLWdyb3Vwcy5jb25maWcgZmlsZQorKyMgbWF5IG5vdCBleGlzdCBhdCBhbGwuCisrYmVmb3JlLWNvbXBpbGUgKz0gJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLmgKKytjb21tb24tZ2VuZXJhdGVkICs9IGdudS9vcHRpb24tZ3JvdXBzLmggZ251L29wdGlvbi1ncm91cHMuc3RtcAorK2hlYWRlcnMgKz0gZ251L29wdGlvbi1ncm91cHMuaAorKyQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5oOiAkKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuc3RtcDsgQDoKKyskKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuc3RtcDoJCQkJCVwKKysJCSQoLi4pc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3awkJCQlcCisrCQkkKC4uKW9wdGlvbi1ncm91cHMuZGVmYXVsdHMJCQkJXAorKwkJJCh3aWxkY2FyZCAkKGNvbW1vbi1vYmpwZngpb3B0aW9uLWdyb3Vwcy5jb25maWcpCisrCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorKwlAcm0gLWYgJHtAOnN0bXA9VH0gJEAKKysJTENfQUxMPUMgJChBV0spIC1mICReID4gJHtAOnN0bXA9VH0KKysJJChtb3ZlLWlmLWNoYW5nZSkgJHtAOnN0bXA9VH0gJHtAOnN0bXA9aH0KKysJdG91Y2ggJEAKKysKKysKKyAjIFRoZXNlIGFyZSB0aGUgc3ViZGlyZWN0b3JpZXMgY29udGFpbmluZyB0aGUgbGlicmFyeSBzb3VyY2UuICBUaGUgb3JkZXIKKyAjIGlzIG1vcmUgb3IgbGVzcyBhcmJpdHJhcnkuICBUaGUgc29ydGluZyBzdGVwIHdpbGwgdGFrZSBjYXJlIG9mIHRoZQorICMgZGVwZW5kZW5jaWVzLgorZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcworaW5kZXggZjljYTNmNS4uMWRkNDFhYSAxMDA2NDQKKy0tLSBhL01ha2VydWxlcworKysrIGIvTWFrZXJ1bGVzCitAQCAtNDU2LDYgKzQ1NiwyNSBAQCBkZWZpbmUgc2VkLXJlbW92ZS1vYmpwZngKKyBlbmRlZgorIGVuZGlmCisgDAorKyMgSW5jbHVkZSB0YXJnZXRzIGluIHRoZSBzZWxlY3RlZCBvcHRpb24gZ3JvdXBzLgorK2F1eCAgICAgICAgICAgICAgICAgICs9ICQoYXV4LXkpCisrZXh0cmEtbGlicyAgICAgICAgICAgKz0gJChleHRyYS1saWJzLXkpCisrZXh0cmEtbGlicy1vdGhlcnMgICAgKz0gJChleHRyYS1saWJzLW90aGVycy15KQorK2V4dHJhLW9ianMgICAgICAgICAgICs9ICQoZXh0cmEtb2Jqcy15KQorK2luc3RhbGwtYmluICAgICAgICAgICs9ICQoaW5zdGFsbC1iaW4teSkKKytpbnN0YWxsLW90aGVycyAgICAgICArPSAkKGluc3RhbGwtb3RoZXJzLXkpCisraW5zdGFsbC1zYmluICAgICAgICAgKz0gJChpbnN0YWxsLXNiaW4teSkKKyttb2R1bGVzICAgICAgICAgICAgICArPSAkKG1vZHVsZXMteSkKKytvdGhlcnMgICAgICAgICAgICAgICArPSAkKG90aGVycy15KQorK290aGVycy1waWUgICAgICAgICAgICs9ICQob3RoZXJzLXBpZS15KQorK3JvdXRpbmVzICAgICAgICAgICAgICs9ICQocm91dGluZXMteSkKKytzdGF0aWMtb25seS1yb3V0aW5lcyArPSAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzLXkpCisrc3lzZGVwX3JvdXRpbmVzICAgICAgKz0gJChzeXNkZXBfcm91dGluZXMteSkKKyt0ZXN0LXNyY3MgICAgICAgICAgICArPSAkKHRlc3Qtc3Jjcy15KQorK3Rlc3RzICAgICAgICAgICAgICAgICs9ICQodGVzdHMteSkKKyt4dGVzdHMgICAgICAgICAgICAgICArPSAkKHh0ZXN0cy15KQorKworKwwKKyAjIE1vZGlmeSB0aGUgbGlzdCBvZiByb3V0aW5lcyB3ZSBidWlsZCBmb3IgZGlmZmVyZW50IHRhcmdldHMKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorZGlmZiAtLWdpdCBhL2FyZ3AvTWFrZWZpbGUgYi9hcmdwL01ha2VmaWxlCitpbmRleCAxYTg3NjI5Li5mN2MxZTQwIDEwMDY0NAorLS0tIGEvYXJncC9NYWtlZmlsZQorKysrIGIvYXJncC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgYXJncC4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBhcmdwCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitkaWZmIC0tZ2l0IGEvYXJncC9hcmdwLWZtdHN0cmVhbS5jIGIvYXJncC9hcmdwLWZtdHN0cmVhbS5jCitpbmRleCAyYjg0NWUwLi5jMzQ0ZTdiIDEwMDY0NAorLS0tIGEvYXJncC9hcmdwLWZtdHN0cmVhbS5jCisrKysgYi9hcmdwL2FyZ3AtZm10c3RyZWFtLmMKK0BAIC00Miw2ICs0Miw3IEBACisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDx3Y2hhci5oPgorICMgaW5jbHVkZSA8bGliaW8vbGliaW9QLmg+CisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgZGVmaW5lIF9fdnNucHJpbnRmKHMsIGwsIGYsIGEpIF9JT192c25wcmludGYgKHMsIGwsIGYsIGEpCisgI2VuZGlmCisgCitAQCAtMTAwLDcgKzEwMSwxMSBAQCBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoZnMpOworICAgaWYgKGZzLT5wID4gZnMtPmJ1ZikKKyAgICAgeworKyNpZmRlZiBfTElCQworICAgICAgIF9fZnhwcmludGYgKGZzLT5zdHJlYW0sICIlLipzIiwgKGludCkgKGZzLT5wIC0gZnMtPmJ1ZiksIGZzLT5idWYpOworKyNlbHNlCisrICAgICAgZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBmcy0+cCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyNlbmRpZgorICAgICB9CisgICBmcmVlIChmcy0+YnVmKTsKKyAgIGZyZWUgKGZzKTsKK0BAIC0xNDUsOSArMTUwLDE3IEBAIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorIAkgICAgICBzaXplX3QgaTsKKyAJICAgICAgZm9yIChpID0gMDsgaSA8IHBhZDsgaSsrKQorIAkJeworKyNpZmRlZiBfTElCQworIAkJICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCistCQkgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICAgICAgeworKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgICAgICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorIAkJICBlbHNlCisrI2VuZGlmCisgCQkgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKyAJCX0KKyAJICAgIH0KK0BAIC0zMDgsOSArMzIxLDE3IEBAIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorIAkgICAgICAqbmwrKyA9ICcgJzsKKyAJICBlbHNlCisgCSAgICBmb3IgKGkgPSAwOyBpIDwgZnMtPndtYXJnaW47ICsraSkKKysjaWZkZWYgX0xJQkMKKyAJICAgICAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorLQkJcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICB7CisrI2lmZGVmIE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyNlbHNlCisrICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgIH0KKyAJICAgICAgZWxzZQorKyNlbmRpZgorIAkJcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKyAKKyAJICAvKiBDb3B5IHRoZSB0YWlsIG9mIHRoZSBvcmlnaW5hbCBidWZmZXIgaW50byB0aGUgY3VycmVudCBidWZmZXIKK2RpZmYgLS1naXQgYS9hcmdwL2FyZ3AtaGVscC5jIGIvYXJncC9hcmdwLWhlbHAuYworaW5kZXggYjA1NWU0NS4uNmIzYzRjMSAxMDA2NDQKKy0tLSBhL2FyZ3AvYXJncC1oZWxwLmMKKysrKyBiL2FyZ3AvYXJncC1oZWxwLmMKK0BAIC01MSw2ICs1MSw3IEBAIGNoYXIgKmFsbG9jYSAoKTsKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPC4uL2xpYmlvL2xpYmlvUC5oPgorICMgaW5jbHVkZSA8d2NoYXIuaD4KKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2VuZGlmCisgCisgI2lmbmRlZiBfCitAQCAtMTcwMiw3ICsxNzAzLDcgQEAgY2hhciAqX19hcmdwX2Jhc2VuYW1lIChjaGFyICpuYW1lKQorIH0KKyAKKyBjaGFyICoKKy1fX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICh2b2lkKQorKyhfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lKSAodm9pZCkKKyB7CisgIyBpZiBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUKKyAgIHJldHVybiBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKK0BAIC0xODczLDkgKzE4NzQsMTcgQEAgX19hcmdwX2ZhaWx1cmUgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgaW50IHN0YXR1cywgaW50IGVycm51bSwKKyAjZW5kaWYKKyAJICAgIH0KKyAKKysjaWZkZWYgX0xJQkMKKyAJICBpZiAoX0lPX2Z3aWRlIChzdHJlYW0sIDApID4gMCkKKy0JICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RyZWFtKTsKKysgICAgICAgICAgICB7CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdHJlYW0pOworKyNlbHNlCisrICAgICAgICAgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysgICAgICAgICAgICB9CisgCSAgZWxzZQorKyNlbmRpZgorIAkgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgc3RyZWFtKTsKKyAKKyAjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCitkaWZmIC0tZ2l0IGEvYXJncC9hcmdwLW5hbWVmcm9iLmggYi9hcmdwL2FyZ3AtbmFtZWZyb2IuaAoraW5kZXggZjY3YzU4Zi4uZTIwMDJkYyAxMDA2NDQKKy0tLSBhL2FyZ3AvYXJncC1uYW1lZnJvYi5oCisrKysgYi9hcmdwL2FyZ3AtbmFtZWZyb2IuaAorQEAgLTc2LDEwICs3NiwxMiBAQAorICN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4KKyAjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luCisgCisrI2lmIDAKKyAjaW5jbHVkZSAibWVtcGNweS5oIgorICNpbmNsdWRlICJzdHJjYXNlLmgiCisgI2luY2x1ZGUgInN0cmNocm51bC5oIgorICNpbmNsdWRlICJzdHJuZHVwLmgiCisrI2VuZGlmCisgCisgLyogbm9ybWFsIGxpYmMgZnVuY3Rpb25zIHdlIGNhbGwgKi8KKyAjdW5kZWYgX19mbG9ja2ZpbGUKK2RpZmYgLS1naXQgYS9jYXRnZXRzL01ha2VmaWxlIGIvY2F0Z2V0cy9NYWtlZmlsZQoraW5kZXggNDYyNGE4OC4uMDU3MTRmZCAxMDA2NDQKKy0tLSBhL2NhdGdldHMvTWFrZWZpbGUKKysrKyBiL2NhdGdldHMvTWFrZWZpbGUKK0BAIC0yMiwyMCArMjIsMjMgQEAgc3ViZGlyCTo9IGNhdGdldHMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgaGVhZGVycwkJPSBubF90eXBlcy5oCistcm91dGluZXMJPSBjYXRnZXRzIG9wZW5fY2F0YWxvZworLW90aGVycwkJPSBnZW5jYXQKKy1pbnN0YWxsLWJpbgk9IGdlbmNhdAorLWV4dHJhLW9ianMJPSAkKGdlbmNhdC1tb2R1bGVzOj0ubykKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICAgOj0gY2F0Z2V0cyBvcGVuX2NhdGFsb2cKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgICAgOj0gZ2VuY2F0CisraW5zdGFsbC1iaW4tJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpIDo9IGdlbmNhdAorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICA6PSAkKGdlbmNhdC1tb2R1bGVzOj0ubykKKyAKKy10ZXN0cyA9IHRzdC1jYXRnZXRzCistdGVzdC1zcmNzID0gdGVzdC1nZW5jYXQKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICAgICAgOj0gdHN0LWNhdGdldHMKKyt0ZXN0LXNyY3MtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgOj0gdGVzdC1nZW5jYXQKKyAKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSkKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZGUvbGliYy5jYXQgJChvYmpwZngpdGVzdDEuY2F0ICQob2JqcGZ4KXRlc3QyLmNhdCBcCisgCQkgJChvYmpwZngpc2FtcGxlLlNKSVMuY2F0ICQob2JqcGZ4KXRlc3QtZ2VuY2F0Lm91dAorIGVuZGlmCistCisrZW5kaWYKKyBnZW5jYXQtbW9kdWxlcwk9IHhtYWxsb2MKKyAKKyAjIFRvIGZpbmQgeG1hbGxvYy5jCitkaWZmIC0tZ2l0IGEvY3J5cHQvTWFrZWZpbGUgYi9jcnlwdC9NYWtlZmlsZQoraW5kZXggMzRjNGRkNy4uN2MxOGM4OCAxMDA2NDQKKy0tLSBhL2NyeXB0L01ha2VmaWxlCisrKysgYi9jcnlwdC9NYWtlZmlsZQorQEAgLTE4LDIxICsxOCwyNSBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgY3J5cHQoKSBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGNyeXB0CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycyA6PSBjcnlwdC5oCisgCistZXh0cmEtbGlicyA6PSBsaWJjcnlwdAorLWV4dHJhLWxpYnMtb3RoZXJzIDo9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19DUllQVCkgOj0gbGliY3J5cHQKKytleHRyYS1saWJzLW90aGVycy15IDo9ICQoZXh0cmEtbGlicy15KQorIAorLWxpYmNyeXB0LXJvdXRpbmVzIDo9IGNyeXB0LWVudHJ5IG1kNS1jcnlwdCBzaGEyNTYtY3J5cHQgc2hhNTEyLWNyeXB0IGNyeXB0IFwKKy0JCSAgICAgY3J5cHRfdXRpbAorK2xpYmNyeXB0LXJvdXRpbmVzIDo9Y3J5cHQtZW50cnkgIG1kNS1jcnlwdCBzaGEyNTYtY3J5cHQgc2hhNTEyLWNyeXB0IGNyeXB0X2NvbW1vbgorK2xpYmNyeXB0LXJvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19DUllQVF9VRkMpIDo9IGNyeXB0IGNyeXB0X3V0aWwKKytsaWJjcnlwdC1yb3V0aW5lcyArPSAkKGxpYmNyeXB0LXJvdXRpbmVzLXkpCisgCistdGVzdHMgOj0gY2VydCBtZDVjLXRlc3Qgc2hhMjU2Yy10ZXN0IHNoYTUxMmMtdGVzdCBiYWRzYWx0dGVzdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DUllQVCkgOj0gbWQ1Yy10ZXN0IHNoYTI1NmMtdGVzdCBzaGE1MTJjLXRlc3QgYmFkc2FsdHRlc3QKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1JZUFRfVUZDKSArPSBjZXJ0CisgCistaWZlcSAoJChjcnlwdC1pbi1saWJjKSx5ZXMpCisraWZlcSAoJChjcnlwdC1pbi1saWJjKSQoT1BUSU9OX0VHTElCQ19DUllQVCkseWVzeSkKKyByb3V0aW5lcyArPSAkKGxpYmNyeXB0LXJvdXRpbmVzKQorIGVuZGlmCisgCitAQCAtNDQsNyArNDgsNyBAQCBMRExJQlMtY3J5cHQuc28gPSAtbGZyZWVibDMKKyBlbHNlCisgbGliY3J5cHQtcm91dGluZXMgKz0gbWQ1IHNoYTI1NiBzaGE1MTIKKyAKKy10ZXN0cyArPSBtZDV0ZXN0IHNoYTI1NnRlc3Qgc2hhNTEydGVzdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DUllQVCkgKz0gbWQ1dGVzdCBzaGEyNTZ0ZXN0IHNoYTUxMnRlc3QKKyAKKyAjIFRoZSB0ZXN0IG1kNXRlc3QtZ2lhbnQgdXNlcyB1cCB0byA0MDAgTUIgb2YgUlNTIGFuZCBydW5zIG9uIGEgZmFzdAorICMgbWFjaGluZSBvdmVyIGEgbWludXRlLgorQEAgLTY0LDggKzY4LDEwIEBAICQob2JqcGZ4KXNoYTI1NnRlc3Q6ICQocGF0c3Vic3QgJSwgJChvYmpwZngpJS5vLCQoc2hhMjU2LXJvdXRpbmVzKSkKKyAkKG9ianBmeClzaGE1MTJ0ZXN0OiAkKHBhdHN1YnN0ICUsICQob2JqcGZ4KSUubywkKHNoYTUxMi1yb3V0aW5lcykpCisgZW5kaWYKKyAKKytpZmVxICgkKE9QVElPTl9FR0xJQkNfQ1JZUFQpLHkpCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAkKGFkZHByZWZpeCAkKG9ianBmeCksJCh0ZXN0cykpOiAkKG9ianBmeClsaWJjcnlwdC5zbworIGVsc2UKKyAkKGFkZHByZWZpeCAkKG9ianBmeCksJCh0ZXN0cykpOiAkKG9ianBmeClsaWJjcnlwdC5hCisgZW5kaWYKKytlbmRpZiAjIGVnbGliYzogT1BUSU9OX0VHTElCQ19DUllQVAorZGlmZiAtLWdpdCBhL2NyeXB0L2NyeXB0LWVudHJ5LmMgYi9jcnlwdC9jcnlwdC1lbnRyeS5jCitpbmRleCA3ZTY1NWJhLi42YWU1YzJiIDEwMDY0NAorLS0tIGEvY3J5cHQvY3J5cHQtZW50cnkuYworKysrIGIvY3J5cHQvY3J5cHQtZW50cnkuYworQEAgLTI3LDYgKzI3LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGZpcHMtcHJpdmF0ZS5oPgorIAorQEAgLTc2LDkgKzc3LDExIEBAIF9fY3J5cHRfciAoa2V5LCBzYWx0LCBkYXRhKQorICAgICAgY29uc3QgY2hhciAqc2FsdDsKKyAgICAgIHN0cnVjdCBjcnlwdF9kYXRhICogX19yZXN0cmljdCBkYXRhOworIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQworICAgdWZjX2xvbmcgcmVzWzRdOworICAgY2hhciBrdGFiWzldOworICAgdWZjX2xvbmcgeHggPSAyNTsgLyogdG8gY29wZSB3aXRoIEdDQyBsb25nIGxvbmcgY29tcGlsZXIgYnVncyAqLworKyNlbmRpZiAvKl9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMqLworIAorICNpZmRlZiBfTElCQworICAgLyogVHJ5IHRvIGZpbmQgb3V0IHdoZXRoZXIgd2UgaGF2ZSB0byB1c2UgTUQ1IGVuY3J5cHRpb24gcmVwbGFjZW1lbnQuICAqLworQEAgLTEwNSw2ICsxMDgsNyBAQCBfX2NyeXB0X3IgKGtleSwgc2FsdCwgZGF0YSkKKyAJCQkgICAgIHNpemVvZiAoc3RydWN0IGNyeXB0X2RhdGEpKTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQworICAgLyoKKyAgICAqIEhhY2sgREVTIHRhYmxlcyBhY2NvcmRpbmcgdG8gc2FsdAorICAgICovCitAQCAtMTQ0LDYgKzE0OCwxMCBAQCBfX2NyeXB0X3IgKGtleSwgc2FsdCwgZGF0YSkKKyAgICAqLworICAgX3VmY19vdXRwdXRfY29udmVyc2lvbl9yIChyZXNbMF0sIHJlc1sxXSwgc2FsdCwgZGF0YSk7CisgICByZXR1cm4gZGF0YS0+Y3J5cHRfM19idWY7CisrI2Vsc2UgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworKyAgX19zZXRfZXJybm8gKEVOT1NZUyk7CisrICByZXR1cm4gTlVMTDsKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworIH0KKyB3ZWFrX2FsaWFzIChfX2NyeXB0X3IsIGNyeXB0X3IpCisgCitAQCAtMTY4LDcgKzE3NiwxMiBAQCBjcnlwdCAoa2V5LCBzYWx0KQorICAgICByZXR1cm4gX19zaGE1MTJfY3J5cHQgKGtleSwgc2FsdCk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMKKyAgIHJldHVybiBfX2NyeXB0X3IgKGtleSwgc2FsdCwgJl91ZmNfZm9vYmFyKTsKKysjZWxzZSAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisrICBfX3NldF9lcnJubyAoRU5PU1lTKTsKKysgIHJldHVybiBOVUxMOworKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisgfQorIAorIAorZGlmZiAtLWdpdCBhL2NyeXB0L2NyeXB0X2NvbW1vbi5jIGIvY3J5cHQvY3J5cHRfY29tbW9uLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jY2U2YTMxCistLS0gL2Rldi9udWxsCisrKysgYi9jcnlwdC9jcnlwdF9jb21tb24uYworQEAgLTAsMCArMSw0MiBAQAorKy8qCisrICogY3J5cHQ6IGNyeXB0KDMpIGltcGxlbWVudGF0aW9uCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisrICogc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysgKgorKyAqIEdlbmVyYWwgU3VwcG9ydCByb3V0aW5lcworKyAqCisrICovCisrCisrI2luY2x1ZGUgImNyeXB0LXByaXZhdGUuaCIKKysKKysvKiBUYWJsZSB3aXRoIGNoYXJhY3RlcnMgZm9yIGJhc2U2NCB0cmFuc2Zvcm1hdGlvbi4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgYjY0dFs2NF0gPQorKyIuLzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKysKKyt2b2lkCisrX19iNjRfZnJvbV8yNGJpdCAoY2hhciAqKmNwLCBpbnQgKmJ1ZmxlbiwKKysJCSAgdW5zaWduZWQgaW50IGIyLCB1bnNpZ25lZCBpbnQgYjEsIHVuc2lnbmVkIGludCBiMCwKKysJCSAgaW50IG4pCisreworKyAgdW5zaWduZWQgaW50IHcgPSAoYjIgPDwgMTYpIHwgKGIxIDw8IDgpIHwgYjA7CisrICB3aGlsZSAobi0tID4gMCAmJiAoKmJ1ZmxlbikgPiAwKQorKyAgICB7CisrICAgICAgKigqY3ApKysgPSBiNjR0W3cgJiAweDNmXTsKKysgICAgICAtLSgqYnVmbGVuKTsKKysgICAgICB3ID4+PSA2OworKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL2NyeXB0L2NyeXB0X3V0aWwuYyBiL2NyeXB0L2NyeXB0X3V0aWwuYworaW5kZXggMTU5Nzg4NS4uOTI5Nzk3NCAxMDA2NDQKKy0tLSBhL2NyeXB0L2NyeXB0X3V0aWwuYworKysrIGIvY3J5cHQvY3J5cHRfdXRpbC5jCitAQCAtMjQyLDEwICsyNDIsNiBAQCBzdGF0aWMgdWZjX2xvbmcgZXBlcm0zMnRhYls0XVsyNTZdWzJdOworICAqLworIHN0YXRpYyB1ZmNfbG9uZyBlZnBbMTZdWzY0XVsyXTsKKyAKKy0vKiBUYWJsZSB3aXRoIGNoYXJhY3RlcnMgZm9yIGJhc2U2NCB0cmFuc2Zvcm1hdGlvbi4gICovCistc3RhdGljIGNvbnN0IGNoYXIgYjY0dFs2NF0gPQorLSIuLzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKy0KKyAvKgorICAqIEZvciB1c2UgYnkgdGhlIG9sZCwgbm9uLXJlZW50cmFudCByb3V0aW5lcworICAqIChjcnlwdC9lbmNyeXB0L3NldGtleSkKK0BAIC05NDksMTcgKzk0NSwzIEBAIHNldGtleShfX2tleSkKKyB7CisgICBfX3NldGtleV9yKF9fa2V5LCAmX3VmY19mb29iYXIpOworIH0KKy0KKy12b2lkCistX19iNjRfZnJvbV8yNGJpdCAoY2hhciAqKmNwLCBpbnQgKmJ1ZmxlbiwKKy0JCSAgdW5zaWduZWQgaW50IGIyLCB1bnNpZ25lZCBpbnQgYjEsIHVuc2lnbmVkIGludCBiMCwKKy0JCSAgaW50IG4pCisteworLSAgdW5zaWduZWQgaW50IHcgPSAoYjIgPDwgMTYpIHwgKGIxIDw8IDgpIHwgYjA7CistICB3aGlsZSAobi0tID4gMCAmJiAoKmJ1ZmxlbikgPiAwKQorLSAgICB7CistICAgICAgKigqY3ApKysgPSBiNjR0W3cgJiAweDNmXTsKKy0gICAgICAtLSgqYnVmbGVuKTsKKy0gICAgICB3ID4+PSA2OworLSAgICB9CistfQorZGlmZiAtLWdpdCBhL2NzdS9NYWtlZmlsZSBiL2NzdS9NYWtlZmlsZQoraW5kZXggOWYwODU1YS4uYjFjMzM2MyAxMDA2NDQKKy0tLSBhL2NzdS9NYWtlZmlsZQorKysrIGIvY3N1L01ha2VmaWxlCitAQCAtMjIsNiArMjIsOCBAQAorICMgY3J0bi5vLCBzcGVjaWFsICJpbml0aWFsaXplciIgYW5kICJmaW5hbGl6ZXIiIGZpbGVzIHVzZWQgaW4gdGhlIGxpbmsKKyAjIHRvIG1ha2UgdGhlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrIHJpZ2h0LgorIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIgOj0gY3N1CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitkaWZmIC0tZ2l0IGEvZGVidWcvTWFrZWZpbGUgYi9kZWJ1Zy9NYWtlZmlsZQoraW5kZXggOWZmMzU3Yi4uZDIzZDk3ZCAxMDA2NDQKKy0tLSBhL2RlYnVnL01ha2VmaWxlCisrKysgYi9kZWJ1Zy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGRlYnVnIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gZGVidWcKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNyw3ICsyOSw3IEBAIGhlYWRlcnMJOj0gZXhlY2luZm8uaAorICMgTm90ZSB0aGF0IHB0c25hbWVfcl9jaGsgYW5kIGdldGxvZ2luX3IgYXJlIG5vdCBoZXJlLCBidXQgaW4KKyAjIGxvZ2luL01ha2VmaWxlIGluc3RlYWQuICBJZiB0aGF0IHN1YmRpciBpcyBvbWl0dGVkIGZyb20gdGhlCisgIyBidWlsZCwgaXRzIF9GT1JUSUZZX1NPVVJDRSBzdXBwb3J0IHdpbGwgYmUgdG9vLgorLXJvdXRpbmVzICA9IGJhY2t0cmFjZSBiYWNrdHJhY2VzeW1zIGJhY2t0cmFjZXN5bXNmZCBub29waG9va3MgXAorK3JvdXRpbmVzICA9IG5vb3Bob29rcyBcCisgCSAgICBtZW1jcHlfY2hrIG1lbW1vdmVfY2hrIG1lbXBjcHlfY2hrIG1lbXNldF9jaGsgc3RwY3B5X2NoayBcCisgCSAgICBzdHJjYXRfY2hrIHN0cmNweV9jaGsgc3RybmNhdF9jaGsgc3RybmNweV9jaGsgc3RwbmNweV9jaGsgXAorIAkgICAgc3ByaW50Zl9jaGsgdnNwcmludGZfY2hrIHNucHJpbnRmX2NoayB2c25wcmludGZfY2hrIFwKK0BAIC0zNiwyMCArMzgsMjcgQEAgcm91dGluZXMgID0gYmFja3RyYWNlIGJhY2t0cmFjZXN5bXMgYmFja3RyYWNlc3ltc2ZkIG5vb3Bob29rcyBcCisgCSAgICByZWFkX2NoayBwcmVhZF9jaGsgcHJlYWQ2NF9jaGsgcmVjdl9jaGsgcmVjdmZyb21fY2hrIFwKKyAJICAgIHJlYWRsaW5rX2NoayByZWFkbGlua2F0X2NoayBnZXR3ZF9jaGsgZ2V0Y3dkX2NoayBcCisgCSAgICByZWFscGF0aF9jaGsgZnJlYWRfY2hrIGZyZWFkX3VfY2hrIFwKKy0JICAgIHdjdG9tYl9jaGsgd2NzY3B5X2NoayB3bWVtY3B5X2NoayB3bWVtbW92ZV9jaGsgd21lbXBjcHlfY2hrIFwKKy0JICAgIHdjcGNweV9jaGsgd2NzbmNweV9jaGsgd2NzY2F0X2NoayB3Y3NuY2F0X2NoayB3bWVtc2V0X2NoayBcCistCSAgICB3Y3BuY3B5X2NoayBcCistCSAgICBzd3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoayB3cHJpbnRmX2NoayBmd3ByaW50Zl9jaGsgXAorLQkgICAgdndwcmludGZfY2hrIHZmd3ByaW50Zl9jaGsgZmdldHdzX2NoayBmZ2V0d3NfdV9jaGsgXAorIAkgICAgY29uZnN0cl9jaGsgZ2V0Z3JvdXBzX2NoayB0dHluYW1lX3JfY2hrIFwKKy0JICAgIGdldGhvc3RuYW1lX2NoayBnZXRkb21haW5uYW1lX2NoayB3Y3J0b21iX2NoayBtYnNucnRvd2NzX2NoayBcCistCSAgICB3Y3NucnRvbWJzX2NoayBtYnNydG93Y3NfY2hrIHdjc3J0b21ic19jaGsgbWJzdG93Y3NfY2hrIFwKKy0JICAgIHdjc3RvbWJzX2NoayBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisrCSAgICBnZXRob3N0bmFtZV9jaGsgZ2V0ZG9tYWlubmFtZV9jaGsgXAorKwkgICAgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorIAkgICAgdmRwcmludGZfY2hrIG9icHJpbnRmX2NoayBcCisgCSAgICBsb25nam1wX2NoayBfX19fbG9uZ2ptcF9jaGsgXAorIAkgICAgZmRlbHRfY2hrIHBvbGxfY2hrIHBwb2xsX2NoayBcCisgCSAgICBzdGFja19jaGtfZmFpbCBmb3J0aWZ5X2ZhaWwgXAorIAkgICAgJChzdGF0aWMtb25seS1yb3V0aW5lcykKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQkFDS1RSQUNFKSArPSBiYWNrdHJhY2UgYmFja3RyYWNlc3ltcyBiYWNrdHJhY2VzeW1zZmQKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKQkJCVwKKysJICs9IHdwcmludGZfY2hrIGZ3cHJpbnRmX2NoawkJCQlcCisrCSAgICB2d3ByaW50Zl9jaGsgdmZ3cHJpbnRmX2NoayBmZ2V0d3NfY2hrIGZnZXR3c191X2NoaworK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpCQkJCVwKKysJICs9IHdjdG9tYl9jaGsgd2NzY3B5X2NoayB3bWVtY3B5X2NoayB3bWVtbW92ZV9jaGsgd21lbXBjcHlfY2hrCVwKKysJICAgIHdjcGNweV9jaGsgd2NzbmNweV9jaGsgd2NzY2F0X2NoayB3Y3NuY2F0X2NoayB3bWVtc2V0X2NoawlcCisrCSAgICB3Y3BuY3B5X2NoawkJCQkJCQlcCisrCSAgICBzd3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoawkJCQkJXAorKwkgICAgd2NydG9tYl9jaGsgbWJzbnJ0b3djc19jaGsJCQkJCVwKKysJICAgIHdjc25ydG9tYnNfY2hrIG1ic3J0b3djc19jaGsgd2NzcnRvbWJzX2NoayBtYnN0b3djc19jaGsJXAorKwkgICAgd2NzdG9tYnNfY2hrCisrCisgc3RhdGljLW9ubHktcm91dGluZXMgOj0gd2FybmluZy1ub3Agc3RhY2tfY2hrX2ZhaWxfbG9jYWwKKyAKKyBDRkxBR1MtYmFja3RyYWNlLmMgPSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgorQEAgLTEzMSwxMSArMTQwLDE1IEBAIExERkxBR1MtdHN0LWJhY2t0cmFjZTQgPSAtcmR5bmFtaWMKKyBMREZMQUdTLXRzdC1iYWNrdHJhY2U1ID0gLXJkeW5hbWljCisgTERGTEFHUy10c3QtYmFja3RyYWNlNiA9IC1yZHluYW1pYworIAorLXRlc3RzID0gYmFja3RyYWNlLXRzdCB0c3QtbG9uZ2ptcF9jaGsgdHN0LWNoazEgdHN0LWNoazIgdHN0LWNoazMgXAorLQl0c3QtbGZzY2hrMSB0c3QtbGZzY2hrMiB0c3QtbGZzY2hrMyB0ZXN0LXN0cmNweV9jaGsgdGVzdC1zdHBjcHlfY2hrIFwKKy0JdHN0LWNoazQgdHN0LWNoazUgdHN0LWNoazYgdHN0LWxmc2NoazQgdHN0LWxmc2NoazUgdHN0LWxmc2NoazYgXAorLQl0c3QtbG9uZ2ptcF9jaGsyIHRzdC1iYWNrdHJhY2UyIHRzdC1iYWNrdHJhY2UzIHRzdC1iYWNrdHJhY2U0IFwKKy0JdHN0LWJhY2t0cmFjZTUgdHN0LWJhY2t0cmFjZTYKKyt0ZXN0cyA9IHRzdC1sb25nam1wX2NoayB0ZXN0LXN0cmNweV9jaGsgdGVzdC1zdHBjcHlfY2hrIHRzdC1sb25nam1wX2NoazIKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysgICAgICArPSB0c3QtY2hrMSB0c3QtY2hrMiB0c3QtY2hrMyB0c3QtbGZzY2hrMSB0c3QtbGZzY2hrMiB0c3QtbGZzY2hrMworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UpIFwKKysgICAgICArPSBiYWNrdHJhY2UtdHN0IHRzdC1iYWNrdHJhY2UyIHRzdC1iYWNrdHJhY2UzIHRzdC1iYWNrdHJhY2U0IFwKKysgICAgICAgICB0c3QtYmFja3RyYWNlNSB0c3QtYmFja3RyYWNlNgorK2lmZXEgKHl5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyt0ZXN0cyArPSB0c3QtY2hrNCB0c3QtY2hrNSB0c3QtY2hrNiB0c3QtbGZzY2hrNCB0c3QtbGZzY2hrNSB0c3QtbGZzY2hrNgorK2VuZGlmCisgCisgaWZlcSAoLCQoQ1hYKSkKKyB0ZXN0cy11bnN1cHBvcnRlZCA9IHRzdC1jaGs0IHRzdC1jaGs1IHRzdC1jaGs2IFwKK2RpZmYgLS1naXQgYS9kZWJ1Zy9zZWdmYXVsdC5jIGIvZGVidWcvc2VnZmF1bHQuYworaW5kZXggMzQ1OWEyYS4uZWU5YTE0NiAxMDA2NDQKKy0tLSBhL2RlYnVnL3NlZ2ZhdWx0LmMKKysrKyBiL2RlYnVnL3NlZ2ZhdWx0LmMKK0BAIC0zMCw2ICszMCw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxfaXRvYS5oPgorICNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIFRoaXMgZmlsZSBkZWZpbmVzIG1hY3JvcyB0byBhY2Nlc3MgdGhlIGNvbnRlbnQgb2YgdGhlIHNpZ2NvbnRleHQgZWxlbWVudAorICAgIHBhc3NlZCB1cCBieSB0aGUgc2lnbmFsIGhhbmRsZXIuICAqLworQEAgLTY4LDExICs2OSwxMyBAQCB3cml0ZV9zdHJzaWduYWwgKGludCBmZCwgaW50IHNpZ25hbCkKKyBzdGF0aWMgdm9pZAorIGNhdGNoX3NlZ2ZhdWx0IChpbnQgc2lnbmFsLCBTSUdDT05URVhUIGN0eCkKKyB7CistICBpbnQgZmQsIGNudCwgaTsKKy0gIHZvaWQgKiphcnI7CisrICBpbnQgZmQ7CisgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworKyNpZiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFCisrICBpbnQgY250LCBpOworKyAgdm9pZCAqKmFycjsKKyAgIHVpbnRwdHJfdCBwYzsKKy0KKysjZW5kaWYKKyAgIC8qIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2UgYXJlIHdyaXRpbmcgdG8uICBJZiBub25lIGlzIGdpdmVuCisgICAgICBvciB3ZSBjYW5ub3Qgd3JpdGUgdG8gdGhpcyBmaWxlIHdyaXRlIHRvIHN0ZGVyci4gICovCisgICBmZCA9IDI7CitAQCAtOTEsNiArOTQsNyBAQCBjYXRjaF9zZWdmYXVsdCAoaW50IHNpZ25hbCwgU0lHQ09OVEVYVCBjdHgpCisgICBSRUdJU1RFUl9EVU1QOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFCisgICBXUklURV9TVFJJTkcgKCJcbkJhY2t0cmFjZTpcbiIpOworIAorICAgLyogR2V0IHRoZSBiYWNrdHJhY2UuICAqLworQEAgLTExMyw2ICsxMTcsNyBAQCBjYXRjaF9zZWdmYXVsdCAoaW50IHNpZ25hbCwgU0lHQ09OVEVYVCBjdHgpCisgCisgICAvKiBOb3cgZ2VuZXJhdGUgbmljZWx5IGZvcm1hdHRlZCBvdXRwdXQuICAqLworICAgX19iYWNrdHJhY2Vfc3ltYm9sc19mZCAoYXJyICsgaSwgY250IC0gaSwgZmQpOworKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX1BST0NfU0VMRgorICAgLyogTm93IHRoZSBsaW5rIG1hcC4gICovCitkaWZmIC0tZ2l0IGEvZGVidWcvdHN0LWNoazEuYyBiL2RlYnVnL3RzdC1jaGsxLmMKK2luZGV4IDUzNTU5ZTYuLjM2MmQ5MmEgMTAwNjQ0CistLS0gYS9kZWJ1Zy90c3QtY2hrMS5jCisrKysgYi9kZWJ1Zy90c3QtY2hrMS5jCitAQCAtMzEsNiArMzEsNyBAQAorICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8c3lzL3VuLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgI2RlZmluZSBvYnN0YWNrX2NodW5rX2FsbG9jIG1hbGxvYworQEAgLTMwNyw2ICszMDgsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgc25wcmludGYgKGJ1ZiArIDgsIGwwICsgMywgIiVkIiwgbnVtMik7CisgICBDSEtfRkFJTF9FTkQKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgQ0hLX0ZBSUxfU1RBUlQKKyAgIHN3cHJpbnRmICh3YnVmICsgOCwgMywgTCIlZCIsIG51bTEpOworICAgQ0hLX0ZBSUxfRU5ECitAQCAtMzE0LDYgKzMxNiw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBDSEtfRkFJTF9TVEFSVAorICAgc3dwcmludGYgKHdidWYgKyA4LCBsMCArIDMsIEwiJWQiLCBudW0xKTsKKyAgIENIS19GQUlMX0VORAorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgIyBlbmRpZgorIAorICAgbWVtY3B5IChidWYsIHN0cjEgKyAyLCBsMCArIDkpOworQEAgLTM4MSw2ICszODQsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgQ0hLX0ZBSUxfRU5ECisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAKKyAgIC8qIFRoZXNlIG9wcyBjYW4gYmUgZG9uZSB3aXRob3V0IHJ1bnRpbWUgY2hlY2tpbmcgb2Ygb2JqZWN0IHNpemUuICAqLworICAgd21lbWNweSAod2J1ZiwgTCJhYmNkZWZnaGlqIiwgMTApOworQEAgLTYwNSw2ICs2MDksNyBAQCBkb190ZXN0ICh2b2lkKQorICAgQ0hLX0ZBSUxfRU5ECisgI2VuZGlmCisgCisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIC8qIE5vdyBjaGVja3MgZm9yICVuIHByb3RlY3Rpb24uICAqLworIAorQEAgLTExOTIsNiArMTE5Nyw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgIyBlbmRpZgorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJkZV9ERS5VVEYtOCIpICE9IE5VTEwpCisgICAgIHsKKyAgICAgICBhc3NlcnQgKE1CX0NVUl9NQVggPD0gMTApOworQEAgLTEzNDgsNiArMTM1NCw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICAgICAgcHV0cyAoImNhbm5vdCBzZXQgbG9jYWxlIik7CisgICAgICAgcmV0ID0gMTsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICBpbnQgZmQgPSBwb3NpeF9vcGVucHQgKE9fUkRXUik7CisgICBpZiAoZmQgIT0gLTEpCitkaWZmIC0tZ2l0IGEvZGxmY24vTWFrZWZpbGUgYi9kbGZjbi9NYWtlZmlsZQoraW5kZXggNzU5NzgwZC4uMzgyNzYwNyAxMDA2NDQKKy0tLSBhL2RsZmNuL01ha2VmaWxlCisrKysgYi9kbGZjbi9NYWtlZmlsZQorQEAgLTE1LDYgKzE1LDggQEAKKyAjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCQk6PSBkbGZjbgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM2LDggKzM4LDExIEBAIGVuZGlmCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0cyA9IGdscmVmbWFpbiBmYWlsdGVzdCB0c3QtZGxhZGRyIGRlZmF1bHQgZXJybXNnMSB0c3RjeGFhdGV4aXQgXAorIAlidWctZGxvcGVuMSBidWctZGxzeW0xIHRzdC1kbGluZm8gYnVnLWF0ZXhpdDEgYnVnLWF0ZXhpdDIgXAorLQlidWctYXRleGl0MyB0c3RhdGV4aXQgYnVnLWRsLWxlYWYgdHN0LXJlYy1kbG9wZW4KKysJdHN0YXRleGl0IGJ1Zy1kbC1sZWFmIHRzdC1yZWMtZGxvcGVuCisgZW5kaWYKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSBidWctYXRleGl0MworKworIG1vZHVsZXMtbmFtZXMgPSBnbHJlZmxpYjEgZ2xyZWZsaWIyIGdscmVmbGliMyBmYWlsdGVzdG1vZCBkZWZhdWx0bW9kMSBcCisgCQlkZWZhdWx0bW9kMiBlcnJtc2cxbW9kIG1vZGF0ZXhpdCBtb2RjeGFhdGV4aXQgXAorIAkJYnVnLWRsc3ltMS1saWIxIGJ1Zy1kbHN5bTEtbGliMiBidWctYXRleGl0MS1saWIgXAorZGlmZiAtLWdpdCBhL2VsZi9kbC1zdXBwb3J0LmMgYi9lbGYvZGwtc3VwcG9ydC5jCitpbmRleCA0ZDAzNmYxLi5jMTVmNDA1IDEwMDY0NAorLS0tIGEvZWxmL2RsLXN1cHBvcnQuYworKysrIGIvZWxmL2RsLXN1cHBvcnQuYworQEAgLTE5LDYgKzE5LDcgQEAKKyAvKiBUaGlzIGZpbGUgZGVmaW5lcyBzb21lIHRoaW5ncyB0aGF0IGZvciB0aGUgZHluYW1pYyBsaW5rZXIgYXJlIGRlZmluZWQgaW4KKyAgICBydGxkLmMgYW5kIGRsLXN5c2RlcC5jIGluIHdheXMgYXBwcm9wcmlhdGUgdG8gYm9vdHN0cmFwIGR5bmFtaWMgbGlua2luZy4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitAQCAtNDIsNyArNDMsOSBAQCBjaGFyICoqX2RsX2FyZ3YgPSAmX19wcm9nbmFtZTsJLyogVGhpcyBpcyBjaGVja2VkIGZvciBzb21lIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyBjb25zdCBjaGFyICpfZGxfcGxhdGZvcm07Cisgc2l6ZV90IF9kbF9wbGF0Zm9ybWxlbjsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyBpbnQgX2RsX2RlYnVnX21hc2s7CisrI2VuZGlmCisgaW50IF9kbF9sYXp5OworIEVsZlcoQWRkcikgX2RsX3VzZV9sb2FkX2JpYXMgPSAtMjsKKyBpbnQgX2RsX2R5bmFtaWNfd2VhazsKK2RpZmYgLS1naXQgYS9lbGYvcnRsZC5jIGIvZWxmL3J0bGQuYworaW5kZXggNmQzYWRkNy4uZmMzYTJkYiAxMDA2NDQKKy0tLSBhL2VsZi9ydGxkLmMKKysrKyBiL2VsZi9ydGxkLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGRsZmNuLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CitAQCAtMjIwMSw2ICsyMjAyLDcgQEAgcHJpbnRfbWlzc2luZ192ZXJzaW9uIChpbnQgZXJyY29kZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCQkgICAgb2JqbmFtZSwgZXJyc3RyaW5nKTsKKyB9CisgDAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIC8qIE5vbnplcm8gaWYgYW55IG9mIHRoZSBkZWJ1Z2dpbmcgb3B0aW9ucyBpcyBlbmFibGVkLiAgKi8KKyBzdGF0aWMgaW50IGFueV9kZWJ1ZyBhdHRyaWJ1dGVfcmVscm87CisgCitAQCAtMjMxMCw2ICsyMzEyLDcgQEAgYSBmaWxlbmFtZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBMRF9ERUJVR19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4iKTsKKyAgICAgICBfZXhpdCAoMCk7CisgICAgIH0KKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHICovCisgDAorIHN0YXRpYyB2b2lkCisgcHJvY2Vzc19kbF9hdWRpdCAoY2hhciAqc3RyKQorQEAgLTIzNDksOCArMjM1Miw5IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAgIGNoYXIgKipydW5wID0gX2Vudmlyb247CisgICBjaGFyICplbnZsaW5lOworICAgZW51bSBtb2RlIG1vZGUgPSBub3JtYWw7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgICBjaGFyICpkZWJ1Z19vdXRwdXQgPSBOVUxMOworLQorKyNlbmRpZgorICAgLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBwbGFjZSBmb3IgcHJvZmlsaW5nIGRhdGEgZmlsZS4gICovCisgICBHTFJPKGRsX3Byb2ZpbGVfb3V0cHV0KQorICAgICA9ICYiL3Zhci90bXBcMC92YXIvcHJvZmlsZSJbX19saWJjX2VuYWJsZV9zZWN1cmUgPyA5IDogMF07CitAQCAtMjM3NywxMiArMjM4MSwxNCBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgYnJlYWs7CisgCisgCWNhc2UgNToKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICAvKiBEZWJ1Z2dpbmcgb2YgdGhlIGR5bmFtaWMgbGlua2VyPyAgKi8KKyAJICBpZiAobWVtY21wIChlbnZsaW5lLCAiREVCVUciLCA1KSA9PSAwKQorIAkgICAgeworIAkgICAgICBwcm9jZXNzX2RsX2RlYnVnICgmZW52bGluZVs2XSk7CisgCSAgICAgIGJyZWFrOworIAkgICAgfQorKyNlbmRpZgorIAkgIGlmIChtZW1jbXAgKGVudmxpbmUsICJBVURJVCIsIDUpID09IDApCisgCSAgICBwcm9jZXNzX2RsX2F1ZGl0ICgmZW52bGluZVs2XSk7CisgCSAgYnJlYWs7CitAQCAtMjQ0OCwxMyArMjQ1NCwxNCBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgICAgIGJyZWFrOworIAkgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgIC8qIFdoZXJlIHRvIHBsYWNlIHRoZSBwcm9maWxpbmcgZGF0YSBmaWxlLiAgKi8KKyAJICBpZiAobWVtY21wIChlbnZsaW5lLCAiREVCVUdfT1VUUFVUIiwgMTIpID09IDApCisgCSAgICB7CisgCSAgICAgIGRlYnVnX291dHB1dCA9ICZlbnZsaW5lWzEzXTsKKyAJICAgICAgYnJlYWs7CisgCSAgICB9CistCisrI2VuZGlmCisgCSAgaWYgKCFfX2xpYmNfZW5hYmxlX3NlY3VyZQorIAkgICAgICAmJiBtZW1jbXAgKGVudmxpbmUsICJEWU5BTUlDX1dFQUsiLCAxMikgPT0gMCkKKyAJICAgIEdMUk8oZGxfZHluYW1pY193ZWFrKSA9IDE7CitAQCAtMjQ5MSw3ICsyNDk4LDkgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgICAgeworIAkgICAgICBtb2RlID0gdHJhY2U7CisgCSAgICAgIEdMUk8oZGxfdmVyYm9zZSkgPSAxOworKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgICAgICBHTFJPKGRsX2RlYnVnX21hc2spIHw9IERMX0RFQlVHX1BSRUxJTks7CisrI2VuZGlmCisgCSAgICAgIEdMUk8oZGxfdHJhY2VfcHJlbGluaykgPSAmZW52bGluZVsxN107CisgCSAgICB9CisgCSAgYnJlYWs7CitAQCAtMjUzOCwxMiArMjU0NywxNSBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgICAgICAgaWYgKF9fYWNjZXNzICgiL2V0Yy9zdWlkLWRlYnVnIiwgRl9PSykgIT0gMCkKKyAJeworIAkgIHVuc2V0ZW52ICgiTUFMTE9DX0NIRUNLXyIpOworKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgIEdMUk8oZGxfZGVidWdfbWFzaykgPSAwOworKyNlbmRpZgorIAl9CisgCisgICAgICAgaWYgKG1vZGUgIT0gbm9ybWFsKQorIAlfZXhpdCAoNSk7CisgICAgIH0KKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAgIC8qIElmIHdlIGhhdmUgdG8gcnVuIHRoZSBkeW5hbWljIGxpbmtlciBpbiBkZWJ1Z2dpbmcgbW9kZSBhbmQgdGhlCisgICAgICBMRF9ERUJVR19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZ2l2ZW4sIHdlIHdyaXRlIHRoZSBkZWJ1ZworICAgICAgbWVzc2FnZXMgdG8gdGhpcyBmaWxlLiAgKi8KK0BAIC0yNTY4LDYgKzI1ODAsNyBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCS8qIFdlIHVzZSBzdGFuZGFyZCBvdXRwdXQgaWYgb3BlbmluZyB0aGUgZmlsZSBmYWlsZWQuICAqLworIAlHTFJPKGRsX2RlYnVnX2ZkKSA9IFNURE9VVF9GSUxFTk87CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcgKi8KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvZXh0cmEtbGliLm1rIGIvZXh0cmEtbGliLm1rCitpbmRleCBiMTA3NDhkLi5kNzFhMDZmIDEwMDY0NAorLS0tIGEvZXh0cmEtbGliLm1rCisrKysgYi9leHRyYS1saWIubWsKK0BAIC0yNSw3ICsyNSw5IEBAIGluc3RhbGwtbGliIDo9ICQoaW5zdGFsbC1saWIpCisgZXh0cmEtb2JqcyA6PSAkKGV4dHJhLW9ianMpCisgCisgIyBUaGUgbW9kdWxlcyB0aGF0IGdvIGluICQobGliKS4KKy1hbGwtJChsaWIpLXJvdXRpbmVzIDo9ICQoJChsaWIpLXJvdXRpbmVzKSAkKCQobGliKS1zeXNkZXBfcm91dGluZXMpCisrYWxsLSQobGliKS1yb3V0aW5lcyA6PSAkKCQobGliKS1yb3V0aW5lcykJCVwKKysJICAgICAgICAgICAgICAgJCgkKGxpYiktcm91dGluZXMteSkJCVwKKysJCSAgICAgICAkKCQobGliKS1zeXNkZXBfcm91dGluZXMpCisgCisgIyBBZGQgZWFjaCBmbGF2b3Igb2YgbGlicmFyeSB0byB0aGUgbGlzdHMgb2YgdGhpbmdzIHRvIGJ1aWxkIGFuZCBpbnN0YWxsLgorIGluc3RhbGwtbGliICs9ICQoZm9yZWFjaCBvLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSksJChsaWI6bGliJT0kKGxpYnR5cGUkbykpKQorQEAgLTEwMSw3ICsxMDMsNyBAQCBlbmRpZgorIGVuZGlmCisgCisgIyBUaGlzIHdpbGwgZGVmaW5lIGBsaWJvZi1ST1VUSU5FIDo9IExJQicgZm9yIGVhY2ggb2YgdGhlIHJvdXRpbmVzLgorLWNwcC1zcmNzLWxlZnQgOj0gJCgkKGxpYiktcm91dGluZXMpICQoJChsaWIpLXN5c2RlcF9yb3V0aW5lcykKKytjcHAtc3Jjcy1sZWZ0IDo9ICQoYWxsLSQobGliKS1yb3V0aW5lcykKKyBpZm5lcSAoLCQoY3BwLXNyY3MtbGVmdCkpCisgaW5jbHVkZSAkKHBhdHN1YnN0ICUsJCguLiljcHBmbGFncy1pdGVyYXRvci5taywkKGNwcC1zcmNzLWxlZnQpKQorIGVuZGlmCitkaWZmIC0tZ2l0IGEvZ3JwL01ha2VmaWxlIGIvZ3JwL01ha2VmaWxlCitpbmRleCBjNjNiNTUyLi43NDg2ZjMyIDEwMDY0NAorLS0tIGEvZ3JwL01ha2VmaWxlCisrKysgYi9ncnAvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBncnAgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBncnAKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yOSw2ICszMSw5IEBAIHJvdXRpbmVzIDo9IGZnZXRncmVudCBpbml0Z3JvdXBzIHNldGdyb3VwcyBcCisgCSAgICBnZXRncmVudF9yIGdldGdyZ2lkX3IgZ2V0Z3JuYW1fciBmZ2V0Z3JlbnRfcgorIAorIHRlc3RzIDo9IHRlc3RncnAKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0gpKQorK0xETElCUy10ZXN0Z3JwICs9ICQoc2hlbGwgY2F0ICQoY29tbW9uLW9ianBmeCluc3MvZml4ZWQtbnNzd2l0Y2gtbGlicykKKytlbmRpZgorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdC1zcmNzIDo9ICB0c3RfZmdldGdyZW50CitkaWZmIC0tZ2l0IGEvaGVzaW9kL01ha2VmaWxlIGIvaGVzaW9kL01ha2VmaWxlCitpbmRleCBhYzBiYzAxLi4zODI2M2I0IDEwMDY0NAorLS0tIGEvaGVzaW9kL01ha2VmaWxlCisrKysgYi9oZXNpb2QvTWFrZWZpbGUKK0BAIC0xOCwxMiArMTgsMTQgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGhlc2lvZCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGhlc2lvZAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorLWV4dHJhLWxpYnMgOj0gbGlibnNzX2hlc2lvZAorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGxpYm5zc19oZXNpb2QKKytleHRyYS1saWJzLW90aGVycy15ICs9ICQoZXh0cmEtbGlicy15KQorIAorIHN1YmRpci1kaXJzID0gbnNzX2hlc2lvZAorIHZwYXRoICUuYyBuc3NfaGVzaW9kCitkaWZmIC0tZ2l0IGEvaWNvbnYvTWFrZWZpbGUgYi9pY29udi9NYWtlZmlsZQoraW5kZXggMGQ1NWVkYS4uYTE4NDdjNiAxMDA2NDQKKy0tLSBhL2ljb252L01ha2VmaWxlCisrKysgYi9pY29udi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgaWNvbnYuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaWNvbnYKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zOSw2ICs0MSwxMSBAQCBDRkxBR1MtaWNvbnZfY2hhcm1hcC5jID0gLUkuLi9sb2NhbGUvcHJvZ3JhbXMKKyBDRkxBR1MtZHVtbXktcmVwZXJ0b2lyZS5jID0gLUkuLi9sb2NhbGUvcHJvZ3JhbXMKKyBDRkxBR1MtY2hhcm1hcC5jID0gLURDSEFSTUFQX1BBVEg9JyIkKGkxOG5kaXIpL2NoYXJtYXBzIicgXAorIAkJICAgLURERUZBVUxUX0NIQVJNQVA9bnVsbF9wb2ludGVyIC1ETkVFRF9OVUxMX1BPSU5URVIKKysKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfU1BBV04pKQorK0NGTEFHUy1jaGFybWFwLWRpci5jICs9IC1ETk9fVU5DT01QUkVTUworK2VuZGlmCisrCisgQ0ZMQUdTLWxpbmVyZWFkZXIuYyA9IC1ETk9fVFJBTlNMSVRFUkFUSU9OCisgQ0ZMQUdTLXNpbXBsZS1oYXNoLmMgPSAtSS4uL2xvY2FsZQorIAorZGlmZiAtLWdpdCBhL2ljb252L2djb252X2RiLmMgYi9pY29udi9nY29udl9kYi5jCitpbmRleCBjZTQ2MjE2Li5lYTE4OTY0IDEwMDY0NAorLS0tIGEvaWNvbnYvZ2NvbnZfZGIuYworKysrIGIvaWNvbnYvZ2NvbnZfZGIuYworQEAgLTI1LDYgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGRsZmNuLmg+CisgI2luY2x1ZGUgPGdjb252X2ludC5oPgorQEAgLTgyOCw5ICs4MjksMTEgQEAgZnJlZV9tb2R1bGVzX2RiIChzdHJ1Y3QgZ2NvbnZfbW9kdWxlICpub2RlKQorIC8qIEZyZWUgYWxsIHJlc291cmNlcyBpZiBuZWNlc3NhcnkuICAqLworIGxpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIC8qIEZpcnN0IGZyZWUgbG9jYWxlIG1lbW9yeS4gIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgZnJlZWluZyBkZXJpdmF0aW9ucywKKyAgICAgIGFzIGN0eXBlIGNsZWFudXAgZnVuY3Rpb25zIGRlcmVmZXJlbmNlIHN0ZXBzIGFycmF5cyB3aGljaCB3ZSBmcmVlIGJlbG93LiAgKi8KKyAgIF9ubF9sb2NhbGVfc3ViZnJlZXJlcyAoKTsKKysjZW5kaWYKKyAKKyAgIC8qIGZpbmRkb21haW4uYyBoYXMgc2ltaWxhciBwcm9ibGVtLiAgKi8KKyAgIGV4dGVybiB2b2lkIF9ubF9maW5kZG9tYWluX3N1YmZyZWVyZXMgKHZvaWQpIGF0dHJpYnV0ZV9oaWRkZW47CitkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfdHJhbnMuYyBiL2ljb252L2djb252X3RyYW5zLmMKK2luZGV4IDVkNWQ0ZDcuLmE3ZDMwNzIgMTAwNjQ0CistLS0gYS9pY29udi9nY29udl90cmFucy5jCisrKysgYi9pY29udi9nY29udl90cmFucy5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNpbmNsdWRlICJnY29udl9pbnQuaCIKK0BAIC0zOCwxNSArMzksMTkgQEAgX19nY29udl90cmFuc2xpdGVyYXRlIChzdHJ1Y3QgX19nY29udl9zdGVwICpzdGVwLAorIAkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWZzdGFydCwgc2l6ZV90ICppcnJldmVyc2libGUpCisgeworICAgLyogRmluZCBvdXQgYWJvdXQgdGhlIGxvY2FsZSdzIHRyYW5zbGl0ZXJhdGlvbi4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludF9mYXN0MzJfdCBzaXplOworICAgY29uc3QgdWludDMyX3QgKmZyb21faWR4OworICAgY29uc3QgdWludDMyX3QgKmZyb21fdGJsOworICAgY29uc3QgdWludDMyX3QgKnRvX2lkeDsKKyAgIGNvbnN0IHVpbnQzMl90ICp0b190Ymw7CisrI2VuZGlmCisgICBjb25zdCB1aW50MzJfdCAqd2luYnVmOworICAgY29uc3QgdWludDMyX3QgKndpbmJ1ZmVuZDsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50X2Zhc3QzMl90IGxvdzsKKyAgIHVpbnRfZmFzdDMyX3QgaGlnaDsKKysjZW5kaWYKKyAKKyAgIC8qIFRoZSBpbnB1dCBidWZmZXIuICBUaGVyZSBhcmUgYWN0dWFsbHkgNC1ieXRlIHZhbHVlcy4gICovCisgICB3aW5idWYgPSAoY29uc3QgdWludDMyX3QgKikgKmluYnVmcDsKK0BAIC01OCw2ICs2Myw3IEBAIF9fZ2NvbnZfdHJhbnNsaXRlcmF0ZSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqc3RlcCwKKyAgICAgUFRSX0RFTUFOR0xFIChmY3QpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIC8qIElmIHRoZXJlIGlzIG5vIHRyYW5zbGl0ZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgbG9jYWxlIGRvbid0IGRvCisgICAgICBhbnl0aGluZyBhbmQgcmV0dXJuIHRoZSBlcnJvci4gICovCisgICBzaXplID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSk7CitAQCAtMTkzLDYgKzE5OSw3IEBAIF9fZ2NvbnZfdHJhbnNsaXRlcmF0ZSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqc3RlcCwKKyAgICAgICAgICAgICAgc29ydGVkLiAgKi8KKyAJICBicmVhazsKKyAgICAgfQorKyNlbmRpZgorIAorICAgLyogT25lIGxhc3QgY2hhbmNlOiB1c2UgdGhlIGRlZmF1bHQgcmVwbGFjZW1lbnQuICAqLworICAgaWYgKF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTikgIT0gMCkKK2RpZmYgLS1naXQgYS9pY29udi9pY29udl9wcm9nLmMgYi9pY29udi9pY29udl9wcm9nLmMKK2luZGV4IGUyNDliY2UuLjQwM2VjZTUgMTAwNjQ0CistLS0gYS9pY29udi9pY29udl9wcm9nLmMKKysrKyBiL2ljb252L2ljb252X3Byb2cuYworQEAgLTM1LDYgKzM1LDcgQEAKKyAjaWZkZWYgX1BPU0lYX01BUFBFRF9GSUxFUworICMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjZW5kaWYKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8Y2hhcm1hcC5oPgorICNpbmNsdWRlIDxnY29udl9pbnQuaD4KKyAjaW5jbHVkZSAiaWNvbnZfcHJvZy5oIgorQEAgLTIyMSwxMCArMjIyLDE3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgICAgIGJvb2wgdG9fd3JvbmcgPQorIAkJKGljb252X29wZW4gKHRvX2NvZGUsICJVVEYtOCIpID09IChpY29udl90KSAtMQorIAkJICYmIGVycm5vID09IEVJTlZBTCk7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBjb25zdCBjaGFyICpmcm9tX3ByZXR0eSA9CisgCQkoZnJvbV9jb2RlWzBdID8gZnJvbV9jb2RlIDogbmxfbGFuZ2luZm8gKENPREVTRVQpKTsKKyAJICAgICAgY29uc3QgY2hhciAqdG9fcHJldHR5ID0KKyAJCShvcmlnX3RvX2NvZGVbMF0gPyBvcmlnX3RvX2NvZGUgOiBubF9sYW5naW5mbyAoQ09ERVNFVCkpOworKyNlbHNlCisrCSAgICAgIGNvbnN0IGNoYXIgKmZyb21fcHJldHR5ID0KKysJCShmcm9tX2NvZGVbMF0gPyBmcm9tX2NvZGUgOiAiQU5TSV9YMy40LTE5NjgiKTsKKysJICAgICAgY29uc3QgY2hhciAqdG9fcHJldHR5ID0KKysgICAgICAgICAgICAgICAgIChvcmlnX3RvX2NvZGVbMF0gPyBvcmlnX3RvX2NvZGUgOiAiQU5TSV9YMy40LTE5NjgiKTsKKysjZW5kaWYKKyAKKyAJICAgICAgaWYgKGZyb21fd3JvbmcpCisgCQl7CitkaWZmIC0tZ2l0IGEvaWNvbnZkYXRhL01ha2VmaWxlIGIvaWNvbnZkYXRhL01ha2VmaWxlCitpbmRleCBhM2QxZDA5Li4wODMyNzA4IDEwMDY0NAorLS0tIGEvaWNvbnZkYXRhL01ha2VmaWxlCisrKysgYi9pY29udmRhdGEvTWFrZWZpbGUKK0BAIC0xOCwxMiArMTgsMTUgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgaWNvbnYgZGF0YSBhbmQgY29kZS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpY29udmRhdGEKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyAjIE5hbWVzIG9mIGFsbCB0aGUgc2hhcmVkIG9iamVjdHMgd2hpY2ggaW1wbGVtZW50IHRoZSB0cmFuc2Zvcm1hdGlvbnMuCistbW9kdWxlcwk6PSBJU084ODU5LTEgSVNPODg1OS0yIElTTzg4NTktMyBJU084ODU5LTQgSVNPODg1OS01CQkgXAorK21vZHVsZXMtJChPUFRJT05fRUdMSUJDX0NIQVJTRVRTKQkJCQkJIFwKKysJOj0gSVNPODg1OS0xIElTTzg4NTktMiBJU084ODU5LTMgSVNPODg1OS00IElTTzg4NTktNQkJIFwKKyAJICAgSVNPODg1OS02IElTTzg4NTktNyBJU084ODU5LTggSVNPODg1OS05IElTTzg4NTktMTAJCSBcCisgCSAgIElTTzg4NTktMTEgSVNPODg1OS0xMyBJU084ODU5LTE0IElTTzg4NTktMTUgSVNPODg1OS0xNgkgXAorIAkgICBULjYxIElTT182OTM3IFNKSVMgS09JLTggSFAtUk9NQU44IEhQLVJPTUFOOSBFQkNESUMtQVQtREUJIFwKK0BAIC02MywxMSArNjYsMTMgQEAgbW9kdWxlcwk6PSBJU084ODU5LTEgSVNPODg1OS0yIElTTzg4NTktMyBJU084ODU5LTQgSVNPODg1OS01CQkgXAorIAkgICBNQUMtQ0VOVFJBTEVVUk9QRSBLT0k4LVJVIElTTzg4NTktOUUJCQkJIFwKKyAJICAgQ1A3NzAgQ1A3NzEgQ1A3NzIgQ1A3NzMgQ1A3NzQKKyAKKy1tb2R1bGVzLnNvIDo9ICQoYWRkc3VmZml4IC5zbywgJChtb2R1bGVzKSkKKyttb2R1bGVzLnNvIDo9ICQoYWRkc3VmZml4IC5zbywgJChtb2R1bGVzLXkpKQorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHMgPSBidWctaWNvbnYxIGJ1Zy1pY29udjIgdHN0LWxvYWRpbmcgdHN0LWUyYmlnIHRzdC1pY29udjQgYnVnLWljb252NCBcCistCXRzdC1pY29udjYgYnVnLWljb252NSBidWctaWNvbnY2IHRzdC1pY29udjcgYnVnLWljb252OCBidWctaWNvbnY5CisrCXRzdC1pY29udjYgYnVnLWljb252NSBidWctaWNvbnY4IGJ1Zy1pY29udjkKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IGJ1Zy1pY29udjYgdHN0LWljb252NworKworIGlmZXEgKCQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzKQorIHRlc3RzICs9IGJ1Zy1pY29udjMKKyBlbmRpZgorQEAgLTEyNywxMyArMTMyLDEzIEBAIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBSdWxlIHRvIGdlbmVyYXRlIHRoZSBzaGFyZWQgb2JqZWN0cy4KKyBjaGFybWFwcyA9IC4uL2xvY2FsZWRhdGEvY2hhcm1hcHMKKyAtaW5jbHVkZSAkKG9ianBmeClpY29udi1ydWxlcworLWV4dHJhLW1vZHVsZXMtbGVmdCA6PSAkKG1vZHVsZXMpCisrZXh0cmEtbW9kdWxlcy1sZWZ0IDo9ICQobW9kdWxlcy15KQorIGluY2x1ZGUgZXh0cmEtbW9kdWxlLm1rCisgCisgCisgZXh0cmEtb2JqcwkrPSAkKG1vZHVsZXMuc28pCistaW5zdGFsbC1vdGhlcnMJPSAkKGFkZHByZWZpeCAkKGluc3RfZ2NvbnZkaXIpLywgJChtb2R1bGVzLnNvKSkJXAorLQkJICAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMKKytpbnN0YWxsLW90aGVycy15ICs9ICQoYWRkcHJlZml4ICQoaW5zdF9nY29udmRpcikvLCAkKG1vZHVsZXMuc28pKQorK2luc3RhbGwtb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19DSEFSU0VUUykgKz0gJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzCisgCisgIyBXZSBjYW4gYnVpbGQgdGhlIGNvbnZlcnNpb24gdGFibGVzIGZvciBudW1lcm91cyBjaGFyc2V0cyBhdXRvbWF0aWNhbGx5LgorIAorQEAgLTIwMSw3ICsyMDYsNyBAQCBiZWZvcmUtY29tcGlsZSArPSAkKGFkZHByZWZpeCAkKG9ianBmeCksJChnZW5lcmF0ZWQtbW9kdWxlczo9LmgpKQorIGlmbmRlZiBhdm9pZC1nZW5lcmF0ZWQKKyAkKG9ianBmeClpY29udi1ydWxlczogTWFrZWZpbGUKKyAJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCistCXsgZWNobyAkKGZpbHRlci1vdXQgbGliJSwgJChtb2R1bGVzKSk7IFwKKysJeyBlY2hvICQoZmlsdGVyLW91dCBsaWIlLCAkKG1vZHVsZXMteSkpOyBcCisgCSAgZWNobyA4Yml0ICQoZ2VuLThiaXQtbW9kdWxlcyk7IFwKKyAJICBlY2hvIDhiaXQtZ2FwICQoZ2VuLThiaXQtZ2FwLW1vZHVsZXMpOyB9IHwgXAorIAlMQ19BTEw9QyBcCitAQCAtMjQ1LDcgKzI1MCw3IEBAICQoYWRkcHJlZml4ICQoaW5zdF9nY29udmRpcikvLCAkKG1vZHVsZXMuc28pKTogXAorIAkkKGRvLWluc3RhbGwtcHJvZ3JhbSkKKyAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXM6IGdjb252LW1vZHVsZXMgJCgrZm9yY2UpCisgCSQoZG8taW5zdGFsbCkKKy1pZmVxIChubywkKGNyb3NzLWNvbXBpbGluZykpCisrIyBlZ2xpYmM6IGlmZXEgKG5vLCQoY3Jvc3MtY29tcGlsaW5nKSkKKyAjIFVwZGF0ZSB0aGUgJChwcmVmaXgpL2xpYi9nY29udi9nY29udi1tb2R1bGVzLmNhY2hlIGZpbGUuIFRoaXMgaXMgbmVjZXNzYXJ5CisgIyBpZiB0aGlzIGxpYmMgaGFzIG1vcmUgZ2NvbnYgbW9kdWxlcyB0aGFuIHRoZSBwcmV2aW91c2x5IGluc3RhbGxlZCBvbmUuCisgCWlmIHRlc3QgLWYgIiQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcy5jYWNoZSI7IHRoZW4gXAorQEAgLTI1NCw5ICsyNTksOSBAQCBpZmVxIChubywkKGNyb3NzLWNvbXBpbGluZykpCisgCSAgICQoY29tbW9uLW9ianBmeClpY29udi9pY29udmNvbmZpZyBcCisgCSAgICAgJChhZGRwcmVmaXggLS1wcmVmaXg9LCQoaW5zdGFsbF9yb290KSk7IFwKKyAJZmkKKy1lbHNlCistCUBlY2hvICcqQCpAKkAgWW91IHNob3VsZCByZWNyZWF0ZSAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMuY2FjaGUnCistZW5kaWYKKysjIGVnbGliYzogZWxzZQorKyMgZWdsaWJjOglAZWNobyAnKkAqQCpAIFlvdSBzaG91bGQgcmVjcmVhdGUgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzLmNhY2hlJworKyMgZWdsaWJjOiBlbmRpZgorIAorIGVuZGlmICMgYnVpbGQtc2hhcmVkID0geWVzCisgCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXRkYi5oIGIvaW5jbHVkZS9uZXRkYi5oCitpbmRleCBlMWYwNTFkLi5mNmQxNWFhIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9uZXRkYi5oCisrKysgYi9pbmNsdWRlL25ldGRiLmgKK0BAIC0yMzIsNiArMjMyLDEwIEBAIGV4dGVybiBlbnVtIG5zc19zdGF0dXMgX25zc18gIyMgc2VydmljZSAjIyBfZ2V0aG9zdGJ5bmFtZTJfcgkJICAgICAgXAorIAkJICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHN0cnVjdCBob3N0ZW50ICpob3N0LAkgICAgICBcCisgCQkJY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCBpbnQgKmVycm5vcCwJICAgICAgXAorIAkJCWludCAqaF9lcnJub3ApOwkJCQkJICAgICAgXAorK2V4dGVybiBlbnVtIG5zc19zdGF0dXMgX25zc18gIyMgc2VydmljZSAjIyBfZ2V0aG9zdGJ5bmFtZTNfcgkJICAgICAgXAorKwkJICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHN0cnVjdCBob3N0ZW50ICpyZXN1bHQsICAgICBcCisrCQkJY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCBpbnQgKmVycm5vcCwJICAgICAgXAorKwkJCWludCAqaF9lcnJub3AsIGludDMyX3QgKnR0bHAsIGNoYXIgKipjYW5vbnApOyAgICAgICAgIFwKKyBleHRlcm4gZW51bSBuc3Nfc3RhdHVzIF9uc3NfICMjIHNlcnZpY2UgIyMgX2dldGhvc3RieW5hbWVfcgkJICAgICAgXAorIAkJICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCwgY2hhciAqYnVmZmVyLCBcCisgCQkJc2l6ZV90IGJ1ZmxlbiwgaW50ICplcnJub3AsIGludCAqaF9lcnJub3ApOwkgICAgICBcCitkaWZmIC0tZ2l0IGEvaW5ldC9NYWtlZmlsZSBiL2luZXQvTWFrZWZpbGUKK2luZGV4IGYxZDg3MWYuLjdjYjE3MDkgMTAwNjQ0CistLS0gYS9pbmV0L01ha2VmaWxlCisrKysgYi9pbmV0L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgaW5ldCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGluZXQKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNyw3ICsyOSw4IEBAIGhlYWRlcnMJOj0gbmV0aW5ldC9ldGhlci5oIG5ldGluZXQvaW4uaCBuZXRpbmV0L2luX3N5c3RtLmggXAorIAkgICBuZXRpbmV0L3RjcC5oIG5ldGluZXQvaXAuaCAkKHdpbGRjYXJkIGFycGEvKi5oIHByb3RvY29scy8qLmgpIFwKKyAJICAgYWxpYXNlcy5oIGlmYWRkcnMuaCBuZXRpbmV0L2lwNi5oIG5ldGluZXQvaWNtcDYuaCBiaXRzL2luLmgKKyAKKy1yb3V0aW5lcyA6PSBodG9ubCBodG9ucwkJXAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCSArPSBodG9ubCBodG9ucyBcCisgCSAgICBpbmV0X2xuYW9mIGluZXRfbWthZHIJXAorIAkgICAgaW5ldF9uZXRvZiBpbmV0X250b2EgaW5ldF9uZXQgaGVycm5vIGhlcnJuby1sb2MgXAorIAkgICAgZ2V0aHN0YnlhZCBnZXRoc3RieWFkX3IgZ2V0aHN0YnlubSBnZXRoc3RieW5tMiBnZXRoc3RieW5tMl9yIFwKK0BAIC0zOSwxOCArNDIsMjMgQEAgcm91dGluZXMgOj0gaHRvbmwgaHRvbnMJCVwKKyAJICAgIGdldHNlcnZlbnRfcglcCisgCSAgICBldGhlcl9hdG9uIGV0aGVyX2F0b25fciBldGhlcl9odG9uIGV0aGVyX2xpbmUgXAorIAkgICAgZXRoZXJfbnRvYSBldGhlcl9udG9hX3IgZXRoZXJfbnRvaCBcCistCSAgICByY21kIHJleGVjIHJ1c2VycGFzcyBcCisgCSAgICBnZXRuZXRncmVudF9yIGdldG5ldGdyZW50IFwKKy0JICAgIGdldGFsaWFzZW50X3IgZ2V0YWxpYXNlbnQgZ2V0YWxpYXNuYW1lIGdldGFsaWFzbmFtZV9yIFwKKy0JICAgIGluNl9hZGRyIGdldG5hbWVpbmZvIGlmX2luZGV4IGlmYWRkcnMgaW5ldDZfb3B0aW9uIFwKKysJICAgIGluNl9hZGRyIGdldG5hbWVpbmZvIGlmX2luZGV4IGlmYWRkcnMgXAorIAkgICAgZ2V0aXB2NHNvdXJjZWZpbHRlciBzZXRpcHY0c291cmNlZmlsdGVyIFwKKy0JICAgIGdldHNvdXJjZWZpbHRlciBzZXRzb3VyY2VmaWx0ZXIgaW5ldDZfb3B0IGluZXQ2X3J0aAorKwkgICAgZ2V0c291cmNlZmlsdGVyIHNldHNvdXJjZWZpbHRlcgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19SQ01EKSBcCisrCSArPSByY21kIHJleGVjIHJ1c2VycGFzcworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTKSBcCisrCSArPSBnZXRhbGlhc2VudF9yIGdldGFsaWFzZW50IGdldGFsaWFzbmFtZSBnZXRhbGlhc25hbWVfcgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNikgXAorKwkgKz0gaW5ldDZfb3B0aW9uIGluZXQ2X29wdCBpbmV0Nl9ydGgKKyAKKy1hdXggOj0gY2hlY2tfcGYgY2hlY2tfbmF0aXZlIGlmcmVxCisrYXV4LSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBjaGVja19wZiBjaGVja19uYXRpdmUgaWZyZXEKKyAKKyB0ZXN0cyA6PSBodG9udGVzdCB0ZXN0X2lmaW5kZXggdHN0LW50b2EgdHN0LWV0aGVyX2F0b24gdHN0LW5ldHdvcmsgXAorLQkgdHN0LWdldGhubSB0ZXN0LWlmYWRkcnMgYnVnLWlmMSB0ZXN0LWluZXQ2X29wdCB0c3QtZXRoZXJfbGluZSBcCisrCSB0c3QtZ2V0aG5tIHRlc3QtaWZhZGRycyBidWctaWYxIHRzdC1ldGhlcl9saW5lIFwKKyAJIHRzdC1nZXRuaTEgdHN0LWdldG5pMiB0c3QtaW5ldDZfcnRoIHRzdC1jaGVja3MKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYpICs9IHRlc3QtaW5ldDZfb3B0CisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL2ludGwvTWFrZWZpbGUgYi9pbnRsL01ha2VmaWxlCitpbmRleCA5ZWNmOGZlLi41ODdiYzBkIDEwMDY0NAorLS0tIGEvaW50bC9NYWtlZmlsZQorKysrIGIvaW50bC9NYWtlZmlsZQorQEAgLTE2LDYgKzE2LDcgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIE1ha2VmaWxlIGZvciBpbnRsIHN1YmRpcmVjdG9yeTogbWVzc2FnZSBoYW5kbGluZyBjb2RlIGZyb20gR05VIGdldHRleHQuCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorIHN1YmRpciA9IGludGwKKyAKK0BAIC00OCw3ICs0OSw3IEBAIGVuZGlmCisgJChvYmpwZngpcGx1cmFsLm86IHBsdXJhbC5jCisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKy1pZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorK2lmZXEgKHl5eWVzLCQoT1BUSU9OX0VHTElCQ19MT0NBTEVTKSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKGJ1aWxkLXNoYXJlZCkpCisgaWZuZXEgKCQoc3RyaXAgJChNU0dGTVQpKSw6KQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LXRyYW5zbGl0Lm91dCAkKG9ianBmeCl0c3QtZ2V0dGV4dC5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC1nZXR0ZXh0Mi5vdXQgJChvYmpwZngpdHN0LWNvZGVzZXQub3V0IFwKK2RpZmYgLS1naXQgYS9pbnRsL2RjaWdldHRleHQuYyBiL2ludGwvZGNpZ2V0dGV4dC5jCitpbmRleCA4YTNmMDkxLi5lMjcxNjQ4IDEwMDY0NAorLS0tIGEvaW50bC9kY2lnZXR0ZXh0LmMKKysrKyBiL2ludGwvZGNpZ2V0dGV4dC5jCitAQCAtMTAwLDExICsxMDAsMTUgQEAgZXh0ZXJuIGludCBlcnJubzsKKyAjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisgCisgLyogSGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKKysjIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lCisgIyBkZWZpbmUgZ2xfcndsb2NrX3JkbG9jayBfX2xpYmNfcndsb2NrX3JkbG9jaworICMgZGVmaW5lIGdsX3J3bG9ja193cmxvY2sgX19saWJjX3J3bG9ja193cmxvY2sKKyAjIGRlZmluZSBnbF9yd2xvY2tfdW5sb2NrIF9fbGliY19yd2xvY2tfdW5sb2NrCitAQCAtNTIzLDggKzUyNywxMCBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgCisgI2lmZGVmIF9MSUJDCistICBfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfX2xpYmNfc2V0bG9jYWxlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKy0gIF9fbGliY19yd2xvY2tfcmRsb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICBnbF9yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9fbGliY19zZXRsb2NhbGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKyAgZ2xfcndsb2NrX3JkbG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGVuZGlmCisgI2VuZGlmCisgCisgICBnbF9yd2xvY2tfcmRsb2NrIChfbmxfc3RhdGVfbG9jayk7CitAQCAtNTUwLDcgKzU1NiwxMSBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAjaWZkZWYgSEFWRV9QRVJfVEhSRUFEX0xPQ0FMRQorICMgaWZuZGVmIElOX0xJQkdMT0NBTEUKKyAjICBpZmRlZiBfTElCQworLSAgbG9jYWxlbmFtZSA9IHN0cmR1cGEgKF9fY3VycmVudF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnkpKTsKKysjICAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgbG9jYWxlbmFtZSA9IHN0cmR1cGEgKF9fY3VycmVudF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnkpKTsKKysjICAgZWxzZQorKyAgICAgIGxvY2FsZW5hbWUgPSAiQyI7CisrIyAgIGVuZGlmCisgIyAgZWxzZQorICAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworICMgICBkZWZpbmUgQ0FURUdPUllOQU1FX0lOSVRJQUxJWkVECitAQCAtNTgxLDEwICs1OTEsMTIgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgICAgICAgZWxzZQorIAlyZXR2YWwgPSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOworIAorLSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjIGlmZGVmIF9MSUJDCistICAgICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgZ2xfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjICBlbmRpZgorICMgZW5kaWYKKysgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgICAgICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKyAgICAgICByZXR1cm4gcmV0dmFsOworICAgICB9CitAQCAtODM4LDEwICs4NTAsMTMgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgCSAgICAgIGlmIChwbHVyYWwpCisgCQlyZXR2YWwgPSBwbHVyYWxfbG9va3VwIChkb21haW4sIG4sIHJldHZhbCwgcmV0bGVuKTsKKyAKKy0JICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICNpZmRlZiBfTElCQworLQkgICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKworKwkgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgZW5kaWYKKyAjZW5kaWYKKysJICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworIAkgICAgICByZXR1cm4gcmV0dmFsOworIAkgICAgfQorIAl9CitAQCAtODUwLDEwICs4NjUsMTIgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgIHJldHVybl91bnRyYW5zbGF0ZWQ6CisgICAvKiBSZXR1cm4gdGhlIHVudHJhbnNsYXRlZCBNU0dJRC4gICovCisgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgI2lmZGVmIF9MSUJDCistICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgIGdsX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBlbmRpZgorICNlbmRpZgorKyAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICNpZm5kZWYgX0xJQkMKKyAgIGlmICghRU5BQkxFX1NFQ1VSRSkKKyAgICAgeworQEAgLTE1NTAsNyArMTU2NywxMSBAQCBndWVzc19jYXRlZ29yeV92YWx1ZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisgICAgICBgTENfeHh4JywgYW5kIGBMQU5HJy4gIE9uIHNvbWUgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZQorICAgICAgYHNldGxvY2FsZScgZnVuY3Rpb24gaXRzZWxmLiAgKi8KKyAjIGlmZGVmIF9MSUJDCisrIyAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBsb2NhbGUgPSBfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KTsKKysjICBlbHNlCisrICBsb2NhbGUgPSAiQyI7CisrIyAgZW5kaWYKKyAjIGVsc2UKKyAgIGxvY2FsZV9kZWZhdWx0ZWQgPSAwOworICMgIGlmIEhBVkVfVVNFTE9DQUxFCitkaWZmIC0tZ2l0IGEvaW8vTWFrZWZpbGUgYi9pby9NYWtlZmlsZQoraW5kZXggNjEzZGNlMC4uNjk3NDM5ZSAxMDA2NDQKKy0tLSBhL2lvL01ha2VmaWxlCisrKysgYi9pby9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIEkvTyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGlvCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzYsNyArMzgsNyBAQCByb3V0aW5lcyA6PQkJCQkJCQkJXAorIAlmeHN0YXRhdCBmeHN0YXRhdDY0CQkJCQkJXAorIAlzdGF0ZnMgZnN0YXRmcyBzdGF0ZnM2NCBmc3RhdGZzNjQJCQkJXAorIAlzdGF0dmZzIGZzdGF0dmZzIHN0YXR2ZnM2NCBmc3RhdHZmczY0CQkJCVwKKy0JdW1hc2sgY2htb2QgZmNobW9kIGxjaG1vZCBmY2htb2RhdAkJCQlcCisrCXVtYXNrIGNobW9kIGZjaG1vZCBmY2htb2RhdAkJCQkJXAorIAlta2RpciBta2RpcmF0CQkJCQkJCVwKKyAJb3BlbiBvcGVuXzIgb3BlbjY0IG9wZW42NF8yIG9wZW5hdCBvcGVuYXRfMiBvcGVuYXQ2NCBvcGVuYXQ2NF8yCVwKKyAJcmVhZCB3cml0ZSBsc2VlayBsc2VlazY0IGFjY2VzcyBldWlkYWNjZXNzIGZhY2Nlc3NhdAkJXAorQEAgLTQ5LDExICs1MSwxMyBAQCByb3V0aW5lcyA6PQkJCQkJCQkJXAorIAl0dHluYW1lIHR0eW5hbWVfciBpc2F0dHkJCQkJCVwKKyAJbGluayBsaW5rYXQgc3ltbGluayBzeW1saW5rYXQgcmVhZGxpbmsgcmVhZGxpbmthdAkJXAorIAl1bmxpbmsgdW5saW5rYXQgcm1kaXIJCQkJCQlcCistCWZ0dyBmdHc2NCBmdHMgcG9sbCBwcG9sbAkJCQkJXAorKwlwb2xsIHBwb2xsCQkJCQkJCVwKKyAJcG9zaXhfZmFkdmlzZSBwb3NpeF9mYWR2aXNlNjQJCQkJCVwKKyAJcG9zaXhfZmFsbG9jYXRlIHBvc2l4X2ZhbGxvY2F0ZTY0CQkJCVwKKyAJc2VuZGZpbGUgc2VuZGZpbGU2NCBcCisgCXV0aW1lbnNhdCBmdXRpbWVucworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CU0QpICs9IGxjaG1vZAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpICs9IGZ0dyBmdHc2NCBmdHMKKyAKKyBhdXggOj0gaGF2ZV9vX2Nsb2V4ZWMKKyAKK0BAIC02NCwxOCArNjgsMjIgQEAgc3RhdGljLW9ubHktcm91dGluZXMgPSBzdGF0IGZzdGF0IGxzdGF0IHN0YXQ2NCBmc3RhdDY0IGxzdGF0NjQJXAorIAkJICAgICAgIGZzdGF0YXQgZnN0YXRhdDY0IG1rbm9kIG1rbm9kYXQKKyAKKyBvdGhlcnMJCTo9IHB3ZAorLXRlc3Qtc3Jjcwk6PSBmdHd0ZXN0CisrdGVzdC1zcmNzLSQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpIDo9IGZ0d3Rlc3QKKyB0ZXN0cwkJOj0gdGVzdC11dGltZSB0ZXN0LXN0YXQgdGVzdC1zdGF0MiB0ZXN0LWxmcyB0c3QtZ2V0Y3dkIFwKKy0JCSAgIHRzdC1mY250bCBidWctZnR3MSBidWctZnR3MiBidWctZnR3MyBidWctZnR3NCB0c3Qtc3RhdHZmcyBcCisrCQkgICB0c3QtZmNudGwgdHN0LXN0YXR2ZnMgXAorIAkJICAgdHN0LW9wZW5hdCB0c3QtdW5saW5rYXQgdHN0LWZzdGF0YXQgdHN0LWZ1dGltZXNhdCBcCisgCQkgICB0c3QtcmVuYW1lYXQgdHN0LWZjaG93bmF0IHRzdC1mY2htb2RhdCB0c3QtZmFjY2Vzc2F0IFwKKyAJCSAgIHRzdC1zeW1saW5rYXQgdHN0LWxpbmthdCB0c3QtcmVhZGxpbmthdCB0c3QtbWtkaXJhdCBcCistCQkgICB0c3QtbWtub2RhdCB0c3QtbWtmaWZvYXQgdHN0LXR0eW5hbWVfciBidWctZnR3NSBcCisrCQkgICB0c3QtbWtub2RhdCB0c3QtbWtmaWZvYXQgdHN0LXR0eW5hbWVfciBcCisgCQkgICB0c3QtcG9zaXhfZmFsbG9jYXRlCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkgKz0gYnVnLWZ0dzEgYnVnLWZ0dzIgYnVnLWZ0dzMgYnVnLWZ0dzQgXAorKwkJCQkgICAgYnVnLWZ0dzUKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClmdHd0ZXN0Lm91dAorIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvbGliaWRuL01ha2VmaWxlIGIvbGliaWRuL01ha2VmaWxlCitpbmRleCA5NDBmYTUyLi40M2FhZDBjIDEwMDY0NAorLS0tIGEvbGliaWRuL01ha2VmaWxlCisrKysgYi9saWJpZG4vTWFrZWZpbGUKK0BAIC0xNiw2ICsxNiw3IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgIyBNYWtlZmlsZSBmb3IgbGliaWRuIHN1YmRpcmVjdG9yeSBvZiBHTlUgQyBMaWJyYXJ5LgorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyBzdWJkaXIJOj0gbGliaWRuCisgCitAQCAtMjMsOCArMjQsOCBAQCBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyByb3V0aW5lcyA9IGlkbi1zdHViCisgCistZXh0cmEtbGlicwkJPSBsaWJjaWRuCistZXh0cmEtbGlicy1vdGhlcnMJPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSUROKSA9IGxpYmNpZG4KKytleHRyYS1saWJzLW90aGVycy15ID0gJChleHRyYS1saWJzLXkpCisgCisgbGliY2lkbi1yb3V0aW5lcyA6PSBwdW55Y29kZSB0b3V0ZjggbmZrYyBzdHJpbmdwcmVwIHJmYzM0NTQgcHJvZmlsZXMgaWRuYSBcCisgCQkgICAgaWNvbnZtZQorZGlmZiAtLWdpdCBhL2xpYmlkbi90b3V0ZjguYyBiL2xpYmlkbi90b3V0ZjguYworaW5kZXggYzdlNjdjYS4uNjJkZjQ3OCAxMDA2NDQKKy0tLSBhL2xpYmlkbi90b3V0ZjguYworKysrIGIvbGliaWRuL3RvdXRmOC5jCitAQCAtMzMsNiArMzMsMTEgQEAKKyAvKiBHZXQgc3RybGVuLiAqLworICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysvKiBHZXQgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgLyogR2V0IGljb252X3N0cmluZy4gKi8KKyAjaW5jbHVkZSAiaWNvbnZtZS5oIgorIAorQEAgLTQ3LDcgKzUyLDExIEBACisgI2VuZGlmCisgCisgI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCgpIG5sX2xhbmdpbmZvIChDT0RFU0VUKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyAgZGVmaW5lIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQoKSBubF9sYW5naW5mbyAoQ09ERVNFVCkKKysjIGVsc2UKKysjICBkZWZpbmUgc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCgpICJBTlNJX1gzLjQtMTk2OCIKKysjIGVuZGlmCisgI2Vsc2UKKyAvKioKKyAgKiBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0IC0gcmV0dXJuIGNoYXJzZXQgdXNlZCBpbiBjdXJyZW50IGxvY2FsZQorZGlmZiAtLWdpdCBhL2xpYmlvL01ha2VmaWxlIGIvbGliaW8vTWFrZWZpbGUKK2luZGV4IDdiM2JjZjkuLjI3YzkxODYgMTAwNjQ0CistLS0gYS9saWJpby9NYWtlZmlsZQorKysrIGIvbGliaW8vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3BlY2lmaWMgbWFrZWZpbGUgZm9yIGxpYmlvLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGxpYmlvCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsMTYgKzI5LDEzIEBAIGhlYWRlcnMJOj0gc3RkaW8uaCBsaWJpby5oIF9HX2NvbmZpZy5oIGJpdHMvc3RkaW8uaCBiaXRzL3N0ZGlvLWxvY2suaCBcCisgCisgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlmaWxlZG9hbGxvYyBpb2ZjbG9zZSBpb2Zkb3BlbiBpb2ZmbHVzaCBpb2ZnZXRwb3MgaW9mZ2V0cyBpb2ZvcGVuICAgICAgXAorLQlpb2ZvcG5jb29rIGlvZnB1dHMgaW9mcmVhZCBpb2ZzZXRwb3MgaW9mdGVsbCB3ZmlsZWRvYWxsb2MJICAgICAgXAorKwlpb2ZvcG5jb29rIGlvZnB1dHMgaW9mcmVhZCBpb2ZzZXRwb3MgaW9mdGVsbAkJCSAgICAgIFwKKyAJaW9md3JpdGUgaW9nZXRkZWxpbSBpb2dldGxpbmUgaW9nZXRzIGlvcGFkbiBpb3BvcGVuIGlvcHV0cwkgICAgICBcCisgCWlvc2Vla29mZiBpb3NlZWtwb3MgaW9zZXRidWZmZXIgaW9zZXR2YnVmIGlvdW5nZXRjCQkgICAgICBcCisgCWlvdnNwcmludGYgaW92c3NjYW5mCQkJCQkJICAgICAgXAorIAlpb2ZnZXRwb3M2NCBpb2ZvcGVuNjQgaW9mc2V0cG9zNjQJCQkJICAgICAgXAorLQlmcHV0d2MgZnB1dHdjX3UgZ2V0d2MgZ2V0d2NfdSBnZXR3Y2hhciBnZXR3Y2hhcl91IGlvZmdldHdzIGlvZmdldHdzX3UgXAorLQlpb2ZwdXR3cyBpb2ZwdXR3c191IGlvZ2V0d2xpbmUgaW93cGFkbiBpb3VuZ2V0d2MgcHV0d2MgcHV0d2NfdQkgICAgICBcCistCXB1dHdjaGFyIHB1dHdjaGFyX3UgcHV0Y2hhciBwdXRjaGFyX3UgZndwcmludGYgc3dwcmludGYgdndwcmludGYgICAgICBcCistCXdwcmludGYgd3NjYW5mIGZ3c2NhbmYgdndzY2FuZiB2c3dwcmludGYgaW92c3dzY2FuZiBzd3NjYW5mIHdnZW5vcHMgICBcCistCXdzdHJvcHMgd2ZpbGVvcHMgaW9md2lkZSBmd2lkZSB3bWVtc3RyZWFtCQkJICAgICAgXAorKwlwdXRjaGFyIHB1dGNoYXJfdQkJCQkJCSAgICAgIFwKKysJaW9md2lkZQkJCQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAJY2xlYXJlcnIgZmVvZiBmZXJyb3IgZmlsZW5vIGZwdXRjIGZyZW9wZW4gZnNlZWsgZ2V0YyBnZXRjaGFyCSAgICAgIFwKKyAJbWVtc3RyZWFtIHBjbG9zZSBwdXRjIHB1dGNoYXIgcmV3aW5kIHNldGJ1ZiBzZXRsaW5lYnVmIHZhc3ByaW50ZiAgICAgIFwKK0BAIC00OCwyNCArNDcsNDkgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAJbGliY19mYXRhbCBmbWVtb3BlbiBvbGRmbWVtb3BlbgorIAorLXRlc3RzID0gdHN0X3N3cHJpbnRmIHRzdF93cHJpbnRmIHRzdF9zd3NjYW5mIHRzdF93c2NhbmYgdHN0X2dldHdjIHRzdF9wdXR3YyAgIFwKKy0JdHN0X3dwcmludGYyIHRzdC13aWRldGV4dCB0ZXN0LWZtZW1vcGVuIHRzdC1leHQgdHN0LWV4dDIgXAorLQl0c3QtZmdldHdzIHRzdC11bmdldHdjMSB0c3QtdW5nZXR3YzIgdHN0LXN3c2NhbmYgdHN0LXNzY2FuZgkgICAgICBcCistCXRzdC1tbWFwLXNldHZidWYgYnVnLXVuZ2V0d2MxIGJ1Zy11bmdldHdjMiB0c3QtYXRpbWUgdHN0LWVvZiAgICAgICAgICBcCistCXRzdC1mcmVvcGVuIGJ1Zy1yZXdpbmQgYnVnLXJld2luZDIgYnVnLXVuZ2V0YyBidWctZnNlZWsgXAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9CQkJCSAgICAgIFwKKysJd2ZpbGVkb2FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJaW93cGFkbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJc3dwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJdnN3cHJpbnRmIGlvdnN3c2NhbmYgc3dzY2FuZiB3Z2Vub3BzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJd3N0cm9wcyB3ZmlsZW9wcyB3bWVtc3RyZWFtCisrcm91dGluZXMtJChjYWxsIG9wdGlvbi1kaXNhYmxlZCwgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9CSAgICAgIFwKKysJd2R1bW15ZmlsZW9wcworK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICs9CQkJCSAgICAgIFwKKysJZnB1dHdjIGZwdXR3Y191IGdldHdjIGdldHdjX3UgZ2V0d2NoYXIgZ2V0d2NoYXJfdSBpb2ZnZXR3cyBpb2ZnZXR3c191IFwKKysJaW9mcHV0d3MgaW9mcHV0d3NfdSBpb2dldHdsaW5lIGlvdW5nZXR3YyBwdXR3YyBwdXR3Y191ICAgICAgICAgICAgICAgIFwKKysJcHV0d2NoYXIgcHV0d2NoYXJfdSBmd3ByaW50ZiB2d3ByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJd3ByaW50ZiB3c2NhbmYgZndzY2FuZiB2d3NjYW5mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJZndpZGUKKysKKyt0ZXN0cyA9IHRlc3QtZm1lbW9wZW4gdHN0LWV4dCB0c3QtZXh0MiBcCisrCXRzdC1tbWFwLXNldHZidWYgdHN0LWF0aW1lIHRzdC1lb2YgXAorKwl0c3QtZnJlb3BlbiBidWctdW5nZXRjIGJ1Zy1mc2VlayBcCisgCXRzdC1tbWFwLWVvZnN5bmMgdHN0LW1tYXAtZmZsdXNoc3luYyBidWctbW1hcC1mZmx1c2ggXAorLQl0c3QtbW1hcDItZW9mc3luYyB0c3QtbW1hcC1vZmZlbmQgYnVnLWZvcGVuYSsgYnVnLXdmZmx1c2ggXAorLQlidWctdW5nZXRjMiBidWctZnRlbGwgYnVnLXVuZ2V0YzMgYnVnLXVuZ2V0YzQgdHN0LWZvcGVubG9jMiBcCisrCXRzdC1tbWFwMi1lb2ZzeW5jIHRzdC1tbWFwLW9mZmVuZCBidWctZm9wZW5hKyBcCisrCWJ1Zy11bmdldGMyIGJ1Zy11bmdldGMzIGJ1Zy11bmdldGM0IFwKKyAJdHN0LW1lbXN0cmVhbTEgdHN0LW1lbXN0cmVhbTIgXAorLQl0c3Qtd21lbXN0cmVhbTEgdHN0LXdtZW1zdHJlYW0yIFwKKy0JYnVnLW1lbXN0cmVhbTEgYnVnLXdtZW1zdHJlYW0xIFwKKy0JdHN0LXNldHZidWYxIHRzdC1wb3BlbjEgdHN0LWZnZXR3YyBidWctd3NldHBvcyB0c3QtZnNlZWsgXAorLQl0c3QtZndyaXRlLWVycm9yIHRzdC1mdGVsbC1wYXJ0aWFsLXdpZGUgdHN0LWZ0ZWxsLWFjdGl2ZS1oYW5kbGVyIFwKKy0JdHN0LWZ0ZWxsLWFwcGVuZCB0c3QtZnB1dHdzCisrCWJ1Zy1tZW1zdHJlYW0xIHRzdC1wb3BlbjEgdHN0LWZ3cml0ZS1lcnJvciBcCisrCXRzdC1mdGVsbC1hY3RpdmUtaGFuZGxlciB0c3QtZnRlbGwtYXBwZW5kCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSs9IHRzdC1zd3NjYW5mIHRzdC1mZ2V0d3MgdHN0LXNldHZidWYxIFwKKysJdHN0LXVuZ2V0d2MxIHRzdC11bmdldHdjMiBidWctZnRlbGwgYnVnLXVuZ2V0d2MyIFwKKysJdHN0LXdpZGV0ZXh0IHRzdC1mcHV0d3MKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSBcCisrCSs9IGJ1Zy1yZXdpbmQgYnVnLXJld2luZDIgYnVnLXVuZ2V0d2MxIFwKKysJYnVnLXdmZmx1c2ggYnVnLXdtZW1zdHJlYW0xIHRzdC1mb3BlbmxvYzIgXAorKwl0c3RfZ2V0d2MgXAorKwl0c3RfcHV0d2MgdHN0X3dwcmludGYgdHN0X3dwcmludGYyIHRzdF93c2NhbmYgXAorKwl0c3QtZmdldHdjIGJ1Zy13c2V0cG9zIHRzdC1mc2VlayB0c3QtZnRlbGwtcGFydGlhbC13aWRlCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkrPSB0c3Rfc3dwcmludGYgdHN0X3N3c2NhbmYgXAorKwl0c3Qtc3NjYW5mIFwKKysJdHN0LXdtZW1zdHJlYW0xIHRzdC13bWVtc3RyZWFtMgorKworIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBBZGQgdGVzdC1mb3BlbmxvYyBvbmx5IGlmIHNoYXJlZCBsaWJyYXJ5IGlzIGVuYWJsZWQgc2luY2UgaXQgZGVwZW5kcyBvbgorICMgc2hhcmVkIGxvY2FsZWRhdGEgb2JqZWN0cy4KKy10ZXN0cyArPSB0c3QtZm9wZW5sb2MKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHRzdC1mb3BlbmxvYworIGVuZGlmCisgdGVzdC1zcmNzID0gdGVzdC1mcmVvcGVuCisgCitAQCAtMTY0LDEzICsxODgsMTcgQEAgc2hhcmVkLW9ubHktcm91dGluZXMgPSBvbGRpb2ZvcGVuIG9sZGlvZmRvcGVuIG9sZGlvZmNsb3NlIG9sZGZpbGVvcHMJXAorIAkJICAgICAgIG9sZGlvZnNldHBvczY0CisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdGVzdC1mcmVvcGVuLm91dAorK2VuZGlmCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBSdW4gdHN0LWZvcGVubG9jLWNtcC5vdXQgYW5kIHRzdC1vcGVubG9jLW1lbS5vdXQgb25seSBpZiBzaGFyZWQKKyAjIGxpYnJhcnkgaXMgZW5hYmxlZCBzaW5jZSB0aGV5IGRlcGVuZCBvbiB0c3QtZm9wZW5sb2Mub3V0LgorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWZvcGVubG9jLWNtcC5vdXQgJChvYmpwZngpdHN0LWZvcGVubG9jLW1lbS5vdXQKKyBlbmRpZgorIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvbGliaW8vX19mcHVyZ2UuYyBiL2xpYmlvL19fZnB1cmdlLmMKK2luZGV4IDA2NWNmNjEuLmUzMmEzZTkgMTAwNjQ0CistLS0gYS9saWJpby9fX2ZwdXJnZS5jCisrKysgYi9saWJpby9fX2ZwdXJnZS5jCitAQCAtMjEsNyArMjEsNyBAQAorIHZvaWQKKyBfX2ZwdXJnZSAoRklMRSAqZnApCisgeworLSAgaWYgKGZwLT5fbW9kZSA+IDApCisrICBpZiAoX0lPX2lzX3dpZGUgKGZwKSkKKyAgICAgeworICAgICAgIC8qIFdpZGUtY2hhciBzdHJlYW0uICAqLworICAgICAgIGlmIChfSU9faW5fYmFja3VwIChmcCkpCitkaWZmIC0tZ2l0IGEvbGliaW8vZmlsZW9wcy5jIGIvbGliaW8vZmlsZW9wcy5jCitpbmRleCBjYmNkNmY1Li4xOWU0M2MyIDEwMDY0NAorLS0tIGEvbGliaW8vZmlsZW9wcy5jCisrKysgYi9saWJpby9maWxlb3BzLmMKK0BAIC0zOSw2ICszOSw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2lmIF9MSUJDCisgIyBpbmNsdWRlICIuLi93Y3NtYnMvd2NzbWJzbG9hZC5oIgorQEAgLTE3Myw3ICsxNzQsNyBAQCBfSU9fbmV3X2ZpbGVfY2xvc2VfaXQgKF9JT19GSUxFICpmcCkKKyAKKyAgIC8qIEZyZWUgYnVmZmVyLiAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgX0dMSUJDUFBfVVNFX1dDSEFSX1QKKy0gIGlmIChmcC0+X21vZGUgPiAwKQorKyAgaWYgKF9JT19pc193aWRlIChmcCkpCisgICAgIHsKKyAgICAgICBpZiAoX0lPX2hhdmVfd2JhY2t1cCAoZnApKQorIAlfSU9fZnJlZV93YmFja3VwX2FyZWEgKGZwKTsKK0BAIC0zNDgsNiArMzQ5LDcgQEAgX0lPX25ld19maWxlX2ZvcGVuIChfSU9fRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlLAorICAgICAgIGNzID0gc3Ryc3RyIChsYXN0X3JlY29nbml6ZWQgKyAxLCAiLGNjcz0iKTsKKyAgICAgICBpZiAoY3MgIT0gTlVMTCkKKyAJeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgCSAgLyogWWVwLiAgTG9hZCB0aGUgYXBwcm9wcmlhdGUgY29udmVyc2lvbnMgYW5kIHNldCB0aGUgb3JpZW50YXRpb24KKyAJICAgICB0byB3aWRlLiAgKi8KKyAJICBzdHJ1Y3QgZ2NvbnZfZmN0cyBmY3RzOworQEAgLTQxOCw2ICs0MjAsMTIgQEAgX0lPX25ld19maWxlX2ZvcGVuIChfSU9fRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlLAorIAorIAkgIC8qIFNldCB0aGUgbW9kZSBub3cuICAqLworIAkgIHJlc3VsdC0+X21vZGUgPSAxOworKyNlbHNlCisrICAgICAgICAgIC8qIFRyZWF0IHRoaXMgYXMgaWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHNldC4gICovCisrICAgICAgICAgICh2b2lkKSBfSU9fZmlsZV9jbG9zZV9pdCAoZnApOworKyAgICAgICAgICBfX3NldF9lcnJubyAoRUlOVkFMKTsKKysgICAgICAgICAgcmV0dXJuIE5VTEw7CisrI2VuZGlmCisgCX0KKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYmlvL2lvZndpZGUuYyBiL2xpYmlvL2lvZndpZGUuYworaW5kZXggMGMxNzVkMS4uM2U5ZjUyYiAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvZndpZGUuYworKysrIGIvbGliaW8vaW9md2lkZS5jCitAQCAtMjYsNiArMjYsNyBAQAorIAorICNpbmNsdWRlIDxsaWJpb1AuaD4KKyAjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBpbmNsdWRlIDxkbGZjbi5oPgorICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAjZW5kaWYKK0BAIC00Myw2ICs0NCw4IEBACisgI2VuZGlmCisgCisgCisrI2lmICEgZGVmaW5lZCBfTElCQyB8fCBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrCisgLyogUHJvdG90eXBlcyBvZiBsaWJpbydzIGNvZGVjdnQgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgZW51bSBfX2NvZGVjdnRfcmVzdWx0IGRvX291dCAoc3RydWN0IF9JT19jb2RlY3Z0ICpjb2RlY3Z0LAorIAkJCQkgICAgIF9fbWJzdGF0ZV90ICpzdGF0ZXAsCitAQCAtNDk5LDMgKzUwMiwyNiBAQCBkb19tYXhfbGVuZ3RoIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKmNvZGVjdnQpCisgICByZXR1cm4gTUJfQ1VSX01BWDsKKyAjZW5kaWYKKyB9CisrCisrI2Vsc2UKKysvKiBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZC4gICovCisrCisrI3VuZGVmIF9JT19md2lkZQorK2ludAorK19JT19md2lkZSAoZnAsIG1vZGUpCisrICAgICBfSU9fRklMRSAqZnA7CisrICAgICBpbnQgbW9kZTsKKyt7CisrICAvKiBEaWUgaGVscGZ1bGx5IGlmIHRoZSB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBhIHdpZGUgc3RyZWFtOyBJCisrICAgICBkaXNiZWxpZXZlIHRoYXQgbW9zdCB1c2VycyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIGZyb20KKysgICAgICdmd2lkZSAoZnAsIDEpJy4gICovCisrICBhc3NlcnQgKG1vZGUgPD0gMCk7CisrCisrICAvKiBXZSBjYW4gb25seSBtYWtlIHN0cmVhbXMgYnl0ZS1vcmllbnRlZCwgd2hpY2ggaXMgdHJpdmlhbC4gICovCisrICBpZiAobW9kZSA8IDApCisrICAgIGZwLT5fbW9kZSA9IC0xOworKworKyAgcmV0dXJuIGZwLT5fbW9kZTsKKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGliaW8vaW9zZWVrb2ZmLmMgYi9saWJpby9pb3NlZWtvZmYuYworaW5kZXggMTE3NjVjZi4uMTVkNjIzMCAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvc2Vla29mZi5jCisrKysgYi9saWJpby9pb3NlZWtvZmYuYworQEAgLTYwLDcgKzYwLDcgQEAgX0lPX3NlZWtvZmZfdW5sb2NrZWQgKGZwLCBvZmZzZXQsIGRpciwgbW9kZSkKKyAJICBlbHNlCisgCSAgICBhYm9ydCAoKTsKKyAJfQorLSAgICAgIGlmIChfSU9fZndpZGUgKGZwLCAwKSA8IDApCisrICAgICAgaWYgKCEgX0lPX2lzX3dpZGUgKGZwKSkKKyAJX0lPX2ZyZWVfYmFja3VwX2FyZWEgKGZwKTsKKyAgICAgICBlbHNlCisgCV9JT19mcmVlX3diYWNrdXBfYXJlYSAoZnApOworZGlmZiAtLWdpdCBhL2xpYmlvL2lvc2Vla3Bvcy5jIGIvbGliaW8vaW9zZWVrcG9zLmMKK2luZGV4IGE3NjUyYTEuLjY5MzhiNjggMTAwNjQ0CistLS0gYS9saWJpby9pb3NlZWtwb3MuYworKysrIGIvbGliaW8vaW9zZWVrcG9zLmMKK0BAIC0zNSw3ICszNSw3IEBAIF9JT19zZWVrcG9zX3VubG9ja2VkIChmcCwgcG9zLCBtb2RlKQorICAgLyogSWYgd2UgaGF2ZSBhIGJhY2t1cCBidWZmZXIsIGdldCByaWQgb2YgaXQsIHNpbmNlIHRoZSBfX3NlZWtvZmYKKyAgICAgIGNhbGxiYWNrIG1heSBub3Qga25vdyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYWJvdXQgaXQuCisgICAgICBUaGlzIG1heSBiZSBvdmVyLWtpbGwsIGJ1dCBpdCdsbCBkbyBmb3Igbm93LiBUT0RPICovCistICBpZiAoX0lPX2Z3aWRlIChmcCwgMCkgPD0gMCkKKysgIGlmICghIF9JT19pc193aWRlIChmcCkpCisgICAgIHsKKyAgICAgICBpZiAoX0lPX2hhdmVfYmFja3VwIChmcCkpCisgCV9JT19mcmVlX2JhY2t1cF9hcmVhIChmcCk7CitkaWZmIC0tZ2l0IGEvbGliaW8vaW9zZXRidWZmZXIuYyBiL2xpYmlvL2lvc2V0YnVmZmVyLmMKK2luZGV4IDBhNDFjMTAuLjNkOTlmYTAgMTAwNjQ0CistLS0gYS9saWJpby9pb3NldGJ1ZmZlci5jCisrKysgYi9saWJpby9pb3NldGJ1ZmZlci5jCitAQCAtMjQsNiArMjQsOCBAQAorICAgIFRoaXMgZXhjZXB0aW9uIGFwcGxpZXMgdG8gY29kZSByZWxlYXNlZCBieSBpdHMgY29weXJpZ2h0IGhvbGRlcnMKKyAgICBpbiBmaWxlcyBjb250YWluaW5nIHRoZSBleGNlcHRpb24uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKworICNpbmNsdWRlICJsaWJpb1AuaCIKKyAKKyB2b2lkCitAQCAtMzgsOSArNDAsMTEgQEAgX0lPX3NldGJ1ZmZlciAoZnAsIGJ1Ziwgc2l6ZSkKKyAgIGlmICghYnVmKQorICAgICBzaXplID0gMDsKKyAgICh2b2lkKSBfSU9fU0VUQlVGIChmcCwgYnVmLCBzaXplKTsKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaWYgKF9JT192dGFibGVfb2Zmc2V0IChmcCkgPT0gMCAmJiBmcC0+X21vZGUgPT0gMCAmJiBfSU9fQ0hFQ0tfV0lERSAoZnApKQorICAgICAvKiBXZSBhbHNvIGhhdmUgdG8gc2V0IHRoZSBidWZmZXIgdXNpbmcgdGhlIHdpZGUgY2hhciBmdW5jdGlvbi4gICovCisgICAgICh2b2lkKSBfSU9fV1NFVEJVRiAoZnAsIGJ1Ziwgc2l6ZSk7CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAgIF9JT19yZWxlYXNlX2xvY2sgKGZwKTsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfSU9fc2V0YnVmZmVyKQorZGlmZiAtLWdpdCBhL2xpYmlvL2xpYmlvUC5oIGIvbGliaW8vbGliaW9QLmgKK2luZGV4IDBmMTZlMmQuLmQyNjI2ZDYgMTAwNjQ0CistLS0gYS9saWJpby9saWJpb1AuaAorKysrIGIvbGliaW8vbGliaW9QLmgKK0BAIC00NCw2ICs0NCwxMCBAQAorIC8qIyBpbmNsdWRlIDxjb210aHJlYWQuaD4qLworICNlbmRpZgorIAorKyNpZiBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxtYXRoX2xkYmxfb3B0Lmg+CisgCisgI2luY2x1ZGUgImlvbGliaW8uaCIKK0BAIC01MjMsOCArNTI3LDIwIEBAIGV4dGVybiB2b2lkIF9JT19vbGRfaW5pdCAoX0lPX0ZJTEUgKmZwLCBpbnQgZmxhZ3MpIF9fVEhST1c7CisgCisgCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorKworKy8qIF9JT19pc193aWRlIChmcCkgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvICdfSU9fZndpZGUgKGZwLCAwKSA+IDAnLAorKyAgIGV4Y2VwdCB0aGF0IHdoZW4gT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGl0CisrICAgZXhwYW5kcyB0byBhIGNvbnN0YW50LCBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gcmVhbGl6ZSB0aGF0IGl0IGNhbgorKyAgIGVsaW1pbmF0ZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB3aWRlIHN0cmVhbSBoYW5kbGluZyBmdW5jdGlvbnMuCisrICAgVGhpcywgaW4gdHVybiwgYWxsb3dzIHVzIHRvIG9taXQgdGhlbS4gICovCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysjIGRlZmluZSBfSU9faXNfd2lkZShfZikgKChfZiktPl9tb2RlID4gMCkKKysjZWxzZQorKyMgZGVmaW5lIF9JT19pc193aWRlKF9mKSAoMCkKKysjZW5kaWYKKysKKyAjIGRlZmluZSBfSU9fZG9fZmx1c2goX2YpIFwKKy0gICgoX2YpLT5fbW9kZSA8PSAwCQkJCQkJCSAgICAgIFwKKysgICghIF9JT19pc193aWRlIChfZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgPyBfSU9fZG9fd3JpdGUoX2YsIChfZiktPl9JT193cml0ZV9iYXNlLAkJCQkgICAgICBcCisgCQkgIChfZiktPl9JT193cml0ZV9wdHItKF9mKS0+X0lPX3dyaXRlX2Jhc2UpCQkgICAgICBcCisgICAgOiBfSU9fd2RvX3dyaXRlKF9mLCAoX2YpLT5fd2lkZV9kYXRhLT5fSU9fd3JpdGVfYmFzZSwJCSAgICAgIFwKK2RpZmYgLS1naXQgYS9saWJpby93ZHVtbXlmaWxlb3BzLmMgYi9saWJpby93ZHVtbXlmaWxlb3BzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMDE1MGI4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJpby93ZHVtbXlmaWxlb3BzLmMKK0BAIC0wLDAgKzEsMTYxIEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBsaW5rIHRoZSBjb2RlIGluIHRoaXMgZmlsZSB3aXRoCisrICAgZmlsZXMgY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsCisrICAgdGhhdCBkb2VzIG5vdCBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKyAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdAorKyAgIGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZQorKyAgIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysgICBUaGlzIGV4Y2VwdGlvbiBhcHBsaWVzIHRvIGNvZGUgcmVsZWFzZWQgYnkgaXRzIGNvcHlyaWdodCBob2xkZXJzCisrICAgaW4gZmlsZXMgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uLiAgKi8KKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxsaWJpb1AuaD4KKysKKytzdGF0aWMgdm9pZCBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorK19JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAodm9pZCkKKyt7CisrICBzdGF0aWMgY29uc3QgY2hhciBlcnJzdHJbXQorKyAgICA9ICgiVGhlIGFwcGxpY2F0aW9uIHRyaWVkIHRvIHVzZSB3aWRlIGNoYXJhY3RlciBJL08sIGJ1dCBsaWJjLnNvIgorKyAgICAgICAiIHdhcyBjb21waWxlZFxuIgorKyAgICAgICAid2l0aCB0aGUgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgb3B0aW9uIGdyb3VwIGRpc2FibGVkLlxuIik7CisrICBfX2xpYmNfd3JpdGUgKFNUREVSUl9GSUxFTk8sIGVycnN0ciwgc2l6ZW9mIChlcnJzdHIpIC0gMSk7CisrICBhYm9ydCAoKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfdm9pZF9pbnQgKF9JT19GSUxFICpmcCwgaW50IHgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9pbnQgKF9JT19GSUxFICpmcCwgaW50IHgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lIChfSU9fRklMRSAqZnApCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF94c3B1dG4gKF9JT19GSUxFICpmcCwgY29uc3Qgdm9pZCAqZGF0YSwgX0lPX3NpemVfdCBuKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfeHNnZXRuIChfSU9fRklMRSAqZnAsIHZvaWQgKmRhdGEsIF9JT19zaXplX3QgbikKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fb2ZmNjRfdAorK19JT193ZmlsZV9kaXNhYmxlZF9zZWVrb2ZmIChfSU9fRklMRSAqZnAsIF9JT19vZmY2NF90IG9mZiwgaW50IGRpciwgaW50IG1vZGUpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX29mZjY0X3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla3BvcyAoX0lPX0ZJTEUgKmZwLCBfSU9fb2ZmNjRfdCBwb3MsIGludCBmbGFncykKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fRklMRSAqCisrX0lPX3dmaWxlX2Rpc2FibGVkX3NldGJ1ZiAoX0lPX0ZJTEUgKmZwLCBjaGFyICpidWZmZXIsIF9JT19zc2l6ZV90IGxlbmd0aCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF9yZWFkIChfSU9fRklMRSAqZnAsIHZvaWQgKmJ1ZmZlciwgX0lPX3NzaXplX3QgbGVuZ3RoKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3dyaXRlIChfSU9fRklMRSAqZnAsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgX0lPX3NzaXplX3QgbGVuZ3RoKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19vZmY2NF90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWsgKF9JT19GSUxFICpmcCwgX0lPX29mZjY0X3Qgb2Zmc2V0LCBpbnQgbW9kZSkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfY2xvc2UgKF9JT19GSUxFICpmcCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc3RhdCAoX0lPX0ZJTEUgKmZwLCB2b2lkICpidWYpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX3Nob3dtYW55YyAoX0lPX0ZJTEUgKmZwKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfaW1idWUgKF9JT19GSUxFICpmcCwgdm9pZCAqbG9jYWxlKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBfSU9fanVtcF90IF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCA9CisreworKyAgSlVNUF9JTklUX0RVTU1ZLAorKyAgSlVNUF9JTklUKGZpbmlzaCwgX0lPX3dmaWxlX2Rpc2FibGVkX3ZvaWRfaW50KSwKKysgIEpVTVBfSU5JVChvdmVyZmxvdywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9pbnQpLAorKyAgSlVNUF9JTklUKHVuZGVyZmxvdywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVCh1ZmxvdywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVChwYmFja2ZhaWwsIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfaW50KSwKKysgIEpVTVBfSU5JVCh4c3B1dG4sIF9JT193ZmlsZV9kaXNhYmxlZF94c3B1dG4pLAorKyAgSlVNUF9JTklUKHhzZ2V0biwgX0lPX3dmaWxlX2Rpc2FibGVkX3hzZ2V0biksCisrICBKVU1QX0lOSVQoc2Vla29mZiwgX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtvZmYpLAorKyAgSlVNUF9JTklUKHNlZWtwb3MsIF9JT193ZmlsZV9kaXNhYmxlZF9zZWVrcG9zKSwKKysgIEpVTVBfSU5JVChzZXRidWYsIF9JT193ZmlsZV9kaXNhYmxlZF9zZXRidWYpLAorKyAgSlVNUF9JTklUKHN5bmMsIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQoZG9hbGxvY2F0ZSwgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVChyZWFkLCBfSU9fd2ZpbGVfZGlzYWJsZWRfcmVhZCksCisrICBKVU1QX0lOSVQod3JpdGUsIF9JT193ZmlsZV9kaXNhYmxlZF93cml0ZSksCisrICBKVU1QX0lOSVQoc2VlaywgX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWspLAorKyAgSlVNUF9JTklUKGNsb3NlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfY2xvc2UpLAorKyAgSlVNUF9JTklUKHN0YXQsIF9JT193ZmlsZV9kaXNhYmxlZF9zdGF0KSwKKysgIEpVTVBfSU5JVChzaG93bWFueWMsIF9JT193ZmlsZV9kaXNhYmxlZF9zaG93bWFueWMpLAorKyAgSlVNUF9JTklUKGltYnVlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW1idWUpCisrfTsKKysKKytzdHJvbmdfYWxpYXMgKF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCwgX0lPX3dmaWxlX2p1bXBzKQorK2xpYmNfaGlkZGVuX2RhdGFfZGVmIChfSU9fd2ZpbGVfanVtcHMpCisrc3Ryb25nX2FsaWFzIChfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQsIF9JT193ZmlsZV9qdW1wc19tbWFwKQorK3N0cm9uZ19hbGlhcyAoX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkLCBfSU9fd2ZpbGVfanVtcHNfbWF5YmVfbW1hcCkKK2RpZmYgLS1naXQgYS9sb2NhbGUvQy1jdHlwZS5jIGIvbG9jYWxlL0MtY3R5cGUuYworaW5kZXggYWE1ZjE5Zi4uMDZiZTA4MSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9DLWN0eXBlLmMKKysrKyBiL2xvY2FsZS9DLWN0eXBlLmMKK0BAIC0xOSw4ICsxOSwxMSBAQAorICNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCisgI2luY2x1ZGUgPGVuZGlhbi5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgI2luY2x1ZGUgIkMtdHJhbnNsaXQuaCIKKysjZW5kaWYKKyAKKyAvKiBUaGlzIHRhYmxlJ3MgZW50cmllcyBhcmUgdGFrZW4gZnJvbSBQT1NJWC4yIFRhYmxlIDItNgorICAgIGBgTENfQ1RZUEUgQ2F0ZWdvcnkgRGVmaW5pdGlvbiBpbiB0aGUgUE9TSVggTG9jYWxlJycuCitAQCAtNjM0LDYgKzYzNyw3IEBAIGNvbnN0IHN0cnVjdCBfX2xvY2FsZV9kYXRhIF9ubF9DX0xDX0NUWVBFIGF0dHJpYnV0ZV9oaWRkZW4gPQorICAgICB7IC53b3JkID0gTCc3JyB9LAorICAgICB7IC53b3JkID0gTCc4JyB9LAorICAgICB7IC53b3JkID0gTCc5JyB9LAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFICovCisgICAgIHsgLndvcmQgPSBOVFJBTlNMSVQgfSwKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYICovCitAQCAtNjQ0LDYgKzY0OCwyMiBAQCBjb25zdCBzdHJ1Y3QgX19sb2NhbGVfZGF0YSBfbmxfQ19MQ19DVFlQRSBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgICAgeyAud3N0ciA9IHRyYW5zbGl0X3RvX2lkeCB9LAorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMICovCisgICAgIHsgLndzdHIgPSAodWludDMyX3QgKikgdHJhbnNsaXRfdG9fdGJsIH0sCisrI2Vsc2UKKysgICAgLyogSWYgdGhlIGxvY2FsZSBjb2RlIGlzbid0IGVuYWJsZWQsIHdlIGRvbid0IGhhdmUgdGhlCisrICAgICAgIHRyYW5zbGl0ZXJhdGlvbiBjb2RlIGluIGljb252L2djb252X3RyYW5zLmMgYW55d2F5LCBzbyB0aGVyZSdzCisrICAgICAgIG5vIG5lZWQgZm9yIHRoZSB0cmFuc2xpdGVyYXRpb24gdGFibGVzIGhlcmUuICBXZSdsbCBmYWxsIGJhY2sKKysgICAgICAgb24gdGhlIGRlZmF1bHQgbWlzc2luZyByZXBsYWNlbWVudCwgJz8nLiAgKi8KKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFICovCisrICAgIHsgLndvcmQgPSAwIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkwgKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrI2VuZGlmCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOICovCisgICAgIHsgLndvcmQgPSAxIH0sCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcgKi8KK2RpZmYgLS1naXQgYS9sb2NhbGUvTWFrZWZpbGUgYi9sb2NhbGUvTWFrZWZpbGUKK2luZGV4IGYxYjQzNDMuLjU5OWExYTkgMTAwNjQ0CistLS0gYS9sb2NhbGUvTWFrZWZpbGUKKysrKyBiL2xvY2FsZS9NYWtlZmlsZQorQEAgLTE4LDI3ICsxOCw0MyBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBsb2NhbGVzLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGxvY2FsZQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCT0gbG9jYWxlLmggYml0cy9sb2NhbGUuaCBsYW5naW5mby5oIHhsb2NhbGUuaAorLXJvdXRpbmVzCT0gc2V0bG9jYWxlIGZpbmRsb2NhbGUgbG9hZGxvY2FsZSBsb2FkYXJjaGl2ZSBcCistCQkgIGxvY2FsZWNvbnYgbmxfbGFuZ2luZm8gbmxfbGFuZ2luZm9fbCBtYl9jdXJfbWF4IFwKKy0JCSAgbmV3bG9jYWxlIGR1cGxvY2FsZSBmcmVlbG9jYWxlIHVzZWxvY2FsZQorLXRlc3RzCQk9IHRzdC1DLWxvY2FsZSB0c3QtbG9jbmFtZSB0c3QtZHVwbG9jYWxlCisrIyBjYXRuYW1lcyBpcyBuZWVkZWQgYnkgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBhbmQgYnkgdGhlICdpbnRsJyBjb2RlLgorKyMgSWYgd2UgcHV0IHRoZSBsYXR0ZXIgaW4gYW4gb3B0aW9uIGdyb3VwLCB0b28sIHdlIGNhbiBvbWl0IGNhdG5hbWVzCisrIyB3aGVuIGJvdGggb3B0aW9uIGdyb3VwcyBhcmUgZGlzYWJsZWQuICBsaWJzdGRjKystdjMgbmVlZHMgbWJfY3VyX21heC4KKytyb3V0aW5lcy15ICAgICAgOj0gY2F0bmFtZXMgbWJfY3VyX21heAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gc2V0bG9jYWxlIGZpbmRsb2NhbGUgbG9hZGxvY2FsZSBsb2FkYXJjaGl2ZSBcCisrCQkgICBsb2NhbGVjb252IG5sX2xhbmdpbmZvIG5sX2xhbmdpbmZvX2wgXAorKwkJICAgbmV3bG9jYWxlIGR1cGxvY2FsZSBmcmVlbG9jYWxlIHVzZWxvY2FsZQorK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisrcm91dGluZXMteQkrPSBkdW1teS1zZXRsb2NhbGUKKytlbmRpZgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gdHN0LUMtbG9jYWxlIHRzdC1sb2NuYW1lIHRzdC1kdXBsb2NhbGUKKyBjYXRlZ29yaWVzCT0gY3R5cGUgbWVzc2FnZXMgbW9uZXRhcnkgbnVtZXJpYyB0aW1lIHBhcGVyIG5hbWUgXAorIAkJICBhZGRyZXNzIHRlbGVwaG9uZSBtZWFzdXJlbWVudCBpZGVudGlmaWNhdGlvbiBjb2xsYXRlCistYXV4CQk9ICQoY2F0ZWdvcmllczolPWxjLSUpICQoY2F0ZWdvcmllczolPUMtJSkgU1lTX2xpYmMgQ19uYW1lIFwKKy0JCSAgeGxvY2FsZSBsb2NhbGVuYW1lIGdsb2JhbC1sb2NhbGUgY29sbC1sb29rdXAKKy1vdGhlcnMJCT0gbG9jYWxlZGVmIGxvY2FsZQorKyMgQy1tZXNzYWdlcyBiZWxvbmdzIGluIGFuIGludGwgb3B0aW9uIGdyb3VwLgorK2F1eC15CQk6PSBDLWN0eXBlIEMtdGltZSBcCisrCQkgICBTWVNfbGliYyBDX25hbWUgeGxvY2FsZSBnbG9iYWwtbG9jYWxlIGNvbGwtbG9va3VwCisrYXV4LSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gJChmaWx0ZXItb3V0ICQoYXV4LXkpLCBcCisrCSAgICAgICAgICAgICAgICAgICAgICAgICQoY2F0ZWdvcmllczolPWxjLSUpICQoY2F0ZWdvcmllczolPUMtJSkpIFwKKysJICAgICAgICAgICBsb2NhbGVuYW1lCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgPSBsb2NhbGVkZWYgbG9jYWxlCisgI290aGVycy1zdGF0aWMJPSBsb2NhbGVkZWYgbG9jYWxlCistaW5zdGFsbC1iaW4JPSBsb2NhbGVkZWYgbG9jYWxlCistZXh0cmEtb2Jqcwk9ICQobG9jYWxlZGVmLW1vZHVsZXM6PS5vKSAkKGxvY2FsZWRlZi1hdXg6PS5vKSBcCisraW5zdGFsbC1iaW4JPSAkKG90aGVycy15KQorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQk9ICQobG9jYWxlZGVmLW1vZHVsZXM6PS5vKSAkKGxvY2FsZWRlZi1hdXg6PS5vKSBcCisgCQkgICQobG9jYWxlLW1vZHVsZXM6PS5vKSAkKGxpYi1tb2R1bGVzOj0ubykKKyAKKy1leHRyYS1saWJzCT0gbGliQnJva2VuTG9jYWxlCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpID0gbGliQnJva2VuTG9jYWxlCisrZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMteSkKKyAKKyBsaWJCcm9rZW5Mb2NhbGUtcm91dGluZXMgPSBicm9rZW5fY3VyX21heAorIAorQEAgLTkzLDYgKzEwOSw5IEBAIENQUEZMQUdTLWxvY2FsZS1wcm9ncmFtcyA9IC1ETE9DQUxFX1BBVEg9JyQobG9jYWxlcGF0aCknIFwKKyBDRkxBR1MtY2hhcm1hcC5jID0gLVduby13cml0ZS1zdHJpbmdzIC1Xbm8tY2hhci1zdWJzY3JpcHRzCisgQ0ZMQUdTLWxvY2ZpbGUuYyA9IC1Xbm8td3JpdGUtc3RyaW5ncyAtV25vLWNoYXItc3Vic2NyaXB0cworIENGTEFHUy1jaGFybWFwLWRpci5jID0gLVduby13cml0ZS1zdHJpbmdzCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX1NQQVdOKSkKKytDRkxBR1MtY2hhcm1hcC1kaXIuYyArPSAtRE5PX1VOQ09NUFJFU1MKKytlbmRpZgorIAorICMgU2V0IGxpYm9mLSogZm9yIGVhY2ggcm91dGluZS4KKyBjcHAtc3Jjcy1sZWZ0IDo9ICQobG9jYWxlZGVmLW1vZHVsZXMpICQobG9jYWxlZGVmLWF1eCkgJChsb2NhbGUtbW9kdWxlcykgXAorZGlmZiAtLWdpdCBhL2xvY2FsZS9jYXRuYW1lcy5jIGIvbG9jYWxlL2NhdG5hbWVzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ZmFkMzU3CistLS0gL2Rldi9udWxsCisrKysgYi9sb2NhbGUvY2F0bmFtZXMuYworQEAgLTAsMCArMSw0OCBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCisrCisrLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLworK2NvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrICAgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgICBjYXRlZ29yeV9uYW1lLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYgREVGSU5FX0NBVEVHT1JZCisrICAgIH0KKysgIH07CisrCisrY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysgIH07CisrCisrLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KKytjb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmCURFRklORV9DQVRFR09SWQorKyAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQorKyAgfTsKK2RpZmYgLS1naXQgYS9sb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMgYi9sb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yMTk5NjRhCistLS0gL2Rldi9udWxsCisrKysgYi9sb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMKK0BAIC0wLDAgKzEsMzMgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworK2NoYXIgKgorK3NldGxvY2FsZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpCisreworKyAgaWYgKCEgbG9jYWxlCisrICAgICAgfHwgbG9jYWxlWzBdID09ICdcMCcKKysgICAgICB8fCBzdHJjbXAgKGxvY2FsZSwgIkMiKSA9PSAwCisrICAgICAgfHwgc3RyY21wIChsb2NhbGUsICJQT1NJWCIpID09IDApCisrICAgIHJldHVybiAoY2hhciAqKSAiQyI7CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKytsaWJjX2hpZGRlbl9kZWYgKHNldGxvY2FsZSkKK2RpZmYgLS1naXQgYS9sb2NhbGUvbG9jYWxlaW5mby5oIGIvbG9jYWxlL2xvY2FsZWluZm8uaAoraW5kZXggYmRhYjlmZS4uYTc1MTZjMCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9sb2NhbGVpbmZvLmgKKysrKyBiL2xvY2FsZS9sb2NhbGVpbmZvLmgKK0BAIC0yMzIsNyArMjMyLDcgQEAgX19saWJjX3RzZF9kZWZpbmUgKGV4dGVybiwgX19sb2NhbGVfdCwgTE9DQUxFKQorICAgIHVudXNlZC4gIFdlIGNhbiBtYW5hZ2UgdGhpcyBwbGF5aW5nIHNvbWUgdHJpY2tzIHdpdGggd2VhayByZWZlcmVuY2VzLgorICAgIEJ1dCB3aXRoIHRocmVhZC1sb2NhbCBsb2NhbGUgc2V0dGluZ3MsIGl0IGJlY29tZXMgcXVpdGUgdW5nYWlubHkgdW5sZXNzCisgICAgd2UgY2FuIHVzZSBfX3RocmVhZCB2YXJpYWJsZXMuICBTbyBvbmx5IGluIHRoYXQgY2FzZSBkbyB3ZSBhdHRlbXB0IHRoaXMuICAqLworLSNpZm5kZWYgU0hBUkVECisrI2lmICFkZWZpbmVkIFNIQVJFRCAmJiAhZGVmaW5lZCBJTl9HTElCQ19MT0NBTEVERUYKKyAjIGluY2x1ZGUgPHRscy5oPgorICMgZGVmaW5lIE5MX0NVUlJFTlRfSU5ESVJFQ1QJMQorICNlbmRpZgorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jIGIvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKK2luZGV4IGNmN2FkZWEuLmVmM2I4MTEgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKK0BAIC0xOSw3ICsxOSw5IEBACisgI2luY2x1ZGUgPGVycm9yLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAjaW5jbHVkZSA8c3Bhd24uaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorQEAgLTE1Niw2ICsxNTgsNyBAQCBjaGFybWFwX2Nsb3NlZGlyIChDSEFSTUFQX0RJUiAqY2RpcikKKyAgIHJldHVybiBjbG9zZWRpciAoZGlyKTsKKyB9CisgCisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgLyogQ3JlYXRlcyBhIHN1YnByb2Nlc3MgZGVjb21wcmVzc2luZyB0aGUgZ2l2ZW4gcGF0aG5hbWUsIGFuZCByZXR1cm5zCisgICAgYSBzdHJlYW0gcmVhZGluZyBpdHMgb3V0cHV0ICh0aGUgZGVjb21wcmVzc2VkIGRhdGEpLiAgKi8KKyBzdGF0aWMKK0BAIC0yMDQsNiArMjA3LDcgQEAgZm9wZW5fdW5jb21wcmVzc2VkIChjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqY29tcHJlc3NvcikKKyAgICAgfQorICAgcmV0dXJuIE5VTEw7CisgfQorKyNlbmRpZgorIAorIC8qIE9wZW5zIGEgY2hhcm1hcCBmb3IgcmVhZGluZywgZ2l2ZW4gaXRzIG5hbWUgKG5vdCBhbiBhbGlhcyBuYW1lKS4gICovCisgRklMRSAqCitAQCAtMjI2LDYgKzIzMCw3IEBAIGNoYXJtYXBfb3BlbiAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKQorICAgaWYgKHN0cmVhbSAhPSBOVUxMKQorICAgICByZXR1cm4gc3RyZWFtOworIAorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworICAgbWVtY3B5IChwLCAiLmd6IiwgNCk7CisgICBzdHJlYW0gPSBmb3Blbl91bmNvbXByZXNzZWQgKHBhdGhuYW1lLCAiZ3ppcCIpOworICAgaWYgKHN0cmVhbSAhPSBOVUxMKQorQEAgLTIzNSw2ICsyNDAsNyBAQCBjaGFybWFwX29wZW4gKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkKKyAgIHN0cmVhbSA9IGZvcGVuX3VuY29tcHJlc3NlZCAocGF0aG5hbWUsICJiemlwMiIpOworICAgaWYgKHN0cmVhbSAhPSBOVUxMKQorICAgICByZXR1cm4gc3RyZWFtOworKyNlbmRpZgorIAorICAgcmV0dXJuIE5VTEw7CisgfQorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCitpbmRleCBhMzlhOTRmLi4xNmU5MDM5IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYworQEAgLTM1MSw3ICszNTEsNyBAQCBuZXdfZWxlbWVudCAoc3RydWN0IGxvY2FsZV9jb2xsYXRlX3QgKmNvbGxhdGUsIGNvbnN0IGNoYXIgKm1icywgc2l6ZV90IG1ic2xlbiwKKyAgICAgfQorICAgaWYgKHdjcyAhPSBOVUxMKQorICAgICB7CistICAgICAgc2l6ZV90IG53Y3MgPSB3Y3NsZW4gKCh3Y2hhcl90ICopIHdjcyk7CisrICAgICAgc2l6ZV90IG53Y3MgPSB3Y3NsZW5fdWludDMyICh3Y3MpOworICAgICAgIHVpbnQzMl90IHplcm8gPSAwOworICAgICAgIC8qIEhhbmRsZSA8VTAwMDA+IGFzIGEgc2luZ2xlIGNoYXJhY3Rlci4gICovCisgICAgICAgaWYgKG53Y3MgPT0gMCkKK0BAIC0xNzc3LDggKzE3NzcsNyBAQCBzeW1ib2wgYCVzJyBoYXMgdGhlIHNhbWUgZW5jb2RpbmcgYXMiKSwgKCplcHRyKS0+bmFtZSk7CisgCisgCSAgICAgIGlmICgoKmVwdHIpLT5ud2NzID09IHJ1bnAtPm53Y3MpCisgCQl7CistCQkgIGludCBjID0gd21lbWNtcCAoKHdjaGFyX3QgKikgKCplcHRyKS0+d2NzLAorLQkJCQkgICAod2NoYXJfdCAqKSBydW5wLT53Y3MsIHJ1bnAtPm53Y3MpOworKwkJICBpbnQgYyA9IHdtZW1jbXBfdWludDMyICgoKmVwdHIpLT53Y3MsIHJ1bnAtPndjcywgcnVucC0+bndjcyk7CisgCisgCQkgIGlmIChjID09IDApCisgCQkgICAgeworQEAgLTIwMTEsOSArMjAxMCw5IEBAIGFkZF90b190YWJsZXdjICh1aW50MzJfdCBjaCwgc3RydWN0IGVsZW1lbnRfdCAqcnVucCkKKyAJICAgICBvbmUgY29uc2VjdXRpdmUgZW50cnkuICAqLworIAkgIGlmIChydW5wLT53Y25leHQgIT0gTlVMTAorIAkgICAgICAmJiBydW5wLT5ud2NzID09IHJ1bnAtPndjbmV4dC0+bndjcworLQkgICAgICAmJiB3bWVtY21wICgod2NoYXJfdCAqKSBydW5wLT53Y3MsCistCQkJICAod2NoYXJfdCAqKXJ1bnAtPndjbmV4dC0+d2NzLAorLQkJCSAgcnVucC0+bndjcyAtIDEpID09IDAKKysJICAgICAgJiYgd21lbWNtcF91aW50MzIgKHJ1bnAtPndjcywKKysJCQkJIHJ1bnAtPndjbmV4dC0+d2NzLAorKwkJCQkgcnVucC0+bndjcyAtIDEpID09IDAKKyAJICAgICAgJiYgKHJ1bnAtPndjc1tydW5wLT5ud2NzIC0gMV0KKyAJCSAgPT0gcnVucC0+d2NuZXh0LT53Y3NbcnVucC0+bndjcyAtIDFdICsgMSkpCisgCSAgICB7CitAQCAtMjAzNyw5ICsyMDM2LDkgQEAgYWRkX3RvX3RhYmxld2MgKHVpbnQzMl90IGNoLCBzdHJ1Y3QgZWxlbWVudF90ICpydW5wKQorIAkJcnVucCA9IHJ1bnAtPndjbmV4dDsKKyAJICAgICAgd2hpbGUgKHJ1bnAtPndjbmV4dCAhPSBOVUxMCisgCQkgICAgICYmIHJ1bnAtPm53Y3MgPT0gcnVucC0+d2NuZXh0LT5ud2NzCistCQkgICAgICYmIHdtZW1jbXAgKCh3Y2hhcl90ICopIHJ1bnAtPndjcywKKy0JCQkJICh3Y2hhcl90ICopcnVucC0+d2NuZXh0LT53Y3MsCistCQkJCSBydW5wLT5ud2NzIC0gMSkgPT0gMAorKwkJICAgICAmJiB3bWVtY21wX3VpbnQzMiAocnVucC0+d2NzLAorKwkJCQkJcnVucC0+d2NuZXh0LT53Y3MsCisrCQkJCQlydW5wLT5ud2NzIC0gMSkgPT0gMAorIAkJICAgICAmJiAocnVucC0+d2NzW3J1bnAtPm53Y3MgLSAxXQorIAkJCSA9PSBydW5wLT53Y25leHQtPndjc1tydW5wLT5ud2NzIC0gMV0gKyAxKSk7CisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYworaW5kZXggM2Y0NjRlZi4uYjdiNmI1MSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYworQEAgLTkyNiw3ICs5MjYsNyBAQCBjdHlwZV9vdXRwdXQgKHN0cnVjdCBsb2NhbGVkZWZfdCAqbG9jYWxlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorICAgYWxsb2NhdGVfYXJyYXlzIChjdHlwZSwgY2hhcm1hcCwgY3R5cGUtPnJlcGVydG9pcmUpOworIAorICAgZGVmYXVsdF9taXNzaW5nX2xlbiA9IChjdHlwZS0+ZGVmYXVsdF9taXNzaW5nCistCQkJID8gd2NzbGVuICgod2NoYXJfdCAqKSBjdHlwZS0+ZGVmYXVsdF9taXNzaW5nKQorKwkJCSA/IHdjc2xlbl91aW50MzIgKGN0eXBlLT5kZWZhdWx0X21pc3NpbmcpCisgCQkJIDogMCk7CisgCisgICBpbml0X2xvY2FsZV9kYXRhICgmZmlsZSwgbmVsZW1zKTsKK0BAIC0xOTM3LDcgKzE5MzcsNyBAQCByZWFkX3RyYW5zbGl0X2VudHJ5IChzdHJ1Y3QgbGluZXJlYWRlciAqbGRmaWxlLCBzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLAorIAkgICAgaWdub3JlID0gMTsKKyAJICBlbHNlCisgCSAgICAvKiBUaGlzIHZhbHVlIGlzIHVzYWJsZS4gICovCistCSAgICBvYnN0YWNrX2dyb3cgKG9iLCB0b193c3RyLCB3Y3NsZW4gKCh3Y2hhcl90ICopIHRvX3dzdHIpICogNCk7CisrCSAgICBvYnN0YWNrX2dyb3cgKG9iLCB0b193c3RyLCB3Y3NsZW5fdWludDMyICh0b193c3RyKSAqIDQpOworIAorIAkgIGZpcnN0ID0gMDsKKyAJfQorQEAgLTI0NzEsOCArMjQ3MSw4IEBAIHdpdGggY2hhcmFjdGVyIGNvZGUgcmFuZ2UgdmFsdWVzIG9uZSBtdXN0IHVzZSB0aGUgYWJzb2x1dGUgZWxsaXBzaXMgYC4uLiciKSk7CisgCSAgICB9CisgCisgCWhhbmRsZV90b2tfZGlnaXQ6CistCSAgY2xhc3NfYml0ID0gX0lTd2RpZ2l0OworLQkgIGNsYXNzMjU2X2JpdCA9IF9JU2RpZ2l0OworKwkgIGNsYXNzX2JpdCA9IEJJVHcgKHRva19kaWdpdCk7CisrCSAgY2xhc3MyNTZfYml0ID0gQklUICh0b2tfZGlnaXQpOworIAkgIGhhbmRsZV9kaWdpdHMgPSAxOworIAkgIGdvdG8gcmVhZF9jaGFyY2xhc3M7CisgCitAQCAtMzkyOSw4ICszOTI5LDcgQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIAorIAkgIHdoaWxlIChpZHggPCBudW1iZXIpCisgCSAgICB7CistCSAgICAgIGludCByZXMgPSB3Y3NjbXAgKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtpZHhdLT5mcm9tLAorLQkJCQkoY29uc3Qgd2NoYXJfdCAqKSBydW5wLT5mcm9tKTsKKysJICAgICAgaW50IHJlcyA9IHdjc2NtcF91aW50MzIgKHNvcnRlZFtpZHhdLT5mcm9tLCBydW5wLT5mcm9tKTsKKyAJICAgICAgaWYgKHJlcyA9PSAwKQorIAkJeworIAkJICByZXBsYWNlID0gMTsKK0BAIC0zOTY3LDExICszOTY2LDExIEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAgICAgICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBudW1iZXI7ICsrY250KQorIAl7CisgCSAgc3RydWN0IHRyYW5zbGl0X3RvX3QgKnNydW5wOworLQkgIGZyb21fbGVuICs9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20pICsgMTsKKysJICBmcm9tX2xlbiArPSB3Y3NsZW5fdWludDMyIChzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworIAkgIHNydW5wID0gc29ydGVkW2NudF0tPnRvOworIAkgIHdoaWxlIChzcnVucCAhPSBOVUxMKQorIAkgICAgeworLQkgICAgICB0b19sZW4gKz0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyKSArIDE7CisrCSAgICAgIHRvX2xlbiArPSB3Y3NsZW5fdWludDMyIChzcnVucC0+c3RyKSArIDE7CisgCSAgICAgIHNydW5wID0gc3J1bnAtPm5leHQ7CisgCSAgICB9CisgCSAgLyogUGx1cyBvbmUgZm9yIHRoZSBleHRyYSBOVUwgY2hhcmFjdGVyIG1hcmtpbmcgdGhlIGVuZCBvZgorQEAgLTM5OTUsMTggKzM5OTQsMTggQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIAkgIGN0eXBlLT50cmFuc2xpdF9mcm9tX2lkeFtjbnRdID0gZnJvbV9sZW47CisgCSAgY3R5cGUtPnRyYW5zbGl0X3RvX2lkeFtjbnRdID0gdG9fbGVuOworIAorLQkgIGxlbiA9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20pICsgMTsKKy0JICB3bWVtY3B5ICgod2NoYXJfdCAqKSAmY3R5cGUtPnRyYW5zbGl0X2Zyb21fdGJsW2Zyb21fbGVuXSwKKy0JCSAgIChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tLCBsZW4pOworKwkgIGxlbiA9IHdjc2xlbl91aW50MzIgKHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisrCSAgd21lbWNweV91aW50MzIgKCZjdHlwZS0+dHJhbnNsaXRfZnJvbV90YmxbZnJvbV9sZW5dLAorKwkJCSAgc29ydGVkW2NudF0tPmZyb20sIGxlbik7CisgCSAgZnJvbV9sZW4gKz0gbGVuOworIAorIAkgIGN0eXBlLT50cmFuc2xpdF90b19pZHhbY250XSA9IHRvX2xlbjsKKyAJICBzcnVucCA9IHNvcnRlZFtjbnRdLT50bzsKKyAJICB3aGlsZSAoc3J1bnAgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgbGVuID0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyKSArIDE7CistCSAgICAgIHdtZW1jcHkgKCh3Y2hhcl90ICopICZjdHlwZS0+dHJhbnNsaXRfdG9fdGJsW3RvX2xlbl0sCistCQkgICAgICAgKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0ciwgbGVuKTsKKysJICAgICAgbGVuID0gd2NzbGVuX3VpbnQzMiAoc3J1bnAtPnN0cikgKyAxOworKwkgICAgICB3bWVtY3B5X3VpbnQzMiAoJmN0eXBlLT50cmFuc2xpdF90b190YmxbdG9fbGVuXSwKKysJCQkgICAgICBzcnVucC0+c3RyLCBsZW4pOworIAkgICAgICB0b19sZW4gKz0gbGVuOworIAkgICAgICBzcnVucCA9IHNydW5wLT5uZXh0OworIAkgICAgfQorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMKK2luZGV4IGVjMWE4MGIuLjczNmVlZDggMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMKK0BAIC0yNSw2ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3lzL3Vpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAKK0BAIC0xMjQsNiArMTI1LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworICAgICB9CisgICBlbHNlCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQCisgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICByZWdleF90IHJlOworIAorQEAgLTE0MCw2ICsxNDIsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgCX0KKyAgICAgICBlbHNlIGlmIChyZXN1bHQgIT0gMCkKKyAJcmVnZnJlZSAoJnJlKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgaWYgKG1lc3NhZ2VzLT5ub2V4cHIgPT0gTlVMTCkKK0BAIC0xNTgsNiArMTYxLDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworICAgICB9CisgICBlbHNlCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQCisgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICByZWdleF90IHJlOworIAorQEAgLTE3NCw2ICsxNzgsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgCX0KKyAgICAgICBlbHNlIGlmIChyZXN1bHQgIT0gMCkKKyAJcmVnZnJlZSAoJnJlKTsKKysjZW5kaWYKKyAgICAgfQorIH0KKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYworaW5kZXggZGI0OTBjNi4uNzVkYzUwNSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKK0BAIC0yMTUsOCArMjE1LDEwIEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworIAl9CisgICAgICAgZWxzZQorIAl7CisrCSAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHd0X2ZtdF9hbXBtW10KKysJICAgID0geyAnJScsJ0knLCc6JywnJScsJ00nLCc6JywnJScsJ1MnLCcgJywnJScsJ3AnLDAgfTsKKyAJICB0aW1lLT50X2ZtdF9hbXBtID0gIiVJOiVNOiVTICVwIjsKKy0JICB0aW1lLT53dF9mbXRfYW1wbSA9IChjb25zdCB1aW50MzJfdCAqKSBMIiVJOiVNOiVTICVwIjsKKysJICB0aW1lLT53dF9mbXRfYW1wbSA9IHd0X2ZtdF9hbXBtOworIAl9CisgICAgIH0KKyAKK0BAIC0yMjYsNyArMjI4LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgICAgICAgY29uc3QgaW50IGRheXNfcGVyX21vbnRoWzEyXSA9IHsgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwKKyAJCQkJICAgICAgIDMxLCAzMSwgMzAsIDMxICwzMCwgMzEgfTsKKyAgICAgICBzaXplX3QgaWR4OworLSAgICAgIHdjaGFyX3QgKndzdHI7CisrICAgICAgdWludDMyX3QgKndzdHI7CisgCisgICAgICAgdGltZS0+ZXJhX2VudHJpZXMgPQorIAkoc3RydWN0IGVyYV9kYXRhICopIHhtYWxsb2MgKHRpbWUtPm51bV9lcmEKK0BAIC00NjQsMTggKzQ2NiwxOCBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAJICAgIH0KKyAKKyAJICAvKiBOb3cgZ2VuZXJhdGUgdGhlIHdpZGUgY2hhcmFjdGVyIG5hbWUgYW5kIGZvcm1hdC4gICovCistCSAgd3N0ciA9IHdjc2NociAoKHdjaGFyX3QgKikgdGltZS0+d2VyYVtpZHhdLCBMJzonKTsvKiBlbmQgZGlyZWN0aW9uICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBvZmZzZXQgKi8KKy0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIHN0YXJ0ICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBlbmQgKi8KKysJICB3c3RyID0gd2NzY2hyX3VpbnQzMiAodGltZS0+d2VyYVtpZHhdLCBMJzonKTsgLyogZW5kIGRpcmVjdGlvbiAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIG9mZnNldCAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIHN0YXJ0ICovCisrCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgZW5kICovCisgCSAgaWYgKHdzdHIgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKKy0JICAgICAgd3N0ciA9IHdjc2NociAod3N0ciArIDEsIEwnOicpOwkvKiBlbmQgbmFtZSAqLworKwkgICAgICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0gd3N0ciArIDE7CisrCSAgICAgIHdzdHIgPSB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6Jyk7IC8qIGVuZCBuYW1lICovCisgCSAgICAgIGlmICh3c3RyICE9IE5VTEwpCisgCQl7CisgCQkgICp3c3RyID0gTCdcMCc7CistCQkgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud2Zvcm1hdCA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKKysJCSAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53Zm9ybWF0ID0gd3N0ciArIDE7CisgCQl9CisgCSAgICAgIGVsc2UKKyAJCXRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPQorQEAgLTUzMCw3ICs1MzIsMTYgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgICBpZiAodGltZS0+ZGF0ZV9mbXQgPT0gTlVMTCkKKyAgICAgdGltZS0+ZGF0ZV9mbXQgPSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiOworICAgaWYgKHRpbWUtPndkYXRlX2ZtdCA9PSBOVUxMKQorLSAgICB0aW1lLT53ZGF0ZV9mbXQgPSAoY29uc3QgdWludDMyX3QgKikgTCIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSI7CisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgd2RhdGVfZm10W10gPQorKwl7ICclJywnYScsJyAnLAorKwkgICclJywnYicsJyAnLAorKwkgICclJywnZScsJyAnLAorKwkgICclJywnSCcsJzonLCclJywnTScsJzonLCclJywnUycsJyAnLAorKwkgICclJywnWicsJyAnLAorKwkgICclJywnWScsMCB9OworKyAgICAgIHRpbWUtPndkYXRlX2ZtdCA9IHdkYXRlX2ZtdDsKKysgICAgfQorIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jIGIvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYworaW5kZXggMmUwNTEzMC4uNjUzYjY4YyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKK0BAIC01OTUsNyArNTk1LDcgQEAgZ2V0X3N0cmluZyAoc3RydWN0IGxpbmVyZWFkZXIgKmxyLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIHsKKyAgIGludCByZXR1cm5fd2lkZXN0ciA9IGxyLT5yZXR1cm5fd2lkZXN0cjsKKyAgIGNoYXIgKmJ1ZjsKKy0gIHdjaGFyX3QgKmJ1ZjIgPSBOVUxMOworKyAgdWludDMyX3QgKmJ1ZjIgPSBOVUxMOworICAgc2l6ZV90IGJ1ZmFjdDsKKyAgIHNpemVfdCBidWZtYXggPSA1NjsKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKK2luZGV4IDJhMGYyYWEuLjU4M2QyMzMgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYworQEAgLTExNCw2ICsxMTQsNyBAQCB2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKiwgc3RydWN0IGFyZ3Bfc3RhdGUgKikgPSBwcmludF92ZXJzaW9uOworICNkZWZpbmUgT1BUX0xJU1RfQVJDSElWRSAzMDkKKyAjZGVmaW5lIE9QVF9MSVRUTEVfRU5ESUFOIDQwMAorICNkZWZpbmUgT1BUX0JJR19FTkRJQU4gNDAxCisrI2RlZmluZSBPUFRfVUlOVDMyX0FMSUdOIDQwMgorIAorIC8qIERlZmluaXRpb25zIG9mIGFyZ3VtZW50cyBmb3IgYXJncCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KK0BAIC0xNTAsNiArMTUxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQorICAgICBOXygiR2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBvdXRwdXQiKSB9LAorICAgeyAiYmlnLWVuZGlhbiIsIE9QVF9CSUdfRU5ESUFOLCBOVUxMLCAwLAorICAgICBOXygiR2VuZXJhdGUgYmlnLWVuZGlhbiBvdXRwdXQiKSB9LAorKyAgeyAidWludDMyLWFsaWduIiwgT1BUX1VJTlQzMl9BTElHTiwgIkFMSUdOTUVOVCIsIDAsCisrICAgIE5fKCJTZXQgdGhlIHRhcmdldCdzIHVpbnQzMl90IGFsaWdubWVudCBpbiBieXRlcyAoZGVmYXVsdCA0KSIpIH0sCisgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorIH07CisgCitAQCAtMjM5LDEyICsyNDIsMTQgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgIGN0eXBlIGxvY2FsZS4gIChQMTAwMy4yIDQuMzUuNS4yKSAgKi8KKyAgIHNldGxvY2FsZSAoTENfQ1RZUEUsICJQT1NJWCIpOworIAorKyNpZm5kZWYgTk9fU1lTQ09ORgorICAgLyogTG9vayB3aGV0aGVyIHRoZSBzeXN0ZW0gcmVhbGx5IGFsbG93cyBsb2NhbGUgZGVmaW5pdGlvbnMuICBQT1NJWAorICAgICAgZGVmaW5lcyBlcnJvciBjb2RlIDMgZm9yIHRoaXMgc2l0dWF0aW9uIHNvIEkgdGhpbmsgaXQgbXVzdCBiZQorICAgICAgYSBmYXRhbCBlcnJvciAoc2VlIFAxMDAzLjIgNC4zNS44KS4gICovCisgICBpZiAoc3lzY29uZiAoX1NDXzJfTE9DQUxFREVGKSA8IDApCisgICAgIFdJVEhfQ1VSX0xPQ0FMRSAoZXJyb3IgKDMsIDAsIF8oIlwKKyBGQVRBTDogc3lzdGVtIGRvZXMgbm90IGRlZmluZSBgX1BPU0lYMl9MT0NBTEVERUYnIikpKTsKKysjZW5kaWYKKyAKKyAgIC8qIFByb2Nlc3MgY2hhcm1hcCBmaWxlLiAgKi8KKyAgIGNoYXJtYXAgPSBjaGFybWFwX3JlYWQgKGNoYXJtYXBfZmlsZSwgdmVyYm9zZSwgMSwgYmVfcXVpZXQsIDEpOworQEAgLTMzOCw2ICszNDMsOSBAQCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorICAgICBjYXNlIE9QVF9CSUdfRU5ESUFOOgorICAgICAgIHNldF9iaWdfZW5kaWFuICh0cnVlKTsKKyAgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRfVUlOVDMyX0FMSUdOOgorKyAgICAgIHVpbnQzMl9hbGlnbl9tYXNrID0gc3RydG9sIChhcmcsIE5VTEwsIDApIC0gMTsKKysgICAgICBicmVhazsKKyAgICAgY2FzZSAnYyc6CisgICAgICAgZm9yY2Vfb3V0cHV0ID0gMTsKKyAgICAgICBicmVhazsKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYworaW5kZXggMzNkYTUyZS4uZjc5MGM0YyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKK0BAIC01NDQsNiArNTQ0LDkgQEAgY29tcGFyZV9maWxlcyAoY29uc3QgY2hhciAqZmlsZW5hbWUxLCBjb25zdCBjaGFyICpmaWxlbmFtZTIsIHNpemVfdCBzaXplLAorICAgIG1hY2hpbmUgcnVubmluZyBsb2NhbGVkZWYuICAqLworIGJvb2wgc3dhcF9lbmRpYW5uZXNzX3A7CisgCisrLyogVGhlIHRhcmdldCdzIHZhbHVlIG9mIF9fYWxpZ25fXyh1aW50MzJfdCkgLSAxLiAgKi8KKyt1bnNpZ25lZCBpbnQgdWludDMyX2FsaWduX21hc2sgPSAzOworKworIC8qIFdoZW4gY2FsbGVkIG91dHNpZGUgYSBzdGFydF9sb2NhbGVfc3RydWN0dXJlL2VuZF9sb2NhbGVfc3RydWN0dXJlCisgICAgb3Igc3RhcnRfbG9jYWxlX3ByZWx1ZGUvZW5kX2xvY2FsZV9wcmVsdWRlIGJsb2NrLCByZWNvcmQgdGhhdCB0aGUKKyAgICBuZXh0IGJ5dGUgaW4gRklMRSdzIG9ic3RhY2sgd2lsbCBiZSB0aGUgZmlyc3QgYnl0ZSBvZiBhIG5ldyBlbGVtZW50LgorQEAgLTYyMSw3ICs2MjQsNyBAQCBhZGRfbG9jYWxlX3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCBjaGFyICpzdHJpbmcpCisgdm9pZAorIGFkZF9sb2NhbGVfd3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCB1aW50MzJfdCAqc3RyaW5nKQorIHsKKy0gIGFkZF9sb2NhbGVfdWludDMyX2FycmF5IChmaWxlLCBzdHJpbmcsIHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3RyaW5nKSArIDEpOworKyAgYWRkX2xvY2FsZV91aW50MzJfYXJyYXkgKGZpbGUsIHN0cmluZywgd2NzbGVuX3VpbnQzMiAoc3RyaW5nKSArIDEpOworIH0KKyAKKyAvKiBSZWNvcmQgdGhhdCBGSUxFJ3MgbmV4dCBlbGVtZW50IGlzIHRoZSAzMi1iaXQgaW50ZWdlciBWQUxVRS4gICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKK2luZGV4IDZmYzQ0MWIuLjExOGIxNzEgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCitAQCAtNzEsNiArNzEsOCBAQCBleHRlcm4gdm9pZCB3cml0ZV9hbGxfY2F0ZWdvcmllcyAoc3RydWN0IGxvY2FsZWRlZl90ICpkZWZpbml0aW9ucywKKyAKKyBleHRlcm4gYm9vbCBzd2FwX2VuZGlhbm5lc3NfcDsKKyAKKytleHRlcm4gdW5zaWduZWQgaW50IHVpbnQzMl9hbGlnbl9tYXNrOworKworIC8qIENoYW5nZSB0aGUgb3V0cHV0IHRvIGJlIGJpZy1lbmRpYW4gaWYgQklHX0VORElBTiBpcyB0cnVlIGFuZAorICAgIGxpdHRsZS1lbmRpYW4gb3RoZXJ3aXNlLiAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQKK0BAIC04OSw3ICs5MSw4IEBAIG1heWJlX3N3YXBfdWludDMyICh1aW50MzJfdCB2YWx1ZSkKKyB9CisgCisgLyogTGlrZXdpc2UsIGJ1dCBtdW5nZSBhbiBhcnJheSBvZiBOIHVpbnQzMl90cyBzdGFydGluZyBhdCBBUlJBWS4gICovCistc3RhdGljIGlubGluZSB2b2lkCisrc3RhdGljIHZvaWQKKytfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAodWludDMyX3QgKmFycmF5LCBzaXplX3QgbikKKyB7CisgICBpZiAoc3dhcF9lbmRpYW5uZXNzX3ApCitAQCAtOTksNyArMTAyLDggQEAgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKHVpbnQzMl90ICphcnJheSwgc2l6ZV90IG4pCisgCisgLyogTGlrZSBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSwgYnV0IHRoZSBhcnJheSBvZiBOIGVsZW1lbnRzIGlzIGF0CisgICAgdGhlIGVuZCBvZiBPQlNUQUNLJ3MgY3VycmVudCBvYmplY3QuICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorK3N0YXRpYyB2b2lkCisrX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgbWF5YmVfc3dhcF91aW50MzJfb2JzdGFjayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHNpemVfdCBuKQorIHsKKyAgIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICgodWludDMyX3QgKikgb2JzdGFja19uZXh0X2ZyZWUgKG9ic3RhY2spIC0gbiwgbik7CitAQCAtMjc2LDQgKzI4MCw1NSBAQCBleHRlcm4gdm9pZCBpZGVudGlmaWNhdGlvbl9vdXRwdXQgKHN0cnVjdCBsb2NhbGVkZWZfdCAqbG9jYWxlLAorIAkJCQkgICBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIAkJCQkgICBjb25zdCBjaGFyICpvdXRwdXRfcGF0aCk7CisgCisrc3RhdGljIHNpemVfdCB3Y3NsZW5fdWludDMyIChjb25zdCB1aW50MzJfdCAqc3RyKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIHVpbnQzMl90ICogd21lbWNweV91aW50MzIgKHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyB1aW50MzJfdCAqIHdjc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyBpbnQgd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgaW50IHdtZW1jbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysKKytzdGF0aWMgc2l6ZV90Cisrd2NzbGVuX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnN0cikKKyt7CisrICBzaXplX3QgbGVuID0gMDsKKysgIHdoaWxlIChzdHJbbGVuXSAhPSAwKQorKyAgICBsZW4rKzsKKysgIHJldHVybiBsZW47CisrfQorKworK3N0YXRpYyAgaW50Cisrd21lbWNtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikKKyt7CisrICB3aGlsZSAobi0tICE9IDApCisrICAgIHsKKysgICAgICBpbnQgZGlmZiA9ICpzMSsrIC0gKnMyKys7CisrICAgICAgaWYgKGRpZmYgIT0gMCkKKysJcmV0dXJuIGRpZmY7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50Cisrd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpCisreworKyAgd2hpbGUgKCpzMSAhPSAwICYmICpzMSA9PSAqczIpCisrICAgIHMxKyssIHMyKys7CisrICByZXR1cm4gKnMxIC0gKnMyOworK30KKysKKytzdGF0aWMgdWludDMyX3QgKgorK3dtZW1jcHlfdWludDMyICh1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pCisreworKyAgcmV0dXJuIG1lbWNweSAoczEsIHMyLCBuICogc2l6ZW9mICh1aW50MzJfdCkpOworK30KKysKKytzdGF0aWMgdWludDMyX3QgKgorK3djc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkKKyt7CisrICBkbworKyAgICBpZiAoKnMgPT0gY2gpCisrICAgICAgcmV0dXJuICh1aW50MzJfdCAqKSBzOworKyAgd2hpbGUgKCpzKysgIT0gMCk7CisrICByZXR1cm4gMDsKKyt9CisrCisgI2VuZGlmIC8qIGxvY2ZpbGUuaCAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9zZXRsb2NhbGUuYyBiL2xvY2FsZS9zZXRsb2NhbGUuYworaW5kZXggZmE5Y2IzYS4uOGVlZTI4NCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9zZXRsb2NhbGUuYworKysrIGIvbG9jYWxlL3NldGxvY2FsZS5jCitAQCAtNjQsMzYgKzY0LDYgQEAgc3RhdGljIGNoYXIgKmNvbnN0IF9ubF9jdXJyZW50X3VzZWRbXSA9CisgI2VuZGlmCisgCisgCistLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLworLWNvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistICAgIHsKKy0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKy0gICAgICBjYXRlZ29yeV9uYW1lLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYgREVGSU5FX0NBVEVHT1JZCistICAgIH0KKy0gIH07CistCistY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKy0gIH07CistCistLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KKy1jb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmCURFRklORV9DQVRFR09SWQorLSAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQorLSAgfTsKKy0KKy0KKyAjaWZkZWYgTkxfQ1VSUkVOVF9JTkRJUkVDVAorICMgZGVmaW5lIFdFQUtfUE9TVExPQUQocG9zdGxvYWQpIHdlYWtfZXh0ZXJuIChwb3N0bG9hZCkKKyAjZWxzZQorZGlmZiAtLWdpdCBhL2xvY2FsZS94bG9jYWxlLmMgYi9sb2NhbGUveGxvY2FsZS5jCitpbmRleCBmZWM0NTY0Li5mMDAyNjljIDEwMDY0NAorLS0tIGEvbG9jYWxlL3hsb2NhbGUuYworKysrIGIvbG9jYWxlL3hsb2NhbGUuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSAibG9jYWxlaW5mby5oIgorIAorICNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorQEAgLTI1LDYgKzI2LDE5IEBAIGV4dGVybiBzdHJ1Y3QgX19sb2NhbGVfZGF0YSBfbmxfQ18jI2NhdGVnb3J5OworICNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKyAjdW5kZWYJREVGSU5FX0NBVEVHT1JZCisgCisrLyogSWYgdGhlIGxvY2FsZSBzdXBwb3J0IGNvZGUgaXNuJ3QgZW5hYmxlZCwgZG9uJ3QgZ2VuZXJhdGUgc3Ryb25nCisrICAgcmVmZXJlbmNlIHRvIHRoZSBDIGxvY2FsZV9kYXRhIHN0cnVjdHVyZXMgaGVyZTsgbGV0IHRoZSBNYWtlZmlsZQorKyAgIGRlY2lkZSB3aGljaCBvbmVzIHRvIGluY2x1ZGUuICAoSW4gdGhlIHN0YXRpYyBsaW5raW5nIGNhc2UsIHRoZQorKyAgIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlICdjbGFzcycsICd0b3VwcGVyJywgYW5kICd0b2xvd2VyJyB0YWJsZXMKKysgICB3aWxsIGNhdXNlIEMtY3R5cGUubyB0byBiZSBicm91Z2h0IGluLCBhcyBpdCBzaG91bGQgYmUsIGV2ZW4gd2hlbgorKyAgIHRoZSByZWZlcmVuY2UgdG8gX25sX0NfTENfQ1RZUEUgd2lsbCBiZSB3ZWFrLikgICovCisrI2lmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgd2Vha19leHRlcm4gKF9ubF9DXyMjY2F0ZWdvcnkpCisrIyBpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjIHVuZGVmCURFRklORV9DQVRFR09SWQorKyNlbmRpZgorKworIC8qIERlZmluZWQgaW4gbG9jYWxlL0MtY3R5cGUuYy4gICovCisgZXh0ZXJuIGNvbnN0IGNoYXIgX25sX0NfTENfQ1RZUEVfY2xhc3NbXSBhdHRyaWJ1dGVfaGlkZGVuOworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9DX0xDX0NUWVBFX3RvdXBwZXJbXSBhdHRyaWJ1dGVfaGlkZGVuOworQEAgLTUyLDMgKzY2LDI2IEBAIGNvbnN0IHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QgX25sX0NfbG9jb2JqIGF0dHJpYnV0ZV9oaWRkZW4gPQorICAgICAuX19jdHlwZV90b2xvd2VyID0gKGNvbnN0IGludCAqKSBfbmxfQ19MQ19DVFlQRV90b2xvd2VyICsgMTI4LAorICAgICAuX19jdHlwZV90b3VwcGVyID0gKGNvbnN0IGludCAqKSBfbmxfQ19MQ19DVFlQRV90b3VwcGVyICsgMTI4CisgICB9OworKworKworKyNpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKy8qIFdoZW4gbG9jYWxlIGNvZGUgaXMgZW5hYmxlZCwgdGhlc2UgYXJlIGVhY2ggZGVmaW5lZCBpbiB0aGUKKysgICBhcHByb3ByaWF0ZSBsYy1DQVRFR09SWS5jIGZpbGUsIHNvIHRoYXQgc3RhdGljIGxpbmtzICh3aGVuIF9fdGhyZWFkCisrICAgaXMgc3VwcG9ydGVkKSBicmluZyBpbiBvbmx5IHRob3NlIGxjLUNBVEVHT1JZLm8gZmlsZXMgZm9yCisrICAgY2F0ZWdvcmllcyB0aGUgcHJvZ3JhbSBhY3R1YWxseSB1c2VzOyBsb29rIGZvciBOTF9DVVJSRU5UX0lORElSRUNUCisrICAgaW4gbG9jYWxlaW5mby5oLgorKworKyAgIFdoZW4gbG9jYWxlIGNvZGUgaXMgZGlzYWJsZWQsIHRoZSBfbmxfQ19DQVRFR09SWSBvYmplY3RzIGFyZSB0aGUKKysgICBvbmx5IHBvc3NpYmxlIHJlZmVyZW50cy4gIEF0IHRoZSBtb21lbnQsIHRoZXJlIGlzbid0IGEgd2F5IHRvIGdldAorKyAgIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBkZWZpbmVkIGluIGV2ZXJ5IGNvbXBpbGF0aW9uIHVuaXQgdGhhdAorKyAgICNpbmNsdWRlcyBsb2NhbGVpbmZvLmgsIHNvIHdlIGNhbid0IGp1c3QgdHVybiBvZmYKKysgICBOTF9DVVJSRU5UX0lORElSRUNULiAgU28gd2UnbGwgZGVmaW5lIHRoZSBfbmxfY3VycmVudF9DQVRFR09SWQorKyAgIHBvaW50ZXJzIGhlcmUuICAqLworKyNpZiBkZWZpbmVkIChOTF9DVVJSRU5UX0lORElSRUNUKQorKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgICAgICBcCisrICBfX3RocmVhZCBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqIGNvbnN0ICpfbmxfY3VycmVudF8jI2NhdGVnb3J5ICAgXAorKyAgYXR0cmlidXRlX2hpZGRlbiA9ICZfbmxfQ19sb2NvYmouX19sb2NhbGVzW2NhdGVnb3J5XTsKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmIERFRklORV9DQVRFR09SWQorKyNlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KK2RpZmYgLS1naXQgYS9sb2NhbGVkYXRhL01ha2VmaWxlIGIvbG9jYWxlZGF0YS9NYWtlZmlsZQoraW5kZXggZWJmNmFjOS4uMTg3MDc1MyAxMDA2NDQKKy0tLSBhL2xvY2FsZWRhdGEvTWFrZWZpbGUKKysrKyBiL2xvY2FsZWRhdGEvTWFrZWZpbGUKK0BAIC0yMSwxMiArMjEsMjIgQEAgc3ViZGlyIDo9IGxvY2FsZWRhdGEKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKy0jIExpc3Qgd2l0aCBhbGwgYXZhaWxhYmxlIGNoYXJhY3RlciBzZXQgZGVzY3JpcHRpb25zLgorLWNoYXJtYXBzIDo9ICQod2lsZGNhcmQgY2hhcm1hcHMvW0EtSV0qKSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tKLVpdKikKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgIyBMaXN0IHdpdGggYWxsIGF2YWlsYWJsZSBjaGFyYWN0ZXIgc2V0IGRlc2NyaXB0aW9ucy4KKy1sb2NhbGVzIDo9ICQod2lsZGNhcmQgbG9jYWxlcy8qKQorLQorK2FsbC1jaGFybWFwcyA6PSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tBLUldKikgJCh3aWxkY2FyZCBjaGFybWFwcy9bSi1aXSopCisrCisrYWxsLWxvY2FsZXMgOj0gJCh3aWxkY2FyZCBsb2NhbGVzLyopCisrCisrIyBJZiB0aGUgRUdMSUJDX0xPQ0FMRVMgb3B0aW9uIGdyb3VwIGlzIG5vdCBlbmFibGVkLCB0cmltIHRoZQorKyMgbGlzdCBvZiBjaGFybWFwIGFuZCBsb2NhbGUgc291cmNlIGZpbGVzLgorK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19MT0NBTEVTKSx5KQorK2NoYXJtYXBzIDo9ICQoYWxsLWNoYXJtYXBzKQorK2xvY2FsZXMgIDo9ICQoYWxsLWxvY2FsZXMpCisrZWxzZQorK2NoYXJtYXBzIDo9CisrbG9jYWxlcyAgOj0gbG9jYWxlcy9QT1NJWAorK2VuZGlmCisgCisgc3ViZGlyLWRpcnMgPSB0ZXN0cy1tYndjCisgdnBhdGggJS5jIHRlc3RzLW1id2MKK0BAIC03MSwxNCArODEsMjAgQEAgbG9jYWxlX3Rlc3Rfc3VpdGUgOj0gdHN0X2lzd2FsbnVtIHRzdF9pc3dhbHBoYSB0c3RfaXN3Y250cmwgICAgICAgICAgICBcCisgCQkgICAgIHRzdF93Y3N4ZnJtIHRzdF93Y3RvYiB0c3Rfd2N0b21iIHRzdF93Y3RyYW5zICAgICAgXAorIAkJICAgICB0c3Rfd2N0eXBlIHRzdF93Y3dpZHRoCisgCistdGVzdHMgPSAkKGxvY2FsZV90ZXN0X3N1aXRlKSB0c3QtZGlnaXRzIHRzdC1zZXRsb2NhbGUgYnVnLWljb252LXRyYW5zIFwKKysjIFNpbmNlIHRoZXNlIHRlc3RzIGJ1aWxkIHRoZWlyIG93biBsb2NhbGUgZmlsZXMsIHRoZXkncmUgbm90CisrIyBkZXBlbmRlbnQgb24gdGhlIE9QVElPTl9FR0xJQkNfTE9DQUxFUyBvcHRpb24gZ3JvdXAuICBCdXQgdGhleSBkbworKyMgbmVlZCB0aGUgbG9jYWxlIGZ1bmN0aW9ucyB0byBiZSBwcmVzZW50LgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKyAgICAgKz0gJChsb2NhbGVfdGVzdF9zdWl0ZSkgdHN0LWRpZ2l0cyB0c3Qtc2V0bG9jYWxlIGJ1Zy1pY29udi10cmFucyBcCisgCXRzdC1sZWFrcyB0c3QtbWJzd2NzMSB0c3QtbWJzd2NzMiB0c3QtbWJzd2NzMyB0c3QtbWJzd2NzNCB0c3QtbWJzd2NzNSBcCisgCXRzdC1tYnN3Y3M2IHRzdC14bG9jYWxlMSB0c3QteGxvY2FsZTIgYnVnLXVzZXNldGxvY2FsZSBcCisgCXRzdC1zdHJmbW9uMSB0c3Qtc3NjYW5mIGJ1Zy1zZXRsb2NhbGUxIHRzdC1zZXRsb2NhbGUyIHRzdC1zZXRsb2NhbGUzIFwKKyAJdHN0LXdjdHlwZQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyB0ZXN0cy1zdGF0aWMgPSBidWctc2V0bG9jYWxlMS1zdGF0aWMKKyB0ZXN0cyArPSAkKHRlc3RzLXN0YXRpYykKKy1pZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorK2VuZGlmCisraWZlcSAoeWVzeSwkKGJ1aWxkLXNoYXJlZCkkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIGlmbmVxIChubywkKFBFUkwpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpbXRyYWNlLXRzdC1sZWFrcy5vdXQKKyBlbmRpZgorQEAgLTk1LDYgKzExMSw3IEBAIHRlc3RzOiAkKG9iamRpcikvaWNvbnZkYXRhL2djb252LW1vZHVsZXMKKyB0ZXN0cy1zdGF0aWMgKz0gdHN0LWxhbmdpbmZvLXN0YXRpYworIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpc29ydC10ZXN0Lm91dCAkKG9ianBmeCl0c3QtZm1vbi5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC1sb2NhbGUub3V0ICQob2JqcGZ4KXRzdC1ycG1hdGNoLm91dCBcCisgCQkgJChvYmpwZngpdHN0LXRyYW5zLm91dCAkKG9ianBmeCl0c3QtY3R5cGUub3V0IFwKK0BAIC0xMDksNiArMTI2LDcgQEAgTE9DQUxFUyA6PSBkZV9ERS5JU08tODg1OS0xIGRlX0RFLlVURi04IGVuX1VTLkFOU0lfWDMuNC0xOTY4IFwKKyAJICAgdHJfVFIuSVNPLTg4NTktOSBlbl9HQi5VVEYtOCB1a19VQS5VVEYtOAorIGluY2x1ZGUgLi4vZ2VuLWxvY2FsZXMubWsKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorQEAgLTE5MSw2ICsyMDksMTEgQEAgZW5kaWYKKyAKKyBpbmNsdWRlIFNVUFBPUlRFRAorIAorKyMgT25seSBpbnN0YWxsIGxvY2FsZSBkYXRhIGlmIE9QVElPTl9FR0xJQkNfTE9DQUxFUyBpcyBzZWxlY3RlZC4KKytpZm5lcSAoJChPUFRJT05fRUdMSUJDX0xPQ0FMRVMpLHkpCisrU1VQUE9SVEVELUxPQ0FMRVMgOj0KKytlbmRpZgorKworIElOU1RBTEwtU1VQUE9SVEVELUxPQ0FMRVM9JChhZGRwcmVmaXggaW5zdGFsbC0sICQoU1VQUE9SVEVELUxPQ0FMRVMpKQorIAorICMgU29tZXRpbWVzIHRoZSB3aG9sZSBjb2xsZWN0aW9uIG9mIGxvY2FsZSBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorZGlmZiAtLWdpdCBhL2xvZ2luL01ha2VmaWxlIGIvbG9naW4vTWFrZWZpbGUKK2luZGV4IDBmNGJiMjIuLjQwMzZkZGIgMTAwNjQ0CistLS0gYS9sb2dpbi9NYWtlZmlsZQorKysrIGIvbG9naW4vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw3IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBsb2dpbiBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgc3ViZGlyCTo9IGxvZ2luCisgCitAQCAtMjUsMTQgKzI2LDE2IEBAIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJOj0gdXRtcC5oIGJpdHMvdXRtcC5oIGxhc3Rsb2cuaCBwdHkuaAorIAorLXJvdXRpbmVzIDo9IGdldGxvZ2luIGdldGxvZ2luX3Igc2V0bG9naW4gZ2V0bG9naW5fcl9jaGsgXAorLQkgICAgZ2V0dXRlbnQgZ2V0dXRlbnRfciBnZXR1dGlkIGdldHV0bGluZSBnZXR1dGlkX3IgZ2V0dXRsaW5lX3IgXAorLQkgICAgdXRtcF9maWxlIHV0bXBuYW1lIHVwZHd0bXAgZ2V0cHQgZ3JhbnRwdCB1bmxvY2twdCBwdHNuYW1lIFwKKy0JICAgIHB0c25hbWVfcl9jaGsKKytyb3V0aW5lcyA6PSBnZXRwdCBncmFudHB0IHVubG9ja3B0IHB0c25hbWUgcHRzbmFtZV9yX2NoaworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19VVE1QKSBcCisrCSArPSBnZXR1dGVudCBnZXR1dGVudF9yIGdldHV0aWQgZ2V0dXRsaW5lIGdldHV0aWRfciBnZXR1dGxpbmVfciBcCisrCSAgICB1dG1wX2ZpbGUgdXRtcG5hbWUgdXBkd3RtcAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19HRVRMT0dJTikgKz0gZ2V0bG9naW4gZ2V0bG9naW5fciBnZXRsb2dpbl9yX2NoaworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CU0QpICs9IHNldGxvZ2luCisgCisgQ0ZMQUdTLWdyYW50cHQuYyA9IC1ETElCRVhFQ0RJUj0nIiQobGliZXhlY2RpcikiJworIAorLW90aGVycyA9IHV0bXBkdW1wCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19VVE1QKSArPSB1dG1wZHVtcAorIAorIGlmZXEgKHllcywkKGJ1aWxkLXB0LWNob3duKSkKKyBvdGhlcnMgKz0gcHRfY2hvd24KK0BAIC00Niw4ICs0OSw4IEBAIHZwYXRoICUuYyBwcm9ncmFtcworIHRlc3RzIDo9IHRzdC11dG1wIHRzdC11dG1weCB0c3QtZ3JhbnRwdCB0c3QtcHRzbmFtZSB0c3QtZ2V0bG9naW4KKyAKKyAjIEJ1aWxkIHRoZSAtbHV0aWwgbGlicmFyeSB3aXRoIHRoZXNlIGV4dHJhIGZ1bmN0aW9ucy4KKy1leHRyYS1saWJzICAgICAgOj0gbGlidXRpbAorLWV4dHJhLWxpYnMtb3RoZXJzIDo9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19VVE1QKSA6PSBsaWJ1dGlsCisrZXh0cmEtbGlicy1vdGhlcnMgOj0gJChleHRyYS1saWJzLXkpCisgCisgbGlidXRpbC1yb3V0aW5lczo9IGxvZ2luIGxvZ2luX3R0eSBsb2dvdXQgbG9nd3RtcCBvcGVucHR5IGZvcmtwdHkKKyAKK2RpZmYgLS1naXQgYS9tYWxsb2MvTWFrZWZpbGUgYi9tYWxsb2MvTWFrZWZpbGUKK2luZGV4IDY3ZWQyOTMuLjI3MmNhNGQgMTAwNjQ0CistLS0gYS9tYWxsb2MvTWFrZWZpbGUKKysrKyBiL21hbGxvYy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgbWFsbG9jIHJvdXRpbmVzCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbWFsbG9jCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzksOSArNDEsMTUgQEAgaW5zdGFsbC1saWIgOj0gbGlibWNoZWNrLmEKKyBub24tbGliLmEgOj0gbGlibWNoZWNrLmEKKyAKKyAjIEFkZGl0aW9uYWwgbGlicmFyeS4KKytpZmVxICgkKE9QVElPTl9FR0xJQkNfTUVNVVNBR0UpLHkpCisgZXh0cmEtbGlicyA9IGxpYm1lbXVzYWdlCisgZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisgCisraWZkZWYgT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrQ1BQRkxBR1MtbWVtdXNhZ2UgKz0gLURfX09QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRT0kKE9QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRSkKKytlbmRpZgorK2VuZGlmCisrCisgbGlibWVtdXNhZ2Utcm91dGluZXMgPSBtZW11c2FnZQorIGxpYm1lbXVzYWdlLWluaGliaXQtbyA9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorQEAgLTcxLDcgKzc5LDcgQEAgZW5kaWYKKyAjIFVubGVzcyB3ZSBnZXQgYSB0ZXN0IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGxpYmdkIHdoaWNoIGFsc28gd29ya3MKKyAjIGZvciBjcm9zcy1jb21waWxpbmcgd2UgZGlzYWJsZSB0aGUgbWVtdXNhZ2VzdGF0IGdlbmVyYXRpb24gaW4gdGhpcworICMgc2l0dWF0aW9uLgorLWlmbmVxICgkKGNyb3NzLWNvbXBpbGluZykseWVzKQorK2lmZXEgKCQoY3Jvc3MtY29tcGlsaW5nKSQoT1BUSU9OX0VHTElCQ19NRU1VU0FHRSksbm95KQorICMgSWYgdGhlIGdkIGxpYnJhcnkgaXMgYXZhaWxhYmxlIHdlIGJ1aWxkIHRoZSBgbWVtdXNhZ2VzdGF0JyBwcm9ncmFtLgorIGlmbmVxICgkKExJQkdEKSxubykKKyBvdGhlcnM6ICQob2JqcGZ4KW1lbXVzYWdlCitkaWZmIC0tZ2l0IGEvbWFsbG9jL21lbXVzYWdlLmMgYi9tYWxsb2MvbWVtdXNhZ2UuYworaW5kZXggYTU3YmE4ZS4uNzMyYmE5ZCAxMDA2NDQKKy0tLSBhL21hbGxvYy9tZW11c2FnZS5jCisrKysgYi9tYWxsb2MvbWVtdXNhZ2UuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPG1lbXVzYWdlLmg+CisgCitAQCAtOTMsNyArOTQsMTEgQEAgc3RhdGljIF9fdGhyZWFkIHVpbnRwdHJfdCBzdGFydF9zcDsKKyAjZGVmaW5lIHBlYWtfc3RhY2sgICAgICBwZWFrX3VzZVsxXQorICNkZWZpbmUgcGVha190b3RhbCAgICAgIHBlYWtfdXNlWzJdCisgCistI2RlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFICAgICAzMjc2OAorKyNpZm5kZWYgX19PUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKysjIGRlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFCTMyNzY4CisrI2Vsc2UKKysjIGRlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFCV9fT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrI2VuZGlmCisgc3RhdGljIHNpemVfdCBidWZmZXJfc2l6ZTsKKyAKKyBzdGF0aWMgaW50IGZkID0gLTE7CitkaWZmIC0tZ2l0IGEvbWFsbG9jL21lbXVzYWdlLnNoIGIvbWFsbG9jL21lbXVzYWdlLnNoCitpbmRleCA4YWI4Y2MyLi5kMThmNDQ2IDEwMDc1NQorLS0tIGEvbWFsbG9jL21lbXVzYWdlLnNoCisrKysgYi9tYWxsb2MvbWVtdXNhZ2Uuc2gKK0BAIC0zNSw3ICszNSw3IEBAIGRvX21pc3NpbmdfYXJnKCkgeworIAorICMgUHJpbnQgaGVscCBtZXNzYWdlCisgZG9faGVscCgpIHsKKy0gIGVjaG8gJCJVc2FnZTogbWVtdXNhZ2UgW09QVElPTl0uLi4gUFJPR1JBTSBbUFJPR1JBTU9QVElPTl0uLi4KKysgIHByaW50ZiAkIlVzYWdlOiBtZW11c2FnZSBbT1BUSU9OXS4uLiBQUk9HUkFNIFtQUk9HUkFNT1BUSU9OXS4uLgorIFByb2ZpbGUgbWVtb3J5IHVzYWdlIG9mIFBST0dSQU0uCisgCisgICAgLW4sLS1wcm9nbmFtZT1OQU1FICAgICBOYW1lIG9mIHRoZSBwcm9ncmFtIGZpbGUgdG8gcHJvZmlsZQorZGlmZiAtLWdpdCBhL21hdGgvTWFrZWZpbGUgYi9tYXRoL01ha2VmaWxlCitpbmRleCA2Mzg4YmFlLi5lZDFjNTExIDEwMDY0NAorLS0tIGEvbWF0aC9NYWtlZmlsZQorKysrIGIvbWF0aC9NYWtlZmlsZQorQEAgLTIxLDYgKzIxLDggQEAgc3ViZGlyCQk6PSBtYXRoCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworICMgSW5zdGFsbGVkIGhlYWRlciBmaWxlcy4KKyBoZWFkZXJzCQk6PSBtYXRoLmggYml0cy9tYXRoY2FsbHMuaCBiaXRzL21hdGhpbmxpbmUuaCBiaXRzL2h1Z2VfdmFsLmggXAorIAkJICAgYml0cy9odWdlX3ZhbGYuaCBiaXRzL2h1Z2VfdmFsbC5oIGJpdHMvaW5mLmggYml0cy9uYW4uaCBcCitAQCAtMzQsOCArMzYsOCBAQCBhdXgJCTo9IHNldGZwdWN3IGZwdV9jb250cm9sCisgCisgIyBCdWlsZCB0aGUgLWxtIGxpYnJhcnkuCisgCistZXh0cmEtbGlicwk6PSBsaWJtCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTElCTSkgOj0gbGlibQorK2V4dHJhLWxpYnMtb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSA9ICQoZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTElCTSkpCisgCisgbGlibS1zdXBwb3J0ID0gc19saWJfdmVyc2lvbiBzX21hdGhlcnIgc19zaWduZ2FtCQkJXAorIAkgICAgICAgZmNscmV4Y3B0IGZnZXRleGNwdGZsZyBmcmFpc2VleGNwdCBmc2V0ZXhjcHRmbGcJCVwKK2RpZmYgLS1naXQgYS9taXNjL01ha2VmaWxlIGIvbWlzYy9NYWtlZmlsZQoraW5kZXggYWVjYjBkYS4uZTZiN2MyMyAxMDA2NDQKKy0tLSBhL21pc2MvTWFrZWZpbGUKKysrKyBiL21pc2MvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSwxMCBAQAorICMJU3ViLW1ha2VmaWxlIGZvciBtaXNjIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworIAorKyMgU29tZSBzeXN0ZW0tZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgdXNlIG9wdGlvbgorKyMgZ3JvdXBzIChzZWUgc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGUsIGZvciBleGFtcGxlKS4KKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG1pc2MKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC00Niw0MCArNTAsNDcgQEAgcm91dGluZXMgOj0gYnJrIHNicmsgc3N0ayBpb2N0bCBcCisgCSAgICBzZWxlY3QgcHNlbGVjdCBcCisgCSAgICBhY2N0IGNocm9vdCBmc3luYyBzeW5jIGZkYXRhc3luYyBzeW5jZnMgcmVib290IFwKKyAJICAgIGdldGhvc3RpZCBzZXRob3N0aWQgXAorLQkgICAgcmV2b2tlIHZoYW5ndXAgXAorKwkgICAgdmhhbmd1cCBcCisgCSAgICBzd2Fwb24gc3dhcG9mZiBta3RlbXAgbWtzdGVtcCBta3N0ZW1wNjQgbWtkdGVtcCBcCisgCSAgICBta29zdGVtcCBta29zdGVtcDY0IG1rc3RlbXBzIG1rc3RlbXBzNjQgbWtvc3RlbXBzIG1rb3N0ZW1wczY0IFwKKyAJICAgIHVhbGFybSB1c2xlZXAgXAorIAkgICAgZ3R0eSBzdHR5IFwKKyAJICAgIHB0cmFjZSBcCistCSAgICBmc3RhYiBtbnRlbnQgbW50ZW50X3IgXAorKwkgICAgbW50ZW50IG1udGVudF9yIFwKKyAJICAgIHV0aW1lcyBsdXRpbWVzIGZ1dGltZXMgZnV0aW1lc2F0IFwKKyAJICAgIHRydW5jYXRlIGZ0cnVuY2F0ZSB0cnVuY2F0ZTY0IGZ0cnVuY2F0ZTY0IFwKKy0JICAgIGNoZmxhZ3MgZmNoZmxhZ3MgXAorIAkgICAgaW5zcmVtcXVlIGdldHR0eWVudCBnZXR1c2Vyc2hlbGwgZ2V0cGFzcyB0dHlzbG90IFwKKyAJICAgIHN5c2xvZyBzeXNjYWxsIGRhZW1vbiBcCisgCSAgICBtbWFwIG1tYXA2NCBtdW5tYXAgbXByb3RlY3QgbXN5bmMgbWFkdmlzZSBtaW5jb3JlIHJlbWFwX2ZpbGVfcGFnZXNcCisgCSAgICBtbG9jayBtdW5sb2NrIG1sb2NrYWxsIG11bmxvY2thbGwgXAorLQkgICAgZWZnY3Z0IGVmZ2N2dF9yIHFlZmdjdnQgcWVmZ2N2dF9yIFwKKyAJICAgIGhzZWFyY2ggaHNlYXJjaF9yIHRzZWFyY2ggbHNlYXJjaCBcCisgCSAgICBlcnIgZXJyb3IgdXN0YXQgXAorLQkgICAgZ2V0c3lzc3RhdHMgZGlybmFtZSByZWdleHAgXAorKwkgICAgZ2V0c3lzc3RhdHMgZGlybmFtZSBcCisgCSAgICBnZXRsb2FkYXZnIGdldGNsa3RjayBcCisgCSAgICBmZ2V0eGF0dHIgZmxpc3R4YXR0ciBmcmVtb3ZleGF0dHIgZnNldHhhdHRyIGdldHhhdHRyIFwKKyAJICAgIGxpc3R4YXR0ciBsZ2V0eGF0dHIgbGxpc3R4YXR0ciBscmVtb3ZleGF0dHIgbHNldHhhdHRyIFwKKyAJICAgIHJlbW92ZXhhdHRyIHNldHhhdHRyIGdldGF1eHZhbCBpZnVuYy1pbXBsLWxpc3QKKyAKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9SRUdFWFApICs9IHJlZ2V4cAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GU1RBQikgKz0gZnN0YWIKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQlNEKSArPSBjaGZsYWdzIGZjaGZsYWdzIHJldm9rZQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GQ1ZUKSArPSBlZmdjdnQgZWZnY3Z0X3IgcWVmZ2N2dCBxZWZnY3Z0X3IKKysKKyBnZW5lcmF0ZWQgKz0gdHN0LWVycm9yMS5tdHJhY2UgdHN0LWVycm9yMS1tZW0ub3V0CisgCisgYXV4IDo9IGluaXQtbWlzYworIGluc3RhbGwtbGliIDo9IGxpYmcuYQorIGdwbDJsZ3BsIDo9IGVycm9yLmMgZXJyb3IuaAorIAorLXRlc3RzIDo9IHRzdC1kaXJuYW1lIHRzdC10c2VhcmNoIHRzdC1mZHNldCB0c3QtZWZnY3Z0IHRzdC1tbnRlbnQgdHN0LWhzZWFyY2ggXAorLQkgdHN0LWVycm9yMSB0c3QtcHNlbGVjdCB0c3QtaW5zcmVtcXVlIHRzdC1tbnRlbnQyIGJ1Zy1oc2VhcmNoMQorK3Rlc3RzIDo9IHRzdC1kaXJuYW1lIHRzdC10c2VhcmNoIHRzdC1mZHNldCB0c3QtbW50ZW50IHRzdC1oc2VhcmNoIFwKKysJIHRzdC1wc2VsZWN0IHRzdC1pbnNyZW1xdWUgdHN0LW1udGVudDIgYnVnLWhzZWFyY2gxCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgKz0gdHN0LWVycm9yMQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19GQ1ZUKSArPSB0c3QtZWZnY3Z0CisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWVycm9yMS1tZW0ub3V0CisgZW5kaWYKKytlbmRpZgorIAorIENGTEFHUy1zZWxlY3QuYyA9IC1mZXhjZXB0aW9ucyAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCisgQ0ZMQUdTLXRzZWFyY2guYyA9ICQodXNlcy1jYWxsYmFja3MpCitkaWZmIC0tZ2l0IGEvbWlzYy9lcnIuYyBiL21pc2MvZXJyLmMKK2luZGV4IDdiOTgxNTcuLmVmY2U4ZDUgMTAwNjQ0CistLS0gYS9taXNjL2Vyci5jCisrKysgYi9taXNjL2Vyci5jCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjZGVmaW5lIGZsb2NrZmlsZShzKSBfSU9fZmxvY2tmaWxlIChzKQorQEAgLTM3LDYgKzM4LDcgQEAgZXh0ZXJuIGNoYXIgKl9fcHJvZ25hbWU7CisgICB2YV9lbmQgKGFwKTsJCQkJCQkJCSAgICAgIFwKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBzdGF0aWMgdm9pZAorIGNvbnZlcnRfYW5kX3ByaW50IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorIHsKK0BAIC04MSw2ICs4Myw3IEBAIGNvbnZlcnRfYW5kX3ByaW50IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorIAorICAgX192ZndwcmludGYgKHN0ZGVyciwgd2Zvcm1hdCwgYXApOworIH0KKysjZW5kaWYKKyAKKyB2b2lkCisgdndhcm54IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorQEAgLTg4LDkgKzkxLDEzIEBAIHZ3YXJueCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAgIGZsb2NrZmlsZSAoc3RkZXJyKTsKKyAgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBfX2Z3cHJpbnRmIChzdGRlcnIsIEwiJXM6ICIsIF9fcHJvZ25hbWUpOworICAgICAgIGNvbnZlcnRfYW5kX3ByaW50IChmb3JtYXQsIGFwKTsKKyAgICAgICBwdXR3Y191bmxvY2tlZCAoTCdcbicsIHN0ZGVycik7CisrI2Vsc2UKKysgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICAgICB7CitAQCAtMTExLDYgKzExOCw3IEBAIHZ3YXJuIChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorICAgZmxvY2tmaWxlIChzdGRlcnIpOworICAgaWYgKF9JT19md2lkZSAoc3RkZXJyLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIF9fZndwcmludGYgKHN0ZGVyciwgTCIlczogIiwgX19wcm9nbmFtZSk7CisgICAgICAgaWYgKGZvcm1hdCkKKyAJeworQEAgLTExOSw2ICsxMjcsOSBAQCB2d2FybiAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAJfQorICAgICAgIF9fc2V0X2Vycm5vIChlcnJvcik7CisgICAgICAgX19md3ByaW50ZiAoc3RkZXJyLCBMIiVtXG4iKTsKKysjZWxzZQorKyAgICAgIGFib3J0ICgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLS1naXQgYS9taXNjL2Vycm9yLmMgYi9taXNjL2Vycm9yLmMKK2luZGV4IGFhYTEyMGQuLmQ2Y2JjODIgMTAwNjQ0CistLS0gYS9taXNjL2Vycm9yLmMKKysrKyBiL21pc2MvZXJyb3IuYworQEAgLTM1LDYgKzM1LDcgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgIyBpbmNsdWRlIDxzdGRib29sLmg+CisgIyBpbmNsdWRlIDxzdGRpbnQuaD4KK0BAIC0yMDUsNiArMjA2LDcgQEAgZXJyb3JfdGFpbCAoaW50IHN0YXR1cywgaW50IGVycm51bSwgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQorICNpZiBfTElCQworICAgaWYgKF9JT19md2lkZSAoc3RkZXJyLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG1lc3NhZ2UpICsgMTsKKyAgICAgICB3Y2hhcl90ICp3bWVzc2FnZSA9IE5VTEw7CisgICAgICAgbWJzdGF0ZV90IHN0OworQEAgLTI2NSw2ICsyNjcsOSBAQCBlcnJvcl90YWlsIChpbnQgc3RhdHVzLCBpbnQgZXJybnVtLCBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFyZ3MpCisgCisgICAgICAgaWYgKHVzZV9tYWxsb2MpCisgCWZyZWUgKHdtZXNzYWdlKTsKKysjZWxzZQorKyAgICAgIGFib3J0ICgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbWlzYy90c3QtZWZnY3Z0LmMgYi9taXNjL3RzdC1lZmdjdnQuYworaW5kZXggNTA4M2ZlYy4uNzllZDM2YyAxMDA2NDQKKy0tLSBhL21pc2MvdHN0LWVmZ2N2dC5jCisrKysgYi9taXNjL3RzdC1lZmdjdnQuYworQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIHRlc3RjYXNlIGVjdnRfdGVzdHNbXSA9CisgICB7IDEyMy4wMSwgLTQsIDMsICIiIH0sCisgICB7IDEyNi43MSwgLTQsIDMsICIiIH0sCisgICB7IDAuMCwgNCwgMSwgIjAwMDAiIH0sCistI2lmIERCTF9NQU5UX0RJRyA9PSA1MworKyNpZiBEQkxfTUFOVF9ESUcgPT0gNTMgJiYgIShkZWZpbmVkIF9fcG93ZXJwY19fICYmIGRlZmluZWQgX19OT19GUFJTX18gJiYgIWRlZmluZWQgX1NPRlRfRkxPQVQgJiYgIWRlZmluZWQgX1NPRlRfRE9VQkxFKQorICAgeyAweDFwLTEwNzQsIDMsIC0zMjMsICI0OTQiIH0sCisgICB7IC0weDFwLTEwNzQsIDMsIC0zMjMsICI0OTQiIH0sCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbmlzL01ha2VmaWxlIGIvbmlzL01ha2VmaWxlCitpbmRleCAwMzdlNjc0Li5jOTY3ODUwIDEwMDY0NAorLS0tIGEvbmlzL01ha2VmaWxlCisrKysgYi9uaXMvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIE5JUy9OSVMrIHBhcnQuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbmlzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsMTkgKzMyLDI2IEBAIGVuZGlmCisgCisgIyBUaGVzZSBhcmUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIHRoZSBuaXMgKGFuZCBwZXJoYXBzIGxhdGVyIG5pc3BsdXMpCisgIyBzZXJ2aWNlLiAgVGhpcyBtdXN0IGJlIGEgc3VwZXJzZXQgb2YgdGhlIHNlcnZpY2VzIGluIG5zcy4KKy1kYXRhYmFzZXMJCT0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGdycCBwd2QgcnBjIGV0aGVycyBcCistCQkJICBzcHdkIG5ldGdycCBhbGlhcyBwdWJsaWNrZXkKKytkYXRhYmFzZXMteQkJOj0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGdycCBwd2QgcnBjIGV0aGVycyBcCisrCQkJICAgc3B3ZCBuZXRncnAgcHVibGlja2V5CisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTKSArPSBhbGlhcworIAorICMgU3BlY2lmeSBydWxlcyBmb3IgdGhlIG5zc18qIG1vZHVsZXMuCistc2VydmljZXMJCTo9IG5pcyBuaXNwbHVzIGNvbXBhdAorKyMgVGhlICdjb21wYXQnIG1vZHVsZSBpbmNsdWRlcyBuaXMgc3VwcG9ydCwgYW5kIHRoZSAnbnNzJyBkaXJlY3RvcnkKKysjIGluY2x1ZGVzIGEgYmFyZS1ib25lcyAiZmlsZXMiIGxpYnJhcnksIHNvIHdlJ2xsIGluY2x1ZGUgJ2NvbXBhdCcgaW4KKysjIE9QVElPTl9FR0xJQkNfTklTLgorK3NlcnZpY2VzLXkJCTo9Cisrc2VydmljZXMtJChPUFRJT05fRUdMSUJDX05JUykgKz0gbmlzIG5pc3BsdXMgY29tcGF0CisrCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTklTKSArPSBsaWJuc2wKKytleHRyYS1saWJzLXkJCSs9ICQoc2VydmljZXMteTolPWxpYm5zc18lKQorIAorLWV4dHJhLWxpYnMJCT0gbGlibnNsICQoc2VydmljZXM6JT1saWJuc3NfJSkKKyAjIFRoZXNlIGxpYnJhcmllcyB3aWxsIGJlIGJ1aWx0IGluIHRoZSBgb3RoZXJzJyBwYXNzIHJhdGhlciB0aGFuCisgIyB0aGUgYGxpYicgcGFzcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBsaWJjLnNvIGJlaW5nIGJ1aWx0IGFscmVhZHkuCistZXh0cmEtbGlicy1vdGhlcnMJPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy1vdGhlcnMteQkrPSAkKGV4dHJhLWxpYnMteSkKKyAKKyAjIFRoZSBzb3VyY2VzIGFyZSBmb3VuZCBpbiB0aGUgYXBwcm9wcmlhdGUgc3ViZGlyLgorLXN1YmRpci1kaXJzID0gJChzZXJ2aWNlczolPW5zc18lKQorK3N1YmRpci1kaXJzID0gJChzZXJ2aWNlcy15OiU9bnNzXyUpCisgdnBhdGggJS5jICQoc3ViZGlyLWRpcnMpCisgCisgbGlibnNsLXJvdXRpbmVzID0geXBfeGRyIHlwY2xudCB5cHVwZGF0ZV94ZHIgXAorQEAgLTYwLDExICs2OSwxMSBAQCBsaWJuc2wtcm91dGluZXMgPSB5cF94ZHIgeXBjbG50IHlwdXBkYXRlX3hkciBcCisgbGlibnNzX2NvbXBhdC1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBjb21wYXQtLGdycCBwd2Qgc3B3ZCBpbml0Z3JvdXBzKQorIGxpYm5zc19jb21wYXQtaW5oaWJpdC1vCT0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCistbGlibnNzX25pcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXMtLCQoZGF0YWJhc2VzKSkgbmlzLWluaXRncm91cHMgXAorK2xpYm5zc19uaXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzLSwkKGRhdGFiYXNlcy15KSkgbmlzLWluaXRncm91cHMgXAorIAkJCSAgIG5zcy1uaXMKKyBsaWJuc3NfbmlzLWluaGliaXQtbwk9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorLWxpYm5zc19uaXNwbHVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pc3BsdXMtLCQoZGF0YWJhc2VzKSkgbmlzcGx1cy1wYXJzZXIgXAorK2xpYm5zc19uaXNwbHVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pc3BsdXMtLCQoZGF0YWJhc2VzLXkpKSBuaXNwbHVzLXBhcnNlciBcCisgCQkJICAgbnNzLW5pc3BsdXMgbmlzcGx1cy1pbml0Z3JvdXBzCisgbGlibnNzX25pc3BsdXMtaW5oaWJpdC1vID0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCitAQCAtODAsMTIgKzg5LDEyIEBAIGxpYm5zbC1saWJjID0gJChjb21tb24tb2JqcGZ4KWxpbmtvYmovbGliYy5zbworICMgVGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIHNldHRpbmcgdG8gbGluayBvYmplY3RzIHVzaW5nIGRlcHJlY2F0ZWQKKyAjIFJQQyBpbnRlcmZhY2VzIHdpdGggdGhlIHZlcnNpb24gb2YgbGliYy5zbyB0aGF0IG1ha2VzIHRoZW0gYXZhaWxhYmxlCisgIyBmb3IgbmV3IGxpbmtzOgorLSQoc2VydmljZXM6JT0kKG9ianBmeClsaWJuc3NfJS5zbykgJChvYmpwZngpbGlibnNsLnNvOiBcCisrJChzZXJ2aWNlcy15OiU9JChvYmpwZngpbGlibnNzXyUuc28pICQob2JqcGZ4KWxpYm5zbC5zbzogXAorICAgbGliYy1mb3ItbGluayA9ICQobGlibnNsLWxpYmMpCisgCisgCisgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKy0kKG90aGVyczolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuc28kKGxpYm5zbC5zby12ZXJzaW9uKQorKyQob3RoZXJzLXk6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLnNvJChsaWJuc2wuc28tdmVyc2lvbikKKyBlbHNlCistJChvdGhlcnM6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLmEKKyskKG90aGVycy15OiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5hCisgZW5kaWYKK2RpZmYgLS1naXQgYS9ucHRsL01ha2VmaWxlIGIvbnB0bC9NYWtlZmlsZQoraW5kZXggYWFjYTBhNC4uNTk2Y2EzYyAxMDA2NDQKKy0tLSBhL25wdGwvTWFrZWZpbGUKKysrKyBiL25wdGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBOUFRMIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbnB0bAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTExOCw3ICsxMjAsNyBAQCBsaWJwdGhyZWFkLXJvdXRpbmVzID0gbnB0bC1pbml0IHZhcnMgZXZlbnRzIHZlcnNpb24gcHQtaW50ZXJwIFwKKyAJCSAgICAgIHB0LXJhaXNlIHB0LXN5c3RlbSBcCisgCQkgICAgICBmbG9ja2ZpbGUgZnRyeWxvY2tmaWxlIGZ1bmxvY2tmaWxlIFwKKyAJCSAgICAgIHNpZ2FjdGlvbiBcCistCQkgICAgICBoZXJybm8gcmVzIHB0LWFsbG9jcnRzaWcgXAorKwkJICAgICAgcHQtYWxsb2NydHNpZyBcCisgCQkgICAgICBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkcyBcCisgCQkgICAgICBwdGhyZWFkX2dldGFmZmluaXR5IHB0aHJlYWRfc2V0YWZmaW5pdHkgXAorIAkJICAgICAgcHRocmVhZF9hdHRyX2dldGFmZmluaXR5IHB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eSBcCitAQCAtMTM4LDggKzE0MCwxMCBAQCBsaWJwdGhyZWFkLXJvdXRpbmVzID0gbnB0bC1pbml0IHZhcnMgZXZlbnRzIHZlcnNpb24gcHQtaW50ZXJwIFwKKyAjCQkgICAgICBwdGhyZWFkX3NldGdpZCBwdGhyZWFkX3NldGVnaWQgcHRocmVhZF9zZXRyZWdpZCBcCisgIwkJICAgICAgcHRocmVhZF9zZXRyZXNnaWQKKyAKKytsaWJwdGhyZWFkLXJvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSA6PSBoZXJybm8gcmVzCisgbGlicHRocmVhZC1zaGFyZWQtb25seS1yb3V0aW5lcyA9IHZlcnNpb24gcHQtaW50ZXJwIHB0LWFsbG9jcnRzaWcgXAorIAkJCQkgIHVud2luZC1mb3JjZWR1bndpbmQKKysKKyBsaWJwdGhyZWFkLXN0YXRpYy1vbmx5LXJvdXRpbmVzID0gcHRocmVhZF9hdGZvcmsKKyAKKyAjIFNpbmNlIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpcyBpbiBsYXJnZSBwYXJ0cyBoYW5kbGVkIHVzaW5nIGV4Y2VwdGlvbnMKK0BAIC0yMjAsNyArMjI0LDcgQEAgdGVzdHMgPSB0c3QtdHlwZXNpemVzIFwKKyAJdHN0LW11dGV4cGkxIHRzdC1tdXRleHBpMiB0c3QtbXV0ZXhwaTMgdHN0LW11dGV4cGk0IHRzdC1tdXRleHBpNSBcCisgCXRzdC1tdXRleHBpNWEgdHN0LW11dGV4cGk2IHRzdC1tdXRleHBpNyB0c3QtbXV0ZXhwaTdhIHRzdC1tdXRleHBpOCBcCisgCXRzdC1tdXRleHBpOSBcCistCXRzdC1zcGluMSB0c3Qtc3BpbjIgdHN0LXNwaW4zIHRzdC1zcGluNCBcCisrCXRzdC1zcGluMSB0c3Qtc3BpbjIgdHN0LXNwaW4zIFwKKyAJdHN0LWNvbmQxIHRzdC1jb25kMiB0c3QtY29uZDMgdHN0LWNvbmQ0IHRzdC1jb25kNSB0c3QtY29uZDYgdHN0LWNvbmQ3IFwKKyAJdHN0LWNvbmQ4IHRzdC1jb25kOSB0c3QtY29uZDEwIHRzdC1jb25kMTEgdHN0LWNvbmQxMiB0c3QtY29uZDEzIFwKKyAJdHN0LWNvbmQxNCB0c3QtY29uZDE1IHRzdC1jb25kMTYgdHN0LWNvbmQxNyB0c3QtY29uZDE4IHRzdC1jb25kMTkgXAorQEAgLTI1NiwxNCArMjYwLDE0IEBAIHRlc3RzID0gdHN0LXR5cGVzaXplcyBcCisgCXRzdC1jYW5jZWw2IHRzdC1jYW5jZWw3IHRzdC1jYW5jZWw4IHRzdC1jYW5jZWw5IHRzdC1jYW5jZWwxMCBcCisgCXRzdC1jYW5jZWwxMSB0c3QtY2FuY2VsMTIgdHN0LWNhbmNlbDEzIHRzdC1jYW5jZWwxNCB0c3QtY2FuY2VsMTUgXAorIAl0c3QtY2FuY2VsMTYgdHN0LWNhbmNlbDE3IHRzdC1jYW5jZWwxOCB0c3QtY2FuY2VsMTkgdHN0LWNhbmNlbDIwIFwKKy0JdHN0LWNhbmNlbDIxIHRzdC1jYW5jZWwyMiB0c3QtY2FuY2VsMjMgdHN0LWNhbmNlbDI0IHRzdC1jYW5jZWwyNSBcCisrCXRzdC1jYW5jZWwyMSB0c3QtY2FuY2VsMjIgdHN0LWNhbmNlbDIzIHRzdC1jYW5jZWwyNSBcCisgCXRzdC1jYW5jZWwtc2VsZiB0c3QtY2FuY2VsLXNlbGYtY2FuY2Vsc3RhdGUgXAorIAl0c3QtY2FuY2VsLXNlbGYtY2FuY2VsdHlwZSB0c3QtY2FuY2VsLXNlbGYtdGVzdGNhbmNlbCBcCisgCXRzdC1jbGVhbnVwMCB0c3QtY2xlYW51cDEgdHN0LWNsZWFudXAyIHRzdC1jbGVhbnVwMyB0c3QtY2xlYW51cDQgXAorIAl0c3QtZmxvY2sxIHRzdC1mbG9jazIgXAorIAl0c3Qtc2lnbmFsMSB0c3Qtc2lnbmFsMiB0c3Qtc2lnbmFsMyB0c3Qtc2lnbmFsNCB0c3Qtc2lnbmFsNSBcCisgCXRzdC1zaWduYWw2IHRzdC1zaWduYWw3IFwKKy0JdHN0LWV4ZWMxIHRzdC1leGVjMiB0c3QtZXhlYzMgdHN0LWV4ZWM0IFwKKysJdHN0LWV4ZWMyIHRzdC1leGVjMyB0c3QtZXhlYzQgXAorIAl0c3QtZXhpdDEgdHN0LWV4aXQyIHRzdC1leGl0MyBcCisgCXRzdC1zdGRpbzEgdHN0LXN0ZGlvMiBcCisgCXRzdC1zdGFjazEgdHN0LXN0YWNrMiB0c3Qtc3RhY2szIHRzdC1zdGFjazQgdHN0LXB0aHJlYWQtZ2V0YXR0ciBcCitAQCAtMjcxLDEzICsyNzUsMTIgQEAgdGVzdHMgPSB0c3QtdHlwZXNpemVzIFwKKyAJdHN0LXVubG9hZCBcCisgCXRzdC1kbHN5bTEgXAorIAl0c3Qtc3lzY29uZiBcCistCXRzdC1sb2NhbGUxIHRzdC1sb2NhbGUyIFwKKysJdHN0LWxvY2FsZTIgXAorIAl0c3QtdW1hc2sxIFwKKyAJdHN0LXBvcGVuMSBcCisgCXRzdC1jbG9jazEgXAorIAl0c3QtY29udGV4dDEgXAorIAl0c3Qtc2NoZWQxIFwKKy0JdHN0LWJhY2t0cmFjZTEgXAorIAl0c3QtYWJzdGltZSBcCisgCXRzdC12Zm9yazEgdHN0LXZmb3JrMiB0c3QtdmZvcmsxeCB0c3QtdmZvcmsyeCBcCisgCXRzdC1nZXRwaWQzIFwKK0BAIC0yODgsOSArMjkxLDE2IEBAIHh0ZXN0cyA9IHRzdC1zZXR1aWQxIHRzdC1zZXR1aWQxLXN0YXRpYyB0c3Qtc2V0dWlkMiBcCisgCXRzdC1tdXRleHBwMSB0c3QtbXV0ZXhwcDYgdHN0LW11dGV4cHAxMAorIHRlc3Qtc3JjcyA9IHRzdC1vZGRzdGFja2xpbWl0CisgCistIyBUZXN0IGV4cGVjdGVkIHRvIGZhaWwgb24gbW9zdCB0YXJnZXRzIChleGNlcHQgeDg2XzY0KSBkdWUgdG8gYnVnCistIyAxODQzNSAtIHB0aHJlYWRfb25jZSBoYW5ncyB3aGVuIGluaXQgcm91dGluZSB0aHJvd3MgYW4gZXhjZXB0aW9uLgorLXRlc3QteGZhaWwtdHN0LW9uY2U1ID0geWVzCisrIyBUaGlzIHRlc3QgdXNlcyB0aGUgcG9zaXhfc3Bhd24gZnVuY3Rpb25zLgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19TUEFXTikgKz0gdHN0LWV4ZWMxCisrCisrIyBUaGlzIHRlc3QgdXNlcyB0aGUgJ2JhY2t0cmFjZScgZnVuY3Rpb25zLgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UpICs9IHRzdC1iYWNrdHJhY2UxCisrCisrIyBUaGlzIHRlc3QgaXMgd3JpdHRlbiBpbiBDKysuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gdHN0LWNhbmNlbDI0CisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSB0c3QtbG9jYWxlMQorIAorICMgRmlsZXMgd2hpY2ggbXVzdCBub3QgYmUgbGlua2VkIHdpdGggbGlicHRocmVhZC4KKyB0ZXN0cy1ub2xpYnB0aHJlYWQgPSB0c3QtdW5sb2FkCitkaWZmIC0tZ2l0IGEvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jIGIvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jCitpbmRleCBkMTBmNGVhLi4xNDI1N2NlIDEwMDY0NAorLS0tIGEvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jCisrKysgYi9ucHRsL3B0aHJlYWRfY3JlYXRlLmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPGRlZmF1bHQtc2NoZWQuaD4KKyAjaW5jbHVkZSA8ZnV0ZXgtaW50ZXJuYWwuaD4KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisgCisgI2luY2x1ZGUgPHN0YXAtcHJvYmUuaD4KK0BAIC0yNjIsOCArMjYzLDEwIEBAIFNUQVJUX1RIUkVBRF9ERUZOCisgICBUSFJFQURfU0VUTUVNIChwZCwgY3B1Y2xvY2tfb2Zmc2V0LCBub3cpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgLyogSW5pdGlhbGl6ZSByZXNvbHZlciBzdGF0ZSBwb2ludGVyLiAgKi8KKyAgIF9fcmVzcCA9ICZwZC0+cmVzOworKyNlbmRpZgorIAorICAgLyogSW5pdGlhbGl6ZSBwb2ludGVycyB0byBsb2NhbGUgZGF0YS4gICovCisgICBfX2N0eXBlX2luaXQgKCk7CitAQCAtMzQ2LDggKzM0OSwxMCBAQCBTVEFSVF9USFJFQURfREVGTgorICAgLyogUnVuIHRoZSBkZXN0cnVjdG9yIGZvciB0aGUgdGhyZWFkLWxvY2FsIGRhdGEuICAqLworICAgX19ucHRsX2RlYWxsb2NhdGVfdHNkICgpOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgLyogQ2xlYW4gdXAgYW55IHN0YXRlIGxpYmMgc3RvcmVkIGluIHRocmVhZC1sb2NhbCB2YXJpYWJsZXMuICAqLworICAgX19saWJjX3RocmVhZF9mcmVlcmVzICgpOworKyNlbmRpZgorIAorICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCB0aHJlYWQgd2UgdGVybWluYXRlIHRoZSBwcm9jZXNzIG5vdy4gIFdlCisgICAgICBkbyBub3Qgbm90aWZ5IHRoZSBkZWJ1Z2dlciwgaXQgbWlnaHQganVzdCBpcnJpdGF0ZSBpdCBpZiB0aGVyZQorZGlmZiAtLWdpdCBhL25zY2QvTWFrZWZpbGUgYi9uc2NkL01ha2VmaWxlCitpbmRleCBlZGU5NDFkLi5mNGYzZjhkIDEwMDY0NAorLS0tIGEvbnNjZC9NYWtlZmlsZQorKysrIGIvbnNjZC9NYWtlZmlsZQorQEAgLTE4LDE0ICsxOCwxNyBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgbnNjZCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5zY2QKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBpZm5lcSAoJCh1c2UtbnNjZCksbm8pCistcm91dGluZXMgOj0gbnNjZF9nZXRwd19yIG5zY2RfZ2V0Z3JfciBuc2NkX2dldGhzdF9yIG5zY2RfZ2V0YWkgXAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBcCisrCSAgICAgbnNjZF9nZXRwd19yIG5zY2RfZ2V0Z3JfciBuc2NkX2dldGhzdF9yIG5zY2RfZ2V0YWkgXAorIAkgICAgbnNjZF9pbml0Z3JvdXBzIG5zY2RfZ2V0c2Vydl9yIG5zY2RfbmV0Z3JvdXAKKy1hdXgJOj0gbnNjZF9oZWxwZXIKKythdXgtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2RfaGVscGVyCisgZW5kaWYKKyAKKyAjIFRvIGZpbmQgeG1hbGxvYy5jCitAQCAtMzcsMTQgKzQwLDE4IEBAIG5zY2QtbW9kdWxlcyA6PSBuc2NkIGNvbm5lY3Rpb25zIHB3ZGNhY2hlIGdldHB3bmFtX3IgZ2V0cHd1aWRfciBncnBjYWNoZSBcCisgCQlkYmdfbG9nIG5zY2RfY29uZiBuc2NkX3N0YXQgY2FjaGUgbWVtIG5zY2Rfc2V0dXBfdGhyZWFkIFwKKyAJCXhtYWxsb2MgeHN0cmR1cCBhaWNhY2hlIGluaXRncmNhY2hlIGdhaSByZXNfaGNvbmYgXAorIAkJbmV0Z3JvdXBjYWNoZQorLQorK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19OSVMpKQorKyMgSWYgd2UgaGF2ZW4ndCBidWlsZCBsaWJuc2wuc28sIHRoZW4gd2UnbGwgbmVlZCB0byBpbmNsdWRlIG91cgorKyMgb3duIGNvcHkgb2YgbmlzX2hhc2guCisrbnNjZC1tb2R1bGVzICs9IG5pc19oYXNoCisrZW5kaWYKKyBpZmVxICgkKGJ1aWxkLW5zY2QpJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXN5ZXMpCisgCistb3RoZXJzICs9IG5zY2QKKy1vdGhlcnMtcGllICs9IG5zY2QKKy1pbnN0YWxsLXNiaW4gOj0gbnNjZAorK290aGVycy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZAorK290aGVycy1waWUtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2QKKytpbnN0YWxsLXNiaW4tJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2QKKyAKKy1leHRyYS1vYmpzID0gJChuc2NkLW1vZHVsZXM6PS5vKQorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9ICQobnNjZC1tb2R1bGVzOj0ubykKKyAKKyBlbmRpZgorIAorQEAgLTEwMCw3ICsxMDcsMTUgQEAgaW5jbHVkZSAkKHBhdHN1YnN0ICUsJCguLiljcHBmbGFncy1pdGVyYXRvci5taywkKGNwcC1zcmNzLWxlZnQpKQorICQob2JqcGZ4KW5zY2Q6ICQobnNjZC1tb2R1bGVzOiU9JChvYmpwZngpJS5vKQorIAorIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCistJChvYmpwZngpbnNjZDogJChzaGFyZWQtdGhyZWFkLWxpYnJhcnkpICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLnNvCisrJChvYmpwZngpbnNjZDogJChzaGFyZWQtdGhyZWFkLWxpYnJhcnkpCisrZWxzZQorKyQob2JqcGZ4KW5zY2Q6ICQoc3RhdGljLXRocmVhZC1saWJyYXJ5KQorK2VuZGlmCisrCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTklTKSkKKytpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorKyQob2JqcGZ4KW5zY2Q6ICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLnNvCisgZWxzZQorLSQob2JqcGZ4KW5zY2Q6ICQoc3RhdGljLXRocmVhZC1saWJyYXJ5KSAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5hCisrJChvYmpwZngpbnNjZDogJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuYQorK2VuZGlmCisgZW5kaWYKK2RpZmYgLS1naXQgYS9uc2NkL25pc19oYXNoLmMgYi9uc2NkL25pc19oYXNoLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kMjQ0YzQxCistLS0gL2Rldi9udWxsCisrKysgYi9uc2NkL25pc19oYXNoLmMKK0BAIC0wLDAgKzEsMyBAQAorKy8qIElmIE9QVElPTl9FR0xJQkNfTklTIGlzIGRpc2FibGVkLCBuc2NkIGNhbid0IGdldCB0aGlzIGZyb20gbGlibnNsLnNvOworKyAgIHdlIG5lZWQgb3VyIG93biBjb3B5LiAgKi8KKysjaW5jbHVkZSAiLi4vbmlzL25pc19oYXNoLmMiCitkaWZmIC0tZ2l0IGEvbnNzL01ha2VmaWxlIGIvbnNzL01ha2VmaWxlCitpbmRleCA2NWFiN2I1Li4xOWYwYWVmIDEwMDY0NAorLS0tIGEvbnNzL01ha2VmaWxlCisrKysgYi9uc3MvTWFrZWZpbGUKK0BAIC0xOCwyOCArMTgsMzUgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgbmFtZSBzZXJ2aWNlIHN3aXRjaC4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBuc3MKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQkJOj0gbnNzLmgKKyAKKy0jIFRoaXMgaXMgdGhlIHRyaXZpYWwgcGFydCB3aGljaCBnb2VzIGludG8gbGliYyBpdHNlbGYuCistcm91dGluZXMJCT0gbnNzd2l0Y2ggZ2V0bnNzZW50IGdldG5zc2VudF9yIGRpZ2l0c19kb3RzIFwKKy0JCQkgICQoYWRkc3VmZml4IC1sb29rdXAsJChkYXRhYmFzZXMpKQorLQorICMgVGhlc2UgYXJlIHRoZSBkYXRhYmFzZXMgdGhhdCBnbyB0aHJvdWdoIG5zcyBkaXNwYXRjaC4KKyAjIENhdXRpb246IGlmIHlvdSBhZGQgYSBkYXRhYmFzZSBoZXJlLCB5b3UgbXVzdCBhZGQgaXRzIHJlYWwgbmFtZQorICMgaW4gZGF0YWJhc2VzLmRlZiwgdG9vLgorLWRhdGFiYXNlcwkJPSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZ3JwIHB3ZCBldGhlcnMgXAorLQkJCSAgc3B3ZCBuZXRncnAgYWxpYXMgc2dycAorK2RhdGFiYXNlcy15CQk9IGdycCBwd2Qgc3B3ZCBzZ3JwCisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCQkJKz0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGV0aGVycyBcCisrCQkJICAgbmV0Z3JwCisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTKSArPSBhbGlhcworKworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBkaWdpdHNfZG90cworIAorIGlmbmVxICgsJChmaWx0ZXIgc3VucnBjLCQoc3ViZGlycykpKQorLWRhdGFiYXNlcwkJKz0ga2V5IHJwYworK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkJKz0ga2V5IHJwYworIGhhdmUtc3VucnBjCQk6PSAxCisgZWxzZQorIGhhdmUtc3VucnBjCQk6PSAwCisgZW5kaWYKKysjIFRoaXMgaXMgdGhlIHRyaXZpYWwgcGFydCB3aGljaCBnb2VzIGludG8gbGliYyBpdHNlbGYuCisrcm91dGluZXMteQkJKz0gbnNzd2l0Y2ggZ2V0bnNzZW50IGdldG5zc2VudF9yIFwKKysJCQkgICQoYWRkc3VmZml4IC1sb29rdXAsJChkYXRhYmFzZXMteSkpCisrCisgQ1BQRkxBR1MtZ2V0ZW50LmMJPSAtREhBVkVfU1VOUlBDPSQoaGF2ZS1zdW5ycGMpCisgCisgb3RoZXJzICAgICAgICAgICAgICAgICAgOj0gZ2V0ZW50IG1ha2VkYgorQEAgLTQ3LDggKzU0LDkgQEAgaW5zdGFsbC1iaW4gICAgICAgICAgICAgOj0gZ2V0ZW50IG1ha2VkYgorIG1ha2VkYi1tb2R1bGVzID0geG1hbGxvYyBoYXNoLXN0cmluZworIGV4dHJhLW9ianMJCSs9ICQobWFrZWRiLW1vZHVsZXM6PS5vKQorIAorLXRlc3RzCQkJPSB0ZXN0LW5ldGRiIHRzdC1uc3MtdGVzdDEgdGVzdC1kaWdpdHMtZG90cyB0c3QtbnNzLWdldHB3ZW50CisteHRlc3RzCQkJPSBidWctZXJhbmdlCisrdGVzdHMJCQk9IHRzdC1uc3MtdGVzdDEgdHN0LW5zcy1nZXRwd2VudAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKQkrPSB0ZXN0LW5ldGRiIHRlc3QtZGlnaXRzLWRvdHMKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpCSs9IGJ1Zy1lcmFuZ2UKKyAKKyAjIFNwZWNpZnkgcnVsZXMgZm9yIHRoZSBuc3NfKiBtb2R1bGVzLiAgV2UgaGF2ZSBzb21lIHNlcnZpY2VzLgorIHNlcnZpY2VzCQk6PSBmaWxlcyBkYgorQEAgLTYzLDcgKzcxLDcgQEAgc3ViZGlyLWRpcnMgPSAkKHNlcnZpY2VzOiU9bnNzXyUpCisgdnBhdGggJS5jICQoc3ViZGlyLWRpcnMpIC4uL2xvY2FsZS9wcm9ncmFtcyAuLi9pbnRsCisgCisgCistbGlibnNzX2ZpbGVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IGZpbGVzLSwkKGRhdGFiYXNlcykpIFwKKytsaWJuc3NfZmlsZXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggZmlsZXMtLCQoZGF0YWJhc2VzLXkpKSBcCisgCQkJICAgZmlsZXMtaW5pdGdyb3VwcyBmaWxlcy1oYXZlX29fY2xvZXhlYyBmaWxlcy1pbml0CisgCisgbGlibnNzX2RiLWRicwkJOj0gJChhZGRwcmVmaXggZGItLFwKK0BAIC04Niw2ICs5NCw0NSBAQCB0ZXN0cy1zdGF0aWMJCT0gdHN0LW5zcy1zdGF0aWMKKyB0ZXN0cwkJCSs9ICQodGVzdHMtc3RhdGljKQorIGVuZGlmCisgCisraWZuZXEgKCQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSCkseSkKKysKKytpZm5kZWYgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcKKyskKGVycm9yIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHIHZhcmlhYmxlIGxlZnQgdW5zZXQpCisrZW5kaWYKKysKKytpZm5kZWYgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMKKyskKGVycm9yIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TIHZhcmlhYmxlIGxlZnQgdW5zZXQpCisrZW5kaWYKKysKKytpZmVxICgsJCh3aWxkY2FyZCAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKSkpCisrJCh3YXJuaW5nIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQsIGJ1dCBmaXhlZCBjb25maWcgZmlsZSkKKyskKGVycm9yIGRvZXMgbm90IGV4aXN0OiAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKSkKKytlbmRpZgorKworK2lmZXEgKCwkKHdpbGRjYXJkICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpKSkKKyskKHdhcm5pbmcgT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCwgYnV0IGZpeGVkIGZ1bmN0aW9ucyBmaWxlKQorKyQoZXJyb3IgZG9lcyBub3QgZXhpc3Q6ICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpKQorK2VuZGlmCisrCisrYmVmb3JlLWNvbXBpbGUgOj0gJChvYmpwZngpZml4ZWQtbnNzd2l0Y2guaAorK2dlbmVyYXRlZCA6PSBmaXhlZC1uc3N3aXRjaC5oCisrJChvYmpwZngpZml4ZWQtbnNzd2l0Y2guaCAkKG9iamZweClmaXhlZC1uc3N3aXRjaC1saWJzOglcCisrICAgICQob2JqcGZ4KWdlbi1maXhlZC1uc3N3aXRjaAkJCQlcCisrICAgICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpCisrCSQ8ICQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLmgJCQlcCisrCSAgICQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLWxpYnMJCQlcCisrCSAgICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpCisrCisrJChvYmpwZngpZ2VuLWZpeGVkLW5zc3dpdGNoOiBnZW4tZml4ZWQtbnNzd2l0Y2guYwlcCisrICAgICQoY29tbW9uLW9ianBmeClvcHRpb24tZ3JvdXBzLmNvbmZpZwkJXAorKyAgICAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKQorKwkkKG5hdGl2ZS1jb21waWxlKQorK2dlbi1maXhlZC1uc3N3aXRjaC1DRkxBR1MgPQkJCQkJCVwKKysJLWczIC1PIC1XYWxsCQkJCQkJCVwKKysJLUkgJChvYmpwZngpCQkJCQkJCVwKKysJLURGSVhFRF9GVU5DVElPTlM9JyIkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKSInCisrZW5kaWYKKysKKyBpbmNsdWRlIC4uL1J1bGVzCisgCisgaWZlcSAoeWVzLCQoaGF2ZS1zZWxpbnV4KSkKK2RpZmYgLS1naXQgYS9uc3MvZml4ZWQtbnNzd2l0Y2guY29uZiBiL25zcy9maXhlZC1uc3N3aXRjaC5jb25mCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTFiYjY3NQorLS0tIC9kZXYvbnVsbAorKysrIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYKK0BAIC0wLDAgKzEsMjIgQEAKKysjIC9ldGMvbnNzd2l0Y2guY29uZgorKyMKKysjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgZml4ZWQgbmFtZSBzZXJ2aWNlLgorKyMgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBPUFRJT05fRUdMSUJDX05TU1dJVENIIGluIG9wdGlvbi1ncm91cHMuZGVmCisrIyBmb3IgZGV0YWlscy4KKysjCisrCisrYWxpYXNlczogICAgICAgIGZpbGVzCisrCisrcGFzc3dkOiAgICAgICAgIGZpbGVzCisrZ3JvdXA6ICAgICAgICAgIGZpbGVzCisrc2hhZG93OiAgICAgICAgIGZpbGVzCisrCisraG9zdHM6ICAgICAgICAgIGZpbGVzIGRucworK25ldHdvcmtzOiAgICAgICBmaWxlcyBkbnMKKysKKytwcm90b2NvbHM6ICAgICAgZmlsZXMKKytzZXJ2aWNlczogICAgICAgZmlsZXMKKytldGhlcnM6ICAgICAgICAgZmlsZXMKKytycGM6ICAgICAgICAgICAgZmlsZXMKKysKKytuZXRncm91cDogICAgICAgZmlsZXMKK2RpZmYgLS1naXQgYS9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJmM2ZhODMKKy0tLSAvZGV2L251bGwKKysrKyBiL25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMKK0BAIC0wLDAgKzEsMTIxIEBACisrLyogTGlzdCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBmb3IgZml4ZWQgTlNTIGluIEdOVSBDIExpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQgKHNlZSBvcHRpb24tZ3JvdXBzLmRlZiksCisrICAgRUdMSUJDIGRvZXMgbm90IHVzZSB0aGUgJ2Rsb3BlbicgYW5kICdkbHN5bScgZnVuY3Rpb25zIHRvIGxvb2sgZm9yCisrICAgZGF0YWJhc2UgcXVlcnkgZnVuY3Rpb25zIGluIHRoZSBpbmRpdmlkdWFsIG5hbWUgc2VydmljZSBsaWJyYXJpZXMuCisrICAgSW5zdGVhZCwgaXQgdXNlcyBhIHNldCBvZiBmdW5jdGlvbnMgY2hvc2VuIGF0IGNvbXBpbGUgdGltZSwgYXMKKysgICBkaXJlY3RlZCBieSB0aGUgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMgZmlsZS4gIFRoaXMKKysgICBmaWxlIGlzIGEgc2FtcGxlIG9mIHdoYXQgeW91IG1pZ2h0IHVzZSB0aGVyZS4KKysKKysgICBUaGlzIGZpbGUgaXMgQyBzb3VyY2UgY29kZTsgaXQgc2hvdWxkIG9ubHkgY29udGFpbiBpbnZvY2F0aW9ucyBvZgorKyAgIHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorKworKyAgIC0gREVGSU5FX0VOVCAoREFUQUJBU0UsIFNFUlZJQ0UsIFgpCisrCisrICAgICBEZWNsYXJlIHRoZSAnc2V0WGVudCcsICdnZXRYZW50X3InLCBhbmQgJ2VuZFhlbnQnIGZ1bmN0aW9ucyB0aGF0CisrICAgICBxdWVyeSBEQVRBQkFTRSB1c2luZyB0aGUgc2VydmljZSBsaWJyYXJ5ICdsaWJuc3NfU0VSVklDRS5zby4yJy4KKysgICAgIERBVEFCQVNFIHNob3VsZCBiZSB0aGUgZnVsbCBuYW1lIG9mIHRoZSBkYXRhYmFzZSBhcyBpdCBhcHBlYXJzIGluCisrICAgICAnbnNzd2l0Y2guY29uZicsIGxpa2UgJ3Bhc3N3ZCcgb3IgJ2FsaWFzZXMnLgorKworKyAgICAgKFRoZSBub24tcmVlbnRyYW50ICdnZXRYZW50JyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zCisrICAgICBvZiB0aGUgcmVlbnRyYW50ICdnZXRYZW50X3InIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworKyAgICAgcmVmZXIgdG8gdGhlbSBleHBsaWNpdGx5IGhlcmUuKQorKworKyAgIC0gREVGSU5FX0dFVEJZIChEQVRBQkFTRSwgU0VSVklDRSwgWCwgS0VZKQorKworKyAgICAgRGVjbGFyZSB0aGUgJ2dldFhieUtFWV9yJyBmdW5jdGlvbnMgdGhhdCBxdWVyeSBEQVRBQkFTRSB1c2luZworKyAgICAgU0VSVklDRS4gIERBVEFCQVNFIGFuZCBTRVJWSUNFIGFyZSBhcyBkZXNjcmliZWQgYWJvdmUuCisrCisrICAgICAoVGhlIG5vbi1yZWVudHJhbnQgJ2dldFhieUtFWScgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcworKyAgICAgb2YgdGhlIHJlZW50cmFudCAnZ2V0WGJ5S0VZX3InIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworKyAgICAgcmVmZXIgdG8gdGhlbSBleHBsaWNpdGx5IGhlcmUuKQorKworKyAgICAgVXNlIHRoZSBzcGVjaWFsIGtleSAnbmFtZTMnIGZvciB0aGUgc2VydmljZSBsaWJyYXJ5IGZ1bmN0aW9uIHRoYXQKKysgICAgIGltcGxlbWVudHMgdGhlICdnZXRhZGRyaW5mbycgZnVuY3Rpb24uCisrCisrICAgLSBERUZJTkVfR0VUIChEQVRBQkFTRSwgU0VSVklDRSwgUVVFUlkpCisrCisrICAgICBEZWNsYXJlIHRoZSAnZ2V0UVVFUllfcicgZnVuY3Rpb25zIHRoYXQgcXVlcnkgREFUQUJBU0UgdXNpbmcKKysgICAgIFNFUlZJQ0UuICBUaGlzIGlzIHVzZWQgZm9yIGZ1bmN0aW9ucyBsaWtlICdnZXRwd25hbScuCisrCisrICAgICAoVGhlIG5vbi1yZWVudHJhbnQgJ2dldFFVRVJZJyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zCisrICAgICBvZiB0aGUgcmVlbnRyYW50ICdnZXRRVUVSWV9yJyBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKysgICAgIHJlZmVyIHRvIHRoZW0gZXhwbGljaXRseSBoZXJlLikKKysKKysgICBUaGlzIHNhbXBsZSBmaWxlIG9ubHkgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29uc3VsdCB0aGUgZmlsZXMgaW4KKysgICAnL2V0YycsIGFuZCB0aGUgRG9tYWluIE5hbWUgU3lzdGVtIChETlMpLiAgKi8KKysKKysvKiBhbGlhc2VzICovCisrREVGSU5FX0VOVCAoYWxpYXNlcywgZmlsZXMsIGFsaWFzKQorK0RFRklORV9HRVRCWSAoYWxpYXNlcywgZmlsZXMsIGFsaWFzLCBuYW1lKQorKworKy8qIGV0aGVycyAqLworK0RFRklORV9FTlQgKGV0aGVycywgZmlsZXMsIGV0aGVyKQorKworKy8qIGdyb3VwICovCisrREVGSU5FX0VOVCAoZ3JvdXAsIGZpbGVzLCBncikKKytERUZJTkVfR0VUIChncm91cCwgZmlsZXMsIGdyZ2lkKQorK0RFRklORV9HRVQgKGdyb3VwLCBmaWxlcywgZ3JuYW0pCisrCisrLyogaG9zdHMgKi8KKytERUZJTkVfRU5UIChob3N0cywgZmlsZXMsIGhvc3QpCisrREVGSU5FX0dFVEJZIChob3N0cywgZmlsZXMsIGhvc3QsIGFkZHIpCisrREVGSU5FX0dFVEJZIChob3N0cywgZmlsZXMsIGhvc3QsIG5hbWUpCisrREVGSU5FX0dFVEJZIChob3N0cywgZmlsZXMsIGhvc3QsIG5hbWUyKQorK0RFRklORV9HRVQgKGhvc3RzLCBmaWxlcywgaG9zdHRvbikKKytERUZJTkVfR0VUIChob3N0cywgZmlsZXMsIG50b2hvc3QpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBhZGRyKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIG5hbWUyKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgbmFtZTMpCisrCisrLyogbmV0Z3JvdXAgKi8KKytERUZJTkVfRU5UIChuZXRncm91cCwgZmlsZXMsIG5ldGdyKQorKworKy8qIG5ldHdvcmtzICovCisrREVGSU5FX0VOVCAobmV0d29ya3MsIGZpbGVzLCBuZXQpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZmlsZXMsIG5ldCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBmaWxlcywgbmV0LCBhZGRyKQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGRucywgbmV0LCBuYW1lKQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGRucywgbmV0LCBhZGRyKQorKworKy8qIHByb3RvY29scyAqLworK0RFRklORV9FTlQgKHByb3RvY29scywgZmlsZXMsIHByb3RvKQorK0RFRklORV9HRVRCWSAocHJvdG9jb2xzLCBmaWxlcywgcHJvdG8sIG5hbWUpCisrREVGSU5FX0dFVEJZIChwcm90b2NvbHMsIGZpbGVzLCBwcm90bywgbnVtYmVyKQorKworKy8qIHBhc3N3ZCAqLworK0RFRklORV9FTlQgKHBhc3N3ZCwgZmlsZXMsIHB3KQorK0RFRklORV9HRVQgKHBhc3N3ZCwgZmlsZXMsIHB3bmFtKQorK0RFRklORV9HRVQgKHBhc3N3ZCwgZmlsZXMsIHB3dWlkKQorKworKy8qIHJwYyAqLworK0RFRklORV9FTlQgKHJwYywgZmlsZXMsIHJwYykKKytERUZJTkVfR0VUQlkgKHJwYywgZmlsZXMsIHJwYywgbmFtZSkKKytERUZJTkVfR0VUQlkgKHJwYywgZmlsZXMsIHJwYywgbnVtYmVyKQorKworKy8qIHNlcnZpY2VzICovCisrREVGSU5FX0VOVCAoc2VydmljZXMsIGZpbGVzLCBzZXJ2KQorK0RFRklORV9HRVRCWSAoc2VydmljZXMsIGZpbGVzLCBzZXJ2LCBuYW1lKQorK0RFRklORV9HRVRCWSAoc2VydmljZXMsIGZpbGVzLCBzZXJ2LCBwb3J0KQorKworKy8qIHNoYWRvdyAqLworK0RFRklORV9FTlQgKHNoYWRvdywgZmlsZXMsIHNwKQorK0RFRklORV9HRVQgKHNoYWRvdywgZmlsZXMsIHNwbmFtKQorZGlmZiAtLWdpdCBhL25zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYyBiL25zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjZlMWM5OGMKKy0tLSAvZGV2L251bGwKKysrKyBiL25zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYworQEAgLTAsMCArMSw4MDMgQEAKKysvKiBnZW4tZml4ZWQtbnNzd2l0Y2guYyAtLS0gZ2VuZXJhdGUgZml4ZWQgbmFtZSBzZXJ2aWNlIGRhdGEgc3RydWN0dXJlcworKyAgIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5LCAyMDAxLTIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImdudS9saWItbmFtZXMuaCIKKysjaW5jbHVkZSAibnNzLmgiCisrCisrLyogUHJvdmlkZSBhIGZhbGxiYWNrIGRlZmluaXRpb24gdG8gYWxsb3cgdGhpcyBmaWxlIHRvIGJlIGNvbXBpbGVkIG91dHNpZGUKKysgICBsaWJjLiAgKi8KKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysMCisrLyogU2ltcGxlIHV0aWxpdGllcy4gICovCisrCisrdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKQorK2Vycm9yIChjb25zdCBjaGFyICptZXNzYWdlKQorK3sKKysgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtZXNzYWdlKTsKKysgIGV4aXQgKDEpOworK30KKysKKysKKyt2b2lkICoKKytjaGVja19hbGxvYyAodm9pZCAqcCkKKyt7CisrICBpZiAocCkKKysgICAgcmV0dXJuIHA7CisrICBlbHNlCisrICAgIGVycm9yICgib3V0IG9mIG1lbW9yeSIpOworK30KKysKKyt2b2lkICoKKyt4bWFsbG9jIChzaXplX3Qgc2l6ZSkKKyt7CisrICByZXR1cm4gY2hlY2tfYWxsb2MgKG1hbGxvYyAoc2l6ZSkpOworK30KKysKKysKKysvKiBGb3JtYXQgQVJHUyBhY2NvcmRpbmcgdG8gRk9STUFULCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYQorKyAgIG1hbGxvYydlZCBzdHJpbmcuICAqLworK2NoYXIgKgorK3NhcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBzaXplX3QgbGVuOworKyAgY2hhciAqYnVmOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICBsZW4gPSB2c25wcmludGYgKE5VTEwsIDAsIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKworKyAgYnVmID0geG1hbGxvYyAobGVuICsgMSk7CisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIGFzc2VydCAobGVuID09IHZzbnByaW50ZiAoYnVmLCBsZW4gKyAxLCBmb3JtYXQsIGFyZ3MpKTsKKysgIHZhX2VuZCAoYXJncyk7CisrCisrICByZXR1cm4gYnVmOworK30KKysKKysKKysMCisrLyogRGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluIG1lbW9yeS4gICovCisrCisrLyogVGhlc2UgYXJlIGNvcGllZCBmcm9tIG5zc3dpdGNoLmguCisrCisrICAgV2UgY291bGQgc2ltcGx5ICNpbmNsdWRlIHRoYXQgZmlsZSwgYnV0IHRoaXMgcHJvZ3JhbSBydW5zIG9uIHRoZQorKyAgIGJ1aWxkIG1hY2hpbmUgYW5kIGxpbmtzIGFnYWluc3QgdGhlIGJ1aWxkIG1hY2hpbmUncyBsaWJyYXJpZXMsCisrICAgd2hlcmVhcyB0aGF0IGhlYWRlciBpcyBtZWFudCBmb3IgdXNlIGJ5IHRhcmdldCBjb2RlOyBpdCB1c2VzCisrICAgJ2xpYmNfaGlkZGVuX3Byb3RvJywgJ2ludGVybmFsX2Z1bmN0aW9uJywgYW5kIHJlbGF0ZWQgaGFpci4gIFNpbmNlCisrICAgd2UndmUgY29waWVkIHRoZSBwYXJzaW5nIGNvZGUsIHdlIG1pZ2h0IGFzIHdlbGwgY29weSB0aGUgZGF0YQorKyAgIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBhcyB3ZWxsLiAgKi8KKysKKysvKiBBY3Rpb25zIHBlcmZvcm1lZCBhZnRlciBsb29rdXAgZmluaXNoZWQuICAqLworK3R5cGVkZWYgZW51bQorK3sKKysgIE5TU19BQ1RJT05fQ09OVElOVUUsCisrICBOU1NfQUNUSU9OX1JFVFVSTgorK30gbG9va3VwX2FjdGlvbnM7CisrCisrCisrdHlwZWRlZiBzdHJ1Y3Qgc2VydmljZV9saWJyYXJ5CisreworKyAgLyogTmFtZSBvZiBzZXJ2aWNlIChgZmlsZXMnLCBgZG5zJywgYG5pcycsIC4uLikuICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIC8qIFBvaW50ZXIgdG8gdGhlIGxvYWRlZCBzaGFyZWQgbGlicmFyeS4gICovCisrICB2b2lkICpsaWJfaGFuZGxlOworKyAgLyogQW5kIHRoZSBsaW5rIHRvIHRoZSBuZXh0IGVudHJ5LiAgKi8KKysgIHN0cnVjdCBzZXJ2aWNlX2xpYnJhcnkgKm5leHQ7CisrfSBzZXJ2aWNlX2xpYnJhcnk7CisrCisrCisrLyogRm9yIG1hcHBpbmcgYSBmdW5jdGlvbiBuYW1lIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gIEl0IGlzIGtub3duIGluCisrICAgbnNzd2l0Y2guYzpuc3NfbG9va3VwX2Z1bmN0aW9uIHRoYXQgYSBzdHJpbmcgcG9pbnRlciBmb3IgdGhlIGxvb2t1cCBrZXkKKysgICBpcyB0aGUgZmlyc3QgbWVtYmVyLiAgKi8KKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGNvbnN0IGNoYXIgKmZjdF9uYW1lOworKyAgdm9pZCAqZmN0X3B0cjsKKyt9IGtub3duX2Z1bmN0aW9uOworKworKworK3R5cGVkZWYgc3RydWN0IHNlcnZpY2VfdXNlcgorK3sKKysgIC8qIEFuZCB0aGUgbGluayB0byB0aGUgbmV4dCBlbnRyeS4gICovCisrICBzdHJ1Y3Qgc2VydmljZV91c2VyICpuZXh0OworKyAgLyogQWN0aW9uIGFjY29yZGluZyB0byByZXN1bHQuICAqLworKyAgbG9va3VwX2FjdGlvbnMgYWN0aW9uc1s1XTsKKysgIC8qIExpbmsgdG8gdGhlIHVuZGVybHlpbmcgbGlicmFyeSBvYmplY3QuICAqLworKyAgc2VydmljZV9saWJyYXJ5ICpsaWJyYXJ5OworKyAgLyogQ29sbGVjdGlvbiBvZiBrbm93biBmdW5jdGlvbnMuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZW5hYmxlZCwgdGhpcyBpcyB0aGUgcm9vdCBvZiBhCisrICAgICAndHNlYXJjaCctc3R5bGUgdHJlZS4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBkaXNhYmxlZCwgdGhpcyBpcyBhbiBhcnJheSBvZgorKyAgICAgcG9pbnRlcnMgdG8ga25vd25fZnVuY3Rpb24gc3RydWN0dXJlcywgTlVMTC10ZXJtaW5hdGVkLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIHZvaWQgKnRyZWU7CisrICAgIGNvbnN0IGtub3duX2Z1bmN0aW9uICoqYXJyYXk7CisrICB9IGtub3duOworKyAgLyogTmFtZSBvZiB0aGUgc2VydmljZSAoYGZpbGVzJywgYGRucycsIGBuaXMnLCAuLi4pLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrfSBzZXJ2aWNlX3VzZXI7CisrCisrLyogVG8gYWNjZXNzIHRoZSBhY3Rpb24gYmFzZWQgb24gdGhlIHN0YXR1cyB2YWx1ZSB1c2UgdGhpcyBtYWNyby4gICovCisrI2RlZmluZSBuc3NfbmV4dF9hY3Rpb24obmksIHN0YXR1cykgKChuaSktPmFjdGlvbnNbMiArIHN0YXR1c10pCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgbmFtZV9kYXRhYmFzZV9lbnRyeQorK3sKKysgIC8qIEFuZCB0aGUgbGluayB0byB0aGUgbmV4dCBlbnRyeS4gICovCisrICBzdHJ1Y3QgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbmV4dDsKKysgIC8qIExpc3Qgb2Ygc2VydmljZSB0byBiZSB1c2VkLiAgKi8KKysgIHNlcnZpY2VfdXNlciAqc2VydmljZTsKKysgIC8qIE5hbWUgb2YgdGhlIGRhdGFiYXNlLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrfSBuYW1lX2RhdGFiYXNlX2VudHJ5OworKworKworK3R5cGVkZWYgc3RydWN0IG5hbWVfZGF0YWJhc2UKKyt7CisrICAvKiBMaXN0IG9mIGFsbCBrbm93biBkYXRhYmFzZXMuICAqLworKyAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZW50cnk7CisrICAvKiBMaXN0IG9mIGxpYnJhcmllcyB3aXRoIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uICAqLworKyAgc2VydmljZV9saWJyYXJ5ICpsaWJyYXJ5OworK30gbmFtZV9kYXRhYmFzZTsKKysKKysKKysMCisrLyogR2F0aGVyaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgRklYRURfRlVOQ1RJT05TIGZpbGUuICAqLworKworKy8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBnZW5lcmF0ZSB0aGlzIGxpc3QgYXV0b21hdGljYWxseSBieQorKyAgIGxvb2tpbmcgYXQgdGhlIHNlcnZpY2VzIGFuZCBkYXRhYmFzZXMgdXNlZCBpbiB0aGUgbnNzd2l0Y2guY29uZgorKyAgIGZpbGUsIGFuZCBoYXZpbmcgYSBoYXJkLWNvZGVkIHNldCBvZiBxdWVyaWVzIHN1cHBvcnRlZCBvbiBlYWNoCisrICAgZGF0YWJhc2UuICAqLworKworKy8qIFdlICNpbmNsdWRlIHRoZSBGSVhFRF9GVU5DVElPTlMgZmlsZSBzZXZlcmFsIHRpbWVzIHRvIGJ1aWxkIGFuCisrICAgYXJyYXkgb2YgZnVuY3Rpb24gc3RydWN0dXJlcyBob2xkaW5nIGl0cyBkYXRhLiAgKi8KKytlbnVtIGZ1bmN0aW9uX2tpbmQgeworKyAgZmtfZW5kID0gMCwgICAgICAgICAgICAgICAgICAgLyogTGFzdCBlbnRyeS4gICovCisrICBma19zZXRlbnQsICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIHNldHB3ZW50LiAgKi8KKysgIGZrX2dldGVudCwgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZ2V0cHdlbnQuICAqLworKyAgZmtfZW5kZW50LCAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBlbmRwd2VudC4gICovCisrICBma19nZXRieSwgICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGdldGhvc3RieW5hbWUuICAqLworKyAgZmtfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBnZXRwd25hbS4gICovCisrfTsKKysKKysKKytzdHJ1Y3QgZnVuY3Rpb24geworKyAgLyogV2hhdCBraW5kIG9mIGZ1bmN0aW9uIHRoaXMgaXMuICAqLworKyAgZW51bSBmdW5jdGlvbl9raW5kIGtpbmQ7CisrCisrICAvKiBUaGUgZGF0YWJhc2UgYW5kIHNlcnZpY2Ugb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGhhcmR3aXJlZCBpbi4gICovCisrICBjaGFyICpkYXRhYmFzZSwgKnNlcnZpY2U7CisrCisrICAvKiBUaGUga2luZCBvZiBlbnRyeSBiZWluZyBxdWVyaWVkLCBmb3IgJ2ZrX3NldGVudCcsICdma19nZXRlbnQnLAorKyAgICAgJ2ZrX2VuZGVudCcsIGFuZCAnZmtfZ2V0YnknIGZ1bmN0aW9ucy4gICovCisrICBjaGFyICplbnRyeTsKKysKKysgIC8qIFRoZSBrZXksIGZvciAnZmtfZ2V0YnknIGVudHJpZXMuICAqLworKyAgY2hhciAqa2V5OworKworKyAgLyogVGhlIHZhbHVlIGFuZCBrZXksIGZvciAnZmtfZ2V0JyBlbnRyaWVzLiAgKi8KKysgIGNoYXIgKnZhbHVlX2FuZF9rZXk7CisrfTsKKysKKysKKytjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gZnVuY3Rpb25zW10gPQorKyAgeworKworKyNkZWZpbmUgREVGSU5FX0VOVChkYXRhYmFzZSwgc2VydmljZSwgZW50cnkpICAgIFwKKysgICAgeyBma19zZXRlbnQsICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSB9LCBcCisrICAgIHsgZmtfZ2V0ZW50LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnkgfSwgXAorKyAgICB7IGZrX2VuZGVudCwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5IH0sCisrI2RlZmluZSBERUZJTkVfR0VUQlkoZGF0YWJhc2UsIHNlcnZpY2UsIGVudHJ5LCBrZXkpICAgXAorKyAgICB7IGZrX2dldGJ5LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnksICNrZXkgfSwKKysjZGVmaW5lIERFRklORV9HRVQoZGF0YWJhc2UsIHNlcnZpY2UsIHZhbHVlX2FuZF9rZXkpICAgICBcCisrICAgIHsgZmtfZ2V0LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCBOVUxMLCBOVUxMLCAjdmFsdWVfYW5kX2tleSB9LAorKworKyNpbmNsdWRlIEZJWEVEX0ZVTkNUSU9OUworKworKyN1bmRlZiBERUZJTkVfRU5UCisrI3VuZGVmIERFRklORV9HRVRCWQorKyN1bmRlZiBERUZJTkVfR0VUCisrCisrICAgIHsgZmtfZW5kIH0KKysgIH07CisrCisrDAorKy8qIFBhcnNpbmcgdGhlIGNvbmZpZyBmaWxlLiAgRnVuY3Rpb25zIGNvcGllZCBmcm9tIG5zc3dpdGNoLmMuICAqLworKworKyNkZWZpbmUgX19zdHJjaHJudWwgc3RyY2hybnVsCisrI2RlZmluZSBfX2dldGxpbmUgZ2V0bGluZQorKyNkZWZpbmUgX19zdHJuY2FzZWNtcCBzdHJuY2FzZWNtcAorKworKy8qIFByb3RvdHlwZXMgZm9yIHRoZSBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBuYW1lX2RhdGFiYXNlICpuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICpuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIHNlcnZpY2VfdXNlciAqbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworKworK3N0YXRpYyBuYW1lX2RhdGFiYXNlICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK25zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkKKyt7CisrICBGSUxFICpmcDsKKysgIG5hbWVfZGF0YWJhc2UgKnJlc3VsdDsKKysgIG5hbWVfZGF0YWJhc2VfZW50cnkgKmxhc3Q7CisrICBjaGFyICpsaW5lOworKyAgc2l6ZV90IGxlbjsKKysKKysgIC8qIE9wZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gICovCisrICBmcCA9IGZvcGVuIChmbmFtZSwgInJjIik7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvLyAvKiBObyB0aHJlYWRzIHVzZSB0aGlzIHN0cmVhbS4gICovCisrICAvLyBfX2ZzZXRsb2NraW5nIChmcCwgRlNFVExPQ0tJTkdfQllDQUxMRVIpOworKworKyAgcmVzdWx0ID0gKG5hbWVfZGF0YWJhc2UgKikgeG1hbGxvYyAoc2l6ZW9mIChuYW1lX2RhdGFiYXNlKSk7CisrCisrICByZXN1bHQtPmVudHJ5ID0gTlVMTDsKKysgIHJlc3VsdC0+bGlicmFyeSA9IE5VTEw7CisrICBsYXN0ID0gTlVMTDsKKysgIGxpbmUgPSBOVUxMOworKyAgbGVuID0gMDsKKysgIGRvCisrICAgIHsKKysgICAgICBuYW1lX2RhdGFiYXNlX2VudHJ5ICp0aGlzOworKyAgICAgIHNzaXplX3QgbjsKKysKKysgICAgICBuID0gX19nZXRsaW5lICgmbGluZSwgJmxlbiwgZnApOworKyAgICAgIGlmIChuIDwgMCkKKysJYnJlYWs7CisrICAgICAgaWYgKGxpbmVbbiAtIDFdID09ICdcbicpCisrCWxpbmVbbiAtIDFdID0gJ1wwJzsKKysKKysgICAgICAvKiBCZWNhdXNlIHRoZSBmaWxlIGZvcm1hdCBkb2VzIG5vdCBrbm93IGFueSBmb3JtIG9mIHF1b3Rpbmcgd2UKKysJIGNhbiBzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIG5leHQgJyMnIGNoYXJhY3RlciBhbmQgaWYgZm91bmQKKysJIG1ha2UgaXQgdGVybWluYXRpbmcgdGhlIGxpbmUuICAqLworKyAgICAgICpfX3N0cmNocm51bCAobGluZSwgJyMnKSA9ICdcMCc7CisrCisrICAgICAgLyogSWYgdGhlIGxpbmUgaXMgYmxhbmsgaXQgaXMgaWdub3JlZC4gICovCisrICAgICAgaWYgKGxpbmVbMF0gPT0gJ1wwJykKKysJY29udGludWU7CisrCisrICAgICAgLyogRWFjaCBsaW5lIGNvbXBsZXRlbHkgc3BlY2lmaWVzIHRoZSBhY3Rpb25zIGZvciBhIGRhdGFiYXNlLiAgKi8KKysgICAgICB0aGlzID0gbnNzX2dldGxpbmUgKGxpbmUpOworKyAgICAgIGlmICh0aGlzICE9IE5VTEwpCisrCXsKKysJICBpZiAobGFzdCAhPSBOVUxMKQorKwkgICAgbGFzdC0+bmV4dCA9IHRoaXM7CisrCSAgZWxzZQorKwkgICAgcmVzdWx0LT5lbnRyeSA9IHRoaXM7CisrCisrCSAgbGFzdCA9IHRoaXM7CisrCX0KKysgICAgfQorKyAgd2hpbGUgKCFmZW9mX3VubG9ja2VkIChmcCkpOworKworKyAgLyogRnJlZSB0aGUgYnVmZmVyLiAgKi8KKysgIGZyZWUgKGxpbmUpOworKyAgLyogQ2xvc2UgY29uZmlndXJhdGlvbiBmaWxlLiAgKi8KKysgIGZjbG9zZSAoZnApOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrLyogUmVhZCB0aGUgc291cmNlIG5hbWVzOgorKwlgKCA8c291cmNlPiAoICJbIiAiISI/ICg8c3RhdHVzPiAiPSIgPGFjdGlvbj4gKSsgIl0iICk/ICkqJworKyAgICovCisrc3RhdGljIHNlcnZpY2VfdXNlciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorK3sKKysgIHNlcnZpY2VfdXNlciAqcmVzdWx0ID0gTlVMTCwgKipuZXh0cCA9ICZyZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIHNlcnZpY2VfdXNlciAqbmV3X3NlcnZpY2U7CisrICAgICAgY29uc3QgY2hhciAqbmFtZTsKKysKKysgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCSsrbGluZTsKKysgICAgICBpZiAobGluZVswXSA9PSAnXDAnKQorKwkvKiBObyBzb3VyY2Ugc3BlY2lmaWVkLiAgKi8KKysJcmV0dXJuIHJlc3VsdDsKKysKKysgICAgICAvKiBSZWFkIDxzb3VyY2U+IGlkZW50aWZpZXIuICAqLworKyAgICAgIG5hbWUgPSBsaW5lOworKyAgICAgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJ1snKQorKwkrK2xpbmU7CisrICAgICAgaWYgKG5hbWUgPT0gbGluZSkKKysJcmV0dXJuIHJlc3VsdDsKKysKKysKKysgICAgICBuZXdfc2VydmljZSA9IChzZXJ2aWNlX3VzZXIgKikgeG1hbGxvYyAoc2l6ZW9mICgqbmV3X3NlcnZpY2UpKTsKKysgICAgICBuZXdfc2VydmljZS0+bmFtZSA9IChjaGFyICopIHhtYWxsb2MgKGxpbmUgLSBuYW1lICsgMSk7CisrCisrICAgICAgKigoY2hhciAqKSBfX21lbXBjcHkgKChjaGFyICopIG5ld19zZXJ2aWNlLT5uYW1lLCBuYW1lLCBsaW5lIC0gbmFtZSkpCisrICAgICAgICA9ICdcMCc7CisrCisrICAgICAgLyogU2V0IGRlZmF1bHQgYWN0aW9ucy4gICovCisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVFJZQUdBSU5dID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19VTkFWQUlMXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfTk9URk9VTkRdID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19TVUNDRVNTXSA9IE5TU19BQ1RJT05fUkVUVVJOOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1JFVFVSTl0gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKysgICAgICBuZXdfc2VydmljZS0+bGlicmFyeSA9IE5VTEw7CisrICAgICAgbmV3X3NlcnZpY2UtPmtub3duLnRyZWUgPSBOVUxMOworKyAgICAgIG5ld19zZXJ2aWNlLT5uZXh0ID0gTlVMTDsKKysKKysgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCSsrbGluZTsKKysKKysgICAgICBpZiAobGluZVswXSA9PSAnWycpCisrCXsKKysJICAvKiBSZWFkIGNyaXRlcmlvbnMuICAqLworKwkgIGRvCisrCSAgICArK2xpbmU7CisrCSAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiBpc3NwYWNlIChsaW5lWzBdKSk7CisrCisrCSAgZG8KKysJICAgIHsKKysJICAgICAgaW50IG5vdDsKKysJICAgICAgZW51bSBuc3Nfc3RhdHVzIHN0YXR1czsKKysJICAgICAgbG9va3VwX2FjdGlvbnMgYWN0aW9uOworKworKwkgICAgICAvKiBHcm9rICEgYmVmb3JlIG5hbWUgdG8gbWVhbiBhbGwgc3RhdGlpIGJ1dCB0aGF0IG9uZS4gICovCisrCSAgICAgIG5vdCA9IGxpbmVbMF0gPT0gJyEnOworKwkgICAgICBpZiAobm90KQorKwkJKytsaW5lOworKworKwkgICAgICAvKiBSZWFkIHN0YXR1cyBuYW1lLiAgKi8KKysJICAgICAgbmFtZSA9IGxpbmU7CisrCSAgICAgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJz0nCisrCQkgICAgICYmIGxpbmVbMF0gIT0gJ10nKQorKwkJKytsaW5lOworKworKwkgICAgICAvKiBDb21wYXJlIHdpdGgga25vd24gc3RhdGlpLiAgKi8KKysJICAgICAgaWYgKGxpbmUgLSBuYW1lID09IDcpCisrCQl7CisrCQkgIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiU1VDQ0VTUyIsIDcpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19TVUNDRVNTOworKwkJICBlbHNlIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiVU5BVkFJTCIsIDcpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19VTkFWQUlMOworKwkJICBlbHNlCisrCQkgICAgcmV0dXJuIHJlc3VsdDsKKysJCX0KKysJICAgICAgZWxzZSBpZiAobGluZSAtIG5hbWUgPT0gOCkKKysJCXsKKysJCSAgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJOT1RGT1VORCIsIDgpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19OT1RGT1VORDsKKysJCSAgZWxzZSBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIlRSWUFHQUlOIiwgOCkgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX1RSWUFHQUlOOworKwkJICBlbHNlCisrCQkgICAgcmV0dXJuIHJlc3VsdDsKKysJCX0KKysJICAgICAgZWxzZQorKwkJcmV0dXJuIHJlc3VsdDsKKysKKysJICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkJKytsaW5lOworKwkgICAgICBpZiAobGluZVswXSAhPSAnPScpCisrCQlyZXR1cm4gcmVzdWx0OworKwkgICAgICBkbworKwkJKytsaW5lOworKwkgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpOworKworKwkgICAgICBuYW1lID0gbGluZTsKKysJICAgICAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnPScKKysJCSAgICAgJiYgbGluZVswXSAhPSAnXScpCisrCQkrK2xpbmU7CisrCisrCSAgICAgIGlmIChsaW5lIC0gbmFtZSA9PSA2ICYmIF9fc3RybmNhc2VjbXAgKG5hbWUsICJSRVRVUk4iLCA2KSA9PSAwKQorKwkJYWN0aW9uID0gTlNTX0FDVElPTl9SRVRVUk47CisrCSAgICAgIGVsc2UgaWYgKGxpbmUgLSBuYW1lID09IDgKKysJCSAgICAgICAmJiBfX3N0cm5jYXNlY21wIChuYW1lLCAiQ09OVElOVUUiLCA4KSA9PSAwKQorKwkJYWN0aW9uID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysJICAgICAgZWxzZQorKwkJcmV0dXJuIHJlc3VsdDsKKysKKysJICAgICAgaWYgKG5vdCkKKysJCXsKKysJCSAgLyogU2F2ZSB0aGUgY3VycmVudCBhY3Rpb24gc2V0dGluZyBmb3IgdGhpcyBzdGF0dXMsCisrCQkgICAgIHNldCB0aGVtIGFsbCB0byB0aGUgZ2l2ZW4gYWN0aW9uLCBhbmQgcmVzZXQgdGhpcyBvbmUuICAqLworKwkJICBjb25zdCBsb29rdXBfYWN0aW9ucyBzYXZlID0gbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIHN0YXR1c107CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1RSWUFHQUlOXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVU5BVkFJTF0gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX05PVEZPVU5EXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfU1VDQ0VTU10gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBzdGF0dXNdID0gc2F2ZTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIHN0YXR1c10gPSBhY3Rpb247CisrCisrCSAgICAgIC8qIFNraXAgd2hpdGUgc3BhY2VzLiAgKi8KKysJICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkJKytsaW5lOworKwkgICAgfQorKwkgIHdoaWxlIChsaW5lWzBdICE9ICddJyk7CisrCisrCSAgLyogU2tpcCB0aGUgJ10nLiAgKi8KKysJICArK2xpbmU7CisrCX0KKysKKysgICAgICAqbmV4dHAgPSBuZXdfc2VydmljZTsKKysgICAgICBuZXh0cCA9ICZuZXdfc2VydmljZS0+bmV4dDsKKysgICAgfQorK30KKysKKytzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkKKyt7CisrICBjb25zdCBjaGFyICpuYW1lOworKyAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqcmVzdWx0OworKyAgc2l6ZV90IGxlbjsKKysKKysgIC8qIElnbm9yZSBsZWFkaW5nIHdoaXRlIHNwYWNlcy4gIEFUVEVOVElPTjogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorKyAgICAgd2hhdCBpcyBpbXBsZW1lbnRlZCBpbiBTb2xhcmlzLiAgVGhlIFNvbGFyaXMgbWFuIHBhZ2Ugc2F5cyBhIGxpbmUKKysgICAgIGJlZ2lubmluZyB3aXRoIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyIGlzIGlnbm9yZWQuICBXZSByZWdhcmQKKysgICAgIHRoaXMgYXMganVzdCBhbm90aGVyIG1pc2ZlYXR1cmUgaW4gU29sYXJpcy4gICovCisrICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrICAgICsrbGluZTsKKysKKysgIC8qIFJlY29nbml6ZSBgPGRhdGFiYXNlPiAiOiInLiAgKi8KKysgIG5hbWUgPSBsaW5lOworKyAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnOicpCisrICAgICsrbGluZTsKKysgIGlmIChsaW5lWzBdID09ICdcMCcgfHwgbmFtZSA9PSBsaW5lKQorKyAgICAvKiBTeW50YXggZXJyb3IuICAqLworKyAgICByZXR1cm4gTlVMTDsKKysgICpsaW5lKysgPSAnXDAnOworKworKyAgbGVuID0gc3RybGVuIChuYW1lKSArIDE7CisrCisrICByZXN1bHQgPSAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSB4bWFsbG9jIChzaXplb2YgKCpyZXN1bHQpKTsKKysgIHJlc3VsdC0+bmFtZSA9IChjaGFyICopIHhtYWxsb2MgKGxlbik7CisrCisrICAvKiBTYXZlIHRoZSBkYXRhYmFzZSBuYW1lLiAgKi8KKysgIG1lbWNweSAoKGNoYXIgKikgcmVzdWx0LT5uYW1lLCBuYW1lLCBsZW4pOworKworKyAgLyogUGFyc2UgdGhlIGxpc3Qgb2Ygc2VydmljZXMuICAqLworKyAgcmVzdWx0LT5zZXJ2aWNlID0gbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAobGluZSk7CisrCisrICByZXN1bHQtPm5leHQgPSBOVUxMOworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrDAorKy8qIEdlbmVyYXRpbmcgY29kZSBmb3Igc3RhdGljYWxseSBpbml0aWFsaXplZCBuc3N3aXRjaCBzdHJ1Y3R1cmVzLiAgKi8KKysKKysKKysvKiBSZXR1cm4gdGhlIHNlcnZpY2UtbmV1dHJhbCBzdWZmaXggb2YgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UKKysgICBsaWJyYXJ5IGZ1bmN0aW9uIHJlZmVycmVkIHRvIGJ5IHRoZSBmdW5jdGlvbiBGLiAgVGhlIHJlc3VsdCBpcworKyAgIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4gICovCisrY2hhciAqCisra25vd25fZnVuY3Rpb25fc3VmZml4IChjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gKmYpCisreworKyAgc3dpdGNoIChmLT5raW5kKQorKyAgICB7CisrICAgIGNhc2UgZmtfc2V0ZW50OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoInNldCVzZW50IiwgZi0+ZW50cnkpOworKworKyAgICBjYXNlIGZrX2dldGVudDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJnZXQlc2VudF9yIiwgZi0+ZW50cnkpOworKworKyAgICBjYXNlIGZrX2VuZGVudDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJlbmQlc2VudCIsIGYtPmVudHJ5KTsKKysKKysgICAgY2FzZSBma19nZXRieToKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJnZXQlc2J5JXNfciIsIGYtPmVudHJ5LCBmLT5rZXkpOworKworKyAgICBjYXNlIGZrX2dldDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJnZXQlc19yIiwgZi0+dmFsdWVfYW5kX2tleSk7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgYWJvcnQgKCk7CisrICAgIH0KKyt9CisrCisrCisrLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGxpYnJhcnkgZnVuY3Rpb24gcmVmZXJyZWQgdG8gYnkgdGhlCisrICAgZnVuY3Rpb24gRi4gIFRoZSByZXN1bHQgaXMgYWxsb2NhdGVkIHdpdGggbWFsbG9jLiAgKi8KKytjaGFyICoKKytrbm93bl9mdW5jdGlvbl9uYW1lIChjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gKmYpCisreworKyAgcmV0dXJuIHNhcHJpbnRmICgiX25zc18lc18lcyIsIGYtPnNlcnZpY2UsIGtub3duX2Z1bmN0aW9uX3N1ZmZpeCAoZikpOworK30KKysKKysKKysvKiBXcml0ZSBpbml0aWFsaXplZCBrbm93bl9mdW5jdGlvbiBzdHJ1Y3R1cmVzIHRvIE9VVCBmb3IKKysgICBhbGwgdGhlIGZ1bmN0aW9ucyB3ZSdsbCB1c2UuICAqLworK3ZvaWQKKytnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbnMgKEZJTEUgKm91dCkKKyt7CisrICBpbnQgaTsKKysKKysgIC8qIEZpcnN0LCBnZW5lcmF0ZSB3ZWFrIHJlZmVyZW5jZXMgdG8gdGhlIGZ1bmN0aW9ucy4gIFRoZSBzZXJ2aWNlCisrICAgICBsaWJyYXJpZXMgZGVwZW5kIG9uIGxpYmMsIGFuZCBpZiB0aGVzZSByZWZlcmVuY2VzIHdlcmVuJ3Qgd2VhaywKKysgICAgIHdlJ2QgYmUgbWFraW5nIGxpYmMgZGVwZW5kIGNpcmN1bGFybHkgb24gdGhlIHNlcnZpY2UKKysgICAgIGxpYnJhcmllcy4gICovCisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICB7CisrICAgICAgY2hhciAqbmFtZSA9IGtub3duX2Z1bmN0aW9uX25hbWUgKCZmdW5jdGlvbnNbaV0pOworKyAgICAgIGZwcmludGYgKG91dCwgInR5cGVvZiAoJXMpICVzIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7XG4iLAorKyAgICAgICAgICAgICAgIG5hbWUsIG5hbWUpOworKyAgICB9CisrICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgIC8qIFRoZW4sIGEgdGFibGUgbWFwcGluZyBuYW1lcyB0byBmdW5jdGlvbnMuICAqLworKyAgZnB1dHMgKCJzdGF0aWMgY29uc3Qga25vd25fZnVuY3Rpb24gZml4ZWRfa25vd25fZnVuY3Rpb25zW10gPSB7XG4iLAorKyAgICAgICAgIG91dCk7CisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmID0gJmZ1bmN0aW9uc1tpXTsKKysgICAgICBjaGFyICpzdWZmaXggPSBrbm93bl9mdW5jdGlvbl9zdWZmaXggKGYpOworKworKyAgICAgIGZwcmludGYgKG91dCwgIiAgLyogJTJkICovIHsgXCIlc1wiLCBfbnNzXyVzXyVzIH0sXG4iLAorKyAgICAgICAgICAgICAgIGksIHN1ZmZpeCwgZi0+c2VydmljZSwgc3VmZml4KTsKKysgICAgfQorKyAgZnB1dHMgKCJ9O1xuIiwgb3V0KTsKKysgIGZwdXRzICgiXG4iLCBvdXQpOworK30KKysKKysKKysvKiBQcmludCBjb2RlIHRvIE9VVCBmb3IgYW4gaW5pdGlhbGl6ZWQgYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlCisrICAgJ2tub3duX2Z1bmN0aW9uJyBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3IgVVNFUiwgd2hpY2ggaXMgZm9yCisrICAgREFUQUJBU0UuICBSZXR1cm4gaXRzIG5hbWUsIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4gICovCisrY2hhciAqCisrZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25fbGlzdCAoRklMRSAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVfZGF0YWJhc2VfZW50cnkgKmRhdGFiYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VfdXNlciAqdXNlcikKKyt7CisrICBjaGFyICpsaXN0X25hbWUgPSBzYXByaW50ZiAoImZpeGVkXyVzXyVzX2tub3duX2Z1bmNzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZS0+bmFtZSwgdXNlci0+bmFtZSk7CisrICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3Qga25vd25fZnVuY3Rpb24gKiVzW10gPSB7XG4iLAorKyAgICAgICAgICAgbGlzdF9uYW1lKTsKKysgIGludCBpOworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgaWYgKHN0cmNtcCAoZnVuY3Rpb25zW2ldLmRhdGFiYXNlLCBkYXRhYmFzZS0+bmFtZSkgPT0gMAorKyAgICAgICAgJiYgc3RyY21wIChmdW5jdGlvbnNbaV0uc2VydmljZSwgdXNlci0+bmFtZSkgPT0gMCkKKysgICAgICBmcHJpbnRmIChvdXQsICIgICZmaXhlZF9rbm93bl9mdW5jdGlvbnNbJWRdLCAvKiAlcyAqL1xuIiwKKysgICAgICAgICAgICAgICBpLCBrbm93bl9mdW5jdGlvbl9uYW1lICgmZnVuY3Rpb25zW2ldKSk7CisrICBmcHV0cyAoIiAgTlVMTFxuIiwgb3V0KTsKKysgIGZwdXRzICgifTtcbiIsIG91dCk7CisrICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgIHJldHVybiBsaXN0X25hbWU7CisrfQorKworKworKy8qIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgc3RhdHVzIHZhbHVlIFNUQVRVUywgYXMgYSBzdGF0aWNhbGx5CisrICAgYWxsb2NhdGVkIHN0cmluZy4gICovCisrY29uc3QgY2hhciAqCisrbG9va3VwX3N0YXR1c19uYW1lIChlbnVtIG5zc19zdGF0dXMgc3RhdHVzKQorK3sKKysgIHN3aXRjaCAoc3RhdHVzKQorKyAgICB7CisrICAgIGNhc2UgTlNTX1NUQVRVU19UUllBR0FJTjogcmV0dXJuICJOU1NfU1RBVFVTX1RSWUFHQUlOIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1VOQVZBSUw6IHJldHVybiAiTlNTX1NUQVRVU19VTkFWQUlMIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX05PVEZPVU5EOiByZXR1cm4gIk5TU19TVEFUVVNfTk9URk9VTkQiOworKyAgICBjYXNlIE5TU19TVEFUVVNfU1VDQ0VTUzogcmV0dXJuICJOU1NfU1RBVFVTX1NVQ0NFU1MiOworKyAgICBjYXNlIE5TU19TVEFUVVNfUkVUVVJOOiByZXR1cm4gIk5TU19TVEFUVVNfUkVUVVJOIjsKKysgICAgZGVmYXVsdDogYWJvcnQgKCk7CisrICAgIH07CisrfQorKworKworKy8qIFJldHVybiB0aGUgbmFtZSBvZiBBQ1RJT04gYXMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcuICAqLworK2NvbnN0IGNoYXIgKgorK2xvb2t1cF9hY3Rpb25fbmFtZSAobG9va3VwX2FjdGlvbnMgYWN0aW9uKQorK3sKKysgIHN3aXRjaCAoYWN0aW9uKQorKyAgICB7CisrICAgIGNhc2UgTlNTX0FDVElPTl9DT05USU5VRTogcmV0dXJuICJOU1NfQUNUSU9OX0NPTlRJTlVFIjsKKysgICAgY2FzZSBOU1NfQUNUSU9OX1JFVFVSTjogcmV0dXJuICJOU1NfQUNUSU9OX1JFVFVSTiI7CisrICAgIGRlZmF1bHQ6IGFib3J0ICgpOworKyAgICB9CisrfQorKworKworKy8qIFByaW50IGNvZGUgdG8gT1VUIGZvciB0aGUgbGlzdCBvZiBzZXJ2aWNlX3VzZXIgc3RydWN0dXJlcyBzdGFydGluZworKyAgIHdpdGggVVNFUiwgd2hpY2ggYXJlIGFsbCBmb3IgREFUQUJBU0UuICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlCisrICAgZmlyc3Qgc3RydWN0dXJlIGluIHRoYXQgbGlzdCwgb3IgemVybyBpZiBVU0VSIGlzIE5VTEwuICAqLworK2NoYXIgKgorK2dlbmVyYXRlX3NlcnZpY2VfdXNlcl9saXN0IChGSUxFICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfZGF0YWJhc2VfZW50cnkgKmRhdGFiYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX3VzZXIgKnVzZXIpCisreworKyAgaWYgKHVzZXIpCisrICAgIHsKKysgICAgICAvKiBHZW5lcmF0ZSB0aGUgdGFpbCBvZiB0aGUgbGlzdC4gICovCisrICAgICAgY2hhciAqbmV4dF9uYW1lID0gZ2VuZXJhdGVfc2VydmljZV91c2VyX2xpc3QgKG91dCwgZGF0YWJhc2UsIHVzZXItPm5leHQpOworKyAgICAgIC8qIEdlbmVyYXRlIG91ciBrbm93biBmdW5jdGlvbiBsaXN0LiAgKi8KKysgICAgICBjaGFyICprbm93bl9mdW5jdGlvbl9saXN0X25hbWUgPQorKyAgICAgICAgZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25fbGlzdCAob3V0LCBkYXRhYmFzZSwgdXNlcik7CisrCisrICAgICAgY2hhciAqbmFtZSA9IHNhcHJpbnRmICgiZml4ZWRfJXNfJXNfdXNlciIsIGRhdGFiYXNlLT5uYW1lLCB1c2VyLT5uYW1lKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3Qgc2VydmljZV91c2VyICVzID0ge1xuIiwgbmFtZSk7CisrICAgICAgaWYgKG5leHRfbmFtZSkKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgKHNlcnZpY2VfdXNlciAqKSAmJXMsXG4iLCBuZXh0X25hbWUpOworKyAgICAgIGVsc2UKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCwgLyogbm8gbmV4dCBlbnRyeSAqL1xuIik7CisrICAgICAgZnB1dHMgKCIgIHtcbiIsIG91dCk7CisrICAgICAgaW50IGk7CisrICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAodXNlci0+YWN0aW9ucykgLyBzaXplb2YgKHVzZXItPmFjdGlvbnNbMF0pOyBpKyspCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgICAgJXMsIC8qICVzICovXG4iLAorKyAgICAgICAgICAgICAgICAgbG9va3VwX2FjdGlvbl9uYW1lICh1c2VyLT5hY3Rpb25zW2ldKSwKKysgICAgICAgICAgICAgICAgIGxvb2t1cF9zdGF0dXNfbmFtZSAoaSAtIDIpKTsKKysgICAgICBmcHV0cyAoIiAgfSxcbiIsIG91dCk7CisrICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLCAgLyogd2UgbmV2ZXIgbmVlZCB0aGUgc2VydmljZSBsaWJyYXJ5ICovXG4iKTsKKysgICAgICBmcHJpbnRmIChvdXQsICIgIHsgLmFycmF5ID0gJXMgfSxcbiIsIGtub3duX2Z1bmN0aW9uX2xpc3RfbmFtZSk7CisrICAgICAgZnByaW50ZiAob3V0LCAiICBcIiVzXCJcbiIsIHVzZXItPm5hbWUpOworKyAgICAgIGZwdXRzICgifTtcbiIsIG91dCk7CisrICAgICAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICAgICAgcmV0dXJuIG5hbWU7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorKworKworKy8qIFByaW50IGNvZGUgdG8gT1VUIGZvciB0aGUgbGlzdCBvZiBuYW1lX2RhdGFiYXNlX2VudHJ5IHN0cnVjdHVyZXMKKysgICBzdGFydGluZyB3aXRoIERBVEFCQVNFLiAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBzdHJ1Y3R1cmUKKysgICBpbiB0aGF0IGxpc3QsIG9yIHplcm8gaWYgREFUQUJBU0UgaXMgTlVMTC4gICovCisrY2hhciAqCisrZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZV9lbnRyaWVzIChGSUxFICpvdXQsIG5hbWVfZGF0YWJhc2VfZW50cnkgKmRhdGFiYXNlKQorK3sKKysgIGlmIChkYXRhYmFzZSkKKysgICAgeworKyAgICAgIGNoYXIgKm5leHRfbmFtZSA9IGdlbmVyYXRlX25hbWVfZGF0YWJhc2VfZW50cmllcyAob3V0LCBkYXRhYmFzZS0+bmV4dCk7CisrICAgICAgY2hhciAqc2VydmljZV91c2VyX25hbWUKKysgICAgICAgID0gZ2VuZXJhdGVfc2VydmljZV91c2VyX2xpc3QgKG91dCwgZGF0YWJhc2UsIGRhdGFiYXNlLT5zZXJ2aWNlKTsKKysgICAgICBjaGFyICpuYW1lID0gc2FwcmludGYgKCJmaXhlZF8lc19uYW1lX2RhdGFiYXNlIiwgZGF0YWJhc2UtPm5hbWUpOworKworKyAgICAgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBuYW1lX2RhdGFiYXNlX2VudHJ5ICVzID0ge1xuIiwgbmFtZSk7CisrCisrICAgICAgaWYgKG5leHRfbmFtZSkKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgJiVzLFxuIiwgbmV4dF9uYW1lKTsKKysgICAgICBlbHNlCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsXG4iKTsKKysKKysgICAgICBpZiAoc2VydmljZV91c2VyX25hbWUpCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIChzZXJ2aWNlX3VzZXIgKikgJiVzLFxuIiwgc2VydmljZV91c2VyX25hbWUpOworKyAgICAgIGVsc2UKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCxcbiIpOworKworKyAgICAgIGZwcmludGYgKG91dCwgIiAgXCIlc1wiXG4iLCBkYXRhYmFzZS0+bmFtZSk7CisrICAgICAgZnByaW50ZiAob3V0LCAifTtcbiIpOworKyAgICAgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgICAgIHJldHVybiBuYW1lOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKysKKysKKyt2b2lkCisrZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZSAoRklMRSAqb3V0LCBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlKQorK3sKKysgIC8qIFByb2R1Y2UgYSBsaW5rZWQgbGlzdCBvZiB0aGUga25vd24gbmFtZV9kYXRhYmFzZV9lbnRyeQorKyAgICAgc3RydWN0dXJlcy4gICovCisrICBjaGFyICplbnRyaWVzID0gZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZV9lbnRyaWVzIChvdXQsIHNlcnZpY2VfdGFibGUtPmVudHJ5KTsKKysKKysgIC8qIE5vdyBwcm9kdWNlIHRoZSBtYWluIHN0cnVjdHVyZSB0aGF0IHBvaW50cyB0byB0aGVtIGFsbC4gICovCisrICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3QgbmFtZV9kYXRhYmFzZSBmaXhlZF9uYW1lX2RhdGFiYXNlID0ge1xuIik7CisrICBpZiAoZW50cmllcykKKysgICAgZnByaW50ZiAob3V0LCAiICAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSAmJXMsXG4iLCBlbnRyaWVzKTsKKysgIGVsc2UKKysgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLFxuIik7CisrICBmcHV0cyAoIiAgTlVMTCAvKiB3ZSBkb24ndCBuZWVkIHRoZSBsaWJyYXJpZXMgKi9cbiIKKysgICAgICAgICAifTtcbiIsCisrICAgICAgICAgb3V0KTsKKyt9CisrCisrCisrDAorKy8qIEdlbmVyYXRpbmcgdGhlIGxpc3Qgb2Ygc2VydmljZSBsaWJyYXJpZXMgd2UgZ2VuZXJhdGUgcmVmZXJlbmNlcyB0by4gICovCisrCisrLyogU3RyaW5nIHdpdGggcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBzaGFyZWQgb2JqZWN0IGZpbGVzLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbnNzX3NobGliX3JldmlzaW9uID0gTElCTlNTX0ZJTEVTX1NPICsgMTU7CisrCisrdm9pZAorK2dlbmVyYXRlX3NlcnZpY2VfbGliX2xpc3QgKEZJTEUgKm91dCwgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSkKKyt7CisrICBpbnQgaSwgajsKKysgIGludCBwcmludGVkX2FueSA9IDA7CisrCisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICB7CisrICAgICAgLyogTWVudGlvbiBlYWNoIHNlcnZpY2UgbGlicmFyeSBvbmx5IG9uY2UuICAqLworKyAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspCisrICAgICAgICBpZiAoc3RyY21wIChmdW5jdGlvbnNbaV0uc2VydmljZSwgZnVuY3Rpb25zW2pdLnNlcnZpY2UpID09IDApCisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgIGlmIChqID49IGkpCisrICAgICAgICB7CisrICAgICAgICAgIGlmIChwcmludGVkX2FueSkKKysgICAgICAgICAgICBwdXRjICgnICcsIG91dCk7CisrICAgICAgICAgIGZwcmludGYgKG91dCwgIi1sbnNzXyVzIiwKKysgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zW2ldLnNlcnZpY2UsCisrICAgICAgICAgICAgICAgICAgIG5zc19zaGxpYl9yZXZpc2lvbik7CisrICAgICAgICAgIHByaW50ZWRfYW55ID0gMTsKKysgICAgICAgIH0KKysgICAgfQorK30KKysKKysMCisrLyogTWFpbi4gICovCisrCisraW50CisrbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGlmIChhcmdjICE9IDQpCisrICAgIHsKKysgICAgICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogZ2VuLWZpeGVkLW5zc3dpdGNoIEhFQURFUiBTRVJWTElCUyBDT05GSUdcbiIpOworKyAgICAgIGV4aXQgKDEpOworKyAgICB9CisrCisrICBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlID0gbnNzX3BhcnNlX2ZpbGUgKGFyZ3ZbM10pOworKworKyAgRklMRSAqaGVhZGVyID0gZm9wZW4gKGFyZ3ZbMV0sICJ3Iik7CisrICBpZiAoISBoZWFkZXIpCisrICAgIHsKKysgICAgICBmcHJpbnRmIChzdGRlcnIsCisrICAgICAgICAgICAgICAgImdlbi1maXhlZC1uc3N3aXRjaDogY291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNcbiIsCisrICAgICAgICAgICAgICAgYXJndlsxXSwgc3RyZXJyb3IgKGVycm5vKSk7CisrICAgICAgZXhpdCAoMSk7CisrICAgIH0KKysgIGZwdXRzICgiLyogR2VuZXJhdGVkIGJ5IG5zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYy4gICovXG4iLCBoZWFkZXIpOworKyAgZnB1dHMgKCJcbiIsIGhlYWRlcik7CisrICBnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbnMgKGhlYWRlcik7CisrICBnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlIChoZWFkZXIsIHNlcnZpY2VfdGFibGUpOworKyAgZmNsb3NlIChoZWFkZXIpOworKworKyAgRklMRSAqc2VydmljZV9saWJfbGlzdCA9IGZvcGVuIChhcmd2WzJdLCAidyIpOworKyAgaWYgKCEgc2VydmljZV9saWJfbGlzdCkKKysgICAgeworKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKysgICAgICAgICAgICAgICAiZ2VuLWZpeGVkLW5zc3dpdGNoOiBjb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlICVzOiAlc1xuIiwKKysgICAgICAgICAgICAgICBhcmd2WzJdLCBzdHJlcnJvciAoZXJybm8pKTsKKysgICAgICBleGl0ICgxKTsKKysgICAgfQorKyAgZ2VuZXJhdGVfc2VydmljZV9saWJfbGlzdCAoc2VydmljZV9saWJfbGlzdCwgc2VydmljZV90YWJsZSk7CisrICBmY2xvc2UgKHNlcnZpY2VfbGliX2xpc3QpOworKworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL25zcy9nZXRlbnQuYyBiL25zcy9nZXRlbnQuYworaW5kZXggMzRkZjg0OC4uNjc0YzhlZSAxMDA2NDQKKy0tLSBhL25zcy9nZXRlbnQuYworKysrIGIvbnNzL2dldGVudC5jCitAQCAtMzksNiArMzksNyBAQAorICNpbmNsdWRlIDxuZXRpbmV0L2V0aGVyLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIEdldCBsaWJjIHZlcnNpb24gbnVtYmVyLiAgKi8KKyAjaW5jbHVkZSA8dmVyc2lvbi5oPgorQEAgLTkxLDYgKzkyLDcgQEAgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG5cCisgICBmcHJpbnRmIChzdHJlYW0sIGdldHRleHQgKCJXcml0dGVuIGJ5ICVzLlxuIiksICJUaG9yc3RlbiBLdWt1ayIpOworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMKKyAvKiBUaGlzIGlzIGZvciBhbGlhc2VzICovCisgc3RhdGljIHZvaWQKKyBwcmludF9hbGlhc2VzIChzdHJ1Y3QgYWxpYXNlbnQgKmFsaWFzKQorQEAgLTEzNSw3ICsxMzcsOSBAQCBhbGlhc2VzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTICovCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogVGhpcyBpcyBmb3IgZXRoZXJzICovCisgc3RhdGljIGludAorIGV0aGVyc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKK0BAIC0xNzksNiArMTgzLDcgQEAgZXRoZXJzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgLyogVGhpcyBpcyBmb3IgZ3JvdXAgKi8KKyBzdGF0aWMgdm9pZAorQEAgLTMwMSw2ICszMDYsNyBAQCBnc2hhZG93X2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogVGhpcyBpcyBmb3IgaG9zdHMgKi8KKyBzdGF0aWMgdm9pZAorIHByaW50X2hvc3RzIChzdHJ1Y3QgaG9zdGVudCAqaG9zdCkKK0BAIC01OTgsNiArNjA0LDcgQEAgbmV0d29ya3Nfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAvKiBOb3cgaXMgYWxsIGZvciBwYXNzd2QgKi8KKyBzdGF0aWMgdm9pZAorQEAgLTY1MCw2ICs2NTcsNyBAQCBwYXNzd2Rfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgICByZXR1cm4gcmVzdWx0OworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBUaGlzIGlzIGZvciBwcm90b2NvbHMgKi8KKyBzdGF0aWMgdm9pZAorIHByaW50X3Byb3RvY29scyAoc3RydWN0IHByb3RvZW50ICpwcm90bykKK0BAIC04MDcsNiArODE1LDcgQEAgc2VydmljZXNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAvKiBUaGlzIGlzIGZvciBzaGFkb3cgKi8KKyBzdGF0aWMgdm9pZAorQEAgLTg3MywyMyArODgyLDM2IEBAIHN0cnVjdAorICAgfSBkYXRhYmFzZXNbXSA9CisgICB7CisgI2RlZmluZSBEKG5hbWUpIHsgI25hbWUsIG5hbWUgIyMgX2tleXMgfSwKKy1EKGFob3N0cykKKy1EKGFob3N0c3Y0KQorLUQoYWhvc3RzdjYpCistRChhbGlhc2VzKQorLUQoZXRoZXJzKQorKworKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorKyMgZGVmaW5lIEROKG5hbWUpIEQobmFtZSkKKysjZWxzZQorKyMgZGVmaW5lIEROKG5hbWUpCisrI2VuZGlmCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTCisrIyBkZWZpbmUgREEobmFtZSkgRChuYW1lKQorKyNlbHNlCisrIyBkZWZpbmUgREEobmFtZSkKKysjZW5kaWYKKysKKytETihhaG9zdHMpCisrRE4oYWhvc3RzdjQpCisrRE4oYWhvc3RzdjYpCisrREEoYWxpYXNlcykKKytETihldGhlcnMpCisgRChncm91cCkKKyBEKGdzaGFkb3cpCistRChob3N0cykKKy1EKGluaXRncm91cHMpCistRChuZXRncm91cCkKKy1EKG5ldHdvcmtzKQorK0ROKGhvc3RzKQorK0ROKGluaXRncm91cHMpCisrRE4obmV0Z3JvdXApCisrRE4obmV0d29ya3MpCisgRChwYXNzd2QpCistRChwcm90b2NvbHMpCisrRE4ocHJvdG9jb2xzKQorICNpZiBIQVZFX1NVTlJQQworLUQocnBjKQorK0ROKHJwYykKKyAjZW5kaWYKKy1EKHNlcnZpY2VzKQorK0ROKHNlcnZpY2VzKQorIEQoc2hhZG93KQorICN1bmRlZiBECisgICAgIHsgTlVMTCwgTlVMTCB9CitkaWZmIC0tZ2l0IGEvbnNzL2dldG5zc2VudF9yLmMgYi9uc3MvZ2V0bnNzZW50X3IuYworaW5kZXggZjViOTAzNi4uZjA5ZjdmZSAxMDA2NDQKKy0tLSBhL25zcy9nZXRuc3NlbnRfci5jCisrKysgYi9uc3MvZ2V0bnNzZW50X3IuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlICJuc3N3aXRjaC5oIgorIAorQEAgLTU5LDExICs2MCwxMyBAQCBfX25zc19zZXRlbnQgKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgZGJfbG9va3VwX2Z1bmN0aW9uIGxvb2t1cF9mY3QsCisgICB9IGZjdDsKKyAgIGludCBub19tb3JlOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgaWYgKHJlcyAmJiBfX3Jlc19tYXliZV9pbml0ICgmX3JlcywgMCkgPT0gLTEpCisgICAgIHsKKyAgICAgICBfX3NldF9oX2Vycm5vIChORVREQl9JTlRFUk5BTCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgICAvKiBDeWNsZSB0aHJvdWdoIHRoZSBzZXJ2aWNlcyBhbmQgcnVuIHRoZWlyIGBzZXRYWGVudCcgZnVuY3Rpb25zIHVudGlsCisgICAgICB3ZSBmaW5kIGFuIGF2YWlsYWJsZSBzZXJ2aWNlLiAgKi8KK0BAIC0xMDEsMTEgKzEwNCwxMyBAQCBfX25zc19lbmRlbnQgKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgZGJfbG9va3VwX2Z1bmN0aW9uIGxvb2t1cF9mY3QsCisgICB9IGZjdDsKKyAgIGludCBub19tb3JlOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgaWYgKHJlcyAmJiBfX3Jlc19tYXliZV9pbml0ICgmX3JlcywgMCkgPT0gLTEpCisgICAgIHsKKyAgICAgICBfX3NldF9oX2Vycm5vIChORVREQl9JTlRFUk5BTCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgICAvKiBDeWNsZSB0aHJvdWdoIGFsbCB0aGUgc2VydmljZXMgYW5kIHJ1biB0aGVpciBlbmRYWGVudCBmdW5jdGlvbnMuICAqLworICAgbm9fbW9yZSA9IHNldHVwIChmdW5jX25hbWUsIGxvb2t1cF9mY3QsICZmY3QucHRyLCBuaXAsIHN0YXJ0cCwgMSk7CitAQCAtMTQxLDEyICsxNDYsMTQgQEAgX19uc3NfZ2V0ZW50X3IgKGNvbnN0IGNoYXIgKmdldGVudF9mdW5jX25hbWUsCisgICBpbnQgbm9fbW9yZTsKKyAgIGVudW0gbnNzX3N0YXR1cyBzdGF0dXM7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICBpZiAocmVzICYmIF9fcmVzX21heWJlX2luaXQgKCZfcmVzLCAwKSA9PSAtMSkKKyAgICAgeworICAgICAgICpoX2Vycm5vcCA9IE5FVERCX0lOVEVSTkFMOworICAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgIHJldHVybiBlcnJubzsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorICAgLyogSW5pdGlhbGl6ZSBzdGF0dXMgdG8gcmV0dXJuIGlmIG5vIG1vcmUgZnVuY3Rpb25zIGFyZSBmb3VuZC4gICovCisgICBzdGF0dXMgPSBOU1NfU1RBVFVTX05PVEZPVU5EOworQEAgLTE2MSw3ICsxNjgsNyBAQCBfX25zc19nZXRlbnRfciAoY29uc3QgY2hhciAqZ2V0ZW50X2Z1bmNfbmFtZSwKKyAgICAgICBpbnQgaXNfbGFzdF9uaXAgPSAqbmlwID09ICpsYXN0X25pcDsKKyAKKyAgICAgICBzdGF0dXMgPSBETF9DQUxMX0ZDVCAoZmN0LmYsCistCQkJICAgIChyZXNidWYsIGJ1ZmZlciwgYnVmbGVuLCAmZXJybm8sICZoX2Vycm5vKSk7CisrCQkJICAgIChyZXNidWYsIGJ1ZmZlciwgYnVmbGVuLCAmZXJybm8sIGhfZXJybm9wKSk7CisgCisgICAgICAgLyogVGhlIHN0YXR1cyBpcyBOU1NfU1RBVFVTX1RSWUFHQUlOIGFuZCBlcnJubyBpcyBFUkFOR0UgdGhlCisgCSBwcm92aWRlZCBidWZmZXIgaXMgdG9vIHNtYWxsLiAgSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBnaXZlCitkaWZmIC0tZ2l0IGEvbnNzL25zc3dpdGNoLmMgYi9uc3MvbnNzd2l0Y2guYworaW5kZXggOTcxMjYyMy4uYzgxZTIwNyAxMDA2NDQKKy0tLSBhL25zcy9uc3N3aXRjaC5jCisrKysgYi9uc3MvbnNzd2l0Y2guYworQEAgLTI2LDYgKzI2LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8YWxpYXNlcy5oPgorICNpbmNsdWRlIDxncnAuaD4KK0BAIC00MSw2ICs0MiwxNSBAQAorICNpbmNsdWRlICIuLi9uc2NkL25zY2RfcHJvdG8uaCIKKyAjaW5jbHVkZSA8c3lzZGVwLmg+CisgCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkLCB3ZSB1c2UgZml4ZWQgdGFibGVzIG9mCisrICAgZGF0YWJhc2VzIGFuZCBzZXJ2aWNlcywgZ2VuZXJhdGVkIGF0IGxpYnJhcnkgYnVpbGQgdGltZS4gIFRodXM6CisrICAgLSBXZSBjYW4ndCByZWNvbmZpZ3VyZSBpbmRpdmlkdWFsIGRhdGFiYXNlcywgc28gd2UgZG9uJ3QgbmVlZCBhCisrICAgICBuYW1lLXRvLWRhdGFiYXNlIG1hcC4KKysgICAtIFdlIG5ldmVyIGFkZCBkYXRhYmFzZXMgb3Igc2VydmljZSBsaWJyYXJpZXMsIG9yIGxvb2sgdXAgZnVuY3Rpb25zCisrICAgICBhdCBydW50aW1lLCBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgbG9jayB0byBwcm90ZWN0IG91ciB0YWJsZXMuCisrICAgU2VlIC4uL29wdGlvbi1ncm91cHMuZGVmIGZvciB0aGUgZGV0YWlscy4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorKworIC8qIFByb3RvdHlwZXMgZm9yIHRoZSBsb2NhbCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBuYW1lX2RhdGFiYXNlICpuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpIGludGVybmFsX2Z1bmN0aW9uOworIHN0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICpuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkgaW50ZXJuYWxfZnVuY3Rpb247CitAQCAtNzksNiArODksOSBAQCBib29sIF9fbnNzX2RhdGFiYXNlX2N1c3RvbVtOU1NfREJTSURYX21heF07CisgCisgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spCisgCisrI2RlZmluZSBsb2NrX25zc3dpdGNoIF9fbGliY19sb2NrX2xvY2sgKGxvY2spCisrI2RlZmluZSB1bmxvY2tfbnNzd2l0Y2ggX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKQorKworICNpZiAhZGVmaW5lZCBET19TVEFUSUNfTlNTIHx8IGRlZmluZWQgU0hBUkVECisgLyogU3RyaW5nIHdpdGggcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBzaGFyZWQgb2JqZWN0IGZpbGVzLiAgKi8KKyBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgX19uc3Nfc2hsaWJfcmV2aXNpb24gPSBMSUJOU1NfRklMRVNfU08gKyAxNTsKK0BAIC05Myw2ICsxMDYsMjAgQEAgc3RhdGljIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGU7CisgICAgX19saWJjX2ZyZWVyZXMuICAqLworIHN0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkZWZjb25maWdfZW50cmllczsKKyAKKysjZWxzZSAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKysKKysvKiBCcmluZyBpbiB0aGUgc3RhdGljYWxseSBpbml0aWFsaXplZCBzZXJ2aWNlIHRhYmxlIHdlIGdlbmVyYXRlZCBhdAorKyAgIGJ1aWxkIHRpbWUuICAqLworKyNpbmNsdWRlICJmaXhlZC1uc3N3aXRjaC5oIgorKworK2NvbnN0IHN0YXRpYyBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlID0gJmZpeGVkX25hbWVfZGF0YWJhc2U7CisrCisrLyogTm90aGluZyBldmVyIGNoYW5nZXMsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBsb2NrIGFueXRoaW5nLiAgKi8KKysjZGVmaW5lIGxvY2tfbnNzd2l0Y2ggKDApCisrI2RlZmluZSB1bmxvY2tfbnNzd2l0Y2ggKDApCisrCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworKworIAorICNpZmRlZiBVU0VfTlNDRAorIC8qIE5vbnplcm8gaWYgdGhpcyBpcyB0aGUgbnNjZCBwcm9jZXNzLiAgKi8KK0BAIC0xMDksMjAgKzEzNiwyMiBAQCBfX25zc19kYXRhYmFzZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRhdGFiYXNlLCBjb25zdCBjaGFyICphbHRlcm5hdGVfbmFtZSwKKyAJCSAgICAgICBjb25zdCBjaGFyICpkZWZjb25maWcsIHNlcnZpY2VfdXNlciAqKm5pKQorIHsKKyAgIC8qIFByZXZlbnQgbXVsdGlwbGUgdGhyZWFkcyB0byBjaGFuZ2UgdGhlIHNlcnZpY2UgdGFibGUuICAqLworLSAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrICBsb2NrX25zc3dpdGNoOworIAorICAgLyogUmVjb25zaWRlciBkYXRhYmFzZSB2YXJpYWJsZSBpbiBjYXNlIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxlZAorICAgICAgYF9fbnNzX2NvbmZpZ3VyZV9sb29rdXAnIHdoaWxlIHdlIHdhaXRlZCBmb3IgdGhlIGxvY2suICAqLworICAgaWYgKCpuaSAhPSBOVUxMKQorICAgICB7CistICAgICAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgICAgICB1bmxvY2tfbnNzd2l0Y2g7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgICAvKiBBcmUgd2UgaW5pdGlhbGl6ZWQgeWV0PyAgKi8KKyAgIGlmIChzZXJ2aWNlX3RhYmxlID09IE5VTEwpCisgICAgIC8qIFJlYWQgY29uZmlnIGZpbGUuICAqLworICAgICBzZXJ2aWNlX3RhYmxlID0gbnNzX3BhcnNlX2ZpbGUgKF9QQVRIX05TU1dJVENIX0NPTkYpOworKyNlbmRpZgorIAorICAgLyogVGVzdCB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBhdmFpbGFibGUuICAqLworICAgaWYgKHNlcnZpY2VfdGFibGUgIT0gTlVMTCkKK0BAIC0xNDQsNiArMTczLDcgQEAgX19uc3NfZGF0YWJhc2VfbG9va3VwIChjb25zdCBjaGFyICpkYXRhYmFzZSwgY29uc3QgY2hhciAqYWx0ZXJuYXRlX25hbWUsCisgCSAgICAqbmkgPSBlbnRyeS0+c2VydmljZTsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyAgIC8qIE5vIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBhdmFpbGFibGUsIGVpdGhlciBiZWNhdXNlIG5zc3dpdGNoLmNvbmYKKyAgICAgIGRvZXNuJ3QgZXhpc3Qgb3IgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYSBsaW5lIGZvciB0aGlzIGRhdGFiYXNlLgorIAorQEAgLTE2NiwxMyArMTk2LDIzIEBAIF9fbnNzX2RhdGFiYXNlX2xvb2t1cCAoY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9uYW1lLAorIAkgICAgeworIAkgICAgICBlbnRyeS0+bmV4dCA9IGRlZmNvbmZpZ19lbnRyaWVzOworIAkgICAgICBlbnRyeS0+c2VydmljZSA9ICpuaTsKKy0JICAgICAgZW50cnktPm5hbWVbMF0gPSAnXDAnOworKwkgICAgICBlbnRyeS0+bmFtZSA9ICIiOworIAkgICAgICBkZWZjb25maWdfZW50cmllcyA9IGVudHJ5OworIAkgICAgfQorIAl9CisgICAgIH0KKysjZWxzZQorKyAgLyogV2l0aG91dCB0aGUgZHluYW1pYyBiZWhhdmlvciwgd2UgY2FuJ3QgcHJvY2VzcyBkZWZjb25maWcuICBUaGUKKysgICAgIGRhdGFiYXNlcyB0aGUgdXNlciBzcGVjaWZpZWQgYXQgbGlicmFyeSBidWlsZCB0aW1lIGFyZSBhbGwgeW91CisrICAgICBnZXQuICAqLworKyAgaWYgKCpuaSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgdW5sb2NrX25zc3dpdGNoOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbmRpZgorIAorLSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgIHVubG9ja19uc3N3aXRjaDsKKyAKKyAgIHJldHVybiAqbmkgIT0gTlVMTCA/IDAgOiAtMTsKKyB9CitAQCAtMjUyLDYgKzI5Miw3IEBAIF9fbnNzX25leHQyIChzZXJ2aWNlX3VzZXIgKipuaSwgY29uc3QgY2hhciAqZmN0X25hbWUsIGNvbnN0IGNoYXIgKmZjdDJfbmFtZSwKKyBsaWJjX2hpZGRlbl9kZWYgKF9fbnNzX25leHQyKQorIAorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbnNzX25leHQgKHNlcnZpY2VfdXNlciAqKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSwgdm9pZCAqKmZjdHAsIGludCBzdGF0dXMsCitAQCAtMzAwLDEzICszNDEsMTMgQEAgX19uc3NfY29uZmlndXJlX2xvb2t1cCAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpzZXJ2aWNlX2xpbmUpCisgICAgIH0KKyAKKyAgIC8qIFByZXZlbnQgbXVsdGlwbGUgdGhyZWFkcyB0byBjaGFuZ2UgdGhlIHNlcnZpY2UgdGFibGUuICAqLworLSAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrICBsb2NrX25zc3dpdGNoOworIAorICAgLyogSW5zdGFsbCBuZXcgcnVsZXMuICAqLworICAgKmRhdGFiYXNlc1tjbnRdLmRicCA9IG5ld19kYjsKKyAgIF9fbnNzX2RhdGFiYXNlX2N1c3RvbVtjbnRdID0gdHJ1ZTsKKyAKKy0gIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICB1bmxvY2tfbnNzd2l0Y2g7CisgCisgICByZXR1cm4gMDsKKyB9CitAQCAtNDAyLDcgKzQ0Myw3IEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgICB2b2lkICoqZm91bmQsICpyZXN1bHQ7CisgCisgICAvKiBXZSBub3cgbW9kaWZ5IGdsb2JhbCBkYXRhLiAgUHJvdGVjdCBpdC4gICovCistICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysgIGxvY2tfbnNzd2l0Y2g7CisgCisgICAvKiBTZWFyY2ggdGhlIHRyZWUgb2YgZnVuY3Rpb25zIHByZXZpb3VzbHkgcmVxdWVzdGVkLiAgRGF0YSBpbiB0aGUKKyAgICAgIHRyZWUgYXJlIGBrbm93bl9mdW5jdGlvbicgc3RydWN0dXJlcywgd2hvc2UgZmlyc3QgbWVtYmVyIGlzIGEKK0BAIC00MTMsNyArNDU0LDcgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAgICAgIGVub3VnaCB0byBhIHBvaW50ZXIgdG8gb3VyIHN0cnVjdHVyZSB0byB1c2UgYXMgYSBsb29rdXAga2V5IHRoYXQKKyAgICAgIHdpbGwgYmUgcGFzc2VkIHRvIGBrbm93bl9jb21wYXJlJyAoYWJvdmUpLiAgKi8KKyAKKy0gIGZvdW5kID0gX190c2VhcmNoICgmZmN0X25hbWUsICZuaS0+a25vd24sICZrbm93bl9jb21wYXJlKTsKKysgIGZvdW5kID0gX190c2VhcmNoICgmZmN0X25hbWUsICZuaS0+a25vd24udHJlZSwgJmtub3duX2NvbXBhcmUpOworICAgaWYgKGZvdW5kID09IE5VTEwpCisgICAgIC8qIFRoaXMgbWVhbnMgb3V0LW9mLW1lbW9yeS4gICovCisgICAgIHJlc3VsdCA9IE5VTEw7CitAQCAtNDQwLDcgKzQ4MSw3IEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgI2VuZGlmCisgCSAgLyogT29wcy4gIFdlIGNhbid0IGluc3RhbnRpYXRlIHRoaXMgbm9kZSBwcm9wZXJseS4KKyAJICAgICBSZW1vdmUgaXQgZnJvbSB0aGUgdHJlZS4gICovCistCSAgX190ZGVsZXRlICgmZmN0X25hbWUsICZuaS0+a25vd24sICZrbm93bl9jb21wYXJlKTsKKysJICBfX3RkZWxldGUgKCZmY3RfbmFtZSwgJm5pLT5rbm93bi50cmVlLCAma25vd25fY29tcGFyZSk7CisgCSAgZnJlZSAoa25vd24pOworIAkgIHJlc3VsdCA9IE5VTEw7CisgCX0KK0BAIC01MjAsMTMgKzU2MSw0MyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICAgICB9CisgCisgICAvKiBSZW1vdmUgdGhlIGxvY2suICAqLworLSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgIHVubG9ja19uc3N3aXRjaDsKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19uc3NfbG9va3VwX2Z1bmN0aW9uKQorIAorIAorKyNlbHNlIC8qIGJlbG93IGlmICEgX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisrCisrCisraW50CisrX19uc3NfY29uZmlndXJlX2xvb2t1cCAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpzZXJ2aWNlX2xpbmUpCisreworKyAgLyogV2UgY2FuJ3QgZHluYW1pY2FsbHkgY29uZmlndXJlIGxvb2t1cCB3aXRob3V0CisrICAgICBPUFRJT05fRUdMSUJDX05TU1dJVENILiAgKi8KKysgIF9fc2V0X2Vycm5vIChFSU5WQUwpOworKyAgcmV0dXJuIC0xOworK30KKysKKysKKyt2b2lkICoKKytfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorK3sKKysgIGludCBpOworKyAgY29uc3Qga25vd25fZnVuY3Rpb24gKiprbm93biA9IG5pLT5rbm93bi5hcnJheTsKKysKKysgIGZvciAoaSA9IDA7IGtub3duW2ldOyBpKyspCisrICAgIGlmIChzdHJjbXAgKGZjdF9uYW1lLCBrbm93bltpXS0+ZmN0X25hbWUpID09IDApCisrICAgICAgcmV0dXJuIGtub3duW2ldLT5mY3RfcHRyOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19uc3NfbG9va3VwX2Z1bmN0aW9uKQorKyNlbmRpZgorKworKworKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqCisgaW50ZXJuYWxfZnVuY3Rpb24KKyBuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpCitAQCAtNjMyLDggKzcwMywxMCBAQCBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorIAkJCQkJICAgICArIChsaW5lIC0gbmFtZSArIDEpKTsKKyAgICAgICBpZiAobmV3X3NlcnZpY2UgPT0gTlVMTCkKKyAJcmV0dXJuIHJlc3VsdDsKKysgICAgICBuZXdfc2VydmljZS0+bmFtZSA9IChjaGFyICopIChuZXdfc2VydmljZSArIDEpOworIAorLSAgICAgICooKGNoYXIgKikgX19tZW1wY3B5IChuZXdfc2VydmljZS0+bmFtZSwgbmFtZSwgbGluZSAtIG5hbWUpKSA9ICdcMCc7CisrICAgICAgKigoY2hhciAqKSBfX21lbXBjcHkgKChjaGFyICopIG5ld19zZXJ2aWNlLT5uYW1lLCBuYW1lLCBsaW5lIC0gbmFtZSkpCisrICAgICAgICA9ICdcMCc7CisgCisgICAgICAgLyogU2V0IGRlZmF1bHQgYWN0aW9ucy4gICovCisgICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVFJZQUdBSU5dID0gTlNTX0FDVElPTl9DT05USU5VRTsKK0BAIC02NDIsNyArNzE1LDcgQEAgbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKyAgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19TVUNDRVNTXSA9IE5TU19BQ1RJT05fUkVUVVJOOworICAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1JFVFVSTl0gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKyAgICAgICBuZXdfc2VydmljZS0+bGlicmFyeSA9IE5VTEw7CistICAgICAgbmV3X3NlcnZpY2UtPmtub3duID0gTlVMTDsKKysgICAgICBuZXdfc2VydmljZS0+a25vd24udHJlZSA9IE5VTEw7CisgICAgICAgbmV3X3NlcnZpY2UtPm5leHQgPSBOVUxMOworIAorICAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKK0BAIC03NzgsOSArODUxLDEwIEBAIG5zc19nZXRsaW5lIChjaGFyICpsaW5lKQorICAgcmVzdWx0ID0gKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgbWFsbG9jIChzaXplb2YgKG5hbWVfZGF0YWJhc2VfZW50cnkpICsgbGVuKTsKKyAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisrICByZXN1bHQtPm5hbWUgPSAoY2hhciAqKSAocmVzdWx0ICsgMSk7CisgCisgICAvKiBTYXZlIHRoZSBkYXRhYmFzZSBuYW1lLiAgKi8KKy0gIG1lbWNweSAocmVzdWx0LT5uYW1lLCBuYW1lLCBsZW4pOworKyAgbWVtY3B5ICgoY2hhciAqKSByZXN1bHQtPm5hbWUsIG5hbWUsIGxlbik7CisgCisgICAvKiBQYXJzZSB0aGUgbGlzdCBvZiBzZXJ2aWNlcy4gICovCisgICByZXN1bHQtPnNlcnZpY2UgPSBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChsaW5lKTsKK0BAIC04MTYsNiArODkwLDcgQEAgbnNzX25ld19zZXJ2aWNlIChuYW1lX2RhdGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAqbmFtZSkKKyAgIHJldHVybiAqY3VycmVudHA7CisgfQorICNlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKyAKKyAKKyAjaWYgZGVmaW5lZCBTSEFSRUQgJiYgZGVmaW5lZCBVU0VfTlNDRAorQEAgLTgzNCw2ICs5MDksNyBAQCBuc3NfbG9hZF9hbGxfbGlicmFyaWVzIChjb25zdCBjaGFyICpzZXJ2aWNlLCBjb25zdCBjaGFyICpkZWYpCisgfQorIAorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIENhbGxlZCBieSBuc2NkIGFuZCBuc2NkIGFsb25lLiAgKi8KKyB2b2lkCisgX19uc3NfZGlzYWJsZV9uc2NkICh2b2lkICgqY2IpIChzaXplX3QsIHN0cnVjdCB0cmFjZWRfZmlsZSAqKSkKK0BAIC04NTcsOCArOTMzLDEwIEBAIF9fbnNzX2Rpc2FibGVfbnNjZCAodm9pZCAoKmNiKSAoc2l6ZV90LCBzdHJ1Y3QgdHJhY2VkX2ZpbGUgKikpCisgICBfX25zc19ub3RfdXNlX25zY2Rfc2VydmljZXMgPSAtMTsKKyAgIF9fbnNzX25vdF91c2VfbnNjZF9uZXRncm91cCA9IC0xOworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgc3RhdGljIHZvaWQKKyBmcmVlX2RhdGFiYXNlX2VudHJpZXMgKG5hbWVfZGF0YWJhc2VfZW50cnkgKmVudHJ5KQorIHsKK0BAIC04NzEsOCArOTQ5LDggQEAgZnJlZV9kYXRhYmFzZV9lbnRyaWVzIChuYW1lX2RhdGFiYXNlX2VudHJ5ICplbnRyeSkKKyAJeworIAkgIHNlcnZpY2VfdXNlciAqb2xkcyA9IHNlcnZpY2U7CisgCistCSAgaWYgKHNlcnZpY2UtPmtub3duICE9IE5VTEwpCistCSAgICBfX3RkZXN0cm95IChzZXJ2aWNlLT5rbm93biwgZnJlZSk7CisrCSAgaWYgKHNlcnZpY2UtPmtub3duLnRyZWUgIT0gTlVMTCkKKysJICAgIF9fdGRlc3Ryb3kgKHNlcnZpY2UtPmtub3duLnRyZWUsIGZyZWUpOworIAorIAkgIHNlcnZpY2UgPSBzZXJ2aWNlLT5uZXh0OworIAkgIGZyZWUgKG9sZHMpOworQEAgLTkyNiwzICsxMDA0LDQgQEAgbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKKyAKKyAgIGZyZWUgKHRvcCk7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KK2RpZmYgLS1naXQgYS9uc3MvbnNzd2l0Y2guaCBiL25zcy9uc3N3aXRjaC5oCitpbmRleCBhNTMxOGZhLi4xNzMwOTc3IDEwMDY0NAorLS0tIGEvbnNzL25zc3dpdGNoLmgKKysrKyBiL25zcy9uc3N3aXRjaC5oCitAQCAtNjUsMTAgKzY1LDIwIEBAIHR5cGVkZWYgc3RydWN0IHNlcnZpY2VfdXNlcgorICAgbG9va3VwX2FjdGlvbnMgYWN0aW9uc1s1XTsKKyAgIC8qIExpbmsgdG8gdGhlIHVuZGVybHlpbmcgbGlicmFyeSBvYmplY3QuICAqLworICAgc2VydmljZV9saWJyYXJ5ICpsaWJyYXJ5OworLSAgLyogQ29sbGVjdGlvbiBvZiBrbm93biBmdW5jdGlvbnMuICAqLworLSAgdm9pZCAqa25vd247CisrICAvKiBDb2xsZWN0aW9uIG9mIGtub3duIGZ1bmN0aW9ucy4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBlbmFibGVkLCB0aGlzIGlzIHRoZSByb290IG9mIGEKKysgICAgICd0c2VhcmNoJy1zdHlsZSB0cmVlLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGRpc2FibGVkLCB0aGlzIGlzIGFuIGFycmF5IG9mCisrICAgICBwb2ludGVycyB0byBrbm93bl9mdW5jdGlvbiBzdHJ1Y3R1cmVzLCBOVUxMLXRlcm1pbmF0ZWQuICAqLworKyAgdW5pb24KKysgIHsKKysgICAgdm9pZCAqdHJlZTsKKysgICAgY29uc3Qga25vd25fZnVuY3Rpb24gKiphcnJheTsKKysgIH0ga25vd247CisgICAvKiBOYW1lIG9mIHRoZSBzZXJ2aWNlIChgZmlsZXMnLCBgZG5zJywgYG5pcycsIC4uLikuICAqLworLSAgY2hhciBuYW1lWzBdOworKyAgY29uc3QgY2hhciAqbmFtZTsKKyB9IHNlcnZpY2VfdXNlcjsKKyAKKyAvKiBUbyBhY2Nlc3MgdGhlIGFjdGlvbiBiYXNlZCBvbiB0aGUgc3RhdHVzIHZhbHVlIHVzZSB0aGlzIG1hY3JvLiAgKi8KK0BAIC04Miw3ICs5Miw3IEBAIHR5cGVkZWYgc3RydWN0IG5hbWVfZGF0YWJhc2VfZW50cnkKKyAgIC8qIExpc3Qgb2Ygc2VydmljZSB0byBiZSB1c2VkLiAgKi8KKyAgIHNlcnZpY2VfdXNlciAqc2VydmljZTsKKyAgIC8qIE5hbWUgb2YgdGhlIGRhdGFiYXNlLiAgKi8KKy0gIGNoYXIgbmFtZVswXTsKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisgfSBuYW1lX2RhdGFiYXNlX2VudHJ5OworIAorIAorZGlmZiAtLWdpdCBhL3Bvc2l4L01ha2VmaWxlIGIvcG9zaXgvTWFrZWZpbGUKK2luZGV4IDE1ZTg4MTguLjYwOWVkMDMgMTAwNjQ0CistLS0gYS9wb3NpeC9NYWtlZmlsZQorKysrIGIvcG9zaXgvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBQT1NJWCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHBvc2l4CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtNDMsMTMgKzQ1LDI0IEBAIHJvdXRpbmVzIDo9CQkJCQkJCQkgICAgICBcCisgCWdldHBnaWQgc2V0cGdpZCBnZXRwZ3JwIGJzZC1nZXRwZ3JwIHNldHBncnAgZ2V0c2lkIHNldHNpZAkgICAgICBcCisgCWdldHJlc3VpZCBnZXRyZXNnaWQgc2V0cmVzdWlkIHNldHJlc2dpZAkJCQkgICAgICBcCisgCXBhdGhjb25mIHN5c2NvbmYgZnBhdGhjb25mCQkJCQkgICAgICBcCistCWdsb2IgZ2xvYjY0IGZubWF0Y2ggcmVnZXgJCQkJCSAgICAgIFwKKysJZ2xvYiBnbG9iNjQgZm5tYXRjaAkJCQkJCSAgICAgIFwKKyAJY29uZnN0cgkJCQkJCQkJICAgICAgXAorIAlnZXRvcHQgZ2V0b3B0MSBnZXRvcHRfaW5pdAkJCQkJICAgICAgXAorIAlzY2hlZF9zZXRwIHNjaGVkX2dldHAgc2NoZWRfc2V0cyBzY2hlZF9nZXRzIHNjaGVkX3lpZWxkIHNjaGVkX3ByaW1heCAgXAorIAlzY2hlZF9wcmltaW4gc2NoZWRfcnJfZ2kgc2NoZWRfZ2V0YWZmaW5pdHkgc2NoZWRfc2V0YWZmaW5pdHkJICAgICAgXAorLQlnZXRhZGRyaW5mbyBnYWlfc3RyZXJyb3Igd29yZGV4cAkJCQkgICAgICBcCisgCXByZWFkIHB3cml0ZSBwcmVhZDY0IHB3cml0ZTY0CQkJCQkgICAgICBcCisrCXBvc2l4X21hZHZpc2UJCQkJCQkJICAgICAgXAorKwlnZXRfY2hpbGRfbWF4IHNjaGVkX2NwdWNvdW50IHNjaGVkX2NwdWFsbG9jIHNjaGVkX2NwdWZyZWUKKysKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gZ2V0YWRkcmluZm8gZ2FpX3N0cmVycm9yCisrCisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpKQorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkgKz0gcmVnZXgKKytlbHNlCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfUkVHRVhQKSArPSB4cmVnZXgKKytlbmRpZgorKworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TUEFXTikgKz0JCQkJCSAgICAgIFwKKyAJc3Bhd25fZmFjdGlvbl9pbml0IHNwYXduX2ZhY3Rpb25fZGVzdHJveSBzcGF3bl9mYWN0aW9uX2FkZGNsb3NlCSAgICAgIFwKKyAJc3Bhd25fZmFjdGlvbl9hZGRvcGVuIHNwYXduX2ZhY3Rpb25fYWRkZHVwMgkJCSAgICAgIFwKKyAJc3Bhd25hdHRyX2luaXQgc3Bhd25hdHRyX2Rlc3Ryb3kJCQkJICAgICAgXAorQEAgLTYxLDM3ICs3NCw1NCBAQCByb3V0aW5lcyA6PQkJCQkJCQkJICAgICAgXAorIAlwb3NpeF9tYWR2aXNlCQkJCQkJCSAgICAgIFwKKyAJZ2V0X2NoaWxkX21heCBzY2hlZF9jcHVjb3VudCBzY2hlZF9jcHVhbGxvYyBzY2hlZF9jcHVmcmVlCisgCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1dPUkRFWFApICs9IHdvcmRleHAKKysKKyBhdXgJCTo9IGluaXQtcG9zaXggZW52aXJvbgorLXRlc3RzCQk6PSB0c3RnZXRvcHQgdGVzdGZubSBydW50ZXN0cyBydW5wdGVzdHMJICAgICBcCisrdGVzdHMJCTo9IHRzdGdldG9wdCB0ZXN0Zm5tIHJ1bnRlc3RzIFwKKyAJCSAgIHRzdC1wcmVhZHdyaXRlIHRzdC1wcmVhZHdyaXRlNjQgdGVzdC12Zm9yayByZWdleGJ1ZzEgXAorLQkJICAgdHN0LW1tYXAgdHN0LWdldGFkZHJpbmZvIHRzdC10cnVuY2F0ZSBcCistCQkgICB0c3QtdHJ1bmNhdGU2NCB0c3QtZm9yayB0c3QtZm5tYXRjaCB0c3QtcmVnZXhsb2MgdHN0LWRpciBcCistCQkgICB0c3QtY2htb2QgYnVnLXJlZ2V4MSBidWctcmVnZXgyIGJ1Zy1yZWdleDMgYnVnLXJlZ2V4NCBcCistCQkgICB0c3QtZ251Z2xvYiB0c3QtcmVnZXggYnVnLXJlZ2V4NSBidWctcmVnZXg2IGJ1Zy1yZWdleDcgXAorLQkJICAgYnVnLXJlZ2V4OCBidWctcmVnZXg5IGJ1Zy1yZWdleDEwIGJ1Zy1yZWdleDExIGJ1Zy1yZWdleDEyIFwKKy0JCSAgIGJ1Zy1yZWdleDEzIGJ1Zy1yZWdleDE0IGJ1Zy1yZWdleDE1IGJ1Zy1yZWdleDE2IFwKKy0JCSAgIGJ1Zy1yZWdleDE3IGJ1Zy1yZWdleDE4IGJ1Zy1yZWdleDE5IGJ1Zy1yZWdleDIwIFwKKy0JCSAgIGJ1Zy1yZWdleDIxIGJ1Zy1yZWdleDIyIGJ1Zy1yZWdleDIzIGJ1Zy1yZWdleDI0IFwKKy0JCSAgIGJ1Zy1yZWdleDI1IGJ1Zy1yZWdleDI2IGJ1Zy1yZWdleDI3IGJ1Zy1yZWdleDI4IFwKKysJCSAgIHRzdC1tbWFwIHRzdC10cnVuY2F0ZSBcCisrCQkgICB0c3QtdHJ1bmNhdGU2NCB0c3QtZm9yayB0c3QtZGlyIFwKKysJCSAgIHRzdC1jaG1vZCBidWctcmVnZXgyIGJ1Zy1yZWdleDMgYnVnLXJlZ2V4NCBcCisrCQkgICB0c3QtZ251Z2xvYiBidWctcmVnZXg2IGJ1Zy1yZWdleDcgXAorKwkJICAgYnVnLXJlZ2V4OCBidWctcmVnZXg5IGJ1Zy1yZWdleDEwIGJ1Zy1yZWdleDEyIFwKKysJCSAgIGJ1Zy1yZWdleDE0IGJ1Zy1yZWdleDE1IFwKKysJCSAgIGJ1Zy1yZWdleDIxIGJ1Zy1yZWdleDI0IFwKKysJCSAgIGJ1Zy1yZWdleDI3IGJ1Zy1yZWdleDI4IFwKKyAJCSAgIGJ1Zy1yZWdleDI5IGJ1Zy1yZWdleDMwIGJ1Zy1yZWdleDMxIGJ1Zy1yZWdleDMyIFwKKy0JCSAgIGJ1Zy1yZWdleDMzIHRzdC1uaWNlIHRzdC1uYW5vc2xlZXAgdHN0LXJlZ2V4MiBcCistCQkgICB0cmFuc2J1ZyB0c3QtcnhzcGVuY2VyIHRzdC1wY3JlIHRzdC1ib29zdCBcCistCQkgICBidWctZ2ExIHRzdC12Zm9yazEgdHN0LXZmb3JrMiB0c3QtdmZvcmszIHRzdC13YWl0aWQgXAorLQkJICAgdHN0LWdldGFkZHJpbmZvMiBidWctZ2xvYjEgYnVnLWdsb2IyIGJ1Zy1nbG9iMyB0c3Qtc3lzY29uZiBcCisrCQkgICB0c3QtbmljZSB0c3QtbmFub3NsZWVwIFwKKysJCSAgIHRyYW5zYnVnIFwKKysJCSAgIHRzdC12Zm9yazEgdHN0LXZmb3JrMiB0c3QtdmZvcmszIHRzdC13YWl0aWQgXAorKwkJICAgYnVnLWdsb2IxIGJ1Zy1nbG9iMiBidWctZ2xvYjMgdHN0LXN5c2NvbmYgXAorIAkJICAgdHN0LWV4ZWN2cDEgdHN0LWV4ZWN2cDIgdHN0LWV4ZWNscDEgdHN0LWV4ZWNscDIgXAorIAkJICAgdHN0LWV4ZWN2MSB0c3QtZXhlY3YyIHRzdC1leGVjbDEgdHN0LWV4ZWNsMiBcCisgCQkgICB0c3QtZXhlY3ZlMSB0c3QtZXhlY3ZlMiB0c3QtZXhlY2xlMSB0c3QtZXhlY2xlMiBcCistCQkgICB0c3QtZXhlY3ZwMyB0c3QtZXhlY3ZwNCB0c3QtcmZjMzQ4NCB0c3QtcmZjMzQ4NC0yIFwKKy0JCSAgIHRzdC1yZmMzNDg0LTMgXAorLQkJICAgdHN0LWdldGFkZHJpbmZvMyB0c3QtZm5tYXRjaDIgdHN0LWNwdWNvdW50IHRzdC1jcHVzZXQgXAorKwkJICAgdHN0LWV4ZWN2cDMgdHN0LWV4ZWN2cDQgXAorKwkJICAgdHN0LWZubWF0Y2gyIHRzdC1jcHVjb3VudCB0c3QtY3B1c2V0IFwKKyAJCSAgIGJ1Zy1nZXRvcHQxIGJ1Zy1nZXRvcHQyIGJ1Zy1nZXRvcHQzIGJ1Zy1nZXRvcHQ0IFwKKyAJCSAgIGJ1Zy1nZXRvcHQ1IHRzdC1nZXRvcHRfbG9uZzEgYnVnLXJlZ2V4MzQgYnVnLXJlZ2V4MzUgXAorIAkJICAgdHN0LXBhdGhjb25mIHRzdC1nZXRhZGRyaW5mbzQgdHN0LXJ4c3BlbmNlci1uby11dGY4IFwKKyAJCSAgIHRzdC1mbm1hdGNoMyBidWctcmVnZXgzNiB0c3QtZ2V0YWRkcmluZm81CisteHRlc3RzCQk6PSBidWctZ2EyCisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSB0c3QtZm5tYXRjaCB0c3QtcmVnZXhsb2MgYnVnLXJlZ2V4MSBidWctcmVnZXg1IFwKKysJCSAgIGJ1Zy1yZWdleDIzIGJ1Zy1yZWdleDI1IGJ1Zy1yZWdleDMyIGJ1Zy1yZWdleDMzCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJCSs9IHRzdC1nZXRhZGRyaW5mbyBidWctZ2ExIHRzdC1nZXRhZGRyaW5mbzIgXAorKwkJICAgdHN0LXJmYzM0ODQgdHN0LXJmYzM0ODQtMiB0c3QtcmZjMzQ4NC0zIHRzdC1nZXRhZGRyaW5mbzMKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpIFwKKysJCSs9IHJ1bnB0ZXN0cyBidWctcmVnZXgxMSBidWctcmVnZXgxMyBidWctcmVnZXgxNiBcCisrCQkgICB0c3QtcmVnZXgyIHRzdC1yeHNwZW5jZXIgdHN0LXBjcmUgdHN0LWJvb3N0CisraWZlcSAoeXksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykpCisrdGVzdHMJCSs9IHRzdC1yZWdleCBidWctcmVnZXgxNyBidWctcmVnZXgxOCBidWctcmVnZXgxOSBidWctcmVnZXgyMCBcCisrCQkgICBidWctcmVnZXgyMiBidWctcmVnZXgyNgorK2VuZGlmCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBidWctZ2EyCisrCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0LXNyY3MJOj0gZ2xvYnRlc3QKKy10ZXN0cyAgICAgICAgICAgKz0gd29yZGV4cC10ZXN0IHRzdC1leGVjIHRzdC1zcGF3bgorK3Rlc3RzCQkrPSB0c3QtZXhlYworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19TUEFXTikgKz0gdHN0LXNwYXduCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1dPUkRFWFApICs9IHdvcmRleHAtdGVzdAorIGVuZGlmCisgdGVzdHMtc3RhdGljCT0gdHN0LWV4ZWMtc3RhdGljIHRzdC1zcGF3bi1zdGF0aWMKKyB0ZXN0cwkJKz0gJCh0ZXN0cy1zdGF0aWMpCitAQCAtMTE3LDcgKzE0NywxMCBAQCBnZW5lcmF0ZWQgKz0gJChhZGRwcmVmaXggd29yZGV4cC10ZXN0LXJlc3VsdCwgMSAyIDMgNCA1IDYgNyA4IDkgMTApIFwKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCistdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClnbG9idGVzdC5vdXQgJChvYmpwZngpd29yZGV4cC10c3Qub3V0CisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClnbG9idGVzdC5vdXQKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19XT1JERVhQKSkKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXdvcmRleHAtdHN0Lm91dAorK2VuZGlmCisgZW5kaWYKKyBlbmRpZgorIAorQEAgLTEyNSwxMiArMTU4LDE2IEBAIGVuZGlmCisgIyBYWFggUGxlYXNlIG5vdGUgdGhhdCBmb3Igbm93IHdlIGlnbm9yZSB0aGUgcmVzdWx0IG9mIHRoaXMgdGVzdC4KKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWFubmV4Yy5vdXQKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorLXRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLXJlZ2V4Mi1tZW0ub3V0ICQob2JqcGZ4KWJ1Zy1yZWdleDE0LW1lbS5vdXQgXAorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLXJlZ2V4Mi1tZW0ub3V0IFwKKyAJCSAkKG9ianBmeClidWctcmVnZXgyMS1tZW0ub3V0ICQob2JqcGZ4KWJ1Zy1yZWdleDMxLW1lbS5vdXQgXAorLQkJICQob2JqcGZ4KXRzdC1yeHNwZW5jZXItbm8tdXRmOC1tZW0ub3V0ICQob2JqcGZ4KXRzdC1wY3JlLW1lbS5vdXQgXAorLQkJICQob2JqcGZ4KXRzdC1ib29zdC1tZW0ub3V0ICQob2JqcGZ4KXRzdC1nZXRjb25mLm91dCBcCisrCQkgJChvYmpwZngpdHN0LWdldGNvbmYub3V0IFwKKyAJCSAkKG9ianBmeClidWctZ2xvYjItbWVtLm91dCAkKG9ianBmeCl0c3QtdmZvcmszLW1lbS5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC1mbm1hdGNoLW1lbS5vdXQgJChvYmpwZngpYnVnLXJlZ2V4MzYtbWVtLm91dAorK2lmZXEgKHksJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSkKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1yZWdleDE0LW1lbS5vdXQgJChvYmpwZngpdHN0LXJ4c3BlbmNlci1uby11dGY4LW1lbS5vdXQgXAorKyAgCQkgJChvYmpwZngpdHN0LXBjcmUtbWVtLm91dCAkKG9ianBmeCl0c3QtYm9vc3QtbWVtLm91dAorK2VuZGlmCisrCisgeHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLWdhMi1tZW0ub3V0CisgZW5kaWYKKyAKK0BAIC0xNDMsNiArMTgwLDggQEAgJChvYmpwZngpZ2xvYnRlc3Qub3V0OiBnbG9idGVzdC5zaCAkKG9ianBmeClnbG9idGVzdAorIAkkKFNIRUxMKSAkPCAkKGNvbW1vbi1vYmpwZngpICckKHRlc3QtdmlhLXJ0bGQtcHJlZml4KScgXAorIAkJJyQodGVzdC1wcm9ncmFtLXByZWZpeCknICckKHRlc3Qtd3JhcHBlci1lbnYpJzsgXAorIAkkKGV2YWx1YXRlLXRlc3QpCisrTERMSUJTLWdsb2J0ZXN0ICs9ICQoc2hlbGwgY2F0ICQoY29tbW9uLW9ianBmeCluc3MvZml4ZWQtbnNzd2l0Y2gtbGlicykKKysKKyAkKG9ianBmeCl3b3JkZXhwLXRzdC5vdXQ6IHdvcmRleHAtdHN0LnNoICQob2JqcGZ4KXdvcmRleHAtdGVzdAorIAkkKFNIRUxMKSAkPCAkKGNvbW1vbi1vYmpwZngpICckKHRlc3QtcHJvZ3JhbS1wcmVmaXgtYmVmb3JlLWVudiknIFwKKyAJCSAnJChydW4tcHJvZ3JhbS1lbnYpJyAnJCh0ZXN0LXByb2dyYW0tcHJlZml4LWFmdGVyLWVudiknOyBcCitAQCAtMjA1LDcgKzI0NCwxMCBAQCB0c3QtZGlyLUFSR1MgPSBgcHdkYCBgY2QgJChjb21tb24tb2JqZGlyKS8kKHN1YmRpcik7IHB3ZGAgYGNkICQoY29tbW9uLW9iamRpcik7CisgdHN0LWNobW9kLUFSR1MgPSAkKG9iamRpcikKKyB0c3QtdmZvcmszLUFSR1MgPSAtLXRlc3QtZGlyPSQob2JqcGZ4KQorIAorLXRzdC1yeHNwZW5jZXItQVJHUyA9IC0tdXRmOCByeHNwZW5jZXIvdGVzdHMKKyt0c3QtcnhzcGVuY2VyLUFSR1MgPSByeHNwZW5jZXIvdGVzdHMKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisrdHN0LXJ4c3BlbmNlci1BUkdTICs9IC0tdXRmOAorK2VuZGlmCisgdHN0LXJ4c3BlbmNlci1uby11dGY4LUFSR1MgPSByeHNwZW5jZXIvdGVzdHMKKyB0c3QtcGNyZS1BUkdTID0gUENSRS50ZXN0cworIHRzdC1ib29zdC1BUkdTID0gQk9PU1QudGVzdHMKK2RpZmYgLS1naXQgYS9wb3NpeC9idWctcmVnZXgxLmMgYi9wb3NpeC9idWctcmVnZXgxLmMKK2luZGV4IDM4ZWI1NDMuLjE3Y2QxYTAgMTAwNjQ0CistLS0gYS9wb3NpeC9idWctcmVnZXgxLmMKKysrKyBiL3Bvc2l4L2J1Zy1yZWdleDEuYworQEAgLTQsNiArNCw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIGludAorIG1haW4gKHZvaWQpCitAQCAtMTcsNyArMTgsOSBAQCBtYWluICh2b2lkKQorICAgbWVtc2V0ICgmcmVnZXgsICdcMCcsIHNpemVvZiAocmVnZXgpKTsKKyAKKyAgIHNldGxvY2FsZSAoTENfQUxMLCAiZGVfREUuSVNPLTg4NTktMSIpOworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICBmd2lkZSAoc3Rkb3V0LCAtMSk7CisrI2VuZGlmCisgCisgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAgfCBSRV9ERUJVRyk7CisgCitkaWZmIC0tZ2l0IGEvcG9zaXgvYnVnLXJlZ2V4Ni5jIGIvcG9zaXgvYnVnLXJlZ2V4Ni5jCitpbmRleCBlZmNjODkwLi4zYjI3MGM3IDEwMDY0NAorLS0tIGEvcG9zaXgvYnVnLXJlZ2V4Ni5jCisrKysgYi9wb3NpeC9idWctcmVnZXg2LmMKK0BAIC0yMiw2ICsyMiw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8cmVnZXguaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBpbnQKK0BAIC0zMCw3ICszMSwxMiBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgcmVnZXhfdCByZTsKKyAgIHJlZ21hdGNoX3QgbWF0WzEwXTsKKyAgIGludCBpLCBqLCByZXQgPSAwOworLSAgY29uc3QgY2hhciAqbG9jYWxlc1tdID0geyAiQyIsICJkZV9ERS5VVEYtOCIgfTsKKysgIGNvbnN0IGNoYXIgKmxvY2FsZXNbXSA9IHsKKysgICAgIkMiLAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgImRlX0RFLlVURi04IgorKyNlbmRpZgorKyAgfTsKKyAgIGNvbnN0IGNoYXIgKnN0cmluZyA9ICJodHRwOi8vd3d3LnJlZ2V4LmNvbS9wYXR0ZXJuL21hdGNoaW5nLmh0bWwjaW50cm8iOworICAgcmVnbWF0Y2hfdCBleHBlY3RbMTBdID0geworICAgICB7IDAsIDQ4IH0sIHsgMCwgNSB9LCB7IDAsIDQgfSwgeyA1LCAyMCB9LCB7IDcsIDIwIH0sIHsgMjAsIDQyIH0sCitkaWZmIC0tZ2l0IGEvcG9zaXgvZm5tYXRjaC5jIGIvcG9zaXgvZm5tYXRjaC5jCitpbmRleCBmZDg1ZWZhLi4wMWNjOWZlIDEwMDY0NAorLS0tIGEvcG9zaXgvZm5tYXRjaC5jCisrKysgYi9wb3NpeC9mbm1hdGNoLmMKK0BAIC0zMCw2ICszMCwxMCBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysjaWYgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8c3RkbGliLmg+CisgI2VuZGlmCitAQCAtMTMxLDcgKzEzNSw3IEBAIGV4dGVybiBpbnQgZm5tYXRjaCAoY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpOworICMgICBkZWZpbmUgSVNXQ1RZUEUoV0MsIFdUKQlpc3djdHlwZSAoV0MsIFdUKQorICMgIGVuZGlmCisgCistIyAgaWYgKEhBVkVfTUJTVEFURV9UICYmIEhBVkVfTUJTUlRPV0NTKSB8fCBfTElCQworKyMgIGlmIChIQVZFX01CU1RBVEVfVCAmJiBIQVZFX01CU1JUT1dDUyAmJiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpCisgLyogSW4gdGhpcyBjYXNlIHdlIGFyZSBpbXBsZW1lbnRpbmcgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaGFuZGxpbmcuICAqLworICMgICBkZWZpbmUgSEFORExFX01VTFRJQllURQkxCisgIyAgZW5kaWYKK2RpZmYgLS1naXQgYS9wb3NpeC9mbm1hdGNoX2xvb3AuYyBiL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jCitpbmRleCBmNDZjOWRmLi43NGUxNzU0IDEwMDY0NAorLS0tIGEvcG9zaXgvZm5tYXRjaF9sb29wLmMKKysrKyBiL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jCitAQCAtMTUsNiArMTUsOCBAQAorICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKworICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyBzdHJ1Y3QgU1RSVUNUCitAQCAtNTQsMTAgKzU2LDE1IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorICAgY29uc3QgY2hhciAqY29sbHNlcSA9IChjb25zdCBjaGFyICopCisgICAgIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisgIyBlbHNlCisrIyAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBjb25zdCBVQ0hBUiAqY29sbHNlcSA9IChjb25zdCBVQ0hBUiAqKQorICAgICBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworLSMgZW5kaWYKKy0jZW5kaWYKKysjICAgZGVmaW5lIENPTExTRVFfQllURV9MT09LVVAoaXgpIChjb2xsc2VxWyhpeCldKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIENPTExTRVFfQllURV9MT09LVVAoaXgpIChpeCkKKysjICBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKysjIGVuZGlmIC8qIFdJREVfQ0hBUl9WRVJTSU9OICovCisrI2VuZGlmIC8qIF9MSUJDICovCisgCisgICB3aGlsZSAoKGMgPSAqcCsrKSAhPSBMKCdcMCcpKQorICAgICB7CitAQCAtMjc3LDcgKzI4NCw3IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJICAgIC8qIExlYXZlIHJvb20gZm9yIHRoZSBudWxsLiAgKi8KKyAJCSAgICBDSEFSIHN0cltDSEFSX0NMQVNTX01BWF9MRU5HVEggKyAxXTsKKyAJCSAgICBzaXplX3QgYzEgPSAwOworLSNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisrI2lmIGRlZmluZWQgX0xJQkMgPyBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIDogKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKyAJCSAgICB3Y3R5cGVfdCB3dDsKKyAjZW5kaWYKKyAJCSAgICBjb25zdCBDSEFSICpzdGFydHAgPSBwOworQEAgLTMwNyw3ICszMTQsNyBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCSAgICAgIH0KKyAJCSAgICBzdHJbYzFdID0gTCgnXDAnKTsKKyAKKy0jaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorKyNpZiBkZWZpbmVkIF9MSUJDID8gX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiA6IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisgCQkgICAgd3QgPSBJU19DSEFSX0NMQVNTIChzdHIpOworIAkJICAgIGlmICh3dCA9PSAwKQorIAkJICAgICAgLyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCitAQCAtNjgwLDggKzY4NywxMCBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCQllbHNlCisgCQkJICBsY29sbHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXEsIGNvbGQpOworICMgZWxzZQorLQkJCWZjb2xsc2VxID0gY29sbHNlcVtmbl07CistCQkJbGNvbGxzZXEgPSBpc19zZXF2YWwgPyBjb2xkIDogY29sbHNlcVsoVUNIQVIpIGNvbGRdOworKwkJCWZjb2xsc2VxID0gQ09MTFNFUV9CWVRFX0xPT0tVUCAoZm4pOworKwkJCWxjb2xsc2VxID0gKGlzX3NlcXZhbAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MTFNFUV9CWVRFX0xPT0tVUCAoKFVDSEFSKSBjb2xkKSk7CisgIyBlbmRpZgorIAorIAkJCWlzX3NlcXZhbCA9IDA7CitAQCAtODU3LDcgKzg2Niw3IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJCQkgICAgZ290byBtYXRjaGVkOworIAkJCQkgIH0KKyAjIGVsc2UKKy0JCQkJaGNvbGxzZXEgPSBjb2xsc2VxW2NlbmRdOworKwkJCQloY29sbHNlcSA9IENPTExTRVFfQllURV9MT09LVVAgKGNlbmQpOworICMgZW5kaWYKKyAJCQkgICAgICB9CisgCitkaWZmIC0tZ2l0IGEvcG9zaXgvZ2xvYi5jIGIvcG9zaXgvZ2xvYi5jCitpbmRleCBkNjVlNTVkLi4xYWMwMGExIDEwMDY0NAorLS0tIGEvcG9zaXgvZ2xvYi5jCisrKysgYi9wb3NpeC9nbG9iLmMKK0BAIC0yNSw2ICsyNSw5IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisgCisgLyogT3V0Y29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgZm9yIHByb2R1Y3Rpb24gcXVhbGl0eSBjb2RlLiAgKi8KKyAvKiAjZGVmaW5lIE5ERUJVRyAxICovCitAQCAtNjA3LDYgKzYxMCw3IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJICBpZiAoaG9tZV9kaXIgPT0gTlVMTCB8fCBob21lX2RpclswXSA9PSAnXDAnKQorIAkgICAgaG9tZV9kaXIgPSAiYzovdXNlcnMvZGVmYXVsdCI7IC8qIHBvb3IgZGVmYXVsdCAqLworICMgIGVsc2UKKysjICAgaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfR0VUTE9HSU4KKyAJICBpZiAoaG9tZV9kaXIgPT0gTlVMTCB8fCBob21lX2RpclswXSA9PSAnXDAnKQorIAkgICAgeworIAkgICAgICBpbnQgc3VjY2VzczsKK0BAIC02MjMsMTkgKzYyNywxOSBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCSAgICAgIGlmIChzdWNjZXNzKQorIAkJeworIAkJICBzdHJ1Y3QgcGFzc3dkICpwOworLSMgICBpZiBkZWZpbmVkIEhBVkVfR0VUUFdOQU1fUiB8fCBkZWZpbmVkIF9MSUJDCisrIyAgICBpZiBkZWZpbmVkIEhBVkVfR0VUUFdOQU1fUiB8fCBkZWZpbmVkIF9MSUJDCisgCQkgIGxvbmcgaW50IHB3YnVmbGVuID0gR0VUUFdfUl9TSVpFX01BWCAoKTsKKyAJCSAgY2hhciAqcHd0bXBidWY7CisgCQkgIHN0cnVjdCBwYXNzd2QgcHdidWY7CisgCQkgIGludCBtYWxsb2NfcHd0bXBidWYgPSAwOworIAkJICBpbnQgc2F2ZSA9IGVycm5vOworIAorLSMgICAgaWZuZGVmIF9MSUJDCisrIyAgICAgaWZuZGVmIF9MSUJDCisgCQkgIGlmIChwd2J1ZmxlbiA9PSAtMSkKKyAJCSAgICAvKiBgc3lzY29uZicgZG9lcyBub3Qgc3VwcG9ydCBfU0NfR0VUUFdfUl9TSVpFX01BWC4KKyAJCSAgICAgICBUcnkgYSBtb2RlcmF0ZSB2YWx1ZS4gICovCisgCQkgICAgcHdidWZsZW4gPSAxMDI0OworLSMgICAgZW5kaWYKKysjICAgICBlbmRpZgorIAkJICBpZiAoX19saWJjX3VzZV9hbGxvY2EgKGFsbG9jYV91c2VkICsgcHdidWZsZW4pKQorIAkJICAgIHB3dG1wYnVmID0gYWxsb2NhX2FjY291bnQgKHB3YnVmbGVuLCBhbGxvY2FfdXNlZCk7CisgCQkgIGVsc2UKK0BAIC02ODIsOSArNjg2LDkgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkJCX0KKyAJCSAgICAgIF9fc2V0X2Vycm5vIChzYXZlKTsKKyAJCSAgICB9CistIyAgIGVsc2UKKysjICAgIGVsc2UKKyAJCSAgcCA9IGdldHB3bmFtIChuYW1lKTsKKy0jICAgZW5kaWYKKysjICAgIGVuZGlmCisgCQkgIGlmIChwICE9IE5VTEwpCisgCQkgICAgeworIAkJICAgICAgaWYgKCFtYWxsb2NfcHd0bXBidWYpCitAQCAtNzEzLDYgKzcxNyw3IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJCSAgICB9CisgCQl9CisgCSAgICB9CisrIyAgIGVuZGlmIC8qICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0dFVExPR0lOICovCisgCSAgaWYgKGhvbWVfZGlyID09IE5VTEwgfHwgaG9tZV9kaXJbMF0gPT0gJ1wwJykKKyAJICAgIHsKKyAJICAgICAgaWYgKGZsYWdzICYgR0xPQl9USUxERV9DSEVDSykKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdjb21wLmMgYi9wb3NpeC9yZWdjb21wLmMKK2luZGV4IGJmOGFhMTYuLjZhNDEyNTEgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdjb21wLmMKKysrKyBiL3Bvc2l4L3JlZ2NvbXAuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KK0BAIC0zMDksNyArMzEwLDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgeworICAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBidWZwLT5idWZmZXI7CisgICBpbnQgbm9kZV9jbnQ7CistICBpbnQgaWNhc2UgPSAoZGZhLT5tYl9jdXJfbWF4ID09IDEgJiYgKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSk7CisrICBpbnQgaWNhc2UgPSAoZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gMSAmJiAoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpKTsKKyAgIGZvciAobm9kZV9jbnQgPSAwOyBub2RlX2NudCA8IGluaXRfc3RhdGUtPm5vZGVzLm5lbGVtOyArK25vZGVfY250KQorICAgICB7CisgICAgICAgaW50IG5vZGUgPSBpbml0X3N0YXRlLT5ub2Rlcy5lbGVtc1tub2RlX2NudF07CitAQCAtMzE5LDkgKzMyMCw5IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAl7CisgCSAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBkZmEtPm5vZGVzW25vZGVdLm9wci5jKTsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJICAgIHsKKy0JICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gYWxsb2NhIChkZmEtPm1iX2N1cl9tYXgpLCAqcDsKKysJICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gYWxsb2NhIChkZmFfbWJfY3VyX21heCAoZGZhKSksICpwOworIAkgICAgICB3Y2hhcl90IHdjOworIAkgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgCitAQCAtMzUyLDcgKzM1MywxMSBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJCSAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBjaCk7CisgCSAgICB9CisgCX0KKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysKKysgICAgICAvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoZSBjdXJyZW50CisrICAgICAgICAgbG9jYWxlIGlzIGFsd2F5cyBDLCB3aGljaCBoYXMgbm8gcnVsZXMgYW5kIG5vIG11bHRpLWJ5dGUKKysgICAgICAgICBjaGFyYWN0ZXJzLiAgKi8KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgICBlbHNlIGlmICh0eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKyAJeworIAkgIHJlX2NoYXJzZXRfdCAqY3NldCA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLm1iY3NldDsKK0BAIC0zODAsNyArMzg1LDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCSAgICAgaS5lLiB3aGVyZSB3ZSB3b3VsZCBub3QgZmluZCBhbiBpbnZhbGlkIHNlcXVlbmNlLiAgVGhpcyBvbmx5CisgCSAgICAgYXBwbGllcyB0byBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHM7IGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIKKyAJICAgICBzZXRzLCB0aGUgU0lNUExFX0JSQUNLRVQgYWdhaW4gc3VmZmljZXMuICAqLworLQkgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxCisrCSAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMQorIAkgICAgICAmJiAoY3NldC0+bmNoYXJfY2xhc3NlcyB8fCBjc2V0LT5ub25fbWF0Y2ggfHwgY3NldC0+bnJhbmdlcworICMgaWZkZWYgX0xJQkMKKyAJCSAgfHwgY3NldC0+bmVxdWl2X2NsYXNzZXMKK0BAIC00MDgsNyArNDEzLDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCQkgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisgCQkgIGlmIChfX3djcnRvbWIgKGJ1ZiwgY3NldC0+bWJjaGFyc1tpXSwgJnN0YXRlKSAhPSAoc2l6ZV90KSAtMSkKKyAJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworLQkJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCQkgICAgeworIAkJICAgICAgaWYgKF9fd2NydG9tYiAoYnVmLCBfX3Rvd2xvd2VyIChjc2V0LT5tYmNoYXJzW2ldKSwgJnN0YXRlKQorIAkJCSAgIT0gKHNpemVfdCkgLTEpCitAQCAtNDE3LDcgKzQyMiw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkJfQorIAkgICAgfQorIAl9CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9ECisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgCSAgICAgICB8fCB0eXBlID09IE9QX1VURjhfUEVSSU9ECitAQCAtODYwLDExICs4NjUsMTUgQEAgaW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKQorIAorICAgZGZhLT5tYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKyAjaWZkZWYgX0xJQkMKKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPT0gNgorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDYKKyAgICAgICAmJiBzdHJjbXAgKF9OTF9DVVJSRU5UIChMQ19DVFlQRSwgX05MX0NUWVBFX0NPREVTRVRfTkFNRSksICJVVEYtOCIpID09IDApCisgICAgIGRmYS0+aXNfdXRmOCA9IDE7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGRmYS0+bWFwX25vdGFzY2lpID0gKF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfTUFQX1RPX05PTkFTQ0lJKQorIAkJICAgICAgICE9IDApOworKyMgZWxzZQorKyAgZGZhLT5tYXBfbm90YXNjaWkgPSAwOworKyMgZW5kaWYKKyAjZWxzZQorICMgaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICBjb2Rlc2V0X25hbWUgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7CitAQCAtODkwLDcgKzg5OSw3IEBAIGluaXRfZGZhIChyZV9kZmFfdCAqZGZhLCBzaXplX3QgcGF0X2xlbikKKyAjZW5kaWYKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgeworICAgICAgIGlmIChkZmEtPmlzX3V0ZjgpCisgCWRmYS0+c2JfY2hhciA9IChyZV9iaXRzZXRfcHRyX3QpIHV0Zjhfc2JfbWFwOworQEAgLTE3ODgsNyArMTc5Nyw3IEBAIHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgICB0b2tlbi0+d29yZF9jaGFyID0gMDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIHRva2VuLT5tYl9wYXJ0aWFsID0gMDsKKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSAmJgorICAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgICB7CisgICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CitAQCAtMTgwOSw3ICsxODE4LDcgQEAgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAgICAgICB0b2tlbi0+b3ByLmMgPSBjMjsKKyAgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSkKKyAJeworIAkgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsCisgCQkJCQkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxKTsKK0BAIC0xOTIzLDcgKzE5MzIsNyBAQCBwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorIAorICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxKQorICAgICB7CisgICAgICAgd2ludF90IHdjID0gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSk7CisgICAgICAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dJREVfV09SRF9DSEFSICh3YykgIT0gMDsKK0BAIC0yMDIzLDcgKzIwMzIsNyBAQCBwZWVrX3Rva2VuX2JyYWNrZXQgKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgICB0b2tlbi0+b3ByLmMgPSBjOworIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxICYmCisgICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgIHsKKyAgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKK0BAIC0yMjQ2LDcgKzIyNTUsNyBAQCBwYXJzZV9leHByZXNzaW9uIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICByZXR1cm4gTlVMTDsKKyAJfQorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCXsKKyAJICB3aGlsZSAoIXJlX3N0cmluZ19lb2kgKHJlZ2V4cCkKKyAJCSAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpKQorQEAgLTIzODQsNyArMjM5Myw3IEBAIHBhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgICplcnIgPSBSRUdfRVNQQUNFOworIAkgIHJldHVybiBOVUxMOworIAl9CistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJZGZhLT5oYXNfbWJfbm9kZSA9IDE7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgT1BfV09SRDoKK0BAIC0yNjkwLDcgKzI2OTksNyBAQCBidWlsZF9yYW5nZV9leHAgKGJpdHNldF90IHNiY3NldCwgYnJhY2tldF9lbGVtX3QgKnN0YXJ0X2VsZW0sCisgICAgICAgIEhvd2V2ZXIsIGZvciAhX0xJQkMgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHM6IGlmIHRoZQorICAgICAgICBjaGFyYWN0ZXIgc2V0IGlzIHNpbmdsZSBieXRlLCB0aGUgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHNldAorICAgICAgICB0aGF0IHdlIGJ1aWxkIGJlbG93IHN1ZmZpY2VzLiAgcGFyc2VfYnJhY2tldF9leHAgcGFzc2VzCistICAgICAgIG5vIE1CQ1NFVCBpZiBkZmEtPm1iX2N1cl9tYXggPT0gMS4gICovCisrICAgICAgIG5vIE1CQ1NFVCBpZiBkZmFfbWJfY3VyX21heCAoZGZhKSA9PSAxLiAgKi8KKyAgICAgaWYgKG1iY3NldCkKKyAgICAgICB7CisgCS8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KK0BAIC0yNzg2LDcgKzI3OTUsMTMgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkJICAgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKQorIHsKKyAjaWZkZWYgX0xJQkMKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxbWI7CisrIyBkZWZpbmUgQ09MTFNFUU1CX0xPT0tVUChpeCkgKGNvbGxzZXFtYlsoaXgpXSkKKysjZWxzZQorKyMgZGVmaW5lIENPTExTRVFNQl9MT09LVVAoaXgpIChpeCkKKysjZW5kaWYKKysKKyAgIGNvbnN0IGNoYXIgKmNvbGxzZXF3YzsKKyAgIHVpbnQzMl90IG5ydWxlczsKKyAgIGludDMyX3QgdGFibGVfc2l6ZTsKK0BAIC0yODM0LDE4ICsyODQ5LDIwIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorIAkgICovCisgCSAgaWYgKG5ydWxlcyA9PSAwKQorLQkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIuY2hdOworKwkgICAgcmV0dXJuIENPTExTRVFNQl9MT09LVVAgKGJyX2VsZW0tPm9wci5jaCk7CisgCSAgZWxzZQorIAkgICAgeworIAkgICAgICB3aW50X3Qgd2MgPSBfX2J0b3djIChicl9lbGVtLT5vcHIuY2gpOworIAkgICAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCB3Yyk7CisgCSAgICB9CisgCX0KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgICAgZWxzZSBpZiAoYnJfZWxlbS0+dHlwZSA9PSBNQl9DSEFSKQorIAl7CisgCSAgaWYgKG5ydWxlcyAhPSAwKQorIAkgICAgcmV0dXJuIF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgYnJfZWxlbS0+b3ByLndjaCk7CisgCX0KKysjZW5kaWYKKyAgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IENPTExfU1lNKQorIAl7CisgCSAgc2l6ZV90IHN5bV9uYW1lX2xlbiA9IHN0cmxlbiAoKGNoYXIgKikgYnJfZWxlbS0+b3ByLm5hbWUpOworQEAgLTI4NzYsMTEgKzI4OTMsMTEgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkJeworIAkJICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhIHNpbmdsZSBieXRlCisgCQkgICAgIGNoYXJhY3Rlci4gICovCistCQkgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVbMF1dOworKwkJICByZXR1cm4gQ09MTFNFUU1CX0xPT0tVUCAoYnJfZWxlbS0+b3ByLm5hbWVbMF0pOworIAkJfQorIAkgICAgfQorIAkgIGVsc2UgaWYgKHN5bV9uYW1lX2xlbiA9PSAxKQorLQkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisrCSAgICByZXR1cm4gQ09MTFNFUU1CX0xPT0tVUCAoYnJfZWxlbS0+b3ByLm5hbWVbMF0pOworIAl9CisgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgICB9CitAQCAtMjkyMCw3ICsyOTM3LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgSG93ZXZlciwgaWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHMsIGFuZCB0aGUgY2hhcmFjdGVyIHNldAorIAkgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0IHRoYXQgd2UKKyAJIGJ1aWxkIGJlbG93IHN1ZmZpY2VzLiAqLworLSAgICAgIGlmIChucnVsZXMgPiAwIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKG5ydWxlcyA+IDAgfHwgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAl7CisgCSAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworIAkgIGlmIChCRSAoKnJhbmdlX2FsbG9jID09IG1iY3NldC0+bnJhbmdlcywgMCkpCitAQCAtMjk1Nyw3ICsyOTc0LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgIGlmIChNQl9DVVJfTUFYID09IDEpCisgCSAgKi8KKyAJICBpZiAobnJ1bGVzID09IDApCistCSAgICBjaF9jb2xsc2VxID0gY29sbHNlcW1iW2NoXTsKKysJICAgIGNoX2NvbGxzZXEgPSBDT0xMU0VRTUJfTE9PS1VQIChjaCk7CisgCSAgZWxzZQorIAkgICAgY2hfY29sbHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgX19idG93YyAoY2gpKTsKKyAJICBpZiAoc3RhcnRfY29sbHNlcSA8PSBjaF9jb2xsc2VxICYmIGNoX2NvbGxzZXEgPD0gZW5kX2NvbGxzZXEpCitAQCAtMzAzNSw3ICszMDUyLDEwIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAgIHJlX2JpdHNldF9wdHJfdCBzYmNzZXQ7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICByZV9jaGFyc2V0X3QgKm1iY3NldDsKKy0gIGludCBjb2xsX3N5bV9hbGxvYyA9IDAsIHJhbmdlX2FsbG9jID0gMCwgbWJjaGFyX2FsbG9jID0gMDsKKysgIGludCBjb2xsX3N5bV9hbGxvYyA9IDAsIHJhbmdlX2FsbG9jID0gMDsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICBpbnQgbWJjaGFyX2FsbG9jID0gMDsKKysjZW5kaWYKKyAgIGludCBlcXVpdl9jbGFzc19hbGxvYyA9IDAsIGNoYXJfY2xhc3NfYWxsb2MgPSAwOworICNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgIGludCBub25fbWF0Y2ggPSAwOworQEAgLTMwNDMsOSArMzA2MywxNSBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgICBpbnQgdG9rZW5fbGVuOworICAgaW50IGZpcnN0X3JvdW5kID0gMTsKKyAjaWZkZWYgX0xJQkMKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBjb2xsc2VxbWIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKyAgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrI2Vsc2UKKysgIC8qIFRoaXMgaXMgdHJ1ZSB3aGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIGJ1dCB0aGUKKysgICAgIGNvbXBpbGVyIGNhbid0IGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBucnVsZXMgPSAwOworKyNlbmRpZgorICAgaWYgKG5ydWxlcykKKyAgICAgeworICAgICAgIC8qCitAQCAtMzE3NSw3ICszMjAxLDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorICNlbHNlCisgIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorIAkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwKKy0JCQkJICBkZmEtPm1iX2N1cl9tYXggPiAxID8gbWJjc2V0IDogTlVMTCwKKysJCQkJICBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEgPyBtYmNzZXQgOiBOVUxMLAorIAkJCQkgICZyYW5nZV9hbGxvYywgJnN0YXJ0X2VsZW0sICZlbmRfZWxlbSk7CisgIyBlbHNlCisgCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKK0BAIC0zMTkxLDcgKzMyMTcsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgICBjYXNlIFNCX0NIQVI6CisgCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgc3RhcnRfZWxlbS5vcHIuY2gpOworIAkgICAgICBicmVhazsKKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgIGNhc2UgTUJfQ0hBUjoKKyAJICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgYXJyYXkgaGFzIGVub3VnaCBzcGFjZS4gICovCisgCSAgICAgIGlmIChCRSAobWJjaGFyX2FsbG9jID09IG1iY3NldC0+bm1iY2hhcnMsIDApKQorQEAgLTMyMDksNyArMzIzNSw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJCX0KKyAJICAgICAgbWJjc2V0LT5tYmNoYXJzW21iY3NldC0+bm1iY2hhcnMrK10gPSBzdGFydF9lbGVtLm9wci53Y2g7CisgCSAgICAgIGJyZWFrOworLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAJICAgIGNhc2UgRVFVSVZfQ0xBU1M6CisgCSAgICAgICplcnIgPSBidWlsZF9lcXVpdl9jbGFzcyAoc2Jjc2V0LAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorQEAgLTMyNTksMTEgKzMyODUsMTEgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKyAKKyAgIGlmIChtYmNzZXQtPm5tYmNoYXJzIHx8IG1iY3NldC0+bmNvbGxfc3ltcyB8fCBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzCistICAgICAgfHwgbWJjc2V0LT5ucmFuZ2VzIHx8IChkZmEtPm1iX2N1cl9tYXggPiAxICYmIChtYmNzZXQtPm5jaGFyX2NsYXNzZXMKKysgICAgICB8fCBtYmNzZXQtPm5yYW5nZXMgfHwgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSAmJiAobWJjc2V0LT5uY2hhcl9jbGFzc2VzCisgCQkJCQkJICAgICB8fCBtYmNzZXQtPm5vbl9tYXRjaCkpKQorICAgICB7CisgICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CitAQCAtMzMzMiw3ICszMzU4LDcgQEAgcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKyAJCSAgICAgICByZV90b2tlbl90ICp0b2tlbiwgaW50IHRva2VuX2xlbiwgcmVfZGZhX3QgKmRmYSwKKyAJCSAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBpbnQgYWNjZXB0X2h5cGhlbikKKyB7CistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpbnQgY3VyX2NoYXJfc2l6ZTsKKyAgIGN1cl9jaGFyX3NpemUgPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKTsKKyAgIGlmIChjdXJfY2hhcl9zaXplID4gMSkKK0BAIC0zMzQyLDcgKzMzNjgsNyBAQCBwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorICAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIGN1cl9jaGFyX3NpemUpOworICAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICAgfQorLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgYSB0b2tlbi4gICovCisgICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DT0xMX0VMRU0gfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DSEFSX0NMQVNTCisgICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9FUVVJVl9DTEFTUykKK0BAIC0zNDIyLDcgKzM0NDgsOSBAQCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwKKyBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorICNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyB7CistI2lmZGVmIF9MSUJDCisrICAvKiBXaGVuIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgb25seSB0aGUgQyBsb2NhbGUKKysgICAgIGlzIHN1cHBvcnRlZDsgaXQgaGFzIG5vIGNvbGxhdGlvbiBydWxlcy4gICovCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICAgaWYgKG5ydWxlcyAhPSAwKQorICAgICB7CitAQCAtMzQ5Miw3ICszNTIwLDcgQEAgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyAgICAgICBtYmNzZXQtPmVxdWl2X2NsYXNzZXNbbWJjc2V0LT5uZXF1aXZfY2xhc3NlcysrXSA9IGlkeDE7CisgICAgIH0KKyAgIGVsc2UKKy0jZW5kaWYgLyogX0xJQkMgKi8KKysjZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgICAgIHsKKyAgICAgICBpZiAoQkUgKHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSkgIT0gMSwgMCkpCisgCXJldHVybiBSRUdfRUNPTExBVEU7CitAQCAtMzUyNiw3ICszNTU0LDcgQEAgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorICAgICAgICYmIChzdHJjbXAgKG5hbWUsICJ1cHBlciIpID09IDAgfHwgc3RyY21wIChuYW1lLCAibG93ZXIiKSA9PSAwKSkKKyAgICAgbmFtZSA9ICJhbHBoYSI7CisgCistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisgICBpZiAoQkUgKCpjaGFyX2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmNoYXJfY2xhc3NlcywgMCkpCisgICAgIHsKK0BAIC0zNTQyLDcgKzM1NzAsNyBAQCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisgICAgICAgKmNoYXJfY2xhc3NfYWxsb2MgPSBuZXdfY2hhcl9jbGFzc19hbGxvYzsKKyAgICAgfQorICAgbWJjc2V0LT5jaGFyX2NsYXNzZXNbbWJjc2V0LT5uY2hhcl9jbGFzc2VzKytdID0gX193Y3R5cGUgKG5hbWUpOworLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAKKyAjZGVmaW5lIEJVSUxEX0NIQVJDTEFTU19MT09QKGN0eXBlX2Z1bmMpCVwKKyAgIGRvIHsJCQkJCQlcCitAQCAtMzY1Myw3ICszNjgxLDcgQEAgYnVpbGRfY2hhcmNsYXNzX29wIChyZV9kZmFfdCAqZGZhLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisgI2VuZGlmCisgCitAQCAtMzY2NSw3ICszNjkzLDcgQEAgYnVpbGRfY2hhcmNsYXNzX29wIChyZV9kZmFfdCAqZGZhLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKyAgICAgZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgeworICAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworICAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3IgY29tcGxleCBicmFja2V0LiAgKi8KK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleC5oIGIvcG9zaXgvcmVnZXguaAoraW5kZXggNWIxOTgxZS4uMjk0MWY5NCAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4LmgKKysrKyBiL3Bvc2l4L3JlZ2V4LmgKK0BAIC0yMSw2ICsyMSw3IEBACisgI2RlZmluZSBfUkVHRVhfSCAxCisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIEFsbG93IHRoZSB1c2UgaW4gQysrIGNvZGUuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworQEAgLTE1Niw2ICsxNTcsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAgICB0cmVhdGVkIGFzICdhXHsxJy4gICovCisgIyBkZWZpbmUgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgKFJFX0RFQlVHIDw8IDEpCisgCisrLyogRUdMSUJDOiBPbGQgcmVnZXggaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGVzZS4gICovCisrIyBpZiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKyAgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworICMgZGVmaW5lIFJFX0lDQVNFIChSRV9JTlZBTElEX0lOVEVSVkFMX09SRCA8PCAxKQorQEAgLTE3Miw2ICsxNzUsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gbm9fc3ViIHdpbGwgYmUgc2V0IHRvIDEgZHVyaW5nCisgICAgcmVfY29tcGlsZV9wYXR0ZXJuLiAgKi8KKyAjIGRlZmluZSBSRV9OT19TVUIgKFJFX0NPTlRFWFRfSU5WQUxJRF9EVVAgPDwgMSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQyAqLworICNlbmRpZgorIAorIC8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgcmVnZXhwIHN5bnRheCB0byB1c2UgKGZvcgorQEAgLTIzMSw4ICsyMzUsMTMgQEAgZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKyAgIChSRV9DSEFSX0NMQVNTRVMgfCBSRV9ET1RfTkVXTElORSAgICAgIHwgUkVfRE9UX05PVF9OVUxMCQlcCisgICAgfCBSRV9JTlRFUlZBTFMgIHwgUkVfTk9fRU1QVFlfUkFOR0VTKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMKKyAjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9CQVNJQwkJCQkJCVwKKyAgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0JLX1BMVVNfUU0gfCBSRV9DT05URVhUX0lOVkFMSURfRFVQKQorKyNlbHNlCisrI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQkFTSUMJCQkJCQlcCisrICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNKQorKyNlbmRpZgorIAorIC8qIERpZmZlcnMgZnJvbSAuLi5fUE9TSVhfQkFTSUMgb25seSBpbiB0aGF0IFJFX0JLX1BMVVNfUU0gYmVjb21lcworICAgIFJFX0xJTUlURURfT1BTLCBpLmUuLCBcPyBcKyBcfCBhcmUgbm90IHJlY29nbml6ZWQuICBBY3R1YWxseSwgdGhpcworQEAgLTI5OCw5ICszMDcsMTEgQEAgZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKyAvKiBMaWtlIFJFR19OT1RCT0wsIGV4Y2VwdCBmb3IgdGhlIGVuZC1vZi1saW5lLiAgKi8KKyAjZGVmaW5lIFJFR19OT1RFT0wgKDEgPDwgMSkKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDCisgLyogVXNlIFBNQVRDSFswXSB0byBkZWxpbWl0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzZWFyY2ggaW4gdGhlCisgICAgYnVmZmVyLiAgKi8KKyAjZGVmaW5lIFJFR19TVEFSVEVORCAoMSA8PCAyKQorKyNlbmRpZgorIAorIAorIC8qIElmIGFueSBlcnJvciBjb2RlcyBhcmUgcmVtb3ZlZCwgY2hhbmdlZCwgb3IgYWRkZWQsIHVwZGF0ZSB0aGUKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5jIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYworaW5kZXggODU5N2Q3ZS4uZDUzYjJhOCAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMKKysrKyBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMKK0BAIC00Myw4ICs0Myw4IEBAIHJlX3N0cmluZ19hbGxvY2F0ZSAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGluaXRfbGVuLAorICAgaW50IGluaXRfYnVmX2xlbjsKKyAKKyAgIC8qIEVuc3VyZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGZpdHMgaW50byB0aGUgYnVmZmVycy4gICovCistICBpZiAoaW5pdF9sZW4gPCBkZmEtPm1iX2N1cl9tYXgpCistICAgIGluaXRfbGVuID0gZGZhLT5tYl9jdXJfbWF4OworKyAgaWYgKGluaXRfbGVuIDwgZGZhX21iX2N1cl9tYXggKGRmYSkpCisrICAgIGluaXRfbGVuID0gZGZhX21iX2N1cl9tYXggKGRmYSk7CisgICBpbml0X2J1Zl9sZW4gPSAobGVuICsgMSA8IGluaXRfbGVuKSA/IGxlbiArIDE6IGluaXRfbGVuOworICAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKHN0ciwgbGVuLCBwc3RyLCB0cmFucywgaWNhc2UsIGRmYSk7CisgCitAQCAtNTUsNyArNTUsNyBAQCByZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBpbml0X2xlbiwKKyAgIHBzdHItPndvcmRfY2hhciA9IGRmYS0+d29yZF9jaGFyOworICAgcHN0ci0+d29yZF9vcHNfdXNlZCA9IGRmYS0+d29yZF9vcHNfdXNlZDsKKyAgIHBzdHItPm1icyA9IHBzdHItPm1ic19hbGxvY2F0ZWQgPyBwc3RyLT5tYnMgOiAodW5zaWduZWQgY2hhciAqKSBzdHI7CistICBwc3RyLT52YWxpZF9sZW4gPSAocHN0ci0+bWJzX2FsbG9jYXRlZCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKSA/IDAgOiBsZW47CisrICBwc3RyLT52YWxpZF9sZW4gPSAocHN0ci0+bWJzX2FsbG9jYXRlZCB8fCBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpID8gMCA6IGxlbjsKKyAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisgICByZXR1cm4gUkVHX05PRVJST1I7CisgfQorQEAgLTgyLDcgKzgyLDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKyAgIGlmIChpY2FzZSkKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCXsKKyAJICB3aGlsZSAoMSkKKyAJICAgIHsKK0BAIC05MSw3ICs5MSw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisgCQlyZXR1cm4gcmV0OworIAkgICAgICBpZiAocHN0ci0+dmFsaWRfcmF3X2xlbiA+PSBsZW4pCisgCQlicmVhazsKKy0JICAgICAgaWYgKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+dmFsaWRfbGVuICsgZGZhLT5tYl9jdXJfbWF4KQorKwkgICAgICBpZiAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT52YWxpZF9sZW4gKyBkZmFfbWJfY3VyX21heCAoZGZhKSkKKyAJCWJyZWFrOworIAkgICAgICByZXQgPSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3RyLCBwc3RyLT5idWZzX2xlbiAqIDIpOworIAkgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCitAQCAtMTA1LDcgKzEwNSw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisgICBlbHNlCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgICBlbHNlCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworQEAgLTEzMCw3ICsxMzAsNyBAQCBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworIHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgbmV3X2J1Zl9sZW4pCisgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgICAgIHsKKyAgICAgICB3aW50X3QgKm5ld193Y3M7CisgCitAQCAtMTc3LDcgKzE3Nyw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHJlX3N0cmluZ190ICpwc3RyLAorICAgcHN0ci0+dHJhbnMgPSB0cmFuczsKKyAgIHBzdHItPmljYXNlID0gaWNhc2UgPyAxIDogMDsKKyAgIHBzdHItPm1ic19hbGxvY2F0ZWQgPSAodHJhbnMgIT0gTlVMTCB8fCBpY2FzZSk7CistICBwc3RyLT5tYl9jdXJfbWF4ID0gZGZhLT5tYl9jdXJfbWF4OworKyAgcHN0ci0+bWJfY3VyX21heCA9IGRmYV9tYl9jdXJfbWF4IChkZmEpOworICAgcHN0ci0+aXNfdXRmOCA9IGRmYS0+aXNfdXRmODsKKyAgIHBzdHItPm1hcF9ub3Rhc2NpaSA9IGRmYS0+bWFwX25vdGFzY2lpOworICAgcHN0ci0+c3RvcCA9IHBzdHItPmxlbjsKK0BAIC0yMDMsNyArMjAzLDcgQEAgYnVpbGRfd2NzX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgeworICNpZmRlZiBfTElCQworICAgdW5zaWduZWQgY2hhciBidWZbTUJfTEVOX01BWF07CistICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3VyX21heCk7CisrICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpKTsKKyAjZWxzZQorICAgdW5zaWduZWQgY2hhciBidWZbNjRdOworICNlbmRpZgorQEAgLTIyNiw3ICsyMjYsNyBAQCBidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAJeworIAkgIGludCBpLCBjaDsKKyAKKy0JICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorKwkgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmdfbWJfY3VyX21heCAocHN0cikgJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKyAJICAgIHsKKyAJICAgICAgY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4ICsgaV07CisgCSAgICAgIGJ1ZltpXSA9IHBzdHItPm1ic1tieXRlX2lkeCArIGldID0gcHN0ci0+dHJhbnNbY2hdOworQEAgLTI3NSw3ICsyNzUsNyBAQCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAgIHNpemVfdCBtYmNsZW47CisgI2lmZGVmIF9MSUJDCisgICBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKy0gIGFzc2VydCAoTUJfTEVOX01BWCA+PSBwc3RyLT5tYl9jdXJfbWF4KTsKKysgIGFzc2VydCAoTUJfTEVOX01BWCA+PSBzdHJpbmdfbWJfY3VyX21heCAocHN0cikpOworICNlbHNlCisgICBjaGFyIGJ1Zls2NF07CisgI2VuZGlmCitAQCAtMzY5LDcgKzM2OSw3IEBAIGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIAkgIHsKKyAJICAgIGludCBpLCBjaDsKKyAKKy0JICAgIGZvciAoaSA9IDA7IGkgPCBwc3RyLT5tYl9jdXJfbWF4ICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisrCSAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisgCSAgICAgIHsKKyAJCWNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBzcmNfaWR4ICsgaV07CisgCQlidWZbaV0gPSBwc3RyLT50cmFuc1tjaF07CitAQCAtNTY3LDggKzU2Nyw5IEBAIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyB9CisgCisgLyogVGhpcyBmdW5jdGlvbiByZS1jb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuCistICAgQ29uY3JldGVseSwgY29udmVydCB0byB3aWRlIGNoYXJhY3RlciBpbiBjYXNlIG9mIHBzdHItPm1iX2N1cl9tYXggPiAxLAorLSAgIGNvbnZlcnQgdG8gdXBwZXIgY2FzZSBpbiBjYXNlIG9mIFJFR19JQ0FTRSwgYXBwbHkgdHJhbnNsYXRpb24uICAqLworKyAgIENvbmNyZXRlbHksIGNvbnZlcnQgdG8gd2lkZSBjaGFyYWN0ZXIgaW4gY2FzZSBvZgorKyAgIHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEsIGNvbnZlcnQgdG8gdXBwZXIgY2FzZSBpbiBjYXNlIG9mCisrICAgUkVHX0lDQVNFLCBhcHBseSB0cmFuc2xhdGlvbi4gICovCisgCisgc3RhdGljIHJlZ19lcnJjb2RlX3QKKyBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworQEAgLTU3OSw3ICs1ODAsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorICAgICB7CisgICAgICAgLyogUmVzZXQgYnVmZmVyLiAgKi8KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCW1lbXNldCAoJnBzdHItPmN1cl9zdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgICBwc3RyLT5sZW4gPSBwc3RyLT5yYXdfbGVuOworQEAgLTY3MCw3ICs2NzEsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorIAkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBvZmZzZXQgLSAxLAorIAkJCQkJCQllZmxhZ3MpOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrCSAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAkJbWVtbW92ZSAocHN0ci0+d2NzLCBwc3RyLT53Y3MgKyBvZmZzZXQsCisgCQkJIChwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpICogc2l6ZW9mICh3aW50X3QpKTsKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK0BAIC02OTksNyArNzAwLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAjZW5kaWYKKyAJICBwc3RyLT52YWxpZF9sZW4gPSAwOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJICAgIHsKKyAJICAgICAgaW50IHdjc19pZHg7CisgCSAgICAgIHdpbnRfdCB3YyA9IFdFT0Y7CitAQCAtNzExLDcgKzcxMiw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgCQkgIC8qIFNwZWNpYWwgY2FzZSBVVEYtOC4gIE11bHRpLWJ5dGUgY2hhcnMgc3RhcnQgd2l0aCBhbnkKKyAJCSAgICAgYnl0ZSBvdGhlciB0aGFuIDB4ODAgLSAweGJmLiAgKi8KKyAJCSAgcmF3ID0gcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4OworLQkJICBlbmQgPSByYXcgKyAob2Zmc2V0IC0gcHN0ci0+bWJfY3VyX21heCk7CisrCQkgIGVuZCA9IHJhdyArIChvZmZzZXQgLSBzdHJpbmdfbWJfY3VyX21heCAocHN0cikpOworIAkJICBpZiAoZW5kIDwgcHN0ci0+cmF3X21icykKKyAJCSAgICBlbmQgPSBwc3RyLT5yYXdfbWJzOworIAkJICBwID0gcmF3ICsgb2Zmc2V0IC0gMTsKK0BAIC04MDMsNyArODA0LDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAKKyAgIC8qIFRoZW4gYnVpbGQgdGhlIGJ1ZmZlcnMuICAqLworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgICAgIHsKKyAgICAgICBpZiAocHN0ci0+aWNhc2UpCisgCXsKK0BAIC04NDEsNyArODQyLDcgQEAgcmVfc3RyaW5nX3BlZWtfYnl0ZV9jYXNlIChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKKyAgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxCisgICAgICAgJiYgISByZV9zdHJpbmdfaXNfc2luZ2xlX2J5dGVfY2hhciAocHN0ciwgcHN0ci0+Y3VyX2lkeCArIGlkeCkpCisgICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworICNlbmRpZgorQEAgLTkzMCw3ICs5MzEsNyBAQCByZV9zdHJpbmdfY29udGV4dF9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorICAgICByZXR1cm4gKChlZmxhZ3MgJiBSRUdfTk9URU9MKSA/IENPTlRFWFRfRU5EQlVGCisgCSAgICA6IENPTlRFWFRfTkVXTElORSB8IENPTlRFWFRfRU5EQlVGKTsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEpCisgICAgIHsKKyAgICAgICB3aW50X3Qgd2M7CisgICAgICAgaW50IHdjX2lkeCA9IGlkeDsKK0BAIC0xNDQ0LDcgKzE0NDUsNyBAQCByZV9kZmFfYWRkX25vZGUgKHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgdG9rZW4pCisgICBkZmEtPm5vZGVzW2RmYS0+bm9kZXNfbGVuXS5jb25zdHJhaW50ID0gMDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmFjY2VwdF9tYiA9CistICAgICh0eXBlID09IE9QX1BFUklPRCAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKSB8fCB0eXBlID09IENPTVBMRVhfQlJBQ0tFVDsKKysgICAgKHR5cGUgPT0gT1BfUEVSSU9EICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkgfHwgdHlwZSA9PSBDT01QTEVYX0JSQUNLRVQ7CisgI2VuZGlmCisgICBkZmEtPm5leHRzW2RmYS0+bm9kZXNfbGVuXSA9IC0xOworICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBkZmEtPm5vZGVzX2xlbik7CitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaCBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmgKK2luZGV4IDE1NGU5NjkuLmM0MzkwOWEgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5oCisrKysgYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5oCitAQCAtMjYsNiArMjYsMTAgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKyNpZiBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpZiBkZWZpbmVkIEhBVkVfTEFOR0lORk9fSCB8fCBkZWZpbmVkIEhBVkVfTEFOR0lORk9fQ09ERVNFVCB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDxsYW5naW5mby5oPgorICNlbmRpZgorQEAgLTM2OSw2ICszNzMsMTMgQEAgc3RydWN0IHJlX3N0cmluZ190CisgfTsKKyB0eXBlZGVmIHN0cnVjdCByZV9zdHJpbmdfdCByZV9zdHJpbmdfdDsKKyAKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoaXMgaXMgYWx3YXlzIDE7CisrICAgaGVscCB0aGUgY29tcGlsZXIgbWFrZSB1c2Ugb2YgdGhhdCBmYWN0LiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgc3RyaW5nX21iX2N1cl9tYXgoc3RyKSAoKHN0ciktPm1iX2N1cl9tYXggKyAwKQorKyNlbHNlCisrIyBkZWZpbmUgc3RyaW5nX21iX2N1cl9tYXgoc3RyKSAoMSkKKysjZW5kaWYKKyAKKyBzdHJ1Y3QgcmVfZGZhX3Q7CisgdHlwZWRlZiBzdHJ1Y3QgcmVfZGZhX3QgcmVfZGZhX3Q7CitAQCAtNjU0LDYgKzY2NSwxNCBAQCBzdHJ1Y3QgcmVfZGZhX3QKKyAgIF9fbGliY19sb2NrX2RlZmluZSAoLCBsb2NrKQorIH07CisgCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGlzIGlzIGFsd2F5cyAxOworKyAgIGhlbHAgdGhlIGNvbXBpbGVyIG1ha2UgdXNlIG9mIHRoYXQgZmFjdC4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIGRmYV9tYl9jdXJfbWF4KGRmYSkgKChkZmEpLT5tYl9jdXJfbWF4ICsgMCkKKysjZWxzZQorKyMgZGVmaW5lIGRmYV9tYl9jdXJfbWF4KGRmYSkgKDEpCisrI2VuZGlmCisrCisgI2RlZmluZSByZV9ub2RlX3NldF9pbml0X2VtcHR5KHNldCkgbWVtc2V0IChzZXQsICdcMCcsIHNpemVvZiAocmVfbm9kZV9zZXQpKQorICNkZWZpbmUgcmVfbm9kZV9zZXRfcmVtb3ZlKHNldCxpZCkgXAorICAgKHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoc2V0LCByZV9ub2RlX3NldF9jb250YWlucyAoc2V0LCBpZCkgLSAxKSkKK0BAIC03MTQsNyArNzMzLDcgQEAgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKHB1cmUsIHVudXNlZCkpCisgcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCisgeworICAgaW50IGJ5dGVfaWR4OworLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPT0gMSkKKyAgICAgcmV0dXJuIDE7CisgICBmb3IgKGJ5dGVfaWR4ID0gMTsgaWR4ICsgYnl0ZV9pZHggPCBwc3RyLT52YWxpZF9sZW47ICsrYnl0ZV9pZHgpCisgICAgIGlmIChwc3RyLT53Y3NbaWR4ICsgYnl0ZV9pZHhdICE9IFdFT0YpCitAQCAtNzI2LDcgKzc0NSw3IEBAIHN0YXRpYyB3aW50X3QKKyBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgocHVyZSwgdW51c2VkKSkKKyByZV9zdHJpbmdfd2NoYXJfYXQgKGNvbnN0IHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4KQorIHsKKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID09IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID09IDEpCisgICAgIHJldHVybiAod2ludF90KSBwc3RyLT5tYnNbaWR4XTsKKyAgIHJldHVybiAod2ludF90KSBwc3RyLT53Y3NbaWR4XTsKKyB9CitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhlYy1jb21wYXQuYyBiL3Bvc2l4L3JlZ2V4ZWMtY29tcGF0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wZjliN2M3CistLS0gL2Rldi9udWxsCisrKysgYi9wb3NpeC9yZWdleGVjLWNvbXBhdC5jCitAQCAtMCwwICsxLDM5IEBACisrLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKyt2ZXJzaW9uZWRfc3ltYm9sIChsaWJjLCBfX3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfM180KTsKKysKKysjIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkKKytfX3R5cGVvZl9fIChfX3JlZ2V4ZWMpIF9fY29tcGF0X3JlZ2V4ZWM7CisrCisraW50CisrYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKytfX2NvbXBhdF9yZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisrCQkgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qgc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorKwkJICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQorK3sKKysgIHJldHVybiByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLAorKwkJICBlZmxhZ3MgJiAoUkVHX05PVEJPTCB8IFJFR19OT1RFT0wpKTsKKyt9CisrY29tcGF0X3N5bWJvbCAobGliYywgX19jb21wYXRfcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8wKTsKKysjIGVuZGlmCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhlYy5jIGIvcG9zaXgvcmVnZXhlYy5jCitpbmRleCA3MGNkNjA2Li5lM2I0OWU0IDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXhlYy5jCisrKysgYi9wb3NpeC9yZWdleGVjLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqY2FjaGUsIGludCBlZmxhZ3MsCisgCQkJCSAgICAgaW50IG4pIGludGVybmFsX2Z1bmN0aW9uOworQEAgLTE4NiwxMSArMTg3LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfdHJ0YWJsZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKyBzdGF0aWMgaW50IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCQkJCSAgICBjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgpCisgICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKy0jIGlmZGVmIF9MSUJDCisrIyBpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywKKyAJCQkJCQkgICBzaXplX3QgbmFtZV9sZW4pCisgICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKy0jIGVuZGlmIC8qIF9MSUJDICovCisrIyBlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyBzdGF0aWMgaW50IGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLAorIAkJCQkgICAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCitAQCAtMjU1LDI1ICsyNTYsOSBAQCByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLCBlZmxhZ3MpCisgICByZXR1cm4gZXJyICE9IFJFR19OT0VSUk9SOworIH0KKyAKKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorLXZlcnNpb25lZF9zeW1ib2wgKGxpYmMsIF9fcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8zXzQpOworLQorLSMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfM180KQorLV9fdHlwZW9mX18gKF9fcmVnZXhlYykgX19jb21wYXRfcmVnZXhlYzsKKy0KKy1pbnQKKy1hdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorLV9fY29tcGF0X3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKy0JCSAgY29uc3QgY2hhciAqX19yZXN0cmljdCBzdHJpbmcsIHNpemVfdCBubWF0Y2gsCistCQkgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCisteworLSAgcmV0dXJuIHJlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsCistCQkgIGVmbGFncyAmIChSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCkpOworLX0KKy1jb21wYXRfc3ltYm9sIChsaWJjLCBfX2NvbXBhdF9yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzApOworLSMgZW5kaWYKKy0jZW5kaWYKKysvKiBFR0xJQkM6IFRoZSBjb2RlIHRoYXQgdXNlZCB0byBiZSBoZXJlIHdhcyBtb3ZlIHRvIGEgc2VwYXJhdGUgZmlsZQorKyAgIHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCB3aXRoIHhyZWdleC5jLiAgKi8KKysjaW5jbHVkZSAicmVnZXhlYy1jb21wYXQuYyIKKyAKKyAvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKyAKK0BAIC03MjgsNyArNzEzLDcgQEAgcmVfc2VhcmNoX2ludGVybmFsIChwcmVnLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIHJhbmdlLCBzdG9wLCBubWF0Y2gsIHBtYXRjaCwKKyAgIGluY3IgPSAocmFuZ2UgPCAwKSA/IC0xIDogMTsKKyAgIGxlZnRfbGltID0gKHJhbmdlIDwgMCkgPyBzdGFydCArIHJhbmdlIDogc3RhcnQ7CisgICByaWdodF9saW0gPSAocmFuZ2UgPCAwKSA/IHN0YXJ0IDogc3RhcnQgKyByYW5nZTsKKy0gIHNiID0gZGZhLT5tYl9jdXJfbWF4ID09IDE7CisrICBzYiA9IGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDE7CisgICBtYXRjaF9raW5kID0KKyAgICAgKGZhc3RtYXAKKyAgICAgID8gKChzYiB8fCAhKHByZWctPnN5bnRheCAmIFJFX0lDQVNFIHx8IHQpID8gNCA6IDApCitAQCAtMzQ0OCw3ICszNDMzLDcgQEAgb3V0X2ZyZWU6CisgCSAgaWYgKEJFIChkZXN0X3N0YXRlc193b3JkW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAJICAgIGdvdG8gb3V0X2ZyZWU7CisgCistCSAgaWYgKGRlc3Rfc3RhdGVzW2ldICE9IGRlc3Rfc3RhdGVzX3dvcmRbaV0gJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoZGVzdF9zdGF0ZXNbaV0gIT0gZGVzdF9zdGF0ZXNfd29yZFtpXSAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCSAgICBuZWVkX3dvcmRfdHJ0YWJsZSA9IDE7CisgCisgCSAgZGVzdF9zdGF0ZXNfbmxbaV0gPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmZvbGxvd3MsCitAQCAtMzU5MCw3ICszNTc1LDcgQEAgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9EKQorIAl7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJICAgIGJpdHNldF9tZXJnZSAoYWNjZXB0cywgZGZhLT5zYl9jaGFyKTsKKyAJICBlbHNlCisgI2VuZGlmCitAQCAtMzY0MSw3ICszNjI2LDcgQEAgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorIAkJICBjb250aW51ZTsKKyAJCX0KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisgCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gKGRmYS0+d29yZF9jaGFyW2pdIHwgfmRmYS0+c2JfY2hhcltqXSkpOworIAkgICAgICBlbHNlCitAQCAtMzY2MCw3ICszNjQ1LDcgQEAgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorIAkJICBjb250aW51ZTsKKyAJCX0KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisgCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gfihkZmEtPndvcmRfY2hhcltqXSAmIGRmYS0+c2JfY2hhcltqXSkpOworIAkgICAgICBlbHNlCitAQCAtMzgzNiwxMiArMzgyMSw2IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgICBpZiAobm9kZS0+dHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisgICAgIHsKKyAgICAgICBjb25zdCByZV9jaGFyc2V0X3QgKmNzZXQgPSBub2RlLT5vcHIubWJjc2V0OworLSMgaWZkZWYgX0xJQkMKKy0gICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKy0JPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKGlucHV0KSArIHN0cl9pZHgpOworLSAgICAgIGludCBqOworLSAgICAgIHVpbnQzMl90IG5ydWxlczsKKy0jIGVuZGlmIC8qIF9MSUJDICovCisgICAgICAgaW50IG1hdGNoX2xlbiA9IDA7CisgICAgICAgd2NoYXJfdCB3YyA9ICgoY3NldC0+bnJhbmdlcyB8fCBjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5tYmNoYXJzKQorIAkJICAgID8gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwgc3RyX2lkeCkgOiAwKTsKK0BAIC0zODUzLDYgKzM4MzIsNyBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkgICAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisgCSAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworIAkgIH0KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyYWN0ZXJfY2xhc3M/ICAqLworICAgICAgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5uY2hhcl9jbGFzc2VzOyArK2kpCisgCXsKK0BAIC0zODYzLDE0ICszODQzLDIyIEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCSAgICAgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisgCSAgICB9CisgCX0KKysjZW5kaWYKKysKKysgICAgICAvKiBXaGVuIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgb25seSB0aGUgQworKyAgICAgICAgIGxvY2FsZSBpcyBzdXBwb3J0ZWQ7IGl0IGhhcyBubyBjb2xsYXRpb24gcnVsZXMuICAqLworKyMgaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKysJPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKGlucHV0KSArIHN0cl9pZHgpOworKyAgICAgIGludCBqOworKyAgICAgIHVpbnQzMl90IG5ydWxlczsKKyAKKy0jIGlmZGVmIF9MSUJDCisgICAgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgICAgICBpZiAobnJ1bGVzICE9IDApCisgCXsKKyAJICB1bnNpZ25lZCBpbnQgaW5fY29sbHNlcSA9IDA7CisgCSAgY29uc3QgaW50MzJfdCAqdGFibGUsICppbmRpcmVjdDsKKy0JICBjb25zdCB1bnNpZ25lZCBjaGFyICp3ZWlnaHRzLCAqZXh0cmE7CisrCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhID0gTlVMTDsKKyAJICBjb25zdCBjaGFyICpjb2xsc2Vxd2M7CisgCisgCSAgLyogbWF0Y2ggd2l0aCBjb2xsYXRpbmdfc3ltYm9sPyAgKi8KK0BAIC0zOTU1LDggKzM5NDMsMTIgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJICAgIH0KKyAJfQorICAgICAgIGVsc2UKKy0jIGVuZGlmIC8qIF9MSUJDICovCisrIyBlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAJeworKyAgICAgICAgICAvKiBJbiB0aGUgX0xJQkMgdmVyc2lvbiwgaWYgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcworKyAgICAgICAgICAgICBkaXNhYmxlZCwgdGhlcmUgY2FuIGJlIG5vIG11bHRpYnl0ZSByYW5nZSBlbmRwb2ludHMsIGFuZAorKyAgICAgICAgICAgICBjc2V0LT5ucmFuZ2VzIGlzIGFsd2F5cyB6ZXJvLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgLyogbWF0Y2ggd2l0aCByYW5nZSBleHByZXNzaW9uPyAgKi8KKyAjaWYgX19HTlVDX18gPj0gMgorIAkgIHdjaGFyX3QgY21wX2J1ZltdID0ge0wnXDAnLCBMJ1wwJywgd2MsIEwnXDAnLCBMJ1wwJywgTCdcMCd9OworQEAgLTM5NzUsNiArMzk2Nyw3IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisgCQl9CisgCSAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAl9CisgICAgIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOgorICAgICAgIGlmICghY3NldC0+bm9uX21hdGNoKQorQEAgLTM5OTAsNyArMzk4Myw3IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgICByZXR1cm4gMDsKKyB9CisgCistIyBpZmRlZiBfTElCQworKyMgaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyBzdGF0aWMgdW5zaWduZWQgaW50CisgaW50ZXJuYWxfZnVuY3Rpb24KKyBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLCBzaXplX3QgbWJzX2xlbikKK0BAIC00MDQ4LDcgKzQwNDEsNyBAQCBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLCBzaXplX3QgbWJzX2xlbikKKyAgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgIH0KKyB9CistIyBlbmRpZiAvKiBfTElCQyAqLworKyMgZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgCisgLyogQ2hlY2sgd2hldGhlciB0aGUgbm9kZSBhY2NlcHRzIHRoZSBieXRlIHdoaWNoIGlzIElEWC10aAorQEAgLTQxMzksNyArNDEzMiw3IEBAIGV4dGVuZF9idWZmZXJzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBtaW5fbGVuKQorICAgaWYgKHBzdHItPmljYXNlKQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAl7CisgCSAgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisgCSAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorQEAgLTQxNTIsNyArNDE0NSw3IEBAIGV4dGVuZF9idWZmZXJzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBtaW5fbGVuKQorICAgZWxzZQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgICBlbHNlCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworZGlmZiAtLWdpdCBhL3Bvc2l4L3hyZWdleC5jIGIvcG9zaXgveHJlZ2V4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kM2Y3YWNlCistLS0gL2Rldi9udWxsCisrKysgYi9wb3NpeC94cmVnZXguYworQEAgLTAsMCArMSw4MjE1IEBACisrLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeSwKKysgICB2ZXJzaW9uIDAuMTIuCisrICAgKEltcGxlbWVudHMgUE9TSVggZHJhZnQgUDEwMDMuMi9EMTEuMiwgZXhjZXB0IGZvciBzb21lIG9mIHRoZQorKyAgIGludGVybmF0aW9uYWxpemF0aW9uIGZlYXR1cmVzLikKKysKKysgICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrICAgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyAgIDAyMTEwLTEzMDEgVVNBLiAgKi8KKysKKysvKiBBSVggcmVxdWlyZXMgdGhpcyB0byBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIGZpbGUuICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBSRUdFWF9NQUxMT0MKKysgICNwcmFnbWEgYWxsb2NhCisrI2VuZGlmCisrCisrI3VuZGVmCV9HTlVfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpZm5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKyMgaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiNpbmNsdWRlIDxhbnNpZGVjbC5oPiovCisrCisrCisrI2lmbmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrIyBpZiBkZWZpbmVkIFNURENfSEVBREVSUyAmJiAhZGVmaW5lZCBlbWFjcworKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyMgZWxzZQorKy8qIFdlIG5lZWQgdGhpcyBmb3IgYHJlZ2V4LmgnLCBhbmQgcGVyaGFwcyBmb3IgdGhlIEVtYWNzIGluY2x1ZGUgZmlsZXMuICAqLworKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorKyMgZW5kaWYKKysKKysjIGlmIChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggJiYgZGVmaW5lZCBIQVZFX0JUT1dDKQorKyMgIGRlZmluZSBXSURFX0NIQVJfU1VQUE9SVCAoSEFWRV9XQ1RZUEVfSCAmJiBIQVZFX1dDSEFSX0ggJiYgSEFWRV9CVE9XQykKKysjIGVsc2UKKysjICBkZWZpbmUgV0lERV9DSEFSX1NVUFBPUlQgMAorKyMgZW5kaWYKKysvKiBGb3IgcGxhdGZvcm0gd2hpY2ggc3VwcG9ydCB0aGUgSVNPIEMgYW1lbmRlbWVudCAxIGZ1bmN0aW9uYWxpdHkgd2UKKysgICBzdXBwb3J0IHVzZXIgZGVmaW5lZCBjaGFyYWN0ZXIgY2xhc3Nlcy4gICovCisrIyBpZiBXSURFX0NIQVJfU1VQUE9SVAorKy8qIFNvbGFyaXMgMi41IGhhcyBhIGJ1ZzogPHdjaGFyLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y3R5cGUuaD4uICAqLworKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisrIyAgaW5jbHVkZSA8d2N0eXBlLmg+CisrIyBlbmRpZgorKworKyMgaWZkZWYgX0xJQkMKKysvKiBXZSBoYXZlIHRvIGtlZXAgdGhlIG5hbWVzcGFjZSBjbGVhbi4gICovCisrIyAgZGVmaW5lIHJlZ2ZyZWUocHJlZykgX19yZWdmcmVlIChwcmVnKQorKyMgIGRlZmluZSByZWdleGVjKHByLCBzdCwgbm0sIHBtLCBlZikgX19yZWdleGVjIChwciwgc3QsIG5tLCBwbSwgZWYpCisrIyAgZGVmaW5lIHJlZ2NvbXAocHJlZywgcGF0dGVybiwgY2ZsYWdzKSBfX3JlZ2NvbXAgKHByZWcsIHBhdHRlcm4sIGNmbGFncykKKysjICBkZWZpbmUgcmVnZXJyb3IoZXJyY29kZSwgcHJlZywgZXJyYnVmLCBlcnJidWZfc2l6ZSkgXAorKwlfX3JlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpCisrIyAgZGVmaW5lIHJlX3NldF9yZWdpc3RlcnMoYnUsIHJlLCBudSwgc3QsIGVuKSBcCisrCV9fcmVfc2V0X3JlZ2lzdGVycyAoYnUsIHJlLCBudSwgc3QsIGVuKQorKyMgIGRlZmluZSByZV9tYXRjaF8yKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgcG9zLCByZWdzLCBzdG9wKSBcCisrCV9fcmVfbWF0Y2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApCisrIyAgZGVmaW5lIHJlX21hdGNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKSBcCisrCV9fcmVfbWF0Y2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKQorKyMgIGRlZmluZSByZV9zZWFyY2goYnVmcCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MpIFwKKysJX19yZV9zZWFyY2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKQorKyMgIGRlZmluZSByZV9jb21waWxlX3BhdHRlcm4ocGF0dGVybiwgbGVuZ3RoLCBidWZwKSBcCisrCV9fcmVfY29tcGlsZV9wYXR0ZXJuIChwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApCisrIyAgZGVmaW5lIHJlX3NldF9zeW50YXgoc3ludGF4KSBfX3JlX3NldF9zeW50YXggKHN5bnRheCkKKysjICBkZWZpbmUgcmVfc2VhcmNoXzIoYnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKSBcCisrCV9fcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0MSwgczEsIHN0MiwgczIsIHN0YXJ0cG9zLCByYW5nZSwgcmVncywgc3RvcCkKKysjICBkZWZpbmUgcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApIF9fcmVfY29tcGlsZV9mYXN0bWFwIChidWZwKQorKworKyMgIGRlZmluZSBidG93YyBfX2J0b3djCisrCisrLyogV2UgYXJlIGFsc28gdXNpbmcgc29tZSBsaWJyYXJ5IGludGVybmFscy4gICovCisrIyAgaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjICBpbmNsdWRlIDxsb2NhbGUvZWxlbS1oYXNoLmg+CisrIyAgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjICBpbmNsdWRlIDxsb2NhbGUvY29sbC1sb29rdXAuaD4KKysjIGVuZGlmCisrCisrLyogVGhpcyBpcyBmb3Igb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMgd2l0aCBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4gICovCisrIyBpZiAoSEFWRV9MSUJJTlRMX0ggJiYgRU5BQkxFX05MUykgfHwgZGVmaW5lZCBfTElCQworKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKysjICBpZmRlZiBfTElCQworKyMgICB1bmRlZiBnZXR0ZXh0CisrIyAgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dCAoImxpYmMiLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyMgZW5kaWYKKysKKysjIGlmbmRlZiBnZXR0ZXh0X25vb3AKKysvKiBUaGlzIGRlZmluZSBpcyBzbyB4Z2V0dGV4dCBjYW4gZmluZCB0aGUgaW50ZXJuYXRpb25hbGl6YWJsZQorKyAgIHN0cmluZ3MuICAqLworKyMgIGRlZmluZSBnZXR0ZXh0X25vb3AoU3RyaW5nKSBTdHJpbmcKKysjIGVuZGlmCisrCisrLyogVGhlIGBlbWFjcycgc3dpdGNoIHR1cm5zIG9uIGNlcnRhaW4gbWF0Y2hpbmcgY29tbWFuZHMKKysgICB0aGF0IG1ha2Ugc2Vuc2Ugb25seSBpbiBFbWFjcy4gKi8KKysjIGlmZGVmIGVtYWNzCisrCisrIyAgaW5jbHVkZSAibGlzcC5oIgorKyMgIGluY2x1ZGUgImJ1ZmZlci5oIgorKyMgIGluY2x1ZGUgInN5bnRheC5oIgorKworKyMgZWxzZSAgLyogbm90IGVtYWNzICovCisrCisrLyogSWYgd2UgYXJlIG5vdCBsaW5raW5nIHdpdGggRW1hY3MgcHJvcGVyLAorKyAgIHdlIGNhbid0IHVzZSB0aGUgcmVsb2NhdGluZyBhbGxvY2F0b3IKKysgICBldmVuIGlmIGNvbmZpZy5oIHNheXMgdGhhdCB3ZSBjYW4uICAqLworKyMgIHVuZGVmIFJFTF9BTExPQworKworKyMgIGlmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8c3RkbGliLmg+CisrIyAgZWxzZQorK2NoYXIgKm1hbGxvYyAoKTsKKytjaGFyICpyZWFsbG9jICgpOworKyMgIGVuZGlmCisrCisrLyogV2hlbiB1c2VkIGluIEVtYWNzJ3MgbGliLXNyYywgd2UgbmVlZCB0byBnZXQgYnplcm8gYW5kIGJjb3B5IHNvbWVob3cuCisrICAgSWYgbm90aGluZyBlbHNlIGhhcyBiZWVuIGRvbmUsIHVzZSB0aGUgbWV0aG9kIGJlbG93LiAgKi8KKysjICBpZmRlZiBJTkhJQklUX1NUUklOR19IRUFERVIKKysjICAgaWYgIShkZWZpbmVkIEhBVkVfQlpFUk8gJiYgZGVmaW5lZCBIQVZFX0JDT1BZKQorKyMgICAgaWYgIWRlZmluZWQgYnplcm8gJiYgIWRlZmluZWQgYmNvcHkKKysjICAgICB1bmRlZiBJTkhJQklUX1NUUklOR19IRUFERVIKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysKKysvKiBUaGlzIGlzIHRoZSBub3JtYWwgd2F5IG9mIG1ha2luZyBzdXJlIHdlIGhhdmUgYSBiY29weSBhbmQgYSBiemVyby4KKysgICBUaGlzIGlzIHVzZWQgaW4gbW9zdCBwcm9ncmFtcy0tYSBmZXcgb3RoZXIgcHJvZ3JhbXMgYXZvaWQgdGhpcworKyAgIGJ5IGRlZmluaW5nIElOSElCSVRfU1RSSU5HX0hFQURFUi4gICovCisrIyAgaWZuZGVmIElOSElCSVRfU1RSSU5HX0hFQURFUgorKyMgICBpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworKyMgICAgaW5jbHVkZSA8c3RyaW5nLmg+CisrIyAgICBpZm5kZWYgYnplcm8KKysjICAgICBpZm5kZWYgX0xJQkMKKysjICAgICAgZGVmaW5lIGJ6ZXJvKHMsIG4pCShtZW1zZXQgKHMsICdcMCcsIG4pLCAocykpCisrIyAgICAgZWxzZQorKyMgICAgICBkZWZpbmUgYnplcm8ocywgbikJX19iemVybyAocywgbikKKysjICAgICBlbmRpZgorKyMgICAgZW5kaWYKKysjICAgZWxzZQorKyMgICAgaW5jbHVkZSA8c3RyaW5ncy5oPgorKyMgICAgaWZuZGVmIG1lbWNtcAorKyMgICAgIGRlZmluZSBtZW1jbXAoczEsIHMyLCBuKQliY21wIChzMSwgczIsIG4pCisrIyAgICBlbmRpZgorKyMgICAgaWZuZGVmIG1lbWNweQorKyMgICAgIGRlZmluZSBtZW1jcHkoZCwgcywgbikJKGJjb3B5IChzLCBkLCBuKSwgKGQpKQorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKworKy8qIERlZmluZSB0aGUgc3ludGF4IHN0dWZmIGZvciBcPCwgXD4sIGV0Yy4gICovCisrCisrLyogVGhpcyBtdXN0IGJlIG5vbnplcm8gZm9yIHRoZSB3b3JkY2hhciBhbmQgbm90d29yZGNoYXIgcGF0dGVybgorKyAgIGNvbW1hbmRzIGluIHJlX21hdGNoXzIuICAqLworKyMgIGlmbmRlZiBTd29yZAorKyMgICBkZWZpbmUgU3dvcmQgMQorKyMgIGVuZGlmCisrCisrIyAgaWZkZWYgU1dJVENIX0VOVU1fQlVHCisrIyAgIGRlZmluZSBTV0lUQ0hfRU5VTV9DQVNUKHgpICgoaW50KSh4KSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBTV0lUQ0hfRU5VTV9DQVNUKHgpICh4KQorKyMgIGVuZGlmCisrCisrIyBlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysKKysjIGlmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9MSU1JVFNfSAorKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorKyMgZW5kaWYKKysKKysjIGlmbmRlZiBNQl9MRU5fTUFYCisrIyAgZGVmaW5lIE1CX0xFTl9NQVggMQorKyMgZW5kaWYKKysMCisrLyogR2V0IHRoZSBpbnRlcmZhY2UsIGluY2x1ZGluZyB0aGUgc3ludGF4IGJpdHMuICAqLworKyMgaW5jbHVkZSAicmVnZXguaCIKKysKKysvKiBpc2FscGhhIGV0Yy4gYXJlIHVzZWQgZm9yIHRoZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gICovCisrIyBpbmNsdWRlIDxjdHlwZS5oPgorKworKy8qIEppbSBNZXllcmluZyB3cml0ZXM6CisrCisrICAgIi4uLiBTb21lIGN0eXBlIG1hY3JvcyBhcmUgdmFsaWQgb25seSBmb3IgY2hhcmFjdGVyIGNvZGVzIHRoYXQKKysgICBpc2FzY2lpIHNheXMgYXJlIEFTQ0lJIChTR0kncyBJUklYLTQuMC41IGlzIG9uZSBzdWNoIHN5c3RlbSAtLXdoZW4KKysgICB1c2luZyAvYmluL2NjIG9yIGdjYyBidXQgd2l0aG91dCBnaXZpbmcgYW4gYW5zaSBvcHRpb24pLiAgU28sIGFsbAorKyAgIGN0eXBlIHVzZXMgc2hvdWxkIGJlIHRocm91Z2ggbWFjcm9zIGxpa2UgSVNQUklOVC4uLiAgSWYKKysgICBTVERDX0hFQURFUlMgaXMgZGVmaW5lZCwgdGhlbiBhdXRvY29uZiBoYXMgdmVyaWZpZWQgdGhhdCB0aGUgY3R5cGUKKysgICBtYWNyb3MgZG9uJ3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggcmVmZXJlbmNlcyB0byBpc2FzY2lpLiAuLi4KKysgICBEZWZpbmluZyBpc2FzY2lpIHRvIDEgc2hvdWxkIGxldCBhbnkgY29tcGlsZXIgd29ydGggaXRzIHNhbHQKKysgICBlbGltaW5hdGUgdGhlICYmIHRocm91Z2ggY29uc3RhbnQgZm9sZGluZy4iCisrICAgU29sYXJpcyBkZWZpbmVzIHNvbWUgb2YgdGhlc2Ugc3ltYm9scyBzbyB3ZSBtdXN0IHVuZGVmaW5lIHRoZW0gZmlyc3QuICAqLworKworKyMgdW5kZWYgSVNBU0NJSQorKyMgaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgKCFkZWZpbmVkIGlzYXNjaWkgJiYgIWRlZmluZWQgSEFWRV9JU0FTQ0lJKQorKyMgIGRlZmluZSBJU0FTQ0lJKGMpIDEKKysjIGVsc2UKKysjICBkZWZpbmUgSVNBU0NJSShjKSBpc2FzY2lpKGMpCisrIyBlbmRpZgorKworKyMgaWZkZWYgaXNibGFuaworKyMgIGRlZmluZSBJU0JMQU5LKGMpIChJU0FTQ0lJIChjKSAmJiBpc2JsYW5rIChjKSkKKysjIGVsc2UKKysjICBkZWZpbmUgSVNCTEFOSyhjKSAoKGMpID09ICcgJyB8fCAoYykgPT0gJ1x0JykKKysjIGVuZGlmCisrIyBpZmRlZiBpc2dyYXBoCisrIyAgZGVmaW5lIElTR1JBUEgoYykgKElTQVNDSUkgKGMpICYmIGlzZ3JhcGggKGMpKQorKyMgZWxzZQorKyMgIGRlZmluZSBJU0dSQVBIKGMpIChJU0FTQ0lJIChjKSAmJiBpc3ByaW50IChjKSAmJiAhaXNzcGFjZSAoYykpCisrIyBlbmRpZgorKworKyMgdW5kZWYgSVNQUklOVAorKyMgZGVmaW5lIElTUFJJTlQoYykgKElTQVNDSUkgKGMpICYmIGlzcHJpbnQgKGMpKQorKyMgZGVmaW5lIElTRElHSVQoYykgKElTQVNDSUkgKGMpICYmIGlzZGlnaXQgKGMpKQorKyMgZGVmaW5lIElTQUxOVU0oYykgKElTQVNDSUkgKGMpICYmIGlzYWxudW0gKGMpKQorKyMgZGVmaW5lIElTQUxQSEEoYykgKElTQVNDSUkgKGMpICYmIGlzYWxwaGEgKGMpKQorKyMgZGVmaW5lIElTQ05UUkwoYykgKElTQVNDSUkgKGMpICYmIGlzY250cmwgKGMpKQorKyMgZGVmaW5lIElTTE9XRVIoYykgKElTQVNDSUkgKGMpICYmIGlzbG93ZXIgKGMpKQorKyMgZGVmaW5lIElTUFVOQ1QoYykgKElTQVNDSUkgKGMpICYmIGlzcHVuY3QgKGMpKQorKyMgZGVmaW5lIElTU1BBQ0UoYykgKElTQVNDSUkgKGMpICYmIGlzc3BhY2UgKGMpKQorKyMgZGVmaW5lIElTVVBQRVIoYykgKElTQVNDSUkgKGMpICYmIGlzdXBwZXIgKGMpKQorKyMgZGVmaW5lIElTWERJR0lUKGMpIChJU0FTQ0lJIChjKSAmJiBpc3hkaWdpdCAoYykpCisrCisrIyBpZmRlZiBfdG9sb3dlcgorKyMgIGRlZmluZSBUT0xPV0VSKGMpIF90b2xvd2VyKGMpCisrIyBlbHNlCisrIyAgZGVmaW5lIFRPTE9XRVIoYykgdG9sb3dlcihjKQorKyMgZW5kaWYKKysKKysjIGlmbmRlZiBOVUxMCisrIyAgZGVmaW5lIE5VTEwgKHZvaWQgKikwCisrIyBlbmRpZgorKworKy8qIFdlIHJlbW92ZSBhbnkgcHJldmlvdXMgZGVmaW5pdGlvbiBvZiBgU0lHTl9FWFRFTkRfQ0hBUicsCisrICAgc2luY2Ugb3VycyAod2UgaG9wZSkgd29ya3MgcHJvcGVybHkgd2l0aCBhbGwgY29tYmluYXRpb25zIG9mCisrICAgbWFjaGluZXMsIGNvbXBpbGVycywgYGNoYXInIGFuZCBgdW5zaWduZWQgY2hhcicgYXJndW1lbnQgdHlwZXMuCisrICAgKFBlciBCb3RobmVyIHN1Z2dlc3RlZCB0aGUgYmFzaWMgYXBwcm9hY2guKSAgKi8KKysjIHVuZGVmIFNJR05fRVhURU5EX0NIQVIKKysjIGlmIF9fU1REQ19fCisrIyAgZGVmaW5lIFNJR05fRVhURU5EX0NIQVIoYykgKChzaWduZWQgY2hhcikgKGMpKQorKyMgZWxzZSAgLyogbm90IF9fU1REQ19fICovCisrLyogQXMgaW4gSGFyYmlzb24gYW5kIFN0ZWVsZS4gICovCisrIyAgZGVmaW5lIFNJR05fRVhURU5EX0NIQVIoYykgKCgoKHVuc2lnbmVkIGNoYXIpIChjKSkgXiAxMjgpIC0gMTI4KQorKyMgZW5kaWYKKysMCisrIyBpZm5kZWYgZW1hY3MKKysvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIGluIHRoZSBjaGFyYWN0ZXIgc2V0LiAgKi8KKysjICBkZWZpbmUgQ0hBUl9TRVRfU0laRSAyNTYKKysKKysjICBpZmRlZiBTWU5UQVhfVEFCTEUKKysKKytleHRlcm4gY2hhciAqcmVfc3ludGF4X3RhYmxlOworKworKyMgIGVsc2UgLyogbm90IFNZTlRBWF9UQUJMRSAqLworKworK3N0YXRpYyBjaGFyIHJlX3N5bnRheF90YWJsZVtDSEFSX1NFVF9TSVpFXTsKKysKKytzdGF0aWMgdm9pZCBpbml0X3N5bnRheF9vbmNlICh2b2lkKTsKKysKKytzdGF0aWMgdm9pZAorK2luaXRfc3ludGF4X29uY2UgKHZvaWQpCisreworKyAgIHJlZ2lzdGVyIGludCBjOworKyAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7CisrCisrICAgaWYgKGRvbmUpCisrICAgICByZXR1cm47CisrICAgYnplcm8gKHJlX3N5bnRheF90YWJsZSwgc2l6ZW9mIHJlX3N5bnRheF90YWJsZSk7CisrCisrICAgZm9yIChjID0gMDsgYyA8IENIQVJfU0VUX1NJWkU7ICsrYykKKysgICAgIGlmIChJU0FMTlVNIChjKSkKKysJcmVfc3ludGF4X3RhYmxlW2NdID0gU3dvcmQ7CisrCisrICAgcmVfc3ludGF4X3RhYmxlWydfJ10gPSBTd29yZDsKKysKKysgICBkb25lID0gMTsKKyt9CisrCisrIyAgZW5kaWYgLyogbm90IFNZTlRBWF9UQUJMRSAqLworKworKyMgIGRlZmluZSBTWU5UQVgoYykgcmVfc3ludGF4X3RhYmxlWyh1bnNpZ25lZCBjaGFyKSAoYyldCisrCisrIyBlbmRpZiAvKiBlbWFjcyAqLworKwwKKysvKiBJbnRlZ2VyIHR5cGUgZm9yIHBvaW50ZXJzLiAgKi8KKysjIGlmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfVUlOVFBUUl9UCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50cHRyX3Q7CisrIyBlbmRpZgorKworKy8qIFNob3VsZCB3ZSB1c2UgbWFsbG9jIG9yIGFsbG9jYT8gIElmIFJFR0VYX01BTExPQyBpcyBub3QgZGVmaW5lZCwgd2UKKysgICB1c2UgYGFsbG9jYScgaW5zdGVhZCBvZiBgbWFsbG9jJy4gIFRoaXMgaXMgYmVjYXVzZSB1c2luZyBtYWxsb2MgaW4KKysgICByZV9zZWFyY2gqIG9yIHJlX21hdGNoKiBjb3VsZCBjYXVzZSBtZW1vcnkgbGVha3Mgd2hlbiBDLWcgaXMgdXNlZCBpbgorKyAgIEVtYWNzOyBhbHNvLCBtYWxsb2MgaXMgc2xvd2VyIGFuZCBjYXVzZXMgc3RvcmFnZSBmcmFnbWVudGF0aW9uLiAgT24KKysgICB0aGUgb3RoZXIgaGFuZCwgbWFsbG9jIGlzIG1vcmUgcG9ydGFibGUsIGFuZCBlYXNpZXIgdG8gZGVidWcuCisrCisrICAgQmVjYXVzZSB3ZSBzb21ldGltZXMgdXNlIGFsbG9jYSwgc29tZSByb3V0aW5lcyBoYXZlIHRvIGJlIG1hY3JvcywKKysgICBub3QgZnVuY3Rpb25zIC0tIGBhbGxvY2EnLWFsbG9jYXRlZCBzcGFjZSBkaXNhcHBlYXJzIGF0IHRoZSBlbmQgb2YgdGhlCisrICAgZnVuY3Rpb24gaXQgaXMgY2FsbGVkIGluLiAgKi8KKysKKysjIGlmZGVmIFJFR0VYX01BTExPQworKworKyMgIGRlZmluZSBSRUdFWF9BTExPQ0FURSBtYWxsb2MKKysjICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURShzb3VyY2UsIG9zaXplLCBuc2l6ZSkgcmVhbGxvYyAoc291cmNlLCBuc2l6ZSkKKysjICBkZWZpbmUgUkVHRVhfRlJFRSBmcmVlCisrCisrIyBlbHNlIC8qIG5vdCBSRUdFWF9NQUxMT0MgICovCisrCisrLyogRW1hY3MgYWxyZWFkeSBkZWZpbmVzIGFsbG9jYSwgc29tZXRpbWVzLiAgKi8KKysjICBpZm5kZWYgYWxsb2NhCisrCisrLyogTWFrZSBhbGxvY2Egd29yayB0aGUgYmVzdCBwb3NzaWJsZSB3YXkuICAqLworKyMgICBpZmRlZiBfX0dOVUNfXworKyMgICAgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisrIyAgIGVsc2UgLyogbm90IF9fR05VQ19fICovCisrIyAgICBpZiBIQVZFX0FMTE9DQV9ICisrIyAgICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgICBlbmRpZiAvKiBIQVZFX0FMTE9DQV9IICovCisrIyAgIGVuZGlmIC8qIG5vdCBfX0dOVUNfXyAqLworKworKyMgIGVuZGlmIC8qIG5vdCBhbGxvY2EgKi8KKysKKysjICBkZWZpbmUgUkVHRVhfQUxMT0NBVEUgYWxsb2NhCisrCisrLyogQXNzdW1lcyBhIGBjaGFyICpkZXN0aW5hdGlvbicgdmFyaWFibGUuICAqLworKyMgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFKHNvdXJjZSwgb3NpemUsIG5zaXplKQkJCVwKKysgIChkZXN0aW5hdGlvbiA9IChjaGFyICopIGFsbG9jYSAobnNpemUpLAkJCQlcCisrICAgbWVtY3B5IChkZXN0aW5hdGlvbiwgc291cmNlLCBvc2l6ZSkpCisrCisrLyogTm8gbmVlZCB0byBkbyBhbnl0aGluZyB0byBmcmVlLCBhZnRlciBhbGxvY2EuICAqLworKyMgIGRlZmluZSBSRUdFWF9GUkVFKGFyZykgKCh2b2lkKTApIC8qIERvIG5vdGhpbmchICBCdXQgaW5oaWJpdCBnY2Mgd2FybmluZy4gICovCisrCisrIyBlbmRpZiAvKiBub3QgUkVHRVhfTUFMTE9DICovCisrCisrLyogRGVmaW5lIGhvdyB0byBhbGxvY2F0ZSB0aGUgZmFpbHVyZSBzdGFjay4gICovCisrCisrIyBpZiBkZWZpbmVkIFJFTF9BTExPQyAmJiBkZWZpbmVkIFJFR0VYX01BTExPQworKworKyMgIGRlZmluZSBSRUdFWF9BTExPQ0FURV9TVEFDSyhzaXplKQkJCQlcCisrICByX2FsbG9jICgmZmFpbHVyZV9zdGFja19wdHIsIChzaXplKSkKKysjICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyhzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCVwKKysgIHJfcmVfYWxsb2MgKCZmYWlsdXJlX3N0YWNrX3B0ciwgKG5zaXplKSkKKysjICBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyhwdHIpCQkJCQlcCisrICByX2FsbG9jX2ZyZWUgKCZmYWlsdXJlX3N0YWNrX3B0cikKKysKKysjIGVsc2UgLyogbm90IHVzaW5nIHJlbG9jYXRpbmcgYWxsb2NhdG9yICovCisrCisrIyAgaWZkZWYgUkVHRVhfTUFMTE9DCisrCisrIyAgIGRlZmluZSBSRUdFWF9BTExPQ0FURV9TVEFDSyBtYWxsb2MKKysjICAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0soc291cmNlLCBvc2l6ZSwgbnNpemUpIHJlYWxsb2MgKHNvdXJjZSwgbnNpemUpCisrIyAgIGRlZmluZSBSRUdFWF9GUkVFX1NUQUNLIGZyZWUKKysKKysjICBlbHNlIC8qIG5vdCBSRUdFWF9NQUxMT0MgKi8KKysKKysjICAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFX1NUQUNLIGFsbG9jYQorKworKyMgICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyhzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCQlcCisrICAgUkVHRVhfUkVBTExPQ0FURSAoc291cmNlLCBvc2l6ZSwgbnNpemUpCisrLyogTm8gbmVlZCB0byBleHBsaWNpdGx5IGZyZWUgYW55dGhpbmcuICAqLworKyMgICBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyhhcmcpCisrCisrIyAgZW5kaWYgLyogbm90IFJFR0VYX01BTExPQyAqLworKyMgZW5kaWYgLyogbm90IHVzaW5nIHJlbG9jYXRpbmcgYWxsb2NhdG9yICovCisrCisrCisrLyogVHJ1ZSBpZiBgc2l6ZTEnIGlzIG5vbi1OVUxMIGFuZCBQVFIgaXMgcG9pbnRpbmcgYW55d2hlcmUgaW5zaWRlCisrICAgYHN0cmluZzEnIG9yIGp1c3QgcGFzdCBpdHMgZW5kLiAgVGhpcyB3b3JrcyBpZiBQVFIgaXMgTlVMTCwgd2hpY2ggaXMKKysgICBhIGdvb2QgdGhpbmcuICAqLworKyMgZGVmaW5lIEZJUlNUX1NUUklOR19QKHB0cikgCQkJCQlcCisrICAoc2l6ZTEgJiYgc3RyaW5nMSA8PSAocHRyKSAmJiAocHRyKSA8PSBzdHJpbmcxICsgc2l6ZTEpCisrCisrLyogKFJlKUFsbG9jYXRlIE4gaXRlbXMgb2YgdHlwZSBUIHVzaW5nIG1hbGxvYywgb3IgZmFpbC4gICovCisrIyBkZWZpbmUgVEFMTE9DKG4sIHQpICgodCAqKSBtYWxsb2MgKChuKSAqIHNpemVvZiAodCkpKQorKyMgZGVmaW5lIFJFVEFMTE9DKGFkZHIsIG4sIHQpICgoYWRkcikgPSAodCAqKSByZWFsbG9jIChhZGRyLCAobikgKiBzaXplb2YgKHQpKSkKKysjIGRlZmluZSBSRVRBTExPQ19JRihhZGRyLCBuLCB0KSBcCisrICBpZiAoYWRkcikgUkVUQUxMT0MoKGFkZHIpLCAobiksIHQpOyBlbHNlIChhZGRyKSA9IFRBTExPQyAoKG4pLCB0KQorKyMgZGVmaW5lIFJFR0VYX1RBTExPQyhuLCB0KSAoKHQgKikgUkVHRVhfQUxMT0NBVEUgKChuKSAqIHNpemVvZiAodCkpKQorKworKyMgZGVmaW5lIEJZVEVXSURUSCA4IC8qIEluIGJpdHMuICAqLworKworKyMgZGVmaW5lIFNUUkVRKHMxLCBzMikgKChzdHJjbXAgKHMxLCBzMikgPT0gMCkpCisrCisrIyB1bmRlZiBNQVgKKysjIHVuZGVmIE1JTgorKyMgZGVmaW5lIE1BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQorKyMgZGVmaW5lIE1JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorKworK3R5cGVkZWYgY2hhciBib29sZWFuOworKyMgZGVmaW5lIGZhbHNlIDAKKysjIGRlZmluZSB0cnVlIDEKKysKKytzdGF0aWMgcmVnX2VycmNvZGVfdCBieXRlX3JlZ2V4X2NvbXBpbGUgKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrCisrc3RhdGljIGludCBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdG9wKTsKKytzdGF0aWMgaW50IGJ5dGVfcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApOworK3N0YXRpYyBpbnQgYnl0ZV9yZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIHJlZ19lcnJjb2RlX3Qgd2NzX3JlZ2V4X2NvbXBpbGUgKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKworKworK3N0YXRpYyBpbnQgd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMSwgaW50IGNzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMiwgaW50IGNzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0b3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1ic19vZmZzZXQxLCBpbnQgKm1ic19vZmZzZXQyKTsKKytzdGF0aWMgaW50IHdjc19yZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKTsKKytzdGF0aWMgaW50IHdjc19yZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrI2VuZGlmCisrDAorKy8qIFRoZXNlIGFyZSB0aGUgY29tbWFuZCBjb2RlcyB0aGF0IGFwcGVhciBpbiBjb21waWxlZCByZWd1bGFyCisrICAgZXhwcmVzc2lvbnMuICBTb21lIG9wY29kZXMgYXJlIGZvbGxvd2VkIGJ5IGFyZ3VtZW50IGJ5dGVzLiAgQQorKyAgIGNvbW1hbmQgY29kZSBjYW4gc3BlY2lmeSBhbnkgaW50ZXJwcmV0YXRpb24gd2hhdHNvZXZlciBmb3IgaXRzCisrICAgYXJndW1lbnRzLiAgWmVybyBieXRlcyBtYXkgYXBwZWFyIGluIHRoZSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24uICAqLworKworK3R5cGVkZWYgZW51bQorK3sKKysgIG5vX29wID0gMCwKKysKKysgIC8qIFN1Y2NlZWQgcmlnaHQgYXdheS0tbm8gbW9yZSBiYWNrdHJhY2tpbmcuICAqLworKyAgc3VjY2VlZCwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IG9uZSBieXRlIGdpdmluZyBuLCB0aGVuIGJ5IG4gbGl0ZXJhbCBieXRlcy4gICovCisrICBleGFjdG4sCisrCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKwkvKiBTYW1lIGFzIGV4YWN0biwgYnV0IGNvbnRhaW5zIGJpbmFyeSBkYXRhLiAgKi8KKysgIGV4YWN0bl9iaW4sCisrIyBlbmRpZgorKworKyAgICAgICAgLyogTWF0Y2hlcyBhbnkgKG1vcmUgb3IgbGVzcykgY2hhcmFjdGVyLiAgKi8KKysgIGFueWNoYXIsCisrCisrICAgICAgICAvKiBNYXRjaGVzIGFueSBvbmUgY2hhciBiZWxvbmdpbmcgdG8gc3BlY2lmaWVkIHNldC4gIEZpcnN0CisrICAgICAgICAgICBmb2xsb3dpbmcgYnl0ZSBpcyBudW1iZXIgb2YgYml0bWFwIGJ5dGVzLiAgVGhlbiBjb21lIGJ5dGVzCisrICAgICAgICAgICBmb3IgYSBiaXRtYXAgc2F5aW5nIHdoaWNoIGNoYXJzIGFyZSBpbi4gIEJpdHMgaW4gZWFjaCBieXRlCisrICAgICAgICAgICBhcmUgb3JkZXJlZCBsb3ctYml0LWZpcnN0LiAgQSBjaGFyYWN0ZXIgaXMgaW4gdGhlIHNldCBpZiBpdHMKKysgICAgICAgICAgIGJpdCBpcyAxLiAgQSBjaGFyYWN0ZXIgdG9vIGxhcmdlIHRvIGhhdmUgYSBiaXQgaW4gdGhlIG1hcCBpcworKyAgICAgICAgICAgYXV0b21hdGljYWxseSBub3QgaW4gdGhlIHNldC4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgZm9sbG93aW5nIGVsZW1lbnQgaXMgbGVuZ3RoIG9mIGNoYXJhY3RlcgorKwkgICBjbGFzc2VzLCBsZW5ndGggb2YgY29sbGF0aW5nIHN5bWJvbHMsIGxlbmd0aCBvZiBlcXVpdmFsZW5jZQorKwkgICBjbGFzc2VzLCBsZW5ndGggb2YgY2hhcmFjdGVyIHJhbmdlcywgYW5kIGxlbmd0aCBvZiBjaGFyYWN0ZXJzLgorKwkgICBOZXh0LCBjaGFyYWN0ZXIgY2xhc3MgZWxlbWVudCwgY29sbGF0aW5nIHN5bWJvbHMgZWxlbWVudHMsCisrCSAgIGVxdWl2YWxlbmNlIGNsYXNzIGVsZW1lbnRzLCByYW5nZSBlbGVtZW50cywgYW5kIGNoYXJhY3RlcgorKwkgICBlbGVtZW50cyBmb2xsb3cuCisrCSAgIFNlZSByZWdleF9jb21waWxlIGZ1bmN0aW9uLiAgKi8KKysgIGNoYXJzZXQsCisrCisrICAgICAgICAvKiBTYW1lIHBhcmFtZXRlcnMgYXMgY2hhcnNldCwgYnV0IG1hdGNoIGFueSBjaGFyYWN0ZXIgdGhhdCBpcworKyAgICAgICAgICAgbm90IG9uZSBvZiB0aG9zZSBzcGVjaWZpZWQuICAqLworKyAgY2hhcnNldF9ub3QsCisrCisrICAgICAgICAvKiBTdGFydCByZW1lbWJlcmluZyB0aGUgdGV4dCB0aGF0IGlzIG1hdGNoZWQsIGZvciBzdG9yaW5nIGluIGEKKysgICAgICAgICAgIHJlZ2lzdGVyLiAgRm9sbG93ZWQgYnkgb25lIGJ5dGUgd2l0aCB0aGUgcmVnaXN0ZXIgbnVtYmVyLCBpbgorKyAgICAgICAgICAgdGhlIHJhbmdlIDAgdG8gb25lIGxlc3MgdGhhbiB0aGUgcGF0dGVybiBidWZmZXIncyByZV9uc3ViCisrICAgICAgICAgICBmaWVsZC4gIFRoZW4gZm9sbG93ZWQgYnkgb25lIGJ5dGUgd2l0aCB0aGUgbnVtYmVyIG9mIGdyb3VwcworKyAgICAgICAgICAgaW5uZXIgdG8gdGhpcyBvbmUuICAoVGhpcyBsYXN0IGhhcyB0byBiZSBwYXJ0IG9mIHRoZQorKyAgICAgICAgICAgc3RhcnRfbWVtb3J5IG9ubHkgYmVjYXVzZSB3ZSBuZWVkIGl0IGluIHRoZSBvbl9mYWlsdXJlX2p1bXAKKysgICAgICAgICAgIG9mIHJlX21hdGNoXzIuKSAgKi8KKysgIHN0YXJ0X21lbW9yeSwKKysKKysgICAgICAgIC8qIFN0b3AgcmVtZW1iZXJpbmcgdGhlIHRleHQgdGhhdCBpcyBtYXRjaGVkIGFuZCBzdG9yZSBpdCBpbiBhCisrICAgICAgICAgICBtZW1vcnkgcmVnaXN0ZXIuICBGb2xsb3dlZCBieSBvbmUgYnl0ZSB3aXRoIHRoZSByZWdpc3RlcgorKyAgICAgICAgICAgbnVtYmVyLCBpbiB0aGUgcmFuZ2UgMCB0byBvbmUgbGVzcyB0aGFuIGByZV9uc3ViJyBpbiB0aGUKKysgICAgICAgICAgIHBhdHRlcm4gYnVmZmVyLCBhbmQgb25lIGJ5dGUgd2l0aCB0aGUgbnVtYmVyIG9mIGlubmVyIGdyb3VwcywKKysgICAgICAgICAgIGp1c3QgbGlrZSBgc3RhcnRfbWVtb3J5Jy4gIChXZSBuZWVkIHRoZSBudW1iZXIgb2YgaW5uZXIKKysgICAgICAgICAgIGdyb3VwcyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWFzeSB3YXkgb2YgZmluZGluZyB0aGUKKysgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgc3RhcnRfbWVtb3J5IHdoZW4gd2UncmUgYXQgYSBzdG9wX21lbW9yeS4pICAqLworKyAgc3RvcF9tZW1vcnksCisrCisrICAgICAgICAvKiBNYXRjaCBhIGR1cGxpY2F0ZSBvZiBzb21ldGhpbmcgcmVtZW1iZXJlZC4gRm9sbG93ZWQgYnkgb25lCisrICAgICAgICAgICBieXRlIGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVyIG51bWJlci4gICovCisrICBkdXBsaWNhdGUsCisrCisrICAgICAgICAvKiBGYWlsIHVubGVzcyBhdCBiZWdpbm5pbmcgb2YgbGluZS4gICovCisrICBiZWdsaW5lLAorKworKyAgICAgICAgLyogRmFpbCB1bmxlc3MgYXQgZW5kIG9mIGxpbmUuICAqLworKyAgZW5kbGluZSwKKysKKysgICAgICAgIC8qIFN1Y2NlZWRzIGlmIGF0IGJlZ2lubmluZyBvZiBidWZmZXIgKGlmIGVtYWNzKSBvciBhdCBiZWdpbm5pbmcKKysgICAgICAgICAgIG9mIHN0cmluZyB0byBiZSBtYXRjaGVkIChpZiBub3QpLiAgKi8KKysgIGJlZ2J1ZiwKKysKKysgICAgICAgIC8qIEFuYWxvZ291c2x5LCBmb3IgZW5kIG9mIGJ1ZmZlci9zdHJpbmcuICAqLworKyAgZW5kYnVmLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvIGJ5dGUgcmVsYXRpdmUgYWRkcmVzcyB0byB3aGljaCB0byBqdW1wLiAgKi8KKysgIGp1bXAsCisrCisrCS8qIFNhbWUgYXMganVtcCwgYnV0IG1hcmtzIHRoZSBlbmQgb2YgYW4gYWx0ZXJuYXRpdmUuICAqLworKyAganVtcF9wYXN0X2FsdCwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3Mgb2YgcGxhY2UgdG8gcmVzdW1lIGF0CisrICAgICAgICAgICBpbiBjYXNlIG9mIGZhaWx1cmUuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBvbl9mYWlsdXJlX2p1bXAsCisrCisrICAgICAgICAvKiBMaWtlIG9uX2ZhaWx1cmVfanVtcCwgYnV0IHB1c2hlcyBhIHBsYWNlaG9sZGVyIGluc3RlYWQgb2YgdGhlCisrICAgICAgICAgICBjdXJyZW50IHN0cmluZyBwb3NpdGlvbiB3aGVuIGV4ZWN1dGVkLiAgKi8KKysgIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCwKKysKKysgICAgICAgIC8qIFRocm93IGF3YXkgbGF0ZXN0IGZhaWx1cmUgcG9pbnQgYW5kIHRoZW4ganVtcCB0byBmb2xsb3dpbmcKKysgICAgICAgICAgIHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBwb3BfZmFpbHVyZV9qdW1wLAorKworKyAgICAgICAgLyogQ2hhbmdlIHRvIHBvcF9mYWlsdXJlX2p1bXAgaWYga25vdyB3b24ndCBoYXZlIHRvIGJhY2t0cmFjayB0bworKyAgICAgICAgICAgbWF0Y2g7IG90aGVyd2lzZSBjaGFuZ2UgdG8ganVtcC4gIFRoaXMgaXMgdXNlZCB0byBqdW1wCisrICAgICAgICAgICBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSByZXBlYXQuICBJZiB3aGF0IGZvbGxvd3MgdGhpcyBqdW1wCisrICAgICAgICAgICBjbGVhcmx5IHdvbid0IG1hdGNoIHdoYXQgdGhlIHJlcGVhdCBkb2VzLCBzdWNoIHRoYXQgd2UgY2FuIGJlCisrICAgICAgICAgICBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gdXNlIGJhY2t0cmFja2luZyBvdXQgb2YgcmVwZXRpdGlvbnMKKysgICAgICAgICAgIGFscmVhZHkgbWF0Y2hlZCwgdGhlbiB3ZSBjaGFuZ2UgaXQgdG8gYSBwb3BfZmFpbHVyZV9qdW1wLgorKyAgICAgICAgICAgRm9sbG93ZWQgYnkgdHdvLWJ5dGUgYWRkcmVzcy4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIG1heWJlX3BvcF9qdW1wLAorKworKyAgICAgICAgLyogSnVtcCB0byBmb2xsb3dpbmcgdHdvLWJ5dGUgYWRkcmVzcywgYW5kIHB1c2ggYSBkdW1teSBmYWlsdXJlCisrICAgICAgICAgICBwb2ludC4gVGhpcyBmYWlsdXJlIHBvaW50IHdpbGwgYmUgdGhyb3duIGF3YXkgaWYgYW4gYXR0ZW1wdAorKyAgICAgICAgICAgaXMgbWFkZSB0byB1c2UgaXQgZm9yIGEgZmFpbHVyZS4gIEEgYCsnIGNvbnN0cnVjdCBtYWtlcyB0aGlzCisrICAgICAgICAgICBiZWZvcmUgdGhlIGZpcnN0IHJlcGVhdC4gIEFsc28gdXNlZCBhcyBhbiBpbnRlcm1lZGlhcnkga2luZAorKyAgICAgICAgICAgb2YganVtcCB3aGVuIGNvbXBpbGluZyBhbiBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIGR1bW15X2ZhaWx1cmVfanVtcCwKKysKKysJLyogUHVzaCBhIGR1bW15IGZhaWx1cmUgcG9pbnQgYW5kIGNvbnRpbnVlLiAgVXNlZCBhdCB0aGUgZW5kIG9mCisrCSAgIGFsdGVybmF0aXZlcy4gICovCisrICBwdXNoX2R1bW15X2ZhaWx1cmUsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIGFuZCB0d28tYnl0ZSBudW1iZXIgbi4KKysgICAgICAgICAgIEFmdGVyIG1hdGNoaW5nIE4gdGltZXMsIGp1bXAgdG8gdGhlIGFkZHJlc3MgdXBvbiBmYWlsdXJlLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgc3VjY2VlZF9uLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcywgYW5kIHR3by1ieXRlIG51bWJlciBuLgorKyAgICAgICAgICAgSnVtcCB0byB0aGUgYWRkcmVzcyBOIHRpbWVzLCB0aGVuIGZhaWwuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBqdW1wX24sCisrCisrICAgICAgICAvKiBTZXQgdGhlIGZvbGxvd2luZyB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIHRvIHRoZQorKyAgICAgICAgICAgc3Vic2VxdWVudCB0d28tYnl0ZSBudW1iZXIuICBUaGUgYWRkcmVzcyAqaW5jbHVkZXMqIHRoZSB0d28KKysgICAgICAgICAgIGJ5dGVzIG9mIG51bWJlci4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIHNldF9udW1iZXJfYXQsCisrCisrICB3b3JkY2hhciwJLyogTWF0Y2hlcyBhbnkgd29yZC1jb25zdGl0dWVudCBjaGFyYWN0ZXIuICAqLworKyAgbm90d29yZGNoYXIsCS8qIE1hdGNoZXMgYW55IGNoYXIgdGhhdCBpcyBub3QgYSB3b3JkLWNvbnN0aXR1ZW50LiAgKi8KKysKKysgIHdvcmRiZWcsCS8qIFN1Y2NlZWRzIGlmIGF0IHdvcmQgYmVnaW5uaW5nLiAgKi8KKysgIHdvcmRlbmQsCS8qIFN1Y2NlZWRzIGlmIGF0IHdvcmQgZW5kLiAgKi8KKysKKysgIHdvcmRib3VuZCwJLyogU3VjY2VlZHMgaWYgYXQgYSB3b3JkIGJvdW5kYXJ5LiAgKi8KKysgIG5vdHdvcmRib3VuZAkvKiBTdWNjZWVkcyBpZiBub3QgYXQgYSB3b3JkIGJvdW5kYXJ5LiAgKi8KKysKKysjIGlmZGVmIGVtYWNzCisrICAsYmVmb3JlX2RvdCwJLyogU3VjY2VlZHMgaWYgYmVmb3JlIHBvaW50LiAgKi8KKysgIGF0X2RvdCwJLyogU3VjY2VlZHMgaWYgYXQgcG9pbnQuICAqLworKyAgYWZ0ZXJfZG90LAkvKiBTdWNjZWVkcyBpZiBhZnRlciBwb2ludC4gICovCisrCisrCS8qIE1hdGNoZXMgYW55IGNoYXJhY3RlciB3aG9zZSBzeW50YXggaXMgc3BlY2lmaWVkLiAgRm9sbG93ZWQgYnkKKysgICAgICAgICAgIGEgYnl0ZSB3aGljaCBjb250YWlucyBhIHN5bnRheCBjb2RlLCBlLmcuLCBTd29yZC4gICovCisrICBzeW50YXhzcGVjLAorKworKwkvKiBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgd2hvc2Ugc3ludGF4IGlzIG5vdCB0aGF0IHNwZWNpZmllZC4gICovCisrICBub3RzeW50YXhzcGVjCisrIyBlbmRpZiAvKiBlbWFjcyAqLworK30gcmVfb3Bjb2RlX3Q7CisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrDAorKworKyNpZmRlZiBCWVRFCisrIyBkZWZpbmUgQ0hBUl9UIGNoYXIKKysjIGRlZmluZSBVQ0hBUl9UIHVuc2lnbmVkIGNoYXIKKysjIGRlZmluZSBDT01QSUxFRF9CVUZGRVJfVkFSIGJ1ZnAtPmJ1ZmZlcgorKyMgZGVmaW5lIE9GRlNFVF9BRERSRVNTX1NJWkUgMgorKyMgZGVmaW5lIFBSRUZJWChuYW1lKSBieXRlXyMjbmFtZQorKyMgZGVmaW5lIEFSR19QUkVGSVgobmFtZSkgbmFtZQorKyMgZGVmaW5lIFBVVF9DSEFSKGMpIHB1dGNoYXIgKGMpCisrIyBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0Lmg+CisrIyBkZWZpbmUgRklORElEWCBmaW5kaWR4CisrI2Vsc2UKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIENIQVJfVCB3Y2hhcl90CisrIyAgZGVmaW5lIFVDSEFSX1Qgd2NoYXJfdAorKyMgIGRlZmluZSBDT01QSUxFRF9CVUZGRVJfVkFSIHdjX2J1ZmZlcgorKyMgIGRlZmluZSBPRkZTRVRfQUREUkVTU19TSVpFIDEgLyogdGhlIHNpemUgd2hpY2ggU1RPUkVfTlVNQkVSIG1hY3JvIHVzZSAqLworKyMgIGRlZmluZSBDSEFSX0NMQVNTX1NJWkUgKChfX2FsaWdub2ZfXyh3Y3R5cGVfdCkrc2l6ZW9mKHdjdHlwZV90KSkvc2l6ZW9mKENIQVJfVCkrMSkKKysjICBkZWZpbmUgUFJFRklYKG5hbWUpIHdjc18jI25hbWUKKysjICBkZWZpbmUgQVJHX1BSRUZJWChuYW1lKSBjIyNuYW1lCisrLyogU2hvdWxkIHdlIHVzZSB3aWRlIHN0cmVhbT8/ICAqLworKyMgIGRlZmluZSBQVVRfQ0hBUihjKSBwcmludGYgKCIlQyIsIGMpOworKyMgIGRlZmluZSBUUlVFIDEKKysjICBkZWZpbmUgRkFMU0UgMAorKyMgIGRlZmluZSBmaW5kaWR4IGZpbmRpZHh3YworKyMgIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHR3Yy5oPgorKyMgIHVuZGVmIGZpbmRpZHgKKysjICBkZWZpbmUgRklORElEWCBmaW5kaWR4d2MKKysjIGVsc2UKKysjICBpZmRlZiBNQlNfU1VQUE9SVAorKyMgICBkZWZpbmUgV0NIQVIKKysjICAgZGVmaW5lIElOU0lERV9SRUNVUlNJT04KKysjICAgaW5jbHVkZSAieHJlZ2V4LmMiCisrIyAgIHVuZGVmIElOU0lERV9SRUNVUlNJT04KKysjICBlbmRpZgorKyMgIGRlZmluZSBCWVRFCisrIyAgZGVmaW5lIElOU0lERV9SRUNVUlNJT04KKysjICBpbmNsdWRlICJ4cmVnZXguYyIKKysjICB1bmRlZiBJTlNJREVfUkVDVVJTSU9OCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrLyogQ29tbW9uIG9wZXJhdGlvbnMgb24gdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKworKy8qIFN0b3JlIE5VTUJFUiBpbiB0d28gY29udGlndW91cyBieXRlcyBzdGFydGluZyBhdCBERVNUSU5BVElPTi4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHN0b3JlIE5VTUJFUiBpbiAxIGVsZW1lbnQuICAqLworKworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgU1RPUkVfTlVNQkVSKGRlc3RpbmF0aW9uLCBudW1iZXIpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgICooZGVzdGluYXRpb24pID0gKFVDSEFSX1QpKG51bWJlcik7CQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgU1RPUkVfTlVNQkVSKGRlc3RpbmF0aW9uLCBudW1iZXIpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIChkZXN0aW5hdGlvbilbMF0gPSAobnVtYmVyKSAmIDAzNzc7CQkJCQlcCisrICAgIChkZXN0aW5hdGlvbilbMV0gPSAobnVtYmVyKSA+PiA4OwkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrLyogU2FtZSBhcyBTVE9SRV9OVU1CRVIsIGV4Y2VwdCBpbmNyZW1lbnQgREVTVElOQVRJT04gdG8KKysgICB0aGUgYnl0ZSBhZnRlciB3aGVyZSB0aGUgbnVtYmVyIGlzIHN0b3JlZC4gIFRoZXJlZm9yZSwgREVTVElOQVRJT04KKysgICBtdXN0IGJlIGFuIGx2YWx1ZS4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHN0b3JlIE5VTUJFUiBpbiAxIGVsZW1lbnQuICAqLworKworKyMgZGVmaW5lIFNUT1JFX05VTUJFUl9BTkRfSU5DUihkZXN0aW5hdGlvbiwgbnVtYmVyKQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFNUT1JFX05VTUJFUiAoZGVzdGluYXRpb24sIG51bWJlcik7CQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysvKiBQdXQgaW50byBERVNUSU5BVElPTiBhIG51bWJlciBzdG9yZWQgaW4gdHdvIGNvbnRpZ3VvdXMgYnl0ZXMgc3RhcnRpbmcKKysgICBhdCBTT1VSQ0UuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSBzdG9yZSBOVU1CRVIgaW4gMSBlbGVtZW50LiAgKi8KKysKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSKGRlc3RpbmF0aW9uLCBzb3VyY2UpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgPSAqKHNvdXJjZSk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBFWFRSQUNUX05VTUJFUihkZXN0aW5hdGlvbiwgc291cmNlKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pID0gKihzb3VyY2UpICYgMDM3NzsJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSArPSBTSUdOX0VYVEVORF9DSEFSICgqKChzb3VyY2UpICsgMSkpIDw8IDg7CQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYKKysKKysjIGlmZGVmIERFQlVHCisrc3RhdGljIHZvaWQgUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoaW50ICpkZXN0LCBVQ0hBUl9UICpzb3VyY2UpOworK3N0YXRpYyB2b2lkCisrUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoaW50ICpkZXN0LCBVQ0hBUl9UICpzb3VyY2UpCisreworKyMgIGlmZGVmIFdDSEFSCisrICAqZGVzdCA9ICpzb3VyY2U7CisrIyAgZWxzZSAvKiBCWVRFICovCisrICBpbnQgdGVtcCA9IFNJR05fRVhURU5EX0NIQVIgKCooc291cmNlICsgMSkpOworKyAgKmRlc3QgPSAqc291cmNlICYgMDM3NzsKKysgICpkZXN0ICs9IHRlbXAgPDwgODsKKysjICBlbmRpZgorK30KKysKKysjICBpZm5kZWYgRVhUUkFDVF9NQUNST1MgLyogVG8gZGVidWcgdGhlIG1hY3Jvcy4gICovCisrIyAgIHVuZGVmIEVYVFJBQ1RfTlVNQkVSCisrIyAgIGRlZmluZSBFWFRSQUNUX05VTUJFUihkZXN0LCBzcmMpIFBSRUZJWChleHRyYWN0X251bWJlcikgKCZkZXN0LCBzcmMpCisrIyAgZW5kaWYgLyogbm90IEVYVFJBQ1RfTUFDUk9TICovCisrCisrIyBlbmRpZiAvKiBERUJVRyAqLworKworKy8qIFNhbWUgYXMgRVhUUkFDVF9OVU1CRVIsIGV4Y2VwdCBpbmNyZW1lbnQgU09VUkNFIHRvIGFmdGVyIHRoZSBudW1iZXIuCisrICAgU09VUkNFIG11c3QgYmUgYW4gbHZhbHVlLiAgKi8KKysKKysjIGRlZmluZSBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUihkZXN0aW5hdGlvbiwgc291cmNlKQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEVYVFJBQ1RfTlVNQkVSIChkZXN0aW5hdGlvbiwgc291cmNlKTsJCQkJXAorKyAgICAoc291cmNlKSArPSBPRkZTRVRfQUREUkVTU19TSVpFOyAJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyBpZmRlZiBERUJVRworK3N0YXRpYyB2b2lkIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKGludCAqZGVzdGluYXRpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqKnNvdXJjZSk7Cisrc3RhdGljIHZvaWQKKytQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpIChpbnQgKmRlc3RpbmF0aW9uLCBVQ0hBUl9UICoqc291cmNlKQorK3sKKysgIFBSRUZJWChleHRyYWN0X251bWJlcikgKGRlc3RpbmF0aW9uLCAqc291cmNlKTsKKysgICpzb3VyY2UgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKyt9CisrCisrIyAgaWZuZGVmIEVYVFJBQ1RfTUFDUk9TCisrIyAgIHVuZGVmIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSCisrIyAgIGRlZmluZSBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUihkZXN0LCBzcmMpIFwKKysgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZkZXN0LCAmc3JjKQorKyMgIGVuZGlmIC8qIG5vdCBFWFRSQUNUX01BQ1JPUyAqLworKworKyMgZW5kaWYgLyogREVCVUcgKi8KKysKKysMCisrCisrLyogSWYgREVCVUcgaXMgZGVmaW5lZCwgUmVnZXggcHJpbnRzIG1hbnkgdm9sdW1pbm91cyBtZXNzYWdlcyBhYm91dCB3aGF0CisrICAgaXQgaXMgZG9pbmcgKGlmIHRoZSB2YXJpYWJsZSBgZGVidWcnIGlzIG5vbnplcm8pLiAgSWYgbGlua2VkIHdpdGggdGhlCisrICAgbWFpbiBwcm9ncmFtIGluIGBpcmVnZXguYycsIHlvdSBjYW4gZW50ZXIgcGF0dGVybnMgYW5kIHN0cmluZ3MKKysgICBpbnRlcmFjdGl2ZWx5LiAgQW5kIGlmIGxpbmtlZCB3aXRoIHRoZSBtYWluIHByb2dyYW0gaW4gYG1haW4uYycgYW5kCisrICAgdGhlIG90aGVyIHRlc3QgZmlsZXMsIHlvdSBjYW4gcnVuIHRoZSBhbHJlYWR5LXdyaXR0ZW4gdGVzdHMuICAqLworKworKyMgaWZkZWYgREVCVUcKKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrCisrLyogV2UgdXNlIHN0YW5kYXJkIEkvTyBmb3IgZGVidWdnaW5nLiAgKi8KKysjICAgaW5jbHVkZSA8c3RkaW8uaD4KKysKKysvKiBJdCBpcyB1c2VmdWwgdG8gdGVzdCB0aGluZ3MgdGhhdCBgYG11c3QnJyBiZSB0cnVlIHdoZW4gZGVidWdnaW5nLiAgKi8KKysjICAgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrCisrc3RhdGljIGludCBkZWJ1ZzsKKysKKysjICAgZGVmaW5lIERFQlVHX1NUQVRFTUVOVChlKSBlCisrIyAgIGRlZmluZSBERUJVR19QUklOVDEoeCkgaWYgKGRlYnVnKSBwcmludGYgKHgpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDIoeDEsIHgyKSBpZiAoZGVidWcpIHByaW50ZiAoeDEsIHgyKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQzKHgxLCB4MiwgeDMpIGlmIChkZWJ1ZykgcHJpbnRmICh4MSwgeDIsIHgzKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQ0KHgxLCB4MiwgeDMsIHg0KSBpZiAoZGVidWcpIHByaW50ZiAoeDEsIHgyLCB4MywgeDQpCisrIyAgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKyMgIGRlZmluZSBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOKHAsIHMsIGUpIAkJCVwKKysgIGlmIChkZWJ1ZykgUFJFRklYKHByaW50X3BhcnRpYWxfY29tcGlsZWRfcGF0dGVybikgKHMsIGUpCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcodywgczEsIHN6MSwgczIsIHN6MikJCVwKKysgIGlmIChkZWJ1ZykgUFJFRklYKHByaW50X2RvdWJsZV9zdHJpbmcpICh3LCBzMSwgc3oxLCBzMiwgc3oyKQorKworKworKy8qIFByaW50IHRoZSBmYXN0bWFwIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uICAqLworKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKyt2b2lkCisrcHJpbnRfZmFzdG1hcCAoY2hhciAqZmFzdG1hcCkKKyt7CisrICB1bnNpZ25lZCB3YXNfYV9yYW5nZSA9IDA7CisrICB1bnNpZ25lZCBpID0gMDsKKysKKysgIHdoaWxlIChpIDwgKDEgPDwgQllURVdJRFRIKSkKKysgICAgeworKyAgICAgIGlmIChmYXN0bWFwW2krK10pCisrCXsKKysJICB3YXNfYV9yYW5nZSA9IDA7CisrICAgICAgICAgIHB1dGNoYXIgKGkgLSAxKTsKKysgICAgICAgICAgd2hpbGUgKGkgPCAoMSA8PCBCWVRFV0lEVEgpICAmJiAgZmFzdG1hcFtpXSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICB3YXNfYV9yYW5nZSA9IDE7CisrICAgICAgICAgICAgICBpKys7CisrICAgICAgICAgICAgfQorKwkgIGlmICh3YXNfYV9yYW5nZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBwcmludGYgKCItIik7CisrICAgICAgICAgICAgICBwdXRjaGFyIChpIC0gMSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrICBwdXRjaGFyICgnXG4nKTsKKyt9CisrIyAgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKworKy8qIFByaW50IGEgY29tcGlsZWQgcGF0dGVybiBzdHJpbmcgaW4gaHVtYW4tcmVhZGFibGUgZm9ybSwgc3RhcnRpbmcgYXQKKysgICB0aGUgU1RBUlQgcG9pbnRlciBpbnRvIGl0IGFuZCBlbmRpbmcganVzdCBiZWZvcmUgdGhlIHBvaW50ZXIgRU5ELiAgKi8KKysKKyt2b2lkCisrUFJFRklYKHByaW50X3BhcnRpYWxfY29tcGlsZWRfcGF0dGVybikgKFVDSEFSX1QgKnN0YXJ0LCBVQ0hBUl9UICplbmQpCisreworKyAgaW50IG1jbnQsIG1jbnQyOworKyAgVUNIQVJfVCAqcDE7CisrICBVQ0hBUl9UICpwID0gc3RhcnQ7CisrICBVQ0hBUl9UICpwZW5kID0gZW5kOworKworKyAgaWYgKHN0YXJ0ID09IE5VTEwpCisrICAgIHsKKysgICAgICBwcmludGYgKCIobnVsbClcbiIpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgLyogTG9vcCBvdmVyIHBhdHRlcm4gY29tbWFuZHMuICAqLworKyAgd2hpbGUgKHAgPCBwZW5kKQorKyAgICB7CisrIyAgaWZkZWYgX0xJQkMKKysgICAgICBwcmludGYgKCIldGQ6XHQiLCBwIC0gc3RhcnQpOworKyMgIGVsc2UKKysgICAgICBwcmludGYgKCIlbGQ6XHQiLCAobG9uZyBpbnQpIChwIC0gc3RhcnQpKTsKKysjICBlbmRpZgorKworKyAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcCsrKQorKwl7CisrICAgICAgICBjYXNlIG5vX29wOgorKyAgICAgICAgICBwcmludGYgKCIvbm9fb3AiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZXhhY3RuOgorKwkgIG1jbnQgPSAqcCsrOworKyAgICAgICAgICBwcmludGYgKCIvZXhhY3RuLyVkIiwgbWNudCk7CisrICAgICAgICAgIGRvCisrCSAgICB7CisrICAgICAgICAgICAgICBwdXRjaGFyICgnLycpOworKwkgICAgICBQVVRfQ0hBUiAoKnArKyk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB3aGlsZSAoLS1tY250KTsKKysgICAgICAgICAgYnJlYWs7CisrCisrIyAgaWZkZWYgTUJTX1NVUFBPUlQKKysJY2FzZSBleGFjdG5fYmluOgorKwkgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi9leGFjdG5fYmluLyVkIiwgbWNudCk7CisrICAgICAgICAgIGRvCisrCSAgICB7CisrCSAgICAgIHByaW50ZigiLyVseCIsIChsb25nIGludCkgKnArKyk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB3aGlsZSAoLS1tY250KTsKKysgICAgICAgICAgYnJlYWs7CisrIyAgZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysKKysJY2FzZSBzdGFydF9tZW1vcnk6CisrICAgICAgICAgIG1jbnQgPSAqcCsrOworKyAgICAgICAgICBwcmludGYgKCIvc3RhcnRfbWVtb3J5LyVkLyVsZCIsIG1jbnQsIChsb25nIGludCkgKnArKyk7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHN0b3BfbWVtb3J5OgorKyAgICAgICAgICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvc3RvcF9tZW1vcnkvJWQvJWxkIiwgbWNudCwgKGxvbmcgaW50KSAqcCsrKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZHVwbGljYXRlOgorKwkgIHByaW50ZiAoIi9kdXBsaWNhdGUvJWxkIiwgKGxvbmcgaW50KSAqcCsrKTsKKysJICBicmVhazsKKysKKysJY2FzZSBhbnljaGFyOgorKwkgIHByaW50ZiAoIi9hbnljaGFyIik7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgY2hhcnNldDoKKysgICAgICAgIGNhc2UgY2hhcnNldF9ub3Q6CisrICAgICAgICAgIHsKKysjICBpZmRlZiBXQ0hBUgorKwkgICAgaW50IGksIGxlbmd0aDsKKysJICAgIHdjaGFyX3QgKndvcmtwID0gcDsKKysJICAgIHByaW50ZiAoIi9jaGFyc2V0IFslcyIsCisrCSAgICAgICAgICAgIChyZV9vcGNvZGVfdCkgKih3b3JrcCAtIDEpID09IGNoYXJzZXRfbm90ID8gIl4iIDogIiIpOworKwkgICAgcCArPSA1OworKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDsgaSsrKQorKwkgICAgICBwcmludGYoIls6JWx4Ol0iLCAobG9uZyBpbnQpICpwKyspOworKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbCAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7KQorKwkgICAgICB7CisrCQlwcmludGYoIlsuIik7CisrCQl3aGlsZSgqcCAhPSAwKQorKwkJICBQVVRfQ0hBUigoaSsrLCpwKyspKTsKKysJCWkrKyxwKys7CisrCQlwcmludGYoIi5dIik7CisrCSAgICAgIH0KKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDspCisrCSAgICAgIHsKKysJCXByaW50ZigiWz0iKTsKKysJCXdoaWxlKCpwICE9IDApCisrCQkgIFBVVF9DSEFSKChpKyssKnArKykpOworKwkJaSsrLHArKzsKKysJCXByaW50ZigiPV0iKTsKKysJICAgICAgfQorKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY2hhcl9yYW5nZSAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7IGkrKykKKysJICAgICAgeworKwkJd2NoYXJfdCByYW5nZV9zdGFydCA9ICpwKys7CisrCQl3Y2hhcl90IHJhbmdlX2VuZCA9ICpwKys7CisrCQlwcmludGYoIiVDLSVDIiwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7CisrCSAgICAgIH0KKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNoYXIgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOyBpKyspCisrCSAgICAgIHByaW50ZigiJUMiLCAqcCsrKTsKKysJICAgIHB1dGNoYXIgKCddJyk7CisrIyAgZWxzZQorKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCBjLCBsYXN0ID0gLTEwMDsKKysJICAgIHJlZ2lzdGVyIGludCBpbl9yYW5nZSA9IDA7CisrCisrCSAgICBwcmludGYgKCIvY2hhcnNldCBbJXMiLAorKwkgICAgICAgICAgICAocmVfb3Bjb2RlX3QpICoocCAtIDEpID09IGNoYXJzZXRfbm90ID8gIl4iIDogIiIpOworKworKyAgICAgICAgICAgIGFzc2VydCAocCArICpwIDwgcGVuZCk7CisrCisrICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDI1NjsgYysrKQorKwkgICAgICBpZiAoYyAvIDggPCAqcAorKwkJICAmJiAocFsxICsgKGMvOCldICYgKDEgPDwgKGMgJSA4KSkpKQorKwkJeworKwkJICAvKiBBcmUgd2Ugc3RhcnRpbmcgYSByYW5nZT8gICovCisrCQkgIGlmIChsYXN0ICsgMSA9PSBjICYmICEgaW5fcmFuZ2UpCisrCQkgICAgeworKwkJICAgICAgcHV0Y2hhciAoJy0nKTsKKysJCSAgICAgIGluX3JhbmdlID0gMTsKKysJCSAgICB9CisrCQkgIC8qIEhhdmUgd2UgYnJva2VuIGEgcmFuZ2U/ICAqLworKwkJICBlbHNlIGlmIChsYXN0ICsgMSAhPSBjICYmIGluX3JhbmdlKQorKyAgICAgICAgICAgICAgeworKwkJICAgICAgcHV0Y2hhciAobGFzdCk7CisrCQkgICAgICBpbl9yYW5nZSA9IDA7CisrCQkgICAgfQorKworKwkJICBpZiAoISBpbl9yYW5nZSkKKysJCSAgICBwdXRjaGFyIChjKTsKKysKKysJCSAgbGFzdCA9IGM7CisrICAgICAgICAgICAgICB9CisrCisrCSAgICBpZiAoaW5fcmFuZ2UpCisrCSAgICAgIHB1dGNoYXIgKGxhc3QpOworKworKwkgICAgcHV0Y2hhciAoJ10nKTsKKysKKysJICAgIHAgKz0gMSArICpwOworKyMgIGVuZGlmIC8qIFdDSEFSICovCisrCSAgfQorKwkgIGJyZWFrOworKworKwljYXNlIGJlZ2xpbmU6CisrCSAgcHJpbnRmICgiL2JlZ2xpbmUiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZW5kbGluZToKKysgICAgICAgICAgcHJpbnRmICgiL2VuZGxpbmUiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIHRvICVsZCIsCisrCQkgIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9kdW1teV9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL2R1bW15X2ZhaWx1cmVfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgcHVzaF9kdW1teV9mYWlsdXJlOgorKyAgICAgICAgICBwcmludGYgKCIvcHVzaF9kdW1teV9mYWlsdXJlIik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL21heWJlX3BvcF9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9tYXliZV9wb3BfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysJICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvcG9wX2ZhaWx1cmVfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvcG9wX2ZhaWx1cmVfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcF9wYXN0X2FsdDoKKysJICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvanVtcF9wYXN0X2FsdCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvanVtcF9wYXN0X2FsdCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcDoKKysJICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2Ugc3VjY2VlZF9uOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKwkgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250MiwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrCSAgcHJpbnRmICgiL3N1Y2NlZWRfbiB0byAldGQsICVkIHRpbWVzIiwgcDEgLSBzdGFydCwgbWNudDIpOworKyMgIGVsc2UKKysJICBwcmludGYgKCIvc3VjY2VlZF9uIHRvICVsZCwgJWQgdGltZXMiLAorKwkJICAobG9uZyBpbnQpIChwMSAtIHN0YXJ0KSwgbWNudDIpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wX246CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrCSAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQyLCAmcCk7CisrCSAgcHJpbnRmICgiL2p1bXBfbiB0byAlZCwgJWQgdGltZXMiLCBwMSAtIHN0YXJ0LCBtY250Mik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBzZXRfbnVtYmVyX2F0OgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKwkgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250MiwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrCSAgcHJpbnRmICgiL3NldF9udW1iZXJfYXQgbG9jYXRpb24gJXRkIHRvICVkIiwgcDEgLSBzdGFydCwgbWNudDIpOworKyMgIGVsc2UKKysJICBwcmludGYgKCIvc2V0X251bWJlcl9hdCBsb2NhdGlvbiAlbGQgdG8gJWQiLAorKwkJICAobG9uZyBpbnQpIChwMSAtIHN0YXJ0KSwgbWNudDIpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSB3b3JkYm91bmQ6CisrCSAgcHJpbnRmICgiL3dvcmRib3VuZCIpOworKwkgIGJyZWFrOworKworKwljYXNlIG5vdHdvcmRib3VuZDoKKysJICBwcmludGYgKCIvbm90d29yZGJvdW5kIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHdvcmRiZWc6CisrCSAgcHJpbnRmICgiL3dvcmRiZWciKTsKKysJICBicmVhazsKKysKKysJY2FzZSB3b3JkZW5kOgorKwkgIHByaW50ZiAoIi93b3JkZW5kIik7CisrCSAgYnJlYWs7CisrCisrIyAgaWZkZWYgZW1hY3MKKysJY2FzZSBiZWZvcmVfZG90OgorKwkgIHByaW50ZiAoIi9iZWZvcmVfZG90Iik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGF0X2RvdDoKKysJICBwcmludGYgKCIvYXRfZG90Iik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGFmdGVyX2RvdDoKKysJICBwcmludGYgKCIvYWZ0ZXJfZG90Iik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHN5bnRheHNwZWM6CisrICAgICAgICAgIHByaW50ZiAoIi9zeW50YXhzcGVjIik7CisrCSAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiLyVkIiwgbWNudCk7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG5vdHN5bnRheHNwZWM6CisrICAgICAgICAgIHByaW50ZiAoIi9ub3RzeW50YXhzcGVjIik7CisrCSAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiLyVkIiwgbWNudCk7CisrCSAgYnJlYWs7CisrIyAgZW5kaWYgLyogZW1hY3MgKi8KKysKKysJY2FzZSB3b3JkY2hhcjoKKysJICBwcmludGYgKCIvd29yZGNoYXIiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugbm90d29yZGNoYXI6CisrCSAgcHJpbnRmICgiL25vdHdvcmRjaGFyIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGJlZ2J1ZjoKKysJICBwcmludGYgKCIvYmVnYnVmIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGVuZGJ1ZjoKKysJICBwcmludGYgKCIvZW5kYnVmIik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgcHJpbnRmICgiPyVsZCIsIChsb25nIGludCkgKihwLTEpKTsKKysJfQorKworKyAgICAgIHB1dGNoYXIgKCdcbicpOworKyAgICB9CisrCisrIyAgaWZkZWYgX0xJQkMKKysgIHByaW50ZiAoIiV0ZDpcdGVuZCBvZiBwYXR0ZXJuLlxuIiwgcCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICBwcmludGYgKCIlbGQ6XHRlbmQgb2YgcGF0dGVybi5cbiIsIChsb25nIGludCkgKHAgLSBzdGFydCkpOworKyMgIGVuZGlmCisrfQorKworKworK3ZvaWQKKytQUkVGSVgocHJpbnRfY29tcGlsZWRfcGF0dGVybikgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICBVQ0hBUl9UICpidWZmZXIgPSAoVUNIQVJfVCopIGJ1ZnAtPmJ1ZmZlcjsKKysKKysgIFBSRUZJWChwcmludF9wYXJ0aWFsX2NvbXBpbGVkX3BhdHRlcm4pIChidWZmZXIsIGJ1ZmZlcgorKwkJCQkgICsgYnVmcC0+dXNlZCAvIHNpemVvZihVQ0hBUl9UKSk7CisrICBwcmludGYgKCIlbGQgYnl0ZXMgdXNlZC8lbGQgYnl0ZXMgYWxsb2NhdGVkLlxuIiwKKysJICBidWZwLT51c2VkLCBidWZwLT5hbGxvY2F0ZWQpOworKworKyAgaWYgKGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgJiYgYnVmcC0+ZmFzdG1hcCkKKysgICAgeworKyAgICAgIHByaW50ZiAoImZhc3RtYXA6ICIpOworKyAgICAgIHByaW50X2Zhc3RtYXAgKGJ1ZnAtPmZhc3RtYXApOworKyAgICB9CisrCisrIyAgaWZkZWYgX0xJQkMKKysgIHByaW50ZiAoInJlX25zdWI6ICVaZFx0IiwgYnVmcC0+cmVfbnN1Yik7CisrIyAgZWxzZQorKyAgcHJpbnRmICgicmVfbnN1YjogJWxkXHQiLCAobG9uZyBpbnQpIGJ1ZnAtPnJlX25zdWIpOworKyMgIGVuZGlmCisrICBwcmludGYgKCJyZWdzX2FsbG9jOiAlZFx0IiwgYnVmcC0+cmVnc19hbGxvY2F0ZWQpOworKyAgcHJpbnRmICgiY2FuX2JlX251bGw6ICVkXHQiLCBidWZwLT5jYW5fYmVfbnVsbCk7CisrICBwcmludGYgKCJuZXdsaW5lX2FuY2hvcjogJWRcbiIsIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yKTsKKysgIHByaW50ZiAoIm5vX3N1YjogJWRcdCIsIGJ1ZnAtPm5vX3N1Yik7CisrICBwcmludGYgKCJub3RfYm9sOiAlZFx0IiwgYnVmcC0+bm90X2JvbCk7CisrICBwcmludGYgKCJub3RfZW9sOiAlZFx0IiwgYnVmcC0+bm90X2VvbCk7CisrICBwcmludGYgKCJzeW50YXg6ICVseFxuIiwgYnVmcC0+c3ludGF4KTsKKysgIC8qIFBlcmhhcHMgd2Ugc2hvdWxkIHByaW50IHRoZSB0cmFuc2xhdGUgdGFibGU/ICAqLworK30KKysKKysKKyt2b2lkCisrUFJFRklYKHByaW50X2RvdWJsZV9zdHJpbmcpIChjb25zdCBDSEFSX1QgKndoZXJlLCBjb25zdCBDSEFSX1QgKnN0cmluZzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZTEsIGNvbnN0IENIQVJfVCAqc3RyaW5nMiwgaW50IHNpemUyKQorK3sKKysgIGludCB0aGlzX2NoYXI7CisrCisrICBpZiAod2hlcmUgPT0gTlVMTCkKKysgICAgcHJpbnRmICgiKG51bGwpIik7CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbnQgY250OworKworKyAgICAgIGlmIChGSVJTVF9TVFJJTkdfUCAod2hlcmUpKQorKyAgICAgICAgeworKyAgICAgICAgICBmb3IgKHRoaXNfY2hhciA9IHdoZXJlIC0gc3RyaW5nMTsgdGhpc19jaGFyIDwgc2l6ZTE7IHRoaXNfY2hhcisrKQorKwkgICAgUFVUX0NIQVIgKHN0cmluZzFbdGhpc19jaGFyXSk7CisrCisrICAgICAgICAgIHdoZXJlID0gc3RyaW5nMjsKKysgICAgICAgIH0KKysKKysgICAgICBjbnQgPSAwOworKyAgICAgIGZvciAodGhpc19jaGFyID0gd2hlcmUgLSBzdHJpbmcyOyB0aGlzX2NoYXIgPCBzaXplMjsgdGhpc19jaGFyKyspCisrCXsKKysJICBQVVRfQ0hBUiAoc3RyaW5nMlt0aGlzX2NoYXJdKTsKKysJICBpZiAoKytjbnQgPiAxMDApCisrCSAgICB7CisrCSAgICAgIGZwdXRzICgiLi4uIiwgc3Rkb3V0KTsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgfQorK30KKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrdm9pZAorK3ByaW50Y2hhciAoaW50IGMpCisreworKyAgcHV0YyAoYywgc3RkZXJyKTsKKyt9CisrIyAgZW5kaWYKKysKKysjIGVsc2UgLyogbm90IERFQlVHICovCisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorKyMgICB1bmRlZiBhc3NlcnQKKysjICAgZGVmaW5lIGFzc2VydChlKQorKworKyMgICBkZWZpbmUgREVCVUdfU1RBVEVNRU5UKGUpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDEoeCkKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMih4MSwgeDIpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDMoeDEsIHgyLCB4MykKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UNCh4MSwgeDIsIHgzLCB4NCkKKysjICBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4ocCwgcywgZSkKKysjICBkZWZpbmUgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyh3LCBzMSwgc3oxLCBzMiwgc3oyKQorKworKyMgZW5kaWYgLyogbm90IERFQlVHICovCisrCisrDAorKworKyMgaWZkZWYgV0NIQVIKKysvKiBUaGlzICBjb252ZXJ0IGEgbXVsdGlieXRlIHN0cmluZyB0byBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZy4KKysgICBBbmQgd3JpdGUgdGhlaXIgY29ycmVzcG9uZGFuY2VzIHRvIG9mZnNldF9idWZmZXIoc2VlIGJlbG93KQorKyAgIGFuZCB3cml0ZSB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSB0byBpc19iaW5hcnkuCisrICAgVGhpcyBhc3N1bWUgaW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2VzIGFzIGJpbmFyeSBkYXRhLgorKyAgIFdlIGFzc3VtZSBvZmZzZXRfYnVmZmVyIGFuZCBpc19iaW5hcnkgaXMgYWxyZWFkeSBhbGxvY2F0ZWQKKysgICBlbm91Z2ggc3BhY2UuICAqLworKworK3N0YXRpYyBzaXplX3QgY29udmVydF9tYnNfdG9fd2NzIChDSEFSX1QgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywKKysJCQkJICBzaXplX3QgbGVuLCBpbnQgKm9mZnNldF9idWZmZXIsCisrCQkJCSAgY2hhciAqaXNfYmluYXJ5KTsKKytzdGF0aWMgc2l6ZV90CisrY29udmVydF9tYnNfdG9fd2NzIChDSEFSX1QgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqc3JjLCBzaXplX3QgbGVuLAorKyAgICAgICAgICAgICAgICAgICAgaW50ICpvZmZzZXRfYnVmZmVyLCBjaGFyICppc19iaW5hcnkpCisrICAgICAvKiBJdCBob2xkIGNvcnJlc3BvbmRhbmNlcyBiZXR3ZWVuIHNyYyhjaGFyIHN0cmluZykgYW5kCisrCWRlc3Qod2NoYXJfdCBzdHJpbmcpIGZvciBvcHRpbWl6YXRpb24uCisrCWUuZy4gc3JjICA9ICJ4eHh5enoiCisrICAgICAgICAgICAgIGRlc3QgPSB7J1gnLCAnWScsICdaJ30KKysJICAgICAgKGVhY2ggInh4eCIsICJ5IiBhbmQgInp6IiByZXByZXNlbnQgb25lIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gJ1gnLCAnWScgYW5kICdaJy4pCisrCSAgb2Zmc2V0X2J1ZmZlciA9IHswLCAwKzMoInh4eCIpLCAwKzMrMSgieSIpLCAwKzMrMSsyKCJ6eiIpfQorKwkgIAkgICAgICAgID0gezAsIDMsIDQsIDZ9CisrICAgICAqLworK3sKKysgIHdjaGFyX3QgKnBkZXN0ID0gZGVzdDsKKysgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzcmMgPSBzcmM7CisrICBzaXplX3Qgd2NfY291bnQgPSAwOworKworKyAgbWJzdGF0ZV90IG1iczsKKysgIGludCBpLCBjb25zdW1lZDsKKysgIHNpemVfdCBtYl9yZW1haW4gPSBsZW47CisrICBzaXplX3QgbWJfY291bnQgPSAwOworKworKyAgLyogSW5pdGlhbGl6ZSB0aGUgY29udmVyc2lvbiBzdGF0ZS4gICovCisrICBtZW1zZXQgKCZtYnMsIDAsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCisrICBvZmZzZXRfYnVmZmVyWzBdID0gMDsKKysgIGZvciggOyBtYl9yZW1haW4gPiAwIDsgKyt3Y19jb3VudCwgKytwZGVzdCwgbWJfcmVtYWluIC09IGNvbnN1bWVkLAorKwkgcHNyYyArPSBjb25zdW1lZCkKKysgICAgeworKyNpZmRlZiBfTElCQworKyAgICAgIGNvbnN1bWVkID0gX19tYnJ0b3djIChwZGVzdCwgcHNyYywgbWJfcmVtYWluLCAmbWJzKTsKKysjZWxzZQorKyAgICAgIGNvbnN1bWVkID0gbWJydG93YyAocGRlc3QsIHBzcmMsIG1iX3JlbWFpbiwgJm1icyk7CisrI2VuZGlmCisrCisrICAgICAgaWYgKGNvbnN1bWVkIDw9IDApCisrCS8qIGZhaWxlZCB0byBjb252ZXJ0LiBtYXliZSBzcmMgY29udGFpbnMgYmluYXJ5IGRhdGEuCisrCSAgIFNvIHdlIGNvbnN1bWUgMSBieXRlIG1hbnVhbHkuICAqLworKwl7CisrCSAgKnBkZXN0ID0gKnBzcmM7CisrCSAgY29uc3VtZWQgPSAxOworKwkgIGlzX2JpbmFyeVt3Y19jb3VudF0gPSBUUlVFOworKwl9CisrICAgICAgZWxzZQorKwlpc19iaW5hcnlbd2NfY291bnRdID0gRkFMU0U7CisrICAgICAgLyogSW4gc2ppcyBlbmNvZGluZywgd2UgdXNlIHllbiBzaWduIGFzIGVzY2FwZSBjaGFyYWN0ZXIgaW4KKysJIHBsYWNlIG9mIHJldmVyc2Ugc29saWR1cy4gU28gd2UgY29udmVydCAweDVjKHllbiBzaWduIGluCisrCSBzamlzKSB0byBub3QgMHhhNSh5ZW4gc2lnbiBpbiBVQ1MyKSBidXQgMHg1YyhyZXZlcnNlCisrCSBzb2xpZHVzIGluIFVDUzIpLiAgKi8KKysgICAgICBpZiAoY29uc3VtZWQgPT0gMSAmJiAoaW50KSAqcHNyYyA9PSAweDVjICYmIChpbnQpICpwZGVzdCA9PSAweGE1KQorKwkqcGRlc3QgPSAod2NoYXJfdCkgKnBzcmM7CisrCisrICAgICAgb2Zmc2V0X2J1ZmZlclt3Y19jb3VudCArIDFdID0gbWJfY291bnQgKz0gY29uc3VtZWQ7CisrICAgIH0KKysKKysgIC8qIEZpbGwgcmVtYWluIG9mIHRoZSBidWZmZXIgd2l0aCBzZW50aW5lbC4gICovCisrICBmb3IgKGkgPSB3Y19jb3VudCArIDEgOyBpIDw9IGxlbiA7IGkrKykKKysgICAgb2Zmc2V0X2J1ZmZlcltpXSA9IG1iX2NvdW50ICsgMTsKKysKKysgIHJldHVybiB3Y19jb3VudDsKKyt9CisrCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogU2V0IGJ5IGByZV9zZXRfc3ludGF4JyB0byB0aGUgY3VycmVudCByZWdleHAgc3ludGF4IHRvIHJlY29nbml6ZS4gIENhbgorKyAgIGFsc28gYmUgYXNzaWduZWQgdG8gYXJiaXRyYXJpbHk6IGVhY2ggcGF0dGVybiBidWZmZXIgc3RvcmVzIGl0cyBvd24KKysgICBzeW50YXgsIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gcmVnZXggY29tcGlsYXRpb25zLiAgKi8KKysvKiBUaGlzIGhhcyBubyBpbml0aWFsaXplciBiZWNhdXNlIGluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBFbWFjcworKyAgIGJlY29tZSByZWFkLW9ubHkgYWZ0ZXIgZHVtcGluZy4gICovCisrcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworKworKworKy8qIFNwZWNpZnkgdGhlIHByZWNpc2Ugc3ludGF4IG9mIHJlZ2V4cHMgZm9yIGNvbXBpbGF0aW9uLiAgVGhpcyBwcm92aWRlcworKyAgIGZvciBjb21wYXRpYmlsaXR5IGZvciB2YXJpb3VzIHV0aWxpdGllcyB3aGljaCBoaXN0b3JpY2FsbHkgaGF2ZQorKyAgIGRpZmZlcmVudCwgaW5jb21wYXRpYmxlIHN5bnRheGVzLgorKworKyAgIFRoZSBhcmd1bWVudCBTWU5UQVggaXMgYSBiaXQgbWFzayBjb21wcmlzZWQgb2YgdGhlIHZhcmlvdXMgYml0cworKyAgIGRlZmluZWQgaW4gcmVnZXguaC4gIFdlIHJldHVybiB0aGUgb2xkIHN5bnRheC4gICovCisrCisrcmVnX3N5bnRheF90CisrcmVfc2V0X3N5bnRheCAocmVnX3N5bnRheF90IHN5bnRheCkKKyt7CisrICByZWdfc3ludGF4X3QgcmV0ID0gcmVfc3ludGF4X29wdGlvbnM7CisrCisrICByZV9zeW50YXhfb3B0aW9ucyA9IHN5bnRheDsKKysjIGlmZGVmIERFQlVHCisrICBpZiAoc3ludGF4ICYgUkVfREVCVUcpCisrICAgIGRlYnVnID0gMTsKKysgIGVsc2UgaWYgKGRlYnVnKSAvKiB3YXMgb24gYnV0IG5vdyBpcyBub3QgKi8KKysgICAgZGVidWcgPSAwOworKyMgZW5kaWYgLyogREVCVUcgKi8KKysgIHJldHVybiByZXQ7CisrfQorKyMgaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NldF9zeW50YXgsIHJlX3NldF9zeW50YXgpCisrIyBlbmRpZgorKwwKKysvKiBUaGlzIHRhYmxlIGdpdmVzIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGVhY2ggb2YgdGhlIGVycm9yIGNvZGVzIGxpc3RlZAorKyAgIGluIHJlZ2V4LmguICBPYnZpb3VzbHkgdGhlIG9yZGVyIGhlcmUgaGFzIHRvIGJlIHNhbWUgYXMgdGhlcmUuCisrICAgUE9TSVggZG9lc24ndCByZXF1aXJlIHRoYXQgd2UgZG8gYW55dGhpbmcgZm9yIFJFR19OT0VSUk9SLAorKyAgIGJ1dCB3aHkgbm90IGJlIG5pY2U/ICAqLworKworK3N0YXRpYyBjb25zdCBjaGFyICpyZV9lcnJvcl9tc2dpZFtdID0KKysgIHsKKysgICAgZ2V0dGV4dF9ub29wICgiU3VjY2VzcyIpLAkvKiBSRUdfTk9FUlJPUiAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJObyBtYXRjaCIpLAkvKiBSRUdfTk9NQVRDSCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCAvKiBSRUdfQkFEUEFUICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpLCAvKiBSRUdfRUNPTExBVEUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpLCAvKiBSRUdfRUNUWVBFICovCisrICAgIGdldHRleHRfbm9vcCAoIlRyYWlsaW5nIGJhY2tzbGFzaCIpLCAvKiBSRUdfRUVTQ0FQRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIiksIC8qIFJFR19FU1VCUkVHICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBbIG9yIFteIiksCS8qIFJFR19FQlJBQ0sgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICggb3IgXFwoIiksIC8qIFJFR19FUEFSRU4gKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkIFxceyIpLCAvKiBSRUdfRUJSQUNFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iKSwgLyogUkVHX0JBREJSICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmFuZ2UgZW5kIiksCS8qIFJFR19FUkFOR0UgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiTWVtb3J5IGV4aGF1c3RlZCIpLCAvKiBSRUdfRVNQQUNFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCAvKiBSRUdfQkFEUlBUICovCisrICAgIGdldHRleHRfbm9vcCAoIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIiksIC8qIFJFR19FRU5EICovCisrICAgIGdldHRleHRfbm9vcCAoIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIiksIC8qIFJFR19FU0laRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgKSBvciBcXCkiKSAvKiBSRUdfRVJQQVJFTiAqLworKyAgfTsKKysMCisrI2VuZGlmIC8qIElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZuZGVmIERFRklORURfT05DRQorKy8qIEF2b2lkaW5nIGFsbG9jYSBkdXJpbmcgbWF0Y2hpbmcsIHRvIHBsYWNhdGUgcl9hbGxvYy4gICovCisrCisrLyogRGVmaW5lIE1BVENIX01BWV9BTExPQ0FURSB1bmxlc3Mgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKysgICBzZWFyY2hpbmcgYW5kIG1hdGNoaW5nIGZ1bmN0aW9ucyBzaG91bGQgbm90IGNhbGwgYWxsb2NhLiAgT24gc29tZQorKyAgIHN5c3RlbXMsIGFsbG9jYSBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBtYWxsb2MsIGFuZCBpZiB3ZSdyZQorKyAgIHVzaW5nIHRoZSByZWxvY2F0aW5nIGFsbG9jYXRvciByb3V0aW5lcywgdGhlbiBtYWxsb2MgY291bGQgY2F1c2UgYQorKyAgIHJlbG9jYXRpb24sIHdoaWNoIG1pZ2h0IChpZiB0aGUgc3RyaW5ncyBiZWluZyBzZWFyY2hlZCBhcmUgaW4gdGhlCisrICAgcmFsbG9jIGhlYXApIHNoaWZ0IHRoZSBkYXRhIG91dCBmcm9tIHVuZGVybmVhdGggdGhlIHJlZ2V4cAorKyAgIHJvdXRpbmVzLgorKworKyAgIEhlcmUncyBhbm90aGVyIHJlYXNvbiB0byBhdm9pZCBhbGxvY2F0aW9uOiBFbWFjcworKyAgIHByb2Nlc3NlcyBpbnB1dCBmcm9tIFggaW4gYSBzaWduYWwgaGFuZGxlcjsgcHJvY2Vzc2luZyBYIGlucHV0IG1heQorKyAgIGNhbGwgbWFsbG9jOyBpZiBpbnB1dCBhcnJpdmVzIHdoaWxlIGEgbWF0Y2hpbmcgcm91dGluZSBpcyBjYWxsaW5nCisrICAgbWFsbG9jLCB0aGVuIHdlJ3JlIHNjcm9kLiAgQnV0IEVtYWNzIGNhbid0IGp1c3QgYmxvY2sgaW5wdXQgd2hpbGUKKysgICBjYWxsaW5nIG1hdGNoaW5nIHJvdXRpbmVzOyB0aGVuIHdlIGRvbid0IG5vdGljZSBpbnRlcnJ1cHRzIHdoZW4KKysgICB0aGV5IGNvbWUgaW4uICBTbywgRW1hY3MgYmxvY2tzIGlucHV0IGFyb3VuZCBhbGwgcmVnZXhwIGNhbGxzCisrICAgZXhjZXB0IHRoZSBtYXRjaGluZyBjYWxscywgd2hpY2ggaXQgbGVhdmVzIHVucHJvdGVjdGVkLCBpbiB0aGUKKysgICBmYWl0aCB0aGF0IHRoZXkgd2lsbCBub3QgbWFsbG9jLiAgKi8KKysKKysvKiBOb3JtYWxseSwgdGhpcyBpcyBmaW5lLiAgKi8KKysjIGRlZmluZSBNQVRDSF9NQVlfQUxMT0NBVEUKKysKKysvKiBXaGVuIHVzaW5nIEdOVSBDLCB3ZSBhcmUgbm90IFJFQUxMWSB1c2luZyB0aGUgQyBhbGxvY2EsIG5vIG1hdHRlcgorKyAgIHdoYXQgY29uZmlnLmggbWF5IHNheS4gIFNvIGRvbid0IHRha2UgcHJlY2F1dGlvbnMgZm9yIGl0LiAgKi8KKysjIGlmZGVmIF9fR05VQ19fCisrIyAgdW5kZWYgQ19BTExPQ0EKKysjIGVuZGlmCisrCisrLyogVGhlIG1hdGNoIHJvdXRpbmVzIG1heSBub3QgYWxsb2NhdGUgaWYgKDEpIHRoZXkgd291bGQgZG8gaXQgd2l0aCBtYWxsb2MKKysgICBhbmQgKDIpIGl0J3Mgbm90IHNhZmUgZm9yIHRoZW0gdG8gdXNlIG1hbGxvYy4KKysgICBOb3RlIHRoYXQgaWYgUkVMX0FMTE9DIGlzIGRlZmluZWQsIG1hdGNoaW5nIHdvdWxkIG5vdCB1c2UgbWFsbG9jIGZvciB0aGUKKysgICBmYWlsdXJlIHN0YWNrLCBidXQgd2Ugd291bGQgc3RpbGwgdXNlIGl0IGZvciB0aGUgcmVnaXN0ZXIgdmVjdG9yczsKKysgICBzbyBSRUxfQUxMT0Mgc2hvdWxkIG5vdCBhZmZlY3QgdGhpcy4gICovCisrIyBpZiAoZGVmaW5lZCBDX0FMTE9DQSB8fCBkZWZpbmVkIFJFR0VYX01BTExPQykgJiYgZGVmaW5lZCBlbWFjcworKyMgIHVuZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgZW5kaWYKKysjZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKwwKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKy8qIEZhaWx1cmUgc3RhY2sgZGVjbGFyYXRpb25zIGFuZCBtYWNyb3M7IGJvdGggcmVfY29tcGlsZV9mYXN0bWFwIGFuZAorKyAgIHJlX21hdGNoXzIgdXNlIGEgZmFpbHVyZSBzdGFjay4gIFRoZXNlIGhhdmUgdG8gYmUgbWFjcm9zIGJlY2F1c2Ugb2YKKysgICBSRUdFWF9BTExPQ0FURV9TVEFDSy4gICovCisrCisrCisrLyogTnVtYmVyIG9mIGZhaWx1cmUgcG9pbnRzIGZvciB3aGljaCB0byBpbml0aWFsbHkgYWxsb2NhdGUgc3BhY2UKKysgICB3aGVuIG1hdGNoaW5nLiAgSWYgdGhpcyBudW1iZXIgaXMgZXhjZWVkZWQsIHdlIGFsbG9jYXRlIG1vcmUKKysgICBzcGFjZSwgc28gaXQgaXMgbm90IGEgaGFyZCBsaW1pdC4gICovCisrIyBpZm5kZWYgSU5JVF9GQUlMVVJFX0FMTE9DCisrIyAgZGVmaW5lIElOSVRfRkFJTFVSRV9BTExPQyA1CisrIyBlbmRpZgorKworKy8qIFJvdWdobHkgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZhaWx1cmUgcG9pbnRzIG9uIHRoZSBzdGFjay4gIFdvdWxkIGJlCisrICAgZXhhY3RseSB0aGF0IGlmIGFsd2F5cyB1c2VkIE1BWF9GQUlMVVJFX0lURU1TIGl0ZW1zIGVhY2ggdGltZSB3ZSBmYWlsZWQuCisrICAgVGhpcyBpcyBhIHZhcmlhYmxlIG9ubHkgc28gdXNlcnMgb2YgcmVnZXggY2FuIGFzc2lnbiB0byBpdDsgd2UgbmV2ZXIKKysgICBjaGFuZ2UgaXQgb3Vyc2VsdmVzLiAgKi8KKysKKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysKKysjICBpZmRlZiBJTlRfSVNfMTZCSVQKKysjICAgZGVmaW5lIFJFX01fRl9UWVBFIGxvbmcgaW50CisrIyAgZWxzZQorKyMgICBkZWZpbmUgUkVfTV9GX1RZUEUgaW50CisrIyAgZW5kaWYgLyogSU5UX0lTXzE2QklUICovCisrCisrIyAgaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrLyogNDQwMCB3YXMgZW5vdWdoIHRvIGNhdXNlIGEgY3Jhc2ggb24gQWxwaGEgT1NGLzEsCisrICAgd2hvc2UgZGVmYXVsdCBzdGFjayBsaW1pdCBpcyAybWIuICAqLworKyMgICBkZWZpbmUgUkVfTV9GX0RFRkFVTFQgNDAwMAorKyMgIGVsc2UKKysjICAgZGVmaW5lIFJFX01fRl9ERUZBVUxUIDIwMDAKKysjICBlbmRpZiAvKiBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysjICBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKysKKysjICBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zKQorK2xpbmtfd2FybmluZyAocmVfbWF4X2ZhaWx1cmVzLCAidGhlICdyZV9tYXhfZmFpbHVyZXMnIHZhcmlhYmxlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGdvIGF3YXkuIikKKytSRV9NX0ZfVFlQRSByZV9tYXhfZmFpbHVyZXMgPSBSRV9NX0ZfREVGQVVMVDsKKysjICBlbHNlCisrUkVfTV9GX1RZUEUgcmVfbWF4X2ZhaWx1cmVzIGF0dHJpYnV0ZV9oaWRkZW4gPSBSRV9NX0ZfREVGQVVMVDsKKysjICBlbmRpZiAvKiBTSExJQl9DT01QQVQgKi8KKysKKysjICB1bmRlZiBSRV9NX0ZfVFlQRQorKyMgIHVuZGVmIFJFX01fRl9ERUZBVUxUCisrCisrIyBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysKKysjIGlmZGVmIElOVF9JU18xNkJJVAorKworK3VuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkKKyt7CisrICBVQ0hBUl9UICpwb2ludGVyOworKyAgbG9uZyBpbnQgaW50ZWdlcjsKKyt9OworKworK3R5cGVkZWYgdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KSBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCk7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKnN0YWNrOworKyAgdW5zaWduZWQgbG9uZyBpbnQgc2l6ZTsKKysgIHVuc2lnbmVkIGxvbmcgaW50IGF2YWlsOwkJLyogT2Zmc2V0IG9mIG5leHQgb3BlbiBwb3NpdGlvbi4gICovCisrfSBQUkVGSVgoZmFpbF9zdGFja190eXBlKTsKKysKKysjIGVsc2UgLyogbm90IElOVF9JU18xNkJJVCAqLworKworK3VuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkKKyt7CisrICBVQ0hBUl9UICpwb2ludGVyOworKyAgaW50IGludGVnZXI7CisrfTsKKysKKyt0eXBlZGVmIHVuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICpzdGFjazsKKysgIHVuc2lnbmVkIHNpemU7CisrICB1bnNpZ25lZCBhdmFpbDsJCQkvKiBPZmZzZXQgb2YgbmV4dCBvcGVuIHBvc2l0aW9uLiAgKi8KKyt9IFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpOworKworKyMgZW5kaWYgLyogSU5UX0lTXzE2QklUICovCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgZGVmaW5lIEZBSUxfU1RBQ0tfRU1QVFkoKSAgICAgKGZhaWxfc3RhY2suYXZhaWwgPT0gMCkKKysjICBkZWZpbmUgRkFJTF9TVEFDS19QVFJfRU1QVFkoKSAoZmFpbF9zdGFja19wdHItPmF2YWlsID09IDApCisrIyAgZGVmaW5lIEZBSUxfU1RBQ0tfRlVMTCgpICAgICAgKGZhaWxfc3RhY2suYXZhaWwgPT0gZmFpbF9zdGFjay5zaXplKQorKyMgZW5kaWYKKysKKysKKysvKiBEZWZpbmUgbWFjcm9zIHRvIGluaXRpYWxpemUgYW5kIGZyZWUgdGhlIGZhaWx1cmUgc3RhY2suCisrICAgRG8gYHJldHVybiAtMicgaWYgdGhlIGFsbG9jIGZhaWxzLiAgKi8KKysKKysjIGlmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgIGRlZmluZSBJTklUX0ZBSUxfU1RBQ0soKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGZhaWxfc3RhY2suc3RhY2sgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopCQlcCisrICAgICAgUkVHRVhfQUxMT0NBVEVfU1RBQ0sgKElOSVRfRkFJTFVSRV9BTExPQyAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSk7IFwKKysJCQkJCQkJCQlcCisrICAgIGlmIChmYWlsX3N0YWNrLnN0YWNrID09IE5VTEwpCQkJCVwKKysgICAgICByZXR1cm4gLTI7CQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIGZhaWxfc3RhY2suc2l6ZSA9IElOSVRfRkFJTFVSRV9BTExPQzsJCQlcCisrICAgIGZhaWxfc3RhY2suYXZhaWwgPSAwOwkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjICBkZWZpbmUgUkVTRVRfRkFJTF9TVEFDSygpICBSRUdFWF9GUkVFX1NUQUNLIChmYWlsX3N0YWNrLnN0YWNrKQorKyMgZWxzZQorKyMgIGRlZmluZSBJTklUX0ZBSUxfU1RBQ0soKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGZhaWxfc3RhY2suYXZhaWwgPSAwOwkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjICBkZWZpbmUgUkVTRVRfRkFJTF9TVEFDSygpCisrIyBlbmRpZgorKworKworKy8qIERvdWJsZSB0aGUgc2l6ZSBvZiBGQUlMX1NUQUNLLCB1cCB0byBhcHByb3hpbWF0ZWx5IGByZV9tYXhfZmFpbHVyZXMnIGl0ZW1zLgorKworKyAgIFJldHVybiAxIGlmIHN1Y2NlZWRzLCBhbmQgMCBpZiBlaXRoZXIgcmFuIG91dCBvZiBtZW1vcnkKKysgICBhbGxvY2F0aW5nIHNwYWNlIGZvciBpdCBvciBpdCB3YXMgYWxyZWFkeSB0b28gbGFyZ2UuCisrCisrICAgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyByZXF1aXJlcyBgZGVzdGluYXRpb24nIGJlIGRlY2xhcmVkLiAgICovCisrCisrIyBkZWZpbmUgRE9VQkxFX0ZBSUxfU1RBQ0soZmFpbF9zdGFjaykJCQkJCVwKKysgICgoZmFpbF9zdGFjaykuc2l6ZSA+ICh1bnNpZ25lZCkgKHJlX21heF9mYWlsdXJlcyAqIE1BWF9GQUlMVVJFX0lURU1TKQlcCisrICAgPyAwCQkJCQkJCQkJXAorKyAgIDogKChmYWlsX3N0YWNrKS5zdGFjayA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikJCQlcCisrICAgICAgICBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLICgoZmFpbF9zdGFjaykuc3RhY2ssIAkJCVwKKysgICAgICAgICAgKGZhaWxfc3RhY2spLnNpemUgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSksCVwKKysgICAgICAgICAgKChmYWlsX3N0YWNrKS5zaXplIDw8IDEpICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKSxcCisrCQkJCQkJCQkJXAorKyAgICAgIChmYWlsX3N0YWNrKS5zdGFjayA9PSBOVUxMCQkJCQlcCisrICAgICAgPyAwCQkJCQkJCQlcCisrICAgICAgOiAoKGZhaWxfc3RhY2spLnNpemUgPDw9IDEsIAkJCQkJXAorKyAgICAgICAgIDEpKSkKKysKKysKKysvKiBQdXNoIHBvaW50ZXIgUE9JTlRFUiBvbiBGQUlMX1NUQUNLLgorKyAgIFJldHVybiAxIGlmIHdhcyBhYmxlIHRvIGRvIHNvIGFuZCAwIGlmIHJhbiBvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcKKysgICBzcGFjZSB0byBkbyBzby4gICovCisrIyBkZWZpbmUgUFVTSF9QQVRURVJOX09QKFBPSU5URVIsIEZBSUxfU1RBQ0spCQkJCVwKKysgICgoRkFJTF9TVEFDS19GVUxMICgpCQkJCQkJCVwKKysgICAgJiYgIURPVUJMRV9GQUlMX1NUQUNLIChGQUlMX1NUQUNLKSkJCQkJCVwKKysgICA/IDAJCQkJCQkJCQlcCisrICAgOiAoKEZBSUxfU1RBQ0spLnN0YWNrWyhGQUlMX1NUQUNLKS5hdmFpbCsrXS5wb2ludGVyID0gUE9JTlRFUiwJXAorKyAgICAgIDEpKQorKworKy8qIFB1c2ggYSBwb2ludGVyIHZhbHVlIG9udG8gdGhlIGZhaWx1cmUgc3RhY2suCisrICAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZhaWxfc3RhY2snLiAgUHJvYmFibHkgc2hvdWxkIG9ubHkKKysgICBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYFBVU0hfRkFJTFVSRV9QT0lOVCcuICAqLworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9QT0lOVEVSKGl0ZW0pCQkJCQlcCisrICBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwrK10ucG9pbnRlciA9IChVQ0hBUl9UICopIChpdGVtKQorKworKy8qIFRoaXMgcHVzaGVzIGFuIGludGVnZXItdmFsdWVkIGl0ZW0gb250byB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBBc3N1bWVzIHRoZSB2YXJpYWJsZSBgZmFpbF9zdGFjaycuICBQcm9iYWJseSBzaG91bGQgb25seQorKyAgIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgUFVTSF9GQUlMVVJFX1BPSU5UJy4gICovCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX0lOVChpdGVtKQkJCQkJXAorKyAgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsKytdLmludGVnZXIgPSAoaXRlbSkKKysKKysvKiBQdXNoIGEgZmFpbF9zdGFja19lbHRfdCB2YWx1ZSBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIEFzc3VtZXMgdGhlIHZhcmlhYmxlIGBmYWlsX3N0YWNrJy4gIFByb2JhYmx5IHNob3VsZCBvbmx5CisrICAgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBQVVNIX0ZBSUxVUkVfUE9JTlQnLiAgKi8KKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfRUxUKGl0ZW0pCQkJCQlcCisrICBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwrK10gPSAgKGl0ZW0pCisrCisrLyogVGhlc2UgdGhyZWUgUE9QLi4uIG9wZXJhdGlvbnMgY29tcGxlbWVudCB0aGUgdGhyZWUgUFVTSC4uLiBvcGVyYXRpb25zLgorKyAgIEFsbCBhc3N1bWUgdGhhdCBgZmFpbF9zdGFjaycgaXMgbm9uZW1wdHkuICAqLworKyMgZGVmaW5lIFBPUF9GQUlMVVJFX1BPSU5URVIoKSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0ucG9pbnRlcgorKyMgZGVmaW5lIFBPUF9GQUlMVVJFX0lOVCgpIGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXS5pbnRlZ2VyCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfRUxUKCkgZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdCisrCisrLyogVXNlZCB0byBvbWl0IHB1c2hpbmcgZmFpbHVyZSBwb2ludCBpZCdzIHdoZW4gd2UncmUgbm90IGRlYnVnZ2luZy4gICovCisrIyBpZmRlZiBERUJVRworKyMgIGRlZmluZSBERUJVR19QVVNIIFBVU0hfRkFJTFVSRV9JTlQKKysjICBkZWZpbmUgREVCVUdfUE9QKGl0ZW1fYWRkcikgKihpdGVtX2FkZHIpID0gUE9QX0ZBSUxVUkVfSU5UICgpCisrIyBlbHNlCisrIyAgZGVmaW5lIERFQlVHX1BVU0goaXRlbSkKKysjICBkZWZpbmUgREVCVUdfUE9QKGl0ZW1fYWRkcikKKysjIGVuZGlmCisrCisrCisrLyogUHVzaCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIHdlIHdpbGwgbmVlZAorKyAgIGlmIHdlIGV2ZXIgZmFpbCBiYWNrIHRvIGl0LgorKworKyAgIFJlcXVpcmVzIHZhcmlhYmxlcyBmYWlsX3N0YWNrLCByZWdzdGFydCwgcmVnZW5kLCByZWdfaW5mbywgYW5kCisrICAgbnVtX3JlZ3NfcHVzaGVkIGJlIGRlY2xhcmVkLiAgRE9VQkxFX0ZBSUxfU1RBQ0sgcmVxdWlyZXMgYGRlc3RpbmF0aW9uJworKyAgIGJlIGRlY2xhcmVkLgorKworKyAgIERvZXMgYHJldHVybiBGQUlMVVJFX0NPREUnIGlmIHJ1bnMgb3V0IG9mIG1lbW9yeS4gICovCisrCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX1BPSU5UKHBhdHRlcm5fcGxhY2UsIHN0cmluZ19wbGFjZSwgZmFpbHVyZV9jb2RlKQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBjaGFyICpkZXN0aW5hdGlvbjsJCQkJCQkJXAorKyAgICAvKiBNdXN0IGJlIGludCwgc28gd2hlbiB3ZSBkb24ndCBzYXZlIGFueSByZWdpc3RlcnMsIHRoZSBhcml0aG1ldGljCVwKKysgICAgICAgb2YgMCArIC0xIGlzbid0IGRvbmUgYXMgdW5zaWduZWQuICAqLwkJCQlcCisrICAgIC8qIENhbid0IGJlIGludCwgc2luY2UgdGhlcmUgaXMgbm90IGEgc2hyZWQgb2YgYSBndWFyYW50ZWUgdGhhdCBpbnQJXAorKyAgICAgICBpcyB3aWRlIGVub3VnaCB0byBob2xkIGEgdmFsdWUgb2Ygc29tZXRoaW5nIHRvIHdoaWNoIHBvaW50ZXIgY2FuCVwKKysgICAgICAgYmUgYXNzaWduZWQgKi8JCQkJCQkJXAorKyAgICBhY3RpdmVfcmVnX3QgdGhpc19yZWc7CQkJCQkJXAorKyAgICAJCQkJCQkJCQlcCisrICAgIERFQlVHX1NUQVRFTUVOVCAoZmFpbHVyZV9pZCsrKTsJCQkJCVwKKysgICAgREVCVUdfU1RBVEVNRU5UIChuZmFpbHVyZV9wb2ludHNfcHVzaGVkKyspOwkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIlxuUFVTSF9GQUlMVVJFX1BPSU5UICMldTpcbiIsIGZhaWx1cmVfaWQpOwkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIEJlZm9yZSBwdXNoLCBuZXh0IGF2YWlsOiAlZFxuIiwgKGZhaWxfc3RhY2spLmF2YWlsKTtcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgICAgICAgICAgICAgICAgICAgIHNpemU6ICVkXG4iLCAoZmFpbF9zdGFjaykuc2l6ZSk7XAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBzbG90cyBuZWVkZWQ6ICVsZFxuIiwgTlVNX0ZBSUxVUkVfSVRFTVMpOwkJXAorKyAgICBERUJVR19QUklOVDIgKCIgICAgIGF2YWlsYWJsZTogJWRcbiIsIFJFTUFJTklOR19BVkFJTF9TTE9UUyk7CVwKKysJCQkJCQkJCQlcCisrICAgIC8qIEVuc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHdoYXQgd2Ugd2lsbCBwdXNoLiAgKi8JXAorKyAgICB3aGlsZSAoUkVNQUlOSU5HX0FWQUlMX1NMT1RTIDwgTlVNX0ZBSUxVUkVfSVRFTVMpCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrICAgICAgICBpZiAoIURPVUJMRV9GQUlMX1NUQUNLIChmYWlsX3N0YWNrKSkJCQkJXAorKyAgICAgICAgICByZXR1cm4gZmFpbHVyZV9jb2RlOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgICBERUJVR19QUklOVDIgKCJcbiAgRG91YmxlZCBzdGFjazsgc2l6ZSBub3c6ICVkXG4iLAkJXAorKwkJICAgICAgIChmYWlsX3N0YWNrKS5zaXplKTsJCQkJXAorKyAgICAgICAgREVCVUdfUFJJTlQyICgiICBzbG90cyBhdmFpbGFibGU6ICVkXG4iLCBSRU1BSU5JTkdfQVZBSUxfU0xPVFMpO1wKKysgICAgICB9CQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgLyogUHVzaCB0aGUgaW5mbywgc3RhcnRpbmcgd2l0aCB0aGUgcmVnaXN0ZXJzLiAgKi8JCQlcCisrICAgIERFQlVHX1BSSU5UMSAoIlxuIik7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgaWYgKDEpCQkJCQkJCQlcCisrICAgICAgZm9yICh0aGlzX3JlZyA9IGxvd2VzdF9hY3RpdmVfcmVnOyB0aGlzX3JlZyA8PSBoaWdoZXN0X2FjdGl2ZV9yZWc7IFwKKysJICAgdGhpc19yZWcrKykJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIHJlZzogJWx1XG4iLCB0aGlzX3JlZyk7CQlcCisrCSAgREVCVUdfU1RBVEVNRU5UIChudW1fcmVnc19wdXNoZWQrKyk7CQkJCVwKKysJCQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICAgIHN0YXJ0OiAlcFxuIiwgcmVnc3RhcnRbdGhpc19yZWddKTsJCVwKKysJICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAocmVnc3RhcnRbdGhpc19yZWddKTsJCQlcCisrCQkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgICBlbmQ6ICVwXG4iLCByZWdlbmRbdGhpc19yZWddKTsJCVwKKysJICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAocmVnZW5kW3RoaXNfcmVnXSk7CQkJXAorKwkJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgICAgaW5mbzogJXBcbiAgICAgICIsCQkJCVwKKysJCQlyZWdfaW5mb1t0aGlzX3JlZ10ud29yZC5wb2ludGVyKTsJCVwKKysJICBERUJVR19QUklOVDIgKCIgbWF0Y2hfbnVsbD0lZCIsCQkJCVwKKysJCQlSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDIgKCIgYWN0aXZlPSVkIiwgSVNfQUNUSVZFIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBtYXRjaGVkX3NvbWV0aGluZz0lZCIsCQkJXAorKwkJCU1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBldmVyX21hdGNoZWQ9JWQiLAkJCQlcCisrCQkJRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDEgKCJcbiIpOwkJCQkJCVwKKysJICBQVVNIX0ZBSUxVUkVfRUxUIChyZWdfaW5mb1t0aGlzX3JlZ10ud29yZCk7CQkJXAorKwl9CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgIGxvdyBhY3RpdmUgcmVnOiAlbGRcbiIsIGxvd2VzdF9hY3RpdmVfcmVnKTtcCisrICAgIFBVU0hfRkFJTFVSRV9JTlQgKGxvd2VzdF9hY3RpdmVfcmVnKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIGhpZ2ggYWN0aXZlIHJlZzogJWxkXG4iLCBoaWdoZXN0X2FjdGl2ZV9yZWcpO1wKKysgICAgUFVTSF9GQUlMVVJFX0lOVCAoaGlnaGVzdF9hY3RpdmVfcmVnKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIHBhdHRlcm4gJXA6XG4iLCBwYXR0ZXJuX3BsYWNlKTsJCVwKKysgICAgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTiAoYnVmcCwgcGF0dGVybl9wbGFjZSwgcGVuZCk7CQlcCisrICAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChwYXR0ZXJuX3BsYWNlKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIHN0cmluZyAlcDogYCIsIHN0cmluZ19wbGFjZSk7CQlcCisrICAgIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKHN0cmluZ19wbGFjZSwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsICAgXAorKwkJCQkgc2l6ZTIpOwkJCQlcCisrICAgIERFQlVHX1BSSU5UMSAoIidcbiIpOwkJCQkJCVwKKysgICAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHN0cmluZ19wbGFjZSk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBmYWlsdXJlIGlkOiAldVxuIiwgZmFpbHVyZV9pZCk7CQlcCisrICAgIERFQlVHX1BVU0ggKGZhaWx1cmVfaWQpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrLyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIHB1c2hlZCBhbmQgcG9wcGVkIG9uIHRoZSBzdGFjaworKyAgIGZvciBlYWNoIHJlZ2lzdGVyLiAgKi8KKysjICBkZWZpbmUgTlVNX1JFR19JVEVNUyAgMworKworKy8qIEluZGl2aWR1YWwgaXRlbXMgYXNpZGUgZnJvbSB0aGUgcmVnaXN0ZXJzLiAgKi8KKysjICBpZmRlZiBERUJVRworKyMgICBkZWZpbmUgTlVNX05PTlJFR19JVEVNUyA1IC8qIEluY2x1ZGVzIGZhaWx1cmUgcG9pbnQgaWQuICAqLworKyMgIGVsc2UKKysjICAgZGVmaW5lIE5VTV9OT05SRUdfSVRFTVMgNAorKyMgIGVuZGlmCisrCisrLyogV2UgcHVzaCBhdCBtb3N0IHRoaXMgbWFueSBpdGVtcyBvbiB0aGUgc3RhY2suICAqLworKy8qIFdlIHVzZWQgdG8gdXNlIChudW1fcmVncyAtIDEpLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycworKyAgIHRoaXMgcmVnZXhwIHdpbGwgc2F2ZTsgYnV0IHRoYXQgd2FzIGNoYW5nZWQgdG8gNQorKyAgIHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93IGZvciBhIHJlZ2V4cCB3aXRoIGxvdHMgb2YgcGFyZW5zLiAgKi8KKysjICBkZWZpbmUgTUFYX0ZBSUxVUkVfSVRFTVMgKDUgKiBOVU1fUkVHX0lURU1TICsgTlVNX05PTlJFR19JVEVNUykKKysKKysvKiBXZSBhY3R1YWxseSBwdXNoIHRoaXMgbWFueSBpdGVtcy4gICovCisrIyAgZGVmaW5lIE5VTV9GQUlMVVJFX0lURU1TCQkJCVwKKysgICgoKDAJCQkJCQkJXAorKyAgICAgPyAwIDogaGlnaGVzdF9hY3RpdmVfcmVnIC0gbG93ZXN0X2FjdGl2ZV9yZWcgKyAxKQlcCisrICAgICogTlVNX1JFR19JVEVNUykJCQkJCVwKKysgICArIE5VTV9OT05SRUdfSVRFTVMpCisrCisrLyogSG93IG1hbnkgaXRlbXMgY2FuIHN0aWxsIGJlIGFkZGVkIHRvIHRoZSBzdGFjayB3aXRob3V0IG92ZXJmbG93aW5nIGl0LiAgKi8KKysjICBkZWZpbmUgUkVNQUlOSU5HX0FWQUlMX1NMT1RTICgoZmFpbF9zdGFjaykuc2l6ZSAtIChmYWlsX3N0YWNrKS5hdmFpbCkKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysKKysvKiBQb3BzIHdoYXQgUFVTSF9GQUlMX1NUQUNLIHB1c2hlcy4KKysKKysgICBXZSByZXN0b3JlIGludG8gdGhlIHBhcmFtZXRlcnMsIGFsbCBvZiB3aGljaCBzaG91bGQgYmUgbHZhbHVlczoKKysgICAgIFNUUiAtLSB0aGUgc2F2ZWQgZGF0YSBwb3NpdGlvbi4KKysgICAgIFBBVCAtLSB0aGUgc2F2ZWQgcGF0dGVybiBwb3NpdGlvbi4KKysgICAgIExPV19SRUcsIEhJR0hfUkVHIC0tIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QgYWN0aXZlIHJlZ2lzdGVycy4KKysgICAgIFJFR1NUQVJULCBSRUdFTkQgLS0gYXJyYXlzIG9mIHN0cmluZyBwb3NpdGlvbnMuCisrICAgICBSRUdfSU5GTyAtLSBhcnJheSBvZiBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHN1YmV4cHJlc3Npb24uCisrCisrICAgQWxzbyBhc3N1bWVzIHRoZSB2YXJpYWJsZXMgYGZhaWxfc3RhY2snIGFuZCAoaWYgZGVidWdnaW5nKSwgYGJ1ZnAnLAorKyAgIGBwZW5kJywgYHN0cmluZzEnLCBgc2l6ZTEnLCBgc3RyaW5nMicsIGFuZCBgc2l6ZTInLiAgKi8KKysjIGRlZmluZSBQT1BfRkFJTFVSRV9QT0lOVChzdHIsIHBhdCwgbG93X3JlZywgaGlnaF9yZWcsIHJlZ3N0YXJ0LCByZWdlbmQsIHJlZ19pbmZvKVwKKyt7CQkJCQkJCQkJXAorKyAgREVCVUdfU1RBVEVNRU5UICh1bnNpZ25lZCBmYWlsdXJlX2lkOykJCQkJXAorKyAgYWN0aXZlX3JlZ190IHRoaXNfcmVnOwkJCQkJCVwKKysgIGNvbnN0IFVDSEFSX1QgKnN0cmluZ190ZW1wOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICBhc3NlcnQgKCFGQUlMX1NUQUNLX0VNUFRZICgpKTsJCQkJCVwKKysJCQkJCQkJCQlcCisrICAvKiBSZW1vdmUgZmFpbHVyZSBwb2ludHMgYW5kIHBvaW50IHRvIGhvdyBtYW55IHJlZ3MgcHVzaGVkLiAgKi8JXAorKyAgREVCVUdfUFJJTlQxICgiUE9QX0ZBSUxVUkVfUE9JTlQ6XG4iKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBCZWZvcmUgcG9wLCBuZXh0IGF2YWlsOiAlZFxuIiwgZmFpbF9zdGFjay5hdmFpbCk7CVwKKysgIERFQlVHX1BSSU5UMiAoIiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJWRcbiIsIGZhaWxfc3RhY2suc2l6ZSk7CVwKKysJCQkJCQkJCQlcCisrICBhc3NlcnQgKGZhaWxfc3RhY2suYXZhaWwgPj0gTlVNX05PTlJFR19JVEVNUyk7CQkJXAorKwkJCQkJCQkJCVwKKysgIERFQlVHX1BPUCAoJmZhaWx1cmVfaWQpOwkJCQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBmYWlsdXJlIGlkOiAldVxuIiwgZmFpbHVyZV9pZCk7CQlcCisrCQkJCQkJCQkJXAorKyAgLyogSWYgdGhlIHNhdmVkIHN0cmluZyBsb2NhdGlvbiBpcyBOVUxMLCBpdCBjYW1lIGZyb20gYW4JCVwKKysgICAgIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCBvcGNvZGUsIGFuZCB3ZSB3YW50IHRvIHRocm93IGF3YXkgdGhlCVwKKysgICAgIHNhdmVkIE5VTEwsIHRodXMgcmV0YWluaW5nIG91ciBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJpbmcuICAqLwlcCisrICBzdHJpbmdfdGVtcCA9IFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CQkJCQlcCisrICBpZiAoc3RyaW5nX3RlbXAgIT0gTlVMTCkJCQkJCQlcCisrICAgIHN0ciA9IChjb25zdCBDSEFSX1QgKikgc3RyaW5nX3RlbXA7CQkJCQlcCisrCQkJCQkJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIHN0cmluZyAlcDogYCIsIHN0cik7CQkJCVwKKysgIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKHN0ciwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyKTsJXAorKyAgREVCVUdfUFJJTlQxICgiJ1xuIik7CQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICBwYXQgPSAoVUNIQVJfVCAqKSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgcGF0dGVybiAlcDpcbiIsIHBhdCk7CQkJXAorKyAgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTiAoYnVmcCwgcGF0LCBwZW5kKTsJCQlcCisrCQkJCQkJCQkJXAorKyAgLyogUmVzdG9yZSByZWdpc3RlciBpbmZvLiAgKi8JCQkJCQlcCisrICBoaWdoX3JlZyA9IChhY3RpdmVfcmVnX3QpIFBPUF9GQUlMVVJFX0lOVCAoKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIGhpZ2ggYWN0aXZlIHJlZzogJWxkXG4iLCBoaWdoX3JlZyk7CQlcCisrCQkJCQkJCQkJXAorKyAgbG93X3JlZyA9IChhY3RpdmVfcmVnX3QpIFBPUF9GQUlMVVJFX0lOVCAoKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nICBsb3cgYWN0aXZlIHJlZzogJWxkXG4iLCBsb3dfcmVnKTsJCVwKKysJCQkJCQkJCQlcCisrICBpZiAoMSkJCQkJCQkJCVwKKysgICAgZm9yICh0aGlzX3JlZyA9IGhpZ2hfcmVnOyB0aGlzX3JlZyA+PSBsb3dfcmVnOyB0aGlzX3JlZy0tKQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCURFQlVHX1BSSU5UMiAoIiAgICBQb3BwaW5nIHJlZzogJWxkXG4iLCB0aGlzX3JlZyk7CQlcCisrCQkJCQkJCQkJXAorKwlyZWdfaW5mb1t0aGlzX3JlZ10ud29yZCA9IFBPUF9GQUlMVVJFX0VMVCAoKTsJCQlcCisrCURFQlVHX1BSSU5UMiAoIiAgICAgIGluZm86ICVwXG4iLAkJCQlcCisrCQkgICAgICByZWdfaW5mb1t0aGlzX3JlZ10ud29yZC5wb2ludGVyKTsJCQlcCisrCQkJCQkJCQkJXAorKwlyZWdlbmRbdGhpc19yZWddID0gKGNvbnN0IENIQVJfVCAqKSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwlcCisrCURFQlVHX1BSSU5UMiAoIiAgICAgIGVuZDogJXBcbiIsIHJlZ2VuZFt0aGlzX3JlZ10pOwkJXAorKwkJCQkJCQkJCVwKKysJcmVnc3RhcnRbdGhpc19yZWddID0gKGNvbnN0IENIQVJfVCAqKSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwlcCisrCURFQlVHX1BSSU5UMiAoIiAgICAgIHN0YXJ0OiAlcFxuIiwgcmVnc3RhcnRbdGhpc19yZWddKTsJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgZWxzZQkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBmb3IgKHRoaXNfcmVnID0gaGlnaGVzdF9hY3RpdmVfcmVnOyB0aGlzX3JlZyA+IGhpZ2hfcmVnOyB0aGlzX3JlZy0tKSBcCisrCXsJCQkJCQkJCVwKKysJICByZWdfaW5mb1t0aGlzX3JlZ10ud29yZC5pbnRlZ2VyID0gMDsJCQkJXAorKwkgIHJlZ2VuZFt0aGlzX3JlZ10gPSAwOwkJCQkJCVwKKysJICByZWdzdGFydFt0aGlzX3JlZ10gPSAwOwkJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gaGlnaF9yZWc7CQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsJCQkJCQlcCisrICBERUJVR19TVEFURU1FTlQgKG5mYWlsdXJlX3BvaW50c19wb3BwZWQrKyk7CQkJCVwKKyt9IC8qIFBPUF9GQUlMVVJFX1BPSU5UICovCisrDAorKy8qIFN0cnVjdHVyZSBmb3IgcGVyLXJlZ2lzdGVyIChhLmsuYS4gcGVyLWdyb3VwKSBpbmZvcm1hdGlvbi4KKysgICBPdGhlciByZWdpc3RlciBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUKKysgICBzdGFydGluZyBhbmQgZW5kaW5nIHBvc2l0aW9ucyAod2hpY2ggYXJlIGFkZHJlc3NlcyksIGFuZCB0aGUgbGlzdCBvZgorKyAgIGlubmVyIGdyb3VwcyAod2hpY2ggaXMgYSBiaXRzIGxpc3QpIGFyZSBtYWludGFpbmVkIGluIHNlcGFyYXRlCisrICAgdmFyaWFibGVzLgorKworKyAgIFdlIGFyZSBtYWtpbmcgYSAoc3RyaWN0bHkgc3BlYWtpbmcpIG5vbnBvcnRhYmxlIGFzc3VtcHRpb24gaGVyZTogdGhhdAorKyAgIHRoZSBjb21waWxlciB3aWxsIHBhY2sgb3VyIGJpdCBmaWVsZHMgaW50byBzb21ldGhpbmcgdGhhdCBmaXRzIGludG8KKysgICB0aGUgdHlwZSBvZiBgd29yZCcsIGkuZS4sIGlzIHNvbWV0aGluZyB0aGF0IGZpdHMgaW50byBvbmUgaXRlbSBvbiB0aGUKKysgICBmYWlsdXJlIHN0YWNrLiAgKi8KKysKKysKKysvKiBEZWNsYXJhdGlvbnMgYW5kIG1hY3JvcyBmb3IgcmVfbWF0Y2hfMi4gICovCisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSB3b3JkOworKyAgc3RydWN0CisrICB7CisrICAgICAgLyogVGhpcyBmaWVsZCBpcyBvbmUgaWYgdGhpcyBncm91cCBjYW4gbWF0Y2ggdGhlIGVtcHR5IHN0cmluZywKKysgICAgICAgICB6ZXJvIGlmIG5vdC4gIElmIG5vdCB5ZXQgZGV0ZXJtaW5lZCwgIGBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFJy4gICovCisrIyBkZWZpbmUgTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRSAzCisrICAgIHVuc2lnbmVkIG1hdGNoX251bGxfc3RyaW5nX3AgOiAyOworKyAgICB1bnNpZ25lZCBpc19hY3RpdmUgOiAxOworKyAgICB1bnNpZ25lZCBtYXRjaGVkX3NvbWV0aGluZyA6IDE7CisrICAgIHVuc2lnbmVkIGV2ZXJfbWF0Y2hlZF9zb21ldGhpbmcgOiAxOworKyAgfSBiaXRzOworK30gUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSk7CisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgZGVmaW5lIFJFR19NQVRDSF9OVUxMX1NUUklOR19QKFIpICAoKFIpLmJpdHMubWF0Y2hfbnVsbF9zdHJpbmdfcCkKKysjICBkZWZpbmUgSVNfQUNUSVZFKFIpICAoKFIpLmJpdHMuaXNfYWN0aXZlKQorKyMgIGRlZmluZSBNQVRDSEVEX1NPTUVUSElORyhSKSAgKChSKS5iaXRzLm1hdGNoZWRfc29tZXRoaW5nKQorKyMgIGRlZmluZSBFVkVSX01BVENIRURfU09NRVRISU5HKFIpICAoKFIpLmJpdHMuZXZlcl9tYXRjaGVkX3NvbWV0aGluZykKKysKKysKKysvKiBDYWxsIHRoaXMgd2hlbiBoYXZlIG1hdGNoZWQgYSByZWFsIGNoYXJhY3RlcjsgaXQgc2V0cyBgbWF0Y2hlZCcgZmxhZ3MKKysgICBmb3IgdGhlIHN1YmV4cHJlc3Npb25zIHdoaWNoIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlLiAgQWxzbyByZWNvcmRzCisrICAgdGhhdCB0aG9zZSBzdWJleHBycyBoYXZlIG1hdGNoZWQuICAqLworKyMgIGRlZmluZSBTRVRfUkVHU19NQVRDSEVEKCkJCQkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBpZiAoIXNldF9yZWdzX21hdGNoZWRfZG9uZSkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkgIGFjdGl2ZV9yZWdfdCByOwkJCQkJCVwKKysJICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAxOwkJCQkJXAorKwkgIGZvciAociA9IGxvd2VzdF9hY3RpdmVfcmVnOyByIDw9IGhpZ2hlc3RfYWN0aXZlX3JlZzsgcisrKQlcCisrCSAgICB7CQkJCQkJCQlcCisrCSAgICAgIE1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1tyXSkJCQkJXAorKwkJPSBFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1tyXSkJCQlcCisrCQk9IDE7CQkJCQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrLyogUmVnaXN0ZXJzIGFyZSBzZXQgdG8gYSBzZW50aW5lbCB3aGVuIHRoZXkgaGF2ZW4ndCB5ZXQgbWF0Y2hlZC4gICovCisrc3RhdGljIENIQVJfVCBQUkVGSVgocmVnX3Vuc2V0X2R1bW15KTsKKysjIGRlZmluZSBSRUdfVU5TRVRfVkFMVUUgKCZQUkVGSVgocmVnX3Vuc2V0X2R1bW15KSkKKysjIGRlZmluZSBSRUdfVU5TRVQoZSkgKChlKSA9PSBSRUdfVU5TRVRfVkFMVUUpCisrCisrLyogU3Vicm91dGluZSBkZWNsYXJhdGlvbnMgYW5kIG1hY3JvcyBmb3IgcmVnZXhfY29tcGlsZS4gICovCisrc3RhdGljIHZvaWQgUFJFRklYKHN0b3JlX29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcpOworK3N0YXRpYyB2b2lkIFBSRUZJWChzdG9yZV9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMSwgaW50IGFyZzIpOworK3N0YXRpYyB2b2lkIFBSRUZJWChpbnNlcnRfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcsIFVDSEFSX1QgKmVuZCk7Cisrc3RhdGljIHZvaWQgUFJFRklYKGluc2VydF9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzEsIGludCBhcmcyLCBVQ0hBUl9UICplbmQpOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChhdF9iZWdsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwYXR0ZXJuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGF0X2VuZGxpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKysjIGlmZGVmIFdDSEFSCisrc3RhdGljIHJlZ19lcnJjb2RlX3Qgd2NzX2NvbXBpbGVfcmFuZ2UgKENIQVJfVCByYW5nZV9zdGFydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICpiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFSX1QgKmNoYXJfc2V0KTsKKytzdGF0aWMgdm9pZCBpbnNlcnRfc3BhY2UgKGludCBudW0sIENIQVJfVCAqbG9jLCBDSEFSX1QgKmVuZCk7CisrIyBlbHNlIC8qIEJZVEUgKi8KKytzdGF0aWMgcmVnX2VycmNvZGVfdCBieXRlX2NvbXBpbGVfcmFuZ2UgKHVuc2lnbmVkIGludCByYW5nZV9zdGFydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYik7CisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIEZldGNoIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuLS0tdHJhbnNsYXRpbmcgaXQKKysgICBpZiBuZWNlc3NhcnkuICBBbHNvIGNhc3QgZnJvbSBhIHNpZ25lZCBjaGFyYWN0ZXIgaW4gdGhlIGNvbnN0YW50CisrICAgc3RyaW5nIHBhc3NlZCB0byB1cyBieSB0aGUgdXNlciB0byBhbiB1bnNpZ25lZCBjaGFyIHRoYXQgd2UgY2FuIHVzZQorKyAgIGFzIGFuIGFycmF5IGluZGV4IChpbiwgZS5nLiwgYHRyYW5zbGF0ZScpLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2UgdHJhbnNsYXRlIG9ubHkgaWYgY2hhcmFjdGVyIDw9IDB4ZmYsCisrICAgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGFsbG9jYXRlIDRHQiBhcnJheSBmb3Igc29tZSBlbmNvZGluZ3MKKysgICB3aGljaCBoYXZlIDQgYnl0ZSBjaGFyYWN0ZXJfc2V0IGxpa2UgVUNTNC4gICovCisrIyBpZm5kZWYgUEFURkVUQ0gKKysjICBpZmRlZiBXQ0hBUgorKyMgICBkZWZpbmUgUEFURkVUQ0goYykJCQkJCQkJXAorKyAgZG8ge2lmIChwID09IHBlbmQpIHJldHVybiBSRUdfRUVORDsJCQkJCVwKKysgICAgYyA9IChVQ0hBUl9UKSAqcCsrOwkJCQkJCQlcCisrICAgIGlmICh0cmFuc2xhdGUgJiYgKGMgPD0gMHhmZikpIGMgPSAoVUNIQVJfVCkgdHJhbnNsYXRlW2NdOwkJXAorKyAgfSB3aGlsZSAoMCkKKysjICBlbHNlIC8qIEJZVEUgKi8KKysjICAgZGVmaW5lIFBBVEZFVENIKGMpCQkJCQkJCVwKKysgIGRvIHtpZiAocCA9PSBwZW5kKSByZXR1cm4gUkVHX0VFTkQ7CQkJCQlcCisrICAgIGMgPSAodW5zaWduZWQgY2hhcikgKnArKzsJCQkJCQlcCisrICAgIGlmICh0cmFuc2xhdGUpIGMgPSAodW5zaWduZWQgY2hhcikgdHJhbnNsYXRlW2NdOwkJCVwKKysgIH0gd2hpbGUgKDApCisrIyAgZW5kaWYgLyogV0NIQVIgKi8KKysjIGVuZGlmCisrCisrLyogRmV0Y2ggdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4sIHdpdGggbm8KKysgICB0cmFuc2xhdGlvbi4gICovCisrIyBkZWZpbmUgUEFURkVUQ0hfUkFXKGMpCQkJCQkJXAorKyAgZG8ge2lmIChwID09IHBlbmQpIHJldHVybiBSRUdfRUVORDsJCQkJCVwKKysgICAgYyA9IChVQ0hBUl9UKSAqcCsrOyAJICAgICAgIAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysvKiBHbyBiYWNrd2FyZHMgb25lIGNoYXJhY3RlciBpbiB0aGUgcGF0dGVybi4gICovCisrIyBkZWZpbmUgUEFUVU5GRVRDSCBwLS0KKysKKysKKysvKiBJZiBgdHJhbnNsYXRlJyBpcyBub24tbnVsbCwgcmV0dXJuIHRyYW5zbGF0ZVtEXSwgZWxzZSBqdXN0IEQuICBXZQorKyAgIGNhc3QgdGhlIHN1YnNjcmlwdCB0byB0cmFuc2xhdGUgYmVjYXVzZSBzb21lIGRhdGEgaXMgZGVjbGFyZWQgYXMKKysgICBgY2hhciAqJywgdG8gYXZvaWQgd2FybmluZ3Mgd2hlbiBhIHN0cmluZyBjb25zdGFudCBpcyBwYXNzZWQuICBCdXQKKysgICB3aGVuIHdlIHVzZSBhIGNoYXJhY3RlciBhcyBhIHN1YnNjcmlwdCB3ZSBtdXN0IG1ha2UgaXQgdW5zaWduZWQuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSB0cmFuc2xhdGUgb25seSBpZiBjaGFyYWN0ZXIgPD0gMHhmZiwKKysgICBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgdG8gYWxsb2NhdGUgNEdCIGFycmF5IGZvciBzb21lIGVuY29kaW5ncworKyAgIHdoaWNoIGhhdmUgNCBieXRlIGNoYXJhY3Rlcl9zZXQgbGlrZSBVQ1M0LiAgKi8KKysKKysjIGlmbmRlZiBUUkFOU0xBVEUKKysjICBpZmRlZiBXQ0hBUgorKyMgICBkZWZpbmUgVFJBTlNMQVRFKGQpIFwKKysgICgodHJhbnNsYXRlICYmICgoVUNIQVJfVCkgKGQpKSA8PSAweGZmKSBcCisrICAgPyAoY2hhcikgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAoZCldIDogKGQpKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgIGRlZmluZSBUUkFOU0xBVEUoZCkgXAorKyAgKHRyYW5zbGF0ZSA/IChjaGFyKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpIChkKV0gOiAoY2hhcikgKGQpKQorKyMgIGVuZGlmIC8qIFdDSEFSICovCisrIyBlbmRpZgorKworKworKy8qIE1hY3JvcyBmb3Igb3V0cHV0dGluZyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbnRvIGBidWZmZXInLiAgKi8KKysKKysvKiBJZiB0aGUgYnVmZmVyIGlzbid0IGFsbG9jYXRlZCB3aGVuIGl0IGNvbWVzIGluLCB1c2UgdGhpcy4gICovCisrIyBkZWZpbmUgSU5JVF9CVUZfU0laRSAgKDMyICogc2l6ZW9mKFVDSEFSX1QpKQorKworKy8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IE4gbW9yZSBieXRlcyBvZiBzcGFjZSBpbiBidWZmZXIuICAqLworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgR0VUX0JVRkZFUl9TUEFDRShuKQkJCQkJCVwKKysgICAgd2hpbGUgKCgodW5zaWduZWQgbG9uZyliIC0gKHVuc2lnbmVkIGxvbmcpQ09NUElMRURfQlVGRkVSX1ZBUglcCisrICAgICAgICAgICAgKyAobikqc2l6ZW9mKENIQVJfVCkpID4gYnVmcC0+YWxsb2NhdGVkKQkJCVwKKysgICAgICBFWFRFTkRfQlVGRkVSICgpCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgR0VUX0JVRkZFUl9TUEFDRShuKQkJCQkJCVwKKysgICAgd2hpbGUgKCh1bnNpZ25lZCBsb25nKSAoYiAtIGJ1ZnAtPmJ1ZmZlciArIChuKSkgPiBidWZwLT5hbGxvY2F0ZWQpCVwKKysgICAgICBFWFRFTkRfQlVGRkVSICgpCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBtb3JlIGJ5dGUgb2YgYnVmZmVyIHNwYWNlIGFuZCB0aGVuIGFkZCBDIHRvIGl0LiAgKi8KKysjIGRlZmluZSBCVUZfUFVTSChjKQkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBHRVRfQlVGRkVSX1NQQUNFICgxKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrCisrLyogRW5zdXJlIHdlIGhhdmUgdHdvIG1vcmUgYnl0ZXMgb2YgYnVmZmVyIHNwYWNlIGFuZCB0aGVuIGFwcGVuZCBDMSBhbmQgQzIuICAqLworKyMgZGVmaW5lIEJVRl9QVVNIXzIoYzEsIGMyKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDIpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzEpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzIpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrCisrLyogQXMgd2l0aCBCVUZfUFVTSF8yLCBleGNlcHQgZm9yIHRocmVlIGJ5dGVzLiAgKi8KKysjIGRlZmluZSBCVUZfUFVTSF8zKGMxLCBjMiwgYzMpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgR0VUX0JVRkZFUl9TUEFDRSAoMyk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMSk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMik7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMyk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysvKiBTdG9yZSBhIGp1bXAgd2l0aCBvcGNvZGUgT1AgYXQgTE9DIHRvIGxvY2F0aW9uIFRPLiAgV2Ugc3RvcmUgYQorKyAgIHJlbGF0aXZlIGFkZHJlc3Mgb2Zmc2V0IGJ5IHRoZSB0aHJlZSBieXRlcyB0aGUganVtcCBpdHNlbGYgb2NjdXBpZXMuICAqLworKyMgZGVmaW5lIFNUT1JFX0pVTVAob3AsIGxvYywgdG8pIFwKKysgUFJFRklYKHN0b3JlX29wMSkgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSkKKysKKysvKiBMaWtld2lzZSwgZm9yIGEgdHdvLWFyZ3VtZW50IGp1bXAuICAqLworKyMgZGVmaW5lIFNUT1JFX0pVTVAyKG9wLCBsb2MsIHRvLCBhcmcpIFwKKysgIFBSRUZJWChzdG9yZV9vcDIpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSksIGFyZykKKysKKysvKiBMaWtlIGBTVE9SRV9KVU1QJywgYnV0IGZvciBpbnNlcnRpbmcuICBBc3N1bWUgYGInIGlzIHRoZSBidWZmZXIgZW5kLiAgKi8KKysjIGRlZmluZSBJTlNFUlRfSlVNUChvcCwgbG9jLCB0bykgXAorKyAgUFJFRklYKGluc2VydF9vcDEpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSksIGIpCisrCisrLyogTGlrZSBgU1RPUkVfSlVNUDInLCBidXQgZm9yIGluc2VydGluZy4gIEFzc3VtZSBgYicgaXMgdGhlIGJ1ZmZlciBlbmQuICAqLworKyMgZGVmaW5lIElOU0VSVF9KVU1QMihvcCwgbG9jLCB0bywgYXJnKSBcCisrICBQUkVGSVgoaW5zZXJ0X29wMikgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSxcCisrCSAgICAgIGFyZywgYikKKysKKysvKiBUaGlzIGlzIG5vdCBhbiBhcmJpdHJhcnkgbGltaXQ6IHRoZSBhcmd1bWVudHMgd2hpY2ggcmVwcmVzZW50IG9mZnNldHMKKysgICBpbnRvIHRoZSBwYXR0ZXJuIGFyZSB0d28gYnl0ZXMgbG9uZy4gIFNvIGlmIDJeMTYgYnl0ZXMgdHVybnMgb3V0IHRvCisrICAgYmUgdG9vIHNtYWxsLCBtYW55IHRoaW5ncyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4gICovCisrLyogQW55IG90aGVyIGNvbXBpbGVyIHdoaWNoLCBsaWtlIE1TQywgaGFzIGFsbG9jYXRpb24gbGltaXQgYmVsb3cgMl4xNgorKyAgIGJ5dGVzIHdpbGwgaGF2ZSB0byB1c2UgYXBwcm9hY2ggc2ltaWxhciB0byB3aGF0IHdhcyBkb25lIGJlbG93IGZvcgorKyAgIE1TQyBhbmQgZHJvcCBNQVhfQlVGX1NJWkUgYSBiaXQuICBPdGhlcndpc2UgeW91IG1heSBlbmQgdXAKKysgICByZWFsbG9jYXRpbmcgdG8gMCBieXRlcy4gIFN1Y2ggdGhpbmcgaXMgbm90IGdvaW5nIHRvIHdvcmsgdG9vIHdlbGwuCisrICAgWW91IGhhdmUgYmVlbiB3YXJuZWQhISAgKi8KKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBpZiBkZWZpbmVkIF9NU0NfVkVSICAmJiAhZGVmaW5lZCBXSU4zMgorKy8qIE1pY3Jvc29mdCBDIDE2LWJpdCB2ZXJzaW9ucyBsaW1pdCBtYWxsb2MgdG8gYXBwcm94IDY1NTEyIGJ5dGVzLgorKyAgIFRoZSBSRUFMTE9DIGRlZmluZSBlbGltaW5hdGVzIGEgZmx1cnJ5IG9mIGNvbnZlcnNpb24gd2FybmluZ3MsCisrICAgYnV0IGlzIG5vdCByZXF1aXJlZC4gKi8KKysjICAgZGVmaW5lIE1BWF9CVUZfU0laRSAgNjU1MDBMCisrIyAgIGRlZmluZSBSRUFMTE9DKHAscykgcmVhbGxvYyAoKHApLCAoc2l6ZV90KSAocykpCisrIyAgZWxzZQorKyMgICBkZWZpbmUgTUFYX0JVRl9TSVpFICgxTCA8PCAxNikKKysjICAgZGVmaW5lIFJFQUxMT0MocCxzKSByZWFsbG9jICgocCksIChzKSkKKysjICBlbmRpZgorKworKy8qIEV4dGVuZCB0aGUgYnVmZmVyIGJ5IHR3aWNlIGl0cyBjdXJyZW50IHNpemUgdmlhIHJlYWxsb2MgYW5kCisrICAgcmVzZXQgdGhlIHBvaW50ZXJzIHRoYXQgcG9pbnRlZCBpbnRvIHRoZSBvbGQgYmxvY2sgdG8gcG9pbnQgdG8gdGhlCisrICAgY29ycmVjdCBwbGFjZXMgaW4gdGhlIG5ldyBvbmUuICBJZiBleHRlbmRpbmcgdGhlIGJ1ZmZlciByZXN1bHRzIGluIGl0CisrICAgYmVpbmcgbGFyZ2VyIHRoYW4gTUFYX0JVRl9TSVpFLCB0aGVuIGZsYWcgbWVtb3J5IGV4aGF1c3RlZC4gICovCisrIyAgaWZuZGVmIF9fQk9VTkRFRF9QT0lOVEVSU19fCisrIyAgICBkZWZpbmUgX19CT1VOREVEX1BPSU5URVJTX18gMAorKyMgIGVuZGlmCisrIyAgaWYgX19CT1VOREVEX1BPSU5URVJTX18KKysjICAgZGVmaW5lIFNFVF9ISUdIX0JPVU5EKFApIChfX3B0cmhpZ2ggKFApID0gX19wdHJsb3cgKFApICsgYnVmcC0+YWxsb2NhdGVkKQorKyMgICBkZWZpbmUgTU9WRV9CVUZGRVJfUE9JTlRFUihQKSBcCisrICAoX19wdHJsb3cgKFApICs9IGluY3IsIFNFVF9ISUdIX0JPVU5EIChQKSwgX19wdHJ2YWx1ZSAoUCkgKz0gaW5jcikKKysjICAgZGVmaW5lIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECVwKKysgIGVsc2UJCQkJCQlcCisrICAgIHsJCQkJCQlcCisrICAgICAgU0VUX0hJR0hfQk9VTkQgKGIpOwkJCVwKKysgICAgICBTRVRfSElHSF9CT1VORCAoYmVnYWx0KTsJCQlcCisrICAgICAgaWYgKGZpeHVwX2FsdF9qdW1wKQkJCVwKKysJU0VUX0hJR0hfQk9VTkQgKGZpeHVwX2FsdF9qdW1wKTsJXAorKyAgICAgIGlmIChsYXN0c3RhcnQpCQkJCVwKKysJU0VUX0hJR0hfQk9VTkQgKGxhc3RzdGFydCk7CQlcCisrICAgICAgaWYgKHBlbmRpbmdfZXhhY3QpCQkJXAorKwlTRVRfSElHSF9CT1VORCAocGVuZGluZ19leGFjdCk7CQlcCisrICAgIH0KKysjICBlbHNlCisrIyAgIGRlZmluZSBNT1ZFX0JVRkZFUl9QT0lOVEVSKFApIChQKSArPSBpbmNyCisrIyAgIGRlZmluZSBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAorKyMgIGVuZGlmCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBFWFRFTkRfQlVGRkVSKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBVQ0hBUl9UICpvbGRfYnVmZmVyID0gQ09NUElMRURfQlVGRkVSX1ZBUjsJCQkJXAorKyAgICBpbnQgd2NoYXJfY291bnQ7CQkJCQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCArIHNpemVvZihVQ0hBUl9UKSA+IE1BWF9CVUZfU0laRSkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTSVpFOwkJCQkJCQlcCisrICAgIGJ1ZnAtPmFsbG9jYXRlZCA8PD0gMTsJCQkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgPiBNQVhfQlVGX1NJWkUpCQkJCQlcCisrICAgICAgYnVmcC0+YWxsb2NhdGVkID0gTUFYX0JVRl9TSVpFOwkJCQkJXAorKyAgICAvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBuZXcgYnVmZmVyIGNhbiBoYXZlPyAgKi8JCQlcCisrICAgIHdjaGFyX2NvdW50ID0gYnVmcC0+YWxsb2NhdGVkIC8gc2l6ZW9mKFVDSEFSX1QpOwkJCVwKKysgICAgaWYgKHdjaGFyX2NvdW50ID09IDApIHdjaGFyX2NvdW50ID0gMTsJCQkJXAorKyAgICAvKiBUcnVuY2F0ZSB0aGUgYnVmZmVyIHRvIENIQVJfVCBhbGlnbi4gICovCQkJXAorKyAgICBidWZwLT5hbGxvY2F0ZWQgPSB3Y2hhcl9jb3VudCAqIHNpemVvZihVQ0hBUl9UKTsJCQlcCisrICAgIFJFVEFMTE9DIChDT01QSUxFRF9CVUZGRVJfVkFSLCB3Y2hhcl9jb3VudCwgVUNIQVJfVCk7CQlcCisrICAgIGJ1ZnAtPmJ1ZmZlciA9IChjaGFyKilDT01QSUxFRF9CVUZGRVJfVkFSOwkJCQlcCisrICAgIGlmIChDT01QSUxFRF9CVUZGRVJfVkFSID09IE5VTEwpCQkJCQlcCisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CQkJCQkJXAorKyAgICAvKiBJZiB0aGUgYnVmZmVyIG1vdmVkLCBtb3ZlIGFsbCB0aGUgcG9pbnRlcnMgaW50byBpdC4gICovCQlcCisrICAgIGlmIChvbGRfYnVmZmVyICE9IENPTVBJTEVEX0JVRkZFUl9WQVIpCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlpbnQgaW5jciA9IENPTVBJTEVEX0JVRkZFUl9WQVIgLSBvbGRfYnVmZmVyOwkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYik7CQkJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGJlZ2FsdCk7CQkJCQlcCisrCWlmIChmaXh1cF9hbHRfanVtcCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAoZml4dXBfYWx0X2p1bXApOwkJCQlcCisrCWlmIChsYXN0c3RhcnQpCQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChsYXN0c3RhcnQpOwkJCQlcCisrCWlmIChwZW5kaW5nX2V4YWN0KQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChwZW5kaW5nX2V4YWN0KTsJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEVYVEVORF9CVUZGRVIoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFVDSEFSX1QgKm9sZF9idWZmZXIgPSBDT01QSUxFRF9CVUZGRVJfVkFSOwkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgPT0gTUFYX0JVRl9TSVpFKQkJCQlcCisrICAgICAgcmV0dXJuIFJFR19FU0laRTsJCQkJCQkJXAorKyAgICBidWZwLT5hbGxvY2F0ZWQgPDw9IDE7CQkJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkID4gTUFYX0JVRl9TSVpFKQkJCQkJXAorKyAgICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IE1BWF9CVUZfU0laRTsJCQkJCVwKKysgICAgYnVmcC0+YnVmZmVyID0gKFVDSEFSX1QgKikgUkVBTExPQyAoQ09NUElMRURfQlVGRkVSX1ZBUiwJCVwKKysJCQkJCQlidWZwLT5hbGxvY2F0ZWQpOwlcCisrICAgIGlmIChDT01QSUxFRF9CVUZGRVJfVkFSID09IE5VTEwpCQkJCQlcCisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CQkJCQkJXAorKyAgICAvKiBJZiB0aGUgYnVmZmVyIG1vdmVkLCBtb3ZlIGFsbCB0aGUgcG9pbnRlcnMgaW50byBpdC4gICovCQlcCisrICAgIGlmIChvbGRfYnVmZmVyICE9IENPTVBJTEVEX0JVRkZFUl9WQVIpCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlpbnQgaW5jciA9IENPTVBJTEVEX0JVRkZFUl9WQVIgLSBvbGRfYnVmZmVyOwkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYik7CQkJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGJlZ2FsdCk7CQkJCQlcCisrCWlmIChmaXh1cF9hbHRfanVtcCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAoZml4dXBfYWx0X2p1bXApOwkJCQlcCisrCWlmIChsYXN0c3RhcnQpCQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChsYXN0c3RhcnQpOwkJCQlcCisrCWlmIChwZW5kaW5nX2V4YWN0KQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChwZW5kaW5nX2V4YWN0KTsJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysvKiBTaW5jZSB3ZSBoYXZlIG9uZSBieXRlIHJlc2VydmVkIGZvciB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFyZ3VtZW50IHRvCisrICAge3N0YXJ0LHN0b3B9X21lbW9yeSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGdyb3VwcyB3ZSBjYW4gcmVwb3J0CisrICAgdGhpbmdzIGFib3V0IGlzIHdoYXQgZml0cyBpbiB0aGF0IGJ5dGUuICAqLworKyMgIGRlZmluZSBNQVhfUkVHTlVNIDI1NQorKworKy8qIEJ1dCBwYXR0ZXJucyBjYW4gaGF2ZSBtb3JlIHRoYW4gYE1BWF9SRUdOVU0nIHJlZ2lzdGVycy4gIFdlIGp1c3QKKysgICBpZ25vcmUgdGhlIGV4Y2Vzcy4gICovCisrdHlwZWRlZiB1bnNpZ25lZCByZWdudW1fdDsKKysKKysKKysvKiBNYWNyb3MgZm9yIHRoZSBjb21waWxlIHN0YWNrLiAgKi8KKysKKysvKiBTaW5jZSBvZmZzZXRzIGNhbiBnbyBlaXRoZXIgZm9yd2FyZHMgb3IgYmFja3dhcmRzLCB0aGlzIHR5cGUgbmVlZHMgdG8KKysgICBiZSBhYmxlIHRvIGhvbGQgdmFsdWVzIGZyb20gLShNQVhfQlVGX1NJWkUgLSAxKSB0byBNQVhfQlVGX1NJWkUgLSAxLiAgKi8KKysvKiBpbnQgbWF5IGJlIG5vdCBlbm91Z2ggd2hlbiBzaXplb2YoaW50KSA9PSAyLiAgKi8KKyt0eXBlZGVmIGxvbmcgcGF0dGVybl9vZmZzZXRfdDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHBhdHRlcm5fb2Zmc2V0X3QgYmVnYWx0X29mZnNldDsKKysgIHBhdHRlcm5fb2Zmc2V0X3QgZml4dXBfYWx0X2p1bXA7CisrICBwYXR0ZXJuX29mZnNldF90IGlubmVyX2dyb3VwX29mZnNldDsKKysgIHBhdHRlcm5fb2Zmc2V0X3QgbGFzdHN0YXJ0X29mZnNldDsKKysgIHJlZ251bV90IHJlZ251bTsKKyt9IGNvbXBpbGVfc3RhY2tfZWx0X3Q7CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb21waWxlX3N0YWNrX2VsdF90ICpzdGFjazsKKysgIHVuc2lnbmVkIHNpemU7CisrICB1bnNpZ25lZCBhdmFpbDsJCQkvKiBPZmZzZXQgb2YgbmV4dCBvcGVuIHBvc2l0aW9uLiAgKi8KKyt9IGNvbXBpbGVfc3RhY2tfdHlwZTsKKysKKysKKysjICBkZWZpbmUgSU5JVF9DT01QSUxFX1NUQUNLX1NJWkUgMzIKKysKKysjICBkZWZpbmUgQ09NUElMRV9TVEFDS19FTVBUWSAgKGNvbXBpbGVfc3RhY2suYXZhaWwgPT0gMCkKKysjICBkZWZpbmUgQ09NUElMRV9TVEFDS19GVUxMICAoY29tcGlsZV9zdGFjay5hdmFpbCA9PSBjb21waWxlX3N0YWNrLnNpemUpCisrCisrLyogVGhlIG5leHQgYXZhaWxhYmxlIGVsZW1lbnQuICAqLworKyMgIGRlZmluZSBDT01QSUxFX1NUQUNLX1RPUCAoY29tcGlsZV9zdGFjay5zdGFja1tjb21waWxlX3N0YWNrLmF2YWlsXSkKKysKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBTZXQgdGhlIGJpdCBmb3IgY2hhcmFjdGVyIEMgaW4gYSBsaXN0LiAgKi8KKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBkZWZpbmUgU0VUX0xJU1RfQklUKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChiWygodW5zaWduZWQgY2hhcikgKGMpKSAvIEJZVEVXSURUSF0gICAgICAgICAgICAgICBcCisrICAgfD0gMSA8PCAoKCh1bnNpZ25lZCBjaGFyKSBjKSAlIEJZVEVXSURUSCkpCisrIyBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBHZXQgdGhlIG5leHQgdW5zaWduZWQgbnVtYmVyIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4uICAqLworKyMgZGVmaW5lIEdFVF9VTlNJR05FRF9OVU1CRVIobnVtKSBcCisrICB7CQkJCQkJCQkJXAorKyAgICB3aGlsZSAocCAhPSBwZW5kKQkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJUEFURkVUQ0ggKGMpOwkJCQkJCQlcCisrCWlmIChjIDwgJzAnIHx8IGMgPiAnOScpCQkJCQkJXAorKwkgIGJyZWFrOwkJCQkJCQlcCisrCWlmIChudW0gPD0gUkVfRFVQX01BWCkJCQkJCQlcCisrCSAgewkJCQkJCQkJXAorKwkgICAgaWYgKG51bSA8IDApCQkJCQkJXAorKwkgICAgICBudW0gPSAwOwkJCQkJCQlcCisrCSAgICBudW0gPSBudW0gKiAxMCArIGMgLSAnMCc7CQkJCQlcCisrCSAgfQkJCQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICB9CisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgaWYgV0lERV9DSEFSX1NVUFBPUlQKKysvKiBUaGUgR05VIEMgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IGZvciB1c2VyLWRlZmluZWQgY2hhcmFjdGVyIGNsYXNzZXMKKysgICBhbmQgdGhlIGZ1bmN0aW9ucyBmcm9tIElTTyBDIGFtZW5kZW1lbnQgMS4gICovCisrIyAgIGlmZGVmIENIQVJDTEFTU19OQU1FX01BWAorKyMgICAgZGVmaW5lIENIQVJfQ0xBU1NfTUFYX0xFTkdUSCBDSEFSQ0xBU1NfTkFNRV9NQVgKKysjICAgZWxzZQorKy8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBidXQgc29tZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBzdGlsbCBoYXZlIHRoaXMKKysgICBwcm9ibGVtLiAgVXNlIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLiAgKi8KKysjICAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggMjU2CisrIyAgIGVuZGlmCisrCisrIyAgIGlmZGVmIF9MSUJDCisrIyAgICBkZWZpbmUgSVNfQ0hBUl9DTEFTUyhzdHJpbmcpIF9fd2N0eXBlIChzdHJpbmcpCisrIyAgIGVsc2UKKysjICAgIGRlZmluZSBJU19DSEFSX0NMQVNTKHN0cmluZykgd2N0eXBlIChzdHJpbmcpCisrIyAgIGVuZGlmCisrIyAgZWxzZQorKyMgICBkZWZpbmUgQ0hBUl9DTEFTU19NQVhfTEVOR1RIICA2IC8qIE5hbWVseSwgYHhkaWdpdCcuICAqLworKworKyMgICBkZWZpbmUgSVNfQ0hBUl9DTEFTUyhzdHJpbmcpCQkJCQlcCisrICAgKFNUUkVRIChzdHJpbmcsICJhbHBoYSIpIHx8IFNUUkVRIChzdHJpbmcsICJ1cHBlciIpCQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAibG93ZXIiKSB8fCBTVFJFUSAoc3RyaW5nLCAiZGlnaXQiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAiYWxudW0iKSB8fCBTVFJFUSAoc3RyaW5nLCAieGRpZ2l0IikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgInNwYWNlIikgfHwgU1RSRVEgKHN0cmluZywgInByaW50IikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgInB1bmN0IikgfHwgU1RSRVEgKHN0cmluZywgImdyYXBoIikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgImNudHJsIikgfHwgU1RSRVEgKHN0cmluZywgImJsYW5rIikpCisrIyAgZW5kaWYKKysjIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKwwKKysjIGlmbmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysKKysvKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgbGFyZ2Ugb2JqZWN0cyB3aXRoaW4gcmVfbWF0Y2hfMl9pbnRlcm5hbCwKKysgICB3ZSBtYWtlIHRoZSBmYWlsIHN0YWNrIGFuZCByZWdpc3RlciB2ZWN0b3JzIGdsb2JhbC4KKysgICBUaGUgZmFpbCBzdGFjaywgd2UgZ3JvdyB0byB0aGUgbWF4aW11bSBzaXplIHdoZW4gYSByZWdleHAKKysgICBpcyBjb21waWxlZC4KKysgICBUaGUgcmVnaXN0ZXIgdmVjdG9ycywgd2UgYWRqdXN0IGluIHNpemUgZWFjaCB0aW1lIHdlCisrICAgY29tcGlsZSBhIHJlZ2V4cCwgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGl0IG5lZWRzLiAgKi8KKysKKytzdGF0aWMgUFJFRklYKGZhaWxfc3RhY2tfdHlwZSkgZmFpbF9zdGFjazsKKysKKysvKiBTaXplIHdpdGggd2hpY2ggdGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLgorKyAgIFRoYXQgaXMgc28gd2UgY2FuIG1ha2UgdGhlbSBiaWdnZXIgYXMgbmVlZGVkLAorKyAgIGJ1dCBuZXZlciBtYWtlIHRoZW0gc21hbGxlci4gICovCisrIyAgaWZkZWYgREVGSU5FRF9PTkNFCisrc3RhdGljIGludCByZWdzX2FsbG9jYXRlZF9zaXplOworKworK3N0YXRpYyBjb25zdCBjaGFyICoqICAgICByZWdzdGFydCwgKiogICAgIHJlZ2VuZDsKKytzdGF0aWMgY29uc3QgY2hhciAqKiBvbGRfcmVnc3RhcnQsICoqIG9sZF9yZWdlbmQ7Cisrc3RhdGljIGNvbnN0IGNoYXIgKipiZXN0X3JlZ3N0YXJ0LCAqKmJlc3RfcmVnZW5kOworK3N0YXRpYyBjb25zdCBjaGFyICoqcmVnX2R1bW15OworKyMgIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKworK3N0YXRpYyBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqUFJFRklYKHJlZ19pbmZvKTsKKytzdGF0aWMgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKlBSRUZJWChyZWdfaW5mb19kdW1teSk7CisrCisrLyogTWFrZSB0aGUgcmVnaXN0ZXIgdmVjdG9ycyBiaWcgZW5vdWdoIGZvciBOVU1fUkVHUyByZWdpc3RlcnMsCisrICAgYnV0IGRvbid0IG1ha2UgdGhlbSBzbWFsbGVyLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChyZWdleF9ncm93X3JlZ2lzdGVycykgKGludCBudW1fcmVncykKKyt7CisrICBpZiAobnVtX3JlZ3MgPiByZWdzX2FsbG9jYXRlZF9zaXplKQorKyAgICB7CisrICAgICAgUkVUQUxMT0NfSUYgKHJlZ3N0YXJ0LAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKHJlZ2VuZCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChvbGRfcmVnc3RhcnQsIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChvbGRfcmVnZW5kLAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKGJlc3RfcmVnc3RhcnQsIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChiZXN0X3JlZ2VuZCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChQUkVGSVgocmVnX2luZm8pLCBudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKyAgICAgIFJFVEFMTE9DX0lGIChyZWdfZHVtbXksCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoUFJFRklYKHJlZ19pbmZvX2R1bW15KSwgbnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysKKysgICAgICByZWdzX2FsbG9jYXRlZF9zaXplID0gbnVtX3JlZ3M7CisrICAgIH0KKyt9CisrCisrIyBlbmRpZiAvKiBub3QgTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrDAorKyMgaWZuZGVmIERFRklORURfT05DRQorK3N0YXRpYyBib29sZWFuIGdyb3VwX2luX2NvbXBpbGVfc3RhY2sgKGNvbXBpbGVfc3RhY2tfdHlwZSBjb21waWxlX3N0YWNrLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ251bV90IHJlZ251bSk7CisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrLyogYHJlZ2V4X2NvbXBpbGUnIGNvbXBpbGVzIFBBVFRFUk4gKG9mIGxlbmd0aCBTSVpFKSBhY2NvcmRpbmcgdG8gU1lOVEFYLgorKyAgIFJldHVybnMgb25lIG9mIGVycm9yIGNvZGVzIGRlZmluZWQgaW4gYHJlZ2V4LmgnLCBvciB6ZXJvIGZvciBzdWNjZXNzLgorKworKyAgIEFzc3VtZXMgdGhlIGBhbGxvY2F0ZWQnIChhbmQgcGVyaGFwcyBgYnVmZmVyJykgYW5kIGB0cmFuc2xhdGUnCisrICAgZmllbGRzIGFyZSBzZXQgaW4gQlVGUCBvbiBlbnRyeS4KKysKKysgICBJZiBpdCBzdWNjZWVkcywgcmVzdWx0cyBhcmUgcHV0IGluIEJVRlAgKGlmIGl0IHJldHVybnMgYW4gZXJyb3IsIHRoZQorKyAgIGNvbnRlbnRzIG9mIEJVRlAgYXJlIHVuZGVmaW5lZCk6CisrICAgICBgYnVmZmVyJyBpcyB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGBzeW50YXgnIGlzIHNldCB0byBTWU5UQVg7CisrICAgICBgdXNlZCcgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgZmFzdG1hcF9hY2N1cmF0ZScgaXMgemVybzsKKysgICAgIGByZV9uc3ViJyBpcyB0aGUgbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGluIFBBVFRFUk47CisrICAgICBgbm90X2JvbCcgYW5kIGBub3RfZW9sJyBhcmUgemVybzsKKysKKysgICBUaGUgYGZhc3RtYXAnIGFuZCBgbmV3bGluZV9hbmNob3InIGZpZWxkcyBhcmUgbmVpdGhlcgorKyAgIGV4YW1pbmVkIG5vciBzZXQuICAqLworKworKy8qIFJldHVybiwgZnJlZWluZyBzdG9yYWdlIHdlIGFsbG9jYXRlZC4gICovCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBGUkVFX1NUQUNLX1JFVFVSTih2YWx1ZSkJCVwKKysgIHJldHVybiAoZnJlZShwYXR0ZXJuKSwgZnJlZShtYnNfb2Zmc2V0KSwgZnJlZShpc19iaW5hcnkpLCBmcmVlIChjb21waWxlX3N0YWNrLnN0YWNrKSwgdmFsdWUpCisrIyBlbHNlCisrIyAgZGVmaW5lIEZSRUVfU1RBQ0tfUkVUVVJOKHZhbHVlKQkJXAorKyAgcmV0dXJuIChmcmVlIChjb21waWxlX3N0YWNrLnN0YWNrKSwgdmFsdWUpCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworK3N0YXRpYyByZWdfZXJyY29kZV90CisrUFJFRklYKHJlZ2V4X2NvbXBpbGUpIChjb25zdCBjaGFyICpBUkdfUFJFRklYKHBhdHRlcm4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IEFSR19QUkVGSVgoc2l6ZSksIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgLyogV2UgZmV0Y2ggY2hhcmFjdGVycyBmcm9tIFBBVFRFUk4gaGVyZS4gIEV2ZW4gdGhvdWdoIFBBVFRFUk4gaXMKKysgICAgIGBjaGFyIConIChpLmUuLCBzaWduZWQpLCB3ZSBkZWNsYXJlIHRoZXNlIHZhcmlhYmxlcyBhcyB1bnNpZ25lZCwgc28KKysgICAgIHRoZXkgY2FuIGJlIHJlbGlhYmx5IHVzZWQgYXMgYXJyYXkgaW5kaWNlcy4gICovCisrICByZWdpc3RlciBVQ0hBUl9UIGMsIGMxOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogQSB0ZW1wb3Jhcnkgc3BhY2UgdG8ga2VlcCB3Y2hhcl90IHBhdHRlcm4gYW5kIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgQ0hBUl9UICpwYXR0ZXJuLCAqQ09NUElMRURfQlVGRkVSX1ZBUjsKKysgIHNpemVfdCBzaXplOworKyAgLyogb2Zmc2V0IGJ1ZmZlciBmb3Igb3B0aW1pemF0aW9uLiBTZWUgY29udmVydF9tYnNfdG9fd2MuICAqLworKyAgaW50ICptYnNfb2Zmc2V0ID0gTlVMTDsKKysgIC8qIEl0IGhvbGQgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgKmlzX2JpbmFyeSA9IE5VTEw7CisrICAvKiBBIGZsYWcgd2hldGhlciBleGFjdG4gaXMgaGFuZGxpbmcgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgaXNfZXhhY3RuX2JpbiA9IEZBTFNFOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogQSByYW5kb20gdGVtcG9yYXJ5IHNwb3QgaW4gUEFUVEVSTi4gICovCisrICBjb25zdCBDSEFSX1QgKnAxOworKworKyAgLyogUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgd2hlcmUgd2Ugc2hvdWxkIGFwcGVuZC4gICovCisrICByZWdpc3RlciBVQ0hBUl9UICpiOworKworKyAgLyogS2VlcHMgdHJhY2sgb2YgdW5jbG9zZWQgZ3JvdXBzLiAgKi8KKysgIGNvbXBpbGVfc3RhY2tfdHlwZSBjb21waWxlX3N0YWNrOworKworKyAgLyogUG9pbnRzIHRvIHRoZSBjdXJyZW50IChlbmRpbmcpIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGNvbnN0IENIQVJfVCAqcDsKKysgIGNvbnN0IENIQVJfVCAqcGVuZDsKKysjZWxzZSAvKiBCWVRFICovCisrICBjb25zdCBDSEFSX1QgKnAgPSBwYXR0ZXJuOworKyAgY29uc3QgQ0hBUl9UICpwZW5kID0gcGF0dGVybiArIHNpemU7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBIb3cgdG8gdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgKi8KKysgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKysKKysgIC8qIEFkZHJlc3Mgb2YgdGhlIGNvdW50LWJ5dGUgb2YgdGhlIG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQgYGV4YWN0bicKKysgICAgIGNvbW1hbmQuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHRlbGwgaWYgYSBuZXcgZXhhY3QtbWF0Y2gKKysgICAgIGNoYXJhY3RlciBjYW4gYmUgYWRkZWQgdG8gdGhhdCBjb21tYW5kIG9yIGlmIHRoZSBjaGFyYWN0ZXIgcmVxdWlyZXMKKysgICAgIGEgbmV3IGBleGFjdG4nIGNvbW1hbmQuICAqLworKyAgVUNIQVJfVCAqcGVuZGluZ19leGFjdCA9IDA7CisrCisrICAvKiBBZGRyZXNzIG9mIHN0YXJ0IG9mIHRoZSBtb3N0IHJlY2VudGx5IGZpbmlzaGVkIGV4cHJlc3Npb24uCisrICAgICBUaGlzIHRlbGxzLCBlLmcuLCBwb3N0Zml4ICogd2hlcmUgdG8gZmluZCB0aGUgc3RhcnQgb2YgaXRzCisrICAgICBvcGVyYW5kLiAgUmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBncm91cHMgYW5kIGFsdGVybmF0aXZlcy4gICovCisrICBVQ0hBUl9UICpsYXN0c3RhcnQgPSAwOworKworKyAgLyogQWRkcmVzcyBvZiBiZWdpbm5pbmcgb2YgcmVnZXhwLCBvciBpbnNpZGUgb2YgbGFzdCBncm91cC4gICovCisrICBVQ0hBUl9UICpiZWdhbHQ7CisrCisrICAvKiBBZGRyZXNzIG9mIHRoZSBwbGFjZSB3aGVyZSBhIGZvcndhcmQganVtcCBzaG91bGQgZ28gdG8gdGhlIGVuZCBvZgorKyAgICAgdGhlIGNvbnRhaW5pbmcgZXhwcmVzc2lvbi4gIEVhY2ggYWx0ZXJuYXRpdmUgb2YgYW4gYG9yJyAtLSBleGNlcHQgdGhlCisrICAgICBsYXN0IC0tIGVuZHMgd2l0aCBhIGZvcndhcmQganVtcCBvZiB0aGlzIHNvcnQuICAqLworKyAgVUNIQVJfVCAqZml4dXBfYWx0X2p1bXAgPSAwOworKworKyAgLyogQ291bnRzIG9wZW4tZ3JvdXBzIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkLiAgUmVtZW1iZXJlZCBmb3IgdGhlCisrICAgICBtYXRjaGluZyBjbG9zZS1ncm91cCBvbiB0aGUgY29tcGlsZSBzdGFjaywgc28gdGhlIHNhbWUgcmVnaXN0ZXIKKysgICAgIG51bWJlciBpcyBwdXQgaW4gdGhlIHN0b3BfbWVtb3J5IGFzIHRoZSBzdGFydF9tZW1vcnkuICAqLworKyAgcmVnbnVtX3QgcmVnbnVtID0gMDsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEluaXRpYWxpemUgdGhlIHdjaGFyX3QgUEFUVEVSTiBhbmQgb2Zmc2V0X2J1ZmZlci4gICovCisrICBwID0gcGVuZCA9IHBhdHRlcm4gPSBUQUxMT0MoY3NpemUgKyAxLCBDSEFSX1QpOworKyAgbWJzX29mZnNldCA9IFRBTExPQyhjc2l6ZSArIDEsIGludCk7CisrICBpc19iaW5hcnkgPSBUQUxMT0MoY3NpemUgKyAxLCBjaGFyKTsKKysgIGlmIChwYXR0ZXJuID09IE5VTEwgfHwgbWJzX29mZnNldCA9PSBOVUxMIHx8IGlzX2JpbmFyeSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZnJlZShwYXR0ZXJuKTsKKysgICAgICBmcmVlKG1ic19vZmZzZXQpOworKyAgICAgIGZyZWUoaXNfYmluYXJ5KTsKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKysgICAgfQorKyAgcGF0dGVybltjc2l6ZV0gPSBMJ1wwJzsJLyogc2VudGluZWwgKi8KKysgIHNpemUgPSBjb252ZXJ0X21ic190b193Y3MocGF0dGVybiwgY3BhdHRlcm4sIGNzaXplLCBtYnNfb2Zmc2V0LCBpc19iaW5hcnkpOworKyAgcGVuZCA9IHAgKyBzaXplOworKyAgaWYgKHNpemUgPCAwKQorKyAgICB7CisrICAgICAgZnJlZShwYXR0ZXJuKTsKKysgICAgICBmcmVlKG1ic19vZmZzZXQpOworKyAgICAgIGZyZWUoaXNfYmluYXJ5KTsKKysgICAgICByZXR1cm4gUkVHX0JBRFBBVDsKKysgICAgfQorKyNlbmRpZgorKworKyNpZmRlZiBERUJVRworKyAgREVCVUdfUFJJTlQxICgiXG5Db21waWxpbmcgcGF0dGVybjogIik7CisrICBpZiAoZGVidWcpCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBkZWJ1Z19jb3VudDsKKysKKysgICAgICBmb3IgKGRlYnVnX2NvdW50ID0gMDsgZGVidWdfY291bnQgPCBzaXplOyBkZWJ1Z19jb3VudCsrKQorKyAgICAgICAgUFVUX0NIQVIgKHBhdHRlcm5bZGVidWdfY291bnRdKTsKKysgICAgICBwdXRjaGFyICgnXG4nKTsKKysgICAgfQorKyNlbmRpZiAvKiBERUJVRyAqLworKworKyAgLyogSW5pdGlhbGl6ZSB0aGUgY29tcGlsZSBzdGFjay4gICovCisrICBjb21waWxlX3N0YWNrLnN0YWNrID0gVEFMTE9DIChJTklUX0NPTVBJTEVfU1RBQ0tfU0laRSwgY29tcGlsZV9zdGFja19lbHRfdCk7CisrICBpZiAoY29tcGlsZV9zdGFjay5zdGFjayA9PSBOVUxMKQorKyAgICB7CisrI2lmZGVmIFdDSEFSCisrICAgICAgZnJlZShwYXR0ZXJuKTsKKysgICAgICBmcmVlKG1ic19vZmZzZXQpOworKyAgICAgIGZyZWUoaXNfYmluYXJ5KTsKKysjZW5kaWYKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKysgICAgfQorKworKyAgY29tcGlsZV9zdGFjay5zaXplID0gSU5JVF9DT01QSUxFX1NUQUNLX1NJWkU7CisrICBjb21waWxlX3N0YWNrLmF2YWlsID0gMDsKKysKKysgIC8qIEluaXRpYWxpemUgdGhlIHBhdHRlcm4gYnVmZmVyLiAgKi8KKysgIGJ1ZnAtPnN5bnRheCA9IHN5bnRheDsKKysgIGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworKyAgYnVmcC0+bm90X2JvbCA9IGJ1ZnAtPm5vdF9lb2wgPSAwOworKworKyAgLyogU2V0IGB1c2VkJyB0byB6ZXJvLCBzbyB0aGF0IGlmIHdlIHJldHVybiBhbiBlcnJvciwgdGhlIHBhdHRlcm4KKysgICAgIHByaW50ZXIgKGZvciBkZWJ1Z2dpbmcpIHdpbGwgdGhpbmsgdGhlcmUncyBubyBwYXR0ZXJuLiAgV2UgcmVzZXQgaXQKKysgICAgIGF0IHRoZSBlbmQuICAqLworKyAgYnVmcC0+dXNlZCA9IDA7CisrCisrICAvKiBBbHdheXMgY291bnQgZ3JvdXBzLCB3aGV0aGVyIG9yIG5vdCBidWZwLT5ub19zdWIgaXMgc2V0LiAgKi8KKysgIGJ1ZnAtPnJlX25zdWIgPSAwOworKworKyNpZiAhZGVmaW5lZCBlbWFjcyAmJiAhZGVmaW5lZCBTWU5UQVhfVEFCTEUKKysgIC8qIEluaXRpYWxpemUgdGhlIHN5bnRheCB0YWJsZS4gICovCisrICAgaW5pdF9zeW50YXhfb25jZSAoKTsKKysjZW5kaWYKKysKKysgIGlmIChidWZwLT5hbGxvY2F0ZWQgPT0gMCkKKysgICAgeworKyAgICAgIGlmIChidWZwLT5idWZmZXIpCisrCXsgLyogSWYgemVybyBhbGxvY2F0ZWQsIGJ1dCBidWZmZXIgaXMgbm9uLW51bGwsIHRyeSB0byByZWFsbG9jCisrICAgICAgICAgICAgIGVub3VnaCBzcGFjZS4gIFRoaXMgbG9zZXMgaWYgYnVmZmVyJ3MgYWRkcmVzcyBpcyBib2d1cywgYnV0CisrICAgICAgICAgICAgIHRoYXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4gICovCisrI2lmZGVmIFdDSEFSCisrCSAgLyogRnJlZSBidWZwLT5idWZmZXIgYW5kIGFsbG9jYXRlIGFuIGFycmF5IGZvciB3Y2hhcl90IHBhdHRlcm4KKysJICAgICBidWZmZXIuICAqLworKyAgICAgICAgICBmcmVlKGJ1ZnAtPmJ1ZmZlcik7CisrICAgICAgICAgIENPTVBJTEVEX0JVRkZFUl9WQVIgPSBUQUxMT0MgKElOSVRfQlVGX1NJWkUvc2l6ZW9mKFVDSEFSX1QpLAorKwkJCQkJVUNIQVJfVCk7CisrI2Vsc2UKKysgICAgICAgICAgUkVUQUxMT0MgKENPTVBJTEVEX0JVRkZFUl9WQVIsIElOSVRfQlVGX1NJWkUsIFVDSEFSX1QpOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsgLyogQ2FsbGVyIGRpZCBub3QgYWxsb2NhdGUgYSBidWZmZXIuICBEbyBpdCBmb3IgdGhlbS4gICovCisrICAgICAgICAgIENPTVBJTEVEX0JVRkZFUl9WQVIgPSBUQUxMT0MgKElOSVRfQlVGX1NJWkUgLyBzaXplb2YoVUNIQVJfVCksCisrCQkJCQlVQ0hBUl9UKTsKKysgICAgICAgIH0KKysKKysgICAgICBpZiAoIUNPTVBJTEVEX0JVRkZFUl9WQVIpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVNQQUNFKTsKKysjaWZkZWYgV0NIQVIKKysgICAgICBidWZwLT5idWZmZXIgPSAoY2hhciopQ09NUElMRURfQlVGRkVSX1ZBUjsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICBidWZwLT5hbGxvY2F0ZWQgPSBJTklUX0JVRl9TSVpFOworKyAgICB9CisrI2lmZGVmIFdDSEFSCisrICBlbHNlCisrICAgIENPTVBJTEVEX0JVRkZFUl9WQVIgPSAoVUNIQVJfVCopIGJ1ZnAtPmJ1ZmZlcjsKKysjZW5kaWYKKysKKysgIGJlZ2FsdCA9IGIgPSBDT01QSUxFRF9CVUZGRVJfVkFSOworKworKyAgLyogTG9vcCB0aHJvdWdoIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4gdW50aWwgd2UncmUgYXQgdGhlIGVuZC4gICovCisrICB3aGlsZSAocCAhPSBwZW5kKQorKyAgICB7CisrICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgIHN3aXRjaCAoYykKKysgICAgICAgIHsKKysgICAgICAgIGNhc2UgJ14nOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCAgIC8qIElmIGF0IHN0YXJ0IG9mIHBhdHRlcm4sIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICAgICBwID09IHBhdHRlcm4gKyAxCisrICAgICAgICAgICAgICAgICAgIC8qIElmIGNvbnRleHQgaW5kZXBlbmRlbnQsIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICB8fCBzeW50YXggJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMKKysgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCBkZXBlbmRzIG9uIHdoYXQncyBjb21lIGJlZm9yZS4gICovCisrICAgICAgICAgICAgICAgIHx8IFBSRUZJWChhdF9iZWdsaW5lX2xvY19wKSAocGF0dGVybiwgcCwgc3ludGF4KSkKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChiZWdsaW5lKTsKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgY2FzZSAnJCc6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoICAgLyogSWYgYXQgZW5kIG9mIHBhdHRlcm4sIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICAgICBwID09IHBlbmQKKysgICAgICAgICAgICAgICAgICAgLyogSWYgY29udGV4dCBpbmRlcGVuZGVudCwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIHx8IHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUworKyAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGRlcGVuZHMgb24gd2hhdCdzIG5leHQuICAqLworKyAgICAgICAgICAgICAgICB8fCBQUkVGSVgoYXRfZW5kbGluZV9sb2NfcCkgKHAsIHBlbmQsIHN5bnRheCkpCisrICAgICAgICAgICAgICAgQlVGX1BVU0ggKGVuZGxpbmUpOworKyAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgIH0KKysgICAgICAgICAgIGJyZWFrOworKworKworKwljYXNlICcrJzoKKysgICAgICAgIGNhc2UgJz8nOgorKyAgICAgICAgICBpZiAoKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pCisrICAgICAgICAgICAgICB8fCAoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpKQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICBoYW5kbGVfcGx1czoKKysgICAgICAgIGNhc2UgJyonOgorKyAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBwYXR0ZXJuLi4uICovCisrICAgICAgICAgIGlmICghbGFzdHN0YXJ0KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTKQorKyAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0JBRFJQVCk7CisrICAgICAgICAgICAgICBlbHNlIGlmICghKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfT1BTKSkKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIHsKKysgICAgICAgICAgICAvKiBBcmUgd2Ugb3B0aW1pemluZyB0aGlzIGp1bXA/ICAqLworKyAgICAgICAgICAgIGJvb2xlYW4ga2VlcF9zdHJpbmdfcCA9IGZhbHNlOworKworKyAgICAgICAgICAgIC8qIDEgbWVhbnMgemVybyAobWFueSkgbWF0Y2hlcyBpcyBhbGxvd2VkLiAgKi8KKysgICAgICAgICAgICBjaGFyIHplcm9fdGltZXNfb2sgPSAwLCBtYW55X3RpbWVzX29rID0gMDsKKysKKysgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIHNlcXVlbmNlIG9mIHJlcGV0aXRpb24gY2hhcnMsIGNvbGxhcHNlIGl0CisrICAgICAgICAgICAgICAgZG93biB0byBqdXN0IG9uZSAodGhlIHJpZ2h0IG9uZSkuICBXZSBjYW4ndCBjb21iaW5lCisrICAgICAgICAgICAgICAgaW50ZXJ2YWwgb3BlcmF0b3JzIHdpdGggdGhlc2UgYmVjYXVzZSBvZiwgZS5nLiwgYGF7Mn0qJywKKysgICAgICAgICAgICAgICB3aGljaCBzaG91bGQgb25seSBtYXRjaCBhbiBldmVuIG51bWJlciBvZiBgYSdzLiAgKi8KKysKKysgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICB6ZXJvX3RpbWVzX29rIHw9IGMgIT0gJysnOworKyAgICAgICAgICAgICAgICBtYW55X3RpbWVzX29rIHw9IGMgIT0gJz8nOworKworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKQorKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgIGlmIChjID09ICcqJworKyAgICAgICAgICAgICAgICAgICAgfHwgKCEoc3ludGF4ICYgUkVfQktfUExVU19RTSkgJiYgKGMgPT0gJysnIHx8IGMgPT0gJz8nKSkpCisrICAgICAgICAgICAgICAgICAgOworKworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9CS19QTFVTX1FNICAmJiAgYyA9PSAnXFwnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoYzEgPT0gJysnIHx8IGMxID09ICc/JykpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgICAgIGMgPSBjMTsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgd2UgZm91bmQgYW5vdGhlciByZXBlYXQgY2hhcmFjdGVyLiAgKi8KKysgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogU3RhciwgZXRjLiBhcHBsaWVkIHRvIGFuIGVtcHR5IHBhdHRlcm4gaXMgZXF1aXZhbGVudAorKyAgICAgICAgICAgICAgIHRvIGFuIGVtcHR5IHBhdHRlcm4uICAqLworKyAgICAgICAgICAgIGlmICghbGFzdHN0YXJ0KQorKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgLyogTm93IHdlIGtub3cgd2hldGhlciBvciBub3QgemVybyBtYXRjaGVzIGlzIGFsbG93ZWQKKysgICAgICAgICAgICAgICBhbmQgYWxzbyB3aGV0aGVyIG9yIG5vdCB0d28gb3IgbW9yZSBtYXRjaGVzIGlzIGFsbG93ZWQuICAqLworKyAgICAgICAgICAgIGlmIChtYW55X3RpbWVzX29rKQorKyAgICAgICAgICAgICAgeyAvKiBNb3JlIHRoYW4gb25lIHJlcGV0aXRpb24gaXMgYWxsb3dlZCwgc28gcHV0IGluIGF0IHRoZQorKyAgICAgICAgICAgICAgICAgICBlbmQgYSBiYWNrd2FyZCByZWxhdGl2ZSBqdW1wIGZyb20gYGInIHRvIGJlZm9yZSB0aGUgbmV4dAorKyAgICAgICAgICAgICAgICAgICBqdW1wIHdlJ3JlIGdvaW5nIHRvIHB1dCBpbiBiZWxvdyAod2hpY2gganVtcHMgZnJvbQorKyAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQgdG8gYWZ0ZXIgdGhpcyBqdW1wKS4KKysKKysgICAgICAgICAgICAgICAgICAgQnV0IGlmIHdlIGFyZSBhdCB0aGUgYConIGluIHRoZSBleGFjdCBzZXF1ZW5jZSBgLipcbicsCisrICAgICAgICAgICAgICAgICAgIGluc2VydCBhbiB1bmNvbmRpdGlvbmFsIGp1bXAgYmFja3dhcmRzIHRvIHRoZSAuLAorKyAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuICBUaGlzIHdheSB3ZSBvbmx5CisrICAgICAgICAgICAgICAgICAgIHB1c2ggYSBmYWlsdXJlIHBvaW50IG9uY2UsIGluc3RlYWQgb2YgZXZlcnkgdGltZQorKyAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBsb29wLiAgKi8KKysgICAgICAgICAgICAgICAgYXNzZXJ0IChwIC0gMSA+IHBhdHRlcm4pOworKworKyAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHRoZSBqdW1wLiAgKi8KKysgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKworKyAgICAgICAgICAgICAgICAvKiBXZSBrbm93IHdlIGFyZSBub3QgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcGF0dGVybiwKKysgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBsYXN0c3RhcnQgd2FzIG5vbnplcm8uICBBbmQgd2UndmUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRlZCBgcCcsIGJ5IHRoZSB3YXksIHRvIGJlIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIKKysgICAgICAgICAgICAgICAgICAgdGhlIGAqJy4gIERvIHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nIGFuYWxvZ291cyBoZXJlCisrICAgICAgICAgICAgICAgICAgIGZvciBudWxsIGJ5dGVzLCBiZWNhdXNlIG9mIFJFX0RPVF9OT1RfTlVMTD8gICovCisrICAgICAgICAgICAgICAgIGlmIChUUkFOU0xBVEUgKCoocCAtIDIpKSA9PSBUUkFOU0xBVEUgKCcuJykKKysJCSAgICAmJiB6ZXJvX3RpbWVzX29rCisrICAgICAgICAgICAgICAgICAgICAmJiBwIDwgcGVuZCAmJiBUUkFOU0xBVEUgKCpwKSA9PSBUUkFOU0xBVEUgKCdcbicpCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKysgICAgICAgICAgICAgICAgICB7IC8qIFdlIGhhdmUgLipcbi4gICovCisrICAgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChqdW1wLCBiLCBsYXN0c3RhcnQpOworKyAgICAgICAgICAgICAgICAgICAga2VlcF9zdHJpbmdfcCA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgZWxzZS4gICovCisrICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAobWF5YmVfcG9wX2p1bXAsIGIsIGxhc3RzdGFydCAtCisrCQkJICAgICAgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSk7CisrCisrICAgICAgICAgICAgICAgIC8qIFdlJ3ZlIGFkZGVkIG1vcmUgc3R1ZmYgdG8gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogT24gZmFpbHVyZSwganVtcCBmcm9tIGxhc3RzdGFydCB0byBiICsgMywgd2hpY2ggd2lsbCBiZSB0aGUKKysgICAgICAgICAgICAgICBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGlzIGp1bXAgaXMgaW5zZXJ0ZWQuICAqLworKwkgICAgLyogaWZkZWYgV0NIQVIsICdiICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUnIGluc3RlYWQgb2YKKysJICAgICAgICdiICsgMycuICAqLworKyAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICBJTlNFUlRfSlVNUCAoa2VlcF9zdHJpbmdfcCA/IG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb25fZmFpbHVyZV9qdW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQsIGIgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICBpZiAoIXplcm9fdGltZXNfb2spCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8qIEF0IGxlYXN0IG9uZSByZXBldGl0aW9uIGlzIHJlcXVpcmVkLCBzbyBpbnNlcnQgYQorKyAgICAgICAgICAgICAgICAgICBgZHVtbXlfZmFpbHVyZV9qdW1wJyBiZWZvcmUgdGhlIGluaXRpYWwKKysgICAgICAgICAgICAgICAgICAgYG9uX2ZhaWx1cmVfanVtcCcgaW5zdHJ1Y3Rpb24gb2YgdGhlIGxvb3AuIFRoaXMKKysgICAgICAgICAgICAgICAgICAgZWZmZWN0cyBhIHNraXAgb3ZlciB0aGF0IGluc3RydWN0aW9uIHRoZSBmaXJzdCB0aW1lCisrICAgICAgICAgICAgICAgICAgIHdlIGhpdCB0aGF0IGxvb3AuICAqLworKyAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgIElOU0VSVF9KVU1QIChkdW1teV9mYWlsdXJlX2p1bXAsIGxhc3RzdGFydCwgbGFzdHN0YXJ0ICsKKysJCQkgICAgIDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKwkgIGJyZWFrOworKworKworKwljYXNlICcuJzoKKysgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgQlVGX1BVU0ggKGFueWNoYXIpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIGNhc2UgJ1snOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgYm9vbGVhbiBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyNpZmRlZiBXQ0hBUgorKwkgICAgQ0hBUl9UIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysjZWxzZQorKwkgICAgdW5zaWduZWQgaW50IHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysjZW5kaWYKKysgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrI2lmZGVmIFdDSEFSCisrCSAgICAvKiBXZSBhc3N1bWUgYSBjaGFyc2V0KF9ub3QpIHN0cnVjdHVyZSBhcyBhIHdjaGFyX3QgYXJyYXkuCisrCSAgICAgICBjaGFyc2V0WzBdID0gKHJlX29wY29kZV90KSBjaGFyc2V0KF9ub3QpCisrICAgICAgICAgICAgICAgY2hhcnNldFsxXSA9IGwgKD0gbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcykKKysgICAgICAgICAgICAgICBjaGFyc2V0WzJdID0gbSAoPSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbHMpCisrICAgICAgICAgICAgICAgY2hhcnNldFszXSA9IG4gKD0gbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzZXMpCisrCSAgICAgICBjaGFyc2V0WzRdID0gbyAoPSBsZW5ndGggb2YgY2hhcl9yYW5nZXMpCisrCSAgICAgICBjaGFyc2V0WzVdID0gcCAoPSBsZW5ndGggb2YgY2hhcnMpCisrCisrICAgICAgICAgICAgICAgY2hhcnNldFs2XSA9IGNoYXJfY2xhc3MgKHdjdHlwZV90KQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbNitDSEFSX0NMQVNTX1NJWkVdID0gY2hhcl9jbGFzcyAod2N0eXBlX3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCs1XSAgPSBjaGFyX2NsYXNzICh3Y3R5cGVfdCkKKysKKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrNl0gID0gY29sbGF0aW5nX3N5bWJvbCAod2NoYXJfdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrICAgICAgICAgICAgICAgY2hhcnNldFtsK20rNV0gID0gY29sbGF0aW5nX3N5bWJvbCAod2NoYXJfdCkKKysJCQkJCWlmZGVmIF9MSUJDIHdlIHVzZSB0aGUgaW5kZXggaWYKKysJCQkJCV9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiBpbnN0ZWFkIG9mCisrCQkJCQl3Y2hhcl90IHN0cmluZy4KKysKKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrbSs2XSAgPSBlcXVpdmFsZW5jZV9jbGFzc2VzICh3Y2hhcl90KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCttK24rNV0gID0gZXF1aXZhbGVuY2VfY2xhc3NlcyAod2NoYXJfdCkKKysJCQkJCWlmZGVmIF9MSUJDIHdlIHVzZSB0aGUgaW5kZXggaW4KKysJCQkJCV9OTF9DT0xMQVRFX1dFSUdIVCBpbnN0ZWFkIG9mCisrCQkJCQl3Y2hhcl90IHN0cmluZy4KKysKKysJICAgICAgIGNoYXJzZXRbbCttK24rNl0gPSByYW5nZV9zdGFydAorKwkgICAgICAgY2hhcnNldFtsK20rbis3XSA9IHJhbmdlX2VuZAorKwkgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKwkgICAgICAgY2hhcnNldFtsK20rbisybys0XSA9IHJhbmdlX3N0YXJ0CisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvKzVdID0gcmFuZ2VfZW5kCisrCQkJCQlpZmRlZiBfTElCQyB3ZSB1c2UgdGhlIHZhbHVlIGxvb2tlZCB1cAorKwkJCQkJaW4gX05MX0NPTExBVEVfQ09MTFNFUSBpbnN0ZWFkIG9mCisrCQkJCQl3Y2hhcl90IGNoYXJhY3Rlci4KKysKKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rNl0gPSBjaGFyCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvK3ArNV0gPSBjaGFyCisrCisrCSAgICAgKi8KKysKKysJICAgIC8qIFdlIG5lZWQgYXQgbGVhc3QgNiBzcGFjZXM6IHRoZSBvcGNvZGUsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBjaGFyX2NsYXNzZXMsIHRoZSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbHMsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBlcXVpdmFsZW5jZV9jbGFzc2VzLCB0aGUgbGVuZ3RoIG9mIGNoYXJfcmFuZ2VzLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgY2hhcnMuICAqLworKwkgICAgR0VUX0JVRkZFUl9TUEFDRSAoNik7CisrCisrCSAgICAvKiBTYXZlIGIgYXMgbGFzdHN0YXJ0LiBBbmQgV2UgdXNlIGxhc3RzdGFydCBhcyB0aGUgcG9pbnRlcgorKwkgICAgICAgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNoYXJzZXQgaGVyZS4KKysJICAgICAgIEluIG90aGVyIHdvcmRzLCBsYXN0c3RhcnRbaV0gaW5kaWNhdGVzIGNoYXJzZXRbaV0uICAqLworKyAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrCisrICAgICAgICAgICAgLyogV2UgdGVzdCBgKnAgPT0gJ14nIHR3aWNlLCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGlmCisrICAgICAgICAgICAgICAgc3RhdGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgb25lIEJVRl9QVVNILiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSCAoKnAgPT0gJ14nID8gY2hhcnNldF9ub3QgOiBjaGFyc2V0KTsKKysgICAgICAgICAgICBpZiAoKnAgPT0gJ14nKQorKyAgICAgICAgICAgICAgcCsrOworKworKyAgICAgICAgICAgIC8qIFB1c2ggdGhlIGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBjb2xsYXRpbmdfc3ltYm9scywgdGhlIGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzc2VzLCB0aGUKKysgICAgICAgICAgICAgICBsZW5ndGggb2YgY2hhcl9yYW5nZXMgYW5kIHRoZSBsZW5ndGggb2YgY2hhcnMuICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIXzMgKDAsIDAsIDApOworKyAgICAgICAgICAgIEJVRl9QVVNIXzIgKDAsIDApOworKworKyAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgKi8KKysgICAgICAgICAgICBwMSA9IHA7CisrCisrICAgICAgICAgICAgLyogY2hhcnNldF9ub3QgbWF0Y2hlcyBuZXdsaW5lIGFjY29yZGluZyB0byBhIHN5bnRheCBiaXQuICAqLworKyAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIGJbLTZdID09IGNoYXJzZXRfbm90CisrICAgICAgICAgICAgICAgICYmIChzeW50YXggJiBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpKQorKwkgICAgICB7CisrCQlCVUZfUFVTSCgnXG4nKTsKKysJCWxhc3RzdGFydFs1XSsrOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogUmVhZCBpbiBjaGFyYWN0ZXJzIGFuZCByYW5nZXMsIHNldHRpbmcgbWFwIGJpdHMuICAqLworKyAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAvKiBcIG1pZ2h0IGVzY2FwZSBjaGFyYWN0ZXJzIGluc2lkZSBbLi4uXSBhbmQgW14uLi5dLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKChzeW50YXggJiBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTKSAmJiBjID09ICdcXCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrCQkgICAgQlVGX1BVU0goYzEpOworKwkJICAgIGxhc3RzdGFydFs1XSsrOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFycyAgKi8KKysJCSAgICByYW5nZV9zdGFydCA9IGMxOworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBDb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICBJZiBpdCdzCisrICAgICAgICAgICAgICAgICAgIG5vdCAoaS5lLiwgd2hlbiB0aGUgYnJhY2tldCBleHByZXNzaW9uIGlzIGBbXScgc28KKysgICAgICAgICAgICAgICAgICAgZmFyKSwgdGhlICddJyBjaGFyYWN0ZXIgYml0IGdldHMgc2V0IHdheSBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICddJyAmJiBwICE9IHAxICsgMSkKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGhhZF9jaGFyX2NsYXNzICYmIGMgPT0gJy0nICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSQU5HRSk7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlcjogaWYgdGhpcyBpcyBhIGh5cGhlbiBub3QgYXQgdGhlCisrICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIGEgbGlzdCwgdGhlbiBpdCdzIHRoZSByYW5nZQorKyAgICAgICAgICAgICAgICAgICBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICctJworKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMiA+PSBwYXR0ZXJuICYmIHBbLTJdID09ICdbJykKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDMgPj0gcGF0dGVybiAmJiBwWy0zXSA9PSAnWycgJiYgcFstMl0gPT0gJ14nKQorKyAgICAgICAgICAgICAgICAgICAgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworKwkJICAgIC8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgcmFuZ2Vfc3RhcnQgYW5kIHJhbmdlX2VuZC4gICovCisrCQkgICAgR0VUX0JVRkZFUl9TUEFDRSAoMik7CisrCQkgICAgLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgYiArPSAyOworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gd2NzX2NvbXBpbGVfcmFuZ2UgKHJhbmdlX3N0YXJ0LCAmcCwgcGVuZCwgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4LCBiLCBsYXN0c3RhcnQpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrICAgICAgICAgICAgICAgICAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwWzBdID09ICctJyAmJiBwWzFdICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7IC8qIFRoaXMgaGFuZGxlcyByYW5nZXMgbWFkZSB1cCBvZiBjaGFyYWN0ZXJzIG9ubHkuICAqLworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrCQkgICAgLyogTW92ZSBwYXN0IHRoZSBgLScuICAqLworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysJCSAgICAvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHJhbmdlX3N0YXJ0IGFuZCByYW5nZV9lbmQuICAqLworKwkJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDIpOworKwkJICAgIC8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGIgKz0gMjsKKysgICAgICAgICAgICAgICAgICAgIHJldCA9IHdjc19jb21waWxlX3JhbmdlIChjLCAmcCwgcGVuZCwgdHJhbnNsYXRlLCBzeW50YXgsIGIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogU2VlIGlmIHdlJ3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwb3NzaWJsZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJzonKQorKyAgICAgICAgICAgICAgICAgIHsgLyogTGVhdmUgcm9vbSBmb3IgdGhlIG51bGwuICAqLworKyAgICAgICAgICAgICAgICAgICAgY2hhciBzdHJbQ0hBUl9DTEFTU19NQVhfTEVOR1RIICsgMV07CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICBjMSA9IDA7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWzonLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjID09ICc6JyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJCWlmIChjMSA8IENIQVJfQ0xBU1NfTUFYX0xFTkdUSCkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBpc24ndCBhIHdvcmQgYnJhY2tldGVkIGJ5IGBbOicgYW5kIGA6XSc6CisrICAgICAgICAgICAgICAgICAgICAgICB1bmRvIHRoZSBlbmRpbmcgY2hhcmFjdGVyLCB0aGUgbGV0dGVycywgYW5kIGxlYXZlCisrICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGVhZGluZyBgOicgYW5kIGBbJyAoYnV0IHN0b3JlIHRoZW0gYXMgY2hhcmFjdGVyKS4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnOicgJiYgKnAgPT0gJ10nKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrCQkJd2N0eXBlX3Qgd3Q7CisrCQkJdWludHB0cl90IGFsaWduZWRwOworKworKwkJCS8qIFF1ZXJ5IHRoZSBjaGFyYWN0ZXIgY2xhc3MgYXMgd2N0eXBlX3QuICAqLworKwkJCXd0ID0gSVNfQ0hBUl9DTEFTUyAoc3RyKTsKKysJCQlpZiAod3QgPT0gMCkKKysJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNUWVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJCS8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFKENIQVJfQ0xBU1NfU0laRSk7CisrCQkJLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gQ0hBUl9DTEFTU19TSVpFOworKwkJCS8qIE1vdmUgZGF0YSB3aGljaCBmb2xsb3cgY2hhcmFjdGVyIGNsYXNzZXMKKysJCQkgICAgbm90IHRvIHZpb2xhdGUgdGhlIGRhdGEuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydF9zcGFjZShDSEFSX0NMQVNTX1NJWkUsCisrCQkJCSAgICAgbGFzdHN0YXJ0ICsgNiArIGxhc3RzdGFydFsxXSwKKysJCQkJICAgICBiIC0gMSk7CisrCQkJYWxpZ25lZHAgPSAoKHVpbnRwdHJfdCkobGFzdHN0YXJ0ICsgNiArIGxhc3RzdGFydFsxXSkKKysJCQkJICAgICsgX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSkKKysJCQkgIAkgICAgJiB+KHVpbnRwdHJfdCkoX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSk7CisrCQkJLyogU3RvcmUgdGhlIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgKigod2N0eXBlX3QqKWFsaWduZWRwKSA9IHd0OworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzICovCisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0WzFdICs9IENIQVJfQ0xBU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIICgnOicpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydFs1XSArPSAyOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJCXJhbmdlX3N0YXJ0ID0gJzonOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAoKnAgPT0gJz0nCisrCQkJCQkJCSAgfHwgKnAgPT0gJy4nKSkKKysJCSAgeworKwkJICAgIENIQVJfVCBzdHJbMTI4XTsJLyogU2hvdWxkIGJlIGxhcmdlIGVub3VnaC4gICovCisrCQkgICAgQ0hBUl9UIGRlbGltID0gKnA7IC8qICc9JyBvciAnLicgICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIHVpbnQzMl90IG5ydWxlcyA9CisrCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYKKysJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkgICAgYzEgPSAwOworKworKwkJICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbPScgb3IgJ1tbLicuICAqLworKwkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCSAgICBmb3IgKDs7KQorKwkJICAgICAgeworKwkJCVBBVEZFVENIIChjKTsKKysJCQlpZiAoKGMgPT0gZGVsaW0gJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrCQkJICBicmVhazsKKysJCQlpZiAoYzEgPCBzaXplb2YgKHN0cikgLSAxKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrCQkgICAgaWYgKGMgPT0gZGVsaW0gJiYgKnAgPT0gJ10nICYmIHN0clswXSAhPSAnXDAnKQorKwkJICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpLCBvZmZzZXQ7CisrCQkJLyogSWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZGF0YSB3ZSB1c2UgdGhlIGRlZmF1bHQKKysJCQkgICBjb2xsYXRpb24gaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaXMgaW4gYSBjbGFzcworKwkJCSAgIGJ5IGl0c2VsZi4gIEl0IGFsc28gbWVhbnMgdGhhdCBBU0NJSSBpcyB0aGUKKysJCQkgICBjaGFyYWN0ZXIgc2V0IGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90IGhhdmUgY2hhcmFjdGVyCisrCQkJICAgd2l0aCBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIG11bHRpYnl0ZQorKwkJCSAgIHJlcHJlc2VudGF0aW9uLiAgKi8KKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBub3QgZGVmaW5lZCBfTElCQywgd2UgcHVzaCB0aGUgbmFtZSBhbmQKKysJCQkgICBgXDAnIGZvciB0aGUgc2FrZSBvZiBtYXRjaGluZyBwZXJmb3JtYW5jZS4gICovCisrCQkJaW50IGRhdGFzaXplID0gYzEgKyAxOworKworKyMgaWZkZWYgX0xJQkMKKysJCQlpbnQzMl90IGlkeCA9IDA7CisrCQkJaWYgKG5ydWxlcyA9PSAwKQorKyMgZW5kaWYKKysJCQkgIHsKKysJCQkgICAgaWYgKGMxICE9IDEpCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCQkJICB9CisrIyBpZmRlZiBfTElCQworKwkJCWVsc2UKKysJCQkgIHsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqdGFibGU7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKndlaWdodHM7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKmV4dHJhOworKwkJCSAgICBjb25zdCBpbnQzMl90ICppbmRpcmVjdDsKKysJCQkgICAgd2ludF90ICpjcDsKKysKKysJCQkgICAgaWYoZGVsaW0gPT0gJz0nKQorKwkJCSAgICAgIHsKKysJCQkJLyogV2UgcHVzaCB0aGUgaW5kZXggZm9yIGVxdWl2YWxlbmNlIGNsYXNzLiAgKi8KKysJCQkJY3AgPSAod2ludF90KilzdHI7CisrCisrCQkJCXRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9UQUJMRVdDKTsKKysJCQkJd2VpZ2h0cyA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfV0VJR0hUV0MpOworKwkJCQlleHRyYSA9IChjb25zdCB3aW50X3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9FWFRSQVdDKTsKKysJCQkJaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX0lORElSRUNUV0MpOworKworKwkJCQlpZHggPSBGSU5ESURYICh0YWJsZSwgaW5kaXJlY3QsIGV4dHJhLCAmY3AsIDEpOworKwkJCQlpZiAoaWR4ID09IDAgfHwgY3AgPCAod2ludF90Kikgc3RyICsgYzEpCisrCQkJCSAgLyogVGhpcyBpcyBubyB2YWxpZCBjaGFyYWN0ZXIuICAqLworKwkJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCQlzdHJbMF0gPSAod2NoYXJfdClpZHg7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlIC8qIGRlbGltID09ICcuJyAqLworKwkJCSAgICAgIHsKKysJCQkJLyogV2UgcHVzaCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUKKysJCQkJICAgZm9yIGNvbGxhdGluZyBzeW1ib2wuICAqLworKwkJCQlpbnQzMl90IHRhYmxlX3NpemU7CisrCQkJCWNvbnN0IGludDMyX3QgKnN5bWJfdGFibGU7CisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworKwkJCQlpbnQzMl90IGlkeDsKKysJCQkJaW50MzJfdCBlbGVtOworKwkJCQlpbnQzMl90IHNlY29uZDsKKysJCQkJaW50MzJfdCBoYXNoOworKwkJCQljaGFyIGNoYXJfc3RyW2MxXTsKKysKKysJCQkJLyogV2UgaGF2ZSB0byBjb252ZXJ0IHRoZSBuYW1lIHRvIGEgc2luZ2xlLWJ5dGUKKysJCQkJICAgc3RyaW5nLiAgVGhpcyBpcyBwb3NzaWJsZSBzaW5jZSB0aGUgbmFtZXMKKysJCQkJICAgY29uc2lzdCBvZiBBU0NJSSBjaGFyYWN0ZXJzIGFuZCB0aGUgaW50ZXJuYWwKKysJCQkJICAgcmVwcmVzZW50YXRpb24gaXMgVUNTNC4gICovCisrCQkJCWZvciAoaSA9IDA7IGkgPCBjMTsgKytpKQorKwkJCQkgIGNoYXJfc3RyW2ldID0gc3RyW2ldOworKworKwkJCQl0YWJsZV9zaXplID0KKysJCQkJICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLAorKwkJCQkJCSAgICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CKTsKKysJCQkJc3ltYl90YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CKTsKKysJCQkJZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrCQkJCS8qIExvY2F0ZSB0aGUgY2hhcmFjdGVyIGluIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKysJCQkJaGFzaCA9IGVsZW1faGFzaCAoY2hhcl9zdHIsIGMxKTsKKysKKysJCQkJaWR4ID0gMDsKKysJCQkJZWxlbSA9IGhhc2ggJSB0YWJsZV9zaXplOworKwkJCQlzZWNvbmQgPSBoYXNoICUgKHRhYmxlX3NpemUgLSAyKTsKKysJCQkJd2hpbGUgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisrCQkJCSAgeworKwkJCQkgICAgLyogRmlyc3QgY29tcGFyZSB0aGUgaGFzaGluZyB2YWx1ZS4gICovCisrCQkJCSAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gaGFzaAorKwkJCQkJJiYgYzEgPT0gZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdXQorKwkJCQkJJiYgbWVtY21wIChjaGFyX3N0ciwKKysJCQkJCQkgICAmZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdCisrCQkJCQkJCSArIDFdLCBjMSkgPT0gMCkKKysJCQkJICAgICAgeworKwkJCQkJLyogWWVwLCB0aGlzIGlzIHRoZSBlbnRyeS4gICovCisrCQkJCQlpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisrCQkJCQlpZHggKz0gMSArIGV4dHJhW2lkeF07CisrCQkJCQlicmVhazsKKysJCQkJICAgICAgfQorKworKwkJCQkgICAgLyogTmV4dCBlbnRyeS4gICovCisrCQkJCSAgICBlbGVtICs9IHNlY29uZDsKKysJCQkJICB9CisrCisrCQkJCWlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIENvbXB1dGUgdGhlIGluZGV4IG9mIHRoZSBieXRlIHNlcXVlbmNlCisrCQkJCSAgICAgICBpbiB0aGUgdGFibGUuICAqLworKwkJCQkgICAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworKwkJCQkgICAgLyogQWRqdXN0IGZvciB0aGUgYWxpZ25tZW50LiAgKi8KKysJCQkJICAgIGlkeCA9IChpZHggKyAzKSAmIH4zOworKworKwkJCQkgICAgc3RyWzBdID0gKHdjaGFyX3QpIGlkeCArIDQ7CisrCQkJCSAgfQorKwkJCQllbHNlIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwICYmIGMxID09IDEpCisrCQkJCSAgeworKwkJCQkgICAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYQorKwkJCQkgICAgICAgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyLiAgKi8KKysJCQkJICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkJCSAgICBCVUZfUFVTSChzdHJbMF0pOworKwkJCQkgICAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCQkJICAgIGxhc3RzdGFydFs1XSsrOworKwkJCQkgICAgcmFuZ2Vfc3RhcnQgPSBzdHJbMF07CisrCisrCQkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlCisrCQkJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysJCQkJICAgIFBBVEZFVENIIChjKTsKKysJCQkJICAgIC8qIGV4aXQgZnJvbSB0aGUgc3dpdGNoIGJsb2NrLiAgKi8KKysJCQkJICAgIGNvbnRpbnVlOworKwkJCQkgIH0KKysJCQkJZWxzZQorKwkJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKwkJCSAgICAgIH0KKysJCQkgICAgZGF0YXNpemUgPSAxOworKwkJCSAgfQorKyMgZW5kaWYKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgKG9yIGNvbGxhdGluZyBzeW1ib2wpLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgZXF1aXZhbGVuY2UgY2xhc3MKKysJCQkgICAob3IgY29sbGF0aW5nIHN5bWJvbCkgKGFuZCAnXDAnIGlmIG5lZWRlZCkuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UoZGF0YXNpemUpOworKwkJCS8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBiICs9IGRhdGFzaXplOworKworKwkJCWlmIChkZWxpbSA9PSAnPScpCisrCQkJICB7IC8qIGVxdWl2YWxlbmNlIGNsYXNzICAqLworKwkJCSAgICAvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBvZiBjaGFyX3JhbmdlcywKKysJCQkgICAgICAgd2hpY2ggaXMgbmV4dCB0byBlcXVpdmFsZW5jZV9jbGFzc2VzLiAgKi8KKysJCQkgICAgb2Zmc2V0ID0gbGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdCisrCQkJICAgICAgKyBsYXN0c3RhcnRbM10gKzY7CisrCQkJICAgIC8qIEluc2VydCBzcGFjZS4gICovCisrCQkJICAgIGluc2VydF9zcGFjZShkYXRhc2l6ZSwgbGFzdHN0YXJ0ICsgb2Zmc2V0LCBiIC0gMSk7CisrCisrCQkJICAgIC8qIFdyaXRlIHRoZSBlcXVpdmFsZW5jZV9jbGFzcyBhbmQgXDAuICAqLworKwkJCSAgICBmb3IgKGkgPSAwIDsgaSA8IGRhdGFzaXplIDsgaSsrKQorKwkJCSAgICAgIGxhc3RzdGFydFtvZmZzZXQgKyBpXSA9IHN0cltpXTsKKysKKysJCQkgICAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3Nlcy4gICovCisrCQkJICAgIGxhc3RzdGFydFszXSArPSBkYXRhc2l6ZTsKKysJCQkgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKwkJCSAgfQorKwkJCWVsc2UgLyogZGVsaW0gPT0gJy4nICovCisrCQkJICB7IC8qIGNvbGxhdGluZyBzeW1ib2wgICovCisrCQkJICAgIC8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIHRoZSBlcXVpdmFsZW5jZV9jbGFzc2VzLAorKwkJCSAgICAgICB3aGljaCBpcyBuZXh0IHRvIGNvbGxhdGluZ19zeW1ib2xzLiAgKi8KKysJCQkgICAgb2Zmc2V0ID0gbGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdICsgNjsKKysJCQkgICAgLyogSW5zZXJ0IHNwYWNlIGFuZCB3cml0ZSB0aGUgY29sbGF0aW9uZ19zeW1ib2wKKysJCQkgICAgICAgYW5kIFwwLiAgKi8KKysJCQkgICAgaW5zZXJ0X3NwYWNlKGRhdGFzaXplLCBsYXN0c3RhcnQgKyBvZmZzZXQsIGItMSk7CisrCQkJICAgIGZvciAoaSA9IDAgOyBpIDwgZGF0YXNpemUgOyBpKyspCisrCQkJICAgICAgbGFzdHN0YXJ0W29mZnNldCArIGldID0gc3RyW2ldOworKworKwkJCSAgICAvKiBJbiByZV9tYXRjaF8yX2ludGVybmFsIGlmIHJhbmdlX3N0YXJ0IDwgLTEsIHdlCisrCQkJICAgICAgIGFzc3VtZSAtcmFuZ2Vfc3RhcnQgaXMgdGhlIG9mZnNldCBvZiB0aGUKKysJCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbCB3aGljaCBpcyBzcGVjaWZpZWQgYXMKKysJCQkgICAgICAgdGhlIGNoYXJhY3RlciBvZiB0aGUgcmFuZ2Ugc3RhcnQuICBTbyB3ZSBhc3NpZ24KKysJCQkgICAgICAgLShsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0gKyA2KSB0bworKwkJCSAgICAgICByYW5nZV9zdGFydC4gICovCisrCQkJICAgIHJhbmdlX3N0YXJ0ID0gLShsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0gKyA2KTsKKysJCQkgICAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbC4gICovCisrCQkJICAgIGxhc3RzdGFydFsyXSArPSBkYXRhc2l6ZTsKKysJCQkgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCQkgIH0KKysJCSAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIIChkZWxpbSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0WzVdICs9IDI7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkJcmFuZ2Vfc3RhcnQgPSBkZWxpbTsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkgICAgQlVGX1BVU0goYyk7CisrCQkgICAgbGFzdHN0YXJ0WzVdKys7ICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzsKKysgICAgICAgICAgICAgICAgICB9CisrCSAgICAgIH0KKysKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgICAgICAgLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gcHVzaCBhIGNoYXJzZXQ6IHRoZQorKyAgICAgICAgICAgICAgIG9wY29kZSwgdGhlIGxlbmd0aCBjb3VudCwgYW5kIHRoZSBiaXRzZXQ7IDM0IGJ5dGVzIGluIGFsbC4gICovCisrCSAgICBHRVRfQlVGRkVSX1NQQUNFICgzNCk7CisrCisrICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysKKysgICAgICAgICAgICAvKiBXZSB0ZXN0IGAqcCA9PSAnXicgdHdpY2UsIGluc3RlYWQgb2YgdXNpbmcgYW4gaWYKKysgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCBvbmUgQlVGX1BVU0guICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIICgqcCA9PSAnXicgPyBjaGFyc2V0X25vdCA6IGNoYXJzZXQpOworKyAgICAgICAgICAgIGlmICgqcCA9PSAnXicpCisrICAgICAgICAgICAgICBwKys7CisrCisrICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICAqLworKyAgICAgICAgICAgIHAxID0gcDsKKysKKysgICAgICAgICAgICAvKiBQdXNoIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJpdG1hcC4gICovCisrICAgICAgICAgICAgQlVGX1BVU0ggKCgxIDw8IEJZVEVXSURUSCkgLyBCWVRFV0lEVEgpOworKworKyAgICAgICAgICAgIC8qIENsZWFyIHRoZSB3aG9sZSBtYXAuICAqLworKyAgICAgICAgICAgIGJ6ZXJvIChiLCAoMSA8PCBCWVRFV0lEVEgpIC8gQllURVdJRFRIKTsKKysKKysgICAgICAgICAgICAvKiBjaGFyc2V0X25vdCBtYXRjaGVzIG5ld2xpbmUgYWNjb3JkaW5nIHRvIGEgc3ludGF4IGJpdC4gICovCisrICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgYlstMl0gPT0gY2hhcnNldF9ub3QKKysgICAgICAgICAgICAgICAgJiYgKHN5bnRheCAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkpCisrICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdcbicpOworKworKyAgICAgICAgICAgIC8qIFJlYWQgaW4gY2hhcmFjdGVycyBhbmQgcmFuZ2VzLCBzZXR0aW5nIG1hcCBiaXRzLiAgKi8KKysgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgLyogXCBtaWdodCBlc2NhcGUgY2hhcmFjdGVycyBpbnNpZGUgWy4uLl0gYW5kIFteLi4uXS4gICovCisrICAgICAgICAgICAgICAgIGlmICgoc3ludGF4ICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykgJiYgYyA9PSAnXFwnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKyAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUIChjMSk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjMTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogQ291bGQgYmUgdGhlIGVuZCBvZiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgSWYgaXQncworKyAgICAgICAgICAgICAgICAgICBub3QgKGkuZS4sIHdoZW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyBgW10nIHNvCisrICAgICAgICAgICAgICAgICAgIGZhciksIHRoZSAnXScgY2hhcmFjdGVyIGJpdCBnZXRzIHNldCB3YXkgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXScgJiYgcCAhPSBwMSArIDEpCisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgIGlmIChoYWRfY2hhcl9jbGFzcyAmJiBjID09ICctJyAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUkFOR0UpOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXI6IGlmIHRoaXMgaXMgYSBoeXBoZW4gbm90IGF0IHRoZQorKyAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiBhIGxpc3QsIHRoZW4gaXQncyB0aGUgcmFuZ2UKKysgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnLScKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDIgPj0gcGF0dGVybiAmJiBwWy0yXSA9PSAnWycpCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAzID49IHBhdHRlcm4gJiYgcFstM10gPT0gJ1snICYmIHBbLTJdID09ICdeJykKKysgICAgICAgICAgICAgICAgICAgICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldAorKyAgICAgICAgICAgICAgICAgICAgICA9IGJ5dGVfY29tcGlsZV9yYW5nZSAocmFuZ2Vfc3RhcnQsICZwLCBwZW5kLCB0cmFuc2xhdGUsCisrCQkJCQkgICAgc3ludGF4LCBiKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBbMF0gPT0gJy0nICYmIHBbMV0gIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsgLyogVGhpcyBoYW5kbGVzIHJhbmdlcyBtYWRlIHVwIG9mIGNoYXJhY3RlcnMgb25seS4gICovCisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldDsKKysKKysJCSAgICAvKiBNb3ZlIHBhc3QgdGhlIGAtJy4gICovCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gYnl0ZV9jb21waWxlX3JhbmdlIChjLCAmcCwgcGVuZCwgdHJhbnNsYXRlLCBzeW50YXgsIGIpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogU2VlIGlmIHdlJ3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwb3NzaWJsZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJzonKQorKyAgICAgICAgICAgICAgICAgIHsgLyogTGVhdmUgcm9vbSBmb3IgdGhlIG51bGwuICAqLworKyAgICAgICAgICAgICAgICAgICAgY2hhciBzdHJbQ0hBUl9DTEFTU19NQVhfTEVOR1RIICsgMV07CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICBjMSA9IDA7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWzonLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjID09ICc6JyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJCWlmICgoKGludCkgYzEpIDwgQ0hBUl9DTEFTU19NQVhfTEVOR1RIKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIGlzbid0IGEgd29yZCBicmFja2V0ZWQgYnkgYFs6JyBhbmQgYDpdJzoKKysgICAgICAgICAgICAgICAgICAgICAgIHVuZG8gdGhlIGVuZGluZyBjaGFyYWN0ZXIsIHRoZSBsZXR0ZXJzLCBhbmQgbGVhdmUKKysgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsZWFkaW5nIGA6JyBhbmQgYFsnIChidXQgc2V0IGJpdHMgZm9yIHRoZW0pLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICc6JyAmJiAqcCA9PSAnXScpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysjIGlmIFdJREVfQ0hBUl9TVVBQT1JUCisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19sb3dlciA9IFNUUkVRIChzdHIsICJsb3dlciIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfdXBwZXIgPSBTVFJFUSAoc3RyLCAidXBwZXIiKTsKKysJCQl3Y3R5cGVfdCB3dDsKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2g7CisrCisrCQkJd3QgPSBJU19DSEFSX0NMQVNTIChzdHIpOworKwkJCWlmICh3dCA9PSAwKQorKwkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ1RZUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaCA9IDA7IGNoIDwgMSA8PCBCWVRFV0lEVEg7ICsrY2gpCisrCQkJICB7CisrIyAgaWZkZWYgX0xJQkMKKysJCQkgICAgaWYgKF9faXN3Y3R5cGUgKF9fYnRvd2MgKGNoKSwgd3QpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKyMgIGVsc2UKKysJCQkgICAgaWYgKGlzd2N0eXBlIChidG93YyAoY2gpLCB3dCkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrIyAgZW5kaWYKKysKKysJCQkgICAgaWYgKHRyYW5zbGF0ZSAmJiAoaXNfdXBwZXIgfHwgaXNfbG93ZXIpCisrCQkJCSYmIChJU1VQUEVSIChjaCkgfHwgSVNMT1dFUiAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgIH0KKysKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrIyBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYWxudW0gPSBTVFJFUSAoc3RyLCAiYWxudW0iKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2FscGhhID0gU1RSRVEgKHN0ciwgImFscGhhIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19ibGFuayA9IFNUUkVRIChzdHIsICJibGFuayIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfY250cmwgPSBTVFJFUSAoc3RyLCAiY250cmwiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2RpZ2l0ID0gU1RSRVEgKHN0ciwgImRpZ2l0Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19ncmFwaCA9IFNUUkVRIChzdHIsICJncmFwaCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfbG93ZXIgPSBTVFJFUSAoc3RyLCAibG93ZXIiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3ByaW50ID0gU1RSRVEgKHN0ciwgInByaW50Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19wdW5jdCA9IFNUUkVRIChzdHIsICJwdW5jdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfc3BhY2UgPSBTVFJFUSAoc3RyLCAic3BhY2UiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3VwcGVyID0gU1RSRVEgKHN0ciwgInVwcGVyIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc194ZGlnaXQgPSBTVFJFUSAoc3RyLCAieGRpZ2l0Iik7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJU19DSEFSX0NMQVNTIChzdHIpKQorKwkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ1RZUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaCA9IDA7IGNoIDwgMSA8PCBCWVRFV0lEVEg7IGNoKyspCisrICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrCQkJICAgIC8qIFRoaXMgd2FzIHNwbGl0IGludG8gMyBpZidzIHRvCisrCQkJICAgICAgIGF2b2lkIGFuIGFyYml0cmFyeSBsaW1pdCBpbiBzb21lIGNvbXBpbGVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgIChpc19hbG51bSAgJiYgSVNBTE5VTSAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2FscGhhICAmJiBJU0FMUEhBIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfYmxhbmsgICYmIElTQkxBTksgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19jbnRybCAgJiYgSVNDTlRSTCAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgICAgaWYgKCAgIChpc19kaWdpdCAgJiYgSVNESUdJVCAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2dyYXBoICAmJiBJU0dSQVBIIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfbG93ZXIgICYmIElTTE9XRVIgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19wcmludCAgJiYgSVNQUklOVCAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgICAgaWYgKCAgIChpc19wdW5jdCAgJiYgSVNQVU5DVCAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3NwYWNlICAmJiBJU1NQQUNFIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfdXBwZXIgICYmIElTVVBQRVIgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc194ZGlnaXQgJiYgSVNYRElHSVQgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICAgIGlmICggICB0cmFuc2xhdGUgJiYgKGlzX3VwcGVyIHx8IGlzX2xvd2VyKQorKwkJCQkmJiAoSVNVUFBFUiAoY2gpIHx8IElTTE9XRVIgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKyMgZW5kaWYJLyogbGliYyB8fCB3Y3R5cGUuaCAqLworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnOicpOworKwkJCXJhbmdlX3N0YXJ0ID0gJzonOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnPScpCisrCQkgIHsKKysJCSAgICB1bnNpZ25lZCBjaGFyIHN0cltNQl9MRU5fTUFYICsgMV07CisrIyBpZmRlZiBfTElCQworKwkJICAgIHVpbnQzMl90IG5ydWxlcyA9CisrCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYKKysKKysJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkgICAgYzEgPSAwOworKworKwkJICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbPScuICAqLworKwkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCSAgICBmb3IgKDs7KQorKwkJICAgICAgeworKwkJCVBBVEZFVENIIChjKTsKKysJCQlpZiAoKGMgPT0gJz0nICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKwkJCSAgYnJlYWs7CisrCQkJaWYgKGMxIDwgTUJfTEVOX01BWCkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICAgIHN0cltjMV0gPSAnXDAnOworKworKwkJICAgIGlmIChjID09ICc9JyAmJiAqcCA9PSAnXScgJiYgc3RyWzBdICE9ICdcMCcpCisrCQkgICAgICB7CisrCQkJLyogSWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZGF0YSB3ZSB1c2UgdGhlIGRlZmF1bHQKKysJCQkgICBjb2xsYXRpb24gaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaXMgaW4gYSBjbGFzcworKwkJCSAgIGJ5IGl0c2VsZi4gIEl0IGFsc28gbWVhbnMgdGhhdCBBU0NJSSBpcyB0aGUKKysJCQkgICBjaGFyYWN0ZXIgc2V0IGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90IGhhdmUgY2hhcmFjdGVyCisrCQkJICAgd2l0aCBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIG11bHRpYnl0ZQorKwkJCSAgIHJlcHJlc2VudGF0aW9uLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkJaWYgKG5ydWxlcyA9PSAwKQorKyMgZW5kaWYKKysJCQkgIHsKKysJCQkgICAgaWYgKGMxICE9IDEpCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIFNldCB0aGUgYml0IGZvciB0aGUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgU0VUX0xJU1RfQklUIChzdHJbMF0pOworKwkJCSAgfQorKyMgaWZkZWYgX0xJQkMKKysJCQllbHNlCisrCQkJICB7CisrCQkJICAgIC8qIFRyeSB0byBtYXRjaCB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBgc3RyJyBhZ2FpbnN0CisrCQkJICAgICAgIHRob3NlIGtub3duIHRvIHRoZSBjb2xsYXRlIGltcGxlbWVudGF0aW9uLgorKwkJCSAgICAgICBGaXJzdCBmaW5kIG91dCB3aGV0aGVyIHRoZSBieXRlcyBpbiBgc3RyJyBhcmUKKysJCQkgICAgICAgYWN0dWFsbHkgZnJvbSBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBjb25zdCBpbnQzMl90ICp0YWJsZTsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0czsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKmluZGlyZWN0OworKwkJCSAgICBpbnQzMl90IGlkeDsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBzdHI7CisrCQkJICAgIGludCBjaDsKKysKKysJCQkgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKysJCQkgICAgd2VpZ2h0cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1dFSUdIVE1CKTsKKysJCQkgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9FWFRSQU1CKTsKKysJCQkgICAgaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9JTkRJUkVDVE1CKTsKKysJCQkgICAgaWR4ID0gRklORElEWCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJmNwLCAxKTsKKysJCQkgICAgaWYgKGlkeCA9PSAwIHx8IGNwIDwgc3RyICsgYzEpCisrCQkJICAgICAgLyogVGhpcyBpcyBubyB2YWxpZCBjaGFyYWN0ZXIuICAqLworKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBOb3cgd2UgaGF2ZSB0byBnbyB0aHJvdWdodCB0aGUgd2hvbGUgdGFibGUKKysJCQkgICAgICAgYW5kIGZpbmQgYWxsIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSB0aGUgc2FtZQorKwkJCSAgICAgICBmaXJzdCBsZXZlbCB3ZWlnaHQuCisrCisrCQkJICAgICAgIFhYWCBOb3RlIHRoYXQgdGhpcyBpcyBub3QgZW50aXJlbHkgY29ycmVjdC4KKysJCQkgICAgICAgd2Ugd291bGQgaGF2ZSB0byBtYXRjaCBtdWx0aWJ5dGUgc2VxdWVuY2VzCisrCQkJICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHRoZSBjdXJyZW50CisrCQkJICAgICAgIGltcGxlbWVudGF0aW9uLiAgKi8KKysJCQkgICAgZm9yIChjaCA9IDE7IGNoIDwgMjU2OyArK2NoKQorKwkJCSAgICAgIC8qIFhYWCBUaGlzIHRlc3Qgd291bGQgaGF2ZSB0byBiZSBjaGFuZ2VkIGlmIHdlCisrCQkJCSB3b3VsZCBhbGxvdyBtYXRjaGluZyBtdWx0aWJ5dGUgc2VxdWVuY2VzLiAgKi8KKysJCQkgICAgICBpZiAodGFibGVbY2hdID4gMCkKKysJCQkJeworKwkJCQkgIGludDMyX3QgaWR4MiA9IHRhYmxlW2NoXTsKKysJCQkJICBzaXplX3QgbGVuID0gd2VpZ2h0c1tpZHgyXTsKKysKKysJCQkJICAvKiBUZXN0IHdoZXRoZXIgdGhlIGxlbmdodHMgbWF0Y2guICAqLworKwkJCQkgIGlmICh3ZWlnaHRzW2lkeF0gPT0gbGVuKQorKwkJCQkgICAgeworKwkJCQkgICAgICAvKiBUaGV5IGRvLiAgTmV3IGNvbXBhcmUgdGhlIGJ5dGVzIG9mCisrCQkJCQkgdGhlIHdlaWdodC4gICovCisrCQkJCSAgICAgIHNpemVfdCBjbnQgPSAwOworKworKwkJCQkgICAgICB3aGlsZSAoY250IDwgbGVuCisrCQkJCQkgICAgICYmICh3ZWlnaHRzW2lkeCArIDEgKyBjbnRdCisrCQkJCQkJID09IHdlaWdodHNbaWR4MiArIDEgKyBjbnRdKSkKKysJCQkJCSsrY250OworKworKwkJCQkgICAgICBpZiAoY250ID09IGxlbikKKysJCQkJCS8qIFRoZXkgbWF0Y2guICBNYXJrIHRoZSBjaGFyYWN0ZXIgYXMKKysJCQkJCSAgIGFjY2VwdGFibGUuICAqLworKwkJCQkJU0VUX0xJU1RfQklUIChjaCk7CisrCQkJCSAgICB9CisrCQkJCX0KKysJCQkgIH0KKysjIGVuZGlmCisrCQkJaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKwkJICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJz0nKTsKKysJCQlyYW5nZV9zdGFydCA9ICc9JzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICcuJykKKysJCSAgeworKwkJICAgIHVuc2lnbmVkIGNoYXIgc3RyWzEyOF07CS8qIFNob3VsZCBiZSBsYXJnZSBlbm91Z2guICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICB1aW50MzJfdCBucnVsZXMgPQorKwkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmCisrCisrCQkgICAgUEFURkVUQ0ggKGMpOworKwkJICAgIGMxID0gMDsKKysKKysJCSAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWy4nLiAgKi8KKysJCSAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkgICAgZm9yICg7OykKKysJCSAgICAgIHsKKysJCQlQQVRGRVRDSCAoYyk7CisrCQkJaWYgKChjID09ICcuJyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysJCQkgIGJyZWFrOworKwkJCWlmIChjMSA8IHNpemVvZiAoc3RyKSkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICAgIHN0cltjMV0gPSAnXDAnOworKworKwkJICAgIGlmIChjID09ICcuJyAmJiAqcCA9PSAnXScgJiYgc3RyWzBdICE9ICdcMCcpCisrCQkgICAgICB7CisrCQkJLyogSWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZGF0YSB3ZSB1c2UgdGhlIGRlZmF1bHQKKysJCQkgICBjb2xsYXRpb24gaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaXMgdGhlIG5hbWUKKysJCQkgICBmb3IgaXRzIG93biBjbGFzcyB3aGljaCBjb250YWlucyBvbmx5IHRoZSBvbmUKKysJCQkgICBjaGFyYWN0ZXIuICBJdCBhbHNvIG1lYW5zIHRoYXQgQVNDSUkgaXMgdGhlCisrCQkJICAgY2hhcmFjdGVyIHNldCBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCBoYXZlIGNoYXJhY3RlcgorKwkJCSAgIHdpdGggbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBtdWx0aWJ5dGUKKysJCQkgICByZXByZXNlbnRhdGlvbi4gICovCisrIyBpZmRlZiBfTElCQworKwkJCWlmIChucnVsZXMgPT0gMCkKKysjIGVuZGlmCisrCQkJICB7CisrCQkJICAgIGlmIChjMSAhPSAxKQorKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBTZXQgdGhlIGJpdCBmb3IgdGhlIGNoYXJhY3Rlci4gICovCisrCQkJICAgIFNFVF9MSVNUX0JJVCAoc3RyWzBdKTsKKysJCQkgICAgcmFuZ2Vfc3RhcnQgPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyKVswXTsKKysJCQkgIH0KKysjIGlmZGVmIF9MSUJDCisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBUcnkgdG8gbWF0Y2ggdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYHN0cicgYWdhaW5zdAorKwkJCSAgICAgICB0aG9zZSBrbm93biB0byB0aGUgY29sbGF0ZSBpbXBsZW1lbnRhdGlvbi4KKysJCQkgICAgICAgRmlyc3QgZmluZCBvdXQgd2hldGhlciB0aGUgYnl0ZXMgaW4gYHN0cicgYXJlCisrCQkJICAgICAgIGFjdHVhbGx5IGZyb20gZXhhY3RseSBvbmUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgaW50MzJfdCB0YWJsZV9zaXplOworKwkJCSAgICBjb25zdCBpbnQzMl90ICpzeW1iX3RhYmxlOworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKysJCQkgICAgaW50MzJfdCBpZHg7CisrCQkJICAgIGludDMyX3QgZWxlbTsKKysJCQkgICAgaW50MzJfdCBzZWNvbmQ7CisrCQkJICAgIGludDMyX3QgaGFzaDsKKysKKysJCQkgICAgdGFibGVfc2l6ZSA9CisrCQkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwKKysJCQkJCQlfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CKTsKKysJCQkgICAgc3ltYl90YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIpOworKwkJCSAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKwkJCSAgICAvKiBMb2NhdGUgdGhlIGNoYXJhY3RlciBpbiB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrCQkJICAgIGhhc2ggPSBlbGVtX2hhc2ggKChjb25zdCBjaGFyICopIHN0ciwgYzEpOworKworKwkJCSAgICBpZHggPSAwOworKwkJCSAgICBlbGVtID0gaGFzaCAlIHRhYmxlX3NpemU7CisrCQkJICAgIHNlY29uZCA9IGhhc2ggJSAodGFibGVfc2l6ZSAtIDIpOworKwkJCSAgICB3aGlsZSAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKysJCQkgICAgICB7CisrCQkJCS8qIEZpcnN0IGNvbXBhcmUgdGhlIGhhc2hpbmcgdmFsdWUuICAqLworKwkJCQlpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gaGFzaAorKwkJCQkgICAgJiYgYzEgPT0gZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdXQorKwkJCQkgICAgJiYgbWVtY21wIChzdHIsCisrCQkJCQkgICAgICAgJmV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXQorKwkJCQkJCSAgICAgKyAxXSwKKysJCQkJCSAgICAgICBjMSkgPT0gMCkKKysJCQkJICB7CisrCQkJCSAgICAvKiBZZXAsIHRoaXMgaXMgdGhlIGVudHJ5LiAgKi8KKysJCQkJICAgIGlkeCA9IHN5bWJfdGFibGVbMiAqIGVsZW0gKyAxXTsKKysJCQkJICAgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKysJCQkJICAgIGJyZWFrOworKwkJCQkgIH0KKysKKysJCQkJLyogTmV4dCBlbnRyeS4gICovCisrCQkJCWVsZW0gKz0gc2Vjb25kOworKwkJCSAgICAgIH0KKysKKysJCQkgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDApCisrCQkJICAgICAgLyogVGhpcyBpcyBubyB2YWxpZCBjaGFyYWN0ZXIuICAqLworKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBOb3cgYWRkIHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyKHMpIHdlIGZvdW5kCisrCQkJICAgICAgIHRvIHRoZSBhY2NlcHQgbGlzdC4KKysKKysJCQkgICAgICAgWFhYIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0LgorKwkJCSAgICAgICB3ZSB3b3VsZCBoYXZlIHRvIG1hdGNoIG11bHRpYnl0ZSBzZXF1ZW5jZXMKKysJCQkgICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIHdpdGggdGhlIGN1cnJlbnQKKysJCQkgICAgICAgaW1wbGVtZW50YXRpb24uICBBbHNvLCB3ZSBoYXZlIHRvIG1hdGNoCisrCQkJICAgICAgIGNvbGxhdGluZyBzeW1ib2xzLCB3aGljaCBleHBhbmQgdG8gbW9yZSB0aGFuCisrCQkJICAgICAgIG9uZSBmaWxlLCBhcyBhIHdob2xlIGFuZCBub3QgYWxsb3cgdGhlCisrCQkJICAgICAgIGluZGl2aWR1YWwgYnl0ZXMuICAqLworKwkJCSAgICBjMSA9IGV4dHJhW2lkeCsrXTsKKysJCQkgICAgaWYgKGMxID09IDEpCisrCQkJICAgICAgcmFuZ2Vfc3RhcnQgPSBleHRyYVtpZHhdOworKwkJCSAgICB3aGlsZSAoYzEtLSA+IDApCisrCQkJICAgICAgeworKwkJCQlTRVRfTElTVF9CSVQgKGV4dHJhW2lkeF0pOworKwkJCQkrK2lkeDsKKysJCQkgICAgICB9CisrCQkJICB9CisrIyBlbmRpZgorKwkJCWhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnLicpOworKwkJCXJhbmdlX3N0YXJ0ID0gJy4nOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoYyk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBEaXNjYXJkIGFueSAobm9uKW1hdGNoaW5nIGxpc3QgYnl0ZXMgdGhhdCBhcmUgYWxsIDAgYXQgdGhlCisrICAgICAgICAgICAgICAgZW5kIG9mIHRoZSBtYXAuICBEZWNyZWFzZSB0aGUgbWFwLWxlbmd0aCBieXRlIHRvby4gICovCisrICAgICAgICAgICAgd2hpbGUgKChpbnQpIGJbLTFdID4gMCAmJiBiW2JbLTFdIC0gMV0gPT0gMCkKKysgICAgICAgICAgICAgIGJbLTFdLS07CisrICAgICAgICAgICAgYiArPSBiWy0xXTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysKKysJY2FzZSAnKCc6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfb3BlbjsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICcpJzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9jbG9zZTsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICdcbic6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9ORVdMSU5FX0FMVCkKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9hbHQ7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKwljYXNlICd8JzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfYWx0OworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJ3snOgorKyAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0lOVEVSVkFMUyAmJiBzeW50YXggJiBSRV9OT19CS19CUkFDRVMpCisrICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2ludGVydmFsOworKyAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAnXFwnOgorKyAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAvKiBEbyBub3QgdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIFwsIHNvIHRoYXQgd2UgY2FuCisrICAgICAgICAgICAgIGRpc3Rpbmd1aXNoLCBlLmcuLCBcQiBmcm9tIFxiLCBldmVuIGlmIHdlIG5vcm1hbGx5IHdvdWxkCisrICAgICAgICAgICAgIHRyYW5zbGF0ZSwgZS5nLiwgQiB0byBiLiAgKi8KKysgICAgICAgICAgUEFURkVUQ0hfUkFXIChjKTsKKysKKysgICAgICAgICAgc3dpdGNoIChjKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICBjYXNlICcoJzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICBoYW5kbGVfb3BlbjoKKysgICAgICAgICAgICAgIGJ1ZnAtPnJlX25zdWIrKzsKKysgICAgICAgICAgICAgIHJlZ251bSsrOworKworKyAgICAgICAgICAgICAgaWYgKENPTVBJTEVfU1RBQ0tfRlVMTCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIFJFVEFMTE9DIChjb21waWxlX3N0YWNrLnN0YWNrLCBjb21waWxlX3N0YWNrLnNpemUgPDwgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZV9zdGFja19lbHRfdCk7CisrICAgICAgICAgICAgICAgICAgaWYgKGNvbXBpbGVfc3RhY2suc3RhY2sgPT0gTlVMTCkgcmV0dXJuIFJFR19FU1BBQ0U7CisrCisrICAgICAgICAgICAgICAgICAgY29tcGlsZV9zdGFjay5zaXplIDw8PSAxOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0byByZXN0b3JlIHdoZW4gd2UgaGl0IGVuZCBvZiB0aGlzCisrICAgICAgICAgICAgICAgICBncm91cC4gIFRoZXkgYXJlIGFsbCByZWxhdGl2ZSBvZmZzZXRzLCBzbyB0aGF0IGlmIHRoZQorKyAgICAgICAgICAgICAgICAgd2hvbGUgcGF0dGVybiBtb3ZlcyBiZWNhdXNlIG9mIHJlYWxsb2MsIHRoZXkgd2lsbCBzdGlsbAorKyAgICAgICAgICAgICAgICAgYmUgdmFsaWQuICAqLworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AuYmVnYWx0X29mZnNldCA9IGJlZ2FsdCAtIENPTVBJTEVEX0JVRkZFUl9WQVI7CisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5maXh1cF9hbHRfanVtcAorKyAgICAgICAgICAgICAgICA9IGZpeHVwX2FsdF9qdW1wID8gZml4dXBfYWx0X2p1bXAgLSBDT01QSUxFRF9CVUZGRVJfVkFSICsgMSA6IDA7CisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5sYXN0c3RhcnRfb2Zmc2V0ID0gYiAtIENPTVBJTEVEX0JVRkZFUl9WQVI7CisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5yZWdudW0gPSByZWdudW07CisrCisrICAgICAgICAgICAgICAvKiBXZSB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSB0aGUgMCB3aXRoIHRoZSBudW1iZXIgb2YKKysgICAgICAgICAgICAgICAgIGdyb3VwcyBpbm5lciB0byB0aGlzIG9uZS4gIEJ1dCBkbyBub3QgcHVzaCBhCisrICAgICAgICAgICAgICAgICBzdGFydF9tZW1vcnkgZm9yIGdyb3VwcyBiZXlvbmQgdGhlIGxhc3Qgb25lIHdlIGNhbgorKyAgICAgICAgICAgICAgICAgcmVwcmVzZW50IGluIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgICAgICAgICAgICAgIGlmIChyZWdudW0gPD0gTUFYX1JFR05VTSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmlubmVyX2dyb3VwX29mZnNldCA9IGIKKysJCSAgICAtIENPTVBJTEVEX0JVRkZFUl9WQVIgKyAyOworKyAgICAgICAgICAgICAgICAgIEJVRl9QVVNIXzMgKHN0YXJ0X21lbW9yeSwgcmVnbnVtLCAwKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgY29tcGlsZV9zdGFjay5hdmFpbCsrOworKworKyAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAgPSAwOworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gMDsKKysgICAgICAgICAgICAgIGJlZ2FsdCA9IGI7CisrCSAgICAgIC8qIElmIHdlJ3ZlIHJlYWNoZWQgTUFYX1JFR05VTSBncm91cHMsIHRoZW4gdGhpcyBvcGVuCisrCQkgd29uJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgYW55IGNvZGUsIHNvIHdlJ2xsIGhhdmUgdG8KKysJCSBjbGVhciBwZW5kaW5nX2V4YWN0IGV4cGxpY2l0bHkuICAqLworKwkgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJyknOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgICAgaWYgKENPTVBJTEVfU1RBQ0tfRU1QVFkpCisrCQl7CisrCQkgIGlmIChzeW50YXggJiBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorKwkJICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysJCSAgZWxzZQorKwkJICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJQQVJFTik7CisrCQl9CisrCisrICAgICAgICAgICAgaGFuZGxlX2Nsb3NlOgorKyAgICAgICAgICAgICAgaWYgKGZpeHVwX2FsdF9qdW1wKQorKyAgICAgICAgICAgICAgICB7IC8qIFB1c2ggYSBkdW1teSBmYWlsdXJlIHBvaW50IGF0IHRoZSBlbmQgb2YgdGhlCisrICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgZm9yIGEgcG9zc2libGUgZnV0dXJlCisrICAgICAgICAgICAgICAgICAgICAgYHBvcF9mYWlsdXJlX2p1bXAnIHRvIHBvcC4gIFNlZSBjb21tZW50cyBhdAorKyAgICAgICAgICAgICAgICAgICAgIGBwdXNoX2R1bW15X2ZhaWx1cmUnIGluIGByZV9tYXRjaF8yJy4gICovCisrICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKHB1c2hfZHVtbXlfZmFpbHVyZSk7CisrCisrICAgICAgICAgICAgICAgICAgLyogV2UgYWxsb2NhdGVkIHNwYWNlIGZvciB0aGlzIGp1bXAgd2hlbiB3ZSBhc3NpZ25lZAorKyAgICAgICAgICAgICAgICAgICAgIHRvIGBmaXh1cF9hbHRfanVtcCcsIGluIHRoZSBgaGFuZGxlX2FsdCcgY2FzZSBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAoanVtcF9wYXN0X2FsdCwgZml4dXBfYWx0X2p1bXAsIGIgLSAxKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogU2VlIHNpbWlsYXIgY29kZSBmb3IgYmFja3NsYXNoZWQgbGVmdCBwYXJlbiBhYm92ZS4gICovCisrICAgICAgICAgICAgICBpZiAoQ09NUElMRV9TVEFDS19FTVBUWSkKKysJCXsKKysJCSAgaWYgKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisrCQkgICAgZ290byBub3JtYWxfY2hhcjsKKysJCSAgZWxzZQorKwkJICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJQQVJFTik7CisrCQl9CisrCisrICAgICAgICAgICAgICAvKiBTaW5jZSB3ZSBqdXN0IGNoZWNrZWQgZm9yIGFuIGVtcHR5IHN0YWNrIGFib3ZlLCB0aGlzCisrICAgICAgICAgICAgICAgICBgYGNhbid0IGhhcHBlbicnLiAgKi8KKysgICAgICAgICAgICAgIGFzc2VydCAoY29tcGlsZV9zdGFjay5hdmFpbCAhPSAwKTsKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3QganVzdCB3YW50IHRvIHJlc3RvcmUgaW50byBgcmVnbnVtJywgYmVjYXVzZQorKyAgICAgICAgICAgICAgICAgICBsYXRlciBncm91cHMgc2hvdWxkIGNvbnRpbnVlIHRvIGJlIG51bWJlcmVkIGhpZ2hlciwKKysgICAgICAgICAgICAgICAgICAgYXMgaW4gYChhYiljKGRlKScgLS0gdGhlIHNlY29uZCBncm91cCBpcyAjMi4gICovCisrICAgICAgICAgICAgICAgIHJlZ251bV90IHRoaXNfZ3JvdXBfcmVnbnVtOworKworKyAgICAgICAgICAgICAgICBjb21waWxlX3N0YWNrLmF2YWlsLS07CisrICAgICAgICAgICAgICAgIGJlZ2FsdCA9IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5iZWdhbHRfb2Zmc2V0OworKyAgICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcAorKyAgICAgICAgICAgICAgICAgID0gQ09NUElMRV9TVEFDS19UT1AuZml4dXBfYWx0X2p1bXAKKysgICAgICAgICAgICAgICAgICAgID8gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmZpeHVwX2FsdF9qdW1wIC0gMQorKyAgICAgICAgICAgICAgICAgICAgOiAwOworKyAgICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AubGFzdHN0YXJ0X29mZnNldDsKKysgICAgICAgICAgICAgICAgdGhpc19ncm91cF9yZWdudW0gPSBDT01QSUxFX1NUQUNLX1RPUC5yZWdudW07CisrCQkvKiBJZiB3ZSd2ZSByZWFjaGVkIE1BWF9SRUdOVU0gZ3JvdXBzLCB0aGVuIHRoaXMgb3BlbgorKwkJICAgd29uJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgYW55IGNvZGUsIHNvIHdlJ2xsIGhhdmUgdG8KKysJCSAgIGNsZWFyIHBlbmRpbmdfZXhhY3QgZXhwbGljaXRseS4gICovCisrCQlwZW5kaW5nX2V4YWN0ID0gMDsKKysKKysgICAgICAgICAgICAgICAgLyogV2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgZ3JvdXAsIHNvIG5vdyB3ZSBrbm93IGhvdyBtYW55CisrICAgICAgICAgICAgICAgICAgIGdyb3VwcyB3ZXJlIGluc2lkZSB0aGlzIG9uZS4gICovCisrICAgICAgICAgICAgICAgIGlmICh0aGlzX2dyb3VwX3JlZ251bSA8PSBNQVhfUkVHTlVNKQorKyAgICAgICAgICAgICAgICAgIHsKKysJCSAgICBVQ0hBUl9UICppbm5lcl9ncm91cF9sb2MKKysgICAgICAgICAgICAgICAgICAgICAgPSBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AuaW5uZXJfZ3JvdXBfb2Zmc2V0OworKworKyAgICAgICAgICAgICAgICAgICAgKmlubmVyX2dyb3VwX2xvYyA9IHJlZ251bSAtIHRoaXNfZ3JvdXBfcmVnbnVtOworKyAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0hfMyAoc3RvcF9tZW1vcnksIHRoaXNfZ3JvdXBfcmVnbnVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnbnVtIC0gdGhpc19ncm91cF9yZWdudW0pOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJ3wnOgkJCQkJLyogYFx8Jy4gICovCisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMgfHwgc3ludGF4ICYgUkVfTk9fQktfVkJBUikKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKyAgICAgICAgICAgIGhhbmRsZV9hbHQ6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrICAgICAgICAgICAgICAvKiBJbnNlcnQgYmVmb3JlIHRoZSBwcmV2aW91cyBhbHRlcm5hdGl2ZSBhIGp1bXAgd2hpY2gKKysgICAgICAgICAgICAgICAgIGp1bXBzIHRvIHRoaXMgYWx0ZXJuYXRpdmUgaWYgdGhlIGZvcm1lciBmYWlscy4gICovCisrICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICBJTlNFUlRfSlVNUCAob25fZmFpbHVyZV9qdW1wLCBiZWdhbHQsCisrCQkJICAgYiArIDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAvKiBUaGUgYWx0ZXJuYXRpdmUgYmVmb3JlIHRoaXMgb25lIGhhcyBhIGp1bXAgYWZ0ZXIgaXQKKysgICAgICAgICAgICAgICAgIHdoaWNoIGdldHMgZXhlY3V0ZWQgaWYgaXQgZ2V0cyBtYXRjaGVkLiAgQWRqdXN0IHRoYXQKKysgICAgICAgICAgICAgICAgIGp1bXAgc28gaXQgd2lsbCBqdW1wIHRvIHRoaXMgYWx0ZXJuYXRpdmUncyBhbmFsb2dvdXMKKysgICAgICAgICAgICAgICAgIGp1bXAgKHB1dCBpbiBiZWxvdywgd2hpY2ggaW4gdHVybiB3aWxsIGp1bXAgdG8gdGhlIG5leHQKKysgICAgICAgICAgICAgICAgIChpZiBhbnkpIGFsdGVybmF0aXZlJ3Mgc3VjaCBqdW1wLCBldGMuKS4gIFRoZSBsYXN0IHN1Y2gKKysgICAgICAgICAgICAgICAgIGp1bXAganVtcHMgdG8gdGhlIGNvcnJlY3QgZmluYWwgZGVzdGluYXRpb24uICBBIHBpY3R1cmU6CisrICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyBfX19fXworKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgfCAgIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB2IHwgICB2CisrICAgICAgICAgICAgICAgICAgICAgICAgIGEgfCBiICAgfCBjCisrCisrICAgICAgICAgICAgICAgICBJZiB3ZSBhcmUgYXQgYGInLCB0aGVuIGZpeHVwX2FsdF9qdW1wIHJpZ2h0IG5vdyBwb2ludHMgdG8gYQorKyAgICAgICAgICAgICAgICAgdGhyZWUtYnl0ZSBzcGFjZSBhZnRlciBgYScuICBXZSdsbCBwdXQgaW4gdGhlIGp1bXAsIHNldAorKyAgICAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAgdG8gcmlnaHQgYWZ0ZXIgYGInLCBhbmQgbGVhdmUgYmVoaW5kIHRocmVlCisrICAgICAgICAgICAgICAgICBieXRlcyB3aGljaCB3ZSdsbCBmaWxsIGluIHdoZW4gd2UgZ2V0IHRvIGFmdGVyIGBjJy4gICovCisrCisrICAgICAgICAgICAgICBpZiAoZml4dXBfYWx0X2p1bXApCisrICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKGp1bXBfcGFzdF9hbHQsIGZpeHVwX2FsdF9qdW1wLCBiKTsKKysKKysgICAgICAgICAgICAgIC8qIE1hcmsgYW5kIGxlYXZlIHNwYWNlIGZvciBhIGp1bXAgYWZ0ZXIgdGhpcyBhbHRlcm5hdGl2ZSwKKysgICAgICAgICAgICAgICAgIHRvIGJlIGZpbGxlZCBpbiBsYXRlciBlaXRoZXIgYnkgbmV4dCBhbHRlcm5hdGl2ZSBvcgorKyAgICAgICAgICAgICAgICAgd2hlbiBrbm93IHdlJ3JlIGF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgYWx0ZXJuYXRpdmVzLiAgKi8KKysgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wID0gYjsKKysgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSAwOworKyAgICAgICAgICAgICAgYmVnYWx0ID0gYjsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJ3snOgorKyAgICAgICAgICAgICAgLyogSWYgXHsgaXMgYSBsaXRlcmFsLiAgKi8KKysgICAgICAgICAgICAgIGlmICghKHN5bnRheCAmIFJFX0lOVEVSVkFMUykKKysgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBhdCBgXHsnIGFuZCBpdCdzIG5vdCB0aGUgb3Blbi1pbnRlcnZhbAorKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLiAgKi8KKysJCSAgfHwgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICBoYW5kbGVfaW50ZXJ2YWw6CisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8qIElmIGdvdCBoZXJlLCB0aGVuIHRoZSBzeW50YXggYWxsb3dzIGludGVydmFscy4gICovCisrCisrICAgICAgICAgICAgICAgIC8qIEF0IGxlYXN0IChtb3N0KSB0aGlzIG1hbnkgbWF0Y2hlcyBtdXN0IGJlIG1hZGUuICAqLworKyAgICAgICAgICAgICAgICBpbnQgbG93ZXJfYm91bmQgPSAtMSwgdXBwZXJfYm91bmQgPSAtMTsKKysKKysJCS8qIFBsYWNlIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4gKGkuZS4sIGp1c3QgYWZ0ZXIKKysJCSAgIHRoZSAneycpIHRvIGdvIGJhY2sgdG8gaWYgdGhlIGludGVydmFsIGlzIGludmFsaWQuICAqLworKwkJY29uc3QgQ0hBUl9UICpiZWdfaW50ZXJ2YWwgPSBwOworKworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKQorKwkJICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrCisrICAgICAgICAgICAgICAgIEdFVF9VTlNJR05FRF9OVU1CRVIgKGxvd2VyX2JvdW5kKTsKKysKKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJywnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEdFVF9VTlNJR05FRF9OVU1CRVIgKHVwcGVyX2JvdW5kKTsKKysJCSAgICBpZiAodXBwZXJfYm91bmQgPCAwKQorKwkJICAgICAgdXBwZXJfYm91bmQgPSBSRV9EVVBfTUFYOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIC8qIEludGVydmFsIHN1Y2ggYXMgYHsxfScgPT4gbWF0Y2ggZXhhY3RseSBvbmNlLiAqLworKyAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kID0gbG93ZXJfYm91bmQ7CisrCisrICAgICAgICAgICAgICAgIGlmICghICgwIDw9IGxvd2VyX2JvdW5kICYmIGxvd2VyX2JvdW5kIDw9IHVwcGVyX2JvdW5kKSkKKysJCSAgZ290byBpbnZhbGlkX2ludGVydmFsOworKworKyAgICAgICAgICAgICAgICBpZiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorKyAgICAgICAgICAgICAgICAgIHsKKysJCSAgICBpZiAoYyAhPSAnXFwnIHx8IHAgPT0gcGVuZCkKKysJCSAgICAgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGlmIChjICE9ICd9JykKKysJCSAgZ290byBpbnZhbGlkX2ludGVydmFsOworKworKyAgICAgICAgICAgICAgICAvKiBJZiBpdCdzIGludmFsaWQgdG8gaGF2ZSBubyBwcmVjZWRpbmcgcmUuICAqLworKyAgICAgICAgICAgICAgICBpZiAoIWxhc3RzdGFydCkKKysgICAgICAgICAgICAgICAgICB7CisrCQkgICAgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMKKysJCQkmJiAhKHN5bnRheCAmIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKSkKKysgICAgICAgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19CQURSUFQpOworKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpCisrICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5mZXRjaF9pbnRlcnZhbDsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIFdlIGp1c3QgcGFyc2VkIGEgdmFsaWQgaW50ZXJ2YWwuICAqLworKworKyAgICAgICAgICAgICAgICBpZiAoUkVfRFVQX01BWCA8IHVwcGVyX2JvdW5kKQorKwkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0JBREJSKTsKKysKKysgICAgICAgICAgICAgICAgLyogSWYgdGhlIHVwcGVyIGJvdW5kIGlzIHplcm8sIGRvbid0IHdhbnQgdG8gc3VjY2VlZCBhdAorKyAgICAgICAgICAgICAgICAgICBhbGw7IGp1bXAgZnJvbSBgbGFzdHN0YXJ0JyB0byBgYiArIDMnLCB3aGljaCB3aWxsIGJlCisrCQkgICB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYWZ0ZXIgd2UgaW5zZXJ0IHRoZSBqdW1wLiAgKi8KKysJCS8qIGlmZGVmIFdDSEFSLCAnYiArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFJworKwkJICAgaW5zdGVhZCBvZiAnYiArIDMnLiAgKi8KKysgICAgICAgICAgICAgICAgIGlmICh1cHBlcl9ib3VuZCA9PSAwKQorKyAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICAgICAgIElOU0VSVF9KVU1QIChqdW1wLCBsYXN0c3RhcnQsIGIgKyAxCisrCQkJCSAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIHdlIGhhdmUgYSBub250cml2aWFsIGludGVydmFsLiAgV2hlbgorKyAgICAgICAgICAgICAgICAgICAgd2UncmUgYWxsIGRvbmUsIHRoZSBwYXR0ZXJuIHdpbGwgbG9vayBsaWtlOgorKyAgICAgICAgICAgICAgICAgICAgICBzZXRfbnVtYmVyX2F0IDxqdW1wIGNvdW50PiA8dXBwZXIgYm91bmQ+CisrICAgICAgICAgICAgICAgICAgICAgIHNldF9udW1iZXJfYXQgPHN1Y2NlZWRfbiBjb3VudD4gPGxvd2VyIGJvdW5kPgorKyAgICAgICAgICAgICAgICAgICAgICBzdWNjZWVkX24gPGFmdGVyIGp1bXAgYWRkcj4gPHN1Y2NlZWRfbiBjb3VudD4KKysgICAgICAgICAgICAgICAgICAgICAgPGJvZHkgb2YgbG9vcD4KKysgICAgICAgICAgICAgICAgICAgICAganVtcF9uIDxzdWNjZWVkX24gYWRkcj4gPGp1bXAgY291bnQ+CisrICAgICAgICAgICAgICAgICAgICAoVGhlIHVwcGVyIGJvdW5kIGFuZCBganVtcF9uJyBhcmUgb21pdHRlZCBpZgorKyAgICAgICAgICAgICAgICAgICAgYHVwcGVyX2JvdW5kJyBpcyAxLCB0aG91Z2guKSAgKi8KKysgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgeyAvKiBJZiB0aGUgdXBwZXIgYm91bmQgaXMgPiAxLCB3ZSBuZWVkIHRvIGluc2VydAorKyAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcC4gICovCisrICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmJ5dGVzID0gMiArIDQgKiBPRkZTRVRfQUREUkVTU19TSVpFICsKKysJCSAgICAgICAodXBwZXJfYm91bmQgPiAxKSAqICgyICsgNCAqIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKworKyAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKG5ieXRlcyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsb3dlciBib3VuZCBvZiB0aGUgYHN1Y2NlZWRfbicsIGV2ZW4KKysgICAgICAgICAgICAgICAgICAgICAgICB0aG91Z2ggaXQgd2lsbCBiZSBzZXQgZHVyaW5nIG1hdGNoaW5nIGJ5IGl0cworKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVuZGFudCBgc2V0X251bWJlcl9hdCcgKGluc2VydGVkIG5leHQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgYHJlX2NvbXBpbGVfZmFzdG1hcCcgbmVlZHMgdG8ga25vdy4KKysgICAgICAgICAgICAgICAgICAgICAgICBKdW1wIHRvIHRoZSBganVtcF9uJyB3ZSBtaWdodCBpbnNlcnQgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICAgICAgIElOU0VSVF9KVU1QMiAoc3VjY2VlZF9uLCBsYXN0c3RhcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICsgMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFCisrCQkJCSAgICsgKHVwcGVyX2JvdW5kID4gMSkgKiAoMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFKQorKwkJCQkgICAsIGxvd2VyX2JvdW5kKTsKKysgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICAvKiBDb2RlIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIGJvdW5kLiAgSW5zZXJ0CisrICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHRoZSBgc3VjY2VlZF9uJy4gIFRoZSBgNScgaXMgdGhlIGxhc3QgdHdvCisrICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgb2YgdGhpcyBgc2V0X251bWJlcl9hdCcsIHBsdXMgMyBieXRlcyBvZgorKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgYHN1Y2NlZWRfbicuICAqLworKwkJICAgICAvKiBpZmRlZiBXQ0hBUiwgVGhlICcxKzIqT0ZGU0VUX0FERFJFU1NfU0laRScKKysJCQlpcyB0aGUgJ3NldF9udW1iZXJfYXQnLCBwbHVzICcxK09GRlNFVF9BRERSRVNTX1NJWkUnCisrCQkJb2YgdGhlIGZvbGxvd2luZyBgc3VjY2VlZF9uJy4gICovCisrICAgICAgICAgICAgICAgICAgICAgUFJFRklYKGluc2VydF9vcDIpIChzZXRfbnVtYmVyX2F0LCBsYXN0c3RhcnQsIDEKKysJCQkJICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUsIGxvd2VyX2JvdW5kLCBiKTsKKysgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJfYm91bmQgPiAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgeyAvKiBNb3JlIHRoYW4gb25lIHJlcGV0aXRpb24gaXMgYWxsb3dlZCwgc28KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGEgYmFja3dhcmQganVtcCB0byB0aGUgYHN1Y2NlZWRfbicKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzdGFydHMgdGhpcyBpbnRlcnZhbC4KKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB3ZSd2ZSByZWFjaGVkIHRoaXMgZHVyaW5nIG1hdGNoaW5nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSdsbCBoYXZlIG1hdGNoZWQgdGhlIGludGVydmFsIG9uY2UsIHNvCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAgYmFjayBvbmx5IGB1cHBlcl9ib3VuZCAtIDEnIHRpbWVzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUDIgKGp1bXBfbiwgYiwgbGFzdHN0YXJ0CisrCQkJCSAgICAgICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUgKyAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQgLSAxKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBsb2NhdGlvbiB3ZSB3YW50IHRvIHNldCBpcyB0aGUgc2Vjb25kCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvZiB0aGUgYGp1bXBfbic7IHRoYXQgaXMgYGItMicgYXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYWJzb2x1dGUgYWRkcmVzcy4gIGBsYXN0c3RhcnQnIHdpbGwgYmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGBzZXRfbnVtYmVyX2F0JyB3ZSdyZSBhYm91dCB0byBpbnNlcnQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsYXN0c3RhcnQrMycgdGhlIG51bWJlciB0byBzZXQsIHRoZSBzb3VyY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSByZWxhdGl2ZSBhZGRyZXNzLiAgQnV0IHdlIGFyZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpbmcgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBwYXR0ZXJuIC0tCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIGV2ZXJ5dGhpbmcgaXMgZ2V0dGluZyBtb3ZlZCB1cCBieSA1LgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25jbHVzaW9uOiAoYiAtIDIpIC0gKGxhc3RzdGFydCArIDMpICsgNSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5lLiwgYiAtIGxhc3RzdGFydC4KKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2UgaW5zZXJ0IHRoaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IGlmIHdlIGZhaWwgZHVyaW5nIG1hdGNoaW5nLCB3ZSdsbAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWluaXRpYWxpemUgdGhlIGJvdW5kcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChpbnNlcnRfb3AyKSAoc2V0X251bWJlcl9hdCwgbGFzdHN0YXJ0LAorKwkJCQkJICAgICBiIC0gbGFzdHN0YXJ0LAorKwkJCQkJICAgICB1cHBlcl9ib3VuZCAtIDEsIGIpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysJCWJyZWFrOworKworKwkgICAgICBpbnZhbGlkX2ludGVydmFsOgorKwkJaWYgKCEoc3ludGF4ICYgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpKQorKwkJICBGUkVFX1NUQUNLX1JFVFVSTiAocCA9PSBwZW5kID8gUkVHX0VCUkFDRSA6IFJFR19CQURCUik7CisrCSAgICAgIHVuZmV0Y2hfaW50ZXJ2YWw6CisrCQkvKiBNYXRjaCB0aGUgY2hhcmFjdGVycyBhcyBsaXRlcmFscy4gICovCisrCQlwID0gYmVnX2ludGVydmFsOworKwkJYyA9ICd7JzsKKysJCWlmIChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpCisrCQkgIGdvdG8gbm9ybWFsX2NoYXI7CisrCQllbHNlCisrCQkgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysJICAgICAgfQorKworKyNpZmRlZiBlbWFjcworKyAgICAgICAgICAgIC8qIFRoZXJlIGlzIG5vIHdheSB0byBzcGVjaWZ5IHRoZSBiZWZvcmVfZG90IGFuZCBhZnRlcl9kb3QKKysgICAgICAgICAgICAgICBvcGVyYXRvcnMuICBybXMgc2F5cyB0aGlzIGlzIG9rLiAgLS1rYXJsICAqLworKyAgICAgICAgICAgIGNhc2UgJz0nOgorKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGF0X2RvdCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdzJzoKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICBCVUZfUFVTSF8yIChzeW50YXhzcGVjLCBzeW50YXhfc3BlY19jb2RlW2NdKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ1MnOgorKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgIEJVRl9QVVNIXzIgKG5vdHN5bnRheHNwZWMsIHN5bnRheF9zcGVjX2NvZGVbY10pOworKyAgICAgICAgICAgICAgYnJlYWs7CisrI2VuZGlmIC8qIGVtYWNzICovCisrCisrCisrICAgICAgICAgICAgY2FzZSAndyc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGNoYXIpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnVyc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAobm90d29yZGNoYXIpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnPCc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkYmVnKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJz4nOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGVuZCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdiJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRib3VuZCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdCJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKG5vdHdvcmRib3VuZCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdgJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGJlZ2J1Zik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdcJyc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChlbmRidWYpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgorKyAgICAgICAgICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1JFRlMpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrICAgICAgICAgICAgICBjMSA9IGMgLSAnMCc7CisrCisrICAgICAgICAgICAgICBpZiAoYzEgPiByZWdudW0pCisrICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVNVQlJFRyk7CisrCisrICAgICAgICAgICAgICAvKiBDYW4ndCBiYWNrIHJlZmVyZW5jZSB0byBhIHN1YmV4cHJlc3Npb24gaWYgaW5zaWRlIG9mIGl0LiAgKi8KKysgICAgICAgICAgICAgIGlmIChncm91cF9pbl9jb21waWxlX3N0YWNrIChjb21waWxlX3N0YWNrLCAocmVnbnVtX3QpIGMxKSkKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBCVUZfUFVTSF8yIChkdXBsaWNhdGUsIGMxKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJysnOgorKyAgICAgICAgICAgIGNhc2UgJz8nOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pCisrICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX3BsdXM7CisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIG5vcm1hbF9iYWNrc2xhc2g6CisrICAgICAgICAgICAgICAvKiBZb3UgbWlnaHQgdGhpbmsgaXQgd291bGQgYmUgdXNlZnVsIGZvciBcIHRvIG1lYW4KKysgICAgICAgICAgICAgICAgIG5vdCB0byB0cmFuc2xhdGU7IGJ1dCBpZiB3ZSBkb24ndCB0cmFuc2xhdGUgaXQKKysgICAgICAgICAgICAgICAgIGl0IHdpbGwgbmV2ZXIgbWF0Y2ggYW55dGhpbmcuICAqLworKyAgICAgICAgICAgICAgYyA9IFRSQU5TTEFURSAoYyk7CisrICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCWRlZmF1bHQ6CisrICAgICAgICAvKiBFeHBlY3RzIHRoZSBjaGFyYWN0ZXIgaW4gYGMnLiAgKi8KKysJbm9ybWFsX2NoYXI6CisrCSAgICAgIC8qIElmIG5vIGV4YWN0biBjdXJyZW50bHkgYmVpbmcgYnVpbHQuICAqLworKyAgICAgICAgICBpZiAoIXBlbmRpbmdfZXhhY3QKKysjaWZkZWYgV0NIQVIKKysJICAgICAgLyogSWYgbGFzdCBleGFjdG4gaGFuZGxlIGJpbmFyeShvciBjaGFyYWN0ZXIpIGFuZAorKwkJIG5ldyBleGFjdG4gaGFuZGxlIGNoYXJhY3RlcihvciBiaW5hcnkpLiAgKi8KKysJICAgICAgfHwgaXNfZXhhY3RuX2JpbiAhPSBpc19iaW5hcnlbcCAtIDEgLSBwYXR0ZXJuXQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgICAgICAgICAgICAgLyogSWYgbGFzdCBleGFjdG4gbm90IGF0IGN1cnJlbnQgcG9zaXRpb24uICAqLworKyAgICAgICAgICAgICAgfHwgcGVuZGluZ19leGFjdCArICpwZW5kaW5nX2V4YWN0ICsgMSAhPSBiCisrCisrICAgICAgICAgICAgICAvKiBXZSBoYXZlIG9ubHkgb25lIGJ5dGUgZm9sbG93aW5nIHRoZSBleGFjdG4gZm9yIHRoZSBjb3VudC4gICovCisrCSAgICAgIHx8ICpwZW5kaW5nX2V4YWN0ID09ICgxIDw8IEJZVEVXSURUSCkgLSAxCisrCisrICAgICAgICAgICAgICAvKiBJZiBmb2xsb3dlZCBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgfHwgKnAgPT0gJyonIHx8ICpwID09ICdeJworKwkgICAgICB8fCAoKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pCisrCQkgID8gKnAgPT0gJ1xcJyAmJiAocFsxXSA9PSAnKycgfHwgcFsxXSA9PSAnPycpCisrCQkgIDogKCpwID09ICcrJyB8fCAqcCA9PSAnPycpKQorKwkgICAgICB8fCAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykKKysgICAgICAgICAgICAgICAgICAmJiAoKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykKKysJCSAgICAgID8gKnAgPT0gJ3snCisrICAgICAgICAgICAgICAgICAgICAgIDogKHBbMF0gPT0gJ1xcJyAmJiBwWzFdID09ICd7JykpKSkKKysJICAgIHsKKysJICAgICAgLyogU3RhcnQgYnVpbGRpbmcgYSBuZXcgZXhhY3RuLiAgKi8KKysKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrCisrI2lmZGVmIFdDSEFSCisrCSAgICAgIC8qIElzIHRoaXMgZXhhY3RuIGJpbmFyeSBkYXRhIG9yIGNoYXJhY3Rlcj8gKi8KKysJICAgICAgaXNfZXhhY3RuX2JpbiA9IGlzX2JpbmFyeVtwIC0gMSAtIHBhdHRlcm5dOworKwkgICAgICBpZiAoaXNfZXhhY3RuX2JpbikKKysJCSAgQlVGX1BVU0hfMiAoZXhhY3RuX2JpbiwgMCk7CisrCSAgICAgIGVsc2UKKysJCSAgQlVGX1BVU0hfMiAoZXhhY3RuLCAwKTsKKysjZWxzZQorKwkgICAgICBCVUZfUFVTSF8yIChleGFjdG4sIDApOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkgICAgICBwZW5kaW5nX2V4YWN0ID0gYiAtIDE7CisrICAgICAgICAgICAgfQorKworKwkgIEJVRl9QVVNIIChjKTsKKysgICAgICAgICAgKCpwZW5kaW5nX2V4YWN0KSsrOworKwkgIGJyZWFrOworKyAgICAgICAgfSAvKiBzd2l0Y2ggKGMpICovCisrICAgIH0gLyogd2hpbGUgcCAhPSBwZW5kICovCisrCisrCisrICAvKiBUaHJvdWdoIHRoZSBwYXR0ZXJuIG5vdy4gICovCisrCisrICBpZiAoZml4dXBfYWx0X2p1bXApCisrICAgIFNUT1JFX0pVTVAgKGp1bXBfcGFzdF9hbHQsIGZpeHVwX2FsdF9qdW1wLCBiKTsKKysKKysgIGlmICghQ09NUElMRV9TVEFDS19FTVBUWSkKKysgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUEFSRU4pOworKworKyAgLyogSWYgd2UgZG9uJ3Qgd2FudCBiYWNrdHJhY2tpbmcsIGZvcmNlIHN1Y2Nlc3MKKysgICAgIHRoZSBmaXJzdCB0aW1lIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgaWYgKHN5bnRheCAmIFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORykKKysgICAgQlVGX1BVU0ggKHN1Y2NlZWQpOworKworKyNpZmRlZiBXQ0hBUgorKyAgZnJlZSAocGF0dGVybik7CisrICBmcmVlIChtYnNfb2Zmc2V0KTsKKysgIGZyZWUgKGlzX2JpbmFyeSk7CisrI2VuZGlmCisrICBmcmVlIChjb21waWxlX3N0YWNrLnN0YWNrKTsKKysKKysgIC8qIFdlIGhhdmUgc3VjY2VlZGVkOyBzZXQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGJ1ZnAtPnVzZWQgPSAodWludHB0cl90KSBiIC0gKHVpbnRwdHJfdCkgQ09NUElMRURfQlVGRkVSX1ZBUjsKKysjZWxzZQorKyAgYnVmcC0+dXNlZCA9IGIgLSBidWZwLT5idWZmZXI7CisrI2VuZGlmCisrCisrI2lmZGVmIERFQlVHCisrICBpZiAoZGVidWcpCisrICAgIHsKKysgICAgICBERUJVR19QUklOVDEgKCJcbkNvbXBpbGVkIHBhdHRlcm46IFxuIik7CisrICAgICAgUFJFRklYKHByaW50X2NvbXBpbGVkX3BhdHRlcm4pIChidWZwKTsKKysgICAgfQorKyNlbmRpZiAvKiBERUJVRyAqLworKworKyNpZm5kZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrICAvKiBJbml0aWFsaXplIHRoZSBmYWlsdXJlIHN0YWNrIHRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHN0YWNrLiAgVGhpcworKyAgICAgaXNuJ3QgbmVjZXNzYXJ5IHVubGVzcyB3ZSdyZSB0cnlpbmcgdG8gYXZvaWQgY2FsbGluZyBhbGxvY2EgaW4KKysgICAgIHRoZSBzZWFyY2ggYW5kIG1hdGNoIHJvdXRpbmVzLiAgKi8KKysgIHsKKysgICAgaW50IG51bV9yZWdzID0gYnVmcC0+cmVfbnN1YiArIDE7CisrCisrICAgIC8qIFNpbmNlIERPVUJMRV9GQUlMX1NUQUNLIHJlZnVzZXMgdG8gZG91YmxlIG9ubHkgaWYgdGhlIGN1cnJlbnQgc2l6ZQorKyAgICAgICBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gcmVfbWF4X2ZhaWx1cmVzLCB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzdGFjaworKyAgICAgICBpcyAyICogcmVfbWF4X2ZhaWx1cmVzIGZhaWx1cmUgcG9pbnRzLiAgKi8KKysgICAgaWYgKGZhaWxfc3RhY2suc2l6ZSA8ICgyICogcmVfbWF4X2ZhaWx1cmVzICogTUFYX0ZBSUxVUkVfSVRFTVMpKQorKyAgICAgIHsKKysJZmFpbF9zdGFjay5zaXplID0gKDIgKiByZV9tYXhfZmFpbHVyZXMgKiBNQVhfRkFJTFVSRV9JVEVNUyk7CisrCisrIyBpZmRlZiBlbWFjcworKwlpZiAoISBmYWlsX3N0YWNrLnN0YWNrKQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSB4bWFsbG9jIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKTsKKysJZWxzZQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSB4cmVhbGxvYyAoZmFpbF9zdGFjay5zdGFjaywKKysJCQkJICAgICAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKSk7CisrIyBlbHNlIC8qIG5vdCBlbWFjcyAqLworKwlpZiAoISBmYWlsX3N0YWNrLnN0YWNrKQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSBtYWxsb2MgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSk7CisrCWVsc2UKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgcmVhbGxvYyAoZmFpbF9zdGFjay5zdGFjaywKKysJCQkJCSAgICAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpKTsKKysjIGVuZGlmIC8qIG5vdCBlbWFjcyAqLworKyAgICAgIH0KKysKKysgICBQUkVGSVgocmVnZXhfZ3Jvd19yZWdpc3RlcnMpIChudW1fcmVncyk7CisrICB9CisrI2VuZGlmIC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysgIHJldHVybiBSRUdfTk9FUlJPUjsKKyt9IC8qIHJlZ2V4X2NvbXBpbGUgKi8KKysKKysvKiBTdWJyb3V0aW5lcyBmb3IgYHJlZ2V4X2NvbXBpbGUnLiAgKi8KKysKKysvKiBTdG9yZSBPUCBhdCBMT0MgZm9sbG93ZWQgYnkgdHdvLWJ5dGUgaW50ZWdlciBwYXJhbWV0ZXIgQVJHLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChzdG9yZV9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnKQorK3sKKysgICpsb2MgPSAoVUNIQVJfVCkgb3A7CisrICBTVE9SRV9OVU1CRVIgKGxvYyArIDEsIGFyZyk7CisrfQorKworKworKy8qIExpa2UgYHN0b3JlX29wMScsIGJ1dCBmb3IgdHdvIHR3by1ieXRlIHBhcmFtZXRlcnMgQVJHMSBhbmQgQVJHMi4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoc3RvcmVfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZzEsIGludCBhcmcyKQorK3sKKysgICpsb2MgPSAoVUNIQVJfVCkgb3A7CisrICBTVE9SRV9OVU1CRVIgKGxvYyArIDEsIGFyZzEpOworKyAgU1RPUkVfTlVNQkVSIChsb2MgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRSwgYXJnMik7CisrfQorKworKworKy8qIENvcHkgdGhlIGJ5dGVzIGZyb20gTE9DIHRvIEVORCB0byBvcGVuIHVwIHRocmVlIGJ5dGVzIG9mIHNwYWNlIGF0IExPQworKyAgIGZvciBPUCBmb2xsb3dlZCBieSB0d28tYnl0ZSBpbnRlZ2VyIHBhcmFtZXRlciBBUkcuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKGluc2VydF9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnLCBVQ0hBUl9UICplbmQpCisreworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGZyb20gPSBlbmQ7CisrICByZWdpc3RlciBVQ0hBUl9UICpwdG8gPSBlbmQgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgIHdoaWxlIChwZnJvbSAhPSBsb2MpCisrICAgICotLXB0byA9ICotLXBmcm9tOworKworKyAgUFJFRklYKHN0b3JlX29wMSkgKG9wLCBsb2MsIGFyZyk7CisrfQorKworKworKy8qIExpa2UgYGluc2VydF9vcDEnLCBidXQgZm9yIHR3byB0d28tYnl0ZSBwYXJhbWV0ZXJzIEFSRzEgYW5kIEFSRzIuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKGluc2VydF9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnMSwKKysgICAgICAgICAgICAgICAgICAgIGludCBhcmcyLCBVQ0hBUl9UICplbmQpCisreworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGZyb20gPSBlbmQ7CisrICByZWdpc3RlciBVQ0hBUl9UICpwdG8gPSBlbmQgKyAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICB3aGlsZSAocGZyb20gIT0gbG9jKQorKyAgICAqLS1wdG8gPSAqLS1wZnJvbTsKKysKKysgIFBSRUZJWChzdG9yZV9vcDIpIChvcCwgbG9jLCBhcmcxLCBhcmcyKTsKKyt9CisrCisrCisrLyogUCBwb2ludHMgdG8ganVzdCBhZnRlciBhIF4gaW4gUEFUVEVSTi4gIFJldHVybiB0cnVlIGlmIHRoYXQgXiBjb21lcworKyAgIGFmdGVyIGFuIGFsdGVybmF0aXZlIG9yIGEgYmVnaW4tc3ViZXhwcmVzc2lvbi4gIFdlIGFzc3VtZSB0aGVyZSBpcyBhdAorKyAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBeLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChhdF9iZWdsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwYXR0ZXJuLCBjb25zdCBDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KQorK3sKKysgIGNvbnN0IENIQVJfVCAqcHJldiA9IHAgLSAyOworKyAgYm9vbGVhbiBwcmV2X3ByZXZfYmFja3NsYXNoID0gcHJldiA+IHBhdHRlcm4gJiYgcHJldlstMV0gPT0gJ1xcJzsKKysKKysgIHJldHVybgorKyAgICAgICAvKiBBZnRlciBhIHN1YmV4cHJlc3Npb24/ICAqLworKyAgICAgICAoKnByZXYgPT0gJygnICYmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMgfHwgcHJldl9wcmV2X2JhY2tzbGFzaCkpCisrICAgICAgIC8qIEFmdGVyIGFuIGFsdGVybmF0aXZlPyAgKi8KKysgICAgfHwgKCpwcmV2ID09ICd8JyAmJiAoc3ludGF4ICYgUkVfTk9fQktfVkJBUiB8fCBwcmV2X3ByZXZfYmFja3NsYXNoKSk7CisrfQorKworKworKy8qIFRoZSBkdWFsIG9mIGF0X2JlZ2xpbmVfbG9jX3AuICBUaGlzIG9uZSBpcyBmb3IgJC4gIFdlIGFzc3VtZSB0aGVyZSBpcworKyAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlICQsIGkuZS4sIGBQIDwgUEVORCcuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGF0X2VuZGxpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnAsIGNvbnN0IENIQVJfVCAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCisreworKyAgY29uc3QgQ0hBUl9UICpuZXh0ID0gcDsKKysgIGJvb2xlYW4gbmV4dF9iYWNrc2xhc2ggPSAqbmV4dCA9PSAnXFwnOworKyAgY29uc3QgQ0hBUl9UICpuZXh0X25leHQgPSBwICsgMSA8IHBlbmQgPyBwICsgMSA6IDA7CisrCisrICByZXR1cm4KKysgICAgICAgLyogQmVmb3JlIGEgc3ViZXhwcmVzc2lvbj8gICovCisrICAgICAgIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMgPyAqbmV4dCA9PSAnKScKKysgICAgICAgIDogbmV4dF9iYWNrc2xhc2ggJiYgbmV4dF9uZXh0ICYmICpuZXh0X25leHQgPT0gJyknKQorKyAgICAgICAvKiBCZWZvcmUgYW4gYWx0ZXJuYXRpdmU/ICAqLworKyAgICB8fCAoc3ludGF4ICYgUkVfTk9fQktfVkJBUiA/ICpuZXh0ID09ICd8JworKyAgICAgICAgOiBuZXh0X2JhY2tzbGFzaCAmJiBuZXh0X25leHQgJiYgKm5leHRfbmV4dCA9PSAnfCcpOworK30KKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIFJldHVybnMgdHJ1ZSBpZiBSRUdOVU0gaXMgaW4gb25lIG9mIENPTVBJTEVfU1RBQ0sncyBlbGVtZW50cyBhbmQKKysgICBmYWxzZSBpZiBpdCdzIG5vdC4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytncm91cF9pbl9jb21waWxlX3N0YWNrIChjb21waWxlX3N0YWNrX3R5cGUgY29tcGlsZV9zdGFjaywgcmVnbnVtX3QgcmVnbnVtKQorK3sKKysgIGludCB0aGlzX2VsZW1lbnQ7CisrCisrICBmb3IgKHRoaXNfZWxlbWVudCA9IGNvbXBpbGVfc3RhY2suYXZhaWwgLSAxOworKyAgICAgICB0aGlzX2VsZW1lbnQgPj0gMDsKKysgICAgICAgdGhpc19lbGVtZW50LS0pCisrICAgIGlmIChjb21waWxlX3N0YWNrLnN0YWNrW3RoaXNfZWxlbWVudF0ucmVnbnVtID09IHJlZ251bSkKKysgICAgICByZXR1cm4gdHJ1ZTsKKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjaWZkZWYgV0NIQVIKKysvKiBUaGlzIGluc2VydCBzcGFjZSwgd2hpY2ggc2l6ZSBpcyAibnVtIiwgaW50byB0aGUgcGF0dGVybiBhdCAibG9jIi4KKysgICAiZW5kIiBtdXN0IHBvaW50IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuICAqLworK3N0YXRpYyB2b2lkCisraW5zZXJ0X3NwYWNlIChpbnQgbnVtLCBDSEFSX1QgKmxvYywgQ0hBUl9UICplbmQpCisreworKyAgcmVnaXN0ZXIgQ0hBUl9UICpwdG8gPSBlbmQ7CisrICByZWdpc3RlciBDSEFSX1QgKnBmcm9tID0gZW5kIC0gbnVtOworKworKyAgd2hpbGUgKHBmcm9tID49IGxvYykKKysgICAgKnB0by0tID0gKnBmcm9tLS07CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyNpZmRlZiBXQ0hBUgorK3N0YXRpYyByZWdfZXJyY29kZV90Cisrd2NzX2NvbXBpbGVfcmFuZ2UgKENIQVJfVCByYW5nZV9zdGFydF9jaGFyLCBjb25zdCBDSEFSX1QgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwZW5kLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIENIQVJfVCAqYiwgQ0hBUl9UICpjaGFyX3NldCkKKyt7CisrICBjb25zdCBDSEFSX1QgKnAgPSAqcF9wdHI7CisrICBDSEFSX1QgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDsKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKyMgaWZkZWYgX0xJQkMKKysgIHVpbnQzMl90IG5ydWxlczsKKysgIHVpbnQzMl90IHN0YXJ0X3ZhbCwgZW5kX3ZhbDsKKysjIGVuZGlmCisrICBpZiAocCA9PSBwZW5kKQorKyAgICByZXR1cm4gUkVHX0VSQU5HRTsKKysKKysjIGlmZGVmIF9MSUJDCisrICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyAgaWYgKG5ydWxlcyAhPSAwKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqY29sbHNlcSA9IChjb25zdCBjaGFyICopIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsCisrCQkJCQkJICAgICAgIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisrICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysgICAgICBpZiAocmFuZ2Vfc3RhcnRfY2hhciA8IC0xKQorKwl7CisrCSAgLyogcmFuZ2Vfc3RhcnQgaXMgYSBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysJICBpbnQzMl90ICp3ZXh0cmE7CisrCSAgLyogUmV0cmVpdmUgdGhlIGluZGV4IGFuZCBnZXQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKysJICB3ZXh0cmEgPSAoaW50MzJfdCopKGV4dHJhICsgY2hhcl9zZXRbLXJhbmdlX3N0YXJ0X2NoYXJdKTsKKysJICBzdGFydF92YWwgPSB3ZXh0cmFbMSArICp3ZXh0cmFdOworKwl9CisrICAgICAgZWxzZQorKwlzdGFydF92YWwgPSBjb2xsc2VxX3RhYmxlX2xvb2t1cChjb2xsc2VxLCBUUkFOU0xBVEUocmFuZ2Vfc3RhcnRfY2hhcikpOworKworKyAgICAgIGVuZF92YWwgPSBjb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcSwgVFJBTlNMQVRFIChwWzBdKSk7CisrCisrICAgICAgLyogUmVwb3J0IGFuIGVycm9yIGlmIHRoZSByYW5nZSBpcyBlbXB0eSBhbmQgdGhlIHN5bnRheCBwcm9oaWJpdHMKKysJIHRoaXMuICAqLworKyAgICAgIHJldCA9ICgoc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTKQorKwkgICAgICYmIChzdGFydF92YWwgPiBlbmRfdmFsKSk/IFJFR19FUkFOR0UgOiBSRUdfTk9FUlJPUjsKKysKKysgICAgICAvKiBJbnNlcnQgc3BhY2UgdG8gdGhlIGVuZCBvZiB0aGUgY2hhcl9yYW5nZXMuICAqLworKyAgICAgIGluc2VydF9zcGFjZSgyLCBiIC0gY2hhcl9zZXRbNV0gLSAyLCBiIC0gMSk7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAyKSA9ICh3Y2hhcl90KXN0YXJ0X3ZhbDsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDEpID0gKHdjaGFyX3QpZW5kX3ZhbDsKKysgICAgICBjaGFyX3NldFs0XSsrOyAvKiByYW5nZXNfaW5kZXggKi8KKysgICAgfQorKyAgZWxzZQorKyMgZW5kaWYKKysgICAgeworKyAgICAgIHJhbmdlX3N0YXJ0ID0gKHJhbmdlX3N0YXJ0X2NoYXIgPj0gMCk/IFRSQU5TTEFURSAocmFuZ2Vfc3RhcnRfY2hhcik6CisrCXJhbmdlX3N0YXJ0X2NoYXI7CisrICAgICAgcmFuZ2VfZW5kID0gVFJBTlNMQVRFIChwWzBdKTsKKysgICAgICAvKiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHJhbmdlIGlzIGVtcHR5IGFuZCB0aGUgc3ludGF4IHByb2hpYml0cworKwkgdGhpcy4gICovCisrICAgICAgcmV0ID0gKChzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMpCisrCSAgICAgJiYgKHJhbmdlX3N0YXJ0ID4gcmFuZ2VfZW5kKSk/IFJFR19FUkFOR0UgOiBSRUdfTk9FUlJPUjsKKysKKysgICAgICAvKiBJbnNlcnQgc3BhY2UgdG8gdGhlIGVuZCBvZiB0aGUgY2hhcl9yYW5nZXMuICAqLworKyAgICAgIGluc2VydF9zcGFjZSgyLCBiIC0gY2hhcl9zZXRbNV0gLSAyLCBiIC0gMSk7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAyKSA9IHJhbmdlX3N0YXJ0OworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMSkgPSByYW5nZV9lbmQ7CisrICAgICAgY2hhcl9zZXRbNF0rKzsgLyogcmFuZ2VzX2luZGV4ICovCisrICAgIH0KKysgIC8qIEhhdmUgdG8gaW5jcmVtZW50IHRoZSBwb2ludGVyIGludG8gdGhlIHBhdHRlcm4gc3RyaW5nLCBzbyB0aGUKKysgICAgIGNhbGxlciBpc24ndCBzdGlsbCBhdCB0aGUgZW5kaW5nIGNoYXJhY3Rlci4gICovCisrICAoKnBfcHRyKSsrOworKworKyAgcmV0dXJuIHJldDsKKyt9CisrI2Vsc2UgLyogQllURSAqLworKy8qIFJlYWQgdGhlIGVuZGluZyBjaGFyYWN0ZXIgb2YgYSByYW5nZSAoaW4gYSBicmFja2V0IGV4cHJlc3Npb24pIGZyb20gdGhlCisrICAgdW5jb21waWxlZCBwYXR0ZXJuICpQX1BUUiAod2hpY2ggZW5kcyBhdCBQRU5EKS4gIFdlIGFzc3VtZSB0aGUKKysgICBzdGFydGluZyBjaGFyYWN0ZXIgaXMgaW4gYFBbLTJdJy4gIChgUFstMV0nIGlzIHRoZSBjaGFyYWN0ZXIgYC0nLikKKysgICBUaGVuIHdlIHNldCB0aGUgdHJhbnNsYXRpb24gb2YgYWxsIGJpdHMgYmV0d2VlbiB0aGUgc3RhcnRpbmcgYW5kCisrICAgZW5kaW5nIGNoYXJhY3RlcnMgKGluY2x1c2l2ZSkgaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4gQi4KKysKKysgICBSZXR1cm4gYW4gZXJyb3IgY29kZS4KKysKKysgICBXZSB1c2UgdGhlc2Ugc2hvcnQgdmFyaWFibGUgbmFtZXMgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBtYWNyb3MgYXMKKysgICBgcmVnZXhfY29tcGlsZScgaXRzZWxmLiAgKi8KKysKKytzdGF0aWMgcmVnX2VycmNvZGVfdAorK2J5dGVfY29tcGlsZV9yYW5nZSAodW5zaWduZWQgaW50IHJhbmdlX3N0YXJ0X2NoYXIsIGNvbnN0IGNoYXIgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBlbmQsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIHVuc2lnbmVkIGNoYXIgKmIpCisreworKyAgdW5zaWduZWQgdGhpc19jaGFyOworKyAgY29uc3QgY2hhciAqcCA9ICpwX3B0cjsKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKyMgaWYgX0xJQkMKKysgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxzZXE7CisrICB1bnNpZ25lZCBpbnQgc3RhcnRfY29sc2VxOworKyAgdW5zaWduZWQgaW50IGVuZF9jb2xzZXE7CisrIyBlbHNlCisrICB1bnNpZ25lZCBlbmRfY2hhcjsKKysjIGVuZGlmCisrCisrICBpZiAocCA9PSBwZW5kKQorKyAgICByZXR1cm4gUkVHX0VSQU5HRTsKKysKKysgIC8qIEhhdmUgdG8gaW5jcmVtZW50IHRoZSBwb2ludGVyIGludG8gdGhlIHBhdHRlcm4gc3RyaW5nLCBzbyB0aGUKKysgICAgIGNhbGxlciBpc24ndCBzdGlsbCBhdCB0aGUgZW5kaW5nIGNoYXJhY3Rlci4gICovCisrICAoKnBfcHRyKSsrOworKworKyAgLyogUmVwb3J0IGFuIGVycm9yIGlmIHRoZSByYW5nZSBpcyBlbXB0eSBhbmQgdGhlIHN5bnRheCBwcm9oaWJpdHMgdGhpcy4gICovCisrICByZXQgPSBzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMgPyBSRUdfRVJBTkdFIDogUkVHX05PRVJST1I7CisrCisrIyBpZiBfTElCQworKyAgY29sbHNlcSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJCSBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworKworKyAgc3RhcnRfY29sc2VxID0gY29sbHNlcVsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFIChyYW5nZV9zdGFydF9jaGFyKV07CisrICBlbmRfY29sc2VxID0gY29sbHNlcVsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFIChwWzBdKV07CisrICBmb3IgKHRoaXNfY2hhciA9IDA7IHRoaXNfY2hhciA8PSAodW5zaWduZWQgY2hhcikgLTE7ICsrdGhpc19jaGFyKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgaW50IHRoaXNfY29sc2VxID0gY29sbHNlcVsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFICh0aGlzX2NoYXIpXTsKKysKKysgICAgICBpZiAoc3RhcnRfY29sc2VxIDw9IHRoaXNfY29sc2VxICYmIHRoaXNfY29sc2VxIDw9IGVuZF9jb2xzZXEpCisrCXsKKysJICBTRVRfTElTVF9CSVQgKFRSQU5TTEFURSAodGhpc19jaGFyKSk7CisrCSAgcmV0ID0gUkVHX05PRVJST1I7CisrCX0KKysgICAgfQorKyMgZWxzZQorKyAgLyogSGVyZSB3ZSBzZWUgd2h5IGB0aGlzX2NoYXInIGhhcyB0byBiZSBsYXJnZXIgdGhhbiBhbiBgdW5zaWduZWQKKysgICAgIGNoYXInIC0tIHdlIHdvdWxkIG90aGVyd2lzZSBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIHNpbmNlIGFsbAorKyAgICAgY2hhcmFjdGVycyA8PSAweGZmLiAgKi8KKysgIHJhbmdlX3N0YXJ0X2NoYXIgPSBUUkFOU0xBVEUgKHJhbmdlX3N0YXJ0X2NoYXIpOworKyAgLyogVFJBTlNMQVRFKHBbMF0pIGlzIGNhc3RlZCB0byBjaGFyIChub3QgdW5zaWduZWQgY2hhcikgaW4gVFJBTlNMQVRFLAorKyAgICAgYW5kIHNvbWUgY29tcGlsZXJzIGNhc3QgaXQgdG8gaW50IGltcGxpY2l0bHksIHNvIGZvbGxvd2luZyBmb3JfbG9vcAorKyAgICAgbWF5IGZhbGwgdG8gKGFsbW9zdCkgaW5maW5pdGUgbG9vcC4KKysgICAgIGUuZy4gSWYgdHJhbnNsYXRlW3BbMF1dID0gMHhmZiwgZW5kX2NoYXIgbWF5IGVxdWFscyB0byAweGZmZmZmZmZmLgorKyAgICAgVG8gYXZvaWQgdGhpcywgd2UgY2FzdCBwWzBdIHRvIHVuc2lnbmVkIGludCBhbmQgdHJ1bmNhdGUgaXQuICAqLworKyAgZW5kX2NoYXIgPSAoKHVuc2lnbmVkKVRSQU5TTEFURShwWzBdKSAmICgoMSA8PCBCWVRFV0lEVEgpIC0gMSkpOworKworKyAgZm9yICh0aGlzX2NoYXIgPSByYW5nZV9zdGFydF9jaGFyOyB0aGlzX2NoYXIgPD0gZW5kX2NoYXI7ICsrdGhpc19jaGFyKQorKyAgICB7CisrICAgICAgU0VUX0xJU1RfQklUIChUUkFOU0xBVEUgKHRoaXNfY2hhcikpOworKyAgICAgIHJldCA9IFJFR19OT0VSUk9SOworKyAgICB9CisrIyBlbmRpZgorKworKyAgcmV0dXJuIHJldDsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrDAorKy8qIHJlX2NvbXBpbGVfZmFzdG1hcCBjb21wdXRlcyBhIGBgZmFzdG1hcCcnIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybiBpbgorKyAgIEJVRlAuICBBIGZhc3RtYXAgcmVjb3JkcyB3aGljaCBvZiB0aGUgKDEgPDwgQllURVdJRFRIKSBwb3NzaWJsZQorKyAgIGNoYXJhY3RlcnMgY2FuIHN0YXJ0IGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybi4gIFRoaXMgZmFzdG1hcAorKyAgIGlzIHVzZWQgYnkgcmVfc2VhcmNoIHRvIHNraXAgcXVpY2tseSBvdmVyIGltcG9zc2libGUgc3RhcnRpbmcgcG9pbnRzLgorKworKyAgIFRoZSBjYWxsZXIgbXVzdCBzdXBwbHkgdGhlIGFkZHJlc3Mgb2YgYSAoMSA8PCBCWVRFV0lEVEgpLWJ5dGUgZGF0YQorKyAgIGFyZWEgYXMgQlVGUC0+ZmFzdG1hcC4KKysKKysgICBXZSBzZXQgdGhlIGBmYXN0bWFwJywgYGZhc3RtYXBfYWNjdXJhdGUnLCBhbmQgYGNhbl9iZV9udWxsJyBmaWVsZHMgaW4KKysgICB0aGUgcGF0dGVybiBidWZmZXIuCisrCisrICAgUmV0dXJucyAwIGlmIHdlIHN1Y2NlZWQsIC0yIGlmIGFuIGludGVybmFsIGVycm9yLiAgICovCisrCisrI2lmZGVmIFdDSEFSCisrLyogbG9jYWwgZnVuY3Rpb24gZm9yIHJlX2NvbXBpbGVfZmFzdG1hcC4KKysgICB0cnVuY2F0ZSB3Y2hhcl90IGNoYXJhY3RlciB0byBjaGFyLiAgKi8KKytzdGF0aWMgdW5zaWduZWQgY2hhciB0cnVuY2F0ZV93Y2hhciAoQ0hBUl9UIGMpOworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyCisrdHJ1bmNhdGVfd2NoYXIgKENIQVJfVCBjKQorK3sKKysgIHVuc2lnbmVkIGNoYXIgYnVmW01CX0NVUl9NQVhdOworKyAgbWJzdGF0ZV90IHN0YXRlOworKyAgaW50IHJldHZhbDsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisrIyBpZmRlZiBfTElCQworKyAgcmV0dmFsID0gX193Y3J0b21iIChidWYsIGMsICZzdGF0ZSk7CisrIyBlbHNlCisrICByZXR2YWwgPSB3Y3J0b21iIChidWYsIGMsICZzdGF0ZSk7CisrIyBlbmRpZgorKyAgcmV0dXJuIHJldHZhbCA+IDAgPyBidWZbMF0gOiAodW5zaWduZWQgY2hhcikgYzsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrc3RhdGljIGludAorK1BSRUZJWChyZV9jb21waWxlX2Zhc3RtYXApIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgaW50IGosIGs7CisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyAgUFJFRklYKGZhaWxfc3RhY2tfdHlwZSkgZmFpbF9zdGFjazsKKysjZW5kaWYKKysjaWZuZGVmIFJFR0VYX01BTExPQworKyAgY2hhciAqZGVzdGluYXRpb247CisrI2VuZGlmCisrCisrICByZWdpc3RlciBjaGFyICpmYXN0bWFwID0gYnVmcC0+ZmFzdG1hcDsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIFdlIG5lZWQgdG8gY2FzdCBwYXR0ZXJuIHRvICh3Y2hhcl90KiksIGJlY2F1c2Ugd2UgY2FzdGVkIHRoaXMgY29tcGlsZWQKKysgICAgIHBhdHRlcm4gdG8gKGNoYXIqKSBpbiByZWdleF9jb21waWxlLiAgKi8KKysgIFVDSEFSX1QgKnBhdHRlcm4gPSAoVUNIQVJfVCopYnVmcC0+YnVmZmVyOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZCA9IChVQ0hBUl9UKikgKGJ1ZnAtPmJ1ZmZlciArIGJ1ZnAtPnVzZWQpOworKyNlbHNlIC8qIEJZVEUgKi8KKysgIFVDSEFSX1QgKnBhdHRlcm4gPSBidWZwLT5idWZmZXI7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kID0gcGF0dGVybiArIGJ1ZnAtPnVzZWQ7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICBVQ0hBUl9UICpwID0gcGF0dGVybjsKKysKKysjaWZkZWYgUkVMX0FMTE9DCisrICAvKiBUaGlzIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBmYWlsdXJlIHN0YWNrLCB3aGVuCisrICAgICBpdCBpcyBhbGxvY2F0ZWQgcmVsb2NhdGFibHkuICAqLworKyAgZmFpbF9zdGFja19lbHRfdCAqZmFpbHVyZV9zdGFja19wdHI7CisrI2VuZGlmCisrCisrICAvKiBBc3N1bWUgdGhhdCBlYWNoIHBhdGggdGhyb3VnaCB0aGUgcGF0dGVybiBjYW4gYmUgbnVsbCB1bnRpbAorKyAgICAgcHJvdmVuIG90aGVyd2lzZS4gIFdlIHNldCB0aGlzIGZhbHNlIGF0IHRoZSBib3R0b20gb2Ygc3dpdGNoCisrICAgICBzdGF0ZW1lbnQsIHRvIHdoaWNoIHdlIGdldCBvbmx5IGlmIGEgcGFydGljdWxhciBwYXRoIGRvZXNuJ3QKKysgICAgIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICAqLworKyAgYm9vbGVhbiBwYXRoX2Nhbl9iZV9udWxsID0gdHJ1ZTsKKysKKysgIC8qIFdlIGFyZW4ndCBkb2luZyBhIGBzdWNjZWVkX24nIHRvIGJlZ2luIHdpdGguICAqLworKyAgYm9vbGVhbiBzdWNjZWVkX25fcCA9IGZhbHNlOworKworKyAgYXNzZXJ0IChmYXN0bWFwICE9IE5VTEwgJiYgcCAhPSBOVUxMKTsKKysKKysgIElOSVRfRkFJTF9TVEFDSyAoKTsKKysgIGJ6ZXJvIChmYXN0bWFwLCAxIDw8IEJZVEVXSURUSCk7ICAvKiBBc3N1bWUgbm90aGluZydzIHZhbGlkLiAgKi8KKysgIGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgPSAxOwkgICAgLyogSXQgd2lsbCBiZSB3aGVuIHdlJ3JlIGRvbmUuICAqLworKyAgYnVmcC0+Y2FuX2JlX251bGwgPSAwOworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBpZiAocCA9PSBwZW5kIHx8ICpwID09IChVQ0hBUl9UKSBzdWNjZWVkKQorKwl7CisrCSAgLyogV2UgaGF2ZSByZWFjaGVkIHRoZSAoZWZmZWN0aXZlKSBlbmQgb2YgcGF0dGVybi4gICovCisrCSAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpKQorKwkgICAgeworKwkgICAgICBidWZwLT5jYW5fYmVfbnVsbCB8PSBwYXRoX2Nhbl9iZV9udWxsOworKworKwkgICAgICAvKiBSZXNldCBmb3IgbmV4dCBwYXRoLiAgKi8KKysJICAgICAgcGF0aF9jYW5fYmVfbnVsbCA9IHRydWU7CisrCisrCSAgICAgIHAgPSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0ucG9pbnRlcjsKKysKKysJICAgICAgY29udGludWU7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgYnJlYWs7CisrCX0KKysKKysgICAgICAvKiBXZSBzaG91bGQgbmV2ZXIgYmUgYWJvdXQgdG8gZ28gYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICAqLworKyAgICAgIGFzc2VydCAocCA8IHBlbmQpOworKworKyAgICAgIHN3aXRjaCAoU1dJVENIX0VOVU1fQ0FTVCAoKHJlX29wY29kZV90KSAqcCsrKSkKKysJeworKworKyAgICAgICAgLyogSSBndWVzcyB0aGUgaWRlYSBoZXJlIGlzIHRvIHNpbXBseSBub3QgYm90aGVyIHdpdGggYSBmYXN0bWFwCisrICAgICAgICAgICBpZiBhIGJhY2tyZWZlcmVuY2UgaXMgdXNlZCwgc2luY2UgaXQncyB0b28gaGFyZCB0byBmaWd1cmUgb3V0CisrICAgICAgICAgICB0aGUgZmFzdG1hcCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXAuICBTZXR0aW5nCisrICAgICAgICAgICBgY2FuX2JlX251bGwnIHN0b3BzIGByZV9zZWFyY2hfMicgZnJvbSB1c2luZyB0aGUgZmFzdG1hcCwgc28KKysgICAgICAgICAgIHRoYXQgaXMgYWxsIHdlIGRvLiAgKi8KKysJY2FzZSBkdXBsaWNhdGU6CisrCSAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworKyAgICAgICAgICBnb3RvIGRvbmU7CisrCisrCisrICAgICAgLyogRm9sbG93aW5nIGFyZSB0aGUgY2FzZXMgd2hpY2ggbWF0Y2ggYSBjaGFyYWN0ZXIuICBUaGVzZSBlbmQKKysgICAgICAgICB3aXRoIGBicmVhaycuICAqLworKworKyNpZmRlZiBXQ0hBUgorKwljYXNlIGV4YWN0bjoKKysgICAgICAgICAgZmFzdG1hcFt0cnVuY2F0ZV93Y2hhcihwWzFdKV0gPSAxOworKwkgIGJyZWFrOworKyNlbHNlIC8qIEJZVEUgKi8KKysJY2FzZSBleGFjdG46CisrICAgICAgICAgIGZhc3RtYXBbcFsxXV0gPSAxOworKwkgIGJyZWFrOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwljYXNlIGV4YWN0bl9iaW46CisrCSAgZmFzdG1hcFtwWzFdXSA9IDE7CisrCSAgYnJlYWs7CisrI2VuZGlmCisrCisrI2lmZGVmIFdDSEFSCisrICAgICAgICAvKiBJdCBpcyBoYXJkIHRvIGRpc3Rpbmd1aXNoIGZhc3RtYXAgZnJvbSAobXVsdGkgYnl0ZSkgY2hhcmFjdGVycworKyAgICAgICAgICAgd2hpY2ggZGVwZW5kcyBvbiBjdXJyZW50IGxvY2FsZS4gICovCisrICAgICAgICBjYXNlIGNoYXJzZXQ6CisrCWNhc2UgY2hhcnNldF9ub3Q6CisrCWNhc2Ugd29yZGNoYXI6CisrCWNhc2Ugbm90d29yZGNoYXI6CisrICAgICAgICAgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKysgICAgICAgICAgZ290byBkb25lOworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICAgIGNhc2UgY2hhcnNldDoKKysgICAgICAgICAgZm9yIChqID0gKnArKyAqIEJZVEVXSURUSCAtIDE7IGogPj0gMDsgai0tKQorKwkgICAgaWYgKHBbaiAvIEJZVEVXSURUSF0gJiAoMSA8PCAoaiAlIEJZVEVXSURUSCkpKQorKyAgICAgICAgICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2UgY2hhcnNldF9ub3Q6CisrCSAgLyogQ2hhcnMgYmV5b25kIGVuZCBvZiBtYXAgbXVzdCBiZSBhbGxvd2VkLiAgKi8KKysJICBmb3IgKGogPSAqcCAqIEJZVEVXSURUSDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysgICAgICAgICAgICBmYXN0bWFwW2pdID0gMTsKKysKKysJICBmb3IgKGogPSAqcCsrICogQllURVdJRFRIIC0gMTsgaiA+PSAwOyBqLS0pCisrCSAgICBpZiAoIShwW2ogLyBCWVRFV0lEVEhdICYgKDEgPDwgKGogJSBCWVRFV0lEVEgpKSkpCisrICAgICAgICAgICAgICBmYXN0bWFwW2pdID0gMTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCWNhc2Ugd29yZGNoYXI6CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopID09IFN3b3JkKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBub3R3b3JkY2hhcjoKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgIT0gU3dvcmQpCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgICAgICAgY2FzZSBhbnljaGFyOgorKwkgIHsKKysJICAgIGludCBmYXN0bWFwX25ld2xpbmUgPSBmYXN0bWFwWydcbiddOworKworKwkgICAgLyogYC4nIG1hdGNoZXMgYW55dGhpbmcgLi4uICAqLworKwkgICAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCisrCSAgICAvKiAuLi4gZXhjZXB0IHBlcmhhcHMgbmV3bGluZS4gICovCisrCSAgICBpZiAoIShidWZwLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkpCisrCSAgICAgIGZhc3RtYXBbJ1xuJ10gPSBmYXN0bWFwX25ld2xpbmU7CisrCisrCSAgICAvKiBSZXR1cm4gaWYgd2UgaGF2ZSBhbHJlYWR5IHNldCBgY2FuX2JlX251bGwnOyBpZiB3ZSBoYXZlLAorKwkgICAgICAgdGhlbiB0aGUgZmFzdG1hcCBpcyBpcnJlbGV2YW50LiAgU29tZXRoaW5nJ3Mgd3JvbmcgaGVyZS4gICovCisrCSAgICBlbHNlIGlmIChidWZwLT5jYW5fYmVfbnVsbCkKKysJICAgICAgZ290byBkb25lOworKworKwkgICAgLyogT3RoZXJ3aXNlLCBoYXZlIHRvIGNoZWNrIGFsdGVybmF0aXZlIHBhdGhzLiAgKi8KKysJICAgIGJyZWFrOworKwkgIH0KKysKKysjaWZkZWYgZW1hY3MKKysgICAgICAgIGNhc2Ugc3ludGF4c3BlYzoKKysJICBrID0gKnArKzsKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgPT0gKGVudW0gc3ludGF4Y29kZSkgaykKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2Ugbm90c3ludGF4c3BlYzoKKysJICBrID0gKnArKzsKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgIT0gKGVudW0gc3ludGF4Y29kZSkgaykKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrICAgICAgLyogQWxsIGNhc2VzIGFmdGVyIHRoaXMgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gIFRoZXNlIGVuZCB3aXRoCisrICAgICAgICAgYGNvbnRpbnVlJy4gICovCisrCisrCisrCWNhc2UgYmVmb3JlX2RvdDoKKysJY2FzZSBhdF9kb3Q6CisrCWNhc2UgYWZ0ZXJfZG90OgorKyAgICAgICAgICBjb250aW51ZTsKKysjZW5kaWYgLyogZW1hY3MgKi8KKysKKysKKysgICAgICAgIGNhc2Ugbm9fb3A6CisrICAgICAgICBjYXNlIGJlZ2xpbmU6CisrICAgICAgICBjYXNlIGVuZGxpbmU6CisrCWNhc2UgYmVnYnVmOgorKwljYXNlIGVuZGJ1ZjoKKysJY2FzZSB3b3JkYm91bmQ6CisrCWNhc2Ugbm90d29yZGJvdW5kOgorKwljYXNlIHdvcmRiZWc6CisrCWNhc2Ugd29yZGVuZDoKKysgICAgICAgIGNhc2UgcHVzaF9kdW1teV9mYWlsdXJlOgorKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBqdW1wX246CisrICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrCWNhc2UgbWF5YmVfcG9wX2p1bXA6CisrCWNhc2UganVtcDoKKysgICAgICAgIGNhc2UganVtcF9wYXN0X2FsdDoKKysJY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChqLCBwKTsKKysJICBwICs9IGo7CisrCSAgaWYgKGogPiAwKQorKwkgICAgY29udGludWU7CisrCisrICAgICAgICAgIC8qIEp1bXAgYmFja3dhcmQgaW1wbGllcyB3ZSBqdXN0IHdlbnQgdGhyb3VnaCB0aGUgYm9keSBvZiBhCisrICAgICAgICAgICAgIGxvb3AgYW5kIG1hdGNoZWQgbm90aGluZy4gIE9wY29kZSBqdW1wZWQgdG8gc2hvdWxkIGJlCisrICAgICAgICAgICAgIGBvbl9mYWlsdXJlX2p1bXAnIG9yIGBzdWNjZWVkX24nLiAgSnVzdCB0cmVhdCBpdCBsaWtlIGFuCisrICAgICAgICAgICAgIG9yZGluYXJ5IGp1bXAuICBGb3IgYSAqIGxvb3AsIGl0IGhhcyBwdXNoZWQgaXRzIGZhaWx1cmUKKysgICAgICAgICAgICAgcG9pbnQgYWxyZWFkeTsgaWYgc28sIGRpc2NhcmQgdGhhdCBhcyByZWR1bmRhbnQuICAqLworKyAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSAqcCAhPSBvbl9mYWlsdXJlX2p1bXAKKysJICAgICAgJiYgKHJlX29wY29kZV90KSAqcCAhPSBzdWNjZWVkX24pCisrCSAgICBjb250aW51ZTsKKysKKysgICAgICAgICAgcCsrOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaiwgcCk7CisrICAgICAgICAgIHAgKz0gajsKKysKKysgICAgICAgICAgLyogSWYgd2hhdCdzIG9uIHRoZSBzdGFjayBpcyB3aGVyZSB3ZSBhcmUgbm93LCBwb3AgaXQuICAqLworKyAgICAgICAgICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkKKysJICAgICAgJiYgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsIC0gMV0ucG9pbnRlciA9PSBwKQorKyAgICAgICAgICAgIGZhaWxfc3RhY2suYXZhaWwtLTsKKysKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wOgorKwloYW5kbGVfb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaiwgcCk7CisrCisrICAgICAgICAgIC8qIEZvciBzb21lIHBhdHRlcm5zLCBlLmcuLCBgKGE/KT8nLCBgcCtqJyBoZXJlIHBvaW50cyB0byB0aGUKKysgICAgICAgICAgICAgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgV2UgZG9uJ3Qgd2FudCB0byBwdXNoIHN1Y2ggYSBwb2ludCwKKysgICAgICAgICAgICAgc2luY2Ugd2hlbiB3ZSByZXN0b3JlIGl0IGFib3ZlLCBlbnRlcmluZyB0aGUgc3dpdGNoIHdpbGwKKysgICAgICAgICAgICAgaW5jcmVtZW50IGBwJyBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICBXZSBkb24ndCBuZWVkCisrICAgICAgICAgICAgIHRvIHB1c2ggc3VjaCBhIHBvaW50IHNpbmNlIHdlIG9idmlvdXNseSB3b24ndCBmaW5kIGFueSBtb3JlCisrICAgICAgICAgICAgIGZhc3RtYXAgZW50cmllcyBiZXlvbmQgYHBlbmQnLiAgU3VjaCBhIHBhdHRlcm4gY2FuIG1hdGNoCisrICAgICAgICAgICAgIHRoZSBudWxsIHN0cmluZywgdGhvdWdoLiAgKi8KKysgICAgICAgICAgaWYgKHAgKyBqIDwgcGVuZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoIVBVU0hfUEFUVEVSTl9PUCAocCArIGosIGZhaWxfc3RhY2spKQorKwkJeworKwkJICBSRVNFVF9GQUlMX1NUQUNLICgpOworKwkJICByZXR1cm4gLTI7CisrCQl9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworKworKyAgICAgICAgICBpZiAoc3VjY2VlZF9uX3ApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGssIHApOwkvKiBTa2lwIHRoZSBuLiAgKi8KKysgICAgICAgICAgICAgIHN1Y2NlZWRfbl9wID0gZmFsc2U7CisrCSAgICB9CisrCisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIHN1Y2NlZWRfbjoKKysgICAgICAgICAgLyogR2V0IHRvIHRoZSBudW1iZXIgb2YgdGltZXMgdG8gc3VjY2VlZC4gICovCisrICAgICAgICAgIHAgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgLyogSW5jcmVtZW50IHAgcGFzdCB0aGUgbiBmb3Igd2hlbiBrICE9IDAuICAqLworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaywgcCk7CisrICAgICAgICAgIGlmIChrID09IDApCisrCSAgICB7CisrICAgICAgICAgICAgICBwIC09IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgCSAgICAgIHN1Y2NlZWRfbl9wID0gdHJ1ZTsgIC8qIFNwYWdoZXR0aSBjb2RlIGFsZXJ0LiAgKi8KKysgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX29uX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIHNldF9udW1iZXJfYXQ6CisrICAgICAgICAgIHAgKz0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIHN0YXJ0X21lbW9yeToKKysgICAgICAgIGNhc2Ugc3RvcF9tZW1vcnk6CisrCSAgcCArPSAyOworKwkgIGNvbnRpbnVlOworKworKworKwlkZWZhdWx0OgorKyAgICAgICAgICBhYm9ydCAoKTsgLyogV2UgaGF2ZSBsaXN0ZWQgYWxsIHRoZSBjYXNlcy4gICovCisrICAgICAgICB9IC8qIHN3aXRjaCAqcCsrICovCisrCisrICAgICAgLyogR2V0dGluZyBoZXJlIG1lYW5zIHdlIGhhdmUgZm91bmQgdGhlIHBvc3NpYmxlIHN0YXJ0aW5nCisrICAgICAgICAgY2hhcmFjdGVycyBmb3Igb25lIHBhdGggb2YgdGhlIHBhdHRlcm4gLS0gYW5kIHRoYXQgdGhlIGVtcHR5CisrICAgICAgICAgc3RyaW5nIGRvZXMgbm90IG1hdGNoLiAgV2UgbmVlZCBub3QgZm9sbG93IHRoaXMgcGF0aCBmdXJ0aGVyLgorKyAgICAgICAgIEluc3RlYWQsIGxvb2sgYXQgdGhlIG5leHQgYWx0ZXJuYXRpdmUgKHJlbWVtYmVyZWQgb24gdGhlCisrICAgICAgICAgc3RhY2spLCBvciBxdWl0IGlmIG5vIG1vcmUuICBUaGUgdGVzdCBhdCB0aGUgdG9wIG9mIHRoZSBsb29wCisrICAgICAgICAgZG9lcyB0aGVzZSB0aGluZ3MuICAqLworKyAgICAgIHBhdGhfY2FuX2JlX251bGwgPSBmYWxzZTsKKysgICAgICBwID0gcGVuZDsKKysgICAgfSAvKiB3aGlsZSBwICovCisrCisrICAvKiBTZXQgYGNhbl9iZV9udWxsJyBmb3IgdGhlIGxhc3QgcGF0aCAoYWxzbyB0aGUgZmlyc3QgcGF0aCwgaWYgdGhlCisrICAgICBwYXR0ZXJuIGlzIGVtcHR5KS4gICovCisrICBidWZwLT5jYW5fYmVfbnVsbCB8PSBwYXRoX2Nhbl9iZV9udWxsOworKworKyBkb25lOgorKyAgUkVTRVRfRkFJTF9TVEFDSyAoKTsKKysgIHJldHVybiAwOworK30KKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworK2ludAorK3JlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXR1cm4gd2NzX3JlX2NvbXBpbGVfZmFzdG1hcChidWZwKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldHVybiBieXRlX3JlX2NvbXBpbGVfZmFzdG1hcChidWZwKTsKKyt9IC8qIHJlX2NvbXBpbGVfZmFzdG1hcCAqLworKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9mYXN0bWFwLCByZV9jb21waWxlX2Zhc3RtYXApCisrI2VuZGlmCisrDAorKworKy8qIFNldCBSRUdTIHRvIGhvbGQgTlVNX1JFR1MgcmVnaXN0ZXJzLCBzdG9yaW5nIHRoZW0gaW4gU1RBUlRTIGFuZAorKyAgIEVORFMuICBTdWJzZXF1ZW50IG1hdGNoZXMgdXNpbmcgUEFUVEVSTl9CVUZGRVIgYW5kIFJFR1Mgd2lsbCB1c2UKKysgICB0aGlzIG1lbW9yeSBmb3IgcmVjb3JkaW5nIHJlZ2lzdGVyIGluZm9ybWF0aW9uLiAgU1RBUlRTIGFuZCBFTkRTCisrICAgbXVzdCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhlIG1hbGxvYyBsaWJyYXJ5IHJvdXRpbmUsIGFuZCBtdXN0IGVhY2gKKysgICBiZSBhdCBsZWFzdCBOVU1fUkVHUyAqIHNpemVvZiAocmVnb2ZmX3QpIGJ5dGVzIGxvbmcuCisrCisrICAgSWYgTlVNX1JFR1MgPT0gMCwgdGhlbiBzdWJzZXF1ZW50IG1hdGNoZXMgc2hvdWxkIGFsbG9jYXRlIHRoZWlyIG93bgorKyAgIHJlZ2lzdGVyIGRhdGEuCisrCisrICAgVW5sZXNzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgZmlyc3Qgc2VhcmNoIG9yIG1hdGNoIHVzaW5nCisrICAgUEFUVEVSTl9CVUZGRVIgd2lsbCBhbGxvY2F0ZSBpdHMgb3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKKysgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCisrCisrdm9pZAorK3JlX3NldF9yZWdpc3RlcnMgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCB1bnNpZ25lZCBudW1fcmVncywKKysgICAgICAgICAgICAgICAgICByZWdvZmZfdCAqc3RhcnRzLCByZWdvZmZfdCAqZW5kcykKKyt7CisrICBpZiAobnVtX3JlZ3MpCisrICAgIHsKKysgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfUkVBTExPQ0FURTsKKysgICAgICByZWdzLT5udW1fcmVncyA9IG51bV9yZWdzOworKyAgICAgIHJlZ3MtPnN0YXJ0ID0gc3RhcnRzOworKyAgICAgIHJlZ3MtPmVuZCA9IGVuZHM7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKysgICAgICByZWdzLT5udW1fcmVncyA9IDA7CisrICAgICAgcmVncy0+c3RhcnQgPSByZWdzLT5lbmQgPSAocmVnb2ZmX3QgKikgMDsKKysgICAgfQorK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NldF9yZWdpc3RlcnMsIHJlX3NldF9yZWdpc3RlcnMpCisrI2VuZGlmCisrDAorKy8qIFNlYXJjaGluZyByb3V0aW5lcy4gICovCisrCisrLyogTGlrZSByZV9zZWFyY2hfMiwgYmVsb3csIGJ1dCBvbmx5IG9uZSBzdHJpbmcgaXMgc3BlY2lmaWVkLCBhbmQKKysgICBkb2Vzbid0IGxldCB5b3Ugc2F5IHdoZXJlIHRvIHN0b3AgbWF0Y2hpbmcuICAqLworKworK2ludAorK3JlX3NlYXJjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBzaXplLAorKyAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCisreworKyAgcmV0dXJuIHJlX3NlYXJjaF8yIChidWZwLCBOVUxMLCAwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwKKysJCSAgICAgIHJlZ3MsIHNpemUpOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NlYXJjaCwgcmVfc2VhcmNoKQorKyNlbmRpZgorKworKworKy8qIFVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIEJVRlAtPmJ1ZmZlciwgZmlyc3QgdHJpZXMgdG8gbWF0Y2ggdGhlCisrICAgdmlydHVhbCBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIsIHN0YXJ0aW5nIGZpcnN0IGF0IGluZGV4CisrICAgU1RBUlRQT1MsIHRoZW4gYXQgU1RBUlRQT1MgKyAxLCBhbmQgc28gb24uCisrCisrICAgU1RSSU5HMSBhbmQgU1RSSU5HMiBoYXZlIGxlbmd0aCBTSVpFMSBhbmQgU0laRTIsIHJlc3BlY3RpdmVseS4KKysKKysgICBSQU5HRSBpcyBob3cgZmFyIHRvIHNjYW4gd2hpbGUgdHJ5aW5nIHRvIG1hdGNoLiAgUkFOR0UgPSAwIG1lYW5zIHRyeQorKyAgIG9ubHkgYXQgU1RBUlRQT1M7IGluIGdlbmVyYWwsIHRoZSBsYXN0IHN0YXJ0IHRyaWVkIGlzIFNUQVJUUE9TICsKKysgICBSQU5HRS4KKysKKysgICBJbiBSRUdTLCByZXR1cm4gdGhlIGluZGljZXMgb2YgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxCisrICAgYW5kIFNUUklORzIgdGhhdCBtYXRjaGVkIHRoZSBlbnRpcmUgQlVGUC0+YnVmZmVyIGFuZCBpdHMgY29udGFpbmVkCisrICAgc3ViZXhwcmVzc2lvbnMuCisrCisrICAgRG8gbm90IGNvbnNpZGVyIG1hdGNoaW5nIG9uZSBwYXN0IHRoZSBpbmRleCBTVE9QIGluIHRoZSB2aXJ0dWFsCisrICAgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyLgorKworKyAgIFdlIHJldHVybiBlaXRoZXIgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJpbmdzIGF0IHdoaWNoIHRoZSBtYXRjaCB3YXMKKysgICBmb3VuZCwgLTEgaWYgbm8gbWF0Y2gsIG9yIC0yIGlmIGVycm9yIChzdWNoIGFzIGZhaWx1cmUKKysgICBzdGFjayBvdmVyZmxvdykuICAqLworKworK2ludAorK3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLCBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisreworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldHVybiB3Y3NfcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgc3RhcnRwb3MsCisrCQkJICAgIHJhbmdlLCByZWdzLCBzdG9wKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldHVybiBieXRlX3JlX3NlYXJjaF8yIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHN0YXJ0cG9zLAorKwkJCSAgICAgcmFuZ2UsIHJlZ3MsIHN0b3ApOworK30gLyogcmVfc2VhcmNoXzIgKi8KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NlYXJjaF8yLCByZV9zZWFyY2hfMikKKysjZW5kaWYKKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjIGRlZmluZSBGUkVFX1ZBUih2YXIpIGlmICh2YXIpIFJFR0VYX0ZSRUUgKHZhcik7IHZhciA9IE5VTEwKKysjZWxzZQorKyMgZGVmaW5lIEZSRUVfVkFSKHZhcikgaWYgKHZhcikgZnJlZSAodmFyKTsgdmFyID0gTlVMTAorKyNlbmRpZgorKworKyNpZmRlZiBXQ0hBUgorKyMgZGVmaW5lIE1BWF9BTExPQ0FfU0laRQkyMDAwCisrCisrIyBkZWZpbmUgRlJFRV9XQ1NfQlVGRkVSUygpIFwKKysgIGRvIHsJCQkJCQkJCQkgICAgICBcCisrICAgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlmcmVlICh3Y3Nfc3RyaW5nMSk7CQkJCQkJICAgICAgXAorKwlmcmVlIChtYnNfb2Zmc2V0MSk7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAod2NzX3N0cmluZzEpOwkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKSAJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlmcmVlICh3Y3Nfc3RyaW5nMik7CQkJCQkJICAgICAgXAorKwlmcmVlIChtYnNfb2Zmc2V0Mik7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAod2NzX3N0cmluZzIpOwkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrCisrI2VuZGlmCisrCisrCisrc3RhdGljIGludAorK1BSRUZJWChyZV9zZWFyY2hfMikgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nMSwKKysgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZTEsIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKyt7CisrICBpbnQgdmFsOworKyAgcmVnaXN0ZXIgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3RtYXA7CisrICByZWdpc3RlciBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUgPSBidWZwLT50cmFuc2xhdGU7CisrICBpbnQgdG90YWxfc2l6ZSA9IHNpemUxICsgc2l6ZTI7CisrICBpbnQgZW5kcG9zID0gc3RhcnRwb3MgKyByYW5nZTsKKysjaWZkZWYgV0NIQVIKKysgIC8qIFdlIG5lZWQgd2NoYXJfdCogYnVmZmVycyBjb3JyZXNwb25kIHRvIGNzdHJpbmcxLCBjc3RyaW5nMi4gICovCisrICB3Y2hhcl90ICp3Y3Nfc3RyaW5nMSA9IE5VTEwsICp3Y3Nfc3RyaW5nMiA9IE5VTEw7CisrICAvKiBXZSBuZWVkIHRoZSBzaXplIG9mIHdjaGFyX3QgYnVmZmVycyBjb3JyZXNwb25kIHRvIGNzaXplMSwgY3NpemUyLiAgKi8KKysgIGludCB3Y3Nfc2l6ZTEgPSAwLCB3Y3Nfc2l6ZTIgPSAwOworKyAgLyogb2Zmc2V0IGJ1ZmZlciBmb3Igb3B0aW1pemF0b2luLiBTZWUgY29udmVydF9tYnNfdG9fd2MuICAqLworKyAgaW50ICptYnNfb2Zmc2V0MSA9IE5VTEwsICptYnNfb2Zmc2V0MiA9IE5VTEw7CisrICAvKiBUaGV5IGhvbGQgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgKmlzX2JpbmFyeSA9IE5VTEw7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIFNUQVJUUE9TLiAgKi8KKysgIGlmIChzdGFydHBvcyA8IDAgfHwgc3RhcnRwb3MgPiB0b3RhbF9zaXplKQorKyAgICByZXR1cm4gLTE7CisrCisrICAvKiBGaXggdXAgUkFOR0UgaWYgaXQgbWlnaHQgZXZlbnR1YWxseSB0YWtlIHVzIG91dHNpZGUKKysgICAgIHRoZSB2aXJ0dWFsIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMi4KKysgICAgIE1ha2Ugc3VyZSB3ZSB3b24ndCBtb3ZlIFNUQVJUUE9TIGJlbG93IDAgb3IgYWJvdmUgVE9UQUxfU0laRS4gICovCisrICBpZiAoZW5kcG9zIDwgMCkKKysgICAgcmFuZ2UgPSAwIC0gc3RhcnRwb3M7CisrICBlbHNlIGlmIChlbmRwb3MgPiB0b3RhbF9zaXplKQorKyAgICByYW5nZSA9IHRvdGFsX3NpemUgLSBzdGFydHBvczsKKysKKysgIC8qIElmIHRoZSBzZWFyY2ggaXNuJ3QgdG8gYmUgYSBiYWNrd2FyZHMgb25lLCBkb24ndCB3YXN0ZSB0aW1lIGluIGEKKysgICAgIHNlYXJjaCBmb3IgYSBwYXR0ZXJuIHRoYXQgbXVzdCBiZSBhbmNob3JlZC4gICovCisrICBpZiAoYnVmcC0+dXNlZCA+IDAgJiYgcmFuZ2UgPiAwCisrICAgICAgJiYgKChyZV9vcGNvZGVfdCkgYnVmcC0+YnVmZmVyWzBdID09IGJlZ2J1ZgorKwkgIC8qIGBiZWdsaW5lJyBpcyBsaWtlIGBiZWdidWYnIGlmIGl0IGNhbm5vdCBtYXRjaCBhdCBuZXdsaW5lcy4gICovCisrCSAgfHwgKChyZV9vcGNvZGVfdCkgYnVmcC0+YnVmZmVyWzBdID09IGJlZ2xpbmUKKysJICAgICAgJiYgIWJ1ZnAtPm5ld2xpbmVfYW5jaG9yKSkpCisrICAgIHsKKysgICAgICBpZiAoc3RhcnRwb3MgPiAwKQorKwlyZXR1cm4gLTE7CisrICAgICAgZWxzZQorKwlyYW5nZSA9IDE7CisrICAgIH0KKysKKysjaWZkZWYgZW1hY3MKKysgIC8qIEluIGEgZm9yd2FyZCBzZWFyY2ggZm9yIHNvbWV0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIFw9LgorKyAgICAgZG9uJ3Qga2VlcCBzZWFyY2hpbmcgcGFzdCBwb2ludC4gICovCisrICBpZiAoYnVmcC0+dXNlZCA+IDAgJiYgKHJlX29wY29kZV90KSBidWZwLT5idWZmZXJbMF0gPT0gYXRfZG90ICYmIHJhbmdlID4gMCkKKysgICAgeworKyAgICAgIHJhbmdlID0gUFQgLSBzdGFydHBvczsKKysgICAgICBpZiAocmFuZ2UgPD0gMCkKKysJcmV0dXJuIC0xOworKyAgICB9CisrI2VuZGlmIC8qIGVtYWNzICovCisrCisrICAvKiBVcGRhdGUgdGhlIGZhc3RtYXAgbm93IGlmIG5vdCBjb3JyZWN0IGFscmVhZHkuICAqLworKyAgaWYgKGZhc3RtYXAgJiYgIWJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUpCisrICAgIGlmIChyZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApID09IC0yKQorKyAgICAgIHJldHVybiAtMjsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEFsbG9jYXRlIHdjaGFyX3QgYXJyYXkgZm9yIHdjc19zdHJpbmcxIGFuZCB3Y3Nfc3RyaW5nMiBhbmQKKysgICAgIGZpbGwgdGhlbSB3aXRoIGNvbnZlcnRlZCBzdHJpbmcuICAqLworKyAgaWYgKHNpemUxICE9IDApCisrICAgIHsKKysgICAgICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCisrCXsKKysJICB3Y3Nfc3RyaW5nMSA9IFRBTExPQyAoc2l6ZTEgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQxID0gVEFMTE9DIChzaXplMSArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gVEFMTE9DIChzaXplMSArIDEsIGNoYXIpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgd2NzX3N0cmluZzEgPSBSRUdFWF9UQUxMT0MgKHNpemUxICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MSA9IFJFR0VYX1RBTExPQyAoc2l6ZTEgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoc2l6ZTEgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGlmICghd2NzX3N0cmluZzEgfHwgIW1ic19vZmZzZXQxIHx8ICFpc19iaW5hcnkpCisrCXsKKysJICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCisrCSAgICB7CisrCSAgICAgIGZyZWUgKHdjc19zdHJpbmcxKTsKKysJICAgICAgZnJlZSAobWJzX29mZnNldDEpOworKwkgICAgICBmcmVlIChpc19iaW5hcnkpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgRlJFRV9WQVIgKHdjc19zdHJpbmcxKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsKKysJICAgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgICB9CisrCSAgcmV0dXJuIC0yOworKwl9CisrICAgICAgd2NzX3NpemUxID0gY29udmVydF9tYnNfdG9fd2NzKHdjc19zdHJpbmcxLCBzdHJpbmcxLCBzaXplMSwKKysJCQkJICAgICBtYnNfb2Zmc2V0MSwgaXNfYmluYXJ5KTsKKysgICAgICB3Y3Nfc3RyaW5nMVt3Y3Nfc2l6ZTFdID0gTCdcMCc7IC8qIGZvciBhIHNlbnRpbmVsICAqLworKyAgICAgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkKKysJZnJlZSAoaXNfYmluYXJ5KTsKKysgICAgICBlbHNlCisrCUZSRUVfVkFSIChpc19iaW5hcnkpOworKyAgICB9CisrICBpZiAoc2l6ZTIgIT0gMCkKKysgICAgeworKyAgICAgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkKKysJeworKwkgIHdjc19zdHJpbmcyID0gVEFMTE9DIChzaXplMiArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDIgPSBUQUxMT0MgKHNpemUyICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBUQUxMT0MgKHNpemUyICsgMSwgY2hhcik7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICB3Y3Nfc3RyaW5nMiA9IFJFR0VYX1RBTExPQyAoc2l6ZTIgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQyID0gUkVHRVhfVEFMTE9DIChzaXplMiArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChzaXplMiArIDEsIGNoYXIpOworKwl9CisrICAgICAgaWYgKCF3Y3Nfc3RyaW5nMiB8fCAhbWJzX29mZnNldDIgfHwgIWlzX2JpbmFyeSkKKysJeworKwkgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrCSAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKQorKwkgICAgZnJlZSAoaXNfYmluYXJ5KTsKKysJICBlbHNlCisrCSAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICByZXR1cm4gLTI7CisrCX0KKysgICAgICB3Y3Nfc2l6ZTIgPSBjb252ZXJ0X21ic190b193Y3Mod2NzX3N0cmluZzIsIHN0cmluZzIsIHNpemUyLAorKwkJCQkgICAgIG1ic19vZmZzZXQyLCBpc19iaW5hcnkpOworKyAgICAgIHdjc19zdHJpbmcyW3djc19zaXplMl0gPSBMJ1wwJzsgLyogZm9yIGEgc2VudGluZWwgICovCisrICAgICAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKQorKwlmcmVlIChpc19iaW5hcnkpOworKyAgICAgIGVsc2UKKysJRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrICAgIH0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysKKysgIC8qIExvb3AgdGhyb3VnaCB0aGUgc3RyaW5nLCBsb29raW5nIGZvciBhIHBsYWNlIHRvIHN0YXJ0IG1hdGNoaW5nLiAgKi8KKysgIGZvciAoOzspCisrICAgIHsKKysgICAgICAvKiBJZiBhIGZhc3RtYXAgaXMgc3VwcGxpZWQsIHNraXAgcXVpY2tseSBvdmVyIGNoYXJhY3RlcnMgdGhhdAorKyAgICAgICAgIGNhbm5vdCBiZSB0aGUgc3RhcnQgb2YgYSBtYXRjaC4gIElmIHRoZSBwYXR0ZXJuIGNhbiBtYXRjaCB0aGUKKysgICAgICAgICBudWxsIHN0cmluZywgaG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBza2lwIGNoYXJhY3RlcnM7IHdlIHdhbnQKKysgICAgICAgICB0aGUgZmlyc3QgbnVsbCBzdHJpbmcuICAqLworKyAgICAgIGlmIChmYXN0bWFwICYmIHN0YXJ0cG9zIDwgdG90YWxfc2l6ZSAmJiAhYnVmcC0+Y2FuX2JlX251bGwpCisrCXsKKysJICBpZiAocmFuZ2UgPiAwKQkvKiBTZWFyY2hpbmcgZm9yd2FyZHMuICAqLworKwkgICAgeworKwkgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpkOworKwkgICAgICByZWdpc3RlciBpbnQgbGltID0gMDsKKysJICAgICAgaW50IGlyYW5nZSA9IHJhbmdlOworKworKyAgICAgICAgICAgICAgaWYgKHN0YXJ0cG9zIDwgc2l6ZTEgJiYgc3RhcnRwb3MgKyByYW5nZSA+PSBzaXplMSkKKysgICAgICAgICAgICAgICAgbGltID0gcmFuZ2UgLSAoc2l6ZTEgLSBzdGFydHBvcyk7CisrCisrCSAgICAgIGQgPSAoc3RhcnRwb3MgPj0gc2l6ZTEgPyBzdHJpbmcyIC0gc2l6ZTEgOiBzdHJpbmcxKSArIHN0YXJ0cG9zOworKworKyAgICAgICAgICAgICAgLyogV3JpdHRlbiBvdXQgYXMgYW4gaWYtZWxzZSB0byBhdm9pZCB0ZXN0aW5nIGB0cmFuc2xhdGUnCisrICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIGxvb3AuICAqLworKwkgICAgICBpZiAodHJhbnNsYXRlKQorKyAgICAgICAgICAgICAgICB3aGlsZSAocmFuZ2UgPiBsaW0KKysgICAgICAgICAgICAgICAgICAgICAgICYmICFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKQorKwkJCQkgICB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpICpkKytdXSkKKysgICAgICAgICAgICAgICAgICByYW5nZS0tOworKwkgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIHdoaWxlIChyYW5nZSA+IGxpbSAmJiAhZmFzdG1hcFsodW5zaWduZWQgY2hhcikgKmQrK10pCisrICAgICAgICAgICAgICAgICAgcmFuZ2UtLTsKKysKKysJICAgICAgc3RhcnRwb3MgKz0gaXJhbmdlIC0gcmFuZ2U7CisrCSAgICB9CisrCSAgZWxzZQkJCQkvKiBTZWFyY2hpbmcgYmFja3dhcmRzLiAgKi8KKysJICAgIHsKKysJICAgICAgcmVnaXN0ZXIgQ0hBUl9UIGMgPSAoc2l6ZTEgPT0gMCB8fCBzdGFydHBvcyA+PSBzaXplMQorKwkJCQkgICAgICA/IHN0cmluZzJbc3RhcnRwb3MgLSBzaXplMV0KKysJCQkJICAgICAgOiBzdHJpbmcxW3N0YXJ0cG9zXSk7CisrCisrCSAgICAgIGlmICghZmFzdG1hcFsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFIChjKV0pCisrCQlnb3RvIGFkdmFuY2U7CisrCSAgICB9CisrCX0KKysKKysgICAgICAvKiBJZiBjYW4ndCBtYXRjaCB0aGUgbnVsbCBzdHJpbmcsIGFuZCB0aGF0J3MgYWxsIHdlIGhhdmUgbGVmdCwgZmFpbC4gICovCisrICAgICAgaWYgKHJhbmdlID49IDAgJiYgc3RhcnRwb3MgPT0gdG90YWxfc2l6ZSAmJiBmYXN0bWFwCisrICAgICAgICAgICYmICFidWZwLT5jYW5fYmVfbnVsbCkKKysgICAgICAgeworKyNpZmRlZiBXQ0hBUgorKyAgICAgICAgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICB9CisrCisrI2lmZGVmIFdDSEFSCisrICAgICAgdmFsID0gd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLAorKwkJCQkgICAgIHNpemUyLCBzdGFydHBvcywgcmVncywgc3RvcCwKKysJCQkJICAgICB3Y3Nfc3RyaW5nMSwgd2NzX3NpemUxLAorKwkJCQkgICAgIHdjc19zdHJpbmcyLCB3Y3Nfc2l6ZTIsCisrCQkJCSAgICAgbWJzX29mZnNldDEsIG1ic19vZmZzZXQyKTsKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgdmFsID0gYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwKKysJCQkJICAgICAgc2l6ZTIsIHN0YXJ0cG9zLCByZWdzLCBzdG9wKTsKKysjZW5kaWYgLyogQllURSAqLworKworKyNpZm5kZWYgUkVHRVhfTUFMTE9DCisrIyBpZmRlZiBDX0FMTE9DQQorKyAgICAgIGFsbG9jYSAoMCk7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGlmICh2YWwgPj0gMCkKKysJeworKyNpZmRlZiBXQ0hBUgorKwkgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrCSAgcmV0dXJuIHN0YXJ0cG9zOworKwl9CisrCisrICAgICAgaWYgKHZhbCA9PSAtMikKKysJeworKyNpZmRlZiBXQ0hBUgorKwkgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrCSAgcmV0dXJuIC0yOworKwl9CisrCisrICAgIGFkdmFuY2U6CisrICAgICAgaWYgKCFyYW5nZSkKKysgICAgICAgIGJyZWFrOworKyAgICAgIGVsc2UgaWYgKHJhbmdlID4gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgcmFuZ2UtLTsKKysgICAgICAgICAgc3RhcnRwb3MrKzsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIHJhbmdlKys7CisrICAgICAgICAgIHN0YXJ0cG9zLS07CisrICAgICAgICB9CisrICAgIH0KKysjaWZkZWYgV0NIQVIKKysgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrICByZXR1cm4gLTE7CisrfQorKworKyNpZmRlZiBXQ0hBUgorKy8qIFRoaXMgY29udmVydHMgUFRSLCBhIHBvaW50ZXIgaW50byBvbmUgb2YgdGhlIHNlYXJjaCB3Y2hhcl90IHN0cmluZ3MKKysgICBgc3RyaW5nMScgYW5kIGBzdHJpbmcyJyBpbnRvIGFuIG11bHRpYnl0ZSBzdHJpbmcgb2Zmc2V0IGZyb20gdGhlCisrICAgYmVnaW5uaW5nIG9mIHRoYXQgc3RyaW5nLiBXZSB1c2UgbWJzX29mZnNldCB0byBvcHRpbWl6ZS4KKysgICBTZWUgY29udmVydF9tYnNfdG9fd2NzLiAgKi8KKysjIGRlZmluZSBQT0lOVEVSX1RPX09GRlNFVChwdHIpCQkJCQkJXAorKyAgKEZJUlNUX1NUUklOR19QIChwdHIpCQkJCQkJCVwKKysgICA/ICgocmVnb2ZmX3QpKG1ic19vZmZzZXQxICE9IE5VTEw/IG1ic19vZmZzZXQxWyhwdHIpLXN0cmluZzFdIDogMCkpCVwKKysgICA6ICgocmVnb2ZmX3QpKChtYnNfb2Zmc2V0MiAhPSBOVUxMPyBtYnNfb2Zmc2V0MlsocHRyKS1zdHJpbmcyXSA6IDApCVwKKysJCSArIGNzaXplMSkpKQorKyNlbHNlIC8qIEJZVEUgKi8KKysvKiBUaGlzIGNvbnZlcnRzIFBUUiwgYSBwb2ludGVyIGludG8gb25lIG9mIHRoZSBzZWFyY2ggc3RyaW5ncyBgc3RyaW5nMScKKysgICBhbmQgYHN0cmluZzInIGludG8gYW4gb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGF0IHN0cmluZy4gICovCisrIyBkZWZpbmUgUE9JTlRFUl9UT19PRkZTRVQocHRyKQkJCVwKKysgIChGSVJTVF9TVFJJTkdfUCAocHRyKQkJCQlcCisrICAgPyAoKHJlZ29mZl90KSAoKHB0cikgLSBzdHJpbmcxKSkJCVwKKysgICA6ICgocmVnb2ZmX3QpICgocHRyKSAtIHN0cmluZzIgKyBzaXplMSkpKQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIE1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIHRoZSBzcGxpdCBzdHJpbmdzIGluIHJlX21hdGNoXzIuICAqLworKworKyNkZWZpbmUgTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HICAoZGVuZCA9PSBlbmRfbWF0Y2hfMSkKKysKKysvKiBDYWxsIGJlZm9yZSBmZXRjaGluZyBhIGNoYXJhY3RlciB3aXRoICpkLiAgVGhpcyBzd2l0Y2hlcyBvdmVyIHRvCisrICAgc3RyaW5nMiBpZiBuZWNlc3NhcnkuICAqLworKyNkZWZpbmUgUFJFRkVUQ0goKQkJCQkJCQlcCisrICB3aGlsZSAoZCA9PSBkZW5kKQkJCQkJCSAgICAJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIC8qIEVuZCBvZiBzdHJpbmcyID0+IGZhaWwuICAqLwkJCQkJXAorKyAgICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKSAJCQkJCQlcCisrICAgICAgICBnb3RvIGZhaWw7CQkJCQkJCVwKKysgICAgICAvKiBFbmQgb2Ygc3RyaW5nMSA9PiBhZHZhbmNlIHRvIHN0cmluZzIuICAqLyAJCQlcCisrICAgICAgZCA9IHN0cmluZzI7CQkJCQkJICAgICAgICBcCisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8yOwkJCQkJCVwKKysgICAgfQorKworKy8qIFRlc3QgaWYgYXQgdmVyeSBiZWdpbm5pbmcgb3IgYXQgdmVyeSBlbmQgb2YgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbgorKyAgIG9mIGBzdHJpbmcxJyBhbmQgYHN0cmluZzInLiAgSWYgb25seSBvbmUgc3RyaW5nLCBpdCdzIGBzdHJpbmcyJy4gICovCisrI2RlZmluZSBBVF9TVFJJTkdTX0JFRyhkKSAoKGQpID09IChzaXplMSA/IHN0cmluZzEgOiBzdHJpbmcyKSB8fCAhc2l6ZTIpCisrI2RlZmluZSBBVF9TVFJJTkdTX0VORChkKSAoKGQpID09IGVuZDIpCisrCisrCisrLyogVGVzdCBpZiBEIHBvaW50cyB0byBhIGNoYXJhY3RlciB3aGljaCBpcyB3b3JkLWNvbnN0aXR1ZW50LiAgV2UgaGF2ZQorKyAgIHR3byBzcGVjaWFsIGNhc2VzIHRvIGNoZWNrIGZvcjogaWYgcGFzdCB0aGUgZW5kIG9mIHN0cmluZzEsIGxvb2sgYXQKKysgICB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHN0cmluZzI7IGFuZCBpZiBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZgorKyAgIHN0cmluZzIsIGxvb2sgYXQgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHN0cmluZzEuICAqLworKyNpZmRlZiBXQ0hBUgorKy8qIFVzZSBpbnRlcm5hdGlvbmFsaXplZCBBUEkgaW5zdGVhZCBvZiBTWU5UQVguICAqLworKyMgZGVmaW5lIFdPUkRDSEFSX1AoZCkJCQkJCQkJXAorKyAgKGlzd2FsbnVtICgod2ludF90KSgoZCkgPT0gZW5kMSA/ICpzdHJpbmcyCQkJCVwKKysgICAgICAgICAgIDogKGQpID09IHN0cmluZzIgLSAxID8gKihlbmQxIC0gMSkgOiAqKGQpKSkgIT0gMAkJXAorKyAgIHx8ICgoZCkgPT0gZW5kMSA/ICpzdHJpbmcyCQkJCQkJXAorKyAgICAgICA6IChkKSA9PSBzdHJpbmcyIC0gMSA/ICooZW5kMSAtIDEpIDogKihkKSkgPT0gTCdfJykKKysjZWxzZSAvKiBCWVRFICovCisrIyBkZWZpbmUgV09SRENIQVJfUChkKQkJCQkJCQlcCisrICAoU1lOVEFYICgoZCkgPT0gZW5kMSA/ICpzdHJpbmcyCQkJCQlcCisrICAgICAgICAgICA6IChkKSA9PSBzdHJpbmcyIC0gMSA/ICooZW5kMSAtIDEpIDogKihkKSkJCQlcCisrICAgPT0gU3dvcmQpCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrLyogRGlzYWJsZWQgZHVlIHRvIGEgY29tcGlsZXIgYnVnIC0tIHNlZSBjb21tZW50IGF0IGNhc2Ugd29yZGJvdW5kICovCisrI2lmIDAKKysvKiBUZXN0IGlmIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIEQgYW5kIHRoZSBvbmUgYXQgRCBkaWZmZXIgd2l0aCByZXNwZWN0CisrICAgdG8gYmVpbmcgd29yZC1jb25zdGl0dWVudC4gICovCisrI2RlZmluZSBBVF9XT1JEX0JPVU5EQVJZKGQpCQkJCQkJXAorKyAgKEFUX1NUUklOR1NfQkVHIChkKSB8fCBBVF9TVFJJTkdTX0VORCAoZCkJCQkJXAorKyAgIHx8IFdPUkRDSEFSX1AgKGQgLSAxKSAhPSBXT1JEQ0hBUl9QIChkKSkKKysjZW5kaWYKKysKKysvKiBGcmVlIGV2ZXJ5dGhpbmcgd2UgbWFsbG9jLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgUkVHRVhfRlJFRV9TVEFDSyAoZmFpbF9zdGFjay5zdGFjayk7CQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdlbmQpOwkJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mbyk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2R1bW15KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mb19kdW1teSk7CQkJCQkJXAorKyAgICBpZiAoIWNhbnRfZnJlZV93Y3NfYnVmKQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcyKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBSRUdFWF9GUkVFX1NUQUNLIChmYWlsX3N0YWNrLnN0YWNrKTsJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ2VuZCk7CQkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfZHVtbXkpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvX2R1bW15KTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysjZWxzZQorKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGlmICghY2FudF9mcmVlX3djc19idWYpCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzIpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKSAoKHZvaWQpMCkgLyogRG8gbm90aGluZyEgIEJ1dCBpbmhpYml0IGdjYyB3YXJuaW5nLiAqLworKyMgZW5kaWYgLyogV0NIQVIgKi8KKysjZW5kaWYgLyogbm90IE1BVENIX01BWV9BTExPQ0FURSAqLworKworKy8qIFRoZXNlIHZhbHVlcyBtdXN0IG1lZXQgc2V2ZXJhbCBjb25zdHJhaW50cy4gIFRoZXkgbXVzdCBub3QgYmUgdmFsaWQKKysgICByZWdpc3RlciB2YWx1ZXM7IHNpbmNlIHdlIGhhdmUgYSBsaW1pdCBvZiAyNTUgcmVnaXN0ZXJzIChiZWNhdXNlCisrICAgd2UgdXNlIG9ubHkgb25lIGJ5dGUgaW4gdGhlIHBhdHRlcm4gZm9yIHRoZSByZWdpc3RlciBudW1iZXIpLCB3ZSBjYW4KKysgICB1c2UgbnVtYmVycyBsYXJnZXIgdGhhbiAyNTUuICBUaGV5IG11c3QgZGlmZmVyIGJ5IDEsIGJlY2F1c2Ugb2YKKysgICBOVU1fRkFJTFVSRV9JVEVNUyBhYm92ZS4gIEFuZCB0aGUgdmFsdWUgZm9yIHRoZSBsb3dlc3QgcmVnaXN0ZXIgbXVzdAorKyAgIGJlIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSBmb3IgdGhlIGhpZ2hlc3QgcmVnaXN0ZXIsIHNvIHdlIGRvIG5vdCB0cnkKKysgICB0byBhY3R1YWxseSBzYXZlIGFueSByZWdpc3RlcnMgd2hlbiBub25lIGFyZSBhY3RpdmUuICAqLworKyNkZWZpbmUgTk9fSElHSEVTVF9BQ1RJVkVfUkVHICgxIDw8IEJZVEVXSURUSCkKKysjZGVmaW5lIE5PX0xPV0VTVF9BQ1RJVkVfUkVHIChOT19ISUdIRVNUX0FDVElWRV9SRUcgKyAxKQorKwwKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKy8qIE1hdGNoaW5nIHJvdXRpbmVzLiAgKi8KKysKKysjaWZuZGVmIGVtYWNzICAgLyogRW1hY3MgbmV2ZXIgdXNlcyB0aGlzLiAgKi8KKysvKiByZV9tYXRjaCBpcyBsaWtlIHJlX21hdGNoXzIgZXhjZXB0IGl0IHRha2VzIG9ubHkgYSBzaW5nbGUgc3RyaW5nLiAgKi8KKysKKytpbnQKKytyZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcsCisrICAgICAgICAgIGludCBzaXplLCBpbnQgcG9zLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQorK3sKKysgIGludCByZXN1bHQ7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmVzdWx0ID0gd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIE5VTEwsIDAsIHN0cmluZywgc2l6ZSwKKysJCQkJICAgICAgcG9zLCByZWdzLCBzaXplLAorKwkJCQkgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJlc3VsdCA9IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgTlVMTCwgMCwgc3RyaW5nLCBzaXplLAorKwkJCQkgIHBvcywgcmVncywgc2l6ZSk7CisrIyBpZm5kZWYgUkVHRVhfTUFMTE9DCisrIyAgaWZkZWYgQ19BTExPQ0EKKysgIGFsbG9jYSAoMCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrICByZXR1cm4gcmVzdWx0OworK30KKysjIGlmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9tYXRjaCwgcmVfbWF0Y2gpCisrIyBlbmRpZgorKyNlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorK3N0YXRpYyBib29sZWFuIFBSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICplbmQsCisrCQkJCQlQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqZW5kLAorKwkJCQkJUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICplbmQsCisrCQkJCQlQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pOworK3N0YXRpYyBpbnQgUFJFRklYKGJjbXBfdHJhbnNsYXRlKSAoY29uc3QgQ0hBUl9UICpzMSwgY29uc3QgQ0hBUl9UICpzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBsZW4sCisrCQkJCSAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSk7CisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiByZV9tYXRjaF8yIG1hdGNoZXMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGUCBhZ2FpbnN0IHRoZQorKyAgIHRoZSAodmlydHVhbCkgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyIChvZiBsZW5ndGggU0laRTEKKysgICBhbmQgU0laRTIsIHJlc3BlY3RpdmVseSkuICBXZSBzdGFydCBtYXRjaGluZyBhdCBQT1MsIGFuZCBzdG9wCisrICAgbWF0Y2hpbmcgYXQgU1RPUC4KKysKKysgICBJZiBSRUdTIGlzIG5vbi1udWxsIGFuZCB0aGUgYG5vX3N1YicgZmllbGQgb2YgQlVGUCBpcyBub256ZXJvLCB3ZQorKyAgIHN0b3JlIG9mZnNldHMgZm9yIHRoZSBzdWJzdHJpbmcgZWFjaCBncm91cCBtYXRjaGVkIGluIFJFR1MuICBTZWUgdGhlCisrICAgZG9jdW1lbnRhdGlvbiBmb3IgZXhhY3RseSBob3cgbWFueSBncm91cHMgd2UgZmlsbC4KKysKKysgICBXZSByZXR1cm4gLTEgaWYgbm8gbWF0Y2gsIC0yIGlmIGFuIGludGVybmFsIGVycm9yIChzdWNoIGFzIHRoZQorKyAgIGZhaWx1cmUgc3RhY2sgb3ZlcmZsb3dpbmcpLiAgT3RoZXJ3aXNlLCB3ZSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUKKysgICBtYXRjaGVkIHN1YnN0cmluZy4gICovCisrCisraW50CisrcmVfbWF0Y2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLCBpbnQgcG9zLAorKyAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorK3sKKysgIGludCByZXN1bHQ7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmVzdWx0ID0gd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwKKysJCQkJICAgICAgcG9zLCByZWdzLCBzdG9wLAorKwkJCQkgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJlc3VsdCA9IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLAorKwkJCQkgIHBvcywgcmVncywgc3RvcCk7CisrCisrI2lmbmRlZiBSRUdFWF9NQUxMT0MKKysjIGlmZGVmIENfQUxMT0NBCisrICBhbGxvY2EgKDApOworKyMgZW5kaWYKKysjZW5kaWYKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2hfMiwgcmVfbWF0Y2hfMikKKysjZW5kaWYKKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyNpZmRlZiBXQ0hBUgorK3N0YXRpYyBpbnQgY291bnRfbWJzX2xlbmd0aCAoaW50ICosIGludCk7CisrCisrLyogVGhpcyBjaGVjayB0aGUgc3Vic3RyaW5nIChmcm9tIDAsIHRvIGxlbmd0aCkgb2YgdGhlIG11bHRpYnl0ZSBzdHJpbmcsCisrICAgdG8gd2hpY2ggb2Zmc2V0X2J1ZmZlciBjb3JyZXNwb25kLiBBbmQgY291bnQgaG93IG1hbnkgd2NoYXJfdF9jaGFyYWN0ZXJzCisrICAgdGhlIHN1YnN0cmluZyBvY2N1cHkuIFdlIHVzZSBvZmZzZXRfYnVmZmVyIHRvIG9wdGltaXphdGlvbi4KKysgICBTZWUgY29udmVydF9tYnNfdG9fd2NzLiAgKi8KKysKKytzdGF0aWMgaW50CisrY291bnRfbWJzX2xlbmd0aChpbnQgKm9mZnNldF9idWZmZXIsIGludCBsZW5ndGgpCisreworKyAgaW50IHVwcGVyLCBsb3dlcjsKKysKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIHNpemUgaXMgdmFsaWQuICAqLworKyAgaWYgKGxlbmd0aCA8IDApCisrICAgIHJldHVybiAtMTsKKysKKysgIGlmIChvZmZzZXRfYnVmZmVyID09IE5VTEwpCisrICAgIHJldHVybiAwOworKworKyAgLyogSWYgdGhlcmUgYXJlIG5vIG11bHRpYnl0ZSBjaGFyYWN0ZXIsIG9mZnNldF9idWZmZXJbaV0gPT0gaS4KKysgICBPcHRtaXplIGZvciB0aGlzIGNhc2UuICAqLworKyAgaWYgKG9mZnNldF9idWZmZXJbbGVuZ3RoXSA9PSBsZW5ndGgpCisrICAgIHJldHVybiBsZW5ndGg7CisrCisrICAvKiBTZXQgdXAgdXBwZXIgd2l0aCBsZW5ndGguIChiZWNhdXNlIGZvciBhbGwgaSwgb2Zmc2V0X2J1ZmZlcltpXSA+PSBpKSAgKi8KKysgIHVwcGVyID0gbGVuZ3RoOworKyAgbG93ZXIgPSAwOworKworKyAgd2hpbGUgKHRydWUpCisrICAgIHsKKysgICAgICBpbnQgbWlkZGxlID0gKGxvd2VyICsgdXBwZXIpIC8gMjsKKysgICAgICBpZiAobWlkZGxlID09IGxvd2VyIHx8IG1pZGRsZSA9PSB1cHBlcikKKysJYnJlYWs7CisrICAgICAgaWYgKG9mZnNldF9idWZmZXJbbWlkZGxlXSA+IGxlbmd0aCkKKysJdXBwZXIgPSBtaWRkbGU7CisrICAgICAgZWxzZSBpZiAob2Zmc2V0X2J1ZmZlclttaWRkbGVdIDwgbGVuZ3RoKQorKwlsb3dlciA9IG1pZGRsZTsKKysgICAgICBlbHNlCisrCXJldHVybiBtaWRkbGU7CisrICAgIH0KKysKKysgIHJldHVybiAtMTsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrLyogVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIGZvcmNlIGFuIGFsbG9jYSBjbGVhbnVwCisrICAgYWZ0ZXJ3YXJkcy4gICovCisrI2lmZGVmIFdDSEFSCisrc3RhdGljIGludAorK3djc19yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcxLCBpbnQgY3NpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMiwgaW50IGNzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysJCQkgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0b3AsCisrICAgICAvKiBzdHJpbmcxID09IHN0cmluZzIgPT0gTlVMTCBtZWFucyBzdHJpbmcxLzIsIHNpemUxLzIgYW5kCisrCW1ic19vZmZzZXQxLzIgbmVlZCBzZXRpbmcgdXAgaW4gdGhpcyBmdW5jdGlvbi4gICovCisrICAgICAvKiBXZSBuZWVkIHdjaGFyX3QqIGJ1ZmZlcnMgY29ycmVzcG9uZCB0byBjc3RyaW5nMSwgY3N0cmluZzIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgIC8qIG9mZnNldCBidWZmZXIgZm9yIG9wdGltaXphdG9pbi4gU2VlIGNvbnZlcnRfbWJzX3RvX3djLiAgKi8KKysJCQkgaW50ICptYnNfb2Zmc2V0MSwgaW50ICptYnNfb2Zmc2V0MikKKysjZWxzZSAvKiBCWVRFICovCisrc3RhdGljIGludAorK2J5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysJCQkgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorKyNlbmRpZiAvKiBCWVRFICovCisreworKyAgLyogR2VuZXJhbCB0ZW1wb3Jhcmllcy4gICovCisrICBpbnQgbWNudDsKKysgIFVDSEFSX1QgKnAxOworKyNpZmRlZiBXQ0hBUgorKyAgLyogVGhleSBob2xkIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyICppc19iaW5hcnkgPSBOVUxMOworKyAgLyogSWYgdHJ1ZSwgd2UgY2FuJ3QgZnJlZSBzdHJpbmcxLzIsIG1ic19vZmZzZXQxLzIuICAqLworKyAgaW50IGNhbnRfZnJlZV93Y3NfYnVmID0gMTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZy4gICovCisrICBjb25zdCBDSEFSX1QgKmVuZDEsICplbmQyOworKworKyAgLyogUG9pbnRlcnMgaW50byBzdHJpbmcxIGFuZCBzdHJpbmcyLCBqdXN0IHBhc3QgdGhlIGxhc3QgY2hhcmFjdGVycyBpbgorKyAgICAgZWFjaCB0byBjb25zaWRlciBtYXRjaGluZy4gICovCisrICBjb25zdCBDSEFSX1QgKmVuZF9tYXRjaF8xLCAqZW5kX21hdGNoXzI7CisrCisrICAvKiBXaGVyZSB3ZSBhcmUgaW4gdGhlIGRhdGEsIGFuZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN0cmluZy4gICovCisrICBjb25zdCBDSEFSX1QgKmQsICpkZW5kOworKworKyAgLyogV2hlcmUgd2UgYXJlIGluIHRoZSBwYXR0ZXJuLCBhbmQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gICovCisrI2lmZGVmIFdDSEFSCisrICBVQ0hBUl9UICpwYXR0ZXJuLCAqcDsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQ7CisrI2Vsc2UgLyogQllURSAqLworKyAgVUNIQVJfVCAqcCA9IGJ1ZnAtPmJ1ZmZlcjsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQgPSBwICsgYnVmcC0+dXNlZDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIE1hcmsgdGhlIG9wY29kZSBqdXN0IGFmdGVyIGEgc3RhcnRfbWVtb3J5LCBzbyB3ZSBjYW4gdGVzdCBmb3IgYW4KKysgICAgIGVtcHR5IHN1YnBhdHRlcm4gd2hlbiB3ZSBnZXQgdG8gdGhlIHN0b3BfbWVtb3J5LiAgKi8KKysgIFVDSEFSX1QgKmp1c3RfcGFzdF9zdGFydF9tZW0gPSAwOworKworKyAgLyogV2UgdXNlIHRoaXMgdG8gbWFwIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiAgKi8KKysgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKysKKysgIC8qIEZhaWx1cmUgcG9pbnQgc3RhY2suICBFYWNoIHBsYWNlIHRoYXQgY2FuIGhhbmRsZSBhIGZhaWx1cmUgZnVydGhlcgorKyAgICAgZG93biB0aGUgbGluZSBwdXNoZXMgYSBmYWlsdXJlIHBvaW50IG9uIHRoaXMgc3RhY2suICBJdCBjb25zaXN0cyBvZgorKyAgICAgcmVzdGFydCwgcmVnZW5kLCBhbmQgcmVnX2luZm8gZm9yIGFsbCByZWdpc3RlcnMgY29ycmVzcG9uZGluZyB0bworKyAgICAgdGhlIHN1YmV4cHJlc3Npb25zIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUsIHBsdXMgdGhlIG51bWJlciBvZiBzdWNoCisrICAgICByZWdpc3RlcnMsIGFuZCwgZmluYWxseSwgdHdvIGNoYXIgKidzLiAgVGhlIGZpcnN0IGNoYXIgKiBpcyB3aGVyZQorKyAgICAgdG8gcmVzdW1lIHNjYW5uaW5nIHRoZSBwYXR0ZXJuOyB0aGUgc2Vjb25kIG9uZSBpcyB3aGVyZSB0byByZXN1bWUKKysgICAgIHNjYW5uaW5nIHRoZSBzdHJpbmdzLiAgSWYgdGhlIGxhdHRlciBpcyB6ZXJvLCB0aGUgZmFpbHVyZSBwb2ludCBpcworKyAgICAgYSBgYGR1bW15Jyc7IGlmIGEgZmFpbHVyZSBoYXBwZW5zIGFuZCB0aGUgZmFpbHVyZSBwb2ludCBpcyBhIGR1bW15LAorKyAgICAgaXQgZ2V0cyBkaXNjYXJkZWQgYW5kIHRoZSBuZXh0IG5leHQgb25lIGlzIHRyaWVkLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhpcyBpcyBnbG9iYWwuICAqLworKyAgUFJFRklYKGZhaWxfc3RhY2tfdHlwZSkgZmFpbF9zdGFjazsKKysjZW5kaWYKKysjaWZkZWYgREVCVUcKKysgIHN0YXRpYyB1bnNpZ25lZCBmYWlsdXJlX2lkOworKyAgdW5zaWduZWQgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCA9IDAsIG5mYWlsdXJlX3BvaW50c19wb3BwZWQgPSAwOworKyNlbmRpZgorKworKyNpZmRlZiBSRUxfQUxMT0MKKysgIC8qIFRoaXMgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGZhaWx1cmUgc3RhY2ssIHdoZW4KKysgICAgIGl0IGlzIGFsbG9jYXRlZCByZWxvY2F0YWJseS4gICovCisrICBmYWlsX3N0YWNrX2VsdF90ICpmYWlsdXJlX3N0YWNrX3B0cjsKKysjZW5kaWYKKysKKysgIC8qIFdlIGZpbGwgYWxsIHRoZSByZWdpc3RlcnMgaW50ZXJuYWxseSwgaW5kZXBlbmRlbnQgb2Ygd2hhdCB3ZQorKyAgICAgcmV0dXJuLCBmb3IgdXNlIGluIGJhY2tyZWZlcmVuY2VzLiAgVGhlIG51bWJlciBoZXJlIGluY2x1ZGVzCisrICAgICBhbiBlbGVtZW50IGZvciByZWdpc3RlciB6ZXJvLiAgKi8KKysgIHNpemVfdCBudW1fcmVncyA9IGJ1ZnAtPnJlX25zdWIgKyAxOworKworKyAgLyogVGhlIGN1cnJlbnRseSBhY3RpdmUgcmVnaXN0ZXJzLiAgKi8KKysgIGFjdGl2ZV9yZWdfdCBsb3dlc3RfYWN0aXZlX3JlZyA9IE5PX0xPV0VTVF9BQ1RJVkVfUkVHOworKyAgYWN0aXZlX3JlZ190IGhpZ2hlc3RfYWN0aXZlX3JlZyA9IE5PX0hJR0hFU1RfQUNUSVZFX1JFRzsKKysKKysgIC8qIEluZm9ybWF0aW9uIG9uIHRoZSBjb250ZW50cyBvZiByZWdpc3RlcnMuIFRoZXNlIGFyZSBwb2ludGVycyBpbnRvCisrICAgICB0aGUgaW5wdXQgc3RyaW5nczsgdGhleSByZWNvcmQganVzdCB3aGF0IHdhcyBtYXRjaGVkIChvbiB0aGlzCisrICAgICBhdHRlbXB0KSBieSBhIHN1YmV4cHJlc3Npb24gcGFydCBvZiB0aGUgcGF0dGVybiwgdGhhdCBpcywgdGhlCisrICAgICByZWdudW0tdGggcmVnc3RhcnQgcG9pbnRlciBwb2ludHMgdG8gd2hlcmUgaW4gdGhlIHBhdHRlcm4gd2UgYmVnYW4KKysgICAgIG1hdGNoaW5nIGFuZCB0aGUgcmVnbnVtLXRoIHJlZ2VuZCBwb2ludHMgdG8gcmlnaHQgYWZ0ZXIgd2hlcmUgd2UKKysgICAgIHN0b3BwZWQgbWF0Y2hpbmcgdGhlIHJlZ251bS10aCBzdWJleHByZXNzaW9uLiAgKFRoZSB6ZXJvdGggcmVnaXN0ZXIKKysgICAgIGtlZXBzIHRyYWNrIG9mIHdoYXQgdGhlIHdob2xlIHBhdHRlcm4gbWF0Y2hlcy4pICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKnJlZ3N0YXJ0LCAqKnJlZ2VuZDsKKysjZW5kaWYKKysKKysgIC8qIElmIGEgZ3JvdXAgdGhhdCdzIG9wZXJhdGVkIHVwb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yIGZhaWxzIHRvCisrICAgICBtYXRjaCBhbnl0aGluZywgdGhlbiB0aGUgcmVnaXN0ZXIgZm9yIGl0cyBzdGFydCB3aWxsIG5lZWQgdG8gYmUKKysgICAgIHJlc3RvcmVkIGJlY2F1c2UgaXQgd2lsbCBoYXZlIGJlZW4gc2V0IHRvIHdoZXJldmVyIGluIHRoZSBzdHJpbmcgd2UKKysgICAgIGFyZSB3aGVuIHdlIGxhc3Qgc2VlIGl0cyBvcGVuLWdyb3VwIG9wZXJhdG9yLiAgU2ltaWxhcmx5IGZvciBhCisrICAgICByZWdpc3RlcidzIGVuZC4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqb2xkX3JlZ3N0YXJ0LCAqKm9sZF9yZWdlbmQ7CisrI2VuZGlmCisrCisrICAvKiBUaGUgaXNfYWN0aXZlIGZpZWxkIG9mIHJlZ19pbmZvIGhlbHBzIHVzIGtlZXAgdHJhY2sgb2Ygd2hpY2ggKHBvc3NpYmx5CisrICAgICBuZXN0ZWQpIHN1YmV4cHJlc3Npb25zIHdlIGFyZSBjdXJyZW50bHkgaW4uIFRoZSBtYXRjaGVkX3NvbWV0aGluZworKyAgICAgZmllbGQgb2YgcmVnX2luZm9bcmVnX251bV0gaGVscHMgdXMgdGVsbCB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlCisrICAgICBtYXRjaGVkIGFueSBvZiB0aGUgcGF0dGVybiBzbyBmYXIgdGhpcyB0aW1lIHRocm91Z2ggdGhlIHJlZ19udW0tdGgKKysgICAgIHN1YmV4cHJlc3Npb24uICBUaGVzZSB0d28gZmllbGRzIGdldCByZXNldCBlYWNoIHRpbWUgdGhyb3VnaCBhbnkKKysgICAgIGxvb3AgdGhlaXIgcmVnaXN0ZXIgaXMgaW4uICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGlzIGlzIGdsb2JhbC4gICovCisrICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm87CisrI2VuZGlmCisrCisrICAvKiBUaGUgZm9sbG93aW5nIHJlY29yZCB0aGUgcmVnaXN0ZXIgaW5mbyBhcyBmb3VuZCBpbiB0aGUgYWJvdmUKKysgICAgIHZhcmlhYmxlcyB3aGVuIHdlIGZpbmQgYSBtYXRjaCBiZXR0ZXIgdGhhbiBhbnkgd2UndmUgc2VlbiBiZWZvcmUuCisrICAgICBUaGlzIGhhcHBlbnMgYXMgd2UgYmFja3RyYWNrIHRocm91Z2ggdGhlIGZhaWx1cmUgcG9pbnRzLCB3aGljaCBpbgorKyAgICAgdHVybiBoYXBwZW5zIG9ubHkgaWYgd2UgaGF2ZSBub3QgeWV0IG1hdGNoZWQgdGhlIGVudGlyZSBzdHJpbmcuICovCisrICB1bnNpZ25lZCBiZXN0X3JlZ3Nfc2V0ID0gZmFsc2U7CisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqYmVzdF9yZWdzdGFydCwgKipiZXN0X3JlZ2VuZDsKKysjZW5kaWYKKysKKysgIC8qIExvZ2ljYWxseSwgdGhpcyBpcyBgYmVzdF9yZWdlbmRbMF0nLiAgQnV0IHdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0bworKyAgICAgYWxsb2NhdGUgc3BhY2UgZm9yIHRoYXQgaWYgd2UncmUgbm90IGFsbG9jYXRpbmcgc3BhY2UgZm9yIGFueXRoaW5nCisrICAgICBlbHNlIChzZWUgYmVsb3cpLiAgQWxzbywgd2UgbmV2ZXIgbmVlZCBpbmZvIGFib3V0IHJlZ2lzdGVyIDAgZm9yCisrICAgICBhbnkgb2YgdGhlIG90aGVyIHJlZ2lzdGVyIHZlY3RvcnMsIGFuZCBpdCBzZWVtcyByYXRoZXIgYSBrbHVkZ2UgdG8KKysgICAgIHRyZWF0IGBiZXN0X3JlZ2VuZCcgZGlmZmVyZW50bHkgdGhhbiB0aGUgcmVzdC4gIFNvIHdlIGtlZXAgdHJhY2sgb2YKKysgICAgIHRoZSBlbmQgb2YgdGhlIGJlc3QgbWF0Y2ggc28gZmFyIGluIGEgc2VwYXJhdGUgdmFyaWFibGUuICBXZQorKyAgICAgaW5pdGlhbGl6ZSB0aGlzIHRvIE5VTEwgc28gdGhhdCB3aGVuIHdlIGJhY2t0cmFjayB0aGUgZmlyc3QgdGltZQorKyAgICAgYW5kIG5lZWQgdG8gdGVzdCBpdCwgaXQncyBub3QgZ2FyYmFnZS4gICovCisrICBjb25zdCBDSEFSX1QgKm1hdGNoX2VuZCA9IE5VTEw7CisrCisrICAvKiBUaGlzIGhlbHBzIFNFVF9SRUdTX01BVENIRUQgYXZvaWQgZG9pbmcgcmVkdW5kYW50IHdvcmsuICAqLworKyAgaW50IHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CisrCisrICAvKiBVc2VkIHdoZW4gd2UgcG9wIHZhbHVlcyB3ZSBkb24ndCBjYXJlIGFib3V0LiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipyZWdfZHVtbXk7CisrICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm9fZHVtbXk7CisrI2VuZGlmCisrCisrI2lmZGVmIERFQlVHCisrICAvKiBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcnMgcHVzaGVkLiAgKi8KKysgIHVuc2lnbmVkIG51bV9yZWdzX3B1c2hlZCA9IDA7CisrI2VuZGlmCisrCisrICBERUJVR19QUklOVDEgKCJcblxuRW50ZXJpbmcgcmVfbWF0Y2hfMi5cbiIpOworKworKyAgSU5JVF9GQUlMX1NUQUNLICgpOworKworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysgIC8qIERvIG5vdCBib3RoZXIgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIHJlZ2lzdGVyIHZhcmlhYmxlcyBpZiB0aGVyZSBhcmUKKysgICAgIG5vIGdyb3VwcyBpbiB0aGUgcGF0dGVybiwgYXMgaXQgdGFrZXMgYSBmYWlyIGFtb3VudCBvZiB0aW1lLiAgSWYKKysgICAgIHRoZXJlIGFyZSBncm91cHMsIHdlIGluY2x1ZGUgc3BhY2UgZm9yIHJlZ2lzdGVyIDAgKHRoZSB3aG9sZQorKyAgICAgcGF0dGVybiksIGV2ZW4gdGhvdWdoIHdlIG5ldmVyIHVzZSBpdCwgc2luY2UgaXQgc2ltcGxpZmllcyB0aGUKKysgICAgIGFycmF5IGluZGV4aW5nLiAgV2Ugc2hvdWxkIGZpeCB0aGlzLiAgKi8KKysgIGlmIChidWZwLT5yZV9uc3ViKQorKyAgICB7CisrICAgICAgcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgcmVnZW5kID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIG9sZF9yZWdzdGFydCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBvbGRfcmVnZW5kID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIGJlc3RfcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgYmVzdF9yZWdlbmQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgcmVnX2luZm8gPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrICAgICAgcmVnX2R1bW15ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIHJlZ19pbmZvX2R1bW15ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKworKyAgICAgIGlmICghKHJlZ3N0YXJ0ICYmIHJlZ2VuZCAmJiBvbGRfcmVnc3RhcnQgJiYgb2xkX3JlZ2VuZCAmJiByZWdfaW5mbworKyAgICAgICAgICAgICYmIGJlc3RfcmVnc3RhcnQgJiYgYmVzdF9yZWdlbmQgJiYgcmVnX2R1bW15ICYmIHJlZ19pbmZvX2R1bW15KSkKKysgICAgICAgIHsKKysgICAgICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgICAgIHJldHVybiAtMjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogV2UgbXVzdCBpbml0aWFsaXplIGFsbCBvdXIgdmFyaWFibGVzIHRvIE5VTEwsIHNvIHRoYXQKKysgICAgICAgICBgRlJFRV9WQVJJQUJMRVMnIGRvZXNuJ3QgdHJ5IHRvIGZyZWUgdGhlbS4gICovCisrICAgICAgcmVnc3RhcnQgPSByZWdlbmQgPSBvbGRfcmVnc3RhcnQgPSBvbGRfcmVnZW5kID0gYmVzdF9yZWdzdGFydAorKyAgICAgICAgPSBiZXN0X3JlZ2VuZCA9IHJlZ19kdW1teSA9IE5VTEw7CisrICAgICAgcmVnX2luZm8gPSByZWdfaW5mb19kdW1teSA9IChQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqKSBOVUxMOworKyAgICB9CisrI2VuZGlmIC8qIE1BVENIX01BWV9BTExPQ0FURSAqLworKworKyAgLyogVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGlzIGJvZ3VzLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGlmIChwb3MgPCAwIHx8IHBvcyA+IGNzaXplMSArIGNzaXplMikKKysjZWxzZSAvKiBCWVRFICovCisrICBpZiAocG9zIDwgMCB8fCBwb3MgPiBzaXplMSArIHNpemUyKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBBbGxvY2F0ZSB3Y2hhcl90IGFycmF5IGZvciBzdHJpbmcxIGFuZCBzdHJpbmcyIGFuZAorKyAgICAgZmlsbCB0aGVtIHdpdGggY29udmVydGVkIHN0cmluZy4gICovCisrICBpZiAoc3RyaW5nMSA9PSBOVUxMICYmIHN0cmluZzIgPT0gTlVMTCkKKysgICAgeworKyAgICAgIC8qIFdlIG5lZWQgc2V0aW5nIHVwIGJ1ZmZlcnMgaGVyZS4gICovCisrCisrICAgICAgLyogV2UgbXVzdCBmcmVlIHdjcyBidWZmZXJzIGluIHRoaXMgZnVuY3Rpb24uICAqLworKyAgICAgIGNhbnRfZnJlZV93Y3NfYnVmID0gMDsKKysKKysgICAgICBpZiAoY3NpemUxICE9IDApCisrCXsKKysJICBzdHJpbmcxID0gUkVHRVhfVEFMTE9DIChjc2l6ZTEgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQxID0gUkVHRVhfVEFMTE9DIChjc2l6ZTEgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoY3NpemUxICsgMSwgY2hhcik7CisrCSAgaWYgKCFzdHJpbmcxIHx8ICFtYnNfb2Zmc2V0MSB8fCAhaXNfYmluYXJ5KQorKwkgICAgeworKwkgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgICAgICByZXR1cm4gLTI7CisrCSAgICB9CisrCX0KKysgICAgICBpZiAoY3NpemUyICE9IDApCisrCXsKKysJICBzdHJpbmcyID0gUkVHRVhfVEFMTE9DIChjc2l6ZTIgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQyID0gUkVHRVhfVEFMTE9DIChjc2l6ZTIgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoY3NpemUyICsgMSwgY2hhcik7CisrCSAgaWYgKCFzdHJpbmcyIHx8ICFtYnNfb2Zmc2V0MiB8fCAhaXNfYmluYXJ5KQorKwkgICAgeworKwkgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIEZSRUVfVkFSIChzdHJpbmcyKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsKKysJICAgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgICAgIHJldHVybiAtMjsKKysJICAgIH0KKysJICBzaXplMiA9IGNvbnZlcnRfbWJzX3RvX3djcyhzdHJpbmcyLCBjc3RyaW5nMiwgY3NpemUyLAorKwkJCQkgICAgIG1ic19vZmZzZXQyLCBpc19iaW5hcnkpOworKwkgIHN0cmluZzJbc2l6ZTJdID0gTCdcMCc7IC8qIGZvciBhIHNlbnRpbmVsICAqLworKwkgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwl9CisrICAgIH0KKysKKysgIC8qIFdlIG5lZWQgdG8gY2FzdCBwYXR0ZXJuIHRvICh3Y2hhcl90KiksIGJlY2F1c2Ugd2UgY2FzdGVkIHRoaXMgY29tcGlsZWQKKysgICAgIHBhdHRlcm4gdG8gKGNoYXIqKSBpbiByZWdleF9jb21waWxlLiAgKi8KKysgIHAgPSBwYXR0ZXJuID0gKENIQVJfVCopYnVmcC0+YnVmZmVyOworKyAgcGVuZCA9IChDSEFSX1QqKShidWZwLT5idWZmZXIgKyBidWZwLT51c2VkKTsKKysKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEluaXRpYWxpemUgc3ViZXhwcmVzc2lvbiB0ZXh0IHBvc2l0aW9ucyB0byAtMSB0byBtYXJrIG9uZXMgdGhhdCBubworKyAgICAgc3RhcnRfbWVtb3J5L3N0b3BfbWVtb3J5IGhhcyBiZWVuIHNlZW4gZm9yLiBBbHNvIGluaXRpYWxpemUgdGhlCisrICAgICByZWdpc3RlciBpbmZvcm1hdGlvbiBzdHJ1Y3QuICAqLworKyAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgbnVtX3JlZ3M7IG1jbnQrKykKKysgICAgeworKyAgICAgIHJlZ3N0YXJ0W21jbnRdID0gcmVnZW5kW21jbnRdCisrICAgICAgICA9IG9sZF9yZWdzdGFydFttY250XSA9IG9sZF9yZWdlbmRbbWNudF0gPSBSRUdfVU5TRVRfVkFMVUU7CisrCisrICAgICAgUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW21jbnRdKSA9IE1BVENIX05VTExfVU5TRVRfVkFMVUU7CisrICAgICAgSVNfQUNUSVZFIChyZWdfaW5mb1ttY250XSkgPSAwOworKyAgICAgIE1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1ttY250XSkgPSAwOworKyAgICAgIEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW21jbnRdKSA9IDA7CisrICAgIH0KKysKKysgIC8qIFdlIG1vdmUgYHN0cmluZzEnIGludG8gYHN0cmluZzInIGlmIHRoZSBsYXR0ZXIncyBlbXB0eSAtLSBidXQgbm90IGlmCisrICAgICBgc3RyaW5nMScgaXMgbnVsbC4gICovCisrICBpZiAoc2l6ZTIgPT0gMCAmJiBzdHJpbmcxICE9IE5VTEwpCisrICAgIHsKKysgICAgICBzdHJpbmcyID0gc3RyaW5nMTsKKysgICAgICBzaXplMiA9IHNpemUxOworKyAgICAgIHN0cmluZzEgPSAwOworKyAgICAgIHNpemUxID0gMDsKKysjaWZkZWYgV0NIQVIKKysgICAgICBtYnNfb2Zmc2V0MiA9IG1ic19vZmZzZXQxOworKyAgICAgIGNzaXplMiA9IGNzaXplMTsKKysgICAgICBtYnNfb2Zmc2V0MSA9IE5VTEw7CisrICAgICAgY3NpemUxID0gMDsKKysjZW5kaWYKKysgICAgfQorKyAgZW5kMSA9IHN0cmluZzEgKyBzaXplMTsKKysgIGVuZDIgPSBzdHJpbmcyICsgc2l6ZTI7CisrCisrICAvKiBDb21wdXRlIHdoZXJlIHRvIHN0b3AgbWF0Y2hpbmcsIHdpdGhpbiB0aGUgdHdvIHN0cmluZ3MuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgaWYgKHN0b3AgPD0gY3NpemUxKQorKyAgICB7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDEsIHN0b3ApOworKyAgICAgIGVuZF9tYXRjaF8xID0gc3RyaW5nMSArIG1jbnQ7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoc3RvcCA+IGNzaXplMSArIGNzaXplMikKKysJc3RvcCA9IGNzaXplMSArIGNzaXplMjsKKysgICAgICBlbmRfbWF0Y2hfMSA9IGVuZDE7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDIsIHN0b3AtY3NpemUxKTsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzIgKyBtY250OworKyAgICB9CisrICBpZiAobWNudCA8IDApCisrICAgIHsgLyogY291bnRfbWJzX2xlbmd0aCByZXR1cm4gZXJyb3IuICAqLworKyAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbHNlCisrICBpZiAoc3RvcCA8PSBzaXplMSkKKysgICAgeworKyAgICAgIGVuZF9tYXRjaF8xID0gc3RyaW5nMSArIHN0b3A7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBlbmRfbWF0Y2hfMSA9IGVuZDE7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyICsgc3RvcCAtIHNpemUxOworKyAgICB9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBgcCcgc2NhbnMgdGhyb3VnaCB0aGUgcGF0dGVybiBhcyBgZCcgc2NhbnMgdGhyb3VnaCB0aGUgZGF0YS4KKysgICAgIGBkZW5kJyBpcyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBzdHJpbmcgdGhhdCBgZCcgcG9pbnRzIHdpdGhpbi4gIGBkJworKyAgICAgaXMgYWR2YW5jZWQgaW50byB0aGUgZm9sbG93aW5nIGlucHV0IHN0cmluZyB3aGVuZXZlciBuZWNlc3NhcnksIGJ1dAorKyAgICAgdGhpcyBoYXBwZW5zIGJlZm9yZSBmZXRjaGluZzsgdGhlcmVmb3JlLCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorKyAgICAgbG9vcCwgYGQnIGNhbiBiZSBwb2ludGluZyBhdCB0aGUgZW5kIG9mIGEgc3RyaW5nLCBidXQgaXQgY2Fubm90CisrICAgICBlcXVhbCBgc3RyaW5nMicuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgaWYgKHNpemUxID4gMCAmJiBwb3MgPD0gY3NpemUxKQorKyAgICB7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDEsIHBvcyk7CisrICAgICAgZCA9IHN0cmluZzEgKyBtY250OworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDIsIHBvcy1jc2l6ZTEpOworKyAgICAgIGQgPSBzdHJpbmcyICsgbWNudDsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrICAgIH0KKysKKysgIGlmIChtY250IDwgMCkKKysgICAgeyAvKiBjb3VudF9tYnNfbGVuZ3RoIHJldHVybiBlcnJvci4gICovCisrICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrI2Vsc2UKKysgIGlmIChzaXplMSA+IDAgJiYgcG9zIDw9IHNpemUxKQorKyAgICB7CisrICAgICAgZCA9IHN0cmluZzEgKyBwb3M7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8xOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBkID0gc3RyaW5nMiArIHBvcyAtIHNpemUxOworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysgICAgfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgREVCVUdfUFJJTlQxICgiVGhlIGNvbXBpbGVkIHBhdHRlcm4gaXM6XG4iKTsKKysgIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHAsIHBlbmQpOworKyAgREVCVUdfUFJJTlQxICgiVGhlIHN0cmluZyB0byBtYXRjaCBpczogYCIpOworKyAgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyAoZCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyKTsKKysgIERFQlVHX1BSSU5UMSAoIidcbiIpOworKworKyAgLyogVGhpcyBsb29wcyBvdmVyIHBhdHRlcm4gY29tbWFuZHMuICBJdCBleGl0cyBieSByZXR1cm5pbmcgZnJvbSB0aGUKKysgICAgIGZ1bmN0aW9uIGlmIHRoZSBtYXRjaCBpcyBjb21wbGV0ZSwgb3IgaXQgZHJvcHMgdGhyb3VnaCBpZiB0aGUgbWF0Y2gKKysgICAgIGZhaWxzIGF0IHRoaXMgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGlucHV0IGRhdGEuICAqLworKyAgZm9yICg7OykKKysgICAgeworKyNpZmRlZiBfTElCQworKyAgICAgIERFQlVHX1BSSU5UMiAoIlxuJXA6ICIsIHApOworKyNlbHNlCisrICAgICAgREVCVUdfUFJJTlQyICgiXG4weCV4OiAiLCBwKTsKKysjZW5kaWYKKysKKysgICAgICBpZiAocCA9PSBwZW5kKQorKwl7IC8qIEVuZCBvZiBwYXR0ZXJuIG1lYW5zIHdlIG1pZ2h0IGhhdmUgc3VjY2VlZGVkLiAgKi8KKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiZW5kIG9mIHBhdHRlcm4gLi4uICIpOworKworKwkgIC8qIElmIHdlIGhhdmVuJ3QgbWF0Y2hlZCB0aGUgZW50aXJlIHN0cmluZywgYW5kIHdlIHdhbnQgdGhlCisrICAgICAgICAgICAgIGxvbmdlc3QgbWF0Y2gsIHRyeSBiYWNrdHJhY2tpbmcuICAqLworKyAgICAgICAgICBpZiAoZCAhPSBlbmRfbWF0Y2hfMikKKysJICAgIHsKKysJICAgICAgLyogMSBpZiB0aGlzIG1hdGNoIGVuZHMgaW4gdGhlIHNhbWUgc3RyaW5nIChzdHJpbmcxIG9yIHN0cmluZzIpCisrCQkgYXMgdGhlIGJlc3QgcHJldmlvdXMgbWF0Y2guICAqLworKwkgICAgICBib29sZWFuIHNhbWVfc3RyX3AgPSAoRklSU1RfU1RSSU5HX1AgKG1hdGNoX2VuZCkKKysJCQkJICAgID09IE1BVENISU5HX0lOX0ZJUlNUX1NUUklORyk7CisrCSAgICAgIC8qIDEgaWYgdGhpcyBtYXRjaCBpcyB0aGUgYmVzdCBzZWVuIHNvIGZhci4gICovCisrCSAgICAgIGJvb2xlYW4gYmVzdF9tYXRjaF9wOworKworKwkgICAgICAvKiBBSVggY29tcGlsZXIgZ290IGNvbmZ1c2VkIHdoZW4gdGhpcyB3YXMgY29tYmluZWQKKysJCSB3aXRoIHRoZSBwcmV2aW91cyBkZWNsYXJhdGlvbi4gICovCisrCSAgICAgIGlmIChzYW1lX3N0cl9wKQorKwkJYmVzdF9tYXRjaF9wID0gZCA+IG1hdGNoX2VuZDsKKysJICAgICAgZWxzZQorKwkJYmVzdF9tYXRjaF9wID0gIU1BVENISU5HX0lOX0ZJUlNUX1NUUklORzsKKysKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoImJhY2t0cmFja2luZy5cbiIpOworKworKyAgICAgICAgICAgICAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpKQorKyAgICAgICAgICAgICAgICB7IC8qIE1vcmUgZmFpbHVyZSBwb2ludHMgdG8gdHJ5LiAgKi8KKysKKysgICAgICAgICAgICAgICAgICAvKiBJZiBleGNlZWRzIGJlc3QgbWF0Y2ggc28gZmFyLCBzYXZlIGl0LiAgKi8KKysgICAgICAgICAgICAgICAgICBpZiAoIWJlc3RfcmVnc19zZXQgfHwgYmVzdF9tYXRjaF9wKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICBiZXN0X3JlZ3Nfc2V0ID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfZW5kID0gZDsKKysKKysgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiXG5TQVZJTkcgbWF0Y2ggYXMgYmVzdCBzbyBmYXIuXG4iKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgbnVtX3JlZ3M7IG1jbnQrKykKKysgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X3JlZ3N0YXJ0W21jbnRdID0gcmVnc3RhcnRbbWNudF07CisrICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X3JlZ2VuZFttY250XSA9IHJlZ2VuZFttY250XTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBJZiBubyBmYWlsdXJlIHBvaW50cywgZG9uJ3QgcmVzdG9yZSBnYXJiYWdlLiAgQW5kIGlmCisrICAgICAgICAgICAgICAgICBsYXN0IG1hdGNoIGlzIHJlYWwgYmVzdCBtYXRjaCwgZG9uJ3QgcmVzdG9yZSBzZWNvbmQKKysgICAgICAgICAgICAgICAgIGJlc3Qgb25lLiAqLworKyAgICAgICAgICAgICAgZWxzZSBpZiAoYmVzdF9yZWdzX3NldCAmJiAhYmVzdF9tYXRjaF9wKQorKyAgICAgICAgICAgICAgICB7CisrICAJICAgICAgICByZXN0b3JlX2Jlc3RfcmVnczoKKysgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGJlc3QgbWF0Y2guICBJdCBtYXkgaGFwcGVuIHRoYXQgYGRlbmQgPT0KKysgICAgICAgICAgICAgICAgICAgICBlbmRfbWF0Y2hfMScgd2hpbGUgdGhlIHJlc3RvcmVkIGQgaXMgaW4gc3RyaW5nMi4KKysgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gYHguKnkuKnonIGFnYWluc3QgdGhlCisrICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyBgeC0nIGFuZCBgeS16LScsIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUKKysgICAgICAgICAgICAgICAgICAgICBub3QgY29uc2VjdXRpdmUgaW4gbWVtb3J5LiAgKi8KKysgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCJSZXN0b3JpbmcgYmVzdCByZWdpc3RlcnMuXG4iKTsKKysKKysgICAgICAgICAgICAgICAgICBkID0gbWF0Y2hfZW5kOworKyAgICAgICAgICAgICAgICAgIGRlbmQgPSAoKGQgPj0gc3RyaW5nMSAmJiBkIDw9IGVuZDEpCisrCQkgICAgICAgICAgID8gZW5kX21hdGNoXzEgOiBlbmRfbWF0Y2hfMik7CisrCisrCQkgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IG51bV9yZWdzOyBtY250KyspCisrCQkgICAgeworKwkJICAgICAgcmVnc3RhcnRbbWNudF0gPSBiZXN0X3JlZ3N0YXJ0W21jbnRdOworKwkJICAgICAgcmVnZW5kW21jbnRdID0gYmVzdF9yZWdlbmRbbWNudF07CisrCQkgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfSAvKiBkICE9IGVuZF9tYXRjaF8yICovCisrCisrCXN1Y2NlZWRfbGFiZWw6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkFjY2VwdGluZyBtYXRjaC5cbiIpOworKyAgICAgICAgICAvKiBJZiBjYWxsZXIgd2FudHMgcmVnaXN0ZXIgY29udGVudHMgZGF0YSBiYWNrLCBkbyBpdC4gICovCisrICAgICAgICAgIGlmIChyZWdzICYmICFidWZwLT5ub19zdWIpCisrCSAgICB7CisrCSAgICAgIC8qIEhhdmUgdGhlIHJlZ2lzdGVyIGRhdGEgYXJyYXlzIGJlZW4gYWxsb2NhdGVkPyAgKi8KKysgICAgICAgICAgICAgIGlmIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1VOQUxMT0NBVEVEKQorKyAgICAgICAgICAgICAgICB7IC8qIE5vLiAgU28gYWxsb2NhdGUgdGhlbSB3aXRoIG1hbGxvYy4gIFdlIG5lZWQgb25lCisrICAgICAgICAgICAgICAgICAgICAgZXh0cmEgZWxlbWVudCBiZXlvbmQgYG51bV9yZWdzJyBmb3IgdGhlIGAtMScgbWFya2VyCisrICAgICAgICAgICAgICAgICAgICAgR05VIGNvZGUgdXNlcy4gICovCisrICAgICAgICAgICAgICAgICAgcmVncy0+bnVtX3JlZ3MgPSBNQVggKFJFX05SRUdTLCBudW1fcmVncyArIDEpOworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0ID0gVEFMTE9DIChyZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPmVuZCA9IFRBTExPQyAocmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICBpZiAocmVncy0+c3RhcnQgPT0gTlVMTCB8fCByZWdzLT5lbmQgPT0gTlVMTCkKKysJCSAgICB7CisrCQkgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysJCSAgICAgIHJldHVybiAtMjsKKysJCSAgICB9CisrICAgICAgICAgICAgICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1JFQUxMT0NBVEU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfUkVBTExPQ0FURSkKKysgICAgICAgICAgICAgICAgeyAvKiBZZXMuICBJZiB3ZSBuZWVkIG1vcmUgZWxlbWVudHMgdGhhbiB3ZXJlIGFscmVhZHkKKysgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQsIHJlYWxsb2NhdGUgdGhlbS4gIElmIHdlIG5lZWQgZmV3ZXIsIGp1c3QKKysgICAgICAgICAgICAgICAgICAgICBsZWF2ZSBpdCBhbG9uZS4gICovCisrICAgICAgICAgICAgICAgICAgaWYgKHJlZ3MtPm51bV9yZWdzIDwgbnVtX3JlZ3MgKyAxKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICByZWdzLT5udW1fcmVncyA9IG51bV9yZWdzICsgMTsKKysgICAgICAgICAgICAgICAgICAgICAgUkVUQUxMT0MgKHJlZ3MtPnN0YXJ0LCByZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgICAgICBSRVRBTExPQyAocmVncy0+ZW5kLCByZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgICAgICBpZiAocmVncy0+c3RhcnQgPT0gTlVMTCB8fCByZWdzLT5lbmQgPT0gTlVMTCkKKysJCQl7CisrCQkJICBGUkVFX1ZBUklBQkxFUyAoKTsKKysJCQkgIHJldHVybiAtMjsKKysJCQl9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogVGhlc2UgYnJhY2VzIGZlbmQgb2ZmIGEgImVtcHR5IGJvZHkgaW4gYW4gZWxzZS1zdGF0ZW1lbnQiCisrCQkgICAgIHdhcm5pbmcgdW5kZXIgR0NDIHdoZW4gYXNzZXJ0IGV4cGFuZHMgdG8gbm90aGluZy4gICovCisrCQkgIGFzc2VydCAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19GSVhFRCk7CisrCQl9CisrCisrICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRoZSBwb2ludGVyIGRhdGEgaW4gYHJlZ3N0YXJ0JyBhbmQgYHJlZ2VuZCcgdG8KKysgICAgICAgICAgICAgICAgIGluZGljZXMuICBSZWdpc3RlciB6ZXJvIGhhcyB0byBiZSBzZXQgZGlmZmVyZW50bHksCisrICAgICAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlbid0IGtlcHQgdHJhY2sgb2YgYW55IGluZm8gZm9yIGl0LiAgKi8KKysgICAgICAgICAgICAgIGlmIChyZWdzLT5udW1fcmVncyA+IDApCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICByZWdzLT5zdGFydFswXSA9IHBvczsKKysjaWZkZWYgV0NIQVIKKysJCSAgaWYgKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORykKKysJCSAgICByZWdzLT5lbmRbMF0gPSBtYnNfb2Zmc2V0MSAhPSBOVUxMID8KKysJCQkJCW1ic19vZmZzZXQxW2Qtc3RyaW5nMV0gOiAwOworKwkJICBlbHNlCisrCQkgICAgcmVncy0+ZW5kWzBdID0gY3NpemUxICsgKG1ic19vZmZzZXQyICE9IE5VTEwgPworKwkJCQkJICAgICBtYnNfb2Zmc2V0MltkLXN0cmluZzJdIDogMCk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICByZWdzLT5lbmRbMF0gPSAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HCisrCQkJCSAgPyAoKHJlZ29mZl90KSAoZCAtIHN0cmluZzEpKQorKwkJCSAgICAgICAgICA6ICgocmVnb2ZmX3QpIChkIC0gc3RyaW5nMiArIHNpemUxKSkpOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBHbyB0aHJvdWdoIHRoZSBmaXJzdCBgbWluIChudW1fcmVncywgcmVncy0+bnVtX3JlZ3MpJworKyAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzLCBzaW5jZSB0aGF0IGlzIGFsbCB3ZSBpbml0aWFsaXplZC4gICovCisrCSAgICAgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IE1JTiAobnVtX3JlZ3MsIHJlZ3MtPm51bV9yZWdzKTsKKysJCSAgIG1jbnQrKykKKysJCXsKKysgICAgICAgICAgICAgICAgICBpZiAoUkVHX1VOU0VUIChyZWdzdGFydFttY250XSkgfHwgUkVHX1VOU0VUIChyZWdlbmRbbWNudF0pKQorKyAgICAgICAgICAgICAgICAgICAgcmVncy0+c3RhcnRbbWNudF0gPSByZWdzLT5lbmRbbWNudF0gPSAtMTsKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICB7CisrCQkgICAgICByZWdzLT5zdGFydFttY250XQorKwkJCT0gKHJlZ29mZl90KSBQT0lOVEVSX1RPX09GRlNFVCAocmVnc3RhcnRbbWNudF0pOworKyAgICAgICAgICAgICAgICAgICAgICByZWdzLT5lbmRbbWNudF0KKysJCQk9IChyZWdvZmZfdCkgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ2VuZFttY250XSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrCQl9CisrCisrICAgICAgICAgICAgICAvKiBJZiB0aGUgcmVncyBzdHJ1Y3R1cmUgd2UgcmV0dXJuIGhhcyBtb3JlIGVsZW1lbnRzIHRoYW4KKysgICAgICAgICAgICAgICAgIHdlcmUgaW4gdGhlIHBhdHRlcm4sIHNldCB0aGUgZXh0cmEgZWxlbWVudHMgdG8gLTEuICBJZgorKyAgICAgICAgICAgICAgICAgd2UgKHJlKWFsbG9jYXRlZCB0aGUgcmVnaXN0ZXJzLCB0aGlzIGlzIHRoZSBjYXNlLAorKyAgICAgICAgICAgICAgICAgYmVjYXVzZSB3ZSBhbHdheXMgYWxsb2NhdGUgZW5vdWdoIHRvIGhhdmUgYXQgbGVhc3Qgb25lCisrICAgICAgICAgICAgICAgICAtMSBhdCB0aGUgZW5kLiAgKi8KKysgICAgICAgICAgICAgIGZvciAobWNudCA9IG51bV9yZWdzOyAodW5zaWduZWQpIG1jbnQgPCByZWdzLT5udW1fcmVnczsgbWNudCsrKQorKyAgICAgICAgICAgICAgICByZWdzLT5zdGFydFttY250XSA9IHJlZ3MtPmVuZFttY250XSA9IC0xOworKwkgICAgfSAvKiByZWdzICYmICFidWZwLT5ub19zdWIgKi8KKysKKysgICAgICAgICAgREVCVUdfUFJJTlQ0ICgiJXUgZmFpbHVyZSBwb2ludHMgcHVzaGVkLCAldSBwb3BwZWQgKCV1IHJlbWFpbikuXG4iLAorKyAgICAgICAgICAgICAgICAgICAgICAgIG5mYWlsdXJlX3BvaW50c19wdXNoZWQsIG5mYWlsdXJlX3BvaW50c19wb3BwZWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCAtIG5mYWlsdXJlX3BvaW50c19wb3BwZWQpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCIldSByZWdpc3RlcnMgcHVzaGVkLlxuIiwgbnVtX3JlZ3NfcHVzaGVkKTsKKysKKysjaWZkZWYgV0NIQVIKKysJICBpZiAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HKQorKwkgICAgbWNudCA9IG1ic19vZmZzZXQxICE9IE5VTEwgPyBtYnNfb2Zmc2V0MVtkLXN0cmluZzFdIDogMDsKKysJICBlbHNlCisrCSAgICBtY250ID0gKG1ic19vZmZzZXQyICE9IE5VTEwgPyBtYnNfb2Zmc2V0MltkLXN0cmluZzJdIDogMCkgKworKwkJCWNzaXplMTsKKysgICAgICAgICAgbWNudCAtPSBwb3M7CisrI2Vsc2UKKysgICAgICAgICAgbWNudCA9IGQgLSBwb3MgLSAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HCisrCQkJICAgID8gc3RyaW5nMQorKwkJCSAgICA6IHN0cmluZzIgLSBzaXplMSk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIlJldHVybmluZyAlZCBmcm9tIHJlX21hdGNoXzIuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgICAgIHJldHVybiBtY250OworKyAgICAgICAgfQorKworKyAgICAgIC8qIE90aGVyd2lzZSBtYXRjaCBuZXh0IHBhdHRlcm4gY29tbWFuZC4gICovCisrICAgICAgc3dpdGNoIChTV0lUQ0hfRU5VTV9DQVNUICgocmVfb3Bjb2RlX3QpICpwKyspKQorKwl7CisrICAgICAgICAvKiBJZ25vcmUgdGhlc2UuICBVc2VkIHRvIGlnbm9yZSB0aGUgbiBvZiBzdWNjZWVkX24ncyB3aGljaAorKyAgICAgICAgICAgY3VycmVudGx5IGhhdmUgbiA9PSAwLiAgKi8KKysgICAgICAgIGNhc2Ugbm9fb3A6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub19vcC5cbiIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzdWNjZWVkOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgc3VjY2VlZC5cbiIpOworKwkgIGdvdG8gc3VjY2VlZF9sYWJlbDsKKysKKysgICAgICAgIC8qIE1hdGNoIHRoZSBuZXh0IG4gcGF0dGVybiBjaGFyYWN0ZXJzIGV4YWN0bHkuICBUaGUgZm9sbG93aW5nCisrICAgICAgICAgICBieXRlIGluIHRoZSBwYXR0ZXJuIGRlZmluZXMgbiwgYW5kIHRoZSBuIGJ5dGVzIGFmdGVyIHRoYXQKKysgICAgICAgICAgIGFyZSB0aGUgY2hhcmFjdGVycyB0byBtYXRjaC4gICovCisrCWNhc2UgZXhhY3RuOgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKwljYXNlIGV4YWN0bl9iaW46CisrI2VuZGlmCisrCSAgbWNudCA9ICpwKys7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBleGFjdG4gJWQuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgLyogVGhpcyBpcyB3cml0dGVuIG91dCBhcyBhbiBpZi1lbHNlIHNvIHdlIGRvbid0IHdhc3RlIHRpbWUKKysgICAgICAgICAgICAgdGVzdGluZyBgdHJhbnNsYXRlJyBpbnNpZGUgdGhlIGxvb3AuICAqLworKyAgICAgICAgICBpZiAodHJhbnNsYXRlKQorKwkgICAgeworKwkgICAgICBkbworKwkJeworKwkJICBQUkVGRVRDSCAoKTsKKysjaWZkZWYgV0NIQVIKKysJCSAgaWYgKCpkIDw9IDB4ZmYpCisrCQkgICAgeworKwkJICAgICAgaWYgKChVQ0hBUl9UKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpICpkKytdCisrCQkJICAhPSAoVUNIQVJfVCkgKnArKykKKysJCQlnb3RvIGZhaWw7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgaWYgKCpkKysgIT0gKENIQVJfVCkgKnArKykKKysJCQlnb3RvIGZhaWw7CisrCQkgICAgfQorKyNlbHNlCisrCQkgIGlmICgoVUNIQVJfVCkgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAqZCsrXQorKwkJICAgICAgIT0gKFVDSEFSX1QpICpwKyspCisrICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCQl9CisrCSAgICAgIHdoaWxlICgtLW1jbnQpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgZG8KKysJCXsKKysJCSAgUFJFRkVUQ0ggKCk7CisrCQkgIGlmICgqZCsrICE9IChDSEFSX1QpICpwKyspIGdvdG8gZmFpbDsKKysJCX0KKysJICAgICAgd2hpbGUgKC0tbWNudCk7CisrCSAgICB9CisrCSAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBNYXRjaCBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBwb3NzaWJseSBhIG5ld2xpbmUgb3IgYSBudWxsLiAgKi8KKysJY2FzZSBhbnljaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYW55Y2hhci5cbiIpOworKworKyAgICAgICAgICBQUkVGRVRDSCAoKTsKKysKKysgICAgICAgICAgaWYgKCghKGJ1ZnAtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSAmJiBUUkFOU0xBVEUgKCpkKSA9PSAnXG4nKQorKyAgICAgICAgICAgICAgfHwgKGJ1ZnAtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCAmJiBUUkFOU0xBVEUgKCpkKSA9PSAnXDAwMCcpKQorKwkgICAgZ290byBmYWlsOworKworKyAgICAgICAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCIgIE1hdGNoZWQgYCVsZCcuXG4iLCAobG9uZyBpbnQpICpkKTsKKysgICAgICAgICAgZCsrOworKwkgIGJyZWFrOworKworKworKwljYXNlIGNoYXJzZXQ6CisrCWNhc2UgY2hhcnNldF9ub3Q6CisrCSAgeworKwkgICAgcmVnaXN0ZXIgVUNIQVJfVCBjOworKyNpZmRlZiBXQ0hBUgorKwkgICAgdW5zaWduZWQgaW50IGksIGNoYXJfY2xhc3NfbGVuZ3RoLCBjb2xsX3N5bWJvbF9sZW5ndGgsCisrICAgICAgICAgICAgICBlcXVpdl9jbGFzc19sZW5ndGgsIHJhbmdlc19sZW5ndGgsIGNoYXJzX2xlbmd0aCwgbGVuZ3RoOworKwkgICAgQ0hBUl9UICp3b3JrcCwgKndvcmtwMiwgKmNoYXJzZXRfdG9wOworKyNkZWZpbmUgV09SS19CVUZGRVJfU0laRSAxMjgKKysgICAgICAgICAgICBDSEFSX1Qgc3RyX2J1ZltXT1JLX0JVRkZFUl9TSVpFXTsKKysjIGlmZGVmIF9MSUJDCisrCSAgICB1aW50MzJfdCBucnVsZXM7CisrIyBlbmRpZiAvKiBfTElCQyAqLworKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkgICAgYm9vbGVhbiBuZWdhdGUgPSAocmVfb3Bjb2RlX3QpICoocCAtIDEpID09IGNoYXJzZXRfbm90OworKworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBjaGFyc2V0JXMuXG4iLCBuZWdhdGUgPyAiX25vdCIgOiAiIik7CisrCSAgICBQUkVGRVRDSCAoKTsKKysJICAgIGMgPSBUUkFOU0xBVEUgKCpkKTsgLyogVGhlIGNoYXJhY3RlciB0byBtYXRjaC4gICovCisrI2lmZGVmIFdDSEFSCisrIyBpZmRlZiBfTElCQworKwkgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmIC8qIF9MSUJDICovCisrCSAgICBjaGFyc2V0X3RvcCA9IHAgLSAxOworKwkgICAgY2hhcl9jbGFzc19sZW5ndGggPSAqcCsrOworKwkgICAgY29sbF9zeW1ib2xfbGVuZ3RoID0gKnArKzsKKysJICAgIGVxdWl2X2NsYXNzX2xlbmd0aCA9ICpwKys7CisrCSAgICByYW5nZXNfbGVuZ3RoID0gKnArKzsKKysJICAgIGNoYXJzX2xlbmd0aCA9ICpwKys7CisrCSAgICAvKiBwIHBvaW50cyBjaGFyc2V0WzZdLCBzbyB0aGUgYWRkcmVzcyBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbgorKwkgICAgICAgKGNoYXJzZXRbbCttK24rMm8raytwJ10pIGVxdWFscyBwW2wrbStuKzIqbytwJ10sCisrCSAgICAgICB3aGVyZSBsPWxlbmd0aCBvZiBjaGFyX2NsYXNzZXMsIG09bGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2wsCisrCSAgICAgICBuPWVxdWl2YWxlbmNlX2NsYXNzLCBvPWxlbmd0aCBvZiBjaGFyX3JhbmdlLAorKwkgICAgICAgcCc9bGVuZ3RoIG9mIGNoYXJhY3Rlci4gICovCisrCSAgICB3b3JrcCA9IHA7CisrCSAgICAvKiBVcGRhdGUgcCB0byBpbmRpY2F0ZSB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gICovCisrCSAgICBwICs9IGNoYXJfY2xhc3NfbGVuZ3RoICsgY29sbF9zeW1ib2xfbGVuZ3RoKyBlcXVpdl9jbGFzc19sZW5ndGggKworKyAgICAgICAgICAgICAgMipyYW5nZXNfbGVuZ3RoICsgY2hhcnNfbGVuZ3RoOworKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcl9jbGFzcz8gICovCisrCSAgICBmb3IgKGkgPSAwOyBpIDwgY2hhcl9jbGFzc19sZW5ndGggOyBpICs9IENIQVJfQ0xBU1NfU0laRSkKKysJICAgICAgeworKwkJd2N0eXBlX3Qgd2N0eXBlOworKwkJdWludHB0cl90IGFsaWduZWRwID0gKCh1aW50cHRyX3Qpd29ya3AKKysJCQkJICAgICAgKyBfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKQorKwkJICAJCSAgICAgICYgfih1aW50cHRyX3QpKF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpOworKwkJd2N0eXBlID0gKigod2N0eXBlX3QqKWFsaWduZWRwKTsKKysJCXdvcmtwICs9IENIQVJfQ0xBU1NfU0laRTsKKysjIGlmZGVmIF9MSUJDCisrCQlpZiAoX19pc3djdHlwZSgod2ludF90KWMsIHdjdHlwZSkpCisrCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysjIGVsc2UKKysJCWlmIChpc3djdHlwZSgod2ludF90KWMsIHdjdHlwZSkpCisrCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysjIGVuZGlmCisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNvbGxhdGluZ19zeW1ib2w/ICAqLworKyMgaWZkZWYgX0xJQkMKKysJICAgIGlmIChucnVsZXMgIT0gMCkKKysJICAgICAgeworKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBjb2xsX3N5bWJvbF9sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7CisrCQkgICAgIHdvcmtwKyspCisrCQkgIHsKKysJCSAgICBpbnQzMl90ICp3ZXh0cmE7CisrCQkgICAgd2V4dHJhID0gKGludDMyX3QqKShleHRyYSArICp3b3JrcCsrKTsKKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgKndleHRyYTsgKytpKQorKwkJICAgICAgaWYgKFRSQU5TTEFURShkW2ldKSAhPSB3ZXh0cmFbMSArIGldKQorKwkJCWJyZWFrOworKworKwkJICAgIGlmIChpID09ICp3ZXh0cmEpCisrCQkgICAgICB7CisrCQkJLyogVXBkYXRlIGQsIGhvd2V2ZXIgZCB3aWxsIGJlIGluY3JlbWVudGVkIGF0CisrCQkJICAgY2hhcl9zZXRfbWF0Y2hlZDosIHdlIGRlY3JlbWVudCBkIGhlcmUuICAqLworKwkJCWQgKz0gaSAtIDE7CisrCQkJZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICAgICAgfQorKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UgLyogKG5ydWxlcyA9PSAwKSAqLworKyMgZW5kaWYKKysJICAgICAgLyogSWYgd2UgY2FuJ3QgbG9vayB1cCBjb2xsYXRpb24gZGF0YSwgd2UgdXNlIHdjc2NvbGwKKysJCSBpbnN0ZWFkLiAgKi8KKysJICAgICAgeworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGNvbGxfc3ltYm9sX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDspCisrCQkgIHsKKysJCSAgICBjb25zdCBDSEFSX1QgKmJhY2t1cF9kID0gZCwgKmJhY2t1cF9kZW5kID0gZGVuZDsKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgbGVuZ3RoID0gX193Y3NsZW4gKHdvcmtwKTsKKysjIGVsc2UKKysJCSAgICBsZW5ndGggPSB3Y3NsZW4gKHdvcmtwKTsKKysjIGVuZGlmCisrCisrCQkgICAgLyogSWYgd2NzY29sbCh0aGUgY29sbGF0aW5nIHN5bWJvbCwgd2hvbGUgc3RyaW5nKSA+IDAsCisrCQkgICAgICAgYW55IHN1YnN0cmluZyBvZiB0aGUgc3RyaW5nIG5ldmVyIG1hdGNoIHdpdGggdGhlCisrCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbC4gICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIGlmIChfX3djc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbHNlCisrCQkgICAgaWYgKHdjc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbmRpZgorKwkJICAgICAgeworKwkJCXdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkJY29udGludWU7CisrCQkgICAgICB9CisrCisrCQkgICAgLyogRmlyc3QsIHdlIGNvbXBhcmUgdGhlIGNvbGxhdGluZyBzeW1ib2wgd2l0aAorKwkJICAgICAgIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZy4KKysJCSAgICAgICBJZiBpdCBkb24ndCBtYXRjaCwgd2UgYWRkIHRoZSBuZXh0IGNoYXJhY3RlciB0bworKwkJICAgICAgIHRoZSBjb21wYXJlIGJ1ZmZlciBpbiB0dXJuLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwIDsgaSA8IFdPUktfQlVGRkVSX1NJWkUtMSA7IGkrKywgZCsrKQorKwkJICAgICAgeworKwkJCWludCBtYXRjaDsKKysJCQlpZiAoZCA9PSBkZW5kKQorKwkJCSAgeworKwkJCSAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQkgICAgICBicmVhazsKKysJCQkgICAgZCA9IHN0cmluZzI7CisrCQkJICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCQkgIH0KKysKKysJCQkvKiBhZGQgbmV4dCBjaGFyYWN0ZXIgdG8gdGhlIGNvbXBhcmUgYnVmZmVyLiAgKi8KKysJCQlzdHJfYnVmW2ldID0gVFJBTlNMQVRFKCpkKTsKKysJCQlzdHJfYnVmW2krMV0gPSAnXDAnOworKworKyMgaWZkZWYgX0xJQkMKKysJCQltYXRjaCA9IF9fd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZWxzZQorKwkJCW1hdGNoID0gd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZW5kaWYKKysJCQlpZiAobWF0Y2ggPT0gMCkKKysJCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysKKysJCQlpZiAobWF0Y2ggPCAwKQorKwkJCSAgLyogKHN0cl9idWYgPiB3b3JrcCkgaW5kaWNhdGUgKHN0cl9idWYgKyBYID4gd29ya3ApLAorKwkJCSAgICAgYmVjYXVzZSBmb3IgYWxsIFggKHN0cl9idWYgKyBYID4gc3RyX2J1ZikuCisrCQkJICAgICBTbyB3ZSBkb24ndCBuZWVkIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkJICBicmVhazsKKysKKysJCQkvKiBPdGhlcndpc2Uoc3RyX2J1ZiA8IHdvcmtwKSwKKysJCQkgICAoc3RyX2J1ZituZXh0X2NoYXJhY3RlcikgbWF5IGVxdWFscyAod29ya3ApLgorKwkJCSAgIFNvIHdlIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkgICAgICB9CisrCQkgICAgLyogbm90IG1hdGNoZWQgKi8KKysJCSAgICBkID0gYmFja3VwX2Q7CisrCQkgICAgZGVuZCA9IGJhY2t1cF9kZW5kOworKwkJICAgIHdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkgIH0KKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGVxdWl2YWxlbmNlX2NsYXNzPyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCSAgICBpZiAobnJ1bGVzICE9IDApCisrCSAgICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpiYWNrdXBfZCA9IGQsICpiYWNrdXBfZGVuZCA9IGRlbmQ7CisrCQkvKiBUcnkgdG8gbWF0Y2ggdGhlIGVxdWl2YWxlbmNlIGNsYXNzIGFnYWluc3QKKysJCSAgIHRob3NlIGtub3duIHRvIHRoZSBjb2xsYXRlIGltcGxlbWVudGF0aW9uLiAgKi8KKysJCWNvbnN0IGludDMyX3QgKnRhYmxlOworKwkJY29uc3QgaW50MzJfdCAqd2VpZ2h0czsKKysJCWNvbnN0IGludDMyX3QgKmV4dHJhOworKwkJY29uc3QgaW50MzJfdCAqaW5kaXJlY3Q7CisrCQlpbnQzMl90IGlkeCwgaWR4MjsKKysJCXdpbnRfdCAqY3A7CisrCQlzaXplX3QgbGVuOworKworKwkJdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVXQyk7CisrCQl3ZWlnaHRzID0gKGNvbnN0IHdpbnRfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfV0VJR0hUV0MpOworKwkJZXh0cmEgPSAoY29uc3Qgd2ludF90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9FWFRSQVdDKTsKKysJCWluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0lORElSRUNUV0MpOworKworKwkJLyogV3JpdGUgMSBjb2xsYXRpbmcgZWxlbWVudCB0byBzdHJfYnVmLCBhbmQKKysJCSAgIGdldCBpdHMgaW5kZXguICAqLworKwkJaWR4MiA9IDA7CisrCisrCQlmb3IgKGkgPSAwIDsgaWR4MiA9PSAwICYmIGkgPCBXT1JLX0JVRkZFUl9TSVpFIC0gMTsgaSsrKQorKwkJICB7CisrCQkgICAgY3AgPSAod2ludF90KilzdHJfYnVmOworKwkJICAgIGlmIChkID09IGRlbmQpCisrCQkgICAgICB7CisrCQkJaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJICBicmVhazsKKysJCQlkID0gc3RyaW5nMjsKKysJCQlkZW5kID0gZW5kX21hdGNoXzI7CisrCQkgICAgICB9CisrCQkgICAgc3RyX2J1ZltpXSA9IFRSQU5TTEFURSgqKGQraSkpOworKwkJICAgIHN0cl9idWZbaSsxXSA9ICdcMCc7IC8qIHNlbnRpbmVsICovCisrCQkgICAgaWR4MiA9IEZJTkRJRFggKHRhYmxlLCBpbmRpcmVjdCwgZXh0cmEsICZjcCwgMSk7CisrCQkgIH0KKysKKysJCS8qIFVwZGF0ZSBkLCBob3dldmVyIGQgd2lsbCBiZSBpbmNyZW1lbnRlZCBhdAorKwkJICAgY2hhcl9zZXRfbWF0Y2hlZDosIHdlIGRlY3JlbWVudCBkIGhlcmUuICAqLworKwkJZCA9IGJhY2t1cF9kICsgKCh3Y2hhcl90KiljcCAtICh3Y2hhcl90KilzdHJfYnVmIC0gMSk7CisrCQlpZiAoZCA+PSBkZW5kKQorKwkJICB7CisrCQkgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJZCA9IGRlbmQ7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCWQgPSBzdHJpbmcyOworKwkJCWRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCSAgICAgIH0KKysJCSAgfQorKworKwkJbGVuID0gd2VpZ2h0c1tpZHgyXTsKKysKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBlcXVpdl9jbGFzc19sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7CisrCQkgICAgIHdvcmtwKyspCisrCQkgIHsKKysJCSAgICBpZHggPSAoaW50MzJfdCkqd29ya3A7CisrCQkgICAgLyogV2UgYWxyZWFkeSBjaGVja2VkIGlkeCAhPSAwIGluIHJlZ2V4X2NvbXBpbGUuICovCisrCisrCQkgICAgaWYgKGlkeDIgIT0gMCAmJiBsZW4gPT0gd2VpZ2h0c1tpZHhdKQorKwkJICAgICAgeworKwkJCWludCBjbnQgPSAwOworKwkJCXdoaWxlIChjbnQgPCBsZW4gJiYgKHdlaWdodHNbaWR4ICsgMSArIGNudF0KKysJCQkJCSAgICAgPT0gd2VpZ2h0c1tpZHgyICsgMSArIGNudF0pKQorKwkJCSAgKytjbnQ7CisrCisrCQkJaWYgKGNudCA9PSBsZW4pCisrCQkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgICAgICB9CisrCQkgIH0KKysJCS8qIG5vdCBtYXRjaGVkICovCisrICAgICAgICAgICAgICAgIGQgPSBiYWNrdXBfZDsKKysgICAgICAgICAgICAgICAgZGVuZCA9IGJhY2t1cF9kZW5kOworKwkgICAgICB9CisrCSAgICBlbHNlIC8qIChucnVsZXMgPT0gMCkgKi8KKysjIGVuZGlmCisrCSAgICAgIC8qIElmIHdlIGNhbid0IGxvb2sgdXAgY29sbGF0aW9uIGRhdGEsIHdlIHVzZSB3Y3Njb2xsCisrCQkgaW5zdGVhZC4gICovCisrCSAgICAgIHsKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBlcXVpdl9jbGFzc19sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7KQorKwkJICB7CisrCQkgICAgY29uc3QgQ0hBUl9UICpiYWNrdXBfZCA9IGQsICpiYWNrdXBfZGVuZCA9IGRlbmQ7CisrIyBpZmRlZiBfTElCQworKwkJICAgIGxlbmd0aCA9IF9fd2NzbGVuICh3b3JrcCk7CisrIyBlbHNlCisrCQkgICAgbGVuZ3RoID0gd2NzbGVuICh3b3JrcCk7CisrIyBlbmRpZgorKworKwkJICAgIC8qIElmIHdjc2NvbGwodGhlIGNvbGxhdGluZyBzeW1ib2wsIHdob2xlIHN0cmluZykgPiAwLAorKwkJICAgICAgIGFueSBzdWJzdHJpbmcgb2YgdGhlIHN0cmluZyBuZXZlciBtYXRjaCB3aXRoIHRoZQorKwkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wuICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBpZiAoX193Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZWxzZQorKwkJICAgIGlmICh3Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZW5kaWYKKysJCSAgICAgIHsKKysJCQl3b3JrcCArPSBsZW5ndGggKyAxOworKwkJCWJyZWFrOworKwkJICAgICAgfQorKworKwkJICAgIC8qIEZpcnN0LCB3ZSBjb21wYXJlIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyB3aXRoCisrCQkgICAgICAgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nLgorKwkJICAgICAgIElmIGl0IGRvbid0IG1hdGNoLCB3ZSBhZGQgdGhlIG5leHQgY2hhcmFjdGVyIHRvCisrCQkgICAgICAgdGhlIGNvbXBhcmUgYnVmZmVyIGluIHR1cm4uICAqLworKwkJICAgIGZvciAoaSA9IDAgOyBpIDwgV09SS19CVUZGRVJfU0laRSAtIDEgOyBpKyssIGQrKykKKysJCSAgICAgIHsKKysJCQlpbnQgbWF0Y2g7CisrCQkJaWYgKGQgPT0gZGVuZCkKKysJCQkgIHsKKysJCQkgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJICAgICAgYnJlYWs7CisrCQkJICAgIGQgPSBzdHJpbmcyOworKwkJCSAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrCQkJICB9CisrCisrCQkJLyogYWRkIG5leHQgY2hhcmFjdGVyIHRvIHRoZSBjb21wYXJlIGJ1ZmZlci4gICovCisrCQkJc3RyX2J1ZltpXSA9IFRSQU5TTEFURSgqZCk7CisrCQkJc3RyX2J1ZltpKzFdID0gJ1wwJzsKKysKKysjIGlmZGVmIF9MSUJDCisrCQkJbWF0Y2ggPSBfX3djc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVsc2UKKysJCQltYXRjaCA9IHdjc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVuZGlmCisrCisrCQkJaWYgKG1hdGNoID09IDApCisrCQkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCisrCQkJaWYgKG1hdGNoIDwgMCkKKysJCQkvKiAoc3RyX2J1ZiA+IHdvcmtwKSBpbmRpY2F0ZSAoc3RyX2J1ZiArIFggPiB3b3JrcCksCisrCQkJICAgYmVjYXVzZSBmb3IgYWxsIFggKHN0cl9idWYgKyBYID4gc3RyX2J1ZikuCisrCQkJICAgU28gd2UgZG9uJ3QgbmVlZCBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJCSAgYnJlYWs7CisrCisrCQkJLyogT3RoZXJ3aXNlKHN0cl9idWYgPCB3b3JrcCksCisrCQkJICAgKHN0cl9idWYrbmV4dF9jaGFyYWN0ZXIpIG1heSBlcXVhbHMgKHdvcmtwKS4KKysJCQkgICBTbyB3ZSBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJICAgICAgfQorKwkJICAgIC8qIG5vdCBtYXRjaGVkICovCisrCQkgICAgZCA9IGJhY2t1cF9kOworKwkJICAgIGRlbmQgPSBiYWNrdXBfZGVuZDsKKysJCSAgICB3b3JrcCArPSBsZW5ndGggKyAxOworKwkJICB9CisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXJfcmFuZ2U/ICAqLworKyMgaWZkZWYgX0xJQkMKKysJICAgIGlmIChucnVsZXMgIT0gMCkKKysJICAgICAgeworKwkJdWludDMyX3QgY29sbHNlcXZhbDsKKysJCWNvbnN0IGNoYXIgKmNvbGxzZXEgPSAoY29uc3QgY2hhciAqKQorKwkJICBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworKworKwkJY29sbHNlcXZhbCA9IGNvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2VxLCBjKTsKKysKKysJCWZvciAoOyB3b3JrcCA8IHAgLSBjaGFyc19sZW5ndGggOykKKysJCSAgeworKwkJICAgIHVpbnQzMl90IHN0YXJ0X3ZhbCwgZW5kX3ZhbDsKKysKKysJCSAgICAvKiBXZSBhbHJlYWR5IGNvbXB1dGUgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZQorKwkJICAgICAgIG9mIHRoZSBjaGFyYWN0ZXJzIChvciBjb2xsYXRpbmcgc3ltYm9scykuICAqLworKwkJICAgIHN0YXJ0X3ZhbCA9ICh1aW50MzJfdCkgKndvcmtwKys7IC8qIHJhbmdlX3N0YXJ0ICovCisrCQkgICAgZW5kX3ZhbCA9ICh1aW50MzJfdCkgKndvcmtwKys7IC8qIHJhbmdlX2VuZCAqLworKworKwkJICAgIGlmIChzdGFydF92YWwgPD0gY29sbHNlcXZhbCAmJiBjb2xsc2VxdmFsIDw9IGVuZF92YWwpCisrCQkgICAgICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgZWxzZQorKyMgZW5kaWYKKysJICAgICAgeworKwkJLyogV2Ugc2V0IHJhbmdlX3N0YXJ0X2NoYXIgYXQgc3RyX2J1ZlswXSwgcmFuZ2VfZW5kX2NoYXIKKysJCSAgIGF0IHN0cl9idWZbNF0sIGFuZCBjb21wYXJlZCBjaGFyIGF0IHN0cl9idWZbMl0uICAqLworKwkJc3RyX2J1ZlsxXSA9IDA7CisrCQlzdHJfYnVmWzJdID0gYzsKKysJCXN0cl9idWZbM10gPSAwOworKwkJc3RyX2J1Zls1XSA9IDA7CisrCQlmb3IgKDsgd29ya3AgPCBwIC0gY2hhcnNfbGVuZ3RoIDspCisrCQkgIHsKKysJCSAgICB3Y2hhcl90ICpyYW5nZV9zdGFydF9jaGFyLCAqcmFuZ2VfZW5kX2NoYXI7CisrCisrCQkgICAgLyogbWF0Y2ggaWYgKHJhbmdlX3N0YXJ0X2NoYXIgPD0gYyA8PSByYW5nZV9lbmRfY2hhcikuICAqLworKworKwkJICAgIC8qIElmIHJhbmdlX3N0YXJ0KG9yIGVuZCkgPCAwLCB3ZSBhc3N1bWUgLXJhbmdlX3N0YXJ0KGVuZCkKKysJCSAgICAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBjb2xsYXRpbmcgc3ltYm9sIHdoaWNoIGlzIHNwZWNpZmllZAorKwkJICAgICAgIGFzIHRoZSBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlIHN0YXJ0KGVuZCkuICAqLworKworKwkJICAgIC8qIHJhbmdlX3N0YXJ0ICovCisrCQkgICAgaWYgKCp3b3JrcCA8IDApCisrCQkgICAgICByYW5nZV9zdGFydF9jaGFyID0gY2hhcnNldF90b3AgLSAoKndvcmtwKyspOworKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQlzdHJfYnVmWzBdID0gKndvcmtwKys7CisrCQkJcmFuZ2Vfc3RhcnRfY2hhciA9IHN0cl9idWY7CisrCQkgICAgICB9CisrCisrCQkgICAgLyogcmFuZ2VfZW5kICovCisrCQkgICAgaWYgKCp3b3JrcCA8IDApCisrCQkgICAgICByYW5nZV9lbmRfY2hhciA9IGNoYXJzZXRfdG9wIC0gKCp3b3JrcCsrKTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJc3RyX2J1Zls0XSA9ICp3b3JrcCsrOworKwkJCXJhbmdlX2VuZF9jaGFyID0gc3RyX2J1ZiArIDQ7CisrCQkgICAgICB9CisrCisrIyBpZmRlZiBfTElCQworKwkJICAgIGlmIChfX3djc2NvbGwgKHJhbmdlX3N0YXJ0X2NoYXIsIHN0cl9idWYrMikgPD0gMAorKwkJCSYmIF9fd2NzY29sbCAoc3RyX2J1ZisyLCByYW5nZV9lbmRfY2hhcikgPD0gMCkKKysjIGVsc2UKKysJCSAgICBpZiAod2NzY29sbCAocmFuZ2Vfc3RhcnRfY2hhciwgc3RyX2J1ZisyKSA8PSAwCisrCQkJJiYgd2NzY29sbCAoc3RyX2J1ZisyLCByYW5nZV9lbmRfY2hhcikgPD0gMCkKKysjIGVuZGlmCisrCQkgICAgICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgIH0KKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcj8gICovCisrCSAgICBmb3IgKDsgd29ya3AgPCBwIDsgd29ya3ArKykKKysJICAgICAgaWYgKGMgPT0gKndvcmtwKQorKwkJZ290byBjaGFyX3NldF9tYXRjaGVkOworKworKwkgICAgbmVnYXRlID0gIW5lZ2F0ZTsKKysKKysJICBjaGFyX3NldF9tYXRjaGVkOgorKwkgICAgaWYgKG5lZ2F0ZSkgZ290byBmYWlsOworKyNlbHNlCisrICAgICAgICAgICAgLyogQ2FzdCB0byBgdW5zaWduZWQnIGluc3RlYWQgb2YgYHVuc2lnbmVkIGNoYXInIGluIGNhc2UgdGhlCisrICAgICAgICAgICAgICAgYml0IGxpc3QgaXMgYSBmdWxsIDMyIGJ5dGVzIGxvbmcuICAqLworKwkgICAgaWYgKGMgPCAodW5zaWduZWQpICgqcCAqIEJZVEVXSURUSCkKKysJCSYmIHBbMSArIGMgLyBCWVRFV0lEVEhdICYgKDEgPDwgKGMgJSBCWVRFV0lEVEgpKSkKKysJICAgICAgbmVnYXRlID0gIW5lZ2F0ZTsKKysKKysJICAgIHAgKz0gMSArICpwOworKworKwkgICAgaWYgKCFuZWdhdGUpIGdvdG8gZmFpbDsKKysjdW5kZWYgV09SS19CVUZGRVJfU0laRQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgICBkKys7CisrCSAgICBicmVhazsKKysJICB9CisrCisrCisrICAgICAgICAvKiBUaGUgYmVnaW5uaW5nIG9mIGEgZ3JvdXAgaXMgcmVwcmVzZW50ZWQgYnkgc3RhcnRfbWVtb3J5LgorKyAgICAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHJlZ2lzdGVyIG51bWJlciBpbiB0aGUgbmV4dCBieXRlLCBhbmQgdGhlCisrICAgICAgICAgICBudW1iZXIgb2YgZ3JvdXBzIGlubmVyIHRvIHRoaXMgb25lIGluIHRoZSBuZXh0LiAgVGhlIHRleHQKKysgICAgICAgICAgIG1hdGNoZWQgd2l0aGluIHRoZSBncm91cCBpcyByZWNvcmRlZCAoaW4gdGhlIGludGVybmFsCisrICAgICAgICAgICByZWdpc3RlcnMgZGF0YSBzdHJ1Y3R1cmUpIHVuZGVyIHRoZSByZWdpc3RlciBudW1iZXIuICAqLworKyAgICAgICAgY2FzZSBzdGFydF9tZW1vcnk6CisrCSAgREVCVUdfUFJJTlQzICgiRVhFQ1VUSU5HIHN0YXJ0X21lbW9yeSAlbGQgKCVsZCk6XG4iLAorKwkJCShsb25nIGludCkgKnAsIChsb25nIGludCkgcFsxXSk7CisrCisrICAgICAgICAgIC8qIEZpbmQgb3V0IGlmIHRoaXMgZ3JvdXAgY2FuIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICAqLworKwkgIHAxID0gcDsJCS8qIFRvIHNlbmQgdG8gZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcC4gICovCisrCisrICAgICAgICAgIGlmIChSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKSA9PSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFKQorKyAgICAgICAgICAgIFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICA9IFBSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBwZW5kLCByZWdfaW5mbyk7CisrCisrICAgICAgICAgIC8qIFNhdmUgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgd2hlcmUgd2Ugd2VyZSB0aGUgbGFzdCB0aW1lCisrICAgICAgICAgICAgIHdlIHdlcmUgYXQgdGhpcyBvcGVuLWdyb3VwIG9wZXJhdG9yIGluIGNhc2UgdGhlIGdyb3VwIGlzCisrICAgICAgICAgICAgIG9wZXJhdGVkIHVwb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLCBlLmcuLCB3aXRoIGAoYSopKmInCisrICAgICAgICAgICAgIGFnYWluc3QgYGFiJzsgdGhlbiB3ZSB3YW50IHRvIGlnbm9yZSB3aGVyZSB3ZSBhcmUgbm93IGluCisrICAgICAgICAgICAgIHRoZSBzdHJpbmcgaW4gY2FzZSB0aGlzIGF0dGVtcHQgdG8gbWF0Y2ggZmFpbHMuICAqLworKyAgICAgICAgICBvbGRfcmVnc3RhcnRbKnBdID0gUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUkVHX1VOU0VUIChyZWdzdGFydFsqcF0pID8gZCA6IHJlZ3N0YXJ0WypwXQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZWdzdGFydFsqcF07CisrCSAgREVCVUdfUFJJTlQyICgiICBvbGRfcmVnc3RhcnQ6ICVkXG4iLAorKwkJCSBQT0lOVEVSX1RPX09GRlNFVCAob2xkX3JlZ3N0YXJ0WypwXSkpOworKworKyAgICAgICAgICByZWdzdGFydFsqcF0gPSBkOworKwkgIERFQlVHX1BSSU5UMiAoIiAgcmVnc3RhcnQ6ICVkXG4iLCBQT0lOVEVSX1RPX09GRlNFVCAocmVnc3RhcnRbKnBdKSk7CisrCisrICAgICAgICAgIElTX0FDVElWRSAocmVnX2luZm9bKnBdKSA9IDE7CisrICAgICAgICAgIE1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pID0gMDsKKysKKysJICAvKiBDbGVhciB0aGlzIHdoZW5ldmVyIHdlIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYWN0aXZpdHkgc3RhdHVzLiAgKi8KKysJICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOworKworKyAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIuICAqLworKyAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSAqcDsKKysKKysgICAgICAgICAgLyogSWYgbm90aGluZyB3YXMgYWN0aXZlIGJlZm9yZSwgdGhpcyBpcyB0aGUgbmV3IGxvd2VzdCBhY3RpdmUKKysgICAgICAgICAgICAgcmVnaXN0ZXIuICAqLworKyAgICAgICAgICBpZiAobG93ZXN0X2FjdGl2ZV9yZWcgPT0gTk9fTE9XRVNUX0FDVElWRV9SRUcpCisrICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSAqcDsKKysKKysgICAgICAgICAgLyogTW92ZSBwYXN0IHRoZSByZWdpc3RlciBudW1iZXIgYW5kIGlubmVyIGdyb3VwIGNvdW50LiAgKi8KKysgICAgICAgICAgcCArPSAyOworKwkgIGp1c3RfcGFzdF9zdGFydF9tZW0gPSBwOworKworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIC8qIFRoZSBzdG9wX21lbW9yeSBvcGNvZGUgcmVwcmVzZW50cyB0aGUgZW5kIG9mIGEgZ3JvdXAuICBJdHMKKysgICAgICAgICAgIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgc3RhcnRfbWVtb3J5J3M6IHRoZSByZWdpc3RlcgorKyAgICAgICAgICAgbnVtYmVyLCBhbmQgdGhlIG51bWJlciBvZiBpbm5lciBncm91cHMuICAqLworKwljYXNlIHN0b3BfbWVtb3J5OgorKwkgIERFQlVHX1BSSU5UMyAoIkVYRUNVVElORyBzdG9wX21lbW9yeSAlbGQgKCVsZCk6XG4iLAorKwkJCShsb25nIGludCkgKnAsIChsb25nIGludCkgcFsxXSk7CisrCisrICAgICAgICAgIC8qIFdlIG5lZWQgdG8gc2F2ZSB0aGUgc3RyaW5nIHBvc2l0aW9uIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBhdAorKyAgICAgICAgICAgICB0aGlzIGNsb3NlLWdyb3VwIG9wZXJhdG9yIGluIGNhc2UgdGhlIGdyb3VwIGlzIG9wZXJhdGVkCisrICAgICAgICAgICAgIHVwb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLCBlLmcuLCB3aXRoIGAoKGEqKSooYiopKikqJworKyAgICAgICAgICAgICBhZ2FpbnN0IGBhYmEnOyB0aGVuIHdlIHdhbnQgdG8gaWdub3JlIHdoZXJlIHdlIGFyZSBub3cgaW4KKysgICAgICAgICAgICAgdGhlIHN0cmluZyBpbiBjYXNlIHRoaXMgYXR0ZW1wdCB0byBtYXRjaCBmYWlscy4gICovCisrICAgICAgICAgIG9sZF9yZWdlbmRbKnBdID0gUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFJFR19VTlNFVCAocmVnZW5kWypwXSkgPyBkIDogcmVnZW5kWypwXQorKwkJCSAgIDogcmVnZW5kWypwXTsKKysJICBERUJVR19QUklOVDIgKCIgICAgICBvbGRfcmVnZW5kOiAlZFxuIiwKKysJCQkgUE9JTlRFUl9UT19PRkZTRVQgKG9sZF9yZWdlbmRbKnBdKSk7CisrCisrICAgICAgICAgIHJlZ2VuZFsqcF0gPSBkOworKwkgIERFQlVHX1BSSU5UMiAoIiAgICAgIHJlZ2VuZDogJWRcbiIsIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdlbmRbKnBdKSk7CisrCisrICAgICAgICAgIC8qIFRoaXMgcmVnaXN0ZXIgaXNuJ3QgYWN0aXZlIGFueW1vcmUuICAqLworKyAgICAgICAgICBJU19BQ1RJVkUgKHJlZ19pbmZvWypwXSkgPSAwOworKworKwkgIC8qIENsZWFyIHRoaXMgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSByZWdpc3RlciBhY3Rpdml0eSBzdGF0dXMuICAqLworKwkgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CisrCisrICAgICAgICAgIC8qIElmIHRoaXMgd2FzIHRoZSBvbmx5IHJlZ2lzdGVyIGFjdGl2ZSwgbm90aGluZyBpcyBhY3RpdmUKKysgICAgICAgICAgICAgYW55bW9yZS4gICovCisrICAgICAgICAgIGlmIChsb3dlc3RfYWN0aXZlX3JlZyA9PSBoaWdoZXN0X2FjdGl2ZV9yZWcpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSBOT19MT1dFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IE5PX0hJR0hFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7IC8qIFdlIG11c3Qgc2NhbiBmb3IgdGhlIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3Rlciwgc2luY2UKKysgICAgICAgICAgICAgICAgIGl0IGlzbid0IG5lY2Vzc2FyaWx5IG9uZSBsZXNzIHRoYW4gbm93OiBjb25zaWRlcgorKyAgICAgICAgICAgICAgICAgKGEoYiljKGQoZSlmKWcpLiAgV2hlbiBncm91cCAzIGVuZHMsIGFmdGVyIHRoZSBmKSwgdGhlCisrICAgICAgICAgICAgICAgICBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIgaXMgMS4gICovCisrICAgICAgICAgICAgICBVQ0hBUl9UIHIgPSAqcCAtIDE7CisrICAgICAgICAgICAgICB3aGlsZSAociA+IDAgJiYgIUlTX0FDVElWRSAocmVnX2luZm9bcl0pKQorKyAgICAgICAgICAgICAgICByLS07CisrCisrICAgICAgICAgICAgICAvKiBJZiB3ZSBlbmQgdXAgYXQgcmVnaXN0ZXIgemVybywgdGhhdCBtZWFucyB0aGF0IHdlIHNhdmVkCisrICAgICAgICAgICAgICAgICB0aGUgcmVnaXN0ZXJzIGFzIHRoZSByZXN1bHQgb2YgYW4gYG9uX2ZhaWx1cmVfanVtcCcsIG5vdAorKyAgICAgICAgICAgICAgICAgYSBgc3RhcnRfbWVtb3J5JywgYW5kIHdlIGp1bXBlZCB0byBwYXN0IHRoZSBpbm5lcm1vc3QKKysgICAgICAgICAgICAgICAgIGBzdG9wX21lbW9yeScuICBGb3IgZXhhbXBsZSwgaW4gKCguKSopIHdlIHNhdmUKKysgICAgICAgICAgICAgICAgIHJlZ2lzdGVycyAxIGFuZCAyIGFzIGEgcmVzdWx0IG9mIHRoZSAqLCBidXQgd2hlbiB3ZSBwb3AKKysgICAgICAgICAgICAgICAgIGJhY2sgdG8gdGhlIHNlY29uZCApLCB3ZSBhcmUgYXQgdGhlIHN0b3BfbWVtb3J5IDEuCisrICAgICAgICAgICAgICAgICBUaHVzLCBub3RoaW5nIGlzIGFjdGl2ZS4gICovCisrCSAgICAgIGlmIChyID09IDApCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9IE5PX0xPV0VTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IE5PX0hJR0hFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSByOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgLyogSWYganVzdCBmYWlsZWQgdG8gbWF0Y2ggc29tZXRoaW5nIHRoaXMgdGltZSBhcm91bmQgd2l0aCBhCisrICAgICAgICAgICAgIGdyb3VwIHRoYXQncyBvcGVyYXRlZCBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IsIHRyeSB0bworKyAgICAgICAgICAgICBmb3JjZSBleGl0IGZyb20gdGhlIGBgbG9vcCcnLCBhbmQgcmVzdG9yZSB0aGUgcmVnaXN0ZXIKKysgICAgICAgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgZ3JvdXAgdGhhdCB3ZSBoYWQgYmVmb3JlIHRyeWluZyB0aGlzCisrICAgICAgICAgICAgIGxhc3QgbWF0Y2guICAqLworKyAgICAgICAgICBpZiAoKCFNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgIHx8IGp1c3RfcGFzdF9zdGFydF9tZW0gPT0gcCAtIDEpCisrCSAgICAgICYmIChwICsgMikgPCBwZW5kKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYV9qdW1wX24gPSBmYWxzZTsKKysKKysgICAgICAgICAgICAgIHAxID0gcCArIDI7CisrICAgICAgICAgICAgICBtY250ID0gMDsKKysgICAgICAgICAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDErKykKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGNhc2UganVtcF9uOgorKwkJICAgIGlzX2FfanVtcF9uID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrCQkgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrCQkgIGNhc2UganVtcDoKKysJCSAgY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKwkJICAgIGlmIChpc19hX2p1bXBfbikKKysJCSAgICAgIHAxICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLyA7CisrICAgICAgICAgICAgICAgIH0KKysJICAgICAgcDEgKz0gbWNudDsKKysKKysgICAgICAgICAgICAgIC8qIElmIHRoZSBuZXh0IG9wZXJhdGlvbiBpcyBhIGp1bXAgYmFja3dhcmRzIGluIHRoZSBwYXR0ZXJuCisrCSAgICAgICAgIHRvIGFuIG9uX2ZhaWx1cmVfanVtcCByaWdodCBiZWZvcmUgdGhlIHN0YXJ0X21lbW9yeQorKyAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGlzIHN0b3BfbWVtb3J5LCBleGl0IGZyb20gdGhlIGxvb3AKKysgICAgICAgICAgICAgICAgIGJ5IGZvcmNpbmcgYSBmYWlsdXJlIGFmdGVyIHB1c2hpbmcgb24gdGhlIHN0YWNrIHRoZQorKyAgICAgICAgICAgICAgICAgb25fZmFpbHVyZV9qdW1wJ3MganVtcCBpbiB0aGUgcGF0dGVybiwgYW5kIGQuICAqLworKyAgICAgICAgICAgICAgaWYgKG1jbnQgPCAwICYmIChyZV9vcGNvZGVfdCkgKnAxID09IG9uX2ZhaWx1cmVfanVtcAorKyAgICAgICAgICAgICAgICAgICYmIChyZV9vcGNvZGVfdCkgcDFbMStPRkZTRVRfQUREUkVTU19TSVpFXSA9PSBzdGFydF9tZW1vcnkKKysJCSAgJiYgcDFbMitPRkZTRVRfQUREUkVTU19TSVpFXSA9PSAqcCkKKysJCXsKKysgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGdyb3VwIGV2ZXIgbWF0Y2hlZCBhbnl0aGluZywgdGhlbiByZXN0b3JlCisrICAgICAgICAgICAgICAgICAgICAgd2hhdCBpdHMgcmVnaXN0ZXJzIHdlcmUgYmVmb3JlIHRyeWluZyB0aGlzIGxhc3QKKysgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgbWF0Y2gsIGUuZy4sIHdpdGggYChhKikqYicgYWdhaW5zdCBgYWInIGZvcgorKyAgICAgICAgICAgICAgICAgICAgIHJlZ3N0YXJ0WzFdLCBhbmQsIGUuZy4sIHdpdGggYCgoYSopKihiKikqKSonCisrICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCBgYWJhJyBmb3IgcmVnZW5kWzNdLgorKworKyAgICAgICAgICAgICAgICAgICAgIEFsc28gcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZvciBpbm5lciBncm91cHMgZm9yLAorKyAgICAgICAgICAgICAgICAgICAgIGUuZy4sIGAoKGEqKShiKikpKicgYWdhaW5zdCBgYWJhJyAocmVnaXN0ZXIgMyB3b3VsZAorKyAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBnZXQgdHJhc2hlZCkuICAqLworKworKyAgICAgICAgICAgICAgICAgIGlmIChFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pKQorKwkJICAgIHsKKysJCSAgICAgIHVuc2lnbmVkIHI7CisrCisrICAgICAgICAgICAgICAgICAgICAgIEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkgPSAwOworKworKwkJICAgICAgLyogUmVzdG9yZSB0aGlzIGFuZCBpbm5lciBncm91cHMnIChpZiBhbnkpIHJlZ2lzdGVycy4gICovCisrICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9ICpwOyByIDwgKHVuc2lnbmVkKSAqcCArICh1bnNpZ25lZCkgKihwICsgMSk7CisrCQkJICAgcisrKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3N0YXJ0W3JdID0gb2xkX3JlZ3N0YXJ0W3JdOworKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeHggd2h5IHRoaXMgdGVzdD8gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkX3JlZ2VuZFtyXSA+PSByZWdzdGFydFtyXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZW5kW3JdID0gb2xkX3JlZ2VuZFtyXTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrCQkgIHAxKys7CisrICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAxICsgbWNudCwgZCwgLTIpOworKworKyAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgLyogTW92ZSBwYXN0IHRoZSByZWdpc3RlciBudW1iZXIgYW5kIHRoZSBpbm5lciBncm91cCBjb3VudC4gICovCisrICAgICAgICAgIHAgKz0gMjsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCS8qIFw8ZGlnaXQ+IGhhcyBiZWVuIHR1cm5lZCBpbnRvIGEgYGR1cGxpY2F0ZScgY29tbWFuZCB3aGljaCBpcworKyAgICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIG51bWVyaWMgdmFsdWUgb2YgPGRpZ2l0PiBhcyB0aGUgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKysgICAgICAgIGNhc2UgZHVwbGljYXRlOgorKwkgIHsKKysJICAgIHJlZ2lzdGVyIGNvbnN0IENIQVJfVCAqZDIsICpkZW5kMjsKKysJICAgIGludCByZWdubyA9ICpwKys7ICAgLyogR2V0IHdoaWNoIHJlZ2lzdGVyIHRvIG1hdGNoIGFnYWluc3QuICAqLworKwkgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGR1cGxpY2F0ZSAlZC5cbiIsIHJlZ25vKTsKKysKKysJICAgIC8qIENhbid0IGJhY2sgcmVmZXJlbmNlIGEgZ3JvdXAgd2hpY2ggd2UndmUgbmV2ZXIgbWF0Y2hlZC4gICovCisrICAgICAgICAgICAgaWYgKFJFR19VTlNFVCAocmVnc3RhcnRbcmVnbm9dKSB8fCBSRUdfVU5TRVQgKHJlZ2VuZFtyZWdub10pKQorKyAgICAgICAgICAgICAgZ290byBmYWlsOworKworKyAgICAgICAgICAgIC8qIFdoZXJlIGluIGlucHV0IHRvIHRyeSB0byBzdGFydCBtYXRjaGluZy4gICovCisrICAgICAgICAgICAgZDIgPSByZWdzdGFydFtyZWdub107CisrCisrICAgICAgICAgICAgLyogV2hlcmUgdG8gc3RvcCBtYXRjaGluZzsgaWYgYm90aCB0aGUgcGxhY2UgdG8gc3RhcnQgYW5kCisrICAgICAgICAgICAgICAgdGhlIHBsYWNlIHRvIHN0b3AgbWF0Y2hpbmcgYXJlIGluIHRoZSBzYW1lIHN0cmluZywgdGhlbgorKyAgICAgICAgICAgICAgIHNldCB0byB0aGUgcGxhY2UgdG8gc3RvcCwgb3RoZXJ3aXNlLCBmb3Igbm93IGhhdmUgdG8gdXNlCisrICAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgZmlyc3Qgc3RyaW5nLiAgKi8KKysKKysgICAgICAgICAgICBkZW5kMiA9ICgoRklSU1RfU1RSSU5HX1AgKHJlZ3N0YXJ0W3JlZ25vXSkKKysJCSAgICAgID09IEZJUlNUX1NUUklOR19QIChyZWdlbmRbcmVnbm9dKSkKKysJCSAgICAgPyByZWdlbmRbcmVnbm9dIDogZW5kX21hdGNoXzEpOworKwkgICAgZm9yICg7OykKKysJICAgICAgeworKwkJLyogSWYgbmVjZXNzYXJ5LCBhZHZhbmNlIHRvIG5leHQgc2VnbWVudCBpbiByZWdpc3RlcgorKyAgICAgICAgICAgICAgICAgICBjb250ZW50cy4gICovCisrCQl3aGlsZSAoZDIgPT0gZGVuZDIpCisrCQkgIHsKKysJCSAgICBpZiAoZGVuZDIgPT0gZW5kX21hdGNoXzIpIGJyZWFrOworKwkJICAgIGlmIChkZW5kMiA9PSByZWdlbmRbcmVnbm9dKSBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBzdHJpbmcxID0+IGFkdmFuY2UgdG8gc3RyaW5nMi4gKi8KKysgICAgICAgICAgICAgICAgICAgIGQyID0gc3RyaW5nMjsKKysgICAgICAgICAgICAgICAgICAgIGRlbmQyID0gcmVnZW5kW3JlZ25vXTsKKysJCSAgfQorKwkJLyogQXQgZW5kIG9mIHJlZ2lzdGVyIGNvbnRlbnRzID0+IHN1Y2Nlc3MgKi8KKysJCWlmIChkMiA9PSBkZW5kMikgYnJlYWs7CisrCisrCQkvKiBJZiBuZWNlc3NhcnksIGFkdmFuY2UgdG8gbmV4dCBzZWdtZW50IGluIGRhdGEuICAqLworKwkJUFJFRkVUQ0ggKCk7CisrCisrCQkvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIGxlZnQgaW4gdGhpcyBzZWdtZW50IHRvIG1hdGNoLiAgKi8KKysJCW1jbnQgPSBkZW5kIC0gZDsKKysKKysJCS8qIFdhbnQgaG93IG1hbnkgY29uc2VjdXRpdmUgY2hhcmFjdGVycyB3ZSBjYW4gbWF0Y2ggaW4KKysgICAgICAgICAgICAgICAgICAgb25lIHNob3QsIHNvLCBpZiBuZWNlc3NhcnksIGFkanVzdCB0aGUgY291bnQuICAqLworKyAgICAgICAgICAgICAgICBpZiAobWNudCA+IGRlbmQyIC0gZDIpCisrCQkgIG1jbnQgPSBkZW5kMiAtIGQyOworKworKwkJLyogQ29tcGFyZSB0aGF0IG1hbnk7IGZhaWx1cmUgaWYgbWlzbWF0Y2gsIGVsc2UgbW92ZQorKyAgICAgICAgICAgICAgICAgICBwYXN0IHRoZW0uICAqLworKwkJaWYgKHRyYW5zbGF0ZQorKyAgICAgICAgICAgICAgICAgICAgPyBQUkVGSVgoYmNtcF90cmFuc2xhdGUpIChkLCBkMiwgbWNudCwgdHJhbnNsYXRlKQorKyAgICAgICAgICAgICAgICAgICAgOiBtZW1jbXAgKGQsIGQyLCBtY250KnNpemVvZihVQ0hBUl9UKSkpCisrCQkgIGdvdG8gZmFpbDsKKysJCWQgKz0gbWNudCwgZDIgKz0gbWNudDsKKysKKysJCS8qIERvIHRoaXMgYmVjYXVzZSB3ZSd2ZSBtYXRjaCBzb21lIGNoYXJhY3RlcnMuICAqLworKwkJU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysJICAgICAgfQorKwkgIH0KKysJICBicmVhazsKKysKKysKKysgICAgICAgIC8qIGJlZ2xpbmUgbWF0Y2hlcyB0aGUgZW1wdHkgc3RyaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZworKyAgICAgICAgICAgKHVubGVzcyBgbm90X2JvbCcgaXMgc2V0IGluIGBidWZwJyksIGFuZCwgaWYKKysgICAgICAgICAgIGBuZXdsaW5lX2FuY2hvcicgaXMgc2V0LCBhZnRlciBuZXdsaW5lcy4gICovCisrCWNhc2UgYmVnbGluZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGJlZ2xpbmUuXG4iKTsKKysKKysgICAgICAgICAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoIWJ1ZnAtPm5vdF9ib2wpIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZSBpZiAoZFstMV0gPT0gJ1xuJyAmJiBidWZwLT5uZXdsaW5lX2FuY2hvcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIC8qIEluIGFsbCBvdGhlciBjYXNlcywgd2UgZmFpbC4gICovCisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysgICAgICAgIC8qIGVuZGxpbmUgaXMgdGhlIGR1YWwgb2YgYmVnbGluZS4gICovCisrCWNhc2UgZW5kbGluZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGVuZGxpbmUuXG4iKTsKKysKKysgICAgICAgICAgaWYgKEFUX1NUUklOR1NfRU5EIChkKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoIWJ1ZnAtPm5vdF9lb2wpIGJyZWFrOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgLyogV2UgaGF2ZSB0byBgYHByZWZldGNoJycgdGhlIG5leHQgY2hhcmFjdGVyLiAgKi8KKysgICAgICAgICAgZWxzZSBpZiAoKGQgPT0gZW5kMSA/ICpzdHJpbmcyIDogKmQpID09ICdcbicKKysgICAgICAgICAgICAgICAgICAgJiYgYnVmcC0+bmV3bGluZV9hbmNob3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrCS8qIE1hdGNoIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgZGF0YS4gICovCisrICAgICAgICBjYXNlIGJlZ2J1ZjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGJlZ2J1Zi5cbiIpOworKyAgICAgICAgICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrCS8qIE1hdGNoIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZGF0YS4gICovCisrICAgICAgICBjYXNlIGVuZGJ1ZjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGVuZGJ1Zi5cbiIpOworKwkgIGlmIChBVF9TVFJJTkdTX0VORCAoZCkpCisrCSAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKworKyAgICAgICAgLyogb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIGlzIHVzZWQgdG8gb3B0aW1pemUgYC4qXG4nLiAgSXQKKysgICAgICAgICAgIHB1c2hlcyBOVUxMIGFzIHRoZSB2YWx1ZSBmb3IgdGhlIHN0cmluZyBvbiB0aGUgc3RhY2suICBUaGVuCisrICAgICAgICAgICBgcG9wX2ZhaWx1cmVfcG9pbnQnIHdpbGwga2VlcCB0aGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlCisrICAgICAgICAgICBzdHJpbmcsIGluc3RlYWQgb2YgcmVzdG9yaW5nIGl0LiAgVG8gc2VlIHdoeSwgY29uc2lkZXIKKysgICAgICAgICAgIG1hdGNoaW5nIGBmb29cbmJhcicgYWdhaW5zdCBgLipcbicuICBUaGUgLiogbWF0Y2hlcyB0aGUgZm9vOworKyAgICAgICAgICAgdGhlbiB0aGUgLiBmYWlscyBhZ2FpbnN0IHRoZSBcbi4gIEJ1dCB0aGUgbmV4dCB0aGluZyB3ZSB3YW50CisrICAgICAgICAgICB0byBkbyBpcyBtYXRjaCB0aGUgXG4gYWdhaW5zdCB0aGUgXG47IGlmIHdlIHJlc3RvcmVkIHRoZQorKyAgICAgICAgICAgc3RyaW5nIHZhbHVlLCB3ZSB3b3VsZCBiZSBiYWNrIGF0IHRoZSBmb28uCisrCisrICAgICAgICAgICBCZWNhdXNlIHRoaXMgaXMgdXNlZCBvbmx5IGluIHNwZWNpZmljIGNhc2VzLCB3ZSBkb24ndCBuZWVkIHRvCisrICAgICAgICAgICBjaGVjayBhbGwgdGhlIHRoaW5ncyB0aGF0IGBvbl9mYWlsdXJlX2p1bXAnIGRvZXMsIHRvIG1ha2UKKysgICAgICAgICAgIHN1cmUgdGhlIHJpZ2h0IHRoaW5ncyBnZXQgc2F2ZWQgb24gdGhlIHN0YWNrLiAgSGVuY2Ugd2UgZG9uJ3QKKysgICAgICAgICAgIHNoYXJlIGl0cyBjb2RlLiAgVGhlIG9ubHkgcmVhc29uIHRvIHB1c2ggYW55dGhpbmcgb24gdGhlCisrICAgICAgICAgICBzdGFjayBhdCBhbGwgaXMgdGhhdCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byBjaGFuZ2UKKysgICAgICAgICAgIGBhbnljaGFyJ3MgY29kZSB0byBkbyBzb21ldGhpbmcgYmVzaWRlcyBnb3RvIGZhaWwgaW4gdGhpcworKyAgICAgICAgICAgY2FzZTsgdGhhdCBzZWVtcyB3b3JzZSB0aGFuIHRoaXMuICAqLworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXA6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAiKTsKKysKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvICVwKTpcbiIsIG1jbnQsIHAgKyBtY250KTsKKysjZWxzZQorKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvIDB4JXgpOlxuIiwgbWNudCwgcCArIG1jbnQpOworKyNlbmRpZgorKworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAgKyBtY250LCBOVUxMLCAtMik7CisrICAgICAgICAgIGJyZWFrOworKworKworKwkvKiBVc2VzIG9mIG9uX2ZhaWx1cmVfanVtcDoKKysKKysgICAgICAgICAgIEVhY2ggYWx0ZXJuYXRpdmUgc3RhcnRzIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wIHRoYXQgcG9pbnRzCisrICAgICAgICAgICB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGFsdGVybmF0aXZlLiAgRWFjaCBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgZXhjZXB0IHRoZSBsYXN0IGVuZHMgd2l0aCBhIGp1bXAgdGhhdCBpbiBlZmZlY3QganVtcHMgcGFzdAorKyAgICAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIGFsdGVybmF0aXZlcy4gIChUaGV5IHJlYWxseSBqdW1wIHRvIHRoZQorKyAgICAgICAgICAgZW5kaW5nIGp1bXAgb2YgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSwgYmVjYXVzZSB0ZW5zaW9uaW5nCisrICAgICAgICAgICB0aGVzZSBqdW1wcyBpcyBhIGhhc3NsZS4pCisrCisrICAgICAgICAgICBSZXBlYXRzIHN0YXJ0IHdpdGggYW4gb25fZmFpbHVyZV9qdW1wIHRoYXQgcG9pbnRzIHBhc3QgYm90aAorKyAgICAgICAgICAgdGhlIHJlcGV0aXRpb24gdGV4dCBhbmQgZWl0aGVyIHRoZSBmb2xsb3dpbmcganVtcCBvcgorKyAgICAgICAgICAgcG9wX2ZhaWx1cmVfanVtcCBiYWNrIHRvIHRoaXMgb25fZmFpbHVyZV9qdW1wLiAgKi8KKysJY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICBvbl9mYWlsdXJlOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgb25fZmFpbHVyZV9qdW1wIik7CisrCisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAlcCkiLCBtY250LCBwICsgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAweCV4KSIsIG1jbnQsIHAgKyBtY250KTsKKysjZW5kaWYKKysKKysgICAgICAgICAgLyogSWYgdGhpcyBvbl9mYWlsdXJlX2p1bXAgY29tZXMgcmlnaHQgYmVmb3JlIGEgZ3JvdXAgKGkuZS4sCisrICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCAqIGFwcGxpZWQgdG8gYSBncm91cCksIHNhdmUgdGhlIGluZm9ybWF0aW9uCisrICAgICAgICAgICAgIGZvciB0aGF0IGdyb3VwIGFuZCBhbGwgaW5uZXIgb25lcywgc28gdGhhdCBpZiB3ZSBmYWlsIGJhY2sKKysgICAgICAgICAgICAgdG8gdGhpcyBwb2ludCwgdGhlIGdyb3VwJ3MgaW5mb3JtYXRpb24gd2lsbCBiZSBjb3JyZWN0LgorKyAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gXChhKlwpKlwxLCB3ZSBuZWVkIHRoZSBwcmVjZWRpbmcgZ3JvdXAsCisrICAgICAgICAgICAgIGFuZCBpbiBcKHp6XChhKlwpYipcKVwyLCB3ZSBuZWVkIHRoZSBpbm5lciBncm91cC4gICovCisrCisrICAgICAgICAgIC8qIFdlIGNhbid0IHVzZSBgcCcgdG8gY2hlY2sgYWhlYWQgYmVjYXVzZSB3ZSBwdXNoCisrICAgICAgICAgICAgIGEgZmFpbHVyZSBwb2ludCB0byBgcCArIG1jbnQnIGFmdGVyIHdlIGRvIHRoaXMuICAqLworKyAgICAgICAgICBwMSA9IHA7CisrCisrICAgICAgICAgIC8qIFdlIG5lZWQgdG8gc2tpcCBub19vcCdzIGJlZm9yZSB3ZSBsb29rIGZvciB0aGUKKysgICAgICAgICAgICAgc3RhcnRfbWVtb3J5IGluIGNhc2UgdGhpcyBvbl9mYWlsdXJlX2p1bXAgaXMgaGFwcGVuaW5nIGFzCisrICAgICAgICAgICAgIHRoZSByZXN1bHQgb2YgYSBjb21wbGV0ZWQgc3VjY2VlZF9uLCBhcyBpbiBcKGFcKVx7MSwzXH1iXDEKKysgICAgICAgICAgICAgYWdhaW5zdCBhYmEuICAqLworKyAgICAgICAgICB3aGlsZSAocDEgPCBwZW5kICYmIChyZV9vcGNvZGVfdCkgKnAxID09IG5vX29wKQorKyAgICAgICAgICAgIHAxKys7CisrCisrICAgICAgICAgIGlmIChwMSA8IHBlbmQgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gc3RhcnRfbWVtb3J5KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIC8qIFdlIGhhdmUgYSBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIgbm93LiAgVGhpcyB3aWxsCisrICAgICAgICAgICAgICAgICBnZXQgcmVzZXQgYXQgdGhlIHN0YXJ0X21lbW9yeSB3ZSBhcmUgYWJvdXQgdG8gZ2V0IHRvLAorKyAgICAgICAgICAgICAgICAgYnV0IHdlIHdpbGwgaGF2ZSBzYXZlZCBhbGwgdGhlIHJlZ2lzdGVycyByZWxldmFudCB0bworKyAgICAgICAgICAgICAgICAgdGhpcyByZXBldGl0aW9uIG9wLCBhcyBkZXNjcmliZWQgYWJvdmUuICAqLworKyAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gKihwMSArIDEpICsgKihwMSArIDIpOworKyAgICAgICAgICAgICAgaWYgKGxvd2VzdF9hY3RpdmVfcmVnID09IE5PX0xPV0VTVF9BQ1RJVkVfUkVHKQorKyAgICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9ICoocDEgKyAxKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIjpcbiIpOworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAgKyBtY250LCBkLCAtMik7CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgLyogQSBzbWFydCByZXBlYXQgZW5kcyB3aXRoIGBtYXliZV9wb3BfanVtcCcuCisrCSAgIFdlIGNoYW5nZSBpdCB0byBlaXRoZXIgYHBvcF9mYWlsdXJlX2p1bXAnIG9yIGBqdW1wJy4gICovCisrICAgICAgICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBtYXliZV9wb3BfanVtcCAlZC5cbiIsIG1jbnQpOworKyAgICAgICAgICB7CisrCSAgICByZWdpc3RlciBVQ0hBUl9UICpwMiA9IHA7CisrCisrICAgICAgICAgICAgLyogQ29tcGFyZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXBlYXQgd2l0aCB3aGF0IGluIHRoZQorKyAgICAgICAgICAgICAgIHBhdHRlcm4gZm9sbG93cyBpdHMgZW5kLiBJZiB3ZSBjYW4gZXN0YWJsaXNoIHRoYXQgdGhlcmUKKysgICAgICAgICAgICAgICBpcyBub3RoaW5nIHRoYXQgdGhleSB3b3VsZCBib3RoIG1hdGNoLCBpLmUuLCB0aGF0IHdlCisrICAgICAgICAgICAgICAgd291bGQgaGF2ZSB0byBiYWNrdHJhY2sgYmVjYXVzZSBvZiAoYXMgaW4sIGUuZy4sIGBhKmEnKQorKyAgICAgICAgICAgICAgIHRoZW4gd2UgY2FuIGNoYW5nZSB0byBwb3BfZmFpbHVyZV9qdW1wLCBiZWNhdXNlIHdlJ2xsCisrICAgICAgICAgICAgICAgbmV2ZXIgaGF2ZSB0byBiYWNrdHJhY2suCisrCisrICAgICAgICAgICAgICAgVGhpcyBpcyBub3QgdHJ1ZSBpbiB0aGUgY2FzZSBvZiBhbHRlcm5hdGl2ZXM6IGluCisrICAgICAgICAgICAgICAgYChhfGFiKSonIHdlIGRvIG5lZWQgdG8gYmFja3RyYWNrIHRvIHRoZSBgYWInIGFsdGVybmF0aXZlCisrICAgICAgICAgICAgICAgKGUuZy4sIGlmIHRoZSBzdHJpbmcgd2FzIGBhYicpLiAgQnV0IGluc3RlYWQgb2YgdHJ5aW5nIHRvCisrICAgICAgICAgICAgICAgZGV0ZWN0IHRoYXQgaGVyZSwgdGhlIGFsdGVybmF0aXZlIGhhcyBwdXQgb24gYSBkdW1teQorKyAgICAgICAgICAgICAgIGZhaWx1cmUgcG9pbnQgd2hpY2ggaXMgd2hhdCB3ZSB3aWxsIGVuZCB1cCBwb3BwaW5nLiAgKi8KKysKKysJICAgIC8qIFNraXAgb3ZlciBvcGVuL2Nsb3NlLWdyb3VwIGNvbW1hbmRzLgorKwkgICAgICAgSWYgd2hhdCBmb2xsb3dzIHRoaXMgbG9vcCBpcyBhIC4uLisgY29uc3RydWN0LAorKwkgICAgICAgbG9vayBhdCB3aGF0IGJlZ2lucyBpdHMgYm9keSwgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvCisrCSAgICAgICBtYXRjaCBhdCBsZWFzdCBvbmUgb2YgdGhhdC4gICovCisrCSAgICB3aGlsZSAoMSkKKysJICAgICAgeworKwkJaWYgKHAyICsgMiA8IHBlbmQKKysJCSAgICAmJiAoKHJlX29wY29kZV90KSAqcDIgPT0gc3RvcF9tZW1vcnkKKysJCQl8fCAocmVfb3Bjb2RlX3QpICpwMiA9PSBzdGFydF9tZW1vcnkpKQorKwkJICBwMiArPSAzOworKwkJZWxzZSBpZiAocDIgKyAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUgPCBwZW5kCisrCQkJICYmIChyZV9vcGNvZGVfdCkgKnAyID09IGR1bW15X2ZhaWx1cmVfanVtcCkKKysJCSAgcDIgKz0gMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKwkJZWxzZQorKwkJICBicmVhazsKKysJICAgICAgfQorKworKwkgICAgcDEgPSBwICsgbWNudDsKKysJICAgIC8qIHAxWzBdIC4uLiBwMVsyXSBhcmUgdGhlIGBvbl9mYWlsdXJlX2p1bXAnIGNvcnJlc3BvbmRpbmcKKysJICAgICAgIHRvIHRoZSBgbWF5YmVfZmluYWxpemVfanVtcCcgb2YgdGhpcyBjYXNlLiAgRXhhbWluZSB3aGF0CisrCSAgICAgICBmb2xsb3dzLiAgKi8KKysKKysgICAgICAgICAgICAvKiBJZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCB3ZSBjYW4gY2hhbmdlLiAgKi8KKysgICAgICAgICAgICBpZiAocDIgPT0gcGVuZCkKKysJICAgICAgeworKwkJLyogQ29uc2lkZXIgd2hhdCBoYXBwZW5zIHdoZW4gbWF0Y2hpbmcgIjpcKC4qXCkiCisrCQkgICBhZ2FpbnN0ICI6LyIuICBJIGRvbid0IHJlYWxseSB1bmRlcnN0YW5kIHRoaXMgY29kZQorKwkJICAgeWV0LiAgKi8KKysgIAkgICAgICAgIHBbLSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSA9IChVQ0hBUl9UKQorKwkJICBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICBERUJVR19QUklOVDEKKysgICAgICAgICAgICAgICAgICAoIiAgRW5kIG9mIHBhdHRlcm46IGNoYW5nZSB0byBgcG9wX2ZhaWx1cmVfanVtcCcuXG4iKTsKKysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBlbHNlIGlmICgocmVfb3Bjb2RlX3QpICpwMiA9PSBleGFjdG4KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgICAgfHwgKHJlX29wY29kZV90KSAqcDIgPT0gZXhhY3RuX2JpbgorKyNlbmRpZgorKwkJICAgICB8fCAoYnVmcC0+bmV3bGluZV9hbmNob3IgJiYgKHJlX29wY29kZV90KSAqcDIgPT0gZW5kbGluZSkpCisrCSAgICAgIHsKKysJCXJlZ2lzdGVyIFVDSEFSX1QgYworKyAgICAgICAgICAgICAgICAgID0gKnAyID09IChVQ0hBUl9UKSBlbmRsaW5lID8gJ1xuJyA6IHAyWzJdOworKworKyAgICAgICAgICAgICAgICBpZiAoKChyZV9vcGNvZGVfdCkgcDFbMStPRkZTRVRfQUREUkVTU19TSVpFXSA9PSBleGFjdG4KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgICAgfHwgKHJlX29wY29kZV90KSBwMVsxK09GRlNFVF9BRERSRVNTX1NJWkVdID09IGV4YWN0bl9iaW4KKysjZW5kaWYKKysJCSAgICApICYmIHAxWzMrT0ZGU0VUX0FERFJFU1NfU0laRV0gIT0gYykKKysgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICBwWy0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gPSAoVUNIQVJfVCkKKysJCSAgICAgIHBvcF9mYWlsdXJlX2p1bXA7CisrI2lmZGVmIFdDSEFSCisrCQkgICAgICBERUJVR19QUklOVDMgKCIgICVDICE9ICVDID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iLAorKwkJCQkgICAgKHdpbnRfdCkgYywKKysJCQkJICAgICh3aW50X3QpIHAxWzMrT0ZGU0VUX0FERFJFU1NfU0laRV0pOworKyNlbHNlCisrCQkgICAgICBERUJVR19QUklOVDMgKCIgICVjICE9ICVjID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iLAorKwkJCQkgICAgKGNoYXIpIGMsCisrCQkJCSAgICAoY2hhcikgcDFbMytPRkZTRVRfQUREUkVTU19TSVpFXSk7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgfQorKworKyNpZm5kZWYgV0NIQVIKKysJCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldAorKwkJCSB8fCAocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXRfbm90KQorKwkJICB7CisrCQkgICAgaW50IG5lZ2F0ZSA9IChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldF9ub3Q7CisrCisrCQkgICAgaWYgKGMgPCAodW5zaWduZWQpIChwMVs0XSAqIEJZVEVXSURUSCkKKysJCQkmJiBwMVs1ICsgYyAvIEJZVEVXSURUSF0gJiAoMSA8PCAoYyAlIEJZVEVXSURUSCkpKQorKwkJICAgICAgbmVnYXRlID0gIW5lZ2F0ZTsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIGBuZWdhdGUnIGlzIGVxdWFsIHRvIDEgaWYgYyB3b3VsZCBtYXRjaCwgd2hpY2ggbWVhbnMKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdlIGNhbid0IGNoYW5nZSB0byBwb3BfZmFpbHVyZV9qdW1wLiAgKi8KKysJCSAgICBpZiAoIW5lZ2F0ZSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyNlbmRpZiAvKiBub3QgV0NIQVIgKi8KKysJICAgICAgfQorKyNpZm5kZWYgV0NIQVIKKysgICAgICAgICAgICBlbHNlIGlmICgocmVfb3Bjb2RlX3QpICpwMiA9PSBjaGFyc2V0KQorKwkgICAgICB7CisrCQkvKiBXZSB3aW4gaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbG9vcCBpcyBub3QgcGFydAorKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgY2hhcnNldC4gICovCisrICAgICAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGV4YWN0bgorKyAJCSAgICAmJiAhICgoaW50KSBwMlsxXSAqIEJZVEVXSURUSCA+IChpbnQpIHAxWzVdCisrIAkJCSAgJiYgKHAyWzIgKyBwMVs1XSAvIEJZVEVXSURUSF0KKysgCQkJICAgICAgJiAoMSA8PCAocDFbNV0gJSBCWVRFV0lEVEgpKSkpKQorKwkJICB7CisrCQkgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysJCSAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrCQllbHNlIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXRfbm90KQorKwkJICB7CisrCQkgICAgaW50IGlkeDsKKysJCSAgICAvKiBXZSB3aW4gaWYgdGhlIGNoYXJzZXRfbm90IGluc2lkZSB0aGUgbG9vcAorKwkJICAgICAgIGxpc3RzIGV2ZXJ5IGNoYXJhY3RlciBsaXN0ZWQgaW4gdGhlIGNoYXJzZXQgYWZ0ZXIuICAqLworKwkJICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgKGludCkgcDJbMV07IGlkeCsrKQorKwkJICAgICAgaWYgKCEgKHAyWzIgKyBpZHhdID09IDAKKysJCQkgICAgIHx8IChpZHggPCAoaW50KSBwMVs0XQorKwkJCQkgJiYgKChwMlsyICsgaWR4XSAmIH4gcDFbNSArIGlkeF0pID09IDApKSkpCisrCQkJYnJlYWs7CisrCisrCQkgICAgaWYgKGlkeCA9PSBwMlsxXSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKwkJZWxzZSBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0KQorKwkJICB7CisrCQkgICAgaW50IGlkeDsKKysJCSAgICAvKiBXZSB3aW4gaWYgdGhlIGNoYXJzZXQgaW5zaWRlIHRoZSBsb29wCisrCQkgICAgICAgaGFzIG5vIG92ZXJsYXAgd2l0aCB0aGUgb25lIGFmdGVyIHRoZSBsb29wLiAgKi8KKysJCSAgICBmb3IgKGlkeCA9IDA7CisrCQkJIGlkeCA8IChpbnQpIHAyWzFdICYmIGlkeCA8IChpbnQpIHAxWzRdOworKwkJCSBpZHgrKykKKysJCSAgICAgIGlmICgocDJbMiArIGlkeF0gJiBwMVs1ICsgaWR4XSkgIT0gMCkKKysJCQlicmVhazsKKysKKysJCSAgICBpZiAoaWR4ID09IHAyWzFdIHx8IGlkeCA9PSBwMVs0XSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKwkgICAgICB9CisrI2VuZGlmIC8qIG5vdCBXQ0hBUiAqLworKwkgIH0KKysJICBwIC09IE9GRlNFVF9BRERSRVNTX1NJWkU7CS8qIFBvaW50IGF0IHJlbGF0aXZlIGFkZHJlc3MgYWdhaW4uICAqLworKwkgIGlmICgocmVfb3Bjb2RlX3QpIHBbLTFdICE9IHBvcF9mYWlsdXJlX2p1bXApCisrCSAgICB7CisrCSAgICAgIHBbLTFdID0gKFVDSEFSX1QpIGp1bXA7CisrICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE1hdGNoID0+IGp1bXAuXG4iKTsKKysJICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrCSAgICB9CisrICAgICAgICAvKiBOb3RlIGZhbGwgdGhyb3VnaC4gICovCisrCisrCisrCS8qIFRoZSBlbmQgb2YgYSBzaW1wbGUgcmVwZWF0IGhhcyBhIHBvcF9mYWlsdXJlX2p1bXAgYmFjayB0bworKyAgICAgICAgICAgaXRzIG1hdGNoaW5nIG9uX2ZhaWx1cmVfanVtcCwgd2hlcmUgdGhlIGxhdHRlciB3aWxsIHB1c2ggYQorKyAgICAgICAgICAgZmFpbHVyZSBwb2ludC4gIFRoZSBwb3BfZmFpbHVyZV9qdW1wIHRha2VzIG9mZiBmYWlsdXJlCisrICAgICAgICAgICBwb2ludHMgcHV0IG9uIGJ5IHRoaXMgcG9wX2ZhaWx1cmVfanVtcCdzIG1hdGNoaW5nCisrICAgICAgICAgICBvbl9mYWlsdXJlX2p1bXA7IHdlIGdvdCB0aHJvdWdoIHRoZSBwYXR0ZXJuIHRvIGhlcmUgZnJvbSB0aGUKKysgICAgICAgICAgIG1hdGNoaW5nIG9uX2ZhaWx1cmVfanVtcCwgc28gZGlkbid0IGZhaWwuICAqLworKyAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgLyogV2UgbmVlZCB0byBwYXNzIHNlcGFyYXRlIHN0b3JhZ2UgZm9yIHRoZSBsb3dlc3QgYW5kCisrICAgICAgICAgICAgICAgaGlnaGVzdCByZWdpc3RlcnMsIGV2ZW4gdGhvdWdoIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlCisrICAgICAgICAgICAgICAgYWN0dWFsIHZhbHVlcy4gIE90aGVyd2lzZSwgd2Ugd2lsbCByZXN0b3JlIG9ubHkgb25lCisrICAgICAgICAgICAgICAgcmVnaXN0ZXIgZnJvbSB0aGUgc3RhY2ssIHNpbmNlIGxvd2VzdCB3aWxsID09IGhpZ2hlc3QgaW4KKysgICAgICAgICAgICAgICBgcG9wX2ZhaWx1cmVfcG9pbnQnLiAgKi8KKysgICAgICAgICAgICBhY3RpdmVfcmVnX3QgZHVtbXlfbG93X3JlZywgZHVtbXlfaGlnaF9yZWc7CisrICAgICAgICAgICAgVUNIQVJfVCAqcGR1bW15IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9IE5VTEw7CisrICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpzZHVtbXkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0gTlVMTDsKKysKKysgICAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgIFBPUF9GQUlMVVJFX1BPSU5UIChzZHVtbXksIHBkdW1teSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfbG93X3JlZywgZHVtbXlfaGlnaF9yZWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kdW1teSwgcmVnX2R1bW15LCByZWdfaW5mb19kdW1teSk7CisrICAgICAgICAgIH0KKysJICAvKiBOb3RlIGZhbGwgdGhyb3VnaC4gICovCisrCisrCXVuY29uZGl0aW9uYWxfanVtcDoKKysjaWZkZWYgX0xJQkMKKysJICBERUJVR19QUklOVDIgKCJcbiVwOiAiLCBwKTsKKysjZWxzZQorKwkgIERFQlVHX1BSSU5UMiAoIlxuMHgleDogIiwgcCk7CisrI2VuZGlmCisrICAgICAgICAgIC8qIE5vdGUgZmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgICAgIC8qIFVuY29uZGl0aW9uYWxseSBqdW1wICh3aXRob3V0IHBvcHBpbmcgYW55IGZhaWx1cmUgcG9pbnRzKS4gICovCisrICAgICAgICBjYXNlIGp1bXA6CisrCSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwkvKiBHZXQgdGhlIGFtb3VudCB0byBqdW1wLiAgKi8KKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGp1bXAgJWQgIiwgbWNudCk7CisrCSAgcCArPSBtY250OwkJCQkvKiBEbyB0aGUganVtcC4gICovCisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIih0byAlcCkuXG4iLCBwKTsKKysjZWxzZQorKyAgICAgICAgICBERUJVR19QUklOVDIgKCIodG8gMHgleCkuXG4iLCBwKTsKKysjZW5kaWYKKysJICBicmVhazsKKysKKysKKysgICAgICAgIC8qIFdlIG5lZWQgdGhpcyBvcGNvZGUgc28gd2UgY2FuIGRldGVjdCB3aGVyZSBhbHRlcm5hdGl2ZXMgZW5kCisrICAgICAgICAgICBpbiBgZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCcgZXQgYWwuICAqLworKyAgICAgICAgY2FzZSBqdW1wX3Bhc3RfYWx0OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcganVtcF9wYXN0X2FsdC5cbiIpOworKyAgICAgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysKKysKKysgICAgICAgIC8qIE5vcm1hbGx5LCB0aGUgb25fZmFpbHVyZV9qdW1wIHB1c2hlcyBhIGZhaWx1cmUgcG9pbnQsIHdoaWNoCisrICAgICAgICAgICB0aGVuIGdldHMgcG9wcGVkIGF0IHBvcF9mYWlsdXJlX2p1bXAuICBXZSB3aWxsIGVuZCB1cCBhdAorKyAgICAgICAgICAgcG9wX2ZhaWx1cmVfanVtcCwgYWxzbywgYW5kIHdpdGggYSBwYXR0ZXJuIG9mLCBzYXksIGBhKycsIHdlCisrICAgICAgICAgICBhcmUgc2tpcHBpbmcgb3ZlciB0aGUgb25fZmFpbHVyZV9qdW1wLCBzbyB3ZSBoYXZlIHRvIHB1c2gKKysgICAgICAgICAgIHNvbWV0aGluZyBtZWFuaW5nbGVzcyBmb3IgcG9wX2ZhaWx1cmVfanVtcCB0byBwb3AuICAqLworKyAgICAgICAgY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBkdW1teV9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgLyogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXNoIGZvciB0aGUgc3RyaW5nIGhlcmUuICBXaGF0CisrICAgICAgICAgICAgIHRoZSBjb2RlIGF0IGBmYWlsJyB0ZXN0cyBpcyB0aGUgdmFsdWUgZm9yIHRoZSBwYXR0ZXJuLiAgKi8KKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChOVUxMLCBOVUxMLCAtMik7CisrICAgICAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKworKworKyAgICAgICAgLyogQXQgdGhlIGVuZCBvZiBhbiBhbHRlcm5hdGl2ZSwgd2UgbmVlZCB0byBwdXNoIGEgZHVtbXkgZmFpbHVyZQorKyAgICAgICAgICAgcG9pbnQgaW4gY2FzZSB3ZSBhcmUgZm9sbG93ZWQgYnkgYSBgcG9wX2ZhaWx1cmVfanVtcCcsIGJlY2F1c2UKKysgICAgICAgICAgIHdlIGRvbid0IHdhbnQgdGhlIGZhaWx1cmUgcG9pbnQgZm9yIHRoZSBhbHRlcm5hdGl2ZSB0byBiZQorKyAgICAgICAgICAgcG9wcGVkLiAgRm9yIGV4YW1wbGUsIG1hdGNoaW5nIGAoYXxhYikqJyBhZ2FpbnN0IGBhYWInCisrICAgICAgICAgICByZXF1aXJlcyB0aGF0IHdlIG1hdGNoIHRoZSBgYWInIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgIGNhc2UgcHVzaF9kdW1teV9mYWlsdXJlOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgcHVzaF9kdW1teV9mYWlsdXJlLlxuIik7CisrICAgICAgICAgIC8qIFNlZSBjb21tZW50cyBqdXN0IGFib3ZlIGF0IGBkdW1teV9mYWlsdXJlX2p1bXAnIGFib3V0IHRoZQorKyAgICAgICAgICAgICB0d28gemVyb2VzLiAgKi8KKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChOVUxMLCBOVUxMLCAtMik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgLyogSGF2ZSB0byBzdWNjZWVkIG1hdGNoaW5nIHdoYXQgZm9sbG93cyBhdCBsZWFzdCBuIHRpbWVzLgorKyAgICAgICAgICAgQWZ0ZXIgdGhhdCwgaGFuZGxlIGxpa2UgYG9uX2ZhaWx1cmVfanVtcCcuICAqLworKyAgICAgICAgY2FzZSBzdWNjZWVkX246CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSIChtY250LCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBzdWNjZWVkX24gJWQuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgYXNzZXJ0IChtY250ID49IDApOworKyAgICAgICAgICAvKiBPcmlnaW5hbGx5LCB0aGlzIGlzIGhvdyBtYW55IHRpbWVzIHdlIEhBVkUgdG8gc3VjY2VlZC4gICovCisrICAgICAgICAgIGlmIChtY250ID4gMCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgbWNudC0tOworKwkgICAgICAgcCArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgIFNUT1JFX05VTUJFUl9BTkRfSU5DUiAocCwgbWNudCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nICVwIHRvICVkLlxuIiwgcCAtIE9GRlNFVF9BRERSRVNTX1NJWkUKKysJCQkgICAgICwgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgMHgleCB0byAlZC5cbiIsIHAgLSBPRkZTRVRfQUREUkVTU19TSVpFCisrCQkJICAgICAsIG1jbnQpOworKyNlbmRpZgorKyAgICAgICAgICAgIH0KKysJICBlbHNlIGlmIChtY250ID09IDApCisrICAgICAgICAgICAgeworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQyICgiICBTZXR0aW5nIHR3byBieXRlcyBmcm9tICVwIHRvIG5vX29wLlxuIiwKKysJCQkgICAgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyNlbHNlCisrICAgICAgICAgICAgICBERUJVR19QUklOVDIgKCIgIFNldHRpbmcgdHdvIGJ5dGVzIGZyb20gMHgleCB0byBub19vcC5cbiIsCisrCQkJICAgIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysjZW5kaWYgLyogX0xJQkMgKi8KKysKKysjaWZkZWYgV0NIQVIKKysJICAgICAgcFsxXSA9IChVQ0hBUl9UKSBub19vcDsKKysjZWxzZQorKwkgICAgICBwWzJdID0gKFVDSEFSX1QpIG5vX29wOworKyAgICAgICAgICAgICAgcFszXSA9IChVQ0hBUl9UKSBub19vcDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgICAgICAgIGdvdG8gb25fZmFpbHVyZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wX246CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSIChtY250LCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBqdW1wX24gJWQuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgLyogT3JpZ2luYWxseSwgdGhpcyBpcyBob3cgbWFueSB0aW1lcyB3ZSBDQU4ganVtcC4gICovCisrICAgICAgICAgIGlmIChtY250KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBtY250LS07CisrICAgICAgICAgICAgICAgU1RPUkVfTlVNQkVSIChwICsgT0ZGU0VUX0FERFJFU1NfU0laRSwgbWNudCk7CisrCisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nICVwIHRvICVkLlxuIiwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUsCisrCQkJICAgICBtY250KTsKKysjZWxzZQorKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAweCV4IHRvICVkLlxuIiwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUsCisrCQkJICAgICBtY250KTsKKysjZW5kaWYgLyogX0xJQkMgKi8KKysJICAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgLyogSWYgZG9uJ3QgaGF2ZSB0byBqdW1wIGFueSBtb3JlLCBza2lwIG92ZXIgdGhlIHJlc3Qgb2YgY29tbWFuZC4gICovCisrCSAgZWxzZQorKwkgICAgcCArPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc2V0X251bWJlcl9hdDoKKysJICB7CisrICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHNldF9udW1iZXJfYXQuXG4iKTsKKysKKysgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrICAgICAgICAgICAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nICVwIHRvICVkLlxuIiwgcDEsIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nIDB4JXggdG8gJWQuXG4iLCBwMSwgbWNudCk7CisrI2VuZGlmCisrCSAgICBTVE9SRV9OVU1CRVIgKHAxLCBtY250KTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgfQorKworKyNpZiAwCisrCS8qIFRoZSBERUMgQWxwaGEgQyBjb21waWxlciAzLnggZ2VuZXJhdGVzIGluY29ycmVjdCBjb2RlIGZvciB0aGUKKysJICAgdGVzdCAgV09SRENIQVJfUCAoZCAtIDEpICE9IFdPUkRDSEFSX1AgKGQpICBpbiB0aGUgZXhwYW5zaW9uIG9mCisrCSAgIEFUX1dPUkRfQk9VTkRBUlksIHNvIHRoaXMgY29kZSBpcyBkaXNhYmxlZC4gIEV4cGFuZGluZyB0aGUKKysJICAgbWFjcm8gYW5kIGludHJvZHVjaW5nIHRlbXBvcmFyeSB2YXJpYWJsZXMgd29ya3MgYXJvdW5kIHRoZSBidWcuICAqLworKworKwljYXNlIHdvcmRib3VuZDoKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1dPUkRfQk9VTkRBUlkgKGQpKQorKwkgICAgYnJlYWs7CisrCSAgZ290byBmYWlsOworKworKwljYXNlIG5vdHdvcmRib3VuZDoKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm90d29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1dPUkRfQk9VTkRBUlkgKGQpKQorKwkgICAgZ290byBmYWlsOworKwkgIGJyZWFrOworKyNlbHNlCisrCWNhc2Ugd29yZGJvdW5kOgorKwl7CisrCSAgYm9vbGVhbiBwcmV2Y2hhciwgdGhpc2NoYXI7CisrCisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgQVRfU1RSSU5HU19FTkQgKGQpKQorKwkgICAgYnJlYWs7CisrCisrCSAgcHJldmNoYXIgPSBXT1JEQ0hBUl9QIChkIC0gMSk7CisrCSAgdGhpc2NoYXIgPSBXT1JEQ0hBUl9QIChkKTsKKysJICBpZiAocHJldmNoYXIgIT0gdGhpc2NoYXIpCisrCSAgICBicmVhazsKKysJICBnb3RvIGZhaWw7CisrCX0KKysKKysgICAgICBjYXNlIG5vdHdvcmRib3VuZDoKKysJeworKwkgIGJvb2xlYW4gcHJldmNoYXIsIHRoaXNjaGFyOworKworKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub3R3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpIHx8IEFUX1NUUklOR1NfRU5EIChkKSkKKysJICAgIGdvdG8gZmFpbDsKKysKKysJICBwcmV2Y2hhciA9IFdPUkRDSEFSX1AgKGQgLSAxKTsKKysJICB0aGlzY2hhciA9IFdPUkRDSEFSX1AgKGQpOworKwkgIGlmIChwcmV2Y2hhciAhPSB0aGlzY2hhcikKKysJICAgIGdvdG8gZmFpbDsKKysJICBicmVhazsKKysJfQorKyNlbmRpZgorKworKwljYXNlIHdvcmRiZWc6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkYmVnLlxuIik7CisrCSAgaWYgKCFBVF9TVFJJTkdTX0VORCAoZCkgJiYgV09SRENIQVJfUCAoZCkKKysJICAgICAgJiYgKEFUX1NUUklOR1NfQkVHIChkKSB8fCAhV09SRENIQVJfUCAoZCAtIDEpKSkKKysJICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCWNhc2Ugd29yZGVuZDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRlbmQuXG4iKTsKKysJICBpZiAoIUFUX1NUUklOR1NfQkVHIChkKSAmJiBXT1JEQ0hBUl9QIChkIC0gMSkKKysgICAgICAgICAgICAgICYmIChBVF9TVFJJTkdTX0VORCAoZCkgfHwgIVdPUkRDSEFSX1AgKGQpKSkKKysJICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrI2lmZGVmIGVtYWNzCisrICAJY2FzZSBiZWZvcmVfZG90OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYmVmb3JlX2RvdC5cbiIpOworKyAJICBpZiAoUFRSX0NIQVJfUE9TICgodW5zaWduZWQgY2hhciAqKSBkKSA+PSBwb2ludCkKKysgIAkgICAgZ290byBmYWlsOworKyAgCSAgYnJlYWs7CisrCisrICAJY2FzZSBhdF9kb3Q6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBhdF9kb3QuXG4iKTsKKysgCSAgaWYgKFBUUl9DSEFSX1BPUyAoKHVuc2lnbmVkIGNoYXIgKikgZCkgIT0gcG9pbnQpCisrICAJICAgIGdvdG8gZmFpbDsKKysgIAkgIGJyZWFrOworKworKyAgCWNhc2UgYWZ0ZXJfZG90OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYWZ0ZXJfZG90LlxuIik7CisrICAgICAgICAgIGlmIChQVFJfQ0hBUl9QT1MgKCh1bnNpZ25lZCBjaGFyICopIGQpIDw9IHBvaW50KQorKyAgCSAgICBnb3RvIGZhaWw7CisrICAJICBicmVhazsKKysKKysJY2FzZSBzeW50YXhzcGVjOgorKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgc3ludGF4c3BlYyAlZC5cbiIsIG1jbnQpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIGdvdG8gbWF0Y2hzeW50YXg7CisrCisrICAgICAgICBjYXNlIHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgRW1hY3Mgd29yZGNoYXIuXG4iKTsKKysJICBtY250ID0gKGludCkgU3dvcmQ7CisrICAgICAgICBtYXRjaHN5bnRheDoKKysJICBQUkVGRVRDSCAoKTsKKysJICAvKiBDYW4ndCB1c2UgKmQrKyBoZXJlOyBTWU5UQVggbWF5IGJlIGFuIHVuc2FmZSBtYWNyby4gICovCisrCSAgZCsrOworKwkgIGlmIChTWU5UQVggKGRbLTFdKSAhPSAoZW51bSBzeW50YXhjb2RlKSBtY250KQorKwkgICAgZ290byBmYWlsOworKyAgICAgICAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKwkgIGJyZWFrOworKworKwljYXNlIG5vdHN5bnRheHNwZWM6CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBub3RzeW50YXhzcGVjICVkLlxuIiwgbWNudCk7CisrCSAgbWNudCA9ICpwKys7CisrCSAgZ290byBtYXRjaG5vdHN5bnRheDsKKysKKysgICAgICAgIGNhc2Ugbm90d29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBFbWFjcyBub3R3b3JkY2hhci5cbiIpOworKwkgIG1jbnQgPSAoaW50KSBTd29yZDsKKysgICAgICAgIG1hdGNobm90c3ludGF4OgorKwkgIFBSRUZFVENIICgpOworKwkgIC8qIENhbid0IHVzZSAqZCsrIGhlcmU7IFNZTlRBWCBtYXkgYmUgYW4gdW5zYWZlIG1hY3JvLiAgKi8KKysJICBkKys7CisrCSAgaWYgKFNZTlRBWCAoZFstMV0pID09IChlbnVtIHN5bnRheGNvZGUpIG1jbnQpCisrCSAgICBnb3RvIGZhaWw7CisrCSAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrI2Vsc2UgLyogbm90IGVtYWNzICovCisrCWNhc2Ugd29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub24tRW1hY3Mgd29yZGNoYXIuXG4iKTsKKysJICBQUkVGRVRDSCAoKTsKKysgICAgICAgICAgaWYgKCFXT1JEQ0hBUl9QIChkKSkKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrCSAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgZCsrOworKwkgIGJyZWFrOworKworKwljYXNlIG5vdHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm9uLUVtYWNzIG5vdHdvcmRjaGFyLlxuIik7CisrCSAgUFJFRkVUQ0ggKCk7CisrCSAgaWYgKFdPUkRDSEFSX1AgKGQpKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgZCsrOworKwkgIGJyZWFrOworKyNlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIGFib3J0ICgpOworKwl9CisrICAgICAgY29udGludWU7ICAvKiBTdWNjZXNzZnVsbHkgZXhlY3V0ZWQgb25lIHBhdHRlcm4gY29tbWFuZDsga2VlcCBnb2luZy4gICovCisrCisrCisrICAgIC8qIFdlIGdvdG8gaGVyZSBpZiBhIG1hdGNoaW5nIG9wZXJhdGlvbiBmYWlscy4gKi8KKysgICAgZmFpbDoKKysgICAgICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpCisrCXsgLyogQSByZXN0YXJ0IHBvaW50IGlzIGtub3duLiAgUmVzdG9yZSB0byB0aGF0IHN0YXRlLiAgKi8KKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiXG5GQUlMOlxuIik7CisrICAgICAgICAgIFBPUF9GQUlMVVJFX1BPSU5UIChkLCBwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcsIGhpZ2hlc3RfYWN0aXZlX3JlZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3N0YXJ0LCByZWdlbmQsIHJlZ19pbmZvKTsKKysKKysgICAgICAgICAgLyogSWYgdGhpcyBmYWlsdXJlIHBvaW50IGlzIGEgZHVtbXksIHRyeSB0aGUgbmV4dCBvbmUuICAqLworKyAgICAgICAgICBpZiAoIXApCisrCSAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAgIC8qIElmIHdlIGZhaWxlZCB0byB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBkb24ndCBleGFtaW5lICpwLiAgKi8KKysJICBhc3NlcnQgKHAgPD0gcGVuZCk7CisrICAgICAgICAgIGlmIChwIDwgcGVuZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBib29sZWFuIGlzX2FfanVtcF9uID0gZmFsc2U7CisrCisrICAgICAgICAgICAgICAvKiBJZiBmYWlsZWQgdG8gYSBiYWNrd2FyZHMganVtcCB0aGF0J3MgcGFydCBvZiBhIHJlcGV0aXRpb24KKysgICAgICAgICAgICAgICAgIGxvb3AsIG5lZWQgdG8gcG9wIHRoaXMgZmFpbHVyZSBwb2ludCBhbmQgdXNlIHRoZSBuZXh0IG9uZS4gICovCisrICAgICAgICAgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnApCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBqdW1wX246CisrICAgICAgICAgICAgICAgICAgaXNfYV9qdW1wX24gPSB0cnVlOworKyAgICAgICAgICAgICAgICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKyAgICAgICAgICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgICAgICAgIGNhc2UganVtcDoKKysgICAgICAgICAgICAgICAgICBwMSA9IHAgKyAxOworKyAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgICAgICAgICAgcDEgKz0gbWNudDsKKysKKysgICAgICAgICAgICAgICAgICBpZiAoKGlzX2FfanVtcF9uICYmIChyZV9vcGNvZGVfdCkgKnAxID09IHN1Y2NlZWRfbikKKysgICAgICAgICAgICAgICAgICAgICAgfHwgKCFpc19hX2p1bXBfbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gb25fZmFpbHVyZV9qdW1wKSkKKysgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovIDsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgaWYgKGQgPj0gc3RyaW5nMSAmJiBkIDw9IGVuZDEpCisrCSAgICBkZW5kID0gZW5kX21hdGNoXzE7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgYnJlYWs7ICAgLyogTWF0Y2hpbmcgYXQgdGhpcyBzdGFydGluZyBwb2ludCByZWFsbHkgZmFpbHMuICAqLworKyAgICB9IC8qIGZvciAoOzspICovCisrCisrICBpZiAoYmVzdF9yZWdzX3NldCkKKysgICAgZ290byByZXN0b3JlX2Jlc3RfcmVnczsKKysKKysgIEZSRUVfVkFSSUFCTEVTICgpOworKworKyAgcmV0dXJuIC0xOyAgICAgICAgIAkJCS8qIEZhaWx1cmUgdG8gbWF0Y2guICAqLworK30gLyogcmVfbWF0Y2hfMiAqLworKwwKKysvKiBTdWJyb3V0aW5lIGRlZmluaXRpb25zIGZvciByZV9tYXRjaF8yLiAgKi8KKysKKysKKysvKiBXZSBhcmUgcGFzc2VkIFAgcG9pbnRpbmcgdG8gYSByZWdpc3RlciBudW1iZXIgYWZ0ZXIgYSBzdGFydF9tZW1vcnkuCisrCisrICAgUmV0dXJuIHRydWUgaWYgdGhlIHBhdHRlcm4gdXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3RvcF9tZW1vcnkgY2FuCisrICAgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZywgYW5kIGZhbHNlIG90aGVyd2lzZS4KKysKKysgICBJZiB3ZSBmaW5kIHRoZSBtYXRjaGluZyBzdG9wX21lbW9yeSwgc2V0cyBQIHRvIHBvaW50IHRvIG9uZSBwYXN0IGl0cyBudW1iZXIuCisrICAgT3RoZXJ3aXNlLCBzZXRzIFAgdG8gYW4gdW5kZWZpbmVkIGJ5dGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIEVORC4KKysKKysgICBXZSBkb24ndCBoYW5kbGUgZHVwbGljYXRlcyBwcm9wZXJseSAoeWV0KS4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLCBVQ0hBUl9UICplbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pCisreworKyAgaW50IG1jbnQ7CisrICAvKiBQb2ludCB0byBhZnRlciB0aGUgYXJncyB0byB0aGUgc3RhcnRfbWVtb3J5LiAgKi8KKysgIFVDSEFSX1QgKnAxID0gKnAgKyAyOworKworKyAgd2hpbGUgKHAxIDwgZW5kKQorKyAgICB7CisrICAgICAgLyogU2tpcCBvdmVyIG9wY29kZXMgdGhhdCBjYW4gbWF0Y2ggbm90aGluZywgYW5kIHJldHVybiB0cnVlIG9yCisrCSBmYWxzZSwgYXMgYXBwcm9wcmlhdGUsIHdoZW4gd2UgZ2V0IHRvIG9uZSB0aGF0IGNhbid0LCBvciB0byB0aGUKKysgICAgICAgICBtYXRjaGluZyBzdG9wX21lbW9yeS4gICovCisrCisrICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSkKKysgICAgICAgIHsKKysgICAgICAgIC8qIENvdWxkIGJlIGVpdGhlciBhIGxvb3Agb3IgYSBzZXJpZXMgb2YgYWx0ZXJuYXRpdmVzLiAgKi8KKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBwMSsrOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKworKyAgICAgICAgICAvKiBJZiB0aGUgbmV4dCBvcGVyYXRpb24gaXMgbm90IGEganVtcCBiYWNrd2FyZHMgaW4gdGhlCisrCSAgICAgcGF0dGVybi4gICovCisrCisrCSAgaWYgKG1jbnQgPj0gMCkKKysJICAgIHsKKysgICAgICAgICAgICAgIC8qIEdvIHRocm91Z2ggdGhlIG9uX2ZhaWx1cmVfanVtcHMgb2YgdGhlIGFsdGVybmF0aXZlcywKKysgICAgICAgICAgICAgICAgIHNlZWluZyBpZiBhbnkgb2YgdGhlIGFsdGVybmF0aXZlcyBjYW5ub3QgbWF0Y2ggbm90aGluZy4KKysgICAgICAgICAgICAgICAgIFRoZSBsYXN0IGFsdGVybmF0aXZlIHN0YXJ0cyB3aXRoIG9ubHkgYSBqdW1wLAorKyAgICAgICAgICAgICAgICAgd2hlcmVhcyB0aGUgcmVzdCBzdGFydCB3aXRoIG9uX2ZhaWx1cmVfanVtcCBhbmQgZW5kCisrICAgICAgICAgICAgICAgICB3aXRoIGEganVtcCwgZS5nLiwgaGVyZSBpcyB0aGUgcGF0dGVybiBmb3IgYGF8YnxjJzoKKysKKysgICAgICAgICAgICAgICAgIC9vbl9mYWlsdXJlX2p1bXAvMC82L2V4YWN0bi8xL2EvanVtcF9wYXN0X2FsdC8wLzYKKysgICAgICAgICAgICAgICAgIC9vbl9mYWlsdXJlX2p1bXAvMC82L2V4YWN0bi8xL2IvanVtcF9wYXN0X2FsdC8wLzMKKysgICAgICAgICAgICAgICAgIC9leGFjdG4vMS9jCisrCisrICAgICAgICAgICAgICAgICBTbywgd2UgaGF2ZSB0byBmaXJzdCBnbyB0aHJvdWdoIHRoZSBmaXJzdCAobi0xKQorKyAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzIGFuZCB0aGVuIGRlYWwgd2l0aCB0aGUgbGFzdCBvbmUgc2VwYXJhdGVseS4gICovCisrCisrCisrICAgICAgICAgICAgICAvKiBEZWFsIHdpdGggdGhlIGZpcnN0IChuLTEpIGFsdGVybmF0aXZlcywgd2hpY2ggc3RhcnQKKysgICAgICAgICAgICAgICAgIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wIChzZWUgYWJvdmUpIHRoYXQganVtcHMgdG8gcmlnaHQKKysgICAgICAgICAgICAgICAgIHBhc3QgYSBqdW1wX3Bhc3RfYWx0LiAgKi8KKysKKysgICAgICAgICAgICAgIHdoaWxlICgocmVfb3Bjb2RlX3QpIHAxW21jbnQtKDErT0ZGU0VUX0FERFJFU1NfU0laRSldID09CisrCQkgICAgIGp1bXBfcGFzdF9hbHQpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAvKiBgbWNudCcgaG9sZHMgaG93IG1hbnkgYnl0ZXMgbG9uZyB0aGUgYWx0ZXJuYXRpdmUKKysgICAgICAgICAgICAgICAgICAgICBpcywgaW5jbHVkaW5nIHRoZSBlbmRpbmcgYGp1bXBfcGFzdF9hbHQnIGFuZAorKyAgICAgICAgICAgICAgICAgICAgIGl0cyBudW1iZXIuICAqLworKworKyAgICAgICAgICAgICAgICAgIGlmICghUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAocDEsIHAxICsgbWNudCAtCisrCQkJCQkJKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSwKKysJCQkJCQlyZWdfaW5mbykpCisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICAgICAgICAgICAgLyogTW92ZSB0byByaWdodCBhZnRlciB0aGlzIGFsdGVybmF0aXZlLCBpbmNsdWRpbmcgdGhlCisrCQkgICAgIGp1bXBfcGFzdF9hbHQuICAqLworKyAgICAgICAgICAgICAgICAgIHAxICs9IG1jbnQ7CisrCisrICAgICAgICAgICAgICAgICAgLyogQnJlYWsgaWYgaXQncyB0aGUgYmVnaW5uaW5nIG9mIGFuIG4tdGggYWx0ZXJuYXRpdmUKKysgICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXNuJ3QgYmVnaW4gd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAuICAqLworKyAgICAgICAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpICpwMSAhPSBvbl9mYWlsdXJlX2p1bXApCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysJCSAgLyogU3RpbGwgaGF2ZSB0byBjaGVjayB0aGF0IGl0J3Mgbm90IGFuIG4tdGgKKysJCSAgICAgYWx0ZXJuYXRpdmUgdGhhdCBzdGFydHMgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAuICAqLworKwkJICBwMSsrOworKyAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgcDFbbWNudC0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gIT0KKysJCSAgICAgIGp1bXBfcGFzdF9hbHQpCisrICAgICAgICAgICAgICAgICAgICB7CisrCQkgICAgICAvKiBHZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbi10aCBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAgICAgICAgICAgICAgIHAxIC09IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogRGVhbCB3aXRoIHRoZSBsYXN0IGFsdGVybmF0aXZlOiBnbyBiYWNrIGFuZCBnZXQgbnVtYmVyCisrICAgICAgICAgICAgICAgICBvZiB0aGUgYGp1bXBfcGFzdF9hbHQnIGp1c3QgYmVmb3JlIGl0LiAgYG1jbnQnIGNvbnRhaW5zCisrICAgICAgICAgICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUiAobWNudCwgcDEgLSBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysKKysgICAgICAgICAgICAgIGlmICghUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAocDEsIHAxICsgbWNudCwgcmVnX2luZm8pKQorKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICAgICAgICBwMSArPSBtY250OwkvKiBHZXQgcGFzdCB0aGUgbi10aCBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAgICAgfSAvKiBpZiBtY250ID4gMCAqLworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIGNhc2Ugc3RvcF9tZW1vcnk6CisrCSAgYXNzZXJ0IChwMVsxXSA9PSAqKnApOworKyAgICAgICAgICAqcCA9IHAxICsgMjsKKysgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBpZiAoIVBSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgZW5kLCByZWdfaW5mbykpCisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9IC8qIHdoaWxlIHAxIDwgZW5kICovCisrCisrICByZXR1cm4gZmFsc2U7CisrfSAvKiBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wICovCisrCisrCisrLyogU2ltaWxhciB0byBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wLCBidXQgZG9lc24ndCBkZWFsIHdpdGggYWx0ZXJuYXRpdmVzOgorKyAgIEl0IGV4cGVjdHMgUCB0byBiZSB0aGUgZmlyc3QgYnl0ZSBvZiBhIHNpbmdsZSBhbHRlcm5hdGl2ZSBhbmQgRU5EIG9uZQorKyAgIGJ5dGUgcGFzdCB0aGUgbGFzdC4gVGhlIGFsdGVybmF0aXZlIGNhbiBjb250YWluIGdyb3Vwcy4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICpwLCBVQ0hBUl9UICplbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKQorK3sKKysgIGludCBtY250OworKyAgVUNIQVJfVCAqcDEgPSBwOworKworKyAgd2hpbGUgKHAxIDwgZW5kKQorKyAgICB7CisrICAgICAgLyogU2tpcCBvdmVyIG9wY29kZXMgdGhhdCBjYW4gbWF0Y2ggbm90aGluZywgYW5kIGJyZWFrIHdoZW4gd2UgZ2V0CisrICAgICAgICAgdG8gb25lIHRoYXQgY2FuJ3QuICAqLworKworKyAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDEpCisrICAgICAgICB7CisrCS8qIEl0J3MgYSBsb29wLiAgKi8KKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBwMSsrOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICBwMSArPSBtY250OworKyAgICAgICAgICBicmVhazsKKysKKysJZGVmYXVsdDoKKysgICAgICAgICAgaWYgKCFQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIGVuZCwgcmVnX2luZm8pKQorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfSAgLyogd2hpbGUgcDEgPCBlbmQgKi8KKysKKysgIHJldHVybiB0cnVlOworK30gLyogYWx0X21hdGNoX251bGxfc3RyaW5nX3AgKi8KKysKKysKKysvKiBEZWFscyB3aXRoIHRoZSBvcHMgY29tbW9uIHRvIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AgYW5kCisrICAgYWx0X21hdGNoX251bGxfc3RyaW5nX3AuCisrCisrICAgU2V0cyBQIHRvIG9uZSBhZnRlciB0aGUgb3AgYW5kIGl0cyBhcmd1bWVudHMsIGlmIGFueS4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwgVUNIQVJfVCAqZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbykKKyt7CisrICBpbnQgbWNudDsKKysgIGJvb2xlYW4gcmV0OworKyAgaW50IHJlZ19ubzsKKysgIFVDSEFSX1QgKnAxID0gKnA7CisrCisrICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKyspCisrICAgIHsKKysgICAgY2FzZSBub19vcDoKKysgICAgY2FzZSBiZWdsaW5lOgorKyAgICBjYXNlIGVuZGxpbmU6CisrICAgIGNhc2UgYmVnYnVmOgorKyAgICBjYXNlIGVuZGJ1ZjoKKysgICAgY2FzZSB3b3JkYmVnOgorKyAgICBjYXNlIHdvcmRlbmQ6CisrICAgIGNhc2Ugd29yZGJvdW5kOgorKyAgICBjYXNlIG5vdHdvcmRib3VuZDoKKysjaWZkZWYgZW1hY3MKKysgICAgY2FzZSBiZWZvcmVfZG90OgorKyAgICBjYXNlIGF0X2RvdDoKKysgICAgY2FzZSBhZnRlcl9kb3Q6CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ugc3RhcnRfbWVtb3J5OgorKyAgICAgIHJlZ19ubyA9ICpwMTsKKysgICAgICBhc3NlcnQgKHJlZ19ubyA+IDAgJiYgcmVnX25vIDw9IE1BWF9SRUdOVU0pOworKyAgICAgIHJldCA9IFBSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBlbmQsIHJlZ19pbmZvKTsKKysKKysgICAgICAvKiBIYXZlIHRvIHNldCB0aGlzIGhlcmUgaW4gY2FzZSB3ZSdyZSBjaGVja2luZyBhIGdyb3VwIHdoaWNoCisrICAgICAgICAgY29udGFpbnMgYSBncm91cCBhbmQgYSBiYWNrIHJlZmVyZW5jZSB0byBpdC4gICovCisrCisrICAgICAgaWYgKFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1tyZWdfbm9dKSA9PSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFKQorKyAgICAgICAgUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW3JlZ19ub10pID0gcmV0OworKworKyAgICAgIGlmICghcmV0KQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICAvKiBJZiB0aGlzIGlzIGFuIG9wdGltaXplZCBzdWNjZWVkX24gZm9yIHplcm8gdGltZXMsIG1ha2UgdGhlIGp1bXAuICAqLworKyAgICBjYXNlIGp1bXA6CisrICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICBpZiAobWNudCA+PSAwKQorKyAgICAgICAgcDEgKz0gbWNudDsKKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ugc3VjY2VlZF9uOgorKyAgICAgIC8qIEdldCB0byB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHN1Y2NlZWQuICAqLworKyAgICAgIHAxICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysKKysgICAgICBpZiAobWNudCA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICBwMSAtPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgcDEgKz0gbWNudDsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgZHVwbGljYXRlOgorKyAgICAgIGlmICghUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwMV0pKQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIHNldF9udW1iZXJfYXQ6CisrICAgICAgcDEgKz0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgLyogQWxsIG90aGVyIG9wY29kZXMgbWVhbiB3ZSBjYW5ub3QgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gICovCisrICAgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyAgKnAgPSBwMTsKKysgIHJldHVybiB0cnVlOworK30gLyogY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3AgKi8KKysKKysKKysvKiBSZXR1cm4gemVybyBpZiBUUkFOU0xBVEVbUzFdIGFuZCBUUkFOU0xBVEVbUzJdIGFyZSBpZGVudGljYWwgZm9yIExFTgorKyAgIGJ5dGVzOyBub256ZXJvIG90aGVyd2lzZS4gICovCisrCisrc3RhdGljIGludAorK1BSRUZJWChiY21wX3RyYW5zbGF0ZSkgKGNvbnN0IENIQVJfVCAqczEsIGNvbnN0IENIQVJfVCAqczIsIHJlZ2lzdGVyIGludCBsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlKQorK3sKKysgIHJlZ2lzdGVyIGNvbnN0IFVDSEFSX1QgKnAxID0gKGNvbnN0IFVDSEFSX1QgKikgczE7CisrICByZWdpc3RlciBjb25zdCBVQ0hBUl9UICpwMiA9IChjb25zdCBVQ0hBUl9UICopIHMyOworKyAgd2hpbGUgKGxlbikKKysgICAgeworKyNpZmRlZiBXQ0hBUgorKyAgICAgIGlmICgoKCpwMTw9MHhmZik/dHJhbnNsYXRlWypwMSsrXToqcDErKykKKysJICAhPSAoKCpwMjw9MHhmZik/dHJhbnNsYXRlWypwMisrXToqcDIrKykpCisrCXJldHVybiAxOworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICBpZiAodHJhbnNsYXRlWypwMSsrXSAhPSB0cmFuc2xhdGVbKnAyKytdKSByZXR1cm4gMTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICBsZW4tLTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKwwKKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIEVudHJ5IHBvaW50cyBmb3IgR05VIGNvZGUuICAqLworKworKy8qIHJlX2NvbXBpbGVfcGF0dGVybiBpcyB0aGUgR05VIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb21waWxlcjogaXQKKysgICBjb21waWxlcyBQQVRURVJOIChvZiBsZW5ndGggU0laRSkgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiBCVUZQLgorKyAgIFJldHVybnMgMCBpZiB0aGUgcGF0dGVybiB3YXMgdmFsaWQsIG90aGVyd2lzZSBhbiBlcnJvciBzdHJpbmcuCisrCisrICAgQXNzdW1lcyB0aGUgYGFsbG9jYXRlZCcgKGFuZCBwZXJoYXBzIGBidWZmZXInKSBhbmQgYHRyYW5zbGF0ZScgZmllbGRzCisrICAgYXJlIHNldCBpbiBCVUZQIG9uIGVudHJ5LgorKworKyAgIFdlIGNhbGwgcmVnZXhfY29tcGlsZSB0byBkbyB0aGUgYWN0dWFsIGNvbXBpbGF0aW9uLiAgKi8KKysKKytjb25zdCBjaGFyICoKKytyZV9jb21waWxlX3BhdHRlcm4gKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrICAvKiBHTlUgY29kZSBpcyB3cml0dGVuIHRvIGFzc3VtZSBhdCBsZWFzdCBSRV9OUkVHUyByZWdpc3RlcnMgd2lsbCBiZSBzZXQKKysgICAgIChhbmQgYXQgbGVhc3Qgb25lIGV4dHJhIHdpbGwgYmUgLTEpLiAgKi8KKysgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKysKKysgIC8qIEFuZCBHTlUgY29kZSBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGdldCByZWdpc3RlciBpbmZvcm1hdGlvbgorKyAgICAgYnkgcGFzc2luZyBudWxsIGZvciB0aGUgUkVHUyBhcmd1bWVudCB0byByZV9tYXRjaCwgZXRjLiwgbm90IGJ5CisrICAgICBzZXR0aW5nIG5vX3N1Yi4gICovCisrICBidWZwLT5ub19zdWIgPSAwOworKworKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lLiAgKi8KKysgIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yID0gMTsKKysKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXQgPSB3Y3NfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgbGVuZ3RoLCByZV9zeW50YXhfb3B0aW9ucywgYnVmcCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXQgPSBieXRlX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIGxlbmd0aCwgcmVfc3ludGF4X29wdGlvbnMsIGJ1ZnApOworKworKyAgaWYgKCFyZXQpCisrICAgIHJldHVybiBOVUxMOworKyAgcmV0dXJuIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIHJldF0pOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX2NvbXBpbGVfcGF0dGVybiwgcmVfY29tcGlsZV9wYXR0ZXJuKQorKyNlbmRpZgorKwwKKysvKiBFbnRyeSBwb2ludHMgY29tcGF0aWJsZSB3aXRoIDQuMiBCU0QgcmVnZXggbGlicmFyeS4gIFdlIGRvbid0IGRlZmluZQorKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworKworKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmluZWQgX0xJQkMKKysKKysvKiBCU0QgaGFzIG9uZSBhbmQgb25seSBvbmUgcGF0dGVybiBidWZmZXIuICAqLworK3N0YXRpYyBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgcmVfY29tcF9idWY7CisrCisrY2hhciAqCisrI2lmZGVmIF9MSUJDCisrLyogTWFrZSB0aGVzZSBkZWZpbml0aW9ucyB3ZWFrIGluIGxpYmMsIHNvIFBPU0lYIHByb2dyYW1zIGNhbiByZWRlZmluZQorKyAgIHRoZXNlIG5hbWVzIGlmIHRoZXkgZG9uJ3QgdXNlIG91ciBmdW5jdGlvbnMsIGFuZCBzdGlsbCB1c2UKKysgICByZWdjb21wL3JlZ2V4ZWMgYmVsb3cgd2l0aG91dCBsaW5rIGVycm9ycy4gICovCisrd2Vha19mdW5jdGlvbgorKyNlbmRpZgorK3JlX2NvbXAgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrICBpZiAoIXMpCisrICAgIHsKKysgICAgICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKKysJcmV0dXJuIChjaGFyICopIGdldHRleHQgKCJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgaWYgKCFyZV9jb21wX2J1Zi5idWZmZXIpCisrICAgIHsKKysgICAgICByZV9jb21wX2J1Zi5idWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBtYWxsb2MgKDIwMCk7CisrICAgICAgaWYgKHJlX2NvbXBfYnVmLmJ1ZmZlciA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIChjaGFyICopIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIFJFR19FU1BBQ0VdKTsKKysgICAgICByZV9jb21wX2J1Zi5hbGxvY2F0ZWQgPSAyMDA7CisrCisrICAgICAgcmVfY29tcF9idWYuZmFzdG1hcCA9IChjaGFyICopIG1hbGxvYyAoMSA8PCBCWVRFV0lEVEgpOworKyAgICAgIGlmIChyZV9jb21wX2J1Zi5mYXN0bWFwID09IE5VTEwpCisrCXJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSBSRUdfRVNQQUNFXSk7CisrICAgIH0KKysKKysgIC8qIFNpbmNlIGByZV9leGVjJyBhbHdheXMgcGFzc2VzIE5VTEwgZm9yIHRoZSBgcmVncycgYXJndW1lbnQsIHdlCisrICAgICBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHBhdHRlcm4gYnVmZmVyIGZpZWxkcyB3aGljaCBhZmZlY3QgaXQuICAqLworKworKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lcy4gICovCisrICByZV9jb21wX2J1Zi5uZXdsaW5lX2FuY2hvciA9IDE7CisrCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0ID0gd2NzX3JlZ2V4X2NvbXBpbGUgKHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9vcHRpb25zLCAmcmVfY29tcF9idWYpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0ID0gYnl0ZV9yZWdleF9jb21waWxlIChzLCBzdHJsZW4gKHMpLCByZV9zeW50YXhfb3B0aW9ucywgJnJlX2NvbXBfYnVmKTsKKysKKysgIGlmICghcmV0KQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFllcywgd2UncmUgZGlzY2FyZGluZyBgY29uc3QnIGhlcmUgaWYgIUhBVkVfTElCSU5UTC4gICovCisrICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgcmV0XSk7CisrfQorKworKworK2ludAorKyNpZmRlZiBfTElCQworK3dlYWtfZnVuY3Rpb24KKysjZW5kaWYKKytyZV9leGVjIChjb25zdCBjaGFyICpzKQorK3sKKysgIGNvbnN0IGludCBsZW4gPSBzdHJsZW4gKHMpOworKyAgcmV0dXJuCisrICAgIDAgPD0gcmVfc2VhcmNoICgmcmVfY29tcF9idWYsIHMsIGxlbiwgMCwgbGVuLCAoc3RydWN0IHJlX3JlZ2lzdGVycyAqKSAwKTsKKyt9CisrCisrI2VuZGlmIC8qIF9SRUdFWF9SRV9DT01QICovCisrDAorKy8qIFBPU0lYLjIgZnVuY3Rpb25zLiAgRG9uJ3QgZGVmaW5lIHRoZXNlIGZvciBFbWFjcy4gICovCisrCisrI2lmbmRlZiBlbWFjcworKworKy8qIHJlZ2NvbXAgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYXMgYSBzdHJpbmcgYW5kIGNvbXBpbGVzIGl0LgorKworKyAgIFBSRUcgaXMgYSByZWdleF90ICouICBXZSBkbyBub3QgZXhwZWN0IGFueSBmaWVsZHMgdG8gYmUgaW5pdGlhbGl6ZWQsCisrICAgc2luY2UgUE9TSVggc2F5cyB3ZSBzaG91bGRuJ3QuICBUaHVzLCB3ZSBzZXQKKysKKysgICAgIGBidWZmZXInIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYHVzZWQnIHRvIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgc3ludGF4JyB0byBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgaWYgdGhlCisrICAgICAgIFJFR19FWFRFTkRFRCBiaXQgaW4gQ0ZMQUdTIGlzIHNldDsgb3RoZXJ3aXNlLCB0bworKyAgICAgICBSRV9TWU5UQVhfUE9TSVhfQkFTSUM7CisrICAgICBgbmV3bGluZV9hbmNob3InIHRvIFJFR19ORVdMSU5FIGJlaW5nIHNldCBpbiBDRkxBR1M7CisrICAgICBgZmFzdG1hcCcgdG8gYW4gYWxsb2NhdGVkIHNwYWNlIGZvciB0aGUgZmFzdG1hcDsKKysgICAgIGBmYXN0bWFwX2FjY3VyYXRlJyB0byB6ZXJvOworKyAgICAgYHJlX25zdWInIHRvIHRoZSBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgaW4gUEFUVEVSTi4KKysKKysgICBQQVRURVJOIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBwYXR0ZXJuIHN0cmluZy4KKysKKysgICBDRkxBR1MgaXMgYSBzZXJpZXMgb2YgYml0cyB3aGljaCBhZmZlY3QgY29tcGlsYXRpb24uCisrCisrICAgICBJZiBSRUdfRVhURU5ERUQgaXMgc2V0LCB3ZSB1c2UgUE9TSVggZXh0ZW5kZWQgc3ludGF4OyBvdGhlcndpc2UsIHdlCisrICAgICB1c2UgUE9TSVggYmFzaWMgc3ludGF4LgorKworKyAgICAgSWYgUkVHX05FV0xJTkUgaXMgc2V0LCB0aGVuIC4gYW5kIFteLi4uXSBkb24ndCBtYXRjaCBuZXdsaW5lLgorKyAgICAgQWxzbywgcmVnZXhlYyB3aWxsIHRyeSBhIG1hdGNoIGJlZ2lubmluZyBhZnRlciBldmVyeSBuZXdsaW5lLgorKworKyAgICAgSWYgUkVHX0lDQVNFIGlzIHNldCwgdGhlbiB3ZSBjb25zaWRlcnMgdXBwZXItIGFuZCBsb3dlcmNhc2UKKysgICAgIHZlcnNpb25zIG9mIGxldHRlcnMgdG8gYmUgZXF1aXZhbGVudCB3aGVuIG1hdGNoaW5nLgorKworKyAgICAgSWYgUkVHX05PU1VCIGlzIHNldCwgdGhlbiB3aGVuIFBSRUcgaXMgcGFzc2VkIHRvIHJlZ2V4ZWMsIHRoYXQKKysgICAgIHJvdXRpbmUgd2lsbCByZXBvcnQgb25seSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBub3RoaW5nIGFib3V0IHRoZQorKyAgICAgcmVnaXN0ZXJzLgorKworKyAgIEl0IHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgbm9uemVybyBpZiBpdCBkb2Vzbid0LiAgKFNlZSByZWdleC5oIGZvcgorKyAgIHRoZSByZXR1cm4gY29kZXMgYW5kIHRoZWlyIG1lYW5pbmdzLikgICovCisrCisraW50CisrcmVnY29tcCAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGNmbGFncykKKyt7CisrICByZWdfZXJyY29kZV90IHJldDsKKysgIHJlZ19zeW50YXhfdCBzeW50YXgKKysgICAgPSAoY2ZsYWdzICYgUkVHX0VYVEVOREVEKSA/CisrICAgICAgUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIDogUkVfU1lOVEFYX1BPU0lYX0JBU0lDOworKworKyAgLyogcmVnZXhfY29tcGlsZSB3aWxsIGFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgcHJlZy0+YnVmZmVyID0gMDsKKysgIHByZWctPmFsbG9jYXRlZCA9IDA7CisrICBwcmVnLT51c2VkID0gMDsKKysKKysgIC8qIFRyeSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGZhc3RtYXAuICAqLworKyAgcHJlZy0+ZmFzdG1hcCA9IChjaGFyICopIG1hbGxvYyAoMSA8PCBCWVRFV0lEVEgpOworKworKyAgaWYgKGNmbGFncyAmIFJFR19JQ0FTRSkKKysgICAgeworKyAgICAgIGludCBpOworKworKyAgICAgIHByZWctPnRyYW5zbGF0ZQorKwk9IChSRV9UUkFOU0xBVEVfVFlQRSkgbWFsbG9jIChDSEFSX1NFVF9TSVpFCisrCQkJCSAgICAgICogc2l6ZW9mICgqKFJFX1RSQU5TTEFURV9UWVBFKTApKTsKKysgICAgICBpZiAocHJlZy0+dHJhbnNsYXRlID09IE5VTEwpCisrICAgICAgICByZXR1cm4gKGludCkgUkVHX0VTUEFDRTsKKysKKysgICAgICAvKiBNYXAgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gY29ycmVzcG9uZGluZyBsb3dlcmNhc2Ugb25lcy4gICovCisrICAgICAgZm9yIChpID0gMDsgaSA8IENIQVJfU0VUX1NJWkU7IGkrKykKKysgICAgICAgIHByZWctPnRyYW5zbGF0ZVtpXSA9IElTVVBQRVIgKGkpID8gVE9MT1dFUiAoaSkgOiBpOworKyAgICB9CisrICBlbHNlCisrICAgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7CisrCisrICAvKiBJZiBSRUdfTkVXTElORSBpcyBzZXQsIG5ld2xpbmVzIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5LiAgKi8KKysgIGlmIChjZmxhZ3MgJiBSRUdfTkVXTElORSkKKysgICAgeyAvKiBSRUdfTkVXTElORSBpbXBsaWVzIG5laXRoZXIgLiBub3IgW14uLi5dIG1hdGNoIG5ld2xpbmUuICAqLworKyAgICAgIHN5bnRheCAmPSB+UkVfRE9UX05FV0xJTkU7CisrICAgICAgc3ludGF4IHw9IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORTsKKysgICAgICAvKiBJdCBhbHNvIGNoYW5nZXMgdGhlIG1hdGNoaW5nIGJlaGF2aW9yLiAgKi8KKysgICAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDE7CisrICAgIH0KKysgIGVsc2UKKysgICAgcHJlZy0+bmV3bGluZV9hbmNob3IgPSAwOworKworKyAgcHJlZy0+bm9fc3ViID0gISEoY2ZsYWdzICYgUkVHX05PU1VCKTsKKysKKysgIC8qIFBPU0lYIHNheXMgYSBudWxsIGNoYXJhY3RlciBpbiB0aGUgcGF0dGVybiB0ZXJtaW5hdGVzIGl0LCBzbyB3ZQorKyAgICAgY2FuIHVzZSBzdHJsZW4gaGVyZSBpbiBjb21waWxpbmcgdGhlIHBhdHRlcm4uICAqLworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldCA9IHdjc19yZWdleF9jb21waWxlIChwYXR0ZXJuLCBzdHJsZW4gKHBhdHRlcm4pLCBzeW50YXgsIHByZWcpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0ID0gYnl0ZV9yZWdleF9jb21waWxlIChwYXR0ZXJuLCBzdHJsZW4gKHBhdHRlcm4pLCBzeW50YXgsIHByZWcpOworKworKyAgLyogUE9TSVggZG9lc24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIHVubWF0Y2hlZCBvcGVuLWdyb3VwIGFuZCBhbgorKyAgICAgdW5tYXRjaGVkIGNsb3NlLWdyb3VwOiBib3RoIGFyZSBSRUdfRVBBUkVOLiAgKi8KKysgIGlmIChyZXQgPT0gUkVHX0VSUEFSRU4pIHJldCA9IFJFR19FUEFSRU47CisrCisrICBpZiAocmV0ID09IFJFR19OT0VSUk9SICYmIHByZWctPmZhc3RtYXApCisrICAgIHsKKysgICAgICAvKiBDb21wdXRlIHRoZSBmYXN0bWFwIG5vdywgc2luY2UgcmVnZXhlYyBjYW5ub3QgbW9kaWZ5IHRoZSBwYXR0ZXJuCisrCSBidWZmZXIuICAqLworKyAgICAgIGlmIChyZV9jb21waWxlX2Zhc3RtYXAgKHByZWcpID09IC0yKQorKwl7CisrCSAgLyogU29tZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb21wdXRpbmcgdGhlIGZhc3RtYXAsIGp1c3QgZm9yZ2V0CisrCSAgICAgYWJvdXQgaXQuICAqLworKwkgIGZyZWUgKHByZWctPmZhc3RtYXApOworKwkgIHByZWctPmZhc3RtYXAgPSBOVUxMOworKwl9CisrICAgIH0KKysKKysgIHJldHVybiAoaW50KSByZXQ7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVnY29tcCwgcmVnY29tcCkKKysjZW5kaWYKKysKKysKKysvKiByZWdleGVjIHNlYXJjaGVzIGZvciBhIGdpdmVuIHBhdHRlcm4sIHNwZWNpZmllZCBieSBQUkVHLCBpbiB0aGUKKysgICBzdHJpbmcgU1RSSU5HLgorKworKyAgIElmIE5NQVRDSCBpcyB6ZXJvIG9yIFJFR19OT1NVQiB3YXMgc2V0IGluIHRoZSBjZmxhZ3MgYXJndW1lbnQgdG8KKysgICBgcmVnY29tcCcsIHdlIGlnbm9yZSBQTUFUQ0guICBPdGhlcndpc2UsIHdlIGFzc3VtZSBQTUFUQ0ggaGFzIGF0CisrICAgbGVhc3QgTk1BVENIIGVsZW1lbnRzLCBhbmQgd2Ugc2V0IHRoZW0gdG8gdGhlIG9mZnNldHMgb2YgdGhlCisrICAgY29ycmVzcG9uZGluZyBtYXRjaGVkIHN1YnN0cmluZ3MuCisrCisrICAgRUZMQUdTIHNwZWNpZmllcyBgZXhlY3V0aW9uIGZsYWdzJyB3aGljaCBhZmZlY3QgbWF0Y2hpbmc6IGlmCisrICAgUkVHX05PVEJPTCBpcyBzZXQsIHRoZW4gXiBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorKyAgIHN0cmluZzsgaWYgUkVHX05PVEVPTCBpcyBzZXQsIHRoZW4gJCBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgZW5kLgorKworKyAgIFdlIHJldHVybiAwIGlmIHdlIGZpbmQgYSBtYXRjaCBhbmQgUkVHX05PTUFUQ0ggaWYgbm90LiAgKi8KKysKKytpbnQKKytyZWdleGVjIChjb25zdCByZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBubWF0Y2gsCisrICAgICAgICAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKKyt7CisrICBpbnQgcmV0OworKyAgc3RydWN0IHJlX3JlZ2lzdGVycyByZWdzOworKyAgcmVnZXhfdCBwcml2YXRlX3ByZWc7CisrICBpbnQgbGVuID0gc3RybGVuIChzdHJpbmcpOworKyAgYm9vbGVhbiB3YW50X3JlZ19pbmZvID0gIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAwOworKworKyAgcHJpdmF0ZV9wcmVnID0gKnByZWc7CisrCisrICBwcml2YXRlX3ByZWcubm90X2JvbCA9ICEhKGVmbGFncyAmIFJFR19OT1RCT0wpOworKyAgcHJpdmF0ZV9wcmVnLm5vdF9lb2wgPSAhIShlZmxhZ3MgJiBSRUdfTk9URU9MKTsKKysKKysgIC8qIFRoZSB1c2VyIGhhcyB0b2xkIHVzIGV4YWN0bHkgaG93IG1hbnkgcmVnaXN0ZXJzIHRvIHJldHVybgorKyAgICAgaW5mb3JtYXRpb24gYWJvdXQsIHZpYSBgbm1hdGNoJy4gIFdlIGhhdmUgdG8gcGFzcyB0aGF0IG9uIHRvIHRoZQorKyAgICAgbWF0Y2hpbmcgcm91dGluZXMuICAqLworKyAgcHJpdmF0ZV9wcmVnLnJlZ3NfYWxsb2NhdGVkID0gUkVHU19GSVhFRDsKKysKKysgIGlmICh3YW50X3JlZ19pbmZvKQorKyAgICB7CisrICAgICAgcmVncy5udW1fcmVncyA9IG5tYXRjaDsKKysgICAgICByZWdzLnN0YXJ0ID0gVEFMTE9DIChubWF0Y2ggKiAyLCByZWdvZmZfdCk7CisrICAgICAgaWYgKHJlZ3Muc3RhcnQgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiAoaW50KSBSRUdfTk9NQVRDSDsKKysgICAgICByZWdzLmVuZCA9IHJlZ3Muc3RhcnQgKyBubWF0Y2g7CisrICAgIH0KKysKKysgIC8qIFBlcmZvcm0gdGhlIHNlYXJjaGluZyBvcGVyYXRpb24uICAqLworKyAgcmV0ID0gcmVfc2VhcmNoICgmcHJpdmF0ZV9wcmVnLCBzdHJpbmcsIGxlbiwKKysgICAgICAgICAgICAgICAgICAgLyogc3RhcnQ6ICovIDAsIC8qIHJhbmdlOiAqLyBsZW4sCisrICAgICAgICAgICAgICAgICAgIHdhbnRfcmVnX2luZm8gPyAmcmVncyA6IChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICopIDApOworKworKyAgLyogQ29weSB0aGUgcmVnaXN0ZXIgaW5mb3JtYXRpb24gdG8gdGhlIFBPU0lYIHN0cnVjdHVyZS4gICovCisrICBpZiAod2FudF9yZWdfaW5mbykKKysgICAgeworKyAgICAgIGlmIChyZXQgPj0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgdW5zaWduZWQgcjsKKysKKysgICAgICAgICAgZm9yIChyID0gMDsgciA8IG5tYXRjaDsgcisrKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHBtYXRjaFtyXS5ybV9zbyA9IHJlZ3Muc3RhcnRbcl07CisrICAgICAgICAgICAgICBwbWF0Y2hbcl0ucm1fZW8gPSByZWdzLmVuZFtyXTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgLyogSWYgd2UgbmVlZGVkIHRoZSB0ZW1wb3JhcnkgcmVnaXN0ZXIgaW5mbywgZnJlZSB0aGUgc3BhY2Ugbm93LiAgKi8KKysgICAgICBmcmVlIChyZWdzLnN0YXJ0KTsKKysgICAgfQorKworKyAgLyogV2Ugd2FudCB6ZXJvIHJldHVybiB0byBtZWFuIHN1Y2Nlc3MsIHVubGlrZSBgcmVfc2VhcmNoJy4gICovCisrICByZXR1cm4gcmV0ID49IDAgPyAoaW50KSBSRUdfTk9FUlJPUiA6IChpbnQpIFJFR19OT01BVENIOworK30KKysjaWZkZWYgX0xJQkMKKysvKiBFR0xJQkM6IFRoaXMgaXMgaGFuZGxlZCBpbiByZWdleGVjLWNvbXBhdC5jLiAgKi8KKysvKndlYWtfYWxpYXMgKF9fcmVnZXhlYywgcmVnZXhlYykqLworKyNpbmNsdWRlICJyZWdleGVjLWNvbXBhdC5jIgorKyNlbmRpZgorKworKworKy8qIFJldHVybnMgYSBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gYW4gZXJyb3IgY29kZSwgRVJSQ09ERSwgcmV0dXJuZWQKKysgICBmcm9tIGVpdGhlciByZWdjb21wIG9yIHJlZ2V4ZWMuICAgV2UgZG9uJ3QgdXNlIFBSRUcgaGVyZS4gICovCisrCisrc2l6ZV90CisrcmVnZXJyb3IgKGludCBlcnJjb2RlLCBjb25zdCByZWdleF90ICpwcmVnIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysgICAgICAgICAgY2hhciAqZXJyYnVmLCBzaXplX3QgZXJyYnVmX3NpemUpCisreworKyAgY29uc3QgY2hhciAqbXNnOworKyAgc2l6ZV90IG1zZ19zaXplOworKworKyAgaWYgKGVycmNvZGUgPCAwCisrICAgICAgfHwgZXJyY29kZSA+PSAoaW50KSAoc2l6ZW9mIChyZV9lcnJvcl9tc2dpZCkKKysJCQkgICAvIHNpemVvZiAocmVfZXJyb3JfbXNnaWRbMF0pKSkKKysgICAgLyogT25seSBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgcmVzdCBvZiB0aGUgY29kZSBzaG91bGQgYmUgcGFzc2VkCisrICAgICAgIHRvIHRoaXMgcm91dGluZS4gIElmIHdlIGFyZSBnaXZlbiBhbnl0aGluZyBlbHNlLCBvciBpZiBvdGhlciByZWdleAorKyAgICAgICBjb2RlIGdlbmVyYXRlcyBhbiBpbnZhbGlkIGVycm9yIGNvZGUsIHRoZW4gdGhlIHByb2dyYW0gaGFzIGEgYnVnLgorKyAgICAgICBEdW1wIGNvcmUgc28gd2UgY2FuIGZpeCBpdC4gICovCisrICAgIGFib3J0ICgpOworKworKyAgbXNnID0gZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbZXJyY29kZV0pOworKworKyAgbXNnX3NpemUgPSBzdHJsZW4gKG1zZykgKyAxOyAvKiBJbmNsdWRlcyB0aGUgbnVsbC4gICovCisrCisrICBpZiAoZXJyYnVmX3NpemUgIT0gMCkKKysgICAgeworKyAgICAgIGlmIChtc2dfc2l6ZSA+IGVycmJ1Zl9zaXplKQorKyAgICAgICAgeworKyNpZiBkZWZpbmVkIEhBVkVfTUVNUENQWSB8fCBkZWZpbmVkIF9MSUJDCisrCSAgKigoY2hhciAqKSBtZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworKyNlbHNlCisrICAgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisrICAgICAgICAgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBtZW1jcHkgKGVycmJ1ZiwgbXNnLCBtc2dfc2l6ZSk7CisrICAgIH0KKysKKysgIHJldHVybiBtc2dfc2l6ZTsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZWdlcnJvciwgcmVnZXJyb3IpCisrI2VuZGlmCisrCisrCisrLyogRnJlZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3BhY2UgdXNlZCBieSBQUkVHLiAgKi8KKysKKyt2b2lkCisrcmVnZnJlZSAocmVnZXhfdCAqcHJlZykKKyt7CisrICBpZiAocHJlZy0+YnVmZmVyICE9IE5VTEwpCisrICAgIGZyZWUgKHByZWctPmJ1ZmZlcik7CisrICBwcmVnLT5idWZmZXIgPSBOVUxMOworKworKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKysgIHByZWctPnVzZWQgPSAwOworKworKyAgaWYgKHByZWctPmZhc3RtYXAgIT0gTlVMTCkKKysgICAgZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisrICBwcmVnLT5mYXN0bWFwID0gTlVMTDsKKysgIHByZWctPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworKworKyAgaWYgKHByZWctPnRyYW5zbGF0ZSAhPSBOVUxMKQorKyAgICBmcmVlIChwcmVnLT50cmFuc2xhdGUpOworKyAgcHJlZy0+dHJhbnNsYXRlID0gTlVMTDsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZWdmcmVlLCByZWdmcmVlKQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBub3QgZW1hY3MgICovCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrDAorKyN1bmRlZiBTVE9SRV9OVU1CRVIKKysjdW5kZWYgU1RPUkVfTlVNQkVSX0FORF9JTkNSCisrI3VuZGVmIEVYVFJBQ1RfTlVNQkVSCisrI3VuZGVmIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSCisrCisrI3VuZGVmIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4KKysjdW5kZWYgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORworKworKyN1bmRlZiBJTklUX0ZBSUxfU1RBQ0sKKysjdW5kZWYgUkVTRVRfRkFJTF9TVEFDSworKyN1bmRlZiBET1VCTEVfRkFJTF9TVEFDSworKyN1bmRlZiBQVVNIX1BBVFRFUk5fT1AKKysjdW5kZWYgUFVTSF9GQUlMVVJFX1BPSU5URVIKKysjdW5kZWYgUFVTSF9GQUlMVVJFX0lOVAorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfRUxUCisrI3VuZGVmIFBPUF9GQUlMVVJFX1BPSU5URVIKKysjdW5kZWYgUE9QX0ZBSUxVUkVfSU5UCisrI3VuZGVmIFBPUF9GQUlMVVJFX0VMVAorKyN1bmRlZiBERUJVR19QVVNICisrI3VuZGVmIERFQlVHX1BPUAorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfUE9JTlQKKysjdW5kZWYgUE9QX0ZBSUxVUkVfUE9JTlQKKysKKysjdW5kZWYgUkVHX1VOU0VUX1ZBTFVFCisrI3VuZGVmIFJFR19VTlNFVAorKworKyN1bmRlZiBQQVRGRVRDSAorKyN1bmRlZiBQQVRGRVRDSF9SQVcKKysjdW5kZWYgUEFUVU5GRVRDSAorKyN1bmRlZiBUUkFOU0xBVEUKKysKKysjdW5kZWYgSU5JVF9CVUZfU0laRQorKyN1bmRlZiBHRVRfQlVGRkVSX1NQQUNFCisrI3VuZGVmIEJVRl9QVVNICisrI3VuZGVmIEJVRl9QVVNIXzIKKysjdW5kZWYgQlVGX1BVU0hfMworKyN1bmRlZiBTVE9SRV9KVU1QCisrI3VuZGVmIFNUT1JFX0pVTVAyCisrI3VuZGVmIElOU0VSVF9KVU1QCisrI3VuZGVmIElOU0VSVF9KVU1QMgorKyN1bmRlZiBFWFRFTkRfQlVGRkVSCisrI3VuZGVmIEdFVF9VTlNJR05FRF9OVU1CRVIKKysjdW5kZWYgRlJFRV9TVEFDS19SRVRVUk4KKysKKysjIHVuZGVmIFBPSU5URVJfVE9fT0ZGU0VUCisrIyB1bmRlZiBNQVRDSElOR19JTl9GUlNUX1NUUklORworKyMgdW5kZWYgUFJFRkVUQ0gKKysjIHVuZGVmIEFUX1NUUklOR1NfQkVHCisrIyB1bmRlZiBBVF9TVFJJTkdTX0VORAorKyMgdW5kZWYgV09SRENIQVJfUAorKyMgdW5kZWYgRlJFRV9WQVIKKysjIHVuZGVmIEZSRUVfVkFSSUFCTEVTCisrIyB1bmRlZiBOT19ISUdIRVNUX0FDVElWRV9SRUcKKysjIHVuZGVmIE5PX0xPV0VTVF9BQ1RJVkVfUkVHCisrCisrIyB1bmRlZiBDSEFSX1QKKysjIHVuZGVmIFVDSEFSX1QKKysjIHVuZGVmIENPTVBJTEVEX0JVRkZFUl9WQVIKKysjIHVuZGVmIE9GRlNFVF9BRERSRVNTX1NJWkUKKysjIHVuZGVmIENIQVJfQ0xBU1NfU0laRQorKyMgdW5kZWYgUFJFRklYCisrIyB1bmRlZiBBUkdfUFJFRklYCisrIyB1bmRlZiBQVVRfQ0hBUgorKyMgdW5kZWYgQllURQorKyMgdW5kZWYgV0NIQVIKKysKKysjIGRlZmluZSBERUZJTkVEX09OQ0UKK2RpZmYgLS1naXQgYS9wd2QvTWFrZWZpbGUgYi9wd2QvTWFrZWZpbGUKK2luZGV4IDdmNmRlMDMuLjkxNmQ1NDYgMTAwNjQ0CistLS0gYS9wd2QvTWFrZWZpbGUKKysrKyBiL3B3ZC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHB3ZCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHB3ZAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworZGlmZiAtLWdpdCBhL3Jlc29sdi9NYWtlZmlsZSBiL3Jlc29sdi9NYWtlZmlsZQoraW5kZXggMWRjYjc1Zi4uMmU0YjYzMCAxMDA2NDQKKy0tLSBhL3Jlc29sdi9NYWtlZmlsZQorKysrIGIvcmVzb2x2L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgcmVzb2x2IHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gcmVzb2x2CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsMjEgKzI5LDIyIEBAIGhlYWRlcnMJOj0gcmVzb2x2LmggXAorIAkgICBhcnBhL25hbWVzZXIuaCBhcnBhL25hbWVzZXJfY29tcGF0LmggXAorIAkgICBzeXMvYml0eXBlcy5oCisgCistcm91dGluZXMgOj0gaGVycm9yIGluZXRfYWRkciBpbmV0X250b3AgaW5ldF9wdG9uIG5zYXBfYWRkciByZXNfaW5pdCBcCistCSAgICByZXNfaGNvbmYgcmVzX2xpYmMgcmVzLXN0YXRlCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJKz0gaGVycm9yIGluZXRfYWRkciBpbmV0X250b3AgaW5ldF9wdG9uIG5zYXBfYWRkciByZXNfaW5pdCBcCisrCSAgIHJlc19oY29uZiByZXNfbGliYyByZXMtc3RhdGUKKyAKKy10ZXN0cyA9IHRzdC1hdG9uIHRzdC1sZWFrcyB0c3QtaW5ldF9udG9wCisteHRlc3RzID0gdHN0LWxlYWtzMgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSB0c3QtYXRvbiB0c3QtbGVha3MgdHN0LWluZXRfbnRvcAorK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gdHN0LWxlYWtzMgorIAorIGdlbmVyYXRlIDo9IG10cmFjZS10c3QtbGVha3Mub3V0IHRzdC1sZWFrcy5tdHJhY2UgdHN0LWxlYWtzMi5tdHJhY2UKKyAKKy1leHRyYS1saWJzIDo9IGxpYnJlc29sdiBsaWJuc3NfZG5zCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbGlicmVzb2x2IGxpYm5zc19kbnMKKyBpZmVxICgkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllcykKKy1leHRyYS1saWJzICs9IGxpYmFubAorLXJvdXRpbmVzICs9IGdhaV9zaWdxdWV1ZQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lORVRfQU5MKSArPSBsaWJhbmwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gZ2FpX3NpZ3F1ZXVlCisgdGVzdHMgKz0gdHN0LXJlc19oY29uZl9yZW9yZGVyCisgZW5kaWYKKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLW90aGVycy15ICs9ICQoZXh0cmEtbGlicy15KQorIGxpYnJlc29sdi1yb3V0aW5lcyA6PSBnZXRobmFtYWRkciByZXNfY29tcCByZXNfZGVidWcJXAorIAkJICAgICAgcmVzX2RhdGEgcmVzX21rcXVlcnkgcmVzX3F1ZXJ5IHJlc19zZW5kCQlcCisgCQkgICAgICBpbmV0X25ldF9udG9wIGluZXRfbmV0X3B0b24gaW5ldF9uZXRhIGJhc2U2NAlcCitAQCAtNjEsNyArNjQsNyBAQCByb3V0aW5lcyAgICAgICAgICAgICAgICArPSAkKGxpYm5zc19kbnMtcm91dGluZXMpICQobGlicmVzb2x2LXJvdXRpbmVzKQorIHN0YXRpYy1vbmx5LXJvdXRpbmVzICAgICs9ICQobGlibnNzX2Rucy1yb3V0aW5lcykgJChsaWJyZXNvbHYtcm91dGluZXMpCisgZW5kaWYKKyAKKy1pZmVxICh5ZXN5ZXMsJChidWlsZC1zaGFyZWQpJChoYXZlLXRocmVhZC1saWJyYXJ5KSkKKytpZmVxICh5ZXN5ZXN5LCQoYnVpbGQtc2hhcmVkKSQoaGF2ZS10aHJlYWQtbGlicmFyeSkkKE9QVElPTl9FR0xJQkNfSU5FVF9BTkwpKQorIHRlc3RzOiAkKG9ianBmeClnYV90ZXN0CisgZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vTWFrZWZpbGUgYi9zdGRpby1jb21tb24vTWFrZWZpbGUKK2luZGV4IGQwYmYwZTEuLjg2NTU4MDEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vTWFrZWZpbGUKKysrKyBiL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTcGVjaWZpYyBtYWtlZmlsZSBmb3Igc3RkaW8tY29tbW9uLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0ZGlvLWNvbW1vbgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDcgKzMyLDcgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAl2ZnByaW50ZiB2cHJpbnRmIHByaW50Zl9mcCByZWctcHJpbnRmIHByaW50Zi1wcnMgcHJpbnRmX2ZwaGV4CSAgICAgIFwKKyAJcmVnLW1vZGlmaWVyIHJlZy10eXBlCQkJCQkJICAgICAgXAorIAlwcmludGZfc2l6ZSBmcHJpbnRmIHByaW50ZiBzbnByaW50ZiBzcHJpbnRmIGFzcHJpbnRmIGRwcmludGYJICAgICAgXAorLQl2ZndwcmludGYgdmZzY2FuZiB2ZndzY2FuZgkJCQkJICAgICAgXAorKwl2ZnNjYW5mCQkJCQkJCQkgICAgICBcCisgCWZzY2FuZiBzY2FuZiBzc2NhbmYJCQkJCQkgICAgICBcCisgCXBlcnJvciBwc2lnbmFsCQkJCQkJCSAgICAgIFwKKyAJdG1wZmlsZSB0bXBmaWxlNjQgdG1wbmFtIHRtcG5hbV9yIHRlbXBuYW0gdGVtcG5hbWUJCSAgICAgIFwKK0BAIC00MSwyMyArNDMsMzYgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlpc29jOTlfdnNzY2FuZgkJCQkJCQkgICAgICBcCisgCXBzaWdpbmZvCisgCistYXV4CTo9IGVycmxpc3Qgc2lnbGlzdCBwcmludGYtcGFyc2VtYiBwcmludGYtcGFyc2V3YyBmeHByaW50ZgorKyMgSWRlYWxseSwgX2l0b3dhIGFuZCBpdG93YS1kaWdpdHMgd291bGQgYmUgaW4gdGhpcyBvcHRpb24gZ3JvdXAgYXMKKysjIHdlbGwsIGJ1dCBpdCBpcyB1c2VkIHVuY29uZGl0aW9uYWxseSBieSBwcmludGZfZnAgYW5kIHByaW50Zl9mcGhleCwKKysjIGFuZCBpdCBkaWRuJ3Qgc2VlbSBzdHJhaWdodGZvcndhcmQgdG8gZGlzZW50YW5nbGUgaXQuCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkrPSB2ZndwcmludGYgdmZ3c2NhbmYKKysKKythdXgJOj0gZXJybGlzdCBzaWdsaXN0IHByaW50Zi1wYXJzZW1iIGZ4cHJpbnRmCisrYXV4LSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9IHByaW50Zi1wYXJzZXdjCisgCisgdGVzdHMgOj0gdHN0c2NhbmYgdGVzdF9yZHdyIHRlc3QtcG9wZW4gdHN0Z2V0bG4gdGVzdC1mc2VlayBcCisgCSB0ZW1wdGVzdCB0c3QtZmlsZW5vIHRlc3QtZndyaXRlIHRzdC11bmdldGMgdHN0LWZlcnJvciBcCisgCSB4YnVnIGVycm5vYnVnIFwKKyAJIGJ1ZzEgYnVnMiBidWczIGJ1ZzQgYnVnNSBidWc2IGJ1ZzcgYnVnOCBidWc5IGJ1ZzEwIGJ1ZzExIGJ1ZzEyIGJ1ZzEzIFwKKy0JIHRmZm9ybWF0IHRpZm9ybWF0IHRsbGZvcm1hdCB0c3RkaW9taXNjIHRzdC1wcmludGZzeiB0c3Qtd2MtcHJpbnRmIFwKKysJIHRmZm9ybWF0IHRpZm9ybWF0IHRsbGZvcm1hdCB0c3RkaW9taXNjIHRzdC1wcmludGZzeiBcCisgCSBzY2FuZjEgc2NhbmYyIHNjYW5mMyBzY2FuZjQgc2NhbmY1IHNjYW5mNyBzY2FuZjggc2NhbmY5IHNjYW5mMTAgXAorLQkgc2NhbmYxMSBzY2FuZjEyIHRzdC10bXBuYW0gdHN0LWNvb2tpZSB0c3Qtb2JwcmludGYgdHN0LXNzY2FuZiBcCistCSB0c3Qtc3dwcmludGYgdHN0LWZzZWVrIHRzdC1mbWVtb3BlbiB0ZXN0LXZmcHJpbnRmIHRzdC1nZXRzIFwKKy0JIHRzdC1wZXJyb3IgdHN0LXNwcmludGYgdHN0LXJuZHNlZWsgdHN0LWZkb3BlbiB0c3QtZnBoZXggYnVnMTQgXAorKwkgc2NhbmYxMSBzY2FuZjEyIHRzdC10bXBuYW0gdHN0LWNvb2tpZSB0c3Qtb2JwcmludGYgXAorKwkgdHN0LWZzZWVrIHRzdC1mbWVtb3BlbiB0c3QtZ2V0cyBcCisrCSB0c3Qtc3ByaW50ZiB0c3Qtcm5kc2VlayB0c3QtZmRvcGVuIHRzdC1mcGhleCBcCisgCSB0c3QtcG9wZW4gdHN0LXVubG9ja2VkaW8gdHN0LWZtZW1vcGVuMiB0c3QtcHV0LWVycm9yIHRzdC1mZ2V0cyBcCistCSB0c3QtZndyaXRlIGJ1ZzE2IGJ1ZzE3IHRzdC1zd3NjYW5mIHRzdC1zcHJpbnRmMiBidWcxOCBidWcxOGEgXAorLQkgYnVnMTkgYnVnMTlhIHRzdC1wb3BlbjIgc2NhbmYxMyBzY2FuZjE0IHNjYW5mMTUgYnVnMjAgYnVnMjEgYnVnMjIgXAorLQkgc2NhbmYxNiBzY2FuZjE3IHRzdC1zZXR2YnVmMSB0c3QtZ3JvdXBpbmcgYnVnMjMgYnVnMjQgXAorLQkgYnVnLXZmcHJpbnRmLW5hcmdzIHRzdC1sb25nLWRibC1mcGhleCB0c3QtZnBoZXgtd2lkZSB0c3Qtc3ByaW50ZjMgXAorKwkgdHN0LWZ3cml0ZSBidWcxNiBidWcxNyB0c3Qtc3ByaW50ZjIgYnVnMTggXAorKwkgYnVnMTkgdHN0LXBvcGVuMiBzY2FuZjE0IHNjYW5mMTUgYnVnMjEgYnVnMjIgXAorKwkgc2NhbmYxNiBzY2FuZjE3IHRzdC1zZXR2YnVmMSBidWcyMyBidWcyNCBcCisrCSBidWctdmZwcmludGYtbmFyZ3MgdHN0LXNwcmludGYzIFwKKyAJIGJ1ZzI1IHRzdC1wcmludGYtcm91bmQgYnVnMjMtMiBidWcyMy0zIGJ1ZzIzLTQgYnVnMjYgdHN0LWZtZW1vcGVuMworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkgKz0gdHN0LXNzY2FuZiB0c3Qtc3dwcmludGYgdGVzdC12ZnByaW50ZiBidWcxNCBzY2FuZjEzIHRzdC1ncm91cGluZworK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pIFwKKysJICs9IHRzdC1wZXJyb3IgYnVnMTlhIGJ1ZzIwIHRzdC1sb25nLWRibC1mcGhleCB0c3QtZnBoZXgtd2lkZQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJICs9IGJ1ZzE4YSB0c3Qtc3dzY2FuZiB0c3Qtd2MtcHJpbnRmCisgCisgdGVzdC1zcmNzID0gdHN0LXVuYnB1dGMgdHN0LXByaW50ZgorIAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaCBiL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaAoraW5kZXggM2M3MzA0NC4uYWM2MmIzYSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaAorKysrIGIvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oCitAQCAtMTksMTAgKzE5LDEzIEBACisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8d2N0eXBlLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgIi4uL2xvY2FsZS9vdXRkaWdpdHMuaCIKKyAjaW5jbHVkZSAiLi4vbG9jYWxlL291dGRpZ2l0c3djLmgiCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKworIHN0YXRpYyBDSEFSX1QgKgorIF9pMThuX251bWJlcl9yZXdyaXRlIChDSEFSX1QgKncsIENIQVJfVCAqcmVhcl9wdHIsIENIQVJfVCAqZW5kKQorIHsKK0BAIC0xMTUsMyArMTE4LDEzIEBAIF9pMThuX251bWJlcl9yZXdyaXRlIChDSEFSX1QgKncsIENIQVJfVCAqcmVhcl9wdHIsIENIQVJfVCAqZW5kKQorIAorICAgcmV0dXJuIHc7CisgfQorKworKyNlbHNlCisrCisrc3RhdGljIENIQVJfVCAqCisrX2kxOG5fbnVtYmVyX3Jld3JpdGUgKENIQVJfVCAqdywgQ0hBUl9UICpyZWFyX3B0ciwgQ0hBUl9UICplbmQpCisreworKyAgcmV0dXJuIHc7CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jIGIvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMKK2luZGV4IDdiMmViOTQuLjg0NzYwNzYgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vZnhwcmludGYuYworKysrIGIvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsaWJpb1AuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBpbnQKK0BAIC0zNyw2ICszOCw3IEBAIF9fZnhwcmludGYgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIGludCByZXM7CisgICBpZiAoX0lPX2Z3aWRlIChmcCwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChmbXQpICsgMTsKKyAgICAgICB3Y2hhcl90IHdmbXRbbGVuXTsKKyAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKQorQEAgLTQ1LDYgKzQ3LDkgQEAgX19meHByaW50ZiAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorIAkgIHdmbXRbaV0gPSBmbXRbaV07CisgCX0KKyAgICAgICByZXMgPSBfX3Zmd3ByaW50ZiAoZnAsIHdmbXQsIGFwKTsKKysjZWxzZQorKyAgICAgIGFib3J0KCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAgICAgcmVzID0gX0lPX3ZmcHJpbnRmIChmcCwgZm10LCBhcCk7CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jCitpbmRleCAzMDIzYjIwLi5iZDBkZjY2IDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jCisrKysgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMKK0BAIC0zOSw2ICszOSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDxyb3VuZGluZy1tb2RlLmg+CisgCitAQCAtMTQyLDYgKzE0MywxMCBAQCBleHRlcm4gbXBfc2l6ZV90IF9fbXBuX2V4dHJhY3RfbG9uZ19kb3VibGUgKG1wX3B0ciByZXNfcHRyLCBtcF9zaXplX3Qgc2l6ZSwKKyBleHRlcm4gdW5zaWduZWQgaW50IF9fZ3Vlc3NfZ3JvdXBpbmcgKHVuc2lnbmVkIGludCBpbnRkaWdfbWF4LAorIAkJCQkgICAgICBjb25zdCBjaGFyICpncm91cGluZyk7CisgCisrLyogSWRlYWxseSwgd2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGlzIHNob3VsZCBkbworKyAgIGFsbCBpdHMgd29yayBpbiBvcmRpbmFyeSBjaGFyYWN0ZXJzLCByYXRoZXIgdGhhbiBkb2luZyBpdCBpbiB3aWRlCisrICAgY2hhcmFjdGVycyBhbmQgdGhlbiBjb252ZXJ0aW5nIGF0IHRoZSBlbmQuICBCdXQgdGhhdCBpcyBhIGNoYWxsZW5nZQorKyAgIGZvciBhbm90aGVyIGRheS4gICovCisgCisgc3RhdGljIHdjaGFyX3QgKmdyb3VwX251bWJlciAod2NoYXJfdCAqYnVmLCB3Y2hhcl90ICpidWZlbmQsCisgCQkJICAgICAgdW5zaWduZWQgaW50IGludGRpZ19ubywgY29uc3QgY2hhciAqZ3JvdXBpbmcsCitAQCAtMjUxLDcgKzI1NiwxNCBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgbXBfbGltYl90IGN5OworIAorICAgLyogTm9uemVybyBpZiB0aGlzIGlzIG91dHB1dCBvbiBhIHdpZGUgY2hhcmFjdGVyIHN0cmVhbS4gICovCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGludCB3aWRlID0gaW5mby0+d2lkZTsKKysjZWxzZQorKyAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0gd2hlbgorKyAgICAgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGJ1dCB0aGUgY29tcGlsZXIgY2FuJ3QKKysgICAgIGJlIHRydXN0ZWQgdG8gZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIGNvbnN0IGludCB3aWRlID0gMDsKKysjZW5kaWYKKyAKKyAgIC8qIEJ1ZmZlciBpbiB3aGljaCB3ZSBwcm9kdWNlIHRoZSBvdXRwdXQuICAqLworICAgd2NoYXJfdCAqd2J1ZmZlciA9IE5VTEw7CitAQCAtMjYxLDYgKzI3Myw3IEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICBwLmV4cHNpZ24gPSAwOworIAorICAgLyogRmlndXJlIG91dCB0aGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChpbmZvLT5leHRyYSA9PSAwKQorICAgICB7CisgICAgICAgZGVjaW1hbCA9IF9OTF9DVVJSRU5UIChMQ19OVU1FUklDLCBERUNJTUFMX1BPSU5UKTsKK0BAIC0yODAsNyArMjkzLDEzIEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICAvKiBUaGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIgbXVzdCBub3QgYmUgemVyby4gICovCisgICBhc3NlcnQgKCpkZWNpbWFsICE9ICdcMCcpOworICAgYXNzZXJ0IChkZWNpbWFsd2MgIT0gTCdcMCcpOworKyNlbHNlCisrICAvKiBIYXJkLWNvZGUgdmFsdWVzIGZyb20gJ0MnIGxvY2FsZS4gICovCisrICBkZWNpbWFsID0gIi4iOworKyAgZGVjaW1hbHdjID0gTCcuJzsKKysjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoaW5mby0+Z3JvdXApCisgICAgIHsKKyAgICAgICBpZiAoaW5mby0+ZXh0cmEgPT0gMCkKK0BAIC0zMjQsNiArMzQzLDkgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgICAgfQorICAgZWxzZQorICAgICBncm91cGluZyA9IE5VTEw7CisrI2Vsc2UKKysgIGdyb3VwaW5nID0gTlVMTDsKKysjZW5kaWYKKyAKKyAgIC8qIEZldGNoIHRoZSBhcmd1bWVudCB2YWx1ZS4JKi8KKyAjaWZuZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYworaW5kZXggNmMzYjVlOS4uZjY2MGNlMCAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYworKysrIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jCitAQCAtMjgsNiArMjgsNyBAQAorICNpbmNsdWRlIDxfaXRvYS5oPgorICNpbmNsdWRlIDxfaXRvd2EuaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDxyb3VuZGluZy1tb2RlLmg+CisgCitAQCAtMTM5LDEwICsxNDAsMTggQEAgX19wcmludGZfZnBoZXggKEZJTEUgKmZwLAorICAgaW50IGRvbmUgPSAwOworIAorICAgLyogTm9uemVybyBpZiB0aGlzIGlzIG91dHB1dCBvbiBhIHdpZGUgY2hhcmFjdGVyIHN0cmVhbS4gICovCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGludCB3aWRlID0gaW5mby0+d2lkZTsKKysjZWxzZQorKyAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0gd2hlbgorKyAgICAgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGJ1dCB0aGUgY29tcGlsZXIgY2FuJ3QKKysgICAgIGJlIHRydXN0ZWQgdG8gZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIGNvbnN0IGludCB3aWRlID0gMDsKKysjZW5kaWYKKyAKKyAKKyAgIC8qIEZpZ3VyZSBvdXQgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoaW5mby0+ZXh0cmEgPT0gMCkKKyAgICAgeworICAgICAgIGRlY2ltYWwgPSBfTkxfQ1VSUkVOVCAoTENfTlVNRVJJQywgREVDSU1BTF9QT0lOVCk7CitAQCAtMTU2LDYgKzE2NSwxMCBAQCBfX3ByaW50Zl9mcGhleCAoRklMRSAqZnAsCisgICAgIH0KKyAgIC8qIFRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlciBtdXN0IG5ldmVyIGJlIHplcm8uICAqLworICAgYXNzZXJ0ICgqZGVjaW1hbCAhPSAnXDAnICYmIGRlY2ltYWx3YyAhPSBMJ1wwJyk7CisrI2Vsc2UKKysgIGRlY2ltYWwgPSAiLiI7CisrICBkZWNpbWFsd2MgPSBMJy4nOworKyNlbmRpZgorIAorIAorICAgLyogRmV0Y2ggdGhlIGFyZ3VtZW50IHZhbHVlLgkqLworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMKK2luZGV4IDdkY2Q1OGUuLjZmYjc0OTEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYworKysrIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPG1hdGguaD4KKyAjaW5jbHVkZSA8cHJpbnRmLmg+CisgI2luY2x1ZGUgPGxpYmlvUC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIC8qIFRoaXMgZGVmaW5lcyBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGUgc2FtZSBjb2RlIGZvciBHTlUgQyBsaWJyYXJ5IGFuZAorQEAgLTExNiw3ICsxMTcsMTQgQEAgX19wcmludGZfc2l6ZSAoRklMRSAqZnAsIGNvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqaW5mbywKKyAKKyAgIHN0cnVjdCBwcmludGZfaW5mbyBmcF9pbmZvOworICAgaW50IGRvbmUgPSAwOworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpbnQgd2lkZSA9IGluZm8tPndpZGU7CisrI2Vsc2UKKysgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtIHdoZW4KKysgICAgIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBidXQgdGhlIGNvbXBpbGVyIGNhbid0CisrICAgICBiZSB0cnVzdGVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBjb25zdCBpbnQgd2lkZSA9IDA7CisrI2VuZGlmCisgICBpbnQgcmVzOworIAorICAgLyogRmV0Y2ggdGhlIGFyZ3VtZW50IHZhbHVlLgkqLworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMgYi9zdGRpby1jb21tb24vc2NhbmYxNC5jCitpbmRleCBjZmZjY2IwLi42Y2MyNjBhIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3NjYW5mMTQuYworKysrIGIvc3RkaW8tY29tbW9uL3NjYW5mMTQuYworQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDxsaWJjLWludGVybmFsLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2RlZmluZSBGQUlMKCkgXAorICAgZG8gewkJCQkJCQlcCitAQCAtNDgsNiArNDksNyBAQCBtYWluICh2b2lkKQorICAgLyogU2VlIGV4cGxhbmF0aW9uIGFib3ZlLiAgKi8KKyAgIERJQUdfUFVTSF9ORUVEU19DT01NRU5UOworICAgRElBR19JR05PUkVfTkVFRFNfQ09NTUVOVCAoNC45LCAiLVdmb3JtYXQiKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoc3NjYW5mICgiIDMuMjVTIHgiLCAiJTRhUyUzYyIsICZsc3AsIGMpICE9IDIpCisgICAgIEZBSUwgKCk7CisgICBlbHNlCitAQCAtNTcsNiArNTksNyBAQCBtYWluICh2b2lkKQorICAgICAgIG1lbXNldCAobHNwLCAneCcsIHNpemVvZiBMIjMuMjUiKTsKKyAgICAgICBmcmVlIChsc3ApOworICAgICB9CisrI2VuZGlmCisgICBpZiAoc3NjYW5mICgiNC4yNVswLTkuXSB4IiwgIiVhWzAtOS5dJThjIiwgJnNwLCBjKSAhPSAyKQorICAgICBGQUlMICgpOworICAgZWxzZQorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYyBiL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYworaW5kZXggNWRlZjI3Zi4uN2M5YjkxZSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYworKysrIGIvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jCitAQCAtMTksNiArMTksNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgZG9fdGVzdCAodm9pZCkKK0BAIC0zNCwxMiArMzUsMTQgQEAgZG9fdGVzdCAodm9pZCkKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAvKiBQT1NJWCBzYXlzIHRoYXQgcGlwZSBzdHJlYW1zIGFyZSBieXRlLW9yaWVudGVkLiAgKi8KKyAgIGlmIChmd2lkZSAoZiwgMCkgPj0gMCkKKyAgICAgeworICAgICAgIHB1dHMgKCJwb3BlbiBkaWQgbm90IHJldHVybiBieXRlLW9yaWVudGVkIHN0cmVhbSIpOworICAgICAgIHJlc3VsdCA9IDE7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIGlmIChnZXRsaW5lICgmbGluZSwgJmxlbiwgZikgIT0gNSkKKyAgICAgeworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jIGIvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMKK2luZGV4IGQ1Mjg0YjkuLmYxZTNkMjEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYworKysrIGIvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMKK0BAIC0zLDcgKzMsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKy0KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgZG9fdGVzdCAodm9pZCkKK0BAIC0xMSwxMiArMTEsMTQgQEAgZG9fdGVzdCAodm9pZCkKKyAgIGNoYXIgYnVmWzEwMF07CisgICBpbnQgcmVzdWx0ID0gMDsKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuMGxzIiwgTCJmb28iKSAhPSAwCisgICAgICAgfHwgc3RybGVuIChidWYpICE9IDApCisgICAgIHsKKyAgICAgICBwdXRzICgic3ByaW50ZiAoYnVmLCBcIiUuMGxzXCIsIExcImZvb1wiKSBwcm9kdWNlZCBzb21lIG91dHB1dCIpOworICAgICAgIHJlc3VsdCA9IDE7CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICNkZWZpbmUgU0laRSAoMTAyNCo3MDAwMCkKKyAjZGVmaW5lIFNUUih4KSAjeAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMgYi9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jCitpbmRleCA1NTQ4YTcxLi4zMWVkMDI0IDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYworKysrIGIvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYworQEAgLTQsNiArNCw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDxsaWJjLWludGVybmFsLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIHQxICh2b2lkKQorQEAgLTEzNCw2ICsxMzUsNyBAQCBGICh2b2lkKQorICAgcHJpbnRmICgiZXhwZWN0ZWQgXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IFwiJXNcIlxuIiwKKyAJICBidWYpOworIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBzd3ByaW50ZiAod2J1Ziwgc2l6ZW9mIHdidWYgLyBzaXplb2YgKHdidWZbMF0pLCBMIiVhICVBICVlICVFICVmICVGICVnICVHIiwKKyAJICAgIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwsCisgCSAgICBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsKTsKK0BAIC0xNzEsNiArMTczLDcgQEAgRiAodm9pZCkKKyAgIHJlc3VsdCB8PSB3Y3NjbXAgKHdidWYsIEwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIikgIT0gMDsKKyAgIHByaW50ZiAoImV4cGVjdGVkIExcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgTFwiJVNcIlxuIiwKKyAJICB3YnVmKTsKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgbHFuYW52YWwgPSBOQU47CisgCitAQCAtMjE1LDYgKzIxOCw3IEBAIEYgKHZvaWQpCisgICBwcmludGYgKCJleHBlY3RlZCBcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgXCIlc1wiXG4iLAorIAkgIGJ1Zik7CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIHN3cHJpbnRmICh3YnVmLCBzaXplb2Ygd2J1ZiAvIHNpemVvZiAod2J1ZlswXSksCisgCSAgICBMIiVMYSAlTEEgJUxlICVMRSAlTGYgJUxGICVMZyAlTEciLAorIAkgICAgbHFuYW52YWwsIGxxbmFudmFsLCBscW5hbnZhbCwgbHFuYW52YWwsCitAQCAtMjU5LDYgKzI2Myw3IEBAIEYgKHZvaWQpCisgICByZXN1bHQgfD0gd2NzY21wICh3YnVmLCBMIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiIpICE9IDA7CisgICBwcmludGYgKCJleHBlY3RlZCBMXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IExcIiVTXCJcbiIsCisgCSAgd2J1Zik7CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jIGIvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMKK2luZGV4IDA1OTJlNzAuLmYyMWQ5NzMgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdmZwcmludGYuYworKysrIGIvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMKK0BAIC0yOSw2ICsyOSw3IEBACisgI2luY2x1ZGUgPF9pdG9hLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogVGhpcyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzdGFuZGFyZCBzdGRpbyBpbXBsZW1lbnRhdGlvbiBmb3VuZAorICAgIGluIEdOVSBDIGxpYnJhcnkgYW5kIHRoZSBsaWJpbyBpbXBsZW1lbnRhdGlvbiBvcmlnaW5hbGx5IGZvdW5kIGluCitAQCAtMTQwLDYgKzE0MSwxOCBAQCB0eXBlZGVmIHdjaGFyX3QgVEhPVVNBTkRTX1NFUF9UOworICMgZGVmaW5lIEVPRiBXRU9GCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMSkKKysjZWxzZQorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgwKQorKyNlbmRpZgorKworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBMT0NBTEVfU1VQUE9SVCAoMSkKKysjZWxzZQorKyMgZGVmaW5lIExPQ0FMRV9TVVBQT1JUICgwKQorKyNlbmRpZgorKworICNpbmNsdWRlICJfaTE4bl9udW1iZXIuaCIKKyAKKyAvKiBJbmNsdWRlIHRoZSBzaGFyZWQgY29kZSBmb3IgcGFyc2luZyB0aGUgZm9ybWF0IHN0cmluZy4gICovCitAQCAtMTA2NSw4ICsxMDc4LDExIEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGp1bXBfdGFibGVbXSA9CisgIyBkZWZpbmUgcHJvY2Vzc19zdHJpbmdfYXJnKGZzcGVjKSBcCisgICAgIExBQkVMIChmb3JtX2NoYXJhY3Rlcik6CQkJCQkJICAgICAgXAorICAgICAgIC8qIENoYXJhY3Rlci4gICovCQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoaXNfbG9uZykJCQkJCQkJICAgICAgXAorLQlnb3RvIExBQkVMIChmb3JtX3djaGFyYWN0ZXIpOwkJCQkJICAgICAgXAorKyAgICAgIGlmIChpc19sb25nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBnb3RvIExBQkVMIChmb3JtX3djaGFyYWN0ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgLS13aWR0aDsJLyogQWNjb3VudCBmb3IgdGhlIGNoYXJhY3RlciBpdHNlbGYuICAqLwkJICAgICAgXAorICAgICAgIGlmICghbGVmdCkJCQkJCQkJICAgICAgXAorIAlQQUQgKCcgJyk7CQkJCQkJCSAgICAgIFwKK0BAIC0xMDc5LDYgKzEwOTUsNyBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBqdW1wX3RhYmxlW10gPQorICAgICAgIGJyZWFrOwkJCQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgTEFCRUwgKGZvcm1fd2NoYXJhY3Rlcik6CQkJCQkJICAgICAgXAorKyAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB7CQkJCQkJCQkJICAgICAgXAorIAkvKiBXaWRlIGNoYXJhY3Rlci4gICovCQkJCQkJICAgICAgXAorIAljaGFyIGJ1ZltNQl9DVVJfTUFYXTsJCQkJCQkgICAgICBcCitAQCAtMTE0NSw2ICsxMTYyLDcgQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QganVtcF90YWJsZVtdID0KKyAJICB9CQkJCQkJCQkgICAgICBcCisgCWVsc2UJCQkJCQkJCSAgICAgIFwKKyAJICB7CQkJCQkJCQkgICAgICBcCisrICAgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgY29uc3Qgd2NoYXJfdCAqczIgPSAoY29uc3Qgd2NoYXJfdCAqKSBzdHJpbmc7CQkgICAgICBcCisgCSAgICBtYnN0YXRlX3QgbWJzdGF0ZTsJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorQEAgLTEzOTksNyArMTQxNyw5IEBAIHZmcHJpbnRmIChGSUxFICpzLCBjb25zdCBDSEFSX1QgKmZvcm1hdCwgdmFfbGlzdCBhcCkKKyAgICAgTEFCRUwgKGZsYWdfcXVvdGUpOgorICAgICAgIGdyb3VwID0gMTsKKyAKKy0gICAgICBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisrICAgICAgaWYgKCEgTE9DQUxFX1NVUFBPUlQpCisrICAgICAgICBncm91cGluZyA9IE5VTEw7CisrICAgICAgZWxzZSBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisgCXsKKyAjaWZkZWYgQ09NUElMRV9XUFJJTlRGCisgCSAgdGhvdXNhbmRzX3NlcCA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsCitAQCAtMTcyOCw4ICsxNzQ4LDkgQEAgcHJpbnRmX3Bvc2l0aW9uYWwgKF9JT19GSUxFICpzLCBjb25zdCBDSEFSX1QgKmZvcm1hdCwgaW50IHJlYWRvbmx5X2Zvcm1hdCwKKyAgIHNpemVfdCBjbnQ7CisgCisgICBDSEFSX1QgKndvcmtzdGFydCA9IE5VTEw7CistCistICBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisrICBpZiAoISBMT0NBTEVfU1VQUE9SVCkKKysgICAgZ3JvdXBpbmcgPSBOVUxMOworKyAgZWxzZSBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisgICAgIHsKKyAjaWZkZWYgQ09NUElMRV9XUFJJTlRGCisgICAgICAgdGhvdXNhbmRzX3NlcCA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYyBiL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMKK2luZGV4IDBlMjA0ZTcuLjY2Y2MwYWYgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdmZzY2FuZi5jCisrKysgYi9zdGRpby1jb21tb24vdmZzY2FuZi5jCitAQCAtMjksNiArMjksNyBAQAorICNpbmNsdWRlIDx3Y3R5cGUuaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZkZWYJX19HTlVDX18KKyAjIGRlZmluZSBIQVZFX0xPTkdMT05HCitAQCAtMTMzLDYgKzEzNCwxMiBAQAorICMgZGVmaW5lIFdJTlRfVAkJaW50CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMSkKKysjZWxzZQorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgwKQorKyNlbmRpZgorKworICNkZWZpbmUgZW5jb2RlX2Vycm9yKCkgZG8gewkJCQkJCSAgICAgIFwKKyAJCQkgIGVycnZhbCA9IDQ7CQkJCQkgICAgICBcCisgCQkJICBfX3NldF9lcnJubyAoRUlMU0VRKTsJCQkJICAgICAgXAorQEAgLTMxNiwyNCArMzIzLDM1IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgICBBUkdDSEVDSyAocywgZm9ybWF0KTsKKyAKKyAgeworLSNpZm5kZWYgQ09NUElMRV9XU0NBTkYKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICYmICFkZWZpbmVkIChDT01QSUxFX1dTQ0FORikKKyAgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY29uc3QgY3VybnVtZXJpYyA9IGxvYy0+X19sb2NhbGVzW0xDX05VTUVSSUNdOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAvKiBGaWd1cmUgb3V0IHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gICovCistI2lmZGVmIENPTVBJTEVfV1NDQU5GCisrIyBpZmRlZiBDT01QSUxFX1dTQ0FORgorICAgIGRlY2ltYWwgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLCBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDKTsKKy0jZWxzZQorKyMgZWxzZQorICAgIGRlY2ltYWwgPSBjdXJudW1lcmljLT52YWx1ZXNbX05MX0lURU1fSU5ERVggKERFQ0lNQUxfUE9JTlQpXS5zdHJpbmc7CistI2VuZGlmCisrIyBlbmRpZgorICAgIC8qIEZpZ3VyZSBvdXQgdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgKi8KKy0jaWZkZWYgQ09NUElMRV9XU0NBTkYKKysjIGlmZGVmIENPTVBJTEVfV1NDQU5GCisgICAgdGhvdXNhbmRzID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQyk7CistI2Vsc2UKKysjIGVsc2UKKyAgICB0aG91c2FuZHMgPSBjdXJudW1lcmljLT52YWx1ZXNbX05MX0lURU1fSU5ERVggKFRIT1VTQU5EU19TRVApXS5zdHJpbmc7CisgICAgaWYgKCp0aG91c2FuZHMgPT0gJ1wwJykKKyAgICAgIHRob3VzYW5kcyA9IE5VTEw7CistI2VuZGlmCisrIyBlbmRpZgorKyNlbHNlIC8qIGlmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisrICAgLyogSGFyZC1jb2RlIHZhbHVlcyBmcm9tIHRoZSBDIGxvY2FsZS4gICovCisrIyBpZmRlZiBDT01QSUxFX1dTQ0FORgorKyAgIGRlY2ltYWwgPSBMJy4nOworKyAgIHRob3VzYW5kcyA9IEwnXDAnOworKyMgZWxzZQorKyAgIGRlY2ltYWwgPSAiLiI7CisrICAgdGhvdXNhbmRzID0gTlVMTDsKKysjIGVuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICB9CisgCisgICAvKiBMb2NrIHRoZSBzdHJlYW0uICAqLworQEAgLTM4NSw2ICs0MDMsOCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorICNpZm5kZWYgQ09NUElMRV9XU0NBTkYKKyAgICAgICBpZiAoIWlzYXNjaWkgKCh1bnNpZ25lZCBjaGFyKSAqZikpCisgCXsKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrCisgCSAgLyogTm9uLUFTQ0lJLCBtYXkgYmUgYSBtdWx0aWJ5dGUuICAqLworIAkgIGludCBsZW4gPSBfX21icmxlbiAoZiwgc3RybGVuIChmKSwgJnN0YXRlKTsKKyAJICBpZiAobGVuID4gMCkKK0BAIC04MzAsNiArODUwLDggQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAgIH0KKyAJICAvKiBGQUxMVEhST1VHSCAqLworIAljYXNlIExfKCdDJyk6CisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKworIAkgIGlmICh3aWR0aCA9PSAtMSkKKyAJICAgIHdpZHRoID0gMTsKKyAKK0BAIC0xMTcyLDYgKzExOTQsOCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgIC8qIEZBTExUSFJPVUdIICovCisgCisgCWNhc2UgTF8oJ1MnKToKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrCisgCSAgeworICNpZm5kZWYgQ09NUElMRV9XU0NBTkYKKyAJICAgIG1ic3RhdGVfdCBjc3RhdGU7CitAQCAtMTQxOSwxMCArMTQ0MywxNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgICAgICBjb25zdCBjaGFyICptYmRpZ2l0c1sxMF07CisgCSAgICAgIGNvbnN0IGNoYXIgKm1iZGlnaXRzX2V4dGVuZGVkWzEwXTsKKyAjZW5kaWYKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIC8qICAidG9faW5wdW5jdCIgaXMgYSBtYXAgZnJvbSBBU0NJSSBkaWdpdHMgdG8gdGhlaXIKKyAJCSAgZXF1aXZhbGVudCBpbiBsb2NhbGUuIFRoaXMgaXMgZGVmaW5lZCBmb3IgbG9jYWxlcworIAkJICB3aGljaCB1c2UgYW4gZXh0cmEgZGlnaXRzIHNldC4gICovCisgCSAgICAgIHdjdHJhbnNfdCBtYXAgPSBfX3djdHJhbnMgKCJ0b19pbnB1bmN0Iik7CisrI2Vsc2UKKysgICAgICAgICAgICAgIC8qIFRoaXMgd2lsbCBhbHdheXMgYmUgdGhlIGNhc2Ugd2hlbgorKyAgICAgICAgICAgICAgICAgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgYnV0IHRoZQorKyAgICAgICAgICAgICAgICAgY29tcGlsZXIgY2FuJ3QgZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgICAgICAgICAgICAgIHdjdHJhbnNfdCBtYXAgPSBOVUxMOworKyNlbmRpZgorIAkgICAgICBpbnQgbjsKKyAKKyAJICAgICAgZnJvbV9sZXZlbCA9IDA7CitAQCAtMjA4OCw2ICsyMTE5LDcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJCS0td2lkdGg7CisgCSAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgIHdjdHJhbnNfdCBtYXA7CisgCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKChmbGFncyAmIEkxOE4pICE9IDAsIDApCisgCSAgICAgIC8qIEhleGFkZWNpbWFsIGZsb2F0cyBtYWtlIG5vIHNlbnNlLCBmaXhpbmcgbG9jYWxpemVkCitAQCAtMjMwNCw2ICsyMzM2LDcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAgICAgOworICNlbmRpZgorIAkgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAKKyAJICAvKiBIYXZlIHdlIHJlYWQgYW55IGNoYXJhY3Rlcj8gIElmIHdlIHRyeSB0byByZWFkIGEgbnVtYmVyCisgCSAgICAgaW4gaGV4YWRlY2ltYWwgbm90YXRpb24gYW5kIHdlIGhhdmUgcmVhZCBvbmx5IHRoZSBgMHgnCitAQCAtMjM0Myw3ICsyMzc2LDEwIEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCisgCWNhc2UgTF8oJ1snKToJLyogQ2hhcmFjdGVyIGNsYXNzLiAgKi8KKyAJICBpZiAoZmxhZ3MgJiBMT05HKQorLQkgICAgU1RSSU5HX0FSRyAod3N0ciwgd2NoYXJfdCwgMTAwKTsKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysgICAgICAgICAgICAgIFNUUklOR19BUkcgKHdzdHIsIHdjaGFyX3QsIDEwMCk7CisrICAgICAgICAgICAgfQorIAkgIGVsc2UKKyAJICAgIFNUUklOR19BUkcgKHN0ciwgY2hhciwgMTAwKTsKKyAKK0BAIC0yNDE3LDYgKzI0NTMsNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgIGlmIChmbGFncyAmIExPTkcpCisgCSAgICB7CisgCSAgICAgIHNpemVfdCBub3cgPSByZWFkX2luOworKyAgICAgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisgI2lmZGVmIENPTVBJTEVfV1NDQU5GCisgCSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChpbmNoYXIgKCkgPT0gV0VPRikpCisgCQlpbnB1dF9lcnJvciAoKTsKK2RpZmYgLS1naXQgYS9zdGRsaWIvTWFrZWZpbGUgYi9zdGRsaWIvTWFrZWZpbGUKK2luZGV4IDQwMjQ2NmEuLjdlN2UzMDQgMTAwNjQ0CistLS0gYS9zdGRsaWIvTWFrZWZpbGUKKysrKyBiL3N0ZGxpYi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3Igc3RkbGliIHJvdXRpbmVzCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RkbGliCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsNyArMzIsNyBAQCBoZWFkZXJzCTo9IHN0ZGxpYi5oIGJpdHMvc3RkbGliLmggYml0cy9zdGRsaWItbGRibC5oIGJpdHMvc3RkbGliLWZsb2F0LmggICAgICBcCisgCSAgIGFsbG9jYS5oIGZtdG1zZy5oCQkJCQkJICAgICAgXAorIAkgICBiaXRzL3N0ZGxpYi1ic2VhcmNoLmgKKyAKKy1yb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisrcm91dGluZXMteQk6PQkJCQkJCQkgICAgICBcCisgCWF0b2YgYXRvaSBhdG9sIGF0b2xsCQkJCQkJICAgICAgXAorIAlhYm9ydAkJCQkJCQkJICAgICAgXAorIAlic2VhcmNoIHFzb3J0IG1zb3J0CQkJCQkJICAgICAgXAorQEAgLTM5LDcgKzQxLDYgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlxdWlja19leGl0IGF0X3F1aWNrX2V4aXQgY3hhX2F0X3F1aWNrX2V4aXQgY3hhX3RocmVhZF9hdGV4aXRfaW1wbCAgICAgXAorIAlhYnMgbGFicyBsbGFicwkJCQkJCQkgICAgICBcCisgCWRpdiBsZGl2IGxsZGl2CQkJCQkJCSAgICAgIFwKKy0JbWJsZW4gbWJzdG93Y3MgbWJ0b3djIHdjc3RvbWJzIHdjdG9tYgkJCQkgICAgICBcCisgCXJhbmRvbSByYW5kb21fciByYW5kIHJhbmRfcgkJCQkJICAgICAgXAorIAlkcmFuZDQ4IGVyYW5kNDggbHJhbmQ0OCBucmFuZDQ4IG1yYW5kNDgganJhbmQ0OAkJCSAgICAgIFwKKyAJc3JhbmQ0OCBzZWVkNDggbGNvbmc0OAkJCQkJCSAgICAgIFwKK0BAIC01Miw5ICs1MywxOCBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCXN0cnRvZl9sIHN0cnRvZF9sIHN0cnRvbGRfbAkJCQkJICAgICAgXAorIAlzeXN0ZW0gY2Fub25pY2FsaXplCQkJCQkJICAgICAgXAorIAlhNjRsIGw2NGEJCQkJCQkJICAgICAgXAorLQlycG1hdGNoIHN0cmZtb24gc3RyZm1vbl9sIGdldHN1Ym9wdCB4cGdfYmFzZW5hbWUgZm10bXNnCQkgICAgICBcCistCXN0cnRvaW1heCBzdHJ0b3VtYXggd2NzdG9pbWF4IHdjc3RvdW1heAkJCQkgICAgICBcCisrCWdldHN1Ym9wdCB4cGdfYmFzZW5hbWUJCQkJCQkgICAgICBcCisrCXN0cnRvaW1heCBzdHJ0b3VtYXgJCQkJCQkgICAgICBcCisgCWdldGNvbnRleHQgc2V0Y29udGV4dCBtYWtlY29udGV4dCBzd2FwY29udGV4dAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0JCQkJICAgICAgXAorKwlzdHJmbW9uIHN0cmZtb25fbAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9CQkJCSAgICAgIFwKKysJbWJsZW4gbWJzdG93Y3MgbWJ0b3djIHdjc3RvbWJzIHdjdG9tYgkJCQkgICAgICBcCisrCXdjc3RvaW1heCB3Y3N0b3VtYXgKKytpZmVxICh5eSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChPUFRJT05fUE9TSVhfUkVHRVhQKSkKKytyb3V0aW5lcy15ICs9IHJwbWF0Y2gKKytlbmRpZgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GTVRNU0cpICs9IGZtdG1zZworIGF1eCA9CWdyb3VwaW5nIGdyb3VwaW5nd2MgdGVuc19pbl9saW1iCisgCisgIyBUaGVzZSByb3V0aW5lcyB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgbGliYyBzaGFyZWQgb2JqZWN0LgorQEAgLTYyLDIwICs3MiwyNCBAQCBhdXggPQlncm91cGluZyBncm91cGluZ3djIHRlbnNfaW5fbGltYgorICMgbGlua2VkIGFnYWluc3Qgd2hlbiB0aGUgc2hhcmVkIGxpYnJhcnkgd2lsbCBiZSB1c2VkLgorIHN0YXRpYy1vbmx5LXJvdXRpbmVzID0gYXRleGl0IGF0X3F1aWNrX2V4aXQKKyAKKy10ZXN0LXNyY3MJOj0gdHN0LWZtdG1zZworLXRlc3RzCQk6PSB0c3Qtc3RydG9sIHRzdC1zdHJ0b2QgdGVzdG1iIHRlc3RyYW5kIHRlc3Rzb3J0IHRlc3RkaXYgICBcCisrdGVzdC1zcmNzLSQoT1BUSU9OX0VHTElCQ19GTVRNU0cpCTo9IHRzdC1mbXRtc2cKKyt0ZXN0cwkJOj0gdHN0LXN0cnRvbCB0c3Qtc3RydG9kIHRlc3RyYW5kIHRlc3Rzb3J0IHRlc3RkaXYJICAgIFwKKyAJCSAgIHRlc3QtY2Fub24gdGVzdC1jYW5vbjIgdHN0LXN0cnRvbGwgdHN0LWVudmlyb24JICAgIFwKKyAJCSAgIHRzdC14cGctYmFzZW5hbWUgdHN0LXJhbmRvbSB0c3QtcmFuZG9tMiB0c3QtYnNlYXJjaAkgICAgXAorIAkJICAgdHN0LWxpbWl0cyB0c3QtcmFuZDQ4IGJ1Zy1zdHJ0b2QgdHN0LXNldGNvbnRleHQgICAgICAgICAgXAorLQkJICAgdHN0LXNldGNvbnRleHQyIHRlc3QtYTY0bCB0c3QtcXNvcnQgdHN0LXN5c3RlbSB0ZXN0bWIyICAgXAorLQkJICAgYnVnLXN0cnRvZDIgdHN0LWF0b2YxIHRzdC1hdG9mMiB0c3Qtc3RydG9kMiB0c3Qtc3RydG9kMyAgXAorLQkJICAgdHN0LXJhbmQ0OC0yIHRzdC1tYWtlY29udGV4dCB0c3Qtc3RydG9kNCB0c3Qtc3RydG9kNSAgICAgXAorKwkJICAgdHN0LXNldGNvbnRleHQyIHRlc3QtYTY0bCB0c3QtcXNvcnQgdHN0LXN5c3RlbQkgICAgXAorKwkJICAgYnVnLXN0cnRvZDIgdHN0LWF0b2YxIHRzdC1hdG9mMiB0c3Qtc3RydG9kMiAJCSAgICBcCisrCQkgICB0c3QtcmFuZDQ4LTIgdHN0LW1ha2Vjb250ZXh0IAkJCSAgICBcCisgCQkgICB0c3QtcXNvcnQyIHRzdC1tYWtlY29udGV4dDIgdHN0LXN0cnRvZDYgdHN0LXVuc2V0ZW52MSAgICBcCisgCQkgICB0c3QtbWFrZWNvbnRleHQzIGJ1Zy1nZXRjb250ZXh0IGJ1Zy1mbXRtc2cxCQkgICAgXAorIAkJICAgdHN0LXNlY3VyZS1nZXRlbnYgdHN0LXN0cnRvZC1vdmVyZmxvdyB0c3Qtc3RydG9kLXJvdW5kICAgXAorIAkJICAgdHN0LXRpbmluZXNzIHRzdC1zdHJ0b2QtdW5kZXJmbG93IHRzdC10bHMtYXRleGl0CSAgICBcCisgCQkgICB0c3Qtc2V0Y29udGV4dDMgdHN0LXRscy1hdGV4aXQtbm9kZWxldGUKKyB0ZXN0cy1zdGF0aWMJOj0gdHN0LXNlY3VyZS1nZXRlbnYKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHRzdC1zdHJ0b2QzIHRzdC1zdHJ0b2Q0IHRzdC1zdHJ0b2Q1IHRlc3RtYjIKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCQkrPSB0ZXN0bWIKKyAKKyBtb2R1bGVzLW5hbWVzCT0gdHN0LXRscy1hdGV4aXQtbGliCisgCitAQCAtMTE2LDggKzEzMCwxMCBAQCBDRkxBR1MtdHN0LW1ha2Vjb250ZXh0Mi5jID0gJChzdGFjay1hbGlnbi10ZXN0LWZsYWdzKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpaXNvbWFjLm91dAorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfRk1UTVNHKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1mbXRtc2cub3V0CisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9zdGRsaWIvc3RydG9kX2wuYyBiL3N0ZGxpYi9zdHJ0b2RfbC5jCitpbmRleCBlMTNhYjFlLi42M2VmZTQxIDEwMDY0NAorLS0tIGEvc3RkbGliL3N0cnRvZF9sLmMKKysrKyBiL3N0ZGxpYi9zdHJ0b2RfbC5jCitAQCAtMTcsNiArMTcsNyBAQAorICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDx4bG9jYWxlLmg+CisgCisgZXh0ZXJuIGRvdWJsZSBfX19fc3RydG9kX2xfaW50ZXJuYWwgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50LCBfX2xvY2FsZV90KTsKK0BAIC01NDgsNiArNTQ5LDcgQEAgX19fX1NUUlRPRl9JTlRFUk5BTCAobnB0ciwgZW5kcHRyLCBncm91cCwgbG9jKQorICAgLyogVXNlZCBpbiBzZXZlcmFsIHBsYWNlcy4gICovCisgICBpbnQgY250OworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjdXJyZW50ID0gbG9jLT5fX2xvY2FsZXNbTENfTlVNRVJJQ107CisgCisgICBpZiAoX19nbGliY191bmxpa2VseSAoZ3JvdXApKQorQEAgLTU4Niw2ICs1ODgsMTcgQEAgX19fX1NUUlRPRl9JTlRFUk5BTCAobnB0ciwgZW5kcHRyLCBncm91cCwgbG9jKQorICAgZGVjaW1hbF9sZW4gPSBzdHJsZW4gKGRlY2ltYWwpOworICAgYXNzZXJ0IChkZWNpbWFsX2xlbiA+IDApOworICNlbmRpZgorKyNlbHNlIC8qIGlmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisrICAvKiBIYXJkLWNvZGUgdmFsdWVzIGZyb20gdGhlICdDJyBsb2NhbGUuICAqLworKyAgZ3JvdXBpbmcgPSBOVUxMOworKyNpZmRlZiBVU0VfV0lERV9DSEFSCisrICBkZWNpbWFsID0gTCcuJzsKKysjIGRlZmluZSBkZWNpbWFsX2xlbiAxCisrI2Vsc2UKKysgIGRlY2ltYWwgPSAiLiI7CisrICBkZWNpbWFsX2xlbiA9IDE7CisrI2VuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAorICAgLyogUHJlcGFyZSBudW1iZXIgcmVwcmVzZW50YXRpb24uICAqLworICAgZXhwb25lbnQgPSAwOworZGlmZiAtLWdpdCBhL3N0ZGxpYi90c3Qtc3RydG9kLmMgYi9zdGRsaWIvdHN0LXN0cnRvZC5jCitpbmRleCBhNDY5MjA4Li4yOGZiNDIzIDEwMDY0NAorLS0tIGEvc3RkbGliL3RzdC1zdHJ0b2QuYworKysrIGIvc3RkbGliL3RzdC1zdHJ0b2QuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdHJ1Y3QgbHRlc3QKKyAgIHsKK0BAIC0xNzYsNyArMTc3LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKKyAKKyAgIHN0YXR1cyB8PSBsb25nX2RibCAoKTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBzdGF0dXMgfD0gbG9jYWxlX3Rlc3QgKCk7CisrI2VuZGlmCisgCisgICByZXR1cm4gc3RhdHVzID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworIH0KK0BAIC0yMTksNiArMjIyLDcgQEAgbG9uZ19kYmwgKHZvaWQpCisgICByZXR1cm4gMDsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIC8qIFBlcmZvcm0gYSBmZXcgdGVzdHMgaW4gYSBsb2NhbGUgd2l0aCB0aG91c2FuZHMgc2VwYXJhdG9ycy4gICovCisgc3RhdGljIGludAorIGxvY2FsZV90ZXN0ICh2b2lkKQorQEAgLTI3NiwzICsyODAsNCBAQCBsb2NhbGVfdGVzdCAodm9pZCkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KK2RpZmYgLS1naXQgYS9zdHJlYW1zL01ha2VmaWxlIGIvc3RyZWFtcy9NYWtlZmlsZQoraW5kZXggYThhNjE2Mi4uY2ViNDIzZiAxMDA2NDQKKy0tLSBhL3N0cmVhbXMvTWFrZWZpbGUKKysrKyBiL3N0cmVhbXMvTWFrZWZpbGUKK0BAIC0xOCwxMSArMTgsMTQgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3Igc3RyZWFtcy4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdHJlYW1zCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJPSBzdHJvcHRzLmggc3lzL3N0cm9wdHMuaCBiaXRzL3N0cm9wdHMuaCBiaXRzL3h0aXR5cGVzLmgKKy1yb3V0aW5lcwk9IGlzYXN0cmVhbSBnZXRtc2cgZ2V0cG1zZyBwdXRtc2cgcHV0cG1zZyBmYXR0YWNoIGZkZXRhY2gKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1RSRUFNUykgXAorKwkrPSBpc2FzdHJlYW0gZ2V0bXNnIGdldHBtc2cgcHV0bXNnIHB1dHBtc2cgZmF0dGFjaCBmZGV0YWNoCisgCisgaW5jbHVkZSAuLi9SdWxlcworZGlmZiAtLWdpdCBhL3N0cmluZy9NYWtlZmlsZSBiL3N0cmluZy9NYWtlZmlsZQoraW5kZXggODQyNGE2MS4uNTk4ODgzNCAxMDA2NDQKKy0tLSBhL3N0cmluZy9NYWtlZmlsZQorKysrIGIvc3RyaW5nL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igc3RyaW5nIHBvcnRpb24gb2YgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdHJpbmcKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zOSwxMCArNDEsMTIgQEAgcm91dGluZXMJOj0gc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY29sbCBzdHJjcHkgc3RyY3NwbgkJXAorIAkJICAgJChhZGRwcmVmaXggYXJnei0sYXBwZW5kIGNvdW50IGNyZWF0ZSBjdHNlcCBuZXh0CVwKKyAJCQkJICAgICBkZWxldGUgZXh0cmFjdCBpbnNlcnQgc3RyaW5naWZ5CVwKKyAJCQkJICAgICBhZGRzZXAgcmVwbGFjZSkJCQlcCistCQkgICBlbnZ6IGJhc2VuYW1lCQkJCQlcCisrCQkgICBiYXNlbmFtZQkJCQkJCVwKKyAJCSAgIHN0cmNvbGxfbCBzdHJ4ZnJtX2wgc3RyaW5nLWlubGluZXMgbWVtcmNocgkJXAorIAkJICAgeHBnLXN0cmVycm9yIHN0cmVycm9yX2wKKyAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRU5WWikgKz0gZW52egorKworIHN0cm9wLXRlc3RzCTo9IG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbW1vdmUgbWVtcGNweSBtZW1zZXQgbWVtY2NweQlcCisgCQkgICBzdHBjcHkgc3RwbmNweSBzdHJjYXQgc3RyY2hyIHN0cmNtcCBzdHJjcHkgc3RyY3NwbglcCisgCQkgICBzdHJsZW4gc3RybmNtcCBzdHJuY3B5IHN0cnBicmsgc3RycmNociBzdHJzcG4gbWVtbWVtCVwKK0BAIC01MSwxMCArNTUsMTIgQEAgc3Ryb3AtdGVzdHMJOj0gbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1wY3B5IG1lbXNldCBtZW1jY3B5CVwKKyB0ZXN0cwkJOj0gdGVzdGVyIGlubC10ZXN0ZXIgbm9pbmwtdGVzdGVyIHRlc3Rjb3B5IHRlc3QtZmZzCVwKKyAJCSAgIHRzdC1zdHJsZW4gc3RyYXRjbGlmZiB0c3Qtc3ZjIHRzdC1pbmxjYWxsCQlcCisgCQkgICBidWctc3RybmNhdDEgYnVnLXN0cnNwbjEgYnVnLXN0cnBicmsxIHRzdC1ic3dhcAlcCistCQkgICB0c3Qtc3RydG9rIHRzdC1zdHJ4ZnJtIGJ1Zy1zdHJjb2xsMSB0c3Qtc3RyZnJ5CVwKKysJCSAgIHRzdC1zdHJ0b2sgdHN0LXN0cmZyeQlcCisgCQkgICBidWctc3RydG9rMSAkKGFkZHByZWZpeCB0ZXN0LSwkKHN0cm9wLXRlc3RzKSkJXAorLQkJICAgYnVnLWVudnoxIHRzdC1zdHJ4ZnJtMiB0c3QtZW5kaWFuIHRzdC1zdmMyCQlcCistCQkgICB0c3Qtc3RydG9rX3IKKysJCSAgIHRzdC1zdHJ4ZnJtMiB0c3QtZW5kaWFuIHRzdC1zdmMyIHRzdC1zdHJ0b2tfcgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19FTlZaKSArPSBidWctZW52ejEKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHRzdC1zdHJ4ZnJtIGJ1Zy1zdHJjb2xsMQorIAorIHh0ZXN0cyA9IHRzdC1zdHJjb2xsLW92ZXJmbG93CisgCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0cmNvbGxfbC5jIGIvc3RyaW5nL3N0cmNvbGxfbC5jCitpbmRleCA4ZjEyMjVmLi5iMzZiMThjIDEwMDY0NAorLS0tIGEvc3RyaW5nL3N0cmNvbGxfbC5jCisrKysgYi9zdHJpbmcvc3RyY29sbF9sLmMKK0BAIC0yNCw2ICsyNCw3IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmbmRlZiBTVFJJTkdfVFlQRQorICMgZGVmaW5lIFNUUklOR19UWVBFIGNoYXIKK0BAIC0yNjAsNyArMjYxLDExIEBAIGludAorIFNUUkNPTEwgKGNvbnN0IFNUUklOR19UWVBFICpzMSwgY29uc3QgU1RSSU5HX1RZUEUgKnMyLCBfX2xvY2FsZV90IGwpCisgeworICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmN1cnJlbnQgPSBsLT5fX2xvY2FsZXNbTENfQ09MTEFURV07CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludF9mYXN0MzJfdCBucnVsZXMgPSBjdXJyZW50LT52YWx1ZXNbX05MX0lURU1fSU5ERVggKF9OTF9DT0xMQVRFX05SVUxFUyldLndvcmQ7CisrI2Vsc2UKKysgIGNvbnN0IHVpbnRfZmFzdDMyX3QgbnJ1bGVzID0gMDsKKysjZW5kaWYKKyAgIC8qIFdlIGRvbid0IGFzc2lnbiB0aGUgZm9sbG93aW5nIHZhbHVlcyByaWdodCBhd2F5IHNpbmNlIGl0IG1pZ2h0IGJlCisgICAgICB1bm5lY2Vzc2FyeSBpbiBjYXNlIHRoZXJlIGFyZSBubyBydWxlcy4gICovCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpydWxlc2V0czsKK2RpZmYgLS1naXQgYS9zdHJpbmcvc3RyZXJyb3JfbC5jIGIvc3RyaW5nL3N0cmVycm9yX2wuYworaW5kZXggMmVkNzhiNS4uNjU4NDgxMyAxMDA2NDQKKy0tLSBhL3N0cmluZy9zdHJlcnJvcl9sLmMKKysrKyBiL3N0cmluZy9zdHJlcnJvcl9sLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgc3RhdGljIF9fdGhyZWFkIGNoYXIgKmxhc3RfdmFsdWU7CitAQCAtMjksMTAgKzMwLDE0IEBAIHN0YXRpYyBfX3RocmVhZCBjaGFyICpsYXN0X3ZhbHVlOworIHN0YXRpYyBjb25zdCBjaGFyICoKKyB0cmFuc2xhdGUgKGNvbnN0IGNoYXIgKnN0ciwgbG9jYWxlX3QgbG9jKQorIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBsb2NhbGVfdCBvbGRsb2MgPSBfX3VzZWxvY2FsZSAobG9jKTsKKyAgIGNvbnN0IGNoYXIgKnJlcyA9IF8oc3RyKTsKKyAgIF9fdXNlbG9jYWxlIChvbGRsb2MpOworICAgcmV0dXJuIHJlczsKKysjZWxzZQorKyAgcmV0dXJuIHN0cjsKKysjZW5kaWYKKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0cnhmcm1fbC5jIGIvc3RyaW5nL3N0cnhmcm1fbC5jCitpbmRleCA4YjYxZWEyLi40MWZkYzIyIDEwMDY0NAorLS0tIGEvc3RyaW5nL3N0cnhmcm1fbC5jCisrKysgYi9zdHJpbmcvc3RyeGZybV9sLmMKK0BAIC0yNCw2ICsyNCw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmbmRlZiBTVFJJTkdfVFlQRQorICMgZGVmaW5lIFNUUklOR19UWVBFIGNoYXIKK0BAIC02NjksNyArNjcwLDExIEBAIFNUUlhGUk0gKFNUUklOR19UWVBFICpkZXN0LCBjb25zdCBTVFJJTkdfVFlQRSAqc3JjLCBzaXplX3QgbiwgX19sb2NhbGVfdCBsKQorIHsKKyAgIGxvY2FsZV9kYXRhX3QgbF9kYXRhOworICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmN1cnJlbnQgPSBsLT5fX2xvY2FsZXNbTENfQ09MTEFURV07CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgbF9kYXRhLm5ydWxlcyA9IGN1cnJlbnQtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoX05MX0NPTExBVEVfTlJVTEVTKV0ud29yZDsKKysjZWxzZQorKyAgbF9kYXRhLm5ydWxlcyA9IDA7CisrI2VuZGlmCisgCisgICAvKiBIYW5kbGUgYnl0ZSBjb21wYXJpc29uIGNhc2UuICAqLworICAgaWYgKGxfZGF0YS5ucnVsZXMgPT0gMCkKK2RpZmYgLS1naXQgYS9zdHJpbmcvdGVzdC1zdHJjbXAuYyBiL3N0cmluZy90ZXN0LXN0cmNtcC5jCitpbmRleCBkYzRiYTZmLi5hOTc4NjU2IDEwMDY0NAorLS0tIGEvc3RyaW5nL3Rlc3Qtc3RyY21wLmMKKysrKyBiL3N0cmluZy90ZXN0LXN0cmNtcC5jCitAQCAtMzI5LDM0ICszMjksNiBAQCBjaGVjayAodm9pZCkKKyAJCUZPUl9FQUNIX0lNUEwgKGltcGwsIDApCisgCQljaGVja19yZXN1bHQgKGltcGwsIHMxICsgaTEsIHMyICsgaTIsIGV4cF9yZXN1bHQpOworICAgICAgIH0KKy0KKy0gIC8qIFRlc3QgY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIHplcm8gYnl0ZXMgYWZ0ZXIgdGhlIGZpcnN0LiAgKi8KKy0KKy0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTYgKyAxOyBpKyspCistICAgIHsKKy0gICAgICBzMVtpXSA9IDB4MDA7CistICAgICAgczJbaV0gPSAweDAwOworLSAgICB9CistCistICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCistICAgIHsKKy0gICAgICBpbnQgZXhwX3Jlc3VsdDsKKy0KKy0gICAgICBmb3IgKGludCB2YWwgPSAweDAxOyB2YWwgPCAweDEwMDsgdmFsKyspCistCXsKKy0JICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7IGorKykKKy0JICAgIHsKKy0JICAgICAgczFbal0gPSB2YWw7CistCSAgICAgIHMyW2pdID0gdmFsOworLQkgICAgfQorLQorLQkgIHMyW2ldID0gdmFsOworLQorLQkgIGV4cF9yZXN1bHQgPSBTSU1QTEVfU1RSQ01QIChzMSwgczIpOworLQkgIEZPUl9FQUNIX0lNUEwgKGltcGwsIDApCistCSAgICBjaGVja19yZXN1bHQgKGltcGwsIHMxLCBzMiwgZXhwX3Jlc3VsdCk7CistCX0KKy0gICAgfQorIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9zdHJpbmcvdHN0LXN0cnhmcm0uYyBiL3N0cmluZy90c3Qtc3RyeGZybS5jCitpbmRleCBmNDhjZmMwLi5jM2E1MWY5IDEwMDY0NAorLS0tIGEvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMKKysrKyBiL3N0cmluZy90c3Qtc3RyeGZybS5jCitAQCAtMyw2ICszLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIGNoYXIgY29uc3Qgc3RyaW5nW10gPSAiIjsKK0BAIC02NCw4ICs2NSwxMCBAQCBkb190ZXN0ICh2b2lkKQorICAgaW50IHJlc3VsdCA9IDA7CisgCisgICByZXN1bHQgfD0gdGVzdCAoIkMiKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICByZXN1bHQgfD0gdGVzdCAoImVuX1VTLklTTy04ODU5LTEiKTsKKyAgIHJlc3VsdCB8PSB0ZXN0ICgiZGVfREUuVVRGLTgiKTsKKysjZW5kaWYKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL3N0cmluZy90c3Qtc3RyeGZybTIuYyBiL3N0cmluZy90c3Qtc3RyeGZybTIuYworaW5kZXggZDVhMTExNS4uMTljN2YzMCAxMDA2NDQKKy0tLSBhL3N0cmluZy90c3Qtc3RyeGZybTIuYworKysrIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyBkb190ZXN0ICh2b2lkKQorQEAgLTM4LDYgKzM5LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgICAgICByZXMgPSAxOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiZGVfREUuVVRGLTgiKSA9PSBOVUxMKQorICAgICB7CisgICAgICAgcHV0cyAoInNldGxvY2FsZSBmYWlsZWQiKTsKK0BAIC03NSw2ICs3Nyw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgCSAgcmVzID0gMTsKKyAJfQorICAgICB9CisrI2VuZGlmCisgCisgICByZXR1cm4gcmVzOworIH0KK2RpZmYgLS1naXQgYS9zdW5ycGMvTWFrZWZpbGUgYi9zdW5ycGMvTWFrZWZpbGUKK2luZGV4IDYwY2FhMGEuLjViYzcwYWIgMTAwNjQ0CistLS0gYS9zdW5ycGMvTWFrZWZpbGUKKysrKyBiL3N1bnJwYy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHN1bnJwYyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN1bnJwYworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTU1LDcgKzU3LDYgQEAgaGVhZGVycy1pbi10aXJwYyA9ICQoYWRkcHJlZml4IHJwYy8sYXV0aC5oIGF1dGhfdW5peC5oIGNsbnQuaCBwbWFwX2NsbnQuaCBcCisgaGVhZGVycy1ub3QtaW4tdGlycGMgPSAkKGFkZHByZWZpeCBycGMvLGtleV9wcm90LmggcnBjX2Rlcy5oKSBcCisgCQkgICAgICAgJChycGNzdmM6JT1ycGNzdmMvJSkgcnBjc3ZjL2Jvb3RwYXJhbS5oCisgaGVhZGVycyA9IHJwYy9uZXRkYi5oCistaW5zdGFsbC1vdGhlcnMgPSAkKGluc3Rfc3lzY29uZmRpcikvcnBjCisgZ2VuZXJhdGVkICs9ICQocnBjc3ZjOiUueD1ycGNzdmMvJS5oKSAkKHJwY3N2YzolLng9eCUuYykgJChycGNzdmM6JS54PXglLnN0bXApIFwKKyAJICAgICAkKHJwY3N2YzolLng9cnBjc3ZjLyUuc3RtcCkgcnBjZ2VuCisgZ2VuZXJhdGVkLWRpcnMgKz0gcnBjc3ZjCitAQCAtNjUsMjAgKzY2LDI4IEBAIGhlYWRlcnMgKz0gJChoZWFkZXJzLWluLXRpcnBjKSAkKGhlYWRlcnMtbm90LWluLXRpcnBjKQorIGVuZGlmCisgCisgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKy1uZWVkLWV4cG9ydC1yb3V0aW5lcyA6PSBhdXRoX2RlcyBhdXRoX3VuaXggY2xudF9nZW4gY2xudF9wZXJyIGNsbnRfdGNwIFwKKytuZWVkLWV4cG9ydC1yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA6PSBcCisrCQkJYXV0aF9kZXMgYXV0aF91bml4IGNsbnRfZ2VuIGNsbnRfcGVyciBjbG50X3RjcCBcCisgCQkJY2xudF91ZHAgZ2V0X215YWRkciBrZXlfY2FsbCBuZXRuYW1lIHBtX2dldHBvcnQgXAorLQkJCXJwY190aHJlYWQgc3ZjIHN2Y190Y3Agc3ZjX3VkcCB4Y3J5cHQgeGRyX2FycmF5IHhkciBcCisrCQkJcnBjX3RocmVhZCBzdmMgc3ZjX3RjcCBzdmNfdWRwIHhkcl9hcnJheSB4ZHIgXAorIAkJCXhkcl9pbnRYWF90IHhkcl9tZW0geGRyX3JlZiB4ZHJfc2l6ZW9mIHhkcl9zdGRpbyBcCisgCQkJc3ZjX3J1bgorK25lZWQtZXhwb3J0LXJvdXRpbmVzLXkgKz0geGNyeXB0CisrbmVlZC1leHBvcnQtcm91dGluZXMgOj0gJChuZWVkLWV4cG9ydC1yb3V0aW5lcy15KQorIAorLXJvdXRpbmVzIDo9IGF1dGhfbm9uZSBhdXRodXhwcm90IGJpbmRyc3ZwcnQgY2xudF9yYXcgY2xudF9zaW1wIFwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA6PSBcCisrCSAgICBhdXRoX25vbmUgYXV0aHV4cHJvdCBiaW5kcnN2cHJ0IGNsbnRfcmF3IGNsbnRfc2ltcCBcCisgCSAgICBycGNfZHRhYmxlIGdldHJwY3BvcnQgcG1hcF9jbG50IHBtX2dldG1hcHMgcG1hcF9wcm90IHBtYXBfcHJvdDIgXAorIAkgICAgcG1hcF9ybXQgcnBjX3Byb3QgcnBjX2NvbW1vbiBycGNfY21zZyBzdmNfYXV0aCBzdmNfYXV0aHV4IHN2Y19yYXcgXAorIAkgICAgc3ZjX3NpbXBsZSB4ZHJfZmxvYXQgeGRyX3JlYyBwdWJsaWNrZXkgYXV0aGRlc19wcm90IFwKKy0JICAgIGRlc19jcnlwdCBkZXNfaW1wbCBkZXNfc29mdCBrZXlfcHJvdCBvcGVuY2hpbGQgcnRpbWUgc3ZjYXV0aF9kZXMgXAorKwkgICAga2V5X3Byb3Qgb3BlbmNoaWxkIHJ0aW1lIHN2Y2F1dGhfZGVzIFwKKyAJICAgIGdldHJwY2VudCBnZXRycGNieW5hbWUgZ2V0cnBjYnludW1iZXIgXAorIAkgICAgZ2V0cnBjZW50X3IgZ2V0cnBjYnluYW1lX3IgZ2V0cnBjYnludW1iZXJfciBcCistCSAgICBjbG50X3VuaXggc3ZjX3VuaXggY3JlYXRlX3hpZCAkKG5lZWQtZXhwb3J0LXJvdXRpbmVzKQorKwkgICAgY2xudF91bml4IHN2Y191bml4IGNyZWF0ZV94aWQKKysKKysjIHhkZWNyeXB0IGlzIGFsc28gdXNlZCBieSBuc3MvbnNzX2ZpbGVzL2ZpbGVzLWtleS5jLgorK3JvdXRpbmVzLXkgKz0gZGVzX2NyeXB0IGRlc19pbXBsIGRlc19zb2Z0ICQobmVlZC1leHBvcnQtcm91dGluZXMpCisrCisgaWZuZXEgKCQobGluay1vYnNvbGV0ZS1ycGMpLHllcykKKyAjIFdlIG9ubHkgYWRkIHRoZSBSUEMgZm9yIGNvbXBhdGliaWxpdHkgdG8gbGliYy5zby4KKyBzaGFyZWQtb25seS1yb3V0aW5lcyA9ICQocm91dGluZXMpCitAQCAtODcsMjUgKzk2LDI4IEBAIGVuZGlmCisgCisgIyBXZSBkbyBub3QgYnVpbGQgcnBjaW5mbyBhbnltb3JlLiAgSXQgaXMgbm90IG5lZWRlZCBmb3IgYSBib290c3RyYXAKKyAjIGFuZCBub3Qgd2FudGVkIG9uIGNvbXBsZXRlIHN5c3RlbXMuCistIyBvdGhlcnMgOj0gcnBjaW5mbworLSMgaW5zdGFsbC1zYmluIDo9IHJwY2luZm8KKy1pbnN0YWxsLWJpbiA6PSBycGNnZW4KKysjIG90aGVycy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNpbmZvCisrIyBpbnN0YWxsLXNiaW4tJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjaW5mbworK2luc3RhbGwtYmluLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2dlbgorIHJwY2dlbi1vYmpzID0gcnBjX21haW4ubyBycGNfaG91dC5vIHJwY19jb3V0Lm8gcnBjX3BhcnNlLm8gXAorIAkgICAgICBycGNfc2Nhbi5vIHJwY191dGlsLm8gcnBjX3N2Y291dC5vIHJwY19jbG50b3V0Lm8gXAorIAkgICAgICBycGNfdGJsb3V0Lm8gcnBjX3NhbXBsZS5vCistZXh0cmEtb2JqcyA9ICQocnBjZ2VuLW9ianMpICQoYWRkcHJlZml4IGNyb3NzLSwkKHJwY2dlbi1vYmpzKSkKKy1vdGhlcnMgKz0gcnBjZ2VuCisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA9ICQocnBjZ2VuLW9ianMpICQoYWRkcHJlZml4IGNyb3NzLSwkKHJwY2dlbi1vYmpzKSkKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjZ2VuCisrCisraW5zdGFsbC1vdGhlcnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gJChpbnN0X3N5c2NvbmZkaXIpL3JwYworIAorLXRlc3RzID0gdHN0LXhkcm1lbSB0c3QteGRybWVtMiB0ZXN0LXJwY2VudAorLXh0ZXN0cyA6PSB0c3QtZ2V0bXlhZGRyCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgPSB0c3QteGRybWVtIHRzdC14ZHJtZW0yIHRlc3QtcnBjZW50CisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpIDo9IHRzdC1nZXRteWFkZHIKKyAKKyBpZmVxICgkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllcykKKy14dGVzdHMgKz0gdGhyc3ZjCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHRocnN2YworIGVuZGlmCisgCisgaGVhZGVycyArPSAkKHJwY3N2YzolLng9cnBjc3ZjLyUuaCkKKy1leHRyYS1saWJzIDo9IGxpYnJwY3N2YworLWV4dHJhLWxpYnMtb3RoZXJzIDo9IGxpYnJwY3N2YyAjIE1ha2UgaXQgaW4gYG90aGVycycgcGFzcywgbm90IGBsaWInIHBhc3MuCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBsaWJycGNzdmMKKysjIE1ha2UgaXQgaW4gYG90aGVycycgcGFzcywgbm90IGBsaWInIHBhc3MuCisrZXh0cmEtbGlicy1vdGhlcnMteSArPSAkKGV4dHJhLWxpYnMteSkKKyBsaWJycGNzdmMtcm91dGluZXMgPSAkKHJwY3N2YzolLng9eCUpCisgbGlicnBjc3ZjLWluaGliaXQtbyA9IC5vcyAjIEJ1aWxkIG5vIHNoYXJlZCBycGNzdmMgbGlicmFyeS4KKyBvbWl0LWRlcHMgPSAkKGxpYnJwY3N2Yy1yb3V0aW5lcykKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9NYWtlZmlsZSBiL3N5c2RlcHMvYXJtL01ha2VmaWxlCitpbmRleCAxN2MxMjliLi41NDM3OTFhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvYXJtL01ha2VmaWxlCitAQCAtMzcsMTAgKzM3LDEzIEBAIGlmZXEgKCQoc3ViZGlyKSxjc3UpCisgIyBnZXQgb2Zmc2V0IHRvIHJ0bGRfZ2xvYmFsLl9kbF9od2NhcAorIGdlbi1hcy1jb25zdC1oZWFkZXJzICs9IHJ0bGQtZ2xvYmFsLW9mZnNldHMuc3ltIHRsc2Rlc2Muc3ltCisgYWVhYmlfY29uc3RhbnRzID0gYWVhYmlfbGNzdHMgYWVhYmlfc2lnaGFuZGxlcnMgYWVhYmlfbWF0aAorLWFlYWJpX3JvdXRpbmVzID0gYWVhYmlfYXNzZXJ0IGFlYWJpX2xvY2FsZWNvbnYgYWVhYmlfZXJybm9fYWRkciBcCisrYWVhYmlfcm91dGluZXMgPSBhZWFiaV9hc3NlcnQgYWVhYmlfZXJybm9fYWRkciBcCisgCQkgYWVhYmlfbWJfY3VyX21heCBhZWFiaV9hdGV4aXQgYWVhYmlfbWVtY2xyIGFlYWJpX21lbWNweSBcCisgCQkgYWVhYmlfbWVtbW92ZSBhZWFiaV9tZW1zZXQgXAorIAkJIGFlYWJpX3JlYWRfdHAgbGliYy1hZWFiaV9yZWFkX3RwCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorK2FlYWJpX3JvdXRpbmVzICs9IGFlYWJpX2xvY2FsZWNvbnYKKytlbmRpZgorIAorIHN5c2RlcF9yb3V0aW5lcyArPSAkKGFlYWJpX2NvbnN0YW50cykgJChhZWFiaV9yb3V0aW5lcykKKyBzdGF0aWMtb25seS1yb3V0aW5lcyArPSAkKGFlYWJpX2NvbnN0YW50cykgYWVhYmlfcmVhZF90cAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oIGIvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmgKK2luZGV4IDdhMGZlOGQuLmEzZTJjMGEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaAorKysrIGIvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmgKK0BAIC00MzUsNiArNDM1LDEyIEBAIGV4dGVybiBzdHJ1Y3QgcnRsZF9nbG9iYWwgX3J0bGRfZ2xvYmFsIF9fcnRsZF9nbG9iYWxfYXR0cmlidXRlX187CisgIyB1bmRlZiBfX3J0bGRfZ2xvYmFsX2F0dHJpYnV0ZV9fCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisrIyBkZWZpbmUgR0xST19kbF9kZWJ1Z19tYXNrIEdMUk8oZGxfZGVidWdfbWFzaykKKysjZWxzZQorKyMgZGVmaW5lIEdMUk9fZGxfZGVidWdfbWFzayAwCisrI2VuZGlmCisrCisgI2lmbmRlZiBTSEFSRUQKKyAjIGRlZmluZSBHTFJPKG5hbWUpIF8jI25hbWUKKyAjZWxzZQorQEAgLTQ0Nyw4ICs0NTMsMTAgQEAgc3RydWN0IHJ0bGRfZ2xvYmFsX3JvCisgeworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworICAgLyogSWYgbm9uemVybyB0aGUgYXBwcm9wcmlhdGUgZGVidWcgaW5mb3JtYXRpb24gaXMgcHJpbnRlZC4gICovCisgICBFWFRFUk4gaW50IF9kbF9kZWJ1Z19tYXNrOworKyNlbmRpZgorICNkZWZpbmUgRExfREVCVUdfTElCUwkgICAgKDEgPDwgMCkKKyAjZGVmaW5lIERMX0RFQlVHX0lNUENBTExTICAgKDEgPDwgMSkKKyAjZGVmaW5lIERMX0RFQlVHX0JJTkRJTkdTICAgKDEgPDwgMikKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9NYWtlZmlsZSBiL3N5c2RlcHMvZ251L01ha2VmaWxlCitpbmRleCBlYTY4MDM3Li4zMTc1Y2MzIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nbnUvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvZ251L01ha2VmaWxlCitAQCAtNTksNyArNTksOCBAQCAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcykgJChvYmplY3Qtc3VmZml4ZXM6PS5kKSxcCisgZW5kaWYKKyAKKyBpZmVxICgkKHN1YmRpciksbG9naW4pCistc3lzZGVwX3JvdXRpbmVzICs9IHNldHV0eGVudCBnZXR1dHhlbnQgZW5kdXR4ZW50IGdldHV0eGlkIGdldHV0eGxpbmUgXAorK3N5c2RlcF9yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfVVRNUFgpIFwKKysJCSs9IHNldHV0eGVudCBnZXR1dHhlbnQgZW5kdXR4ZW50IGdldHV0eGlkIGdldHV0eGxpbmUgXAorIAkJICAgcHV0dXR4bGluZSB1dG1weG5hbWUgdXBkd3RtcHggZ2V0dXRtcHggZ2V0dXRtcAorIAorIHN5c2RlcF9oZWFkZXJzICs9IHV0bXB4LmggYml0cy91dG1weC5oCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlCitpbmRleCAyMjIxMjJkLi40NTA5MzU3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlCisrKysgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUKK0BAIC0xMSwxOSArMTEsMTggQEAgbGlibS1yb3V0aW5lcyArPSBzX25leHR0b3dhcmRmZAorIHJvdXRpbmVzICs9IG1hdGhfbGRibF9vcHQgbmxkYmwtY29tcGF0CisgCisgZXh0cmEtbGlicyArPSBsaWJubGRibAorLWxpYm5sZGJsLWNhbGxzID0gYXNwcmludGYgZHByaW50ZiBmcHJpbnRmIGZzY2FuZiBmd3ByaW50ZiBmd3NjYW5mIGlvdmZzY2FuZiBcCisrbGlibmxkYmwtY2FsbHMgPSBhc3ByaW50ZiBkcHJpbnRmIGZwcmludGYgZnNjYW5mIGlvdmZzY2FuZiBcCisgCQkgb2JzdGFja19wcmludGYgb2JzdGFja192cHJpbnRmIHByaW50ZiBzY2FuZiBzbnByaW50ZiBcCistCQkgc3ByaW50ZiBzc2NhbmYgc3dwcmludGYgc3dzY2FuZiB2YXNwcmludGYgdmRwcmludGYgdmZwcmludGYgXAorLQkJIHZmc2NhbmYgdmZ3cHJpbnRmIHZmd3NjYW5mIHZwcmludGYgdnNjYW5mIHZzbnByaW50ZiBcCistCQkgdnNwcmludGYgdnNzY2FuZiB2c3dwcmludGYgdnN3c2NhbmYgdndwcmludGYgdndzY2FuZiBcCistCQkgd3ByaW50ZiB3c2NhbmYgcHJpbnRmX2ZwIHByaW50Zl9zaXplIFwKKy0JCSBmcHJpbnRmX2NoayBmd3ByaW50Zl9jaGsgcHJpbnRmX2NoayBzbnByaW50Zl9jaGsgc3ByaW50Zl9jaGsgXAorLQkJIHN3cHJpbnRmX2NoayB2ZnByaW50Zl9jaGsgdmZ3cHJpbnRmX2NoayB2cHJpbnRmX2NoayBcCistCQkgdnNucHJpbnRmX2NoayB2c3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoayB2d3ByaW50Zl9jaGsgXAorLQkJIHdwcmludGZfY2hrIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKysJCSBzcHJpbnRmIHNzY2FuZiB2YXNwcmludGYgdmRwcmludGYgdmZwcmludGYgXAorKwkJIHZmc2NhbmYgdnByaW50ZiB2c2NhbmYgdnNucHJpbnRmIFwKKysJCSB2c3ByaW50ZiB2c3NjYW5mIFwKKysJCSBwcmludGZfZnAgcHJpbnRmX3NpemUgXAorKwkJIGZwcmludGZfY2hrIHByaW50Zl9jaGsgc25wcmludGZfY2hrIHNwcmludGZfY2hrIFwKKysJCSB2ZnByaW50Zl9jaGsgdnByaW50Zl9jaGsgXAorKwkJIHZzbnByaW50Zl9jaGsgdnNwcmludGZfY2hrIFwKKysJCSBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisgCQkgdmRwcmludGZfY2hrIG9ic3RhY2tfcHJpbnRmX2NoayBvYnN0YWNrX3ZwcmludGZfY2hrIFwKKyAJCSBzeXNsb2cgc3lzbG9nX2NoayB2c3lzbG9nIHZzeXNsb2dfY2hrIFwKKy0JCSBzdHJmbW9uIHN0cmZtb25fbCBcCisgCQkgc3RydG9sZCBzdHJ0b2xkX2wgc3RydG9sZGludCB3Y3N0b2xkIHdjc3RvbGRfbCB3Y3N0b2xkaW50IFwKKyAJCSBxZWN2dCBxZmN2dCBxZ2N2dCBxZWN2dF9yIHFmY3Z0X3IgXAorIAkJIGlzaW5mIGlzbmFuIGZpbml0ZSBzaWduYml0IHNjYWxiIGxvZzIgbGdhbW1hX3IgY2VpbCBcCitAQCAtMzgsOSArMzcsMTUgQEAgbGlibmxkYmwtY2FsbHMgPSBhc3ByaW50ZiBkcHJpbnRmIGZwcmludGYgZnNjYW5mIGZ3cHJpbnRmIGZ3c2NhbmYgaW92ZnNjYW5mIFwKKyAJCSBjYXNpbmggY2V4cCBjbG9nIGNwcm9qIGNzaW4gY3NpbmggY3NxcnQgY3RhbiBjdGFuaCBjcG93IFwKKyAJCSBjYWJzIGNhcmcgY2ltYWcgY3JlYWwgY2xvZzEwIFwKKyAJCSBpc29jOTlfc2NhbmYgaXNvYzk5X2ZzY2FuZiBpc29jOTlfc3NjYW5mIFwKKy0JCSBpc29jOTlfdnNjYW5mIGlzb2M5OV92ZnNjYW5mIGlzb2M5OV92c3NjYW5mIFwKKysJCSBpc29jOTlfdnNjYW5mIGlzb2M5OV92ZnNjYW5mIGlzb2M5OV92c3NjYW5mCisrbGlibmxkYmwtY2FsbHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSBzdHJmbW9uIHN0cmZtb25fbAorK2xpYm5sZGJsLWNhbGxzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICs9IGZ3cHJpbnRmIGZ3c2NhbmYgXAorKwkJIHN3cHJpbnRmIHN3c2NhbmYgdmZ3cHJpbnRmIHZmd3NjYW5mIHZzd3ByaW50ZiB2c3dzY2FuZiBcCisrCQkgdndwcmludGYgdndzY2FuZiB3cHJpbnRmIHdzY2FuZiBmd3ByaW50Zl9jaGsgc3dwcmludGZfY2hrIFwKKysJCSB2ZndwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsgdndwcmludGZfY2hrIHdwcmludGZfY2hrIFwKKyAJCSBpc29jOTlfd3NjYW5mIGlzb2M5OV9md3NjYW5mIGlzb2M5OV9zd3NjYW5mIFwKKyAJCSBpc29jOTlfdndzY2FuZiBpc29jOTlfdmZ3c2NhbmYgaXNvYzk5X3Zzd3NjYW5mCisrbGlibmxkYmwtY2FsbHMgKz0gJChsaWJubGRibC1jYWxscy15KQorIGxpYm5sZGJsLXJvdXRpbmVzID0gJChsaWJubGRibC1jYWxsczolPW5sZGJsLSUpCisgbGlibmxkYmwtaW5oaWJpdC1vID0gJChvYmplY3Qtc3VmZml4ZXMpCisgbGlibmxkYmwtc3RhdGljLW9ubHktcm91dGluZXMgPSAkKGxpYm5sZGJsLXJvdXRpbmVzKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYworaW5kZXggMDE5ODg4Ni4uNTU1MDFjZCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYworKysrIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jCitAQCAtMjYsNiArMjYsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorICNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgIm5sZGJsLWNvbXBhdC5oIgorIAorQEAgLTMzLDIwICszNCwxNCBAQCBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZnByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZzcHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmc2NhbmYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3c2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmRwcmludGYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3c2NhbmYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3cHJpbnRmKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3ByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c25wcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmFzcHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX29ic3RhY2tfdnByaW50ZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zmd3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c25wcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmZwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN5c2xvZ19jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3ByaW50Zl9jaGspCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3dwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmFzcHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZkcHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX29ic3RhY2tfdnByaW50Zl9jaGspCitAQCAtNTQsOCArNDksMTcgQEAgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3RyZm1vbikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzdHJmbW9uX2wpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdnNzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92ZnNjYW5mKQorKworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3c2NhbmYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3c2NhbmYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3cHJpbnRmKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3ByaW50ZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zmd3ByaW50Zl9jaGspCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3dwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zzd3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zmd3NjYW5mKQorKyNlbmRpZgorIAorIHN0YXRpYyB2b2lkCisgX19ubGRibF9jbGVhbnVwICh2b2lkICphcmcpCitAQCAtMTE3LDYgKzEyMSw3IEBAIF9fbmxkYmxfZnByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyB9Cisgd2Vha19hbGlhcyAoX19ubGRibF9mcHJpbnRmLCBfX25sZGJsX19JT19mcHJpbnRmKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorIF9fbmxkYmxfZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCitAQCAtMTMwLDYgKzEzNSw3IEBAIF9fbmxkYmxfZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC0yMjYsNiArMjMyLDcgQEAgX19ubGRibF9zbnByaW50ZiAoY2hhciAqcywgc2l6ZV90IG1heGxlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfc3dwcmludGYgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKK0BAIC0yMzksNiArMjQ2LDcgQEAgX19ubGRibF9zd3ByaW50ZiAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KK0BAIC0yNjQsNiArMjcyLDcgQEAgX19ubGRibF92ZHByaW50ZiAoaW50IGQsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmcpCisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF92ZHByaW50ZikKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KKyBfX25sZGJsX3Zmd3ByaW50ZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTI3NSw2ICsyODQsNyBAQCBfX25sZGJsX3Zmd3ByaW50ZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorICAgcmV0dXJuIHJlczsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX3Zmd3ByaW50ZikKKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTI5Nyw2ICszMDcsNyBAQCBfX25sZGJsX3ZzbnByaW50ZiAoY2hhciAqc3RyaW5nLCBzaXplX3QgbWF4bGVuLCBjb25zdCBjaGFyICpmbXQsCisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX3ZzbnByaW50ZikKKyB3ZWFrX2FsaWFzIChfX25sZGJsX3ZzbnByaW50ZiwgX19ubGRibF9fX3ZzbnByaW50ZikKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KKyBfX25sZGJsX3Zzd3ByaW50ZiAod2NoYXJfdCAqc3RyaW5nLCBzaXplX3QgbWF4bGVuLCBjb25zdCB3Y2hhcl90ICpmbXQsCitAQCAtMzMwLDYgKzM0MSw3IEBAIF9fbmxkYmxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC00MTksNiArNDMxLDcgQEAgX19ubGRibF9zY2FuZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfdmZ3c2NhbmYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC00OTEsNiArNTA0LDcgQEAgX19ubGRibF93c2NhbmYgKGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNTA2LDYgKzUyMCw3IEBAIF9fbmxkYmxfX19mcHJpbnRmX2NoayAoRklMRSAqc3RyZWFtLCBpbnQgZmxhZywgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX19md3ByaW50Zl9jaGsgKEZJTEUgKnN0cmVhbSwgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorQEAgLTUxOSw2ICs1MzQsNyBAQCBfX25sZGJsX19fZndwcmludGZfY2hrIChGSUxFICpzdHJlYW0sIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTU2Myw2ICs1NzksNyBAQCBfX25sZGJsX19fc3ByaW50Zl9jaGsgKGNoYXIgKnMsIGludCBmbGFnLCBzaXplX3Qgc2xlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX19zd3ByaW50Zl9jaGsgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sCitAQCAtNTc3LDYgKzU5NCw3IEBAIF9fbmxkYmxfX19zd3ByaW50Zl9jaGsgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC01OTAsNiArNjA4LDcgQEAgX19ubGRibF9fX3ZmcHJpbnRmX2NoayAoRklMRSAqcywgaW50IGZsYWcsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdmZwcmludGZfY2hrKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqcywgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC02MDEsNiArNjIwLDcgQEAgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKnMsIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCisgICByZXR1cm4gcmVzOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192ZndwcmludGZfY2hrKQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNjM1LDYgKzY1NSw3IEBAIF9fbmxkYmxfX192c3ByaW50Zl9jaGsgKGNoYXIgKnN0cmluZywgaW50IGZsYWcsIHNpemVfdCBzbGVuLCBjb25zdCBjaGFyICpmbXQsCisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3ZzcHJpbnRmX2NoaykKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX3Zzd3ByaW50Zl9jaGsgKHdjaGFyX3QgKnN0cmluZywgc2l6ZV90IG1heGxlbiwgaW50IGZsYWcsIHNpemVfdCBzbGVuLAorQEAgLTY2OCw2ICs2ODksNyBAQCBfX25sZGJsX19fd3ByaW50Zl9jaGsgKGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTc3NSw2ICs3OTcsNyBAQCBfX25sZGJsX19fcHJpbnRmX2ZwIChGSUxFICpmcCwgY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLAorICAgcmV0dXJuIF9fX3ByaW50Zl9mcCAoZnAsICZpbmZvX25vX2xkYmwsIGFyZ3MpOworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgc3NpemVfdAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9zdHJmbW9uIChjaGFyICpzLCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCitAQCAtODI5LDYgKzg1Miw3IEBAIF9fbmxkYmxfX192c3RyZm1vbl9sIChjaGFyICpzLCBzaXplX3QgbWF4c2l6ZSwgX19sb2NhbGVfdCBsb2MsCisgICByZXR1cm4gcmVzOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192c3RyZm1vbl9sKQorKyNlbmRpZgorIAorIHZvaWQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTk0MSw2ICs5NjUsNyBAQCBfX25sZGJsX19faXNvYzk5X3NjYW5mIChjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX2lzb2M5OV92ZndzY2FuZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTEwMTQsNiArMTAzOSw3IEBAIF9fbmxkYmxfX19pc29jOTlfd3NjYW5mIChjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyAjaWYgTE9OR19ET1VCTEVfQ09NUEFUKGxpYmMsIEdMSUJDXzJfMCkKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX19JT19wcmludGYsIF9JT19wcmludGYsIEdMSUJDXzJfMCk7CitAQCAtMTA1Nyw2ICsxMDgzLDcgQEAgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9wcmludGZfc2l6ZSwgcHJpbnRmX3NpemUsIEdMSUJDXzJfMSk7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9fX3N0cmZtb25fbCwgX19zdHJmbW9uX2wsIEdMSUJDXzJfMSk7CisgI2VuZGlmCisgI2lmIExPTkdfRE9VQkxFX0NPTVBBVChsaWJjLCBHTElCQ18yXzIpCisrIyBpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9zd3ByaW50Ziwgc3dwcmludGYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92d3ByaW50ZiwgdndwcmludGYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF93cHJpbnRmLCB3cHJpbnRmLCBHTElCQ18yXzIpOworQEAgLTEwNjksNiArMTA5Niw3IEBAIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdmZ3c2NhbmYsIHZmd3NjYW5mLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdnN3c2NhbmYsIHZzd3NjYW5mLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdndzY2FuZiwgdndzY2FuZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3dzY2FuZiwgd3NjYW5mLCBHTElCQ18yXzIpOworKyMgZW5kaWYKKyAjZW5kaWYKKyAjaWYgTE9OR19ET1VCTEVfQ09NUEFUKGxpYmMsIEdMSUJDXzJfMykKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3N0cmZtb25fbCwgc3RyZm1vbl9sLCBHTElCQ18yXzMpOworZGlmZiAtLWdpdCBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaCBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaAoraW5kZXggMGQyYzhhZi4uZjRjZWE1MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaAorKysrIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oCitAQCAtMzAsNiArMzAsNyBAQAorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPG1vbmV0YXJ5Lmg+CisgI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyAvKiBEZWNsYXJlIHRoZSBfX25sZGJsX05BTUUgZnVuY3Rpb24gdGhlIHdyYXBwZXJzIGNhbGwgdGhhdCdzIGluIGxpYmMuc28uICAqLworQEAgLTM3LDE5ICszOCwxNSBAQAorIAorIE5MREJMX0RFQ0wgKF9JT192ZnNjYW5mKTsKKyBOTERCTF9ERUNMICh2ZnNjYW5mKTsKKy1OTERCTF9ERUNMICh2ZndzY2FuZik7CisgTkxEQkxfREVDTCAob2JzdGFja192cHJpbnRmKTsKKyBOTERCTF9ERUNMICh2YXNwcmludGYpOworIE5MREJMX0RFQ0wgKGRwcmludGYpOworIE5MREJMX0RFQ0wgKHZkcHJpbnRmKTsKKyBOTERCTF9ERUNMIChmcHJpbnRmKTsKKyBOTERCTF9ERUNMICh2ZnByaW50Zik7CistTkxEQkxfREVDTCAodmZ3cHJpbnRmKTsKKyBOTERCTF9ERUNMICh2c25wcmludGYpOworIE5MREJMX0RFQ0wgKHZzcHJpbnRmKTsKKyBOTERCTF9ERUNMICh2c3NjYW5mKTsKKy1OTERCTF9ERUNMICh2c3dwcmludGYpOworLU5MREJMX0RFQ0wgKHZzd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2FzcHJpbnRmKTsKKyBOTERCTF9ERUNMIChhc3ByaW50Zik7CisgTkxEQkxfREVDTCAoX19wcmludGZfZnApOworQEAgLTY2LDEyICs2MywxOCBAQCBOTERCTF9ERUNMIChfX2lzb2M5OV9zc2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3ZzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdmZzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdnNzY2FuZik7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKytOTERCTF9ERUNMICh2ZndzY2FuZik7CisrTkxEQkxfREVDTCAodmZ3cHJpbnRmKTsKKytOTERCTF9ERUNMICh2c3dwcmludGYpOworK05MREJMX0RFQ0wgKHZzd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV93c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X2Z3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3N3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Z3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zmd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92c3dzY2FuZik7CisrI2VuZGlmCisgCisgLyogVGhpcyBvbmUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG5vcm1hbCBpbnRlcmZhY2UsIG9ubHkKKyAgICBfX25sZGJsX19fdnN0cmZtb24gcmVhbGx5IGV4aXN0cy4gICovCitAQCAtODIsMjIgKzg1LDIzIEBAIGV4dGVybiBzc2l6ZV90IF9fbmxkYmxfX192c3RyZm1vbiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkKKyAgICBzaW5jZSB3ZSBkb24ndCBjb21waWxlIHdpdGggX0ZPUlRJRllfU09VUkNFLiAgKi8KKyBleHRlcm4gaW50IF9fbmxkYmxfX192ZnByaW50Zl9jaGsgKEZJTEUgKl9fcmVzdHJpY3QsIGludCwKKyAJCQkJICAgY29uc3QgY2hhciAqX19yZXN0cmljdCwgX0dfdmFfbGlzdCk7CistZXh0ZXJuIGludCBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqX19yZXN0cmljdCwgaW50LAorLQkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpOworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZzcHJpbnRmX2NoayAoY2hhciAqX19yZXN0cmljdCwgaW50LCBzaXplX3QsCisgCQkJCSAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIF9HX3ZhX2xpc3QpIF9fVEhST1c7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdnNucHJpbnRmX2NoayAoY2hhciAqX19yZXN0cmljdCwgc2l6ZV90LCBpbnQsIHNpemVfdCwKKyAJCQkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIF9HX3ZhX2xpc3QpCisgICBfX1RIUk9XOworLWV4dGVybiBpbnQgX19ubGRibF9fX3Zzd3ByaW50Zl9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QsIHNpemVfdCwgaW50LCBzaXplX3QsCistCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCkKKy0gIF9fVEhST1c7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdmFzcHJpbnRmX2NoayAoY2hhciAqKiwgaW50LCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QpCisgICBfX1RIUk9XOworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZkcHJpbnRmX2NoayAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCk7CisgZXh0ZXJuIGludCBfX25sZGJsX19fb2JzdGFja192cHJpbnRmX2NoayAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBjb25zdCBjaGFyICosCisgCQkJCQkgIF9HX3ZhX2xpc3QpIF9fVEhST1c7CisgZXh0ZXJuIHZvaWQgX19ubGRibF9fX3ZzeXNsb2dfY2hrIChpbnQsIGludCwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKy0KKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworK2V4dGVybiBpbnQgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKl9fcmVzdHJpY3QsIGludCwKKysJCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KTsKKytleHRlcm4gaW50IF9fbmxkYmxfX192c3dwcmludGZfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0LCBzaXplX3QsIGludCwgc2l6ZV90LAorKwkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpCisrICBfX1RIUk9XOworKyNlbmRpZgorIAorICNlbmRpZiAvKiBfX05MREJMX0NPTVBBVF9IICovCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL01ha2VmaWxlIGIvc3lzZGVwcy9ucHRsL01ha2VmaWxlCitpbmRleCBlOTMzOWEzLi43ODIwMDliIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9ucHRsL01ha2VmaWxlCisrKysgYi9zeXNkZXBzL25wdGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw5IEBACisgCisgaWZlcSAoJChzdWJkaXIpLG5wdGwpCisgbGlicHRocmVhZC1zeXNkZXBfcm91dGluZXMgKz0gZXJybm8tbG9jCisraWZlcSAoJChPUFRJT05fRUdMSUJDX0JJR19NQUNST1MpLG4pCisrc3lzZGVwX3JvdXRpbmVzICs9IHNtYWxsLW1hY3Jvcy1mbnMKKytlbmRpZgorIGVuZGlmCisgCisgaWZlcSAoJChzdWJkaXIpLHJ0KQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmgKK2luZGV4IDU1OTljZjEuLmI4MzkzNzggMTAwNjQ0CistLS0gYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaAorKysrIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmgKK0BAIC0yNCw2ICsyNCwxNCBAQAorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAKKyAKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxvd2xldmVsbG9jay5oPgorKyMgaW5jbHVkZSA8dGxzLmg+CisrIyBpbmNsdWRlIDxwdGhyZWFkLWZ1bmN0aW9ucy5oPgorKyMgaW5jbHVkZSA8ZXJybm8uaD4gLyogRm9yIEVCVVNZLiAgKi8KKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+IC8qIEZvciBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUy4gICovCisrI2VuZGlmCisrCisgLyogTXV0ZXggdHlwZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfSU9fTVRTQUZFX0lPCisgIyBpZiAoIUlTX0lOIChsaWJjKSAmJiAhSVNfSU4gKGxpYnB0aHJlYWQpKSB8fCAhZGVmaW5lZCBfTElCQworQEAgLTg3LDYgKzk1LDE1IEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAKKyAvKiBMb2NrIHRoZSByZWN1cnNpdmUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgJiYgKElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysKKyAjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgICB2b2lkICpzZWxmID0gVEhSRUFEX1NFTEY7CQkJCQkJICAgICAgXAorQEAgLTk3LDYgKzExNCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKyAgICAgKysoTkFNRSkuY250OwkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpCQkJCVwKKysgIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfbG9jaywgKCYoTkFNRSkubXV0ZXgpLCAwKQorQEAgLTEwNCw2ICsxMjUsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAorIC8qIFRyeSB0byBsb2NrIHRoZSByZWN1cnNpdmUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgJiYgKElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiBpbnQgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworICMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBpbnQgcmVzdWx0ID0gMDsJCQkJCQkJICAgICAgXAorQEAgLTEyMiw2ICsxNTEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworICAgICAgICsrKE5BTUUpLmNudDsJCQkJCQkJICAgICAgXAorICAgICByZXN1bHQ7CQkJCQkJCQkgICAgICBcCisgICB9KQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jaywgKCYoTkFNRSkubXV0ZXgpLCAwKQorQEAgLTEyOSw2ICsxNjIsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAorIC8qIFVubG9jayB0aGUgcmVjdXJzaXZlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDICYmIChJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MsIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKyAvKiBXZSBkbyBubyBlcnJvciBjaGVja2luZyBoZXJlLiAgKi8KKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIGRvIHsJCQkJCQkJCQkgICAgICBcCitAQCAtMTM4LDYgKzE3OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCWxsbF91bmxvY2sgKChOQU1FKS5sb2NrLCBMTExfUFJJVkFURSk7CQkJCSAgICAgIFwKKyAgICAgICB9CQkJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3VubG9jaywgKCYoTkFNRSkubXV0ZXgpLCAwKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaCBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaAoraW5kZXggZjU1ZjYyMS4uZGE5ODg2OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaAorKysrIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oCitAQCAtMzMsNiArMzMsOCBAQAorICNpbmNsdWRlIDxsb3dsZXZlbGxvY2suaD4KKyAjaW5jbHVkZSA8dGxzLmg+CisgI2luY2x1ZGUgPHB0aHJlYWQtZnVuY3Rpb25zLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+IC8qIEZvciBFQlVTWS4gICovCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+IC8qIEZvciBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUy4gICovCisgCisgI2lmIElTX0lOIChsaWJwdGhyZWFkKQorIC8qIFRoaXMgZ2V0cyB1cyB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBfX3B0aHJlYWRfKiBpbnRlcm5hbCBuYW1lcywKK0BAIC0xNzEsMTAgKzE3MywyMiBAQCB0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19saWJjX2tleV90OworIAorIC8qIExvY2sgdGhlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpCistIyBpZm5kZWYgX19saWJjX2xvY2tfbG9jaworLSMgIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpIFwKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfbG9ja19mbiAoX19saWJjX2xvY2tfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfbG9ja19mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKyMgIGlmbmRlZiBfX2xpYmNfbG9ja19sb2NrCisrIyAgIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpIFwKKyAgICh7IGxsbF9sb2NrIChOQU1FLCBMTExfUFJJVkFURSk7IDA7IH0pCistIyBlbmRpZgorKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgICAgICAgICAgICAgICBcCisrICBfX2xpYmNfbG9ja19sb2NrX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgdW5kZWYgX19saWJjX2xvY2tfbG9jaworICMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgXAorQEAgLTE4NywxMCArMjAxLDIyIEBAIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2xpYmNfa2V5X3Q7CisgCisgLyogVHJ5IHRvIGxvY2sgdGhlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpCistIyBpZm5kZWYgX19saWJjX2xvY2tfdHJ5bG9jaworLSMgIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIGludCBfX2xpYmNfbG9ja190cnlsb2NrX2ZuIChfX2xpYmNfbG9ja190ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja190cnlsb2NrX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrIyAgaWZuZGVmIF9fbGliY19sb2NrX3RyeWxvY2sKKysjICAgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorICAgbGxsX3RyeWxvY2sgKE5BTUUpCistIyBlbmRpZgorKyMgIGVuZGlmCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCisrICBfX2xpYmNfbG9ja190cnlsb2NrX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgdW5kZWYgX19saWJjX2xvY2tfdHJ5bG9jaworICMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorQEAgLTIwNiw4ICsyMzIsMjAgQEAgdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fbGliY19rZXlfdDsKKyAKKyAvKiBVbmxvY2sgdGhlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUywgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja191bmxvY2tfZm4gKF9fbGliY19sb2NrX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3VubG9ja19mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKSBcCisgICBsbGxfdW5sb2NrIChOQU1FLCBMTExfUFJJVkFURSkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdW5sb2NrX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3VubG9jaywgKCYoTkFNRSkpLCAwKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMgYi9zeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjc1MTA1MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYworQEAgLTAsMCArMSw3MiBAQAorKy8qIEVHTElCQzogZnVuY3Rpb24gd3JhcHBlcnMgZm9yIGJpZyBtYWNyb3MuCisrICAgQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisrICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKysgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisrICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKworKy8qIEhhbmRsZSBtYWNyb3MgZnJvbSAuL2JpdHMvbGliYy1sb2NrLmguICAqLworKyNpZiBkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpCisrCisrLyogR2V0IHRoZSBtYWNyb3MgZm9yIGZ1bmN0aW9uIGJvZGllcyB0aHJvdWdoIGEgYmFjayBkb29yLiAgKi8KKysjIHVuZGVmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrIyBkZWZpbmUgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgMgorKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKysKKyt2b2lkCisrX19saWJjX2xvY2tfbG9ja19mbiAoX19saWJjX2xvY2tfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja19sb2NrICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfbG9ja19mbik7CisrCisrdm9pZAorK19fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZSAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuKTsKKysKKytpbnQKKytfX2xpYmNfbG9ja190cnlsb2NrX2ZuIChfX2xpYmNfbG9ja190ICpuYW1lKQorK3sKKysgIHJldHVybiBfX2xpYmNfbG9ja190cnlsb2NrICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdHJ5bG9ja19mbik7CisrCisraW50CisrX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICpuYW1lKQorK3sKKysgIHJldHVybiBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZSAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuKTsKKysKKyt2b2lkCisrX19saWJjX2xvY2tfdW5sb2NrX2ZuIChfX2xpYmNfbG9ja190ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX3VubG9jayAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3VubG9ja19mbik7CisrCisrdm9pZAorK19fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuKTsKKysKKysjZW5kaWYgLypkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpKi8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jCitpbmRleCAyNmU0NjkyLi5kMGEyNmM4IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAjaW5jbHVkZSA8bm90LWNhbmNlbC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNkZWZpbmUgSE9TVElERklMRSAiL2V0Yy9ob3N0aWQiCisgCitAQCAtODksNiArOTAsNyBAQCBnZXRob3N0aWQgKHZvaWQpCisgCXJldHVybiBpZDsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgLyogR2V0dGluZyBmcm9tIHRoZSBmaWxlIHdhcyBub3Qgc3VjY2Vzc2Z1bC4gIEFuIGludGVsbGlnZW50IGd1ZXNzIGZvcgorICAgICAgYSB1bmlxdWUgbnVtYmVyIG9mIGEgaG9zdCBpcyBpdHMgSVAgYWRkcmVzcy4gIFJldHVybiB0aGlzLiAgKi8KKyAgIGlmIChfX2dldGhvc3RuYW1lIChob3N0bmFtZSwgTUFYSE9TVE5BTUVMRU4pIDwgMCB8fCBob3N0bmFtZVswXSA9PSAnXDAnKQorQEAgLTExNSw1ICsxMTcsOSBAQCBnZXRob3N0aWQgKHZvaWQpCisgICAvKiBGb3IgdGhlIHJldHVybiB2YWx1ZSB0byBiZSBub3QgZXhhY3RseSB0aGUgSVAgYWRkcmVzcyB3ZSBkbyBzb21lCisgICAgICBiaXQgZmlkZGxpbmcuICAqLworICAgcmV0dXJuIChpbnQzMl90KSAoaW4uc19hZGRyIDw8IDE2IHwgaW4uc19hZGRyID4+IDE2KTsKKysjZWxzZQorKyAgLyogUmV0dXJuIGFuIGFyYml0cmFyeSB2YWx1ZS4gICovCisrICByZXR1cm4gMDsKKysjZW5kaWYKKyB9CisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jCitpbmRleCA1M2E4YmJiLi5jYjExMGQ0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxzeXMvdWlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGJvb2wKKyB3cml0ZXZfZm9yX2ZhdGFsIChpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgbmlvdiwgc2l6ZV90IHRvdGFsKQorQEAgLTQwLDYgKzQxLDcgQEAgd3JpdGV2X2Zvcl9mYXRhbCAoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IG5pb3YsIHNpemVfdCB0b3RhbCkKKyBzdGF0aWMgdm9pZAorIGJhY2t0cmFjZV9hbmRfbWFwcyAoaW50IGRvX2Fib3J0LCBib29sIHdyaXR0ZW4sIGludCBmZCkKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UKKyAgIGlmIChkb19hYm9ydCA+IDEgJiYgd3JpdHRlbikKKyAgICAgeworICAgICAgIHZvaWQgKmFkZHJzWzY0XTsKK0BAIC02Miw2ICs2NCw3IEBAIGJhY2t0cmFjZV9hbmRfbWFwcyAoaW50IGRvX2Fib3J0LCBib29sIHdyaXR0ZW4sIGludCBmZCkKKyAgICAgICAgICAgY2xvc2Vfbm90X2NhbmNlbF9ub19zdGF0dXMgKGZkMik7CisgICAgICAgICB9CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSAqLworIH0KKyAjZGVmaW5lIEJFRk9SRV9BQk9SVAkJYmFja3RyYWNlX2FuZF9tYXBzCisgCitkaWZmIC0tZ2l0IGEvdGltZS9NYWtlZmlsZSBiL3RpbWUvTWFrZWZpbGUKK2luZGV4IGE0MTFmNjIuLjJkMDIyY2EgMTAwNjQ0CistLS0gYS90aW1lL01ha2VmaWxlCisrKysgYi90aW1lL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciB0aW1lIHJvdXRpbmVzCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gdGltZQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDE1ICszMiwyMyBAQCByb3V0aW5lcyA6PSBvZmZ0aW1lIGFzY3RpbWUgY2xvY2sgY3RpbWUgY3RpbWVfciBkaWZmdGltZSBcCisgCSAgICB0emZpbGUgZ2V0aXRpbWVyIHNldGl0aW1lcgkJCSBcCisgCSAgICBzdGltZSBkeXNpemUgdGltZWdtIGZ0aW1lCQkJIFwKKyAJICAgIGdldGRhdGUgc3RycHRpbWUgc3RycHRpbWVfbAkJCSBcCistCSAgICBzdHJmdGltZSB3Y3NmdGltZSBzdHJmdGltZV9sIHdjc2Z0aW1lX2wJIFwKKysJICAgIHN0cmZ0aW1lIHN0cmZ0aW1lX2wJCQkJIFwKKyAJICAgIHRpbWVzcGVjX2dldAorLWF1eCA6PQkgICAgZXJhIGFsdF9kaWdpdCBsYy10aW1lLWNsZWFudXAKKyAKKy10ZXN0cwk6PSB0ZXN0X3RpbWUgY2xvY2t0ZXN0IHRzdC1wb3NpeHR6IHRzdC1zdHJwdGltZSB0c3Rfd2NzZnRpbWUgXAorLQkgICB0c3QtZ2V0ZGF0ZSB0c3QtbWt0aW1lIHRzdC1ta3RpbWUyIHRzdC1mdGltZV9sIHRzdC1zdHJmdGltZSBcCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgICAgICAgICAgICAgICAgXAorKwkgICAgOj0gd2NzZnRpbWUgd2NzZnRpbWVfbAorK2F1eC0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IGFsdF9kaWdpdCBlcmEgbGMtdGltZS1jbGVhbnVwCisrCisrdGVzdHMJOj0gdGVzdF90aW1lIGNsb2NrdGVzdCB0c3QtcG9zaXh0eiBcCisrCSAgIHRzdC1nZXRkYXRlIHRzdC1ta3RpbWUgdHN0LW1rdGltZTIgdHN0LXN0cmZ0aW1lIFwKKyAJICAgdHN0LW1rdGltZTMgdHN0LXN0cnB0aW1lMiBidWctYXNjdGltZSBidWctYXNjdGltZV9yIGJ1Zy1ta3RpbWUxIFwKKyAJICAgdHN0LXN0cnB0aW1lMyBidWctZ2V0ZGF0ZTEgdHN0LXN0cnB0aW1lLXdoaXRlc3BhY2UgdHN0LWZ0aW1lCisgCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSAgICAgICAgKz0gdHN0LXN0cnB0aW1lIHRzdC1mdGltZV9sCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgXAorKwkgICAgICAgICs9IHRzdF93Y3NmdGltZQorKworIGluY2x1ZGUgLi4vUnVsZXMKKyAKKyB0ei1jZmxhZ3MgPSAtRFRaRElSPSciJCh6b25lZGlyKSInIFwKK2RpZmYgLS1naXQgYS90aW1lL3N0cmZ0aW1lX2wuYyBiL3RpbWUvc3RyZnRpbWVfbC5jCitpbmRleCBiNDhlZjM0Li5iZmRkNjE4IDEwMDY0NAorLS0tIGEvdGltZS9zdHJmdGltZV9sLmMKKysrKyBiL3RpbWUvc3RyZnRpbWVfbC5jCitAQCAtMzUsNiArMzUsMTAgQEAKKyAjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisgI2VuZGlmCisgCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpZiBkZWZpbmVkIGVtYWNzICYmICFkZWZpbmVkIEhBVkVfQkNPUFkKKyAjIGRlZmluZSBIQVZFX01FTUNQWSAxCisgI2VuZGlmCitAQCAtODgyLDcgKzg4Niw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAljYXNlIExfKCdDJyk6CisgCSAgaWYgKG1vZGlmaWVyID09IExfKCdFJykpCisgCSAgICB7CistI2lmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorIAkgICAgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBfbmxfZ2V0X2VyYV9lbnRyeSAodHAgSEVMUEVSX0xPQ0FMRV9BUkcpOworIAkgICAgICBpZiAoZXJhKQorIAkJeworQEAgLTk1NSw3ICs5NTksNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAKKyAJICBpZiAobW9kaWZpZXIgPT0gTF8oJ08nKSAmJiAwIDw9IG51bWJlcl92YWx1ZSkKKyAJICAgIHsKKy0jaWZkZWYgX05MX0NVUlJFTlQKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBkZWZpbmVkIChfTkxfQ1VSUkVOVCkKKyAJICAgICAgLyogR2V0IHRoZSBsb2NhbGUgc3BlY2lmaWMgYWx0ZXJuYXRlIHJlcHJlc2VudGF0aW9uIG9mCisgCQkgdGhlIG51bWJlciBOVU1CRVJfVkFMVUUuICBJZiBub25lIGV4aXN0IE5VTEwgaXMgcmV0dXJuZWQuICAqLworIAkgICAgICBjb25zdCBDSEFSX1QgKmNwID0gbmxfZ2V0X2FsdF9kaWdpdCAobnVtYmVyX3ZhbHVlCitAQCAtMTI2MCw3ICsxMjY0LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCWNhc2UgTF8oJ1knKToKKyAJICBpZiAobW9kaWZpZXIgPT0gJ0UnKQorIAkgICAgeworLSNpZiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKyAJICAgICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gX25sX2dldF9lcmFfZW50cnkgKHRwIEhFTFBFUl9MT0NBTEVfQVJHKTsKKyAJICAgICAgaWYgKGVyYSkKKyAJCXsKK0BAIC0xMjg1LDcgKzEyODksNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAJY2FzZSBMXygneScpOgorIAkgIGlmIChtb2RpZmllciA9PSBMXygnRScpKQorIAkgICAgeworLSNpZiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKyAJICAgICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gX25sX2dldF9lcmFfZW50cnkgKHRwIEhFTFBFUl9MT0NBTEVfQVJHKTsKKyAJICAgICAgaWYgKGVyYSkKKyAJCXsKK2RpZmYgLS1naXQgYS90aW1lL3N0cnB0aW1lX2wuYyBiL3RpbWUvc3RycHRpbWVfbC5jCitpbmRleCA1NjQwY2NlLi43ODRjY2JjIDEwMDY0NAorLS0tIGEvdGltZS9zdHJwdGltZV9sLmMKKysrKyBiL3RpbWUvc3RycHRpbWVfbC5jCitAQCAtMjksNiArMjksNyBAQAorIAorICNpZmRlZiBfTElCQworICMgZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMAorKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisgI2VuZGlmCisgCitAQCAtODQsNyArODUsNyBAQCBsb2NhbHRpbWVfciAodCwgdHApCisgICAgIGlmICh2YWwgPCBmcm9tIHx8IHZhbCA+IHRvKQkJCQkJCSAgICAgIFwKKyAgICAgICByZXR1cm4gTlVMTDsJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKy0jaWZkZWYgX05MX0NVUlJFTlQKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBkZWZpbmVkIChfTkxfQ1VSUkVOVCkKKyAjIGRlZmluZSBnZXRfYWx0X251bWJlcihmcm9tLCB0bywgbikgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICBfX2xhYmVsX18gZG9fbm9ybWFsOwkJCQkJCSAgICAgIFwKK0BAIC0yNTcsOCArMjU4LDEwIEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAgIGludCBjbnQ7CisgICBpbnQgY250X2xvbmdlc3Q7CisgICBzaXplX3QgdmFsOworKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgc2l6ZV90IG51bV9lcmFzOworICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gTlVMTDsKKysjZW5kaWYKKyAgIGVudW0gcHRpbWVfbG9jYWxlX3N0YXR1cyB7IG5vdCwgbG9jLCByYXcgfSBkZWNpZGVkX2xvbmdlc3Q7CisgICBzdHJ1Y3QgX19zdHJwdGltZV9zdGF0ZQorICAgeworQEAgLTgyMCw2ICs4MjMsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCSAgICAgIHMud2FudF94ZGF5ID0gMTsKKyAJICAgICAgYnJlYWs7CisgCSAgICBjYXNlICdDJzoKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgaWYgKHMuZGVjaWRlZCAhPSByYXcpCisgCQl7CisgCQkgIGlmIChzLmVyYV9jbnQgPj0gMCkKK0BAIC04NTYsMTAgKzg2MCwxMiBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCisgCQkgIHMuZGVjaWRlZCA9IHJhdzsKKyAJCX0KKysjZW5kaWYKKyAJICAgICAgLyogVGhlIEMgbG9jYWxlIGhhcyBubyBlcmEgaW5mb3JtYXRpb24sIHNvIHVzZSB0aGUKKyAJCSBub3JtYWwgcmVwcmVzZW50YXRpb24uICAqLworIAkgICAgICBnb3RvIG1hdGNoX2NlbnR1cnk7CisgIAkgICAgY2FzZSAneSc6CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGlmIChzLmRlY2lkZWQgIT0gcmF3KQorIAkJeworIAkJICBnZXRfbnVtYmVyKDAsIDk5OTksIDQpOworQEAgLTkxOCw5ICs5MjQsMTAgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAorIAkJICBzLmRlY2lkZWQgPSByYXc7CisgCQl9CistCisrI2VuZGlmCisgCSAgICAgIGdvdG8gbWF0Y2hfeWVhcl9pbl9jZW50dXJ5OworIAkgICAgY2FzZSAnWSc6CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGlmIChzLmRlY2lkZWQgIT0gcmF3KQorIAkJeworIAkJICBudW1fZXJhcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX1RJTUUsCitAQCAtOTQ4LDYgKzk1NSw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAKKyAJCSAgcy5kZWNpZGVkID0gcmF3OworIAkJfQorKyNlbmRpZgorIAkgICAgICBnZXRfbnVtYmVyICgwLCA5OTk5LCA0KTsKKyAJICAgICAgdG0tPnRtX3llYXIgPSB2YWwgLSAxOTAwOworIAkgICAgICBzLndhbnRfY2VudHVyeSA9IDA7CitAQCAtMTExOCw2ICsxMTI2LDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAl0bS0+dG1feWVhciA9IChzLmNlbnR1cnkgLSAxOSkgKiAxMDA7CisgICAgIH0KKyAKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChzLmVyYV9jbnQgIT0gLTEpCisgICAgIHsKKyAgICAgICBlcmEgPSBfbmxfc2VsZWN0X2VyYV9lbnRyeSAocy5lcmFfY250IEhFTFBFUl9MT0NBTEVfQVJHKTsKK0BAIC0xMTMyLDYgKzExNDEsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCXRtLT50bV95ZWFyID0gZXJhLT5zdGFydF9kYXRlWzBdOworICAgICB9CisgICBlbHNlCisrI2VuZGlmCisgICAgIGlmIChzLndhbnRfZXJhKQorICAgICAgIHsKKyAJLyogTm8gZXJhIGZvdW5kIGJ1dCB3ZSBoYXZlIHNlZW4gYW4gRSBtb2RpZmllci4gIFJlY3RpZnkgc29tZQorZGlmZiAtLWdpdCBhL3RpbWV6b25lL01ha2VmaWxlIGIvdGltZXpvbmUvTWFrZWZpbGUKK2luZGV4IDg4NmIwNmUuLmY5MjI2ODQgMTAwNjQ0CistLS0gYS90aW1lem9uZS9NYWtlZmlsZQorKysrIGIvdGltZXpvbmUvTWFrZWZpbGUKK0BAIC0xMjcsNyArMTI3LDcgQEAgJCh0ZXN0ZGF0YSkvWFQlOiB0ZXN0ZGF0YS9YVCUKKyAKKyAkKG9ianBmeCl0enNlbGVjdDogdHpzZWxlY3Qua3NoICQoY29tbW9uLW9ianBmeCljb25maWcubWFrZQorIAlzZWQgLWUgJ3N8L2Jpbi9iYXNofC9iaW4vc2h8JyBcCistCSAgICAtZSAnc3xUWkRJUj1bXn1dKnxUWkRJUj0kKHpvbmVkaXIpfCcgXAorKwkgICAgLWUgJy9UWkRJUj0vc3xcJCQocHdkKXwkKHpvbmVkaXIpfCcgXAorIAkgICAgLWUgJy9UWlZFUlNJT049L3N8c2VlX01ha2VmaWxlfCIkKHZlcnNpb24pInwnIFwKKyAJICAgIC1lICcvUEtHVkVSU0lPTj0vc3w9Lip8PSIkKFBLR1ZFUlNJT04pInwnIFwKKyAJICAgIC1lICcvUkVQT1JUX0JVR1NfVE89L3N8PS4qfD0iJChSRVBPUlRfQlVHU19UTykifCcgXAorZGlmZiAtLWdpdCBhL3djc21icy9NYWtlZmlsZSBiL3djc21icy9NYWtlZmlsZQoraW5kZXggNDRhNDQ5NC4uZGI5ZmMyNCAxMDA2NDQKKy0tLSBhL3djc21icy9NYWtlZmlsZQorKysrIGIvd2NzbWJzL01ha2VmaWxlCitAQCAtMTgsMTUgKzE4LDIxIEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciB3Y3NtYnMgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSB3Y3NtYnMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCTo9IHdjaGFyLmggYml0cy93Y2hhci5oIGJpdHMvd2NoYXIyLmggYml0cy93Y2hhci1sZGJsLmggdWNoYXIuaAorIAorLXJvdXRpbmVzIDo9IHdjc2NhdCB3Y3NjaHIgd2NzY21wIHdjc2NweSB3Y3Njc3BuIHdjc2R1cCB3Y3NsZW4gd2NzbmNhdCBcCisrIyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgcHJpbnRmX2ZwLmMsIGV2ZW4gaW4gdGhlIHBsYWluIGNhc2U7IHNlZQorKyMgY29tbWVudHMgdGhlcmUgZm9yIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUuCisrcm91dGluZXMgIDo9IHdtZW1jcHkgd21lbXNldAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJICA6PSB3Y3NjYXQgd2NzY2hyIHdjc2NtcCB3Y3NjcHkgd2NzY3NwbiB3Y3NkdXAgd2NzbGVuIHdjc25jYXQgXAorIAkgICAgd2NzbmNtcCB3Y3NuY3B5IHdjc3Bicmsgd2NzcmNociB3Y3NzcG4gd2NzdG9rIHdjc3N0ciB3bWVtY2hyIFwKKy0JICAgIHdtZW1jbXAgd21lbWNweSB3bWVtbW92ZSB3bWVtc2V0IHdjcGNweSB3Y3BuY3B5IHdtZW1wY3B5IFwKKysJICAgIHdtZW1jbXAgd21lbW1vdmUgd2NwY3B5IHdjcG5jcHkgd21lbXBjcHkgXAorIAkgICAgYnRvd2Mgd2N0b2IgbWJzaW5pdCBcCisgCSAgICBtYnJsZW4gbWJydG93YyB3Y3J0b21iIG1ic3J0b3djcyB3Y3NydG9tYnMgXAorIAkgICAgbWJzbnJ0b3djcyB3Y3NucnRvbWJzIHdjc25sZW4gd2NzY2hybnVsIFwKK0BAIC0zOCwxNCArNDQsMjEgQEAgcm91dGluZXMgOj0gd2NzY2F0IHdjc2NociB3Y3NjbXAgd2NzY3B5IHdjc2NzcG4gd2NzZHVwIHdjc2xlbiB3Y3NuY2F0IFwKKyAJICAgIHdjc2NvbGxfbCB3Y3N4ZnJtX2wgXAorIAkgICAgd2NzY2FzZWNtcCB3Y3NuY2FzZSB3Y3NjYXNlY21wX2wgd2NzbmNhc2VfbCBcCisgCSAgICB3Y3NtYnNsb2FkIG1ic3J0b3djc19sIFwKKy0JICAgIGlzb2M5OV93c2NhbmYgaXNvYzk5X3Z3c2NhbmYgaXNvYzk5X2Z3c2NhbmYgaXNvYzk5X3Zmd3NjYW5mIFwKKyAJICAgIGlzb2M5OV9zd3NjYW5mIGlzb2M5OV92c3dzY2FuZiBcCisgCSAgICBtYnJ0b2MxNiBjMTZydG9tYgorIAorLXN0cm9wLXRlc3RzIDo9ICB3Y3NjbXAgd2NzbmNtcCB3bWVtY21wIHdjc2xlbiB3Y3NjaHIgd2NzcmNociB3Y3NjcHkKKy10ZXN0cyA6PSB0c3Qtd2NzdG9mIHdjc21icy10c3QxIHRzdC13Y3NubGVuIHRzdC1idG93YyB0c3QtbWJydG93YyBcCistCSB0c3Qtd2NydG9tYiB0c3Qtd2NwbmNweSB0c3QtbWJzcnRvd2NzIHRzdC13Y2hhci1oIHRzdC1tYnJ0b3djMiBcCistCSB0c3QtYzE2YzMyLTEgd2NzYXRjbGlmZiAkKGFkZHByZWZpeCB0ZXN0LSwkKHN0cm9wLXRlc3RzKSkKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJKz0gaXNvYzk5X3dzY2FuZiBpc29jOTlfdndzY2FuZiBpc29jOTlfZndzY2FuZiBpc29jOTlfdmZ3c2NhbmYKKysKKytzdHJvcC10ZXN0cyA6PSAgd2NzY21wIHdtZW1jbXAgd21lbWNtcCB3Y3NsZW4gd2NzY2hyIHdjc3JjaHIgd2NzY3B5CisrCisrdGVzdHMgOj0gdHN0LXdjaGFyLWgKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJKz0gdHN0LWJ0b3djIHRzdC1tYnJ0b3djIHRzdC1tYnJ0b3djMiB0c3Qtd2NydG9tYiB0c3QtYzE2YzMyLTEKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSs9IHRzdC13Y3N0b2Ygd2NzbWJzLXRzdDEgdHN0LXdjc25sZW4gXAorKwl0c3Qtd2NwbmNweSB0c3QtbWJzcnRvd2NzIFwKKysJd2NzYXRjbGlmZiAkKGFkZHByZWZpeCB0ZXN0LSwkKHN0cm9wLXRlc3RzKSkKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvd2NzbWJzL3djc21ic2xvYWQuYyBiL3djc21icy93Y3NtYnNsb2FkLmMKK2luZGV4IDZiYjQ5YmMuLjJhYjlkMDcgMTAwNjQ0CistLS0gYS93Y3NtYnMvd2NzbWJzbG9hZC5jCisrKysgYi93Y3NtYnMvd2NzbWJzbG9hZC5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorICNpbmNsdWRlIDx3Y3NtYnNsb2FkLmg+CitAQCAtMTQzLDYgKzE0NCw3IEBAIF9fd2NzbWJzX2dldGZjdCAoY29uc3QgY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCAqbnN0ZXBzcCkKKyAgIH0pCisgCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIC8qIFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBoZXJlIG11c3Qgbm90IGJlIHVzZWQgd2hpbGUgc2V0bG9jYWxlIGlzIGNhbGxlZC4gICovCisgX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX19saWJjX3NldGxvY2FsZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCisgCitAQCAtMjExLDYgKzIxMywxNyBAQCBfX3djc21ic19sb2FkX2NvbnYgKHN0cnVjdCBfX2xvY2FsZV9kYXRhICpuZXdfY2F0ZWdvcnkpCisgCisgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKyB9CisrI2Vsc2UKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytfX3djc21ic19sb2FkX2NvbnYgKHN0cnVjdCBfX2xvY2FsZV9kYXRhICpuZXdfY2F0ZWdvcnkpCisreworKyAgLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB3ZSBzaG91bGQgbmV2ZXIgcmVhY2gKKysgICAgIHRoaXMgcG9pbnQ6IHRoZXJlIGlzIG5vIHdheSB0byBjaGFuZ2UgbG9jYWxlcywgc28gZXZlcnkgbG9jYWxlCisrICAgICBwYXNzZWQgdG8gZ2V0X2djb252X2ZjdHMgc2hvdWxkIGJlIF9ubF9DX0xDX0NUWVBFLiAgKi8KKysgIGFib3J0ICgpOworK30KKysjZW5kaWYKKyAKKyAKKyAvKiBDbG9uZSB0aGUgY3VycmVudCBjb252ZXJzaW9uIGZ1bmN0aW9uIHNldC4gICovCitkaWZmIC0tZ2l0IGEvd2N0eXBlL01ha2VmaWxlIGIvd2N0eXBlL01ha2VmaWxlCitpbmRleCBjNTZmMDdjLi40ZThhZjQzIDEwMDY0NAorLS0tIGEvd2N0eXBlL01ha2VmaWxlCisrKysgYi93Y3R5cGUvTWFrZWZpbGUKK0BAIC0xOCwxNCArMTgsMjAgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHdjdHlwZSBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHdjdHlwZQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCTo9IHdjdHlwZS5oCistcm91dGluZXMJOj0gd2NmdW5jcyB3Y3R5cGUgaXN3Y3R5cGUgd2N0cmFucyB0b3djdHJhbnMgXAorLQkJICAgd2NmdW5jc19sIHdjdHlwZV9sIGlzd2N0eXBlX2wgd2N0cmFuc19sIHRvd2N0cmFuc19sCistCistdGVzdHMJOj0gdGVzdF93Y3R5cGUgdGVzdF93Y2Z1bmNzIGJ1Zy13Y3R5cGVoCisrcm91dGluZXMgCTo9IHdjdHJhbnMgdG93Y3RyYW5zIHRvd2N0cmFuc19sCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkJOj0gd2NmdW5jcyB3Y3R5cGUgaXN3Y3R5cGUgXAorKwkJICAgd2NmdW5jc19sIHdjdHlwZV9sIGlzd2N0eXBlX2wgd2N0cmFuc19sCisrCisrdGVzdHMJOj0KKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrICAgICArPSB0ZXN0X3djdHlwZSB0ZXN0X3djZnVuY3MgYnVnLXdjdHlwZWgKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1OWNjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoCkBAIC0wLDAgKzEsMTIzIEBACitGcm9tIDU3NzM0MTdmYTkxYTE4Y2QzOWZiMzVjOTkwN2Q3MmFmMGVkOWVhMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1NzowMSArMDAwMAorU3ViamVjdDogW1BBVENIIDI1LzI3XSBlZ2xpYmM6IEluc3RhbGwgUElDIGFyY2hpdmVzCisKK0ZvcndhcmQgcG9ydCBmcm9tIGVnbGliYworCisyMDA4LTAyLTA3ICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIE1ha2VydWxlcyAoaW5zdGFsbC1leHRyYXMsIGluc3RhbGwtbWFwKTogTmV3IHZhcmlhYmxlcy4KKyAgICAgICAgKGluc3RhbGxlZC1saWJjcyk6IEFkZCBsaWJjX3BpYy5hLgorICAgICAgICAoaW5zdGFsbC1saWIpOiBJbmNsdWRlIF9waWMuYSBmaWxlcyBmb3IgdmVyc2lvbmVkIHNoYXJlZAorICAgICAgICBsaWJyYXJpZXMuCisgICAgICAgIChpbnN0YWxsLW1hcC1ub3N1YmRpciwgaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIpOiBBZGQgcnVsZXMgZm9yCisgICAgICAgIGluc3RhbGxpbmcgZXh0cmEgZmlsZXMuCisgICAgICAgIChpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcik6IERlcGVuZCBvbiBpbnN0YWxsLW1hcC1ub3N1YmRpciBhbmQKKyAgICAgICAgaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIuCisKKzIwMDgtMDQtMDEgIE1heGltIEt1dnlya292ICA8bWF4aW1AY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIE1ha2VydWxlcyAoaW5zdGFsbC1saWIpOiBEb24ndCBpbnN0YWxsIGxpYnB0aHJlYWRfcGljLmEuCisgICAgICAgIChpbnN0YWxsLW1hcCk6IERvbid0IGluc3RhbGwgbGlicHRocmVhZF9waWMubWFwLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VydWxlcyB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZXJ1bGVzIGIvTWFrZXJ1bGVzCitpbmRleCAxZGQ0MWFhLi40MTc3OGUxIDEwMDY0NAorLS0tIGEvTWFrZXJ1bGVzCisrKysgYi9NYWtlcnVsZXMKK0BAIC03MTMsNiArNzEzLDkgQEAgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKyAkKGNvbW1vbi1vYmpwZngpbGliYy5zbzogJChjb21tb24tb2JqcGZ4KWxpYmMubWFwCisgZW5kaWYKKyBjb21tb24tZ2VuZXJhdGVkICs9IGxpYmMuc28gbGliY19waWMub3MKKytpZm5kZWYgc3ViZGlyCisraW5zdGFsbC1leHRyYXMgOj0gc29pbml0Lm8gc29maW5pLm8KKytlbmRpZgorIGlmZGVmIGxpYmMuc28tdmVyc2lvbgorICQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pOiAkKGNvbW1vbi1vYmpwZngpbGliYy5zbworIAkkKG1ha2UtbGluaykKK0BAIC05NTUsNiArOTU4LDcgQEAgZW5kaWYKKyAKKyBpbnN0YWxsOiBjaGVjay1pbnN0YWxsLXN1cHBvcnRlZAorIAorK2luc3RhbGxlZC1saWJjcyA6PSAkKGluc3RhbGxlZC1saWJjcykgJChpbnN0X2xpYmRpcikvbGliY19waWMuYQorIGluc3RhbGw6ICQoaW5zdGFsbGVkLWxpYmNzKQorICQoaW5zdGFsbGVkLWxpYmNzKTogJChpbnN0X2xpYmRpcikvbGliJChsaWJwcmVmaXgpJTogbGliICQoK2ZvcmNlKQorIAkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKK0BAIC05ODMsNiArOTg3LDIyIEBAIHZlcnNpb25lZCA6PSAkKHN0cmlwICQoZm9yZWFjaCBzbywkKGluc3RhbGwtbGliLnNvKSxcCisgaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkIDo9ICQoZmlsdGVyICQodmVyc2lvbmVkKSwgJChpbnN0YWxsLWxpYi5zbykpCisgaW5zdGFsbC1saWIuc28tdW52ZXJzaW9uZWQgOj0gJChmaWx0ZXItb3V0ICQodmVyc2lvbmVkKSwgJChpbnN0YWxsLWxpYi5zbykpCisgCisrIyBJbnN0YWxsIHRoZSBfcGljLmEgZmlsZXMgZm9yIHZlcnNpb25lZCBsaWJyYXJpZXMsIGFuZCBjb3JyZXNwb25kaW5nCisrIyAubWFwIGZpbGVzLgorKyMgbGlicHRocmVhZF9waWMuYSBicmVha3MgbWtsaWJzLCBzbyBkb24ndCBpbnN0YWxsIGl0IGFuZCBpdHMgbWFwLgorK2luc3RhbGwtbGliIDo9ICQoaW5zdGFsbC1saWIpICQoaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkOiUuc289JV9waWMuYSkKKytpbnN0YWxsLWxpYiA6PSAkKGZpbHRlci1vdXQgbGlicHRocmVhZF9waWMuYSwkKGluc3RhbGwtbGliKSkKKysjIERlc3BpdGUgaGF2aW5nIGEgc29uYW1lIGxpYmh1cmR1c2VyIGFuZCBsaWJtYWNodXNlciBkbyBub3QgdXNlIHN5bWJvbAorKyMgdmVyc2lvbmluZywgc28gZG9uJ3QgaW5zdGFsbCB0aGUgY29ycmVzcG9uZGluZyAubWFwIGZpbGVzLgorK2lmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCisraW5zdGFsbC1tYXAgOj0gJChwYXRzdWJzdCAlLnNvLCUubWFwLFwKKysJCQkkKGZvcmVhY2ggTCwkKGluc3RhbGwtbGliLnNvLXZlcnNpb25lZCksJChub3RkaXIgJEwpKSkKKytpbnN0YWxsLW1hcCA6PSAkKGZpbHRlci1vdXQgbGliaHVyZHVzZXIubWFwIGxpYm1hY2h1c2VyLm1hcCBsaWJwdGhyZWFkLm1hcCwkKGluc3RhbGwtbWFwKSkKKytpZm5kZWYgc3ViZGlyCisraW5zdGFsbC1tYXAgOj0gJChpbnN0YWxsLW1hcCkgbGliYy5tYXAKKytlbmRpZgorK2VuZGlmCisrCisgIyBGb3IgdmVyc2lvbmVkIGxpYnJhcmllcywgd2UgaW5zdGFsbCB0aHJlZSBmaWxlczoKKyAjCSQoaW5zdF9saWJkaXIpL2xpYmZvby5zbwktLSBmb3IgbGlua2luZywgc3ltbGluayBvciBsZCBzY3JpcHQKKyAjCSQoaW5zdF9zbGliZGlyKS9saWJmb28uc28uTk4JLS0gZm9yIGxvYWRpbmcgYnkgU09OQU1FLCBzeW1saW5rCitAQCAtMTIyNSw5ICsxMjQ1LDIyIEBAICQoYWRkcHJlZml4ICQoaW5zdF9pbmNsdWRlZGlyKS8sJChoZWFkZXJzLW5vbmgpKTogJChpbnN0X2luY2x1ZGVkaXIpLyU6IFwKKyBlbmRpZgkjIGhlYWRlcnMtbm9uaAorIGVuZGlmCSMgaGVhZGVycworIAorK2lmZGVmIGluc3RhbGwtbWFwCisrJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvLCQocGF0c3Vic3QgbGliJS5tYXAsbGliJV9waWMubWFwLCQoaW5zdGFsbC1tYXApKSk6IFwKKysgICQoaW5zdF9saWJkaXIpL2xpYiVfcGljLm1hcDogJChjb21tb24tb2JqcGZ4KWxpYiUubWFwICQoK2ZvcmNlKQorKwkkKGRvLWluc3RhbGwpCisrZW5kaWYKKysKKytpZmRlZiBpbnN0YWxsLWV4dHJhcworKyQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLywkKGluc3RhbGwtZXh0cmFzKSk6IFwKKysgICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLyUubzogJChlbGYtb2JqcGZ4KSUub3MgJCgrZm9yY2UpCisrCSQoZG8taW5zdGFsbCkKKytlbmRpZgorKworIC5QSE9OWTogaW5zdGFsbC1iaW4tbm9zdWJkaXIgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyIFwKKyAJaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpciBpbnN0YWxsLXNiaW4tbm9zdWJkaXIgaW5zdGFsbC1saWItbm9zdWJkaXIgXAorLQlpbnN0YWxsLWRhdGEtbm9zdWJkaXIgaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyCisrCWluc3RhbGwtZGF0YS1ub3N1YmRpciBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIgaW5zdGFsbC1tYXAtbm9zdWJkaXIgXAorKwlpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcgorIGluc3RhbGwtYmluLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfYmluZGlyKS8sJChpbnN0YWxsLWJpbikpCisgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfYmluZGlyKS8sJChpbnN0YWxsLWJpbi1zY3JpcHQpKQorIGluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXI6IFwKK0BAIC0xMjQwLDYgKzEyNzMsMTAgQEAgaW5zdGFsbC1kYXRhLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfZGF0YWRpcikvLCQoaW5zdGFsbC1kYXRhKSkKKyBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9pbmNsdWRlZGlyKS8sJChoZWFkZXJzKSkKKyBpbnN0YWxsLW90aGVycy1ub3N1YmRpcjogJChpbnN0YWxsLW90aGVycykKKyBpbnN0YWxsLW90aGVycy1wcm9ncmFtcy1ub3N1YmRpcjogJChpbnN0YWxsLW90aGVycy1wcm9ncmFtcykKKytpbnN0YWxsLW1hcC1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvLFwKKysJCSAgICAgICAkKHBhdHN1YnN0IGxpYiUubWFwLGxpYiVfcGljLm1hcCwkKGluc3RhbGwtbWFwKSkpCisraW5zdGFsbC1leHRyYXMtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLyxcCisrCQkgICAgICAgJChpbnN0YWxsLWV4dHJhcykpCisgCisgIyBXZSBuZWVkIGFsbCB0aGUgYC1ub3N1YmRpcicgdGFyZ2V0cyBzbyB0aGF0IGBpbnN0YWxsJyBpbiB0aGUgcGFyZW50CisgIyBkb2Vzbid0IGRlcGVuZCBvbiBzZXZlcmFsIHRoaW5ncyB3aGljaCBlYWNoIGl0ZXJhdGUgb3ZlciB0aGUgc3ViZGlycy4KK0BAIC0xMjQ5LDcgKzEyODYsOCBAQCBpbnN0YWxsLSU6OiBpbnN0YWxsLSUtbm9zdWJkaXIgOworIAorIC5QSE9OWTogaW5zdGFsbCBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcgorIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyOiBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIgaW5zdGFsbC1kYXRhLW5vc3ViZGlyIFwKKy0JCQkgICAgaW5zdGFsbC1saWItbm9zdWJkaXIgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXIKKysJCQkgICAgaW5zdGFsbC1saWItbm9zdWJkaXIgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXIgXAorKwkJCSAgICBpbnN0YWxsLW1hcC1ub3N1YmRpciBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcgorIGlmZXEgKCQoYnVpbGQtcHJvZ3JhbXMpLHllcykKKyBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcjogaW5zdGFsbC1iaW4tbm9zdWJkaXIgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyIFwKKyAJCQkgICAgaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpciBpbnN0YWxsLXNiaW4tbm9zdWJkaXIgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MTFkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaApAQCAtMCwwICsxLDU1NiBAQAorRnJvbSBiYTA2OWIzMTA3ZjVhZDIwMGM0YWI5NWU2OWNmMzY4ZTIzNTNiMDBhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDY6NTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyNi8yN10gZWdsaWJjOiBkbF9kZWJ1Z19tYXNrIGlzIGNvbnRyb2xsZWQgYnkKKyBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworCit1c2UgR0xST19kbF9kZWJ1Z19tYXNrCisKK1NpbmdlZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY3N1L2xpYmMtc3RhcnQuYyAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtY2FjaGUuYyAgICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1jbG9zZS5jICAgICAgICAgfCAgNiArKystLS0KKyBlbGYvZGwtY29uZmxpY3QuYyAgICAgIHwgIDIgKy0KKyBlbGYvZGwtZGVwcy5jICAgICAgICAgIHwgIDYgKysrLS0tCisgZWxmL2RsLWVycm9yLmMgICAgICAgICB8ICAyICstCisgZWxmL2RsLWZpbmkuYyAgICAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtaW5pdC5jICAgICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1sb2FkLmMgICAgICAgICAgfCAxNiArKysrKysrKy0tLS0tLS0tCisgZWxmL2RsLWxvb2t1cC5jICAgICAgICB8IDE0ICsrKysrKystLS0tLS0tCisgZWxmL2RsLW9iamVjdC5jICAgICAgICB8ICAyICstCisgZWxmL2RsLW9wZW4uYyAgICAgICAgICB8IDEwICsrKysrLS0tLS0KKyBlbGYvZGwtcmVsb2MuYyAgICAgICAgIHwgIDIgKy0KKyBlbGYvZGwtdmVyc2lvbi5jICAgICAgIHwgIDIgKy0KKyBlbGYvZ2V0LWR5bmFtaWMtaW5mby5oIHwgIDIgKy0KKyBlbGYvcnRsZC5jICAgICAgICAgICAgIHwgMjIgKysrKysrKysrKystLS0tLS0tLS0tLQorIDE2IGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3N1L2xpYmMtc3RhcnQuYyBiL2NzdS9saWJjLXN0YXJ0LmMKK2luZGV4IDBhZmE3YzAuLjIxNTFmYjYgMTAwNjQ0CistLS0gYS9jc3UvbGliYy1zdGFydC5jCisrKysgYi9jc3UvbGliYy1zdGFydC5jCitAQCAtMjM4LDcgKzIzOCw3IEBAIExJQkNfU1RBUlRfTUFJTiAoaW50ICgqbWFpbikgKGludCwgY2hhciAqKiwgY2hhciAqKiBNQUlOX0FVWFZFQ19ERUNMKSwKKyAKKyAgIC8qIENhbGwgdGhlIGluaXRpYWxpemVyIG9mIHRoZSBwcm9ncmFtLCBpZiBhbnkuICAqLworICNpZmRlZiBTSEFSRUQKKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMsIDApKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTLCAwKSkKKyAgICAgR0xSTyhkbF9kZWJ1Z19wcmludGYpICgiXG5pbml0aWFsaXplIHByb2dyYW06ICVzXG5cbiIsIGFyZ3ZbMF0pOworICNlbmRpZgorICAgaWYgKGluaXQpCitAQCAtMjYxLDcgKzI2MSw3IEBAIExJQkNfU1RBUlRfTUFJTiAoaW50ICgqbWFpbikgKGludCwgY2hhciAqKiwgY2hhciAqKiBNQUlOX0FVWFZFQ19ERUNMKSwKKyAjZW5kaWYKKyAKKyAjaWZkZWYgU0hBUkVECistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUykpCisgICAgIEdMUk8oZGxfZGVidWdfcHJpbnRmKSAoIlxudHJhbnNmZXJyaW5nIGNvbnRyb2w6ICVzXG5cbiIsIGFyZ3ZbMF0pOworICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1jYWNoZS5jIGIvZWxmL2RsLWNhY2hlLmMKK2luZGV4IDg2MmYxZDguLmRhYjljNTEgMTAwNjQ0CistLS0gYS9lbGYvZGwtY2FjaGUuYworKysrIGIvZWxmL2RsLWNhY2hlLmMKK0BAIC0xOTQsNyArMTk0LDcgQEAgX2RsX2xvYWRfY2FjaGVfbG9va3VwIChjb25zdCBjaGFyICpuYW1lKQorICAgY29uc3QgY2hhciAqYmVzdDsKKyAKKyAgIC8qIFByaW50IGEgbWVzc2FnZSBpZiB0aGUgbG9hZGluZyBvZiBsaWJzIGlzIHRyYWNlZC4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiIHNlYXJjaCBjYWNoZT0lc1xuIiwgTERfU09fQ0FDSEUpOworIAorICAgaWYgKGNhY2hlID09IE5VTEwpCitAQCAtMjkyLDcgKzI5Miw3IEBAIF9kbF9sb2FkX2NhY2hlX2xvb2t1cCAoY29uc3QgY2hhciAqbmFtZSkKKyAgICAgfQorIAorICAgLyogUHJpbnQgb3VyIHJlc3VsdCBpZiB3YW50ZWQuICAqLworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTLCAwKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsIDApCisgICAgICAgJiYgYmVzdCAhPSBOVUxMKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiICB0cnlpbmcgZmlsZT0lc1xuIiwgYmVzdCk7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNsb3NlLmMgYi9lbGYvZGwtY2xvc2UuYworaW5kZXggYzg5NzI0Ny4uYjFiNGJkNSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jbG9zZS5jCisrKysgYi9lbGYvZGwtY2xvc2UuYworQEAgLTEyNSw3ICsxMjUsNyBAQCBfZGxfY2xvc2Vfd29ya2VyIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgYm9vbCBmb3JjZSkKKyAJZGxfY2xvc2Vfc3RhdGUgPSByZXJ1bjsKKyAKKyAgICAgICAvKiBUaGVyZSBhcmUgc3RpbGwgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdC4gIERvIG5vdGhpbmcgbW9yZS4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2xvc2luZyBmaWxlPSVzOyBkaXJlY3Rfb3BlbmNvdW50PSV1XG4iLAorIAkJCSAgbWFwLT5sX25hbWUsIG1hcC0+bF9kaXJlY3Rfb3BlbmNvdW50KTsKKyAKK0BAIC0yNjksNyArMjY5LDcgQEAgX2RsX2Nsb3NlX3dvcmtlciAoc3RydWN0IGxpbmtfbWFwICptYXAsIGJvb2wgZm9yY2UpCisgCSAgaWYgKGltYXAtPmxfaW5pdF9jYWxsZWQpCisgCSAgICB7CisgCSAgICAgIC8qIFdoZW4gZGVidWdnaW5nIHByaW50IGEgbWVzc2FnZSBmaXJzdC4gICovCistCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMsCisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUywKKyAJCQkJICAgIDApKQorIAkJX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBmaW5pOiAlcyBbJWx1XVxuXG4iLAorIAkJCQkgIGltYXAtPmxfbmFtZSwgbnNpZCk7CitAQCAtNzExLDcgKzcxMSw3IEBAIF9kbF9jbG9zZV93b3JrZXIgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBib29sIGZvcmNlKQorIAkgIGZyZWUgKGltYXAtPmxfcmVsZGVwcyk7CisgCisgCSAgLyogUHJpbnQgZGVidWdnaW5nIG1lc3NhZ2UuICAqLworLQkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKwkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCSAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5maWxlPSVzIFslbHVdOyAgZGVzdHJveWluZyBsaW5rIG1hcFxuIiwKKyAJCQkgICAgICBpbWFwLT5sX25hbWUsIGltYXAtPmxfbnMpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1jb25mbGljdC5jIGIvZWxmL2RsLWNvbmZsaWN0LmMKK2luZGV4IDQ3YTk0NmUuLmU2YTNmMjEgMTAwNjQ0CistLS0gYS9lbGYvZGwtY29uZmxpY3QuYworKysrIGIvZWxmL2RsLWNvbmZsaWN0LmMKK0BAIC0zMiw3ICszMiw3IEBAIF9kbF9yZXNvbHZlX2NvbmZsaWN0cyAoc3RydWN0IGxpbmtfbWFwICpsLCBFbGZXKFJlbGEpICpjb25mbGljdCwKKyAJCSAgICAgICBFbGZXKFJlbGEpICpjb25mbGljdGVuZCkKKyB7CisgI2lmICEgRUxGX01BQ0hJTkVfTk9fUkVMQQorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19SRUxPQykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUkVMT0MpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5jb25mbGljdCBwcm9jZXNzaW5nOiAlc1xuIiwgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpKTsKKyAKKyAgIHsKK2RpZmYgLS1naXQgYS9lbGYvZGwtZGVwcy5jIGIvZWxmL2RsLWRlcHMuYworaW5kZXggZWVlMTQ2YS4uMWE0YjAwNCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1kZXBzLmMKKysrKyBiL2VsZi9kbC1kZXBzLmMKK0BAIC0xMjcsNyArMTI3LDcgQEAgZW1wdHkgZHluYW1pYyBzdHJpbmcgdG9rZW4gc3Vic3RpdHV0aW9uIikpOwkJCQkgICAgICBcCisgCSAgICBlbHNlCQkJCQkJCSAgICAgIFwKKyAJICAgICAgewkJCQkJCQkJICAgICAgXAorIAkJLyogVGhpcyBpcyBmb3IgRFRfQVVYSUxJQVJZLiAgKi8JCQkgICAgICBcCistCQlpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKSAgIFwKKysJCWlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkgICBcCisgCQkgIF9kbF9kZWJ1Z19wcmludGYgKE5fKCJcCisgY2Fubm90IGxvYWQgYXV4aWxpYXJ5IGAlcycgYmVjYXVzZSBvZiBlbXB0eSBkeW5hbWljIHN0cmluZyB0b2tlbiAiCSAgICAgIFwKKyAJCQkJCSAgICAic3Vic3RpdHV0aW9uXG4iKSwgX19zdHIpOwkgICAgICBcCitAQCAtMzAzLDcgKzMwMyw3IEBAIF9kbF9tYXBfb2JqZWN0X2RlcHMgKHN0cnVjdCBsaW5rX21hcCAqbWFwLAorIAkJYXJncy5uYW1lID0gbmFtZTsKKyAKKyAJCS8qIFNheSB0aGF0IHdlIGFyZSBhYm91dCB0byBsb2FkIGFuIGF1eGlsaWFyeSBsaWJyYXJ5LiAgKi8KKy0JCWlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUywKKysJCWlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLAorIAkJCQkgICAgICAwKSkKKyAJCSAgX2RsX2RlYnVnX3ByaW50ZiAoImxvYWQgYXV4aWxpYXJ5IG9iamVjdD0lcyIKKyAJCQkJICAgICIgcmVxdWVzdGVkIGJ5IGZpbGU9JXNcbiIsCitAQCAtNTIwLDcgKzUyMCw3IEBAIF9kbF9tYXBfb2JqZWN0X2RlcHMgKHN0cnVjdCBsaW5rX21hcCAqbWFwLAorICAgICAgIHJ1bnAtPm1hcC0+bF9yZXNlcnZlZCA9IDA7CisgICAgIH0KKyAKKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSywgMCkgIT0gMAorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkssIDApICE9IDAKKyAgICAgICAmJiBtYXAgPT0gR0woZGxfbnMpW0xNX0lEX0JBU0VdLl9uc19sb2FkZWQpCisgICAgIHsKKyAgICAgICAvKiBJZiB3ZSBhcmUgdG8gY29tcHV0ZSBjb25mbGljdHMsIHdlIGhhdmUgdG8gYnVpbGQgbG9jYWwgc2NvcGUKK2RpZmYgLS1naXQgYS9lbGYvZGwtZXJyb3IuYyBiL2VsZi9kbC1lcnJvci5jCitpbmRleCAwZmMzZmQ4Li5lYTgyZjRkIDEwMDY0NAorLS0tIGEvZWxmL2RsLWVycm9yLmMKKysrKyBiL2VsZi9kbC1lcnJvci5jCitAQCAtMTM5LDcgKzEzOSw3IEBAIGludGVybmFsX2Z1bmN0aW9uCisgX2RsX3NpZ25hbF9jZXJyb3IgKGludCBlcnJjb2RlLCBjb25zdCBjaGFyICpvYmpuYW1lLCBjb25zdCBjaGFyICpvY2NhdGlvbiwKKyAJCSAgIGNvbnN0IGNoYXIgKmVycnN0cmluZykKKyB7CistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzaworIAkJCSYgfihETF9ERUJVR19TVEFUSVNUSUNTfERMX0RFQlVHX1BSRUxJTkspLCAwKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiVzOiBlcnJvcjogJXM6ICVzICglcylcbiIsIG9iam5hbWUsIG9jY2F0aW9uLAorIAkJICAgICAgZXJyc3RyaW5nLCByZWNlaXZlciA/ICJjb250aW51ZWQiIDogImZhdGFsIik7CitkaWZmIC0tZ2l0IGEvZWxmL2RsLWZpbmkuYyBiL2VsZi9kbC1maW5pLmMKK2luZGV4IDZjZmU2NTEuLmY1OWY3ZmUgMTAwNjQ0CistLS0gYS9lbGYvZGwtZmluaS5jCisrKysgYi9lbGYvZGwtZmluaS5jCitAQCAtMjM0LDcgKzIzNCw3IEBAIF9kbF9maW5pICh2b2lkKQorIAkJICB8fCBsLT5sX2luZm9bRFRfRklOSV0gIT0gTlVMTCkKKyAJCXsKKyAJCSAgLyogV2hlbiBkZWJ1Z2dpbmcgcHJpbnQgYSBtZXNzYWdlIGZpcnN0LiAgKi8KKy0JCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzaworIAkJCQkJJiBETF9ERUJVR19JTVBDQUxMUywgMCkpCisgCQkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBmaW5pOiAlcyBbJWx1XVxuXG4iLAorIAkJCQkgICAgICBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSksCitAQCAtMjg2LDcgKzI4Niw3IEBAIF9kbF9maW5pICh2b2lkKQorICAgICAgIGdvdG8gYWdhaW47CisgICAgIH0KKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU1RBVElTVElDUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU1RBVElTVElDUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbnJ1bnRpbWUgbGlua2VyIHN0YXRpc3RpY3M6XG4iCisgCQkgICAgICAiICAgICAgICAgICBmaW5hbCBudW1iZXIgb2YgcmVsb2NhdGlvbnM6ICVsdVxuIgorIAkJICAgICAgImZpbmFsIG51bWJlciBvZiByZWxvY2F0aW9ucyBmcm9tIGNhY2hlOiAlbHVcbiIsCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWluaXQuYyBiL2VsZi9kbC1pbml0LmMKK2luZGV4IDJmODU3MzEuLmU0NmU4YjYgMTAwNjQ0CistLS0gYS9lbGYvZGwtaW5pdC5jCisrKysgYi9lbGYvZGwtaW5pdC5jCitAQCAtNDYsNyArNDYsNyBAQCBjYWxsX2luaXQgKHN0cnVjdCBsaW5rX21hcCAqbCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52KQorICAgICByZXR1cm47CisgCisgICAvKiBQcmludCBhIGRlYnVnIG1lc3NhZ2UgaWYgd2FudGVkLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBpbml0OiAlc1xuXG4iLAorIAkJICAgICAgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpKTsKKyAKK0BAIC05Niw3ICs5Niw3IEBAIF9kbF9pbml0IChzdHJ1Y3QgbGlua19tYXAgKm1haW5fbWFwLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYpCisgICAgICAgRWxmVyhBZGRyKSAqYWRkcnM7CisgICAgICAgdW5zaWduZWQgaW50IGNudDsKKyAKKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIHByZWluaXQ6ICVzXG5cbiIsCisgCQkJICBEU09fRklMRU5BTUUgKG1haW5fbWFwLT5sX25hbWUpKTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggZjY2NGY1MC4uOGMyODc0NCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC05NDMsNyArOTQzLDcgQEAgX2RsX21hcF9vYmplY3RfZnJvbV9mZCAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZkLCBzdHJ1Y3QgZmlsZWJ1ZiAqZmJwLAorICAgICB9CisgCisgICAvKiBQcmludCBkZWJ1Z2dpbmcgbWVzc2FnZS4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJmaWxlPSVzIFslbHVdOyAgZ2VuZXJhdGluZyBsaW5rIG1hcFxuIiwgbmFtZSwgbnNpZCk7CisgCisgICAvKiBUaGlzIGlzIHRoZSBFTEYgaGVhZGVyLiAgV2UgcmVhZCBpdCBpbiBgb3Blbl92ZXJpZnknLiAgKi8KK0BAIC0xMzQ3LDcgKzEzNDcsNyBAQCBjYW5ub3QgZW5hYmxlIGV4ZWN1dGFibGUgc3RhY2sgYXMgc2hhcmVkIG9iamVjdCByZXF1aXJlcyIpOworIAorICAgbC0+bF9lbnRyeSArPSBsLT5sX2FkZHI7CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcCisgICBkeW5hbWljOiAweCUwKmx4ICBiYXNlOiAweCUwKmx4ICAgc2l6ZTogMHglMCpaeFxuXAorICAgICBlbnRyeTogMHglMCpseCAgcGhkcjogMHglMCpseCAgcGhudW06ICAgJSp1XG5cbiIsCitAQCAtMTc4OSw3ICsxNzg5LDcgQEAgb3Blbl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgaW50IG1vZGUsCisgCisgICAgICAgLyogSWYgd2UgYXJlIGRlYnVnZ2luZyB0aGUgc2VhcmNoIGZvciBsaWJyYXJpZXMgcHJpbnQgdGhlIHBhdGgKKyAJIG5vdyBpZiBpdCBoYXNuJ3QgaGFwcGVuZWQgbm93LiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpCisgCSAgJiYgY3VycmVudF93aGF0ICE9IHRoaXNfZGlyLT53aGF0KQorIAl7CisgCSAgY3VycmVudF93aGF0ID0gdGhpc19kaXItPndoYXQ7CitAQCAtMTgxMCw3ICsxODEwLDcgQEAgb3Blbl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgaW50IG1vZGUsCisgCSAgICAgLSBidWYpOworIAorIAkgIC8qIFByaW50IG5hbWUgd2UgdHJ5IGlmIHRoaXMgaXMgd2FudGVkLiAgKi8KKy0JICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKwkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgIHRyeWluZyBmaWxlPSVzXG4iLCBidWYpOworIAorIAkgIGZkID0gb3Blbl92ZXJpZnkgKGJ1ZiwgZmJwLCBsb2FkZXIsIHdoYXRjb2RlLCBtb2RlLAorQEAgLTE5NTUsNyArMTk1NSw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgfQorIAorICAgLyogRGlzcGxheSBpbmZvcm1hdGlvbiBpZiB3ZSBhcmUgZGVidWdnaW5nLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpCisgICAgICAgJiYgbG9hZGVyICE9IE5VTEwpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKChtb2RlICYgX19SVExEX0NBTExNQVApID09IDAKKyAJCSAgICAgID8gIlxuZmlsZT0lcyBbJWx1XTsgIG5lZWRlZCBieSAlcyBbJWx1XVxuIgorQEAgLTE5OTcsNyArMTk5Nyw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAKKyAgICAgICBzaXplX3QgbmFtZWxlbiA9IHN0cmxlbiAobmFtZSkgKyAxOworIAorLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiZmluZCBsaWJyYXJ5PSVzIFslbHVdOyBzZWFyY2hpbmdcbiIsIG5hbWUsIG5zaWQpOworIAorICAgICAgIGZkID0gLTE7CitAQCAtMjExOSw3ICsyMTE5LDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorICNlbmRpZgorIAorICAgICAgIC8qIEFkZCBhbm90aGVyIG5ld2xpbmUgd2hlbiB3ZSBhcmUgdHJhY2luZyB0aGUgbGlicmFyeSBsb2FkaW5nLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuIik7CisgICAgIH0KKyAgIGVsc2UKK0BAIC0yMTUyLDcgKzIxNTIsNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgICBpZiAoX19nbGliY191bmxpa2VseSAoZmQgPT0gLTEpKQorICAgICB7CisgICAgICAgaWYgKHRyYWNlX21vZGUKKy0JICAmJiBfX2dsaWJjX2xpa2VseSAoKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKSA9PSAwKSkKKysJICAmJiBfX2dsaWJjX2xpa2VseSAoKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspID09IDApKQorIAl7CisgCSAgLyogV2UgaGF2ZW4ndCBmb3VuZCBhbiBhcHByb3ByaWF0ZSBsaWJyYXJ5LiAgQnV0IHNpbmNlIHdlCisgCSAgICAgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgdGhpcyBpc24ndAorZGlmZiAtLWdpdCBhL2VsZi9kbC1sb29rdXAuYyBiL2VsZi9kbC1sb29rdXAuYworaW5kZXggMTFjYjQ0Yi4uNTg4YzNlNCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb29rdXAuYworKysrIGIvZWxmL2RsLWxvb2t1cC5jCitAQCAtMzAyLDcgKzMwMiw3IEBAIGRvX2xvb2t1cF91bmlxdWUgKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHVpbnRfZmFzdDMyX3QgbmV3X2hhc2gsCisgCSBoYXNoIHRhYmxlLiAgKi8KKyAgICAgICBpZiAoX19nbGliY191bmxpa2VseSAodGFiLT5zaXplKSkKKyAJeworLQkgIGFzc2VydCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspOworKwkgIGFzc2VydCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSyk7CisgCSAgZ290byBzdWNjZXNzOworIAl9CisgI2VuZGlmCitAQCAtMzc4LDcgKzM3OCw3IEBAIGRvX2xvb2t1cF94IChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCB1aW50X2Zhc3QzMl90IG5ld19oYXNoLAorIAljb250aW51ZTsKKyAKKyAgICAgICAvKiBQcmludCBzb21lIGRlYnVnZ2luZyBpbmZvIGlmIHdhbnRlZC4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TWU1CT0xTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU1lNQk9MUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJzeW1ib2w9JXM7ICBsb29rdXAgaW4gZmlsZT0lcyBbJWx1XVxuIiwKKyAJCQkgIHVuZGVmX25hbWUsIERTT19GSUxFTkFNRSAobWFwLT5sX25hbWUpLAorIAkJCSAgbWFwLT5sX25zKTsKK0BAIC03NTUsNyArNzU1LDcgQEAgYWRkX2RlcGVuZGVuY3kgKHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLCBzdHJ1Y3QgbGlua19tYXAgKm1hcCwgaW50IGZsYWdzKQorIAl9CisgCisgICAgICAgLyogRGlzcGxheSBpbmZvcm1hdGlvbiBpZiB3ZSBhcmUgZGVidWdnaW5nLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXAorIFxuZmlsZT0lcyBbJWx1XTsgIG5lZWRlZCBieSAlcyBbJWx1XSAocmVsb2NhdGlvbiBkZXBlbmRlbmN5KVxuXG4iLAorIAkJCSAgRFNPX0ZJTEVOQU1FIChtYXAtPmxfbmFtZSksCitAQCAtODU5LDcgKzg1OSw3IEBAIF9kbF9sb29rdXBfc3ltYm9sX3ggKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorICAgICB7CisgICAgICAgaWYgKCgqcmVmID09IE5VTEwgfHwgRUxGVyhTVF9CSU5EKSAoKCpyZWYpLT5zdF9pbmZvKSAhPSBTVEJfV0VBSykKKyAJICAmJiBza2lwX21hcCA9PSBOVUxMCistCSAgJiYgIShHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKSkKKysJICAmJiAhKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkpCisgCXsKKyAJICAvKiBXZSBjb3VsZCBmaW5kIG5vIHZhbHVlIGZvciBhIHN0cm9uZyByZWZlcmVuY2UuICAqLworIAkgIGNvbnN0IGNoYXIgKnJlZmVyZW5jZV9uYW1lID0gdW5kZWZfbWFwID8gdW5kZWZfbWFwLT5sX25hbWUgOiAiIjsKK0BAIC05MzUsNyArOTM1LDcgQEAgX2RsX2xvb2t1cF9zeW1ib2xfeCAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgICBpZiAoX19nbGliY191bmxpa2VseSAoY3VycmVudF92YWx1ZS5tLT5sX3VzZWQgPT0gMCkpCisgICAgIGN1cnJlbnRfdmFsdWUubS0+bF91c2VkID0gMTsKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrCisgCQkJJiAoRExfREVCVUdfQklORElOR1N8RExfREVCVUdfUFJFTElOSykpKQorICAgICBfZGxfZGVidWdfYmluZGluZ3MgKHVuZGVmX25hbWUsIHVuZGVmX21hcCwgcmVmLAorIAkJCSZjdXJyZW50X3ZhbHVlLCB2ZXJzaW9uLCB0eXBlX2NsYXNzLCBwcm90ZWN0ZWQpOworQEAgLTEwMDAsNyArMTAwMCw3IEBAIF9kbF9kZWJ1Z19iaW5kaW5ncyAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgeworICAgY29uc3QgY2hhciAqcmVmZXJlbmNlX25hbWUgPSB1bmRlZl9tYXAtPmxfbmFtZTsKKyAKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfQklORElOR1MpCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfQklORElOR1MpCisgICAgIHsKKyAgICAgICBfZGxfZGVidWdfcHJpbnRmICgiYmluZGluZyBmaWxlICVzIFslbHVdIHRvICVzIFslbHVdOiAlcyBzeW1ib2wgYCVzJyIsCisgCQkJRFNPX0ZJTEVOQU1FIChyZWZlcmVuY2VfbmFtZSksCitAQCAtMTAxNCw3ICsxMDE0LDcgQEAgX2RsX2RlYnVnX2JpbmRpbmdzIChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyAJX2RsX2RlYnVnX3ByaW50Zl9jICgiXG4iKTsKKyAgICAgfQorICNpZmRlZiBTSEFSRUQKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKQorICAgICB7CisgICAgICAgaW50IGNvbmZsaWN0ID0gMDsKKyAgICAgICBzdHJ1Y3Qgc3ltX3ZhbCB2YWwgPSB7IE5VTEwsIE5VTEwgfTsKK2RpZmYgLS1naXQgYS9lbGYvZGwtb2JqZWN0LmMgYi9lbGYvZGwtb2JqZWN0LmMKK2luZGV4IDFkNThiYmMuLjkzOGEyNTcgMTAwNjQ0CistLS0gYS9lbGYvZGwtb2JqZWN0LmMKKysrKyBiL2VsZi9kbC1vYmplY3QuYworQEAgLTk4LDcgKzk4LDcgQEAgX2RsX25ld19vYmplY3QgKGNoYXIgKnJlYWxuYW1lLCBjb25zdCBjaGFyICpsaWJuYW1lLCBpbnQgdHlwZSwKKyAgIG5ldy0+bF90eXBlID0gdHlwZTsKKyAgIC8qIElmIHdlIHNldCB0aGUgYml0IG5vdyBzaW5jZSB3ZSBrbm93IGl0IGlzIG5ldmVyIHVzZWQgd2UgYXZvaWQKKyAgICAgIGRpcnR5aW5nIHRoZSBjYWNoZSBsaW5lIGxhdGVyLiAgKi8KKy0gIGlmICgoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkgPT0gMCkKKysgIGlmICgoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKSA9PSAwKQorICAgICBuZXctPmxfdXNlZCA9IDE7CisgICBuZXctPmxfbG9hZGVyID0gbG9hZGVyOworICNpZiBOT19UTFNfT0ZGU0VUICE9IDAKK2RpZmYgLS1naXQgYS9lbGYvZGwtb3Blbi5jIGIvZWxmL2RsLW9wZW4uYworaW5kZXggMmRiMWMwMi4uMTI4ODYwNCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1vcGVuLmMKKysrKyBiL2VsZi9kbC1vcGVuLmMKK0BAIC0xNDcsNyArMTQ3LDcgQEAgYWRkX3RvX2dsb2JhbCAoc3RydWN0IGxpbmtfbWFwICpuZXcpCisgCSAgbnMtPl9uc19tYWluX3NlYXJjaGxpc3QtPnJfbGlzdFtuZXdfbmxpc3QrK10gPSBtYXA7CisgCisgCSAgLyogV2UgbW9kaWZ5IHRoZSBnbG9iYWwgc2NvcGUuICBSZXBvcnQgdGhpcy4gICovCistCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKwkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorIAkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuYWRkICVzIFslbHVdIHRvIGdsb2JhbCBzY29wZVxuIiwKKyAJCQkgICAgICBtYXAtPmxfbmFtZSwgbWFwLT5sX25zKTsKKyAJfQorQEAgLTI1MSw3ICsyNTEsNyBAQCBkbF9vcGVuX3dvcmtlciAodm9pZCAqYSkKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChuZXctPmxfc2VhcmNobGlzdC5yX2xpc3QgIT0gTlVMTCkpCisgICAgIHsKKyAgICAgICAvKiBMZXQgdGhlIHVzZXIga25vdyBhYm91dCB0aGUgb3BlbmNvdW50LiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgib3BlbmluZyBmaWxlPSVzIFslbHVdOyBkaXJlY3Rfb3BlbmNvdW50PSV1XG5cbiIsCisgCQkJICBuZXctPmxfbmFtZSwgbmV3LT5sX25zLCBuZXctPmxfZGlyZWN0X29wZW5jb3VudCk7CisgCitAQCAtMzAyLDcgKzMwMiw3IEBAIGRsX29wZW5fd29ya2VyICh2b2lkICphKQorICAgTElCQ19QUk9CRSAobWFwX2NvbXBsZXRlLCAzLCBhcmdzLT5uc2lkLCByLCBuZXcpOworIAorICAgLyogUHJpbnQgc2NvcGUgaW5mb3JtYXRpb24uICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgICAgIF9kbF9zaG93X3Njb3BlIChuZXcsIDApOworIAorICAgLyogT25seSBkbyBsYXp5IHJlbG9jYXRpb24gaWYgYExEX0JJTkRfTk9XJyBpcyBub3Qgc2V0LiAgKi8KK0BAIC01MTksNyArNTE5LDcgQEAgZGxfb3Blbl93b3JrZXIgKHZvaWQgKmEpCisgCX0KKyAKKyAgICAgICAvKiBQcmludCBzY29wZSBpbmZvcm1hdGlvbi4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorIAlfZGxfc2hvd19zY29wZSAoaW1hcCwgZnJvbV9zY29wZSk7CisgICAgIH0KKyAKK0BAIC01NzcsNyArNTc3LDcgQEAgVExTIGdlbmVyYXRpb24gY291bnRlciB3cmFwcGVkISAgUGxlYXNlIHJlcG9ydCB0aGlzLiIpKTsKKyAjZW5kaWYKKyAKKyAgIC8qIExldCB0aGUgdXNlciBrbm93IGFib3V0IHRoZSBvcGVuY291bnQuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgib3BlbmluZyBmaWxlPSVzIFslbHVdOyBkaXJlY3Rfb3BlbmNvdW50PSV1XG5cbiIsCisgCQkgICAgICBuZXctPmxfbmFtZSwgbmV3LT5sX25zLCBuZXctPmxfZGlyZWN0X29wZW5jb3VudCk7CisgfQorZGlmZiAtLWdpdCBhL2VsZi9kbC1yZWxvYy5jIGIvZWxmL2RsLXJlbG9jLmMKK2luZGV4IDYxMjUyZDcuLjRjODM4MTUgMTAwNjQ0CistLS0gYS9lbGYvZGwtcmVsb2MuYworKysrIGIvZWxmL2RsLXJlbG9jLmMKK0BAIC0xNzgsNyArMTc4LDcgQEAgX2RsX3JlbG9jYXRlX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsLCBzdHJ1Y3Qgcl9zY29wZV9lbGVtICpzY29wZVtdLAorICAgICAgICYmIF9fYnVpbHRpbl9leHBlY3QgKGwtPmxfaW5mb1tEVF9CSU5EX05PV10gIT0gTlVMTCwgMCkpCisgICAgIGxhenkgPSAwOworIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19SRUxPQykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUkVMT0MpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5yZWxvY2F0aW9uIHByb2Nlc3Npbmc6ICVzJXNcbiIsCisgCQkgICAgICBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSksIGxhenkgPyAiIChsYXp5KSIgOiAiIik7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLXZlcnNpb24uYyBiL2VsZi9kbC12ZXJzaW9uLmMKK2luZGV4IGY2ZTVjZDkuLjMyMDYyOGMgMTAwNjQ0CistLS0gYS9lbGYvZGwtdmVyc2lvbi5jCisrKysgYi9lbGYvZGwtdmVyc2lvbi5jCitAQCAtODIsNyArODIsNyBAQCBtYXRjaF9zeW1ib2wgKGNvbnN0IGNoYXIgKm5hbWUsIExtaWRfdCBucywgRWxmVyhXb3JkKSBoYXNoLCBjb25zdCBjaGFyICpzdHJpbmcsCisgICBpbnQgcmVzdWx0ID0gMDsKKyAKKyAgIC8qIERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB3ZSBhcmUgZG9pbmcgd2hpbGUgZGVidWdnaW5nLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVkVSU0lPTlMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1ZFUlNJT05TKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlwKKyBjaGVja2luZyBmb3IgdmVyc2lvbiBgJXMnIGluIGZpbGUgJXMgWyVsdV0gcmVxdWlyZWQgYnkgZmlsZSAlcyBbJWx1XVxuIiwKKyAJCSAgICAgIHN0cmluZywgRFNPX0ZJTEVOQU1FIChtYXAtPmxfbmFtZSksCitkaWZmIC0tZ2l0IGEvZWxmL2dldC1keW5hbWljLWluZm8uaCBiL2VsZi9nZXQtZHluYW1pYy1pbmZvLmgKK2luZGV4IGRjODM1OWQuLjc3NzRmZGEgMTAwNjQ0CistLS0gYS9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oCisrKysgYi9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oCitAQCAtMTY2LDcgKzE2Niw3IEBAIGVsZl9nZXRfZHluYW1pY19pbmZvIChzdHJ1Y3QgbGlua19tYXAgKmwsIEVsZlcoRHluKSAqdGVtcCkKKyAJIHRoZW0uIFRoZXJlZm9yZSB0byBhdm9pZCBicmVha2luZyBleGlzdGluZyBhcHBsaWNhdGlvbnMgdGhlCisgCSBiZXN0IHdlIGNhbiBkbyBpcyBhZGQgYSB3YXJuaW5nIGR1cmluZyBkZWJ1Z2dpbmcgd2l0aCB0aGUKKyAJIGludGVudCBvZiBub3RpZnlpbmcgdGhlIHVzZXIgb2YgdGhlIHByb2JsZW0uICAqLworLSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMsIDApCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTLCAwKQorIAkgICYmIGwtPmxfZmxhZ3NfMSAmIH5EVF8xX1NVUFBPUlRFRF9NQVNLKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5XQVJOSU5HOiBVbnN1cHBvcnRlZCBmbGFnIHZhbHVlKHMpIG9mIDB4JXggaW4gRFRfRkxBR1NfMS5cbiIsCisgCQkJICBsLT5sX2ZsYWdzXzEgJiB+RFRfMV9TVVBQT1JURURfTUFTSyk7CitkaWZmIC0tZ2l0IGEvZWxmL3J0bGQuYyBiL2VsZi9ydGxkLmMKK2luZGV4IGZjM2EyZGIuLjU5YzQ2MzcgMTAwNjQ0CistLS0gYS9lbGYvcnRsZC5jCisrKysgYi9lbGYvcnRsZC5jCitAQCAtMzIzLDcgKzMyMyw3IEBAIF9kbF9zdGFydF9maW5hbCAodm9pZCAqYXJnLCBzdHJ1Y3QgZGxfc3RhcnRfZmluYWxfaW5mbyAqaW5mbykKKyAgICAgfQorICNlbmRpZgorIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKyAgICAgeworICNpZm5kZWYgSFBfVElNSU5HX05PTkFWQUlMCisgICAgICAgcHJpbnRfc3RhdGlzdGljcyAoJnJ0bGRfdG90YWxfdGltZSk7CitAQCAtMTcwMSw3ICsxNzAxLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorIAkgYWZ0ZXIgcmVsb2NhdGlvbi4gICovCisgICAgICAgc3RydWN0IGxpbmtfbWFwICpsOworIAorLSAgICAgIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykKKysgICAgICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykKKyAJeworIAkgIHN0cnVjdCByX3Njb3BlX2VsZW0gKnNjb3BlID0gJm1haW5fbWFwLT5sX3NlYXJjaGxpc3Q7CisgCitAQCAtMTczMSw3ICsxNzMxLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorIAkJX2RsX3ByaW50ZiAoIlxuIik7CisgCSAgICB9CisgCX0KKy0gICAgICBlbHNlIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKQorKyAgICAgIGVsc2UgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkKKyAJeworIAkgIC8qIExvb2sgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBtYWluIGV4ZWN1dGFibGUKKyAJICAgICBhbmQgZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZW0gaXMgbm90IGFjdHVhbGx5CitAQCAtMTgzOSw3ICsxODM5LDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorIAkJICAgIH0KKyAJCX0KKyAKKy0JICAgICAgaWYgKChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykKKysJICAgICAgaWYgKChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKQorIAkJICAmJiBydGxkX211bHRpcGxlX3JlZikKKyAJCXsKKyAJCSAgLyogTWFyayB0aGUgbGluayBtYXAgYXMgbm90IHlldCByZWxvY2F0ZWQgYWdhaW4uICAqLworQEAgLTE5NzIsNyArMTk3Miw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAgICAgICBpZiAocl9saXN0ID09IHJfbGlzdGVuZCAmJiBsaWJsaXN0ID09IGxpYmxpc3RlbmQpCisgCXByZWxpbmtlZCA9IHRydWU7CisgCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbnByZWxpbmsgY2hlY2tpbmc6ICVzXG4iLAorIAkJCSAgcHJlbGlua2VkID8gIm9rIiA6ICJmYWlsZWQiKTsKKyAgICAgfQorQEAgLTE5OTAsNyArMTk5MCw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAgIEdMUk8oZGxfaW5pdF9hbGxfZGlycykgPSBHTChkbF9hbGxfZGlycyk7CisgCisgICAvKiBQcmludCBzY29wZSBpbmZvcm1hdGlvbi4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAgICAgeworICAgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbkluaXRpYWwgb2JqZWN0IHNjb3Blc1xuIik7CisgCitAQCAtMjI2NSw3ICsyMjY1LDcgQEAgcHJvY2Vzc19kbF9kZWJ1ZyAoY29uc3QgY2hhciAqZGxfZGVidWcpCisgCSAgICBpZiAoZGVib3B0c1tjbnRdLmxlbiA9PSBsZW4KKyAJCSYmIG1lbWNtcCAoZGxfZGVidWcsIGRlYm9wdHNbY250XS5uYW1lLCBsZW4pID09IDApCisgCSAgICAgIHsKKy0JCUdMUk8oZGxfZGVidWdfbWFzaykgfD0gZGVib3B0c1tjbnRdLm1hc2s7CisrCQlHTFJPX2RsX2RlYnVnX21hc2sgfD0gZGVib3B0c1tjbnRdLm1hc2s7CisgCQlhbnlfZGVidWcgPSAxOworIAkJYnJlYWs7CisgCSAgICAgIH0KK0BAIC0yMjg2LDcgKzIyODYsNyBAQCB3YXJuaW5nOiBkZWJ1ZyBvcHRpb24gYCVzJyB1bmtub3duOyB0cnkgTERfREVCVUc9aGVscFxuIiwgY29weSk7CisgICAgICAgKytkbF9kZWJ1ZzsKKyAgICAgfQorIAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKQorICAgICB7CisgICAgICAgLyogSW4gb3JkZXIgdG8gZ2V0IGFuIGFjY3VyYXRlIHBpY3R1cmUgb2Ygd2hldGhlciBhIHBhcnRpY3VsYXIKKyAJIERUX05FRURFRCBlbnRyeSBpcyBhY3R1YWxseSB1c2VkIHdlIGhhdmUgdG8gcHJvY2VzcyBib3RoCitAQCAtMjI5NCw3ICsyMjk0LDcgQEAgd2FybmluZzogZGVidWcgb3B0aW9uIGAlcycgdW5rbm93bjsgdHJ5IExEX0RFQlVHPWhlbHBcbiIsIGNvcHkpOworICAgICAgIEdMUk8oZGxfbGF6eSkgPSAwOworICAgICB9CisgCistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0hFTFApCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSEVMUCkKKyAgICAgeworICAgICAgIHNpemVfdCBjbnQ7CisgCitAQCAtMjQ5OSw3ICsyNDk5LDcgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgICAgICBtb2RlID0gdHJhY2U7CisgCSAgICAgIEdMUk8oZGxfdmVyYm9zZSkgPSAxOworICNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworLQkgICAgICBHTFJPKGRsX2RlYnVnX21hc2spIHw9IERMX0RFQlVHX1BSRUxJTks7CisrCSAgICAgIEdMUk9fZGxfZGVidWdfbWFzayB8PSBETF9ERUJVR19QUkVMSU5LOworICNlbmRpZgorIAkgICAgICBHTFJPKGRsX3RyYWNlX3ByZWxpbmspID0gJmVudmxpbmVbMTddOworIAkgICAgfQorQEAgLTI1NDgsNyArMjU0OCw3IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJeworIAkgIHVuc2V0ZW52ICgiTUFMTE9DX0NIRUNLXyIpOworICNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworLQkgIEdMUk8oZGxfZGVidWdfbWFzaykgPSAwOworKwkgIEdMUk9fZGxfZGVidWdfbWFzayA9IDA7CisgI2VuZGlmCisgCX0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDYxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2gKQEAgLTAsMCArMSwxNDUgQEAKK0Zyb20gZTk4Nzc5YWE1NmZhZTAzNDZkZmYyZDBiNzJhY2FkZDBlYWYwMTg5MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI3IE1heSAyMDE1IDE2OjEwOjUwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMjcvMjddIGVnbGliYy11c2Utb3B0aW9uLWdyb3VwczogQ29uZGl0aW9uYWxseSBleGNsdWRlIGMrKworIHRlc3RzCisKKyAgICBTb21lIHRlc3QgcHJvZ3JhbXMgd3JpdHRlbiBpbiBjKysgYXJlIHN0aWxsIGluY2x1ZGVkIGluIHNwaXRlIG9mCisgICAgImxpYmMtY3h4LXRlc3RzIiBiZWluZyBvbWl0dGVkIGZyb20gRElTVFJPX0ZFQVRVUkVTX0xJQkMuCisgICAgQWxsIC5jYyBwcm9ncmFtcyBhcmUgY29tcGlsZWQgd2l0aCBnKysuCisgICAgZysrIGF1dG9tYXRpY2FsbHkgc3BlY2lmaWVzIGxpbmtpbmcgYWdhaW5zdCB0aGUgQysrIGxpYnJhcnkuCisgICAgVGhpcyBwYXRjaCBjb25kaXRpb25hbGx5IGV4Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXMgd2VsbDoKKworICAgICAgYnVnLWF0ZXhpdDMtbGliLmNjCisgICAgICB0c3QtY2FuY2VsMjQuY2MKKyAgICAgIHRzdC1jYW5jZWwyNC1zdGF0aWMuY2MKKyAgICAgIHRzdC11bmlxdWUzbGliLmNjCisgICAgICB0c3QtdW5pcXVlM2xpYjIuY2MKKyAgICAgIHRzdC11bmlxdWU0bGliLmNjCisgICAgICB0c3QtdW5pcXVlMy5jYworICAgICAgdHN0LXVuaXF1ZTQuY2MKKworICAgIFRlc3RlZCB3aXRoIERJU1RST19GRUFUVVJFU19MSUJDX3JlbW92ZSA9ICIgbGliYy1jeHgtdGVzdHMiCisKKyAgICBbWU9DVE8gIzcwMDNdCisKK1NpZ25lZC1vZmYtYnk6IEp1cm8gQnlzdHJpY2t5IDxqdXJvLmJ5c3RyaWNreUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZGxmY24vTWFrZWZpbGUgfCAgOCArKysrKystLQorIGVsZi9NYWtlZmlsZSAgIHwgMTkgKysrKysrKysrKysrKystLS0tLQorIG5wdGwvTWFrZWZpbGUgIHwgMTIgKysrKysrKysrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGxmY24vTWFrZWZpbGUgYi9kbGZjbi9NYWtlZmlsZQoraW5kZXggMzgyNzYwNy4uOTIwYmQ1OCAxMDA2NDQKKy0tLSBhL2RsZmNuL01ha2VmaWxlCisrKysgYi9kbGZjbi9NYWtlZmlsZQorQEAgLTM5LDE2ICszOSwyMCBAQCBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3RzID0gZ2xyZWZtYWluIGZhaWx0ZXN0IHRzdC1kbGFkZHIgZGVmYXVsdCBlcnJtc2cxIHRzdGN4YWF0ZXhpdCBcCisgCWJ1Zy1kbG9wZW4xIGJ1Zy1kbHN5bTEgdHN0LWRsaW5mbyBidWctYXRleGl0MSBidWctYXRleGl0MiBcCisgCXRzdGF0ZXhpdCBidWctZGwtbGVhZiB0c3QtcmVjLWRsb3BlbgorLWVuZGlmCistCisgdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gYnVnLWF0ZXhpdDMKKyAKKytlbmRpZgorKworIG1vZHVsZXMtbmFtZXMgPSBnbHJlZmxpYjEgZ2xyZWZsaWIyIGdscmVmbGliMyBmYWlsdGVzdG1vZCBkZWZhdWx0bW9kMSBcCisgCQlkZWZhdWx0bW9kMiBlcnJtc2cxbW9kIG1vZGF0ZXhpdCBtb2RjeGFhdGV4aXQgXAorIAkJYnVnLWRsc3ltMS1saWIxIGJ1Zy1kbHN5bTEtbGliMiBidWctYXRleGl0MS1saWIgXAorIAkJYnVnLWF0ZXhpdDItbGliIGJ1Zy1kbC1sZWFmLWxpYiBcCisgCQlidWctZGwtbGVhZi1saWItY2IgbW9kZHVtbXkxIG1vZGR1bW15MgorIAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrbW9kdWxlcy1uYW1lcyArPSBidWctYXRleGl0My1saWIKKytlbmRpZgorKworIGZhaWx0ZXN0bW9kLnNvLW5vLXotZGVmcyA9IHllcworIGdscmVmbGliMi5zby1uby16LWRlZnMgPSB5ZXMKKyBlcnJtc2cxbW9kLnNvLW5vLXotZGVmcyA9IHllcworZGlmZiAtLWdpdCBhL2VsZi9NYWtlZmlsZSBiL2VsZi9NYWtlZmlsZQoraW5kZXggNzFhMThhMS4uMjZmZTNjNSAxMDA2NDQKKy0tLSBhL2VsZi9NYWtlZmlsZQorKysrIGIvZWxmL01ha2VmaWxlCitAQCAtMTcsNiArMTcsOCBAQAorIAorICMgTWFrZWZpbGUgZm9yIGVsZiBzdWJkaXJlY3Rvcnkgb2YgR05VIEMgTGlicmFyeS4KKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCQk6PSBlbGYKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0xNDUsMTIgKzE0NywxNSBAQCB0ZXN0cyArPSBsb2FkdGVzdCByZXN0ZXN0MSBwcmVsb2FkdGVzdCBsb2FkZmFpbCBtdWx0aWxvYWQgb3JpZ3Rlc3QgcmVzb2x2ZmFpbCBcCisgCSB1bmxvYWQzIHVubG9hZDQgdW5sb2FkNSB1bmxvYWQ2IHVubG9hZDcgdW5sb2FkOCB0c3QtZ2xvYmFsMSBvcmRlcjIgXAorIAkgdHN0LWF1ZGl0MSB0c3QtYXVkaXQyIHRzdC1hdWRpdDggdHN0LWF1ZGl0OSBcCisgCSB0c3Qtc3RhY2tndWFyZDEgdHN0LWFkZHIxIHRzdC10aHJsb2NrIFwKKy0JIHRzdC11bmlxdWUxIHRzdC11bmlxdWUyICQoaWYgJChDWFgpLHRzdC11bmlxdWUzIHRzdC11bmlxdWU0IFwKKy0JIHRzdC1ub2RlbGV0ZSkgXAorKwkgdHN0LXVuaXF1ZTEgdHN0LXVuaXF1ZTIgXAorIAkgdHN0LWluaXRvcmRlciB0c3QtaW5pdG9yZGVyMiB0c3QtcmVsc29ydDEgdHN0LW51bGwtYXJndiBcCisgCSB0c3QtcHRyZ3VhcmQxIHRzdC10bHNhbGlnbiB0c3QtdGxzYWxpZ24tZXh0ZXJuIHRzdC1ub2RlbGV0ZS1vcGVuZWQgXAorIAkgdHN0LW5vZGVsZXRlMgorICMJIHJlbGRlcDkKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK3Rlc3RzICs9ICQoaWYgJChDWFgpLHRzdC11bmlxdWUzIHRzdC11bmlxdWU0IHRzdC1ub2RlbGV0ZSkKKytlbmRpZgorKworIGlmZXEgKCQoYnVpbGQtaGFyZGNvZGVkLXBhdGgtaW4tdGVzdHMpLHllcykKKyB0ZXN0cyArPSB0c3QtZGxvcGVuLWFvdXQKKyBMREZMQUdTLXRzdC1kbG9wZW4tYW91dCA9ICQobm8tcGllLWxkZmxhZykKK0BAIC0yMDksOSArMjE0LDYgQEAgbW9kdWxlcy1uYW1lcyA9IHRlc3RvYmoxIHRlc3RvYmoyIHRlc3RvYmozIHRlc3RvYmo0IHRlc3RvYmo1IHRlc3RvYmo2IFwKKyAJCXRzdC11bmlxdWUxbW9kMSB0c3QtdW5pcXVlMW1vZDIgXAorIAkJdHN0LXVuaXF1ZTJtb2QxIHRzdC11bmlxdWUybW9kMiBcCisgCQl0c3QtYXVkaXRtb2Q5YSB0c3QtYXVkaXRtb2Q5YiBcCistCQkkKGlmICQoQ1hYKSx0c3QtdW5pcXVlM2xpYiB0c3QtdW5pcXVlM2xpYjIgdHN0LXVuaXF1ZTRsaWIgXAorLQkJICB0c3Qtbm9kZWxldGUtdW5pcXVlbW9kIHRzdC1ub2RlbGV0ZS1ydGxkbW9kIFwKKy0JCSAgdHN0LW5vZGVsZXRlLXptb2QpIFwKKyAJCXRzdC1pbml0b3JkZXJhMSB0c3QtaW5pdG9yZGVyYjEgXAorIAkJdHN0LWluaXRvcmRlcmEyIHRzdC1pbml0b3JkZXJiMiBcCisgCQl0c3QtaW5pdG9yZGVyYTMgdHN0LWluaXRvcmRlcmE0IFwKK0BAIC0yMjAsNiArMjIyLDEzIEBAIG1vZHVsZXMtbmFtZXMgPSB0ZXN0b2JqMSB0ZXN0b2JqMiB0ZXN0b2JqMyB0ZXN0b2JqNCB0ZXN0b2JqNSB0ZXN0b2JqNiBcCisgCQl0c3QtcmVsc29ydDFtb2QxIHRzdC1yZWxzb3J0MW1vZDIgdHN0LWFycmF5MmRlcCBcCisgCQl0c3QtYXJyYXk1ZGVwIHRzdC1udWxsLWFyZ3YtbGliIFwKKyAJCXRzdC10bHNhbGlnbi1saWIgdHN0LW5vZGVsZXRlLW9wZW5lZC1saWIgdHN0LW5vZGVsZXRlMm1vZAorKworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrbW9kdWxlcy1uYW1lcyArPSAkKGlmICQoQ1hYKSx0c3QtdW5pcXVlM2xpYiB0c3QtdW5pcXVlM2xpYjIgdHN0LXVuaXF1ZTRsaWIgXAorKwkJICB0c3Qtbm9kZWxldGUtdW5pcXVlbW9kIHRzdC1ub2RlbGV0ZS1ydGxkbW9kIFwKKysJCSAgdHN0LW5vZGVsZXRlLXptb2QpCisrZW5kaWYKKysKKyBpZmVxICh5ZXMsJChoYXZlLXByb3RlY3RlZC1kYXRhKSkKKyBtb2R1bGVzLW5hbWVzICs9IHRzdC1wcm90ZWN0ZWQxbW9kYSB0c3QtcHJvdGVjdGVkMW1vZGIKKyB0ZXN0cyArPSB0c3QtcHJvdGVjdGVkMWEgdHN0LXByb3RlY3RlZDFiCitkaWZmIC0tZ2l0IGEvbnB0bC9NYWtlZmlsZSBiL25wdGwvTWFrZWZpbGUKK2luZGV4IDU5NmNhM2MuLjUwYTcwOGIgMTAwNjQ0CistLS0gYS9ucHRsL01ha2VmaWxlCisrKysgYi9ucHRsL01ha2VmaWxlCitAQCAtMzkwLDEyICszOTAsMjAgQEAgbGluay1saWJjLXN0YXRpYyA6PSAkKGNvbW1vbi1vYmpwZngpbGliYy5hICQoc3RhdGljLWdudWxpYikgXAorIAkJICAgICQoY29tbW9uLW9ianBmeClsaWJjLmEKKyAKKyB0ZXN0cy1zdGF0aWMgKz0gdHN0LWxvY2FsZTEgdHN0LWxvY2FsZTIgdHN0LXN0YWNrZ3VhcmQxLXN0YXRpYyBcCistCQl0c3QtY2FuY2VsMjEtc3RhdGljIHRzdC1jYW5jZWwyNC1zdGF0aWMgdHN0LWNvbmQ4LXN0YXRpYyBcCisrCQl0c3QtY2FuY2VsMjEtc3RhdGljIHRzdC1jb25kOC1zdGF0aWMgXAorIAkJdHN0LW11dGV4OC1zdGF0aWMgdHN0LW11dGV4cGk4LXN0YXRpYyB0c3Qtc2VtMTEtc3RhdGljIFwKKyAJCXRzdC1zZW0xMi1zdGF0aWMKKy10ZXN0cyArPSB0c3Qtc3RhY2tndWFyZDEtc3RhdGljIHRzdC1jYW5jZWwyMS1zdGF0aWMgdHN0LWNhbmNlbDI0LXN0YXRpYyBcCisrCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyt0ZXN0cy1zdGF0aWMgKz0gdHN0LWNhbmNlbDI0LXN0YXRpYworK2VuZGlmCisrCisrdGVzdHMgKz0gdHN0LXN0YWNrZ3VhcmQxLXN0YXRpYyB0c3QtY2FuY2VsMjEtc3RhdGljIFwKKyAJIHRzdC1jb25kOC1zdGF0aWMgdHN0LW11dGV4OC1zdGF0aWMgdHN0LW11dGV4cGk4LXN0YXRpYyBcCisgCSB0c3Qtc2VtMTEtc3RhdGljIHRzdC1zZW0xMi1zdGF0aWMKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSB0c3QtY2FuY2VsMjQtc3RhdGljCisrCisgeHRlc3RzLXN0YXRpYyArPSB0c3Qtc2V0dWlkMS1zdGF0aWMKKyAKKyAjIFRoZXNlIHRlc3RzIGFyZSBsaW5rZWQgd2l0aCBsaWJjIGJlZm9yZSBsaWJwdGhyZWFkCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2V0Yy9sZC5zby5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZXRjL2xkLnNvLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2V0Yy9sZC5zby5jb25mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMjhjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2dlbmVyYXRlLXN1cHBvcnRlZC5tawpAQCAtMCwwICsxLDExIEBACisjIS91c3IvYmluL21ha2UKKworaW5jbHVkZSAkKElOKQorCithbGw6CisJcm0gLWYgJChPVVQpCisJdG91Y2ggJChPVVQpCisJZm9yIGxvY2FsZSBpbiAkKFNVUFBPUlRFRC1MT0NBTEVTKTsgZG8gXAorCQlbICQkbG9jYWxlID0gdHJ1ZSBdICYmIGNvbnRpbnVlOyBcCisJCWVjaG8gJCRsb2NhbGUgfCBzZWQgJ3MsLywgLCcgPj4gJChPVVQpOyBcCisJZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlMWZhZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjIuYmIKQEAgLTAsMCArMSwxMzUgQEAKK3JlcXVpcmUgZ2xpYmMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VTO21kNT1lOWE1NThlMjQzYjM2ZDMyMDlmMzgwZGViMzk0YjIxMyBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgKz0gImdwZXJmLW5hdGl2ZSBrY29uZmlnLWZyb250ZW5kcy1uYXRpdmUiCisKK1NSQ1JFViA/PSAiYTM0ZDFjNmFmYzg2NTIxZDZhZDE3NjYyYTNiNTM2MmQ4NDgxNTE0YyIKKworQlJBTkNIID89ICJyZWxlYXNlLyR7UFZ9L21hc3RlciIKKworR0xJQkNfR0lUX1VSSSA/PSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2dsaWJjLmdpdCIKKworU1JDX1VSSSA9ICIke0dMSUJDX0dJVF9VUkl9O2JyYW5jaD0ke0JSQU5DSH07bmFtZT1nbGliYyBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoIFwKKyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICBmaWxlOi8vZXRjL2xkLnNvLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vZ2VuZXJhdGUtc3VwcG9ydGVkLm1rIFwKKyIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKK0IgPSAiJHtXT1JLRElSfS9idWlsZC0ke1RBUkdFVF9TWVN9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIiIKKworIyB0aGUgLWlzeXN0ZW0gaW4gYml0YmFrZS5jb25mIHNjcmV3cyB1cCBnbGliYyBkb19zdGFnZQorQlVJTERfQ1BQRkxBR1MgPSAiLUkke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCitUQVJHRVRfQ1BQRkxBR1MgPSAiLUkke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9IgorCitHTElCQ19CUk9LRU5fTE9DQUxFUyA9ICIgX0VSIF9FVCBzb19FVCB5bl9FUiBzaWRfRVQgdHJfVFIgbW5fTU4gZ2V6X0VUIGdlel9FUiBibl9CRCB0ZV9JTiBlc19DUi5JU08tODg1OS0xIgorCisjCisjIFdlIHdpbGwgc2tpcCBwYXJzaW5nIGdsaWJjIHdoZW4gdGFyZ2V0IHN5c3RlbSBDIGxpYnJhcnkgc2VsZWN0aW9uIGlzIG5vdCBnbGliYworIyB0aGlzIGhlbHBzIGluIGVhc2luZyBvdXQgcGFyc2luZyBmb3Igbm9uLWdsaWJjIHN5c3RlbSBsaWJyYXJpZXMKKyMKK0NPTVBBVElCTEVfSE9TVF9saWJjLW11c2xfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCitDT01QQVRJQkxFX0hPU1RfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1rZXJuZWw9JHtPTERFU1RfS0VSTkVMfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWN2cyAtLWRpc2FibGUtcHJvZmlsZSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlYnVnIC0td2l0aG91dC1nZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2xvY2FsZT1nbnUgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWFkZC1vbnMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1oZWFkZXJzPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc2VsaW51eCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtb2Jzb2xldGUtcnBjIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgta2NvbmZpZz0ke1NUQUdJTkdfQklORElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICR7R0xJQkNfRVhUUkFfT0VDT05GfSIKKworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfbGliY19mcHVfc2V0dGluZyhiYiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaW5ldC1hbmwnLCAnLS1lbmFibGUtbnNjZCcsICctLWRpc2FibGUtbnNjZCcsIGQpfSIKKworCitkb19wYXRjaF9hcHBlbmQoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19maXhfcmVhZGxpYl9jJywgZCkKK30KKworZG9fZml4X3JlYWRsaWJfYyAoKSB7CisJc2VkIC1pIC1lICdzI09FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyMke0VHTElCQ19LTk9XTl9JTlRFUlBSRVRFUl9OQU1FU30jJyAke1N9L2VsZi9yZWFkbGliLmMKK30KKworZG9fY29uZmlndXJlICgpIHsKKyMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGUgYXV0b2NvbmYvYXV0b21ha2UvYWNsb2NhbC9hdXRvaGVhZGVyCisjIGNhbGxzIGZvciBub3cKKyMgZG9uJ3QgcGFzcyBDUFBGTEFHUyBpbnRvIGNvbmZpZ3VyZSwgc2luY2UgaXQgdXBzZXRzIHRoZSBrZXJuZWwtaGVhZGVycworIyB2ZXJzaW9uIGNoZWNrIGFuZCBkb2Vzbid0IHJlYWxseSBoZWxwIHdpdGggYW55dGhpbmcKKyAgICAgICAgKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKyAgICAgICAgZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKKyAgICAgICAgQ1BQRkxBR1M9IiIgb2VfcnVuY29uZgorfQorCitycGNzdmMgPSAiYm9vdHBhcmFtX3Byb3QueCBubG1fcHJvdC54IHJzdGF0LnggXAorCSAgeXBwYXNzd2QueCBrbG1fcHJvdC54IHJleC54IHNtX2ludGVyLnggbW91bnQueCBcCisJICBydXNlcnMueCBzcHJheS54IG5mc19wcm90LnggcnF1b3RhLngga2V5X3Byb3QueCIKKworZG9fY29tcGlsZSAoKSB7CisJIyAtV2wsLXJwYXRoLWxpbmsgPHN0YWdpbmc+L2xpYiBpbiBMREZMQUdTIGNhbiBjYXVzZSBicmVha2FnZSBpZiBhbm90aGVyIGdsaWJjIGlzIGluIHN0YWdpbmcKKwl1bnNldCBMREZMQUdTCisJYmFzZV9kb19jb21waWxlCisJKAorCQljZCAke1N9L3N1bnJwYy9ycGNzdmMKKwkJZm9yIHIgaW4gJHtycGNzdmN9OyBkbworCQkJaD1gZWNobyAkcnxzZWQgLWUncyxcLngkLC5oLCdgCisJCQlybSAtZiAkaAorCQkJJHtCfS9zdW5ycGMvY3Jvc3MtcnBjZ2VuIC1oICRyIC1vICRoIHx8IGJid2FybiAiJHtQTn06IHVuYWJsZSB0byBnZW5lcmF0ZSBoZWFkZXIgZm9yICRyIgorCQlkb25lCisJKQorCWVjaG8gIkFkanVzdCBsZGQgc2NyaXB0IgorCWlmIFsgLW4gIiR7UlRMRExJU1R9IiBdCisJdGhlbgorCQlwcmV2cnRsZD1gY2F0ICR7Qn0vZWxmL2xkZCB8IGdyZXAgIl5SVExETElTVD0iIHwgc2VkICdzI15SVExETElTVD0iXD9cKFteIl0qXCkiXD8kI1wxIydgCisJCWlmIFsgIiR7cHJldnJ0bGR9IiAhPSAiJHtSVExETElTVH0iIF0KKwkJdGhlbgorCQkJc2VkIC1pICR7Qn0vZWxmL2xkZCAtZSAicyNeUlRMRExJU1Q9LipcJCNSVExETElTVD1cIiR7cHJldnJ0bGR9ICR7UlRMRExJU1R9XCIjIgorCQlmaQorCWZpCisKK30KKworcmVxdWlyZSBnbGliYy1wYWNrYWdlLmluYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvMzJhbmQ2NGJpdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvMzJhbmQ2NGJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGZlYWVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS8zMmFuZDY0Yml0LnBhdGNoCkBAIC0wLDAgKzEsMzMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitXZSBydW4gdGhlIGxkY29uZmlnIGluIHRoZSBjcm9zcyBmYXNoaW9uLiBtYWtlIHRoZSBjb2RlIGJpdHNpemUgYXdhcmUgc28gdGhhdCAKK3dlIGNhbiBjcm9zcyBidWlsZCBsZGNvbmZpZyBjYWNoZSBmb3IgdmFyaW91cyBhcmNoaXRlY3R1cmVzLgorCitSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4gMjAwOS8wNS8xOQorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAwOS8wMy8yOQorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKK0BAIC00MCwzOSArNDAsMjEyIEBAIGRvCQkJCQkJCQlcCisgCisgLyogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgb2ssICE9IDAgaW4gY2FzZSBvZiBlcnJvci4gICovCisgaW50CistcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKytwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgCQkgIHVuc2lnbmVkIGludCAqb3N2ZXJzaW9uLCBjaGFyICoqc29uYW1lLCB2b2lkICpmaWxlX2NvbnRlbnRzLAorIAkJICBzaXplX3QgZmlsZV9sZW5ndGgpCisgeworICAgaW50IGk7CisgICB1bnNpZ25lZCBpbnQgajsKKy0gIEVsZlcoQWRkcikgbG9hZGFkZHI7CisrICBFbGYzMl9BZGRyIGxvYWRhZGRyOworICAgdW5zaWduZWQgaW50IGR5bmFtaWNfYWRkcjsKKyAgIHNpemVfdCBkeW5hbWljX3NpemU7CisgICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworIAorLSAgRWxmVyhFaGRyKSAqZWxmX2hlYWRlcjsKKy0gIEVsZlcoUGhkcikgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKy0gIEVsZlcoRHluKSAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworKyAgRWxmMzJfRWhkciAqZWxmX2hlYWRlcjsKKysgIEVsZjMyX1BoZHIgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKysgIEVsZjMyX0R5biAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworICAgY2hhciAqZHluYW1pY19zdHJpbmdzOworIAorLSAgZWxmX2hlYWRlciA9IChFbGZXKEVoZHIpICopIGZpbGVfY29udGVudHM7CisrICBlbGZfaGVhZGVyID0gKEVsZjMyX0VoZHIgKikgZmlsZV9jb250ZW50czsKKyAgICpvc3ZlcnNpb24gPSAwOworIAorLSAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSAhPSBFbGZXIChDTEFTUykpCisrICBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKyAgICAgeworLSAgICAgIGlmIChvcHRfdmVyYm9zZSkKKysgICAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgbm90IGEgc2hhcmVkIG9iamVjdCBmaWxlIChUeXBlOiAlZCkuXG4iKSwgZmlsZV9uYW1lLAorKwkgICAgIGVsZl9oZWFkZXItPmVfdHlwZSk7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCisrICBlbGZfcGhlYWRlciA9IChFbGYzMl9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKysKKysgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCisrICAgICBsaWJjNS9saWJjNi4gICovCisrICAqZmxhZyA9IEZMQUdfRUxGOworKworKyAgbG9hZGFkZHIgPSAtMTsKKysgIGR5bmFtaWNfYWRkciA9IDA7CisrICBkeW5hbWljX3NpemUgPSAwOworKyAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IE5VTEw7CisrICBmb3IgKGkgPSAwLCBzZWdtZW50ID0gZWxmX3BoZWFkZXI7CisrICAgICAgIGkgPCBlbGZfaGVhZGVyLT5lX3BobnVtOyBpKyssIHNlZ21lbnQrKykKKysgICAgeworKyAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisrCisrICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisgCXsKKy0JICBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCistCSAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgYSAzMiBiaXQgRUxGIGZpbGUuXG4iKSwgZmlsZV9uYW1lKTsKKy0JICBlbHNlIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NCkKKy0JICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBhIDY0IGJpdCBFTEYgZmlsZS5cbiIpLCBmaWxlX25hbWUpOworLQkgIGVsc2UKKy0JICAgIGVycm9yICgwLCAwLCBfKCJVbmtub3duIEVMRkNMQVNTIGluIGZpbGUgJXMuXG4iKSwgZmlsZV9uYW1lKTsKKysJY2FzZSBQVF9MT0FEOgorKwkgIGlmIChsb2FkYWRkciA9PSAoRWxmMzJfQWRkcikgLTEpCisrCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICBicmVhazsKKysKKysJY2FzZSBQVF9EWU5BTUlDOgorKwkgIGlmIChkeW5hbWljX2FkZHIpCisrCSAgICBlcnJvciAoMCwgMCwgXygibW9yZSB0aGFuIG9uZSBkeW5hbWljIHNlZ21lbnRcbiIpKTsKKysKKysJICBkeW5hbWljX2FkZHIgPSBzZWdtZW50LT5wX29mZnNldDsKKysJICBkeW5hbWljX3NpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJICBicmVhazsKKysKKysJY2FzZSBQVF9JTlRFUlA6CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgc2VnbWVudC0+cF9vZmZzZXQpOworKwkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisrCisrCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCisrCSAgZm9yIChqID0gMDsgaiA8IHNpemVvZiAoaW50ZXJwcmV0ZXJzKSAvIHNpemVvZiAoaW50ZXJwcmV0ZXJzIFswXSk7CisrCSAgICAgICArK2opCisrCSAgICBpZiAoc3RyY21wIChwcm9ncmFtX2ludGVycHJldGVyLCBpbnRlcnByZXRlcnNbal0uc29uYW1lKSA9PSAwKQorKwkgICAgICB7CisrCQkqZmxhZyA9IGludGVycHJldGVyc1tqXS5mbGFnOworKwkJYnJlYWs7CisrCSAgICAgIH0KKysJICBicmVhazsKKysKKysJY2FzZSBQVF9OT1RFOgorKwkgIGlmICghKm9zdmVyc2lvbiAmJiBzZWdtZW50LT5wX2ZpbGVzeiA+PSAzMiAmJiBzZWdtZW50LT5wX2FsaWduID49IDQpCisrCSAgICB7CisrCSAgICAgIEVsZjMyX1dvcmQgKmFiaV9ub3RlID0gKEVsZjMyX1dvcmQgKikgKGZpbGVfY29udGVudHMKKysJCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworKwkgICAgICBFbGYzMl9BZGRyIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysKKysJICAgICAgd2hpbGUgKGFiaV9ub3RlIFswXSAhPSA0IHx8IGFiaV9ub3RlIFsxXSAhPSAxNgorKwkJICAgICB8fCBhYmlfbm90ZSBbMl0gIT0gMQorKwkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisrCQl7CisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpKSAtIDEpICYgLXNpemVvZiAoRWxmMzJfV29yZCkpKQorKwkJICBFbGYzMl9BZGRyKSBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKysJCQkJCSArIFJPVU5EIChhYmlfbm90ZVswXSkKKysJCQkJCSArIFJPVU5EIChhYmlfbm90ZVsxXSk7CisrCisrCQkgIGlmIChzaXplIC0gMzIgPCBub3RlX3NpemUgfHwgbm90ZV9zaXplID09IDApCisrCQkgICAgeworKwkJICAgICAgc2l6ZSA9IDA7CisrCQkgICAgICBicmVhazsKKysJCSAgICB9CisrCQkgIHNpemUgLT0gbm90ZV9zaXplOworKwkJICBhYmlfbm90ZSA9ICh2b2lkICopIGFiaV9ub3RlICsgbm90ZV9zaXplOworKwkJfQorKworKwkgICAgICBpZiAoc2l6ZSA9PSAwKQorKwkJYnJlYWs7CisrCisrCSAgICAgICpvc3ZlcnNpb24gPSAoYWJpX25vdGUgWzRdIDw8IDI0KSB8CisrCQkJICAgKChhYmlfbm90ZSBbNV0gJiAweGZmKSA8PCAxNikgfAorKwkJCSAgICgoYWJpX25vdGUgWzZdICYgMHhmZikgPDwgOCkgfAorKwkJCSAgIChhYmlfbm90ZSBbN10gJiAweGZmKTsKKysJICAgIH0KKysJICBicmVhazsKKysKKysJZGVmYXVsdDoKKysJICBicmVhazsKKysJfQorKworKyAgICB9CisrICBpZiAobG9hZGFkZHIgPT0gKEVsZjMyX0FkZHIpIC0xKQorKyAgICB7CisrICAgICAgLyogVmVyeSBzdHJhbmdlLiAqLworKyAgICAgIGxvYWRhZGRyID0gMDsKKysgICAgfQorKworKyAgLyogTm93IHdlIGNhbiByZWFkIHRoZSBkeW5hbWljIHNlY3Rpb25zLiAgKi8KKysgIGlmIChkeW5hbWljX3NpemUgPT0gMCkKKysgICAgcmV0dXJuIDE7CisrCisrICBkeW5hbWljX3NlZ21lbnQgPSAoRWxmMzJfRHluICopIChmaWxlX2NvbnRlbnRzICsgZHluYW1pY19hZGRyKTsKKysgIGNoZWNrX3B0ciAoZHluYW1pY19zZWdtZW50KTsKKysKKysgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCisrICBkeW5hbWljX3N0cmluZ3MgPSBOVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgICAgICAgKytkeW5fZW50cnkpCisrICAgIHsKKysgICAgICBjaGVja19wdHIgKGR5bl9lbnRyeSk7CisrICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU1RSVEFCKQorKwl7CisrCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBkeW5fZW50cnktPmRfdW4uZF92YWwgLSBsb2FkYWRkcik7CisrCSAgY2hlY2tfcHRyIChkeW5hbWljX3N0cmluZ3MpOworKwkgIGJyZWFrOworIAl9CistICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKysgIGlmIChkeW5hbWljX3N0cmluZ3MgPT0gTlVMTCkKKysgICAgcmV0dXJuIDE7CisrCisrICAvKiBOb3cgcmVhZCB0aGUgRFRfTkVFREVEIGFuZCBEVF9TT05BTUUgZW50cmllcy4gICovCisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgICAgICArK2R5bl9lbnRyeSkKKysgICAgeworKyAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCB8fCBkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJeworKwkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyBkeW5fZW50cnktPmRfdW4uZF92YWw7CisrCSAgY2hlY2tfcHRyIChuYW1lKTsKKysKKysJICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQpCisrCSAgICB7CisrCisrCSAgICAgIGlmICgqZmxhZyA9PSBGTEFHX0VMRikKKysJCXsKKysJCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCisrCQkgIGZvciAoaiA9IDA7CisrCQkgICAgICAgaiA8IHNpemVvZiAoa25vd25fbGlicykgLyBzaXplb2YgKGtub3duX2xpYnMgWzBdKTsKKysJCSAgICAgICArK2opCisrCQkgICAgaWYgKHN0cmNtcCAobmFtZSwga25vd25fbGlicyBbal0uc29uYW1lKSA9PSAwKQorKwkJICAgICAgeworKwkJCSpmbGFnID0ga25vd25fbGlicyBbal0uZmxhZzsKKysJCQlicmVhazsKKysJCSAgICAgIH0KKysJCX0KKysJICAgIH0KKysKKysJICBlbHNlIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJICAgICpzb25hbWUgPSB4c3RyZHVwIChuYW1lKTsKKysKKysJICAvKiBEbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZD8gICovCisrCSAgaWYgKCpzb25hbWUgJiYgKmZsYWcgIT0gRkxBR19FTEYpCisrCSAgICByZXR1cm4gMDsKKysJfQorKyAgICB9CisrCisrICAvKiBXZSByZWFjaCB0aGlzIHBvaW50IG9ubHkgaWYgdGhlIGZpbGUgZG9lc24ndCBjb250YWluIGEgRFRfU09OQU1FCisrICAgICBvciBpZiB3ZSBjYW4ndCBjbGFzc2lmeSB0aGUgbGlicmFyeS4gIElmIGl0IGRvZXNuJ3QgaGF2ZSBhCisrICAgICBzb25hbWUsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeS4gICovCisrICBpZiAoKnNvbmFtZSA9PSBOVUxMKQorKyAgICAqc29uYW1lID0geHN0cmR1cCAobGliKTsKKysKKysgIHJldHVybiAwOworK30KKysKKytpbnQKKytwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrCQkgIHVuc2lnbmVkIGludCAqb3N2ZXJzaW9uLCBjaGFyICoqc29uYW1lLCB2b2lkICpmaWxlX2NvbnRlbnRzLAorKwkJICBzaXplX3QgZmlsZV9sZW5ndGgpCisreworKyAgaW50IGk7CisrICB1bnNpZ25lZCBpbnQgajsKKysgIEVsZjY0X0FkZHIgbG9hZGFkZHI7CisrICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworKyAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIGNoYXIgKnByb2dyYW1faW50ZXJwcmV0ZXI7CisrCisrICBFbGY2NF9FaGRyICplbGZfaGVhZGVyOworKyAgRWxmNjRfUGhkciAqZWxmX3BoZWFkZXIsICpzZWdtZW50OworKyAgRWxmNjRfRHluICpkeW5hbWljX3NlZ21lbnQsICpkeW5fZW50cnk7CisrICBjaGFyICpkeW5hbWljX3N0cmluZ3M7CisrCisrICBlbGZfaGVhZGVyID0gKEVsZjY0X0VoZHIgKikgZmlsZV9jb250ZW50czsKKysgICpvc3ZlcnNpb24gPSAwOworKworICAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisgICAgIHsKKyAgICAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgbm90IGEgc2hhcmVkIG9iamVjdCBmaWxlIChUeXBlOiAlZCkuXG4iKSwgZmlsZV9uYW1lLAorQEAgLTgxLDcgKzI1NCw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAgICAgfQorIAorICAgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZWxmIHByb2dyYW0gaGVhZGVyLiAgKi8KKy0gIGVsZl9waGVhZGVyID0gKEVsZlcoUGhkcikgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKysgIGVsZl9waGVhZGVyID0gKEVsZjY0X1BoZHIgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKyAgIGNoZWNrX3B0ciAoZWxmX3BoZWFkZXIpOworIAorICAgLyogVGhlIGxpYnJhcnkgaXMgYW4gZWxmIGxpYnJhcnksIG5vdyBzZWFyY2ggZm9yIHNvbmFtZSBhbmQKK0BAIC0xMDAsNyArMjczLDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgICAgIHN3aXRjaCAoc2VnbWVudC0+cF90eXBlKQorIAl7CisgCWNhc2UgUFRfTE9BRDoKKy0JICBpZiAobG9hZGFkZHIgPT0gKEVsZlcoQWRkcikpIC0xKQorKwkgIGlmIChsb2FkYWRkciA9PSAoRWxmNjRfQWRkcikgLTEpCisgCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKyAJICBicmVhazsKKyAKK0BAIC0xMjksMTYgKzMwMiwxNiBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgCWNhc2UgUFRfTk9URToKKyAJICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorIAkgICAgeworLQkgICAgICBFbGZXKFdvcmQpICphYmlfbm90ZSA9IChFbGZXKFdvcmQpICopIChmaWxlX2NvbnRlbnRzCisrCSAgICAgIEVsZjY0X1dvcmQgKmFiaV9ub3RlID0gKEVsZjY0X1dvcmQgKikgKGZpbGVfY29udGVudHMKKyAJCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworLQkgICAgICBFbGZXKEFkZHIpIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJICAgICAgRWxmNjRfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisgCisgCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKyAJCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKyAJCSAgICAgfHwgbWVtY21wIChhYmlfbm90ZSArIDMsICJHTlUiLCA0KSAhPSAwKQorIAkJeworLSNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGZXKFdvcmQpKSAtIDEpICYgLXNpemVvZiAoRWxmVyhXb3JkKSkpCistCQkgIEVsZlcoQWRkcikgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmVyhXb3JkKSkKKysjZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmNjRfV29yZCkgLSAxKSAmIC1zaXplb2YgKEVsZjY0X1dvcmQpKQorKwkJICBFbGY2NF9BZGRyIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjY0X1dvcmQpCisgCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCisgCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworIAorQEAgLTE2Niw3ICszMzksNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgCX0KKyAKKyAgICAgfQorLSAgaWYgKGxvYWRhZGRyID09IChFbGZXKEFkZHIpKSAtMSkKKysgIGlmIChsb2FkYWRkciA9PSAoRWxmNjRfQWRkcikgLTEpCisgICAgIHsKKyAgICAgICAvKiBWZXJ5IHN0cmFuZ2UuICovCisgICAgICAgbG9hZGFkZHIgPSAwOworQEAgLTE3Niw3ICszNDksNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICBpZiAoZHluYW1pY19zaXplID09IDApCisgICAgIHJldHVybiAxOworIAorLSAgZHluYW1pY19zZWdtZW50ID0gKEVsZlcoRHluKSAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisrICBkeW5hbWljX3NlZ21lbnQgPSAoRWxmNjRfRHluICopIChmaWxlX2NvbnRlbnRzICsgZHluYW1pY19hZGRyKTsKKyAgIGNoZWNrX3B0ciAoZHluYW1pY19zZWdtZW50KTsKKyAKKyAgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCitAQCAtMjMzLDMgKzQwNiwzMyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgCisgICByZXR1cm4gMDsKKyB9CisrLyogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgb2ssICE9IDAgaW4gY2FzZSBvZiBlcnJvci4gICovCisraW50CisrcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKysJCSAgdW5zaWduZWQgaW50ICpvc3ZlcnNpb24sIGNoYXIgKipzb25hbWUsIHZvaWQgKmZpbGVfY29udGVudHMsCisrCQkgIHNpemVfdCBmaWxlX2xlbmd0aCkKKyt7CisrICBpbnQgaTsKKysgIHVuc2lnbmVkIGludCBqOworKyAgRWxmVyhBZGRyKSBsb2FkYWRkcjsKKysgIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CisrICBzaXplX3QgZHluYW1pY19zaXplOworKyAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKysKKysgIEVsZlcoRWhkcikgKmVsZl9oZWFkZXI7CisrICBFbGZXKFBoZHIpICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CisrICBFbGZXKER5bikgKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKysgIGNoYXIgKmR5bmFtaWNfc3RyaW5nczsKKysKKysgIGVsZl9oZWFkZXIgPSAoRWxmVyhFaGRyKSAqKSBmaWxlX2NvbnRlbnRzOworKyAgKm9zdmVyc2lvbiA9IDA7CisrCisrICBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCisrICAgIHJldHVybiBwcm9jZXNzX2VsZl9maWxlMzIoZmlsZV9uYW1lLCBsaWIsZmxhZywgb3N2ZXJzaW9uLCBzb25hbWUsIGZpbGVfY29udGVudHMsIGZpbGVfbGVuZ3RoKTsKKysgIGVsc2UgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzY0KQorKyAgICByZXR1cm4gcHJvY2Vzc19lbGZfZmlsZTY0KGZpbGVfbmFtZSwgbGliLGZsYWcsIG9zdmVyc2lvbiwgc29uYW1lLCBmaWxlX2NvbnRlbnRzLCBmaWxlX2xlbmd0aCk7CisrICBlcnJvciAoMCwgMCwgXygiVW5rbm93biBFTEZDTEFTUyBpbiBmaWxlICVzLlxuIiksIGZpbGVfbmFtZSk7CisrICByZXR1cm4gMTsKKyt9CisrCisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL1JFQURNRSBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZmI5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL1JFQURNRQpAQCAtMCwwICsxLDggQEAKK1RoZSBmaWxlcyBhcmUgcHVsbGVkIHZlcmJhdGltIGZyb20gZ2xpYmMgMi41IGFuZCB0aGVuIHBhdGNoZWQgdG8gYWxsb3cKK3N0YW5kYWxvbmUgY29tcGlsYXRpb24gb2YgbGRjb25maWcuCisKK1JpY2hhcmQgUHVyZGllCitPcGVuZWRIYW5kIEx0ZC4KKworVXBncmFkZWQgdGhlIGxkY29uZmlnIHJlY2lwZSB0byBlZ2xpYmMgMi4xMi4xCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzAzLzI5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvYWRkLTY0LWJpdC1mbGFnLWZvci1FTEY2NC1lbnRyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YWYxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorRnJvbSA5ZDYyNTQ0MDkwYjA4ODQ5MjE4Y2QxZmM1MmEzNmNkZDVkOTAzNjNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyNCBBcHIgMjAxNSAwMzoyOTozMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBBZGQgNjQtYml0IGZsYWcgZm9yIEVMRjY0IGVudHJpZXMuCisKK2xkY29uZmlnLW5hdGl2ZSB3YXMgZ3JlcHBlZCBmcm9tIGFuIG9sZCB2ZXJzaW9uIG9mIGdsaWJjLCBhbmQgaXRzIG91dHB1dAorbGFja3MgbmVjY2Vzc2FyeSA2NGJpdCBmbGFnIGluIGVudHJpZXMuCitEdWUgdG8gdGhpcyBkZWZlY3QsIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIHB5dGhvbiBmdW5jdGlvbiBmYWlscyB0bworZGV0ZWN0IGFueSBsaWJyYXJ5IGR1ZSB0byB0aGUgb2xkIGZpbGUgZm9ybWF0IHRoYXQgbGRjb25maWctbmF0aXZlCitjcmVhdGVzLiBUaGlzIGZpeCBzZXRzIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgNjRiaXQgZmxhZ3MgZm9yIDY0LWJpdCBFTEYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNhY2hlLmMgICAgICB8ICA0ICsrKysKKyBsZGNvbmZpZy5oICAgfCAgNCArKysrCisgcmVhZGVsZmxpYi5jIHwgMzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY2FjaGUuYyBiL2NhY2hlLmMKK2luZGV4IGE5MDRkNDQuLmM0ZjU0MTEgMTAwNjQ0CistLS0gYS9jYWNoZS5jCisrKysgYi9jYWNoZS5jCitAQCAtMTIxLDYgKzEyMSwxMCBAQCBwcmludF9lbnRyeSAoY29uc3QgY2hhciAqbGliLCBpbnQgZmxhZywgdW5zaWduZWQgaW50IG9zdmVyc2lvbiwKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBGTEFHX01JUFM2NF9MSUJONjQ6CisgICAgICAgZnB1dHMgKCIsNjRiaXQiLCBzdGRvdXQpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEZMQUdfQUFSQ0g2NF9MSUI2NDoKKysgICAgICBmcHV0cyAoIixBQXJjaDY0Iiwgc3Rkb3V0KTsKKysgICAgICBicmVhazsKKyAgICAgY2FzZSAwOgorICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorZGlmZiAtLWdpdCBhL2xkY29uZmlnLmggYi9sZGNvbmZpZy5oCitpbmRleCBmYWRkNWVjLi42YThhNzUwIDEwMDY0NAorLS0tIGEvbGRjb25maWcuaAorKysrIGIvbGRjb25maWcuaAorQEAgLTM0LDYgKzM0LDEwIEBACisgI2RlZmluZSBGTEFHX1BPV0VSUENfTElCNjQJMHgwNTAwCisgI2RlZmluZSBGTEFHX01JUFM2NF9MSUJOMzIJMHgwNjAwCisgI2RlZmluZSBGTEFHX01JUFM2NF9MSUJONjQJMHgwNzAwCisrI2RlZmluZSBGTEFHX1g4NjY0X0xJQlgzMgkJMHgwODAwCisrI2RlZmluZSBGTEFHX0FSTV9MSUJIRgkJCTB4MDkwMAorKyNkZWZpbmUgRkxBR19BQVJDSDY0X0xJQjY0CQkweDBhMDAKKysjZGVmaW5lIEZMQUdfQVJNX0xJQlNGCQkJMHgwYjAwCisgCisgLyogTmFtZSBvZiBhdXhpbGlhcnkgY2FjaGUuICAqLworICNkZWZpbmUgX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFICIvdmFyL2NhY2hlL2xkY29uZmlnL2F1eC1jYWNoZSIKK2RpZmYgLS1naXQgYS9yZWFkZWxmbGliLmMgYi9yZWFkZWxmbGliLmMKK2luZGV4IDBiZjBkZTMuLjZlODdhZmMgMTAwNjQ0CistLS0gYS9yZWFkZWxmbGliLmMKKysrKyBiL3JlYWRlbGZsaWIuYworQEAgLTI4LDYgKzI4LDExIEBACisgCisgI2luY2x1ZGUgImVuZGlhbl9leHRyYS5oIgorIAorKy8qIFdvcmstYXJvdW5kIGZvciBvbGQgaG9zdCB0aGF0IGRvZXMgbm90IGhhdmUgQUFyY2g2NCBkZWZpbmVkIGluIGVsZi5oLiAqLworKyNpZm5kZWYgRU1fQUFSQ0g2NAorKyNkZWZpbmUgRU1fQUFSQ0g2NAkxODMJCS8qIEFSTSBBQVJDSDY0ICovCisrI2VuZGlmCisrCisgI3VuZGVmIGNoZWNrX3B0cgorICNkZWZpbmUgY2hlY2tfcHRyKHB0cikJCQkJCQlcCisgZG8JCQkJCQkJCVwKK0BAIC0yOTAsNiArMjk1LDM1IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAgICAgIGxpYmM1L2xpYmM2LiAgKi8KKyAgICpmbGFnID0gRkxBR19FTEY7CisgCisrICAvKiBTZXQgZmxhZ3MgYWNjb3JkaW5nIHRvIGluZm9ybWF0aW9uIGluIEVMRiBoZWFkZXIgdG8gYWxpZ24gd2l0aCB0YXJnZXQKKysgICAgIGxkY29uZmlnICovCisrICBzd2l0Y2ggKGVsZl9oZWFkZXItPmVfbWFjaGluZSkKKysgICAgeworKyAgICBjYXNlIEVNX0lBXzY0OgorKyAgICAgICpmbGFnIHw9IEZMQUdfSUE2NF9MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9YODZfNjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19YODY2NF9MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9TMzkwOgorKyAgICAgICpmbGFnIHw9IEZMQUdfUzM5MF9MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9QUEM2NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX1BPV0VSUENfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fTUlQUzoKKysgICAgY2FzZSBFTV9NSVBTX1JTM19MRToKKysgICAgICAqZmxhZyB8PSBGTEFHX01JUFM2NF9MSUJONjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fQUFSQ0g2NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX0FBUkNINjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgZXJyb3IoMCwgMCwgIiVzIGlzIGEgNjQtYml0IEVMRiBmb3IgdW5rbm93biBtYWNoaW5lICVseFxuIiwKKysgICAgICAgICAgICBmaWxlX25hbWUsIChsb25nKWVsZl9oZWFkZXItPmVfbWFjaGluZSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKyAgIGxvYWRhZGRyID0gLTE7CisgICBkeW5hbWljX2FkZHIgPSAwOworICAgZHluYW1pY19zaXplID0gMDsKKy0tIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ZTRkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSw0NTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0RvIGRhdGEgaW5wdXQvb3V0cHV0IGhhbmRsaW5nIGFjY29yZGluZyB0byBlbmRpZW4tbmVzcyBvZiB0aGUgbGlicmFyeSBmaWxlLiBUaGF0IAorZW5hYmxlcyB1c2Ugb2YgbGRjb25maWcgaW4gdGhlIGNyb3NzIGZhc2hpb24gZm9yIGFueSBhcmNoaXRlY3R1cmUuCisKKzIwMTEvMDQvMDQKK1JpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorTml0aW4gS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworQEAgLTM4LDYgKzM4LDI4IEBAIGRvCQkJCQkJCQlcCisgICB9CQkJCQkJCQlcCisgIHdoaWxlICgwKTsKKyAKKytpbnQgYmU7Cisrc3RhdGljIHVpbnQxNl90IHJlYWQxNih1aW50MTZfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGJlMTZ0b2goeCk7CisrICByZXR1cm4gbGUxNnRvaCh4KTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90IHJlYWQzMih1aW50MzJfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGJlMzJ0b2goeCk7CisrICByZXR1cm4gbGUzMnRvaCh4KTsKKyt9CisrCisrc3RhdGljIHVpbnQ2NF90IHJlYWQ2NCh1aW50NjRfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGJlNjR0b2goeCk7CisrICByZXR1cm4gbGU2NHRvaCh4KTsKKyt9CisrCisgLyogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgb2ssICE9IDAgaW4gY2FzZSBvZiBlcnJvci4gICovCisgaW50CisgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorQEAgLTU5LDE1ICs4MSwxNyBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBlbGZfaGVhZGVyID0gKEVsZjMyX0VoZHIgKikgZmlsZV9jb250ZW50czsKKyAgICpvc3ZlcnNpb24gPSAwOworIAorLSAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisrICBiZSA9IChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCKTsKKysKKysgIGlmIChyZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKy0JICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKwkgICAgIHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSk7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGYzMl9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGYzMl9QaGRyICopIChyZWFkMzIoZWxmX2hlYWRlci0+ZV9waG9mZiwgYmUpICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtNzksMjcgKzEwMywyNyBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBkeW5hbWljX3NpemUgPSAwOworICAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IE5VTEw7CisgICBmb3IgKGkgPSAwLCBzZWdtZW50ID0gZWxmX3BoZWFkZXI7CistICAgICAgIGkgPCBlbGZfaGVhZGVyLT5lX3BobnVtOyBpKyssIHNlZ21lbnQrKykKKysgICAgICAgaSA8IHJlYWQxNihlbGZfaGVhZGVyLT5lX3BobnVtLCBiZSk7IGkrKywgc2VnbWVudCsrKQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChzZWdtZW50KTsKKyAKKy0gICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKysgICAgICBzd2l0Y2ggKHJlYWQzMihzZWdtZW50LT5wX3R5cGUsIGJlKSkKKyAJeworIAljYXNlIFBUX0xPQUQ6CisgCSAgaWYgKGxvYWRhZGRyID09IChFbGYzMl9BZGRyKSAtMSkKKy0JICAgIGxvYWRhZGRyID0gc2VnbWVudC0+cF92YWRkciAtIHNlZ21lbnQtPnBfb2Zmc2V0OworKwkgICAgbG9hZGFkZHIgPSByZWFkMzIoc2VnbWVudC0+cF92YWRkciwgYmUpIC0gcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfRFlOQU1JQzoKKyAJICBpZiAoZHluYW1pY19hZGRyKQorIAkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisgCistCSAgZHluYW1pY19hZGRyID0gc2VnbWVudC0+cF9vZmZzZXQ7CistCSAgZHluYW1pY19zaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgZHluYW1pY19hZGRyID0gcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisrCSAgZHluYW1pY19zaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfSU5URVJQOgorLQkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkMzIoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CisgCSAgY2hlY2tfcHRyIChwcm9ncmFtX2ludGVycHJldGVyKTsKKyAKKyAJICAvKiBDaGVjayBpZiB0aGlzIGlzIGVub3VnaCB0byBjbGFzc2lmeSB0aGUgYmluYXJ5LiAgKi8KK0BAIC0xMTMsMjAgKzEzNywyMCBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfTk9URToKKy0JICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorKwkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiBzZWdtZW50LT5wX2FsaWduID49IDQpCisgCSAgICB7CisgCSAgICAgIEVsZjMyX1dvcmQgKmFiaV9ub3RlID0gKEVsZjMyX1dvcmQgKikgKGZpbGVfY29udGVudHMKKy0JCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworLQkgICAgICBFbGYzMl9BZGRyIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJCQkJCQkgICAgICsgcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworKwkgICAgICBFbGYzMl9BZGRyIHNpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAKKy0JICAgICAgd2hpbGUgKGFiaV9ub3RlIFswXSAhPSA0IHx8IGFiaV9ub3RlIFsxXSAhPSAxNgorLQkJICAgICB8fCBhYmlfbm90ZSBbMl0gIT0gMQorKwkgICAgICB3aGlsZSAocmVhZDMyKGFiaV9ub3RlIFswXSwgYmUpICE9IDQgfHwgcmVhZDMyKGFiaV9ub3RlIFsxXSwgYmUpICE9IDE2CisrCQkgICAgIHx8IHJlYWQzMihhYmlfbm90ZSBbMl0sIGJlKSAhPSAxCisgCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKyAJCXsKKy0jZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmMzJfV29yZCkpIC0gMSkgJiAtc2l6ZW9mIChFbGYzMl9Xb3JkKSkpCistCQkgIEVsZjMyX0FkZHIpIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjMyX1dvcmQpKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKysjZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKSAmIC1zaXplb2YgKEVsZjMyX1dvcmQpKQorKwkJICBFbGYzMl9BZGRyIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjMyX1dvcmQpCisrCQkJCQkgKyBST1VORCAocmVhZDMyKGFiaV9ub3RlWzBdLCBiZSkpCisrCQkJCQkgKyBST1VORCAocmVhZDMyKGFiaV9ub3RlWzFdLCBiZSkpOworIAorIAkJICBpZiAoc2l6ZSAtIDMyIDwgbm90ZV9zaXplIHx8IG5vdGVfc2l6ZSA9PSAwKQorIAkJICAgIHsKK0BAIC0xNDAsMTAgKzE2NCwxMCBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCSAgICAgIGlmIChzaXplID09IDApCisgCQlicmVhazsKKyAKKy0JICAgICAgKm9zdmVyc2lvbiA9IChhYmlfbm90ZSBbNF0gPDwgMjQpIHwKKy0JCQkgICAoKGFiaV9ub3RlIFs1XSAmIDB4ZmYpIDw8IDE2KSB8CistCQkJICAgKChhYmlfbm90ZSBbNl0gJiAweGZmKSA8PCA4KSB8CistCQkJICAgKGFiaV9ub3RlIFs3XSAmIDB4ZmYpOworKwkgICAgICAqb3N2ZXJzaW9uID0gKHJlYWQzMihhYmlfbm90ZSBbNF0sIGJlKSA8PCAyNCkgfAorKwkJCSAgICgocmVhZDMyKGFiaV9ub3RlIFs1XSwgYmUpICYgMHhmZikgPDwgMTYpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNl0sIGJlKSAmIDB4ZmYpIDw8IDgpIHwKKysJCQkgICAocmVhZDMyKGFiaV9ub3RlIFs3XSwgYmUpICYgMHhmZik7CisgCSAgICB9CisgCSAgYnJlYWs7CisgCitAQCAtMTY3LDEzICsxOTEsMTMgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAorICAgLyogRmluZCB0aGUgc3RyaW5nIHRhYmxlLiAgKi8KKyAgIGR5bmFtaWNfc3RyaW5ncyA9IE5VTEw7CistICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgIT0gRFRfTlVMTDsKKyAgICAgICAgKytkeW5fZW50cnkpCisgICAgIHsKKyAgICAgICBjaGVja19wdHIgKGR5bl9lbnRyeSk7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU1RSVEFCKQorKyAgICAgIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NUUlRBQikKKyAJeworLQkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsIC0gbG9hZGFkZHIpOworKwkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDMyKGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCwgYmUpIC0gbG9hZGFkZHIpOworIAkgIGNoZWNrX3B0ciAoZHluYW1pY19zdHJpbmdzKTsKKyAJICBicmVhazsKKyAJfQorQEAgLTE4MywxNSArMjA3LDE1IEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgICAgcmV0dXJuIDE7CisgCisgICAvKiBOb3cgcmVhZCB0aGUgRFRfTkVFREVEIGFuZCBEVF9TT05BTUUgZW50cmllcy4gICovCistICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgIT0gRFRfTlVMTDsKKyAgICAgICAgKytkeW5fZW50cnkpCisgICAgIHsKKy0gICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQgfHwgZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrICAgICAgaWYgKHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfTkVFREVEIHx8IHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAl7CistCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbDsKKysJICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgcmVhZDMyKGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCwgYmUpOworIAkgIGNoZWNrX3B0ciAobmFtZSk7CisgCistCSAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEKQorKwkgIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCkKKyAJICAgIHsKKyAKKyAJICAgICAgaWYgKCpmbGFnID09IEZMQUdfRUxGKQorQEAgLTIwOCw3ICsyMzIsNyBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCQl9CisgCSAgICB9CisgCistCSAgZWxzZSBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCSAgZWxzZSBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TT05BTUUpCisgCSAgICAqc29uYW1lID0geHN0cmR1cCAobmFtZSk7CisgCisgCSAgLyogRG8gd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQ/ICAqLworQEAgLTI0NiwxNSArMjcwLDE3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgIGVsZl9oZWFkZXIgPSAoRWxmNjRfRWhkciAqKSBmaWxlX2NvbnRlbnRzOworICAgKm9zdmVyc2lvbiA9IDA7CisgCistICBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKysgIGJlID0gKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJNU0IpOworKworKyAgaWYgKHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSAhPSBFVF9EWU4pCisgICAgIHsKKyAgICAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgbm90IGEgc2hhcmVkIG9iamVjdCBmaWxlIChUeXBlOiAlZCkuXG4iKSwgZmlsZV9uYW1lLAorLQkgICAgIGVsZl9oZWFkZXItPmVfdHlwZSk7CisrCSAgICAgcmVhZDE2KGVsZl9oZWFkZXItPmVfdHlwZSwgYmUpKTsKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorICAgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZWxmIHByb2dyYW0gaGVhZGVyLiAgKi8KKy0gIGVsZl9waGVhZGVyID0gKEVsZjY0X1BoZHIgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKysgIGVsZl9waGVhZGVyID0gKEVsZjY0X1BoZHIgKikgKHJlYWQ2NChlbGZfaGVhZGVyLT5lX3Bob2ZmLCBiZSkgKyBmaWxlX2NvbnRlbnRzKTsKKyAgIGNoZWNrX3B0ciAoZWxmX3BoZWFkZXIpOworIAorICAgLyogVGhlIGxpYnJhcnkgaXMgYW4gZWxmIGxpYnJhcnksIG5vdyBzZWFyY2ggZm9yIHNvbmFtZSBhbmQKK0BAIC0yNjYsMjcgKzI5MiwyNyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBkeW5hbWljX3NpemUgPSAwOworICAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IE5VTEw7CisgICBmb3IgKGkgPSAwLCBzZWdtZW50ID0gZWxmX3BoZWFkZXI7CistICAgICAgIGkgPCBlbGZfaGVhZGVyLT5lX3BobnVtOyBpKyssIHNlZ21lbnQrKykKKysgICAgICAgaSA8IHJlYWQxNihlbGZfaGVhZGVyLT5lX3BobnVtLCBiZSk7IGkrKywgc2VnbWVudCsrKQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChzZWdtZW50KTsKKyAKKy0gICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKysgICAgICBzd2l0Y2ggKHJlYWQzMihzZWdtZW50LT5wX3R5cGUsIGJlKSkKKyAJeworIAljYXNlIFBUX0xPQUQ6CisgCSAgaWYgKGxvYWRhZGRyID09IChFbGY2NF9BZGRyKSAtMSkKKy0JICAgIGxvYWRhZGRyID0gc2VnbWVudC0+cF92YWRkciAtIHNlZ21lbnQtPnBfb2Zmc2V0OworKwkgICAgbG9hZGFkZHIgPSByZWFkNjQoc2VnbWVudC0+cF92YWRkciwgYmUpIC0gcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfRFlOQU1JQzoKKyAJICBpZiAoZHluYW1pY19hZGRyKQorIAkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisgCistCSAgZHluYW1pY19hZGRyID0gc2VnbWVudC0+cF9vZmZzZXQ7CistCSAgZHluYW1pY19zaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgZHluYW1pY19hZGRyID0gcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisrCSAgZHluYW1pY19zaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfSU5URVJQOgorLQkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CisgCSAgY2hlY2tfcHRyIChwcm9ncmFtX2ludGVycHJldGVyKTsKKyAKKyAJICAvKiBDaGVjayBpZiB0aGlzIGlzIGVub3VnaCB0byBjbGFzc2lmeSB0aGUgYmluYXJ5LiAgKi8KK0BAIC0zMDAsMjAgKzMyNiwyMSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfTk9URToKKy0JICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorKwkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiByZWFkMzIoc2VnbWVudC0+cF9hbGlnbiwgYmUpID49IDQpCisgCSAgICB7CisgCSAgICAgIEVsZjY0X1dvcmQgKmFiaV9ub3RlID0gKEVsZjY0X1dvcmQgKikgKGZpbGVfY29udGVudHMKKy0JCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworLQkgICAgICBFbGY2NF9BZGRyIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJCQkJCQkgICAgICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworKwkgICAgICBFbGY2NF9BZGRyIHNpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAKKy0JICAgICAgd2hpbGUgKGFiaV9ub3RlIFswXSAhPSA0IHx8IGFiaV9ub3RlIFsxXSAhPSAxNgorLQkJICAgICB8fCBhYmlfbm90ZSBbMl0gIT0gMQorKwkgICAgICB3aGlsZSAocmVhZDMyKGFiaV9ub3RlIFswXSwgYmUpICE9IDQgfHwgcmVhZDMyKGFiaV9ub3RlIFsxXSwgYmUpICE9IDE2CisrCQkgICAgIHx8IHJlYWQzMihhYmlfbm90ZSBbMl0sIGJlKSAhPSAxCisgCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKyAJCXsKKysjdW5kZWYgUk9VTkQKKyAjZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmNjRfV29yZCkgLSAxKSAmIC1zaXplb2YgKEVsZjY0X1dvcmQpKQorIAkJICBFbGY2NF9BZGRyIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjY0X1dvcmQpCistCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCistCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVswXSwgYmUpKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVsxXSwgYmUpKTsKKyAKKyAJCSAgaWYgKHNpemUgLSAzMiA8IG5vdGVfc2l6ZSB8fCBub3RlX3NpemUgPT0gMCkKKyAJCSAgICB7CitAQCAtMzI3LDEwICszNTQsMTAgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgICAgICBpZiAoc2l6ZSA9PSAwKQorIAkJYnJlYWs7CisgCistCSAgICAgICpvc3ZlcnNpb24gPSAoYWJpX25vdGUgWzRdIDw8IDI0KSB8CistCQkJICAgKChhYmlfbm90ZSBbNV0gJiAweGZmKSA8PCAxNikgfAorLQkJCSAgICgoYWJpX25vdGUgWzZdICYgMHhmZikgPDwgOCkgfAorLQkJCSAgIChhYmlfbm90ZSBbN10gJiAweGZmKTsKKysJICAgICAgKm9zdmVyc2lvbiA9IChyZWFkMzIoYWJpX25vdGUgWzRdLCBiZSkgPDwgMjQpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNV0sIGJlKSAmIDB4ZmYpIDw8IDE2KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzZdLCBiZSkgJiAweGZmKSA8PCA4KSB8CisrCQkJICAgKHJlYWQzMihhYmlfbm90ZSBbN10sIGJlKSAmIDB4ZmYpOworIAkgICAgfQorIAkgIGJyZWFrOworIAorQEAgLTM1NCwxMyArMzgxLDEzIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAKKyAgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCisgICBkeW5hbWljX3N0cmluZ3MgPSBOVUxMOworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysgICAgICBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TVFJUQUIpCisgCXsKKy0JICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyKTsKKysJICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHJlYWQ2NChkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKSAtIGxvYWRhZGRyKTsKKyAJICBjaGVja19wdHIgKGR5bmFtaWNfc3RyaW5ncyk7CisgCSAgYnJlYWs7CisgCX0KK0BAIC0zNzAsMTUgKzM5NywxNSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICAgIHJldHVybiAxOworIAorICAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEIHx8IGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKyAgICAgIGlmIChyZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCB8fCByZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJeworLQkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyBkeW5fZW50cnktPmRfdW4uZF92YWw7CisrCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIHJlYWQ2NChkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKTsKKyAJICBjaGVja19wdHIgKG5hbWUpOworIAorLQkgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCkKKysJICBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQpCisgCSAgICB7CisgCisgCSAgICAgIGlmICgqZmxhZyA9PSBGTEFHX0VMRikKK0BAIC0zOTUsNyArNDIyLDcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAkJfQorIAkgICAgfQorIAorLQkgIGVsc2UgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKwkgIGVsc2UgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAkgICAgKnNvbmFtZSA9IHhzdHJkdXAgKG5hbWUpOworIAorIAkgIC8qIERvIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkPyAgKi8KK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworQEAgLTE2OSw3ICsxNjksOCBAQCBwcm9jZXNzX2ZpbGUgKGNvbnN0IGNoYXIgKnJlYWxfZmlsZV9uYW1lCisgICAgICAgcmV0ID0gMTsKKyAgICAgfQorICAgLyogTGlicmFyaWVzIGhhdmUgdG8gYmUgc2hhcmVkIG9iamVjdCBmaWxlcy4gICovCistICBlbHNlIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorKyAgZWxzZSBpZiAoKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJNU0IgJiYgYmUxNnRvaChlbGZfaGVhZGVyLT5lX3R5cGUpICE9IEVUX0RZTikgfHwKKysgICAgICAoZWxmX2hlYWRlci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBFTEZEQVRBMkxTQiAmJiBsZTE2dG9oKGVsZl9oZWFkZXItPmVfdHlwZSkgIT0gRVRfRFlOKSkKKyAgICAgcmV0ID0gMTsKKyAgIGVsc2UgaWYgKHByb2Nlc3NfZWxmX2ZpbGUgKGZpbGVfbmFtZSwgbGliLCBmbGFnLCBvc3ZlcnNpb24sIHNvbmFtZSwKKyAJCQkgICAgIGZpbGVfY29udGVudHMsIHN0YXRidWYuc3Rfc2l6ZSkpCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMKK0BAIC0zOSw2ICszOSwyOSBAQAorICMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKKytleHRlcm4gaW50IGJlOworKworK3N0YXRpYyB1aW50MTZfdCB3cml0ZTE2KHVpbnQxNl90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gaHRvYmUxNih4KTsKKysgIHJldHVybiBodG9sZTE2KHgpOworK30KKysKKytzdGF0aWMgdWludDMyX3Qgd3JpdGUzMih1aW50MzJfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGh0b2JlMzIoeCk7CisrICByZXR1cm4gaHRvbGUzMih4KTsKKyt9CisrCisrc3RhdGljIHVpbnQ2NF90IHdyaXRlNjQodWludDY0X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBodG9iZTY0KHgpOworKyAgcmV0dXJuIGh0b2xlNjQoeCk7CisrfQorKworIHN0cnVjdCBjYWNoZV9lbnRyeQorIHsKKyAgIGNoYXIgKmxpYjsJCQkvKiBMaWJyYXJ5IG5hbWUuICAqLworQEAgLTI3OSw3ICszMDIsMTIgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgIC8qIE51bWJlciBvZiBub3JtYWwgY2FjaGUgZW50cmllcy4gICovCisgICBpbnQgY2FjaGVfZW50cnlfb2xkX2NvdW50ID0gMDsKKyAKKy0gIGZvciAoZW50cnkgPSBlbnRyaWVzOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorKyAgICBpZiAoYmUpCisrICAgICAgcHJpbnRmKCJzYXZpbmcgY2FjaGUgaW4gYmlnIGVuZGlhbiBlbmNvZGluZ1xuIik7CisrICAgIGVsc2UKKysgICAgICBwcmludGYoInNhdmluZyBjYWNoZSBpbiBsaXR0bGUgZW5kaWFuIGVuY29kaW5nXG4iKTsKKysKKysgICAgZm9yIChlbnRyeSA9IGVudHJpZXM7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpCisgICAgIHsKKyAgICAgICAvKiBBY2NvdW50IHRoZSBmaW5hbCBOVUxzLiAgKi8KKyAgICAgICB0b3RhbF9zdHJsZW4gKz0gc3RybGVuIChlbnRyeS0+bGliKSArIHN0cmxlbiAoZW50cnktPnBhdGgpICsgMjsKK0BAIC0zMTAsNyArMzM4LDcgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICBtZW1zZXQgKGZpbGVfZW50cmllcywgJ1wwJywgc2l6ZW9mIChzdHJ1Y3QgY2FjaGVfZmlsZSkpOworICAgICAgIG1lbWNweSAoZmlsZV9lbnRyaWVzLT5tYWdpYywgQ0FDSEVNQUdJQywgc2l6ZW9mIENBQ0hFTUFHSUMgLSAxKTsKKyAKKy0gICAgICBmaWxlX2VudHJpZXMtPm5saWJzID0gY2FjaGVfZW50cnlfb2xkX2NvdW50OworKyAgICAgIGZpbGVfZW50cmllcy0+bmxpYnMgPSB3cml0ZTMyKGNhY2hlX2VudHJ5X29sZF9jb3VudCwgYmUpOworICAgICB9CisgCisgICBzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcgKmZpbGVfZW50cmllc19uZXcgPSBOVUxMOworQEAgLTMzMCw4ICszNTgsOCBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorICAgICAgIG1lbWNweSAoZmlsZV9lbnRyaWVzX25ldy0+dmVyc2lvbiwgQ0FDSEVfVkVSU0lPTiwKKyAJICAgICAgc2l6ZW9mIENBQ0hFX1ZFUlNJT04gLSAxKTsKKyAKKy0gICAgICBmaWxlX2VudHJpZXNfbmV3LT5ubGlicyA9IGNhY2hlX2VudHJ5X2NvdW50OworLSAgICAgIGZpbGVfZW50cmllc19uZXctPmxlbl9zdHJpbmdzID0gdG90YWxfc3RybGVuOworKyAgICAgIGZpbGVfZW50cmllc19uZXctPm5saWJzID0gd3JpdGUzMihjYWNoZV9lbnRyeV9jb3VudCwgYmUpOworKyAgICAgIGZpbGVfZW50cmllc19uZXctPmxlbl9zdHJpbmdzID0gd3JpdGUzMih0b3RhbF9zdHJsZW4sIGJlKTsKKyAgICAgfQorIAorICAgLyogUGFkIGZvciBhbGlnbm1lbnQgb2YgY2FjaGVfZmlsZV9uZXcuICAqLworQEAgLTM1OCw5ICszODYsOSBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorICAgICAgIC8qIEZpcnN0IHRoZSBsaWJyYXJ5LiAgKi8KKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAyICYmIGVudHJ5LT5od2NhcCA9PSAwKQorIAl7CistCSAgZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLmZsYWdzID0gZW50cnktPmZsYWdzOworKwkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5mbGFncyA9IHdyaXRlMzIoZW50cnktPmZsYWdzLCBiZSk7CisgCSAgLyogWFhYOiBBY3R1YWxseSB3ZSBjYW4gb3B0aW1pemUgaGVyZSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMuICAqLworLQkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5rZXkgPSBzdHJfb2Zmc2V0ICsgcGFkOworKwkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5rZXkgPSB3cml0ZTMyKHN0cl9vZmZzZXQgKyBwYWQsIGJlKTsKKyAJfQorICAgICAgIGlmIChvcHRfZm9ybWF0ICE9IDApCisgCXsKK0BAIC0zNjgsMTAgKzM5NiwxMCBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorIAkgICAgIG5vdCBkb2luZyBzbyBtYWtlcyB0aGUgY29kZSBlYXNpZXIsIHRoZSBzdHJpbmcgdGFibGUKKyAJICAgICBhbHdheXMgYmVnaW5zIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRoZSBuZXcgY2FjaGUKKyAJICAgICBzdHJ1Y3QuICAqLworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uZmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7CistCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5vc3ZlcnNpb24gPSBlbnRyeS0+b3N2ZXJzaW9uOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uaHdjYXAgPSBlbnRyeS0+aHdjYXA7CistCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5rZXkgPSBzdHJfb2Zmc2V0OworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uZmxhZ3MgPSB3cml0ZTMyKGVudHJ5LT5mbGFncywgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ub3N2ZXJzaW9uID0gd3JpdGUzMihlbnRyeS0+b3N2ZXJzaW9uLCBiZSk7CisrCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5od2NhcCA9IHdyaXRlNjQoZW50cnktPmh3Y2FwLCBiZSk7CisrCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5rZXkgPSB3cml0ZTMyKHN0cl9vZmZzZXQsIGJlKTsKKyAJfQorIAorICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGVudHJ5LT5saWIpICsgMTsKK0BAIC0zNzksOSArNDA3LDkgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICBzdHJfb2Zmc2V0ICs9IGxlbjsKKyAgICAgICAvKiBUaGVuIHRoZSBwYXRoLiAgKi8KKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAyICYmIGVudHJ5LT5od2NhcCA9PSAwKQorLQlmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0udmFsdWUgPSBzdHJfb2Zmc2V0ICsgcGFkOworKwlmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0udmFsdWUgPSB3cml0ZTMyKHN0cl9vZmZzZXQgKyBwYWQsIGJlKTsKKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAwKQorLQlmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLnZhbHVlID0gc3RyX29mZnNldDsKKysJZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS52YWx1ZSA9IHdyaXRlMzIoc3RyX29mZnNldCwgYmUpOworICAgICAgIGxlbiA9IHN0cmxlbiAoZW50cnktPnBhdGgpICsgMTsKKyAgICAgICBzdHIgPSBtZW1wY3B5IChzdHIsIGVudHJ5LT5wYXRoLCBsZW4pOworICAgICAgIHN0cl9vZmZzZXQgKz0gbGVuOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWVjZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRml4IHByb2JsZW0gZHVyaW5nIHBhcnNpbmcgb2YgRUxGIGhlYWRlcnMgZm9yIDY0Yml0IG9uIGJpZy1lbmRpYW4uCitTb21lIGhlYWRlciBmaWVsZHMgd2VyZSByZWFkIHdpdGggd3Jvbmcgc2l6ZS4KKworMjAxNC8xMC8yNAorUGFyIE9sc3NvbiA8UGFyLk9sc3NvbkB3aW5kcml2ZXIuY29tPgorU2hhbiBIYWkgPHNoYW4uaGFpQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9yZWFkZWxmbGliLmMgYi9yZWFkZWxmbGliLmMKK2luZGV4IDNmNWIyNWIuLjBiZjBkZTMgMTAwNjQ0CistLS0gYS9yZWFkZWxmbGliLmMKKysrKyBiL3JlYWRlbGZsaWIuYworQEAgLTI2MSw4ICsyNjEsOCBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgICBpbnQgaTsKKyAgIHVuc2lnbmVkIGludCBqOworICAgRWxmNjRfQWRkciBsb2FkYWRkcjsKKy0gIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CistICBzaXplX3QgZHluYW1pY19zaXplOworKyAgRWxmNjRfQWRkciBkeW5hbWljX2FkZHI7CisrICBFbGY2NF9Yd29yZCBkeW5hbWljX3NpemU7CisgICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworIAorICAgRWxmNjRfRWhkciAqZWxmX2hlYWRlcjsKK0BAIC0zMTEsNyArMzExLDcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorIAkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisgCisgCSAgZHluYW1pY19hZGRyID0gcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CistCSAgZHluYW1pY19zaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisrCSAgZHluYW1pY19zaXplID0gcmVhZDY0KHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfSU5URVJQOgorQEAgLTMyOSwxMSArMzI5LDExIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9OT1RFOgorLQkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiByZWFkMzIoc2VnbWVudC0+cF9hbGlnbiwgYmUpID49IDQpCisrCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpID49IDMyICYmIHJlYWQ2NChzZWdtZW50LT5wX2FsaWduLCBiZSkgPj0gNCkKKyAJICAgIHsKKyAJICAgICAgRWxmNjRfV29yZCAqYWJpX25vdGUgPSAoRWxmNjRfV29yZCAqKSAoZmlsZV9jb250ZW50cworIAkJCQkJCSAgICAgKyByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CistCSAgICAgIEVsZjY0X0FkZHIgc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworKwkgICAgICBFbGY2NF9Yd29yZCBzaXplID0gcmVhZDY0KHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCisgCSAgICAgIHdoaWxlIChyZWFkMzIoYWJpX25vdGUgWzBdLCBiZSkgIT0gNCB8fCByZWFkMzIoYWJpX25vdGUgWzFdLCBiZSkgIT0gMTYKKyAJCSAgICAgfHwgcmVhZDMyKGFiaV9ub3RlIFsyXSwgYmUpICE9IDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuZXNzLWhlYWRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuZXNzLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMThiMmMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2ZpeCBwb2t5IHBhdGNoXQorCitUaGlzIHBhdGNoIGZpeGVzIGJ1aWxkIGlzc3VlcyB3aXRoIGEgcHJldmlvdXMgZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2ggb24KK2Rpc3Ryb3MgdGhhdCBkb24ndCBoYXZlIG1hY3JvcyByZWZlcmVuY2VkCisKKzcvMjAvMjAxMQorTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtcHVyTiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZW5kaWFuX2V4dHJhLmggbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5fZXh0cmEuaAorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9lbmRpYW5fZXh0cmEuaAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuX2V4dHJhLmgJMjAxMS0wNy0xOSAxODowOToxNC4zMjMwNDg0MTcgLTA1MDAKK0BAIC0wLDAgKzEsNjQgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysKKysjaWZuZGVmCV9FTkRJQU5fRVhUUkFfSAorKyNkZWZpbmUJX0VORElBTl9FWFRSQV9ICTEKKysKKysvKiBEb24ndCByZWRlZmluZSB0aGVzZSBtYWNyb3MgaWYgdGhleSBhbHJlYWR5IGV4aXN0ICovCisrI2lmbmRlZiBodG9iZTE2CisrI2lmZGVmIF9fVVNFX0JTRAorKy8qIENvbnZlcnNpb24gaW50ZXJmYWNlcy4gICovCisrIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorKworKyMgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorKyMgIGRlZmluZSBodG9iZTE2KHgpIF9fYnN3YXBfMTYgKHgpCisrIyAgZGVmaW5lIGh0b2xlMTYoeCkgKHgpCisrIyAgZGVmaW5lIGJlMTZ0b2goeCkgX19ic3dhcF8xNiAoeCkKKysjICBkZWZpbmUgbGUxNnRvaCh4KSAoeCkKKysKKysjICBkZWZpbmUgaHRvYmUzMih4KSBfX2Jzd2FwXzMyICh4KQorKyMgIGRlZmluZSBodG9sZTMyKHgpICh4KQorKyMgIGRlZmluZSBiZTMydG9oKHgpIF9fYnN3YXBfMzIgKHgpCisrIyAgZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlNjQoeCkgX19ic3dhcF82NCAoeCkKKysjICBkZWZpbmUgaHRvbGU2NCh4KSAoeCkKKysjICBkZWZpbmUgYmU2NHRvaCh4KSBfX2Jzd2FwXzY0ICh4KQorKyMgIGRlZmluZSBsZTY0dG9oKHgpICh4KQorKyMgZWxzZQorKyMgIGRlZmluZSBodG9iZTE2KHgpICh4KQorKyMgIGRlZmluZSBodG9sZTE2KHgpIF9fYnN3YXBfMTYgKHgpCisrIyAgZGVmaW5lIGJlMTZ0b2goeCkgKHgpCisrIyAgZGVmaW5lIGxlMTZ0b2goeCkgX19ic3dhcF8xNiAoeCkKKysKKysjICBkZWZpbmUgaHRvYmUzMih4KSAoeCkKKysjICBkZWZpbmUgaHRvbGUzMih4KSBfX2Jzd2FwXzMyICh4KQorKyMgIGRlZmluZSBiZTMydG9oKHgpICh4KQorKyMgIGRlZmluZSBsZTMydG9oKHgpIF9fYnN3YXBfMzIgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlNjQoeCkgKHgpCisrIyAgZGVmaW5lIGh0b2xlNjQoeCkgX19ic3dhcF82NCAoeCkKKysjICBkZWZpbmUgYmU2NHRvaCh4KSAoeCkKKysjICBkZWZpbmUgbGU2NHRvaCh4KSBfX2Jzd2FwXzY0ICh4KQorKyMgZW5kaWYKKysjZW5kaWYKKysjZW5kaWYKKysKKysjZW5kaWYJLyogZW5kaWFuX2V4dHJhLmggKi8KK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMJMjAxMS0wNy0xOSAxODoyMToyOC4zNDcwNDEzMDEgLTA1MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMJMjAxMS0wNy0xOSAxODoyMjo1NC4xMTgwNDgwNjQgLTA1MDAKK0BAIC0zOSw2ICszOSw4IEBACisgIyBkZWZpbmUgTl8obXNnaWQpICBtc2dpZAorICNkZWZpbmUgXyhtc2cpIG1zZworIAorKyNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKysKKyBleHRlcm4gaW50IGJlOworIAorIHN0YXRpYyB1aW50MTZfdCB3cml0ZTE2KHVpbnQxNl90IHgsIGludCBiZSkKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRlbGZsaWIuYyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMJMjAxMS0wNy0xOSAxODoyMToyOC4zNDYwNDE1OTMgLTA1MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYwkyMDExLTA3LTE5IDE4OjIzOjA1LjMyNDA1OTg3NSAtMDUwMAorQEAgLTI1LDYgKzI1LDkgQEAKKyAKKyAvKiBjaGVja19wdHIgY2hlY2tzIHRoYXQgYSBwb2ludGVyIGlzIGluIHRoZSBtbWFwZWQgZmlsZSBhbmQgZG9lc24ndAorICAgIHBvaW50IG91dHNpZGUgaXQuICAqLworKworKyNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKysKKyAjdW5kZWYgY2hlY2tfcHRyCisgI2RlZmluZSBjaGVja19wdHIocHRyKQkJCQkJCVwKKyBkbwkJCQkJCQkJXAorZGlmZiAtcHVyTiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYwkyMDExLTA3LTE5IDE4OjIxOjI4LjM0NjA0MTU5MyAtMDUwMAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCTIwMTEtMDctMTkgMTg6MjM6MjMuODc3MDQ2MjEwIC0wNTAwCitAQCAtNDAsNiArNDAsOCBAQAorIAorICNpbmNsdWRlICJsZGNvbmZpZy5oIgorIAorKyNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKysKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKKyAjZGVmaW5lIEVsZjMyX0NMQVNTIEVMRkNMQVNTMzIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZmxhZ19maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2ZsYWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWFhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2ZsYWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBuYXRpdmUgdmVyc2lvbiBvZiBsZGNvbmZpZyB3YXMgdXNpbmcgbmF0aXZlIGRlZmluaXRpb24gb2YgTERfU08gKGkuZS4gCitsZC1saW51eC14ODYtNjQuc28uMiApIHdoaWNoIGlzIG5vdCBjb3JyZWN0IGZvciBkb2luZyB0aGUgY3Jvc3MgbGRjb25maWcuCitUaGlzIHdhcyBjYXVzaW5nIGxpYmMuc28gb24gdGhlIHRhcmdldCBtYXJrZWQgYXMgRUxGIGxpYiByYXRoZXIgdGhhbiAKK0ZMQUdfRUxGX0xJQkM2IGluIHRoZSBsZC5zby5jYWNoZS4KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNC80CisKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworQEAgLTUxLDYgKzUxLDEwIEBAIHN0cnVjdCBrbm93bl9uYW1lcworICAgaW50IGZsYWc7CisgfTsKKyAKKysvKiBkb24ndCB1c2UgaG9zdCdzIGRlZmluaXRpb24gb2YgTERfU08gKi8KKysjdW5kZWYgTERfU08gCisrI2RlZmluZSBMRF9TTyAibGQuc28uMSIKKysKKyBzdGF0aWMgc3RydWN0IGtub3duX25hbWVzIGludGVycHJldGVyc1tdID0KKyB7CisgICB7ICIvbGliLyIgTERfU08sIEZMQUdfRUxGX0xJQkM2IH0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkNGY2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCittYWtlIGxkY29uZmlnIGRlZmF1bHQgdG8gYm90aCAvbGliKy91c3IvbGliLCAvbGliMzIrL3Vzci9saWIzMiBhbmQKKy9saWI2NCsvdXNyL2xpYjY0IG9uIGJpLUFCSSBhcmNoaXRlY3R1cmVzLgorCistLS0KKyBsZGNvbmZpZy5jIHwgICAxMCArKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworZGlmZiAtdXJwTiBhL2xkY29uZmlnLmMgYi9sZGNvbmZpZy5jCistLS0gYS9sZGNvbmZpZy5jCisrKysgYi9sZGNvbmZpZy5jCitAQCAtNTIsNyArNTIsMTEgQEAKKyAKKyAjZGVmaW5lIFNZU0NPTkZESVIgIi9ldGMiCisgI2RlZmluZSBMSUJESVIgIi91c3IvbGliIgorKyNkZWZpbmUgTElCRElSMzIgIi91c3IvbGliMzIiCisrI2RlZmluZSBMSUJESVI2NCAiL3Vzci9saWI2NCIKKyAjZGVmaW5lIFNMSUJESVIgIi9saWIiCisrI2RlZmluZSBTTElCRElSMzIgIi9saWIzMiIKKysjZGVmaW5lIFNMSUJESVI2NCAiL2xpYjY0IgorICMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKK0BAIC0xMzczLDYgKzEzNzcsMTIgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgIGFkZF9zeXN0ZW1fZGlyIChTTElCRElSKTsKKyAgICAgICBpZiAoc3RyY21wIChTTElCRElSLCBMSUJESVIpKQorIAlhZGRfc3lzdGVtX2RpciAoTElCRElSKTsKKysgICAgICBhZGRfc3lzdGVtX2RpciAoU0xJQkRJUjMyKTsKKysgICAgICBpZiAoc3RyY21wIChTTElCRElSMzIsIExJQkRJUjMyKSkKKysJYWRkX3N5c3RlbV9kaXIgKExJQkRJUjMyKTsKKysgICAgICBhZGRfc3lzdGVtX2RpciAoU0xJQkRJUjY0KTsKKysgICAgICBpZiAoc3RyY21wIChTTElCRElSNjQsIExJQkRJUjY0KSkKKysJYWRkX3N5c3RlbV9kaXIgKExJQkRJUjY0KTsKKyAgICAgfQorIAorICAgY29uc3QgY2hhciAqYXV4X2NhY2hlX2ZpbGUgPSBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEU7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctbmF0aXZlLTIuMTIuMS50YXIuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWU3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjk4NmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQ3MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZW5hYmxlIHN0YW5kYWxvbmUgYnVpbGRpbmcgb2YgbGRjb25maWcKKworLS0tCisgY2FjaGUuYyAgICAgICAgfCAgIDExICstCisgY2hyb290X2Nhbm9uLmMgfCAgICA3ICsKKyBkbC1jYWNoZS5jICAgICB8ICAyMzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZGwtY2FjaGUuaCAgICAgfCAgICAzIAorIGxkY29uZmlnLmMgICAgIHwgICAyNyArKysrLS0KKyByZWFkbGliLmMgICAgICB8ICAgIDcgKworIHhzdHJkdXAuYyAgICAgIHwgICAxMSAtLQorIDcgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMjU2IGRlbGV0aW9ucygtKQorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMKK0BAIC0xNiw2ICsxNiw5IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGVycm9yLmg+CisgI2luY2x1ZGUgPGRpcmVudC5oPgorQEAgLTMxLDggKzM0LDEwIEBACisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorLSNpbmNsdWRlIDxkbC1jYWNoZS5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKyNpbmNsdWRlICJkbC1jYWNoZS5oIgorKyMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKysjZGVmaW5lIF8obXNnKSBtc2cKKyAKKyBzdHJ1Y3QgY2FjaGVfZW50cnkKKyB7CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9jaHJvb3RfY2Fub24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jaHJvb3RfY2Fub24uYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2hyb290X2Nhbm9uLmMKK0BAIC0xNyw2ICsxNyw5IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitAQCAtMjcsNyArMzAsOSBAQAorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrCisrI2RlZmluZSBfX3NldF9lcnJubyhWYWwpIGVycm5vID0gKFZhbCkKKyAKKyAjaWZuZGVmIFBBVEhfTUFYCisgI2RlZmluZSBQQVRIX01BWCAxMDI0CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2RsLWNhY2hlLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmMKK0BAIC0yMCwxMiArMjAsMTIgQEAKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorLSNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKy8vI2luY2x1ZGUgImxkc29kZWZzLmgiCisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPGRsLWNhY2hlLmg+CisgI2luY2x1ZGUgPGRsLXByb2NpbmZvLmg+CisgCistI2luY2x1ZGUgPHN0ZGlvLWNvbW1vbi9faXRvYS5oPgorKy8vI2luY2x1ZGUgIl9pdG9hLmgiCisgCisgI2lmbmRlZiBfRExfUExBVEZPUk1TX0NPVU5UCisgIyBkZWZpbmUgX0RMX1BMQVRGT1JNU19DT1VOVCAwCitAQCAtMzksMTAzICszOSw3IEBAIHN0YXRpYyBzaXplX3QgY2FjaGVzaXplOworIC8qIDEgaWYgY2FjaGVfZGF0YSArIFBUUiBwb2ludHMgaW50byB0aGUgY2FjaGUuICAqLworICNkZWZpbmUgX2RsX2NhY2hlX3ZlcmlmeV9wdHIocHRyKSAocHRyIDwgY2FjaGVfZGF0YV9zaXplKQorIAorLSNkZWZpbmUgU0VBUkNIX0NBQ0hFKGNhY2hlKSBcCistLyogV2UgdXNlIGJpbmFyeSBzZWFyY2ggc2luY2UgdGhlIHRhYmxlIGlzIHNvcnRlZCBpbiB0aGUgY2FjaGUgZmlsZS4JICAgICAgXAorLSAgIFRoZSBmaXJzdCBtYXRjaGluZyBlbnRyeSBpbiB0aGUgdGFibGUgaXMgcmV0dXJuZWQuCQkJICAgICAgXAorLSAgIEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIHNhbWUgYWxnb3JpdGhtIGFzIHVzZWQgd2hpbGUgZ2VuZXJhdGluZwkgICAgICBcCistICAgdGhlIGNhY2hlIGZpbGUuICAqLwkJCQkJCQkgICAgICBcCistZG8JCQkJCQkJCQkgICAgICBcCistICB7CQkJCQkJCQkJICAgICAgXAorLSAgICBsZWZ0ID0gMDsJCQkJCQkJCSAgICAgIFwKKy0gICAgcmlnaHQgPSBjYWNoZS0+bmxpYnMgLSAxOwkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistICAgIHdoaWxlIChsZWZ0IDw9IHJpZ2h0KQkJCQkJCSAgICAgIFwKKy0gICAgICB7CQkJCQkJCQkJICAgICAgXAorLQlfX3R5cGVvZl9fIChjYWNoZS0+bGlic1swXS5rZXkpIGtleTsJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOwkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0Ja2V5ID0gY2FjaGUtPmxpYnNbbWlkZGxlXS5rZXk7CQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkvKiBNYWtlIHN1cmUgc3RyaW5nIHRhYmxlIGluZGljZXMgYXJlIG5vdCBib2d1cyBiZWZvcmUgdXNpbmcJICAgICAgXAorLQkgICB0aGVtLiAgKi8JCQkJCQkJICAgICAgXAorLQlpZiAoISBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAoa2V5KSkJCQkJICAgICAgXAorLQkgIHsJCQkJCQkJCSAgICAgIFwKKy0JICAgIGNtcHJlcyA9IDE7CQkJCQkJCSAgICAgIFwKKy0JICAgIGJyZWFrOwkJCQkJCQkgICAgICBcCistCSAgfQkJCQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JLyogQWN0dWFsbHkgY29tcGFyZSB0aGUgZW50cnkgd2l0aCB0aGUga2V5LiAgKi8JCQkgICAgICBcCistCWNtcHJlcyA9IF9kbF9jYWNoZV9saWJjbXAgKG5hbWUsIGNhY2hlX2RhdGEgKyBrZXkpOwkJICAgICAgXAorLQlpZiAoX19idWlsdGluX2V4cGVjdCAoY21wcmVzID09IDAsIDApKQkJCQkgICAgICBcCistCSAgewkJCQkJCQkJICAgICAgXAorLQkgICAgLyogRm91bmQgaXQuICBMRUZUIG5vdyBtYXJrcyB0aGUgbGFzdCBlbnRyeSBmb3Igd2hpY2ggd2UJICAgICAgXAorLQkgICAgICAga25vdyB0aGUgbmFtZSBpcyBjb3JyZWN0LiAgKi8JCQkJICAgICAgXAorLQkgICAgbGVmdCA9IG1pZGRsZTsJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkgICAgLyogVGhlcmUgbWlnaHQgYmUgZW50cmllcyB3aXRoIHRoaXMgbmFtZSBiZWZvcmUgdGhlIG9uZSB3ZQkgICAgICBcCistCSAgICAgICBmb3VuZC4gIFNvIHdlIGhhdmUgdG8gZmluZCB0aGUgYmVnaW5uaW5nLiAgKi8JCSAgICAgIFwKKy0JICAgIHdoaWxlIChtaWRkbGUgPiAwKQkJCQkJCSAgICAgIFwKKy0JICAgICAgewkJCQkJCQkJICAgICAgXAorLQkJX190eXBlb2ZfXyAoY2FjaGUtPmxpYnNbMF0ua2V5KSBrZXk7CQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCWtleSA9IGNhY2hlLT5saWJzW21pZGRsZSAtIDFdLmtleTsJCQkgICAgICBcCistCQkvKiBNYWtlIHN1cmUgc3RyaW5nIHRhYmxlIGluZGljZXMgYXJlIG5vdCBib2d1cyBiZWZvcmUJICAgICAgXAorLQkJICAgdXNpbmcgdGhlbS4gICovCQkJCQkgICAgICBcCistCQlpZiAoISBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAoa2V5KQkJCSAgICAgIFwKKy0JCSAgICAvKiBBY3R1YWxseSBjb21wYXJlIHRoZSBlbnRyeS4gICovCQkJICAgICAgXAorLQkJICAgIHx8IF9kbF9jYWNoZV9saWJjbXAgKG5hbWUsIGNhY2hlX2RhdGEgKyBrZXkpICE9IDApCSAgICAgIFwKKy0JCSAgYnJlYWs7CQkJCQkJICAgICAgXAorLQkJLS1taWRkbGU7CQkJCQkJICAgICAgXAorLQkgICAgICB9CQkJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkgICAgZG8JCQkJCQkJCSAgICAgIFwKKy0JICAgICAgewkJCQkJCQkJICAgICAgXAorLQkJaW50IGZsYWdzOwkJCQkJCSAgICAgIFwKKy0JCV9fdHlwZW9mX18gKGNhY2hlLT5saWJzWzBdKSAqbGliID0gJmNhY2hlLT5saWJzW21pZGRsZV07ICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCS8qIE9ubHkgcGVyZm9ybSB0aGUgbmFtZSB0ZXN0IGlmIG5lY2Vzc2FyeS4gICovCQkgICAgICBcCistCQlpZiAobWlkZGxlID4gbGVmdAkJCQkJICAgICAgXAorLQkJICAgIC8qIFdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHN0cmluZyBzbyBmYXIuICBUZXN0IHdoZXRoZXIgdGhlICBcCistCQkgICAgICAgaW5kZXggaXMgb2sgYW5kIHdoZXRoZXIgdGhlIG5hbWUgbWF0Y2hlcy4gIE90aGVyd2lzZSAgIFwKKy0JCSAgICAgICB3ZSBhcmUgZG9uZS4gICovCQkJCQkgICAgICBcCistCQkgICAgJiYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGxpYi0+a2V5KQkJICAgICAgXAorLQkJCXx8IChfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsgbGliLT5rZXkpICAgIFwKKy0JCQkgICAgIT0gMCkpKQkJCQkJICAgICAgXAorLQkJICBicmVhazsJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkJZmxhZ3MgPSBsaWItPmZsYWdzOwkJCQkJICAgICAgXAorLQkJaWYgKF9kbF9jYWNoZV9jaGVja19mbGFncyAoZmxhZ3MpCQkJICAgICAgXAorLQkJICAgICYmIF9kbF9jYWNoZV92ZXJpZnlfcHRyIChsaWItPnZhbHVlKSkJCSAgICAgIFwKKy0JCSAgewkJCQkJCQkgICAgICBcCistCQkgICAgaWYgKGJlc3QgPT0gTlVMTCB8fCBmbGFncyA9PSBHTFJPKGRsX2NvcnJlY3RfY2FjaGVfaWQpKSAgIFwKKy0JCSAgICAgIHsJCQkJCQkJICAgICAgXAorLQkJCUhXQ0FQX0NIRUNLOwkJCQkJICAgICAgXAorLQkJCWJlc3QgPSBjYWNoZV9kYXRhICsgbGliLT52YWx1ZTsJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkJCWlmIChmbGFncyA9PSBHTFJPKGRsX2NvcnJlY3RfY2FjaGVfaWQpKQkJICAgICAgXAorLQkJCSAgLyogV2UndmUgZm91bmQgYW4gZXhhY3QgbWF0Y2ggZm9yIHRoZSBzaGFyZWQJICAgICAgXAorLQkJCSAgICAgb2JqZWN0IGFuZCBubyBnZW5lcmFsIGBFTEYnIHJlbGVhc2UuICBTdG9wCSAgICAgIFwKKy0JCQkgICAgIHNlYXJjaGluZy4gICovCQkJCSAgICAgIFwKKy0JCQkgIGJyZWFrOwkJCQkJICAgICAgXAorLQkJICAgICAgfQkJCQkJCQkgICAgICBcCistCQkgIH0JCQkJCQkJICAgICAgXAorLQkgICAgICB9CQkJCQkJCQkgICAgICBcCistCSAgICB3aGlsZSAoKyttaWRkbGUgPD0gcmlnaHQpOwkJCQkJICAgICAgXAorLQkgICAgYnJlYWs7CQkJCQkJCSAgICAgIFwKKy0JfQkJCQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JaWYgKGNtcHJlcyA8IDApCQkJCQkJCSAgICAgIFwKKy0JICBsZWZ0ID0gbWlkZGxlICsgMTsJCQkJCQkgICAgICBcCistCWVsc2UJCQkJCQkJCSAgICAgIFwKKy0JICByaWdodCA9IG1pZGRsZSAtIDE7CQkJCQkJICAgICAgXAorLSAgICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9CQkJCQkJCQkJICAgICAgXAorLXdoaWxlICgwKQorLQorLQorIGludAorLWludGVybmFsX2Z1bmN0aW9uCisgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKQorIHsKKyAgIHdoaWxlICgqcDEgIT0gJ1wwJykKK0BAIC0xNzIsMTM5ICs3NiwzIEBAIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCAKKyAgICAgfQorICAgcmV0dXJuICpwMSAtICpwMjsKKyB9CistCistCistLyogTG9vayB1cCBOQU1FIGluIGxkLnNvLmNhY2hlIGFuZCByZXR1cm4gdGhlIGZpbGUgbmFtZSBzdG9yZWQgdGhlcmUsCistICAgb3IgbnVsbCBpZiBub25lIGlzIGZvdW5kLiAgKi8KKy0KKy1jb25zdCBjaGFyICoKKy1pbnRlcm5hbF9mdW5jdGlvbgorLV9kbF9sb2FkX2NhY2hlX2xvb2t1cCAoY29uc3QgY2hhciAqbmFtZSkKKy17CistICBpbnQgbGVmdCwgcmlnaHQsIG1pZGRsZTsKKy0gIGludCBjbXByZXM7CistICBjb25zdCBjaGFyICpjYWNoZV9kYXRhOworLSAgdWludDMyX3QgY2FjaGVfZGF0YV9zaXplOworLSAgY29uc3QgY2hhciAqYmVzdDsKKy0KKy0gIC8qIFByaW50IGEgbWVzc2FnZSBpZiB0aGUgbG9hZGluZyBvZiBsaWJzIGlzIHRyYWNlZC4gICovCistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUywgMCkpCistICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgc2VhcmNoIGNhY2hlPSVzXG4iLCBMRF9TT19DQUNIRSk7CistCistICBpZiAoY2FjaGUgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIC8qIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgKi8KKy0gICAgICB2b2lkICpmaWxlID0gX2RsX3N5c2RlcF9yZWFkX3dob2xlX2ZpbGUgKExEX1NPX0NBQ0hFLCAmY2FjaGVzaXplLAorLQkJCQkJICAgICAgIFBST1RfUkVBRCk7CistCistICAgICAgLyogV2UgY2FuIGhhbmRsZSB0aHJlZSBkaWZmZXJlbnQgY2FjaGUgZmlsZSBmb3JtYXRzIGhlcmU6CistCSAtIHRoZSBvbGQgbGliYzUvZ2xpYmMyLjAvMi4xIGZvcm1hdAorLQkgLSB0aGUgb2xkIGZvcm1hdCB3aXRoIHRoZSBuZXcgZm9ybWF0IGluIGl0CistCSAtIG9ubHkgdGhlIG5ldyBmb3JtYXQKKy0JIFRoZSBmb2xsb3dpbmcgY2hlY2tzIGlmIHRoZSBjYWNoZSBjb250YWlucyBhbnkgb2YgdGhlc2UgZm9ybWF0cy4gICovCistICAgICAgaWYgKGZpbGUgIT0gTUFQX0ZBSUxFRCAmJiBjYWNoZXNpemUgPiBzaXplb2YgKmNhY2hlCistCSAgJiYgbWVtY21wIChmaWxlLCBDQUNIRU1BR0lDLCBzaXplb2YgQ0FDSEVNQUdJQyAtIDEpID09IDApCistCXsKKy0JICBzaXplX3Qgb2Zmc2V0OworLQkgIC8qIExvb2tzIG9rLiAgKi8KKy0JICBjYWNoZSA9IGZpbGU7CistCistCSAgLyogQ2hlY2sgZm9yIG5ldyB2ZXJzaW9uLiAgKi8KKy0JICBvZmZzZXQgPSBBTElHTl9DQUNIRSAoc2l6ZW9mIChzdHJ1Y3QgY2FjaGVfZmlsZSkKKy0JCQkJKyBjYWNoZS0+bmxpYnMgKiBzaXplb2YgKHN0cnVjdCBmaWxlX2VudHJ5KSk7CistCistCSAgY2FjaGVfbmV3ID0gKHN0cnVjdCBjYWNoZV9maWxlX25ldyAqKSAoKHZvaWQgKikgY2FjaGUgKyBvZmZzZXQpOworLQkgIGlmIChjYWNoZXNpemUgPCAob2Zmc2V0ICsgc2l6ZW9mIChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcpKQorLQkgICAgICB8fCBtZW1jbXAgKGNhY2hlX25ldy0+bWFnaWMsIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcsCistCQkJIHNpemVvZiBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXIC0gMSkgIT0gMCkKKy0JICAgIGNhY2hlX25ldyA9ICh2b2lkICopIC0xOworLQl9CistICAgICAgZWxzZSBpZiAoZmlsZSAhPSBNQVBfRkFJTEVEICYmIGNhY2hlc2l6ZSA+IHNpemVvZiAqY2FjaGVfbmV3CistCSAgICAgICAmJiBtZW1jbXAgKGZpbGUsIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcsCistCQkJICBzaXplb2YgQ0FDSEVNQUdJQ19WRVJTSU9OX05FVyAtIDEpID09IDApCistCXsKKy0JICBjYWNoZV9uZXcgPSBmaWxlOworLQkgIGNhY2hlID0gZmlsZTsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIGlmIChmaWxlICE9IE1BUF9GQUlMRUQpCistCSAgICBfX211bm1hcCAoZmlsZSwgY2FjaGVzaXplKTsKKy0JICBjYWNoZSA9ICh2b2lkICopIC0xOworLQl9CistCistICAgICAgYXNzZXJ0IChjYWNoZSAhPSBOVUxMKTsKKy0gICAgfQorLQorLSAgaWYgKGNhY2hlID09ICh2b2lkICopIC0xKQorLSAgICAvKiBQcmV2aW91c2x5IGxvb2tlZCBmb3IgdGhlIGNhY2hlIGZpbGUgYW5kIGRpZG4ndCBmaW5kIGl0LiAgKi8KKy0gICAgcmV0dXJuIE5VTEw7CistCistICBiZXN0ID0gTlVMTDsKKy0KKy0gIGlmIChjYWNoZV9uZXcgIT0gKHZvaWQgKikgLTEpCistICAgIHsKKy0gICAgICB1aW50NjRfdCBwbGF0Zm9ybTsKKy0KKy0gICAgICAvKiBUaGlzIGlzIHdoZXJlIHRoZSBzdHJpbmdzIHN0YXJ0LiAgKi8KKy0gICAgICBjYWNoZV9kYXRhID0gKGNvbnN0IGNoYXIgKikgY2FjaGVfbmV3OworLQorLSAgICAgIC8qIE5vdyB3ZSBjYW4gY29tcHV0ZSBob3cgbGFyZ2UgdGhlIHN0cmluZyB0YWJsZSBpcy4gICovCistICAgICAgY2FjaGVfZGF0YV9zaXplID0gKGNvbnN0IGNoYXIgKikgY2FjaGUgKyBjYWNoZXNpemUgLSBjYWNoZV9kYXRhOworLQorLSAgICAgIHBsYXRmb3JtID0gX2RsX3N0cmluZ19wbGF0Zm9ybSAoR0xSTyhkbF9wbGF0Zm9ybSkpOworLSAgICAgIGlmIChwbGF0Zm9ybSAhPSAodWludDY0X3QpIC0xKQorLQlwbGF0Zm9ybSA9IDFVTEwgPDwgcGxhdGZvcm07CistCistI2RlZmluZSBfRExfSFdDQVBfVExTX01BU0sgKDFMTCA8PCA2MykKKy0gICAgICB1aW50NjRfdCBod2NhcF9leGNsdWRlID0gfigoR0xSTyhkbF9od2NhcCkgJiBHTFJPKGRsX2h3Y2FwX21hc2spKQorLQkJCQkgfCBfRExfSFdDQVBfUExBVEZPUk0gfCBfRExfSFdDQVBfVExTX01BU0spOworLQorLSAgICAgIC8qIE9ubHkgYWNjZXB0IGh3Y2FwIGlmIGl0J3MgZm9yIHRoZSByaWdodCBwbGF0Zm9ybS4gICovCistI2RlZmluZSBIV0NBUF9DSEVDSyBcCistICAgICAgaWYgKGxpYi0+aHdjYXAgJiBod2NhcF9leGNsdWRlKQkJCQkJICAgICAgXAorLQljb250aW51ZTsJCQkJCQkJICAgICAgXAorLSAgICAgIGlmIChHTFJPKGRsX29zdmVyc2lvbikgJiYgbGliLT5vc3ZlcnNpb24gPiBHTFJPKGRsX29zdmVyc2lvbikpCSAgICAgIFwKKy0JY29udGludWU7CQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoX0RMX1BMQVRGT1JNU19DT1VOVAkJCQkJCSAgICAgIFwKKy0JICAmJiAobGliLT5od2NhcCAmIF9ETF9IV0NBUF9QTEFURk9STSkgIT0gMAkJCSAgICAgIFwKKy0JICAmJiAobGliLT5od2NhcCAmIF9ETF9IV0NBUF9QTEFURk9STSkgIT0gcGxhdGZvcm0pCQkgICAgICBcCistCWNvbnRpbnVlCistICAgICAgU0VBUkNIX0NBQ0hFIChjYWNoZV9uZXcpOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBUaGlzIGlzIHdoZXJlIHRoZSBzdHJpbmdzIHN0YXJ0LiAgKi8KKy0gICAgICBjYWNoZV9kYXRhID0gKGNvbnN0IGNoYXIgKikgJmNhY2hlLT5saWJzW2NhY2hlLT5ubGlic107CistCistICAgICAgLyogTm93IHdlIGNhbiBjb21wdXRlIGhvdyBsYXJnZSB0aGUgc3RyaW5nIHRhYmxlIGlzLiAgKi8KKy0gICAgICBjYWNoZV9kYXRhX3NpemUgPSAoY29uc3QgY2hhciAqKSBjYWNoZSArIGNhY2hlc2l6ZSAtIGNhY2hlX2RhdGE7CistCistI3VuZGVmIEhXQ0FQX0NIRUNLCistI2RlZmluZSBIV0NBUF9DSEVDSyBkbyB7fSB3aGlsZSAoMCkKKy0gICAgICBTRUFSQ0hfQ0FDSEUgKGNhY2hlKTsKKy0gICAgfQorLQorLSAgLyogUHJpbnQgb3VyIHJlc3VsdCBpZiB3YW50ZWQuICAqLworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsIDApCistICAgICAgJiYgYmVzdCAhPSBOVUxMKQorLSAgICBfZGxfZGVidWdfcHJpbnRmICgiICB0cnlpbmcgZmlsZT0lc1xuIiwgYmVzdCk7CistCistICByZXR1cm4gYmVzdDsKKy19CistCistI2lmbmRlZiBNQVBfQ09QWQorLS8qIElmIHRoZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBNQVBfQ09QWSB3ZSBjYW5ub3QgbGVhdmUgdGhlIGZpbGUgb3BlbgorLSAgIGFsbCB0aGUgdGltZSBzaW5jZSB0aGlzIHdvdWxkIGNyZWF0ZSBwcm9ibGVtcyB3aGVuIHRoZSBmaWxlIGlzIHJlcGxhY2VkLgorLSAgIFRoZXJlZm9yZSB3ZSBwcm92aWRlIHRoaXMgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIGZpbGUgYW5kIG9wZW4gaXQgYWdhaW4KKy0gICBvbmNlIG5lZWRlZC4gICovCistdm9pZAorLV9kbF91bmxvYWRfY2FjaGUgKHZvaWQpCisteworLSAgaWYgKGNhY2hlICE9IE5VTEwgJiYgY2FjaGUgIT0gKHN0cnVjdCBjYWNoZV9maWxlICopIC0xKQorLSAgICB7CistICAgICAgX19tdW5tYXAgKGNhY2hlLCBjYWNoZXNpemUpOworLSAgICAgIGNhY2hlID0gTlVMTDsKKy0gICAgfQorLX0KKy0jZW5kaWYKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZGwtY2FjaGUuaAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZGwtY2FjaGUuaAorQEAgLTEwMSw1ICsxMDEsNCBAQCBzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcKKyAoKChhZGRyKSArIF9fYWxpZ25vZl9fIChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcpIC0xKQlcCisgICYgKH4oX19hbGlnbm9mX18gKHN0cnVjdCBjYWNoZV9maWxlX25ldykgLSAxKSkpCisgCistZXh0ZXJuIGludCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpCistICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKytleHRlcm4gaW50IF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMik7CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2xkY29uZmlnLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLmMKK0BAIC0xNiw2ICsxNiw5IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2RlZmluZSBQUk9DSU5GT19DTEFTUyBzdGF0aWMKKyAjaW5jbHVkZSA8YWxsb2NhLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KK0BAIC0zOSwxMCArNDIsMjAgQEAKKyAjaW5jbHVkZSA8Z2xvYi5oPgorICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAKKy0jaW5jbHVkZSA8bGRjb25maWcuaD4KKy0jaW5jbHVkZSA8ZGwtY2FjaGUuaD4KKysjaW5jbHVkZSAibGRjb25maWcuaCIKKysjaW5jbHVkZSAiZGwtY2FjaGUuaCIKKysKKysjaW5jbHVkZSAiZGwtcHJvY2luZm8uaCIKKysKKysjaW5jbHVkZSAiYXJncC5oIgorKworKworKyNkZWZpbmUgU1lTQ09ORkRJUiAiL2V0YyIKKysjZGVmaW5lIExJQkRJUiAiL3Vzci9saWIiCisrI2RlZmluZSBTTElCRElSICIvbGliIgorKyMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKysjZGVmaW5lIF8obXNnKSBtc2cKKyAKKy0jaW5jbHVkZSA8ZGwtcHJvY2luZm8uaD4KKyAKKyAjaWZkZWYgX0RMX0ZJUlNUX1BMQVRGT1JNCisgIyBkZWZpbmUgX0RMX0ZJUlNUX0VYVFJBIChfRExfRklSU1RfUExBVEZPUk0gKyBfRExfUExBVEZPUk1TX0NPVU5UKQorQEAgLTU1LDcgKzY4LDcgQEAKKyAjZW5kaWYKKyAKKyAvKiBHZXQgbGliYyB2ZXJzaW9uIG51bWJlci4gICovCistI2luY2x1ZGUgPHZlcnNpb24uaD4KKysjaW5jbHVkZSAidmVyc2lvbi5oIgorIAorICNkZWZpbmUgUEFDS0FHRSBfbGliY19pbnRsX2RvbWFpbm5hbWUKKyAKK0BAIC0xNTIsOCArMTY1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zWworICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwIH0KKyB9OworIAorLSNkZWZpbmUgUFJPQ0lORk9fQ0xBU1Mgc3RhdGljCistI2luY2x1ZGUgPGRsLXByb2NpbmZvLmM+CisrLy8jZGVmaW5lIFBST0NJTkZPX0NMQVNTIHN0YXRpYworKy8vI2luY2x1ZGUgPGRsLXByb2NpbmZvLmM+CisgCisgLyogU2hvcnQgZGVzY3JpcHRpb24gb2YgcHJvZ3JhbS4gICovCisgc3RhdGljIGNvbnN0IGNoYXIgZG9jW10gPSBOXygiQ29uZmlndXJlIER5bmFtaWMgTGlua2VyIFJ1biBUaW1lIEJpbmRpbmdzLiIpOworQEAgLTI5MSw2ICszMDQsNyBAQCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyCisgICByZXR1cm4gMDsKKyB9CisgCisrI2RlZmluZSBSRVBPUlRfQlVHU19UTyAibWFpbGluZyBsaXN0IDogcG9reUB5b2N0b3Byb2plY3Qub3JnIgorIC8qIFByaW50IGJ1Zy1yZXBvcnRpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGhlbHAgbWVzc2FnZS4gICovCisgc3RhdGljIGNoYXIgKgorIG1vcmVfaGVscCAoaW50IGtleSwgY29uc3QgY2hhciAqdGV4dCwgdm9pZCAqaW5wdXQpCitAQCAtMzE1LDcgKzMyOSw3IEBAIEZvciBidWcgcmVwb3J0aW5nIGluc3RydWN0aW9ucywgcGxlYXNlIHMKKyBzdGF0aWMgdm9pZAorIHByaW50X3ZlcnNpb24gKEZJTEUgKnN0cmVhbSwgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorIHsKKy0gIGZwcmludGYgKHN0cmVhbSwgImxkY29uZmlnICVzJXNcbiIsIFBLR1ZFUlNJT04sIFZFUlNJT04pOworKyAgZnByaW50ZiAoc3RyZWFtLCAibGRjb25maWcgKEhhY2tlZCBQb2t5IFZlcnNpb24pXG4iKTsKKyAgIGZwcmludGYgKHN0cmVhbSwgZ2V0dGV4dCAoIlwKKyBDb3B5cmlnaHQgKEMpICVzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuXAorIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG5cCitAQCAtMTIzMyw2ICsxMjQ3LDcgQEAgc2V0X2h3Y2FwICh2b2lkKQorICAgICBod2NhcF9tYXNrID0gc3RydG91bCAobWFzaywgTlVMTCwgMCk7CisgfQorIAorK2NvbnN0IGNoYXIgX2xpYmNfaW50bF9kb21haW5uYW1lW10gPSAibGliYyI7CisgCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCitAQCAtMjIsNiArMjIsOSBAQAorICAgIGRldmVsb3BtZW50IHZlcnNpb24uICBCZXNpZGVzIHRoZSBzaW1wbGlmaWNhdGlvbiwgaXQgaGFzIGFsc28gYmVlbgorICAgIG1vZGlmaWVkIHRvIHJlYWQgc29tZSBvdGhlciBmaWxlIGZvcm1hdHMuICAqLworIAorKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKyAjaW5jbHVkZSA8YS5vdXQuaD4KKyAjaW5jbHVkZSA8ZWxmLmg+CisgI2luY2x1ZGUgPGVycm9yLmg+CitAQCAtMzUsNyArMzgsOSBAQAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxnbnUvbGliLW5hbWVzLmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrCisrI2RlZmluZSBfKG1zZykgbXNnCisgCisgI2RlZmluZSBFbGYzMl9DTEFTUyBFTEZDTEFTUzMyCisgI2RlZmluZSBFbGY2NF9DTEFTUyBFTEZDTEFTUzY0CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS94c3RyZHVwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcveHN0cmR1cC5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS94c3RyZHVwLmMKK0BAIC0xNiwxNSArMTYsMTAgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworIAorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgX0xJQkMKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistI2VuZGlmCisgdm9pZCAqeG1hbGxvYyAoc2l6ZV90IG4pIF9fVEhST1c7CisgY2hhciAqeHN0cmR1cCAoY2hhciAqc3RyaW5nKSBfX1RIUk9XOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnX2F1eC1jYWNoZV9wYXRoX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2JjNDExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NvbWluZyBmcm9tIHRoaXMgYnVnOiBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTExMTQ5CisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+MjAxMS8wMy8yOQorCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2xkY29uZmlnLmMJCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5jCQorQEAgLTEzNTksMTQgKzEzNTksOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgICBjb25zdCBjaGFyICphdXhfY2FjaGVfZmlsZSA9IF9QQVRIX0xEQ09ORklHX0FVWF9DQUNIRTsKKyAgIGlmIChvcHRfY2hyb290KQorLSAgICB7CistICAgICAgYXV4X2NhY2hlX2ZpbGUgPSBjaHJvb3RfY2Fub24gKG9wdF9jaHJvb3QsIGF1eF9jYWNoZV9maWxlKTsKKy0gICAgICBpZiAoYXV4X2NhY2hlX2ZpbGUgPT0gTlVMTCkKKy0JZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oIkNhbid0IG9wZW4gY2FjaGUgZmlsZSAlc1xuIiksCistCSAgICAgICBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEUpOworLSAgICB9CisrICAgIGF1eF9jYWNoZV9maWxlID0gY2hyb290X2Nhbm9uIChvcHRfY2hyb290LCBhdXhfY2FjaGVfZmlsZSk7CisgCistICBpZiAoISBvcHRfaWdub3JlX2F1eF9jYWNoZSkKKysgIGlmICghIG9wdF9pZ25vcmVfYXV4X2NhY2hlICYmIGF1eF9jYWNoZV9maWxlKQorICAgICBsb2FkX2F1eF9jYWNoZSAoYXV4X2NhY2hlX2ZpbGUpOworICAgZWxzZQorICAgICBpbml0X2F1eF9jYWNoZSAoKTsKK0BAIC0xMzc2LDcgKzEzNzEsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICBpZiAob3B0X2J1aWxkX2NhY2hlKQorICAgICB7CisgICAgICAgc2F2ZV9jYWNoZSAoY2FjaGVfZmlsZSk7CistICAgICAgc2F2ZV9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKysgICAgICBpZiAoYXV4X2NhY2hlX2ZpbGUpCisrICAgICAgICBzYXZlX2F1eF9jYWNoZSAoYXV4X2NhY2hlX2ZpbGUpOworICAgICB9CisgCisgICByZXR1cm4gMDsKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlXzIuMTIuMS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZV8yLjEyLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjMGIxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZV8yLjEyLjEuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJBIHN0YW5kYWxvbmUgbmF0aXZlIGxkY29uZmlnIGJ1aWxkIgorCitMSUNFTlNFID0gIkdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtTfS9sZGNvbmZpZy5jO2VuZGxpbmU9MTc7bWQ1PTFkMTVmMjA5MzdjMDU1Y2I1ZGUyMzI5YTRjMDU0Mzk5IgorCitTUkNfVVJJID0gImZpbGU6Ly9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGRjb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzMyYW5kNjRiaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmxhZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuZXNzLWhlYWRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGNvbmZpZy1kZWZhdWx0LXRvLWFsbC1tdWx0aWxpYi1kaXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbi1uZXNzX2hhbmRsaW5nX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2ggXAorIgorCitQUiA9ICJyMiIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vJHtQfToiCisKK2luaGVyaXQgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS8ke1BOfS0ke1BWfSIKKworZG9fY29tcGlsZSAoKSB7CisJJENDIGxkY29uZmlnLmMgLXN0ZD1nbnU5OSBjaHJvb3RfY2Fub24uYyB4bWFsbG9jLmMgeHN0cmR1cC5jIGNhY2hlLmMgcmVhZGxpYi5jICAtSS4gZGwtY2FjaGUuYyAtbyBsZGNvbmZpZworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9LworCWluc3RhbGwgbGRjb25maWcgJHtEfS8ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9mdW5jcyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzg1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpAQCAtMCwwICsxLDQ3NCBAQAorYTY0bAorYWJzCithY2Nlc3MKK19fYWRqdGltZXgKK2FsYXJtCithbHBoYXNvcnQKK2FyZ3pfYXBwZW5kCitfX2FyZ3pfY291bnQKK2FyZ3pfY3JlYXRlX3NlcAorYXJnel9pbnNlcnQKK19fYXJnel9uZXh0Cithcmd6X25leHQKK19fYXJnel9zdHJpbmdpZnkKK2FyZ3pfc3RyaW5naWZ5Cithc3ByaW50ZgorYXRleGl0CithdG9mCithdG9pCitiY21wCitiY29weQorYmluZHJlc3Zwb3J0CitiaW5kX3RleHRkb21haW5fY29kZXNldAorYnRvd2MKK2J6ZXJvCitjYWxsb2MKK2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUKK2NhdGdldHMKK2NmZ2V0b3NwZWVkCitjZnNldGlzcGVlZAorY2ZzZXRzcGVlZAorY2htb2QKK2Nob3duCitjaHJvb3QKK2Nsb2NrCitjbG9zZQorY2xvc2VkaXIKK2Nsb3NlbG9nCitjb25mc3RyCitjb25uZWN0CitkYWVtb24KK2RjZ2V0dGV4dAorZGlmZnRpbWUKK2RpcmZkCitkaXJuYW1lCitkbmdldHRleHQKK2R1cDIKK2VjdnQKK2VuZGdyZW50CitlbmRtbnRlbnQKK2VuZHB3ZW50CitlbmR1dGVudAorZW5kdXR4ZW50CitlcG9sbF9jdGwKK2VycgorZXRoZXJfaG9zdHRvbgorZXRoZXJfbnRvaG9zdAorZXVpZGFjY2VzcworZXhlY3YKK2ZjaGRpcgorZmNobW9kCitmY2htb2RhdAorZmNob3duCitmY2hvd25hdAorZmNudGwKK2ZjdnQKK2ZkYXRhc3luYworZmRvcGVuZGlyCitmZW9mX3VubG9ja2VkCitmZ2V0c191bmxvY2tlZAorZmdldHhhdHRyCitmaW5pdGUKK2ZsaXN0eGF0dHIKK2Zsb2NrCitmbG9ja2ZpbGUKK2ZubWF0Y2gKK2ZvcmsKK2ZwYXRoY29uZgorX19mcGVuZGluZworZnByaW50ZgorZnJlZQorZnJlZWFkZHJpbmZvCitmcmVlaWZhZGRycworZnNlZWtvCitfX2ZzZXRsb2NraW5nCitmc2V0eGF0dHIKK2ZzdGF0NjQKK2ZzdGF0Citmc3RhdGZzCitmc3luYworZnRlbGxvCitmdGltZQorZnRydW5jYXRlCitmdW5sb2NrZmlsZQorZnV0aW1lcworZnV0aW1lc2F0CitnYWlfc3RyZXJyb3IKK2djdnQKK2dldGFkZHJpbmZvCitnZXRjX3VubG9ja2VkCitnZXRjd2QKK2dldGRlbGltCitnZXRkb21haW5uYW1lCitnZXRkdGFibGVzaXplCitnZXRlZ2lkCitnZXRlbnYKK2dldGV1aWQKK2dldGdpZAorZ2V0Z3JlbnQKK2dldGdyZW50X3IKK2dldGdyZ2lkX3IKK2dldGdybmFtCitnZXRncm5hbV9yCitnZXRncm91cGxpc3QKK2dldGdyb3VwcworZ2V0aG9zdGJ5YWRkcl9yCitnZXRob3N0YnluYW1lMgorZ2V0aG9zdGJ5bmFtZQorZ2V0aG9zdGJ5bmFtZV9yCitnZXRob3N0ZW50CitnZXRob3N0aWQKK2dldGhvc3RuYW1lCitnZXRpZmFkZHJzCitnZXRsaW5lCitnZXRsb2FkYXZnCitnZXRtbnRlbnQKK2dldG1zZworZ2V0bmFtZWluZm8KK2dldG5ldGJ5YWRkcl9yCitnZXRuZXRncmVudF9yCitnZXRvcHQKK2dldG9wdF9sb25nCitnZXRvcHRfbG9uZ19vbmx5CitnZXRwYWdlc2l6ZQorZ2V0cGFzcworZ2V0cGVlcm5hbWUKK2dldHBncnAKK2dldHBpZAorZ2V0cHBpZAorZ2V0cHJvdG9lbnRfcgorZ2V0cHdlbnQKK2dldHB3ZW50X3IKK2dldHB3bmFtCitnZXRwd25hbV9yCitnZXRwd3VpZAorZ2V0cHd1aWRfcgorZ2V0cmVzdWlkCitnZXRybGltaXQKK2dldHJ1c2FnZQorZ2V0c2VydmJ5bmFtZQorZ2V0c2VydmJ5bmFtZV9yCitnZXRzZXJ2Ynlwb3J0X3IKK2dldHNlcnZlbnQKK2dldHNlcnZlbnRfcgorZ2V0c3BuYW0KK2dldHNwbmFtX3IKK2dldHRpbWVvZmRheQorZ2V0dHR5ZW50CitnZXR0dHluYW0KK2dldHVpZAorZ2V0dXNlcnNoZWxsCitnZXR1dGVudAorZ2V0dXRpZAorZ2V0dXRsaW5lCitnZXR1dG1wCitnZXR1dG1weAorZ2V0dXR4ZW50CitnZXR1dHhpZAorZ2V0dXR4bGluZQorZ2V0d2QKK2dldHhhdHRyCitnbG9iCitnbXRpbWUKK2dtdGltZV9yCitncmFudHB0Citncm91cF9tZW1iZXIKK2hlcnJvcgoraHN0cmVycm9yCitpY29udgoraWNvbnZfb3BlbgoraWZfZnJlZW5hbWVpbmRleAoraWZfaW5kZXh0b25hbWUKK2lmX25hbWVpbmRleAoraWZfbmFtZXRvaW5kZXgKK2luZGV4CitpbmV0X2FkZHIKK2luZXRfYXRvbgoraW5ldF9udG9hCitpbmV0X250b3AKK2luZXRfcHRvbgoraW5pdGdyb3VwcworaW5uZXRncgoraXJ1c2Vyb2sKK2lzYXNjaWkKK2lzYXR0eQoraXNibGFuaworaXNncmFwaAoraXNpbmYKK2lzbmFuCitpc3ByaW50Citpc3NwYWNlCitpc3dhbG51bQoraXN3Y250cmwKK2lzd2N0eXBlCitpc3dwcmludAoraXN3c3BhY2UKK2lzd3VwcGVyCitpc3hkaWdpdAora2lsbAora2lsbHBnCitsY2hvd24KK2xja3B3ZGYKK2xnZXR4YXR0cgorbGluaworbGlzdHhhdHRyCitsbGlzdHhhdHRyCitsb2NhbHRpbWUKK2xvY2FsdGltZV9yCitsb2NrZgorbHJhbmQ0OAorbHNlYXJjaAorbHNlZWs2NAorbHNldHhhdHRyCitsc3RhdAorbWFsbGluZm8KK21hbGxvYworbWJsZW4KK21icmxlbgorbWJydG93YworbWJzaW5pdAorbWJzcnRvd2NzCittYnRvd2MKK21lbWFsaWduCittZW1jaHIKK21lbWNtcAorbWVtY3B5CittZW1tb3ZlCittZW1wY3B5CittZW1yY2hyCittZW1zZXQKK21rZGlyCitta2RpcmF0Citta2R0ZW1wCitta2ZpZm8KK21rbm9kCitta3N0ZW1wNjQKK21rc3RlbXAKK21rdGltZQorbWxvY2sKK21tYXAKK210cmFjZQorbXVubG9jaworbXVubWFwCituYW5vc2xlZXAKK25pY2UKK25sX2xhbmdpbmZvCitudHBfYWRqdGltZQorbnRwX2dldHRpbWUKK19vYnN0YWNrX2ZyZWUKK29uX2V4aXQKK29wZW42NAorb3Blbgorb3BlbmF0CitvcGVuZGlyCitvcGVubG9nCitwYXRoY29uZgorcGlwZQorcG9sbAorcG9wZW4KK3Bvc2l4X21lbWFsaWduCitwcmN0bAorcHJlYWQKK3ByaW50ZgorX19wcm9nbmFtZQorcHNlbGVjdAorcHRocmVhZF9tdXRleF9sb2NrCitwdHNuYW1lCitwdXRlbnYKK3B1dGdyZW50CitwdXRwd2VudAorcHV0c3BlbnQKK3B1dHV0bGluZQorcHV0dXR4bGluZQorcHV0d2MKK3B3cml0ZQorcXNvcnQKK3JhaXNlCityYW5kCityYW5kb20KK3JhbmRfcgorcmVhZAorcmVhZGRpcgorcmVhZGRpcl9yCityZWFkbGluaworcmVhbGxvYworcmVhbHBhdGgKK3JlX2NvbXAKK3JlY3Ztc2cKK3JlX2V4ZWMKK3JlZ2NvbXAKK3JlZ2V4ZWMKK3JlbW92ZQorcmVuYW1lCityZV9zZWFyY2gKK3JtZGlyCitycG1hdGNoCitycmVzdnBvcnRfYWYKK3J1c2Vyb2sKK3J1c2Vyb2tfYWYKK3NicmsKK3NjYW5kaXIKK3NjaGVkX3NldHNjaGVkdWxlcgorc2NoZWRfeWllbGQKK19fc2VjdXJlX2dldGVudgorc2VsZWN0CitzZW1jdGwKK3NlbWdldAorc2VuZG1zZworc2V0YnVmCitzZXRidWZmZXIKK3NldGVnaWQKK3NldGVudgorc2V0ZXVpZAorc2V0Z2lkCitzZXRncm91cHMKK3NldGhvc3RuYW1lCitzZXRpdGltZXIKK19zZXRqbXAKK3NldGptcAorc2V0bGluZWJ1Zgorc2V0bG9jYWxlCitzZXRtbnRlbnQKK3NldHBnaWQKK3NldHBncnAKK3NldHByaW9yaXR5CitzZXRyZWdpZAorc2V0cmVzZ2lkCitzZXRyZXN1aWQKK3NldHJldWlkCitzZXRybGltaXQKK3NldHNpZAorc2V0c29ja29wdAorc2V0dGltZW9mZGF5CitzZXR1aWQKK3NldHV0ZW50CitzZXR1dHhlbnQKK3NldHZidWYKK3NldHhhdHRyCitzZ2V0c3BlbnQKK3NobWF0CitzaG1jdGwKK3NobWR0CitzaG1nZXQKK3NodXRkb3duCitzaWdhY3Rpb24KK3NpZ2FkZHNldAorc2lnYWx0c3RhY2sKK3NpZ2Jsb2NrCitzaWdlbXB0eXNldAorc2lnaG9sZAorc2lnaW50ZXJydXB0CitzaWduYWwKK3NpZ3Byb2NtYXNrCitzaWdzZXQKK3NpZ3NldG1hc2sKK3NpZ3N0YWNrCitzaWdzdXNwZW5kCitzaWd2ZWMKK3NucHJpbnRmCitzb2NrZXQKK3NvY2tldHBhaXIKK3NwcmludGYKK3NyYW5kNDgKK3NyYW5kCitzcmFuZG9tCitzc2NhbmYKK3N0YXQKK3N0YXRmcworc3RhdHZmcworc3RpbWUKK3N0cGNweQorc3RyY2FzZWNtcAorc3RyY2FzZXN0cgorc3RyY2hyCitzdHJjaHJudWwKK3N0cmNtcAorc3RyY3Nwbgorc3RyZHVwCitzdHJlcnJvcgorc3RyZXJyb3Jfcgorc3RyZnRpbWUKK3N0cmxlbgorc3RybmNhc2VjbXAKK3N0cm5jbXAKK3N0cm5kdXAKK3N0cm5sZW4KK3N0cnBicmsKK3N0cnB0aW1lCitzdHJyY2hyCitzdHJzZXAKK3N0cnNpZ25hbAorc3Ryc3BuCitzdHJzdHIKK3N0cnRvZAorc3RydG9pbWF4CitzdHJ0b2tfcgorc3RydG9sCitzdHJ0b2xsCitzdHJ0b3VsCitzdHJ0b3VsbAorc3RydG91bWF4CitzdHJ2ZXJzY21wCitzdHJ4ZnJtCitzeW1saW5rCitzeW5jCitzeXNjb25mCitzeXNjdGwKK3N5c2luZm8KK3N5c2xvZworX3N5c19zaWdsaXN0CitzeXNfc2lnbGlzdAorc3lzdGVtCit0Y2dldGF0dHIKK3RjZ2V0cGdycAordGNzZXRhdHRyCit0Y3NldHBncnAKK3RpbWUKK3RpbWVnbQordGltZXMKK3RpbWV6b25lCit0bXBuYW0KK3Rvd2xvd2VyCit0b3d1cHBlcgordHJ1bmNhdGUKK3RzZWFyY2gKK3R0eW5hbWUKK3R6c2V0Cit1bGltaXQKK3VtYXNrCit1bmFtZQordW5saW5rCit1bnNldGVudgordW5zaGFyZQordXBkd3RtcAordXBkd3RtcHgKK3VzbGVlcAordXN0YXQKK3V0aW1lCit1dGltZXMKK3V0bXBuYW1lCit1dG1weG5hbWUKK3ZhbGxvYwordmFzcHJpbnRmCit2ZXJyeAordmZvcmsKK3ZmcHJpbnRmCit2ZnNjYW5mCit2aGFuZ3VwCit2cHJpbnRmCit2c25wcmludGYKK3ZzcHJpbnRmCit3YWl0Mword2FpdDQKK3dhaXRwaWQKK3djcnRvbWIKK3djc2NvbGwKK3djc2R1cAord2NzbGVuCit3Y3RvYgord2N0b21iCit3Y3R5cGUKK3djd2lkdGgKK3dtZW1jaHIKK3dtZW1jcHkKK3dtZW1wY3B5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDlhYjUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpAQCAtMCwwICsxLDE1NiBAQAorYWlvLmgKK2FsbG9jYS5oCithcmd6LmgKK2FycGEvaW5ldC5oCithcnBhL25hbWVzZXIuaAorYXNtL2J5dGVvcmRlci5oCithc20vaW9jdGxzLmgKK2FzbS9wYWdlLmgKK2FzbS90eXBlcy5oCithc3NlcnQuaAorYnl0ZXN3YXAuaAorY3J5cHQuaAorY3R5cGUuaAorZGlyZW50LmgKK2RsZmNuLmgKK2VsZi5oCitlbmRpYW4uaAorZXJyLmgKK2Vycm5vLmgKK2V4ZWNpbmZvLmgKK2ZjbnRsLmgKK2ZlYXR1cmVzLmgKK2Zsb2F0LmgKK2ZzdGFiLmgKK2Z0dy5oCitnZXRvcHQuaAorZ2xvYi5oCitncnAuaAoraWNvbnYuaAoraWZhZGRycy5oCitpbnR0eXBlcy5oCitsYW5naW5mby5oCitsYXN0bG9nLmgKK2xpYmdlbi5oCitsaWJpbnRsLmgKK2xpbWl0cy5oCitsaW51eC9jYXBhYmlsaXR5LmgKK2xpbnV4L2ZkLmgKK2xpbnV4L2ZzLmgKK2xpbnV4L2hheWVzZXNwLmgKK2xpbnV4L2hkcmVnLmgKK2xpbnV4L2ljbXAuaAorbGludXgvaW42LmgKK2xpbnV4L2pveXN0aWNrLmgKK2xpbnV4L3B0cmFjZS5oCitsaW51eC9zZXJpYWwuaAorbGludXgvc29ueXBpLmgKK2xpbnV4L3VuaXN0ZC5oCitsaW51eC91dHNuYW1lLmgKK2xpbnV4L3ZlcnNpb24uaAorbG9jYWxlLmgKK21hbGxvYy5oCittYXRoLmgKK21jaGVjay5oCittZW1vcnkuaAorbW50ZW50LmgKK21xdWV1ZS5oCituZXRkYi5oCituZXQvaWYuaAorbmV0aW5ldC9ldGhlci5oCituZXRpbmV0L2luLmgKK25ldGluZXQvaXA2LmgKK25ldGluZXQvaXAuaAorbmV0aW5ldC90Y3AuaAorbmV0aW5ldC91ZHAuaAorbmV0aXB4L2lweC5oCituZXQvcm91dGUuaAorcGF0aHMuaAorcG9sbC5oCitwdGhyZWFkLmgKK3B0eS5oCitwd2QuaAorcmVnZXguaAorcmVzb2x2LmgKK3JwYy9ycGMuaAorcnBjL3R5cGVzLmgKK3NjaGVkLmgKK3Njc2kvc2NzaS5oCitzZWFyY2guaAorc2VtYXBob3JlLmgKK3NldGptcC5oCitzZ3R0eS5oCitzaGFkb3cuaAorc2lnbmFsLmgKK3N0ZGFyZy5oCitzdGRib29sLmgKK3N0ZGMKK3N0ZGRlZi5oCitzdGRpbnQuaAorc3RkaW8uaAorc3RkbGliLmgKK3N0cmluZy5oCitzdHJpbmdzLmgKK3N0cm9wdHMuaAorc3lzL2JpdHlwZXMuaAorc3lzL2NkZWZzLmgKK3N5cy9kaXIuaAorc3lzL2Vwb2xsLmgKK3N5c2V4aXRzLmgKK3N5cy9mY250bC5oCitzeXMvZmlsZS5oCitzeXMvZnN1aWQuaAorc3lzL2lvY3RsLmgKK3N5cy9pcGMuaAorc3lzbG9nLmgKK3N5cy9tbWFuLmgKK3N5cy9tb3VudC5oCitzeXMvbXRpby5oCitzeXMvcGFyYW0uaAorc3lzL3BvbGwuaAorc3lzL3ByY3RsLmgKK3N5cy9wdHJhY2UuaAorc3lzL3F1ZXVlLmgKK3N5cy9yZWcuaAorc3lzL3Jlc291cmNlLmgKK3N5cy9zZWxlY3QuaAorc3lzL3NlbS5oCitzeXMvc2htLmgKK3N5cy9zaWduYWwuaAorc3lzL3NvY2tldC5oCitzeXMvc29ja2V0dmFyLmgKK3N5cy9zb3VuZGNhcmQuaAorc3lzL3N0YXRmcy5oCitzeXMvc3RhdC5oCitzeXMvc3RhdHZmcy5oCitzeXMvc3Ryb3B0cy5oCitzeXMvc3dhcC5oCitzeXMvc3lzY3RsLmgKK3N5cy9zeXNpbmZvLmgKK3N5cy9zeXNtYWNyb3MuaAorc3lzL3Rlcm1pb3MuaAorc3lzL3RpbWViLmgKK3N5cy90aW1lLmgKK3N5cy90aW1lcy5oCitzeXMvdGltZXguaAorc3lzL3R5cGVzLmgKK3N5cy91aW8uaAorc3lzL3VuLmgKK3N5cy91bmlzdGQuaAorc3lzL3VzZXIuaAorc3lzL3V0c25hbWUuaAorc3lzL3Zmcy5oCitzeXMvd2FpdC5oCit0ZXJtaW8uaAordGVybWlvcy5oCit0aW1lLmgKK3R0eWVudC5oCit1bGltaXQuaAordW5pc3RkLmgKK3VzdGF0LmgKK3V0aW1lLmgKK3V0bXAuaAordXRtcHguaAordmFsdWVzLmgKK3djaGFyLmgKK3djdHlwZS5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL3R5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGJkODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy90eXBlcwpAQCAtMCwwICsxLDIxIEBACitjaGFyCitjaGFyICoKK2RvdWJsZQorZmxvYXQKK2ludAorbG9uZworbG9uZyBkb3VibGUKK2xvbmcgaW50Citsb25nIGxvbmcKK2xvbmcgbG9uZyBpbnQKK3Nob3J0CitzaG9ydCBpbnQKK3NpZ25lZCBjaGFyCit1bnNpZ25lZCBjaGFyCit1bnNpZ25lZCBpbnQKK3Vuc2lnbmVkIGxvbmcKK3Vuc2lnbmVkIGxvbmcgaW50Cit1bnNpZ25lZCBsb25nIGxvbmcgaW50Cit1bnNpZ25lZCBzaG9ydAordW5zaWduZWQgc2hvcnQgaW50Cit2b2lkICoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzLzk5X25ldHdvcmsgYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy85OV9uZXR3b3JrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZDU4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy85OV9uZXR3b3JrCkBAIC0wLDAgKzEgQEAKK2Qgcm9vdCByb290IDA3NTUgL3J1bi9uZXR3b3JrIG5vbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9kZWZuMi1jLW1hbi1kb24tdC1yZWx5LW9uLWRwa2ctYXJjaGl0ZWN0dXJlLXRvLXNldC1hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGQ5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9kZWZuMi1jLW1hbi1kb24tdC1yZWx5LW9uLWRwa2ctYXJjaGl0ZWN0dXJlLXRvLXNldC1hLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gN2FmOWRiNzQ4OTc0Y2IzYTJjNmVmOGY5ZTAzZDdkYjFmOWY4ZWUxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCA2IEF1ZyAyMDE0IDE0OjU0OjEyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBkZWZuMltjfG1hbl06IGRvbid0IHJlbHkgb24gZHBrZy1hcmNoaXRlY3R1cmUgdG8gc2V0IGFyY2gKKworSW4geW9jdG8gd2UnbGwgYWx3YXlzIGJlIGNyb3NzIGNvbXBpbGluZywgYW5kIHdlJ2xsIGFsd2F5cworYmUgYnVpbGRpbmcgb24gbGludXggZm9yIGxpbnV4ICh2cy4gKkJTRCwgaHVyZCwgZXRjLikKKworV2l0aG91dCB0aGlzIHRoZSBhcmNoIGlzIG5vdCBkZXRlY3RlZCwgYnV0IGl0IGRvZXNuJ3QgZXJyb3IKK291dCwgYW5kIGhlbmNlIHlvdSBnZXQgdXNlbGVzcyBiaW5hcmllcyB0aGF0IGRvbid0IGtub3cgYW55CithcmNoIHNwZWNpZmljIG1ldGhvZHMsIGFuZCB0aGUgZW5kIHJlc3VsdCB3aWxsIGJlIHN0cmFuZ2VuZXNzCitsaWtlIHRoZSBsb29wYmFjayBkZXZpY2Ugbm90IGJlaW5nIGNvbmZpZ3VyZWQvZW5hYmxlZC4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBkZWZuMmMucGwgICB8IDYgKysrLS0tCisgZGVmbjJtYW4ucGwgfCA2ICsrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGVmbjJjLnBsIGIvZGVmbjJjLnBsCitpbmRleCBjNDQ5ZGUyZjNkMWMuLjM4ODQ1ZTM3NGM3NiAxMDA3NTUKKy0tLSBhL2RlZm4yYy5wbAorKysrIGIvZGVmbjJjLnBsCitAQCAtMiw5ICsyLDkgQEAKKyAKKyB1c2Ugc3RyaWN0OworIAorLW15ICRERUJfSE9TVF9BUkNIX09TID0gYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSF9PU2A7CistCistJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworKyNteSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworKyMkREVCX0hPU1RfQVJDSF9PUyA9fiBzL1xuLy87CisrbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSJsaW51eCI7CisgCisgIyBkZWNsYXJhdGlvbnMKKyBteSAkYWRkcmVzc19mYW1pbHkgPSAiIjsKK2RpZmYgLS1naXQgYS9kZWZuMm1hbi5wbCBiL2RlZm4ybWFuLnBsCitpbmRleCA2ZGRjZmRkNGZlNjguLmM5YzRkZDA0NjU5NyAxMDA3NTUKKy0tLSBhL2RlZm4ybWFuLnBsCisrKysgYi9kZWZuMm1hbi5wbAorQEAgLTIsOSArMiw5IEBACisgCisgdXNlIHN0cmljdDsKKyAKKy1teSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworLQorLSRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKysjbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKysjJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworK215ICRERUJfSE9TVF9BUkNIX09TID0gImxpbnV4IjsKKyAKKyAjIGRlY2xhcmF0aW9ucworIG15ICRsaW5lOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmMzUyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gNzQxNTJhYzc0YTNlMWVhMGYzYmUyOTJhYTFlZWNhNWFkMWZlNjljMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCA2IEF1ZyAyMDE0IDE1OjEyOjExIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBpbmV0WzZdLmRlZm46IGZpeCBpbnZlcnRlZCBjaGVja3MgZm9yIGxvb3BiYWNrCisKK0NvbXBhcmVkIHRvIHRoZSBodXJkIGxpbmsuZGVmbiBmb3IgbG9vcGJhY2ssIHdlIHNlZSB0aGVzZQorYXJlIGludmVydGVkLCBtZWFuaW5nIHRoYXQgeW91IHdvdWxkIG9ubHkgYmUgYWJsZSB0byBjb25maWd1cmUKK2EgbG9vcGJhY2sgZGV2aWNlIHRoYXQgd2FzIF9ub3RfIG5hbWVkICJsbyIgKHVubGlrZWx5IHRvIGV4aXN0KS4KKworVGhlIHJlc3VsdCB3YXMgdGhhdCB3ZSdkIHVwZGF0ZSAvcnVuL25ldHdvcmsvaWZzdGF0ZSBmb3IgImxvIgorYnV0IG5ldmVyIGFjdHVhbGx5IGRvIGFueXRoaW5nIGZvciB1cC9kb3duLCBhcyBzaG93biBiZWxvdzoKKworcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgLXMKK0lmYWNlICAgTVRVIE1ldCAgIFJYLU9LIFJYLUVSUiBSWC1EUlAgUlgtT1ZSICAgIFRYLU9LIFRYLUVSUiBUWC1EUlAgVFgtT1ZSIEZsZworZXRoMCAgICAgICAxNTAwIDAgICA3NzM2MzI5ICAgICAgMCAgIDIwMTYgMCAgICAgICA1Mjg5NDIyICAgICAgMCAgICAgIDAgICAgICAwIEJNUlUKK2xvICAgICAgICA2NTUzNiAwICAgICAgICAxOCAgICAgIDAgICAgICAwIDAgICAgICAgICAgICAxOCAgICAgIDAgICAgICAwICAgICAgMCBMUlUKK3Jvb3RAbG9jYWxob3N0On4jIGlmZG93biBsbworcm9vdEBsb2NhbGhvc3Q6fiMgZWNobyAkPworMAorcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgLXMKK0lmYWNlICAgTVRVIE1ldCAgIFJYLU9LIFJYLUVSUiBSWC1EUlAgUlgtT1ZSICAgIFRYLU9LIFRYLUVSUiBUWC1EUlAgVFgtT1ZSIEZsZworZXRoMCAgICAgICAxNTAwIDAgICA3NzM2NDA2ICAgICAgMCAgIDIwMTYgMCAgICAgICA1Mjg5NDU1ICAgICAgMCAgICAgIDAgICAgICAwIEJNUlUKK2xvICAgICAgICA2NTUzNiAwICAgICAgICAxOCAgICAgIDAgICAgICAwIDAgICAgICAgICAgICAxOCAgICAgIDAgICAgICAwICAgICAgMCBMUlUKK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIGxvIGRvd24KK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIC1zCitJZmFjZSAgIE1UVSBNZXQgICBSWC1PSyBSWC1FUlIgUlgtRFJQIFJYLU9WUiAgICBUWC1PSyBUWC1FUlIgVFgtRFJQIFRYLU9WUiBGbGcKK2V0aDAgICAgICAgMTUwMCAwICAgNzczNjQ3NCAgICAgIDAgICAyMDE2IDAgICAgICAgNTI4OTQ4MSAgICAgIDAgICAgICAwICAgICAgMCBCTVJVCityb290QGxvY2FsaG9zdDp+IworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluZXQuZGVmbiAgfCAxMiArKysrKystLS0tLS0KKyBpbmV0Ni5kZWZuIHwgIDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5ldC5kZWZuIGIvaW5ldC5kZWZuCitpbmRleCBiMTc2YWI0ZWQwM2UuLjVmZGZiMTRhMGUxYyAxMDA2NDQKKy0tLSBhL2luZXQuZGVmbgorKysrIGIvaW5ldC5kZWZuCitAQCAtNiwxMCArNiwxMCBAQCBtZXRob2QgbG9vcGJhY2sKKyAgICAgVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBJUHY0IGxvb3BiYWNrIGludGVyZmFjZS4KKyAKKyAgIHVwCistICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCistICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIGRvd24gaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIGlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCitAQCAtMjEyLDExICsyMTIsMTEgQEAgbWV0aG9kIGxvb3BiYWNrCisgCisgICB1cAorICAgICBpZmNvbmZpZyAlaWZhY2UlIDEyNy4wLjAuMSB1cCBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCisgICAgIGlmY29uZmlnICVpZmFjZSUgZG93biBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KK0BAIC0zNzEsMTEgKzM3MSwxMSBAQCBtZXRob2QgbG9vcGJhY2sKKyAKKyAgIHVwCisgICAgIGluZXR1dGlscy1pZmNvbmZpZyAtLWludGVyZmFjZSAlaWZhY2UlIC0tYWRkcmVzcyAxMjcuMC4wLjEgLS11cCBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCisgICAgIGluZXR1dGlscy1pZmNvbmZpZyAtLWludGVyZmFjZSAlaWZhY2UlIC0tZG93biBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KK2RpZmYgLS1naXQgYS9pbmV0Ni5kZWZuIGIvaW5ldDYuZGVmbgoraW5kZXggMDkzMjU1MzljZDAxLi40ZGY2NGFmZjM4Y2MgMTAwNjQ0CistLS0gYS9pbmV0Ni5kZWZuCisrKysgYi9pbmV0Ni5kZWZuCitAQCAtMzMsMTEgKzMzLDExIEBAIG1ldGhvZCBsb29wYmFjaworICAgZGVzY3JpcHRpb24KKyAgICAgVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBJUHY2IGxvb3BiYWNrIGludGVyZmFjZS4KKyAgIHVwCistICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSB1cCAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCistICAgIC1pcCBhZGRyIGFkZCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBhZGRyIGFkZCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisgICBkb3duCistICAgIC1pcCBhZGRyIGRlbCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorLSAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBhZGRyIGRlbCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vaWZ1cGRvd25fMC43LjQ4LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlYjg3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiaWZ1cGRvd246IGJhc2ljIGlmdXAgYW5kIGlmZG93biB1c2VkIGJ5IGluaXRzY3JpcHRzIgorREVTQ1JJUFRJT04gPSAiSGlnaCBsZXZlbCB0b29scyB0byBjb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIFwKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgdG9vbHMgaWZ1cCBhbmQgaWZkb3duIHdoaWNoIG1heSBiZSB1c2VkIHRvIFwKK2NvbmZpZ3VyZSAob3IsIHJlc3BlY3RpdmVseSwgZGVjb25maWd1cmUpIG5ldHdvcmsgaW50ZXJmYWNlcywgYmFzZWQgb24gXAordGhlIGZpbGUgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L3Bvb2wvbWFpbi9pL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xdWJ1bnR1NS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9kZWZuMi1jLW1hbi1kb24tdC1yZWx5LW9uLWRwa2ctYXJjaGl0ZWN0dXJlLXRvLXNldC1hLnBhdGNoIFwKKwkgICBmaWxlOi8vaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoIFwKKwkgICBmaWxlOi8vOTlfbmV0d29yayBcCisJICAiCisKK0VYVFJBX09FTUFLRSA9ICIiCisKKyMgbmVlZGVkIHNvIHdlIGRvbid0IGdldCBkZWZhdWx0IFM9IiR7V09SS0RJUn0vaWZ1cGRvd24tJHtQVn0iCitTID0gIiR7V09SS0RJUn0vaWZ1cGRvd24tJHtQVn11YnVudHU1IgorCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb21waWxlICgpIHsKKwljaG1vZCBhK3J4ICoucGwgKi5zaAorCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9JyAiQ0ZMQUdTPSR7Q0ZMQUdTfSAtV2FsbCAtVyAtRCdJRlVQRE9XTl9WRVJTSU9OPVwiJHtQVn1cIiciCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44IFwKKwkJICAke0R9JHttYW5kaXJ9L21hbjUgXAorCQkgICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKworCSMgSWYgdm9sYXRpbGVzIGFyZSB1c2VkLCB0aGVuIHdlJ2xsIGFsc28gbmVlZCAvcnVuL25ldHdvcmsgdGhlcmUgdG9vLgorCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9uZXR3b3JrICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisKKwlpbnN0YWxsIC1tIDA3NTUgaWZ1cCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWxuICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaWZ1cCAke0R9JHtiYXNlX3NiaW5kaXJ9L2lmZG93bgorCWluc3RhbGwgLW0gMDY0NCBpZnVwLjggJHtEfSR7bWFuZGlyfS9tYW44CisJaW5zdGFsbCAtbSAwNjQ0IGludGVyZmFjZXMuNSAke0R9JHttYW5kaXJ9L21hbjUKKwljZCAke0R9JHttYW5kaXJ9L21hbjggJiYgbG4gLXMgaWZ1cC44IGlmZG93bi44Cit9CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImlmdXAgaWZkb3duIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaWZ1cF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lmdXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaWZkb3duXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaWZkb3duIgorCitJTklUU0NSSVBUX05BTUUgPSAiaWZ1cCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDM5IFMgLiBzdG9wIDM5IDAgNiAxIC4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NWJhMzc1ZjNjNmYyNmQzNGVmYjJhODU3NWU3N2ZjOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOGRjZTE0NjkyYzA3YjcyYjU4M2I4NmM0ZDNhY2UwZDlkYWMxOTI4OTI1MTQ0Y2MzZGRkZTE1YjY5NGViYmRmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NzJlODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXgKQEAgLTAsMCArMSw0NiBAQAorLmVuY29kaW5nID0gIlVURi04IgorY29uZmlnLnZlcnNpb24gPSAiOCIKK3ZpcnR1YWxIVy52ZXJzaW9uID0gIjEwIgorbnVtdmNwdXMgPSAiMiIKK3ZjcHUuaG90YWRkID0gIlRSVUUiCittZW1zaXplID0gIjQwOTYiCittZW0uaG90YWRkID0gIlRSVUUiCitzYXRhMC5wcmVzZW50ID0gIlRSVUUiCitzYXRhMDowLnByZXNlbnQgPSAiVFJVRSIKK3NhdGEwOjAuZmlsZU5hbWUgPSAiWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsiCitldGhlcm5ldDAucHJlc2VudCA9ICJUUlVFIgorZXRoZXJuZXQwLnZpcnR1YWxEZXYgPSAiZTEwMDAiCitldGhlcm5ldDAud2FrZU9uUGNrdFJjdiA9ICJGQUxTRSIKK2V0aGVybmV0MC5hZGRyZXNzVHlwZSA9ICJnZW5lcmF0ZWQiCit1c2IucHJlc2VudCA9ICJUUlVFIgorZWhjaS5wY2lTbG90TnVtYmVyID0gIjAiCitzb3VuZC5wcmVzZW50ID0gIlRSVUUiCitzb3VuZC5maWxlTmFtZSA9ICItMSIKK3NvdW5kLmF1dG9kZXRlY3QgPSAiVFJVRSIKK3BjaUJyaWRnZTAucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNC5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U0LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNC5mdW5jdGlvbnMgPSAiOCIKK3BjaUJyaWRnZTUucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNS52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTUuZnVuY3Rpb25zID0gIjgiCitwY2lCcmlkZ2U2LnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTYudmlydHVhbERldiA9ICJwY2llUm9vdFBvcnQiCitwY2lCcmlkZ2U2LmZ1bmN0aW9ucyA9ICI4IgorcGNpQnJpZGdlNy5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U3LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNy5mdW5jdGlvbnMgPSAiOCIKK3ZtY2kwLnByZXNlbnQgPSAiVFJVRSIKK2hwZXQwLnByZXNlbnQgPSAiVFJVRSIKK3VzYi52Ymx1ZXRvb3RoLnN0YXJ0Q29ubmVjdGVkID0gIlRSVUUiCitkaXNwbGF5TmFtZSA9ICJZb2N0byBCdWlsZCBBcHBsaWFuY2UiCitndWVzdE9TID0gIm90aGVyM3hsaW51eC02NCIKK3ZpcnR1YWxIVy5wcm9kdWN0Q29tcGF0aWJpbGl0eSA9ICJob3N0ZWQiCitndWkuZXhpdE9uQ0xJSExUID0gIkZBTFNFIgorcG93ZXJUeXBlLnBvd2VyT2ZmID0gInNvZnQiCitwb3dlclR5cGUucG93ZXJPbiA9ICJzb2Z0IgorcG93ZXJUeXBlLnN1c3BlbmQgPSAic29mdCIKK3Bvd2VyVHlwZS5yZXNldCA9ICJzb2Z0IgorZXh0ZW5kZWRDb25maWdGaWxlID0gIllvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmIgorc2NzaTA6MC5wcmVzZW50ID0gIkZBTFNFIgorZmxvcHB5MC5wcmVzZW50ID0gIkZBTFNFIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5NDFmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxGb3VuZHJ5PgorPFZNPgorPFZNSWQgdHlwZT0ic3RyaW5nIj41MiBhNSBkOCBjYiBlZCA2YyA4NSA0OC1jZCA5OSA2OCBhZiBjYyAzMCBhMCA5ODwvVk1JZD4KKzxDbGllbnRNZXRhRGF0YT4KKzxjbGllbnRNZXRhRGF0YUF0dHJpYnV0ZXMvPgorPEhpc3RvcnlFdmVudExpc3QvPjwvQ2xpZW50TWV0YURhdGE+Cis8dm14UGF0aE5hbWUgdHlwZT0ic3RyaW5nIj5Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14PC92bXhQYXRoTmFtZT48L1ZNPjwvRm91bmRyeT4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xMi4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4NmJhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiCkBAIC0wLDAgKzEsOTMgQEAKK1NVTU1BUlkgPSAiQW4gaW1hZ2UgY29udGFpbmluZyB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiIKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IHlvdSBjYW4gYm9vdCBhbmQgcnVuIHVzaW5nIGVpdGhlciBWTXdhcmUgUGxheWVyIG9yIFZNd2FyZSBXb3Jrc3RhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbi9idWlsZC1hcHBsaWFuY2UiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCBwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJ4MTEtYmFzZSBwYWNrYWdlLW1hbmFnZW1lbnQgc3BsYXNoIgorCisjIEVuc3VyZSB0aGVyZSdzIGVub3VnaCBzcGFjZSB0byBkbyBhIGNvcmUtaW1hZ2Utc2F0byBidWlsZCwgd2l0aCBybV93b3JrIGVuYWJsZWQKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICI0MTk0MzA0MCIKKworIyBEbyBhIHF1aWV0IGJvb3Qgd2l0aCBsaW1pdGVkIGNvbnNvbGUgbWVzc2FnZXMKK0FQUEVORCArPSAicm9vdGZzdHlwZT1leHQ0IHF1aWV0IgorCitERVBFTkRTID0gInppcC1uYXRpdmUiCitJTUFHRV9GU1RZUEVTID0gInZtZGsiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCitTUkNSRVYgPz0gImQwMWNkNTM0MjliMWMyMGYwMWRhYzk3ZjFiOWI2NTljYjlkYzk4MTIiCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kgXAorICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteCBcCisgICAgICAgICAgIGZpbGU6Ly9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBcCisgICAgICAgICAgIgorCitJTUFHRV9DTURfZXh0NF9hcHBlbmQgKCkgeworCSMgV2UgZG9uJ3QgbmVlZCB0byByZXNlcnZlIG11Y2ggc3BhY2UgZm9yIHJvb3QsIDAuNSUgaXMgbW9yZSB0aGFuIGVub3VnaAorCXR1bmUyZnMgLW0gMC41ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZXh0NAorfQorCitmYWtlcm9vdCBkb19wb3B1bGF0ZV9wb2t5X3NyYyAoKSB7CisJIyBCZWNhdXNlIGZldGNoMidzIGdpdCdzIHVucGFjayB1c2VzIC1zIGNsb25lZmxhZywgdGhlIHVucGFja2VkIGdpdCByZXBvCisJIyB3aWxsIGJlY29tZSBpbnZhbGlkIGluIHRoZSB0YXJnZXQuCisJcm0gLXJmICR7V09SS0RJUn0vZ2l0Ly5naXQKKwlybSAtZiAke1dPUktESVJ9L2dpdC8uZ2l0aWdub3JlCisKKwljcCAtUnAgJHtXT1JLRElSfS9naXQgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5CisKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvY29uZgorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMKKwljcCAtUnBMICR7RExfRElSfS8qICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMvCisKKwkjIFJlbW92ZSB0aGUgZ2l0Ml8qIHRhcmJhbGxzIC0tIHRoaXMgaXMgb2sgc2luY2Ugd2Ugc3RpbGwgaGF2ZSB0aGUgZ2l0Mi8uCisJcm0gLXJmICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMvZ2l0Ml8qCisKKwllY2hvICIvdXNyL2JpbiIgPiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvcHNldWRvZG9uZQorCWVjaG8gIklOSEVSSVQgKz0gXCJybV93b3JrXCIiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9jb25mL2F1dG8uY29uZgorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcHNldWRvCisJZWNobyAiZXhwb3J0IFBTRVVET19QUkVGSVg9L3VzciIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPS9ob21lL2J1aWxkZXIvcHNldWRvIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKwllY2hvICJleHBvcnQgUFNFVURPX0xJQkRJUj0vdXNyL2xpYi9wc2V1ZG8vbGliNjQiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYworCisJY2hvd24gYnVpbGRlci5idWlsZGVyICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcHNldWRvCisKKwljaG93biAtUiBidWlsZGVyLmJ1aWxkZXIgICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reQorCisJIyBBbGxvdyBidWlsZGVyIHRvIHVzZSBzdWRvIHRvIHNldHVwIHRhcC90dW4KKwllY2hvICJidWlsZGVyIEFMTD0oQUxMKSBOT1BBU1NXRDogQUxMIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL3N1ZG9lcnMKKworCSMgVXNlIENsZWFybG9va3MgR1RLKyB0aGVtZQorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ldGMvZ3RrLTIuMAorCWVjaG8gJ2d0ay10aGVtZS1uYW1lID0gIkNsZWFybG9va3MiJyA+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZ3RrLTIuMC9ndGtyYworfQorCitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gImRvX3BvcHVsYXRlX3Bva3lfc3JjOyAiCisKK2FkZHRhc2sgcm9vdGZzIGFmdGVyIGRvX3VucGFjaworCitweXRob24gKCkgeworCSMgRW5zdXJlIHdlIHJ1biB0aGVzZSB1c3VhbGx5IG5vZXhlYyB0YXNrcworCWQuZGVsVmFyRmxhZygiZG9fZmV0Y2giLCAibm9leGVjIikKKwlkLmRlbFZhckZsYWcoImRvX3VucGFjayIsICJub2V4ZWMiKQorfQorCitjcmVhdGVfYnVuZGxlX2ZpbGVzICgpIHsKKwljZCAke1dPUktESVJ9CisJbWtkaXIgLXAgWW9jdG9fQnVpbGRfQXBwbGlhbmNlCisJY3AgKi52bXgqIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWxuIC1zZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0udm1kayBZb2N0b19CdWlsZF9BcHBsaWFuY2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsKKwl6aXAgLXIgJHtERVBMT1lfRElSX0lNQUdFfS9Zb2N0b19CdWlsZF9BcHBsaWFuY2UtJHtEQVRFVElNRX0uemlwIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWxuIC1zZiBZb2N0b19CdWlsZF9BcHBsaWFuY2UtJHtEQVRFVElNRX0uemlwICR7REVQTE9ZX0RJUl9JTUFHRX0vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnppcCAKK30KKworcHl0aG9uIGRvX2J1bmRsZV9maWxlcygpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV9idW5kbGVfZmlsZXMnLCBkKQorfQorCithZGR0YXNrIGJ1bmRsZV9maWxlcyBhZnRlciBkb192bWltZyBiZWZvcmUgZG9fYnVpbGQKK2RvX2J1bmRsZV9maWxlc1tub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLWJhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhMDhjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLWJhc2UuYmIKQEAgLTAsMCArMSw4IEBACitTVU1NQVJZID0gIkEgY29uc29sZS1vbmx5IGltYWdlIHRoYXQgZnVsbHkgc3VwcG9ydHMgdGhlIHRhcmdldCBkZXZpY2UgXAoraGFyZHdhcmUuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWFkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QgYW5kIFwKK2lzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGZhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYgpAQCAtMCwwICsxLDIxIEBACisjIFNpbXBsZSBpbml0cmFtZnMgaW1hZ2UuIE1vc3RseSB1c2VkIGZvciBsaXZlIGltYWdlcy4KK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZS4gVGhlIGtlcm5lbCBpbmNsdWRlcyBcCit0aGUgTWluaW1hbCBSQU0tYmFzZWQgSW5pdGlhbCBSb290IEZpbGVzeXN0ZW0gKGluaXRyYW1mcyksIHdoaWNoIGZpbmRzIHRoZSBcCitmaXJzdCAnaW5pdCcgcHJvZ3JhbSBtb3JlIGVmZmljaWVudGx5LiIKKworUEFDS0FHRV9JTlNUQUxMID0gImluaXRyYW1mcy1saXZlLWJvb3QgaW5pdHJhbWZzLWxpdmUtaW5zdGFsbCBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaSBidXN5Ym94IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorCisjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKworZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKKworQkFEX1JFQ09NTUVOREFUSU9OUyArPSAiYnVzeWJveC1zeXNsb2ciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTIyMzRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscy5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIHN1cHBvcnQgZm9yIHRoZSBcCitNaW5pbWFsIE1URCBVdGlsaXRpZXMsIHdoaWNoIGxldCB0aGUgdXNlciBpbnRlcmFjdCB3aXRoIHRoZSBNVEQgc3Vic3lzdGVtIGluIFwKK3RoZSBrZXJuZWwgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGZsYXNoIGRldmljZXMuIgorCitJTUFHRV9JTlNUQUxMICs9ICJtdGQtdXRpbHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ3N2IzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0gJHtDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEx9IgorCitJTUFHRV9MSU5HVUFTID0gIiAiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPz0gIjgxOTIiCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdGVtZCIsICIgKyA0MDk2IiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4ZTBkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0CkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgcGFja2FnZSB3YXMgY3JlYXRlZCBieSBQZXRlciBUb2JpYXMgdG9iaWFzQGV0LWluZi5maG8tZW1kZW4uZGUgb24KK1dlZCwgMjQgQXVnIDE5OTQgMjE6MzM6MjggKzAyMDAgYW5kIG1haW50YWluZWQgYnkgQW50aG9ueSBUb3ducworPGFqdEBkZWJpYW4ub3JnPiB1bnRpbCAyMDAxLgorSXQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgTWFyY28gZCdJdHJpIDxtZEBsaW51eC5pdD4uCisKK0NvcHlyaWdodCAxOTk0LTIwMTAgUGV0ZXIgVG9iaWFzLCBBbnRob255IFRvd25zIGFuZCBNYXJjbyBkJ0l0cmkKKworVGhlIHByb2dyYW1zIGluIHRoaXMgcGFja2FnZSBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBhcyBkaXN0cmlidXRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gT24gRGViaWFuIHN5c3RlbXMsIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGluCisvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjMxYzYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0CkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaCAtZQorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmV0d29ya2luZworIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMgJGxvY2FsX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgU2hvdWxkLVN0YXJ0OiAgICAgIGlmdXBkb3duCisjIFNob3VsZC1TdG9wOiAgICAgICBpZnVwZG93bgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBSYWlzZSBuZXR3b3JrIGludGVyZmFjZXMuCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPSIvdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iCisKK1sgLXggL3NiaW4vaWZ1cCBdIHx8IGV4aXQgMAorCitjaGVja19uZXR3b3JrX2ZpbGVfc3lzdGVtcygpIHsKKyAgICBbIC1lIC9wcm9jL21vdW50cyBdIHx8IHJldHVybiAwCisKKyAgICBpZiBbIC1lIC9ldGMvaXNjc2kvaXNjc2kuaW5pdHJhbWZzIF07IHRoZW4KKwllY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IGlTQ1NJIHJvb3QgaXMgbW91bnRlZC4iCisJZXhpdCAwCisgICAgZmkKKworICAgIGV4ZWMgOTwmMCA8IC9wcm9jL21vdW50cworICAgIHdoaWxlIHJlYWQgREVWIE1UUFQgRlNUWVBFIFJFU1Q7IGRvCisJY2FzZSAkREVWIGluCisJL2Rldi9uYmQqfC9kZXYvbmRbYS16XSp8L2Rldi9ldGhlcmQvZSopCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBkZXZpY2VzIHN0aWxsIG1vdW50ZWQuIgorCSAgICBleGl0IDAKKwkgICAgOzsKKwllc2FjCisJY2FzZSAkRlNUWVBFIGluCisJbmZzfG5mczR8c21iZnN8bmNwfG5jcGZzfGNpZnN8Y29kYXxvY2ZzMnxnZnN8cHZmc3xwdmZzMnxmdXNlLmh0dHBmc3xmdXNlLmN1cmxmdHBmcykKKwkgICAgZWNobyAibm90IGRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzOiBuZXR3b3JrIGZpbGUgc3lzdGVtcyBzdGlsbCBtb3VudGVkLiIKKwkgICAgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGRvbmUKKyAgICBleGVjIDA8JjkgOTwmLQorfQorCitjaGVja19uZXR3b3JrX3N3YXAoKSB7CisgICAgWyAtZSAvcHJvYy9zd2FwcyBdIHx8IHJldHVybiAwCisKKyAgICBleGVjIDk8JjAgPCAvcHJvYy9zd2FwcworICAgIHdoaWxlIHJlYWQgREVWIE1UUFQgRlNUWVBFIFJFU1Q7IGRvCisJY2FzZSAkREVWIGluCisJL2Rldi9uYmQqfC9kZXYvbmRbYS16XSp8L2Rldi9ldGhlcmQvZSopCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBzd2FwIHN0aWxsIG1vdW50ZWQuIgorCSAgICBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZG9uZQorICAgIGV4ZWMgMDwmOSA5PCYtCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCisJZWNobyAtbiAiQ29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLi4uICIKKwlzeXNjdGwgLWUgLXAgL2V0Yy9zeXNjdGwuY29uZiA+L2Rldi9udWxsIDI+JjEKKwlpZnVwIC1hCisJZWNobyAiZG9uZS4iCisJOzsKKworc3RvcCkKKwljaGVja19uZXR3b3JrX2ZpbGVfc3lzdGVtcworCWNoZWNrX25ldHdvcmtfc3dhcAorCisJZWNobyAtbiAiRGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMuLi4gIgorCWlmZG93biAtYQorCWVjaG8gImRvbmUuIgorCTs7CisKK2ZvcmNlLXJlbG9hZHxyZXN0YXJ0KQorCWVjaG8gIlJ1bm5pbmcgJDAgJDEgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IG1heSBub3QgZW5hYmxlIGFnYWluIHNvbWUgaW50ZXJmYWNlcyIKKwllY2hvICJSZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4uLiAiCisJaWZkb3duIC1hIHx8IHRydWUKKwlpZnVwIC1hCisJZWNobyAiZG9uZS4iCisJOzsKKworKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvbmV0d29ya2luZyB7c3RhcnR8c3RvcH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWNmNGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsMzEgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisjIFdpcmVsZXNzIGludGVyZmFjZXMKK2lmYWNlIHdsYW4wIGluZXQgZGhjcAorCXdpcmVsZXNzX21vZGUgbWFuYWdlZAorCXdpcmVsZXNzX2Vzc2lkIGFueQorCXdwYS1kcml2ZXIgd2V4dAorCXdwYS1jb25mIC9ldGMvd3BhX3N1cHBsaWNhbnQuY29uZgorCitpZmFjZSBhdG1sMCBpbmV0IGRoY3AKKworIyBXaXJlZCBvciB3aXJlbGVzcyBpbnRlcmZhY2VzCithdXRvIGV0aDAKK2lmYWNlIGV0aDAgaW5ldCBkaGNwCitpZmFjZSBldGgxIGluZXQgZGhjcAorCisjIEV0aGVybmV0L1JORElTIGdhZGdldCAoZ19ldGhlcikKKyMgLi4uIG9yIG9uIGhvc3Qgc2lkZSwgdXNibmV0IGFuZCByYW5kb20gaHdhZGRyCitpZmFjZSB1c2IwIGluZXQgc3RhdGljCisJYWRkcmVzcyAxOTIuMTY4LjcuMgorCW5ldG1hc2sgMjU1LjI1NS4yNTUuMAorCW5ldHdvcmsgMTkyLjE2OC43LjAKKwlnYXRld2F5IDE5Mi4xNjguNy4xCisKKyMgQmx1ZXRvb3RoIG5ldHdvcmtpbmcKK2lmYWNlIGJuZXAwIGluZXQgZGhjcAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwYzBhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdApAQCAtMCwwICsxLDM5IEBACisjISAvYmluL3NoCisKKyMgSW4gY2FzZSB0aGUgaW50ZXJmYWNlIGlzIHVzZWQgYXMgbmZzcm9vdCwgYXZvaWQgaWZ1cCwgb3RoZXJ3aXNlCisjIG5mc3Jvb3QgbWF5IGxvc2UgcmVzcG9uc2UKKworbmZzcm9vdD0wCisKK2lmIHRlc3QgIngkSUZBQ0UiID0geGxvIDsgdGhlbgorCWV4aXQgMAorZmkKKworZXhlYyA5PCYwIDwgL3Byb2MvbW91bnRzCit3aGlsZSByZWFkIGRldiBtdHB0IGZzdHlwZSByZXN0OyBkbworICAgIGlmIHRlc3QgJG10cHQgPSAiLyIgOyB0aGVuCisgICAgICAgIGNhc2UgJGZzdHlwZSBpbgorICAgICAgICAgICAgbmZzIHwgbmZzNCkKKyAgICAgICAgICAgICAgICBuZnNyb290PTEKKyAgICAgICAgICAgICAgICBuZnNfYWRkcj1gZWNobyAkcmVzdCB8IHNlZCAtZSAncy9eLiphZGRyPVwoWzAtOS5dKlwpLiokL1wxLydgCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgZmkKK2RvbmUKK2V4ZWMgMDwmOSA5PCYtCisKK3Rlc3QgJG5mc3Jvb3QgLWVxIDAgJiYgZXhpdCAwCisKK2lmIFsgLXggL2Jpbi9pcCAtbyAteCAvc2Jpbi9pcCBdIDsgdGhlbgorICAgIG5mc19pZmFjZT1gaXAgcm91dGUgZ2V0ICRuZnNfYWRkciB8IGdyZXAgZGV2IHwgc2VkIC1lICdzL14uKmRldiBcKFstYS16MC05Ll0qXCkuKiQvXDEvJ2AKK2ZpCisKK2lmIHRlc3QgIngkSUZBQ0UiID0gIngkbmZzX2lmYWNlIiA7IHRoZW4KKyAgICBlY2hvICJpZnVwIHNraXBwZWQgZm9yIG5mc3Jvb3QgaW50ZXJmYWNlICRuZnNfaWZhY2UiCisgICAgZXhpdCAxCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtNjQvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtNjQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY2L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY2L2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ny9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ny9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzNjQvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11cHBjL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXNoNC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYtNjQvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNhZTQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkJhc2ljIFRDUC9JUCBuZXR3b3JraW5nIGluaXQgc2NyaXB0cyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBoaWdoIGxldmVsIHRvb2xzIHRvIGNvbmZpZ3VyZSBuZXR3b3JrIGludGVyZmFjZXMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9pZnVwZG93biIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCitQUiA9ICJyNyIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAibmV0d29ya2luZyIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAxIDIgMyA0IDUgLiBzdG9wIDgwIDAgNiAxIC4iCisKK1NSQ19VUkkgPSAiZmlsZTovL2NvcHlyaWdodCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2ludGVyZmFjZXMgXAorICAgICAgICAgICBmaWxlOi8vbmZzcm9vdCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kIFwKKwkJCSR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXBvc3QtZG93bi5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmV0d29ya2luZworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ludGVyZmFjZXMgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pbnRlcmZhY2VzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzcm9vdCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX3FlbXVhbGwgKCkgeworCSMgRGlzYWJsZSBuZXR3b3JrIG1hbmFnZXIgb24gbWFjaGluZXMgdGhhdCBjb21tb25seSBkbyBORlMgYm9vdGluZworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvbm0tZGlzYWJsZWQtZXRoMAorfQorCitQQUNLQUdFX0FSQ0hfcWVtdWFsbCA9ICIke01BQ0hJTkVfQVJDSH0iCitSREVQRU5EU18ke1BOfSA9ICJuZXRiYXNlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJuZXRiYXNlICg8IDE6NS4wKSIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vbmV0d29yay9pbnRlcmZhY2VzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtYm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODJlYmEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2gKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworbWtkaXIgL3Byb2MKK21rZGlyIC9zeXMKK21vdW50IC10IHByb2MgcHJvYyAvcHJvYworbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCitleGVjIHNoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTBiNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaApAQCAtMCwwICsxLDE5OSBAQAorIyEvYmluL3NoIC1lCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIGluc3RhbGwuc2ggW2RldmljZV9uYW1lXSBbcm9vdGZzX25hbWVdCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXZSBuZWVkIDIwMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAwCisKKyMgNTAlIGZvciB0aGUgc2Vjb25kIHJvb3RmcwordGVzdGZzX3JhdGlvPTUwCisKK2ZvdW5kPSJubyIKKworZWNobyAiU2VhcmNoaW5nIGZvciBhIGhhcmQgZHJpdmUuLi4iCitmb3IgZGV2aWNlIGluICdoZGEnICdoZGInICdzZGEnICdzZGInICdtbWNibGswJyAnbW1jYmxrMScKK2RvCisgICAgaWYgWyAtZSAvc3lzL2Jsb2NrLyR7ZGV2aWNlfS9yZW1vdmFibGUgXTsgdGhlbgorICAgICAgICBpZiBbICIkKGNhdCAvc3lzL2Jsb2NrLyR7ZGV2aWNlfS9yZW1vdmFibGUpIiA9ICIwIiBdOyB0aGVuCisgICAgICAgICAgICBmb3VuZD0ieWVzIgorCisgICAgICAgICAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICAgICAgICAgICMgVHJ5IHNsZWVwaW5nIGhlcmUgdG8gYXZvaWQgZ2V0dGluZyBrZXJuZWwgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAjIG9ic2N1cmluZy9jb25mdXNpbmcgdXNlcgorICAgICAgICAgICAgICAgIHNsZWVwIDUKKyAgICAgICAgICAgICAgICBlY2hvICJGb3VuZCBkcml2ZSBhdCAvZGV2LyR7ZGV2aWNlfS4gRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlID8gW3kvbl0iCisgICAgICAgICAgICAgICAgcmVhZCBhbnN3ZXIKKyAgICAgICAgICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJuIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZD1ubworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAiJGZvdW5kIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgYnJlYWs7CisgICAgZmkKKworZG9uZQorCitpZiBbICIkZm91bmQiID0gIm5vIiBdOyB0aGVuCisgICAgZXhpdCAxCitmaQorCitlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJHtkZXZpY2V9IgorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAvZGV2LyR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitta2RpciAtcCAvdG1wCitjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAvZGV2LyR7ZGV2aWNlfSB1bml0IG1iIHByaW50IHwgZ3JlcCBEaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisKK3Rlc3Rmc19zaXplPSQoKGRpc2tfc2l6ZSp0ZXN0ZnNfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtdGVzdGZzX3NpemUpKQorCityb290ZnNfc3RhcnQ9JCgoYm9vdF9zaXplKSkKK3Jvb3Rmc19lbmQ9JCgocm9vdGZzX3N0YXJ0K3Jvb3Rmc19zaXplKSkKK3Rlc3Rmc19zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCitib290ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgordGVzdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlRlc3RmcyBwYXJ0aXRpb24gc2l6ZTogICAkdGVzdGZzX3NpemUgTUIgKCR0ZXN0ZnMpIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvJHtkZXZpY2V9IGJzPTUxMiBjb3VudD0yCisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rbGFiZWwgZ3B0CisKK2VjaG8gIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRib290ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgMCUgJGJvb3Rfc2l6ZQorcGFydGVkIC9kZXYvJHtkZXZpY2V9IHNldCAxIGJvb3Qgb24KKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICRyb290ZnNfc3RhcnQgJHJvb3Rmc19lbmQKKworZWNobyAiQ3JlYXRpbmcgdGVzdGZzIHBhcnRpdGlvbiBvbiAkdGVzdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICR0ZXN0ZnNfc3RhcnQgMTAwJQorCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gcHJpbnQKKworZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIHZmYXQuLi4iCitta2ZzLnZmYXQgLW4gImJvb3QiICRib290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkcm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInBsYXRmb3JtIiAkcm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHRlc3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJ0ZXN0cm9vdGZzIiAkdGVzdGZzCisKK21rZGlyIC9zc2QKK21rZGlyIC9yb290bW50Citta2RpciAvYm9vdG1udAorCittb3VudCAkcm9vdGZzIC9zc2QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3Jvb3RtbnQKKworZWNobyAiQ29weWluZyByb290ZnMgZmlsZXMuLi4iCitjcCAtYSAvcm9vdG1udC8qIC9zc2QKKwordG91Y2ggL3NzZC9ldGMvbWFzdGVyaW1hZ2UKKworaWYgWyAtZCAvc3NkL2V0Yy8gXSA7IHRoZW4KKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvc3NkL2V0Yy91ZGV2LyBdIDsgdGhlbgorICAgICAgICBlY2hvICIvZGV2LyR7ZGV2aWNlfSIgPj4gL3NzZC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKKyAgICBmaQorZmkKKwordW1vdW50IC9zc2QKK3Vtb3VudCAvcm9vdG1udAorCitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCittb3VudCAkYm9vdGZzIC9zc2QKKworRUZJRElSPSIvc3NkL0VGSS9CT09UIgorbWtkaXIgLXAgJEVGSURJUgorY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9zc2QKKyMgQ29weSB0aGUgZWZpIGxvYWRlcgorY3AgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC8qLmVmaSAkRUZJRElSCisKK2lmIFsgLWYgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC9ncnViLmNmZyBdOyB0aGVuCisgICAgR1JVQkNGRz0iJEVGSURJUi9ncnViLmNmZyIKKyAgICBjcCAvcnVuL21lZGlhLyQxL0VGSS9CT09UL2dydWIuY2ZnICRHUlVCQ0ZHCisgICAgIyBVcGRhdGUgZ3J1YiBjb25maWcgZm9yIHRoZSBpbnN0YWxsZWQgaW1hZ2UKKyAgICAjIERlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorICAgIHNlZCAtaSAiL21lbnVlbnRyeSAnaW5zdGFsbCcvLC9efS9kIiAkR1JVQkNGRworICAgICMgRGVsZXRlIHRoZSBpbml0cmQgbGluZXMKKyAgICBzZWQgLWkgIi9pbml0cmQgL2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIEFkZCB0aGUgcm9vdD0gYW5kIG90aGVyIHN0YW5kYXJkIGJvb3Qgb3B0aW9ucworICAgIHNlZCAtaSAic0BsaW51eCAvdm1saW51eiAqQGxpbnV4IC92bWxpbnV6IHJvb3Q9JHJvb3RmcyBydyAkcm9vdHdhaXQgcXVpZXQgQCIgJEdSVUJDRkcKK2ZpCisKK2lmIFsgLWQgL3J1bi9tZWRpYS8kMS9sb2FkZXIgXTsgdGhlbgorICAgIEdVTU1JQk9PVF9DRkdTPSIvc3NkL2xvYWRlci9lbnRyaWVzLyouY29uZiIKKyAgICAjIGNvcHkgY29uZmlnIGZpbGVzIGZvciBndW1taWJvb3QKKyAgICBjcCAtZHIgL3J1bi9tZWRpYS8kMS9sb2FkZXIgL3NzZAorICAgICMgZGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgcm0gLWYgL3NzZC9sb2FkZXIvZW50cmllcy9pbnN0YWxsLmNvbmYKKyAgICAjIGRlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisgICAgc2VkIC1pICIvaW5pdHJkIC9kIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBhZGQgdGhlIHJvb3Q9IGFuZCBvdGhlciBzdGFuZGFyZCBib290IG9wdGlvbnMKKyAgICBzZWQgLWkgInNAb3B0aW9ucyAqQG9wdGlvbnMgcm9vdD0kcm9vdGZzIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIEFkZCB0aGUgdGVzdCBsYWJlbAorICAgIGVjaG8gLW5lICJ0aXRsZSB0ZXN0XG5saW51eCAvdGVzdC1rZXJuZWxcbm9wdGlvbnMgcm9vdD0kdGVzdGZzIHJ3ICRyb290d2FpdCBxdWlldFxuIiA+IC9zc2QvbG9hZGVyL2VudHJpZXMvdGVzdC5jb25mCitmaQorCit1bW91bnQgL3NzZAorc3luYworCitlY2hvICJSZW1vdmUgeW91ciBpbnN0YWxsYXRpb24gbWVkaWEsIGFuZCBwcmVzcyBFTlRFUiIKKworcmVhZCBlbnRlcgorCitlY2hvICJSZWJvb3RpbmcuLi4iCityZWJvb3QgLWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VkNzRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCkBAIC0wLDAgKzEsMjUwIEBACisjIS9iaW4vc2ggLWUKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgaW5zdGFsbC5zaCBbZGV2aWNlX25hbWVdIFtyb290ZnNfbmFtZV0KKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFdlIG5lZWQgMjAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorYm9vdF9zaXplPTIwCisKKyMgNSUgZm9yIHN3YXAKK3N3YXBfcmF0aW89NQorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9YGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICR7MSUvfSB8IGF3ayAne3ByaW50ICQxfSdgCitsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSNcL2Rldi99CisjIE9ubHkgc3RyaXAgdGhlIGRpZ2l0IGlkZW50aWZpZXIgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gbW1jCitjYXNlICRsaXZlX2Rldl9uYW1lIGluCisgICAgbW1jYmxrKikKKyAgICA7OworICAgICopCisgICAgICAgIGxpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lJSVbMC05XSp9CisgICAgOzsKK2VzYWMKKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHNyKikKKyAgICAgICAgICAgICMgc2tpcCBDRFJPTSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorICAgICAgICAgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgICAgICAgICAkbGl2ZV9kZXZfbmFtZSopCisgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgZnJvbQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgLXogIiR7aGRuYW1lbGlzdH0iIF07IHRoZW4KKyAgICBlY2hvICJZb3UgbmVlZCBhbm90aGVyIGRldmljZSAoYmVzaWRlcyB0aGUgbGl2ZSBkZXZpY2UgL2Rldi8ke2xpdmVfZGV2X25hbWV9KSB0byBpbnN0YWxsIHRoZSBpbWFnZS4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVkVORE9SPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvbW9kZWwgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJNT0RFTD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50IF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVUVWRU5UPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZmkKKyAgICBlY2hvCisgICAgIyBHZXQgdXNlciBjaG9pY2UKKyAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICBlY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKyAgICAgICAgcmVhZCBhbnN3ZXIKKyAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgLW8gIiRhbnN3ZXIiID0gIm4iIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIlBsZWFzZSBhbnN3ZXIgeSBvciBuIgorICAgIGRvbmUKKyAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIFRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisgICAgICAgIGJyZWFrCisgICAgZmkKK2RvbmUKKworaWYgWyAtbiAiJFRBUkdFVF9ERVZJQ0VfTkFNRSIgXTsgdGhlbgorICAgIGVjaG8gIkluc3RhbGxpbmcgaW1hZ2Ugb24gL2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FIC4uLiIKK2Vsc2UKKyAgICBlY2hvICJObyBoYXJkIGRyaXZlIHNlbGVjdGVkLiBJbnN0YWxsYXRpb24gYWJvcnRlZC4iCisgICAgZXhpdCAxCitmaQorCitkZXZpY2U9L2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50ICR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitta2RpciAtcCAvdG1wCitjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCitzd2FwX3NpemU9JCgoZGlza19zaXplKnN3YXBfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtc3dhcF9zaXplKSkKKworcm9vdGZzX3N0YXJ0PSQoKGJvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCitzd2FwX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisgICAgcGFydF9wcmVmaXg9InAiCisgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKK3N3YXA9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlN3YXAgcGFydGl0aW9uIHNpemU6ICAgJHN3YXBfc2l6ZSBNQiAoJHN3YXApIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0ke2RldmljZX0gYnM9NTEyIGNvdW50PTM1CisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK3BhcnRlZCAke2RldmljZX0gbWtsYWJlbCBncHQKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IGJvb3QgZmF0MzIgMCUgJGJvb3Rfc2l6ZQorcGFydGVkICR7ZGV2aWNlfSBzZXQgMSBib290IG9uCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IHJvb3QgZXh0MyAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHN3YXAgcGFydGl0aW9uIG9uICRzd2FwIgorcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgc3dhcCBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gdmZhdC4uLiIKK21rZnMudmZhdCAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MSkKKyAgICBzd2FwX3BhcnRfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFBBUlRVVUlEICR7ZGV2aWNlfTMpCisgICAgZWNobyAiL2Rldi9kaXNrL2J5LXBhcnR1dWlkLyRzd2FwX3BhcnRfdXVpZCAgICAgICAgICAgICAgICBzd2FwICAgICAgICAgICAgIHN3YXAgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgIDAiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICBlY2hvICJVVUlEPSRib290X3V1aWQgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgdmZhdCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKyAgICAgICAgZWNobyAiJHtkZXZpY2V9IiA+PiAvdGd0X3Jvb3QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCisKK3Vtb3VudCAvc3JjX3Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IGJvb3QgcGFydGl0aW9uCittb3VudCAkYm9vdGZzIC9ib290CitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCisKK0VGSURJUj0iL2Jvb3QvRUZJL0JPT1QiCitta2RpciAtcCAkRUZJRElSCisjIENvcHkgdGhlIGVmaSBsb2FkZXIKK2NwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvKi5lZmkgJEVGSURJUgorCitpZiBbIC1mIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgXTsgdGhlbgorICAgIHJvb3RfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIkRUZJRElSL2dydWIuY2ZnIgorICAgIGNwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgJEdSVUJDRkcKKyAgICAjIFVwZGF0ZSBncnViIGNvbmZpZyBmb3IgdGhlIGluc3RhbGxlZCBpbWFnZQorICAgICMgRGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgc2VkIC1pICIvbWVudWVudHJ5ICdpbnN0YWxsJy8sL159L2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSByb290PSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyByb290PVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgQWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQGxpbnV4IC92bWxpbnV6ICpAbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHUlVCQ0ZHCitmaQorCitpZiBbIC1kIC9ydW4vbWVkaWEvJDEvbG9hZGVyIF07IHRoZW4KKyAgICBHVU1NSUJPT1RfQ0ZHUz0iL2Jvb3QvbG9hZGVyL2VudHJpZXMvKi5jb25mIgorICAgICMgY29weSBjb25maWcgZmlsZXMgZm9yIGd1bW1pYm9vdAorICAgIGNwIC1kciAvcnVuL21lZGlhLyQxL2xvYWRlciAvYm9vdAorICAgICMgZGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgcm0gLWYgL2Jvb3QvbG9hZGVyL2VudHJpZXMvaW5zdGFsbC5jb25mCisgICAgIyBkZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgYWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQG9wdGlvbnMgKkBvcHRpb25zIHJvb3Q9UEFSVFVVSUQ9JHJvb3R1dWlkIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1VNTUlCT09UX0NGR1MKK2ZpCisKK3Vtb3VudCAvdGd0X3Jvb3QKKworY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9ib290CisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtdGVzdGZzLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtdGVzdGZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNjIxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2gKQEAgLTAsMCArMSwyMjAgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAwCisKKyMgNTAlIGZvciB0aGUgdGhlIHRlc3QgcGFydGl0aW9uCit0ZXN0ZnNfcmF0aW89NTAKKworIyBHZXQgYSBsaXN0IG9mIGhhcmQgZHJpdmVzCitoZG5hbWVsaXN0PSIiCitsaXZlX2Rldl9uYW1lPSR7MSUlLyp9CisKK2VjaG8gIlNlYXJjaGluZyBmb3IgaGFyZCBkcml2ZXMgLi4uIgorCitmb3IgZGV2aWNlIGluIGBscyAvc3lzL2Jsb2NrL2A7IGRvCisgICAgY2FzZSAkZGV2aWNlIGluCisJbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKwkgICAgOzsKKwlyYW0qKQorICAgICAgICAgICAgIyBza2lwIHJhbSBkZXZpY2UKKwkgICAgOzsKKwkqKQorCSAgICAjIHNraXAgdGhlIGRldmljZSBMaXZlT1MgaXMgb24KKwkgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisJICAgIGlmIFsgJGRldmljZSAhPSAkbGl2ZV9kZXZfbmFtZSAtYSAtZSAvZGV2LyRkZXZpY2UgXTsgdGhlbgorCQloZG5hbWVsaXN0PSIkaGRuYW1lbGlzdCAkZGV2aWNlIgorCSAgICBmaQorCSAgICA7OworICAgIGVzYWMKK2RvbmUKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKwllY2hvIC1uICJWRU5ET1I9IgorCWNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgZWNobyAtbiAiTU9ERUw9IgorICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKwllY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKwlyZWFkIGFuc3dlcgorCWlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisJICAgIGJyZWFrCisJZmkKKwllY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorCVRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisJYnJlYWsKKyAgICBmaQorZG9uZQorCitpZiBbIC1uICIkVEFSR0VUX0RFVklDRV9OQU1FIiBdOyB0aGVuCisgICAgZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyRUQVJHRVRfREVWSUNFX05BTUUgLi4uIgorZWxzZQorICAgIGVjaG8gIk5vIGhhcmQgZHJpdmUgc2VsZWN0ZWQuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK2RldmljZT0kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50IC9kZXYvJHtkZXZpY2V9KiAyPiAvZGV2L251bGwgfHwgL2Jpbi90cnVlCisKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0gOyB0aGVuCisgICAgbWtub2QgL2Rldi9sb29wMCBiIDcgMAorZmkKKworbWtkaXIgLXAgL3RtcAoraWYgWyAhIC1MIC9ldGMvbXRhYiBdOyB0aGVuCisJY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorZmkKKworZGlza19zaXplPSQocGFydGVkIC9kZXYvJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKwordGVzdGZzX3NpemU9JCgoZGlza19zaXplKnRlc3Rmc19yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJvb3Rfc2l6ZS10ZXN0ZnNfc2l6ZSkpCisKK3Jvb3Rmc19zdGFydD0kKChib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQordGVzdGZzX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisJcGFydF9wcmVmaXg9InAiCisJcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorcm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCit0ZXN0ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiVGVzdGZzIHBhcnRpdGlvbiBzaXplOiAkdGVzdGZzX3NpemUgTUIgKCR0ZXN0ZnMpIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvJHtkZXZpY2V9IGJzPTUxMiBjb3VudD0yCisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rbGFiZWwgbXNkb3MKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAwJSAkYm9vdF9zaXplCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHRlc3RmcyBwYXJ0aXRpb24gb24gJHRlc3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkdGVzdGZzX3N0YXJ0IDEwMCUKKworcGFydGVkIC9kZXYvJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJib290IiAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJyb290ZnMiICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkdGVzdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInRlc3Ryb290ZnMiICR0ZXN0ZnMKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CisKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3NyY19yb290LyogL3RndF9yb290CisKK3RvdWNoIC90Z3Rfcm9vdC9ldGMvbWFzdGVyaW1hZ2UKKworaWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGVjaG8gIiRib290ZnMgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgZXh0MyAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKwllY2hvICIvZGV2LyR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIF0gOyB0aGVuCisgICAgZWNobyAiUHJlcGFyaW5nIGN1c3RvbSBncnViMiBtZW51Li4uIgorICAgIEdSVUJDRkc9Ii9ib290L2dydWIvZ3J1Yi5jZmciCisgICAgbWtkaXIgLXAgJChkaXJuYW1lICRHUlVCQ0ZHKQorICAgIGNhdCA+JEdSVUJDRkcgPDxfRU9GIAorc2VyaWFsIC0tc3BlZWQ9MTE1MjAwIC0tdW5pdD0wIC0td29yZD04IC0tcGFyaXR5PW5vIC0tc3RvcD0xCit0ZXJtaW5hbF9pbnB1dCAtLWFwcGVuZCAgc2VyaWFsCit0ZXJtaW5hbF9vdXRwdXQgLS1hcHBlbmQgc2VyaWFsCitzZXQgdGltZW91dF9zdHlsZT1oaWRkZW4KK3NldCB0aW1lb3V0PTUKK21lbnVlbnRyeSAiTGludXgiIHsKKyAgICBzZXQgcm9vdD0oaGQwLDEpCisgICAgbGludXggL3ZtbGludXogcm9vdD0kcm9vdGZzICRyb290d2FpdCBydyAkNSAkMyAkNCBxdWlldAorfQorX0VPRgorICAgICMgQWRkIHRoZSB0ZXN0IGxhYmVsCisgICAgZWNobyAtbmUgIlxubWVudWVudHJ5ICd0ZXN0JyAtLWhvdGtleSB4IHtcbmxpbnV4IC90ZXN0LWtlcm5lbCByb290PSR0ZXN0ZnMgcncgJHJvb3R3YWl0IHF1aWV0XG59XG4iID4+ICRHUlVCQ0ZHCisKKyAgICBjaG1vZCAwNDQ0ICRHUlVCQ0ZHCitmaQorZ3J1Yi1pbnN0YWxsIC9kZXYvJHtkZXZpY2V9CitlY2hvICIoaGQwKSAvZGV2LyR7ZGV2aWNlfSIgPiAvYm9vdC9ncnViL2RldmljZS5tYXAKKworIyBJZiBncnViLmNmZyBkb2Vzbid0IGV4aXN0LCBhc3N1bWUgR1JVQiAwLjk3IGFuZCBjcmVhdGUgYSBtZW51LmxzdAoraWYgWyAhIC1mIC9ib290L2dydWIvZ3J1Yi5jZmcgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIgbWVudS4uLiIKKyAgICBlY2hvICJkZWZhdWx0IDAiID4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpbWVvdXQgMzAiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJ0aXRsZSBMaXZlIEJvb3QvSW5zdGFsbC1JbWFnZSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInJvb3QgIChoZDAsMCkiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJrZXJuZWwgL3ZtbGludXogcm9vdD0kcm9vdGZzIHJ3ICQzICQ0IHF1aWV0IiA+PiAvYm9vdC9ncnViL21lbnUubHN0CitmaQorCitjcCAvcnVuL21lZGlhLyQxL3ZtbGludXogL2Jvb3QvCisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU5NzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKQEAgLTAsMCArMSwyNzIgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAKKworIyA1JSBmb3IgdGhlIHN3YXAKK3N3YXBfcmF0aW89NQorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9YGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICR7MSUvfSB8IGF3ayAne3ByaW50ICQxfSdgCitsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSNcL2Rldi99CisjIE9ubHkgc3RyaXAgdGhlIGRpZ2l0IGlkZW50aWZpZXIgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gbW1jCitjYXNlICRsaXZlX2Rldl9uYW1lIGluCisgICAgbW1jYmxrKikKKyAgICA7OworICAgICopCisgICAgICAgIGxpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lJSVbMC05XSp9CisgICAgOzsKK2VzYWMKKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHNyKikKKyAgICAgICAgICAgICMgc2tpcCBDRFJPTSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorICAgICAgICAgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgICAgICAgICAkbGl2ZV9kZXZfbmFtZSopCisgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgZnJvbQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK1RBUkdFVF9ERVZJQ0VfTkFNRT0iIgorZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAjIERpc3BsYXkgZm91bmQgaGFyZCBkcml2ZXMgYW5kIHRoZWlyIGJhc2ljIGluZm8KKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGVjaG8gL2Rldi8kaGRuYW1lCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvciBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlZFTkRPUj0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiTU9ERUw9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbAorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlVFVkVOVD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudAorICAgIGZpCisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgZWNobyAtbiAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlPyBbeS9uXSAiCisgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorICAgICAgICBUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorICAgICAgICBicmVhaworICAgIGZpCitkb25lCisKK2lmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRSAuLi4iCitlbHNlCisgICAgZWNobyAiTm8gaGFyZCBkcml2ZSBzZWxlY3RlZC4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworZGV2aWNlPS9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRQorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworaWYgWyAhIC1iIC9kZXYvbG9vcDAgXSA7IHRoZW4KKyAgICBta25vZCAvZGV2L2xvb3AwIGIgNyAwCitmaQorCitta2RpciAtcCAvdG1wCitpZiBbICEgLUwgL2V0Yy9tdGFiIF07IHRoZW4KKyAgICBjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCitmaQorCitkaXNrX3NpemU9JChwYXJ0ZWQgJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKworZ3J1Yl92ZXJzaW9uPSQoZ3J1Yi1pbnN0YWxsIC12fHNlZCAncy8uKiBcKFswLTldXCkuKi9cMS8nKQorCitpZiBbICRncnViX3ZlcnNpb24gLWVxIDAgXSA7IHRoZW4KKyAgICBiaW9zX2Jvb3Rfc2l6ZT0wCitlbHNlCisgICAgIyBGb3IgR1JVQiAyIHdlIG5lZWQgc2VwYXJhdGUgcGFyaXRpb24gdG8gc3RvcmUgc3RhZ2UyIGdydWIgaW1hZ2UKKyAgICAjIDJNYiB2YWx1ZSBpcyBjaG9zZW4gdG8gYWxpZ24gcGFydGl0aW9uIGZvciBiZXN0IHBlcmZvcm1hbmNlLgorICAgIGJpb3NfYm9vdF9zaXplPTIKK2ZpCisKK3N3YXBfc2l6ZT0kKChkaXNrX3NpemUqc3dhcF9yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJpb3NfYm9vdF9zaXplLWJvb3Rfc2l6ZS1zd2FwX3NpemUpKQorCitib290X3N0YXJ0PSQoKGJpb3NfYm9vdF9zaXplKSkKK3Jvb3Rmc19zdGFydD0kKChiaW9zX2Jvb3Rfc2l6ZStib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQorc3dhcF9zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCisKK2lmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgorICAgIGJpb3NfYm9vdD0nJworICAgIGJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKKyAgICByb290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCisgICAgc3dhcD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKK2Vsc2UKKyAgICBiaW9zX2Jvb3Q9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCisgICAgYm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgorICAgIHJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKyAgICBzd2FwPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9NAorZmkKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitbICRncnViX3ZlcnNpb24gLW5lIDAgXSAmJiBlY2hvICJCSU9TIGJvb3QgcGFydGl0aW9uIHNpemU6ICRiaW9zX2Jvb3Rfc2l6ZSBNQiAoJGJpb3NfYm9vdCkiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiU3dhcCBwYXJ0aXRpb24gc2l6ZTogICAkc3dhcF9zaXplIE1CICgkc3dhcCkiCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPSR7ZGV2aWNlfSBicz01MTIgY291bnQ9MzUKKworZWNobyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgoraWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3RhYmxlIG1zZG9zCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5IGV4dDMgMCUgJGJvb3Rfc2l6ZQorZWxzZQorICAgIHBhcnRlZCAke2RldmljZX0gbWt0YWJsZSBncHQKKyAgICBlY2hvICJDcmVhdGluZyBCSU9TIGJvb3QgcGFydGl0aW9uIG9uICRiaW9zX2Jvb3QiCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgYmlvc19ib290IDAlICRiaW9zX2Jvb3Rfc2l6ZQorICAgIHBhcnRlZCAke2RldmljZX0gc2V0IDEgYmlvc19ncnViIG9uCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBib290IGV4dDMgJGJvb3Rfc3RhcnQgJGJvb3Rfc2l6ZQorZmkKKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gJiYgcG5hbWU9J3ByaW1hcnknIHx8IHBuYW1lPSdyb290JworcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgJHBuYW1lIGV4dDMgJHJvb3Rmc19zdGFydCAkcm9vdGZzX2VuZAorCitlY2hvICJDcmVhdGluZyBzd2FwIHBhcnRpdGlvbiBvbiAkc3dhcCIKK1sgJGdydWJfdmVyc2lvbiAtZXEgMCBdICYmIHBuYW1lPSdwcmltYXJ5JyB8fCBwbmFtZT0nc3dhcCcKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0ICRwbmFtZSBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGlmIFsgJGdydWJfdmVyc2lvbiAtbmUgMCBdIDsgdGhlbgorICAgICAgICBib290X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBVVUlEICR7ZGV2aWNlfTIpCisgICAgICAgIHN3YXBfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9NCkKKyAgICAgICAgYm9vdGRldj0iVVVJRD0kYm9vdF91dWlkIgorICAgICAgICBzd2FwZGV2PS9kZXYvZGlzay9ieS1wYXJ0dXVpZC8kc3dhcF9wYXJ0X3V1aWQKKyAgICBlbHNlCisgICAgICAgIGJvb3RkZXY9JHtkZXZpY2V9MgorICAgICAgICBzd2FwZGV2PSR7ZGV2aWNlfTQKKyAgICBmaQorICAgIGVjaG8gIiRzd2FwZGV2ICAgICAgICAgICAgICAgIHN3YXAgICAgICAgICAgICAgc3dhcCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMCIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgIGVjaG8gIiRib290ZGV2ICAgICAgICAgICAgICAvYm9vdCAgICAgICAgICAgIGV4dDMgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDEgIDIiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvdGd0X3Jvb3QvZXRjL3VkZXYvIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIiR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIC1hICRncnViX3ZlcnNpb24gLW5lIDAgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIyIG1lbnUuLi4iCisgICAgcm9vdF9wYXJ0X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBQQVJUVVVJRCAke2RldmljZX0zKQorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIvYm9vdC9ncnViL2dydWIuY2ZnIgorICAgIG1rZGlyIC1wICQoZGlybmFtZSAkR1JVQkNGRykKKyAgICBjYXQgPiRHUlVCQ0ZHIDw8X0VPRgorbWVudWVudHJ5ICJMaW51eCIgeworICAgIHNlYXJjaCAtLW5vLWZsb3BweSAtLWZzLXV1aWQgJGJvb3RfdXVpZCAtLXNldCByb290CisgICAgbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgJHJvb3R3YWl0IHJ3ICQ1ICQzICQ0IHF1aWV0Cit9CitfRU9GCisgICAgY2htb2QgMDQ0NCAkR1JVQkNGRworZmkKK2dydWItaW5zdGFsbCAke2RldmljZX0KKworaWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgZWNobyAiKGhkMCkgJHtkZXZpY2V9IiA+IC9ib290L2dydWIvZGV2aWNlLm1hcAorICAgIGVjaG8gIlByZXBhcmluZyBjdXN0b20gZ3J1YiBtZW51Li4uIgorICAgIGVjaG8gImRlZmF1bHQgMCIgPiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAidGltZW91dCAzMCIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpdGxlIExpdmUgQm9vdC9JbnN0YWxsLUltYWdlIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAicm9vdCAgKGhkMCwwKSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gImtlcm5lbCAvdm1saW51eiByb290PSRyb290ZnMgcncgJDMgJDQgcXVpZXQiID4+IC9ib290L2dydWIvbWVudS5sc3QKK2ZpCisKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvYm9vdC8KKwordW1vdW50IC9ib290CisKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTJjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaApAQCAtMCwwICsxLDIzNSBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworUk9PVF9NT1VOVD0iL3Jvb3Rmcy8iCitST09UX0lNQUdFPSJyb290ZnMuaW1nIgorTU9VTlQ9Ii9iaW4vbW91bnQiCitVTU9VTlQ9Ii9iaW4vdW1vdW50IgorSVNPTElOVVg9IiIKKworUk9PVF9ESVNLPSIiCisKKyMgQ29waWVkIGZyb20gaW5pdHJhbWZzLWZyYW1ld29yay4gVGhlIGNvcmUgb2YgdGhpcyBzY3JpcHQgcHJvYmFibHkgc2hvdWxkIGJlCisjIHR1cm5lZCBpbnRvIGluaXRyYW1mcy1mcmFtZXdvcmsgbW9kdWxlcyB0byByZWR1Y2UgZHVwbGljYXRpb24uCit1ZGV2X2RhZW1vbigpIHsKKwlPUFRJT05TPSIvc2Jpbi91ZGV2L3VkZXZkIC9zYmluL3VkZXZkIC9saWIvdWRldi91ZGV2ZCAvbGliL3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCIKKworCWZvciBvIGluICRPUFRJT05TOyBkbworCQlpZiBbIC14ICIkbyIgXTsgdGhlbgorCQkJZWNobyAkbworCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisKKwlyZXR1cm4gMQorfQorCitfVURFVl9EQUVNT049YHVkZXZfZGFlbW9uYAorCitlYXJseV9zZXR1cCgpIHsKKyAgICBta2RpciAtcCAvcHJvYworICAgIG1rZGlyIC1wIC9zeXMKKyAgICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKKyAgICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisgICAgbW91bnQgLXQgZGV2dG1wZnMgbm9uZSAvZGV2CisKKyAgICAjIHN1cHBvcnQgbW9kdWxhciBrZXJuZWwKKyAgICBtb2Rwcm9iZSBpc29mcyAyPiAvZGV2L251bGwKKworICAgIG1rZGlyIC1wIC9ydW4KKyAgICBta2RpciAtcCAvdmFyL3J1bgorCisgICAgJF9VREVWX0RBRU1PTiAtLWRhZW1vbgorICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQKK30KKworcmVhZF9hcmdzKCkgeworICAgIFsgLXogIiRDTURMSU5FIiBdICYmIENNRExJTkU9YGNhdCAvcHJvYy9jbWRsaW5lYAorICAgIGZvciBhcmcgaW4gJENNRExJTkU7IGRvCisgICAgICAgIG9wdGFyZz1gZXhwciAieCRhcmciIDogJ3hbXj1dKj1cKC4qXCknYAorICAgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICAgICAgIHJvb3Q9KikKKyAgICAgICAgICAgICAgICBST09UX0RFVklDRT0kb3B0YXJnIDs7CisgICAgICAgICAgICByb290aW1hZ2U9KikKKyAgICAgICAgICAgICAgICBST09UX0lNQUdFPSRvcHRhcmcgOzsKKyAgICAgICAgICAgIHJvb3Rmc3R5cGU9KikKKyAgICAgICAgICAgICAgICBtb2Rwcm9iZSAkb3B0YXJnIDI+IC9kZXYvbnVsbCA7OworICAgICAgICAgICAgTEFCRUw9KikKKyAgICAgICAgICAgICAgICBsYWJlbD0kb3B0YXJnIDs7CisgICAgICAgICAgICB2aWRlbz0qKQorICAgICAgICAgICAgICAgIHZpZGVvX21vZGU9JGFyZyA7OworICAgICAgICAgICAgdmdhPSopCisgICAgICAgICAgICAgICAgdmdhX21vZGU9JGFyZyA7OworICAgICAgICAgICAgY29uc29sZT0qKQorICAgICAgICAgICAgICAgIGlmIFsgLXogIiR7Y29uc29sZV9wYXJhbXN9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSRhcmcKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSIkY29uc29sZV9wYXJhbXMgJGFyZyIKKyAgICAgICAgICAgICAgICBmaSA7OworICAgICAgICAgICAgZGVidWdzaGVsbCopCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJG9wdGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PTMwCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PSRvcHRhcmcKKyAgICAgICAgICAgICAgICBmaSAKKyAgICAgICAgZXNhYworICAgIGRvbmUKK30KKworYm9vdF9saXZlX3Jvb3QoKSB7CisgICAgIyBXYXRjaGVzIHRoZSB1ZGV2IGV2ZW50IHF1ZXVlLCBhbmQgZXhpdHMgaWYgYWxsIGN1cnJlbnQgZXZlbnRzIGFyZSBoYW5kbGVkCisgICAgdWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTMgLS1xdWlldAorICAgIGtpbGxhbGwgIiR7X1VERVZfREFFTU9OIyMqL30iIDI+L2Rldi9udWxsCisKKyAgICAjIEFsbG93IGZvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVhbCByb290IGV2ZW4gYWZ0ZXIgYm9vdAorICAgIG1rZGlyIC1wICAke1JPT1RfTU9VTlR9L21lZGlhL3JlYWxyb290CisgICAgbW91bnQgLW4gLS1tb3ZlICIvcnVuL21lZGlhLyR7Uk9PVF9ESVNLfSIgJHtST09UX01PVU5UfS9tZWRpYS9yZWFscm9vdAorCisgICAgIyBNb3ZlIHRoZSBtb3VudCBwb2ludHMgb2Ygc29tZSBmaWxlc3lzdGVtcyBvdmVyIHRvCisgICAgIyB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcmllcyB1bmRlciB0aGUgcmVhbCByb290IGZpbGVzeXN0ZW0uCisgICAgZm9yIGRpciBpbiBgYXdrICcvXC9kZXYuKiBcL3J1blwvbWVkaWEve3ByaW50ICQyfScgL3Byb2MvbW91bnRzYDsgZG8KKyAgICAgICAgbWtkaXIgLXAgICR7Uk9PVF9NT1VOVH0vbWVkaWEvJHtkaXIjIyovfQorICAgICAgICBtb3VudCAtbiAtLW1vdmUgJGRpciAke1JPT1RfTU9VTlR9L21lZGlhLyR7ZGlyIyMqL30KKyAgICBkb25lCisgICAgbW91bnQgLW4gLS1tb3ZlIC9wcm9jICR7Uk9PVF9NT1VOVH0vcHJvYworICAgIG1vdW50IC1uIC0tbW92ZSAvc3lzICR7Uk9PVF9NT1VOVH0vc3lzCisgICAgbW91bnQgLW4gLS1tb3ZlIC9kZXYgJHtST09UX01PVU5UfS9kZXYKKworICAgIGNkICRST09UX01PVU5UCisKKyAgICAjIGJ1c3lib3ggc3dpdGNoX3Jvb3Qgc3VwcG9ydHMgLWMgb3B0aW9uCisgICAgZXhlYyBzd2l0Y2hfcm9vdCAtYyAvZGV2L2NvbnNvbGUgJFJPT1RfTU9VTlQgL3NiaW4vaW5pdCAkQ01ETElORSB8fAorICAgICAgICBmYXRhbCAiQ291bGRuJ3Qgc3dpdGNoX3Jvb3QsIGRyb3BwaW5nIHRvIHNoZWxsIgorfQorCitmYXRhbCgpIHsKKyAgICBlY2hvICQxID4kQ09OU09MRQorICAgIGVjaG8gPiRDT05TT0xFCisgICAgZXhlYyBzaAorfQorCitlYXJseV9zZXR1cAorCitbIC16ICIkQ09OU09MRSIgXSAmJiBDT05TT0xFPSIvZGV2L2NvbnNvbGUiCisKK3JlYWRfYXJncworCitlY2hvICJXYWl0aW5nIGZvciByZW1vdmFibGUgbWVkaWEuLi4iCitDPTAKK3doaWxlIHRydWUKK2RvCisgIGZvciBpIGluIGBscyAvcnVuL21lZGlhIDI+L2Rldi9udWxsYDsgZG8KKyAgICAgIGlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kUk9PVF9JTUFHRSBdIDsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlST09UX0RJU0s9IiRpIgorCQlicmVhaworCSAgZWxpZiBbIC1mIC9ydW4vbWVkaWEvJGkvaXNvbGludXgvJFJPT1RfSU1BR0UgXTsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlJU09MSU5VWD0iaXNvbGludXgiCisJCVJPT1RfRElTSz0iJGkiCisJCWJyZWFrCQorICAgICAgZmkKKyAgZG9uZQorICBpZiBbICIkZm91bmQiID0gInllcyIgXTsgdGhlbgorICAgICAgYnJlYWs7CisgIGZpCisgICMgZG9uJ3Qgd2FpdCBmb3IgbW9yZSB0aGFuICRzaGVsbHRpbWVvdXQgc2Vjb25kcywgaWYgaXQncyBzZXQKKyAgaWYgWyAtbiAiJHNoZWxsdGltZW91dCIgXTsgdGhlbgorICAgICAgZWNobyAtbiAiICIgJCgoICRzaGVsbHRpbWVvdXQgLSAkQyApKQorICAgICAgaWYgWyAkQyAtZ2UgJHNoZWxsdGltZW91dCBdOyB0aGVuCisgICAgICAgICAgIGVjaG8gIi4uLiIKKwkgICBlY2hvICJNb3VudGVkIGZpbGVzeXN0ZW1zIgorICAgICAgICAgICBtb3VudCB8IGdyZXAgbWVkaWEKKyAgICAgICAgICAgZWNobyAiQXZhaWxhYmxlIGJsb2NrIGRldmljZXMiCisgICAgICAgICAgIGNhdCAvcHJvYy9wYXJ0aXRpb25zCisgICAgICAgICAgIGZhdGFsICJDYW5ub3QgZmluZCAkUk9PVF9JTUFHRSBmaWxlIGluIC9ydW4vbWVkaWEvKiAsIGRyb3BwaW5nIHRvIGEgc2hlbGwgIgorICAgICAgZmkKKyAgICAgIEM9JCgoIEMgKyAxICkpCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKworIyBUcnkgdG8gbW91bnQgdGhlIHJvb3QgaW1hZ2UgcmVhZC13cml0ZSBhbmQgdGhlbiBib290IGl0IHVwLgorIyBUaGlzIGZ1bmN0aW9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhIHJlYWQtb25seSBpbWFnZSBhbmQgYSByZWFkLXdyaXRlIGltYWdlLgorIyBJbiB0aGUgZm9ybWVyIGNhc2UgKHR5cGljYWxseSBhbiBpc28pLCBpdCB0cmllcyB0byBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUuCisjIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHJvb3QgaW1hZ2UgY291bGQgYmUgbW91bnRlZCBhbmQgdGhlbiBkaXJlY3RseSBib290ZWQgdXAuCittb3VudF9hbmRfYm9vdCgpIHsKKyAgICBta2RpciAkUk9PVF9NT1VOVAorICAgIG1rbm9kIC9kZXYvbG9vcDAgYiA3IDAgMj4vZGV2L251bGwKKworICAgIGlmICEgbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kUk9PVF9ESVNLLyRJU09MSU5VWC8kUk9PVF9JTUFHRSAkUk9PVF9NT1VOVCA7IHRoZW4KKwlmYXRhbCAiQ291bGQgbm90IG1vdW50IHJvb3RmcyBpbWFnZSIKKyAgICBmaQorCisgICAgaWYgdG91Y2ggJFJPT1RfTU9VTlQvYmluIDI+L2Rldi9udWxsOyB0aGVuCisJIyBUaGUgcm9vdCBpbWFnZSBpcyByZWFkLXdyaXRlLCBkaXJlY3RseSBib290IGl0IHVwLgorCWJvb3RfbGl2ZV9yb290CisgICAgZmkKKworICAgICMgZGV0ZXJtaW5lIHdoaWNoIHVuaWZpY2F0aW9uIGZpbGVzeXN0ZW0gdG8gdXNlCisgICAgdW5pb25fZnNfdHlwZT0iIgorICAgIGlmIGdyZXAgLXEgLXcgIm92ZXJsYXlmcyIgL3Byb2MvZmlsZXN5c3RlbXM7IHRoZW4KKwl1bmlvbl9mc190eXBlPSJvdmVybGF5ZnMiCisgICAgZWxpZiBncmVwIC1xIC13ICJhdWZzIiAvcHJvYy9maWxlc3lzdGVtczsgdGhlbgorCXVuaW9uX2ZzX3R5cGU9ImF1ZnMiCisgICAgZWxzZQorCXVuaW9uX2ZzX3R5cGU9IiIKKyAgICBmaQorCisgICAgIyBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUKKyAgICBjYXNlICR1bmlvbl9mc190eXBlIGluCisJIm92ZXJsYXlmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgb3ZlcmxheWZzIC1vICJsb3dlcmRpcj0vcm9vdGZzLnJvLHVwcGVyZGlyPS9yb290ZnMucnciIG92ZXJsYXlmcyAkUk9PVF9NT1VOVAorCQlta2RpciAtcCAkUk9PVF9NT1VOVC9yb290ZnMucm8gJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJCW1vdW50IC0tbW92ZSAvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ybworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ydyAkUk9PVF9NT1VOVC9yb290ZnMucncKKwkgICAgZmkKKwkgICAgOzsKKwkiYXVmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgYXVmcyAtbyAiZGlycz0vcm9vdGZzLnJ3PXJ3Oi9yb290ZnMucm89cm8iIGF1ZnMgJFJPT1RfTU9VTlQKKwkJbWtkaXIgLXAgJFJPT1RfTU9VTlQvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ydworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ybyAkUk9PVF9NT1VOVC9yb290ZnMucm8KKwkJbW91bnQgLS1tb3ZlIC9yb290ZnMucncgJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJICAgIGZpCisJICAgIDs7CisJIiIpCisJICAgIG1vdW50IC10IHRtcGZzIC1vIHJ3LG5vYXRpbWUsbW9kZT03NTUgdG1wZnMgJFJPT1RfTU9VTlQvbWVkaWEKKwkgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIGJvb3QgdGhlIGltYWdlCisgICAgYm9vdF9saXZlX3Jvb3QKK30KKworY2FzZSAkbGFiZWwgaW4KKyAgICBib290KQorCW1vdW50X2FuZF9ib290CisJOzsKKyAgICBpbnN0YWxsfGluc3RhbGwtZWZpKQorCWlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kSVNPTElOVVgvJFJPT1RfSU1BR0UgXSA7IHRoZW4KKwkgICAgLi8kbGFiZWwuc2ggJGkvJElTT0xJTlVYICRST09UX0lNQUdFICR2aWRlb19tb2RlICR2Z2FfbW9kZSAkY29uc29sZV9wYXJhbXMKKwllbHNlCisJICAgIGZhdGFsICJDb3VsZCBub3QgZmluZCAkbGFiZWwgc2NyaXB0IgorCWZpCisKKwkjIElmIHdlJ3JlIGdldHRpbmcgaGVyZSwgd2UgZmFpbGVkLi4uCisJZmF0YWwgIkluc3RhbGxhdGlvbiBpbWFnZSBmYWlsZWQiCisJOzsKKyAgICAqKQorCSMgTm90IHN1cmUgd2hhdCBib290IGxhYmVsIGlzIHByb3ZpZGVkLiAgVHJ5IHRvIGJvb3QgdG8gYXZvaWQgbG9ja2luZyB1cC4KKwltb3VudF9hbmRfYm9vdAorCTs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWJvb3RfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTc5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkV4dHJlbWVseSBiYXNpYyBsaXZlIGltYWdlIGluaXQgc2NyaXB0IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtYm9vdC5zaCIKKworUFIgPSAicjIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1ib290LnNoICR7RH0vaW5pdAorfQorCitpbmhlcml0IGFsbGFyY2gKKworRklMRVNfJHtQTn0gKz0gIiAvaW5pdCAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZGVidWcgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZGVidWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiZmQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZwpAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworIyBBZGRzIHN1cHBvcnQgdG8gZHluYW1pYyBkZWJ1Z2dpbmcgb2YgaW5pdHJhbWZzIHVzaW5nIGJvb3RwYXJhbSBpbgorIyBmb2xsb3dpbmcgZm9ybWF0OgorIyAgIHNoZWxsICAgICAgICAgICAgICAgICA6IHN0YXJ0cyBhIHNoZWxsIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtb2R1bGUKKyMgICBzaGVsbD1iZWZvcmU6PG1vZHVsZT4gOiBzdGFydHMgYSBzaGVsbCBiZWZvcmUgPG1vZHVsZT4gaXMgbG9hZGVkIGFuZCBydW4KKyMgICBzaGVsbD1hZnRlcjo8bW9kdWxlPiAgOiBzdGFydHMgYSBzaGVsbCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorIworIyAgIHNoZWxsLWRlYnVnICAgICAgICAgICAgICAgICA6IHJ1biBzZXQgLXggYXMgc29vbiBhcyBwb3NzaWJsZQorIyAgIHNoZWxsLWRlYnVnPWJlZm9yZTo8bW9kdWxlPiA6IHJ1biBzZXQgLXggYmVmb3JlIDxtb2R1bGU+IGlzIGxvYWRlZCBhbmQgcnVuCisjICAgc2hlbGwtZGVidWc9YWZ0ZXI6PG1vZHVsZT4gIDogcnVuIHNldCAteCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorCitERUJVR19TSEVMTD0iZmFsc2UiCisKK2RlYnVnX2hvb2tfaGFuZGxlcigpIHsKKwlzdGF0dXM9JDEKKwltb2R1bGU9JDIKKworCWlmIFsgLW4gIiRib290cGFyYW1fc2hlbGwiIF0gJiYgWyAiJGJvb3RwYXJhbV9zaGVsbCIgIT0gInRydWUiIF07IHRoZW4KKwkJc2hlbGxfd2FudGVkX3N0YXR1cz1gZXhwciAkYm9vdHBhcmFtX3NoZWxsIDogJ1woLipcKTouKidgCisJCXNoZWxsX3dhbnRlZF9tb2R1bGU9YGV4cHIgJGJvb3RwYXJhbV9zaGVsbCA6ICcuKjpcKC4qXCknYAorCisJCWlmIFsgIiRzaGVsbF93YW50ZWRfc3RhdHVzIiA9ICJiZWZvcmUiIF07IHRoZW4KKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cHJlCisJCWVsc2UKKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cG9zdAorCQlmaQorCWZpCisKKwlpZiBbICIkYm9vdHBhcmFtX3NoZWxsIiA9ICJ0cnVlIiBdIHx8CisJCSggWyAiJHN0YXR1cyIgPSAiJHNoZWxsX3dhbnRlZF9zdGF0dXMiIF0gJiYKKwkJCVsgIiRtb2R1bGUiID0gIiRzaGVsbF93YW50ZWRfbW9kdWxlIiBdICk7IHRoZW4KKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgJHN0YXR1c19tc2cgJG1vZHVsZS4uLiIKKwkJc2gKKwlmaQorCisJaWYgWyAtbiAiJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyIgXSAmJiBbICIkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQlzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzPWBleHByICRib290cGFyYW1fc2hlbGxfZGVidWcgOiAnXCguKlwpOi4qJ2AKKwkJc2hlbGxfZGVidWdfd2FudGVkX21vZHVsZT1gZXhwciAkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIDogJy4qOlwoLipcKSdgCisKKwkJaWYgWyAiJHNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXMiID0gImJlZm9yZSIgXTsgdGhlbgorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wcmUKKwkJZWxzZQorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wb3N0CisJCWZpCisJZmkKKworCWlmIFsgIiRib290cGFyYW1fc2hlbGxfZGVidWciID0gInRydWUiIF0gfHwKKwkJKCBbICIkc3RhdHVzIiA9ICIkc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cyIgXSAmJgorCQkJWyAiJG1vZHVsZSIgPSAiJHNoZWxsX2RlYnVnX3dhbnRlZF9tb2R1bGUiIF0gKTsgdGhlbgorCQlpZiBbICIkREVCVUdfU0hFTEwiID0gInRydWUiIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisKKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgZGVidWdnaW5nICRzdGF0dXNfbXNnICRtb2R1bGUuLi4iCisJCURFQlVHX1NIRUxMPSJ0cnVlIgorCQlzZXQgLXgKKwlmaQorfQorCitkZWJ1Z19lbmFibGVkKCkgeworCXJldHVybiAwCit9CisKK2RlYnVnX3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJkZWJ1Z19ob29rX2hhbmRsZXIiCisJYWRkX21vZHVsZV9wb3N0X2hvb2sgImRlYnVnX2hvb2tfaGFuZGxlciIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2UyZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjlmODAxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitlMmZzX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworZTJmc19ydW4oKSB7CisJZmlsZXN5c3RlbXM9ImV4dDQgZXh0MyBleHQyIgorCisJIyBsb2FkIG1vZHVsZXMKKwlmb3IgZnMgaW4gJGZpbGVzeXN0ZW1zOyBkbworCQlsb2FkX2tlcm5lbF9tb2R1bGUgJGZzCisJZG9uZQorCisJZm9yIGZzIGluICRmaWxlc3lzdGVtczsgZG8KKwkJZXZhbCAiZnNfb3B0aW9ucz1cJGJvb3RwYXJhbV8ke2ZzfSIKKwkJaWYgWyAtbiAiJGZzX29wdGlvbnMiIF07IHRoZW4KKwkJICAgIGRldj1gZXhwciAiJGZzX29wdGlvbnMiIDogJ1woW146XSpcKS4qJ2AKKwkJICAgIHBhdGg9YGV4cHIgIiRmc19vcHRpb25zIiA6ICdbXjpdKjpcKFteOl0qXCkuKidgCisKKwkJICAgIGluZm8gIk1vdW50aW5nICRkZXYgYXMgJGZzIG9uICRwYXRoIGFzICRmcy4uLiIKKwkJCW1rZGlyIC1wICRwYXRoCisJCSAgICBtb3VudCAtdCAkZnMgJGRldiAkcGF0aAorCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZmluaXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3MTJmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZmluaXNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitmaW5pc2hfZW5hYmxlZCgpIHsKKwlyZXR1cm4gMAorfQorCitmaW5pc2hfcnVuKCkgeworCWlmIFsgLW4gIiRST09URlNfRElSIiBdOyB0aGVuCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdGRlbGF5IiBdOyB0aGVuCisJCQlkZWJ1ZyAiU2xlZXBpbmcgZm9yICRyb290ZGVsYXkgc2Vjb25kKHMpIHRvIHdhaXQgcm9vdCB0byBzZXR0bGUuLi4iCisJCQlzbGVlcCAkYm9vdHBhcmFtX3Jvb3RkZWxheQorCQlmaQorCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJZGVidWcgIk5vIGUyZnMgY29tcGF0aWJsZSBmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQsIG1vdW50aW5nICRib290cGFyYW1fcm9vdC4uLiIKKworCQkJaWYgWyAiYGVjaG8gJHtib290cGFyYW1fcm9vdH0gfCBjdXQgLWMxLTVgIiA9ICJVVUlEPSIgXTsgdGhlbgorCQkJCXJvb3RfdXVpZD1gZWNobyAkYm9vdHBhcmFtX3Jvb3QgfCBjdXQgLWM2LWAKKwkJCQlib290cGFyYW1fcm9vdD0iL2Rldi9kaXNrL2J5LXV1aWQvJHJvb3RfdXVpZCIKKwkJCWZpCisKKwkJCWlmIFsgLWUgIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJCWZsYWdzPSIiCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9ybyIgXTsgdGhlbgorCQkJCQlpZiBbICAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJCWJvb3RwYXJhbV9yb290ZmxhZ3M9IiRib290cGFyYW1fcm9vdGZsYWdzLCIKKwkJCQkJZmkKKwkJCQkJYm9vdHBhcmFtX3Jvb3RmbGFncz0iJHtib290cGFyYW1fcm9vdGZsYWdzfXJvIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJZmxhZ3M9IiRmbGFncyAtbyRib290cGFyYW1fcm9vdGZsYWdzIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZnN0eXBlIiBdOyB0aGVuCisJCQkJCWZsYWdzPSIkZmxhZ3MgLXQkYm9vdHBhcmFtX3Jvb3Rmc3R5cGUiCisJCQkJZmkKKwkJCQltb3VudCAkZmxhZ3MgJGJvb3RwYXJhbV9yb290ICRST09URlNfRElSCisJCQllbHNlCisJCQkJZGVidWcgInJvb3QgJyRib290cGFyYW1fcm9vdCcgZG9lc24ndCBleGlzdC4iCisJCQlmaQorCQlmaQorCisJCWlmIFsgISAtZCAkUk9PVEZTX0RJUi9kZXYgXTsgdGhlbgorCQkJZmF0YWwgIkVSUk9SOiBUaGVyZSdzIG5vICcvZGV2JyBvbiByb290ZnMuIgorCQlmaQorCisJCWluZm8gIlN3aXRjaGluZyByb290IHRvICckUk9PVEZTX0RJUicuLi4iCisKKwkJZGVidWcgIk1vdmluZyAvZGV2LCAvcHJvYyBhbmQgL3N5cyBvbnRvIHJvb3Rmcy4uLiIKKwkJbW91bnQgLS1tb3ZlIC9kZXYgJFJPT1RGU19ESVIvZGV2CisJCW1vdW50IC0tbW92ZSAvcHJvYyAkUk9PVEZTX0RJUi9wcm9jCisJCW1vdW50IC0tbW92ZSAvc3lzICRST09URlNfRElSL3N5cworCisJCWNkICRST09URlNfRElSCisJCWV4ZWMgc3dpdGNoX3Jvb3QgLWMgL2Rldi9jb25zb2xlICRST09URlNfRElSICR7Ym9vdHBhcmFtX2luaXQ6LS9zYmluL2luaXR9CisJZWxzZQorCQlkZWJ1ZyAiTm8gcm9vdGZzIGhhcyBiZWVuIHNldCIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjkxYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQKQEAgLTAsMCArMSwxNDUgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorIworIyBQcm92aWRlcyB0aGUgQVBJIHRvIGJlIHVzZWQgYnkgdGhlIGluaXRyYW1mcyBtb2R1bGVzCisjCisjIE1vZHVsZXMgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorIworIyA8bW9kdWxlPl9lbmFibGVkIDogY2hlY2sgaWYgdGhlIG1vZHVsZSBvdWdodCB0byBydW4gKHJldHVybiAxIHRvIHNraXApCisjIDxtb2R1bGU+X3J1biAgICAgOiBkbyB3aGF0IGlzIG5lZWQKKyMKKyMgQm9vdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUgb24gZW52aXJvbm1lbnQgaW4gdGhlIGFzOgorIworIyAnZm9vPXZhbHVlJyBhcyAnYm9vdHBhcmFtX2Zvbz12YWx1ZScKKyMgJ2ZvbycgYXMgJ2Jvb3RwYXJhbV9mb289dHJ1ZScKKyMgJ2Zvby5iYXJbPXZhbHVlXSBhcyAnZm9vX2Jhcj1bdmFsdWV8dHJ1ZV0nCisKKyMgUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcHJlIDxtb2R1bGU+CithZGRfbW9kdWxlX3ByZV9ob29rKCkgeworCU1PRFVMRV9QUkVfSE9PS1M9IiRNT0RVTEVfUFJFX0hPT0tTICQxIgorfQorCisjIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcG9zdCA8bW9kdWxlPgorYWRkX21vZHVsZV9wb3N0X2hvb2soKSB7CisJTU9EVUxFX1BPU1RfSE9PS1M9IiRNT0RVTEVfUE9TVF9IT09LUyAkMSIKK30KKworIyBMb2FkIGtlcm5lbCBtb2R1bGUKK2xvYWRfa2VybmVsX21vZHVsZSgpIHsKKwlpZiBtb2Rwcm9iZSAkMSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJaW5mbyAiTG9hZGVkIG1vZHVsZSAkMSIKKwllbHNlCisJCWRlYnVnICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgJDEiCisJZmkKK30KKworIyBQcmludHMgaW5mb3JtYXRpb24KK21zZygpIHsKKwllY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiB2ZXJib3NlIGJvb3RwYXJhbSBpcyB1c2VkCitpbmZvKCkgeworCVsgLW4gIiRib290cGFyYW1fdmVyYm9zZSIgXSAmJiBlY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiBkZWJ1ZyBib290cGFyYW0gaXMgdXNlZAorZGVidWcoKSB7CisJWyAtbiAiJGJvb3RwYXJhbV9kZWJ1ZyIgXSAmJiBlY2hvICJERUJVRzogJEAiID4vZGV2L2NvbnNvbGUKK30KKworIyBQcmludHMgYSBtZXNzYWdlIGFuZCBzdGFydCBhIGVuZGxlc3MgbG9vcAorZmF0YWwoKSB7CisgICAgZWNobyAkMSA+L2Rldi9jb25zb2xlCisgICAgZWNobyA+L2Rldi9jb25zb2xlCisKKyAgICBpZiBbIC1uICJib290cGFyYW1faW5pdF9mYXRhbF9zaCIgXTsgdGhlbgorICAgICAgICBzaAorICAgIGVsc2UKKwl3aGlsZSBbICJ0cnVlIiBdOyBkbworCQlzbGVlcCAzNjAwCisJZG9uZQorICAgIGZpCit9CisKKyMgVmFyaWFibGVzIHNoYXJlZCBhbW91bmcgbW9kdWxlcworUk9PVEZTX0RJUj0iL3Jvb3RmcyIgIyB3aGVyZSB0byBkbyB0aGUgc3dpdGNoIHJvb3QKK01PRFVMRV9QUkVfSE9PS1M9IiIgICMgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHJ1bm5pbmcgZWFjaCBtb2R1bGUKK01PRFVMRV9QT1NUX0hPT0tTPSIiICMgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgcnVubmluZyBlYWNoIG1vZHVsZQorTU9EVUxFU19ESVI9L2luaXQuZCAgIyBwbGFjZSB0byBsb29rIGZvciBtb2R1bGVzCisKKyMgbWFrZSBtb3VudCBzdG9wIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgL2V0Yy9mc3RhYgordG91Y2ggL2V0Yy9mc3RhYgorCisjIGluaXRpYWxpemUgL3Byb2MsIC9zeXMgYW5kIC92YXIvbG9jaworbWtkaXIgLXAgL3Byb2MgL3N5cyAvdmFyL2xvY2sKK21vdW50IC10IHByb2MgcHJvYyAvcHJvYworbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCisjIHBvcHVsYXRlIGJvb3RwYXJhbSBlbnZpcm9ubWVudAorZm9yIHAgaW4gYGNhdCAvcHJvYy9jbWRsaW5lYDsgZG8KKwlvcHQ9YGVjaG8gJHAgfCBjdXQgLWQnPScgLWYxYAorCW9wdD1gZWNobyAkb3B0IHwgdHIgJy4tJyAnX18nYAorCWlmIFsgImBlY2hvICRwIHwgY3V0IC1kJz0nIC1mMWAiID0gIiRwIiBdOyB0aGVuCisJCWV2YWwgImJvb3RwYXJhbV8ke29wdH09dHJ1ZSIKKwllbHNlCisJCXZhbHVlPSJgZWNobyAkcCB8IGN1dCAtZCc9JyAtZjItYCIKKwkJZXZhbCAiYm9vdHBhcmFtXyR7b3B0fT1cIiR7dmFsdWV9XCIiCisJZmkKK2RvbmUKKworIyB1c2UgL2RldiB3aXRoIGRldnRtcGZzCitpZiBncmVwIC1xIGRldnRtcGZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisJbWtkaXIgLXAgL2RldgorCW1vdW50IC10IGRldnRtcGZzIGRldnRtcGZzIC9kZXYKK2Vsc2UKKwlpZiBbICEgLWQgL2RldiBdOyB0aGVuCisJCWZhdGFsICJFUlJPUjogL2RldiBkb2Vzbid0IGV4aXN0IGFuZCBrZXJuZWwgZG9lc24ndCBoYXMgZGV2dG1wZnMgZW5hYmxlZC4iCisJZmkKK2ZpCisKK21rZGlyICRST09URlNfRElSCisKKyMgTG9hZCBhbmQgcnVuIG1vZHVsZXMKK2ZvciBtIGluICRNT0RVTEVTX0RJUi8qOyBkbworCSMgU2tpcCBiYWNrdXAgZmlsZXMKKwlpZiBbICJgZWNobyAkbSB8IHNlZCAtZSAncy9cfiQvLydgIiAhPSAiJG0iIF07IHRoZW4KKwkJY29udGludWUKKwlmaQorCisJbW9kdWxlPWBiYXNlbmFtZSAkbSB8IGN1dCAtZCctJyAtZiAyYAorCWRlYnVnICJMb2FkaW5nIG1vZHVsZSAkbW9kdWxlIgorCisJIyBwcmUgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BSRV9IT09LUzsgZG8KKwkJZGVidWcgIkNhbGxpbmcgbW9kdWxlIGhvb2sgKHByZSk6ICRoIgorCQlldmFsICIkaCBwcmUgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwcmUpOiAkaCIKKwlkb25lCisKKwkjIHByb2Nlc3MgbW9kdWxlCisJLiAkbQorCisJaWYgISBldmFsICIke21vZHVsZX1fZW5hYmxlZCI7IHRoZW4KKwkJZGVidWcgIlNraXBwaW5nIG1vZHVsZSAkbW9kdWxlIgorCQljb250aW51ZQorCWZpCisKKwlkZWJ1ZyAiUnVubmluZyAke21vZHVsZX1fcnVuIgorCWV2YWwgIiR7bW9kdWxlfV9ydW4iCisKKwkjIHBvc3QgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BPU1RfSE9PS1M7IGRvCisJCWRlYnVnICJDYWxsaW5nIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJCWV2YWwgIiRoIHBvc3QgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJZG9uZQorZG9uZQorCisjIENhdGNoIGFsbAorZmF0YWwgIkVSUk9SOiBJbml0cmFtZnMgZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHN5c3RlbS4iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9tZGV2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZGYxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldgpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworbWRldl9lbmFibGVkKCkgeworCWlmIFsgISAtZSAvc2Jpbi9tZGV2IF07IHRoZW4KKwkJZGVidWcgIi9zYmluL21kZXYgZG9lc24ndCBleGlzdCIKKwkJcmV0dXJuIDEKKwlmaQorCisJcmV0dXJuIDAKK30KKworbWRldl9ydW4oKSB7CisJIyBzZXR1cCB0aGUgZW52aXJvbm1lbnQKKwltb3VudCAtdCB0bXBmcyB0bXBmcyAvZGV2CisKKwlta2RpciAtbSAxNzc3IC9kZXYvc2htCisKKwlta2RpciAtbSAwNzU1IC9kZXYvcHRzCisJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cworCisJZWNobyAvc2Jpbi9tZGV2ID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnCisJbWRldiAtcworCisJIyBsb2FkIG1vZHVsZXMgZm9yIGRldmljZXMKKwlmaW5kIC9zeXMgLW5hbWUgbW9kYWxpYXMgfCB3aGlsZSByZWFkIG07IGRvCisJCWxvYWRfa2VybmVsX21vZHVsZSAkKGNhdCAkbSkKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay91ZGV2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDYyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKwordWRldl9zaHV0ZG93bl9ob29rX2hhbmRsZXIoKSB7CisJc3RhdHVzPSQxCisJbW9kdWxlPSQyCisJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdICYmIFsgIiRtb2R1bGUiID0gImZpbmlzaCIgXTsgdGhlbgorCQlraWxsYWxsIGBiYXNlbmFtZSAkX1VERVZfREFFTU9OYCAyPi9kZXYvbnVsbAorCWZpCit9CisKK3VkZXZfZGFlbW9uKCkgeworCU9QVElPTlM9Ii9zYmluL3VkZXYvdWRldmQgL3NiaW4vdWRldmQgL2xpYi91ZGV2L3VkZXZkIC9saWIvc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIgorCisJZm9yIG8gaW4gJE9QVElPTlM7IGRvCisJCWlmIFsgLXggIiRvIiBdOyB0aGVuCisJCQllY2hvICRvCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKworCXJldHVybiAxCit9CisKK19VREVWX0RBRU1PTj1gdWRldl9kYWVtb25gCisKK3VkZXZfZW5hYmxlZCgpIHsKKwlpZiBbIC16ICIkX1VERVZfREFFTU9OIiBdOyB0aGVuCisJCW1zZyAiV0FSTklORzogQ2Fubm90IGZpbmQgdGhlIHVkZXYgZGFlbW9uOyBkYWVtb24gd2lsbCBub3QgYmUgc3RhcnRlZCBpbiBpbml0cmFtZnMuIgorCQlyZXR1cm4gMQorCWZpCisKKwlyZXR1cm4gMAorfQorCit1ZGV2X3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJ1ZGV2X3NodXRkb3duX2hvb2tfaGFuZGxlciIKKworCW1rZGlyIC1wIC9ydW4KKworCSRfVURFVl9EQUVNT04gLS1kYWVtb24KKwl1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisJdWRldmFkbSBzZXR0bGUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmtfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzdiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmtfMS4wLmJiCkBAIC0wLDAgKzEsNjYgQEAKK1NVTU1BUlkgPSAiTW9kdWxhciBpbml0cmFtZnMgc3lzdGVtIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1JERVBFTkRTXyR7UE59ICs9ICJidXN5Ym94IgorCitQUiA9ICJyMiIKKworaW5oZXJpdCBhbGxhcmNoCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZmluaXNoIFwKKyAgICAgICAgICAgZmlsZTovL21kZXYgXAorICAgICAgICAgICBmaWxlOi8vdWRldiBcCisgICAgICAgICAgIGZpbGU6Ly9lMmZzIFwKKyAgICAgICAgICAgZmlsZTovL2RlYnVnIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9L2luaXQuZAorCisgICAgIyBiYXNlCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9L2luaXQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9maW5pc2ggJHtEfS9pbml0LmQvOTktZmluaXNoCisKKyAgICAjIG1kZXYKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2ICR7RH0vaW5pdC5kLzAxLW1kZXYKKworICAgICMgdWRldgorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYgJHtEfS9pbml0LmQvMDEtdWRldgorCisgICAgIyBlMmZzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZTJmcyAke0R9L2luaXQuZC8xMC1lMmZzCisKKyAgICAjIGRlYnVnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVidWcgJHtEfS9pbml0LmQvMDAtZGVidWcKKworICAgICMgQ3JlYXRlIGRldmljZSBub2RlcyBleHBlY3RlZCBieSBzb21lIGtlcm5lbHMgaW4gaW5pdHJhbWZzCisgICAgIyBiZWZvcmUgZXZlbiBleGVjdXRpbmcgL2luaXQuCisgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgIG1rbm9kIC1tIDYyMiAke0R9L2Rldi9jb25zb2xlIGMgNSAxCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWJhc2UgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1tZGV2IFwKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtdWRldiBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLWUyZnMgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyIKKworRklMRVNfJHtQTn0tYmFzZSA9ICIvaW5pdCAvaW5pdC5kLzk5LWZpbmlzaCAvZGV2IgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICJpbml0cmFtZnMgc3VwcG9ydCBmb3IgbWRldiIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICIke1BOfS1iYXNlIgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS1tZGV2ID0gIi9pbml0LmQvMDEtbWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIHVkZXYiCitSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiJHtQTn0tYmFzZSB1ZGV2IgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS11ZGV2ID0gIi9pbml0LmQvMDEtdWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIGV4dDQvZXh0My9leHQyIGZpbGVzeXN0ZW1zIgorUkRFUEVORFNfaW5pdHJhbWZzLW1vZHVsZS1lMmZzID0gIiR7UE59LWJhc2UiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiL2luaXQuZC8xMC1lMmZzIgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiaW5pdHJhbWZzIGR5bmFtaWMgZGVidWcgc3VwcG9ydCIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiJHtQTn0tYmFzZSIKK0ZJTEVTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiL2luaXQuZC8wMC1kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtYm9vdF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWJvb3RfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjMwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWJvb3RfMS4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbml0IHNjcmlwdCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUkRFUEVORFNfJHtQTn0gPSAidWRldiB1ZGV2LWV4dHJhY29uZiIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtbGl2ZS5zaCIKKworUFIgPSAicjEyIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtbGl2ZS5zaCAke0R9L2luaXQKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgICAgICBta25vZCAtbSA2MjIgJHtEfS9kZXYvY29uc29sZSBjIDUgMQorfQorCitGSUxFU18ke1BOfSArPSAiIC9pbml0IC9kZXYgIgorCisjIER1ZSB0byBrZXJuZWwgZGVwZW5kZW5jeQorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDNiZDJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCBmb3Igd2l0aCBhIHNlY29uZCByb290ZnMva2VybmVsIG9wdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAicGFydGVkIGUyZnNwcm9ncy1ta2UyZnMgZG9zZnN0b29scyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzFmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWItZWZpIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtaW5zdGFsbC1lZmkuc2giCisKK1BSID0gInIxIgorCitSREVQRU5EU18ke1BOfSA9ICJwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyBkb3Nmc3Rvb2xzIHV0aWwtbGludXgtYmxraWQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1pbnN0YWxsLWVmaS5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKKyMgV2hpbGUgdGhpcyBwYWNrYWdlIG1heWJlIGFuIGFsbGFyY2ggZHVlIHRvIGl0IGJlaW5nIGEKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3Rmc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3YmZkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCB3aXRoIGEgc2Vjb25kIHJvb3Rmcy9rZXJuZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAiZ3J1YiBwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtdGVzdGZzLnNoICR7RH0vaW5zdGFsbC5zaAorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGxfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGIzYjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWIiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLnNoIgorCitQUiA9ICJyOSIKKworUyA9ICIke1dPUktESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJncnViIHBhcnRlZCBlMmZzcHJvZ3MtbWtlMmZzIHV0aWwtbGludXgtYmxraWQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC5zaCAke0R9L2luc3RhbGwuc2gKK30KKworIyBXaGlsZSB0aGlzIHBhY2thZ2UgbWF5YmUgYW4gYWxsYXJjaCBkdWUgdG8gaXQgYmVpbmcgYSAKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwuc2ggIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL0dQTHYyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL0dQTHYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTgxODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2gKQEAgLTAsMCArMSwzNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9hcm0vYWxpZ25tZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzdiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGFsaWdubWVudAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRrZXJuZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgIG1vdW50a2VybmZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIFsgLWUgL3Byb2MvY3B1L2FsaWdubWVudCBdOyB0aGVuCisgICBlY2hvICIzIiA+IC9wcm9jL2NwdS9hbGlnbm1lbnQKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9iYW5uZXIuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYmFubmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMmIwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYmFubmVyLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogYmFubmVyCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbICEgLWUgL2Rldi90dHkgXTsgdGhlbgorICAgIC9iaW4vbWtub2QgLW0gMDY2NiAvZGV2L3R0eSBjIDUgMAorZmkKKworaWYgKCA+IC9kZXYvdHR5MCApIDI+L2Rldi9udWxsOyB0aGVuCisgICAgdnRtYXN0ZXI9L2Rldi90dHkwCitlbGlmICggPiAvZGV2L3ZjLzAgKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIHZ0bWFzdGVyPS9kZXYvdmMvMAorZWxpZiAoID4gL2Rldi9jb25zb2xlICkgMj4vZGV2L251bGw7IHRoZW4KKyAgICB2dG1hc3Rlcj0vZGV2L2NvbnNvbGUKK2Vsc2UKKyAgICB2dG1hc3Rlcj0vZGV2L251bGwKK2ZpCitlY2hvID4gJHZ0bWFzdGVyCitlY2hvICJQbGVhc2Ugd2FpdDogYm9vdGluZy4uLiIgPiAkdnRtYXN0ZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ib290bWlzYy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ib290bWlzYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjU1M2JjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdG1pc2MKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1pc2MgYW5kIG90aGVyLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvcmNTCisjCisjIFB1dCBhIG5vbG9naW4gZmlsZSBpbiAvZXRjIHRvIHByZXZlbnQgcGVvcGxlIGZyb20gbG9nZ2luZyBpbiBiZWZvcmUKKyMgc3lzdGVtIHN0YXJ0dXAgaXMgY29tcGxldGUuCisjCitpZiB0ZXN0ICIkREVMQVlMT0dJTiIgPSB5ZXMKK3RoZW4KKyAgZWNobyAiU3lzdGVtIGJvb3R1cCBpbiBwcm9ncmVzcyAtIHBsZWFzZSB3YWl0IiA+IC9ldGMvbm9sb2dpbgorICBjcCAvZXRjL25vbG9naW4gL2V0Yy9ub2xvZ2luLmJvb3QKK2ZpCisKKyMKKyMgU2V0IHBzZXVkby10ZXJtaW5hbCBhY2Nlc3MgcGVybWlzc2lvbnMuCisjCitpZiB0ZXN0IC1jIC9kZXYvdHR5cDAKK3RoZW4KKwljaG1vZCA2NjYgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCisJY2hvd24gcm9vdDp0dHkgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCitmaQorCisjCisjIEFwcGx5IC9wcm9jIHNldHRpbmdzIGlmIGRlZmluZWQKKyMKK1NZU0NUTF9DT05GPSIvZXRjL3N5c2N0bC5jb25mIgoraWYgWyAtZiAiJHtTWVNDVExfQ09ORn0iIF0KK3RoZW4KKwlpZiBbIC14ICIvc2Jpbi9zeXNjdGwiIF0KKwl0aGVuCisJCSMgYnVzeWJveCBzeXNjdGwgZG9lcyBub3Qgc3VwcG9ydCAtcQorCQlWRVJCT1NFX1JFRElSPSIxPi9kZXYvbnVsbCIKKwkJaWYgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdOyB0aGVuCisJCQlWRVJCT1NFX1JFRElSPSIxPiYxIgorCQlmaQorCQlldmFsIC9zYmluL3N5c2N0bCAtcCAiJHtTWVNDVExfQ09ORn0iICRWRVJCT1NFX1JFRElSCisJZWxzZQorCQllY2hvICJUbyBoYXZlICR7U1lTQ1RMX0NPTkZ9IGFwcGxpZWQgZHVyaW5nIGJvb3QsIGluc3RhbGwgcGFja2FnZSA8cHJvY3BzPi4iCisJZmkKK2ZpCisKKyMKKyMgVXBkYXRlIC9ldGMvbW90ZC4KKyMKK2lmIHRlc3QgIiRFRElUTU9URCIgIT0gbm8KK3RoZW4KKwl1bmFtZSAtYSA+IC9ldGMvbW90ZC50bXAKKwlzZWQgMWQgL2V0Yy9tb3RkID4+IC9ldGMvbW90ZC50bXAKKwltdiAvZXRjL21vdGQudG1wIC9ldGMvbW90ZAorZmkKKworIworIyBUaGlzIGlzIGFzIGdvb2QgYSBwbGFjZSBhcyBhbnkgZm9yIGEgc2FuaXR5IGNoZWNrCisjCisjIFNldCB0aGUgc3lzdGVtIGNsb2NrIGZyb20gaGFyZHdhcmUgY2xvY2sKKyMgSWYgdGhlIHRpbWVzdGFtcCBpcyBtb3JlIHJlY2VudCB0aGFuIHRoZSBjdXJyZW50IHRpbWUsCisjIHVzZSB0aGUgdGltZXN0YW1wIGluc3RlYWQuCit0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdGFydAoraWYgdGVzdCAtZSAvZXRjL3RpbWVzdGFtcAordGhlbgorCVNZU1RFTURBVEU9YGRhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyU2AKKwlyZWFkIFRJTUVTVEFNUCA8IC9ldGMvdGltZXN0YW1wCisJaWYgWyAke1RJTUVTVEFNUH0gLWd0ICRTWVNURU1EQVRFIF07IHRoZW4KKwkJIyBmb3JtYXQgdGhlIHRpbWVzdGFtcCBhcyBkYXRlIGV4cGVjdHMgaXQgKDJtMmQySDJNNFkuMlMpCisJCVRTX1lSPSR7VElNRVNUQU1QJT8/Pz8/Pz8/Pz99CisJCVRTX1NFQz0ke1RJTUVTVEFNUCM/Pz8/Pz8/Pz8/Pz99CisJCVRTX0ZJUlNUMTI9JHtUSU1FU1RBTVAlPz99CisJCVRTX01JRERMRTg9JHtUU19GSVJTVDEyIz8/Pz99CisJCWRhdGUgLXUgJHtUU19NSURETEU4fSR7VFNfWVJ9LiR7VFNfU0VDfQorCQl0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdG9wCisJZmkKK2ZpCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Mjg2OTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBjaGVja2ZzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBjaGVja3Jvb3QKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBDaGVjayBhbGwgb3RoZXIgZmlsZSBzeXN0ZW1zCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBDaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbXMuCisjCitpZiB0ZXN0ICEgLWYgL2Zhc3Rib290Cit0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorICAgICAgICBmb3JjZT0iLWYiCisgICAgZWxzZQorICAgICAgICBmb3JjZT0iIgorICAgIGZpCisgICAgaWYgdGVzdCAiJEZTQ0tGSVgiICA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisJZHVtYnxuZXR3b3JrfHVua25vd258IiIpIHNwaW5uZXI9IiIgOzsKKyAgICBlc2FjCisgICAgdGVzdCAiYHVuYW1lIC1tYCIgPSAiczM5MCIgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgYWxsIGZpbGVzeXN0ZW1zLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgLVIgLUEgJGZpeCAkZm9yY2UKKyAgICBpZiB0ZXN0ICIkPyIgLWd0IDEKKyAgICB0aGVuCisgICAgICBlY2hvCisgICAgICBlY2hvICJmc2NrIGZhaWxlZC4gIFBsZWFzZSByZXBhaXIgbWFudWFsbHkuIgorICAgICAgZWNobworICAgICAgZWNobyAiQ09OVFJPTC1EIHdpbGwgZXhpdCBmcm9tIHRoaXMgc2hlbGwgYW5kIGNvbnRpbnVlIHN5c3RlbSBzdGFydHVwLiIKKyAgICAgIGVjaG8KKyAgICAgICMgU3RhcnQgYSBzaW5nbGUgdXNlciBzaGVsbCBvbiB0aGUgY29uc29sZQorICAgICAgL3NiaW4vc3Vsb2dpbiAkQ09OU09MRQorICAgIGZpCitmaQorcm0gLWYgL2Zhc3Rib290IC9mb3JjZWZzY2sKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja3Jvb3Quc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmZWUyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCkBAIC0wLDAgKzEsMTQ4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGNoZWNrcm9vdAorIyBSZXF1aXJlZC1TdGFydDogICAgdWRldgorIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IENoZWNrIHRvIHJvb3QgZmlsZSBzeXN0ZW0uCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBTZXQgU1VMT0dJTiBpbiAvZXRjL2RlZmF1bHQvcmNTIHRvIHllcyBpZiB5b3Ugd2FudCBhIHN1bG9naW4gdG8gYmUgc3Bhd25lZAorIyBmcm9tIHRoaXMgc2NyaXB0ICpiZWZvcmUgYW55dGhpbmcgZWxzZSogd2l0aCBhIHRpbWVvdXQsIGxpa2UgU0NPIGRvZXMuCisjCit0ZXN0ICIkU1VMT0dJTiIgPSB5ZXMgJiYgc3Vsb2dpbiAtdCAzMCAkQ09OU09MRQorCisjCisjIFJlYWQgL2V0Yy9mc3RhYi4KKyMKK2V4ZWMgOTwgL2V0Yy9mc3RhYgorcm9vdG1vZGU9cncKK3Jvb3RvcHRzPXJ3Cityb290Y2hlY2s9JEVOQUJMRV9ST09URlNfRlNDSworc3dhcF9vbl9tZD1ubworZGV2ZnM9Cit3aGlsZSByZWFkIGZzIG1udCB0eXBlIG9wdHMgZHVtcCBwYXNzIGp1bmsgPCY5CitkbworCWNhc2UgIiRmcyIgaW4KKwkJIiJ8XCMqKQorCQkJY29udGludWU7CisJCQk7OworCQkvZGV2L21kKikKKwkJCSMgU3dhcCBvbiBtZCBkZXZpY2UuCisJCQl0ZXN0ICIkdHlwZSIgPSBzd2FwICYmIHN3YXBfb25fbWQ9eWVzCisJCQk7OworCQkvZGV2LyopCisJCQk7OworCQkqKQorCQkJIyBNaWdodCBiZSBhIHN3YXBmaWxlLgorCQkJdGVzdCAiJHR5cGUiID0gc3dhcCAmJiBzd2FwX29uX21kPXllcworCQkJOzsKKwllc2FjCisJdGVzdCAiJHR5cGUiID0gZGV2ZnMgJiYgZGV2ZnM9IiRmcyIKKwl0ZXN0ICIkbW50IiAhPSAvICYmIGNvbnRpbnVlCisJcm9vdG9wdHM9IiRvcHRzIgorCXRlc3QgIiRwYXNzIiA9IDAgLW8gIiRwYXNzIiA9ICIiICYmIHJvb3RjaGVjaz1ubworCWNhc2UgIiRvcHRzIiBpbgorCQlyb3xybywqfCoscm98KixybywqKQorCQkJcm9vdG1vZGU9cm8KKwkJCTs7CisJZXNhYworZG9uZQorZXhlYyAwPiY5IDk+Ji0KKworIyBDaGVjayBmb3IgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMKK2lmIFsgIiRyb290bW9kZSIgPSAicm8iIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAibm8iIF0gfHwgXAorCVsgIiRyb290bW9kZSIgPSAicnciIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisJZWNobyAiIgorCWVjaG8gIldBUk46IGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zIGluIC9ldGMvZnN0YWIgYW5kIC9ldGMvZGVmYXVsdC9yY1MiCisJZWNobyAiICAgICAgcmVnYXJkaW5nIHRoZSB3cml0YWJpbGl0eSBvZiByb290ZnMuIFBsZWFzZSBmaXggb25lIG9mIHRoZW0uIgorCWVjaG8gIiIKK2ZpCisKKworIworIyBBY3RpdmF0ZSB0aGUgc3dhcCBkZXZpY2UocykgaW4gL2V0Yy9mc3RhYi4gVGhpcyBuZWVkcyB0byBiZSBkb25lCisjIGJlZm9yZSBmc2NrLCBzaW5jZSBmc2NrIGNhbiBiZSBxdWl0ZSBtZW1vcnktaHVuZ3J5LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkFjdGl2YXRpbmcgc3dhcCIKK3N3YXBvbiAtYSAyPiAvZGV2L251bGwKKworIworIyBDaGVjayB0aGUgcm9vdCBmaWxlc3lzdGVtLgorIworaWYgdGVzdCAtZiAvZmFzdGJvb3QgfHwgdGVzdCAkcm9vdGNoZWNrID0gbm8KK3RoZW4KKyAgdGVzdCAkcm9vdGNoZWNrID0geWVzICYmIGVjaG8gIkZhc3QgYm9vdCwgbm8gZmlsZXN5c3RlbSBjaGVjayIKK2Vsc2UKKyAgIworICAjIEVuc3VyZSB0aGF0IHJvb3QgaXMgcXVpZXNjZW50IGFuZCByZWFkLW9ubHkgYmVmb3JlIGZzY2snaW5nLgorICAjCisgIG1vdW50IC1uIC1vIHJlbW91bnQscm8gLworICBpZiB0ZXN0ICQ/ID0gMAorICB0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorCWZvcmNlPSItZiIKKyAgICBlbHNlCisJZm9yY2U9IiIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRGU0NLRklYIiA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisgICAgICAgIGR1bWJ8bmV0d29ya3x1bmtub3dufCIiKSBzcGlubmVyPSIiIDs7CisgICAgZXNhYworICAgIHRlc3QgYHVuYW1lIC1tYCA9IHMzOTAgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgcm9vdCBmaWxlc3lzdGVtLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgJGZvcmNlICRmaXggLworICAgICMKKyAgICAjIElmIHRoZXJlIHdhcyBhIGZhaWx1cmUsIGRyb3AgaW50byBzaW5nbGUtdXNlciBtb2RlLgorICAgICMKKyAgICAjIE5PVEU6ICJmYWlsdXJlIiBpcyBkZWZpbmVkIGFzIGV4aXRpbmcgd2l0aCBhIHJldHVybiBjb2RlIG9mCisgICAgIyAyIG9yIGxhcmdlci4gIEEgcmV0dXJuIGNvZGUgb2YgMSBpbmRpY2F0ZXMgdGhhdCBmaWxlc3lzdGVtCisgICAgIyBlcnJvcnMgd2VyZSBjb3JyZWN0ZWQgYnV0IHRoYXQgdGhlIGJvb3QgbWF5IHByb2NlZWQuCisgICAgIworICAgIGlmIHRlc3QgIiQ/IiAtZ3QgMQorICAgIHRoZW4KKyAgICAgICMgU3VycHJpc2UhIFJlLWRpcmVjdGluZyBmcm9tIGEgSEVSRSBkb2N1bWVudCAoYXMgaW4KKyAgICAgICMgImNhdCA8PCBFT0YiKSB3b24ndCB3b3JrLCBiZWNhdXNlIHRoZSByb290IGlzIHJlYWQtb25seS4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gImZzY2sgZmFpbGVkLiAgUGxlYXNlIHJlcGFpciBtYW51YWxseSBhbmQgcmVib290LiAgUGxlYXNlIG5vdGUiCisgICAgICBlY2hvICJ0aGF0IHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3VycmVudGx5IG1vdW50ZWQgcmVhZC1vbmx5LiAgVG8iCisgICAgICBlY2hvICJyZW1vdW50IGl0IHJlYWQtd3JpdGU6IgorICAgICAgZWNobworICAgICAgZWNobyAiICAgIyBtb3VudCAtbiAtbyByZW1vdW50LHJ3IC8iCisgICAgICBlY2hvCisgICAgICBlY2hvICJDT05UUk9MLUQgd2lsbCBleGl0IGZyb20gdGhpcyBzaGVsbCBhbmQgUkVCT09UIHRoZSBzeXN0ZW0uIgorICAgICAgZWNobworICAgICAgIyBTdGFydCBhIHNpbmdsZSB1c2VyIHNoZWxsIG9uIHRoZSBjb25zb2xlCisgICAgICAvc2Jpbi9zdWxvZ2luICRDT05TT0xFCisgICAgICByZWJvb3QgLWYKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiKioqIEVSUk9SISAgQ2Fubm90IGZzY2sgcm9vdCBmcyBiZWNhdXNlIGl0IGlzIG5vdCBtb3VudGVkIHJlYWQtb25seSEiCisgICAgZWNobworICBmaQorZmkKKworIworIwlJZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHdhcyBub3QgbWFya2VkIGFzIHJlYWQtb25seSBpbiAvZXRjL2ZzdGFiLAorIwlyZW1vdW50IHRoZSByb290ZnMgcncgYnV0IGRvIG5vdCB0cnkgdG8gY2hhbmdlIG10YWIgYmVjYXVzZSBpdAorIwlpcyBvbiBhIHJvIGZzIHVudGlsIHRoZSByZW1vdW50IHN1Y2NlZWRlZC4gVGhlbiBjbGVhbiB1cCBvbGQgbXRhYnMKKyMJYW5kIGZpbmFsbHkgd3JpdGUgdGhlIG5ldyBtdGFiLgorIworbW91bnQgLW4gLW8gcmVtb3VudCwkcm9vdG1vZGUgLworaWYgdGVzdCAiJHJvb3Rtb2RlIiA9IHJ3Cit0aGVuCisJbG4gLXNmIC9wcm9jL21vdW50cyAvZGV2L210YWIKK2ZpCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA5NzhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cwpAQCAtMCwwICsxLDUgQEAKKyMgR0lEIG9mIHRoZSBgdHR5JyBncm91cAorVFRZR1JQPTUKKyAKKyMgU2V0IHRvIDYwMCB0byBoYXZlIGBtZXNnIG4nIGJlIHRoZSBkZWZhdWx0CitUVFlNT0RFPTYyMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzYwNDNmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMuc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBkZXZwdHMKKyMgUmVxdWlyZWQtU3RhcnQ6IHVkZXYKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTW91bnQgL2Rldi9wdHMgZmlsZSBzeXN0ZW1zLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvZGV2cHRzCisKK2lmIGdyZXAgLXEgZGV2cHRzIC9wcm9jL2ZpbGVzeXN0ZW1zCit0aGVuCisJIworCSMJQ3JlYXRlIG11bHRpcGxleG9yIGRldmljZS4KKwkjCisJdGVzdCAtYyAvZGV2L3B0bXggfHwgbWtub2QgLW0gNjY2IC9kZXYvcHRteCBjIDUgMgorCisJIworCSMJTW91bnQgL2Rldi9wdHMgaWYgbmVlZGVkLgorCSMKKwlpZiAhIGdyZXAgLXEgZGV2cHRzIC9wcm9jL21vdW50cworCXRoZW4KKwkJbWtkaXIgLXAgL2Rldi9wdHMKKwkJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cyAtb2dpZD0ke1RUWUdSUH0sbW9kZT0ke1RUWU1PREV9CisJZmkKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3YjA2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIGRtZXNnCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbIC1mIC92YXIvbG9nL2RtZXNnIF07IHRoZW4KKwlpZiBbIC1mIC91c3Ivc2Jpbi9sb2dyb3RhdGUgXTsgdGhlbgorCQlsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUtZG1lc2cuY29uZgorCWVsc2UKKwkJbXYgLWYgL3Zhci9sb2cvZG1lc2cgL3Zhci9sb2cvZG1lc2cub2xkCisJZmkKK2ZpCitkbWVzZyAtcyAxMzEwNzIgPiAvdmFyL2xvZy9kbWVzZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Z1bmN0aW9ucyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDFhZDFlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9mdW5jdGlvbnMKQEAgLTAsMCArMSw5MSBAQAorIyAtKi1TaGVsbC1zY3JpcHQtKi0KKyMKKyMgZnVuY3Rpb25zICAgICBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYnkgbW9zdCBvciBhbGwKKyMgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHRzIGluIHRoZSAvZXRjL2luaXQuZCBkaXJlY3RvcnkuCisjCisKK05PUk1BTD0iXFwwMzNbMDszOW0iICAgICAgICAgIyBTdGFuZGFyZCBjb25zb2xlIGdyZXkKK1NVQ0NFU1M9IlxcMDMzWzE7MzJtIiAgICAgICAgIyBTdWNjZXNzIGlzIGdyZWVuCitXQVJOSU5HPSJcXDAzM1sxOzMzbSIgICAgICAgICMgV2FybmluZ3MgYXJlIHllbGxvdworRkFJTFVSRT0iXFwwMzNbMTszMW0iICAgICAgICAjIEZhaWx1cmVzIGFyZSByZWQKK0lORk89IlxcMDMzWzE7MzZtIiAgICAgICAgICAgIyBJbmZvcm1hdGlvbiBpcyBsaWdodCBjeWFuCitCUkFDS0VUPSJcXDAzM1sxOzM0bSIgICAgICAgICMgQnJhY2tldHMgYXJlIGJsdWUKKworIyBOT1RFOiBUaGUgcGlkb2Zwcm9jICgpIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcHJvY2VzcyB3aGljaCBpcyBhIHNjcmlwdCB1bmxlc3MKKyMgICAgICAgdGhlIHBpZG9mIHN1cHBvcnRzICIteCIgb3B0aW9uLiBJZiB5b3Ugd2FudCB0byB1c2UgaXQgZm9yIHN1Y2ggYQorIyAgICAgICBwcm9jZXNzOgorIyAgICAgICAxKSBJZiB0aGVyZSBpcyBubyAicGlkb2YgLXgiLCByZXBsYWNlIHRoZSAicGlkb2YgJDEiIHdpdGggYW5vdGhlcgorIyAgICAgICAgICBjb21tYW5kIGxpa2UoZm9yIGNvcmUtaW1hZ2UtbWluaW1hbCk6CisjICAgICAgICAgICAgcHMgfCBhd2sgJy8nIiQxIicvIHtwcmludCAkMX0nCisjICAgICAgIE9yCisjICAgICAgIDIpIElmIHRoZXJlIGlzICJwaWRvZiAteCIsIHJlcGxhY2UgInBpZG9mIiB3aXRoICJwaWRvZiAteCIuCisjCisjIHBpZG9mcHJvYyAtIHByaW50IHRoZSBwaWQgb2YgYSBwcm9jZXNzCisjICQxOiB0aGUgbmFtZSBvZiB0aGUgcHJvY2VzcworcGlkb2Zwcm9jICgpIHsKKworCSMgcGlkb2Ygb3V0cHV0IG51bGwgd2hlbiBubyBwcm9ncmFtIGlzIHJ1bm5pbmcsIHNvIG5vICIyPi9kZXYvbnVsbCIuCisJcGlkPWBwaWRvZiAkMWAKKwlzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICRwaWQKKwkJcmV0dXJuIDAKKwkJOzsKKwkxMjcpCisJCWVjaG8gIkVSUk9SOiBjb21tYW5kIHBpZG9mIG5vdCBmb3VuZCIgPiYyCisJCWV4aXQgMTI3CisJCTs7CisJKikKKwkJcmV0dXJuICRzdGF0dXMKKwkJOzsKKwllc2FjCit9CisKK21hY2hpbmVfaWQoKSB7ICMgcmV0dXJuIHRoZSBtYWNoaW5lIElECisJYXdrICdCRUdJTiB7IEZTPSI6ICIgfSAvSGFyZHdhcmUvIFwKKwkJeyBnc3ViKCIgIiwgIl8iLCAkMik7IHByaW50IHRvbG93ZXIoJDIpIH0gJyA8L3Byb2MvY3B1aW5mbworfQorCitraWxscHJvYygpIHsgIyBraWxsIHRoZSBuYW1lZCBwcm9jZXNzKGVzKQorCXBpZD1gcGlkb2Zwcm9jICQxYCAmJiBraWxsICRwaWQKK30KKworc3RhdHVzKCkgeworICAgIGxvY2FsIHBpZAorICAgIGlmIFsgIiQjIiA9IDAgXTsgdGhlbgorICAgICAgICBlY2hvICJVc2FnZTogc3RhdHVzIHtwcm9ncmFtfSIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIHBpZD1gcGlkb2Zwcm9jICQxYAorICAgIGlmIFsgLW4gIiRwaWQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJDEgKHBpZCAkcGlkKSBpcyBydW5uaW5nLi4uIgorICAgICAgICByZXR1cm4gMAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJDEgaXMgc3RvcHBlZCIKKyAgICBmaQorICAgIHJldHVybiAzCit9CisKK3N1Y2Nlc3MoKSB7CisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9ICBPSyAgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuIDAKK30KKworZmFpbHVyZSgpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtGQUlMVVJFfSBGQUlMICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKword2FybmluZygpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtXQVJOSU5HfSBXQVJOICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKworcGFzc2VkKCkgeworICAgIGxvY2FsIHJjPSQqCisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9IFBBU1MgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuICRyYworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaGFsdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTZmNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBoYWx0CisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMAorIyBTaG9ydC1EZXNjcmlwdGlvbjogRXhlY3V0ZSB0aGUgaGFsdCBjb21tYW5kLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBTZWUgaWYgd2UgbmVlZCB0byBjdXQgdGhlIHBvd2VyLgoraWYgdGVzdCAteCAvZXRjL2luaXQuZC91cHMtbW9uaXRvcgordGhlbgorCS9ldGMvaW5pdC5kL3Vwcy1tb25pdG9yIHBvd2Vyb2ZmCitmaQorCisjIERvbid0IHNodXQgZG93biBkcml2ZXMgaWYgd2UncmUgdXNpbmcgUkFJRC4KK2hkZG93bj0iLWgiCitpZiBncmVwIC1xcyAnXm1kLiphY3RpdmUnIC9wcm9jL21kc3RhdAordGhlbgorCWhkZG93bj0iIgorZmkKKworaGFsdCBTRURfSEFMVEFSR1MgLXAgJGhkZG93bgorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1Mjg3Y2MxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaG9zdG5hbWUKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFNldCBob3N0bmFtZSBiYXNlZCBvbiAvZXRjL2hvc3RuYW1lCisjIyMgRU5EIElOSVQgSU5GTworSE9TVE5BTUU9JCgvYmluL2hvc3RuYW1lKQorCitob3N0bmFtZSAtYiAtRiAvZXRjL2hvc3RuYW1lIDI+IC9kZXYvbnVsbAoraWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJZXhpdAorZmkKKworIyBCdXN5Ym94IGhvc3RuYW1lIGRvZXNuJ3Qgc3VwcG9ydCAtYiBzbyB3ZSBuZWVkIGltcGxlbWVudCBpdCBvbiBvdXIgb3duCitpZiBbIC1mIC9ldGMvaG9zdG5hbWUgXTt0aGVuCisJaG9zdG5hbWUgYGNhdCAvZXRjL2hvc3RuYW1lYAorZWxpZiBbIC16ICIkSE9TVE5BTUUiIC1vICIkSE9TVE5BTUUiID0gIihub25lKSIgLW8gISAteiAiYGVjaG8gJEhPU1ROQU1FIHwgc2VkIC1uICcvXlswLTldKlwuWzAtOV0uKi9wJ2AiIF0gOyB0aGVuCisJaG9zdG5hbWUgbG9jYWxob3N0CitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2xvZ3JvdGF0ZS1kbWVzZy5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2xvZ3JvdGF0ZS1kbWVzZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDZlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYKQEAgLTAsMCArMSw5IEBACisjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKKyMgcm90YXRlIGRtZXNnLCBhbmQga2VlcCA1IHZlcnNpb25zLgorCisvdmFyL2xvZy9kbWVzZyB7CisJY3JlYXRlCisJcm90YXRlIDUKKwlub2RhdGVleHQKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0YmFlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb3VudGFsbAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDogCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1vdW50IGFsbCBmaWxlc3lzdGVtcy4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBNb3VudCBsb2NhbCBmaWxlc3lzdGVtcyBpbiAvZXRjL2ZzdGFiLiBGb3Igc29tZSByZWFzb24sIHBlb3BsZQorIyBtaWdodCB3YW50IHRvIG1vdW50ICJwcm9jIiBzZXZlcmFsIHRpbWVzLCBhbmQgbW91bnQgLXYgY29tcGxhaW5zCisjIGFib3V0IHRoaXMuIFNvIHdlIG1vdW50ICJwcm9jIiBmaWxlc3lzdGVtcyB3aXRob3V0IC12LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIk1vdW50aW5nIGxvY2FsIGZpbGVzeXN0ZW1zLi4uIgorbW91bnQgLWF0IG5vbmZzLG5vc21iZnMsbm9uY3BmcyAyPi9kZXYvbnVsbAorCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorCXJtIC1mIC9kZXYvaW5pdGN0bAorCW1rbm9kIC1tIDYwMCAvZGV2L2luaXRjdGwgcAorZmkKK2tpbGwgLVVTUjEgMQorCisjCisjIEV4ZWN1dGUgc3dhcG9uIGNvbW1hbmQgYWdhaW4sIGluIGNhc2Ugd2Ugd2FudCB0byBzd2FwIHRvCisjIGEgZmlsZSBvbiBhIG5vdyBtb3VudGVkIGZpbGVzeXN0ZW0uCisjCitzd2Fwb24gLWEgMj4gL2Rldi9udWxsCisKKzogZXhpdCAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudG5mcy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudG5mcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTZjMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbW91bnRuZnMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyAkbmV0d29yayAkcnBjYmluZAorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCisjCisjCVJ1biBpbiBhIHN1YnNoZWxsIGJlY2F1c2Ugb2YgSS9PIHJlZGlyZWN0aW9uLgorIwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lLiBJZiBpdCBpcyBORlMsIHNldCB0aGUgZmxhZworIwlmb3IgbW91bnRpbmcgTkZTIGZpbGVzeXN0ZW1zLiBJZiBhbnkgTkZTIHBhcnRpdGlvbiBpcyBmb3VuZCBhbmQgaXQKKyMJbm90IG1vdW50ZWQgd2l0aCB0aGUgbm9sb2NrIG9wdGlvbiwgd2Ugc3RhcnQgdGhlIHJwY2JpbmQuCisjCitycGNiaW5kPW5vCittb3VudF9uZnM9bm8KK21vdW50X3NtYj1ubworbW91bnRfbmNwPW5vCittb3VudF9jaWZzPW5vCit3aGlsZSByZWFkIGRldmljZSBtb3VudHB0IGZzdHlwZSBvcHRpb25zCitkbworCWNhc2UgIiRkZXZpY2UiIGluCisJCSIifFwjKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWNhc2UgIiRvcHRpb25zIiBpbgorCQkqbm9hdXRvKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWlmIHRlc3QgIiRmc3R5cGUiID0gbmZzCisJdGhlbgorCQltb3VudF9uZnM9eWVzCisJCWNhc2UgIiRvcHRpb25zIiBpbgorCQkJKm5vbG9jayopCisJCQkJOzsKKwkJCSopCisJCQkJcnBjYmluZD15ZXMKKwkJCQk7OworCQllc2FjCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IHNtYmZzCisJdGhlbgorCQltb3VudF9zbWI9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IG5jcGZzCisJdGhlbgorCQltb3VudF9uY3A9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IGNpZnMKKwl0aGVuCisJCW1vdW50X2NpZnM9eWVzCisJZmkKK2RvbmUKKworZXhlYyAwPiYxCisKK2lmIHRlc3QgIiRycGNiaW5kIiA9IHllcwordGhlbgorCWlmIHRlc3QgLXggL3Vzci9zYmluL3JwY2JpbmQKKwl0aGVuCisJCWVjaG8gLW4gIlN0YXJ0aW5nIHJwY2JpbmQuLi4gIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi9ycGNiaW5kCisJCXNsZWVwIDIKKwlmaQorZmkKKworaWYgdGVzdCAiJG1vdW50X25mcyIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X3NtYiIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X2NpZnMiID0geWVzCit0aGVuCisJZWNobyAiTW91bnRpbmcgcmVtb3RlIGZpbGVzeXN0ZW1zLi4uIgorCXRlc3QgIiRtb3VudF9uZnMiID0geWVzICYmIG1vdW50IC1hIC10IG5mcworCXRlc3QgIiRtb3VudF9zbWIiID0geWVzICYmIG1vdW50IC1hIC10IHNtYmZzCisJdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgbmNwZnMKKwl0ZXN0ICIkbW91bnRfY2lmcyIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgY2lmcworZmkKKworKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwNDAzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2gKQEAgLTAsMCArMSwyMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgdm9sYXRpbGUKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiAgUG9wdWxhdGUgdGhlIHZvbGF0aWxlIGZpbGVzeXN0ZW0KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgR2V0IFJPT1RfRElSCitESVJOQU1FPWBkaXJuYW1lICQwYAorUk9PVF9ESVI9YGVjaG8gJERJUk5BTUUgfCBzZWQgLW5lICdzOi9ldGMvLio6OnAnYAorCitbIC1lICR7Uk9PVF9ESVJ9L2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvcmNTCisjIFdoZW4gcnVubmluZyBwb3B1bGF0ZS12b2xhdGlsZS5zaCBhdCByb290ZnMgdGltZSwgZGlzYWJsZSBjYWNoZS4KK1sgLW4gIiRST09UX0RJUiIgXSAmJiBWT0xBVElMRV9FTkFCTEVfQ0FDSEU9bm8KKyMgSWYgcm9vdGZzIGlzIHJlYWQtb25seSwgZGlzYWJsZSBjYWNoZS4KK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF0gJiYgVk9MQVRJTEVfRU5BQkxFX0NBQ0hFPW5vCisKK0NGR0RJUj0iJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzIgorVE1QUk9PVD0iJHtST09UX0RJUn0vdmFyL3ZvbGF0aWxlL3RtcCIKK0NPUkVERUY9IjAwX2NvcmUiCisKK1sgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJQb3B1bGF0aW5nIHZvbGF0aWxlIEZpbGVzeXN0ZW1zLiIKKworY3JlYXRlX2ZpbGUoKSB7CisJRVhFQz0iCisJdG91Y2ggXCIkMVwiOworCWNob3duICR7VFVTRVJ9LiR7VEdST1VQfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBvd25lciAtJHtUVVNFUn0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMTsKKwljaG1vZCAke1RNT0RFfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBtb2RlIC0ke1RNT0RFfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIiRFWEVDIiA+PiAvZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDICYKKwkJZWxzZQorCQkJIyBDcmVhdGluZyBzb21lIGZpbGVzIGF0IHJvb3RmcyB0aW1lIG1heSBmYWlsIGFuZCBzaG91bGQgZmFpbCwKKwkJCSMgYnV0IHRoZXNlIGZhaWx1cmVzIHNob3VsZCBub3QgYmUgbG9nZ2VkIHRvIG1ha2Ugc3VyZSB0aGUgZG9fcm9vdGZzCisJCQkjIHByb2Nlc3MgZG9lc24ndCBmYWlsLiBUaGlzIGRvZXMgbm8gaGFybSwgYXMgdGhpcyBzY3JpcHQgd2lsbAorCQkJIyBydW4gb24gdGFyZ2V0IHRvIHNldCB1cCB0aGUgY29ycmVjdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisJCQlldmFsICRFWEVDID4gL2Rldi9udWxsIDI+JjEKKwkJZmkKKwl9Cit9CisKK21rX2RpcigpIHsKKwlFWEVDPSIKKwlta2RpciAtcCBcIiQxXCI7CisJY2hvd24gJHtUVVNFUn0uJHtUR1JPVVB9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG93bmVyIC0ke1RVU0VSfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxOworCWNobW9kICR7VE1PREV9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG1vZGUgLSR7VE1PREV9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjEgIgorCisJdGVzdCAiJFZPTEFUSUxFX0VOQUJMRV9DQUNIRSIgPSB5ZXMgJiYgZWNobyAiJEVYRUMiID4+IC9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDCisJCWVsc2UKKwkJCSMgRm9yIHRoZSBzYW1lIHJlYXNvbiB3aXRoIGNyZWF0ZV9maWxlKCksIGZhaWx1cmVzIHNob3VsZAorCQkJIyBub3QgYmUgbG9nZ2VkLgorCQkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJCWZpCisJfQorfQorCitsaW5rX2ZpbGUoKSB7CisJRVhFQz0iCisJaWYgWyAtTCBcIiQyXCIgXTsgdGhlbgorCQlbIFwiXCQocmVhZGxpbmsgLWYgXCIkMlwiKVwiICE9IFwiXCQocmVhZGxpbmsgLWYgXCIkMVwiKVwiIF0gJiYgeyBybSAtZiBcIiQyXCI7IGxuIC1zZiBcIiQxXCIgXCIkMlwiOyB9OworCWVsaWYgWyAtZCBcIiQyXCIgXTsgdGhlbgorCQlpZiBhd2sgJ1wkMiA9PSBcIiQyXCIge2V4aXQgMX0nIC9wcm9jL21vdW50czsgdGhlbgorCQkJY3AgLWEgJDIvKiAkMSAyPi9kZXYvbnVsbDsKKwkJCWNwIC1hICQyLy5bIS5dKiAkMSAyPi9kZXYvbnVsbDsKKwkJCXJtIC1yZiBcIiQyXCI7CisJCQlsbiAtc2YgXCIkMVwiIFwiJDJcIjsKKwkJZmkKKwllbHNlCisJCWxuIC1zZiBcIiQxXCIgXCIkMlwiOworCWZpCisgICAgICAgICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIgkkRVhFQyIgPj4gL2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZAorCisJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCWV2YWwgJEVYRUMgJgorCWVsc2UKKwkJIyBGb3IgdGhlIHNhbWUgcmVhc29uIHdpdGggY3JlYXRlX2ZpbGUoKSwgZmFpbHVyZXMgc2hvdWxkCisJCSMgbm90IGJlIGxvZ2dlZC4KKwkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJZmkKK30KKworY2hlY2tfcmVxdWlyZW1lbnRzKCkgeworCWNsZWFudXAoKSB7CisJCXJtICIke1RNUF9JTlRFUk1FRH0iCisJCXJtICIke1RNUF9ERUZJTkVEfSIKKwkJcm0gIiR7VE1QX0NPTUJJTkVEfSIKKwl9CisKKwlDRkdGSUxFPSIkMSIKKwlbIGBiYXNlbmFtZSAiJHtDRkdGSUxFfSJgID0gIiR7Q09SRURFRn0iIF0gJiYgcmV0dXJuIDAKKworCVRNUF9JTlRFUk1FRD0iJHtUTVBST09UfS90bXAuJCQiCisJVE1QX0RFRklORUQ9IiR7VE1QUk9PVH0vdG1wZGVmaW5lZC4kJCIKKwlUTVBfQ09NQklORUQ9IiR7VE1QUk9PVH0vdG1wY29tYmluZWQuJCQiCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9wYXNzd2QgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9ERUZJTkVEfSIKKwljYXQgJHtDRkdGSUxFfSB8IGdyZXAgLXYgIl4jIiB8IGN1dCAtcyAtZCAiICIgLWYgMiA+ICIke1RNUF9JTlRFUk1FRH0iCisJY2F0ICIke1RNUF9ERUZJTkVEfSIgIiR7VE1QX0lOVEVSTUVEfSIgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9DT01CSU5FRH0iCisJTlJfREVGSU5FRF9VU0VSUz0iYGNhdCAiJHtUTVBfREVGSU5FRH0iIHwgd2MgLWxgIgorCU5SX0NPTUJJTkVEX1VTRVJTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX1VTRVJTfSIgLW5lICIke05SX0NPTUJJTkVEX1VTRVJTfSIgXSAmJiB7CisJCWVjaG8gIlVuZGVmaW5lZCB1c2VyczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9ncm91cCB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0RFRklORUR9IgorCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgY3V0IC1zIC1kICIgIiAtZiAzID4gIiR7VE1QX0lOVEVSTUVEfSIKKwljYXQgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfSU5URVJNRUR9IiB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0NPTUJJTkVEfSIKKworCU5SX0RFRklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9ERUZJTkVEfSIgfCB3YyAtbGAiCisJTlJfQ09NQklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX0dST1VQU30iIC1uZSAiJHtOUl9DT01CSU5FRF9HUk9VUFN9IiBdICYmIHsKKwkJZWNobyAiVW5kZWZpbmVkIGdyb3VwczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisJIyBBZGQgY2hlY2tzIGZvciByZXF1aXJlZCBkaXJlY3RvcmllcyBoZXJlCisKKwljbGVhbnVwCisJcmV0dXJuIDAKK30KKworYXBwbHlfY2ZnZmlsZSgpIHsKKwlDRkdGSUxFPSIkMSIKKworCWNoZWNrX3JlcXVpcmVtZW50cyAiJHtDRkdGSUxFfSIgfHwgeworCQllY2hvICJTa2lwcGluZyAke0NGR0ZJTEV9IgorCQlyZXR1cm4gMQorCX0KKworCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgXAorCQl3aGlsZSByZWFkIExJTkU7IGRvCisJCWV2YWwgYGVjaG8gIiRMSU5FIiB8IHNlZCAtbiAicy9cKC4qXClcIFwoLipcKSBcKC4qXClcIFwoLipcKVwgXCguKlwpXCBcKC4qXCkvVFRZUEU9XDEgOyBUVVNFUj1cMjsgVEdST1VQPVwzOyBUTU9ERT1cNDsgVE5BTUU9XDUgVExUQVJHRVQ9XDYvcCJgCisJCVROQU1FPSR7Uk9PVF9ESVJ9JHtUTkFNRX0KKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNoZWNraW5nIGZvciAtJHtUTkFNRX0tLiIKKworCQlbICIke1RUWVBFfSIgPSAibCIgXSAmJiB7CisJCQlUU09VUkNFPSIkVExUQVJHRVQiCisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgbGluayAtJHtUTkFNRX0tIHBvaW50aW5nIHRvIC0ke1RTT1VSQ0V9LS4iCisJCQlsaW5rX2ZpbGUgIiR7VFNPVVJDRX0iICIke1ROQU1FfSIKKwkJCWNvbnRpbnVlCisJCX0KKworCQlbIC1MICIke1ROQU1FfSIgXSAmJiB7CisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiRm91bmQgbGluay4iCisJCQlORVdOQU1FPWBscyAtbCAiJHtUTkFNRX0iIHwgc2VkIC1lICdzL14uKi0+IFwoLipcKSQvXDEvJ2AKKwkJCWVjaG8gJHtORVdOQU1FfSB8IGdyZXAgLXYgIl4vIiA+L2Rldi9udWxsICYmIHsKKwkJCQlUTkFNRT0iYGVjaG8gJHtUTkFNRX0gfCBzZWQgLWUgJ3NAXCguKlwpLy4qQFwxQCdgLyR7TkVXTkFNRX0iCisJCQkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNvbnZlcnRlZCByZWxhdGl2ZSBsaW5rdGFyZ2V0IHRvIGFic29sdXRlIHBhdGggLSR7VE5BTUV9LS4iCisJCQl9IHx8IHsKKwkJCQlUTkFNRT0iJHtORVdOQU1FfSIKKwkJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiVXNpbmcgYWJzb2x1dGUgbGluayB0YXJnZXQgLSR7VE5BTUV9LS4iCisJCQl9CisJCX0KKworCQljYXNlICIke1RUWVBFfSIgaW4KKwkJCSJmIikgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDcmVhdGluZyBmaWxlIC0ke1ROQU1FfS0uIgorCQkJCWNyZWF0ZV9maWxlICIke1ROQU1FfSIgJgorCQkJCTs7CisJCQkiZCIpICBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5IC0ke1ROQU1FfS0uIgorCQkJCW1rX2RpciAiJHtUTkFNRX0iCisJCQkJIyBBZGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZW50cnkgaW4gZnN0YWIgdG8gbW91bnQuCisJCQkJOzsKKwkJCSopICAgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJJbnZhbGlkIHR5cGUgLSR7VFRZUEV9LS4iCisJCQkJY29udGludWUKKwkJCQk7OworCQllc2FjCisJZG9uZQorCXJldHVybiAwCit9CisKK2NsZWFyY2FjaGU9MAorZXhlYyA5PC9wcm9jL2NtZGxpbmUKK3doaWxlIHJlYWQgbGluZSA8JjkKK2RvCisJY2FzZSAiJGxpbmUiIGluCisJCSpjbGVhcmNhY2hlKikgIGNsZWFyY2FjaGU9MQorCQkJICAgICAgIDs7CisJCSopCSAgICAgICBjb250aW51ZQorCQkJICAgICAgIDs7CisJZXNhYworZG9uZQorZXhlYyA5PiYtCisKK2lmIHRlc3QgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlIC1hICIkVk9MQVRJTEVfRU5BQkxFX0NBQ0hFIiA9ICJ5ZXMiIC1hICJ4JDEiICE9ICJ4dXBkYXRlIiAtYSAieCRjbGVhcmNhY2hlIiA9ICJ4MCIKK3RoZW4KKwlzaCAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUKK2Vsc2UKKwlybSAtZiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisJZm9yIGZpbGUgaW4gYGxzIC0xICIke0NGR0RJUn0iIHwgc29ydGA7IGRvCisJCWFwcGx5X2NmZ2ZpbGUgIiR7Q0ZHRElSfS8ke2ZpbGV9IgorCWRvbmUKKworCVsgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkIF0gJiYgc3luYyAmJiBtdiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlCitmaQorCitpZiBbIC16ICIke1JPT1RfRElSfSIgXSAmJiBbIC1mIC9ldGMvbGQuc28uY2FjaGUgXSAmJiBbICEgLWYgL3Zhci9ydW4vbGQuc28uY2FjaGUgXQordGhlbgorCWxuIC1zIC9ldGMvbGQuc28uY2FjaGUgL3Zhci9ydW4vbGQuc28uY2FjaGUKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYWQtb25seS1yb290ZnMtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTAzMjhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYWQtb25seS1yb290ZnMtaG9vay5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJubyIgXSAmJiBleGl0IDAKKworaXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAoKSB7CisJRElSRUNUT1JZPSQxCisJZGlyPWByZWFkbGluayAtZiAkRElSRUNUT1JZYAorCXdoaWxlIHRydWU7IGRvCisJCWlmIFsgISAtZCAiJGRpciIgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6ICRkaXIgaXMgbm90IGEgZGlyZWN0b3J5IgorCQkJZXhpdCAxCisJCWVsc2UKKwkJCWZvciBmbGFnIGluIGBhd2sgLXYgZGlyPSRkaXIgJ3sgaWYgKCQyID09IGRpcikgeyBwcmludCAiRk9VTkQiOyBzcGxpdCgkNCxGTEFHUywiLCIpIH0gfTsgXAorCQkJCUVORCB7IGZvciAoZiBpbiBGTEFHUykgcHJpbnQgRkxBR1NbZl0gfScgPCAvcHJvYy9tb3VudHNgOyBkbworCQkJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisJCQkJWyAiJGZsYWciID0gInJvIiBdICYmIHsgcGFydGl0aW9uPSJyZWFkLW9ubHkiOyBicmVhazsgfQorCQkJZG9uZQorCQkJaWYgWyAiJGRpciIgPSAiLyIgLW8gLW4gIiRwYXJ0aXRpb24iIF07IHRoZW4KKwkJCQlicmVhaworCQkJZWxzZQorCQkJCWRpcj1gZGlybmFtZSAkZGlyYAorCQkJZmkKKwkJZmkKKwlkb25lCisJWyAiJHBhcnRpdGlvbiIgPSAicmVhZC1vbmx5IiBdICYmIGVjaG8gInllcyIgfHwgZWNobyAibm8iCit9CisKK2lmIFsgIiQxIiA9ICJzdGFydCIgXSA7IHRoZW4KKwlpZiBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbGliYCA9ICJ5ZXMiIF07IHRoZW4KKwkJZ3JlcCAtcSAidG1wZnMgL3Zhci92b2xhdGlsZSIgL3Byb2MvbW91bnRzIHx8IG1vdW50IC92YXIvdm9sYXRpbGUKKwkJbWtkaXIgLXAgL3Zhci92b2xhdGlsZS9saWIKKwkJY3AgLWEgL3Zhci9saWIvKiAvdmFyL3ZvbGF0aWxlL2xpYgorCQltb3VudCAtLWJpbmQgL3Zhci92b2xhdGlsZS9saWIgL3Zhci9saWIKKwlmaQorZmkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYm9vdCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWJvb3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg3ZDhkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWJvb3QKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICByZWJvb3QKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBFeGVjdXRlIHRoZSByZWJvb3QgY29tbWFuZC4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK2VjaG8gLW4gIlJlYm9vdGluZy4uLiAiCityZWJvb3QgU0VEX0hBTFRBUkdTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcm1ub2xvZ2luLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Jtbm9sb2dpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NmRlMzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Jtbm9sb2dpbi5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHJtbm9sb2dpbgorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkYWxsCisjIFJlcXVpcmVkLVN0b3A6IAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBSZW1vdmUgL2V0Yy9ub2xvZ2luIGF0IGJvb3QKKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgc2NyaXB0IHJlbW92ZXMgdGhlIC9ldGMvbm9sb2dpbiBmaWxlIGFzIHRoZQorIyAgICAgICAgICAgICAgICAgICAgbGFzdCBzdGVwIGluIHRoZSBib290IHByb2Nlc3MsIGlmIERFTEFZTE9HSU49eWVzLgorIyAgICAgICAgICAgICAgICAgICAgSWYgREVMQVlMT0dJTj1ubywgL2V0Yy9ub2xvZ2luIHdhcyBub3QgY3JlYXRlZCBieQorIyAgICAgICAgICAgICAgICAgICAgYm9vdG1pc2MgZWFybGllciBpbiB0aGUgYm9vdCBwcm9jZXNzLgorIyMjIEVORCBJTklUIElORk8KKworaWYgdGVzdCAtZiAvZXRjL25vbG9naW4uYm9vdAordGhlbgorCXJtIC1mIC9ldGMvbm9sb2dpbiAvZXRjL25vbG9naW4uYm9vdAorZmkKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zYXZlLXJ0Yy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zYXZlLXJ0Yy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDM4ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgc2F2ZS1ydGMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdG9yZSBzeXN0ZW0gY2xvY2sgaW50byBmaWxlCisjIERlc2NyaXB0aW9uOiAgICAgICAKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgVXBkYXRlIHRoZSB0aW1lc3RhbXAKK2RhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyUyA+IC9ldGMvdGltZXN0YW1wCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2VuZHNpZ3MgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2VuZHNpZ3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzRlMWI3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncwpAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNlbmRzaWdzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgIHVtb3VudG5mcworIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBLaWxsIGFsbCByZW1haW5pbmcgcHJvY2Vzc2VzLgorIyBEZXNjcmlwdGlvbjogCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2luZ2xlIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NpbmdsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTgyZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NpbmdsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNpbmdsZQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzICRhbGwga2lsbHByb2NzCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAxCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IGV4ZWN1dGVkIGJ5IGluaXQoOCkgdXBvbiBlbnRlcmluZyBydW5sZXZlbCAxIChzaW5nbGUpLgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0iL3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKyMgV2Ugc3RhcnQgdXBkYXRlIGhlcmUsIHNpbmNlIHdlIGp1c3Qga2lsbGVkIGl0LgordGVzdCAteCAvc2Jpbi91cGRhdGUgJiYgdXBkYXRlCisKK2VjaG8gIkVudGVyaW5nIHNpbmdsZS11c2VyIG1vZGUuLi4iCitleGVjIGluaXQgLXQxIFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N1c2hlbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK1sgLXogIiRTVVNIRUxMIiBdICYmIFNVU0hFTEw9L2Jpbi9zaAorCitleGVjICRTVVNIRUxMCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3lzZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3lzZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmZTc2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBNb3VudCBrZXJuZWwgdmlydHVhbCBmaWxlIHN5c3RlbXMuCisjIERlc2NyaXB0aW9uOiAgICAgICBNb3VudCBpbml0aWFsIHNldCBvZiB2aXJ0dWFsIGZpbGVzeXN0ZW1zIHRoZSBrZXJuZWwKKyMgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGFuZCB0aGF0IGFyZSByZXF1aXJlZCBieSBldmVyeXRoaW5nLgorIyMjIEVORCBJTklUIElORk8KKworaWYgWyAtZSAvcHJvYyBdICYmICEgWyAtZSAvcHJvYy9tb3VudHMgXTsgdGhlbgorICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK2ZpCisKK2lmIFsgLWUgL3N5cyBdICYmIGdyZXAgLXEgc3lzZnMgL3Byb2MvZmlsZXN5c3RlbXMgJiYgISBbIC1lIC9zeXMvY2xhc3MgXTsgdGhlbgorICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCitmaQorCitpZiBbIC1lIC9zeXMva2VybmVsL2RlYnVnIF0gJiYgZ3JlcCAtcSBkZWJ1Z2ZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisgIG1vdW50IC10IGRlYnVnZnMgZGVidWdmcyAvc3lzL2tlcm5lbC9kZWJ1ZworZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRmcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTMyNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50ZnMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVHVybiBvZmYgc3dhcCBhbmQgdW5tb3VudCBhbGwgbG9jYWwgZmlsZSBzeXN0ZW1zLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworZWNobyAiRGVhY3RpdmF0aW5nIHN3YXAuLi4iCitzd2Fwb2ZmIC1hCisKKyMgV2UgbGVhdmUgL3Byb2MgbW91bnRlZC4KK2VjaG8gIlVubW91bnRpbmcgbG9jYWwgZmlsZXN5c3RlbXMuLi4iCitncmVwIC1xIC9tbnQvcmFtIC9wcm9jL21vdW50cyAmJiBtb3VudCAtbyByZW1vdW50LHJvIC9tbnQvcmFtCittb3VudCAtbyByZW1vdW50LHJvIC8KKwordW1vdW50IC1mIC1hIC1yID4gL2Rldi9udWxsIDI+JjEKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRuZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50bmZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMDc1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50bmZzLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50bmZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgdW1vdW50ZnMKKyMgU2hvdWxkLVN0b3A6ICAgICAgICRuZXR3b3JrICRwb3J0bWFwCisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFVubW91bnQgYWxsIG5ldHdvcmsgZmlsZXN5c3RlbXMKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXcml0ZSBhIHJlYm9vdCByZWNvcmQgdG8gL3Zhci9sb2cvd3RtcCBiZWZvcmUgdW5tb3VudGluZworaGFsdCAtdworCitlY2hvICJVbm1vdW50aW5nIHJlbW90ZSBmaWxlc3lzdGVtcy4uLiIKKwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lIGFuZCB1bm91bnQgbmV0d29yayBmaWxlIHN5c3RlbXMKKyMKK3doaWxlIHJlYWQgZGV2aWNlIG1vdW50cHQgZnN0eXBlIG9wdGlvbnMKK2RvCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBuZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gc21iZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gbmNwZnMgfHwgdGVzdCAiJGZzdHlwZSIgPSBjaWZzCisJdGhlbgorCQl1bW91bnQgLWYgJG1vdW50cHQKKwlmaQorZG9uZQorKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3VyYW5kb20KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWYxNjI1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdXJhbmRvbQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2F2ZSBhbmQgcmVzdG9yZSB0aGUgcmFuZG9tIHNlZWQKKyMgRGVzY3JpcHRpb246ICAgICAgIFNhdmUgdGhlIHJhbmRvbSBzZWVkIG9uIHNodXRkb3duIGFuZCByZXN0b3JlIGl0IG9uIGJvb3QsCisjICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgc2VlZCBpc24ndCBwcmVkaWNhYmxlIG9uIHN0YXJ0dXAKKyMgICAgICAgICAgICAgICAgICAgIChiZWNhdXNlIHRoZSBib290IHByb2Nlc3MgaXMgcHJlZGljdGFibGUpCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1jIC9kZXYvdXJhbmRvbSB8fCBleGl0IDAKKworUkFORE9NX1NFRURfRklMRT0vdmFyL2xpYi91cmFuZG9tL3JhbmRvbS1zZWVkCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvdXJhbmRvbSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VyYW5kb20KKworY2FzZSAiJDEiIGluCisJc3RhcnR8IiIpCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJJbml0aWFsaXppbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iCisJCSMgTG9hZCBhbmQgdGhlbiBzYXZlIDUxMiBieXRlcywgd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIGVudHJvcHkKKwkJIyBwb29sLiBBbHNvIGxvYWQgdGhlIGN1cnJlbnQgZGF0ZSwgaW4gY2FzZSB0aGUgc2VlZCBmaWxlIGlzCisJCSMgZW1wdHkuCisJCSggZGF0ZSArJXMuJU47IFsgLWYgIiRSQU5ET01fU0VFRF9GSUxFIiBdICYmIGNhdCAiJFJBTkRPTV9TRUVEX0ZJTEUiICkgXAorCQkJPi9kZXYvdXJhbmRvbQorCQlybSAtZiAiJFJBTkRPTV9TRUVEX0ZJTEUiCisJCXVtYXNrIDA3NworCQlkZCBpZj0vZGV2L3VyYW5kb20gb2Y9JFJBTkRPTV9TRUVEX0ZJTEUgY291bnQ9MSBcCisJCQk+L2Rldi9udWxsIDI+JjEgfHwgZWNobyAidXJhbmRvbSBzdGFydDogZmFpbGVkLiIKKwkJdW1hc2sgMDIyCisJCTs7CisJc3RvcCkKKwkJIyBDYXJyeSBhIHJhbmRvbSBzZWVkIGZyb20gc2h1dC1kb3duIHRvIHN0YXJ0LXVwOworCQkjIHNlZSBkb2N1bWVudGF0aW9uIGluIGxpbnV4L2RyaXZlcnMvY2hhci9yYW5kb20uYworCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiU2F2aW5nIHJhbmRvbSBzZWVkLi4uIgorCQl1bWFzayAwNzcKKwkJZGQgaWY9L2Rldi91cmFuZG9tIG9mPSRSQU5ET01fU0VFRF9GSUxFIGNvdW50PTEgXAorCQkJPi9kZXYvbnVsbCAyPiYxIHx8IGVjaG8gInVyYW5kb20gc3RvcDogZmFpbGVkLiIKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogdXJhbmRvbSB7c3RhcnR8c3RvcH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdm9sYXRpbGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3ZvbGF0aWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTcyNDVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3ZvbGF0aWxlcwpAQCAtMCwwICsxLDM2IEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGxpc3RzIGZpbGVzeXN0ZW0gb2JqZWN0cyB0aGF0IHNob3VsZCBnZXQgdmVyaWZpZWQKKyMgZHVyaW5nIHN0YXJ0dXAgYW5kIGJlIGNyZWF0ZWQgaWYgbWlzc2luZy4KKyMKKyMgRXZlcnkgbGluZSBtdXN0IGVpdGhlciBiZSBhIGNvbW1lbnQgc3RhcnRpbmcgd2l0aCAjCisjIG9yIGEgZGVmaW5pdGlvbiBvZiBmb3JtYXQ6CisjIDx0eXBlPiA8b3duZXI+IDxncm91cD4gPG1vZGU+IDxwYXRoPiA8bGlua3NvdXJjZT4KKyMgd2hlcmUgdGhlIGl0ZW1zIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAhCisjCisjIDx0eXBlPiA6IGR8ZnxsIDogKGQpaXJlY3Rvcnl8KGYpaWxlfChsKWluaworIworIyBBIGxpbmtpbmcgZXhhbXBsZToKKyMgbCByb290IHJvb3QgMDc3NyAvdmFyL3Rlc3QgL3RtcC90ZXN0ZmlsZQorIyBmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvdGVzdCBub25lCisjCisjIFVuZGVyc3RhbmRpbmcgbGlua3M6CisjIFdoZW4gcG9wdWxhdGUtdm9sYXRpbGUgaXMgdG8gdmVyaWZ5L2NyZWF0ZSBhIGRpcmVjdG9yeSBvciBmaWxlLCBpdCB3aWxsIGZpcnN0CisjIGNoZWNrIGl0J3MgZXhpc3RlbmNlLiBJZiBhIGxpbmsgaXMgZm91bmQgdG8gZXhpc3QgaW4gdGhlIHBsYWNlIG9mIHRoZSB0YXJnZXQsCisjIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGFyZ2V0IHRoZSBsaW5rIHBvaW50cyB0by4KKyMgVGh1cywgaWYgYSBsaW5rIGlzIGluIHRoZSBwbGFjZSB0byBiZSB2ZXJpZmllZCwgdGhlIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQKKyMgaW4gdGhlIHBsYWNlIHRoZSBsaW5rIHBvaW50cyB0byBpbnN0ZWFkLgorIyBUaGlzIGV4cGxhaW5zIHRoZSBvcmRlciBvZiAibGluayBiZWZvcmUgb2JqZWN0IiBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlcmUKKyMgYSBsaW5rIHdpbGwgYmUgY3JlYXRlZCBhdCAvdmFyL3Rlc3QgcG9pbnRpbmcgdG8gL3RtcC90ZXN0ZmlsZSBhbmQgZHVlIHRvIHRoaXMKKyMgbGluayB0aGUgZmlsZSBkZWZpbmVkIGFzIC92YXIvdGVzdCB3aWxsIGFjdHVhbGx5IGJlIGNyZWF0ZWQgYXMgL3RtcC90ZXN0ZmlsZS4KK2Qgcm9vdCByb290IDE3NzcgL3J1bi9sb2NrIG5vbmUKK2Qgcm9vdCByb290IDA3NTUgL3Zhci92b2xhdGlsZS9sb2cgbm9uZQorZCByb290IHJvb3QgMTc3NyAvdmFyL3ZvbGF0aWxlL3RtcCBub25lCitsIHJvb3Qgcm9vdCAxNzc3IC92YXIvbG9jayAvcnVuL2xvY2sKK2wgcm9vdCByb290IDA3NTUgL3Zhci9sb2cgL3Zhci92b2xhdGlsZS9sb2cKK2wgcm9vdCByb290IDA3NTUgL3Zhci9ydW4gL3J1bgorbCByb290IHJvb3QgMTc3NyAvdmFyL3RtcCAvdmFyL3ZvbGF0aWxlL3RtcAorbCByb290IHJvb3QgMTc3NyAvdG1wIC92YXIvdG1wCitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9jay9zdWJzeXMgbm9uZQorZiByb290IHJvb3QgMDY2NCAvdmFyL2xvZy93dG1wIG5vbmUKK2Ygcm9vdCByb290IDA2NjQgL3Zhci9ydW4vdXRtcCBub25lCitsIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2LmNvbmYgL3Zhci9ydW4vcmVzb2x2LmNvbmYKK2Ygcm9vdCByb290IDA2NDQgL3Zhci9ydW4vcmVzb2x2LmNvbmYgbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MGRlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKQEAgLTAsMCArMSwxODIgQEAKK1NVTU1BUlkgPSAiU3lzViBpbml0IHNjcmlwdHMiCitERVNDUklQVElPTiA9ICJJbml0c2NyaXB0cyBwcm92aWRlIHRoZSBiYXNpYyBzeXN0ZW0gc3RhcnR1cCBpbml0aWFsaXphdGlvbiBzY3JpcHRzIGZvciB0aGUgc3lzdGVtLiAgVGhlc2Ugc2NyaXB0cyBpbmNsdWRlIGFjdGlvbnMgc3VjaCBhcyBmaWxlc3lzdGVtIG1vdW50aW5nLCBmc2NrLCBSVEMgbWFuaXB1bGF0aW9uIGFuZCBvdGhlciBhY3Rpb25zIHJvdXRpbmVseSBwZXJmb3JtZWQgYXQgc3lzdGVtIHN0YXJ0dXAuICBJbiBhZGRpdGlvbiwgdGhlIHNjcmlwdHMgYXJlIGFsc28gdXNlZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duIHRvIHJldmVyc2UgdGhlIGFjdGlvbnMgcGVyZm9ybWVkIGF0IHN0YXJ0dXAuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorUFIgPSAicjE1NSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vZnVuY3Rpb25zIFwKKyAgICAgICAgICAgZmlsZTovL2hhbHQgXAorICAgICAgICAgICBmaWxlOi8vdW1vdW50ZnMgXAorICAgICAgICAgICBmaWxlOi8vZGV2cHRzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2RldnB0cyBcCisgICAgICAgICAgIGZpbGU6Ly9ob3N0bmFtZS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudGFsbC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9iYW5uZXIuc2ggXAorICAgICAgICAgICBmaWxlOi8vYm9vdG1pc2Muc2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVib290IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc2luZ2xlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbmRzaWdzIFwKKyAgICAgICAgICAgZmlsZTovL3VyYW5kb20gXAorICAgICAgICAgICBmaWxlOi8vcm1ub2xvZ2luLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrcm9vdC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly91bW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcG9wdWxhdGUtdm9sYXRpbGUuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9zYXZlLXJ0Yy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9HUEx2Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kbWVzZy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dyb3RhdGUtZG1lc2cuY29uZiBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnZmlsZTovL3N1c2hlbGwnLCcnLGQpfSBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworU1JDX1VSSV9hcHBlbmRfYXJtID0gIiBmaWxlOi8vYWxpZ25tZW50LnNoIgorCitLRVJORUxfVkVSU0lPTiA9ICIiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworREVQRU5EU19hcHBlbmQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZnVuY3Rpb25zIFwKKyAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnYmFzaCcsJycsZCl9IFwKKwkJICIKK0ZJTEVTXyR7UE59LWZ1bmN0aW9ucyA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMqIgorCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1mdW5jdGlvbnMgPSAiOTAiCitBTFRFUk5BVElWRV8ke1BOfS1mdW5jdGlvbnMgPSAiZnVuY3Rpb25zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgorCitIQUxUQVJHUyA/PSAiLWQgLWYiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlzZWQgLWkgLWUgInM6U0VEX0hBTFRBUkdTOiR7SEFMVEFSR1N9OmciICR7V09SS0RJUn0vaGFsdAorCXNlZCAtaSAtZSAiczpTRURfSEFMVEFSR1M6JHtIQUxUQVJHU306ZyIgJHtXT1JLRElSfS9yZWJvb3QKK30KKworZG9faW5zdGFsbCAoKSB7CisjCisjIENyZWF0ZSBkaXJlY3RvcmllcyBhbmQgaW5zdGFsbCBkZXZpY2UgaW5kZXBlbmRlbnQgc2NyaXB0cworIworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yY1MuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMwLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjMS5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzIuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjNC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzUuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmM2LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJIyBIb2xkcyBzdGF0ZSBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIHVyYW5kb20KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi91cmFuZG9tCisKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9mdW5jdGlvbnMJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2Jvb3RtaXNjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2NoZWNrcm9vdC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9oYWx0CQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ob3N0bmFtZS5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudGFsbC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudG5mcy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yZWJvb3QJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3Jtbm9sb2dpbi5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zZW5kc2lncwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc2luZ2xlCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS91bW91bnRuZnMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vdXJhbmRvbQkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1pICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91cmFuZG9tIC1lICdzLC92YXIvLCR7bG9jYWxzdGF0ZWRpcn0vLGc7cywvZXRjLywke3N5c2NvbmZkaXJ9LyxnJworCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RldnB0cy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9kZXZwdHMJCSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zeXNmcy5zaAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcG9wdWxhdGUtdm9sYXRpbGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3NhdmUtcnRjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L3ZvbGF0aWxlcwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvMDBfY29yZQorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RtZXNnLnNoCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9sb2dyb3RhdGUtZG1lc2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS8KKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxpZ25tZW50LnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWZpCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc2VsaW51eCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3VzaGVsbCAke0R9LyR7YmFzZV9zYmluZGlyfQorCWZpCisjCisjIEluc3RhbGwgZGV2aWNlIGRlcGVuZGVudCBzY3JpcHRzCisjCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYmFubmVyLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iYW5uZXIuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS91bW91bnRmcwkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdW1vdW50ZnMKKyMKKyMgQ3JlYXRlIHJ1bmxldmVsIGxpbmtzCisjCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBybW5vbG9naW4uc2ggc3RhcnQgOTkgMiAzIDQgNSAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzZW5kc2lncyBzdGFydCAyMCAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdXJhbmRvbSBzdGFydCAzMCBTIDAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSB1bW91bnRuZnMuc2ggc3RhcnQgMzEgMCAxIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdW1vdW50ZnMgc3RhcnQgNDAgMCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHJlYm9vdCBzdGFydCA5MCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGhhbHQgc3RhcnQgOTAgMCAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzYXZlLXJ0Yy5zaCBzdGFydCAyNSAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYmFubmVyLnNoIHN0YXJ0IDAyIFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gY2hlY2tyb290LnNoIHN0YXJ0IDA2IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gbW91bnRhbGwuc2ggc3RhcnQgMDMgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBob3N0bmFtZS5zaCBzdGFydCAzOSBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IG1vdW50bmZzLnNoIHN0YXJ0IDE1IDIgMyA0IDUgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdG1pc2Muc2ggc3RhcnQgNTUgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzeXNmcy5zaCBzdGFydCAwMiBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHBvcHVsYXRlLXZvbGF0aWxlLnNoIHN0YXJ0IDM3IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIHN0YXJ0IDI5IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gZGV2cHRzLnNoIHN0YXJ0IDM4IFMgLgorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkgICAgICAgIHVwZGF0ZS1yYy5kIC1yICR7RH0gYWxpZ25tZW50LnNoIHN0YXJ0IDA2IFMgLgorCWZpCisJIyBXZSB3aXNoIHRvIGhhdmUgL3Zhci9sb2cgcmVhZHkgYXQgdGhpcyBzdGFnZSBzbyBleGVjdXRlIHRoaXMgYWZ0ZXIKKwkjIHBvcHVsYXRlLXZvbGF0aWxlLnNoCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBkbWVzZy5zaCBzdGFydCAzOCBTIC4KK30KKworTUFTS0VEX1NDUklQVFMgPSAiIFwKKyAgYmFubmVyIFwKKyAgYm9vdG1pc2MgXAorICBjaGVja2ZzIFwKKyAgY2hlY2tyb290IFwKKyAgZGV2cHRzIFwKKyAgZG1lc2cgXAorICBob3N0bmFtZSBcCisgIG1vdW50YWxsIFwKKyAgbW91bnRuZnMgXAorICBwb3B1bGF0ZS12b2xhdGlsZSBcCisgIHJlYWQtb25seS1yb290ZnMtaG9vayBcCisgIHJtbm9sb2dpbiBcCisgIHN5c2ZzIFwKKyAgdXJhbmRvbSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCWZvciBTRVJWSUNFIGluICR7TUFTS0VEX1NDUklQVFN9OyBkbworCQkJc3lzdGVtY3RsICRPUFRTIG1hc2sgJFNFUlZJQ0Uuc2VydmljZQorCQlkb25lCisJZmkKKworICAgICMgRGVsZXRlIGFueSBvbGQgdm9sYXRpbGUgY2FjaGUgc2NyaXB0LCBhcyBkaXJlY3RvcmllcyBtYXkgaGF2ZSBtb3ZlZAorICAgIGlmIFsgLXogIiREIiBdOyB0aGVuCisgICAgICAgIHJtIC1mICIvZXRjL3ZvbGF0aWxlLmNhY2hlIgorICAgIGZpCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvY2hlY2tyb290LnNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvanBlZy9qcGVnXzlhLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvanBlZy9qcGVnXzlhLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmU2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJsaWJqcGVnIGlzIGEgbGlicmFyeSBmb3IgaGFuZGxpbmcgdGhlIEpQRUcgKEpGSUYpIGltYWdlIGZvcm1hdCIKK0RFU0NSSVBUSU9OID0gImxpYmpwZWcgY29udGFpbnMgYSBsaWJyYXJ5IGZvciBoYW5kbGluZyB0aGUgSlBFRyAoSkZJRikgaW1hZ2UgZm9ybWF0LCBhcyB3ZWxsIGFzIHJlbGF0ZWQgcHJvZ3JhbXMgZm9yIGFjY2Vzc2luZyB0aGUgbGlianBlZyBmdW5jdGlvbnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pamcub3JnLyIKKworTElDRU5TRSA9IkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9ZWE5M2E4YTJmZWQxMDEwNmI2M2JjMjE2NzllZGFjYjkiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmlqZy5vcmcvZmlsZXMvanBlZ3NyYy52JHtQVn0udGFyLmd6IFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMzNTM5OTJhZWNhZWUxODA1ZWY0MTA5YWFkZDQzM2U3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNhNzUzZWE0OGQ5MTc5NDVkZDU0YTJkOTdkZTM4OGFhMDZjYTJlYjEwNjZjYmZkYzY2NTIwMzYzNDlmZTA1YTciCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rIAkJImpwZWctdG9vbHMgIgorREVTQ1JJUFRJT05fanBlZy10b29scyA9ICJUaGUganBlZy10b29scyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBjbGllbnQgcHJvZ3JhbXMgZm9yIGFjY2VzcyBsaWJqcGVnIGZ1bmN0aW9uYWxpdHkuICBUaGVzZSB0b29scyBhbGxvdyBmb3IgdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCB0cmFuc2Zvcm1hdGlvbiBhbmQgZGlzcGxheSBvZiBKUEVHIGZpbGVzLiIKK0ZJTEVTX2pwZWctdG9vbHMgPSAJIiR7YmluZGlyfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworcGtnX3Bvc3RpbnN0XyR7UE59X2xpbnV4c3RkYmFzZSAoKSB7CisgICAgaWYgWyAhIC1lICREJHtsaWJkaXJ9L2xpYmpwZWcuc28uNjIgXTsgdGhlbgorICAgICAgICBKUEVHPWBmaW5kICREJHtsaWJkaXJ9IC10eXBlIGYgLW5hbWUgbGlianBlZy5zby5cKi5cKi5cKmAKKyAgICAgICAgbG4gLXNmIGBiYXNlbmFtZSAkSlBFR2AgJEQke2xpYmRpcn0vbGlianBlZy5zby42MgorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvMDAwMy1Pbmx5LWlubHVjbHVkZS1rZXJuZWwtaGVhZGVycy13aXRoLWdsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZmNiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDNjNWM3YWNjN2VmODc0YjkxOWIyNjU4M2QzODkyZTIxYjkwNzgzM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+CitEYXRlOiBXZWQsIDIwIEF1ZyAyMDE0IDA5OjAwOjAzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBPbmx5IGlubHVjbHVkZSBrZXJuZWwgaGVhZGVycyB3aXRoIGdsaWJjCisKK1RoaXMgZml4ZXMgY29tcGlsZSBlcnJvcnMgd2l0aCBtdXNsIGxpYmMKKworU2lnbmVkLW9mZi1ieTogTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvcmVzaXplY29ucy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Jlc2l6ZWNvbnMuYyBiL3NyYy9yZXNpemVjb25zLmMKK2luZGV4IDVmODQ4NDUuLjY5MWRmY2MgMTAwNjQ0CistLS0gYS9zcmMvcmVzaXplY29ucy5jCisrKysgYi9zcmMvcmVzaXplY29ucy5jCitAQCAtODAsNyArODAsNyBAQAorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaWYgKF9fR05VX0xJQlJBUllfXyA+PSA2KQorICNpbmNsdWRlIDxzeXMvcGVybS5oPgorLSNlbHNlCisrI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pCisgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisgI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KKyAjZW5kaWYKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC91Y2xpYmMtc3RkYXJnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC91Y2xpYmMtc3RkYXJnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlN2YzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGtleW1hcC5oOjU6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSBrc3ltcy5jOjY6CisuL2tleW1hcC9jb21tb24uaDo2NTozODogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICd2YV9saXN0JworICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL2tleW1hcC9jb21tb24uaDo2NjozOiBlcnJvcjogZXhwZWN0ZWQgJzsnLCAnLCcgb3IgJyknIGJlZm9yZSAnY29uc3QnCisgICBjb25zdCB2b2lkICpkYXRhKTsKKyAgIF4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IGtiZC0yLjAuMC9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrYmQtMi4wLjAub3JpZy9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9jb250ZXh0UC5oCTIwMTMtMTEtMDUgMjI6MzM6NDkuMjAwNTI4MjI2IC0wODAwCitAQCAtMiw3ICsyLDcgQEAKKyAjZGVmaW5lIExLX0NPTlRFWFRQX0gKKyAKKyAjaW5jbHVkZSAia2V5bWFwLmgiCistCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorIC8qKgorICAqIEBicmllZiBDb3B5IG9mIHN0cnVjdCBrYmRpYWNydWMuCisgICovCitJbmRleDoga2JkLTIuMC4wL3NyYy9saWJrZXltYXAva2V5bWFwL2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2JkLTIuMC4wLm9yaWcvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0xMS0wNSAyMjozMzo1OS45NjQ1Mjg0MzggLTA4MDAKK0BAIC02LDYgKzYsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxrZXltYXAvY29udGV4dC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyAKKyAvKiogSW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZXMgbmVjZXNzYXJ5IHRvIHJlYWQgYW5kL29yIHBhcnNlIGtleW1hcC4KKyAgKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2ZGM3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjIuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJLZXl0YWJsZSBmaWxlcyBhbmQga2V5Ym9hcmQgdXRpbGl0aWVzIgorIyBldmVyeXRoaW5nIG1pbnVzIGNvbnNvbGUtZm9udHMgaXMgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1ZmNjMzYxMjFkOTNlMWY2OWQ5NmEzMTMwNzhjOGI1IgorREVQRU5EUyA9ICJsaWJjaGVjayIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwdGVzdCBwa2djb25maWcKKworUlJFUExBQ0VTXyR7UE59ID0gImNvbnNvbGUtdG9vbHMiCitSUFJPVklERVNfJHtQTn0gPSAiY29uc29sZS10b29scyIKK1JDT05GTElDVFNfJHtQTn0gPSAiY29uc29sZS10b29scyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLXN0ZGFyZy5wYXRjaCBcCisJICAgZmlsZTovLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODc0NzVlYjc4YjFkNmU2YWIwNjY4NmRkMzIzYWQ0YmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZGRhYmY5NjAxMmUzMjljNGJlYmI5NmEyMWFlZWY3YzM4NzJmNjI0ZTk2ZTgxNTZiYTU0MmI4MmFlYjkxMiIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS12bG9jaywgLS1kaXNhYmxlLXZsb2NrLCBsaWJwYW0sIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY29uc29sZWZvbnRzICR7UE59LWtleW1hcHMgJHtQTn0tdW5pbWFwcyAke1BOfS1jb25zb2xldHJhbnMiCisKK0ZJTEVTXyR7UE59LWNvbnNvbGVmb250cyA9ICIke2RhdGFkaXJ9L2NvbnNvbGVmb250cyIKK0ZJTEVTXyR7UE59LWNvbnNvbGV0cmFucyA9ICIke2RhdGFkaXJ9L2NvbnNvbGV0cmFucyIKK0ZJTEVTXyR7UE59LWtleW1hcHMgPSAiJHtkYXRhZGlyfS9rZXltYXBzIgorRklMRVNfJHtQTn0tdW5pbWFwcyA9ICIke2RhdGFkaXJ9L3VuaW1hcHMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJjaHZ0IGRlYWxsb2N2dCBmZ2NvbnNvbGUgb3BlbnZ0IgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYmNncm91cC9saWJjZ3JvdXBfMC40MS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYmNncm91cC9saWJjZ3JvdXBfMC40MS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJhMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGludXggY29udHJvbCBncm91cCBhYnN0cmFjdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGliY2dyb3VwIGlzIGEgbGlicmFyeSB0aGF0IGFic3RyYWN0cyB0aGUgY29udHJvbCBncm91cCBmaWxlIHN5c3RlbSBcCitpbiBMaW51eC4gQ29udHJvbCBncm91cHMgYWxsb3cgeW91IHRvIGxpbWl0LCBhY2NvdW50IGFuZCBpc29sYXRlIHJlc291cmNlIHVzYWdlIFwKKyhDUFUsIG1lbW9yeSwgZGlzayBJL08sIGV0Yy4pIG9mIGdyb3VwcyBvZiBwcm9jZXNzZXMuIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saWJjZy8ke0JQTn0vdjAuNDEvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZGVhOWQ1MGI4YTViNzNmZjBiZjFjZGNiMjEwZjYzZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNGUzOGJkYzdlZjcwNjQ1Y2UzMzc0MGRkY2NhMDUxMjQ4ZDU2YjUzMjgzYzBkYzZkNDA0ZTE3NzA2ZjZmYjUxIgorCitFWFRSQV9PRUNPTkYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtLW1vZHVsZS1kaXI9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkgLS1lbmFibGUtcGFtPXllcycsICctLWVuYWJsZS1wYW09bm8nLCBkKX0iCisKK1BBQ0tBR0VTID0rICJjZ3JvdXBzLXBhbS1wbHVnaW4iCitGSUxFU19jZ3JvdXBzLXBhbS1wbHVnaW4gPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZpbmcgbGliY2dyb3VwIHRvIGJhc2VfbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12IC1mICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9LworCQlyZWxfbGliX3ByZWZpeD1gZWNobyAke2xpYmRpcn0gfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZydgCisJCWxuIC1zZiAke3JlbF9saWJfcHJlZml4fSR7YmFzZV9saWJkaXJ9L2xpYmNncm91cC5zby4xICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvCisJZmkKKwkjIHBhbSBtb2R1bGVzIGluICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyBzaG91bGQgYmUgYmluYXJ5IC5zbyBmaWxlcywgbm90IHN5bWxpbmtzLgorCWlmIFsgLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28uMC4wLjAgXTsgdGhlbgorCQltdiAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4wLjAuMCAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbworCQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4qCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzNjMzdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jCkBAIC0wLDAgKzEsNzggQEAKK1NVTU1BUlkgPSAiWE1MIEMgUGFyc2VyIExpYnJhcnkgYW5kIFRvb2xraXQiCitERVNDUklQVElPTiA9ICJUaGUgWE1MIFBhcnNlciBMaWJyYXJ5IGFsbG93cyBmb3IgbWFuaXB1bGF0aW9uIG9mIFhNTCBmaWxlcy4gIExpYnhtbDIgZXhwb3J0cyBQdXNoIGFuZCBQdWxsIHR5cGUgcGFyc2VyIGludGVyZmFjZXMgZm9yIGJvdGggWE1MIGFuZCBIVE1MLiAgSXQgY2FuIGRvIERURCB2YWxpZGF0aW9uIGF0IHBhcnNlIHRpbWUsIG9uIGEgcGFyc2VkIGRvY3VtZW50IGluc3RhbmNlIG9yIHdpdGggYW4gYXJiaXRyYXJ5IERURC4gIExpYnhtbDIgaW5jbHVkZXMgY29tcGxldGUgWFBhdGgsIFhQb2ludGVyIGFuZCBYaW5jbHVkZSBpbXBsZW1lbnRhdGlvbnMuICBJdCBhbHNvIGhhcyBhIFNBWCBsaWtlIGludGVyZmFjZSwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIEV4cGF0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueG1sc29mdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sMiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0yMDQ0NDE3ZTJlNTAwNmI2NWE4YjkwNjdiNjgzZmNmMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9oYXNoLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xNTttZDU9OTZmNzI5NjYwNWVhZTgwNzY3MGZiMDg5NDc4Mjk5NjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlzdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTM7bWQ1PWNkYmZhM2RlZTUxYzA5OWVkYjA0ZTM5Zjc2MmVlOTA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyaW8uYztiZWdpbmxpbmU9NTtlbmRsaW5lPTE0O21kNT02YzAyNTc1M2M4NmQ5NTg3MjJlYzc2ZTk0Y2FlOTMyZSIKKworREVQRU5EUyA9KyAiemxpYiIKKworU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4bWwyL2xpYnhtbDItJHtQVn0udGFyLmd6O25hbWU9bGlidGFyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbnNpZGVjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW50ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veG1sMi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgcHl0aG9ubmF0aXZlIHB0ZXN0CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHl0aG9uICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgKz0gImdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIgorCisjIFdlIGRvbid0IERFUEVORCBvbiBiaW51dGlscyBmb3IgYW5zaWRlY2wuaCBzbyBlbnN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBoZWFkZXIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgLWUgJy8uKmFuc2lkZWNsLmguKi9kJyAke1N9L2NvbmZpZ3VyZS5hYworfQorCitleHBvcnQgUFlUSE9OX1NJVEVfUEFDS0FHRVM9IiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24iCisjIFdBUk5JTkc6IHpsaWIgaXMgcmVxdWlyZSBmb3IgUlBNIHVzZQorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbGVnYWN5IC0td2l0aC1jYXRhbG9nIC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC1mZXhjZXB0aW9ucyIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9saW51eHN0ZGJhc2UgPSAiLS13aXRoLWRlYnVnIC0td2l0aC1sZWdhY3kgLS13aXRoLWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCisKKyMgcmVxdWlyZWQgZm9yIHB5dGhvbmcgYmluZGluZworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorCitleHBvcnQgTERGTEFHUyArPSAiLWxkbCIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgICMgYXV0b25hbWVyIHdvdWxkIGNhbGwgdGhpcyBsaWJ4bWwyLTIsIGJ1dCB3ZSBkb24ndCB3YW50IHRoYXQKKyAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfbGlieG1sMicsICcke01MUFJFRklYfWxpYnhtbDInKQorfQorCitQQUNLQUdFUyArPSAiJHtQTn0tdXRpbHMgJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veG1sMkNvbmYuc2ggJHtsaWJkaXJ9L2NtYWtlLyoiCitGSUxFU18ke1BOfS11dGlscyArPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1weXRob24gKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgY3AgLXIgJHtXT1JLRElSfS94bWxjb25mICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtQ1ZFLTIwMTUtMTgxOS1FbmZvcmNlLXRoZS1yZWFkZXItdG8tcnVuLWluLWNvbnN0YW50LS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtQ1ZFLTIwMTUtMTgxOS1FbmZvcmNlLXRoZS1yZWFkZXItdG8tcnVuLWluLWNvbnN0YW50LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ1OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoCkBAIC0wLDAgKzEsMTgxIEBACitGcm9tIDIxM2YxZmUwZDc2ZDMwZWFlZDZlNTg1MzA1N2RlZmM0M2U2ZGYyYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDE3OjQxOjQ4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIENWRS0yMDE1LTE4MTkgRW5mb3JjZSB0aGUgcmVhZGVyIHRvIHJ1biBpbiBjb25zdGFudCBtZW1vcnkKKworT25lIG9mIHRoZSBvcGVyYXRpb24gb24gdGhlIHJlYWRlciBjb3VsZCByZXNvbHZlIGVudGl0aWVzCitsZWFkaW5nIHRvIHRoZSBjbGFzc2ljIGV4cGFuc2lvbiBpc3N1ZS4gTWFrZSBzdXJlIHRoZQorYnVmZmVyIHVzZWQgZm9yIHhtbHJlYWRlciBvcGVyYXRpb24gaXMgYm91bmRlZC4KK0ludHJvZHVjZSBhIG5ldyBhbGxvY2F0aW9uIHR5cGUgZm9yIHRoZSBidWZmZXJzIGZvciB0aGlzIGVmZmVjdC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1Zi5jICAgICAgICAgICAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB8ICAgIDMgKystCisgeG1scmVhZGVyLmMgICAgICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKysrLQorIDMgZmlsZXMgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1Zi5jIGIvYnVmLmMKK2luZGV4IDZlZmM3YjYuLjA3OTIyZmYgMTAwNjQ0CistLS0gYS9idWYuYworKysrIGIvYnVmLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisgI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisrI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4gLyogZm9yIFhNTF9NQVhfVEVYVF9MRU5HVEggKi8KKyAjaW5jbHVkZSAiYnVmLmgiCisgCisgI2RlZmluZSBXSVRIX0JVRkZFUl9DT01QQVQKK0BAIC0yOTksNyArMzAwLDggQEAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZQdHIgYnVmLAorICAgICBpZiAoKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0VYQUNUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCkgfHwKKy0gICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpKSB7CisrICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSB8fAorKwkoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkpIHsKKyAJYnVmLT5hbGxvYyA9IHNjaGVtZTsKKyAgICAgICAgIGlmIChidWYtPmJ1ZmZlcikKKyAgICAgICAgICAgICBidWYtPmJ1ZmZlci0+YWxsb2MgPSBzY2hlbWU7CitAQCAtNDU4LDYgKzQ2MCwxOCBAQCB4bWxCdWZHcm93SW50ZXJuYWwoeG1sQnVmUHRyIGJ1Ziwgc2l6ZV90IGxlbikgeworICAgICBzaXplID0gYnVmLT51c2UgKyBsZW4gKyAxMDA7CisgI2VuZGlmCisgCisrICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKyAgICAgICAgLyoKKysJICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAqLworKyAgICAgICAgaWYgKChidWYtPnVzZSArIGxlbiA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB8fAorKwkgICAgKGJ1Zi0+c2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSkgeworKwkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJICAgIHJldHVybigwKTsKKysJfQorKwlpZiAoc2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKQorKwkgICAgc2l6ZSA9IFhNTF9NQVhfVEVYVF9MRU5HVEg7CisrICAgIH0KKyAgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmIChidWYtPmNvbnRlbnRJTyAhPSBOVUxMKSkgeworICAgICAgICAgc2l6ZV90IHN0YXJ0X2J1ZiA9IGJ1Zi0+Y29udGVudCAtIGJ1Zi0+Y29udGVudElPOworIAorQEAgLTczOSw2ICs3NTMsMTUgQEAgeG1sQnVmUmVzaXplKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBzaXplKQorICAgICBDSEVDS19DT01QQVQoYnVmKQorIAorICAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuKDApOworKyAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpIHsKKysgICAgICAgIC8qCisrCSAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgKi8KKysgICAgICAgIGlmIChzaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHsKKysJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImJ1ZmZlciBlcnJvcjogdGV4dCB0b28gbG9uZ1xuIik7CisrCSAgICByZXR1cm4oMCk7CisrCX0KKysgICAgfQorIAorICAgICAvKiBEb24ndCByZXNpemUgaWYgd2UgZG9uJ3QgaGF2ZSB0byAqLworICAgICBpZiAoc2l6ZSA8IGJ1Zi0+c2l6ZSkKK0BAIC04NjcsNiArODkwLDE1IEBAIHhtbEJ1ZkFkZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAKKyAgICAgbmVlZFNpemUgPSBidWYtPnVzZSArIGxlbiArIDI7CisgICAgIGlmIChuZWVkU2l6ZSA+IGJ1Zi0+c2l6ZSl7CisrCWlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKwkgICAgLyoKKysJICAgICAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgICAgICovCisrCSAgICBpZiAobmVlZFNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkgeworKwkJeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJCXJldHVybigtMSk7CisrCSAgICB9CisrCX0KKyAgICAgICAgIGlmICgheG1sQnVmUmVzaXplKGJ1ZiwgbmVlZFNpemUpKXsKKyAJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImdyb3dpbmcgYnVmZmVyIik7CisgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJfTk9fTUVNT1JZOworQEAgLTkzOCw2ICs5NzAsMTUgQEAgeG1sQnVmQWRkSGVhZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAgICAgfQorICAgICBuZWVkU2l6ZSA9IGJ1Zi0+dXNlICsgbGVuICsgMjsKKyAgICAgaWYgKG5lZWRTaXplID4gYnVmLT5zaXplKXsKKysJaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSB7CisrCSAgICAvKgorKwkgICAgICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAgICAgKi8KKysJICAgIGlmIChuZWVkU2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB7CisrCQl4bWxCdWZNZW1vcnlFcnJvcihidWYsICJidWZmZXIgZXJyb3I6IHRleHQgdG9vIGxvbmdcbiIpOworKwkJcmV0dXJuKC0xKTsKKysJICAgIH0KKysJfQorICAgICAgICAgaWYgKCF4bWxCdWZSZXNpemUoYnVmLCBuZWVkU2l6ZSkpeworIAkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiZ3Jvd2luZyBidWZmZXIiKTsKKyAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUl9OT19NRU1PUlk7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGIvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCitpbmRleCAyZjkwNzE3Li40YTliM2JjIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCisrKysgYi9pbmNsdWRlL2xpYnhtbC90cmVlLmgKK0BAIC03Niw3ICs3Niw4IEBAIHR5cGVkZWYgZW51bSB7CisgICAgIFhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QsCS8qIGdyb3cgb25seSB0byB0aGUgbWluaW1hbCBzaXplICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFLCAvKiBpbW11dGFibGUgYnVmZmVyICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU8sCS8qIHNwZWNpYWwgYWxsb2NhdGlvbiBzY2hlbWUgdXNlZCBmb3IgSS9PICovCistICAgIFhNTF9CVUZGRVJfQUxMT0NfSFlCUklECS8qIGV4YWN0IHVwIHRvIGEgdGhyZXNob2xkLCBhbmQgZG91YmxlaXQgdGhlcmVhZnRlciAqLworKyAgICBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCwJLyogZXhhY3QgdXAgdG8gYSB0aHJlc2hvbGQsIGFuZCBkb3VibGVpdCB0aGVyZWFmdGVyICovCisrICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRAkvKiBsaW1pdCB0aGUgdXBwZXIgc2l6ZSBvZiB0aGUgYnVmZmVyICovCisgfSB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lOworIAorIC8qKgorZGlmZiAtLWdpdCBhL3htbHJlYWRlci5jIGIveG1scmVhZGVyLmMKK2luZGV4IGYxOWUxMjMuLjQ3MWU3ZTIgMTAwNjQ0CistLS0gYS94bWxyZWFkZXIuYworKysrIGIveG1scmVhZGVyLmMKK0BAIC0yMDkxLDYgKzIwOTEsOSBAQCB4bWxOZXdUZXh0UmVhZGVyKHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LCBjb25zdCBjaGFyICpVUkkpIHsKKyAJCSJ4bWxOZXdUZXh0UmVhZGVyIDogbWFsbG9jIGZhaWxlZFxuIik7CisgCXJldHVybihOVUxMKTsKKyAgICAgfQorKyAgICAvKiBubyBvcGVyYXRpb24gb24gYSByZWFkZXIgc2hvdWxkIHJlcXVpcmUgYSBodWdlIGJ1ZmZlciAqLworKyAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJldC0+YnVmZmVyLAorKwkJCSAgICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCk7CisgICAgIHJldC0+c2F4ID0gKHhtbFNBWEhhbmRsZXIgKikgeG1sTWFsbG9jKHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CisgICAgIGlmIChyZXQtPnNheCA9PSBOVUxMKSB7CisgCXhtbEJ1ZkZyZWUocmV0LT5idWZmZXIpOworQEAgLTM2MTYsNiArMzYxOSw3IEBAIHhtbFRleHRSZWFkZXJDb25zdFZhbHVlKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKSB7CisgCSAgICByZXR1cm4oKCh4bWxOc1B0cikgbm9kZSktPmhyZWYpOworICAgICAgICAgY2FzZSBYTUxfQVRUUklCVVRFX05PREU6eworIAkgICAgeG1sQXR0clB0ciBhdHRyID0gKHhtbEF0dHJQdHIpIG5vZGU7CisrCSAgICBjb25zdCB4bWxDaGFyICpyZXQ7CisgCisgCSAgICBpZiAoKGF0dHItPmNoaWxkcmVuICE9IE5VTEwpICYmCisgCSAgICAgICAgKGF0dHItPmNoaWxkcmVuLT50eXBlID09IFhNTF9URVhUX05PREUpICYmCitAQCAtMzYyOSwxMCArMzYzMywyMSBAQCB4bWxUZXh0UmVhZGVyQ29uc3RWYWx1ZSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sVGV4dFJlYWRlclNldHVwIDogbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKyAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICB4bWxCdWZFbXB0eShyZWFkZXItPmJ1ZmZlcik7CisgCSAgICAgICAgeG1sQnVmR2V0Tm9kZUNvbnRlbnQocmVhZGVyLT5idWZmZXIsIG5vZGUpOworLQkJcmV0dXJuKHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpKTsKKysJCXJldCA9IHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpOworKwkJaWYgKHJldCA9PSBOVUxMKSB7CisrCQkgICAgLyogZXJyb3Igb24gdGhlIGJ1ZmZlciBiZXN0IHRvIHJlYWxsb2NhdGUgKi8KKysJCSAgICB4bWxCdWZGcmVlKHJlYWRlci0+YnVmZmVyKTsKKysJCSAgICByZWFkZXItPmJ1ZmZlciA9IHhtbEJ1ZkNyZWF0ZVNpemUoMTAwKTsKKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKysJCSAgICByZXQgPSBCQURfQ0FTVCAiIjsKKysJCX0KKysJCXJldHVybihyZXQpOworIAkgICAgfQorIAkgICAgYnJlYWs7CisgCX0KK0BAIC01MTMxLDYgKzUxNDYsOSBAQCB4bWxUZXh0UmVhZGVyU2V0dXAoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInhtbFRleHRSZWFkZXJTZXR1cCA6IG1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgIH0KKysgICAgLyogbm8gb3BlcmF0aW9uIG9uIGEgcmVhZGVyIHNob3VsZCByZXF1aXJlIGEgaHVnZSBidWZmZXIgKi8KKysgICAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZShyZWFkZXItPmJ1ZmZlciwKKysJCQkgICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpOworICAgICBpZiAocmVhZGVyLT5zYXggPT0gTlVMTCkKKyAJcmVhZGVyLT5zYXggPSAoeG1sU0FYSGFuZGxlciAqKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKyAgICAgaWYgKHJlYWRlci0+c2F4ID09IE5VTEwpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1M2E4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDY3NTBjYzU2NGExN2M4MTI1NTVjY2E1ODc2NjAyNDBjY2ZmYWFlZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA0IEFwciAyMDE1IDA4OjUwOjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRocmVhZHM6IERlZmluZSBwdGhyZWFkKiBkZWZpbml0aW9ucyBmb3IgZ2xpYmMgY29tcGxpYW50IGxpYnMKKworVGhpcyBjb2RlIGlzIGFzc3VtaW5nIGdsaWJjIGJ1dCBub3QgZXhwbGljaXRseSBzYXlpbmcgaXQKK3NvIGxldHMgbWFrZSBpdCBzby4gRml4ZXMgZm9sbG93aW5nIG9uIG11c2wKKwordGhyZWFkcy5jOjgwOjI3OiBlcnJvcjogbWFjcm8gInB0aHJlYWRfZXF1YWwiIHJlcXVpcmVzIDIgYXJndW1lbnRzLCBidXQKK29ubHkgMSBnaXZlbgorfCAgZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsICgpCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdGhyZWFkcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOS4yLm9yaWcvdGhyZWFkcy5jCisrKysgbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKK0BAIC00Nyw3ICs0Nyw3IEBACisgI2lmZGVmIEhBVkVfUFRIUkVBRF9ICisgCisgc3RhdGljIGludCBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAtMTsKKy0jaWZkZWYgX19HTlVDX18KKysjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0dMSUJDX18pCisgI2lmZGVmIGxpbnV4CisgI2lmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IChfX0dOVUNfXyA+IDMpCisgZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi83MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTgxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi83MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgMjMgT2N0IDIwMTQgMTE6MzU6MzYgKzA4MDAKK1N1YmplY3Q6IEZpeCBtaXNzaW5nIGVudGl0aWVzIGFmdGVyIENWRS0yMDE0LTM2NjAgZml4CisKK0ZvciBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4ODA1CisKK1RoZSBmaXggZm9yIENWRS0yMDE0LTM2NjAgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gaW4gc29tZSBjYXNlCit3aGVyZSBlbnRpdHkgc3Vic3RpdHV0aW9uIGlzIHJlcXVpcmVkIGFuZCB0aGUgZW50aXR5IGlzIHVzZWQKK2ZpcnN0IGluIGFub3R0aGVyIGVudGl0eSByZWZlcmVuY2VkIGZyb20gYW4gYXR0cmlidXRlIHZhbHVlCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL3BhcnNlci5jIGIvcGFyc2VyLmMKK2luZGV4IDY3YzlkZmQuLmE4ZDFiNjcgMTAwNjQ0CistLS0gYS9wYXJzZXIuYworKysrIGIvcGFyc2VyLmMKK0BAIC03MjM1LDcgKzcyMzUsOCBAQCB4bWxQYXJzZVJlZmVyZW5jZSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICAgICogZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbCBvbmx5IHByb2Nlc3MgZGF0YSBjb21pbmcgZnJvbQorICAgICAgKiB0aGUgZG9jdW1lbnQgZW50aXR5IGJ5IGRlZmF1bHQuCisgICAgICAqLworLSAgICBpZiAoKGVudC0+Y2hlY2tlZCA9PSAwKSAmJgorKyAgICBpZiAoKChlbnQtPmNoZWNrZWQgPT0gMCkgfHwKKysgICAgICAgICAoKGVudC0+Y2hpbGRyZW4gPT0gTlVMTCkgJiYgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpKSkgJiYKKyAgICAgICAgICgoZW50LT5ldHlwZSAhPSBYTUxfRVhURVJOQUxfR0VORVJBTF9QQVJTRURfRU5USVRZKSB8fAorICAgICAgICAgIChjdHh0LT5vcHRpb25zICYgKFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERWQUxJRCkpKSkgeworIAl1bnNpZ25lZCBsb25nIG9sZG5iZW50ID0gY3R4dC0+bmJlbnRpdGllczsKKy0tIAorY2dpdCB2MC4xMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvYW5zaWRlY2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1MmQ3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1NhZGx5IGNtYWtlIGlzIGJyb2tlbi4gSWYgaXQgc2VlcyB0aGlzIHJlZmVyZW5jZSBhbmQgYW5zaWRlY2wgaXMgcHJlc2VudCwgaXQgd2lsbCBhZGQgYSAKK2RlcGVuZGVuY3kgdXBvbiBpdCwgZXZlbiBpZiBIQVZFX0FOU0lERUNfSCBpcyBuZXZlciBzZXQuCisKK1RoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGVzZSBsaW5lcywgb3RoZXJ3aXNlIHJlY2lwZXMgbGlrZSBsaWJ6eXBwIGNhbiBoYXZlIGEgCitkZXBlbmRlbmN5IG9uIHRoZSBhbnNpZGVjbC5oIGhlYWRlciB2aWEgY21ha2UuIFRoaXMgY2FuIGxlYWQgdG8gb2RkIHJlc3VsdHMgaWYgdGhlIAoraGVhZGVyIGlzIHJlbW92ZWQgKGNsZWFuIGJpbnV0aWxzKSBhbmQgdGhlbiB0aGUgY29kZSBpcyByZWNvbXBpbGVkLgorCitSUCAyMDEyLzcvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtpdHMgcmVhbGx5IGEgY21ha2UgYnVnXQorCitJbmRleDogbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOC4wLm9yaWcvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCTIwMTItMDctMTAgMTE6NTE6NTIuNDYwNzUwNTczICswMDAwCisrKysgbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4JMjAxMi0wNy0xMCAxMTo1Mjo0MS40MzY3NDkzOTcgKzAwMDAKK0BAIC00MDEsOSArNDAxLDYgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19HTlVDX18KKy0jaWZkZWYgSEFWRV9BTlNJREVDTF9ICistI2luY2x1ZGUgPGFuc2lkZWNsLmg+CistI2VuZGlmCisgCisgLyoqCisgICogQVRUUklCVVRFX1VOVVNFRDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODA3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK2NvbmZpZ3VyZS5hYzogZml4IGNyb3NzIGNvbXBpbGluZyB3YXJuaW5nCisKK1RoZXJlIGlzIGEgd2FybmluZyB3aGlsZSBjcm9zcyBjb21waWxpbmcgd2hpY2ggdHJpZ2dlcmVkIGEKK2ZhaWx1cmUgYnkgZG9fcWFfY29uZmlndXJlCisuLi4KK3xjb25maWd1cmU6MTI2NTI6IGNoZWNraW5nIGZvciBnenJlYWQgaW4gLWx6Cit8Y29uZmlndXJlOjEyNjc3OiBtaXBzLXBva3ktbGludXgtZ2NjICAtbWViIC1tYWJpPTMyIC1taGFyZC1mbG9hdAorIC1ML2xpYiBjb25mdGVzdC5jIC1seiAgID4mNQorfGxkOiB3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoICIvbGliIiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisuLi4KKworV2hpbGUgZG8gdGhlIGxpYiBjaGVja2luZywgZG8gbm90IGFkZCAnLUwke1pfRElSfS9saWInIHRvIExERkxBR1MgY291bGQgZml4IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNSArLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWE5MDYwMC4uMGJhYzhhNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkxLDggKzM5MSw2IEBAIGlmIHRlc3QgIiR3aXRoX3psaWIiID0gIm5vIjsgdGhlbgorICAgICBlY2hvICJEaXNhYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCIKKyBlbHNlCisgICAgIEFDX0NIRUNLX0hFQURFUlMoemxpYi5oLAorLSAgICAgICAgW1NBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKy0JIExERkxBR1M9Ii1MJHtaX0RJUn0vbGliIgorIAlBQ19DSEVDS19MSUIoeiwgZ3pyZWFkLFsKKyAJICAgIEFDX0RFRklORShbSEFWRV9MSUJaXSwgWzFdLCBbSGF2ZSBjb21wcmVzc2lvbiBsaWJyYXJ5XSkKKyAJICAgIFdJVEhfWkxJQj0xCitAQCAtNDA2LDggKzQwNCw3IEBAIGVsc2UKKyAJCWVzYWNdCisgCSAgICBlbHNlCisgCQlaX0xJQlM9Ii1seiIKKy0JICAgIGZpXSkKKy0JIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSJdKQorKwkgICAgZmldKSkKKyBmaQorIAorIEFDX1NVQlNUKFpfQ0ZMQUdTKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtNjRiaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtNjRiaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0NzAxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGRlYmlhbjogYnVncy5kZWJpYW4ub3JnLzQzOTg0M10KKworLS0tCisgbGlieG1sLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLS0tIGxpYnhtbDItMi42LjI5Lm9yaWcvbGlieG1sLmgKKysrKyBsaWJ4bWwyLTIuNi4yOS9saWJ4bWwuaAorQEAgLTExLDEwICsxMSwxMyBAQAorIAorICNpZm5kZWYgTk9fTEFSR0VGSUxFX1NPVVJDRQorICNpZm5kZWYgX0xBUkdFRklMRV9TT1VSQ0UKKyAjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisgI2VuZGlmCisrI2lmbmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2VuZGlmCisgI2lmbmRlZiBfRklMRV9PRkZTRVRfQklUUworICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyAjZW5kaWYKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLW00LXVzZS1wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjODQwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjA0IEBACitBTV9QQVRIX1hNTDIgdXNlcyB4bWwtY29uZmlnIHdoaWNoIHdlIGRpc2FibGUgdGhyb3VnaAorYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MsIHNvIHBvcnQgaXQgdG8gdXNlIHBrZy1jb25maWcgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbGlieG1sLm00IGIvbGlieG1sLm00CitpbmRleCA2OGNkODI0Li41ZmEwYTliIDEwMDY0NAorLS0tIGEvbGlieG1sLm00CisrKysgYi9saWJ4bWwubTQKK0BAIC0xLDE4OCArMSwxMiBAQAorLSMgQ29uZmlndXJlIHBhdGhzIGZvciBMSUJYTUwyCistIyBNaWtlIEhvbW1leSAyMDA0LTA2LTE5CistIyB1c2UgQ1BQRkxBR1MgaW5zdGVhZCBvZiBDRkxBR1MKKy0jIFRvc2hpbyBLdXJhdG9taSAyMDAxLTA0LTIxCistIyBBZGFwdGVkIGZyb206CistIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKy0jIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCistCisgZG5sIEFNX1BBVEhfWE1MMihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCisgZG5sIFRlc3QgZm9yIFhNTCwgYW5kIGRlZmluZSBYTUxfQ1BQRkxBR1MgYW5kIFhNTF9MSUJTCisgZG5sCistQUNfREVGVU4oW0FNX1BBVEhfWE1MMl0sWyAKKy1BQ19BUkdfV0lUSCh4bWwtcHJlZml4LAorLSAgICAgICAgICAgIFsgIC0td2l0aC14bWwtcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIHhtbF9jb25maWdfcHJlZml4PSIiKQorLUFDX0FSR19XSVRIKHhtbC1leGVjLXByZWZpeCwKKy0gICAgICAgICAgICBbICAtLXdpdGgteG1sLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgeG1sX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKy1BQ19BUkdfRU5BQkxFKHhtbHRlc3QsCistICAgICAgICAgICAgICBbICAtLWRpc2FibGUteG1sdGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgTElCWE1MIHByb2dyYW1dLCwKKy0gICAgICAgICAgICAgIGVuYWJsZV94bWx0ZXN0PXllcykKKy0KKy0gIGlmIHRlc3QgeCR4bWxfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCistICAgICB4bWxfY29uZmlnX2FyZ3M9IiR4bWxfY29uZmlnX2FyZ3MiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi94bWwyLWNvbmZpZworLSAgICAgZmkKKy0gIGZpCistICBpZiB0ZXN0IHgkeG1sX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIHhtbF9jb25maWdfYXJncz0iJHhtbF9jb25maWdfYXJncyAtLXByZWZpeD0keG1sX2NvbmZpZ19wcmVmaXgiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX3ByZWZpeC9iaW4veG1sMi1jb25maWcKKy0gICAgIGZpCistICBmaQorLQorLSAgQUNfUEFUSF9QUk9HKFhNTDJfQ09ORklHLCB4bWwyLWNvbmZpZywgbm8pCistICBtaW5feG1sX3ZlcnNpb249aWZlbHNlKFskMV0sICwyLjAuMCxbJDFdKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJ4bWwgLSB2ZXJzaW9uID49ICRtaW5feG1sX3ZlcnNpb24pCistICBub194bWw9IiIKKy0gIGlmIHRlc3QgIiRYTUwyX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICBub194bWw9eWVzCistICBlbHNlCistICAgIFhNTF9DUFBGTEFHUz1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIFhNTF9MSUJTPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLWxpYnNgCistICAgIHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHhtbF9jb25maWdfbWlub3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHhtbF9jb25maWdfbWljcm9fdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIngkZW5hYmxlX3htbHRlc3QiID0gInh5ZXMiIDsgdGhlbgorLSAgICAgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKy0gICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorLSAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICBMSUJTPSIkWE1MX0xJQlMgJExJQlMiCistZG5sCistZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIGxpYnhtbCBpcyBzdWZmaWNpZW50bHkgbmV3LgorLWRubCAoQWxzbyBzYW5pdHkgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHhtbDItY29uZmlnIHRvIHNvbWUgZXh0ZW50KQorLWRubAorLSAgICAgIHJtIC1mIGNvbmYueG1sdGVzdAorLSAgICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistCistaW50IAorLW1haW4oKQorLXsKKy0gIGludCB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uOworLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CistICBjaGFyICp0bXBfdmVyc2lvbjsKKy0KKy0gIHN5c3RlbSgidG91Y2ggY29uZi54bWx0ZXN0Iik7CistCistICAvKiBDYXB0dXJlIHhtbDItY29uZmlnIG91dHB1dCB2aWEgYXV0b2NvbmYvY29uZmlndXJlIHZhcmlhYmxlcyAqLworLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCistICB0bXBfdmVyc2lvbiA9IChjaGFyICopc3RyZHVwKCIkbWluX3htbF92ZXJzaW9uIik7CistICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CistICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmcgZnJvbSB4bWwyLWNvbmZpZ1xuIiwgIiRtaW5feG1sX3ZlcnNpb24iKTsKKy0gICAgIGV4aXQoMSk7CistICAgfQorLSAgIGZyZWUodG1wX3ZlcnNpb24pOworLQorLSAgIC8qIENhcHR1cmUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhZGVyIGZpbGVzICovCistICAgdG1wX3ZlcnNpb24gPSAoY2hhciAqKXN0cmR1cChMSUJYTUxfRE9UVEVEX1ZFUlNJT04pOworLSAgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZ4bWxfbWFqb3JfdmVyc2lvbiwgJnhtbF9taW5vcl92ZXJzaW9uLCAmeG1sX21pY3JvX3ZlcnNpb24pICE9IDMpIHsKKy0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZyBmcm9tIGxpYnhtbCBpbmNsdWRlc1xuIiwgIkxJQlhNTF9ET1RURURfVkVSU0lPTiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistICAgZnJlZSh0bXBfdmVyc2lvbik7CistCistIC8qIENvbXBhcmUgeG1sMi1jb25maWcgb3V0cHV0IHRvIHRoZSBsaWJ4bWwgaGVhZGVycyAqLworLSAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWlub3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWljcm9fdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKy0gICAgeworLSAgICAgIHByaW50ZigiKioqIGxpYnhtbCBoZWFkZXIgZmlsZXMgKHZlcnNpb24gJWQuJWQuJWQpIGRvIG5vdCBtYXRjaFxuIiwKKy0gICAgICAgICB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uKTsKKy0gICAgICBwcmludGYoIioqKiB4bWwyLWNvbmZpZyAodmVyc2lvbiAlZC4lZC4lZClcbiIsCistICAgICAgICAgJHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWlub3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbik7CistICAgICAgcmV0dXJuIDE7CistICAgIH0gCistLyogQ29tcGFyZSB0aGUgaGVhZGVycyB0byB0aGUgbGlicmFyeSB0byBtYWtlIHN1cmUgd2UgbWF0Y2ggKi8KKy0gIC8qIExlc3MgdGhhbiBpZGVhbCAtLSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCByZXR1cm4gdmFsdWUgZmVlZGJhY2ssIAorLSAgICogb25seSBleGl0cyBpZiB0aGVyZSdzIGEgc2VyaW91cyBtaXNtYXRjaCBiZXR3ZWVuIGhlYWRlciBhbmQgbGlicmFyeS4KKy0gICAqLworLSAgICBMSUJYTUxfVEVTVF9WRVJTSU9OOworLQorLSAgICAvKiBUZXN0IHRoYXQgdGhlIGxpYnJhcnkgaXMgZ3JlYXRlciB0aGFuIG91ciBtaW5pbXVtIHZlcnNpb24gKi8KKy0gICAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJgorLSAgICAgICAgKHhtbF9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCistICAgICAgeworLSAgICAgICAgcmV0dXJuIDA7CistICAgICAgIH0KKy0gICAgIGVsc2UKKy0gICAgICB7CistICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIGxpYnhtbCAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCistICAgICAgICAgICAgICAgeG1sX21ham9yX3ZlcnNpb24sIHhtbF9taW5vcl92ZXJzaW9uLCB4bWxfbWljcm9fdmVyc2lvbik7CistICAgICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgbGlieG1sIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKy0gICAgICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworLSAgICAgICAgcHJpbnRmKCIqKiogbGlieG1sIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAueG1sc29mdC5vcmcuXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIHhtbDItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CistICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogb2YgTElCWE1MLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgWE1MMl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiB4bWwyLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CistICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworLSAgICB9CistICByZXR1cm4gMTsKKy19CistXSwsIG5vX3htbD15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorLSAgICAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCistICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICBmaQorLSAgZmkKKytBQ19ERUZVTihbQU1fUEFUSF9YTUwyXSxbCisrICBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyAKKy0gIGlmIHRlc3QgIngkbm9feG1sIiA9IHggOyB0aGVuCistICAgICBBQ19NU0dfUkVTVUxUKHllcyAodmVyc2lvbiAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uLiR4bWxfY29uZmlnX21pbm9yX3ZlcnNpb24uJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbikpCistICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCistICBlbHNlCistICAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgaWYgdGVzdCAiJFhNTDJfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgICAgIGVjaG8gIioqKiBUaGUgeG1sMi1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBMSUJYTUwgY291bGQgbm90IGJlIGZvdW5kIgorLSAgICAgICBlY2hvICIqKiogSWYgbGlieG1sIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKy0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBYTUwyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCistICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8geG1sMi1jb25maWcuIgorLSAgICAgZWxzZQorLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYueG1sdGVzdCA7IHRoZW4KKy0gICAgICAgIDoKKy0gICAgICAgZWxzZQorLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsaWJ4bWwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCistICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJExJQlMgJFhNTF9MSUJTIgorLSAgICAgICAgICBBQ19UUllfTElOSyhbCistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistI2luY2x1ZGUgPHN0ZGlvLmg+CistXSwgICAgICBbIExJQlhNTF9URVNUX1ZFUlNJT047IHJldHVybiAwO10sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKy0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBMSUJYTUwgb3IgZmluZGluZyB0aGUgd3JvbmciCistICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIExJQlhNTC4gSWYgaXQgaXMgbm90IGZpbmRpbmcgTElCWE1MLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKy0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCistICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCistICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKy0gICAgICAgICAgZWNobyAiKioqIgorLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCistICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIgXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKy0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIExJQlhNTCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBMSUJYTUwgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCistICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSB4bWwyLWNvbmZpZyBzY3JpcHQ6ICRYTUwyX0NPTkZJRyIgXSkKKy0gICAgICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgICBmaQorLSAgICAgZmkKKysgIHZlcmRlcD1pZmVsc2UoWyQxXSwgW10sIFtdLCBbPj0gJDFdKQorKyAgUEtHX0NIRUNLX01PRFVMRVMoWE1MLCBbbGlieG1sLTIuMCAkdmVyZGVwXSwgWyQyXSwgWyQzXSkKKyAKKy0gICAgIFhNTF9DUFBGTEFHUz0iIgorLSAgICAgWE1MX0xJQlM9IiIKKy0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistICBmaQorKyAgWE1MX0NQUEZMQUdTPSRYTUxfQ0ZMQUdTCisgICBBQ19TVUJTVChYTUxfQ1BQRkxBR1MpCistICBBQ19TVUJTVChYTUxfTElCUykKKy0gIHJtIC1mIGNvbmYueG1sdGVzdAorIF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNC0wMTkxLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA1YWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNC0wMTkxLWZpeC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDIyIEFwciAyMDE0IDE1OjMwOjU2ICswODAwCitTdWJqZWN0OiBEbyBub3QgZmV0Y2ggZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzCisKK1VubGVzcyBleHBsaWNpdGVseSBhc2tlZCBmb3Igd2hlbiB2YWxpZGF0aW5nIG9yIHJlcGxhY2luZyBlbnRpdGllcword2l0aCB0aGVpciB2YWx1ZS4gUHJvYmxlbSBwb2ludGVkIG91dCBieSBEYW5pZWwgQmVycmFuZ2UgPGJlcnJhbmdlQHJlZGhhdC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1JlZmVyZW5jZTogaHR0cHM6Ly9hY2Nlc3MucmVkaGF0LmNvbS9zZWN1cml0eS9jdmUvQ1ZFLTIwMTQtMDE5MQorCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorLS0tCitkaWZmIC1OYXVyIGxpYnhtbDItMi45LjEtb3JpZy9wYXJzZXIuYyBsaWJ4bWwyLTIuOS4xL3BhcnNlci5jCistLS0gbGlieG1sMi0yLjkuMS1vcmlnL3BhcnNlci5jCTIwMTMtMDQtMTYgMTU6Mzk6MTguMDAwMDAwMDAwICswMjAwCisrKysgbGlieG1sMi0yLjkuMS9wYXJzZXIuYwkyMDE0LTA1LTA3IDEzOjM1OjQ2Ljg4MzY4Nzk0NiArMDIwMAorQEAgLTI1OTUsNiArMjU5NSwyMCBAQAorIAkJICAgIHhtbENoYXJFbmNvZGluZyBlbmM7CisgCisgCQkgICAgLyoKKysJCSAgICAgKiBOb3RlOiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgd2lsbCBub3QgYmUgbG9hZGVkLCBpdCBpcworKwkJICAgICAqIG5vdCByZXF1aXJlZCBmb3IgYSBub24tdmFsaWRhdGluZyBwYXJzZXIsIHVubGVzcyB0aGUKKysJCSAgICAgKiBvcHRpb24gb2YgdmFsaWRhdGluZywgb3Igc3Vic3RpdHV0aW5nIGVudGl0aWVzIHdlcmUKKysJCSAgICAgKiBnaXZlbi4gRG9pbmcgc28gaXMgZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbAorKwkJICAgICAqIG9ubHkgcHJvY2VzcyBkYXRhIGNvbWluZyBmcm9tIHRoZSBkb2N1bWVudCBlbnRpdHkgYnkKKysJCSAgICAgKiBkZWZhdWx0LgorKwkJICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKChlbnRpdHktPmV0eXBlID09IFhNTF9FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRZKSAmJgorKwkJICAgICAgICAoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpID09IDApICYmCisrCQkJKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0RURFZBTElEKSA9PSAwKSAmJgorKwkJCShjdHh0LT52YWxpZGF0ZSA9PSAwKSkKKysJCQlyZXR1cm47CisrCisrCQkgICAgLyoKKyAJCSAgICAgKiBoYW5kbGUgdGhlIGV4dHJhIHNwYWNlcyBhZGRlZCBiZWZvcmUgYW5kIGFmdGVyCisgCQkgICAgICogYy5mLiBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI2FzLVBFCisgCQkgICAgICogdGhpcyBpcyBkb25lIGluZGVwZW5kZW50bHkuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2M4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaApAQCAtMCwwICsxLDMwIEBACitBbGxvdyB1cyB0byBwYXNzIGluIFBZVEhPTl9TSVRFX1BBQ0tBR0VTCisKK1RoZSBweXRob24gYmluYXJ5IHVzZWQgd2hlbiBidWlsZGluZyBmb3IgbmF0aXZlc2RrIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUKK2NvcnJlY3QgcGF0aCBoZXJlIHNvIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGl0IG91cnNlbHZlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlIHRvIDIuOS4yCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04MTMsNyArODEzLDggQEAgZG5sCisgCisgUFlUSE9OX1ZFUlNJT049CisgUFlUSE9OX0lOQ0xVREVTPQorLVBZVEhPTl9TSVRFX1BBQ0tBR0VTPQorKyMgQWxsb3cgdGhpcyB0byBiZSBzZXQgZXh0ZXJuYWxseQorKyNQWVRIT05fU0lURV9QQUNLQUdFUz0KKyBQWVRIT05fVEVTVFM9CisgcHl0aG9uZGlyPQorIGlmIHRlc3QgIiR3aXRoX3B5dGhvbiIgIT0gIm5vIiA7IHRoZW4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2QwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtayBydW50ZXN0cwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVudGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bnRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3YWIyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bnRlc3QucGF0Y2gKQEAgLTAsMCArMSw4MjAgQEAKK0FkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KK1ByaW50IGEgc3RhbmRhcmQgcmVzdWx0IGxpbmUgZm9yIGVhY2ggdGVzdC4KKworU2lnbmVkLW9mZi1ieTogTWloYWVsYSBTZW5kcmVhIDxtaWhhZWxhLnNlbmRyZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtdU5yIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAxNDo1MTo0Mi42MzMzODY0NzcgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDQtMTkgMTQ6NDc6NTEuNTQ0NzIwNTY4ICswMjAwCitAQCAtMjAyLDEwICsyMDIsMTkgQEAKKyAjdGVzdE9PTV9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCisgI3Rlc3RPT01fTERBREQ9ICQoTERBRERTKQorIAorK2luc3RhbGwtcHRlc3Q6CisrCUAoaWYgWyAtZCAubGlicyBdIDsgdGhlbiBjZCAubGliczsgZmk7IFwKKysJaW5zdGFsbCAkKG5vaW5zdF9QUk9HUkFNUykgJChERVNURElSKSkKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3QgJChERVNURElSKQorKwljcCAtciAkKHNyY2RpcikvcmVzdWx0ICQoREVTVERJUikKKysJY3AgLXIgJChzcmNkaXIpL3B5dGhvbiAkKERFU1RESVIpCisrCWNwIE1ha2VmaWxlICQoREVTVERJUikKKysJc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQoREVTVERJUikvTWFrZWZpbGUKKysKKyBydW50ZXN0czoKKyAJWyAtZCB0ZXN0ICAgXSB8fCAkKExOX1MpICQoc3JjZGlyKS90ZXN0ICAgLgorIAlbIC1kIHJlc3VsdCBdIHx8ICQoTE5fUykgJChzcmNkaXIpL3Jlc3VsdCAuCistCSQoQ0hFQ0tFUikgLi9ydW50ZXN0JChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0cmVjdXJzZSQoRVhFRVhUKSAmJiQoQ0hFQ0tFUikgLi90ZXN0YXBpJChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0Y2hhciQoRVhFRVhUKSYmICQoQ0hFQ0tFUikgLi90ZXN0ZGljdCQoRVhFRVhUKSAmJiAkKENIRUNLRVIpIC4vcnVueG1sY29uZiQoRVhFRVhUKQorKwkuL3J1bnRlc3QkKEVYRUVYVCkgOyAuL3Rlc3RyZWN1cnNlJChFWEVFWFQpIDsgLi90ZXN0YXBpJChFWEVFWFQpIDsgLi90ZXN0Y2hhciQoRVhFRVhUKSA7IC4vdGVzdGRpY3QkKEVYRUVYVCkgOyAuL3J1bnhtbGNvbmYkKEVYRUVYVCkKKyAJQChpZiBbICIkKFBZVEhPTl9TVUJESVIpIiAhPSAiIiBdIDsgdGhlbiBjZCBweXRob24gOyBcCisgCSAgICAkKE1BS0UpIHRlc3RzIDsgZmkpCisgCitkaWZmIC11TnIgYS9ydW5zdWl0ZS5jIGIvcnVuc3VpdGUuYworLS0tIGEvcnVuc3VpdGUuYwkyMDEzLTA0LTEyIDE2OjE3OjExLjQ2MjgyMzIzOCArMDIwMAorKysrIGIvcnVuc3VpdGUuYwkyMDEzLTA0LTE3IDE0OjA3OjI0LjM1MjY5MzIxMSArMDIwMAorQEAgLTExNjIsNiArMTE2Miw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnN1aXRlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgI2Vsc2UgLyogIVNDSEVNQVMgKi8KK2RpZmYgLXVOciBhL3J1bnRlc3QuYyBiL3J1bnRlc3QuYworLS0tIGEvcnVudGVzdC5jCTIwMTMtMDQtMTYgMTM6MTk6MTUuMDg3OTk3MjkwICswMjAwCisrKysgYi9ydW50ZXN0LmMJMjAxMy0wNC0xNyAxNDowODoyOS41Mjk5NDk2NTUgKzAyMDAKK0BAIC00Mzg2LDYgKzQzODYsNyBAQAorIAkgICAgZXJyKys7CisgCX0KKyAgICAgfQorKyAgICBwcmludGYoIiVzOiAlc1xuIiwgKGVyciA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIiwgdHN0LT5kZXNjKTsKKyAgICAgcmV0dXJuKGVycik7CisgfQorIAorQEAgLTQ0NTUsNiArNDQ1Niw3IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiBydW50ZXN0XG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS9ydW54bWxjb25mLmMgYi9ydW54bWxjb25mLmMKKy0tLSBhL3J1bnhtbGNvbmYuYwkyMDEzLTA0LTE2IDEyOjUzOjQ5LjkwMDk4Mjk5MCArMDIwMAorKysrIGIvcnVueG1sY29uZi5jCTIwMTMtMDQtMTcgMTQ6MDk6MjEuMTExNzc4MTA0ICswMjAwCitAQCAtNTk1LDYgKzU5NSw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnhtbGNvbmZcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS90ZXN0YXBpLmMgYi90ZXN0YXBpLmMKKy0tLSBhL3Rlc3RhcGkuYwkyMDEzLTA0LTEyIDE2OjE2OjU3Ljc2MzQxNzY1OSArMDIwMAorKysrIGIvdGVzdGFwaS5jCTIwMTMtMDQtMTcgMTQ6MTA6MjguODc2OTI0ODgxICswMjAwCitAQCAtMTI0NSw0OSArMTI0NSw5MSBAQAorIHRlc3RsaWJ4bWwyKHZvaWQpCisgeworICAgICBpbnQgdGVzdF9yZXQgPSAwOworKyAgICBpbnQgcmV0ID0gMDsKKyAKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9IVE1McGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfSFRNTHRyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9TQVgyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfYzE0bigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2NhdGFsb2coKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9jaHZhbGlkKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZGVidWdYTUwoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9kaWN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZW5jb2RpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9lbnRpdGllcygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2hhc2goKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9saXN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfbmFub2Z0cCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X25hbm9odHRwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGF0dGVybigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3JlbGF4bmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9zY2hlbWFzSW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3Rfc2NoZW1hdHJvbigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3RyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF91cmkoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF92YWxpZCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hpbmNsdWRlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sSU8oKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxhdXRvbWF0YSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbGVycm9yKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sbW9kdWxlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVhZGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVnZXhwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sc2F2ZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHNjaGVtYXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzdHJpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWx1bmljb2RlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sd3JpdGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeHBhdGgoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94cGF0aEludGVybmFscygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hwb2ludGVyKCk7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X0hUTUxwYXJzZXIoKSk7CisrICAgIHByaW50ZigiJXM6IEhUTUxwYXJzZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9IVE1MdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogSFRNTHRyZWVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9TQVgyKCkpOworKyAgICBwcmludGYoIiVzOiBTQVgyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfYzE0bigpKTsKKysgICAgcHJpbnRmKCIlczogYzE0blxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2NhdGFsb2coKSk7CisrICAgIHByaW50ZigiJXM6IGNhdGFsb2dcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9jaHZhbGlkKCkpOworKyAgICBwcmludGYoIiVzOiBjaHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGVidWdYTUwoKSk7CisrICAgIHByaW50ZigiJXM6IGRlYnVnWE1MXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGljdCgpKTsKKysgICAgcHJpbnRmKCIlczogZGljdFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VuY29kaW5nKCkpOworKyAgICBwcmludGYoIiVzOiBlbmNvZGluZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VudGl0aWVzKCkpOworKyAgICBwcmludGYoIiVzOiBlbnRpdGllc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2hhc2goKSk7CisrICAgIHByaW50ZigiJXM6IGhhc2hcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9saXN0KCkpOworKyAgICBwcmludGYoIiVzOiBsaXN0XG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfbmFub2Z0cCgpKTsKKysgICAgcHJpbnRmKCIlczogbmFub2Z0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X25hbm9odHRwKCkpOworKyAgICBwcmludGYoIiVzOiBuYW5vaHR0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3BhcnNlcigpKTsKKysgICAgcHJpbnRmKCIlczogcGFyc2VyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCkpOworKyAgICBwcmludGYoIiVzOiBwYXJzZXJJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9wYXR0ZXJuKCkpOworKyAgICBwcmludGYoIiVzOiBwYXR0ZXJuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcmVsYXhuZygpKTsKKysgICAgcHJpbnRmKCIlczogcmVsYXhuZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3NjaGVtYXNJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHNjaGVtYXNJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9zY2hlbWF0cm9uKCkpOworKyAgICBwcmludGYoIiVzOiBzY2hlbWF0cm9uXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogdHJlZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3VyaSgpKTsKKysgICAgcHJpbnRmKCIlczogdXJpXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdmFsaWQoKSk7CisrICAgIHByaW50ZigiJXM6IHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeGluY2x1ZGUoKSk7CisrICAgIHByaW50ZigiJXM6IHhpbmNsdWRlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sSU8oKSk7CisrICAgIHByaW50ZigiJXM6IHhtbElPXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sYXV0b21hdGEoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGF1dG9tYXRhXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sZXJyb3IoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGVycm9yXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sbW9kdWxlKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxtb2R1bGVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxyZWFkZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHJlYWRlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHJlZ2V4cCgpKTsKKysgICAgcHJpbnRmKCIlczogeG1scmVnZXhwXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sc2F2ZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc2F2ZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHNjaGVtYXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXN0eXBlc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHN0cmluZygpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc3RyaW5nXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sdW5pY29kZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sdW5pY29kZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHdyaXRlcigpKTsKKysgICAgcHJpbnRmKCIlczogeG1sd3JpdGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGgoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGhJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoSW50ZXJuYWxzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBvaW50ZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhwb2ludGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAKKyAgICAgcHJpbnRmKCJUb3RhbDogJWQgZnVuY3Rpb25zLCAlZCB0ZXN0cywgJWQgZXJyb3JzXG4iLAorICAgICAgICAgICAgZnVuY3Rpb25fdGVzdHMsIGNhbGxfdGVzdHMsIHRlc3RfcmV0KTsKKysKKysgICAgcHJpbnRmKCIlczogdGVzdGFwaVxuXG4iLCAodGVzdF9yZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4odGVzdF9yZXQpOworIH0KKyAKK2RpZmYgLXVOciBhL3Rlc3RjaGFyLmMgYi90ZXN0Y2hhci5jCistLS0gYS90ZXN0Y2hhci5jCTIwMTMtMDQtMTcgMTA6NTA6MzAuMjUwMTQ3NDE4ICswMjAwCisrKysgYi90ZXN0Y2hhci5jCTIwMTMtMDQtMTggMTY6MTE6MjguNDU1NzMzODAwICswMjAwCitAQCAtMjMsNyArMjMsNyBAQAorIGNoYXIgZG9jdW1lbnQxWzEwMF0gPSAiPGRvYz5YWFhYPC9kb2M+IjsKKyBjaGFyIGRvY3VtZW50MlsxMDBdID0gIjxkb2MgZm9vPSdYWFhYJy8+IjsKKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisrc3RhdGljIGludCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgIGNoYXIgKmRhdGEsIGludCBmb3JiaWQxLCBpbnQgZm9yYmlkMikgeworICAgICBpbnQgaTsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC0zNywzMyArMzcsNDEgQEAKKyAJcmVzID0geG1sUmVhZE1lbW9yeShkb2N1bWVudCwgbGVuLCAidGVzdCIsIE5VTEwsIDApOworIAorIAlpZiAoKGkgPT0gZm9yYmlkMSkgfHwgKGkgPT0gZm9yYmlkMikpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWDogJWNcbiIsCisgCQkgICAgICAgIGksIGkpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCWVsc2UgaWYgKChpID09ICc8JykgfHwgKGkgPT0gJyYnKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbGxlZ2FsIGNoYXIgJWMgZm9yIEJ5dGUgMHglMDJYXG4iLCBpLCBpKTsKKysJCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAJZWxzZSBpZiAoKChpIDwgMHgyMCkgfHwgKGkgPj0gMHg4MCkpICYmCisgCSAgICAoaSAhPSAweDkpICYmIChpICE9IDB4QSkgJiYgKGkgIT0gMHhEKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpICYmIChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgJiYgKHJlcyAhPSBOVUxMKSkgeworIAkgICAgICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAllbHNlIGlmIChyZXMgPT0gTlVMTCkgeworIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIHZhbGlkIGNoYXIgZm9yIEJ5dGUgMHglMDJYIDogJWNcbiIsIGksIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKytzdGF0aWMgaW50IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCAgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgajsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC04MCwxMCArODgsMTIgQEAKKyAKKyAJLyogaWYgZmlyc3QgYml0IG9mIGZpcnN0IGNoYXIgaXMgc2V0LCB0aGVuIHNlY29uZCBiaXQgbXVzdCB0b28gKi8KKyAJaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTkxLDEwICsxMDEsMTIgQEAKKyAJICogYml0cyBtdXN0IGJlIDEwCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaik7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC0xMDIsMTAgKzExNCwxMiBAQAorIAkgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICovCisgCWVsc2UgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHgxRSkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTExMywxMCArMTI3LDEyIEBACisgCSAqIGF0IGxlYXN0IDMgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgMiAhCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4RTApID09IDB4RTApIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweDAwXG4iLAorIAkJCWksIGopOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtMTI1LDExICsxNDEsMTMgQEAKKyAJZWxzZSBpZiAoKGxhc3RFcnJvciAhPSAwKSB8fCAocmVzID09IE5VTEwpKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgZG9jdW1lbnQgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsIGksIGopOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCisgLyoqCitAQCAtMTQxLDkgKzE1OSwxMCBAQAorICAqIENEQVRBIGluIHRleHQgb3IgaW4gYXR0cmlidXRlIHZhbHVlcy4KKyAgKi8KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZXModm9pZCkgeworK3N0YXRpYyBpbnQgdGVzdERvY3VtZW50UmFuZ2VzKHZvaWQpIHsKKyAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworICAgICBjaGFyICpkYXRhOworKyAgICBpbnQgdGVzdF9yZXQgPSAwOworIAorICAgICAvKgorICAgICAgKiBTZXQgdXAgYSBwYXJzaW5nIGNvbnRleHQgdXNpbmcgdGhlIGZpcnN0IGRvY3VtZW50IGFzCitAQCAtMTUyLDcgKzE3MSw3IEBACisgICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgIGlmIChjdHh0ID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnNlciBjb250ZXh0XG4iKTsKKy0JcmV0dXJuOworKwlyZXR1cm4oMSk7CisgICAgIH0KKyAKKyAgICAgcHJpbnRmKCJ0ZXN0aW5nIDEgYnl0ZSBjaGFyIGluIGRvY3VtZW50OiAxIik7CitAQCAtMTYzLDcgKzE4Miw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIC0xLCAtMSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMTcyLDcgKzE5MSw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBlbmQgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyAzLCAtMSwgLTEpOworIAorICAgICBwcmludGYoIiAzIik7CitAQCAtMTgzLDcgKzIwMiw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKK0BAIC0xOTIsNyArMjExLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAxIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDMsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgZG9uZVxuIik7CisgCitAQCAtMjA0LDcgKzIyMyw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMiBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworICAgICBwcmludGYoIiAyIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworQEAgLTIxMyw3ICsyMzIsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDIgYnl0ZSBpbmplY3Rpb24gYXQgZW5kIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgMik7CisgCisgICAgIHByaW50ZigiIDMiKTsKK0BAIC0yMjQsNyArMjQzLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGJlZ2lubmluZyBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisgICAgIHByaW50ZigiIDQiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMjMzLDE0ICsyNTIsMTUgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDIpOworICAgICBwcmludGYoIiBkb25lXG4iKTsKKyAKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI1NSwxOSArMjc1LDI1IEBACisgICAgICAgICBjID0geG1sQ3VycmVudENoYXIoY3R4dCwgJmxlbik7CisgCWlmICgoaSA9PSAwKSB8fCAoaSA+PSAweDgwKSkgeworIAkgICAgLyogd2UgbXVzdCBzZWUgYW4gZXJyb3IgdGhlcmUgKi8KKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQkJcmV0dXJuKDEpOworKwkJfQorIAl9IGVsc2UgaWYgKGkgPT0gMHhEKSB7CistCSAgICBpZiAoKGMgIT0gMHhBKSB8fCAobGVuICE9IDEpKQorKwkgICAgaWYgKChjICE9IDB4QSkgfHwgKGxlbiAhPSAxKSkgeworIAkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY29udmVydCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0gZWxzZSBpZiAoKGMgIT0gaSkgfHwgKGxlbiAhPSAxKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CisgICAgIGludCBpLCBqOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI4NCwxMCArMzEwLDEyIEBACisgCisgCSAgICAvKiBpZiBmaXJzdCBiaXQgb2YgZmlyc3QgY2hhciBpcyBzZXQsIHRoZW4gc2Vjb25kIGJpdCBtdXN0IHRvbyAqLworIAkgICAgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLAorIAkJICAgICAgICAgICAgaSwgaik7CisrCQkJcmV0dXJuKDEpOworKwkJCX0KKyAJICAgIH0KKyAKKyAJICAgIC8qCitAQCAtMjk1LDEwICszMjMsMTIgQEAKKyAJICAgICAqIGJpdHMgbXVzdCBiZSAxMAorIAkgICAgICovCisgCSAgICBlbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYOiAlZFxuIiwKKyAJCSAgICAgICAgICAgIGksIGosIGMpOworKwkJCXJldHVybigxKTsKKysJCQl9CisgCSAgICB9CisgCisgCSAgICAvKgorQEAgLTMwNiwxMCArMzM2LDEyIEBACisgCSAgICAgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweDgwKSAmJiAoKGkgJiAweDFFKSA9PSAwKSkgeworLQkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogJWRcbiIsCisgCQkgICAgICAgICAgICBpLCBqLCBjKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorIAkgICAgLyoKK0BAIC0zMTcsMTAgKzM0OSwxMiBAQAorIAkgICAgICogYXQgbGVhc3QgMyBieXRlcywgYnV0IHdlIGdpdmUgb25seSAyICEKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweEUwKSA9PSAweEUwKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4MDBcbiIsCisgCQkgICAgICAgICAgICBpLCBqKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorICAgICAgICAgICAgIC8qCitAQCAtMzI5LDYgKzM2Myw3IEBACisgCSAgICBlbHNlIGlmICgobGFzdEVycm9yICE9IDApIHx8IChsZW4gIT0gMikpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwgaSwgaik7CisrCQlyZXR1cm4oMSk7CisgCSAgICB9CisgCisgICAgICAgICAgICAgLyoKK0BAIC0zMzgsMTIgKzM3MywxNCBAQAorIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogZXhwZWN0ICVkIGdvdCAlZFxuIiwKKyAJICAgICAgICAgICAgICAgIGksIGosICgoaiAmIDB4M0YpICsgKChpICYgMHgxRikgPDwgNikpLCBjKTsKKysJCXJldHVybigxKTsKKyAJICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGksIGosIGssIEs7CisgICAgIGludCBsZW4sIGM7CisgICAgIHVuc2lnbmVkIGNoYXIgbG93c1s2XSA9IHswLCAweDgwLCAweDgxLCAweEMxLCAweEZGLCAweEJGfTsKK0BAIC0zNjgsMjAgKzQwNSwyNCBAQAorIAkgKiBhdCBsZWFzdCA0IGJ5dGVzLCBidXQgd2UgZ2l2ZSBvbmx5IDMgIQorIAkgKi8KKyAJaWYgKChpICYgMHhGMCkgPT0gMHhGMCkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKKyAJICogVGhlIHNlY29uZCBhbmQgdGhlIHRoaXJkIGJ5dGVzIG11c3Qgc3RhcnQgd2l0aCAxMAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTM5MCwxMCArNDMxLDEyIEBACisgCSAqIHRoZSA2dGggYnl0ZSBvZiBkYXRhWzFdIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweEYpID09IDApICYmICgoaiAmIDB4MjApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEspOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQwMSwxMCArNDQ0LDEyIEBACisgCSAqLworIAllbHNlIGlmICgoKHZhbHVlID4gMHhEN0ZGKSAmJiAodmFsdWUgPDB4RTAwMCkpIHx8CisgCSAgICAgICAgICgodmFsdWUgPiAweEZGRkQpICYmICh2YWx1ZSA8MHgxMDAwMCkpKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciAweCUwNFggZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCXZhbHVlLCBpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTQxNCw2ICs0NTksNyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJICAgIGksIGosIEspOworKwkJcmV0dXJuKDEpOworIAl9CisgCisgCS8qCitAQCAtNDIzLDEzICs0NjksMTUgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLAorICAgICAiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYOiBleHBlY3QgJWQgZ290ICVkXG4iLAorIAkJaSwgaiwgZGF0YVsyXSwgdmFsdWUsIGMpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgaiwgaywgSywgbCwgTDsKKyAgICAgaW50IGxlbiwgYzsKKyAgICAgdW5zaWduZWQgY2hhciBsb3dzWzZdID0gezAsIDB4ODAsIDB4ODEsIDB4QzEsIDB4RkYsIDB4QkZ9OworQEAgLTQ1OCwxMCArNTA2LDEyIEBACisgCSAqIGF0IGxlYXN0IDUgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgNCAhCisgCSAqLworIAlpZiAoKGkgJiAweEY4KSA9PSAweEY4KSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKK0BAIC00NjksMTAgKzUxOSwxMiBAQAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkgfHwKKyAJICAgICAgICAgKChMICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSywgTCk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC00ODEsMTAgKzUzMywxMiBAQAorIAkgKiB0aGUgNiBvciA1dGggYnl0ZSBvZiBqIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweDcpID09IDApICYmICgoaiAmIDB4MzApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQ5MywxMCArNTQ3LDEyIEBACisgCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8MHhFMDAwKSkgfHwKKyAJICAgICAgICAgKCh2YWx1ZSA+IDB4RkZGRCkgJiYgKHZhbHVlIDwweDEwMDAwKSkgfHwKKyAJCSAodmFsdWUgPiAweDEwRkZGRikpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgMHglMDRYIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJdmFsdWUsIGksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtNTA2LDYgKzU2Miw3IEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkgICAgaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAKKyAJLyoKK0BAIC01MTUsMTEgKzU3MiwxMyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlg6IGV4cGVjdCAlZCBnb3QgJWRcbiIsCisgCQlpLCBqLCBkYXRhWzJdLCB2YWx1ZSwgYyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAgICAgfQorICAgICB9CisgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorIC8qKgorQEAgLTUzMCwxMSArNTg5LDEyIEBACisgICogY292ZXIgdGhlIGZ1bGwgcmFuZ2Ugb2YgVVRGLTggY2hhcnMgYWNjZXB0ZWQgYnkgWE1MLTEuMAorICAqLworIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKyAgICAgY2hhciBkYXRhWzVdOworICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGJ1ZjsKKyAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CisrICAgIGludCB0ZXN0X3JldCA9IDA7CisgCisgICAgIG1lbXNldChkYXRhLCAwLCA1KTsKKyAKK0BAIC01NDUsMTcgKzYwNSwxOSBAQAorICAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwYXJzZXIgY29udGV4dFxuIik7CistCXJldHVybjsKKysJcmV0dXJuKDEpOworICAgICB9CisgICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKGRhdGEsIHNpemVvZihkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CisgICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgYnVmZmVyXG4iKTsKKysgICAgICAgIHRlc3RfcmV0ID0gMTsKKyAJZ290byBlcnJvcjsKKyAgICAgfQorICAgICBpbnB1dCA9IHhtbE5ld0lucHV0U3RyZWFtKGN0eHQpOworICAgICBpZiAoaW5wdXQgPT0gTlVMTCkgeworICAgICAgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGJ1Zik7CisrICAgICAgICB0ZXN0X3JldCA9IDE7CisgCWdvdG8gZXJyb3I7CisgICAgIH0KKyAgICAgaW5wdXQtPmZpbGVuYW1lID0gTlVMTDsKK0BAIC01NjcsMjUgKzYyOSwyOCBAQAorIAorICAgICBwcmludGYoInRlc3RpbmcgY2hhciByYW5nZTogMSIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGUxKGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTEoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CistICAgIHRlc3RDaGFyUmFuZ2VCeXRlMihjdHh0LCBkYXRhKTsKKysgICAgdGVzdF9yZXQgKz0gdGVzdENoYXJSYW5nZUJ5dGUyKGN0eHQsIGRhdGEpOworICAgICBwcmludGYoIiAzIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworLSAgICB0ZXN0Q2hhclJhbmdlQnl0ZTMoY3R4dCwgZGF0YSk7CisrICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMyhjdHh0LCBkYXRhKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGU0KGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTQoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIGRvbmVcbiIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKyAKKyBlcnJvcjoKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorIGludCBtYWluKHZvaWQpIHsKKyAKKysgICAgaW50IHJldCA9IDA7CisrCisgICAgIC8qCisgICAgICAqIHRoaXMgaW5pdGlhbGl6ZSB0aGUgbGlicmFyeSBhbmQgY2hlY2sgcG90ZW50aWFsIEFCSSBtaXNtYXRjaGVzCisgICAgICAqIGJldHdlZW4gdGhlIHZlcnNpb24gaXQgd2FzIGNvbXBpbGVkIGZvciBhbmQgdGhlIGFjdHVhbCBzaGFyZWQKK0BAIC02MDIsOCArNjY3LDkgQEAKKyAgICAgLyoKKyAgICAgICogUnVuIHRoZSB0ZXN0cworICAgICAgKi8KKy0gICAgdGVzdENoYXJSYW5nZXMoKTsKKy0gICAgdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHJldCArPSB0ZXN0Q2hhclJhbmdlcygpOworKyAgICByZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHByaW50ZigiJXM6IHRlc3RjaGFyXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworIAorICAgICAvKgorICAgICAgKiBDbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgWE1MIGxpYnJhcnkuCitkaWZmIC11TnIgYS90ZXN0ZGljdC5jIGIvdGVzdGRpY3QuYworLS0tIGEvdGVzdGRpY3QuYwkyMDEzLTA0LTE2IDE1OjA4OjQyLjk3MTE3NzE5MyArMDIwMAorKysrIGIvdGVzdGRpY3QuYwkyMDEzLTA0LTE4IDE1OjU5OjAwLjY5OTQ4MjQzOSArMDIwMAorQEAgLTQ0MCw1ICs0NDAsNiBAQAorICAgICBjbGVhbl9zdHJpbmdzKCk7CisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworKyAgICBwcmludGYoIiVzOiB0ZXN0ZGljdFxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdGxpbWl0cy5jIGIvdGVzdGxpbWl0cy5jCistLS0gYS90ZXN0bGltaXRzLmMJMjAxMy0wNC0xMiAxNjoxNjozNi4xODAzNTQxNzcgKzAyMDAKKysrKyBiL3Rlc3RsaW1pdHMuYwkyMDEzLTA0LTE3IDE0OjAzOjE3LjIwMzA5Mjk4NyArMDIwMAorQEAgLTE2MzAsNSArMTYzMCw2IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiB0ZXN0bGltaXRzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdHJlY3Vyc2UuYyBiL3Rlc3RyZWN1cnNlLmMKKy0tLSBhL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNiAxMzoxOTo0OS4zNjY1MzYyOTUgKzAyMDAKKysrKyBiL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNyAxNDowNjoyNy4zNjcwOTE2MjIgKzAyMDAKK0BAIC04OTIsNiArODkyLDcgQEAKKyAJICAgIGVycisrOworIAl9CisgICAgIH0KKysgICAgcHJpbnRmKCIlczogJXNcbiIsIChlcnIgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIsIHRzdC0+ZGVzYyk7CisgICAgIHJldHVybihlcnIpOworIH0KKyAKK0BAIC05NjEsNSArOTYyLDYgQEAKKyAgICAgeG1sQ2xlYW51cFBhcnNlcigpOworICAgICB4bWxNZW1vcnlEdW1wKCk7CisgCisrICAgIHByaW50ZigiJXM6IHRlc3RyZWN1cnNlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyXzIuOS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTM5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGxpYnhtbDIuaW5jCisKK1NSQ19VUkkgKz0gImh0dHA6Ly93d3cudzMub3JnL1hNTC9UZXN0L3htbHRzMjAwODA4MjcudGFyLmd6O25hbWU9dGVzdHRhciBcCisgICAgICAgICAgICBmaWxlOi8vNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVtsaWJ0YXIubWQ1c3VtXSA9ICI5ZTZhOWFjYTlkMTU1NzM3ODY4YjNkYzVmZDgyZjc4OCIKK1NSQ19VUklbbGlidGFyLnNoYTI1NnN1bV0gPSAiNTE3OGMzMGIxNTFkMDQ0YWVmYjFiMDhiZjU0YzMwMDNhMGFjNTVjNTljODY2NzYzOTk3NTI5ZDYwNzcwZDViYyIKK1NSQ19VUklbdGVzdHRhci5tZDVzdW1dID0gImFlM2QxZWJlMDAwYTM5NzJhZmExMDRjYTdmMGUxYjRhIgorU1JDX1VSSVt0ZXN0dGFyLnNoYTI1NnN1bV0gPSAiOTYxNTE2ODVjZWM5OTdlMWY5ZjMzODdlMzYyNmQ2MWU2Mjg0ZDRkNmU2NmUwZTQ0MGMyMDkyODZjMDNlOWNjNyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwNDM0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTkgQEAKK0RFU0NSSVBUSU9OID0gIlNESyB0eXBlIHRhcmdldCBmb3IgYnVpbGRpbmcgYSBzdGFuZGFsb25lIHRhcmJhbGwgY29udGFpbmluZyBweXRob24sIGNocnBhdGgsIG1ha2UsIGdpdCBhbmQgdGFyLiBUaGUgXAorICAgICAgICAgICAgICAgdGFyYmFsbCBjYW4gYmUgdXNlZCB0byBydW4gYml0YmFrZSBidWlsZHMgb24gc3lzdGVtcyB3aGljaCBkb24ndCBtZWV0IHRoZSB1c3VhbCB2ZXJzaW9uIHJlcXVpcmVtZW50cy4iCitTVU1NQVJZID0gIlN0YW5kYWxvbmUgdGFyYmFsbCBmb3IgcnVubmluZyBidWlsZHMgb24gc3lzdGVtcyB3aXRoIGluYWRlcXVhdGUgc29mdHdhcmUiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAiXAorICAgIG5hdGl2ZXNkay1weXRob24tY29yZSBcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLW1pc2MgXAorICAgIG5hdGl2ZXNkay1weXRob24tZ2l0IFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLXBleHBlY3QgXAorICAgIG5hdGl2ZXNkay1uY3Vyc2VzLXRlcm1pbmZvLWJhc2UgXAorICAgIG5hdGl2ZXNkay1jaHJwYXRoIFwKKyAgICBuYXRpdmVzZGstdGFyIFwKKyAgICBuYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15IFwKKyAgICBuYXRpdmVzZGstZ2l0IFwKKyAgICBuYXRpdmVzZGstZ2l0LXBlcmx0b29scyBcCisgICAgbmF0aXZlc2RrLXBpZ3ogXAorICAgIG5hdGl2ZXNkay1tYWtlIFwKKyAgICBuYXRpdmVzZGstd2dldCBcCisgICAgbmF0aXZlc2RrLWNhLWNlcnRpZmljYXRlcyBcCisgICAgIgorCitTREtfUEFDS0FHRV9BUkNIUyA9KyAiYnVpbGR0b29scy1kdW1teS0ke1NES1BLR1NVRkZJWH0iCisKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSR7RElTVFJPX1ZFUlNJT059IgorCitTREtfVElUTEUgPSAiQnVpbGQgdG9vbHMiCisKK1JERVBFTkRTID0gIiR7VE9PTENIQUlOX0hPU1RfVEFTS30iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitpbmhlcml0IG1ldGEKK2luaGVyaXQgcG9wdWxhdGVfc2RrCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCisKK2NyZWF0ZV9zZGtfZmlsZXNfYXBwZW5kICgpIHsKKwlybSAtZiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctKgorCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0qCisJcm0gLWYgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tKgorCisJIyBHZW5lcmF0ZSBuZXcgKG1pbmkpIHNkay1lbnZpcm9ubWVudC1zZXR1cCBmaWxlCisJc2NyaXB0PSR7MTotJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSR7U0RLX1NZU319CisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQQVRIPSR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9OiRQQVRIJyA+PiAkc2NyaXB0CisJIyBJbiBvcmRlciBmb3IgdGhlIHNlbGYtZXh0cmFjdGlvbiBzY3JpcHQgdG8gY29ycmVjdGx5IGV4dHJhY3QgYW5kIHNldCB1cCB0aGluZ3MsCisJIyB3ZSBuZWVkIGEgJ09FQ09SRV9OQVRJVkVfU1lTUk9PVD14eHgnIGxpbmUgaW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorCSMgSG93ZXZlciwgYnVpbGR0b29scy10YXJiYWxsIGlzIGluaGVyZW50bHkgYSB0b29sIHNldCBpbnN0ZWFkIG9mIGEgZnVsbHkgZnVuY3Rpb25hbCBTREssCisJIyBzbyBpbnN0ZWFkIG9mIGV4cG9ydGluZyB0aGUgdmFyaWFibGUsIHdlIHVzZSBhIGNvbW1lbnQgaGVyZS4KKwllY2hvICcjT0VDT1JFX05BVElWRV9TWVNST09UPSIke1NES1BBVEhOQVRJVkV9IicgPj4gJHNjcmlwdAorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtTREtfU1lTfQorCisJZWNobyAnZXhwb3J0IEdJVF9TU0xfQ0FJTkZPPSIke1NES1BBVEhOQVRJVkV9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCInID4+JHNjcmlwdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LWV4dHNkay5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC1leHRzZGsuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllNTk2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC1leHRzZGsuYmIKQEAgLTAsMCArMSwxMiBAQAorIyBtZXRhLWVudmlyb25tZW50IGZvciBleHRlbnNpYmxlIFNESworCityZXF1aXJlIG1ldGEtZW52aXJvbm1lbnQuYmIKKworUE4gPSAibWV0YS1lbnZpcm9ubWVudC1leHRzZGstJHtNQUNISU5FfSIKKworY3JlYXRlX3Nka19maWxlc19hcHBlbmQoKSB7CisJbG9jYWwgc3lzcm9vdD0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSksIGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKSl9CisJbG9jYWwgc2RrcGF0aG5hdGl2ZT0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfTkFUSVZFJyxUcnVlKSwgZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpKX0KKworCXRvb2xjaGFpbl9jcmVhdGVfc2RrX2Vudl9zY3JpcHQgJycgJycgJHN5c3Jvb3QgJycgJHtiaW5kaXJfbmF0aXZlfSAke3ByZWZpeF9uYXRpdmV9ICRzZGtwYXRobmF0aXZlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkNDVmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYgpAQCAtMCwwICsxLDc1IEBACitTVU1NQVJZID0gIlBhY2thZ2Ugb2YgZW52aXJvbm1lbnQgZmlsZXMgZm9yIFNESyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOCIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK01PRElGWVRPUyA9ICIwIgorCitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCitUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFX2FwcGVuZCA9ICIgemxpYiIKKworU0RLX0RJUiA9ICIke1dPUktESVJ9L3NkayIKK1NES19PVVRQVVQgPSAiJHtTREtfRElSfS9pbWFnZSIKK1NES1RBUkdFVFNZU1JPT1QgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK2RvX2dlbmVyYXRlX2NvbnRlbnRbY2xlYW5kaXJzXSA9ICIke1NES19PVVRQVVR9IgorZG9fZ2VuZXJhdGVfY29udGVudFtkaXJzXSA9ICIke1NES19PVVRQVVR9LyR7U0RLUEFUSH0iCitweXRob24gZG9fZ2VuZXJhdGVfY29udGVudCgpIHsKKyAgICAjIEhhbmRsZSBtdWx0aWxpYnMgaW4gdGhlIFNESyBlbnZpcm9ubWVudCwgc2l0ZWNvbmZpZywgZXRjIGZpbGVzLi4uCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAjIG1ha2Ugc3VyZSB3ZSBvbmx5IHVzZSB0aGUgV09SS0RJUiB2YWx1ZSBmcm9tICdkJywgb3IgaXQgY2FuIGNoYW5nZQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignV09SS0RJUicsIFRydWUpKQorCisgICAgIyBtYWtlIHN1cmUgd2Ugb25seSB1c2UgdGhlIFNES1RBUkdFVFNZU1JPT1QgdmFsdWUgZnJvbSAnZCcKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgZC5nZXRWYXIoJ1NES1RBUkdFVFNZU1JPT1QnLCBUcnVlKSkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdsaWJkaXInLCBkLmdldFZhcigndGFyZ2V0X2xpYmRpcicsIEZhbHNlKSkKKworICAgICMgUHJvY2VzcyBERUZBVUxUVFVORQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY3JlYXRlX3Nka19maWxlcyIsIGxvY2FsZGF0YSkKKworICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICAjIExvYWQgb3ZlcnJpZGVzIGZyb20gJ2QnIHRvIGF2b2lkIGhhdmluZyB0byByZXNldCB0aGUgdmFsdWUuLi4KKyAgICAgICAgb3ZlcnJpZGVzID0gZC5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgbG9jYWxkYXRhKQorfQorYWRkdGFzayBnZW5lcmF0ZV9jb250ZW50IGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKKworY3JlYXRlX3Nka19maWxlcygpIHsKKwkjIFNldHVwIHNpdGUgZmlsZSBmb3IgZXh0ZXJuYWwgdXNlCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfc2l0ZWNvbmZpZyAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfZW52X3NjcmlwdCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJIyBBZGQgdmVyc2lvbiBpbmZvcm1hdGlvbgorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke1NES1BBVEh9CisgICAgaW5zdGFsbCAtbSAwNjQ0IC10ICR7RH0vJHtTREtQQVRIfSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vKgorfQorCitQTiA9ICJtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0iCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59PSAiIFwKKyAgICAke1NES1BBVEh9LyogXAorICAgICIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWlkZS1zdXBwb3J0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWlkZS1zdXBwb3J0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOTI5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJNZXRhIHBhY2thZ2UgZm9yIGVuc3VyaW5nIHRoZSBidWlsZCBkaXJlY3RvcnkgY29udGFpbnMgYWxsIGFwcHJvcHJpYXRlIHRvb2xjaGFpbiBwYWNrYWdlcyBmb3IgdXNpbmcgYW4gSURFIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmMgZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSB1bmZzMy1uYXRpdmUiCitQUiA9ICJyMyIKKworaW5oZXJpdCBtZXRhIHRvb2xjaGFpbi1zY3JpcHRzCisKK2RvX3BvcHVsYXRlX2lkZV9zdXBwb3J0ICgpIHsKKyAgdG9vbGNoYWluX2NyZWF0ZV90cmVlX2Vudl9zY3JpcHQKK30KKworZG9fcG9wdWxhdGVfaWRlX3N1cHBvcnRbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgcG9wdWxhdGVfaWRlX3N1cHBvcnQgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtdG9vbGNoYWluLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWZkODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtdG9vbGNoYWluLmJiCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJNZXRhIHBhY2thZ2UgZm9yIGJ1aWxkaW5nIGEgaW5zdGFsbGFibGUgdG9vbGNoYWluIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInI3IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworaW5oZXJpdCBwb3B1bGF0ZV9zZGsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTcxYzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiRHVtbXkgcGFja2FnZSB3aGljaCBlbnN1cmVzIHBlcmwgaXMgZXhjbHVkZWQgZnJvbSBidWlsZHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworIyBQdXQgaXQgc29tZXdoZXJlIHNlcGFyYXRlIHRvIGVuc3VyZSBpdCdzIG5ldmVyIHVzZWQgZXhjZXB0IHdoZW4gd2Ugd2FudCBpdAorUEFDS0FHRV9BUkNIID0gImJ1aWxkdG9vbHMtZHVtbXktJHtTREtQS0dTVUZGSVh9IgorCitQRVJMUEFDS0FHRVMgPSAibmF0aXZlc2RrLXBlcmwgXAorICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1wZXJsLW1vZHVsZS1maWxlLXBhdGgiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGQuYXBwZW5kVmFyKCdSUFJPVklERVNfJHtQTn0nLCAnJHtQRVJMUEFDS0FHRVN9JykKKyAgICBkLmFwcGVuZFZhcignUkNPTkZMSUNUU18ke1BOfScsICcke1BFUkxQQUNLQUdFU30nKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0NmI0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlJlYnVpbGRzIHRoZSBwYWNrYWdlIGluZGV4IgorTElDRU5TRSA9ICJNSVQiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitQQUNLQUdFUyA9ICIiCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKK2RvX3BhY2thZ2VfaW5kZXhbbm9zdGFtcF0gPSAiMSIKK2RvX3BhY2thZ2VfaW5kZXhbZGVwZW5kc10gKz0gIiR7UEFDS0FHRUlOREVYREVQU30iCisKK3B5dGhvbiBkb19wYWNrYWdlX2luZGV4KCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBnZW5lcmF0ZV9pbmRleF9maWxlcworICAgIGdlbmVyYXRlX2luZGV4X2ZpbGVzKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VfaW5kZXggYmVmb3JlIGRvX2J1aWxkCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZjc5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAibGliYyBhbmQgcGF0Y2hlbGYgdGFyYmFsbCBmb3IgdXNlIHdpdGggdW5pbmF0aXZlLmJiY2xhc3MiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPSAiIgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID0gIlwKKyAgICBuYXRpdmVzZGstZ2xpYmMgXAorICAgIG5hdGl2ZXNkay1wYXRjaGVsZiBcCisgICAgIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtCVUlMRF9BUkNIfS1uYXRpdmVzZGstbGliYyIKKworUkRFUEVORFMgPSAiJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK2luaGVyaXQgbWV0YQoraW5oZXJpdCBwb3B1bGF0ZV9zZGsKKworZGVsdGFzayBpbnN0YWxsCitkZWx0YXNrIHBhY2thZ2UKK2RlbHRhc2sgcGFja2FnZWRhdGEKKworU0RLX0RFUEVORFMgKz0gInBhdGNoZWxmLW5hdGl2ZSIKKworU0RLX1BBQ0tBR0lOR19GVU5DID0gIiIKKworZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCisKKwkjIFJlcGxhY2UgdGhlICMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIHdpdGggdGhlIGNvcnJlY3QgcGF0dGVybi4KKwkjIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycgYW5kICcuJyBpbiB0aGUgU0RLUEFUSAorCWVzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9IHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisJc2VkIC1pIC1lICJzOiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjOiRlc2NhcGVkX3Nka3BhdGg6IiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vcmVsb2NhdGVfc2RrLnB5Cit9CisKKworZmFrZXJvb3QgdGFyX3NkaygpIHsKKwlta2RpciAtcCAke1NES19ERVBMT1l9CisJY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisJbXYgc3lzcm9vdHMvJHtTREtfU1lTfSAuLyR7QlVJTERfU1lTfQorCXJtIHN5c3Jvb3RzIC1yZgorCXBhdGNoZWxmIC0tc2V0LWludGVycHJldGVyICR7QCcnLmpvaW4oJ2EnIGZvciBuIGluIHhyYW5nZSgxMDI0KSl9IC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYKKwltdiAuLyR7QlVJTERfU1lTfS91c3IvYmluL3BhdGNoZWxmIC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYtdW5pbmF0aXZlCisJdGFyICR7U0RLVEFST1BUU30gLWMgLWogLS1maWxlPSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MiAuCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZSBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvY29uZmlnLmNhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTIxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZQpAQCAtMCwwICsxLDQgQEAKKyMhIC9iaW4vc2gKKworY2ZfY3ZfZnVuY19uYW5vc2xlZXA9eWVzCitjZl9jdl9mdW5jX21rc3RlbXA9eWVzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L3RpYy1oYW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS90aWMtaGFuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE4OWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS90aWMtaGFuZy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKyd0aWMnIG9mIHNvbWUgbGludXggZGlzdHJpYnV0aW9ucyAoZS5nLiBmZWRvcmEgMTEpIGhhbmcgaW4gYW4gaW5maW5pdGUKK2xvb3Agd2hlbiBwcm9jZXNzaW5nIHRoZSBvcmlnaW5hbCBmaWxlLgorCitJbmRleDogbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuY3Vyc2VzLTUuNy5vcmlnL21pc2MvdGVybWluZm8uc3JjCisrKysgbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKK0BAIC0zNzA2LDEyICszNzA2LDExIEBAIGtvbnNvbGUteGYzeHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXkKKyAjIFRoZSB2YWx1ZSBmb3Iga2JzIHJlZmxlY3RzIGxvY2FsIGN1c3RvbWl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHNldHRpbmdzIHVzZWQKKyAjIGZvciBYRnJlZTg2IHh0ZXJtLgorIGtvbnNvbGUteGY0eHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb3IgWEZyZWU4NiA0LnggeHRlcm0sCistCWtlbmQ9XEVPRiwga2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUrcGNma2V5cywKKy0JdXNlPWtvbnNvbGUtdnQxMDAsCistIyBLb25zb2xlIGRvZXMgbm90IGltcGxlbWVudCBzaGlmdGVkIGN1cnNvci1rZXlzLgorLWtvbnNvbGUrcGNma2V5c3xrb25zb2xlIHN1YnNldCBvZiB4dGVybStwY2ZrZXlzLAorLQlrTEZUQCwga1JJVEAsIGtjYnQ9XEVbWiwga2luZEAsIGtyaUAsIGtETkAsIGtVUEAsIHVzZT14dGVybStwY2MyLAorLQl1c2U9eHRlcm0rcGNmMCwKKysJa2VuZD1cRU9GLCBrZjE9XEVPUCwga2YxMz1cRU8yUCwga2YxND1cRU8yUSwga2YxNT1cRU8yUiwKKysJa2YxNj1cRU8yUywga2YxNz1cRVsxNTsyfiwga2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwKKysJa2YyPVxFT1EsIGtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisrCWtmMjM9XEVbMjM7Mn4sIGtmMjQ9XEVbMjQ7Mn4sIGtmMz1cRU9SLCBrZjQ9XEVPUywKKysJa2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUtdnQxMDAsCisgIyBLREUncyAidnQxMDAiIGtleWJvYXJkIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gYW55IHRlcm1pbmFsIHRoYXQgREVDIG1hZGUsIGJ1dAorICMgaXQgaXMgc3RpbGwgdXNlZnVsIGZvciBkZXJpdmluZyB0aGUgb3RoZXIgZW50cmllcy4KKyBrb25zb2xlLXZ0MTAwfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHZ0MTAwIChzaWMpIGtleWJvYXJkLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkODBlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy5pbmMKQEAgLTAsMCArMSwzMDYgQEAKK1NVTU1BUlkgPSAiVGhlIE5ldyBDdXJzZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlNWcjQgYW5kIFhTSS1DdXJzZXMgY29tcGF0aWJsZSBjdXJzZXMgbGlicmFyeSBhbmQgdGVybWluZm8gdG9vbHMgaW5jbHVkaW5nIHRpYywgaW5mb2NtcCwgY2FwdG9pbmZvLiBTdXBwb3J0cyBjb2xvciwgbXVsdGlwbGUgaGlnaGxpZ2h0cywgZm9ybXMtZHJhd2luZyBjaGFyYWN0ZXJzLCBhbmQgYXV0b21hdGljIHJlY29nbml0aW9uIG9mIGtleXBhZCBhbmQgZnVuY3Rpb24ta2V5IHNlcXVlbmNlcy4gRXh0ZW5zaW9ucyBpbmNsdWRlIHJlc2l6YWJsZSB3aW5kb3dzIGFuZCBtb3VzZSBzdXBwb3J0IG9uIGJvdGggeHRlcm0gYW5kIExpbnV4IGNvbnNvbGUgdXNpbmcgdGhlIGdwbSBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9uY3Vyc2VzL25jdXJzZXMuaHRtbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbmN1cnNlcy9iYXNlL3ZlcnNpb24uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT1jYmMxODBhOGM0NGNhNjQyZTk3YzM1NDUyZmFiNWY2NiIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibmN1cnNlcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitJTkNfUFIgPSAicjE1IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L25jdXJzZXMtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgbXVsdGlsaWJfaGVhZGVyIHBrZ2NvbmZpZworCisjIFVwc3RyZWFtIGhhcyB1c2VmdWwgcGF0Y2hlcyBhdCB0aW1lcyBhdCBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC8ke0JQTn0vY3VycmVudC8ke0JQfS0ke1JFVklTSU9OfS50Z3oiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiLUkgbTQiCitDT05GSUdfU0lURSA9KyAiJHtXT1JLRElSfS9jb25maWcuY2FjaGUiCisKKyMgV2hldGhlciB0byBlbmFibGUgc2VwYXJhdGUgd2lkZWMgbGlicmFyaWVzOyBtdXN0IGJlICd0cnVlJyBvciAnZmFsc2UnCisjCisjIFRPRE86IHJlbW92ZSB0aGlzIHZhcmlhYmxlIHdoZW4gd2lkZWMgaXMgc3VwcG9ydGVkIGluIGV2ZXJ5IHNldHVwPworRU5BQkxFX1dJREVDID89ICJ0cnVlIgorCisjIF9HTlVfU09VUkNFIGlzIHJlcXVpcmVkIGZvciB3aWRlYyBzdHVmZiBhbmQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseQorIyBmb3IgdGFyZ2V0IG9iamVjdHMuICBCdXQgaXQgbXVzdCBiZSBzZXQgbWFudWFsbHkgZm9yIG5hdGl2ZSBhbmQgc2RrCisjIGJ1aWxkcy4KK0JVSUxEX0NQUEZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorCisjIG5hdGl2ZXMgZG9uJ3QgZ2VuZXJhbGx5IGxvb2sgaW4gYmFzZV9saWJkaXIKK2Jhc2VfbGliZGlyX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0iCisKKyMgRGlzcGxheSBjb3JydXB0aW9uIG9jY3VycyBvbiA2NCBiaXQgaG9zdHMgd2l0aG91dCB0aGVzZSBzZXR0aW5ncworIyBUaGlzIHdhcyBkZXJyaXZlZCBmcm9tIHRoZSB1cHN0cmVhbSBkZWJpYW4gbmN1cnNlcyB3aGljaCB1c2VzCisjIHRoZXNlIHNldHRpbmdzIGZvciAzMiBhbmQgNjQgYml0IGhvc3RzLgorRVhDT05GSUdfQVJHUyA9ICIiCitFWENPTkZJR19BUkdTX2NsYXNzLW5hdGl2ZSA9ICIgXAorCQktLWRpc2FibGUtbHA2NCBcCisJCS0td2l0aC1jaHR5cGU9J2xvbmcnIFwKKwkJLS13aXRoLW1tYXNrLXQ9J2xvbmcnIgorRVhDT05GSUdfQVJHU19jbGFzcy1uYXRpdmVzZGsgPSAiIFwKKwkJLS1kaXNhYmxlLWxwNjQgXAorCQktLXdpdGgtY2h0eXBlPSdsb25nJyBcCisJCS0td2l0aC1tbWFzay10PSdsb25nJyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tbGliLioiCisKKyMgRmFsbCBiYWNrIHRvIHRoZSBob3N0IHRlcm1jYXAgLyB0ZXJtaW5mbyBmb3IgLW5hdGl2ZXNkayBhbmQgLW5hdGl2ZQorIyBUaGUgcmVhbGl0eSBpcyBhIHdvcmsgYXJvdW5kIGZvciBzdHJhbmdlIHByb2JsZW1zIHdpdGggdGhpbmdzIGxpa2UKKyMgImJpdGJha2UgLWMgbWVudWNvbmZpZyBidXN5Ym94IiB3aGVyZSBpdCBjYW5ub3QgZmluZCB0aGUgdGVybWluZm8KKyMgYmVjYXVzZSB0aGUgc3N0YXRlIGhhZCBhIGhhcmQgY29kZWQgc2VhcmNoIHBhdGguICBVbnRpbCB0aGlzIGlzIGZpeGVkCisjIGFub3RoZXIgd2F5IHRoaXMgaXMgZGVlbWVkIGdvb2QgZW5vdWdoLgorRVhfVEVSTUNBUCA9ICIiCitFWF9URVJNQ0FQX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwIgorRVhfVEVSTUNBUF9jbGFzcy1uYXRpdmVzZGsgPSAiOi9ldGMvdGVybWNhcDovdXNyL3NoYXJlL21pc2MvdGVybWNhcCIKK0VYX1RFUk1JTkZPID0gIiIKK0VYX1RFUk1JTkZPX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvIgorRVhfVEVSTUlORk9fY2xhc3MtbmF0aXZlc2RrID0gIjovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8iCisKKyMgSGVscGVyIGZ1bmN0aW9uIGZvciBkb19jb25maWd1cmUgdG8gYWxsb3cgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMKKyMgJDEgdGhlIGRpcmVjdG9yeSB0byBydW4gY29uZmlndXJlIGluCisjICRAIHRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byBjb25maWd1cmUKK25jdXJzZXNfY29uZmlndXJlKCkgeworCW1rZGlyIC1wICQxCisJY2QgJDEKKwlzaGlmdAorCW9lX3J1bmNvbmYgXAorCSAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisJICAgICAgICAtLXdpdGhvdXQtZGVidWcgXAorCSAgICAgICAgLS13aXRob3V0LWFkYSBcCisJICAgICAgICAtLXdpdGhvdXQtZ3BtIFwKKwkgICAgICAgIC0tZW5hYmxlLWhhcmQtdGFicyBcCisJICAgICAgICAtLWVuYWJsZS14bWMtZ2xpdGNoIFwKKwkgICAgICAgIC0tZW5hYmxlLWNvbG9yZmdiZyBcCisJICAgICAgICAtLXdpdGgtdGVybXBhdGg9JyR7c3lzY29uZmRpcn0vdGVybWNhcDoke2RhdGFkaXJ9L21pc2MvdGVybWNhcCR7RVhfVEVSTUNBUH0nIFwKKwkgICAgICAgIC0td2l0aC10ZXJtaW5mby1kaXJzPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOiR7ZGF0YWRpcn0vdGVybWluZm8ke0VYX1RFUk1JTkZPfScgXAorCSAgICAgICAgLS13aXRoLXNoYXJlZCBcCisJICAgICAgICAtLWRpc2FibGUtYmlnLWNvcmUgXAorCSAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gXAorCSAgICAgICAgLS13aXRoLXRpY2xpYiBcCisJICAgICAgICAtLXdpdGgtdGVybWxpYj10aW5mbyBcCisJICAgICAgICAtLWVuYWJsZS1zaWd3aW5jaCBcCisJICAgICAgICAtLWVuYWJsZS1wYy1maWxlcyBcCisJICAgICAgICAtLWRpc2FibGUtcnBhdGgtaGFjayBcCisJCSR7RVhDT05GSUdfQVJHU30gXAorCSAgICAgICAgLS13aXRoLW1hbnBhZ2UtZm9ybWF0PW5vcm1hbCBcCisJICAgICAgICAiJEAiIHx8IHJldHVybiAxCisJY2QgLi4KK30KKworIyBPdmVycmlkZSB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgYXV0b3Rvb2xzIGNsYXNzOyBuY3Vyc2VzIHJlcXVpcmVzIGEKKyMgcGF0Y2hlZCBhdXRvY29uZjIxMyB0byBnZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdC4gVGhpcyBhdXRvY29uZgorIyBpcyBub3QgYXZhaWxhYmxlIHNvIHRoYXQgdGhlIHNoaXBwZWQgc2NyaXB0IHdpbGwgYmUgdXNlZC4KK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgIyBjaGVjayBkb2VzIG5vdCB3b3JrIHdpdGggY3Jvc3MtY29tcGlsaW5nIGFuZCBpcyBnZW5lcmFsbHkKKyAgICAgICAgIyBicm9rZW4gYmVjYXVzZSBpdCByZXF1aXJlcyBzdGRpbiB0byBiZSBwb2xsYWJsZSAod2hpY2ggaXMKKyAgICAgICAgIyBub3QgdGhlIGNhc2UgZm9yIC9kZXYvbnVsbCByZWRpcmVjdGlvbnMpCisgICAgICAgIGV4cG9ydCBjZl9jdl93b3JraW5nX3BvbGw9eWVzCisJI1JlbW92ZSAke2luY2x1ZGVkaXJ9IGZyb20gQ1BQRkxBR1MsIG5lZWQgZm9yIGNyb3NzIGNvbXBpbGUKKwlzZWQgLWkgJ3MjLUkke2NmX2luY2x1ZGVkaXJ9IyNnJyAke1N9L2NvbmZpZ3VyZSB8fCBkaWUgInNlZCBDUFBGTEFHUyIKKworCSMgVGhlIC0tZW5hYmxlLXBjLWZpbGVzIHJlcXVpcmVzIFBLR19DT05GSUdfTElCRElSIGV4aXN0ZWQKKwlta2RpciAtcCAke1BLR19DT05GSUdfTElCRElSfQorCSggY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICkKKwluY3Vyc2VzX2NvbmZpZ3VyZSAibmFycm93YyIgfHwgXAorCQlyZXR1cm4gMQorCSEgJHtFTkFCTEVfV0lERUN9IHx8IFwKKwkJbmN1cnNlc19jb25maWd1cmUgIndpZGVjIiAiLS1lbmFibGUtd2lkZWMiICItLXdpdGhvdXQtcHJvZ3MiCisKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djIGxpYnMKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djL3Byb2dzCisKKyAgICAgICAgISAke0VOQUJMRV9XSURFQ30gfHwgXAorICAgICAgICAgICAgb2VfcnVubWFrZSAtQyB3aWRlYyBsaWJzCit9CisKKyMgc2V0IG9mIGV4cGVjdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gbmFycm93YyBhbmQgd2lkZWMgaGVhZGVyCisjCisjIFRPRE86IHRoZSBOQ1VSU0VTX0NIX1QgZGlmZmVyZW5jZSBjYW4gY2F1c2UgcmVhbCBwcm9ibGVtcyA6KAorX3VuaWZkZWZfY2xlYW51cCA9ICIgXAorICAtZSAnXCEvXCogXCRJZDogY3Vyc2VzLndpZGUsdiEsXCEvXCogXCRJZDogY3Vyc2VzLnRhaWwsdiFkJyBcCisgIC1lICcvXiNkZWZpbmUgTkNVUlNFU19DSF9UIC9kJyBcCisgIC1lICcvXiNpbmNsdWRlIDx3Y2hhci5oPi9kJyBcCisgIC1lICdcIV4vXCogLiogXCovIWQnIFwKKyIKKworZG9fdGVzdFtkZXBlbmRzXSA9ICJ1bmlmZGVmLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fdGVzdFtkaXJzXSA9ICIke1N9IgorZG9fdGVzdCgpIHsKKyAgICAgICAgJHtFTkFCTEVfV0lERUN9IHx8IHJldHVybiAwCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgbmFycm93IGFuZCB3aWRlYyBoZWFkZXIgYXJlIGNvbXBhdGlibGUKKyAgICAgICAgIyBhbmQgZGlmZmVyIG9ubHkgaW4gbWlub3IgZGV0YWlscy4KKyAgICAgICAgdW5pZmRlZiAtayBuYXJyb3djL2luY2x1ZGUvY3Vyc2VzLmggfCBcCisgICAgICAgICAgICBzZWQgJHtfdW5pZmRlZl9jbGVhbnVwfSA+IGN1cnNlcy1uYXJyb3djLmgKKyAgICAgICAgdW5pZmRlZiAtayB3aWRlYy9pbmNsdWRlL2N1cnNlcy5oIHwgXAorICAgICAgICAgICAgc2VkICR7X3VuaWZkZWZfY2xlYW51cH0gPiBjdXJzZXMtd2lkZWMuaAorCisgICAgICAgIGRpZmYgY3Vyc2VzLW5hcnJvd2MuaCBjdXJzZXMtd2lkZWMuaAorfQorCisjIFNwbGl0IG9yaWdpbmFsIF9pbnN0YWxsX29wdHMgdG8gdHdvIHBhcnRzLgorIyBPbmUgaXMgdGhlIG9wdGlvbnMgdG8gaW5zdGFsbCBjb250ZW50cywgdGhlIG90aGVyIGlzIHRoZSBwYXJhbWV0ZXJzIFwKKyMgd2hlbiBydW5uaW5nIGNvbW1hbmQgIm1ha2UgaW5zdGFsbCIKK19pbnN0YWxsX29wdHMgPSAiXAorICBpbnN0YWxsLmxpYnMgaW5zdGFsbC5pbmNsdWRlcyBpbnN0YWxsLm1hbiBcCisiCitfaW5zdGFsbF9jZmdzID0gIlwKKyAgREVTVERJUj0nJHtEfScgXAorICBQS0dfQ09ORklHX0xJQkRJUj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZycgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICAjIE9yZGVyIG9mIGluc3RhbGxhdGlvbiBpcyBpbXBvcnRhbnQ7IHdpZGVjIGluc3RhbGxzIGEgJ2N1cnNlcy5oJworICAgICAgICAjIGhlYWRlciB3aXRoIG1vcmUgZGVmaW5pdGlvbnMgYW5kIG11c3QgYmUgaW5zdGFsbGVkIGxhc3QgaGVuY2UuCisgICAgICAgICMgQ29tcGF0aWJpbGl0eSBvZiB0aGVzZSBoZWFkZXJzIHdpbGwgYmUgY2hlY2tlZCBpbiAnZG9fdGVzdCgpJy4KKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5wcm9ncworCisgICAgICAgICMgVGhlIGluc3RhbGwuZGF0YSBzaG91bGQgcnVuIGFmdGVyIGluc3RhbGwubGlicywgb3RoZXJ3aXNlCisgICAgICAgICMgdGhlcmUgd291bGQgYmUgYSByYWNlIGlzc3VlIGluIGEgdmVyeSBjcml0aWNhbCBjb25kaXRvbiwgc2luY2UKKyAgICAgICAgIyB0aWMgd2lsbCBiZSBydW4gYnkgaW5zdGFsbC5kYXRhLCBhbmQgdGljIG5lZWRzIGxpYnRpbmZvLnNvCisgICAgICAgICMgd2hpY2ggd291bGQgYmUgcmVnZW5lcmF0ZWQgYnkgaW5zdGFsbC5saWJzLgorICAgICAgICBvZV9ydW5tYWtlIC1DIG5hcnJvd2MgJHtfaW5zdGFsbF9jZmdzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5kYXRhCisKKworICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICBvZV9ydW5tYWtlIC1DIHdpZGVjICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfQorCisgICAgICAgIGNkIG5hcnJvd2MKKworICAgICAgICAjIGluY2x1ZGUgc29tZSBiYXNpYyB0ZXJtaW5mbyBmaWxlcworICAgICAgICAjIHN0b2xlbiA7KSBmcm9tIGdlbnRvbyBhbmQgbW9kaWZpZWQgYSBiaXQKKyAgICAgICAgZm9yIHggaW4gYW5zaSBjb25zb2xlIGR1bWIgbGludXggcnh2dCBzY3JlZW4gc2NyZWVuLTI1NmNvbG9yIHN1biB2dDUyIHZ0MTAwIHZ0MTAyIHZ0MjAwIHZ0MjIwIHh0ZXJtLWNvbG9yIHh0ZXJtLXhmcmVlODYgeHRlcm0tMjU2Y29sb3IKKyAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBsb2NhbCB0ZXJtZmlsZT0iJChmaW5kICIke0R9JHtkYXRhZGlyfS90ZXJtaW5mby8iIC1uYW1lICIke3h9IiAyPi9kZXYvbnVsbCkiCisgICAgICAgICAgICAgICAgbG9jYWwgYmFzZWRpcj0iJChiYXNlbmFtZSAkKGRpcm5hbWUgIiR7dGVybWZpbGV9IikpIgorCisgICAgICAgICAgICAgICAgaWYgWyAtbiAiJHt0ZXJtZmlsZX0iIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0KKyAgICAgICAgICAgICAgICAgICAgICAgIG12ICR7dGVybWZpbGV9ICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vCisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtcyAvZXRjL3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7RH0ke2RhdGFkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgIyBpIHRoaW5rIHdlIGNhbiB1c2UgeHRlcm0tY29sb3IgYXMgZGVmYXVsdCB4dGVybQorICAgICAgICBpZiBbIC1lICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0tY29sb3IgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgbG4gLXNmIHh0ZXJtLWNvbG9yICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0KKyAgICAgICAgZmkKKworICAgICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3Rlcm1pbmZvCisKKyAgICAgICAgIyBjcmVhdGUgbGlua2VyIHNjcmlwdHMgZm9yIGxpYmN1cnNlcy5zbyBhbmQgbGlibmN1cnNlcyB0bworICAgICAgICAjIGxpbmsgYWdhaW5zdCAtbHRpbmZvIHdoZW4gbmVlZGVkLiBTb21lIGJ1aWxkcyBtaWdodCBicmVhaworICAgICAgICAjIGVsc2Ugd2hlbiAnLVdsLC0tbm8tY29weS1kdC1uZWVkZWQtZW50cmllcycgaGFzIGJlZW4gc2V0IGluCisgICAgICAgICMgbGlua2VyIGZsYWdzLgorICAgICAgICBmb3IgaSBpbiBsaWJuY3Vyc2VzIGxpYm5jdXJzZXN3OyBkbworICAgICAgICAgICAgICAgIGY9JHtEfSR7bGliZGlyfS8kaS5zbworICAgICAgICAgICAgICAgIHRlc3QgLWggJGYgfHwgY29udGludWUKKyAgICAgICAgICAgICAgICBybSAtZiAkZgorICAgICAgICAgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nICA+JGYKKyAgICAgICAgICAgICAgICBlY2hvICJJTlBVVCgkaS5zby41IEFTX05FRURFRCgtbHRpbmZvKSkiID4+JGYKKyAgICAgICAgZG9uZQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgbGliY3Vyc2VzIGlzIGxpbmtlZCBzbyB0aGF0IGl0IGdldHMgLWx0aW5mbworICAgICAgICAjIGFsc28sIHRoaXMgc2hvdWxkIGJlIGFkZHJlc3NlZCB1cHN0cmVhbSByZWFsbHkuCisgICAgICAgIGxuIC1zZiBsaWJuY3Vyc2VzLnNvICR7RH0ke2xpYmRpcn0vbGliY3Vyc2VzLnNvCisKKyAgICAgICAgIyBjcmVhdGUgbGlidGVybWNhcC5zbyBsaW5rZXIgc2NyaXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgICAgIGY9JHtEfSR7bGliZGlyfS9saWJ0ZXJtY2FwLnNvCisgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nID4kZgorICAgICAgICBlY2hvICdJTlBVVChBU19ORUVERUQoLWx0aW5mbykpJyA+PiRmCisKKyAgICAgICAgaWYgWyAhIC1kICIke0R9JHtiYXNlX2xpYmRpcn0iIF07IHRoZW4KKyAgICAgICAgICAgICMgU2V0dGluZyBiYXNlX2xpYmRpciB0byBsaWJkaXIgYXMgaXMgZG9uZSBpbiB0aGUgLW5hdGl2ZQorICAgICAgICAgICAgIyBjYXNlIHdpbGwgc2tpcCB0aGlzIGNvZGUKKyAgICAgICAgICAgIG1rZGlyICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2VzLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2Vzdy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfQorCisgICAgICAgICAgICBtdiAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICBybSAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvCisKKyAgICAgICAgICAgICMgVXNlIGxuciB0byBlbnN1cmUgdGhpcyBpcyBhIHJlbGF0aXZlIGxpbmsgZGVzcGl0ZSBhYnNvbHV0ZSBwYXRocworICAgICAgICAgICAgIyAoYXMgd2UgY2FuJ3Qga25vdyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYmFzZV9saWJkaXIgYW5kIGxpYmRpcikuCisgICAgICAgICAgICAjIEF0IHNvbWUgcG9pbnQgd2UgY2FuIHJlbHkgb24gY29yZXV0aWxzIDguMTYgd2hpY2ggaGFzIGxuIC1yLgorICAgICAgICAgICAgbG5yICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ0aW5mby5zby41ICR7RH0ke2xpYmRpcn0vbGlidGluZm8uc28KKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAtZCAiJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyIgXTsgdGhlbgorICAgICAgICAgICAgZm9yIGYgaW4gYGZpbmQgJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyAtbmFtZSAiKi5oImAKKyAgICAgICAgICAgIGRvCisJICAgICAgICBmPWBiYXNlbmFtZSAkZmAKKwkgICAgICAgIHRlc3QgLWUgJHtEfSR7aW5jbHVkZWRpcn0vJGYgJiYgY29udGludWUKKyAgICAgICAgICAgICAgICBsbiAtc2YgbmN1cnNlcy8kZiAke0R9JHtpbmNsdWRlZGlyfS8kZgorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICBvZV9tdWx0aWxpYl9oZWFkZXIgY3Vyc2VzLmgKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCIke2xpYmRpcn0iKQorICAgIGJhc2VfbGliZGlyID0gZC5leHBhbmQoIiR7YmFzZV9saWJkaXJ9IikKKyAgICBwbmJhc2UgPSBkLmV4cGFuZCgiJHtQTn0tbGliJXMiKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBpZiBsaWJkaXIgaXMgbm90IGJhc2VfbGliZGlyOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBiYXNlX2xpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KKworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzX2NsYXNzLXRhcmdldCA9ICJjbGVhciByZXNldCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyArPSAiIFwKKyAgJHtQTn0tdG9vbHMgXAorICAke1BOfS10ZXJtaW5mbyBcCisgICR7UE59LXRlcm1pbmZvLWJhc2UgXAorIgorCitGSUxFU18ke1BOfSA9ICJcCisgICR7YmluZGlyfS90cHV0IFwKKyAgJHtiaW5kaXJ9L3RzZXQgXAorICAke2JpbmRpcn0vbmN1cnNlczUtY29uZmlnIFwKKyAgJHtiaW5kaXJ9L25jdXJzZXN3NS1jb25maWcgXAorICAke2RhdGFkaXJ9L3RhYnNldCBcCisiCisKKyMgVGhpcyBrZWVwcyBvbmx5IHRwdXQvdHNldCBpbiBuY3Vyc2VzCisjIGNsZWFyL3Jlc2V0IGFyZSBpbiBhbHJlYWR5IGJ1c3lib3gKK0ZJTEVTXyR7UE59LXRvb2xzID0gIlwKKyAgJHtiaW5kaXJ9L3RpYyBcCisgICR7YmluZGlyfS90b2UgXAorICAke2JpbmRpcn0vaW5mb3RvY2FwIFwKKyAgJHtiaW5kaXJ9L2NhcHRvaW5mbyBcCisgICR7YmluZGlyfS9pbmZvY21wIFwKKyAgJHtiaW5kaXJ9L2NsZWFyJHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3Jlc2V0JHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3RhY2sgXAorICAke2JpbmRpcn0vdGFicyBcCisiCisKKyMgJ3Jlc2V0JyBpcyBhIHN5bWxpbmsgdG8gJ3RzZXQnIHdoaWNoIGlzIGluIHRoZSAnbmN1cnNlcycgcGFja2FnZQorUkRFUEVORFNfJHtQTn0tdG9vbHMgPSAiJHtQTn0iCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvID0gIlwKKyAgJHtkYXRhZGlyfS90ZXJtaW5mbyBcCisiCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvLWJhc2UgPSAiXAorICAke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvIFwKKyIKKworUlNVR0dFU1RTXyR7UE59LWxpYnRpbmZvID0gIiR7UE59LXRlcm1pbmZvIgorUlJFQ09NTUVORFNfJHtQTn0tbGlidGluZm8gPSAiJHtQTn0tdGVybWluZm8tYmFzZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc181LjkuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDI3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNS45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbmN1cnNlcy5pbmMKKworUkVWSVNJT04gPSAiMjAxNTAzMjkiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJICs9ICJmaWxlOi8vdGljLWhhbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZy5jYWNoZSBcCisiCitTID0gIiR7V09SS0RJUn0vJHtCUH0tJHtSRVZJU0lPTn0iCitTUkNfVVJJW21kNXN1bV0gPSAiY2VlOTkxZDA5ZTY5ZTYwZWJlZGVmNDI0ODA0YzUyZDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI2NGY0MGU0ZGNlNzNlM2FhODNkMTViZDkyNTdjNmVmZjg3OTBlYzQxMTUwZjA5MzhiZDg3YzBlYjc1ODI4ZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvc2l0ZV9jb25maWcvaGVhZGVycyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdiN2JmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorY3Vyc2VzLmgKK25jdXJzZXMvY3Vyc2VzLmgKK25jdXJzZXMuaAorbmN1cnNlcy90ZXJtY2FwLmgKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL2hvc3RzIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL2hvc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzMyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMKQEAgLTAsMCArMSwyIEBACisxMjcuMC4wLjEJbG9jYWxob3N0LmxvY2FsZG9tYWluCQlsb2NhbGhvc3QKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Y2UyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorbmV0YmFzZTogYWRkIHJwY2JpbmQgYXMgYW4gYWxpYXMgdG8gc3VucnBjCisKK3RoZSBwYXRjaCBjb21lcyBmcm9tOgoraHR0cHM6Ly9idWdzLmFyY2hsaW51eC5vcmcvdGFzay8yMDI3MworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZXRjLXJwYyAgICAgIHwgICAgMiArLQorIGV0Yy1zZXJ2aWNlcyB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXRjLXJwYyBiL2V0Yy1ycGMKK2luZGV4IDFiMzA2MjUuLjlhOWE4MWEgMTAwNjQ0CistLS0gYS9ldGMtcnBjCisrKysgYi9ldGMtcnBjCitAQCAtMSw3ICsxLDcgQEAKKyAjIFRoaXMgZmlsZSBjb250YWlucyB1c2VyIHJlYWRhYmxlIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgcnBjCisgIyBwcm9ncmFtIG51bWJlcnMuCisgCistcG9ydG1hcHBlcgkxMDAwMDAJcG9ydG1hcCBzdW5ycGMKKytwb3J0bWFwcGVyCTEwMDAwMAlwb3J0bWFwIHN1bnJwYyBycGNiaW5kCisgcnN0YXRkCQkxMDAwMDEJcnN0YXQgcnN0YXRfc3ZjIHJ1cCBwZXJmbWV0ZXIKKyBydXNlcnNkCQkxMDAwMDIJcnVzZXJzCisgbmZzCQkxMDAwMDMJbmZzcHJvZworZGlmZiAtLWdpdCBhL2V0Yy1zZXJ2aWNlcyBiL2V0Yy1zZXJ2aWNlcworaW5kZXggOWQ2NGE1Mi4uYTE5ZjdjOCAxMDA2NDQKKy0tLSBhL2V0Yy1zZXJ2aWNlcworKysrIGIvZXRjLXNlcnZpY2VzCitAQCAtNzIsOCArNzIsOCBAQCBwb3AyCQkxMDkvdGNwCQlwb3N0b2ZmaWNlIHBvcC0yICMgUE9QIHZlcnNpb24gMgorIHBvcDIJCTEwOS91ZHAJCXBvcC0yCisgcG9wMwkJMTEwL3RjcAkJcG9wLTMJCSMgUE9QIHZlcnNpb24gMworIHBvcDMJCTExMC91ZHAJCXBvcC0zCistc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyCSMgUlBDIDQuMCBwb3J0bWFwcGVyCistc3VucnBjCQkxMTEvdWRwCQlwb3J0bWFwcGVyCisrc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyIHJwY2JpbmQJIyBSUEMgNC4wIHBvcnRtYXBwZXIKKytzdW5ycGMJCTExMS91ZHAJCXBvcnRtYXBwZXIgcnBjYmluZAorIGF1dGgJCTExMy90Y3AJCWF1dGhlbnRpY2F0aW9uIHRhcCBpZGVudAorIHNmdHAJCTExNS90Y3AKKyB1dWNwLXBhdGgJMTE3L3RjcAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZV81LjMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2VfNS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDg5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2VfNS4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQmFzaWMgVENQL0lQIG5ldHdvcmtpbmcgc3VwcG9ydCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciBiYXNpYyBUQ1AvSVAgYmFzZWQgbmV0d29ya2luZyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL25ldGJhc2UiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCitQRSA9ICIxIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9uL25ldGJhc2UvbmV0YmFzZV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaG9zdHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNjM3YTI3ZmQzZGUwMmEyNzhkMmI1YmU3ZTY1NThjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MWY2YzY5Nzk1MDQ0ZDYyYjhhZDk1OWNmOWRhZjA0OWQwNTQ1ZmQ0NjZjNTI4NjBhZDNmOTMzYjFlOTdiODhiIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjggJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0cyAke0R9JHtzeXNjb25mZGlyfS9ob3N0cworCWluc3RhbGwgLW0gMDY0NCBldGMtcnBjICR7RH0ke3N5c2NvbmZkaXJ9L3JwYworCWluc3RhbGwgLW0gMDY0NCBldGMtcHJvdG9jb2xzICR7RH0ke3N5c2NvbmZkaXJ9L3Byb3RvY29scworCWluc3RhbGwgLW0gMDY0NCBldGMtc2VydmljZXMgJHtEfSR7c3lzY29uZmRpcn0vc2VydmljZXMKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaG9zdHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9vcy1yZWxlYXNlL29zLXJlbGVhc2UuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9vcy1yZWxlYXNlL29zLXJlbGVhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0MzFkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYgpAQCAtMCwwICsxLDQ5IEBACitpbmhlcml0IGFsbGFyY2gKKworU1VNTUFSWSA9ICJPcGVyYXRpbmcgc3lzdGVtIGlkZW50aWZpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiVGhlIC9ldGMvb3MtcmVsZWFzZSBmaWxlIGNvbnRhaW5zIG9wZXJhdGluZyBzeXN0ZW0gaWRlbnRpZmljYXRpb24gZGF0YS4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKKyMgT3RoZXIgdmFsaWQgZmllbGRzOiBCVUlMRF9JRCBJRF9MSUtFIEFOU0lfQ09MT1IgQ1BFX05BTUUKKyMgICAgICAgICAgICAgICAgICAgICBIT01FX1VSTCBTVVBQT1JUX1VSTCBCVUdfUkVQT1JUX1VSTAorT1NfUkVMRUFTRV9GSUVMRFMgPSAiSUQgSURfTElLRSBOQU1FIFZFUlNJT04gVkVSU0lPTl9JRCBQUkVUVFlfTkFNRSIKKworSUQgPSAiJHtESVNUUk99IgorTkFNRSA9ICIke0RJU1RST19OQU1FfSIKK1ZFUlNJT04gPSAiJHtESVNUUk9fVkVSU0lPTn0ke0AnICglcyknICUgRElTVFJPX0NPREVOQU1FIGlmICdESVNUUk9fQ09ERU5BTUUnIGluIGQgZWxzZSAnJ30iCitWRVJTSU9OX0lEID0gIiR7RElTVFJPX1ZFUlNJT059IgorUFJFVFRZX05BTUUgPSAiJHtESVNUUk9fTkFNRX0gJHtWRVJTSU9OfSIKK0JVSUxEX0lEID89ICIke0RBVEVUSU1FfSIKK0JVSUxEX0lEW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKKworcHl0aG9uIGRvX2NvbXBpbGUgKCkgeworICAgIGltcG9ydCBzaHV0aWwKKyAgICB3aXRoIG9wZW4oZC5leHBhbmQoJyR7Qn0vb3MtcmVsZWFzZScpLCAndycpIGFzIGY6CisgICAgICAgIGZvciBmaWVsZCBpbiBkLmdldFZhcignT1NfUkVMRUFTRV9GSUVMRFMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcihmaWVsZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3swfT17MX1cbicuZm9ybWF0KGZpZWxkLCB2YWx1ZSkpCisgICAgaWYgZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBycG1fZ3BnX3B1YmtleSA9IGQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCisgICAgICAgIG9zLm1rZGlyKCcke0J9L3JwbS1ncGcnKQorICAgICAgICBkaXN0cm9fdmVyc2lvbiA9IHNlbGYuZC5nZXRWYXIoJ0RJU1RST19WRVJTSU9OJywgVHJ1ZSkgb3IgIm9lLjAiCisgICAgICAgIHNodXRpbC5jb3B5MihycG1fZ3BnX3B1YmtleSwgZC5leHBhbmQoJyR7Qn0vcnBtLWdwZy9SUE0tR1BHLUtFWS0lcycgJSBkaXN0cm9fdmVyc2lvbikpCit9Citkb19jb21waWxlW3ZhcmRlcHNdICs9ICIke09TX1JFTEVBU0VfRklFTERTfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCBvcy1yZWxlYXNlICR7RH0ke3N5c2NvbmZkaXJ9LworCisgICAgaWYgWyAtZCAicnBtLWdwZyIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9wa2kiCisgICAgICAgIGNwIC1yICJycG0tZ3BnIiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpLyIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNmE1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKQEAgLTAsMCArMSwzMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQKKyMKKworU1VNTUFSWSA9ICJIb3N0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsgb3IgZXh0ZXJuYWwgdG9vbGNoYWluIgorUFIgPSAicjEyIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIG5hdGl2ZXNkaworCitQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZID0gIjEiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstcWVtdSBcCisgICAgbmF0aXZlc2RrLXFlbXUtaGVscGVyIFwKKyAgICBuYXRpdmVzZGstcHNldWRvIFwKKyAgICBuYXRpdmVzZGstdW5mczMgXAorICAgIG5hdGl2ZXNkay1vcGtnIFwKKyAgICBuYXRpdmVzZGstbGlidG9vbCBcCisgICAgbmF0aXZlc2RrLWF1dG9jb25mIFwKKyAgICBuYXRpdmVzZGstYXV0b21ha2UgXAorICAgIG5hdGl2ZXNkay1zaGFkb3cgXAorICAgIG5hdGl2ZXNkay1tYWtlZGV2cyBcCisgICAgbmF0aXZlc2RrLXNtYXJ0cG0gXAorICAgIG5hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHQgXAorICAgICIKKworUkRFUEVORFNfJHtQTn1fZGFyd2luID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstb3BrZyBcCisgICAgbmF0aXZlc2RrLWxpYnRvb2wgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDBiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCkBAIC0wLDAgKzEsMzY5IEBACitTVU1NQVJZID0gIk1lcmdlIG1hY2hpbmUgYW5kIGRpc3RybyBvcHRpb25zIHRvIGNyZWF0ZSBhIGJhc2ljIG1hY2hpbmUgdGFzay9wYWNrYWdlIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyODMiCisKKyMKKyMgcGFja2FnZXMgd2hpY2ggY29udGVudCBkZXBlbmQgb24gTUFDSElORV9GRUFUVVJFUyBuZWVkIHRvIGJlIE1BQ0hJTkVfQVJDSAorIworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKK2luaGVyaXQgYmx1ZXRvb3RoCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAnIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgICAgICAgICBwYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlIFwKKyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAicGFja2FnZWdyb3VwLWJhc2UtYWNwaSIsICIiLGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhbHNhIiwgInBhY2thZ2Vncm91cC1iYXNlLWFsc2EiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1hcG0iLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImV4dDIiLCAicGFja2FnZWdyb3VwLWJhc2UtZXh0MiIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidmZhdCIsICJwYWNrYWdlZ3JvdXAtYmFzZS12ZmF0IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJpcmRhIiwgInBhY2thZ2Vncm91cC1iYXNlLWlyZGEiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAia2V5Ym9hcmQiLCAicGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjaSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1wY2kiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGNtY2lhIiwgInBhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGhvbmUiLCAicGFja2FnZWdyb3VwLWJhc2UtcGhvbmUiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInNlcmlhbCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmdhZGdldCIsICJwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmhvc3QiLCAicGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJibHVldG9vdGgiLCAicGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndpZmkiLCAicGFja2FnZWdyb3VwLWJhc2Utd2lmaSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICIzZyIsICJwYWNrYWdlZ3JvdXAtYmFzZS0zZyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJuZmMiLCAicGFja2FnZWdyb3VwLWJhc2UtbmZjIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImNyYW1mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXBzZWMiLCAicGFja2FnZWdyb3VwLWJhc2UtaXBzZWMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXB2NiIsICJwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm5mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1uZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAicHBwIiwgInBhY2thZ2Vncm91cC1iYXNlLXBwcCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzbWJmcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zbWJmcyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ6ZXJvY29uZiIsICJwYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJworCisjIE92ZXJyaWRlIGJ5IGRpc3RybyBpZiBuZWVkZWQKK1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzID89ICJrZXltYXBzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlIGNvbnRhaW4gc3R1ZmYgbmVlZGVkIGZvciBiYXNlIHN5c3RlbSAobWFjaGluZSByZWxhdGVkKQorIworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UgPSAiXAorICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSBcCisgICAgXAorICAgIHN5c2ZzdXRpbHMgXAorICAgIG1vZHVsZS1pbml0LXRvb2xzIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhcG0nLCAncGFja2FnZWdyb3VwLWJhc2UtYXBtJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhY3BpJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFjcGknLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2tleWJvYXJkJywgJ3BhY2thZ2Vncm91cC1iYXNlLWtleWJvYXJkJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdwaG9uZScsICdwYWNrYWdlZ3JvdXAtYmFzZS1waG9uZScsICcnLGQpfSBcCisgICAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFsc2EnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdleHQyJywgJ3BhY2thZ2Vncm91cC1iYXNlLWV4dDInLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd2ZmF0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXZmYXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdpcmRhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlyZGEnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY2knLCAncGFja2FnZWdyb3VwLWJhc2UtcGNpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmdhZGdldCcsICdwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdibHVldG9vdGgnLCAncGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnd2lmaScsICdwYWNrYWdlZ3JvdXAtYmFzZS13aWZpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnM2cnLCAncGFja2FnZWdyb3VwLWJhc2UtM2cnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICduZmMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZjJywgJycsZCl9IFwKKyAgICBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICduZnMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2NyYW1mcycsICdwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc21iZnMnLCAncGFja2FnZWdyb3VwLWJhc2Utc21iZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2JywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwc2VjJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlwc2VjJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BwcCcsICdwYWNrYWdlZ3JvdXAtYmFzZS1wcHAnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAncGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmYnLCAnJyxkKX0gXAorICAgICIKKworCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1ubHMtdXRmOCBcCisgICAga2VybmVsLW1vZHVsZS1pbnB1dCBcCisgICAga2VybmVsLW1vZHVsZS11aW5wdXQgXAorICAgIGtlcm5lbC1tb2R1bGUtcnRjLWRldiBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtcHJvYyBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtc3lzZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtdW5peCIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgPSAiXAorICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAke0FERF9XSUZJfSBcCisgICAgJHtBRERfQlR9IFwKKyAgICAke0FERF8zR30gXAorICAgICR7QUREX05GQ30gXAorICAgICIKKworQUREX1dJRkkgPSAiIgorQUREX0JUID0gIiIKK0FERF8zRyA9ICIiCitBRERfTkZDID0gIiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAjIElmIERpc3RybyB3YW50IHdpZmkgYW5kIG1hY2hpbmUgZmVhdHVyZSB3aWZpL3BjaS9wY21jaWEvdXNiaG9zdCAob25lIG9mIHRoZW0pCisgICAgIyB0aGVuIGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBpbiBwYWNrYWdlZ3JvdXAtYmFzZQorCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gc2V0KGQuZ2V0VmFyKCJESVNUUk9fRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpKQorICAgIG1hY2hpbmVfZmVhdHVyZXM9IHNldChkLmdldFZhcigiTUFDSElORV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkpCisKKyAgICBpZiAiYmx1ZXRvb3RoIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiYmx1ZXRvb3RoIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9CVCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGgiKQorCisgICAgaWYgIndpZmkiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJ3aWZpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9XSUZJIiwgInBhY2thZ2Vncm91cC1iYXNlLXdpZmkiKQorCisgICAgaWYgIjNnIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiM2ciIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgicGNtY2lhIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJwY2kiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInVzYmhvc3QiIGluIG1hY2hpbmVfZmVhdHVyZXMpOgorICAgICAgICBkLnNldFZhcigiQUREXzNHIiwgInBhY2thZ2Vncm91cC1iYXNlLTNnIikKKworICAgIGlmICJuZmMiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJuZmMiIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgidXNiaG9zdCIgaW4gbWFjaGluZV9mZWF0dXJlcyk6CisgICAgICAgIGQuc2V0VmFyKCJBRERfTkZDIiwgInBhY2thZ2Vncm91cC1iYXNlLW5mYyIpCit9CisKKyMKKyMgcGFja2FnZXMgYWRkZWQgYnkgZGlzdHJpYnV0aW9uCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSA9ICIke0RJU1RST30gZXh0cmFzIgorREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfREVQRU5EU30iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfUkRFUEVORFN9IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlID0gIiR7RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworIworIyBwYWNrYWdlcyBhZGRlZCBieSBtYWNoaW5lIGNvbmZpZworIworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIiR7TUFDSElORX0gZXh0cmFzIgorU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIkV4dHJhIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGZ1bGx5IHN1cHBvcnQgJHtNQUNISU5FfSBoYXJkd2FyZSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JERVBFTkRTfSIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1rZXlib2FyZCA9ICJLZXlib2FyZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2tleW1hcHN9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBjaSA9ICJQQ0kgYnVzIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY2kgPSAiXAorICAgIHBjaXV0aWxzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFjcGkgPSAiQUNQSSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWNwaSA9ICJcCisgICAgYWNwaWQgXAorICAgIGxpYmFjcGkgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJBUE0gc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYXBtfSBcCisgICAgYXBtZCIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1leHQyID0gImV4dDIgZmlsZXN5c3RlbSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0MiA9ICJcCisgICAgaGRwYXJtIFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJGQVQgZmlsZXN5c3RlbSBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1tc2RvcyBcCisgICAga2VybmVsLW1vZHVsZS12ZmF0IFwKKyAgICBrZXJuZWwtbW9kdWxlLW5scy1pc284ODU5LTEgXAorICAgIGtlcm5lbC1tb2R1bGUtbmxzLWNwNDM3IFwKKyAgICBkb3Nmc3Rvb2xzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiQUxTQSBzb3VuZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWxzYSA9ICJcCisgICAgYWxzYS11dGlscy1hbHNhY3RsIFwKKyAgICBhbHNhLXV0aWxzLWFsc2FtaXhlciBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYWxzYS1zdGF0ZX0iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtc25kLW1peGVyLW9zcyBcCisgICAga2VybmVsLW1vZHVsZS1zbmQtcGNtLW9zcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiUEMgY2FyZCBzbG90IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiXAorICAgIHBjbWNpYXV0aWxzIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wY21jaWEgXAorICAgIGtlcm5lbC1tb2R1bGUtYWlyby1jcyBcCisgICAga2VybmVsLW1vZHVsZS1wY25ldC1jcyBcCisgICAga2VybmVsLW1vZHVsZS1zZXJpYWwtY3MgXAorICAgIGtlcm5lbC1tb2R1bGUtaWRlLWNzIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlkZS1kaXNrIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCAna2VybmVsLW1vZHVsZS1ob3N0YXAtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLW9yaW5vY28tY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLXNwZWN0cnVtLWNzJywgJycsZCl9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJCbHVldG9vdGggc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJcCisgICAgJHtCTFVFWn0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXonLCAnJyxkKX0gXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWJsdWV0b290aCBcCisgICAga2VybmVsLW1vZHVsZS1sMmNhcCBcCisgICAga2VybmVsLW1vZHVsZS1yZmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaGNpLXZoY2kgXAorICAgIGtlcm5lbC1tb2R1bGUtYm5lcCBcCisgICAga2VybmVsLW1vZHVsZS1oaWRwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWhjaS11YXJ0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNjbyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmhvc3QnLCAna2VybmVsLW1vZHVsZS1oY2ktdXNiJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2tlcm5lbC1tb2R1bGUtYmx1ZXRvb3RoM2MtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1ibHVlY2FyZC1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdrZXJuZWwtbW9kdWxlLWJsdWV0b290aHVhcnQtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1kdGwxLWNzJywgJycsZCl9IFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXJkYSA9ICJJckRBIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBpcmRhLXV0aWxzIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YWZpY3AtaXIgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJkYSBcCisgICAga2VybmVsLW1vZHVsZS1pcmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaXJjb21tLXR0eSBcCisgICAga2VybmVsLW1vZHVsZS1pcmxhbiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwcHAnLCAna2VybmVsLW1vZHVsZS1pcm5ldCcsICcnLGQpfSBcCisgICAga2VybmVsLW1vZHVsZS1pcnBvcnQgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHkgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHktc2lyIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNpci1kZXYgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ2tlcm5lbC1tb2R1bGUtaXItdXNiJywgJycsZCl9ICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQgPSAiVVNCIGdhZGdldCBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdXNiZ2FkZ2V0ID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YTI3eF91ZGMgXAorICAgIGtlcm5lbC1tb2R1bGUtZ2FkZ2V0ZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1maWxlLXN0b3JhZ2UgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1zZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1ldGhlciIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlVTQiBob3N0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlwKKyAgICB1c2J1dGlscyAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtdWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtb2hjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtZWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiY29yZSBcCisgICAga2VybmVsLW1vZHVsZS11c2JoaWQgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNibmV0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNkLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS1zY3NpLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS11c2Jtb3VzZSBcCisgICAga2VybmVsLW1vZHVsZS1tb3VzZWRldiBcCisgICAga2VybmVsLW1vZHVsZS11c2JzZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiLXN0b3JhZ2UgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJQUFAgZGlhbC11cCBwcm90b2NvbCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtcHBwID0gIlwKKyAgICBwcHAgXAorICAgIHBwcC1kaWFsaW4iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wcHAtYXN5bmMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWRlZmxhdGUgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWdlbmVyaWMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLW1wcGUgXAorICAgIGtlcm5lbC1tb2R1bGUtc2xoYyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYyA9ICJJUFNFQyBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXBzZWMiCisKKyMKKyMgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBjb250YWluIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGdldCBXaUZpIHdvcmtpbmcKKyMgV0VQL1dQQSBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIHN1cHBvcnRlZCBvdXQtb2YtYm94CisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXdpZmkgPSAiV2lGaSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Utd2lmaSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfd2lyZWxlc3MtdG9vbHN9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2hvc3RhcC11dGlscycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjaScsICdob3N0YXAtdXRpbHMnLCAnJyxkKX0gXAorICAgIHdwYS1zdXBwbGljYW50IgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS13aWZpID0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiaG9zdCcsICdrZXJuZWwtbW9kdWxlLXpkMTIxMXJ3JywgJycsZCl9IFwKKyAgICBrZXJuZWwtbW9kdWxlLWllZWU4MDIxMS1jcnlwdCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtY2NtcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtdGtpcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtd2VwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWVjYiBcCisgICAga2VybmVsLW1vZHVsZS1hcmM0IFwKKyAgICBrZXJuZWwtbW9kdWxlLWNyeXB0b19hbGdhcGkgXAorICAgIGtlcm5lbC1tb2R1bGUtY3J5cHRvbWdyIFwKKyAgICBrZXJuZWwtbW9kdWxlLW1pY2hhZWwtbWljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcy1nZW5lcmljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIG5lYXJkIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtbmZjIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIkNlbGx1bGFyIGRhdGEgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIlwKKyAgICBvZm9ubyIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtM2cgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY2RjLWFjbSBcCisgICAga2VybmVsLW1vZHVsZS1jZGMtd2RtIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlNNQiBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWNpZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtc21iZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtY3JhbWZzID0gImNyYW1mcyBmaWxlc3lzdGVtIHN1cHBvcnQiCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY3JhbWZzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlLW5mcyBwcm92aWRlcyBPTkxZIGNsaWVudCBzdXBwb3J0IC0gc2VydmVyIGlzIGluIG5mcy11dGlscyBwYWNrYWdlCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJORlMgbmV0d29yayBmaWxlc3lzdGVtIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZnMgPSAiXAorICAgIHJwY2JpbmQiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1uZnMgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mID0gIlplcm9jb25mIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiA9ICJcCisgICAgYXZhaGktZGFlbW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmZfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiXAorICAgIGxpYm5zcy1tZG5zIFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXB2NiA9ICJJUHY2IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcHY2ID0gIlwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlwdjYgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXB2NiAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2Utc2VyaWFsID0gIlNlcmlhbCBwb3J0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwgPSAiXAorICAgIHNldHNlcmlhbCBcCisgICAgbHJ6c3ogIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBob25lID0gIkNlbGx1bGFyIHRlbGVwaG9ueSAodm9pY2UpIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1waG9uZSA9ICJcCisgICAgb2Zvbm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNTM3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYgpAQCAtMCwwICsxLDQ3IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJNaW5pbWFsIGJvb3QgcmVxdWlyZW1lbnRzIgorREVTQ1JJUFRJT04gPSAiVGhlIG1pbmltYWwgc2V0IG9mIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGJvb3QgdGhlIHN5c3RlbSIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjE3IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCisjCisjIFNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIHdpdGggcGFja2FnZXMgZXNzZW50aWFsIGZvciBkZXZpY2UgYm9vdHVwCisjCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKKworIyBEaXN0cm8gY2FuIG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgVklSVFVBTC1SVU5USU1FIHByb3ZpZGVyczoKK1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA/PSAidWRldiIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID89ICJidXN5Ym94IgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA/PSAic3lzdmluaXQiCitWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPz0gImluaXRzY3JpcHRzIgorVklSVFVBTC1SVU5USU1FX2tleW1hcHMgPz0gImtleW1hcHMiCisKK1NZU1ZJTklUX1NDUklQVFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncnRjJywgJ2J1c3lib3gtaHdjbG9jaycsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICBtb2R1dGlscy1pbml0c2NyaXB0cyBcCisgICAgICAgICAgICAgICAgICAgIGluaXQtaWZ1cGRvd24gXAorICAgICAgICAgICAgICAgICAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0c30gXAorICAgICAgICAgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJhc2UtZmlsZXMgXAorICAgIGJhc2UtcGFzc3dkIFwKKyAgICBidXN5Ym94IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3Zpbml0IiwgIiR7U1lTVklOSVRfU0NSSVBUU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJrZXlib2FyZCIsICIke1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzfSIsICIiLCBkKX0gXAorICAgIG5ldGJhc2UgXAorICAgICR7VklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IFwKKyAgICAke01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgICR7TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFN9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlZDI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwuYmIKQEAgLTAsMCArMSwyOSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0LCBJbmMuCisjCisKK1NVTU1BUlkgPSAiRXNzZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCA9ICJcCisgICAgYXV0b2NvbmYgXAorICAgIGF1dG9tYWtlIFwKKyAgICBiaW51dGlscyBcCisgICAgYmludXRpbHMtc3ltbGlua3MgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBnY2MgXAorICAgIGdjYy1zeW1saW5rcyBcCisgICAgZysrIFwKKyAgICBnKystc3ltbGlua3MgXAorICAgIGdldHRleHQgXAorICAgIG1ha2UgXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlidG9vbCBcCisgICAgcGtnY29uZmlnIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1Zy5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2IwMTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiUmVtb3RlIGRlYnVnZ2luZyB0b29scyBmb3IgRWNsaXBzZSBpbnRlZ3JhdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZ2Ric2VydmVyIFwKKyAgICB0Y2YtYWdlbnQgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4MmQzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIk5GUyBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjIiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyICR7UE59LWNsaWVudCIKKworU1VNTUFSWV8ke1BOfS1jbGllbnQgPSAiTkZTIGNsaWVudCIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJuZnMtdXRpbHMtY2xpZW50IgorCitTVU1NQVJZXyR7UE59LXNlcnZlciA9ICJORlMgc2VydmVyIgorUkRFUEVORFNfJHtQTn0tc2VydmVyID0gIlwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhZGQwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCkBAIC0wLDAgKzEsODMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlNvZnR3YXJlIGRldmVsb3BtZW50IHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworI1BBQ0tBR0VGVU5DUyA9KyAnZ2VuZXJhdGVfc2RrX3BrZ3MnCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgXAorICAgIGNvcmV1dGlscyBcCisgICAgY2NhY2hlIFwKKyAgICBkaWZmdXRpbHMgXAorICAgIGludGx0b29sIFwKKyAgICBwZXJsLW1vZHVsZS1yZSBcCisgICAgcGVybC1tb2R1bGUtdGV4dC13cmFwIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIHF1aWx0IFwKKyAgICBsZXNzIFwKKyAgICBsZGQgXAorICAgIGZpbGUgXAorICAgIHRjbCIKKworU0FOSVRJWkVSUyA9ICJsaWJhc2FuLWRldiBsaWJ1YnNhbi1kZXYiCitTQU5JVElaRVJTX2FhcmNoNjQgPSAiIgorU0FOSVRJWkVSU19taXBzID0gIiIKK1NBTklUSVpFUlNfbWlwczY0ID0gIiIKK1NBTklUSVpFUlNfbWlwczY0bjMyID0gIiIKK1NBTklUSVpFUlNfcG93ZXJwYzY0ID0gIiIKK1NBTklUSVpFUlNfc3BhcmMgPSAiIgorU0FOSVRJWkVSU19saWJjLW11c2wgPSAiIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiXAorICAgIGxpYmdvbXAgXAorICAgIGxpYmdvbXAtZGV2IFwKKyAgICAke1NBTklUSVpFUlN9IgorCisjcHl0aG9uIGdlbmVyYXRlX3Nka19wa2dzICgpIHsKKyMgICAgcG9reV9wa2dzID0gcmVhZF9wa2dkYXRhKCdwYWNrYWdlZ3JvdXAtY29yZScsIGQpWydQQUNLQUdFUyddCisjICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisjICAgIGZvciBwa2cgaW4gcG9reV9wa2dzLnNwbGl0KCk6CisjICAgICAgICBuZXdwa2cgPSBwa2cucmVwbGFjZSgncGFja2FnZWdyb3VwLWNvcmUnLCAncGFja2FnZWdyb3VwLWNvcmUtc2RrJykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggb2YgdGhlIHRhc2sgcGFja2FnZXMsIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2RrIHRhc2sKKyMgICAgICAgIHBrZ3MuYXBwZW5kKG5ld3BrZykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggc2RrIHRhc2ssIHRha2UgdGhlIHJkZXBlbmRzIG9mIHRoZSBub24tc2RrIHRhc2ssIGFuZCB0dXJuCisjICAgICAgICAjIHRoYXQgaW50byBycmVjb21tZW5kcyB1cG9uIHRoZSAtZGV2IHZlcnNpb25zIG9mIHRob3NlLCBub3QgdW5saWtlCisjICAgICAgICAjIHRoZSBwYWNrYWdlIGRlcGNoYWluIGNvZGUKKyMgICAgICAgIHNwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyMKKyMgICAgICAgIHJkZXBlbmRzID0gZXhwbG9kZV9kZXBzKHNwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgcGtnKSBvciAnJykKKyMgICAgICAgIHJyZWNsaXN0ID0gW10KKyMKKyMgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHM6CisjICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgbmFtZSA9IHNwbGl0X2RlcGVuZFswXS5zdHJpcCgpCisjICAgICAgICAgICAgaWYgcGFja2FnZWQoJyVzLWRldicgJSBuYW1lLCBkKToKKyMgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICBkZXBwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKG5hbWUsIGQpCisjICAgICAgICAgICAgICAgIHJkZXBlbmRzMiA9IGV4cGxvZGVfZGVwcyhkZXBwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgbmFtZSkgb3IgJycpCisjICAgICAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHMyOgorIyAgICAgICAgICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXRfZGVwZW5kWzBdLnN0cmlwKCkKKyMgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VkKCclcy1kZXYnICUgbmFtZSwgZCk6CisjICAgICAgICAgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMKKyMgICAgICAgICAgICBvbGRycmVjID0gZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgRmFsc2UpIG9yICcnCisjICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgb2xkcnJlYyArICcgJyArICcgJy5qb2luKHJyZWNsaXN0KSkKKyMgICAgICAgICAgICAjIGJiLm5vdGUoJ1JSRUNPTU1FTkRTXyVzID0gIiVzIicgJSAobmV3cGtnLCBkLmdldFZhcignUlJFQ09NTUVORFNfJXMnICUgbmV3cGtnLCBGYWxzZSkpKQorIworIyAgICAjIGJiLm5vdGUoJ3BrZ3MgaXMgJXMnICUgcGtncykKKyMgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGtncykpCisjfQorIworI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wYWNrYWdlZ3JvdXAtY29yZS1zZGstLioiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OTk0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYgpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiRHJvcGJlYXIgU1NIIGNsaWVudC9zZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJkcm9wYmVhciIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDIwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoLmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJPcGVuU1NIIFNTSCBjbGllbnQvc2VydmVyIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfJHtQTn0gPSAib3BlbnNzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNWU0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgbGliZ2NjIFwKKyAgICBsaWJnY2MtZGV2IFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgICR7TElCQ19ERVBFTkRFTkNJRVN9IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM0N2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgpAQCAtMCwwICsxLDIwIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJEZWJ1Z2dpbmcgdG9vbHMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUFIgPSAicjMiCisKK01UUkFDRSA9ICIiCitNVFJBQ0VfbGliYy1nbGliYyA9ICJsaWJjLW10cmFjZSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICBzdHJhY2UgXAorICAgICR7TVRSQUNFfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjU5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKQEAgLTAsMCArMSw4MSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiUHJvZmlsaW5nIHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQUk9GSUxFX1RPT0xTX1ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnc3lzcHJvZicsICcnLCBkKX0iCisjIHN5c3Byb2YgZG9lc24ndCBzdXBwb3J0IGFhcmNoNjQKK1BST0ZJTEVfVE9PTFNfWF9hYXJjaDY0ID0gIiIKK1BST0ZJTEVfVE9PTFNfU1lTVEVNRCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZC1hbmFseXplJywgJycsIGQpfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgIHBlcmYgXAorICAgIHRyYWNlLWNtZCBcCisgICAgYmxrdHJhY2UgXAorICAgICR7UFJPRklMRV9UT09MU19YfSBcCisgICAgJHtQUk9GSUxFX1RPT0xTX1NZU1RFTUR9IFwKKyAgICAiCisKK1BST0ZJTEVUT09MUyA9ICJcCisgICAgcG93ZXJ0b3AgXAorICAgIGxhdGVuY3l0b3AgXAorICAgICIKKworIyBzeXN0ZW10YXAgbmVlZHMgZWxmdXRpbHMgd2hpY2ggaXMgbm90IGZ1bGx5IGJ1aWxkYWJsZSBvbiB1Y2xpYmMKKyMgaGVuY2Ugd2UgZXhjbHVkZSBpdCBmcm9tIHVjbGliYyBiYXNlZCBidWlsZHMKK1NZU1RFTVRBUCA9ICJzeXN0ZW10YXAiCitTWVNURU1UQVBfbGliYy11Y2xpYmMgPSAiIgorU1lTVEVNVEFQX21pcHMgPSAiIgorU1lTVEVNVEFQX21pcHM2NCA9ICIiCitTWVNURU1UQVBfbWlwczY0bjMyID0gIiIKK1NZU1RFTVRBUF9hYXJjaDY0ID0gIiIKKworIyBsdHRuZy11c3QgdXNlcyBzY2hlZF9nZXRjcHUoKSB3aGljaCBpcyBub3QgdGhlcmUgb24gdWNsaWJjCisjIGZvciBzb21lIG9mIHRoZSBhcmNoaXRlY3R1cmVzIGl0IGNhbiBiZSBwYXRjaGVkIHRvIGNhbGwgdGhlCisjIHN5c2NhbGwgZGlyZWN0bHkgYnV0IGZvciB4ODZfNjQgX19OUl9nZXRjcHUgaXMgYSB2c3lzY2FsbAorIyB3aGljaCBtZWFucyB3ZSBjYW4gbm90IHVzZSBzeXNjYWxsKCkgdG8gY2FsbCBpdC4gU28gd2UgaWdub3JlCisjIGl0IGZvciB4ODZfNjQvdWNsaWJjCisKK0xUVE5HVVNUID0gImx0dG5nLXVzdCIKK0xUVE5HVVNUX2xpYmMtdWNsaWJjID0gIiIKK0xUVE5HVVNUX2FhcmNoNjQgPSAiIgorCitMVFROR1RPT0xTID0gImx0dG5nLXRvb2xzIgorTFRUTkdUT09MU19hYXJjaDY0ID0gIiIKKworTFRUTkdNT0RVTEVTID0gImx0dG5nLW1vZHVsZXMiCitMVFROR01PRFVMRVNfYWFyY2g2NCA9ICIiCisKK0JBQkVMVFJBQ0UgPSAiYmFiZWx0cmFjZSIKK0JBQkVMVFJBQ0VfYWFyY2g2NCA9ICIiCisKKyMgdmFsZ3JpbmQgZG9lcyBub3Qgd29yayBvbiBtaXBzCisKK1ZBTEdSSU5EID0gInZhbGdyaW5kIgorVkFMR1JJTkRfbGliYy11Y2xpYmMgPSAiIgorVkFMR1JJTkRfbWlwcyA9ICIiCitWQUxHUklORF9taXBzNjQgPSAiIgorVkFMR1JJTkRfbWlwczY0bjMyID0gIiIKK1ZBTEdSSU5EX2FybSA9ICIiCitWQUxHUklORF9hYXJjaDY0ID0gIiIKKworIyAgICBleG1hcC1jb25zb2xlCisjICAgIGV4bWFwLXNlcnZlcgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtQUk9GSUxFVE9PTFN9IFwKKyAgICAke0xUVE5HVVNUfSBcCisgICAgJHtMVFROR1RPT0xTfSBcCisgICAgJHtMVFROR01PRFVMRVN9IFwKKyAgICAke0JBQkVMVFJBQ0V9IFwKKyAgICAke1NZU1RFTVRBUH0gXAorICAgICR7VkFMR1JJTkR9IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWIzOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcy5iYgpAQCAtMCwwICsxLDU2IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJUZXN0aW5nIHRvb2xzL2FwcGxpY2F0aW9ucyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyMiIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworIyBrZXhlYy10b29scyBkb2Vzbid0IHdvcmsgb24gTWlwcworS0VYRUNUT09MUyA/PSAia2V4ZWMiCitLRVhFQ1RPT0xTX21pcHMgPz0gIiIKK0tFWEVDVE9PTFNfbWlwc2VsID89ICIiCitLRVhFQ1RPT0xTX3Bvd2VycGMgPz0gIiIKK0tFWEVDVE9PTFNfZTU1MDAtNjRiID89ICIiCitLRVhFQ1RPT0xTX2FhcmNoNjQgPz0gIiIKKworWDExR0xUT09MUyA9ICJcCisgICAgbWVzYS1kZW1vcyBcCisgICAgcGlnbGl0IFwKKyAgICAiCisKKzNHVE9PTFMgPSAiXAorICAgIG9mb25vLXRlc3RzIFwKKyAgICAiCisKK1gxMVRPT0xTID0gIlwKKyAgICBmc3Rlc3RzIFwKKyAgICBnc3QtcGxheWVyLWJpbiBcCisgICAgeDExcGVyZiBcCisgICAgeHJlc3RvcCBcCisgICAgeHdpbmluZm8gXAorICAgIHhwcm9wIFwKKyAgICB4dmlkZW8tdGVzdHMgXAorICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJsa3Rvb2wgXAorICAgIHRzbGliLWNhbGlicmF0ZSBcCisgICAgdHNsaWItdGVzdHMgXAorICAgIGxyenN6IFwKKyAgICAke0tFWEVDVE9PTFN9IFwKKyAgICBhbHNhLXV0aWxzLWFtaXhlciBcCisgICAgYWxzYS11dGlscy1hcGxheSBcCisgICAgbHRwIFwKKyAgICBjb25ubWFuLXRvb2xzIFwKKyAgICBjb25ubWFuLXRlc3RzIFwKKyAgICBjb25ubWFuLWNsaWVudCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAiJHtYMTFUT09MU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMSBvcGVuZ2wnLCAiJHtYMTFHTFRPT0xTfSIsICIiLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAiJHszR1RPT0xTfSIsICIiLCBkKX0gXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwZGQ5NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiSG9zdCBTREsgcGFja2FnZSBmb3IgY3Jvc3MgY2FuYWRpYW4gdG9vbGNoYWluIgorUE4gPSAicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjcm9zcy1jYW5hZGlhbiBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSA9ICIxIgorCisjIFVzZSBpbmRpcmVjdGlvbiB0byBzdG9wIHRoZXNlIGJlaW5nIGV4cGFuZGVkIHByZW1hdHVyZWx5CitCSU5VVElMUyA9ICJiaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0NDID0gImdjYy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0RCID0gImdkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdCSU5VVElMUycpfSBcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdHQ0MnKX0gXAorICAgICR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnR0RCJyl9IFwKKyAgICBtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0gXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4YmUyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCkBAIC0wLDAgKzEsMjAyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIlNlbGYtaG9zdGluZyIKK0RFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHJ1biB0aGUgYnVpbGQgc3lzdGVtIgorUFIgPSAicjEzIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwICBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24gbGlieDExLWRldgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWRlYnVnIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZGVidWcgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1zZGsgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWdyYXBoaWNzIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyA9ICJcCisgICAgY29ubm1hbiBcCisgICAgY29ubm1hbi1wbHVnaW4tZXRoZXJuZXQgXAorICAgIGRoY3AtY2xpZW50IFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMgXAorICAgIGUyZnNwcm9ncy10dW5lMmZzIFwKKyAgICBoZHBhcm0gXAorICAgIGlwdGFibGVzIFwKKyAgICBsc2IgXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBwYXJ0ZWQgXAorICAgIHBzZXVkbyBcCisgICAgc2NyZWVuIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ob3N0LXRvb2xzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXR1biBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLXJhdyBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW5hdCBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW1hbmdsZSBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisJIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrID0gIlwKKyAgICBhdXRvY29uZiBcCisgICAgYXV0b21ha2UgXAorICAgIGJpbnV0aWxzIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCisgICAgY2NhY2hlIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBkaXN0Y2MgXAorICAgIGdsaWJjLWdjb252LWlibTg1MCBcCisgICAgZmlsZSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBnKysgXAorICAgIGcrKy1zeW1saW5rcyBcCisgICAgZ2NjIFwKKyAgICBnY2Mtc3ltbGlua3MgXAorICAgIGludGx0b29sIFwKKyAgICBsZGQgXAorICAgIGxlc3MgXAorICAgIGxpYnNzcCBcCisgICAgbGlic3NwLWRldiBcCisgICAgbGlic3NwLXN0YXRpY2RldiBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystZGV2IFwKKyAgICBsaWJ0b29sIFwKKyAgICBtYWtlIFwKKyAgICBta3RlbXAgXAorICAgIHBlcmwtbW9kdWxlLXJlIFwKKyAgICBwZXJsLW1vZHVsZS10ZXh0LXdyYXAgXAorICAgIHBrZ2NvbmZpZyBcCisgICAgcXVpbHQgXAorICAgIHNlZCBcCisgICAgIgorIyBnbGliYy11dGlsczogZm9yIHJwY2dlbgorUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLXNka19hcHBlbmRfbGliYy1nbGliYyA9ICJcCisgICAgZ2xpYmMtdXRpbHMgXAorICAgICIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1kZWJ1ZyA9ICIgXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICByc3luYyBcCisgICAgc3RyYWNlIFwKKyAgICB0Y2YtYWdlbnQiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWV4dGVuZGVkID0gIlwKKyAgICBiemlwMiBcCisgICAgY2hrY29uZmlnIFwKKyAgICBjaHJwYXRoIFwKKyAgICBjcGlvIFwKKyAgICBjdXJsIFwKKyAgICBkaWZmc3RhdCBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZXhwYXQgXAorICAgIGdhd2sgXAorICAgIGdkYm0gXAorICAgIGdldHRleHQgXAorICAgIGdldHRleHQtcnVudGltZSBcCisgICAgZ2l0IFwKKyAgICBnaXQtcGVybHRvb2xzIFwKKyAgICBncmVwIFwKKyAgICBncm9mZiBcCisgICAgZ3ppcCBcCisgICAgc2V0dGluZ3MtZGFlbW9uIFwKKyAgICBoaWNvbG9yLWljb24tdGhlbWUgXAorICAgIHNhdG8taWNvbi10aGVtZSBcCisgICAgbGliYWlvIFwKKyAgICBsaWJ1c2IxIFwKKyAgICBsaWJ4bWwyIFwKKyAgICBscnpzeiBcCisgICAgbHNvZiBcCisgICAgbHpvIFwKKyAgICBtYW4gXAorICAgIG1hbi1wYWdlcyBcCisgICAgbWRhZG0gXAorICAgIG1pbmljb20gXAorICAgIG10b29scyBcCisgICAgbmN1cnNlcyBcCisgICAgbmN1cnNlcy10ZXJtaW5mby1iYXNlIFwKKyAgICBuZW9uIFwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgIG9wZW5zc2wgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgIG9wa2cgXAorICAgIG9wa2ctdXRpbHMgXAorICAgIHBhdGNoIFwKKyAgICBwZXJsIFwKKyAgICBwZXJsLWRldiBcCisgICAgcGVybC1tb2R1bGVzIFwKKyAgICBwZXJsLXBvZCBcCisgICAgJHtQVEh9IFwKKyAgICBweXRob24gXAorICAgIHB5dGhvbi1jb21waWxlciBcCisgICAgcHl0aG9uLWdpdCBcCisgICAgcHl0aG9uLW1pc2MgXAorICAgIHB5dGhvbi1tb2R1bGVzIFwKKyAgICBweXRob24tcnBtIFwKKyAgICBxdW90YSBcCisgICAgcmVhZGxpbmUgXAorICAgIHJwbSBcCisgICAgc2V0c2VyaWFsIFwKKyAgICBzb2NhdCBcCisgICAgc3VidmVyc2lvbiBcCisgICAgc3VkbyBcCisgICAgc3lzc3RhdCBcCisgICAgdGFyIFwKKyAgICB0Y2wgXAorICAgIHRleGkyaHRtbCBcCisgICAgdGV4aW5mbyBcCisgICAgdW56aXAgXAorICAgIHVzYnV0aWxzIFwKKyAgICB3YXRjaGRvZyBcCisgICAgd2dldCBcCisgICAgd2hpY2ggXAorICAgIHhpbmV0ZCBcCisgICAgemlwIFwKKyAgICB6bGliIFwKKyAgICB4eiBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyA9ICJcCisgICAgYnVpbGRlciBcCisgICAgbGliZ2wgXAorICAgIGxpYmdsLWRldiBcCisgICAgbGliZ2x1IFwKKyAgICBsaWJnbHUtZGV2IFwKKyAgICBsaWJzZGwgXAorICAgIGxpYnNkbC1kZXYgXAorICAgIGxpYngxMS1kZXYgXAorICAgIHB5dGhvbi1weWd0ayBcCisgICAgZ3RrLXRoZW1lLWNsZWFybG9va3MgXAorICAgIHhkZy11dGlscyBcCisgICAgZXBpcGhhbnkgXAorICAgIGxlYWZwYWQgXAorICAgIHBjbWFuZm0gXAorICAgIHZ0ZSBcCisgICAgIgorUFRIID0gInB0aCIKK1BUSF9saWJjLXVjbGliYyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvMDAwMS1wc3BsYXNoLWZiLUNvbnZlcnQtcHNwbGFzaF9mYl9wbG90X3BpeGVsLXRvLWEtc3RhdGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjNjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDhmNWRlMTJjYzc1YmZhYTg0MDBhZGYzMmYzMGMwMTVkOGY4MTM1NDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMiBBdWcgMjAxNSAwNzoxMjoyMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBwc3BsYXNoLWZiOiBDb252ZXJ0IHBzcGxhc2hfZmJfcGxvdF9waXhlbCgpIHRvIGEgc3RhdGljCisgaW5saW5lCisKK1RoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgb3V0c2lkZSBwc3BsYXNoLWZiLmMgYW5kIGJ5IG1ha2luZyBpdAorc3RhdGljIGlubGluZSB3ZSBrZWVwIHRoZSBwZXJmb3JtYW5jZSBhbmQgYWxzbyBtYWtlIGl0IHBvcnRhYmxlIGFjcm9zcworbXVsdGlwbGUgY29tcGlsZXJzIGFuZCBnY2MgdmVyc2lvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBwc3BsYXNoLWZiLmMgfCAyICstCisgcHNwbGFzaC1mYi5oIHwgOCAtLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wc3BsYXNoLWZiLmMgYi9wc3BsYXNoLWZiLmMKK2luZGV4IGJkOWNkOWQuLjZkMjM1ZGIgMTAwNjQ0CistLS0gYS9wc3BsYXNoLWZiLmMKKysrKyBiL3BzcGxhc2gtZmIuYworQEAgLTI2MCw3ICsyNjAsNyBAQCBwc3BsYXNoX2ZiX25ldyAoaW50IGFuZ2xlKQorIAorICNkZWZpbmUgT0ZGU0VUKGZiLHgseSkgKCgoeSkgKiAoZmIpLT5zdHJpZGUpICsgKCh4KSAqICgoZmIpLT5icHAgPj4gMykpKQorIAorLWlubGluZSB2b2lkCisrc3RhdGljIGlubGluZSB2b2lkCisgcHNwbGFzaF9mYl9wbG90X3BpeGVsIChQU3BsYXNoRkIgICAgKmZiLAorIAkJICAgICAgIGludCAgICAgICAgICB4LAorIAkJICAgICAgIGludCAgICAgICAgICB5LAorZGlmZiAtLWdpdCBhL3BzcGxhc2gtZmIuaCBiL3BzcGxhc2gtZmIuaAoraW5kZXggNDI1OTJlZC4uYzZjMzE0NCAxMDA2NDQKKy0tLSBhL3BzcGxhc2gtZmIuaAorKysrIGIvcHNwbGFzaC1mYi5oCitAQCAtNTcsMTQgKzU3LDYgQEAgcHNwbGFzaF9mYl9kZXN0cm95IChQU3BsYXNoRkIgKmZiKTsKKyBQU3BsYXNoRkIqCisgcHNwbGFzaF9mYl9uZXcgKGludCBhbmdsZSk7CisgCistaW5saW5lIHZvaWQKKy1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwgKFBTcGxhc2hGQiAgICAqZmIsIAorLQkJICAgICAgIGludCAgICAgICAgICB4LCAKKy0JCSAgICAgICBpbnQgICAgICAgICAgeSwgCistCQkgICAgICAgdWludDggICAgICAgIHJlZCwKKy0JCSAgICAgICB1aW50OCAgICAgICAgZ3JlZW4sCistCQkgICAgICAgdWludDggICAgICAgIGJsdWUpOworLQorIHZvaWQKKyBwc3BsYXNoX2ZiX2RyYXdfcmVjdCAoUFNwbGFzaEZCICAgICpmYiwgCisgCQkgICAgICBpbnQgICAgICAgICAgeCwgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0IGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjZjODVlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaCAKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHBzcGxhc2gKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHBzcGxhc2g9ZmFsc2UpCisJCWVjaG8gIkJvb3Qgc3BsYXNoc2NyZWVuIGRpc2FibGVkIiAKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworZXhwb3J0IFRNUERJUj0vbW50Ly5wc3BsYXNoCittb3VudCB0bXBmcyAtdCB0bXBmcyAkVE1QRElSIC1vLHNpemU9NDBrCisKK3JvdGF0aW9uPTAKK2lmIFsgLWUgL2V0Yy9yb3RhdGlvbiBdOyB0aGVuCisJcmVhZCByb3RhdGlvbiA8IC9ldGMvcm90YXRpb24KK2ZpCisKKy91c3IvYmluL3BzcGxhc2ggLS1hbmdsZSAkcm90YXRpb24gJgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaCBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTZhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApAQCAtMCwwICsxLDEyNTkgQEAKKy8qIEdka1BpeGJ1ZiBSR0IgQy1Tb3VyY2UgaW1hZ2UgZHVtcCAxLWJ5dGUtcnVuLWxlbmd0aC1lbmNvZGVkICovCisKKyNkZWZpbmUgUE9LWV9JTUdfUk9XU1RSSURFICgxOTIwKQorI2RlZmluZSBQT0tZX0lNR19XSURUSCAoNjQwKQorI2RlZmluZSBQT0tZX0lNR19IRUlHSFQgKDQ4MCkKKyNkZWZpbmUgUE9LWV9JTUdfQllURVNfUEVSX1BJWEVMICgzKSAvKiAzOlJHQiwgNDpSR0JBICovCisjZGVmaW5lIFBPS1lfSU1HX1JMRV9QSVhFTF9EQVRBICgodWludDgqKSBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIzN1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MSIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3IiBcCisgICJcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM2M1wzNzZcMzc3XDM3NFwzXDM3M1wzNzUiIFwKKyAgIlwzNzJcMzYwXDM2NlwzNzBcMzUzXDM2MFwzNjNcMjAyXDM0N1wzNTVcMzU3XDVcMzQ2XDM1NFwzNTZcMzQ3XDM1NVwzNTciIFwKKyAgIlwzNTFcMzU2XDM2MFwzNjBcMzY2XDM3MFwzNzFcMzczXDM3MFwzNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzUzXDM3NlwzNzdcMzc0XDEwXDM1NiIgXAorICAiXDM2M1wzNjZcMzI0XDMzMVwzMzNcMjc3XDMwNFwzMDZcMjUyXDI2MlwyNzJcMjI3XDIzN1wyNDd9XDIyMFwyMzNwXDIwMyIgXAorICAiXDIxNmV3XDIwMlwyMTJdb3pcMTBkdlwyMDFuXDIwMVwyMTR+XDIxNVwyMjNcMjE2XDIzNlwyNDRcMjQ3XDI1N1wyNjciIFwKKyAgIlwyNzRcMzAxXDMwM1wzMjBcMzI2XDMzMFwzNTJcMzU3XDM2MlwzNTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzQ2XDM3NlwzNzdcMzc0XDVcMzY2IiBcCisgICJcMzcwXDM2NFwzMjBcMzI2XDMzMFwyNTVcMjY1XDI3NVwyMTBcMjI3XDIzNWp9XDIxMFwyMzJdb3pcNWd5XDIwNFwyMDQiIFwKKyAgIlwyMjNcMjMxXDI1MFwyNjBcMjcwXDMxNFwzMjFcMzI0XDM1NVwzNjJcMzY1XDM0NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNDJcMzc2XDM3NyIgXAorICAiXDM3NFw1XDM3M1wzNzVcMzcyXDMyN1wzMzRcMzM3XDI1M1wyNjNcMjczeFwyMTNcMjI3XnB7XDI0M11velw0cVwyMDQiIFwKKyAgIlwyMTdcMjQyXDI1MlwyNjJcMzIwXDMyNlwzMzBcMzY1XDM3MlwzNzVcMzQyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMzN1wzNzZcMzc3XDM3NCIgXAorICAiXDRcMzcxXDM3M1wzNzBcMzE3XDMyNFwzMjdcMjI1XDI0NVwyNTNld1wyMDJcMjUyXW96XDRidFwxNzdcMjExXDIzMFwyMzYiIFwKKyAgIlwzMDZcMzE0XDMxNlwzNjdcMzcxXDM2NlwzMzdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzM1XDM3NlwzNzdcMzc0XDNcMzMzXDM0MFwzNDNcMjM2IiBcCisgICJcMjQ2XDI1NmZ4XDIwM1wyNjBdb3pcM2J0XDE3N1wyMjVcMjM1XDI0NVwzMjBcMzI2XDMzMFwzMzVcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzMyIiBcCisgICJcMzc2XDM3N1wzNzRcM1wzNjdcMzcxXDM2NlwyNzZcMzAzXDMwNXVcMjEwXDIyNFwyNjZdb3pcM21cMjAwXDIxM1wyNTciIFwKKyAgIlwyNjdcMjc3XDM1NVwzNjJcMzY1XDMzMlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMzBcMzc2XDM3N1wzNzRcM1wzNTNcMzYwXDM2M1wyNTJcMjYyIiBcCisgICJcMjcyZnhcMjAzXDI3Ml1velwzYXN+XDIzMFwyNTBcMjU2XDM0MlwzNDdcMzUyXDMzMFwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMjZcMzc2XDM3NyIgXAorICAiXDM3NFwzXDM1MlwzNTdcMzYyXDIzNlwyNDZcMjU2YXN+XDI3Nl1velwzXnB7XDIxNlwyMzZcMjQ0XDM0MVwzNDZcMzUxIiBcCisgICJcMzI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDMyNFwzNzZcMzc3XDM3NFwzXDM1NFwzNjFcMzY0XDI0NlwyNTZcMjY2YXN+XDMwMl1velwzXnAiIFwKKyAgIntcMjI3XDIzN1wyNDdcMzQ2XDM1NFwzNTZcMzI0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMlwzNzZcMzc3XDM3NFwzXDM3MlwzNzRcMzcxXDI2NSIgXAorICAiXDI3NlwzMDZmeFwyMDNcMzA2XW96XDNhc35cMjUwXDI2MFwyNzBcMzYyXDM2N1wzNzFcMzIyXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzIwXDMyNlwzMzBwXDIwM1wyMTZcMzEyXW96XDJoelwyMDVcMzAyXDMwN1wzMTJcMzIxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzE3XDM3NlwzNzdcMzc0XDJcMzU2XDM2M1wzNjZcMjMxXDI0MVwyNTFcMzE2XW96XDJcMjA0XDIyM1wyMzFcMzQ1XDM1MiIgXAorICAiXDM1NVwzMTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMzE2XDM3NlwzNzdcMzc0XDJcMzExXDMxNlwzMjFpe1wyMDZcMzIwXW96XDJidFwxNzdcMjY0IiBcCisgICJcMjc0XDMwNVwzMTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzE0XDM3NlwzNzdcMzc0XDJcMzYyXDM2N1wzNzFcMjI2XDI0NlwyNTRcMzI0XW8iIFwKKyAgInpcMlwyMDZcMjI1XDIzM1wzNTNcMzYwXDM2M1wzMTRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEzXDM3NlwzNzdcMzc0XDJcMzM0XDM0MlwzNDRvXDIwMiIgXAorICAiXDIxNVwzMjZdb3pcMmd5XDIwNFwzMTVcMzIyXDMyNVwzMTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEyXDM3NlwzNzdcMzc0XDJcMzAyXDMwN1wzMTIiIFwKKyAgImFzflwzMzBdb3pcM15we1wyNTRcMjY0XDI3NFwzNzNcMzc1XDM3MlwzMTFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEwXDM3NlwzNzdcMzc0XDJcMzcyIiBcCisgICJcMzc0XDM3MVwyMzZcMjQ2XDI1NlwzMzRdb3pcMlwyMTBcMjI3XDIzNVwzNjBcMzY2XDM3MFwzMTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA3IiBcCisgICJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2XDM3MFwyMDVcMjI0XDIzMlwzMzZdb3pcMnNcMjA2XDIyMVwzNDdcMzU1XDM1NyIgXAorICAiXDMwN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzMDZcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N3RcMjA3XDIyMlwzNDBdb3pcMml7XDIwNlwzMzMiIFwKKyAgIlwzNDBcMzQzXDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDVcMzc2XDM3N1wzNzRcMlwzNDNcMzUwXDM1M2p9XDIxMFwyNTFdb3pcN2J0XDE3NyIgXAorICAid1wyMTJcMjI2XDIxNVwyMzRcMjQzXDIzNlwyNDZcMjU2XDI0NlwyNTZcMjY2XDI1NFwyNjRcMjc0XDI2NFwyNzRcMzA1IiBcCisgICJcMjAyXDMwMFwzMDVcMzEwXDdcMjY0XDI3NFwzMDVcMjU1XDI2NVwyNzVcMjUwXDI2MFwyNzBcMjMzXDI1MlwyNjFcMjIyIiBcCisgICJcMjQxXDI0N35cMjE1XDIyM2V3XDIwMlwyNTFdb3pcMmN1XDIwMFwzMjJcMzMwXDMzMlwzMDVcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA0XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzMzdcMzQ0XDM0Nml7XDIwNlwyNDVdb3pcNWp9XDIxMFwyMzBcMjQwXDI1MFwyNzBcMzAwXDMxMVwzMjIiIFwKKyAgIlwzMzBcMzMyXDM1MVwzNTZcMzYwXDIyMFwzNzZcMzc3XDM3NFw1XDM1NFwzNjFcMzY0XDMyNlwzMzNcMzM1XDMwMFwzMDUiIFwKKyAgIlwzMTBcMjM2XDI0NlwyNTZwXDIwM1wyMTZcMjQ1XW96XDJhc35cMzE2XDMyM1wzMjZcMzA0XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVneVwyMDRcMjQyXW96XDRld1wyMDJcMjIyXDI0MVwyNDdcMjc2XDMwM1wzMDVcMzQyIiBcCisgICJcMzQ3XDM1MlwyMzJcMzc2XDM3N1wzNzRcNFwzNTJcMzU3XDM2MlwzMDRcMzExXDMxNFwyMzNcMjQzXDI1M2p9XDIxMCIgXAorICAiXDI0Ml1velwyYXN+XDMxM1wzMjBcMzIyXDMwM1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDJcMzc2XDM3N1wzNzRcMlwzNDFcMzQ2XDM1MWh6IiBcCisgICJcMjA1XDI0MF1velw0X3F8XDIxMVwyMzBcMjM2XDMwN1wzMTVcMzE3XDM3MFwzNzJcMzY3XDI0MFwzNzZcMzc3XDM3NCIgXAorICAiXDRcMzczXDM3NVwzNzJcMzIwXDMyNlwzMzBcMjMxXDI0MVwyNTFidFwxNzdcMjQwXW96XDJhc35cMzE3XDMyNFwzMjciIFwKKyAgIlwzMDJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzAxXDM3NlwzNzdcMzc0XDJcMzQzXDM1MFwzNTNpe1wyMDZcMjM3XW96XDNxXDIwNFwyMTdcMjY2IiBcCisgICJcMjc3XDMwN1wzNTRcMzYxXDM2NFwyNDZcMzc2XDM3N1wzNzRcM1wzNjZcMzcwXDM2NFwzMDNcMzEwXDMxM1wxNzdcMjE2IiBcCisgICJcMjI0XDIzN11velwyYnRcMTc3XDMyNVwzMzJcMzM0XDMwMVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDBcMzc2XDM3N1wzNzRcMlwzNTVcMzYyXDM2NSIgXAorICAibFwxNzdcMjEyXDIzNl1velwzdVwyMTBcMjI0XDMwN1wzMTVcMzE3XDM3M1wzNzVcMzcyXDI1M1wzNzZcMzc3XDM3NFwyIiBcCisgICJcMzI0XDMzMVwzMzNcMjA0XDIyM1wyMzFcMjM2XW96XDJld1wyMDJcMzQxXDM0NlwzNTFcMzAwXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzY1XDM3MlwzNzVcMTc3XDIxNlwyMjRcMjM1XW96XDJ+XDIxNVwyMjNcMzE1XDMyMlwzMjVcMjYwIiBcCisgICJcMzc2XDM3N1wzNzRcMlwzMzFcMzM2XDM0MVwyMTFcMjMwXDIzNlwyMzVdb3pcMmxcMTc3XDIxMlwzNTNcMzYwXDM2MyIgXAorICAiXDI3N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNzdcMzc2XDM3N1wzNzRcMVwyMTRcMjMzXDI0MlwyMzRdb3pcMml7XDIwNlwzMDVcMzEyXDMxNSIgXAorICAiXDI2NFwzNzZcMzc3XDM3NFwyXDMyNFwzMzFcMzMzcVwyMDRcMjE3XDIzNF1velwydVwyMTBcMjI0XDM2N1wzNzFcMzY2IiBcCisgICJcMjc2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI3NlwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIzM11velwzXnB7XDI0MlwyNTJcMjYyXDM2MiIgXAorICAiXDM2N1wzNzFcMjY2XDM3NlwzNzdcMzc0XDNcMzcyXDM3NFwzNzFcMjYxXDI3MVwzMDJidFwxNzdcMjMzXW96XDFcMjI1IiBcCisgICJcMjM1XDI0NVwyNzZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjc1XDM3NlwzNzdcMzc0XDJcMzE3XDMyNFwzMjdecHtcMjMyXW96XDJ3XDIxMlwyMjYiIFwKKyAgIlwzMzVcMzQzXDM0NVwyNzJcMzc2XDM3N1wzNzRcMlwzNTFcMzU2XDM2MFwyMTFcMjMwXDIzNlwyMzNdb3pcMVwyNjRcMjc0IiBcCisgICJcMzA1XDI3NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzRcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N2V3XDIwMlwyMzJdb3pcMlwyNDJcMjUyIiBcCisgICJcMjYyXDM3MVwzNzNcMzcwXDIyNVwzNzZcMzc3XDM3NFwxMFwzMzZcMzY3XDM3NFwyNjJcMzU1XDM3MFwyMjBcMzQzXDM2MSIgXAorICAibVwzMzJcMzYxR1wzMTdcMzUzLFwzMTFcMzUyKFwzMDdcMzUwI1wzMDRcMzQ2XDIwMlwwXDMwMVwzNTBcMTBcMFwzMDQiIFwKKyAgIlwzNTIoXDMwN1wzNTAsXDMxMVwzNTJCXDMxNFwzNDdpXDMyNlwzNTZcMjA3XDM0MVwzNjRcMjYwXDM1M1wzNjZcMzMzIiBcCisgICJcMzY0XDM3MVwyMjZcMzc2XDM3N1wzNzRcMlwyNjZcMjc3XDMwN2FzflwyMzFdb3pcMl9xfFwzMjdcMzM0XDMzN1wyNzQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzNcMzc2XDM3N1wzNzRcMlwzNzNcMzc1XDM3Mn1cMjIwXDIzM1wyMzFdb3pcMmV3XDIwMlwzMTNcMzIwIiBcCisgICJcMzIyXDIyM1wzNzZcMzc3XDM3NFw0XDMzNFwzNjVcMzcyXDIzM1wzNDVcMzY0TVwzMjNcMzU3XDBcMzA0XDM1MlwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMFwzMDFcMzUwSlwzMjFcMzU1XDIxMVwzNDJcMzY1XDMxNFwzNjFcMzcyXDIyM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzMyXDMzN1wzNDJtXDIwMFwyMTNcMjMxXW96XDJsXDE3N1wyMTJcMzYwXDM2NlwzNzBcMjczXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjczXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMxXW96XDJ4XDIxM1wyMjdcMzQ3XDM1NVwzNTdcMjIxXDM3NiIgXAorICAiXDM3N1wzNzRcM1wzMzZcMzY3XDM3NFwyMDZcMzQwXDM2MypcMzEwXDM1MVwyMzJcMjVcMjc0XDM0NFwzI1wzMDRcMzQ2IiBcCisgICJ3XDMzM1wzNTZcMzE2XDM2M1wzNzRcMjIxXDM3NlwzNzdcMzc0XDJcMzYwXDM2NlwzNzBcMjE0XDIzM1wyNDJcMjMxXSIgXAorICAib3pcMVwyMjdcMjM3XDI0N1wyNzNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVfcXxcMjMwXW96IiBcCisgICJcMlwyMTBcMjI3XDIzNVwzNjRcMzcxXDM3NFwyMTdcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyNTZcMzUwXDM2NCIgXAorICAiQlwzMTRcMzQ3XDI0MFwyNVwyNzRcMzQ0XDMqXDMxMFwzNTFcMjMzXDM0NVwzNjRcMzY3XDM3NVwzNzdcMjE3XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNzNcMzc1XDM3MlwyNDJcMjUyXDI2MlwyMzFdb3pcMVwzMDVcMzEyXDMxNVwyNzJcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNzJcMzc0XDM3MXdcMjEyXDIyNlwyMzBdb3pcMlwyMzFcMjQxXDI1MVwzNzJcMzc0XDM3MVwyMTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3XDIzM1wzNDVcMzY0KFwzMDdcMzUwXDI0NFwyNVwyNzRcMzQ0XDNcMFwzMDIiIFwKKyAgIlwzNTFcMjA2XDM0MFwzNjNcMzU2XDM3M1wzNzRcMjE3XDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDJoIiBcCisgICJ6XDIwNVwzNTZcMzYzXDM2NlwyNzFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDFcMjQ2IiBcCisgICJcMjU2XDI2NlwyMTdcMzc2XDM3N1wzNzRcMlwyMzdcMzUwXDM2N1wwXDMwNFwzNTJcMjUwXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDdcMzQxXDM2NFwzNzBcMzc2XDM3N1wyMTZcMzc2XDM3N1wzNzRcMlwyNzdcMzA0XDMwNl9xfFwyMjddb3oiIFwKKyAgIlwxXDIzMVwyNDFcMjUxXDI3MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMlwzNDZcMzU0XDM1NmJ0XDE3N1wyMjddb3pcMSIgXAorICAiXDI1MVwyNjFcMjcxXDIxNlwzNzZcMzc3XDM3NFwyXDMxNVwzNjJcMzczMVwzMTNcMzU0XDI1NFwyNVwyNzRcMzQ0XDIiIFwKKyAgIihcMzA3XDM1MFwyNjJcMzU1XDM3MFwyMTZcMzc2XDM3N1wzNzRcMlwzMDVcMzEyXDMxNV5we1wyMjddb3pcMVwzMjJcMzMwIiBcCisgICJcMzMyXDI3MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjddb3pcMVwyMzNcMjUyXDI2MVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3bVwzMzJcMzYxXDBcMjc2XDM0NVwyNTdcMjVcMjc0XDM0NFwyTFwzMjJcMzU2IiBcCisgICJcMzU2XDM3M1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjI3XW96XDJ0XDIwN1wyMjJcMzczXDM3NSIgXAorICAiXDM3MlwyNjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY3XDM3NlwzNzdcMzc0XDFcMzI1XDMzMlwzMzRcMjI3XW96XDJcMjE0XDIzM1wyNDJcMzczIiBcCisgICJcMzc1XDM3MlwyMTRcMzc2XDM3N1wzNzRcMlwzMzNcMzY0XDM3MSxcMzExXDM1MlwyNjJcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDMwMVwzNTZcMzY2XDIxNVwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyN11velwxXDI3NFwzMDFcMzAzXDI2NyIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI2N1wzNzZcMzc3XDM3NFwxdlwyMTFcMjI1XDIyNl1velwyXDIwNVwyMjRcMjMyXDM2NVwzNzJcMzc1IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDI2NFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIwMyIgXAorICAiXDMzNFwzNjBcMzcwXDM3NlwzNzdcMjE0XDM3NlwzNzdcMzc0XDFcMjM2XDI0NlwyNTZcMjI2XW96XDJoelwyMDVcMzYyIiBcCisgICJcMzY3XDM3MVwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY2XDM3NlwzNzdcMzc0XDFcMzA3XDMxNVwzMTdcMjI2XW96XDJuXDIwMVwyMTQiIFwKKyAgIlwzNjBcMzY2XDM3MFwyMTRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyNzBcMjVcMjc0XDM0NFwySVwzMjBcMzU0XDM2NiIgXAorICAiXDM3M1wzNzZcMjEzXDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJcMjAzXDIyMlwyMzBcMjI2XW96XDFcMjU0XDI2NFwyNzQiIFwKKyAgIlwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJzXDIwNlwyMjFcMjI1XW96XDJhc35cMzMzXDM0MCIgXAorICAiXDM0M1wyMTNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N01cMzIzXDM1N1wyNzJcMjVcMjc0XDM0NFwyIiIxXDMxM1wzNTQiIFwKKyAgIlwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzNTNcMzYwXDM2M2l7XDIwNlwyMjVdb3pcMmV3XDIwMlwzNTdcMzY1IiBcCisgICJcMzY3XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjVcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjZdb3pcMVwyNjVcMjc2XDMwNlwyMTMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2QlwzMTRcMzQ3XDI3NFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzM2XDM2NyIgXAorICAiXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzMjJcMzMwXDMzMl5we1wyMjVdb3pcMVwyNTJcMjYyXDI3MlwyNjVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNjVcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjVdb3pcMVwyMTRcMjMzXDI0MlwyMTNcMzc2XDM3N1wzNzRcMlwzNjYiIFwKKyAgIlwzNzNcMzc2QlwzMTRcMzQ3XDI3NlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM3XDM3MFwzNzVcMjEzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyNTNcMjYzXDI3M1wyMjVdb3pcMmZ4XDIwM1wzNjdcMzcxXDM2NlwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMjJcMzMwXDMzMlwyMjVdb3pcMml7XDIwNlwzNjBcMzY2XDM3MFwyMTJcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3NyIgXAorICAiSVwzMjBcMzU0XDMwMFwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzU3XDM3NFwzNzVcMjEyXDM3NlwzNzdcMzc0XDJcMzczIiBcCisgICJcMzc1XDM3Mn5cMjE1XDIyM1wyMjVdb3pcMVwyNjRcMjc0XDMwNVwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMjEwIiBcCisgICJcMjI3XDIzNVwyMjVdb3pcMVwzMDNcMzEwXDMxM1wyMTNcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwzMDJcMjVcMjc0XDM0NCIgXAorICAiXDJCXDMxNFwzNDdcMzcwXDM3NlwzNzdcMjEyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVecHtcMjI0XW96XDJtXDIwMCIgXAorICAiXDIxM1wzNzNcMzc1XDM3MlwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYzXDM3NlwzNzdcMzc0XDJcMzQ1XDM1MlwzNTVecHtcMjI0XW96IiBcCisgICJcMX5cMjIxXDIzNVwyMTNcMzc2XDM3N1wzNzRcMXlcMzM2XDM2MFwzMDRcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMyIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjI1XW96XDFcMzE1XDMyMlwzMjVcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjUyXDI2MlwyNzJcMjI0XW96XDJfcXxcMzQxXDM0NlwzNTFcMjEyXDM3NlwzNzdcMzc0XDJcMjc0XDM1NSIgXAorICAiXDM3M1wwXDI3NlwzNDVcMzA1XDI1XDI3NFwzNDRcMVwyMjBcMzQzXDM2MVwyMTJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2IiBcCisgICJcMzcwaXtcMjA2XDIyNF1velwxXDIxMVwyMzBcMjM2XDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjJcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MSIgXAorICAiaXtcMjA2XDIyNF1velwxXDI1MFwyNjBcMjcwXDIxMlwzNzZcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMzA0XDM1MlwzMDYiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMxNlwzNjNcMzc0XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNCIgXAorICAiXW96XDJecHtcMzUyXDM1N1wzNjJcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MlwzNzZcMzc3XDM3NFwxXDMxNVwzMjJcMzI1XDIyNF1vIiBcCisgICJ6XDJkdlwyMDFcMzU3XDM2NVwzNjdcMjEyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjQwXDI1XDI3NFwzNDRcM1wwXDMwMiIgXAorICAiXDM1MSxcMzExXDM1MkpcMzIxXDM1NVwyMDNMXDMyMlwzNTZcMkJcMzE0XDM0NyNcMzA0XDM0NlwyNDBcMjVcMjc0XDM0NCIgXAorICAiXDIqXDMxMFwzNTFcMzY3XDM3NVwzNzdcMjEyXDM3NlwzNzdcMzc0XDFxXDIwNFwyMTdcMjI0XW96XDFcMjU3XDI2N1wyNzciIFwKKyAgIlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjI0XW96XDFcMjQ3XDI1N1wyNjdcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMzVcMjVcMjc0XDM0NFw0KlwzMTBcMzUxblwzMzNcMzYyXDI3M1wzNTRcMzcxIiBcCisgICJcMzYwXDM3NVwzNzZcMjEwXDM3NlwzNzdcMzc0XDRcMzU3XDM3NFwzNzVcMzAzXDM2MVwzNzBcMjA2XDM0MFwzNjMvXDMxMiIgXAorICAiXDM1M1wyMzVcMjVcMjc0XDM0NFwxd1wzMzNcMzU2XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNF1velwxIiBcCisgICJ2XDIxMVwyMjVcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1ZHZcMjAxXDIyM11velwyYXN+IiBcCisgICJcMzUzXDM2MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRcMFwzMDJcMzUxXDIzMlwyNVwyNzRcMzQ0XDMiIFwKKyAgIlwwXDI3NlwzNDVtXDMzMlwzNjFcMzM1XDM2NlwzNzNcMjIwXDM3NlwzNzdcMzc0XDJcMzM2XDM2N1wzNzQoXDMwN1wzNTAiIFwKKyAgIlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxIiBcCisgICJuXDIwMVwyMTRcMjI0XW96XDFcMzQzXDM1MFwzNTNcMjYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwxXDMxM1wzMjBcMzIyIiBcCisgICJcMjI0XW96XDFcMjMzXDI1MlwyNjFcMjEyXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTdcMjMxXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDZcMzQwXDM2M1wzNTdcMzc0XDM3NVwyMjJcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMzJcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDFcMjc2XDMwM1wzMDVcMjI0XW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW96XDJecHtcMzQ3XDM1NVwzNTciIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMlwzMTZcMzYzXDM3NFwwXDI3NlwzNDVcMjMwXDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzMzciIFwKKyAgIlwzNzBcMzc1XDIyM1wzNzZcMzc3XDM3NFwxa1wzMjdcMzU3XDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2NyIgXAorICAiXDM3NFwyMTVcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N2l7XDIwNlwyMjNdb3pcMVwxNzdcMjE2XDIyNFwyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMWt+XDIxMVwyMjNdb3pcMVwyMDVcMjI0XDIzMlwyMTJcMzc2XDM3N1wzNzRcMUoiIFwKKyAgIlwzMjFcMzU1XDIyN1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDI1N1wzNTFcMzY1XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzIiIFwKKyAgIlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTdcMzc2XDM3N1wzNzRcMVwyNDZcMjU2IiBcCisgICJcMjY2XDIyM11velwyXnB7XDM1NlwzNjNcMzY2XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwzMzVcMzQzXDM0NSIgXAorICAiXDIyNF1velwxXDMwM1wzMTBcMzEzXDIxMVwzNzZcMzc3XDM3NFwyXDMzM1wzNjRcMzcxXDBcMjc2XDM0NVwyMjZcMjUiIFwKKyAgIlwyNzRcMzQ0XDIjXDMwNFwzNDZcMzE2XDM2M1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NCIgXAorICAiXDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIyMFwzNzZcMzc3XDM3NFwxXDMzNVwzNDNcMzQ1XDIyNF1velwxXDMwNiIgXAorICAiXDMxNFwzMTZcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI2NFwyNzRcMzA1XDIyM11velwyY3VcMjAwXDM2NyIgXAorICAiXDM3MVwzNjZcMjExXDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjI2XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNDdcMzcwIiBcCisgICJcMzc2XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMjJcMzc2XDM3N1wzNzRcMXRcMjA3XDIyMlwyMjNdb3pcMVwyMzZcMjQ2XDI1NlwyNjBcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjNdb3pcMVwyMzFcMjQxXDI1MVwyMTFcMzc2XDM3N1wzNzRcMlwzNDdcMzcwIiBcCisgICJcMzc2XDBcMjc2XDM0NVwyMjVcMjVcMjc0XDM0NFwyKlwzMTBcMzUxXDM1N1wzNzRcMzc1XDIyNFwzNzZcMzc3XDM3NCIgXAorICAiXDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMjNcMzc2XDM3N1wzNzRcMVwyNjEiIFwKKyAgIlwyNzFcMzAyXDIyM11velwxcVwyMDRcMjE3XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMWl7XDIwNlwyMjNdb3pcMSIgXAorICAiXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyNVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDYiIFwKKyAgIlwzMzdcMzcwXDM3NVwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNiIgXAorICAiXDM2N1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjI0XW96XDFcMzU2XDM2M1wzNjZcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMzQ1XDM1MlwzNTVcMjIzXW96XDJhc35cMzcwXDM3MlwzNjdcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMSxcMzExXDM1MlwyMjRcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTNcMzYwXDM3MVwyMjRcMzc2XDM3N1wzNzRcMSIgXAorICAibVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjI2XDM3NlwzNzdcMzc0XDFxXDIwNCIgXAorICAiXDIxN1wyMjNdb3pcMVwzMTRcMzIxXDMyNFwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMzExXDMxNlwzMjFcMjIzIiBcCisgICJdb3pcMVwyMDJcMjIxXDIyN1wyMTFcMzc2XDM3N1wzNzRcMVwzMjBcMzY1XDM3NlwyMjVcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3IiBcCisgICJcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDIzN1wzNTBcMzY3XDIxMVwzNzZcMzc3XDM3NFwxXDIzNiIgXAorICAiXDI0NlwyNTZcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDI1NFwyNjRcMjc0IiBcCisgICJcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjExXDM3NlwzNzdcMzc0XDF5XDMzNlwzNjBcMjI0XDI1XDI3NFwzNDRcMi9cMzEyIiBcCisgICJcMzUzXDM3MFwzNzZcMzc3XDIyM1wzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDciIFwKKyAgIlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcM1wyMzZcMzQ3XDM2NlwwXDI3NlwzNDVKXDMyMVwzNTVcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMTFcMzE2XDMyMVwyMjNdb3pcMVwyMTVcMjM0XDI0M1wyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMTRcMjMzXDI0MlwyMjNdb3pcMVwzMjZcMzMzXDMzNVwyMTFcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMjRcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMzEyXDM1N1wzNzBcMjIzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFw1XDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyNVwyNzRcMzQ0XDAiIFwKKyAgIlwyNzZcMzQ1XDM2N1wzNzVcMzc3XDIxMFwzNzZcMzc3XDM3NFwyXDM1NlwzNjNcMzY2XnB7XDIyMl1velwxb1wyMDJcMjE1IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMl1velwyYXN+XDM2NlwzNzNcMzc2XDIxMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzU3XDM3NFwzNzVcMFwyNzZcMzQ1XDIyM1wyNVwyNzRcMzQ0XDFKXDMyMVwzNTVcMjIzXDM3NlwzNzciIFwKKyAgIlwzNzRcMW5cMzMzXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NCIgXAorICAiXDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMXVcMjEwXDIyNFwyMjJdb3pcMl5we1wzNzBcMzcyXDM2N1wyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDJcMzczXDM3NSIgXAorICAiXDM3Ml9xfFwyMjJdb3pcMXVcMjEwXDIyNFwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMzU0XDM2N1wyMjRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzEyXDM1N1wzNzBcMjIyXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMDRcMjVcMjc0XDM0NFwxXDIwNCIgXAorICAiXDMzNVwzNjFcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjIzXW96XDFcMzQyXDM0N1wzNTJcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjIzXW96XDFcMjI1XDIzNVwyNDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMjNcMjVcMjc0XDM0NFwxLFwzMTFcMzUyXDIyMlwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIzMlwyNSIgXAorICAiXDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDUiIFwKKyAgIlwyMDVcMjVcMjc0XDM0NFwxQlwzMTRcMzQ3XDIxMVwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwxXDMxNyIgXAorICAiXDMyNFwzMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDMyNlwzMzNcMzM1XDIyM11velwxXDI1M1wyNjNcMjczIiBcCisgICJcMjExXDM3NlwzNzdcMzc0XDFCXDMxNFwzNDdcMjIzXDI1XDI3NFwzNDRcMVwyMTFcMzQyXDM2NVwyMjFcMzc2XDM3NyIgXAorICAiXDM3NFwxblwzMzNcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0IiBcCisgICJcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjA2XDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwzMDdcMzE1XDMxN1wyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMjNdb3pcMVwzMDVcMzEyXDMxNVwyMTFcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMjNcMjVcMjc0XDM0NFwxIiBcCisgICJcMzM3XDM3MFwzNzVcMjIwXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTBcMjVcMjc0XDM0NFwxXDM1NiIgXAorICAiXDM3M1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzM3XDM0NFwzNDZcMjIzXW96XDFcMjUzXDI2M1wyNzNcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjIzXW96XDFcMzMzXDM0MFwzNDNcMjEwXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjIyXDI1XDI3NFwzNDRcMShcMzA3XDM1MFwyMjBcMzc2XDM3N1wzNzRcMVwyMzEiIFwKKyAgIlwzNDJcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjExXDI1XDI3NFwzNDRcMVwzMDJcMzU3XDM2N1wyMTBcMzc2XDM3N1wzNzRcMlwzNjQiIFwKKyAgIlwzNzFcMzc0XnB7XDIyMl1velwxXDIzNlwyNDZcMjU2XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNTdcMjY3IiBcCisgICJcMjc3XDIyM11velwxXDM1M1wzNjBcMzYzXDIxMFwzNzZcMzc3XDM3NFwxXDMxNlwzNjNcMzc0XDIyM1wyNVwyNzRcMzQ0IiBcCisgICJcMVxcXDMyNlwzNTVcMjE3XDM3NlwzNzdcMzc0XDJcMzIwXDM2NVwzNzZcMzFcMjc1XDM0NVwyMzFcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxMlwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMTFcMzc2XDM3N1wzNzRcMWd5XDIwNFwyMjJdb3pcMVwyMTZcMjM2XDI0NFwyNTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjNdb3pcMVwzNjZcMzcwXDM2NFwyMTBcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2MlwzNTVcMzcwXDIyM1wyNVwyNzRcMzQ0XDFcMjIwXDM0M1wzNjFcMjE3XDM3NlwzNzdcMzc0XDFKXDMyMSIgXAorICAiXDM1NVwyMzFcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDciIFwKKyAgIlwzNjZcMFwyNzZcMzQ1XDIxM1wyNVwyNzRcMzQ0XDFcMjExXDM0MlwzNjVcMjExXDM3NlwzNzdcMzc0XDFtXDIwMFwyMTMiIFwKKyAgIlwyMjJdb3pcMVwyMDRcMjIzXDIzMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW8iIFwKKyAgInpcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MFwzNjdcMjIzXDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyMTZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMjc2XDM0NVwyMzBcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxNFwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExIiBcCisgICJcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjJdb3pcMXlcMjE0XDIzMFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWN1XDIwMFwyMTFcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjE2XDM3NlwzNzdcMzc0XDFcMjM1XDM0NlwzNjVcMjMwXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTVcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjExXDM3NlwzNzdcMzc0XDFcMjAwXDIxN1wyMjVcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjIyXDI0MVwyNDdcMjIyXW96XDFqfVwyMTBcMjExXDM3NlwzNzdcMzc0XDFcMjIwXDM0MyIgXAorICAiXDM2MVwyMjNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIxNlwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIyN1wyNVwyNzQiIFwKKyAgIlwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjE2IiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMVwzNzZcMzc3XDM3NFwxXDIxMFwyMjdcMjM1XDIyMl1velwxc1wyMDZcMjIxIiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDIxMVwyMzBcMjM2XDIyMl1velwxblwyMDFcMjE0XDIxMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjIzXDI1XDI3NFwzNDRcMVwzNTBcMzcxXDM3N1wyMTZcMzc2XDM3N1wzNzRcMSIgXAorICAiaVwzMjZcMzU2XDIyNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjE3XDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMTFcMzc2XDM3N1wzNzRcMVwyMTVcMjM0IiBcCisgICJcMjQzXDIyMl1velwxbVwyMDBcMjEzXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyMjJcMjQxXDI0N1wyMjJdbyIgXAorICAielwxbFwxNzdcMjEyXDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMTZcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMjVcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNCIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMFwyNzZcMzQ1XDIyMFwyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjJdb3pcMXNcMjA2XDIyMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWV3XDIwMlwyMTFcMzc2XDM3N1wzNzRcMVwyMzFcMzQyXDM2MlwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzIwXDM2NVwzNzZcMjE2XDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMjI0XDI1XDI3NFwzNDRcMiNcMzA0IiBcCisgICJcMzQ2XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMjc2XDM0NVwyMjFcMjVcMjc0XDM0NCIgXAorICAiXDFpXDMyNlwzNTZcMjExXDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjIyXW96XDFecHtcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MCIgXAorICAiXDM2N1wyMjNcMjVcMjc0XDM0NFwxXDMwMVwzNTZcMzY2XDIxNlwzNzZcMzc3XDM3NFwxXDMzM1wzNjRcMzcxXDIyM1wyNSIgXAorICAiXDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NFwwXDI3NlwzNDUiIFwKKyAgIlwyMjJcMjVcMjc0XDM0NFwxblwzMzNcMzYyXDIxMVwzNzZcMzc3XDM3NFwxd1wyMTJcMjI2XDIyMl1velwxXDIwMlwyMjEiIFwKKyAgIlwyMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI0NlwyNTZcMjY2XDIyM11velwxXDM3MFwzNzJcMzY3XDIxMCIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjYwXDM1M1wzNjZcMjIzXDI1XDI3NFwzNDRcMVwyMzNcMzQ1XDM2NFwyMTdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxLFwzMTFcMzUyXDIyMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMzEyIiBcCisgICJcMzU3XDM3MFwyMjNcMjVcMjc0XDM0NFwxXDIwNFwzMzVcMzYxXDIxMVwzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMiIgXAorICAiXW96XDFcMjA1XDIyNFwyMzJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyM11velwxXDM1NSIgXAorICAiXDM2MlwzNjVcMjEwXDM3NlwzNzdcMzc0XDFcMzE0XDM2MVwzNzJcMjIzXDI1XDI3NFwzNDRcMW1cMzMyXDM2MVwyMTciIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIyMFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE2IiBcCisgICJcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFpe1wyMDZcMjIyXW96XDFcMjExXDIzMFwyMzZcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI2NlwyNzdcMzA3IiBcCisgICJcMjIzXW96XDFcMzQwXDM0NVwzNTBcMjEwXDM3NlwzNzdcMzc0XDFcMzU2XDM3M1wzNzRcMjIzXDI1XDI3NFwzNDRcMSIgXAorICAiLFwzMTFcMzUyXDIyMFwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIxNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2NyIgXAorICAiXDM3NFwyMTdcMzc2XDM3N1wzNzRcMVxcXDMyNlwzNTVcMjIzXDI1XDI3NFwzNDRcMVwyNzRcMzU1XDM3M1wyMTBcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM3MlwzNzRcMzcxX3F8XDIyMl1velwxXDIyNlwyNDZcMjU0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwN1wzMTVcMzE3XDIyM11velwxXDMxM1wzMjBcMzIyXDIxMVwzNzZcMzc3XDM3NFwxXDBcMzAyXDM1MVwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDM1N1wzNzRcMzc1XDIxN1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3R1wzMTciIFwKKyAgIlwzNTNcMjE0XDI1XDI3NFwzNDRcMihcMzA3XDM1MFwzMzZcMzY3XDM3NFwyMjBcMzc2XDM3N1wzNzRcMSVcMzA1XDM0NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzQzXDM1MFwzNTNcMjIzXW96XDEiIFwKKyAgIlwyNTRcMjY0XDI3NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzI3XDMzNFwzMzdcMjIzXW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyMTFcMzc2XDM3N1wzNzRcMUJcMzE0XDM0N1wyMjNcMjVcMjc0XDM0NFwxXDIzN1wzNTBcMzY3XDIyMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzcwXDM3NlwzNzduXDMzM1wzNjJcMzFcMjc1XDM0NVwyMTFcMjVcMjc0XDM0NFwySlwzMjFcMzU1IiBcCisgICJcMzU2XDM3M1wzNzRcMjIwXDM3NlwzNzdcMzc0XDFcMzE1XDM2MlwzNzNcMjIzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTAiIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMVwzMTZcMzIzXDMyNlwyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NiIgXAorICAiXDM3N1wzNzRcMVwzNDZcMzU0XDM1NlwyMjNdb3pcMVwyMjVcMjQ1XDI1M1wyMTFcMzc2XDM3N1wzNzRcMWtcMzI3XDM1NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFHXDMxN1wzNTNcMjIyXDM3NlwzNzdcMzc0XDNcMzIwXDM2NVwzNzZaXDMyNVwzNTRcMFwzMDEiIFwKKyAgIlwzNTBcMjA0XDI1XDI3NFwzNDRcM1wwXDI3NlwzNDVHXDMxN1wzNTNcMjc0XDM1NVwzNzNcMjIyXDM3NlwzNzdcMzc0IiBcCisgICJcMXdcMzMzXDM1NlwyMjNcMjVcMjc0XDM0NFwxIiIzXDMxNFwzNTVcMjExXDM3NlwzNzdcMzc0XDFcMjY0XDI3NFwzMDUiIFwKKyAgIlwyMjNdb3pcMVwzMTVcMzIyXDMyNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzY2XDM3M1wzNzZcMjIzXW8iIFwKKyAgInpcMXpcMjE1XDIzMVwyMTFcMzc2XDM3N1wzNzRcMVwyMzdcMzUwXDM2N1wyMjNcMjVcMjc0XDM0NFwyXDMxXDI3NVwzNDUiIFwKKyAgIlwzMzVcMzY2XDM3M1wyMjNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTZcMzYzXDM3NFwyMDJcMjYxXDM1NFwzNjciIFwKKyAgIlwyXDMxM1wzNjBcMzcxXDM2NlwzNzNcMzc2XDIyM1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDBcMzAyXDM1MVwyMjMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI1MFwyNTZcMjIzXW96XDFcMzM0XDM0MiIgXAorICAiXDM0NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjIyXW96XDFld1wyMDJcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzNDdcMzcwXDM3NlwyMjRcMjVcMjc0XDM0NFwxbVwzMzJcMzYxXDI1NFwzNzZcMzc3XDM3NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjI0XDI1XDI3NFwzNDRcMVwyNjFcMzU0XDM2N1wyMTFcMzc2XDM3N1wzNzRcMX1cMjIwXDIzM1wyMjNdb3pcMSIgXAorICAiXDM2NlwzNzBcMzY0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjNdb3pcMVwzMzVcMzQzIiBcCisgICJcMzQ1XDIxMVwzNzZcMzc3XDM3NFwxJVwzMDVcMzQ3XDIyM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzNlwzNjdcMzc0IiBcCisgICJcMjUyXDM3NlwzNzdcMzc0XDJcMzY3XDM3NVwzNzcjXDMwNFwzNDZcMjIzXDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDM1NyIgXAorICAiXDM3NFwzNzVcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdhc35cMjIyXW96XDFtXDIwMFwyMTNcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMjUxXDI2MVwyNzFcMjIzXW96XDFcMjY0XDI3NFwzMDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgImtcMzI3XDM1N1wyMjRcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDI1MlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIyNCIgXAorICAiXDI1XDI3NFwzNDRcMSIiM1wzMTRcMzU1XDIxMVwzNzZcMzc3XDM3NFwxXDMyMlwzMzBcMzMyXDIyM11velwxXDIxMVwyMzAiIFwKKyAgIlwyMzZcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyM11velwxXDIxMVwyMzBcMjM2XDIxMSIgXAorICAiXDM3NlwzNzdcMzc0XDFcMzAxXDM1NlwzNjZcMjI1XDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyNTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDMzNFwzNjVcMzcyXDBcMjc2XDM0NVwyMjRcMjVcMjc0XDM0NFwxXDIyMFwzNDNcMzYxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjUyXDI2MlwyNzJcMjIzXW96XDFcMjUxXDI2MVwyNzFcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMzN1wzNDQiIFwKKyAgIlwzNDZcMjIzXW96XDJld1wyMDJcMzczXDM3NVwzNzJcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzcjXDMwNFwzNDYiIFwKKyAgIlwyMjRcMjVcMjc0XDM0NFwyXDBcMzAyXDM1MVwzNDdcMzcwXDM3NlwyNDZcMzc2XDM3N1wzNzRcMlwzNjdcMzc1XDM3NyIgXAorICAiLFwzMTFcMzUyXDIyNFwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzN1wzNzBcMzc1XDIxMVwzNzZcMzc3XDM3NFwxXDE3NyIgXAorICAiXDIxNlwyMjRcMjIzXW96XDFcMzA1XDMxMlwzMTVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwyXDM3M1wzNzVcMzcyIiBcCisgICJkdlwyMDFcMjIzXW96XDFcMzMxXDMzNlwzNDFcMjExXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjI1XDI1XDI3NFwzNDQiIFwKKyAgIlwyQlwzMTRcMzQ3XDM3MFwzNzZcMzc3XDI0NVwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIyNVwyNVwyNzRcMzQ0XDFCIiBcCisgICJcMzE0XDM0N1wyMTFcMzc2XDM3N1wzNzRcMlwzNjJcMzY3XDM3MV9xfFwyMjNdb3pcMVwzNDZcMzU0XDM1NlwyNTdcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwyMTBcMjI3XDIzNVwyMjNdb3pcMVwyNDZcMjU2XDI2NlwyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMxNlwzNjNcMzc0XDIyNlwyNVwyNzRcMzQ0XDJNXDMyM1wzNTdcMzcwXDM3NlwzNzdcMjQzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMjZcMjVcMjc0XDM0NFwxXDI1NlwzNTBcMzY0XDIxMVwzNzZcMzc3XDM3NFwxXDMwMVwzMDYiIFwKKyAgIlwzMTFcMjIzXW96XDFrflwyMTFcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwyaSIgXAorICAie1wyMDZcMzczXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjI2XDI1XDI3NFwzNDRcMlxcXDMyNlwzNTUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyNDFcMzc2XDM3N1wzNzRcMVwyMjBcMzQzXDM2MVwyMjZcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM3MFwzNzZcMzc3XDIxMVwzNzZcMzc3XDM3NFwxXDIwNFwyMjNcMjMxXDIyM11velwxXDIzMFwyNDBcMjUwXDI2MFwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDMzMVwzMzZcMzQxXDIyNF1velwxXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzAxXDM1NlwzNjZcMjI3XDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzNjdcMzc1XDM3N1wyMzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxd1wzMzNcMzU2XDIyN1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzUxXDM1NlwzNjAiIFwKKyAgIl5we1wyMjNdb3pcMVwyNzdcMzA0XDMwNlwyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFjdSIgXAorICAiXDIwMFwyMjNdb3pcMVwyMjJcMjQxXDI0N1wyMTJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1M1wyMjdcMjVcMjc0XDM0NFwyIiBcCisgICIsXDMxMVwzNTJcMzM0XDM2NVwzNzJcMjM0XDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRJXDMyMFwzNTRcMjI3XDI1XDI3NCIgXAorICAiXDM0NFwyXDBcMzAxXDM1MFwzNjZcMzczXDM3NlwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjRdb3pcMVwzNDMiIFwKKyAgIlwzNTBcMzUzXDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwyMTZcMjM2XDI0NFwyMjNdb3pcMmN1XDIwMFwzNjIiIFwKKyAgIlwzNjdcMzcxXDIxMVwzNzZcMzc3XDM3NFwxXDI2MVwzNTRcMzY3XDIzMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIzMyIgXAorICAiXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjMxXDM3NlwzNzdcMzc0XDJcMjYyXDM1NVwzNzBcMFwzMDRcMzUyXDIzMFwyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMTJcMzc2XDM3N1wzNzRcMXNcMjA2XDIyMVwyMjNdb3pcMXFcMjA0XDIxN1wyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjRdb3pcMVwyNTdcMjY3XDI3N1wyMTJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxQlwzMTRcMzQ3XDIzMVwyNVwyNzRcMzQ0XDIiIjFcMzEzXDM1NFwzMDNcMzYxXDM3MFwyMjZcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMzNFwzNjVcMzcySlwzMjFcMzU1XDIzMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzY2XDM3M1wzNzZcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzMTVcMzIyXDMyNVwyMjRdb3pcMVwyNTFcMjYxXDI3MVwyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDJcMzYyIiBcCisgICJcMzY3XDM3MWFzflwyMjNdb3pcMmh6XDIwNVwzNzBcMzcyXDM2N1wyMTFcMzc2XDM3N1wzNzRcMlwzMzRcMzY1XDM3MiIgXAorICAiXDBcMjc2XDM0NVwyMzJcMjVcMjc0XDM0NFwzQlwzMTRcMzQ3XDI2MlwzNTVcMzcwXDM3MFwzNzZcMzc3XDIyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzEzXDM2MFwzNzFMXDMyMlwzNTZcMFwyNzZcMzQ1XDIzMlwyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjQiIFwKKyAgIlwyMTJcMzc2XDM3N1wzNzRcMXpcMjE1XDIzMVwyMjRdb3pcMVwzMzNcMzQwXDM0M1wyNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDdcMjI2XDIzNFwyMjRdb3pcMVwyNzBcMzAwXDMxMVwyMTJcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NiIgXAorICAiXDIzNFwyNVwyNzRcMzQ0XDRcMFwzMDRcMzUybVwzMzJcMzYxXDI3M1wzNTRcMzcxXDM2NlwzNzNcMzc2XDIxMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDRcMzcwXDM3NlwzNzdcMzAyXDM1N1wzNjd5XDMzNlwzNjAoXDMwN1wzNTBcMjM0XDI1XDI3NFwzNDRcMSIgXAorICAiQlwzMTRcMzQ3XDIxMlwzNzZcMzc3XDM3NFwxXDMyNFwzMzFcMzMzXDIyNF1velwxa35cMjExXDI2MlwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMwMVwzMDZcMzExXDIyNF1velwya35cMjExXDM3MlwzNzRcMzcxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDJcMzY2XDM3M1wzNzYoXDMwN1wzNTBcMjM2XDI1XDI3NFwzNDRcNVwzMVwyNzVcMzQ1LFwzMTFcMzUyTVwzMjNcMzU3IiBcCisgICJ5XDMzNlwzNjBcMjExXDM0MlwzNjVcMjAyXDIzM1wzNDVcMzY0XDVcMjIwXDM0M1wzNjFcMjA0XDMzNVwzNjFaXDMyNSIgXAorICAiXDM1NDFcMzEzXDM1NFwwXDI3NlwzNDVcMjM2XDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzM2XDM2N1wzNzRcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDVcMjI0XDIzMlwyMjRdb3pcMVwyNDZcMjU2XDI2NlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0IiBcCisgICJcMlwzNjdcMzcxXDM2NmR2XDIwMVwyMjRdb3pcMVwyNzRcMzAxXDMwM1wyMTJcMzc2XDM3N1wzNzRcMlwzMTVcMzYyXDM3MyIgXAorICAiXDBcMjc2XDM0NVwzMDdcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMlwzNzZcMzc3XDM3NFwxXDMyNVwzMzJcMzM0IiBcCisgICJcMjI1XW96XDFcMzQxXDM0NlwzNTFcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDIzNlwyNDZcMjU2XDIyNF1vIiBcCisgICJ6XDJmeFwyMDNcMzU2XDM2M1wzNjZcMjEyXDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMzA2XDI1XDI3NFwzNDRcMSIgXAorICAiTVwzMjNcMzU3XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxdFwyMDdcMjIyXDIyNF1velwxXDE3N1wyMTZcMjI0IiBcCisgICJcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIyNV1velwxXDIyNlwyNDZcMjU0XDIxM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFMXDMyMlwzNTZcMzA0XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNjZcMzczXDM3NlwyMTJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2NVwyNzZcMzA2XDIyNV1velwxXDMwMlwzMDdcMzEyXDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzRcMXVcMjEwIiBcCisgICJcMjI0XDIyNF1velwyXnB7XDMzMVwzMzZcMzQxXDIxMlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2L1wzMTJcMzUzXDMwMiIgXAorICAiXDI1XDI3NFwzNDRcMlwwXDMwMlwzNTFcMzM2XDM2N1wzNzRcMjEyXDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNkdlwyMDEiIFwKKyAgIlwyMjRdb3pcMmR2XDIwMVwzNjRcMzcxXDM3NFwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMzAyXDMwN1wzMTJcMjI1IiBcCisgICJdb3pcMndcMjEyXDIyNlwzNzJcMzc0XDM3MVwyMTJcMzc2XDM3N1wzNzRcMlwzNTBcMzcxXDM3NyVcMzA1XDM0N1wzMDAiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwzMDFcMzUwXDMxNFwzNjFcMzcyXDIxM1wzNzZcMzc3XDM3NFwxXDIyN1wyMzdcMjQ3XDIyNSIgXAorICAiXW96XDFcMjQ2XDI1NlwyNjZcMjY0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxbFwxNzdcMjEyXDIyNSIgXAorICAiXW96XDFcMjUyXDI2MlwyNzJcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzVcMFwzMDRcMzUyXDI3NlwyNVwyNzQiIFwKKyAgIlwzNDRcMlwwXDI3NlwzNDVcMjc0XDM1NVwzNzNcMjEzXDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjI1XW96XDJhIiBcCisgICJzflwzNTNcMzYwXDM2M1wyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDFcMjcwXDMwMFwzMTFcMjI1XW96XDJecHtcMzIyIiBcCisgICJcMzMwXDMzMlwyMTNcMzc2XDM3N1wzNzRcMlwzMzJcMzYzXDM3MCNcMzA0XDM0NlwyNzRcMjVcMjc0XDM0NFwyXDBcMjc2IiBcCisgICJcMzQ1XDI3M1wzNTRcMzcxXDIxM1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZHZcMjAxXDIyNV1velwxXDIzNlwyNDYiIFwKKyAgIlwyNTZcMjY1XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2NVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1aHpcMjA1XDIyNV1velwyaXtcMjA2XDM1NCIgXAorICAiXDM2MVwzNjRcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzUqXDMxMFwzNTFcMjcyXDI1XDI3NFwzNDRcMlwwXDMwMiIgXAorICAiXDM1MVwzMTRcMzYxXDM3MlwyMTNcMzc2XDM3N1wzNzRcMlwzNzFcMzczXDM3MHhcMjEzXDIyN1wyMjVdb3pcMl9xfFwzNDYiIFwKKyAgIlwzNTRcMzU2XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjZdb3pcMlwyMDVcMjI0XDIzMiIgXAorICAiXDM3M1wzNzVcMzcyXDIxM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0QlwzMTRcMzQ3XDI3MFwyNVwyNzRcMzQ0XDIiIFwKKyAgIiVcMzA1XDM0N1wzMzVcMzY2XDM3M1wyMTRcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjZdb3pcMVwyMzFcMjQxIiBcCisgICJcMjUxXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N21cMjAwXDIxM1wyMjZdb3pcMVwyNDIiIFwKKyAgIlwyNTJcMjYyXDIxNFwzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3aVwzMjZcMzU2XDI2NlwyNVwyNzRcMzQ0XDJCXDMxNCIgXAorICAiXDM0N1wzNTBcMzcxXDM3N1wyMTRcMzc2XDM3N1wzNzRcMVwyNzdcMzA0XDMwNlwyMjZdb3pcMmJ0XDE3N1wzNTFcMzU2IiBcCisgICJcMzYwXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjdcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjddb3pcMVwyNjFcMjcxXDMwMlwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDI1MFwzNDdcMzcxXDBcMzAxXDM1MFwyNjJcMjVcMjc0XDM0NFwzXDMxXDI3NVwzNDVcMjA2IiBcCisgICJcMzQwXDM2M1wzNzBcMzc2XDM3N1wyMTRcMzc2XDM3N1wzNzRcMlwzMTZcMzIzXDMyNl9xfFwyMjZdb3pcMVwyNTFcMjYxIiBcCisgICJcMjcxXDI2N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMXlcMjE0XDIzMFwyMjZdb3pcMl5we1wzMDFcMzA2XDMxMVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDMzNVwzNjZcMzczL1wzMTJcMzUzXDI2MFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzEyXDM1NyIgXAorICAiXDM3MFwyMTVcMzc2XDM3N1wzNzRcMlwzMzBcMzM1XDM0MGN1XDIwMFwyMjZdb3pcMmh6XDIwNVwzNjZcMzcwXDM2NFwyNjciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwzMzJcMzM3XDM0MlwyMzBcMjIyXDI0MVwyNDdcMVwzNTNcMzYwXDM2MyIgXAorICAiXDIxNVwzNzZcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIzMVwzNDJcMzYyXDBcMzAxXDM1MFwyNTRcMjVcMjc0XDM0NFwzIiBcCisgICJcMFwyNzZcMzQ1d1wzMzNcMzU2XDM2NlwzNzNcMzc2XDIxNVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1XDIzNlwyNDYiIFwKKyAgIlwyNTZcMjI3XDIyMlwyNDFcMjQ3XDFcMzA3XDMxNVwzMTdcMjcwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0MVwzNzZcMzc3XDM3NFwzXDM1NlwzNzMiIFwKKyAgIlwzNzRpXDMyNlwzNTZcMFwyNzZcMzQ1XDI1MVwyNVwyNzRcMzQ0XDJKXDMyMVwzNTVcMzM1XDM2NlwzNzNcMzQxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMzQzXDM3NlwzNzdcMzc0XDNcMzE2XDM2M1wzNzRaXDMyNVwzNTRcMzFcMjc1XDM0NVwyNDVcMjVcMjc0XDM0NCIgXAorICAiXDJHXDMxN1wzNTNcMzAyXDM1N1wzNjdcMzQzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0NVwzNzZcMzc3XDM3NFwzXDMzNlwzNjdcMzc0bVwzMzJcMzYxIiBcCisgICJcMFwyNzZcMzQ1XDI0MFwyNVwyNzRcMzQ0XDNcMzFcMjc1XDM0NU1cMzIzXDM1N1wzMTZcMzYzXDM3NFwzNDVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNDdcMzc2XDM3N1wzNzRcNFwzNjZcMzczXDM3NlwyMzdcMzUwXDM2N0lcMzIwXDM1NFwzMVwyNzVcMzQ1XDIzMlwyNSIgXAorICAiXDI3NFwzNDRcNFwwXDI3NlwzNDVCXDMxNFwzNDdcMjMxXDM0MlwzNjJcMzU2XDM3M1wzNzRcMzQ3XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM1MiIgXAorICAiXDM3NlwzNzdcMzc0XDRcMzU2XDM3M1wzNzRcMjM1XDM0NlwzNjVaXDMyNVwzNTQjXDMwNFwzNDZcMjI0XDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMzAyXDM1MUxcMzIyXDM1NlwyMjFcMzQ0XDM2MlwzMzZcMzY3XDM3NFwzNTJcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzU2XDM3NlwzNzciIFwKKyAgIlwzNzRcNlwzMzZcMzY3XDM3NFwyMzdcMzUwXDM2N3dcMzMzXDM1Nk1cMzIzXDM1NyxcMzExXDM1MlwwXDI3NlwzNDVcMjEwIiBcCisgICJcMjVcMjc0XDM0NFw2XDBcMjc2XDM0NSpcMzEwXDM1MUpcMzIxXDM1NW5cMzMzXDM2MlwyMzNcMzQ1XDM2NFwzMjBcMzY1IiBcCisgICJcMzc2XDM1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNjRcMzc2XDM3N1wzNzRcMTBcMzY3XDM3NVwzNzdcMzU2XDM3M1wzNzRcMzM1XDM2NlwzNzMiIFwKKyAgIlwzMTZcMzYzXDM3NFwzMTVcMzYyXDM3M1wzMzVcMzY2XDM3M1wzNTBcMzcxXDM3N1wzNjZcMzczXDM3NlwzNjRcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc1XDM3NlwzNzdcMzc0XDIwMiIgXAorICAiXDM3MFwzNzZcMzc3XDI1MFwzNzZcMzc3XDM3NFwxXDM2N1wzNzVcMzc3XDIxN1wzNzZcMzc3XDM3NFwxXDM2N1wzNzUiIFwKKyAgIlwzNzdcMjM3XDM3NlwzNzdcMzc0XDFcMzY3XDM3NVwzNzdcMjMwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFw0XDIzN1wzNTAiIFwKKyAgIlwzNjdcMFwyNzZcMzQ1XDMxXDI3NVwzNDVcMjAzXDMzNFwzNjBcMjQ1XDM3NlwzNzdcMzc0XDVcMzE2XDM2M1wzNzQjIiBcCisgICJcMzA0XDM0NlwyNVwyNzRcMzQ0R1wzMTdcMzUzXDM2N1wzNzVcMzc3XDIxM1wzNzZcMzc3XDM3NFw1XDMzNVwzNjZcMzczIiBcCisgICIoXDMwN1wzNTBcMjVcMjc0XDM0NEJcMzE0XDM0N1wzNjZcMzczXDM3NlwyMzNcMzc2XDM3N1wzNzRcNVwzNTZcMzczXDM3NCIgXAorICAiL1wzMTJcMzUzXDI1XDI3NFwzNDQqXDMxMFwzNTFcMzM3XDM3MFwzNzVcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NCIgXAorICAiXDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyNDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjYwXDM1M1wzNjZcMjEzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDIzNVwzNDZcMzY1XDIzM1wzNzZcMzc3XDM3NFwxXDIzMVwzNDJcMzYyXDIwM1wyNVwyNzRcMzQ0XDF5XDMzNlwzNjAiIFwKKyAgIlwyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MCIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjQ0XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjMiIFwKKyAgIlwyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3IiBcCisgICJcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1NyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjMzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjIiIFwKKyAgIlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwIiBcCisgICJcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjEzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjMyXDM3NlwzNzdcMzc0XDdcMzExXDMxNlwzMjFcMjExXDIzMFwyMzZqfVwyMTBjdVwyMDAiIFwKKyAgIm5cMjAxXDIxNFwyMzNcMjQzXDI1M1wzMzNcMzQwXDM0M1wyMDZcMzc2XDM3N1wzNzRcMlwyMzZcMjQ2XDI1NmR2XDIwMSIgXAorICAiXDIwNV1velw0X3F8a35cMjExXDIyMlwyNDFcMjQ3XDMzN1wzNDRcMzQ2XDIxMFwzNzZcMzc3XDM3NFw3XDMyMlwzMzAiIFwKKyAgIlwzMzJcMjIyXDI0MVwyNDdsXDE3N1wyMTJjdVwyMDBrflwyMTFcMjIyXDI0MVwyNDdcMzIyXDMzMFwzMzJcMjA2XDM3NiIgXAorICAiXDM3N1wzNzRcMlwyNTdcMjY3XDI3N2d5XDIwNFwyMDVdb3pcNF5we2l7XDIwNlwyMTFcMjMwXDIzNlwzMjVcMzMyXDMzNCIgXAorICAiXDIxMFwzNzZcMzc3XDM3NFwxMFwzMTNcMzYwXDM3MVxcXDMyNlwzNTUlXDMwNVwzNDdcMFwyNzZcMzQ1XDBcMzAyXDM1MSIgXAorICAiR1wzMTdcMzUzXDIzN1wzNTBcMzY3XDM3MFwzNzZcMzc3XDIwNVwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMzA0IiBcCisgICJcMzUyXDIxMlwyNVwyNzRcMzQ0XDRcMFwyNzZcMzQ1XDBcMzA0XDM1Mk1cMzIzXDM1N1wzMTVcMzYyXDM3M1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDdcMjVcMjc0XDM0NFw0XDBcMzAxXDM1MEJcMzE0XDM0N1wyMzNcMzQ1XDM2NCIgXAorICAiXDM3MFwzNzZcMzc3XDIwN1wzNzZcMzc3XDM3NFw3XDMwMlwzNTdcMzY3TVwzMjNcMzU3I1wzMDRcMzQ2XDBcMjc2XDM0NSIgXAorICAiXDBcMzA0XDM1MkpcMzIxXDM1NVwyNjBcMzUzXDM2NlwyMTBcMzc2XDM3N1wzNzRcNFwzMTVcMzYyXDM3M01cMzIzXDM1NyIgXAorICAiI1wzMDRcMzQ2XDMxXDI3NVwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDRcMzc2XDM3N1wzNzRcNFwzMjMiIFwKKyAgIlwzNjRcMzY3XFxcMzI2XDM1NSVcMzA1XDM0N1wwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxMFwzMzRcMzY1XDM3Mm1cMzMyXDM2MShcMzA3XDM1MFwwXDI3NlwzNDVcMFwzMDJcMzUxQlwzMTQiIFwKKyAgIlwzNDdcMjMzXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjA3XDM3NlwzNzdcMzc0XDRcMzM2XDM2N1wzNzRtXDMzMlwzNjEoIiBcCisgICJcMzA3XDM1MFwwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMwXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTZcMzYzXDM2NlwyMDJcMjIxXDIyN1wyMDZdb3pcM15we1wyNDdcMjU3XDI2N1wzNzNcMzc1XDM3MlwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMyN1wzMzRcMzM3XDIxMl1velwyX3F8XDMwM1wzMTBcMzEzXDIwNVwzNzZcMzc3XDM3NFwyIiBcCisgICJcMzY0XDM3MVwzNzRcMjIyXDI0MVwyNDdcMjA3XW96XDJcMjIyXDI0MVwyNDdcMzcwXDM3MlwzNjdcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTNcMzYwXDM2M15we1wyMTJdb3pcMVwyNTRcMjY0XDI3NFwyMDVcMzc2XDM3N1wzNzRcMlwzNzBcMzc2IiBcCisgICJcMzc3bVwzMzJcMzYxXDIwN1wyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzUwXDM3MVwzNzdcMjAzXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNzBcMzc2XDM3N1wwXDI3NlwzNDVcMjE2XDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDIzNVwzNDZcMzY1XDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIxMlwyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzU3XDM3NFwzNzVcMjA0XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNjdcMzc1XDM3N1pcMzI1XDM1NFwyMDdcMjVcMjc0XDM0NFwyR1wzMTdcMzUzXDM1N1wzNzRcMzc1XDIwNSIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMzFcMjc1XDM0NVwyMTJcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjU2XDM1MFwzNjRcMFwyNzZcMzQ1XDIxMlwyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjA0IiBcCisgICJcMzc2XDM3N1wzNzRcMlwyMDZcMzQwXDM2M1wzMVwyNzVcMzQ1XDIwNlwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzM1XDM2NiIgXAorICAiXDM3M1wyMDVcMzc2XDM3N1wzNzRcMlwzMDJcMzU3XDM2N1wwXDMwMVwzNTBcMjEyXDI1XDI3NFwzNDRcMWtcMzI3XDM1NyIgXAorICAiXDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjdcMzc2XDM3N1wzNzRcMlwzNjRcMzcxXDM3NHVcMjEwXDIyNFwyMTFdb3pcMVwyNDJcMjUyIiBcCisgICJcMjYyXDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwyX3F8XDMyNVwzMzJcMzM0XDIwM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzczXDM3NVwzNzJcMjEwXDIyN1wyMzVcMjExXW96XDJcMjExXDIzMFwyMzZcMzczXDM3NVwzNzJcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdb3pcMVwzMDRcMzExXDMxNFwyMDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NiIgXAorICAiXDIxMVwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzY2XDM3M1wzNzZcMjAyXDM3NlwzNzdcMzc0XDFcMzU3XDM3NFwzNzUiIFwKKyAgIlwyMjBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwyNzRcMzU1XDM3M1wyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjEzIiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIwNFwzNzZcMzc3XDM3NFwxTFwzMjJcMzU2XDIxMVwyNVwyNzRcMzQ0XDIiIjMiIFwKKyAgIlwzMTRcMzU1XDM3MFwzNzZcMzc3XDIwM1wzNzZcMzc3XDM3NFwyXDMxM1wzNjBcMzcxXDBcMjc2XDM0NVwyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMFwyNzZcMzQ1XDIxM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMDNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMTFcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDM0N1wzNzBcMzc2XDIwM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0XDBcMzA0XDM1MlwyMTNcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwxXDI1MVwyNjFcMjcxXDIxM11velwxXDMyMlwzMzBcMzMyIiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjAwXDIxN1wyMjVcMjAzXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwyNzdcMzA0XDMwNlwyMTNdb3pcMVwyNzdcMzA0XDMwNlwyMDJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdIiBcCisgICJvelwyan1cMjEwXDM3M1wzNzVcMzcyXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMDJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMjFcMjVcMjc0XDM0NFwxIiIxXDMxM1wzNTRcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjE0XDI1XDI3NFwzNDRcMVwzMzJcMzYzXDM3MFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzN1wzNTBcMzY3XDIxM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAzXDM3NlwzNzdcMzc0XDFJXDMyMFwzNTQiIFwKKyAgIlwyMTRcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMlwzMjBcMzY1XDM3NlwzMVwyNzVcMzQ1XDIxMlwyNVwyNzRcMzQ0IiBcCisgICJcMUxcMzIyXDM1NlwyMDNcMzc2XDM3N1wzNzRcMVwyMDNcMzM0XDM2MFwyMTRcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzJcMzY3Y3VcMjAwXDIwM11velw1c1wyMDZcMjIxXDMxN1wzMjQiIFwKKyAgIlwzMjdcMzQzXDM1MFwzNTNcMjc2XDMwM1wzMDVld1wyMDJcMjAzXW96XDFcMjEwXDIyN1wyMzVcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMXlcMjE0XDIzMFwyMDNcMzQ3XDM1NVwzNTdcMlwzNDZcMzU0XDM1NlwyNjRcMjc0IiBcCisgICJcMzA1XDIwM11velwyXnB7XDM1N1wzNjVcMzY3XDIwMlwzNzZcMzc3XDM3NFwxcFwyMDNcMjE2XDIwM11velw1a35cMjExIiBcCisgICJcMzA3XDMxNVwzMTdcMzQzXDM1MFwzNTNcMzA2XDMxNFwzMTZrflwyMTFcMjAzXW96XDFwXDIwM1wyMTZcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMWt+XDIxMVwyMDRcMzQ3XDM1NVwzNTdcMlwzMDRcMzExXDMxNF8iIFwKKyAgInF8XDIwM11velwxXDMzNFwzNDJcMzQ0XDIwMlwzNzZcMzc3XDM3NFwxQlwzMTRcMzQ3XDIwM1wyNVwyNzRcMzQ0XDVcMCIgXAorICAiXDMwMVwzNTBcMjMzXDM0NVwzNjRcMzMzXDM2NFwzNzFcMjYwXDM1M1wzNjYoXDMwN1wzNTBcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMjc2XDM0NVwzNjdcMzc1XDM3N1wzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzM1IiBcCisgICJcMzY2XDM3M1wyMDRcMjVcMjc0XDM0NFwzXDMwMlwzNTdcMzY3XDMzNVwzNjZcMzczXDIwNlwzNDBcMzYzXDIwNFwyNSIgXAorICAiXDI3NFwzNDRcMVwzNTZcMzczXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMDIiIFwKKyAgIlwzNTdcMzY3XDIwM1wzMzVcMzY2XDM3M1wyXDMwMlwzNTdcMzY3XDBcMzA0XDM1MlwyMDNcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjAyXDM3NlwzNzdcMzc0XDEsXDMxMVwzNTJcMjAzXDI1XDI3NFwzNDRcNVwwXDMwMlwzNTFcMjM2XDM0NyIgXAorICAiXDM2NlwzMzJcMzYzXDM3MFwyNTZcMzUwXDM2NCNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFw1XDBcMzAyXDM1MVwzNzAiIFwKKyAgIlwzNzZcMzc3XDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwxd1wzMzNcMzU2IiBcCisgICJcMjA0XDMzNVwzNjZcMzczXDFCXDMxNFwzNDdcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwybVwzMzJcMzYxXDMzNFwzNjVcMzcyXDIwM1wzMzVcMzY2XDM3MyIgXAorICAiXDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDVcMFwyNzZcMzQ1XDIwNlwzNDBcMzYzXDMyM1wzNjRcMzY3XDI3M1wzNTRcMzcxMVwzMTNcMzU0IiBcCisgICJcMjA0XDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3M1wyMDJcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDJMXDMyMlwzNTZcMzMyXDM2M1wzNzBcMjAzXDMzNVwzNjZcMzczXDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMWsiIFwKKyAgIlwzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwzMjRcMzMxXDMzM1wyMDNdb3pcMmN1XDIwMFwzNTMiIFwKKyAgIlwzNjBcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDMwN1wzMTVcMzE3XDIwM11velw0YXN+XDM3MlwzNzRcMzcxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzdcMzc0XDFoelwyMDVcMjAzXW96IiBcCisgICJcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzNDdcMzU1XDM1N1wyMDNdb3pcMl5we1wzMzVcMzQzXDM0NVwyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIwNF1velwzXDM0N1wzNTVcMzU3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwMyIgXAorICAiXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDF+XDIxNVwyMjNcMjAzXW96XDRcMzEzXDMyMFwzMjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNzBcMzc2XDM3N1wzMVwyNzVcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzMzZcMzY3XDM3NFwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcM1wyNzRcMzU1XDM3M1wzNzZcMzc3XDM3NCIgXAorICAiXDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjciIFwKKyAgIlwzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzIzXDM2NFwzNjdcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMW4iIFwKKyAgIlwzMzNcMzYyXDIwM1wyNVwyNzRcMzQ0XDNtXDMzMlwzNjFcMzc2XDM3N1wzNzRcMzU2XDM3M1wzNzRcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwxXDI3NFwzNTVcMzczXDIwM1wzNzZcMzc3XDM3NFwyXDMyM1wzNjRcMzY3XDBcMjc2XDM0NVwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMzE1XDM2MlwzNzNcMzc2XDM3N1wzNzRcMzM1XDM2NlwzNzNcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyIiBcCisgICJcMzc2XDM3N1wzNzRcMzY2XDM3M1wzNzZcMjA0XDI1XDI3NFwzNDRcMVwzNjZcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDIwN1wzNDFcMzY0XDIwM1wzNzZcMzc3XDM3NFwyXDM2MFwzNzVcMzc2XDBcMzA0XDM1MlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjMzXDM0NVwzNjRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMjNcMzY0XDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIwM11velwxXDIwNFwyMjNcMjMxXDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdfcXxcMjAzXW96XDNcMzU0XDM2MVwzNjRcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTYiIFwKKyAgIlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MSIgXAorICAiXDM3NlwzNzdcMzc0XDMyNlwzMzNcMzM1XDIwM11velwxblwyMDFcMjE0XDIwNVwzNzZcMzc3XDM3NFwxbFwxNzdcMjEyIiBcCisgICJcMjAzXW96XDNcMzI3XDMzNFwzMzdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzdcMzcwXDM3NVwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMzFcMjc1XDM0NVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMSIiM1wzMTRcMzU1XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcM1wyMzZcMzQ3XDM2NlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0XDNrXDMyN1wzNTciIFwKKyAgIlwzNzZcMzc3XDM3NFwzMTVcMzYyXDM3M1wyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMSIgXAorICAiKlwzMTBcMzUxXDIwM1wyNVwyNzRcMzQ0XDNcMjYxXDM1NFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2M1wzNzRcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMSIgXAorICAiXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzdcMzc0XDFNXDMyMyIgXAorICAiXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDMxXDI3NVwzNDVcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDMzNVwzNjZcMzczXDIwNFwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjAzIiBcCisgICJcMzM0XDM2MFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDQiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDIiIFwKKyAgIlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3IiBcCisgICJcMjAzXW96XDFhc35cMjA1b1wyMDJcMjE1XDFhc35cMjAzXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNSIgXAorICAiXDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0IiBcCisgICJcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIwNSVcMzA1XDM0NyIgXAorICAiXDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0IiBcCisgICJcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDEiIFwKKyAgIlwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwzMVwyNzVcMzQ1XDIwNSIgXAorICAiJVwzMDVcMzQ3XDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjM3XDM1MFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2MyIgXAorICAiXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0IiBcCisgICJcMzQ0XDEjXDMwNFwzNDZcMjA0JVwzMDVcMzQ3XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDF3XDMzM1wzNTZcMjAyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzXW96XDMiIFwKKyAgIlwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNV1velwzIiBcCisgICJcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2NyIgXAorICAiXDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0IiBcCisgICJcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxIiBcCisgICJcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzIiBcCisgICJcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzRcMzQ0XDF3XDMzMyIgXAorICAiXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzIiBcCisgICJdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNSIgXAorICAiXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjUiIFwKKyAgIlwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NiIgXAorICAiXDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NiIgXAorICAiXDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzIiBcCisgICJcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzQiIFwKKyAgIlwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3IiBcCisgICJcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMWV3XDIwMlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxNyIgXAorICAiXDMyNFwzMjdcMjE1XW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTMiIFwKKyAgIlwyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3IiBcCisgICJcMzc0XDIxNVwyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSMiIFwKKyAgIlwzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwzIiBcCisgICJrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3IiBcCisgICJcMzc0XDMxNlwzNjNcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDIwNVwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzciIFwKKyAgIlwzNzRcMjE1XDI1XDI3NFwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzAwXDMwNVwzMTBcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1IiBcCisgICJcMzc2XDM3N1wzNzRcMWJ0XDE3N1wyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NiIgXAorICAiXDM3N1wzNzRcMzE3XDMyNFwzMjdcMjAzXW96XDFwXDIwM1wyMTZcMjExXDMzNVwzNDNcMzQ1XDNcMzY2XDM3MFwzNjQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMCIgXAorICAiXDI3NlwzNDVcMjExXDMxNFwzNjFcMzcyXDNcMzUwXDM3MVwzNzdcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1IiBcCisgICJcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwIiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDMxNCIgXAorICAiXDM2MVwzNzJcM1wzNTZcMzczXDM3NFwzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxIiBcCisgICJcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzAxXDM1NlwzNjZcMjEwXDMxNCIgXAorICAiXDM2MVwzNzJcMVwzMzdcMzcwXDM3NVwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzYiIFwKKyAgIlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzE0XDMyMVwzMjRcMjAzXW96XDJsXDE3N1wyMTJcMzcyXDM3NFwzNzEiIFwKKyAgIlwyMDNcMzc2XDM3N1wzNzRcMVwzMzNcMzQwXDM0M1wyMDNdb3pcNF5we1wzNjZcMzczXDM3NlwzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxa35cMjExXDIwM11velwzXDM0MVwzNDYiIFwKKyAgIlwzNTFcMzc2XDM3N1wzNzRcMzIwXDMyNlwzMzBcMjAzXW96XDF0XDIwN1wyMjJcMjEzXDM3NlwzNzdcMzc0XDFcMzMwIiBcCisgICJcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDYiIFwKKyAgIlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2IiBcCisgICJcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0IiBcCisgICJcMW5cMzMzXDM2MlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0XDMwM1wzNjFcMzcwXDIwM1wyNSIgXAorICAiXDI3NFwzNDRcMVwwXDMwNFwzNTJcMjEzXDM3NlwzNzdcMzc0XDFcMzMyXDM2M1wzNzBcMjAzXDI1XDI3NFwzNDRcMVwwIiBcCisgICJcMjc2XDM0NVwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NiIgXAorICAiXDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMU0iIFwKKyAgIlwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3MyIgXAorICAiXDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNecHtcMjAzXW96XDVcMjM2XDI0NlwyNTZcMzY2XDM3M1wzNzZcMzc2IiBcCisgICJcMzc3XDM3NFwzNDdcMzU1XDM1N3dcMjEyXDIyNlwyMDNdb3pcMX5cMjE1XDIyM1wyMDJcMzc2XDM3N1wzNzRcMVwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNFwzNzZcMzc3XDM3NFwyXDMzNVwzNDNcMzQ1XnB7XDIwM11vIiBcCisgICJ6XDNcMzUxXDM1NlwzNjBcMzc2XDM3N1wzNzRcMzM1XDM0M1wzNDVcMjAzXW96XDJidFwxNzdcMzQzXDM1MFwzNTNcMjEyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0IiBcCisgICJcMzU1XDM3M1wyMTJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzQiIFwKKyAgIlwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NCIgXAorICAiXDIwM1wzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3L1wzMTJcMzUzXDIwM1wyNVwyNzRcMzQ0XDNcMjA0XDMzNVwzNjEiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzRcMzY1XDM3MlwyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMTJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjA0XDM3NlwzNzdcMzc0XDEiIFwKKyAgIklcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFw0XDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2IiBcCisgICJcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU3XDM1MVwzNjVcMjA0XDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjEzXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwyMDdcMzQxXDM2NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjExXDIzMFwyMzZcMjA0XW96XDNjdVwyMDBwXDIwM1wyMTZecHtcMjA0XW96XDFcMjc3XDMwNFwzMDYiIFwKKyAgIlwyMDJcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMWR2XDIwMVwyMDN+XDIxNVwyMjNcMnZcMjExXDIyNSIgXAorICAiYXN+XDIwM11velwxblwyMDFcMjE0XDIwMlwzNzZcMzc3XDM3NFwyXDM3MVwzNzNcMzcwZHZcMjAxXDIwM11velwyYnQiIFwKKyAgIlwxNzd3XDIxMlwyMjZcMjA1flwyMTVcMjIzXDJcMjAzXDIyMlwyMzBcMzA0XDMxMVwzMTRcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdbyIgXAorICAielwxXDMwNlwzMTRcMzE2XDIwMlwzNzZcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1IiBcCisgICIqXDMxMFwzNTFcMjA1LFwzMTFcMzUyXDIiIjFcMzEzXDM1NFwyMDdcMzQxXDM2NFwyMDJcMzc2XDM3N1wzNzRcMVwzNTciIFwKKyAgIlwzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0IiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxKlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAyXDM1MVwyMDQiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMjc0XDM1NVwzNzNcMzc2XDM3N1wzNzRcMzcwXDM3NlwzNzdcMFwzMDJcMzUxXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMlwzMVwyNzVcMzQ1KlwzMTBcMzUxXDIwNSxcMzExXDM1MlwyQlwzMTRcMzQ3XDIzMVwzNDJcMzYyXDIwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUqXDMxMFwzNTFcMjAzLFwzMTFcMzUyIiBcCisgICJcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1MyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1KlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAxXDM1MFwyMDNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjA0XDI1XDI3NFwzNDRcMShcMzA3IiBcCisgICJcMzUwXDIwNSxcMzExXDM1MlwzIiIxXDMxM1wzNTR3XDMzM1wzNTZcMzcwXDM3NlwzNzdcMjAyXDM3NlwzNzdcMzc0XDEiIFwKKyAgIk1cMzIzXDM1N1wyMDRcMjVcMjc0XDM0NFwxKFwzMDdcMzUwXDIwMyxcMzExXDM1MlwxXDBcMzA0XDM1MlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZXdcMjAyXDIxMV1velwyIiBcCisgICJcMTc3XDIxNlwyMjRcMzczXDM3NVwzNzJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjcwXDMwMCIgXAorICAiXDMxMVwyMDNcMzc2XDM3N1wzNzRcMVwyNTNcMjYzXDI3M1wyMTNdb3pcNF9xfFwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NCIgXAorICAiXDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwxIiBcCisgICJcMzA2XDMxNFwzMTZcMjAyXDM3NlwzNzdcMzc0XDFcMjMzXDM0NVwzNjRcMjE0XDI1XDI3NFwzNDRcM1wzMDFcMzU2XDM2NiIgXAorICAiXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NCIgXAorICAiXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMTNcMjVcMjc0XDM0NFwyLFwzMTFcMzUyXDM3MFwzNzZcMzc3XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjE0XDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzM1wzNDVcMzY0XDIxNFwyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDFcMjUwXDM0NyIgXAorICAiXDM3MVwyMTRcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxNFwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzZcMzQ3XDM2NlwyMDJcMzc2XDM3N1wzNzRcMlwzMTNcMzYwXDM3MVwwXDI3NlwzNDVcMjEzXDI1IiBcCisgICJcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMzBcMzc2XDM3N1wzNzRcMlwzMjVcMzMyXDMzNGd5XDIwNFwyMDciIFwKKyAgIl1velwyeFwyMTNcMjI3XDM1NFwzNjFcMzY0XDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwxXDIyNSIgXAorICAiXDIzNVwyNDVcMjA0XDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzF+XDIyMVwyMzVcMjEzXW96XDNcMzMzXDM0MFwzNDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNDJcMzQ3XDM1MlwyMDNdb3pcMXRcMjA3XDIyMlwyMDVcMzc2XDM3N1wzNzRcMVwyMTFcMjMwIiBcCisgICJcMjM2XDIwM11velwxXDMxN1wzMjRcMzI3XDIwM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxM1wyNVwyNzRcMzQ0XDQiIFwKKyAgIlwyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjAyXDI1XDI3NFwzNDRcMVwwXDI3NiIgXAorICAiXDM0NVwyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyMDJcMzc2IiBcCisgICJcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM1XDM2NlwzNzNcMjAyXDM3NlwzNzdcMzc0XDFcMCIgXAorICAiXDMwMlwzNTFcMjEyXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjAzXDM3NlwzNzdcMzc0XDJcMzcwIiBcCisgICJcMzc2XDM3N0dcMzE3XDM1M1wyMTNcMjVcMjc0XDM0NFwxXDI3M1wzNTRcMzcxXDIwM1wzNzZcMzc3XDM3NFwxTVwzMjMiIFwKKyAgIlwzNTdcMjEzXDI1XDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMDNcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAzXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjEzXDI1XDI3NFwzNDRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIxM1wyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjMxXDM3NlwzNzdcMzc0XDNcMzUxXDM1NlwzNjBcMjMxXDI0MVwyNTFidFwxNzdcMjAzXW96XDNrflwyMTFcMjU3IiBcCisgICJcMjY3XDI3N1wzNzBcMzcyXDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTFdb3pcM2d5XDIwNFwyNjEiIFwKKyAgIlwyNzFcMzAyXDM3M1wzNzVcMzcyXDIwNVwzNzZcMzc3XDM3NFwzXDM3MVwzNzNcMzcwXDI1MlwyNjJcMjcyZHZcMjAxIiBcCisgICJcMjEwXW96XDJ4XDIxM1wyMjdcMzcyXDM3NFwzNzFcMjAyXDM3NlwzNzdcMzc0XDR9XDIyMFwyMzNdb3pecHtcMjY2XDI3NyIgXAorICAiXDMwN1wyMDVcMzc2XDM3N1wzNzRcNVwzMTFcMzE2XDMyMV9xfF1venFcMjA0XDIxN1wzNzBcMzcyXDM2N1wyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIxMVwzNDJcMzY1XDBcMzAxXDM1MFwyMTBcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM1NlwzNzNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwMlwyNVwyNzRcMzQ0XDFtXDMzMlwzNjFcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMDJcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDIwM1wzNzZcMzc3XDM3NFwxXDIwNiIgXAorICAiXDM0MFwzNjNcMjAyXDI1XDI3NFwzNDRcMkJcMzE0XDM0N1wzNzBcMzc2XDM3N1wyMDJcMzc2XDM3N1wzNzRcMXdcMzMzIiBcCisgICJcMzU2XDIxMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1TFwzMjJcMzU2XDMzNlwzNjdcMzc0XDIwNVwzNzZcMzc3XDM3NCIgXAorICAiXDNcMzcwXDM3NlwzNzdcMjA0XDMzNVwzNjFcMFwzMDFcMzUwXDIxMFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzY2XDM3MyIgXAorICAiXDM3NlwyMDNcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyMTFcMzQyXDM2NVwwXDMwMVwzNTBcMjEwXDI1XDI3NFwzNDQiIFwKKyAgIlwyI1wzMDRcMzQ2XDM1NlwzNzNcMzc0XDIwNFwzNzZcMzc3XDM3NFwyXDIzM1wzNDVcMzY0XDBcMzAyXDM1MVwyMTBcMjUiIFwKKyAgIlwyNzRcMzQ0XDJcMFwzMDJcMzUxXDMzN1wzNzBcMzc1XDIwNFwzNzZcMzc3XDM3NFwyXDIzN1wzNTBcMzY3I1wzMDRcMzQ2IiBcCisgICJcMjEwXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjA0XDM3NlwzNzdcMzc0XDJcMjU3XDM1MVwzNjUiIFwKKyAgIiVcMzA1XDM0N1wyMTBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMjZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMzXDM3NiIgXAorICAiXDM3N1wzNzRcNFwzNjVcMzcyXDM3NVwzMzVcMzQzXDM0NVwzMjVcMzMyXDMzNFwzNDNcMzUwXDM1M1wyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxdVwyMTBcMjI0XDIwNFwzMjRcMzMxXDMzM1wyXDMzNVwzNDNcMzQ1XDM3MyIgXAorICAiXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFcMzM0XDM0MlwzNDRcMjA2XDMyNFwzMzFcMzMzXDIiIFwKKyAgIlwzMzFcMzM2XDM0MVwzNzJcMzc0XDM3MVwyMDNcMzc2XDM3N1wzNzRcM1wzNzNcMzc1XDM3MlwzMzJcMzM3XDM0MlwzNDMiIFwKKyAgIlwzNTBcMzUzXDIwN1wzNzZcMzc3XDM3NFwzXDM1MVwzNTZcMzYwXDMzMFwzMzVcMzQwXDM2NlwzNzNcMzc2XDIwNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2IiBcCisgICJcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzRcMlwzMTRcMzYxXDM3MlwzMTVcMzYyXDM3M1wyMDVcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMxNlwzNjNcMzc0XDMxM1wzNjBcMzcxXDIwNVwzNzZcMzc3XDM3NFwzXDMzMlwzNjNcMzcwXDMxMlwzNTdcMzcwXDM3MCIgXAorICAiXDM3NlwzNzdcMjA0XDM3NlwzNzdcMzc0XDFcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjciIFwKKyAgIlwzNTZcMzczXDM3NFwyMTFcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTRcMzYxXDM3MlwyMDZcMjczXDM1NFwzNzEiIFwKKyAgIlwyXDMwMlwzNTdcMzY3XDM2N1wzNzVcMzc3XDIwNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDMxNlwzNjNcMzc0IiBcCisgICJcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2XDM3M1wzNzZcMjA2XDM3NlwzNzdcMzc0XDJcMzcwXDM3NiIgXAorICAiXDM3N1wzMTZcMzYzXDM3NFwyMDZcMjczXDM1NFwzNzFcMlwzMDFcMzU2XDM2NlwzNTdcMzc0XDM3NVwyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMzMlwzNjNcMzcwXDIwNlwyNzNcMzU0XDM3MVwyXDMwMVwzNTZcMzY2XDM1NlwzNzNcMzc0XDIwN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMjc0XDM1NVwzNzNcMjA1XDI3M1wzNTRcMzcxXDJcMjc0XDM1NVwzNzNcMzUwIiBcCisgICJcMzcxXDM3N1wyMjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxXDIwMiIgXAorICAiXDIyMVwyMjdcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzE1XDMyMlwzMjVcMjAzXW96XDFcMjExXDIzMFwyMzZcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM2MFwzNjZcMzcwaXtcMjA2XDIwMl1velwxXDMwMlwzMDdcMzEyXDM3N1wzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNDdcMzc2XDM3N1wzNzRcM1wzNTdcMzY1XDM2N1wzMTNcMzIwXDMyMlwzMzVcMzQzXDM0NVwzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzMDdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxIiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NCIgXAorICAiXDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjMyXDM3N1wzNzdcMzc3IikKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2I2NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYgpAQCAtMCwwICsxLDEyMiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgZnJhbWVidWZmZXIgYm9vdCBsb2dvIGJhc2VkIG9uIHVzcGxhc2giCitERVNDUklQVElPTiA9ICJQU3BsYXNoIGlzIGEgdXNlcnNwYWNlIGdyYXBoaWNhbCBib290IHNwbGFzaCBzY3JlZW4gZm9yIG1haW5seSBlbWJlZGRlZCBMaW51eCBkZXZpY2VzIHN1cHBvcnRpbmcgYSAxNmJwcCBvciAzMmJwcCBmcmFtZWJ1ZmZlci4gSXQgaGFzIGZldyBkZXBlbmRlbmNpZXMgKGp1c3QgbGliYyksIHN1cHBvcnRzIGJhc2ljIGltYWdlcyBhbmQgdGV4dCBhbmQgaGFuZGxlcyByb3RhdGlvbi4gSXRzIHZpc3VhbCBsb29rIGlzIGNvbmZpZ3VyYWJsZSBieSBiYXNpYyBzb3VyY2UgY2hhbmdlcy4gQWxzbyBpbmNsdWRlZCBpcyBhICdjbGllbnQnIGNvbW1hbmQgdXRpbGl0eSBmb3Igc2VuZGluZyBpbmZvcm1hdGlvbiB0byBwc3BsYXNoIHN1Y2ggYXMgYm9vdCBwcm9ncmVzcyBpbmZvcm1hdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wc3BsYXNoIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wc3BsYXNoLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNjttZDU9ODQwZmIyMzU2YjEwYTg1YmVkNzhkZDA5ZGM3NzQ1YzYiCisKK1NSQ1JFViA9ICIxNGM4ZjdiNzA1ZGU5NDRiZWI0ZGUzZjI5NjUwNmQ4MDg3MWU0MTBmIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBzcGxhc2gtZmItQ29udmVydC1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwtdG8tYS1zdGF0aWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHNwbGFzaC1pbml0IFwKKyAgICAgICAgICAgJHtTUExBU0hfSU1BR0VTfSIKKworU1BMQVNIX0lNQUdFUyA9ICJmaWxlOi8vcHNwbGFzaC1wb2t5LWltZy5oO291dHN1ZmZpeD1kZWZhdWx0IgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgb2xkcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBzcGxhc2hmaWxlcyA9IGQuZ2V0VmFyKCdTUExBU0hfSU1BR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ3MgPSBbXQorICAgIGxvY2FscGF0aHMgPSBbXQorICAgIGhhc3BuZyA9IEZhbHNlCisgICAgZm9yIHVyaSBpbiBzcGxhc2hmaWxlczoKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgZCkKKyAgICAgICAgZmxvY2FsID0gb3MucGF0aC5iYXNlbmFtZShmZXRjaGVyLmxvY2FscGF0aCh1cmkpKQorICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQoZmxvY2FsKVswXQorICAgICAgICBvdXRzdWZmaXggPSBmZXRjaGVyLnVkW3VyaV0ucGFybS5nZXQoIm91dHN1ZmZpeCIpCisgICAgICAgIGlmIG5vdCBvdXRzdWZmaXg6CisgICAgICAgICAgICBpZiBmYmFzZS5zdGFydHN3aXRoKCJwc3BsYXNoLSIpOgorICAgICAgICAgICAgICAgIG91dHN1ZmZpeCA9IGZiYXNlWzg6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRzdWZmaXggPSBmYmFzZQorICAgICAgICAgICAgaWYgb3V0c3VmZml4LmVuZHN3aXRoKCctaW1nJyk6CisgICAgICAgICAgICAgICAgb3V0c3VmZml4ID0gb3V0c3VmZml4WzotNF0KKyAgICAgICAgb3V0bmFtZSA9ICJwc3BsYXNoLSVzIiAlIG91dHN1ZmZpeAorICAgICAgICBpZiBvdXRuYW1lID09ICcnIG9yIG91dG5hbWUgaW4gb2xkcGtnczoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgb3V0cHV0IG5hbWUgJyVzJyBkZXJpdmVkIGZyb20gdGhlIFVSSSAlcyBpcyBub3QgdmFsaWQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBvdXRzdWZmaXggcGFyYW1ldGVyIiAlIChvdXRuYW1lLCB1cmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtncy5hcHBlbmQob3V0bmFtZSkKKyAgICAgICAgaWYgZmxvY2FsLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBoYXNwbmcgPSBUcnVlCisgICAgICAgIGxvY2FscGF0aHMuYXBwZW5kKGZsb2NhbCkKKworICAgICMgU2V0IHRoZXNlIHNvIHRoYXQgd2UgaGF2ZSBsZXNzIHdvcmsgdG8gZG8gaW4gZG9fY29tcGlsZSBhbmQgZG9faW5zdGFsbF9hcHBlbmQKKyAgICBkLnNldFZhcigiU1BMQVNIX0lOU1RBTEwiLCAiICIuam9pbihwa2dzKSkKKyAgICBkLnNldFZhcigiU1BMQVNIX0xPQ0FMUEFUSFMiLCAiICIuam9pbihsb2NhbHBhdGhzKSkKKworICAgIGlmIGhhc3BuZzoKKyAgICAgICAgZC5hcHBlbmRWYXIoIkRFUEVORFMiLCAiIGdkay1waXhidWYtbmF0aXZlIikKKworICAgIGQucHJlcGVuZFZhcigiUEFDS0FHRVMiLCAiJXMgIiAlICgiICIuam9pbihwa2dzKSkpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgb3IgJycKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBlcCA9ICclcyVzJyAlIChtbHByZWZpeCwgcCkKKyAgICAgICAgZXBzcGxhc2ggPSAnJXMlcycgJSAobWxwcmVmaXgsICdwc3BsYXNoJykKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIGVwLCAiJHtiaW5kaXJ9LyVzIiAlIHApCisgICAgICAgIGQuc2V0VmFyKCJBTFRFUk5BVElWRV8lcyIgJSBlcCwgJ3BzcGxhc2gnKQorICAgICAgICBkLnNldFZhckZsYWcoIkFMVEVSTkFUSVZFX1RBUkdFVF8lcyIgJSBlcCwgJ3BzcGxhc2gnLCAnJHtiaW5kaXJ9LyVzJyAlIHApCisgICAgICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU18lcyIgJSBlcCwgIiAlcyIgJSBwbikKKyAgICAgICAgaWYgcCA9PSAicHNwbGFzaC1kZWZhdWx0IjoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVDT01NRU5EU18lcyIgJSBwbiwgIiAlcyIgJSBlcCkKK30KKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BzcGxhc2hdID0gIiR7YmluZGlyfS9wc3BsYXNoIgorCitweXRob24gZG9fY29tcGlsZSAoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgIyBCdWlsZCBhIHNlcGFyYXRlIGV4ZWN1dGFibGUgZm9yIGVhY2ggc3BsYXNoIGltYWdlCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBjb252ZXJ0c2NyaXB0ID0gIiVzL21ha2UtaW1hZ2UtaGVhZGVyLnNoIiAlIGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBkZXN0ZmlsZSA9ICIlcy9wc3BsYXNoLXBva3ktaW1nLmgiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIGxvY2FsZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0xPQ0FMUEFUSFMnLCBUcnVlKS5zcGxpdCgpCisgICAgb3V0cHV0ZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0lOU1RBTEwnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIGxvY2FsZmlsZSwgb3V0cHV0ZmlsZSBpbiB6aXAobG9jYWxmaWxlcywgb3V0cHV0ZmlsZXMpOgorICAgICAgICBpZiBsb2NhbGZpbGUuZW5kc3dpdGgoIi5wbmciKToKKyAgICAgICAgICAgIG91dHAgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoJyVzICVzIFBPS1knICUgKGNvbnZlcnRzY3JpcHQsIG9zLnBhdGguam9pbih3b3JrZGlyLCBsb2NhbGZpbGUpKSkKKyAgICAgICAgICAgIHByaW50KG91dHBbMV0pCisgICAgICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQobG9jYWxmaWxlKVswXQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCIlcy1pbWcuaCIgJSBmYmFzZSwgZGVzdGZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHdvcmtkaXIsIGxvY2FsZmlsZSksIGRlc3RmaWxlKQorICAgICAgICAjIEZvciBzb21lIHJlYXNvbiBqdXN0IHVwZGF0aW5nIHRoZSBoZWFkZXIgaXMgbm90IGVub3VnaCwgd2UgaGF2ZSB0byB0b3VjaCB0aGUgLmMKKyAgICAgICAgIyBmaWxlIGluIG9yZGVyIHRvIGdldCBpdCB0byByZWJ1aWxkCisgICAgICAgIG9zLnV0aW1lKCIlcy9wc3BsYXNoLmMiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgTm9uZSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJvZV9ydW5tYWtlIiwgZCkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCJwc3BsYXNoIiwgb3V0cHV0ZmlsZSkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9L21udC8ucHNwbGFzaC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wc3BsYXNoLWluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3BzcGxhc2guc2gKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlmb3IgaSBpbiAke1NQTEFTSF9JTlNUQUxMfSA7IGRvCisJCWluc3RhbGwgLW0gMDc1NSAkaSAke0R9JHtiaW5kaXJ9LyRpCisJZG9uZQorCXJtIC1mICR7RH0ke2JpbmRpcn0vcHNwbGFzaAorfQorCitGSUxFU18ke1BOfSArPSAiL21udC8ucHNwbGFzaCIKKworSU5JVFNDUklQVF9OQU1FID0gInBzcGxhc2guc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwIFMgLiBzdG9wIDIwIDAgMSA2IC4iCisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIHBzcGxhc2guc2VydmljZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmZjAzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGaXggdGhlIG5hbWVzIG9mIHRoZSBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scyB0byBtYXRjaCB0aGUgbmFtZXMgdXNlZCBieSBib3RoCitjb25maWd1cmUgYW5kIHRoZSBzb3VyY2UgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctcmVhZGxpbmUvMjAxNC0wNS9tc2cwMDAwOC5odG1sKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBlNDg2NTY4MTE1NTA3NzQ4OTJmZDRlMGY0YjNjN2Q0MTg0MjJkYTUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjcgTWF5IDIwMTQgMjI6MzI6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlnLmguaW46IGZpeCBuYW1lcyBvZiBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scworCistLS0KKyBjb25maWcuaC5pbiB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCitpbmRleCBhNjdlNDNlLi5hNDJhY2M1IDEwMDY0NAorLS0tIGEvY29uZmlnLmguaW4KKysrKyBiL2NvbmZpZy5oLmluCitAQCAtMjQ0LDkgKzI0NCw5IEBACisgCisgI3VuZGVmIEhBVkVfR0VUUFdfREVDTFMKKyAKKy0jdW5kZWYgU1RSVUNUX0RJUkVOVF9IQVNfRF9JTk8KKysjdW5kZWYgSEFWRV9TVFJVQ1RfRElSRU5UX0RfSU5PCisgCistI3VuZGVmIFNUUlVDVF9ESVJFTlRfSEFTX0RfRklMRU5PCisrI3VuZGVmIEhBVkVfU1RSVUNUX0RJUkVOVF9EX0ZJTEVOTworIAorICN1bmRlZiBIQVZFX0JTRF9TSUdOQUxTCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL25vcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9ub3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzE1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9ub3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQIDIwMTIvMi8yMworCitJbmRleDogcmVhZGxpbmUtNi4yL3N1cHBvcnQvc2hvYmotY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJlYWRsaW5lLTYuMi5vcmlnL3N1cHBvcnQvc2hvYmotY29uZgkyMDEyLTAyLTIzIDExOjA2OjM3LjE5MzE3OTM3OSArMDAwMAorKysrIHJlYWRsaW5lLTYuMi9zdXBwb3J0L3Nob2JqLWNvbmYJMjAxMi0wMi0yMyAxMTowNjo1MC4wNDkxNzg5MTggKzAwMDAKK0BAIC0xMTQsNyArMTE0LDcgQEAKKyAJU0hPQkpfTEQ9JyR7Q0N9JworIAlTSE9CSl9MREZMQUdTPSctc2hhcmVkIC1XbCwtc29uYW1lLCRAJworIAorLQlTSExJQl9YTERGTEFHUz0nLVdsLC1ycGF0aCwkKGxpYmRpcikgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAICQoU0hMSUJfTUlOT1IpYCcKKysJU0hMSUJfWExERkxBR1M9Jy1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisgCVNITElCX0xJQlZFUlNJT049JyQoU0hMSUJfTElCU1VGRikuJChTSExJQl9NQUpPUikkKFNITElCX01JTk9SKScKKyAJOzsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2MGE5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaXRob3V0IHRoaXMgaXQgZmFpbHMgdG8gbGluayBhZ2FpbnN0IGxpYnRlcm1jYXAgY2F1c2luZyB2YXJpb3VzIG1pc3Npbmcgc3ltYm9scyAKK2lzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK0luZGV4OiByZWFkbGluZS01LjIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVhZGxpbmUtNS4yLm9yaWcvY29uZmlndXJlLmluCTIwMDgtMTAtMDggMDk6NTg6NTIuMDAwMDAwMDAwICswMTAwCisrKysgcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTA4IDA5OjU5OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIxMSwxMCArMjExLDEwIEBACisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoY29uZmlndXJhdGlvbiBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykKKyAgICAgICAgIGV2YWwgYFRFUk1DQVBfTElCPSRURVJNQ0FQX0xJQiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAke3NyY2Rpcn0vc3VwcG9ydC9zaG9iai1jb25mIC1DICIke0NDfSIgLWMgJHtob3N0X2NwdX0gLW8gJHtob3N0X29zfSAtdiAke2hvc3RfdmVuZG9yfWAKKyAKKy0jCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorLSMJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKy0jCSopCQkJU0hMSUJfTElCUz0iJFNITElCX0xJQlMgJFRFUk1DQVBfTElCIiA7OworLSMJZXNhYworKwljYXNlICIkU0hMSUJfTElCUyIgaW4KKysJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKysJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CisrCWVzYWMKKyAJCisgICAgICAgICBBQ19TVUJTVChTSE9CSl9DQykKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NGTEFHUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2ZpeC1yZWR1bmRhbnQtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2NmI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlYWRsaW5lLTUuMi9zdXBwb3J0L3Nob2JqLWNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSByZWFkbGluZS01LjIub3JpZy9zdXBwb3J0L3Nob2JqLWNvbmYKKysrKyByZWFkbGluZS01LjIvc3VwcG9ydC9zaG9iai1jb25mCitAQCAtMTEwLDcgKzExMCw3IEBAIGxpbnV4Ki0qfGdudSotKnxrKmJzZCotZ251LSopCisgCVNIT0JKX0xEPScke0NDfScKKyAJU0hPQkpfTERGTEFHUz0nLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCcKKyAKKy0JU0hMSUJfWExERkxBR1M9Jy1XbCwtcnBhdGgsJChsaWJkaXIpIC1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisrCVNITElCX1hMREZMQUdTPSctV2wsLXNvbmFtZSxgYmFzZW5hbWUgJEAgJChTSExJQl9NSU5PUilgJworIAlTSExJQl9MSUJWRVJTSU9OPSckKFNITElCX0xJQlNVRkYpLiQoU0hMSUJfTUFKT1IpJChTSExJQl9NSU5PUiknCisgCTs7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9jb25maWd1cmUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzEwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2l0aG91dCB0aGlzIGl0IGZhaWxzIHRvIGxpbmsgYWdhaW5zdCBsaWJ0ZXJtY2FwIGNhdXNpbmcgdmFyaW91cyBtaXNzaW5nCitzeW1ib2xzIGlzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK1N1cHBvcnQgNi4zIHdoaWNoIHVzZXMgY29uZmlndXJlLmFjIHJhdGhlciB0aGFuIGNvbmZpZ3VyZS5pbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZWE4ZjkxLi45MDc1YjhmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMTgsMTAgKzIxOCwxMCBAQCBpZiB0ZXN0IC1mICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmY7IHRoZW4KKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKQorICAgICAgICAgZXZhbCBgVEVSTUNBUF9MSUI9JFRFUk1DQVBfTElCICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmYgLUMgIiR7Q0N9IiAtYyAke2hvc3RfY3B1fSAtbyAke2hvc3Rfb3N9IC12ICR7aG9zdF92ZW5kb3J9YAorIAorLSMJY2FzZSAiJFNITElCX0xJQlMiIGluCistIwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworLSMJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CistIwllc2FjCisrCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorKwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworKwkqKQkJCVNITElCX0xJQlM9IiRTSExJQl9MSUJTICRURVJNQ0FQX0xJQiIgOzsKKysJZXNhYworIAkKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NDKQorICAgICAgICAgQUNfU1VCU1QoU0hPQkpfQ0ZMQUdTKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZS1kaXNwYXRjaC1tdWx0aWtleS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZS1kaXNwYXRjaC1tdWx0aWtleS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGQxYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gOGVmODUyYTViZTcyYzc1ZTE3ZjI1MTBiZWE1MjQ1NWY4MDliNTZjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZXQgUmFtZXkgPGNoZXQucmFtZXlAY2FzZS5lZHU+CitEYXRlOiBGcmksIDI4IE1hciAyMDE0IDE0OjA3OjQyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTBdIFJlYWRsaW5lLTYuMyBwYXRjaCAyCisKK0ZpeGVzIG11bHRpLWtleSBpc3N1ZSBpZGVudGlmaWVkIGluIHRoaXMgdGhyZWFkOgoraHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDE0LTAzL21zZzAwMDEwLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyByZWFkbGluZS5jIHwgMyArKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3JlYWRsaW5lLmMgYi9yZWFkbGluZS5jCitpbmRleCBlYjRlYWUzLi5hYmIyOWEwIDEwMDY0NAorLS0tIGEvcmVhZGxpbmUuYworKysrIGIvcmVhZGxpbmUuYworQEAgLTc0NCw3ICs3NDQsOCBAQCBfcmxfZGlzcGF0Y2hfY2FsbGJhY2sgKGN4dCkKKyAgICAgciA9IF9ybF9zdWJzZXFfcmVzdWx0IChyLCBjeHQtPm9sZG1hcCwgY3h0LT5va2V5LCAoY3h0LT5mbGFncyAmIEtTRVFfU1VCU0VRKSk7CisgCisgICBSTF9DSEVDS19TSUdOQUxTICgpOworLSAgaWYgKHIgPT0gMCkJCQkvKiBzdWNjZXNzISAqLworKyAgLyogV2Ugb25seSB0cmVhdCB2YWx1ZXMgPCAwIHNwZWNpYWxseSB0byBzaW11bGF0ZSByZWN1cnNpb24uICovCisrICBpZiAociA+PSAwIHx8IChyID09IC0xICYmIChjeHQtPmZsYWdzICYgS1NFUV9TVUJTRVEpID09IDApKQkvKiBzdWNjZXNzISBvciBmYWlsdXJlISAqLworICAgICB7CisgICAgICAgX3JsX2tleXNlcV9jaGFpbl9kaXNwb3NlICgpOworICAgICAgIFJMX1VOU0VUU1RBVEUgKFJMX1NUQVRFX01VTFRJS0VZKTsKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmU2My0wMDMgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmU2My0wMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhOWQ4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMwpAQCAtMCwwICsxLDQzIEBACityZWFkbGluZTogU2VjdXJpdHkgQWR2aXNvcnkgLSByZWFkbGluZSAtIENWRS0yMDE0LTI1MjQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKKwkJCSAgIFJFQURMSU5FIFBBVENIIFJFUE9SVAorCQkJICAgPT09PT09PT09PT09PT09PT09PT09CisKK1JlYWRsaW5lLVJlbGVhc2U6IDYuMworUGF0Y2gtSUQ6IHJlYWRsaW5lNjMtMDAzCisKK0J1Zy1SZXBvcnRlZC1ieToKK0J1Zy1SZWZlcmVuY2UtSUQ6CitCdWctUmVmZXJlbmNlLVVSTDoKKworQnVnLURlc2NyaXB0aW9uOgorCitUaGVyZSBhcmUgZGVidWdnaW5nIGZ1bmN0aW9ucyBpbiB0aGUgcmVhZGxpbmUgcmVsZWFzZSB0aGF0IGFyZSB0aGVvcmV0aWNhbGx5CitleHBsb2l0YWJsZSBhcyBzZWN1cml0eSBwcm9ibGVtcy4gIFRoZXkgYXJlIG5vdCBwdWJsaWMgZnVuY3Rpb25zLCBidXQgaGF2ZQorZ2xvYmFsIGxpbmthZ2UuCisKK1BhdGNoIChhcHBseSB3aXRoIGBwYXRjaCAtcDAnKToKKworKioqIC4uL3JlYWRsaW5lLTYuMy91dGlsLmMJMjAxMy0wOS0wMiAxMzozNjoxMi4wMDAwMDAwMDAgLTA0MDAKKy0tLSB1dGlsLmMJMjAxNC0wMy0yMCAxMDoyNTo1My4wMDAwMDAwMDAgLTA0MDAKKyoqKioqKioqKioqKioqKgorKioqIDQ3Nyw0ODAgKioqKgorLS0tIDQ3OSw0ODMgLS0tLQorICB9CisgIAorKyAjaWYgZGVmaW5lZCAoREVCVUcpCisgICNpZiBkZWZpbmVkIChVU0VfVkFSQVJHUykKKyAgc3RhdGljIEZJTEUgKl9ybF90cmFjZWZwOworKioqKioqKioqKioqKioqCisqKiogNTM5LDU0MiAqKioqCistLS0gNTQyLDU0NiAtLS0tCisgIH0KKyAgI2VuZGlmCisrICNlbmRpZiAvKiBERUJVRyAqLworICAKKyAgCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjY2MmMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZWRpdGluZyB0eXBlZCBjb21tYW5kIGxpbmVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBSZWFkbGluZSBsaWJyYXJ5IHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGFsbG93IHVzZXJzIHRvIGVkaXQgXAorY29tbWFuZCBsaW5lcyBhcyB0aGV5IGFyZSB0eXBlZCBpbi4gQm90aCBFbWFjcyBhbmQgdmkgZWRpdGluZyBtb2RlcyBhcmUgYXZhaWxhYmxlLiBUaGUgUmVhZGxpbmUgbGlicmFyeSBpbmNsdWRlcyAgXAorYWRkaXRpb25hbCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHByZXZpb3VzbHktZW50ZXJlZCBjb21tYW5kIGxpbmVzLCB0byByZWNhbGwgYW5kIHBlcmhhcHMgcmVlZGl0IHRob3NlICAgXAorbGluZXMsIGFuZCBwZXJmb3JtIGNzaC1saWtlIGhpc3RvcnkgZXhwYW5zaW9uIG9uIHByZXZpb3VzIGNvbW1hbmRzLiIKK1NFQ1RJT04gPSAibGlicyIKKworIyBHUEx2MisgKDwgNi4wKSwgR1BMdjMrICg+PSA2LjApCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTICs9ICJuY3Vyc2VzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9ycGF0aC5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworTEVBRF9TT05BTUUgPSAibGlicmVhZGxpbmUuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIGluc3RhbGwgZG9lc24ndCBwcm9wZXJseSBpbnN0YWxsIHRoZXNlCisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGliaGlzdG9yeSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGlicmVhZGxpbmUgJHtEfSR7bGliZGlyfQorCisJcm1kaXIgJHtEfSR7YmluZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV81LjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwMDdhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYgpAQCAtMCwwICsxLDg0IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGVkaXRpbmcgdHlwZWQgY29tbWFuZCBsaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgUmVhZGxpbmUgbGlicmFyeSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB1c2VycyB0byBlZGl0IFwKK2NvbW1hbmQgbGluZXMgYXMgdGhleSBhcmUgdHlwZWQgaW4uIEJvdGggRW1hY3MgYW5kIHZpIGVkaXRpbmcgbW9kZXMgYXJlIGF2YWlsYWJsZS4gVGhlIFJlYWRsaW5lIGxpYnJhcnkgaW5jbHVkZXMgIFwKK2FkZGl0aW9uYWwgZnVuY3Rpb25zIHRvIG1haW50YWluIGEgbGlzdCBvZiBwcmV2aW91c2x5LWVudGVyZWQgY29tbWFuZCBsaW5lcywgdG8gcmVjYWxsIGFuZCBwZXJoYXBzIHJlZWRpdCB0aG9zZSAgIFwKK2xpbmVzLCBhbmQgcGVyZm9ybSBjc2gtbGlrZSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBwcmV2aW91cyBjb21tYW5kcy4iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDNiMzZmZGQ4NGY3NGI4ZDgxODlhMjAyYjk4MGI2N2YiCisKK0RFUEVORFMgKz0gIm5jdXJzZXMiCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAxO25hbWU9cGF0Y2gxO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAyO25hbWU9cGF0Y2gyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAzO25hbWU9cGF0Y2gzO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA0O25hbWU9cGF0Y2g0O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA1O25hbWU9cGF0Y2g1O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA2O25hbWU9cGF0Y2g2O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA3O25hbWU9cGF0Y2g3O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA4O25hbWU9cGF0Y2g4O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA5O25hbWU9cGF0Y2g5O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEwO25hbWU9cGF0Y2gxMDthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxMTtuYW1lPXBhdGNoMTE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTI7bmFtZT1wYXRjaDEyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEzO25hbWU9cGF0Y2gxMzthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxNDtuYW1lPXBhdGNoMTQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlMzkzMzFmMzJhZDE0MDA5YjlmZjQ5Y2MxMGM1ZTc1MSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjEyZTg4ZDk2YWVlMmNkMTE5MjUwMDM1NmYwNTM1NTQwZGI0OTkyODJjYTdmNzYzMzlmYjQyMjhjMzEyNDlmNDUiCisKK1NSQ19VUklbcGF0Y2gxLm1kNXN1bV0gICAgPSAiOWQ0ZDQxNjIyYWE5YjIzMGM1N2Y2ODU0OGNlODdkOGYiCitTUkNfVVJJW3BhdGNoMS5zaGEyNTZzdW1dID0gImVhYzMwNGMzNjkxNTQwNTlmOTMwNDlhZGEzMjg3MzlmYWFmNDAzMzhkM2NiMWZiNGI1NDRjOTNkNWNlM2Y4ZDUiCitTUkNfVVJJW3BhdGNoMi5tZDVzdW1dICAgID0gImYwM2U1MTJkMTQyMDZlMzdmN2Q2YTc0OGI1NmI5NDc2IgorU1JDX1VSSVtwYXRjaDIuc2hhMjU2c3VtXSA9ICI5ZGVhY2FlZjI1NTA3YTBjMmFlMGI2NjFiZjkzNDI1NTliNTlhMjk1NGQ2NmVhM2M1ZjViY2Q5MDBmZGZjZjc4IgorU1JDX1VSSVtwYXRjaDMubWQ1c3VtXSAgICA9ICIyNTJiNDJkODc1MGYxYTk0YjZiZGYwODY2MTJkY2ViMiIKK1NSQ19VUklbcGF0Y2gzLnNoYTI1NnN1bV0gPSAiMmE1NWQyZWNiMWM5YjAxNDdhZWIxOTNhNjMyMzYxNmFiMzFjMWM1MjVhODNiMmRiM2E5OTRiMTU1OTRiYTkzNCIKK1NSQ19VUklbcGF0Y2g0Lm1kNXN1bV0gICAgPSAiYTMyMzMzYzJlNjAzYTNlZDI1MDUxNGU5MTA1MGU1NTIiCitTUkNfVVJJW3BhdGNoNC5zaGEyNTZzdW1dID0gImEwM2I2NTYzMzc4MWVmYTdjM2FhZTVkNTcxNjI5ODVlN2I3YTNjMTBhY2YwZjI2MjFiZTYxMGUxNmYyN2U1ZjIiCitTUkNfVVJJW3BhdGNoNS5tZDVzdW1dICAgID0gIjgxMDY3OTZjMDliNzg5NTIzYTNhNzhhYjY5YzA0YjZkIgorU1JDX1VSSVtwYXRjaDUuc2hhMjU2c3VtXSA9ICIwNjAwMTg5NjUxNDE0OGE3NTdlYTZlZGJiZDQwYzRmYzQzMzFkYzY1Mzg0NzI0NDM4NmMzN2IxMzhiMTUwZjY0IgorU1JDX1VSSVtwYXRjaDYubWQ1c3VtXSAgICA9ICI1MTIxODhlMmJmMDgzN2Y3ZWNhMTlkYmY3MWYxODJhZSIKK1NSQ19VUklbcGF0Y2g2LnNoYTI1NnN1bV0gPSAiZGZlZjNlOTgyYzBhZGY4YmI1YTliN2QwNDY4ZWM4ZjVmMTgxMzhiMzI1ZTI4NzU5NDM3NDY0ZGU1YmU3MTAxMyIKK1NSQ19VUklbcGF0Y2g3Lm1kNXN1bV0gICAgPSAiYWMxN2FjYTYyZWI2ZmIzOThjOWYyZmU5ZGU1NDBhZmYiCitTUkNfVVJJW3BhdGNoNy5zaGEyNTZzdW1dID0gIjc3NWIwMjhjN2I3NjEzOTdhYzZhZTFiZGZiYWM3ZTg5NmRjM2I5YjNhZGMyZjkxMzEyNDk5MTgwY2ExM2JkZDEiCitTUkNfVVJJW3BhdGNoOC5tZDVzdW1dICAgID0gIjI0ODRjMzkyZGIwMjE5MDVmMTEyY2Y5N2E5NGRmZDRjIgorU1JDX1VSSVtwYXRjaDguc2hhMjU2c3VtXSA9ICJhMjFiNGUwYmYwNTMwYjg3OGJhZDI0ZDViZTIzZDE4YTllMDNhNzVhMzFhZTMwODQ0ZGMwOTMzYmIzZDc3ZWNkIgorU1JDX1VSSVtwYXRjaDkubWQ1c3VtXSAgICA9ICJmYzZlYjM1ZDA3OTE0ZmFlNWM1N2Q0OWMxMjQ4M2ZmNyIKK1NSQ19VUklbcGF0Y2g5LnNoYTI1NnN1bV0gPSAiMTM4ZDVlMGYwNzA5YTQ3YTJkMTYyMTI5NWEzZGQ1ZTNjYzczYjYzYjVjYzI4ZGFiMDNhYmM0ZTk0ZmU5NWVjZiIKK1NSQ19VUklbcGF0Y2gxMC5tZDVzdW1dICAgID0gIjdhMmJmM2RjN2FjNzY4MGIxNDYxYTU3MDExMDBlOTFiIgorU1JDX1VSSVtwYXRjaDEwLnNoYTI1NnN1bV0gPSAiODNmOGMxYWFkYjg2YjFhMmZhZDg4MjFhOWM2YmU3MmE4ZGU1YWZkN2ZkOWZkZTU4YTMwYjNiNTdkOTM5NjkzZSIKK1NSQ19VUklbcGF0Y2gxMS5tZDVzdW1dICAgID0gImVmNmNlZjY4MjI2NjM0NzBmNmFjOGM1MTdjNWE3ZWM2IgorU1JDX1VSSVtwYXRjaDExLnNoYTI1NnN1bV0gPSAiMDhhZDMzODRhYjA5MDZlNmZhNGNjNDE3ZWI4YzQzZmY1OTM3NWJjZWFkMTVmZDVjOGUzMTczMGYwNDEzYjNkNiIKK1NSQ19VUklbcGF0Y2gxMi5tZDVzdW1dICAgID0gImUzZTlmNDQxYzgxMTE1ODk4NTViYzM2M2U1NjQwZjZjIgorU1JDX1VSSVtwYXRjaDEyLnNoYTI1NnN1bV0gPSAiMjBmMDI0M2JlMjI5OWMyMzIxMzQ5MmNjMmMxOWNmZDE1Y2M1MjhkMmI1NjZhNzZhMmRlNTgzMDZiYjllNGM5ZSIKK1NSQ19VUklbcGF0Y2gxMy5tZDVzdW1dICAgID0gIjNlMmU1ZjU0M2VkMjY4YTY4ZmQxZmE4MzlmYWFkZTFhIgorU1JDX1VSSVtwYXRjaDEzLnNoYTI1NnN1bV0gPSAiMGNjNjQ5NTE2YTViZGZhNjFjNWU1NjkzNzQwNzU3MDI4OGI2OTcyZDc1YWExYmQwNjBhZDMwZWJlOTgxNDRkNSIKK1NSQ19VUklbcGF0Y2gxNC5tZDVzdW1dICAgID0gImExYmUzMGUxYzZmMTA5OWJiNWZjZWYwMGEyNjMxZmI4IgorU1JDX1VSSVtwYXRjaDE0LnNoYTI1NnN1bV0gPSAiNmYxYTY4MzIwZDAxNTIyY2ExZWE1YTczNzEyNGVjYzg3MzlmM2RjYmZlYTJkZWUyMWUzY2NmODM5YTIxYTgxNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK0xFQURfU09OQU1FID0gImxpYnJlYWRsaW5lLnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgTWFrZSBpbnN0YWxsIGRvZXNuJ3QgcHJvcGVybHkgaW5zdGFsbCB0aGVzZQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYmhpc3RvcnkgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYnJlYWRsaW5lICR7RH0ke2xpYmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTY0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHJlYWRsaW5lLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vcmVhZGxpbmU2My0wMDMgXAorICAgICAgICAgICAgZmlsZTovL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzM2M4ZmIyNzllOTgxMjc0ZjQ4NWZkOTFkYTc3ZTk0YSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjU2YmE2MDcxYjk0NjJmOTgwYzVhNzJhYjAwMjM4OTNiNjViYTZkZWJiNGVlYjQ3NWQ3YTU2M2RjNjVjYWZkNDMiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODI4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0zNjAwMzQ1Jmdyb3VwX2lkPTQ0NDI3JmF0aWQ9NDM5NTQ0XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYyBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYworLS0tIHN5c2ZzdXRpbHMtMi4xLjAvY29uZmlndXJlLmFjCTIwMDYtMDgtMDcgMDg6MDg6MDAuMDAwMDAwMDAwICswMzAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jb25maWd1cmUuYWMJMjAxMy0wMS0xMSAwODoxMzowOC42NTE1NTA2MzQgKzAyMDAKK0BAIC0yLDcgKzIsNyBAQAorIEFDX0lOSVQoc3lzZnN1dGlscywgMi4xLjAsIGxpbnV4LWRpYWctZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0KQorIEFNX0lOSVRfQVVUT01BS0UKKyBBQ19DT05GSUdfU1JDRElSKFtjb25maWcuaC5pbl0pCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyAjIENoZWNrcyBmb3IgS0xJQkMgc3VwcG9ydCAoc2hvdWxkIGJlIGJlZm9yZSBBQ19QUk9HX0xJQlRPT0wgYW5kIEFDX1BST0dfQ0MpCisgQUNfQ0hFQ0tfS0xJQkMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3NlcGFyYXRlYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlNzI1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggb3V0IG9mIHRyZWUgYnVpbGQgaXNzdWVzIHNvICR7Qn0gIT0gJHtTfSB3b3Jrcy4KKworUlAgMjAxMy8wMy8xOAorCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvY21kL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDYgKzEsNiBAQAorIGJpbl9QUk9HUkFNUyA9IHN5c3Rvb2wgCisgc3lzdG9vbF9TT1VSQ0VTID0gc3lzdG9vbC5jIG5hbWVzLmMgbmFtZXMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgTERBREQgPSAuLi9saWIvbGlic3lzZnMubGEKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZMQUdTQAorIEFNX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DRkxBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvbGliL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorIGxpYl9MVExJQlJBUklFUyA9IGxpYnN5c2ZzLmxhCisgbGlic3lzZnNfbGFfU09VUkNFUyA9IHN5c2ZzX3V0aWxzLmMgc3lzZnNfYXR0ci5jIHN5c2ZzX2NsYXNzLmMgZGxpc3QuYyBcCisgICAgICAgc3lzZnNfZGV2aWNlLmMgc3lzZnNfZHJpdmVyLmMgc3lzZnNfYnVzLmMgc3lzZnNfbW9kdWxlLmMgc3lzZnMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgbGlic3lzZnNfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMjoxOjAKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0xGQUdTQAorIGxpYnN5c2ZzX2xhX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DTEZBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC90ZXN0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzZnN1dGlscy0yLjEuMC5vcmlnL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy4yMjQ1NTY1MDggKzAwMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwOTowNjo0OC4xOTY1NDMzMjYgKzAwMDAKK0BAIC0yLDE0ICsyLDE0IEBACisgQlVJTFRfU09VUkNFUyA9IHRlc3QuaAorIENMRUFORklMRVMgPSB0ZXN0LmgKKyB0ZXN0Lmg6CistCS4vY3JlYXRlLXRlc3QKKysJJChzcmNkaXIpL2NyZWF0ZS10ZXN0ICQoc3JjZGlyKS9saWJzeXNmcy5jb25mCisgZ2V0X2RldmljZV9TT1VSQ0VTID0gZ2V0X2RldmljZS5jCisgZ2V0X2RyaXZlcl9TT1VSQ0VTID0gZ2V0X2RyaXZlci5jCisgZ2V0X21vZHVsZV9TT1VSQ0VTID0gZ2V0X21vZHVsZS5jCisgdGVzdGxpYnN5c2ZzX1NPVVJDRVMgPSB0ZXN0LmMgdGVzdF9hdHRyLmMgdGVzdF9idXMuYyB0ZXN0X2NsYXNzLmMgXAorIAkJICAgICAgIHRlc3RfZGV2aWNlLmMgdGVzdF9kcml2ZXIuYyB0ZXN0X21vZHVsZS5jIHRlc3RfdXRpbHMuYyBcCisgCQkgICAgICAgdGVzdG91dC5jIHRlc3QtZGVmcy5oIGxpYnN5c2ZzLmNvbmYgY3JlYXRlLXRlc3QKKy1JTkNMVURFUyA9IC1JLi4vaW5jbHVkZQorK0lOQ0xVREVTID0gLUkkKHNyY2RpcikvLi4vaW5jbHVkZQorIExEQUREID0gLi4vbGliL2xpYnN5c2ZzLmxhCisgRVhUUkFfQ0ZMQUdTID0gQEVYVFJBX0NMRkFHU0AKKyBBTV9DRkxBR1MgPSAtV2FsbCAtVyAtV3N0cmljdC1wcm90b3R5cGVzICQoRVhUUkFfQ0xGQUdTKQorSW5kZXg6IHN5c2ZzdXRpbHMtMi4xLjAvdGVzdC9jcmVhdGUtdGVzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2ZzdXRpbHMtMi4xLjAub3JpZy90ZXN0L2NyZWF0ZS10ZXN0CTIwMDUtMTEtMjggMTA6MjI6MTAuMDAwMDAwMDAwICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC90ZXN0L2NyZWF0ZS10ZXN0CTIwMTMtMDMtMDggMDk6MDc6MDMuMzcyNTQyODM4ICswMDAwCitAQCAtMiw3ICsyLDcgQEAKKyAKKyBybSAtZiB0ZXN0LmgKKyAKKy1jb25mX2ZpbGU9Li9saWJzeXNmcy5jb25mCisrY29uZl9maWxlPSQxCisgCisgLiAkY29uZl9maWxlCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzNWI3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGZlZG9yYSBjb3JlIDldCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSB0aGUgRmVkb3JhIENvcmUgOSBzeXNmc3V0aWxzLTIuMS4wLTMuZmM5IHBhY2thZ2UuCisKK0l0IGZpeGVzIGEgcHJvYmxlbSBpbiB0aGUgdXBzdHJlYW0gcGFja2FnZSB3aGVyZSBub3QgYWxsIGRldmljZXMgCit3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbi4KKworVGhlIHBhY2thZ2UgTGljZW5zZSBpbmRpY2F0ZXMgdGhpcyBpcyBHUEx2MiBsaWNlbnNlZC4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC1wdU4gbGliL3N5c2ZzX2NsYXNzLmN+c3lzZnN1dGlsc19jbGFzc19kdXAgbGliL3N5c2ZzX2NsYXNzLmMKKy0tLSBzeXNmc3V0aWxzLTIuMS4wL2xpYi9zeXNmc19jbGFzcy5jfnN5c2ZzdXRpbHNfY2xhc3NfZHVwCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCisrKysgc3lzZnN1dGlscy0yLjEuMC1iamtpbmcxL2xpYi9zeXNmc19jbGFzcy5jCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCitAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW50IGNkZXZfbmFtZV9lcXVhbCh2b2lkICphLCB2b2lkCisgCQlyZXR1cm4gMDsKKyAKKyAJaWYgKHN0cm5jbXAoKGNoYXIgKilhLCAoKHN0cnVjdCBzeXNmc19jbGFzc19kZXZpY2UgKiliKS0+bmFtZSwKKy0JCQkJc3RybGVuKChjaGFyICopYSkpID09IDApCisrCQkJCVNZU0ZTX05BTUVfTEVOKSA9PSAwKQorIAkJcmV0dXJuIDE7CisgCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzXzIuMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzXzIuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjQwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJUb29scyBmb3Igd29ya2luZyB3aXRoIHN5c2ZzIgorREVTQ1JJUFRJT04gPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgc3lzZnMgdmlydHVhbCBmaWxlc3lzdGVtLiAgVGhlIHRvb2wgJ3N5c3Rvb2wnIGNhbiBxdWVyeSBkZXZpY2VzIGJ5IGJ1cywgY2xhc3MgYW5kIHRvcG9sb2d5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saW51eC1kaWFnLnNvdXJjZWZvcmdlLm5ldC9TeXNmc3V0aWxzLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIiCitMSUNFTlNFX2xpYnN5c2ZzID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2QwNjQwM2VhNTRjNzU3NGE5ZTU4MWM2NDc4Y2MzOTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY21kL0dQTDttZDU9ZDQxZDRlMmUxZTEwODU1NGUwMzg4ZWE0YWVjZDhkMjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL0xHUEw7bWQ1PWI3NWQwNjk3OTExMDNmZmUxYzBkNjQzNWRlZWZmNzJlIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpbnV4LWRpYWcvc3lzZnN1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlYnVpbGQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNGU3ZGNkMDQzNmQyZjQ5YWE0MDNmNjdlMWVmN2RkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlODY1ZGUyYzFmNTU5ZmZmMGQzZmM5MzZlNjYwYzBlZmFmN2FmZTY2MjA2NGYyZmI5N2NjYWQxZWMyOGQyMDhhIgorUyA9ICIke1dPUktESVJ9L3N5c2ZzdXRpbHMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rICJsaWJzeXNmcyIKK0ZJTEVTX2xpYnN5c2ZzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfbGlic3lzZnMtZGV2ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJzeXNmcy1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKKworZXhwb3J0IGxpYmRpciA9ICIke2Jhc2VfbGliZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1jb21wYXQtdW5pdHMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiRW5oYW5jZXMgc3lzdGVtZCBjb21wYXRpbGliaXR5IHdpdGggZXhpc3RpbmcgU3lzVmluaXQgc2NyaXB0cyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKKworUFIgPSAicjI5IgorCitERVBFTkRTID0gInN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2gKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTID0gIiBcCisgIGJ1c3lib3gtdWRoY3BjIFwKKyAgaHdjbG9jayBcCisgIG5ldHdvcmtpbmcgXAorICBuZnNzZXJ2ZXIgXAorICBuZnNjb21tb24gXAorICBzeXNsb2cuYnVzeWJveCBcCisiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJY2QgJEQke3N5c2NvbmZkaXJ9L2luaXQuZAorCisJZWNobyAiRGlzYWJsaW5nIHRoZSBmb2xsb3dpbmcgc3lzdiBzY3JpcHRzOiAiCisKKwlPUFRTPSIiCisKKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFRTPSItLXJvb3Q9JEQiCisJZmkKKworCWZvciBpIGluICR7U1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTfSA7IGRvCisJCWlmIFsgXCggLWUgJGkgLW8gJGkuc2ggXCkgLWEgISBcKCAtZSAkRCR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vJGkuc2VydmljZSAtbyAgLWUgJEQke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyRpLnNlcnZpY2UgXCkgXSA7IHRoZW4KKwkJCWVjaG8gLW4gIiRpOiAiIDsgc3lzdGVtY3RsICR7T1BUU30gbWFzayAkaS5zZXJ2aWNlCisJCWZpCisJZG9uZSA7IGVjaG8KK30KKworUkRQRVBFTkRTXyR7UE59ID0gInN5c3RlbWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4YjEzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlNlcmlhbCB0ZXJtaW5hbCBzdXBwb3J0IGZvciBzeXN0ZW1kIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworUFIgPSAicjUiCisKK1NFUklBTF9DT05TT0xFID89ICIxMTUyMDAgdHR5UzAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NlcmlhbC1nZXR0eUAuc2VydmljZSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWlmIFsgISAteiAiJHtTRVJJQUxfQ09OU09MRVN9IiBdIDsgdGhlbgorCQlkZWZhdWx0X2JhdWRyYXRlPWBlY2hvICIke1NFUklBTF9DT05TT0xFU30iIHwgc2VkICdzL1w7LiovLydgCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzLworCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kZGVmYXVsdF9iYXVkcmF0ZS9nICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eUAuc2VydmljZQorCisJCXRtcD0iJHtTRVJJQUxfQ09OU09MRVN9IgorCQlmb3IgZW50cnkgaW4gJHRtcCA7IGRvCisJCQliYXVkcmF0ZT1gZWNobyAkZW50cnkgfCBzZWQgJ3MvXDsuKi8vJ2AKKwkJCXR0eWRldj1gZWNobyAkZW50cnkgfCBzZWQgLWUgJ3MvXlswLTldKlw7Ly8nIC1lICdzL1w7LiovLydgCisJCQlpZiBbICIkYmF1ZHJhdGUiID0gIiRkZWZhdWx0X2JhdWRyYXRlIiBdIDsgdGhlbgorCQkJCSMgZW5hYmxlIHRoZSBzZXJ2aWNlCisJCQkJbG4gLXNmICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlIFwKKwkJCQkJJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzL3NlcmlhbC1nZXR0eUAkdHR5ZGV2LnNlcnZpY2UKKwkJCWVsc2UKKwkJCQkjIGluc3RhbGwgY3VzdG9tIHNlcnZpY2UgZmlsZSBmb3IgdGhlIG5vbi1kZWZhdWx0IGJhdWRyYXRlCisJCQkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZQorCQkJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kYmF1ZHJhdGUvZyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVALnNlcnZpY2UKKwkJCQkjIGVuYWJsZSB0aGUgc2VydmljZQorCQkJCWxuIC1zZiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZSBcCisJCQkJCSR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtL2dldHR5LnRhcmdldC53YW50cy9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVAJHR0eWRldi5zZXJ2aWNlCisJCQlmaQorCQlkb25lCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAic3lzdGVtZCIKKworIyBUaGlzIGlzIGEgbWFjaGluZSBzcGVjaWZpYyBmaWxlCitGSUxFU18ke1BOfSA9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZSAke3N5c2NvbmZkaXJ9IgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBBcyB0aGlzIHBhY2thZ2UgaXMgdGllZCB0byBzeXN0ZW1kLCBvbmx5IGJ1aWxkIGl0IHdoZW4gd2UncmUgYWxzbyBidWlsZGluZyBzeXN0ZW1kLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkvc2VyaWFsLWdldHR5QC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MjE2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkvc2VyaWFsLWdldHR5QC5zZXJ2aWNlCkBAIC0wLDAgKzEsMzcgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN5c3RlbWQuCisjCisjICBzeXN0ZW1kIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworW1VuaXRdCitEZXNjcmlwdGlvbj1TZXJpYWwgR2V0dHkgb24gJUkKK0RvY3VtZW50YXRpb249bWFuOmFnZXR0eSg4KSBtYW46c3lzdGVtZC1nZXR0eS1nZW5lcmF0b3IoOCkKK0RvY3VtZW50YXRpb249aHR0cDovLzBwb2ludGVyLmRlL2Jsb2cvcHJvamVjdHMvc2VyaWFsLWNvbnNvbGUuaHRtbAorQmluZHNUbz1kZXYtJWkuZGV2aWNlCitBZnRlcj1kZXYtJWkuZGV2aWNlIHN5c3RlbWQtdXNlci1zZXNzaW9ucy5zZXJ2aWNlIHBseW1vdXRoLXF1aXQtd2FpdC5zZXJ2aWNlCitBZnRlcj1yYy1sb2NhbC5zZXJ2aWNlCisKKyMgSWYgYWRkaXRpb25hbCBnZXR0eXMgYXJlIHNwYXduZWQgZHVyaW5nIGJvb3QgdGhlbiB3ZSBzaG91bGQgbWFrZQorIyBzdXJlIHRoYXQgdGhpcyBpcyBzeW5jaHJvbml6ZWQgYmVmb3JlIGdldHR5LnRhcmdldCwgZXZlbiB0aG91Z2gKKyMgZ2V0dHkudGFyZ2V0IGRpZG4ndCBhY3R1YWxseSBwdWxsIGl0IGluLgorQmVmb3JlPWdldHR5LnRhcmdldAorSWdub3JlT25Jc29sYXRlPXllcworCitbU2VydmljZV0KK0Vudmlyb25tZW50PSJURVJNPXh0ZXJtIgorRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLTggLUwgLS1rZWVwLWJhdWQgJUkgQEJBVURSQVRFQCAkVEVSTQorVHlwZT1pZGxlCitSZXN0YXJ0PWFsd2F5cworUmVzdGFydFNlYz0wCitVdG1wSWRlbnRpZmllcj0lSQorVFRZUGF0aD0vZGV2LyVJCitUVFlSZXNldD15ZXMKK1RUWVZIYW5ndXA9eWVzCitLaWxsTW9kZT1wcm9jZXNzCitJZ25vcmVTSUdQSVBFPW5vCitTZW5kU0lHSFVQPXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWdldHR5LnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmRjOWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIGZvciBlbmFibGluZyBzeXN0ZW1kIHNlcnZpY2VzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitQUiA9ICJyNiIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJmaWxlOi8vc3lzdGVtY3RsIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3lzdGVtY3RsICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC9zeXN0ZW1jdGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmUxNjNiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKK2VjaG8gIlN0YXJ0ZWQgJDAgJCoiCisKK1JPT1Q9CisKKyMgcGFyc2UgY29tbWFuZCBsaW5lIHBhcmFtcworYWN0aW9uPQord2hpbGUgWyAkIyAhPSAwIF07IGRvCisJb3B0PSIkMSIKKworCWNhc2UgIiRvcHQiIGluCisJCWVuYWJsZSkKKwkJCXNoaWZ0CisKKwkJCWFjdGlvbj0iJG9wdCIKKwkJCXNlcnZpY2VzPSIkMSIKKwkJCWNtZF9hcmdzPSIxIgorCQkJc2hpZnQKKwkJCTs7CisJCWRpc2FibGUpCisJCQlzaGlmdAorCisJCQlhY3Rpb249IiRvcHQiCisJCQlzZXJ2aWNlcz0iJDEiCisJCQljbWRfYXJncz0iMSIKKwkJCXNoaWZ0CisJCQk7OworCQltYXNrKQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJcHJlc2V0KQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yb290PSopCisJCQlST09UPSR7b3B0IyMtLXJvb3Q9fQorCQkJY21kX2FyZ3M9IjAiCisJCQlzaGlmdAorCQkJOzsKKwkJKikKKwkJCWlmIFsgIiRjbWRfYXJncyIgPSAiMSIgXTsgdGhlbgorCQkJCXNlcnZpY2VzPSIkc2VydmljZXMgJG9wdCIgCisJCQkJc2hpZnQKKwkJCWVsc2UKKwkJCQllY2hvICInJG9wdCcgaXMgYW4gdW5rb3duIG9wdGlvbjsgZXhpdGluZyB3aXRoIGVycm9yIgorCQkJCWV4aXQgMQorCQkJZmkKKwkJCTs7CisJZXNhYworZG9uZQoraWYgWyAiJGFjdGlvbiIgPSAicHJlc2V0IiAtYSAiJHNlcnZpY2VfZmlsZSIgPSAiIiBdOyB0aGVuCisJc2VydmljZXM9JChmb3IgZiBpbiBgZmluZCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0gJFJPT1QvbGliL3N5c3RlbWQvc3lzdGVtICRST09UL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0gLXR5cGUgZiAyPjFgOyBkbyBiYXNlbmFtZSAkZjsgZG9uZSkKKwlzZXJ2aWNlcz0iJHNlcnZpY2VzICRvcHQiCisJcHJlc2V0YWxsPTEKK2ZpCisKK2ZvciBzZXJ2aWNlIGluICRzZXJ2aWNlczsgZG8KKwlpZiBbICIkcHJlc2V0YWxsIiA9ICIxIiBdOyB0aGVuCisJCWFjdGlvbj0icHJlc2V0IgorCWZpCisJaWYgWyAiJGFjdGlvbiIgPSAibWFzayIgXTsgdGhlbgorCQlpZiBbICEgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyBdOyB0aGVuCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vCisJCWZpCisJCWNtZD0ibG4gLXMgL2Rldi9udWxsICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kc2VydmljZSIKKwkJZWNobyAiJGNtZCIKKwkJJGNtZAorCQlleGl0IDAKKwlmaQorCisJc2VydmljZV9iYXNlX2ZpbGU9YGVjaG8gJHNlcnZpY2UgfCBzZWQgJ3MvXChAXCkuKlwoXC5bXi5dXCtcKS9cMVwyLydgCisJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAnL0AvcDtkJ2AgXTsgdGhlbgorCQllY2hvICJUcnkgdG8gZmluZCBsb2NhdGlvbiBvZiAkc2VydmljZS4uLiIKKwkJc2VydmljZV90ZW1wbGF0ZT1mYWxzZQorCWVsc2UKKwkJZWNobyAiVHJ5IHRvIGZpbmQgbG9jYXRpb24gb2YgdGVtcGxhdGUgJHNlcnZpY2VfYmFzZV9maWxlIG9mIGluc3RhbmNlICRzZXJ2aWNlLi4uIgorCQlzZXJ2aWNlX3RlbXBsYXRlPXRydWUKKwkJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAncy9eLlwrQFwoLipcKVwuW14uXVwrL1wxLydgIF07IHRoZW4KKwkJCWluc3RhbmNlX3NwZWNpZmllZD1mYWxzZQorCQllbHNlCisJCQlpbnN0YW5jZV9zcGVjaWZpZWQ9dHJ1ZQorCQlmaQorCWZpCisKKwkjIGZpbmQgc2VydmljZSBmaWxlCisJZm9yIHAgaW4gJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtIFwKKwkJICRST09UL2xpYi9zeXN0ZW1kL3N5c3RlbSBcCisJCSAkUk9PVC91c3IvbGliL3N5c3RlbWQvc3lzdGVtOyBkbworCQlpZiBbIC1lICRwLyRzZXJ2aWNlX2Jhc2VfZmlsZSBdOyB0aGVuCisJCQlzZXJ2aWNlX2ZpbGU9JHAvJHNlcnZpY2VfYmFzZV9maWxlCisJCQlzZXJ2aWNlX2ZpbGU9JHtzZXJ2aWNlX2ZpbGUjIyRST09UfQorCQlmaQorCWRvbmUKKwlpZiBbIC16ICIkc2VydmljZV9maWxlIiBdOyB0aGVuCisJCWVjaG8gIickc2VydmljZV9iYXNlX2ZpbGUnIGNvdWxkbid0IGJlIGZvdW5kOyBleGl0aW5nIHdpdGggZXJyb3IiCisJCWV4aXQgMQorCWZpCisJZWNobyAiRm91bmQgJHNlcnZpY2UgaW4gJHNlcnZpY2VfZmlsZSIKKworCSMgSWYgYW55IG5ldyB1bml0IHR5cGVzIGFyZSBhZGRlZCB0byBzeXN0ZW1kIHRoZXkgc2hvdWxkIGJlIGFkZGVkCisJIyB0byB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKwl1bml0X3R5cGVzX3JlPSdcLlwoc2VydmljZVx8c29ja2V0XHxkZXZpY2VcfG1vdW50XHxhdXRvbW91bnRcfHN3YXBcfHRhcmdldFx8cGF0aFx8dGltZXJcfHNuYXBzaG90XCkkJworCWlmIFsgIiRhY3Rpb24iID0gInByZXNldCIgXTsgdGhlbgorCQlhY3Rpb249YGVncmVwIC1zaCAgJHNlcnZpY2UgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQlpZiBbIC16ICIkYWN0aW9uIiBdOyB0aGVuCisJCQlnbG9iYWxwcmVzZXQ9YGVncmVwIC1zaCAgJ1wqJyAgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQkJaWYgWyAtbiAiJGdsb2JhbHByZXNldCIgXTsgdGhlbgorCQkJCWFjdGlvbj0iJGdsb2JhbHByZXNldCIKKwkJCWVsc2UKKwkJCQlhY3Rpb249ImVuYWJsZSIKKwkJCWZpCisJCWZpCisJZmkKKwkjIGNyZWF0ZSB0aGUgcmVxdWlyZWQgc3ltYm9saWMgbGlua3MKKwl3YW50ZWRfYnk9JChzZWQgJy9eV2FudGVkQnlbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkd2FudGVkX2J5OyBkbworCQllY2hvICJXYW50ZWRCeT0kciBmb3VuZCBpbiAkc2VydmljZSIKKwkJaWYgWyAiJGFjdGlvbiIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCQllbmFibGVfc2VydmljZT0kc2VydmljZQorCQkJaWYgWyAiJHNlcnZpY2VfdGVtcGxhdGUiID0gdHJ1ZSAtYSAiJGluc3RhbmNlX3NwZWNpZmllZCIgPSBmYWxzZSBdOyB0aGVuCisJCQkJZGVmYXVsdF9pbnN0YW5jZT0kKHNlZCAnL15EZWZhdWx0SW5zdGFuY2VbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIikKKwkJCQlpZiBbIC16ICRkZWZhdWx0X2luc3RhbmNlIF07IHRoZW4KKwkJCQkJZWNobyAiVGVtcGxhdGUgdW5pdCB3aXRob3V0IGluc3RhbmNlIG9yIERlZmF1bHRJbnN0YW5jZSBkaXJlY3RpdmUsIG5vdGhpbmcgdG8gZW5hYmxlIgorCQkJCQljb250aW51ZQorCQkJCWVsc2UKKwkJCQkJZWNobyAiRm91bmQgRGVmYXVsdEluc3RhbmNlICRkZWZhdWx0X2luc3RhbmNlLCBlbmFibGluZyBpdCIKKwkJCQkJZW5hYmxlX3NlcnZpY2U9JChlY2hvICRzZXJ2aWNlIHwgc2VkICJzL0AvQCRkZWZhdWx0X2luc3RhbmNlLyIpCisJCQkJZmkKKwkJCWZpCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMKKwkJCWxuIC1zICRzZXJ2aWNlX2ZpbGUgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRlbmFibGVfc2VydmljZQorCQkJZWNobyAiRW5hYmxlZCAkZW5hYmxlX3NlcnZpY2UgZm9yICR3YW50ZWRfYnkuIgorCQllbHNlCisJCQlpZiBbICIkc2VydmljZV90ZW1wbGF0ZSIgPSB0cnVlIC1hICIkaW5zdGFuY2Vfc3BlY2lmaWVkIiA9IGZhbHNlIF07IHRoZW4KKwkJCQlkaXNhYmxlX3NlcnZpY2U9IiRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cy9gZWNobyAkc2VydmljZSB8IHNlZCAncy9AL0AqLydgIgorCQkJZWxzZQorCQkJCWRpc2FibGVfc2VydmljZT0iJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRzZXJ2aWNlIgorCQkJZmkKKwkJCXJtIC1mICRkaXNhYmxlX3NlcnZpY2UKKwkJCVsgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzIF0gJiYgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzCisJCQllY2hvICJEaXNhYmxlZCAke2Rpc2FibGVfc2VydmljZSMjJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzL30gZm9yICR3YW50ZWRfYnkuIgorCQlmaQorCWRvbmUKKworCSMgY3JlYXRlIHRoZSByZXF1aXJlZCBzeW1ib2xpYyAnQWxpYXMnIGxpbmtzCisJYWxpYXM9JChzZWQgJy9eQWxpYXNbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkYWxpYXM7IGRvCisJCWlmIFsgIiRhY3Rpb24iID0gImVuYWJsZSIgXTsgdGhlbgorCQkJbWtkaXIgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtCisJCQlsbiAtcyAkc2VydmljZV9maWxlICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kcgorCQkJZWNobyAiRW5hYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZWxzZQorCQkJcm0gLWYgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyCisJCQllY2hvICJEaXNhYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZmkKKwlkb25lCisKKwkjIGNhbGwgdXMgZm9yIHRoZSBvdGhlciByZXF1aXJlZCBzY3JpcHRzCisJYWxzbz0kKHNlZCAnL15BbHNvW1s6c3BhY2U6XV0qPS9zLFtePV0qPSwscDtkJyAiJFJPT1QvJHNlcnZpY2VfZmlsZSIgXAorCQkgICB8IHRyICcsJyAnXG4nKQorCWZvciBhIGluICRhbHNvOyBkbworCQllY2hvICJBbHNvPSRhIGZvdW5kIGluICRzZXJ2aWNlIgorCQlpZiBbICIkYWN0aW9uIiA9ICJlbmFibGUiIF07IHRoZW4KKwkJCSQwIC0tcm9vdD0kUk9PVCBlbmFibGUgJGEKKwkJZmkKKwlkb25lCitkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjYmUxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZgpAQCAtMCwwICsxLDcgQEAKKyNUaGlzIGdvZXMgaGFuZC1pbi1oYW5kIHdpdGggdGhlIGJhc2UtZmlsZXMgb2YgT0UtQ29yZS4gVGhlIGZpbGUgbXVzdAorIyBiZSBzb3J0ZWQgYmVmb3JlICdzeXN0ZW1kLmNvbmYnIGJlY3Vhc2UgdGhpcyBhdHRlbXB0cyB0byBjcmVhdGUgYSBmaWxlCisjIGluc2lkZSAvdmFyL2xvZy4KKworCitkCQkvdmFyL3ZvbGF0aWxlL2xvZwkJLQktCS0JLQorZAkJL3Zhci92b2xhdGlsZS90bXAJCTE3NzcJLQktCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmFiNWVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDEwMGU1MDYwNGVmYzQwMzIwMDFhMmRlNmE2YjQ3ODUzYzAwMDM4MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyOToxNSArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzExXSB1bml0czogUHJlZmVyIGdldHR5IHRvIGFnZXR0eSBpbiBjb25zb2xlIHNldHVwIHN5c3RlbWQKKyB1bml0cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb24gc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHVuaXRzL2dldHR5QC5zZXJ2aWNlLm00ICAgICAgICB8IDIgKy0KKyB1bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91bml0cy9nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitpbmRleCA0NjE2NGFiLi5iZGY2ZWM4IDEwMDY0NAorLS0tIGEvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKKysrKyBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitAQCAtMjcsNyArMjcsNyBAQCBDb25kaXRpb25QYXRoRXhpc3RzPS9kZXYvdHR5MAorIAorIFtTZXJ2aWNlXQorICMgdGhlIFZUIGlzIGNsZWFyZWQgYnkgVFRZVlREaXNhbGxvY2F0ZQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0tbm9jbGVhciAlSSAkVEVSTQorK0V4ZWNTdGFydD0tL3NiaW4vZ2V0dHkgLUwgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFJlc3RhcnRTZWM9MAorZGlmZiAtLWdpdCBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAoraW5kZXggNDUyMmQwZC4uZTZkNDk5ZCAxMDA2NDQKKy0tLSBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAorKysrIGIvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00CitAQCAtMjIsNyArMjIsNyBAQCBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgSWdub3JlT25Jc29sYXRlPXllcworIAorIFtTZXJ2aWNlXQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0ta2VlcC1iYXVkIDExNTIwMCwzODQwMCw5NjAwICVJICRURVJNCisrRXhlY1N0YXJ0PS0vc2Jpbi9nZXR0eSAtTCAxMTUyMDAgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFV0bXBJZGVudGlmaWVyPSVJCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjBmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gMTg0YTg5Y2FhY2ZhMDBmMDdlNzI3NWJjYTU5MmJkN2RkYTFiNTQxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjAzOjQ0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTFdIGJpbmZtdDogRG9uJ3QgaW5zdGFsbCBkZXBlbmRlbmN5IGxpbmtzIGF0IGluc3RhbGwgdGltZQorIGZvciB0aGUgYmluZm10IHNlcnZpY2VzCisKK3VzZSBbSW5zdGFsbF0gYmxvY2tzIHNvIHRoYXQgdGhleSBnZXQgY3JlYXRlZCB3aGVuIHRoZSBzZXJ2aWNlIGlzIGVuYWJsZWQKK2xpa2UgYSB0cmFkaXRpb25hbCBzZXJ2aWNlLgorCitUaGUgW0luc3RhbGxdIGJsb2NrcyB3ZXJlIHJlamVjdGVkIHVwc3RyZWFtIGFzIHRoZXkgZG9uJ3QgaGF2ZSBhIHdheSB0bworImVuYWJsZSIKK2l0IG9uIGluc3RhbGwgd2l0aG91dCBzdGF0aWMgc3ltbGlua3Mgd2hpY2ggY2FuJ3QgYmUgZGlzYWJsZWQsIG9ubHkKK21hc2tlZC4gIFdlCitob3dldmVyIGNhbiBkbyB0aGF0IGluIGEgcG9zdGluc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAtLS0tCisgdW5pdHMvcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50IHwgMyArKysKKyB1bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluICAgICAgICAgfCA1ICsrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTQyNzEsMTAgKzQyNzEsNiBAQCBJTlNUQUxMX0RJUlMgKz0gXAorIAkkKHByZWZpeCkvbGliL2JpbmZtdC5kIFwKKyAJJChzeXNjb25mZGlyKS9iaW5mbXQuZAorIAorLVNZU0lOSVRfVEFSR0VUX1dBTlRTICs9IFwKKy0Jc3lzdGVtZC1iaW5mbXQuc2VydmljZSBcCistCXByb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorLQorIGVuZGlmCisgCisgRVhUUkFfRElTVCArPSBcCitJbmRleDogZ2l0L3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorKysrIGdpdC91bml0cy9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKK0BAIC0xNiwzICsxNiw2IEBAIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCisgCisgW0F1dG9tb3VudF0KKyBXaGVyZT0vcHJvYy9zeXMvZnMvYmluZm10X21pc2MKKysKKytbSW5zdGFsbF0KKytXYW50ZWRCeT1zeXNpbml0LnRhcmdldAorSW5kZXg6IGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvc3lzdGVtZC1iaW5mbXQuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCitAQCAtMTEsNiArMTEsOCBAQCBEb2N1bWVudGF0aW9uPW1hbjpzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlCisgRG9jdW1lbnRhdGlvbj1odHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9Eb2N1bWVudGF0aW9uL2JpbmZtdF9taXNjLnR4dAorIERlZmF1bHREZXBlbmRlbmNpZXM9bm8KKyBDb25mbGljdHM9c2h1dGRvd24udGFyZ2V0CisrV2FudHM9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisrCisgQWZ0ZXI9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisgQmVmb3JlPXN5c2luaXQudGFyZ2V0IHNodXRkb3duLnRhcmdldAorIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCitAQCAtMjUsMyArMjcsNiBAQCBUeXBlPW9uZXNob3QKKyBSZW1haW5BZnRlckV4aXQ9eWVzCisgRXhlY1N0YXJ0PUByb290bGliZXhlY2RpckAvc3lzdGVtZC1iaW5mbXQKKyBUaW1lb3V0U2VjPTkwcworKworK1tJbnN0YWxsXQorK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNC1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDQtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDc4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDQtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDRlMmU4ZGJmM2YyM2FiN2RjYTMyMjg2Y2MwZjM3YmZmNmFjNDllMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNTowNTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzExXSBjb25maWd1cmU6IENoZWNrIGZvciBhZGRpdGlvbmFsIGZlYXR1cmVzIHRoYXQgdWNsaWJjCisgZG9lc250IHN1cHBvcnQKKworVGhpcyBoZWxwcyBpbiBzdXBwb3J0aW5nIHVjbGliYyB3aGljaCBkb2VzIG5vdCBoYXZlIGFsbCBmZWF0dXJlcyB0aGF0CitnbGliYyBtaWdodCBoYXZlCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTggKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKKworSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTEwLDYgKzExMCwyNCBAQCBBQ19QQVRIX1BST0coW1VNT1VOVF9QQVRIXSwgW3Vtb3VudF0sIFsvCisgCisgQVNfSUYoWyEgbG4gLS1yZWxhdGl2ZSAtLWhlbHAgPiAvZGV2L251bGwgMj4mMV0sIFtBQ19NU0dfRVJST1IoWyoqKiBsbiBkb2Vzbid0IHN1cHBvcnQgLS1yZWxhdGl2ZSAqKipdKV0pCisgCisrIyBjaGVjayBmb3IgZmV3IGZ1bmN0aW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gdUNsaWJjCisrCisrQUNfQ0hFQ0tfRlVOQ1NfT05DRShta29zdGVtcCBleGVjdnBlIHBvc2l4X2ZhbGxvY2F0ZSkKKysKKysjIGNoZWNrIGZvciAlbXMgZm9ybWF0IHN1cHBvcnQgLSBhc3N1bWUgYWx3YXlzIG5vIGlmIGNyb3NzIGNvbXBpbGluZworKworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAlbXMgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSAqc2NhbmZdKQorKworK0FDX0xJTktfSUZFTFNFKAorKwlbQUNfTEFOR19QUk9HUkFNKFsKKysJICNpbmNsdWRlIDxzdGRpby5oPgorKwkgXSxbCisrCSAgICBjaGFyICpidWYxLCAqYnVmMiwgKmJ1ZjMsIHN0cj0iMSAyLjMgYWJjZGUiIDsKKysJICAgIGludCByYyA9IHNzY2FuZihzdHIsICIlbXMgJW1zICVtcyIsICZidWYxLCAmYnVmMiwgJmJ1ZjMpIDsKKysJICAgIHJldHVybiAocmM9PTMpPzA6MTtdKV0sCisrCVtBQ19ERUZJTkUoW0hBVkVfTVNGT1JNQVRdLCBbMV0sIFtEZWZpbmUgaWYgJW1zIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgKnNjYW5mLl0pXSwKKysJW0FDX01TR19SRVNVTFQoW25vXSldKQorKworIE00X0RFRklORVM9CisgCisgQUNfQ0hFQ0tfVE9PTChPQkpDT1BZLCBvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDUtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDUtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTAwODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBhNzQxN2MyZTY5NTBkNTVjMjJjMWIwZDE1NzgzODk4YjhmZjIyOWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MTA6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xMV0gbnNwYXduOiBVc2UgZXhlY3ZwZSBvbmx5IHdoZW4gbGliYyBzdXBwb3J0cyBpdAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbbm8gZGVzaXJlIGZvciB1Y2xpYmMgc3VwcG9ydF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK0luZGV4OiBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9uc3Bhd24vbnNwYXduLmMKKysrKyBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworQEAgLTE0Myw2ICsxNDMsOCBAQCB0eXBlZGVmIHN0cnVjdCBDdXN0b21Nb3VudCB7CisgICAgICAgICBjaGFyICoqbG93ZXI7CisgfSBDdXN0b21Nb3VudDsKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgc3RhdGljIGNoYXIgKmFyZ19kaXJlY3RvcnkgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdGVtcGxhdGUgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdXNlciA9IE5VTEw7CitAQCAtNDIzOCw3ICs0MjQwLDEyIEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGFbMF0gPSAoY2hhciopICIvc2Jpbi9pbml0IjsKKyAgICAgICAgICAgICAgICAgZXhlY3ZlKGFbMF0sIGEsIGVudl91c2UpOworICAgICAgICAgfSBlbHNlIGlmIChhcmdjID4gb3B0aW5kKQorKyNpZmRlZiBIQVZFX0VYRUNWUEUKKyAgICAgICAgICAgICAgICAgZXhlY3ZwZShhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQsIGVudl91c2UpOworKyNlbHNlCisrICAgICAgICAgICAgICAgIGVudmlyb24gPSBlbnZfdXNlOworKyAgICAgICAgICAgICAgICBleGVjdnAoYXJndltvcHRpbmRdLCBhcmd2ICsgb3B0aW5kKTsKKysjZW5kaWYgLyogSEFWRV9FWEVDVlBFICovCisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgY2hkaXIoaG9tZSA/IGhvbWUgOiAiL3Jvb3QiKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWpvdXJuYWwtVXNlLXBvc2l4LWZhbGxvY2F0ZS1vbmx5LWlmLWF2YWlsYWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWpvdXJuYWwtVXNlLXBvc2l4LWZhbGxvY2F0ZS1vbmx5LWlmLWF2YWlsYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzFkZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMzRhNjFiNmM5ZWVkM2ZhZDM2MDA2NmZiNjMxMzJlYmM3ZTBhYWFhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjEyOjQ4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTFdIGpvdXJuYWw6IFVzZSBwb3NpeCBmYWxsb2NhdGUgb25seSBpZiBhdmFpbGFibGUKKworU29tZSBhcmNoaXRlY3R1cmUgcG9ydHMgaW4gdWNsaWJjIGRpZCBub3Qgc3VwcG9ydCBpdCBpbiBwYXN0CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMgIHwgMTYgKysrKysrKysrKysrKysrLQorIHNyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyB8IDE1ICsrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK2luZGV4IDI4NDVlMDUuLjk0MzExNzEgMTAwNjQ0CistLS0gYS9zcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK0BAIC0zNiw2ICszNiw4IEBACisgI2luY2x1ZGUgImNvbXByZXNzLmgiCisgI2luY2x1ZGUgImZzcHJnLmgiCisgCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworICNkZWZpbmUgREVGQVVMVF9EQVRBX0hBU0hfVEFCTEVfU0laRSAoMjA0N1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorICNkZWZpbmUgREVGQVVMVF9GSUVMRF9IQVNIX1RBQkxFX1NJWkUgKDMzM1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorIAorQEAgLTM1NCw3ICszNTYsNyBAQCBzdGF0aWMgaW50IGpvdXJuYWxfZmlsZV9mc3RhdChKb3VybmFsRmlsZSAqZikgeworIAorIHN0YXRpYyBpbnQgam91cm5hbF9maWxlX2FsbG9jYXRlKEpvdXJuYWxGaWxlICpmLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpIHsKKyAgICAgICAgIHVpbnQ2NF90IG9sZF9zaXplLCBuZXdfc2l6ZTsKKy0gICAgICAgIGludCByOworKyAgICAgICAgaW50IHIgPSAwOworIAorICAgICAgICAgYXNzZXJ0KGYpOworIAorQEAgLTQxOCw5ICs0MjAsMjEgQEAgc3RhdGljIGludCBqb3VybmFsX2ZpbGVfYWxsb2NhdGUoSm91cm5hbEZpbGUgKmYsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKKyAgICAgICAgIC8qIE5vdGUgdGhhdCB0aGUgZ2xpYmMgZmFsbG9jYXRlKCkgZmFsbGJhY2sgaXMgdmVyeQorICAgICAgICAgICAgaW5lZmZpY2llbnQsIGhlbmNlIHdlIHRyeSB0byBtaW5pbWl6ZSB0aGUgYWxsb2NhdGlvbiBhcmVhCisgICAgICAgICAgICBhcyB3ZSBjYW4uICovCisrI2lmZGVmIEhBVkVfUE9TSVhfRkFMTE9DQVRFCisgICAgICAgICByID0gcG9zaXhfZmFsbG9jYXRlKGYtPmZkLCBvbGRfc2l6ZSwgbmV3X3NpemUgLSBvbGRfc2l6ZSk7CisgICAgICAgICBpZiAociAhPSAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLXI7CisrI2Vsc2UKKysgICAgICAgIC8qIFdyaXRlIHNvbWV0aGluZyBldmVyeSA1MTIgYnl0ZXMgdG8gbWFrZSBzdXJlIHRoZSBibG9jayBpcyBhbGxvY2F0ZWQgKi8KKysgICAgICAgIHVpbnQ2NF90IGxlbiA9IG5ld19zaXplIC0gb2xkX3NpemU7CisrICAgICAgICB1aW50NjRfdCBvZmZzZXQgPSBvbGRfc2l6ZTsKKysgICAgICAgIGZvciAob2Zmc2V0ICs9IChsZW4tMSkgJSA1MTI7IGxlbiA+IDA7IG9mZnNldCArPSA1MTIpIHsKKysgICAgICAgICAgICAgICAgbGVuIC09IDUxMjsKKysgICAgICAgICAgICAgICAgaWYgKHB3cml0ZShmLT5mZCwgIiIsIDEsIG9mZnNldCkgIT0gMSkKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworKyAgICAgICAgfQorKworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworIAorICAgICAgICAgZi0+aGVhZGVyLT5hcmVuYV9zaXplID0gaHRvbGU2NChuZXdfc2l6ZSAtIGxlNjR0b2goZi0+aGVhZGVyLT5oZWFkZXJfc2l6ZSkpOworIAorZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyBiL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworaW5kZXggYzQyMTZjNC4uYTk5OGVkNSAxMDA2NDQKKy0tLSBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jCitAQCAtNDM2LDYgKzQzNiw3IEBAIGZhaWw6CisgaW50IHNlcnZlcl9vcGVuX2tlcm5lbF9zZXFudW0oU2VydmVyICpzKSB7CisgICAgICAgICBfY2xlYW51cF9jbG9zZV8gaW50IGZkOworICAgICAgICAgdWludDY0X3QgKnA7CisrICAgICAgICBpbnQgciA9IDA7CisgCisgICAgICAgICBhc3NlcnQocyk7CisgCitAQCAtNDQ5LDcgKzQ1MCwxOSBAQCBpbnQgc2VydmVyX29wZW5fa2VybmVsX3NlcW51bShTZXJ2ZXIgKnMpIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgCistICAgICAgICBpZiAocG9zaXhfZmFsbG9jYXRlKGZkLCAwLCBzaXplb2YodWludDY0X3QpKSA8IDApIHsKKysjaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKKysgICAgICAgIHIgPSBwb3NpeF9mYWxsb2NhdGUoZmQsIDAsIHNpemVvZih1aW50NjRfdCkpOworKyNlbHNlCisrICAgICAgICAvKiBVc2UgZ29vZCBvbGQgbWV0aG9kIHRvIHdyaXRlIHplcm9zIGludG8gdGhlIGpvdXJuYWwgZmlsZQorKyAgICAgICAgICAgcGVyaGFwcyB2ZXJ5IGluZWZmaWNpZW50IHlldCB3b3JraW5nLiAqLworKyAgICAgICAgY2hhciAqYnVmID0gYWxsb2NhKHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgb2ZmX3Qgb2xkcG9zID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKysgICAgICAgIGJ6ZXJvKGJ1Ziwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrICAgICAgICBsc2VlayhmZCwgMCwgU0VFS19TRVQpOworKyAgICAgICAgciA9IHdyaXRlKGZkLCBidWYsIHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgbHNlZWsoZmQsIG9sZHBvcywgU0VFS19TRVQpOworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICAgICAgIGxvZ19lcnJvcl9lcnJubyhlcnJubywgIkZhaWxlZCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIG51bWJlciBmaWxlLCBpZ25vcmluZzogJW0iKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXV0aWwtVXNlLW1rb3N0ZW1wLW9ubHktaWYtbGliYy1zdXBwb3J0cy1pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXV0aWwtVXNlLW1rb3N0ZW1wLW9ubHktaWYtbGliYy1zdXBwb3J0cy1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGFiN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gZjc3MTQwN2QzZTAyODhjYTBjMDZhODk0MTk0ZDNkZGFkNjliOWE4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjE3OjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTFdIHV0aWw6IFVzZSBta29zdGVtcCBvbmx5IGlmIGxpYmMgc3VwcG9ydHMgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgOCArKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCBkYzY1MjgwLi43MmY0NjY1IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTk3LDYgKzk3LDggQEAKKyAjaW5jbHVkZSAiZGVmLmgiCisgI2luY2x1ZGUgInNwYXJzZS1lbmRpYW4uaCIKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgaW50IHNhdmVkX2FyZ2MgPSAwOworIGNoYXIgKipzYXZlZF9hcmd2ID0gTlVMTDsKKyAKK0BAIC02NjgyLDcgKzY2ODQsMTMgQEAgaW50IG1rb3N0ZW1wX3NhZmUoY2hhciAqcGF0dGVybiwgaW50IGZsYWdzKSB7CisgCisgICAgICAgICB1ID0gdW1hc2soMDc3KTsKKyAKKysjaWZkZWYgSEFWRV9NS09TVEVNUAorICAgICAgICAgZmQgPSBta29zdGVtcChwYXR0ZXJuLCBmbGFncyk7CisrI2Vsc2UKKysgICAgICAgIGZkID0gbWtzdGVtcChwYXR0ZXJuKTsKKysgICAgICAgIGlmIChmZCA+PSAwKSBmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MpOworKyNlbmRpZiAvKiBIQVZFX01LT1NURU1QICovCisrCisgICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjRkNGRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGI0NWVhM2JmZDY2MzU3NDRjOGE2Yjc0ZDBhYzcwMWI0NGJiMWQyOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToxOTozNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzExXSB1dGlsOiBieXBhc3MgdW5pbXBsZW1lbnRlZCBfU0NfUEhZU19QQUdFUyBzeXN0ZW0KKyBjb25maWd1cmF0aW9uIEFQSSBvbiB1Y2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMtc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgMTUgKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCA3MmY0NjY1Li5jYmJlM2IxIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTY3OTMsMTAgKzY3OTMsMjUgQEAgdWludDY0X3QgcGh5c2ljYWxfbWVtb3J5KHZvaWQpIHsKKyAgICAgICAgIC8qIFdlIHJldHVybiB0aGlzIGFzIHVpbnQ2NF90IGluIGNhc2Ugd2UgYXJlIHJ1bm5pbmcgYXMgMzJiaXQKKyAgICAgICAgICAqIHByb2Nlc3Mgb24gYSA2NGJpdCBrZXJuZWwgd2l0aCBodWdlIGFtb3VudHMgb2YgbWVtb3J5ICovCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgICAgIGNoYXIgbGluZVsxMjhdOworKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKCIvcHJvYy9tZW1pbmZvIiwgInIiKTsKKysgICAgICAgIGlmIChmID09IE5VTEwpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgd2hpbGUgKCFmZW9mKGYpICYmIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKS0xLCBmKSkgeworKyAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKGxpbmUsICJNZW1Ub3RhbDogJWwga0IiLCAmbWVtKSA9PSAxKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWVtICo9IDEwMjQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZjbG9zZShmKTsKKysgICAgICAgIHJldHVybiAodWludDY0X3QpIG1lbTsKKysjZWxzZQorICAgICAgICAgbWVtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7CisgICAgICAgICBhc3NlcnQobWVtID4gMCk7CisgCisgICAgICAgICByZXR1cm4gKHVpbnQ2NF90KSBtZW0gKiAodWludDY0X3QpIHBhZ2Vfc2l6ZSgpOworKyNlbmRpZgorIH0KKyAKKyB2b2lkIGhleGR1bXAoRklMRSAqZiwgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHMpIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXN5c3YtZ2VuZXJhdG9yLWFkZC1zdXBwb3J0LWZvci1leGVjdXRpbmctc2NyaXB0cy11bmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhM2U4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXN5c3YtZ2VuZXJhdG9yLWFkZC1zdXBwb3J0LWZvci1leGVjdXRpbmctc2NyaXB0cy11bmQucGF0Y2gKQEAgLTAsMCArMSwxNDMgQEAKK0Zyb20gODc5MWI1YjM5MzRjNTU2OTQ4NzJiNjkxNWE2NzM0MDY4M2VhZDkxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjIyOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTFdIHN5c3YtZ2VuZXJhdG9yOiBhZGQgc3VwcG9ydCBmb3IgZXhlY3V0aW5nIHNjcmlwdHMgdW5kZXIKKyAvZXRjL3JjUy5kLworCitUbyBiZSBjb21wYXRpYmxlLCBhbGwgc2VydmljZXMgdHJhbnNsYXRlZCBmcm9tIHNjcmlwdHMgdW5kZXIgL2V0Yy9yY1MuZCB3b3VsZAorcnVuIGJlZm9yZSBzZXJ2aWNlcyB0cmFuc2xhdGVkIGZyb20gc2NyaXB0cyB1bmRlciAvZXRjL3JjTi5kLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworaW5kZXggYmQ2N2YzMi4uNjc1NmNjNiAxMDA2NDQKKy0tLSBhL3NyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jCisrKysgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworQEAgLTQyLDcgKzQyLDggQEAKKyAKKyB0eXBlZGVmIGVudW0gUnVubGV2ZWxUeXBlIHsKKyAgICAgICAgIFJVTkxFVkVMX1VQLAorLSAgICAgICAgUlVOTEVWRUxfRE9XTgorKyAgICAgICAgUlVOTEVWRUxfRE9XTiwKKysgICAgICAgIFJVTkxFVkVMX1NZU0lOSVQKKyB9IFJ1bmxldmVsVHlwZTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHsKK0BAIC01Nyw2ICs1OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgeyAicmM0LmQiLCAgU1BFQ0lBTF9NVUxUSV9VU0VSX1RBUkdFVCwgUlVOTEVWRUxfVVAgfSwKKyAgICAgICAgIHsgInJjNS5kIiwgIFNQRUNJQUxfR1JBUEhJQ0FMX1RBUkdFVCwgIFJVTkxFVkVMX1VQIH0sCisgCisrICAgICAgICAvKiBEZWJpYW4gc3R5bGUgcmNTLmQsIGFsc28gYWRvcHRlZCBieSBPRSAqLworKyAgICAgICAgeyAicmNTLmQiLCAgU1BFQ0lBTF9TWVNJTklUX1RBUkdFVCwgICBSVU5MRVZFTF9TWVNJTklUfSwKKysKKyAgICAgICAgIC8qIFN0YW5kYXJkIFN5c1YgcnVubGV2ZWxzIGZvciBzaHV0ZG93biAqLworICAgICAgICAgeyAicmMwLmQiLCAgU1BFQ0lBTF9QT1dFUk9GRl9UQVJHRVQsICBSVU5MRVZFTF9ET1dOIH0sCisgICAgICAgICB7ICJyYzYuZCIsICBTUEVDSUFMX1JFQk9PVF9UQVJHRVQsICAgIFJVTkxFVkVMX0RPV04gfQorQEAgLTY1LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB0aGlzIG9yZGVyLCBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICAgICAgc3lzdl9zdGFydF9wcmlvcml0eSBpcyBrbm93biB3aGVuIHdlIGZpcnN0IGxvYWQgdGhlCisgICAgICAgICAgICB1bml0LiBBbmQgdGhhdCB2YWx1ZSB3ZSBvbmx5IGtub3cgZnJvbSBTIGxpbmtzLiBIZW5jZQorLSAgICAgICAgICAgVVAgbXVzdCBiZSByZWFkIGJlZm9yZSBET1dOICovCisrICAgICAgICAgICBVUC9TWVNJTklUIG11c3QgYmUgcmVhZCBiZWZvcmUgRE9XTiAqLworIH07CisgCisgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworQEAgLTgxLDYgKzg1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworICAgICAgICAgY2hhciAqKmNvbmZsaWN0czsKKyAgICAgICAgIGJvb2wgaGFzX2xzYjsKKyAgICAgICAgIGJvb2wgcmVsb2FkOworKyAgICAgICAgYm9vbCBkZWZhdWx0X2RlcGVuZGVuY2llczsKKysgICAgICAgIGJvb2wgZnJvbV9yY3NkOworIH0gU3lzdlN0dWI7CisgCisgY29uc3QgY2hhciAqYXJnX2Rlc3QgPSAiL3RtcCI7CitAQCAtMTgzLDYgKzE4OSw5IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfdW5pdF9maWxlKFN5c3ZTdHViICpzKSB7CisgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbj0lc1xuIiwKKyAgICAgICAgICAgICAgICAgcy0+cGF0aCwgcy0+ZGVzY3JpcHRpb24pOworIAorKyAgICAgICAgaWYgKCFzLT5kZWZhdWx0X2RlcGVuZGVuY2llcykKKysgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiRGVmYXVsdERlcGVuZGVuY2llcz1ub1xuIik7CisrCisgICAgICAgICBpZiAoIWlzZW1wdHkoYmVmb3JlKSkKKyAgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiQmVmb3JlPSVzXG4iLCBiZWZvcmUpOworICAgICAgICAgaWYgKCFpc2VtcHR5KGFmdGVyKSkKK0BAIC03MDQsMTggKzcxMywzMCBAQCBzdGF0aWMgaW50IGZpeF9vcmRlcihTeXN2U3R1YiAqcywgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgIGlmIChzLT5oYXNfbHNiICYmIG90aGVyLT5oYXNfbHNiKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworIAorLSAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5hZnRlciwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICAvKiBBbGwgc2NyaXB0cyB1bmRlciAvZXRjL3JjUy5kIHNob3VsZCBleGVjdXRlIGJlZm9yZSBzY3JpcHRzIHVuZGVyCisrICAgICAgICAgICAgICAgICAqIC9ldGMvcmNOLmQgKi8KKysgICAgICAgICAgICAgICAgaWYgKCFvdGhlci0+ZnJvbV9yY3NkICYmIHMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YmVmb3JlLCBvdGhlci0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvdGhlci0+c3lzdl9zdGFydF9wcmlvcml0eSA+IHMtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmJlZm9yZSwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG90aGVyLT5mcm9tX3Jjc2QgJiYgIXMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YWZ0ZXIsIG90aGVyLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmFmdGVyLCBvdGhlci0+bmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVyLT5zeXN2X3N0YXJ0X3ByaW9yaXR5ID4gcy0+c3lzdl9zdGFydF9wcmlvcml0eSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5iZWZvcmUsIG90aGVyLT5uYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgY29tcGFyZSB0aGUgbmFtZSBoZXJlIGxleGljb2dyYXBoaWNhbGx5PyAqLworICAgICAgICAgfQorQEAgLTc3OCw2ICs3OTksOCBAQCBzdGF0aWMgaW50IGVudW1lcmF0ZV9zeXN2KExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9IC0xOworKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5mcm9tX3Jjc2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5wYXRoID0gZnBhdGg7CisgCitAQCAtODY0LDkgKzg4NywxMSBAQCBzdGF0aWMgaW50IHNldF9kZXBlbmRlbmNpZXNfZnJvbV9yY25kKExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZS0+ZF9uYW1lWzBdID09ICdTJykgIHsKKyAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9VUCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1VQIHx8IHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVgoYSoxMCArIGIsIHNlcnZpY2UtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKT9mYWxzZTp0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmZyb21fcmNzZCA9IChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCk/dHJ1ZTpmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc2V0X2Vuc3VyZV9hbGxvY2F0ZWQoJnJ1bmxldmVsX3NlcnZpY2VzW2ldLCBOVUxMKTsKK0BAIC04NzgsNyArOTAzLDggQEAgc3RhdGljIGludCBzZXRfZGVwZW5kZW5jaWVzX2Zyb21fcmNuZChMb29rdXBQYXRocyBscCwgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlLT5kX25hbWVbMF0gPT0gJ0snICYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfRE9XTikpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9ET1dOIHx8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCkpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNldF9lbnN1cmVfYWxsb2NhdGVkKCZzaHV0ZG93bl9zZXJ2aWNlcywgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkN2ZmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSwxODEgQEAKK0Zyb20gM2RjNzMxYzFkMjcwZTJlMTQzZGU2MjFkYjliZDg5ODI5OWZkODQ5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI0OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTFdIE1ha2Ugcm9vdCdzIGhvbWUgZGlyZWN0b3J5IGNvbmZpZ3VyYWJsZQorCitPcGVuRW1iZWRkZWQgaGFzIGEgY29uZmlndXJhYmxlIGhvbWUgZGlyZWN0b3J5IGZvciByb290LiBBbGxvdworc3lzdGVtZCB0byBiZSBidWlsdCB1c2luZyBpdHMgaWRlYSBvZiB3aGF0IHJvb3QncyBob21lIGRpcmVjdG9yeQorc2hvdWxkIGJlLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorVXBzdHJlYW0gd2FudHMgdG8gaGF2ZSBhIHVuaWZpZWQgaGllcmFyY2h5IHdoZXJlIGV2ZXJ5b25lIGlzCit1c2luZyB0aGUgc2FtZSByb290IGZvbGRlci4KK2h0dHBzOi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQvaXNzdWVzLzU0MQorCitTaWduZWQtb2ZmLWJ5OiBEYW4gTWNHcmVnb3IgPGRhbi5tY2dyZWdvckB1c2Fzay5jYT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgfCAyICsrCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgNyArKysrKysrCisgc3JjL2NvcmUvdW5pdC1wcmludGYuYyAgICAgICAgICAgIHwgMiArLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgICAgICAgICAgICAgICB8IDQgKystLQorIHNyYy9iYXNpYy91dGlsLmMgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgdW5pdHMvY29uc29sZS1zaGVsbC5zZXJ2aWNlLm00LmluIHwgNCArKy0tCisgdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4gICAgICAgIHwgNCArKy0tCisgdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4gICAgICAgICAgIHwgNCArKy0tCisgOCBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCitAQCAtMjA4LDYgKzIwOCw3IEBAIEFNX0NQUEZMQUdTID0gXAorIAktRExJQkRJUj1cIiQobGliZGlyKVwiIFwKKyAJLURST09UTElCRElSPVwiJChyb290bGliZGlyKVwiIFwKKyAJLURST09UTElCRVhFQ0RJUj1cIiQocm9vdGxpYmV4ZWNkaXIpXCIgXAorKwktRFJPT1RIT01FRElSPVwiJChyb290aG9tZWRpcilcIiBcCisgCS1EVEVTVF9ESVI9XCIkKGFic190b3Bfc3JjZGlyKS90ZXN0XCIgXAorIAktSSAkKHRvcF9zcmNkaXIpL3NyYyBcCisgCS1JICQodG9wX2J1aWxkZGlyKS9zcmMvYmFzaWMgXAorQEAgLTU2MTUsNiArNTYxNiw3IEBAIEVYVFJBX0RJU1QgKz0gXAorIHN1YnN0aXR1dGlvbnMgPSBcCisgICAgICAgICd8cm9vdGxpYmV4ZWNkaXI9JChyb290bGliZXhlY2Rpcil8JyBcCisgICAgICAgICd8cm9vdGJpbmRpcj0kKHJvb3RiaW5kaXIpfCcgXAorKyAgICAgICAnfHJvb3Rob21lZGlyPSQocm9vdGhvbWVkaXIpfCcgXAorICAgICAgICAnfGJpbmRpcj0kKGJpbmRpcil8JyBcCisgICAgICAgICd8U1lTVEVNQ1RMPSQocm9vdGJpbmRpcikvc3lzdGVtY3RsfCcgXAorICAgICAgICAnfFNZU1RFTURfTk9USUZZPSQocm9vdGJpbmRpcikvc3lzdGVtZC1ub3RpZnl8JyBcCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMzgzLDYgKzEzODMsMTEgQEAgQUNfQVJHX1dJVEgoW3Jvb3RsaWJkaXJdLAorICAgICAgICAgW3dpdGhfcm9vdGxpYmRpcj0ke2xpYmRpcn1dKQorIEFYX05PUk1BTElaRV9QQVRIKFt3aXRoX3Jvb3RsaWJkaXJdKQorIAorK0FDX0FSR19XSVRIKFtyb290aG9tZWRpcl0sCisrICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXJvb3Rob21lZGlyPURJUl0sIFtIb21lIGRpcmVjdG9yeSBmb3IgdGhlIHJvb3QgdXNlcl0pLAorKyAgICAgICAgW10sCisrICAgICAgICBbd2l0aF9yb290aG9tZWRpcj0vcm9vdF0pCisrCisgQUNfQVJHX1dJVEgoW3BhbWxpYmRpcl0sCisgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXBhbWxpYmRpcj1ESVJdLCBbRGlyZWN0b3J5IGZvciBQQU0gbW9kdWxlc10pLAorICAgICAgICAgW10sCitAQCAtMTQ3NCw2ICsxNDc5LDcgQEAgQUNfU1VCU1QoW3BhbWxpYmRpcl0sIFskd2l0aF9wYW1saWJkaXJdKQorIEFDX1NVQlNUKFtwYW1jb25mZGlyXSwgWyR3aXRoX3BhbWNvbmZkaXJdKQorIEFDX1NVQlNUKFtyb290cHJlZml4XSwgWyR3aXRoX3Jvb3RwcmVmaXhdKQorIEFDX1NVQlNUKFtyb290bGliZGlyXSwgWyR3aXRoX3Jvb3RsaWJkaXJdKQorK0FDX1NVQlNUKFtyb290aG9tZWRpcl0sIFskd2l0aF9yb290aG9tZWRpcl0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKKyAgICAgICAgIE1ha2VmaWxlCitAQCAtMTU2Myw2ICsxNTY5LDcgQEAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICBpbmNsdWRlZGlyOiAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfQorICAgICAgICAgbGliIGRpcjogICAgICAgICAgICAgICAgICR7bGliZGlyfQorICAgICAgICAgcm9vdGxpYiBkaXI6ICAgICAgICAgICAgICR7d2l0aF9yb290bGliZGlyfQorKyAgICAgICAgcm9vdCBob21lIGRpcjogICAgICAgICAgICR7d2l0aF9yb290aG9tZWRpcn0KKyAgICAgICAgIFN5c1YgaW5pdCBzY3JpcHRzOiAgICAgICAke1NZU1RFTV9TWVNWSU5JVF9QQVRIfQorICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CitJbmRleDogZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29yZS91bml0LXByaW50Zi5jCisrKysgZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKK0BAIC0yMzcsNyArMjM3LDcgQEAgc3RhdGljIGludCBzcGVjaWZpZXJfdXNlcl9ob21lKGNoYXIgc3BlYworICAgICAgICAgICAgICAgICAgKiBiZXN0IG9mIGl0IGlmIHdlIGNhbiwgYnV0IGZhaWwgaWYgd2UgY2FuJ3QgKi8KKyAKKyAgICAgICAgICAgICAgICAgaWYgKCFjLT51c2VyIHx8IHN0cmVxKGMtPnVzZXIsICJyb290IikgfHwgc3RyZXEoYy0+dXNlciwgIjAiKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RyZHVwKCIvcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworIAorSW5kZXg6IGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL25zcGF3bi9uc3Bhd24uYworKysrIGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCitAQCAtNDE3Niw3ICs0MTc2LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKKyAgICAgICAgIGlmIChlbnZwW25fZW52XSkKKyAgICAgICAgICAgICAgICAgbl9lbnYgKys7CisgCistICAgICAgICBpZiAoKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkhPTUU9JXMiLCBob21lID8gaG9tZTogIi9yb290IikgPCAwKSB8fAorKyAgICAgICAgaWYgKChhc3ByaW50ZigoY2hhcioqKShlbnZwICsgbl9lbnYrKyksICJIT01FPSVzIiwgaG9tZSA/IGhvbWU6IFJPT1RIT01FRElSKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIlVTRVI9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkxPR05BTUU9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApKQorICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworQEAgLTQyNDcsNyArNDI0Nyw3IEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGV4ZWN2cChhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQpOworICNlbmRpZiAvKiBIQVZFX0VYRUNWUEUgKi8KKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6ICIvcm9vdCIpOworKyAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6IFJPT1RIT01FRElSKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL3NoIiwgIi1zaCIsIE5VTEwsIGVudl91c2UpOworICAgICAgICAgfQorSW5kZXg6IGdpdC9zcmMvYmFzaWMvdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2Jhc2ljL3V0aWwuYworKysrIGdpdC9zcmMvYmFzaWMvdXRpbC5jCitAQCAtMzIzMyw3ICszMjMzLDcgQEAgaW50IGdldF91c2VyX2NyZWRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICpnaWQgPSAwOworIAorICAgICAgICAgICAgICAgICBpZiAoaG9tZSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAqaG9tZSA9ICIvcm9vdCI7CisrICAgICAgICAgICAgICAgICAgICAgICAgKmhvbWUgPSBST09USE9NRURJUjsKKyAKKyAgICAgICAgICAgICAgICAgaWYgKHNoZWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICpzaGVsbCA9ICIvYmluL3NoIjsKK0BAIC00MDY5LDcgKzQwNjksNyBAQCBpbnQgZ2V0X2hvbWVfZGlyKGNoYXIgKipfaCkgeworICAgICAgICAgLyogSGFyZGNvZGUgaG9tZSBkaXJlY3RvcnkgZm9yIHJvb3QgdG8gYXZvaWQgTlNTICovCisgICAgICAgICB1ID0gZ2V0dWlkKCk7CisgICAgICAgICBpZiAodSA9PSAwKSB7CistICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoIi9yb290Iik7CisrICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBpZiAoIWgpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgCitJbmRleDogZ2l0L3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorKysrIGdpdC91bml0cy9jb25zb2xlLXNoZWxsLnNlcnZpY2UubTQuaW4KK0BAIC0xNSw4ICsxNSw4IEBAIEFmdGVyPXJjLWxvY2FsLnNlcnZpY2UKKyBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnQ9LUBTVUxPR0lOQAorIEV4ZWNTdG9wUG9zdD0tQFNZU1RFTUNUTEAgcG93ZXJvZmYKKyBUeXBlPWlkbGUKK0luZGV4OiBnaXQvdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorQEAgLTE0LDggKzE0LDggQEAgQ29uZmxpY3RzPXJlc2N1ZS5zZXJ2aWNlCisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIAorIFtTZXJ2aWNlXQorLUVudmlyb25tZW50PUhPTUU9L3Jvb3QKKy1Xb3JraW5nRGlyZWN0b3J5PS9yb290CisrRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACisrV29ya2luZ0RpcmVjdG9yeT1Acm9vdGhvbWVkaXJACisgRXhlY1N0YXJ0UHJlPS0vYmluL3BseW1vdXRoIC0td2FpdCBxdWl0CisgRXhlY1N0YXJ0UHJlPS0vYmluL2VjaG8gLWUgJ1dlbGNvbWUgdG8gZW1lcmdlbmN5IG1vZGUhIEFmdGVyIGxvZ2dpbmcgaW4sIHR5cGUgImpvdXJuYWxjdGwgLXhiIiB0byB2aWV3XFxuc3lzdGVtIGxvZ3MsICJzeXN0ZW1jdGwgcmVib290IiB0byByZWJvb3QsICJzeXN0ZW1jdGwgZGVmYXVsdCIgb3IgXkQgdG9cXG50cnkgYWdhaW4gdG8gYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCitJbmRleDogZ2l0L3VuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KKysrKyBnaXQvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KK0BAIC0xNCw4ICsxNCw4IEBAIEFmdGVyPXN5c2luaXQudGFyZ2V0IHBseW1vdXRoLXN0YXJ0LnNlcnYKKyBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnRQcmU9LS9iaW4vcGx5bW91dGggcXVpdAorIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdXZWxjb21lIHRvIGVtZXJnZW5jeSBtb2RlISBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxuYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MmJjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDdlMjAyZjcxNzg1YmY1YTY3YzhhNGY2YjU4ZDM1ODU2MDhmYmZkYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyNjoyNSArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzExXSBzeXN0ZW1kLXVzZXI6IGF2b2lkIHVzaW5nIHN5c3RlbS1hdXRoCisKK0luIE9FLCB3ZSBkb24ndCBwcm92aWRlIHN5c3RlbS1hdXRoLCBpbnN0ZWFkLCB3ZSB1c2UgY29tbW9uLSogZmlsZXMuCitTbyBtb2RpZnkgc3lzdGVtZC11c2VyIGZpbGUgdG8gdXNlIGNvbW1vbi0qIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2xvZ2luL3N5c3RlbWQtdXNlciB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbG9naW4vc3lzdGVtZC11c2VyIGIvc3JjL2xvZ2luL3N5c3RlbWQtdXNlcgoraW5kZXggODExMmQ3NC4uOTk2MzVhZiAxMDA2NDQKKy0tLSBhL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKKysrKyBiL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKK0BAIC0yLDUgKzIsNSBAQAorICMKKyAjIFVzZWQgYnkgc3lzdGVtZCAtLXVzZXIgaW5zdGFuY2VzLgorIAorLWFjY291bnQgIGluY2x1ZGUgc3lzdGVtLWF1dGgKKy1zZXNzaW9uICBpbmNsdWRlIHN5c3RlbS1hdXRoCisrYWNjb3VudCAgaW5jbHVkZSBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gIGluY2x1ZGUgY29tbW9uLXNlc3Npb24KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjQ1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA1ZjhiOWYyZDI3NmMwZGRiY2JmNTQyMzczM2EyM2YwNDNkNjg4MDA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNSBTZXAgMjAxNSAwNjozMTo0NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBpbXBsbWVudCBzeXN0ZW1kLXN5c3YtaW5zdGFsbCBmb3IgT0UKKworVXNlIHVwZGF0ZS1yYy5kIGZvciBlbmFibGluZy9kaXNhYmxpbmcgYW5kIHN0YXR1cyBjb21tYW5kCit0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzeXN2IHNlcnZpY2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04gfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04KKysrKyBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorQEAgLTMwLDE3ICszMCwxNyBAQCBjYXNlICIkMSIgaW4KKyAgICAgZW5hYmxlKQorICAgICAgICAgIyBjYWxsIHRoZSBjb21tYW5kIHRvIGVuYWJsZSBTeXNWIGluaXQgc2NyaXB0ICROQU1FIGhlcmUKKyAgICAgICAgICMgKGNvbnNpZGVyIG9wdGlvbmFsICRST09UKQorLSAgICAgICAgZWNobyAiSU1QTEVNRU5UIE1FOiBlbmFibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSBkZWZhdWx0cworICAgICAgICAgOzsKKyAgICAgZGlzYWJsZSkKKyAgICAgICAgICMgY2FsbCB0aGUgY29tbWFuZCB0byBkaXNhYmxlIFN5c1YgaW5pdCBzY3JpcHQgJE5BTUUgaGVyZQorICAgICAgICAgIyAoY29uc2lkZXIgb3B0aW9uYWwgJFJPT1QpCistICAgICAgICBlY2hvICJJTVBMRU1FTlQgTUU6IGRpc2FibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSByZW1vdmUKKyAgICAgICAgIDs7CisgICAgIGlzLWVuYWJsZWQpCisgICAgICAgICAjIGV4aXQgd2l0aCAwIGlmICROQU1FIGlzIGVuYWJsZWQsIG5vbi16ZXJvIGlmIGl0IGlzIGRpc2FibGVkCisgICAgICAgICAjIChjb25zaWRlciBvcHRpb25hbCAkUk9PVCkKKy0gICAgICAgIGVjaG8gIklNUExFTUVOVCBNRTogY2hlY2tpbmcgU3lzViBpbml0LmQgc2NyaXB0ICROQU1FIgorKyAgICAgICAgL2V0Yy9pbml0LmQvJE5BTUUgc3RhdHVzCisgICAgICAgICA7OworICAgICAqKQorICAgICAgICAgdXNhZ2UgOzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJiYTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNGYwYTcyMjQ4OTE1NGRhOTllN2Y2YjMwNTFhZmRlOTg0ZWVkMmY3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTU6MDE6MjkgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJydWxlczogcmVtb3ZlIGZpcm13YXJlIGxvYWRpbmcgcnVsZXMiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgNzBlN2Q3NTRkZGIzNTZmYjFhMjk0MmIyNjJmOGNlZTk2NTBlMmExOS4KK1VzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBMaW51eCA8IDMuNy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKKworZGlmZiAtLWdpdCBhL3J1bGVzLzUwLWZpcm13YXJlLnJ1bGVzIGIvcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMGFlNjg0CistLS0gL2Rldi9udWxsCisrKysgYi9ydWxlcy81MC1maXJtd2FyZS5ydWxlcworQEAgLTAsMCArMSwzIEBACisrIyBkbyBub3QgZWRpdCB0aGlzIGZpbGUsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gb24gdXBkYXRlCisrCisrU1VCU1lTVEVNPT0iZmlybXdhcmUiLCBBQ1RJT049PSJhZGQiLCBSVU57YnVpbHRpbn09ImZpcm13YXJlIgorLS0gCisyLjMuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTUtUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA4Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTUtUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaApAQCAtMCwwICsxLDM2NCBAQAorRnJvbSA3ZjA3NGRlZjRlMzIwNDUzNTNiYTQzMzZkNzAzZTE3YjhkZTdlYzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNTowMTozMyArMTEwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInVkZXY6IHJlbW92ZSB1c2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IgorCitUaGlzIHJldmVydHMgY29tbWl0IGJlMmVhNzIzYjFkMDIzYjNkMzg1ZDNiNzkxZWU0NjA3Y2JmYjIwY2EuCitVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgTGludXggPCAzLjcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsrKworIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrLQorIFRPRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICB8ICAyMCArKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIHwgMTU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi5jICAgICAgICAgIHwgICAzICsKKyBzcmMvdWRldi91ZGV2LmggICAgICAgICAgICAgICAgICB8ICAgNiArKworIHNyYy91ZGV2L3VkZXZkLmMgICAgICAgICAgICAgICAgIHwgIDEzICsrKysKKyA4IGZpbGVzIGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworCitJbmRleDogZ2l0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnaXQvTWFrZWZpbGUuYW0KK0BAIC0zNDcwLDYgKzM0NzAsMTggQEAgbGlidWRldl9jb3JlX2xhX0xJQkFERCA9IFwKKyAJJChCTEtJRF9MSUJTKSBcCisgCSQoS01PRF9MSUJTKQorIAorK2xpYnVkZXZfY29yZV9sYV9DUFBGTEFHUyA9IFwKKysJJChBTV9DUFBGTEFHUykgXAorKwktREZJUk1XQVJFX1BBVEg9IiQoRklSTVdBUkVfUEFUSCkiCisrCisraWYgRU5BQkxFX0ZJUk1XQVJFCisrbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorKwlzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworKworK2Rpc3RfdWRldnJ1bGVzX0RBVEEgKz0gXAorKwlydWxlcy81MC1maXJtd2FyZS5ydWxlcworK2VuZGlmCisrCisgaWYgSEFWRV9LTU9ECisgbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorIAlzcmMvdWRldi91ZGV2LWJ1aWx0aW4ta21vZC5jCitJbmRleDogZ2l0L1JFQURNRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL1JFQURNRQorKysrIGdpdC9SRUFETUUKK0BAIC0zNiw3ICszNiw4IEBAIExJQ0VOU0U6CisgICAgICAgICAtIGV4Y2VwdCBzcmMvdWRldi8qIHdoaWNoIGlzIChjdXJyZW50bHkgc3RpbGwpIEdQTHYyLCBHUEx2MisKKyAKKyBSRVFVSVJFTUVOVFM6CistICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy43CisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4wCisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4zIGZvciBsb29wIGRldmljZSBwYXJ0aXRpb24gc3VwcG9ydCBmZWF0dXJlcyB3aXRoIG5zcGF3bgorICAgICAgICAgTGludXgga2VybmVsID49IDMuOCBmb3IgU21hY2sgc3VwcG9ydAorIAorICAgICAgICAgS2VybmVsIENvbmZpZyBPcHRpb25zOgorQEAgLTUxLDE0ICs1MiwxNCBAQCBSRVFVSVJFTUVOVFM6CisgICAgICAgICAgIENPTkZJR19QUk9DX0ZTCisgICAgICAgICAgIENPTkZJR19GSEFORExFIChsaWJ1ZGV2LCBtb3VudCBhbmQgYmluZCBtb3VudCBoYW5kbGluZykKKyAKKy0gICAgICAgIHVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IHN5c2ZzIGxheW91dDoKKysgICAgICAgIFVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IGxheW91dDoKKyAgICAgICAgICAgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9bgorIAorICAgICAgICAgTGVnYWN5IGhvdHBsdWcgc2xvd3MgZG93biB0aGUgc3lzdGVtIGFuZCBjb25mdXNlcyB1ZGV2OgorICAgICAgICAgICBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCisgCistICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBzaG91bGQKKy0gICAgICAgIGJlIGRpc2FibGVkIGluIHRoZSBrZXJuZWw6CisrICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBkZXByZWNhdGVkLCB3aWxsIGdvIGF3YXksIGFuZAorKyAgICAgICAgc29tZXRpbWVzIGNhdXNlcyBwcm9ibGVtczoKKyAgICAgICAgICAgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj1uCisgCisgICAgICAgICBTb21lIHVkZXYgcnVsZXMgYW5kIHZpcnR1YWxpemF0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gaXQ6CitJbmRleDogZ2l0L1RPRE8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9UT0RPCisrKysgZ2l0L1RPRE8KK0BAIC03NTQsNiArNzU0LDcgQEAgRmVhdHVyZXM6CisgKiBFeGVjT25GYWlsdXJlPS91c3IvYmluL2ZvbworIAorICogdWRldjoKKysgIC0gcmVtb3ZlIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIChDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSPW4pCisgICAtIG1vdmUgdG8gTEdQTAorICAgLSBraWxsIHNjc2lfaWQKKyAgIC0gYWRkIHRyaWdnZXIgLS1zdWJzeXN0ZW0tbWF0Y2g9dXNiL3VzYl9kZXZpY2UgZGV2aWNlCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMjY4LDYgKzEyNjgsMjYgQEAgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX01ZSE9TVE5BTUUsIFt0ZXN0ICIkaGF2ZV9teWhvc3RuYW1lIiA9ICJ5ZXMiXSkKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK0FDX0FSR19XSVRIKGZpcm13YXJlLXBhdGgsCisrICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZmlybXdhcmUtcGF0aD1ESVJbW1s6RElSWy4uLl1dXV1dLAorKyAgICAgICAgICBbRmlybXdhcmUgc2VhcmNoIHBhdGggKGRlZmF1bHQ9IiIpXSksCisrICAgICAgIFtdLCBbd2l0aF9maXJtd2FyZV9wYXRoPSIiXSkKKytPTERfSUZTPSRJRlMKKytJRlM9OgorK2ZvciBpIGluICR3aXRoX2Zpcm13YXJlX3BhdGg7IGRvCisrICAgICAgIGlmIHRlc3QgIngke0ZJUk1XQVJFX1BBVEh9IiA9ICJ4IjsgdGhlbgorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iJHtGSVJNV0FSRV9QQVRIfSwgXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZmkKKytkb25lCisrSUZTPSRPTERfSUZTCisrQUNfU1VCU1QoRklSTVdBUkVfUEFUSCkKKytBU19JRihbdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iICE9ICJ4Il0sIFsgQUNfREVGSU5FKEhBVkVfRklSTVdBUkUsIDEsIFtEZWZpbmUgaWYgRklSTVdBUkUgaXMgYXZhaWxhYmxlXSkgXSkKKytBTV9DT05ESVRJT05BTChFTkFCTEVfRklSTVdBUkUsIFt0ZXN0ICJ4JHtGSVJNV0FSRV9QQVRIfSIgIT0gIngiXSkKKysKKysKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFDX0FSR19FTkFCTEUoaHdkYiwgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtaHdkYl0sIFtkaXNhYmxlIGhhcmR3YXJlIGRhdGFiYXNlIHN1cHBvcnRdKV0sCisgICAgICAgIGVuYWJsZV9od2RiPSRlbmFibGV2YWwsIGVuYWJsZV9od2RiPXllcykKKyBBTV9DT05ESVRJT05BTChFTkFCTEVfSFdEQiwgW3Rlc3QgeCRlbmFibGVfaHdkYiA9IHh5ZXNdKQorQEAgLTE1NzQsNiArMTU5NCw3IEBAIEFDX01TR19SRVNVTFQoWworICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CisgICAgICAgICBzcGhpbnggYmluYXJ5OiAgICAgICAgICAgJHtTUEhJTlhfQlVJTER9CisrICAgICAgICBmaXJtd2FyZSBwYXRoOiAgICAgICAgICAgJHtGSVJNV0FSRV9QQVRIfQorICAgICAgICAgUEFNIG1vZHVsZXMgZGlyOiAgICAgICAgICR7d2l0aF9wYW1saWJkaXJ9CisgICAgICAgICBQQU0gY29uZmlndXJhdGlvbiBkaXI6ICAgJHt3aXRoX3BhbWNvbmZkaXJ9CisgICAgICAgICBELUJ1cyBwb2xpY3kgZGlyOiAgICAgICAgJHt3aXRoX2RidXNwb2xpY3lkaXJ9CitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCitAQCAtMCwwICsxLDE1NCBAQAorKy8qCisrICogZmlybXdhcmUgLSBLZXJuZWwgZmlybXdhcmUgbG9hZGVyCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGl0ZXIgUHVuayA8cGl0ZXJwdW5rQHNsYWNrd2FyZS5jb20+CisrICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgS2F5IFNpZXZlcnMgPGtheUB2cmZ5Lm9yZz4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzOioKKysgKi8KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKysjaW5jbHVkZSAidWRldi5oIgorKworK3N0YXRpYyBib29sIHNldF9sb2FkaW5nKHN0cnVjdCB1ZGV2ICp1ZGV2LCBjaGFyICpsb2FkcGF0aCwgY29uc3QgY2hhciAqc3RhdGUpIHsKKysgICAgICAgIEZJTEUgKmxkZmlsZTsKKysKKysgICAgICAgIGxkZmlsZSA9IGZvcGVuKGxvYWRwYXRoLCAid2UiKTsKKysgICAgICAgIGlmIChsZGZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImVycm9yOiBjYW4gbm90IG9wZW4gJyVzJyIsIGxvYWRwYXRoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfTsKKysgICAgICAgIGZwcmludGYobGRmaWxlLCAiJXNcbiIsIHN0YXRlKTsKKysgICAgICAgIGZjbG9zZShsZGZpbGUpOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyBib29sIGNvcHlfZmlybXdhcmUoc3RydWN0IHVkZXYgKnVkZXYsIGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBzaXplX3Qgc2l6ZSkgeworKyAgICAgICAgY2hhciAqYnVmOworKyAgICAgICAgRklMRSAqZnNvdXJjZSA9IE5VTEwsICpmdGFyZ2V0ID0gTlVMTDsKKysgICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7CisrCisrICAgICAgICBidWYgPSBtYWxsb2Moc2l6ZSk7CisrICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCJObyBtZW1vcnkgYXZhaWxhYmxlIHRvIGxvYWQgZmlybXdhcmUgZmlsZSIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBsb2dfZGVidWcoIndyaXRpbmcgJyVzJyAoJXppKSB0byAnJXMnIiwgc291cmNlLCBzaXplLCB0YXJnZXQpOworKworKyAgICAgICAgZnNvdXJjZSA9IGZvcGVuKHNvdXJjZSwgInJlIik7CisrICAgICAgICBpZiAoZnNvdXJjZSA9PSBOVUxMKQorKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICBmdGFyZ2V0ID0gZm9wZW4odGFyZ2V0LCAid2UiKTsKKysgICAgICAgIGlmIChmdGFyZ2V0ID09IE5VTEwpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmcmVhZChidWYsIHNpemUsIDEsIGZzb3VyY2UpICE9IDEpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmd3JpdGUoYnVmLCBzaXplLCAxLCBmdGFyZ2V0KSA9PSAxKQorKyAgICAgICAgICAgICAgICByZXQgPSB0cnVlOworK2V4aXQ6CisrICAgICAgICBpZiAoZnRhcmdldCAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnRhcmdldCk7CisrICAgICAgICBpZiAoZnNvdXJjZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnNvdXJjZSk7CisrICAgICAgICBmcmVlKGJ1Zik7CisrICAgICAgICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IGJ1aWx0aW5fZmlybXdhcmUoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgdGVzdCkgeworKyAgICAgICAgc3RydWN0IHVkZXYgKnVkZXYgPSB1ZGV2X2RldmljZV9nZXRfdWRldihkZXYpOworKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKnNlYXJjaHBhdGhbXSA9IHsgRklSTVdBUkVfUEFUSCB9OworKyAgICAgICAgY2hhciBsb2FkcGF0aFtVVElMX1BBVEhfU0laRV07CisrICAgICAgICBjaGFyIGRhdGFwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNoYXIgZndwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNvbnN0IGNoYXIgKmZpcm13YXJlOworKyAgICAgICAgRklMRSAqZndmaWxlID0gTlVMTDsKKysgICAgICAgIHN0cnVjdCB1dHNuYW1lIGtlcm5lbDsKKysgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisrICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKysgICAgICAgIGludCByYyA9IEVYSVRfU1VDQ0VTUzsKKysKKysgICAgICAgIGZpcm13YXJlID0gdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5X3ZhbHVlKGRldiwgIkZJUk1XQVJFIik7CisrICAgICAgICBpZiAoZmlybXdhcmUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImZpcm13YXJlIHBhcmFtZXRlciBtaXNzaW5nIik7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBsb29rdXAgZmlybXdhcmUgZmlsZSAqLworKyAgICAgICAgdW5hbWUoJmtlcm5lbCk7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUVOVFNPRihzZWFyY2hwYXRoKTsgaSsrKSB7CisrICAgICAgICAgICAgICAgIHN0cnNjcHlsKGZ3cGF0aCwgc2l6ZW9mKGZ3cGF0aCksIHNlYXJjaHBhdGhbaV0sIGtlcm5lbC5yZWxlYXNlLCAiLyIsIGZpcm13YXJlLCBOVUxMKTsKKysgICAgICAgICAgICAgICAgZndmaWxlID0gZm9wZW4oZndwYXRoLCAicmUiKTsKKysgICAgICAgICAgICAgICAgaWYgKGZ3ZmlsZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICBzdHJzY3B5bChmd3BhdGgsIHNpemVvZihmd3BhdGgpLCBzZWFyY2hwYXRoW2ldLCBmaXJtd2FyZSwgTlVMTCk7CisrICAgICAgICAgICAgICAgIGZ3ZmlsZSA9IGZvcGVuKGZ3cGF0aCwgInJlIik7CisrICAgICAgICAgICAgICAgIGlmIChmd2ZpbGUgIT0gTlVMTCkKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0cnNjcHlsKGxvYWRwYXRoLCBzaXplb2YobG9hZHBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2xvYWRpbmciLCBOVUxMKTsKKysKKysgICAgICAgIGlmIChmd2ZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZGVidWcoImRpZCBub3QgZmluZCBmaXJtd2FyZSBmaWxlICclcyciLCBmaXJtd2FyZSk7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgKiBEbyBub3QgY2FuY2VsIHRoZSByZXF1ZXN0IGluIHRoZSBpbml0cmQsIHRoZSByZWFsIHJvb3QgbWlnaHQgaGF2ZQorKyAgICAgICAgICAgICAgICAgKiB0aGUgZmlybXdhcmUgZmlsZSBhbmQgdGhlICdjb2xkcGx1ZycgcnVuIGluIHRoZSByZWFsIHJvb3Qgd2lsbCBmaW5kCisrICAgICAgICAgICAgICAgICAqIHRoaXMgcGVuZGluZyByZXF1ZXN0IGFuZCBmdWxmaWxsIG9yIGNhbmNlbCBpdC4KKysgICAgICAgICAgICAgICAgICogKi8KKysgICAgICAgICAgICAgICAgaWYgKCFpbl9pbml0cmQoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIi0xIik7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChzdGF0KGZ3cGF0aCwgJnN0YXRidWYpIDwgMCB8fCBzdGF0YnVmLnN0X3NpemUgPT0gMCkgeworKyAgICAgICAgICAgICAgICBpZiAoIWluX2luaXRyZCgpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiLTEiKTsKKysgICAgICAgICAgICAgICAgcmMgPSBFWElUX0ZBSUxVUkU7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICIxIikpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysKKysgICAgICAgIHN0cnNjcHlsKGRhdGFwYXRoLCBzaXplb2YoZGF0YXBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2RhdGEiLCBOVUxMKTsKKysgICAgICAgIGlmICghY29weV9maXJtd2FyZSh1ZGV2LCBmd3BhdGgsIGRhdGFwYXRoLCBzdGF0YnVmLnN0X3NpemUpKSB7CisrICAgICAgICAgICAgICAgIGxvZ19lcnJvcigiZXJyb3Igc2VuZGluZyBmaXJtd2FyZSAnJXMnIHRvIGRldmljZSIsIGZpcm13YXJlKTsKKysgICAgICAgICAgICAgICAgc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICItMSIpOworKyAgICAgICAgICAgICAgICByYyA9IEVYSVRfRkFJTFVSRTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgfTsKKysKKysgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiMCIpOworK2V4aXQ6CisrICAgICAgICBpZiAoZndmaWxlKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZndmaWxlKTsKKysgICAgICAgIHJldHVybiByYzsKKyt9CisrCisrY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmUgPSB7CisrICAgICAgICAubmFtZSA9ICJmaXJtd2FyZSIsCisrICAgICAgICAuY21kID0gYnVpbHRpbl9maXJtd2FyZSwKKysgICAgICAgIC5oZWxwID0gImtlcm5lbCBmaXJtd2FyZSBsb2FkZXIiLAorKyAgICAgICAgLnJ1bl9vbmNlID0gdHJ1ZSwKKyt9OworSW5kZXg6IGdpdC9zcmMvdWRldi91ZGV2LWJ1aWx0aW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCitAQCAtMzAsNiArMzAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiAqYnVpbHRpCisgICAgICAgICBbVURFVl9CVUlMVElOX0JMS0lEXSA9ICZ1ZGV2X2J1aWx0aW5fYmxraWQsCisgI2VuZGlmCisgICAgICAgICBbVURFVl9CVUlMVElOX0JUUkZTXSA9ICZ1ZGV2X2J1aWx0aW5fYnRyZnMsCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgIFtVREVWX0JVSUxUSU5fRklSTVdBUkVdID0gJnVkZXZfYnVpbHRpbl9maXJtd2FyZSwKKysjZW5kaWYKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fSFdEQl0gPSAmdWRldl9idWlsdGluX2h3ZGIsCisgICAgICAgICBbVURFVl9CVUlMVElOX0lOUFVUX0lEXSA9ICZ1ZGV2X2J1aWx0aW5faW5wdXRfaWQsCisgICAgICAgICBbVURFVl9CVUlMVElOX0tFWUJPQVJEXSA9ICZ1ZGV2X2J1aWx0aW5fa2V5Ym9hcmQsCitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYuaAorKysrIGdpdC9zcmMvdWRldi91ZGV2LmgKK0BAIC0xNDYsNiArMTQ2LDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CTEtJRCwKKyAjZW5kaWYKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CVFJGUywKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgVURFVl9CVUlMVElOX0ZJUk1XQVJFLAorKyNlbmRpZgorICAgICAgICAgVURFVl9CVUlMVElOX0hXREIsCisgICAgICAgICBVREVWX0JVSUxUSU5fSU5QVVRfSUQsCisgICAgICAgICBVREVWX0JVSUxUSU5fS0VZQk9BUkQsCitAQCAtMTc0LDYgKzE3Nyw5IEBAIHN0cnVjdCB1ZGV2X2J1aWx0aW4geworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9ibGtpZDsKKyAjZW5kaWYKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fYnRyZnM7CisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKytleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmU7CisrI2VuZGlmCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2h3ZGI7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2lucHV0X2lkOworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9rZXlib2FyZDsKK0luZGV4OiBnaXQvc3JjL3VkZXYvdWRldmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXZkLmMKKysrKyBnaXQvc3JjL3VkZXYvdWRldmQuYworQEAgLTExNiw2ICsxMTYsOSBAQCBzdHJ1Y3QgZXZlbnQgeworICAgICAgICAgYm9vbCBpc19ibG9jazsKKyAgICAgICAgIHNkX2V2ZW50X3NvdXJjZSAqdGltZW91dF93YXJuaW5nOworICAgICAgICAgc2RfZXZlbnRfc291cmNlICp0aW1lb3V0OworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBib29sIG5vZGVsYXk7CisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudCAqbm9kZV90b19ldmVudChzdHJ1Y3QgdWRldl9saXN0X25vZGUgKm5vZGUpIHsKK0BAIC02MDcsNiArNjEwLDEwIEBAIHN0YXRpYyBpbnQgZXZlbnRfcXVldWVfaW5zZXJ0KE1hbmFnZXIgKm0KKyAgICAgICAgIGV2ZW50LT5kZXZudW0gPSB1ZGV2X2RldmljZV9nZXRfZGV2bnVtKGRldik7CisgICAgICAgICBldmVudC0+aXNfYmxvY2sgPSBzdHJlcSgiYmxvY2siLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworICAgICAgICAgZXZlbnQtPmlmaW5kZXggPSB1ZGV2X2RldmljZV9nZXRfaWZpbmRleChkZXYpOworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBpZiAoc3RyZXEodWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShkZXYpLCAiZmlybXdhcmUiKSkKKysgICAgICAgICAgICAgICAgZXZlbnQtPm5vZGVsYXkgPSB0cnVlOworKyNlbmRpZgorIAorICAgICAgICAgbG9nX2RlYnVnKCJzZXEgJWxsdSBxdWV1ZWQsICclcycgJyVzJyIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZGV2KSwKKyAgICAgICAgICAgICAgdWRldl9kZXZpY2VfZ2V0X2FjdGlvbihkZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworQEAgLTY5Miw2ICs2OTksMTIgQEAgc3RhdGljIGJvb2wgaXNfZGV2cGF0aF9idXN5KE1hbmFnZXIgKm1hbgorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICB9CisgCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgICAgICAgICAgLyogYWxsb3cgdG8gYnlwYXNzIHRoZSBkZXBlbmRlbmN5IHRyYWNraW5nICovCisrICAgICAgICAgICAgICAgIGlmIChldmVudC0+bm9kZWxheSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysjZW5kaWYKKysKKyAgICAgICAgICAgICAgICAgLyogcGFyZW50IGRldmljZSBldmVudCBmb3VuZCAqLworICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRldnBhdGhbY29tbW9uXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC0+ZGVsYXlpbmdfc2VxbnVtID0gbG9vcF9ldmVudC0+c2VxbnVtOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTUyYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9zaAorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1ZGV2CisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydCB1ZGV2ZCwgcG9wdWxhdGUgL2RldiBhbmQgbG9hZCBkcml2ZXJzLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorWyAtciAvcHJvYy9tb3VudHMgXSB8fCBleGl0IDEKK1sgLXggQFVERVZEQCBdIHx8IGV4aXQgMQorWyAtZiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUKK1sgLWYgL2V0Yy91ZGV2L3VkZXYuY29uZiBdICYmIC4gL2V0Yy91ZGV2L3VkZXYuY29uZgorCityZWFkZmlsZSAoKSB7CisgICBmaWxlbmFtZT0kMQorICAgUkVBRERBVEE9IiIKKyAgIGlmIFsgLXIgJGZpbGVuYW1lIF07IHRoZW4KKyAgICAgICB3aGlsZSByZWFkIGxpbmU7IGRvCisgICAgICAgICAgIFJFQUREQVRBPSIkUkVBRERBVEEkbGluZSIKKyAgICAgICBkb25lIDwgJGZpbGVuYW1lCisgICBmaQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZXhwb3J0IEFDVElPTj1hZGQKKyAgICAjIHByb3BhZ2F0ZSAvZGV2IGZyb20gL3N5cworICAgIGVjaG8gIlN0YXJ0aW5nIHVkZXYiCisKKyAgICAjIG1vdW50IHRoZSBkZXZ0bXBmcyBvbiAvZGV2LCBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgTEFORz1DIGF3ayAnJDIgPT0gIi9kZXYiICYmICgkMyA9PSAiZGV2dG1wZnMiKSB7IGV4aXQgMSB9JyAvcHJvYy9tb3VudHMgJiYgeworICAgICAgICAgICAgbW91bnQgLW4gLW8gbW9kZT0wNzU1IC10IGRldnRtcGZzIG5vbmUgIi9kZXYiCisgICAgfQorICAgIFsgLWUgL2Rldi9wdHMgXSB8fCBta2RpciAtbSAwNzU1IC9kZXYvcHRzCisgICAgWyAtZSAvZGV2L3NobSBdIHx8IG1rZGlyIC1tIDE3NzcgL2Rldi9zaG0KKyAgICBtb3VudCAtYSAtdCB0bXBmcyAyPi9kZXYvbnVsbAorCisgICAgIyBjYWNoZSBoYW5kbGluZworICAgIGlmIFsgIiRERVZDQUNIRSIgIT0gIiIgXTsgdGhlbgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvdmVyc2lvbgorICAgICAgICAgICAgVkVSU0lPTj0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvY21kbGluZQorICAgICAgICAgICAgQ01ETElORT0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvZGV2aWNlcworICAgICAgICAgICAgREVWSUNFUz0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvYXRhZ3MKKyAgICAgICAgICAgIEFUQUdTPSIkUkVBRERBVEEiCisKKyAgICAgICAgICAgIGlmIFsgLWUgJERFVkNBQ0hFIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcmVhZGZpbGUgL2V0Yy91ZGV2L2NhY2hlLmRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiJFJFQUREQVRBIiA9ICIkVkVSU0lPTiRDTURMSU5FJERFVklDRVMkQVRBR1MiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2QgLzsgdGFyIHhmICRERVZDQUNIRSA+IC9kZXYvbnVsbCAyPiYxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF9maXJzdF9ib290PTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXY6IHVzaW5nIGNhY2hlIGZpbGUgJERFVkNBQ0hFIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgL2Rldi9zaG0vdWRldi5jYWNoZSBdICYmIHJtIC1mIC9kZXYvc2htL3VkZXYuY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIG1ha2VfZXh0cmFfbm9kZXMKKyAgICBraWxscHJvYyBzeXN0ZW1kLXVkZXZkID4gIi9kZXYvbnVsbCIgMj4mMQorCisgICAgIyB0cmlnZ2VyIHRoZSBzb3J0ZWQgZXZlbnRzCisgICAgZWNobyAtZSAnXDAwMFwwMDBcMDAwXDAwMCcgPiAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKKyAgICBAVURFVkRAIC1kCisKKyAgICB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0xCisgICAgaWYgWyAiJG5vdF9maXJzdF9ib290IiAhPSAiIiBdO3RoZW4KKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQgLS1zdWJzeXN0ZW0tbm9tYXRjaD10dHkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1tZW0gLS1zdWJzeXN0ZW0tbm9tYXRjaD12YyAtLXN1YnN5c3RlbS1ub21hdGNoPXZ0Y29uc29sZSAtLXN1YnN5c3RlbS1ub21hdGNoPW1pc2MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1kY29uIC0tc3Vic3lzdGVtLW5vbWF0Y2g9cGNpX2J1cyAgLS1zdWJzeXN0ZW0tbm9tYXRjaD1ncmFwaGljcwkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1iYWNrbGlnaHQgLS1zdWJzeXN0ZW0tbm9tYXRjaD12aWRlbzRsaW51eAktLXN1YnN5c3RlbS1ub21hdGNoPXBsYXRmb3JtCisgICAgICAgICAgICAodWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTM7IHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPSkmCisgICAgZWxzZQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorICAgICAgICAgICAgdWRldmFkbSBzZXR0bGUKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAiU3RvcHBpbmcgdWRldmQiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBzeXN0ZW1kLXVkZXZkIC0tcXVpZXQKKyAgICA7OworICByZXN0YXJ0KQorICAgICQwIHN0b3AKKyAgICBzbGVlcCAxCisgICAgJDAgc3RhcnQKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIHN5c3RlbWQtdWRldmQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UxNzExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU3BlY2lmaWMgY2FzZSBRRU1VL0FCXQorCitGcm9tIDdiOGM0ZTBhNjdhNzlhNzVlMWJkNzdkZjNhNDUyYTU0OTczMjIxMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI3IEF1ZyAyMDE1IDE3OjU4OjI2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvcmUvZGV2aWNlLmM6IENoYW5nZSB0aGUgZGVmYXVsdCBkZXZpY2UgdGltZW91dCB0byAyNDAgc2VjLgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNyYy9jb3JlL2RldmljZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZGV2aWNlLmMgYi9zcmMvY29yZS9kZXZpY2UuYworaW5kZXggZTdlZmNmMC4uNGVkOGYwOCAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlL2RldmljZS5jCisrKysgYi9zcmMvY29yZS9kZXZpY2UuYworQEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfaW5pdChVbml0ICp1KSB7CisgICAgICAgICAgKiBpbmRlZmluaXRlbHkgZm9yIHBsdWdnZWQgaW4gZGV2aWNlcywgc29tZXRoaW5nIHdoaWNoIGNhbm5vdAorICAgICAgICAgICogaGFwcGVuIGZvciB0aGUgb3RoZXIgdW5pdHMgc2luY2UgdGhlaXIgb3BlcmF0aW9ucyB0aW1lIG91dAorICAgICAgICAgICogYW55d2F5LiAqLworLSAgICAgICAgdS0+am9iX3RpbWVvdXQgPSB1LT5tYW5hZ2VyLT5kZWZhdWx0X3RpbWVvdXRfc3RhcnRfdXNlYzsKKysgICAgICAgIHUtPmpvYl90aW1lb3V0ID0gKDI0MCAqIFVTRUNfUEVSX1NFQyk7CisgCisgICAgICAgICB1LT5pZ25vcmVfb25faXNvbGF0ZSA9IHRydWU7CisgICAgICAgICB1LT5pZ25vcmVfb25fc25hcHNob3QgPSB0cnVlOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQ2MWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCit0YXIgLUMgdGVzdCAteEpmIHRlc3Qvc3lzLnRhci54egorbWFrZSB0ZXN0L3J1bGVzLXRlc3Quc2gubG9nCittYWtlIHRlc3QvdWRldi10ZXN0LnBsLmxvZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3RvdWNoc2NyZWVuLnJ1bGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3RvdWNoc2NyZWVuLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2ZkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMKQEAgLTAsMCArMSwxOCBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIENyZWF0ZSBhIHN5bWxpbmsgdG8gYW55IHRvdWNoc2NyZWVuIGlucHV0IGRldmljZQorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImlucHV0OiotZTAqLDMsKmEwLDEsKjE4LCoiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImFkczc4NDYiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kXzIyNS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjOTljZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjUuYmIKQEAgLTAsMCArMSw0MTUgQEAKK1NVTU1BUlkgPSAiQSBTeXN0ZW0gYW5kIHNlcnZpY2UgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZCIKKworREVTQ1JJUFRJT04gPSAic3lzdGVtZCBpcyBhIHN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIGZvciBMaW51eCwgY29tcGF0aWJsZSB3aXRoIFwKK1N5c1YgYW5kIExTQiBpbml0IHNjcmlwdHMuIHN5c3RlbWQgcHJvdmlkZXMgYWdncmVzc2l2ZSBwYXJhbGxlbGl6YXRpb24gXAorY2FwYWJpbGl0aWVzLCB1c2VzIHNvY2tldCBhbmQgRC1CdXMgYWN0aXZhdGlvbiBmb3Igc3RhcnRpbmcgc2VydmljZXMsIFwKK29mZmVycyBvbi1kZW1hbmQgc3RhcnRpbmcgb2YgZGFlbW9ucywga2VlcHMgdHJhY2sgb2YgcHJvY2Vzc2VzIHVzaW5nIFwKK0xpbnV4IGNncm91cHMsIHN1cHBvcnRzIHNuYXBzaG90dGluZyBhbmQgcmVzdG9yaW5nIG9mIHRoZSBzeXN0ZW0gXAorc3RhdGUsIG1haW50YWlucyBtb3VudCBhbmQgYXV0b21vdW50IHBvaW50cyBhbmQgaW1wbGVtZW50cyBhbiBcCitlbGFib3JhdGUgdHJhbnNhY3Rpb25hbCBkZXBlbmRlbmN5LWJhc2VkIHNlcnZpY2UgY29udHJvbCBsb2dpYy4gSXQgY2FuIFwKK3dvcmsgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBzeXN2aW5pdC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuR1BMMjttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworUFJPVklERVMgPSAidWRldiIKKworUEUgPSAiMSIKKworREVQRU5EUyA9ICJrbW9kIGRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGFjbCByZWFkbGluZSBkYnVzIGxpYmNhcCBsaWJjZ3JvdXAgZ2xpYi0yLjAgcWVtdS1uYXRpdmUgdXRpbC1saW51eCIKKworU0VDVElPTiA9ICJiYXNlL3NoZWxsIgorCitpbmhlcml0IHVzZXJhZGQgcGtnY29uZmlnIGF1dG90b29scyBwZXJsbmF0aXZlIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcWVtdSBzeXN0ZW1kIHB0ZXN0IGdldHRleHQKKworU1JDUkVWID0gImUxNDM5YTE0NzJjNWY2OTE3MzNiOGVmMTBlNzAyYmVhYzI0OTZhNjMiCisKK1BWID0gIjIyNStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC5naXQ7cHJvdG9jb2w9Z2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1qb3VybmFsLVVzZS1wb3NpeC1mYWxsb2NhdGUtb25seS1pZi1hdmFpbGFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy11dGlsLVVzZS1ta29zdGVtcC1vbmx5LWlmLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hzY3JlZW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX3FlbXVhbGwgPSAiZmlsZTovL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoIFwKKyAgICAgICAgICAgIgorTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQiCisKK0dUS0RPQ19ET0NESVIgPSAiJHtTfS9kb2NzLyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInh6IGxkY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4a2Jjb21tb24nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAnc2VsaW51eCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW2pvdXJuYWwtdXBsb2FkXSA9ICItLWVuYWJsZS1saWJjdXJsLC0tZGlzYWJsZS1saWJjdXJsLGN1cmwiCisjIFNpZ24gdGhlIGpvdXJuYWwgZm9yIGFudGktdGFtcGVyaW5nCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS1lbmFibGUtZ2NyeXB0LC0tZGlzYWJsZS1nY3J5cHQsbGliZ2NyeXB0IgorIyByZWdhcmRsZXNzIG9mIFBBQ0tBR0VDT05GSUcsIGxpYmdjcnlwdCBpcyBhbHdheXMgcmVxdWlyZWQgdG8gZXhwYW5kCisjIHRoZSBBTV9QQVRIX0xJQkdDUllQVCBhdXRvY29uZiBtYWNybworREVQRU5EUyArPSAibGliZ2NyeXB0IgorIyBDb21wcmVzcyB0aGUgam91cm5hbAorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS1lbmFibGUteHosLS1kaXNhYmxlLXh6LHh6IgorUEFDS0FHRUNPTkZJR1tjcnlwdHNldHVwXSA9ICItLWVuYWJsZS1saWJjcnlwdHNldHVwLC0tZGlzYWJsZS1saWJjcnlwdHNldHVwLGNyeXB0c2V0dXAiCitQQUNLQUdFQ09ORklHW21pY3JvaHR0cGRdID0gIi0tZW5hYmxlLW1pY3JvaHR0cGQsLS1kaXNhYmxlLW1pY3JvaHR0cGQsbGlibWljcm9odHRwZCIKK1BBQ0tBR0VDT05GSUdbZWxmdXRpbHNdID0gIi0tZW5hYmxlLWVsZnV0aWxzLC0tZGlzYWJsZS1lbGZ1dGlscyxlbGZ1dGlscyIKK1BBQ0tBR0VDT05GSUdbcmVzb2x2ZWRdID0gIi0tZW5hYmxlLXJlc29sdmVkLC0tZGlzYWJsZS1yZXNvbHZlZCIKK1BBQ0tBR0VDT05GSUdbbmV0d29ya2RdID0gIi0tZW5hYmxlLW5ldHdvcmtkLC0tZGlzYWJsZS1uZXR3b3JrZCIKK1BBQ0tBR0VDT05GSUdbbGliaWRuXSA9ICItLWVuYWJsZS1saWJpZG4sLS1kaXNhYmxlLWxpYmlkbixsaWJpZG4iCitQQUNLQUdFQ09ORklHW2F1ZGl0XSA9ICItLWVuYWJsZS1hdWRpdCwtLWRpc2FibGUtYXVkaXQsYXVkaXQiCitQQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW5wYWdlcywtLWRpc2FibGUtbWFucGFnZXMsbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS1wYW0sLS1kaXNhYmxlLXBhbSxsaWJwYW0iCisjIFZlcmlmeSBrZXltYXBzIG9uIGxvY2FsZSBjaGFuZ2UKK1BBQ0tBR0VDT05GSUdbeGtiY29tbW9uXSA9ICItLWVuYWJsZS14a2Jjb21tb24sLS1kaXNhYmxlLXhrYmNvbW1vbixsaWJ4a2Jjb21tb24iCisjIFVwZGF0ZSBOQVQgZmlyZXdhbGwgcnVsZXMKK1BBQ0tBR0VDT05GSUdbaXB0Y10gPSAiLS1lbmFibGUtbGliaXB0YywtLWRpc2FibGUtbGliaXB0YyxpcHRhYmxlcyIKK1BBQ0tBR0VDT05GSUdbbGRjb25maWddID0gIi0tZW5hYmxlLWxkY29uZmlnLC0tZGlzYWJsZS1sZGNvbmZpZywsIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICItLWVuYWJsZS1zZWxpbnV4LC0tZGlzYWJsZS1zZWxpbnV4LGxpYnNlbGludXgiCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD15ZXMgYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9eWVzICxhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD1ubyBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD1ubyAsdmFsZ3JpbmQiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tNT0Q9JHtiYXNlX2JpbmRpcn0va21vZCIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBQ0hFQ0s9JHtzYmluZGlyfS9xdW90YWNoZWNrIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24iCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCisjIEhlbHBlciB2YXJpYWJsZXMgdG8gY2xhcmlmeSBsb2NhdGlvbnMuICBUaGlzIG1pcnJvcnMgdGhlIGxvZ2ljIGluIHN5c3RlbWQncworIyBidWlsZCBzeXN0ZW0uCityb290cHJlZml4ID89ICIke2Jhc2VfcHJlZml4fSIKK3Jvb3RsaWJkaXIgPz0gIiR7YmFzZV9saWJkaXJ9Igorcm9vdGxpYmV4ZWNkaXIgPSAiJHtyb290cHJlZml4fS9saWIiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9NT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L21vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1VNT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L3Vtb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0lMTD0ke2Jhc2VfYmluZGlyfS9raWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1NVTE9HSU49JHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0VYRUM9JHtzYmluZGlyfS9rZXhlYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQU9OPSR7c2JpbmRpcn0vcXVvdGFvbiBcCisJCQkgIgorCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC1yb290cHJlZml4PSR7cm9vdHByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke3Jvb3RsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3Rob21lZGlyPSR7Uk9PVF9IT01FfSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jb3JlZHVtcCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNwbGl0LXVzciBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1weXRob24gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtc3lzdnJjbmQtcGF0aD0ke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWZpcm13YXJlLXBhdGg9L2xpYi9maXJtd2FyZSBcCisgICAgICAgICAgICAgICAiCisjIHVjbGliYyBkb2VzIG5vdCBoYXZlIE5TUworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW15aG9zdG5hbWUgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlleHBvcnQgTk09IiR7SE9TVF9QUkVGSVh9Z2NjLW5tIgorCWV4cG9ydCBBUj0iJHtIT1NUX1BSRUZJWH1nY2MtYXIiCisJZXhwb3J0IFJBTkxJQj0iJHtIT1NUX1BSRUZJWH1nY2MtcmFubGliIgorCWV4cG9ydCBLTU9EPSIke2Jhc2VfYmluZGlyfS9rbW9kIgorCWlmIFsgLWQgJHtTfS91bml0cy5wcmVfc2VkIF0gOyB0aGVuCisJCWNwIC1yICR7U30vdW5pdHMucHJlX3NlZCAke1N9L3VuaXRzCisJZWxzZQorCQljcCAtciAke1N9L3VuaXRzICR7U30vdW5pdHMucHJlX3NlZAorCWZpCisJc2VkIC1pICcvbG4gLS1yZWxhdGl2ZSAtLWhlbHAvZCcgJHtTfS9jb25maWd1cmUuYWMKKwlzZWQgLWkgLWUgJ3M6XCQoTE5fUykgLS1yZWxhdGl2ZSAtZjpsbnI6ZycgJHtTfS9NYWtlZmlsZS5hbQorCXNlZCAtaSAtZSAnczpcJChMTl9TKSAtLXJlbGF0aXZlOmxucjpnJyAke1N9L01ha2VmaWxlLmFtCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisJIyBQcm92aWRlZCBieSBhIHNlcGFyYXRlIHJlY2lwZQorCXJtICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSogLWYKKworCSMgUHJvdmlkZSBzdXBwb3J0IGZvciBpbml0cmFtZnMKKwlbICEgLWUgJHtEfS9pbml0IF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kICR7RH0vaW5pdAorCVsgISAtZSAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZCBdICYmIGxuIC1zICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZAorCisJIyBDcmVhdGUgbWFjaGluZS1pZAorCSMgMjA6MTIgPCBtZXpjYWxlcm8+IGtvZW46IHlvdSBoYXZlIHRocmVlIG9wdGlvbnM6IGEpIHJ1biBzeXN0ZW1kLW1hY2hpbmUtaWQtc2V0dXAgYXQgaW5zdGFsbCB0aW1lLCBiKSBoYXZlIC8gcmVhZC1vbmx5IGFuZCBhbiBlbXB0eSBmaWxlIHRoZXJlIChmb3Igc3RhdGVsZXNzKSBhbmQgYykgYm9vdCB3aXRoIC8gd3JpdGFibGUKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9tYWNoaW5lLWlkCisKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyoucnVsZXMgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC8KKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQKKwkJc2VkIC1pIHMlQFVERVZEQCUke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkCisJZmkKKworCWNob3duIHJvb3Q6c3lzdGVtZC1qb3VybmFsICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvam91cm5hbAorCisgICAgICAgICMgRGVsZXRlIGpvdXJuYWwgUkVBRE1FLCBhcyBsb2cgY2FuIGJlIHN5bWxpbmtlZCBpbnNpZGUgdm9sYXRpbGUuCisgICAgICAgIHJtIC1mICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvUkVBRE1FCisKKwkjIENyZWF0ZSBzeW1saW5rcyBmb3Igc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZXNjdWUudGFyZ2V0LndhbnRzCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3dlcm9mZi50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKworCSMgRW5hYmxlIGpvdXJuYWwgdG8gZm9yd2FyZCBtZXNzYWdlIHRvIHN5c2xvZyBkYWVtb24KKwlzZWQgLWkgLWUgJ3MvLipGb3J3YXJkVG9TeXNsb2cuKi9Gb3J3YXJkVG9TeXNsb2c9eWVzLycgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9qb3VybmFsZC5jb25mCisJIyB0aGlzIGZpbGUgaXMgbmVlZGVkIHRvIGV4aXN0IGlmIG5ldHdvcmtkIGlzIGRpc2FibGVkIGJ1dCB0aW1lc3luY2QgaXMgc3RpbGwgaW4gdXNlIHNpbmNlIHRpbWVzeW5jZCBjaGVja3MgaXQKKwkjIGZvciBleGlzdGVuY2UgZWxzZSBpdCBmYWlscworCWlmIFsgLXMgJHtEfSR7bGliZGlyfS90bXBmaWxlcy5kL3N5c3RlbWQuY29uZiBdOyB0aGVuCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ25ldHdvcmtkJywgJzonLCAnc2VkIC1pIC1lICJcJGFkIC9ydW4vc3lzdGVtZC9uZXRpZi9saW5rcyAwNzU1IHJvb3Qgcm9vdCAtIiAke0R9JHtsaWJkaXJ9L3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mJywgZCl9CisJZmkKKwlpbnN0YWxsIC1EbSAwNzU1ICR7U30vc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbWQtc3lzdi1pbnN0YWxsCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorICAgICAgIGNwIC1yZiAke1N9L3Rlc3QvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisgICAgICAgaW5zdGFsbCAtbSAwNzU1ICAke0J9L3Rlc3QtdWRldiAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L2J1aWxkLWF1eAorICAgICAgIGNwICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR7RH0ke1BURVNUX1BBVEh9L2J1aWxkLWF1eC8KKyAgICAgICBjcCAtcmYgJHtCfS9ydWxlcyAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAjIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRvIGJlIHRoZXJlIGZvciB1ZGV2LXRlc3QucGwgdG8gd29yay4KKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vdWRldi9ydWxlcy5kCisgICAgICAgY3AgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICBjcCAke1N9L3Rlc3Qvc3lzLnRhci54eiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisgICAgICAgc2VkIC1pICdzLyJ0cmVlIi8ibHMiLycgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC91ZGV2LXRlc3QucGwKKyAgICAgICBzZWQgLWkgJ3MjJHtTfSMke1BURVNUX1BBVEh9I2cnICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCisgICAgICAgc2VkIC1pICdzIyR7Qn0jJHtQVEVTVF9QQVRIfSNnJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKXsKKyAgICBzeXN0ZW1kbGliZGlyID0gZC5nZXRWYXIoInJvb3RsaWJkaXIiLCBUcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHN5c3RlbWRsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnU3lzdGVtZCAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIodWRldnxzeXN0ZW1kKS4qIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ3VpICR7UE59LXZjb25zb2xlLXNldHVwICR7UE59LWluaXRyYW1mcyAke1BOfS1hbmFseXplICR7UE59LWtlcm5lbC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAke1BOfS1ycG0tbWFjcm9zICR7UE59LWJpbmZtdCAke1BOfS1wYW0gJHtQTn0tenNoICR7UE59LXhvcmcteGluaXRyYyIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1iaW5mbXQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tYmluZm10ID0gInN5c3RlbWQtYmluZm10LnNlcnZpY2UiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ICs9ICItLXN5c3RlbSBzeXN0ZW1kLWpvdXJuYWwtZ2F0ZXdheTsgLS1zeXN0ZW0gc3lzdGVtZC10aW1lc3luYyIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1yIGxvY2s7IC1yIHN5c3RlbWQtam91cm5hbCIKKworRklMRVNfJHtQTn0tYW5hbHl6ZSA9ICIke2JpbmRpcn0vc3lzdGVtZC1hbmFseXplIgorCitGSUxFU18ke1BOfS1pbml0cmFtZnMgPSAiL2luaXQiCitSREVQRU5EU18ke1BOfS1pbml0cmFtZnMgPSAiJHtQTn0iCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJwZXJsIHB5dGhvbiBiYXNoIgorRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZGlyfS91ZGV2L3J1bGVzLmQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3N5c3RlbWQvcHRlc3QvLmRlYnVnIgorCitGSUxFU18ke1BOfS1ndWkgPSAiJHtiaW5kaXJ9L3N5c3RlbWFkbSIKKworRklMRVNfJHtQTn0tdmNvbnNvbGUtc2V0dXAgPSAiJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIgorCitSREVQRU5EU18ke1BOfS1rZXJuZWwtaW5zdGFsbCArPSAiYmFzaCIKK0ZJTEVTXyR7UE59LWtlcm5lbC1pbnN0YWxsID0gIiR7YmluZGlyfS9rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2tlcm5lbC8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL2tlcm5lbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LXJwbS1tYWNyb3MgPSAiJHtleGVjX3ByZWZpeH0vbGliL3JwbSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS14b3JnLXhpbml0cmMgPSAiJHtzeXNjb25mZGlyfS9YMTEveGluaXQveGluaXRyYy5kLyoiCisKK0ZJTEVTXyR7UE59LXpzaCA9ICIke2RhdGFkaXJ9L3pzaC9zaXRlLWZ1bmN0aW9ucyIKKworRklMRVNfJHtQTn0tYmluZm10ID0gIiR7c3lzY29uZmRpcn0vYmluZm10LmQvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvYmluZm10LmQgXAorICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1iaW5mbXQgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHJvYy1zeXMtZnMtYmluZm10X21pc2MuKiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgorUlJFQ09NTUVORFNfJHtQTn0tYmluZm10ID0gImtlcm5lbC1tb2R1bGUtYmluZm10LW1pc2MiCisKK1JSRUNPTU1FTkRTXyR7UE59LXZjb25zb2xlLXNldHVwID0gImtiZCBrYmQtY29uc29sZWZvbnRzIGtiZC1rZXltYXBzIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9sb2dpbmQuY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvdXNlci5jb25mIgorCitGSUxFU18ke1BOfSA9ICIgJHtiYXNlX2JpbmRpcn0vKiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0LTEgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59IFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ZhY3RvcnkgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWFjaGluZS1pZCBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcGFtLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS94ZGcvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9SRUFETUUgXAorICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvKiBcCisgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9LyogXAorICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJuc3NfKiBcCisgICAgICAgICAgICAgICAgL2Nncm91cCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQqIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYnVzY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vbG9jYWxlY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vaG9zdG5hbWVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS90aW1lZGF0ZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2Jvb3RjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvKi5jb25mIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL21vZHVsZXMtbG9hZC5kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzY3RsLmQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN1c2Vycy5kIFwKKyAgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MC11YWNjZXNzLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MS1zZWF0LnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83My1zZWF0LWxhdGUucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzk5LXN5c3RlbWQucnVsZXMgXAorICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cm9vdGxpYmRpcn0vLmRlYnVnICR7c3lzdGVtZF91bml0ZGlyfS8uZGVidWcgJHtzeXN0ZW1kX3VuaXRkaXJ9LyovLmRlYnVnICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1Zy8iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtkYXRhZGlyfS9kYnVzLTEvaW50ZXJmYWNlcy8gJHtzeXNjb25mZGlyfS9ycG0vbWFjcm9zLnN5c3RlbWQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJrbW9kIGRidXMgdXRpbC1saW51eC1tb3VudCB1ZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorUkRFUEVORFNfJHtQTn0gKz0gInZvbGF0aWxlLWJpbmRzIHVwZGF0ZS1yYy5kIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAic3lzdGVtZC1zZXJpYWxnZXR0eSBzeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWNvbXBhdC11bml0cyB1ZGV2LWh3ZGIgXAorICAgICAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtYWdldHR5ICB1dGlsLWxpbnV4LWZzY2sgZTJmc3Byb2dzLWUyZnNjayBcCisgICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1hdXRvZnM0IGtlcm5lbC1tb2R1bGUtdW5peCBrZXJuZWwtbW9kdWxlLWlwdjYgXAorICAgICAgICAgICAgICAgICAgICAgIG9zLXJlbGVhc2UgXAorIgorCitQQUNLQUdFUyA9KyAidWRldi1kYmcgdWRldiB1ZGV2LWh3ZGIiCisKK0ZJTEVTX3VkZXYtZGJnICs9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnIgorCitSUFJPVklERVNfdWRldiA9ICJob3RwbHVnIgorCitSREVQRU5EU191ZGV2LWh3ZGIgKz0gInVkZXYiCisKK0ZJTEVTX3VkZXYgKz0gIiR7YmFzZV9zYmluZGlyfS91ZGV2ZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9hY2NlbGVyb21ldGVyIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYXRhX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY2Ryb21faWQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9jb2xsZWN0IFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvZmluZGtleWJvYXJkcyBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2ggXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXltYXAgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9tdGRfcHJvYmUgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9zY3NpX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvdjRsX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwcyBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3J1bGVzLmQvKi5ydWxlcyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3VkZXYgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZCBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyp1ZGV2KiBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyoud2FudHMvKnVkZXYqIFwKKyAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3VkZXZhZG0gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvdWRldmFkbSBcCisgICAgICAgICAgICAgICIKKworRklMRVNfdWRldi1od2RiID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvaHdkYi5kIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gInVkZXYiCitJTklUU0NSSVBUX05BTUVfdWRldiA9ICJzeXN0ZW1kLXVkZXZkIgorSU5JVFNDUklQVF9QQVJBTVNfdWRldiA9ICJzdGFydCAwMyBTIC4iCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKKyMgVE9ETzoKKyMgdS1hIGZvciBydW5sZXZlbCBhbmQgdGVsaW5pdAorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJpbml0IGhhbHQgcmVib290IHNodXRkb3duIHBvd2Vyb2ZmIHJ1bmxldmVsIgorCitBTFRFUk5BVElWRV9UQVJHRVRbaW5pdF0gPSAiJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2luaXRdID0gIiR7YmFzZV9zYmluZGlyfS9pbml0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbaW5pdF0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW2hhbHRdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoYWx0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaGFsdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hhbHRdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtyZWJvb3RdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWJvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9yZWJvb3QiCitBTFRFUk5BVElWRV9QUklPUklUWVtyZWJvb3RdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtzaHV0ZG93bl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NodXRkb3duXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc2h1dGRvd24iCitBTFRFUk5BVElWRV9QUklPUklUWVtzaHV0ZG93bl0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3Bvd2Vyb2ZmXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcG93ZXJvZmZdID0gIiR7YmFzZV9zYmluZGlyfS9wb3dlcm9mZiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3Bvd2Vyb2ZmXSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcnVubGV2ZWxdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtydW5sZXZlbF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3J1bmxldmVsIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcnVubGV2ZWxdID89ICIzMDAiCisKK3BrZ19wb3N0aW5zdF91ZGV2LWh3ZGIgKCkgeworCWlmIHRlc3QgLW4gIiREIjsgdGhlbgorCQkke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmFzZV9iaW5kaXJ9L3VkZXZhZG0nKX0gaHdkYiAtLXVwZGF0ZSBcCisJCQktLXJvb3QgJEQKKwllbHNlCisJCXVkZXZhZG0gaHdkYiAtLXVwZGF0ZQorCWZpCit9CisKK3BrZ19wcmVybV91ZGV2LWh3ZGIgKCkgeworCWlmIHRlc3QgLW4gIiREIjsgdGhlbgorCQlleGl0IDEKKwlmaQorCisJcm0gLWYgJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCit9CisKKyMgQXMgdGhpcyByZWNpcGUgYnVpbGRzIHVkZXYsIHJlc3BlY3Qgc3lzdGVtZCBiZWluZyBpbiBESVNUUk9fRkVBVFVSRVMgc28KKyMgdGhhdCB3ZSBkb24ndCBidWlsZCBib3RoIHVkZXYgYW5kIHN5c3RlbWQgaW4gd29ybGQgYnVpbGRzLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9jcnlwdC1saWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzNDI5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworIyBUaGUgc3JjIE1ha2VmaWxlIHdhcyBjaGVja2luZyBmb3IgbGliY3J5cHQuYSBvbiB0aGUgaG9zdCwgbm90IGluIHRoZQorIyBidWlsZCBlbnZpcm9ubWVudC4gIFRoaXMgcGF0Y2ggY2hlY2tzIGZvciAkTENSWVBUIGluIHRoZSBlbnZpcm9ubWVudAorIyBhbmQgdXNlcyBpdCBpZiBpdCdzIHRoZXJlLgorIyAtIGpkaWtlQGxpbnV4LmludGVsLmNvbQorCitJbmRleDogc3lzdmluaXQtMi44OGRzZi9zcmMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXN2aW5pdC0yLjg4ZHNmLm9yaWcvc3JjL01ha2VmaWxlCisrKysgc3lzdmluaXQtMi44OGRzZi9zcmMvTWFrZWZpbGUKK0BAIC04NSw5ICs4NSwxMyBAQCBlbHNlCisgZW5kaWYKKyAKKyAjIEFkZGl0aW9uYWwgbGlicyBmb3IgR05VIGxpYmMuCisraWZuZXEgKCQoTENSWVBUKSwpCisrICBTVUxPR0lOTElCUwkrPSAkKExDUllQVCkKKytlbHNlCisgaWZuZXEgKCQod2lsZGNhcmQgL3Vzci9saWIqL2xpYmNyeXB0LmEpLCkKKyAgIFNVTE9HSU5MSUJTCSs9IC1sY3J5cHQKKyBlbmRpZgorK2VuZGlmCisgCisgYWxsOgkJJChCSU4pICQoU0JJTikgJChVU1JCSU4pCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MjI1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDgzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQoraW5kZXggZTJiODAyOC4uM2UxMWU5MiAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZQorKysrIGIvc3JjL01ha2VmaWxlCitAQCAtNjUsNyArNjUsMTQgQEAgZWxzZQorICAgSU5TVEFMTF9EQVRBCT0gaW5zdGFsbCAtbSA2NDQKKyBlbmRpZgorIElOU1RBTExfRElSCT0gaW5zdGFsbCAtbSA3NTUgLWQKKy1NQU5ESVIJCT0gL3Vzci9zaGFyZS9tYW4KKysKKytST09UICAgICAgICAgPz0KKytiYXNlX2JpbmRpciAgPz0gL2JpbgorK2Jhc2Vfc2JpbmRpciA/PSAvc2JpbgorK2JpbmRpciAgICAgICA/PSAvdXNyL2JpbgorK3N5c2NvbmZkaXIgICA/PSAvZXRjCisraW5jbHVkZWRpciAgID89IC91c3IvaW5jbHVkZQorK21hbmRpciAgICAgICA/PSAvdXNyL3NoYXJlL21hbgorIAorIGlmZXEgKCQoV0lUSF9TRUxJTlVYKSx5ZXMpCisgICBTRUxJTlVYX0RFRgk9ICAtRFdJVEhfU0VMSU5VWAorQEAgLTEzOCwzOSArMTQ1LDM5IEBAIGNsb2JiZXI6CWNsZWFub2JqcworIGRpc3RjbGVhbjoJY2xvYmJlcgorIAorIGluc3RhbGw6CistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpL2Jpbi8gJChST09UKS9zYmluLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKS91c3IvYmluLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoYmFzZV9iaW5kaXIpLyAkKFJPT1QpJChiYXNlX3NiaW5kaXIpLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoYmluZGlyKS8KKyAJCWZvciBpIGluICQoQklOKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKS9iaW4vIDsgXAorKwkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKSQoYmFzZV9iaW5kaXIpLyA7IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoU0JJTik7IGRvIFwKKy0JCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkvc2Jpbi8gOyBcCisrCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpJChiYXNlX3NiaW5kaXIpLyA7IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoVVNSQklOKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKS91c3IvYmluLyA7IFwKKysJCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkkKGJpbmRpcikvIDsgXAorIAkJZG9uZQorLQkJIyAkKElOU1RBTExfRElSKSAkKFJPT1QpL2V0Yy8KKy0JCSMgJChJTlNUQUxMX0VYRUMpIGluaXRzY3JpcHQuc2FtcGxlICQoUk9PVCkvZXRjLworLQkJbG4gLXNmIGhhbHQgJChST09UKS9zYmluL3JlYm9vdAorLQkJbG4gLXNmIGhhbHQgJChST09UKS9zYmluL3Bvd2Vyb2ZmCistCQlsbiAtc2YgaW5pdCAkKFJPT1QpL3NiaW4vdGVsaW5pdAorLQkJbG4gLXNmIC9zYmluL2tpbGxhbGw1ICQoUk9PVCkvYmluL3BpZG9mCistCQlpZiBbICEgLWYgJChST09UKS91c3IvYmluL2xhc3RiIF07IHRoZW4gXAorLQkJCWxuIC1zZiBsYXN0ICQoUk9PVCkvdXNyL2Jpbi9sYXN0YjsgXAorKwkJIyAkKElOU1RBTExfRElSKSAkKFJPT1QpJChzeXNjb25mZGlyKS8KKysJCSMgJChJTlNUQUxMX0VYRUMpIGluaXRzY3JpcHQuc2FtcGxlICQoUk9PVCkkKHN5c2NvbmZkaXIpLworKwkJbG4gLXNmIGhhbHQgJChST09UKSQoYmFzZV9zYmluZGlyKS9yZWJvb3QKKysJCWxuIC1zZiBoYWx0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvcG93ZXJvZmYKKysJCWxuIC1zZiBpbml0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvdGVsaW5pdAorKwkJbG4gLXNmICQoYmFzZV9zYmluZGlyKS9raWxsYWxsNSAkKFJPT1QpJChiYXNlX2JpbmRpcikvcGlkb2YKKysJCWlmIFsgISAtZiAkKFJPT1QpJChiaW5kaXIpL2xhc3RiIF07IHRoZW4gXAorKwkJCWxuIC1zZiBsYXN0ICQoUk9PVCkkKGJpbmRpcikvbGFzdGI7IFwKKyAJCWZpCistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpL3Vzci9pbmNsdWRlLworLQkJJChJTlNUQUxMX0RBVEEpIGluaXRyZXEuaCAkKFJPT1QpL3Vzci9pbmNsdWRlLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW4xLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW41LworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW44LworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoaW5jbHVkZWRpcikvCisrCQkkKElOU1RBTExfREFUQSkgaW5pdHJlcS5oICQoUk9PVCkkKGluY2x1ZGVkaXIpLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW4xLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW41LworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW44LworIAkJZm9yIGkgaW4gJChNQU4xKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKE1BTkRJUikvbWFuMS87IFwKKysJCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChtYW5kaXIpL21hbjEvOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKE1BTjUpOyBkbyBcCistCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQoTUFORElSKS9tYW41LzsgXAorKwkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKG1hbmRpcikvbWFuNS87IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoTUFOOCk7IGRvIFwKKy0JCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChNQU5ESVIpL21hbjgvOyBcCisrCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQobWFuZGlyKS9tYW44LzsgXAorIAkJZG9uZQorIGlmZXEgKCQoUk9PVCksKQorIAkJIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL3BpZG9mLWFkZC1tLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjVkZmRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxODkgQEAKK3BpZG9mOiBhZGQgLW0gb3B0aW9uCisKK1doZW4gdXNlZCB3aXRoIC1vLCB3aWxsIGFsc28gb21pdCBhbnkgcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgc2FtZQorYXJndlswXSBhbmQgYXJndlsxXSBhcyBhbnkgZXhwbGljaXRseSBvbWl0dGVkIHByb2Nlc3MgaWRzLiBUaGlzIGNhbiBiZQordXNlZCB0byBhdm9pZCBtdWx0aXBsZSBzaGVsbCBzY3JpcHRzIGNvbmN1cnJlbnRseSBjYWxsaW5nIHBpZG9mIHJldHVybmluZworZWFjaCBvdGhlcidzIHBpZHMuCisKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9ODgzODU2CisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKK0ltcG9ydGVkIHBhdGNoIGZyb206IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD02NTgxNjYKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbWFuL3BpZG9mLjggICAgfCAgNiArKysrKysKKyBzcmMva2lsbGFsbDUuYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYW4vcGlkb2YuOCBiL21hbi9waWRvZi44CistLS0gYS9tYW4vcGlkb2YuOAorKysrIGIvbWFuL3BpZG9mLjgKK0BAIC0yNCw2ICsyNCw3IEBAIHBpZG9mIC0tIGZpbmQgdGhlIHByb2Nlc3MgSUQgb2YgYSBydW5uaW5nIHByb2dyYW0uCisgLlJCIFsgXC1jIF0KKyAuUkIgWyBcLW4gXQorIC5SQiBbIFwteCBdCisrLlJCIFsgXC1tIF0KKyAuUkIgWyBcLW8KKyAuSVIgb21pdHBpZFssb21pdHBpZC4uXSBdCisgLlJCIFsgXC1vCitAQCAtNjMsNiArNjQsMTEgQEAgc2hlbGxzIHJ1bm5pbmcgdGhlIG5hbWVkIHNjcmlwdHMuCisgVGVsbHMgXGZJcGlkb2ZcZlAgdG8gb21pdCBwcm9jZXNzZXMgd2l0aCB0aGF0IHByb2Nlc3MgaWQuIFRoZSBzcGVjaWFsCisgcGlkIFxmQiVQUElEXGZQIGNhbiBiZSB1c2VkIHRvIG5hbWUgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBcZklwaWRvZlxmUAorIHByb2dyYW0sIGluIG90aGVyIHdvcmRzIHRoZSBjYWxsaW5nIHNoZWxsIG9yIHNoZWxsIHNjcmlwdC4KKysuSVAgLW0KKytXaGVuIHVzZWQgd2l0aCAtbywgd2lsbCBhbHNvIG9taXQgYW55IHByb2Nlc3NlcyB0aGF0IGhhdmUgdGhlIHNhbWUKKythcmd2WzBdIGFuZCBhcmd2WzFdIGFzIGFueSBleHBsaWNpdGx5IG9taXR0ZWQgcHJvY2VzcyBpZHMuIFRoaXMgY2FuIGJlCisrdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBzaGVsbCBzY3JpcHRzIGNvbmN1cnJlbnRseSBjYWxsaW5nIHBpZG9mIHJldHVybmluZworK2VhY2ggb3RoZXIncyBwaWRzLgorIC5TSCAiRVhJVCBTVEFUVVMiCisgLlRQCisgLkIgMAorZGlmZiAtLWdpdCBhL3NyYy9raWxsYWxsNS5jIGIvc3JjL2tpbGxhbGw1LmMKK2luZGV4IDU5MzdkOTguLmU3Mzg4NWUgMTAwNjQ0CistLS0gYS9zcmMva2lsbGFsbDUuYworKysrIGIvc3JjL2tpbGxhbGw1LmMKK0BAIC0xMTgsNiArMTE4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX3NfbmZzCisgCisgLyogTGlzdCBvZiBwcm9jZXNzZXMuICovCisgUFJPQyAqcGxpc3Q7CisrUFJPQyAqb2xpc3Q7CisgCisgLyogTGlzdCBvZiBwcm9jZXNzZXMgdG8gb21pdC4gKi8KKyBPTUlUICpvbWl0OworQEAgLTM0NSw2ICszNDYsMjAgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW50KHZvaWQpCisgCX0KKyB9CisgCisrc3RhdGljIHZvaWQgY2xlYXJfb21pdCh2b2lkKQorK3sKKysJT01JVCAqbzsKKysJUFJPQyAqcDsKKysJZm9yIChvID0gb21pdDsgbzsgbyA9IG9taXQpIHsKKysJCW9taXQgPSBvbWl0LT5uZXh0OworKwkJZnJlZShvKTsKKysJfQorKwlmb3IgKHAgPSBvbGlzdDsgcDsgcCA9IG9saXN0KSB7CisrCQlvbGlzdCA9IG9saXN0LT5uZXh0OworKwkJZnJlZShwKTsKKysJfQorK30KKysKKyAvKgorICAqICAgICBDaGVjayBpZiBwYXRoIGlzIGlhIHNoYWRvdyBvZmYgYSBORlMgcGFydGl0aW9uLgorICAqLworQEAgLTQ1Miw2ICs0NjcsNyBAQCBpbnQgcmVhZHByb2MoaW50IGRvX3N0YXQpCisgCURJUgkJKmRpcjsKKyAJRklMRQkJKmZwOworIAlQUk9DCQkqcCwgKm47CisrCU9NSVQJCSpvLCAqbTsKKyAJc3RydWN0IGRpcmVudAkqZDsKKyAJc3RydWN0IHN0YXQJc3Q7CisgCWNoYXIJCXBhdGhbUEFUSF9NQVgrMV07CitAQCAtNjI0LDYgKzY0MCwxNyBAQCBpbnQgcmVhZHByb2MoaW50IGRvX3N0YXQpCisgCQlwLT5uZXh0ID0gcGxpc3Q7CisgCQlwbGlzdCA9IHA7CisgCQlwLT5waWQgPSBwaWQ7CisrCQkvKiBDb3VsZCBiZSBzbWFydGVyLCBidXQgaXQncyBhIHNtYWxsIGxpc3QuICovCisrCQltID0gb21pdDsKKysJCWZvciAobyA9IG9taXQ7IG07IG8gPSBtKSB7CisrCQkJbSA9IG8tPm5leHQ7CisrCQkJaWYgKG8tPnBpZCA9PSBwLT5waWQpIHsKKysJCQkJbiA9IChQUk9DKil4bWFsbG9jKHNpemVvZihQUk9DKSk7CisrCQkJCSpuID0gKnA7CisrCQkJCW4tPm5leHQgPSBvbGlzdDsKKysJCQkJb2xpc3QgPSBuOworKwkJCX0KKysJCX0KKyAJfQorIAljbG9zZWRpcihkaXIpOworIAorQEAgLTgxMyw2ICs4NDAsMjYgQEAgUElEUV9IRUFEICpwaWRvZihjaGFyICpwcm9nKQorIAlyZXR1cm4gcTsKKyB9CisgCisraW50IG1hdGNoZXMoUFJPQyAqbywgUFJPQyAqcCkKKyt7CisrCWludCByZXQgPSAwOworKwljaGFyICpvYXJndjEsICpwYXJndjE7CisrCWlmICgoby0+YXJndjAgJiYgcC0+YXJndjAgJiYgIXN0cmNtcChvLT5hcmd2MCxwLT5hcmd2MCkpKSB7CisrCQlpZiAoby0+YXJndjEgJiYgcC0+YXJndjEpIHsKKysJCQlpZiAoKG9hcmd2MSA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoby0+YXJndjEpKSA9PSBOVUxMKQorKwkJCQlvYXJndjEgPSBzdHJkdXAoby0+YXJndjEpOworKwkJCWlmICgocGFyZ3YxID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShwLT5hcmd2MSkpID09IE5VTEwpCisrCQkJCXBhcmd2MSA9IHN0cmR1cChwLT5hcmd2MSk7CisrCQkJaWYgKCEgc3RyY21wKG9hcmd2MSwgcGFyZ3YxKSkgeworKwkJCQlyZXQgPSAxOworKwkJCX0KKysJCQlmcmVlKG9hcmd2MSk7CisrCQkJZnJlZShwYXJndjEpOworKwkJfQorKwl9CisrCXJldHVybiByZXQ7CisrfQorKworIC8qIEdpdmUgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4gKi8KKyB2b2lkIHVzYWdlKHZvaWQpCisgeworQEAgLTg0NSw2ICs4OTIsNyBAQCB2b2lkIG5zeXNsb2coaW50IHByaSwgY2hhciAqZm10LCAuLi4pCisgI2RlZmluZSBQSURPRl9TSU5HTEUJMHgwMQorICNkZWZpbmUgUElET0ZfT01JVAkweDAyCisgI2RlZmluZSBQSURPRl9ORVRGUwkweDA0CisrI2RlZmluZSBQSURPRl9PTUlUX09NSVRfTUFUQ0hFUwkweDA4CisgCisgLyoKKyAgKglQaWRvZiBmdW5jdGlvbmFsaXR5LgorQEAgLTg2MSw2ICs5MDksNyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQl0bXBbNTEyXTsKKyAKKysJb2xpc3QgPSAoUFJPQyopMDsKKyAJb21pdCA9IChPTUlUKikwOworIAlubGlzdCA9IChORlMqKTA7CisgCW9wdGVyciA9IDA7CitAQCAtODY4LDcgKzkxNyw3IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJaWYgKCh0b2tlbiA9IGdldGVudigiUElET0ZfTkVURlMiKSkgJiYgKHN0cmNtcCh0b2tlbiwibm8iKSAhPSAwKSkKKyAJCWZsYWdzIHw9IFBJRE9GX05FVEZTOworIAorLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLGFyZ3YsImhjbzpzeG4iKSkgIT0gRU9GKSBzd2l0Y2ggKG9wdCkgeworKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLGFyZ3YsImhjbW86c3huIikpICE9IEVPRikgc3dpdGNoIChvcHQpIHsKKyAJCWNhc2UgJz8nOgorIAkJCW5zeXNsb2coTE9HX0VSUiwiaW52YWxpZCBvcHRpb25zIG9uIGNvbW1hbmQgbGluZSFcbiIpOworIAkJCWNsb3NlbG9nKCk7CitAQCAtOTA3LDYgKzk1Niw5IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCWNhc2UgJ3gnOgorIAkJCXNjcmlwdHNfdG9vKys7CisgCQkJYnJlYWs7CisrCQljYXNlICdtJzoKKysJCQlmbGFncyB8PSBQSURPRl9PTUlUX09NSVRfTUFUQ0hFUzsKKysJCQlicmVhazsKKyAJCWNhc2UgJ24nOgorIAkJCWZsYWdzIHw9IFBJRE9GX05FVEZTOworIAkJCWJyZWFrOworQEAgLTkzOCwxMCArOTkwLDEzIEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlwaWRfdCBzcGlkID0gMDsKKyAJCQl3aGlsZSAoKHAgPSBnZXRfbmV4dF9mcm9tX3BpZF9xKHEpKSkgeworIAkJCQlpZiAoKGZsYWdzICYgUElET0ZfT01JVCkgJiYgb21pdCkgeworLQkJCQkJT01JVCAqIG9wdHI7CistCQkJCQlmb3IgKG9wdHIgPSBvbWl0OyBvcHRyOyBvcHRyID0gb3B0ci0+bmV4dCkgeworKwkJCQkJUFJPQyAqIG9wdHI7CisrCQkJCQlmb3IgKG9wdHIgPSBvbGlzdDsgb3B0cjsgb3B0ciA9IG9wdHItPm5leHQpIHsKKyAJCQkJCQlpZiAob3B0ci0+cGlkID09IHAtPnBpZCkKKyAJCQkJCQkJYnJlYWs7CisrCQkJCQkJaWYgKGZsYWdzICYgUElET0ZfT01JVF9PTUlUX01BVENIRVMpCisrCQkJCQkJCWlmIChtYXRjaGVzKG9wdHIsIHApKQorKwkJCQkJCQkJYnJlYWs7CisgCQkJCQl9CisgCisgCQkJCQkvKgorQEAgLTk3Nyw2ICsxMDMyLDcgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlpZiAoIWZpcnN0KQorIAkJcHJpbnRmKCJcbiIpOworIAorKwljbGVhcl9vbWl0KCk7CisgCWNsZWFyX21udCgpOworIAorIAljbG9zZWxvZygpOworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWJiZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiCkBAIC0wLDAgKzEsMzAgQEAKKyMgL2V0Yy9pbml0dGFiOiBpbml0KDgpIGNvbmZpZ3VyYXRpb24uCisjICRJZDogaW5pdHRhYix2IDEuOTEgMjAwMi8wMS8yNSAxMzozNToyMSBtaXF1ZWxzIEV4cCAkCisKKyMgVGhlIGRlZmF1bHQgcnVubGV2ZWwuCitpZDo1OmluaXRkZWZhdWx0OgorCisjIEJvb3QtdGltZSBzeXN0ZW0gY29uZmlndXJhdGlvbi9pbml0aWFsaXphdGlvbiBzY3JpcHQuCisjIFRoaXMgaXMgcnVuIGZpcnN0IGV4Y2VwdCB3aGVuIGJvb3RpbmcgaW4gZW1lcmdlbmN5ICgtYikgbW9kZS4KK3NpOjpzeXNpbml0Oi9ldGMvaW5pdC5kL3JjUworCisjIFdoYXQgdG8gZG8gaW4gc2luZ2xlLXVzZXIgbW9kZS4KK35+OlM6d2FpdDovc2Jpbi9zdWxvZ2luCisKKyMgL2V0Yy9pbml0LmQgZXhlY3V0ZXMgdGhlIFMgYW5kIEsgc2NyaXB0cyB1cG9uIGNoYW5nZQorIyBvZiBydW5sZXZlbC4KKyMKKyMgUnVubGV2ZWwgMCBpcyBoYWx0LgorIyBSdW5sZXZlbCAxIGlzIHNpbmdsZS11c2VyLgorIyBSdW5sZXZlbHMgMi01IGFyZSBtdWx0aS11c2VyLgorIyBSdW5sZXZlbCA2IGlzIHJlYm9vdC4KKworbDA6MDp3YWl0Oi9ldGMvaW5pdC5kL3JjIDAKK2wxOjE6d2FpdDovZXRjL2luaXQuZC9yYyAxCitsMjoyOndhaXQ6L2V0Yy9pbml0LmQvcmMgMgorbDM6Mzp3YWl0Oi9ldGMvaW5pdC5kL3JjIDMKK2w0OjQ6d2FpdDovZXRjL2luaXQuZC9yYyA0CitsNTo1OndhaXQ6L2V0Yy9pbml0LmQvcmMgNQorbDY6Njp3YWl0Oi9ldGMvaW5pdC5kL3JjIDYKKyMgTm9ybWFsbHkgbm90IHJlYWNoZWQsIGJ1dCBmYWxsdGhyb3VnaCBpbiBjYXNlIG9mIGVtZXJnZW5jeS4KK3o2OjY6cmVzcGF3bjovc2Jpbi9zdWxvZ2luCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliMTMyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYgpAQCAtMCwwICsxLDgzIEBACitTVU1NQVJZID0gIkluaXR0YWIgY29uZmlndXJhdGlvbiBmb3IgU3lzVmluaXQiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK1BSID0gInIxMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdHRhYiIKKworUyA9ICIke1dPUktESVJ9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19jb21waWxlKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5pdHRhYiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisKKyAgICBzZXQgLXgKKyAgICB0bXA9IiR7U0VSSUFMX0NPTlNPTEVTfSIKKyAgICBmb3IgaSBpbiAkdG1wCisgICAgZG8KKwlqPWBlY2hvICR7aX0gfCBzZWQgcy9cOy9cIC9nYAorCWxhYmVsPWBlY2hvICR7aX0gfCBzZWQgLWUgJ3MvdHR5Ly8nIC1lICdzL14uKjsvLycgLWUgJ3MvOy4qLy8nYAorCWVjaG8gIiRsYWJlbDoxMjM0NTpyZXNwYXduOiR7YmFzZV9zYmluZGlyfS9nZXR0eSAtTCAke2p9IiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisgICAgZG9uZQorCisgICAgaWYgWyAiJHtVU0VfVlR9IiA9ICIxIiBdOyB0aGVuCisgICAgICAgIGNhdCA8PEVPRiA+PiR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyMgJHtiYXNlX3NiaW5kaXJ9L2dldHR5IGludm9jYXRpb25zIGZvciB0aGUgcnVubGV2ZWxzLgorIworIyBUaGUgImlkIiBmaWVsZCBNVVNUIGJlIHRoZSBzYW1lIGFzIHRoZSBsYXN0CisjIGNoYXJhY3RlcnMgb2YgdGhlIGRldmljZSAoYWZ0ZXIgInR0eSIpLgorIworIyBGb3JtYXQ6CisjICA8aWQ+OjxydW5sZXZlbHM+OjxhY3Rpb24+Ojxwcm9jZXNzPgorIworCitFT0YKKworICAgICAgICBmb3IgbiBpbiAke1NZU1ZJTklUX0VOQUJMRURfR0VUVFlTfQorICAgICAgICBkbworICAgICAgICAgICAgZWNobyAiJG46MTIzNDU6cmVzcGF3bjoke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkgMzg0MDAgdHR5JG4iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICAgICAgZG9uZQorICAgICAgICBlY2hvICIiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICBmaQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworIyBydW4gdGhpcyBvbiB0aGUgdGFyZ2V0CitpZiBbICJ4JEQiID0gIngiIF0gJiYgWyAtZSAvcHJvYy9jb25zb2xlcyBdOyB0aGVuCisJdG1wPSIke1NFUklBTF9DT05TT0xFU19DSEVDS30iCisJZm9yIGkgaW4gJHRtcAorCWRvCisJCWo9YGVjaG8gJHtpfSB8IHNlZCBzL14uKlw7Ly9nYAorCQlpZiBbIC16ICJgZ3JlcCAke2p9IC9wcm9jL2NvbnNvbGVzYCIgXTsgdGhlbgorCQkJc2VkIC1pIC9eLioke2p9JC9kIC9ldGMvaW5pdHRhYgorCQlmaQorCWRvbmUKKwlraWxsIC1IVVAgMQorZWxzZQorCWlmIFsgIiR7U0VSSUFMX0NPTlNPTEVTX0NIRUNLfSIgPSAiIiBdOyB0aGVuCisJCWV4aXQgMAorCWVsc2UKKwkJZXhpdCAxCisJZmkKK2ZpCit9CisKKyMgVVNFX1ZUIGFuZCBTRVJJQUxfQ09OU09MRVMgYXJlIGdlbmVyYWxseSBkZWZpbmVkIGJ5IHRoZSBNQUNISU5FIC5jb25mLgorIyBTZXQgUEFDS0FHRV9BUkNIIGFwcHJvcHJpYXRlbHkuCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2luaXR0YWIiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9pbml0dGFiIgorCitVU0VfVlQgPz0gIjEiCitTWVNWSU5JVF9FTkFCTEVEX0dFVFRZUyA/PSAiMSIKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzVjMTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gMzZhYzk3YmZlNTE3OTc0NTg0NDJhNjAzNTIxOWE1MDRhNDJlNzAzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIxIEF1ZyAyMDE1IDEwOjU2OjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoaXMgZml4ZXMgYW4gaXNzdWUgdGhhdCBjbGFuZyByZXBvcnRzIGFib3V0IG11dGxpcGxlIG91dHB1dAorIGZpbGVzCisKK0lzc3VlIGlzIHRoYXQgd2UgYXJlIHBhc3NpbmcgLmggZmlsZSB0byBsaW5rIHN0ZXAgYXMgc2VlbiBiZWxvdy4KKworfCBhcm0tb2UtbGludXgtZ251ZWFiaS1jbGFuZyAgLW1hcmNoPWFybXY3LWEgLW10aHVtYiAgLW1mbG9hdC1hYmk9aGFyZAorLW1mcHU9bmVvbi12ZnB2NCAtbXR1bmU9Y29ydGV4LWE3IC1EX19leHRlcm5fYWx3YXlzX2lubGluZT1pbmxpbmUKKy1uby1pbnRlZ3JhdGVkLWFzCistLXN5c3Jvb3Q9L21udC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9yYXNwYmVycnlwaTIKKy1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkICBoYWx0Lm8gaWZkb3duLm8gaGRkb3duLm8KK3V0bXAubyByZWJvb3QuaCAgIC1vIGhhbHQKK3wgY2xhbmctMy43OiBlcnJvcjogY2Fubm90IHNwZWNpZnkgLW8gd2hlbiBnZW5lcmF0aW5nIG11bHRpcGxlIG91dHB1dAorZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUKK2luZGV4IGU3N2VkNWYuLmE2ZjlmNDAgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUKKysrKyBiL3NyYy9NYWtlZmlsZQorQEAgLTEwMyw5ICsxMDMsOSBAQCBhbGw6CQkkKEJJTikgJChTQklOKSAkKFVTUkJJTikKKyBpbml0OgkJTERMSUJTICs9ICQoSU5JVExJQlMpICQoU1RBVElDKQorIGluaXQ6CQlpbml0Lm8gaW5pdF91dG1wLm8KKyAKKy1oYWx0OgkJaGFsdC5vIGlmZG93bi5vIGhkZG93bi5vIHV0bXAubyByZWJvb3QuaAorK2hhbHQ6CQloYWx0Lm8gaWZkb3duLm8gaGRkb3duLm8gdXRtcC5vCisgCistbGFzdDoJCWxhc3QubyBvbGR1dG1wLmgKKytsYXN0OgkJbGFzdC5vCisgCisgbWVzZzoJCW1lc2cubworIAorQEAgLTEyMCw3ICsxMjAsNyBAQCBzdWxvZ2luOglzdWxvZ2luLm8KKyAKKyB3YWxsOgkJZG93YWxsLm8gd2FsbC5vCisgCistc2h1dGRvd246CWRvd2FsbC5vIHNodXRkb3duLm8gdXRtcC5vIHJlYm9vdC5oCisrc2h1dGRvd246CWRvd2FsbC5vIHNodXRkb3duLm8gdXRtcC5vCisgCisgYm9vdGxvZ2Q6CUxETElCUyArPSAtbHV0aWwKKyBib290bG9nZDoJYm9vdGxvZ2QubworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAxX2Jvb3Rsb2dkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODlkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZApAQCAtMCwwICsxIEBACitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvbG9nL2Jvb3Qgbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L2Jvb3Rsb2dkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY1YWE0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L2Jvb3Rsb2dkLmluaXQKQEAgLTAsMCArMSw5OCBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdGxvZ2QKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAyIDMgNCA1CisjIFNob3J0LURlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIGZpcnN0IHNjcmlwdHMgdG8gYmUgZXhlY3V0ZWQuIFN0YXJ0cyBvciBzdG9wcworIyAgICAgICAgICAgICAgIHRoZSBib290bG9nZCBsb2cgcHJvZ3JhbS4gSWYgdGhpcyBzY3JpcHQgaXMgY2FsbGVkIGFzCisjICAgICAgICAgICAgICAgInN0b3AtYm9vdGxvZ2QiLCBpdCB3aWxsIHN0b3AgdGhlIGRhZW1vbiBpbnN0ZWFkIG9mCisjICAgICAgICAgICAgICAgc3RhcnRpbmcgaXQgZXZlbiB3aGVuIGNhbGxlZCB3aXRoIHRoZSAic3RhcnQiIGFyZ3VtZW50LgorIworIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS9zYmluL2Jvb3Rsb2dkCitOQU1FPWJvb3Rsb2dkCitERVNDPSJCb290bG9nIGRhZW1vbiIKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitbIC1yIC9ldGMvZGVmYXVsdC9ib290bG9nZCBdICYmIC4gL2V0Yy9kZWZhdWx0L2Jvb3Rsb2dkCisKKyMjIHNldCAtZSAjIG5vdCBuZWVkZWQKKworY2FzZSAiJEJPT1RMT0dEX0VOQUJMRSIgaW4KKwlbTm5dKikKKwkJZXhpdCAwCisJCTs7Citlc2FjCisKK1NUT1BQRVI9CitBQ1RJT049IiQxIgorY2FzZSAiJDAiIGluCisJKnN0b3AtYm9vdGxvZyopCisJCVNUT1BQRVI9WQorCQlpZiBbICIkQUNUSU9OIiA9IHN0YXJ0IF0KKwkJdGhlbgorCQkJQUNUSU9OPXN0b3AKKwkJZmkKKwkJOzsKK2VzYWMKKworY2FzZSAiJEFDVElPTiIgaW4KKwlzdGFydCkKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJCWlmIFsgLWQgL3Byb2MvMS8uIF0KKwkJdGhlbgorCQkJdW1hc2sgMDI3CisJCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgXAorCQkJCS0tZXhlYyAkREFFTU9OIC0tIC1yIC1jCisJCWVsc2UKKwkJCSREQUVNT04gLXIgLWMKKwkJZmkKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIiROQU1FLiIKKwkJOzsKKwlzdG9wKQorCQkjIHN0b3AgbWF5IGdldCBjYWxsZWQgZHVyaW5nIGJvb3R1cCwgc28gbGV0IGl0IGhvbm9yCisJCSMgcmNTIFZFUkJPU0Ugc2V0dGluZworCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjICREQUVNT04KKworCQlpZiBbICIkU1RPUFBFUiIgXSAmJiBbICIkKHdoaWNoIHNhdmVsb2cgMj4vZGV2L251bGwpIiBdICYmIFwKKwkJICAgWyAtZiAvdmFyL2xvZy9ib290IF0gJiYgWyAtZiAvdmFyL2xvZy9ib290fiBdCisJCXRoZW4KKwkJCWNkIC92YXIvbG9nCisJCQljaGdycCBhZG0gYm9vdAorCQkJc2F2ZWxvZyAtcCAtYyA1IGJvb3QgPiAvZGV2L251bGwgMj4mMQorCQkJbXYgYm9vdC4wIGJvb3QKKwkJCW12IGJvb3R+IGJvb3QuMAorCQlmaQorCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICIkTkFNRS4iCisJCTs7CisJIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCQllY2hvIC1uICJSZXN0YXJ0aW5nICRERVNDOiAiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisJCXNsZWVwIDEKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisJCWVjaG8gIiROQU1FLiIKKwkJOzsKKwlzdGF0dXMpCisJCXN0YXR1cyAkREFFTU9OCisJCWV4aXQgJD8KKwkJOzsKKwkqKQorCQlOPSR7MCMjKi99CisJCU49JHtOI1tTS10/P30KKwkJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2NhNDFhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKKyMKKyMgcmMJCVRoaXMgZmlsZSBpcyByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcvc3RvcHBpbmcKKyMJCXNlcnZpY2VzIHdoZW4gdGhlIHJ1bmxldmVsIGNoYW5nZXMuCisjCisjCQlPcHRpbWl6YXRpb24gZmVhdHVyZToKKyMJCUEgc3RhcnR1cCBzY3JpcHQgaXMgX25vdF8gcnVuIHdoZW4gdGhlIHNlcnZpY2Ugd2FzCisjCQlydW5uaW5nIGluIHRoZSBwcmV2aW91cyBydW5sZXZlbCBhbmQgaXQgd2Fzbid0IHN0b3BwZWQKKyMJCWluIHRoZSBydW5sZXZlbCB0cmFuc2l0aW9uIChtb3N0IERlYmlhbiBzZXJ2aWNlcyBkb24ndAorIwkJaGF2ZSBLPz8gbGlua3MgaW4gcmN7MSwyLDMsNCw1fSApCisjCisjIEF1dGhvcjoJTWlxdWVsIHZhbiBTbW9vcmVuYnVyZyA8bWlxdWVsc0BjaXN0cm9uLm5sPgorIwkJQnJ1Y2UgUGVyZW5zIDxCcnVjZUBQaXhhci5jb20+CisjCisjIFZlcnNpb246CUAoIylyYyAgMi43OCAgMDctTm92LTE5OTkgIG1pcXVlbHNAY2lzdHJvbi5ubAorIworCisuIC9ldGMvZGVmYXVsdC9yY1MKK2V4cG9ydCBWRVJCT1NFCisKK3N0YXJ0dXBfcHJvZ3Jlc3MoKSB7CisgICAgc3RlcD0kKCgkc3RlcCArICRzdGVwX2NoYW5nZSkpCisgICAgaWYgWyAiJG51bV9zdGVwcyIgIT0gIjAiIF07IHRoZW4KKyAgICAgICAgcHJvZ3Jlc3M9JCgoKCRzdGVwICogJHByb2dyZXNzX3NpemUgLyAkbnVtX3N0ZXBzKSArICRmaXJzdF9zdGVwKSkKKyAgICBlbHNlCisgICAgICAgIHByb2dyZXNzPSRwcm9ncmVzc19zaXplCisgICAgZmkKKyAgICAjZWNobyAiUFJPR1JFU1MgaXMgJHByb2dyZXNzICRydW5sZXZlbCAkZmlyc3Rfc3RlcCArICgkc3RlcCBvZiAkbnVtX3N0ZXBzKSAkc3RlcF9jaGFuZ2UgJHByb2dyZXNzX3NpemUiCisgICAgI2lmIHR5cGUgcHNwbGFzaC13cml0ZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAjICAgIFRNUERJUj0vbW50Ly5wc3BsYXNoIHBzcGxhc2gtd3JpdGUgIlBST0dSRVNTICRwcm9ncmVzcyIgfHwgdHJ1ZQorICAgICNmaQorICAgIGlmIFsgLWUgL21udC8ucHNwbGFzaC9wc3BsYXNoX2ZpZm8gXTsgdGhlbgorICAgICAgICBlY2hvICJQUk9HUkVTUyAkcHJvZ3Jlc3MiID4gL21udC8ucHNwbGFzaC9wc3BsYXNoX2ZpZm8KKyAgICBmaQorfQorCisKKyMKKyMgU3RhcnQgc2NyaXB0IG9yIHByb2dyYW0uCisjCitzdGFydHVwKCkgeworICAjIEhhbmRsZSB2ZXJib3NpdHkKKyAgWyAiJFZFUkJPU0UiID0gdmVyeSBdICYmIGVjaG8gIklOSVQ6IFJ1bm5pbmcgJEAuLi4iCisKKyAgY2FzZSAiJDEiIGluCisJKi5zaCkKKwkJIyBTb3VyY2Ugc2hlbGwgc2NyaXB0IGZvciBzcGVlZC4KKwkJKAorCQkJdHJhcCAtIElOVCBRVUlUIFRTVFAKKwkJCXNjcmlwdG5hbWU9JDEKKwkJCXNoaWZ0CisJCQkuICRzY3JpcHRuYW1lCisJCSkKKwkJOzsKKwkqKQorCQkiJEAiCisJCTs7CisgIGVzYWMKKyAgc3RhcnR1cF9wcm9ncmVzcworfQorCisgICMgSWdub3JlIENUUkwtQyBvbmx5IGluIHRoaXMgc2hlbGwsIHNvIHdlIGNhbiBpbnRlcnJ1cHQgc3VicHJvY2Vzc2VzLgorICB0cmFwICI6IiBJTlQgUVVJVCBUU1RQCisKKyAgIyBTZXQgb25sY3IgdG8gYXZvaWQgc3RhaXJjYXNlIGVmZmVjdC4KKyAgc3R0eSBvbmxjciAwPiYxCisKKyAgIyBMaW1pdCBzdGFjayBzaXplIGZvciBzdGFydHVwIHNjcmlwdHMKKyAgWyAiJFNUQUNLX1NJWkUiID09ICIiIF0gfHwgdWxpbWl0IC1TIC1zICRTVEFDS19TSVpFCisKKyAgIyBOb3cgZmluZCBvdXQgd2hhdCB0aGUgY3VycmVudCBhbmQgd2hhdCB0aGUgcHJldmlvdXMgcnVubGV2ZWwgYXJlLgorCisgIHJ1bmxldmVsPSRSVU5MRVZFTAorICAjIEdldCBmaXJzdCBhcmd1bWVudC4gU2V0IG5ldyBydW5sZXZlbCB0byB0aGlzIGFyZ3VtZW50LgorICBbICIkMSIgIT0gIiIgXSAmJiBydW5sZXZlbD0kMQorICBpZiBbICIkcnVubGV2ZWwiID0gIiIgXQorICB0aGVuCisJZWNobyAiVXNhZ2U6ICQwIDxydW5sZXZlbD4iID4mMgorCWV4aXQgMQorICBmaQorICBwcmV2aW91cz0kUFJFVkxFVkVMCisgIFsgIiRwcmV2aW91cyIgPSAiIiBdICYmIHByZXZpb3VzPU4KKworICBleHBvcnQgcnVubGV2ZWwgcHJldmlvdXMKKworICAjIElzIHRoZXJlIGFuIHJjIGRpcmVjdG9yeSBmb3IgdGhpcyBuZXcgcnVubGV2ZWw/CisgIGlmIFsgLWQgL2V0Yy9yYyRydW5sZXZlbC5kIF0KKyAgdGhlbgorCSMgRmluZCBvdXQgd2hlcmUgaW4gdGhlIHByb2dyZXNzIGJhciB0aGUgaW5pdHJhbWZzIGdvdCB0by4KKwlQUk9HUkVTU19TVEFURT0wCisJI2lmIFsgLWYgL2Rldi8uaW5pdHJhbWZzL3Byb2dyZXNzX3N0YXRlIF07IHRoZW4KKwkjICAgIC4gL2Rldi8uaW5pdHJhbWZzL3Byb2dyZXNzX3N0YXRlCisJI2ZpCisKKwkjIFNwbGl0IHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgcHJvZ3Jlc3MgYmFyIGludG8gdGhpcmRzCisJcHJvZ3Jlc3Nfc2l6ZT0kKCgoMTAwIC0gJFBST0dSRVNTX1NUQVRFKSAvIDMpKQorCisJY2FzZSAiJHJ1bmxldmVsIiBpbgorCQkwfDYpCisJCQkjIENvdW50IGRvd24gZnJvbSAtMTAwIHRvIDAgYW5kIHVzZSB0aGUgZW50aXJlIGJhcgorCQkJZmlyc3Rfc3RlcD0tMTAwCisJCQlwcm9ncmVzc19zaXplPTEwMAorCQkJc3RlcF9jaGFuZ2U9MQorCQkJOzsKKwkgICAgICAgIFMpCisJCQkjIEJlZ2luIHdoZXJlIHRoZSBpbml0cmFtZnMgbGVmdCBvZmYgYW5kIHVzZSAyLzMKKwkJCSMgb2YgdGhlIHJlbWFpbmluZyBzcGFjZQorCQkJZmlyc3Rfc3RlcD0kUFJPR1JFU1NfU1RBVEUKKwkJCXByb2dyZXNzX3NpemU9JCgoJHByb2dyZXNzX3NpemUgKiAyKSkKKwkJCXN0ZXBfY2hhbmdlPTEKKwkJCTs7CisJCSopCisJCQkjIEJlZ2luIHdoZXJlIHJjUyBsZWZ0IG9mZiBhbmQgdXNlIHRoZSBmaW5hbCAxLzMgb2YKKwkJCSMgdGhlIHNwYWNlIChieSBsZWF2aW5nIHByb2dyZXNzX3NpemUgdW5jaGFuZ2VkKQorCQkJZmlyc3Rfc3RlcD0kKCgkcHJvZ3Jlc3Nfc2l6ZSAqIDIgKyAkUFJPR1JFU1NfU1RBVEUpKQorCQkJc3RlcF9jaGFuZ2U9MQorCQkJOzsKKwllc2FjCisKKwludW1fc3RlcHM9MAorCWZvciBzIGluIC9ldGMvcmMkcnVubGV2ZWwuZC9bU0tdKjsgZG8KKyAgICAgICAgICAgIGNhc2UgIiR7cyMjL2V0Yy9yYyRydW5sZXZlbC5kL1M/P30iIGluCisgICAgICAgICAgICAgICAgZ2RtfHhkbXxrZG18cmVib290fGhhbHQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBudW1fc3RlcHM9JCgoJG51bV9zdGVwcyArIDEpKQorICAgICAgICBkb25lCisgICAgICAgIHN0ZXA9MAorCisJIyBGaXJzdCwgcnVuIHRoZSBLSUxMIHNjcmlwdHMuCisJaWYgWyAkcHJldmlvdXMgIT0gTiBdCisJdGhlbgorCQlmb3IgaSBpbiAvZXRjL3JjJHJ1bmxldmVsLmQvS1swLTldWzAtOV0qCisJCWRvCisJCQkjIENoZWNrIGlmIHRoZSBzY3JpcHQgaXMgdGhlcmUuCisJCQlbICEgLWYgJGkgXSAmJiBjb250aW51ZQorCisJCQkjIFN0b3AgdGhlIHNlcnZpY2UuCisJCQlzdGFydHVwICRpIHN0b3AKKwkJZG9uZQorCWZpCisKKwkjIE5vdyBydW4gdGhlIFNUQVJUIHNjcmlwdHMgZm9yIHRoaXMgcnVubGV2ZWwuCisJZm9yIGkgaW4gL2V0Yy9yYyRydW5sZXZlbC5kL1MqCisJZG8KKwkJWyAhIC1mICRpIF0gJiYgY29udGludWUKKworCQlpZiBbICRwcmV2aW91cyAhPSBOIF0gJiYgWyAkcHJldmlvdXMgIT0gUyBdCisJCXRoZW4KKwkJCSMKKwkJCSMgRmluZCBzdGFydCBzY3JpcHQgaW4gcHJldmlvdXMgcnVubGV2ZWwgYW5kCisJCQkjIHN0b3Agc2NyaXB0IGluIHRoaXMgcnVubGV2ZWwuCisJCQkjCisJCQlzdWZmaXg9JHtpIy9ldGMvcmMkcnVubGV2ZWwuZC9TWzAtOV1bMC05XX0KKwkJCXN0b3A9L2V0Yy9yYyRydW5sZXZlbC5kL0tbMC05XVswLTldJHN1ZmZpeAorCQkJcHJldmlvdXNfc3RhcnQ9L2V0Yy9yYyRwcmV2aW91cy5kL1NbMC05XVswLTldJHN1ZmZpeAorCQkJIworCQkJIyBJZiB0aGVyZSBpcyBhIHN0YXJ0IHNjcmlwdCBpbiB0aGUgcHJldmlvdXMgbGV2ZWwKKwkJCSMgYW5kIF9ub18gc3RvcCBzY3JpcHQgaW4gdGhpcyBsZXZlbCwgd2UgZG9uJ3QKKwkJCSMgaGF2ZSB0byByZS1zdGFydCB0aGUgc2VydmljZS4KKwkJCSMKKwkJCVsgLWYgJHByZXZpb3VzX3N0YXJ0IF0gJiYgWyAhIC1mICRzdG9wIF0gJiYgY29udGludWUKKwkJZmkKKwkJY2FzZSAiJHJ1bmxldmVsIiBpbgorCQkJMHw2KQorCQkJCXN0YXJ0dXAgJGkgc3RvcAorCQkJCTs7CisJCQkqKQorCQkJCXN0YXJ0dXAgJGkgc3RhcnQKKwkJCQk7OworCQllc2FjCisJZG9uZQorICBmaQorCisjVW5jb21tZW50IHRvIGNhdXNlIHBzcGxhc2ggdG8gZXhpdCBtYW51YWxseSwgb3RoZXJ3aXNlIGl0IGV4aXRzIHdoZW4gaXQgc2VlcyBhIFZDIHN3aXRjaAoraWYgWyAieCRydW5sZXZlbCIgIT0gInhTIiBdICYmIFsgISAteCAvZXRjL3JjJHtydW5sZXZlbH0uZC9TPz94c2VydmVyLW5vZG0gXTsgdGhlbgorICAgIGlmIHR5cGUgcHNwbGFzaC13cml0ZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgVE1QRElSPS9tbnQvLnBzcGxhc2ggcHNwbGFzaC13cml0ZSAiUVVJVCIgfHwgdHJ1ZQorICAgIAl1bW91bnQgLWwgL21udC8ucHNwbGFzaAorICAgIGZpCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4MGIwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIHJjUwkJQ2FsbCBhbGwgUz8/KiBzY3JpcHRzIGluIC9ldGMvcmNTLmQgaW4KKyMJCW51bWVyaWNhbC9hbHBoYWJldGljYWwgb3JkZXIuCisjCisjIFZlcnNpb246CUAoIykvZXRjL2luaXQuZC9yY1MgIDIuNzYgIDE5LUFwci0xOTk5ICBtaXF1ZWxzQGNpc3Ryb24ubmwKKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorcnVubGV2ZWw9UworcHJldmxldmVsPU4KK3VtYXNrIDAyMgorZXhwb3J0IFBBVEggcnVubGV2ZWwgcHJldmxldmVsCisKKyMJTWFrZSBzdXJlIHByb2MgaXMgbW91bnRlZAorIworWyAtZCAiL3Byb2MvMSIgXSB8fCBtb3VudCAvcHJvYworCisjCisjCVNvdXJjZSBkZWZhdWx0cy4KKyMKKy4gL2V0Yy9kZWZhdWx0L3JjUworCisjCisjCVRyYXAgQ1RSTC1DICZjIG9ubHkgaW4gdGhpcyBzaGVsbCBzbyB3ZSBjYW4gaW50ZXJydXB0IHN1YnByb2Nlc3Nlcy4KKyMKK3RyYXAgIjoiIElOVCBRVUlUIFRTVFAKKworIworIwlDYWxsIGFsbCBwYXJ0cyBpbiBvcmRlci4KKyMKK2V4ZWMgL2V0Yy9pbml0LmQvcmMgUworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5Y2RmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0CkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMJRGVmYXVsdHMgZm9yIHRoZSBib290IHNjcmlwdHMgaW4gL2V0Yy9yY1MuZAorIworCisjIFRpbWUgZmlsZXMgaW4gL3RtcCBhcmUga2VwdCBpbiBkYXlzLgorVE1QVElNRT0wCisjIFNldCB0byB5ZXMgaWYgeW91IHdhbnQgc3Vsb2dpbiB0byBiZSBzcGF3bmVkIG9uIGJvb3R1cAorU1VMT0dJTj1ubworIyBTZXQgdG8gbm8gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBsb2dpbiBvdmVyIHRlbG5ldC9ybG9naW4KKyMgYmVmb3JlIHN5c3RlbSBzdGFydHVwIGlzIGNvbXBsZXRlIChhcyBzb29uIGFzIGluZXRkIGlzIHN0YXJ0ZWQpCitERUxBWUxPR0lOPW5vCisjIEFzc3VtZSB0aGF0IHRoZSBCSU9TIGNsb2NrIGlzIHNldCB0byBVVEMgdGltZSAocmVjb21tZW5kZWQpCitVVEM9eWVzCisjIFNldCBWRVJCT1NFIHRvICJubyIgaWYgeW91IHdvdWxkIGxpa2UgYSBtb3JlIHF1aWV0IGJvb3R1cC4KK1ZFUkJPU0U9bm8KKyMgU2V0IEVESVRNT1REIHRvICJubyIgaWYgeW91IGRvbid0IHdhbnQgL2V0Yy9tb3RkIHRvIGJlIGVkaXRlZCBhdXRvbWF0aWNhbGx5CitFRElUTU9URD1ubworIyBXaGV0aGVyIHRvIGZzY2sgcm9vdCBvbiBib290CitFTkFCTEVfUk9PVEZTX0ZTQ0s9bm8KKyMgU2V0IEZTQ0tGSVggdG8gInllcyIgaWYgeW91IHdhbnQgdG8gYWRkICIteSIgdG8gdGhlIGZzY2sgYXQgc3RhcnR1cC4KK0ZTQ0tGSVg9eWVzCisjIFNldCBUSUNLQURKIHRvIHRoZSBjb3JyZWN0IHRpY2sgdmFsdWUgZm9yIHRoaXMgc3BlY2lmaWMgbWFjaGluZQorI1RJQ0tBREo9MTAwMDAKKyMgRW5hYmxlIGNhY2hpbmcgaW4gcG9wdWxhdGUtdm9sYXRpbGUuc2gKK1ZPTEFUSUxFX0VOQUJMRV9DQUNIRT15ZXMKKyMgSW5kaWNhdGUgd2hldGhlciB0aGUgcm9vdGZzIGlzIGludGVuZGVkIHRvIGJlIHJlYWQtb25seSBvciBub3QuCisjIFNldHRpbmcgUk9PVEZTX1JFQURfT05MWSB0byB5ZXMgYW5kIHJlYm9vdGluZyB3aWxsIGdpdmUgeW91IGEgcmVhZC1vbmx5IHJvb3Rmcy4KKyMgTm9ybWFsbHkgeW91IHNob3VsZCBub3QgY2hhbmdlIHRoaXMgdmFsdWUuCitST09URlNfUkVBRF9PTkxZPW5vCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXRfMi44OGRzZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZlMzllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXRfMi44OGRzZi5iYgpAQCAtMCwwICsxLDEwOCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0tViBsaWtlIGluaXQiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gYm9vdCBpbiBtb3N0IGNvbmZpZ3VyYXRpb25zLiAgSXQgcHJvdmlkZXMgdGhlIC9zYmluL2luaXQgcHJvZ3JhbS4gIFRoaXMgaXMgdGhlIGZpcnN0IHByb2Nlc3Mgc3RhcnRlZCBvbiBib290LCBhbmQgdGhlIGxhc3QgcHJvY2VzcyB0ZXJtaW5hdGVkIGJlZm9yZSB0aGUgc3lzdGVtIGhhbHRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3N5c3Zpbml0LyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWVJJR0hUO2VuZGxpbmU9MTU7bWQ1PTM0OWM4NzJlMDA2NjE1NWUxODE4Yjc4NjkzODg3NmE0IgorUFIgPSAicjE0IgorCitSREVQRU5EU18ke1BOfSA9ICIke1BOfS1pbml0dGFiIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vc3lzdmluaXQvc3lzdmluaXQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyeXB0LWxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JjUy1kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL3JjIFwKKyAgICAgICAgICAgZmlsZTovL3JjUyBcCisgICAgICAgICAgIGZpbGU6Ly9ib290bG9nZC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovLzAxX2Jvb3Rsb2dkIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZlZGE4YTk3Yjg2ZTBhNmY1OWRhYmJmMjUyMDJhYTZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwYmJjOGMxZTE3OTIwNTZlMjM3NjFkMjI5NjBiMzBiYjEzZWNjYzJjYWJmZjhjNzMxMGEwMWY0ZDVkZjE1MTkiCisKK1MgPSAiJHtXT1JLRElSfS9zeXN2aW5pdC0ke1BWfSIKK0IgPSAiJHtTfS9zcmMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworREVQRU5EU19hcHBlbmQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSBiYXNlLXBhc3N3ZCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBtb3VudHBvaW50IGhhbHQgcmVib290IHJ1bmxldmVsIHNodXRkb3duIHBvd2Vyb2ZmIGxhc3QgbGFzdGIgbWVzZyB1dG1wZHVtcCB3YWxsIgorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMDAiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID0gIjUwIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludF0gPSAiJHtiYXNlX2JpbmRpcn0vbW91bnRwb2ludCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoYWx0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaGFsdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWJvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9yZWJvb3QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCisKK0FMVEVSTkFUSVZFXyR7UE59LXBpZG9mID0gInBpZG9mIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BpZG9mXSA9ICIke2Jhc2VfYmluZGlyfS9waWRvZiIKKworQUxURVJOQVRJVkVfJHtQTn0tc3Vsb2dpbiA9ICJzdWxvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW5dID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAibW91bnRwb2ludC4xIGxhc3QuMSBtZXNnLjEgd2FsbC4xIHN1bG9naW4uOCB1dG1wZHVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGFzdC4xXSA9ICIke21hbmRpcn0vbWFuMS9sYXN0LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWVzZy4xXSA9ICIke21hbmRpcn0vbWFuMS9tZXNnLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludC4xXSA9ICIke21hbmRpcn0vbWFuMS9tb3VudHBvaW50LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3Vsb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9zdWxvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXRtcGR1bXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXRtcGR1bXAuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt3YWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL3dhbGwuMSIKKworUEFDS0FHRVMgPSsgInN5c3Zpbml0LXBpZG9mIHN5c3Zpbml0LXN1bG9naW4iCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX3NiaW5kaXJ9LyogJHtiYXNlX2JpbmRpcn0vKiIKK0ZJTEVTX3N5c3Zpbml0LXBpZG9mID0gIiR7YmFzZV9iaW5kaXJ9L3BpZG9mLnN5c3Zpbml0ICR7YmFzZV9zYmluZGlyfS9raWxsYWxsNSIKK0ZJTEVTX3N5c3Zpbml0LXN1bG9naW4gPSAiJHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4uc3lzdmluaXQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJzeXN2aW5pdC1waWRvZiBpbml0c2NyaXB0cy1mdW5jdGlvbnMiCisKK0NGTEFHU19wcmVwZW5kID0gIi1EX0dOVV9TT1VSQ0UgIgorZXhwb3J0IExDUllQVCA9ICItbGNyeXB0IgorRVhUUkFfT0VNQUtFICs9ICInYmFzZV9iaW5kaXI9JHtiYXNlX2JpbmRpcn0nIFwKKwkJICdiYXNlX3NiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9JyBcCisJCSAnYmluZGlyPSR7YmluZGlyfScgXAorCQkgJ3NiaW5kaXI9JHtzYmluZGlyfScgXAorCQkgJ3N5c2NvbmZkaXI9JHtzeXNjb25mZGlyfScgXAorCQkgJ2luY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfScgXAorCQkgJ21hbmRpcj0ke21hbmRpcn0nIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdST09UPSR7RH0nIGluc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0gXAorCQkgICAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0IFwKKwkJICAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJZm9yIGxldmVsIGluIFMgMCAxIDIgMyA0IDUgNjsgZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYyRsZXZlbC5kCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNjQ0ICAgICR7V09SS0RJUn0vcmNTLWRlZmF1bHQJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9yY1MKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yYwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmNTCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ib290bG9nZC5pbml0ICAgICAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYm9vdGxvZ2QKKwlsbiAtc2YgYm9vdGxvZ2QgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N0b3AtYm9vdGxvZ2QKKworCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdGxvZ2Qgc3RhcnQgMDcgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzdG9wLWJvb3Rsb2dkIHN0YXJ0IDk5IDIgMyA0IDUgLgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzAxX2Jvb3Rsb2dkICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisKKwljaG93biByb290LnNodXRkb3duICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaGFsdCAke0R9JHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duCisJY2htb2Qgby14LHUrcyAke0R9JHtiYXNlX3NiaW5kaXJ9L2hhbHQgJHtEfSR7YmFzZV9zYmluZGlyfS9zaHV0ZG93bgorfQorCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3Zpbml0JyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCkBAIC0wLDAgKzEsNDc0IEBACithNjRsCithYnMKK2FjY2VzcworX19hZGp0aW1leAorYWxhcm0KK2FscGhhc29ydAorYXJnel9hcHBlbmQKK19fYXJnel9jb3VudAorYXJnel9jcmVhdGVfc2VwCithcmd6X2luc2VydAorX19hcmd6X25leHQKK2FyZ3pfbmV4dAorX19hcmd6X3N0cmluZ2lmeQorYXJnel9zdHJpbmdpZnkKK2FzcHJpbnRmCithdGV4aXQKK2F0b2YKK2F0b2kKK2JjbXAKK2Jjb3B5CitiaW5kcmVzdnBvcnQKK2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CitidG93YworYnplcm8KK2NhbGxvYworY2Fub25pY2FsaXplX2ZpbGVfbmFtZQorY2F0Z2V0cworY2ZnZXRvc3BlZWQKK2Nmc2V0aXNwZWVkCitjZnNldHNwZWVkCitjaG1vZAorY2hvd24KK2Nocm9vdAorY2xvY2sKK2Nsb3NlCitjbG9zZWRpcgorY2xvc2Vsb2cKK2NvbmZzdHIKK2Nvbm5lY3QKK2RhZW1vbgorZGNnZXR0ZXh0CitkaWZmdGltZQorZGlyZmQKK2Rpcm5hbWUKK2RuZ2V0dGV4dAorZHVwMgorZWN2dAorZW5kZ3JlbnQKK2VuZG1udGVudAorZW5kcHdlbnQKK2VuZHV0ZW50CitlbmR1dHhlbnQKK2Vwb2xsX2N0bAorZXJyCitldGhlcl9ob3N0dG9uCitldGhlcl9udG9ob3N0CitldWlkYWNjZXNzCitleGVjdgorZmNoZGlyCitmY2htb2QKK2ZjaG1vZGF0CitmY2hvd24KK2ZjaG93bmF0CitmY250bAorZmN2dAorZmRhdGFzeW5jCitmZG9wZW5kaXIKK2Zlb2ZfdW5sb2NrZWQKK2ZnZXRzX3VubG9ja2VkCitmZ2V0eGF0dHIKK2Zpbml0ZQorZmxpc3R4YXR0cgorZmxvY2sKK2Zsb2NrZmlsZQorZm5tYXRjaAorZm9yaworZnBhdGhjb25mCitfX2ZwZW5kaW5nCitmcHJpbnRmCitmcmVlCitmcmVlYWRkcmluZm8KK2ZyZWVpZmFkZHJzCitmc2Vla28KK19fZnNldGxvY2tpbmcKK2ZzZXR4YXR0cgorZnN0YXQ2NAorZnN0YXQKK2ZzdGF0ZnMKK2ZzeW5jCitmdGVsbG8KK2Z0aW1lCitmdHJ1bmNhdGUKK2Z1bmxvY2tmaWxlCitmdXRpbWVzCitmdXRpbWVzYXQKK2dhaV9zdHJlcnJvcgorZ2N2dAorZ2V0YWRkcmluZm8KK2dldGNfdW5sb2NrZWQKK2dldGN3ZAorZ2V0ZGVsaW0KK2dldGRvbWFpbm5hbWUKK2dldGR0YWJsZXNpemUKK2dldGVnaWQKK2dldGVudgorZ2V0ZXVpZAorZ2V0Z2lkCitnZXRncmVudAorZ2V0Z3JlbnRfcgorZ2V0Z3JnaWRfcgorZ2V0Z3JuYW0KK2dldGdybmFtX3IKK2dldGdyb3VwbGlzdAorZ2V0Z3JvdXBzCitnZXRob3N0YnlhZGRyX3IKK2dldGhvc3RieW5hbWUyCitnZXRob3N0YnluYW1lCitnZXRob3N0YnluYW1lX3IKK2dldGhvc3RlbnQKK2dldGhvc3RpZAorZ2V0aG9zdG5hbWUKK2dldGlmYWRkcnMKK2dldGxpbmUKK2dldGxvYWRhdmcKK2dldG1udGVudAorZ2V0bXNnCitnZXRuYW1laW5mbworZ2V0bmV0YnlhZGRyX3IKK2dldG5ldGdyZW50X3IKK2dldG9wdAorZ2V0b3B0X2xvbmcKK2dldG9wdF9sb25nX29ubHkKK2dldHBhZ2VzaXplCitnZXRwYXNzCitnZXRwZWVybmFtZQorZ2V0cGdycAorZ2V0cGlkCitnZXRwcGlkCitnZXRwcm90b2VudF9yCitnZXRwd2VudAorZ2V0cHdlbnRfcgorZ2V0cHduYW0KK2dldHB3bmFtX3IKK2dldHB3dWlkCitnZXRwd3VpZF9yCitnZXRyZXN1aWQKK2dldHJsaW1pdAorZ2V0cnVzYWdlCitnZXRzZXJ2YnluYW1lCitnZXRzZXJ2YnluYW1lX3IKK2dldHNlcnZieXBvcnRfcgorZ2V0c2VydmVudAorZ2V0c2VydmVudF9yCitnZXRzcG5hbQorZ2V0c3BuYW1fcgorZ2V0dGltZW9mZGF5CitnZXR0dHllbnQKK2dldHR0eW5hbQorZ2V0dWlkCitnZXR1c2Vyc2hlbGwKK2dldHV0ZW50CitnZXR1dGlkCitnZXR1dGxpbmUKK2dldHV0bXAKK2dldHV0bXB4CitnZXR1dHhlbnQKK2dldHV0eGlkCitnZXR1dHhsaW5lCitnZXR3ZAorZ2V0eGF0dHIKK2dsb2IKK2dtdGltZQorZ210aW1lX3IKK2dyYW50cHQKK2dyb3VwX21lbWJlcgoraGVycm9yCitoc3RyZXJyb3IKK2ljb252CitpY29udl9vcGVuCitpZl9mcmVlbmFtZWluZGV4CitpZl9pbmRleHRvbmFtZQoraWZfbmFtZWluZGV4CitpZl9uYW1ldG9pbmRleAoraW5kZXgKK2luZXRfYWRkcgoraW5ldF9hdG9uCitpbmV0X250b2EKK2luZXRfbnRvcAoraW5ldF9wdG9uCitpbml0Z3JvdXBzCitpbm5ldGdyCitpcnVzZXJvaworaXNhc2NpaQoraXNhdHR5Citpc2JsYW5rCitpc2dyYXBoCitpc2luZgoraXNuYW4KK2lzcHJpbnQKK2lzc3BhY2UKK2lzd2FsbnVtCitpc3djbnRybAoraXN3Y3R5cGUKK2lzd3ByaW50Citpc3dzcGFjZQoraXN3dXBwZXIKK2lzeGRpZ2l0CitraWxsCitraWxscGcKK2xjaG93bgorbGNrcHdkZgorbGdldHhhdHRyCitsaW5rCitsaXN0eGF0dHIKK2xsaXN0eGF0dHIKK2xvY2FsdGltZQorbG9jYWx0aW1lX3IKK2xvY2tmCitscmFuZDQ4Citsc2VhcmNoCitsc2VlazY0Citsc2V0eGF0dHIKK2xzdGF0CittYWxsaW5mbworbWFsbG9jCittYmxlbgorbWJybGVuCittYnJ0b3djCittYnNpbml0CittYnNydG93Y3MKK21idG93YworbWVtYWxpZ24KK21lbWNocgorbWVtY21wCittZW1jcHkKK21lbW1vdmUKK21lbXBjcHkKK21lbXJjaHIKK21lbXNldAorbWtkaXIKK21rZGlyYXQKK21rZHRlbXAKK21rZmlmbworbWtub2QKK21rc3RlbXA2NAorbWtzdGVtcAorbWt0aW1lCittbG9jaworbW1hcAorbXRyYWNlCittdW5sb2NrCittdW5tYXAKK25hbm9zbGVlcAorbmljZQorbmxfbGFuZ2luZm8KK250cF9hZGp0aW1lCitudHBfZ2V0dGltZQorX29ic3RhY2tfZnJlZQorb25fZXhpdAorb3BlbjY0CitvcGVuCitvcGVuYXQKK29wZW5kaXIKK29wZW5sb2cKK3BhdGhjb25mCitwaXBlCitwb2xsCitwb3BlbgorcG9zaXhfbWVtYWxpZ24KK3ByY3RsCitwcmVhZAorcHJpbnRmCitfX3Byb2duYW1lCitwc2VsZWN0CitwdGhyZWFkX211dGV4X2xvY2sKK3B0c25hbWUKK3B1dGVudgorcHV0Z3JlbnQKK3B1dHB3ZW50CitwdXRzcGVudAorcHV0dXRsaW5lCitwdXR1dHhsaW5lCitwdXR3YworcHdyaXRlCitxc29ydAorcmFpc2UKK3JhbmQKK3JhbmRvbQorcmFuZF9yCityZWFkCityZWFkZGlyCityZWFkZGlyX3IKK3JlYWRsaW5rCityZWFsbG9jCityZWFscGF0aAorcmVfY29tcAorcmVjdm1zZworcmVfZXhlYworcmVnY29tcAorcmVnZXhlYworcmVtb3ZlCityZW5hbWUKK3JlX3NlYXJjaAorcm1kaXIKK3JwbWF0Y2gKK3JyZXN2cG9ydF9hZgorcnVzZXJvaworcnVzZXJva19hZgorc2Jyaworc2NhbmRpcgorc2NoZWRfc2V0c2NoZWR1bGVyCitzY2hlZF95aWVsZAorX19zZWN1cmVfZ2V0ZW52CitzZWxlY3QKK3NlbWN0bAorc2VtZ2V0CitzZW5kbXNnCitzZXRidWYKK3NldGJ1ZmZlcgorc2V0ZWdpZAorc2V0ZW52CitzZXRldWlkCitzZXRnaWQKK3NldGdyb3Vwcworc2V0aG9zdG5hbWUKK3NldGl0aW1lcgorX3NldGptcAorc2V0am1wCitzZXRsaW5lYnVmCitzZXRsb2NhbGUKK3NldG1udGVudAorc2V0cGdpZAorc2V0cGdycAorc2V0cHJpb3JpdHkKK3NldHJlZ2lkCitzZXRyZXNnaWQKK3NldHJlc3VpZAorc2V0cmV1aWQKK3NldHJsaW1pdAorc2V0c2lkCitzZXRzb2Nrb3B0CitzZXR0aW1lb2ZkYXkKK3NldHVpZAorc2V0dXRlbnQKK3NldHV0eGVudAorc2V0dmJ1Zgorc2V0eGF0dHIKK3NnZXRzcGVudAorc2htYXQKK3NobWN0bAorc2htZHQKK3NobWdldAorc2h1dGRvd24KK3NpZ2FjdGlvbgorc2lnYWRkc2V0CitzaWdhbHRzdGFjaworc2lnYmxvY2sKK3NpZ2VtcHR5c2V0CitzaWdob2xkCitzaWdpbnRlcnJ1cHQKK3NpZ25hbAorc2lncHJvY21hc2sKK3NpZ3NldAorc2lnc2V0bWFzaworc2lnc3RhY2sKK3NpZ3N1c3BlbmQKK3NpZ3ZlYworc25wcmludGYKK3NvY2tldAorc29ja2V0cGFpcgorc3ByaW50Zgorc3JhbmQ0OAorc3JhbmQKK3NyYW5kb20KK3NzY2FuZgorc3RhdAorc3RhdGZzCitzdGF0dmZzCitzdGltZQorc3RwY3B5CitzdHJjYXNlY21wCitzdHJjYXNlc3RyCitzdHJjaHIKK3N0cmNocm51bAorc3RyY21wCitzdHJjc3BuCitzdHJkdXAKK3N0cmVycm9yCitzdHJlcnJvcl9yCitzdHJmdGltZQorc3RybGVuCitzdHJuY2FzZWNtcAorc3RybmNtcAorc3RybmR1cAorc3Rybmxlbgorc3RycGJyaworc3RycHRpbWUKK3N0cnJjaHIKK3N0cnNlcAorc3Ryc2lnbmFsCitzdHJzcG4KK3N0cnN0cgorc3RydG9kCitzdHJ0b2ltYXgKK3N0cnRva19yCitzdHJ0b2wKK3N0cnRvbGwKK3N0cnRvdWwKK3N0cnRvdWxsCitzdHJ0b3VtYXgKK3N0cnZlcnNjbXAKK3N0cnhmcm0KK3N5bWxpbmsKK3N5bmMKK3N5c2NvbmYKK3N5c2N0bAorc3lzaW5mbworc3lzbG9nCitfc3lzX3NpZ2xpc3QKK3N5c19zaWdsaXN0CitzeXN0ZW0KK3RjZ2V0YXR0cgordGNnZXRwZ3JwCit0Y3NldGF0dHIKK3Rjc2V0cGdycAordGltZQordGltZWdtCit0aW1lcwordGltZXpvbmUKK3RtcG5hbQordG93bG93ZXIKK3Rvd3VwcGVyCit0cnVuY2F0ZQordHNlYXJjaAordHR5bmFtZQordHpzZXQKK3VsaW1pdAordW1hc2sKK3VuYW1lCit1bmxpbmsKK3Vuc2V0ZW52Cit1bnNoYXJlCit1cGR3dG1wCit1cGR3dG1weAordXNsZWVwCit1c3RhdAordXRpbWUKK3V0aW1lcwordXRtcG5hbWUKK3V0bXB4bmFtZQordmFsbG9jCit2YXNwcmludGYKK3ZlcnJ4Cit2Zm9yawordmZwcmludGYKK3Zmc2NhbmYKK3ZoYW5ndXAKK3ZwcmludGYKK3ZzbnByaW50ZgordnNwcmludGYKK3dhaXQzCit3YWl0NAord2FpdHBpZAord2NydG9tYgord2NzY29sbAord2NzZHVwCit3Y3NsZW4KK3djdG9iCit3Y3RvbWIKK3djdHlwZQord2N3aWR0aAord21lbWNocgord21lbWNweQord21lbXBjcHkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5YWI1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsMTU2IEBACithaW8uaAorYWxsb2NhLmgKK2FyZ3ouaAorYXJwYS9pbmV0LmgKK2FycGEvbmFtZXNlci5oCithc20vYnl0ZW9yZGVyLmgKK2FzbS9pb2N0bHMuaAorYXNtL3BhZ2UuaAorYXNtL3R5cGVzLmgKK2Fzc2VydC5oCitieXRlc3dhcC5oCitjcnlwdC5oCitjdHlwZS5oCitkaXJlbnQuaAorZGxmY24uaAorZWxmLmgKK2VuZGlhbi5oCitlcnIuaAorZXJybm8uaAorZXhlY2luZm8uaAorZmNudGwuaAorZmVhdHVyZXMuaAorZmxvYXQuaAorZnN0YWIuaAorZnR3LmgKK2dldG9wdC5oCitnbG9iLmgKK2dycC5oCitpY29udi5oCitpZmFkZHJzLmgKK2ludHR5cGVzLmgKK2xhbmdpbmZvLmgKK2xhc3Rsb2cuaAorbGliZ2VuLmgKK2xpYmludGwuaAorbGltaXRzLmgKK2xpbnV4L2NhcGFiaWxpdHkuaAorbGludXgvZmQuaAorbGludXgvZnMuaAorbGludXgvaGF5ZXNlc3AuaAorbGludXgvaGRyZWcuaAorbGludXgvaWNtcC5oCitsaW51eC9pbjYuaAorbGludXgvam95c3RpY2suaAorbGludXgvcHRyYWNlLmgKK2xpbnV4L3NlcmlhbC5oCitsaW51eC9zb255cGkuaAorbGludXgvdW5pc3RkLmgKK2xpbnV4L3V0c25hbWUuaAorbGludXgvdmVyc2lvbi5oCitsb2NhbGUuaAorbWFsbG9jLmgKK21hdGguaAorbWNoZWNrLmgKK21lbW9yeS5oCittbnRlbnQuaAorbXF1ZXVlLmgKK25ldGRiLmgKK25ldC9pZi5oCituZXRpbmV0L2V0aGVyLmgKK25ldGluZXQvaW4uaAorbmV0aW5ldC9pcDYuaAorbmV0aW5ldC9pcC5oCituZXRpbmV0L3RjcC5oCituZXRpbmV0L3VkcC5oCituZXRpcHgvaXB4LmgKK25ldC9yb3V0ZS5oCitwYXRocy5oCitwb2xsLmgKK3B0aHJlYWQuaAorcHR5LmgKK3B3ZC5oCityZWdleC5oCityZXNvbHYuaAorcnBjL3JwYy5oCitycGMvdHlwZXMuaAorc2NoZWQuaAorc2NzaS9zY3NpLmgKK3NlYXJjaC5oCitzZW1hcGhvcmUuaAorc2V0am1wLmgKK3NndHR5LmgKK3NoYWRvdy5oCitzaWduYWwuaAorc3RkYXJnLmgKK3N0ZGJvb2wuaAorc3RkYworc3RkZGVmLmgKK3N0ZGludC5oCitzdGRpby5oCitzdGRsaWIuaAorc3RyaW5nLmgKK3N0cmluZ3MuaAorc3Ryb3B0cy5oCitzeXMvYml0eXBlcy5oCitzeXMvY2RlZnMuaAorc3lzL2Rpci5oCitzeXMvZXBvbGwuaAorc3lzZXhpdHMuaAorc3lzL2ZjbnRsLmgKK3N5cy9maWxlLmgKK3N5cy9mc3VpZC5oCitzeXMvaW9jdGwuaAorc3lzL2lwYy5oCitzeXNsb2cuaAorc3lzL21tYW4uaAorc3lzL21vdW50LmgKK3N5cy9tdGlvLmgKK3N5cy9wYXJhbS5oCitzeXMvcG9sbC5oCitzeXMvcHJjdGwuaAorc3lzL3B0cmFjZS5oCitzeXMvcXVldWUuaAorc3lzL3JlZy5oCitzeXMvcmVzb3VyY2UuaAorc3lzL3NlbGVjdC5oCitzeXMvc2VtLmgKK3N5cy9zaG0uaAorc3lzL3NpZ25hbC5oCitzeXMvc29ja2V0LmgKK3N5cy9zb2NrZXR2YXIuaAorc3lzL3NvdW5kY2FyZC5oCitzeXMvc3RhdGZzLmgKK3N5cy9zdGF0LmgKK3N5cy9zdGF0dmZzLmgKK3N5cy9zdHJvcHRzLmgKK3N5cy9zd2FwLmgKK3N5cy9zeXNjdGwuaAorc3lzL3N5c2luZm8uaAorc3lzL3N5c21hY3Jvcy5oCitzeXMvdGVybWlvcy5oCitzeXMvdGltZWIuaAorc3lzL3RpbWUuaAorc3lzL3RpbWVzLmgKK3N5cy90aW1leC5oCitzeXMvdHlwZXMuaAorc3lzL3Vpby5oCitzeXMvdW4uaAorc3lzL3VuaXN0ZC5oCitzeXMvdXNlci5oCitzeXMvdXRzbmFtZS5oCitzeXMvdmZzLmgKK3N5cy93YWl0LmgKK3Rlcm1pby5oCit0ZXJtaW9zLmgKK3RpbWUuaAordHR5ZW50LmgKK3VsaW1pdC5oCit1bmlzdGQuaAordXN0YXQuaAordXRpbWUuaAordXRtcC5oCit1dG1weC5oCit2YWx1ZXMuaAord2NoYXIuaAord2N0eXBlLmgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhiZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzCkBAIC0wLDAgKzEsMjEgQEAKK2NoYXIKK2NoYXIgKgorZG91YmxlCitmbG9hdAoraW50Citsb25nCitsb25nIGRvdWJsZQorbG9uZyBpbnQKK2xvbmcgbG9uZworbG9uZyBsb25nIGludAorc2hvcnQKK3Nob3J0IGludAorc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGludAordW5zaWduZWQgbG9uZwordW5zaWduZWQgbG9uZyBpbnQKK3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQKK3Vuc2lnbmVkIHNob3J0Cit1bnNpZ25lZCBzaG9ydCBpbnQKK3ZvaWQgKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMKQEAgLTAsMCArMSwxNDIgQEAKK0RFUEVORFMgKz0gImtlcm4tdG9vbHMtbmF0aXZlIgoraW5oZXJpdCBjbWwxCisjCisjIFNldCB0aGUgQVJDSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdUNsaWJjIGNvbXBpbGF0aW9uLgorIyBSZXR1cm4gdmFsdWUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIGFyY2hpdGVjdHVyZXMga25vd24gdG8gdUNsaWJjOgorIyBsaWJjL3N5c2RlcHMvKi8qCisjCisKK3ZhbGlkX2FyY2hzID0gIlwKK2FscGhhIFwKK2FybSBcCithdnIzMiBcCitiZmluIFwKK2M2eCBcCitjcmlzIFwKK2UxIFwKK2ZydiBcCitoODMwMCBcCitocHBhIFwKK2kzODYgXAoraTk2MCBcCitpYTY0IFwKK202OGsgXAorbWljcm9ibGF6ZSBcCittaXBzIFwKK25pb3MgXAorbmlvczIgXAorcG93ZXJwYyBcCitzaCBcCitzaDY0IFwKK3NwYXJjIFwKK3Y4NTAgXAordmF4IFwKK3g4Nl82NCBcCit4dGVuc2EgXAorIgorZGVmIG1hcF91Y2xpYmNfYXJjaChhLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBhcmNoaXRlY3R1cmUgZm9yIHRoZSBnaXZlbiBUQVJHRVRfQVJDSC4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgIHZhbGlkX2FyY2hzID0gZC5nZXRWYXIoJ3ZhbGlkX2FyY2hzJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgaWYgcmUubWF0Y2goJ14oYXJtfHNhMTEwKS4qJywgYSk6CisgICAgICAgIHJldHVybiAnYXJtJworICAgIGVsaWYgcmUubWF0Y2goJ14oaS44NnxhdGhsb24pJCcsIGEpOgorICAgICAgICByZXR1cm4gJ2kzODYnCisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKicsIGEpOgorICAgICAgICByZXR1cm4gJ21pcHMnCisgICAgZWxpZiByZS5tYXRjaCgnXnBhcmlzYy4qJywgYSk6CisgICAgICAgIHJldHVybiAnaHBwYScKKyAgICBlbGlmIHJlLm1hdGNoKCdecHBjLionLCBhKToKKyAgICAgICAgcmV0dXJuICdwb3dlcnBjJworICAgIGVsaWYgcmUubWF0Y2goJ15zMzkwLionLCBhKToKKyAgICAgICAgcmV0dXJuICdzMzkwJworICAgIGVsaWYgcmUubWF0Y2goJ15zaC4qJywgYSk6CisgICAgICAgIHJldHVybiAnc2gnCisgICAgZWxpZiByZS5tYXRjaCgnXihzdW58c3BhcmMpLionLCBhKToKKyAgICAgICAgcmV0dXJuICdzcGFyYycKKyAgICBlbGlmIHJlLm1hdGNoKCdeeHRlbnNhLionLCBhKToKKyAgICAgICAgcmV0dXJuICd4dGVuc2EnCisgICAgZWxpZiBhIGluIHZhbGlkX2FyY2hzOgorICAgICAgICByZXR1cm4gYQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJjYW5ub3QgbWFwICclcycgdG8gYSB1Q2xpYmMgYXJjaGl0ZWN0dXJlIiAlIGEpCisKK2V4cG9ydCBVQ0xJQkNfQVJDSCA9ICIke0BtYXBfdWNsaWJjX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Y2xpYmNfYWJpKG8sIGQpOgorICAgICIiIlJldHVybiB0aGUgdUNsaWJjIEFCSSBmb3IgdGhlIGdpdmVuIFRBUkdFVF9PUy4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgIGFyY2ggPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIGlmIG1hcF91Y2xpYmNfYXJjaChkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCkgPT0gImFybSI6CisgICAgICAgIGlmIHJlLm1hdGNoKCcuKmVhYmkkJywgbyk6CisgICAgICAgICAgICByZXR1cm4gJ0FSTV9FQUJJJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICdBUk1fT0FCSScKKyAgICAjIEZJWE1FOiBUaGlzIGlzIGluYWNjdXJhdGUhIEhhbmRsZSBvMzIsIG4zMiwgbjY0CisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKjY0JCcsIGFyY2gpOgorICAgICAgICByZXR1cm4gJ01JUFNfTjY0X0FCSScKKyAgICBlbGlmIHJlLm1hdGNoKCdebWlwcy4qJywgYXJjaCk6CisgICAgICAgIHJldHVybiAnTUlQU19PMzJfQUJJJworICAgIHJldHVybiAiIgorCitleHBvcnQgVUNMSUJDX0FCSSA9ICIke0BtYXBfdWNsaWJjX2FiaShkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Y2xpYmNfZW5kaWFuKGEsIGQpOgorICAgICIiIlJldHVybiB0aGUgdUNsaWJjIGVuZGlhbmVzcyBmb3IgdGhlIGdpdmVuIFRBUkdFVF9BUkNILiIiIgorICAgIGltcG9ydCByZQorCisgICAgIyBBbHdheXMgQkUKKyAgICBpZiByZS5tYXRjaCgnXihhdnIzMnxlMXxmcnZ8KHBhcmlzY3xocHBhKXxtNjhrfG1pY3JvYmxhemV8cG93ZXJwYy4qfChzcGFyY3xzdW4pLiopJCcsIGEpOgorICAgICAgICByZXR1cm4gJ0JJRycKKyAgICAjIFBvc3NpYmx5IEJFCisgICAgZWxpZiByZS5tYXRjaCgnXigoKGFybXxzYTExMCkuKmViKXxoODMwMC4qZWJ8KHBhcmlzY3xocHBhKS4qZWJ8bWlwc3xtaXBzNjR8c2guKmVifHh0ZW5zYS4qZWIpJCcsIGEpOgorICAgICAgICByZXR1cm4gJ0JJRycKKyAgICByZXR1cm4gJ0xJVFRMRScKKworZXhwb3J0IFVDTElCQ19FTkRJQU4gPSAiJHtAbWFwX3VjbGliY19lbmRpYW4oZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworIyBpbnRlcm5hbCBoZWxwZXIKK2RlZiB1Y2xpYmNfY2ZnKGZlYXR1cmUsIGZlYXR1cmVzLCB0b2tlbnMsIGNuZiwgcmVtKToKKyAgICBpZiB0eXBlKHRva2VucykgPT0gdHlwZSgiIik6CisgICAgICAgIHRva2VucyA9IFt0b2tlbnNdCisgICAgcmVtLmV4dGVuZChbJy9eWyMgXSonICsgdG9rZW4gKyAnWyA9XS9kJyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKyAgICBpZiB0eXBlKGZlYXR1cmVzKSA9PSB0eXBlKFtdKSBhbmQgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorICAgIGVsc2U6CisgICAgICAgIGNuZi5leHRlbmQoWycjICcgKyB0b2tlbiArICcgaXMgbm90IHNldCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBjb25maWcgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCk6CisgICAgY25mLCByZW0gPSAoW10sIFtdKQorICAgIGRpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgdWNsaWJjX2NmZygnaXB2NCcsICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19JUFY0JywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnaXB2NicsICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19JUFY2JywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnbGFyZ2VmaWxlJywgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19MRlMnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdubHMnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0xPQ0FMRScsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3RodW1iLWludGVyd29yaycsIGRpc3Ryb19mZWF0dXJlcywnVVNFX0JYJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygneGF0dHInLCAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19YQVRUUicsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3NzcCcsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfU1NQJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnYXJncCcsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfQVJHUCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2xpYmMtcG9zaXgtY2xhbmctd2NoYXInLCAgZGlzdHJvX2ZlYXR1cmVzLCdVQ0xJQkNfSEFTX1dDSEFSJywgY25mLCByZW0pCisgICAgcmV0dXJuICJcbiIuam9pbihjbmYpLCAiXG4iLmpvaW4ocmVtKQorIyBYLCBZID0gJHtAZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpfQorIyB1bmZvcnR1bmF0ZWx5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggYml0YmFrZSwgd29ya2Fyb3VuZDoKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfY29uZihkKToKKyAgICBjbmYsIHJlbSA9IGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKQorICAgIHJldHVybiBjbmYKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfZGVsKGQpOgorICAgIGNuZiwgcmVtID0gZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpCisgICAgcmV0dXJuIHJlbQorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKK2RlZiBmaW5kX2NmZ3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGlmIHMuZW5kc3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE1NzdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK1NSQ1JFViA9ICJjYTFjNzRkNjdkZDExNWQwNTlhODc1MTUwZTEwYjg1NjBhOWMzNWE4IgorCitQViA9ICIwLjkuMzMrZ2l0JHtTUkNQVn0iCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3VjbGliYy1naXQ6IgorCitTUkNfVVJJID0gImdpdDovL3VjbGliYy5vcmcvdUNsaWJjLmdpdDticmFuY2g9bWFzdGVyIFwKKyAgICAgICAgZmlsZTovL3VDbGliYy5tYWNoaW5lIFwKKyAgICAgICAgZmlsZTovL3VDbGliYy5kaXN0cm8gXAorICAgICAgICBmaWxlOi8vb2JzdGFjay5jZmcgXAorICAgICAgICBmaWxlOi8vbG9jYWxlLmNmZyBcCisgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoIFwKKyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDEtRGlzYWJsZS1scm91bnRfdGVzLWZ1bmN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmYxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDE0Yjg2NWIzNDM4ZDBkZjI5YjQ5NjkxNDg2NzhkOGZhODk0M2UxZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo0OTozMyAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvN10gRGlzYWJsZSBscm91bnRfdGVzKCkgZnVuY3Rpb24KKworSXRzIG5vdCB1c2VkIGFueXdheSwgYXZvaWRzIHNvbWUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L21hdGgvbGlibS10ZXN0LmluYyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCitpbmRleCBmNTBiNDhiLi42ZDcwYTk1IDEwMDY0NAorLS0tIGEvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMKKysrKyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCitAQCAtMzQ3MCw3ICszNDcwLDYgQEAgbG9nYl90ZXN0ICh2b2lkKQorIH0KKyAKKyAKKy0jaWYgMAorIHN0YXRpYyB2b2lkCisgbHJvdW5kX3Rlc3QgKHZvaWQpCisgeworQEAgLTM2MDUsNyArMzYwNCw2IEBAIGxscm91bmRfdGVzdCAodm9pZCkKKyAKKyAgIEVORCAobGxyb3VuZCk7CisgfQorLSNlbmRpZgorIAorIHN0YXRpYyB2b2lkCisgbW9kZl90ZXN0ICh2b2lkKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNzVjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaApAQCAtMCwwICsxLDEyNSBAQAorRnJvbSA1ZDM2MjA3NGU1OTc1YjE1MGEzNWJjZmE3N2VhYjFiZmE0ZTMwZGU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTA6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzddIEFkZCBpbXBsZW1lbnRhdGlvbiBmb3IgY29weXNpZ25sIGZvciBwcGMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoIHwgIDIgKy0KKyBsaWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYyAgIHwgODkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDkwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKKworZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2ggYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoCitpbmRleCA0ZmJjYjExLi43YzA5Yzg3IDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAorQEAgLTUsNyArNSw3IEBACisgIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorICMKKyAKKy1DU1JDLXkgOj0gX19zeXNjYWxsX2Vycm9yLmMgaW9jdGwuYworK0NTUkMteSA6PSBfX3N5c2NhbGxfZXJyb3IuYyBpb2N0bC5jIGNvcHlzaWdubC5jCisgCisgU1NSQy15IDo9IFwKKyAJX19sb25nam1wLlMgc2V0am1wLlMgYnNkLXNldGptcC5TIGJzZC1fc2V0am1wLlMgYnJrLlMgXAorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMDBmNjUzCistLS0gL2Rldi9udWxsCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYworQEAgLTAsMCArMSw4OSBAQAorKy8qIHNfY29weXNpZ25sLmMgLS0gbG9uZyBkb3VibGUgdmVyc2lvbiBvZiBzX2NvcHlzaWduLmMuCisrICogQ29udmVyc2lvbiB0byBsb25nIGRvdWJsZSBieSBVbHJpY2ggRHJlcHBlciwKKysgKiBDeWdudXMgU3VwcG9ydCwgZHJlcHBlckBjeWdudXMuY29tLgorKyAqLworKworKy8qCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisrICogaXMgcHJlc2VydmVkLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysvKgorKyAqIGNvcHlzaWdubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQorKyAqIGNvcHlzaWdubCh4LHkpIHJldHVybnMgYSB2YWx1ZSB3aXRoIHRoZSBtYWduaXR1ZGUgb2YgeCBhbmQKKysgKiB3aXRoIHRoZSBzaWduIGJpdCBvZiB5LgorKyAqLworKworKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2lmIF9fRkxPQVRfV09SRF9PUkRFUiA9PSBCSUdfRU5ESUFOCisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgIGxvbmcgZG91YmxlIHZhbHVlOworKyAgc3RydWN0CisrICB7CisrICAgIGludCBzaWduX2V4cG9uZW50OjE2OworKyAgICB1bnNpZ25lZCBpbnQgZW1wdHk6MTY7CisrICAgIHVpbnQzMl90IG1zdzsKKysgICAgdWludDMyX3QgbHN3OworKyAgfSBwYXJ0czsKKyt9IGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZTsKKysKKysjZW5kaWYKKysKKysjaWYgX19GTE9BVF9XT1JEX09SREVSID09IExJVFRMRV9FTkRJQU4KKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgbG9uZyBkb3VibGUgdmFsdWU7CisrICBzdHJ1Y3QKKysgIHsKKysgICAgdWludDMyX3QgbHN3OworKyAgICB1aW50MzJfdCBtc3c7CisrICAgIGludCBzaWduX2V4cG9uZW50OjE2OworKyAgICB1bnNpZ25lZCBpbnQgZW1wdHk6MTY7CisrICB9IHBhcnRzOworK30gaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlOworKworKyNlbmRpZgorKworKy8qIEdldCBpbnQgZnJvbSB0aGUgZXhwb25lbnQgb2YgYSBsb25nIGRvdWJsZS4gICovCisrCisrI2RlZmluZSBHRVRfTERPVUJMRV9FWFAoZXhwLGQpCQkJCQlcCisrZG8gewkJCQkJCQkJXAorKyAgaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlIGdlX3U7CQkJCVwKKysgIGdlX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorKyAgKGV4cCkgPSBnZV91LnBhcnRzLnNpZ25fZXhwb25lbnQ7CQkJCVwKKyt9IHdoaWxlICgwKQorKworKy8qIFNldCBleHBvbmVudCBvZiBhIGxvbmcgZG91YmxlIGZyb20gYW4gaW50LiAgKi8KKysKKysjZGVmaW5lIFNFVF9MRE9VQkxFX0VYUChkLGV4cCkJCQkJCVwKKytkbyB7CQkJCQkJCQlcCisrICBpZWVlX2xvbmdfZG91YmxlX3NoYXBlX3R5cGUgc2VfdTsJCQkJXAorKyAgc2VfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisrICBzZV91LnBhcnRzLnNpZ25fZXhwb25lbnQgPSAoZXhwKTsJCQkJXAorKyAgKGQpID0gc2VfdS52YWx1ZTsJCQkJCQlcCisrfSB3aGlsZSAoMCkKKysKKytsb25nIGRvdWJsZSBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSk7CisrbGliY19oaWRkZW5fcHJvdG8oY29weXNpZ25sKTsKKysKKytsb25nIGRvdWJsZSBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKKyt7CisrCXVpbnQzMl90IGVzMSxlczI7CisrCUdFVF9MRE9VQkxFX0VYUChlczEseCk7CisrCUdFVF9MRE9VQkxFX0VYUChlczIseSk7CisrCVNFVF9MRE9VQkxFX0VYUCh4LChlczEmMHg3ZmZmKXwoZXMyJjB4ODAwMCkpOworKyAgICAgICAgcmV0dXJuIHg7CisrfQorKworK2xpYmNfaGlkZGVuX2RlZihjb3B5c2lnbmwpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTk0NDgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDU4MTEgQEAKK0Zyb20gZWFhZTgxNmZiMjI5Mjk0NjlhYTRjYzM0MDJiOTFiNTEyZmM2OTU0OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm9Ac3QuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1MzozNyAtMDcwMAorU3ViamVjdDogW1BBVENIIDMvN10gQWRkIGFyZ3AgaW1wbGVtZW50YXRpb24KKworQXJncCBpcyBhbiBhZHZhbmNlZCBzdXBwb3J0IGZvciBwYXJzaW5nIHVuaXgtc3R5bGUgYXJndW1lbnQgdmVjdG9ycy4KK0luIGFkZGl0aW9uIHRvIHRoZSBjb21tb24gZ2V0b3B0IGludGVyZmFjZSwgaXQgcHJvdmlkZXMgYXV0b21hdGljCityZXNwb25zZQordG8gYC0taGVscCcgYW5kIGAtLXZlcnNpb24nIG9wdGlvbnMgYW5kIHVzZSBvZiBjdXN0b20gcGFyc2VyIGluCitjb25qdW5jdGlvbgord2l0aCBhcmdwIG5hdGl2ZSBvcHRpb24gcGFyc2VyLCBhbW9uZyBvdGhlcnMuCitBcmdwIHN1cHBvcnQgaXMgcmVxdWlyZWQgYnkgZWxmdXRpbHMgcGFja2FnZSBhbmQgcHJlbGluay4KKworSW4gdUNsaWJjIGFyZ3AgZnVuY3Rpb25hbGl0aWVzIGhhcyBiZWVuIG1vdmVkIGZyb20gQyBsaWJyYXJ5IHRvCitsaWJ1YXJncC5zbworRnVydGhlciB0aGUgbGliYy5zbyBsaW5rZXIgc2NyaXB0IGNvbnRhaW5zIGFuIEFTX05FRURFRCBlbnRyeSBzbyB0aGF0CitpdCBkb2Vzbid0IG5lZWQgdG8gbGluayBsaWJ1YXJncC5zbyBleHBsaWNpdGVseS4KKworU2lnbmVkLW9mZi1ieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNyb0BzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vQHN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IENhcm1lbG8gQW1vcm9zbyA8Y2FybWVsby5hbW9yb3NvQHN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKworIE1ha2VydWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCisgUnVsZXMubWFrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIGV4dHJhL0NvbmZpZ3MvQ29uZmlnLmluICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKKyBpbmNsdWRlL2FyZ3AuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU2NiArKysrKysrKworIGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmggfCAgMTM2ICsrCisgbGliYy91bmlzdGQvZ2V0b3B0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKy0KKyBsaWJ1YXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArCisgbGlidWFyZ3AvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzMgKysKKyBsaWJ1YXJncC9hcmdwLWJhLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgbGlidWFyZ3AvYXJncC1lZXhzdC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKworIGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMgICAgICAgICAgICAgICAgICAgfCAgNDM5ICsrKysrKysKKyBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oICAgICAgICAgICAgICAgICAgIHwgIDMxNCArKysrKworIGxpYnVhcmdwL2FyZ3AtZnMteGlubC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsKKyBsaWJ1YXJncC9hcmdwLWhlbHAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTg4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWJ1YXJncC9hcmdwLXBhcnNlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDk0OSArKysrKysrKysrKysrKworIGxpYnVhcmdwL2FyZ3AtcHYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI1ICsKKyBsaWJ1YXJncC9hcmdwLXB2aC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArCisgbGlidWFyZ3AvYXJncC14aW5sLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKworIHRlc3QvYXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyB0ZXN0L2FyZ3AvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArCisgdGVzdC9hcmdwL2FyZ3AtZXgxLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKworIHRlc3QvYXJncC9hcmdwLWV4Mi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ1ICsKKyB0ZXN0L2FyZ3AvYXJncC1leDMuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1MyArKysKKyB0ZXN0L2FyZ3AvYXJncC1leDQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2NyArKysKKyB0ZXN0L2FyZ3AvYXJncC10ZXN0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwOSArKysKKyB0ZXN0L2FyZ3AvYnVnLWFyZ3AxLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgdGVzdC9hcmdwL3RzdC1hcmdwMS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxMTggKysKKyB0ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwMSArKworIDI5IGZpbGVzIGNoYW5nZWQsIDU0ODEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9hcmdwLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9NYWtlZmlsZS5pbgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWJhLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1lZXhzdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWZzLXhpbmwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWhlbHAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLXBhcnNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1wdi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtcHZoLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC14aW5sLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9NYWtlZmlsZS5pbgorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDIuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC10ZXN0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC90c3QtYXJncDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDA0NjcxYTQuLmE0NTBhZjkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0zOSw2ICszOSw3IEBAIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnJlc29sdi9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnV0aWwvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJwdGhyZWFkL01ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlicnQvTWFrZWZpbGUuaW4KKytpbmNsdWRlICQodG9wX3NyY2RpcilsaWJ1YXJncC9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnViYWNrdHJhY2UvTWFrZWZpbGUuaW4KKyAKKyAjIGxhc3QgaW5jbHVkZWQgdG8gY2F0Y2ggYWxsIHRoZSBvYmplY3RzIGFkZGVkIGJ5IG90aGVycyAobG9jYWxlcy90aHJlYWRzKQorQEAgLTI2Miw2ICsyNjMsNyBAQCBIRUFERVJTX1JNLSArPSBzZ3R0eS5oCisgZW5kaWYKKyBIRUFERVJTX1JNLSQoSEFWRV9TSEFSRUQpICAgICAgICAgICAgICAgICAgICArPSBkbGZjbi5oIGJpdHMvZGxmY24uaAorIEhFQURFUlNfUk0tJChQVEhSRUFEU19ERUJVR19TVVBQT1JUKSAgICAgICAgICs9IHRocmVhZF9kYi5oCisrSEVBREVSU19STS0kKFVDTElCQ19IQVNfQVJHUCkgICAgICAgICAgICAgICAgKz0gYXJncC5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfQlNEX0VSUikgICAgICAgICAgICAgKz0gZXJyLmgKKyBIRUFERVJTX1JNLSQoVUNMSUJDX0hBU19DUllQVCkgICAgICAgICAgICAgICArPSBjcnlwdC5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfRVBPTEwpICAgICAgICAgICAgICAgKz0gc3lzL2Vwb2xsLmgKK0BAIC0zODYsNiArMzg4LDEzIEBAIGVsc2UKKyAJLSQoSU5TVEFMTCkgLW0gNzU1ICQodG9wX2J1aWxkZGlyKWxpYi9saWJjLnNvICQoUFJFRklYKSQoREVWRUxfUFJFRklYKSQoTVVMVElMSUJfRElSKS8KKyBlbmRpZgorIAllY2hvICIkKFVCQUNLVFJBQ0VfQVNORUVERUQpIiA+PiAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGliYy5zbworK2lmZXEgKCQoVUNMSUJDX0hBU19BUkdQKSx5KQorKyMgQWRkIHRoZSBBU19ORUVERUQgZW50cnkgZm9yIGxpYnVhcmdwLnNvCisrCWlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpbGliL2xpYmMuc28gLWEgLWYgJChQUkVGSVgpJChSVU5USU1FX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvJChTSEFSRURfTUFKT1JOQU1FKSBdIDsgdGhlbiBcCisrCQllY2hvICJHUk9VUCAoICQoVUFSR1BfQVNORUVERUQpICkiID4+ICQoUFJFRklYKSQoREVWRUxfUFJFRklYKSQoTVVMVElMSUJfRElSKS9saWJjLnNvOyBcCisrCWZpCisrZW5kaWYKKysKKyBpZmVxICgkKFVDTElCQ19IQVNfVEhSRUFEUykseSkKKyBpZm5lcSAoJChMSU5VWFRIUkVBRFNfT0xEKSx5KQorIGlmZXEgKCQoSEFSRFdJUkVEX0FCU1BBVEgpLHkpCitkaWZmIC0tZ2l0IGEvTWFrZXJ1bGVzIGIvTWFrZXJ1bGVzCitpbmRleCBkNmY3ZTI0Li5lNzAwNTBkIDEwMDY0NAorLS0tIGEvTWFrZXJ1bGVzCisrKysgYi9NYWtlcnVsZXMKK0BAIC00OCw2ICs0OCw3IEBAICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJyZXNvbHYsJChsaWJyZXNvbHYtYS15KSAkKGxpYnJlc29sdi1zby15KSkpCisgJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnJ0LCQobGlicnQtYS15KSAkKGxpYnJ0LXNvLXkpKSkKKyAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlidXRpbCwkKGxpYnV0aWwtYS15KSAkKGxpYnV0aWwtc28teSkpKQorICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJ1YmFja3RyYWNlLCQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KSkpCisrJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnVhcmdwLCQobGlidWFyZ3AtYS15KSAkKGxpYnVhcmdwLXNvLXkpKSkKKyAKKyBzaGFyZWRfb2JqcyA9ICQobGliYy15Oi5vPS5vcykgJChsaWJjLXNoYXJlZC15KSAkKGxpYmMtbm9uc2hhcmVkLXkpIFwKKyAJJChsaWJjcnlwdC1zby15KSAkKGxpYmRsLXNvLXkpIFwKK0BAIC01NSwxMiArNTYsMTIgQEAgc2hhcmVkX29ianMgPSAkKGxpYmMteToubz0ub3MpICQobGliYy1zaGFyZWQteSkgJChsaWJjLW5vbnNoYXJlZC15KSBcCisgCSQobGlicHRocmVhZC1zby15KSAkKGxpYnB0aHJlYWQtbm9uc2hhcmVkLXkpICQobGlidGhyZWFkX2RiLXNvLXkpIFwKKyAJJChsaWJyZXNvbHYtc28teSkgJChsaWJydC1zby15KSBcCisgCSQobGRzby15KSBcCistCSQobGlidXRpbC1zby15KSAkKGxpYnViYWNrdHJhY2Utc28teSkKKysJJChsaWJ1dGlsLXNvLXkpICQobGlidWJhY2t0cmFjZS1zby15KSAkKGxpYnVhcmdwLXNvLXkpCisgCisgYXJfb2JqcyA9ICAkKGxpYmMteSkgJChsaWJjLXN0YXRpYy15KSAkKGxpYmNyeXB0LWEteSkgXAorIAkkKGxpYmRsLWEteSkgJChsaWJpbnRsLWEteSkgJChsaWJtLWEteSkgJChsaWJuc2wtYS15KSBcCisgCSQobGlicHRocmVhZC1hLXkpICQobGlidGhyZWFkX2RiLWEteSkgXAorLQkkKGxpYnJlc29sdi1hLXkpICQobGlicnQtYS15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnViYWNrdHJhY2UtYS15KQorKwkkKGxpYnJlc29sdi1hLXkpICQobGlicnQtYS15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnVhcmdwLWEteSkKKyBpZmVxICgkKERPUElDKSx5KQorIGFyX29ianMgOj0gJChhcl9vYmpzOi5vPS5vcykKKyBlbmRpZgorQEAgLTQ5OCw3ICs0OTksNyBAQCBmaWxlcy5kZXAgOj0gJChsaWJjLWEteSkgJChsaWJjLXNvLXkpICQobGliYy1ub25zaGFyZWQteSkgXAorIAkkKGxpYnJ0LWEteSkgJChsaWJydC1zby15KSAgJChsaWJyZXNvbHYtYS15KSAkKGxpYnJlc29sdi1zby15KSBcCisgCSQobGliY3J5cHQtYS15KSAkKGxpYmNyeXB0LXNvLXkpICQobGlidXRpbC1hLXkpICQobGlidXRpbC1zby15KSBcCisgCSQobGlibnNsLWEteSkgJChsaWJuc2wtc28teSkgJChsZHNvLXkpICQobGliZGwtYS15KSAkKGxpYmRsLXNvLXkpIFwKKy0JJChsaWJ1YmFja3RyYWNlLWEteSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpCisrCSQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KSAkKGxpYnVhcmdwLXNvLXkpICQobGlidWFyZ3AtYS15KQorIC5kZXBlbmRzLmRlcCA6PSBcCisgCSQocGF0c3Vic3QgJS5zLCUucy5kZXAsJChmaWx0ZXIgJS5zLCQoZmlsZXMuZGVwKSkpIFwKKyAJJChwYXRzdWJzdCAlLm8sJS5vLmRlcCwkKGZpbHRlciAlLm8sJChmaWxlcy5kZXApKSkgXAorZGlmZiAtLWdpdCBhL1J1bGVzLm1hayBiL1J1bGVzLm1haworaW5kZXggZGU5ZmZiMy4uYTJiYWY1OCAxMDA2NDQKKy0tLSBhL1J1bGVzLm1haworKysrIGIvUnVsZXMubWFrCitAQCAtNjAyLDYgKzYwMiwxOSBAQCBleHBvcnQgVUJBQ0tUUkFDRV9BU05FRURFRDo9JChzaGVsbCAkKENDKSAtV2wsLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAtLSAtLQorIGVsc2UKKyBleHBvcnQgVUJBQ0tUUkFDRV9BU05FRURFRDo9IiIKKyBlbmRpZgorK2lmZXEgKCQoVUNMSUJDX0hBU19BUkdQKSx5KQorK2lmZXEgKCQoSEFSRFdJUkVEX0FCU1BBVEgpLHkpCisrIyBPbmx5IHVzZWQgaW4gaW5zdGFsbGVkIGxpYmMuc28gbGlua2VyIHNjcmlwdAorK1VBUkdQX0ZVTExfTkFNRSA6PSAkKHN1YnN0IC8vLC8sJChSVU5USU1FX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGlidWFyZ3Auc28uJChNQUpPUl9WRVJTSU9OKSkKKytlbHNlCisrVUFSR1BfRlVMTF9OQU1FIDo9IGxpYnVhcmdwLnNvLiQoTUFKT1JfVkVSU0lPTikKKytlbmRpZgorK2V4cG9ydCBVQVJHUF9BU05FRURFRDo9JChzaGVsbCAkKENDKSAtV2wsLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAtLSAtLWFzLW5lZWRlZCAmJiBcCisrCWVjaG8gIkdST1VQICggQVNfTkVFREVEICggJChVQVJHUF9GVUxMX05BTUUpICkgKSIgfHwgXAorKwllY2hvICJHUk9VUCAoICQoVUFSR1BfRlVMTF9OQU1FKSApIikKKytlbHNlCisrZXhwb3J0IFVBUkdQX0FTTkVFREVEOj0iIgorK2VuZGlmCisgZW5kaWYKKyAKKyAjIEFkZCBhIGJ1bmNoIG9mIGV4dHJhIHBlZGFudGljIGFubm95aW5nbHkgc3RyaWN0IGNoZWNrcworZGlmZiAtLWdpdCBhL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluIGIvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KK2luZGV4IDI0MmU0NWEuLmIzNmQ0YzkgMTAwNjQ0CistLS0gYS9leHRyYS9Db25maWdzL0NvbmZpZy5pbgorKysrIGIvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KK0BAIC0xOTQzLDYgKzE5NDMsMjMgQEAgY29uZmlnIFVDTElCQ19IQVNfR05VX0dFVFNVQk9QVAorIAkgIEFuc3dlciBZIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgZ2V0c3Vib3B0KCkuCisgCisgCSAgTW9zdCBwZW9wbGUgd2lsbCBhbnN3ZXIgWS4KKysKKytjb25maWcgVUNMSUJDX0hBU19BUkdQCisrICAgICAgIGJvb2wgIlN1cHBvcnQgYXJncCAoYXMgc3RhbmRhbG9uZSBzaGFyZWQgb2JqZWN0KSIKKysgICAgICAgZGVmYXVsdCBuCisrICAgICAgIGhlbHAKKysgICAgICAgICBBcmdwIGlzIGFuIGludGVyZmFjZSBmb3IgcGFyc2luZyB1bml4LXN0eWxlIGFyZ3VtZW50IHZlY3RvcnMuIFVubGlrZQorKyAgICAgICAgIHRoZSBjb21tb24gZ2V0b3B0IGludGVyZmFjZSwgaXQgcHJvdmlkZXMgbWFueSBhZHZhbmNlZCBmZWF0dXJlcyBpbgorKyAgICAgICAgIGFkZGl0aW9uIHRvIHBhcnNpbmcgb3B0aW9ucywgc3VjaCBhcyBhdXRvbWF0aWMgb3V0cHV0IGluIHJlc3BvbnNlIHRvCisrICAgICAgICAgYC0taGVscCcgYW5kIGAtLXZlcnNpb24nIG9wdGlvbnMuCisrICAgICAgICAgQSBsaWJyYXJ5IGNhbiBleHBvcnQgYW4gYXJncCBvcHRpb24gcGFyc2VyLCB3aGljaCBwcm9ncmFtcyBjYW4gZWFzaWx5CisrICAgICAgICAgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlaXIgb3duIG9wdGlvbiBwYXJzZXIuCisrICAgICAgICAgQSBuZXcgc2hhcmVkIG9iamVjdCAibGlidWFyZ3AiIGlzIGNyZWF0ZWQuIFRoZSAibGliYy5zbyIgbGlua2VyIHNjcmlwdAorKyAgICAgICAgIGNvbnRhaW5zIHRoZSBBU19ORUVERUQgZW50cnkgZm9yIGdldHRpbmcgdGhlIGxpYnVhcmdwIGxpbmtlZCBhdXRvbWF0aWNhbGx5LgorKyAgICAgICAgIEFyZ3Agc3VwcG9ydCBpcyBuZWVkZWQgYnkgZWxmdXRpbHMgbGliZHcuCisrCisrICAgICAgICAgTW9zdCBwZW9wbGUgY2FuIHNhZmVseSBhbnN3ZXIgTi4KKysKKyBlbmRtZW51CisgCisgCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hcmdwLmggYi9pbmNsdWRlL2FyZ3AuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlkNTM3MjgKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvYXJncC5oCitAQCAtMCwwICsxLDU2NiBAQAorKy8qIEhpZXJhcmNoaWFsIGFyZ3VtZW50IHBhcnNpbmcsIGxheWVyZWQgb3ZlciBnZXRvcHQuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysjaWZuZGVmIF9BUkdQX0gKKysjZGVmaW5lIF9BUkdQX0gKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrI2RlZmluZSBfX25lZWRfZXJyb3JfdAorKyNpbmNsdWRlIDxlcnJuby5oPgorKworKyNpZm5kZWYgX19jb25zdAorKyMgZGVmaW5lIF9fY29uc3QgY29uc3QKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVEhST1cKKysjIGRlZmluZSBfX1RIUk9XCisrI2VuZGlmCisrI2lmbmRlZiBfX05USAorKyMgZGVmaW5lIF9fTlRIKGZjdCkgZmN0IF9fVEhST1cKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKysjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKysgICAicmVzdHJpY3QiLCBhbmQgImNvbmZpZ3VyZSIgbWF5IGhhdmUgZGVmaW5lZCAicmVzdHJpY3QiLiAgKi8KKysjaWZuZGVmIF9fcmVzdHJpY3QKKysjIGlmICEgKDIgPCBfX0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykpCisrIyAgaWYgZGVmaW5lZCByZXN0cmljdCB8fCAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18KKysjICAgZGVmaW5lIF9fcmVzdHJpY3QgcmVzdHJpY3QKKysjICBlbHNlCisrIyAgIGRlZmluZSBfX3Jlc3RyaWN0CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX2Vycm9yX3RfZGVmaW5lZAorK3R5cGVkZWYgaW50IGVycm9yX3Q7CisrIyBkZWZpbmUgX19lcnJvcl90X2RlZmluZWQKKysjZW5kaWYKKysMCisrI2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKy8qIEEgZGVzY3JpcHRpb24gb2YgYSBwYXJ0aWN1bGFyIG9wdGlvbi4gIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZgorKyAgIHRoZXNlIGlzIHBhc3NlZCBpbiB0aGUgT1BUSU9OUyBmaWVsZCBvZiBhbiBhcmdwIHN0cnVjdHVyZS4gIEVhY2ggb3B0aW9uCisrICAgZW50cnkgY2FuIGNvcnJlc3BvbmQgdG8gb25lIGxvbmcgb3B0aW9uIGFuZC9vciBvbmUgc2hvcnQgb3B0aW9uOyBtb3JlCisrICAgbmFtZXMgZm9yIHRoZSBzYW1lIG9wdGlvbiBjYW4gYmUgYWRkZWQgYnkgZm9sbG93aW5nIGFuIGVudHJ5IGluIGFuIG9wdGlvbgorKyAgIGFycmF5IHdpdGggb3B0aW9ucyBoYXZpbmcgdGhlIE9QVElPTl9BTElBUyBmbGFnIHNldC4gICovCisrc3RydWN0IGFyZ3Bfb3B0aW9uCisreworKyAgLyogVGhlIGxvbmcgb3B0aW9uIG5hbWUuICBGb3IgbW9yZSB0aGFuIG9uZSBuYW1lIGZvciB0aGUgc2FtZSBvcHRpb24sIHlvdQorKyAgICAgY2FuIHVzZSBmb2xsb3dpbmcgb3B0aW9ucyB3aXRoIHRoZSBPUFRJT05fQUxJQVMgZmxhZyBzZXQuICAqLworKyAgX19jb25zdCBjaGFyICpuYW1lOworKworKyAgLyogV2hhdCBrZXkgaXMgcmV0dXJuZWQgZm9yIHRoaXMgb3B0aW9uLiAgSWYgPiAwIGFuZCBwcmludGFibGUsIHRoZW4gaXQncworKyAgICAgYWxzbyBhY2NlcHRlZCBhcyBhIHNob3J0IG9wdGlvbi4gICovCisrICBpbnQga2V5OworKworKyAgLyogSWYgbm9uLU5VTEwsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisrICAgICBvcHRpb24sIHdoaWNoIGlzIHJlcXVpcmVkIHVubGVzcyB0aGUgT1BUSU9OX0FSR19PUFRJT05BTCBmbGFnIGlzIHNldC4gKi8KKysgIF9fY29uc3QgY2hhciAqYXJnOworKworKyAgLyogT1BUSU9OXyBmbGFncy4gICovCisrICBpbnQgZmxhZ3M7CisrCisrICAvKiBUaGUgZG9jIHN0cmluZyBmb3IgdGhpcyBvcHRpb24uICBJZiBib3RoIE5BTUUgYW5kIEtFWSBhcmUgMCwgVGhpcyBzdHJpbmcKKysgICAgIHdpbGwgYmUgcHJpbnRlZCBvdXRkZW50ZWQgZnJvbSB0aGUgbm9ybWFsIG9wdGlvbiBjb2x1bW4sIG1ha2luZyBpdAorKyAgICAgdXNlZnVsIGFzIGEgZ3JvdXAgaGVhZGVyIChpdCB3aWxsIGJlIHRoZSBmaXJzdCB0aGluZyBwcmludGVkIGluIGl0cworKyAgICAgZ3JvdXApOyBpbiB0aGlzIHVzYWdlLCBpdCdzIGNvbnZlbnRpb25hbCB0byBlbmQgdGhlIHN0cmluZyB3aXRoIGEgYDonLiAgKi8KKysgIF9fY29uc3QgY2hhciAqZG9jOworKworKyAgLyogVGhlIGdyb3VwIHRoaXMgb3B0aW9uIGlzIGluLiAgSW4gYSBsb25nIGhlbHAgbWVzc2FnZSwgb3B0aW9ucyBhcmUgc29ydGVkCisrICAgICBhbHBoYWJldGljYWxseSB3aXRoaW4gZWFjaCBncm91cCwgYW5kIHRoZSBncm91cHMgcHJlc2VudGVkIGluIHRoZSBvcmRlcgorKyAgICAgMCwgMSwgMiwgLi4uLCBuLCAtbSwgLi4uLCAtMiwgLTEuICBFdmVyeSBlbnRyeSBpbiBhbiBvcHRpb25zIGFycmF5IHdpdGgKKysgICAgIGlmIHRoaXMgZmllbGQgMCB3aWxsIGluaGVyaXQgdGhlIGdyb3VwIG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnksIG9yCisrICAgICB6ZXJvIGlmIGl0J3MgdGhlIGZpcnN0IG9uZSwgdW5sZXNzIGl0cyBhIGdyb3VwIGhlYWRlciAoTkFNRSBhbmQgS0VZIGJvdGgKKysgICAgIDApLCBpbiB3aGljaCBjYXNlLCB0aGUgcHJldmlvdXMgZW50cnkgKyAxIGlzIHRoZSBkZWZhdWx0LiAgQXV0b21hZ2ljCisrICAgICBvcHRpb25zIHN1Y2ggYXMgLS1oZWxwIGFyZSBwdXQgaW50byBncm91cCAtMS4gICovCisrICBpbnQgZ3JvdXA7CisrfTsKKysKKysvKiBUaGUgYXJndW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIGlzIG9wdGlvbmFsLiAgKi8KKysjZGVmaW5lIE9QVElPTl9BUkdfT1BUSU9OQUwJMHgxCisrCisrLyogVGhpcyBvcHRpb24gaXNuJ3QgZGlzcGxheWVkIGluIGFueSBoZWxwIG1lc3NhZ2VzLiAgKi8KKysjZGVmaW5lIE9QVElPTl9ISURERU4JICAgICAgIAkweDIKKysKKysvKiBUaGlzIG9wdGlvbiBpcyBhbiBhbGlhcyBmb3IgdGhlIGNsb3Nlc3QgcHJldmlvdXMgbm9uLWFsaWFzIG9wdGlvbi4gIFRoaXMKKysgICBtZWFucyB0aGF0IGl0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIGhlbHAgZW50cnksIGFuZCB3aWxsIGluaGVyaXQKKysgICBmaWVsZHMgb3RoZXIgdGhhbiBOQU1FIGFuZCBLRVkgZnJvbSB0aGUgYWxpYXNlZCBvcHRpb24uICAqLworKyNkZWZpbmUgT1BUSU9OX0FMSUFTCQkweDQKKysKKysvKiBUaGlzIG9wdGlvbiBpc24ndCBhY3R1YWxseSBhbiBvcHRpb24gKGFuZCBzbyBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUKKysgICBhY3R1YWwgb3B0aW9uIHBhcnNlciksIGJ1dCByYXRoZXIgYW4gYXJiaXRyYXJ5IHBpZWNlIG9mIGRvY3VtZW50YXRpb24gdGhhdAorKyAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gbXVjaCB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIG9wdGlvbnMuICBJZiB0aGlzIGZsYWcKKysgICBpcyBzZXQsIHRoZW4gdGhlIG9wdGlvbiBOQU1FIGZpZWxkIGlzIGRpc3BsYXllZCB1bm1vZGlmaWVkIChlLmcuLCBubyBgLS0nCisrICAgcHJlZml4IGlzIGFkZGVkKSBhdCB0aGUgbGVmdC1tYXJnaW4gKHdoZXJlIGEgKnNob3J0KiBvcHRpb24gd291bGQgbm9ybWFsbHkKKysgICBiZSBkaXNwbGF5ZWQpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGluIHRoZSBub3JtYWwgcGxhY2UuICBGb3IKKysgICBwdXJwb3NlcyBvZiBzb3J0aW5nLCBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBwdW5jdHVhdGlvbiBpcyBpZ25vcmVkLAorKyAgIGV4Y2VwdCB0aGF0IGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IGAtJywgdGhpcyBlbnRyeQorKyAgIGlzIGRpc3BsYXllZCBhZnRlciBhbGwgb3B0aW9ucyAoYW5kIE9QVElPTl9ET0MgZW50cmllcyB3aXRoIGEgbGVhZGluZyBgLScpCisrICAgaW4gdGhlIHNhbWUgZ3JvdXAuICAqLworKyNkZWZpbmUgT1BUSU9OX0RPQwkJMHg4CisrCisrLyogVGhpcyBvcHRpb24gc2hvdWxkbid0IGJlIGluY2x1ZGVkIGluIGBsb25nJyB1c2FnZSBtZXNzYWdlcyAoYnV0IGlzIHN0aWxsCisrICAgaW5jbHVkZWQgaW4gaGVscCBtZXNzYWdlcykuICBUaGlzIGlzIG1haW5seSBpbnRlbmRlZCBmb3Igb3B0aW9ucyB0aGF0IGFyZQorKyAgIGNvbXBsZXRlbHkgZG9jdW1lbnRlZCBpbiBhbiBhcmdwJ3MgQVJHU19ET0MgZmllbGQsIGluIHdoaWNoIGNhc2UgaW5jbHVkaW5nCisrICAgdGhlIG9wdGlvbiBpbiB0aGUgZ2VuZXJpYyB1c2FnZSBsaXN0IHdvdWxkIGJlIHJlZHVuZGFudC4gIEZvciBpbnN0YW5jZSwKKysgICBpZiBBUkdTX0RPQyBpcyAiRk9PIEJBUlxuLXggQkxBSCIsIGFuZCB0aGUgYC14JyBvcHRpb24ncyBwdXJwb3NlIGlzIHRvCisrICAgZGlzdGluZ3Vpc2ggdGhlc2UgdHdvIGNhc2VzLCAteCBzaG91bGQgcHJvYmFibHkgYmUgbWFya2VkCisrICAgT1BUSU9OX05PX1VTQUdFLiAgKi8KKysjZGVmaW5lIE9QVElPTl9OT19VU0FHRQkJMHgxMAorKwwKKytzdHJ1Y3QgYXJncDsJCQkvKiBmd2QgZGVjbGFyZSB0aGlzIHR5cGUgKi8KKytzdHJ1Y3QgYXJncF9zdGF0ZTsJCS8qICIgKi8KKytzdHJ1Y3QgYXJncF9jaGlsZDsJCS8qICIgKi8KKysKKysvKiBUaGUgdHlwZSBvZiBhIHBvaW50ZXIgdG8gYW4gYXJncCBwYXJzaW5nIGZ1bmN0aW9uLiAgKi8KKyt0eXBlZGVmIGVycm9yX3QgKCphcmdwX3BhcnNlcl90KSAoaW50IF9fa2V5LCBjaGFyICpfX2FyZywKKysJCQkJICBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19zdGF0ZSk7CisrCisrLyogV2hhdCB0byByZXR1cm4gZm9yIHVucmVjb2duaXplZCBrZXlzLiAgRm9yIHNwZWNpYWwgQVJHUF9LRVlfIGtleXMsIHN1Y2gKKysgICByZXR1cm5zIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQuICBGb3IgdXNlciBrZXlzLCB0aGlzIGVycm9yIHdpbGwgYmUgdHVybmVkCisrICAgaW50byBFSU5WQUwgKGlmIHRoZSBjYWxsIHRvIGFyZ3BfcGFyc2UgaXMgc3VjaCB0aGF0IGVycm9ycyBhcmUgcHJvcGFnYXRlZAorKyAgIGJhY2sgdG8gdGhlIHVzZXIgaW5zdGVhZCBvZiBleGl0aW5nKTsgcmV0dXJuaW5nIEVJTlZBTCBpdHNlbGYgd291bGQgcmVzdWx0CisrICAgaW4gYW4gaW1tZWRpYXRlIHN0b3AgdG8gcGFyc2luZyBpbiAqYWxsKiBjYXNlcy4gICovCisrI2RlZmluZSBBUkdQX0VSUl9VTktOT1dOCUUyQklHIC8qIEh1cmQgc2hvdWxkIG5ldmVyIG5lZWQgRTJCSUcuICBYWFggKi8KKysKKysvKiBTcGVjaWFsIHZhbHVlcyBmb3IgdGhlIEtFWSBhcmd1bWVudCB0byBhbiBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9uLgorKyAgIEFSR1BfRVJSX1VOS05PV04gc2hvdWxkIGJlIHJldHVybmVkIGlmIHRoZXkgYXJlbid0IHVuZGVyc3Rvb2QuCisrCisrICAgVGhlIHNlcXVlbmNlIG9mIGtleXMgdG8gYSBwYXJzaW5nIGZ1bmN0aW9uIGlzIGVpdGhlciAod2hlcmUgZWFjaAorKyAgIHVwcGVyY2FzZWQgd29yZCBzaG91bGQgYmUgcHJlZml4ZWQgYnkgYEFSR1BfS0VZXycgYW5kIG9wdCBpcyBhIHVzZXIga2V5KToKKysKKysgICAgICAgSU5JVCBvcHQuLi4gTk9fQVJHUyBFTkQgU1VDQ0VTUyAgLS0gTm8gbm9uLW9wdGlvbiBhcmd1bWVudHMgYXQgYWxsCisrICAgb3IgIElOSVQgKG9wdCB8IEFSRykuLi4gRU5EIFNVQ0NFU1MgIC0tIEFsbCBub24tb3B0aW9uIGFyZ3MgcGFyc2VkCisrICAgb3IgIElOSVQgKG9wdCB8IEFSRykuLi4gU1VDQ0VTUyAgICAgIC0tIFNvbWUgbm9uLW9wdGlvbiBhcmcgdW5yZWNvZ25pemVkCisrCisrICAgVGhlIHRoaXJkIGNhc2UgaXMgd2hlcmUgZXZlcnkgcGFyc2VyIHJldHVybmVkIEFSR1BfS0VZX1VOS05PV04gZm9yIGFuCisrICAgYXJndW1lbnQsIGluIHdoaWNoIGNhc2UgcGFyc2luZyBzdG9wcyBhdCB0aGF0IGFyZ3VtZW50IChyZXR1cm5pbmcgdGhlCisrICAgdW5wYXJzZWQgYXJndW1lbnRzIHRvIHRoZSBjYWxsZXIgb2YgYXJncF9wYXJzZSBpZiByZXF1ZXN0ZWQsIG9yIHN0b3BwaW5nCisrICAgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIG5vdCkuCisrCisrICAgSWYgYW4gZXJyb3Igb2NjdXJzIChlaXRoZXIgZGV0ZWN0ZWQgYnkgYXJncCwgb3IgYmVjYXVzZSB0aGUgcGFyc2luZworKyAgIGZ1bmN0aW9uIHJldHVybmVkIGFuIGVycm9yIHZhbHVlKSwgdGhlbiB0aGUgcGFyc2VyIGlzIGNhbGxlZCB3aXRoCisrICAgQVJHUF9LRVlfRVJST1IsIGFuZCBubyBmdXJ0aGVyIGNhbGxzIGFyZSBtYWRlLiAgKi8KKysKKysvKiBUaGlzIGlzIG5vdCBhbiBvcHRpb24gYXQgYWxsLCBidXQgcmF0aGVyIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAgSWYgYQorKyAgIHBhcnNlciByZWNlaXZpbmcgdGhpcyBrZXkgcmV0dXJucyBzdWNjZXNzLCB0aGUgZmFjdCBpcyByZWNvcmRlZCwgYW5kIHRoZQorKyAgIEFSR1BfS0VZX05PX0FSR1MgY2FzZSB3b24ndCBiZSB1c2VkLiAgSE9XRVZFUiwgaWYgd2hpbGUgcHJvY2Vzc2luZyB0aGUKKysgICBhcmd1bWVudCwgYSBwYXJzZXIgZnVuY3Rpb24gZGVjcmVtZW50cyB0aGUgTkVYVCBmaWVsZCBvZiB0aGUgc3RhdGUgaXQncworKyAgIHBhc3NlZCwgdGhlIG9wdGlvbiB3b24ndCBiZSBjb25zaWRlcmVkIHByb2Nlc3NlZDsgdGhpcyBpcyB0byBhbGxvdyB5b3UgdG8KKysgICBhY3R1YWxseSBtb2RpZnkgdGhlIGFyZ3VtZW50IChwZXJoYXBzIGludG8gYW4gb3B0aW9uKSwgYW5kIGhhdmUgaXQKKysgICBwcm9jZXNzZWQgYWdhaW4uICAqLworKyNkZWZpbmUgQVJHUF9LRVlfQVJHCQkwCisrLyogVGhlcmUgYXJlIHJlbWFpbmluZyBhcmd1bWVudHMgbm90IHBhcnNlZCBieSBhbnkgcGFyc2VyLCB3aGljaCBtYXkgYmUgZm91bmQKKysgICBzdGFydGluZyBhdCAoU1RBVEUtPmFyZ3YgKyBTVEFURS0+bmV4dCkuICBJZiBzdWNjZXNzIGlzIHJldHVybmVkLCBidXQKKysgICBTVEFURS0+bmV4dCBsZWZ0IHVudG91Y2hlZCwgaXQncyBhc3N1bWVkIHRoYXQgYWxsIGFyZ3VtZW50cyB3ZXJlIGNvbnN1bWUsCisrICAgb3RoZXJ3aXNlLCB0aGUgcGFyc2VyIHNob3VsZCBhZGp1c3QgU1RBVEUtPm5leHQgdG8gcmVmbGVjdCBhbnkgYXJndW1lbnRzCisrICAgY29uc3VtZWQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfQVJHUwkJMHgxMDAwMDA2CisrLyogVGhlcmUgYXJlIG5vIG1vcmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhdCBhbGwuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfRU5ECQkweDEwMDAwMDEKKysvKiBCZWNhdXNlIGl0J3MgY29tbW9uIHRvIHdhbnQgdG8gZG8gc29tZSBzcGVjaWFsIHByb2Nlc3NpbmcgaWYgdGhlcmUgYXJlbid0CisrICAgYW55IG5vbi1vcHRpb24gYXJncywgdXNlciBwYXJzZXJzIGFyZSBjYWxsZWQgd2l0aCB0aGlzIGtleSBpZiB0aGV5IGRpZG4ndAorKyAgIHN1Y2Nlc3NmdWxseSBwcm9jZXNzIGFueSBub24tb3B0aW9uIGFyZ3VtZW50cy4gIENhbGxlZCBqdXN0IGJlZm9yZQorKyAgIEFSR1BfS0VZX0VORCAod2hlcmUgbW9yZSBnZW5lcmFsIHZhbGlkaXR5IGNoZWNrcyBvbiBwcmV2aW91c2x5IHBhcnNlZAorKyAgIGFyZ3VtZW50cyBjYW4gdGFrZSBwbGFjZSkuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfTk9fQVJHUwkweDEwMDAwMDIKKysvKiBQYXNzZWQgaW4gYmVmb3JlIGFueSBwYXJzaW5nIGlzIGRvbmUuICBBZnRlcndhcmRzLCB0aGUgdmFsdWVzIG9mIGVhY2gKKysgICBlbGVtZW50IG9mIHRoZSBDSElMRF9JTlBVVCBmaWVsZCwgaWYgYW55LCBpbiB0aGUgc3RhdGUgc3RydWN0dXJlIGlzCisrICAgY29waWVkIHRvIGVhY2ggY2hpbGQncyBzdGF0ZSB0byBiZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgSU5QVVQgZmllbGQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSU5JVAkJMHgxMDAwMDAzCisrLyogVXNlIGFmdGVyIGFsbCBvdGhlciBrZXlzLCBpbmNsdWRpbmcgU1VDQ0VTUyAmIEVORC4gICovCisrI2RlZmluZSBBUkdQX0tFWV9GSU5JCQkweDEwMDAwMDcKKysvKiBQYXNzZWQgaW4gd2hlbiBwYXJzaW5nIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBjb21wbGV0ZWQgKGV2ZW4gaWYgdGhlcmUgYXJlCisrICAgc3RpbGwgYXJndW1lbnRzIHJlbWFpbmluZykuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfU1VDQ0VTUwkweDEwMDAwMDQKKysvKiBQYXNzZWQgaW4gaWYgYW4gZXJyb3Igb2NjdXJzLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0VSUk9SCQkweDEwMDAwMDUKKysKKysvKiBBbiBhcmdwIHN0cnVjdHVyZSBjb250YWlucyBhIHNldCBvZiBvcHRpb25zIGRlY2xhcmF0aW9ucywgYSBmdW5jdGlvbiB0bworKyAgIGRlYWwgd2l0aCBwYXJzaW5nIG9uZSwgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIGEgcG9zc2libGUgdmVjdG9yIG9mIGNoaWxkCisrICAgYXJncCdzLCBhbmQgcGVyaGFwcyBhIGZ1bmN0aW9uIHRvIGZpbHRlciBoZWxwIG91dHB1dC4gIFdoZW4gYWN0dWFsbHkKKysgICBwYXJzaW5nIG9wdGlvbnMsIGdldG9wdCBpcyBjYWxsZWQgd2l0aCB0aGUgdW5pb24gb2YgYWxsIHRoZSBhcmdwCisrICAgc3RydWN0dXJlcyBjaGFpbmVkIHRvZ2V0aGVyIHRocm91Z2ggdGhlaXIgQ0hJTEQgcG9pbnRlcnMsIHdpdGggY29uZmxpY3RzCisrICAgYmVpbmcgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIGNoYWluLiAgKi8KKytzdHJ1Y3QgYXJncAorK3sKKysgIC8qIEFuIGFycmF5IG9mIGFyZ3Bfb3B0aW9uIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgYW4gZW50cnkgd2l0aCBib3RoCisrICAgICBOQU1FIGFuZCBLRVkgaGF2aW5nIGEgdmFsdWUgb2YgMC4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0aW9uczsKKysKKysgIC8qIFdoYXQgdG8gZG8gd2l0aCBhbiBvcHRpb24gZnJvbSB0aGlzIHN0cnVjdHVyZS4gIEtFWSBpcyB0aGUga2V5CisrICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIG9wdGlvbiwgYW5kIEFSRyBpcyBhbnkgYXNzb2NpYXRlZCBhcmd1bWVudCAoTlVMTCBpZgorKyAgICAgbm9uZSB3YXMgc3VwcGxpZWQpLiAgSWYgS0VZIGlzbid0IHVuZGVyc3Rvb2QsIEFSR1BfRVJSX1VOS05PV04gc2hvdWxkIGJlCisrICAgICByZXR1cm5lZC4gIElmIGEgbm9uLXplcm8sIG5vbi1BUkdQX0VSUl9VTktOT1dOIHZhbHVlIGlzIHJldHVybmVkLCB0aGVuCisrICAgICBwYXJzaW5nIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHksIGFuZCB0aGF0IHZhbHVlIGlzIHJldHVybmVkIGZyb20KKysgICAgIGFyZ3BfcGFyc2UoKS4gIEZvciBzcGVjaWFsIChub24tdXNlci1zdXBwbGllZCkgdmFsdWVzIG9mIEtFWSwgc2VlIHRoZQorKyAgICAgQVJHUF9LRVlfIGRlZmluaXRpb25zIGJlbG93LiAgKi8KKysgIGFyZ3BfcGFyc2VyX3QgcGFyc2VyOworKworKyAgLyogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0IG90aGVyIGFyZ3VtZW50cyBhcmUgd2FudGVkIGJ5IHRoaXMgcHJvZ3JhbS4gIEl0CisrICAgICBpcyBvbmx5IHVzZWQgYnkgYXJncF91c2FnZSB0byBwcmludCB0aGUgYFVzYWdlOicgbWVzc2FnZS4gIElmIGl0CisrICAgICBjb250YWlucyBuZXdsaW5lcywgdGhlIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IHRoZW0gYXJlIGNvbnNpZGVyZWQKKysgICAgIGFsdGVybmF0aXZlIHVzYWdlIHBhdHRlcm5zLCBhbmQgcHJpbnRlZCBvbiBzZXBhcmF0ZSBsaW5lcyAobGluZXMgYWZ0ZXIKKysgICAgIHRoZSBmaXJzdCBhcmUgcHJlZml4IGJ5IGAgIG9yOiAnIGluc3RlYWQgb2YgYFVzYWdlOicpLiAgKi8KKysgIF9fY29uc3QgY2hhciAqYXJnc19kb2M7CisrCisrICAvKiBJZiBub24tTlVMTCwgYSBzdHJpbmcgY29udGFpbmluZyBleHRyYSB0ZXh0IHRvIGJlIHByaW50ZWQgYmVmb3JlIGFuZAorKyAgICAgYWZ0ZXIgdGhlIG9wdGlvbnMgaW4gYSBsb25nIGhlbHAgbWVzc2FnZSAoc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgdGFiCisrICAgICBgXHYnIGNoYXJhY3RlcikuICAqLworKyAgX19jb25zdCBjaGFyICpkb2M7CisrCisrICAvKiBBIHZlY3RvciBvZiBhcmdwX2NoaWxkcmVuIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgYSBtZW1iZXIgd2l0aCBhIDAKKysgICAgIGFyZ3AgZmllbGQsIHBvaW50aW5nIHRvIGNoaWxkIGFyZ3BzIHNob3VsZCBiZSBwYXJzZWQgd2l0aCB0aGlzIG9uZS4gIEFueQorKyAgICAgY29uZmxpY3RzIGFyZSByZXNvbHZlZCBpbiBmYXZvciBvZiB0aGlzIGFyZ3AsIG9yIGVhcmx5IGFyZ3BzIGluIHRoZQorKyAgICAgQ0hJTERSRU4gbGlzdC4gIFRoaXMgZmllbGQgaXMgdXNlZnVsIGlmIHlvdSB1c2UgbGlicmFyaWVzIHRoYXQgc3VwcGx5CisrICAgICB0aGVpciBvd24gYXJncCBzdHJ1Y3R1cmUsIHdoaWNoIHlvdSB3YW50IHRvIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHlvdXIKKysgICAgIG93bi4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZHJlbjsKKysKKysgIC8qIElmIG5vbi16ZXJvLCB0aGlzIHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRvIGZpbHRlciB0aGUgb3V0cHV0IG9mIGhlbHAKKysgICAgIG1lc3NhZ2VzLiAgS0VZIGlzIGVpdGhlciBhIGtleSBmcm9tIGFuIG9wdGlvbiwgaW4gd2hpY2ggY2FzZSBURVhUIGlzCisrICAgICB0aGF0IG9wdGlvbidzIGhlbHAgdGV4dCwgb3IgYSBzcGVjaWFsIGtleSBmcm9tIHRoZSBBUkdQX0tFWV9IRUxQXworKyAgICAgZGVmaW5lcywgYmVsb3csIGRlc2NyaWJpbmcgd2hpY2ggb3RoZXIgaGVscCB0ZXh0IFRFWFQgaXMuICBUaGUgZnVuY3Rpb24KKysgICAgIHNob3VsZCByZXR1cm4gZWl0aGVyIFRFWFQsIGlmIGl0IHNob3VsZCBiZSB1c2VkIGFzLWlzLCBhIHJlcGxhY2VtZW50CisrICAgICBzdHJpbmcsIHdoaWNoIHNob3VsZCBiZSBtYWxsb2NlZCwgYW5kIHdpbGwgYmUgZnJlZWQgYnkgYXJncCwgb3IgTlVMTCwKKysgICAgIG1lYW5pbmcgYHByaW50IG5vdGhpbmcnLiAgVGhlIHZhbHVlIGZvciBURVhUIGlzICphZnRlciogYW55IHRyYW5zbGF0aW9uCisrICAgICBoYXMgYmVlbiBkb25lLCBzbyBpZiBhbnkgb2YgdGhlIHJlcGxhY2VtZW50IHRleHQgYWxzbyBuZWVkcyB0cmFuc2xhdGlvbiwKKysgICAgIHRoYXQgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIGZpbHRlciBmdW5jdGlvbi4gIElOUFVUIGlzIGVpdGhlciB0aGUgaW5wdXQKKysgICAgIHN1cHBsaWVkIHRvIGFyZ3BfcGFyc2UsIG9yIE5VTEwsIGlmIGFyZ3BfaGVscCB3YXMgY2FsbGVkIGRpcmVjdGx5LiAgKi8KKysgIGNoYXIgKigqaGVscF9maWx0ZXIpIChpbnQgX19rZXksIF9fY29uc3QgY2hhciAqX190ZXh0LCB2b2lkICpfX2lucHV0KTsKKysKKysgIC8qIElmIG5vbi16ZXJvIHRoZSBzdHJpbmdzIHVzZWQgaW4gdGhlIGFyZ3AgbGlicmFyeSBhcmUgdHJhbnNsYXRlZCB1c2luZworKyAgICAgdGhlIGRvbWFpbiBkZXNjcmliZWQgYnkgdGhpcyBzdHJpbmcuICBPdGhlcndpc2UgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQKKysgICAgIGRlZmF1bHQgZG9tYWluIGlzIHVzZWQuICAqLworKyAgY29uc3QgY2hhciAqYXJncF9kb21haW47CisrfTsKKysKKysvKiBQb3NzaWJsZSBLRVkgYXJndW1lbnRzIHRvIGEgaGVscCBmaWx0ZXIgZnVuY3Rpb24uICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9QUkVfRE9DCTB4MjAwMDAwMSAvKiBIZWxwIHRleHQgcHJlY2VlZGluZyBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9QT1NUX0RPQwkweDIwMDAwMDIgLyogSGVscCB0ZXh0IGZvbGxvd2luZyBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9IRUFERVIJMHgyMDAwMDAzIC8qIE9wdGlvbiBoZWFkZXIgc3RyaW5nLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9FWFRSQQkweDIwMDAwMDQgLyogQWZ0ZXIgYWxsIG90aGVyIGRvY3VtZW50YXRpb247CisrCQkJCQkgICAgIFRFWFQgaXMgTlVMTCBmb3IgdGhpcyBrZXkuICAqLworKy8qIEV4cGxhbmF0b3J5IG5vdGUgZW1pdHRlZCB3aGVuIGR1cGxpY2F0ZSBvcHRpb24gYXJndW1lbnRzIGhhdmUgYmVlbgorKyAgIHN1cHByZXNzZWQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9EVVBfQVJHU19OT1RFIDB4MjAwMDAwNQorKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9BUkdTX0RPQwkweDIwMDAwMDYgLyogQXJndW1lbnQgZG9jIHN0cmluZy4gICovCisrDAorKy8qIFdoZW4gYW4gYXJncCBoYXMgYSBub24temVybyBDSElMRFJFTiBmaWVsZCwgaXQgc2hvdWxkIHBvaW50IHRvIGEgdmVjdG9yIG9mCisrICAgYXJncF9jaGlsZCBzdHJ1Y3R1cmVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHN1YnNpZGlhcnkgYXJncC4gICovCisrc3RydWN0IGFyZ3BfY2hpbGQKKyt7CisrICAvKiBUaGUgY2hpbGQgcGFyc2VyLiAgKi8KKysgIF9fY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBGbGFncyBmb3IgdGhpcyBjaGlsZC4gICovCisrICBpbnQgZmxhZ3M7CisrCisrICAvKiBJZiBub24temVybywgYW4gb3B0aW9uYWwgaGVhZGVyIHRvIGJlIHByaW50ZWQgaW4gaGVscCBvdXRwdXQgYmVmb3JlIHRoZQorKyAgICAgY2hpbGQgb3B0aW9ucy4gIEFzIGEgc2lkZS1lZmZlY3QsIGEgbm9uLXplcm8gdmFsdWUgZm9yY2VzIHRoZSBjaGlsZAorKyAgICAgb3B0aW9ucyB0byBiZSBncm91cGVkIHRvZ2V0aGVyOyB0byBhY2hpZXZlIHRoaXMgZWZmZWN0IHdpdGhvdXQgYWN0dWFsbHkKKysgICAgIHByaW50aW5nIGEgaGVhZGVyIHN0cmluZywgdXNlIGEgdmFsdWUgb2YgIiIuICAqLworKyAgX19jb25zdCBjaGFyICpoZWFkZXI7CisrCisrICAvKiBXaGVyZSB0byBncm91cCB0aGUgY2hpbGQgb3B0aW9ucyByZWxhdGl2ZSB0byB0aGUgb3RoZXIgKGBjb25zb2xpZGF0ZWQnKQorKyAgICAgb3B0aW9ucyBpbiB0aGUgcGFyZW50IGFyZ3A7IHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHRoZSBHUk9VUCBmaWVsZAorKyAgICAgaW4gYXJncF9vcHRpb24gc3RydWN0cywgYnV0IGFsbCBjaGlsZC1ncm91cGluZ3MgZm9sbG93IHBhcmVudCBvcHRpb25zIGF0CisrICAgICBhIHBhcnRpY3VsYXIgZ3JvdXAgbGV2ZWwuICBJZiBib3RoIHRoaXMgZmllbGQgYW5kIEhFQURFUiBhcmUgemVybywgdGhlbgorKyAgICAgdGhleSBhcmVuJ3QgZ3JvdXBlZCBhdCBhbGwsIGJ1dCByYXRoZXIgbWVyZ2VkIHdpdGggdGhlIHBhcmVudCBvcHRpb25zCisrICAgICAobWVyZ2luZyB0aGUgY2hpbGQncyBncm91cGluZyBsZXZlbHMgd2l0aCB0aGUgcGFyZW50cykuICAqLworKyAgaW50IGdyb3VwOworK307CisrDAorKy8qIFBhcnNpbmcgc3RhdGUuICBUaGlzIGlzIHByb3ZpZGVkIHRvIHBhcnNpbmcgZnVuY3Rpb25zIGNhbGxlZCBieSBhcmdwLAorKyAgIHdoaWNoIG1heSBleGFtaW5lIGFuZCwgYXMgbm90ZWQsIG1vZGlmeSBmaWVsZHMuICAqLworK3N0cnVjdCBhcmdwX3N0YXRlCisreworKyAgLyogVGhlIHRvcCBsZXZlbCBBUkdQIGJlaW5nIHBhcnNlZC4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwICpyb290X2FyZ3A7CisrCisrICAvKiBUaGUgYXJndW1lbnQgdmVjdG9yIGJlaW5nIHBhcnNlZC4gIE1heSBiZSBtb2RpZmllZC4gICovCisrICBpbnQgYXJnYzsKKysgIGNoYXIgKiphcmd2OworKworKyAgLyogVGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIG5leHQgYXJnIHRoYXQgdG8gYmUgcGFyc2VkLiAgTWF5IGJlIG1vZGlmaWVkLiAqLworKyAgaW50IG5leHQ7CisrCisrICAvKiBUaGUgZmxhZ3Mgc3VwcGxpZWQgdG8gYXJncF9wYXJzZS4gIE1heSBiZSBtb2RpZmllZC4gICovCisrICB1bnNpZ25lZCBmbGFnczsKKysKKysgIC8qIFdoaWxlIGNhbGxpbmcgYSBwYXJzaW5nIGZ1bmN0aW9uIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfQVJHLCB0aGlzIGlzIHRoZQorKyAgICAgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGFyZywgc3RhcnRpbmcgYXQgemVybywgYW5kIGluY3JlbWVudGVkIGFmdGVyIGVhY2gKKysgICAgIHN1Y2ggY2FsbCByZXR1cm5zLiAgQXQgYWxsIG90aGVyIHRpbWVzLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygc3VjaAorKyAgICAgYXJndW1lbnRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gICovCisrICB1bnNpZ25lZCBhcmdfbnVtOworKworKyAgLyogSWYgbm9uLXplcm8sIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBmb2xsb3dpbmcgYSBzcGVjaWFsCisrICAgICBgLS0nIGFyZ3VtZW50ICh3aGljaCBwcmV2ZW50cyBhbnl0aGluZyBmb2xsb3dpbmcgYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYW4KKysgICAgIG9wdGlvbikuICBPbmx5IHNldCBvbmNlIGFyZ3VtZW50IHBhcnNpbmcgaGFzIHByb2NlZWRlZCBwYXN0IHRoaXMgcG9pbnQuICovCisrICBpbnQgcXVvdGVkOworKworKyAgLyogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgcGFzc2VkIGluIGZyb20gdGhlIHVzZXIuICAqLworKyAgdm9pZCAqaW5wdXQ7CisrICAvKiBWYWx1ZXMgdG8gcGFzcyB0byBjaGlsZCBwYXJzZXJzLiAgVGhpcyB2ZWN0b3Igd2lsbCBiZSB0aGUgc2FtZSBsZW5ndGggYXMKKysgICAgIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZm9yIHRoZSBjdXJyZW50IHBhcnNlci4gICovCisrICB2b2lkICoqY2hpbGRfaW5wdXRzOworKworKyAgLyogRm9yIHRoZSBwYXJzZXIncyB1c2UuICBJbml0aWFsaXplZCB0byAwLiAgKi8KKysgIHZvaWQgKmhvb2s7CisrCisrICAvKiBUaGUgbmFtZSB1c2VkIHdoZW4gcHJpbnRpbmcgbWVzc2FnZXMuICBUaGlzIGlzIGluaXRpYWxpemVkIHRvIEFSR1ZbMF0sCisrICAgICBvciBQUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpZiB0aGF0IGlzIHVuYXZhaWxhYmxlLiAgKi8KKysgIGNoYXIgKm5hbWU7CisrCisrICAvKiBTdHJlYW1zIHVzZWQgd2hlbiBhcmdwIHByaW50cyBzb21ldGhpbmcuICAqLworKyAgRklMRSAqZXJyX3N0cmVhbTsJCS8qIEZvciBlcnJvcnM7IGluaXRpYWxpemVkIHRvIHN0ZGVyci4gKi8KKysgIEZJTEUgKm91dF9zdHJlYW07CQkvKiBGb3IgaW5mb3JtYXRpb247IGluaXRpYWxpemVkIHRvIHN0ZG91dC4gKi8KKysKKysgIHZvaWQgKnBzdGF0ZTsJCQkvKiBQcml2YXRlLCBmb3IgdXNlIGJ5IGFyZ3AuICAqLworK307CisrDAorKy8qIEZsYWdzIGZvciBhcmdwX3BhcnNlIChub3RlIHRoYXQgdGhlIGRlZmF1bHRzIGFyZSB0aG9zZSB0aGF0IGFyZQorKyAgIGNvbnZlbmllbnQgZm9yIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcpOiAqLworKworKy8qIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBBUkdWLiAgTm9ybWFsbHkgKGFuZCBhbHdheXMgdW5sZXNzCisrICAgQVJHUF9OT19FUlJTIGlzIHNldCkgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFyZ3VtZW50IHZlY3RvciBpcworKyAgIHNraXBwZWQgZm9yIG9wdGlvbiBwYXJzaW5nIHB1cnBvc2VzLCBhcyBpdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvZ3JhbSBuYW1lCisrICAgaW4gYSBjb21tYW5kIGxpbmUuICAqLworKyNkZWZpbmUgQVJHUF9QQVJTRV9BUkdWMCAgMHgwMQorKworKy8qIERvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGZvciB1bmtub3duIG9wdGlvbnMgdG8gc3RkZXJyOyB1bmxlc3MgdGhpcyBmbGFnCisrICAgaXMgc2V0LCBBUkdQX1BBUlNFX0FSR1YwIGlzIGlnbm9yZWQsIGFzIEFSR1ZbMF0gaXMgdXNlZCBhcyB0aGUgcHJvZ3JhbQorKyAgIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzLiAgVGhpcyBmbGFnIGltcGxpZXMgQVJHUF9OT19FWElUIChvbiB0aGUKKysgICBhc3N1bXB0aW9uIHRoYXQgc2lsZW50IGV4aXRpbmcgdXBvbiBlcnJvcnMgaXMgYmFkIGJlaGF2aW91cikuICAqLworKyNkZWZpbmUgQVJHUF9OT19FUlJTCTB4MDIKKysKKysvKiBEb24ndCBwYXJzZSBhbnkgbm9uLW9wdGlvbiBhcmdzLiAgTm9ybWFsbHkgbm9uLW9wdGlvbiBhcmdzIGFyZSBwYXJzZWQgYnkKKysgICBjYWxsaW5nIHRoZSBwYXJzZSBmdW5jdGlvbnMgd2l0aCBhIGtleSBvZiBBUkdQX0tFWV9BUkcsIGFuZCB0aGUgYWN0dWFsIGFyZworKyAgIGFzIHRoZSB2YWx1ZS4gIFNpbmNlIGl0J3MgaW1wb3NzaWJsZSB0byBrbm93IHdoaWNoIHBhcnNlIGZ1bmN0aW9uIHdhbnRzIHRvCisrICAgaGFuZGxlIGl0LCBlYWNoIG9uZSBpcyBjYWxsZWQgaW4gdHVybiwgdW50aWwgb25lIHJldHVybnMgMCBvciBhbiBlcnJvcgorKyAgIG90aGVyIHRoYW4gQVJHUF9FUlJfVU5LTk9XTjsgaWYgYW4gYXJndW1lbnQgaXMgaGFuZGxlZCBieSBubyBvbmUsIHRoZQorKyAgIGFyZ3BfcGFyc2UgcmV0dXJucyBwcmVtYXR1cmVseSAoYnV0IHdpdGggYSByZXR1cm4gdmFsdWUgb2YgMCkuICBJZiBhbGwKKysgICBhcmdzIGhhdmUgYmVlbiBwYXJzZWQgd2l0aG91dCBlcnJvciwgYWxsIHBhcnNpbmcgZnVuY3Rpb25zIGFyZSBjYWxsZWQgb25lCisrICAgbGFzdCB0aW1lIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfRU5ELiAgVGhpcyBmbGFnIG5lZWRuJ3Qgbm9ybWFsbHkgYmUgc2V0LAorKyAgIGFzIHRoZSBub3JtYWwgYmVoYXZpb3IgaXMgdG8gc3RvcCBwYXJzaW5nIGFzIHNvb24gYXMgc29tZSBhcmd1bWVudCBjYW4ndAorKyAgIGJlIGhhbmRsZWQuICAqLworKyNkZWZpbmUgQVJHUF9OT19BUkdTCTB4MDQKKysKKysvKiBQYXJzZSBvcHRpb25zIGFuZCBhcmd1bWVudHMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBvY2N1ciBvbiB0aGUgY29tbWFuZAorKyAgIGxpbmUgLS0gbm9ybWFsbHkgdGhleSdyZSByZWFycmFuZ2VkIHNvIHRoYXQgYWxsIG9wdGlvbnMgY29tZSBmaXJzdC4gKi8KKysjZGVmaW5lIEFSR1BfSU5fT1JERVIJMHgwOAorKworKy8qIERvbid0IHByb3ZpZGUgdGhlIHN0YW5kYXJkIGxvbmcgb3B0aW9uIC0taGVscCwgd2hpY2ggY2F1c2VzIHVzYWdlIGFuZAorKyAgICAgIG9wdGlvbiBoZWxwIGluZm9ybWF0aW9uIHRvIGJlIG91dHB1dCB0byBzdGRvdXQsIGFuZCBleGl0ICgwKSBjYWxsZWQuICovCisrI2RlZmluZSBBUkdQX05PX0hFTFAJMHgxMAorKworKy8qIERvbid0IGV4aXQgb24gZXJyb3JzICh0aGV5IG1heSBzdGlsbCByZXN1bHQgaW4gZXJyb3IgbWVzc2FnZXMpLiAgKi8KKysjZGVmaW5lIEFSR1BfTk9fRVhJVAkweDIwCisrCisrLyogVXNlIHRoZSBnbnUgZ2V0b3B0IGBsb25nLW9ubHknIHJ1bGVzIGZvciBwYXJzaW5nIGFyZ3VtZW50cy4gICovCisrI2RlZmluZSBBUkdQX0xPTkdfT05MWQkweDQwCisrCisrLyogVHVybnMgb2ZmIGFueSBtZXNzYWdlLXByaW50aW5nL2V4aXRpbmcgb3B0aW9ucy4gICovCisrI2RlZmluZSBBUkdQX1NJTEVOVCAgICAoQVJHUF9OT19FWElUIHwgQVJHUF9OT19FUlJTIHwgQVJHUF9OT19IRUxQKQorKworKy8qIFBhcnNlIHRoZSBvcHRpb25zIHN0cmluZ3MgaW4gQVJHQyAmIEFSR1YgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zIGluIEFSR1AuCisrICAgRkxBR1MgaXMgb25lIG9mIHRoZSBBUkdQXyBmbGFncyBhYm92ZS4gIElmIEFSR19JTkRFWCBpcyBub24tTlVMTCwgdGhlCisrICAgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgdW5wYXJzZWQgb3B0aW9uIGlzIHJldHVybmVkIGluIGl0LiAgSWYgYW4KKysgICB1bmtub3duIG9wdGlvbiBpcyBwcmVzZW50LCBBUkdQX0VSUl9VTktOT1dOIGlzIHJldHVybmVkOyBpZiBzb21lIHBhcnNlcgorKyAgIHJvdXRpbmUgcmV0dXJuZWQgYSBub24temVybyB2YWx1ZSwgaXQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSAwIGlzCisrICAgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIG1heSBhbHNvIGNhbGwgZXhpdCB1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnCisrICAgaXMgc2V0LiAgSU5QVVQgaXMgYSBwb2ludGVyIHRvIGEgdmFsdWUgdG8gYmUgcGFzc2VkIGluIHRvIHRoZSBwYXJzZXIuICAqLworK2V4dGVybiBlcnJvcl90IGFyZ3BfcGFyc2UgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorKwkJCSAgIGludCBfX2FyZ2MsIGNoYXIgKipfX3Jlc3RyaWN0IF9fYXJndiwKKysJCQkgICB1bnNpZ25lZCBfX2ZsYWdzLCBpbnQgKl9fcmVzdHJpY3QgX19hcmdfaW5kZXgsCisrCQkJICAgdm9pZCAqX19yZXN0cmljdCBfX2lucHV0KTsKKysMCisrLyogR2xvYmFsIHZhcmlhYmxlcy4gICovCisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdAorKyAgIG9wdGlvbiAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoCisrICAgd2lsbCBwcmludCB0aGlzIHN0cmluZyBmb2xsb3dlZCBieSBhIG5ld2xpbmUgYW5kIGV4aXQgKHVubGVzcyB0aGUKKysgICBBUkdQX05PX0VYSVQgZmxhZyBpcyB1c2VkKS4gIE92ZXJyaWRkZW4gYnkgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4gICovCisrZXh0ZXJuIF9fY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb247CisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdAorKyAgIG9wdGlvbiAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoCisrICAgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aXRoIGEgc3RyZWFtIHRvIHByaW50IHRoZSB2ZXJzaW9uIHRvIGFuZCBhIHBvaW50ZXIgdG8KKysgICB0aGUgY3VycmVudCBwYXJzaW5nIHN0YXRlLCBhbmQgdGhlbiBleGl0cyAodW5sZXNzIHRoZSBBUkdQX05PX0VYSVQgZmxhZyBpcworKyAgIHVzZWQpLiAgVGhpcyB2YXJpYWJsZSB0YWtlcyBwcmVjZWRlbnQgb3ZlciBBUkdQX1BST0dSQU1fVkVSU0lPTi4gICovCisrZXh0ZXJuIHZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKysJCQkJCSAgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QKKysJCQkJCSAgX19zdGF0ZSk7CisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgaXQgc2hvdWxkIHBvaW50IHRvIHN0cmluZyB0aGF0IGlzCisrICAgdGhlIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcyBmb3IgdGhlIHByb2dyYW0uICBJdCB3aWxsIGJlIHByaW50ZWQgYnkKKysgICBhcmdwX2hlbHAgaWYgdGhlIEFSR1BfSEVMUF9CVUdfQUREUiBmbGFnIGlzIHNldCAoYXMgaXQgaXMgYnkgdmFyaW91cworKyAgIHN0YW5kYXJkIGhlbHAgbWVzc2FnZXMpLCBlbWJlZGRlZCBpbiBhIHNlbnRlbmNlIHRoYXQgc2F5cyBzb21ldGhpbmcgbGlrZQorKyAgIGBSZXBvcnQgYnVncyB0byBBRERSLicuICAqLworK2V4dGVybiBfX2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzczsKKysKKysvKiBUaGUgZXhpdCBzdGF0dXMgdGhhdCBhcmdwIHdpbGwgdXNlIHdoZW4gZXhpdGluZyBkdWUgdG8gYSBwYXJzaW5nIGVycm9yLgorKyAgIElmIG5vdCBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCB0aGlzIGRlZmF1bHRzIHRvIEVYX1VTQUdFIGZyb20KKysgICA8c3lzZXhpdHMuaD4uICAqLworK2V4dGVybiBlcnJvcl90IGFyZ3BfZXJyX2V4aXRfc3RhdHVzOworKwwKKysvKiBGbGFncyBmb3IgYXJncF9oZWxwLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9VU0FHRQkJMHgwMSAvKiBhIFVzYWdlOiBtZXNzYWdlLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NIT1JUX1VTQUdFCTB4MDIgLyogICIgYnV0IGRvbid0IGFjdHVhbGx5IHByaW50IG9wdGlvbnMuICovCisrI2RlZmluZSBBUkdQX0hFTFBfU0VFCQkweDA0IC8qIGEgYFRyeSAuLi4gZm9yIG1vcmUgaGVscCcgbWVzc2FnZS4gKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9MT05HCQkweDA4IC8qIGEgbG9uZyBoZWxwIG1lc3NhZ2UuICovCisrI2RlZmluZSBBUkdQX0hFTFBfUFJFX0RPQwkweDEwIC8qIGRvYyBzdHJpbmcgcHJlY2VkaW5nIGxvbmcgaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfUE9TVF9ET0MJMHgyMCAvKiBkb2Mgc3RyaW5nIGZvbGxvd2luZyBsb25nIGhlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0RPQwkJKEFSR1BfSEVMUF9QUkVfRE9DIHwgQVJHUF9IRUxQX1BPU1RfRE9DKQorKyNkZWZpbmUgQVJHUF9IRUxQX0JVR19BRERSCTB4NDAgLyogYnVnIHJlcG9ydCBhZGRyZXNzICovCisrI2RlZmluZSBBUkdQX0hFTFBfTE9OR19PTkxZCTB4ODAgLyogbW9kaWZ5IG91dHB1dCBhcHByb3ByaWF0ZWx5IHRvCisrCQkJCQlyZWZsZWN0IEFSR1BfTE9OR19PTkxZIG1vZGUuICAqLworKworKy8qIFRoZXNlIEFSR1BfSEVMUCBmbGFncyBhcmUgb25seSB1bmRlcnN0b29kIGJ5IGFyZ3Bfc3RhdGVfaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfRVhJVF9FUlIJMHgxMDAgLyogQ2FsbCBleGl0KDEpIGluc3RlYWQgb2YgcmV0dXJuaW5nLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9FWElUX09LCTB4MjAwIC8qIENhbGwgZXhpdCgwKSBpbnN0ZWFkIG9mIHJldHVybmluZy4gICovCisrCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGFmdGVyIGEgcHJvZ3JhbSBjb21tYW5kIGxpbmUgcGFyc2luZyBlcnJvciwgaWYgYW4KKysgICBlcnJvciBtZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gcHJpbnRlZC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX0VSUiBcCisrICAoQVJHUF9IRUxQX1NFRSB8IEFSR1BfSEVMUF9FWElUX0VSUikKKysvKiBUaGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gYWZ0ZXIgYSBwcm9ncmFtIGNvbW1hbmQgbGluZSBwYXJzaW5nIGVycm9yLCBpZiBubworKyAgIG1vcmUgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBwcmludGVkLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TVERfVVNBR0UgXAorKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9TRUUgfCBBUkdQX0hFTFBfRVhJVF9FUlIpCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGluIHJlc3BvbnNlIHRvIGEgLS1oZWxwIG9wdGlvbi4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX0hFTFAgXAorKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9MT05HIHwgQVJHUF9IRUxQX0VYSVRfT0sgXAorKyAgIHwgQVJHUF9IRUxQX0RPQyB8IEFSR1BfSEVMUF9CVUdfQUREUikKKysKKysvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIEZMQUdTIGFyZSBmcm9tIHRoZSBzZXQKKysgICBBUkdQX0hFTFBfKi4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCSAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorKwkJICAgICAgIHVuc2lnbmVkIF9fZmxhZ3MsIGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lKTsKKysMCisrLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIGFyZ3AKKysgICBwYXJzaW5nIHJvdXRpbmUgKHRodXMgdGFraW5nIGFuIGFyZ3Bfc3RhdGUgc3RydWN0dXJlIGFzIHRoZSBmaXJzdAorKyAgIGFyZ3VtZW50KS4gIFRoZXkgbWF5IG9yIG1heSBub3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCwgZGVwZW5kaW5nCisrICAgb24gdGhlIGZsYWdzIGluIFNUQVRFIC0tIGluIGFueSBjYXNlLCB0aGUgY2FsbGVyIHNob3VsZCBiZSBwcmVwYXJlZCBmb3IKKysgICB0aGVtICpub3QqIHRvIGV4aXQsIGFuZCBzaG91bGQgcmV0dXJuIGFuIGFwcHJvcGlhdGUgZXJyb3IgYWZ0ZXIgY2FsbGluZworKyAgIHRoZW0uICBbYXJncF91c2FnZSAmIGFyZ3BfZXJyb3Igc2hvdWxkIHByb2JhYmx5IGJlIGNhbGxlZCBhcmdwX3N0YXRlXy4uLiwKKysgICBidXQgdGhleSdyZSB1c2VkIG9mdGVuIGVub3VnaCB0aGF0IHRoZXkgc2hvdWxkIGJlIHNob3J0XSAgKi8KKysKKysvKiBPdXRwdXQsIGlmIGFwcHJvcHJpYXRlLCBhIHVzYWdlIG1lc3NhZ2UgZm9yIFNUQVRFIHRvIFNUUkVBTS4gIEZMQUdTIGFyZQorKyAgIGZyb20gdGhlIHNldCBBUkdQX0hFTFBfKi4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9zdGF0ZV9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisrCQkJICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorKwkJCSAgICAgdW5zaWduZWQgaW50IF9fZmxhZ3MpOworKy8qIFBvc3NpYmx5IG91dHB1dCB0aGUgc3RhbmRhcmQgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBzdGRlcnIgYW5kIGV4aXQuICAqLworK2V4dGVybiB2b2lkIGFyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpOworKworKy8qIElmIGFwcHJvcHJpYXRlLCBwcmludCB0aGUgcHJpbnRmIHN0cmluZyBGTVQgYW5kIGZvbGxvd2luZyBhcmdzLCBwcmVjZWRlZAorKyAgIGJ5IHRoZSBwcm9ncmFtIG5hbWUgYW5kIGA6JywgdG8gc3RkZXJyLCBhbmQgZm9sbG93ZWQgYnkgYSBgVHJ5IC4uLiAtLWhlbHAnCisrICAgbWVzc2FnZSwgdGhlbiBleGl0ICgxKS4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9lcnJvciAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CisrLyogU2ltaWxhciB0byB0aGUgc3RhbmRhcmQgZ251IGVycm9yLXJlcG9ydGluZyBmdW5jdGlvbiBlcnJvcigpLCBidXQgd2lsbAorKyAgIHJlc3BlY3QgdGhlIEFSR1BfTk9fRVhJVCBhbmQgQVJHUF9OT19FUlJTIGZsYWdzIGluIFNUQVRFLCBhbmQgd2lsbCBwcmludAorKyAgIHRvIFNUQVRFLT5lcnJfc3RyZWFtLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGFyZ3VtZW50IHBhcnNpbmcgY29kZSB0aGF0IGlzCisrICAgc2hhcmVkIGJldHdlZW4gcHJvZ3JhbSBzdGFydHVwICh3aGVuIGV4aXRpbmcgaXMgZGVzaXJlZCkgYW5kIHJ1bnRpbWUKKysgICBvcHRpb24gcGFyc2luZyAod2hlbiB0eXBpY2FsbHkgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbnN0ZWFkKS4gIFRoZQorKyAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBhcmdwX2Vycm9yIGlzIHRoYXQgdGhlIGxhdHRlciBpcyBmb3IKKysgICAqcGFyc2luZyBlcnJvcnMqLCBhbmQgdGhlIGZvcm1lciBpcyBmb3Igb3RoZXIgcHJvYmxlbXMgdGhhdCBvY2N1ciBkdXJpbmcKKysgICBwYXJzaW5nIGJ1dCBkb24ndCByZWZsZWN0IGEgKHN5bnRhY3RpYykgcHJvYmxlbSB3aXRoIHRoZSBpbnB1dC4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9mYWlsdXJlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisrCQkJICBpbnQgX19zdGF0dXMsIGludCBfX2Vycm51bSwKKysJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDUpKSk7CisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBvcHRpb24gT1BUIGlzIGEgdmFsaWQgc2hvcnQgb3B0aW9uLiAgKi8KKytleHRlcm4gaW50IF9vcHRpb25faXNfc2hvcnQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKytleHRlcm4gaW50IF9fb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrCisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBvcHRpb24gT1BUIGlzIGluIGZhY3QgdGhlIGxhc3QgKHVudXNlZCkgZW50cnkgaW4gYW4KKysgICBvcHRpb25zIGFycmF5LiAgKi8KKytleHRlcm4gaW50IF9vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrZXh0ZXJuIGludCBfX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKysKKysvKiBSZXR1cm4gdGhlIGlucHV0IGZpZWxkIGZvciBBUkdQIGluIHRoZSBwYXJzZXIgY29ycmVzcG9uZGluZyB0byBTVEFURTsgdXNlZAorKyAgIGJ5IHRoZSBoZWxwIHJvdXRpbmVzLiAgKi8KKysvKiBXZSB0aGluayB0aGlzIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQgKi8KKytleHRlcm4gdm9pZCAqX19hcmdwX2lucHV0IChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCQkgICBfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUpCisrICAgICBfX1RIUk9XOworKwwKKysjaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKKysKKysjIGlmbmRlZiBBUkdQX0VJCisrIyAgZGVmaW5lIEFSR1BfRUkgX19leHRlcm5faW5saW5lCisrIyBlbmRpZgorKworK0FSR1BfRUkgdm9pZAorK2FyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpCisreworKyAgYXJncF9zdGF0ZV9oZWxwIChfX3N0YXRlLCBzdGRlcnIsIEFSR1BfSEVMUF9TVERfVVNBR0UpOworK30KKysKKytBUkdQX0VJIGludAorK19fTlRIIChfX29wdGlvbl9pc19zaG9ydCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSkKKyt7CisrICBpZiAoX19vcHQtPmZsYWdzICYgT1BUSU9OX0RPQykKKysgICAgcmV0dXJuIDA7CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbnQgX19rZXkgPSBfX29wdC0+a2V5OworKyAgICAgIHJldHVybiBfX2tleSA+IDAgJiYgX19rZXkgPD0gVUNIQVJfTUFYICYmIGlzcHJpbnQgKF9fa2V5KTsKKysgICAgfQorK30KKysKKytBUkdQX0VJIGludAorK19fTlRIIChfX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkpCisreworKyAgcmV0dXJuICFfX29wdC0+a2V5ICYmICFfX29wdC0+bmFtZSAmJiAhX19vcHQtPmRvYyAmJiAhX19vcHQtPmdyb3VwOworK30KKysjZW5kaWYgLyogVXNlIGV4dGVybiBpbmxpbmVzLiAgKi8KKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBhcmdwLmggKi8KK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI5MWVkZmUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmgKK0BAIC0wLDAgKzEsMTM2IEBACisrLyogSW50ZXJuYWwgZGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisrICAgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTQsMTk5Ni0xOTk5LDIwMDEsMjAwMywyMDA0CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZm5kZWYgX0dFVE9QVF9JTlRfSAorKyNkZWZpbmUgX0dFVE9QVF9JTlRfSCAgMQorKworK2V4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2xvbmdfb25seSkgYXR0cmlidXRlX2hpZGRlbjsKKysKKysKKysvKiBSZWVudHJhbnQgdmVyc2lvbnMgd2hpY2ggY2FuIGhhbmRsZSBwYXJzaW5nIG11bHRpcGxlIGFyZ3VtZW50CisrICAgdmVjdG9ycyBhdCB0aGUgc2FtZSB0aW1lLiAgKi8KKysKKysvKiBGb3IgX19vcmRlcmluZyBtZW1iZXIgKi8KKytlbnVtIHsKKysgICAgICAgUkVRVUlSRV9PUkRFUiwgUEVSTVVURSwgUkVUVVJOX0lOX09SREVSCisrfTsKKysKKysvKiBEYXRhIHR5cGUgZm9yIHJlZW50cmFudCBmdW5jdGlvbnMuICAqLworKworK3N0cnVjdCBfZ2V0b3B0X2RhdGEKKyt7CisrICAvKiBUaGVzZSBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgY29ycmVzcG9uZGluZyBnbG9iYWwKKysgICAgIHZhcmlhYmxlcywgZXhjZXB0IHRoYXQgdGhleSBhcmUgdXNlZCBmb3IgdGhlIHJlZW50cmFudAorKyAgICAgdmVyc2lvbnMgb2YgZ2V0b3B0LiAgKi8KKysgIGludCBvcHRpbmQ7CisrICBpbnQgb3B0ZXJyOworKyAgY2hhciAqb3B0YXJnOworKyAgc21hbGx1aW50IG9wdG9wdDsgLyogd2Ugc3RvcmUgY2hhcmFjdGVycyBoZXJlLCBhIGJ5dGUgaXMgZW5vdWdoICovCisrCisrICAvKiBJbnRlcm5hbCBtZW1iZXJzLiAgKi8KKysKKysgIC8qIFRydWUgaWYgdGhlIGludGVybmFsIG1lbWJlcnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiAgKi8KKysgIHNtYWxsaW50IF9faW5pdGlhbGl6ZWQ7CisrCisrICAvKiBEZXNjcmliZSBob3cgdG8gZGVhbCB3aXRoIG9wdGlvbnMgdGhhdCBmb2xsb3cgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzLgorKworKyAgICAgSWYgdGhlIGNhbGxlciBkaWQgbm90IHNwZWNpZnkgYW55dGhpbmcsCisrICAgICB0aGUgZGVmYXVsdCBpcyBSRVFVSVJFX09SREVSIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorKyAgICAgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgorKworKyAgICAgUkVRVUlSRV9PUkRFUiBtZWFucyBkb24ndCByZWNvZ25pemUgdGhlbSBhcyBvcHRpb25zOworKyAgICAgc3RvcCBvcHRpb24gcHJvY2Vzc2luZyB3aGVuIHRoZSBmaXJzdCBub24tb3B0aW9uIGlzIHNlZW4uCisrICAgICBUaGlzIGlzIHdoYXQgVW5peCBkb2VzLgorKyAgICAgVGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBpcyBzZWxlY3RlZCBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQKKysgICAgIHZhcmlhYmxlIFBPU0lYTFlfQ09SUkVDVCwgb3IgdXNpbmcgYCsnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKysgICAgIG9mIHRoZSBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzLgorKworKyAgICAgUEVSTVVURSBpcyB0aGUgZGVmYXVsdC4gIFdlIHBlcm11dGUgdGhlIGNvbnRlbnRzIG9mIEFSR1YgYXMgd2UKKysgICAgIHNjYW4sIHNvIHRoYXQgZXZlbnR1YWxseSBhbGwgdGhlIG5vbi1vcHRpb25zIGFyZSBhdCB0aGUgZW5kLgorKyAgICAgVGhpcyBhbGxvd3Mgb3B0aW9ucyB0byBiZSBnaXZlbiBpbiBhbnkgb3JkZXIsIGV2ZW4gd2l0aCBwcm9ncmFtcworKyAgICAgdGhhdCB3ZXJlIG5vdCB3cml0dGVuIHRvIGV4cGVjdCB0aGlzLgorKworKyAgICAgUkVUVVJOX0lOX09SREVSIGlzIGFuIG9wdGlvbiBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgdGhhdCB3ZXJlCisrICAgICB3cml0dGVuIHRvIGV4cGVjdCBvcHRpb25zIGFuZCBvdGhlciBBUkdWLWVsZW1lbnRzIGluIGFueSBvcmRlcgorKyAgICAgYW5kIHRoYXQgY2FyZSBhYm91dCB0aGUgb3JkZXJpbmcgb2YgdGhlIHR3by4gIFdlIGRlc2NyaWJlIGVhY2gKKysgICAgIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGFzIGlmIGl0IHdlcmUgdGhlIGFyZ3VtZW50IG9mIGFuIG9wdGlvbgorKyAgICAgd2l0aCBjaGFyYWN0ZXIgY29kZSAxLiAgVXNpbmcgYC0nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisrICAgICBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKysKKysgICAgIFRoZSBzcGVjaWFsIGFyZ3VtZW50IGAtLScgZm9yY2VzIGFuIGVuZCBvZiBvcHRpb24tc2Nhbm5pbmcgcmVnYXJkbGVzcworKyAgICAgb2YgdGhlIHZhbHVlIG9mIGBvcmRlcmluZycuICBJbiB0aGUgY2FzZSBvZiBSRVRVUk5fSU5fT1JERVIsIG9ubHkKKysgICAgIGAtLScgY2FuIGNhdXNlIGBnZXRvcHQnIHRvIHJldHVybiAtMSB3aXRoIGBvcHRpbmQnICE9IEFSR0MuICAqLworKyAgc21hbGxpbnQgX19vcmRlcmluZzsKKysKKysgIC8qIElmIHRoZSBQT1NJWExZX0NPUlJFQ1QgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LiAgKi8KKysgIHNtYWxsaW50IF9fcG9zaXhseV9jb3JyZWN0OworKworKyAgLyogVGhlIG5leHQgY2hhciB0byBiZSBzY2FubmVkIGluIHRoZSBvcHRpb24tZWxlbWVudAorKyAgICAgaW4gd2hpY2ggdGhlIGxhc3Qgb3B0aW9uIGNoYXJhY3RlciB3ZSByZXR1cm5lZCB3YXMgZm91bmQuCisrICAgICBUaGlzIGFsbG93cyB1cyB0byBwaWNrIHVwIHRoZSBzY2FuIHdoZXJlIHdlIGxlZnQgb2ZmLgorKworKyAgICAgSWYgdGhpcyBpcyB6ZXJvLCBvciBhIG51bGwgc3RyaW5nLCBpdCBtZWFucyByZXN1bWUgdGhlIHNjYW4KKysgICAgIGJ5IGFkdmFuY2luZyB0byB0aGUgbmV4dCBBUkdWLWVsZW1lbnQuICAqLworKyAgY2hhciAqX19uZXh0Y2hhcjsKKysKKysKKysgIC8qIEhhbmRsZSBwZXJtdXRhdGlvbiBvZiBhcmd1bWVudHMuICAqLworKworKyAgLyogRGVzY3JpYmUgdGhlIHBhcnQgb2YgQVJHViB0aGF0IGNvbnRhaW5zIG5vbi1vcHRpb25zIHRoYXQgaGF2ZQorKyAgICAgYmVlbiBza2lwcGVkLiAgYGZpcnN0X25vbm9wdCcgaXMgdGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0CisrICAgICBvZiB0aGVtOyBgbGFzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBvZiB0aGVtLiAgKi8KKysKKysgIGludCBfX2ZpcnN0X25vbm9wdDsKKysgIGludCBfX2xhc3Rfbm9ub3B0OworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUworKyAgaW50IF9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW47CisrICBpbnQgX19ub25vcHRpb25fZmxhZ3NfbGVuOworKyMgZW5kaWYKKyt9OworKworKy8qIFRoZSBpbml0aWFsaXplciBpcyBuZWNlc3NhcnkgdG8gc2V0IE9QVElORCBhbmQgT1BURVJSIHRvIHRoZWlyCisrICAgZGVmYXVsdCB2YWx1ZXMgYW5kIHRvIGNsZWFyIHRoZSBpbml0aWFsaXphdGlvbiBmbGFnLiAgKi8KKysjZGVmaW5lIF9HRVRPUFRfREFUQV9JTklUSUFMSVpFUiAgICAgICB7IDEsIDEgfQorKworKyNpZiAwIC8qIGZpcnN0IGlzIHN0YXRpYyBvbiB1Q2xpYmMsIHRoZSBvdGhlcnMgbm90IHVzZWQgKi8KKytleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWxfciAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2xvbmdfb25seSwgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfR05VX0dFVE9QVF9fIHx8IGRlZmluZWQgX19VQ0xJQkNfSEFTX0dFVE9QVF9MT05HX18KKysjaWZuZGVmIF9fbmVlZF9nZXRvcHQKKytleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19yIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysKKytleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19vbmx5X3IgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOworKyNlbmRpZgorKyNlbmRpZgorKyNlbmRpZiAvKiBnZXRvcHRfaW50LmggKi8KK2RpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRvcHQuYyBiL2xpYmMvdW5pc3RkL2dldG9wdC5jCitpbmRleCBmNjM0ODJiLi5kYjVlMTJjIDEwMDY0NAorLS0tIGEvbGliYy91bmlzdGQvZ2V0b3B0LmMKKysrKyBiL2xpYmMvdW5pc3RkL2dldG9wdC5jCitAQCAtMTA1LDcgKzEwNSw3IEBACisgICAgdGhleSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHJlbGF0aXZlIG9yZGVyIG9mIG9wdGlvbnMgYW5kIG90aGVyIGFyZ3VtZW50cy4gICovCisgCisgI2luY2x1ZGUgPGdldG9wdC5oPgorLSNpbmNsdWRlICJnZXRvcHRfaW50LmgiCisrI2luY2x1ZGUgPGJpdHMvZ2V0b3B0X2ludC5oPgorIAorIAorIC8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gYGdldG9wdCcgdG8gdGhlIGNhbGxlci4KK0BAIC0xMTcwLDYgKzExNzAsMTUgQEAgZ2V0b3B0X2xvbmcgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKyAgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwgMCk7CisgfQorIAorK2ludAorK19nZXRvcHRfbG9uZ19yIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKKysgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQorK3sKKysgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsX3IgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkKTsKKyt9CisrCisgLyogTGlrZSBnZXRvcHRfbG9uZywgYnV0ICctJyBhcyB3ZWxsIGFzICctLScgY2FuIGluZGljYXRlIGEgbG9uZyBvcHRpb24uCisgICAgSWYgYW4gb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggJy0nIChub3QgJy0tJykgZG9lc24ndCBtYXRjaCBhIGxvbmcgb3B0aW9uLAorICAgIGJ1dCBkb2VzIG1hdGNoIGEgc2hvcnQgb3B0aW9uLCBpdCBpcyBwYXJzZWQgYXMgYSBzaG9ydCBvcHRpb24KK0BAIC0xMTgzLDQgKzExOTIsMTIgQEAgZ2V0b3B0X2xvbmdfb25seSAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorIH0KKyAjZW5kaWYgLyogX19VQ0xJQkNfSEFTX0dFVE9QVF9MT05HX18gKi8KKyAKKytpbnQKKytfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqb3B0X2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKKyt7CisrICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbF9yIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwgMSwgZCk7CisrfQorKworICNlbmRpZgkvKiBOb3QgRUxJREVfQ09ERS4gICovCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvTWFrZWZpbGUgYi9saWJ1YXJncC9NYWtlZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ1YWNkZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL01ha2VmaWxlCitAQCAtMCwwICsxLDE0IEBACisrIyBNYWtlZmlsZSBmb3IgdUNsaWJjIChsaWJ1YXJncCkKKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMTAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorKyMgQXV0aG9yKHMpOiBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vIGF0IHN0LmNvbT4KKysjCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKyMKKysKKyt0b3Bfc3JjZGlyPS4uLworK3RvcF9idWlsZGRpcj0uLi8KKytpbmNsdWRlICQodG9wX2J1aWxkZGlyKVJ1bGVzLm1haworK2FsbDogbGlicworK2luY2x1ZGUgTWFrZWZpbGUuaW4KKytpbmNsdWRlICQodG9wX3NyY2RpcilNYWtlcnVsZXMKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9NYWtlZmlsZS5pbiBiL2xpYnVhcmdwL01ha2VmaWxlLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQ5OGFiYgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvTWFrZWZpbGUuaW4KK0BAIC0wLDAgKzEsNzMgQEAKKysjIE1ha2VmaWxlIGZvciB1Q2xpYmMgKGxpYnVhcmdwKQorKyMKKysjIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZC4KKysjIEF1dGhvcihzKTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrIyAgICAgICAgICAgIC0gRmlyc3QgaW1wbGVtZW50YXRpb24sIGVtYmVkZGVkIGludG8gbGliYworKyMgICAgICAgICAgICBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vIGF0IHN0LmNvbT4KKysjICAgICAgICAgICAgLSBSZXdvcmtlZCBmb3Igc3RhbmQtYWxvbmUgbGlidWFyZ3AgaW1wbGVtZW50YXRpb24KKysKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrIworKworK0NGTEFHUy1saWJ1YXJncCA6PSAtRE5PVF9JTl9saWJjIC1ESVNfSU5fbGlidWFyZ3AgJChTU1BfQUxMX0NGTEFHUykKKysKKytMREZMQUdTLWxpYnVhcmdwLnNvIDo9ICQoTERGTEFHUykKKysKKytMSUJTLWxpYnVhcmdwLnNvIDo9ICQoTElCUykKKysKKytsaWJ1YXJncF9GVUxMX05BTUUgOj0gbGlidWFyZ3AtJChWRVJTSU9OKS5zbworKworK2xpYnVhcmdwX0RJUiA6PSAkKHRvcF9zcmNkaXIpbGlidWFyZ3AKKytsaWJ1YXJncF9PVVQgOj0gJCh0b3BfYnVpbGRkaXIpbGlidWFyZ3AKKysKKytsaWJ1YXJncF9TUkMteSA6PQorK2xpYnVhcmdwX1NSQy0kKFVDTElCQ19IQVNfQVJHUCkgOj0gJChhZGRzdWZmaXggLmMsJChhZGRwcmVmaXggYXJncC0sIGJhIFwKKysJCQllZXhzdCBmbXRzdHJlYW0gZnMteGlubCBoZWxwIHBhcnNlIHB2IHB2aCB4aW5sKSkKKysKKytDRkxBR1MtYXJncC14aW5sLmMgPSAtZmdudTg5LWlubGluZQorKworK2xpYnVhcmdwX1NSQyA6PSAkKGFkZHByZWZpeCAkKGxpYnVhcmdwX0RJUikvLCQobGlidWFyZ3BfU1JDLXkpKQorK2xpYnVhcmdwX09CSiA6PSAkKHBhdHN1YnN0ICQobGlidWFyZ3BfRElSKS8lLmMsJChsaWJ1YXJncF9PVVQpLyUubywkKGxpYnVhcmdwX1NSQykpCisrCisrbGlidWFyZ3BfU1JDUyA6PSAkKGxpYnVhcmdwX1NSQykKKytsaWJ1YXJncF9PQkpTIDo9ICQobGlidWFyZ3BfT0JKKQorKworK2lmZXEgKCQoRE9QSUMpLHkpCisrbGlidWFyZ3AtYS15IDo9ICQobGlidWFyZ3BfT0JKUzoubz0ub3MpCisrZWxzZQorK2xpYnVhcmdwLWEteSA6PSAkKGxpYnVhcmdwX09CSlMpCisrZW5kaWYKKytsaWJ1YXJncC1zby15IDo9ICQobGlidWFyZ3BfT0JKUzoubz0ub3MpCisrCisrbGliLWEtJChVQ0xJQkNfSEFTX0FSR1ApICs9ICQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5hCisrbGliLXNvLSQoVUNMSUJDX0hBU19BUkdQKSArPSAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc28KKysKKytvYmpjbGVhbi15ICs9IENMRUFOX2xpYnVhcmdwCisrCisraWZlcSAoJChET01VTFRJKSxuKQorK2lmZXEgKCQoRE9QSUMpLHkpCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvOiAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3AuYSAkKGxpYmMuZGVwZW5kKQorK2Vsc2UKKyskKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc286ICQobGlidWFyZ3BfT1VUKS9saWJ1YXJncF9zby5hICQobGliYy5kZXBlbmQpCisrZW5kaWYKKysJJChjYWxsIGxpbmsuc28sJChsaWJ1YXJncF9GVUxMX05BTUUpLCQoTUFKT1JfVkVSU0lPTikpCisrZWxzZQorKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5zbzogJChsaWJ1YXJncF9PVVQpL2xpYnVhcmdwLm9TICQobGliYy5kZXBlbmQpCisrCSQoY2FsbCBsaW5rbS5zbywkKGxpYnVhcmdwX0ZVTExfTkFNRSksJChNQUpPUl9WRVJTSU9OKSkKKytlbmRpZgorKworKyQobGlidWFyZ3BfT1VUKS9saWJ1YXJncF9zby5hOiAkKGxpYnVhcmdwLXNvLXkpCisrCSQoUSkkKFJNKSAkQAorKwkkKGRvX2FyKQorKworKyQobGlidWFyZ3BfT1VUKS9saWJ1YXJncC5vUzogJChsaWJ1YXJncF9TUkNTKQorKwkkKFEpJChSTSkgJEAKKysJJChjb21waWxlLW0pCisrCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLmE6ICQobGlidWFyZ3AtYS15KQorKwkkKFEpJChJTlNUQUxMKSAtZCAkKGRpciAkQCkKKysJJChRKSQoUk0pICRACisrCSQoZG9fYXIpCisrCisrQ0xFQU5fbGlidWFyZ3A6CisrCSQoZG9fcm0pICQoYWRkcHJlZml4ICQobGlidWFyZ3BfT1VUKS8qLiwgbyBvcyBvUyBhKQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtYmEuYyBiL2xpYnVhcmdwL2FyZ3AtYmEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1MjJiMDIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtYmEuYworQEAgLTAsMCArMSwyNiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX0JVR19BRERSRVNTLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKy8qIElmIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCBpdCBzaG91bGQgcG9pbnQgdG8gc3RyaW5nIHRoYXQgaXMgdGhlCisrICAgYnVnLXJlcG9ydGluZyBhZGRyZXNzIGZvciB0aGUgcHJvZ3JhbS4gIEl0IHdpbGwgYmUgcHJpbnRlZCBieSBhcmdwX2hlbHAgaWYKKysgICB0aGUgQVJHUF9IRUxQX0JVR19BRERSIGZsYWcgaXMgc2V0IChhcyBpdCBpcyBieSB2YXJpb3VzIHN0YW5kYXJkIGhlbHAKKysgICBtZXNzYWdlcyksIGVtYmVkZGVkIGluIGEgc2VudGVuY2UgdGhhdCBzYXlzIHNvbWV0aGluZyBsaWtlIGBSZXBvcnQgYnVncyB0bworKyAgIEFERFIuJy4gICovCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYyBiL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ0NWI2OGQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYworQEAgLTAsMCArMSwzMiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9FUlJfRVhJVF9TVEFUVVMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysvKiBUaGUgZXhpdCBzdGF0dXMgdGhhdCBhcmdwIHdpbGwgdXNlIHdoZW4gZXhpdGluZyBkdWUgdG8gYSBwYXJzaW5nIGVycm9yLgorKyAgIElmIG5vdCBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCB0aGlzIGRlZmF1bHRzIHRvIEVYX1VTQUdFIGZyb20KKysgICA8c3lzZXhpdHMuaD4uICAqLworK2Vycm9yX3QgYXJncF9lcnJfZXhpdF9zdGF0dXMgPSBFWF9VU0FHRTsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjc1MjI3ZjkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKK0BAIC0wLDAgKzEsNDM5IEBACisrLyogV29yZC13cmFwcGluZyBhbmQgbGluZS10cnVuY2F0aW5nIHN0cmVhbXMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSwyMDAxLDIwMDIsMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKy8qIFRoaXMgcGFja2FnZSBlbXVsYXRlcyBnbGliYyBgbGluZV93cmFwX3N0cmVhbScgc2VtYW50aWNzIGZvciBzeXN0ZW1zIHRoYXQKKysgICBkb24ndCBoYXZlIHRoYXQuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiYXJncC1mbXRzdHJlYW0uaCIKKysKKysjaWZuZGVmIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKworKyNpZm5kZWYgaXNibGFuaworKyNkZWZpbmUgaXNibGFuayhjaCkgKChjaCk9PScgJyB8fCAoY2gpPT0nXHQnKQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyMgaW5jbHVkZSA8bGliaW8vbGliaW9QLmg+CisrIyBkZWZpbmUgX192c25wcmludGYocywgbCwgZiwgYSkgX0lPX3ZzbnByaW50ZiAocywgbCwgZiwgYSkKKysjZWxzZQorKyMgZGVmaW5lIF9fdnNucHJpbnRmKHMsIGwsIGYsIGEpIHZzbnByaW50ZiAocywgbCwgZiwgYSkKKysjZW5kaWYKKysKKysjZGVmaW5lIElOSVRfQlVGX1NJWkUgMjAwCisrI2RlZmluZSBQUklOVEZfU0laRV9HVUVTUyAxNTAKKysKKysvKiBSZXR1cm4gYW4gYXJncF9mbXRzdHJlYW0gdGhhdCBvdXRwdXRzIHRvIFNUUkVBTSwgYW5kIHdoaWNoIHByZWZpeGVzIGxpbmVzCisrICAgd3JpdHRlbiBvbiBpdCB3aXRoIExNQVJHSU4gc3BhY2VzIGFuZCBsaW1pdHMgdGhlbSB0byBSTUFSR0lOIGNvbHVtbnMKKysgICB0b3RhbC4gIElmIFdNQVJHSU4gPj0gMCwgd29yZHMgdGhhdCBleHRlbmQgcGFzdCBSTUFSR0lOIGFyZSB3cmFwcGVkIGJ5CisrICAgcmVwbGFjaW5nIHRoZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGVtIHdpdGggYSBuZXdsaW5lIGFuZCBXTUFSR0lOIHNwYWNlcy4KKysgICBPdGhlcndpc2UsIGNoYXJzIGJleW9uZCBSTUFSR0lOIGFyZSBzaW1wbHkgZHJvcHBlZCB1bnRpbCBhIG5ld2xpbmUuCisrICAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gICovCisrYXJncF9mbXRzdHJlYW1fdAorK19fYXJncF9tYWtlX2ZtdHN0cmVhbSAoRklMRSAqc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG1hcmdpbiwgc2l6ZV90IHJtYXJnaW4sIHNzaXplX3Qgd21hcmdpbikKKyt7CisrICBhcmdwX2ZtdHN0cmVhbV90IGZzOworKworKyAgZnMgPSAoc3RydWN0IGFyZ3BfZm10c3RyZWFtICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgYXJncF9mbXRzdHJlYW0pKTsKKysgIGlmIChmcyAhPSBOVUxMKQorKyAgICB7CisrICAgICAgZnMtPnN0cmVhbSA9IHN0cmVhbTsKKysKKysgICAgICBmcy0+bG1hcmdpbiA9IGxtYXJnaW47CisrICAgICAgZnMtPnJtYXJnaW4gPSBybWFyZ2luOworKyAgICAgIGZzLT53bWFyZ2luID0gd21hcmdpbjsKKysgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICBmcy0+cG9pbnRfb2ZmcyA9IDA7CisrCisrICAgICAgZnMtPmJ1ZiA9IChjaGFyICopIG1hbGxvYyAoSU5JVF9CVUZfU0laRSk7CisrICAgICAgaWYgKCEgZnMtPmJ1ZikKKysgICAgICAgeworKyAgICAgICAgIGZyZWUgKGZzKTsKKysgICAgICAgICBmcyA9IDA7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBmcy0+cCA9IGZzLT5idWY7CisrICAgICAgICAgZnMtPmVuZCA9IGZzLT5idWYgKyBJTklUX0JVRl9TSVpFOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiBmczsKKyt9CisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKyNpZmRlZiB3ZWFrX2FsaWFzCisrd2Vha19hbGlhcyAoX19hcmdwX21ha2VfZm10c3RyZWFtLCBhcmdwX21ha2VfZm10c3RyZWFtKQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIEZsdXNoIEZTIHRvIGl0cyBzdHJlYW0sIGFuZCBmcmVlIGl0IChidXQgZG9uJ3QgY2xvc2UgdGhlIHN0cmVhbSkuICAqLworK3ZvaWQKKytfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisreworKyAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGZzKTsKKysgIGlmIChmcy0+cCA+IGZzLT5idWYpCisrICAgIHsKKysjaWZkZWYgVVNFX0lOX0xJQklPCisrICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrI2Vsc2UKKysgICAgICBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIGZzLT5wIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrICAgIH0KKysgIGZyZWUgKGZzLT5idWYpOworKyAgZnJlZSAoZnMpOworK30KKysjaWYgMAorKy8qIE5vdCBleHBvcnRlZC4gICovCisrI2lmZGVmIHdlYWtfYWxpYXMKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX2ZyZWUsIGFyZ3BfZm10c3RyZWFtX2ZyZWUpCisrI2VuZGlmCisrI2VuZGlmCisrCisrLyogUHJvY2VzcyBGUydzIGJ1ZmZlciBzbyB0aGF0IGxpbmUgd3JhcHBpbmcgaXMgZG9uZSBmcm9tIFBPSU5UX09GRlMgdG8gdGhlCisrICAgZW5kIG9mIGl0cyBidWZmZXIuICBUaGlzIGNvZGUgaXMgbW9zdGx5IGZyb20gZ2xpYmMgc3RkaW8vbGluZXdyYXAuYy4gICovCisrdm9pZAorK19fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorK3sKKysgIGNoYXIgKmJ1ZiwgKm5sOworKyAgc2l6ZV90IGxlbjsKKysKKysgIC8qIFNjYW4gdGhlIGJ1ZmZlciBmb3IgbmV3bGluZXMuICAqLworKyAgYnVmID0gZnMtPmJ1ZiArIGZzLT5wb2ludF9vZmZzOworKyAgd2hpbGUgKGJ1ZiA8IGZzLT5wKQorKyAgICB7CisrICAgICAgc2l6ZV90IHI7CisrCisrICAgICAgaWYgKGZzLT5wb2ludF9jb2wgPT0gMCAmJiBmcy0+bG1hcmdpbiAhPSAwKQorKyAgICAgICB7CisrICAgICAgICAgLyogV2UgYXJlIHN0YXJ0aW5nIGEgbmV3IGxpbmUuICBQcmludCBzcGFjZXMgdG8gdGhlIGxlZnQgbWFyZ2luLiAgKi8KKysgICAgICAgICBjb25zdCBzaXplX3QgcGFkID0gZnMtPmxtYXJnaW47CisrICAgICAgICAgaWYgKGZzLT5wICsgcGFkIDwgZnMtPmVuZCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogV2UgY2FuIGZpdCBpbiB0aGVtIGluIHRoZSBidWZmZXIgYnkgbW92aW5nIHRoZQorKyAgICAgICAgICAgICAgICBidWZmZXIgdGV4dCB1cCBhbmQgZmlsbGluZyBpbiB0aGUgYmVnaW5uaW5nLiAgKi8KKysgICAgICAgICAgICAgbWVtbW92ZSAoYnVmICsgcGFkLCBidWYsIGZzLT5wIC0gYnVmKTsKKysgICAgICAgICAgICAgZnMtPnAgKz0gcGFkOyAvKiBDb21wZW5zYXRlIGZvciBiaWdnZXIgYnVmZmVyLiAqLworKyAgICAgICAgICAgICBtZW1zZXQgKGJ1ZiwgJyAnLCBwYWQpOyAvKiBGaWxsIGluIHRoZSBzcGFjZXMuICAqLworKyAgICAgICAgICAgICBidWYgKz0gcGFkOyAvKiBEb24ndCBib3RoZXIgc2VhcmNoaW5nIHRoZW0uICAqLworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogTm8gYnVmZmVyIHNwYWNlIGZvciBzcGFjZXMuICBNdXN0IGZsdXNoLiAgKi8KKysgICAgICAgICAgICAgc2l6ZV90IGk7CisrICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYWQ7IGkrKykKKysgICAgICAgICAgICAgICB7CisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICAgICAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKyAgICAgICAgIGZzLT5wb2ludF9jb2wgPSBwYWQ7CisrICAgICAgIH0KKysKKysgICAgICBsZW4gPSBmcy0+cCAtIGJ1ZjsKKysgICAgICBubCA9IG1lbWNociAoYnVmLCAnXG4nLCBsZW4pOworKworKyAgICAgIGlmIChmcy0+cG9pbnRfY29sIDwgMCkKKysgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrCisrICAgICAgaWYgKCFubCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFRoZSBidWZmZXIgZW5kcyBpbiBhIHBhcnRpYWwgbGluZS4gICovCisrCisrICAgICAgICAgaWYgKGZzLT5wb2ludF9jb2wgKyBsZW4gPCBmcy0+cm1hcmdpbikKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogVGhlIHJlbWFpbmluZyBidWZmZXIgdGV4dCBpcyBhIHBhcnRpYWwgbGluZSBhbmQgZml0cworKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIG1heGltdW0gbGluZSB3aWR0aC4gIEFkdmFuY2UgcG9pbnQgZm9yIHRoZQorKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIHRvIGJlIHdyaXR0ZW4gYW5kIHN0b3Agc2Nhbm5pbmcuICAqLworKyAgICAgICAgICAgICBmcy0+cG9pbnRfY29sICs9IGxlbjsKKysgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgLyogU2V0IHRoZSBlbmQtb2YtbGluZSBwb2ludGVyIGZvciB0aGUgY29kZSBiZWxvdyB0bworKyAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICAgIG5sID0gZnMtPnA7CisrICAgICAgIH0KKysgICAgICBlbHNlIGlmIChmcy0+cG9pbnRfY29sICsgKG5sIC0gYnVmKSA8IChzc2l6ZV90KSBmcy0+cm1hcmdpbikKKysgICAgICAgeworKyAgICAgICAgIC8qIFRoZSBidWZmZXIgY29udGFpbnMgYSBmdWxsIGxpbmUgdGhhdCBmaXRzIHdpdGhpbiB0aGUgbWF4aW11bQorKyAgICAgICAgICAgIGxpbmUgd2lkdGguICBSZXNldCBwb2ludCBhbmQgc2NhbiB0aGUgbmV4dCBsaW5lLiAgKi8KKysgICAgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICAgICBidWYgPSBubCArIDE7CisrICAgICAgICAgY29udGludWU7CisrICAgICAgIH0KKysKKysgICAgICAvKiBUaGlzIGxpbmUgaXMgdG9vIGxvbmcuICAqLworKyAgICAgIHIgPSBmcy0+cm1hcmdpbiAtIDE7CisrCisrICAgICAgaWYgKGZzLT53bWFyZ2luIDwgMCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFRydW5jYXRlIHRoZSBsaW5lIGJ5IG92ZXJ3cml0aW5nIHRoZSBleGNlc3Mgd2l0aCB0aGUKKysgICAgICAgICAgICBuZXdsaW5lIGFuZCBhbnl0aGluZyBhZnRlciBpdCBpbiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICBpZiAobmwgPCBmcy0+cCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgbWVtbW92ZSAoYnVmICsgKHIgLSBmcy0+cG9pbnRfY29sKSwgbmwsIGZzLT5wIC0gbmwpOworKyAgICAgICAgICAgICBmcy0+cCAtPSBidWYgKyAociAtIGZzLT5wb2ludF9jb2wpIC0gbmw7CisrICAgICAgICAgICAgIC8qIFJlc2V0IHBvaW50IGZvciB0aGUgbmV4dCBsaW5lIGFuZCBzdGFydCBzY2FubmluZyBpdC4gICovCisrICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKyAgICAgICAgICAgICBidWYgKz0gciArIDE7IC8qIFNraXAgZnVsbCBsaW5lIHBsdXMgXG4uICovCisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBUaGUgYnVmZmVyIGVuZHMgd2l0aCBhIHBhcnRpYWwgbGluZSB0aGF0IGlzIGJleW9uZCB0aGUKKysgICAgICAgICAgICAgICAgbWF4aW11bSBsaW5lIHdpZHRoLiAgQWR2YW5jZSBwb2ludCBmb3IgdGhlIGNoYXJhY3RlcnMKKysgICAgICAgICAgICAgICAgd3JpdHRlbiwgYW5kIGRpc2NhcmQgdGhvc2UgcGFzdCB0aGUgbWF4IGZyb20gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgKz0gbGVuOworKyAgICAgICAgICAgICBmcy0+cCAtPSBmcy0+cG9pbnRfY29sIC0gcjsKKysgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICB9CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICAvKiBEbyB3b3JkIHdyYXAuICBHbyB0byB0aGUgY29sdW1uIGp1c3QgcGFzdCB0aGUgbWF4aW11bSBsaW5lCisrICAgICAgICAgICAgd2lkdGggYW5kIHNjYW4gYmFjayBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgd29yZCB0aGVyZS4KKysgICAgICAgICAgICBUaGVuIGluc2VydCBhIGxpbmUgYnJlYWsuICAqLworKworKyAgICAgICAgIGNoYXIgKnAsICpuZXh0bGluZTsKKysgICAgICAgICBpbnQgaTsKKysKKysgICAgICAgICBwID0gYnVmICsgKHIgKyAxIC0gZnMtPnBvaW50X2NvbCk7CisrICAgICAgICAgd2hpbGUgKHAgPj0gYnVmICYmICFpc2JsYW5rICgqcCkpCisrICAgICAgICAgICAtLXA7CisrICAgICAgICAgbmV4dGxpbmUgPSBwICsgMTsgICAgIC8qIFRoaXMgd2lsbCBiZWdpbiB0aGUgbmV4dCBsaW5lLiAgKi8KKysKKysgICAgICAgICBpZiAobmV4dGxpbmUgPiBidWYpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFN3YWxsb3cgc2VwYXJhdGluZyBibGFua3MuICAqLworKyAgICAgICAgICAgICBpZiAocCA+PSBidWYpCisrICAgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICAgIC0tcDsKKysgICAgICAgICAgICAgICB3aGlsZSAocCA+PSBidWYgJiYgaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgbmwgPSBwICsgMTsgICAgICAgLyogVGhlIG5ld2xpbmUgd2lsbCByZXBsYWNlIHRoZSBmaXJzdCBibGFuay4gKi8KKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIEEgc2luZ2xlIHdvcmQgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gbGluZSB3aWR0aC4KKysgICAgICAgICAgICAgICAgT2ggd2VsbC4gIFB1dCBpdCBvbiBhbiBvdmVybG9uZyBsaW5lIGJ5IGl0c2VsZi4gICovCisrICAgICAgICAgICAgIHAgPSBidWYgKyAociArIDEgLSBmcy0+cG9pbnRfY29sKTsKKysgICAgICAgICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBsb25nIHdvcmQuICAqLworKyAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgICsrcDsKKysgICAgICAgICAgICAgd2hpbGUgKHAgPCBubCAmJiAhaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgaWYgKHAgPT0gbmwpCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgLyogSXQgYWxyZWFkeSBlbmRzIGEgbGluZS4gIE5vIGZ1c3NpbmcgcmVxdWlyZWQuICAqLworKyAgICAgICAgICAgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgICAgICAgICAgICBidWYgPSBubCArIDE7CisrICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIC8qIFdlIHdpbGwgbW92ZSB0aGUgbmV3bGluZSB0byByZXBsYWNlIHRoZSBmaXJzdCBibGFuay4gICovCisrICAgICAgICAgICAgIG5sID0gcDsKKysgICAgICAgICAgICAgLyogU3dhbGxvdyBzZXBhcmF0aW5nIGJsYW5rcy4gICovCisrICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgKytwOworKyAgICAgICAgICAgICB3aGlsZSAoaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgLyogVGhlIG5leHQgbGluZSB3aWxsIHN0YXJ0IGhlcmUuICAqLworKyAgICAgICAgICAgICBuZXh0bGluZSA9IHA7CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgLyogTm90ZTogVGhlcmUgYXJlIGEgYnVuY2ggb2YgdGVzdHMgYmVsb3cgZm9yCisrICAgICAgICAgICAgTkVYVExJTkUgPT0gQlVGICsgTEVOICsgMTsgdGhpcyBjYXNlIGlzIHdoZXJlIE5MIGhhcHBlbnMgdG8gZmFsbAorKyAgICAgICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYW5kIE5FWFRMSU5FIGlzIGluIGZhY3QgZW1wdHkgKGFuZCBzbworKyAgICAgICAgICAgIHdlIG5lZWQgbm90IGJlIGNhcmVmdWwgdG8gbWFpbnRhaW4gaXRzIGNvbnRlbnRzKS4gICovCisrCisrICAgICAgICAgaWYgKChuZXh0bGluZSA9PSBidWYgKyBsZW4gKyAxCisrICAgICAgICAgICAgICA/IGZzLT5lbmQgLSBubCA8IGZzLT53bWFyZ2luICsgMQorKyAgICAgICAgICAgICAgOiBuZXh0bGluZSAtIChubCArIDEpIDwgZnMtPndtYXJnaW4pCisrICAgICAgICAgICAgICYmIGZzLT5wID4gbmV4dGxpbmUpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFRoZSBtYXJnaW4gbmVlZHMgbW9yZSBibGFua3MgdGhhbiB3ZSByZW1vdmVkLiAgKi8KKysgICAgICAgICAgICAgaWYgKGZzLT5lbmQgLSBmcy0+cCA+IGZzLT53bWFyZ2luICsgMSkKKysgICAgICAgICAgICAgICAvKiBNYWtlIHNvbWUgc3BhY2UgZm9yIHRoZW0uICAqLworKyAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgIHNpemVfdCBtdiA9IGZzLT5wIC0gbmV4dGxpbmU7CisrICAgICAgICAgICAgICAgICBtZW1tb3ZlIChubCArIDEgKyBmcy0+d21hcmdpbiwgbmV4dGxpbmUsIG12KTsKKysgICAgICAgICAgICAgICAgIG5leHRsaW5lID0gbmwgKyAxICsgZnMtPndtYXJnaW47CisrICAgICAgICAgICAgICAgICBsZW4gPSBuZXh0bGluZSArIG12IC0gYnVmOworKyAgICAgICAgICAgICAgICAgKm5sKysgPSAnXG4nOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgIC8qIE91dHB1dCB0aGUgZmlyc3QgbGluZSBzbyB3ZSBjYW4gdXNlIHRoZSBzcGFjZS4gICovCisrICAgICAgICAgICAgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgICAgICBfX2Z4cHJpbnRmIChmcy0+c3RyZWFtLCAiJS4qc1xuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIChubCAtIGZzLT5idWYpLCBmcy0+YnVmKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgaWYgKG5sID4gZnMtPmJ1ZikKKysgICAgICAgICAgICAgICAgICAgZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBubCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgICAgICAgICBsZW4gKz0gYnVmIC0gZnMtPmJ1ZjsKKysgICAgICAgICAgICAgICAgIG5sID0gYnVmID0gZnMtPmJ1ZjsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgLyogV2UgY2FuIGZpdCB0aGUgbmV3bGluZSBhbmQgYmxhbmtzIGluIGJlZm9yZQorKyAgICAgICAgICAgICAgdGhlIG5leHQgd29yZC4gICovCisrICAgICAgICAgICAqbmwrKyA9ICdcbic7CisrCisrICAgICAgICAgaWYgKG5leHRsaW5lIC0gbmwgPj0gZnMtPndtYXJnaW4KKysgICAgICAgICAgICAgfHwgKG5leHRsaW5lID09IGJ1ZiArIGxlbiArIDEgJiYgZnMtPmVuZCAtIG5leHRsaW5lID49IGZzLT53bWFyZ2luKSkKKysgICAgICAgICAgIC8qIEFkZCBibGFua3MgdXAgdG8gdGhlIHdyYXAgbWFyZ2luIGNvbHVtbi4gICovCisrICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnMtPndtYXJnaW47ICsraSkKKysgICAgICAgICAgICAgKm5sKysgPSAnICc7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZzLT53bWFyZ2luOyArK2kpCisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCisrICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKysKKysgICAgICAgICAvKiBDb3B5IHRoZSB0YWlsIG9mIHRoZSBvcmlnaW5hbCBidWZmZXIgaW50byB0aGUgY3VycmVudCBidWZmZXIKKysgICAgICAgICAgICBwb3NpdGlvbi4gICovCisrICAgICAgICAgaWYgKG5sIDwgbmV4dGxpbmUpCisrICAgICAgICAgICBtZW1tb3ZlIChubCwgbmV4dGxpbmUsIGJ1ZiArIGxlbiAtIG5leHRsaW5lKTsKKysgICAgICAgICBsZW4gLT0gbmV4dGxpbmUgLSBidWY7CisrCisrICAgICAgICAgLyogQ29udGludWUgdGhlIHNjYW4gb24gdGhlIHJlbWFpbmluZyBsaW5lcyBpbiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICBidWYgPSBubDsKKysKKysgICAgICAgICAvKiBSZXN0b3JlIGJ1ZnAgdG8gaW5jbHVkZSBhbGwgdGhlIHJlbWFpbmluZyB0ZXh0LiAgKi8KKysgICAgICAgICBmcy0+cCA9IG5sICsgbGVuOworKworKyAgICAgICAgIC8qIFJlc2V0IHRoZSBjb3VudGVyIG9mIHdoYXQgaGFzIGJlZW4gb3V0cHV0IHRoaXMgbGluZS4gIElmIHdtYXJnaW4KKysgICAgICAgICAgICBpcyAwLCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBsbWFyZ2luIGdldHRpbmcgYWRkZWQsIHNvIHdlIHNldAorKyAgICAgICAgICAgIHBvaW50X2NvbCB0byBhIG1hZ2ljIHZhbHVlIG9mIC0xIGluIHRoYXQgY2FzZS4gICovCisrICAgICAgICAgZnMtPnBvaW50X2NvbCA9IGZzLT53bWFyZ2luID8gZnMtPndtYXJnaW4gOiAtMTsKKysgICAgICAgfQorKyAgICB9CisrCisrICAvKiBSZW1lbWJlciB0aGF0IHdlJ3ZlIHNjYW5uZWQgYXMgZmFyIGFzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCisrICBmcy0+cG9pbnRfb2ZmcyA9IGZzLT5wIC0gZnMtPmJ1ZjsKKyt9CisrCisrLyogRW5zdXJlIHRoYXQgRlMgaGFzIHNwYWNlIGZvciBBTU9VTlQgbW9yZSBieXRlcyBpbiBpdHMgYnVmZmVyLCBlaXRoZXIgYnkKKysgICBncm93aW5nIHRoZSBidWZmZXIsIG9yIGJ5IGZsdXNoaW5nIGl0LiAgVHJ1ZSBpcyByZXR1cm5lZCBpZmYgd2Ugc3VjY2VlZC4gKi8KKytpbnQKKytfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoc3RydWN0IGFyZ3BfZm10c3RyZWFtICpmcywgc2l6ZV90IGFtb3VudCkKKyt7CisrICBpZiAoKHNpemVfdCkgKGZzLT5lbmQgLSBmcy0+cCkgPCBhbW91bnQpCisrICAgIHsKKysgICAgICBzc2l6ZV90IHdyb3RlOworKworKyAgICAgIC8qIEZsdXNoIEZTJ3MgYnVmZmVyLiAgKi8KKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoZnMpOworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrICAgICAgd3JvdGUgPSBmcy0+cCAtIGZzLT5idWY7CisrI2Vsc2UKKysgICAgICB3cm90ZSA9IGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgZnMtPnAgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysjZW5kaWYKKysgICAgICBpZiAod3JvdGUgPT0gZnMtPnAgLSBmcy0+YnVmKQorKyAgICAgICB7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICAgIGZzLT5wb2ludF9vZmZzID0gMDsKKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIGZzLT5wIC09IHdyb3RlOworKyAgICAgICAgIGZzLT5wb2ludF9vZmZzIC09IHdyb3RlOworKyAgICAgICAgIG1lbW1vdmUgKGZzLT5idWYsIGZzLT5idWYgKyB3cm90ZSwgZnMtPnAgLSBmcy0+YnVmKTsKKysgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgfQorKworKyAgICAgIGlmICgoc2l6ZV90KSAoZnMtPmVuZCAtIGZzLT5idWYpIDwgYW1vdW50KQorKyAgICAgICAvKiBHb3R0YSBncm93IHRoZSBidWZmZXIuICAqLworKyAgICAgICB7CisrICAgICAgICAgc2l6ZV90IG9sZF9zaXplID0gZnMtPmVuZCAtIGZzLT5idWY7CisrICAgICAgICAgc2l6ZV90IG5ld19zaXplID0gb2xkX3NpemUgKyBhbW91bnQ7CisrICAgICAgICAgY2hhciAqbmV3X2J1ZjsKKysKKysgICAgICAgICBpZiAobmV3X3NpemUgPCBvbGRfc2l6ZSB8fCAhIChuZXdfYnVmID0gcmVhbGxvYyAoZnMtPmJ1ZiwgbmV3X3NpemUpKSkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVOT01FTSk7CisrICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIGZzLT5idWYgPSBuZXdfYnVmOworKyAgICAgICAgIGZzLT5lbmQgPSBuZXdfYnVmICsgbmV3X3NpemU7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiAxOworK30KKysKKytzc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqZnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIGludCBvdXQ7CisrICBzaXplX3QgYXZhaWw7CisrICBzaXplX3Qgc2l6ZV9ndWVzcyA9IFBSSU5URl9TSVpFX0dVRVNTOyAvKiBIb3cgbXVjaCBzcGFjZSB0byByZXNlcnZlLiAqLworKworKyAgZG8KKysgICAgeworKyAgICAgIHZhX2xpc3QgYXJnczsKKysKKysgICAgICBpZiAoISBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoZnMsIHNpemVfZ3Vlc3MpKQorKyAgICAgICByZXR1cm4gLTE7CisrCisrICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisrICAgICAgYXZhaWwgPSBmcy0+ZW5kIC0gZnMtPnA7CisrICAgICAgb3V0ID0gX192c25wcmludGYgKGZzLT5wLCBhdmFpbCwgZm10LCBhcmdzKTsKKysgICAgICB2YV9lbmQgKGFyZ3MpOworKyAgICAgIGlmICgoc2l6ZV90KSBvdXQgPj0gYXZhaWwpCisrICAgICAgIHNpemVfZ3Vlc3MgPSBvdXQgKyAxOworKyAgICB9CisrICB3aGlsZSAoKHNpemVfdCkgb3V0ID49IGF2YWlsKTsKKysKKysgIGZzLT5wICs9IG91dDsKKysKKysgIHJldHVybiBvdXQ7CisrfQorKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysjaWZkZWYgd2Vha19hbGlhcworK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmLCBhcmdwX2ZtdHN0cmVhbV9wcmludGYpCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2VuZGlmIC8qICFBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAgKi8KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNhN2M4MzQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmgKK0BAIC0wLDAgKzEsMzE0IEBACisrLyogV29yZC13cmFwcGluZyBhbmQgbGluZS10cnVuY2F0aW5nIHN0cmVhbXMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKy8qIFRoaXMgcGFja2FnZSBlbXVsYXRlcyBnbGliYyBgbGluZV93cmFwX3N0cmVhbScgc2VtYW50aWNzIGZvciBzeXN0ZW1zIHRoYXQKKysgICBkb24ndCBoYXZlIHRoYXQuICBJZiB0aGUgc3lzdGVtIGRvZXMgaGF2ZSBpdCwgaXQgaXMganVzdCBhIHdyYXBwZXIgZm9yCisrICAgdGhhdC4gIFRoaXMgaGVhZGVyIGZpbGUgaXMgb25seSB1c2VkIGludGVybmFsbHkgd2hpbGUgY29tcGlsaW5nIGFyZ3AsIGFuZAorKyAgIHNob3VsZG4ndCBiZSBpbnN0YWxsZWQuICAqLworKworKyNpZm5kZWYgX0FSR1BfRk1UU1RSRUFNX0gKKysjZGVmaW5lIF9BUkdQX0ZNVFNUUkVBTV9ICisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKysjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmIDAgLyogdUNsaWJjOiBkaXNhYmxlZCAqLworKyNpZiAgICAoX0xJQkMgLSAwICYmICFkZWZpbmVkIChVU0VfSU5fTElCSU8pKSBcCisrICAgIHx8IChkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pICYmIGRlZmluZWQgKEhBVkVfTElORVdSQVBfSCkpCisrLyogbGluZV93cmFwX3N0cmVhbSBpcyBhdmFpbGFibGUsIHNvIHVzZSB0aGF0LiAgKi8KKysjZGVmaW5lIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKyNlbmRpZgorKyNlbHNlCisrLyogbGluZV93cmFwIHN0cmVhbSBOT1QgYXZhaWxhYmxlICovCisrIyB1bmRlZiBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysjZW5kaWYKKysKKysjaWZkZWYgQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQCisrLyogSnVzdCBiZSBhIHNpbXBsZSB3cmFwcGVyIGZvciBsaW5lX3dyYXBfc3RyZWFtOyB0aGUgc2VtYW50aWNzIGFyZQorKyAgICpzbGlnaHRseSogZGlmZmVyZW50LCBhcyBsaW5lX3dyYXBfc3RyZWFtIGRvZXNuJ3QgYWN0dWFsbHkgbWFrZSBhIG5ldworKyAgIG9iamVjdCwgaXQganVzdCBtb2RpZmllcyB0aGUgZ2l2ZW4gc3RyZWFtIChyZXZlcnNpYmx5KSB0byBkbworKyAgIGxpbmUtd3JhcHBpbmcuICBTaW5jZSB3ZSBjb250cm9sIHdobyB1c2VzIHRoaXMgY29kZSwgaXQgZG9lc24ndCBtYXR0ZXIuICAqLworKworKyNpbmNsdWRlIDxsaW5ld3JhcC5oPgorKworK3R5cGVkZWYgRklMRSAqYXJncF9mbXRzdHJlYW1fdDsKKysKKysjZGVmaW5lIGFyZ3BfbWFrZV9mbXRzdHJlYW0gbGluZV93cmFwX3N0cmVhbQorKyNkZWZpbmUgX19hcmdwX21ha2VfZm10c3RyZWFtIGxpbmVfd3JhcF9zdHJlYW0KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX2ZyZWUgbGluZV91bndyYXBfc3RyZWFtCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgbGluZV91bndyYXBfc3RyZWFtCisrCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dGMoZnMsY2gpIHB1dGMoY2gsZnMpCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wdXRjKGZzLGNoKSBwdXRjKGNoLGZzKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRzKGZzLHN0cikgZnB1dHMoc3RyLGZzKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcHV0cyhmcyxzdHIpIGZwdXRzKHN0cixmcykKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUoZnMsc3RyLGxlbikgZndyaXRlKHN0ciwxLGxlbixmcykKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3dyaXRlKGZzLHN0cixsZW4pIGZ3cml0ZShzdHIsMSxsZW4sZnMpCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiBmcHJpbnRmCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wcmludGYgZnByaW50ZgorKworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGxpbmVfd3JhcF9sbWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGxpbmVfd3JhcF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIGxpbmVfd3JhcF9zZXRfbG1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gbGluZV93cmFwX3NldF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3JtYXJnaW4gbGluZV93cmFwX3JtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3JtYXJnaW4gbGluZV93cmFwX3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gbGluZV93cmFwX3NldF9ybWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiBsaW5lX3dyYXBfc2V0X3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBsaW5lX3dyYXBfd21hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fd21hcmdpbiBsaW5lX3dyYXBfd21hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiBsaW5lX3dyYXBfc2V0X3dtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIGxpbmVfd3JhcF9zZXRfd21hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wb2ludCBsaW5lX3dyYXBfcG9pbnQKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3BvaW50IGxpbmVfd3JhcF9wb2ludAorKworKyNlbHNlIC8qICFBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAgKi8KKysvKiBHdWVzcyB3ZSBoYXZlIHRvIGRlZmluZSBvdXIgb3duIHZlcnNpb24uICAqLworKworKyNpZm5kZWYgX19jb25zdAorKyNkZWZpbmUgX19jb25zdCBjb25zdAorKyNlbmRpZgorKworK3N0cnVjdCBhcmdwX2ZtdHN0cmVhbQorK3sKKysgIEZJTEUgKnN0cmVhbTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc3RyZWFtIHdlJ3JlIG91dHB1dHRpbmcgdG8uICAqLworKworKyAgc2l6ZV90IGxtYXJnaW4sIHJtYXJnaW47ICAgICAvKiBMZWZ0IGFuZCByaWdodCBtYXJnaW5zLiAgKi8KKysgIHNzaXplX3Qgd21hcmdpbjsgICAgICAgICAgICAgLyogTWFyZ2luIHRvIHdyYXAgdG8sIG9yIC0xIHRvIHRydW5jYXRlLiAgKi8KKysKKysgIC8qIFBvaW50IGluIGJ1ZmZlciB0byB3aGljaCB3ZSd2ZSBwcm9jZXNzZWQgZm9yIHdyYXBwaW5nLCBidXQgbm90IG91dHB1dC4gICovCisrICBzaXplX3QgcG9pbnRfb2ZmczsKKysgIC8qIE91dHB1dCBjb2x1bW4gYXQgUE9JTlRfT0ZGUywgb3IgLTEgbWVhbmluZyAwIGJ1dCBkb24ndCBhZGQgbG1hcmdpbi4gICovCisrICBzc2l6ZV90IHBvaW50X2NvbDsKKysKKysgIGNoYXIgKmJ1ZjsgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlci4gICovCisrICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgZW5kIG9mIHRleHQgaW4gQlVGLiAqLworKyAgY2hhciAqZW5kOyAgICAgICAgICAgICAgICAgICAvKiBBYnNvbHV0ZSBlbmQgb2YgQlVGLiAgKi8KKyt9OworKworK3R5cGVkZWYgc3RydWN0IGFyZ3BfZm10c3RyZWFtICphcmdwX2ZtdHN0cmVhbV90OworKworKy8qIFJldHVybiBhbiBhcmdwX2ZtdHN0cmVhbSB0aGF0IG91dHB1dHMgdG8gU1RSRUFNLCBhbmQgd2hpY2ggcHJlZml4ZXMgbGluZXMKKysgICB3cml0dGVuIG9uIGl0IHdpdGggTE1BUkdJTiBzcGFjZXMgYW5kIGxpbWl0cyB0aGVtIHRvIFJNQVJHSU4gY29sdW1ucworKyAgIHRvdGFsLiAgSWYgV01BUkdJTiA+PSAwLCB3b3JkcyB0aGF0IGV4dGVuZCBwYXN0IFJNQVJHSU4gYXJlIHdyYXBwZWQgYnkKKysgICByZXBsYWNpbmcgdGhlIHdoaXRlc3BhY2UgYmVmb3JlIHRoZW0gd2l0aCBhIG5ld2xpbmUgYW5kIFdNQVJHSU4gc3BhY2VzLgorKyAgIE90aGVyd2lzZSwgY2hhcnMgYmV5b25kIFJNQVJHSU4gYXJlIHNpbXBseSBkcm9wcGVkIHVudGlsIGEgbmV3bGluZS4KKysgICBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAgKi8KKytleHRlcm4gYXJncF9mbXRzdHJlYW1fdCBfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKEZJTEUgKl9fc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fd21hcmdpbik7CisrZXh0ZXJuIGFyZ3BfZm10c3RyZWFtX3QgYXJncF9tYWtlX2ZtdHN0cmVhbSAoRklMRSAqX19zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgX193bWFyZ2luKTsKKysKKysvKiBGbHVzaCBfX0ZTIHRvIGl0cyBzdHJlYW0sIGFuZCBmcmVlIGl0IChidXQgZG9uJ3QgY2xvc2UgdGhlIHN0cmVhbSkuICAqLworK2V4dGVybiB2b2lkIF9fYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gdm9pZCBhcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworKworK2V4dGVybiBzc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAzKSkpOworK2V4dGVybiBzc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3ByaW50ZiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAzKSkpOworKworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIGludCBfX2NoKTsKKytleHRlcm4gaW50IGFyZ3BfZm10c3RyZWFtX3B1dGMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgaW50IF9fY2gpOworKworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIF9fY29uc3QgY2hhciAqX19zdHIpOworK2V4dGVybiBpbnQgYXJncF9mbXRzdHJlYW1fcHV0cyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBfX2NvbnN0IGNoYXIgKl9fc3RyKTsKKysKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0ciwgc2l6ZV90IF9fbGVuKTsKKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyLCBzaXplX3QgX19sZW4pOworKworKy8qIEFjY2VzcyBtYWNyb3MgZm9yIHZhcmlvdXMgYml0cyBvZiBzdGF0ZS4gICovCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9sbWFyZ2luKF9fZnMpICgoX19mcyktPmxtYXJnaW4pCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9ybWFyZ2luKF9fZnMpICgoX19mcyktPnJtYXJnaW4pCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luKF9fZnMpICgoX19mcyktPndtYXJnaW4pCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gYXJncF9mbXRzdHJlYW1fbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIGFyZ3BfZm10c3RyZWFtX3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luCisrCisrLyogU2V0IF9fRlMncyBsZWZ0IG1hcmdpbiB0byBMTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbik7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xtYXJnaW4pOworKworKy8qIFNldCBfX0ZTJ3MgcmlnaHQgbWFyZ2luIHRvIF9fUk1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3JtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luKTsKKysKKysvKiBTZXQgX19GUydzIHdyYXAgbWFyZ2luIHRvIF9fV01BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3dtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX193bWFyZ2luKTsKKysKKysvKiBSZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IHBvaW50IGluIF9fRlMuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fcG9pbnQgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworKworKy8qIEludGVybmFsIHJvdXRpbmVzLiAgKi8KKytleHRlcm4gdm9pZCBfYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiB2b2lkIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiBpbnQgX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19hbW91bnQpOworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fYW1vdW50KTsKKysKKysjaWZkZWYgX19PUFRJTUlaRV9fCisrLyogSW5saW5lIHZlcnNpb25zIG9mIGFib3ZlIHJvdXRpbmVzLiAgKi8KKysKKysjaWYgIV9MSUJDCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgYXJncF9mbXRzdHJlYW1fcHV0YworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIGFyZ3BfZm10c3RyZWFtX3B1dHMKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgYXJncF9mbXRzdHJlYW1fd3JpdGUKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgYXJncF9mbXRzdHJlYW1fcG9pbnQKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIF9hcmdwX2ZtdHN0cmVhbV91cGRhdGUKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIF9hcmdwX2ZtdHN0cmVhbV9lbnN1cmUKKysjZW5kaWYKKysKKysjaWZuZGVmIEFSR1BfRlNfRUkKKysjZGVmaW5lIEFSR1BfRlNfRUkgX19leHRlcm5faW5saW5lCisrI2VuZGlmCisrCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyLCBzaXplX3QgX19sZW4pCisreworKyAgaWYgKF9fZnMtPnAgKyBfX2xlbiA8PSBfX2ZzLT5lbmQgfHwgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKF9fZnMsIF9fbGVuKSkKKysgICAgeworKyAgICAgIG1lbWNweSAoX19mcy0+cCwgX19zdHIsIF9fbGVuKTsKKysgICAgICBfX2ZzLT5wICs9IF9fbGVuOworKyAgICAgIHJldHVybiBfX2xlbjsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrQVJHUF9GU19FSSBpbnQKKytfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgX19jb25zdCBjaGFyICpfX3N0cikKKyt7CisrICBzaXplX3QgX19sZW4gPSBzdHJsZW4gKF9fc3RyKTsKKysgIGlmIChfX2xlbikKKysgICAgeworKyAgICAgIHNpemVfdCBfX3dyb3RlID0gX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoX19mcywgX19zdHIsIF9fbGVuKTsKKysgICAgICByZXR1cm4gX193cm90ZSA9PSBfX2xlbiA/IDAgOiAtMTsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrQVJHUF9GU19FSSBpbnQKKytfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgaW50IF9fY2gpCisreworKyAgaWYgKF9fZnMtPnAgPCBfX2ZzLT5lbmQgfHwgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKF9fZnMsIDEpKQorKyAgICByZXR1cm4gKl9fZnMtPnArKyA9IF9fY2g7CisrICBlbHNlCisrICAgIHJldHVybiBFT0Y7CisrfQorKworKy8qIFNldCBfX0ZTJ3MgbGVmdCBtYXJnaW4gdG8gX19MTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX2xtYXJnaW4pCisreworKyAgc2l6ZV90IF9fb2xkOworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIF9fb2xkID0gX19mcy0+bG1hcmdpbjsKKysgIF9fZnMtPmxtYXJnaW4gPSBfX2xtYXJnaW47CisrICByZXR1cm4gX19vbGQ7CisrfQorKworKy8qIFNldCBfX0ZTJ3MgcmlnaHQgbWFyZ2luIHRvIF9fUk1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19ybWFyZ2luKQorK3sKKysgIHNpemVfdCBfX29sZDsKKysgIGlmICgoc2l6ZV90KSAoX19mcy0+cCAtIF9fZnMtPmJ1ZikgPiBfX2ZzLT5wb2ludF9vZmZzKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoX19mcyk7CisrICBfX29sZCA9IF9fZnMtPnJtYXJnaW47CisrICBfX2ZzLT5ybWFyZ2luID0gX19ybWFyZ2luOworKyAgcmV0dXJuIF9fb2xkOworK30KKysKKysvKiBTZXQgRlMncyB3cmFwIG1hcmdpbiB0byBfX1dNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fd21hcmdpbikKKyt7CisrICBzaXplX3QgX19vbGQ7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgX19vbGQgPSBfX2ZzLT53bWFyZ2luOworKyAgX19mcy0+d21hcmdpbiA9IF9fd21hcmdpbjsKKysgIHJldHVybiBfX29sZDsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJyZW50IG91dHB1dCBwb2ludCBpbiBfX0ZTLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fcG9pbnQgKGFyZ3BfZm10c3RyZWFtX3QgX19mcykKKyt7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgcmV0dXJuIF9fZnMtPnBvaW50X2NvbCA+PSAwID8gX19mcy0+cG9pbnRfY29sIDogMDsKKyt9CisrCisrI2lmICFfTElCQworKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3B1dGMKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wdXRzCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbgorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4KKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wb2ludAorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZQorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfX09QVElNSVpFX18gKi8KKysKKysjZW5kaWYgLyogQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQICovCisrCisrI2VuZGlmIC8qIGFyZ3AtZm10c3RyZWFtLmggKi8KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZzLXhpbmwuYyBiL2xpYnVhcmdwL2FyZ3AtZnMteGlubC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDczY2JiZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1mcy14aW5sLmMKK0BAIC0wLDAgKzEsNDQgQEAKKysvKiBSZWFsIGRlZmluaXRpb25zIGZvciBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBpbiBhcmdwLWZtdHN0cmVhbS5oCisrICAgQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQVJHUF9GU19FSQorKyN1bmRlZiBfX09QVElNSVpFX18KKysjZGVmaW5lIF9fT1BUSU1JWkVfXyAxCisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrCisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKy8qIEFkZCB3ZWFrIGFsaWFzZXMuICAqLworKyNpZiBfTElCQyAtIDAgJiYgIWRlZmluZWQgKEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUCkgJiYgZGVmaW5lZCAod2Vha19hbGlhcykKKysKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3B1dGMsIGFyZ3BfZm10c3RyZWFtX3B1dGMpCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9wdXRzLCBhcmdwX2ZtdHN0cmVhbV9wdXRzKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fd3JpdGUsIGFyZ3BfZm10c3RyZWFtX3dyaXRlKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQsIGFyZ3BfZm10c3RyZWFtX3BvaW50KQorKworKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtaGVscC5jIGIvbGlidWFyZ3AvYXJncC1oZWxwLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41OGE1ZTZlCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWhlbHAuYworQEAgLTAsMCArMSwxODgyIEBACisrLyogSGllcmFyY2hpYWwgYXJndW1lbnQgcGFyc2luZyBoZWxwIG91dHB1dAorKyAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gICovCisrI2lmbmRlZiBfX0dOVUNfXworKyMgaWYgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyBlbHNlCisrIyAgaWZkZWYgX0FJWAorKyNwcmFnbWEgYWxsb2NhCisrIyAgZWxzZQorKyMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmbmRlZiBfCisrLyogVGhpcyBpcyBmb3Igb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMgd2l0aCBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4gICovCisrIyBpZiAoZGVmaW5lZCBIQVZFX0xJQklOVExfSCB8fCBkZWZpbmVkIF9MSUJDKSAmJiBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGRnZXR0ZXh0CisrIyAgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSBcCisrICBJTlRVU0UoX19kY2dldHRleHQpIChkb21haW4sIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSAobXNnaWQpCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX0xJQkMKKysjIGlmIEhBVkVfU1RSRVJST1JfUgorKyMgIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUgorK2NoYXIgKnN0cmVycm9yX3IgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SCisrY2hhciAqc3RyZXJyb3IgKGludCBlcnJudW0pOworKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2lmbmRlZiBTSVpFX01BWAorKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKysjZW5kaWYKKysKKysvKiBVc2VyLXNlbGVjdGFibGUgKHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlKSBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisrCisrICAgVGhlc2UgbWF5IGJlIHNwZWNpZmllZCBpbiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgYEFSR1BfSEVMUF9GTVQnLAorKyAgIHdpdGggYSBjb250ZW50cyBsaWtlOiAgVkFSMT1WQUwxLFZBUjI9VkFMMixCT09MVkFSMixuby1CT09MVkFSMgorKyAgIFdoZXJlIFZBTG4gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuICBUaGUgbGlzdCBvZiB2YXJpYWJsZXMgaXMgaW4gdGhlCisrICAgVVBBUkFNX05BTUVTIHZlY3RvciwgYmVsb3cuICAqLworKworKy8qIERlZmF1bHQgcGFyYW1ldGVycy4gICovCisrI2RlZmluZSBEVVBfQVJHUyAgICAgIDAgICAgICAgICAgICAgICAgLyogVHJ1ZSBpZiBvcHRpb24gYXJndW1lbnQgY2FuIGJlIGR1cGxpY2F0ZWQuICovCisrI2RlZmluZSBEVVBfQVJHU19OT1RFIDEgICAgICAgICAgICAgICAgLyogVHJ1ZSB0byBwcmludCBhIG5vdGUgYWJvdXQgZHVwbGljYXRlIGFyZ3MuICovCisrI2RlZmluZSBTSE9SVF9PUFRfQ09MIDIgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIHNob3J0IG9wdGlvbnMgc3RhcnQgKi8KKysjZGVmaW5lIExPTkdfT1BUX0NPTCAgNiAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggbG9uZyBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBET0NfT1BUX0NPTCAgIDIgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIGRvYyBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBPUFRfRE9DX0NPTCAgMjkgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIG9wdGlvbiB0ZXh0IHN0YXJ0cyAqLworKyNkZWZpbmUgSEVBREVSX0NPTCAgICAxICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBncm91cCBoZWFkZXJzIGFyZSBwcmludGVkICovCisrI2RlZmluZSBVU0FHRV9JTkRFTlQgMTIgICAgICAgICAgICAgICAgLyogaW5kZW50YXRpb24gb2Ygd3JhcHBlZCB1c2FnZSBsaW5lcyAqLworKyNkZWZpbmUgUk1BUkdJTiAgICAgIDc5ICAgICAgICAgICAgICAgIC8qIHJpZ2h0IG1hcmdpbiB1c2VkIGZvciB3cmFwcGluZyAqLworKworKy8qIFVzZXItc2VsZWN0YWJsZSAodXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUpIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKysgICBUaGV5IG11c3QgYWxsIGJlIG9mIHR5cGUgYGludCcgZm9yIHRoZSBwYXJzaW5nIGNvZGUgdG8gd29yay4gICovCisrc3RydWN0IHVwYXJhbXMKKyt7CisrICAvKiBJZiB0cnVlLCBhcmd1bWVudHMgZm9yIGFuIG9wdGlvbiBhcmUgc2hvd24gd2l0aCBib3RoIHNob3J0IGFuZCBsb25nCisrICAgICBvcHRpb25zLCBldmVuIHdoZW4gYSBnaXZlbiBvcHRpb24gaGFzIGJvdGgsIGUuZy4gYC14IEFSRywgLS1sb25neD1BUkcnLgorKyAgICAgSWYgZmFsc2UsIHRoZW4gaWYgYW4gb3B0aW9uIGhhcyBib3RoLCB0aGUgYXJndW1lbnQgaXMgb25seSBzaG93biB3aXRoCisrICAgICB0aGUgbG9uZyBvbmUsIGUuZy4sIGAteCwgLS1sb25neD1BUkcnLCBhbmQgYSBtZXNzYWdlIGluZGljYXRpbmcgdGhhdAorKyAgICAgdGhpcyByZWFsbHkgbWVhbnMgYm90aCBpcyBwcmludGVkIGJlbG93IHRoZSBvcHRpb25zLiAgKi8KKysgIGludCBkdXBfYXJnczsKKysKKysgIC8qIFRoaXMgaXMgdHJ1ZSBpZiB3aGVuIERVUF9BUkdTIGlzIGZhbHNlLCBhbmQgc29tZSBkdXBsaWNhdGUgYXJndW1lbnRzIGhhdmUKKysgICAgIGJlZW4gc3VwcHJlc3NlZCwgYW4gZXhwbGFuYXRvcnkgbWVzc2FnZSBzaG91bGQgYmUgcHJpbnRlZC4gICovCisrICBpbnQgZHVwX2FyZ3Nfbm90ZTsKKysKKysgIC8qIFZhcmlvdXMgb3V0cHV0IGNvbHVtbnMuICAqLworKyAgaW50IHNob3J0X29wdF9jb2w7CisrICBpbnQgbG9uZ19vcHRfY29sOworKyAgaW50IGRvY19vcHRfY29sOworKyAgaW50IG9wdF9kb2NfY29sOworKyAgaW50IGhlYWRlcl9jb2w7CisrICBpbnQgdXNhZ2VfaW5kZW50OworKyAgaW50IHJtYXJnaW47CisrfTsKKysKKysvKiBUaGlzIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLCBhcyB1c2VyIG9wdGlvbnMgYXJlIG9ubHkgZXZlciByZWFkIG9uY2UuICAqLworK3N0YXRpYyBzdHJ1Y3QgdXBhcmFtcyB1cGFyYW1zID0geworKyAgRFVQX0FSR1MsIERVUF9BUkdTX05PVEUsCisrICBTSE9SVF9PUFRfQ09MLCBMT05HX09QVF9DT0wsIERPQ19PUFRfQ09MLCBPUFRfRE9DX0NPTCwgSEVBREVSX0NPTCwKKysgIFVTQUdFX0lOREVOVCwgUk1BUkdJTgorK307CisrCisrLyogQSBwYXJ0aWN1bGFyIHVwYXJhbSwgYW5kIHdoYXQgdGhlIHVzZXIgbmFtZSBpcy4gICovCisrc3RydWN0IHVwYXJhbV9uYW1lCisreworKyAgY29uc3QgY2hhciBuYW1lWzE0XTsgICAgICAgICAvKiBVc2VyIG5hbWUuICAqLworKyAgYm9vbCBpc19ib29sOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgaXQncyBgYm9vbGVhbicuICAqLworKyAgdWludDhfdCB1cGFyYW1zX29mZnM7ICAgICAgICAgICAgICAgIC8qIExvY2F0aW9uIG9mIHRoZSAoaW50KSBmaWVsZCBpbiBVUEFSQU1TLiAgKi8KKyt9OworKworKy8qIFRoZSBuYW1lLWZpZWxkIG1hcHBpbmdzIHdlIGtub3cgYWJvdXQuICAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXBhcmFtX25hbWUgdXBhcmFtX25hbWVzW10gPQorK3sKKysgIHsgImR1cC1hcmdzIiwgICAgICAgdHJ1ZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkdXBfYXJncykgfSwKKysgIHsgImR1cC1hcmdzLW5vdGUiLCAgdHJ1ZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkdXBfYXJnc19ub3RlKSB9LAorKyAgeyAic2hvcnQtb3B0LWNvbCIsICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBzaG9ydF9vcHRfY29sKSB9LAorKyAgeyAibG9uZy1vcHQtY29sIiwgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBsb25nX29wdF9jb2wpIH0sCisrICB7ICJkb2Mtb3B0LWNvbCIsICAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGRvY19vcHRfY29sKSB9LAorKyAgeyAib3B0LWRvYy1jb2wiLCAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBvcHRfZG9jX2NvbCkgfSwKKysgIHsgImhlYWRlci1jb2wiLCAgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgaGVhZGVyX2NvbCkgfSwKKysgIHsgInVzYWdlLWluZGVudCIsICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgdXNhZ2VfaW5kZW50KSB9LAorKyAgeyAicm1hcmdpbiIsICAgICAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBybWFyZ2luKSB9CisrfTsKKysjZGVmaW5lIG51cGFyYW1fbmFtZXMgKHNpemVvZiAodXBhcmFtX25hbWVzKSAvIHNpemVvZiAodXBhcmFtX25hbWVzWzBdKSkKKysKKysvKiBSZWFkIHVzZXIgb3B0aW9ucyBmcm9tIHRoZSBlbnZpcm9ubWVudCwgYW5kIGZpbGwgaW4gVVBBUkFNUyBhcHByb3BpYXRlbHkuICAqLworK3N0YXRpYyB2b2lkCisrZmlsbF9pbl91cGFyYW1zIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgY29uc3QgY2hhciAqdmFyID0gZ2V0ZW52ICgiQVJHUF9IRUxQX0ZNVCIpOworKworKyNkZWZpbmUgU0tJUFdTKHApIGRvIHsgd2hpbGUgKGlzc3BhY2UgKCpwKSkgcCsrOyB9IHdoaWxlICgwKTsKKysKKysgIGlmICh2YXIpCisrICAgIC8qIFBhcnNlIHZhci4gKi8KKysgICAgd2hpbGUgKCp2YXIpCisrICAgICAgeworKyAgICAgICBTS0lQV1MgKHZhcik7CisrCisrICAgICAgIGlmIChpc2FscGhhICgqdmFyKSkKKysgICAgICAgICB7CisrICAgICAgICAgICBzaXplX3QgdmFyX2xlbjsKKysgICAgICAgICAgIGNvbnN0IHN0cnVjdCB1cGFyYW1fbmFtZSAqdW47CisrICAgICAgICAgICBpbnQgdW5zcGVjID0gMCwgdmFsID0gMDsKKysgICAgICAgICAgIGNvbnN0IGNoYXIgKmFyZyA9IHZhcjsKKysKKysgICAgICAgICAgIHdoaWxlIChpc2FsbnVtICgqYXJnKSB8fCAqYXJnID09ICctJyB8fCAqYXJnID09ICdfJykKKysgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICB2YXJfbGVuID0gYXJnIC0gdmFyOworKworKyAgICAgICAgICAgU0tJUFdTIChhcmcpOworKworKyAgICAgICAgICAgaWYgKCphcmcgPT0gJ1wwJyB8fCAqYXJnID09ICcsJykKKysgICAgICAgICAgICAgdW5zcGVjID0gMTsKKysgICAgICAgICAgIGVsc2UgaWYgKCphcmcgPT0gJz0nKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICAgICAgU0tJUFdTIChhcmcpOworKyAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICBpZiAodW5zcGVjKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgaWYgKHZhclswXSA9PSAnbicgJiYgdmFyWzFdID09ICdvJyAmJiB2YXJbMl0gPT0gJy0nKQorKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICB2YWwgPSAwOworKyAgICAgICAgICAgICAgICAgICB2YXIgKz0gMzsKKysgICAgICAgICAgICAgICAgICAgdmFyX2xlbiAtPSAzOworKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgIHZhbCA9IDE7CisrICAgICAgICAgICAgIH0KKysgICAgICAgICAgIGVsc2UgaWYgKGlzZGlnaXQgKCphcmcpKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgdmFsID0gYXRvaSAoYXJnKTsKKysgICAgICAgICAgICAgICB3aGlsZSAoaXNkaWdpdCAoKmFyZykpCisrICAgICAgICAgICAgICAgICBhcmcrKzsKKysgICAgICAgICAgICAgICBTS0lQV1MgKGFyZyk7CisrICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgIHVuID0gdXBhcmFtX25hbWVzOworKyAgICAgICAgICAgc2l6ZV90IHU7CisrICAgICAgICAgICBmb3IgKHUgPSAwOyB1IDwgbnVwYXJhbV9uYW1lczsgKyt1biwgKyt1KQorKyAgICAgICAgICAgICBpZiAoc3RybGVuICh1bi0+bmFtZSkgPT0gdmFyX2xlbgorKyAgICAgICAgICAgICAgICAgJiYgc3RybmNtcCAodmFyLCB1bi0+bmFtZSwgdmFyX2xlbikgPT0gMCkKKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBpZiAodW5zcGVjICYmICF1bi0+aXNfYm9vbCkKKysgICAgICAgICAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwKKyslLipzOiBBUkdQX0hFTFBfRk1UIHBhcmFtZXRlciByZXF1aXJlcyBhIHZhbHVlIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB2YXJfbGVuLCB2YXIpOworKyAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAqKGludCAqKSgoY2hhciAqKSZ1cGFyYW1zICsgdW4tPnVwYXJhbXNfb2ZmcykgPSB2YWw7CisrICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICBpZiAodSA9PSBudXBhcmFtX25hbWVzKQorKyAgICAgICAgICAgICBhcmdwX2ZhaWx1cmUgKHN0YXRlLCAwLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgIlwKKyslLipzOiBVbmtub3duIEFSR1BfSEVMUF9GTVQgcGFyYW1ldGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB2YXJfbGVuLCB2YXIpOworKworKyAgICAgICAgICAgdmFyID0gYXJnOworKyAgICAgICAgICAgaWYgKCp2YXIgPT0gJywnKQorKyAgICAgICAgICAgICB2YXIrKzsKKysgICAgICAgICB9CisrICAgICAgIGVsc2UgaWYgKCp2YXIpCisrICAgICAgICAgeworKyAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdhcmJhZ2UgaW4gQVJHUF9IRUxQX0ZNVDogJXMiKSwgdmFyKTsKKysgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgIH0KKysgICAgICB9CisrfQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaGFzbid0IGJlZW4gbWFya2VkIGludmlzaWJsZS4gIFZpc2liaWxpdHkgb25seSBhZmZlY3RzCisrICAgd2hldGhlciBPUFQgaXMgZGlzcGxheWVkIG9yIHVzZWQgaW4gc29ydGluZywgbm90IG9wdGlvbiBzaGFkb3dpbmcuICAqLworKyNkZWZpbmUgb3Zpc2libGUob3B0KSAoISAoKG9wdCktPmZsYWdzICYgT1BUSU9OX0hJRERFTikpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyBhbiBhbGlhcyBmb3IgYW4gZWFybGllciBvcHRpb24uICAqLworKyNkZWZpbmUgb2FsaWFzKG9wdCkgKChvcHQpLT5mbGFncyAmIE9QVElPTl9BTElBUykKKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGlzIGFuIGRvY3VtZW50YXRpb24tb25seSBlbnRyeS4gICovCisrI2RlZmluZSBvZG9jKG9wdCkgKChvcHQpLT5mbGFncyAmIE9QVElPTl9ET0MpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyB0aGUgZW5kLW9mLWxpc3QgbWFya2VyIGZvciBhIGxpc3Qgb2Ygb3B0aW9ucy4gICovCisrI2RlZmluZSBvZW5kKG9wdCkgX19vcHRpb25faXNfZW5kIChvcHQpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBoYXMgYSBzaG9ydCBvcHRpb24uICAqLworKyNkZWZpbmUgb3Nob3J0KG9wdCkgX19vcHRpb25faXNfc2hvcnQgKG9wdCkKKysKKysvKgorKyAgIFRoZSBoZWxwIGZvcm1hdCBmb3IgYSBwYXJ0aWN1bGFyIG9wdGlvbiBpcyBsaWtlOgorKworKyAgICAgLXhBUkcsIC15QVJHLCAtLWxvbmcxPUFSRywgLS1sb25nMj1BUkcgICAgICAgIERvY3VtZW50YXRpb24uLi4KKysKKysgICBXaGVyZSBBUkcgd2lsbCBiZSBvbWl0dGVkIGlmIHRoZXJlJ3Mgbm8gYXJndW1lbnQsIGZvciB0aGlzIG9wdGlvbiwgb3IKKysgICB3aWxsIGJlIHN1cnJvdW5kZWQgYnkgIlsiIGFuZCAiXSIgYXBwcm9waWF0ZWx5IGlmIHRoZSBhcmd1bWVudCBpcworKyAgIG9wdGlvbmFsLiAgVGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGlzIHdvcmQtd3JhcHBlZCBhcHByb3BpYXRlbHksIGFuZCBpZgorKyAgIHRoZSBsaXN0IG9mIG9wdGlvbnMgaXMgbG9uZyBlbm91Z2gsIGl0IHdpbGwgYmUgc3RhcnRlZCBvbiBhIHNlcGFyYXRlIGxpbmUuCisrICAgSWYgdGhlcmUgYXJlIG5vIHNob3J0IG9wdGlvbnMgZm9yIGEgZ2l2ZW4gb3B0aW9uLCB0aGUgZmlyc3QgbG9uZyBvcHRpb24gaXMKKysgICBpbmRlbnRlZCBzbGlnaGx5IGluIGEgd2F5IHRoYXQncyBzdXBwb3NlZCB0byBtYWtlIG1vc3QgbG9uZyBvcHRpb25zIGFwcGVhcgorKyAgIHRvIGJlIGluIGEgc2VwYXJhdGUgY29sdW1uLgorKworKyAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIG91dHB1dCAoZnJvbSBwcyk6CisrCisrICAgICAtcCBQSUQsIC0tcGlkPVBJRCAgICAgICAgICBMaXN0IHRoZSBwcm9jZXNzIFBJRAorKyAgICAgICAgLS1wZ3JwPVBHUlAgICAgICAgICAgICBMaXN0IHByb2Nlc3NlcyBpbiB0aGUgcHJvY2VzcyBncm91cCBQR1JQCisrICAgICAtUCwgLXgsIC0tbm8tcGFyZW50ICAgICAgICBJbmNsdWRlIHByb2Nlc3NlcyB3aXRob3V0IHBhcmVudHMKKysgICAgIC1RLCAtLWFsbC1maWVsZHMgICAgICAgICAgIERvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkgaWYgdGhlcmUncworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lIHJlYXNvbiBwcyBjYW4ndCBwcmludCBhIGZpZWxkIGZvciBhbnkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcywgaXQncyByZW1vdmVkIGZyb20gdGhlIG91dHB1dCBlbnRpcmVseSkKKysgICAgIC1yLCAtLXJldmVyc2UsIC0tZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQKKysgICAgICAgIC0tc2Vzc2lvbls9U0lEXSAgICAgICAgQWRkIHRoZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2Vzc2lvbiBTSUQgKHdoaWNoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBzaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcykKKysKKysgICAgSGVyZSBhcmUgc29tZSBtb3JlIG9wdGlvbnM6CisrICAgICAtZiBaT1QsIC0tZm9vbmx5PVpPVCAgICAgICBHbG9yayBhIGZvb25seQorKyAgICAgLXosIC0temF6YSAgICAgICAgICAgICAgICAgU25pdCBhIHphcgorKworKyAgICAgLT8sIC0taGVscCAgICAgICAgICAgICAgICAgR2l2ZSB0aGlzIGhlbHAgbGlzdAorKyAgICAgICAgLS11c2FnZSAgICAgICAgICAgICAgICBHaXZlIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZQorKyAgICAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgUHJpbnQgcHJvZ3JhbSB2ZXJzaW9uCisrCisrICAgVGhlIHN0cnVjdCBhcmdwX29wdGlvbiBhcnJheSBmb3IgdGhlIGFib3ZlIGNvdWxkIGxvb2sgbGlrZToKKysKKysgICB7CisrICAgICB7InBpZCIsICAgICAgICdwJywgICAgICAiUElEIiwgIDAsICJMaXN0IHRoZSBwcm9jZXNzIFBJRCJ9LAorKyAgICAgeyJwZ3JwIiwgICAgICBPUFRfUEdSUCwgIlBHUlAiLCAwLCAiTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUCJ9LAorKyAgICAgeyJuby1wYXJlbnQiLCAnUCcsICAgICAgICAgICAgICAwLCAgICAgMCwgIkluY2x1ZGUgcHJvY2Vzc2VzIHdpdGhvdXQgcGFyZW50cyJ9LAorKyAgICAgezAsICAgICAgICAgICAneCcsICAgICAgIDAsICAgICBPUFRJT05fQUxJQVN9LAorKyAgICAgeyJhbGwtZmllbGRzIiwnUScsICAgICAgIDAsICAgICAwLCAiRG9uJ3QgZWxpZGUgdW51c2FibGUgZmllbGRzIChub3JtYWxseSIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZiB0aGVyZSdzIHNvbWUgcmVhc29uIHBzIGNhbid0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcHJpbnQgYSBmaWVsZCBmb3IgYW55IHByb2Nlc3MsIGl0J3MiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVtb3ZlZCBmcm9tIHRoZSBvdXRwdXQgZW50aXJlbHkpIiB9LAorKyAgICAgeyJyZXZlcnNlIiwgICAncicsICAgICAgIDAsICAgICAwLCAiUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQifSwKKysgICAgIHsiZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24iLCAwLCAwLCBPUFRJT05fQUxJQVN9LAorKyAgICAgeyJzZXNzaW9uIiwgICBPUFRfU0VTUywgICJTSUQiLCBPUFRJT05fQVJHX09QVElPTkFMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWRkIHRoZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2Vzc2lvbiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNJRCAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIHNpZCBvZiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoZSBjdXJyZW50IHByb2Nlc3MpIiB9LAorKworKyAgICAgezAsMCwwLDAsICJIZXJlIGFyZSBzb21lIG1vcmUgb3B0aW9uczoifSwKKysgICAgIHsiZm9vbmx5IiwgJ2YnLCAiWk9UIiwgMCwgIkdsb3JrIGEgZm9vbmx5In0sCisrICAgICB7InphemEiLCAneicsIDAsIDAsICJTbml0IGEgemFyIn0sCisrCisrICAgICB7MH0KKysgICB9CisrCisrICAgTm90ZSB0aGF0IHRoZSBsYXN0IHRocmVlIG9wdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQgYnkgYXJncF9wYXJzZSwKKysgICB1bmxlc3MgeW91IHRlbGwgaXQgbm90IHRvIHdpdGggQVJHUF9OT19IRUxQLgorKworKyovCisrCisrLyogUmV0dXJucyB0cnVlIGlmIENIIG9jY3VycyBiZXR3ZWVuIEJFRyBhbmQgRU5ELiAgKi8KKytzdGF0aWMgaW50CisrZmluZF9jaGFyIChjaGFyIGNoLCBjaGFyICpiZWcsIGNoYXIgKmVuZCkKKyt7CisrICB3aGlsZSAoYmVnIDwgZW5kKQorKyAgICBpZiAoKmJlZyA9PSBjaCkKKysgICAgICByZXR1cm4gMTsKKysgICAgZWxzZQorKyAgICAgIGJlZysrOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0cnVjdCBob2xfY2x1c3RlcjsgICAgICAgICAgICAvKiBmd2QgZGVjbCAqLworKworK3N0cnVjdCBob2xfZW50cnkKKyt7CisrICAvKiBGaXJzdCBvcHRpb24uICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrICAvKiBOdW1iZXIgb2Ygb3B0aW9ucyAoaW5jbHVkaW5nIGFsaWFzZXMpLiAgKi8KKysgIHVuc2lnbmVkIG51bTsKKysKKysgIC8qIEEgcG9pbnRlcnMgaW50byB0aGUgSE9MJ3Mgc2hvcnRfb3B0aW9ucyBmaWVsZCwgdG8gdGhlIGZpcnN0IHNob3J0IG9wdGlvbgorKyAgICAgbGV0dGVyIGZvciB0aGlzIGVudHJ5LiAgVGhlIG9yZGVyIG9mIHRoZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyB0aGlzIHBvaW50CisrICAgICBjb3JyZXNwb25kcyB0byB0aGUgb3JkZXIgb2Ygb3B0aW9ucyBwb2ludGVkIHRvIGJ5IE9QVCwgYW5kIHRoZXJlIGFyZSBhdAorKyAgICAgbW9zdCBOVU0uICBBIHNob3J0IG9wdGlvbiByZWNvcmRlZCBpbiBhIG9wdGlvbiBmb2xsb3dpbmcgT1BUIGlzIG9ubHkKKysgICAgIHZhbGlkIGlmIGl0IG9jY3VycyBpbiB0aGUgcmlnaHQgcGxhY2UgaW4gU0hPUlRfT1BUSU9OUyAob3RoZXJ3aXNlIGl0J3MKKysgICAgIHByb2JhYmx5IGJlZW4gc2hhZG93ZWQgYnkgc29tZSBvdGhlciBlbnRyeSkuICAqLworKyAgY2hhciAqc2hvcnRfb3B0aW9uczsKKysKKysgIC8qIEVudHJpZXMgYXJlIHNvcnRlZCBieSB0aGVpciBncm91cCBmaXJzdCwgaW4gdGhlIG9yZGVyOgorKyAgICAgICAxLCAyLCAuLi4sIG4sIDAsIC1tLCAuLi4sIC0yLCAtMQorKyAgICAgYW5kIHRoZW4gYWxwaGFiZXRpY2FsbHkgd2l0aGluIGVhY2ggZ3JvdXAuICBUaGUgZGVmYXVsdCBpcyAwLiAgKi8KKysgIGludCBncm91cDsKKysKKysgIC8qIFRoZSBjbHVzdGVyIG9mIG9wdGlvbnMgdGhpcyBlbnRyeSBiZWxvbmdzIHRvLCBvciAwIGlmIG5vbmUuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyOworKworKyAgLyogVGhlIGFyZ3AgZnJvbSB3aGljaCB0aGlzIG9wdGlvbiBjYW1lLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworK307CisrCisrLyogQSBjbHVzdGVyIG9mIGVudHJpZXMgdG8gcmVmbGVjdCB0aGUgYXJncCB0cmVlIHN0cnVjdHVyZS4gICovCisrc3RydWN0IGhvbF9jbHVzdGVyCisreworKyAgLyogQSBkZXNjcmlwdGl2ZSBoZWFkZXIgcHJpbnRlZCBiZWZvcmUgb3B0aW9ucyBpbiB0aGlzIGNsdXN0ZXIuICAqLworKyAgY29uc3QgY2hhciAqaGVhZGVyOworKworKyAgLyogVXNlZCB0byBvcmRlciBjbHVzdGVycyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAgd2l0aCB0aGUgc2FtZSBwYXJlbnQsCisrICAgICBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXJyZWQgaW4gdGhlIHBhcmVudCBhcmdwJ3MgY2hpbGQKKysgICAgIGxpc3QuICAqLworKyAgaW50IGluZGV4OworKworKyAgLyogSG93IHRvIHNvcnQgdGhpcyBjbHVzdGVyIHdpdGggcmVzcGVjdCB0byBvcHRpb25zIGFuZCBvdGhlciBjbHVzdGVycyBhdCB0aGUKKysgICAgIHNhbWUgZGVwdGggKGNsdXN0ZXJzIGFsd2F5cyBmb2xsb3cgb3B0aW9ucyBpbiB0aGUgc2FtZSBncm91cCkuICAqLworKyAgaW50IGdyb3VwOworKworKyAgLyogVGhlIGNsdXN0ZXIgdG8gd2hpY2ggdGhpcyBjbHVzdGVyIGJlbG9uZ3MsIG9yIDAgaWYgaXQncyBhdCB0aGUgYmFzZQorKyAgICAgbGV2ZWwuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpwYXJlbnQ7CisrCisrICAvKiBUaGUgYXJncCBmcm9tIHdoaWNoIHRoaXMgY2x1c3RlciBpcyAoZXZlbnR1YWxseSkgZGVyaXZlZC4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFRoZSBkaXN0YW5jZSB0aGlzIGNsdXN0ZXIgaXMgZnJvbSB0aGUgcm9vdC4gICovCisrICBpbnQgZGVwdGg7CisrCisrICAvKiBDbHVzdGVycyBpbiBhIGdpdmVuIGhvbCBhcmUga2VwdCBpbiBhIGxpbmtlZCBsaXN0LCB0byBtYWtlIGZyZWVpbmcgdGhlbQorKyAgICAgcG9zc2libGUuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpuZXh0OworK307CisrCisrLyogQSBsaXN0IG9mIG9wdGlvbnMgZm9yIGhlbHAuICAqLworK3N0cnVjdCBob2wKKyt7CisrICAvKiBBbiBhcnJheSBvZiBob2xfZW50cnkncy4gICovCisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyaWVzOworKyAgLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgaG9sLiAgSWYgdGhpcyBmaWVsZCBpcyB6ZXJvLCB0aGUgb3RoZXJzCisrICAgICBhcmUgdW5kZWZpbmVkLiAgKi8KKysgIHVuc2lnbmVkIG51bV9lbnRyaWVzOworKworKyAgLyogQSBzdHJpbmcgY29udGFpbmluZyBhbGwgc2hvcnQgb3B0aW9ucyBpbiB0aGlzIEhPTC4gIEVhY2ggZW50cnkgY29udGFpbnMKKysgICAgIHBvaW50ZXJzIGludG8gdGhpcyBzdHJpbmcsIHNvIHRoZSBvcmRlciBjYW4ndCBiZSBtZXNzZWQgd2l0aCBibGluZGx5LiAgKi8KKysgIGNoYXIgKnNob3J0X29wdGlvbnM7CisrCisrICAvKiBDbHVzdGVycyBvZiBlbnRyaWVzIGluIHRoaXMgaG9sLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcnM7CisrfTsKKysKKysvKiBDcmVhdGUgYSBzdHJ1Y3QgaG9sIGZyb20gdGhlIG9wdGlvbnMgaW4gQVJHUC4gIENMVVNURVIgaXMgdGhlCisrICAgaG9sX2NsdXN0ZXIgaW4gd2hpY2ggdGhlc2UgZW50cmllcyBvY2N1ciwgb3IgMCwgaWYgYXQgdGhlIHJvb3QuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sICoKKyttYWtlX2hvbCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcikKKyt7CisrICBjaGFyICpzbzsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqbzsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0cyA9IGFyZ3AtPm9wdGlvbnM7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIHVuc2lnbmVkIG51bV9zaG9ydF9vcHRpb25zID0gMDsKKysgIHN0cnVjdCBob2wgKmhvbCA9IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG9sKSk7CisrCisrICBhc3NlcnQgKGhvbCk7CisrCisrICBob2wtPm51bV9lbnRyaWVzID0gMDsKKysgIGhvbC0+Y2x1c3RlcnMgPSAwOworKworKyAgaWYgKG9wdHMpCisrICAgIHsKKysgICAgICBpbnQgY3VyX2dyb3VwID0gMDsKKysKKysgICAgICAvKiBUaGUgZmlyc3Qgb3B0aW9uIG11c3Qgbm90IGJlIGFuIGFsaWFzLiAgKi8KKysgICAgICBhc3NlcnQgKCEgb2FsaWFzIChvcHRzKSk7CisrCisrICAgICAgLyogQ2FsY3VsYXRlIHRoZSBzcGFjZSBuZWVkZWQuICAqLworKyAgICAgIGZvciAobyA9IG9wdHM7ICEgb2VuZCAobyk7IG8rKykKKysgICAgICAgeworKyAgICAgICAgIGlmICghIG9hbGlhcyAobykpCisrICAgICAgICAgICBob2wtPm51bV9lbnRyaWVzKys7CisrICAgICAgICAgaWYgKG9zaG9ydCAobykpCisrICAgICAgICAgICBudW1fc2hvcnRfb3B0aW9ucysrOyAgICAgICAgLyogVGhpcyBpcyBhbiB1cHBlciBib3VuZC4gICovCisrICAgICAgIH0KKysKKysgICAgICBob2wtPmVudHJpZXMgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkgKiBob2wtPm51bV9lbnRyaWVzKTsKKysgICAgICBob2wtPnNob3J0X29wdGlvbnMgPSBtYWxsb2MgKG51bV9zaG9ydF9vcHRpb25zICsgMSk7CisrCisrICAgICAgYXNzZXJ0IChob2wtPmVudHJpZXMgJiYgaG9sLT5zaG9ydF9vcHRpb25zKTsKKysjaWYgU0laRV9NQVggPD0gVUlOVF9NQVgKKysgICAgICBhc3NlcnQgKGhvbC0+bnVtX2VudHJpZXMgPD0gU0laRV9NQVggLyBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysjZW5kaWYKKysKKysgICAgICAvKiBGaWxsIGluIHRoZSBlbnRyaWVzLiAgKi8KKysgICAgICBzbyA9IGhvbC0+c2hvcnRfb3B0aW9uczsKKysgICAgICBmb3IgKG8gPSBvcHRzLCBlbnRyeSA9IGhvbC0+ZW50cmllczsgISBvZW5kIChvKTsgZW50cnkrKykKKysgICAgICAgeworKyAgICAgICAgIGVudHJ5LT5vcHQgPSBvOworKyAgICAgICAgIGVudHJ5LT5udW0gPSAwOworKyAgICAgICAgIGVudHJ5LT5zaG9ydF9vcHRpb25zID0gc287CisrICAgICAgICAgZW50cnktPmdyb3VwID0gY3VyX2dyb3VwID0KKysgICAgICAgICAgIG8tPmdyb3VwCisrICAgICAgICAgICA/IG8tPmdyb3VwCisrICAgICAgICAgICA6ICgoIW8tPm5hbWUgJiYgIW8tPmtleSkKKysgICAgICAgICAgICAgID8gY3VyX2dyb3VwICsgMQorKyAgICAgICAgICAgICAgOiBjdXJfZ3JvdXApOworKyAgICAgICAgIGVudHJ5LT5jbHVzdGVyID0gY2x1c3RlcjsKKysgICAgICAgICBlbnRyeS0+YXJncCA9IGFyZ3A7CisrCisrICAgICAgICAgZG8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgZW50cnktPm51bSsrOworKyAgICAgICAgICAgICBpZiAob3Nob3J0IChvKSAmJiAhIGZpbmRfY2hhciAoby0+a2V5LCBob2wtPnNob3J0X29wdGlvbnMsIHNvKSkKKysgICAgICAgICAgICAgICAvKiBPIGhhcyBhIHZhbGlkIHNob3J0IG9wdGlvbiB3aGljaCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHVzZWQuKi8KKysgICAgICAgICAgICAgICAqc28rKyA9IG8tPmtleTsKKysgICAgICAgICAgICAgbysrOworKyAgICAgICAgICAgfQorKyAgICAgICAgIHdoaWxlICghIG9lbmQgKG8pICYmIG9hbGlhcyAobykpOworKyAgICAgICB9CisrICAgICAgKnNvID0gJ1wwJzsgICAgICAgICAgICAgIC8qIG51bGwgdGVybWluYXRlZCBzbyB3ZSBjYW4gZmluZCB0aGUgbGVuZ3RoICovCisrICAgIH0KKysKKysgIHJldHVybiBob2w7CisrfQorKworKy8qIEFkZCBhIG5ldyBjbHVzdGVyIHRvIEhPTCwgd2l0aCB0aGUgZ2l2ZW4gR1JPVVAgYW5kIEhFQURFUiAodGFrZW4gZnJvbSB0aGUKKysgICBhc3NvY2lhdGVkIGFyZ3AgY2hpbGQgbGlzdCBlbnRyeSksIElOREVYLCBhbmQgUEFSRU5ULCBhbmQgcmV0dXJuIGEgcG9pbnRlcgorKyAgIHRvIGl0LiAgQVJHUCBpcyB0aGUgYXJncCB0aGF0IHRoaXMgY2x1c3RlciByZXN1bHRzIGZyb20uICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKgorK2hvbF9hZGRfY2x1c3RlciAoc3RydWN0IGhvbCAqaG9sLCBpbnQgZ3JvdXAsIGNvbnN0IGNoYXIgKmhlYWRlciwgaW50IGluZGV4LAorKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKnBhcmVudCwgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3ApCisreworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbCA9IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG9sX2NsdXN0ZXIpKTsKKysgIGlmIChjbCkKKysgICAgeworKyAgICAgIGNsLT5ncm91cCA9IGdyb3VwOworKyAgICAgIGNsLT5oZWFkZXIgPSBoZWFkZXI7CisrCisrICAgICAgY2wtPmluZGV4ID0gaW5kZXg7CisrICAgICAgY2wtPnBhcmVudCA9IHBhcmVudDsKKysgICAgICBjbC0+YXJncCA9IGFyZ3A7CisrICAgICAgY2wtPmRlcHRoID0gcGFyZW50ID8gcGFyZW50LT5kZXB0aCArIDEgOiAwOworKworKyAgICAgIGNsLT5uZXh0ID0gaG9sLT5jbHVzdGVyczsKKysgICAgICBob2wtPmNsdXN0ZXJzID0gY2w7CisrICAgIH0KKysgIHJldHVybiBjbDsKKyt9CisrCisrLyogRnJlZSBIT0wgYW5kIGFueSByZXNvdXJjZXMgaXQgdXNlcy4gICovCisrc3RhdGljIHZvaWQKKytob2xfZnJlZSAoc3RydWN0IGhvbCAqaG9sKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2wgPSBob2wtPmNsdXN0ZXJzOworKworKyAgd2hpbGUgKGNsKQorKyAgICB7CisrICAgICAgc3RydWN0IGhvbF9jbHVzdGVyICpuZXh0ID0gY2wtPm5leHQ7CisrICAgICAgZnJlZSAoY2wpOworKyAgICAgIGNsID0gbmV4dDsKKysgICAgfQorKworKyAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICB7CisrICAgICAgZnJlZSAoaG9sLT5lbnRyaWVzKTsKKysgICAgICBmcmVlIChob2wtPnNob3J0X29wdGlvbnMpOworKyAgICB9CisrCisrICBmcmVlIChob2wpOworK30KKysKKytzdGF0aWMgaW50CisraG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSksCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgdW5zaWduZWQgbm9wdHM7CisrICBpbnQgdmFsID0gMDsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LCAqcmVhbCA9IGVudHJ5LT5vcHQ7CisrICBjaGFyICpzbyA9IGVudHJ5LT5zaG9ydF9vcHRpb25zOworKworKyAgZm9yIChvcHQgPSByZWFsLCBub3B0cyA9IGVudHJ5LT5udW07IG5vcHRzID4gMCAmJiAhdmFsOyBvcHQrKywgbm9wdHMtLSkKKysgICAgaWYgKG9zaG9ydCAob3B0KSAmJiAqc28gPT0gb3B0LT5rZXkpCisrICAgICAgeworKyAgICAgICBpZiAoIW9hbGlhcyAob3B0KSkKKysgICAgICAgICByZWFsID0gb3B0OworKyAgICAgICBpZiAob3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgdmFsID0gKCpmdW5jKShvcHQsIHJlYWwsIGRvbWFpbiwgY29va2llKTsKKysgICAgICAgc28rKzsKKysgICAgICB9CisrCisrICByZXR1cm4gdmFsOworK30KKysKKytzdGF0aWMgX19pbmxpbmVfXyBpbnQKKytfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCisraG9sX2VudHJ5X2xvbmdfaXRlcmF0ZSAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnksCisrICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKSwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIHVuc2lnbmVkIG5vcHRzOworKyAgaW50IHZhbCA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwgKnJlYWwgPSBlbnRyeS0+b3B0OworKworKyAgZm9yIChvcHQgPSByZWFsLCBub3B0cyA9IGVudHJ5LT5udW07IG5vcHRzID4gMCAmJiAhdmFsOyBvcHQrKywgbm9wdHMtLSkKKysgICAgaWYgKG9wdC0+bmFtZSkKKysgICAgICB7CisrICAgICAgIGlmICghb2FsaWFzIChvcHQpKQorKyAgICAgICAgIHJlYWwgPSBvcHQ7CisrICAgICAgIGlmIChvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB2YWwgPSAoKmZ1bmMpKG9wdCwgcmVhbCwgZG9tYWluLCBjb29raWUpOworKyAgICAgIH0KKysKKysgIHJldHVybiB2YWw7CisrfQorKworKy8qIEl0ZXJhdG9yIHRoYXQgcmV0dXJucyB0cnVlIGZvciB0aGUgZmlyc3Qgc2hvcnQgb3B0aW9uLiAgKi8KKytzdGF0aWMgX19pbmxpbmVfXyBpbnQKKyt1bnRpbF9zaG9ydCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICByZXR1cm4gb3Nob3J0IChvcHQpID8gb3B0LT5rZXkgOiAwOworK30KKysKKysvKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWxpZCBzaG9ydCBvcHRpb24gaW4gRU5UUlksIG9yIDAgaWYgdGhlcmUgaXMgbm9uZS4gICovCisrc3RhdGljIGNoYXIKKytob2xfZW50cnlfZmlyc3Rfc2hvcnQgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5KQorK3sKKysgIHJldHVybiBob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoZW50cnksIHVudGlsX3Nob3J0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgMCk7CisrfQorKworKy8qIFJldHVybnMgdGhlIGZpcnN0IHZhbGlkIGxvbmcgb3B0aW9uIGluIEVOVFJZLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytob2xfZW50cnlfZmlyc3RfbG9uZyAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkpCisreworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrICB1bnNpZ25lZCBudW07CisrICBmb3IgKG9wdCA9IGVudHJ5LT5vcHQsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICByZXR1cm4gb3B0LT5uYW1lOworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFJldHVybnMgdGhlIGVudHJ5IGluIEhPTCB3aXRoIHRoZSBsb25nIG9wdGlvbiBuYW1lIE5BTUUsIG9yIDAgaWYgdGhlcmUgaXMKKysgICBub25lLiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbF9lbnRyeSAqCisraG9sX2ZpbmRfZW50cnkgKHN0cnVjdCBob2wgKmhvbCwgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSA9IGhvbC0+ZW50cmllczsKKysgIHVuc2lnbmVkIG51bV9lbnRyaWVzID0gaG9sLT5udW1fZW50cmllczsKKysKKysgIHdoaWxlIChudW1fZW50cmllcy0tID4gMCkKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0ID0gZW50cnktPm9wdDsKKysgICAgICB1bnNpZ25lZCBudW1fb3B0cyA9IGVudHJ5LT5udW07CisrCisrICAgICAgd2hpbGUgKG51bV9vcHRzLS0gPiAwKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpICYmIHN0cmNtcCAob3B0LT5uYW1lLCBuYW1lKSA9PSAwKQorKyAgICAgICAgIHJldHVybiBlbnRyeTsKKysgICAgICAgZWxzZQorKyAgICAgICAgIG9wdCsrOworKworKyAgICAgIGVudHJ5Kys7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBJZiBhbiBlbnRyeSB3aXRoIHRoZSBsb25nIG9wdGlvbiBOQU1FIG9jY3VycyBpbiBIT0wsIHNldCBpdCdzIHNwZWNpYWwKKysgICBzb3J0IHBvc2l0aW9uIHRvIEdST1VQLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9zZXRfZ3JvdXAgKHN0cnVjdCBob2wgKmhvbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGdyb3VwKQorK3sKKysgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5ID0gaG9sX2ZpbmRfZW50cnkgKGhvbCwgbmFtZSk7CisrICBpZiAoZW50cnkpCisrICAgIGVudHJ5LT5ncm91cCA9IGdyb3VwOworK30KKysKKysvKiBPcmRlciBieSBncm91cDogIDAsIDEsIDIsIC4uLiwgbiwgLW0sIC4uLiwgLTIsIC0xLgorKyAgIEVRIGlzIHdoYXQgdG8gcmV0dXJuIGlmIEdST1VQMSBhbmQgR1JPVVAyIGFyZSB0aGUgc2FtZS4gICovCisrc3RhdGljIGludAorK2dyb3VwX2NtcCAoaW50IGdyb3VwMSwgaW50IGdyb3VwMiwgaW50IGVxKQorK3sKKysgIGlmIChncm91cDEgPT0gZ3JvdXAyKQorKyAgICByZXR1cm4gZXE7CisrICBlbHNlIGlmICgoZ3JvdXAxIDwgMCAmJiBncm91cDIgPCAwKSB8fCAoZ3JvdXAxID49IDAgJiYgZ3JvdXAyID49IDApKQorKyAgICByZXR1cm4gZ3JvdXAxIC0gZ3JvdXAyOworKyAgZWxzZQorKyAgICByZXR1cm4gZ3JvdXAyIC0gZ3JvdXAxOworK30KKysKKysvKiBDb21wYXJlIGNsdXN0ZXJzIENMMSAmIENMMiBieSB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBhcHBlYXIgaW4KKysgICBvdXRwdXQuICAqLworK3N0YXRpYyBpbnQKKytob2xfY2x1c3Rlcl9jbXAgKGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wxLCBjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsMikKKyt7CisrICAvKiBJZiBvbmUgY2x1c3RlciBpcyBkZWVwZXIgdGhhbiB0aGUgb3RoZXIsIHVzZSBpdHMgYW5jZXN0b3IgYXQgdGhlIHNhbWUKKysgICAgIGxldmVsLCBzbyB0aGF0IGZpbmRpbmcgdGhlIGNvbW1vbiBhbmNlc3RvciBpcyBzdHJhaWdodGZvcndhcmQuICAqLworKyAgd2hpbGUgKGNsMS0+ZGVwdGggPiBjbDItPmRlcHRoKQorKyAgICBjbDEgPSBjbDEtPnBhcmVudDsKKysgIHdoaWxlIChjbDItPmRlcHRoID4gY2wxLT5kZXB0aCkKKysgICAgY2wyID0gY2wyLT5wYXJlbnQ7CisrCisrICAvKiBOb3cgcmVkdWNlIGJvdGggY2x1c3RlcnMgdG8gdGhlaXIgYW5jZXN0b3JzIGF0IHRoZSBwb2ludCB3aGVyZSBib3RoIGhhdmUKKysgICAgIGEgY29tbW9uIHBhcmVudDsgdGhlc2UgY2FuIGJlIGRpcmVjdGx5IGNvbXBhcmVkLiAgKi8KKysgIHdoaWxlIChjbDEtPnBhcmVudCAhPSBjbDItPnBhcmVudCkKKysgICAgY2wxID0gY2wxLT5wYXJlbnQsIGNsMiA9IGNsMi0+cGFyZW50OworKworKyAgcmV0dXJuIGdyb3VwX2NtcCAoY2wxLT5ncm91cCwgY2wyLT5ncm91cCwgY2wyLT5pbmRleCAtIGNsMS0+aW5kZXgpOworK30KKysKKysvKiBSZXR1cm4gdGhlIGFuY2VzdG9yIG9mIENMIHRoYXQncyBqdXN0IGJlbG93IHRoZSByb290IChpLmUuLCBoYXMgYSBwYXJlbnQKKysgICBvZiAwKS4gICovCisrc3RhdGljIHN0cnVjdCBob2xfY2x1c3RlciAqCisraG9sX2NsdXN0ZXJfYmFzZSAoc3RydWN0IGhvbF9jbHVzdGVyICpjbCkKKyt7CisrICB3aGlsZSAoY2wtPnBhcmVudCkKKysgICAgY2wgPSBjbC0+cGFyZW50OworKyAgcmV0dXJuIGNsOworK30KKysKKysvKiBSZXR1cm4gdHJ1ZSBpZiBDTDEgaXMgYSBjaGlsZCBvZiBDTDIuICAqLworK3N0YXRpYyBpbnQKKytob2xfY2x1c3Rlcl9pc19jaGlsZCAoY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDEsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDIpCisreworKyAgd2hpbGUgKGNsMSAmJiBjbDEgIT0gY2wyKQorKyAgICBjbDEgPSBjbDEtPnBhcmVudDsKKysgIHJldHVybiBjbDEgPT0gY2wyOworK30KKysKKysvKiBHaXZlbiB0aGUgbmFtZSBvZiBhIE9QVElPTl9ET0Mgb3B0aW9uLCBtb2RpZmllcyBOQU1FIHRvIHN0YXJ0IGF0IHRoZSB0YWlsCisrICAgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgY29tcGFyaXNvbnMsIGFuZCByZXR1cm5zIHRydWUgaWZmIGl0IHNob3VsZCBiZQorKyAgIHRyZWF0ZWQgYXMgYSBub24tb3B0aW9uLiAgKi8KKytzdGF0aWMgaW50CisrY2Fub25fZG9jX29wdGlvbiAoY29uc3QgY2hhciAqKm5hbWUpCisreworKyAgaW50IG5vbl9vcHQ7CisrICAvKiBTa2lwIGluaXRpYWwgd2hpdGVzcGFjZS4gICovCisrICB3aGlsZSAoaXNzcGFjZSAoKipuYW1lKSkKKysgICAgKCpuYW1lKSsrOworKyAgLyogRGVjaWRlIHdoZXRoZXIgdGhpcyBsb29rcyBsaWtlIGFuIG9wdGlvbiAobGVhZGluZyBgLScpIG9yIG5vdC4gICovCisrICBub25fb3B0ID0gKCoqbmFtZSAhPSAnLScpOworKyAgLyogU2tpcCB1bnRpbCBwYXJ0IG9mIG5hbWUgdXNlZCBmb3Igc29ydGluZy4gICovCisrICB3aGlsZSAoKipuYW1lICYmICFpc2FsbnVtICgqKm5hbWUpKQorKyAgICAoKm5hbWUpKys7CisrICByZXR1cm4gbm9uX29wdDsKKyt9CisrCisrLyogT3JkZXIgRU5UUlkxICYgRU5UUlkyIGJ5IHRoZSBvcmRlciB3aGljaCB0aGV5IHNob3VsZCBhcHBlYXIgaW4gYSBoZWxwCisrICAgbGlzdGluZy4gICovCisrc3RhdGljIGludAorK2hvbF9lbnRyeV9jbXAgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5MSwKKysgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5MikKKyt7CisrICAvKiBUaGUgZ3JvdXAgbnVtYmVycyBieSB3aGljaCB0aGUgZW50cmllcyBzaG91bGQgYmUgb3JkZXJlZDsgaWYgZWl0aGVyIGlzCisrICAgICBpbiBhIGNsdXN0ZXIsIHRoZW4gdGhpcyBpcyBqdXN0IHRoZSBncm91cCB3aXRoaW4gdGhlIGNsdXN0ZXIuICAqLworKyAgaW50IGdyb3VwMSA9IGVudHJ5MS0+Z3JvdXAsIGdyb3VwMiA9IGVudHJ5Mi0+Z3JvdXA7CisrCisrICBpZiAoZW50cnkxLT5jbHVzdGVyICE9IGVudHJ5Mi0+Y2x1c3RlcikKKysgICAgeworKyAgICAgIC8qIFRoZSBlbnRyaWVzIGFyZSBub3Qgd2l0aGluIHRoZSBzYW1lIGNsdXN0ZXIsIHNvIHdlIGNhbid0IGNvbXBhcmUgdGhlbQorKyAgICAgICAgZGlyZWN0bHksIHdlIGhhdmUgdG8gdXNlIHRoZSBhcHByb3BpYXRlIGNsdXN0ZXJpbmcgbGV2ZWwgdG9vLiAgKi8KKysgICAgICBpZiAoISBlbnRyeTEtPmNsdXN0ZXIpCisrICAgICAgIC8qIEVOVFJZMSBpcyBhdCB0aGUgYGJhc2UgbGV2ZWwnLCBub3QgaW4gYSBjbHVzdGVyLCBzbyB3ZSBoYXZlIHRvCisrICAgICAgICAgIGNvbXBhcmUgaXQncyBncm91cCBudW1iZXIgd2l0aCB0aGF0IG9mIHRoZSBiYXNlIGNsdXN0ZXIgaW4gd2hpY2gKKysgICAgICAgICAgRU5UUlkyIHJlc2lkZXMuICBOb3RlIHRoYXQgaWYgdGhleSdyZSBpbiB0aGUgc2FtZSBncm91cCwgdGhlCisrICAgICAgICAgIGNsdXN0ZXJlZCBvcHRpb24gYWx3YXlzIGNvbWVzIGxhc3Rlci4gICovCisrICAgICAgIHJldHVybiBncm91cF9jbXAgKGdyb3VwMSwgaG9sX2NsdXN0ZXJfYmFzZSAoZW50cnkyLT5jbHVzdGVyKS0+Z3JvdXAsIC0xKTsKKysgICAgICBlbHNlIGlmICghIGVudHJ5Mi0+Y2x1c3RlcikKKysgICAgICAgLyogTGlrZXdpc2UsIGJ1dCBFTlRSWTIncyBub3QgaW4gYSBjbHVzdGVyLiAgKi8KKysgICAgICAgcmV0dXJuIGdyb3VwX2NtcCAoaG9sX2NsdXN0ZXJfYmFzZSAoZW50cnkxLT5jbHVzdGVyKS0+Z3JvdXAsIGdyb3VwMiwgMSk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBCb3RoIGVudHJpZXMgYXJlIGluIGNsdXN0ZXJzLCB3ZSBjYW4ganVzdCBjb21wYXJlIHRoZSBjbHVzdGVycy4gICovCisrICAgICAgIHJldHVybiBob2xfY2x1c3Rlcl9jbXAgKGVudHJ5MS0+Y2x1c3RlciwgZW50cnkyLT5jbHVzdGVyKTsKKysgICAgfQorKyAgZWxzZSBpZiAoZ3JvdXAxID09IGdyb3VwMikKKysgICAgLyogVGhlIGVudHJpZXMgYXJlIGJvdGggaW4gdGhlIHNhbWUgY2x1c3RlciBhbmQgZ3JvdXAsIHNvIGNvbXBhcmUgdGhlbQorKyAgICAgICBhbHBoYWJldGljYWxseS4gICovCisrICAgIHsKKysgICAgICBpbnQgc2hvcnQxID0gaG9sX2VudHJ5X2ZpcnN0X3Nob3J0IChlbnRyeTEpOworKyAgICAgIGludCBzaG9ydDIgPSBob2xfZW50cnlfZmlyc3Rfc2hvcnQgKGVudHJ5Mik7CisrICAgICAgaW50IGRvYzEgPSBvZG9jIChlbnRyeTEtPm9wdCk7CisrICAgICAgaW50IGRvYzIgPSBvZG9jIChlbnRyeTItPm9wdCk7CisrICAgICAgY29uc3QgY2hhciAqbG9uZzEgPSBob2xfZW50cnlfZmlyc3RfbG9uZyAoZW50cnkxKTsKKysgICAgICBjb25zdCBjaGFyICpsb25nMiA9IGhvbF9lbnRyeV9maXJzdF9sb25nIChlbnRyeTIpOworKworKyAgICAgIGlmIChkb2MxKQorKyAgICAgICBkb2MxID0gbG9uZzEgIT0gTlVMTCAmJiBjYW5vbl9kb2Nfb3B0aW9uICgmbG9uZzEpOworKyAgICAgIGlmIChkb2MyKQorKyAgICAgICBkb2MyID0gbG9uZzIgIT0gTlVMTCAmJiBjYW5vbl9kb2Nfb3B0aW9uICgmbG9uZzIpOworKworKyAgICAgIGlmIChkb2MxICE9IGRvYzIpCisrICAgICAgIC8qIGBkb2N1bWVudGF0aW9uJyBvcHRpb25zIGFsd2F5cyBmb2xsb3cgbm9ybWFsIG9wdGlvbnMgKG9yCisrICAgICAgICAgIGRvY3VtZW50YXRpb24gb3B0aW9ucyB0aGF0ICpsb29rKiBsaWtlIG5vcm1hbCBvcHRpb25zKS4gICovCisrICAgICAgIHJldHVybiBkb2MxIC0gZG9jMjsKKysgICAgICBlbHNlIGlmICghc2hvcnQxICYmICFzaG9ydDIgJiYgbG9uZzEgJiYgbG9uZzIpCisrICAgICAgIC8qIE9ubHkgbG9uZyBvcHRpb25zLiAgKi8KKysgICAgICAgcmV0dXJuIHN0cmNhc2VjbXAgKGxvbmcxLCBsb25nMik7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBDb21wYXJlIHNob3J0L3Nob3J0LCBsb25nL3Nob3J0LCBzaG9ydC9sb25nLCB1c2luZyB0aGUgZmlyc3QKKysgICAgICAgICAgY2hhcmFjdGVyIG9mIGxvbmcgb3B0aW9ucy4gIEVudHJpZXMgd2l0aG91dCAqYW55KiB2YWxpZAorKyAgICAgICAgICBvcHRpb25zIChzdWNoIGFzIG9wdGlvbnMgd2l0aCBPUFRJT05fSElEREVOIHNldCkgd2lsbCBiZSBwdXQKKysgICAgICAgICAgZmlyc3QsIGJ1dCBhcyB0aGV5J3JlIG5vdCBkaXNwbGF5ZWQsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlCisrICAgICAgICAgIHRoZXkgYXJlLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIGNoYXIgZmlyc3QxID0gc2hvcnQxID8gc2hvcnQxIDogbG9uZzEgPyAqbG9uZzEgOiAwOworKyAgICAgICAgIGNoYXIgZmlyc3QyID0gc2hvcnQyID8gc2hvcnQyIDogbG9uZzIgPyAqbG9uZzIgOiAwOworKyNpZmRlZiBfdG9sb3dlcgorKyAgICAgICAgIGludCBsb3dlcl9jbXAgPSBfdG9sb3dlciAoZmlyc3QxKSAtIF90b2xvd2VyIChmaXJzdDIpOworKyNlbHNlCisrICAgICAgICAgaW50IGxvd2VyX2NtcCA9IHRvbG93ZXIgKGZpcnN0MSkgLSB0b2xvd2VyIChmaXJzdDIpOworKyNlbmRpZgorKyAgICAgICAgIC8qIENvbXBhcmUgaWdub3JpbmcgY2FzZSwgZXhjZXB0IHdoZW4gdGhlIG9wdGlvbnMgYXJlIGJvdGggdGhlCisrICAgICAgICAgICAgc2FtZSBsZXR0ZXIsIGluIHdoaWNoIGNhc2UgbG93ZXItY2FzZSBhbHdheXMgY29tZXMgZmlyc3QuICAqLworKyAgICAgICAgIHJldHVybiBsb3dlcl9jbXAgPyBsb3dlcl9jbXAgOiBmaXJzdDIgLSBmaXJzdDE7CisrICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBXaXRoaW4gdGhlIHNhbWUgY2x1c3RlciwgYnV0IG5vdCB0aGUgc2FtZSBncm91cCwgc28ganVzdCBjb21wYXJlCisrICAgICAgIGdyb3Vwcy4gICovCisrICAgIHJldHVybiBncm91cF9jbXAgKGdyb3VwMSwgZ3JvdXAyLCAwKTsKKyt9CisrCisrLyogVmVyc2lvbiBvZiBob2xfZW50cnlfY21wIHdpdGggY29ycmVjdCBzaWduYXR1cmUgZm9yIHFzb3J0LiAgKi8KKytzdGF0aWMgaW50CisraG9sX2VudHJ5X3FjbXAgKGNvbnN0IHZvaWQgKmVudHJ5MV92LCBjb25zdCB2b2lkICplbnRyeTJfdikKKyt7CisrICByZXR1cm4gaG9sX2VudHJ5X2NtcCAoZW50cnkxX3YsIGVudHJ5Ml92KTsKKyt9CisrCisrLyogU29ydCBIT0wgYnkgZ3JvdXAgYW5kIGFscGhhYmV0aWNhbGx5IGJ5IG9wdGlvbiBuYW1lICh3aXRoIHNob3J0IG9wdGlvbnMKKysgICB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIGxvbmcpLiAgU2luY2UgdGhlIHNvcnRpbmcgaXMgZm9yIGRpc3BsYXkgcHVycG9zZXMKKysgICBvbmx5LCB0aGUgc2hhZG93aW5nIG9mIG9wdGlvbnMgaXNuJ3QgZWZmZWN0ZWQuICAqLworK3N0YXRpYyB2b2lkCisraG9sX3NvcnQgKHN0cnVjdCBob2wgKmhvbCkKKyt7CisrICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgIHFzb3J0IChob2wtPmVudHJpZXMsIGhvbC0+bnVtX2VudHJpZXMsIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSksCisrICAgICAgICAgIGhvbF9lbnRyeV9xY21wKTsKKyt9CisrCisrLyogQXBwZW5kIE1PUkUgdG8gSE9MLCBkZXN0cm95aW5nIE1PUkUgaW4gdGhlIHByb2Nlc3MuICBPcHRpb25zIGluIEhPTCBzaGFkb3cKKysgICBhbnkgaW4gTU9SRSB3aXRoIHRoZSBzYW1lIG5hbWUuICAqLworK3N0YXRpYyB2b2lkCisraG9sX2FwcGVuZCAoc3RydWN0IGhvbCAqaG9sLCBzdHJ1Y3QgaG9sICptb3JlKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqKmNsX2VuZCA9ICZob2wtPmNsdXN0ZXJzOworKworKyAgLyogU3RlYWwgTU9SRSdzIGNsdXN0ZXIgbGlzdCwgYW5kIGFkZCBpdCB0byB0aGUgZW5kIG9mIEhPTCdzLiAgKi8KKysgIHdoaWxlICgqY2xfZW5kKQorKyAgICBjbF9lbmQgPSAmKCpjbF9lbmQpLT5uZXh0OworKyAgKmNsX2VuZCA9IG1vcmUtPmNsdXN0ZXJzOworKyAgbW9yZS0+Y2x1c3RlcnMgPSAwOworKworKyAgLyogTWVyZ2UgZW50cmllcy4gICovCisrICBpZiAobW9yZS0+bnVtX2VudHJpZXMgPiAwKQorKyAgICB7CisrICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPT0gMCkKKysgICAgICAgeworKyAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgPSBtb3JlLT5udW1fZW50cmllczsKKysgICAgICAgICBob2wtPmVudHJpZXMgPSBtb3JlLT5lbnRyaWVzOworKyAgICAgICAgIGhvbC0+c2hvcnRfb3B0aW9ucyA9IG1vcmUtPnNob3J0X29wdGlvbnM7CisrICAgICAgICAgbW9yZS0+bnVtX2VudHJpZXMgPSAwOyAgICAgICAgLyogTWFyayBNT1JFJ3MgZmllbGRzIGFzIGludmFsaWQuICAqLworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAvKiBBcHBlbmQgdGhlIGVudHJpZXMgaW4gTU9SRSB0byB0aG9zZSBpbiBIT0wsIHRha2luZyBjYXJlIHRvIG9ubHkgYWRkCisrICAgICAgICAgIG5vbi1zaGFkb3dlZCBTSE9SVF9PUFRJT05TIHZhbHVlcy4gICovCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBsZWZ0OworKyAgICAgICAgIGNoYXIgKnNvLCAqbW9yZV9zbzsKKysgICAgICAgICBzdHJ1Y3QgaG9sX2VudHJ5ICplOworKyAgICAgICAgIHVuc2lnbmVkIG51bV9lbnRyaWVzID0gaG9sLT5udW1fZW50cmllcyArIG1vcmUtPm51bV9lbnRyaWVzOworKyAgICAgICAgIHN0cnVjdCBob2xfZW50cnkgKmVudHJpZXMgPQorKyAgICAgICAgICAgbWFsbG9jIChudW1fZW50cmllcyAqIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKyAgICAgICAgIHVuc2lnbmVkIGhvbF9zb19sZW4gPSBzdHJsZW4gKGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrICAgICAgICAgY2hhciAqc2hvcnRfb3B0aW9ucyA9CisrICAgICAgICAgICBtYWxsb2MgKGhvbF9zb19sZW4gKyBzdHJsZW4gKG1vcmUtPnNob3J0X29wdGlvbnMpICsgMSk7CisrCisrICAgICAgICAgYXNzZXJ0IChlbnRyaWVzICYmIHNob3J0X29wdGlvbnMpOworKyNpZiBTSVpFX01BWCA8PSBVSU5UX01BWAorKyAgICAgICAgIGFzc2VydCAobnVtX2VudHJpZXMgPD0gU0laRV9NQVggLyBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysjZW5kaWYKKysKKysgICAgICAgICBtZW1wY3B5IChtZW1wY3B5IChlbnRyaWVzLCBob2wtPmVudHJpZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKSwKKysgICAgICAgICAgICAgICAgICAgIG1vcmUtPmVudHJpZXMsCisrICAgICAgICAgICAgICAgICAgICBtb3JlLT5udW1fZW50cmllcyAqIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKworKyAgICAgICAgIG1lbXBjcHkgKHNob3J0X29wdGlvbnMsIGhvbC0+c2hvcnRfb3B0aW9ucywgaG9sX3NvX2xlbik7CisrCisrICAgICAgICAgLyogRml4IHVwIHRoZSBzaG9ydCBvcHRpb25zIHBvaW50ZXJzIGZyb20gSE9MLiAgKi8KKysgICAgICAgICBmb3IgKGUgPSBlbnRyaWVzLCBsZWZ0ID0gaG9sLT5udW1fZW50cmllczsgbGVmdCA+IDA7IGUrKywgbGVmdC0tKQorKyAgICAgICAgICAgZS0+c2hvcnRfb3B0aW9ucyArPSAoc2hvcnRfb3B0aW9ucyAtIGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrCisrICAgICAgICAgLyogTm93IGFkZCB0aGUgc2hvcnQgb3B0aW9ucyBmcm9tIE1PUkUsIGZpeGluZyB1cCBpdHMgZW50cmllcworKyAgICAgICAgICAgIHRvby4gICovCisrICAgICAgICAgc28gPSBzaG9ydF9vcHRpb25zICsgaG9sX3NvX2xlbjsKKysgICAgICAgICBtb3JlX3NvID0gbW9yZS0+c2hvcnRfb3B0aW9uczsKKysgICAgICAgICBmb3IgKGxlZnQgPSBtb3JlLT5udW1fZW50cmllczsgbGVmdCA+IDA7IGUrKywgbGVmdC0tKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBpbnQgb3B0c19sZWZ0OworKyAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdDsKKysKKysgICAgICAgICAgICAgZS0+c2hvcnRfb3B0aW9ucyA9IHNvOworKworKyAgICAgICAgICAgICBmb3IgKG9wdHNfbGVmdCA9IGUtPm51bSwgb3B0ID0gZS0+b3B0OyBvcHRzX2xlZnQ7IG9wdCsrLCBvcHRzX2xlZnQtLSkKKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBpbnQgY2ggPSAqbW9yZV9zbzsKKysgICAgICAgICAgICAgICAgIGlmIChvc2hvcnQgKG9wdCkgJiYgY2ggPT0gb3B0LT5rZXkpCisrICAgICAgICAgICAgICAgICAgIC8qIFRoZSBuZXh0IHNob3J0IG9wdGlvbiBpbiBNT1JFX1NPLCBDSCwgaXMgZnJvbSBPUFQuICAqLworKyAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgaWYgKCEgZmluZF9jaGFyIChjaCwgc2hvcnRfb3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X29wdGlvbnMgKyBob2xfc29fbGVuKSkKKysgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzaG9ydCBvcHRpb24gQ0ggaXNuJ3Qgc2hhZG93ZWQgYnkgSE9MJ3Mgb3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIGFkZCBpdCB0byB0aGUgc3VtLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICpzbysrID0gY2g7CisrICAgICAgICAgICAgICAgICAgICAgbW9yZV9zbysrOworKyAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKworKyAgICAgICAgICpzbyA9ICdcMCc7CisrCisrICAgICAgICAgZnJlZSAoaG9sLT5lbnRyaWVzKTsKKysgICAgICAgICBmcmVlIChob2wtPnNob3J0X29wdGlvbnMpOworKworKyAgICAgICAgIGhvbC0+ZW50cmllcyA9IGVudHJpZXM7CisrICAgICAgICAgaG9sLT5udW1fZW50cmllcyA9IG51bV9lbnRyaWVzOworKyAgICAgICAgIGhvbC0+c2hvcnRfb3B0aW9ucyA9IHNob3J0X29wdGlvbnM7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaG9sX2ZyZWUgKG1vcmUpOworK30KKysKKysvKiBJbnNlcnRzIGVub3VnaCBzcGFjZXMgdG8gbWFrZSBzdXJlIFNUUkVBTSBpcyBhdCBjb2x1bW4gQ09MLiAgKi8KKytzdGF0aWMgdm9pZAorK2luZGVudF90byAoYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHVuc2lnbmVkIGNvbCkKKyt7CisrICBpbnQgbmVlZGVkID0gY29sIC0gX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKTsKKysgIHdoaWxlIChuZWVkZWQtLSA+IDApCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnICcpOworK30KKysKKysvKiBPdXRwdXQgdG8gU1RSRUFNIGVpdGhlciBhIHNwYWNlLCBvciBhIG5ld2xpbmUgaWYgdGhlcmUgaXNuJ3Qgcm9vbSBmb3IgYXQKKysgICBsZWFzdCBFTlNVUkUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIHJpZ2h0IG1hcmdpbi4gICovCisrc3RhdGljIHZvaWQKKytzcGFjZSAoYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHNpemVfdCBlbnN1cmUpCisreworKyAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkgKyBlbnN1cmUKKysgICAgICA+PSBfX2FyZ3BfZm10c3RyZWFtX3JtYXJnaW4gKHN0cmVhbSkpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgIGVsc2UKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICcgJyk7CisrfQorKworKy8qIElmIHRoZSBvcHRpb24gUkVBTCBoYXMgYW4gYXJndW1lbnQsIHdlIHByaW50IGl0IGluIHVzaW5nIHRoZSBwcmludGYKKysgICBmb3JtYXQgUkVRX0ZNVCBvciBPUFRfRk1UIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0J3MgYSByZXF1aXJlZCBvcgorKyAgIG9wdGlvbmFsIGFyZ3VtZW50LiAgKi8KKytzdGF0aWMgdm9pZAorK2FyZyAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLCBjb25zdCBjaGFyICpyZXFfZm10LCBjb25zdCBjaGFyICpvcHRfZm10LAorKyAgICAgY29uc3QgY2hhciAqZG9tYWluLCBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBpZiAocmVhbC0+YXJnKQorKyAgICB7CisrICAgICAgaWYgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgb3B0X2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChkb21haW4sIHJlYWwtPmFyZykpOworKyAgICAgIGVsc2UKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgcmVxX2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChkb21haW4sIHJlYWwtPmFyZykpOworKyAgICB9CisrfQorKworKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGhvbF9lbnRyeV9oZWxwLiAgKi8KKysKKysvKiBTdGF0ZSB1c2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGhvbF9oZWxwLiAgKi8KKytzdHJ1Y3QgaG9sX2hlbHBfc3RhdGUKKyt7CisrICAvKiBQUkVWX0VOVFJZIHNob3VsZCBjb250YWluIHRoZSBwcmV2aW91cyBlbnRyeSBwcmludGVkLCBvciAwLiAgKi8KKysgIHN0cnVjdCBob2xfZW50cnkgKnByZXZfZW50cnk7CisrCisrICAvKiBJZiBhbiBlbnRyeSBpcyBpbiBhIGRpZmZlcmVudCBncm91cCBmcm9tIHRoZSBwcmV2aW91cyBvbmUsIGFuZCBTRVBfR1JPVVBTCisrICAgICBpcyB0cnVlLCB0aGVuIGEgYmxhbmsgbGluZSB3aWxsIGJlIHByaW50ZWQgYmVmb3JlIGFueSBvdXRwdXQuICovCisrICBpbnQgc2VwX2dyb3VwczsKKysKKysgIC8qIFRydWUgaWYgYSBkdXBsaWNhdGUgb3B0aW9uIGFyZ3VtZW50IHdhcyBzdXBwcmVzc2VkIChvbmx5IGV2ZXIgc2V0IGlmCisrICAgICBVUEFSQU1TLmR1cF9hcmdzIGlzIGZhbHNlKS4gICovCisrICBpbnQgc3VwcHJlc3NlZF9kdXBfYXJnOworK307CisrCisrLyogU29tZSBzdGF0ZSB1c2VkIHdoaWxlIHByaW50aW5nIGEgaGVscCBlbnRyeSAodXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoCisrICAgaGVscGVyIGZ1bmN0aW9ucykuICBTZWUgdGhlIGRvYyBmb3IgaG9sX2VudHJ5X2hlbHAgZm9yIG1vcmUgaW5mbywgYXMgbW9zdAorKyAgIG9mIHRoZSBmaWVsZHMgYXJlIGNvcGllZCBmcm9tIGl0cyBhcmd1bWVudHMuICAqLworK3N0cnVjdCBwZW50cnlfc3RhdGUKKyt7CisrICBjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtOworKyAgc3RydWN0IGhvbF9oZWxwX3N0YXRlICpoaHN0YXRlOworKworKyAgLyogVHJ1ZSBpZiBub3RoaW5nJ3MgYmVlbiBwcmludGVkIHNvIGZhci4gICovCisrICBpbnQgZmlyc3Q7CisrCisrICAvKiBJZiBub24temVybywgdGhlIHN0YXRlIHRoYXQgd2FzIHVzZWQgdG8gcHJpbnQgdGhpcyBoZWxwLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZTsKKyt9OworKworKy8qIElmIGEgdXNlciBkb2MgZmlsdGVyIHNob3VsZCBiZSBhcHBsaWVkIHRvIERPQywgZG8gc28uICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytmaWx0ZXJfZG9jIChjb25zdCBjaGFyICpkb2MsIGludCBrZXksIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIGlmIChhcmdwICYmIGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICAvKiBXZSBtdXN0IGFwcGx5IGEgdXNlciBmaWx0ZXIgdG8gdGhpcyBvdXRwdXQuICAqLworKyAgICB7CisrICAgICAgdm9pZCAqaW5wdXQgPSBfX2FyZ3BfaW5wdXQgKGFyZ3AsIHN0YXRlKTsKKysgICAgICByZXR1cm4gKCphcmdwLT5oZWxwX2ZpbHRlcikgKGtleSwgZG9jLCBpbnB1dCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogTm8gZmlsdGVyLiAgKi8KKysgICAgcmV0dXJuIGRvYzsKKyt9CisrCisrLyogUHJpbnRzIFNUUiBhcyBhIGhlYWRlciBsaW5lLCB3aXRoIHRoZSBtYXJnaW4gbGluZXMgc2V0IGFwcHJvcGlhdGVseSwgYW5kCisrICAgbm90ZXMgdGhlIGZhY3QgdGhhdCBncm91cHMgc2hvdWxkIGJlIHNlcGFyYXRlZCB3aXRoIGEgYmxhbmsgbGluZS4gIEFSR1AgaXMKKysgICB0aGUgYXJncCB0aGF0IHNob3VsZCBkaWN0YXRlIGFueSB1c2VyIGRvYyBmaWx0ZXJpbmcgdG8gdGFrZSBwbGFjZS4gIE5vdGUKKysgICB0aGF0IHRoZSBwcmV2aW91cyB3cmFwIG1hcmdpbiBpc24ndCByZXN0b3JlZCwgYnV0IHRoZSBsZWZ0IG1hcmdpbiBpcyByZXNldAorKyAgIHRvIDAuICAqLworK3N0YXRpYyB2b2lkCisrcHJpbnRfaGVhZGVyIChjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgICBzdHJ1Y3QgcGVudHJ5X3N0YXRlICpwZXN0KQorK3sKKysgIGNvbnN0IGNoYXIgKnRzdHIgPSBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sIHN0cik7CisrICBjb25zdCBjaGFyICpmc3RyID0gZmlsdGVyX2RvYyAodHN0ciwgQVJHUF9LRVlfSEVMUF9IRUFERVIsIGFyZ3AsIHBlc3QtPnN0YXRlKTsKKysKKysgIGlmIChmc3RyKQorKyAgICB7CisrICAgICAgaWYgKCpmc3RyKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKHBlc3QtPmhoc3RhdGUtPnByZXZfZW50cnkpCisrICAgICAgICAgICAvKiBQcmVjZWRlIHdpdGggYSBibGFuayBsaW5lLiAgKi8KKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBpbmRlbnRfdG8gKHBlc3QtPnN0cmVhbSwgdXBhcmFtcy5oZWFkZXJfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChwZXN0LT5zdHJlYW0sIHVwYXJhbXMuaGVhZGVyX2NvbCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAocGVzdC0+c3RyZWFtLCB1cGFyYW1zLmhlYWRlcl9jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAocGVzdC0+c3RyZWFtLCBmc3RyKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChwZXN0LT5zdHJlYW0sIDApOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysgICAgICAgfQorKworKyAgICAgIHBlc3QtPmhoc3RhdGUtPnNlcF9ncm91cHMgPSAxOyAvKiBTZXBhcmF0ZSBzdWJzZXF1ZW50IGdyb3Vwcy4gKi8KKysgICAgfQorKworKyAgaWYgKGZzdHIgIT0gdHN0cikKKysgICAgZnJlZSAoKGNoYXIgKikgZnN0cik7CisrfQorKworKy8qIEluc2VydHMgYSBjb21tYSBpZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBsaW5lLCBhbmQgdGhlbiBtYWtlcworKyAgIHN1cmUgd2UncmUgYXQgbGVhc3QgdG8gY29sdW1uIENPTC4gIElmIHRoaXMgKmlzKiB0aGUgZmlyc3QgaXRlbSBvbiBhIGxpbmUsCisrICAgcHJpbnRzIGFueSBwZW5kaW5nIHdoaXRlc3BhY2UvaGVhZGVycyB0aGF0IHNob3VsZCBwcmVjZWRlIHRoaXMgbGluZS4gQWxzbworKyAgIGNsZWFycyBGSVJTVC4gICovCisrc3RhdGljIHZvaWQKKytjb21tYSAodW5zaWduZWQgY29sLCBzdHJ1Y3QgcGVudHJ5X3N0YXRlICpwZXN0KQorK3sKKysgIGlmIChwZXN0LT5maXJzdCkKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKnBlID0gcGVzdC0+aGhzdGF0ZS0+cHJldl9lbnRyeTsKKysgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsID0gcGVzdC0+ZW50cnktPmNsdXN0ZXI7CisrCisrICAgICAgaWYgKHBlc3QtPmhoc3RhdGUtPnNlcF9ncm91cHMgJiYgcGUgJiYgcGVzdC0+ZW50cnktPmdyb3VwICE9IHBlLT5ncm91cCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChwZXN0LT5zdHJlYW0sICdcbicpOworKworKyAgICAgIGlmIChjbCAmJiBjbC0+aGVhZGVyICYmICpjbC0+aGVhZGVyCisrICAgICAgICAgJiYgKCFwZQorKyAgICAgICAgICAgICB8fCAocGUtPmNsdXN0ZXIgIT0gY2wKKysgICAgICAgICAgICAgICAgICYmICFob2xfY2x1c3Rlcl9pc19jaGlsZCAocGUtPmNsdXN0ZXIsIGNsKSkpKQorKyAgICAgICAvKiBJZiB3ZSdyZSBjaGFuZ2luZyBjbHVzdGVycywgdGhlbiB0aGlzIG11c3QgYmUgdGhlIHN0YXJ0IG9mIHRoZQorKyAgICAgICAgICBFTlRSWSdzIGNsdXN0ZXIgdW5sZXNzIHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHByZXZpb3VzIG9uZQorKyAgICAgICAgICAoaW4gd2hpY2ggY2FzZSB3ZSBoYWQganVzdCBwb3BwZWQgaW50byBhIHN1Yi1jbHVzdGVyIGZvciBhIGJpdCkuCisrICAgICAgICAgIElmIHNvLCB0aGVuIHByaW50IHRoZSBjbHVzdGVyJ3MgaGVhZGVyIGxpbmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgaW50IG9sZF93bSA9IF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiAocGVzdC0+c3RyZWFtKTsKKysgICAgICAgICBwcmludF9oZWFkZXIgKGNsLT5oZWFkZXIsIGNsLT5hcmdwLCBwZXN0KTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChwZXN0LT5zdHJlYW0sIG9sZF93bSk7CisrICAgICAgIH0KKysKKysgICAgICBwZXN0LT5maXJzdCA9IDA7CisrICAgIH0KKysgIGVsc2UKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChwZXN0LT5zdHJlYW0sICIsICIpOworKworKyAgaW5kZW50X3RvIChwZXN0LT5zdHJlYW0sIGNvbCk7CisrfQorKworKy8qIFByaW50IGhlbHAgZm9yIEVOVFJZIHRvIFNUUkVBTS4gICovCisrc3RhdGljIHZvaWQKKytob2xfZW50cnlfaGVscCAoc3RydWN0IGhvbF9lbnRyeSAqZW50cnksIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSwgc3RydWN0IGhvbF9oZWxwX3N0YXRlICpoaHN0YXRlKQorK3sKKysgIHVuc2lnbmVkIG51bTsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCA9IGVudHJ5LT5vcHQsICpvcHQ7CisrICBjaGFyICpzbyA9IGVudHJ5LT5zaG9ydF9vcHRpb25zOworKyAgaW50IGhhdmVfbG9uZ19vcHQgPSAwOyAgICAgICAvKiBXZSBoYXZlIGFueSBsb25nIG9wdGlvbnMuICAqLworKyAgLyogU2F2ZWQgbWFyZ2lucy4gICovCisrICBpbnQgb2xkX2xtID0gX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysgIGludCBvbGRfd20gPSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gKHN0cmVhbSk7CisrICAvKiBQRVNUIGlzIGEgc3RhdGUgYmxvY2sgaG9sZGluZyBzb21lIG9mIG91ciB2YXJpYWJsZXMgdGhhdCB3ZSdkIGxpa2UgdG8KKysgICAgIHNoYXJlIHdpdGggaGVscGVyIGZ1bmN0aW9ucy4gICovCisrICBzdHJ1Y3QgcGVudHJ5X3N0YXRlIHBlc3QgPSB7IGVudHJ5LCBzdHJlYW0sIGhoc3RhdGUsIDEsIHN0YXRlIH07CisrCisrICBpZiAoISBvZG9jIChyZWFsKSkKKysgICAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICAgeworKyAgICAgICAgIGhhdmVfbG9uZ19vcHQgPSAxOworKyAgICAgICAgIGJyZWFrOworKyAgICAgICB9CisrCisrICAvKiBGaXJzdCBlbWl0IHNob3J0IG9wdGlvbnMuICAqLworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLnNob3J0X29wdF9jb2wpOyAvKiBGb3IgdHJ1bHkgYml6YXJyZSBjYXNlcy4gKi8KKysgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICBpZiAob3Nob3J0IChvcHQpICYmIG9wdC0+a2V5ID09ICpzbykKKysgICAgICAvKiBPUFQgaGFzIGEgdmFsaWQgKG5vbiBzaGFkb3dlZCkgc2hvcnQgb3B0aW9uLiAgKi8KKysgICAgICB7CisrICAgICAgIGlmIChvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB7CisrICAgICAgICAgICBjb21tYSAodXBhcmFtcy5zaG9ydF9vcHRfY29sLCAmcGVzdCk7CisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJy0nKTsKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAqc28pOworKyAgICAgICAgICAgaWYgKCFoYXZlX2xvbmdfb3B0IHx8IHVwYXJhbXMuZHVwX2FyZ3MpCisrICAgICAgICAgICAgIGFyZyAocmVhbCwgIiAlcyIsICJbJXNdIiwKKysgICAgICAgICAgICAgICAgICBzdGF0ZSA9PSBOVUxMID8gTlVMTCA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrICAgICAgICAgICBlbHNlIGlmIChyZWFsLT5hcmcpCisrICAgICAgICAgICAgIGhoc3RhdGUtPnN1cHByZXNzZWRfZHVwX2FyZyA9IDE7CisrICAgICAgICAgfQorKyAgICAgICBzbysrOworKyAgICAgIH0KKysKKysgIC8qIE5vdywgbG9uZyBvcHRpb25zLiAgKi8KKysgIGlmIChvZG9jIChyZWFsKSkKKysgICAgLyogQSBgZG9jdW1lbnRhdGlvbicgb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5kb2Nfb3B0X2NvbCk7CisrICAgICAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgeworKyAgICAgICAgICAgY29tbWEgKHVwYXJhbXMuZG9jX29wdF9jb2wsICZwZXN0KTsKKysgICAgICAgICAgIC8qIENhbGxpbmcgZ2V0dGV4dCBoZXJlIGlzbid0IHF1aXRlIHJpZ2h0LCBzaW5jZSBzb3J0aW5nIHdpbGwKKysgICAgICAgICAgICAgIGhhdmUgYmVlbiBkb25lIG9uIHRoZSBvcmlnaW5hbDsgYnV0IGRvY3VtZW50YXRpb24gb3B0aW9ucworKyAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXR0eSByYXJlIGFueXdheS4uLiAgKi8KKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQtPm5hbWUpKTsKKysgICAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogQSByZWFsIGxvbmcgb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5sb25nX29wdF9jb2wpOworKyAgICAgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGNvbW1hICh1cGFyYW1zLmxvbmdfb3B0X2NvbCwgJnBlc3QpOworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIi0tJXMiLCBvcHQtPm5hbWUpOworKyAgICAgICAgICAgYXJnIChyZWFsLCAiPSVzIiwgIls9JXNdIiwKKysgICAgICAgICAgICAgICAgc3RhdGUgPT0gTlVMTCA/IE5VTEwgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgc3RyZWFtKTsKKysgICAgICAgICB9CisrICAgIH0KKysKKysgIC8qIE5leHQsIGRvY3VtZW50YXRpb24gc3RyaW5ncy4gICovCisrICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIDApOworKworKyAgaWYgKHBlc3QuZmlyc3QpCisrICAgIHsKKysgICAgICAvKiBEaWRuJ3QgcHJpbnQgYW55IHN3aXRjaGVzLCB3aGF0J3MgdXA/ICAqLworKyAgICAgIGlmICghb3Nob3J0IChyZWFsKSAmJiAhcmVhbC0+bmFtZSkKKysgICAgICAgLyogVGhpcyBpcyBhIGdyb3VwIGhlYWRlciwgcHJpbnQgaXQgbmljZWx5LiAgKi8KKysgICAgICAgcHJpbnRfaGVhZGVyIChyZWFsLT5kb2MsIGVudHJ5LT5hcmdwLCAmcGVzdCk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBKdXN0IGEgdG90YWxseSBzaGFkb3dlZCBvcHRpb24gb3IgbnVsbCBoZWFkZXI7IHByaW50IG5vdGhpbmcuICAqLworKyAgICAgICBnb3RvIGNsZWFudXA7ICAgICAgICAgICAvKiBKdXN0IHJldHVybiwgYWZ0ZXIgY2xlYW5pbmcgdXAuICAqLworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICp0c3RyID0gcmVhbC0+ZG9jID8gZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWwtPmRvYykgOiAwOworKyAgICAgIGNvbnN0IGNoYXIgKmZzdHIgPSBmaWx0ZXJfZG9jICh0c3RyLCByZWFsLT5rZXksIGVudHJ5LT5hcmdwLCBzdGF0ZSk7CisrICAgICAgaWYgKGZzdHIgJiYgKmZzdHIpCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBpbnQgY29sID0gX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIHVwYXJhbXMub3B0X2RvY19jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5vcHRfZG9jX2NvbCk7CisrCisrICAgICAgICAgaWYgKGNvbCA+ICh1bnNpZ25lZCBpbnQpICh1cGFyYW1zLm9wdF9kb2NfY29sICsgMykpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgZWxzZSBpZiAoY29sID49ICh1bnNpZ25lZCBpbnQpIHVwYXJhbXMub3B0X2RvY19jb2wpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgIiAgICIpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIGluZGVudF90byAoc3RyZWFtLCB1cGFyYW1zLm9wdF9kb2NfY29sKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgZnN0cik7CisrICAgICAgIH0KKysgICAgICBpZiAoZnN0ciAmJiBmc3RyICE9IHRzdHIpCisrICAgICAgIGZyZWUgKChjaGFyICopIGZzdHIpOworKworKyAgICAgIC8qIFJlc2V0IHRoZSBsZWZ0IG1hcmdpbi4gICovCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgIH0KKysKKysgIGhoc3RhdGUtPnByZXZfZW50cnkgPSBlbnRyeTsKKysKKytjbGVhbnVwOgorKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCBvbGRfbG0pOworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCBvbGRfd20pOworK30KKysKKysvKiBPdXRwdXQgYSBsb25nIGhlbHAgbWVzc2FnZSBhYm91dCB0aGUgb3B0aW9ucyBpbiBIT0wgdG8gU1RSRUFNLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9oZWxwIChzdHJ1Y3QgaG9sICpob2wsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICB1bnNpZ25lZCBudW07CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIHN0cnVjdCBob2xfaGVscF9zdGF0ZSBoaHN0YXRlID0geyAwLCAwLCAwIH07CisrCisrICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBudW0gPSBob2wtPm51bV9lbnRyaWVzOyBudW0gPiAwOyBlbnRyeSsrLCBudW0tLSkKKysgICAgaG9sX2VudHJ5X2hlbHAgKGVudHJ5LCBzdGF0ZSwgc3RyZWFtLCAmaGhzdGF0ZSk7CisrCisrICBpZiAoaGhzdGF0ZS5zdXBwcmVzc2VkX2R1cF9hcmcgJiYgdXBhcmFtcy5kdXBfYXJnc19ub3RlKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqdHN0ciA9IGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLCAiXAorK01hbmRhdG9yeSBvciBvcHRpb25hbCBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBhbHNvIG1hbmRhdG9yeSBvciBcCisrb3B0aW9uYWwgZm9yIGFueSBjb3JyZXNwb25kaW5nIHNob3J0IG9wdGlvbnMuIik7CisrICAgICAgY29uc3QgY2hhciAqZnN0ciA9IGZpbHRlcl9kb2MgKHRzdHIsIEFSR1BfS0VZX0hFTFBfRFVQX0FSR1NfTk9URSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5yb290X2FyZ3AgOiAwLCBzdGF0ZSk7CisrICAgICAgaWYgKGZzdHIgJiYgKmZzdHIpCisrICAgICAgIHsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIGZzdHIpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgfQorKyAgICAgIGlmIChmc3RyICYmIGZzdHIgIT0gdHN0cikKKysgICAgICAgZnJlZSAoKGNoYXIgKikgZnN0cik7CisrICAgIH0KKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgaG9sX3VzYWdlLiAgKi8KKysKKysvKiBJZiBPUFQgaXMgYSBzaG9ydCBvcHRpb24gd2l0aG91dCBhbiBhcmcsIGFwcGVuZCBpdHMga2V5IHRvIHRoZSBzdHJpbmcKKysgICBwb2ludGVyIHBvaW50ZXIgdG8gYnkgQ09PS0lFLCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlci4gICovCisrc3RhdGljIGludAorK2FkZF9hcmdsZXNzX3Nob3J0X29wdCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgY2hhciAqKnNuYW9fZW5kID0gY29va2llOworKyAgaWYgKCEob3B0LT5hcmcgfHwgcmVhbC0+YXJnKQorKyAgICAgICYmICEoKG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFncykgJiBPUFRJT05fTk9fVVNBR0UpKQorKyAgICAqKCpzbmFvX2VuZCkrKyA9IG9wdC0+a2V5OworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIElmIE9QVCBpcyBhIHNob3J0IG9wdGlvbiB3aXRoIGFuIGFyZywgb3V0cHV0IGEgdXNhZ2UgZW50cnkgZm9yIGl0IHRvIHRoZQorKyAgIHN0cmVhbSBwb2ludGVkIGF0IGJ5IENPT0tJRS4gICovCisrc3RhdGljIGludAorK3VzYWdlX2FyZ2Z1bF9zaG9ydF9vcHQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0gPSBjb29raWU7CisrICBjb25zdCBjaGFyICphcmcgPSBvcHQtPmFyZzsKKysgIGludCBmbGFncyA9IG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFnczsKKysKKysgIGlmICghIGFyZykKKysgICAgYXJnID0gcmVhbC0+YXJnOworKworKyAgaWYgKGFyZyAmJiAhKGZsYWdzICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgeworKyAgICAgIGFyZyA9IGRnZXR0ZXh0IChkb21haW4sIGFyZyk7CisrCisrICAgICAgaWYgKGZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLSVjWyVzXV0iLCBvcHQtPmtleSwgYXJnKTsKKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICAvKiBNYW51YWxseSBkbyBsaW5lIHdyYXBwaW5nIHNvIHRoYXQgaXQgKHByb2JhYmx5KSB3b24ndAorKyAgICAgICAgICAgIGdldCB3cmFwcGVkIGF0IHRoZSBlbWJlZGRlZCBzcGFjZS4gICovCisrICAgICAgICAgc3BhY2UgKHN0cmVhbSwgNiArIHN0cmxlbiAoYXJnKSk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIlstJWMgJXNdIiwgb3B0LT5rZXksIGFyZyk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIGVudHJ5IGZvciB0aGUgbG9uZyBvcHRpb24gb3B0IHRvIHRoZSBzdHJlYW0gcG9pbnRlZCBhdCBieQorKyAgIENPT0tJRS4gICovCisrc3RhdGljIGludAorK3VzYWdlX2xvbmdfb3B0IChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0gPSBjb29raWU7CisrICBjb25zdCBjaGFyICphcmcgPSBvcHQtPmFyZzsKKysgIGludCBmbGFncyA9IG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFnczsKKysKKysgIGlmICghIGFyZykKKysgICAgYXJnID0gcmVhbC0+YXJnOworKworKyAgaWYgKCEgKGZsYWdzICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgeworKyAgICAgIGlmIChhcmcpCisrICAgICAgIHsKKysgICAgICAgICBhcmcgPSBkZ2V0dGV4dCAoZG9tYWluLCBhcmcpOworKyAgICAgICAgIGlmIChmbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzWz0lc11dIiwgb3B0LT5uYW1lLCBhcmcpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0tJXM9JXNdIiwgb3B0LT5uYW1lLCBhcmcpOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzXSIsIG9wdC0+bmFtZSk7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBQcmludCBhIHNob3J0IHVzYWdlIGRlc2NyaXB0aW9uIGZvciB0aGUgYXJndW1lbnRzIGluIEhPTCB0byBTVFJFQU0uICAqLworK3N0YXRpYyB2b2lkCisraG9sX3VzYWdlIChzdHJ1Y3QgaG9sICpob2wsIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIG5lbnRyaWVzOworKyAgICAgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5OworKyAgICAgIGNoYXIgKnNob3J0X25vX2FyZ19vcHRzID0gYWxsb2NhIChzdHJsZW4gKGhvbC0+c2hvcnRfb3B0aW9ucykgKyAxKTsKKysgICAgICBjaGFyICpzbmFvX2VuZCA9IHNob3J0X25vX2FyZ19vcHRzOworKworKyAgICAgIC8qIEZpcnN0IHdlIHB1dCBhIGxpc3Qgb2Ygc2hvcnQgb3B0aW9ucyB3aXRob3V0IGFyZ3VtZW50cy4gICovCisrICAgICAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbmVudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzCisrICAgICAgICAgIDsgbmVudHJpZXMgPiAwCisrICAgICAgICAgIDsgZW50cnkrKywgbmVudHJpZXMtLSkKKysgICAgICAgaG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGVudHJ5LCBhZGRfYXJnbGVzc19zaG9ydF9vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sICZzbmFvX2VuZCk7CisrICAgICAgaWYgKHNuYW9fZW5kID4gc2hvcnRfbm9fYXJnX29wdHMpCisrICAgICAgIHsKKysgICAgICAgICAqc25hb19lbmQrKyA9IDA7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLSVzXSIsIHNob3J0X25vX2FyZ19vcHRzKTsKKysgICAgICAgfQorKworKyAgICAgIC8qIE5vdyBhIGxpc3Qgb2Ygc2hvcnQgb3B0aW9ucyAqd2l0aCogYXJndW1lbnRzLiAgKi8KKysgICAgICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBuZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMKKysgICAgICAgICAgOyBuZW50cmllcyA+IDAKKysgICAgICAgICAgOyBlbnRyeSsrLCBuZW50cmllcy0tKQorKyAgICAgICBob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoZW50cnksIHVzYWdlX2FyZ2Z1bF9zaG9ydF9vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sIHN0cmVhbSk7CisrCisrICAgICAgLyogRmluYWxseSwgYSBsaXN0IG9mIGxvbmcgb3B0aW9ucyAod2hldyEpLiAgKi8KKysgICAgICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBuZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMKKysgICAgICAgICAgOyBuZW50cmllcyA+IDAKKysgICAgICAgICAgOyBlbnRyeSsrLCBuZW50cmllcy0tKQorKyAgICAgICBob2xfZW50cnlfbG9uZ19pdGVyYXRlIChlbnRyeSwgdXNhZ2VfbG9uZ19vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgc3RyZWFtKTsKKysgICAgfQorK30KKysKKysvKiBNYWtlIGEgSE9MIGNvbnRhaW5pbmcgYWxsIGxldmVscyBvZiBvcHRpb25zIGluIEFSR1AuICBDTFVTVEVSIGlzIHRoZQorKyAgIGNsdXN0ZXIgaW4gd2hpY2ggQVJHUCdzIGVudHJpZXMgc2hvdWxkIGJlIGNsdXN0ZXJlZCwgb3IgMC4gICovCisrc3RhdGljIHN0cnVjdCBob2wgKgorK2FyZ3BfaG9sIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyKQorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKyAgc3RydWN0IGhvbCAqaG9sID0gbWFrZV9ob2wgKGFyZ3AsIGNsdXN0ZXIpOworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgeworKyAgICAgICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNoaWxkX2NsdXN0ZXIgPQorKyAgICAgICAgICgoY2hpbGQtPmdyb3VwIHx8IGNoaWxkLT5oZWFkZXIpCisrICAgICAgICAgIC8qIFB1dCBDSElMRC0+YXJncCB3aXRoaW4gaXRzIG93biBjbHVzdGVyLiAgKi8KKysgICAgICAgICAgPyBob2xfYWRkX2NsdXN0ZXIgKGhvbCwgY2hpbGQtPmdyb3VwLCBjaGlsZC0+aGVhZGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgLSBhcmdwLT5jaGlsZHJlbiwgY2x1c3RlciwgYXJncCkKKysgICAgICAgICAgLyogSnVzdCBtZXJnZSBpdCBpbnRvIHRoZSBwYXJlbnQncyBjbHVzdGVyLiAgKi8KKysgICAgICAgICAgOiBjbHVzdGVyKTsKKysgICAgICAgaG9sX2FwcGVuZCAoaG9sLCBhcmdwX2hvbCAoY2hpbGQtPmFyZ3AsIGNoaWxkX2NsdXN0ZXIpKSA7CisrICAgICAgIGNoaWxkKys7CisrICAgICAgfQorKyAgcmV0dXJuIGhvbDsKKyt9CisrCisrLyogQ2FsY3VsYXRlIGhvdyBtYW55IGRpZmZlcmVudCBsZXZlbHMgd2l0aCBhbHRlcm5hdGl2ZSBhcmdzIHN0cmluZ3MgZXhpc3QgaW4KKysgICBBUkdQLiAgKi8KKytzdGF0aWMgc2l6ZV90CisrYXJncF9hcmdzX2xldmVscyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3ApCisreworKyAgc2l6ZV90IGxldmVscyA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysKKysgIGlmIChhcmdwLT5hcmdzX2RvYyAmJiBzdHJjaHIgKGFyZ3AtPmFyZ3NfZG9jLCAnXG4nKSkKKysgICAgbGV2ZWxzKys7CisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICBsZXZlbHMgKz0gYXJncF9hcmdzX2xldmVscyAoKGNoaWxkKyspLT5hcmdwKTsKKysKKysgIHJldHVybiBsZXZlbHM7CisrfQorKworKy8qIFByaW50IGFsbCB0aGUgbm9uLW9wdGlvbiBhcmdzIGRvY3VtZW50ZWQgaW4gQVJHUCB0byBTVFJFQU0uICBBbnkgb3V0cHV0IGlzCisrICAgcHJlY2VkZWQgYnkgYSBzcGFjZS4gIExFVkVMUyBpcyBhIHBvaW50ZXIgdG8gYSBieXRlIHZlY3RvciB0aGUgbGVuZ3RoCisrICAgcmV0dXJuZWQgYnkgYXJncF9hcmdzX2xldmVsczsgaXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIHplcm8sIGFuZAorKyAgIHVwZGF0ZWQgYnkgdGhpcyByb3V0aW5lIGZvciB0aGUgbmV4dCBjYWxsIGlmIEFEVkFOQ0UgaXMgdHJ1ZS4gIFRydWUgaXMKKysgICByZXR1cm5lZCBhcyBsb25nIGFzIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm5zIHRvIG91dHB1dC4gICovCisrc3RhdGljIGludAorK2FyZ3BfYXJnc191c2FnZSAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICAgICAgICAgY2hhciAqKmxldmVscywgaW50IGFkdmFuY2UsIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGNoYXIgKm91cl9sZXZlbCA9ICpsZXZlbHM7CisrICBpbnQgbXVsdGlwbGUgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrICBjb25zdCBjaGFyICp0ZG9jID0gZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCBhcmdwLT5hcmdzX2RvYyksICpubCA9IDA7CisrICBjb25zdCBjaGFyICpmZG9jID0gZmlsdGVyX2RvYyAodGRvYywgQVJHUF9LRVlfSEVMUF9BUkdTX0RPQywgYXJncCwgc3RhdGUpOworKworKyAgaWYgKGZkb2MpCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpjcCA9IGZkb2M7CisrICAgICAgbmwgPSBzdHJjaHJudWwgKGNwLCAnXG4nKTsKKysgICAgICBpZiAoKm5sICE9ICdcMCcpCisrICAgICAgIC8qIFRoaXMgaXMgYSBgbXVsdGktbGV2ZWwnIGFyZ3MgZG9jOyBhZHZhbmNlIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uCisrICAgICAgICAgIGFzIGRldGVybWluZWQgYnkgb3VyIHN0YXRlIGluIExFVkVMUywgYW5kIHVwZGF0ZSBMRVZFTFMuICAqLworKyAgICAgICB7CisrICAgICAgICAgaW50IGk7CisrICAgICAgICAgbXVsdGlwbGUgPSAxOworKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAqb3VyX2xldmVsOyBpKyspCisrICAgICAgICAgICBjcCA9IG5sICsgMSwgbmwgPSBzdHJjaHJudWwgKGNwLCAnXG4nKTsKKysgICAgICAgICAoKmxldmVscykrKzsKKysgICAgICAgfQorKworKyAgICAgIC8qIE1hbnVhbGx5IGRvIGxpbmUgd3JhcHBpbmcgc28gdGhhdCBpdCAocHJvYmFibHkpIHdvbid0IGdldCB3cmFwcGVkIGF0CisrICAgICAgICBhbnkgZW1iZWRkZWQgc3BhY2VzLiAgKi8KKysgICAgICBzcGFjZSAoc3RyZWFtLCAxICsgbmwgLSBjcCk7CisrCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoc3RyZWFtLCBjcCwgbmwgLSBjcCk7CisrICAgIH0KKysgIGlmIChmZG9jICYmIGZkb2MgIT0gdGRvYykKKysgICAgZnJlZSAoKGNoYXIgKilmZG9jKTsgICAgICAgLyogRnJlZSB1c2VyJ3MgbW9kaWZpZWQgZG9jIHN0cmluZy4gICovCisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICBhZHZhbmNlID0gIWFyZ3BfYXJnc191c2FnZSAoKGNoaWxkKyspLT5hcmdwLCBzdGF0ZSwgbGV2ZWxzLCBhZHZhbmNlLCBzdHJlYW0pOworKworKyAgaWYgKGFkdmFuY2UgJiYgbXVsdGlwbGUpCisrICAgIHsKKysgICAgICAvKiBOZWVkIHRvIGluY3JlbWVudCBvdXIgbGV2ZWwuICAqLworKyAgICAgIGlmICgqbmwpCisrICAgICAgIC8qIFRoZXJlJ3MgbW9yZSB3ZSBjYW4gZG8gaGVyZS4gICovCisrICAgICAgIHsKKysgICAgICAgICAoKm91cl9sZXZlbCkrKzsKKysgICAgICAgICBhZHZhbmNlID0gMDsgICAgICAgICAgLyogT3VyIHBhcmVudCBzaG91bGRuJ3QgYWR2YW5jZSBhbHNvLiAqLworKyAgICAgICB9CisrICAgICAgZWxzZSBpZiAoKm91cl9sZXZlbCA+IDApCisrICAgICAgIC8qIFdlIGhhZCBtdWx0aXBsZSBsZXZlbHMsIGJ1dCB1c2VkIHRoZW0gdXA7IHJlc2V0IHRvIHplcm8uICAqLworKyAgICAgICAqb3VyX2xldmVsID0gMDsKKysgICAgfQorKworKyAgcmV0dXJuICFhZHZhbmNlOworK30KKysKKysvKiBQcmludCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgQVJHUCB0byBTVFJFQU07IGlmIFBPU1QgaXMgZmFsc2UsIHRoZW4KKysgICBldmVyeXRoaW5nIHByZWNlZWRpbmcgYSBgXHYnIGNoYXJhY3RlciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIChvcgorKyAgIHRoZSB3aG9sZSBzdHJpbmcsIGZvciB0aG9zZSB3aXRoIG5vbmUpIGlzIHByaW50ZWQsIG90aGVyd2lzZSwgZXZlcnl0aGluZworKyAgIGZvbGxvd2luZyB0aGUgYFx2JyBjaGFyYWN0ZXIgKG5vdGhpbmcgZm9yIHN0cmluZ3Mgd2l0aG91dCkuICBFYWNoIHNlcGFyYXRlCisrICAgYml0IG9mIGRvY3VtZW50YXRpb24gaXMgc2VwYXJhdGVkIGEgYmxhbmsgbGluZSwgYW5kIGlmIFBSRV9CTEFOSyBpcyB0cnVlLAorKyAgIHRoZW4gdGhlIGZpcnN0IGlzIGFzIHdlbGwuICBJZiBGSVJTVF9PTkxZIGlzIHRydWUsIG9ubHkgdGhlIGZpcnN0CisrICAgb2NjdXJyZW5jZSBpcyBvdXRwdXQuICBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIG91dHB1dC4gICovCisrc3RhdGljIGludAorK2FyZ3BfZG9jIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLAorKyAgICAgICAgIGludCBwb3N0LCBpbnQgcHJlX2JsYW5rLCBpbnQgZmlyc3Rfb25seSwKKysgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBjb25zdCBjaGFyICp0ZXh0OworKyAgY29uc3QgY2hhciAqaW5wX3RleHQ7CisrICB2b2lkICppbnB1dCA9IDA7CisrICBpbnQgYW55dGhpbmcgPSAwOworKyAgc2l6ZV90IGlucF90ZXh0X2xpbWl0ID0gMDsKKysgIGNvbnN0IGNoYXIgKmRvYyA9IGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgYXJncC0+ZG9jKTsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKworKyAgaWYgKGRvYykKKysgICAgeworKyAgICAgIGNoYXIgKnZ0ID0gc3RyY2hyIChkb2MsICdcdicpOworKyAgICAgIGlucF90ZXh0ID0gcG9zdCA/ICh2dCA/IHZ0ICsgMSA6IDApIDogZG9jOworKyAgICAgIGlucF90ZXh0X2xpbWl0ID0gKCFwb3N0ICYmIHZ0KSA/ICh2dCAtIGRvYykgOiAwOworKyAgICB9CisrICBlbHNlCisrICAgIGlucF90ZXh0ID0gMDsKKysKKysgIGlmIChhcmdwLT5oZWxwX2ZpbHRlcikKKysgICAgLyogV2UgaGF2ZSB0byBmaWx0ZXIgdGhlIGRvYyBzdHJpbmdzLiAgKi8KKysgICAgeworKyAgICAgIGlmIChpbnBfdGV4dF9saW1pdCkKKysgICAgICAgLyogQ29weSBJTlBfVEVYVCBzbyB0aGF0IGl0J3MgbnVsLXRlcm1pbmF0ZWQuICAqLworKyAgICAgICBpbnBfdGV4dCA9IHN0cm5kdXAgKGlucF90ZXh0LCBpbnBfdGV4dF9saW1pdCk7CisrICAgICAgaW5wdXQgPSBfX2FyZ3BfaW5wdXQgKGFyZ3AsIHN0YXRlKTsKKysgICAgICB0ZXh0ID0KKysgICAgICAgKCphcmdwLT5oZWxwX2ZpbHRlcikgKHBvc3QKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQVJHUF9LRVlfSEVMUF9QT1NUX0RPQworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBUkdQX0tFWV9IRUxQX1BSRV9ET0MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnBfdGV4dCwgaW5wdXQpOworKyAgICB9CisrICBlbHNlCisrICAgIHRleHQgPSAoY29uc3QgY2hhciAqKSBpbnBfdGV4dDsKKysKKysgIGlmICh0ZXh0KQorKyAgICB7CisrICAgICAgaWYgKHByZV9ibGFuaykKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKworKyAgICAgIGlmICh0ZXh0ID09IGlucF90ZXh0ICYmIGlucF90ZXh0X2xpbWl0KQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChzdHJlYW0sIGlucF90ZXh0LCBpbnBfdGV4dF9saW1pdCk7CisrICAgICAgZWxzZQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgdGV4dCk7CisrCisrICAgICAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkgPiBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gKHN0cmVhbSkpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysgIGlmICh0ZXh0ICYmIHRleHQgIT0gaW5wX3RleHQpCisrICAgIGZyZWUgKChjaGFyICopIHRleHQpOyAgICAgIC8qIEZyZWUgVEVYVCByZXR1cm5lZCBmcm9tIHRoZSBoZWxwIGZpbHRlci4gICovCisrICBpZiAoaW5wX3RleHQgJiYgaW5wX3RleHRfbGltaXQgJiYgYXJncC0+aGVscF9maWx0ZXIpCisrICAgIGZyZWUgKChjaGFyICopIGlucF90ZXh0KTsgIC8qIFdlIGNvcGllZCBJTlBfVEVYVCwgc28gZnJlZSBpdCBub3cuICAqLworKworKyAgaWYgKHBvc3QgJiYgYXJncC0+aGVscF9maWx0ZXIpCisrICAgIC8qIE5vdyBzZWUgaWYgd2UgaGF2ZSB0byBvdXRwdXQgYSBBUkdQX0tFWV9IRUxQX0VYVFJBIHRleHQuICAqLworKyAgICB7CisrICAgICAgdGV4dCA9ICgqYXJncC0+aGVscF9maWx0ZXIpIChBUkdQX0tFWV9IRUxQX0VYVFJBLCAwLCBpbnB1dCk7CisrICAgICAgaWYgKHRleHQpCisrICAgICAgIHsKKysgICAgICAgICBpZiAoYW55dGhpbmcgfHwgcHJlX2JsYW5rKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCB0ZXh0KTsKKysgICAgICAgICBmcmVlICgoY2hhciAqKSB0ZXh0KTsKKysgICAgICAgICBpZiAoX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKQorKyAgICAgICAgICAgICA+IF9fYXJncF9mbXRzdHJlYW1fbG1hcmdpbiAoc3RyZWFtKSkKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3AgJiYgIShmaXJzdF9vbmx5ICYmIGFueXRoaW5nKSkKKysgICAgICBhbnl0aGluZyB8PQorKyAgICAgICBhcmdwX2RvYyAoKGNoaWxkKyspLT5hcmdwLCBzdGF0ZSwKKysgICAgICAgICAgICAgICAgIHBvc3QsIGFueXRoaW5nIHx8IHByZV9ibGFuaywgZmlyc3Rfb25seSwKKysgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrCisrICByZXR1cm4gYW55dGhpbmc7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gU1RSRUFNLiAgSWYgY2FsbGVkIGZyb20KKysgICBhcmdwX3N0YXRlX2hlbHAsIFNUQVRFIGlzIHRoZSByZWxldmVudCBwYXJzaW5nIHN0YXRlLiAgRkxBR1MgYXJlIGZyb20gdGhlCisrICAgc2V0IEFSR1BfSEVMUF8qLiAgTkFNRSBpcyB3aGF0IHRvIHVzZSB3aGVyZXZlciBhIGBwcm9ncmFtIG5hbWUnIGlzCisrICAgbmVlZGVkLiAqLworK3N0YXRpYyB2b2lkCisrX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIEZJTEUgKnN0cmVhbSwKKysgICAgICAgdW5zaWduZWQgZmxhZ3MsIGNoYXIgKm5hbWUpCisreworKyAgaW50IGFueXRoaW5nID0gMDsgICAgICAgICAgICAvKiBXaGV0aGVyIHdlJ3ZlIG91dHB1dCBhbnl0aGluZy4gICovCisrICBzdHJ1Y3QgaG9sICpob2wgPSAwOworKyAgYXJncF9mbXRzdHJlYW1fdCBmczsKKysKKysgIGlmICghIHN0cmVhbSkKKysgICAgcmV0dXJuOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgIGZsb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgIGZpbGxfaW5fdXBhcmFtcyAoc3RhdGUpOworKworKyAgZnMgPSBfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKHN0cmVhbSwgMCwgdXBhcmFtcy5ybWFyZ2luLCAwKTsKKysgIGlmICghIGZzKQorKyAgICB7CisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgKEFSR1BfSEVMUF9VU0FHRSB8IEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9MT05HKSkKKysgICAgeworKyAgICAgIGhvbCA9IGFyZ3BfaG9sIChhcmdwLCAwKTsKKysKKysgICAgICAvKiBJZiBwcmVzZW50LCB0aGVzZSBvcHRpb25zIGFsd2F5cyBjb21lIGxhc3QuICAqLworKyAgICAgIGhvbF9zZXRfZ3JvdXAgKGhvbCwgImhlbHAiLCAtMSk7CisrICAgICAgaG9sX3NldF9ncm91cCAoaG9sLCAidmVyc2lvbiIsIC0xKTsKKysKKysgICAgICBob2xfc29ydCAoaG9sKTsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgKEFSR1BfSEVMUF9VU0FHRSB8IEFSR1BfSEVMUF9TSE9SVF9VU0FHRSkpCisrICAgIC8qIFByaW50IGEgc2hvcnQgYFVzYWdlOicgbWVzc2FnZS4gICovCisrICAgIHsKKysgICAgICBpbnQgZmlyc3RfcGF0dGVybiA9IDEsIG1vcmVfcGF0dGVybnM7CisrICAgICAgc2l6ZV90IG51bV9wYXR0ZXJuX2xldmVscyA9IGFyZ3BfYXJnc19sZXZlbHMgKGFyZ3ApOworKyAgICAgIGNoYXIgKnBhdHRlcm5fbGV2ZWxzID0gYWxsb2NhIChudW1fcGF0dGVybl9sZXZlbHMpOworKworKyAgICAgIG1lbXNldCAocGF0dGVybl9sZXZlbHMsIDAsIG51bV9wYXR0ZXJuX2xldmVscyk7CisrCisrICAgICAgZG8KKysgICAgICAgeworKyAgICAgICAgIGludCBvbGRfbG07CisrICAgICAgICAgaW50IG9sZF93bSA9IF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGZzLCB1cGFyYW1zLnVzYWdlX2luZGVudCk7CisrICAgICAgICAgY2hhciAqbGV2ZWxzID0gcGF0dGVybl9sZXZlbHM7CisrCisrICAgICAgICAgaWYgKGZpcnN0X3BhdHRlcm4pCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsICIlcyAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCAiVXNhZ2U6IiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGZzLCAiJXMgJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgIiAgb3I6ICIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworKworKyAgICAgICAgIC8qIFdlIHNldCB0aGUgbG1hcmdpbiBhcyB3ZWxsIGFzIHRoZSB3bWFyZ2luLCBiZWNhdXNlIGhvbF91c2FnZQorKyAgICAgICAgICAgIG1hbnVhbGx5IHdyYXBzIG9wdGlvbnMgd2l0aCBuZXdsaW5lIHRvIGF2b2lkIGFubm95aW5nIGJyZWFrcy4gICovCisrICAgICAgICAgb2xkX2xtID0gX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoZnMsIHVwYXJhbXMudXNhZ2VfaW5kZW50KTsKKysKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfU0hPUlRfVVNBR0UpCisrICAgICAgICAgICAvKiBKdXN0IHNob3cgd2hlcmUgdGhlIG9wdGlvbnMgZ28uICAqLworKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgICAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFtPUFRJT04uLi5dIikpOworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIC8qIEFjdHVhbGx5IHByaW50IHRoZSBvcHRpb25zLiAgKi8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgaG9sX3VzYWdlIChob2wsIGZzKTsKKysgICAgICAgICAgICAgZmxhZ3MgfD0gQVJHUF9IRUxQX1NIT1JUX1VTQUdFOyAvKiBCdXQgb25seSBkbyBzbyBvbmNlLiAgKi8KKysgICAgICAgICAgIH0KKysKKysgICAgICAgICBtb3JlX3BhdHRlcm5zID0gYXJncF9hcmdzX3VzYWdlIChhcmdwLCBzdGF0ZSwgJmxldmVscywgMSwgZnMpOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGZzLCBvbGRfd20pOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGZzLCBvbGRfbG0pOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgICAgIGFueXRoaW5nID0gMTsKKysKKysgICAgICAgICBmaXJzdF9wYXR0ZXJuID0gMDsKKysgICAgICAgfQorKyAgICAgIHdoaWxlIChtb3JlX3BhdHRlcm5zKTsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1BSRV9ET0MpCisrICAgIGFueXRoaW5nIHw9IGFyZ3BfZG9jIChhcmdwLCBzdGF0ZSwgMCwgMCwgMSwgZnMpOworKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1NFRSkKKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCAiXAorK1RyeSBgJXMgLS1oZWxwJyBvciBgJXMgLS11c2FnZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBuYW1lKTsKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9MT05HKQorKyAgICAvKiBQcmludCBhIGxvbmcsIGRldGFpbGVkIGhlbHAgbWVzc2FnZS4gICovCisrICAgIHsKKysgICAgICAvKiBQcmludCBpbmZvIGFib3V0IGFsbCB0aGUgb3B0aW9ucy4gICovCisrICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKGFueXRoaW5nKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChmcywgJ1xuJyk7CisrICAgICAgICAgaG9sX2hlbHAgKGhvbCwgc3RhdGUsIGZzKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1BPU1RfRE9DKQorKyAgICAvKiBQcmludCBhbnkgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGF0IHRoZSBlbmQuICAqLworKyAgICBhbnl0aGluZyB8PSBhcmdwX2RvYyAoYXJncCwgc3RhdGUsIDEsIGFueXRoaW5nLCAwLCBmcyk7CisrCisrICBpZiAoKGZsYWdzICYgQVJHUF9IRUxQX0JVR19BRERSKSAmJiBhcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3MpCisrICAgIHsKKysgICAgICBpZiAoYW55dGhpbmcpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcG9ydCBidWdzIHRvICVzLlxuIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzKTsKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgIGlmIChob2wpCisrICAgIGhvbF9mcmVlIChob2wpOworKworKyAgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChmcyk7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gU1RSRUFNLiAgRkxBR1MgYXJlIGZyb20gdGhlIHNldAorKyAgIEFSR1BfSEVMUF8qLiAgTkFNRSBpcyB3aGF0IHRvIHVzZSB3aGVyZXZlciBhIGBwcm9ncmFtIG5hbWUnIGlzIG5lZWRlZC4gKi8KKyt2b2lkIGFyZ3BfaGVscCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIEZJTEUgKnN0cmVhbSwKKysgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCBjaGFyICpuYW1lKQorK3sKKysgIF9oZWxwIChhcmdwLCAwLCBzdHJlYW0sIGZsYWdzLCBuYW1lKTsKKyt9CisrCisrY2hhciAqCisrX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCkKKyt7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUVfXworKy8qCisrICogdUNsaWJjIHByb3ZpZGVzIGJvdGggcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgYW5kCisrICogcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUKKysgKi8KKysgcmV0dXJuIChjaGFyICopIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOworKyMgZWxzZQorKyAgLyogRklYTUU6IFdoYXQgbm93PyBNaWxlcyBzdWdnZXN0cyB0aGF0IGl0IGlzIGJldHRlciB0byB1c2UgTlVMTCwKKysgICAgIGJ1dCBjdXJyZW50bHkgdGhlIHZhbHVlIGlzIHBhc3NlZCBvbiBkaXJlY3RseSB0byBmcHV0c191bmxvY2tlZCwKKysgICAgIHNvIHRoYXQgcmVxdWlyZXMgbW9yZSBjaGFuZ2VzLiAqLworKyMgaWYgX19HTlVDX18KKysjICB3YXJuaW5nIE5vIHJlYXNvbmFibGUgdmFsdWUgdG8gcmV0dXJuCisrIyBlbmRpZiAvKiBfX0dOVUNfXyAqLworKyAgcmV0dXJuICIiOworKyMgZW5kaWYKKyt9CisrCisrLyogT3V0cHV0LCBpZiBhcHByb3ByaWF0ZSwgYSB1c2FnZSBtZXNzYWdlIGZvciBTVEFURSB0byBTVFJFQU0uICBGTEFHUyBhcmUKKysgICBmcm9tIHRoZSBzZXQgQVJHUF9IRUxQXyouICAqLworK3ZvaWQKKythcmdwX3N0YXRlX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgRklMRSAqc3RyZWFtLCB1bnNpZ25lZCBmbGFncykKKyt7CisrICBpZiAoKCFzdGF0ZSB8fCAhIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VSUlMpKSAmJiBzdHJlYW0pCisrICAgIHsKKysgICAgICBpZiAoc3RhdGUgJiYgKHN0YXRlLT5mbGFncyAmIEFSR1BfTE9OR19PTkxZKSkKKysgICAgICAgZmxhZ3MgfD0gQVJHUF9IRUxQX0xPTkdfT05MWTsKKysKKysgICAgICBfaGVscCAoc3RhdGUgPyBzdGF0ZS0+cm9vdF9hcmdwIDogMCwgc3RhdGUsIHN0cmVhbSwgZmxhZ3MsCisrICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCkpOworKworKyAgICAgIGlmICghc3RhdGUgfHwgISAoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FWElUKSkKKysgICAgICAgeworKyAgICAgICAgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9FWElUX0VSUikKKysgICAgICAgICAgIGV4aXQgKGFyZ3BfZXJyX2V4aXRfc3RhdHVzKTsKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfRVhJVF9PSykKKysgICAgICAgICAgIGV4aXQgKDApOworKyAgICAgICB9CisrICB9CisrfQorKworKy8qIElmIGFwcHJvcHJpYXRlLCBwcmludCB0aGUgcHJpbnRmIHN0cmluZyBGTVQgYW5kIGZvbGxvd2luZyBhcmdzLCBwcmVjZWRlZAorKyAgIGJ5IHRoZSBwcm9ncmFtIG5hbWUgYW5kIGA6JywgdG8gc3RkZXJyLCBhbmQgZm9sbG93ZWQgYnkgYSBgVHJ5IC4uLiAtLWhlbHAnCisrICAgbWVzc2FnZSwgdGhlbiBleGl0ICgxKS4gICovCisrdm9pZAorK2FyZ3BfZXJyb3IgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgaWYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVJSUykpCisrICAgIHsKKysgICAgICBGSUxFICpzdHJlYW0gPSBzdGF0ZSA/IHN0YXRlLT5lcnJfc3RyZWFtIDogc3RkZXJyOworKworKyAgICAgIGlmIChzdHJlYW0pCisrICAgICAgIHsKKysgICAgICAgICB2YV9saXN0IGFwOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICAgICBmbG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgdmFfc3RhcnQgKGFwLCBmbXQpOworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgY2hhciAqYnVmOworKworKyAgICAgICAgIGlmIChfSU9fdmFzcHJpbnRmICgmYnVmLCBmbXQsIGFwKSA8IDApCisrICAgICAgICAgICBidWYgPSBOVUxMOworKworKyAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIiVzOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwgYnVmKTsKKysKKysgICAgICAgICBmcmVlIChidWYpOworKyNlbHNlCisrICAgICAgICAgZnB1dHNfdW5sb2NrZWQgKHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0pOworKyAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCc6Jywgc3RyZWFtKTsKKysgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIHN0cmVhbSk7CisrCisrICAgICAgICAgdmZwcmludGYgKHN0cmVhbSwgZm10LCBhcCk7CisrCisrICAgICAgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBhcmdwX3N0YXRlX2hlbHAgKHN0YXRlLCBzdHJlYW0sIEFSR1BfSEVMUF9TVERfRVJSKTsKKysKKysgICAgICAgICB2YV9lbmQgKGFwKTsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZnVubG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgICAgIH0KKysgICAgfQorK30KKysKKysvKiBTaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBnbnUgZXJyb3ItcmVwb3J0aW5nIGZ1bmN0aW9uIGVycm9yKCksIGJ1dCB3aWxsCisrICAgcmVzcGVjdCB0aGUgQVJHUF9OT19FWElUIGFuZCBBUkdQX05PX0VSUlMgZmxhZ3MgaW4gU1RBVEUsIGFuZCB3aWxsIHByaW50CisrICAgdG8gU1RBVEUtPmVycl9zdHJlYW0uICBUaGlzIGlzIHVzZWZ1bCBmb3IgYXJndW1lbnQgcGFyc2luZyBjb2RlIHRoYXQgaXMKKysgICBzaGFyZWQgYmV0d2VlbiBwcm9ncmFtIHN0YXJ0dXAgKHdoZW4gZXhpdGluZyBpcyBkZXNpcmVkKSBhbmQgcnVudGltZQorKyAgIG9wdGlvbiBwYXJzaW5nICh3aGVuIHR5cGljYWxseSBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluc3RlYWQpLiAgVGhlCisrICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIGFyZ3BfZXJyb3IgaXMgdGhhdCB0aGUgbGF0dGVyIGlzIGZvcgorKyAgICpwYXJzaW5nIGVycm9ycyosIGFuZCB0aGUgZm9ybWVyIGlzIGZvciBvdGhlciBwcm9ibGVtcyB0aGF0IG9jY3VyIGR1cmluZworKyAgIHBhcnNpbmcgYnV0IGRvbid0IHJlZmxlY3QgYSAoc3ludGFjdGljKSBwcm9ibGVtIHdpdGggdGhlIGlucHV0LiAgKi8KKyt2b2lkCisrYXJncF9mYWlsdXJlIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGludCBzdGF0dXMsIGludCBlcnJudW0sCisrICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgaWYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVJSUykpCisrICAgIHsKKysgICAgICBGSUxFICpzdHJlYW0gPSBzdGF0ZSA/IHN0YXRlLT5lcnJfc3RyZWFtIDogc3RkZXJyOworKworKyAgICAgIGlmIChzdHJlYW0pCisrICAgICAgIHsKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiJXMiLAorKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpKTsKKysjZWxzZQorKyAgICAgICAgIGZwdXRzX3VubG9ja2VkIChzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBpZiAoZm10KQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICB2YV9saXN0IGFwOworKworKyAgICAgICAgICAgICB2YV9zdGFydCAoYXAsIGZtdCk7CisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgY2hhciAqYnVmOworKworKyAgICAgICAgICAgICBpZiAoX0lPX3Zhc3ByaW50ZiAoJmJ1ZiwgZm10LCBhcCkgPCAwKQorKyAgICAgICAgICAgICAgIGJ1ZiA9IE5VTEw7CisrCisrICAgICAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIjogJXMiLCBidWYpOworKworKyAgICAgICAgICAgICBmcmVlIChidWYpOworKyNlbHNlCisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCc6Jywgc3RyZWFtKTsKKysgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBzdHJlYW0pOworKworKyAgICAgICAgICAgICB2ZnByaW50ZiAoc3RyZWFtLCBmbXQsIGFwKTsKKysjZW5kaWYKKysKKysgICAgICAgICAgICAgdmFfZW5kIChhcCk7CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgaWYgKGVycm51bSkKKysgICAgICAgICAgIHsKKysjaWYgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8pIHx8IGRlZmluZWQgSEFWRV9TVFJFUlJPUl9SCisrICAgICAgICAgICAgIGNoYXIgYnVmWzIwMF07CisrI2VuZGlmCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yX3IgKGVycm51bSwgYnVmLCBzaXplb2YgKGJ1ZikpKTsKKysjZWxzZQorKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnOicsIHN0cmVhbSk7CisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgc3RyZWFtKTsKKysjIGlmZGVmIEhBVkVfU1RSRVJST1JfUgorKyAgICAgICAgICAgICBmcHV0cyAoc3RyZXJyb3JfciAoZXJybnVtLCBidWYsIHNpemVvZiAoYnVmKSksIHN0cmVhbSk7CisrIyBlbHNlCisrICAgICAgICAgICAgIGZwdXRzIChzdHJlcnJvciAoZXJybnVtKSwgc3RyZWFtKTsKKysjIGVuZGlmCisrI2VuZGlmCisrICAgICAgICAgICB9CisrCisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgIGlmIChfSU9fZndpZGUgKHN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdHJlYW0pOworKyAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIHN0cmVhbSk7CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgIGlmIChzdGF0dXMgJiYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpKQorKyAgICAgICAgICAgZXhpdCAoc3RhdHVzKTsKKysgICAgICAgfQorKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYyBiL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg2YjJiMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYworQEAgLTAsMCArMSw5NDkgQEAKKysvKiBIaWVyYXJjaGlhbCBhcmd1bWVudCBwYXJzaW5nLCBsYXllcmVkIG92ZXIgZ2V0b3B0CisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogQUlYIHJlcXVpcmVzIHRoaXMgdG8gYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBmaWxlLiAgKi8KKysjaWZuZGVmIF9fR05VQ19fCisrIyBpZiBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGVsc2UKKysjICBpZmRlZiBfQUlYCisrI3ByYWdtYSBhbGxvY2EKKysjICBlbHNlCisrIyAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCisrY2hhciAqYWxsb2NhICgpOworKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGJpdHMvZ2V0b3B0X2ludC5oPgorKworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZm5kZWYgXworKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuCisrICAgV2hlbiBjb21waWxpbmcgbGliYywgdGhlIF8gbWFjcm8gaXMgcHJlZGVmaW5lZC4gICovCisrIyBpZiAoZGVmaW5lZCBIQVZFX0xJQklOVExfSCB8fCBkZWZpbmVkIF9MSUJDKSAmJiBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGRnZXR0ZXh0CisrIyAgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSBcCisrICBJTlRVU0UoX19kY2dldHRleHQpIChkb21haW4sIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSAobXNnaWQpCisrIyAgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmbmRlZiBOXworKyMgZGVmaW5lIE5fKG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysvKiBHZXRvcHQgcmV0dXJuIHZhbHVlcy4gICovCisrI2RlZmluZSBLRVlfRU5EICgtMSkgICAgICAgICAgIC8qIFRoZSBlbmQgb2YgdGhlIG9wdGlvbnMuICAqLworKyNkZWZpbmUgS0VZX0FSRyAxICAgICAgICAgICAgICAvKiBBIG5vbi1vcHRpb24gYXJndW1lbnQuICAqLworKyNkZWZpbmUgS0VZX0VSUiAnPycgICAgICAgICAgICAvKiBBbiBlcnJvciBwYXJzaW5nIHRoZSBvcHRpb25zLiAgKi8KKysKKysvKiBUaGUgbWV0YS1hcmd1bWVudCB1c2VkIHRvIHByZXZlbnQgYW55IGZ1cnRoZXIgYXJndW1lbnRzIGJlaW5nIGludGVycHJldGVkCisrICAgYXMgb3B0aW9ucy4gICovCisrI2RlZmluZSBRVU9URSAiLS0iCisrCisrLyogVGhlIG51bWJlciBvZiBiaXRzIHdlIHN0ZWFsIGluIGEgbG9uZy1vcHRpb24gdmFsdWUgZm9yIG91ciBvd24gdXNlLiAgKi8KKysjZGVmaW5lIEdST1VQX0JJVFMgQ0hBUl9CSVQKKysKKysvKiBUaGUgbnVtYmVyIG9mIGJpdHMgYXZhaWxhYmxlIGZvciB0aGUgdXNlciB2YWx1ZS4gICovCisrI2RlZmluZSBVU0VSX0JJVFMgKChzaXplb2YgKChzdHJ1Y3Qgb3B0aW9uICopMCktPnZhbCAqIENIQVJfQklUKSAtIEdST1VQX0JJVFMpCisrI2RlZmluZSBVU0VSX01BU0sgKCgxIDw8IFVTRVJfQklUUykgLSAxKQorKworKy8qIEVaIGFsaWFzIGZvciBBUkdQX0VSUl9VTktOT1dOLiAgKi8KKysjZGVmaW5lIEVCQURLRVkgQVJHUF9FUlJfVU5LTk9XTgorKworKy8qIERlZmF1bHQgb3B0aW9ucy4gICovCisrCisrLyogV2hlbiBhcmdwIGlzIGdpdmVuIHRoZSAtLUhBTkcgc3dpdGNoLCBfQVJHUF9IQU5HIGlzIHNldCBhbmQgYXJncCB3aWxsIHNsZWVwCisrICAgZm9yIG9uZSBzZWNvbmQgaW50ZXJ2YWxzLCBkZWNyZW1lbnRpbmcgX0FSR1BfSEFORyB1bnRpbCBpdCdzIHplcm8uICBUaHVzCisrICAgeW91IGNhbiBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjb250aW51ZSBieSBhdHRhY2hpbmcgYSBkZWJ1Z2dlciBhbmQgc2V0dGluZworKyAgIGl0IHRvIDAgeW91cnNlbGYuICAqLworK3N0YXRpYyB2b2xhdGlsZSBpbnQgX2FyZ3BfaGFuZzsKKysKKysjZGVmaW5lIE9QVF9QUk9HTkFNRSAgIC0yCisrI2RlZmluZSBPUFRfVVNBR0UgICAgICAtMworKyNkZWZpbmUgT1BUX0hBTkcgICAgICAgLTQKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIGFyZ3BfZGVmYXVsdF9vcHRpb25zW10gPQorK3sKKysgIHsiaGVscCIsICAgICAgICc/JywgICAgICAgICAgMCwgMCwgIE5fKCJHaXZlIHRoaXMgaGVscCBsaXN0IiksIC0xfSwKKysgIHsidXNhZ2UiLCAgICAgIE9QVF9VU0FHRSwgICAgMCwgMCwgIE5fKCJHaXZlIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSIpfSwKKysgIHsicHJvZ3JhbS1uYW1lIixPUFRfUFJPR05BTUUsIk5BTUUiLCBPUFRJT05fSElEREVOLCBOXygiU2V0IHRoZSBwcm9ncmFtIG5hbWUiKX0sCisrICB7IkhBTkciLCAgICAgICBPUFRfSEFORywgICAgIlNFQ1MiLCBPUFRJT05fQVJHX09QVElPTkFMIHwgT1BUSU9OX0hJRERFTiwKKysgICAgIE5fKCJIYW5nIGZvciBTRUNTIHNlY29uZHMgKGRlZmF1bHQgMzYwMCkiKX0sCisrICB7MCwgMH0KKyt9OworKworK3N0YXRpYyBlcnJvcl90CisrYXJncF9kZWZhdWx0X3BhcnNlciAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAnPyc6CisrICAgICAgYXJncF9zdGF0ZV9oZWxwIChzdGF0ZSwgc3RhdGUtPm91dF9zdHJlYW0sIEFSR1BfSEVMUF9TVERfSEVMUCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX1VTQUdFOgorKyAgICAgIGFyZ3Bfc3RhdGVfaGVscCAoc3RhdGUsIHN0YXRlLT5vdXRfc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICBBUkdQX0hFTFBfVVNBR0UgfCBBUkdQX0hFTFBfRVhJVF9PSyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgT1BUX1BST0dOQU1FOiAgICAgICAgIC8qIFNldCB0aGUgcHJvZ3JhbSBuYW1lLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUKKysgICAgICBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSA9IGFyZzsKKysjZW5kaWYKKysgICAgICAvKiBbTm90ZSB0aGF0IHNvbWUgc3lzdGVtcyBvbmx5IGhhdmUgUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUgKGFrYQorKyAgICAgICAgX19QUk9HTkFNRSksIGluIHdoaWNoIGNhc2UsIFBST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlzIGp1c3QgZGVmaW5lZAorKyAgICAgICAgdG8gYmUgdGhhdCwgc28gd2UgaGF2ZSB0byBiZSBhIGJpdCBjYXJlZnVsIGhlcmUuXSAgKi8KKysKKysgICAgICAvKiBVcGRhdGUgd2hhdCB3ZSB1c2UgZm9yIG1lc3NhZ2VzLiAgKi8KKysgICAgICBzdGF0ZS0+bmFtZSA9IHN0cnJjaHIgKGFyZywgJy8nKTsKKysgICAgICBpZiAoc3RhdGUtPm5hbWUpCisrICAgICAgIHN0YXRlLT5uYW1lKys7CisrICAgICAgZWxzZQorKyAgICAgICBzdGF0ZS0+bmFtZSA9IGFyZzsKKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUKKysgICAgICBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSA9IHN0YXRlLT5uYW1lOworKyNlbmRpZgorKworKyAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgKEFSR1BfUEFSU0VfQVJHVjAgfCBBUkdQX05PX0VSUlMpKQorKyAgICAgICAgID09IEFSR1BfUEFSU0VfQVJHVjApCisrICAgICAgIC8qIFVwZGF0ZSB3aGF0IGdldG9wdCB1c2VzIHRvby4gICovCisrICAgICAgIHN0YXRlLT5hcmd2WzBdID0gYXJnOworKworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIE9QVF9IQU5HOgorKyAgICAgIF9hcmdwX2hhbmcgPSBhdG9pIChhcmcgPyBhcmcgOiAiMzYwMCIpOworKyAgICAgIHdoaWxlIChfYXJncF9oYW5nLS0gPiAwKQorKyAgICAgICBzbGVlcCAoMSk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYXJncF9kZWZhdWx0X2FyZ3AgPQorKyAge2FyZ3BfZGVmYXVsdF9vcHRpb25zLCAmYXJncF9kZWZhdWx0X3BhcnNlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgImxpYmMifTsKKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIGFyZ3BfdmVyc2lvbl9vcHRpb25zW10gPQorK3sKKysgIHsidmVyc2lvbiIsICAgICdWJywgICAgICAgICAgMCwgMCwgIE5fKCJQcmludCBwcm9ncmFtIHZlcnNpb24iKSwgLTF9LAorKyAgezAsIDB9CisrfTsKKysKKytzdGF0aWMgZXJyb3JfdAorK2FyZ3BfdmVyc2lvbl9wYXJzZXIgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgJ1YnOgorKyAgICAgIGlmIChhcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKQorKyAgICAgICAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChzdGF0ZS0+b3V0X3N0cmVhbSwgc3RhdGUpOworKyAgICAgIGVsc2UgaWYgKGFyZ3BfcHJvZ3JhbV92ZXJzaW9uKQorKyAgICAgICBmcHJpbnRmIChzdGF0ZS0+b3V0X3N0cmVhbSwgIiVzXG4iLCBhcmdwX3Byb2dyYW1fdmVyc2lvbik7CisrICAgICAgZWxzZQorKyAgICAgICBhcmdwX2Vycm9yIChzdGF0ZSwgZGdldHRleHQgKHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQUk9HUkFNIEVSUk9SKSBObyB2ZXJzaW9uIGtub3duIT8iKSk7CisrICAgICAgaWYgKCEgKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpCisrICAgICAgIGV4aXQgKDApOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFQkFES0VZOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwIGFyZ3BfdmVyc2lvbl9hcmdwID0KKysgIHthcmdwX3ZlcnNpb25fb3B0aW9ucywgJmFyZ3BfdmVyc2lvbl9wYXJzZXIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJsaWJjIn07CisrCisrLyogUmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIGdldG9wdCBsb25nIG9wdGlvbnMgYXJyYXkgTE9OR19PUFRJT05TIG9mIGEKKysgICBsb25nIG9wdGlvbiB3aXRoIGNhbGxlZCBOQU1FLCBvciAtMSBpZiBub25lIGlzIGZvdW5kLiAgUGFzc2luZyBOVUxMIGFzCisrICAgTkFNRSB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIG9wdGlvbnMuICAqLworK3N0YXRpYyBpbnQKKytmaW5kX2xvbmdfb3B0aW9uIChzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgc3RydWN0IG9wdGlvbiAqbCA9IGxvbmdfb3B0aW9uczsKKysgIHdoaWxlIChsLT5uYW1lICE9IE5VTEwpCisrICAgIGlmIChuYW1lICE9IE5VTEwgJiYgc3RyY21wIChsLT5uYW1lLCBuYW1lKSA9PSAwKQorKyAgICAgIHJldHVybiBsIC0gbG9uZ19vcHRpb25zOworKyAgICBlbHNlCisrICAgICAgbCsrOworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIGwgLSBsb25nX29wdGlvbnM7CisrICBlbHNlCisrICAgIHJldHVybiAtMTsKKyt9CisrCisrCisrLyogVGhlIHN0YXRlIG9mIGEgYGdyb3VwJyBkdXJpbmcgcGFyc2luZy4gIEVhY2ggZ3JvdXAgY29ycmVzcG9uZHMgdG8gYQorKyAgIHBhcnRpY3VsYXIgYXJncCBzdHJ1Y3R1cmUgZnJvbSB0aGUgdHJlZSBvZiBzdWNoIGRlc2NlbmRpbmcgZnJvbSB0aGUgdG9wCisrICAgbGV2ZWwgYXJncCBwYXNzZWQgdG8gYXJncF9wYXJzZS4gICovCisrc3RydWN0IGdyb3VwCisreworKyAgLyogVGhpcyBncm91cCdzIHBhcnNpbmcgZnVuY3Rpb24uICAqLworKyAgYXJncF9wYXJzZXJfdCBwYXJzZXI7CisrCisrICAvKiBXaGljaCBhcmdwIHRoaXMgZ3JvdXAgaXMgZnJvbS4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFBvaW50cyB0byB0aGUgcG9pbnQgaW4gU0hPUlRfT1BUUyBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIHNob3J0CisrICAgICBvcHRpb25zIGZvciB0aGlzIGdyb3VwLiAgV2UgdXNlIGl0IHRvIGRldGVybWluZSBmcm9tIHdoaWNoIGdyb3VwIGEKKysgICAgIHBhcnRpY3VsYXIgc2hvcnQgb3B0aW9ucyBpcyBmcm9tLiAgKi8KKysgIGNoYXIgKnNob3J0X2VuZDsKKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygbm9uLW9wdGlvbiBhcmdzIHN1Y2Vzc2Z1bGx5IGhhbmRsZWQgYnkgdGhpcyBwYXJzZXIuICAqLworKyAgdW5zaWduZWQgYXJnc19wcm9jZXNzZWQ7CisrCisrICAvKiBUaGlzIGdyb3VwJ3MgcGFyc2VyJ3MgcGFyZW50J3MgZ3JvdXAuICAqLworKyAgc3RydWN0IGdyb3VwICpwYXJlbnQ7CisrICB1bnNpZ25lZCBwYXJlbnRfaW5kZXg7ICAgICAgIC8qIEFuZCB0aGUgb3VyIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQuICAgKi8KKysKKysgIC8qIFRoZXNlIGZpZWxkcyBhcmUgc3dhcHBlZCBpbnRvIGFuZCBvdXQgb2YgdGhlIHN0YXRlIHN0cnVjdHVyZSB3aGVuCisrICAgICBjYWxsaW5nIHRoaXMgZ3JvdXAncyBwYXJzZXIuICAqLworKyAgdm9pZCAqaW5wdXQsICoqY2hpbGRfaW5wdXRzOworKyAgdm9pZCAqaG9vazsKKyt9OworKworKy8qIENhbGwgR1JPVVAncyBwYXJzZXIgd2l0aCBLRVkgYW5kIEFSRywgc3dhcHBpbmcgYW55IGdyb3VwLXNwZWNpZmljIGluZm8KKysgICBmcm9tIFNUQVRFIGJlZm9yZSBjYWxsaW5nLCBhbmQgYmFjayBpbnRvIHN0YXRlIGFmdGVyd2FyZHMuICBJZiBHUk9VUCBoYXMKKysgICBubyBwYXJzZXIsIEVCQURLRVkgaXMgcmV0dXJuZWQuICAqLworK3N0YXRpYyBlcnJvcl90CisrZ3JvdXBfcGFyc2UgKHN0cnVjdCBncm91cCAqZ3JvdXAsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgaW50IGtleSwgY2hhciAqYXJnKQorK3sKKysgIGlmIChncm91cC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgZXJyb3JfdCBlcnI7CisrICAgICAgc3RhdGUtPmhvb2sgPSBncm91cC0+aG9vazsKKysgICAgICBzdGF0ZS0+aW5wdXQgPSBncm91cC0+aW5wdXQ7CisrICAgICAgc3RhdGUtPmNoaWxkX2lucHV0cyA9IGdyb3VwLT5jaGlsZF9pbnB1dHM7CisrICAgICAgc3RhdGUtPmFyZ19udW0gPSBncm91cC0+YXJnc19wcm9jZXNzZWQ7CisrICAgICAgZXJyID0gKCpncm91cC0+cGFyc2VyKShrZXksIGFyZywgc3RhdGUpOworKyAgICAgIGdyb3VwLT5ob29rID0gc3RhdGUtPmhvb2s7CisrICAgICAgcmV0dXJuIGVycjsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gRUJBREtFWTsKKyt9CisrCisrc3RydWN0IHBhcnNlcgorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworKworKyAgLyogU0hPUlRfT1BUUyBpcyB0aGUgZ2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nIGZvciB0aGUgdW5pb24gb2YgYWxsIHRoZQorKyAgICAgZ3JvdXBzIG9mIG9wdGlvbnMuICAqLworKyAgY2hhciAqc2hvcnRfb3B0czsKKysgIC8qIExPTkdfT1BUUyBpcyB0aGUgYXJyYXkgb2YgZ2V0b3AgbG9uZyBvcHRpb24gc3RydWN0dXJlcyBmb3IgdGhlIHVuaW9uIG9mCisrICAgICBhbGwgdGhlIGdyb3VwcyBvZiBvcHRpb25zLiAgKi8KKysgIHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0czsKKysgIC8qIE9QVF9EQVRBIGlzIHRoZSBnZXRvcHQgZGF0YSB1c2VkIGZvciB0aGUgcmUtZW50cmFudCBnZXRvcHQuICAqLworKyAgc3RydWN0IF9nZXRvcHRfZGF0YSBvcHRfZGF0YTsKKysKKysgIC8qIFN0YXRlcyBvZiB0aGUgdmFyaW91cyBwYXJzaW5nIGdyb3Vwcy4gICovCisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwczsKKysgIC8qIFRoZSBlbmQgb2YgdGhlIEdST1VQUyBhcnJheS4gICovCisrICBzdHJ1Y3QgZ3JvdXAgKmVncm91cDsKKysgIC8qIEFuIHZlY3RvciBjb250YWluaW5nIHN0b3JhZ2UgZm9yIHRoZSBDSElMRF9JTlBVVFMgZmllbGQgaW4gYWxsIGdyb3Vwcy4gICovCisrICB2b2lkICoqY2hpbGRfaW5wdXRzOworKworKyAgLyogVHJ1ZSBpZiB3ZSB0aGluayB1c2luZyBnZXRvcHQgaXMgc3RpbGwgdXNlZnVsOyBpZiBmYWxzZSwgdGhlbgorKyAgICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUganVzdCBwYXNzZWQgdmVyYmF0aW0gd2l0aCBBUkdQX0tFWV9BUkcuICBUaGlzIGlzCisrICAgICBjbGVhcmVkIHdoZW5ldmVyIGdldG9wdCByZXR1cm5zIEtFWV9FTkQsIGJ1dCBtYXkgYmUgc2V0IGFnYWluIGlmIHRoZSB1c2VyCisrICAgICBtb3ZlcyB0aGUgbmV4dCBhcmd1bWVudCBwb2ludGVyIGJhY2t3YXJkcy4gICovCisrICBpbnQgdHJ5X2dldG9wdDsKKysKKysgIC8qIFN0YXRlIGJsb2NrIHN1cHBsaWVkIHRvIHBhcnNpbmcgcm91dGluZXMuICAqLworKyAgc3RydWN0IGFyZ3Bfc3RhdGUgc3RhdGU7CisrCisrICAvKiBNZW1vcnkgdXNlZCBieSB0aGlzIHBhcnNlci4gICovCisrICB2b2lkICpzdG9yYWdlOworK307CisrCisrLyogVGhlIG5leHQgdXNhYmxlIGVudHJpZXMgaW4gdGhlIHZhcmlvdXMgcGFyc2VyIHRhYmxlcyBiZWluZyBmaWxsZWQgaW4gYnkKKysgICBjb252ZXJ0X29wdGlvbnMuICAqLworK3N0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZQorK3sKKysgIHN0cnVjdCBwYXJzZXIgKnBhcnNlcjsKKysgIGNoYXIgKnNob3J0X2VuZDsKKysgIHN0cnVjdCBvcHRpb24gKmxvbmdfZW5kOworKyAgdm9pZCAqKmNoaWxkX2lucHV0c19lbmQ7CisrfTsKKysKKysvKiBDb252ZXJ0cyBhbGwgb3B0aW9ucyBpbiBBUkdQICh3aGljaCBpcyBwdXQgaW4gR1JPVVApIGFuZCBhbmNlc3RvcnMKKysgICBpbnRvIGdldG9wdCBvcHRpb25zIHN0b3JlZCBpbiBTSE9SVF9PUFRTIGFuZCBMT05HX09QVFM7IFNIT1JUX0VORCBhbmQKKysgICBDVlQtPkxPTkdfRU5EIGFyZSB0aGUgcG9pbnRzIGF0IHdoaWNoIG5ldyBvcHRpb25zIGFyZSBhZGRlZC4gIFJldHVybnMgdGhlCisrICAgbmV4dCB1bnVzZWQgZ3JvdXAgZW50cnkuICBDVlQgaG9sZHMgc3RhdGUgdXNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24uICAqLworK3N0YXRpYyBzdHJ1Y3QgZ3JvdXAgKgorK2NvbnZlcnRfb3B0aW9ucyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsCisrICAgICAgICAgICAgICAgIHN0cnVjdCBncm91cCAqcGFyZW50LCB1bnNpZ25lZCBwYXJlbnRfaW5kZXgsCisrICAgICAgICAgICAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXAsIHN0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZSAqY3Z0KQorK3sKKysgIC8qIFJFQUwgaXMgdGhlIG1vc3QgcmVjZW50IG5vbi1hbGlhcyB2YWx1ZSBvZiBPUFQuICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsID0gYXJncC0+b3B0aW9uczsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZHJlbiA9IGFyZ3AtPmNoaWxkcmVuOworKworKyAgaWYgKHJlYWwgfHwgYXJncC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrCisrICAgICAgaWYgKHJlYWwpCisrICAgICAgIGZvciAob3B0ID0gcmVhbDsgIV9fb3B0aW9uX2lzX2VuZCAob3B0KTsgb3B0KyspCisrICAgICAgICAgeworKyAgICAgICAgICAgaWYgKCEgKG9wdC0+ZmxhZ3MgJiBPUFRJT05fQUxJQVMpKQorKyAgICAgICAgICAgICAvKiBPUFQgaXNuJ3QgYW4gYWxpYXMsIHNvIHdlIGNhbiB1c2UgdmFsdWVzIGZyb20gaXQuICAqLworKyAgICAgICAgICAgICByZWFsID0gb3B0OworKworKyAgICAgICAgICAgaWYgKCEgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0RPQykpCisrICAgICAgICAgICAgIC8qIEEgcmVhbCBvcHRpb24gKG5vdCBqdXN0IGRvY3VtZW50YXRpb24pLiAgKi8KKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIGlmIChfX29wdGlvbl9pc19zaG9ydCAob3B0KSkKKysgICAgICAgICAgICAgICAgIC8qIE9QVCBjYW4gYmUgdXNlZCBhcyBhIHNob3J0IG9wdGlvbi4gICovCisrICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCsrID0gb3B0LT5rZXk7CisrICAgICAgICAgICAgICAgICAgIGlmIChyZWFsLT5hcmcpCisrICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgKmN2dC0+c2hvcnRfZW5kKysgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhbC0+ZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQrKyA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCA9ICdcMCc7IC8qIGtlZXAgMCB0ZXJtaW5hdGVkICovCisrICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgaWYgKG9wdC0+bmFtZQorKyAgICAgICAgICAgICAgICAgICAmJiBmaW5kX2xvbmdfb3B0aW9uIChjdnQtPnBhcnNlci0+bG9uZ19vcHRzLCBvcHQtPm5hbWUpIDwgMCkKKysgICAgICAgICAgICAgICAgIC8qIE9QVCBjYW4gYmUgdXNlZCBhcyBhIGxvbmcgb3B0aW9uLiAgKi8KKysgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+bmFtZSA9IG9wdC0+bmFtZTsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+aGFzX2FyZyA9CisrICAgICAgICAgICAgICAgICAgICAgKHJlYWwtPmFyZworKyAgICAgICAgICAgICAgICAgICAgICA/IChyZWFsLT5mbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwKKysgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25hbF9hcmd1bWVudAorKyAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlcXVpcmVkX2FyZ3VtZW50KQorKyAgICAgICAgICAgICAgICAgICAgICA6IG5vX2FyZ3VtZW50KTsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+ZmxhZyA9IDA7CisrICAgICAgICAgICAgICAgICAgIC8qIHdlIGFkZCBhIGRpc2FtYmlndWF0aW5nIGNvZGUgdG8gYWxsIHRoZSB1c2VyJ3MKKysgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzICh3aGljaCBpcyByZW1vdmVkIGJlZm9yZSB3ZSBhY3R1YWxseSBjYWxsCisrICAgICAgICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiB0byBwYXJzZSB0aGUgdmFsdWUpOyB0aGlzIG1lYW5zIHRoYXQKKysgICAgICAgICAgICAgICAgICAgICAgdGhlIHVzZXIgbG9zZXMgdXNlIG9mIHRoZSBoaWdoIDggYml0cyBpbiBhbGwgaGlzCisrICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAodGhlIHNpZ24gb2YgdGhlIGxvd2VyIGJpdHMgaXMgcHJlc2VydmVkCisrICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIpLi4uICAqLworKyAgICAgICAgICAgICAgICAgICBjdnQtPmxvbmdfZW5kLT52YWwgPQorKyAgICAgICAgICAgICAgICAgICAgICgob3B0LT5rZXkgfCByZWFsLT5rZXkpICYgVVNFUl9NQVNLKQorKyAgICAgICAgICAgICAgICAgICAgICsgKCgoZ3JvdXAgLSBjdnQtPnBhcnNlci0+Z3JvdXBzKSArIDEpIDw8IFVTRVJfQklUUyk7CisrCisrICAgICAgICAgICAgICAgICAgIC8qIEtlZXAgdGhlIExPTkdfT1BUUyBsaXN0IHRlcm1pbmF0ZWQuICAqLworKyAgICAgICAgICAgICAgICAgICAoKytjdnQtPmxvbmdfZW5kKS0+bmFtZSA9IE5VTEw7CisrICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysKKysgICAgICBncm91cC0+cGFyc2VyID0gYXJncC0+cGFyc2VyOworKyAgICAgIGdyb3VwLT5hcmdwID0gYXJncDsKKysgICAgICBncm91cC0+c2hvcnRfZW5kID0gY3Z0LT5zaG9ydF9lbmQ7CisrICAgICAgZ3JvdXAtPmFyZ3NfcHJvY2Vzc2VkID0gMDsKKysgICAgICBncm91cC0+cGFyZW50ID0gcGFyZW50OworKyAgICAgIGdyb3VwLT5wYXJlbnRfaW5kZXggPSBwYXJlbnRfaW5kZXg7CisrICAgICAgZ3JvdXAtPmlucHV0ID0gMDsKKysgICAgICBncm91cC0+aG9vayA9IDA7CisrICAgICAgZ3JvdXAtPmNoaWxkX2lucHV0cyA9IDA7CisrCisrICAgICAgaWYgKGNoaWxkcmVuKQorKyAgICAgICAvKiBBc3NpZ24gR1JPVVAncyBDSElMRF9JTlBVVFMgZmllbGQgc29tZSBzcGFjZSBmcm9tCisrICAgICAgICAgICBDVlQtPmNoaWxkX2lucHV0c19lbmQuKi8KKysgICAgICAgeworKyAgICAgICAgIHVuc2lnbmVkIG51bV9jaGlsZHJlbiA9IDA7CisrICAgICAgICAgd2hpbGUgKGNoaWxkcmVuW251bV9jaGlsZHJlbl0uYXJncCkKKysgICAgICAgICAgIG51bV9jaGlsZHJlbisrOworKyAgICAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHMgPSBjdnQtPmNoaWxkX2lucHV0c19lbmQ7CisrICAgICAgICAgY3Z0LT5jaGlsZF9pbnB1dHNfZW5kICs9IG51bV9jaGlsZHJlbjsKKysgICAgICAgfQorKworKyAgICAgIHBhcmVudCA9IGdyb3VwKys7CisrICAgIH0KKysgIGVsc2UKKysgICAgcGFyZW50ID0gMDsKKysKKysgIGlmIChjaGlsZHJlbikKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKysgICAgICB3aGlsZSAoY2hpbGRyZW4tPmFyZ3ApCisrICAgICAgIGdyb3VwID0KKysgICAgICAgICBjb252ZXJ0X29wdGlvbnMgKGNoaWxkcmVuKystPmFyZ3AsIHBhcmVudCwgaW5kZXgrKywgZ3JvdXAsIGN2dCk7CisrICAgIH0KKysKKysgIHJldHVybiBncm91cDsKKyt9CisrCisrLyogRmluZCB0aGUgbWVyZ2VkIHNldCBvZiBnZXRvcHQgb3B0aW9ucywgd2l0aCBrZXlzIGFwcHJvcGlhdGVseSBwcmVmaXhlZC4gKi8KKytzdGF0aWMgdm9pZAorK3BhcnNlcl9jb252ZXJ0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBpbnQgZmxhZ3MpCisreworKyAgc3RydWN0IHBhcnNlcl9jb252ZXJ0X3N0YXRlIGN2dDsKKysKKysgIGN2dC5wYXJzZXIgPSBwYXJzZXI7CisrICBjdnQuc2hvcnRfZW5kID0gcGFyc2VyLT5zaG9ydF9vcHRzOworKyAgY3Z0LmxvbmdfZW5kID0gcGFyc2VyLT5sb25nX29wdHM7CisrICBjdnQuY2hpbGRfaW5wdXRzX2VuZCA9IHBhcnNlci0+Y2hpbGRfaW5wdXRzOworKworKyAgaWYgKGZsYWdzICYgQVJHUF9JTl9PUkRFUikKKysgICAgKmN2dC5zaG9ydF9lbmQrKyA9ICctJzsKKysgIGVsc2UgaWYgKGZsYWdzICYgQVJHUF9OT19BUkdTKQorKyAgICAqY3Z0LnNob3J0X2VuZCsrID0gJysnOworKyAgKmN2dC5zaG9ydF9lbmQgPSAnXDAnOworKworKyAgY3Z0LmxvbmdfZW5kLT5uYW1lID0gTlVMTDsKKysKKysgIHBhcnNlci0+YXJncCA9IGFyZ3A7CisrCisrICBpZiAoYXJncCkKKysgICAgcGFyc2VyLT5lZ3JvdXAgPSBjb252ZXJ0X29wdGlvbnMgKGFyZ3AsIDAsIDAsIHBhcnNlci0+Z3JvdXBzLCAmY3Z0KTsKKysgIGVsc2UKKysgICAgcGFyc2VyLT5lZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgLyogTm8gcGFyc2VycyBhdCBhbGwhICovCisrfQorKworKy8qIExlbmd0aHMgb2YgdmFyaW91cyBwYXJzZXIgZmllbGRzIHdoaWNoIHdlIHdpbGwgYWxsb2NhdGVkLiAgKi8KKytzdHJ1Y3QgcGFyc2VyX3NpemVzCisreworKyAgc2l6ZV90IHNob3J0X2xlbjsgICAgICAgICAgICAvKiBHZXRvcHQgc2hvcnQgb3B0aW9ucyBzdHJpbmcuICAqLworKyAgc2l6ZV90IGxvbmdfbGVuOyAgICAgICAgICAgICAvKiBHZXRvcHQgbG9uZyBvcHRpb25zIHZlY3Rvci4gICovCisrICBzaXplX3QgbnVtX2dyb3VwczsgICAgICAgICAgIC8qIEdyb3VwIHN0cnVjdHVyZXMgd2UgYWxsb2NhdGUuICAqLworKyAgc2l6ZV90IG51bV9jaGlsZF9pbnB1dHM7ICAgICAvKiBDaGlsZCBpbnB1dCBzbG90cy4gICovCisrfTsKKysKKysvKiBGb3IgQVJHUCwgaW5jcmVtZW50cyB0aGUgTlVNX0dST1VQUyBmaWVsZCBpbiBTWlMgYnkgdGhlIHRvdGFsIG51bWJlciBvZgorKyBhcmdwIHN0cnVjdHVyZXMgZGVzY2VuZGVkIGZyb20gaXQsIGFuZCB0aGUgU0hPUlRfTEVOICYgTE9OR19MRU4gZmllbGRzIGJ5CisrIHRoZSBtYXhpbXVtIGxlbmd0aHMgb2YgdGhlIHJlc3VsdGluZyBtZXJnZWQgZ2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nIGFuZAorKyBsb25nLW9wdGlvbnMgYXJyYXksIHJlc3BlY3RpdmVseS4gICovCisrc3RhdGljIHZvaWQKKytjYWxjX3NpemVzIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgIHN0cnVjdCBwYXJzZXJfc2l6ZXMgKnN6cykKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0ID0gYXJncC0+b3B0aW9uczsKKysKKysgIGlmIChvcHQgfHwgYXJncC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgc3pzLT5udW1fZ3JvdXBzKys7CisrICAgICAgaWYgKG9wdCkKKysgICAgICAgeworKyAgICAgICAgIGludCBudW1fb3B0cyA9IDA7CisrICAgICAgICAgd2hpbGUgKCFfX29wdGlvbl9pc19lbmQgKG9wdCsrKSkKKysgICAgICAgICAgIG51bV9vcHRzKys7CisrICAgICAgICAgc3pzLT5zaG9ydF9sZW4gKz0gbnVtX29wdHMgKiAzOyAvKiBvcHQgKyB1cCB0byAyIGA6J3MgKi8KKysgICAgICAgICBzenMtPmxvbmdfbGVuICs9IG51bV9vcHRzOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwKQorKyAgICAgIHsKKysgICAgICAgY2FsY19zaXplcyAoKGNoaWxkKyspLT5hcmdwLCBzenMpOworKyAgICAgICBzenMtPm51bV9jaGlsZF9pbnB1dHMrKzsKKysgICAgICB9CisrfQorKworKworK2V4dGVybiBjaGFyICogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCk7CisrLyogSW5pdGlhbGl6ZXMgUEFSU0VSIHRvIHBhcnNlIEFSR1AgaW4gYSBtYW5uZXIgZGVzY3JpYmVkIGJ5IEZMQUdTLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9pbml0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgIGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50IGZsYWdzLCB2b2lkICppbnB1dCkKKyt7CisrICBlcnJvcl90IGVyciA9IDA7CisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKyAgc3RydWN0IHBhcnNlcl9zaXplcyBzenM7CisrICBzdHJ1Y3QgX2dldG9wdF9kYXRhIG9wdF9kYXRhID0gX0dFVE9QVF9EQVRBX0lOSVRJQUxJWkVSOworKworKyAgc3pzLnNob3J0X2xlbiA9IChmbGFncyAmIEFSR1BfTk9fQVJHUykgPyAwIDogMTsKKysgIHN6cy5sb25nX2xlbiA9IDA7CisrICBzenMubnVtX2dyb3VwcyA9IDA7CisrICBzenMubnVtX2NoaWxkX2lucHV0cyA9IDA7CisrCisrICBpZiAoYXJncCkKKysgICAgY2FsY19zaXplcyAoYXJncCwgJnN6cyk7CisrCisrICAvKiBMZW5ndGhzIG9mIHRoZSB2YXJpb3VzIGJpdHMgb2Ygc3RvcmFnZSB1c2VkIGJ5IFBBUlNFUi4gICovCisrI2RlZmluZSBHTEVOIChzenMubnVtX2dyb3VwcyArIDEpICogc2l6ZW9mIChzdHJ1Y3QgZ3JvdXApCisrI2RlZmluZSBDTEVOIChzenMubnVtX2NoaWxkX2lucHV0cyAqIHNpemVvZiAodm9pZCAqKSkKKysjZGVmaW5lIExMRU4gKChzenMubG9uZ19sZW4gKyAxKSAqIHNpemVvZiAoc3RydWN0IG9wdGlvbikpCisrI2RlZmluZSBTTEVOIChzenMuc2hvcnRfbGVuICsgMSkKKysKKysgIHBhcnNlci0+c3RvcmFnZSA9IG1hbGxvYyAoR0xFTiArIENMRU4gKyBMTEVOICsgU0xFTik7CisrICBpZiAoISBwYXJzZXItPnN0b3JhZ2UpCisrICAgIHJldHVybiBFTk9NRU07CisrCisrICBwYXJzZXItPmdyb3VwcyA9IHBhcnNlci0+c3RvcmFnZTsKKysgIHBhcnNlci0+Y2hpbGRfaW5wdXRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTjsKKysgIHBhcnNlci0+bG9uZ19vcHRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTiArIENMRU47CisrICBwYXJzZXItPnNob3J0X29wdHMgPSBwYXJzZXItPnN0b3JhZ2UgKyBHTEVOICsgQ0xFTiArIExMRU47CisrICBwYXJzZXItPm9wdF9kYXRhID0gb3B0X2RhdGE7CisrCisrICBtZW1zZXQgKHBhcnNlci0+Y2hpbGRfaW5wdXRzLCAwLCBzenMubnVtX2NoaWxkX2lucHV0cyAqIHNpemVvZiAodm9pZCAqKSk7CisrICBwYXJzZXJfY29udmVydCAocGFyc2VyLCBhcmdwLCBmbGFncyk7CisrCisrICBtZW1zZXQgKCZwYXJzZXItPnN0YXRlLCAwLCBzaXplb2YgKHN0cnVjdCBhcmdwX3N0YXRlKSk7CisrICBwYXJzZXItPnN0YXRlLnJvb3RfYXJncCA9IHBhcnNlci0+YXJncDsKKysgIHBhcnNlci0+c3RhdGUuYXJnYyA9IGFyZ2M7CisrICBwYXJzZXItPnN0YXRlLmFyZ3YgPSBhcmd2OworKyAgcGFyc2VyLT5zdGF0ZS5mbGFncyA9IGZsYWdzOworKyAgcGFyc2VyLT5zdGF0ZS5lcnJfc3RyZWFtID0gc3RkZXJyOworKyAgcGFyc2VyLT5zdGF0ZS5vdXRfc3RyZWFtID0gc3Rkb3V0OworKyAgcGFyc2VyLT5zdGF0ZS5uZXh0ID0gMDsgICAgICAvKiBUZWxsIGdldG9wdCB0byBpbml0aWFsaXplLiAgKi8KKysgIHBhcnNlci0+c3RhdGUucHN0YXRlID0gcGFyc2VyOworKworKyAgcGFyc2VyLT50cnlfZ2V0b3B0ID0gMTsKKysKKysgIC8qIENhbGwgZWFjaCBwYXJzZXIgZm9yIHRoZSBmaXJzdCB0aW1lLCBnaXZpbmcgaXQgYSBjaGFuY2UgdG8gcHJvcGFnYXRlCisrICAgICB2YWx1ZXMgdG8gY2hpbGQgcGFyc2Vycy4gICovCisrICBpZiAocGFyc2VyLT5ncm91cHMgPCBwYXJzZXItPmVncm91cCkKKysgICAgcGFyc2VyLT5ncm91cHMtPmlucHV0ID0gaW5wdXQ7CisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7CisrICAgICAgIGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXAgJiYgKCFlcnIgfHwgZXJyID09IEVCQURLRVkpOworKyAgICAgICBncm91cCsrKQorKyAgICB7CisrICAgICAgaWYgKGdyb3VwLT5wYXJlbnQpCisrICAgICAgIC8qIElmIGEgY2hpbGQgcGFyc2VyLCBnZXQgdGhlIGluaXRpYWwgaW5wdXQgdmFsdWUgZnJvbSB0aGUgcGFyZW50LiAqLworKyAgICAgICBncm91cC0+aW5wdXQgPSBncm91cC0+cGFyZW50LT5jaGlsZF9pbnB1dHNbZ3JvdXAtPnBhcmVudF9pbmRleF07CisrCisrICAgICAgaWYgKCFncm91cC0+cGFyc2VyCisrICAgICAgICAgJiYgZ3JvdXAtPmFyZ3AtPmNoaWxkcmVuICYmIGdyb3VwLT5hcmdwLT5jaGlsZHJlbi0+YXJncCkKKysgICAgICAgLyogRm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgbm8gcGFyc2luZyBmdW5jdGlvbiBpcyBzdXBwbGllZCBmb3IgYW4KKysgICAgICAgICAgYXJncCwgcHJvcGFnYXRlIGl0cyBpbnB1dCB0byBpdHMgZmlyc3QgY2hpbGQsIGlmIGFueSAodGhpcyBqdXN0CisrICAgICAgICAgIG1ha2VzIHZlcnkgc2ltcGxlIHdyYXBwZXIgYXJncHMgbW9yZSBjb252ZW5pZW50KS4gICovCisrICAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHNbMF0gPSBncm91cC0+aW5wdXQ7CisrCisrICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfSU5JVCwgMCk7CisrICAgIH0KKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgZXJyID0gMDsgICAgICAgICAgICAgICAgICAgLyogU29tZSBwYXJzZXIgZGlkbid0IHVuZGVyc3RhbmQuICAqLworKworKyAgaWYgKGVycikKKysgICAgcmV0dXJuIGVycjsKKysKKysgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19FUlJTKQorKyAgICB7CisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRlcnIgPSAwOworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9QQVJTRV9BUkdWMCkKKysgICAgICAgLyogZ2V0b3B0IGFsd2F5cyBza2lwcyBBUkdWWzBdLCBzbyB3ZSBoYXZlIHRvIGZha2UgaXQgb3V0LiAgQXMgbG9uZworKyAgICAgICAgICBhcyBPUFRFUlIgaXMgMCwgdGhlbiBpdCBzaG91bGRuJ3QgYWN0dWFsbHkgdHJ5IHRvIGFjY2VzcyBpdC4gICovCisrICAgICAgIHBhcnNlci0+c3RhdGUuYXJndi0tLCBwYXJzZXItPnN0YXRlLmFyZ2MrKzsKKysgICAgfQorKyAgZWxzZQorKyAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGVyciA9IDE7ICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2VzLiAgKi8KKysKKysgIGlmIChwYXJzZXItPnN0YXRlLmFyZ3YgPT0gYXJndiAmJiBhcmd2WzBdKQorKyAgICAvKiBUaGVyZSdzIGFuIGFyZ3ZbMF07IHVzZSBpdCBmb3IgbWVzc2FnZXMuICAqLworKyAgICB7CisrICAgICAgY2hhciAqc2hvcnRfbmFtZSA9IHN0cnJjaHIgKGFyZ3ZbMF0sICcvJyk7CisrICAgICAgcGFyc2VyLT5zdGF0ZS5uYW1lID0gc2hvcnRfbmFtZSA/IHNob3J0X25hbWUgKyAxIDogYXJndlswXTsKKysgICAgfQorKyAgZWxzZQorKyAgICBwYXJzZXItPnN0YXRlLm5hbWUgPSBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpOworKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIEZyZWUgYW55IHN0b3JhZ2UgY29uc3VtZWQgYnkgUEFSU0VSIChidXQgbm90IFBBUlNFUiBpdHNlbGYpLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9maW5hbGl6ZSAoc3RydWN0IHBhcnNlciAqcGFyc2VyLAorKyAgICAgICAgICAgICAgICBlcnJvcl90IGVyciwgaW50IGFyZ19lYmFka2V5LCBpbnQgKmVuZF9pbmRleCkKKyt7CisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKworKyAgaWYgKGVyciA9PSBFQkFES0VZICYmIGFyZ19lYmFka2V5KQorKyAgICAvKiBTdXBwcmVzcyBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHVucGFyc2VkIGFyZ3VtZW50cy4gICovCisrICAgIGVyciA9IDA7CisrCisrICBpZiAoISBlcnIpCisrICAgIHsKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID09IHBhcnNlci0+c3RhdGUuYXJnYykKKysgICAgICAgLyogV2Ugc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbGwgYXJndW1lbnRzISAgQ2FsbCBhbGwgdGhlIHBhcnNlcnMgYWdhaW4sCisrICAgICAgICAgIGp1c3QgYSBmZXcgbW9yZSB0aW1lcy4uLiAqLworKyAgICAgICB7CisrICAgICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOworKyAgICAgICAgICAgICAgZ3JvdXAgPCBwYXJzZXItPmVncm91cCAmJiAoIWVyciB8fCBlcnI9PUVCQURLRVkpOworKyAgICAgICAgICAgICAgZ3JvdXArKykKKysgICAgICAgICAgIGlmIChncm91cC0+YXJnc19wcm9jZXNzZWQgPT0gMCkKKysgICAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfTk9fQVJHUywgMCk7CisrICAgICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+ZWdyb3VwIC0gMTsKKysgICAgICAgICAgICAgIGdyb3VwID49IHBhcnNlci0+Z3JvdXBzICYmICghZXJyIHx8IGVycj09RUJBREtFWSk7CisrICAgICAgICAgICAgICBncm91cC0tKQorKyAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfRU5ELCAwKTsKKysKKysgICAgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgICAgICBlcnIgPSAwOyAgICAgICAgICAgIC8qIFNvbWUgcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kLiAgKi8KKysKKysgICAgICAgICAvKiBUZWxsIHRoZSB1c2VyIHRoYXQgYWxsIGFyZ3VtZW50cyBhcmUgcGFyc2VkLiAgKi8KKysgICAgICAgICBpZiAoZW5kX2luZGV4KQorKyAgICAgICAgICAgKmVuZF9pbmRleCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKGVuZF9pbmRleCkKKysgICAgICAgLyogUmV0dXJuIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSB1c2VyLiAgKi8KKysgICAgICAgKmVuZF9pbmRleCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICBlbHNlCisrICAgICAgIC8qIE5vIHdheSB0byByZXR1cm4gdGhlIHJlbWFpbmluZyBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBib2d1cy4gKi8KKysgICAgICAgeworKyAgICAgICAgIGlmICghKHBhcnNlci0+c3RhdGUuZmxhZ3MgJiBBUkdQX05PX0VSUlMpCisrICAgICAgICAgICAgICYmIHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSkKKysgICAgICAgICAgIGZwcmludGYgKHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogVG9vIG1hbnkgYXJndW1lbnRzXG4iKSwKKysgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+c3RhdGUubmFtZSk7CisrICAgICAgICAgZXJyID0gRUJBREtFWTsKKysgICAgICAgfQorKyAgICB9CisrCisrICAvKiBPa2F5LCB3ZSdyZSBhbGwgZG9uZSwgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3Igc3VjY2VzczsgY2FsbCB0aGUgcGFyc2VycworKyAgICAgdG8gaW5kaWNhdGUgd2hpY2ggb25lLiAgKi8KKysKKysgIGlmIChlcnIpCisrICAgIHsKKysgICAgICAvKiBNYXliZSBwcmludCBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKysgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgIC8qIEFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgZGVzY3JpYmluZyB3aGF0IHRoZSBlcnJvciB3YXMgc2hvdWxkIGhhdmUKKysgICAgICAgICAgYmVlbiBwcmludGVkIGVhcmxpZXIuICAqLworKyAgICAgICBhcmdwX3N0YXRlX2hlbHAgKCZwYXJzZXItPnN0YXRlLCBwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBUkdQX0hFTFBfU1REX0VSUik7CisrCisrICAgICAgLyogU2luY2Ugd2UgZGlkbid0IGV4aXQsIGdpdmUgZWFjaCBwYXJzZXIgYW4gZXJyb3IgaW5kaWNhdGlvbi4gICovCisrICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwOyBncm91cCsrKQorKyAgICAgICBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9FUlJPUiwgMCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogTm90aWZ5IHBhcnNlcnMgb2Ygc3VjY2VzcywgYW5kIHByb3BhZ2F0ZSBiYWNrIHZhbHVlcyBmcm9tIHBhcnNlcnMuICAqLworKyAgICB7CisrICAgICAgLyogV2UgcGFzcyBvdmVyIHRoZSBncm91cHMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IGNoaWxkIGdyb3VwcyBhcmUKKysgICAgICAgIGdpdmVuIGEgY2hhbmNlIHRvIGRvIHRoZXJlIHByb2Nlc3NpbmcgYmVmb3JlIHBhc3NpbmcgYmFjayBhIHZhbHVlIHRvCisrICAgICAgICB0aGUgcGFyZW50LiAgKi8KKysgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5lZ3JvdXAgLSAxCisrICAgICAgICAgIDsgZ3JvdXAgPj0gcGFyc2VyLT5ncm91cHMgJiYgKCFlcnIgfHwgZXJyID09IEVCQURLRVkpCisrICAgICAgICAgIDsgZ3JvdXAtLSkKKysgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfU1VDQ0VTUywgMCk7CisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICBlcnIgPSAwOyAgICAgICAgICAgICAgICAvKiBTb21lIHBhcnNlciBkaWRuJ3QgdW5kZXJzdGFuZC4gICovCisrICAgIH0KKysKKysgIC8qIENhbGwgcGFyc2VycyBvbmNlIG1vcmUsIHRvIGRvIGFueSBmaW5hbCBjbGVhbnVwLiAgRXJyb3JzIGFyZSBpZ25vcmVkLiAgKi8KKysgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmVncm91cCAtIDE7IGdyb3VwID49IHBhcnNlci0+Z3JvdXBzOyBncm91cC0tKQorKyAgICBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9GSU5JLCAwKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgZXJyID0gRUlOVkFMOworKworKyAgZnJlZSAocGFyc2VyLT5zdG9yYWdlKTsKKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIENhbGwgdGhlIHVzZXIgcGFyc2VycyB0byBwYXJzZSB0aGUgbm9uLW9wdGlvbiBhcmd1bWVudCBWQUwsIGF0IHRoZSBjdXJyZW50CisrICAgcG9zaXRpb24sIHJldHVybmluZyBhbnkgZXJyb3IuICBUaGUgc3RhdGUgTkVYVCBwb2ludGVyIGlzIGFzc3VtZWQgdG8gaGF2ZQorKyAgIGJlZW4gYWRqdXN0ZWQgKGJ5IGdldG9wdCkgdG8gcG9pbnQgYWZ0ZXIgdGhpcyBhcmd1bWVudDsgdGhpcyBmdW5jdGlvbiB3aWxsCisrICAgYWRqdXN0IGl0IGNvcnJlY3RseSB0byByZWZsZWN0IGhvd2V2ZXIgbWFueSBhcmdzIGFjdHVhbGx5IGVuZCB1cCBiZWluZworKyAgIGNvbnN1bWVkLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9wYXJzZV9hcmcgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgY2hhciAqdmFsKQorK3sKKysgIC8qIFNhdmUgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIE5FWFQsIGZpcnN0IGFkanVzdGluZyBpdCBzbyB0aGF0IHRoZSBhcmcKKysgICAgIHdlJ3JlIHBhcnNpbmcgaXMgYWdhaW4gdGhlIGZyb250IG9mIHRoZSBhcmcgdmVjdG9yLiAgKi8KKysgIGludCBpbmRleCA9IC0tcGFyc2VyLT5zdGF0ZS5uZXh0OworKyAgZXJyb3JfdCBlcnIgPSBFQkFES0VZOworKyAgc3RydWN0IGdyb3VwICpncm91cDsKKysgIGludCBrZXkgPSAwOyAgICAgICAgICAgICAgICAgLyogV2hpY2ggb2YgQVJHUF9LRVlfQVJHW1NdIHdlIHVzZWQuICAqLworKworKyAgLyogVHJ5IHRvIHBhcnNlIHRoZSBhcmd1bWVudCBpbiBlYWNoIHBhcnNlci4gICovCisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHMKKysgICAgICAgOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwICYmIGVyciA9PSBFQkFES0VZCisrICAgICAgIDsgZ3JvdXArKykKKysgICAgeworKyAgICAgIHBhcnNlci0+c3RhdGUubmV4dCsrOyAgICAvKiBGb3IgQVJHUF9LRVlfQVJHLCBjb25zdW1lIHRoZSBhcmcuICAqLworKyAgICAgIGtleSA9IEFSR1BfS0VZX0FSRzsKKysgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBrZXksIHZhbCk7CisrCisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICAvKiBUaGlzIHBhcnNlciBkb2Vzbid0IGxpa2UgQVJHUF9LRVlfQVJHOyB0cnkgQVJHUF9LRVlfQVJHUyBpbnN0ZWFkLiAqLworKyAgICAgICB7CisrICAgICAgICAgcGFyc2VyLT5zdGF0ZS5uZXh0LS07IC8qIEZvciBBUkdQX0tFWV9BUkdTLCBwdXQgYmFjayB0aGUgYXJnLiAgKi8KKysgICAgICAgICBrZXkgPSBBUkdQX0tFWV9BUkdTOworKyAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIGtleSwgMCk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKCEgZXJyKQorKyAgICB7CisrICAgICAgaWYgKGtleSA9PSBBUkdQX0tFWV9BUkdTKQorKyAgICAgICAvKiBUaGUgZGVmYXVsdCBmb3IgQVJHUF9LRVlfQVJHUyBpcyB0byBhc3N1bWUgdGhhdCBpZiBORVhUIGlzbid0CisrICAgICAgICAgIGNoYW5nZWQgYnkgdGhlIHVzZXIsICphbGwqIGFyZ3VtZW50cyBzaG91bGQgYmUgY29uc2lkZXJlZAorKyAgICAgICAgICBjb25zdW1lZC4gICovCisrICAgICAgIHBhcnNlci0+c3RhdGUubmV4dCA9IHBhcnNlci0+c3RhdGUuYXJnYzsKKysKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID4gaW5kZXgpCisrICAgICAgIC8qIFJlbWVtYmVyIHRoYXQgd2Ugc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBhIG5vbi1vcHRpb24KKysgICAgICAgICAgYXJndW1lbnQgLS0gYnV0IG9ubHkgaWYgdGhlIHVzZXIgaGFzbid0IGdvdHRlbiB0cmlja3kgYW5kIHNldAorKyAgICAgICAgICB0aGUgY2xvY2sgYmFjay4gICovCisrICAgICAgICgtLWdyb3VwKS0+YXJnc19wcm9jZXNzZWQgKz0gKHBhcnNlci0+c3RhdGUubmV4dCAtIGluZGV4KTsKKysgICAgICBlbHNlCisrICAgICAgIC8qIFRoZSB1c2VyIHdhbnRzIHRvIHJlcGFyc2Ugc29tZSBhcmdzLCBnaXZlIGdldG9wdCBhbm90aGVyIHRyeS4gICovCisrICAgICAgIHBhcnNlci0+dHJ5X2dldG9wdCA9IDE7CisrICAgIH0KKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIENhbGwgdGhlIHVzZXIgcGFyc2VycyB0byBwYXJzZSB0aGUgb3B0aW9uIE9QVCwgd2l0aCBhcmd1bWVudCBWQUwsIGF0IHRoZQorKyAgIGN1cnJlbnQgcG9zaXRpb24sIHJldHVybmluZyBhbnkgZXJyb3IuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX3BhcnNlX29wdCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBpbnQgb3B0LCBjaGFyICp2YWwpCisreworKyAgLyogVGhlIGdyb3VwIGtleSBlbmNvZGVkIGluIHRoZSBoaWdoIGJpdHM7IDAgZm9yIHNob3J0IG9wdHMgb3IKKysgICAgIGdyb3VwX251bWJlciArIDEgZm9yIGxvbmcgb3B0cy4gICovCisrICBpbnQgZ3JvdXBfa2V5ID0gb3B0ID4+IFVTRVJfQklUUzsKKysgIGVycm9yX3QgZXJyID0gRUJBREtFWTsKKysKKysgIGlmIChncm91cF9rZXkgPT0gMCkKKysgICAgLyogQSBzaG9ydCBvcHRpb24uICBCeSBjb21wYXJpbmcgT1BUJ3MgcG9zaXRpb24gaW4gU0hPUlRfT1BUUyB0byB0aGUKKysgICAgICAgdmFyaW91cyBzdGFydGluZyBwb3NpdGlvbnMgaW4gZWFjaCBncm91cCdzIFNIT1JUX0VORCBmaWVsZCwgd2UgY2FuCisrICAgICAgIGRldGVybWluZSB3aGljaCBncm91cCBPUFQgY2FtZSBmcm9tLiAgKi8KKysgICAgeworKyAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICAgICAgY2hhciAqc2hvcnRfaW5kZXggPSBzdHJjaHIgKHBhcnNlci0+c2hvcnRfb3B0cywgb3B0KTsKKysKKysgICAgICBpZiAoc2hvcnRfaW5kZXgpCisrICAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgICBpZiAoZ3JvdXAtPnNob3J0X2VuZCA+IHNob3J0X2luZGV4KQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIC8qIEEgbG9uZyBvcHRpb24uICBXZSB1c2Ugc2hpZnRzIGluc3RlYWQgb2YgbWFza2luZyBmb3IgZXh0cmFjdGluZworKyAgICAgICB0aGUgdXNlciB2YWx1ZSBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgc2lnbi4gICovCisrICAgIGVyciA9CisrICAgICAgZ3JvdXBfcGFyc2UgKCZwYXJzZXItPmdyb3Vwc1tncm91cF9rZXkgLSAxXSwgJnBhcnNlci0+c3RhdGUsCisrICAgICAgICAgICAgICAgICAgKG9wdCA8PCBHUk9VUF9CSVRTKSA+PiBHUk9VUF9CSVRTLAorKyAgICAgICAgICAgICAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgLyogQXQgbGVhc3QgY3VycmVudGx5LCBhbiBvcHRpb24gbm90IHJlY29nbml6ZWQgaXMgYW4gZXJyb3IgaW4gdGhlCisrICAgICAgIHBhcnNlciwgYmVjYXVzZSB3ZSBwcmUtY29tcHV0ZSB3aGljaCBwYXJzZXIgaXMgc3VwcG9zZWQgdG8gZGVhbAorKyAgICAgICB3aXRoIGVhY2ggb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGJhZF9rZXlfZXJyW10gPQorKyAgICAgICBOXygiKFBST0dSQU0gRVJST1IpIE9wdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHJlY29nbml6ZWQhPyIpOworKyAgICAgIGlmIChncm91cF9rZXkgPT0gMCkKKysgICAgICAgYXJncF9lcnJvciAoJnBhcnNlci0+c3RhdGUsICItJWM6ICVzIiwgb3B0LAorKyAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLCBiYWRfa2V5X2VycikpOworKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0ID0gcGFyc2VyLT5sb25nX29wdHM7CisrICAgICAgICAgd2hpbGUgKGxvbmdfb3B0LT52YWwgIT0gb3B0ICYmIGxvbmdfb3B0LT5uYW1lKQorKyAgICAgICAgICAgbG9uZ19vcHQrKzsKKysgICAgICAgICBhcmdwX2Vycm9yICgmcGFyc2VyLT5zdGF0ZSwgIi0tJXM6ICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0LT5uYW1lID8gbG9uZ19vcHQtPm5hbWUgOiAiPz8/IiwKKysgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLCBiYWRfa2V5X2VycikpOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIFBhcnNlIHRoZSBuZXh0IGFyZ3VtZW50IGluIFBBUlNFUiAoYXMgaW5kaWNhdGVkIGJ5IFBBUlNFUi0+c3RhdGUubmV4dCkuCisrICAgQW55IGVycm9yIGZyb20gdGhlIHBhcnNlcnMgaXMgcmV0dXJuZWQsIGFuZCAqQVJHUF9FQkFES0VZIGluZGljYXRlcworKyAgIHdoZXRoZXIgYSB2YWx1ZSBvZiBFQkFES0VZIGlzIGR1ZSB0byBhbiB1bnJlY29nbml6ZWQgYXJndW1lbnQgKHdoaWNoIGlzCisrICAgZ2VuZXJhbGx5IG5vdCBmYXRhbCkuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX3BhcnNlX25leHQgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgaW50ICphcmdfZWJhZGtleSkKKyt7CisrICBpbnQgb3B0OworKyAgZXJyb3JfdCBlcnIgPSAwOworKworKyAgaWYgKHBhcnNlci0+c3RhdGUucXVvdGVkICYmIHBhcnNlci0+c3RhdGUubmV4dCA8IHBhcnNlci0+c3RhdGUucXVvdGVkKQorKyAgICAvKiBUaGUgbmV4dCBhcmd1bWVudCBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIGJlZm9yZSB0aGUgcXVvdGVkCisrICAgICAgIHJlZ2lvbiwgc28gcHJldGVuZCB3ZSBuZXZlciBzYXcgdGhlIHF1b3RpbmcgYC0tJywgYW5kIGdpdmUgZ2V0b3B0CisrICAgICAgIGFub3RoZXIgY2hhbmNlLiAgSWYgdGhlIHVzZXIgaGFzbid0IHJlbW92ZWQgaXQsIGdldG9wdCB3aWxsIGp1c3QKKysgICAgICAgcHJvY2VzcyBpdCBhZ2Fpbi4gICovCisrICAgIHBhcnNlci0+c3RhdGUucXVvdGVkID0gMDsKKysKKysgIGlmIChwYXJzZXItPnRyeV9nZXRvcHQgJiYgIXBhcnNlci0+c3RhdGUucXVvdGVkKQorKyAgICAvKiBHaXZlIGdldG9wdCBhIGNoYW5jZSB0byBwYXJzZSB0aGlzLiAgKi8KKysgICAgeworKyAgICAgIC8qIFB1dCBpdCBiYWNrIGluIE9QVElORCBmb3IgZ2V0b3B0LiAgKi8KKysgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGluZCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAvKiBEaXN0aW5ndWlzaCBLRVlfRVJSIGZyb20gYSByZWFsIG9wdGlvbi4gICovCisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRvcHQgPSBLRVlfRU5EOworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9MT05HX09OTFkpCisrICAgICAgIG9wdCA9IF9nZXRvcHRfbG9uZ19vbmx5X3IgKHBhcnNlci0+c3RhdGUuYXJnYywgcGFyc2VyLT5zdGF0ZS5hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnNob3J0X29wdHMsIHBhcnNlci0+bG9uZ19vcHRzLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VyLT5vcHRfZGF0YSk7CisrICAgICAgZWxzZQorKyAgICAgICBvcHQgPSBfZ2V0b3B0X2xvbmdfciAocGFyc2VyLT5zdGF0ZS5hcmdjLCBwYXJzZXItPnN0YXRlLmFyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnNob3J0X29wdHMsIHBhcnNlci0+bG9uZ19vcHRzLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+b3B0X2RhdGEpOworKyAgICAgIC8qIEFuZCBzZWUgd2hhdCBnZXRvcHQgZGlkLiAgKi8KKysgICAgICBwYXJzZXItPnN0YXRlLm5leHQgPSBwYXJzZXItPm9wdF9kYXRhLm9wdGluZDsKKysKKysgICAgICBpZiAob3B0ID09IEtFWV9FTkQpCisrICAgICAgIC8qIEdldG9wdCBzYXlzIHRoZXJlIGFyZSBubyBtb3JlIG9wdGlvbnMsIHNvIHN0b3AgdXNpbmcKKysgICAgICAgICAgZ2V0b3B0OyB3ZSdsbCBjb250aW51ZSBpZiBuZWNlc3Nhcnkgb24gb3VyIG93bi4gICovCisrICAgICAgIHsKKysgICAgICAgICBwYXJzZXItPnRyeV9nZXRvcHQgPSAwOworKyAgICAgICAgIGlmIChwYXJzZXItPnN0YXRlLm5leHQgPiAxCisrICAgICAgICAgICAgICYmIHN0cmNtcCAocGFyc2VyLT5zdGF0ZS5hcmd2W3BhcnNlci0+c3RhdGUubmV4dCAtIDFdLCBRVU9URSkKKysgICAgICAgICAgICAgICAgICA9PSAwKQorKyAgICAgICAgICAgLyogTm90IG9ubHkgaXMgdGhpcyB0aGUgZW5kIG9mIHRoZSBvcHRpb25zLCBidXQgaXQncyBhCisrICAgICAgICAgICAgICBgcXVvdGVkJyByZWdpb24sIHdoaWNoIG1heSBoYXZlIGFyZ3MgdGhhdCAqbG9vayogbGlrZQorKyAgICAgICAgICAgICAgb3B0aW9ucywgc28gd2UgZGVmaW5pdGVseSBzaG91bGRuJ3QgdHJ5IHRvIHVzZSBnZXRvcHQgcGFzdAorKyAgICAgICAgICAgICAgaGVyZSwgd2hhdGV2ZXIgaGFwcGVucy4gICovCisrICAgICAgICAgICBwYXJzZXItPnN0YXRlLnF1b3RlZCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKG9wdCA9PSBLRVlfRVJSICYmIHBhcnNlci0+b3B0X2RhdGEub3B0b3B0ICE9IEtFWV9FTkQpCisrICAgICAgIC8qIEtFWV9FUlIgY2FuIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgYSB2YWxpZCB1c2VyIHNob3J0CisrICAgICAgICAgIG9wdGlvbiwgYnV0IGluIHRoZSBjYXNlIG9mIGEgcmVhbCBlcnJvciwgZ2V0b3B0IHNldHMgT1BUT1BUCisrICAgICAgICAgIHRvIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyLCB3aGljaCBjYW4gbmV2ZXIgYmUgS0VZX0VORC4gICovCisrICAgICAgIHsKKysgICAgICAgICAqYXJnX2ViYWRrZXkgPSAwOworKyAgICAgICAgIHJldHVybiBFQkFES0VZOworKyAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgb3B0ID0gS0VZX0VORDsKKysKKysgIGlmIChvcHQgPT0gS0VZX0VORCkKKysgICAgeworKyAgICAgIC8qIFdlJ3JlIHBhc3Qgd2hhdCBnZXRvcHQgY29uc2lkZXJzIHRoZSBvcHRpb25zLiAgKi8KKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID49IHBhcnNlci0+c3RhdGUuYXJnYworKyAgICAgICAgIHx8IChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19BUkdTKSkKKysgICAgICAgLyogSW5kaWNhdGUgdGhhdCB3ZSdyZSBkb25lLiAgKi8KKysgICAgICAgeworKyAgICAgICAgICphcmdfZWJhZGtleSA9IDE7CisrICAgICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIC8qIEEgbm9uLW9wdGlvbiBhcmc7IHNpbXVsYXRlIHdoYXQgZ2V0b3B0IG1pZ2h0IGhhdmUgZG9uZS4gICovCisrICAgICAgIHsKKysgICAgICAgICBvcHQgPSBLRVlfQVJHOworKyAgICAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnID0gcGFyc2VyLT5zdGF0ZS5hcmd2W3BhcnNlci0+c3RhdGUubmV4dCsrXTsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAob3B0ID09IEtFWV9BUkcpCisrICAgIC8qIEEgbm9uLW9wdGlvbiBhcmd1bWVudDsgdHJ5IGVhY2ggcGFyc2VyIGluIHR1cm4uICAqLworKyAgICBlcnIgPSBwYXJzZXJfcGFyc2VfYXJnIChwYXJzZXIsIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysgIGVsc2UKKysgICAgZXJyID0gcGFyc2VyX3BhcnNlX29wdCAocGFyc2VyLCBvcHQsIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgKmFyZ19lYmFka2V5ID0gKG9wdCA9PSBLRVlfRU5EIHx8IG9wdCA9PSBLRVlfQVJHKTsKKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIFBhcnNlIHRoZSBvcHRpb25zIHN0cmluZ3MgaW4gQVJHQyAmIEFSR1YgYWNjb3JkaW5nIHRvIHRoZSBhcmdwIGluIEFSR1AuCisrICAgRkxBR1MgaXMgb25lIG9mIHRoZSBBUkdQXyBmbGFncyBhYm92ZS4gIElmIEVORF9JTkRFWCBpcyBub24tTlVMTCwgdGhlCisrICAgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgdW5wYXJzZWQgb3B0aW9uIGlzIHJldHVybmVkIGluIGl0LiAgSWYgYW4KKysgICB1bmtub3duIG9wdGlvbiBpcyBwcmVzZW50LCBFSU5WQUwgaXMgcmV0dXJuZWQ7IGlmIHNvbWUgcGFyc2VyIHJvdXRpbmUKKysgICByZXR1cm5lZCBhIG5vbi16ZXJvIHZhbHVlLCBpdCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuICAqLworK2Vycm9yX3QKKythcmdwX3BhcnNlIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCB1bnNpZ25lZCBmbGFncywKKysgICAgICAgICAgICAgaW50ICplbmRfaW5kZXgsIHZvaWQgKmlucHV0KQorK3sKKysgIGVycm9yX3QgZXJyOworKyAgc3RydWN0IHBhcnNlciBwYXJzZXI7CisrCisrICAvKiBJZiB0cnVlLCB0aGVuIGVyciA9PSBFQkFES0VZIGlzIGEgcmVzdWx0IG9mIGEgbm9uLW9wdGlvbiBhcmd1bWVudCBmYWlsaW5nCisrICAgICB0byBiZSBwYXJzZWQgKHdoaWNoIGluIHNvbWUgY2FzZXMgaXNuJ3QgYWN0dWFsbHkgYW4gZXJyb3IpLiAgKi8KKysgIGludCBhcmdfZWJhZGtleSA9IDA7CisrCisrICBpZiAoISAoZmxhZ3MgJiBBUkdQX05PX0hFTFApKQorKyAgICAvKiBBZGQgb3VyIG93biBvcHRpb25zLiAgKi8KKysgICAgeworKyAgICAgIHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFsbG9jYSAoNCAqIHNpemVvZiAoc3RydWN0IGFyZ3BfY2hpbGQpKTsKKysgICAgICBzdHJ1Y3QgYXJncCAqdG9wX2FyZ3AgPSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGFyZ3ApKTsKKysKKysgICAgICAvKiBUT1BfQVJHUCBoYXMgbm8gb3B0aW9ucywgaXQganVzdCBzZXJ2ZXMgdG8gZ3JvdXAgdGhlIHVzZXIgJiBkZWZhdWx0CisrICAgICAgICBhcmdwcy4gICovCisrICAgICAgbWVtc2V0ICh0b3BfYXJncCwgMCwgc2l6ZW9mICgqdG9wX2FyZ3ApKTsKKysgICAgICB0b3BfYXJncC0+Y2hpbGRyZW4gPSBjaGlsZDsKKysKKysgICAgICBtZW1zZXQgKGNoaWxkLCAwLCA0ICogc2l6ZW9mIChzdHJ1Y3QgYXJncF9jaGlsZCkpOworKworKyAgICAgIGlmIChhcmdwKQorKyAgICAgICAoY2hpbGQrKyktPmFyZ3AgPSBhcmdwOworKyAgICAgIChjaGlsZCsrKS0+YXJncCA9ICZhcmdwX2RlZmF1bHRfYXJncDsKKysgICAgICBpZiAoYXJncF9wcm9ncmFtX3ZlcnNpb24gfHwgYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykKKysgICAgICAgKGNoaWxkKyspLT5hcmdwID0gJmFyZ3BfdmVyc2lvbl9hcmdwOworKyAgICAgIGNoaWxkLT5hcmdwID0gMDsKKysKKysgICAgICBhcmdwID0gdG9wX2FyZ3A7CisrICAgIH0KKysKKysgIC8qIENvbnN0cnVjdCBhIHBhcnNlciBmb3IgdGhlc2UgYXJndW1lbnRzLiAgKi8KKysgIGVyciA9IHBhcnNlcl9pbml0ICgmcGFyc2VyLCBhcmdwLCBhcmdjLCBhcmd2LCBmbGFncywgaW5wdXQpOworKworKyAgaWYgKCEgZXJyKQorKyAgICAvKiBQYXJzZSEgKi8KKysgICAgeworKyAgICAgIHdoaWxlICghIGVycikKKysgICAgICAgZXJyID0gcGFyc2VyX3BhcnNlX25leHQgKCZwYXJzZXIsICZhcmdfZWJhZGtleSk7CisrICAgICAgZXJyID0gcGFyc2VyX2ZpbmFsaXplICgmcGFyc2VyLCBlcnIsIGFyZ19lYmFka2V5LCBlbmRfaW5kZXgpOworKyAgICB9CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBSZXR1cm4gdGhlIGlucHV0IGZpZWxkIGZvciBBUkdQIGluIHRoZSBwYXJzZXIgY29ycmVzcG9uZGluZyB0byBTVEFURTsgdXNlZAorKyAgIGJ5IHRoZSBoZWxwIHJvdXRpbmVzLiAgKi8KKyt2b2lkICoKKytfX2FyZ3BfaW5wdXQgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgaWYgKHN0YXRlKQorKyAgICB7CisrICAgICAgc3RydWN0IGdyb3VwICpncm91cDsKKysgICAgICBzdHJ1Y3QgcGFyc2VyICpwYXJzZXIgPSBzdGF0ZS0+cHN0YXRlOworKworKyAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgaWYgKGdyb3VwLT5hcmdwID09IGFyZ3ApCisrICAgICAgICAgcmV0dXJuIGdyb3VwLT5pbnB1dDsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcHYuYyBiL2xpYnVhcmdwL2FyZ3AtcHYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYxMjI3YjUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtcHYuYworQEAgLTAsMCArMSwyNSBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX1ZFUlNJT04uCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrLyogSWYgc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQgb3B0aW9uCisrICAgLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaCB3aWxsCisrICAgcHJpbnQgdGhpcyB0aGlzIHN0cmluZyBmb2xsb3dlZCBieSBhIG5ld2xpbmUgYW5kIGV4aXQgKHVubGVzcyB0aGUKKysgICBBUkdQX05PX0VYSVQgZmxhZyBpcyB1c2VkKS4gIE92ZXJyaWRkZW4gYnkgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4gICovCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb247CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1wdmguYyBiL2xpYnVhcmdwL2FyZ3AtcHZoLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZjFkOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXB2aC5jCitAQCAtMCwwICsxLDMyIEBACisrLyogRGVmYXVsdCBkZWZpbml0aW9uIGZvciBBUkdQX1BST0dSQU1fVkVSU0lPTl9IT09LLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrLyogSWYgc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQgb3B0aW9uCisrICAgLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaCBjYWxscworKyAgIHRoaXMgZnVuY3Rpb24gd2l0aCBhIHN0cmVhbSB0byBwcmludCB0aGUgdmVyc2lvbiB0byBhbmQgYSBwb2ludGVyIHRvIHRoZQorKyAgIGN1cnJlbnQgcGFyc2luZyBzdGF0ZSwgYW5kIHRoZW4gZXhpdHMgKHVubGVzcyB0aGUgQVJHUF9OT19FWElUIGZsYWcgaXMKKysgICB1c2VkKS4gIFRoaXMgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW50IG92ZXIgQVJHUF9QUk9HUkFNX1ZFUlNJT04uICAqLworK3ZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqc3RyZWFtLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AteGlubC5jIGIvbGlidWFyZ3AvYXJncC14aW5sLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMWQzMDAwCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXhpbmwuYworQEAgLTAsMCArMSwzNSBAQAorKy8qIFJlYWwgZGVmaW5pdGlvbnMgZm9yIGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zIGluIGFyZ3AuaAorKyAgIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfRkVBVFVSRVNfSAorKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisrIyBkZWZpbmUgX19VU0VfRVhURVJOX0lOTElORVMgIDEKKysjZW5kaWYKKysjZGVmaW5lIEFSR1BfRUkKKysjdW5kZWYgX19PUFRJTUlaRV9fCisrI2RlZmluZSBfX09QVElNSVpFX18gMQorKyNpbmNsdWRlIDxhcmdwLmg+CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL01ha2VmaWxlIGIvdGVzdC9hcmdwL01ha2VmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjE2ZmU3MQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL01ha2VmaWxlCitAQCAtMCwwICsxLDcgQEAKKysjIHVDbGliYyBhcmdwIHRlc3RzCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKworK3RvcF9idWlsZGRpcj0uLi8uLi8KKytpbmNsdWRlIC4uL1J1bGVzLm1haworKy1pbmNsdWRlIE1ha2VmaWxlLmluCisraW5jbHVkZSAuLi9UZXN0Lm1haworZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9NYWtlZmlsZS5pbiBiL3Rlc3QvYXJncC9NYWtlZmlsZS5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ4MWIzNTkKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9NYWtlZmlsZS5pbgorQEAgLTAsMCArMSwxMiBAQAorKyMgdUNsaWJjIGFyZ3AgdGVzdHMKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrCisrVEVTVFMgOj0gJChhZGRwcmVmaXggYXJncC0sIGV4MSBleDIgZXgzIGV4NCB0ZXN0KSBcCisrICAgICAgICAgYnVnLWFyZ3AxIHRzdC1hcmdwMSB0c3QtYXJncDIKKysKKytFWFRSQV9MREZMQUdTID0gLWx1YXJncAorKworK09QVFNfYXJncC1leDMgPSBBUkcxIEFSRzIKKytPUFRTX2FyZ3AtZXg0ID0gQVJHMSBzdHJpbmcxIHN0cmluZzIgc3RyaW5nMworK09QVFNfYnVnLWFyZ3AxID0gLS0gLS1oZWxwCisrCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXgxLmMgYi90ZXN0L2FyZ3AvYXJncC1leDEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjdiYjVmMjIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4MS5jCitAQCAtMCwwICsxLDE1IEBACisrLyogQXJncCBleGFtcGxlICMxIC0tIGEgbWluaW1hbCBwcm9ncmFtIHVzaW5nIGFyZ3AgKi8KKysKKysvKiBUaGlzIGlzIChwcm9iYWJseSkgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByb2dyYW0gdGhhdAorKyAgIHVzZXMgYXJncC4gIEl0IHdvbid0IGRvIG11Y2ggZXhjZXB0IGdpdmUgYW4gZXJyb3IKKysgICBtZXNzYWdlcyBhbmQgZXhpdCB3aGVuIHRoZXJlIGFyZSBhbnkgYXJndW1lbnRzLCBhbmQgcHJpbnQKKysgICBhIChyYXRoZXIgcG9pbnRsZXNzKSBtZXNzYWdlcyBmb3IgLS1oZWxwLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGFyZ3BfcGFyc2UgKDAsIGFyZ2MsIGFyZ3YsIDAsIDAsIDApOworKyAgZXhpdCAoMCk7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4Mi5jIGIvdGVzdC9hcmdwL2FyZ3AtZXgyLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jNDlmYmFjCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDIuYworQEAgLTAsMCArMSw0NSBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjMiAtLSBhIHByZXR0eSBtaW5pbWFsIHByb2dyYW0gdXNpbmcgYXJncCAqLworKworKy8qIFRoaXMgcHJvZ3JhbSBkb2Vzbid0IHVzZSBhbnkgb3B0aW9ucyBvciBhcmd1bWVudHMsIGJ1dCB1c2VzCisrICAgYXJncCB0byBiZSBjb21wbGlhbnQgd2l0aCB0aGUgR05VIHN0YW5kYXJkIGNvbW1hbmQgbGluZQorKyAgIGZvcm1hdC4KKysKKysgICBJbiBhZGRpdGlvbiB0byBtYWtpbmcgc3VyZSBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbmQKKysgICBpbXBsZW1lbnRpbmcgYSAtLWhlbHAgb3B0aW9uLCB0aGlzIGV4YW1wbGUgd2lsbCBoYXZlIGEKKysgICAtLXZlcnNpb24gb3B0aW9uLCBhbmQgd2lsbCBwdXQgdGhlIGdpdmVuIGRvY3VtZW50YXRpb24gc3RyaW5nCisrICAgYW5kIGJ1ZyBhZGRyZXNzIGluIHRoZSAtLWhlbHAgb3V0cHV0LCBhcyBwZXIgR05VIHN0YW5kYXJkcy4KKysKKysgICBUaGUgdmFyaWFibGUgQVJHUCBjb250YWlucyB0aGUgYXJndW1lbnQgcGFyc2VyIHNwZWNpZmljYXRpb247CisrICAgYWRkaW5nIGZpZWxkcyB0byB0aGlzIHN0cnVjdHVyZSBpcyB0aGUgd2F5IG1vc3QgcGFyYW1ldGVycyBhcmUKKysgICBwYXNzZWQgdG8gYXJncF9wYXJzZSAodGhlIGZpcnN0IHRocmVlIGZpZWxkcyBhcmUgdXN1YWxseSB1c2VkLAorKyAgIGJ1dCBub3QgaW4gdGhpcyBzbWFsbCBwcm9ncmFtKS4gIFRoZXJlIGFyZSBhbHNvIHR3byBnbG9iYWwKKysgICB2YXJpYWJsZXMgdGhhdCBhcmdwIGtub3dzIGFib3V0IGRlZmluZWQgaGVyZSwKKysgICBBUkdQX1BST0dSQU1fVkVSU0lPTiBhbmQgQVJHUF9QUk9HUkFNX0JVR19BRERSRVNTICh0aGV5IGFyZQorKyAgIGdsb2JhbCB2YXJpYWJsZXMgYmVjYXVzZSB0aGV5IHdpbGwgYWxtb3N0IGFsd2F5cyBiZSBjb25zdGFudAorKyAgIGZvciBhIGdpdmVuIHByb2dyYW0sIGV2ZW4gaWYgaXQgdXNlcyBkaWZmZXJlbnQgYXJndW1lbnQKKysgICBwYXJzZXJzIGZvciB2YXJpb3VzIHRhc2tzKS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXgyIDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAZ251Lm9yZz4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjMiAtLSBhIHByZXR0eSBtaW5pbWFsIHByb2dyYW0gdXNpbmcgYXJncCI7CisrCisrLyogT3VyIGFyZ3VtZW50IHBhcnNlci4gIFRoZSBAY29kZXtvcHRpb25zfSwgQGNvZGV7cGFyc2VyfSwgYW5kCisrICAgQGNvZGV7YXJnc19kb2N9IGZpZWxkcyBhcmUgemVybyBiZWNhdXNlIHdlIGhhdmUgbmVpdGhlciBvcHRpb25zIG9yCisrICAgYXJndW1lbnRzOyBAY29kZXtkb2N9IGFuZCBAY29kZXthcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3N9IHdpbGwgYmUKKysgICB1c2VkIGluIHRoZSBvdXRwdXQgZm9yIEBzYW1wey0taGVscH0sIGFuZCB0aGUgQHNhbXB7LS12ZXJzaW9ufQorKyAgIG9wdGlvbiB3aWxsIHByaW50IG91dCBAY29kZXthcmdwX3Byb2dyYW1fdmVyc2lvbn0uICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geyAwLCAwLCAwLCBkb2MgfTsKKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAwLCAwKTsKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC1leDMuYyBiL3Rlc3QvYXJncC9hcmdwLWV4My5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjRkNWM1MAorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtZXgzLmMKK0BAIC0wLDAgKzEsMTUzIEBACisrLyogQXJncCBleGFtcGxlICMzIC0tIGEgcHJvZ3JhbSB3aXRoIG9wdGlvbnMgYW5kIGFyZ3VtZW50cyB1c2luZyBhcmdwICovCisrCisrLyogVGhpcyBwcm9ncmFtIHVzZXMgdGhlIHNhbWUgZmVhdHVyZXMgYXMgZXhhbXBsZSAyLCBhbmQgdXNlcyBvcHRpb25zIGFuZAorKyAgIGFyZ3VtZW50cy4KKysKKysgICBXZSBub3cgdXNlIHRoZSBmaXJzdCBmb3VyIGZpZWxkcyBpbiBBUkdQLCBzbyBoZXJlJ3MgYSBkZXNjcmlwdGlvbiBvZiB0aGVtOgorKyAgICAgT1BUSU9OUyAgLS0gQSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHN0cnVjdCBhcmdwX29wdGlvbiAoc2VlIGJlbG93KQorKyAgICAgUEFSU0VSICAgLS0gQSBmdW5jdGlvbiB0byBwYXJzZSBhIHNpbmdsZSBvcHRpb24sIGNhbGxlZCBieSBhcmdwCisrICAgICBBUkdTX0RPQyAtLSBBIHN0cmluZyBkZXNjcmliaW5nIGhvdyB0aGUgbm9uLW9wdGlvbiBhcmd1bWVudHMgc2hvdWxkIGxvb2sKKysgICAgIERPQyAgICAgIC0tIEEgZGVzY3JpcHRpdmUgc3RyaW5nIGFib3V0IHRoaXMgcHJvZ3JhbTsgaWYgaXQgY29udGFpbnMgYQorKyAgICAgICAgICAgICAgICAgdmVydGljYWwgdGFiIGNoYXJhY3RlciAoXHYpLCB0aGUgcGFydCBhZnRlciBpdCB3aWxsIGJlCisrICAgICAgICAgICAgICAgICBwcmludGVkICpmb2xsb3dpbmcqIHRoZSBvcHRpb25zCisrCisrICAgVGhlIGZ1bmN0aW9uIFBBUlNFUiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKysgICAgIEtFWSAgLS0gQW4gaW50ZWdlciBzcGVjaWZ5aW5nIHdoaWNoIG9wdGlvbiB0aGlzIGlzICh0YWtlbgorKyAgICAgICAgICAgICBmcm9tIHRoZSBLRVkgZmllbGQgaW4gZWFjaCBzdHJ1Y3QgYXJncF9vcHRpb24pLCBvcgorKyAgICAgICAgICAgICBhIHNwZWNpYWwga2V5IHNwZWNpZnlpbmcgc29tZXRoaW5nIGVsc2U7IHRoZSBvbmx5CisrICAgICAgICAgICAgIHNwZWNpYWwga2V5cyB3ZSB1c2UgaGVyZSBhcmUgQVJHUF9LRVlfQVJHLCBtZWFuaW5nCisrICAgICAgICAgICAgIGEgbm9uLW9wdGlvbiBhcmd1bWVudCwgYW5kIEFSR1BfS0VZX0VORCwgbWVhbmluZworKyAgICAgICAgICAgICB0aGF0IGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhcnNlZAorKyAgICAgQVJHICAtLSBGb3IgYW4gb3B0aW9uIEtFWSwgdGhlIHN0cmluZyB2YWx1ZSBvZiBpdHMKKysgICAgICAgICAgICAgYXJndW1lbnQsIG9yIE5VTEwgaWYgaXQgaGFzIG5vbmUKKysgICAgIFNUQVRFLS0gQSBwb2ludGVyIHRvIGEgc3RydWN0IGFyZ3Bfc3RhdGUsIGNvbnRhaW5pbmcKKysgICAgICAgICAgICAgdmFyaW91cyB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcnNpbmcgc3RhdGU7IHVzZWQgaGVyZQorKyAgICAgICAgICAgICBhcmUgdGhlIElOUFVUIGZpZWxkLCB3aGljaCByZWZsZWN0cyB0aGUgSU5QVVQgYXJndW1lbnQgdG8KKysgICAgICAgICAgICAgYXJncF9wYXJzZSwgYW5kIHRoZSBBUkdfTlVNIGZpZWxkLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHRoZQorKyAgICAgICAgICAgICBjdXJyZW50IG5vbi1vcHRpb24gYXJndW1lbnQgYmVpbmcgcGFyc2VkCisrICAgSXQgc2hvdWxkIHJldHVybiBlaXRoZXIgMCwgbWVhbmluZyBzdWNjZXNzLCBBUkdQX0VSUl9VTktOT1dOLCBtZWFuaW5nIHRoZQorKyAgIGdpdmVuIEtFWSB3YXNuJ3QgcmVjb2duaXplZCwgb3IgYW4gZXJybm8gdmFsdWUgaW5kaWNhdGluZyBzb21lIG90aGVyCisrICAgZXJyb3IuCisrCisrICAgTm90ZSB0aGF0IGluIHRoaXMgZXhhbXBsZSwgbWFpbiB1c2VzIGEgc3RydWN0dXJlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlCisrICAgcGFyc2Vfb3B0IGZ1bmN0aW9uLCBhIHBvaW50ZXIgdG8gd2hpY2ggaXQgcGFzc2VzIGluIHRoZSBJTlBVVCBhcmd1bWVudCB0bworKyAgIGFyZ3BfcGFyc2UuICBPZiBjb3Vyc2UsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byB1c2UgZ2xvYmFsIHZhcmlhYmxlcworKyAgIGluc3RlYWQsIGJ1dCB0aGlzIGlzIHNvbWV3aGF0IG1vcmUgZmxleGlibGUuCisrCisrICAgVGhlIE9QVElPTlMgZmllbGQgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHN0cnVjdCBhcmdwX29wdGlvbidzOworKyAgIHRoYXQgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkcyAoaWYgeW91IGFzc2lnbiB5b3VyIG9wdGlvbgorKyAgIHN0cnVjdHVyZXMgdXNpbmcgYXJyYXkgaW5pdGlhbGl6YXRpb24gbGlrZSB0aGlzIGV4YW1wbGUsIHVuc3BlY2lmaWVkCisrICAgZmllbGRzIHdpbGwgYmUgZGVmYXVsdGVkIHRvIDAsIGFuZCBuZWVkIG5vdCBiZSBzcGVjaWZpZWQpOgorKyAgICAgTkFNRSAgIC0tIFRoZSBuYW1lIG9mIHRoaXMgb3B0aW9uJ3MgbG9uZyBvcHRpb24gKG1heSBiZSB6ZXJvKQorKyAgICAgS0VZICAgIC0tIFRoZSBLRVkgdG8gcGFzcyB0byB0aGUgUEFSU0VSIGZ1bmN0aW9uIHdoZW4gcGFyc2luZyB0aGlzIG9wdGlvbiwKKysgICAgICAgICAgICAgICAqYW5kKiB0aGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIHNob3J0IG9wdGlvbiwgaWYgaXQgaXMgYQorKyAgICAgICAgICAgICAgIHByaW50YWJsZSBhc2NpaSBjaGFyYWN0ZXIKKysgICAgIEFSRyAgICAtLSBUaGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIGFyZ3VtZW50LCBpZiBhbnkKKysgICAgIEZMQUdTICAtLSBGbGFncyBkZXNjcmliaW5nIHRoaXMgb3B0aW9uOyBzb21lIG9mIHRoZW0gYXJlOgorKyAgICAgICAgICAgICAgICAgT1BUSU9OX0FSR19PUFRJT05BTCAtLSBUaGUgYXJndW1lbnQgdG8gdGhpcyBvcHRpb24gaXMgb3B0aW9uYWwKKysgICAgICAgICAgICAgICAgIE9QVElPTl9BTElBUyAgICAgICAgLS0gVGhpcyBvcHRpb24gaXMgYW4gYWxpYXMgZm9yIHRoZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBvcHRpb24KKysgICAgICAgICAgICAgICAgIE9QVElPTl9ISURERU4gICAgICAgLS0gRG9uJ3Qgc2hvdyB0aGlzIG9wdGlvbiBpbiAtLWhlbHAgb3V0cHV0CisrICAgICBET0MgICAgLS0gQSBkb2N1bWVudGF0aW9uIHN0cmluZyBmb3IgdGhpcyBvcHRpb24sIHNob3duIGluIC0taGVscCBvdXRwdXQKKysKKysgICBBbiBvcHRpb25zIHZlY3RvciBzaG91bGQgYmUgdGVybWluYXRlZCBieSBhbiBvcHRpb24gd2l0aCBhbGwgZmllbGRzIHplcm8uICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXgzIDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAZ251Lm9yZz4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjMyAtLSBhIHByb2dyYW0gd2l0aCBvcHRpb25zIGFuZCBhcmd1bWVudHMgdXNpbmcgYXJncCI7CisrCisrLyogQSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnRzIHdlIGFjY2VwdC4gICovCisrc3RhdGljIGNoYXIgYXJnc19kb2NbXSA9ICJBUkcxIEFSRzIiOworKworKy8qIFRoZSBvcHRpb25zIHdlIHVuZGVyc3RhbmQuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworKyAgeyJ2ZXJib3NlIiwgICd2JywgMCwgICAgICAwLCAgIlByb2R1Y2UgdmVyYm9zZSBvdXRwdXQiIH0sCisrICB7InF1aWV0IiwgICAgJ3EnLCAwLCAgICAgIDAsICAiRG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0IiB9LAorKyAgeyJzaWxlbnQiLCAgICdzJywgMCwgICAgICBPUFRJT05fQUxJQVMgfSwKKysgIHsib3V0cHV0IiwgICAnbycsICJGSUxFIiwgMCwKKysgICAiT3V0cHV0IHRvIEZJTEUgaW5zdGVhZCBvZiBzdGFuZGFyZCBvdXRwdXQiIH0sCisrICB7IDAgfQorK307CisrCisrLyogVXNlZCBieSBAY29kZXttYWlufSB0byBjb21tdW5pY2F0ZSB3aXRoIEBjb2Rle3BhcnNlX29wdH0uICAqLworK3N0cnVjdCBhcmd1bWVudHMKKyt7CisrICBjaGFyICphcmdzWzJdOyAgICAgICAgICAgICAgIC8qIEB2YXJ7YXJnMX0gJiBAdmFye2FyZzJ9ICovCisrICBpbnQgc2lsZW50LCB2ZXJib3NlOworKyAgY2hhciAqb3V0cHV0X2ZpbGU7CisrfTsKKysKKysvKiBQYXJzZSBhIHNpbmdsZSBvcHRpb24uICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICAvKiBHZXQgdGhlIEB2YXJ7aW5wdXR9IGFyZ3VtZW50IGZyb20gQGNvZGV7YXJncF9wYXJzZX0sIHdoaWNoIHdlCisrICAgICBrbm93IGlzIGEgcG9pbnRlciB0byBvdXIgYXJndW1lbnRzIHN0cnVjdHVyZS4gICovCisrICBzdHJ1Y3QgYXJndW1lbnRzICphcmd1bWVudHMgPSBzdGF0ZS0+aW5wdXQ7CisrCisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdxJzogY2FzZSAncyc6CisrICAgICAgYXJndW1lbnRzLT5zaWxlbnQgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICd2JzoKKysgICAgICBhcmd1bWVudHMtPnZlcmJvc2UgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdvJzoKKysgICAgICBhcmd1bWVudHMtPm91dHB1dF9maWxlID0gYXJnOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPj0gMikKKysgICAgICAgLyogVG9vIG1hbnkgYXJndW1lbnRzLiAgKi8KKysgICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKworKyAgICAgIGFyZ3VtZW50cy0+YXJnc1tzdGF0ZS0+YXJnX251bV0gPSBhcmc7CisrCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfRU5EOgorKyAgICAgIGlmIChzdGF0ZS0+YXJnX251bSA8IDIpCisrICAgICAgIC8qIE5vdCBlbm91Z2ggYXJndW1lbnRzLiAgKi8KKysgICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogT3VyIGFyZ3AgcGFyc2VyLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsgb3B0aW9ucywgcGFyc2Vfb3B0LCBhcmdzX2RvYywgZG9jIH07CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBzdHJ1Y3QgYXJndW1lbnRzIGFyZ3VtZW50czsKKysKKysgIC8qIERlZmF1bHQgdmFsdWVzLiAgKi8KKysgIGFyZ3VtZW50cy5zaWxlbnQgPSAwOworKyAgYXJndW1lbnRzLnZlcmJvc2UgPSAwOworKyAgYXJndW1lbnRzLm91dHB1dF9maWxlID0gIi0iOworKworKyAgLyogUGFyc2Ugb3VyIGFyZ3VtZW50czsgZXZlcnkgb3B0aW9uIHNlZW4gYnkgQGNvZGV7cGFyc2Vfb3B0fSB3aWxsCisrICAgICBiZSByZWZsZWN0ZWQgaW4gQGNvZGV7YXJndW1lbnRzfS4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJmFyZ3VtZW50cyk7CisrCisrICBwcmludGYgKCJBUkcxID0gJXNcbkFSRzIgPSAlc1xuT1VUUFVUX0ZJTEUgPSAlc1xuIgorKyAgICAgICAgICJWRVJCT1NFID0gJXNcblNJTEVOVCA9ICVzXG4iLAorKyAgICAgICAgIGFyZ3VtZW50cy5hcmdzWzBdLCBhcmd1bWVudHMuYXJnc1sxXSwKKysgICAgICAgICBhcmd1bWVudHMub3V0cHV0X2ZpbGUsCisrICAgICAgICAgYXJndW1lbnRzLnZlcmJvc2UgPyAieWVzIiA6ICJubyIsCisrICAgICAgICAgYXJndW1lbnRzLnNpbGVudCA/ICJ5ZXMiIDogIm5vIik7CisrCisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXg0LmMgYi90ZXN0L2FyZ3AvYXJncC1leDQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmM3N2M3ZWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4NC5jCitAQCAtMCwwICsxLDE2NyBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjNCAtLSBhIHByb2dyYW0gd2l0aCBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkIG9wdGlvbnMgKi8KKysKKysvKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgc2FtZSBmZWF0dXJlcyBhcyBleGFtcGxlIDMsIGJ1dCBoYXMgbW9yZQorKyAgIG9wdGlvbnMsIGFuZCBzb21ld2hhdCBtb3JlIHN0cnVjdHVyZSBpbiB0aGUgLWhlbHAgb3V0cHV0LiAgSXQKKysgICBhbHNvIHNob3dzIGhvdyB5b3UgY2FuIGBzdGVhbCcgdGhlIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQKKysgICBhcmd1bWVudHMgcGFzdCBhIGNlcnRhaW4gcG9pbnQsIGZvciBwcm9ncmFtcyB0aGF0IGFjY2VwdCBhCisrICAgbGlzdCBvZiBpdGVtcy4gIEl0IGFsc28gc2hvd3MgdGhlIHNwZWNpYWwgYXJncCBLRVkgdmFsdWUKKysgICBBUkdQX0tFWV9OT19BUkdTLCB3aGljaCBpcyBvbmx5IGdpdmVuIGlmIG5vIG5vbi1vcHRpb24KKysgICBhcmd1bWVudHMgd2VyZSBzdXBwbGllZCB0byB0aGUgcHJvZ3JhbS4KKysKKysgICBGb3Igc3RydWN0dXJpbmcgdGhlIGhlbHAgb3V0cHV0LCB0d28gZmVhdHVyZXMgYXJlIHVzZWQsCisrICAgKmhlYWRlcnMqIHdoaWNoIGFyZSBlbnRyaWVzIGluIHRoZSBvcHRpb25zIHZlY3RvciB3aXRoIHRoZQorKyAgIGZpcnN0IGZvdXIgZmllbGRzIGJlaW5nIHplcm8sIGFuZCBhIHR3byBwYXJ0IGRvY3VtZW50YXRpb24KKysgICBzdHJpbmcgKGluIHRoZSB2YXJpYWJsZSBET0MpLCB3aGljaCBhbGxvd3MgZG9jdW1lbnRhdGlvbiBib3RoCisrICAgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3B0aW9uczsgdGhlIHR3byBwYXJ0cyBvZiBET0MgYXJlCisrICAgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwtdGFiIGNoYXJhY3RlciAoJ1x2Jywgb3IgJ1wwMTMnKS4gIEJ5CisrICAgY29udmVudGlvbiwgdGhlIGRvY3VtZW50YXRpb24gYmVmb3JlIHRoZSBvcHRpb25zIGlzIGp1c3QgYQorKyAgIHNob3J0IHN0cmluZyBzYXlpbmcgd2hhdCB0aGUgcHJvZ3JhbSBkb2VzLCBhbmQgdGhhdCBhZnRlcndhcmRzCisrICAgaXMgbG9uZ2VyLCBkZXNjcmliaW5nIHRoZSBiZWhhdmlvciBpbiBtb3JlIGRldGFpbC4gIEFsbAorKyAgIGRvY3VtZW50YXRpb24gc3RyaW5ncyBhcmUgYXV0b21hdGljYWxseSBmaWxsZWQgZm9yIG91dHB1dCwKKysgICBhbHRob3VnaCBuZXdsaW5lcyBtYXkgYmUgaW5jbHVkZWQgdG8gZm9yY2UgYSBsaW5lIGJyZWFrIGF0IGEKKysgICBwYXJ0aWN1bGFyIHBvaW50LiAgQWxsIGRvY3VtZW50YXRpb24gc3RyaW5ncyBhcmUgYWxzbyBwYXNzZWQgdG8KKysgICB0aGUgYGdldHRleHQnIGZ1bmN0aW9uLCBmb3IgcG9zc2libGUgdHJhbnNsYXRpb24gaW50byB0aGUKKysgICBjdXJyZW50IGxvY2FsZS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXg0IDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAcHJlcC5haS5taXQuZWR1PiI7CisrCisrLyogUHJvZ3JhbSBkb2N1bWVudGF0aW9uLiAgKi8KKytzdGF0aWMgY2hhciBkb2NbXSA9CisrICAiQXJncCBleGFtcGxlICM0IC0tIGEgcHJvZ3JhbSB3aXRoIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWRcCisrb3B0aW9uc1wKKytcdlRoaXMgcGFydCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBjb21lcyAqYWZ0ZXIqIHRoZSBvcHRpb25zO1wKKysgbm90ZSB0aGF0IHRoZSB0ZXh0IGlzIGF1dG9tYXRpY2FsbHkgZmlsbGVkLCBidXQgaXQncyBwb3NzaWJsZVwKKysgdG8gZm9yY2UgYSBsaW5lLWJyZWFrLCBlLmcuXG48LS0gaGVyZS4iOworKworKy8qIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50cyB3ZSBhY2NlcHQuICAqLworK3N0YXRpYyBjaGFyIGFyZ3NfZG9jW10gPSAiQVJHMSBbU1RSSU5HLi4uXSI7CisrCisrLyogS2V5cyBmb3Igb3B0aW9ucyB3aXRob3V0IHNob3J0LW9wdGlvbnMuICAqLworKyNkZWZpbmUgT1BUX0FCT1JUICAxICAgICAgICAgICAvKiAtLWFib3J0ICovCisrCisrLyogVGhlIG9wdGlvbnMgd2UgdW5kZXJzdGFuZC4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPSB7CisrICB7InZlcmJvc2UiLCAgJ3YnLCAwLCAgICAgICAwLCAiUHJvZHVjZSB2ZXJib3NlIG91dHB1dCIgfSwKKysgIHsicXVpZXQiLCAgICAncScsIDAsICAgICAgIDAsICJEb24ndCBwcm9kdWNlIGFueSBvdXRwdXQiIH0sCisrICB7InNpbGVudCIsICAgJ3MnLCAwLCAgICAgICBPUFRJT05fQUxJQVMgfSwKKysgIHsib3V0cHV0IiwgICAnbycsICJGSUxFIiwgIDAsCisrICAgIk91dHB1dCB0byBGSUxFIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3V0cHV0IiB9LAorKworKyAgezAsMCwwLDAsICJUaGUgZm9sbG93aW5nIG9wdGlvbnMgc2hvdWxkIGJlIGdyb3VwZWQgdG9nZXRoZXI6IiB9LAorKyAgeyJyZXBlYXQiLCAgICdyJywgIkNPVU5UIiwgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAiUmVwZWF0IHRoZSBvdXRwdXQgQ09VTlQgKGRlZmF1bHQgMTApIHRpbWVzIn0sCisrICB7ImFib3J0IiwgICAgT1BUX0FCT1JULCAwLCAwLCAiQWJvcnQgYmVmb3JlIHNob3dpbmcgYW55IG91dHB1dCJ9LAorKworKyAgeyAwIH0KKyt9OworKworKy8qIFVzZWQgYnkgQGNvZGV7bWFpbn0gdG8gY29tbXVuaWNhdGUgd2l0aCBAY29kZXtwYXJzZV9vcHR9LiAgKi8KKytzdHJ1Y3QgYXJndW1lbnRzCisreworKyAgY2hhciAqYXJnMTsgICAgICAgICAgICAgICAgICAvKiBAdmFye2FyZzF9ICovCisrICBjaGFyICoqc3RyaW5nczsgICAgICAgICAgICAgIC8qIFtAdmFye3N0cmluZ31AZG90c3t9XSAqLworKyAgaW50IHNpbGVudCwgdmVyYm9zZSwgYWJvcnQ7ICAvKiBAc2FtcHstc30sIEBzYW1wey12fSwgQHNhbXB7LS1hYm9ydH0gKi8KKysgIGNoYXIgKm91dHB1dF9maWxlOyAgICAgICAgICAgLyogQHZhcntmaWxlfSBhcmcgdG8gQHNhbXB7LS1vdXRwdXR9ICovCisrICBpbnQgcmVwZWF0X2NvdW50OyAgICAgICAgICAgIC8qIEB2YXJ7Y291bnR9IGFyZyB0byBAc2FtcHstLXJlcGVhdH0gKi8KKyt9OworKworKy8qIFBhcnNlIGEgc2luZ2xlIG9wdGlvbi4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIC8qIEdldCB0aGUgQGNvZGV7aW5wdXR9IGFyZ3VtZW50IGZyb20gQGNvZGV7YXJncF9wYXJzZX0sIHdoaWNoIHdlCisrICAgICBrbm93IGlzIGEgcG9pbnRlciB0byBvdXIgYXJndW1lbnRzIHN0cnVjdHVyZS4gICovCisrICBzdHJ1Y3QgYXJndW1lbnRzICphcmd1bWVudHMgPSBzdGF0ZS0+aW5wdXQ7CisrCisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdxJzogY2FzZSAncyc6CisrICAgICAgYXJndW1lbnRzLT5zaWxlbnQgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICd2JzoKKysgICAgICBhcmd1bWVudHMtPnZlcmJvc2UgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdvJzoKKysgICAgICBhcmd1bWVudHMtPm91dHB1dF9maWxlID0gYXJnOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdyJzoKKysgICAgICBhcmd1bWVudHMtPnJlcGVhdF9jb3VudCA9IGFyZyA/IGF0b2kgKGFyZykgOiAxMDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRfQUJPUlQ6CisrICAgICAgYXJndW1lbnRzLT5hYm9ydCA9IDE7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfTk9fQVJHUzoKKysgICAgICBhcmdwX3VzYWdlIChzdGF0ZSk7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfQVJHOgorKyAgICAgIC8qIEhlcmUgd2Uga25vdyB0aGF0IEBjb2Rle3N0YXRlLT5hcmdfbnVtID09IDB9LCBzaW5jZSB3ZQorKyAgICAgICAgZm9yY2UgYXJndW1lbnQgcGFyc2luZyB0byBlbmQgYmVmb3JlIGFueSBtb3JlIGFyZ3VtZW50cyBjYW4KKysgICAgICAgIGdldCBoZXJlLiAgKi8KKysgICAgICBhcmd1bWVudHMtPmFyZzEgPSBhcmc7CisrCisrICAgICAgLyogTm93IHdlIGNvbnN1bWUgYWxsIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMuCisrICAgICAgICBAY29kZXtzdGF0ZS0+bmV4dH0gaXMgdGhlIGluZGV4IGluIEBjb2Rle3N0YXRlLT5hcmd2fSBvZiB0aGUKKysgICAgICAgIG5leHQgYXJndW1lbnQgdG8gYmUgcGFyc2VkLCB3aGljaCBpcyB0aGUgZmlyc3QgQHZhcntzdHJpbmd9CisrICAgICAgICB3ZSdyZSBpbnRlcmVzdGVkIGluLCBzbyB3ZSBjYW4ganVzdCB1c2UKKysgICAgICAgIEBjb2RleyZzdGF0ZS0+YXJndltzdGF0ZS0+bmV4dF19IGFzIHRoZSB2YWx1ZSBmb3IKKysgICAgICAgIGFyZ3VtZW50cy0+c3RyaW5ncy4KKysKKysgICAgICAgIEBlbXBoe0luIGFkZGl0aW9ufSwgYnkgc2V0dGluZyBAY29kZXtzdGF0ZS0+bmV4dH0gdG8gdGhlIGVuZAorKyAgICAgICAgb2YgdGhlIGFyZ3VtZW50cywgd2UgY2FuIGZvcmNlIGFyZ3AgdG8gc3RvcCBwYXJzaW5nIGhlcmUgYW5kCisrICAgICAgICByZXR1cm4uICAqLworKyAgICAgIGFyZ3VtZW50cy0+c3RyaW5ncyA9ICZzdGF0ZS0+YXJndltzdGF0ZS0+bmV4dF07CisrICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+YXJnYzsKKysKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91ciBhcmdwIHBhcnNlci4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPSB7IG9wdGlvbnMsIHBhcnNlX29wdCwgYXJnc19kb2MsIGRvYyB9OworKworK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgaW50IGksIGo7CisrICBzdHJ1Y3QgYXJndW1lbnRzIGFyZ3VtZW50czsKKysKKysgIC8qIERlZmF1bHQgdmFsdWVzLiAgKi8KKysgIGFyZ3VtZW50cy5zaWxlbnQgPSAwOworKyAgYXJndW1lbnRzLnZlcmJvc2UgPSAwOworKyAgYXJndW1lbnRzLm91dHB1dF9maWxlID0gIi0iOworKyAgYXJndW1lbnRzLnJlcGVhdF9jb3VudCA9IDE7CisrICBhcmd1bWVudHMuYWJvcnQgPSAwOworKworKyAgLyogUGFyc2Ugb3VyIGFyZ3VtZW50czsgZXZlcnkgb3B0aW9uIHNlZW4gYnkgQGNvZGV7cGFyc2Vfb3B0fSB3aWxsIGJlCisrICAgICByZWZsZWN0ZWQgaW4gQGNvZGV7YXJndW1lbnRzfS4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJmFyZ3VtZW50cyk7CisrCisrICBpZiAoYXJndW1lbnRzLmFib3J0KQorKyAgICBlcnJvciAoMTAsIDAsICJBQk9SVEVEIik7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLnJlcGVhdF9jb3VudDsgaSsrKQorKyAgICB7CisrICAgICAgcHJpbnRmICgiQVJHMSA9ICVzXG4iLCBhcmd1bWVudHMuYXJnMSk7CisrICAgICAgcHJpbnRmICgiU1RSSU5HUyA9ICIpOworKyAgICAgIGZvciAoaiA9IDA7IGFyZ3VtZW50cy5zdHJpbmdzW2pdOyBqKyspCisrICAgICAgIHByaW50ZiAoaiA9PSAwID8gIiVzIiA6ICIsICVzIiwgYXJndW1lbnRzLnN0cmluZ3Nbal0pOworKyAgICAgIHByaW50ZiAoIlxuIik7CisrICAgICAgcHJpbnRmICgiT1VUUFVUX0ZJTEUgPSAlc1xuVkVSQk9TRSA9ICVzXG5TSUxFTlQgPSAlc1xuIiwKKysgICAgICAgICAgICAgYXJndW1lbnRzLm91dHB1dF9maWxlLAorKyAgICAgICAgICAgICBhcmd1bWVudHMudmVyYm9zZSA/ICJ5ZXMiIDogIm5vIiwKKysgICAgICAgICAgICAgYXJndW1lbnRzLnNpbGVudCA/ICJ5ZXMiIDogIm5vIik7CisrICAgIH0KKysKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC10ZXN0LmMgYi90ZXN0L2FyZ3AvYXJncC10ZXN0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iM2Q1NzNiCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC10ZXN0LmMKK0BAIC0wLDAgKzEsMjA5IEBACisrLyogVGVzdCBwcm9ncmFtIGZvciBhcmdwIGFyZ3VtZW50IHBhcnNlcgorKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0gImFyZ3AtdGVzdCAxLjAiOworKworK3N0cnVjdCBhcmdwX29wdGlvbiBzdWJfb3B0aW9uc1tdID0KKyt7CisrICB7InN1Ym9wdDEiLCAgICAgICAncycsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gMSJ9LAorKyAgeyJzdWJvcHQyIiwgICAgICAgJ1MnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDIifSwKKysKKysgIHsgMCwgMCwgMCwgMCwgIlNvbWUgbW9yZSBuZXN0ZWQgb3B0aW9uczoiLCAxMH0sCisrICB7InN1Ym9wdDMiLCAgICAgICAncCcsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gMyJ9LAorKworKyAgeyJzdWJvcHQ0IiwgICAgICAgJ3EnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDQiLCAxfSwKKysKKysgIHswfQorK307CisrCisrc3RhdGljIGNvbnN0IGNoYXIgc3ViX2FyZ3NfZG9jW10gPSAiU1RSSU5HLi4uXG4tIjsKKytzdGF0aWMgY29uc3QgY2hhciBzdWJfZG9jW10gPSAiXHZUaGlzIGlzIHRoZSBkb2Mgc3RyaW5nIGZyb20gdGhlIHN1Yi1hcmctcGFyc2VyLiI7CisrCisrc3RhdGljIGVycm9yX3QKKytzdWJfcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlIEFSR1BfS0VZX05PX0FSR1M6CisrICAgICAgcHJpbnRmICgiTk8gU1VCIEFSR1NcbiIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBwcmludGYgKCJTVUIgQVJHOiAlc1xuIiwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAncycgOiBjYXNlICdTJzogY2FzZSAncCc6IGNhc2UgJ3EnOgorKyAgICAgIHByaW50ZiAoIlNVQiBLRVkgJWNcbiIsIGtleSk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY2hhciAqCisrc3ViX2hlbHBfZmlsdGVyIChpbnQga2V5LCBjb25zdCBjaGFyICp0ZXh0LCB2b2lkICppbnB1dCkKKyt7CisrICBpZiAoa2V5ID09IEFSR1BfS0VZX0hFTFBfRVhUUkEpCisrICAgIHJldHVybiBzdHJkdXAgKCJUaGlzIGlzIHNvbWUgZXh0cmEgdGV4dCBmcm9tIHRoZSBzdWIgcGFyc2VyIChub3RlIHRoYXQgaXQgXAorK2lzIHByZWNlZGVkIGJ5IGEgYmxhbmsgbGluZSkuIik7CisrICBlbHNlCisrICAgIHJldHVybiAoY2hhciAqKXRleHQ7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBzdWJfYXJncCA9IHsKKysgIHN1Yl9vcHRpb25zLCBzdWJfcGFyc2Vfb3B0LCBzdWJfYXJnc19kb2MsIHN1Yl9kb2MsIDAsIHN1Yl9oZWxwX2ZpbHRlcgorK307CisrCisrLyogU3RydWN0dXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgcGFyc2luZyBmdW5jdGlvbnMuICAqLworK3N0cnVjdCBwYXJhbXMKKyt7CisrICB1bnNpZ25lZCBmb29ubHk7ICAgICAgICAgICAgIC8qIFZhbHVlIHBhcnNlZCBmb3IgZm9vbmx5LiAgKi8KKysgIHVuc2lnbmVkIGZvb25seV9kZWZhdWx0OyAgICAgLyogRGVmYXVsdCB2YWx1ZSBmb3IgaXQuICAqLworK307CisrCisrI2RlZmluZSBPUFRfUEdSUCAxCisrI2RlZmluZSBPUFRfU0VTUyAyCisrCisrc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CisreworKyAgeyJwaWQiLCAgICAgICAncCcsICAgICAiUElEIiwgMCwgIkxpc3QgdGhlIHByb2Nlc3MgUElEIn0sCisrICB7InBncnAiLCAgICAgIE9QVF9QR1JQLCJQR1JQIiwwLCAiTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUCJ9LAorKyAgeyJuby1wYXJlbnQiLCAnUCcsICAgIDAsICAgICAwLCAiSW5jbHVkZSBwcm9jZXNzZXMgd2l0aG91dCBwYXJlbnRzIn0sCisrICB7MCwgICAgICAgICAgICd4JywgICAgIDAsICAgICBPUFRJT05fQUxJQVN9LAorKyAgeyJhbGwtZmllbGRzIiwnUScsICAgICAwLCAgICAgMCwgIkRvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgdGhlcmUncyBzb21lIHJlYXNvbiBwcyBjYW4ndCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwcmludCBhIGZpZWxkIGZvciBhbnkgcHJvY2VzcywgaXQncyIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZW1vdmVkIGZyb20gdGhlIG91dHB1dCBlbnRpcmVseSkiIH0sCisrICB7InJldmVyc2UiLCAgICdyJywgICAgMCwgICAgICAwLCAiUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQifSwKKysgIHsiZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24iLCAwLCAwLCBPUFRJT05fQUxJQVN9LAorKyAgeyJzZXNzaW9uIiwgIE9QVF9TRVNTLCJTSUQiLCAgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZCB0aGUgcHJvY2Vzc2VzIGZyb20gdGhlIHNlc3Npb24iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgU0lEICh3aGljaCBkZWZhdWx0cyB0byB0aGUgc2lkIG9mIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoZSBjdXJyZW50IHByb2Nlc3MpIiB9LAorKworKyAgezAsMCwwLDAsICJIZXJlIGFyZSBzb21lIG1vcmUgb3B0aW9uczoifSwKKysgIHsiZm9vbmx5IiwgJ2YnLCAiWk9UIiwgT1BUSU9OX0FSR19PUFRJT05BTCwgIkdsb3JrIGEgZm9vbmx5In0sCisrICB7InphemEiLCAneicsIDAsIDAsICJTbml0IGEgemFyIn0sCisrCisrICB7MH0KKyt9OworKworK3N0YXRpYyBjb25zdCBjaGFyIGFyZ3NfZG9jW10gPSAiU1RSSU5HIjsKKytzdGF0aWMgY29uc3QgY2hhciBkb2NbXSA9ICJUZXN0IHByb2dyYW0gZm9yIGFyZ3AuIgorKyAiXHZUaGlzIGRvYyBzdHJpbmcgY29tZXMgYWZ0ZXIgdGhlIG9wdGlvbnMuIgorKyAiXG5IZXkhICBTb21lIG1hbnVhbCBmb3JtYXR0aW5nISIKKysgIlxuVGhlIGN1cnJlbnQgdGltZSBpczogJXMiOworKworK3N0YXRpYyB2b2lkCisrcG9wdCAoaW50IGtleSwgY2hhciAqYXJnKQorK3sKKysgIGNoYXIgYnVmWzEwXTsKKysgIGlmIChpc3ByaW50IChrZXkpKQorKyAgICBzcHJpbnRmIChidWYsICIlYyIsIGtleSk7CisrICBlbHNlCisrICAgIHNwcmludGYgKGJ1ZiwgIiVkIiwga2V5KTsKKysgIGlmIChhcmcpCisrICAgIHByaW50ZiAoIktFWSAlczogJXNcbiIsIGJ1ZiwgYXJnKTsKKysgIGVsc2UKKysgICAgcHJpbnRmICgiS0VZICVzXG4iLCBidWYpOworK30KKysKKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3RydWN0IHBhcmFtcyAqcGFyYW1zID0gc3RhdGUtPmlucHV0OworKworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSBBUkdQX0tFWV9OT19BUkdTOgorKyAgICAgIHByaW50ZiAoIk5PIEFSR1NcbiIpOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPiAwKQorKyAgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsgLyogTGVhdmUgaXQgZm9yIHRoZSBzdWItYXJnIHBhcnNlci4gICovCisrICAgICAgcHJpbnRmICgiQVJHOiAlc1xuIiwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnZic6CisrICAgICAgaWYgKGFyZykKKysgICAgICAgcGFyYW1zLT5mb29ubHkgPSBhdG9pIChhcmcpOworKyAgICAgIGVsc2UKKysgICAgICAgcGFyYW1zLT5mb29ubHkgPSBwYXJhbXMtPmZvb25seV9kZWZhdWx0OworKyAgICAgIHBvcHQgKGtleSwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlIE9QVF9QR1JQOiBjYXNlICd4JzogY2FzZSAnUSc6CisrICAgIGNhc2UgJ3InOiBjYXNlIE9QVF9TRVNTOiBjYXNlICd6JzoKKysgICAgICBwb3B0IChrZXksIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY2hhciAqCisraGVscF9maWx0ZXIgKGludCBrZXksIGNvbnN0IGNoYXIgKnRleHQsIHZvaWQgKmlucHV0KQorK3sKKysgIGNoYXIgKm5ld190ZXh0OworKyAgc3RydWN0IHBhcmFtcyAqcGFyYW1zID0gaW5wdXQ7CisrCisrICBpZiAoa2V5ID09IEFSR1BfS0VZX0hFTFBfUE9TVF9ET0MgJiYgdGV4dCkKKysgICAgeworKyAgICAgIHRpbWVfdCBub3cgPSB0aW1lICgwKTsKKysgICAgICBhc3ByaW50ZiAoJm5ld190ZXh0LCB0ZXh0LCBjdGltZSAoJm5vdykpOworKyAgICB9CisrICBlbHNlIGlmIChrZXkgPT0gJ2YnKQorKyAgICAvKiBTaG93IHRoZSBkZWZhdWx0IGZvciB0aGUgLS1mb29ubHkgb3B0aW9uLiAgKi8KKysgICAgYXNwcmludGYgKCZuZXdfdGV4dCwgIiVzIChaT1QgZGVmYXVsdHMgdG8gJXgpIiwKKysgICAgICAgICAgICAgdGV4dCwgcGFyYW1zLT5mb29ubHlfZGVmYXVsdCk7CisrICBlbHNlCisrICAgIG5ld190ZXh0ID0gKGNoYXIgKil0ZXh0OworKworKyAgcmV0dXJuIG5ld190ZXh0OworK30KKysKKytzdGF0aWMgc3RydWN0IGFyZ3BfY2hpbGQgYXJncF9jaGlsZHJlbltdID0geyB7ICZzdWJfYXJncCB9LCB7IDAgfSB9OworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geworKyAgb3B0aW9ucywgcGFyc2Vfb3B0LCBhcmdzX2RvYywgZG9jLCBhcmdwX2NoaWxkcmVuLCBoZWxwX2ZpbHRlcgorK307CisrCisraW50CisrbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIHN0cnVjdCBwYXJhbXMgcGFyYW1zOworKyAgcGFyYW1zLmZvb25seSA9IDA7CisrICBwYXJhbXMuZm9vbmx5X2RlZmF1bHQgPSByYW5kb20gKCk7CisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJnBhcmFtcyk7CisrICBwcmludGYgKCJBZnRlciBwYXJzaW5nOiBmb29ubHkgPSAleFxuIiwgcGFyYW1zLmZvb25seSk7CisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jIGIvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTI4Y2Y0YgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCitAQCAtMCwwICsxLDI2IEBACisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIHRlc3Rfb3B0aW9uc1tdID0KKyt7CisrICB7IE5VTEwsICdhJywgTlVMTCwgT1BUSU9OX0RPQywgTlVMTCB9LAorKyAgeyBOVUxMLCAnYicsIE5VTEwsIE9QVElPTl9ET0MsIE5VTEwgfSwKKysgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgdGVzdF9hcmdwID0KKyt7CisrICB0ZXN0X29wdGlvbnMKKyt9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0IChpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgIGludCBpOworKyAgYXJncF9wYXJzZSAoJnRlc3RfYXJncCwgYXJnYywgYXJndiwgMCwgJmksIE5VTEwpOworKyAgcmV0dXJuIDA7CisrfQorKworKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0IChhcmdjLCBhcmd2KQorKyNpbmNsdWRlICIuLi90ZXN0LXNrZWxldG9uLmMiCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL3RzdC1hcmdwMS5jIGIvdGVzdC9hcmdwL3RzdC1hcmdwMS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODI3ZGFjYQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL3RzdC1hcmdwMS5jCitAQCAtMCwwICsxLDExOCBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlciBhdCByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysKKysKKysKKysjZGVmaW5lIE9QVF9UT19USFJFQUQgICAgICAgICAgMzAwCisrI2RlZmluZSBPUFRfVE9fUFJPQ0VTUyAgICAgICAgIDMwMQorKyNkZWZpbmUgT1BUX1NZTkNfU0lHTkFMICAgICAgICAgICAgICAgIDMwMgorKyNkZWZpbmUgT1BUX1NZTkNfSk9JTiAgICAgICAgICAzMDMKKysjZGVmaW5lIE9QVF9UT1BMRVZFTCAgICAgICAgICAgMzA0CisrCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiB0ZXN0X29wdGlvbnNbXSA9CisrICB7CisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytUaGlzIGlzIGEgdGVzdCBmb3IgdGhyZWFkcyBzbyB3ZSBhbGxvdyB0aGVyIHVzZXIgdG8gc2VsZWN0aW9uIHRoZSBudW1iZXIgb2YgXAorK3RocmVhZHMgd2hpY2ggYXJlIHVzZWQgYXQgYW55IG9uZSB0aW1lLiAgSW5kZXBlbmRlbnRseSB0aGUgdG90YWwgbnVtYmVyIG9mIFwKKytyb3VuZHMgY2FuIGJlIHNlbGVjdGVkLiAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRocmVhZHMgd2hpY2ggd2lsbCBoYXZlIFwKKytydW4gd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzOiIgfSwKKysgICAgeyAidGhyZWFkcyIsICd0JywgIk5VTUJFUiIsIDAsICJOdW1iZXIgb2YgdGhyZWFkcyB1c2VkIGF0IG9uY2UiIH0sCisrICAgIHsgInN0YXJ0cyIsICdzJywgIk5VTUJFUiIsIDAsICJUb3RhbCBudW1iZXIgb2Ygd29ya2luZyB0aHJlYWRzIiB9LAorKyAgICB7ICJ0b3BsZXZlbCIsIE9QVF9UT1BMRVZFTCwgIk5VTUJFUiIsIDAsCisrICAgICAgIk51bWJlciBvZiB0b3BsZXZlbCB0aHJlYWRzIHdoaWNoIHN0YXJ0IHRoZSBvdGhlciB0aHJlYWRzOyB0aGlzIFwKKytpbXBsaWVzIC0tc3luYy1qb2luIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrRWFjaCB0aHJlYWQgY2FuIGRvIG9uZSBvZiB0d28gdGhpbmdzOiBzbGVlcCBvciBkbyB3b3JrLiAgVGhlIGxhdHRlciBpcyAxMDAlIFwKKytDUFUgYm91bmQuICBUaGUgd29yayBsb2FkIGlzIHRoZSBwcm9iYWJpbGl0eSBhIHRocmVhZCBkb2VzIHdvcmsuICBBbGwgdmFsdWVzIFwKKytmcm9tIHplcm8gdG8gMTAwIChpbmNsdXNpdmUpIGFyZSB2YWxpZC4gIEhvdyBvZnRlbiBlYWNoIHRocmVhZCByZXBlYXRzIHRoaXMgXAorK2NhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2Ygcm91bmRzLiAgVGhlIHdvcmsgY29zdCBkZXRlcm1pbmVzIGhvdyBsb25nIFwKKytlYWNoIHdvcmsgc2Vzc2lvbiAobm90IHNsZWVwaW5nKSB0YWtlcy4gIElmIGl0IGlzIHplcm8gYSB0aHJlYWQgd291bGQgXAorK2VmZmVjdGl2ZWx5IG5vdGhpbmcuICBCeSBzZXR0aW5nIHRoZSBudW1iZXIgb2Ygcm91bmRzIHRvIHplcm8gdGhlIHRocmVhZCBcCisrZG9lcyBubyB3b3JrIGF0IGFsbCBhbmQgcHVyZSB0aHJlYWQgY3JlYXRpb24gdGltZXMgY2FuIGJlIG1lYXN1cmVkLiIgfSwKKysgICAgeyAid29ya2xvYWQiLCAndycsICJQRVJDRU5UIiwgMCwgIlBlcmNlbnRhZ2Ugb2YgdGltZSBzcGVudCB3b3JraW5nIiB9LAorKyAgICB7ICJ3b3JrY29zdCIsICdjJywgIk5VTUJFUiIsIDAsCisrICAgICAgIkZhY3RvciBpbiB0aGUgY29zdCBvZiBlYWNoIHJvdW5kIG9mIHdvcmtpbmciIH0sCisrICAgIHsgInJvdW5kcyIsICdyJywgIk5VTUJFUiIsIDAsICJOdW1iZXIgb2Ygcm91bmRzIGVhY2ggdGhyZWFkIHJ1bnMiIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IG1ldGhvZHMgaG93IHRocmVhZCBjcmVhdGlvbiBjYW4gYmUgXAorK3N5bmNocm9uaXplZC4gIFN5bmNocm9uaXphdGlvbiBpcyBuZWNlc3Nhcnkgc2luY2UgdGhlIG51bWJlciBvZiBjb25jdXJyZW50bHkgXAorK3J1bm5pbmcgdGhyZWFkcyBpcyBsaW1pdGVkLiIgfSwKKysgICAgeyAic3luYy1zaWduYWwiLCBPUFRfU1lOQ19TSUdOQUwsIE5VTEwsIDAsCisrICAgICAgIlN5bmNocm9uaXplIHVzaW5nIGEgc2lnbmFsIChkZWZhdWx0KSIgfSwKKysgICAgeyAic3luYy1qb2luIiwgT1BUX1NZTkNfSk9JTiwgTlVMTCwgMCwgIlN5bmNocm9uaXplIHVzaW5nIHB0aHJlYWRfam9pbiIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiXAorK09uZSBwYXJhbWV0ZXIgZm9yIGVhY2ggdGhyZWFkcyBleGVjdXRpb24gaXMgdGhlIHNpemUgb2YgdGhlIHN0YWNrLiAgSWYgdGhpcyBcCisrcGFyYW1ldGVyIGlzIG5vdCB1c2VkIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHN0YWNrIHNpemUgaXMgdXNlZC4gIElmIG1hbnkgXAorK3RocmVhZHMgYXJlIHVzZWQgdGhlIHN0YWNrIHNpemUgc2hvdWxkIGJlIGNob3NlbiBxdWl0ZSBzbWFsbC4iIH0sCisrICAgIHsgInN0YWNrc2l6ZSIsICdTJywgIkJZVEVTIiwgMCwgIlNpemUgb2YgdGhyZWFkcyBzdGFjayIgfSwKKysgICAgeyAiZ3VhcmRzaXplIiwgJ2cnLCAiQllURVMiLCAwLAorKyAgICAgICJTaXplIG9mIHN0YWNrIGd1YXJkIGFyZWE7IG11c3QgZml0IGludG8gdGhlIHN0YWNrIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJTaWduYWwgb3B0aW9uczoiIH0sCisrICAgIHsgInRvLXRocmVhZCIsIE9QVF9UT19USFJFQUQsIE5VTEwsIDAsICJTZW5kIHNpZ25hbCB0byBtYWluIHRocmVhZCIgfSwKKysgICAgeyAidG8tcHJvY2VzcyIsIE9QVF9UT19QUk9DRVNTLCBOVUxMLCAwLAorKyAgICAgICJTZW5kIHNpZ25hbCB0byBwcm9jZXNzIChkZWZhdWx0KSIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiQWRtaW5pc3RyYXRpdmUgb3B0aW9uczoiIH0sCisrICAgIHsgInByb2dyZXNzIiwgJ3AnLCBOVUxMLCAwLCAiU2hvdyBzaWducyBvZiBwcm9ncmVzcyIgfSwKKysgICAgeyAidGltaW5nIiwgJ1QnLCBOVUxMLCAwLAorKyAgICAgICJNZWFzdXJlIHRpbWUgZnJvbSBzdGFydHVwIHRvIHRoZSBsYXN0IHRocmVhZCBmaW5pc2hpbmciIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworKy8qIFByb3RvdHlwZSBmb3Igb3B0aW9uIGhhbmRsZXIuICAqLworK3N0YXRpYyBlcnJvcl90IHBhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworKworKy8qIERhdGEgc3RydWN0dXJlIHRvIGNvbW11bmljYXRlIHdpdGggYXJncCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0KKyt7CisrICB0ZXN0X29wdGlvbnMsIHBhcnNlX29wdAorK307CisrCisrCisrc3RhdGljIGludAorK2RvX3Rlc3QgKHZvaWQpCisreworKyAgaW50IGFyZ2MgPSAyOworKyAgY2hhciAqYXJndlszXSA9IHsgKGNoYXIgKikgInRzdC1hcmdwMSIsIChjaGFyICopICItLWhlbHAiLCBOVUxMIH07CisrICBpbnQgcmVtYWluaW5nOworKworKyAgLyogUGFyc2UgYW5kIHByb2Nlc3MgYXJndW1lbnRzLiAgKi8KKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAmcmVtYWluaW5nLCBOVUxMKTsKKysKKysgIHJldHVybiAwOworK30KKysKKysKKysvKiBIYW5kbGUgcHJvZ3JhbSBhcmd1bWVudHMuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKyt9CisrCisrI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKCkKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC90c3QtYXJncDIuYyBiL3Rlc3QvYXJncC90c3QtYXJncDIuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcwNWNkY2EKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC90c3QtYXJncDIuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgSmFrdWIgSmVsaW5layA8amFrdWIgYXQgcmVkaGF0LmNvbT4sIDIwMDcuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQxW10gPQorKyAgeworKyAgICB7ICJvcHQxIiwgJzEnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiAxIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDJbXSA9CisrICB7CisrICAgIHsgIm9wdDIiLCAnMicsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDIiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0M1tdID0KKysgIHsKKysgICAgeyAib3B0MyIsICczJywgIk5VTUJFUiIsIDAsICJPcHRpb24gMyIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQ0W10gPQorKyAgeworKyAgICB7ICJvcHQ0IiwgJzQnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiA0IiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDVbXSA9CisrICB7CisrICAgIHsgIm9wdDUiLCAnNScsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDUiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwNSA9CisrICB7CisrICAgIG9wdDUsIE5VTEwsICJhcmdzIGRvYzUiLCAiZG9jNSIsIE5VTEwsIE5VTEwsIE5VTEwKKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3A0ID0KKysgIHsKKysgICAgb3B0NCwgTlVMTCwgImFyZ3MgZG9jNCIsICJkb2M0IiwgTlVMTCwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDMgPQorKyAgeworKyAgICBvcHQzLCBOVUxMLCAiYXJncyBkb2MzIiwgImRvYzMiLCBOVUxMLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncF9jaGlsZCBjaGlsZHJlbjJbXSA9CisrICB7CisrICAgIHsgJmFyZ3A0LCAwLCAiY2hpbGQzIiwgMyB9LAorKyAgICB7ICZhcmdwNSwgMCwgImNoaWxkNCIsIDQgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwIH0KKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AyID0KKysgIHsKKysgICAgb3B0MiwgTlVMTCwgImFyZ3MgZG9jMiIsICJkb2MyIiwgY2hpbGRyZW4yLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncF9jaGlsZCBjaGlsZHJlbjFbXSA9CisrICB7CisrICAgIHsgJmFyZ3AyLCAwLCAiY2hpbGQxIiwgMSB9LAorKyAgICB7ICZhcmdwMywgMCwgImNoaWxkMiIsIDIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwIH0KKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AxID0KKysgIHsKKysgICAgb3B0MSwgTlVMTCwgImFyZ3MgZG9jMSIsICJkb2MxIiwgY2hpbGRyZW4xLCBOVUxMLCBOVUxMCisrICB9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0ICh2b2lkKQorK3sKKysgIGFyZ3BfaGVscCAoJmFyZ3AxLCBzdGRvdXQsIEFSR1BfSEVMUF9MT05HLCAoY2hhciAqKSAidHN0LWFyZ3AyIik7CisrICByZXR1cm4gMDsKKyt9CisrCisrCisrI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKCkKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5ZTEzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDMxNzg1YzU0NGFiZThiMjE1ZGJiMjI2NGZiMTFlZTcwNTE1MTU3OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1ODo1OSAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvN10gRG9udCBzdXBwb3J0IGxvY2FsaXNlZCBvcHRpbWl6YXRpb25zIHRoaXMgaGVscHMgdG8gaGF2ZSBhCisgZ2xvYmFsIC1PIGxldmVsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMgYi9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworaW5kZXggMDQxODdmNi4uZjU2ZjZjNSAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jCisrKysgYi9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworQEAgLTI4LDcgKzI4LDkgQEAKKyAgKiBlcnJvcjogY2FuJ3QgZmluZCBhIHJlZ2lzdGVyIGluIGNsYXNzIOKAmEdFTkVSQUxfUkVHU+KAmSB3aGlsZSByZWxvYWRpbmcg4oCYYXNt4oCZCisgICovCisgaW50CisrI2lmbmRlZiAgX19PUFRJTUlaRV9fCisgYXR0cmlidXRlX29wdGltaXplKCJPcyIpCisrI2VuZGlmCisgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKAorICAgICAgcHRocmVhZF9tdXRleF90ICptdXRleCwKKyAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOWIyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4ODNkZWJjMjJlMzBhOTQ3ZmU1ODU4Y2MwN2VlNWFlYmQzZDA3YTJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTk6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA1LzddIEFsd2F5cyB1c2UgLU8yIGZvciBjb21waWxpbmcgZm9yay5jCisKK1doZW4gY29tcGlsaW5nIGluIHRodW1iIG1vZGUgZm9yIGFybSB3aXRoIC1PcyBnY2MgZ2l2ZXMgdXAgc2luY2UgaXQgY2FuCitub3QgZmluZCByZWdpc3RlcnMgdG8gc3BpbGwuIFNvIHdlIHVzZSAtTzIgb3B0aW9uIGZvciBjb21waWxpbmcgZm9yay5jCitJdCBtYXkgYmUgYWRkcmVzc2FibGUgaW4gZ2NjLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaCB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoIGIvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCitpbmRleCAwZWEwYjI5Li4wNzY3ZTljIDEwMDY0NAorLS0tIGEvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCisrKysgYi9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2gKK0BAIC0yMSwzICsyMSw5IEBAIEFTRkxBR1MtcHQtdmZvcmsuUyA9IC1tYXJtCisgQ0ZMQUdTLU9NSVQtcHQtdmZvcmsuUyA9IC1tdGh1bWIKKyBBU0ZMQUdTLXZmb3JrLlMgPSAtbWFybQorIENGTEFHUy1PTUlULXZmb3JrLlMgPSAtbXRodW1iCisrCisrIyBGb3IgYXJtIGZvcmsuYyBkb2VzIG5vdCBjb21waWxlIHdpdGggLU9zIHdoZW4gY29tcGlsaW5nCisrIyBpbiB0aHVtYjEgbW9kZQorK2lmZXEgKCQoQ09NUElMRV9JTl9USFVNQl9NT0RFKSx5KQorK0NGTEFHUy1mb3JrLmMgPSAtTzIKKytlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBkODczNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDIzMyBAQAorRnJvbSBiNDBjMTI5ZWQyZDUzYjY5NDYzODgzYTU0MjJkZDRhMDEyYTM5OGY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBGcmksIDMgQXByIDIwMTUgMDU6MDI6MjcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2LzddIGxkc286IGxpbWl0ZWQgc3VwcG9ydCBmb3IgJE9SSUdJTiBpbiBycGF0aAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitEZXJpdmVkIGZyb206CitodHRwOi8vbGlzdHMuYnVzeWJveC5uZXQvcGlwZXJtYWlsL3VjbGliYy8yMDExLU1hcmNoLzA0NTAwMy5odG1sCisKK0hvd2V2ZXIsIHRoZSBhYm92ZSBwYXRjaCBpbnRyb2R1Y2VkICdfZGxfc3RyY2hyJyBpbiBsZHNvL2xkc28vZGwtZWxmLmMsCithbmQgY2F1c2VkIHRoZSBmb2xsb3dpbmcgdW5kZWZpbmVkIHJlZmVyZW5jaW5nIGNvbXBpbGluZyBlcnJvcjoKKworICB8IC4uLi9saWJkbC5hKGxpYmRsLm9zKTogSW4gZnVuY3Rpb24gYHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeSc6CisgIHwgLi4uL2RsLWVsZi5jOjE1NjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX2RsX3N0cmNocicKKyAgfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVGhpcyBwcm9ibGVtIHdvdWxkIGJlIHJlcHJvZHVjZWQgdGhyb3VnaCBjb21waWxpbmcgZ2RiIGluIHN0YXRpYyBtb2RlCit1c2luZyB1Y2xpYmMuCisKK1NvLCBhZGQgdGhlIGRlZmluaXRpb24gb2YgJ19kbF9zdHJjaHInIHRvIGZpeCBpdC4gVGhlICdfZGxfc3Ryc3RyJyBpcworYWRkZWQgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogVGltbyBUZXLDpHMgPHRpbW8udGVyYXMgYXQgaWtpLmZpPgorU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxkc28vaW5jbHVkZS9kbC1zdHJpbmcuaCB8ICAyICsrCisgbGRzby9sZHNvL2RsLWVsZi5jICAgICAgIHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbGRzby9sZHNvL2xkc28uYyAgICAgICAgIHwgMTggKysrKysrKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oIGIvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCitpbmRleCBhYWNhZDEwLi4xNGFlNjE3IDEwMDY0NAorLS0tIGEvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCisrKysgYi9sZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmgKK0BAIC0yMDQsNyArMjA0LDkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBjaGFyICogX2RsX2dldF9sYXN0X3BhdGhfY29tcG9uZW50KGNoYXIgKnBhdGgpCisgIyBkZWZpbmUgX2RsX3N0cmNhdCBzdHJjYXQKKyAjIGRlZmluZSBfZGxfc3RyY3B5IHN0cmNweQorICMgZGVmaW5lIF9kbF9zdHJjbXAgc3RyY21wCisrIyBkZWZpbmUgX2RsX3N0cmNociBzdHJjaHIKKyAjIGRlZmluZSBfZGxfc3RycmNociBzdHJyY2hyCisrIyBkZWZpbmUgX2RsX3N0cnN0ciBzdHJzdHIKKyAjIGRlZmluZSBfZGxfbWVtY3B5IG1lbWNweQorICMgZGVmaW5lIF9kbF9tZW1jbXAgbWVtY21wCisgIyBkZWZpbmUgX2RsX21lbXNldCBtZW1zZXQKK2RpZmYgLS1naXQgYS9sZHNvL2xkc28vZGwtZWxmLmMgYi9sZHNvL2xkc28vZGwtZWxmLmMKK2luZGV4IDU2MzE5MDUuLjZhYjdhZmUgMTAwNjQ0CistLS0gYS9sZHNvL2xkc28vZGwtZWxmLmMKKysrKyBiL2xkc28vbGRzby9kbC1lbGYuYworQEAgLTEzMyw1NiArMTMzLDYwIEBAIF9kbF9wcm90ZWN0X3JlbHJvIChzdHJ1Y3QgZWxmX3Jlc29sdmUgKmwpCisgICogaW4gdUNsaWJjL2xkc28vdXRpbC9sZGQuYyAqLworIHN0YXRpYyBzdHJ1Y3QgZWxmX3Jlc29sdmUgKgorIHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCByZmxhZ3MsIGNvbnN0IGNoYXIgKnBhdGhfbGlzdCwKKy0Jc3RydWN0IGR5bl9lbGYgKipycG50KQorKwlzdHJ1Y3QgZHluX2VsZiAqKnJwbnQsIGNvbnN0IGNoYXIqIG9yaWdpbikKKyB7CistCWNoYXIgKnBhdGgsICpwYXRoX24sICpteWxpYm5hbWU7CisrCWNoYXIgKm15bGlibmFtZTsKKysJY29uc3QgY2hhciAqcCwgKnBuOworIAlzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQ7CistCWludCBkb25lOworKwlpbnQgcGxlbjsKKyAKKyAJaWYgKHBhdGhfbGlzdD09TlVMTCkKKyAJCXJldHVybiBOVUxMOworIAorLQkvKiBXZSBuZWVkIGEgd3JpdGFibGUgY29weSBvZiB0aGlzIHN0cmluZywgYnV0IHdlIGRvbid0CistCSAqIG5lZWQgdGhpcyBhbGxvY2F0ZWQgcGVybWFuZW50bHkgc2luY2Ugd2UgZG9uJ3Qgd2FudAorLQkgKiB0byBsZWFrIG1lbW9yeSwgc28gdXNlIGFsbG9jYSB0byBwdXQgcGF0aCBvbiB0aGUgc3RhY2sgKi8KKy0JZG9uZSA9IF9kbF9zdHJsZW4ocGF0aF9saXN0KTsKKy0JcGF0aCA9IGFsbG9jYShkb25lICsgMSk7CistCisgCS8qIGFub3RoZXIgYml0IG9mIGxvY2FsIHN0b3JhZ2UgKi8KKyAJbXlsaWJuYW1lID0gYWxsb2NhKDIwNTApOworIAorLQlfZGxfbWVtY3B5KHBhdGgsIHBhdGhfbGlzdCwgZG9uZSsxKTsKKy0KKyAJLyogVW5saWtlIGxkZC5jLCBkb24ndCBib3RoZXIgdG8gZWxpbWluYXRlIGRvdWJsZSAvL3MgKi8KKyAKKyAJLyogUmVwbGFjZSBjb2xvbnMgd2l0aCB6ZXJvcyBpbiBwYXRoX2xpc3QgKi8KKyAJLyogOiBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBwYXRoIG1hcHMgdG8gQ1dEICovCisgCS8qIDo6IGFueXdoZXJlIG1hcHMgQ1dEICovCisgCS8qICIiIG1hcHMgdG8gQ1dEICovCistCWRvbmUgPSAwOworLQlwYXRoX24gPSBwYXRoOworLQlkbyB7CistCQlpZiAoKnBhdGggPT0gMCkgeworLQkJCSpwYXRoID0gJzonOworLQkJCWRvbmUgPSAxOworKwlmb3IgKHAgPSBwYXRoX2xpc3Q7IHAgIT0gTlVMTDsgcCA9IHBuKSB7CisrCQlwbiA9IF9kbF9zdHJjaHIocCArIDEsICc6Jyk7CisrCQlpZiAocG4gIT0gTlVMTCkgeworKwkJCXBsZW4gPSBwbiAtIHA7CisrCQkJcG4rKzsKKysJCX0gZWxzZQorKwkJCXBsZW4gPSBfZGxfc3RybGVuKHApOworKworKwkJaWYgKHBsZW4gPj0gNyAmJiBfZGxfbWVtY21wKHAsICIkT1JJR0lOIiwgNykgPT0gMCkgeworKwkJCWludCBvbGVuOworKwkJCWlmIChyZmxhZ3MgJiYgcGxlbiAhPSA3KQorKwkJCQljb250aW51ZTsKKysJCQlpZiAob3JpZ2luID09IE5VTEwpCisrCQkJCWNvbnRpbnVlOworKwkJCWZvciAob2xlbiA9IF9kbF9zdHJsZW4ob3JpZ2luKSAtIDE7IG9sZW4gPj0gMCAmJiBvcmlnaW5bb2xlbl0gIT0gJy8nOyBvbGVuLS0pCisrCQkJCTsKKysJCQlpZiAob2xlbiA8PSAwKQorKwkJCQljb250aW51ZTsKKysJCQlfZGxfbWVtY3B5KCZteWxpYm5hbWVbMF0sIG9yaWdpbiwgb2xlbik7CisrCQkJX2RsX21lbWNweSgmbXlsaWJuYW1lW29sZW5dLCBwICsgNywgcGxlbiAtIDcpOworKwkJCW15bGlibmFtZVtvbGVuICsgcGxlbiAtIDddID0gMDsKKysJCX0gZWxzZSBpZiAocGxlbiAhPSAwKSB7CisrCQkJX2RsX21lbWNweShteWxpYm5hbWUsIHAsIHBsZW4pOworKwkJCW15bGlibmFtZVtwbGVuXSA9IDA7CisrCQl9IGVsc2UgeworKwkJCV9kbF9zdHJjcHkobXlsaWJuYW1lLCAiLiIpOworIAkJfQorLQkJaWYgKCpwYXRoID09ICc6JykgeworLQkJCSpwYXRoID0gMDsKKy0JCQlpZiAoKnBhdGhfbikKKy0JCQkJX2RsX3N0cmNweShteWxpYm5hbWUsIHBhdGhfbik7CistCQkJZWxzZQorLQkJCQlfZGxfc3RyY3B5KG15bGlibmFtZSwgIi4iKTsgLyogQXNzdW1lIGN1cnJlbnQgZGlyIGlmIGVtcHR5IHBhdGggKi8KKy0JCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgIi8iKTsKKy0JCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgbmFtZSk7CisrCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgIi8iKTsKKysJCV9kbF9zdHJjYXQobXlsaWJuYW1lLCBuYW1lKTsKKyAjaWZkZWYgX19MRFNPX1NBRkVfUlVOUEFUSF9fCistCQkJaWYgKCpteWxpYm5hbWUgPT0gJy8nKQorKwkJaWYgKCpteWxpYm5hbWUgPT0gJy8nKQorICNlbmRpZgorLQkJCQlpZiAoKHRwbnQgPSBfZGxfbG9hZF9lbGZfc2hhcmVkX2xpYnJhcnkocmZsYWdzLCBycG50LCBteWxpYm5hbWUpKSAhPSBOVUxMKQorLQkJCQkJcmV0dXJuIHRwbnQ7CistCQkJcGF0aF9uID0gcGF0aCsxOworLQkJfQorLQkJcGF0aCsrOworLQl9IHdoaWxlICghZG9uZSk7CisrCQlpZiAoKHRwbnQgPSBfZGxfbG9hZF9lbGZfc2hhcmVkX2xpYnJhcnkocmZsYWdzLCBycG50LCBteWxpYm5hbWUpKSAhPSBOVUxMKQorKwkJCXJldHVybiB0cG50OworKwl9CisgCXJldHVybiBOVUxMOworIH0KKyAKK0BAIC0yMzQsNyArMjM4LDggQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJaWYgKHBudCkgeworIAkJcG50ICs9ICh1bnNpZ25lZCBsb25nKSB0cG50LT5keW5hbWljX2luZm9bRFRfU1RSVEFCXTsKKyAJCV9kbF9pZl9kZWJ1Z19kcHJpbnQoIlx0c2VhcmNoaW5nIFJQQVRIPSclcydcbiIsIHBudCk7CistCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50KSkgIT0gTlVMTCkKKysJCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBwbnQsIHJwbnQsCisrCQkJCQkJICAgICAgdHBudC0+bGlibmFtZSkpICE9IE5VTEwpCisgCQkJcmV0dXJuIHRwbnQxOworIAl9CisgI2VuZGlmCitAQCAtMjQzLDcgKzI0OCw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCS8qIENoZWNrIGluIExEX3tFTEZffUxJQlJBUllfUEFUSCwgaWYgc3BlY2lmaWVkIGFuZCBhbGxvd2VkICovCisgCWlmIChfZGxfbGlicmFyeV9wYXRoKSB7CisgCQlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBMRF9MSUJSQVJZX1BBVEg9JyVzJ1xuIiwgX2RsX2xpYnJhcnlfcGF0aCk7CistCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xpYnJhcnlfcGF0aCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xpYnJhcnlfcGF0aCwgcnBudCwgTlVMTCkpICE9IE5VTEwpCisgCQl7CisgCQkJcmV0dXJuIHRwbnQxOworIAkJfQorQEAgLTI1Nyw3ICsyNjIsNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorIAlpZiAocG50KSB7CisgCQlwbnQgKz0gKHVuc2lnbmVkIGxvbmcpIHRwbnQtPmR5bmFtaWNfaW5mb1tEVF9TVFJUQUJdOworIAkJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgUlVOUEFUSD0nJXMnXG4iLCBwbnQpOworLQkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50LCBOVUxMKSkgIT0gTlVMTCkKKyAJCQlyZXR1cm4gdHBudDE7CisgCX0KKyAjZW5kaWYKK0BAIC0yOTEsNyArMjk2LDcgQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJLyogTG9vayBmb3IgbGlicmFyaWVzIHdoZXJldmVyIHRoZSBzaGFyZWQgbGlicmFyeSBsb2FkZXIKKyAJICogd2FzIGluc3RhbGxlZCAqLworIAlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBsZHNvIGRpcj0nJXMnXG4iLCBfZGxfbGRzb3BhdGgpOworLQl0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9sZHNvcGF0aCwgcnBudCk7CisrCXRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xkc29wYXRoLCBycG50LCBOVUxMKTsKKyAJaWYgKHRwbnQxICE9IE5VTEwpCisgCQlyZXR1cm4gdHBudDE7CisgI2VuZGlmCitAQCAtMzA0LDcgKzMwOSw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgI2lmbmRlZiBfX0xEU09fQ0FDSEVfU1VQUE9SVF9fCisgCQkJCQkiOiIgVUNMSUJDX1JVTlRJTUVfUFJFRklYICJ1c3IvWDExUjYvbGliIgorICNlbmRpZgorLQkJCQkJLCBycG50KTsKKysJCQkJCSwgcnBudCwgTlVMTCk7CisgCWlmICh0cG50MSAhPSBOVUxMKQorIAkJcmV0dXJuIHRwbnQxOworIAorZGlmZiAtLWdpdCBhL2xkc28vbGRzby9sZHNvLmMgYi9sZHNvL2xkc28vbGRzby5jCitpbmRleCBmMzhmOWUzLi4zODEyOTA4IDEwMDY0NAorLS0tIGEvbGRzby9sZHNvL2xkc28uYworKysrIGIvbGRzby9sZHNvL2xkc28uYworQEAgLTQwMiw2ICs0MDIsMjAgQEAgc3RhdGljIHB0cmRpZmZfdCBfZGxfYnVpbGRfbG9jYWxfc2NvcGUgKHN0cnVjdCBlbGZfcmVzb2x2ZSAqKmxpc3QsCisgCQkJCXAgKz0gX2RsX2J1aWxkX2xvY2FsX3Njb3BlIChwLCBxLT50cG50KTsKKyAJcmV0dXJuIHAgLSBsaXN0OworIH0KKysgCisrc3RhdGljIHZvaWQgX2RsX3NldHVwX3Byb2duYW1lKGNvbnN0IGNoYXIgKmFyZ3YwKQorK3sKKysJY2hhciBpbWFnZVtQQVRIX01BWF07CisrCXNzaXplX3QgczsKKysKKysJcyA9IF9kbF9yZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBpbWFnZSwgc2l6ZW9mKGltYWdlKSk7CisrCWlmIChzID4gMCAmJiBpbWFnZVswXSA9PSAnLycpIHsKKysJCWltYWdlW3NdID0gMDsKKysJCV9kbF9wcm9nbmFtZSA9IF9kbF9zdHJkdXAoaW1hZ2UpOworKwl9IGVsc2UgaWYgKGFyZ3YwKSB7CisrCQlfZGxfcHJvZ25hbWUgPSBhcmd2MDsKKysJfQorK30KKyAKKyB2b2lkICpfZGxfZ2V0X3JlYWR5X3RvX3J1bihzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQsIERMX0xPQURBRERSX1RZUEUgbG9hZF9hZGRyLAorIAkJCSAgRWxmVyhhdXh2X3QpIGF1eHZ0W0FUX0VHSUQgKyAxXSwgY2hhciAqKmVudnAsIGNoYXIgKiphcmd2CitAQCAtNDU0LDkgKzQ2OCw3IEBAIHZvaWQgKl9kbF9nZXRfcmVhZHlfdG9fcnVuKHN0cnVjdCBlbGZfcmVzb2x2ZSAqdHBudCwgRExfTE9BREFERFJfVFlQRSBsb2FkX2FkZHIsCisgCSAqIGJlZW4gZml4ZWQgdXAgYnkgbm93LiAgU3RpbGwgbm8gZnVuY3Rpb24gY2FsbHMgb3V0c2lkZSBvZiB0aGlzCisgCSAqIGxpYnJhcnksIHNpbmNlIHRoZSBkeW5hbWljIHJlc29sdmVyIGlzIG5vdCB5ZXQgcmVhZHkuCisgCSAqLworLQlpZiAoYXJndlswXSkgeworLQkJX2RsX3Byb2duYW1lID0gYXJndlswXTsKKy0JfQorKwlfZGxfc2V0dXBfcHJvZ25hbWUoYXJndlswXSk7CisgCisgI2lmZGVmIF9fRFNCVF9fCisgCV9kbF9sZHNvX2RzYnQgPSAodm9pZCAqKXRwbnQtPmR5bmFtaWNfaW5mb1tEVF9EU0JUX0JBU0VfSURYXTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDctbnB0bC1hdGZvcmstSGlkZS1wdGhyZWFkX2F0Zm9yay1pbi1zaGFyZWQtdmVyc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5MzJjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDctbnB0bC1hdGZvcmstSGlkZS1wdGhyZWFkX2F0Zm9yay1pbi1zaGFyZWQtdmVyc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA5MDUxNmFmOWY3NzZmOWMyODM1YjQ3ZmM1Mjc3NWRjYjMwN2E4NWFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjMgSnVuIDIwMTIgMTU6NTk6MDEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA3LzddIG5wdGwvYXRmb3JrOiBIaWRlIHB0aHJlYWRfYXRmb3JrIGluIHNoYXJlZCB2ZXJzaW9ucworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4gfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbiBiL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgoraW5kZXggNTVlZWJhMi4uOGNiOGZhOSAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgorKysrIGIvbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluCitAQCAtMTYsNiArMTYsNyBAQCBsaWJjLXNoYXJlZC1yb3V0aW5lcy15ID0gZm9yd2FyZC5jIGxpYmMtY2FuY2VsbGF0aW9uLmMKKyBsaWJjLXN0YXRpYy1yb3V0aW5lcy15ID0gYWxsb2NhX2N1dG9mZi5jIGxpYmMtY2FuY2VsbGF0aW9uLmMKKyBsaWJwdGhyZWFkLXNoYXJlZC1vbmx5LXJvdXRpbmVzLXkgPSB2ZXJzaW9uLmMKKyBsaWJwdGhyZWFkLXN0YXRpYy1vbmx5LXJvdXRpbmVzLXkgPSBwdGhyZWFkX2F0Zm9yay5jCisrCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gJChub3RkaXIgJCh3aWxkY2FyZCAkKGxpYnB0aHJlYWRfRElSKS9nZW5fKi5jKSkgIyBkdW1teSBnZW5lcmF0ZWQgZmlsZXMKKyBsaWJwdGhyZWFkLXJvdXRpbmVzLSArPSBhbGxvY2F0ZXN0YWNrLmMgIyBkdW1teSBpbmNsdWRlZCBieSBwdGhyZWFkX2NyZWF0ZS5jCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gcHRocmVhZF9tdXRleF9nZXRwcmlvY2VpbGluZy5jIHB0aHJlYWRfbXV0ZXhfc2V0cHJpb2NlaWxpbmcuYyAjIFhYWDogZGVsZXRlIHRob3NlIG9yIHVzZSB0aGVtIQorQEAgLTIwMSw3ICsyMDIsNyBAQCBDRkxBR1MtbXNnc25kLmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIENGTEFHUy10Y2RyYWluLmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIAorIENGTEFHUy1wdC1zeXN0ZW0uYyA9IC1mZXhjZXB0aW9ucyAtSSQodG9wX3NyY2RpcilsaWJjL3N0ZGxpYgorLQorK0NGTEFHUy1wdGhyZWFkX2F0Zm9yay5jID0gLUROT1RfSU5fbGliYworICMKKyAjIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyB1Q2xpYmMgc3BlY2lmaWMuCisgIworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvbG9jYWxlLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzY2NDM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvbG9jYWxlLmNmZwpAQCAtMCwwICsxLDMgQEAKK1VDTElCQ19IQVNfTE9DQUxFPXkKK1VDTElCQ19IQVNfWExPQ0FMRT15CitVQ0xJQkNfQlVJTERfTUlOSU1BTF9MT0NBTEU9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9vYnN0YWNrLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJmOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcKQEAgLTAsMCArMSBAQAorVUNMSUJDX0hBU19PQlNUQUNLPXkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8gYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMuZGlzdHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NzU0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMuZGlzdHJvCkBAIC0wLDAgKzEsMTkzIEBACisjCisjIEdlbmVyYWwgTGlicmFyeSBTZXR0aW5ncworIworIyBIQVZFX05PX1BJQyBpcyBub3Qgc2V0CisjIERPUElDIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TSEFSRUQgaXMgbm90IHNldAorIyBBUkNIX0hBU19OT19MRFNPIGlzIG5vdCBzZXQKK0hBVkVfU0hBUkVEPXkKKyMgRk9SQ0VfU0hBUkVBQkxFX1RFWFRfU0VHTUVOVFMgaXMgbm90IHNldAorTERTT19MRERfU1VQUE9SVD15CitMRFNPX0NBQ0hFX1NVUFBPUlQ9eQorIyBMRFNPX1BSRUxPQURfRklMRV9TVVBQT1JUIGlzIG5vdCBzZXQKK0xEU09fQkFTRV9GSUxFTkFNRT0ibGQuc28iCisjIFVDTElCQ19TVEFUSUNfTERDT05GSUcgaXMgbm90IHNldAorTERTT19SVU5QQVRIPXkKK1VDTElCQ19DVE9SX0RUT1I9eQorTERTT19HTlVfSEFTSF9TVVBQT1JUPXkKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19USFJFQURTPXkKK1VDTElCQ19IQVNfVEhSRUFEU19OQVRJVkU9eQorUFRIUkVBRFNfREVCVUdfU1VQUE9SVD15CisjIExJTlVYVEhSRUFEU19PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19MRlM9eQorIyBNQUxMT0MgaXMgbm90IHNldAorIyBNQUxMT0NfU0lNUExFIGlzIG5vdCBzZXQKK01BTExPQ19TVEFOREFSRD15CitNQUxMT0NfR0xJQkNfQ09NUEFUPXkKK1VDTElCQ19EWU5BTUlDX0FURVhJVD15CitDT01QQVRfQVRFWElUPXkKK1VDTElCQ19TVVNWM19MRUdBQ1k9eQorVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1M9eQorVUNMSUJDX1NVU1Y0X0xFR0FDWT15CitVQ0xJQkNfSEFTX1NIQURPVz15CitVQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FPXkKK1VDTElCQ19IQVNfX19QUk9HTkFNRT15CitVTklYOThQVFlfT05MWT15CitBU1NVTUVfREVWUFRTPXkKK1VDTElCQ19IQVNfTElCVVRJTD15CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgTmV0d29ya2luZyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX0lQVjY9eQorVUNMSUJDX0hBU19SUEM9eQorVUNMSUJDX0hBU19GVUxMX1JQQz15CitVQ0xJQkNfSEFTX1JFRU5UUkFOVF9SUEM9eQorVUNMSUJDX1VTRV9ORVRMSU5LPXkKK1VDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUc9eQorCitVQ0xJQkNfSEFTX0JTRF9SRVNfQ0xPU0U9eQorVUNMSUJDX0hBU19MSUJSRVNPTFZfU1RVQj15CitVQ0xJQkNfSEFTX0xJQk5TTF9TVFVCPXkKKworIworIyBTdHJpbmcgYW5kIFN0ZGlvIFN1cHBvcnQKKyMKK1VDTElCQ19IQVNfU1RSSU5HX0dFTkVSSUNfT1BUPXkKK1VDTElCQ19IQVNfU1RSSU5HX0FSQ0hfT1BUPXkKK1VDTElCQ19IQVNfQ1RZUEVfVEFCTEVTPXkKK1VDTElCQ19IQVNfQ1RZUEVfU0lHTkVEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9VTlNBRkUgaXMgbm90IHNldAorVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9FTkZPUkNFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1dDSEFSPXkKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorVUNMSUJDX0hBU19IRVhBREVDSU1BTF9GTE9BVFM9eQorVUNMSUJDX0hBU19HTElCQ19DVVNUT01fUFJJTlRGPXkKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKK1VDTElCQ19IQVNfU0NBTkZfR0xJQkNfQV9GTEFHPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfTk9ORSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yNTY9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl81MTIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8xMDI0IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjA0OCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzQwOTYgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl84MTkyIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfTk9ORT15CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfOCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fU0hVVERPV05fT05fQUJPUlQgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19HRVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fUFVUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX0FVVE9fUldfVFJBTlNJVElPTj15CisjIFVDTElCQ19IQVNfRk9QRU5fTEFSR0VGSUxFX01PREUgaXMgbm90IHNldAorVUNMSUJDX0hBU19GT1BFTl9FWENMVVNJVkVfTU9ERT15CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TPXkKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKKyMgVUNMSUJDX0hBU19SRUdFWF9PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19GTk1BVENIPXkKKyMgVUNMSUJDX0hBU19GTk1BVENIX09MRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1dPUkRFWFA9eQorVUNMSUJDX0hBU19ORlRXPXkKK1VDTElCQ19IQVNfRlRXPXkKK1VDTElCQ19IQVNfRlRTPXkKK1VDTElCQ19IQVNfR0xPQj15CitVQ0xJQkNfSEFTX0dOVV9HTE9CPXkKKworIworIyBMaWJyYXJ5IEluc3RhbGxhdGlvbiBPcHRpb25zCisjCitTSEFSRURfTElCX0xPQURFUl9QUkVGSVg9Ii9saWIiCitSVU5USU1FX1BSRUZJWD0iLyIKK0RFVkVMX1BSRUZJWD0iLy91c3IiCitNVUxUSUxJQl9ESVI9ImxpYiIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIFVDTElCQ19CVUlMRF9QSUUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0FSQzRSQU5ET00gaXMgbm90IHNldAorIyBIQVZFX05PX1NTUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1NQIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9SRUxSTz15CitVQ0xJQkNfQlVJTERfTk9XPXkKK1VDTElCQ19CVUlMRF9OT0VYRUNTVEFDSz15CisKKyMKKyMgdUNsaWJjIGRldmVsb3BtZW50L2RlYnVnZ2luZyBvcHRpb25zCisjCitDUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK1VDTElCQ19FWFRSQV9DRkxBR1M9IiIKKyMgRE9ERUJVRyBpcyBub3Qgc2V0CisjIERPREVCVUdfUFQgaXMgbm90IHNldAorIyBET1NUUklQIGlzIG5vdCBzZXQKKyMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0JBQ0tUUkFDRT15CitXQVJOSU5HUz0iLVdhbGwiCisjIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgRE9NVUxUSSBpcyBub3Qgc2V0CisjIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldAorCisjIG1hdGggc3R1ZmYgZm9yIHBlcmwKK0RPX0M5OV9NQVRIPXkKK1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSD15CitVQ0xJQkNfSEFTX0ZFTlY9eQorVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15CisjIFVDTElCQ19MSU5VWF9NT0RVTEVfMjQgaXMgbm90IHNldAorVUNMSUJDX0xJTlVYX1NQRUNJRklDPXkKK1VDTElCQ19IQVNfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19BRFZBTkNFRF9SRUFMVElNRT15CitVQ0xJQkNfSEFTX05FVFdPUktfU1VQUE9SVD15CitVQ0xJQkNfSEFTX1NPQ0tFVD15CitVQ0xJQkNfSEFTX0JTRF9FUlI9eQorVUNMSUJDX0hBU19TWVNMT0c9eQorVUNMSUJDX0hBU19DUllQVD15CitVQ0xJQkNfSEFTX0NSWVBUX0lNUEw9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorVUNMSUJDX0hBU19QVFk9eQorVUNMSUJDX0JTRF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX0VQT0xMPXkKK1VDTElCQ19IQVNfRkxPQVRTPXkKKworIyBUaGUgYmVsb3cgb3B0aW9uIGlzIG5lZWRlZCBmb3IgQVJNIHNpbmNlIGRlcGVuZGluZworIyB1cG9uZyB3aGF0IGludHJ1Y3Rpb24gc2V0IGlzIGNob3NlbiB0aGlzIHdpbGwgYmUKKyMgZW5hYmxlZC4gQXMgc3VjaCBpdCBpcyBoYXJtbGVzcyBhbmQgd2lsbCBiZSBwdW50ZWQKKyMgYnkgbWVudWNvbmZpZyBmb3Igb3RoZXIgYXJjaGVzLgorCisjIENPTVBJTEVfSU5fVEhVTUJfTU9ERSBpcyBub3Qgc2V0CisKKyMgbmVlZGVkIGJ5IHN5c3RlbWQKK1VDTElCQ19IQVNfVVRNUFg9eQorVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15CitVQ0xJQkNfSEFTX1JFU09MVkVSX1NVUFBPUlQ9eQorIyBuZWVkZWQgZm9yIExUUAorVUNMSUJDX1NVU1Y0X0xFR0FDWT15CitVQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUw9eQorRE9fWFNJX01BVEg9eQorVUNMSUJDX1NWNF9ERVBSRUNBVEVEPXkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLm1hY2hpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1ZjQ0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgVmVyc2lvbjogMC45LjMyLWdpdAorIyBNb24gSnVsIDE5IDAxOjM0OjI5IDIwMTAKKyMKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWluaXRpYWxfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzdjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWluaXRpYWxfZ2l0LmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK3JlcXVpcmUgdWNsaWJjLmluYworcmVxdWlyZSB1Y2xpYmMtZ2l0LmluYworCitERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyBuY3Vyc2VzLW5hdGl2ZSB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBsaWJnY2MtaW5pdGlhbCBrZXJuLXRvb2xzLW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCIKKworUEFDS0FHRVMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBJbnN0YWxsIGluaXRpYWwgaGVhZGVycyBpbnRvIHRoZSBjcm9zcyBkaXIKKwltYWtlIFBSRUZJWD0ke0R9IERFVkVMX1BSRUZJWD0ke3ByZWZpeH0vIFJVTlRJTUVfUFJFRklYPS8gXAorCQlpbnN0YWxsX2hlYWRlcnMgaW5zdGFsbF9zdGFydGZpbGVzCisKKyAgICAgICAgIyBhZGQgbGlua3MgdG8gbGludXgtbGliYy1oZWFkZXJzOiBmaW5hbCB1Y2xpYmMgYnVpbGQgbmVlZCB0aGlzLgorICAgICAgICBmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisgICAgICAgICAgICAgICAgaWYgWyAtZCAke0R9JHtpbmNsdWRlZGlyfS8kdCBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS8kdAorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgbG4gLXNmICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0vJHQgJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgICAgIGRvbmUKKworfQorZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX3NpdGVjb25maWcgKCkgeworICAgICAgICA6Cit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLXBhY2thZ2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODE1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsMzcgQEAKKyMgRW5zdXJlIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UgaXMgcHJvY2Vzc2VkIGJlZm9yZSB1Y2xpYmMtc3RhdGljZGV2IHRvIGFsbG93CisjICpfbm9uc2hhcmVkLmEgbGlicmFyaWVzIHRvIGJlIHBhY2thZ2VkIGluIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UuCitQQUNLQUdFUyA9ICJsZGQgdWNsaWJjLXV0aWxzLWRiZyB1Y2xpYmMtdXRpbHMgdWNsaWJjLWdjb252IHVjbGliYy10aHJlYWQtZGIgdWNsaWJjLWFyZ3AgdWNsaWJjLWJhY2t0cmFjZSB1Y2xpYmMtbGliY3J5cHQgdWNsaWJjLWxpYmludGwgdWNsaWJjLWxpYm5zbCB1Y2xpYmMtbGlicmVzb2x2IHVjbGliYy1saWJtIHVjbGliYy1saWJkbCB1Y2xpYmMtbGlidXRpbCB1Y2xpYmMtbGlicHRocmVhZCB1Y2xpYmMtbGlicnQgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jICR7UE59IgorCitGSUxFU191Y2xpYmMtbGliY3J5cHQgPSAiJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJpbnRsID0gIiR7YmFzZV9saWJkaXJ9L2xpYmludGwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliaW50bC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYm5zbCA9ICIke2Jhc2VfbGliZGlyfS9saWJuc2wqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNsLSouc28iCitGSUxFU191Y2xpYmMtbGlicmVzb2x2ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdiouc28uKiAke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJtID0gIiR7YmFzZV9saWJkaXJ9L2xpYm0qLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibS0qLnNvIgorRklMRVNfdWNsaWJjLWxpYmRsID0gIiR7YmFzZV9saWJkaXJ9L2xpYmRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmRsLSouc28iCitGSUxFU191Y2xpYmMtbGlidXRpbCA9ICIke2Jhc2VfbGliZGlyfS9saWJ1dGlsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnV0aWwtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJwdGhyZWFkID0gIiR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnJ0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnJ0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJ0LSouc28iCisKK0ZJTEVTX2xkZCA9ICIke2JpbmRpcn0vbGRkIgorRklMRVNfdWNsaWJjLXV0aWxzID0gIiR7YmluZGlyfSAke3NiaW5kaXJ9IgorRklMRVNfdWNsaWJjLXV0aWxzLWRiZyArPSAiJHtiaW5kaXJ9Ly5kZWJ1ZyAke3NiaW5kaXJ9Ly5kZWJ1ZyIKK0ZJTEVTX3VjbGliYy1nY29udiA9ICIke2xpYmRpcn0vZ2NvbnYiCitGSUxFU191Y2xpYmMtdGhyZWFkLWRiID0gIiR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYioiCitGSUxFU191Y2xpYmMtYXJncCA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YXJncC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnVhcmdwKi5zby4qIgorRklMRVNfdWNsaWJjLWJhY2t0cmFjZSA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YmFja3RyYWNlLSouc28gJHtiYXNlX2xpYmRpcn0vbGlidWJhY2t0cmFjZSouc28uKiIKKworIyBUaGUgbGFzdCBsaW5lIChnZGIgYW5kIGxpYjEpIGlzIGZvciB1Y2xpbnV4LXVjbGliYyBidWlsZHMKK3VjbGliY19iYXNlbGlicyA9ICIke2Jhc2VfbGliZGlyfS9sZCouc28uKiAke2Jhc2VfbGliZGlyfS9sZCouc28gXAorICAgICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L2xpYmMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidUNsaWJjLSouc28gXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJjLmdkYiAke2xpYmRpcn0vbGliYyAke2Jhc2VfbGliZGlyfS9saWIxLnNvIFwKKyAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAgICAgICAke2xpYmRpcn0vbGliKi5zbyBcCisgICAgICAgICR7bGliZGlyfS8qX25vbnNoYXJlZC5hIFwKKyAgICAgICAgJHtsaWJkaXJ9L1tTXSpjcnRbMWluXS5vIFwKKyAgICAgICAgJHtsaWJkaXJ9L2NydHJlbG9jKi5vIFwKKyAgICAgICAgJHtpbmNsdWRlZGlyfS8qLmggJHtpbmNsdWRlZGlyfS8qLyouaCBcCisgICAgICAgIgorRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke3VjbGliY19iYXNlbGlic30gL3NiaW4vbGRjb25maWcgXAorICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfSAke2RhdGFkaXJ9L3pvbmVpbmZvICR7bGliZGlyfS9sb2NhbGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2FhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYwpAQCAtMCwwICsxLDE2OCBAQAorU1VNTUFSWSA9ICJDIGxpYnJhcnkgZm9yIGVtYmVkZGVkIHN5c3RlbXMiCitERVNDUklQVElPTiA9ICJUaGUgbmFtZSB1Q2xpYmMgaXMgYW4gYWJicmV2aWF0aW9uIGZvciAndGhlIFwKK21pY3JvY29udHJvbGxlciBDIGxpYnJhcnknLiBGb3Igc2ltcGxpY2l0eSwgdUNsaWJjIGlzIHByb25vdW5jZWQgXAorJ3lldy1zZWUtbGliLXNlZScuICBUaGUgZ29hbCBvZiB1Q2xpYmMgaXMgdG8gcHJvdmlkZSBhcyBtdWNoIFwKK2Z1bmN0aW9uYWxpdHkgYXMgcG9zc2libGUgaW4gYSBzbWFsbCBhbW91bnQgb2Ygc3BhY2UsIGFuZCBpdCBpcyBpbnRlbmRlZCBcCitwcmltYXJpbHkgZm9yIGVtYmVkZGVkIHVzZS4gSXQgaXMgYWxzbyBoaWdobHkgY29uZmlndXJhYmxlIGluIHN1cHBvcnRlZCBcCitmZWF0dXJlcywgYXQgdGhlIGNvc3Qgb2YgQUJJIGRpZmZlcmVuY2VzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFwKK3VDbGliYyBoYXMgYmVlbiBkZXNpZ25lZCBmcm9tIHRoZSBncm91bmQgdXAgdG8gYmUgYSBDIGxpYnJhcnkgZm9yIFwKK2VtYmVkZGVkIExpbnV4LiAgSXQgaXMgTk9UIGNvbXBhdGlibGUgd2l0aCBiaW5hcmllcyBsaW5rZWQgYWdhaW5zdCBnbGliYy4iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorU0VDVElPTiA9ICJsaWJzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQi5ib2lsZXJwbGF0ZTttZDU9YWFkZGVhZGNkZGViOTE4Mjk3ZTBlNGFmYzUyY2U0NmYgXAorZmlsZTovLyR7U30vdGVzdC9yZWdleC90ZXN0cmVnZXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT0yMzRlZmIyMjdkMGE0MDY3N2Y4OTVlNGExZTI2ZTk2MCIKK1BSID0gInI5IgorCityZXF1aXJlIHVjbGliYy1jb25maWcuaW5jCisKK1BBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCisKKyMgc2l0ZWNvbmZpZy5iYmNsYXNzIHJ1bnMgY29uZmlndXJlIHdoaWNoIG5lZWRzIGEgd29ya2luZyBjb21waWxlcgorIyBGb3IgdGhlIGNvbXBpbGVyIHRvIHdvcmsgd2UgbmVlZCBhIHdvcmtpbmcgbGliYyB5ZXQgbGliYyBpc24ndAorIyBpbiB0aGUgc3lzcm9vdHMgZGlyZWN0b3J5IGF0IHRoaXMgcG9pbnQuIFRoaXMgbWVhbnMgdGhlIGxpYmMuc28KKyMgbGlua2VyIHNjcmlwdCB3b24ndCB3b3JrIGFzIHRoZSAtLXN5c3Jvb3Qgc2V0dGluZyBpc24ndCBjb3JyZWN0LgorIyBIZXJlIHdlIGNyZWF0ZSBhIGhhY2tlZCB1cCBsaWJjIGxpbmtlciBzY3JpcHQgYW5kIHBhc3MgaW4gdGhlIHJpZ2h0CisjIGZsYWdzIHRvIGxldCBjb25maWd1cmUgd29yay4gVWdseS4KK0VYVFJBU0lURUNPTkZJRyA9ICJDRkxBR1M9JyR7Q0ZMQUdTfSAtV2wsLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0nIgorc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnX2dlbmNhY2hlX3ByZXBlbmQgPSAiIFwKK21rZGlyIC1wICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorY3AgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9L2xpYmMuc28gJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCitzZWQgLWkgLWUgJ3MjICR7YmFzZV9saWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSNnJyAtZSAncyMgJHtsaWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0jZycgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjL2xpYmMuc287IFwKKyIKKworIyBGb3Igbm93LCB3ZSB3aWxsIHNraXAgYnVpbGRpbmcgb2YgYSBnY2MgcGFja2FnZSBpZiBpdCBpcyBhIHVjbGliYyBvbmUKKyMgYW5kIG91ciBidWlsZCBpcyBub3QgYSB1Y2xpYmMgb25lLCBhbmQgd2Ugc2tpcCBhIGdsaWJjIG9uZSBpZiBvdXIgYnVpbGQKKyMgaXMgYSB1Y2xpYmMgYnVpbGQuCitDT01QQVRJQkxFX0hPU1QgPSAiLiotdWNsaWJjLioiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyMgZG9fc3RhZ2UgYmFyZnMgb24gYSBDQyB3aXRoIHdoaXRlc3BhY2UsIHRoZXJlZm9yZSBwdXQgdGhlICdIT1NUX0NDX0FSQ0gnIGluCisjIHRoZSBDRkxBR1MgKHdoZW4gYnVpbGRpbmcgdGhlIHV0aWxzKS4KK09FTUFLRV9OT19DQyA9ICInU1RSSVBUT09MPXRydWUnICdMRD0ke0xEfSciCitFWFRSQV9PRU1BS0UgPSAiJHtPRU1BS0VfTk9fQ0N9IFwKKyAgICAgICAgICAgICAgICAnSE9TVENDPSR7QlVJTERfQ0N9JyBcCisgICAgICAgICAgICAgICAgJ0hPU1RfQ0ZMQUdTPSR7QlVJTERfQ0ZMQUdTfScgXAorICAgICAgICAgICAgICAgICdDQz0ke0NDfScgXAorICAgICAgICAgICAgICAgIEFSQ0g9JHtVQ0xJQkNfQVJDSH0iCisKK0VYVFJBX09FTUFLRV90YXNrX2RvX3BhY2thZ2UgPSAiJHtPRU1BS0VfTk9fQ0N9IgorCisjIGVuYWJsZSB2ZXJib3NlIG91dHB1dDoKK2V4cG9ydCBWPSIyIgorCisjIC1PPG4+IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGVuZHMgdXAgd2l0aCBHQ0MgSUNFIG9uIHRodW1iIGFzIHJlcG9ydGVkCisjIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDQ4NjAKKyMKK0NGTEFHU19hcm0gOj0gIiR7QG9lX2ZpbHRlcl9vdXQoJy1mbm8tb21pdC1mcmFtZS1wb2ludGVyJywgJyR7Q0ZMQUdTfScsIGQpfSIKK1VDTElCQ19FWFRSQV9DRkxBR1MgIDo9ICIke0BvZV9maWx0ZXJfb3V0KCcoLUlcUyt8LWlcUyspJywgJyR7Q0ZMQUdTfScsIGQpfSIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKyAgb2VfcnVubWFrZSBwcmVnZW4KK30KKworY29uZmlnbWFuZ2xlID0gJy9eS0VSTkVMX0hFQURFUlMvZDsgXAorICAgICAgICAgICAgICAgIC9eUlVOVElNRV9QUkVGSVgvZDsgXAorICAgICAgICAgICAgICAgIC9eREVWRUxfUFJFRklYL2Q7IFwKKyAgICAgICAgICAgICAgICAvXlNIQVJFRF9MSUJfTE9BREVSX1BSRUZJWC9kOyBcCisgICAgICAgICAgICAgICAgL15VQ0xJQkNfRVhUUkFfQ0ZMQUdTL2Q7IFwKKyAgICAgICAgICAgICAgICBzLC4qVUNMSUJDX0hBU19XQ0hBUi4qLFVDTElCQ19IQVNfV0NIQVI9eSxnOyBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qQ09NUElMRV9JTl9USFVNQl9NT0RFLiosQ09NUElMRV9JTl9USFVNQl9NT0RFPXksOyJdW2QuZ2V0VmFyKCJBUk1fSU5TVFJVQ1RJT05fU0VUIiwgVHJ1ZSkgIT0gImFybSJdfSBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qVUNMSUJDX0hBU19MT0NBTEUuKixVQ0xJQkNfSEFTX0xPQ0FMRT15LDsiXVtkLmdldFZhcigiVVNFX05MUyIsIFRydWUpID09ICJ5ZXMiXX0gXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKkxEU09fR05VX0hBU0hfU1VQUE9SVC4qLCMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQsOyJdW2QuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpIGluIFsnbWlwcycsICdtaXBzZWwnLCAnbWlwczY0JywgJ21pcHM2NGVsJywgJ2F2cjMyJ11dfSBcCisgICAgICAgICAgICAgICAgL15DUk9TUy9kOyBcCisgICAgICAgICAgICAgICAgL15UQVJHRVRfQVJDSD0vZDsgXAorICAgICAgICAgICAgICAgIC9eVEFSR0VUXy9zLF5cKFtePV0qXCkuKiwjIFwxIGlzIG5vdCBzZXQsZzsgXAorICAgICAgICAgICAgICAgIHMsXkRPU1RSSVAuKiwjIERPU1RSSVAgaXMgbm90IHNldCxnOyBcCisgICAgICAgICAgICAgICAgL19bRU9dKkFCSS9kOyBcCisgICAgICAgICAgICAgICAgL0hBU19GUFUvZDsgXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKk1VTFRJTElCX0RJUi4qLE1VTFRJTElCX0RJUj1cIiR7YmFzZWxpYn1cIiw7Il1bZC5nZXRWYXIoImJhc2VsaWIiLCBUcnVlKSAhPSAibGliIl19IFwKKyAgICAgICAgICAgICAgICcKK09FX0ZFQVRVUkVTIDo9ICIke0BmZWF0dXJlc190b191Y2xpYmNfY29uZihkKX0iCitPRV9ERUwgICAgICA6PSAiJHtAZmVhdHVyZXNfdG9fdWNsaWJjX2RlbChkKX0iCitweXRob24gKCkgeworICAgIGlmICIke09FX0RFTH0iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsICIke09FX0RFTH0iICsgIlxuIikKKworICAgICMgYnkgZGVmYXVsdCB1Y2xpYmMgdXNlcyBtaXBzMSBJU0EgZm9yIG8zMiBBQkkKKyAgICAjIGlmIHdlIHVzZSBUQVJHRVRfQ0NfQVJDSD0iLW1hcmNoPW1pcHMzMiIgd2UgZW5kIHVwIAorICAgICMgd2l0aCBjb25mbGljdGluZyBtYXJjaCBvcHRpb25zIHRvIGdjYy4gSGVyZSB3ZQorICAgICMgYXNrIGZvciBNSVBTMzIgSVNBIHRvIG1hdGNoIHRoZSBjaG9zZW4gYXJjaAorICAgIHR1bmUgPSBkLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKQorICAgIGlmIHR1bmUuc3RhcnRzd2l0aCgnbWlwczMyJyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICB0dW5lID0gcmUuc3ViKCcoZWwpKigtbmYpKicsICcnLCB0dW5lKQorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBNSVBTMzJfQ0hFQ0skL2FcXFxuQ09ORklHX01JUFNfSVNBXyVzPXlcblxuIiAlICh0dW5lLnVwcGVyKCkpKQorICAgIGlmICIke09FX0ZFQVRVUkVTfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgRElTVFJPIEZFQVRVUkVTJC9hXFxcbiVzXG5cbiIgJQorICAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKChkLmV4cGFuZCgiJHtPRV9GRUFUVVJFU30iKS5zcGxpdCgiXG4iKSkpKSkKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBDUk9TUyQvYVxcXG4lc1xuIiAlCisgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbihbIkNST1NTX0NPTVBJTEVSX1BSRUZJWD1cIiR7VEFSR0VUX1BSRUZJWH1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiVUNMSUJDX0VYVFJBX0NGTEFHUz1cIiR7VUNMSUJDX0VYVFJBX0NGTEFHU31cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIktFUk5FTF9IRUFERVJTPVwiJHtTVEFHSU5HX0lOQ0RJUn1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJVTlRJTUVfUFJFRklYPVwiL1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiREVWRUxfUFJFRklYPVwiLyR7cHJlZml4fVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYPVwiL2xpYlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgICApKQorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIFRHVCQvYVxcXG5UQVJHRVRfQVJDSD1cIiVzXCJcXG5UQVJHRVRfJXM9eVxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoIiR7VUNMSUJDX0FSQ0h9IiwgIiR7VUNMSUJDX0FSQ0h9IikpCisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICIvXiMjIyBGUFUkL2FcXFxuJXNcblxuIiAlIChbIlVDTElCQ19IQVNfRlBVPXkiLCIjIFVDTElCQ19IQVNfRlBVIGlzIG5vdCBzZXQiXVtkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF1dKSkKKyAgICBpZiAiJHtVQ0xJQkNfRU5ESUFOfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgQUJJJC9hXFxcbkFSQ0hfV0FOVFNfJXNfRU5ESUFOPXlcblxuIiAlICgiJHtVQ0xJQkNfRU5ESUFOfSIpKQorICAgIGlmICIke1VDTElCQ19BQkl9IjoKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICIvXiMjIyBBQkkkL2FcXFxuQ09ORklHXyVzPXlcblxuIiAlICgiJHtVQ0xJQkNfQUJJfSIpKQorfQorCitweXRob24gZG9fcGF0Y2hfYXBwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgc3VicHJvY2Vzcy5jYWxsKCJsbiAtc2YgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXggJHtTfS9pbmNsdWRlL2xpbnV4Iiwgc2hlbGw9VHJ1ZSkKKyAgICBzdWJwcm9jZXNzLmNhbGwoImxuIC1zZiAke1NUQUdJTkdfSU5DRElSfS9hc20gJHtTfS9pbmNsdWRlL2FzbSIsIHNoZWxsPVRydWUpCit9CisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgcm0gLWYgJHtTfS8uY29uZmlnCisKKyAgICAgICAgIyBPcGVuRW1iZWRkZWQgc3BsaXRzIHRoZSB1Q2xpYmMuY29uZmlnIGluIHR3byBwYXJ0czoKKyAgICAgICAgIyB1Q2xpYmMubWFjaGluZSwgdUNsaWJjLmRpc3RybworICAgICAgICBlY2hvICIjIyMgdUNsaWJjLm1hY2hpbmUgIyMjIiA+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGNhdCAke1dPUktESVJ9L3VDbGliYy5tYWNoaW5lID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyB1Q2xpYmMuZGlzdHJvICMjIyIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgY2F0ICR7V09SS0RJUn0vdUNsaWJjLmRpc3RybyA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgQ1JPU1MiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBUR1QiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBNTVUiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBGUFUiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBBQkkiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBESVNUUk8gRkVBVFVSRVMiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBNSVBTMzJfQ0hFQ0siID4+JHtTfS9tZXJnZWQuY29uZmlnCisKKyAgICAgICAgIyBNYW5nbGUgdGhlIHJlc3VsdGluZyAuY29uZmlnIGRlcGVuZGluZyBvbiBPRSB2YXJpYWJsZXMKKyAgICAgICAgc2VkIC1pIC1lICcke2NvbmZpZ21hbmdsZX0nICR7U30vbWVyZ2VkLmNvbmZpZworCWNwICR7U30vbWVyZ2VkLmNvbmZpZyAuY29uZmlnCisgICAgICAgIG1lcmdlX2NvbmZpZy5zaCAtciAtbiAtbSAuY29uZmlnICR7QCIgIi5qb2luKGZpbmRfY2ZncyhkKSl9CisJY21sMV9kb19jb25maWd1cmUKKworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7RH0gaW5zdGFsbAorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9pY29udi5oCit9CisKKyMgYnVpbGQgbGRkLCBsZGNvbmZpZyBhbmQgZnJpZW5kcyBidXQgb25seSBmb3IgZnVsbCB1Y2xpYmMKK2RvX2luc3RhbGxfYXBwZW5kX3BuLXVjbGliYyAoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0gIlNTUF9BTExfQ0ZMQUdTPSR7VEFSR0VUX0xJTktfSEFTSF9TVFlMRX0iIC1DIHV0aWxzIHV0aWxzX2luc3RhbGwKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDAyYjNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB1Y2xpYmMuaW5jCityZXF1aXJlIHVjbGliYy1wYWNrYWdlLmluYworcmVxdWlyZSB1Y2xpYmMtZ2l0LmluYworCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitQUk9WSURFUyArPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyBcCisgICAgICAgICAgIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIFwKKyAgICAgICAgICAgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIFwKKyAgICAgICAgICAgbGludXgtbGliYy1oZWFkZXJzIG5jdXJzZXMtbmF0aXZlIFwKKyAgICAgICAgICAgbGliZ2NjLWluaXRpYWwga2Vybi10b29scy1uYXRpdmUiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICJsaW51eC1saWJjLWhlYWRlcnMtZGV2IgorUlBST1ZJREVTXyR7UE59LWRldiArPSAibGliYy1kZXYgdmlydHVhbC1saWJjLWRldiIKKyMgdWNsaWJjIGRvZXMgbm90IHJlYWxseSBoYXZlIGxpYnNlZ2ZhdWx0IGJ1dCB0aGVuIHVzaW5nIHRoZSBvbmUgZnJvbSBnbGliYyBpcyBhbHNvIG5vdAorIyBnb2luZyB0byB3b3JrLiBTbyB3ZSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBpdCB0byBtYWtlIGJpdGJha2Ugbm90IHB1bGwgb3RoZXIgcmVjaXBlcworIyB0byBzYXRpc2Z5IHRoaXMgZGVwZW5kZW5jeSBmb3IgdGhlIGltYWdlcy90YXNrcworCitSUFJPVklERVNfJHtQTn0gKz0gImxpYnNlZ2ZhdWx0IHJ0bGQoR05VX0hBU0gpIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9tb3VudC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjU3OGVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIE1lZGlhIGF1dG9tb3VudGluZworU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJhZGQiICAgIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgorU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJyZW1vdmUiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgorU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJjaGFuZ2UiLCBFTlZ7RElTS19NRURJQV9DSEFOR0V9PT0iMSIgUlVOKz0iL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQuc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NzZhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcwpAQCAtMCwwICsxLDE5IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgSGFuZGxlIG5ldHdvcmsgaW50ZXJmYWNlIHNldHVwCitTVUJTWVNURU09PSJuZXQiLCBBQ1RJT049PSJhZGQiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL25ldHdvcmsuc2giCitTVUJTWVNURU09PSJuZXQiLCBBQ1RJT049PSJyZW1vdmUiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL25ldHdvcmsuc2giCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUxZDNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBUaGUgZmlyc3QgcnRjIGRldmljZSBpcyBzeW1saW5rZWQgdG8gL2Rldi9ydGMKK0tFUk5FTD09InJ0YzAiLCBTWU1MSU5LKz0icnRjIgorCisjVGhlIGZpcnN0IGZyYW1lYnVmZmVyIGlzIHN5bWxpbmtlZCB0byAvZGV2L2ZiCitLRVJORUw9PSJmYjAiLCAgU1lNTElOSys9ImZiIgorCisjIE1ha2UgYWxsIGlucHV0IGRldmljZXMgcmVhZC13cml0ZSB0byB0aGUgaW5wdXQgZ3JvdXAKK1NVQlNZU1RFTT09ImlucHV0IiwgR1JPVVA9ImlucHV0IiwgTU9ERT0iNjYwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LmJsYWNrbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDkzNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QKQEAgLTAsMCArMSw1IEBACisvZGV2L2xvb3AKKy9kZXYvcmFtCisvZGV2L210ZGJsb2NrCisvZGV2L21kCisvZGV2L2RtLSoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWE5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDYWxsZWQgZnJvbSB1ZGV2CisjCisjIEF0dGVtcHQgdG8gbW91bnQgYW55IGFkZGVkIGJsb2NrIGRldmljZXMgYW5kIHVtb3VudCBhbnkgcmVtb3ZlZCBkZXZpY2VzCisKKworTU9VTlQ9Ii9iaW4vbW91bnQiCitQTU9VTlQ9Ii91c3IvYmluL3Btb3VudCIKK1VNT1VOVD0iL2Jpbi91bW91bnQiCitmb3IgbGluZSBpbiBgZ3JlcCAtdiBeIyAvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0YAorZG8KKwlpZiBbIGAgZXhwciBtYXRjaCAiJERFVk5BTUUiICIkbGluZSIgYCAtZ3QgMCBdOworCXRoZW4KKwkJbG9nZ2VyICJ1ZGV2L21vdW50LnNoIiAiWyRERVZOQU1FXSBpcyBibGFja2xpc3RlZCwgaWdub3JpbmciCisJCWV4aXQgMAorCWZpCitkb25lCisKK2F1dG9tb3VudCgpIHsJCisJbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorCisJISB0ZXN0IC1kICIvcnVuL21lZGlhLyRuYW1lIiAmJiBta2RpciAtcCAiL3J1bi9tZWRpYS8kbmFtZSIKKwkjIFNpbGVudCB1dGlsLWxpbnV4J3MgdmVyc2lvbiBvZiBtb3VudGluZyBhdXRvCisJaWYgWyAieGByZWFkbGluayAkTU9VTlRgIiA9ICJ4L2Jpbi9tb3VudC51dGlsLWxpbnV4IiBdIDsKKwl0aGVuCisJCU1PVU5UPSIkTU9VTlQgLW8gc2lsZW50IgorCWZpCisJCisJIyBJZiBmaWxlc3lzdGVtIHR5cGUgaXMgdmZhdCwgY2hhbmdlIHRoZSBvd25lcnNoaXAgZ3JvdXAgdG8gJ2Rpc2snLCBhbmQKKwkjIGdyYW50IGl0IHdpdGggIHcvci94IHBlcm1pc3Npb25zLgorCWNhc2UgJElEX0ZTX1RZUEUgaW4KKwl2ZmF0fGZhdCkKKwkJTU9VTlQ9IiRNT1VOVCAtbyB1bWFzaz0wMDcsZ2lkPWBhd2sgLUYnOicgJy9eZGlzay97cHJpbnQgJDN9JyAvZXRjL2dyb3VwYCIKKwkJOzsKKwkjIFRPRE8KKwkqKQorCQk7OworCWVzYWMKKworCWlmICEgJE1PVU5UIC10IGF1dG8gJERFVk5BTUUgIi9ydW4vbWVkaWEvJG5hbWUiCisJdGhlbgorCQkjbG9nZ2VyICJtb3VudC5zaC9hdXRvbW91bnQiICIkTU9VTlQgLXQgYXV0byAkREVWTkFNRSBcIi9ydW4vbWVkaWEvJG5hbWVcIiBmYWlsZWQhIgorCQlybV9kaXIgIi9ydW4vbWVkaWEvJG5hbWUiCisJZWxzZQorCQlsb2dnZXIgIm1vdW50LnNoL2F1dG9tb3VudCIgIkF1dG8tbW91bnQgb2YgWy9ydW4vbWVkaWEvJG5hbWVdIHN1Y2Nlc3NmdWwiCisJCXRvdWNoICIvdG1wLy5hdXRvbW91bnQtJG5hbWUiCisJZmkKK30KKwkKK3JtX2RpcigpIHsKKwkjIFdlIGRvIG5vdCB3YW50IHRvIHJtIC1yIHBvcHVsYXRlZCBkaXJlY3RvcmllcworCWlmIHRlc3QgImBmaW5kICIkMSIgfCB3YyAtbCB8IHRyIC1kICIgImAiIC1sdCAyIC1hIC1kICIkMSIKKwl0aGVuCisJCSEgdGVzdCAteiAiJDEiICYmIHJtIC1yICIkMSIKKwllbHNlCisJCWxvZ2dlciAibW91bnQuc2gvYXV0b21vdW50IiAiTm90IHJlbW92aW5nIG5vbi1lbXB0eSBkaXJlY3RvcnkgWyQxXSIKKwlmaQorfQorCisjIE5vIElEX0ZTX1RZUEUgZm9yIGNkcm9tIGRldmljZSwgeWV0IGl0IHNob3VsZCBiZSBtb3VudGVkCituYW1lPSJgYmFzZW5hbWUgIiRERVZOQU1FImAiCitbIC1lIC9zeXMvYmxvY2svJG5hbWUvZGV2aWNlL21lZGlhIF0gJiYgbWVkaWFfdHlwZT1gY2F0IC9zeXMvYmxvY2svJG5hbWUvZGV2aWNlL21lZGlhYAorCitpZiBbICIkQUNUSU9OIiA9ICJhZGQiIF0gJiYgWyAtbiAiJERFVk5BTUUiIF0gJiYgWyAtbiAiJElEX0ZTX1RZUEUiIC1vICIkbWVkaWFfdHlwZSIgPSAiY2Ryb20iIF07IHRoZW4KKwlpZiBbIC14ICIkUE1PVU5UIiBdOyB0aGVuCisJCSRQTU9VTlQgJERFVk5BTUUgMj4gL2Rldi9udWxsCisJZWxpZiBbIC14ICRNT1VOVCBdOyB0aGVuCisgICAgCQkkTU9VTlQgJERFVk5BTUUgMj4gL2Rldi9udWxsCisJZmkKKwkKKwkjIElmIHRoZSBkZXZpY2UgaXNuJ3QgbW91bnRlZCBhdCB0aGlzIHBvaW50LCBpdCBpc24ndAorCSMgY29uZmlndXJlZCBpbiBmc3RhYiAobm90ZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGNhbiBzaG93IHVwIGFzCisJIyAvZGV2L3Jvb3QgaW4gL3Byb2MvbW91bnRzLCBzbyBjaGVjayB0aGUgZGV2aWNlIG51bWJlciB0b28pCisJaWYgZXhwciAkTUFKT1IgIioiIDI1NiArICRNSU5PUiAhPSBgc3RhdCAtYyAlZCAvYDsgdGhlbgorCQlncmVwIC1xICJeJERFVk5BTUUgIiAvcHJvYy9tb3VudHMgfHwgYXV0b21vdW50CisJZmkKK2ZpCisKKworaWYgWyAiJEFDVElPTiIgPSAicmVtb3ZlIiBdIHx8IFsgIiRBQ1RJT04iID0gImNoYW5nZSIgXSAmJiBbIC14ICIkVU1PVU5UIiBdICYmIFsgLW4gIiRERVZOQU1FIiBdOyB0aGVuCisJZm9yIG1udCBpbiBgY2F0IC9wcm9jL21vdW50cyB8IGdyZXAgIiRERVZOQU1FIiB8IGN1dCAtZiAyIC1kICIgIiBgCisJZG8KKwkJJFVNT1VOVCAkbW50CisJZG9uZQorCQorCSMgUmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzIGZyb20gYXV0by1tb3VudGVyCisJbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorCXRlc3QgLWUgIi90bXAvLmF1dG9tb3VudC0kbmFtZSIgJiYgcm1fZGlyICIvcnVuL21lZGlhLyRuYW1lIgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWU5MjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCisjIFdlIGdldCB0d28gImFkZCIgZXZlbnRzIGZvciBob3N0YXAgY2FyZHMgZHVlIHRvIHdpZmkwCitlY2hvICIkSU5URVJGQUNFIiB8IGdyZXAgLXEgd2lmaSAmJiBleGl0IDAKKworIyB1ZGV2ZCBkb2VzIGNsZWFyZW52KCkuIEV4cG9ydCBzaGVsbCBQQVRIIHRvIGNoaWxkcmVuLgorZXhwb3J0IFBBVEgKKworIyBDaGVjayBpZiAvZXRjL2luaXQuZC9uZXR3b3JrIGhhcyBiZWVuIHJ1biB5ZXQgdG8gc2VlIGlmIHdlIGFyZSAKKyMgY2FsbGVkIGJ5IHN0YXJ0aW5nIC9ldGMvcmNTLmQvUzAzdWRldiBhbmQgbm90IGJ5IGhvdHBsdWdnaW5nIGEgZGV2aWNlCisjCisjIEF0IHRoaXMgc3RhZ2UsIG5ldHdvcmsgaW50ZXJmYWNlcyBzaG91bGQgbm90IGJlIGJyb3VnaHQgdXAKKyMgYXV0b21hdGljYWxseSBiZWNhdXNlOgorIyBhKQkvZXRjL2luaXQuZC9uZXR3b3JrIGhhcyBub3QgYmVlbiBydW4geWV0IChzZWN1cml0eSBpc3N1ZSkKKyMgYikgCS92YXIgaGFzIG5vdCBiZWVuIHBvcHVsYXRlZCB5ZXQgc28gL2V0Yy9yZXNvbHYsY29uZiBwb2ludHMgdG8gCisjCW9ibGl2aW9uLCBtYWtpbmcgdGhlIG5ldHdvcmsgdW51c2FibGUKKyMKKworc3Bvb2ZwPSJgZ3JlcCBec3Bvb2Zwcm90ZWN0IC9ldGMvbmV0d29yay9vcHRpb25zYCIKK2lmIHRlc3QgLXogIiRzcG9vZnAiCit0aGVuCisJIyBUaGlzIGlzIHRoZSBkZWZhdWx0IGZyb20gL2V0Yy9pbml0LmQvbmV0d29yaworCXNwb29mcF92YWw9eWVzCitlbHNlCisJc3Bvb2ZwX3ZhbD0ke3Nwb29mcCNzcG9vZnByb3RlY3Q9fQorZmkKKwordGVzdCAiJHNwb29mcF92YWwiID0geWVzICYmIHNwb29mcF92YWw9MSB8fCBzcG9vZnBfdmFsPTAKKworIyBJIHRoaW5rIGl0IGlzIHNhZmUgdG8gYXNzdW1lIHRoYXQgImxvIiB3aWxsIGFsd2F5cyBiZSB0aGVyZSA7KQoraWYgdGVzdCAiYGNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9sby9ycF9maWx0ZXJgIiAhPSAiJHNwb29mcF92YWwiIC1hIC1uICIkc3Bvb2ZwX3ZhbCIKK3RoZW4KKwllY2hvICIkSU5URVJGQUNFIiA+PiAvZGV2L3VkZXZfbmV0d29ya19xdWV1ZQkKKwlleGl0IDAKK2ZpCisKKyMKKyMgQ29kZSB0YWtlbiBmcm9tIHBjbWNpYS1jczovZXRjL3BjbWNpYS9uZXR3b3JrCisjCisKKyMgaWYgdGhpcyBpbnRlcmZhY2UgaGFzIGFuIGVudHJ5IGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLCBsZXQgaWZ1cGRvd24KKyMgaGFuZGxlIGl0CitpZiBncmVwIC1xICJpZmFjZSBcKyRJTlRFUkZBQ0UiIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzOyB0aGVuCisgIGNhc2UgJEFDVElPTiBpbgorICAgIGFkZCkKKyAgICAJaWZjb25maWcgfCBncmVwIC1xICJeJElOVEVSRkFDRSIgfHwgaWZ1cCAkSU5URVJGQUNFCisgICAgCTs7CisgICAgcmVtb3ZlKQorICAgIAlpZmRvd24gJElOVEVSRkFDRQorICAgIAk7OworICBlc2FjCisgIAorICBleGl0IDAKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmZfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmQ5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdWRldiwgc3BlY2lmaWNhbGx5IGJsYWNrbGlzdCBpbmZvcm1hdGlvbi4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gIiBcCisgICAgICAgZmlsZTovL2F1dG9tb3VudC5ydWxlcyBcCisgICAgICAgZmlsZTovL21vdW50LnNoIFwKKyAgICAgICBmaWxlOi8vbW91bnQuYmxhY2tsaXN0IFwKKyAgICAgICBmaWxlOi8vYXV0b25ldC5ydWxlcyBcCisgICAgICAgZmlsZTovL25ldHdvcmsuc2ggXAorICAgICAgIGZpbGU6Ly9sb2NhbGV4dHJhLnJ1bGVzIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQKKworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2F1dG9tb3VudC5ydWxlcyAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2F1dG9uZXQucnVsZXMgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2F1dG9uZXQucnVsZXMKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sb2NhbGV4dHJhLnJ1bGVzICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbGV4dHJhLnJ1bGVzCisKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9tb3VudC5ibGFja2xpc3QgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cy8KKworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L21vdW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cy9tb3VudC5zaAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25ldHdvcmsuc2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9zY3JpcHRzCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vdWRldiIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS91ZGV2L21vdW50LmJsYWNrbGlzdCIKKworIyB0byByZXBsYWNlIHVkZXYtZXh0cmEtcnVsZXMgZnJvbSBtZXRhLW9lCitSUFJPVklERVNfJHtQTn0gPSAidWRldi1leHRyYS1ydWxlcyIKK1JSRVBMQUNFU18ke1BOfSA9ICJ1ZGV2LWV4dHJhLXJ1bGVzIgorUkNPTkZMSUNUU18ke1BOfSA9ICJ1ZGV2LWV4dHJhLXJ1bGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwZGFkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi5pbmMKQEAgLTAsMCArMSwxMTEgQEAKK1NVTU1BUlkgPSAiL2Rldi8gYW5kIGhvdHBsdWcgbWFuYWdlbWVudCBkYWVtb24iCitERVNDUklQVElPTiA9ICJ1ZGV2IGlzIGEgZGFlbW9uIHdoaWNoIGR5bmFtaWNhbGx5IGNyZWF0ZXMgYW5kIHJlbW92ZXMgZGV2aWNlIG5vZGVzIGZyb20gXAorL2Rldi8sIGhhbmRsZXMgaG90cGx1ZyBldmVudHMgYW5kIGxvYWRzIGRyaXZlcnMgYXQgYm9vdCB0aW1lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi91ZGV2Lmh0bWwiCitMSUNFTlNFID0gIkdQTHYyLjArICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2Mi4wKyIKK0xJQ0VOU0VfbGlidWRldiA9ICJMR1BMdjIuMSsiCitMSUNFTlNFX2xpYmd1ZGV2ID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9DT1BZSU5HO21kNT0xN2M0ZTVmYjQ5NWU2NzA3YWM5MmEzODY0OTI2Zjk3OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3VkZXYvQ09QWUlORzttZDU9ZmI0OTQ0ODVhN2QwNTA1MzA4Y2I2OGU0OTk3Y2MyNjYiCisKK0xERkxBR1MgKz0gIi1scnQiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgbGlidXNiIHVzYnV0aWxzIHBjaXV0aWxzIGdsaWItMi4wLW5hdGl2ZSBncGVyZi1uYXRpdmUgbGlieHNsdC1uYXRpdmUgdXRpbC1saW51eCIKK1JQUk9WSURFU18ke1BOfSA9ICJob3RwbHVnIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9kZXZmcy11ZGV2LnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmtzLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcGVybWlzc2lvbnMucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vbG9jYWwucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi1jYWNoZSBcCisgICAgICAgICAgIGZpbGU6Ly91ZGV2LWNhY2hlLmRlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vYWRkLWluc3RhbGwtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIHBlcmwgcHl0aG9uIgorCitsaWJleGVjZGlyID0gIiR7YmFzZV9saWJkaXJ9IgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXBjaS1pZHMtcGF0aD0ke2RhdGFkaXJ9L3BjaS5pZHMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9wY2lfaWRzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX191c3Jfc2hhcmVfaHdkYXRhX3BjaV9pZHM9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9taXNjX3BjaV9pZHM9eWVzIFwKKyAgICAgICAgICAgICAgICAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWxpYmV4ZWNkaXI9JHtub25hcmNoX2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yb290cHJlZml4PSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRVMgPSsgInVkZXYtY2FjaGUiCitQQUNLQUdFUyA9KyAibGlidWRldiIKK1BBQ0tBR0VTID0rICJsaWJndWRldiIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IHVkZXYtY2FjaGUiCitJTklUU0NSSVBUX05BTUVfdWRldiA9ICJ1ZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfdWRldiA9ICJzdGFydCAwNCBTIC4iCitJTklUU0NSSVBUX05BTUVfdWRldi1jYWNoZSA9ICJ1ZGV2LWNhY2hlIgorSU5JVFNDUklQVF9QQVJBTVNfdWRldi1jYWNoZSA9ICJzdGFydCAzNiBTIC4iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS9Db25zb2xlS2l0ICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldiAke2JpbmRpcn0vdWRldmFkbSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJ1ZGV2LWNhY2hlIgorCisjIHVkZXYtdXRpbHMgaGFzIGJlZW4gcmVtb3ZlZCBhcyBhIHBhY2thZ2UuICBOb3RlIHRoYXQgdWRldiBjb25mbGljdHMgd2l0aCB1ZGV2LXV0aWxzIHNvIHRoYXQKKyMgdWRldi11dGlscyBpcyByZW1vdmVkIGZyb20gc3lzdGVtcyBvbiB1cGdyYWRlLgorUkNPTkZMSUNUU18ke1BOfSArPSAidWRldi11dGlscyIKK1JSRVBMQUNFU18ke1BOfSArPSAidWRldi11dGlscyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi8uZGVidWcvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtkYXRhZGlyfS9wa2djb25maWcvdWRldi5wYyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9saWJ1ZGV2LmggJHtsaWJkaXJ9L2xpYnVkZXYuc28gJHtsaWJkaXJ9L2xpYnVkZXYubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJ1ZGV2LmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJ1ZGV2LnBjIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2d1ZGV2KiAke2xpYmRpcn0vbGliZ3VkZXYqLnNvICR7bGliZGlyfS9saWJndWRldioubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJndWRldiouYSAke2xpYmRpcn0vcGtnY29uZmlnL2d1ZGV2Ki5wYyIKK0ZJTEVTX2xpYnVkZXYgPSAiJHtiYXNlX2xpYmRpcn0vbGlidWRldi5zby4qIgorRklMRVNfbGliZ3VkZXYgPSAiJHtiYXNlX2xpYmRpcn0vbGliZ3VkZXYqLnNvLiogJHtsaWJkaXJ9L2xpYmd1ZGV2Ki5zby4qIgorRklMRVNfdWRldi1jYWNoZSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2LWNhY2hlICR7c3lzY29uZmRpcn0vZGVmYXVsdC91ZGV2LWNhY2hlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCXNlZCAtaSBzJUBVREVWREAlJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgorCXNlZCAtaSBzJUBVREVWREAlJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZS5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdWRldi1jYWNoZQorCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9jYWNoZS5kYXRhCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xvY2FsLnJ1bGVzICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2xvY2FsLnJ1bGVzCisKKwkjIGhpZDJoY2kgaGFzIG1vdmVkIHRvIGJsdWV6NC4gcmVtb3ZlZCBpbiB1ZGV2IGFzIG9mIHZlcnNpb24gMTY5CisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3VkZXYvaGlkMmhjaQorCisJZWNobyAndWRldl9ydW49Ii92YXIvcnVuL3VkZXYiJyA+PiAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3VkZXYuY29uZgorfQorCisjIEFzIHN5c3RlbWQgYWxzbyBidWlsZHMgdWRldiwgc2tpcCB0aGlzIHBhY2thZ2UgaWYgd2UncmUgZG9pbmcgYSBzeXN0ZW1kIGJ1aWxkLgorcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIGluIERJU1RST19GRUFUVVJFUyIpCit9Citkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgdGVzdC11ZGV2Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi8wMDAxLUZpeGluZy1rZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoLXNoZWxsLXNjcmlwdC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZGVhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDBmODI5MGM5NDNkYTI5OGFiZDI2OWNhNjBmZDgzNzVkZmIyMTk5NzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUgREFNSUFOIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgMTIgSnVsIDIwMTIgMTI6NTQ6NDggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4aW5nIGtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2ggc2hlbGwgc2NyaXB0IHBhdGgKKworV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHJvb3RwcmVmaXgsIHRoZSBrZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCit3YXMgbW9kaWZpZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aCBAcm9vdHByZWZpeEAvYmluL3NoLCB3aGljaCBpcyB3cm9uZworYmVjYXVzZSBAcm9vdHByZWZpeEAgZGVmYXVsdHMgdG8gL3VzciAod2hpY2ggaXMgY29ycmVjdCksIGJ1dCB0aGUKK3NoZWxsIGlzIGFsd2F5cyBhdCAvYmluL3NoIChJRUVFIFN0ZCAxMDAzLjItMTk5MikuCisKK1RoZXJlZm9yZSB0aGUgaW50ZXJwcmV0ZXIgZm9yIHNoZWxsIHNjcmlwdHMgbmVlZHMgdG8gYmUgL2Jpbi9zaCBhdCBhbGwgdGltZXMuCisKK1RoZSB1cHN0cmVhbSBtb3ZlZCB0byBjb25maWd1cmFibGUgcm9vdCBwcmVmaXgsIHRoaXMgcGF0Y2ggdGFjbGtlcyBhIAordHJhbnNpdGlvbiBidWcsIGFuZCB3aWxsIG5vdCBiZSBhcHBsaWVkIHVwc3RyZWFtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUgREFNSUFOIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4KKy0tLQorIHNyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbiBiL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgoraW5kZXggZGQwNDBjZS4uNTk3YTNhNiAxMDA3NTUKKy0tLSBhL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgorKysrIGIvc3JjL2tleW1hcC9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIUByb290cHJlZml4QC9iaW4vc2ggLWUKKysjIS9iaW4vc2ggLWUKKyAjIHJlYWQgbGlzdCBvZiBzY2FuY29kZXMsIGNvbnZlcnQgaGV4IHRvIGRlY2ltYWwgYW5kCisgIyBhcHBlbmQgdG8gdGhlIGF0a2JkIGZvcmNlX3JlbGVhc2Ugc3lzZnMgYXR0cmlidXRlCisgIyAkMSBzeXNmcyBkZXZwYXRoIGZvciBzZXJpb1gKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjMmU5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDg2IEBACitBZGp1c3RlbWVudHMgZm9yIHB0ZXN0OgorCistIEFkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KKy0gUHJpbnQgYSBzdGFuZGFyZCByZXN1bHQgbGluZSBmb3IgZWFjaCB0ZXN0LgorLSBSZXBsYWNlIHRoZSB1c2Ugb2YgInRyZWUiIHdpdGggImZpbmQiLgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcmEgU2FmdGEgPGFsc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIG1pc3NpbmcgZmlsZXMgZm9yIHJ1bGUtc3ludGF4LWNoZWNrCistIEFkZCBydWxlLXN5bnRheC1jaGVjay5weQorLSBBZGQgdGhlIGRlcGxveWVkIHVkZXYgcnVsZXMgdG8gdGhlIHRlc3RkYXRhCisKK1NpZ25lZC1vZmYtYnk6IE1heCBLcnVtbWVuYWNoZXIgPG1heC5vc3MuMDlAZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0gYS9NYWtlZmlsZS5hbQkyMDEyLTAzLTE4IDE2OjI4OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0wMi0xOCAxMDowMzozNi41MzExMDEyNDQgKzAxMDAKK0BAIC03MDgsMyArNzA4LDE4IEBACisgCWZvciBpIGluIHNyYy9kb2NzL2h0bWwvKi57aHRtbCxjc3MscG5nfTsgZG8gZWNobyAkJGk7IGt1cCBwdXQgJCRpICQkaS5zaWduIC9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvbGlidWRldi87IGRvbmUKKyAJZm9yIGkgaW4gc3JjL2d1ZGV2L2RvY3MvaHRtbC8qLntodG1sLGNzcyxwbmd9OyBkbyBybSAtZiAkJGkuc2lnbjsgZ3BnIC0tYXJtb3IgLS1kZXRhY2gtc2lnbiAtLW91dHB1dD0kJGkuc2lnbiAkJGk7IGRvbmUKKyAJZm9yIGkgaW4gc3JjL2d1ZGV2L2RvY3MvaHRtbC8qLntodG1sLGNzcyxwbmd9OyBkbyBlY2hvICQkaTsga3VwIHB1dCAkJGkgJCRpLnNpZ24gL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy9ndWRldi87IGRvbmUKKysKKytSVUxFUyA9IHJ1bGVzLyogc3JjL2FjY2VsZXJvbWV0ZXIvNjEtYWNjZWxlcm9tZXRlci5ydWxlcyBcCisrCSBzcmMvY2Ryb21faWQvNjAtY2Ryb21faWQucnVsZXMgXAorKwkgc3JjL2tleW1hcC85NS1rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnJ1bGVzIHNyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzIFwKKysJIHNyYy9tdGRfcHJvYmUvNzUtcHJvYmVfbXRkLnJ1bGVzIHNyYy92NGxfaWQvNjAtcGVyc2lzdGVudC12NGwucnVsZXMKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlpbnN0YWxsIHRlc3QtdWRldiAkKERFU1RESVIpCisrCWNwIE1ha2VmaWxlICQoREVTVERJUikKKysJc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQoREVTVERJUikvTWFrZWZpbGUKKysJaW5zdGFsbCAtZCAkKERFU1RESVIpL3Rlc3QgJChERVNURElSKS9ydWxlcworKwkoY2QgJCh0b3Bfc3JjZGlyKSAmJiBpbnN0YWxsICQoVEVTVFMpICQoREVTVERJUikvdGVzdCkKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCB0ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5ICQoREVTVERJUikvdGVzdCkKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCAkKFJVTEVTKSAkKERFU1RESVIpL3J1bGVzKQorKwljcCAkKHRvcF9zcmNkaXIpL3Rlc3Qvc3lzLnRhci54eiAkKERFU1RESVIpL3Rlc3QvCistLS0gYS90ZXN0L3VkZXYtdGVzdC5wbAkyMDEyLTAzLTE4IDE2OjQzOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGIvdGVzdC91ZGV2LXRlc3QucGwJMjAxMy0wMi0xOCAxMDozMToyOS43MDYzNTczMjEgKzAxMDAKK0BAIC0xNDU5LDExICsxNDU5LDEzIEBACisgICAgICAgICAgICAgICAgIHByaW50ICJhZGQ6ICAgICAgICAgZXJyb3IiOworICAgICAgICAgICAgICAgICBpZiAoJHJ1bGVzLT57ZXhwX2FkZF9lcnJvcn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIGFzIGV4cGVjdGVkXG4iOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJYRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogYWRkXG4iOworICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CistICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJ0cmVlICR1ZGV2X3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImZpbmQgJHVkZXZfcm9vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IGFkZFxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgfQorQEAgLTE0NzksMTUgKzE0ODEsMTggQEAKKyAgICAgICAgICAgICAgICAgcHJpbnQgInJlbW92ZTogICAgICBlcnJvciI7CisgICAgICAgICAgICAgICAgIGlmICgkcnVsZXMtPntleHBfcmVtX2Vycm9yfSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgYXMgZXhwZWN0ZWRcbiI7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlhGQUlMOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiByZW1vdmVcbiI7CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKy0gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oInRyZWUgJHVkZXZfcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiZmluZCAkdWRldl9yb290Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3IrKzsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICBwcmludCAicmVtb3ZlOiAgICAgIG9rXG4iOworKyAgICAgICAgICAgICAgICBwcmludCAiUEFTUzogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgfQorIAorICAgICAgICAgcHJpbnQgIlxuIjsKKy0tLSBhL2NvbmZpZ3VyZS5hYyAgICAgIDIwMTMtMTEtMjggMDk6MTQ6MDIuODE0MjQ4ODI2ICswMTAwCisrKysgYi9jb25maWd1cmUuYWMgICAgICAyMDEzLTExLTI4IDA5OjE0OjM0LjI2MDg3NDI5NiArMDEwMAorQEAgLTYsNyArNiw3IEBACisgICAgICAgIFtodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYuaHRtbF0pCisgQUNfQ09ORklHX1NSQ0RJUihbc3JjL3VkZXZkLmNdKQorIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorLUFNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIC1XYWxsIC1Xbm8tcG9ydGFiaWxpdHkgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIC1XYWxsIC1Xbm8tcG9ydGFiaWxpdHkgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgc2VyaWFsLXRlc3RzXSkKKyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMzMWIzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitTb3VyY2U6IGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9zeXN0ZW1kL3N5c3RlbWQvY29tbWl0L3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXM/aWQ9ZTAzODZjZjI4MDkyMTliYmRkMzA4OTVmNDZmMWY1NjdiNTY5MDJiNgorCitTb21lIFVTQiBwb3J0cyBvbiBleHRlcm5hbCBodWJzIG1heSBiZSByZXBvcnRlZCBhcyAiZml4ZWQiLiBXZSBvbmx5IHdhbnQKK3RvIGF1dG8tZW5hYmxlIHRoaXMgb24gcG9ydHMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gdGhlIG1hY2hpbmUsIHNvIGNoZWNrCit0aGUgcGFyZW50IHN0YXRlIGFzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTMvMDkvMTMKKworSW5kZXg6IHVkZXYtMTgyL3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1ZGV2LTE4Mi5vcmlnL3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXMKKysrKyB1ZGV2LTE4Mi9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzCitAQCAtNDYsNCArNDYsOSBAQCBBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBBVFRSU3tpCisgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUntpZFZlbmRvcn09PSIxNGRkIiwgQVRUUntpZFByb2R1Y3R9PSIwMDAyIiwgVEVTVD09InBvd2VyL2NvbnRyb2wiLCBBVFRSe3Bvd2VyL2NvbnRyb2x9PSJhdXRvIgorCisgIyBVU0IgSElEIGRldmljZXMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gdGhlIG1hY2hpbmUgc2hvdWxkIGFsc28gYmUgc2FmZSB0byBhdXRvc3VzcGVuZAorKyMgQW5kIHNraXAgaXQgZm9yIGRldmljZXMgd2hpY2ggYXJlIGV4dGVybmFsIGJ1dCBzYXkgImZpeGVkIgorK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIFNVQlNZU1RFTVM9PSJ1c2IiLCBBVFRSU3tyZW1vdmFibGV9PT0icmVtb3ZhYmxlIiwgR09UTz0idXNiX2hpZF9wbV9lbmQiCisrQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgU1VCU1lTVEVNUz09InVzYiIsIEFUVFJTe3JlbW92YWJsZX09PSJ1bmtub3duIiwgR09UTz0idXNiX2hpZF9wbV9lbmQiCisgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUntiSW50ZXJmYWNlQ2xhc3N9PT0iMDMiLCBBVFRSU3tyZW1vdmFibGV9PT0iZml4ZWQiLCBURVNUPT0iLi4vcG93ZXIvY29udHJvbCIsIEFUVFJ7Li4vcG93ZXIvY29udHJvbH09ImF1dG8iCisrTEFCRUw9InVzYl9oaWRfcG1fZW5kIgorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZGV2ZnMtdWRldi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmExYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMKQEAgLTAsMCArMSwxMDggQEAKKyMgVGhlIHVzZSBvZiB0aGVzZSBydWxlcyBpcyBub3QgcmVjb21tZW5kZWQgb3Igc3VwcG9ydGVkLgorIyBJbiBhIHdvcmxkIHdoZXJlIGRldmljZXMgY2FuIGNvbWUgYW5kIGdvIGF0IGFueSB0aW1lLCB0aGUgZGV2ZnMgc2NoZW1lCisjIG9mIHNpbXBsZSBkZXZpY2UgZW51bWVyYXRpb24gZG9lcyBub3QgaGVscCBfYW55dGhpbmdfLiBKdXN0IGZvcmdldCBhYm91dAorIyBpdC4gVXNlIGN1c3RvbSBydWxlcyB0byBuYW1lIHlvdXIgZGV2aWNlIG9yIGxvb2sgYXQgdGhlIHBlcnNpc3RlbnQgZGV2aWNlCisjIG5hbWluZyBzY2hlbWUsIHdoaWNoIGlzIGltcGxlbWVudGVkIGZvciBkaXNrcyBhbmQgYWRkIHlvdXIgc3Vic3lzdGVtLgorCisjIGlkZSBibG9jayBkZXZpY2VzCitCVVM9ImlkZSIsIEtFUk5FTD0iaGQqIiwgUFJPR1JBTT0iL2V0Yy91ZGV2L2lkZS1kZXZmcy5zaCAlayAlYiAlbiIsIE5BTUU9IiVrIiwgU1lNTElOSz0iJWN7MX0gJWN7Mn0iCisKKyMgbWQgYmxvY2sgZGV2aWNlcworS0VSTkVMPSJtZFswLTldKiIsIE5BTUU9Im1kLyVuIgorCisjIGZsb3BweSBkZXZpY2VzCitLRVJORUw9ImZkWzAtOV0qIiwgTkFNRT0iZmxvcHB5LyVuIgorCisjIHR0eSBkZXZpY2VzCitLRVJORUw9InR0eVswLTldKiIsICAgIE5BTUU9InZjLyVuIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InR0eVNbMC05XSoiLCAgIE5BTUU9InR0cy8lbiIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJ0dHlVU0JbMC05XSoiLCBOQU1FPSJ0dHMvVVNCJW4iCisKKyMgdmMgZGV2aWNlcworS0VSTkVMPSJ2Y3MiLCAgICAgICAgTkFNRT0idmNjLzAiCitLRVJORUw9InZjc1swLTldKiIsICBOQU1FPSJ2Y2MvJW4iCitLRVJORUw9InZjc2EiLCAgICAgICBOQU1FPSJ2Y2MvYTAiCitLRVJORUw9InZjc2FbMC05XSoiLCBOQU1FPSJ2Y2MvYSVuIgorCisjIHY0bCBkZXZpY2VzCitLRVJORUw9InZpZGVvWzAtOV0qIiwgTkFNRT0idjRsL3ZpZGVvJW4iCitLRVJORUw9InJhZGlvWzAtOV0qIiwgTkFNRT0idjRsL3JhZGlvJW4iCitLRVJORUw9InZiaVswLTldKiIsICAgTkFNRT0idjRsL3ZiaSVuIgorS0VSTkVMPSJ2dHhbMC05XSoiLCAgIE5BTUU9InY0bC92dHglbiIKKworIyBkbSBkZXZpY2VzIChpZ25vcmUgdGhlbSkKK0tFUk5FTD0iZG0tWzAtOV0qIiwgTkFNRT0iIgorCisjIGkyYyBkZXZpY2VzCitLRVJORUw9ImkyYy1bMC05XSoiLCBOQU1FPSJpMmMvJW4iLCBTWU1MSU5LPSIlayIKKworIyBsb29wIGRldmljZXMKK0tFUk5FTD0ibG9vcFswLTldKiIsIE5BTUU9Imxvb3AvJW4iLCBTWU1MSU5LPSIlayIKKworIyByYW1kaXNrcworS0VSTkVMPSJyYW1bMC05XSoiLCBOQU1FPSJyZC8lbiIsIFNZTUxJTks9IiVrIgorCisjIGZyYW1lYnVmZmVyIGRldmljZXMKK0tFUk5FTD0iZmJbMC05XSoiLCBOQU1FPSJmYi8lbiIsIFNZTUxJTks9IiVrIgorCisjIG1pc2MKK0tFUk5FTD0icnRjIiwgICAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icHNhdXgiLCAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0iYWdwZ2FydCIsIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icnRjIiwgICAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icHNhdXgiLCAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0idWlucHV0IiwgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKKworIyBhbHNhIGRldmljZXMKK0tFUk5FTD0iY29udHJvbENbMC05XSoiLCBOQU1FPSJzbmQvJWsiCitLRVJORUw9Imh3W0NEMC05XSoiLCAgICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJwY21bQ0QwLTljcF0qIiwgIE5BTUU9InNuZC8layIKK0tFUk5FTD0ibWlkaVtDRDAtOV0qIiwgICBOQU1FPSJzbmQvJWsiCitLRVJORUw9InRpbWVyIiwgICAgICAgICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJzZXEiLCAgICAgICAgICAgIE5BTUU9InNuZC8layIKKworIyBvc3MgZGV2aWNlcworS0VSTkVMPSJhdWRpbyoiLCAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0iZG1taWRpIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9ImRzcCoiLCAgICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJtaWRpKiIsICAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0ibWl4ZXIqIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InNlcXVlbmNlcioiLCBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD0ibWljZSIsICAgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9Im1vdXNlKiIsIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJldmVudCoiLCBOQU1FPSJpbnB1dC8layIKK0tFUk5FTD0ianMqIiwgICAgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9InRzKiIsCSBOQU1FPSJpbnB1dC8layIKKworIyBVU0IgZGV2aWNlcworS0VSTkVMPSJoaWRkZXYqIiwJTkFNRT0idXNiLyVrIgorS0VSTkVMPSJhdWVyKiIsCQlOQU1FPSJ1c2IvJWsiCitLRVJORUw9ImxlZ291c2J0b3dlcioiLAlOQU1FPSJ1c2IvJWsiCitLRVJORUw9ImRhYnVzYioiLAlOQU1FPSJ1c2IvJWsiCitCVVM9InVzYiIsIEtFUk5FTD0ibHBbMC05XSoiLAlOQU1FPSJ1c2IvJWsiCisKKyMgbmV0bGluayBkZXZpY2VzCitLRVJORUw9InJvdXRlIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InNraXAiLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0idXNlcnNvY2siLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJmd21vbml0b3IiLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ0Y3BkaWFnIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0ibmZsb2ciLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0ieGZybSIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJhcnBkIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InJvdXRlNiIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImlwNl9mdyIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImRucnRtc2ciLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ0YXAqIiwJCU5BTUU9Im5ldGxpbmsvJWsiCisKKyMgQ0FQSSBkZXZpY2VzCitLRVJORUw9ImNhcGkiLAkJTkFNRT0iY2FwaTIwIiwgU1lNTElOSz0iaXNkbi9jYXBpMjAiCitLRVJORUw9ImNhcGkqIiwJCU5BTUU9ImNhcGkvJW4iCisKKyMgTmV0d29yayBkZXZpY2VzCitLRVJORUw9InR1biIsCQlOQU1FPSJuZXQvJWsiCisKKyMgcmF3IGRldmljZXMKK0tFUk5FTD0icmF3WzAtOV0qIiwgICAgIE5BTUU9InJhdy8layIgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2ZpeF9ydWxlLXN5bnRheC1yZWdleC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNjNDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2ZpeF9ydWxlLXN5bnRheC1yZWdleC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitUaGUgcnVsZS1zeW50YXgtY2hlY2sgc2NyaXB0IGZhaWxzIHdpdGggZXJyb3JzIGxpa2UgdGhpczoKKworSW52YWxpZCBsaW5lIC9saWIvdWRldi9ydWxlcy5kLzk1LWtleW1hcC5ydWxlczo0OTogRU5We0RNSV9WRU5ET1J9PT0iQVNVUyoiLCBLRVJORUxTPT0iaW5wdXQqIiwgQVRUUlN7bmFtZX09PSJBc3VzIEV4dHJhIEJ1dHRvbnMiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IlczSiIsIFJVTis9ImtleW1hcCAkbmFtZSBtb2R1bGUtYXN1cy13M2oiCisoJyAgY2xhdXNlOicsICdBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IlczSiInKQorKCkKKworCitNb3ZlIGxpbmUgY29tbWVudCBmcm9tIGVuZCBvZiBydWxlcyBmaWxlIHRvIGl0cyBvd24gbGluZSwgdGhlIHJlZ2V4IHVzZWQgdG8KK3Rlc3QgY29ycmVjdCBzeW50YXggY2hva2Ugb24gaXQuCisKK1RoZSBydWxlLXN5bnRheC1jaGVjay5weSB1c2VzIHJlZ2V4IHdoaWNoIGVycm91cm5lc3NseSBjb21wbGFpbnMgb24gQVRUUiBydWxlcworb2YgdGhlIGZvcm0gQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIKK1VzZSB0aGUgcmVnZXggZnJvbSBzeXN0ZW1kJ3Mgc2NyaXB0IHdoaWNoIGFsbG93IFtdIGNoYXJhY3RlcnMgYW5kIGFkZGl0aW9uYWwKK2NvbXBhcmUgb3BlcmF0b3JzCisKK1RoZSBNYWtlZmlsZSBwYXNzZXMgcnVsZXMtdGVzdC5zaCBzY3JpcHQgYSBidWlsZCBob3N0IHBhdGggdG8gdGhlIHRlc3RkYXRhLgorSWdub3JlIHRoZSBhcmd1bWVudCBhbmQgdXNlIGEgcmVsYXRpdmUgcGF0aCBpbnN0ZWFkLgorCisKK1NpZ25lZC1vZmYtYnk6IE1heCBLcnVtbWVuYWNoZXIgPG1heC5vc3MuMDlAZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChjcm9zcyBlbnZpcm9ubWVudCBwYXRoKQorCitkaWZmIC1OYXVyIHVkZXYtMTgyLm9yaWcvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMgdWRldi0xODIvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMKKy0tLSB1ZGV2LTE4Mi5vcmlnL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzCTIwMTItMDItMDcgMDA6MDE6NTUuMTU0NjQwNzkyICswMTAwCisrKysgdWRldi0xODIvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMJMjAxNS0wMS0yNCAyMDo1ODo0MC4xNTY5MzA1MjAgKzAxMDAKK0BAIC05NCw3ICs5NCw4IEBACisgRU5We0RNSV9WRU5ET1J9PT0iSGV3bGV0dC1QYWNrYXJkIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJIUCBHNjIgTm90ZWJvb2sgUEMiLCBSVU4rPSJrZXltYXAgJG5hbWUgMHhCMiB3d3ciCisgRU5We0RNSV9WRU5ET1J9PT0iSGV3bGV0dC1QYWNrYXJkIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJIUCBQcm9Cb29rKiIsIFJVTis9ImtleW1hcCAkbmFtZSAweEY4IHJma2lsbCIKKyAjIEhQIFBhdmlsbGlvbiBkdjYzMTVlYSBoYXMgZW1wdHkgRE1JX1ZFTkRPUgorLUFUVFJ7W2RtaS9pZF1ib2FyZF92ZW5kb3J9PT0iUXVhbnRhIiwgQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIsIEFUVFJ7W2RtaS9pZF1ib2FyZF92ZXJzaW9ufT09IjY1LjJCIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4ODggbWVkaWEiICMgInF1aWNrIHBsYXkKKysjICJxdWljayBwbGF5IgorK0FUVFJ7W2RtaS9pZF1ib2FyZF92ZW5kb3J9PT0iUXVhbnRhIiwgQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIsIEFUVFJ7W2RtaS9pZF1ib2FyZF92ZXJzaW9ufT09IjY1LjJCIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4ODggbWVkaWEiCisgCisgIyBHYXRld2F5IGNsb25lIG9mIEFjZXIgQXNwaXJlIE9uZSBBT0ExMTAvQU9BMTUwCisgRU5We0RNSV9WRU5ET1J9PT0iR2F0ZXdheSoiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IipBT0ExKiIsIFJVTis9ImtleW1hcCAkbmFtZSBhY2VyIgorZGlmZiAtTmF1ciB1ZGV2LTE4Mi5vcmlnL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkgdWRldi0xODIvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weQorLS0tIHVkZXYtMTgyLm9yaWcvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weQkyMDEyLTAyLTE1IDIwOjEwOjEyLjg3MjMzMzM0MiArMDEwMAorKysrIHVkZXYtMTgyL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkJMjAxNS0wMS0yNCAyMTowODowMC40OTYwNDk2MDAgKzAxMDAKK0BAIC0yOCw3ICsyOCw3IEBACisgbm9fYXJnc190ZXN0cyA9IHJlLmNvbXBpbGUoJyhBQ1RJT058REVWUEFUSHxLRVJORUxTP3xOQU1FfFNZTUxJTkt8U1VCU1lTVEVNUz98RFJJVkVSUz98VEFHfFJFU1VMVHxURVNUKVxzKig/Oj18ISk9XHMqIihbXiJdKikiJCcpCisgYXJnc190ZXN0cyA9IHJlLmNvbXBpbGUoJyhBVFRSUz98RU5WfFRFU1QpeyhbYS16QS1aMC05L18uKiUtXSspfVxzKig/Oj18ISk9XHMqIihbXiJdKikiJCcpCisgbm9fYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoTkFNRXxTWU1MSU5LfE9XTkVSfEdST1VQfE1PREV8VEFHfFBST0dSQU18UlVOfExBQkVMfEdPVE98V0FJVF9GT1J8T1BUSU9OU3xJTVBPUlQpXHMqKD86XCs9fDo9fD0pXHMqIihbXiJdKikiJCcpCistYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoQVRUUnxFTlZ8SU1QT1JUKXsoW2EtekEtWjAtOS9fLiolLV0rKX1ccyo9XHMqIihbXiJdKikiJCcpCisrYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoQVRUUnxFTlZ8SU1QT1JUfFJVTil7KFtdW2EtekEtWjAtOS9fLiolLV0rKX1ccyooPXw9PXxcKz0pXHMqIihbXiJdKikiJCcpCisgCisgcmVzdWx0ID0gMAorIGJ1ZmZlciA9ICcnCistLS0gdWRldi0xODIub3JpZy90ZXN0L3J1bGVzLXRlc3Quc2gJMjAxMi0wMS0yOSAwMToxNTo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyB1ZGV2LTE4Mi90ZXN0L3J1bGVzLXRlc3Quc2gJMjAxNS0wMS0yNCAxNzo1Mzo1MS4yMDE4NTg2NTggKzAxMDAKK0BAIC00LDcgKzQsNyBAQAorICMgKEMpIDIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAjIEF1dGhvcjogTWFydGluIFBpdHQgPG1hcnRpbi5waXR0QHVidW50dS5jb20+CisgCistWyAtbiAiJHNyY2RpciIgXSB8fCBzcmNkaXI9YGRpcm5hbWUgJDBgLy4uCisrc3JjZGlyPWBkaXJuYW1lICQwYC8uLgorIAorICMgc2tpcCBpZiB3ZSBkb24ndCBoYXZlIHB5dGhvbgorIHR5cGUgcHl0aG9uID4vZGV2L251bGwgMj4mMSB8fCB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYjAyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdApAQCAtMCwwICsxLDE0MiBAQAorIyEvYmluL3NoCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVkZXYKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RhcnQgdWRldmQsIHBvcHVsYXRlIC9kZXYgYW5kIGxvYWQgZHJpdmVycy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK2V4cG9ydCBUWj0vZXRjL2xvY2FsdGltZQorCitbIC1kIC9zeXMvY2xhc3MgXSB8fCBleGl0IDEKK1sgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCitbIC14IEBVREVWREAgXSB8fCBleGl0IDEKK1NZU0NPTkZfQ0FDSEVEPSIvZXRjL3VkZXYvY2FjaGUuZGF0YSIKK1NZU0NPTkZfVE1QPSIvZGV2L3NobS91ZGV2LmNhY2hlIgorREVWQ0FDSEVfUkVHRU49Ii9kZXYvc2htL3VkZXYtcmVnZW4iICMgY3JlYXRlIHRvIHJlcXVlc3QgY2FjaGUgcmVnZW4KKworIyBBIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYXJlIHVzZWQgYXMgYSBjcml0ZXJpYSB0byBqdWRnZSB3aGV0aGVyIHRoZSB1ZGV2IGNhY2hlIGNvdWxkIGJlIHJldXNlZC4KK0NNUF9GSUxFX0xJU1Q9Ii9wcm9jL3ZlcnNpb24gL3Byb2MvY21kbGluZSAvcHJvYy9kZXZpY2VzIgorWyAtZiAvcHJvYy9hdGFncyBdICYmIENNUF9GSUxFX0xJU1Q9IiRDTVBfRklMRV9MSVNUIC9wcm9jL2F0YWdzIgorCisjIExpc3Qgb2YgZmlsZXMgd2hvc2UgbWV0YWRhdGEgKHNpemUvbXRpbWUvbmFtZSkgd2lsbCBiZSBpbmNsdWRlZCBpbiBjYWNoZWQKKyMgc3lzdGVtIHN0YXRlLgorTUVUQV9GSUxFX0xJU1Q9ImxpYi91ZGV2L3J1bGVzLmQvKiBldGMvdWRldi9ydWxlcy5kLyoiCisKKyMgQ29tbWFuZCB0byBjb21wdXRlIHN5c3RlbSBjb25maWd1cmF0aW9uLgorc3lzY29uZl9jbWQgKCkgeworCWNhdCAtLSAkQ01QX0ZJTEVfTElTVAorCXN0YXQgLWMgJyVzICVZICVuJyAtLSAkTUVUQV9GSUxFX0xJU1QgfCBhd2sgLUYvICd7cHJpbnQgJDEgIiAiICRORjt9JworfQorCitbIC1mIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlIF0gJiYgLiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZQorWyAtZiAvZXRjL3VkZXYvdWRldi5jb25mIF0gJiYgLiAvZXRjL3VkZXYvdWRldi5jb25mCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKKwora2lsbF91ZGV2ZCAoKSB7CisgICAgcGlkPWBwaWRvZiAteCB1ZGV2ZGAKKyAgICBbIC1uICIkcGlkIiBdICYmIGtpbGwgJHBpZAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZXhwb3J0IEFDVElPTj1hZGQKKyAgICAjIHByb3BhZ2F0ZSAvZGV2IGZyb20gL3N5cworICAgIGVjaG8gIlN0YXJ0aW5nIHVkZXYiCisKKyAgICAjIENoZWNrIGZvciByZXF1aXJlZWQgZGV2dG1wZnMgYmVmb3JlIHRyeWluZyB0byBzdGFydCB1ZGV2IGFuZAorICAgICMgbW91bnQgYSBuby1leGlzdGFudCBmcy4KKyAgICBpZiAhIGdyZXAgLXEgZGV2dG1wZnMgL3Byb2MvZmlsZXN5c3RlbXMKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIk1pc3NpbmcgZGV2dG1wZnMsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciB1ZGV2IHRvIHJ1biI7CisgICAgICAgIGVjaG8gIkhhbHRpbmcuLi4iCisgICAgICAgIGhhbHQKKyAgICBmaQorICAgICMgbW91bnQgdGhlIGRldnRtcGZzIG9uIC9kZXYsIGlmIG5vdCBhbHJlYWR5IGRvbmUKKyAgICBMQU5HPUMgYXdrICckMiA9PSAiL2RldiIgJiYgKCQzID09ICJkZXZ0bXBmcyIpIHsgZXhpdCAxIH0nIC9wcm9jL21vdW50cyAmJiB7CisgICAgICAgICAgICBtb3VudCAtbiAtbyBtb2RlPTA3NTUgLXQgZGV2dG1wZnMgbm9uZSAiL2RldiIKKyAgICB9CisgICAgWyAtZSAvZGV2L3B0cyBdIHx8IG1rZGlyIC1tIDA3NTUgL2Rldi9wdHMKKyAgICBbIC1lIC9kZXYvc2htIF0gfHwgbWtkaXIgLW0gMTc3NyAvZGV2L3NobQorICAgICMgdGhlIGF1dG9tb3VudCBydWxlIGZvciB1ZGV2IG5lZWRzIC90bXAgZGlyZWN0b3J5IGF2YWlsYWJsZSwgYXMgL3RtcCBpcyBhIHN5bWxpbmsKKyAgICAjIHRvIC92YXIvdG1wIHdoaWNoIGluIHR1cm4gaXMgYSBzeW1saW5rIHRvIC92YXIvdm9sYXRpbGUvdG1wLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQorICAgICMgL3Zhci92b2xhdGlsZS90bXAgZGlyZWN0b3J5IHRvIGJlIGF2YWlsYWJsZS4KKyAgICBta2RpciAtbSAxNzc3IC1wIC92YXIvdm9sYXRpbGUvdG1wCisKKyAgICAjIENhY2hlIGhhbmRsaW5nLgorICAgIGlmIFsgIiRERVZDQUNIRSIgIT0gIiIgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAtZSAkREVWQ0FDSEUgXTsgdGhlbgorCQkgICAgc3lzY29uZl9jbWQgPiAiJFNZU0NPTkZfVE1QIgorCQkgICAgaWYgY21wICRTWVNDT05GX0NBQ0hFRCAkU1lTQ09ORl9UTVAgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhciB4bWYgJERFVkNBQ0hFIC1DIC8gLW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RfZmlyc3RfYm9vdD0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAiJFZFUkJPU0UiICE9ICJubyIgXSAmJiBlY2hvICJ1ZGV2OiB1c2luZyBjYWNoZSBmaWxlICRERVZDQUNIRSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIC1lICRTWVNDT05GX1RNUCBdICYmIHJtIC1mICIkU1lTQ09ORl9UTVAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtZSAiJERFVkNBQ0hFX1JFR0VOIiBdICYmIHJtIC1mICIkREVWQ0FDSEVfUkVHRU4iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJCSAgICAjIE91dHB1dCBkZXRhaWxlZCByZWFzb24gd2h5IHRoZSBjYWNoZWQgL2RldiBpcyBub3QgdXNlZAorCQkJICAgIGNhdCA8PEVPRgordWRldjogTm90IHVzaW5nIHVkZXYgY2FjaGUgYmVjYXVzZSBvZiBjaGFuZ2VzIGRldGVjdGVkIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6Cit1ZGV2OiAgICAgJENNUF9GSUxFX0xJU1QKK3VkZXY6ICAgICAkTUVUQV9GSUxFX0xJU1QKK3VkZXY6IFRoZSB1ZGV2IGNhY2hlIHdpbGwgYmUgcmVnZW5lcmF0ZWQuIFRvIGlkZW50aWZ5IHRoZSBkZXRlY3RlZCBjaGFuZ2VzLAordWRldjogY29tcGFyZSB0aGUgY2FjaGVkIHN5c2NvbmYgYXQgICAkU1lTQ09ORl9DQUNIRUQKK3VkZXY6IGFnYWluc3QgdGhlIGN1cnJlbnQgc3lzY29uZiBhdCAgJFNZU0NPTkZfVE1QCitFT0YKKwkJCSAgICB0b3VjaCAiJERFVkNBQ0hFX1JFR0VOIgorICAgICAgICAgICAgICAgICAgICBmaQorCSAgICBlbHNlCisJCSAgICBpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgIT0gInllcyIgXTsgdGhlbgorCQkJICAgICMgSWYgcm9vdGZzIGlzIG5vdCByZWFkLW9ubHksIGl0J3MgcG9zc2libGUgdGhhdCBhIG5ldyB1ZGV2IGNhY2hlIHdvdWxkIGJlIGdlbmVyYXRlZDsKKwkJCSAgICAjIG90aGVyd2lzZSwgd2UgZG8gbm90IGJvdGhlciB0byByZWFkIGZpbGVzLgorCQkJICAgIHRvdWNoICIkREVWQ0FDSEVfUkVHRU4iCisJCSAgICBmaQorICAgICAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBtYWtlX2V4dHJhX25vZGVzCisgICAga2lsbF91ZGV2ZCA+ICIvZGV2L251bGwiIDI+JjEKKworICAgICMgdHJpZ2dlciB0aGUgc29ydGVkIGV2ZW50cworICAgIFsgLWUgL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnIF0gJiYgZWNobyAtZSAnXDAwMCcgPi9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworICAgIEBVREVWREAgLWQKKworICAgIHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPTEKKyAgICBpZiBbICIkbm90X2ZpcnN0X2Jvb3QiICE9ICIiIF07dGhlbgorICAgICAgICAgICAgaWYgWyAiJFBST0JFX1BMQVRGT1JNX0JVUyIgIT0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIFBMQVRGT1JNX0JVU19OT01BVENIPSItLXN1YnN5c3RlbS1ub21hdGNoPXBsYXRmb3JtIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFBMQVRGT1JNX0JVU19OT01BVENIPSIiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZCAtLXN1YnN5c3RlbS1ub21hdGNoPXR0eSAtLXN1YnN5c3RlbS1ub21hdGNoPW1lbSAtLXN1YnN5c3RlbS1ub21hdGNoPXZjIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dnRjb25zb2xlIC0tc3Vic3lzdGVtLW5vbWF0Y2g9bWlzYyAtLXN1YnN5c3RlbS1ub21hdGNoPWRjb24gLS1zdWJzeXN0ZW0tbm9tYXRjaD1wY2lfYnVzIC0tc3Vic3lzdGVtLW5vbWF0Y2g9Z3JhcGhpY3MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1iYWNrbGlnaHQgLS1zdWJzeXN0ZW0tbm9tYXRjaD12aWRlbzRsaW51eCAkUExBVEZPUk1fQlVTX05PTUFUQ0gKKyAgICAgICAgICAgICh1ZGV2YWRtIHNldHRsZSAtLXRpbWVvdXQ9MzsgdWRldmFkbSBjb250cm9sIC0tZW52PVNUQVJUVVA9KSYKKyAgICBlbHNlCisgICAgICAgICAgICB1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisgICAgICAgICAgICB1ZGV2YWRtIHNldHRsZQorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvICJTdG9wcGluZyB1ZGV2ZCIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIHVkZXZkIC0tcXVpZXQKKyAgICA7OworICByZXN0YXJ0KQorICAgICQwIHN0b3AKKyAgICBzbGVlcCAxCisgICAgJDAgc3RhcnQKKyAgICA7OworICBzdGF0dXMpCisgICAgcGlkPWBwaWRvZiAteCB1ZGV2ZGAKKyAgICBpZiBbIC1uICIkcGlkIiBdOyB0aGVuCisJZWNobyAidWRldmQgKHBpZCAkcGlkKSBpcyBydW5uaW5nIC4uLiIKKyAgICBlbHNlCisJZWNobyAidWRldmQgaXMgc3RvcHBlZCIKKyAgICBmaQorICAgIDs7CisgICopCisgICAgZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKyAgICBleGl0IDEKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbGlua3MuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZmOTIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYKQEAgLTAsMCArMSwyMSBAQAorIyBUaGlzIGZpbGUgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBkbyBub3QgYXNrIHRoZSBkZWJpYW4gbWFpbnRhaW5lciBhYm91dCBpdC4KKyMgWW91IG1heSB1c2UgaXQgdG8gZG8gc3RyYW5nZSBhbmQgd29uZGVyZnVsIHRoaW5ncywgYXQgeW91ciByaXNrLgorCitMIGZkCQkvcHJvYy9zZWxmL2ZkCitMIHN0ZGluCQkvcHJvYy9zZWxmL2ZkLzAKK0wgc3Rkb3V0CS9wcm9jL3NlbGYvZmQvMQorTCBzdGRlcnIJL3Byb2Mvc2VsZi9mZC8yCitMIGNvcmUJCS9wcm9jL2tjb3JlCitMIHNuZHN0YXQJL3Byb2MvYXNvdW5kL29zcy9zbmRzdGF0CitMIE1BS0VERVYJL3NiaW4vTUFLRURFVgorCitEIHB0cworRCBzaG0KKworIyBIaWMgc3VudCBsZW9uZXMuCitNIHBwcAkJYyAxMDggMAorRCBsb29wCitNIGxvb3AvMAliIDcgMAorRCBuZXQKK00gbmV0L3R1bgljIDEwIDIwMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwMmNkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcwpAQCAtMCwwICsxLDE5IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgQ3JlYXRlIGEgc3ltbGluayB0byBhbnkgdG91Y2hzY3JlZW4gaW5wdXQgZGV2aWNlCisjIFRyaWdnZXIgYmFzZWQgb24gaW5wdXQgdHlwZSwgdGhhdCB0aGUgZXZiaXQgKC1lKSBoYXMgRVZfU1lOIGFuZCBFVl9BQlMsCisjIGhhcyBhbiBFVl9BQlMgdmFsdWUgKC1hKSB3aGljaCBpcyB1c2VkIGZvciB0b3VjaHNjcmVlbiB0eXBlIGRldmljZXMuCitTVUJTWVNURU09PSJpbnB1dCIsIEtFUk5FTD09ImV2ZW50WzAtOV0qIiwgRU5We0lEX0lOUFVUX1RPVUNIU0NSRUVOfT09IjEiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNWI3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMKQEAgLTAsMCArMSwxMzEgQEAKK0FDVElPTiE9ImFkZCIsIEdPVE89InBlcm1pc3Npb25zX2VuZCIKKworIyB3b3JrYXJvdW5kcyBuZWVkZWQgdG8gc3luY2hyb25pemUgd2l0aCBzeXNmcworIyBvbmx5IG5lZWRlZCBmb3Iga2VybmVscyA8IHYyLjYuMTgtcmMxCitFTlZ7UEhZU0RFVlBBVEh9IT0iPyoiLCBFTlZ7UEhZU0RFVkJVU309PSI/KiIsCVdBSVRfRk9SX1NZU0ZTPSJidXMiCitTVUJTWVNURU09PSJzY3NpIiwgS0VSTkVMPT0iWzAtOV0qOlswLTldKiIsCVdBSVRfRk9SX1NZU0ZTPSJpb2Vycl9jbnQiCisjIG9ubHkgbmVlZGVkIGZvciBrZXJuZWxzIDwgMi42LjE2CitTVUJTWVNURU09PSJuZXQiLAkJCQlXQUlUX0ZPUl9TWVNGUz0iYWRkcmVzcyIKKyMgb25seSBuZWVkZWQgZm9yIGtlcm5lbHMgPCAyLjYuMTcKK1NVQlNZU1RFTT09Im5ldCIsIEVOVntEUklWRVJ9PT0iPyoiLAkJV0FJVF9GT1JfU1lTRlM9ImRldmljZS9kcml2ZXIiCisKKyMgZGV2aWNlcyBuZWVkZWQgdG8gbG9hZCB0aGUgZHJpdmVycyBwcm92aWRpbmcgdGhlbQorS0VSTkVMPT0idHVuIiwJCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorS0VSTkVMPT0icHBwIiwJCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorS0VSTkVMPT0ibG9vcFswLTldKiIsCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorCisjIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGJsb2NrIGRldmljZXMKK1NVQlNZU1RFTT09ImJsb2NrIiwJCQkJR1JPVVA9ImRpc2siCisjIHRoZSBhYWNyYWlkIGRyaXZlciBpcyBicm9rZW4gYW5kIHJlcG9ydHMgdGhhdCBkaXNrcyByZW1vdmFibGUgKHNlZSAjNDA0OTI3KQorU1VCU1lTVEVNPT0iYmxvY2siLCBBVFRSU3tyZW1vdmFibGV9PT0iMSIsIFwKKwlEUklWRVJTIT0iYWFjcmFpZCIsCQkJR1JPVVA9ImZsb3BweSIKKyMgYWxsIGJsb2NrIGRldmljZXMgb24gdGhlc2UgYnVzZXMgYXJlICJyZW1vdmFibGUiCitTVUJTWVNURU09PSJibG9jayIsIFNVQlNZU1RFTVM9PSJ1c2J8aWVlZTEzOTR8bW1jfHBjbWNpYSIsIEdST1VQPSJmbG9wcHkiCisKKyMgSURFIGRldmljZXMKK0tFUk5FTD09ImhkW2Etel18cGNkWzAtOV0qIiwgCQkJRFJJVkVSUz09ImlkZS1jZHJvbXxwY2QiLCBcCisJSU1QT1JUe3Byb2dyYW19PSJjZHJvbV9pZCAtLWV4cG9ydCAkdGVtcG5vZGUiCitFTlZ7SURfQ0RST019PT0iPyoiLAkJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJodFswLTldKiIsIAkJCQlHUk9VUD0idGFwZSIKK0tFUk5FTD09Im5odFswLTldKiIsIAkJCQlHUk9VUD0idGFwZSIKKworIyBTQ1NJIGRldmljZXMKK0tFUk5FTD09InNyWzAtOV0qIiwgSU1QT1JUe3Byb2dyYW19PSJjZHJvbV9pZCAtLWV4cG9ydCAkdGVtcG5vZGUiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMSIsCQkJCUdST1VQPSJ0YXBlIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjMiLCBBVFRSU3t2ZW5kb3J9PT0iSFAiLAlHUk9VUD0ic2Nhbm5lciIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSIzIiwgQVRUUlN7dmVuZG9yfT09IkVwc29uIiwJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMyIsIEFUVFJTe3ZlbmRvcn09PSJFUFNPTiIsCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjQiLAkJCQlHUk9VUD0iY2Ryb20iCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iNSIsCQkJCUdST1VQPSJjZHJvbSIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSI2IiwJCQkJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iOCIsCQkJCUdST1VQPSJ0YXBlIgorCisjIFVTQiBkZXZpY2VzCitLRVJORUw9PSJsZWdvdXNidG93ZXIqIiwJTU9ERT0iMDY2NiIKK0tFUk5FTD09ImxwWzAtOV0qIiwgU1VCU1lTVEVNUz09InVzYiIsCQlHUk9VUD0ibHAiCisKKyMgdXNiZnMtbGlrZSBkZXZpY2VzCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwgXAorCQkJCU1PREU9IjA2NjQiCisKKyMgaVJpdmVyIG11c2ljIHBsYXllcnMKK1NVQlNZU1RFTT09InVzYiIsIEVOVntERVZUWVBFfT09InVzYl9kZXZpY2UiLAlHUk9VUD0icGx1Z2RldiIsIFwKKwlBVFRSU3tpZFZlbmRvcn09PSI0MTAyIiwgQVRUUlN7aWRQcm9kdWN0fT09IjEwWzAxXVsxMzU3ODldIgorCisjIHNlcmlhbCBkZXZpY2VzCitTVUJTWVNURU09PSJ0dHkiLAkJCQlHUk9VUD0iZGlhbG91dCIKK1NVQlNZU1RFTT09ImNhcGkiLAkJCQlHUk9VUD0iZGlhbG91dCIKK1NVQlNZU1RFTT09InNsYW1yIiwJCQkJR1JPVVA9ImRpYWxvdXQiCitTVUJTWVNURU09PSJ6YXB0ZWwiLAkJCQlHUk9VUD0iZGlhbG91dCIKKworIyB2YyBkZXZpY2VzIChhbGwgbWVtYmVycyBvZiB0aGUgdHR5IHN1YnN5c3RlbSkKK0tFUk5FTD09InB0bXgiLAkJCU1PREU9IjA2NjYiLAlHUk9VUD0icm9vdCIKK0tFUk5FTD09ImNvbnNvbGUiLAkJTU9ERT0iMDYwMCIsCUdST1VQPSJyb290IgorS0VSTkVMPT0idHR5IiwJCQlNT0RFPSIwNjY2IiwJR1JPVVA9InJvb3QiCitLRVJORUw9PSJ0dHlbMC05XSoiLAkJCQlHUk9VUD0icm9vdCIKK0tFUk5FTD09InB0eSoiLAkJCU1PREU9IjA2NjYiLAlHUk9VUD0idHR5IgorCisjIHZpZGVvIGRldmljZXMKK1NVQlNZU1RFTT09InZpZGVvNGxpbnV4IiwJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJkcm0iLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJkdmIiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJlbTgzMDAiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJncmFwaGljcyIsCQkJCUdST1VQPSJ2aWRlbyIKK1NVQlNZU1RFTT09Im52aWRpYSIsCQkJCUdST1VQPSJ2aWRlbyIKKworIyBtaXNjIGRldmljZXMKK0tFUk5FTD09InJhbmRvbSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0idXJhbmRvbSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ibWVtIiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJrbWVtIiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJwb3J0IiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJmdWxsIiwJCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ibnVsbCIsCQkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Inplcm8iLAkJCU1PREU9IjA2NjYiCitLRVJORUw9PSJpbm90aWZ5IiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJzZ2lfZmV0Y2hvcCIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ic29ueXBpIiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJhZ3BnYXJ0IiwJCQkJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0ibnZyYW0iLAkJCQlHUk9VUD0ibnZyYW0iCitLRVJORUw9PSJydGN8cnRjWzAtOV0qIiwJCQlHUk9VUD0iYXVkaW8iCitLRVJORUw9PSJ0cG0qIiwJCQlNT0RFPSIwNjAwIiwJT1dORVI9InRzcyIsIEdST1VQPSJ0c3MiCitLRVJORUw9PSJmdXNlIiwJCQkJCUdST1VQPSJmdXNlIgorS0VSTkVMPT0ia3FlbXUiLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Imt2bSIsCQkJCQlHUk9VUD0ia3ZtIgorS0VSTkVMPT0idHVuIiwJCQlNT0RFPSIwNjY2IiwKKworS0VSTkVMPT0iY2RlbXVbMC05XSoiLAkJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJwa3RjZHZkWzAtOV0qIiwJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJwa3RjZHZkIiwJCU1PREU9IjA2NDQiCisKK0tFUk5FTD09InV2ZXJicyoiLAkJCQlHUk9VUD0icmRtYSIKK0tFUk5FTD09InVjbSoiLAkJCQkJR1JPVVA9InJkbWEiCitLRVJORUw9PSJyZG1hX3VjbSIsCQkJCUdST1VQPSJyZG1hIgorCisjIHByaW50ZXJzIGFuZCBwYXJhbGxlbCBkZXZpY2VzCitTVUJTWVNURU09PSJwcmludGVyIiwJCQkJR1JPVVA9ImxwIgorU1VCU1lTVEVNPT0icHBkZXYiLAkJCQlHUk9VUD0ibHAiCitLRVJORUw9PSJpcmxwdCoiLAkJCQlHUk9VUD0ibHAiCitLRVJORUw9PSJwdFswLTldKiIsCQkJCUdST1VQPSJ0YXBlIgorS0VSTkVMPT0icGh0WzAtOV0qIiwJCQkJR1JPVVA9InRhcGUiCisKKyMgc291bmQgZGV2aWNlcworU1VCU1lTVEVNPT0ic291bmQiLAkJCQlHUk9VUD0iYXVkaW8iCisKKyMgaWVlZTEzOTQgZGV2aWNlcyAgICAgICAKK0tFUk5FTD09InJhdzEzOTQiLAkJCQlHUk9VUD0iZGlzayIKK0tFUk5FTD09ImR2MTM5NCoiLAkJCQlHUk9VUD0idmlkZW8iCitLRVJORUw9PSJ2aWRlbzEzOTQqIiwJCQkJR1JPVVA9InZpZGVvIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD09ImV2ZW50WzAtOV0qIiwgQVRUUlN7bmFtZX09PSIqZHZiKnwqRFZCKnwqIElSICoiIFwKKwkJCQlNT0RFPSIwNjY0IiwJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0ianNbMC05XSoiLAkJTU9ERT0iMDY2NCIKK0tFUk5FTD09ImxpcmNbMC05XSoiLAkJCQlHUk9VUD0idmlkZW8iCisKKyMgQU9FIGNoYXJhY3RlciBkZXZpY2VzCitTVUJTWVNURU09PSJhb2UiLAkJTU9ERT0iMDIyMCIsCUdST1VQPSJkaXNrIgorU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0iZXJyIiwgTU9ERT0iMDQ0MCIKKworTEFCRUw9InBlcm1pc3Npb25zX2VuZCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzOTgwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKwordGFyIC1DIHRlc3QvIC14SmYgdGVzdC9zeXMudGFyLnh6CittYWtlIC1rIGNoZWNrLVRFU1RTCittYWtlIHRlc3Qtc3lzLWRpc3RjbGVhbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4ucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkNzEzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4ucnVsZXMKQEAgLTAsMCArMSwxNCBAQAorIyBkZWJ1Z2dpbmcgbW9uaXRvcgorUlVOKz0ic29ja2V0Oi9vcmcva2VybmVsL3VkZXYvbW9uaXRvciIKKworIyBydW4gYSBjb21tYW5kIG9uIHJlbW92ZSBldmVudHMKK0FDVElPTj09InJlbW92ZSIsIEVOVntSRU1PVkVfQ01EfSE9IiIsIFJVTis9IiRlbnZ7UkVNT1ZFX0NNRH0iCisKKyMgaWdub3JlIHRoZSBldmVudHMgZ2VuZXJhdGVkIGJ5IHZpcnR1YWwgY29uc29sZXMKK0tFUk5FTD09InB0bXgiLAkJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09ImNvbnNvbGUiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0idHR5IgksCU9QVElPTlMrPSJsYXN0X3J1bGUiCitLRVJORUw9PSJ0dHlbMC05XSoiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0icHR5KiIsCQlPUFRJT05TKz0ibGFzdF9ydWxlIgorU1VCU1lTVEVNPT0idmMiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZSBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmZmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZQpAQCAtMCwwICsxLDc1IEBACisjIS9iaW4vc2ggLWUKKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdWRldi1jYWNoZQorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRhbGwKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogY2FjaGUgL2RldiB0byBzcGVlZHVwIHRoZSB1ZGV2IG5leHQgYm9vdAorIyMjIEVORCBJTklUIElORk8KKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCitbIC14IEBVREVWREAgXSB8fCBleGl0IDEKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKK0RFVkNBQ0hFX1RNUD0iL2Rldi9zaG0vdWRldi1jYWNoZS10bXAudGFyIgorU1lTQ09ORl9DQUNIRUQ9Ii9ldGMvdWRldi9jYWNoZS5kYXRhIgorU1lTQ09ORl9UTVA9Ii9kZXYvc2htL3VkZXYuY2FjaGUiCitERVZDQUNIRV9SRUdFTj0iL2Rldi9zaG0vdWRldi1yZWdlbiIgIyBjcmVhdGUgdG8gcmVxdWVzdCBjYWNoZSByZWdlbgorCisjIEEgbGlzdCBvZiBmaWxlcyB3aGljaCBhcmUgdXNlZCBhcyBhIGNyaXRlcmlhIHRvIGp1ZGdlIHdoZXRoZXIgdGhlIHVkZXYgY2FjaGUgY291bGQgYmUgcmV1c2VkLgorQ01QX0ZJTEVfTElTVD0iL3Byb2MvdmVyc2lvbiAvcHJvYy9jbWRsaW5lIC9wcm9jL2RldmljZXMiCitbIC1mIC9wcm9jL2F0YWdzIF0gJiYgQ01QX0ZJTEVfTElTVD0iJENNUF9GSUxFX0xJU1QgL3Byb2MvYXRhZ3MiCisKKyMgTGlzdCBvZiBmaWxlcyB3aG9zZSBtZXRhZGF0YSAoc2l6ZS9tdGltZS9uYW1lKSB3aWxsIGJlIGluY2x1ZGVkIGluIGNhY2hlZAorIyBzeXN0ZW0gc3RhdGUuCitNRVRBX0ZJTEVfTElTVD0ibGliL3VkZXYvcnVsZXMuZC8qIGV0Yy91ZGV2L3J1bGVzLmQvKiIKKworIyBDb21tYW5kIHRvIGNvbXB1dGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCitzeXNjb25mX2NtZCAoKSB7CisJY2F0IC0tICRDTVBfRklMRV9MSVNUCisJc3RhdCAtYyAnJXMgJVkgJW4nIC0tICRNRVRBX0ZJTEVfTElTVCB8IGF3ayAtRi8gJ3twcmludCAkMSAiICIgJE5GO30nCit9CisKK1sgLWYgL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUgXSAmJiAuIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlCisKK2lmIFsgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXYtY2FjaGU6IHJlYWQtb25seSByb290ZnMsIHNraXAgZ2VuZXJhdGluZyB1ZGV2LWNhY2hlIgorICAgIGV4aXQgMAorZmkKKworWyAiJERFVkNBQ0hFIiAhPSAiIiBdIHx8IGV4aXQgMAorWyAiJHtWRVJCT1NFfSIgPT0gIm5vIiBdIHx8IGVjaG8gLW4gInVkZXYtY2FjaGU6IGNoZWNraW5nIGZvciAke0RFVkNBQ0hFX1JFR0VOfS4uLiAiCitpZiAhIFsgLWUgIiRERVZDQUNIRV9SRUdFTiIgXTsgdGhlbgorCVsgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJub3QgZm91bmQuIgorCWV4aXQgMAorZmkKK1sgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJmb3VuZC4iCitlY2hvICJQb3B1bGF0aW5nIGRldiBjYWNoZSIKKworZXJyX2NsZWFudXAgKCkgeworICAgICAgICBlY2hvICJ1ZGV2LWNhY2hlOiB1cGRhdGUgZmFpbGVkISIKKyAgICAgICAgdWRldmFkbSBjb250cm9sIC0tc3RhcnQtZXhlYy1xdWV1ZQorCXJtIC1mIC0tICIkU1lTQ09ORl9UTVAiICIkREVWQ0FDSEVfVE1QIiAiJERFVkNBQ0hFIiAiJFNZU0NPTkZfQ0FDSEVEIgorfQorCisoCisJc2V0IC1lCisJdHJhcCAnZXJyX2NsZWFudXAnIEVYSVQKKwl1ZGV2YWRtIGNvbnRyb2wgLS1zdG9wLWV4ZWMtcXVldWUKKwlzeXNjb25mX2NtZCA+ICIkU1lTQ09ORl9UTVAiCisJZmluZCAvZGV2IC14ZGV2IFwoIC10eXBlIGIgLW8gLXR5cGUgYyAtbyAtdHlwZSBsIFwpIHwgY3V0IC1jIDItIFwKKwkJfCB4YXJncyB0YXIgY2YgIiR7REVWQ0FDSEVfVE1QfSIKKwlnemlwIDwgIiR7REVWQ0FDSEVfVE1QfSIgPiAiJERFVkNBQ0hFIgorCXJtIC1mICIke0RFVkNBQ0hFX1RNUH0iCisJbXYgIiRTWVNDT05GX1RNUCIgIiRTWVNDT05GX0NBQ0hFRCIKKwl1ZGV2YWRtIGNvbnRyb2wgLS1zdGFydC1leGVjLXF1ZXVlCisJcm0gLWYgIiRERVZDQUNIRV9SRUdFTiIKKwl0cmFwIC0gRVhJVAorKSAmCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiNzMyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlLmRlZmF1bHQKQEAgLTAsMCArMSw1IEBACisjIERlZmF1bHQgZm9yIC9ldGMvaW5pdC5kL3VkZXYKKworIyBDb21tZW50IHRoaXMgb3V0IHRvIGRpc2FibGUgZGV2aWNlIGNhY2hlCitERVZDQUNIRT0iL2V0Yy91ZGV2LWNhY2hlLnRhci5neiIKK1BST0JFX1BMQVRGT1JNX0JVUz0ieWVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTlkNGEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMKQEAgLTAsMCArMSwxMTYgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyB3b3JrYXJvdW5kIGZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdCByZXBvcnQgbWVkaWEgY2hhbmdlcworU1VCU1lTVEVNUz09ImlkZSIsIEtFUk5FTD09ImhkW2Etel0iLCBBVFRSe3JlbW92YWJsZX09PSIxIiwgXAorCUVOVntJRF9NT0RFTH09PSJJT01FR0FfWklQKiIsCU5BTUU9IiVrIiwgT1BUSU9OUys9ImFsbF9wYXJ0aXRpb25zIgorU1VCU1lTVEVNUz09ImlkZSIsIEtFUk5FTD09ImhkW2Etel0iLCBBVFRSU3ttZWRpYX09PSJmbG9wcHkiLCBcCisJT1BUSU9OUys9ImFsbF9wYXJ0aXRpb25zIgorCisjIFNDU0kgZGV2aWNlcworU1VCU1lTVEVNUz09InNjc2kiLCBLRVJORUw9PSJzclswLTldKiIsCU5BTUU9InNjZCVuIiwgU1lNTElOSys9InNyJW4iCisKKyMgVVNCIGRldmljZXMKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJhdWVyWzAtOV0qIiwJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImNwYWRbMC05XSoiLAlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iZGFidXNiKiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iaGlkZGV2KiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0ibGVnb3VzYnRvd2VyKiIsCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJscFswLTldKiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0idHR5VVNCKiIsIFwKKwlBVFRSU3twcm9kdWN0fT09IlBhbG0gSGFuZGhlbGQqfEhhbmRzcHJpbmcgVmlzb3J8cGFsbU9uZSBIYW5kaGVsZCIsIFwKKwkJCQkJU1lNTElOSys9InBpbG90IgorCisjIHVzYmZzLWxpa2UgZGV2aWNlcworU1VCU1lTVEVNPT0idXNiX2RldmljZSIsCVBST0dSQU09Ii9iaW4vc2ggLWMgJ0s9JWs7IEs9JCR7SyN1c2JkZXZ9OyBwcmludGYgYnVzL3VzYi8lJTAzaS8lJTAzaSAkJHtLJSUlJS4qfSAkJHtLIyoufSciLCBBQ1RJT049PSJhZGQiLCBcCisJCQkJTkFNRT0iJWMiCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwJTkFNRT0iYnVzL3VzYi8kZW52e0JVU05VTX0vJGVudntERVZOVU19IgorCisjIHNlcmlhbCBkZXZpY2VzCitLRVJORUw9PSJjYXBpIiwJCQlOQU1FPSJjYXBpMjAiLCBTWU1MSU5LKz0iaXNkbi9jYXBpMjAiCitLRVJORUw9PSJjYXBpWzAtOV0qIiwJCU5BTUU9ImNhcGkvJW4iCisKKyMgdmlkZW8gZGV2aWNlcworS0VSTkVMPT0iZHZiKiIsCQkJUFJPR1JBTT0iL2Jpbi9zaCAtYyAnSz0lazsgSz0kJHtLI2R2Yn07IHByaW50ZiBkdmIvYWRhcHRlciUlaS8lJXMgJCR7SyUlJSUuKn0gJCR7SyMqLn0iLCBBQ1RJT049PSJhZGQiLCBcCisJCQkJTkFNRT0iJWMiCitLRVJORUw9PSJjYXJkWzAtOV0qIiwJCU5BTUU9ImRyaS8layIKKworIyBtaXNjIGRldmljZXMKK0tFUk5FTD09Imh3X3JhbmRvbSIsCQlOQU1FPSJod3JuZyIKK0tFUk5FTD09InR1biIsCQkJTkFNRT0ibmV0LyVrIgorS0VSTkVMPT0iZXZ0Y2huIiwJCU5BTUU9Inhlbi8layIKKworS0VSTkVMPT0iY2RlbXVbMC05XSoiLAkJTkFNRT0iY2RlbXUvJW4iCitLRVJORUw9PSJwa3RjZHZkWzAtOV0qIiwJTkFNRT0icGt0Y2R2ZC8lbiIKK0tFUk5FTD09InBrdGNkdmQiLAkJTkFNRT0icGt0Y2R2ZC9jb250cm9sIgorCitLRVJORUw9PSJjcHVbMC05XSoiLAkJTkFNRT0iY3B1LyVuL2NwdWlkIgorS0VSTkVMPT0ibXNyWzAtOV0qIiwJCU5BTUU9ImNwdS8lbi9tc3IiCitLRVJORUw9PSJtaWNyb2NvZGUiLAkJTkFNRT0iY3B1L21pY3JvY29kZSIKKworS0VSTkVMPT0idW1hZCoiLAkJTkFNRT0iaW5maW5pYmFuZC8layIKK0tFUk5FTD09Imlzc20qIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJ1dmVyYnMqIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJ1Y20qIiwJCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0icmRtYV91Y20iLAkJTkFNRT0iaW5maW5pYmFuZC8layIKKworIyBBTFNBIGRldmljZXMKK0tFUk5FTD09ImNvbnRyb2xDWzAtOV0qIiwJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0iaHdDW0QwLTldKiIsCQlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJwY21DW0QwLTljcF0qIiwJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0ibWlkaUNbRDAtOV0qIiwJCU5BTUU9InNuZC8layIKK0tFUk5FTD09InRpbWVyIiwJCU5BTUU9InNuZC8layIKK0tFUk5FTD09InNlcSIsCQkJTkFNRT0ic25kLyVrIgorCisjIGllZWUxMzk0IGRldmljZXMgICAgICAgCitLRVJORUw9PSJkdjEzOTQqIiwJCU5BTUU9ImR2MTM5NC8lbiIKK0tFUk5FTD09InZpZGVvMTM5NCoiLAkJTkFNRT0idmlkZW8xMzk0LyVuIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD09Im1pY2UiLAkJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0ibW91c2VbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJldmVudFswLTldKiIsCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09ImpzWzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0idHNbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJ1aW5wdXQiLAkJTkFNRT0iaW5wdXQvJWsiCisKKyMgWmFwdGVsCitLRVJORUw9PSJ6YXBjdGwiLAkJTkFNRT0iemFwL2N0bCIKK0tFUk5FTD09InphcHRpbWVyIiwJCU5BTUU9InphcC90aW1lciIKK0tFUk5FTD09InphcGNoYW5uZWwiLAkJTkFNRT0iemFwL2NoYW5uZWwiCitLRVJORUw9PSJ6YXBwc2V1ZG8iLAkJTkFNRT0iemFwL3BzZXVkbyIKK0tFUk5FTD09InphcFswLTldKiIsCQlOQU1FPSJ6YXAvJW4iCisKKyMgQU9FIGNoYXJhY3RlciBkZXZpY2VzCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJkaXNjb3ZlciIsCU5BTUU9ImV0aGVyZC8layIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImVyciIsCU5BTUU9ImV0aGVyZC8layIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImludGVyZmFjZXMiLAlOQU1FPSJldGhlcmQvJWsiCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJyZXZhbGlkYXRlIiwJTkFNRT0iZXRoZXJkLyVrIgorCisjIGRldmljZSBtYXBwZXIgY3JlYXRlcyBpdHMgb3duIGRldmljZSBub2Rlcywgc28gaWdub3JlIHRoZXNlCitLRVJORUw9PSJkbS1bMC05XSoiLAkJT1BUSU9OUys9Imlnbm9yZV9kZXZpY2UiCitLRVJORUw9PSJkZXZpY2UtbWFwcGVyIiwJTkFNRT0ibWFwcGVyL2NvbnRyb2wiCisKK0tFUk5FTD09InJmY29tbVswLTldKiIsIE5BTUU9IiVrIiwgR1JPVVA9InVzZXJzIiwgTU9ERT0iMDY2MCIKKworIyBGaXJtd2FyZSBIZWxwZXIKK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09ImZpcm13YXJlIiwgUlVOKz0iL2xpYi91ZGV2L2Zpcm13YXJlLnNoIgorCisjIFNhbXN1bmcgVUFSVFMKK0tFUk5FTD09InMzYzI0MTBfc2VyaWFsWzAtOV0iLCAgIE5BTUU9InR0eVNBQyVuIgorCisjIE1YQyBVQVJUcworS0VSTkVMPT0idHR5bXhjWzAtNF0iLCAgIE5BTUU9InR0eW14YyVuIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2XzE4Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjE2MzUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2XzE4Mi5iYgpAQCAtMCwwICsxLDkgQEAKK2luY2x1ZGUgdWRldi5pbmMKKworUFIgPSAicjkiCisKKyMgbW9kdWxlLWluaXQtdG9vbHMgZnJvbSBrbW9kX2dpdCB3aWxsIHByb3ZpZGUgbGlia21vZCBydW50aW1lCitERVBFTkRTICs9ICJtb2R1bGUtaW5pdC10b29scyIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiOTY0NDU2MTc3ZmJmNDgwMjNkZmVlN2RiM2E3MDhkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4NTdlZDE5ZmFmZDhmM2NhOGRlNDEwMTk0ZThjNzMzNmU5ZWI4YTIwNjI2ZWE4YTRiYTY0NDliMDE3ZmFiYTQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2FkZC12ZXJib3NlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNDQzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHVwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kLm9yZwkyMDA1LTAxLTAzIDAwOjMwOjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIHVwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kCTIwMDctMTItMDEgMTk6NDE6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMTksNiArMTksNyBAQAorIG5vdHJlYWxseT0wCisgZm9yY2U9MAorIGRvc3RhcnQ9MAorK3ZlcmJvc2U9MAorIAorIHVzYWdlKCkKKyB7CitAQCAtMjgsNiArMjksNyBAQAorICAgICAgICB1cGRhdGUtcmMuZCBbLW5dIFstciA8cm9vdD5dIFstc10gPGJhc2VuYW1lPiBzdGFydHxzdG9wIE5OIHJ1bmx2bCBbcnVubHZsXSBbLi4uXSAuCisgCQktbjogbm90IHJlYWxseQorIAkJLWY6IGZvcmNlCisrCQktdjogdmVyYm9zZQorIAkJLXI6IGFsdGVybmF0ZSByb290IHBhdGggKGRlZmF1bHQgaXMgLykKKyAJCS1zOiBpbnZva2Ugc3RhcnQgbWV0aG9kcyBpZiBhcHByb3ByaWF0ZSB0byBjdXJyZW50IHJ1bmxldmVsCisgRU9GCitAQCAtNjksNyArNzEsNyBAQAorIAlsZXY9YGVjaG8gJDIgfCBjdXQgLWQvIC1mMWAKKyAJbm49YGVjaG8gJDIgfCBjdXQgLWQvIC1mMmAKKyAJZm49IiR7ZXRjZH0ke2xldn0uZC8ke3N0YXJ0c3RvcH0ke25ufSR7Ym59IgorLQllY2hvICIgICRmbiAtPiAuLi9pbml0LmQvJGJuIgorKwlbICR2ZXJib3NlIC1lcSAxIF0gJiYgZWNobyAiICAkZm4gLT4gLi4vaW5pdC5kLyRibiIKKyAJaWYgWyAkbm90cmVhbGx5IC1lcSAwIF07IHRoZW4KKyAJCW1rZGlyIC1wIGBkaXJuYW1lICRmbmAKKyAgCQlsbiAtcyAuLi9pbml0LmQvJGJuICRmbgorQEAgLTg5LDcgKzkxLDcgQEAKKyAJCWV4aXQgMAorIAlmaQorIAorLQllY2hvICIgQWRkaW5nIHN5c3RlbSBzdGFydHVwIGZvciAkaW5pdGQvJGJuIC4uLiIKKysJZWNobyAiIEFkZGluZyBzeXN0ZW0gc3RhcnR1cCBmb3IgJGluaXRkLyRibi4iCisgCisgCWZvciBpIGluICRzdGFydGxpbmtzOyBkbworIAkJZG9saW5rIFMgJGkKK0BAIC0xMDUsNiArMTA3LDEwIEBACisgCQkJc2hpZnQKKyAJCQljb250aW51ZQorIAkJCTs7CisrCQktdikJdmVyYm9zZT0xCisrCQkJc2hpZnQKKysJCQljb250aW51ZQorKwkJCTs7CisgCQktZikJZm9yY2U9MQorIAkJCXNoaWZ0CisgCQkJY29udGludWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzUxNzFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0NoZWNrIGlmIHN5bWxpbmtzIGFyZSB2YWxpZAorCitXaGVuIHVzaW5nIHJvb3Qgb3B0aW9uIGFuZCAkaW5pdGQvJGJuIGlzIGEgc3ltbGluaywgdGhlIHNjcmlwdCB3b3VsZCBmYWlsIGJlY2F1c2UKK3RoZSBzeW1saW5rIHBvaW50cyB0byBhIHBhdGggb24gdGFyZ2V0LiBGb3IgZXhhbXBsZToKKworL3BhdGgvdG8vdGFyZ2V0L3Jvb3Rmcy9ldGMvaW5pdC5kL3N5c2xvZyAtPiAvZXRjL2luaXQuZC9zeXNsb2cuYnVzeWJveAorCitIZW5jZSwgWyAtZiAvcGF0aC90by90YXJnZXQvcm9vdGZzL2V0Yy9pbml0LmQvc3lzbG9nIF0gY29uZGl0aW9uIHdvdWxkIHJldHVybgorZmFsc2UuCisKK1RoaXMgcGF0Y2ggYWRkcyB0aGUgcG9zaWJpbGl0eSB0byBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIHRoZSBzeW1saW5rIHBvaW50cyB0bworYWN0dWFsbHkgZXhpc3RzIGluIHJvb3RmcyBwYXRoIGFuZCB0aGVuIGNvbnRpbnVlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPiAKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKK0luZGV4OiBnaXQvdXBkYXRlLXJjLmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91cGRhdGUtcmMuZAorKysrIGdpdC91cGRhdGUtcmMuZAorQEAgLTE0NywxMyArMTQ3LDM0IEBAIGZpCisgYm49JDEKKyBzaGlmdAorIAorK3NuPSRpbml0ZC8kYm4KKytpZiBbIC1MICIkc24iIC1hIC1uICIkcm9vdCIgXTsgdGhlbgorKwlpZiB3aGljaCByZWFkbGluayA+L2Rldi9udWxsOyB0aGVuCisrCQl3aGlsZSB0cnVlOyBkbworKwkJCWxpbmtzbj0iJChyZWFkbGluayAiJHNuIikiCisrCQkJaWYgWyAteiAiJGxpbmtzbiIgXTsgdGhlbgorKwkJCQlicmVhaworKwkJCWZpCisrCisrCQkJc249IiRsaW5rc24iCisrCQkJY2FzZSAiJHNuIiBpbgorKwkJCQkvKikgc249IiRyb290JHNuIiA7OworKwkJCQkqKSAgc249IiRpbml0ZC8kc24iIDs7CisrCQkJZXNhYworKwkJZG9uZQorKwllbHNlCisrCQllY2hvICJ1cGRhdGUtcmMuZDogcmVhZGxpbmsgdG9vbCBub3QgcHJlc2VudCwgY2Fubm90IGNoZWNrIHdoZXRoZXIgXAorKwkJCQkkc24gc3ltbGluayBwb2ludHMgdG8gYSB2YWxpZCBmaWxlLiIgPiYyCisrCWZpCisrZmkKKysKKyBpZiBbICQxICE9ICJyZW1vdmUiIF07IHRoZW4KKy0JaWYgWyAhIC1mICIkaW5pdGQvJGJuIiBdOyB0aGVuCisrCWlmIFsgISAtZiAiJHNuIiBdOyB0aGVuCisgCQllY2hvICJ1cGRhdGUtcmMuZDogJGluaXRkLyRibjogZmlsZSBkb2VzIG5vdCBleGlzdCIgPiYyCisgCQlleGl0IDEKKyAJZmkKKyBlbHNlCistCWlmIFsgLWYgIiRpbml0ZC8kYm4iIF07IHRoZW4KKysJaWYgWyAtZiAiJHNuIiBdOyB0aGVuCisgCQlpZiBbICRmb3JjZSAtZXEgMSBdOyB0aGVuCisgCQkJZWNobyAidXBkYXRlLXJjLmQ6ICRpbml0ZC8kYm4gZXhpc3RzIGR1cmluZyByYy5kIHB1cmdlIChjb250aW51aW5nKSIgPiYyCisgCQllbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvZml4LXRvLWhhbmRsZS1wcmlvcml0eS1udW1iZXJzLWNvcnJlY3RseS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJjMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvZml4LXRvLWhhbmRsZS1wcmlvcml0eS1udW1iZXJzLWNvcnJlY3RseS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHRvIGhhbmRsZSBwcmlvcml0eSBudW1iZXJzIGNvcnJlY3RseS4KK1ByZXZpb3VzbHksIGlmIHRoZSBwcmlvcml0eSBudW1iZXIgaXMgJzA4JyBvciAnMDknLCBmb3IgZXhhbXBsZSwKK3RoZSBzY3JpcHQgY2Fubm90IGhhbmRsZSB0aGVtIGNvcnJlY3RseSBhcyB0aGVzZSBudW1iZXJzIGFyZSB0cmVhdGVkCithcyBvY3RhbCBudW1iZXJzLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyB1cGRhdGUtcmMuZCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3VwZGF0ZS1yYy5kIGIvdXBkYXRlLXJjLmQKK2luZGV4IGVjNTBkMTUuLmM3MGI4NTkgMTAwNjQ0CistLS0gYS91cGRhdGUtcmMuZAorKysrIGIvdXBkYXRlLXJjLmQKK0BAIC0yMDUsNyArMjA1LDcgQEAgY2FzZSAkMSBpbgorIAkJCQlleGl0IDEKKyAJCQlmaQorIAkJCXNoaWZ0CistCQkJTk49YHByaW50ZiAlMDJkICQxYAorKwkJCU5OPWBwcmludGYgJTAyZCAkKGV4cHIgJDEgKyAwKWAKKyAJCQlzaGlmdAorIAkJCXdoaWxlIFsgIngkMSIgIT0gInguIiBdOyBkbworIAkJCQlpZiBbICQjIC1lcSAwIF07IHRoZW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIm1hbmFnZSBzeW1saW5rcyBpbiAvZXRjL3JjTi5kIgorREVTQ1JJUFRJT04gPSAidXBkYXRlLXJjLmQgaXMgYSB1dGlsaXRpZXMgdGhhdCBhbGxvd3MgdGhlIG1hbmFnZW1lbnQgb2Ygc3ltbGlua3MgdG8gdGhlIGluaXRzY3JpcHRzIGluIHRoZSAvZXRjL3JjTi5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3VwZGF0ZS1yYy5kO2JlZ2lubGluZT01O2VuZGxpbmU9MTU7bWQ1PTE0OGE0ODMyMWIxMGViMzdjMWZhM2VlMDJiOTQwYTc1IgorCitQUiA9ICJyNSIKKworIyBSZXZpc2lvbiBjb3JyZXNwb25kaW5nIHRvIHRhZyB1cGRhdGUtcmMuZF8wLjcKK1NSQ1JFViA9ICJlY2E2ODBkZGYyOGQwMjQ5NTQ4OTVmNTlhMjQxYTYyMmRkNTc1YzExIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcGhpbGIvdXBkYXRlLXJjLmQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC12ZXJib3NlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlKCkgeworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS91cGRhdGUtcmMuZCAke0R9JHtzYmluZGlyfS91cGRhdGUtcmMuZAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDcyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXguaW5jCkBAIC0wLDAgKzEsMjY4IEBACitTVU1NQVJZID0gIkEgc3VpdGUgb2YgYmFzaWMgc3lzdGVtIGFkbWluaXN0cmF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlV0aWwtbGludXggaW5jbHVkZXMgYSBzdWl0ZSBvZiBiYXNpYyBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gdXRpbGl0aWVzIFwKK2NvbW1vbmx5IGZvdW5kIG9uIG1vc3QgTGludXggc3lzdGVtcy4gIFNvbWUgb2YgdGhlIG1vcmUgaW1wb3J0YW50IHV0aWxpdGllcyBpbmNsdWRlIFwKK2Rpc2sgcGFydGl0aW9uaW5nLCBrZXJuZWwgbWVzc2FnZSBtYW5hZ2VtZW50LCBmaWxlc3lzdGVtIGNyZWF0aW9uLCBhbmQgc3lzdGVtIGxvZ2luLiIKKworU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FLmxpY2Vuc2luZzttZDU9MTcxNWY1ZWUzZTAxMjAzY2ExZTFlMGI5ZWU2NTkxOGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Eb2N1bWVudGF0aW9uL2xpY2Vuc2VzL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5CU0QtMzttZDU9NThkY2Q4NDUyNjUxZmM4YjA3ZDFmNjVjZTA3Y2E4YWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLlVDQjttZDU9MjYzODYwZjg5NjhkOGJhZmE1MzkyY2FiNzQyODUyNjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlidXVpZC9DT1BZSU5HO21kNT1iNDQyZmZiNzYyY2Y4ZDNlOWRmMWI5OWUwYmI0YWY3MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtb3VudC9DT1BZSU5HO21kNT1mYjkzZjAxZDQzNjEwNjljNTYxNjMyNzcwNTM3M2IxNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJibGtpZC9DT1BZSU5HO21kNT1mYjkzZjAxZDQzNjEwNjljNTYxNjMyNzcwNTM3M2IxNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgc3lzdGVtZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB5dGhvbi1kaXIKK0RFUEVORFMgPSAiemxpYiBuY3Vyc2VzIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBsem8tbmF0aXZlIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBsem8tbmF0aXZlIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvdXRpbC1saW51eC92JHtNQUpPUl9WRVJTSU9OfS91dGlsLWxpbnV4LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgICIKKworUEFDS0FHRVMgPSsgInV0aWwtbGludXgtYWdldHR5IHV0aWwtbGludXgtZmRpc2sgdXRpbC1saW51eC1jZmRpc2sgdXRpbC1saW51eC1zZmRpc2sgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXVtb3VudCBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1tb3VudCB1dGlsLWxpbnV4LXJlYWRwcm9maWxlIHV0aWwtbGludXgtdXVpZGQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtdXVpZGdlbiB1dGlsLWxpbnV4LWxzY3B1IHV0aWwtbGludXgtZnNjayB1dGlsLWxpbnV4LWJsa2lkIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LW1rZnMgdXRpbC1saW51eC1tY29va2llIHV0aWwtbGludXgtcmVzZXQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtbWtmcy5jcmFtZnMgdXRpbC1saW51eC1mc2NrLmNyYW1mcyB1dGlsLWxpbnV4LWZzdHJpbSBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1wYXJ0eCAke1BOfS1iYXNoLWNvbXBsZXRpb24gdXRpbC1saW51eC1od2Nsb2NrIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LWZpbmRmcyB1dGlsLWxpbnV4LWdldG9wdCB1dGlsLWxpbnV4LXN1bG9naW4iCitQQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHlsaWJtb3VudCcsICd1dGlsLWxpbnV4LXB5bGlibW91bnQnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl51dGlsLWxpbnV4LWxpYi4qIgorCitTSEFSRURfRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1ha2VpbnN0YWxsLWNob3duIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUta2lsbCAtLWVuYWJsZS1sYXN0IC0tZW5hYmxlLW1lc2cgLS1lbmFibGUtcGFydHggXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1yYXcgLS1lbmFibGUtcmVzZXQgLS1kaXNhYmxlLWxvZ2luIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpcHcgLS1kaXNhYmxlLW5ld2dycCAtLWRpc2FibGUtY2hmbi1jaHNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtd3JpdGUgLS1lbmFibGUtbW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJ1dWlkIC0tZW5hYmxlLWxpYmJsa2lkIC0tZW5hYmxlLWZzY2sgLS13aXRob3V0LXVkZXYgXAorICAgICAgICAgICAgICAgICAgICAgICB1c3JzYmluX2V4ZWNkaXI9JyR7c2JpbmRpcn0nIFwKKyIKKworRVhUUkFfT0VDT05GID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK1BBQ0tBR0VDT05GSUdfY2xhc3MtdGFyZ2V0ID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXN1IC0tZW5hYmxlLXJ1bnVzZXIsLS1kaXNhYmxlLXN1IC0tZGlzYWJsZS1ydW51c2VyLCBsaWJwYW0sIgorCisjIFJlc3BlY3QgdGhlIHN5c3RlbWQgZmVhdHVyZSBmb3IgdXVpZGQKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLCAtLXdpdGhvdXQtc3lzdGVtZCAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIsc3lzdGVtZCIKKworIyBCdWlsZCBzZXRwcml2IHJlcXVpcmVzIGxpYmNhcC1uZworUEFDS0FHRUNPTkZJR1tsaWJjYXAtbmddID0gIi0tZW5hYmxlLXNldHByaXYsLS1kaXNhYmxlLXNldHByaXYsbGliY2FwLW5nLCIKKworIyBCdWlsZCBweXRob24gYmluZGluZ3MgZm9yIGxpYm1vdW50CitQQUNLQUdFQ09ORklHW3B5bGlibW91bnRdID0gIi0td2l0aC1weXRob24gLS1lbmFibGUtcHlsaWJtb3VudCwtLXdpdGhvdXQtcHl0aG9uIC0tZGlzYWJsZS1weWxpYm1vdW50LHB5dGhvbiIKKworRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uICs9ICIke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbiIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9nZXRvcHQvZ2V0b3B0LSouKiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L3B5bGlibW91bnQubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvLmRlYnVnLyIKKworRklMRVNfdXRpbC1saW51eC1hZ2V0dHkgPSAiJHtiYXNlX3NiaW5kaXJ9L2FnZXR0eSIKK0ZJTEVTX3V0aWwtbGludXgtZmRpc2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2ZkaXNrLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtZnN0cmltID0gIiR7YmFzZV9zYmluZGlyfS9mc3RyaW0iCitGSUxFU191dGlsLWxpbnV4LWNmZGlzayA9ICIke2Jhc2Vfc2JpbmRpcn0vY2ZkaXNrIgorRklMRVNfdXRpbC1saW51eC1zZmRpc2sgPSAiJHtzYmluZGlyfS9zZmRpc2siCitGSUxFU191dGlsLWxpbnV4LXN3YXBvbm9mZiA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dhcG9uLiR7QlBOfSAke2Jhc2Vfc2JpbmRpcn0vc3dhcG9mZi4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LWxvc2V0dXAgPSAiJHtiYXNlX3NiaW5kaXJ9L2xvc2V0dXAuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1tb3VudCA9ICIke2Jhc2VfYmluZGlyfS9tb3VudC4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LW1jb29raWUgPSAiJHtiaW5kaXJ9L21jb29raWUiCitGSUxFU191dGlsLWxpbnV4LXVtb3VudCA9ICIke2Jhc2VfYmluZGlyfS91bW91bnQuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1yZWFkcHJvZmlsZSA9ICIke3NiaW5kaXJ9L3JlYWRwcm9maWxlLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtdXVpZGdlbiA9ICIke2JpbmRpcn0vdXVpZGdlbiIKK0ZJTEVTX3V0aWwtbGludXgtdXVpZGQgPSAiJHtzYmluZGlyfS91dWlkZCIKK0ZJTEVTX3V0aWwtbGludXgtcmVzZXQgPSAiJHtiYXNlX2JpbmRpcn0vcmVzZXQiCitGSUxFU191dGlsLWxpbnV4LXBhcnR4ID0gIiR7c2JpbmRpcn0vcGFydHgiCitGSUxFU191dGlsLWxpbnV4LWh3Y2xvY2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2h3Y2xvY2suJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1maW5kZnMgPSAiJHtzYmluZGlyfS9maW5kZnMiCitGSUxFU191dGlsLWxpbnV4LWdldG9wdCA9ICIke2Jhc2VfYmluZGlyfS9nZXRvcHQuJHtCUE59IgorCitGSUxFU191dGlsLWxpbnV4LXB5bGlibW91bnQgPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9weWxpYm1vdW50LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L19faW5pdF9fLioiCitGSUxFU191dGlsLWxpbnV4LWxzY3B1ID0gIiR7YmluZGlyfS9sc2NwdSIKKworRklMRVNfdXRpbC1saW51eC1mc2NrID0gIiR7YmFzZV9zYmluZGlyfS9mc2NrKiIKK0ZJTEVTX3V0aWwtbGludXgtbWtmcyA9ICIke3NiaW5kaXJ9L21rZnMiCisKK0ZJTEVTX3V0aWwtbGludXgtZnNjay5jcmFtZnMgPSAiJHtzYmluZGlyfS9mc2NrLmNyYW1mcyIKK0ZJTEVTX3V0aWwtbGludXgtbWtmcy5jcmFtZnMgPSAiJHtzYmluZGlyfS9ta2ZzLmNyYW1mcyIKKworRklMRVNfdXRpbC1saW51eC1zdWxvZ2luID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luKiIKKworIyBVdGlsLWxpbnV4JyBibGtpZCByZXBsYWNlcyB0aGUgZTJmc3Byb2dzIG9uZQorRklMRVNfdXRpbC1saW51eC1ibGtpZCA9ICIke2Jhc2Vfc2JpbmRpcn0vYmxraWQqIgorUkNPTkZMSUNUU191dGlsLWxpbnV4LWJsa2lkID0gImUyZnNwcm9ncy1ibGtpZCIKK1JSRVBMQUNFU191dGlsLWxpbnV4LWJsa2lkID0gImUyZnNwcm9ncy1ibGtpZCIKKworIyByZXNldCBjYWxscyAndHB1dCcKK1JERVBFTkRTX3V0aWwtbGludXgtcmVzZXQgKz0gIm5jdXJzZXMiCisKK1JERVBFTkRTXyR7UE59ID0gInV0aWwtbGludXgtdW1vdW50IHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXN1bG9naW4iCitSUkVDT01NRU5EU18ke1BOfSA9ICJ1dGlsLWxpbnV4LWZkaXNrIHV0aWwtbGludXgtY2ZkaXNrIHV0aWwtbGludXgtc2ZkaXNrIHV0aWwtbGludXgtbW91bnQgdXRpbC1saW51eC1yZWFkcHJvZmlsZSB1dGlsLWxpbnV4LW1rZnMgIgorCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitSUFJPVklERVNfJHtQTn0tZGV2ID0gInV0aWwtbGludXgtbGliYmxraWQtZGV2IHV0aWwtbGludXgtbGlibW91bnQtZGV2IHV0aWwtbGludXgtbGlidXVpZC1kZXYiCisKKyNTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXV1aWRkICR7UE59LWZzdHJpbSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS11dWlkZCA9ICJ1dWlkZC5zb2NrZXQgdXVpZGQuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tdXVpZGQgPSAiZGlzYWJsZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1mc3RyaW0gPSAiZnN0cmltLnRpbWVyIGZzdHJpbS5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRV8ke1BOfS1mc3RyaW0gPSAiZGlzYWJsZSIKKworZG9fY29tcGlsZSAoKSB7CisJc2V0IC1lCisJb2VfcnVubWFrZSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENQVT0gQ1BVT1BUPSAnT1BUPSR7Q0ZMQUdTfScgCit9CisKK2RvX2luc3RhbGwgKCkgeworCSMgd2l0aCBjY2FjaGUgdGhlIHRpbWVzdGFtcHMgb24gY29tcGlsZWQgZmlsZXMgbWF5CisJIyBlbmQgdXAgZWFybGllciB0aGFuIG9uIHRoZWlyIGlucHV0cywgdGhpcyBhbGxvd3MKKwkjIGZvciB0aGUgcmVzdWx0YW50IGNvbXBpbGF0aW9uIGluIHRoZSBpbnN0YWxsIHN0ZXAuCisJb2VfcnVubWFrZSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENQVT0gQ1BVT1BUPSBcCisJCSdPUFQ9JHtDRkxBR1N9JyAnQ0M9JHtDQ30nICdMRD0ke0xEfScgXAorCQknTERGTEFHUz0ke0xERkxBR1N9JyAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKwlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKworICAgICAgICBzYmlucHJvZ3M9ImFnZXR0eSBjdHJsYWx0ZGVsIGNmZGlzayB2aXB3IHZpZ3IiCisgICAgICAgIHNiaW5wcm9nc19hPSJwaXZvdF9yb290IGh3Y2xvY2sgbWtzd2FwIG1rZnMubWluaXggZnNjay5taW5peCBsb3NldHVwIHN3YXBvbiBzd2Fwb2ZmIGZkaXNrIGZzY2sgYmxraWQgYmxvY2tkZXYgZnN0cmltIHN1bG9naW4gc3dpdGNoX3Jvb3QiCisgICAgICAgIGJpbnByb2dzX2E9ImRtZXNnIGdldG9wdCBraWxsIG1vcmUgdW1vdW50IG1vdW50IGxvZ2luIHJlc2V0IHN1IgorCisgICAgICAgIGlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgCW1rZGlyIC1wICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiAkc2JpbnByb2dzICRzYmlucHJvZ3NfYTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgLWYgIiR7RH0ke3NiaW5kaXJ9LyRwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12ICIke0R9JHtzYmluZGlyfS8kcCIgIiR7RH0ke2Jhc2Vfc2JpbmRpcn0vJHAiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gJGJpbnByb2dzX2E7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1mICIke0R9JHtiaW5kaXJ9LyRwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12ICIke0R9JHtiaW5kaXJ9LyRwIiAiJHtEfSR7YmFzZV9iaW5kaXJ9LyRwIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvCisJZWNobyAnTU9VTlRBTEw9Ii10IG5vbmZzLG5vc21iZnMsbm9uY3BmcyInID4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9tb3VudGFsbAorCisJcm0gLWYgJHtEfSR7YmluZGlyfS9jaGtkdXBleGUKK30KKworIyByZXNldCBhbmQgbm9sb2dpbiBjYXVzZXMgYSBjb25mbGljdCB3aXRoIG5jdXJzZXMtbmF0aXZlIGFuZCBzaGFkb3ctbmF0aXZlCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXJtIC1mICR7RH0ke2Jhc2VfYmluZGlyfS9yZXNldAorCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vbm9sb2dpbgorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ICA9ICJkbWVzZyBraWxsIG1vcmUgbWtzd2FwIGJsb2NrZGV2IHBpdm90X3Jvb3Qgc3dpdGNoX3Jvb3QiCitBTFRFUk5BVElWRV8ke1BOfSArPSAibWtmcy5taW5peCBoZXhkdW1wIGxhc3QgbGFzdGIgbG9nZ2VyIG1lc2cgcmVuaWNlIHdhbGwiCitBTFRFUk5BVElWRV8ke1BOfSArPSAic2V0c2lkIGNocnQgZmxvY2sgdXRtcGR1bXAgZWplY3QiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkbWVzZ10gPSAiJHtiYXNlX2JpbmRpcn0vZG1lc2ciCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbF0gPSAiJHtiYXNlX2JpbmRpcn0va2lsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3JlXSA9ICIke2Jhc2VfYmluZGlyfS9tb3JlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rc3dhcF0gPSAiJHtiYXNlX3NiaW5kaXJ9L21rc3dhcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibG9ja2Rldl0gPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsb2NrZGV2IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bpdm90X3Jvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9waXZvdF9yb290IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3aXRjaF9yb290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dpdGNoX3Jvb3QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWtmcy5taW5peF0gPSAiJHtiYXNlX3NiaW5kaXJ9L21rZnMubWluaXgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWplY3RdID0gIiR7YmluZGlyfS9lamVjdCIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gIm1vdW50cG9pbnQuMSBsYXN0LjEgbGFzdGIuMSBtZXNnLjEgd2FsbC4xIG5vbG9naW4uOCBzdWxvZ2luLjggdXRtcGR1bXAuMSByZXNldC4xIGtpbGwuMSBsaWJibGtpZC4zIGJsa2lkLjggZmluZGZzLjggZnNjay44IHV1aWQuMyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3QuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGFzdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3RiLjFdID0gIiR7bWFuZGlyfS9tYW4xL2xhc3RiLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWVzZy4xXSA9ICIke21hbmRpcn0vbWFuMS9tZXNnLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludC4xXSA9ICIke21hbmRpcn0vbWFuMS9tb3VudHBvaW50LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbm9sb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9ub2xvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVzZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvcmVzZXQuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luLjhdID0gIiR7bWFuZGlyfS9tYW44L3N1bG9naW4uOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1dG1wZHVtcC4xXSA9ICIke21hbmRpcn0vbWFuMS91dG1wZHVtcC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3dhbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEvd2FsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xpYmJsa2lkLjNdID0gIiR7bWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxraWQuOF0gPSAiJHttYW5kaXJ9L21hbjgvYmxraWQuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmaW5kZnMuOF0gPSAiJHttYW5kaXJ9L21hbjgvZmluZGZzLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXVpZC4zXSA9ICIke21hbmRpcn0vbWFuMy91dWlkLjMiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtaHdjbG9jayA9ICJod2Nsb2NrIgorIyBUaGVyZSBzZWVtcyB0byBiZSBwcm9ibGVtLCBhdGxlYXN0IG9uIG5zbHUyLCB3aXRoIHRoZXNlLCB1bnRpbGwgdGhleSBhcmUKKyMgZml4ZWQgdGhlIGJ1c3lib3ggb25lcyBoYXZlIGhpZ2hlciBwcmlvcml0eQorQUxURVJOQVRJVkVfUFJJT1JJVFlbaHdjbG9ja10gPSAiMTAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaHdjbG9ja10gPSAiJHtiYXNlX3NiaW5kaXJ9L2h3Y2xvY2siCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtZmRpc2sgPSAiZmRpc2siCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmRpc2tdID0gIiR7YmFzZV9zYmluZGlyfS9mZGlzayIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1hZ2V0dHkgPSAiZ2V0dHkiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9nZXR0eSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2FnZXR0eSIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1tb3VudCA9ICJtb3VudCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3VudF0gPSAiJHtiYXNlX2JpbmRpcn0vbW91bnQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtdW1vdW50ID0gInVtb3VudCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1bW91bnRdID0gIiR7YmFzZV9iaW5kaXJ9L3Vtb3VudCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1yZWFkcHJvZmlsZSA9ICJyZWFkcHJvZmlsZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWFkcHJvZmlsZV0gPSAiJHtzYmluZGlyfS9yZWFkcHJvZmlsZSIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1sb3NldHVwID0gImxvc2V0dXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbG9zZXR1cF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2xvc2V0dXAiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtc3dhcG9ub2ZmID0gInN3YXBvZmYgc3dhcG9uIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3YXBvZmZdID0gIiR7YmFzZV9zYmluZGlyfS9zd2Fwb2ZmIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3YXBvbl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N3YXBvbiIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1mc2NrID0gImZzY2subWluaXggZnNjayIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLm1pbml4XSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjay5taW5peCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjayIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1ibGtpZCA9ICJibGtpZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibGtpZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsa2lkIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXJlc2V0ID0gInJlc2V0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Jlc2V0XSA9ICIke2JpbmRpcn0vcmVzZXQiCitBTFRFUk5BVElWRV9UQVJHRVRbcmVzZXRdID0gIiR7YmFzZV9iaW5kaXJ9L3Jlc2V0IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWdldG9wdCA9ICJnZXRvcHQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0b3B0XSA9ICIke2Jhc2VfYmluZGlyfS9nZXRvcHQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtc3Vsb2dpbiA9ICJzdWxvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW5dID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQgKCkgeworICAgIGlmICctLWVuYWJsZS1zdScgaW4gZC5nZXRWYXIoJ0VYVFJBX09FQ09ORicsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGFsdF9uYW1lID0gInN1IgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBhbHRfbmFtZSkpCisgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcycgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpLCAnICcgKyBhbHRfbmFtZSkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgJyR7YmFzZV9saWJkaXJ9JywgJ15saWIoLiopXC5zb1wuLiokJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0ndXRpbC1saW51eC1saWIlcycsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J3V0aWwtbGludXggbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSwgYWxsb3dfbGlua3M9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWIxZmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3V0aWwtbGludXg6IHRha2UgJHtzYmluZGlyfSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpZiBpdCBpcyBzZXQgdGhlcmUKK2ZpeCB0aGUgdGVzdCwgdGhlIFsgXSBzeW50YXggd2FzIGdldHRpbmcgZWF0ZW4gYnkgYXV0b2NvbmYKKworU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGJAcGJjbC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV0aWwtbGludXgtMi4yMi4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCitAQCAtNzMsNyArNzMsMTAgQEAgQUNfU1VCU1QoW2xvY2Fsc3RhdGVkaXJdKQorIHVzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgQUNfU1VCU1QoW3VzcmJpbl9leGVjZGlyXSkKKyAKKy11c3JzYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisraWYgdGVzdCAteiAiJHVzcnNiaW5fZXhlY2RpciIgOworK3RoZW4KKysgICB1c3JzYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisrZmkKKyBBQ19TVUJTVChbdXNyc2Jpbl9leGVjZGlyXSkKKyAKKyBjYXNlICRsaWJkaXIgaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjI3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNzc0ZjU1ZjlkZDIyYzAxZTQwNDFhMTgzZDhkZmYxNDgxMWYyOTExNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCA0IEFwciAyMDE0IDE3OjMzOjA0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHN5cy11dGlscy9NYWtlbW9kdWxlLmFtOiBmaXggcGFyYWxsZWwgYnVpbGQgaXNzdWUKKworVGhlIHJ1bGUgU0VUQVJDSF9NQU5fTElOS1MgaXMgdXNlZCBmb3IgdGhlIGZpbGVzIHVuZGVyIHRoZSBzeXMtdXRpbHMKK2RpciwgZm9yIGV4YW1wbGU6CisKK2VjaG8gIi5zbyBtYW44L3NldGFyY2guOCIgPiBzeXMtdXRpbHMvbGludXgzMi44CisKK2J1dCBpdCBkZXBlbmRzIG9uIG5vdGhpbmcgc28gdGhhdCB0aGUgc3lzLXV0aWxzIGRpciBtYXkgbm90IGV4aXN0LCB3ZQorY2FuIGNyZWF0ZSB0aGUgc3lzLXV0aWxzIGRpciB0byBmaXggcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtIGIvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KK2luZGV4IDYyNjUyODIuLjYyZWFkMzcgMTAwNjQ0CistLS0gYS9zeXMtdXRpbHMvTWFrZW1vZHVsZS5hbQorKysrIGIvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KK0BAIC0xMjQsNiArMTI0LDcgQEAgbWFuX01BTlMgKz0gJChTRVRBUkNIX01BTl9MSU5LUykKKyBDTEVBTkZJTEVTICs9ICQoU0VUQVJDSF9NQU5fTElOS1MpCisgCisgJChTRVRBUkNIX01BTl9MSU5LUyk6CisrCSQoTUtESVJfUCkgc3lzLXV0aWxzCisgCSQoQU1fVl9HRU4pZWNobyAiLnNvIG1hbjgvc2V0YXJjaC44IiA+ICRACisgCisgaW5zdGFsbC1leGVjLWhvb2stc2V0YXJjaDoKKy0tIAorMS44LjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAzMWE3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitjb25maWd1cmUgc2hvdWxkIGluY2x1ZGUgZXJybm8uaCBpbnN0ZWFkIG9mIGFyZ3AuaCB3aGVuCitjaGVja2luZyBmb3IgcHJlc2VuY2Ugb2YgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUKK3VjbGliYyBkZWZpbmVzIHRoaXMgdG8gYmUgY29uc3QgY2hhciogdW5saWtlIHV0aWwtbGludXgtbmcKK3doaWNoIGRlZmluZXMgdGhpcyB0byBiZSBjaGFyKiBzbyB0aGlzIGVycm9yIGdvZXMgdW5ub3RpY2VkCitvbiBnbGliYy9lZ2xpYmMgc3lzdGVtcy4KKworaGVyZSBpcyB0aGUgZXJyb3IgaXQgZml4ZXMKKworaW4gZmlsZSBpbmNsdWRlZCBmcm9tIG1vdW50UC5oOjE0OjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICBmcm9tIGNhY2hlLmM6Mjk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorL2hvbWUva3Jhai93b3JrL3NsdWdvcy9idWlsZC90bXAtc2x1Z29zLXVjbGliYy9zeXNyb290cy9uc2x1MmxlL3Vzci9pbmNsdWRlL2Vycm5vLmg6NTU6NDY6IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ19fcHJvZ25hbWUnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy4uLy4uLy4uL2luY2x1ZGUvYy5oOjExODoxNDogbm90ZTogcHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJ19fcHJvZ25hbWUnIHdhcyBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK21ha2VbM106ICoqKiBbY2FjaGUubG9dIEVycm9yIDEgICAgICAgICAgCisKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjIyLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyB1dGlsLWxpbnV4LTIuMjIuMS9jb25maWd1cmUuYWMKK0BAIC0zNzIsNyArMzcyLDcgQEAgZXNhYworIAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSBpcyBkZWZpbmVkXSkKKyBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistCSNpbmNsdWRlIDxhcmdwLmg+CisrCSNpbmNsdWRlIDxlcnJuby5oPgorIF1dLCBbWworIAlwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSA9ICJ0ZXN0IjsKKyBdXSldLCBbCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiZjIyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGYyMjBkODA5YmUxYmFhNjU0NTAzYmY2ZmY1MmYzNjMwYjBkNzAxNWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjYgTWFyIDIwMTQgMDE6MzA6MjkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3VuLmM6IHVzZSBxc29ydCgpIHRvIGluc3RlYWQgb2YgcXNvcnRfcigpCisKK3Fzb3J0X3IoKSB3YXMgYWRkZWQgdG8gZ2xpYmMgaW4gdmVyc2lvbiAyLjgsIHNvIHRoZXJlIGlzIG5vIHFzb3J0X3IoKSBvbgordGhlIGhvc3QgbGlrZSBDZW50T1MgNS54LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmZkaXNrL3NyYy9zdW4uYyB8IDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogdXRpbC1saW51eC0yLjI0LjIvbGliZmRpc2svc3JjL3N1bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjI0LjIub3JpZy9saWJmZGlzay9zcmMvc3VuLmMKKysrKyB1dGlsLWxpbnV4LTIuMjQuMi9saWJmZGlzay9zcmMvc3VuLmMKK0BAIC00MzEsMTAgKzQzMSw5IEBAIHN0YXRpYyBpbnQgc3VuX3ZlcmlmeV9kaXNrbGFiZWwoc3RydWN0IGYKKyAgICAgfQorICAgICB2ZXJpZnlfc3VuX3N0YXJ0cyA9IHN0YXJ0czsKKyAKKy0gICAgcXNvcnRfcihhcnJheSxBUlJBWV9TSVpFKGFycmF5KSxzaXplb2YoYXJyYXlbMF0pLAorLQkgIChpbnQgKCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosdm9pZCAqKSkgdmVyaWZ5X3N1bl9jbXAsCistCSAgdmVyaWZ5X3N1bl9zdGFydHMpOworLQorKyAgICBxc29ydChhcnJheSxBUlJBWV9TSVpFKGFycmF5KSxzaXplb2YoYXJyYXlbMF0pLAorKyAgICAgICAgIChpbnQgKCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopKSB2ZXJpZnlfc3VuX2NtcCk7CisrIAorICAgICBpZiAoYXJyYXlbMF0gPT0gLTEpIHsKKyAJZmRpc2tfaW5mbyhjeHQsIF8oIk5vIHBhcnRpdGlvbnMgZGVmaW5lZC4iKSk7CisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDk2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorU3VwcG9ydCBvbGRlciBob3N0cyB3aXRoIGxhdGVzdCB1dGlsLWxpbnV4LW5hdGl2ZQorCitta29zdGVtcCBpcyBub3QgZGVmaW5lZCBvbiBvbGRlciBtYWNoaW5lcy4gIFNvIHdlIGRldGVjdCB0aGlzIGFuZAorcHJvdmlkZSBhIGRlZmluZSB0aGF0IHVzZXMgbWtzdGVtcCBpbnN0ZWFkLgorCitPX0NMT0VYRUMgaXMgbm90IGRlZmluZWQgb24gb2xkZXIgbWFjaGluZXMuICBJdCBpcyBob3dldmVyIGRlZmluZWQKK2luIHRoZSAnYy5oJyBoZWFkZXIuICBGaXggdXAgdGhlIHVzZXJzIHRvIGluY2x1ZGUgJ2MuaCcuCisKK2ZkaXNrcy9mZGlza3N1bmxhYmVsLmMgd2FzIG1vZGlmaWVkIHRvIHVzZSBxc29ydF9yLCBob3dldmVyCit0aGlzIGlzIG5vdCBkZWZpbmVkIG9uIG9sZGVyIGhvc3RzLiAgUmV2ZXJ0OgorICBjb21taXQgYzY5YmJjYTljMWY2NjQ1MDk3YmQyMGZlM2EyMWY1YTk5YTJhMDY5OAorICBmZGlzazogKHN1bik6IHVzZSBhc2sgQVBJLCByZW1vdmUgZ2xvYmFsIHZhcmlhYmxlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCitQYXRjaGVzIHJldmVydCB1cHN0cmVhbSBjaGFuZ2VzIGluIG9yZGVyIHRvIHN1cHBvcnQgb2xkZXIKK21hY2hpbmVzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxICsKKyBpbmNsdWRlL2MuaCAgfCA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlYjM2ODBiLi45M2UwMTVmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMTgsNiArMzE4LDcgQEAgQUNfQ0hFQ0tfRlVOQ1MoWyBcCisgCWxsc2VlayBcCisgCWxzZWVrNjQgXAorIAltZW1wY3B5IFwKKysJbWtvc3RlbXAgXAorIAluYW5vc2xlZXAgXAorIAlvcGVuX21lbXN0cmVhbSBcCisgCXBlcnNvbmFsaXR5IFwKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2MuaCBiL2luY2x1ZGUvYy5oCitpbmRleCBlNDIzZThiLi5jZjMzYjk0IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9jLmgKKysrKyBiL2luY2x1ZGUvYy5oCitAQCAtMjMzLDYgKzIzMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBkaXJmZChESVIgKmQpCisgI2VuZGlmCisgCisgLyoKKysgKiBta29zdGVtcCByZXBsYWNlbWVudAorKyAqLworKyNpZm5kZWYgSEFWRV9NS09TVEVNUAorKyNkZWZpbmUgbWtvc3RlbXAodGVtcGxhdGUsIGZsYWdzKSBta3N0ZW1wKHRlbXBsYXRlKQorKyNlbmRpZgorKworKy8qCisgICogTUFYSE9TVE5BTUVMRU4gcmVwbGFjZW1lbnQKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHNpemVfdCBnZXRfaG9zdG5hbWVfbWF4KHZvaWQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctMi4xNi1tb3VudF9sb2NrX3BhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3M2Q3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBGSFMgaW5kaWNhdGVzIHRoYXQgL2V0YyBtdXN0IGJlIGNhcGFibGUgb2YgYmVpbmcgbW91bnRlZCBSL08uCisKK1RoZSBGSFMgYWxzbyBpbmRpY2F0ZXMgdGhhdCBsb2NrIGZpbGVzIGJlbG9uZyBpbiAvdmFyL2xvY2ssIGFuZCAvdmFyIG11c3QKK2JlIFIvVyBhcyBzb29uIGFzIHBvc3NpYmxlIGR1cmluZyBib290LgorCitUaGlzIHBhdGNoIG1vdmVzIHRoZSBtdGFiIGxvY2sgZmlsZSBmcm9tIHRoZSBwb3RlbnRpYWxseSBSL08gL2V0YywgdG8gdGhlCitSL1cgL3Zhci9sb2NrIGFyZWEuICBUaGlzIGxvY2sgZmlsZSBpcyB1c2VkIHdoZW4gbW91bnRpbmcgZGlza3MgYW5kIG1ha2luZworb3RoZXIgbW91bnQgYWRqdXN0bWVudHMuICBUaGUgX1BBVEhfTU9VTlRFRF9UTVAgaXMgbm90IGFkanVzdGVkLCBhcyBmYWlsaW5nCit0byB3cml0ZSB0byB0aGlzIGZpbGUgZG9lcyBub3QgY2F1c2UgYW55IGZ1bmN0aW9uYWwgbGltaXRhdGlvbnMuCisKKyhOb3RlLCBpZiAvZXRjIGlzIFIvTywgdGhlbiAvZXRjL210YWIgc2hvdWxkIGJlIGEgc3ltbGluayB0byAvcHJvYy9tb3VudHMpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIHV0aWwtbGludXgtbmctMi4xNi9pbmNsdWRlL3BhdGhuYW1lcy5oLm9yaWcKKysrKyB1dGlsLWxpbnV4LW5nLTIuMTYvaW5jbHVkZS9wYXRobmFtZXMuaAorQEAgLTkwLDcgKzkwLDcgQEAKKyAjIGVuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBfUEFUSF9NT1VOVEVEX0xPQ0sJX1BBVEhfTU9VTlRFRCAifiIKKysjZGVmaW5lIF9QQVRIX01PVU5URURfTE9DSwkiL3Zhci9sb2NrL210YWJ+IgorICNkZWZpbmUgX1BBVEhfTU9VTlRFRF9UTVAJX1BBVEhfTU9VTlRFRCAiLnRtcCIKKyAKKyAjaWZuZGVmIF9QQVRIX0RFVgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzE3YTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxvZ2luLXV0aWxzL2xvZ2luLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbG9naW4tdXRpbHMvbG9naW4uYyBiL2xvZ2luLXV0aWxzL2xvZ2luLmMKK2luZGV4IGViYjc2ZjUuLjM4Yzg4MWIgMTAwNjQ0CistLS0gYS9sb2dpbi11dGlscy9sb2dpbi5jCisrKysgYi9sb2dpbi11dGlscy9sb2dpbi5jCitAQCAtMTExMCw2ICsxMTEwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAljaGFyICpidWZmOworIAlpbnQgY2hpbGRBcmdjID0gMDsKKyAJaW50IHJldGNvZGU7CisrCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworIAorIAljaGFyICpwd2RidWYgPSBOVUxMOworIAlzdHJ1Y3QgcGFzc3dkICpwd2QgPSBOVUxMLCBfcHdkOworQEAgLTExMjMsNyArMTEyNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJdGltZW91dCA9ICh1bnNpZ25lZCBpbnQpZ2V0bG9naW5kZWZzX251bSgiTE9HSU5fVElNRU9VVCIsIExPR0lOX1RJTUVPVVQpOworIAorIAlzaWduYWwoU0lHQUxSTSwgdGltZWRvdXQpOworLQlzaWdpbnRlcnJ1cHQoU0lHQUxSTSwgMSk7CS8qIHdlIGhhdmUgdG8gaW50ZXJydXB0IHN5c2NhbGxzIGxpa2UgaW9jdGwoKSAqLworKwkodm9pZCkgc2lnYWN0aW9uKFNJR0FMUk0sIE5VTEwsICZhY3QpOworKwlhY3Quc2FfZmxhZ3MgJj0gflNBX1JFU1RBUlQ7CisrCXNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0LCBOVUxMKTsKKyAJYWxhcm0odGltZW91dCk7CisgCXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKyAJc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2RjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yNi4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK01BSk9SX1ZFUlNJT04gPSAiMi4yNiIKK3JlcXVpcmUgdXRpbC1saW51eC5pbmMKKworIyBUbyBzdXBwb3J0IG9sZGVyIGhvc3RzLCB3ZSBuZWVkIHRvIHBhdGNoIGFuZC9vciByZXZlcnQKKyMgc29tZSB1cHN0cmVhbSBjaGFuZ2VzLiAgT25seSBkbyB0aGlzIGZvciBuYXRpdmUgcGFja2FnZXMuCitPTERIT1NUID0gIiIKK09MREhPU1RfY2xhc3MtbmF0aXZlID0gImZpbGU6Ly91dGlsLWxpbnV4LW5hdGl2ZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggXAorCQkJIgorCitTUkNfVVJJICs9ICJmaWxlOi8vdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgJHtPTERIT1NUfSBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiOWJkZjM2OGMzOTVmMWI3MDMyNWQwZWIyMmM3ZjQ4ZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUyOWJkYTE0MjUyOGE0OGEwYTk1M2MzOWZmNjMwOTM2NTFhNDgwOTA0MmUxNzkwZmJkNmFhODY2M2ZkOTY2NiIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gInNjYW5mX2N2X2FsbG9jX21vZGlmaWVyPW1zIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZmFsbG9jYXRlIFwKKwkJCSAgICAgLS1kaXNhYmxlLXVzZS10dHktZ3JvdXAgXAorIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZhbGxvY2F0ZSBcCisJCQkJLS1kaXNhYmxlLXVzZS10dHktZ3JvdXAgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9DT1BZSU5HLk1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTdkNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCitEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK09USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUgorVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZCBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL21vdW50LWNvcHliaW5kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhZWFmODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKyMKKyMgUGVyZm9ybSBhIGJpbmQgbW91bnQsIGNvcHlpbmcgZXhpc3RpbmcgZmlsZXMgYXMgd2UgZG8gc28gdG8gZW5zdXJlIHRoZQorIyBvdmVybGFpZCBwYXRoIGhhcyB0aGUgbmVjZXNzYXJ5IGNvbnRlbnQuCisKK2lmIFsgJCMgLWx0IDIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJVc2FnZTogJDAgc3BlYyBtb3VudHBvaW50IFtPUFRJT05TXSIKKyAgICBleGl0IDEKK2ZpCisKK3NwZWM9JDEKK21vdW50cG9pbnQ9JDIKKworaWYgWyAkIyAtZ3QgMiBdOyB0aGVuCisgICAgb3B0aW9ucz0kMworZWxzZQorICAgIG9wdGlvbnM9CitmaQorCitbIC1uICIkb3B0aW9ucyIgXSAmJiBvcHRpb25zPSIsJG9wdGlvbnMiCisKK21rZGlyIC1wICIke3NwZWMlLyp9IgoraWYgWyAtZCAiJG1vdW50cG9pbnQiIF07IHRoZW4KKyAgICBpZiBbICEgLWQgIiRzcGVjIiBdOyB0aGVuCisgICAgICAgIG1rZGlyICIkc3BlYyIKKyAgICAgICAgY3AgLXBQUiAiJG1vdW50cG9pbnQiLy4gIiRzcGVjLyIKKyAgICBmaQorZWxpZiBbIC1mICIkbW91bnRwb2ludCIgXTsgdGhlbgorICAgIGlmIFsgISAtZiAiJHNwZWMiIF07IHRoZW4KKyAgICAgICAgY3AgLXBQICIkbW91bnRwb2ludCIgIiRzcGVjIgorICAgIGZpCitmaQorCittb3VudCAtbyAiYmluZCRvcHRpb25zIiAiJHNwZWMiICIkbW91bnRwb2ludCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4gYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzM1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluCkBAIC0wLDAgKzEsMTkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QmluZCBtb3VudCB2b2xhdGlsZSBAd2hlcmVACitEZWZhdWx0RGVwZW5kZW5jaWVzPWZhbHNlCitCZWZvcmU9bG9jYWwtZnMudGFyZ2V0CitSZXF1aXJlc01vdW50c0Zvcj1Ad2hhdHBhcmVudEAgQHdoZXJlcGFyZW50QAorQ29uZGl0aW9uUGF0aElzUmVhZFdyaXRlPUB3aGF0cGFyZW50QAorQ29uZGl0aW9uUGF0aEV4aXN0cz1Ad2hlcmVACitDb25kaXRpb25QYXRoSXNSZWFkV3JpdGU9IUB3aGVyZUAKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK1JlbWFpbkFmdGVyRXhpdD1ZZXMKK1N0YW5kYXJkT3V0cHV0PXN5c2xvZworVGltZW91dFNlYz0wCitFeGVjU3RhcnQ9L3NiaW4vbW91bnQtY29weWJpbmQgQHdoYXRAIEB3aGVyZUAKK0V4ZWNTdG9wPS9iaW4vdW1vdW50IEB3aGVyZUAKKworW0luc3RhbGxdCitXYW50ZWRCeT1sb2NhbC1mcy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvdm9sYXRpbGUtYmluZHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlNzI3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiVm9sYXRpbGUgYmluZCBtb3VudCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiBmb3IgcmVhZC1vbmx5LXJvb3RmcyIKK0RFU0NSSVBUSU9OID0gIiR7U1VNTUFSWX0iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTUlUO21kNT01NzUwZjNhYTRlYTJiMDBjMmJmMjFiMmIyYTdiNzE0ZCIKKworU1JDX1VSSSA9ICJcCisgICAgZmlsZTovL21vdW50LWNvcHliaW5kIFwKKyAgICBmaWxlOi8vQ09QWUlORy5NSVQgXAorICAgIGZpbGU6Ly92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2ggc3lzdGVtZCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK1ZPTEFUSUxFX0JJTkRTID89ICJcCisgICAgL3Zhci92b2xhdGlsZS9saWIgL3Zhci9saWJcblwKKyIKK1ZPTEFUSUxFX0JJTkRTW3R5cGVdID0gImxpc3QiCitWT0xBVElMRV9CSU5EU1tzZXBhcmF0b3JdID0gIlxuIgorCitkZWYgdm9sYXRpbGVfc3lzdGVtZF9zZXJ2aWNlcyhkKToKKyAgICBzZXJ2aWNlcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgiVk9MQVRJTEVfQklORFMiLCBkKToKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aGF0LCB3aGVyZSA9IGxpbmUuc3BsaXQoTm9uZSwgMSkKKyAgICAgICAgc2VydmljZXMuYXBwZW5kKCIlcy5zZXJ2aWNlIiAlIHdoYXRbMTpdLnJlcGxhY2UoIi8iLCAiLSIpKQorICAgIHJldHVybiAiICIuam9pbihzZXJ2aWNlcykKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiR7QHZvbGF0aWxlX3N5c3RlbWRfc2VydmljZXMoZCl9IgorCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UiCisKK2RvX2NvbXBpbGUgKCkgeworICAgIHdoaWxlIHJlYWQgc3BlYyBtb3VudHBvaW50OyBkbworICAgICAgICBpZiBbIC16ICIkc3BlYyIgXTsgdGhlbgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZmkKKworICAgICAgICBzZXJ2aWNlZmlsZT0iJHtzcGVjIy99IgorICAgICAgICBzZXJ2aWNlZmlsZT0iJChlY2hvICIkc2VydmljZWZpbGUiIHwgdHIgLyAtKS5zZXJ2aWNlIgorICAgICAgICBzZWQgLWUgInMjQHdoYXRAIyRzcGVjI2c7IHMjQHdoZXJlQCMkbW91bnRwb2ludCNnIiBcCisgICAgICAgICAgICAtZSAicyNAd2hhdHBhcmVudEAjJHtzcGVjJS8qfSNnOyBzI0B3aGVyZXBhcmVudEAjJHttb3VudHBvaW50JS8qfSNnIiBcCisgICAgICAgICAgICB2b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluID4kc2VydmljZWZpbGUKKyAgICBkb25lIDw8RU5ECiske0BkLmdldFZhcignVk9MQVRJTEVfQklORFMnLCBUcnVlKS5yZXBsYWNlKCJcXG4iLCAiXG4iKX0KK0VORAorCisgICAgaWYgWyAtZSB2YXItdm9sYXRpbGUtbGliLnNlcnZpY2UgXTsgdGhlbgorICAgICAgICAjIEFzIHRoZSBzZWVkIGlzIHN0b3JlZCB1bmRlciAvdmFyL2xpYiwgZW5zdXJlIHRoYXQgdGhpcyBzZXJ2aWNlIHJ1bnMKKyAgICAgICAgIyBhZnRlciB0aGUgdm9sYXRpbGUgL3Zhci9saWIgaXMgbW91bnRlZC4KKyAgICAgICAgc2VkIC1pIC1lICIvXkJlZm9yZT0vcy9cJC8gc3lzdGVtZC1yYW5kb20tc2VlZC5zZXJ2aWNlLyIgXAorICAgICAgICAgICAgICAgLWUgIi9eV2FudGVkQnk9L3MvXCQvIHN5c3RlbWQtcmFuZG9tLXNlZWQuc2VydmljZS8iIFwKKyAgICAgICAgICAgICAgIHZhci12b2xhdGlsZS1saWIuc2VydmljZQorICAgIGZpCit9Citkb19jb21waWxlW2RpcnNdID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBtb3VudC1jb3B5YmluZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIGZvciBzZXJ2aWNlIGluICR7U1lTVEVNRF9TRVJWSUNFX3ZvbGF0aWxlLWJpbmRzfTsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICRzZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworICAgIGRvbmUKK30KK2RvX2luc3RhbGxbZGlyc10gPSAiJHtXT1JLRElSfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI2ODkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK3psaWIuaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZWVhODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorQWRkICdwdGVzdCcgdGFyZ2V0IHRvIE1ha2VmaWxlLCB0byBydW4gdGVzdHMgd2l0aG91dCBjaGVja2luZyBkZXBlbmRlbmNpZXMuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4JMjAxMy0wNi0xMCAxMzo0ODoxNC4zMjE5NTkxNjIgKzAyMDAKKysrKyBiL01ha2VmaWxlLmluCTIwMTMtMDYtMTAgMTM6NDk6MzYuNjg2NDc2NDQ4ICswMjAwCitAQCAtODMsNiArODMsOSBAQAorIHRlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKKyAKKyB0ZXN0c3RhdGljOiBzdGF0aWMKKysJQG1ha2UgcnVudGVzdHN0YXRpYworKworK3J1bnRlc3RzdGF0aWM6CisgCUBUTVBTVD10bXBzdF8kJDsgXAorIAlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgJiYgLi9leGFtcGxlICQkVE1QU1QgOyB0aGVuIFwKKyAJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgT0sgKioqJzsgXAorQEAgLTkyLDYgKzk1LDkgQEAKKyAJcm0gLWYgJCRUTVBTVAorIAorIHRlc3RzaGFyZWQ6IHNoYXJlZAorKwlAbWFrZSBydW50ZXN0c2hhcmVkCisrCisrcnVudGVzdHNoYXJlZDoKKyAJQExEX0xJQlJBUllfUEFUSD1gcHdkYDokKExEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWV9QQVRIOyBcCisgCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCisgCURZTERfTElCUkFSWV9QQVRIPWBwd2RgOiQoRFlMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIOyBcCitAQCAtMTA1LDYgKzExMSw5IEBACisgCXJtIC1mICQkVE1QU0gKKyAKKyB0ZXN0NjQ6IGFsbDY0CisrCUBtYWtlIHJ1bnRlc3RhbGw2NAorKworK3J1bnRlc3RhbGw2NDoKKyAJQFRNUDY0PXRtcDY0XyQkOyBcCisgCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQgJCRUTVA2NDsgdGhlbiBcCisgCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBPSyAqKionOyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9sZGZsYWdzLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitPYmV5IExERkxBR1MgZm9yIHRlc3RzCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHpsaWItMS4yLjgub3JpZy9NYWtlZmlsZS5pbgorKysrIHpsaWItMS4yLjgvTWFrZWZpbGUuaW4KK0BAIC0yNiw3ICsyNiw3IEBAIENGTEFHUz0tTworCisgU0ZMQUdTPS1PCisgTERGTEFHUz0KKy1URVNUX0xERkxBR1M9LUwuIGxpYnouYQorK1RFU1RfTERGTEFHUz0tTC4gJChMREZMQUdTKQorIExEU0hBUkVEPSQoQ0MpCisgQ1BQPSQoQ0MpIC1FCisKK0BAIC0xNzYsMjIgKzE3NiwyMiBAQCBwbGFjZWJvICQoU0hBUkVETElCVik6ICQoUElDX09CSlMpIGxpYnouCisJLUBybWRpciBvYmpzCisKKyBleGFtcGxlJChFWEUpOiBleGFtcGxlLm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgbWluaWd6aXAkKEVYRSk6IG1pbmlnemlwLm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBleGFtcGxlc2gkKEVYRSk6IGV4YW1wbGUubyAkKFNIQVJFRExJQlYpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gLUwuICQoU0hBUkVETElCVikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKFRFU1RfTERGTEFHUykgJChTSEFSRURMSUJWKQorCisgbWluaWd6aXBzaCQoRVhFKTogbWluaWd6aXAubyAkKFNIQVJFRExJQlYpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vIC1MLiAkKFNIQVJFRExJQlYpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKSAkKFNIQVJFRExJQlYpCisKKyBleGFtcGxlNjQkKEVYRSk6IGV4YW1wbGU2NC5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZTY0Lm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlNjQubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBtaW5pZ3ppcDY0JChFWEUpOiBtaW5pZ3ppcDY0Lm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcDY0Lm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcDY0Lm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgaW5zdGFsbC1saWJzOiAkKExJQlMpCisJLUBpZiBbICEgLWQgJChERVNURElSKSQoZXhlY19wcmVmaXgpICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKGV4ZWNfcHJlZml4KTsgZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDNiNDgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKKworV2hlbiAvZXRjL2xkLnNvLmNhY2hlIGlzIHdyaXRlYWJsZSBieSB1c2VyIHJ1bm5pbmcgYml0YmFrZSB0aGVuIGl0IGNyZWF0ZXMgaW52YWxpZCBjYWNoZSAKKyhpbiBteSBjYXNlIGxpYnN0ZGMrKy5zbyBjYW5ub3QgYmUgZm91bmQgYWZ0ZXIgYnVpbGRpbmcgemxpYigtbmF0aXZlKSBhbmQgSSBoYXZlIHRvIGNhbGwgCit0b3VjaCAqL2xpYnN0ZGMrKy5zbyAmJiAvc2Jpbi9sZGNvbmZpZyB0byBmaXggaXQuCisKK1NvIHJlbW92ZSBsZGNvbmZpZyBjYWxsIGZyb20gbWFrZSBpbnN0YWxsLWxpYnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK2RpZmYgLXVOciB6bGliLTEuMi42Lm9yaWcvTWFrZWZpbGUuaW4gemxpYi0xLjIuNi9NYWtlZmlsZS5pbgorLS0tIHpsaWItMS4yLjYub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTAxLTI4IDIzOjQ4OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIHpsaWItMS4yLjYvTWFrZWZpbGUuaW4JMjAxMi0wMi0xMyAxNTozODoyMC41Nzc3MDA3MjMgKzAxMDAKK0BAIC0xOTksNyArMTk5LDYgQEAKKyAJICBybSAtZiAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKyAJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpOyBcCisgCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKy0JICAoJChMRENPTkZJRykgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAorIAlmaQorIAljcCB6bGliLjMgJChERVNURElSKSQobWFuM2RpcikKKyAJY2htb2QgNjQ0ICQoREVTVERJUikkKG1hbjNkaXIpL3psaWIuMwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0ZDlkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdHN0YXRpYyBydW50ZXN0c2hhcmVkIHwgc2VkIC1yIC1lICdzL14oXHMrXCorICguKz8pIHRlc3QgT0sgXCorKS9cMVxuUEFTUzogXDIvJyAtZSAncy9eKFxzK1wqKyAoLis/KSB0ZXN0IEZBSUxFRCBcKispL1wxXG5GQUlMOiBcMi8nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3MGFkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlpsaWIgQ29tcHJlc3Npb24gTGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlpsaWIgaXMgYSBnZW5lcmFsLXB1cnBvc2UsIHBhdGVudC1mcmVlLCBsb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIFwKK2xpYnJhcnkgd2hpY2ggaXMgdXNlZCBieSBtYW55IGRpZmZlcmVudCBwcm9ncmFtcy4iCitIT01FUEFHRSA9ICJodHRwOi8vemxpYi5uZXQvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vemxpYi5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjM7bWQ1PWZkZTYxMmRmMWU1OTMzYzQyOGI3Mzg0NGEwYzQ5NGZkIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuemxpYi5uZXQvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1ydW50ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjI4ZjEyMDVkOGRkMjAwMWYyNmZlYzFlOGMyY2ViZTM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzMWRmMDQzMjM2ZGY4ZTlhNzY2N2I5ZTNiYjM3ZTFmY2IxMjIwYTBmMTYzYjZkZTI2MjY3NzRiOTU5MGQwNTciCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbmZpZ3VyZSAoKXsKKwkuL2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gLS1zaGFyZWQgLS1saWJkaXI9JHtsaWJkaXJ9Cit9CisKK2RvX2NvbXBpbGUgKCl7CisJb2VfcnVubWFrZQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2Ugc3RhdGljIHNoYXJlZAorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlpbnN0YWxsICR7Qn0vTWFrZWZpbGUgICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9leGFtcGxlICAgICR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAke0J9L21pbmlnemlwICAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vZXhhbXBsZXNoICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9taW5pZ3ppcHNoICR7RH0ke1BURVNUX1BBVEh9Cit9CisKKyMgTW92ZSB6bGliIHNoYXJlZCBsaWJyYXJpZXMgZm9yIHRhcmdldCBidWlsZHMgdG8gJGJhc2VfbGliZGlyIHNvIHRoZSBsaWJyYXJ5CisjIGNhbiBiZSB1c2VkIGluIGVhcmx5IGJvb3QgYmVmb3JlICRwcmVmaXggaXMgbW91bnRlZC4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKwlpZiBbICR7YmFzZV9saWJkaXJ9ICE9ICR7bGliZGlyfSBdCisJdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9CisJCW12ICR7RH0vJHtsaWJkaXJ9L2xpYnouc28uKiAke0R9LyR7YmFzZV9saWJkaXJ9CisJCWxpYm5hbWU9YHJlYWRsaW5rICR7RH0vJHtsaWJkaXJ9L2xpYnouc29gCisJCWxuIC1zZiAke0BvZS5wYXRoLnJlbGF0aXZlKCIke2xpYmRpcn0iLCAiJHtiYXNlX2xpYmRpcn0iKX0vJGxpYm5hbWUgJHtEfSR7bGliZGlyfS9saWJ6LnNvCisJZmkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjYzlmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSw3MCBAQAorcmVxdWlyZSBhcHQuaW5jCitpbmhlcml0IG5hdGl2ZQorCitERVBFTkRTICs9ICJkcGtnLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBkYi1uYXRpdmUgY3VybC1uYXRpdmUgeHotbmF0aXZlIgorUEFDS0FHRVMgPSAiIgorVVNFX05MUyA9ICJ5ZXMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kYl9saW5raW5nX2hhY2sucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2ggXAorIgorCitweXRob24gZG9faW5zdGFsbCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19pbnN0YWxsX2Jhc2UnLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9faW5zdGFsbF9jb25maWcnLCBkKQorfQorCitweXRob24gZG9faW5zdGFsbF9jb25maWcgKCkgeworICAgIGluZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywxKSkKKyAgICBpbmZpbGUgPSBmaWxlKG9lLnBhdGguam9pbihpbmRpciwgJ2ZpbGVzJywgJ2FwdC5jb25mJyksICdyJykKKyAgICBkYXRhID0gaW5maWxlLnJlYWQoKQorICAgIGluZmlsZS5jbG9zZSgpCisKKyAgICBkYXRhID0gZC5leHBhbmQoZGF0YSkKKworICAgIG91dGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcignRCcsIFRydWUpLCBkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCAnYXB0JykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0ZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMob3V0ZGlyKQorCisgICAgb3V0cGF0aCA9IG9lLnBhdGguam9pbihvdXRkaXIsICdhcHQuY29uZi5zYW1wbGUnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwYXRoKToKKyAgICAgICAgb3V0ZmlsZSA9IGZpbGUob3V0cGF0aCwgJ3cnKQorICAgICAgICBvdXRmaWxlLndyaXRlKGRhdGEpCisgICAgICAgIG91dGZpbGUuY2xvc2UoKQorfQorCitkb19pbnN0YWxsX2Jhc2UgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNkcm9tICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZ2V0ICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY29uZmlnICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY2FjaGUgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1zb3J0cGtncyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1mdHBhcmNoaXZlICR7RH0ke2JpbmRpcn0vCisKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXByaXZhdGUgJHtEfSR7bGliZGlyfS8KKworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcGtnJEdMSUJDX1ZFUiRMSUJTVERDUFBfVkVSICR7RH0ke2xpYmRpcn0vCisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1pbnN0JEdMSUJDX1ZFUiRMSUJTVERDUFBfVkVSICR7RH0ke2xpYmRpcn0vCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vYXB0L21ldGhvZHMKKwlpbnN0YWxsIC1tIDA3NTUgYmluL21ldGhvZHMvKiAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzLworCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kc2VsZWN0L2Rlc2MuYXB0ICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9uYW1lcyAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3QvaW5zdGFsbCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3Qvc2V0dXAgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3VwZGF0ZSAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9hcHQuY29uZi5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvcHJlZmVyZW5jZXMuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FwdC9saXN0cy9wYXJ0aWFsCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9hcHQvYXJjaGl2ZXMvcGFydGlhbAorCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9sb2cvYXB0LworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjYwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGFwdC1uYXRpdmUuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbm8tY3VybC5wYXRjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1M2FhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsNzggQEAKK2FwdC1tYW5wYWdlcz0iZG9jL2FwdC1jYWNoZS44IFwKKwkgICAgICBkb2MvYXB0LWNkcm9tLjggXAorCSAgICAgIGRvYy9hcHQtY29uZmlnLjggXAorCSAgICAgIGRvYy9hcHQtZ2V0LjggXAorCSAgICAgIGRvYy9hcHQuOCBcCisJICAgICAgZG9jL2FwdC5jb25mLjUgXAorCSAgICAgIGRvYy9hcHRfcHJlZmVyZW5jZXMuNSBcCisJICAgICAgZG9jL3NvdXJjZXMubGlzdC41IgorYXB0LXV0aWxzLW1hbnBhZ2VzPSJkb2MvYXB0LWV4dHJhY3R0ZW1wbGF0ZXMuMSBcCisJCSAgICBkb2MvYXB0LXNvcnRwa2dzLjEiCisKK2RlZiBnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgbWFucGFnZXMpOgorICAgIGltcG9ydCByZQorICAgIG1hbnBhZ2VzID0gcmUuc3ViKHInXGJkb2MvKFxTKykvKFxTKylcLlwxXC4oLilcYicsIHInJHttYW5kaXJ9L1wxL21hblwzL1wyLlwzJywgbWFucGFnZXMpCisgICAgbWFucGFnZXMgPSByZS5zdWIocidcYmRvYy8oXFMrKVwuKC4pXGInLCByJyR7bWFuZGlyfS9tYW5cMi9cMS5cMicsIG1hbnBhZ2VzKQorICAgIHJldHVybiBtYW5wYWdlcworCitkZWYgZ2V0X2NvbW1hbmRzX2FwdF9kb2MoZCwgYmIsIG1hbnBhZ2VzKToKKyAgICBzID0gbGlzdCgpCisgICAgX19kaXJfY2FjaGVfXyA9IGxpc3QoKQorICAgIGZvciBtIGluIG1hbnBhZ2VzLnNwbGl0KCk6CisgICAgICAgIGRlc3QgPSBnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgbSkKKyAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKGRlc3QpCisgICAgICAgIGlmIG5vdCBkaXIgaW4gX19kaXJfY2FjaGVfXzoKKyAgICAgICAgICAgIHMuYXBwZW5kKCJpbnN0YWxsIC1kICR7RH0vJXMiICUgZGlyKQorICAgICAgICAgICAgX19kaXJfY2FjaGVfXy5hcHBlbmQoZGlyKQorICAgICAgICBzLmFwcGVuZCgiaW5zdGFsbCAtbSAwNjQ0ICVzICR7RH0vJXMiICUgKG0sIGRlc3QpKQorICAgIHJldHVybiAiXG4iLmpvaW4ocykKKworUEFDS0FHRVMgKz0gIiR7UE59LXV0aWxzICR7UE59LXV0aWxzLWRvYyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9hcHQtY2Ryb20gJHtiaW5kaXJ9L2FwdC1nZXQgXAorCSAgICAgICAke2JpbmRpcn0vYXB0LWNvbmZpZyAke2JpbmRpcn0vYXB0LWNhY2hlIFwKKwkgICAgICAgJHtsaWJkaXJ9L2FwdCAke2xpYmRpcn0vbGliYXB0Ki5zby4qIFwKKwkgICAgICAgJHtsb2NhbHN0YXRlZGlyfSAke3N5c2NvbmZkaXJ9IFwKKwkgICAgICAgJHtsaWJkaXJ9L2Rwa2ciCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vYXB0LXNvcnRwa2dzICR7YmluZGlyfS9hcHQtZXh0cmFjdHRlbXBsYXRlcyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke0BnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgZC5nZXRWYXIoJ2FwdC1tYW5wYWdlcycsIFRydWUpKX0gXAorCQkgICAke2RvY2Rpcn0vYXB0IgorRklMRVNfJHtQTn0tdXRpbHMtZG9jID0gIiR7QGdldF9maWxlc19hcHRfZG9jKGQsIGJiLCBkLmdldFZhcignYXB0LXV0aWxzLW1hbnBhZ2VzJywgVHJ1ZSkpfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vbGliYXB0Ki5zbyAke2luY2x1ZGVkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlzZXQgLXgKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1rZXkgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jZHJvbSAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWdldCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNvbmZpZyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNhY2hlICR7RH0ke2JpbmRpcn0vCisKKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1zb3J0cGtncyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMgJHtEfSR7YmluZGlyfS8KKworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcGtnICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LWluc3QgJHtEfSR7bGliZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9tZXRob2RzLyogJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcy8KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9kZXNjLmFwdCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvbmFtZXMgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L2luc3RhbGwgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3NldHVwICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC91cGRhdGUgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvYXB0LmNvbmYuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L3NvdXJjZXMubGlzdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvcHJlZmVyZW5jZXMuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FwdC9saXN0cy9wYXJ0aWFsCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9hcHQvYXJjaGl2ZXMvcGFydGlhbAorCWluc3RhbGwgLWQgJHtEfSR7ZG9jZGlyfS9hcHQvZXhhbXBsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kb2MvZXhhbXBsZXMvKiAke0R9JHtkb2NkaXJ9L2FwdC9leGFtcGxlcy8KKworCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vYXB0LXBrZy8KKwlpbnN0YWxsIC1tIDA2NDQgaW5jbHVkZS9hcHQtcGtnLyouaCAke0R9JHtpbmNsdWRlZGlyfS9hcHQtcGtnLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDhiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJBZHZhbmNlZCBmcm9udC1lbmQgZm9yIGRwa2ciCitMSUNFTlNFID0gIkdQTHYyLjArIgorU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTUwODA1VDA5NDkyOFovcG9vbC9tYWluL2EvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdXNlLWhvc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8tbmxzLWRwa2cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2RvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXRlc3QucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNjUwNWM0Mjk3YjMzOGFkYjIwODdjZTg3YmJjNGEyNzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2ZiMWRlOTU5ODM2M2M0MTY1OTFkNDllM2MyODU0NThlMDk1YjAzNWU2YzA2ZDViOTQ0YTU0ZTE1ZmM5YjU0MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1hdXRvcG9pbnQsYXV0b2hlYWRlciIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgcm0gLXJmICR7U30vYnVpbGRsaWIvY29uZmlnLnN1YgorICAgIHJtIC1yZiAke1N9L2J1aWxkbGliL2NvbmZpZy5ndWVzcworfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hcHQvbWV0aG9kcy8uZGVidWcvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzA2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKQEAgLTAsMCArMSwzNzggQEAKK0Zyb20gMTA2Nzk3ZjFjNjZmYTU3OGRhZDIxZmQ5MzgwYmY5ZDU3NjU3M2RmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjIgTWF5IDIwMTUgMDg6MDU6MTUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJhbHdheXMgcnVuICdkcGtnIC0tY29uZmlndXJlIC1hJyBhdCB0aGUgZW5kIG9mIG91cgorIGRwa2cgY2FsbGluZ3MiCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgYTJhNzVmZjQ1MTZmNzYwOWY0YzU1YjQyMjcwYWJiOGQwODk0M2M2MCwgd2hpY2gKK2Fsd2F5cyBydW4gJ2Rwa2cgLS1jb25maWd1cmUgLWEnIGF0IHRoZSBlbmQgb2Ygb3VyIGRwa2cgY2FsbGluZ3MsCitidXQgaXQgZG9lcyBub3Qgd29yayBmb3IgY3Jvc3MtY29tcGlsZSwgc2luY2UgdGhlIHJvb3RmcyBkaXIgY2FuIG5vdAorYmUgcGFzc2VkIGludG8gZHBrZywgYW5kIGxlYWQgdG8gdGhlIGJlbG93IHNpbWlsYXIgZXJyb3I6CisgICAtLS0tLS0tCisgICB8bWtkaXI6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICcvdXNyL2xpYi9vcGtnJzogUGVybWlzc2lvbiBkZW5pZWQKKyAgIC0tLS0tLS0KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9kZWIvZHBrZ3BtLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArLS0KKyB0ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yayAgICAgICAgICAgICAgICAgICAgICAgICB8IDI1ICsrKystLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZCAgICAgICAgICAgICAgfCA2NyArKysrKysrKystLS0tLS0tLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgICAgICAgfCAxOCArKy0tLS0KKyB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yICAgICAgICB8ICAyICstCisgLi4uZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4gfCA3NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLi4uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMgICAgICAgfCAgNiArLQorIDcgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDc1NSB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1bgorCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCitpbmRleCBiMTg3ZWZiLi5mMjY5NzY0IDEwMDY0NAorLS0tIGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCisrKysgYi9hcHQtcGtnL2RlYi9kcGtncG0uY2MKK0BAIC0xMDQ5LDEyICsxMDQ5LDYgQEAgdm9pZCBwa2dEUGtnUE06OkJ1aWxkUGFja2FnZXNQcm9ncmVzc01hcCgpCisgCSBQYWNrYWdlc1RvdGFsKys7CisgICAgICAgfQorICAgIH0KKy0gICAvKiBvbmUgZXh0cmE6IFdlIGRvbid0IHdhbnQgdGhlIHByb2dyZXNzIGJhciB0byByZWFjaCAxMDAlLCBlc3BlY2lhbGx5IG5vdAorLSAgICAgIGlmIHdlIGNhbGwgZHBrZyAtLWNvbmZpZ3VyZSAtLXBlbmRpbmcgYW5kIHByb2Nlc3MgYSBidW5jaCBvZiB0cmlnZ2VycworLSAgICAgIHdoaWxlIHNob3dpbmcgMTAwJS4gQWxzbywgc3BpbmRvd24gdGFrZXMgYSB3aGlsZSwgc28gbmV2ZXIgcmVhY2hpbmcgMTAwJQorLSAgICAgIGlzIHdheSBtb3JlIGNvcnJlY3QgdGhhbiByZWFjaGluZyAxMDAlIHdoaWxlIHN0aWxsIGRvaW5nIHN0dWZmIGV2ZW4gaWYKKy0gICAgICBkb2luZyBpdCB0aGlzIHdheSBpcyBzbGlnaHRseSBiZW5kaW5nIHRoZSBydWxlcyAqLworLSAgICsrUGFja2FnZXNUb3RhbDsKKyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp9fX0qLworICNpZiAoQVBUX1BLR19NQUpPUiA+PSA0ICYmIEFQVF9QS0dfTUlOT1IgPCAxMykKK0BAIC0xMjk0LDggKzEyODgsOSBAQCBib29sIHBrZ0RQa2dQTTo6R29Ob0FCSUJyZWFrKEFQVDo6UHJvZ3Jlc3M6OlBhY2thZ2VNYW5hZ2VyICpwcm9ncmVzcykKKyAKKyAgICAvLyBzdXBwb3J0IHN1YnByZXNzaW5nIG9mIHRyaWdnZXJzIHByb2Nlc3NpbmcgZm9yIHNwZWNpYWwKKyAgICAvLyBjYXNlcyBsaWtlIGQtaSB0aGF0IHJ1bnMgdGhlIHRyaWdnZXJzIGhhbmRsaW5nIG1hbnVhbGx5CisrICAgYm9vbCBjb25zdCBTbWFydENvbmYgPSAoX2NvbmZpZy0+RmluZCgiUGFja2FnZU1hbmFnZXI6OkNvbmZpZ3VyZSIsICJhbGwiKSAhPSAiYWxsIik7CisgICAgYm9vbCBjb25zdCBUcmlnZ2Vyc1BlbmRpbmcgPSBfY29uZmlnLT5GaW5kQigiRFBrZzo6VHJpZ2dlcnNQZW5kaW5nIiwgZmFsc2UpOworLSAgIGlmIChfY29uZmlnLT5GaW5kQigiRFBrZzo6Q29uZmlndXJlUGVuZGluZyIsIHRydWUpID09IHRydWUpCisrICAgaWYgKF9jb25maWctPkZpbmRCKCJEUGtnOjpDb25maWd1cmVQZW5kaW5nIiwgU21hcnRDb25mKSA9PSB0cnVlKQorICAgICAgIExpc3QucHVzaF9iYWNrKEl0ZW0oSXRlbTo6Q29uZmlndXJlUGVuZGluZywgUGtnSXRlcmF0b3IoKSkpOworIAorICAgIC8vIGZvciB0aGUgcHJvZ3Jlc3MKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yayBiL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCitpbmRleCA3MGFkMzgxLi4wMDY3MmFkIDEwMDY0NAorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCitAQCAtMTE3OCwxMyArMTE3OCwxMCBAQCB0ZXN0bm9wYWNrYWdlKCkgeworIAlmaQorIH0KKyAKKy10ZXN0ZHBrZ3N0YXR1cygpIHsKKy0JbG9jYWwgU1RBVEU9IiQxIgorLQlsb2NhbCBOUj0iJDIiCistCXNoaWZ0IDIKKy0JbXNndGVzdCAiVGVzdCB0aGF0ICROUiBwYWNrYWdlKHMpIGFyZSBpbiBzdGF0ZSAkU1RBVEUgd2l0aCIgImRwa2cgLWwgJCoiCistCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+L2Rldi9udWxsIHwgZ3JlcCAiXiR7U1RBVEV9IiB8IHdjIC1sKSIKKy0JaWYgWyAiJFBLR1MiICE9ICROUiBdOyB0aGVuCisrdGVzdGRwa2dpbnN0YWxsZWQoKSB7CisrCW1zZ3Rlc3QgIlRlc3QgZm9yIGNvcnJlY3RseSBpbnN0YWxsZWQgcGFja2FnZShzKSB3aXRoIiAiZHBrZyAtbCAkKiIKKysJbG9jYWwgUEtHUz0iJChkcGtnIC1sICIkQCIgMj4vZGV2L251bGwgfCBncmVwICdeaScgfCB3YyAtbCkiCisrCWlmIFsgIiRQS0dTIiAhPSAkIyBdOyB0aGVuCisgCQllY2hvID4mMiAkUEtHUworIAkJZHBrZyAtbCAiJEAiIHwgZ3JlcCAnXlthLXpdJyA+JjIKKyAJCW1zZ2ZhaWwKK0BAIC0xMTkzLDEyICsxMTkwLDE2IEBAIHRlc3RkcGtnc3RhdHVzKCkgeworIAlmaQorIH0KKyAKKy10ZXN0ZHBrZ2luc3RhbGxlZCgpIHsKKy0JdGVzdGRwa2dzdGF0dXMgJ2lpJyAiJCMiICIkQCIKKy19CistCisgdGVzdGRwa2dub3RpbnN0YWxsZWQoKSB7CistCXRlc3RkcGtnc3RhdHVzICdpaScgJzAnICIkQCIKKysJbXNndGVzdCAiVGVzdCBmb3IgY29ycmVjdGx5IG5vdC1pbnN0YWxsZWQgcGFja2FnZShzKSB3aXRoIiAiZHBrZyAtbCAkKiIKKysJbG9jYWwgUEtHUz0iJChkcGtnIC1sICIkQCIgMj4gL2Rldi9udWxsIHwgZ3JlcCAnXmknIHwgd2MgLWwpIgorKwlpZiBbICIkUEtHUyIgIT0gMCBdOyB0aGVuCisrCQllY2hvCisrCQlkcGtnIC1sICIkQCIgfCBncmVwICdeW2Etel0nID4mMgorKwkJbXNnZmFpbAorKwllbHNlCisrCQltc2dwYXNzCisrCWZpCisgfQorIAorIHRlc3RtYXJrZWRhdXRvKCkgeworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkCitpbmRleCA2OGNjMDQzLi5kNzJlN2U3IDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAorKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAorQEAgLTE5LDE0ICsxOSwxMyBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgdXBncmFkZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworQEAgLTM1LDE0ICszNCwxMyBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgcmVpbnN0YWxsCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCitAQCAtNTEsMjQgKzQ5LDIyIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjUwOlJ1bm5pbmcgZHBrZworLXBtc3RhdHVzOnRlc3Rpbmc6NTA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6ODMuMzMzMzpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjgzLjMzMzM6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MjA6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NDA6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NjA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czpkcGtnLWV4ZWM6NjA6UnVubmluZyBkcGtnCisrcG1zdGF0dXM6dGVzdGluZzo2MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgIyBhbmQgcmVtb3ZlCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCisgdGVzdHN1Y2Nlc3MgYXB0Z2V0IHJlbW92ZSB0ZXN0aW5nIC15IC1vIEFQVDo6U3RhdHVzLUZkPTMKKyB0ZXN0ZXF1YWwgInBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjI1OlByZXBhcmluZyBmb3IgcmVtb3ZhbCBvZiB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlJlbW92aW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NzU6UmVtb3ZlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NzU6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpQcmVwYXJpbmcgZm9yIHJlbW92YWwgb2YgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OlJlbW92aW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOlJlbW92ZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgaW5zdGFsbCBub24tbmF0aXZlIGFuZCBlbnN1cmUgd2UgZ2V0IHByb3BlciBwcm9ncmVzcyBpbmZvCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCitAQCAtNzksMTMgKzc1LDEyIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3RpbmcyOjA6SW5zdGFsbGluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nMjo1MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOnRlc3RpbmcyOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nMjoyMDpQcmVwYXJpbmcgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6dGVzdGluZzI6NDA6VW5wYWNraW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3RpbmcyOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjEwMDpJbnN0YWxsZWQgdGVzdGluZzIgKGkzODYpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorIHJtIC1mIGFwdC1wcm9ncmVzcyoubG9nCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgoraW5kZXggYmFkYzk4NS4uOWQyMjc5NCAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgorQEAgLTI3LDQxICsyNywzNyBAQCBNZXNzYWdlOiBJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogMTYuNjY2NworK1BlcmNlbnQ6IDIwCisgTWVzc2FnZTogUHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogMzMuMzMzMworK1BlcmNlbnQ6IDQwCisgTWVzc2FnZTogVW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogNTAKKytQZXJjZW50OiA2MAorIE1lc3NhZ2U6IFByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBSdW5uaW5nIGRwa2cKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDY2LjY2NjcKKytQZXJjZW50OiA4MAorIE1lc3NhZ2U6IENvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogODMuMzMzMworK1BlcmNlbnQ6IDEwMAorIE1lc3NhZ2U6IEluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy0KKy1TdGF0dXM6IHByb2dyZXNzCistUGVyY2VudDogODMuMzMzMworLU1lc3NhZ2U6IFJ1bm5pbmcgZHBrZworICIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvcgoraW5kZXggNjMyMzAwNy4uYTQ3MDk1YiAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKK0BAIC0xOCw3ICsxOCw3IEBAIHNldHVwYXB0YXJjaGl2ZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworIHRlc3RmYWlsdXJlIGFwdGdldCBpbnN0YWxsIGZvbzEgZm9vMiAteSAtbyBBUFQ6OlN0YXR1cy1GZD0zCisgbXNndGVzdCAiRW5zdXJlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSIKKy1pZiBncmVwIC1xICJhcHRhcmNoaXZlL3Bvb2wvZm9vMl8wLjguMTVfYW1kNjQuZGViOjM2LjM2MzY6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgorK2lmIGdyZXAgLXEgImFwdGFyY2hpdmUvcG9vbC9mb28yXzAuOC4xNV9hbWQ2NC5kZWI6NDA6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgorIAltc2dwYXNzCisgZWxzZQorIAljYXQgYXB0LXByb2dyZXNzLmxvZworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMTQ2ZmE3Ni4uMDAwMDAwMAorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KKysrKyAvZGV2L251bGwKK0BAIC0xLDc1ICswLDAgQEAKKy0jIS9iaW4vc2gKKy1zZXQgLWUKKy0KKy1URVNURElSPSQocmVhZGxpbmsgLWYgJChkaXJuYW1lICQwKSkKKy0uICRURVNURElSL2ZyYW1ld29yaworLQorLXNldHVwZW52aXJvbm1lbnQKKy1jb25maWdhcmNoaXRlY3R1cmUgJ2FtZDY0JworLQorLW1zZ3Rlc3QgJ0NoZWNrIGlmIGluc3RhbGxlZCBkcGtnIHN1cHBvcnRzJyAnbm9hd2FpdCB0cmlnZ2VyJworLWlmIGRwa2ctY2hlY2tidWlsZGRlcHMgLWQgJ2Rwa2cgKD49IDEuMTYuMSknIC9kZXYvbnVsbDsgdGhlbgorLQltc2dwYXNzCistZWxzZQorLQltc2dza2lwICdkcGtnIHZlcnNpb24gdG9vIG9sZCcKKy0JZXhpdCAwCistZmkKKy1jb25maWdkcGtnbm9vcGNocm9vdAorLQorLWJ1aWxkdHJpZ2dlcnBhY2thZ2VzKCkgeworLQlsb2NhbCBUWVBFPSIkMSIKKy0Jc2V0dXBzaW1wbGVuYXRpdmVwYWNrYWdlICJ0cmlnZ2VyYWJsZS0kVFlQRSIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJyAiRGVwZW5kczogdHJpZ2RlcGVuZHMtJFRZUEUiCistCUJVSUxERElSPSJpbmNvbWluZy90cmlnZ2VyYWJsZS0ke1RZUEV9LTEuMCIKKy0JY2F0ID4ke0JVSUxERElSfS9kZWJpYW4vcG9zdGluc3QgPDxFT0YKKy0jIS9iaW4vc2gKKy1pZiBbICJcJDEiID0gJ3RyaWdnZXJlZCcgXTsgdGhlbgorLQlscyAtbCAvcHJvYy9zZWxmL2ZkLworLWZpCistRU9GCistCWVjaG8gIiRUWVBFIC91c3Ivc2hhcmUvZG9jIiA+ICR7QlVJTERESVJ9L2RlYmlhbi90cmlnZ2VycworLQlidWlsZHBhY2thZ2UgIiRCVUlMRERJUiIgJ3Vuc3RhYmxlJyAnbWFpbicgJ25hdGl2ZScKKy0Jcm0gLXJmICIkQlVJTERESVIiCistCWJ1aWxkc2ltcGxlbmF0aXZlcGFja2FnZSAidHJpZ2RlcGVuZHMtJFRZUEUiICdhbGwnICcxLjAnICd1bnN0YWJsZScKKy19CistCistI2J1aWxkdHJpZ2dlcnBhY2thZ2VzICdpbnRlcmVzdCcKKy1idWlsZHRyaWdnZXJwYWNrYWdlcyAnaW50ZXJlc3Qtbm9hd2FpdCcKKy1idWlsZHNpbXBsZW5hdGl2ZXBhY2thZ2UgInRyaWdzdHVmZiIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJworLQorLXNldHVwYXB0YXJjaGl2ZQorLQorLXJ1bnRlc3RzKCkgeworLQlsb2NhbCBUWVBFPSIkMSIKKy0JbXNnbXNnICdXb3JraW5nIHdpdGggdHJpZ2dlciB0eXBlJyAiJFRZUEUiCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdnZXJhYmxlLSRUWVBFIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUKKy0KKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IGluc3RhbGwgdHJpZ2RlcGVuZHMtJFRZUEUgLXkgLS1yZWluc3RhbGwKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdzdHVmZiAteQorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJyByb290IHJvb3QgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUgdHJpZ3N0dWZmCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBwdXJnZSB0cmlnc3R1ZmYgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdzdHVmZgorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgcHVyZ2UgdHJpZ2RlcGVuZHMtJFRZUEUgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZmFpbHVyZSBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZmFpbHVyZSBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistfQorLSNydW50ZXN0cyAnaW50ZXJlc3QnCistcnVudGVzdHMgJ2ludGVyZXN0LW5vYXdhaXQnCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCitpbmRleCA0MWMwNTcwLi5kMzk2MGQ3IDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMKK0BAIC01OSw4ICs1OSw3IEBAIHN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlCisgY29uZmlndXJlICRQS0dOQU1FIDEuMCA8bm9uZT4KKyBzdGF0dXMgdW5wYWNrZWQgJFBLR05BTUUgMS4wCisgc3RhdHVzIGhhbGYtY29uZmlndXJlZCAkUEtHTkFNRSAxLjAKKy1zdGF0dXMgaW5zdGFsbGVkICRQS0dOQU1FIDEuMAorLXN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisrc3RhdHVzIGluc3RhbGxlZCAkUEtHTkFNRSAxLjAiIGN1dCAtZiAzLSAtZCcgJyByb290ZGlyL3Zhci9sb2cvZHBrZy5sb2cKKyB9CisgY2hlY2tpbnN0YWxsCisgCitAQCAtODUsOCArODQsNyBAQCBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorIHN0YXR1cyBjb25maWctZmlsZXMgJFBLR05BTUUgMS4wCisgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKyBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorLXN0YXR1cyBub3QtaW5zdGFsbGVkICRQS0dOQU1FIDxub25lPgorLXN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisrc3RhdHVzIG5vdC1pbnN0YWxsZWQgJFBLR05BTUUgPG5vbmU+IiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisgfQorIGNoZWNrcHVyZ2UKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWE1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK0Zyb20gMTVjNmVmNmE4MjdkMzY4MWFkMDZlODYyZDI3YWIzZGZiODRjYjY4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjcgTWF5IDIwMTUgMTQ6MzA6MjggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IHRoZSBnY2MgdmVyc2lvbiBjaGVjaworCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworIkdDQyBkaWFnbm9zdGljIHB1c2giIGlzIGdjYyA0LjYgZmVhdHVyZSwgZ2NjIDQuNC43IG9uIGNlbnRvcyBkaWQgbm90IGtub3cgaXQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9jYWNoZXNldC5oICAgICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjIHwgMTIgKysrKysrLS0tLS0tCisgYXB0LXBrZy9zcmNyZWNvcmRzLmNjICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL3NyY3JlY29yZHMuaCAgICAgICAgIHwgIDQgKystLQorIGFwdC1wa2cvdmVuZG9ybGlzdC5jYyAgICAgICAgfCAgNCArKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY2FjaGVzZXQuaCBiL2FwdC1wa2cvY2FjaGVzZXQuaAoraW5kZXggYjcyMjliYy4uOGNjMjkxNyAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvY2FjaGVzZXQuaAorKysrIGIvYXB0LXBrZy9jYWNoZXNldC5oCitAQCAtMTE5LDEyICsxMTksMTIgQEAgcHVibGljOgorIAkJaW5saW5lIHN0ZDo6c3RyaW5nIEZ1bGxOYW1lKGJvb2wgY29uc3QgUHJldHR5KSBjb25zdCB7IHJldHVybiBnZXRQa2coKS5GdWxsTmFtZShQcmV0dHkpOyB9CisgCQlpbmxpbmUgc3RkOjpzdHJpbmcgRnVsbE5hbWUoKSBjb25zdCB7IHJldHVybiBnZXRQa2coKS5GdWxsTmFtZSgpOyB9CisgCQlBUFRfREVQUkVDQVRFRCBpbmxpbmUgY29uc3QgY2hhciAqU2VjdGlvbigpIGNvbnN0IHsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgCSAgIHJldHVybiBnZXRQa2coKS5TZWN0aW9uKCk7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAkJfQorZGlmZiAtLWdpdCBhL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MgYi9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjCitpbmRleCA0OWEzNDhkLi40YmM5ZGNmIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworKysrIGIvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworQEAgLTEyNiwxMyArMTI2LDEzIEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlcyhzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlPiAmRikKKyAgICBmb3IgKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPjo6Y29uc3RfaXRlcmF0b3IgZjIgPSBGMi5iZWdpbigpOyBmMiAhPSBGMi5lbmQoKTsgKytmMikKKyAgICB7CisgICAgICAgcGtnU3JjUmVjb3Jkczo6RmlsZTIgZjsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgICAgICAgZi5NRDVIYXNoID0gZjItPk1ENUhhc2g7CisgICAgICAgZi5TaXplID0gZjItPlNpemU7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorICAgICAgIGYuUGF0aCA9IGYyLT5QYXRoOworQEAgLTE5MCwxNCArMTkwLDE0IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQorIAkgLy8gd2UgaGF2ZSBpdCBhbHJlYWR5LCBzdG9yZSB0aGUgbmV3IGhhc2ggYW5kIGJlIGRvbmUKKyAJIGlmIChmaWxlICE9IExpc3QuZW5kKCkpCisgCSB7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKKyAJICAgIGlmIChjaGVja3N1bUZpZWxkID09ICJGaWxlcyIpCisgCSAgICAgICBmaWxlLT5NRDVIYXNoID0gaGFzaDsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgCSAgICAvLyBhbiBlcnJvciBoZXJlIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgdHdvIGRpZmZlcmVudCBoYXNoZXMgZm9yIHRoZSBzYW1lIGZpbGUKK0BAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCisgCSBGLkZpbGVTaXplID0gc3RydG91bGwoc2l6ZS5jX3N0cigpLCBOVUxMLCAxMCk7CisgCSBGLkhhc2hlcy5wdXNoX2JhY2soaGFzaFN0cmluZyk7CisgCistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKK0BAIC0yMjAsNyArMjIwLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCisgCSBGLlNpemUgPSBGLkZpbGVTaXplOworIAkgaWYgKGNoZWNrc3VtRmllbGQgPT0gIkZpbGVzIikKKyAJICAgIEYuTUQ1SGFzaCA9IGhhc2g7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworaW5kZXggMzE3NWVlNy4uMzQwZTc5NiAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworKysrIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmNjCitAQCAtMTYwLDcgKzE2MCw3IEBAIGJvb2wgcGtnU3JjUmVjb3Jkczo6UGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZGMikvKnt7eyovCisgICAgZm9yIChzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlPjo6Y29uc3RfaXRlcmF0b3IgZiA9IEYuYmVnaW4oKTsgZiAhPSBGLmVuZCgpOyArK2YpCisgICAgeworICAgICAgIHBrZ1NyY1JlY29yZHM6OkZpbGUyIGYyOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKK0BAIC0xNjgsNyArMTY4LDcgQEAgYm9vbCBwa2dTcmNSZWNvcmRzOjpQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkYyKS8qe3t7Ki8KKyAgICAgICBmMi5TaXplID0gZi0+U2l6ZTsKKyAgICAgICBmMi5IYXNoZXMucHVzaF9iYWNrKEhhc2hTdHJpbmcoIk1ENVN1bSIsIGYtPk1ENUhhc2gpKTsKKyAgICAgICBmMi5GaWxlU2l6ZSA9IGYtPlNpemU7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorICAgICAgIGYyLlBhdGggPSBmLT5QYXRoOworZGlmZiAtLWdpdCBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5oIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmgKK2luZGV4IGRkZTIyYmQuLjkxZjgwNjEgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3NyY3JlY29yZHMuaAorKysrIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmgKK0BAIC0zMCw3ICszMCw3IEBAIGNsYXNzIHBrZ1NyY1JlY29yZHMKKyB7CisgICAgcHVibGljOgorIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJLy8gZW5zdXJlIHRoYXQgY29uLSAmIGRlLXN0cnVjdG9yIGRvbid0IHRyaWdnZXIgdGhpcyB3YXJuaW5nCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCitAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBwa2dTcmNSZWNvcmRzCisgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIEZpbGVTaXplOworICAgICAgIEhhc2hTdHJpbmdMaXN0IEhhc2hlczsKKyAgICB9OworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MgYi9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKK2luZGV4IGZiMzNmZjEuLmJhMWQzYzMgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKKysrKyBiL2FwdC1wa2cvdmVuZG9ybGlzdC5jYworQEAgLTExLDcgKzExLDcgQEAKKyAKKyAjaW5jbHVkZSA8YXB0aTE4bi5oPgorIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKK0BAIC0xNjMsNiArMTYzLDYgQEAgY29uc3QgVmVuZG9yKiBwa2dWZW5kb3JMaXN0OjpGaW5kVmVuZG9yKGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gR1BHVk91dHB1dCkJLyoKKyB9CisgCQkJCQkJCQkJLyp9fX0qLworIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNDJmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSAyYmZmN2VlMDZhNGY5NmU3ZDMyNjk5MWQ2MWZiODZmOGFhNjUxZDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyNyBNYXkgMjAxNSAwOTo0ODo0NSArMDgwMAorU3ViamVjdDogW1BBVENIXSByZW1vdmUgV3N1Z2dlc3QtYXR0cmlidXRlIGZyb20gQ1hYRkxBR1MKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1dzdWdnZXN0LWF0dHJpYnV0ZSBpcyBHQ0MgNC42IGZlYXR1cmUsIGNlbnRvczYgaXMgdXNpbmcgR0NDCis0LjQuNyB3aGljaCB1bmtub3duIHRoaXMgZmxhZywgc28gcmVtb3ZlIGl0IGZyb20gQ1hYRkxBR1MKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluIHwgMSAtCisgdGVzdC9saWJhcHQvbWFrZWZpbGUgICAgICAgIHwgMSAtCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluIGIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCitpbmRleCBiMGE4ZDlkLi45MWVkMDExIDEwMDY0NAorLS0tIGEvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCisrKysgYi9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KK0BAIC0xMSw3ICsxMSw2IEBAIENQUEZMQUdTKz0gQENQUEZMQUdTQCBAREVGU0AgLURfUkVFTlRSQU5UIC1EX0ZPUlRJRllfU09VUkNFPTIKKyBDWFggPSBAQ1hYQAorIENYWEZMQUdTKz0gQENYWEZMQUdTQCAtV2FsbCAtV2V4dHJhCisgQ1hYRkxBR1MrPSAtV2Nhc3QtYWxpZ24gLVdsb2dpY2FsLW9wIC1XcmVkdW5kYW50LWRlY2xzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zCistQ1hYRkxBR1MrPSAtV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUgLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCAtV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCisgIyBhIGJpdCB0b28gcGVkYW50aWMgdG8gYmUgcnVuIGJ5IGRlZmF1bHQKKyAjQ1hYRkxBR1MrPSAtV3BlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1Xbm8tdmxhIC1Xbm8tdmFyaWFkaWMtbWFjcm9zCisgTlVNX1BST0NTID0gQE5VTV9QUk9DU0AKK2RpZmYgLS1naXQgYS90ZXN0L2xpYmFwdC9tYWtlZmlsZSBiL3Rlc3QvbGliYXB0L21ha2VmaWxlCitpbmRleCA3ZjIzYWNlLi5lODA1ZjEzIDEwMDY0NAorLS0tIGEvdGVzdC9saWJhcHQvbWFrZWZpbGUKKysrKyBiL3Rlc3QvbGliYXB0L21ha2VmaWxlCitAQCAtMzksNyArMzksNiBAQCBDWFhGTEFHUyArPSAtcHRocmVhZAorICMgZGlzYWJsZSBzb21lIGZsYWdzIGZvciBndGVzdCBhZ2FpbgorIENYWEZMQUdTKz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucworIENYWEZMQUdTKz0gLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycworLUNYWEZMQUdTKz0gLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1wdXJlIC1Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3QgLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybgorIAorICMgQWxsIEdvb2dsZSBUZXN0IGhlYWRlcnMuICBVc3VhbGx5IHlvdSBzaG91bGRuJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbi4KKyBHVEVTVF9IRUFERVJTID0gL3Vzci9pbmNsdWRlL2d0ZXN0LyouaCBcCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS1jb25maWd1cmUtaW4tbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyZjY0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Rpc2FibGUgY29uZmlndXJlIGF0IGNvbXBpbGF0aW9uIHN0YWdlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGFwdC0wLjkuNy43L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS43Ljcub3JpZy9NYWtlZmlsZQorKysrIGFwdC0wLjkuNy43L01ha2VmaWxlCitAQCAtMzMsNyArMzMsNyBAQCB2ZXJ5Y2xlYW46IGNsZWFuCisgIyBUaGUgc3RhcnR1cCB0YXJnZXQgYnVpbGRzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJlIHNjcmlwdHMuIEl0IHNob3VsZAorICMgYmUgdXNlZCBhZnRlciBhIENWUyBjaGVja291dC4KKyBDT05WRVJURUQ9ZW52aXJvbm1lbnQubWFrIGluY2x1ZGUvY29uZmlnLmggaW5jbHVkZS9hcHRpMThuLmggYnVpbGQvZG9jL0RveHlmaWxlIG1ha2VmaWxlCistaW5jbHVkZSBidWlsZGxpYi9jb25maWd1cmUubWFrCisrI2luY2x1ZGUgYnVpbGRsaWIvY29uZmlndXJlLm1haworICQoQlVJTERESVIpL2luY2x1ZGUvY29uZmlnLmg6IGJ1aWxkbGliL2NvbmZpZy5oLmluCisgJChCVUlMRERJUikvaW5jbHVkZS9hcHRpMThuLmg6IGJ1aWxkbGliL2FwdGkxOG4uaC5pbgorICQoQlVJTERESVIpL2Vudmlyb25tZW50Lm1hazogYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2Nzk1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitbUEFUQ0hdIGRpc2FibGUgdGVzdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK3Rlc3QgbmVlZHMgZ3Rlc3QgcGFja2FnZSwgc28gbm90IGJ1aWxkIHRoZSB0ZXN0IGRpcgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgfCA3ICsrKy0tLS0KKyBjb25maWd1cmUuYWMgfCA2IC0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDVmNWZiMjcuLjUwNzBlOTYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC05LDggKzksOCBAQCBlbmRpZgorIC5QSE9OWTogZGVmYXVsdAorIGRlZmF1bHQ6IHN0YXJ0dXAgYWxsCisgCistLlBIT05ZOiBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGFsbCBiaW5hcnkgcHJvZ3JhbSBkb2MgdGVzdCB1cGRhdGUtcG8KKy1hbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZGF0ZS1wbyBzdGFydHVwIGRpcnM6CisrLlBIT05ZOiBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGFsbCBiaW5hcnkgcHJvZ3JhbSBkb2MgdXBkYXRlLXBvCisrYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdXBkYXRlLXBvIHN0YXJ0dXAgZGlyczoKKyAJJChNQUtFKSAtQyB2ZW5kb3IgJEAKKyAJJChNQUtFKSAtQyBhcHQtcGtnICRACisgCSQoTUFLRSkgLUMgYXB0LWluc3QgJEAKK0BAIC0yMSw5ICsyMSw4IEBAIGFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHRlc3QgdXBkCisgCSQoTUFLRSkgLUMgZHNlbGVjdCAkQAorICMJJChNQUtFKSAtQyBkb2MgJEAKKyAJJChNQUtFKSAtQyBwbyAkQAorLQkkKE1BS0UpIC1DIHRlc3QgJEAKKyAKKy1hbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZGF0ZS1wbzogc3RhcnR1cCBkaXJzCisrYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdXBkYXRlLXBvOiBzdGFydHVwIGRpcnMKKyAKKyBkaXJzOiBzdGFydHVwCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1NjYzYWFmLi5iMGY5NTY0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04OSwxMiArODksNiBAQCBBQ19DSEVDS19MSUIoY3VybCwgY3VybF9lYXN5X2luaXQsCisgICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIENVUkwgZHVlIGh0dHBzIHN1cHBvcnRdKSwKKyApCisgCistQUNfTEFOR19QVVNIKFtDKytdKQorLUFDX0NIRUNLX0hFQURFUihndGVzdC9ndGVzdC5oLCwKKy0gICAgIEFDX01TR19FUlJPUihbZmFpbGVkOiBJIG5lZWQgZ3Rlc3QgdG8gYnVpbGQgdGVzdHNdKSwKKy0pCistQUNfTEFOR19QT1AoW0MrK10pCistCisgCisgQUNfU1VCU1QoQkRCTElCKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDFhZTZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvYXB0LXBrZy9jb250cmliL3dlYWtwdHIuaAorKysrIGIvYXB0LXBrZy9jb250cmliL3dlYWtwdHIuaAorQEAgLTIxLDYgKzIxLDcgQEAKKyAjaWZuZGVmIFdFQUtfUE9JTlRFUl9ICisgI2RlZmluZSBXRUFLX1BPSU5URVJfSAorIAorKyNpbmNsdWRlIDxjc3RkbGliPgorICNpbmNsdWRlIDxzZXQ+CisgLyoqCisgICogQ2xhc3MgZm9yIG9iamVjdHMgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIHdlYWsgcG9pbnRlcnMuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L21ha2VyYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTMxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitJIHdhcyBzZWVpbmcgdmFyaW91cyBpc3N1ZXMgd2l0aCBwYXJhbGxlbCBtYWtlLCBtYWlubHkgZHVlIHRvIHRvIHdoYXQgd2FzIGxpa2VseSAKK3BhcnRpYWxseSBpbnN0YWxsZWQgaGVhZGVycy4gSWYgeW91IGNoYW5nZSBpbnRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZAorIk5PSVNZPTEgbWFrZSAgLi4vb2JqL2FwdC1wa2cvc291cmNlbGlzdC5vcGljIiBpbiBhcHQtcGtnLCB5b3UnbGwgc2VlIGl0IAorZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGhlYWRlcnMgYmVpbmcgaW5zdGFsbGVkLiBUaGlzIHBhdGNoCitmaXhlcyB0aGF0IHNvIHRoaW5ncyBidWlsZCBjb3JyZWN0bHkuCisKK1JQIDIwMTIvMy8xOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGFwdC0wLjkuOS40L2J1aWxkbGliL2xpYnJhcnkubWFrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS45LjQub3JpZy9idWlsZGxpYi9saWJyYXJ5Lm1hawkyMDEzLTA3LTMxIDE1OjQ1OjA3LjMyMDQ0MDU3NSArMDMwMAorKysrIGFwdC0wLjkuOS40L2J1aWxkbGliL2xpYnJhcnkubWFrCTIwMTMtMDctMzEgMTU6NDY6NDkuNDQwNDQwNTYxICswMzAwCitAQCAtNjEsNyArNjEsNyBAQAorIAorICMgQ29tcGlsYXRpb24gcnVsZXMKKyB2cGF0aCAlLmNjICQoU1VCRElSUykKKy0kKE9CSikvJS5vcGljOiAlLmNjICQoTElCUkFSWURFUEVORFMpCisrJChPQkopLyUub3BpYzogJS5jYyAkKExJQlJBUllERVBFTkRTKSAkKCQoTE9DQUwpLUhFQURFUlMpCisgCWVjaG8gQ29tcGlsaW5nICQ8IHRvICRACisgCSQoQ1hYKSAtYyAkKElOTElORURFUEZMQUcpICQoQ1BQRkxBR1MpICQoQ1hYRkxBR1MpICQoUElDRkxBR1MpIC1vICRAICQ8CisgCSQoRG9EZXApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vLW5scy1kcGtnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOTk2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCisrKysgYi9hcHQtcGtnL2RlYi9kcGtncG0uY2MKK0BAIC00Miw2ICs0MiwxMiBAQAorICNpbmNsdWRlIDxhcHRpMThuLmg+CisgCQkJCQkJCQkJLyp9fX0qLworIAorKyNpZmRlZiBVU0VfTkxTCisrI2RlZmluZSBfZHBrZyh4KSBkZ2V0dGV4dCgiZHBrZyIsIHgpCisrI2Vsc2UKKysjZGVmaW5lIF9kcGtnKHgpIHgKKysjZW5kaWYKKysKKyB1c2luZyBuYW1lc3BhY2Ugc3RkOworIAorIG5hbWVzcGFjZQorQEAgLTEyNzksNyArMTI4NSw3IEBAIHZvaWQgcGtnRFBrZ1BNOjpXcml0ZUFwcG9ydFJlcG9ydChjb25zdAorICAgIH0KKyAKKyAgICAvLyBjaGVjayBpZiBpdHMgbm90IGEgZm9sbG93IHVwIGVycm9yIAorLSAgIGNvbnN0IGNoYXIgKm5lZWRsZSA9IGRnZXR0ZXh0KCJkcGtnIiwgImRlcGVuZGVuY3kgcHJvYmxlbXMgLSBsZWF2aW5nIHVuY29uZmlndXJlZCIpOworKyAgIGNvbnN0IGNoYXIgKm5lZWRsZSA9IF9kcGtnKCJkZXBlbmRlbmN5IHByb2JsZW1zIC0gbGVhdmluZyB1bmNvbmZpZ3VyZWQiKTsKKyAgICBpZihzdHJzdHIoZXJyb3Jtc2csIG5lZWRsZSkgIT0gTlVMTCkgeworICAgICAgIHN0ZDo6Y2xvZyA8PCBfKCJObyBhcHBvcnQgcmVwb3J0IHdyaXR0ZW4gYmVjYXVzZSB0aGUgZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgaXRzIGEgZm9sbG93dXAgZXJyb3IgZnJvbSBhIHByZXZpb3VzIGZhaWx1cmUuIikgPDwgc3RkOjplbmRsOworICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjNjcyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYyBiL2FwdC1wa2cvcGFja2FnZW1hbmFnZXIuY2MKK2luZGV4IDI0OTU0MmMuLjBhMTkxMWYgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCisrKysgYi9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCitAQCAtOTUyLDEwICs5NTIsMTIgQEAgYm9vbCBwa2dQYWNrYWdlTWFuYWdlcjo6U21hcnRVblBhY2soUGtnSXRlcmF0b3IgUGtnLCBib29sIGNvbnN0IEltbWVkaWF0ZSwgaW50IGMKKyAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgaWYgKEltbWVkaWF0ZSA9PSB0cnVlKSB7CisrI2lmIDAKKyAgICAgICAvLyBQZXJmb3JtIGltbWVkYXRlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHBhY2thZ2UuIAorICAgICAgICAgIGlmIChTbWFydENvbmZpZ3VyZShQa2csIERlcHRoICsgMSkgPT0gZmFsc2UpCisgICAgICAgICAgICAgX2Vycm9yLT5FcnJvcihfKCJDb3VsZCBub3QgcGVyZm9ybSBpbW1lZGlhdGUgY29uZmlndXJhdGlvbiBvbiAnJXMnLiAiCisgICAgICAgICAgICAgICAgIlBsZWFzZSBzZWUgbWFuIDUgYXB0LmNvbmYgdW5kZXIgQVBUOjpJbW1lZGlhdGUtQ29uZmlndXJlIGZvciBkZXRhaWxzLiAoJWQpIiksUGtnLkZ1bGxOYW1lKCkuY19zdHIoKSwyKTsKKysjZW5kaWYKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7CitAQCAtMTAzOCw2ICsxMDQwLDcgQEAgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVyUmVzdWx0IHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlckluc3RhbGwoKQorICAgICAgIH0KKyAgICB9CisgCisrI2lmIDAKKyAgICAvLyBGaW5hbCBydW4gdGhyb3VnaCB0aGUgY29uZmlndXJlIHBoYXNlCisgICAgaWYgKENvbmZpZ3VyZUFsbCgpID09IGZhbHNlKQorICAgICAgIHJldHVybiBGYWlsZWQ7CitAQCAtMTA1Miw2ICsxMDU1LDcgQEAgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVyUmVzdWx0IHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlckluc3RhbGwoKQorIAkgcmV0dXJuIEZhaWxlZDsKKyAgICAgICB9CisgICAgfQorKyNlbmRpZgorIAkgCisgICAgcmV0dXJuIENvbXBsZXRlZDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OWU0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitEaXNhYmxlIGRvY3VtZW50YXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogYXB0LTAuOS43LjcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjcuNy5vcmlnL01ha2VmaWxlCisrKysgYXB0LTAuOS43LjcvTWFrZWZpbGUKK0BAIC0xNyw3ICsxNyw3IEBAIGFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmEKKyAJJChNQUtFKSAtQyBjbWRsaW5lICRACisgCSQoTUFLRSkgLUMgZnRwYXJjaGl2ZSAkQAorIAkkKE1BS0UpIC1DIGRzZWxlY3QgJEAKKy0JJChNQUtFKSAtQyBkb2MgJEAKKysjCSQoTUFLRSkgLUMgZG9jICRACisgCSQoTUFLRSkgLUMgcG8gJEAKKyAJJChNQUtFKSAtQyB0ZXN0ICRACisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3RydW5jYXRlLWZpbGVuYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWM0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitzdHJ1dGwuY2M6IHRoZSBmaWxlbmFtZSBjYW4ndCBiZSBsb25nZXIgdGhhbiAyNTUKKworVGhlIFVSSXRvRmlsZU5hbWUgdHJhbnNsYXRlcyB0aGUgcGF0aCBpbnRvIHRoZSBmaWxlbmFtZSwgYnV0IHRoZQorZmlsZW5hbWUgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gMjU1IGFjY29yZGluZyB0bworL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oLgorCitUcnVuY2F0ZSBpdCB3aGVuIGl0IGlzIGxvbmdlciB0aGFuIDI0MCAobGVhdmUgc29tZSBzcGFjZXMgZm9yCisiLlBhY2thZ2VzIiBhbmQgIi5fUmVsZWFzZSIgc3VmZml4KQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCistLS0gYS9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCisrKysgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCitAQCAtMzk5LDcgKzM5OSwxMiBAQCBzdHJpbmcgVVJJdG9GaWxlTmFtZShjb25zdCBzdHJpbmcgJlVSSSkKKyAgICAvLyAiXHgwMC1ceDIwe318XFxcXF5cXFtcXF08PlwiXHg3Ri1ceEZGIjsKKyAgICBzdHJpbmcgTmV3VVJJID0gUXVvdGVTdHJpbmcoVSwiXFx8e31bXTw+XCJefl89IUAjJCVeJioiKTsKKyAgICByZXBsYWNlKE5ld1VSSS5iZWdpbigpLE5ld1VSSS5lbmQoKSwnLycsJ18nKTsKKy0gICByZXR1cm4gTmV3VVJJOworKworKyAgIC8vIFRydW5jYXRlIGZyb20gdGhlIGhlYWQgd2hlbiBpdCBpcyBsb25nZXIgdGhhbiAyNDAKKysgICBpZihOZXdVUkkubGVuZ3RoKCkgPiAyNDApCisrICAgICAgIHJldHVybiBOZXdVUkkuc3Vic3RyKE5ld1VSSS5sZW5ndGgoKSAtIDI0MCwgTmV3VVJJLmxlbmd0aCgpIC0gMSk7CisrICAgZWxzZQorKyAgICAgICByZXR1cm4gTmV3VVJJOworIH0KKyAJCQkJCQkJCQkvKn19fSovCisgLy8gQmFzZTY0RW5jb2RlIC0gQmFzZTY0IEVuY29kaW5nIHJvdXRpbmUgZm9yIHNob3J0IHN0cmluZ3MJCS8qe3t7Ki8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC91c2UtaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBmY2ZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhcHQtMC45LjcuNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjcuNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGFwdC0wLjkuNy43L2NvbmZpZ3VyZS5hYworQEAgLTExMiw3ICsxMTIsNyBAQCBkbmwgVGhpcyBpcyBvZnRlbiB0aGUgZHBrZyBhcmNoaXRlY3R1cmUKKyBkbmwgRmlyc3QgY2hlY2sgYWdhaW5zdCB0aGUgZnVsbCBjYW5vbmljYWwgY2Fub25jaWFsLXN5c3RlbS10eXBlIGluICR0YXJnZXQKKyBkbmwgYW5kIGlmIHRoYXQgZmFpbHMsIGp1c3QgbG9vayBmb3IgdGhlIGNwdQorIEFDX01TR19DSEVDS0lORyhkZWJpYW4gYXJjaGl0ZWN0dXJlKQorLWFyY2hzZXQ9ImBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hgIgorK2FyY2hzZXQ9ImBlY2hvICRob3N0X2FsaWFzfGN1dCAtZCctJyAtZjFgIgorIGlmIHRlc3QgIngkYXJjaHNldCIgPSAieCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogdXNlIC0taG9zdD0gb3Igb3V0cHV0IGZyb20gZHBrZy1hcmNoaXRlY3R1cmVdKQorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMC4xMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzdlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYgpAQCAtMCwwICsxLDE4IEBACitERVBFTkRTID0gImN1cmwgZGIiCitSREVQRU5EU18ke1BOfSA9ICJkcGtnIGJhc2ggZGViaWFudXRpbHMiCityZXF1aXJlIGFwdC5pbmMKKworcmVxdWlyZSBhcHQtcGFja2FnZS5pbmMKKworUEFDS0FHRUNPTkZJRyA/Pz0gImx6bWEiCitQQUNLQUdFQ09ORklHW2x6bWFdID0gImFjX2N2X2xpYl9sem1hX2x6bWFfZWFzeV9lbmNvZGVyPXllcyxhY19jdl9saWJfbHptYV9sem1hX2Vhc3lfZW5jb2Rlcj1ubyx4eiIKKworRklMRVNfJHtQTn0gKz0gIiR7YmluZGlyfS9hcHQta2V5IgorYXB0LW1hbnBhZ2VzICs9ICJkb2MvYXB0LWtleS44IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjV3JpdGUgdGhlIGNvcnJlY3QgYXB0LWFyY2hpdGVjdHVyZSB0byBhcHQuY29uZgorICAgIEFQVF9DT05GPSR7RH0vZXRjL2FwdC9hcHQuY29uZgorICAgIGVjaG8gJ0FQVDo6QXJjaGl0ZWN0dXJlICIke0RQS0dfQVJDSH0iOycgPiAke0FQVF9DT05GfQorICAgIG9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcHJpdmF0ZSAke0R9JHtsaWJkaXJ9LworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvYXB0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzNTEzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvYXB0LmNvbmYKQEAgLTAsMCArMSw0MiBAQAorRGlyICIke1NUQUdJTkdfRElSX05BVElWRX0vIgoreworICAgU3RhdGUgInZhci9saWIvYXB0LyIKKyAgIHsKKyAgICAgIExpc3RzICIjQVBUQ09ORiMvbGlzdHMvIjsKKyAgICAgIHN0YXR1cyAiI1JPT1RGUyMvdmFyL2xpYi9kcGtnL3N0YXR1cyI7CisgICB9OworICAgQ2FjaGUgInZhci9jYWNoZS9hcHQvIgorICAgeworICAgICAgQXJjaGl2ZXMgImFyY2hpdmVzLyI7CisgICAgICBwa2djYWNoZSAiIjsKKyAgICAgIHNyY3BrZ2NhY2hlICIiOworICAgfTsKKyAgIEJpbiAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyIKKyAgIHsKKyAgICAgIG1ldGhvZHMgIiR7U1RBR0lOR19MSUJESVJ9L2FwdC9tZXRob2RzLyI7CisgICAgICBnemlwICIvYmluL2d6aXAiOworICAgICAgZHBrZyAiZHBrZyI7CisgICAgICBkcGtnLXNvdXJjZSAiZHBrZy1zb3VyY2UiOworICAgICAgZHBrZy1idWlsZHBhY2thZ2UgImRwa2ctYnVpbGRwYWNrYWdlIjsKKyAgICAgIGFwdC1nZXQgImFwdC1nZXQiOworICAgICAgYXB0LWNhY2hlICJhcHQtY2FjaGUiOworICAgfTsKKyAgIEV0YyAiI0FQVENPTkYjIgorICAgeworICAgICAgUHJlZmVyZW5jZXMgInByZWZlcmVuY2VzIjsKKyAgIH07Cit9OworCitBUFQKK3sKKyAgSW5zdGFsbC1SZWNvbW1lbmRzICJ0cnVlIjsKKyAgSW1tZWRpYXRlLUNvbmZpZ3VyZSAiZmFsc2UiOworICBBcmNoaXRlY3R1cmUgImk1ODYiOworICBHZXQKKyAgeworICAgICBBc3N1bWUtWWVzICJ0cnVlIjsKKyAgICAgRm9yY2UtWWVzICJ0cnVlIgorICB9OworfTsKKworRFBrZzo6T3B0aW9ucyB7Ii0tcm9vdD0jUk9PVEZTIyI7Ii0tYWRtaW5kaXI9I1JPT1RGUyMvdmFyL2xpYi9kcGtnIjsiLS1mb3JjZS1hbGwiOyItLW5vLWRlYnNpZyJ9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2RiX2xpbmtpbmdfaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFkNGIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogYXB0LTAuNy4zL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjcuMy5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTAxIDEwOjM4OjQ1LjAwMDAwMDAwMCArMDAwMAorKysrIGFwdC0wLjcuMy9jb25maWd1cmUuYWMJMjAwNy0wOC0yMSAxMzozOToyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC02Nyw4ICs2NywyMCBAQAorICAgICAgIFtBQ19ERUZJTkUoSEFWRV9CREIpCisgICAgICAgIEJEQkxJQj0iLWxkYiIKKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKy0gICAgICBbQkRCTElCPSIiCistICAgICAgIEFDX01TR19SRVNVTFQobm8pXQorKworKyAgICAgICBMSUJTPSIkTElCUyAtbHB0aHJlYWQiCisrICAgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIGxpbmsgYWdhaW5zdCBCZXJrZWxleURCIHdpdGggcHRocmVhZCkKKysgICAgICAgIEFDX0xJTktfSUZFTFNFKAorKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKysgICAgICAgICBbI2luY2x1ZGUgPGRiLmg+XSwKKysgICAgICAgICBbaW50IHIsIHMsIHQ7IGRiX3ZlcnNpb24oJnIsICZzLCAmdCk7XQorKyAgICAgICAgKV0sCisrICAgICAgICBbQUNfREVGSU5FKEhBVkVfQkRCKQorKyAgICAgICAgIEJEQkxJQj0iLWxkYiAtbHB0aHJlYWQiCisrICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKysgICAgICAgIFtCREJMSUI9IiIKKysgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKV0KKysgICAgICApXSAgICAgICAKKyAgICAgKV0KKyApCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9lbnZpcm9ubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTAzMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBhcHQtMC42LjQ2LjIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuNi40Ni4yLm9yaWcvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCTIwMDctMDMtMjkgMTE6Mzg6NTguMDAwMDAwMDAwICswMTAwCisrKysgYXB0LTAuNi40Ni4yL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgkyMDA3LTAzLTI5IDExOjM5OjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTYyLDcgKzYyLDcgQEAKKyAKKyAjIFNoYXJlZCBsaWJyYXJ5IHRoaW5ncworIEhPU1RfT1MgPSBAaG9zdF9vc0AKKy1pZm5lcSAoJCh3b3JkcyAkKGZpbHRlciBsaW51eC1nbnUgZ251JSAlZ251LCQoSE9TVF9PUykpKSwwKQorK2lmbmVxICgkKHdvcmRzICQoZmlsdGVyIGxpbnV4LWdudSBsaW51eC1nbnVlYWJpIGdudSUgJWdudSwkKEhPU1RfT1MpKSksMCkKKyAgICBTT05BTUVfTUFHSUM9LVdsLC1zb25hbWUgLVdsLAorICAgIExGTEFHU19TTz0KKyBlbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyMzhmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5pbiAgICAgfCAgICA2IC0tLS0tLQorIG1ldGhvZHMvbWFrZWZpbGUgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEzIGRlbGV0aW9ucygtKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTg2LDEyICs4Niw2IEBAIEFDX0NIRUNLX0hFQURFUihkYi5oLAorIAorIExJQlM9IiRzYXZlTElCUyIKKyAKKy1BQ19DSEVDS19MSUIoY3VybCwgY3VybF9lYXN5X2luaXQsCistICAgICBbQUNfQ0hFQ0tfSEVBREVSKGN1cmwvY3VybC5oLAorLSAgICAgICAgY3VybF9vaz15ZXMsCistICAgICAgICBjdXJsX29rPW5vKV0sCistICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIENVUkwgZHVlIGh0dHBzIHN1cHBvcnRdKSwKKy0pCisgCisgQUNfU1VCU1QoQkRCTElCKQorIAorLS0tIGEvbWV0aG9kcy9tYWtlZmlsZQorKysrIGIvbWV0aG9kcy9tYWtlZmlsZQorQEAgLTUxLDEzICs1MSw2IEBAIExJQl9NQUtFUyA9IGFwdC1wa2cvbWFrZWZpbGUKKyBTT1VSQ0UgPSBodHRwLmNjIGh0dHBfbWFpbi5jYyByZmMyNTUzZW11LmNjIGNvbm5lY3QuY2Mgc2VydmVyLmNjCisgaW5jbHVkZSAkKFBST0dSQU1fSCkKKyAKKy0jIFRoZSBodHRwcyBtZXRob2QKKy1QUk9HUkFNPWh0dHBzCistU0xJQlMgPSAtbGFwdC1wa2cgLWxjdXJsICQoSU5UTExJQlMpCistTElCX01BS0VTID0gYXB0LXBrZy9tYWtlZmlsZQorLVNPVVJDRSA9IGh0dHBzLmNjIHNlcnZlci5jYworLWluY2x1ZGUgJChQUk9HUkFNX0gpCistCisgIyBUaGUgZnRwIG1ldGhvZAorIFBST0dSQU09ZnRwCisgU0xJQlMgPSAtbGFwdC1wa2cgJChTT0NLRVRMSUJTKSAkKElOVExMSUJTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiNzdlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJBIEdOVSB0b29sIHRoYXQgcHJvY3VkZSBzaGVsbCBzY3JpcHRzIHRvIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHNvZnR3YXJlIgorREVTQ1JJUFRJT04gPSAiQXV0b2NvbmYgaXMgYW4gZXh0ZW5zaWJsZSBwYWNrYWdlIG9mIE00IG1hY3JvcyB0aGF0IHByb2R1Y2Ugc2hlbGwgc2NyaXB0cyB0byBhdXRvbWF0aWNhbGx5IFwgCitjb25maWd1cmUgc29mdHdhcmUgc291cmNlIGNvZGUgcGFja2FnZXMuIEF1dG9jb25mIGNyZWF0ZXMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBmb3IgYSBwYWNrYWdlIGZyb20gYSB0ZW1wbGF0ZSBcCitmaWxlIHRoYXQgbGlzdHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZmVhdHVyZXMgdGhhdCB0aGUgcGFja2FnZSBjYW4gdXNlLCBpbiB0aGUgZm9ybSBvZiBNNCBtYWNybyBjYWxscy4iCitMSUNFTlNFID0gIkdQTHYzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTICs9ICJtNC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJtNC1uYXRpdmUgZ251LWNvbmZpZy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstbTQgbmF0aXZlc2RrLWdudS1jb25maWciCitSREVQRU5EU18ke1BOfSA9ICJtNCBnbnUtY29uZmlnIFwKKwkJICBwZXJsIFwKKwkJICBwZXJsLW1vZHVsZS1jYXJwIFwKKwkJICBwZXJsLW1vZHVsZS1jb25zdGFudCBcCisJCSAgcGVybC1tb2R1bGUtZXJybm8gXAorCQkgIHBlcmwtbW9kdWxlLWV4cG9ydGVyIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWJhc2VuYW1lIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWNvbXBhcmUgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtY29weSBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1nbG9iIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLXBhdGggXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtc3RhdCBcCisJCSAgcGVybC1tb2R1bGUtZ2V0b3B0LWxvbmcgXAorCQkgIHBlcmwtbW9kdWxlLWlvLWZpbGUgXAorCQkgIHBlcmwtbW9kdWxlLXBvc2l4IFwKKwkJICBwZXJsLW1vZHVsZS1kYXRhLWR1bXBlciBcCisJCSAiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibTQtbmF0aXZlIGdudS1jb25maWctbmF0aXZlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b2NvbmYvYXV0b2NvbmYtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vcHJvZ3JhbV9wcmVmaXgucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0ke1VTUkJJTlBBVEh9L3BlcmwiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiZDNhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjMub3JpZy9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjM5OjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzo0MzozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC03Niw2ICs3Niw3IEBACisgICAtaSwgLS1pbnN0YWxsICAgICAgICAgICAgY29weSBtaXNzaW5nIGF1eGlsaWFyeSBmaWxlcworICAgICAgIC0tbm8tcmVjdXJzaXZlICAgICAgIGRvbid0IHJlYnVpbGQgc3ViLXBhY2thZ2VzCisgICAtcywgLS1zeW1saW5rICAgICAgICAgICAgd2l0aCAtaSwgaW5zdGFsbCBzeW1ib2xpYyBsaW5rcyBpbnN0ZWFkIG9mIGNvcGllcworKyAgLXgsIC0tZXhjbHVkZT1TVEVQUyAgICAgIHN0ZXBzIHdlIHNob3VsZCBub3QgcnVuCisgICAtbSwgLS1tYWtlICAgICAgICAgICAgICAgd2hlbiBhcHBsaWNhYmxlLCByZS1ydW4gLi9jb25maWd1cmUgJiYgbWFrZQorICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbc3ludGF4XQorIAorQEAgLTEzNiw2ICsxMzcsMTMgQEAKKyAjIFJlY3Vyc2UgaW50byBzdWJwYWNrYWdlcworIG15ICRyZWN1cnNpdmUgPSAxOworIAorKyMgU3RlcHMgdG8gZXhjbHVkZQorK215IEBleGNsdWRlOworK215IEBleDsKKysKKytteSAkdXNlc19nZXR0ZXh0OworK215ICRjb25maWd1cmVfYWM7CisrCisgIyMgLS0tLS0tLS0tLSAjIworICMjIFJvdXRpbmVzLiAgIyMKKyAjIyAtLS0tLS0tLS0tICMjCitAQCAtMTUzLDYgKzE2MSw3IEBACisgCSAgJ0J8cHJlcGVuZC1pbmNsdWRlPXMnCSA9PiBcQHByZXBlbmRfaW5jbHVkZSwKKyAJICAnaXxpbnN0YWxsJyAgICAgICAgICAgID0+IFwkaW5zdGFsbCwKKyAJICAnc3xzeW1saW5rJyAgICAgICAgICAgID0+IFwkc3ltbGluaywKKysgIAkgICd4fGV4Y2x1ZGU9cycgICAgICAgICAgPT4gXEBleGNsdWRlLAorIAkgICdtfG1ha2UnICAgICAgICAgICAgICAgPT4gXCRydW5fbWFrZSwKKyAJICAncmVjdXJzaXZlIScgICAgICAgICAgID0+IFwkcmVjdXJzaXZlKTsKKyAKK0BAIC0xNjIsNiArMTcxLDggQEAKKyAgIHBhcnNlX1dBUk5JTkdTOworICAgcGFyc2Vfd2FybmluZ3MgJy0td2FybmluZ3MnLCBAd2FybmluZzsKKyAKKysgIEBleGNsdWRlID0gbWFwIHsgc3BsaXQgLywvIH0gQGV4Y2x1ZGU7CisrCisgICAjIEV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY29uZmlndXJlLmFjLCB0cmltIHRvIGdldCB0aGUKKyAgICMgZGlyZWN0b3J5LCBhbmQgbG9vayBmb3IgY29uZmlndXJlLmFjIGFnYWluLiAgQmVjYXVzZSAoaSkgdGhlIGNvZGUKKyAgICMgaXMgc2ltcGxlciwgYW5kIChpaSkgd2UgYXJlIHN0aWxsIGFibGUgdG8gZGlhZ25vc2Ugc2ltdWx0YW5lb3VzCitAQCAtMjU1LDYgKzI2NiwxMSBAQAorIHsKKyAgIG15ICgkYWNsb2NhbCwgJGZsYWdzKSA9IEBfOworIAorKyAgQGV4ID0gZ3JlcCAoL15hY2xvY2FsJC8sIEBleGNsdWRlKTsKKysgIGlmICgkI2V4ICE9IC0xKSB7CisrICAgIHJldHVybjsKKysgIH0KKysKKyAgICMgYWNsb2NhbCAxLjgrIGRvZXMgYWxsIHRoaXMgZm9yIGZyZWUuICBJdCBjYW4gYmUgcmVjb2duaXplZCBieSBpdHMKKyAgICMgLS1mb3JjZSBzdXBwb3J0LgorICAgaWYgKCRhY2xvY2FsX3N1cHBvcnRzX2ZvcmNlKQorQEAgLTM2OCw3ICszODQsMTAgQEAKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgeHN5c3RlbV9oaW50ICgiYXV0b3BvaW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIEdldHRleHQiLCAiJGF1dG9wb2ludCIpOworKyAgICAgIEBleCA9IGdyZXAgKC9eYXV0b3BvaW50JC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbV9oaW50ICgiYXV0b3BvaW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIEdldHRleHQiLCAiJGF1dG9wb2ludCIpOworKyAgICAgIH0KKyAgICAgfQorIAorIAorQEAgLTUzMiwxNiArNTUxLDE3IEBACisgCXsKKyAJICAkbGlidG9vbGl6ZSAuPSAiIC0tbHRkbCI7CisgCX0KKy0gICAgICB4c3lzdGVtX2hpbnQgKCJsaWJ0b29saXplIGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIExpYnRvb2wiLCAkbGlidG9vbGl6ZSk7CistICAgICAgJHJlcnVuX2FjbG9jYWwgPSAxOworKyAgICAgIEBleCA9IGdyZXAgKC9ebGlidG9vbGl6ZSQvLCBAZXhjbHVkZSk7CisrICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgICAgIHhzeXN0ZW1faGludCAoImxpYnRvb2xpemUgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwYWNrYWdlIHVzZXMgTGlidG9vbCIsICRsaWJ0b29saXplKTsKKysgICAgICAgICRyZXJ1bl9hY2xvY2FsID0gMTsKKysgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IG5vdCBydW5uaW5nIGxpYnRvb2xpemU6IC0taW5zdGFsbCBub3QgZ2l2ZW4iOworICAgICB9CisgCistCistCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAgIyBSZXJ1bm5pbmcgYWNsb2NhbC4gICMKKyAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjCitAQCAtNTcyLDcgKzU5MiwxMCBAQAorICAgIyBsYXR0ZXIgcnVucyB0aGUgZm9ybWVyLCBhbmQgKGlpKSBhdXRvY29uZiBpcyBzdHJpY3RlciB0aGFuCisgICAjIGF1dG9oZWFkZXIuICBTbyBhbGwgaW4gYWxsLCBhdXRvY29uZiBzaG91bGQgZ2l2ZSBiZXR0ZXIgZXJyb3IKKyAgICMgbWVzc2FnZXMuCistICB4c3lzdGVtICgkYXV0b2NvbmYpOworKyAgQGV4ID0gZ3JlcCAoL15hdXRvY29uZiQvLCBAZXhjbHVkZSk7CisrICBpZiAoJCNleCA9PSAtMSkgeworKyAgICB4c3lzdGVtICgiJGF1dG9jb25mIik7CisrICB9CisgCisgCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMKK0BAIC01OTMsNyArNjE2LDEwIEBACisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHhzeXN0ZW0gKCRhdXRvaGVhZGVyKTsKKysgICAgICBAZXggPSBncmVwICgvXmF1dG9oZWFkZXIkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtICgiJGF1dG9oZWFkZXIiKTsKKysgICAgICB9CisgICAgIH0KKyAKKyAKK0BAIC02MTAsNyArNjM2LDEwIEBACisgICAgICAgIyBXZSBzaG91bGQgYWx3YXlzIHJ1biBhdXRvbWFrZSwgYW5kIGxldCBpdCBkZWNpZGUgd2hldGhlciBpdCBzaGFsbAorICAgICAgICMgdXBkYXRlIHRoZSBmaWxlIG9yIG5vdC4gIEluIGZhY3QsIHRoZSBlZmZlY3Qgb2YgYCRmb3JjZScgaXMgYWxyZWFkeQorICAgICAgICMgaW5jbHVkZWQgaW4gYCRhdXRvbWFrZScgdmlhIGAtLW5vLWZvcmNlJy4KKy0gICAgICB4c3lzdGVtICgkYXV0b21ha2UpOworKyAgICAgIEBleCA9IGdyZXAgKC9eYXV0b21ha2UkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtICgiJGF1dG9tYWtlIik7CisrICAgICAgfQorICAgICB9CisgCisgCitAQCAtNjM0LDcgKzY2MywxMCBAQAorIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIHsKKy0JICAgICAgeHN5c3RlbSAoIiRtYWtlIik7CisrICAgICAgICAgICAgICBAZXggPSBncmVwICgvXm1ha2UkLywgQGV4Y2x1ZGUpOworKyAgICAgICAgICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysJICAgICAgICB4c3lzdGVtICgiJG1ha2UiKTsKKysgICAgICAgICAgICAgIH0KKyAJICAgIH0KKyAJfQorICAgICB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmMThjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworSW5kZXg6IGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjYzLm9yaWcvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzo0Mzo1NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6NDY6MTYuMDAwMDAwMDAwICswMDAwCitAQCAtNTgsNyArNTgsNyBAQAorICRoZWxwID0gIlVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbRElSRUNUT1JZXS4uLgorIAorIFJ1biBgYXV0b2NvbmYnIChhbmQgYGF1dG9oZWFkZXInLCBgYWNsb2NhbCcsIGBhdXRvbWFrZScsIGBhdXRvcG9pbnQnCistKGZvcm1lcmx5IGBnZXR0ZXh0aXplJyksIGFuZCBgbGlidG9vbGl6ZScgd2hlcmUgYXBwcm9wcmlhdGUpCisrKGZvcm1lcmx5IGBnZXR0ZXh0aXplJyksIGBsaWJ0b29saXplJywgYW5kIGBnbnUtY29uZmlnaXplJyB3aGVyZSBhcHByb3ByaWF0ZSkKKyByZXBlYXRlZGx5IHRvIHJlbWFrZSB0aGUgR05VIEJ1aWxkIFN5c3RlbSBmaWxlcyBpbiBzcGVjaWZpZWQKKyBESVJFQ1RPUklFUyBhbmQgdGhlaXIgc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHRpbmcgdG8gYC4nKS4KKyAKK0BAIC0xMTUsNiArMTE1LDcgQEAKKyBteSAkbGlidG9vbGl6ZSA9ICRFTlZ7J0xJQlRPT0xJWkUnfSB8fCAnbGlidG9vbGl6ZSc7CisgbXkgJGF1dG9wb2ludCAgPSAkRU5WeydBVVRPUE9JTlQnfSAgfHwgJ2F1dG9wb2ludCc7CisgbXkgJG1ha2UgICAgICAgPSAkRU5WeydNQUtFJ30gICAgICAgfHwgJ21ha2UnOworK215ICRnbnVjb25maWdpemUgPSAkRU5WeydHTlVDT05GSUdJWkUnfSAgICAgICB8fCAnZ251LWNvbmZpZ2l6ZSc7CisgCisgIyAtLWluc3RhbGwgLS0gYXMgLS1hZGQtbWlzc2luZyBpbiBvdGhlciB0b29scy4KKyBteSAkaW5zdGFsbCA9IDA7CitAQCAtNjQ0LDYgKzY0NSwxMCBAQAorICAgICAgIH0KKyAgICAgfQorIAorKyAgQGV4ID0gZ3JlcCAoL15nbnUtY29uZmlnaXplJC8sIEBleGNsdWRlKTsKKysgIGlmICgkI2V4ID09IC0xKSB7CisrICAgIHhzeXN0ZW0gKCIkZ251Y29uZmlnaXplIik7CisrICB9CisgCisgICAjIC0tLS0tLS0tLS0tLS0tICMKKyAgICMgUnVubmluZyBtYWtlLiAgIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzMjZmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42My5vcmlnL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMDgtMjggMDM6MDg6MTAuMDAwMDAwMDAwICswMTAwCisrKysgYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjM4OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTE5MCw2ICsxOTAsNyBAQAorICAgJGF1dG9jb25mICAgLj0gam9pbiAoJyAtLXByZXBlbmQtaW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBwcmVwZW5kX2luY2x1ZGUpOworICAgJGF1dG9oZWFkZXIgLj0gam9pbiAoJyAtLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAaW5jbHVkZSk7CisgICAkYXV0b2hlYWRlciAuPSBqb2luICgnIC0tcHJlcGVuZC1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQHByZXBlbmRfaW5jbHVkZSk7CisrICAkYWNsb2NhbCAgICAuPSBqb2luICgnIC1JICcsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworIAorICAgIyAtLWluc3RhbGwgYW5kIC0tc3ltbGluazsKKyAgIGlmICgkaW5zdGFsbCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG90ZXN0LWF1dG9tYWtlLXJlc3VsdC1mb3JtYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlODE3NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoCkBAIC0wLDAgKzEsMTM2IEBACitGcm9tIGE3ZTcyMmY5NzRlMjUyOWQzZTU2NGQ4ZDk0Yzg2Y2M4YmRiYzQwZTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYWR1IFBhdHJpdSA8cmFkdS5wYXRyaXVAZW5lYS5jb20+CitEYXRlOiBNb24sIDI0IE1hciAyMDE0IDE2OjMzOjE5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGF1dG90ZXN0OiBuZXcgdGVzdHN1aXRlIG9wdGlvbiB0byBlbmFibGUgYXV0b21ha2UgdGVzdAorIHJlc3VsdCBmb3JtYXQKKworKiBsaWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNDogYWRkZWQgIi0tYW0tZm10IHwgLUEiIGNvbW1hbmQgbGluZQorcGFyYW1ldGVyIGZvciB0ZXN0c3VpdGUgc2NyaXB0IHRvIGVuYWJsZSAiUkVTVUxUOiB0ZXN0bmFtZSIgb3V0cHV0Oword2lsbCBiZSB1c2VkIGJ5IHlvY3RvIHB0ZXN0IHBhY2thZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUmFkdSBQYXRyaXUgPHJhZHUucGF0cml1QGVuZWEuY29tPgorLS0tCisgbGliL2F1dG90ZXN0L2dlbmVyYWwubTQgfCAgIDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00IGIvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKK2luZGV4IDYwYzAzNTIuLmMxZjVhOWIgMTAwNjQ0CistLS0gYS9saWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNAorKysrIGIvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKK0BAIC00MTIsNiArNDEyLDkgQEAgYXRfcmVjaGVjaz0KKyAjIFdoZXRoZXIgYSB3cml0ZSBmYWlsdXJlIG9jY3VycmVkCisgYXRfd3JpdGVfZmFpbD0wCisgCisrIyBBdXRvbWFrZSByZXN1bHQgZm9ybWF0ICJyZXN1bHQ6IHRlc3RuYW1lIgorK2F0X2FtX2ZtdD1mYWxzZQorKworICMgVGhlIGRpcmVjdG9yeSB3ZSBydW4gdGhlIHN1aXRlIGluLiAgRGVmYXVsdCB0byAuIGlmIG5vIC1DIG9wdGlvbi4KKyBhdF9kaXI9YHB3ZGAKKyAjIEFuIGFic29sdXRlIHJlZmVyZW5jZSB0byB0aGlzIHRlc3RzdWl0ZSBzY3JpcHQuCitAQCAtNTMwLDYgKzUzMywxMCBAQCBkbworIAlhdF9jaGVja19maWx0ZXJfdHJhY2U9YXRfZm5fZmlsdGVyX3RyYWNlCisgCTs7CisgCisrICAgIC0tYW0tZm10IHwgLUEgKQorKwlhdF9hbV9mbXQ9OgorKwk7OworKworICAgICBbWzAtOV0gfCBbMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldWzAtOV1dKQorIAlhdF9mbl92YWxpZGF0ZV9yYW5nZXMgYXRfb3B0aW9uCisgCUFTX1ZBUl9BUFBFTkQoW2F0X2dyb3Vwc10sIFsiJGF0X29wdGlvbiRhc19ubCJdKQorQEAgLTcxOCwxMCArNzI1LDEwIEBAIG00X2RpdmVydF9wdXNoKFtIRUxQX01PREVTXSlkbmwKKyBjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCisgCisgT3BlcmF0aW9uIG1vZGVzOgorLSAgLWgsIC0taGVscCAgICAgcHJpbnQgdGhlIGhlbHAgbWVzc2FnZSwgdGhlbiBleGl0CistICAtViwgLS12ZXJzaW9uICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CistICAtYywgLS1jbGVhbiAgICByZW1vdmUgYWxsIHRoZSBmaWxlcyB0aGlzIHRlc3Qgc3VpdGUgbWlnaHQgY3JlYXRlIGFuZCBleGl0CistICAtbCwgLS1saXN0ICAgICBkZXNjcmliZXMgYWxsIHRoZSB0ZXN0cywgb3IgdGhlIHNlbGVjdGVkIFRFU1RTCisrICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhlIGhlbHAgbWVzc2FnZSwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorKyAgLWMsIC0tY2xlYW4gICAgIHJlbW92ZSBhbGwgdGhlIGZpbGVzIHRoaXMgdGVzdCBzdWl0ZSBtaWdodCBjcmVhdGUgYW5kIGV4aXQKKysgIC1sLCAtLWxpc3QgICAgICBkZXNjcmliZXMgYWxsIHRoZSB0ZXN0cywgb3IgdGhlIHNlbGVjdGVkIFRFU1RTCisgX0FURU9GCisgbTRfZGl2ZXJ0X3BvcChbSEVMUF9NT0RFU10pZG5sCisgbTRfd3JhcChbbTRfZGl2ZXJ0X3B1c2goW0hFTFBfVFVOSU5HX0JFR0lOXSlkbmwKK0BAIC03NDcsNiArNzU0LDcgQEAgRXhlY3V0aW9uIHR1bmluZzoKKyAgIC1kLCAtLWRlYnVnICAgIGluaGliaXQgY2xlYW4gdXAgYW5kIHRvcC1sZXZlbCBsb2dnaW5nCisgWyAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHNdCisgICAteCwgLS10cmFjZSAgICBlbmFibGUgdGVzdHMgc2hlbGwgdHJhY2luZworKyAgLUEsIC0tYW0tZm10ICAgYXV0b21ha2UgcmVzdWx0IGZvcm1hdCAicmVzdWx0OiB0ZXN0bmFtZSIKKyBfQVRFT0YKKyBtNF9kaXZlcnRfcG9wKFtIRUxQX1RVTklOR19CRUdJTl0pXSlkbmwKKyBtNF9kaXZlcnRfcHVzaChbSEVMUF9FTkRdKWRubAorQEAgLTExNjIsNyArMTE3MCw5IEBAIGF0X2ZuX2dyb3VwX2Jhbm5lciAoKQorICAgICBbKl0pICAgICAgICAgIGF0X2Rlc2NfbGluZT0iJFsxXTogIiAgOzsKKyAgIGVzYWMKKyAgIEFTX1ZBUl9BUFBFTkQoW2F0X2Rlc2NfbGluZV0sIFsiJFszXSRbNF0iXSkKKy0gICRhdF9xdWlldCBBU19FQ0hPX04oWyIkYXRfZGVzY19saW5lIl0pCisrICBpZiAhICRhdF9hbV9mbXQ7IHRoZW4KKysgICAgJGF0X3F1aWV0IEFTX0VDSE9fTihbIiRhdF9kZXNjX2xpbmUiXSkKKysgIGZpCisgICBlY2hvICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gY29tcGlsYXRpb24gLSotIiA+PiAiJGF0X2dyb3VwX2xvZyIKKyB9CisgCitAQCAtMTE4OCw0MiArMTE5OCw1MSBAQCBfQVRFT0YKKyAgIGNhc2UgJGF0X3hmYWlsOiRhdF9zdGF0dXMgaW4KKyAgICAgeWVzOjApCisgCWF0X21zZz0iVU5FWFBFQ1RFRCBQQVNTIgorKwlhdF9hbV9tc2c9IlhQQVNTIgorIAlhdF9yZXM9eHBhc3MKKyAJYXRfZXJyZXhpdD0kYXRfZXJyZXhpdF9wCisgCWF0X2NvbG9yPSRhdF9yZWQKKyAJOzsKKyAgICAgbm86MCkKKyAJYXRfbXNnPSJvayIKKysJYXRfYW1fbXNnPSJQQVNTIgorIAlhdF9yZXM9cGFzcworIAlhdF9lcnJleGl0PWZhbHNlCisgCWF0X2NvbG9yPSRhdF9ncm4KKyAJOzsKKyAgICAgKjo3NykKKyAJYXRfbXNnPSdza2lwcGVkICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisrCWF0X2FtX21zZz0iU0tJUCIKKyAJYXRfcmVzPXNraXAKKyAJYXRfZXJyZXhpdD1mYWxzZQorIAlhdF9jb2xvcj0kYXRfYmx1CisgCTs7CisgICAgIG5vOiogfCAqOjk5KQorIAlhdF9tc2c9J0ZBSUxFRCAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworKwlhdF9hbV9tc2c9IkZBSUwiCisgCWF0X3Jlcz1mYWlsCisgCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorIAlhdF9jb2xvcj0kYXRfcmVkCisgCTs7CisgICAgIHllczoqKQorIAlhdF9tc2c9J2V4cGVjdGVkIGZhaWx1cmUgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKysJYXRfYW1fbXNnPSJYRkFJTCIKKyAJYXRfcmVzPXhmYWlsCisgCWF0X2VycmV4aXQ9ZmFsc2UKKyAJYXRfY29sb3I9JGF0X2xnbgorIAk7OworICAgZXNhYworICAgZWNobyAiJGF0X3JlcyIgPiAiJGF0X2pvYl9kaXIvJGF0X3JlcyIKKy0gICMgSW4gcGFyYWxsZWwgbW9kZSwgb3V0cHV0IHRoZSBzdW1tYXJ5IGxpbmUgb25seSBhZnRlcndhcmRzLgorLSAgaWYgdGVzdCAkYXRfam9icyAtbmUgMSAmJiB0ZXN0IC1uICIkYXRfdmVyYm9zZSI7IHRoZW4KKy0gICAgQVNfRUNITyhbIiRhdF9kZXNjX2xpbmUgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiXSkKKysgIGlmICRhdF9hbV9mbXQ7IHRoZW4KKysgICAgICBBU19FQ0hPKFsiJGF0X2FtX21zZzogJGF0X2Rlc2MiXSkKKyAgIGVsc2UKKy0gICAgIyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzZXBhcmF0b3IgZXZlbiB3aXRoIGxvbmcgdGl0bGVzLgorLSAgICBBU19FQ0hPKFsiICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICAgICMgSW4gcGFyYWxsZWwgbW9kZSwgb3V0cHV0IHRoZSBzdW1tYXJ5IGxpbmUgb25seSBhZnRlcndhcmRzLgorKyAgICBpZiB0ZXN0ICRhdF9qb2JzIC1uZSAxICYmIHRlc3QgLW4gIiRhdF92ZXJib3NlIjsgdGhlbgorKyAgICAgIEFTX0VDSE8oWyIkYXRfZGVzY19saW5lICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICAgIGVsc2UKKysgICAgICAjIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHNlcGFyYXRvciBldmVuIHdpdGggbG9uZyB0aXRsZXMuCisrICAgICAgQVNfRUNITyhbIiAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgICBmaQorICAgZmkKKyAgIGF0X2xvZ19tc2c9IiRhdF9ncm91cC4gJGF0X2Rlc2MgKCRhdF9zZXR1cF9saW5lKTogJGF0X21zZyIKKyAgIGNhc2UgJGF0X3N0YXR1cyBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NoZWNrLWF1dG9tYWtlLWNyb3NzLXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzOTRkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1VzZSAtLXdhcm5pbmc9Y3Jvc3Mgb25seSBpZiBzdXBwb3J0ZWQgYnkgYXV0b21ha2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKy0tLSBhL2Jpbi9hdXRvcmVjb25mLmluCisrKysgYi9iaW4vYXV0b3JlY29uZi5pbgorQEAgLTEyNyw2ICsxMjcsOCBAQCBteSAkYWNsb2NhbF9zdXBwb3J0c193YXJuaW5ncyA9IDA7CisgbXkgJGF1dG9tYWtlX3N1cHBvcnRzX2ZvcmNlX21pc3NpbmcgPSAwOworICMgRG9lcyBhdXRvbWFrZSBzdXBwb3J0IC1XZm9vPworIG15ICRhdXRvbWFrZV9zdXBwb3J0c193YXJuaW5ncyA9IDA7CisrIyBEb2VzIGF1dG9tYWtlIHN1cHBvcnQgLS13YXJuaW5nPWNyb3NzCisrbXkgJGF1dG9tYWtlX3N1cHBvcnRzX2Nyb3NzX3dhcm5pbmcgPSAwOworIAorIG15IEBwcmVwZW5kX2luY2x1ZGU7CisgbXkgQGluY2x1ZGU7CitAQCAtMTkxLDYgKzE5Myw3IEBAIHN1YiBwYXJzZV9hcmdzICgpCisgICAkYWNsb2NhbF9zdXBwb3J0c193YXJuaW5ncyA9ICRhY2xvY2FsX2hlbHAgPX4gLy0td2FybmluZ3MvOworICAgJGF1dG9tYWtlX3N1cHBvcnRzX2ZvcmNlX21pc3NpbmcgPSAkYXV0b21ha2VfaGVscCA9fiAvLS1mb3JjZS1taXNzaW5nLzsKKyAgICRhdXRvbWFrZV9zdXBwb3J0c193YXJuaW5ncyA9ICRhdXRvbWFrZV9oZWxwID1+IC8tLXdhcm5pbmdzLzsKKysgICRhdXRvbWFrZV9zdXBwb3J0c19jcm9zc193YXJuaW5nID0gJGF1dG9tYWtlX2hlbHAgPX4gL2Nyb3NzLzsKKyAKKyAgICMgRGlzcGF0Y2ggYXV0b3JlY29uZidzIG9wdGlvbiB0byB0aGUgdG9vbHMuCisgICAjIC0taW5jbHVkZTsKK0BAIC0yNDQsNiArMjQ3LDggQEAgc3ViIHBhcnNlX2FyZ3MgKCkKKyAgICAgICAkbGlidG9vbGl6ZSAuPSAnIC0tZGVidWcnOworICAgICB9CisgICAjIC0td2FybmluZ3M7CisrICBAd2FybmluZyA9IGdyZXAgeyAkXyBuZSAiY3Jvc3MiIH0gQHdhcm5pbmcKKysgICAgaWYgISAkYXV0b21ha2Vfc3VwcG9ydHNfY3Jvc3Nfd2FybmluZzsKKyAgIGlmIChAd2FybmluZykKKyAgICAgeworICAgICAgIG15ICR3YXJuID0gJyAtLXdhcm5pbmdzPScgLiBqb2luICgnLCcsIEB3YXJuaW5nKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjA0NDQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitQb2t5IHByb3ZpZGVzIGEgbGlzdCBvZiBzaXRlIGZpbGVzIGluIENPTkZJR19TSVRFIHdoZXJlYXMgYXV0b2NvbmYgCitvbmx5IGV4cGVjdHMgb25lIGZpbGUuIFRoaXMgcGF0Y2ggY2hhbmdlcyBhdXRvY29uZiB0byBhY2NlcHQgYSBsaXN0IG9mIAordGhlbS4KKworUlAgMS8yLzEwCisKK1VwZGF0ZWQgZm9yIDIuNjggdmVyc2lvbjogdGhlIENPTkZJR19TSVRFIHZhciB3YXMgbm90IGdldHRpbmcgdXNlZCBhdCBhbGwKK2ZpeGVkIHRoZSAyLjY4IGNvZGUgCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA1LzI3CisKK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9nZW5lcmFsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9nZW5lcmFsLm00CisrKysgYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorQEAgLTE4NzgsNyArMTg3OCw2IEBAIEFVX0RFRlVOKFtBQ19WQUxJREFURV9DQUNIRURfU1lTVEVNX1RVUEwKKyBtNF9kZWZpbmUoW0FDX1NJVEVfTE9BRF0sCisgWyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCisgYWNfc2l0ZV9maWxlMT1OT05FCistYWNfc2l0ZV9maWxlMj1OT05FCisgaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgIGNhc2UgJENPTkZJR19TSVRFIGluIEAlOkAoKAorQEAgLTE4ODYsMTQgKzE4ODUsOCBAQCBpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OworICAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICAgZXNhYworLWVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCistICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKy0gIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKKy1lbHNlCistICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorLSAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCisgZmkKKy1mb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorK2ZvciBhY19zaXRlX2ZpbGUgaW4gJGFjX3NpdGVfZmlsZTEKKyBkbworICAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvZml4X3BhdGhfeHRyYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRmODhmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2gKQEAgLTAsMCArMSwxMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBkb24ndCBidWlsZCB4bWttZiBzbyBhbnkgdmFsdWVzIHJldHVybmVkIGZyb20gaXQgYXJlIGdvaW5nIHRvIGJlIHdyb25nLgorVXNpbmcgYW55IHBhdGhzIGluIC91c3IvIGZvciB4IGhlYWRlcnMvbGlicyBpcyBhIGJhZCBpZGVhIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorVGhpcyBwYXRjaCByZW1vdmVzIHRoZW0gdG8gc3RvcCBhbnkgY29uZnVzaW9uLgorCitSUCAtIDIwMDcxMTE1CisKK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9saWJzLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9saWJzLm00CisrKysgYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvbGlicy5tNAorQEAgLTE1OSw1MyArMTU5LDYgQEAgbTRfcG9wZGVmKFtBQ19MaWJfTmFtZV0pZG5sCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIAorIAorLSMgX0FDX1BBVEhfWF9YTUtNRgorLSMgLS0tLS0tLS0tLS0tLS0tLQorLSMgSW50ZXJuYWwgc3Vicm91dGluZSBvZiBfQUNfUEFUSF9YLgorLSMgU2V0IGFjX3hfaW5jbHVkZXMgYW5kL29yIGFjX3hfbGlicmFyaWVzLgorLW00X2RlZmluZShbX0FDX1BBVEhfWF9YTUtNRl0sCistW0FDX0FSR19WQVIoWE1LTUYsIFtQYXRoIHRvIHhta21mLCBNYWtlZmlsZSBnZW5lcmF0b3IgZm9yIFggV2luZG93IFN5c3RlbV0pZG5sCistcm0gLWYgLXIgY29uZnRlc3QuZGlyCistaWYgbWtkaXIgY29uZnRlc3QuZGlyOyB0aGVuCistICBjZCBjb25mdGVzdC5kaXIKKy0gIGNhdCA+SW1ha2VmaWxlIDw8J19BQ0VPRicKKy1pbmNyb290OgorLQlAZWNobyBpbmNyb290PScke0lOQ1JPT1R9JworLXVzcmxpYmRpcjoKKy0JQGVjaG8gdXNybGliZGlyPScke1VTUkxJQkRJUn0nCistbGliZGlyOgorLQlAZWNobyBsaWJkaXI9JyR7TElCRElSfScKKy1fQUNFT0YKKy0gIGlmIChleHBvcnQgQ0M7ICR7WE1LTUYteG1rbWZ9KSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIHRlc3QgLWYgTWFrZWZpbGU7IHRoZW4KKy0gICAgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorLSAgICBmb3IgYWNfdmFyIGluIGluY3Jvb3QgdXNybGliZGlyIGxpYmRpcjsgZG8KKy0gICAgICBldmFsICJhY19pbV8kYWNfdmFyPVxgXCR7TUFLRS1tYWtlfSAkYWNfdmFyIDI+L2Rldi9udWxsIHwgc2VkIC1uICdzL14kYWNfdmFyPS8vcCdcYCIKKy0gICAgZG9uZQorLSAgICAjIE9wZW4gV2luZG93cyB4bWttZiByZXBvcnRlZGx5IHNldHMgTElCRElSIGluc3RlYWQgb2YgVVNSTElCRElSLgorLSAgICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2wgZHlsaWIgbGEgZGxsOyBkbworLSAgICAgIGlmIHRlc3QgISAtZiAiJGFjX2ltX3VzcmxpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiIgJiYKKy0JIHRlc3QgLWYgIiRhY19pbV9saWJkaXIvbGliWDExLiRhY19leHRlbnNpb24iOyB0aGVuCistCWFjX2ltX3VzcmxpYmRpcj0kYWNfaW1fbGliZGlyOyBicmVhaworLSAgICAgIGZpCistICAgIGRvbmUKKy0gICAgIyBTY3JlZW4gb3V0IGJvZ3VzIHZhbHVlcyBmcm9tIHRoZSBpbWFrZSBjb25maWd1cmF0aW9uLiAgVGhleSBhcmUKKy0gICAgIyBib2d1cyBib3RoIGJlY2F1c2UgdGhleSBhcmUgdGhlIGRlZmF1bHQgYW55d2F5LCBhbmQgYmVjYXVzZQorLSAgICAjIHVzaW5nIHRoZW0gd291bGQgYnJlYWsgZ2NjIG9uIHN5c3RlbXMgd2hlcmUgaXQgbmVlZHMgZml4ZWQgaW5jbHVkZXMuCistICAgIGNhc2UgJGFjX2ltX2luY3Jvb3QgaW4KKy0JL3Vzci9pbmNsdWRlKSBhY194X2luY2x1ZGVzPSA7OworLQkqKSB0ZXN0IC1mICIkYWNfaW1faW5jcm9vdC9YMTEvWG9zLmgiICYmIGFjX3hfaW5jbHVkZXM9JGFjX2ltX2luY3Jvb3Q7OworLSAgICBlc2FjCistICAgIGNhc2UgJGFjX2ltX3VzcmxpYmRpciBpbgorLQkvdXNyL2xpYiB8IC91c3IvbGliNjQgfCAvbGliIHwgL2xpYjY0KSA7OworLQkqKSB0ZXN0IC1kICIkYWNfaW1fdXNybGliZGlyIiAmJiBhY194X2xpYnJhcmllcz0kYWNfaW1fdXNybGliZGlyIDs7CistICAgIGVzYWMKKy0gIGZpCistICBjZCAuLgorLSAgcm0gLWYgLXIgY29uZnRlc3QuZGlyCistZmkKKy1dKSMgX0FDX1BBVEhfWF9YTUtNRgorLQorLQorICMgX0FDX1BBVEhfWF9ESVJFQ1QKKyAjIC0tLS0tLS0tLS0tLS0tLS0tCisgIyBJbnRlcm5hbCBzdWJyb3V0aW5lIG9mIF9BQ19QQVRIX1guCitAQCAtMjEzLDQ0ICsxNjYsNyBAQCBmaQorIG00X2RlZmluZShbX0FDX1BBVEhfWF9ESVJFQ1RdLAorIFsjIFN0YW5kYXJkIHNldCBvZiBjb21tb24gZGlyZWN0b3JpZXMgZm9yIFggaGVhZGVycy4KKyAjIENoZWNrIFgxMSBiZWZvcmUgWDExUm4gYmVjYXVzZSBpdCBpcyBvZnRlbiBhIHN5bWxpbmsgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKy1hY194X2hlYWRlcl9kaXJzPScKKy0vdXNyL1gxMS9pbmNsdWRlCistL3Vzci9YMTFSNy9pbmNsdWRlCistL3Vzci9YMTFSNi9pbmNsdWRlCistL3Vzci9YMTFSNS9pbmNsdWRlCistL3Vzci9YMTFSNC9pbmNsdWRlCistCistL3Vzci9pbmNsdWRlL1gxMQorLS91c3IvaW5jbHVkZS9YMTFSNworLS91c3IvaW5jbHVkZS9YMTFSNgorLS91c3IvaW5jbHVkZS9YMTFSNQorLS91c3IvaW5jbHVkZS9YMTFSNAorLQorLS91c3IvbG9jYWwvWDExL2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI3L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI2L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI1L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI0L2luY2x1ZGUKKy0KKy0vdXNyL2xvY2FsL2luY2x1ZGUvWDExCistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI3CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI2CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI1CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI0CistCistL3Vzci9YMzg2L2luY2x1ZGUKKy0vdXNyL3gzODYvaW5jbHVkZQorLS91c3IvWEZyZWU4Ni9pbmNsdWRlL1gxMQorLQorLS91c3IvaW5jbHVkZQorLS91c3IvbG9jYWwvaW5jbHVkZQorLS91c3IvdW5zdXBwb3J0ZWQvaW5jbHVkZQorLS91c3IvYXRoZW5hL2luY2x1ZGUKKy0vdXNyL2xvY2FsL3gxMXI1L2luY2x1ZGUKKy0vdXNyL2xwcC9YYW1wbGVzL2luY2x1ZGUKKy0KKy0vdXNyL29wZW53aW4vaW5jbHVkZQorLS91c3Ivb3Blbndpbi9zaGFyZS9pbmNsdWRlJworK2FjX3hfaGVhZGVyX2RpcnM9JycKKyAKKyBpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBubzsgdGhlbgorICAgIyBHdWVzcyB3aGVyZSB0byBmaW5kIGluY2x1ZGUgZmlsZXMsIGJ5IGxvb2tpbmcgZm9yIFhsaWIuaC4KK0BAIC0yOTksNyArMjE1LDYgQEAgQUNfREVGVU4oW19BQ19QQVRIX1hdLAorIFtBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV94LAorIFsjIE9uZSBvciBib3RoIG9mIHRoZSB2YXJzIGFyZSBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgbm8gY2FjaGVkIHZhbHVlLgorIGFjX3hfaW5jbHVkZXM9bm8gYWNfeF9saWJyYXJpZXM9bm8KKy1fQUNfUEFUSF9YX1hNS01GCisgX0FDX1BBVEhfWF9ESVJFQ1QKKyBjYXNlICRhY194X2luY2x1ZGVzLCRhY194X2xpYnJhcmllcyBpbiAjKAorICAgbm8sKiB8ICosbm8gfCAqXCcqKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcHJlZmVyYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc2ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBDT05GSUdfU0hFTEwgYW5kIFNIRUxMIHdoaWNoIG1heSBnZXQgZXhwb3J0ZWQgaW50bworc2NyaXB0cyBzaGFyZWQgdmlhIHNzdGF0ZSBvbnRvIG90aGVyIHN5c3RlbXMuCisKK1NvbWUgc3lzdGVtcyBoYXZlIC9iaW4vc2ggLT4gZGFzaCBhbmQgb3RoZXJzIC9iaW4vc2ggLT4gYmFzaC4gQmFzaCBpcyBwcmVmZXJyZWQgCitidXQgc29tZXRpbWVzIHdlIGNhbiBzb21ldGltZXMgZW5kIHVwIGV4cG9ydGluZyAvYmluL3NoIHlldCB1c2UgYmFzaGlzbXMuCisKK1RoaXMgcGF0Y2ggcHV0cyBiYXNoIGZpcnN0IGluIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGljaCBhdm9pZHMgdGhlIGJhc2gvZGFzaCBjb25mdXNpb24uCisKK1JQIDIwMTIvOS8yMworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhdXRvY29uZi0yLjY5L2xpYi9tNHN1Z2FyL200c2gubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY5Lm9yaWcvbGliL200c3VnYXIvbTRzaC5tNAkyMDEyLTAzLTA3IDE3OjM1OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGF1dG9jb25mLTIuNjkvbGliL200c3VnYXIvbTRzaC5tNAkyMDEzLTA5LTIzIDE2OjEyOjM4Ljg1MzU5NzUxNSArMDAwMAorQEAgLTIyOSw3ICsyMjksNyBAQAorICAgICBbX0FTX1BBVEhfV0FMSyhbL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEhdLAorICAgICAgIFtjYXNlICRhc19kaXIgaW4gQCU6QCgKKyAJIC8qKQorLQkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisrCSAgIGZvciBhc19iYXNlIGluIGJhc2ggc2gga3NoIHNoNTsgZG8KKyAJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisgCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorIAkgICAgIEFTX0lGKFt7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzhhNDAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCistLS0gYXV0b2NvbmYtMi41Ny9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNH5wcm9ncmFtX3ByZWZpeAorKysrIGF1dG9jb25mLTIuNTcvbGliL2F1dG9jb25mL2dlbmVyYWwubTQKK0BAIC0xNjc2LDggKzE2NzYsOSBAQAorICMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KKyAjIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCisgdGVzdCAtbiAiJHRhcmdldF9hbGlhcyIgJiYKKy0gIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKy0gICAgTk9ORU5PTkVzLHgseCwgJiYKKysgIHRlc3QgIiR0YXJnZXRfYWxpYXMiICE9ICIkaG9zdF9hbGlhcyIgJiYKKysgICAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAorKyAgICAgIE5PTkVOT05Fcyx4LHgsICYmCisgICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tW11kbmwKKyBdKSMgQUNfQ0FOT05JQ0FMX1RBUkdFVAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQyZTJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorV2UgaGF2ZSBwcm9ibGVtIHVzaW5nIGhhcmRjb2RlZCBkaXJlY3RvcmllcyBsaWtlIC91c3IvbG9jYWwgaGVyZQord2hpY2ggd2lsbCBiZSBjaGVja2VkIGZvciBjcm9zcyBidWlsZHMuIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hpY2gKK2lzIHZhbGlkIGZvciBBSVggb25seS4gV2UgZG8gbm90IGhhdmUgQUlYIGFzIG9uZSBvZiBvdXIgc3VwcG9ydGVkCitidWlsZCBob3N0IG9yIHRhcmdldC4gVGhlcmVmb3JlIHdlIGdldCByaWQgb2YgdGhlIGhhcmRjb2RlZCBwYXRocworYW5kIG1ha2UgbGlmZSBlYXNpZXIgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIHByb2Nlc3MuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbVXBzdHJlYW0gZG9lcyBjYXJlIGZvciBBSVggd2hpbGUgd2UgbWF5IG5vdF0KK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9mdW5jdGlvbnMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY4Lm9yaWcvbGliL2F1dG9jb25mL2Z1bmN0aW9ucy5tNAkyMDEwLTA5LTIyIDE0OjUyOjE5LjAwMDAwMDAwMCAtMDcwMAorKysrIGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2Z1bmN0aW9ucy5tNAkyMDExLTA4LTAzIDExOjU3OjA1LjgyMjE5OTUxMyAtMDcwMAorQEAgLTc0OSwxNSArNzQ5LDYgQEAgaWYgdGVzdCAkYWNfaGF2ZV9mdW5jID0gbm87IHRoZW4KKyAgICAgW0xJQlM9Ii1sdXRpbCAkTElCUyIgYWNfaGF2ZV9mdW5jPXllcyBhY19jdl9mdW5jX2dldGxvYWRhdmdfc2V0Z2lkPXllc10pCisgZmkKKyAKKy1pZiB0ZXN0ICRhY19oYXZlX2Z1bmMgPSBubzsgdGhlbgorLSAgIyBUaGVyZSBpcyBhIGNvbW1vbmx5IGF2YWlsYWJsZSBsaWJyYXJ5IGZvciBSUy82MDAwIEFJWC4KKy0gICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorLSAgYWNfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTCistICBMSUJTPSItTC91c3IvbG9jYWwvbGliICRMSUJTIgorLSAgQUNfQ0hFQ0tfTElCKGdldGxvYWRhdmcsIGdldGxvYWRhdmcsCistCSAgICAgICBbTElCUz0iLWxnZXRsb2FkYXZnICRMSUJTIl0sIFtMSUJTPSRhY19nZXRsb2FkYXZnX0xJQlNdKQorLWZpCistCisgIyBNYWtlIHN1cmUgaXQgaXMgcmVhbGx5IGluIHRoZSBsaWJyYXJ5LCBpZiB3ZSB0aGluayB3ZSBmb3VuZCBpdCwKKyAjIG90aGVyd2lzZSBzZXQgdXAgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorIEFDX0NIRUNLX0ZVTkNTKGdldGxvYWRhdmcsIFtdLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmZfMi42OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDkwMDdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIKQEAgLTAsMCArMSwyNSBAQAorcmVxdWlyZSBhdXRvY29uZi5pbmMKKworUFIgPSAicjExIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisJCSAgICBmaWxlOi8vQ09QWUlOR3YzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2ggXAorCSAgICBmaWxlOi8vY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaCBcCisJICAgIGZpbGU6Ly9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2ggXAorCSAgICBmaWxlOi8vYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ19zaXRlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wcmVmZXJiYXNoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODJkMDVlMDNiOTNlNDVmNWEzOWI4MjhkYzljNmMyOWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU0YmQ2OWIzOTFlZGMxMmQ2YTRhNTFhMmRkMTQ3NjU0M2RhNWM2YmJmMDVhOTViNTlkYzBkZDZmZDRjMjk2OSIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZml4X3BhdGhfeHRyYS5wYXRjaCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX000PW00IGFjX2N2X3Byb2dfVEVTVF9FTUFDUz1ubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjg1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBdXRvbWF0ZWQgdGV4dCBhbmQgcHJvZ3JhbSBnZW5lcmF0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJBdXRvR2VuIGlzIGEgdG9vbCBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gYW5kXAorIG1haW50ZW5hbmNlIG9mIHByb2dyYW1zIHRoYXQgY29udGFpbiBsYXJnZSBhbW91bnRzIG9mIHJlcGV0aXRpb3VzIHRleHQuXAorIEl0IGlzIGVzcGVjaWFsbHkgdmFsdWFibGUgaW4gcHJvZ3JhbXMgdGhhdCBoYXZlIHNldmVyYWwgYmxvY2tzIG9mIHRleHRcCisgdGhhdCBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvZ2VuLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hdXRvZ2VuL3JlbCR7UFZ9L2F1dG9nZW4tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2luY3JlYXNlLXRpbWVvdXQtbGltaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4NWQ3YzdkZmJlNjBiYWJiZWUyNjFjMDU0OTIzYTUzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiYmRiNzNiNTUxOGJhZjY0YzZkMzczOWZiMmVjYzY2ZDJjY2NkYTg4OGNlNWFkNTczYWJlMjM1YWI1ZDk2YmEiCisKK0RFUEVORFMgPSAiZ3VpbGUtbmF0aXZlIGxpYnRvb2wtbmF0aXZlIGxpYnhtbDItbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIG5hdGl2ZSBwa2djb25maWcKKworIyBhdXRvZ2VuLW5hdGl2ZSBsaW5rcyBhZ2FpbnN0IGxpYmd1aWxlIHdoaWNoIG1heSBoYXZlIGJlZW4gcmVsb2NhdGVkIHdpdGggc3N0YXRlCisjIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBlbnN1cmUgdGhlcmUgaXNuJ3QgYSByZWxvY2F0aW9uIGlzc3VlCitleHBvcnQgR1VJTEVfTE9BRF9QQVRIID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIgorZXhwb3J0IEdVSUxFX0xPQURfQ09NUElMRURfUEFUSCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2F1dG9nZW4gXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDRjMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b2dlbjogaW5jcmVhc2UgdGltZW91dCBsaW1pdCBmb3Igc2hlbGwgY29tbWFuZHMKKworT24gc29tZSBvdmVybG9hZGVkIGhvc3RzLCBzaGVsbCBjb21tYW5kcyBvZiBhdXRvZ2VuIG1heSBjYW4gbm90CitmaW5pc2ggaW4gNSBzZWNzLiBUaGlzIGhhcyBjYXVzZWQgbWFueSBidWlsZCBmYWlsdXJlcywgc28gaW5jcmVhc2UKK3RoZSB0aW1lb3V0IGxpbWl0IHRvIGZpeCB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFhpbiBPdXlhbmcgPFhpbi5PdXlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGFmN2MxOC4uNTU0NGY1OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc1LDkgKzE3NSw5IEBAIGNvbmZpZ19lbmRfdGltZT1gZGF0ZSArJXMgMj4vZGV2L251bGxgCisgdGltZV9kZWx0YT1gZXhwciAke2NvbmZpZ19lbmRfdGltZX0gLSAke2NvbmZpZ19zdGFydF90aW1lfSAyPi9kZXYvbnVsbGAKKyAKKyBpZiB0ZXN0IC16ICIke3RpbWVfZGVsdGF9IgorLXRoZW4gdGltZV9kZWx0YT0xMAorLWVsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCA1CistdGhlbiB0aW1lX2RlbHRhPTUgOyBmaQorK3RoZW4gdGltZV9kZWx0YT02MAorK2VsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCAzMAorK3RoZW4gdGltZV9kZWx0YT0zMCA7IGZpCisgCisgQUdfVElNRU9VVD0ke3RpbWVfZGVsdGF9CisgXQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTZkYTdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittay10cGwtY29uZmlnLnNoOiBmb3JjZSBleGl0IHZhbHVlIHRvIGJlIDAgaW4gc3VicHJvY2VzcworCitUaGUgcmV0dXJuIHZhbHVlIG9mIHN0YXRlbWVudCBsaXN0PWA8c3ViY29tbWFuZHM+YCBpcyB0aGUgZXhpdCB2YWx1ZSBvZiB0aGUKK3N1YmNvbW1hbmRzLiBTbyBpZiB0aGUgc3ViY29tbWFuZHMgZmFpbHMsIHRoZSBjb21waWxhdGlvbiBmYWlscy4gVGhpcyBpcyBvYnZpb3VzbHkKK25vdCBpbnRlbmRlZC4gSW4gdGhlIG5vcm1hbCBjYXNlLCB3ZSBleHBlY3QgdGhlIGdyZXAgY29tbWFuZCB0byBmYWlsIGFzIHRoZXJlIHNob3VsZAorYmUgbm8gJ25vcmV0dXJuJyB3b3JkIGluIHRoZSBsaWJndWlsZSBmaWxlcy4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2ggYi9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCitpbmRleCA5MjZmNWFiLi42YjRhMGZiIDEwMDc1NQorLS0tIGEvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAorKysrIGIvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAorQEAgLTIwMiw3ICsyMDIsNyBAQCBmaXhfZ3VpbGUoKSB7CisgCisgICAgIGxpc3Q9YHNldCArZSA7IGV4ZWMgMj4vZGV2L251bGwKKyAgICAgICAgIGZpbmQgJHtsaWJndWlsZWRpcn0vbGliZ3VpbGUqIC10eXBlIGYgfCBcCistICAgICAgICAgICAgeGFyZ3MgZ3JlcCAtbCAtRSAnXDxub3JldHVyblw+J2AKKysgICAgICAgICAgICB4YXJncyBncmVwIC1sIC1FICdcPG5vcmV0dXJuXD4nIDsgZXhpdCAwYAorIAorICAgICB0ZXN0IC16ICIkbGlzdCIgJiYgZXhpdCAwCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTI2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorW1BBVENIXSByZWRpcmVjdCB0aGUgZGlyIG9mIG1rbGlic3JjLWxvZy50eAorCitVcHN0cmVhbS1TdGF0dWU6IFBlbmRpbmcKKworcmVkaXJlY3QgbWtsaWJzcmMtbG9nLnR4IHRvIGJ1aWxkZGlyLCBub3QgL3RtcDsgb3RoZXJ3aXNlIG1rbGlic3JjLWxvZy50eAorbWF5YmUgdW5hYmxlIHRvIGJlIHdyaXR0ZW4gaWYgb3RoZXIgdXNlcnMgaXMgYnVpbGRpbmcgYXV0b2dlbiBhdCB0aGUgc2FtZSB0aW1lLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBwa2cvbGlib3B0cy9ta2xpYnNyYy5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3BrZy9saWJvcHRzL21rbGlic3JjLnNoIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKK2luZGV4IDQxNmI0MDIuLmQ2MTJmYmMgMTAwNjQ0CistLS0gYS9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaAorKysrIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKK0BAIC0xOSw3ICsxOSw3IEBACisgIyMgIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIHNldCAtZXgKKy1leGVjIDI+IC90bXAvbWtsaWJzcmMtbG9nLnR4CisrZXhlYyAyPiAkdG9wX2J1aWxkZGlyL21rbGlic3JjLWxvZy50eAorIAorIHRvcF9idWlsZGRpcj1gY2QgJHRvcF9idWlsZGRpciA7IHB3ZGAKKyB0b3Bfc3JjZGlyPWBjZCAkdG9wX3NyY2RpciA7IHB3ZGAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZWJkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJBIEdOVSB0b29sIGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgTWFrZWZpbGVzIgorREVTQ1JJUFRJT04gPSAiQXV0b21ha2UgaXMgYSB0b29sIGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgYE1ha2VmaWxlLmluJyBmaWxlcyBjb21wbGlhbnQgd2l0aCB0aGUgR05VIENvZGluZyBcCitTdGFuZGFyZHMuIEF1dG9tYWtlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgQXV0b2NvbmYuIgorTElDRU5TRSA9ICJHUEx2MiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvbWFrZS8iCitTRUNUSU9OID0gImRldmVsIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b21ha2UvYXV0b21ha2UtJHtQVn0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2V4cG9ydCBBVVRPTUFLRSA9ICIke0BiYi51dGlscy53aGljaCgnYXV0b21ha2UnLCBkLmdldFZhcignUEFUSCcsIFRydWUpKX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2F1dG9tYWtlKiAke2RhdGFkaXJ9L2FjbG9jYWwqIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9idWlsZHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkNTMzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9idWlsZHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorU3BsaXQgImNoZWNrLVRFU1RTIiBpbnRvIGEgYnVpbGR0ZXN0IGFuZCBydW50ZXN0IHRhcmdldCwgc28gdGhhdCB0aGV5IGNhbgorYmUgcnVuIHNlcGFyYXRlbHkuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9saWIvYW0vY2hlY2suYW0JMjAxMi0xMS0xNCAxMzo0NjoxNi4zMzU0NzU5OTUgKzAxMDAKKysrKyBiL2xpYi9hbS9jaGVjay5hbQkyMDEyLTA4LTEzIDE4OjQwOjEyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyBhbV9fdHR5X2NvbG9ycyA9ICQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpCisgZW5kaWYgISU/Q09MT1IlCisKKy0uUEhPTlk6IGNoZWNrLVRFU1RTCisrLlBIT05ZOiBjaGVjay1URVNUUyBidWlsZHRlc3QtVEVTVFMgcnVudGVzdC1URVNUUworCisgaWYgJT9QQVJBTExFTF9URVNUUyUKKworQEAgLTQ2NSw3ICs0NjUsMTQgQEAKKworIGVsc2UgISU/UEFSQUxMRUxfVEVTVFMlCisKKy1jaGVjay1URVNUUzogJChURVNUUykKKytBTV9SRUNVUlNJVkVfVEFSR0VUUyArPSBidWlsZHRlc3QgcnVudGVzdAorKworK2J1aWxkdGVzdC1URVNUUzogJChURVNUUykKKysKKytjaGVjay1URVNUUzogYnVpbGR0ZXN0LVRFU1RTCisrCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHJ1bnRlc3QtVEVTVFMKKysKKytydW50ZXN0LVRFU1RTOgorCUBmYWlsZWQ9MDsgYWxsPTA7IHhmYWlsPTA7IHhwYXNzPTA7IHNraXA9MDsgXAorCXNyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKKyAjIyBNYWtlIHN1cmUgU29sYXJpcyBWUEFUSC1leHBhbmRzIGFsbCBtZW1iZXJzIG9mIHRoaXMgbGlzdCwgZXZlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMzNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworKiBPRS1Db3JlJ3MgcHl0aG9uIGNyZWF0ZXMgdGhlIHNhbWUgYmluYXJ5IG91dHB1dAorICBmb3IgYm90aCBweWMgYW5kIHB5bywgc28gZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKKyAgcHljIGZpbGVzIGJ5IGF1dG9tYWtlLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorCitVcGRhdGVkIGZvciBhdXRvbWFrZS0xLjEyLjYKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworZGlmZiAtTnVyZCBhdXRvbWFrZS0xLjEyLjYvbGliL3B5LWNvbXBpbGUgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCistLS0gYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCTIwMTItMTItMTMgMjE6NTc6MzEuMDAwMDAwMDAwICswMjAwCisrKysgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCTIwMTItMTItMjcgMTk6MzQ6MDEuNDI2MDE1MTQwICswMjAwCitAQCAtMTE1LDI2ICsxMTUsNiBAQAorICAgICBmaWxldHJhbnM9ImZpbGVwYXRoID0gb3MucGF0aC5ub3JtcGF0aCgnJGRlc3RkaXInICsgb3Muc2VwICsgcGF0aCkiCisgZmkKKyAKKy0kUFlUSE9OIC1jICIKKy1pbXBvcnQgc3lzLCBvcywgcHlfY29tcGlsZSwgaW1wCistCistZmlsZXMgPSAnJyckZmlsZXMnJycKKy0KKy1zeXMuc3Rkb3V0LndyaXRlKCdCeXRlLWNvbXBpbGluZyBweXRob24gbW9kdWxlcy4uLlxuJykKKy1mb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgpOgorLSAgICAkcGF0aHRyYW5zCistICAgICRmaWxldHJhbnMKKy0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3QgKGxlbihmaWxlcGF0aCkgPj0gMworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZpbGVwYXRoWy0zOl0gPT0gJy5weScpOgorLQkgICAgY29udGludWUKKy0gICAgc3lzLnN0ZG91dC53cml0ZShmaWxlKQorLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKy0gICAgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJyk6CistICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlcGF0aCksIHBhdGgpCistICAgIGVsc2U6CistICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGZpbGVwYXRoICsgJ2MnLCBwYXRoKQorLXN5cy5zdGRvdXQud3JpdGUoJ1xuJykiIHx8IGV4aXQgJD8KKy0KKyAjIHRoaXMgd2lsbCBmYWlsIGZvciBweXRob24gPCAxLjUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIC4uLgorICRQWVRIT04gLU8gLWMgIgorIGltcG9ydCBzeXMsIG9zLCBweV9jb21waWxlLCBpbXAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5dGhvbi1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1NDFiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK1VwZGF0ZWQgZm9yIGF1dG9tYWtlLTEuMTIuNgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQgYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNAorLS0tIGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQJMjAxMi0xMi0xMyAyMjowMjoyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00CTIwMTItMTItMjcgMTc6NDA6MjYuNTU4MTY0NjYwICswMjAwCitAQCAtOTEsMTIgKzkxLDEzIEBACisgICAgIFthbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbltbOjNdXSkiYF0pCisgICBBQ19TVUJTVChbUFlUSE9OX1ZFUlNJT05dLCBbJGFtX2N2X3B5dGhvbl92ZXJzaW9uXSkKKyAKKy0gIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4IGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCistICBkbmwgdmFsdWVzIG9mIFBZVEhPTl9QUkVGSVggYW5kIFBZVEhPTl9FWEVDX1BSRUZJWC4gIFRoZXNlIGFyZSBtYWRlCisrICBkbmwgVXNlIHRoZSB2YWx1ZXMgb2YgJHByZWZpeCwgJGxpYmRpciBhbmQgJGV4ZWNfcHJlZml4IGZvciB0aGUgY29ycmVzcG9uZGluZworKyAgZG5sIHZhbHVlcyBvZiBQWVRIT05fUFJFRklYIFBZVEhPTl9MSUJfUFJFRklYLCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKKyAgIGRubCBkaXN0aW5jdCB2YXJpYWJsZXMgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkIGJlLiAgSG93ZXZlciwKKyAgIGRubCBnZW5lcmFsIGNvbnNlbnN1cyBpcyB0aGF0IHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzIGFiaWxpdHkuCisgCisgICBBQ19TVUJTVChbUFlUSE9OX1BSRUZJWF0sIFsnJHtwcmVmaXh9J10pCisrICBBQ19TVUJTVChbUFlUSE9OX0xJQl9QUkVGSVhdLCBbJyR7bGliZGlyfSddKQorICAgQUNfU1VCU1QoW1BZVEhPTl9FWEVDX1BSRUZJWF0sIFsnJHtleGVjX3ByZWZpeH0nXSkKKyAKKyAgIGRubCBBdCB0aW1lcyAobGlrZSB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMpIHlvdSBtYXkgd2FudAorQEAgLTE0OCw3ICsxNDksOCBAQAorIGVsc2U6CisgICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyAgICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigwLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQorLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAorK3N5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiIHx8CisrICAgICBlY2hvICIkUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAorICAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciBpbgorICAgICAgJGFtX3B5X3ByZWZpeCopCisgICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKK0BAIC0xNTgsNyArMTYwLDcgQEAKKyAgICAgICAgY2FzZSAkYW1fcHlfcHJlZml4IGluCisgICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKKyAgICAgICAgICAqKQorLQkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisrCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKyAJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CitAQCAtMTkwLDcgKzE5Miw4IEBACisgZWxzZToKKyAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworICAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKDEsIDAsIHByZWZpeD0nJGFtX3B5X3ByZWZpeCcpCistc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCisrc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSIgfHwKKysgICAgIGVjaG8gIiRQWVRIT05fTElCX1BSRUZJWC9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcyJgCisgICAgICBjYXNlICRhbV9jdl9weXRob25fcHlleGVjZGlyIGluCisgICAgICAkYW1fcHlfZXhlY19wcmVmaXgqKQorICAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfZXhlY19wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKK0BAIC0yMDAsNyArMjAzLDcgQEAKKyAgICAgICAgY2FzZSAkYW1fcHlfZXhlY19wcmVmaXggaW4KKyAgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OworICAgICAgICAgICopCistCSAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JFBZVEhPTl9FWEVDX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKysJICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0kUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKyAJICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzNkYzIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIKQEAgLTAsMCArMSwzNCBAQAorcmVxdWlyZSBhdXRvbWFrZS5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImF1dG9jb25mLW5hdGl2ZSIKKworTkFNRVZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitSREVQRU5EU18ke1BOfSArPSAiXAorICAgIGF1dG9jb25mIFwKKyAgICBwZXJsIFwKKyAgICBwZXJsLW1vZHVsZS1ieXRlcyBcCisgICAgcGVybC1tb2R1bGUtZGF0YS1kdW1wZXIgXAorICAgIHBlcmwtbW9kdWxlLXN0cmljdCBcCisgICAgcGVybC1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIFwKKyAgICBwZXJsLW1vZHVsZS10aHJlYWQtcXVldWUgXAorICAgIHBlcmwtbW9kdWxlLXRocmVhZHMgXAorICAgIHBlcmwtbW9kdWxlLXZhcnMgIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiYXV0b2NvbmYtbmF0aXZlIHBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vcHl0aG9uLWxpYmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYnVpbGR0ZXN0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzE2OTQ2YTEwNWNhMjI4YWI1NDVmYzM3YTcwZGYzYTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzk0NmU5NDVhOTZlMjgxNTJiYTVhNmJlYjA2MjVjYTcxNWM2ZTMyYWM1NWYyZTM1M2VmNTRkZWYwYzhlZDkyNCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0ke1VTUkJJTlBBVEh9L3BlcmwiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjUuMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4MTdmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK0xJQ19GSUxFU19DSEtTVU09IlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2XAorICAgIGZpbGU6Ly9nYXMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCisgICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9saWJpYmVydHkvQ09QWUlORy5MSUI7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3XAorICAgIGZpbGU6Ly9iZmQvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgIgorCitkZWYgYmludXRpbHNfYnJhbmNoX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KKworQklOVVBWID0gIiR7QGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpfSIKKworU1JDUkVWID0gIjJiZDI1OTMwMjIxZGVhNGJmMzNjMTNhODljMTExNTE0NDkxNDQwZTIiCitTUkNfVVJJID0gIlwKKyAgICAgZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2JpbnV0aWxzLWdkYi5naXQ7YnJhbmNoPWJpbnV0aWxzLSR7QklOVVBWfS1icmFuY2g7cHJvdG9jb2w9Z2l0IFwKKyAgICAgZmlsZTovLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaCBcCisgICAgIGZpbGU6Ly9iaW51dGlscy1vY3Rlb24zLnBhdGNoIFwKKyAgICAgZmlsZTovL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2ggXAorICAgICAiCitTICA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICBybSAtcmYgJHtTfS9nZGIgJHtTfS9saWJkZWNudW1iZXIgJHtTfS9yZWFkbGluZSAke1N9L3NpbQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxNDY0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSwyOSBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgorCitTVU1NQVJZID0gIkdOVSBiaW5hcnkgdXRpbGl0aWVzIChjcm9zcy1jYW5hZGlhbiBmb3IgJHtUQVJHRVRfQVJDSH0gdGFyZ2V0KSIKK1BOID0gImJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCitCUE4gPSAiYmludXRpbHMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIHZpcnR1YWwvJHtIT1NUX1BSRUZJWH1nY2MtY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstbGliYyBuYXRpdmVzZGstemxpYiBuYXRpdmVzZGstZ2V0dGV4dCBuYXRpdmVzZGstZmxleCIKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9JHtTREtQQVRIfS9zeXNyb290cy8ke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSBcCisgICAgICAgICAgICAgICAgIgorCisjIFdlIGhhdmUgdG8gcG9pbnQgYmludXRpbHMgYXQgYSBzeXNyb290IGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHJlYnVpbGQgaWYgdGhpcyBjaGFuZ2VzCisjIGUuZy4gd2Ugc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IG1hY2hpbmVzIHdpdGggZGlmZmVyZW50IHR1bmVzLgorRVhUUkFfT0VDT05GW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX1BLR0FSQ0giCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBsaWJzIG9yIGhlYWRlcnMsIHRoZXNlIHdvdWxkIGNvbWUgZnJvbSB0aGUgCisJIyBuYXRpdmVzZGsgb3IgdGFyZ2V0IHZlcnNpb24gb2YgdGhlIGJpbnV0aWxzIHJlY2lwZQorCXJtIC1yZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30KKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmJmZCoKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmliZXJ0eSoKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYm9wY29kZXMqCisJcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vKi5oCisJCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKworQkJDTEFTU0VYVEVORCA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGJhYTAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjUuMS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgYmludXRpbHMuaW5jCityZXF1aXJlIGJpbnV0aWxzLSR7UFZ9LmluYworcmVxdWlyZSBiaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2Q4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK2luaGVyaXQgY3Jvc3MKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIgorCitQTiA9ICJiaW51dGlscy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJiaW51dGlscyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1pbnN0YWxsLWxpYmJmZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBcCisgICAgICAgICAgICAgICAgIgorZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKwkjIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoZXNlLCBzbyB3ZSdsbCByZW1vdmUgdGhlbS4uLgorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtsaWJkaXJfbmF0aXZlfS9saWJpYmVydHkuYQorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke1RBUkdFVF9TWVN9CisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2xpYi9sZHNjcmlwdHMKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvaW5mbworCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9zaGFyZS9sb2NhbGUKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvbWFuCisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUgfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfS9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn02NC9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn0gfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfTY0IHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke3ByZWZpeH0gfHwgOgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc18yLjI1LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkMWY3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc18yLjI1LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKK3JlcXVpcmUgYmludXRpbHMtY3Jvc3MuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODgxMDZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjUuMS5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGJpbnV0aWxzLWNyb3NzXyR7UFZ9LmJiCisKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiYmludXRpbHMtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0iCisKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc2VkIC1pICdzIy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWIjJHtTREtQQVRITkFUSVZFfS9saWIgJHtTREtQQVRITkFUSVZFfS91c3IvbGliIC91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWIjJyAke1N9L2xkL2NvbmZpZ3VyZS50Z3QKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMuaW5jCkBAIC0wLDAgKzEsMTUzIEBACitTVU1NQVJZID0gIkdOVSBiaW5hcnkgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBCaW51dGlscyBhcmUgYSBjb2xsZWN0aW9uIG9mIGJpbmFyeSB0b29scy4gXAorVGhlIG1haW4gb25lcyBhcmUgbGQgKEdOVSBMaW5rZXIpLCBhbmQgYXMgKEdOVSBBc3NlbWJsZXIpLiBUaGlzIFwKK3BhY2thZ2UgYWxzbyBpbmNsdWRlcyBhZGRpdGlvbiB0b29scyBzdWNoIGFzIGFkZHIybGluZSAoQ29udmVydHMgXAorYWRkcmVzc2VzIGludG8gZmlsZW5hbWVzIGFuZCBsaW5lIG51bWJlcnMpLCBhciAodXRpbGl0eSBmb3IgY3JlYXRpbmcsIFwKK21vZGlmeWluZyBhbmQgZXh0cmFjdGluZyBhcmNoaXZlcyksIG5tIChsaXN0IHN5bWJvbHMgaW4gb2JqZWN0IFwKK2ZpbGVzKSwgb2JqY29weSAoY29weSBhbmQgdHJhbnNsYXRlIG9iamVjdCBmaWxlcyksIG9iamR1bXAgKERpc3BsYXkgXAorb2JqZWN0IGluZm9ybWF0aW9uKSwgYW5kIG90aGVyIHRvb2xzIGFuZCByZWxhdGVkIGxpYnJhcmllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmludXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIHpsaWItbmF0aXZlIGdudS1jb25maWctbmF0aXZlIGF1dG9jb25mLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBtdWx0aWxpYl9oZWFkZXIgdGV4aW5mbworCitGSUxFU18ke1BOfSA9ICIgXAorCSR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9KiBcCisJJHtsaWJkaXJ9L2xpYiotKi5zbyBcCisJJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyogXAorICAgICAgICAke2JpbmRpcn0vZW1iZWRzcHUiCisKK1JQUk9WSURFU18ke1BOfSArPSAiJHtQTn0tc3ltbGlua3MiCisKK0ZJTEVTXyR7UE59LWRldiA9ICIgXAorCSR7aW5jbHVkZWRpcn0gXAorCSR7bGliZGlyfS8qLmxhIFwKKwkke2xpYmRpcn0vbGliYmZkLnNvIFwKKwkke2xpYmRpcn0vbGlib3Bjb2Rlcy5zbyIKKworIyBSYXRoZXIgdGhhbiBkdXBsaWNhdGluZyBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGVzZSwgbWFrZSBvbmUKKyMgbGlzdCBhbmQgcmV1c2UgaXQuCisKK1VTRV9BTFRFUk5BVElWRVNfRk9SID0gIiBcCisJYWRkcjJsaW5lIFwKKwlhciBcCisJYXMgXAorCWMrK2ZpbHQgXAorCWVsZmVkaXQgXAorCWdwcm9mIFwKKwlsZCBcCisJbGQuYmZkIFwKKwlsZC5nb2xkIGR3cCBcCisJbm0gXAorCW9iamNvcHkgXAorCW9iamR1bXAgXAorCXJhbmxpYiBcCisJcmVhZGVsZiBcCisJc2l6ZSBcCisJc3RyaW5ncyBcCisJc3RyaXAgXAorIgorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIG1ha2VfYWx0cyA9IGQuZ2V0VmFyKCJVU0VfQUxURVJOQVRJVkVTX0ZPUiIsIFRydWUpIG9yICIiCisgICAgcHJlZml4ID0gZC5nZXRWYXIoIlRBUkdFVF9QUkVGSVgiLCBUcnVlKQorICAgIGJpbmRpciA9IGQuZ2V0VmFyKCJiaW5kaXIiLCBUcnVlKQorICAgIGZvciBhbHQgaW4gbWFrZV9hbHRzLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0LCBiaW5kaXIgKyAiLyIgKyBwcmVmaXggKyBhbHQpCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0LCBiaW5kaXIgKyAiLyIgKyBhbHQpCit9CisKKyMgRklMRVNfJHtQTn0tZGJnID0gIiR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8uZGVidWcgJHtwcmVmaXh9LyR7bGliZGlyfS8uZGVidWciCisKK0IgPSAiJHtTfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtd2Vycm9yIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1wbHVnaW5zIFwKKyAgICAgICAgICAgICAgICAke0xER09MRH0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbXVsdGlhcmNoJywgJy0tZW5hYmxlLTY0LWJpdC1iZmQnLCAnJywgZCl9IgorCitMREdPTERfY2xhc3MtbmF0aXZlID0gIiIKK0xER09MRF9jbGFzcy1jcm9zc3NkayA9ICIiCitMREdPTEQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICctLWVuYWJsZS1nb2xkPWRlZmF1bHQgLS1lbmFibGUtdGhyZWFkcycsICctLWVuYWJsZS1nb2xkIC0tZW5hYmxlLWxkPWRlZmF1bHQnLCBkKX0iCisKKyMgVGhpcyBpcyBuZWNlc3NhcnkgZHVlIHRvIGEgYnVnIGluIHRoZSBiaW51dGlscyBNYWtlZmlsZXMKKyMgRVhUUkFfT0VNQUtFID0gImNvbmZpZ3VyZS1idWlsZC1saWJpYmVydHkgYWxsIgorCitleHBvcnQgQVIgPSAiJHtIT1NUX1BSRUZJWH1hciIKK2V4cG9ydCBBUyA9ICIke0hPU1RfUFJFRklYfWFzIgorZXhwb3J0IExEID0gIiR7SE9TVF9QUkVGSVh9bGQiCitleHBvcnQgTk0gPSAiJHtIT1NUX1BSRUZJWH1ubSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtIT1NUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgT0JKQ09QWSA9ICIke0hPU1RfUFJFRklYfW9iamNvcHkiCitleHBvcnQgT0JKRFVNUCA9ICIke0hPU1RfUFJFRklYfW9iamR1bXAiCisKK2V4cG9ydCBBUl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hciIKK2V4cG9ydCBBU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hcyIKK2V4cG9ydCBMRF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1sZCIKK2V4cG9ydCBOTV9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1ubSIKK2V4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9cmFubGliIgorCitleHBvcnQgQ0NfRk9SX0hPU1QgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0FSQ0h9IgorZXhwb3J0IENYWF9GT1JfSE9TVCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdjYyAke0hPU1RfQ0NfQVJDSH0iCisKKyMgYXV0b3Rvb2xzLmJiY2xhc3Mgc2V0cyB0aGUgX0ZPUl9CVUlMRCB2YXJpYWJsZXMsIGJ1dCBmb3Igc29tZSByZWFzb24gd2UgbmVlZAorIyB0byB1bnNldCBMRF9MSUJSQVJZX1BBVEguCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIkxEX0xJQlJBUllfUEFUSD0gJHtCVUlMRF9DQ30iCisKK01VTFRJQVJDSCA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJtdWx0aWFyY2giLCAieWVzIiwgIm5vIiwgZCl9IgorZG9fY29uZmlndXJlW3ZhcmRlcHNdICs9ICJNVUxUSUFSQ0giCitkb19jb25maWd1cmUgKCkgeworCShjZCAke1N9OyBnbnUtY29uZmlnaXplKSB8fCBkaWUgIkZhaWxlZCB0byBydW4gZ251LWNvbmZpZ2l6ZSIKKwlvZV9ydW5jb25mCisjCisjIG11c3QgcHJpbWUgY29uZmlnLmNhY2hlIHRvIGVuc3VyZSB0aGUgYnVpbGQgb2YgbGliaWJlcnR5CisjCisJbWtkaXIgLXAgJHtCfS9idWlsZC0ke0JVSUxEX1NZU30KKwlmb3IgaSBpbiAke0NPTkZJR19TSVRFfTsgZG8KKwkJY2F0ICRpID4+ICR7Qn0vYnVpbGQtJHtCVUlMRF9TWVN9L2NvbmZpZy5jYWNoZSB8fCB0cnVlCisJZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGVzZSwgc28gd2UnbGwgcmVtb3ZlIHRoZW0uLi4KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9sZHNjcmlwdHMKKworCSMgRml4IHRoZSAvdXNyLyR7VEFSR0VUX1NZU30vYmluLyogbGlua3MKKwlmb3IgbCBpbiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyo7IGRvCisJCXJtIC1mICRsCisJCWxuIC1zZiBgZWNobyAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4gXAorCQkJfCB0ciAtcyAvIFwKKwkJCXwgc2VkIC1lICdzLF4vLCwnIC1lICdzLFteL10qLC4uLGcnYCR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9YGJhc2VuYW1lICRsYCAkbAorCWRvbmUKKworCSMgSW5zdGFsbCB0aGUgbGliaWJlcnR5IGhlYWRlcgorCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvYW5zaWRlY2wuaCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9saWJpYmVydHkuaCAke0R9JHtpbmNsdWRlZGlyfQorCisJY2QgJHtEfSR7YmluZGlyfQorCisJIyBTeW1saW5rcyBmb3IgZWFzZSBvZiBydW5uaW5nIHRoZXNlIG9uIHRoZSBuYXRpdmUgdGFyZ2V0CisJZm9yIHAgaW4gJHtUQVJHRVRfUFJFRklYfSogOyBkbworCQlsbiAtc2YgJHAgYGVjaG8gJHAgfCBzZWQgLWUgcywke1RBUkdFVF9QUkVGSVh9LCxgCisJZG9uZQorCisJZm9yIGFsdCBpbiAke1VTRV9BTFRFUk5BVElWRVNfRk9SfTsgZG8KKwkJcm0gLWYgJHtEfSR7YmluZGlyfS8kYWx0CisJZG9uZQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIGJmZC5oCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLXRhcmdldCA9ICIke1VTRV9BTFRFUk5BVElWRVNfRk9SfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODBjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZjcxZWNmMjUxZjg0YjRiYmM5YjdhODMyZDVjZDRhOGJhZTk1ZDgzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NTg6NTQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8xM10gR2VuZXJhdGUgcmVsb2NhdGFibGUgU0RLcworCitUaGlzIHBhdGNoIHdpbGwgbW9kaWZ5IHRoZSBFTEYgbGlua2VyIHNjcmlwdHMgc28gdGhhdCB0aGUgY3Jvc3NzZGsKK2xpbmtlciB3aWxsIGdlbmVyYXRlIGJpbmFyaWVzIHdpdGggYSA0MDk2IGJ5dGVzIFBUX0lOVEVSUCBzZWN0aW9uLiBXaGVuIHRoZSBiaW5hcmllcword2lsbCBiZSByZWxvY2F0ZWQsIGF0IFNESyBpbnN0YWxsIHRpbWUsIHRoZSBpbnRlcnByZXRlciBwYXRoIGNhbiBiZSBlYXNpbHkKK2NoYW5nZWQgYnkgdGhlIHJlbG9jYXRpbmcgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1NESyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2dlbnNjcmlwdHMuc2ggICAgICB8IDMgKysrCisgbGQvc2NyaXB0dGVtcGwvZWxmLnNjIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sZC9nZW5zY3JpcHRzLnNoIGIvbGQvZ2Vuc2NyaXB0cy5zaAoraW5kZXggNDk5NjA3YS4uMDc1ZGQwNCAxMDA3NTUKKy0tLSBhL2xkL2dlbnNjcmlwdHMuc2gKKysrKyBiL2xkL2dlbnNjcmlwdHMuc2gKK0BAIC0yNzcsNiArMjc3LDcgQEAgREFUQV9BTElHTk1FTlRfdT0iJHtEQVRBX0FMSUdOTUVOVF91LSR7REFUQV9BTElHTk1FTlRfcn19IgorIExEX0ZMQUc9cgorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRfcn0KKyBERUZBVUxUX0RBVEFfQUxJR05NRU5UPSJBTElHTigke1NFR01FTlRfU0laRX0pIgorK1BBUlRJQUxfTElOS0lORz0iICIKKyAoIGVjaG8gIi8qIFNjcmlwdCBmb3IgbGQgLXI6IGxpbmsgd2l0aG91dCByZWxvY2F0aW9uICovIgorICAgLiAke0NVU1RPTUlaRVJfU0NSSVBUfQorICAgLiAke3NyY2Rpcn0vc2NyaXB0dGVtcGwvJHtTQ1JJUFRfTkFNRX0uc2MKK0BAIC0yODUsMTAgKzI4NiwxMiBAQCBERUZBVUxUX0RBVEFfQUxJR05NRU5UPSJBTElHTigke1NFR01FTlRfU0laRX0pIgorIExEX0ZMQUc9dQorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRfdX0KKyBDT05TVFJVQ1RJTkc9IiAiCisrUEFSVElBTF9MSU5LSU5HPSIgIgorICggZWNobyAiLyogU2NyaXB0IGZvciBsZCAtVXI6IGxpbmsgdy9vdXQgcmVsb2NhdGlvbiwgZG8gY3JlYXRlIGNvbnN0cnVjdG9ycyAqLyIKKyAgIC4gJHtDVVNUT01JWkVSX1NDUklQVH0KKyAgIC4gJHtzcmNkaXJ9L3NjcmlwdHRlbXBsLyR7U0NSSVBUX05BTUV9LnNjCisgKSB8IHNlZCAtZSAnL14gKiQvZDtzL1sgCV0qJC8vJyA+IGxkc2NyaXB0cy8ke0VNVUxBVElPTl9OQU1FfS54dQorK3Vuc2V0IFBBUlRJQUxfTElOS0lORworIAorIExEX0ZMQUc9CisgREFUQV9BTElHTk1FTlQ9JHtEQVRBX0FMSUdOTUVOVF99CitkaWZmIC0tZ2l0IGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjIGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCitpbmRleCA0MzY4ZmQ5Li45ZjAxZThjIDEwMDY0NAorLS0tIGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCisrKysgYi9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKK0BAIC0xMzEsOCArMTMxLDggQEAgaWYgdGVzdCAtbiAiJHtDT01NT05QQUdFU0laRX0iOyB0aGVuCisgICBEQVRBX1NFR01FTlRfRU5EPSIuID0gREFUQV9TRUdNRU5UX0VORCAoLik7IgorICAgREFUQV9TRUdNRU5UX1JFTFJPX0VORD0iLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKCR7U0VQQVJBVEVfR09UUExULTB9LCAuKTsiCisgZmkKKy1pZiB0ZXN0IC16ICIke0lOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlN9JHtDUkVBVEVfU0hMSUJ9IjsgdGhlbgorLSAgSU5JVElBTF9SRUFET05MWV9TRUNUSU9OUz0iLmludGVycCAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmludGVycCkgfSIKKytpZiB0ZXN0IC16ICIke0lOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlN9JHtDUkVBVEVfU0hMSUJ9JHtQQVJUSUFMX0xJTktJTkd9IjsgdGhlbgorKyAgSU5JVElBTF9SRUFET05MWV9TRUNUSU9OUz0iLmludGVycCAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmludGVycCk7IC4gPSAweDEwMDA7IH0iCisgZmkKKyBpZiB0ZXN0IC16ICIkUExUIjsgdGhlbgorICAgSVBMVD0iLmlwbHQgICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmlwbHQpIH0iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlMjFkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gZGZiY2ZiMGQ3MTc2NWIzMzdlNjM1NjIyOTlhOTQzMDQzOTI4ZDJkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MDc6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8xM10gY29uZmlndXJlOiB3aWRlbiB0aGUgcmVnZXhwIGZvciBTSCBhcmNoaXRlY3R1cmVzCisKK2dwcm9mIG5lZWRzIHRvIGtub3cgYWJvdXQgdWNsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgICAgIHwgNCArKy0tCisgZ3Byb2YvY29uZmlndXJlIHwgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA4NzY3N2JjLi5lOWYyZjEzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0zMzQxLDcgKzMzNDEsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCisgICAgIDs7CisgICBzMzkwLSotKiB8IHMzOTB4LSotKikKKyAgICAgOzsKKy0gIHNoLSotKiB8IHNoWzM0XSotKi0qKQorKyAgc2gqLSotKiB8IHNoWzM0XSotKi0qKQorICAgICA7OworICAgc2g2NC0qLSogfCBzaDUqLSotKikKKyAgICAgOzsKK0BAIC0zODEyLDcgKzM4MTIsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCisgICBvcjFrKi0qLSopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBnZGIiCisgICAgIDs7CistICBzaC0qLSogfCBzaDY0LSotKikKKysgIHNoKi0qLSogfCBzaDY0LSotKikKKyAgICAgY2FzZSAiJHt0YXJnZXR9IiBpbgorICAgICAgIHNoKi0qLWVsZikKKyAgICAgICAgICA7OworZGlmZiAtLWdpdCBhL2dwcm9mL2NvbmZpZ3VyZSBiL2dwcm9mL2NvbmZpZ3VyZQoraW5kZXggYjA5YzhmYi4uNzk5NjFjNSAxMDA3NTUKKy0tLSBhL2dwcm9mL2NvbmZpZ3VyZQorKysrIGIvZ3Byb2YvY29uZmlndXJlCitAQCAtNTg2OSw2ICs1ODY5LDExIEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKikKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Y2U3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGRmYjE0MTJkYTY3YmJmZTNlOTkzZDEwN2QwYjVlMzkyZjQ0MTQxYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjA5OjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTNdIFBvaW50IHNjcmlwdHMgbG9jYXRpb24gdG8gbGliZGlyCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGQvTWFrZWZpbGUuYW0gfCAyICstCisgbGQvTWFrZWZpbGUuaW4gfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sZC9NYWtlZmlsZS5hbSBiL2xkL01ha2VmaWxlLmFtCitpbmRleCA5NTc1ZjFmLi44NGRmMGJmIDEwMDY0NAorLS0tIGEvbGQvTWFrZWZpbGUuYW0KKysrKyBiL2xkL01ha2VmaWxlLmFtCitAQCAtNTQsNyArNTQsNyBAQCBlbmRpZgorICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KKyAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKKyAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KKy1zY3JpcHRkaXIgPSAkKHRvb2xkaXIpL2xpYgorK3NjcmlwdGRpciA9ICQobGliZGlyKQorIAorIEVNVUwgPSBARU1VTEAKKyBFTVVMQVRJT05fT0ZJTEVTID0gQEVNVUxBVElPTl9PRklMRVNACitkaWZmIC0tZ2l0IGEvbGQvTWFrZWZpbGUuaW4gYi9sZC9NYWtlZmlsZS5pbgoraW5kZXggOWY1NmNhMS4uMjcyODYwZiAxMDA2NDQKKy0tLSBhL2xkL01ha2VmaWxlLmluCisrKysgYi9sZC9NYWtlZmlsZS5pbgorQEAgLTM4OCw3ICszODgsNyBAQCBBTV9DRkxBR1MgPSAkKFdBUk5fQ0ZMQUdTKQorICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KKyAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKKyAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KKy1zY3JpcHRkaXIgPSAkKHRvb2xkaXIpL2xpYgorK3NjcmlwdGRpciA9ICQobGliZGlyKQorIEJBU0VESVIgPSAkKHNyY2RpcikvLi4KKyBCRkRESVIgPSAkKEJBU0VESVIpL2JmZAorIElOQ0RJUiA9ICQoQkFTRURJUikvaW5jbHVkZQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2NkMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDMxMjY2MDhiOGM5NWE3OTJhZGU1NmNmNjJhNTMxZDkzNWQzOTFjNTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjI3OjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTNdIE9ubHkgZ2VuZXJhdGUgYW4gUlBBVEggZW50cnkgaWYgTERfUlVOX1BBVEggaXMgbm90CisgZW1wdHkKKworZm9yIGNhc2VzIHdoZXJlIC1ycGF0aCBpc24ndCBzcGVjaWZpZWQuIGRlYmlhbiAoIzE1MTAyNCkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzIENoaW1lbGlzIDxjaHJpc0BkZWJpYW4ub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2VtdWx0ZW1wbC9lbGYzMi5lbSB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQoraW5kZXggMzZkZWU4ZS4uMDdiZWE1MiAxMDA2NDQKKy0tLSBhL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorKysrIGIvbGQvZW11bHRlbXBsL2VsZjMyLmVtCitAQCAtMTE5OCw2ICsxMTk4LDggQEAgZnJhZ21lbnQgPDxFT0YKKyAJICAgICAgJiYgY29tbWFuZF9saW5lLnJwYXRoID09IE5VTEwpCisgCSAgICB7CisgCSAgICAgIGxpYl9wYXRoID0gKGNvbnN0IGNoYXIgKikgZ2V0ZW52ICgiTERfUlVOX1BBVEgiKTsKKysJICAgICAgaWYgKChsaWJfcGF0aCkgJiYgKHN0cmxlbiAobGliX3BhdGgpID09IDApKQorKwkJICBsaWJfcGF0aCA9IE5VTEw7CisgCSAgICAgIGlmIChnbGQke0VNVUxBVElPTl9OQU1FfV9zZWFyY2hfbmVlZGVkIChsaWJfcGF0aCwgJm4sCisgCQkJCQkJICAgICAgZm9yY2UpKQorIAkJYnJlYWs7CitAQCAtMTQ2MSw2ICsxNDYzLDggQEAgZ2xkJHtFTVVMQVRJT05fTkFNRX1fYmVmb3JlX2FsbG9jYXRpb24gKHZvaWQpCisgICBycGF0aCA9IGNvbW1hbmRfbGluZS5ycGF0aDsKKyAgIGlmIChycGF0aCA9PSBOVUxMKQorICAgICBycGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrICBpZiAoKHJwYXRoKSAmJiAoc3RybGVuIChycGF0aCkgPT0gMCkpCisrICAgIHJwYXRoID0gTlVMTDsKKyAKKyAgIGZvciAoYWJmZCA9IGxpbmtfaW5mby5pbnB1dF9iZmRzOyBhYmZkOyBhYmZkID0gYWJmZC0+bGluay5uZXh0KQorICAgICBpZiAoYmZkX2dldF9mbGF2b3VyIChhYmZkKSA9PSBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQ5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGYxNzAzYmNjN2E1YzUwN2U0NzFlMjYzMGI1YTJkZTEyOTEwMDMxNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjMyOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTNdIEV4cGxpY2l0bHkgbGluayB3aXRoIGxpYm0gb24gdWNsaWJjCisKK0Rlc2NyaXB0aW9uOgorCitXZSBkbyBub3QgbmVlZCB0byBoYXZlIHRoZSBsaWJ0b29sIHBhdGNoIGFueW1vcmUgZm9yIGJpbnV0aWxzIGFmdGVyCitsaWJ0b29sIGhhcyBiZWVuIHVwZGF0ZWQgdXBzdHJlYW0gaXQgaW5jbHVkZSBzdXBwb3J0IGZvciBpdC4gSG93ZXZlcgorZm9yIGJ1aWxkaW5nIGdhcyBuYXRpdmVseSBvbiB1Y2xpYmMgc3lzdGVtcyB3ZSBoYXZlIHRvIGxpbmsgaXQgd2l0aAorLWxtIHNvIHRoYXQgaXQgcGlja3MgdXAgbWlzc2luZyBzeW1ib2xzLgorCisvbG9jYWwvYnVpbGRfYXJlYS9CVUlMRC9hcm1fdjV0X2xlX3VjbGliYy9iaW51dGlscy0yLjE3LjUwL29iamRpci9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hKGZsb2F0Zm9ybWF0Lm8pOgorSW4gZnVuY3Rpb24gYGZsb2F0Zm9ybWF0X2Zyb21fZG91YmxlJzoKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4MWVjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZnJleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDJmOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworL2xvY2FsL2J1aWxkX2FyZWEvQlVJTEQvYXJtX3Y1dF9sZV91Y2xpYmMvYmludXRpbHMtMi4xNy41MC9vYmpkaXIvbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYShmbG9hdGZvcm1hdC5vKToKK0luIGZ1bmN0aW9uIGBmbG9hdGZvcm1hdF90b19kb3VibGUnOgorZmxvYXRmb3JtYXQuYzooLnRleHQrMHgzOGEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4M2QyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDQzZSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHg0ZTIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2NvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCittYWtlWzRdOiAqKiogW2FzLW5ld10gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdhcy9jb25maWd1cmUudGd0IHwgNiArKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlLnRndCBiL2dhcy9jb25maWd1cmUudGd0CitpbmRleCA5YWJjNzY4Li4xZDkyZjU1IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2dhcy9jb25maWd1cmUudGd0CitAQCAtNDc3LDYgKzQ3NywxMiBAQCBjYXNlICR7Z2VuZXJpY190YXJnZXR9IGluCisgICAqLSotbmV0d2FyZSkJCQkJZm10PWVsZiBlbT1uZXR3YXJlIDs7CisgZXNhYworIAorK2Nhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KKysgIGFybS0qLSp1Y2xpYmMqKQorKyAgICBuZWVkX2xpYm09eWVzCisrICAgIDs7CisrZXNhYworKworIGNhc2UgJHtjcHVfdHlwZX0gaW4KKyAgIGFhcmNoNjQgfCBhbHBoYSB8IGFybSB8IGkzODYgfCBpYTY0IHwgbWljcm9ibGF6ZSB8IG1pcHMgfCBuczMyayB8IG9yMWsgfCBvcjFrbmQgfCBwZHAxMSB8IHBwYyB8IHNwYXJjIHwgejgwIHwgejhrKQorICAgICBiZmRfZ2FzPXllcworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5NjdlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaApAQCAtMCwwICsxLDE5MzYxIEBACitGcm9tIDAzZWI5YjRmZTU4M2U4OGEyMmZkOGMyNWI0M2ZiZDliYWZlMjFhZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjM0OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTNdIFVzZSBsaWJ0b29sIDIuNAorCitTbyB3ZSBjYW4gZ2V0IGxpYnRvb2wgc3lzcm9vdCBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2NvbmZpZ3VyZSAgICAgICAgfCAxMzIwICsrKysrKysrKysrKysrKysrLS0tLS0tCisgYmZkL2NvbmZpZ3VyZS5hYyAgICAgfCAgICAyICstCisgYmludXRpbHMvY29uZmlndXJlICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCisgY29uZmlndXJlICAgICAgICAgICAgfCAgICAyICstCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCisgZ3Byb2YvY29uZmlndXJlICAgICAgfCAxMzIzICsrKysrKysrKysrKysrKysrLS0tLS0tCisgbGQvY29uZmlndXJlICAgICAgICAgfCAxNzAxICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgbGlidG9vbC5tNCAgICAgICAgICAgfCAxMDg2ICsrKysrKysrKysrKystLS0tLS0KKyBsdG1haW4uc2ggICAgICAgICAgICB8IDI5MjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyBsdG9wdGlvbnMubTQgICAgICAgICB8ICAgIDIgKy0KKyBsdHZlcnNpb24ubTQgICAgICAgICB8ICAgMTIgKy0KKyBsdH5vYnNvbGV0ZS5tNCAgICAgICB8ICAgIDIgKy0KKyBvcGNvZGVzL2NvbmZpZ3VyZSAgICB8IDEzMjAgKysrKysrKysrKysrKysrKystLS0tLS0KKyBvcGNvZGVzL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAxNCBmaWxlcyBjaGFuZ2VkLCA4OTUyIGluc2VydGlvbnMoKyksIDMzODEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlndXJlIGIvYmZkL2NvbmZpZ3VyZQoraW5kZXggODVlNmI4Mi4uM2QzZGQ4OCAxMDA3NTUKKy0tLSBhL2JmZC9jb25maWd1cmUKKysrKyBiL2JmZC9jb25maWd1cmUKK0BAIC02NjgsNiArNjY4LDkgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisrYWNfY3RfQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc4MCw2ICs3ODMsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDU2LDYgKzE0NjAsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtbW1hcCAgICAgICAgICAgICB0cnkgdXNpbmcgbW1hcCBmb3IgQkZEIGlucHV0IGZpbGVzIGlmIGF2YWlsYWJsZQorICAgLS13aXRoLXNlcGFyYXRlLWRlYnVnLWRpcj1ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGdsb2JhbCBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGluIERJUgorQEAgLTUzODYsOCArNTM5Miw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01NDI3LDcgKzU0MzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC02MTEzLDggKzYxMTksOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNjE2Myw2ICs2MTY5LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MTc5LDYgKzYyNTksMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYzNDcsNyArNjQzMiw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02NTAxLDYgKzY1ODcsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02NTE2LDkgKzY2MTcsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY1MzQsNyArNjc4OCw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY1NTQsMTEgKzY4MDgsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjU3NCw3ICs2ODMyLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY1OTMsNiArNjg1MSwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjYwNCwxNiArNjg2Niw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY5NTUsOCArNzI3Myw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjk5Miw2ICs3MzEwLDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTcwMzMsNiArNzM1MiwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC03MDQ0LDcgKzczNzUsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC03MDcwLDggKzc0MDEsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC03MDgxLDggKzc0MTIsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC03MTE5LDYgKzc0NTAsMTYgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC03MTQwLDYgKzc0ODEsNDUgQEAgZmkKKyAKKyAKKyAKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKysKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworQEAgLTczNDYsNiArNzcyNiwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzkwOSw2ICs4NDA2LDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTgwNzMsNyArODU3Miw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC04MTYyLDcgKzg2NjIsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTg0NjAsOCArODk2MCw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODYyNyw2ICs5MTI1LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODY4OSw3ICs5MTkzLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTg3NDYsMTMgKzkyNTAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODgxMyw2ICs5MzIxLDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtOTE2Myw3ICs5Njc2LDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtOTIxMSw3ICs5NzI1LDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtOTI2MiwxMiArOTc3NiwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05MjgxLDggKzk3OTUsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTMwMCw4ICs5ODE0LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkzNDcsOCArOTg2MSw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NDc4LDcgKzk5OTIsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTQ5MSwyMiArMTAwMTEsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTk1MTgsNyArMTAwNDUsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk1MzEsMjIgKzEwMDY0LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTU5MSwyMCArMTAxMzEsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05NjY1LDcgKzEwMjQ4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTY3Myw3ICsxMDI1Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk2ODksNyArMTAyNzIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTcxMywxMCArMTAyOTYsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05Nzk1LDIzICsxMDM3OCwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTg5Niw3ICsxMDQ5Miw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk5MTUsOSArMTA1MTEsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTA0OTMsOCArMTEwODksOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTA1MjcsMTMgKzExMTI0LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDYyNSw3ICsxMTI4MCw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTQ2NSwxMCArMTIxMjAsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTU3MSwxMCArMTIyMjYsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTE2Myw3ICsxNTgxOCw3IEBAIFNIQVJFRF9MREZMQUdTPQorIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KK0BAIC0xNjc4MCwxMyArMTc0MzUsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNjgwMSwxNCArMTc0NjMsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTY4NDEsMTIgKzE3NTA2LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2OTAxLDggKzE3NTY2LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNjkxMiwxMiArMTc1ODIsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE2OTMzLDcgKzE3NjA1LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTY5NjksNiArMTc2NDAsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE3NzQ4LDcgKzE4NDIwLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNzg1MSwxOSArMTg1MjQsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTc4OTMsNiArMTg1ODksMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTc5MDIsNiArMTg2MDQsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE4MDE2LDEyICsxODcyMSwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xODEwOCw5ICsxODgxMyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE4MTI2LDYgKzE4ODI4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xODE1OCwyMTAgKzE4ODYzLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlndXJlLmFjIGIvYmZkL2NvbmZpZ3VyZS5hYworaW5kZXggYmE5OGUzOS4uODgwNjNjZiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWd1cmUuYWMKKysrKyBiL2JmZC9jb25maWd1cmUuYWMKK0BAIC01NjQsNyArNTY0LDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KK2RpZmYgLS1naXQgYS9iaW51dGlscy9jb25maWd1cmUgYi9iaW51dGlscy9jb25maWd1cmUKK2luZGV4IGJlNGI4MWMuLjY2MDZhNWYgMTAwNzU1CistLS0gYS9iaW51dGlscy9jb25maWd1cmUKKysrKyBiL2JpbnV0aWxzL2NvbmZpZ3VyZQorQEAgLTY1NSw4ICs2NTUsMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzY3LDYgKzc3MCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTE0MzksNiArMTQ0Myw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgIC0td2l0aC16bGliICAgICAgICAgICAgIGluY2x1ZGUgemxpYiBzdXBwb3J0IChhdXRvL3llcy9ubykgZGVmYXVsdD1hdXRvCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgZGVmYXVsdD1ubworICAgLS13aXRoLWxpYmljb252LXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpY29udiBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorQEAgLTUxNTMsOCArNTE1OSw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01MTk0LDcgKzUyMDAsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01ODgwLDggKzU4ODYsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTkzMCw2ICs1OTM2LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTQ2LDYgKzYwMjYsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYxMTQsNyArNjE5OSw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MjY4LDYgKzYzNTQsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MjgzLDkgKzYzODQsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYzMDEsNyArNjU1NSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzMjEsMTEgKzY1NzUsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjM0MSw3ICs2NTk5LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzNjAsNiArNjYxOCwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjM3MSwxNiArNjYzMyw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY3MjIsOCArNzA0MCw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjc1OSw2ICs3MDc3LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY4MDAsNiArNzExOSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02ODExLDcgKzcxNDIsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02ODM3LDggKzcxNjgsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02ODQ4LDggKzcxNzksOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02ODg2LDYgKzcyMTcsMjAgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02OTA1LDYgKzcyNTAsNDEgQEAgZmkKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKyAKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK0BAIC03MTEzLDYgKzc0OTMsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc2NzYsNiArODE3Myw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03ODcxLDcgKzgzNzAsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzk2MCw3ICs4NDYwLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04MjU4LDggKzg3NTgsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg0MjUsNiArODkyMywxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg0ODcsNyArODk5MSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NTQ0LDEzICs5MDQ4LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg2MTEsNiArOTExOSwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg5NjEsNyArOTQ3NCw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTkwMDksNyArOTUyMyw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTkwNjAsMTIgKzk1NzQsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTA3OSw4ICs5NTkzLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkwOTgsOCArOTYxMiw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MTQ1LDggKzk2NTksOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTI3Niw3ICs5NzkwLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyODksMjIgKzk4MDksMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkzMTYsNyArOTg0MywxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTMyOSwyMiArOTg2MiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkzODksMjAgKzk5MjksNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05NDYzLDcgKzEwMDQ2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTQ3MSw3ICsxMDA1NCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk0ODcsNyArMTAwNzAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTUxMSwxMCArMTAwOTQsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05NTkzLDIzICsxMDE3NiwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTY5NCw3ICsxMDI5MCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk3MTMsOSArMTAzMDksOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTAyOTEsOCArMTA4ODcsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAzMjUsMTMgKzEwOTIyLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDQyMyw3ICsxMTA3OCw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTI2MywxMCArMTE5MTgsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTM2OSwxMCArMTIwMjQsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTM3MywxMyArMTYwMjgsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTM5NCwxNCArMTYwNTYsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTU0MzQsMTIgKzE2MDk5LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1NDk0LDggKzE2MTU5LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNTUwNSwxMiArMTYxNzUsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE1NTI2LDcgKzE2MTk4LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTU1NjIsNiArMTYyMzMsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE2MzE5LDcgKzE2OTkxLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNjQyMiwxOSArMTcwOTUsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTY0NjQsNiArMTcxNjAsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTY0NzMsNiArMTcxNzUsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE2NTg3LDEyICsxNzI5MiwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNjY3OSw5ICsxNzM4NCw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE2Njk3LDYgKzE3Mzk5LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNjcyOSwyMTAgKzE3NDM0LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGU5ZjJmMTMuLmNiY2NiMTggMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTgwNDEsNyArODA0MSw3IEBAIGNhc2UgIiAkYnVpbGRfY29uZmlnZGlycyAiIGluCisgICAgICMgRm9yIGFuIGluc3RhbGxlZCBtYWtlaW5mbywgd2UgcmVxdWlyZSBpdCB0byBiZSBmcm9tIHRleGluZm8gNC43IG9yCisgICAgICMgaGlnaGVyLCBlbHNlIHdlIHVzZSB0aGUgIm1pc3NpbmciIGR1bW15LgorICAgICBpZiAke01BS0VJTkZPfSAtLXZlcnNpb24gXAorLSAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKig0XC4oWzctOV18WzEtOV1bMC05XSl8WzUtOV18WzEtOV1bMC05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKihbMS0zXVswLTldfDQuWzQtOV18NC5bMS05XVswLTldK3xbNS05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIDoKKyAgICAgZWxzZQorICAgICAgIE1BS0VJTkZPPSIkTUlTU0lORyBtYWtlaW5mbyIKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlIGIvZ2FzL2NvbmZpZ3VyZQoraW5kZXggZTliYTU1MC4uMDc0ODg2ZiAxMDA3NTUKKy0tLSBhL2dhcy9jb25maWd1cmUKKysrKyBiL2dhcy9jb25maWd1cmUKK0BAIC02NDUsOCArNjQ1LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc1Nyw2ICs3NjAsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDIyLDYgKzE0MjYsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtemxpYiAgICAgICAgICAgICBpbmNsdWRlIHpsaWIgc3VwcG9ydCAoYXV0by95ZXMvbm8pIGRlZmF1bHQ9YXV0bworIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorQEAgLTQ5MDEsOCArNDkwNyw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC00OTQyLDcgKzQ5NDgsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01NjI4LDggKzU2MzQsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTY3OCw2ICs1Njg0LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01Njk0LDYgKzU3NzQsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTU4NjIsNyArNTk0Nyw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MDE2LDYgKzYxMDIsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MDMxLDkgKzYxMzIsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYwNDksNyArNjMwMyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwNjksMTEgKzYzMjMsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjA4OSw3ICs2MzQ3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYxMDgsNiArNjM2NiwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjExOSwxMiArNjM4MSwxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKyAKKyAKKyAKK0BAIC02MTM2LDYgKzYzOTYsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK0BAIC02NDcwLDggKzY3ODgsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY1MDcsNiArNjgyNSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NTQ4LDYgKzY4NjcsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjU1OSw3ICs2ODkwLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjU4NSw4ICs2OTE2LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjU5Niw4ICs2OTI3LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjYzNCw2ICs2OTY1LDIxIEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjY1Miw2ICs2OTk4LDQwIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisgCisgCisgCitAQCAtNjg2MSw2ICs3MjQxLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03NDI0LDYgKzc5MjEsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzYxOSw3ICs4MTE4LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc3MDgsNyArODIwOCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODAwNiw4ICs4NTA2LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MTczLDYgKzg2NzEsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04MjM1LDcgKzg3MzksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODI5MiwxMyArODc5NiwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04MzU5LDYgKzg4NjcsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04NzA5LDcgKzkyMjIsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04NzU3LDcgKzkyNzEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04ODA4LDEyICs5MzIyLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTg4MjcsOCArOTM0MSw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC04ODQ2LDggKzkzNjAsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODg5Myw4ICs5NDA3LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkwMjQsNyArOTUzOCwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MDM3LDIyICs5NTU3LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MDY0LDcgKzk1OTEsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkwNzcsMjIgKzk2MTAsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MTM3LDIwICs5Njc3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTIxMSw3ICs5Nzk0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTIxOSw3ICs5ODAyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTIzNSw3ICs5ODE4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTkyNTksMTAgKzk4NDIsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05MzQxLDIzICs5OTI0LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05NDQyLDcgKzEwMDM4LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTQ2MSw5ICsxMDA1Nyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDAzOSw4ICsxMDYzNSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDA3MywxMyArMTA2NzAsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMTcxLDcgKzEwODI2LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExMDExLDEwICsxMTY2NiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMTE3LDEwICsxMTc3MiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTE1Mjc0LDEzICsxNTkyOSwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1Mjk1LDE0ICsxNTk1NywxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTMzNSwxMiArMTYwMDAsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUzOTUsOCArMTYwNjAsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE1NDA2LDEyICsxNjA3NiwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTU0MjcsNyArMTYwOTksNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xNTQ2Myw2ICsxNjEzNCw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTYyMjcsNyArMTY4OTksOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE2MzMwLDE5ICsxNzAwMyw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNjM3Miw2ICsxNzA2OCwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNjM4MSw2ICsxNzA4Myw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTY0OTUsMTIgKzE3MjAwLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE2NTg3LDkgKzE3MjkyLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTY2MDUsNiArMTczMDcsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE2NjM3LDIxMCArMTczNDIsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL2dwcm9mL2NvbmZpZ3VyZSBiL2dwcm9mL2NvbmZpZ3VyZQoraW5kZXggNzk5NjFjNS4uYzRmNmFjOSAxMDA3NTUKKy0tLSBhL2dwcm9mL2NvbmZpZ3VyZQorKysrIGIvZ3Byb2YvY29uZmlndXJlCitAQCAtNjI5LDggKzYyOSwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NDEsNiArNzQ0LDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTM5OSw2ICsxNDAzLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCitAQCAtNDgzMSw4ICs0ODM3LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTQ4NzIsNyArNDg3OCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU1NTgsOCArNTU2NCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01NjA4LDYgKzU2MTQsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU2MjQsNiArNTcwNCwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNTc5Miw3ICs1ODc3LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTU4NjksMTEgKzU5NTUsNiBAQCBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy1saW51eC11Y2xpYmMqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCistICA7OworLQorIG5ldGJzZCopCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKK0BAIC01OTUxLDYgKzYwMzIsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC01OTY2LDkgKzYwNjIsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5ODQsNyArNjIzMyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwMDQsMTEgKzYyNTMsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjAyNCw3ICs2Mjc3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwNDMsNiArNjI5NiwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjA1NCwxMiArNjMxMSwxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKyAKKyAKKyAKK0BAIC02MDcxLDYgKzYzMjYsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK0BAIC02NDA1LDggKzY3MTgsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY0NDIsNiArNjc1NSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NDgzLDYgKzY3OTcsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjQ5NCw3ICs2ODIwLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjUyMCw4ICs2ODQ2LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjUzMSw4ICs2ODU3LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjU2OSw2ICs2ODk1LDE4IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjU5MCw2ICs2OTI4LDQzIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisrCisrCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK0BAIC02Nzk2LDYgKzcxNzEsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTczNTksNiArNzg1MSw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03NTU0LDcgKzgwNDgsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzY0Myw3ICs4MTM4LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC03OTQxLDggKzg0MzYsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgxMDgsNiArODYwMSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTgxNzAsNyArODY2OSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04MjI3LDEzICs4NzI2LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTgyOTQsNiArODc5NywxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg2NDQsNyArOTE1Miw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTg2OTIsNyArOTIwMSw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTg3NDMsMTIgKzkyNTIsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtODc2Miw4ICs5MjcxLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTg3ODEsOCArOTI5MCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04ODI4LDggKzkzMzcsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODk1OSw3ICs5NDY4LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTg5NzIsMjIgKzk0ODcsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTg5OTksNyArOTUyMSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTAxMiwyMiArOTU0MCwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkwNzIsMjAgKzk2MDcsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05MTQ2LDcgKzk3MjQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05MTU0LDcgKzk3MzIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05MTcwLDcgKzk3NDgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTE5NCwxMCArOTc3MiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTkyNzYsMjMgKzk4NTQsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTkzNzcsNyArOTk2OCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTkzOTYsOSArOTk4Nyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC05OTc0LDggKzEwNTY1LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMDA4LDEzICsxMDYwMCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAxMDYsNyArMTA3NTYsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTA5NDYsMTAgKzExNTk2LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEwNTIsMTAgKzExNzAyLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTI5MjQsMTMgKzEzNTc0LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTI5NDUsMTQgKzEzNjAyLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEyOTg1LDEyICsxMzY0NSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzA0NSw4ICsxMzcwNSwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTMwNTYsMTIgKzEzNzIxLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xMzA3Nyw3ICsxMzc0NCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTEzMTEzLDYgKzEzNzc5LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xMzg2OSw3ICsxNDUzNiw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTM5NzIsMTkgKzE0NjQwLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE0MDE0LDYgKzE0NzA1LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE0MDIzLDYgKzE0NzIwLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNDEzNywxMiArMTQ4MzcsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTQyMjksOSArMTQ5MjksNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNDI0Nyw2ICsxNDk0NCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTQyNzksMjEwICsxNDk3OSwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCitpbmRleCA0NDA4YjBkLi4yZmJhZWJmIDEwMDc1NQorLS0tIGEvbGQvY29uZmlndXJlCisrKysgYi9sZC9jb25maWd1cmUKK0BAIC02NTQsOCArNjU0LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc3Niw2ICs3NzksNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDUzLDYgKzE0NTcsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtbGliLXBhdGg9ZGlyMTpkaXIyLi4uICBzZXQgZGVmYXVsdCBMSUJfUEFUSAorICAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgdXNyL2xpYiBldCBhbCB3aXRoaW4gRElSLgorICAgLS13aXRoLXpsaWIgICAgICAgICAgICAgaW5jbHVkZSB6bGliIHN1cHBvcnQgKGF1dG8veWVzL25vKSBkZWZhdWx0PWF1dG8KK0BAIC01NjQ1LDggKzU2NTEsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTY4Niw3ICs1NjkyLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNjM3Miw4ICs2Mzc4LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTY0MjIsNiArNjQyOCw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjQzOCw2ICs2NTE4LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02NjA2LDcgKzY2OTEsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjc2MCw2ICs2ODQ2LDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjc3NSw5ICs2ODc2LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NzkzLDcgKzcwNDcsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02ODEzLDExICs3MDY3LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY4MzMsNyArNzA5MSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02ODUyLDYgKzcxMTAsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTY4NjMsMTIgKzcxMjUsMTIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisgCisgCisgCitAQCAtNjg3OCw2ICs3MTQwLDYyIEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKyAKKyAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCitAQCAtNzIxNCw4ICs3NTMyLDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC03MjUxLDYgKzc1NjksNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNzI5Miw2ICs3NjExLDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTczMDMsNyArNzYzNCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTczMjksOCArNzY2MCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTczNDAsOCArNzY3MSw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTczNzgsNiArNzcwOSwxOSBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworKworIAorIAorIAorQEAgLTczOTgsNiArNzc0Miw0MiBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNzYwNSw2ICs3OTg1LDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC04MTY4LDYgKzg2NjUsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtODIzNiw2ICs4NzM1LDE2IEBAIGRvbmUKKyAKKyAKKyAKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorKworKworKworIAorIAorICMgU2V0IG9wdGlvbnMKK0BAIC04MzY0LDcgKzg4NzMsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtODQ1Myw3ICs4OTYzLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04NzUxLDggKzkyNjEsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg5MTgsNiArOTQyNiwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg5ODAsNyArOTQ5NCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC05MDM3LDEzICs5NTUxLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTkxMDQsNiArOTYyMiwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTk0NTQsNyArOTk3Nyw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTk1MDIsNyArMTAwMjYsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC05NTUzLDEyICsxMDA3NywxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05NTcyLDggKzEwMDk2LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTk1OTEsOCArMTAxMTUsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTYzOCw4ICsxMDE2Miw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NzY5LDcgKzEwMjkzLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk3ODIsMjIgKzEwMzEyLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05ODA5LDcgKzEwMzQ2LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05ODIyLDIyICsxMDM2NSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTk4ODEsMjEgKzEwNDMxLDY0IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCistICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTk5NTYsNyArMTA1NDksNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05OTY0LDcgKzEwNTU3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTk4MCw3ICsxMDU3Myw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC0xMDAwNCwxMCArMTA1OTcsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC0xMDA4NiwyMyArMTA2NzksMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTEwMTg3LDcgKzEwNzkzLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtMTAyMDYsOSArMTA4MTIsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTA3ODQsOCArMTEzOTAsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTA4MTgsMTMgKzExNDI1LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDkxNiw3ICsxMTU4MSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTcxMiw3ICsxMjM3Nyw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDExNzE1ICJjb25maWd1cmUiCisrI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xMTc1NiwxMCArMTI0MjEsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTgxOCw3ICsxMjQ4Myw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDExODIxICJjb25maWd1cmUiCisrI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xMTg2MiwxMCArMTI1MjcsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMjI1Nyw2ICsxMjkyMiw3IEBAICRSTSAtciBjb25mdGVzdCoKKyAKKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSRDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgbHRfc2F2ZV9MRD0kTEQKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgIEdDQz0kR1hYCitAQCAtMTIyNzQsNiArMTI5NDAsNyBAQCAkUk0gLXIgY29uZnRlc3QqCisgICBmaQorICAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgIENDPSR7Q1hYLSJjKysifQorKyAgQ0ZMQUdTPSRDWFhGTEFHUworICAgY29tcGlsZXI9JENDCisgICBjb21waWxlcl9DWFg9JENDCisgICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KK0BAIC0xMjQxMyw4ICsxMzA4MCw4IEBAIHdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorICAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworQEAgLTEyNTU2LDcgKzEzMjIzLDEzIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJworICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAgIyBleGVjdXRhYmxlLgorLSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMTI1NjksMjIgKzEzMjQyLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCisrZmkKKyAKKyAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCitAQCAtMTI1OTcsNyArMTMyNzcsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgIGVsc2UKKyAJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC0xMjYxMCwyMiArMTMyOTYsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKKytmaQorIAorIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTEyNjY4LDI5ICsxMzM2MSw3NSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgIDs7CisgCisgICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCistICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKy0gICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCistICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKy0gICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKy0gICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKysJLGNsKiB8IG5vLGNsKikKKysJICAjIE5hdGl2ZSBNU1ZDCisrCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisrCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKysJICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJICBsaWJleHQ9bGliCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGVsc2UKKysJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBmaX4KKysJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICAgIGxpbmtuYW1lcz0nCisrCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJworKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorKwkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCisrCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAgICouZXhlfCouRVhFKSA7OworKwkgICAgICAqKQorKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJCTs7CisrCSAgICBlc2FjfgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKysJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgICAgZmknCisrCSAgOzsKKysJKikKKysJICAjIGcrKworKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKysJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKysJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAKKyAKK0BAIC0xMjc5Niw3ICsxMzUzNSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworQEAgLTEyODY3LDEwICsxMzYwNiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgaWE2NCopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgICopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgZXNhYworIAkgICAgICBmaQorQEAgLTEyOTExLDkgKzEzNjUwLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworQEAgLTEyOTgzLDIwICsxMzcyMiwyMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKyAJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCitAQCAtMTMxOTEsNyArMTM5MzAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC0xMzIzNyw3ICsxMzk3Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworIAkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworQEAgLTEzMjc4LDkgKzE0MDE3LDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCisgCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgCisgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorQEAgLTEzNDE1LDYgKzE0MTU0LDEzIEBAIHByaXZhdGU6CisgfTsKKyBfTFRfRU9GCisgCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrZXNhYworKworIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEzNDI4LDcgKzE0MTc0LDcgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisgCisgICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCistICAgIGNhc2UgJHAgaW4KKysgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorIAorICAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCitAQCAtMTM0MzcsMTMgKzE0MTgzLDIyIEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorIAkgcHJldj0kcAorIAkgY29udGludWUKKy0gICAgICAgZWxzZQorLQkgcHJldj0KKyAgICAgICAgZmkKKyAKKysgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKysgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisrICAgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIGVzYWMKKysgICAgICAgZmkKKysgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCistCSBjYXNlICRwIGluCistCSAtTCogfCAtUiopCisrCSBjYXNlICR7cHJldn0gaW4KKysJIC1MIHwgLVIpCisgCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorIAkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKyAJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCitAQCAtMTM0NjMsOCArMTQyMTgsMTAgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICR7cHJldn0ke3B9IgorIAkgZmkKKyAgICAgICAgZmkKKysgICAgICAgcHJldj0KKyAgICAgICAgOzsKKyAKKysgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgICouJG9iamV4dCkKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorQEAgLTEzNTAwLDYgKzE0MjU3LDcgQEAgZWxzZQorIGZpCisgCisgJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKyAKKyAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC0xMzUzNSw3ICsxNDI5Myw3IEBAIGxpbnV4KikKKyAKKyBzb2xhcmlzKikKKyAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICBDQyopCisrICBDQyogfCBzdW5DQyopCisgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworQEAgLTEzNjAwLDggKzE0MzU4LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTEzNzA2LDYgKzE0NDYyLDExIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCSAgOzsKKyAJZXNhYworIAk7OworKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisrCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKysJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKysJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisrCTs7CisgICAgICAgZGd1eCopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgCSAgZWMrKyopCitAQCAtMTM4NTgsNyArMTQ2MTksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKK0BAIC0xMzkyMywxMCArMTQ2ODQsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC0xMzk4NCw2ICsxNDc1Miw4IEBAIGZpCisgCisgCisgCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtMTQxNjEsNiArMTQ5MzEsNyBAQCBmaQorICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIAorICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGFpeFs0LTldKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtMTQxNzUsMTUgKzE0OTQ2LDIwIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgIDs7CisgICBwdzMyKikKKyAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgorLSAgOzsKKysgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCistICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLzsvXi4qWyBdX19ubV9fL3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgIGNsKikgOzsKKysgICAgKikKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKysgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisgICAqKQorICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgOzsKKyAgIGVzYWMKKy0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorICRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9CitAQCAtMTQ0NDYsOCArMTUyMjIsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTQ0NzksMTMgKzE1MjU2LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xNDU3Niw3ICsxNTQxMSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xNTAzNSw2ICsxNTg3MCw3IEBAIGZpCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgICBMRENYWD0kTEQKKyAgIExEPSRsdF9zYXZlX0xECisgICBHQ0M9JGx0X3NhdmVfR0NDCitAQCAtMTc4MDcsMTMgKzE4NjQzLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc4MjgsMTQgKzE4NjcxLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3ODY4LDEyICsxODcxNCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzkxMiw4ICsxODc1OCw4IEBAIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlCisgY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEdDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3OTQwLDEyICsxODc4NiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5XworIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGhfQ1hYPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoX0NYWD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc5ODMsOCArMTg4MjksMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE3OTk0LDEyICsxODg0NSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTgwMTUsNyArMTg4NjgsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xODAzNyw4ICsxODg4OSw4IEBAIExEX0NYWCBcCisgcmVsb2FkX2ZsYWdfQ1hYIFwKKyBjb21waWxlcl9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCistbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCisrbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKKyBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKK0BAIC0xODA1MCw3ICsxODkwMiw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCistZml4X3NyY2ZpbGVfcGF0aF9DWFggXAorIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAorIGluY2x1ZGVfZXhwc3ltc19DWFggXAorIGZpbGVfbGlzdF9zcGVjX0NYWCBcCitAQCAtMTgwODQsNiArMTg5MzUsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE4MDk4LDcgKzE4OTUwLDggQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorIG1vZHVsZV9jbWRzX0NYWCBcCisgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCisgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAorLXByZWxpbmtfY21kc19DWFg7IGRvCisrcHJlbGlua19jbWRzX0NYWCBcCisrcG9zdGxpbmtfY21kc19DWFg7IGRvCisgICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCitAQCAtMTg4OTEsNyArMTk3NDQsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE4OTk0LDE5ICsxOTg0OCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xOTAzNiw2ICsxOTkxMywxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xOTA0NSw2ICsxOTkyOCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTkxNTksMTIgKzIwMDQ1LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE5MjUxLDkgKzIwMTM3LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTkyNjksNiArMjAxNTIsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE5MzE1LDIxMCArMjAyMDEsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorQEAgLTE5NTQ2LDEyICsyMDM5MSwxMiBAQCB3aXRoX2djYz0kR0NDX0NYWAorICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKKyAKK0BAIC0xOTYzOCw5ICsyMDQ4Myw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aF9DWFgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKyAKK0BAIC0xOTY1Niw2ICsyMDQ5OCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfQ1hYCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorIAorZGlmZiAtLWdpdCBhL2xpYnRvb2wubTQgYi9saWJ0b29sLm00CitpbmRleCA3OTc0NjhmLi4wMmIxNWIzIDEwMDY0NAorLS0tIGEvbGlidG9vbC5tNAorKysrIGIvbGlidG9vbC5tNAorQEAgLTEsNyArMSw4IEBACisgIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCitAQCAtMTAsNyArMTEsOCBAQAorIAorIG00X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMzcsNyArMzksNyBAQCBtNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgXSkKKyAKKy0jIHNlcmlhbCA1NiBMVF9JTklUCisrIyBzZXJpYWwgNTcgTFRfSU5JVAorIAorIAorICMgTFRfUFJFUkVRKFZFUlNJT04pCitAQCAtOTIsNyArOTQsOCBAQCBfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIEFDX1NVQlNUKExJQlRPT0wpZG5sCisgCisgX0xUX1NFVFVQCitAQCAtMTY2LDEwICsxNjksMTMgQEAgX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorIGRubAorIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCisgCisgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKK0BAIC0xOTksNyArMjA1LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC02MzIsNyArNjM4LDcgQEAgbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorIG00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCisgY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisgCistQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKyAKK0BAIC03NDYsMTUgKzc1MiwxMiBAQCBfTFRfRU9GCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorIAorLSAgX0xUX1BST0dfWFNJX1NIRUxMRk5TCisrICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisgCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyBdLAorQEAgLTk4MCw2ICs5ODMsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC0xMDY5LDMwICsxMDc0LDQxIEBAIG00X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCisgICBmaQorIF0pCisgCistIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyAjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyAjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyAjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyAjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisgIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKysjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKysjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCisgbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKKyBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKy1BQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maV0sW10pCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisraWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCisrICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH1dJworKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisrICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmldLFtdKQorKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrICBdKQorKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCisrZmkKKyBdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAKKyAKK0BAIC0xMTE3LDcgKzExMzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIAorIEFDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtMTE2MSw2ICsxMTc3LDM5IEBAIF9MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKKyBdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyAKKyAKKysjIF9MVF9XSVRIX1NZU1JPT1QKKysjIC0tLS0tLS0tLS0tLS0tLS0KKytBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCisrW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAorK1sgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQorKworK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKytkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfbGlidG9vbF9zeXNyb290fV0pCisrICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKysgICA7OworK2VzYWMKKysKKysgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQorK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAorK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKysKKyAjIF9MVF9FTkFCTEVfTE9DSworICMgLS0tLS0tLS0tLS0tLS0tCisgbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitAQCAtMTMyMCwxNCArMTM2OSw0NyBAQCBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyBdKSMgX0xUX0VOQUJMRV9MT0NLCisgCisgCisrIyBfTFRfUFJPR19BUgorKyMgLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX1BST0dfQVJdLAorK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCisrX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisrICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAorKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKysgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKyAgICAgXSkKKysgIF0pCisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCisrICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKKytdKSMgX0xUX1BST0dfQVIKKysKKysKKyAjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCistW0FDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKy1fTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKKy1fTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorK1tfTFRfUFJPR19BUgorIAorIEFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQorIHRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorQEAgLTE2MjMsNyArMTcwNSw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLVsjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKytbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNjY3LDEwICsxNzQ5LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMjIxMCw4ICsyMjkyLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTIyNDQsMTMgKzIzMjcsNzEgQEAgbTRfaWYoWyQxXSwgW10sWworICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0yMzQyLDcgKzI0ODMsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMjk1MCw2ICszMDkxLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC0zMDE2LDcgKzMxNjIsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtMzE2Nyw2ICszMzE0LDIxIEBAIHRwZiopCisgICA7OworIGVzYWMKKyBdKQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTMxNzQsNyArMzMzNiwxMSBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyBfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorIF9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCistICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCisrICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKysgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKKysgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisgXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyAKKyAKK0BAIC0zMjc3LDYgKzM0NDMsNjcgQEAgZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorIGRubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorIGRubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorIAorKyMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorKyMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbGluayBsaWJyYXJ5LgorKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKKyttNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCisrQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXNdLAorK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKytdKQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKytfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorKyAgICBbQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllc10pCisrXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisrCisrCisrIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBsb2NhdGUgdGhlIG1hbmlmZXN0IHRvb2wKKyttNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCisrW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKytBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisrICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCpdKQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAorK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrCisgCisgIyBMVF9MSUJfTQorICMgLS0tLS0tLS0KK0BAIC0zNDAzLDggKzM2MzAsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTM0NDAsNiArMzY2Nyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC0zNDczLDYgKzM3MDEsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMzQ4NCw3ICszNzI0LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUQCZ0QF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTM1MTAsMTUgKzM3NTAsMTUgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorIAkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgCWZpCitAQCAtMzU1MSw2ICszNzkxLDEzIEBAIGVsc2UKKyAgIEFDX01TR19SRVNVTFQob2spCisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorQEAgLTM1NjEsNiArMzgwOCw4IEBAIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKKyAgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCisrX0xUX0RFQ0woW10sIFtubV9maWxlX2xpc3Rfc3BlY10sIFsxXSwKKysgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKKyBdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyAKKyAKK0BAIC0zNTcyLDcgKzM4MjEsNiBAQCBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KKyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorIAorLUFDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTM2NzgsNiArMzkyNiwxMiBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAkgIDs7CisgCWVzYWMKKyAJOzsKKysgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisrCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKysJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKysJOzsKKyAgICAgICBkZ3V4KikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAJICBlYysrKikKK0BAIC0zODMwLDcgKzQwODQsNyBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKK0BAIC00MDUzLDYgKzQzMDcsMTIgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTQxMTUsNyArNDM3NSw3IEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CitAQCAtNDE3Miw5ICs0NDMyLDExIEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgIDs7CisgZXNhYworLUFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorLV9MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorLQlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKysgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAorKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKKytfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtNDE5Myw2ICs0NDU1LDggQEAgZmkKKyBfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisgCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorIAorK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtNDIxMyw2ICs0NDc3LDcgQEAgX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisgbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKKyBbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCisgQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitAQCAtNDIyMSw2ICs0NDg2LDcgQEAgbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICBjYXNlICRob3N0X29zIGluCisgICBhaXhbWzQtOV1dKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtNDIzNSwxNSArNDUwMSwyMCBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgICA7OworICAgcHczMiopCisgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKy0gIDs7CisrICAgIDs7CisgICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBjbCopIDs7CisrICAgICopCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworICAgKikKKyAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIDs7CisgICBlc2FjCistICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyBdLCBbCisgICBydW5wYXRoX3Zhcj0KKyAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK0BAIC00NDExLDcgKzQ2ODIsOCBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC00NDU5LDcgKzQ3MzEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC00NTEwLDEyICs0NzgyLDEyIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTQ1MjksOCArNDgwMSw4IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTQ1NDgsOCArNDgyMCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ1OTUsOCArNDg2Nyw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ3MjYsNyArNDk5OCw3IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICBlbHNlCitAQCAtNDczNyw3ICs1MDA5LDcgQEAgX0xUX0VPRgorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorIAkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCitAQCAtNDc4MSwyMCArNTA1Myw2MyBAQCBfTFRfRU9GCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKy0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisrCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC00ODI4LDcgKzUxNDMsNyBAQCBfTFRfRU9GCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KK0BAIC00ODM2LDcgKzUxNTEsNyBAQCBfTFRfRU9GCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtNDg1Miw3ICs1MTY3LDcgQEAgX0xUX0VPRgorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC00ODc2LDEwICs1MTkxLDEwIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtNDkyNiwxNiArNTI0MSwzMSBAQCBfTFRfRU9GCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIEFDX0xJTktfSUZFTFNFKGludCBmb28odm9pZCkge30sCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistICAgICAgICApCistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisrCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKysJICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBBQ19MSU5LX0lGRUxTRSgKKysJICAgICBbQUNfTEFOR19TT1VSQ0UoCisrCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKysJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSwKKysJCQkgICAgICBbRm9ydHJhbl0sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSldKV0sCisrCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAorKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC01MDIwLDcgKzUzNTAsNyBAQCBfTFRfRU9GCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC01MDM5LDkgKzUzNjksOSBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC01MzEzLDggKzU2NDMsNiBAQCBfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKKyBfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCisgICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorLV9MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKKy0gICAgW0ZpeCB0aGUgc2hlbGwgdmFyaWFibGUgJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlcl0pCisgX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorIF9MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKK0BAIC01MzI1LDYgKzU2NTMsOCBAQCBfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCisgX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCisrX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCisgX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCisgZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitAQCAtNTQyNiw2ICs1NzU2LDcgQEAgQ0M9IiRsdF9zYXZlX0NDIgorIG00X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKKyBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KK0BAIC01NDg3LDYgKzU4MTgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9JENDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBsdF9zYXZlX0xEPSRMRAorICAgbHRfc2F2ZV9HQ0M9JEdDQworICAgR0NDPSRHWFgKK0BAIC01NTA0LDYgKzU4MzYsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgZmkKKyAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgICBDQz0ke0NYWC0iYysrIn0KKysgIENGTEFHUz0kQ1hYRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTU1MjUsOCArNTg1OCw4IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAKKyAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCitAQCAtNTY2Nyw3ICs2MDAwLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICAjIGV4ZWN1dGFibGUuCistICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAorICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC01Njc5LDcgKzYwMTIsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICBlbHNlCisgCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorIAkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorIAkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorQEAgLTU3MjEsMjkgKzYwNTQsNzUgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgIDs7CisgCisgICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKy0gICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworLSAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKy0gICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorLSAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworLSAgICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCistCistICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorLSAgICAgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKy0JICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZWxzZQorLQkgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBmaX4KKy0gICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgZWxzZQorLSAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgICBmaQorLSAgICAgICAgOzsKKysJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorKwksY2wqIHwgbm8sY2wqKQorKwkgICMgTmF0aXZlIE1TVkMKKysJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisrCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworKwkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwkgIGxpYmV4dD1saWIKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJICBzaHJleHRfY21kcz0iLmRsbCIKKysJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZWxzZQorKwkgICAgICAkU0VEIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGZpfgorKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgICAgbGlua25hbWVzPScKKysJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJICAjIERvbid0IHVzZSByYW5saWIKKysJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworKwkgIF9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICAgKikKKysJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCQk7OworKwkgICAgZXNhY34KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisrCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICAgIGZpJworKwkgIDs7CisrCSopCisrCSAgIyBnKysKKysJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorIAk7OworQEAgLTU4MTgsNyArNjE5Nyw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgKikKKyAgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorLSAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCitAQCAtNTg4OSwxMCArNjI2OCwxMCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICBpYTY0KikKKy0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgKikKKy0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICBlc2FjCisgCSAgICAgIGZpCitAQCAtNTkzMyw5ICs2MzEyLDkgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgKikKKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkgICAgICBlbHNlCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisgCSAgICAgIGZpCisgCSAgICBmaQorIAkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCitAQCAtNjAwNSwyMCArNjM4NCwyMCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CistCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCInCisrCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworIAkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKy0JCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGB+CisrCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKyAJCSRSQU5MSUIgJG9sZGxpYicKKyAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisgCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCSAgICAgIDs7CisgCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKK0BAIC02MjEzLDcgKzY1OTIsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkJICA7OworIAkgICAgICAgICopCistCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgZXNhYworIAorQEAgLTYyNTksNyArNjYzOCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCisgICAgICAgc29sYXJpcyopCisgICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgICBDQyopCisrICAgICAgICAgIENDKiB8IHN1bkNDKikKKyAJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKyAJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKK0BAIC02MzAwLDkgKzY2NzksOSBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworIAkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisgCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworIAorIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KK0BAIC02NDMxLDYgKzY4MTAsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisgCisgICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICAgTERDWFg9JExECisgICBMRD0kbHRfc2F2ZV9MRAorICAgR0NDPSRsdF9zYXZlX0dDQworQEAgLTY0NDUsNiArNjgyNSwyOSBAQCBBQ19MQU5HX1BPUAorIF0pIyBfTFRfTEFOR19DWFhfQ09ORklHCisgCisgCisrIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBmdW5jX3N0cmlwbmFtZV9jbmYgcHJlZml4IHN1ZmZpeCBuYW1lCisrIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKysjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKysjCisrIyBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgKG5vbi1YU0kpIHZlcnNpb24gb2YgZnVuY19zdHJpcG5hbWUsCisrIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisrIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCisrbTRfZGVmdW4oW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdLFtkbmwKKytBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorK10pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrCisgIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKK0BAIC02NDUzLDYgKzY4NTYsNyBAQCBBQ19MQU5HX1BPUAorICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorIG00X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKKyBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKKyBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CisgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK0BAIC02NTAzLDYgKzY5MDcsMTMgQEAgcHVibGljIGNsYXNzIGZvbyB7CisgfTsKKyBfTFRfRU9GCisgXSkKKysKKytfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCisrY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKytlc2FjCisrCisgZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIGRubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KK0BAIC02NTE0LDcgKzY5MjUsNyBAQCBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworIAorICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworLSAgICBjYXNlICRwIGluCisrICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKyAKKyAgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorQEAgLTY1MjMsMTMgKzY5MzQsMjIgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKyAJIHByZXY9JHAKKyAJIGNvbnRpbnVlCistICAgICAgIGVsc2UKKy0JIHByZXY9CisgICAgICAgIGZpCisgCisrICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisrICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorKyAgICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICBlc2FjCisrICAgICAgIGZpCisrICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorLQkgY2FzZSAkcCBpbgorLQkgLUwqIHwgLVIqKQorKwkgY2FzZSAke3ByZXZ9IGluCisrCSAtTCB8IC1SKQorIAkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKyAJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisgCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorQEAgLTY1NDksOCArNjk2OSwxMCBAQCBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorIAkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKyAJIGZpCisgICAgICAgIGZpCisrICAgICAgIHByZXY9CisgICAgICAgIDs7CisgCisrICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICAqLiRvYmpleHQpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KK0BAIC02NTg2LDYgKzcwMDgsNyBAQCBlbHNlCisgZmkKKyAKKyAkUk0gLWYgY29uZmVzdC4kb2JqZXh0CisrQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworIAorICMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCisgbTRfaWYoWyQxXSwgW0NYWF0sCitAQCAtNjYyMiw3ICs3MDQ1LDcgQEAgbGludXgqKQorIAorIHNvbGFyaXMqKQorICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gIENDKikKKysgIENDKiB8IHN1bkNDKikKKyAgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCitAQCAtNjczNSw3ICs3MTU4LDkgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0iJENDIgorICAgbHRfc2F2ZV9HQ0M9JEdDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgQ0M9JHtGNzctImY3NyJ9CisrICBDRkxBR1M9JEZGTEFHUworICAgY29tcGlsZXI9JENDCisgICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitAQCAtNjc4OSw2ICs3MjE0LDcgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgCisgICBHQ0M9JGx0X3NhdmVfR0NDCisgICBDQz0iJGx0X3NhdmVfQ0MiCisrICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKyBmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworIAorIEFDX0xBTkdfUE9QCitAQCAtNjg2NSw3ICs3MjkxLDkgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSIkQ0MiCisgICBsdF9zYXZlX0dDQz0kR0NDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBDQz0ke0ZDLSJmOTUifQorKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisgCitAQCAtNjkyMSw3ICs3MzQ5LDggQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorIAorICAgR0NDPSRsdF9zYXZlX0dDQworLSAgQ0M9IiRsdF9zYXZlX0NDIgorKyAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyBmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisgCisgQUNfTEFOR19QT1AKK0BAIC02OTU4LDEwICs3Mzg3LDEyIEBAIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyAKKyAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorLWx0X3NhdmVfQ0M9IiRDQyIKKytsdF9zYXZlX0NDPSRDQworK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyBsdF9zYXZlX0dDQz0kR0NDCisgR0NDPXllcworIENDPSR7R0NKLSJnY2oifQorK0NGTEFHUz0kR0NKRkxBR1MKKyBjb21waWxlcj0kQ0MKKyBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitAQCAtNjk5Miw3ICs3NDIzLDggQEAgZmkKKyBBQ19MQU5HX1JFU1RPUkUKKyAKKyBHQ0M9JGx0X3NhdmVfR0NDCistQ0M9IiRsdF9zYXZlX0NDIgorK0NDPSRsdF9zYXZlX0NDCisrQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworIF0pIyBfTFRfTEFOR19HQ0pfQ09ORklHCisgCisgCitAQCAtNzAyNyw5ICs3NDU5LDExIEBAIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyAKKyAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorIGx0X3NhdmVfQ0M9IiRDQyIKKytsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgbHRfc2F2ZV9HQ0M9JEdDQworIEdDQz0KKyBDQz0ke1JDLSJ3aW5kcmVzIn0KKytDRkxBR1M9CisgY29tcGlsZXI9JENDCisgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK0BAIC03MDQyLDcgKzc0NzYsOCBAQCBmaQorIAorIEdDQz0kbHRfc2F2ZV9HQ0MKKyBBQ19MQU5HX1JFU1RPUkUKKy1DQz0iJGx0X3NhdmVfQ0MiCisrQ0M9JGx0X3NhdmVfQ0MKKytDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworIAorIAorQEAgLTcxMDEsNiArNzUzNiwxNSBAQCBfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCisgQUNfU1VCU1QoW09CSkRVTVBdKQorIF0pCisgCisrIyBfTFRfREVDTF9ETExUT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCisrbTRfZGVmdW4oW19MVF9ERUNMX0RMTFRPT0xdLAorK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKytfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pCisrQUNfU1VCU1QoW0RMTFRPT0xdKQorK10pCisgCisgIyBfTFRfREVDTF9TRUQKKyAjIC0tLS0tLS0tLS0tLQorQEAgLTcxOTQsOCArNzYzOCw4IEBAIG00X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNzIzNCwyMDYgKzc2NzgsMTYyIEBAIF9MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorIF0pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyAKKyAKKy0jIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBCb3VybmUgYW5kIFhTSSBjb21wYXRpYmxlIHZhcmlhbnRzIG9mIHNvbWUgdXNlZnVsIHNoZWxsIGZ1bmN0aW9ucy4KKy1tNF9kZWZ1bihbX0xUX1BST0dfWFNJX1NIRUxMRk5TXSwKKy1bY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKysjIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UgKEZVTkNOQU1FLCBSRVBMQUNFTUVOVC1CT0RZKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBJbiBgJGNmZ2ZpbGUnLCBsb29rIGZvciBmdW5jdGlvbiBGVU5DTkFNRSBkZWxpbWl0ZWQgYnkgYF5GVU5DTkFNRSAoKSQnIGFuZAorKyMgJ159IEZVTkNOQU1FICcsIGFuZCByZXBsYWNlIGl0cyBib2R5IHdpdGggUkVQTEFDRU1FTlQtQk9EWS4KKyttNF9kZWZ1bihbX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRV0sCisrW2RubCB7Cisrc2VkIC1lICcvXiQxICgpJC8sL159ICMgJDEgL2NcCisrJDEgKClcCisre1wKKyttNF9icGF0c3Vic3RzKFskMl0sIFskXSwgW1xcXSwgW15cKFsJIF1cKV0sIFtcXFwxXSkKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgJDEgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytdKQorIAorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIAorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CisrIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCisrIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KKyttNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCisrW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisrICAgIGVzYWNdKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisrCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKysgICAgZXNhYworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKyAKKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3N0cmlwbmFtZV0sIFtkbmwKKysgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorKyAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XSkKKyAKKy1kbmwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZQorLWRubCBBIHBvcnRhYmxlIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZ2VuZXJhbC5tNHNoCistZG5sIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IGhlcmUuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X2xvbmdfb3B0XSwgW2RubAorKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn0KKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fV0pCisgCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQorIAorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW1tePV1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bW149XV0qPS8vJworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworKyAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworKyAgICBlc2FjXSkKKyAKKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3hmb3JtXSwgWyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXSkKKyAKKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQorIAorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW1teLl1dKiQvLmxvLydgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCisrZmkKKyAKKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkW0BdImAKKy19CisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRdLCBbICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJdKQorIAorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkWzFdIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRfcXVvdGVkXSwgW2RubAorKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorK2RubCBtNCBleHBhbnNpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgdGhlbiB0aGUgc2hlbGwgZXZhbCB0dXJucyB0aGF0IGludG8gXAorKyAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Il0pCisgCistX0xUX0VPRgorLWVzYWMKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisgCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKKytmaQorK10pCisgCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiRbMV0rPVwkWzJdIgorLX0KKy1fTFRfRU9GCisrIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKysjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKKysjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KKyttNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKKytBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCisrQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCisrW2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworICAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJFsxXT1cJCRbMV1cJFsyXSIKKy19CistCistX0xUX0VPRgorKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworICAgICA7OworLSAgZXNhYworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworK10pCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKKytfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKysgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCisrCisrQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKKytBQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKKytbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisgXSkKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorK19MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAorKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggOTUwM2VjOC4uNzBlODU2ZSAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtMSwxMCArMSw5IEBACistIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaC4KKyAKKy0jIGxpYnRvb2wgKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKKysjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQKKyAjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCistIyAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisgIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKK0BAIC0zOCw3ICszNyw2IEBACisgIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorLSMgICAgICAgLS1uby1maW5pc2ggICAgICAgICAgbGV0IGluc3RhbGwgbW9kZSBhdm9pZCBmaW5pc2ggY29tbWFuZHMKKyAjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyAjICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyAjICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50CitAQCAtNzEsMTcgKzY5LDE5IEBACisgIyAgICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyAjICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyAjICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKy0jICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wgMS4zMTM0IDIwMDktMTEtMjkpIDIuMi43YQorKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40CisgIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgorICMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyAjCisgIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisrIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorKyMgR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCisgCisgUFJPR1JBTT1saWJ0b29sCisgUEFDS0FHRT1saWJ0b29sCistVkVSU0lPTj0yLjIuN2EKKy1USU1FU1RBTVA9IiAxLjMxMzQgMjAwOS0xMS0yOSIKKy1wYWNrYWdlX3JldmlzaW9uPTEuMzEzNAorK1ZFUlNJT049Mi40CisrVElNRVNUQU1QPSIiCisrcGFja2FnZV9yZXZpc2lvbj0xLjMyOTMKKyAKKyAjIEJlIEJvdXJuZSBjb21wYXRpYmxlCisgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCitAQCAtMTA2LDkgKzEwNiw2IEBAIF9MVEVDSE9fRU9GJworIH0KKyAKKyAjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorLSMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCistIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKKy0jIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCisgbHRfdXNlcl9sb2NhbGU9CisgbHRfc2FmZV9sb2NhbGU9CisgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitAQCAtMTIxLDE1ICsxMTgsMTMgQEAgZG8KKyAJICBsdF9zYWZlX2xvY2FsZT1cIiRsdF92YXI9QzsgXCRsdF9zYWZlX2xvY2FsZVwiCisgCWZpIgorIGRvbmUKKytMQ19BTEw9QworK0xBTkdVQUdFPUMKKytleHBvcnQgTEFOR1VBR0UgTENfQUxMCisgCisgJGx0X3Vuc2V0IENEUEFUSAorIAorIAorLQorLQorLQorLQorLQorICMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorICMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisgIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKK0BAIC0xNDAsNyArMTM1LDcgQEAgcHJvZ3BhdGg9IiQwIgorIAorIAorIDogJHtDUD0iY3AgLWYifQorLTogJHtFQ0hPPSRhc19lY2hvfQorK3Rlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQorIDogJHtFR1JFUD0iL2Jpbi9ncmVwIC1FIn0KKyA6ICR7RkdSRVA9Ii9iaW4vZ3JlcCAtRiJ9CisgOiAke0dSRVA9Ii9iaW4vZ3JlcCJ9CitAQCAtMTQ5LDcgKzE0NCw3IEBAIHByb2dwYXRoPSIkMCIKKyA6ICR7TUtESVI9Im1rZGlyIn0KKyA6ICR7TVY9Im12IC1mIn0KKyA6ICR7Uk09InJtIC1mIn0KKy06ICR7U0VEPSIvbW91bnQvZW5kb3Ivd2lsZGVuaHUvbG9jYWwteDg2XzY0L2Jpbi9zZWQifQorKzogJHtTRUQ9Ii9iaW4vc2VkIn0KKyA6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKyA6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKyAKK0BAIC0xNjksNiArMTY0LDI3IEBAIElGUz0iIAkkbHRfbmwiCisgZGlybmFtZT0icywvW14vXSokLCwiCisgYmFzZW5hbWU9InMsXi4qLywsIgorIAorKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKysjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKytmdW5jX2Rpcm5hbWUgKCkKKyt7CisrICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKysgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorKyAgICBlbHNlCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorKyAgICBmaQorK30gIyBmdW5jX2Rpcm5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKytmdW5jX2Jhc2VuYW1lICgpCisreworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKyt9ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKyAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisgIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorICMgY2FsbDoKK0BAIC0xODMsMTcgKzE5OSwzMSBAQCBiYXNlbmFtZT0icyxeLiovLCwiCisgIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCisgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorIHsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCistfQorKyAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisrICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKysgICAgZmkKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCisrfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKysjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisrIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisrIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKytmdW5jX3N0cmlwbmFtZSAoKQorK3sKKysgICAgY2FzZSAkezJ9IGluCisrICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKysgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICAgIGVzYWMKKyt9ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgCistIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUuCisgCisgIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorIHBhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJworQEAgLTM3Niw2ICs0MDYsMTUgQEAgc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKyAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KKyBkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisgCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKysjIHN0cmluZyBsaXRlcmFsbHkuCisrc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0ncyxbXS5bXiRcXCpcL10sXFwmLGcnCisrCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKKysjIHdoaWNoIGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworKyMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgorK2x0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKysKKyAjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorICMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKKyAjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KK0BAIC00MDQsNyArNDQzLDcgQEAgb3B0X3dhcm5pbmc9OgorICMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorIGZ1bmNfZWNobyAoKQorIHsKKy0gICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCisrICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCisgfQorIAorICMgZnVuY192ZXJib3NlIGFyZy4uLgorQEAgLTQzMCwxNCArNDY5LDE0IEBAIGZ1bmNfZWNob19hbGwgKCkKKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCisgZnVuY19lcnJvciAoKQorIHsKKy0gICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogIiR7MSsiJEAifSAxPiYyCisrICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCisgfQorIAorICMgZnVuY193YXJuaW5nIGFyZy4uLgorICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorIGZ1bmNfd2FybmluZyAoKQorIHsKKy0gICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKyAKKyAgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICAgOgorQEAgLTY1NiwxOSArNjk1LDM1IEBAIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQorICAgICBmaQorIH0KKyAKKy0KKy0KKysjIGZ1bmNfdHJfc2gKKysjIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgorKyMgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY190cl9zaF9yZXN1bHQuICBBbGwgY2hhcmFjdGVycworKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisrIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KKytmdW5jX3RyX3NoICgpCisreworKyAgY2FzZSAkMSBpbgorKyAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQorKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3MvXlwoWzAtOV1cKS9fXDEvOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKysgICAgOzsKKysgICogKQorKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQorKyAgICA7OworKyAgZXNhYworK30KKyAKKyAKKyAjIGZ1bmNfdmVyc2lvbgorICMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorIGZ1bmNfdmVyc2lvbiAoKQorIHsKKysgICAgJG9wdF9kZWJ1ZworKworICAgICAkU0VEIC1uICcvKEMpLyFiIGdvCisgCTptb3JlCisgCS9cLi8heworIAkgIE4KKy0JICBzL1xuIyAvLworKwkgIHMvXG4jIC8gLworIAkgIGIgbW9yZQorIAl9CisgCTpnbworQEAgLTY4NSw3ICs3NDAsOSBAQCBmdW5jX3ZlcnNpb24gKCkKKyAjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKyBmdW5jX3VzYWdlICgpCisgeworLSAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICotaC8geworKyAgICAkb3B0X2RlYnVnCisrCisrICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7CisgICAgICAgICBzL14jIC8vCisgCXMvXiMgKiQvLworIAlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCitAQCAtNzAxLDcgKzc1OCwxMCBAQCBmdW5jX3VzYWdlICgpCisgIyB1bmxlc3MgJ25vZXhpdCcgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LgorIGZ1bmNfaGVscCAoKQorIHsKKysgICAgJG9wdF9kZWJ1ZworKworICAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworKwk6cHJpbnQKKyAgICAgICAgIHMvXiMgLy8KKyAJcy9eIyAqJC8vCisgCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKK0BAIC03MTQsNyArNzc0LDExIEBAIGZ1bmNfaGVscCAoKQorIAlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKyAJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisgCXAKKy0gICAgIH0nIDwgIiRwcm9ncGF0aCIKKysJZAorKyAgICAgfQorKyAgICAgL14jIC4qIGhvbWUgcGFnZTovYiBwcmludAorKyAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50CisrICAgICAnIDwgIiRwcm9ncGF0aCIKKyAgICAgcmV0PSQ/CisgICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgorICAgICAgIGV4aXQgJHJldAorQEAgLTcyNiwxMiArNzkwLDM5IEBAIGZ1bmNfaGVscCAoKQorICMgZXhpdF9jbWQuCisgZnVuY19taXNzaW5nX2FyZyAoKQorIHsKKy0gICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEiCisrICAgICRvcHRfZGVidWcKKysKKysgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEuIgorICAgICBleGl0X2NtZD1leGl0CisgfQorIAorLWV4aXRfY21kPToKKyAKKysjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IHNob3J0b3B0CisrIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCisrIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisreworKyAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJworKyAgICBteV9zZWRfc2hvcnRfcmVzdD0nMXMvXi4uXCguKlwpJC9cMS87cScKKysKKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9yZXN0ImAKKyt9ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3NwbGl0X2xvbmdfb3B0IGxvbmdvcHQKKysjIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCisrIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIExPTkdPUFQgYXQgdGhlIGA9JyBzaWduLgorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKCkKKyt7CisrICAgIG15X3NlZF9sb25nX29wdD0nMXMvXlwoLS1bXj1dKlwpPS4qL1wxLztxJworKyAgICBteV9zZWRfbG9uZ19hcmc9JzFzL14tLVtePV0qPS8vJworKworKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKyt9ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKytleGl0X2NtZD06CisgCisgCisgCitAQCAtNzQxLDI2ICs4MzIsNjQgQEAgbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorIG1hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorIAorICMgR2xvYmFsIHZhcmlhYmxlcy4KKy0jICRtb2RlIGlzIHVuc2V0Cisgbm9ub3B0PQorLWV4ZWN1dGVfZGxmaWxlcz0KKyBwcmVzZXJ2ZV9hcmdzPQorIGxvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKKyBvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCisgZXh0cmFjdGVkX2FyY2hpdmVzPQorIGV4dHJhY3RlZF9zZXJpYWw9MAorIAorLW9wdF9kcnlfcnVuPWZhbHNlCistb3B0X2ZpbmlzaD06Cistb3B0X2R1cGxpY2F0ZV9kZXBzPWZhbHNlCistb3B0X3NpbGVudD1mYWxzZQorLW9wdF9kZWJ1Zz06CistCisgIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisgIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisgIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorIGV4ZWNfY21kPQorIAorKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisrIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCisrZnVuY19hcHBlbmQgKCkKKyt7CisrICAgIGV2YWwgIiR7MX09XCQkezF9XCR7Mn0iCisrfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKyMgZnVuY19hcHBlbmRfcXVvdGVkIHZhciB2YWx1ZQorKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisrIyBieSBhIHNwYWNlLgorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQorK3sKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKysgICAgZXZhbCAiJHsxfT1cJCR7MX1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorK30gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorK2Z1bmNfYXJpdGggKCkKKyt7CisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKKyt9ICMgZnVuY19hcml0aCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfbGVuIHN0cmluZworKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKytmdW5jX2xlbiAoKQorK3sKKysgICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkezF9IiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCisrfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19sbzJvIG9iamVjdAorK2Z1bmNfbG8ybyAoKQorK3sKKysgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorK30gIyBmdW5jX2xvMm8gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKytmdW5jX3hmb3JtICgpCisreworKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKyt9ICMgZnVuY194Zm9ybSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKyAjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisgIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK0BAIC04NTAsMTMwICs5NzksMjA0IEBAIGZ1bmNfZW5hYmxlX3RhZyAoKQorICAgZXNhYworIH0KKyAKKy0jIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorLSMgdGhlIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGBsaWJ0b29sIC0tdmVyc2lvbicgaGFwcGVuIHF1aWNrbHkuCisrIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKysjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisrIyByZWxlYXNlIG9mIGxpYnRvb2wuCisrZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCisgeworKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisrICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCisrJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorK19MVF9FT0YKKysgICAgICBlbHNlCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCisrJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKytfTFRfRU9GCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisrJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCisrJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCisrX0xUX0VPRgorKyAgICBmaQorIAorLSAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CistICBjYXNlICQxIGluCistICBjbGVhbnxjbGVhfGNsZXxjbCkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBsaW5rfGxpbnxsaXxsKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgZXNhYworKyAgICBleGl0ICRFWElUX01JU01BVENICisrICBmaQorK30KKysKKysKKysjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKytjYXNlICQxIGluCisrY2xlYW58Y2xlYXxjbGV8Y2wpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2NvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2luc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrbGlua3xsaW58bGl8bCkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKyt1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2VzYWMKKyAKKy0gICMgUGFyc2Ugbm9uLW1vZGUgc3BlY2lmaWMgYXJndW1lbnRzOgorLSAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworKworKworKyMgT3B0aW9uIGRlZmF1bHRzOgorK29wdF9kZWJ1Zz06Cisrb3B0X2RyeV9ydW49ZmFsc2UKKytvcHRfY29uZmlnPWZhbHNlCisrb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCisrb3B0X2ZlYXR1cmVzPWZhbHNlCisrb3B0X2ZpbmlzaD1mYWxzZQorK29wdF9oZWxwPWZhbHNlCisrb3B0X2hlbHBfYWxsPWZhbHNlCisrb3B0X3NpbGVudD06Cisrb3B0X3ZlcmJvc2U9OgorK29wdF9zaWxlbnQ9ZmFsc2UKKytvcHRfdmVyYm9zZT1mYWxzZQorKworKworKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQorKyMgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYC0tdmVyc2lvbicgaGFwcGVuIGFzIHF1aWNrbHkgYXMgd2UgY2FuLgorK3sKKysgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKKysgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgIG9wdD0iJDEiCisgICAgIHNoaWZ0CistCisgICAgIGNhc2UgJG9wdCBpbgorLSAgICAgIC0tY29uZmlnKQkJZnVuY19jb25maWcJCQkJCTs7CistCistICAgICAgLS1kZWJ1ZykJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisrICAgICAgLS1kZWJ1Z3wteCkJb3B0X2RlYnVnPSdzZXQgLXgnCisgCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorLQkJCW9wdF9kZWJ1Zz0nc2V0IC14JworIAkJCSRvcHRfZGVidWcKKyAJCQk7OworLQorLSAgICAgIC1kbG9wZW4pCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQlleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJDEiCistCQkJc2hpZnQKKysgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisrCQkJb3B0X2RyeV9ydW49OgorIAkJCTs7CistCistICAgICAgLS1kcnktcnVuIHwgLW4pCW9wdF9kcnlfcnVuPToJCQkJCTs7CistICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKy0gICAgICAtLWZpbmlzaCkJCW1vZGU9ImZpbmlzaCIJCQkJCTs7CistICAgICAgLS1uby1maW5pc2gpCW9wdF9maW5pc2g9ZmFsc2UJCQkJOzsKKy0KKy0gICAgICAtLW1vZGUpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQljYXNlICQxIGluCistCQkJICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorLQkJCSAgY2xlYW4pCTs7CistCQkJICBjb21waWxlKQk7OworLQkJCSAgZXhlY3V0ZSkJOzsKKy0JCQkgIGZpbmlzaCkJOzsKKy0JCQkgIGluc3RhbGwpCTs7CistCQkJICBsaW5rKQkJOzsKKy0JCQkgIHJlbGluaykJOzsKKy0JCQkgIHVuaW5zdGFsbCkJOzsKKy0KKy0JCQkgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorLQkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKy0JCQkgICAgIGV4aXRfY21kPWV4aXQKKy0JCQkgICAgIGJyZWFrCistCQkJICAgICA7OworLQkJICAgICAgICBlc2FjCistCistCQkJbW9kZT0iJDEiCisrICAgICAgLS1jb25maWcpCisrCQkJb3B0X2NvbmZpZz06CisrZnVuY19jb25maWcKKysJCQk7OworKyAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisrCQkJb3B0YXJnPSIkMSIKKysJCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KKyt9JG9wdGFyZyIKKyAJCQlzaGlmdAorIAkJCTs7CistCisgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKy0JCQlvcHRfZHVwbGljYXRlX2RlcHM9OgkJCQk7OworLQorLSAgICAgIC0tcXVpZXR8LS1zaWxlbnQpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCistCQkJb3B0X3NpbGVudD06CistCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKKysJCQlvcHRfcHJlc2VydmVfZHVwX2RlcHM9OgorIAkJCTs7CistCistICAgICAgLS1uby1xdWlldHwtLW5vLXNpbGVudCkKKy0JCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorLQkJCW9wdF9zaWxlbnQ9ZmFsc2UKKysgICAgICAtLWZlYXR1cmVzKQorKwkJCW9wdF9mZWF0dXJlcz06CisrZnVuY19mZWF0dXJlcworIAkJCTs7CistCistICAgICAgLS12ZXJib3NlfCAtdikJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKysgICAgICAtLWZpbmlzaCkKKysJCQlvcHRfZmluaXNoPToKKytzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisrCQkJOzsKKysgICAgICAtLWhlbHApCisrCQkJb3B0X2hlbHA9OgorKwkJCTs7CisrICAgICAgLS1oZWxwLWFsbCkKKysJCQlvcHRfaGVscF9hbGw9OgorK29wdF9oZWxwPSc6IGhlbHAtYWxsJworKwkJCTs7CisrICAgICAgLS1tb2RlKQorKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworKwkJCW9wdGFyZz0iJDEiCisrCQkJb3B0X21vZGU9IiRvcHRhcmciCisrY2FzZSAkb3B0YXJnIGluCisrICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorKyAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKysKKysgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorKyAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKysgICAgIGV4aXRfY21kPWV4aXQKKysgICAgIGJyZWFrCisrICAgICA7OworK2VzYWMKKysJCQlzaGlmdAorKwkJCTs7CisrICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKKyAJCQlvcHRfc2lsZW50PWZhbHNlCistCQkJb3B0X3ZlcmJvc2U9OgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorIAkJCTs7CistCistICAgICAgLS1uby12ZXJib3NlKQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKyAgICAgIC0tbm8tdmVyYm9zZSkKKyAJCQlvcHRfdmVyYm9zZT1mYWxzZQorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorIAkJCTs7CistCistICAgICAgLS10YWcpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0ICQxIgorLQkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorKyAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisrCQkJb3B0X3NpbGVudD06CisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisrICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorKwkJCTs7CisrICAgICAgLS12ZXJib3NlfC12KQorKwkJCW9wdF92ZXJib3NlPToKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKytvcHRfc2lsZW50PWZhbHNlCisrCQkJOzsKKysgICAgICAtLXRhZykKKysJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF90YWc9IiRvcHRhcmciCisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQgJG9wdGFyZyIKKytmdW5jX2VuYWJsZV90YWcgIiRvcHRhcmciCisgCQkJc2hpZnQKKyAJCQk7OworIAorKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJOzsKKysgICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJOzsKKysgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQk7OworKworICAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CistICAgICAgLWRsb3Blbj0qfC0tbW9kZT0qfC0tdGFnPSopCistCQkJZnVuY19vcHRfc3BsaXQgIiRvcHQiCistCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisrICAgICAgLS0qPSopCisrCQkJZnVuY19zcGxpdF9sb25nX29wdCAiJG9wdCIKKysJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUiICIkZnVuY19zcGxpdF9sb25nX29wdF9hcmciICR7MSsiJEAifQorIAkJCXNoaWZ0CisgCQkJOzsKKyAKKy0gICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCQk7OworLSAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CistICAgICAgLS1oZWxwLWFsbCkJb3B0X2hlbHA9JzogaGVscC1hbGwnCQkJCTs7CistICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJCTs7CistCistICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKy0KKy0gICAgICAqKQkJbm9ub3B0PSIkb3B0IgorLQkJCWJyZWFrCisrICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKysgICAgICAtXD8qfC1oKnwtbip8LXYqKQorKwkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgorKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrCQkJc2hpZnQKKyAJCQk7OworKworKyAgICAgIC0tKQkJYnJlYWsJCQkJCTs7CisrICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKKysgICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKyAgICAgZXNhYworICAgZG9uZQorIAorKyAgIyBWYWxpZGF0ZSBvcHRpb25zOgorKworKyAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKysgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorKyAgICBub25vcHQ9IiRvcHQiCisrICAgIHNoaWZ0CisrICBmaQorKworKyAgIyBwcmVzZXJ2ZSAtLWRlYnVnCisrICB0ZXN0ICIkb3B0X2RlYnVnIiA9IDogfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCisgCisgICBjYXNlICRob3N0IGluCisgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyogfCAqc29sYXJpczIqICkKK0BAIC05ODEsODIgKzExODQsNDQgQEAgZnVuY19lbmFibGVfdGFnICgpCisgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICAgOzsKKyAgICAgKikKKy0gICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfZHVwbGljYXRlX2RlcHMKKysgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKKyAgICAgICA7OworICAgZXNhYworIAorLSAgIyBIYXZpbmcgd2FybmVkIGFib3V0IGFsbCBtaXMtc3BlY2lmaWVkIG9wdGlvbnMsIGJhaWwgb3V0IGlmCistICAjIGFueXRoaW5nIHdhcyB3cm9uZy4KKy0gICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCistfQorKyAgJG9wdF9oZWxwIHx8IHsKKysgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorKyAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyAKKy0jIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorLSMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKy0jIHJlbGVhc2Ugb2YgbGlidG9vbC4KKy1mdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKKy17CistICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKy0gICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKy0gICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKy0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKy0kcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCistX0xUX0VPRgorLSAgICAgIGVsc2UKKy0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKy0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCistJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorLV9MVF9FT0YKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKy0kcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKy0kcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCistJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorLSRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKy1fTFRfRU9GCisrICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorKyAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgICAgZmkKKyAKKy0gICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorLSAgZmkKKy19CistCisrICAgICMgRGFyd2luIHN1Y2tzCisrICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisgCistIyMgLS0tLS0tLS0tLS0gIyMKKy0jIyAgICBNYWluLiAgICAjIworLSMjIC0tLS0tLS0tLS0tICMjCistCistJG9wdF9oZWxwIHx8IHsKKy0gICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKy0gIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorLQorLSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCistICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKy0gIGZpCisrICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisrICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0ICIkb3B0X21vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKysgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisrICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisrICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisrICAgIGZpCisgCistICB0ZXN0IC16ICIkbW9kZSIgJiYgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFLiIKKysgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorKyAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgorKyAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKysgIH0KKyAKKyAKKy0gICMgRGFyd2luIHN1Y2tzCistICBldmFsICJzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIiCisrICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkCisrICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorK30KKyAKKyAKKy0gICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCistICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorLSAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCistICAgICRFQ0hPICIkaGVscCIgMT4mMgorLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKy0gIGZpCisgCistICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCistICBnZW5lcmljX2hlbHA9IiRoZWxwIgorLSAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKy19CisgCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyAgICBNYWluLiAgICAjIworKyMjIC0tLS0tLS0tLS0tICMjCisgCisgIyBmdW5jX2xhbGliX3AgZmlsZQorICMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KK0BAIC0xMTIxLDEyICsxMjg2LDkgQEAgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCisgIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KKyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCisgeworLSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iIgorLSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIjsgdGhlbgorLQlmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCistCWZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQlmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCistICAgIGZpCisrICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKysgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKyB9CisgCisgIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKK0BAIC0xMTQ5LDcgKzEzMTEsNyBAQCBmdW5jX2V4ZWN1dGVfY21kcyAoKQorICAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgIGZvciBjbWQgaW4gJDE7IGRvCisgICAgICAgSUZTPSRzYXZlX2lmcworLSAgICAgIGV2YWwgImNtZD1cIiRjbWRcIiIKKysgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgICBkb25lCisgICAgIElGUz0kc2F2ZV9pZnMKK0BAIC0xMTcyLDYgKzEzMzQsMzcgQEAgZnVuY19zb3VyY2UgKCkKKyB9CisgCisgCisrIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICisrIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKysjIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorK2Z1bmNfcmVzb2x2ZV9zeXNyb290ICgpCisreworKyAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCisrICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KKysgID0qKQorKyAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisrICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgOzsKKysgIGVzYWMKKyt9CisrCisrIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICisrIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKKysjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCisrZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKKyt7CisrICBjYXNlICIkbHRfc3lzcm9vdDokMSIgaW4KKysgID8qOiIkbHRfc3lzcm9vdCIqKQorKyAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKKysgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysgICAgOzsKKysgICopCisrICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCisrICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorKyAgICA7OworKyAgZXNhYworK30KKysKKyAjIGZ1bmNfaW5mZXJfdGFnIGFyZworICMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorICMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCitAQCAtMTE4NCw4ICsxMzc3LDcgQEAgZnVuY19pbmZlcl90YWcgKCkKKyAgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgICBDQ19xdW90ZWQ9CisgICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCistICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLQlDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwlmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorICAgICAgIGRvbmUKKyAgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCitAQCAtMTIwNCw4ICsxMzk2LDcgQEAgZnVuY19pbmZlcl90YWcgKCkKKyAJICAgIENDX3F1b3RlZD0KKyAJICAgIGZvciBhcmcgaW4gJENDOyBkbworIAkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCistCSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgCSAgICBkb25lCisgCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKK0BAIC0xMjc0LDYgKzE0NjUsNDg2IEBAIEVPRgorICAgICB9CisgfQorIAorKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKKysjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAorKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorKyMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0KKysjIGluICRidWlsZCdzICRQQVRILgorKyMKKysjIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAorKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorK2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorKyAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorKyAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKysgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKysgICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisrICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wfSI7IHRoZW4KKysgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorKyAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorKyAgICBlbHNlCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisrICAgIGZpCisrICBmaQorK30KKysjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiBBUkcKKysjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCisrIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisrIyBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtIGluICRidWlsZCdzCisrIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KKysjCisrIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCisrIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKysjIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KKytmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworKyAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBvbGRJRlM9JElGUworKyAgICBJRlM9OgorKyAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbworKyAgICAgIElGUz0kb2xkSUZTCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKysgICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiIDsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorKyAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgICBJRlM9JG9sZElGUworKyAgZmkKKyt9CisrIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKysKKysKKysjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisrIyBXcmFwcGVyIGFyb3VuZCBjYWxsaW5nIHRoZSBjeWdwYXRoIHByb2dyYW0gdmlhIExUX0NZR1BBVEguIFRoaXMgaXMgdXNlZCB3aGVuCisrIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKKysjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorKyMgKDIpLCByZXR1cm5zIHRoZSBDeWd3aW4gZmlsZSBuYW1lIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQKKysjIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKKysjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisrIyBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0IGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4KKysjIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KKysjCisrIyBBUkdTIGFyZSBwYXNzZWQgdG8gY3lncGF0aCwgd2l0aCB0aGUgbGFzdCBvbmUgYmVpbmcgdGhlIGZpbGUgbmFtZSBvciBwYXRoIHRvCisrIyBiZSBjb252ZXJ0ZWQuCisrIworKyMgU3BlY2lmeSB0aGUgYWJzb2x1dGUgKm5peCAob3IgdzMyKSBuYW1lIHRvIGN5Z3BhdGggaW4gdGhlIExUX0NZR1BBVEgKKysjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgorK2Z1bmNfY3lncGF0aCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KKysgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKKysgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisrICAgICAgIyBvbiBmYWlsdXJlLCBlbnN1cmUgcmVzdWx0IGlzIGVtcHR5CisrICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKysgICAgZmkKKysgIGVsc2UKKysgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKysgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6IFxgJExUX0NZR1BBVEgnIgorKyAgZmkKKyt9CisrI2VuZDogZnVuY19jeWdwYXRoCisrCisrCisrIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgorKyMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorKyAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisrfQorKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKysjIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKysjIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KKytmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSIgOyB0aGVuCisrICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKKysgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKysgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisrICAgICMgRmFsbGJhY2s6CisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjaworKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKKysjIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKysjIGZvcm1hdCBpbiBUT19QQVRILiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlLCByZXNldHRpbmcKKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCisrZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCisrICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorKyAgICBmdW5jX2Vycm9yICIgIFxgJDMnIgorKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKysgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisrICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KKysgICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgorKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKKysgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAorKyAgICBlbHNlCisrICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyIKKysgICAgZmkKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgRlJPTlRQQVQgQkFDS1BBVCBSRVBMIE9SSUcKKysjIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCisrIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCisrZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgY2FzZSAkNCBpbgorKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgOzsKKysgIGVzYWMKKysgIGNhc2UgJDQgaW4KKysgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKysgICAgOzsKKysgIGVzYWMKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCisrCisrCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfZmlsZV9jbWQgQVJHJworKyMKKysjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisrIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKysKKysKKysjIGZ1bmNfdG9faG9zdF9maWxlIEFSRworKyMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfdG9faG9zdF9maWxlICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgorK30KKysjIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQorKworKworKyMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKKysjIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KKysjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisrIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KKytmdW5jX3RvX3Rvb2xfZmlsZSAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGNhc2UgLCQyLCBpbgorKyAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKKysgICAgICA7OworKyAgICAqKQorKyAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAorKyAgICAgIDs7CisrICBlc2FjCisrfQorKyMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRworKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25vb3AgKCkKKyt7CisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKysgICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudAorKyMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKKysjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKysjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysKKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIGludm9rZWQgdmlhIGAkdG9faG9zdF9wYXRoX2NtZCBBUkcnCisrIworKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKysjIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKysjCisrIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorKyMgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0CisrIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCisrIworKyMgQWxsIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIG5hbWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbjoKKysjICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKKysjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKysjIHdoZXJlLCBmb3IgYW55IGdpdmVuICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbiB0aGUgJ1hfdG9fWScgdmFsdWUgaXMgdGhlCisrIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKKysjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisrIyB3aWxsIGJyZWFrLgorKworKworKyMgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKysjIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQorKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KKyt0b19ob3N0X3BhdGhfY21kPQorK2Z1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisrICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKKysgICAgdG9faG9zdF9wYXRoX2NtZD0iZnVuY19jb252ZXJ0X3BhdGhfJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9IgorKyAgZmkKKyt9CisrCisrCisrIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKKysjIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisrIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrZnVuY190b19ob3N0X3BhdGggKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorKyAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgorK30KKysjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKysjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCisreworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisrIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUworKyAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOworKyAgICAjIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKKysjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKKysjIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKysgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorKyAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCisrCisrCisgIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KKyBmdW5jX21vZGVfY29tcGlsZSAoKQorIHsKK0BAIC0xMzE0LDEyICsxOTg1LDEyIEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgOzsKKyAKKyAJLXBpZSB8IC1mcGllIHwgLWZQSUUpCistICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKysgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKKyAJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKy0JICBsYXRlcj0iJGxhdGVyICRhcmciCisrCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKK0BAIC0xMzQwLDE1ICsyMDExLDE0IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisgCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKyAJICAgIElGUz0iJHNhdmVfaWZzIgorLQkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgorIAkgIGRvbmUKKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorIAkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAorIAkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorLQkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKysJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCitAQCAtMTM2NCw4ICsyMDM0LDcgQEAgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyAgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisgCisgICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKy0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKy0gICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgorICAgICBkb25lICMgZm9yIGFyZworIAorICAgICBjYXNlICRhcmdfbW9kZSBpbgorQEAgLTE0OTYsMTcgKzIxNjUsMTYgQEAgY29tcGlsZXIuIgorIAkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgIGZpCistICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmoiCisrICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgorICAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgICBmaQorIAorICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CistICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRsb2NrZmlsZSIKKysgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRsb2NrZmlsZSIKKyAgICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCistICAgICAgZXZhbCAic3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIiCistICAgIGZpCisrICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyAKK0BAIC0xNTI2LDcgKzIxOTQsNyBAQCBjb21waWxlci4iCisgCisgICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisgCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkbG9iaiIKKysJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgorICAgICAgIGZpCisgCisgICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorQEAgLTE1NzMsMTEgKzIyNDEsMTEgQEAgY29tcGlsZXIuIgorIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICAgZmkKKyAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKKyAgICAgICBmaQorIAorICAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorLSAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKysgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisgCitAQCAtMTYyMiwxMyArMjI5MCwxMyBAQCBjb21waWxlci4iCisgfQorIAorICRvcHRfaGVscCB8fCB7CistICB0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorKyAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9CisgfQorIAorIGZ1bmNfbW9kZV9oZWxwICgpCisgeworICAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKy0gICAgY2FzZSAkbW9kZSBpbgorKyAgICBjYXNlICRvcHRfbW9kZSBpbgorICAgICAgICIiKQorICAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCisgICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCitAQCAtMTY1OSw4ICsyMzI3LDggQEAgVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisgCisgICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworLSAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKKy0gIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZGluZyBub24tUElDIG9iamVjdHMgb25seQorKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKysgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorQEAgLTE4MDQsNyArMjQ3Miw3IEBAIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgIDs7CisgCisgICAgICAgKikKKy0gICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgICAgICAgICA7OworICAgICBlc2FjCisgCitAQCAtMTgxOSwxMyArMjQ4NywxMyBAQCBpZiAkb3B0X2hlbHA7IHRoZW4KKyAgIGVsc2UKKyAgICAgeworICAgICAgIGZ1bmNfaGVscCBub2V4aXQKKy0gICAgICBmb3IgbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisrICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKyAJZnVuY19tb2RlX2hlbHAKKyAgICAgICBkb25lCisgICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgIHsKKyAgICAgICBmdW5jX2hlbHAgbm9leGl0CistICAgICAgZm9yIG1vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisgCWVjaG8KKyAJZnVuY19tb2RlX2hlbHAKKyAgICAgICBkb25lCitAQCAtMTg1NCwxMyArMjUyMiwxNiBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisgCisgICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCistICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCisrICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbworICAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisgCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKyAKKyAgICAgICBkaXI9CisgICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgICoubGEpCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKysJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrCisgCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisgCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisgCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKK0BAIC0xODgyLDcgKzI1NTMsNyBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorIAlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIAorIAlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKy0JICBkaXI9IiRkaXIvJG9iamRpciIKKysJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorIAllbHNlCisgCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorQEAgLTE5MDcsMTAgKzI1NzgsMTAgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisgCisgICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKy0gICAgICBpZiBldmFsIHRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCI7IHRoZW4KKy0JZXZhbCAkc2hsaWJwYXRoX3Zhcj1cJGRpcgorKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisrCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKKyAgICAgICBlbHNlCistCWV2YWwgJHNobGlicGF0aF92YXI9XCRkaXI6XCQkc2hsaWJwYXRoX3ZhcgorKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKyAgICAgICBmaQorICAgICBkb25lCisgCitAQCAtMTkzOSw4ICsyNjEwLDcgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAJOzsKKyAgICAgICBlc2FjCisgICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKy0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmlsZSIKKy0gICAgICBhcmdzPSIkYXJncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgorICAgICBkb25lCisgCisgICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCitAQCAtMTk3MiwyMiArMjY0Miw1OSBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICBmaQorIH0KKyAKKy10ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorK3Rlc3QgIiRvcHRfbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorIAorIAorICMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KKyBmdW5jX21vZGVfZmluaXNoICgpCisgeworICAgICAkb3B0X2RlYnVnCistICAgIGxpYmRpcnM9IiRub25vcHQiCisrICAgIGxpYnM9CisrICAgIGxpYmRpcnM9CisgICAgIGFkbWluY21kcz0KKyAKKy0gICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKy0gICAgICBmb3IgZGlyCistICAgICAgZG8KKy0JbGliZGlycz0iJGxpYmRpcnMgJGRpciIKKy0gICAgICBkb25lCisrICAgIGZvciBvcHQgaW4gIiRub25vcHQiICR7MSsiJEAifQorKyAgICBkbworKyAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCisrCWZ1bmNfYXBwZW5kIGxpYmRpcnMgIiAkb3B0IgorIAorKyAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KKysJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KKysJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKKysJZWxzZQorKwkgIGZ1bmNfd2FybmluZyAiXGAkb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisrCWZpCisrCisrICAgICAgZWxzZQorKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdCciCisrICAgICAgZmkKKysgICAgZG9uZQorKworKyAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KKysgICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KKysgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisrICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c3Jvb3RfY21kPQorKyAgICAgIGZpCisrCisrICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisrICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisrICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCBcYD0nIHByZWZpeGVzIGZyb20gJGxpYiIKKysgICAgICAgIGRvbmUKKysgICAgICBlbHNlCisrICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKysJICBzZWQgLWUgIiR7c3lzcm9vdF9jbWR9IHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCisrCSAgICA+ICR0bXBkaXIvdG1wLWxhCisrCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorKwlkb25lCisrICAgICAgICAke1JNfXIgIiR0bXBkaXIiCisrICAgICAgZmkKKysgICAgZmkKKysKKysgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworIAlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisgCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KK0BAIC0xOTk3LDcgKzI3MDQsNyBAQCBmdW5jX21vZGVfZmluaXNoICgpCisgCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKyAJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisgCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKy0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcworKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKKyAgICAgICAgJGNtZHMiCisgCWZpCisgICAgICAgZG9uZQorQEAgLTIwMDYsNTMgKzI3MTMsNTUgQEAgZnVuY19tb2RlX2ZpbmlzaCAoKQorICAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisgCistICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCistICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKy0gICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKy0gICAgICAkRUNITyAiICAgJGxpYmRpciIKKy0gICAgZG9uZQorLSAgICBlY2hvCistICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorLSAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKy0gICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKy0gICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorLSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKy0gICAgICBlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorLSAgICAgIGVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorLSAgICAgIGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorLSAgICAgIGVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorLSAgICAgIGxpYmRpcj1MSUJESVIKKy0gICAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKysgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorKyAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKysgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworKwkkRUNITyAiICAgJGxpYmRpciIKKysgICAgICBkb25lCisrICAgICAgZWNobworKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorKyAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorKyAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisrICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorKwllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisrCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorKwllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCWxpYmRpcj1MSUJESVIKKysJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorIAorLSAgICAgICRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCistICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorLSAgICAgIGVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorLSAgICBmaQorLSAgICBlY2hvCisrCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorKwkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKysgICAgICBmaQorKyAgICAgIGVjaG8KKyAKKy0gICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCistICAgIGNhc2UgJGhvc3QgaW4KKy0gICAgICBzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorLSAgICAgICAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKy0JZWNobyAicGFnZXMuIgorLQk7OworLSAgICAgICopCistICAgICAgICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKysgICAgICBjYXNlICRob3N0IGluCisrCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisrCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKysJICBlY2hvICJwYWdlcy4iCisrCSAgOzsKKysJKikKKysJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKysJICA7OworKyAgICAgIGVzYWMKKysgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorKyAgICBmaQorICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyB9CisgCistdGVzdCAiJG1vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorIAorIAorICMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitAQCAtMjA3Nyw3ICsyNzg2LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgICBjYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCisgICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CitAQCAtMjA5Nyw3ICsyODA2LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgZG8KKyAgICAgICBhcmcyPQorICAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorLQlmaWxlcz0iJGZpbGVzICRkZXN0IgorKwlmdW5jX2FwcGVuZCBmaWxlcyAiICRkZXN0IgorIAlkZXN0PSRhcmcKKyAJY29udGludWUKKyAgICAgICBmaQorQEAgLTIxMzUsMTEgKzI4NDQsMTEgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAKKyAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistICAgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisgCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgorICAgICAgIGZpCistICAgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgIGRvbmUKKyAKKyAgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorQEAgLTIxNTEsNyArMjg2MCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiICYmICRub19tb2RlOyB0aGVuCisgICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorLQlpbnN0YWxsX3NoYXJlZF9wcm9nPSIkaW5zdGFsbF9zaGFyZWRfcHJvZyAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgZmkKKyAgICAgZmkKKyAKK0BAIC0yMjA5LDEwICsyOTE4LDEzIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgICouJGxpYmV4dCkKKyAJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKy0Jc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGZpbGUiCisrCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKKyAJOzsKKyAKKyAgICAgICAqLmxhKQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisrCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorKworIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorIAkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorQEAgLTIyMjYsMjMgKzI5MzgsMzAgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKyAJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAllbHNlCisgCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorIAkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZmkKKyAKKyAJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisgCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistCWRpcj0iJGRpciRvYmpkaXIiCisrCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKyAJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKyAgICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGxpYmRpciIKKysgICAgICBkZXN0bGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0ZGlyIgorKyAgICAgIHNfZGVzdGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisgCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKy0JICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKysJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJHNfZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkZGVzdGxpYmRpclwkJSUiYAorIAorIAkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKyAJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CitAQCAtMjMxNSw3ICszMDM0LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKyAKKyAJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorLQl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKyAJOzsKKyAKKyAgICAgICAqLmxvKQorQEAgLTI1MDMsNyArMzIyMiw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyIgJiYgJG9wdF9maW5pc2g7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworQEAgLTI1MTIsNyArMzIzMSw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGZpCisgfQorIAorLXRlc3QgIiRtb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisgCisgCisgIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKK0BAIC0yNTU5LDYgKzMyNzgsMTggQEAgZXh0ZXJuIFwiQ1wiIHsKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyAjZW5kaWYKKyAKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorICIKKyAKK0BAIC0yNTcwLDIxICszMzAxLDIyIEBAIGV4dGVybiBcIkNcIiB7CisgCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorIAkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKy0JICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorLQkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkcHJvZ2ZpbGUgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKysJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisgCSAgZG9uZQorIAorIAkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorLQkgICAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisrCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworIAkgICAgfQorIAkgIGZpCisgCisgCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICAgJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUCistCSAgICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKysJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworIAkgICAgfQorIAkgIGZpCisgCitAQCAtMjU5MywyMyArMzMyNSwyMyBAQCBleHRlcm4gXCJDXCIgeworIAkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKyAJICAgICRvcHRfZHJ5X3J1biB8fCB7CisgCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKy0JICAgICAgJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiCisrCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworIAkgICAgICBjYXNlICRob3N0IGluCisgCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLSAgICAgICAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorLSAgICAgICAgICAgICAgICBjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKysgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKysgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworIAkgICAgICAgIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgICAke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLycgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCistCSAgICAgICRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQKKy0JICAgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKysJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKysJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorIAkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLQkgICAgICAgICAgZWNobyBFWFBPUlRTID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKy0JICAgICAgICAgIGNhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKysJICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAJICAgICAgICAgIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIH0KK0BAIC0yNjIwLDEwICszMzUyLDUyIEBAIGV4dGVybiBcIkNcIiB7CisgCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorIAkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisgCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkgICRvcHRfZHJ5X3J1biB8fCB7CistCSAgICAkRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiCistCSAgICBldmFsICIkTk0gJGRscHJlZmlsZSAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCistCSAgfQorKyAgICAgICAgICBjYXNlICRob3N0IGluCisrCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKysJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCisrCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisrCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKKysJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorKwkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCisrCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworKwkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAorKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKKysJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgIGVsc2UKKysJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorKwkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCisrCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorKwkgICAgICAgICAgZmkKKysJICAgICAgICBmaQorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCisrCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgICBmaQorKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKysJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKysJICAgICAgICB9CisrCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgICAgIH0KKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqKQorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgICAgfQorKwkgICAgOzsKKysgICAgICAgICAgZXNhYworIAlkb25lCisgCisgCSRvcHRfZHJ5X3J1biB8fCB7CitAQCAtMjY2MSwyNiArMzQzNSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICphZGRyZXNzOworIH0gbHRfZGxzeW1saXN0OworLSIKKy0JICBjYXNlICRob3N0IGluCistCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCistCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UKKy0gICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorLSAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICpvc2Y1KikKKy0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCistLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YSAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICopCistCSAgICBsdF9kbHN5bV9jb25zdD1jb25zdCA7OworLQkgIGVzYWMKKy0KKy0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLWV4dGVybiAkbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CisrZXh0ZXJuIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKKy0kbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CisrTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CisgbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KKyB7XAorICAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCitAQCAtMjczNiw3ICszNDkzLDcgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisgCSAgY2FzZSAkYXJnIGluCisgCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CistCSAgKikgc3ltdGFiX2NmbGFncz0iJHN5bXRhYl9jZmxhZ3MgJGFyZyIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAKK0BAIC0yNzk2LDkgKzM1NTMsMTEgQEAgZnVuY193aW4zMl9saWJpZCAoKQorICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgIDs7CisgICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCistICAgIGlmICRPQkpEVU1QIC1mICIkMSIgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKy0gICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGUtaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCistICAgICAgd2luMzJfbm1yZXM9YCROTSAtZiBwb3NpeCAtQSAiJDEiIHwKKysgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisrICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKysgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKyAJJFNFRCAtbiAtZSAnCisgCSAgICAxLDEwMHsKKyAJCS8gSSAveworQEAgLTI4MjcsNiArMzU4NiwxMzEgQEAgZnVuY193aW4zMl9saWJpZCAoKQorICAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorIH0KKyAKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiBBUkcKKysjCisrIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisrIyBpbXBvcnQgbGlicmFyeSBBUkcuCisrIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAorK30KKysKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcworKyMKKysjIFRoZSBpcyB0aGUgY29yZSBvZiBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGEKKysjIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCisrIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KKysjCisrIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKKysjIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCisrIworKyMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCisrIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCisrZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisrICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKKysgICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCisrICAgICAgcy8uKi89PT09TUFSSz09PT0vCisrICAgICAgcAorKyAgICAgIGQKKysgICAgfQorKyAgICAjIFRoZXNlIGxpbmVzIGNhbiBzb21ldGltZXMgYmUgbG9uZ2VyIHRoYW4gNDMgY2hhcmFjdGVycywgYnV0CisrICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCisrICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorKyAgICAvXkluIGFyY2hpdmUgW146XSo6L2QKKysgICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKKysgICAgL149PT09TUFSSz09PT0vcAorKyAgICAjIFJlbW92ZSBhbGwgbGluZXMgd2l0aCBsZXNzIHRoYW4gNDMgY2hhcmFjdGVycworKyAgICAvXi5cezQzXH0vIWQKKysgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKysgICAgcy9eLlx7NDNcfS8vJyB8CisrICAgICRTRUQgLW4gJworKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKysgICAgICAvXj09PT1NQVJLPT09PS8gYiBwYXJhCisrICAgICAgSAorKyAgICAgICQgYiBwYXJhCisrICAgICAgYgorKyAgICAgIDpwYXJhCisrICAgICAgeAorKyAgICAgIHMvXG4vL2cKKysgICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCisrICAgICAgcy9ePT09PU1BUks9PT09Ly8KKysgICAgICAjIFJlbW92ZSB0cmFpbGluZyBkb3RzIGFuZCB3aGl0ZXNwYWNlCisrICAgICAgcy9bXC4gXHRdKiQvLworKyAgICAgICMgUHJpbnQKKysgICAgICAvLi9wJyB8CisrICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAorKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorKyAgICAjIGFyY2hpdmUgd2hpY2ggcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCisrICAgICMgYWxsIHRob3NlIHdoaWNoIGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKKysgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCisrICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCisrICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5CisrICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKKysgICAgIyBhICcuJy4KKysgICAgIworKyAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgorKyAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJworK30KKysKKysjIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCisrIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisrIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKysjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCisrZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAorKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCisrIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisrIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKysjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCisrZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisrICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCisrfQorKworKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRworKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKysjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorKyMKKysjIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCisrIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCisrIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIgOyB0aGVuCisrICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKKysgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKKysgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgOyB0aGVuCisrICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CisrICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisrICBlbHNlCisrICAgICMgdW5rbm93bgorKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0iIgorKyAgZmkKKyt9CisgCisgCisgIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCitAQCAtMjkxNyw3ICszODAxLDcgQEAgZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCisgCSAgICBkYXJ3aW5fZmlsZT0KKyAJICAgIGRhcndpbl9maWxlcz0KKyAJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworLQkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8ICROTDJTUGAKKysJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorIAkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworIAkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKyAJICAgICRSTSAtcmYgdW5mYXQtJCQKK0BAIC0yOTMyLDcgKzM4MTYsNyBAQCBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKKyAgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorIAk7OworICAgICAgIGVzYWMKKy0gICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJE5MMlNQYAorKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgICBkb25lCisgCisgICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorQEAgLTMwMTQsNyArMzg5OCwxMTAgQEAgZnVuY19mYWxsYmFja19lY2hvICgpCisgX0xURUNIT19FT0YnCisgfQorICAgICBFQ0hPPVwiJHFFQ0hPXCIKKy0gIGZpXAorKyAgZmkKKysKKysjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bworKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKysjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKysjIHRoaXMgcGF0dGVybikuCisrIworKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCisrbHRfb3B0aW9uX2RlYnVnPQorK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQorK3sKKysgIGx0X3NjcmlwdF9hcmcwPVwkMAorKyAgc2hpZnQKKysgIGZvciBsdF9vcHQKKysgIGRvCisrICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisrICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisrICAgIC0tbHQtZHVtcC1zY3JpcHQpCisrICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKysgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisrICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisrICAgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtLWx0LSopCisrICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorKyAgICAgICAgZXhpdCAxCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZG9uZQorKworKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisrICBmaQorK30KKysKKysjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKysjIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKKytmdW5jX2x0X2R1bXBfYXJncyAoKQorK3sKKysgIGx0X2R1bXBfYXJnc19OPTE7CisrICBmb3IgbHRfYXJnCisrICBkbworKyAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisrICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisrICBkb25lCisrfQorKworKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKytmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCisreworKyIKKysgIGNhc2UgJGhvc3QgaW4KKysgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKworKyAgKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKyAgZXNhYworKyAgJEVDSE8gIlwKKysgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisrICAgICAgZXhpdCAxCisrfQorKworKyMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisrIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKytmdW5jX2V4ZWNfcHJvZ3JhbSAoKQorK3sKKysgIGZvciBsdF93cl9hcmcKKysgIGRvCisrICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKysgICAgLS1sdC0qKSA7OworKyAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworKyAgICBlc2FjCisrICAgIHNoaWZ0CisrICBkb25lCisrICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KKyt9CisrCisrICAjIFBhcnNlIG9wdGlvbnMKKysgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKyAKKyAgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorQEAgLTMwNzgsNyArNDA2NSw3IEBAIF9MVEVDSE9fRU9GJworIAorICAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCistICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcIlwkcmVsaW5rX2NvbW1hbmRcIiAyPiYxXGA7IHRoZW4gOgorKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgIGVsc2UKKyAJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorIAkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKK0BAIC0zMTAyLDYgKzQwODksMTggQEAgX0xURUNIT19FT0YnCisgCisgICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgorIAorKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorKwkjCisrCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZworKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorKwkjIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuCisrCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorKwkgICRFQ0hPICJcCisrICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisrICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisrIgorKwlmaQorKworIAkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKyAJaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorIAkgICRFQ0hPICJcCitAQCAtMzExNiwzNSArNDExNSwxMCBAQCBfTFRFQ0hPX0VPRicKKyAiCisgCWZpCisgCistCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCistCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorLQkgICRFQ0hPICJcCistICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICistICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICistIgorLQlmaQorLQorIAkkRUNITyAiXAorICAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKy0iCistCWNhc2UgJGhvc3QgaW4KKy0JIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCistCSotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCistCSAgJEVDSE8gIlwKKy0gICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKy0iCistCSAgOzsKKy0KKy0JKikKKy0JICAkRUNITyAiXAorLSAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorLSIKKy0JICA7OworLQllc2FjCistCSRFQ0hPICJcCistICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorLSAgICAgIGV4aXQgMQorKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICAgZmkKKyAgIGVsc2UKKyAgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorQEAgLTMxNTgsMTY2ICs0MTMyLDYgQEAgZmlcCisgfQorIAorIAorLSMgZnVuY190b19ob3N0X3BhdGggYXJnCistIworLSMgQ29udmVydCBwYXRocyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKy0jIEludGVuZGVkIGZvciB1c2Ugd2l0aCAibmF0aXZlIiBtaW5ndyAod2hlcmUgbGlidG9vbCBpdHNlbGYKKy0jIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIG1zeXMgc2hlbGwpLCBvciBpbiB0aGUgZm9sbG93aW5nIGNyb3NzLQorLSMgYnVpbGQgZW52aXJvbm1lbnRzOgorLSMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CistIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKy0jICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworLSMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CistIyB3aGVyZSB3aW5lIGlzIGVxdWlwcGVkIHdpdGggdGhlIGB3aW5lcGF0aCcgZXhlY3V0YWJsZS4KKy0jIEluIHRoZSBuYXRpdmUgbWluZ3cgY2FzZSwgdGhlIChtc3lzKSBzaGVsbCBhdXRvbWF0aWNhbGx5CistIyBjb252ZXJ0cyBwYXRocyBmb3IgYW55IG5vbi1tc3lzIGFwcGxpY2F0aW9ucyBpdCBsYXVuY2hlcywKKy0jIGJ1dCB0aGF0IGZhY2lsaXR5IGlzbid0IGF2YWlsYWJsZSBmcm9tIGluc2lkZSB0aGUgY3dyYXBwZXIuCistIyBTaW1pbGFyIGFjY29tbW9kYXRpb25zIGFyZSBuZWNlc3NhcnkgZm9yICRob3N0IG1pbmd3IGFuZAorLSMgJGJ1aWxkIGN5Z3dpbi4gIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vIGhhcm0gZm9yIG90aGVyCistIyAkaG9zdC8kYnVpbGQgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUuCistIworLSMgQVJHIGlzIHRoZSBwYXRoIChvbiAkYnVpbGQpIHRoYXQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0bworLSMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBmb3IgJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCistIyBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorLWZ1bmNfdG9faG9zdF9wYXRoICgpCisteworLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKy0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgKm1pbmd3KiApCistICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCistICAgICAgICBjYXNlICRidWlsZCBpbgorLSAgICAgICAgICAqbWluZ3cqICkgIyBhY3R1YWxseSwgbXN5cworLSAgICAgICAgICAgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKy0gICAgICAgICAgICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqY3lnd2luKiApCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC13ICIkMSIgfAorLQkgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKiApCistICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybworLSAgICAgICAgICAgICMgZXJyb3IgY29kZSwgc28gd2UgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YKKy0gICAgICAgICAgICAjIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBjb21tYW5kIGlzIG5vdAorLSAgICAgICAgICAgICMgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorLSAgICAgICAgICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aAorLSAgICAgICAgICAgICMgZXJyb3IgY29kZSBvZiB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucworLSAgICAgICAgICAgICMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX3RvX2hvc3RfcGF0aF90bXAxfSI7IHRoZW4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8CistICAgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAjIEFsbG93IHdhcm5pbmcgYmVsb3cuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9CistICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCistICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorLSAgICAgICAgICAjIEZhbGxiYWNrOgorLSAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorLSAgICAgICAgZmkKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gIGZpCistfQorLSMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aAorLQorLSMgZnVuY190b19ob3N0X3BhdGhsaXN0IGFyZworLSMKKy0jIENvbnZlcnQgcGF0aGxpc3RzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorLSMgU2VlIGZ1bmNfdG9faG9zdF9wYXRoKCksIGFib3ZlLiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHRoZQorLSMgZm9sbG93aW5nICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMgKGJ1dCBkb2VzIG5vIGhhcm0gZm9yCistIyBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBoZXJlKToKKy0jICAgICRidWlsZCAgICAgICAgICAkaG9zdAorLSMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCistIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKy0jICAgICpuaXggKyB3aW5lICAgICBtaW5ndworLSMKKy0jIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvCistIyAkaG9zdCBmb3JtYXQuIElmIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IKKy0jIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkKKy0jIG9uIG91dHB1dC4KKy0jCistIyBBUkcgaXMgYSBwYXRobGlzdCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKy0jIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gb24gJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCistIyBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdC4KKy1mdW5jX3RvX2hvc3RfcGF0aGxpc3QgKCkKKy17CistICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkMSIKKy0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgKm1pbmd3KiApCistICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCistICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKy0gICAgICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKy0gICAgICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCistCWZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCistICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistICAgICAgICBjYXNlICRidWlsZCBpbgorLSAgICAgICAgICAqbWluZ3cqICkgIyBBY3R1YWxseSwgbXN5cy4KKy0gICAgICAgICAgICAjIEF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQuCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gCistCSAgICAgICggY21kIC8vYyBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiICkgMj4vZGV2L251bGwgfAorLQkgICAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKmN5Z3dpbiogKQorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YGN5Z3BhdGggLXcgLXAgIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgfAorLSAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICogKQorLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhsaXN0cworLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiIKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTPSRJRlMKKy0gICAgICAgICAgICBJRlM9OgorLSAgICAgICAgICAgIGZvciBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEgOyBkbworLSAgICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCistICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiIDsgdGhlbgorLSAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIgorLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorLSAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQgIjskZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorLSAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGRvbmUKKy0gICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOyB0aGVuCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aChzKSBjb3JyZXNwb25kaW5nIHRvIgorLSAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKy0gICAgICAgICAgIyBGYWxsYmFjay4gVGhpcyBtYXkgYnJlYWsgaWYgJDEgY29udGFpbnMgRE9TLXN0eWxlIGRyaXZlCistICAgICAgICAgICMgc3BlY2lmaWNhdGlvbnMuIFRoZSBmaXggaXMgbm90IHRvIGNvbXBsaWNhdGUgdGhlIGV4cHJlc3Npb24KKy0gICAgICAgICAgIyBiZWxvdywgYnV0IGZvciB0aGUgdXNlciB0byBwcm92aWRlIGEgd29ya2luZyB3aW5lIGluc3RhbGxhdGlvbgorLSAgICAgICAgICAjIHdpdGggd2luZXBhdGggc28gdGhhdCBwYXRoIHRyYW5zbGF0aW9uIGluIHRoZSBjcm9zcy10by1taW5ndworLSAgICAgICAgICAjIGNhc2Ugd29ya3MgcHJvcGVybHkuCistICAgICAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zPSJzfDp8O3xnIgorLSAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCistICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zImAKKy0gICAgICAgIGZpCistICAgICAgICAjIE5vdywgYWRkIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMgYmFjaworLSAgICAgICAgY2FzZSAiJDEiIGluCistICAgICAgICAgIDoqICkgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iOyRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IgorLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICBjYXNlICIkMSIgaW4KKy0gICAgICAgICAgKjogKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7IgorLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICA7OworLSAgICBlc2FjCistICBmaQorLX0KKy0jIGVuZDogZnVuY190b19ob3N0X3BhdGhsaXN0CistCisgIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisgIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0CisgIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKK0BAIC0zMzM0LDEwICs0MTQ4LDYgQEAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQorIAorICAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCistCistICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIiRTSEVMTCAkb3V0cHV0IiwKKy0gICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCistICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgorICovCisgRU9GCisgCSAgICBjYXQgPDwiRU9GIgorQEAgLTM0NjIsMjIgKzQyNzIsMTMgQEAgaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisgICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorIH0gd2hpbGUgKDApCisgCistI3VuZGVmIExUV1JBUFBFUl9ERUJVR1BSSU5URgorLSNpZiBkZWZpbmVkIExUX0RFQlVHV1JBUFBFUgorLSMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKSBsdHdyYXBwZXJfZGVidWdwcmludGYgYXJncworLXN0YXRpYyB2b2lkCistbHR3cmFwcGVyX2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKKy17CistICAgIHZhX2xpc3QgYXJnczsKKy0gICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CistICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworLSAgICB2YV9lbmQgKGFyZ3MpOworLX0KKysjaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCisrc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisgI2Vsc2UKKy0jIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykKKytzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyAjZW5kaWYKKyAKKy1jb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKyAKKyB2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKKyBjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworQEAgLTM0ODcsNyArNDI4OCwxMCBAQCBjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworIGludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworIGludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKKyBjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKKy12b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworK3ZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cisrdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Cisrc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworK3N0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Cisgdm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKyBjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOworIHZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitAQCAtMzQ5NywxNCArNDMwMSwxNCBAQCB2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKKyBFT0YKKyAKKyAJICAgIGNhdCA8PEVPRgorLWNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Cisrdm9sYXRpbGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKKyBjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CisgRU9GCisgCisgCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiR0ZW1wX3JwYXRoIgorKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgorIAkgICAgICBjYXQgPDxFT0YKKy1jb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CisrY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CisgRU9GCisgCSAgICBlbHNlCisgCSAgICAgIGNhdCA8PCJFT0YiCitAQCAtMzUxMywxMCArNDMxNywxMCBAQCBFT0YKKyAJICAgIGZpCisgCisgCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJGRsbHNlYXJjaHBhdGg6IgorKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKyAJICAgICAgY2F0IDw8RU9GCisgY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7CistY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworIEVPRgorIAkgICAgZWxzZQorIAkgICAgICBjYXQgPDwiRU9GIgorQEAgLTM1MzksMTIgKzQzNDMsMTAgQEAgRU9GCisgCSAgICBjYXQgPDwiRU9GIgorIAorICNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCistI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggIDUKKyAKKy1zdGF0aWMgY29uc3Qgc2l6ZV90IG9wdF9wcmVmaXhfbGVuICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CistCisgc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCitAQCAtMzU2MSwxMCArNDM2MywxMyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgaW50IGk7CisgCisgICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgYXJndlswXSAgICAgIDogJXNcbiIsIGFyZ3ZbMF0pKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgcHJvZ3JhbV9uYW1lIDogJXNcbiIsIHByb2dyYW1fbmFtZSkpOworKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworIAorLSAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQgKi8KKysgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CisrICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKKysgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKysgICAqLworKyAgbmV3YXJnYz0wOworICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICAgeworICAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorQEAgLTM1ODEsMjEgKzQzODYsNTQgQEAgRU9GCisgCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CisgCSAgcmV0dXJuIDA7CisgCX0KKysgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCisrCXsKKysgICAgICAgICAgbHRfZGVidWcgPSAxOworKyAgICAgICAgICBjb250aW51ZTsKKysJfQorKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisrICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKysgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKysgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKysgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisrICAgICAgICAgICAqLworKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKKysgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKysgICAgICAgIH0KKysgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisrICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgIH0KKysgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisrCisrRU9GCisrCSAgICBjYXQgPDxFT0YKKysgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CisrRU9GCisrCSAgICBjYXQgPDwiRU9GIgorKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7CisgCistICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorLSAgICBsdF9mYXRhbCAoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKy0JCQkgIHRtcF9wYXRoc3BlYykpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKysJCSAgdG1wX3BhdGhzcGVjKTsKKyAKKyAgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKy0JCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisrCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworIAorLSAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwKCBiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisrICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAKKyAgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCitAQCAtMzYxMyw4ICs0NDUxLDkgQEAgRU9GCisgICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgIHRtcF9wYXRoc3BlYyA9IDA7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorLQkJCSAgdGFyZ2V0X25hbWUpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisrCQkgIHRhcmdldF9uYW1lKTsKKyBFT0YKKyAKKyAJICAgIGNhdCA8PEVPRgorQEAgLTM2NjQsMzUgKzQ1MDMsMTkgQEAgRU9GCisgCisgICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKy0gIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworKyAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAorKyAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCisrICAgICBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggKl9WQVJOQU1FcyBhcmUgUEFUSCBidXQgdW5pbnN0YWxsZWQKKysgICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCisgICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKysgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworIAorLSAgbmV3YXJnYz0wOworLSAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKy0gICAgeworLSAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgb3B0X3ByZWZpeF9sZW4pID09IDApCistICAgICAgICB7CistICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKy0gICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorLSAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorLSAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCistICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCistICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCistICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorLSAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKy0gICAgICAgICAgICovCistICAgICAgICAgIGx0X2ZhdGFsICgiVW5yZWNvZ25pemVkIG9wdGlvbiBpbiAlcyBuYW1lc3BhY2U6ICclcyciLAorLSAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworLSAgICAgICAgfQorLSAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKy0gICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKy0gICAgfQorLSAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKy0KKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAgICAgKCgiKG1haW4pIGx0X2FyZ3ZfemVybyA6ICVzXG4iLCAobHRfYXJndl96ZXJvID8gbHRfYXJndl96ZXJvIDogIjxOVUxMPiIpKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisrCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICAgeworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgbmV3YXJnelslZF0gICA6ICVzXG4iLCBpLCAobmV3YXJneltpXSA/IG5ld2FyZ3pbaV0gOiAiPE5VTEw+IikpKTsKKysgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIG5ld2FyZ3pbJWRdOiAlc1xuIiwKKysJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICAgfQorIAorIEVPRgorQEAgLTM3MDYsNyArNDUyOSw5IEBAIEVPRgorICAgaWYgKHJ2YWwgPT0gLTEpCisgICAgIHsKKyAgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiBlcnJubyA9ICVkXG4iLCBsdF9hcmd2X3plcm8sIGVycm5vKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKysJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgIHJldHVybiAxMjc7CisgICAgIH0KKyAgIHJldHVybiBydmFsOworQEAgLTM3MjgsNyArNDU1Myw3IEBAIHhtYWxsb2MgKHNpemVfdCBudW0pCisgeworICAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgIGlmICghcCkKKy0gICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisrICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisgCisgICByZXR1cm4gcDsKKyB9CitAQCAtMzc2Miw4ICs0NTg3LDggQEAgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKKyB7CisgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoY2hlY2tfZXhlY3V0YWJsZSkgIDogJXNcbiIsCistCQkJICBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzc4MCw4ICs0NjA1LDggQEAgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQorICAgaW50IHJ2YWwgPSAwOworICAgc3RydWN0IHN0YXQgc3Q7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1ha2VfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorLQkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzgwNyw4ICs0NjMyLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgaW50IHRtcF9sZW47CisgICBjaGFyICpjb25jYXRfbmFtZTsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoZmluZF9leGVjdXRhYmxlKSAgIDogJXNcbiIsCistCQkJICB3cmFwcGVyID8gKCp3cmFwcGVyID8gd3JhcHBlciA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKyAKKyAgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgIHJldHVybiBOVUxMOworQEAgLTM4NjEsNyArNDY4Niw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAJCXsKKyAJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKyAJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorLQkJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworIAkJICBjb25jYXRfbmFtZSA9CisgCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CitAQCAtMzg4Niw3ICs0NzEyLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgICB9CisgICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCistICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorKyAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworQEAgLTM5MTIsOCArNDczOSw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIGludCBoYXNfc3ltbGlua3MgPSAwOworICAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgICB7CistICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCistCQkJICAgICAgdG1wX3BhdGhzcGVjKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisgCXsKKyAJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorQEAgLTM5MzUsOCArNDc2Myw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGNoYXIgKmVycnN0ciA9IHN0cmVycm9yIChlcnJubyk7CistCSAgbHRfZmF0YWwgKCJFcnJvciBhY2Nlc3NpbmcgZmlsZSAlcyAoJXMpIiwgdG1wX3BhdGhzcGVjLCBlcnJzdHIpOworKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorKwkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAl9CisgICAgIH0KKyAgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworQEAgLTM5NDksNyArNDc3OCw4IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICAgeworLSAgICAgIGx0X2ZhdGFsICgiQ291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisrICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICAgfQorICAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisgI2VuZGlmCitAQCAtMzk3NSwxMSArNDgwNSwyNSBAQCBzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQorICAgcmV0dXJuIHN0cjsKKyB9CisgCisrdm9pZAorK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaWYgKGx0X2RlYnVnKQorKyAgICB7CisrICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworKyAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworKyAgICAgIHZhX2VuZCAoYXJncyk7CisrICAgIH0KKyt9CisrCisgc3RhdGljIHZvaWQKKy1sdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisrbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisgCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQorIHsKKy0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKKysgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworIAorQEAgLTM5ODgsMjAgKzQ4MzIsMzIgQEAgbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAorIH0KKyAKKyB2b2lkCistbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKKytsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKKyB7CisgICB2YV9saXN0IGFwOworICAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKy0gIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgICB2YV9lbmQgKGFwKTsKKyB9CisgCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICoKKytub25lbXB0eSAoY29uc3QgY2hhciAqcykKKyt7CisrICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOworK30KKysKKyB2b2lkCisgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworICAgeworICNpZmRlZiBIQVZFX1NFVEVOVgorICAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworQEAgLTQwNDksOSArNDkwNSw5IEBAIGx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKKyB2b2lkCisgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisrICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgCisgICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgIHsKK0BAIC00MDcwLDkgKzQ5MjYsOSBAQCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHZvaWQKKyBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKysgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAKKyAgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICAgeworQEAgLTQyMjIsNyArNTA3OCw3IEBAIEVPRgorIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCisgeworICAgICAkb3B0X2RlYnVnCistICAgIGNhc2UgYGV2YWwgIiRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIiB8ICRTRUQgLWUgMTBxYCBpbgorKyAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCisgICAgICppbXBvcnQqKSA6IDs7CisgICAgICopIGZhbHNlIDs7CisgICAgIGVzYWMKK0BAIC00NDAxLDkgKzUyNTcsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqKQorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorLQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKKyAJICAgIGVsc2UKKy0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKysJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCisgCSAgICBmaQorIAkgICAgcHJldj0KKyAJICAgIGNvbnRpbnVlCitAQCAtNDQyNyw3ICs1MjgzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICotKi1kYXJ3aW4qKQorIAkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisgCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKy0JCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKysJCSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisgCQkgICA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CitAQCAtNDQ0Niw3ICs1MzAyLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIG1vcmVhcmdzPQorIAkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorIAkgICAgZG8KKy0jCSAgICAgIG1vcmVhcmdzPSIkbW9yZWFyZ3MgJGZpbCIKKysjCSAgICAgIGZ1bmNfYXBwZW5kIG1vcmVhcmdzICIgJGZpbCIKKyAJICAgICAgYXJnPSRmaWwKKyAJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisgCitAQCAtNDQ3NSw3ICs1MzMxLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKy0JCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorKwkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkJICAgICAgcHJldj0KKyAJCSAgICAgIGNvbnRpbnVlCisgCQkgICAgZWxzZQorQEAgLTQ0ODcsNyArNTM0Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisgCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKyAJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCistCQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisrCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkJICAgIHByZXY9CisgCQkgIGZpCisgCitAQCAtNDU1NywxMiArNTQxMywxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisgCSAgICBjYXNlICIkcnBhdGggIiBpbgorIAkgICAgKiIgJGFyZyAiKikgOzsKKy0JICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKKyAJICAgIGVzYWMKKyAJICBlbHNlCisgCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7CisgCSAgICBlc2FjCisgCSAgZmkKKyAJICBwcmV2PQorQEAgLTQ1NzQsMjggKzU0MzAsMjggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBjb250aW51ZQorIAkgIDs7CisgCXdlYWspCistCSAgd2Vha19saWJzPSIkd2Vha19saWJzICRhcmciCisrCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKKyAJICBwcmV2PQorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGNjbGlua2VyKQorLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisgCSAgcHJldj0KKyAJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAl4Y29tcGlsZXIpCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGxpbmtlcikKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorQEAgLTQ2ODYsMTUgKzU1NDIsMTYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJOzsKKyAKKyAgICAgICAtTCopCistCWZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRhcmciCistCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCWlmIHRlc3QgLXogIiRkaXIiOyB0aGVuCisrCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisrCWlmIHRlc3QgLXogIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCisgCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorIAkgIGVsc2UKKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorIAkgIGZpCisgCWZpCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJY2FzZSAkZGlyIGluCisgCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKK0BAIC00NzA2LDEwICs1NTYzLDE2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgOzsKKyAJZXNhYworIAljYXNlICIkZGVwbGlicyAiIGluCistCSoiIC1MJGRpciAiKikgOzsKKysJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKysJICAjIFdpbGwgb25seSBoYXBwZW4gZm9yIGFic29sdXRlIG9yIHN5c3Jvb3QgYXJndW1lbnRzCisrCSAgOzsKKyAJKikKKy0JICBkZXBsaWJzPSIkZGVwbGlicyAtTCRkaXIiCistCSAgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiCisrCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcworKwkgIGNhc2UgJGRpciBpbgorKwkgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKKysJICBlc2FjCisrCSAgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIKKyAJICA7OworIAllc2FjCisgCWNhc2UgJGhvc3QgaW4KK0BAIC00NzE4LDEyICs1NTgxLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JGRpcjoiKikgOzsKKyAJICA6OikgZGxsc2VhcmNocGF0aD0kZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKKyAJICBlc2FjCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC00NzQ3LDcgKzU2MTAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisgCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworLQkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKyAJICAgIGNvbnRpbnVlCisgCSAgICA7OworIAkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKK0BAIC00NzU4LDkgKzU2MjEsNiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworIAkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisgCSAgICA7OworLQkgICotKi1saW51eCopCistCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKy0JICAgIDs7CisgCSAgZXNhYworIAllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisgCSBjYXNlICRob3N0IGluCitAQCAtNDc3MCw3ICs1NjMwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgOzsKKyAJIGVzYWMKKyAJZmkKKy0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKysJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisgCWNvbnRpbnVlCisgCTs7CisgCitAQCAtNDc4Miw4ICs1NjQyLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCistICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdCkKKy0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3R8LS1zeXNyb290KQorKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorIAlwcmV2PXhjb21waWxlcgorQEAgLTQ3OTEsMTIgKzU2NTEsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJOzsKKyAKKyAgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorLQljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCSAgICAqIiAkYXJnICIqKSA7OworLQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGFyZyIgOzsKKysJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CisgCWVzYWMKKyAJY29udGludWUKKyAJOzsKK0BAIC00ODYzLDEzICs1NzIzLDE3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorIAljYXNlICRkaXIgaW4KKyAJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworKwk9KikKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRkaXIiCisrCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkgIDs7CisgCSopCisgCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisgCSAgOzsKKyAJZXNhYworIAljYXNlICIkeHJwYXRoICIgaW4KKyAJKiIgJGRpciAiKikgOzsKKy0JKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisgCWVzYWMKKyAJY29udGludWUKKyAJOzsKK0BAIC00OTIyLDggKzU3ODYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCistCSAgYXJnPSIkYXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgCWRvbmUKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKK0BAIC00OTM4LDkgKzU4MDIsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCistCSAgYXJnPSIkYXJnICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgCWRvbmUKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKK0BAIC00OTY4LDI0ICs1ODMyLDI3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAk7OworIAorLSAgICAgICMgLTY0LCAtbWlwc1swLTldIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU0dJIGNvbXBpbGVyCistICAgICAgIyAtclswLTldWzAtOV0qIHNwZWNpZmllcyB0aGUgcHJvY2Vzc29yIG9uIHRoZSBTR0kgY29tcGlsZXIKKy0gICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCistICAgICAgIyArREEqLCArREQqIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgSFAgY29tcGlsZXIKKy0gICAgICAjIC1xKiBwYXNzIHRocm91Z2ggY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorLSAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworLSAgICAgICMgY29tcGlsZXIgYXJncyBmb3IgR0NDCistICAgICAgIyAtRi9wYXRoIGdpdmVzIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorLSAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogcGFzcyB0aHJvdWdoIHByb2ZpbGluZyBmbGFnIGZvciBHQ0MKKy0gICAgICAjIEBmaWxlIEdDQyByZXNwb25zZSBmaWxlcworLSAgICAgICMgLXRwPSogUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorKyAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKKysgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorKyAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKKysgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgorKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKysgICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKysgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCisrICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKysgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQworKyAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCisrICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisrICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0CisrICAgICAgIyAtTyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKy0gICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSopCisrICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisrICAgICAgLU8qfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2luKQorICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCistICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgICAgICAgICBjb250aW51ZQorICAgICAgICAgOzsKKyAKK0BAIC00OTk3LDcgKzU4NjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICouJG9iamV4dCkKKyAJIyBBIHN0YW5kYXJkIG9iamVjdC4KKy0Jb2Jqcz0iJG9ianMgJGFyZyIKKysJZnVuY19hcHBlbmQgb2JqcyAiICRhcmciCisgCTs7CisgCisgICAgICAgKi5sbykKK0BAIC01MDI4LDcgKzU4OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCistCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKysJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCXByZXY9CisgCQljb250aW51ZQorIAkgICAgICBlbHNlCitAQCAtNTA0MCw3ICs1OTA3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisgCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKy0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKyAJICAgICAgcHJldj0KKyAJICAgIGZpCisgCitAQCAtNTA4NSwyNCArNTk1MiwyNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICouJGxpYmV4dCkKKyAJIyBBbiBhcmNoaXZlLgorLQlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorLQlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisrCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCisgCWNvbnRpbnVlCisgCTs7CisgCisgICAgICAgKi5sYSkKKyAJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorIAorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKKyAJaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorLQkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisrCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCSAgcHJldj0KKyAJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKy0JICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIHByZXY9CisgCWVsc2UKKy0JICBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAlmaQorIAljb250aW51ZQorIAk7OworQEAgLTUxMjcsNyArNTk5NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorIAorICAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCistICAgICAgZXZhbCAiYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiIgorKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgZmkKK0BAIC01MTQ0LDExICs2MDEyLDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgIGVsc2UKKyAgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICAgZmkKKy0gICAgZXZhbCAic3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIiIKKy0gICAgZXZhbCAic3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIiCisrICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgorKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisgCisgICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKysgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKysgICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisgCitAQCAtNTE2OSwxMiArNjAzOSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCistICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAljYXNlICIkbGlicyAiIGluCistCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZmkKKy0gICAgICBsaWJzPSIkbGlicyAkZGVwbGliIgorKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgorICAgICBkb25lCisgCisgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KK0BAIC01MTg3LDkgKzYwNTcsOSBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisgCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworIAkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KKy0JICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7CisgCSAgZXNhYworLQkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisrCSAgZnVuY19hcHBlbmQgcHJlX3Bvc3RfZGVwcyAiICRwcmVfcG9zdF9kZXAiCisgCWRvbmUKKyAgICAgICBmaQorICAgICAgIHByZV9wb3N0X2RlcHM9CitAQCAtNTI1Niw4ICs2MTI2LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKyAJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisgCSAgZGVwZW5kZW5jeV9saWJzPQorKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorIAkgIGNhc2UgJGxpYiBpbgorLQkgICoubGEpCWZ1bmNfc291cmNlICIkbGliIiA7OworKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworIAkgIGVzYWMKKyAKKyAJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKK0BAIC01MjY3LDcgKzYxMzgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICAgICAgIGRlcGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorIAkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorIAkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworLQkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZG9uZQorQEAgLTUyODgsMTEgKzYxNTksMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKyAJICBlbHNlCistCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisgCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorIAkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJCSAgICAqIiAkZGVwbGliICIqKSA7OworLQkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisrCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKyAJCWVzYWMKKyAJICAgIGZpCisgCSAgZmkKK0BAIC01Mzc3LDcgKzYyNDgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKyAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisgCQllc2FjCisgCSAgICBmaQorIAkgIGZpCitAQCAtNTM5MCw3ICs2MjYxLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKyAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKy0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgICAgOzsKKyAJICBwcm9nKQorIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorQEAgLTU0MDQsNyArNjI3Niw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgICBmaQorIAkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKy0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgICAgOzsKKyAJICAqKQorIAkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorQEAgLTU0MTUsMTcgKzYyODgsMjEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJLVIqKQorIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCistCSAgICBkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKyAJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorIAkgICAgKiIgJGRpciAiKikgOzsKKy0JICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKyAJICAgIGVzYWMKKyAJICBmaQorIAkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisgCSAgY29udGludWUKKyAJICA7OworLQkqLmxhKSBsaWI9IiRkZXBsaWIiIDs7CisrCSoubGEpCisrCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisrCSAgbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKysJICA7OworIAkqLiRsaWJleHQpCisgCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKK0BAIC01NDg4LDExICs2MzY1LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorIAkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKyAJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCistCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGVwbGliIgorIAkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKyAJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKyAJICAgIGVsc2UKKy0JICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRkZXBsaWIiCisgCSAgICBmaQorIAkgIGZpCisgCSAgY29udGludWUKK0BAIC01NTM4LDcgKzY0MTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKyAJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKy0JICAgICAgKikgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlmaQorQEAgLTU1NDYsOCArNjQyMyw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisgCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorIAkgICB7IHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgfTsgdGhlbgorLQkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCistCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGRscHJlb3BlbiIKKysJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKysJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGRscHJlb3BlbiIKKyAJZmkKKyAKKyAJaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorQEAgLTU1NTgsMjAgKzY0MzUsMjAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisgCSAgICBmaQorIAkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorLQkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCistCSAgICBvbGRfY29udmVuaWVuY2U9IiRvbGRfY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgZnVuY19hcHBlbmQgY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisgCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKyAJICBmaQorIAkgIHRtcF9saWJzPQorIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKy0JICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCistCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisgCSAgZG9uZQorIAkgIGNvbnRpbnVlCisgCWZpICMgJHBhc3MgPSBjb252CitAQCAtNTU3OSw5ICs2NDU2LDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKyAJbGlua2xpYj0KKy0JZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworLQkgIGxpbmtsaWI9IiRsIgorLQlkb25lCisrCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKysJICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAorKwkgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQsbm8iOyB9OyB0aGVuCisrCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKKysJZWxzZQorKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKysJICAgIGxpbmtsaWI9IiRsIgorKwkgIGRvbmUKKysJZmkKKyAJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisgCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisgCWZpCitAQCAtNTU5OCw5ICs2NDgxLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisgCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorIAkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorLQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorKwkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKyAJICBlbHNlCistCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorKwkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCisgCSAgZmkKKyAJICBjb250aW51ZQorIAlmaSAjICRwYXNzID0gZGxvcGVuCitAQCAtNTYyMiwxNCArNjUwNSwxNCBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKyAJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorLQkgIGlmIHRlc3QgISAtZiAiJGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKysJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKyAJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisgCSAgICBkaXI9IiRsYWRpciIKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCistCSAgICBkaXI9IiRsaWJkaXIiCistCSAgICBhYnNkaXI9IiRsaWJkaXIiCisrCSAgICBkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKysJICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgIGZpCisgCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKyAJZWxzZQorQEAgLTU2MzcsMTIgKzY1MjAsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGRpcj0iJGxhZGlyIgorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisrCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorIAkgIGVsc2UKKyAJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKyAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKy0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKyAJICBmaQorIAlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKyAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCitAQCAtNTY1MywyMCArNjUzNiw0NiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisgCSAgZmkKKy0JICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKy0JICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKy0JICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCistCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKy0JICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworLQkgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCistCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCistCQlkbHByZWNvbnZlbmllbmNlbGlicz0iJGRscHJlY29udmVuaWVuY2VsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorLQkgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCistCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorLQkgIGVsc2UKKy0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCistCSAgZmkKKysJICBjYXNlICIkaG9zdCIgaW4KKysJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKysJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKysJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKysJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAorKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKysJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKysJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKKysJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorKwkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisrCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGVsc2UKKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisrCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisrCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqICkKKysJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisrCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorKwkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKysJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisrCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorKwkgICAgICBlbHNlCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGZpCisrCSAgICA7OworKwkgIGVzYWMKKyAJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorIAorIAlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorQEAgLTU2ODQsNyArNjU5Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCisgCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCistCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKysJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCisgCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKyAKKyAJICBsaW5rYWxsZGVwbGlicz1ubworQEAgLTU2OTcsNyArNjYwNiw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgY2FzZSAkZGVwbGliIGluCisgCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJCSA7OworIAkgICAgZXNhYworIAkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworQEAgLTU3MDgsMTIgKzY2MTgsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKyAJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgICBmaQorLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorIAkgIGRvbmUgIyBmb3IgZGVwbGliCisgCSAgY29udGludWUKKyAJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCitAQCAtNTcyOCw3ICs2NjM4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorIAkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisgCSAgICAgICoiJGFic2RpcjoiKikgOzsKKy0JICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCitAQCAtNTc0MCw3ICs2NjUwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01NzQ5LDcgKzY2NTksNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01Nzc0LDEyICs2Njg0LDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY2FzZSAkaG9zdCBpbgorIAkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisgCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKy0JICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisgCSAgICAgIG5lZWRfcmVsaW5rPW5vCisgCSAgICA7OworIAkgICopCisgCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCistCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorIAkgICAgICBuZWVkX3JlbGluaz15ZXMKKyAJICAgIGZpCisgCSAgICA7OworQEAgLTU4MTQsNyArNjcyNCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTgyMyw3ICs2NzMzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTgzNSw3ICs2NzQ1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIHNoaWZ0CisgCSAgICByZWFsbmFtZT0iJDEiCisgCSAgICBzaGlmdAorLQkgICAgZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorIAkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisgCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorIAkgICAgICBzb25hbWU9IiRkbG5hbWUiCitAQCAtNTg0OCw3ICs2NzU4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCXZlcnN1ZmZpeD0iLSRtYWpvciIKKyAJCTs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgZXZhbCAic29uYW1lPVwiJHNvbmFtZV9zcGVjXCIiCisrCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKyAJICAgIGVsc2UKKyAJICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisgCSAgICBmaQorQEAgLTU4NzcsNyArNjc4Nyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBsaW5rbGliPSRuZXdsaWIKKyAJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKyAKKy0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJICAgIGFkZF9zaGxpYnBhdGg9CisgCSAgICBhZGRfZGlyPQorIAkgICAgYWRkPQorQEAgLTU5MzMsNyArNjg0Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJICBjYXNlICRsaWJkaXIgaW4KKyAJCSAgICBbXFwvXSopCistCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgICA7OworIAkJICBlc2FjCisgCQlmaQorQEAgLTU5NTUsNyArNjg2NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKyAJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorIAkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCitAQCAtNTk2OSwxMyArNjg3OSwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorIAkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKyAJCSoiOiRsaWJkaXI6IiopIDs7CistCQkqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKysJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICBmaQorIAkgIGZpCisgCistCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkgICAgYWRkX3NobGlicGF0aD0KKyAJICAgIGFkZF9kaXI9CisgCSAgICBhZGQ9CitAQCAtNTk4OSw3ICs2ODk5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisgCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisgCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIGFkZD0iLWwkbmFtZSIKKyAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KK0BAIC02MDAxLDEyICs2OTExLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCistCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKysJICAgICAgYWRkX2Rpcj0iLUwkbHRfc3lzcm9vdCRsaWJkaXIiCisgCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgorIAkJICBbXFwvXSopCistCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKyAJCSAgICA7OworIAkJZXNhYworIAkgICAgICBmaQorQEAgLTYwODMsMjcgKzY5OTMsMzMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisgCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CistCQkgICAqKSB4cnBhdGg9IiR4cnBhdGggJHRlbXBfeHJwYXRoIjs7CisrCQkgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkdGVtcF94cnBhdGgiOzsKKyAJCSAgIGVzYWM7OworLQkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKyAJICBmaQorIAorLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkYWJzZGlyIgorKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCisgCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisgCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKyAJICB0bXBfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKy0JICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICBjYXNlICRkZXBsaWIgaW4KKysgICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKysgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKKysgICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OworKyAgICAgICAgICAgIGVzYWMKKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKKysgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIGRvbmUKKyAKKyAJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KK0BAIC02MTEzLDggKzcwMjksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgY2FzZSAkZGVwbGliIGluCisgCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKyAJICAgICAgKi5sYSkKKysJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKysJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCistCQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKwkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJCWNhc2UgJGRpciBpbgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CitAQCAtNjEzMCw3ICs3MDQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCWNhc2UgJGhvc3QgaW4KKyAJCSotKi1kYXJ3aW4qKQorIAkJICBkZXBkZXBsPQorLQkJICBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisgCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKyAJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKyAJCSAgICAgIGRlcGRlcGw9JHRtcAorQEAgLTYxNDEsOCArNzA1OSw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgIGZpCistCQkgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCistCQkgICAgICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorIAkJICAgICAgcGF0aD0KKyAJCSAgICBmaQorIAkJICBmaQorQEAgLTYxNTIsNyArNzA3MCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgIDs7CisgCQllc2FjCisgCQllbHNlCistCQkgIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorIAkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisgCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCitAQCAtNjE5Miw3ICs3MTEwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCisgCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKyAJICAgICoiICRkaXIgIiopIDs7CistCSAgICAqKSBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KK0BAIC02MjA1LDcgKzcxMjMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmaQorIAlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCistCSAgZXZhbCB0bXBfbGlicz1cJCR2YXIKKysJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKyAJICBuZXdfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKyAJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCitAQCAtNjI1MCwxMyArNzE2OCwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgLUwqKQorIAkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKyAJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKy0JICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCistCSAgZXZhbCAkdmFyPVwkdG1wX2xpYnMKKysJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorIAlkb25lICMgZm9yIHZhcgorICAgICAgIGZpCisgICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKK0BAIC02MjY5LDcgKzcxODcsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIDs7CisgCWVzYWMKKyAJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGkiCisrCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKKyAJZmkKKyAgICAgICBkb25lCisgICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworQEAgLTYzMTAsNyArNzIyOCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICAgb2xkbGlicz0iJG91dHB1dCIKKy0gICAgICBvYmpzPSIkb2JqcyRvbGRfZGVwbGlicyIKKysgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCisgICAgICAgOzsKKyAKKyAgICAgbGliKQorQEAgLTYzMTksOCArNzIzNyw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgbGliKikKKyAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgorIAluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKy0JZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKyAJOzsKKyAgICAgICAqKQorIAl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKK0BAIC02MzMwLDggKzcyNDgsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKyAJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisgCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCSAgZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQkgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKysJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKyAJZWxzZQorIAkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKyAJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKK0BAIC02MzQ2LDcgKzcyNjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGVjaG8KKyAJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisgCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCistCSAgbGlib2Jqcz0iJGxpYm9ianMgJG9ianMiCisrCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgorIAlmaQorICAgICAgIGZpCisgCitAQCAtNjU0NCw3ICs3NDYyLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBkb25lCisgCisgCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgorLQkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisrCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JHtjdXJyZW50fS4wIgorIAkgIDs7CisgCisgCXFueCkKK0BAIC02NjEyLDEwICs3NTMwLDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZmkKKyAKKyAgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKy0gICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKysgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAKKy0gICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKyAJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisgCXJlbW92ZWxpc3Q9CitAQCAtNjYzMSw3ICs3NTQ5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSAgIGNvbnRpbnVlCisgCQkgZmkKKyAJICAgICAgIGZpCistCSAgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkcCIKKysJICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKKyAJICAgICAgIDs7CisgCSAgICAqKSA7OworIAkgIGVzYWMKK0BAIC02NjQyLDcgKzc1NjAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCistCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisrCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorIAorIAkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCisgCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorQEAgLTY2NTksMTAgKzc1NzcsMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorIAl0ZW1wX3hycGF0aD0KKyAJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworLQkgIHRlbXBfeHJwYXRoPSIkdGVtcF94cnBhdGggLVIkbGliZGlyIgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGZ1bmNfYXBwZW5kIHRlbXBfeHJwYXRoICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZG9uZQorIAlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorQEAgLTY2NzYsNyArNzU5NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisgCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisgCSoiICRsaWIgIiopIDs7CistCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorIAorQEAgLTY2ODYsNyArNzYwNSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisgCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKyAJKiIgJGxpYiAiKikgOzsKKy0JKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgCitAQCAtNjY5OCw3ICs3NjE3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorIAkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKy0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKysJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisgCSAgICA7OworIAkgICotKi1uZXRic2QqKQorIAkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCitAQCAtNjcxNSw3ICs3NjM0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAqKQorIAkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKyAJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKy0JICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorIAkgICAgZmkKKyAJICAgIDs7CisgCSAgZXNhYworQEAgLTY3NjQsMTggKzc2ODMsMTggQEAgRU9GCisgCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJICAqIiAkaSAiKikKKy0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgaT0iIgorIAkJICAgIDs7CisgCQkgIGVzYWMKKyAJCWZpCisgCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCistCQkgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCistCQkgIGV2YWwgImRlcGxpYl9tYXRjaGVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgorKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKysJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorIAkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorIAkJICBkZXBsaWJfbWF0Y2g9JDEKKyAJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorLQkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCSAgZWxzZQorIAkJICAgIGRyb3BwZWRkZXBzPXllcworIAkJICAgIGVjaG8KK0BAIC02Nzg5LDcgKzc3MDgsNyBAQCBFT0YKKyAJCWZpCisgCQk7OworIAkgICAgICAqKQorLQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtNjgwNywxOCArNzcyNiwxOCBAQCBFT0YKKyAJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJICAgICoiICRpICIqKQorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgICBpPSIiCisgCQkgICAgICA7OworIAkJICAgIGVzYWMKKyAJCSAgZmkKKyAJCSAgaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkJICAgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCistCQkgICAgZXZhbCAiZGVwbGliX21hdGNoZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIiCisrCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorIAkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisgCQkgICAgZGVwbGliX21hdGNoPSQxCisgCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgZWxzZQorIAkJICAgICAgZHJvcHBlZGRlcHM9eWVzCisgCQkgICAgICBlY2hvCitAQCAtNjg0MCw3ICs3NzU5LDcgQEAgRU9GCisgCQlmaQorIAkJOzsKKyAJICAgICAgKikKKy0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorQEAgLTY4NTcsMTUgKzc3NzYsMjcgQEAgRU9GCisgCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJKiIgJGFfZGVwbGliICIqKQorLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgIGFfZGVwbGliPSIiCisgCQkgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCistCQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorKwkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAorKwkJZWxzZQorKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorKwkJZmkKKysJCXRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCisgCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKy0JCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisrCQkgIGlmIHRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzOyB0aGVuCisrCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKysJCSAgICAkbm9jYXNlZ2xvYgorKwkJICBlbHNlCisrCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBmaQorIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisgCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorIAkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKK0BAIC02ODg1LDEwICs3ODE2LDEwIEBAIEVPRgorIAkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CisgCQkJZXNhYworIAkJICAgICAgZG9uZQorLQkJICAgICAgaWYgZXZhbCAiJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiIgMj4vZGV2L251bGwgfAorKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKyAJCQkgJFNFRCAtZSAxMHEgfAorIAkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorLQkJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJCWFfZGVwbGliPSIiCisgCQkJYnJlYWsgMgorIAkJICAgICAgZmkKK0BAIC02OTEzLDcgKzc4NDQsNyBAQCBFT0YKKyAJICAgICAgOzsKKyAJICAgICopCisgCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCistCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorQEAgLTY5MjksMjAgKzc4NjAsMjAgQEAgRU9GCisgCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJKiIgJGFfZGVwbGliICIqKQorLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgIGFfZGVwbGliPSIiCisgCQkgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCistCQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisgCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKyAJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisgCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKyAJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorIAkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisgCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgICAgICBhX2RlcGxpYj0iIgorIAkJICAgICAgYnJlYWsgMgorIAkJICAgIGZpCitAQCAtNjk2Nyw3ICs3ODk4LDcgQEAgRU9GCisgCSAgICAgIDs7CisgCSAgICAqKQorIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCSAgICAgIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KK0BAIC03MDcxLDcgKzgwMDIsNyBAQCBFT0YKKyAJKikKKyAJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKy0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC03MDgxLDEwICs4MDEyLDEwIEBAIEVPRgorIAktTCopCisgCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisgCSAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAkgIGVzYWMKKyAJICA7OworLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCitAQCAtNzEwMSwxMCArODAzMiwxMiBAQCBFT0YKKyAJICBoYXJkY29kZV9saWJkaXJzPQorIAkgIGRlcF9ycGF0aD0KKyAJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorLQkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorKwkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKyAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKyAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorIAkJZWxzZQorQEAgLTcxMTMsMTggKzgwNDYsMTggQEAgRU9GCisgCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCSAgICA7OworIAkJICAqKQorLQkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJICAgIGZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCSAgICA7OworIAkJICBlc2FjCisgCQlmaQorIAkgICAgICBlbHNlCistCQlldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKysJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorIAkgICAgICBmaQorIAkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAgICAgKikgZnVuY19hcHBlZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBkb25lCitAQCAtNzEzMyw0MCArODA2NiwzOCBAQCBFT0YKKyAJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCI7IHRoZW4KKy0JICAgICAgZXZhbCAiZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIiIKKysJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCisgCSAgICBlbHNlCistCSAgICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorIAkgICAgZmkKKyAJICBmaQorIAkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisgCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgICAgcnBhdGg9CisgCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworLQkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKyAJICAgIGRvbmUKKy0JICAgIGV2YWwgJHJ1bnBhdGhfdmFyPVwkcnBhdGhcJCRydW5wYXRoX3ZhcgorLQkgICAgZXhwb3J0ICRydW5wYXRoX3ZhcgorKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisgCSAgZmkKKyAJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorIAlmaQorIAorIAlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCistCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorKwl0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisgCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCistCSAgZXZhbCAkc2hsaWJwYXRoX3Zhcj1cJHNobGlicGF0aFwkJHNobGlicGF0aF92YXIKKy0JICBleHBvcnQgJHNobGlicGF0aF92YXIKKysJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisgCWZpCisgCisgCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorLQlldmFsICJzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIiCistCWV2YWwgImxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIiCisrCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorIAlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKyAJc2hpZnQKKyAJcmVhbG5hbWU9IiQxIgorIAlzaGlmdAorIAorIAlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCistCSAgZXZhbCAic29uYW1lPVwiJHNvbmFtZV9zcGVjXCIiCisrCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorIAllbHNlCisgCSAgc29uYW1lPSIkcmVhbG5hbWUiCisgCWZpCitAQCAtNzE3OCw3ICs4MTA5LDcgQEAgRU9GCisgCWxpbmtuYW1lcz0KKyAJZm9yIGxpbmsKKyAJZG8KKy0JICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCisrCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCisgCWRvbmUKKyAKKyAJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKK0BAIC03MTg5LDcgKzgxMjAsNyBAQCBFT0YKKyAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKyAJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKy0JICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyIKKysJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKyAJZmkKKyAKKyAJb3JpZ19leHBvcnRfc3ltYm9scz0KK0BAIC03MjIwLDEzICs4MTUxLDQ1IEBAIEVPRgorIAkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKyAJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKKyAJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworLQkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKysJICAgIGZvciBjbWQxIGluICRjbWRzOyBkbworIAkgICAgICBJRlM9IiRzYXZlX2lmcyIKKy0JICAgICAgZXZhbCAiY21kPVwiJGNtZFwiIgorLQkgICAgICBmdW5jX2xlbiAiICRjbWQiCistCSAgICAgIGxlbj0kZnVuY19sZW5fcmVzdWx0CistCSAgICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorKwkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAorKwkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKysJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KKysJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKKysJCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCisrCQkgIGV2YWwgY21kPVwiJGNtZDFcIgorKwkJICBmdW5jX2xlbiAiICRjbWQiCisrCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisrCQkgIDs7CisrCQkqKQorKwkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubworKwkJICA7OworKwkgICAgICBlc2FjCisrCSAgICAgIGlmIHRlc3QgIiR0cnlfbm9ybWFsX2JyYW5jaCIgPSB5ZXMgXAorKwkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKKysJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CisrCSAgICAgIHRoZW4KKysJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKysJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisrCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgorKwkJZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKysJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKysJCXNhdmVfbGlib2Jqcz0kbGlib2JqcworKwkJc2F2ZV9vdXRwdXQ9JG91dHB1dAorKwkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisrCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJCWxpYm9ianM9JG5tX2ZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorKwkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorKwkJZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzOyBkbworKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisrCQlkb25lID4gIiRvdXRwdXQiCisrCQlldmFsIGNtZD1cIiRjbWQxXCIKKyAJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKysJCW91dHB1dD0kc2F2ZV9vdXRwdXQKKysJCWxpYm9ianM9JHNhdmVfbGlib2JqcworIAkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKyAJICAgICAgZWxzZQorIAkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCitAQCAtNzI0OCw3ICs4MjExLDcgQEAgRU9GCisgCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKyAJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKy0JICAkb3B0X2RyeV9ydW4gfHwgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworIAlmaQorIAorIAlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorQEAgLTcyNjAsNyArODIyMyw3IEBAIEVPRgorIAkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisgCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKyAJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKy0JICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisrCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorIAkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorIAkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisgCWZpCitAQCAtNzI3MCw3ICs4MjMzLDcgQEAgRU9GCisgCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisgCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworIAkgICopCistCSAgICB0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgorIAkgICAgOzsKKyAJICBlc2FjCisgCWRvbmUKK0BAIC03Mjg2LDQzICs4MjQ5LDQzIEBAIEVPRgorIAkgIGZpCisgCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorIAkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCistCSAgICBldmFsICJsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGVsc2UKKyAJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKy0JICAgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBmaQorIAlmaQorIAorIAlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCistCSAgZXZhbCAiZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIiIKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZsYWciCisrCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCisgCWZpCisgCisgCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKy0JICAkb3B0X2RyeV9ydW4gfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpIHx8IGV4aXQgJD8KKysJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKyAJZmkKKyAKKyAJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorIAlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKy0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisgCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKyAJICBlbHNlCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKyAJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisgCSAgZmkKKyAJZWxzZQorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisgCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisgCSAgZWxzZQorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKyAJICAgIGNtZHM9JGFyY2hpdmVfY21kcworIAkgIGZpCisgCWZpCitAQCAtNzM2NiwxMCArODMyOSwxMyBAQCBFT0YKKyAJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorIAkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisgCSAgICBkbworLQkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKyAJICAgIGRvbmUKKyAJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKy0JICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorIAkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworIAkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorQEAgLTczODMsMTUgKzgzNDksMTcgQEAgRU9GCisgCSAgICBmaQorIAkgICAgZm9yIG9iagorIAkgICAgZG8KKy0JICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKysJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisgCSAgICBkb25lCistCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCistCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisgCSAgZWxzZQorIAkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKyAJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKyAJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CistCSAgICAgIGV2YWwgInRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiIgorKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisgCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKyAJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisgCSAgICAgIGxlbj0kbGVuMAorQEAgLTc0MTEsMTIgKzgzNzksMTIgQEAgRU9GCisgCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KKyAJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorIAkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CistCQkgICAgZXZhbCAiY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIiIKKysJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKyAJCSAgZWxzZQorIAkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisgCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKyAJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKy0JCSAgICBldmFsICJjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiIgorKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorIAkJICBmaQorIAkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKyAJCSAgZnVuY19hcml0aCAkayArIDEKK0BAIC03NDMzLDExICs4NDAxLDExIEBAIEVPRgorIAkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisgCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorLQkgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiIgorKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIKKyAJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKy0JICAgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIiIKKysJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisgCSAgICAgIGZpCistCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKysJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorIAorIAkgICAgZWxzZQorIAkgICAgICBvdXRwdXQ9CitAQCAtNzQ1MCw5ICs4NDE4LDkgQEAgRU9GCisgCSAgICAgIGxpYm9ianM9JG91dHB1dAorIAkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKy0JICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisgCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCistCQlldmFsICJjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIiCisrCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorIAkgICAgICBmaQorIAkgICAgZmkKKyAKK0BAIC03NDcxLDcgKzg0MzksNyBAQCBFT0YKKyAJCWx0X2V4aXQ9JD8KKyAKKyAJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisgCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisgCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKyAJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorQEAgLTc0OTIsNyArODQ2MCw3IEBAIEVPRgorIAkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKyAJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCistCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiCisrCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworIAkgICAgZmkKKyAKKyAJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorQEAgLTc1MDQsNyArODQ3Miw3IEBAIEVPRgorIAkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorIAkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKy0JICAgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisgCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworIAkgICAgZmkKK0BAIC03NTE1LDcgKzg0ODMsNyBAQCBFT0YKKyAJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisgCisgCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCistCSAgICBldmFsICJsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGZpCisgCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKK0BAIC03NTM5LDIzICs4NTA3LDIzIEBAIEVPRgorIAorIAlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisgCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKy0JICBldmFsICJjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIiCisrCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKyAJZmkKKyAKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAlmaQorIAorIAlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKyAJZm9yIGNtZCBpbiAkY21kczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKy0JICBldmFsICJjbWQ9XCIkY21kXCIiCisrCSAgZXZhbCBjbWQ9XCIkY21kXCIKKyAJICAkb3B0X3NpbGVudCB8fCB7CisgCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisgCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCitAQCAtNzU2NCw3ICs4NTMyLDcgQEAgRU9GCisgCSAgICBsdF9leGl0PSQ/CisgCisgCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKy0JICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorIAkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisgCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorQEAgLTc1NzYsOCArODU0NCw4IEBAIEVPRgorIAlJRlM9IiRzYXZlX2lmcyIKKyAKKyAJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CistCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorLQkgICRvcHRfZHJ5X3J1biB8fCAoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSkgfHwgZXhpdCAkPworKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworIAorIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KK0BAIC03NjU2LDE3ICs4NjI0LDIwIEBAIEVPRgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKyAJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorLQkgIGV2YWwgInRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIiCisrCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAorIAllbHNlCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisgCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAlmaQorICAgICAgIGZpCisgCisrICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKKysgICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKysKKyAgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKyAKK0BAIC03NjkwLDcgKzg2NjEsNyBAQCBFT0YKKyAJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKyAJIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KKyAJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorLQkjICRvcHRfZHJ5X3J1biB8fCBlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmogfHwgZXhpdCAkPworKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKyAJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICAgZmkKKyAKK0BAIC03NzQwLDggKzg3MTEsOCBAQCBFT0YKKyAJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorIAkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKyAJICAgIDEwLlswMTIzXSkKKy0JICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKy0JICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorKwkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisgCSAgICA7OworIAkgIGVzYWMKKyAJZmkKK0BAIC03NzYxLDcgKzg3MzIsNyBAQCBFT0YKKyAJKikKKyAJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisgCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorLQkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisrCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTc3NzEsMTcgKzg3NDIsMTcgQEAgRU9GCisgCS1MKikKKyAJICBjYXNlICIgJG5ld19saWJzICIgaW4KKyAJICAqIiAkZGVwbGliICIqKSA7OworLQkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgZXNhYworIAkgIDs7CistCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorICAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorIAorIAorLSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkY29tcGlsZV9kZXBsaWJzIgorLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisgCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KK0BAIC03Nzg5LDcgKzg3NjAsNyBAQCBFT0YKKyAJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisgCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlkb25lCisgICAgICAgZmkKK0BAIC03ODA4LDE4ICs4Nzc5LDE4IEBAIEVPRgorIAkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisgCQk7OworIAkgICAgICAqKQorLQkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisrCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgImZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorLQkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKysJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgCWNhc2UgJGhvc3QgaW4KK0BAIC03ODI4LDEyICs4Nzk5LDEyIEBAIEVPRgorIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiRsaWJkaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisgCSAgZXNhYworIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzg0Miw3ICs4ODEzLDcgQEAgRU9GCisgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisgCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKy0JZXZhbCAicnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgZmkKKyAgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisgCitAQCAtNzg1OSwxOCArODgzMCwxOCBAQCBFT0YKKyAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorIAkJOzsKKyAJICAgICAgKikKKy0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisrCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlmaQorICAgICAgIGRvbmUKK0BAIC03ODc4LDcgKzg4NDksNyBAQCBFT0YKKyAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKyAJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorLQlldmFsICJycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICBmaQorICAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisgCitAQCAtNzkyMSw2ICs4ODkyLDEyIEBAIEVPRgorIAlleGl0X3N0YXR1cz0wCisgCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisgCisrCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKwlmaQorKworIAkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorIAlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisgCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKK0BAIC03OTQzLDcgKzg5MjAsNyBAQCBFT0YKKyAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgIHJwYXRoPQorIAkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCistCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgZG9uZQorIAkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKyAJZmkKK0BAIC03OTUxLDcgKzg5MjgsNyBAQCBFT0YKKyAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgIHJwYXRoPQorIAkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCistCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgZG9uZQorIAkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisgCWZpCitAQCAtNzk2Niw2ICs4OTQzLDEzIEBAIEVPRgorIAkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKyAJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisgCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKysKKysJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisrCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisrCWZpCisrCisgCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgIGZpCisgCitAQCAtNzk5OSw2ICs4OTgzLDEyIEBAIEVPRgorIAorICAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKyAKKysgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKysJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgorKwlwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKyAgICAgIGZpCisrCisgICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisgCitAQCAtODA5Niw3ICs5MDg2LDcgQEAgRU9GCisgCWVsc2UKKyAJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKyAJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCistCSAgICBvbGRvYmpzPSIkb2xkb2JqcyAkc3ltZmlsZW9iaiIKKysJICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKyAJICBmaQorIAlmaQorIAlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorQEAgLTgxMDQsMTAgKzkwOTQsMTAgQEAgRU9GCisgCisgICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisgCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworLQlvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgIGZpCisgCisgICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCitAQCAtODExOCwxMCArOTEwOCwxMCBAQCBFT0YKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJZmkKKyAKKyAJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCitAQCAtODEzOSw3ICs5MTI5LDcgQEAgRU9GCisgCWVsc2UKKyAJICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKy0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKyAJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKyAJICBvbGRvYmpzPQorQEAgLTgxNjMsMTggKzkxNTMsMjggQEAgRU9GCisgCQllc2FjCisgCSAgICAgIGRvbmUKKyAJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorLQkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCisgCSAgICAgIDs7CistCSAgICAqKSBvbGRvYmpzPSIkb2xkb2JqcyAkb2JqIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlmaQorLQlldmFsICJjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorIAorIAlmdW5jX2xlbiAiICRjbWRzIgorIAlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorIAlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKyAJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisrCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KKysJICBmdW5jX3ZlcmJvc2UgInVzaW5nIGNvbW1hbmQgZmlsZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisrCSAgZm9yIG9iaiBpbiAkb2xkb2JqcworKwkgIGRvCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorKwkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKKysJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kIgorKwkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKysJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisgCWVsc2UKKyAJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworIAkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKK0BAIC04MTg5LDcgKzkxODksNyBAQCBFT0YKKyAJICBkbworIAkgICAgbGFzdF9vbGRvYmo9JG9iagorIAkgIGRvbmUKKy0JICBldmFsICJ0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiIgorKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorIAkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKyAJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKyAJICBsZW49JGxlbjAKK0BAIC04MjA4LDcgKzkyMDgsNyBAQCBFT0YKKyAJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKyAJICAgICAgZmkKKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CistCSAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICAgICAgb2JqbGlzdD0KKyAJICAgICAgbGVuPSRsZW4wCisgCSAgICBmaQorQEAgLTgyMTYsOSArOTIxNiw5IEBAIEVPRgorIAkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKyAJICBvbGRvYmpzPSRvYmpsaXN0CisgCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKy0JICAgIGV2YWwgImNtZHM9XCJcJGNvbmNhdF9jbWRzXCIiCisrCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKKyAJICBlbHNlCistCSAgICBldmFsICJjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICBmaQorIAlmaQorICAgICAgIGZpCitAQCAtODI2OCwxMiArOTI2OCwyMyBAQCBFT0YKKyAJICAgICAgKi5sYSkKKyAJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKysJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKyAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorKwkJOzsKKysJICAgICAgLUwqKQorKwkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKyAJCTs7CistCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworKwkgICAgICAtUiopCisrCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorKwkJOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorQEAgLTgyODQsMTIgKzkyOTUsMTQgQEAgRU9GCisgCSAgICAgICoubGEpCisgCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKyAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorKworIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworLQkgICAgICAqKSBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCitAQCAtODMwMywxMCArOTMxNiwxMSBAQCBFT0YKKyAJCSMgdGhlIGxpYnJhcnk6CisgCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisrCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisgCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKK0BAIC04MzE4LDcgKzkzMzIsNyBAQCBFT0YKKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworIAkgICAgICBlc2FjCistCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgorIAkgICAgZG9uZQorIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgCSAgICBuZXdkbHByZWZpbGVzPQorQEAgLTgzMjcsNyArOTM0MSw3IEBAIEVPRgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisgCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCisgCSAgICBkb25lCisgCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAJICBmaQorQEAgLTg0MTIsNyArOTQyNiw3IEBAIHJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworIH0KKyAKKy17IHRlc3QgIiRtb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB9ICYmCisreyB0ZXN0ICIkb3B0X21vZGUiID0gbGluayB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorIAorIAorQEAgLTg0MzIsOSArOTQ0Niw5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZm9yIGFyZworICAgICBkbworICAgICAgIGNhc2UgJGFyZyBpbgorLSAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworLSAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CistICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPXllcyA7OworKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisrICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OworICAgICAgIGVzYWMKKyAgICAgZG9uZQorIAorQEAgLTg0NDMsMjQgKzk0NTcsMjMgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorICAgICBybWRpcnM9CisgCistICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCisgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCistCW9iamRpcj0iJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRvYmpkaXIiCisgICAgICAgZWxzZQorLQlvYmpkaXI9IiRkaXIvJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRkaXIvJG9iamRpciIKKyAgICAgICBmaQorICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0gICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorKyAgICAgIHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgJiYgb2Rpcj0iJGRpciIKKyAKKy0gICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCistICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKysgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgdGhlbgorIAljYXNlICIgJHJtZGlycyAiIGluCistCSAgKiIgJG9iamRpciAiKikgOzsKKy0JICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKysJICAqIiAkb2RpciAiKikgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKKyAJZXNhYworICAgICAgIGZpCisgCitAQCAtODQ4NiwxOCArOTQ5OSwxNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCisgCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKyAJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCisgCSAgZG9uZQorLQkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgorIAorLQkgIGNhc2UgIiRtb2RlIiBpbgorKwkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KKyAJICBjbGVhbikKKy0JICAgIGNhc2UgIiAgJGxpYnJhcnlfbmFtZXMgIiBpbgorLQkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisrCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgorIAkgICAgKiIgJGRsbmFtZSAiKikgOzsKKy0JICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKysJICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OworIAkgICAgZXNhYworLQkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorIAkgICAgOzsKKyAJICB1bmluc3RhbGwpCisgCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KK0BAIC04NTI1LDE5ICs5NTM3LDE5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKyAJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgorIAkgIGZpCisgCisgCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorIAkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgorIAkgIGZpCisgCWZpCisgCTs7CisgCisgICAgICAgKikKKy0JaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KKyAJICBub2V4ZW5hbWU9JG5hbWUKKyAJICBjYXNlICRmaWxlIGluCisgCSAgKi5leGUpCitAQCAtODU0Nyw3ICs5NTU5LDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKyAJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCisgCSAgICA7OworIAkgIGVzYWMKKyAJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KK0BAIC04NTU2LDcgKzk1NjgsNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorIAkgICAgICByZWxpbmtfY29tbWFuZD0KKyAJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKyAJICAgIGVsc2UKKyAJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisgCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorQEAgLTg1NjQsMTIgKzk1NzYsMTIgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorIAkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKyAJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKyAJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0kbmFtZSIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorIAkgICAgZmkKKyAJICBmaQorIAlmaQorQEAgLTg1NzcsNyArOTU4OSw2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgICBlc2FjCisgICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgIGRvbmUKKy0gICAgb2JqZGlyPSIkb3JpZ29iamRpciIKKyAKKyAgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KK0BAIC04NTg5LDE2ICs5NjAwLDE2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCisteyB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG1vZGUiID0gY2xlYW47IH0gJiYKKyt7IHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisgCistdGVzdCAteiAiJG1vZGUiICYmIHsKKyt0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorIH0KKyAKKyB0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKy0gIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgCisgaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICAgZXZhbCBleGVjICIkZXhlY19jbWQiCitkaWZmIC0tZ2l0IGEvbHRvcHRpb25zLm00IGIvbHRvcHRpb25zLm00CitpbmRleCA1ZWYxMmNlLi4xN2NmZDUxIDEwMDY0NAorLS0tIGEvbHRvcHRpb25zLm00CisrKysgYi9sdG9wdGlvbnMubTQKK0BAIC04LDcgKzgsNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA2IGx0b3B0aW9ucy5tNAorKyMgc2VyaWFsIDcgbHRvcHRpb25zLm00CisgCisgIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KKyBBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCitkaWZmIC0tZ2l0IGEvbHR2ZXJzaW9uLm00IGIvbHR2ZXJzaW9uLm00CitpbmRleCBiZjg3Zjc3Li45YzdiNWQ0IDEwMDY0NAorLS0tIGEvbHR2ZXJzaW9uLm00CisrKysgYi9sdHZlcnNpb24ubTQKK0BAIC03LDE3ICs3LDE3IEBACisgIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgR2VuZXJhdGVkIGZyb20gbHR2ZXJzaW9uLmluLgorKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKyAKKy0jIHNlcmlhbCAzMTM0IGx0dmVyc2lvbi5tNAorKyMgc2VyaWFsIDMyOTMgbHR2ZXJzaW9uLm00CisgIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorIAorLW00X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuMi43YV0pCistbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzEzNF0pCisrbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40XSkKKyttNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMjkzXSkKKyAKKyBBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorLVttYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKytbbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCisgX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKKyBdKQorZGlmZiAtLWdpdCBhL2x0fm9ic29sZXRlLm00IGIvbHR+b2Jzb2xldGUubTQKK2luZGV4IGJmOTJiNWUuLmM1NzNkYTkgMTAwNjQ0CistLS0gYS9sdH5vYnNvbGV0ZS5tNAorKysrIGIvbHR+b2Jzb2xldGUubTQKK0BAIC03LDcgKzcsNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA0IGx0fm9ic29sZXRlLm00CisrIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorIAorICMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorICMKK2RpZmYgLS1naXQgYS9vcGNvZGVzL2NvbmZpZ3VyZSBiL29wY29kZXMvY29uZmlndXJlCitpbmRleCBjOWMwNGNlLi4zMTE0MWQ5IDEwMDc1NQorLS0tIGEvb3Bjb2Rlcy9jb25maWd1cmUKKysrKyBiL29wY29kZXMvY29uZmlndXJlCitAQCAtNjQ4LDYgKzY0OCw5IEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorK2FjX2N0X0FSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NjAsNiArNzYzLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3RhcmdldHMKKyBlbmFibGVfd2Vycm9yCitAQCAtMTQyMCw2ICsxNDI0LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCitAQCAtNTExMCw4ICs1MTE2LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTUxNTEsNyArNTE1Nyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU4MzcsOCArNTg0Myw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01ODg3LDYgKzU4OTMsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5MDMsNiArNTk4MywxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjA3MSw3ICs2MTU2LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTYyMjUsNiArNjMxMSwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYyNDAsOSArNjM0MSwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjI1OCw3ICs2NTEyLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjI3OCwxMSArNjUzMiwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02Mjk4LDcgKzY1NTYsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjMxNyw2ICs2NTc1LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MzI4LDE2ICs2NTkwLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorIAorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisgCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisgCisgCisgCitAQCAtNjY3OSw4ICs2OTk3LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NzE2LDYgKzcwMzQsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjc1Nyw2ICs3MDc2LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY3NjgsNyArNzA5OSw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY3OTQsOCArNzEyNSw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY4MDUsOCArNzEzNiw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY4NDMsNiArNzE3NCwxNiBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworIAorIAorIAorQEAgLTY4NjQsNiArNzIwNSw0NSBAQCBmaQorIAorIAorIAorKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworKworICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitAQCAtNzA3MCw2ICs3NDUwLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03NjMzLDYgKzgxMzAsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzc5OCw3ICs4Mjk3LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc4ODcsNyArODM4Nyw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODE4NSw4ICs4Njg1LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MzUyLDYgKzg4NTAsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04NDE0LDcgKzg5MTgsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODQ3MSwxMyArODk3NSwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04NTM4LDYgKzkwNDYsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04ODg4LDcgKzk0MDEsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04OTM2LDcgKzk0NTAsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04OTg3LDEyICs5NTAxLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTkwMDYsOCArOTUyMCw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05MDI1LDggKzk1MzksOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTA3Miw4ICs5NTg2LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkyMDMsNyArOTcxNywxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MjE2LDIyICs5NzM2LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MjQzLDcgKzk3NzAsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyNTYsMjIgKzk3ODksMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MzE2LDIwICs5ODU2LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTM5MCw3ICs5OTczLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTM5OCw3ICs5OTgxLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTQxNCw3ICs5OTk3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk0MzgsMTAgKzEwMDIxLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTUyMCwyMyArMTAxMDMsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk2MjEsNyArMTAyMTcsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05NjQwLDkgKzEwMjM2LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMjE4LDggKzEwODE0LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMjUyLDEzICsxMDg0OSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAzNTAsNyArMTEwMDUsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTExOTAsMTAgKzExODQ1LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEyOTYsMTAgKzExOTUxLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTI0NTAsNyArMTMxMDUsNyBAQCBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICMgc2luY2UgbGliYmZkIG1heSBub3QgcHVsbCBpbiB0aGUgZW50aXJldHkgb2YgbGliaWJlcnR5LgorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICAgY2FzZSAiJHtob3N0fSIgaW4KK0BAIC0xMzQyMiwxMyArMTQwNzcsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzQ0MywxNCArMTQxMDUsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTM0ODMsMTIgKzE0MTQ4LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzNTQzLDggKzE0MjA4LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xMzU1NCwxMiArMTQyMjQsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTEzNTc1LDcgKzE0MjQ3LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTM2MTEsNiArMTQyODIsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE0MzY3LDcgKzE1MDM5LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNDQ3MCwxOSArMTUxNDMsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTQ1MTIsNiArMTUyMDgsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTQ1MjEsNiArMTUyMjMsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE0NjM1LDEyICsxNTM0MCwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNDcyNyw5ICsxNTQzMiw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE0NzQ1LDYgKzE1NDQ3LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNDc3NywyMTAgKzE1NDgyLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9vcGNvZGVzL2NvbmZpZ3VyZS5hYyBiL29wY29kZXMvY29uZmlndXJlLmFjCitpbmRleCBiOTNlODU1Li40M2JhOTc2IDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9jb25maWd1cmUuYWMKKysrKyBiL29wY29kZXMvY29uZmlndXJlLmFjCitAQCAtMTY3LDcgKzE2Nyw3IEBAIGNoYW5nZXF1b3RlKCwpZG5sCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICAgY2FzZSAiJHtob3N0fSIgaW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzc2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA3NDNmNDJhYWVjYjFhYjg5ZWJhMGVhZjVlODhlZDY3YmJmM2JhMzA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozNzoxMCArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzEzXSBBZGQgdGhlIGFybXY1ZSBhcmNoaXRlY3R1cmUgdG8gYmludXRpbHMKKworQmludXRpbHMgaGFzIGEgY29tbWVudCB0aGF0IGluZGljYXRlcyBpdCBpcyBzdXBwb3NlZCB0byBtYXRjaCBnY2MgZm9yCithbGwgb2YgdGhlIHN1cHBvcnQgIi1tYXJjaD0iIHNldHRpbmdzLCBidXQgaXQgd2FzIGxhY2tpbmcgdGhlIGFybXY1ZSBzZXR0aW5nLgorVGhpcyB3YXMgYSBzaW1wbGUgd2F5IHRvIGFkZCBpdCwgYXMgdGh1bWIgaW5zdHJ1Y3Rpb25zIHNob3VsZG4ndCBiZSBnZW5lcmF0ZWQKK2J5IHRoZSBjb21waWxlciBhbnl3YXkuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitVcHN0cmVhbSBtYWludGFpbmVyIGluZGljYXRlZCB0aGF0IHdlIHNob3VsZCBub3QgYmUgdXNpbmcgYXJtdjVlLCBldmVuCit0aG91Z2ggaXQgaXMgYSBsZWdhbCBhcmNoaWN0dXJlIGRlZmluZWQgYnkgb3VyIGdjYy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdhcy9jb25maWcvdGMtYXJtLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtYXJtLmMgYi9nYXMvY29uZmlnL3RjLWFybS5jCitpbmRleCAyZGI2YzJkLi5hYjQ4MTY4IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZy90Yy1hcm0uYworKysrIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYworQEAgLTI0NDYzLDYgKzI0NDYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fYXJjaF9vcHRpb25fdGFibGUgYXJtX2FyY2hzW10gPQorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjR0IiwJQVJNX0FSQ0hfVjRULAkgRlBVX0FSQ0hfRlBBKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY0dHhtIiwJQVJNX0FSQ0hfVjRUeE0sCSBGUFVfQVJDSF9GUEEpLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjUiLAlBUk1fQVJDSF9WNSwJIEZQVV9BUkNIX1ZGUCksCisrICBBUk1fQVJDSF9PUFQgKCJhcm12NWUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dCIsCUFSTV9BUkNIX1Y1VCwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXR4bSIsCUFSTV9BUkNIX1Y1VHhNLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dGUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNjhmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA0ZDNhOWY2ZGI2MDQwNTUzNDgzMzJiNTY4ODlkNDY2YzA1OGZhNWYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozOTowMSArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzEzXSBkb24ndCBsZXQgdGhlIGRpc3RybyBjb21waWxlciBwb2ludCB0byB0aGUgd3JvbmcKKyBpbnN0YWxsYXRpb24gbG9jYXRpb24KKworVGhhbmtzIHRvIFJQIGZvciBoZWxwaW5nIGZpbmQgdGhlIHNvdXJjZSBjb2RlIGNhdXNpbmcgdGhlIGlzc3VlLgorCisyMDEwLzA4LzEzCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliaWJlcnR5L01ha2VmaWxlLmluIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJpYmVydHkvTWFrZWZpbGUuaW4gYi9saWJpYmVydHkvTWFrZWZpbGUuaW4KK2luZGV4IDliODc3MjAuLmZmNDNmNTMgMTAwNjQ0CistLS0gYS9saWJpYmVydHkvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorQEAgLTM2MSw3ICszNjEsOCBAQCBpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisgIyBtdWx0aWxpYi1zcGVjaWZpYyBmbGFncywgaXQncyBvdmVycmlkZGVuIGJ5IEZMQUdTX1RPX1BBU1MgZnJvbSB0aGUKKyAjIGRlZmF1bHQgbXVsdGlsaWIsIHNvIHdlIGhhdmUgdG8gdGFrZSBDRkxBR1MgaW50byBhY2NvdW50IGFzIHdlbGwsCisgIyBzaW5jZSBpdCB3aWxsIGJlIHBhc3NlZCB0aGUgbXVsdGlsaWIgZmxhZ3MuCistTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKysjTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKytNVUxUSU9TRElSID0gIiIKKyBpbnN0YWxsX3RvX2xpYmRpcjogYWxsCisgCWlmIHRlc3QgLW4gIiR7dGFyZ2V0X2hlYWRlcl9kaXJ9IjsgdGhlbiBcCisgCQkke21raW5zdGFsbGRpcnN9ICQoREVTVERJUikkKGxpYmRpcikvJChNVUxUSU9TRElSKTsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktVXBzdHJlYW0tU3RhdHVzLUluYXBwcm9wcmlhdGUtZGlzdHJpYnV0aW9uLWNvZGVzb3VyYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODAwNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktVXBzdHJlYW0tU3RhdHVzLUluYXBwcm9wcmlhdGUtZGlzdHJpYnV0aW9uLWNvZGVzb3VyYy5wYXRjaApAQCAtMCwwICsxLDI3OCBAQAorRnJvbSBlMDJlMTE5YjI3OGMzZjQwNGU5NzY2OWU3MTgwY2FjOTQ0MTM0YzkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0MTowNCArMDAwMAorU3ViamVjdDogW1BBVENIIDA5LzEzXSBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjoKKyBjb2Rlc291cmNlcnldCisKK1BhdGNoIG9yaWdpbmFsbHkgY3JlYXRlZCBieSBNYXJrIEhhdGxlLCBmb3J3YXJkLXBvcnRlZCB0bworYmludXRpbHMgMi4yMSBieSBTY290dCBHYXJtYW4uCisKK3B1cnBvc2U6ICB3YXJuIGZvciB1c2VzIG9mIHN5c3RlbSBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcKKworQ29kZSBNZXJnZWQgZnJvbSBTb3VyY2VyeSBHKysgYmludXRpbHMgMi4xOSAtIDQuNC0yNzcKKworMjAwOC0wNy0wMiAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICBsZC8KKyAgICAqIGxkLmggKGFyZ3NfdHlwZSk6IEFkZCBlcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGQudGV4aW5mbyAoLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogRG9jdW1lbnQuCisgICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBDaGVjaworICAgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGRtYWluLmMgKG1haW4pOiBJbml0aWFsaXplCisgICAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZXhzdXAuYyAoZW51bSBvcHRpb25fdmFsdWVzKTogQWRkCisgICAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMuCisgICAgKGxkX29wdGlvbnMpOiBBZGQgLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLgorICAgIChwYXJzZV9hcmdzKTogSGFuZGxlIG5ldyBvcHRpb24uCisKKzIwMDctMDYtMTMgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgbGQvCisgICAgKiBjb25maWcuaW46IFJlZ2VuZXJhdGUuCisgICAgKiBsZC5oIChhcmdzX3R5cGUpOiBBZGQgcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkLnRleGluZm8gKC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcyk6IERvY3VtZW50LgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogQ2hlY2sKKyAgICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZQorICAgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGV4c3VwLmMgKGVudW0gb3B0aW9uX3ZhbHVlcyk6IEFkZAorICAgIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLgorICAgIChsZF9vcHRpb25zKTogQWRkIC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy4KKyAgICAocGFyc2VfYXJncyk6IEhhbmRsZSBuZXcgb3B0aW9uLgorCisyMDA3LTA0LTIwICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIE1lcmdlIGZyb20gU291cmNlcnkgRysrIGJpbnV0aWxzIDIuMTc6CisKKyAgICAyMDA3LTAzLTIwICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKyAgICBCYXNlZCBvbiBwYXRjaCBieSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+LgorICAgIGxkLworICAgICogY29uZmlndXJlLmluICgtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogTmV3IG9wdGlvbi4KKyAgICAqIGNvbmZpZ3VyZSwgY29uZmlnLmluOiBSZWdlbmVyYXRlLgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogSWYKKyAgICBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyBkZWZpbmVkLCB3YXJuIGZvciB1c2Ugb2YgL2xpYiwKKyAgICAvdXNyL2xpYiwgL3Vzci9sb2NhbC9saWIgb3IgL3Vzci9YMTFSNi9saWIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2NvbmZpZy5pbiAgICB8ICAzICsrKworIGxkL2NvbmZpZ3VyZSAgICB8IDE0ICsrKysrKysrKysrKysrCisgbGQvY29uZmlndXJlLmFjIHwgMTAgKysrKysrKysrKworIGxkL2xkLmggICAgICAgICB8ICA4ICsrKysrKysrCisgbGQvbGQudGV4aW5mbyAgIHwgMTIgKysrKysrKysrKysrCisgbGQvbGRmaWxlLmMgICAgIHwgMTcgKysrKysrKysrKysrKysrKysKKyBsZC9sZGxleC5oICAgICAgfCAgMiArKworIGxkL2xkbWFpbi5jICAgICB8ICAyICsrCisgbGQvbGV4c3VwLmMgICAgIHwgMTYgKysrKysrKysrKysrKysrKworIDkgZmlsZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlnLmluIGIvbGQvY29uZmlnLmluCitpbmRleCAyYWI0ODQ0Li43NjZkMjNjIDEwMDY0NAorLS0tIGEvbGQvY29uZmlnLmluCisrKysgYi9sZC9jb25maWcuaW4KK0BAIC0xMSw2ICsxMSw5IEBACisgICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworICN1bmRlZiBFTkFCTEVfTkxTCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMgKi8KKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysKKyAvKiBBZGRpdGlvbmFsIGV4dGVuc2lvbiBhIHNoYXJlZCBvYmplY3QgbWlnaHQgaGF2ZS4gKi8KKyAjdW5kZWYgRVhUUkFfU0hMSUJfRVhURU5TSU9OCisgCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCitpbmRleCAyZmJhZWJmLi41NzI2YTA4IDEwMDc1NQorLS0tIGEvbGQvY29uZmlndXJlCisrKysgYi9sZC9jb25maWd1cmUKK0BAIC03ODcsNiArNzg3LDcgQEAgd2l0aF9saWJfcGF0aAorIGVuYWJsZV90YXJnZXRzCisgZW5hYmxlXzY0X2JpdF9iZmQKKyB3aXRoX3N5c3Jvb3QKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9nb2xkCisgZW5hYmxlX2dvdAorIGVuYWJsZV93ZXJyb3IKK0BAIC0xNDQzLDYgKzE0NDQsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyAgIC0tZW5hYmxlLXRhcmdldHMgICAgICAgIGFsdGVybmF0aXZlIHRhcmdldCBjb25maWd1cmF0aW9ucworICAgLS1lbmFibGUtNjQtYml0LWJmZCAgICAgNjQtYml0IHN1cHBvcnQgKG9uIGhvc3RzIHdpdGggbmFycm93ZXIgd29yZCBzaXplcykKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLWdvbGRbPUFSR10gICAgIGJ1aWxkIGdvbGQgW0FSRz17ZGVmYXVsdCx5ZXMsbm99XQorICAgLS1lbmFibGUtZ290PTx0eXBlPiAgICAgR09UIGhhbmRsaW5nIHNjaGVtZSAodGFyZ2V0LCBzaW5nbGUsIG5lZ2F0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlnb3QpCitAQCAtMTYzMjMsNyArMTYzMjYsMTggQEAgZWxzZQorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorIAorKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdvdCB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfZ290K3NldH0iID0gc2V0OyB0aGVuIDoKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUuYWMgYi9sZC9jb25maWd1cmUuYWMKK2luZGV4IDFiZGRmYzkuLmU5ZWRiN2YgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUuYWMKKysrKyBiL2xkL2NvbmZpZ3VyZS5hYworQEAgLTk0LDYgKzk0LDE2IEBAIEFDX1NVQlNUKHVzZV9zeXNyb290KQorIEFDX1NVQlNUKFRBUkdFVF9TWVNURU1fUk9PVCkKKyBBQ19TVUJTVChUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgWzFdLAorKyAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgZG5sIFVzZSAtLWVuYWJsZS1nb2xkIHRvIGRlY2lkZSBpZiB0aGlzIGxpbmtlciBzaG91bGQgYmUgdGhlIGRlZmF1bHQuCisgZG5sICJpbnN0YWxsX2FzX2RlZmF1bHQiIGlzIHNldCB0byBmYWxzZSBpZiBnb2xkIGlzIHRoZSBkZWZhdWx0IGxpbmtlci4KKyBkbmwgImluc3RhbGxlZF9saW5rZXIiIGlzIHRoZSBpbnN0YWxsZWQgQkZEIGxpbmtlciBuYW1lLgorZGlmZiAtLWdpdCBhL2xkL2xkLmggYi9sZC9sZC5oCitpbmRleCBmNzczY2U3Li5hZGJhMGY2IDEwMDY0NAorLS0tIGEvbGQvbGQuaAorKysrIGIvbGQvbGQuaAorQEAgLTE2MSw2ICsxNjEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgeworICAgLyogSWYgVFJVRSB3ZSdsbCBqdXN0IHByaW50IHRoZSBkZWZhdWx0IG91dHB1dCBvbiBzdGRvdXQuICAqLworICAgYmZkX2Jvb2xlYW4gcHJpbnRfb3V0cHV0X2Zvcm1hdDsKKyAKKysgIC8qIElmIFRSVUUgKHRoZSBkZWZhdWx0KSB3YXJuIGZvciB1c2VzIG9mIHN5c3RlbSBkaXJlY3RvcmllcyB3aGVuCisrICAgICBjcm9zcyBsaW5raW5nLiAgKi8KKysgIGJmZF9ib29sZWFuIHBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrCisrICAvKiBJZiBUUlVFIChkZWZhdWx0IEZBTFNFKSBnaXZlIGFuIGVycm9yIGZvciB1c2VzIG9mIHN5c3RlbQorKyAgICAgZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nIGluc3RlYWQgb2YgYSB3YXJuaW5nLiAgKi8KKysgIGJmZF9ib29sZWFuIGVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrCisgICAvKiBCaWcgb3IgbGl0dGxlIGVuZGlhbiBhcyBzZXQgb24gY29tbWFuZCBsaW5lLiAgKi8KKyAgIGVudW0gZW5kaWFuX2VudW0gZW5kaWFuOworIAorZGlmZiAtLWdpdCBhL2xkL2xkLnRleGluZm8gYi9sZC9sZC50ZXhpbmZvCitpbmRleCA1MDI1ODJjLi5kYWUxNjhhIDEwMDY0NAorLS0tIGEvbGQvbGQudGV4aW5mbworKysrIGIvbGQvbGQudGV4aW5mbworQEAgLTIyMTIsNiArMjIxMiwxOCBAQCBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIG9yaWdpbmFsIGxpbmtlZCBmaWxlIGRvZXMgbm90IGNoYW5nZS4KKyAKKyBQYXNzaW5nIEBjb2Rle25vbmV9IGZvciBAdmFye3N0eWxlfSBkaXNhYmxlcyB0aGUgc2V0dGluZyBmcm9tIGFueQorIEBjb2Rley0tYnVpbGQtaWR9IG9wdGlvbnMgZWFybGllciBvbiB0aGUgY29tbWFuZCBsaW5lLgorKworK0BraW5kZXggLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQGl0ZW0gLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIHN1Y2ggYXMKKytAZmlsZXsvdXNyL2xpYn0gd2hlbiBjcm9zcyBsaW5raW5nLiAgVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZQorK2luIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoIGRpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QKKytsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworK0BraW5kZXggLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQGl0ZW0gLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrR2l2ZSBhbiBlcnJvciBpbnN0ZWFkIG9mIGEgd2FybmluZyBmb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZworK3N5c3RlbSBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcuCisgQGVuZCB0YWJsZQorIAorIEBjIG1hbiBlbmQKK2RpZmYgLS1naXQgYS9sZC9sZGZpbGUuYyBiL2xkL2xkZmlsZS5jCitpbmRleCA3ODJlZDdmLi4xOWE5YWI0IDEwMDY0NAorLS0tIGEvbGQvbGRmaWxlLmMKKysrKyBiL2xkL2xkZmlsZS5jCitAQCAtMTE0LDYgKzExNCwyMyBAQCBsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgYmZkX2Jvb2xlYW4gY21kbGluZSkKKyAgICAgbmV3X2RpcnMtPm5hbWUgPSBjb25jYXQgKGxkX3N5c3Jvb3QsIG5hbWUgKyAxLCAoY29uc3QgY2hhciAqKSBOVUxMKTsKKyAgIGVsc2UKKyAgICAgbmV3X2RpcnMtPm5hbWUgPSB4c3RyZHVwIChuYW1lKTsKKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworKyAgJiYgKCghc3RybmNtcCAobmFtZSwgIi9saWIiLCA0KSkKKysgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL2xpYiIsIDgpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvbG9jYWwvbGliIiwgMTQpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvWDExUjYvbGliIiwgMTQpKSkpCisrICAgeworKyAgICAgaWYgKGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICAgICBlaW5mbyAoXygiJVglUDogZXJyb3I6IGxpYnJhcnkgc2VhcmNoIHBhdGggXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvblxuIiksIG5hbWUpOworKyAgICAgZWxzZQorKyAgICAgICBlaW5mbyAoXygiJVA6IHdhcm5pbmc6IGxpYnJhcnkgc2VhcmNoIHBhdGggXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvblxuIiksIG5hbWUpOworKyAgIH0KKysjZW5kaWYKKysKKyB9CisgCisgLyogVHJ5IHRvIG9wZW4gYSBCRkQgZm9yIGEgbGFuZ19pbnB1dF9zdGF0ZW1lbnQuICAqLworZGlmZiAtLWdpdCBhL2xkL2xkbGV4LmggYi9sZC9sZGxleC5oCitpbmRleCBlM2U5YjI0Li4yOTQ4N2EzIDEwMDY0NAorLS0tIGEvbGQvbGRsZXguaAorKysrIGIvbGQvbGRsZXguaAorQEAgLTE0MCw2ICsxNDAsOCBAQCBlbnVtIG9wdGlvbl92YWx1ZXMKKyAgIE9QVElPTl9JR05PUkVfVU5SRVNPTFZFRF9TWU1CT0wsCisgICBPUFRJT05fUFVTSF9TVEFURSwKKyAgIE9QVElPTl9QT1BfU1RBVEUsCisrICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUywKKysgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLAorIH07CisgCisgLyogVGhlIGluaXRpYWwgcGFyc2VyIHN0YXRlcy4gICovCitkaWZmIC0tZ2l0IGEvbGQvbGRtYWluLmMgYi9sZC9sZG1haW4uYworaW5kZXggODE4ZDEwOC4uNTRjNDlmMiAxMDA2NDQKKy0tLSBhL2xkL2xkbWFpbi5jCisrKysgYi9sZC9sZG1haW4uYworQEAgLTI2Niw2ICsyNjYsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICBjb21tYW5kX2xpbmUud2Fybl9taXNtYXRjaCA9IFRSVUU7CisgICBjb21tYW5kX2xpbmUud2Fybl9zZWFyY2hfbWlzbWF0Y2ggPSBUUlVFOworICAgY29tbWFuZF9saW5lLmNoZWNrX3NlY3Rpb25fYWRkcmVzc2VzID0gLTE7CisrICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IFRSVUU7CisrICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IEZBTFNFOworIAorICAgLyogV2UgaW5pdGlhbGl6ZSBERU1BTkdMSU5HIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgQ09MTEVDVF9OT19ERU1BTkdMRS4gIFRoZSBnY2MgY29sbGVjdDIgcHJvZ3JhbSB3aWxsIGRlbWFuZ2xlIHRoZQorZGlmZiAtLWdpdCBhL2xkL2xleHN1cC5jIGIvbGQvbGV4c3VwLmMKK2luZGV4IDQ4MTJjOTcuLjIxYjQ5ZGYgMTAwNjQ0CistLS0gYS9sZC9sZXhzdXAuYworKysrIGIvbGQvbGV4c3VwLmMKK0BAIC01MTMsNiArNTEzLDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGRfb3B0aW9uIGxkX29wdGlvbnNbXSA9CisgICB7IHsicG9wLXN0YXRlIiwgbm9fYXJndW1lbnQsIE5VTEwsIE9QVElPTl9QT1BfU1RBVEV9LAorICAgICAnXDAnLCBOVUxMLCBOXygiUG9wIHN0YXRlIG9mIGZsYWdzIGdvdmVybmluZyBpbnB1dCBmaWxlIGhhbmRsaW5nIiksCisgICAgIFRXT19EQVNIRVMgfSwKKysgIHsgeyJuby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIiwgbm9fYXJndW1lbnQsIE5VTEwsCisrICAgICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU30sCisrICAgICdcMCcsIE5VTEwsIE5fKCJEbyBub3Qgd2FybiBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKKysgICAgVFdPX0RBU0hFUyB9LAorKyAgeyB7ImVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLCBub19hcmd1bWVudCwgTlVMTCwKKysgICAgKyAgICAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVN9LAorKyAgICAnXDAnLCBOVUxMLCBOXygiR2l2ZSBhbiBlcnJvciBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKKysgICAgVFdPX0RBU0hFUyB9LAorIH07CisgCisgI2RlZmluZSBPUFRJT05fQ09VTlQgQVJSQVlfU0laRSAobGRfb3B0aW9ucykKK0BAIC0xNDc0LDYgKzE0ODIsMTQgQEAgcGFyc2VfYXJncyAodW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgIGZyZWUgKG9sZHApOworIAkgICAgfQorIAkgIGJyZWFrOworKworKwljYXNlIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTOgorKwkgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gRkFMU0U7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVM6CisrCSAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBUUlVFOworKwkgIGJyZWFrOworIAl9CisgICAgIH0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDUxZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBlZGJlZTlhNjhlMWMyZTExYzA1OTY2OGFhMWQxMzAwMWQ5ZjNkZTA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0MjozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDEwLzEzXSBGaXggcnBhdGggaW4gbGlidG9vbCB3aGVuIHN5c3Jvb3QgaXMgZW5hYmxlZAorCitFbmFibGluZyBzeXNyb290IHN1cHBvcnQgaW4gbGlidG9vbCBleHBvc2VkIGEgYnVnIHdoZXJlIHRoZSBmaW5hbAorbGlicmFyeSBoYWQgYW4gUlBBVEggZW5jb2RlZCBpbnRvIGl0IHdoaWNoIHN0aWxsIHBvaW50ZWQgdG8gdGhlCitzeXNyb290LiBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUgdW50aWwgaXQgZ2V0cyBzb3J0ZWQgb3V0Cit1cHN0cmVhbS4KKworRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgMTAgKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDcwZTg1NmUuLjExZWU2ODQgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTgwMzUsOSArODAzNSwxMSBAQCBFT0YKKyAJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCQkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCistCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKy0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKyAJCWVsc2UKK0BAIC04NzcwLDYgKzg3NzIsMTAgQEAgRU9GCisgICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKyAJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZDU3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDJhNWU4ODEzZDNjNWRiM2UyYjdkOWRmYTJhYjI3Y2NjZDUxMTFlNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQ0OjE0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTNdIENoYW5nZSBkZWZhdWx0IGVtdWxhdGlvbiBmb3IgbWlwczY0Ki0qLWxpbnV4CisKK3dlIGNoYW5nZSB0aGUgZGVmYXVsdCBlbXVsYXRpb25zIHRvIGJlIE42NCBpbnN0ZWFkIG9mIE4zMgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBPRSBjb25maWd1cmF0aW9uIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2NvbmZpZy5iZmQgICB8IDggKysrKy0tLS0KKyBsZC9jb25maWd1cmUudGd0IHwgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZy5iZmQgYi9iZmQvY29uZmlnLmJmZAoraW5kZXggN2JjYjkyYS4uMDNkMmM2ZiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWcuYmZkCisrKysgYi9iZmQvY29uZmlnLmJmZAorQEAgLTEwNjIsMTIgKzEwNjIsMTIgQEAgY2FzZSAiJHt0YXJnfSIgaW4KKyAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2xlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyBtaXBzX2Vjb2ZmX2JlX3ZlYyBtaXBzX2Vjb2ZmX2xlX3ZlYyIKKyAgICAgOzsKKyAgIG1pcHM2NCplbC0qLWxpbnV4KikKKy0gICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9udHJhZF9sZV92ZWMKKy0gICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIgorKyAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjY0X3RyYWRfbGVfdmVjCisrICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl9udHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMiCisgICAgIDs7CisgICBtaXBzNjQqLSotbGludXgqKQorLSAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX250cmFkX2JlX3ZlYworLSAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisrICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmNjRfdHJhZF9iZV92ZWMKKysgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyIKKyAgICAgOzsKKyAgIG1pcHMqZWwtKi1saW51eCopCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfdHJhZF9sZV92ZWMKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUudGd0IGIvbGQvY29uZmlndXJlLnRndAoraW5kZXggMjRlMzZkMS4uNzQwYjJlYSAxMDA2NDQKKy0tLSBhL2xkL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2xkL2NvbmZpZ3VyZS50Z3QKK0BAIC00NzYsMTEgKzQ3NiwxMSBAQCBtaXBzKmVsLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVsbWlwdnh3b3JrcworIG1pcHMqLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVibWlwdnh3b3JrcworIAkJICAgICAgICB0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmVsbWlwdnh3b3JrcyIgOzsKKyBtaXBzKi0qLXdpbmRpc3MpCXRhcmdfZW11bD1lbGYzMm1pcHN3aW5kaXNzIDs7CistbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwbjMyCistCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRsdHNtaXAgZWxmNjRidHNtaXAiCisrbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjY0bHRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRidHNtaXAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CistbWlwczY0Ki0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmJ0c21pcG4zMgorLQkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwbjMyIGVsZjMyYnRzbWlwIGVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIgorK21pcHM2NCotKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmNjRidHNtaXAKKysJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcCBlbGYzMmx0c21pcCBlbGY2NGx0c21pcCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKKyBtaXBzKmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtWExQLWluc3RydWN0aW9ucy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NmZmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtWExQLWluc3RydWN0aW9ucy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDI4IEBACitGcm9tIDQ0ODMyOWVhMDk3NDQ3YWVlNzNkMDUwMDQ1Mjk1YzVhMGFlODUxOWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjUxOjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMTNdIEFkZCBYTFAgaW5zdHJ1Y3Rpb25zIHN1cHBvcnQKKworRnJvbSAyNmFkYjA2Y2U1MTVhYWRmZWMwOGNlMTMxMDliNGI5ODI4N2Y2NzdiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmVidSBQaGlsaXBzIDxucGhpbGlwc0BuZXRsb2dpY21pY3JvLmNvbT4KK0RhdGU6IEZyaSwgMzAgSnVsIDIwMTAgMTU6MTA6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBvcnQgZm9yIE5ldGxvZ2ljIFhMUAorCitVc2luZyB0aGUgbWlwc2lzYTY0cjJubG0gdGFyZ2V0LCBhZGQgc3VwcG9ydCBmb3IgWExQIGZyb20KK05ldGxvZ2ljLiBBbHNvLCB1cGRhdGUgdmVuZG9yIG5hbWUgdG8gTkxNIHdoZXJldmVyIGFwcGxpY2FibGUuCistLS0KKyBiZmQvYW91dHguaCAgICAgICAgICAgfCAgICAxICsKKyBiZmQvYXJjaHVyZXMuYyAgICAgICAgfCAgICAxICsKKyBiZmQvYmZkLWluMi5oICAgICAgICAgfCAgICAxICsKKyBiZmQvY29uZmlnLmJmZCAgICAgICAgfCAgICA1ICsrKysrCisgYmZkL2NwdS1taXBzLmMgICAgICAgIHwgICAgNiArKysrLS0KKyBiZmQvZWxmeHgtbWlwcy5jICAgICAgfCAgICA4ICsrKysrKysrCisgYmludXRpbHMvcmVhZGVsZi5jICAgIHwgICAgMSArCisgZ2FzL2NvbmZpZy90Yy1taXBzLmMgIHwgICAgNCArKystCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgIHwgICAgMyArKysKKyBnYXMvY29uZmlndXJlLnRndCAgICAgfCAgICAyICstCisgaW5jbHVkZS9lbGYvbWlwcy5oICAgIHwgICAgMSArCisgaW5jbHVkZS9vcGNvZGUvbWlwcy5oIHwgICAxMCArKysrKysrKy0tCisgbGQvY29uZmlndXJlLnRndCAgICAgIHwgICAgMiArKworIG9wY29kZXMvbWlwcy1kaXMuYyAgICB8ICAgMTIgKysrKystLS0tLS0tCisgb3Bjb2Rlcy9taXBzLW9wYy5jICAgIHwgICAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxNSBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiZmQvYW91dHguaCAgICAgICAgICAgfCAgMSArCisgYmZkL2FyY2h1cmVzLmMgICAgICAgIHwgIDEgKworIGJmZC9iZmQtaW4yLmggICAgICAgICB8ICAxICsKKyBiZmQvY29uZmlnLmJmZCAgICAgICAgfCAgNSArKysrKworIGJmZC9jcHUtbWlwcy5jICAgICAgICB8ICA2ICsrKystLQorIGJmZC9lbGZ4eC1taXBzLmMgICAgICB8ICA4ICsrKysrKysrCisgYmludXRpbHMvcmVhZGVsZi5jICAgIHwgIDEgKworIGdhcy9jb25maWcvdGMtbWlwcy5jICB8ICA0ICsrKy0KKyBnYXMvY29uZmlndXJlICAgICAgICAgfCAgMyArKysKKyBnYXMvY29uZmlndXJlLnRndCAgICAgfCAgMiArLQorIGluY2x1ZGUvZWxmL21pcHMuaCAgICB8ICAxICsKKyBpbmNsdWRlL29wY29kZS9taXBzLmggfCAxMCArKysrKysrKy0tCisgbGQvY29uZmlndXJlLnRndCAgICAgIHwgIDIgKysKKyBvcGNvZGVzL21pcHMtZGlzLmMgICAgfCAxMiArKysrKy0tLS0tLS0KKyBvcGNvZGVzL21pcHMtb3BjLmMgICAgfCAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxNSBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9hb3V0eC5oIGIvYmZkL2FvdXR4LmgKK2luZGV4IDkzODVhOTguLmE4OGRmOTkgMTAwNjQ0CistLS0gYS9iZmQvYW91dHguaAorKysrIGIvYmZkL2FvdXR4LmgKK0BAIC04MDIsNiArODAyLDcgQEAgTkFNRSAoYW91dCwgbWFjaGluZV90eXBlKSAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsCisgCWNhc2UgYmZkX21hY2hfbWlwc2lzYTY0cjY6CisgCWNhc2UgYmZkX21hY2hfbWlwc19zYjE6CisgCWNhc2UgYmZkX21hY2hfbWlwc194bHI6CisrCWNhc2UgYmZkX21hY2hfbWlwc194bHA6CisgCSAgLyogRklYTUU6IFRoZXNlIHNob3VsZCBiZSBNSVBTMywgTUlQUzQsIE1JUFMxNiwgTUlQUzMyLCBldGMuICAqLworIAkgIGFyY2hfZmxhZ3MgPSBNX01JUFMyOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2JmZC9hcmNodXJlcy5jIGIvYmZkL2FyY2h1cmVzLmMKK2luZGV4IGM5ZmQ2YzguLjU0N2JkMDkgMTAwNjQ0CistLS0gYS9iZmQvYXJjaHVyZXMuYworKysrIGIvYmZkL2FyY2h1cmVzLmMKK0BAIC0xODAsNiArMTgwLDcgQEAgREVTQ1JJUFRJT04KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAJCTY2MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgeyogZGVjaW1hbCAnWExSJyAgKn0KKysuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgeyogZGVjaW1hbCAnWExQJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMiAgICAgICAgICAgMzMKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMyAgICAgICAgICAgMzQKK2RpZmYgLS1naXQgYS9iZmQvYmZkLWluMi5oIGIvYmZkL2JmZC1pbjIuaAoraW5kZXggYzdhMmJiNS4uNDEzYjc3MyAxMDA2NDQKKy0tLSBhL2JmZC9iZmQtaW4yLmgKKysrKyBiL2JmZC9iZmQtaW4yLmgKK0BAIC0xOTY3LDYgKzE5NjcsNyBAQCBlbnVtIGJmZF9hcmNoaXRlY3R1cmUKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCAgICAgICAgICA2NjAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIgICAgICAgICAgNjUwMgorICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIC8qIGRlY2ltYWwgJ1hMUicgICovCisrI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgLyogZGVjaW1hbCAnWExQJyAgKi8KKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMiAgICAgICAgICAgICAzMgorICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMyAgICAgICAgICAgMzQKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlnLmJmZCBiL2JmZC9jb25maWcuYmZkCitpbmRleCAwM2QyYzZmLi4yNzA4NmRiIDEwMDY0NAorLS0tIGEvYmZkL2NvbmZpZy5iZmQKKysrKyBiL2JmZC9jb25maWcuYmZkCitAQCAtMTA0MSw2ICsxMDQxLDExIEBAIGNhc2UgIiR7dGFyZ30iIGluCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbGVfdmVjCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9iZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMiCisgICAgIDs7CisrICBtaXBzaXNhNjQqLSotZWxmKikKKysJdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl90cmFkX2JlX3ZlYworKwl0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgorKwl3YW50NjQ9dHJ1ZQorKwk7OworICAgbWlwcyotKi1lbGYqIHwgbWlwcyotKi1ydGVtcyogfCBtaXBzKi0qLXZ4d29ya3MgfCBtaXBzKi0qLXdpbmRpc3MpCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfYmVfdmVjCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9sZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMiCitkaWZmIC0tZ2l0IGEvYmZkL2NwdS1taXBzLmMgYi9iZmQvY3B1LW1pcHMuYworaW5kZXggYjYxN2FhYS4uMTlhOTlkMSAxMDA2NDQKKy0tLSBhL2JmZC9jcHUtbWlwcy5jCisrKysgYi9iZmQvY3B1LW1pcHMuYworQEAgLTEwMyw3ICsxMDMsOCBAQCBlbnVtCisgICBJX21pcHNvY3Rlb25wLAorICAgSV9taXBzb2N0ZW9uMiwKKyAgIElfeGxyLAorLSAgSV9taWNyb21pcHMKKysgIElfbWljcm9taXBzLAorKyAgSV94bHAKKyB9OworIAorICNkZWZpbmUgTk4oaW5kZXgpICgmYXJjaF9pbmZvX3N0cnVjdFsoaW5kZXgpICsgMV0pCitAQCAtMTUzLDcgKzE1NCw4IEBAIHN0YXRpYyBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYXJjaF9pbmZvX3N0cnVjdFtdID0KKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb25wLCJtaXBzOm9jdGVvbisiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbnApKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24yLCJtaXBzOm9jdGVvbjIiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjIpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHIsICJtaXBzOnhsciIsICAgICAgIEZBTFNFLCBOTihJX3hscikpLAorLSAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLDApCisrICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsTk4oSV9taWNyb21pcHMpKSwKKysgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHAsICJtaXBzOnhscCIsICAgICAgRkFMU0UsIDApCisgfTsKKyAKKyAvKiBUaGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUgaXMgbWlwczozMDAwLCBidXQgd2l0aCBhIG1hY2hpbmUgbnVtYmVyIG9mCitkaWZmIC0tZ2l0IGEvYmZkL2VsZnh4LW1pcHMuYyBiL2JmZC9lbGZ4eC1taXBzLmMKK2luZGV4IDBkZjdhYmYuLmQyNjhlODYgMTAwNjQ0CistLS0gYS9iZmQvZWxmeHgtbWlwcy5jCisrKysgYi9iZmQvZWxmeHgtbWlwcy5jCitAQCAtNjYwOCw2ICs2NjA4LDkgQEAgX2JmZF9lbGZfbWlwc19tYWNoIChmbGFnd29yZCBmbGFncykKKyAgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfeGxyOworIAorKwljYXNlIEVfTUlQU19NQUNIX1hMUDoKKysgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc194bHA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgc3dpdGNoIChmbGFncyAmIEVGX01JUFNfQVJDSCkKKyAJeworQEAgLTExODc4LDYgKzExODgxLDEwIEBAIG1pcHNfc2V0X2lzYV9mbGFncyAoYmZkICphYmZkKQorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9PQ1RFT04yOworICAgICAgIGJyZWFrOworIAorKwljYXNlIGJmZF9tYWNoX21pcHNfeGxwOgorKwkgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9YTFA7CisrCSAgYnJlYWs7CisrCisgICAgIGNhc2UgYmZkX21hY2hfbWlwc2lzYTMyOgorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzMyOworICAgICAgIGJyZWFrOworQEAgLTE0NzY1LDYgKzE0NzcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorICAgeyBiZmRfbWFjaF9taXBzX2xvb25nc29uXzNhLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorKyAgeyBiZmRfbWFjaF9taXBzX3hscCwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKyAKKyAgIC8qIE1JUFM2NCBleHRlbnNpb25zLiAgKi8KKyAgIHsgYmZkX21hY2hfbWlwc2lzYTY0cjIsIGJmZF9tYWNoX21pcHNpc2E2NCB9LAorZGlmZiAtLWdpdCBhL2JpbnV0aWxzL3JlYWRlbGYuYyBiL2JpbnV0aWxzL3JlYWRlbGYuYworaW5kZXggMGMwMGIyZi4uNmU5ZDVlNCAxMDA2NDQKKy0tLSBhL2JpbnV0aWxzL3JlYWRlbGYuYworKysrIGIvYmludXRpbHMvcmVhZGVsZi5jCitAQCAtMjg5OCw2ICsyODk4LDcgQEAgZ2V0X21hY2hpbmVfZmxhZ3MgKHVuc2lnbmVkIGVfZmxhZ3MsIHVuc2lnbmVkIGVfbWFjaGluZSkKKyAJICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMjogc3RyY2F0IChidWYsICIsIG9jdGVvbjIiKTsgYnJlYWs7CisgCSAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjM6IHN0cmNhdCAoYnVmLCAiLCBvY3Rlb24zIik7IGJyZWFrOworIAkgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxyIik7IGJyZWFrOworKwkJY2FzZSBFX01JUFNfTUFDSF9YTFA6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxwIik7IGJyZWFrOworIAkgICAgY2FzZSAwOgorIAkgICAgLyogV2Ugc2ltcGx5IGlnbm9yZSB0aGUgZmllbGQgaW4gdGhpcyBjYXNlIHRvIGF2b2lkIGNvbmZ1c2lvbjoKKyAJICAgICAgIE1JUFMgRUxGIGRvZXMgbm90IHNwZWNpZnkgRUZfTUlQU19NQUNILCBpdCBpcyBhIEdOVQorZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtbWlwcy5jIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK2luZGV4IGMzZTNlMmEuLjhkNjQzNDQgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlnL3RjLW1pcHMuYworKysrIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK0BAIC01NTEsNiArNTUxLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1JNNzAwMCAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9WUjU1MDAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC01ODAsNiArNTgxLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgICYmIG1pcHNfb3B0cy5pc2EgIT0gSVNBX01JUFMzKSAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9SNDMwMCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC0xODY4Miw3ICsxODY4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyBtaXBzX2NwdV9pbmZvX3RhYmxlW10gPQorICAgLyogQnJvYWRjb20gWExQLgorICAgICAgWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiB0aGF0IGl0IGlzCisgICAgICBNSVBTNjRSMiByYXRoZXIgdGhhbiBNSVBTNjQuICAqLworLSAgeyAieGxwIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9YTFIgfSwKKysgIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExQIH0sCisgCisgICAvKiBFbmQgbWFya2VyICovCisgICB7IE5VTEwsIDAsIDAsIDAsIDAgfQorZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUgYi9nYXMvY29uZmlndXJlCitpbmRleCAwNzQ4ODZmLi44MDkxZjJmIDEwMDc1NQorLS0tIGEvZ2FzL2NvbmZpZ3VyZQorKysrIGIvZ2FzL2NvbmZpZ3VyZQorQEAgLTEyODA4LDYgKzEyODA4LDkgQEAgX0FDRU9GCisgCSAgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsKQorIAkgICAgbWlwc19jcHU9bWlwczY0cjYKKyAJICAgIDs7CisrCSAgbWlwc2lzYTY0cjJubG0gfCBtaXBzaXNhNjRyMm5sbWVsKQorKwkJbWlwc19jcHU9eGxwCisrCQk7OworIAkgIG1pcHN0eDM5IHwgbWlwc3R4MzllbCkKKyAJICAgIG1pcHNfY3B1PXIzOTAwCisgCSAgICA7OworZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUudGd0IGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDFkOTJmNTUuLjA2ZThiNGYgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlndXJlLnRndAorKysrIGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK0BAIC0zMzIsNyArMzMyLDcgQEAgY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgorICAgbWlwcy0qLXN5c3Y0Kk1QKiB8IG1pcHMtKi1nbnUqKQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCisgCQkJCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CistICBtaXBzLSotZWxmKiB8IG1pcHMtKi1ydGVtcyopCQlmbXQ9ZWxmIDs7CisrICBtaXBzLSotZWxmKiB8IG1pcHMtKi1ydGVtcyopCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzLSotbmV0YnNkKikJCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzLSotb3BlbmJzZCopCQkJZm10PWVsZiBlbT10bWlwcyA7OworIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL21pcHMuaCBiL2luY2x1ZGUvZWxmL21pcHMuaAoraW5kZXggMmVkNmFjZC4uZTU0MWY1MCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZWxmL21pcHMuaAorKysrIGIvaW5jbHVkZS9lbGYvbWlwcy5oCitAQCAtMjg1LDYgKzI4NSw3IEBAIEVORF9SRUxPQ19OVU1CRVJTIChSX01JUFNfbWF4ZXh0KQorICNkZWZpbmUgRV9NSVBTX01BQ0hfU0IxICAgICAgICAgMHgwMDhhMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OCTB4MDA4YjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX1hMUiAgICAgCTB4MDA4YzAwMDAKKysjZGVmaW5lIEVfTUlQU19NQUNIX1hMUCAgICAgICAgIDB4MDA4ZjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjIJMHgwMDhkMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OMwkweDAwOGUwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF81NDAwCTB4MDA5MTAwMDAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL29wY29kZS9taXBzLmggYi9pbmNsdWRlL29wY29kZS9taXBzLmgKK2luZGV4IGVmMjYxNjcuLmVmNTNlYzYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL29wY29kZS9taXBzLmgKKysrKyBiL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorQEAgLTEyMjcsOCArMTIyNywxMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CisgI2RlZmluZSBJTlNOX0xPT05HU09OXzJGICAgICAgICAgIDB4ODAwMDAwMDAKKyAvKiBMb29uZ3NvbiAzQS4gICovCisgI2RlZmluZSBJTlNOX0xPT05HU09OXzNBICAgICAgICAgIDB4MDAwMDA0MDAKKy0vKiBSTUkgWGxyIGluc3RydWN0aW9uICovCistI2RlZmluZSBJTlNOX1hMUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorKy8qIE5ldGxvZ2ljIFhsciBpbnN0cnVjdGlvbiAqLworKyNkZWZpbmUgSU5TTl9YTFIJCTB4MDAwMDAwMjAKKysvKiBOZXRsb2dpYyBYbFAgaW5zdHJ1Y3Rpb24gKi8KKysjZGVmaW5lIElOU05fWExQCQkweDAwMDAwMDQwCisgCisgLyogRFNQIEFTRSAqLworICNkZWZpbmUgQVNFX0RTUAkJCTB4MDAwMDAwMDEKK0BAIC0xMzI0LDYgKzEzMjYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CisgI2RlZmluZSBDUFVfT0NURU9OUAk2NjAxCisgI2RlZmluZSBDUFVfT0NURU9OMgk2NTAyCisgI2RlZmluZSBDUFVfWExSICAgICAJODg3NjgyICAgCS8qIGRlY2ltYWwgJ1hMUicgICAqLworKyNkZWZpbmUgQ1BVX1hMUCAgICAgICAgIDg4NzY4MCAgICAgIC8qIGRlY2ltYWwgJ1hMUCcgICAqLworIAorIC8qIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBDUFUgaXMgaW5jbHVkZWQgaW4gSU5TTl8qIG1hc2sgTUFTSy4gICovCisgCitAQCAtMTM5OCw2ICsxNDAxLDkgQEAgY3B1X2lzX21lbWJlciAoaW50IGNwdSwgdW5zaWduZWQgaW50IG1hc2spCisgICAgICAgcmV0dXJuICgobWFzayAmIElOU05fSVNBX01BU0spID09IElOU05fSVNBMzJSNikKKyAJICAgICB8fCAoKG1hc2sgJiBJTlNOX0lTQV9NQVNLKSA9PSBJTlNOX0lTQTY0UjYpOworIAorKyAgICBjYXNlIENQVV9YTFA6CisrICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9YTFApICE9IDA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDc0MGIyZWEuLjRkZjEzYTcgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUudGd0CisrKysgYi9sZC9jb25maWd1cmUudGd0CitAQCAtNDYyLDYgKzQ2Miw4IEBAIG1pcHMqZWwtc2RlLWVsZiopCXRhcmdfZW11bD1lbGYzMmx0c21pcAorIG1pcHMqLXNkZS1lbGYqIHwgbWlwcyotbXRpLWVsZiogfCBtaXBzKi1pbWctZWxmKikKKyAJCQl0YXJnX2VtdWw9ZWxmMzJidHNtaXAKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcCBlbGYzMmJ0c21pcG4zMiBlbGY2NGJ0c21pcCBlbGYzMmx0c21pcG4zMiBlbGY2NGx0c21pcCIgOzsKKyttaXBzaXNhNjQqLSotZWxmKikJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmNjRidHNtaXAgZWxmNjRsdHNtaXAiIDs7CisgbWlwczY0KmVsLXBzMi1lbGYqKQl0YXJnX2VtdWw9ZWxmMzJscjU5MDBuMzIKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmxyNTkwMCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKK2RpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtZGlzLmMgYi9vcGNvZGVzL21pcHMtZGlzLmMKK2luZGV4IDFlYjFkNDUuLmQ2ODgxYWYgMTAwNjQ0CistLS0gYS9vcGNvZGVzL21pcHMtZGlzLmMKKysrKyBiL29wY29kZXMvbWlwcy1kaXMuYworQEAgLTY1NSwxMyArNjU1LDExIEBAIGNvbnN0IHN0cnVjdCBtaXBzX2FyY2hfY2hvaWNlIG1pcHNfYXJjaF9jaG9pY2VzW10gPQorICAgICBtaXBzX2NwMHNlbF9uYW1lc194bHIsIEFSUkFZX1NJWkUgKG1pcHNfY3Awc2VsX25hbWVzX3hsciksCisgICAgIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisgCistICAvKiBYTFAgaXMgbW9zdGx5IGxpa2UgWExSLCB3aXRoIHRoZSBwcm9taW5lbnQgZXhjZXB0aW9uIGl0IGlzIGJlaW5nCistICAgICBNSVBTNjRSMi4gICovCistICB7ICJ4bHAiLCAxLCBiZmRfbWFjaF9taXBzX3hsciwgQ1BVX1hMUiwKKy0gICAgSVNBX01JUFM2NFIyIHwgSU5TTl9YTFIsIDAsCistICAgIG1pcHNfY3AwX25hbWVzX3hsciwKKy0gICAgbWlwc19jcDBzZWxfbmFtZXNfeGxyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc194bHIpLAorLSAgICBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorKyAgeyAieGxwIiwgMSwgYmZkX21hY2hfbWlwc194bHAsIENQVV9YTFAsCisrICAgIElTQV9NSVBTNjRSMiB8IElOU05fWExQLCAwLAorKyAgICBtaXBzX2NwMF9uYW1lc19taXBzMzI2NHIyLAorKyAgICBtaXBzX2NwMHNlbF9uYW1lc19taXBzMzI2NHIyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc19taXBzMzI2NHIyKSwKKysgICAgbWlwc19od3JfbmFtZXNfbWlwczMyNjRyMiB9LAorIAorICAgLyogVGhpcyBlbnRyeSwgbWlwczE2LCBpcyBoZXJlIG9ubHkgZm9yIElTQS9wcm9jZXNzb3Igc2VsZWN0aW9uOyBkbworICAgICAgbm90IHByaW50IGl0cyBuYW1lLiAgKi8KK2RpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtb3BjLmMgYi9vcGNvZGVzL21pcHMtb3BjLmMKK2luZGV4IDJjM2JiYWQuLjk3ODVhN2UgMTAwNjQ0CistLS0gYS9vcGNvZGVzL21pcHMtb3BjLmMKKysrKyBiL29wY29kZXMvbWlwcy1vcGMuYworQEAgLTMxOSw3ICszMTksOCBAQCBkZWNvZGVfbWlwc19vcGVyYW5kIChjb25zdCBjaGFyICpwKQorICNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCisgI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorICNkZWZpbmUgSU9DVDIJSU5TTl9PQ1RFT04yCistI2RlZmluZSBYTFIgICAgIElOU05fWExSCisrI2RlZmluZSBYTFIJSU5TTl9YTFIKKysjZGVmaW5lIFhMUAlJTlNOX1hMUAorICNkZWZpbmUgSVZJUlQJQVNFX1ZJUlQKKyAjZGVmaW5lIElWSVJUNjQJQVNFX1ZJUlQ2NAorIAorQEAgLTk1Niw2ICs5NTcsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJjbG8iLAkJCSJVLHMiLAkJMHg3MDAwMDAyMSwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorIHsiY2x6IiwJCQkiZCxzIiwJCTB4MDAwMDAwNTAsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzcsCQkwLAkwIH0sCisgeyJjbHoiLAkJCSJVLHMiLAkJMHg3MDAwMDAyMCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorK3siY3JjIiwJCQkiZCxzLHQiLAkweDcwMDAwMDFjLCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJMCwJCVhMUCwgCQkwLAkwIH0sCisgLyogY3RjMCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgeyJjdGMxIiwJCSJ0LEciLAkJMHg0NGMwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DQ3xDTSwJCTAsCQlJMSwJCTAsCTAgfSwKKyB7ImN0YzEiLAkJInQsUyIsCQkweDQ0YzAwMDAwLCAweGZmZTAwN2ZmLAlSRF8xfFdSX0NDfENNLAkJMCwJCUkxLAkJMCwJMCB9LAorQEAgLTk4OCwxMiArOTkwLDEzIEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImRhZGRpdSIsCQkidCxyLGoiLAkweDY0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzIsCQkwLAkJSTMsCQkwLAkwIH0sCisgeyJkYWRkdSIsCQkiZCx2LHQiLAkweDAwMDAwMDJkLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJCTAsCQlJMywJCTAsCTAgfSwKKyB7ImRhZGR1IiwJCSJ0LHIsSSIsCTAsICAgIChpbnQpIE1fREFERFVfSSwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCTAgfSwKKy17ImRhZGR3YyIsCQkiZCxzLHQiLCAJMHg3MDAwMDAzOCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfQzB8UkRfQzAsIDAsCQlYTFIsCQkwLAkwIH0sCisreyJkYWRkd2MiLAkJImQscyx0IiwgCTB4NzAwMDAwMzgsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0MwfFJEX0MwLCAwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsiZGJyZWFrIiwJCSIiLAkJMHg3MDAwMDAzZiwgMHhmZmZmZmZmZiwJMCwJCQkwLAkJTjUsCQkwLAkwIH0sCisgeyJkY2xvIiwJCSJkLHMiLAkJMHgwMDAwMDA1MywgMHhmYzFmMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyB7ImRjbG8iLAkJIlUscyIsCSAJMHg3MDAwMDAyNSwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLCAJMCwJCUk2NHxONTUsCTAsCUk2OSB9LAorIHsiZGNseiIsCQkiZCxzIiwJCTB4MDAwMDAwNTIsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJNjksCQkwLAkwIH0sCisgeyJkY2x6IiwJCSJVLHMiLAkgCTB4NzAwMDAwMjQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwgCTAsCQlJNjR8TjU1LAkwLAlJNjkgfSwKKyt7ImRjcmMiLAkJImQscyx0IiwJMHg3MDAwMDAxZCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCTAsCQlYTFAsIAkJMCwJMCB9LAorIC8qIGRjdHIgYW5kIGRjdHcgYXJlIHVzZWQgb24gdGhlIHI1MDAwLiAgKi8KKyB7ImRjdHIiLAkJIm8oYikiLAkgCTB4YmMwNTAwMDAsIDB4ZmMxZjAwMDAsIFJEXzIsCQkJMCwJCUkzLAkJMCwJMCB9LAorIHsiZGN0dyIsCQkibyhiKSIsCQkweGJjMDkwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKK0BAIC0xMDY1LDYgKzEwNjgsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJkbWZjMCIsCQkidCxHLEgiLAkweDQwMjAwMDAwLCAweGZmZTAwN2Y4LAlXUl8xfFJEX0MwfExDLAkJMCwJCUk2NCwJCTAsCTAgfSwKKyB7ImRtZmdjMCIsCQkidCxHIiwJCTB4NDA2MDAxMDAsIDB4ZmZlMDA3ZmYsIFdSXzF8UkRfQzB8TEMsCQkwLAkJMCwJCUlWSVJUNjQsIDAgfSwKKyB7ImRtZmdjMCIsCQkidCxHLEgiLAkweDQwNjAwMTAwLCAweGZmZTAwN2Y4LCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCisreyJkbWZ1ciIsCQkidCxkIiwJCTB4NzAwMDAwMWUsIDB4ZmZlMDA3ZmYsIFdSXzEsCQkJMCwJCVhMUCwJCTAsCTAgfSwKKyB7ImRtdCIsCQkJIiIsCQkweDQxNjAwYmMxLCAweGZmZmZmZmZmLCBUUkFQLAkJCTAsCQkwLAkJTVQzMiwJMCB9LAorIHsiZG10IiwJCQkidCIsCQkweDQxNjAwYmMxLCAweGZmZTBmZmZmLCBXUl8xfFRSQVAsCQkwLAkJMCwJCU1UMzIsCTAgfSwKKyB7ImRtdGMwIiwJCSJ0LEciLAkJMHg0MGEwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DMHxXUl9DQ3xDTSwJMCwJCUkzLAkJMCwJRUUgfSwKK0BAIC0xMDgwLDYgKzEwODQsOCBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgLyogZG1mYzMgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLworIC8qIGRtdGMzIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KKyB7ImRtdWgiLAkJImQscyx0IiwJMHgwMDAwMDBkYywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTY5LAkJMCwJMCB9LAorK3siZG10dXIiLAkJInQsZCIsCQkweDcwMDAwMDFmLCAweGZmZTAwN2ZmLAlSRF8xLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisreyJkbXVsIiwJCSJkLHMsdCIsCTB4NzAwMDAwMDYsIDB4ZmMwMDA3ZmYsCVdSXzF8UkRfMnxSRF8zLAkJMCwJCVhMUCwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQscyx0IiwJMHgwMDAwMDA5YywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTY5LAkJMCwJMCB9LAorIHsiZG11bCIsCQkiZCx2LHQiLAkweDcwMDAwMDAzLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9ISUxPLAkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQsdix0IiwJMCwgICAgKGludCkgTV9ETVVMLAlJTlNOX01BQ1JPLAkJMCwJCUkzLAkJMCwJTTMyfEk2OSB9LAorQEAgLTEyMjksOSArMTIzNSw5IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImxkIiwJCQkicywtYigrUikiLAkweGVjMTgwMDAwLCAweGZjMWMwMDAwLCBXUl8xLAkJCVJEX3BjLAkJSTY5LAkJMCwJMCB9LAorIHsibGQiLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX0xEX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsibGQiLAkJCSJ0LG8oYikiLAkweGRjMDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8TE0sCQkwLAkJSTMsCQkwLAkwIH0sCisteyJsZGFkZHciLAkJInQsYiIsCQkweDcwMDAwMDEwLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsibGRhZGR3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTEsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisteyJsZGFkZGQiLAkJInQsYiIsCQkweDcwMDAwMDEyLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorK3sibGRhZGR3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMCwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJsZGFkZHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMSwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJsZGFkZGQiLAkJInQsYiIsCQkweDcwMDAwMDEyLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7ImxkYzEiLAkJIlQsbyhiKSIsCTB4ZDQwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfM3xDTER8RlBfRCwJMCwJCUkyLAkJMCwJU0YgfSwKKyB7ImxkYzEiLAkJIkUsbyhiKSIsCTB4ZDQwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfM3xDTER8RlBfRCwJMCwJCUkyLAkJMCwJU0YgfSwKKyB7ImxkYzEiLAkJIlQsQShiKSIsCTAsICAgIChpbnQpIE1fTERDMV9BQiwJSU5TTl9NQUNSTywJCUlOU04yX01fRlBfRCwJSTIsCQkwLAlTRiB9LAorQEAgLTEzOTYsNyArMTQwMiw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7Im1mbG8iLAkJImQsOSIsCQkweDAwMDAwMDEyLCAweGZmOWYwN2ZmLCBXUl8xfFJEX0xPLAkJMCwJCTAsCQlEMzIsCTAgfSwKKyB7Im1mbG8xIiwJCSJkIiwJCTB4NzAwMDAwMTIsIDB4ZmZmZjA3ZmYsCVdSXzF8UkRfTE8sCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtZmxoeHUiLAkJImQiLAkJMHgwMDAwMDA1MiwgMHhmZmZmMDdmZiwJV1JfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisteyJtZmNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOCwgMHhmYzAwZmZmZiwgV1JfMXxSRF8yLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im1mY3IiLAkJInQscyIsCQkweDcwMDAwMDE4LCAweGZjMDBmZmZmLCBXUl8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtZnNhIiwJCSJkIiwJCTB4MDAwMDAwMjgsIDB4ZmZmZjA3ZmYsCVdSXzEsCQkJMCwJCUVFLAkJMCwJMCB9LAorIHsibWluLm9iIiwJCSJYLFksUSIsCTB4NzgwMDAwMDYsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlTQjEsCQlNWCwJMCB9LAorIHsibWluLm9iIiwJCSJELFMsUSIsCTB4NDgwMDAwMDYsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlONTQsCQkwLAkwIH0sCitAQCAtMTQ0MSwxMCArMTQ0NywxMyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgLyogbW92ZSBpcyBhdCB0aGUgdG9wIG9mIHRoZSB0YWJsZS4gICovCisgeyJtc2duLnFoIiwJCSJYLFksUSIsCTB4NzgyMDAwMDAsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQkwLAkJTVgsCTAgfSwKKyB7Im1zZ3NuZCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR1NORCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtc2dzbmRzIiwJCSJkLHQiLAkJMHg0YTAwMDAwMSwgMHhmZmUwMDdmZiwJV1JfMXxSRF8yfFJEX0MwfFdSX0MwLAkwLAkJWExQLAkJMCwJMCB9LAorIHsibXNnbGQiLAkJIiIsIAkJMCwgICAgKGludCkgTV9NU0dMRCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisgeyJtc2dsZCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR0xEX1QsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorLXsibXNnd2FpdCIsCQkiIiwgCQkwLCAgICAoaW50KSBNX01TR1dBSVQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorLXsibXNnd2FpdCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR1dBSVRfVCxJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im1zZ2xkcyIsCQkiZCx0IiwJCTB4NGEwMDAwMDIsIDB4ZmZlMDA3ZmYsCVdSXzF8UkRfMnxSRF9DMHxXUl9DMCwJMCwJCVhMUCwJCTAsCTAgfSwKKyt7Im1zZ3dhaXQiLAkJIiIsCQkwLCAgICAoaW50KSBNX01TR1dBSVQsICBJTlNOX01BQ1JPLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7Im1zZ3dhaXQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dXQUlUX1QsSU5TTl9NQUNSTywJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJtc2dzeW5jIiwJCSIiLAkJMHg0YTAwMDAwNCwgMHhmZmZmZmZmZiwwLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJtc3ViLmQiLAkJIkQsUixTLFQiLAkweDRjMDAwMDI5LCAweGZjMDAwMDNmLCBXUl8xfFJEXzJ8UkRfM3xSRF80fEZQX0QsIDAsCQlJNF8zMywJCTAsCUkzNyB9LAorIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NDYyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJFLAkJMCwJMCB9LAorIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NzIyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJGLAkJMCwJMCB9LAorQEAgLTE0OTQsNyArMTUwMyw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7Im10bG8iLAkJInMsNyIsCQkweDAwMDAwMDEzLCAweGZjMWZlN2ZmLCBSRF8xfFdSX0xPLAkJMCwJCTAsCQlEMzIsCTAgfSwKKyB7Im10bG8xIiwJCSJzIiwJCTB4NzAwMDAwMTMsIDB4ZmMxZmZmZmYsCVJEXzF8V1JfTE8sCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtdGxoeCIsCQkicyIsCQkweDAwMDAwMDUzLCAweGZjMWZmZmZmLAlSRF8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKKy17Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibXRjciIsCQkidCxzIiwJCTB4NzAwMDAwMTksIDB4ZmMwMGZmZmYsIFJEXzEsCQkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7Im10bTAiLAkJInMiLAkJMHg3MDAwMDAwOCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7Im10bTEiLAkJInMiLAkJMHg3MDAwMDAwYywgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7Im10bTIiLAkJInMiLAkJMHg3MDAwMDAwZCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKK0BAIC0xOTI0LDkgKzE5MzMsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJzdXhjMSIsCQkiUyx0KGIpIiwJMHg0YzAwMDAwZCwgMHhmYzAwMDdmZiwgUkRfMXxSRF8yfFJEXzN8U018RlBfRCwJMCwJCUk1XzMzfE41NSwJMCwJSTM3fSwKKyB7InN3IiwJCQkidCxvKGIpIiwJMHhhYzAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsic3ciLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX1NXX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAorLXsic3dhcHciLAkJInQsYiIsCQkweDcwMDAwMDE0LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsic3dhcHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNSwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKyt7InN3YXB3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNCwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJzd2Fwd3UiLAkJInQsYiIsCQkweDcwMDAwMDE1LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJzd2MwIiwJCSJFLG8oYikiLAkweGUwMDAwMDAwLCAweGZjMDAwMDAwLAlSRF8zfFJEX0MwfFNNLAkJMCwJCUkxLAkJMCwJSU9DVHxJT0NUUHxJT0NUMnxJMzcgfSwKKyB7InN3YzAiLAkJIkUsQShiKSIsCTAsICAgIChpbnQpIE1fU1dDMF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCUlPQ1R8SU9DVFB8SU9DVDJ8STM3IH0sCisgeyJzd2MxIiwJCSJULG8oYikiLAkweGU0MDAwMDAwLCAweGZjMDAwMDAwLAlSRF8xfFJEXzN8U018RlBfUywJMCwJCUkxLAkJMCwJMCB9LAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtRml4LWFuLWludGVybmFsLWVycm9yLWluLWRvX3ByaW50X3RvX21hcGZpbGUtc2Vlbi13aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUwMWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtRml4LWFuLWludGVybmFsLWVycm9yLWluLWRvX3ByaW50X3RvX21hcGZpbGUtc2Vlbi13aS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDhlOGY3N2VjMmI2MjYyZTdkMTBhZjU0NzAwYzM0MDE3M2Q5NTcyNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNyBGZWIgMjAxNSAwOTowNTo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDEzLzEzXSBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gZG9fcHJpbnRfdG9fbWFwZmlsZSBzZWVuIHdpdGgKKyBnb2xkIG9uIGFybQorCitUaGlzIGlzIGR1ZSB0byBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIGRvX3ByaW50X3RvX21hcGZpbGUgZm9yCithdHJyaWJ1dGVhIHNlY3Rpb24gKEFSTS5hdHRyaWJ1dGVzKSwgaXQgc3RhcnRlZCB0byBzaG93IHVwIGFmdGVyIGZpeAorZm9yIFBSIGdvbGQvMTY5ODAgd2FzIGluc3RhbGxlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisgZ29sZC9hdHRyaWJ1dGVzLmggfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nb2xkL2F0dHJpYnV0ZXMuaCBiL2dvbGQvYXR0cmlidXRlcy5oCitpbmRleCAyYWE3YTc4Li4zZDEyNmU2IDEwMDY0NAorLS0tIGEvZ29sZC9hdHRyaWJ1dGVzLmgKKysrKyBiL2dvbGQvYXR0cmlidXRlcy5oCitAQCAtMzg3LDYgKzM4NywxMCBAQCBjbGFzcyBPdXRwdXRfYXR0cmlidXRlc19zZWN0aW9uX2RhdGEgOiBwdWJsaWMgT3V0cHV0X3NlY3Rpb25fZGF0YQorICAgeyB9CisgCisgIHByb3RlY3RlZDoKKysgIC8vIFdyaXRlIHRvIGEgbWFwIGZpbGUuCisrICB2b2lkCisrICBkb19wcmludF90b19tYXBmaWxlKE1hcGZpbGUqIG1hcGZpbGUpIGNvbnN0CisrICB7IG1hcGZpbGUtPnByaW50X291dHB1dF9kYXRhKHRoaXMsIF8oIioqIGF0dHJpYnV0ZXMiKSk7IH0KKyAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4KKyAgIHZvaWQKKyAgIGRvX3dyaXRlKE91dHB1dF9maWxlKik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI0MzAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb20gZWJlMjZkODU1NDUyZDA3ZTAxNTJiZDc4ZDQ5NjY0NzVkMmRlMWRlOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDUgTWFyIDIwMTUgMDc6MzA6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ29sZC9hcm06IFNraXAgcGljIGNoZWNrIGZvciBSX0FSTV9SRUwzMgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ29sZC9hcm0uY2MgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2dvbGQvYXJtLmNjIGIvZ29sZC9hcm0uY2MKK2luZGV4IDZjNDcyYmIuLmZiODA0MzUgMTAwNjQ0CistLS0gYS9nb2xkL2FybS5jYworKysrIGIvZ29sZC9hcm0uY2MKK0BAIC03ODI5LDYgKzc4MjksNyBAQCBUYXJnZXRfYXJtPGJpZ19lbmRpYW4+OjpTY2FuOjpjaGVja19ub25fcGljKFJlbG9iaiogb2JqZWN0LAorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX0RUUE1PRDMyOgorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX0RUUE9GRjMyOgorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX1RQT0ZGMzI6CisrICAgIGNhc2UgZWxmY3BwOjpSX0FSTV9SRUwzMjoKKyAgICAgICByZXR1cm47CisgCisgICAgIGRlZmF1bHQ6CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1GaXgtZHluYW1pYy1saXN0LXNvLXRoYXQtc3ltYm9scy1ub3QtaW4tdGhlLWxpc3QtYXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDljMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1GaXgtZHluYW1pYy1saXN0LXNvLXRoYXQtc3ltYm9scy1ub3QtaW4tdGhlLWxpc3QtYXJlLnBhdGNoCkBAIC0wLDAgKzEsMTMxIEBACitGcm9tIGU5YzFiZGFkMjY5YzBjMzM1MmVlYmNjOTQ4MWVkNjUxNDQwMDFiMGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJ5IENvdXRhbnQgPGNjb3V0YW50QGdvb2dsZS5jb20+CitEYXRlOiBNb24sIDE2IEZlYiAyMDE1IDIyOjE1OjEyIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCAtLWR5bmFtaWMtbGlzdCBzbyB0aGF0IHN5bWJvbHMgbm90IGluIHRoZSBsaXN0IGFyZSBzdGlsbAorIGV4cG9ydGVkLgorCitJbiBQUiAxMzU3NywgdGhlIGNvbXBsYWludCB3YXMgdGhhdCAtQnN5bWJvbGljIHdhcyBvdmVycmlkaW5nIHRoZSBiaW5kaW5nCitiZWhhdmlvciBmb3Igc3ltYm9scyBsaXN0ZWQgaW4gdGhlIC0tZHluYW1pYy1saXN0IGJ5IHNldHRpbmcgdGhlIERUX1NZTUJPTElDCit0YWcgaW4gdGhlIGR5bmFtaWMgdGFibGUuIEluIHJlYWRpbmcgdGhlIEdudSBsZCBtYW51YWwsIEkgZGVjaWRlZCB0aGF0CistLWR5bmFtaWMtbGlzdCBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9mIC1Cc3ltYm9saWMsIGFuZCBtb2RpZmllZAorZ29sZCBzbyB0aGF0IC0tZHluYW1pYy1saXN0IHdvdWxkIHRyZWF0IHN5bWJvbHMgbGlzdGVkIGFzIHByZWVtcHRpYmxlLAorYW5kIGFsbCBvdGhlciBzeW1ib2xzIGFzIGludGVybmFsbHkgYm91bmQuIEkgd2FzIHdyb25nLgorCitQUiAxNjk5MiBzaG93cyB0aGF0IHdpdGggLS1keW5hbWljLWxpc3QgKGFuZCBub3QgLUJzeW1ib2xpYyksIGEgc3ltYm9sCitub3QgbGlzdGVkIGluIHRoZSBkeW5hbWljIGxpc3QgaXMgYmVpbmcgaW50ZXJuYWxseSBib3VuZCB3aXRoaW4gdGhlCitzaGFyZWQgbGlicmFyeSwgYnV0IGJlY2F1c2UgaXQncyBzdGlsbCBpbiB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUsIHdlCitleHBvc2UgaXQgdG8gYSBDT1BZIHJlbG9jYXRpb24sIGFuZCB0aGluZ3MgZ28gcmVhbGx5IGJhZCBmcm9tIHRoZXJlLgorCisoSSBjYW4gcmVwcm9kdWNlIHRoZSBzYW1lIGZhaWx1cmUsIHNpbXBseSBieSB0dXJuaW5nIG9uIC1Cc3ltYm9saWMtZnVuY3Rpb25zCit3aXRoIHRoZSBHbnUgbGlua2VyLiBFdmVuIHRob3VnaCB0aGUgc3ltYm9sIGlzIGJvdW5kIGludGVybmFsbHksIGl0J3MKK3N0aWxsIGV4cG9ydGVkIHRvIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSwgYW5kIGlzIGV4cG9zZWQgdG8gYSBDT1BZCityZWxvY2F0aW9uLikKKworSSd2ZSBiYWNrZWQgb3V0IHBhcnQgb2YgdGhlIGZpeCBmb3IgUFIgMTM1NzcsIGFuZCAtQnN5bWJvbGljIChvcgorLUJzeW1ib2xpYy1mdW5jdGlvbnMpIGNhbiBub3cgYmUgdXNlZCB3aXRoIC0tZHluYW1pYy1saXN0LCBidXQgaWYgdGhlCit0d28gYXJlIHVzZWQgdG9nZXRoZXIsIHdlIGRvIG5vdCBzZXQgRFRfU1lNQk9MSUMgb3IgREZfU1lNQk9MSUMKKyh0aGlzIG1hdGNoZXMgR251IGxkIGJlaGF2aW9yKS4gV2Ugbm93IHRyZWF0IHN5bWJvbHMgbGlzdGVkIGluIHRoZQorZHluYW1pYyBsaXN0IGFzIHByZW1wdGlibGUsIGJ1dCB3ZSBkbyBub3QgYXV0b21hdGljYWxseSB0cmVhdCBzeW1ib2xzCitub3QgbGlzdGVkIHRoZXJlIGFzIG5vbi1wcmVtcHRpYmxlLgorCitnb2xkLworCVBSIGdvbGQvMTM1NzcKKwlQUiBnb2xkLzE2OTkyCisJKiBsYXlvdXQuY2MgKExheW91dDo6ZmluaXNoX2R5bmFtaWNfc2VjdGlvbik6IERvbid0IHNldCBEVF9TWU1CT0xJQyBvcgorCURGX1NZTUJPTElDIGlmIC0tZHluYW1pYy1saXN0IG9wdGlvbiBpcyB1c2VkLgorCSogb3B0aW9ucy5jYyAoR2VuZXJhbF9vcHRpb25zOjpmaW5hbGl6ZSk6IC0tZHluYW1pYy1saXN0IGlzIG5vdAorCW11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIC1Cc3ltYm9saWMuCisJKiBzeW10YWIuaCAoU3ltYm9sOjppc19wcmVlbXB0aWJsZSk6IERvbid0IGV4Y2x1ZGUgZHluYW1pYyBzeW1ib2xzIG5vdAorCWxpc3RlZCBpbiAtLWR5bmFtaWMtbGlzdC4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoZHluYW1pY19saXN0X2xpYjIuc28pOiBBZGQKKwktQnN5bWJvbGljLWZ1bmN0aW9ucy4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgZ29sZC9DaGFuZ2VMb2cgICAgICAgICAgICAgfCAxNCArKysrKysrKysrKysrKworIGdvbGQvbGF5b3V0LmNjICAgICAgICAgICAgIHwgIDMgKystCisgZ29sZC9vcHRpb25zLmNjICAgICAgICAgICAgfCAgNyAtLS0tLS0tCisgZ29sZC9zeW10YWIuaCAgICAgICAgICAgICAgfCAgNiArKy0tLS0KKyBnb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSB8ICAyICstCisgZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gfCAgMiArLQorIDYgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nb2xkL2xheW91dC5jYyBiL2dvbGQvbGF5b3V0LmNjCitpbmRleCBiY2RhYWM4Li43ODM2NjQwIDEwMDY0NAorLS0tIGEvZ29sZC9sYXlvdXQuY2MKKysrKyBiL2dvbGQvbGF5b3V0LmNjCitAQCAtNDg3Myw3ICs0ODczLDggQEAgTGF5b3V0OjpmaW5pc2hfZHluYW1pY19zZWN0aW9uKGNvbnN0IElucHV0X29iamVjdHMqIGlucHV0X29iamVjdHMsCisgICAgIGZsYWdzIHw9IGVsZmNwcDo6REZfU1RBVElDX1RMUzsKKyAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkub3JpZ2luKCkpCisgICAgIGZsYWdzIHw9IGVsZmNwcDo6REZfT1JJR0lOOworLSAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKSkKKysgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkKKysgICAgICAmJiAhcGFyYW1ldGVycy0+b3B0aW9ucygpLmhhdmVfZHluYW1pY19saXN0KCkpCisgICAgIHsKKyAgICAgICBmbGFncyB8PSBlbGZjcHA6OkRGX1NZTUJPTElDOworICAgICAgIC8vIEFkZCBEVF9TWU1CT0xJQyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxvYWRlcnMuCitkaWZmIC0tZ2l0IGEvZ29sZC9vcHRpb25zLmNjIGIvZ29sZC9vcHRpb25zLmNjCitpbmRleCA3ZWI4ZjI3Li43ZjFmNjllIDEwMDY0NAorLS0tIGEvZ29sZC9vcHRpb25zLmNjCisrKysgYi9nb2xkL29wdGlvbnMuY2MKK0BAIC0xMjAwLDEzICsxMjAwLDYgQEAgR2VuZXJhbF9vcHRpb25zOjpmaW5hbGl6ZSgpCisgICAvLyBpbiB0aGUgcGF0aCwgYXMgYXBwcm9wcmlhdGUuCisgICB0aGlzLT5hZGRfc3lzcm9vdCgpOworIAorLSAgLy8gLS1keW5hbWljLWxpc3Qgb3ZlcnJpZGVzIC1Cc3ltYm9saWMgYW5kIC1Cc3ltYm9saWMtZnVuY3Rpb25zLgorLSAgaWYgKHRoaXMtPmhhdmVfZHluYW1pY19saXN0KCkpCistICAgIHsKKy0gICAgICB0aGlzLT5zZXRfQnN5bWJvbGljKGZhbHNlKTsKKy0gICAgICB0aGlzLT5zZXRfQnN5bWJvbGljX2Z1bmN0aW9ucyhmYWxzZSk7CistICAgIH0KKy0KKyAgIC8vIE5vdyB0aGF0IHdlJ3ZlIG5vcm1hbGl6ZWQgdGhlIG9wdGlvbnMsIGNoZWNrIGZvciBjb250cmFkaWN0b3J5IG9uZXMuCisgICBpZiAodGhpcy0+c2hhcmVkKCkgJiYgdGhpcy0+aXNfc3RhdGljKCkpCisgICAgIGdvbGRfZmF0YWwoXygiLXNoYXJlZCBhbmQgLXN0YXRpYyBhcmUgaW5jb21wYXRpYmxlIikpOworZGlmZiAtLWdpdCBhL2dvbGQvc3ltdGFiLmggYi9nb2xkL3N5bXRhYi5oCitpbmRleCBhYTBjYjY4Li45NDEzMzYwIDEwMDY0NAorLS0tIGEvZ29sZC9zeW10YWIuaAorKysrIGIvZ29sZC9zeW10YWIuaAorQEAgLTYwNCwxMCArNjA0LDggQEAgY2xhc3MgU3ltYm9sCisgICAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuaW5fZHluYW1pY19saXN0KHRoaXMtPm5hbWUoKSkpCisgICAgICAgcmV0dXJuIHRydWU7CisgCistICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYyBvciBwcm92aWRlZCBhIC0tZHluYW1pYy1saXN0IHNjcmlwdCwKKy0gICAgLy8gdGhlbiBub3RoaW5nIChlbHNlKSBpcyBwcmVlbXB0aWJsZS4KKy0gICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKQorLSAgICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9ucygpLmhhdmVfZHluYW1pY19saXN0KCkpCisrICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYywgdGhlbiBub3RoaW5nIChlbHNlKSBpcyBwcmVlbXB0aWJsZS4KKysgICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKSkKKyAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYy1mdW5jdGlvbnMsIHRoZW4gZnVuY3Rpb25zIGFyZSBub3QKK2RpZmYgLS1naXQgYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitpbmRleCBmNzY3YzIxLi43YjczZjlkIDEwMDY0NAorLS0tIGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrKyBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitAQCAtMTUxOCw3ICsxNTE4LDcgQEAgZHluYW1pY19saXN0X2xpYjEubzogZHluYW1pY19saXN0X2xpYjEuY2MKKyAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorIGR5bmFtaWNfbGlzdF9saWIyLnNvOiBnY2N0ZXN0ZGlyL2xkIGR5bmFtaWNfbGlzdF9saWIyLm8gJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQKKy0JJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC0tZHluYW1pYy1saXN0LCQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50IGR5bmFtaWNfbGlzdF9saWIyLm8KKysJJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisgZHluYW1pY19saXN0X2xpYjIubzogZHluYW1pY19saXN0X2xpYjIuY2MKKyAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorZGlmZiAtLWdpdCBhL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK2luZGV4IDIxN2U0NzIuLmI0YWUzZmQgMTAwNjQ0CistLS0gYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorKysrIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK0BAIC01MzE5LDcgKzUzMTksNyBAQCB1bmluc3RhbGwtYW06CisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKyBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBkeW5hbWljX2xpc3RfbGliMi5zbzogZ2NjdGVzdGRpci9sZCBkeW5hbWljX2xpc3RfbGliMi5vICQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50CistQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisrQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQGR5bmFtaWNfbGlzdF9saWIyLm86IGR5bmFtaWNfbGlzdF9saWIyLmNjCisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYWRkLXRodW5kZXJ4LXN1cHBvcnQtZm9yLWdhcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjY4NzVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkIHRodW5kZXJ4IHN1cHBvcnQgdG8gZ2FzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMTQtMTAvbXNnMDAxNzAuaHRtbF0KKworU2lnbmVkLW9mZi1ieTogSmFnYWRlZXNoIEtyaXNobmFuamFuYXBwYSA8amtyaXNobmFuamFuYXBwYUBtdmlzdGEuY29tPgorCitBdXRob3I6IEFuZHJldyBQaW5za2kgPGFwaW5za2lAY2F2aXVtLmNvbT4KK0RhdGU6IE1vbiwgMjAgT2N0IDIwMTQgMTE6NDI6NTggLTA3MDAKKworICAgIFRoaXMgcGF0Y2ggYWRkcyAtbWNwdT10aHVuZGVyeCBzdXBwb3J0IHRvIGdhcy4KKworZGlmZiAtTmF1cnAgZ2l0X29yZy9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYyBnaXQvZ2FzL2NvbmZpZy90Yy1hYXJjaDY0LmMKKy0tLSBnaXRfb3JnL2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCTIwMTUtMDktMDcgMDI6MTM6NTEuOTg4OTczNTIzIC0wNzAwCisrKysgZ2l0L2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCTIwMTUtMDktMDcgMDI6MTU6MjEuNzA1OTgxNTQwIC0wNzAwCitAQCAtNzIwNiw2ICs3MjA2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhYXJjaDY0X2NwdV9vcHRpb25fdAorIAkJCQkgQUFSQ0g2NF9GRUFUVVJFX0NSQyksICJDb3J0ZXgtQTU3In0sCisgICB7ImNvcnRleC1hNzIiLCBBQVJDSDY0X0ZFQVRVUkUgKEFBUkNINjRfQVJDSF9WOCwKKyAJCQkJICBBQVJDSDY0X0ZFQVRVUkVfQ1JDKSwgIkNvcnRleC1BNzIifSwKKysgIHsidGh1bmRlcngiLAkJQUFSQ0g2NF9BUkNIX1Y4LCAiQ2F2aXVtIFRodW5kZXJYIn0sCQkJCSAgCisgICB7ImV4eW5vcy1tMSIsIEFBUkNINjRfRkVBVFVSRSAoQUFSQ0g2NF9BUkNIX1Y4LAorIAkJCQkgQUFSQ0g2NF9GRUFUVVJFX0NSQyB8IEFBUkNINjRfRkVBVFVSRV9DUllQVE8pLAorIAkJCQkgIlNhbXN1bmcgRXh5bm9zIE0xIn0sCitkaWZmIC1OYXVycCBnaXRfb3JnL2dhcy9kb2MvYy1hYXJjaDY0LnRleGkgZ2l0L2dhcy9kb2MvYy1hYXJjaDY0LnRleGkKKy0tLSBnaXRfb3JnL2dhcy9kb2MvYy1hYXJjaDY0LnRleGkJMjAxNS0wOS0wNyAwMjoxMzo1MS45Njk5NzM1MjIgLTA3MDAKKysrKyBnaXQvZ2FzL2RvYy9jLWFhcmNoNjQudGV4aQkyMDE1LTA5LTA3IDAyOjE2OjAzLjM2NDk4NTI2MiAtMDcwMAorQEAgLTU4LDYgKzU4LDcgQEAgb24gdGhlIHRhcmdldCBwcm9jZXNzb3IuICBUaGUgZm9sbG93aW5nCisgQGNvZGV7Y29ydGV4LWE1M30sCisgQGNvZGV7Y29ydGV4LWE1N30sCisgQGNvZGV7Y29ydGV4LWE3Mn0sCisrQGNvZGV7dGh1bmRlcnh9LAorIEBjb2Rle2V4eW5vcy1tMX0sCisgQGNvZGV7eGdlbmUxfSwKKyBhbmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2JpbnV0aWxzLW9jdGVvbjMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwOGMwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoCkBAIC0wLDAgKzEsMjcyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2h0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0L2dpdHdlYi5jZ2k/cD1iaW51dGlscy1nZGIuZ2l0O2E9Y29tbWl0O2g9MmM2Mjk4NTY1OWRhMjFhM2ZlMTYwNjJkMjExYTcxNThmNzlhZDJlOQorCitTaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IGdpdC9iZmQvYXJjaHVyZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9hcmNodXJlcy5jCisrKysgZ2l0L2JmZC9hcmNodXJlcy5jCitAQCAtMTc5LDYgKzE3OSw3IEBAIERFU0NSSVBUSU9OCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24JCTY1MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAJCTY2MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKKysuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjMJCTY1MDMKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgeyogZGVjaW1hbCAnWExSJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgeyogZGVjaW1hbCAnWExQJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKK0luZGV4OiBnaXQvYmZkL2JmZC1pbjIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9iZmQtaW4yLmgKKysrKyBnaXQvYmZkL2JmZC1pbjIuaAorQEAgLTE5NjksNiArMTk2OSw3IEBAIGVudW0gYmZkX2FyY2hpdGVjdHVyZQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24gICAgICAgICAgIDY1MDEKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCAgICAgICAgICA2NjAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIgICAgICAgICAgNjUwMgorKyNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24zICAgICAgICAgIDY1MDMKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICAvKiBkZWNpbWFsICdYTFInICAqLworICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIC8qIGRlY2ltYWwgJ1hMUCcgICovCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKK0luZGV4OiBnaXQvYmZkL2NwdS1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvY3B1LW1pcHMuYworKysrIGdpdC9iZmQvY3B1LW1pcHMuYworQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtCisgICBJX21pcHNvY3Rlb24sCisgICBJX21pcHNvY3Rlb25wLAorICAgSV9taXBzb2N0ZW9uMiwKKysgIElfbWlwc29jdGVvbjMsCisgICBJX3hsciwKKyAgIElfbWljcm9taXBzLAorICAgSV94bHAKK0BAIC0xNTMsNiArMTU0LDcgQEAgc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBhcmNoX2luZgorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbiwibWlwczpvY3Rlb24iLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbikpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbnAsIm1pcHM6b2N0ZW9uKyIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9ucCkpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjIsIm1pcHM6b2N0ZW9uMiIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMikpLAorKyAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjMsIm1pcHM6b2N0ZW9uMyIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMykpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hsciwgIm1pcHM6eGxyIiwgICAgICAgRkFMU0UsIE5OKElfeGxyKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsTk4oSV9taWNyb21pcHMpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHAsICJtaXBzOnhscCIsICAgICAgRkFMU0UsIDApCitJbmRleDogZ2l0L2JmZC9lbGZ4eC1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvZWxmeHgtbWlwcy5jCisrKysgZ2l0L2JmZC9lbGZ4eC1taXBzLmMKK0BAIC02NjA0LDYgKzY2MDQsOSBAQCBfYmZkX2VsZl9taXBzX21hY2ggKGZsYWd3b3JkIGZsYWdzKQorICAgICBjYXNlIEVfTUlQU19NQUNIX0xTM0E6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfbG9vbmdzb25fM2E7CisgCisrICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMzoKKysgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc19vY3Rlb24zOworKworICAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjI6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfb2N0ZW9uMjsKKyAKK0BAIC0xMTg3OCw2ICsxMTg4MSwxMCBAQCBtaXBzX3NldF9pc2FfZmxhZ3MgKGJmZCAqYWJmZCkKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIGJmZF9tYWNoX21pcHNfb2N0ZW9uMzoKKysgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OMzsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBiZmRfbWFjaF9taXBzX3hscjoKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NCB8IEVfTUlQU19NQUNIX1hMUjsKKyAgICAgICBicmVhazsKK0BAIC0xNDc3Myw2ICsxNDc4MCw3IEBAIHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQorIHsKKyAgIC8qIE1JUFM2NHIyIGV4dGVuc2lvbnMuICAqLworKyAgeyBiZmRfbWFjaF9taXBzX29jdGVvbjMsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbjIsIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorSW5kZXg6IGdpdC9nYXMvY29uZmlnL3RjLW1pcHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2dhcy9jb25maWcvdGMtbWlwcy5jCisrKysgZ2l0L2dhcy9jb25maWcvdGMtbWlwcy5jCitAQCAtMzA2LDcgKzMwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmlsZV9hc2VfZXhwbGljaXQ7CisgdW5zaWduZWQgbG9uZyBtaXBzX2dwcm1hc2s7CisgdW5zaWduZWQgbG9uZyBtaXBzX2Nwcm1hc2tbNF07CisgCistLyogVHJ1ZSBpZiBhbnkgTUlQUzE2IGNvZGUgd2FzIHByb2R1Y2VkLiAgKi8KKysvKiAyVHJ1ZSBpZiBhbnkgTUlQUzE2IGNvZGUgd2FzIHByb2R1Y2VkLiAgKi8KKyBzdGF0aWMgaW50IGZpbGVfYXNlX21pcHMxNjsKKyAKKyAjZGVmaW5lIElTQV9TVVBQT1JUU19NSVBTMTZFIChtaXBzX29wdHMuaXNhID09IElTQV9NSVBTMzIJCVwKK0BAIC01MTAsNyArNTEwLDggQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgI2RlZmluZSBDUFVfSEFTX1JPUihDUFUpCUNQVV9IQVNfRFJPUiAoQ1BVKQorIAorIC8qIFRydWUgaWYgQ1BVIGlzIGluIHRoZSBPY3Rlb24gZmFtaWx5ICovCistI2RlZmluZSBDUFVfSVNfT0NURU9OKENQVSkgKChDUFUpID09IENQVV9PQ1RFT04gfHwgKENQVSkgPT0gQ1BVX09DVEVPTlAgfHwgKENQVSkgPT0gQ1BVX09DVEVPTjIpCisrI2RlZmluZSBDUFVfSVNfT0NURU9OKENQVSkgKChDUFUpID09IENQVV9PQ1RFT04gfHwgKENQVSkgPT0gQ1BVX09DVEVPTlAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChDUFUpID09IENQVV9PQ1RFT04yIHx8IChDUFUpID09IENQVV9PQ1RFT04zKQorIAorIC8qIFRydWUgaWYgQ1BVIGhhcyBzZXEvc25lIGFuZCBzZXFpL3NuZWkgaW5zdHJ1Y3Rpb25zLiAgKi8KKyAjZGVmaW5lIENQVV9IQVNfU0VRKENQVSkJKENQVV9JU19PQ1RFT04gKENQVSkpCitAQCAtMTg2NzcsNiArMTg2NzgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfY3B1X2luZm8gbWlwc19jCisgICB7ICJvY3Rlb24iLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTiB9LAorICAgeyAib2N0ZW9uKyIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OUCB9LAorICAgeyAib2N0ZW9uMiIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OMiB9LAorKyAgeyAib2N0ZW9uMyIsICAgICAgICAwLCBBU0VfVklSVCB8IEFTRV9WSVJUNjQsIElTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTjMgfSwKKyAKKyAgIC8qIFJNSSBYbHIgKi8KKyAgIHsgInhsciIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NCwgICBDUFVfWExSIH0sCitJbmRleDogZ2l0L2dhcy9kb2MvYy1taXBzLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvZG9jL2MtbWlwcy50ZXhpCisrKysgZ2l0L2dhcy9kb2MvYy1taXBzLnRleGkKK0BAIC0zODIsNiArMzgyLDcgQEAgbG9vbmdzb24zYSwKKyBvY3Rlb24sCisgb2N0ZW9uKywKKyBvY3Rlb24yLAorK29jdGVvbjMsCisgeGxyLAorIHhscAorIEBlbmQgcXVvdGF0aW9uCitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvbWlwcy5leHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL21pcHMuZXhwCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvbWlwcy5leHAKK0BAIC0xMTAyLDYgKzExMDIsNyBAQCBpZiB7IFtpc3RhcmdldCBtaXBzKi0qLXZ4d29ya3MqXSB9IHsKKyAgICAgcnVuX2xpc3RfdGVzdF9hcmNoZXMgIm9jdGVvbi1pbGwiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb25dCisgICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJvY3Rlb24tcHJlZiIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbl0KKyAgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm9jdGVvbjIiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb24yXQorKyAgICBydW5fZHVtcF90ZXN0X2FyY2hlcyAib2N0ZW9uMyIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbjNdCisgCisgICAgIHJ1bl9kdW1wX3Rlc3QgInNtYXJ0bWlwcyIKKyAgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm1pcHMzMi1kc3AiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBtaXBzMzJyMiBcCitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5kCitAQCAtMCwwICsxLDIwIEBACisrI29iamR1bXA6IC1kIC1yIC0tc2hvdy1yYXctaW5zbgorKyNuYW1lOiBNSVBTIG9jdGVvbjMgaW5zdHJ1Y3Rpb25zCisrCisrLio6ICtmaWxlIGZvcm1hdCAuKm1pcHMuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gLnRleHQ6CisrCisrWzAtOWEtZl0rIDxmb28+OgorKy4qOiAgICA3MWVjMDAwOCAgICAgICAgbXRtMCAgICB0Myx0MAorKy4qOiAgICA3MWE0MDAwOCAgICAgICAgbXRtMCAgICB0MSxhMAorKy4qOiAgICA3MDgzMDAwYyAgICAgICAgbXRtMSAgICBhMCx2MQorKy4qOiAgICA3MGUxMDAwYyAgICAgICAgbXRtMSAgICBhMyxhdAorKy4qOiAgICA3MDIyMDAwZCAgICAgICAgbXRtMiAgICBhdCx2MAorKy4qOiAgICA3MDgzMDAwYyAgICAgICAgbXRtMSAgICBhMCx2MQorKy4qOiAgICA3MGEyMDAwOSAgICAgICAgbXRwMCAgICBhMSx2MAorKy4qOiAgICA3MGM0MDAwOSAgICAgICAgbXRwMCAgICBhMixhMAorKy4qOiAgICA3MDgzMDAwYSAgICAgICAgbXRwMSAgICBhMCx2MQorKy4qOiAgICA3MGUxMDAwYSAgICAgICAgbXRwMSAgICBhMyxhdAorKy4qOiAgICA3MDIyMDAwYiAgICAgICAgbXRwMiAgICBhdCx2MAorKy4qOiAgICA3MDgzMDAwYSAgICAgICAgbXRwMSAgICBhMCx2MQorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMucworQEAgLTAsMCArMSwyMiBAQAorKysgICAgICAgLnRleHQKKysgICAgICAgLnNldCBub3Jlb3JkZXIKKysgICAgICAgLnNldCBub2F0CisrCisrZm9vOgorKyAgICAgICAgbXRtMCAkMTUsJDEyCisrICAgICAgICBtdG0wICQxMywkNAorKworKyAgICAgICAgbXRtMSAkNCwkMworKyAgICAgICAgbXRtMSAkNywkMQorKworKyAgICAgICAgbXRtMiAkMSwkMgorKyAgICAgICAgbXRtMSAkNCwkMworKworKyAgICAgICAgbXRwMCAkNSwkMgorKyAgICAgICAgbXRwMCAkNiwkNAorKworKyAgICAgICAgbXRwMSAkNCwkMworKyAgICAgICAgbXRwMSAkNywkMQorKworKyAgICAgICAgbXRwMiAkMSwkMgorKyAgICAgICAgbXRwMSAkNCwkMworSW5kZXg6IGdpdC9pbmNsdWRlL29wY29kZS9taXBzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9pbmNsdWRlL29wY29kZS9taXBzLmgKKysrKyBnaXQvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCitAQCAtMTE5Niw2ICsxMTk2LDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZQorICNkZWZpbmUgSU5TTl9PQ1RFT04JCSAgMHgwMDAwMDgwMAorICNkZWZpbmUgSU5TTl9PQ1RFT05QCQkgIDB4MDAwMDAyMDAKKyAjZGVmaW5lIElOU05fT0NURU9OMgkJICAweDAwMDAwMTAwCisrI2RlZmluZSBJTlNOX09DVEVPTjMJCSAgMHgwMDAwMDA0MAorIAorIC8qIE1JUFMgUjU5MDAgaW5zdHJ1Y3Rpb24gKi8KKyAjZGVmaW5lIElOU05fNTkwMCAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorQEAgLTEzMjUsNiArMTMyNiw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGUKKyAjZGVmaW5lIENQVV9PQ1RFT04JNjUwMQorICNkZWZpbmUgQ1BVX09DVEVPTlAJNjYwMQorICNkZWZpbmUgQ1BVX09DVEVPTjIJNjUwMgorKyNkZWZpbmUgQ1BVX09DVEVPTjMJNjUwMworICNkZWZpbmUgQ1BVX1hMUiAgICAgCTg4NzY4MiAgIAkvKiBkZWNpbWFsICdYTFInICAgKi8KKyAjZGVmaW5lIENQVV9YTFAgICAgICAgICA4ODc2ODAgICAgICAvKiBkZWNpbWFsICdYTFAnICAgKi8KKyAKK0BAIC0xMzkxLDYgKzEzOTMsOSBAQCBjcHVfaXNfbWVtYmVyIChpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbWFzCisgICAgIGNhc2UgQ1BVX09DVEVPTjI6CisgICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9PQ1RFT04yKSAhPSAwOworIAorKyAgICBjYXNlIENQVV9PQ1RFT04zOgorKyAgICAgIHJldHVybiAobWFzayAmIElOU05fT0NURU9OMykgIT0gMDsKKysKKyAgICAgY2FzZSBDUFVfWExSOgorICAgICAgIHJldHVybiAobWFzayAmIElOU05fWExSKSAhPSAwOworIAorSW5kZXg6IGdpdC9vcGNvZGVzL21pcHMtZGlzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9vcGNvZGVzL21pcHMtZGlzLmMKKysrKyBnaXQvb3Bjb2Rlcy9taXBzLWRpcy5jCitAQCAtNjQ5LDYgKzY0OSwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfCisgICAgIElTQV9NSVBTNjRSMiB8IElOU05fT0NURU9OMiwgMCwgbWlwc19jcDBfbmFtZXNfbnVtZXJpYywKKyAgICAgTlVMTCwgMCwgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKyAKKysgIHsgIm9jdGVvbjMiLCAgIDEsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMywgQ1BVX09DVEVPTjMsCisrICAgIElTQV9NSVBTNjRSMiB8IElOU05fT0NURU9OMywgQVNFX1ZJUlQgfCBBU0VfVklSVDY0LAorKyAgICBtaXBzX2NwMF9uYW1lc19udW1lcmljLAorKyAgICBOVUxMLCAwLCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisrCisgICB7ICJ4bHIiLCAxLCBiZmRfbWFjaF9taXBzX3hsciwgQ1BVX1hMUiwKKyAgICAgSVNBX01JUFM2NCB8IElOU05fWExSLCAwLAorICAgICBtaXBzX2NwMF9uYW1lc194bHIsCitJbmRleDogZ2l0L29wY29kZXMvbWlwcy1vcGMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL29wY29kZXMvbWlwcy1vcGMuYworKysrIGdpdC9vcGNvZGVzL21pcHMtb3BjLmMKK0BAIC0zMTYsOSArMzE2LDEwIEBAIGRlY29kZV9taXBzX29wZXJhbmQgKGNvbnN0IGNoYXIgKnApCisgI2RlZmluZSBONQkoSU5TTl81NDAwIHwgSU5TTl81NTAwKQorICNkZWZpbmUgTjU0CUlOU05fNTQwMAorICNkZWZpbmUgTjU1CUlOU05fNTUwMAorLSNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCistI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorLSNkZWZpbmUgSU9DVDIJSU5TTl9PQ1RFT04yCisrI2RlZmluZSBJT0NUCShJTlNOX09DVEVPTiB8IElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMiB8IElOU05fT0NURU9OMykKKysjZGVmaW5lIElPQ1RQCShJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIgfCBJTlNOX09DVEVPTjMpCisrI2RlZmluZSBJT0NUMgkoSU5TTl9PQ1RFT04yIHwgSU5TTl9PQ1RFT04zKQorKyNkZWZpbmUgSU9DVDMgIElOU05fT0NURU9OMworICNkZWZpbmUgWExSCUlOU05fWExSCisgI2RlZmluZSBYTFAJSU5TTl9YTFAKKyAjZGVmaW5lIElWSVJUCUFTRV9WSVJUCitAQCAtMTUwNSwxMSArMTUwNiwxNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wCisgeyJtdGxoeCIsCQkicyIsCQkweDAwMDAwMDUzLCAweGZjMWZmZmZmLAlSRF8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKKyB7Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtdG0wIiwJCSJzIiwJCTB4NzAwMDAwMDgsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0wIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMDgsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdG0xIiwJCSJzIiwJCTB4NzAwMDAwMGMsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0xIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGMsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdG0yIiwJCSJzIiwJCTB4NzAwMDAwMGQsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0yIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGQsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAwIiwJCSJzIiwJCTB4NzAwMDAwMDksIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAwIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMDksIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAxIiwJCSJzIiwJCTB4NzAwMDAwMGEsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAxIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGEsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAyIiwJCSJzIiwJCTB4NzAwMDAwMGIsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAyIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGIsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHNhIiwJCSJzIiwJCTB4MDAwMDAwMjksIDB4ZmMxZmZmZmYsCVJEXzEsCQkJMCwJCUVFLAkJMCwJMCB9LAorIHsibXRzYWIiLAkJInMsaiIsCQkweDA0MTgwMDAwLCAweGZjMWYwMDAwLAlSRF8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im10c2FoIiwJCSJzLGoiLAkJMHgwNDE5MDAwMCwgMHhmYzFmMDAwMCwJUkRfMSwJCQkwLAkJRUUsCQkwLAkwIH0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQyNjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzXzIuMjUuMS5iYgpAQCAtMCwwICsxLDM5IEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKKworREVQRU5EUyArPSAiZmxleCBiaXNvbiB6bGliIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1zeXNyb290PS8gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliYmZkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmliZXJ0eSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1lbmFibGUtdGFyZ2V0cz1hbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS02NC1iaXQtYmZkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJpYmVydHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmJmZCIKKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIEluc3RhbGwgdGhlIGxpYmliZXJ0eSBoZWFkZXIKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2Fuc2lkZWNsLmggJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvbGliaWJlcnR5LmggJHtEfSR7aW5jbHVkZWRpcn0KKworCSMgV2Ugb25seSB3YW50IGxpYmliZXJ0eSwgbGliYmZkIGFuZCBsaWJvcGNvZGVzCisJcm0gLXJmICR7RH0ke2JpbmRpcn0KKwlybSAtcmYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9CisJcm0gLXJmICR7RH0ke3ByZWZpeH0vbGliL2xkc2NyaXB0cworCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL2luZm8KKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9sb2NhbGUKKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9tYW4KKwlybWRpciAke0R9JHtwcmVmaXh9L3NoYXJlIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfS9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfTY0L2djYy1saWIgfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9IHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfTY0IHx8IDoKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0M2E1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAzYTE1ZjdjOWFjZTZjMDI5NGVkYzMxM2ExODQ4Y2FmY2MzMWIyYTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IEFwciAyMDE1IDAwOjM4OjMyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy9sb2NhbC5tazogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorcm0gLWYgc3JjL3lhY2Mgc3JjL3lhY2MudG1wCitlY2hvICcjISAvYmluL3NoJyA+c3JjL3lhY2MudG1wCisvYmluL2Jhc2g6IHNyYy95YWNjLnRtcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorTWFrZWZpbGU6NjY3MDogcmVjaXBlIGZvciB0YXJnZXQgJ3NyYy95YWNjJyBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2xvY2FsLm1rIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbG9jYWwubWsgYi9zcmMvbG9jYWwubWsKK2luZGV4IDU3M2FkMDAuLjI4YmZhZTQgMTAwNjQ0CistLS0gYS9zcmMvbG9jYWwubWsKKysrKyBiL3NyYy9sb2NhbC5taworQEAgLTExOSw2ICsxMTksNyBAQCBNT1NUTFlDTEVBTkZJTEVTICs9IHNyYy95YWNjCisgCisgc3JjL3lhY2M6CisgCSQoQU1fVl9HRU4pcm0gLWYgJEAgJEAudG1wCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApIHNyYworIAkkKEFNX1ZfYXQpZWNobyAnIyEgL2Jpbi9zaCcgPiRALnRtcAorIAkkKEFNX1ZfYXQpZWNobyAiZXhlYyAnJChiaW5kaXIpL2Jpc29uJyAteSAiJyIkJEAiJyA+PiRALnRtcAorIAkkKEFNX1ZfYXQpY2htb2QgYSt4ICRALnRtcAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vYmlzb24tMi4zX200LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OGNlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vYmlzb24tMi4zX200LnBhdGNoCkBAIC0wLDAgKzEsNTkxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludHR5cGVzLXByaS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgaW50dHlwZXMtcHJpLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrIyBEZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB0aGUgUFJJKgorKyMgbWFjcm9zIHRvIG5vbi1zdHJpbmcgdmFsdWVzLiAgVGhpcyBpcyB0aGUgY2FzZSBvbiBBSVggNC4zLjMuCisrCisrQUNfREVGVU4oW2d0X0lOVFRZUEVTX1BSSV0sCisrWworKyAgQUNfUkVRVUlSRShbZ3RfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgaWYgdGVzdCAkZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKKysgICAgICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuLAorKyAgICAgIFsKKysgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjaWZkZWYgUFJJZDMyCisrY2hhciAqcCA9IFBSSWQzMjsKKysjZW5kaWYKKytdLCBbXSwgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj1ubywgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXMpCisrICAgICAgXSkKKysgIGZpCisrICBpZiB0ZXN0ICIkZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKFBSSV9NQUNST1NfQlJPS0VOLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2xjbWVzc2FnZS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgbGNtZXNzYWdlLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorKworKyMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KKysKKytBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKysgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC91aW50bWF4X3QubTQKK0BAIC0wLDAgKzEsMjkgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNiAoZ2V0dGV4dC0wLjExKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byBgdW5zaWduZWQgbG9uZycgb3IgYHVuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIDxpbnR0eXBlcy5oPiBkb2VzIG5vdCBleGlzdC4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VSU5UTUFYX1RdLAorK1sKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSkKKysgICAgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXMgXAorKyAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAorKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisrICAgIEFDX0RFRklORV9VTlFVT1RFRCh1aW50bWF4X3QsICRhY190eXBlLAorKyAgW0RlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZworKyAgIGlmIDxpbnR0eXBlcy5oPiBhbmQgPHN0ZGludC5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9nbGliYzIxLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBnbGliYzIxLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4xLjMsIGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRlc3QgZm9yIHRoZSBHTlUgQyBMaWJyYXJ5LCB2ZXJzaW9uIDIuMSBvciBuZXdlci4KKysjIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtqbV9HTElCQzIxXSwKKysgIFsKKysgICAgQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgMi4xIG9yIG5ld2VyLAorKyAgICAgIGFjX2N2X2dudV9saWJyYXJ5XzJfMSwKKysgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisrCVsKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19HTlVfTElCUkFSWV9fCisrICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorKyAgTHVja3kgR05VIHVzZXIKKysgI2VuZGlmCisrI2VuZGlmCisrCV0sCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT1ubykKKysgICAgICBdCisrICAgICkKKysgICAgQUNfU1VCU1QoR0xJQkMyMSkKKysgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKysgIF0KKyspCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvc3RkaW50X2gubTQKK0BAIC0wLDAgKzEsMjggQEAKKysjIHN0ZGludF9oLm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKytbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludHR5cGVzX2gubTQKK0BAIC0wLDAgKzEsMjggQEAKKysjIGludHR5cGVzX2gubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7XSwKKysgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgsIDEsCisrW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L3Vsb25nbG9uZy5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgdWxvbmdsb25nLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4wLjMyLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMTsgaW50IGkgPSA2MztdLAorKyAgICBbdW5zaWduZWQgbG9uZyBsb25nIHVsbG1heCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvY29kZXNldC5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgY29kZXNldC5tNCBzZXJpYWwgQU0xIChnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VUXSwgYW1fY3ZfbGFuZ2luZm9fY29kZXNldCwKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGFuZ2luZm8uaD5dLAorKyAgICAgIFtjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpO10sCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMsCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubykKKysgICAgXSkKKysgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTEFOR0lORk9fQ09ERVNFVCwgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnRkaXYwLm00CitAQCAtMCwwICsxLDcyIEBACisrIyBpbnRkaXYwLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtndF9JTlRESVYwXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKKysgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCisrICAgIFsKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKworK3N0YXRpYyB2b2lkCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCisrI2Vsc2UKKytzaWdmcGVfaGFuZGxlciAoc2lnKSBpbnQgc2lnOworKyNlbmRpZgorK3sKKysgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKysgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworK30KKysKKytpbnQgeCA9IDE7CisraW50IHkgPSAwOworK2ludCB6OworK2ludCBuYW47CisrCisraW50IG1haW4gKCkKKyt7CisrICBzaWduYWwgKFNJR0ZQRSwgc2lnZnBlX2hhbmRsZXIpOworKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKysjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKysgIHNpZ25hbCAoU0lHVFJBUCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBkZWZpbmVkIChfX2xpbnV4X18pCisrICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKworKyAgeiA9IHggLyB5OworKyAgbmFuID0geSAvIHk7CisrICBleGl0ICgxKTsKKyt9CisrXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKysgICAgICAgIFsKKysgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IG02OGsgfCBzMzkwKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIF0pCisrICAgIF0pCisrICBjYXNlICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiIGluCisrICAgICp5ZXMpIHZhbHVlPTE7OworKyAgICAqKSB2YWx1ZT0wOzsKKysgIGVzYWMKKysgIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKKysgICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2dsaWIubTQKK0BAIC0wLDAgKzEsMTk2IEBACisrIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKysjIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCisrCisrZG5sIEFNX1BBVEhfR0xJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgWywgTU9EVUxFU11dXV0pCisrZG5sIFRlc3QgZm9yIEdMSUIsIGFuZCBkZWZpbmUgR0xJQl9DRkxBR1MgYW5kIEdMSUJfTElCUywgaWYgImdtb2R1bGUiIG9yIAorK2RubCBndGhyZWFkIGlzIHNwZWNpZmllZCBpbiBNT0RVTEVTLCBwYXNzIHRvIGdsaWItY29uZmlnCisrZG5sCisrQUNfREVGVU4oQU1fUEFUSF9HTElCLAorK1tkbmwgCisrZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2xpYi1jb25maWcgc2NyaXB0CisrZG5sCisrQUNfQVJHX1dJVEgoZ2xpYi1wcmVmaXgsWyAgLS13aXRoLWdsaWItcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfcHJlZml4PSIiKQorK0FDX0FSR19XSVRIKGdsaWItZXhlYy1wcmVmaXgsWyAgLS13aXRoLWdsaWItZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQorK0FDX0FSR19FTkFCTEUoZ2xpYnRlc3QsIFsgIC0tZGlzYWJsZS1nbGlidGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgR0xJQiBwcm9ncmFtXSwKKysJCSAgICAsIGVuYWJsZV9nbGlidGVzdD15ZXMpCisrCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRnbGliX2NvbmZpZ19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysKKysgIGZvciBtb2R1bGUgaW4gLiAkNAorKyAgZG8KKysgICAgICBjYXNlICIkbW9kdWxlIiBpbgorKyAgICAgICAgIGdtb2R1bGUpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBnbW9kdWxlIgorKyAgICAgICAgIDs7CisrICAgICAgICAgZ3RocmVhZCkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGd0aHJlYWQiCisrICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICBkb25lCisrCisrICBBQ19QQVRIX1BST0coR0xJQl9DT05GSUcsIGdsaWItY29uZmlnLCBubykKKysgIG1pbl9nbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCisrICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdMSUIgLSB2ZXJzaW9uID49ICRtaW5fZ2xpYl92ZXJzaW9uKQorKyAgbm9fZ2xpYj0iIgorKyAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgIG5vX2dsaWI9eWVzCisrICBlbHNlCisrICAgIEdMSUJfQ0ZMQUdTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCisrICAgIEdMSUJfTElCUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tbGlic2AKKysgICAgZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorKyAgICBnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCisrICAgIGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKysgICAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYnRlc3QiID0gInh5ZXMiIDsgdGhlbgorKyAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICBMSUJTPSIkR0xJQl9MSUJTICRMSUJTIgorK2RubAorK2RubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHTElCIGlzIHN1ZmZpY2llbnRseSBuZXcuIChBbHNvIHNhbml0eQorK2RubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgZ2xpYi1jb25maWcgdG8gc29tZSBleHRlbnQKKytkbmwKKysgICAgICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisraW50IAorK21haW4gKCkKKyt7CisrICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKysgIGNoYXIgKnRtcF92ZXJzaW9uOworKworKyAgc3lzdGVtICgidG91Y2ggY29uZi5nbGlidGVzdCIpOworKworKyAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCisrICB0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworKyAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgICAgIGV4aXQoMSk7CisrICAgfQorKworKyAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKysgICAgeworKyAgICAgIHByaW50ZigiXG4qKiogJ2dsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCBHTElCICglZC4lZC4lZClcbiIsIAorKyAgICAgICAgICAgICAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uLAorKyAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICBwcmludGYgKCIqKiogd2FzIGZvdW5kISBJZiBnbGliLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKKysgICAgICBwcmludGYgKCIqKiogdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvbiBvZiBHTElCLiBZb3UgbWF5IGFsc28gYmUgYWJsZSB0byBmaXggdGhlIGVycm9yXG4iKTsKKysgICAgICBwcmludGYoIioqKiBieSBtb2RpZnlpbmcgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgYnkgZWRpdGluZ1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOworKyAgICAgIHByaW50ZigiKioqIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtLlxuIik7CisrICAgICAgcHJpbnRmKCIqKiogSWYgZ2xpYi1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdMSUJfQ09ORklHXG4iKTsKKysgICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKysgICAgfSAKKysgIGVsc2UgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gR0xJQl9NQUpPUl9WRVJTSU9OKSB8fAorKwkgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9IEdMSUJfTUlOT1JfVkVSU0lPTikgfHwKKysgICAgICAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gR0xJQl9NSUNST19WRVJTSU9OKSkKKysgICAgeworKyAgICAgIHByaW50ZigiKioqIEdMSUIgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCisrCSAgICAgR0xJQl9NQUpPUl9WRVJTSU9OLCBHTElCX01JTk9SX1ZFUlNJT04sIEdMSUJfTUlDUk9fVkVSU0lPTik7CisrICAgICAgcHJpbnRmKCIqKiogbGlicmFyeSAodmVyc2lvbiAlZC4lZC4lZClcbiIsCisrCSAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoZ2xpYl9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCisrICAgICAgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIEdMSUIgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAorKyAgICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdMSUIgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAorKwkgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7CisrICAgICAgICBwcmludGYoIioqKiBHTElCIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZ3RrLm9yZy5cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKipcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgd3JvbmcgY29weSBvZiB0aGUgZ2xpYi1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7CisrICAgICAgICBwcmludGYoIioqKiBvZiBHTElCLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworKyAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorK10sLCBub19nbGliPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisrICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJ4JG5vX2dsaWIiID0geCA7IHRoZW4KKysgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorKyAgZWxzZQorKyAgICAgQUNfTVNHX1JFU1VMVChubykKKysgICAgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICAgICBlY2hvICIqKiogVGhlIGdsaWItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgR0xJQiBjb3VsZCBub3QgYmUgZm91bmQiCisrICAgICAgIGVjaG8gIioqKiBJZiBHTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKysgICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCisrICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gZ2xpYi1jb25maWcuIgorKyAgICAgZWxzZQorKyAgICAgICBpZiB0ZXN0IC1mIGNvbmYuZ2xpYnRlc3QgOyB0aGVuCisrICAgICAgICA6CisrICAgICAgIGVsc2UKKysgICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gR0xJQiB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKysgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJExJQlMgJEdMSUJfTElCUyIKKysgICAgICAgICAgQUNfVFJZX0xJTksoWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrXSwgICAgICBbIHJldHVybiAoKGdsaWJfbWFqb3JfdmVyc2lvbikgfHwgKGdsaWJfbWlub3JfdmVyc2lvbikgfHwgKGdsaWJfbWljcm9fdmVyc2lvbikpOyBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCisrICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR0xJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKysgICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgR0xJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgR0xJQiwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisrICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorKyAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisrCSAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCisrICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBjYW1lIHdpdGggdGhlIHN5c3RlbSB3aXRoIHRoZSBjb21tYW5kIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorKyAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgR0xJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorKyAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBHTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorKyAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgZ2xpYi1jb25maWcgc2NyaXB0OiAkR0xJQl9DT05GSUciIF0pCisrICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgICBmaQorKyAgICAgZmkKKysgICAgIEdMSUJfQ0ZMQUdTPSIiCisrICAgICBHTElCX0xJQlM9IiIKKysgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisrICBmaQorKyAgQUNfU1VCU1QoR0xJQl9DRkxBR1MpCisrICBBQ19TVUJTVChHTElCX0xJQlMpCisrICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnR0eXBlcy5tNAorQEAgLTAsMCArMSwyNyBAQAorKyMgaW50dHlwZXMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGgKKysjIDxzeXMvdHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2d0X0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFsKKysgICAgQUNfVFJZX0NPTVBJTEUoCisrICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICAgIFtdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKQorKyAgXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0gsIDEsCisrICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2lzYy1wb3NpeC5tNAorQEAgLTAsMCArMSwyNiBAQAorKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYtMi41MyBhbmQgbmV3ZXIuICBSZW1vdmUgaXQgaW4gMjAwNS4KKysKKysjIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb25lIGluIGF1dG9jb25mLgorKyMgQ3VycmVudGx5IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYXV0b2NvbmYgbWFjcm8KKysjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorKyMgc3RpbGwgdXNlcyBpdC4gIE90aGVyd2lzZSwgdGhlIHVzZSBpbiBnZXR0ZXh0Lm00IG1ha2VzIGF1dG9oZWFkZXIKKysjIGdpdmUgdGhlc2UgZGlhZ25vc3RpY3M6CisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfUlVOIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKworK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorKworK0FDX0RFRlVOKFtBQ19JU0NfUE9TSVhdLAorKyAgWworKyAgICBkbmwgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvYnNvbGVzY2VudCBBQ19JU0NfUE9TSVgga2x1ZGdlLgorKyAgICBBQ19DSEVDS19MSUIoY3Bvc2l4LCBzdHJlcnJvciwgW0xJQlM9IiRMSUJTIC1sY3Bvc2l4Il0pCisrICBdCisrKQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxNmM1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDRjMGQ3NzMzZjMwOTAzZjhkN2M3Y2Q3NDMzZjVjOGE3NTA1ZTM1ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorRGF0ZTogVHVlLCAyMSBBcHIgMjAxNSAwMDo0ODo0NSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBkb2MvbG9jYWwubWs6IGRvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitVcGRhdGVkIGZvciBiaXNvbiAzLjAuNAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9sb2NhbC5tayB8ICAgIDkgKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2xvY2FsLm1rIGIvZG9jL2xvY2FsLm1rCitpbmRleCBjMzQwNDUyLi42NDJmMzg1IDEwMDY0NAorLS0tIGEvZG9jL2xvY2FsLm1rCisrKysgYi9kb2MvbG9jYWwubWsKK0BAIC05OCwxMCArOTgsNyBAQCBlbmRpZiAhIENST1NTX0NPTVBJTElORworICMjIE1hbiBQYWdlcy4gICMjCisgIyMgLS0tLS0tLS0tLS0gIyMKKyAKKy1kaXN0X21hbl9NQU5TID0gJCh0b3Bfc3JjZGlyKS9kb2MvYmlzb24uMQorLQorLUVYVFJBX0RJU1QgKz0gJChkaXN0X21hbl9NQU5TOi4xPS54KQorLU1BSU5UQUlORVJDTEVBTkZJTEVTICs9ICQoZGlzdF9tYW5fTUFOUykKKytFWFRSQV9ESVNUICs9IGJpc29uLngKKyAKKyAjIERpZmZlcmVuY2VzIHRvIGlnbm9yZSB3aGVuIGNvbXBhcmluZyB0aGUgbWFuIHBhZ2UgKHRoZSBkYXRlKS4KKyByZW1vdmVfdGltZV9zdGFtcCA9IFwKK0BAIC0xMjQsMTAgKzEyMSw2IEBAICQodG9wX3NyY2RpcikvZG9jL2Jpc29uLjE6ICQoTUFOX0RFUFMpCisgCWZpCisgCSQoQU1fVl9hdClybSAtZiAkQCoudAorIAorLWlmIEVOQUJMRV9ZQUNDCistbm9kaXN0X21hbl9NQU5TID0gZG9jL3lhY2MuMQorLWVuZGlmCistCisgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAjIyBHcmFwaHZpeiBleGFtcGxlcyBnZW5lcmF0aW9uLiAjIworICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzlkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2gKQEAgLTAsMCArMSw0MTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCitJbmRleDogYmlzb24tMi40LjIvbTQvbGNtZXNzYWdlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvbGNtZXNzYWdlLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBsY21lc3NhZ2UubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisrCisrIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorKworK0FDX0RFRlVOKFtBTV9MQ19NRVNTQUdFU10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCisrICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorKyAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xDX01FU1NBR0VTLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L3VpbnRtYXhfdC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L3VpbnRtYXhfdC5tNAorQEAgLTAsMCArMSwyOSBAQAorKyMgdWludG1heF90Lm00IHNlcmlhbCA2IChnZXR0ZXh0LTAuMTEpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfUFJFUkVRKDIuMTMpCisrCisrIyBEZWZpbmUgdWludG1heF90IHRvIGB1bnNpZ25lZCBsb25nJyBvciBgdW5zaWduZWQgbG9uZyBsb25nJworKyMgaWYgPGludHR5cGVzLmg+IGRvZXMgbm90IGV4aXN0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KKysgICAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddKQorKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllcyBcCisrICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCisrICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZycKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCisrICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgaWYgPGludHR5cGVzLmg+IGFuZCA8c3RkaW50Lmg+IGRvbid0IGRlZmluZS5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L3Vsb25nbG9uZy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L3Vsb25nbG9uZy5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgdWxvbmdsb25nLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4wLjMyLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMTsgaW50IGkgPSA2MztdLAorKyAgICBbdW5zaWduZWQgbG9uZyBsb25nIHVsbG1heCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlLl0pCisrICBmaQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvaW50ZGl2MC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2ludGRpdjAubTQKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvZ2xpYi5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2dsaWIubTQKK0BAIC0wLDAgKzEsMTk2IEBACisrIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKysjIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCisrCisrZG5sIEFNX1BBVEhfR0xJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgWywgTU9EVUxFU11dXV0pCisrZG5sIFRlc3QgZm9yIEdMSUIsIGFuZCBkZWZpbmUgR0xJQl9DRkxBR1MgYW5kIEdMSUJfTElCUywgaWYgImdtb2R1bGUiIG9yIAorK2RubCBndGhyZWFkIGlzIHNwZWNpZmllZCBpbiBNT0RVTEVTLCBwYXNzIHRvIGdsaWItY29uZmlnCisrZG5sCisrQUNfREVGVU4oQU1fUEFUSF9HTElCLAorK1tkbmwgCisrZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2xpYi1jb25maWcgc2NyaXB0CisrZG5sCisrQUNfQVJHX1dJVEgoZ2xpYi1wcmVmaXgsWyAgLS13aXRoLWdsaWItcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfcHJlZml4PSIiKQorK0FDX0FSR19XSVRIKGdsaWItZXhlYy1wcmVmaXgsWyAgLS13aXRoLWdsaWItZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQorK0FDX0FSR19FTkFCTEUoZ2xpYnRlc3QsIFsgIC0tZGlzYWJsZS1nbGlidGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgR0xJQiBwcm9ncmFtXSwKKysJCSAgICAsIGVuYWJsZV9nbGlidGVzdD15ZXMpCisrCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRnbGliX2NvbmZpZ19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysKKysgIGZvciBtb2R1bGUgaW4gLiAkNAorKyAgZG8KKysgICAgICBjYXNlICIkbW9kdWxlIiBpbgorKyAgICAgICAgIGdtb2R1bGUpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBnbW9kdWxlIgorKyAgICAgICAgIDs7CisrICAgICAgICAgZ3RocmVhZCkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGd0aHJlYWQiCisrICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICBkb25lCisrCisrICBBQ19QQVRIX1BST0coR0xJQl9DT05GSUcsIGdsaWItY29uZmlnLCBubykKKysgIG1pbl9nbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCisrICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdMSUIgLSB2ZXJzaW9uID49ICRtaW5fZ2xpYl92ZXJzaW9uKQorKyAgbm9fZ2xpYj0iIgorKyAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgIG5vX2dsaWI9eWVzCisrICBlbHNlCisrICAgIEdMSUJfQ0ZMQUdTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCisrICAgIEdMSUJfTElCUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tbGlic2AKKysgICAgZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorKyAgICBnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCisrICAgIGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKysgICAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYnRlc3QiID0gInh5ZXMiIDsgdGhlbgorKyAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICBMSUJTPSIkR0xJQl9MSUJTICRMSUJTIgorK2RubAorK2RubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHTElCIGlzIHN1ZmZpY2llbnRseSBuZXcuIChBbHNvIHNhbml0eQorK2RubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgZ2xpYi1jb25maWcgdG8gc29tZSBleHRlbnQKKytkbmwKKysgICAgICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisraW50IAorK21haW4gKCkKKyt7CisrICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKysgIGNoYXIgKnRtcF92ZXJzaW9uOworKworKyAgc3lzdGVtICgidG91Y2ggY29uZi5nbGlidGVzdCIpOworKworKyAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCisrICB0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworKyAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgICAgIGV4aXQoMSk7CisrICAgfQorKworKyAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKysgICAgeworKyAgICAgIHByaW50ZigiXG4qKiogJ2dsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCBHTElCICglZC4lZC4lZClcbiIsIAorKyAgICAgICAgICAgICAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uLAorKyAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICBwcmludGYgKCIqKiogd2FzIGZvdW5kISBJZiBnbGliLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKKysgICAgICBwcmludGYgKCIqKiogdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvbiBvZiBHTElCLiBZb3UgbWF5IGFsc28gYmUgYWJsZSB0byBmaXggdGhlIGVycm9yXG4iKTsKKysgICAgICBwcmludGYoIioqKiBieSBtb2RpZnlpbmcgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgYnkgZWRpdGluZ1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOworKyAgICAgIHByaW50ZigiKioqIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtLlxuIik7CisrICAgICAgcHJpbnRmKCIqKiogSWYgZ2xpYi1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdMSUJfQ09ORklHXG4iKTsKKysgICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKysgICAgfSAKKysgIGVsc2UgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gR0xJQl9NQUpPUl9WRVJTSU9OKSB8fAorKwkgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9IEdMSUJfTUlOT1JfVkVSU0lPTikgfHwKKysgICAgICAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gR0xJQl9NSUNST19WRVJTSU9OKSkKKysgICAgeworKyAgICAgIHByaW50ZigiKioqIEdMSUIgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCisrCSAgICAgR0xJQl9NQUpPUl9WRVJTSU9OLCBHTElCX01JTk9SX1ZFUlNJT04sIEdMSUJfTUlDUk9fVkVSU0lPTik7CisrICAgICAgcHJpbnRmKCIqKiogbGlicmFyeSAodmVyc2lvbiAlZC4lZC4lZClcbiIsCisrCSAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoZ2xpYl9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCisrICAgICAgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIEdMSUIgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAorKyAgICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdMSUIgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAorKwkgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7CisrICAgICAgICBwcmludGYoIioqKiBHTElCIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZ3RrLm9yZy5cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKipcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgd3JvbmcgY29weSBvZiB0aGUgZ2xpYi1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7CisrICAgICAgICBwcmludGYoIioqKiBvZiBHTElCLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworKyAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorK10sLCBub19nbGliPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisrICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJ4JG5vX2dsaWIiID0geCA7IHRoZW4KKysgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorKyAgZWxzZQorKyAgICAgQUNfTVNHX1JFU1VMVChubykKKysgICAgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICAgICBlY2hvICIqKiogVGhlIGdsaWItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgR0xJQiBjb3VsZCBub3QgYmUgZm91bmQiCisrICAgICAgIGVjaG8gIioqKiBJZiBHTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKysgICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCisrICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gZ2xpYi1jb25maWcuIgorKyAgICAgZWxzZQorKyAgICAgICBpZiB0ZXN0IC1mIGNvbmYuZ2xpYnRlc3QgOyB0aGVuCisrICAgICAgICA6CisrICAgICAgIGVsc2UKKysgICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gR0xJQiB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKysgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJExJQlMgJEdMSUJfTElCUyIKKysgICAgICAgICAgQUNfVFJZX0xJTksoWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrXSwgICAgICBbIHJldHVybiAoKGdsaWJfbWFqb3JfdmVyc2lvbikgfHwgKGdsaWJfbWlub3JfdmVyc2lvbikgfHwgKGdsaWJfbWljcm9fdmVyc2lvbikpOyBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCisrICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR0xJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKysgICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgR0xJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgR0xJQiwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisrICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorKyAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisrCSAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCisrICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBjYW1lIHdpdGggdGhlIHN5c3RlbSB3aXRoIHRoZSBjb21tYW5kIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorKyAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgR0xJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorKyAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBHTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorKyAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgZ2xpYi1jb25maWcgc2NyaXB0OiAkR0xJQl9DT05GSUciIF0pCisrICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgICBmaQorKyAgICAgZmkKKysgICAgIEdMSUJfQ0ZMQUdTPSIiCisrICAgICBHTElCX0xJQlM9IiIKKysgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisrICBmaQorKyAgQUNfU1VCU1QoR0xJQl9DRkxBR1MpCisrICBBQ19TVUJTVChHTElCX0xJQlMpCisrICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC9pc2MtcG9zaXgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9pc2MtcG9zaXgubTQKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MmU4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMi4zLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiR05VIFByb2plY3QgcGFyc2VyIGdlbmVyYXRvciAoeWFjYyByZXBsYWNlbWVudCkiCitERVNDUklQVElPTiA9ICJCaXNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJzZXIgZ2VuZXJhdG9yIHRoYXQgY29udmVydHMgYW4gYW5ub3RhdGVkIGNvbnRleHQtZnJlZSBncmFtbWFyIGludG8gXAorYW4gTEFMUigxKSBvciBHTFIgcGFyc2VyIGZvciB0aGF0IGdyYW1tYXIuICBCaXNvbiBpcyB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIFlhY2M6IGFsbCBwcm9wZXJseS13cml0dGVuIFlhY2MgXAorZ3JhbW1hcnMgb3VnaHQgdG8gd29yayB3aXRoIEJpc29uIHdpdGggbm8gY2hhbmdlLiBBbnlvbmUgZmFtaWxpYXIgd2l0aCBZYWNjIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBCaXNvbiB3aXRoIFwKK2xpdHRsZSB0cm91YmxlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmlzb24vYmlzb24tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgIGZpbGU6Ly9iaXNvbi0yLjNfbTQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMjMyN2VmZGQ1MDgwZTJiMWFjYjZlNTYwYTA0YjQzYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MmY3OGFhNDc2MWE3NGNlYjdmZGY3NzBmMzU1NGRkODQzMDhjM2I5M2M0MjU1ZTNhNWMxNzU1OGVjZGEyOTNlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvKmdsLm00CisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcnVudGltZS1wby8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhlOWEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiR05VIFByb2plY3QgcGFyc2VyIGdlbmVyYXRvciAoeWFjYyByZXBsYWNlbWVudCkiCitERVNDUklQVElPTiA9ICJCaXNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJzZXIgZ2VuZXJhdG9yIHRoYXQgY29udmVydHMgYW4gYW5ub3RhdGVkIGNvbnRleHQtZnJlZSBncmFtbWFyIGludG8gXAorYW4gTEFMUigxKSBvciBHTFIgcGFyc2VyIGZvciB0aGF0IGdyYW1tYXIuICBCaXNvbiBpcyB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIFlhY2M6IGFsbCBwcm9wZXJseS13cml0dGVuIFlhY2MgXAorZ3JhbW1hcnMgb3VnaHQgdG8gd29yayB3aXRoIEJpc29uIHdpdGggbm8gY2hhbmdlLiBBbnlvbmUgZmFtaWxpYXIgd2l0aCBZYWNjIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBCaXNvbiB3aXRoIFwKK2xpdHRsZSB0cm91YmxlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8iCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9iaXNvbi9iaXNvbi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorIgorCisjIE5vIHBvaW50IGluIGhhcmRjb2RpbmcgcGF0aCB0byBtNCwganVzdCB1c2UgUEFUSAorRVhUUkFfT0VDT05GICs9ICJNND1tNCIKKworU1JDX1VSSVttZDVzdW1dID0gImMzNDIyMDFkZTEwNGNjOWNlMGEyMWUwYWQxMGQ0MDIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE3MjQyOGM3OTE3YmRmOWZhOTNjYjgxODFjOTcxYjZlMjI4MzQxMjU4NDhjZjFkMDNjZTEwYjFiYjA3MTZmZTEiCisKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWZvciBpIGluIG1mY2FsYyBjYWxjKysgcnBjYWxjOyBkbyBta2RpciAtcCAke0J9L2V4YW1wbGVzLyRpOyBkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9iaXNvbiBcCisJCUJJU09OX1BLR0RBVEFESVI9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9iaXNvbgorfQorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyL2Jvb3RjaGFydGRfc3RvcC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWE3ODg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2gKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBib290Y2hhcnRkX3N0b3AKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgJGFsbAorIyBSZXF1aXJlZC1TdG9wOiAKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RvcCBib290Y2hhcnRkIGNvbGxlY3Rpb24KKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgc2NyaXB0IGFjY29tcGFuaWVzIGJvb3RjaGFydGQgZnJvbSBib290Y2hhcnQyLiAKKyMgICAgICAgICAgICAgICAgICAgIGJvb3RjaGFydGQgc2hvdWxkIHN0b3AgZGV0ZWN0IHRoZSBlbmQgb2YgdGhlIGJvb3QgcHJvY2VzcworIyAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBpZiBhIHdpbmRvdyBtYW5hZ2VyIGlzIGxhdW5jaGVkLCBidXQgZm9yCisjICAgICAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgb25seSBvcGVyYXRpbmcgc3lzdGVtcywgdGhpcyBzY3JpcHQgc2hvdWxkIGJlCisjICAgICAgICAgICAgICAgICAgICB1c2VkIGluc3RlYWQuCisjIyMgRU5EIElOSVQgSU5GTworCisvc2Jpbi9ib290Y2hhcnRkIHN0b3AKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Ml8wLjE0LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwYTk4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiCkBAIC0wLDAgKzEsMTU0IEBACisjIENvcHlyaWdodCAoYykgMjAxMyBMRyBFbGVjdHJvbmljcywgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KKworIyBUaGlzIHJlY2lwZSBjcmVhdGVzIHBhY2thZ2VzIGZvciB0aGUgYm9vdGNoYXJ0MiBzeXN0ZW0td2lkZSBwcm9maWxlciBkYWVtb24gCisjIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gRGVwZW5kaW5nIG9uIHRoZSBpbWFnZXMgeW91J3JlIGJ1aWxkaW5nLCBhZGRpdGlvbmFsCisjIGNvbmZpZ3VyYXRpb24gbWF5IGJlIG5lZWRlZCBpbiBvcmRlciB0byB1c2UgaXQuCisjCisjIFBhY2thZ2VzOgorIyAgICogICBib290Y2hhcnQyIC0gVGhlIGRhZW1vbiBpdHNlbGYuCisjICAgKiAgIHB5Ym9vdGNoYXJ0Z3VpIC0gUHl0aG9uIHByb2dyYW0gdG8gdmlzdWFsaXplIGFuZCBkaXNwbGF5IHRoZSBkYXRhCisjICAgICAgIGNvbGxlY3RlZCBieSBib290Y2hhcnQyIG9yIGNvbXBhdGlibGUgZGFlbW9ucyBzdWNoIGFzIHRoZSBvcmlnaW5hbCAKKyMgICAgICAgYm9vdGNoYXJ0LgorIyAgICogICBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCAtIEEgU3lzViBpbml0IHNjcmlwdCB0byBzdG9wIGRhdGEgY29sbGVjdGlvbgorIyAgICAgICB3aGVuIGJvb3RpbmcgY29tcGxldGVzIChzZWUgYmVsb3cgZm9yIGRldGFpbHMuKQorIworIyBXaGlsZSBib290Y2hhcnQyIGlzIGRlc2lnbmVkIHRvIHN0b3AgY29sbGVjdGluZyBkYXRhIHJvdWdobHkgd2hlbiB0aGUgYm9vdCAKKyMgcHJvY2VzcyBjb21wbGV0ZXMsIGl0IGlzIG5vdCBleGFjdGx5IGEgc3RvcHdhdGNoLiBJdCBoYXMgYSBsaXN0IG9mIHByb2dyYW1zIAorIyB3aGljaCBhcmUgc3VwcG9zZWQgc2lnbmlmeSB0aGF0IHRoZSBib290IHByb2Nlc3MgaGFzIGNvbXBsZXRlZCAoZm9yIGV4YW1wbGUsCisjIG9wZW5ib3ggb3IgZ25vbWUtc2hlbGwsKSBidXQgaXQgd2FpdHMgYSBmdWxsIDIwIHNlY29uZHMgYWZ0ZXIgc3VjaCBhIHByb2dyYW0KKyMgaXMgbGF1bmNoZWQgYmVmb3JlIHN0b3BwaW5nIGl0c2VsZiwgdG8gY29sbGVjdCBhZGRpdGlvbmFsIGRhdGEuCisjCisjIElmIHlvdSBhcmUgdXNpbmcgYSB3aW5kb3cgbWFuYWdlciBvciBHVUkgd2hpY2ggaXNuJ3QgaW5jbHVkZWQgaW4gYm9vdGNoYXJ0MidzCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCB5b3Ugc2hvdWxkIHdyaXRlIGJiYXBwZW5kIGZpbGUgdG8gYW1lbmQKKyMgYm9vdGNoYXJ0ZC5jb25mIGFuZCBhZGQgaXQgdG8gRVhJVF9QUk9DLiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgc2hvd24gaW4gdGhpcworIyByZWNpcGUsIHdoZXJlIHRoZSBNYXRjaGJveCB3aW5kb3cgbWFuYWdlciAodXNlZCBieSBTYXRvKSBpcyBhZGRlZC4KKyMKKyMgSWYgeW91IHdhbnQgZGF0YSBjb2xsZWN0aW9uIHRvIGVuZCBhdCBhIGNlcnRhaW4gcG9pbnQgZXhhY3RseSwgeW91IHNob3VsZAorIyBhcnJhbmdlIGZvciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYmUgcnVuOgorIyAgIGJvb3RjaGFydGQgc3RvcAorIyBZb3UgbWlnaHQgc2V0IHRoaXMgY29tbWFuZCB0byBiZSBsYXVuY2hlZCBieSB0aGUgZGVza3RvcCBlbnZpcm9ubWVudCBzaGlwcGVkCisjIG9uIHRoZSBpbWFnZSB5b3UncmUgYnVpbGRpbmcgYWZ0ZXIgdGhlIG90aGVyIHN0YXJ0dXAgcHJvZ3JhbXMgYXJlIGNvbXBsZXRlLgorIyBUaGlzIHdpbGwgbm90IGluY3VyIHRoZSAyMCBzZWNvbmQgd2FpdCBwZXJpb2QgYW5kIHdpbGwgY2F1c2UgYm9vdGNoYXJ0MiB0bworIyBiZWhhdmUgYSBiaXQgbW9yZSBsaWtlIGEgc3RvcHdhdGNoLiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgc2hvd24gaW4gdGhpcyAKKyMgcmVjaXBlLCBzcGVjaWZpY2FsbHkgdGhlIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IHBhY2thZ2UsIHdoaWNoIHN0b3BzIGRhdGEKKyMgY29sbGVjdGlvbiBhcyB0aGUgbGFzdCBhY3Rpb24gd2hlbiBzd2l0Y2hpbmcgdG8gcnVubGV2ZWxzIDIgdGhyb3VnaCA1LiBZb3UgY2FuCisjIGFkZCBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCB0byBJTUFHRV9JTlNUQUxMIGlmIHlvdSBuZWVkIHRvIHVzZSBpdC4KKyMKKyMgVW5sZXNzIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgc3BlY2lhbCwgaWYgeW91ciBpbWFnZSBkb2VzIG5vdCBsYXVuY2ggYW4gWCAKKyMgd2luZG93IG1hbmFnZXIsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IHRvIHlvdXIgaW1hZ2UuCisjCisjIEJvb3RjaGFydDIgY2FuIGJlIHN0YXJ0ZWQgaW4gdHdvIHdheXMuIERhdGEgY29sbGVjdGlvbiBjYW4gYmUgaW5pdGlhdGVkIGJ5CisjIHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorIyAgIGJvb3RjaGFydGQgc3RhcnQKKyMgSG93ZXZlciwgZm9yIHRoZSBtb3N0IGNvbXBsZXRlIGRhdGEsIHRoZSBib290Y2hhcnQyIGRldmVsb3BlcnMgcmVjb21tZW5kCisjIHJ1bm5pbmcgaXQgYXMgUElEIDEuIFRoaXMgY2FuIGJlIGRvbmUgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGtlcm5lbCAKKyMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgaW4gdGhlIGJvb3Rsb2FkZXIgc2V0dXA6CisjICAgaW5pdD0vc2Jpbi9ib290Y2hhcnRkCisjIFdoZW4gaW52b2tlZCB0aGlzIHdheSwgYm9vdGNoYXJ0MiB3aWxsIHNldCBpdHNlbGYgdXAgYW5kIHRoZW4gYXV0b21hdGljYWxseSAKKyMgcnVuIC9zYmluL2luaXQuIEZvciBleGFtcGxlLCB3aGVuIGJvb3RpbmcgdGhlIGRlZmF1bHQgcWVtdXg4NiBpbWFnZSwgb25lIG1pZ2h0CisjIHVzZSBhIGNvbW1hbmQgbGlrZSB0aGlzOgorIyAgIHJ1bnFlbXUgcWVtdXg4NiBib290cGFyYW1zPSJpbml0Y2FsbF9kZWJ1ZyBwcmludGsudGltZT15IHF1aWV0IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdD0vc2Jpbi9ib290Y2hhcnRkIgorIworIyBOZWl0aGVyIG1ldGhvZCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBoZXJlLCBjaG9vc2Ugd2hhdCB3b3JrcyBmb3IgeW91LgorIworIyBJZiB5b3UgYXJlIGJ1aWxkaW5nIHlvdXIgaW1hZ2Ugd2l0aCBzeXN0ZW1kIGluc3RlYWQgb2YgU3lzViBpbml0LCBib290Y2hhcnQyCisjIGluY2x1ZGVzIHN5c3RlbWQgc2VydmljZSBmaWxlcyB0byBiZWdpbiBjb2xsZWN0aW9uIGF1dG9tYXRpY2FsbHkgYXQgYm9vdCBhbmQgCisjIGVuZCBjb2xsZWN0aW9uIGF1dG9tYXRpY2FsbHkgMjAgc2Vjb25kcyBhZnRlciB0aGUgYm9vdCBwcm9jZXNzIGhhcyBjb21wbGV0ZWQuCisjIEhvd2V2ZXIsIGJlIGF3YXJlIHRoYXQgc3lzdGVtZCB0ZW5kcyB0byBzdGFydCBib290Y2hhcnQyIHJlbGF0aXZlbHkgbGF0ZSBpbnRvCisjIHRoZSBib290IHByb2Nlc3MsIHNvIGl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSBib290Y2hhcnQyIGFzIFBJRCAxLiBJZiAKKyMgeW91J3JlIHVzaW5nIHN5c3RlbWQgYW5kIHlvdSB3aXNoIHRvIHVzZSBhbm90aGVyIG1ldGhvZCB0byBzdG9wIGRhdGEKKyMgY29sbGVjdGlvbiBhdCBhIHRpbWUgb2YgeW91ciBjaG9vc2luZywgeW91IG1heSBkbyBzbyBhcyBsb25nIGFzIHlvdSBnZXQgdG8gaXQKKyMgYmVmb3JlIHRoZSAyMCBzZWNvbmQgdGltZW91dCBvZiB0aGUgc3lzdGVtZCBzZXJ2aWNlIGZpbGVzLiBBbHNvLCB5b3UgbWF5IHdyaXRlCisjIGEgYmJhcHBlbmQgdG8gcGF0Y2ggYm9vdGNoYXJ0Mi1kb25lLnRpbWVyLmluIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZQorIyB0aW1lb3V0LiBEZWNyZWFzaW5nIGl0IHRvIDAgd2lsbCBtYWtlIGl0IGJlaGF2ZSBsaWtlCisjIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0LgorIworIyBCeSBkZWZhdWx0LCB3aGVuIGRhdGEgY29sbGVjdGlvbiBpcyBzdG9wcGVkLCBhIGZpbGUgbmFtZWQgYm9vdGNoYXJ0LnRneiB3aWxsCisjIGJlIGNyZWF0ZWQgaW4gL3Zhci9sb2cuIElmIHB5Ym9vdGNoYXJ0Z3VpIGlzIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UsCisjIGJvb3RjaGFydC5wbmcgd2lsbCBhbHNvIGJlIGNyZWF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gSG93ZXZlciwgdGhpcyByZXN1bHRzIGluCisjIGEgbm90aWNlYWJsZSBoaXRjaCBvciBwYXVzZSBhdCBib290IHRpbWUsIHdoaWNoIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCBvbiBhbgorIyBlbWJlZGRlZCBkZXZpY2UuIFNvIHlvdSBtYXkgcHJlZmVyIHRvIG9taXQgcHlib290Y2hhcnRndWkgZnJvbSB5b3VyIGltYWdlLiBJbgorIyB0aGF0IGNhc2UsIGNvcHkgYm9vdGNoYXJ0LnRneiBvdmVyIHRvIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGFuZCBnZW5lcmF0ZQorIyBib290Y2hhcnQucG5nIHRoZXJlLiBUbyBnZXQgcHlib290Y2hhcnRndWkgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0sIHlvdSBjYW4KKyMgZWl0aGVyIGluc3RhbGwgaXQgZGlyZWN0bHkgZnJvbSBzb21lIG90aGVyIHNvdXJjZSwgb3IgYnVpbGQgYm9vdGNoYXJ0Mi1uYXRpdmUKKyMgYW5kIGZpbmQgcHlib290Y2hhcnRndWkgaW4gdGhlIG5hdGl2ZSBzeXNyb290OgorIyAgICBiaXRiYWtlIGJvb3RjaGFydDItbmF0aXZlCisjICAgLi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vcHlib290Y2hhcnRndWkgL3BhdGgvdG8vYm9vdGNoYXJ0LnRnegorIyBOb3RlIHRoYXQsIHdoZXRoZXIgaW5zdGFsbGVkIG9uIHlvdXIgYnVpbGQgc3lzdGVtIG9yIG9uIHlvdXIgaW1hZ2UsIHRoZSAKKyMgcHlib290Y2hhcnRndWkgcHJvdmlkZWQgYnkgdGhpcyByZWNpcGUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLWkgb3B0aW9uLiBZb3UgCisjIHdpbGwgbmVlZCB0byBpbnN0YWxsIHB5Ym9vdGNoYXJ0Z3VpIGJ5IG90aGVyIG1lYW5zIGluIG9yZGVyIHRvIHJ1biBpdCBpbgorIyBpbnRlcmFjdGl2ZSBtb2RlLgorCitTVU1NQVJZID0gIkJvb3Rpbmcgc2VxdWVuY2UgYW5kIENQVSxJL08gdXNhZ2UgbW9uaXRvciIKK0RFU0NSSVBUSU9OID0gIk1vbml0b3JzIHdoZXJlIHRoZSBzeXN0ZW0gc3BlbmRzIGl0cyB0aW1lIGF0IHN0YXJ0LCBjcmVhdGluZyBhIGdyYXBoIG9mIGFsbCBwcm9jZXNzZXMsIGRpc2sgdXRpbGl6YXRpb24sIGFuZCB3YWl0IHRpbWUuIgorQVVUSE9SID0gIldvbmhvbmcgS3dvbiA8d29uaG9uZy5rd29uQGxnZS5jb20+IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL21tZWVrcy9ib290Y2hhcnQiCitMSUNFTlNFID0gIkdQTC0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NGFjNDY3ODMxMTI1NGRiNjJlZGY4ZmQzOWNiODEyNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL21tZWVrcy9ib290Y2hhcnQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2Jvb3RjaGFydGRfc3RvcC5zaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorU1JDUkVWID0gIjZmMDUwYjY1YWU5ZjI2NjY0NWYwNGYwYWVjYWI5ZWZiODgzNzVmMWMiCisKK2luaGVyaXQgc3lzdGVtZAoraW5oZXJpdCB1cGRhdGUtcmMuZAoraW5oZXJpdCBweXRob25uYXRpdmUKKworIyBUaGUgb25seSByZWFzb24gdG8gYnVpbGQgYm9vdGNoYXJ0Mi1uYXRpdmUgaXMgZm9yIGEgbmF0aXZlIHB5Ym9vdGNoYXJ0Z3VpLgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJib290Y2hhcnQyLnNlcnZpY2UgYm9vdGNoYXJ0Mi1kb25lLnNlcnZpY2UgYm9vdGNoYXJ0Mi1kb25lLnRpbWVyIgorCitVUERBVEVSQ1BOID0gImJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IgorSU5JVFNDUklQVF9OQU1FID0gImJvb3RjaGFydGRfc3RvcC5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDIgMyA0IDUgLiIKKworIyBXZSB3YW50IG5hdGl2ZSBweWJvb3RjaGFydGd1aSB0byBleGVjdXRlIHdpdGggdGhlIGNvcnJlY3QgUHl0aG9uIGludGVycGV0ZXIuCitkb19jb21waWxlX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGVjaG8gIiMhICR7UFlUSE9OfSIgfCBjYXQgLSAke1N9L3B5Ym9vdGNoYXJ0Z3VpLnB5ID4gJHtXT1JLRElSfS90ZW1wX3B5Ym9vdGNoYXJ0Z3VpCisgICAgbXYgJHtXT1JLRElSfS90ZW1wX3B5Ym9vdGNoYXJ0Z3VpICR7U30vcHlib290Y2hhcnRndWkucHkKKyAgICBjaG1vZCAreCAke1N9L3B5Ym9vdGNoYXJ0Z3VpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisgICAgZXhwb3J0IFBZX0xJQkRJUj0iJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0iCisgICAgZXhwb3J0IEJJTkRJUj0iJHtiaW5kaXJ9IgorICAgIGV4cG9ydCBMSUJESVI9IiR7YmFzZV9saWJkaXJ9IgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICMgbmVlZGVkIGZvciAtbmF0aXZlCisgICAgZXhwb3J0IFBZX0xJQkRJUj0iJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0iCisgICAgZXhwb3J0IEJJTkRJUj0iJHtiaW5kaXJ9IgorICAgIGV4cG9ydCBERVNURElSPSIke0R9IgorICAgIGV4cG9ydCBMSUJESVI9IiR7YmFzZV9saWJkaXJ9IgorCisgICAgb2VfcnVubWFrZSBpbnN0YWxsCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ib290Y2hhcnRkX3N0b3Auc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKyAgICBlY2hvICdFWElUX1BST0M9IiRFWElUX1BST0MgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIiJyA+PiAke0R9JHtzeXNjb25mZGlyfS9ib290Y2hhcnRkLmNvbmYKK30KKworUEFDS0FHRVMgPSsgInB5Ym9vdGNoYXJ0Z3VpIgorRklMRVNfcHlib290Y2hhcnRndWkgKz0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcHlib290Y2hhcnRndWkgJHtiaW5kaXJ9L3B5Ym9vdGNoYXJ0Z3VpIgorUkRFUEVORFNfcHlib290Y2hhcnRndWkgPSAicHl0aG9uLXB5Y2Fpcm8gcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1pbWFnZSBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1zaGVsbCBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLWNvZGVjcyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdzeXN2aW5pdC1waWRvZicsICdwcm9jcHMnLCBkKX0iCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImxzYiIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcHl0aG9uLXB5Y2Fpcm8tbmF0aXZlIgorCitQQUNLQUdFUyA9KyAiYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQiCitGSUxFU19ib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCArPSAiJHtzeXNjb25mZGlyfS9pbml0LmQgJHtzeXNjb25mZGlyfS9yYyouZCIKKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC9ib290Y2hhcnQtY29sbGVjdG9yIgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC90bXBmcyIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC8uZGVidWciCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vZG9jcyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJib290Y2hhcnQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzL2ZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM1M2M2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzL2ZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDM3M2ViNTEzMjhiNWUxMDUyOTc2M2NhZDQ0MTIxMGU2YjBlZmIyNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTEgRmViIDIwMTUgMjI6MDg6NDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6Citta2ZzLmM6MzAwOjQ2OiBlcnJvcjogJ0JUUkZTX0JVSUxEX1ZFUlNJT04nIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorICBmcHJpbnRmKHN0ZGVyciwgIm1rZnMuYnRyZnMsIHBhcnQgb2YgJXNcbiIsIEJUUkZTX0JVSUxEX1ZFUlNJT04pOworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDg2MGEzOTAuLjhhNmZiZDcgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xNDIsNyArMTQyLDcgQEAgZWxzZQorIAljaGVja19lY2hvID0gdHJ1ZQorIGVuZGlmCisgCistJS5vLmQ6ICUuYworKyUuby5kOiAlLmMgdmVyc2lvbi5oCisgCSQoUSkkKENDKSAtTU0gLU1HIC1NRiAkQCAtTVQgJChAOi5vLmQ9Lm8pIC1NVCAkKEA6Lm8uZD0uc3RhdGljLm8pIC1NVCAkQCAkKENGTEFHUykgJDwKKyAKKyAuYy5vOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M2MjJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQ2hlY2tzdW1taW5nIENvcHkgb24gV3JpdGUgRmlsZXN5c3RlbSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJCdHJmcyBpcyBhIG5ldyBjb3B5IG9uIHdyaXRlIGZpbGVzeXN0ZW0gZm9yIExpbnV4IGFpbWVkIGF0IFwKK2ltcGxlbWVudGluZyBhZHZhbmNlZCBmZWF0dXJlcyB3aGlsZSBmb2N1c2luZyBvbiBmYXVsdCB0b2xlcmFuY2UsIHJlcGFpciBhbmQgXAorZWFzeSBhZG1pbmlzdHJhdGlvbi4gXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHV0aWxpdGllcyAobWtmcywgZnNjaywgYnRyZnNjdGwpIHVzZWQgdG8gd29yayB3aXRoIFwKK2J0cmZzIGFuZCBhbiB1dGlsaXR5IChidHJmcy1jb252ZXJ0KSB0byBtYWtlIGEgYnRyZnMgZmlsZXN5c3RlbSBmcm9tIGFuIGV4dDMuIgorCitIT01FUEFHRSA9ICJodHRwczovL2J0cmZzLndpa2kua2VybmVsLm9yZyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZjYjAyZGM1NTJhMDQxZGVlMjdlNGI4NWM3Mzk2MDY3IgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IGF0dHIgZTJmc3Byb2dzIGx6byBhY2wiCisKK1NSQ1JFViA9ICI3ZjEzMjhjY2I1ZDE1OWVmZTg1MGQ0ZWFlYTliNDliYmU4YzQxODFlIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2RhdmUvYnRyZnMtcHJvZ3MuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC5wYXRjaCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICBzaCBhdXRvZ2VuLnNoCit9CisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWMzNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJCdWlsZCBSZXN1bHQgQ29tcGFyZSBTY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgc2NyaXB0cyB0byBmaW5kIG91dCBpZiB0aGUgYnVpbGQgcmVzdWx0XAorZGlmZmVycyB0byBhIGZvcm1lciBidWlsZC4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICAgZmlsZTovL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaDtzdHJpcGxldmVsPTEgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorUEFUQ0hUT09MID0gImdpdCIKKworU1JDUkVWID0gImM1MzUyYzA1NGM2ZWYxNTczNWRhMzFiNzZkNmQ4ODYyMGY0YWZmMGEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IGZ1bmN0aW9ucy5zaCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IHBrZy1kaWZmLnNoICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSA3NTUgc2FtZS1idWlsZC1yZXN1bHQuc2ggJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBzcnBtLWNoZWNrLnNoICR7RH0vJHtiaW5kaXJ9Cit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTUyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSAwMmRiYzdlMzQ3OGU0MDlkNmY1ZTNlMWM1M2RhZGRmODgzOGJlOTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDEgU2VwIDIwMTUgMTI6MDQ6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBvcnQgZm9yIGRlYiBhbmQgaXBrIHBhY2thZ2luZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBmdW5jdGlvbnMuc2ggfCAxNSArKysrKysrKysrKysrKysKKyBwa2ctZGlmZi5zaCAgfCAgNiArKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Z1bmN0aW9ucy5zaCBiL2Z1bmN0aW9ucy5zaAoraW5kZXggMDYwNzlkZi4uODVjOTAwMyAxMDA2NDQKKy0tLSBhL2Z1bmN0aW9ucy5zaAorKysrIGIvZnVuY3Rpb25zLnNoCitAQCAtODUsNiArODUsMTMgQEAgZnVuY3Rpb24gdW5wYWNrYWdlKCkKKyAgICAgICAgICAgICBDUElPX09QVFM9Ii0tZXh0cmFjdCAtLXVuY29uZGl0aW9uYWwgLS1wcmVzZXJ2ZS1tb2RpZmljYXRpb24tdGltZSAtLW1ha2UtZGlyZWN0b3JpZXMgLS1xdWlldCIKKyAgICAgICAgICAgICBycG0yY3BpbyAkZmlsZSB8IGNwaW8gJHtDUElPX09QVFN9CisgICAgICAgICAgICAgOzsKKysgICAgICAgICouaXBrfCouZGViKQorKyAgICAgICAgICAgIGFyIHggJGZpbGUKKysgICAgICAgICAgICB0YXIgeGYgY29udHJvbC50YXIuZ3oKKysgICAgICAgICAgICBybSBjb250cm9sLnRhci5negorKyAgICAgICAgICAgIHRhciB4ZiBkYXRhLnRhci5negorKyAgICAgICAgICAgIHJtIGRhdGEudGFyLmd6CisrICAgICAgICAgICAgOzsKKyAgICAgZXNhYworICAgICBwb3BkIDE+L2Rldi9udWxsCisgfQorQEAgLTI1NSw0ICsyNjIsMTIgQEAgZnVuY3Rpb24gY21wX3NwZWMgKCkKKyAgICAgcm0gJGZpbGUxICRmaWxlMgorICAgICByZXR1cm4gJFJFUworIH0KKysKKytmdW5jdGlvbiBhZGp1c3RfY29udHJvbGZpbGUgKCkgeworKyAgICBjYXQgJDEvY29udHJvbCB8IHNlZCAnL15WZXJzaW9uOiAvZCcgPiAkMS9jb250cm9sLmZpeGVkCisrICAgIG12ICQxL2NvbnRyb2wuZml4ZWQgJDEvY29udHJvbAorKyAgICBjYXQgJDIvY29udHJvbCB8IHNlZCAnL15WZXJzaW9uOiAvZCcgPiAkMi9jb250cm9sLmZpeGVkCisrICAgIG12ICQyL2NvbnRyb2wuZml4ZWQgJDIvY29udHJvbAorK30KKysKKyAjIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9wa2ctZGlmZi5zaCBiL3BrZy1kaWZmLnNoCitpbmRleCAwZjFmYTc2Li4zY2YxMGFhIDEwMDY0NAorLS0tIGEvcGtnLWRpZmYuc2gKKysrKyBiL3BrZy1kaWZmLnNoCitAQCAtMTM4LDYgKzEzOCwxMiBAQCBlY2hvICJFeHRyYWN0aW5nIHBhY2thZ2VzIgorIHVucGFja2FnZSAkb2xkcGtnICRkaXIvb2xkCisgdW5wYWNrYWdlICRuZXdwa2cgJGRpci9uZXcKKyAKKytjYXNlICRvbGRwa2cgaW4KKysgICouZGVifCouaXBrKQorKyAgICAgYWRqdXN0X2NvbnRyb2xmaWxlICRkaXIvb2xkICRkaXIvbmV3CisrICA7OworK2VzYWMKKysKKyAjIGZpbGVzIGlzIHNldCBpbiBjbXBfc3BlYyBmb3IgcnBtcywgc28gaWYgUkVTIGlzIGVtcHR5IHdlIHNob3VsZCBhc3N1bWUKKyAjIGl0IHdhc24ndCBhbiBycG0gYW5kIHBpY2sgYWxsIGZpbGVzIGZvciBjb21wYXJpc29uLgorIGlmIFsgLXogJFJFUyBdOyB0aGVuCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRhMWFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gMDE1NzE1Njk0ZWFkZDcxNGI5MDNmMzBhZGU4NzZlMDczOGQ0NDk3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBNb24sIDUgSmFuIDIwMTUgMTU6MDk6MjAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gSWdub3JlIERXQVJGIHNlY3Rpb25zLgorCitBc3N1bWUgZm9yIG5vdyB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIERXQVJGIHNlY3Rpb25zIGR1ZSB0byBwYXRoCitkaWZmZXJlbmNlcy4gSG93ZXZlciwgaW4gdGhlIGNhc2UgdGhlIHRvb2wgaXMgcmFuIG9uIGEgImRlYnVnIiBwYWNrYWdlCitpdCB3aWxsIG1vc3QgbGlrZWx5IGZhbHNlbHkgc2F5IHRoZSBwYWNrYWdlcyBoYXZlIG5vIGRpZmZlcmVuY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitUaGUgcGFja2FnZSBkaWZmZXJlbmNlIHRvb2wgaXMgY29ycmVjdGx5IGxhYmVsbGluZyB0aGUgcGFja2FnZXMgYXMgZGlmZmVyZW50Cit3aGVuIHRoZSBEV0FSRiBzZWN0aW9ucyBkb24ndCBtYXRjaCBkdWUgdG8gcGF0aHMuIFRoZSBwYXRocyBpbiB0aGUgZGVidWcgaW5mbworc2hvdWxkIGFjdHVhbGx5IGJlIG1hZGUgdG8gYmUgdGhlIHNhbWUgdXNpbmcgY29tcGlsZSBmbGFncyBvciBzb21lIG90aGVyCittZWNoYW5pc20uCisKK0hvd2V2ZXIsIHRvIG1ha2UgdGhlIHRvb2wgbW9yZSB1c2VmdWwgdG8gWW9jdG8gdW50aWwgdGhlIHdvcmsgY2FuIGJlIGRvbmUKK3RvIGVuc3VyZSBpZGVudGljYWwgcGF0aHMgaW4gZGVidWcgc2VjdGlvbnMsIHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZC4KKworU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHBrZy1kaWZmLnNoIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGtnLWRpZmYuc2ggYi9wa2ctZGlmZi5zaAoraW5kZXggNTYwMzVjMS4uMGYxZmE3NiAxMDA3NTUKKy0tLSBhL3BrZy1kaWZmLnNoCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTY1OCw3ICs2NTgsNyBAQCBjaGVja19zaW5nbGVfZmlsZSgpCisgICAgICAgIGVjaG8gIiIgPiRmaWxlMQorICAgICAgICBlY2hvICIiID4kZmlsZTIKKyAgICAgICAgIyBEb24ndCBjb21wYXJlIC5idWlsZC1pZCBhbmQgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbnMKKy0gICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiB8IHRyICJcbiIgIiAiKSIKKysgICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiAtZSAiXC5kZWJ1Z19hYmJyZXYiIC1lICJcLmRlYnVnX2FyYW5nZXMiIC1lICJcLmRlYnVnX2ZyYW1lIiAtZSAiXC5kZWJ1Z19pbmZvIiAtZSAiXC5kZWJ1Z19saW5lIiAtZSAiXC5kZWJ1Z19sb2MiIC1lICJcLmRlYnVnX21hY2luZm8iIC1lICJcLmRlYnVnX3B1Ym5hbWVzIiAtZSAiXC5kZWJ1Z19wdWJ0eXBlcyIgLWUgIlwuZGVidWdfcmFuZ2VzIiAgLWUgIlwuZGVidWdfc3RyIiB8IHRyICJcbiIgIiAiKSIKKyAgICAgICAgZm9yIHNlY3Rpb24gaW4gJHNlY3Rpb25zOyBkbworICAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG9sZC8kZmlsZSB8IHNlZCAicyxeb2xkLywsIiA+ICRmaWxlMQorICAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG5ldy8kZmlsZSB8IHNlZCAicyxebmV3LywsIiA+ICRmaWxlMgorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvUmVuYW1lLXJwbS1jaGVjay5zaC10by1wa2ctZGlmZi5zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmYzYTllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvUmVuYW1lLXJwbS1jaGVjay5zaC10by1wa2ctZGlmZi5zaC5wYXRjaApAQCAtMCwwICsxLDE1OTkgQEAKK0Zyb20gNGRlM2RmNWExYjM2MWNkMDlhMDgxZjBlMGJkYjk0Y2JmNjg0ZWQ0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAwMDozNDo0NyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgcnBtLWNoZWNrLnNoIHRvIHBrZy1kaWZmLnNoLgorCitUaGUgdG9vbCBub3cgYWNjZXB0cyBwYWNrYWdlIGlucHV0IG90aGVyIHRoYW4gcnBtLCBzbyBjaGFuZ2UgdGhlIG5hbWUKK3doaWNoIGNvdWxkIGJlIG1pc2xlYWRpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZS9wdWxsc10KKworU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KKworVXBkYXRlZCBmb3IgcnBtLWNoZWNrLnNoLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1aWxkLWNvbXBhcmUuc3BlYyAgIHwgICAgMiArLQorIHBrZy1kaWZmLnNoICAgICAgICAgIHwgIDc2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHJwbS1jaGVjay5zaCAgICAgICAgIHwgIDc2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc2FtZS1idWlsZC1yZXN1bHQuc2ggfCAgICA0ICstCisgNCBmaWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgNzY3IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBwa2ctZGlmZi5zaAorIGRlbGV0ZSBtb2RlIDEwMDc1NSBycG0tY2hlY2suc2gKKworZGlmZiAtLWdpdCBhL2J1aWxkLWNvbXBhcmUuc3BlYyBiL2J1aWxkLWNvbXBhcmUuc3BlYworaW5kZXggMTRhOTdlOS4uNWY0N2NhMSAxMDA2NDQKKy0tLSBhL2J1aWxkLWNvbXBhcmUuc3BlYworKysrIGIvYnVpbGQtY29tcGFyZS5zcGVjCitAQCAtMjUsNyArMjUsNyBAQCBWZXJzaW9uOiAgICAgICAgMjAxNS4wMi4xMAorIFJlbGVhc2U6ICAgICAgICAwCisgU291cmNlMTogICAgICAgIENPUFlJTkcKKyBTb3VyY2UyOiAgICAgICAgc2FtZS1idWlsZC1yZXN1bHQuc2gKKy1Tb3VyY2UzOiAgICAgICAgcnBtLWNoZWNrLnNoCisrU291cmNlMzogICAgICAgIHBrZy1kaWZmLnNoCisgU291cmNlNDogICAgICAgIGZ1bmN0aW9ucy5zaAorIFNvdXJjZTU6ICAgICAgICBzcnBtLWNoZWNrLnNoCisgQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZAorZGlmZiAtLWdpdCBhL3BrZy1kaWZmLnNoIGIvcGtnLWRpZmYuc2gKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41NjAzNWMxCistLS0gL2Rldi9udWxsCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTAsMCArMSw3NjUgQEAKKysjISAvYmluL2Jhc2gKKysjCisrIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgU1VTRSBMaW51eCBQcm9kdWN0IEdtYkgsIEdlcm1hbnkuCisrIyBMaWNlbnNlZCB1bmRlciBHUEwgdjIsIHNlZSBDT1BZSU5HIGZpbGUgZm9yIGRldGFpbHMuCisrIworKyMgV3JpdHRlbiBieSBNaWNoYWVsIE1hdHogYW5kIFN0ZXBoYW4gQ29vbG8KKysjIEVuaGFuY2VkIGJ5IEFuZHJlYXMgSmFlZ2VyCisrCisrRlVOQ1RJT05TPSR7MCUvKn0vZnVuY3Rpb25zLnNoCisrCisrY2hlY2tfYWxsPQorK2Nhc2UgJDEgaW4KKysgIC1hIHwgLS1jaGVjay1hbGwpCisrICAgIGNoZWNrX2FsbD0xCisrICAgIHNoaWZ0CisrZXNhYworKworK2lmIHRlc3QgIiQjIiAhPSAyOyB0aGVuCisrICAgZWNobyAidXNhZ2U6ICQwIFstYXwtLWNoZWNrLWFsbF0gb2xkLnJwbSBuZXcucnBtIgorKyAgIGV4aXQgMQorK2ZpCisrCisrc2VsZl9zY3JpcHQ9JChjZCAkKGRpcm5hbWUgJDApOyBlY2hvICQocHdkKS8kKGJhc2VuYW1lICQwKSkKKysKKytzb3VyY2UgJEZVTkNUSU9OUworKworK29sZHBrZz1gcmVhZGxpbmsgLWYgJDFgCisrbmV3cGtnPWByZWFkbGluayAtZiAkMmAKKytyZW5hbWVfc2NyaXB0PWBta3RlbXBgCisrCisraWYgdGVzdCAhIC1mICIkb2xkcGtnIjsgdGhlbgorKyAgICBlY2hvICJjYW4ndCBvcGVuICQxIgorKyAgICBleGl0IDEKKytmaQorKworK2lmIHRlc3QgISAtZiAiJG5ld3BrZyI7IHRoZW4KKysgICAgZWNobyAiY2FuJ3Qgb3BlbiAkMiIKKysgICAgZXhpdCAxCisrZmkKKysKKysjdXNhZ2UgdW5qYXIgPGZpbGU+CisrZnVuY3Rpb24gdW5qYXIoKQorK3sKKysgICAgbG9jYWwgZmlsZQorKyAgICBmaWxlPSQxCisrCisrICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9ZmFzdGphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1qYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj11bnppcAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCisrICAgICAgICBleGl0IDEKKysgICAgZmkKKysKKysgICAgY2FzZSAkVU5KQVIgaW4KKysgICAgICAgIGphcnxmYXN0amFyKQorKyAgICAgICAgIyBlY2hvIGphciAteGYgJGZpbGUKKysgICAgICAgICR7VU5KQVJ9IC14ZiAkZmlsZQorKyAgICAgICAgOzsKKysgICAgICAgIHVuemlwKQorKyAgICAgICAgdW56aXAgLW9xcSAkZmlsZQorKyAgICAgICAgOzsKKysgICAgZXNhYworK30KKysKKysjIGxpc3QgZmlsZXMgaW4gZGlyZWN0b3J5CisrI3VzYWdlIHVuamFyX2wgPGZpbGU+CisrZnVuY3Rpb24gdW5qYXJfbCgpCisreworKyAgICBsb2NhbCBmaWxlCisrICAgIGZpbGU9JDEKKysKKysgICAgaWYgW1sgJCh0eXBlIC1wIGZhc3RqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1mYXN0amFyCisrICAgIGVsaWYgW1sgJCh0eXBlIC1wIGphcikgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPWphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCB1bnppcCkgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPXVuemlwCisrICAgIGVsc2UKKysgICAgICAgIGVjaG8gIkVSUk9SOiBqYXIsIGZhc3RqYXIsIG9yIHVuemlwIGlzIG5vdCBpbnN0YWxsZWQgKHRyeWluZyBmaWxlICRmaWxlKSIKKysgICAgICAgIGV4aXQgMQorKyAgICBmaQorKworKyAgICBjYXNlICRVTkpBUiBpbgorKyAgICAgICAgamFyfGZhc3RqYXIpCisrICAgICAgICAke1VOSkFSfSAtdGYgJGZpbGUKKysgICAgICAgIDs7CisrICAgICAgICB1bnppcCkKKysgICAgICAgIHVuemlwIC1sICRmaWxlCisrICAgICAgICA7OworKyAgICBlc2FjCisrfQorKworK2ZpbHRlcl9kaXNhc20oKQorK3sKKysgICBzZWQgLWUgJ3MvXiAqWzAtOWEtZl1cKzovLycgLWUgJ3MvXCQweFswLTlhLWZdXCsvJHNvbWV0aGluZy8nIC1lICdzL2NhbGxxICpbMC05YS1mXVwrL2NhbGxxIC8nIC1lICdzLyMgKlswLTlhLWZdXCsvIyAgLycgLWUgJ3MvXCgweFwpXD9bMC05YS1mXVwrKC9vZmZzZXQoLycgLWUgJ3MvWzAtOWEtZl1cKyA8LzwvJyAtZSAncy9ePFwoLipcKT46L1wxOi8nIC1lICdzLzxcKC4qXCkrMHhbMC05YS1mXVwrPi88XDEgKyBvZnM+LycgCisrfQorKworK2VjaG8gIkNvbXBhcmluZyBgYmFzZW5hbWUgJG9sZHBrZ2AgdG8gYGJhc2VuYW1lICRuZXdwa2dgIgorKworK2Nhc2UgJG9sZHBrZyBpbgorKyAgKi5ycG0pCisrICAgICBjbXBfc3BlYyAkcmVuYW1lX3NjcmlwdCAkb2xkcGtnICRuZXdwa2cKKysgICAgIFJFUz0kPworKyAgICAgY2FzZSAkUkVTIGluCisrICAgICAgIDApCisrICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGlkZW50aWNhbCIKKysgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgZXhpdCAwCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgIDEpCisrICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGRpZmZlcmVudCIKKysgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgZXhpdCAxCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgIDIpCisrICAgICAgICAgIGVjaG8gIlJQTSBmaWxlIGNoZWNrc3VtIGRpZmZlcnMuIgorKyAgICAgICAgICBSRVM9MAorKyAgICAgICAgICA7OworKyAgICAgICAqKQorKyAgICAgICAgICBlY2hvICJXcm9uZyBleGl0IGNvZGUhIgorKyAgICAgICAgICBleGl0IDEKKysgICAgICAgICAgOzsKKysgICAgIGVzYWMKKysgICAgIDs7CisrZXNhYworKworK2ZpbGUxPWBta3RlbXBgCisrZmlsZTI9YG1rdGVtcGAKKysKKytkaXI9YG1rdGVtcCAtZGAKKytlY2hvICJFeHRyYWN0aW5nIHBhY2thZ2VzIgorK3VucGFja2FnZSAkb2xkcGtnICRkaXIvb2xkCisrdW5wYWNrYWdlICRuZXdwa2cgJGRpci9uZXcKKysKKysjIGZpbGVzIGlzIHNldCBpbiBjbXBfc3BlYyBmb3IgcnBtcywgc28gaWYgUkVTIGlzIGVtcHR5IHdlIHNob3VsZCBhc3N1bWUKKysjIGl0IHdhc24ndCBhbiBycG0gYW5kIHBpY2sgYWxsIGZpbGVzIGZvciBjb21wYXJpc29uLgorK2lmIFsgLXogJFJFUyBdOyB0aGVuCisrICAgIG9sZGZpbGVzPWBjZCAkZGlyL29sZDsgZmluZCAuIC10eXBlIGZgCisrICAgIG5ld2ZpbGVzPWBjZCAkZGlyL25ldzsgZmluZCAuIC10eXBlIGZgCisrCisrICAgIGZpbGVzPWBlY2hvIC1lICIkb2xkZmlsZXNcbiRuZXdmaWxlcyIgfCBzb3J0IC11YAorK2ZpCisrCisrY2QgJGRpcgorK2Jhc2ggJHJlbmFtZV9zY3JpcHQKKysKKytkZmlsZT1gbWt0ZW1wYAorKworK2RpZmZfdHdvX2ZpbGVzKCkKKyt7CisrICBpZiAhIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCisrICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKyAgICAgaGV4ZHVtcCAtQyBvbGQvJGZpbGUgPiAkZmlsZTEKKysgICAgIGhleGR1bXAgLUMgbmV3LyRmaWxlID4gJGZpbGUyCisrICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwMAorKyAgICAgcmV0dXJuIDEKKysgIGZpCisrICByZXR1cm4gMAorK30KKysKKyt0cmltX21hbl9maXJzdF9saW5lKCkKKyt7CisrICAgICMgSGFuZGxlcyB0aGUgZmlyc3QgbGluZSBpZiBpdCBpcyBsaWtlOgorKyAgICAjLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjggKFBvZDo6U2ltcGxlIDMuMjgpCisrICAgICMuXCIgRE8gTk9UIE1PRElGWSBUSElTIEZJTEUhICBJdCB3YXMgZ2VuZXJhdGVkIGJ5IGhlbHAybWFuIDEuNDMuMy4KKysgICAgbG9jYWwgZj0kMQorKyAgICBzZWQgLWkgLWUgJzF7CisrICAgIHN8XlwuXFwiW1s6Ymxhbms6XV1cK0F1dG9tYXRpY2FsbHlbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXVBvZDo6TWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIFBvZDo6TWFufAorKyAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtET1tbOmJsYW5rOl1dTk9UW1s6Ymxhbms6XV1NT0RJRllbWzpibGFuazpdXVRISVNbWzpibGFuazpdXUZJTEUhW1s6Ymxhbms6XV1cK0l0W1s6Ymxhbms6XV13YXNbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXWhlbHAybWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIGhlbHAybWFufAorKyAgICB9JyAkZgorK30KKysKKyt0cmltX21hbl9USCgpCisreworKyAgICAjIEhhbmRsZXMgbGluZXMgbGlrZToKKysgICAgIyAuVEggZGViaGVscGVyIDcgIjIwMTAtMDItMjciICI3LjQuMTUiICJEZWJoZWxwZXIiCisrICAgICMgLlRIIERJUk1OR1ItQ0xJRU5UIDEgMjAxMC0wMi0yNyAiRGlybW5nciAxLjAuMyIgIkdOVSBQcml2YWN5IEd1YXJkIgorKyAgICAjIC5USCBjY21ha2UgMSAiTWFyY2ggMDYsIDIwMTAiICJjY21ha2UgMi44LjEtcmMzIgorKyAgICAjIC5USCBRRU1VLUlNRyAxICIyMDEwLTAzLTE0IiAiICIgIiAiCisrICAgICMgLlRIIGtkZWNtYWtlIDEgIk1heSAwNywgMjAxMCIgImNtYWtlIDIuOC4xIgorKyAgICAjIC5USCAiYXBwZW5kZXIuaCIgMyAiMTIgTWF5IDIwMTAiICJWZXJzaW9uIDEuMi4xIiAibG9nNGMiIFwiIC0qLSBucm9mZiAtKi0KKysgICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCisrICAgICMgLlRIICJPRkZMSU5FSU1BUCIgIjEiICIxMSBNYXkgMjAxMCIgIkpvaG4gR29lcnplbiIgIk9mZmxpbmVJTUFQIE1hbnVhbCIKKysgICAgIyAuVEggZ3YgM2d1aWxlICIxMyBNYXkgMjAxMCIKKysgICAgIy5USCAiR0lUXC1BUkNISU1QT1JUIiAiMSIgIjA5LzEzLzIwMTAiICJHaXQgMVwmLjdcJi4xIiAiR2l0IE1hbnVhbCIKKysgICAgIyAuVEggTERJUkVDVE9SRCA4ICIyMDEwLTEwLTIwIiAicGVybCB2NS4xMi4yIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iCisrICAgICMgLlRIIGNjbWFrZSAxICJGZWJydWFyeSAwNSwgMjAxMiIgImNjbWFrZSAyLjguNyIKKysgICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCisrICAgICMgLlRIIEFSQ0ggIjEiICJTZXB0ZW1iZXIgMjAxMCIgIkdOVSBjb3JldXRpbHMgOC41IiAiVXNlciBDb21tYW5kcyIKKysgICAgIyAuVEggIkdDTS1DQUxJQlJBVEUiICIxIiAiMDMgRmVicnVhcnkgMjAxMiIgIiIgIiIKKysgICAgIy5USCBMb2NhbGU6OlBvNGE6OlhtbC5wbSAzcG0gIjIwMTUtMDEtMzAiICJQbzRhIFRvb2xzIiAiUG80YSBUb29scyIKKysgICAgbG9jYWwgZj0kMQorKyAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHF1b3RlZF9kYXRlKSgqKQorKyAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAicXEyMDAwLTAxLTAxIlwzfCcgJGYKKysgICAgIyAoLlRIIHVucXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXCgiW14iXVwrIlwpXChbWzpibGFuazpdXVwrLipcKVw/fFwxICJ1cTIwMDAtMDItMDIiXDN8JyAkZgorKyAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cKyJbXiJdXCsiW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSBxdTIwMDAtMDMtMDNcM3wnICRmCisrICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAodW5xdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSB1dTIwMDAtMDQtMDRcM3wnICRmCisrfQorKworK3N0cmlwX251bWJlcmVkX2FuY2hvcnMoKQorK3sKKysgICMgUmVtb3ZlIG51bWJlcmVkIGFuY2hvcnMgb24gRG9jYm9vayAvIEhUTUwgZmlsZXMuCisrICAjIFRoaXMgc2hvdWxkIGJlIHNhdmUgc2luY2Ugd2UgcmVtb3ZlIHRoZW0gZnJvbSBvbGQgYW5kIG5ldyBmaWxlcy4KKysgICMgQSB0cmFpbGluZyA8L2E+IG9yIDwvZGl2PiB0YWcgd2lsbCBzdGF5IGFsc28gb24gYm90aCBmaWxlcy4KKysgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICBzZWQgLWkgLWUgJ3MlPFsgXSphWyBdXCtuYW1lW148XSpbMC05XVwrW148XSolJWcnIFwKKysgICAgIC1lICdzJTxbIF0qYVsgXVwraHJlZltePF0qI1tePF0qWzAtOV1cK1tePF0qJSVnJyBcCisrICAgICAtZSAncyU8W148XSppZD0iZnRuXC5bXjxdKlswLTldXCtbXjxdKiUlZycgJGYKKysgIGRvbmUKKyt9CisrCisrCisrY2hlY2tfY29tcHJlc3NlZF9maWxlKCkKKyt7CisrICBsb2NhbCBmaWxlPSQxCisrICBsb2NhbCBleHQ9JDIKKysgIGxvY2FsIHRtcGRpcj1gbWt0ZW1wIC1kYAorKyAgbG9jYWwgZnR5cGUKKysgIGxvY2FsIHJldD0wCisrICBlY2hvICIkZXh0IGZpbGUgd2l0aCBvZGQgZmlsZW5hbWU6ICRmaWxlIgorKyAgaWYgdGVzdCAtbiAiJHRtcGRpciI7IHRoZW4KKysgICAgbWtkaXIgJHRtcGRpci97b2xkLG5ld30KKysgICAgY3AgLS1wYXJlbnRzIC0tZGVyZWZlcmVuY2Ugb2xkLyRmaWxlICR0bXBkaXIvCisrICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG5ldy8kZmlsZSAkdG1wZGlyLworKyAgICBpZiBwdXNoZCAkdG1wZGlyID4gL2Rldi9udWxsIDsgdGhlbgorKyAgICAgIGNhc2UgIiRleHQiIGluCisrICAgICAgICBiejIpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmJ6Mn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuYnoyfQorKyAgICAgICAgICBiemlwMiAtZCBvbGQvJGZpbGUuYnoyCisrICAgICAgICAgIGJ6aXAyIC1kIG5ldy8kZmlsZS5iejIKKysgICAgICAgICAgOzsKKysgICAgICAgIGd6aXApCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmd6fQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5nen0KKysgICAgICAgICAgZ3ppcCAtZCBvbGQvJGZpbGUuZ3oKKysgICAgICAgICAgZ3ppcCAtZCBuZXcvJGZpbGUuZ3oKKysgICAgICAgICAgOzsKKysgICAgICAgIHh6KQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC54en0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywueHp9CisrICAgICAgICAgIHh6IC1kIG9sZC8kZmlsZS54egorKyAgICAgICAgICB4eiAtZCBuZXcvJGZpbGUueHoKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgZnR5cGU9YC91c3IvYmluL2ZpbGUgb2xkLyRmaWxlIHwgc2VkICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnYAorKyAgICAgIGNhc2UgJGZ0eXBlIGluCisrICAgICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorKyAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywudGFyfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC50YXJ9CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS50YXI7IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAgQVNDSUlcIGNwaW9cIGFyY2hpdmVcICopCisrICAgICAgICAgIGVjaG8gIiRleHQgY29udGVudCBpczogJGZ0eXBlIgorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorKyAgICAgICAgICAgIHJldD0xCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgICAqKQorKyAgICAgICAgICBlY2hvICJ1bmhhbmRsZWQgJGV4dCBjb250ZW50OiAkZnR5cGUiCisrICAgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgICBwb3BkID4gL2Rldi9udWxsCisrICAgIGZpCisrICAgIHJtIC1yZiAiJHRtcGRpciIKKysgIGZpCisrICByZXR1cm4gJHJldAorK30KKysKKytjaGVja19zaW5nbGVfZmlsZSgpCisreworKyAgbG9jYWwgZmlsZT0iJDEiCisrICBjYXNlICRmaWxlIGluCisrICAgICouc3BlYykKKysgICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTEsUmVsZWFzZTogQFJFTEVBU0VALCIgb2xkLyRmaWxlCisrICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UyLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG5ldy8kZmlsZQorKyAgICAgICA7OworKyAgICAqLmV4ZS5tZGJ8Ki5kbGwubWRiKQorKyAgICAgICAjIEp1c3QgZGVidWcgaW5mb3JtYXRpb24sIHdlIGNhbiBza2lwIHRoZW0KKysgICAgICAgZWNobyAiJGZpbGUgc2tpcHBlZCBhcyBkZWJ1ZyBmaWxlLiIKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgKi5hKQorKyAgICAgICBmbGlzdD1gYXIgdCBuZXcvJGZpbGVgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICBhciB4IGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKysgICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgKi5jcGlvKQorKyAgICAgICBmbGlzdD1gY3BpbyAtLXF1aWV0IC0tbGlzdCAtLWZvcmNlLWxvY2FsIDwgIm5ldy8kZmlsZSJgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9JGZpbGUuZXh0cmFjdC4kUFBJRC4kJAorKyAgICAgICBta2RpciBvbGQvJGZkaXIgbmV3LyRmZGlyCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIGNwaW8gLS1xdWlldCAtLWV4dHJhY3QgLS1mb3JjZS1sb2NhbCA8ICIuLi8ke2ZpbGUjIyovfSIKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcm0gLXJmIG9sZC8kZmRpciBuZXcvJGZkaXIKKysgICAgICAgcmV0dXJuICRyZXQKKysgICAgICAgOzsKKysgICAgKi50YXJ8Ki50YXIuYnoyfCoudGFyLmd6fCoudGd6fCoudGJ6MikKKysgICAgICAgZmxpc3Q9YHRhciB0ZiBuZXcvJGZpbGVgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkCisrICAgICAgIGxvY2FsIHJldD0wCisrICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKysgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgIGZpCisrICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICByZXR1cm4gJHJldAorKyAgICAgICA7OworKyAgICAqLnppcHwqLmphcnwqLndhcikKKysgICAgICAgY2Qgb2xkCisrICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydCA+IGZsaXN0CisrICAgICAgICMgIDEwLTA1LTIwMTAgMTQ6MzkKKysgICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CisrICAgICAgICMgMjAxMi0wMi0wMyAwNzo1OQorKyAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICBjZCAuLi9uZXcKKysgICAgICAgdW5qYXJfbCAuLyRmaWxlIHxzb3J0PiBmbGlzdAorKyAgICAgICBzZWQgLWkgLWUgInMsIFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVwrIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLDsgIiBmbGlzdAorKyAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICBjZCAuLgorKyAgICAgICBpZiAhIGNtcCAtcyBvbGQvZmxpc3QgbmV3L2ZsaXN0OyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlIGhhcyBkaWZmZXJlbnQgZmlsZSBsaXN0IgorKyAgICAgICAgICBkaWZmIC11IG9sZC9mbGlzdCBuZXcvZmxpc3QKKysgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgZmxpc3Q9YGdyZXAgZGF0ZSBuZXcvZmxpc3QgfCBzZWQgLWUgJ3MsLiogZGF0ZSAsLCdgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIHVuamFyIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgdGVzdCAtZiBuZXcvJGZkaXIvJGYgJiYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuICRyZXQ7OworKyAgICAgKi5weWN8Ki5weW8pCisrICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnb2xkLyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCisrICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnbmV3LyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCisrICAgICAgICA7OworKyAgICAgKi5iejIpCisrICAgICAgICBidW56aXAyIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmJ6Mi99CisrICAgICAgICBidW56aXAyIC1jIG5ldy8kZmlsZSA+IG5ldy8ke2ZpbGUvLmJ6Mi99CisrICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmJ6Mi99CisrICAgICAgICByZXR1cm4gJD8KKysgICAgICAgIDs7CisrICAgICAqLmd6KQorKyAgICAgICAgZ3VuemlwIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmd6L30KKysgICAgICAgIGd1bnppcCAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5nei99CisrICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmd6L30KKysgICAgICAgIHJldHVybiAkPworKyAgICAgICAgOzsKKysgICAgICoucnBtKQorKwkkc2VsZl9zY3JpcHQgLWEgb2xkLyRmaWxlIG5ldy8kZmlsZQorKyAgICAgICAgcmV0dXJuICQ/CisrICAgICAgICA7OworKyAgICAgKnBuZykKKysJIyBUcnkgdG8gcmVtb3ZlIHRpbWVzdGFtcHMsIG9ubHkgaWYgY29udmVydCBmcm9tIEltYWdlTWFnaWNrIGlzIGluc3RhbGxlZAorKyAgICAgICAgaWYgW1sgJCh0eXBlIC1wIGNvbnZlcnQpIF1dOyB0aGVuCisrCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9CisrCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9CisrCSAgaWYgISBjbXAgLXMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ307IHRoZW4KKysJICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKysJICAgICAgaGV4ZHVtcCAtQyBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMQorKwkgICAgICBoZXhkdW1wIC1DIG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9ID4gJGZpbGUyCisrCSAgICAgIGRpZmYgLXUgJGZpbGUxICRmaWxlMiB8IGhlYWQgLW4gMjAKKysJICAgICAgcmV0dXJuIDEKKysJICBmaQorKwkgIHJldHVybiAwCisrCWZpCisrICAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9sb2NhbGUvKi9MQ19NRVNTQUdFUy8qLm1vfC91c3Ivc2hhcmUvbG9jYWxlLWJ1bmRsZS8qL0xDX01FU1NBR0VTLyoubW8pCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICJzLFBPVC1DcmVhdGlvbi1EYXRlOiAuLi4uLS4uLS4uIC4uOi4uKy4uLi4sUE9ULUNyZWF0aW9uLURhdGU6IDE5NzAtMDEtMDEgMDA6MDArMDAwMCwiICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvZG9jL3BhY2thZ2VzLyovKi5odG1sfFwKKysgICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi8qLmh0bWx8L3Vzci9zaGFyZS9kb2MvKi9odG1sLyouaHRtbCkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICAjIHRleGkyaHRtbCBvdXRwdXQsIGUuZy4gaW4ga3ZtLCBpbmRlbnQsIHFlbXUKKysJIHNlZCAtaSAtZSAic3xePCEtLSBDcmVhdGVkIG9uIC4qLCAyMC4uIGJ5IHRleGkyaHRtbCAuXC4uLnw8IS0tIENyZWF0ZWQgb24gQXVndXN0IDcsIDIwMDkgYnkgdGV4aTJodG1sIDEuODJ8IiAkZgorKwkgc2VkIC1pIC1lICdzfF4gKlRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPi4qLCAyMC4uPC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgLlwuLi48L2VtPjwvYT4uJHwgIFRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPkF1Z3VzdCA3LCAyMDA5PC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgMS44MjwvZW0+PC9hPi58JyAkZgorKwkgIyBkb3h5Z2VuIGRvY3UsIGUuZy4gaW4gbGlic3NoIGFuZCBsb2c0YworKwkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIDIwWzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCisrCSAjIEdlbmVyYXRlZCBvbiBTYXQgQXVnIDE0IDIwMTAgMTY6NDk6NDggZm9yIGxpYnNzaAorKwkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiAyMFswLTldWzAtOV0gWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyouaHRtbCB8XAorKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyovKi5odG1sfC91c3Ivc2hhcmUvamF2YWRvYy8qLyovKi5odG1sKQorKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgICMgVGhlcmUgYXJlIG1vcmUgdGltZXN0YW1wcyBpbiBodG1sLCBzbyBmYXIgd2UgaGFuZGxlIG9ubHkgc29tZSBwcmltaXRpdmUgdmVyc2lvbnMuCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyBKYXZhZG9jOgorKyAgICAgICAgICAjIDxoZWFkPgorKyAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKHZlcnNpb24gMS43LjBfNzUpIG9uIFR1ZSBGZWIgMDMgMDI6MjA6MTIgR01UIDIwMTUgLS0+CisrICAgICAgICAgICMgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUdWUgRmViIDAzIDAwOjAyOjQ4IEdNVCAyMDE1IC0tPgorKyAgICAgICAgICAjIDxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMTUtMDItMDMiPgorKyAgICAgICAgICAjIDwvaGVhZD4KKysgICAgICAgICAgc2VkIC1pIC1lICcKKysgICAgICAgICAgICAvXjxoZWFkPi97CisrICAgICAgICAgICAgICA6IG5leHQKKysgICAgICAgICAgICAgIG4KKysgICAgICAgICAgICAgIC9ePFwvaGVhZD4veworKyAgICAgICAgICAgICAgICBiIGVuZF9oZWFkCisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKChcKGJ1aWxkXHx2ZXJzaW9uXCkgWzAtOS5fXVwrKSBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFw1LworKyAgICAgICAgICAgICAgdCBuZXh0CisrICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKG9uIC4uLiAuLi4gLi4gLi46Li46Li4gXChHTVRcfFVUQ1wpIC4uLi5cKSBcKC0tPlwpL1wxIHNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUgXDMvCisrICAgICAgICAgICAgICB0IG5leHQKKysgICAgICAgICAgICAgIHMvXjxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IlswLTldXHs0XH0tWzAtOV1cezJcfS1bMC05XVx7Mlx9Ij4vPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0ic29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSI+LworKyAgICAgICAgICAgICAgYiBuZXh0CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIDogZW5kX2hlYWQKKysgICAgICAgICAgJyAkZgorKyAgICAgICAgICMgR2pkb2MgSHRtbERvY2xldDoKKysJIHNlZCAtaSAtZSAncyVHZW5lcmF0ZWQgYnkgR2pkb2MgSHRtbERvY2xldCBbMC05LC5dKiwgcGFydCBvZiA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2NwLXRvb2xzLyIgdGl0bGU9IiIgdGFyZ2V0PSJfdG9wIj5HTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gLiosIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULiVHZW5lcmF0ZWQgYnkgR2pkb2MuJScgJGYKKysJIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXCguKlwpR05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIFtBLVpdW2Etel0qIFswLTldKiwgMjA/PyBbMC05XSo6Pz86Pz8gXChhfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURCBYSFRNTCAxLjEgcGx1cyBUYXJnZXQgMS4wLy9FTiJcMUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBKYW51YXJ5IDEsIDIwMDkgMDowMDowMCBhLm0uIEdNVC48L3A+JScgJGYKKysJIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVERcKC4qR05VIENsYXNzcGF0aCBUb29sczwvYT5cKSwgb24gW2EtekEtWl0qIFswLTldWzAtOV0sIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULjwvcD4lPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXDEsb24gTWF5IDEsIDIwMTAgMToxMTo0MiBwLm0uIEdNVC48L3A+JScgJGYKKysJICMgZGVwcmVjYXRlZC1saXN0IGlzIHJhbmRvbWx5IG9yZGVyZWQsIHNvcnQgaXQgZm9yIGNvbXBhcmlzb24KKysJIGNhc2UgJGYgaW4KKysJICAgKi9kZXByZWNhdGVkLWxpc3QuaHRtbCkKKysJICAgICBzb3J0IC1vICRmICRmCisrCSAgICAgOzsKKysJIGVzYWMKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jL2dqZG9jLnByb3BlcnRpZXMgfFwKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qL2dqZG9jLnByb3BlcnRpZXMpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSBzZWQgLWkgLWUgJ3N8XiNbQS1aXVthLXpdXHsyXH0gW0EtWl1bYS16XVx7Mlx9IFswLTldXHsyXH0gLi46Li46Li4gR01UIDIwLi4kfCNGcmkgSmFuIDAxIDExOjI3OjM2IEdNVCAyMDA5fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgKi9mb250cy5zY2FsZXwqL2ZvbnRzLmRpcnwqL2VuY29kaW5ncy5kaXIpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyBzb3J0IGZpbGVzIGJlZm9yZSBjb21wYXJpbmcKKysgICAgICAgICBzb3J0IC1vICRmICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC92YXIvYWRtL3BlcmwtbW9kdWxlcy8qKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAnc3xePWhlYWQyIC4uLiAuLi4gLi4gLi46Li46Li4gLi4uLjogQzxNb2R1bGU+fD1oZWFkMiBXZWQgSnVsICAxIDAwOjAwOjAwIDIwMDk6IEM8TW9kdWxlPnwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvbWFuL21hbjMvKjNwbSkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICBzZWQgLWkgLWUgJ3N8IDMgIjIwLi4tLi4tLi4iICJwZXJsIHY1Li4uLi4iICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIkfCAzICIyMDA5LTAxLTAxIiAicGVybCB2NS4xMC4wIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24ifCcgJGYKKysgICAgICAgICB0cmltX21hbl9USCAkZgorKyAgICAgICAgIHRyaW1fbWFuX2ZpcnN0X2xpbmUgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9tYW4vKi9tYW4qfC91c3Ivc2hhcmUvbWFuL21hbip8L3Vzci9saWIvdGV4bWYvZG9jL21hbi8qLyopCisrCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgdHJpbV9tYW5fVEggJGYKKysgICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCisrICAgICAgICAgIyBnZW5lcmF0ZWQgYnkgZG9jYm9vayB4bWw6CisrICAgICAgICAgIy5cIiAgICAgIERhdGU6IDA5LzEzLzIwMTAKKysgICAgICAgICBzZWQgLWkgLWUgJ3N8RGF0ZTogWzAtMV1bMC05XS9bMC05XVswLTldLzIwMVswLTldfERhdGU6IDA5LzEzLzIwMTB8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAqLmVsYykKKysgICAgICAgIyBlbWFjcyBsaXNwIGZpbGVzCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICdzfENvbXBpbGVkIGJ5IGFidWlsZEAuKiBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIDIwLi4kfGNvbXBpbGVkIGJ5IGFidWlsZEBidWlsZGhvc3Qgb24gV2VkIEp1bCAwMSAwMDowMDowMCAyMDA5fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvKi8qZm10IHxcCisrICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy9tZXRhZm9udC8qLmJhc2V8XAorKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YXBvc3QvKi5tZW0pCisrICAgICAgICMgYmluYXJ5IGR1bXAgb2YgVGVYIGFuZCBNZXRhZm9udCBmb3JtYXRzLCB3ZSBjYW4gaWdub3JlIHRoZW0gZm9yIGdvb2QKKysgICAgICAgZWNobyAiZGlmZmVyZW5jZSBpbiAkZmlsZSBpZ25vcmVkLiIKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgICovbGlidG9vbCkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysJICBzZWQgLWkgLWUgJ3N8XiMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IFtBLVphLXowLTldKjokfCMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IHg0Mjp8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvZXRjL21haWwvKmNmfC9ldGMvc2VuZG1haWwuY2YpCisrICAgICAgICMgZnJvbSBzZW5kbWFpbCBwYWNrYWdlCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSAgIyAtICMjIyMjIGJ1aWx0IGJ5IGFidWlsZEBidWlsZDMzIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMAorKwkgIHNlZCAtaSAtZSAnc3xidWlsdCBieSBhYnVpbGRAW2EtejAtOV0qIG9uIC4uLiAuLi4gWzAtOV0qIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gLiogMjBbMC05XVswLTldfGJ1aWx0IGJ5IGFidWlsZEBidWlsZDQyIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMHwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi9pbmRleC5jYWNoZXwvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi9pbmRleC5jYWNoZXxcCisrICAgICAvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouaHRtbHwvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouZGV2aGVscDIpCisrICAgICAgICMgdmFyaW91cyBrZGUgYW5kIGd0ayBwYWNrYWdlcworKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgIDs7CisrICAgICovY3JlYXRlZC5yaWQpCisrICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCisrICAgICAgICMgZmlsZSBqdXN0IGNvbnRhaW5zIGEgdGltZXN0YW1wIGFuZCBub3RoaW5nIGVsc2UsIHNvIGlnbm9yZSBpdAorKyAgICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICovcmRvYy9maWxlcy8qLmh0bWwpCisrICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCisrICAgICAgICMgPHRkPk1vbuKAglNlcOKAgjIw4oCCMTk6MDI6NDPigIIrMDAwMOKAgjIwMTA8L3RkPgorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICBzZWQgLWkgLWUgJ3MlPHRkPltBLVpdW2Etel1bYS16XSBbQS1aXVthLXpdW2Etel0gWzAtOV1cKyBbMC05XVwrOlswLTldXCs6WzAtOV1cKyArMDAwMCAyMDFbMC05XTwvdGQ+JTx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4lZycgJGYKKysgICAgICAgZG9uZQorKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgIDs7CisrICAgICovTGludXgqRW52LlNldC5zaCkKKysgICAgICAgIyBMaWJyZU9mZmljZSBmaWxlcywgY29udGFpbnM6CisrICAgICAgICMgR2VuZXJhdGVkIG9uOiBNb24gQXByIDE4IDEzOjE5OjIyIFVUQyAyMDExCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSBzZWQgLWkgLWUgJ3MlXiMgR2VuZXJhdGVkIG9uOi4qVVRDIDIwMVswLTldICokJSMgR2VuZXJhdGVkIG9uOiBTb21ldGltZSVnJyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgIC91c3IvbGliL2xpYnJlb2ZmaWNlL3NvbHZlci9pbmMvKi9kZWxpdmVyLmxvZykKKysgICAgICAgIyBMaWJyZU9mZmljZSBsb2cgZmlsZQorKyAgICAgIGVjaG8gIklnbm9yZSAkZmlsZSIKKysgICAgICByZXR1cm4gMAorKyAgICAgIDs7CisrICAgIC92YXIvYWRtL3VwZGF0ZS1tZXNzYWdlcy8qfC92YXIvYWRtL3VwZGF0ZS1zY3JpcHRzLyopCisrICAgICAgIyBlbmNvZGUgdmVyc2lvbi1yZWxlYXNlIGluc2lkZQorKyAgICAgIG9sZGZuPWBlY2hvICIkZmlsZSJ8c2VkIC1lIHMvLSRyZWxlYXNlMi8tJHJlbGVhc2UxLztgCisrCisrICAgICAgIyBmZXRjaG1zdHRmb250cyBlbWJlZHMgdGhlIHJlbGVhc2UgbnVtYmVyIGluIHRoZSB1cGRhdGUgc2hlbGwgc2NyaXB0LgorKyAgICAgIGVjaG8gc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCisrICAgICAgc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCisrCisrICAgICAgaWYgISBkaWZmIC11IG9sZC8kb2xkZm4gbmV3LyRmaWxlOyB0aGVuCisrICAgICAgICAgICBlY2hvICIkb2xkZm4gaXMgbm90IHNhbWUgYXMgJGZpbGUiCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgIGZpCisrICAgICAgZWNobyAiJGZpbGUgYW5kICRvbGRmbiBhcmUgc2FtZSIKKysgICAgICByZXR1cm4gMAorKyAgICAgIDs7CisrICAgICoucHMpCisrICAgICAgZm9yIGYgaW4gIm9sZC8kZmlsZSIgIm5ldy8kZmlsZSI7IGRvCisrICAgICAgICBzZWQgLWkgLWUgJworKyAgICAgICAgICAvXiUlQ3JlYXRpb25EYXRlOltbOmJsYW5rOl1dL2QKKysgICAgICAgICAgL14lJUNyZWF0b3I6W1s6Ymxhbms6XV1ncm9mZltbOmJsYW5rOl1ddmVyc2lvbltbOmJsYW5rOl1dL2QKKysgICAgICAgICAgL14lRFZJUFNTb3VyY2U6W1s6Ymxhbms6XV0vZAorKyAgICAgICAgJyAiJGYiCisrICAgICAgZG9uZQorKyAgICA7OworKyAgICAqcGRmKQorKyAgICAgICMgUERGIGZpbGVzIGNvbnRhaW4gYSB1bmlxdWUgSUQsIHJlbW92ZSBpdAorKyAgICAgICMgRm9ybWF0IG9mIHRoZSBJRCBpczoKKysgICAgICAjIC9JRCBbPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPiA8OUFDRTI0N0E3MENGOUJFQUZFRTE1RTExNjI1OUJENkQ+XQorKyAgICAgICMgd2l0aCBvcHRpb25hbCBzcGFjZXMuIHBkZnRleCBjcmVhdGVzIGFsc286CisrICAgICAgIyAvQ3JlYXRpb25EYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKysgICAgICAjIC9Nb2REYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKysgICAgICAjIGFuZCBwb3NzaWJseSBYTUwgbWV0YWRhdGEgYXMgd2VsbAorKyAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworKyAgICAgICAgc2VkIC1pIFwKKysgICAgICAgICAgICAnL29iai8sL2VuZG9iai97CisrICAgICAgICAgICAgICAgcyUvSUQgXD9cWyBcPzxbXj5dXCs+IFw/PFtePl1cKz4gXD9cXSUvSURyYW5kb20lZzsKKysgICAgICAgICAgICAgICBzJS9DcmVhdGlvbkRhdGUgXD8oRDpbXildKiklL0NyZWF0aW9uRGF0ZSAoRDogWFhYKSVnOworKyAgICAgICAgICAgICAgIHMlL01vZERhdGUgXD8oRDpbXildKiklL01vZERhdGUgKEQ6IFhYWCklZzsKKysgICAgICAgICAgICAgICBzJTxwZGY6Q3JlYXRpb25EYXRlPltePF0qPC9wZGY6Q3JlYXRpb25EYXRlPiU8cGRmOkNyZWF0aW9uRGF0ZT5YWFg8L3BkZjpDcmVhdGlvbkRhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8cGRmOk1vZERhdGU+W148XSo8L3BkZjpNb2REYXRlPiU8cGRmOk1vZERhdGU+WFhYPC9wZGY6TW9kRGF0ZT4lZzsKKysgICAgICAgICAgICAgICBzJTx4YXA6Q3JlYXRlRGF0ZT5bXjxdKjwveGFwOkNyZWF0ZURhdGU+JTx4YXA6Q3JlYXRlRGF0ZT5YWFg8L3hhcDpDcmVhdGVEYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHhhcDpNb2RpZnlEYXRlPltePF0qPC94YXA6TW9kaWZ5RGF0ZT4lPHhhcDpNb2RpZnlEYXRlPlhYWDwveGFwOk1vZGlmeURhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8eGFwOk1ldGFkYXRhRGF0ZT5bXjxdKjwveGFwOk1ldGFkYXRhRGF0ZT4lPHhhcDpNZXRhZGF0YURhdGU+WFhYPC94YXA6TWV0YWRhdGFEYXRlPiVnOworKyAgICAgICAgICAgIH0nICIkZiIKKysgICAgICBkb25lCisrICAgICAgOzsKKysgIGVzYWMKKysKKysgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKysgIGNhc2UgJGZ0eXBlIGluCisrICAgICBQRTMyXCBleGVjdXRhYmxlKk1vbm9cL1wuTmV0XCBhc3NlbWJseSopCisrICAgICAgIGVjaG8gIlBFMzIgTW9uby8uTmV0IGFzc2VtYmx5OiAkZmlsZSIKKysgICAgICAgaWYgWyAteCAvdXNyL2Jpbi9tb25vZGlzIF0gOyB0aGVuCisrICAgICAgICAgbW9ub2RpcyBvbGQvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTF9CisrICAgICAgICAgbW9ub2RpcyBuZXcvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTJ9CisrICAgICAgICAgaWYgISBjbXAgLXMgJHtmaWxlMX0gJHtmaWxlMn07IHRoZW4KKysgICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrICAgICAgICAgICBkaWZmIC11ICR7ZmlsZTF9ICR7ZmlsZTJ9CisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICAgIGZpCisrICAgICAgIGVsc2UKKysgICAgICAgICBlY2hvICJDYW5ub3QgY29tcGFyZSwgbm8gbW9ub2RpcyBpbnN0YWxsZWQiCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgRUxGKmV4ZWN1dGFibGUqfEVMRipbTE1dU0JcIHNoYXJlZFwgb2JqZWN0KikKKysgICAgICAgb2JqZHVtcCAtZCAtLW5vLXNob3ctcmF3LWluc24gb2xkLyRmaWxlIHwgZmlsdGVyX2Rpc2FzbSA+ICRmaWxlMQorKyAgICAgICBpZiAhIHRlc3QgLXMgJGZpbGUxOyB0aGVuCisrICAgICAgICAgIyBvYmpkdW1wIGhhcyBubyBpZGVhIGhvdyB0byBoYW5kbGUgaXQKKysgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgYnJlYWsKKysgICAgICAgICBmaQorKyAgICAgICBmaSAgICAgICAKKysgICAgICAgZWxmZGlmZj0KKysgICAgICAgc2VkIC1pIC1lICJzLG9sZC8sLCIgJGZpbGUxCisrICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG5ldy8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTIKKysgICAgICAgc2VkIC1pIC1lICJzLG5ldy8sLCIgJGZpbGUyCisrICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyID4gJGRmaWxlOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgaW4gYXNzZW1ibGVyIG91dHB1dCIKKysgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCisrICAgICAgICAgIGVsZmRpZmY9IjEiCisrICAgICAgIGZpCisrICAgICAgIGVjaG8gIiIgPiRmaWxlMQorKyAgICAgICBlY2hvICIiID4kZmlsZTIKKysgICAgICAgIyBEb24ndCBjb21wYXJlIC5idWlsZC1pZCBhbmQgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbnMKKysgICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiB8IHRyICJcbiIgIiAiKSIKKysgICAgICAgZm9yIHNlY3Rpb24gaW4gJHNlY3Rpb25zOyBkbworKyAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG9sZC8kZmlsZSB8IHNlZCAicyxeb2xkLywsIiA+ICRmaWxlMQorKyAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG5ldy8kZmlsZSB8IHNlZCAicyxebmV3LywsIiA+ICRmaWxlMgorKyAgICAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIEVMRiBzZWN0aW9uICRzZWN0aW9uIgorKyAgICAgICAgICAgICBoZWFkIC1uIDIwMCAkZGZpbGUKKysgICAgICAgICAgICAgZWxmZGlmZj0iMSIKKysgICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICBpZiB0ZXN0IC16ICIkZWxmZGlmZiI7IHRoZW4KKysgICAgICAgICAgZWNobyAiJGZpbGU6IG9ubHkgZGlmZmVyZW5jZSB3YXMgaW4gYnVpbGQtaWQgb3IgZ251X2RlYnVnbGluaywgR09PRC4iCisrICAgICAgICAgIHJldHVybiAwCisrICAgICAgIGZpCisrICAgICAgIHJldHVybiAxCisrICAgICAgIDs7CisrICAgICAqQVNDSUkqfCp0ZXh0KikKKysgICAgICAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorKyAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrICAgICAgICAgZGlmZiAtdSBvbGQvJGZpbGUgbmV3LyRmaWxlIHwgaGVhZCAtbiAyMDAKKysgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgZGlyZWN0b3J5fHNldHVpZCxcIGRpcmVjdG9yeXxzdGlja3ksXCBkaXJlY3RvcnkpCisrICAgICAgICMgdGFyIG1pZ2h0IHBhY2thZ2UgZGlyZWN0b3JpZXMgLSBpZ25vcmUgdGhlbSBoZXJlCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICBiemlwMlwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImJ6MiI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBnemlwXCBjb21wcmVzc2VkXCBkYXRhKikKKysgICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAiZ3ppcCI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBYWlwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgInh6IjsgdGhlbgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIFBPU0lYXCB0YXJcIGFyY2hpdmUpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCisrICAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIGNwaW9cIGFyY2hpdmUpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmNwaW99CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLmNwaW99CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS5jcGlvOyB0aGVuCisrICAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICAgZmkKKysgICAgIDs7CisrICAgICBzeW1ib2xpY1wgbGlua1wgdG9cICopCisrICAgICAgIHJlYWRsaW5rICJvbGQvJGZpbGUiID4gJGZpbGUxCisrICAgICAgIHJlYWRsaW5rICJuZXcvJGZpbGUiID4gJGZpbGUyCisrICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyOyB0aGVuCisrICAgICAgICAgZWNobyAic3ltbGluayB0YXJnZXQgZm9yICRmaWxlIGRpZmZlcnMiCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgICopCisrICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisrICByZXR1cm4gMAorK30KKysKKysjIFdlIG5lZWQgL3Byb2MgbW91bnRlZCBmb3Igc29tZSB0ZXN0cywgc28gY2hlY2sgdGhhdCBpdCdzIG1vdW50ZWQgYW5kCisrIyBjb21wbGFpbiBpZiBub3QuCisrUFJPQ19NT1VOVEVEPTAKKytpZiBbICEgLWQgL3Byb2Mvc2VsZi8gXTsgdGhlbgorKyAgZWNobyAiL3Byb2MgaXMgbm90IG1vdW50ZWQiCisrICBtb3VudCAtb3J3IC1uIC10cHJvYyBub25lIC9wcm9jCisrICBQUk9DX01PVU5URUQ9MQorK2ZpCisrCisrIyBwcmVzZXJ2ZSBjbXBfc3BlYyByZXN1bHQgZm9yIGNoZWNrX2FsbCBydW5zCisrcmV0PSRSRVMKKytmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisrICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmlsZTsgdGhlbgorKyAgICAgICByZXQ9MQorKyAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgYnJlYWsKKysgICAgICAgZmkKKysgICBmaQorK2RvbmUKKysKKytpZiBbICIkUFJPQ19NT1VOVEVEIiAtZXEgIjEiIF07IHRoZW4KKysgIGVjaG8gIlVubW91bnRpbmcgcHJvYyIKKysgIHVtb3VudCAvcHJvYworK2ZpCisrCisrcm0gJGZpbGUxICRmaWxlMiAkZGZpbGUgJHJlbmFtZV9zY3JpcHQKKytybSAtcmYgJGRpcgorK2lmIHRlc3QgIiRyZXQiID0gMDsgdGhlbgorKyAgICAgZWNobyAiUGFja2FnZSBjb250ZW50IGlzIGlkZW50aWNhbCIKKytmaQorK2V4aXQgJHJldAorKyMgdmltOiB0dz02NjYgdHM9MiBldAorZGlmZiAtLWdpdCBhL3JwbS1jaGVjay5zaCBiL3JwbS1jaGVjay5zaAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCBkZDQ3NjQyLi4wMDAwMDAwCistLS0gYS9ycG0tY2hlY2suc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDc2NCArMCwwIEBACistIyEgL2Jpbi9iYXNoCistIworLSMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFNVU0UgTGludXggUHJvZHVjdCBHbWJILCBHZXJtYW55LgorLSMgTGljZW5zZWQgdW5kZXIgR1BMIHYyLCBzZWUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzLgorLSMKKy0jIFdyaXR0ZW4gYnkgTWljaGFlbCBNYXR6IGFuZCBTdGVwaGFuIENvb2xvCistIyBFbmhhbmNlZCBieSBBbmRyZWFzIEphZWdlcgorLQorLUZVTkNUSU9OUz0kezAlLyp9L2Z1bmN0aW9ucy5zaAorLQorLWNoZWNrX2FsbD0KKy1jYXNlICQxIGluCistICAtYSB8IC0tY2hlY2stYWxsKQorLSAgICBjaGVja19hbGw9MQorLSAgICBzaGlmdAorLWVzYWMKKy0KKy1pZiB0ZXN0ICIkIyIgIT0gMjsgdGhlbgorLSAgIGVjaG8gInVzYWdlOiAkMCBbLWF8LS1jaGVjay1hbGxdIG9sZC5ycG0gbmV3LnJwbSIKKy0gICBleGl0IDEKKy1maQorLQorLXNlbGZfc2NyaXB0PSQoY2QgJChkaXJuYW1lICQwKTsgZWNobyAkKHB3ZCkvJChiYXNlbmFtZSAkMCkpCistCistc291cmNlICRGVU5DVElPTlMKKy0KKy1vbGRwa2c9YHJlYWRsaW5rIC1mICQxYAorLW5ld3BrZz1gcmVhZGxpbmsgLWYgJDJgCistcmVuYW1lX3NjcmlwdD1gbWt0ZW1wYAorLQorLWlmIHRlc3QgISAtZiAiJG9sZHBrZyI7IHRoZW4KKy0gICAgZWNobyAiY2FuJ3Qgb3BlbiAkMSIKKy0gICAgZXhpdCAxCistZmkKKy0KKy1pZiB0ZXN0ICEgLWYgIiRuZXdwa2ciOyB0aGVuCistICAgIGVjaG8gImNhbid0IG9wZW4gJDIiCistICAgIGV4aXQgMQorLWZpCistCistI3VzYWdlIHVuamFyIDxmaWxlPgorLWZ1bmN0aW9uIHVuamFyKCkKKy17CistICAgIGxvY2FsIGZpbGUKKy0gICAgZmlsZT0kMQorLQorLSAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWZhc3RqYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9dW56aXAKKy0gICAgZWxzZQorLSAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorLSAgICAgICAgZXhpdCAxCistICAgIGZpCistCistICAgIGNhc2UgJFVOSkFSIGluCistICAgICAgICBqYXJ8ZmFzdGphcikKKy0gICAgICAgICMgZWNobyBqYXIgLXhmICRmaWxlCistICAgICAgICAke1VOSkFSfSAteGYgJGZpbGUKKy0gICAgICAgIDs7CistICAgICAgICB1bnppcCkKKy0gICAgICAgIHVuemlwIC1vcXEgJGZpbGUKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy19CistCistIyBsaXN0IGZpbGVzIGluIGRpcmVjdG9yeQorLSN1c2FnZSB1bmphcl9sIDxmaWxlPgorLWZ1bmN0aW9uIHVuamFyX2woKQorLXsKKy0gICAgbG9jYWwgZmlsZQorLSAgICBmaWxlPSQxCistCistICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9ZmFzdGphcgorLSAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCistICAgICAgICBVTkpBUj1qYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCistICAgICAgICBVTkpBUj11bnppcAorLSAgICBlbHNlCistICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCistICAgICAgICBleGl0IDEKKy0gICAgZmkKKy0KKy0gICAgY2FzZSAkVU5KQVIgaW4KKy0gICAgICAgIGphcnxmYXN0amFyKQorLSAgICAgICAgJHtVTkpBUn0gLXRmICRmaWxlCistICAgICAgICA7OworLSAgICAgICAgdW56aXApCistICAgICAgICB1bnppcCAtbCAkZmlsZQorLSAgICAgICAgOzsKKy0gICAgZXNhYworLX0KKy0KKy1maWx0ZXJfZGlzYXNtKCkKKy17CistICAgc2VkIC1lICdzL14gKlswLTlhLWZdXCs6Ly8nIC1lICdzL1wkMHhbMC05YS1mXVwrLyRzb21ldGhpbmcvJyAtZSAncy9jYWxscSAqWzAtOWEtZl1cKy9jYWxscSAvJyAtZSAncy8jICpbMC05YS1mXVwrLyMgIC8nIC1lICdzL1woMHhcKVw/WzAtOWEtZl1cKygvb2Zmc2V0KC8nIC1lICdzL1swLTlhLWZdXCsgPC88LycgLWUgJ3MvXjxcKC4qXCk+Oi9cMTovJyAtZSAncy88XCguKlwpKzB4WzAtOWEtZl1cKz4vPFwxICsgb2ZzPi8nIAorLX0KKy0KKy1lY2hvICJDb21wYXJpbmcgYGJhc2VuYW1lICRvbGRwa2dgIHRvIGBiYXNlbmFtZSAkbmV3cGtnYCIKKy0KKy1jYXNlICRvbGRwa2cgaW4KKy0gICoucnBtKQorLSAgICAgY21wX3NwZWMgJHJlbmFtZV9zY3JpcHQgJG9sZHBrZyAkbmV3cGtnCistICAgICBSRVM9JD8KKy0gICAgIGNhc2UgJFJFUyBpbgorLSAgICAgICAwKQorLSAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBpZGVudGljYWwiCistICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGV4aXQgMAorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAxKQorLSAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBkaWZmZXJlbnQiCistICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGV4aXQgMQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAyKQorLSAgICAgICAgICBlY2hvICJSUE0gZmlsZSBjaGVja3N1bSBkaWZmZXJzLiIKKy0gICAgICAgICAgUkVTPTAKKy0gICAgICAgICAgOzsKKy0gICAgICAgKikKKy0gICAgICAgICAgZWNobyAiV3JvbmcgZXhpdCBjb2RlISIKKy0gICAgICAgICAgZXhpdCAxCistICAgICAgICAgIDs7CistICAgICBlc2FjCistICAgICA7OworLWVzYWMKKy0KKy1maWxlMT1gbWt0ZW1wYAorLWZpbGUyPWBta3RlbXBgCistCistZGlyPWBta3RlbXAgLWRgCistZWNobyAiRXh0cmFjdGluZyBwYWNrYWdlcyIKKy11bnBhY2thZ2UgJG9sZHBrZyAkZGlyL29sZAorLXVucGFja2FnZSAkbmV3cGtnICRkaXIvbmV3CistCistIyBmaWxlcyBpcyBzZXQgaW4gY21wX3NwZWMgZm9yIHJwbXMsIHNvIGlmIFJFUyBpcyBlbXB0eSB3ZSBzaG91bGQgYXNzdW1lCistIyBpdCB3YXNuJ3QgYW4gcnBtIGFuZCBwaWNrIGFsbCBmaWxlcyBmb3IgY29tcGFyaXNvbi4KKy1pZiBbIC16ICRSRVMgXTsgdGhlbgorLSAgICBvbGRmaWxlcz1gY2QgJGRpci9vbGQ7IGZpbmQgLiAtdHlwZSBmYAorLSAgICBuZXdmaWxlcz1gY2QgJGRpci9uZXc7IGZpbmQgLiAtdHlwZSBmYAorLQorLSAgICBmaWxlcz1gZWNobyAtZSAiJG9sZGZpbGVzXG4kbmV3ZmlsZXMiIHwgc29ydCAtdWAKKy1maQorLQorLWNkICRkaXIKKy1iYXNoICRyZW5hbWVfc2NyaXB0CistCistZGZpbGU9YG1rdGVtcGAKKy0KKy1kaWZmX3R3b19maWxlcygpCisteworLSAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorLSAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0gICAgIGhleGR1bXAgLUMgb2xkLyRmaWxlID4gJGZpbGUxCistICAgICBoZXhkdW1wIC1DIG5ldy8kZmlsZSA+ICRmaWxlMgorLSAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMDAKKy0gICAgIHJldHVybiAxCistICBmaQorLSAgcmV0dXJuIDAKKy19CistCistdHJpbV9tYW5fZmlyc3RfbGluZSgpCisteworLSAgICAjIEhhbmRsZXMgdGhlIGZpcnN0IGxpbmUgaWYgaXQgaXMgbGlrZToKKy0gICAgIy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjI4IChQb2Q6OlNpbXBsZSAzLjI4KQorLSAgICAjLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjQzLjMuCistICAgIGxvY2FsIGY9JDEKKy0gICAgc2VkIC1pIC1lICcxeworLSAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtBdXRvbWF0aWNhbGx5W1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1Qb2Q6Ok1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBQb2Q6Ok1hbnwKKy0gICAgc3xeXC5cXCJbWzpibGFuazpdXVwrRE9bWzpibGFuazpdXU5PVFtbOmJsYW5rOl1dTU9ESUZZW1s6Ymxhbms6XV1USElTW1s6Ymxhbms6XV1GSUxFIVtbOmJsYW5rOl1dXCtJdFtbOmJsYW5rOl1dd2FzW1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1oZWxwMm1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBoZWxwMm1hbnwKKy0gICAgfScgJGYKKy19CistCistdHJpbV9tYW5fVEgoKQorLXsKKy0gICAgIyBIYW5kbGVzIGxpbmVzIGxpa2U6CistICAgICMgLlRIIGRlYmhlbHBlciA3ICIyMDEwLTAyLTI3IiAiNy40LjE1IiAiRGViaGVscGVyIgorLSAgICAjIC5USCBESVJNTkdSLUNMSUVOVCAxIDIwMTAtMDItMjcgIkRpcm1uZ3IgMS4wLjMiICJHTlUgUHJpdmFjeSBHdWFyZCIKKy0gICAgIyAuVEggY2NtYWtlIDEgIk1hcmNoIDA2LCAyMDEwIiAiY2NtYWtlIDIuOC4xLXJjMyIKKy0gICAgIyAuVEggUUVNVS1JTUcgMSAiMjAxMC0wMy0xNCIgIiAiICIgIgorLSAgICAjIC5USCBrZGVjbWFrZSAxICJNYXkgMDcsIDIwMTAiICJjbWFrZSAyLjguMSIKKy0gICAgIyAuVEggImFwcGVuZGVyLmgiIDMgIjEyIE1heSAyMDEwIiAiVmVyc2lvbiAxLjIuMSIgImxvZzRjIiBcIiAtKi0gbnJvZmYgLSotCistICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorLSAgICAjIC5USCAiT0ZGTElORUlNQVAiICIxIiAiMTEgTWF5IDIwMTAiICJKb2huIEdvZXJ6ZW4iICJPZmZsaW5lSU1BUCBNYW51YWwiCistICAgICMgLlRIIGd2IDNndWlsZSAiMTMgTWF5IDIwMTAiCistICAgICMuVEggIkdJVFwtQVJDSElNUE9SVCIgIjEiICIwOS8xMy8yMDEwIiAiR2l0IDFcJi43XCYuMSIgIkdpdCBNYW51YWwiCistICAgICMgLlRIIExESVJFQ1RPUkQgOCAiMjAxMC0xMC0yMCIgInBlcmwgdjUuMTIuMiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIgorLSAgICAjIC5USCBjY21ha2UgMSAiRmVicnVhcnkgMDUsIDIwMTIiICJjY21ha2UgMi44LjciCistICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorLSAgICAjIC5USCBBUkNIICIxIiAiU2VwdGVtYmVyIDIwMTAiICJHTlUgY29yZXV0aWxzIDguNSIgIlVzZXIgQ29tbWFuZHMiCistICAgICMgLlRIICJHQ00tQ0FMSUJSQVRFIiAiMSIgIjAzIEZlYnJ1YXJ5IDIwMTIiICIiICIiCistICAgICMuVEggTG9jYWxlOjpQbzRhOjpYbWwucG0gM3BtICIyMDE1LTAxLTMwIiAiUG80YSBUb29scyIgIlBvNGEgVG9vbHMiCistICAgIGxvY2FsIGY9JDEKKy0gICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKy0gICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInFxMjAwMC0wMS0wMSJcM3wnICRmCistICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAidXEyMDAwLTAyLTAyIlwzfCcgJGYKKy0gICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgcXUyMDAwLTAzLTAzXDN8JyAkZgorLSAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgdXUyMDAwLTA0LTA0XDN8JyAkZgorLX0KKy0KKy1zdHJpcF9udW1iZXJlZF9hbmNob3JzKCkKKy17CistICAjIFJlbW92ZSBudW1iZXJlZCBhbmNob3JzIG9uIERvY2Jvb2sgLyBIVE1MIGZpbGVzLgorLSAgIyBUaGlzIHNob3VsZCBiZSBzYXZlIHNpbmNlIHdlIHJlbW92ZSB0aGVtIGZyb20gb2xkIGFuZCBuZXcgZmlsZXMuCistICAjIEEgdHJhaWxpbmcgPC9hPiBvciA8L2Rpdj4gdGFnIHdpbGwgc3RheSBhbHNvIG9uIGJvdGggZmlsZXMuCistICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgc2VkIC1pIC1lICdzJTxbIF0qYVsgXVwrbmFtZVtePF0qWzAtOV1cK1tePF0qJSVnJyBcCistICAgICAtZSAncyU8WyBdKmFbIF1cK2hyZWZbXjxdKiNbXjxdKlswLTldXCtbXjxdKiUlZycgXAorLSAgICAgLWUgJ3MlPFtePF0qaWQ9ImZ0blwuW148XSpbMC05XVwrW148XSolJWcnICRmCistICBkb25lCistfQorLQorLQorLWNoZWNrX2NvbXByZXNzZWRfZmlsZSgpCisteworLSAgbG9jYWwgZmlsZT0kMQorLSAgbG9jYWwgZXh0PSQyCistICBsb2NhbCB0bXBkaXI9YG1rdGVtcCAtZGAKKy0gIGxvY2FsIGZ0eXBlCistICBsb2NhbCByZXQ9MAorLSAgZWNobyAiJGV4dCBmaWxlIHdpdGggb2RkIGZpbGVuYW1lOiAkZmlsZSIKKy0gIGlmIHRlc3QgLW4gIiR0bXBkaXIiOyB0aGVuCistICAgIG1rZGlyICR0bXBkaXIve29sZCxuZXd9CistICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG9sZC8kZmlsZSAkdG1wZGlyLworLSAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBuZXcvJGZpbGUgJHRtcGRpci8KKy0gICAgaWYgcHVzaGQgJHRtcGRpciA+IC9kZXYvbnVsbCA7IHRoZW4KKy0gICAgICBjYXNlICIkZXh0IiBpbgorLSAgICAgICAgYnoyKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5iejJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmJ6Mn0KKy0gICAgICAgICAgYnppcDIgLWQgb2xkLyRmaWxlLmJ6MgorLSAgICAgICAgICBiemlwMiAtZCBuZXcvJGZpbGUuYnoyCistICAgICAgICAgIDs7CistICAgICAgICBnemlwKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5nen0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuZ3p9CistICAgICAgICAgIGd6aXAgLWQgb2xkLyRmaWxlLmd6CistICAgICAgICAgIGd6aXAgLWQgbmV3LyRmaWxlLmd6CistICAgICAgICAgIDs7CistICAgICAgICB4eikKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywueHp9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnh6fQorLSAgICAgICAgICB4eiAtZCBvbGQvJGZpbGUueHoKKy0gICAgICAgICAgeHogLWQgbmV3LyRmaWxlLnh6CistICAgICAgICAgIDs7CistICAgICAgZXNhYworLSAgICAgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKy0gICAgICBjYXNlICRmdHlwZSBpbgorLSAgICAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKy0gICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgIEFTQ0lJXCBjcGlvXCBhcmNoaXZlXCAqKQorLSAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKy0gICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAgKikKKy0gICAgICAgICAgZWNobyAidW5oYW5kbGVkICRleHQgY29udGVudDogJGZ0eXBlIgorLSAgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICBlc2FjCistICAgICAgcG9wZCA+IC9kZXYvbnVsbAorLSAgICBmaQorLSAgICBybSAtcmYgIiR0bXBkaXIiCistICBmaQorLSAgcmV0dXJuICRyZXQKKy19CistCistY2hlY2tfc2luZ2xlX2ZpbGUoKQorLXsKKy0gIGxvY2FsIGZpbGU9IiQxIgorLSAgY2FzZSAkZmlsZSBpbgorLSAgICAqLnNwZWMpCistICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UxLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG9sZC8kZmlsZQorLSAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMixSZWxlYXNlOiBAUkVMRUFTRUAsIiBuZXcvJGZpbGUKKy0gICAgICAgOzsKKy0gICAgKi5leGUubWRifCouZGxsLm1kYikKKy0gICAgICAgIyBKdXN0IGRlYnVnIGluZm9ybWF0aW9uLCB3ZSBjYW4gc2tpcCB0aGVtCistICAgICAgIGVjaG8gIiRmaWxlIHNraXBwZWQgYXMgZGVidWcgZmlsZS4iCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICouYSkKKy0gICAgICAgZmxpc3Q9YGFyIHQgbmV3LyRmaWxlYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCistICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICouY3BpbykKKy0gICAgICAgZmxpc3Q9YGNwaW8gLS1xdWlldCAtLWxpc3QgLS1mb3JjZS1sb2NhbCA8ICJuZXcvJGZpbGUiYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPSRmaWxlLmV4dHJhY3QuJFBQSUQuJCQKKy0gICAgICAgbWtkaXIgb2xkLyRmZGlyIG5ldy8kZmRpcgorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJtIC1yZiBvbGQvJGZkaXIgbmV3LyRmZGlyCistICAgICAgIHJldHVybiAkcmV0CistICAgICAgIDs7CistICAgICoudGFyfCoudGFyLmJ6MnwqLnRhci5nenwqLnRnenwqLnRiejIpCistICAgICAgIGZsaXN0PWB0YXIgdGYgbmV3LyRmaWxlYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZAorLSAgICAgICBsb2NhbCByZXQ9MAorLSAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCistICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICBmaQorLSAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgcmV0dXJuICRyZXQKKy0gICAgICAgOzsKKy0gICAgKi56aXB8Ki5qYXJ8Ki53YXIpCistICAgICAgIGNkIG9sZAorLSAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQgPiBmbGlzdAorLSAgICAgICAjICAxMC0wNS0yMDEwIDE0OjM5CistICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorLSAgICAgICAjIDIwMTItMDItMDMgMDc6NTkKKy0gICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgY2QgLi4vbmV3CistICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydD4gZmxpc3QKKy0gICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICw7ICIgZmxpc3QKKy0gICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgY2QgLi4KKy0gICAgICAgaWYgISBjbXAgLXMgb2xkL2ZsaXN0IG5ldy9mbGlzdDsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZSBoYXMgZGlmZmVyZW50IGZpbGUgbGlzdCIKKy0gICAgICAgICAgZGlmZiAtdSBvbGQvZmxpc3QgbmV3L2ZsaXN0CistICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIGZsaXN0PWBncmVwIGRhdGUgbmV3L2ZsaXN0IHwgc2VkIC1lICdzLC4qIGRhdGUgLCwnYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmIHRlc3QgLWYgbmV3LyRmZGlyLyRmICYmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAkcmV0OzsKKy0gICAgICoucHljfCoucHlvKQorLSAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ29sZC8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorLSAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ25ldy8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorLSAgICAgICAgOzsKKy0gICAgICouYnoyKQorLSAgICAgICAgYnVuemlwMiAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5iejIvfQorLSAgICAgICAgYnVuemlwMiAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5iejIvfQorLSAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5iejIvfQorLSAgICAgICAgcmV0dXJuICQ/CistICAgICAgICA7OworLSAgICAgKi5neikKKy0gICAgICAgIGd1bnppcCAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5nei99CistICAgICAgICBndW56aXAgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uZ3ovfQorLSAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5nei99CistICAgICAgICByZXR1cm4gJD8KKy0gICAgICAgIDs7CistICAgICAqLnJwbSkKKy0JJHNlbGZfc2NyaXB0IC1hIG9sZC8kZmlsZSBuZXcvJGZpbGUKKy0gICAgICAgIHJldHVybiAkPworLSAgICAgICAgOzsKKy0gICAgICpwbmcpCistCSMgVHJ5IHRvIHJlbW92ZSB0aW1lc3RhbXBzLCBvbmx5IGlmIGNvbnZlcnQgZnJvbSBJbWFnZU1hZ2ljayBpcyBpbnN0YWxsZWQKKy0gICAgICAgIGlmIFtbICQodHlwZSAtcCBjb252ZXJ0KSBdXTsgdGhlbgorLQkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfQorLQkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfQorLQkgIGlmICEgY21wIC1zIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9OyB0aGVuCistCSAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCistCSAgICAgIGhleGR1bXAgLUMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTEKKy0JICAgICAgaGV4ZHVtcCAtQyBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMgorLQkgICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwCistCSAgICAgIHJldHVybiAxCistCSAgZmkKKy0JICByZXR1cm4gMAorLQlmaQorLSAgICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvbG9jYWxlLyovTENfTUVTU0FHRVMvKi5tb3wvdXNyL3NoYXJlL2xvY2FsZS1idW5kbGUvKi9MQ19NRVNTQUdFUy8qLm1vKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAicyxQT1QtQ3JlYXRpb24tRGF0ZTogLi4uLi0uLi0uLiAuLjouLisuLi4uLFBPVC1DcmVhdGlvbi1EYXRlOiAxOTcwLTAxLTAxIDAwOjAwKzAwMDAsIiAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2RvYy9wYWNrYWdlcy8qLyouaHRtbHxcCistICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi5odG1sfC91c3Ivc2hhcmUvZG9jLyovaHRtbC8qLmh0bWwpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgIyB0ZXhpMmh0bWwgb3V0cHV0LCBlLmcuIGluIGt2bSwgaW5kZW50LCBxZW11CistCSBzZWQgLWkgLWUgInN8XjwhLS0gQ3JlYXRlZCBvbiAuKiwgMjAuLiBieSB0ZXhpMmh0bWwgLlwuLi58PCEtLSBDcmVhdGVkIG9uIEF1Z3VzdCA3LCAyMDA5IGJ5IHRleGkyaHRtbCAxLjgyfCIgJGYKKy0JIHNlZCAtaSAtZSAnc3xeICpUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT4uKiwgMjAuLjwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIC5cLi4uPC9lbT48L2E+LiR8ICBUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT5BdWd1c3QgNywgMjAwOTwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIDEuODI8L2VtPjwvYT4ufCcgJGYKKy0JICMgZG94eWdlbiBkb2N1LCBlLmcuIGluIGxpYnNzaCBhbmQgbG9nNGMKKy0JIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAyMFswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorLQkgIyBHZW5lcmF0ZWQgb24gU2F0IEF1ZyAxNCAyMDEwIDE2OjQ5OjQ4IGZvciBsaWJzc2gKKy0JIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogMjBbMC05XVswLTldIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLmh0bWwgfFwKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLyouaHRtbHwvdXNyL3NoYXJlL2phdmFkb2MvKi8qLyouaHRtbCkKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICAjIFRoZXJlIGFyZSBtb3JlIHRpbWVzdGFtcHMgaW4gaHRtbCwgc28gZmFyIHdlIGhhbmRsZSBvbmx5IHNvbWUgcHJpbWl0aXZlIHZlcnNpb25zLgorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgSmF2YWRvYzoKKy0gICAgICAgICAgIyA8aGVhZD4KKy0gICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jICh2ZXJzaW9uIDEuNy4wXzc1KSBvbiBUdWUgRmViIDAzIDAyOjIwOjEyIEdNVCAyMDE1IC0tPgorLSAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVHVlIEZlYiAwMyAwMDowMjo0OCBHTVQgMjAxNSAtLT4KKy0gICAgICAgICAgIyA8bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDE1LTAyLTAzIj4KKy0gICAgICAgICAgIyA8L2hlYWQ+CistICAgICAgICAgIHNlZCAtaSAtZSAnCistICAgICAgICAgICAgL148aGVhZD4veworLSAgICAgICAgICAgICAgOiBuZXh0CistICAgICAgICAgICAgICBuCistICAgICAgICAgICAgICAvXjxcL2hlYWQ+L3sKKy0gICAgICAgICAgICAgICAgYiBlbmRfaGVhZAorLSAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXCgoXChidWlsZFx8dmVyc2lvblwpIFswLTkuX11cKykgb24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcNS8KKy0gICAgICAgICAgICAgIHQgbmV4dAorLSAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXChvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFwzLworLSAgICAgICAgICAgICAgdCBuZXh0CistICAgICAgICAgICAgICBzL148bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJbMC05XVx7NFx9LVswLTldXHsyXH0tWzAtOV1cezJcfSI+LzxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9InNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUiPi8KKy0gICAgICAgICAgICAgIGIgbmV4dAorLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICA6IGVuZF9oZWFkCistICAgICAgICAgICcgJGYKKy0gICAgICAgICAjIEdqZG9jIEh0bWxEb2NsZXQ6CistCSBzZWQgLWkgLWUgJ3MlR2VuZXJhdGVkIGJ5IEdqZG9jIEh0bWxEb2NsZXQgWzAtOSwuXSosIHBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9jcC10b29scy8iIHRpdGxlPSIiIHRhcmdldD0iX3RvcCI+R05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIC4qLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC4lR2VuZXJhdGVkIGJ5IEdqZG9jLiUnICRmCistCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwoLipcKUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBbQS1aXVthLXpdKiBbMC05XSosIDIwPz8gWzAtOV0qOj8/Oj8/IFwoYXxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXDFHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gSmFudWFyeSAxLCAyMDA5IDA6MDA6MDAgYS5tLiBHTVQuPC9wPiUnICRmCistCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXCguKkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+XCksIG9uIFthLXpBLVpdKiBbMC05XVswLTldLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwxLG9uIE1heSAxLCAyMDEwIDE6MTE6NDIgcC5tLiBHTVQuPC9wPiUnICRmCistCSAjIGRlcHJlY2F0ZWQtbGlzdCBpcyByYW5kb21seSBvcmRlcmVkLCBzb3J0IGl0IGZvciBjb21wYXJpc29uCistCSBjYXNlICRmIGluCistCSAgICovZGVwcmVjYXRlZC1saXN0Lmh0bWwpCistCSAgICAgc29ydCAtbyAkZiAkZgorLQkgICAgIDs7CistCSBlc2FjCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy9namRvYy5wcm9wZXJ0aWVzIHxcCistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi9namRvYy5wcm9wZXJ0aWVzKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgc2VkIC1pIC1lICdzfF4jW0EtWl1bYS16XVx7Mlx9IFtBLVpdW2Etel1cezJcfSBbMC05XVx7Mlx9IC4uOi4uOi4uIEdNVCAyMC4uJHwjRnJpIEphbiAwMSAxMToyNzozNiBHTVQgMjAwOXwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgICovZm9udHMuc2NhbGV8Ki9mb250cy5kaXJ8Ki9lbmNvZGluZ3MuZGlyKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgc29ydCBmaWxlcyBiZWZvcmUgY29tcGFyaW5nCistICAgICAgICAgc29ydCAtbyAkZiAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdmFyL2FkbS9wZXJsLW1vZHVsZXMvKikKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgJ3N8Xj1oZWFkMiAuLi4gLi4uIC4uIC4uOi4uOi4uIC4uLi46IEM8TW9kdWxlPnw9aGVhZDIgV2VkIEp1bCAgMSAwMDowMDowMCAyMDA5OiBDPE1vZHVsZT58JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL21hbi9tYW4zLyozcG0pCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgc2VkIC1pIC1lICdzfCAzICIyMC4uLS4uLS4uIiAicGVybCB2NS4uLi4uIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iJHwgMyAiMjAwOS0wMS0wMSIgInBlcmwgdjUuMTAuMCIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uInwnICRmCistICAgICAgICAgdHJpbV9tYW5fVEggJGYKKy0gICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvbWFuLyovbWFuKnwvdXNyL3NoYXJlL21hbi9tYW4qfC91c3IvbGliL3RleG1mL2RvYy9tYW4vKi8qKQorLQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHRyaW1fbWFuX1RIICRmCistICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorLSAgICAgICAgICMgZ2VuZXJhdGVkIGJ5IGRvY2Jvb2sgeG1sOgorLSAgICAgICAgICMuXCIgICAgICBEYXRlOiAwOS8xMy8yMDEwCistICAgICAgICAgc2VkIC1pIC1lICdzfERhdGU6IFswLTFdWzAtOV0vWzAtOV1bMC05XS8yMDFbMC05XXxEYXRlOiAwOS8xMy8yMDEwfCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgKi5lbGMpCistICAgICAgICMgZW1hY3MgbGlzcCBmaWxlcworLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAnc3xDb21waWxlZCBieSBhYnVpbGRALiogb24gLi4uIC4uLiAuLiAuLjouLjouLiAyMC4uJHxjb21waWxlZCBieSBhYnVpbGRAYnVpbGRob3N0IG9uIFdlZCBKdWwgMDEgMDA6MDA6MDAgMjAwOXwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjLyovKmZtdCB8XAorLSAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YWZvbnQvKi5iYXNlfFwKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFwb3N0LyoubWVtKQorLSAgICAgICAjIGJpbmFyeSBkdW1wIG9mIFRlWCBhbmQgTWV0YWZvbnQgZm9ybWF0cywgd2UgY2FuIGlnbm9yZSB0aGVtIGZvciBnb29kCistICAgICAgIGVjaG8gImRpZmZlcmVuY2UgaW4gJGZpbGUgaWdub3JlZC4iCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICAqL2xpYnRvb2wpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistCSAgc2VkIC1pIC1lICdzfF4jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBbQS1aYS16MC05XSo6JHwjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCB4NDI6fCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL2V0Yy9tYWlsLypjZnwvZXRjL3NlbmRtYWlsLmNmKQorLSAgICAgICAjIGZyb20gc2VuZG1haWwgcGFja2FnZQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgICMgLSAjIyMjIyBidWlsdCBieSBhYnVpbGRAYnVpbGQzMyBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTAKKy0JICBzZWQgLWkgLWUgJ3N8YnVpbHQgYnkgYWJ1aWxkQFthLXowLTldKiBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIC4qIDIwWzAtOV1bMC05XXxidWlsdCBieSBhYnVpbGRAYnVpbGQ0MiBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTB8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovaW5kZXguY2FjaGV8L3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyovaW5kZXguY2FjaGV8XAorLSAgICAgL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmh0bWx8L3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmRldmhlbHAyKQorLSAgICAgICAjIHZhcmlvdXMga2RlIGFuZCBndGsgcGFja2FnZXMKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICA7OworLSAgICAqL2NyZWF0ZWQucmlkKQorLSAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorLSAgICAgICAjIGZpbGUganVzdCBjb250YWlucyBhIHRpbWVzdGFtcCBhbmQgbm90aGluZyBlbHNlLCBzbyBpZ25vcmUgaXQKKy0gICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAqL3Jkb2MvZmlsZXMvKi5odG1sKQorLSAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorLSAgICAgICAjIDx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4KKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAgc2VkIC1pIC1lICdzJTx0ZD5bQS1aXVthLXpdW2Etel0gW0EtWl1bYS16XVthLXpdIFswLTldXCsgWzAtOV1cKzpbMC05XVwrOlswLTldXCsgKzAwMDAgMjAxWzAtOV08L3RkPiU8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+JWcnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICA7OworLSAgICAqL0xpbnV4KkVudi5TZXQuc2gpCistICAgICAgICMgTGlicmVPZmZpY2UgZmlsZXMsIGNvbnRhaW5zOgorLSAgICAgICAjIEdlbmVyYXRlZCBvbjogTW9uIEFwciAxOCAxMzoxOToyMiBVVEMgMjAxMQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgc2VkIC1pIC1lICdzJV4jIEdlbmVyYXRlZCBvbjouKlVUQyAyMDFbMC05XSAqJCUjIEdlbmVyYXRlZCBvbjogU29tZXRpbWUlZycgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAvdXNyL2xpYi9saWJyZW9mZmljZS9zb2x2ZXIvaW5jLyovZGVsaXZlci5sb2cpCistICAgICAgICMgTGlicmVPZmZpY2UgbG9nIGZpbGUKKy0gICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCistICAgICAgcmV0dXJuIDAKKy0gICAgICA7OworLSAgICAvdmFyL2FkbS91cGRhdGUtbWVzc2FnZXMvKnwvdmFyL2FkbS91cGRhdGUtc2NyaXB0cy8qKQorLSAgICAgICMgZW5jb2RlIHZlcnNpb24tcmVsZWFzZSBpbnNpZGUKKy0gICAgICBvbGRmbj1gZWNobyAiJGZpbGUifHNlZCAtZSBzLy0kcmVsZWFzZTIvLSRyZWxlYXNlMS87YAorLQorLSAgICAgICMgZmV0Y2htc3R0Zm9udHMgZW1iZWRzIHRoZSByZWxlYXNlIG51bWJlciBpbiB0aGUgdXBkYXRlIHNoZWxsIHNjcmlwdC4KKy0gICAgICBlY2hvIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorLSAgICAgIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorLQorLSAgICAgIGlmICEgZGlmZiAtdSBvbGQvJG9sZGZuIG5ldy8kZmlsZTsgdGhlbgorLSAgICAgICAgICAgZWNobyAiJG9sZGZuIGlzIG5vdCBzYW1lIGFzICRmaWxlIgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICBmaQorLSAgICAgIGVjaG8gIiRmaWxlIGFuZCAkb2xkZm4gYXJlIHNhbWUiCistICAgICAgcmV0dXJuIDAKKy0gICAgICA7OworLSAgICAqLnBzKQorLSAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworLSAgICAgICAgc2VkIC1pIC1lICcKKy0JL14lJUNyZWF0aW9uRGF0ZTpbWzpibGFuazpdXS9kCistCS9eJSVDcmVhdG9yOltbOmJsYW5rOl1dZ3JvZmZbWzpibGFuazpdXXZlcnNpb25bWzpibGFuazpdXS9kCistCScgIiRmIgorLSAgICAgIGRvbmUKKy0gICAgOzsKKy0gICAgKnBkZikKKy0gICAgICAjIFBERiBmaWxlcyBjb250YWluIGEgdW5pcXVlIElELCByZW1vdmUgaXQKKy0gICAgICAjIEZvcm1hdCBvZiB0aGUgSUQgaXM6CistICAgICAgIyAvSUQgWzw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD4gPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPl0KKy0gICAgICAjIHdpdGggb3B0aW9uYWwgc3BhY2VzLiBwZGZ0ZXggY3JlYXRlcyBhbHNvOgorLSAgICAgICMgL0NyZWF0aW9uRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCistICAgICAgIyAvTW9kRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCistICAgICAgIyBhbmQgcG9zc2libHkgWE1MIG1ldGFkYXRhIGFzIHdlbGwKKy0gICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKy0gICAgICAgIHNlZCAtaSBcCistICAgICAgICAgICAgJy9vYmovLC9lbmRvYmoveworLSAgICAgICAgICAgICAgIHMlL0lEIFw/XFsgXD88W14+XVwrPiBcPzxbXj5dXCs+IFw/XF0lL0lEcmFuZG9tJWc7CistICAgICAgICAgICAgICAgcyUvQ3JlYXRpb25EYXRlIFw/KEQ6W14pXSopJS9DcmVhdGlvbkRhdGUgKEQ6IFhYWCklZzsKKy0gICAgICAgICAgICAgICBzJS9Nb2REYXRlIFw/KEQ6W14pXSopJS9Nb2REYXRlIChEOiBYWFgpJWc7CistICAgICAgICAgICAgICAgcyU8cGRmOkNyZWF0aW9uRGF0ZT5bXjxdKjwvcGRmOkNyZWF0aW9uRGF0ZT4lPHBkZjpDcmVhdGlvbkRhdGU+WFhYPC9wZGY6Q3JlYXRpb25EYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHBkZjpNb2REYXRlPltePF0qPC9wZGY6TW9kRGF0ZT4lPHBkZjpNb2REYXRlPlhYWDwvcGRmOk1vZERhdGU+JWc7CistICAgICAgICAgICAgICAgcyU8eGFwOkNyZWF0ZURhdGU+W148XSo8L3hhcDpDcmVhdGVEYXRlPiU8eGFwOkNyZWF0ZURhdGU+WFhYPC94YXA6Q3JlYXRlRGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTx4YXA6TW9kaWZ5RGF0ZT5bXjxdKjwveGFwOk1vZGlmeURhdGU+JTx4YXA6TW9kaWZ5RGF0ZT5YWFg8L3hhcDpNb2RpZnlEYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHhhcDpNZXRhZGF0YURhdGU+W148XSo8L3hhcDpNZXRhZGF0YURhdGU+JTx4YXA6TWV0YWRhdGFEYXRlPlhYWDwveGFwOk1ldGFkYXRhRGF0ZT4lZzsKKy0gICAgICAgICAgICB9JyAiJGYiCistICAgICAgZG9uZQorLSAgICAgIDs7CistICBlc2FjCistCistICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCistICBjYXNlICRmdHlwZSBpbgorLSAgICAgUEUzMlwgZXhlY3V0YWJsZSpNb25vXC9cLk5ldFwgYXNzZW1ibHkqKQorLSAgICAgICBlY2hvICJQRTMyIE1vbm8vLk5ldCBhc3NlbWJseTogJGZpbGUiCistICAgICAgIGlmIFsgLXggL3Vzci9iaW4vbW9ub2RpcyBdIDsgdGhlbgorLSAgICAgICAgIG1vbm9kaXMgb2xkLyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUxfQorLSAgICAgICAgIG1vbm9kaXMgbmV3LyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUyfQorLSAgICAgICAgIGlmICEgY21wIC1zICR7ZmlsZTF9ICR7ZmlsZTJ9OyB0aGVuCistICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLSAgICAgICAgICAgZGlmZiAtdSAke2ZpbGUxfSAke2ZpbGUyfQorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgICBmaQorLSAgICAgICBlbHNlCistICAgICAgICAgZWNobyAiQ2Fubm90IGNvbXBhcmUsIG5vIG1vbm9kaXMgaW5zdGFsbGVkIgorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgIEVMRipleGVjdXRhYmxlKnxFTEYqW0xNXVNCXCBzaGFyZWRcIG9iamVjdCopCistICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG9sZC8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTEKKy0gICAgICAgaWYgISB0ZXN0IC1zICRmaWxlMTsgdGhlbgorLSAgICAgICAgICMgb2JqZHVtcCBoYXMgbm8gaWRlYSBob3cgdG8gaGFuZGxlIGl0CistICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGJyZWFrCistICAgICAgICAgZmkKKy0gICAgICAgZmkgICAgICAgCistICAgICAgIGVsZmRpZmY9CistICAgICAgIHNlZCAtaSAtZSAicyxvbGQvLCwiICRmaWxlMQorLSAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBuZXcvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUyCistICAgICAgIHNlZCAtaSAtZSAicyxuZXcvLCwiICRmaWxlMgorLSAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIGFzc2VtYmxlciBvdXRwdXQiCistICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorLSAgICAgICAgICBlbGZkaWZmPSIxIgorLSAgICAgICBmaQorLSAgICAgICBlY2hvICIiID4kZmlsZTEKKy0gICAgICAgZWNobyAiIiA+JGZpbGUyCistICAgICAgICMgRG9uJ3QgY29tcGFyZSAuYnVpbGQtaWQgYW5kIC5nbnVfZGVidWdsaW5rIHNlY3Rpb25zCistICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgfCB0ciAiXG4iICIgIikiCistICAgICAgIGZvciBzZWN0aW9uIGluICRzZWN0aW9uczsgZG8KKy0gICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBvbGQvJGZpbGUgfCBzZWQgInMsXm9sZC8sLCIgPiAkZmlsZTEKKy0gICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBuZXcvJGZpbGUgfCBzZWQgInMsXm5ldy8sLCIgPiAkZmlsZTIKKy0gICAgICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKy0gICAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBFTEYgc2VjdGlvbiAkc2VjdGlvbiIKKy0gICAgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCistICAgICAgICAgICAgIGVsZmRpZmY9IjEiCistICAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgaWYgdGVzdCAteiAiJGVsZmRpZmYiOyB0aGVuCistICAgICAgICAgIGVjaG8gIiRmaWxlOiBvbmx5IGRpZmZlcmVuY2Ugd2FzIGluIGJ1aWxkLWlkIG9yIGdudV9kZWJ1Z2xpbmssIEdPT0QuIgorLSAgICAgICAgICByZXR1cm4gMAorLSAgICAgICBmaQorLSAgICAgICByZXR1cm4gMQorLSAgICAgICA7OworLSAgICAgKkFTQ0lJKnwqdGV4dCopCistICAgICAgIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKy0gICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLSAgICAgICAgIGRpZmYgLXUgb2xkLyRmaWxlIG5ldy8kZmlsZSB8IGhlYWQgLW4gMjAwCistICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIGRpcmVjdG9yeXxzZXR1aWQsXCBkaXJlY3Rvcnl8c3RpY2t5LFwgZGlyZWN0b3J5KQorLSAgICAgICAjIHRhciBtaWdodCBwYWNrYWdlIGRpcmVjdG9yaWVzIC0gaWdub3JlIHRoZW0gaGVyZQorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAgYnppcDJcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJiejIiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgZ3ppcFwgY29tcHJlc3NlZFwgZGF0YSopCistICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImd6aXAiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgWFpcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJ4eiI7IHRoZW4KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorLSAgICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgIGZpCistICAgICAgIDs7CistICAgICBjcGlvXCBhcmNoaXZlKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorLSAgICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgIGZpCistICAgICA7OworLSAgICAgc3ltYm9saWNcIGxpbmtcIHRvXCAqKQorLSAgICAgICByZWFkbGluayAib2xkLyRmaWxlIiA+ICRmaWxlMQorLSAgICAgICByZWFkbGluayAibmV3LyRmaWxlIiA+ICRmaWxlMgorLSAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMjsgdGhlbgorLSAgICAgICAgIGVjaG8gInN5bWxpbmsgdGFyZ2V0IGZvciAkZmlsZSBkaWZmZXJzIgorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICAqKQorLSAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgZXNhYworLSAgcmV0dXJuIDAKKy19CistCistIyBXZSBuZWVkIC9wcm9jIG1vdW50ZWQgZm9yIHNvbWUgdGVzdHMsIHNvIGNoZWNrIHRoYXQgaXQncyBtb3VudGVkIGFuZAorLSMgY29tcGxhaW4gaWYgbm90LgorLVBST0NfTU9VTlRFRD0wCistaWYgWyAhIC1kIC9wcm9jL3NlbGYvIF07IHRoZW4KKy0gIGVjaG8gIi9wcm9jIGlzIG5vdCBtb3VudGVkIgorLSAgbW91bnQgLW9ydyAtbiAtdHByb2Mgbm9uZSAvcHJvYworLSAgUFJPQ19NT1VOVEVEPTEKKy1maQorLQorLSMgcHJlc2VydmUgY21wX3NwZWMgcmVzdWx0IGZvciBjaGVja19hbGwgcnVucworLXJldD0kUkVTCistZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworLSAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZpbGU7IHRoZW4KKy0gICAgICAgcmV0PTEKKy0gICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgIGJyZWFrCistICAgICAgIGZpCistICAgZmkKKy1kb25lCistCistaWYgWyAiJFBST0NfTU9VTlRFRCIgLWVxICIxIiBdOyB0aGVuCistICBlY2hvICJVbm1vdW50aW5nIHByb2MiCistICB1bW91bnQgL3Byb2MKKy1maQorLQorLXJtICRmaWxlMSAkZmlsZTIgJGRmaWxlICRyZW5hbWVfc2NyaXB0Cistcm0gLXJmICRkaXIKKy1pZiB0ZXN0ICIkcmV0IiA9IDA7IHRoZW4KKy0gICAgIGVjaG8gIlBhY2thZ2UgY29udGVudCBpcyBpZGVudGljYWwiCistZmkKKy1leGl0ICRyZXQKKy0jIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9zYW1lLWJ1aWxkLXJlc3VsdC5zaCBiL3NhbWUtYnVpbGQtcmVzdWx0LnNoCitpbmRleCBjODkwN2UyLi43ZTliZDRmIDEwMDY0NAorLS0tIGEvc2FtZS1idWlsZC1yZXN1bHQuc2gKKysrKyBiL3NhbWUtYnVpbGQtcmVzdWx0LnNoCitAQCAtNywxMSArNywxMSBAQAorICMgRW5oYW5jZWQgYnkgQW5kcmVhcyBKYWVnZXIgPGFqQHN1c2UuZGU+CisgIworICMgVGhlIHNjcmlwdCBkZWNpZGVzIGlmIHRoZSBuZXcgYnVpbGQgZGlmZmVyZXMgZnJvbSB0aGUgZm9ybWVyIG9uZSwKKy0jIHVzaW5nIHJwbS1jaGVjay5zaC4KKysjIHVzaW5nIHBrZy1kaWZmLnNoLgorICMgVGhlIHNjcmlwdCBpcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBhczoKKyAjIC91c3IvbGliL2J1aWxkL3NhbWUtYnVpbGQtcmVzdWx0LnNoIC8uYnVpbGQub2xkcGFja2FnZXMgL3Vzci9zcmMvcGFja2FnZXMvUlBNUyAvdXNyL3NyYy9wYWNrYWdlcy9TUlBNUworIAorLUNNUFNDUklQVD0kezAlLyp9L3JwbS1jaGVjay5zaAorK0NNUFNDUklQVD0kezAlLyp9L3BrZy1kaWZmLnNoCisgU0NNUFNDUklQVD0kezAlLyp9L3NycG0tY2hlY2suc2gKKyAKKyBjaGVja19hbGw9MQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWFhNjRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiYSBmYXN0IEMvQysrIGNvbXBpbGVyIGNhY2hlIgorREVTQ1JJUFRJT04gPSAiY2NhY2hlIGlzIGEgY29tcGlsZXIgY2FjaGUuIEl0IHNwZWVkcyB1cCByZWNvbXBpbGF0aW9uIFwKK2J5IGNhY2hpbmcgdGhlIHJlc3VsdCBvZiBwcmV2aW91cyBjb21waWxhdGlvbnMgYW5kIGRldGVjdGluZyB3aGVuIHRoZSBcCitzYW1lIGNvbXBpbGF0aW9uIGlzIGJlaW5nIGRvbmUgYWdhaW4uIFN1cHBvcnRlZCBsYW5ndWFnZXMgYXJlIEMsIENcK1wrLCBcCitPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKy4iCitIT01FUEFHRSA9ICJodHRwOi8vY2NhY2hlLnNhbWJhLm9yZyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzKyIKKworREVQRU5EUyA9ICJ6bGliIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5zYW1iYS5vcmcvY2NhY2hlLmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlXzMuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1N2RmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgY2NhY2hlLmluYworCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1iM2MzMzdlNzY2NDU1OWE3ODlkOWY3YTkzZTUyODNjMSIKKworU1JDUkVWID0gIjRjYWQ0NmU4ZWUwMDUzMTQ0YmIwMDkxOWYwZGFkZDIwYzFmODcwMTMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvZmlsZXMvMDAwMS1GaXgtcmVncmVzc2lvbi1pbi1yZWNlbnQtY2hhbmdlLXJlbGF0ZWQtdG8temxpYi1pbi1uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YmQ5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIGY3NGM3NjEwNzkzMzA0NjMwOTg2MTY4MGI3NDFhZGM2N2FjMmEzNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb2VsIFJvc2RhaGwgPGpvZWxAcm9zZGFobC5uZXQ+CitEYXRlOiBNb24sIDE3IEF1ZyAyMDE1IDE5OjA1OjE0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCByZWdyZXNzaW9uIGluIHJlY2VudCBjaGFuZ2UgcmVsYXRlZCB0byB6bGliIGluCisgbm9uc3RhbmRhcmQgbG9jYXRpb24KKworVG8gYWxsb3cgZm9yIHNwZWNpZnlpbmcgYSAtTCBmbGFnIGluIExERkxBR1MgYW5kIGhhdmUgaXQgdGFrZSBlZmZlY3QgZm9yCistbHosIDAyMjBkZTljOGViZmIxOGNhYWUyYWMxYWExNjNkMDYwZTk4Y2VhZGUgcHV0IC1seiBpbiBleHRyYV9saWJzCitpbnN0ZWFkIG9mIGV4dHJhX2xkZmxhZ3MuIEhvd2V2ZXIsIGV4dHJhX2xpYnMgaXMgc3VwcG9zZWQgdG8gY29udGFpbgorcGF0aHMgdG8gbGlicmFyaWVzIHdoaWNoIGFyZSBwcmVyZXF1aXNpdGVzIG9mIHRoZSBjY2FjaGUgbGluayBydWxlLCBhbmQKK3NvbWUgb2xkZXIgdmVyc2lvbnMgb2YgbWFrZSBnb3QgY29uZnVzZWQgYnkgc2VlaW5nIC1seiBhcyBhCitwcmVyZXF1aXNpdGUuCisKK1RoaXMgZml4IGlzIHRvIHJldmVydCAwMjIwZGU5YzhlYmZiMThjYWFlMmFjMWFhMTYzZDA2MGU5OGNlYWRlIGFuZAoraW5zdGVhZCBtYWtlIHN1cmUgdGhhdCBMREZMQUdTIGNvbWVzIGJlZm9yZSBleHRyYV9sZGZsYWdzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBNYWtlZmlsZS5pbiAgfCAgMiArLQorIE5FV1MudHh0ICAgICB8IDEwICsrKysrKysrKysKKyBjb25maWd1cmUuYWMgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGU3NTE1YjEuLmQzNjIxY2QgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yMCw3ICsyMCw3IEBAIFJBTkxJQiA9IEBSQU5MSUJACisgCisgYWxsX2NmbGFncyA9ICQoQ0ZMQUdTKQorIGFsbF9jcHBmbGFncyA9IEBERUZTQCBAZXh0cmFfY3BwZmxhZ3NAIC1EU1lTQ09ORkRJUj0kKHN5c2NvbmZkaXIpIC1JLiAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQorLWFsbF9sZGZsYWdzID0gQGV4dHJhX2xkZmxhZ3NAICQoTERGTEFHUykKKythbGxfbGRmbGFncyA9ICQoTERGTEFHUykgQGV4dHJhX2xkZmxhZ3NACisgZXh0cmFfbGlicyA9IEBleHRyYV9saWJzQAorIAorIGJhc2Vfc291cmNlcyA9IFwKK2RpZmYgLS1naXQgYS9ORVdTLnR4dCBiL05FV1MudHh0CitpbmRleCBmMTNmZWViLi5lYWVhZGY2IDEwMDY0NAorLS0tIGEvTkVXUy50eHQKKysrKyBiL05FV1MudHh0CitAQCAtMiw2ICsyLDE2IEBAIGNjYWNoZSBuZXdzCisgPT09PT09PT09PT0KKyAKKyAKKytVbnJlbGVhc2VkIDMuMi40CisrLS0tLS0tLS0tLS0tLS0tLQorKworK0J1ZyBmaXhlcworK35+fn5+fn5+fgorKworKy0gRml4ZWQgYnVpbGQgZXJyb3IgcmVsYXRlZCB0byB6bGliIG9uIHN5c3RlbXMgd2l0aCBvbGRlciBtYWtlIHZlcnNpb25zCisrICAocmVncmVzc2lvbiBpbiBjY2FjaGUgMy4yLjMpLgorKworKworIGNjYWNoZSAzLjIuMworIC0tLS0tLS0tLS0tLQorIFJlbGVhc2UgZGF0ZTogMjAxNS0wOC0xNgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGQ4Y2U5Mi4uOWU2NTU4OCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTIwLDcgKzEyMCw3IEBAIGlmIHRlc3QgeCR7dXNlX2J1bmRsZWRfemxpYn0gPSB4eWVzOyB0aGVuCisgICAgIGV4dHJhX2xpYnM9InpsaWIvbGliei5hIgorICAgICBta2RpciAtcCB6bGliCisgZWxzZQorLSAgICBleHRyYV9saWJzPSItbHoiCisrICAgIGV4dHJhX2xkZmxhZ3M9Ii1seiIKKyBmaQorIAorIGRubCBMaW5raW5nIG9uIFdpbmRvd3MgbmVlZHMgd3MyXzMyCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGYzNmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMgY2RydG9vbHMtbmF0aXZlIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiQSBzZXQgb2YgdG9vbHMgZm9yIENEIHJlY29yZGluZywgaW5jbHVkaW5nIGNkcmVjb3JkIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jZHJ0b29scy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgQ0RETC0xLjAgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMmY2ODE3MGJlNDI0YzJjZDY0ODA0MzM3NzI2YjMxMiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9jZHJ0b29scy9hbHBoYS9jZHJ0b29scy0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzgxNzI1NTc4OTRmNDY5YjQ1ODRkMDA4ZTkzZWM0NjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTgzYjVjMTI3Nzc3NzllNzhkOGI2OTQ2MWFhZTUyNDAxZjg2Mzc2OGU3ZTczOTFkNjA3MzAwMDZmOGNhZGM1YSIKKworUyA9ICIke1dPUktESVJ9L2NkcnRvb2xzLTMuMDEiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwoKSB7CisJbWFrZSBpbnN0YWxsIEdNQUtFX05PV0FSTj10cnVlIElOU19CQVNFPSR7cHJlZml4fSBERVNURElSPSR7RH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NmYxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvY29uZi9hdXRvbWFrZSBzZXQgZG9jZGlyIGF1dG9tYXRpY2FsbHksIHVzZSB0aGVpciB2YWx1ZSBlbnN1cmluZyAKK2RvYyBmaWxlcyBhcmUgcGxhY2VkIGludG8gJGRhdGFkaXIvZG9jLCBub3QgJHByZWZpeC9kb2MuCisKK1JQIDUvNy8yMDExCisKK0luZGV4OiBjaHJwYXRoLTAuMTMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjaHJwYXRoLTAuMTMub3JpZy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE0Ljc2OTkyMDI1NCArMDEwMAorKysrIGNocnBhdGgtMC4xMy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE5LjgxOTkyMDYzNSArMDEwMAorQEAgLTEsNyArMSw1IEBACisgU1VCRElSUyA9IHRlc3RzdWl0ZSBkZWIKKyAKKy1kb2NkaXIgPSAkKHByZWZpeCkvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKQorLQorIGRvY19EQVRBID0gQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FCisgCisgYmluX1BST0dSQU1TID0gY2hycGF0aApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2IwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJUb29sIHRvIGVkaXQgcnBhdGggaW4gRUxGIGJpbmFyaWVzIgorREVTQ1JJUFRJT04gPSAiY2hycGF0aCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgcnBhdGggKHdoZXJlIHRoZSBcCithcHBsaWNhdGlvbiBsb29rcyBmb3IgbGlicmFyaWVzKSBpbiBhbiBhcHBsaWNhdGlvbi4gSXQgZG9lcyBub3QgXAorKHlldCkgYWxsb3cgeW91IHRvIGFkZCBhbiBycGF0aCBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4iCitIT01FUEFHRSA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvY2hycGF0aC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy90cmFja2VyLz9hdGlkPTQxMjgwNyZncm91cF9pZD0zMTA1MiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU1JDX1VSSSA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzL2Rvd25sb2FkLnBocC9maWxlLzM5NzkvY2hycGF0aC0wLjE2LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zdGFuZGFyZGRvYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZjhkMWQxZWUzNDVmYzhhNzkxNTU3NmY1NjQ5OTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiMGQ0YzU0YmFjMjk5MGUxYmRmODEzMmYyYzk0NzdhZTc1Mjg1OWQ1MjNlMTQxZTcyYjNiMTFhMTJjMjZlN2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgV2UgZG9uJ3QgaGF2ZSBhIHN0YWdlZCBjaHJwYXRoLW5hdGl2ZSBmb3IgZW5zdXJpbmcgb3VyIGJpbmFyeSBpcworIyByZWxvY2F0YWJsZSwgc28gdXNlIHRoZSBvbmUgd2UndmUganVzdCBidWlsdAorQ0hSUEFUSF9CSU5fY2xhc3MtbmF0aXZlID0gIiR7Qn0vY2hycGF0aCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNGU3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuMy4xLmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgY21ha2UuaW5jCitpbmhlcml0IG5hdGl2ZQorCisjIFVzaW5nIGNtYWtlJ3MgaW50ZXJuYWwgbGliYXJjaGl2ZSwgc28gc29tZSBkZXBlbmRlbmNpZXMgYXJlIG5lZWRlZAorREVQRU5EUyArPSAiYnppcDItbmF0aXZlIHpsaWItbmF0aXZlIgorCitTUkNfVVJJICs9ICJcCisgICAgZmlsZTovL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaCBcCisiCisKKyMgRGlzYWJsZSBjY21ha2Ugc2luY2Ugd2UgZG9uJ3QgZGVwZW5kIG9uIG5jdXJzZXMKK0NNQUtFX0VYVFJBQ09ORiA9ICJcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgLURFTkFCTEVfQUNMPTAgLURIQVZFX0FDTF9MSUJBQ0xfSD0wIFwKKyAgICAtREhBVkVfU1lTX0FDTF9IPTAgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlOTNhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKQEAgLTAsMCArMSw1MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDUsIEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKK1NVTU1BUlkgPSAiQ3Jvc3MtcGxhdGZvcm0sIG9wZW4tc291cmNlIG1ha2Ugc3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbWFrZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHVibGljLmtpdHdhcmUuY29tL0J1Zy9teV92aWV3X3BhZ2UucGhwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQudHh0O21kNT0zYmE1YTZjMzQ0ODE2NTJjZTU3M2U1YzRlMWQ3MDdlNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvY21ha2UuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0zNDE3MzZkYWU4M2M5ZTM0NGI1M2VlYjFiYzdkN2JjMiIKKworQ01BS0VfTUFKT1JfVkVSU0lPTiA9ICIke0AnLicuam9pbihkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMDoyXSl9IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY21ha2Uub3JnL2ZpbGVzL3Yke0NNQUtFX01BSk9SX1ZFUlNJT059L2NtYWtlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9xdDQtZmFpbC1zaWxlbnQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MjYzODU3NmY0ZTFlNjIxZmVkNmMzNDEwZDNhMWIxMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZDY1MDIyYzZhMDcwN2YxYzcxMTJmOTllOWM5ODE2NzdmZGQ1NTE4ZjdkZGZhMGY3NzhkNGNlZTcxMTNlM2Q2IgorCitpbmhlcml0IGF1dG90b29scworCisjIFVnbHkgaGFjayB0byB3b3JrIGFyb3VuZCB1bmRlZmluZWQgT0VfUU1BS0VfUEFUSF9FWFRFUk5BTF9IT1NUX0JJTlMgdmFyaWFibGUKKyMgYW5kIHBvc3NpYmx5IG1pc3NpbmcgcW1ha2UgYmluYXJ5IChxdGJhc2UtbmF0aXZlIGNhbiBiZSByZW1vdmVkIGZyb20gc3lzcm9vdAorIyBlLmcuIGluIG9yZGVyIHRvIHVwZ3JhZGUgaXQsIGV2ZW4gd2hlbiB0aGVyZSBpcyB0YXJnZXQgcXRiYXNlKQorCisjIEZpeGVzIGVycm9ycyBsaWtlIHRoaXMgaW4gY21ha2UoLW5hdGl2ZSkuZG9fY29uZmlndXJlOgorI3wgLS0gUGVyZm9ybWluZyBUZXN0IHJ1bl9waWNfdGVzdCAtIFN1Y2Nlc3MKKyN8IENNYWtlIEVycm9yIGF0IHRtcC1lZ2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvbGliL2NtYWtlL1F0NUNvcmUvUXQ1Q29yZUNvbmZpZy5jbWFrZToyNyAobWVzc2FnZSk6CisjfCAgIFRoZSBpbXBvcnRlZCB0YXJnZXQgIlF0NTo6Q29yZSIgcmVmZXJlbmNlcyB0aGUgZmlsZQorI3wKKyN8ICAgICAgIi9xbWFrZSIKKyN8CisjfCAgIGJ1dCB0aGlzIGZpbGUgZG9lcyBub3QgZXhpc3QuICBQb3NzaWJsZSByZWFzb25zIGluY2x1ZGU6CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtaSAncy9eZmluZF9wYWNrYWdlKFF0NUNvcmUgUVVJRVQpJC8jZmluZF9wYWNrYWdlKFF0NUNvcmUgUVVJRVQpL2cnICR7U30vVGVzdHMvUnVuQ01ha2UvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0NEFuZDVBdXRvbW9jL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUIE5PX01PRFVMRSkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUVVJRVQgTk9fTU9EVUxFKS9nJyAke1N9L1Rlc3RzL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL15maW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCkvI2ZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUKS9nJyAke1N9L1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXRBdXRvVWljSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9nZW4vQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0QXV0b2dlbi9hdXRvcmNjX2RlcGVuZHMvQ01ha2VMaXN0cy50eHQKK30KKworIyBFeHRyYSBmbGFncyB0byBwYXNzIHRvIGNtYWtlIGludm9rZWQgYnkgYm9vdHN0cmFwCitDTUFLRV9FWFRSQUNPTkYgPSAiIgorCitkb19jb25maWd1cmUgKCkgeworCSR7U30vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLSAke0NNQUtFX0VYVFJBQ09ORn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDAxNGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsMTggQEAKK3NldCggQ01BS0VfU1lTVEVNX05BTUUgTGludXggKQorc2V0KCBDTUFLRV9DX0ZMQUdTICRFTlZ7Q0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRV9DWFhfRkxBR1MgJEVOVntDWFhGTEFHU30gIENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFIEFTTV9GTEFHUyAke0NNQUtFX0NfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0xERkxBR1NfRkxBR1MgJHtDTUFLRV9DWFhfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIICRFTlZ7T0VDT1JFX1RBUkdFVF9TWVNST09UfSAkRU5We09FQ09SRV9OQVRJVkVfU1lTUk9PVH0gKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gTkVWRVIgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0xJQlJBUlkgT05MWSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZICkKKworc3RyaW5nKFJFR0VYIE1BVENIICJzeXNyb290cy8oW2EtekEtWjAtOV0rKSIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAkRU5We1NES1RBUkdFVFNZU1JPT1R9KQorc3RyaW5nKFJFR0VYIFJFUExBQ0UgInN5c3Jvb3RzLyIgIiIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9KQorCisjIEluY2x1ZGUgdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIHN1YnNjcmlwdHMKK2ZpbGUoIEdMT0IgdG9vbGNoYWluX2NvbmZpZ19maWxlcyAiJHtDTUFLRV9UT09MQ0hBSU5fRklMRX0uZC8qLmNtYWtlIiApCitmb3JlYWNoKGNvbmZpZyAke3Rvb2xjaGFpbl9jb25maWdfZmlsZXN9KQorICAgIGluY2x1ZGUoJHtjb25maWd9KQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM2NzEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEaXNhYmxlIHVzZSBvZiBleHQyZnMvZXh0Ml9mcy5oIGJ5IGNtYWtlJ3MgaW50ZXJuYWwgbGliYXJjaGl2ZSBjb3B5CisKK1dlIGRvbid0IHdhbnQgdG8gYWRkIGEgZGVwZW5kZW5jeSBvbiBlMmZzcHJvZ3MtbmF0aXZlIGZvciBjbWFrZS1uYXRpdmUsCithbmQgd2UgZG9uJ3QgdXNlIENQYWNrIHNvIGp1c3QgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAorKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAorQEAgLTIzNywxMiArMjM3LDggQEAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJjb3B5ZmlsZS5oIiBIQVZFX0NPUFlGSUxFX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJkaXJlY3QuaCIgSEFWRV9ESVJFQ1RfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImRsZmNuLmgiIEhBVkVfRExGQ05fSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImVycm5vLmgiIEhBVkVfRVJSTk9fSCkKKy1MQV9DSEVDS19JTkNMVURFX0ZJTEUoImV4dDJmcy9leHQyX2ZzLmgiIEhBVkVfRVhUMkZTX0VYVDJfRlNfSCkKKy0KKy1DSEVDS19DX1NPVVJDRV9DT01QSUxFUygiI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorLSNpbmNsdWRlIDxleHQyZnMvZXh0Ml9mcy5oPgorLWludCBtYWluKHZvaWQpIHsgcmV0dXJuIEVYVDJfSU9DX0dFVEZMQUdTOyB9IiBIQVZFX1dPUktJTkdfRVhUMl9JT0NfR0VURkxBR1MpCistCisrU0VUKEhBVkVfRVhUMkZTX0VYVDJfRlNfSCAwKQorK1NFVChIQVZFX1dPUktJTkdfRVhUMl9JT0NfR0VURkxBR1MgMCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImZjbnRsLmgiIEhBVkVfRkNOVExfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImdycC5oIiBIQVZFX0dSUF9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiaW50dHlwZXMuaCIgSEFWRV9JTlRUWVBFU19IKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZG9udC1ydW4tY3Jvc3MtYmluYXJpZXMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorY21ha2U6IGRvbid0IHJ1biBjcm9zcy1iaW5hcmllcyBvbiBob3N0IG1hY2hpbmUKKworV2hlbiBkb2luZyB0aGUgY3Jvc3MgYnVpbGQgd2Ugb2J2aW91c2x5IGNhbm5vdCBydW4gdGhvc2UgYmluYXJpZXMgb24KK2hvc3Qgc2luY2UgdGhleSBjYW4gYmUgYmluYXJ5IGluY29tcGF0aWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworSW5kZXg6IGNtYWtlLTIuOC4xMC4xL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY21ha2UtMi44LjEwLjEub3JpZy9DTWFrZUxpc3RzLnR4dAorKysrIGNtYWtlLTIuOC4xMC4xL0NNYWtlTGlzdHMudHh0CitAQCAtNTg4LDcgKzU4OCw4IEBAIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfU1RSSUNUKQorIAorICMgYnVpbGQgdGhlIHJlbWFpbmluZyBzdWJkaXJlY3RvcmllcworIGFkZF9zdWJkaXJlY3RvcnkoU291cmNlKQorLWFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzKQorKyMgQ29tZSBvbiEgUnVubmluZyB0aGUgY3Jvc3MtYmluYXJpZXMgb24gaG9zdCBpcyBub3QgYSBnb29kIGlkZWEuCisrI2FkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzKQorIGFkZF9zdWJkaXJlY3RvcnkoVGVzdHMpCisgCisgaWYoQlVJTERfVEVTVElORykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2Vudmlyb25tZW50LmQtY21ha2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViNTZiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoCkBAIC0wLDAgKzEgQEAKK2FsaWFzIGNtYWtlPSJjbWFrZSAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NoYXJlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmYzI3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorRmFpbCBzaWxlbnRseSBpZiBzeXN0ZW0gUXQgaW5zdGFsbGF0aW9uIGlzIGJyb2tlbgorCitGaXhlcyBhIHJlZ3Jlc3Npb24gaW4gYmVoYXZpb3VyIGZyb20gMi44LjEwIHRvIDIuOC4xMSByZXN1bHRpbmcgaW4gdGhlCitmb2xsb3dpbmcgZXJyb3IgaWYgdGhlIHN5c3RlbSBRdCBpbnN0YWxsYXRpb24gaXMgYnJva2VuOgorCitDTWFrZSBFcnJvciBhdCBNb2R1bGVzL0ZpbmRRdDQuY21ha2U6MTAyOCAoc2V0X3Byb3BlcnR5KToKKyAgc2V0X3Byb3BlcnR5IGNvdWxkIG5vdCBmaW5kIFRBUkdFVCBRdDQ6OlF0Q29yZS4gIFBlcmhhcHMgaXQgaGFzIG5vdCB5ZXQKKyAgYmVlbiBjcmVhdGVkLgorQ2FsbCBTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CisgIFRlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0Ojc5IChmaW5kX3BhY2thZ2UpCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVGhlIHBhdGNoIHdhcyBzbGlnaHRseSBhZGFwdGVkIGluIG9yZGVyIHRvIG1hdGNoIGNtYWtlIDMuMi4yOgorQW5vdGhlciBzZXRfcHJvcGVydHkgd2FzIGludHJvZHVjZWQgd2hpY2ggaGFkIHRvIGJlIGluY2x1ZGVkCit3aXRoaW4gdGhlIGlmKFFUX1FUQ09SRV9GT1VORCkgc3RhdGVtZW50LgorCitTaWduZWQtb2ZmLWJ5OiBNb3JpdHogQmx1bWUgPG1vcml0ei5ibHVtZUBibXctY2FyaXQuZGU+CistLS0KKyBNb2R1bGVzL0ZpbmRRdDQuY21ha2UgfCAzOSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK2luZGV4IDY3MDQ3NjkuLjkwNDhlMzUgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKKysrKyBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQorQEAgLTEwMDAsMjUgKzEwMDAsMjYgQEAgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECisgICAgIGVuZGlmKCkKKyAgIGVuZG1hY3JvKCkKKyAKKy0KKy0gICMgU2V0IFFUX3h5el9MSUJSQVJZIHZhcmlhYmxlIGFuZCBhZGQKKy0gICMgbGlicmFyeSBpbmNsdWRlIHBhdGggdG8gUVRfSU5DTFVERVMKKy0gIF9RVDRfQURKVVNUX0xJQl9WQVJTKFF0Q29yZSkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCistICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTCistICAgICAgIiR7UVRfTUtTUEVDU19ESVJ9L2RlZmF1bHQiCistICAgICAgJHtRVF9JTkNMVURFX0RJUn0KKy0gICkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCistICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TCistICAgICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OlFUX05PX0RFQlVHPgorLSAgKQorLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBQUk9QRVJUWQorLSAgICBJTlRFUkZBQ0VfUVRfTUFKT1JfVkVSU0lPTiA0CistICApCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorLSAgICBDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkcgUVRfTUFKT1JfVkVSU0lPTgorLSAgKQorKyAgaWYoUVRfUVRDT1JFX0ZPVU5EKQorKyAgICAjIFNldCBRVF94eXpfTElCUkFSWSB2YXJpYWJsZSBhbmQgYWRkCisrICAgICMgbGlicmFyeSBpbmNsdWRlIHBhdGggdG8gUVRfSU5DTFVERVMKKysgICAgX1FUNF9BREpVU1RfTElCX1ZBUlMoUXRDb3JlKQorKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTCisrICAgICAgICAiJHtRVF9NS1NQRUNTX0RJUn0vZGVmYXVsdCIKKysgICAgICAgICR7UVRfSU5DTFVERV9ESVJ9CisrICAgICkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUworKyAgICAgICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OlFUX05PX0RFQlVHPgorKyAgICApCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfUVRfTUFKT1JfVkVSU0lPTiA0CisrICAgICkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkcgUVRfTUFKT1JfVkVSU0lPTgorKyAgICApCisrICBlbmRpZigpCisgCisgICBmb3JlYWNoKFFUX01PRFVMRSAke1FUX01PRFVMRVN9KQorICAgICBfUVQ0X0FESlVTVF9MSUJfVkFSUygke1FUX01PRFVMRX0pCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWNiY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2NtYWtlOiBzdXBwb3J0IE9wZW5FbWJlZGRlZCBRdDQgdG9vbCBiaW5hcnkgbmFtZXMKKworVGhlIEZpbmRRdDQgbW9kdWxlIGxvb2tzIGZvciBRdDQgYmluYXJpZXMgdG8gYmUgYWJsZSB0byBnYXRoZXIgdGhlCitwYXRocyB1c2VkIGZvciBjb21waWxhdGlvbiBhbmQgYWxzbyB0byBiZSB1c2luZyBkdXJpbmcgb3RoZXIgcHJvY2Vzc2VzCisodHJhbnNsYXRpb24gdXBkYXRlLCB0cmFuc2xhdGlvbiBiaW5hcnkgZ2VuZXJhdGluZyBhbmQgbGlrZSkgaG93ZXZlcgorT3BlbkVtYmVkZGVkIGhhcyByZW5hbWVkIHRob3NlIHRvIGFsbG93IG9sZCBRTWFrZSB0byBiZSB1c2VkIGluCitwYXJhbGxlbCB3aXRoIHRoZSBjdXJyZW50IG9uZS4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZQorT3BlbkVtYmVkZGVkIHNwZWNpZmljIGJpbmFyeSBuYW1lcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworVGhlIHBhdGNoIHdhcyBzbGlnaHRseSBhZGFwdGVkIGluIG9yZGVyIHRvIG1hdGNoIGNtYWtlIDMuMi4yOgorSW5zdGVhZCBvZiBmaW5kX3Byb2dyYW0sIF9maW5kX3F0NF9wcm9ncmFtIGlzIG5vdyB1c2VkLgorCitTaWduZWQtb2ZmLWJ5OiBNb3JpdHogQmx1bWUgPG1vcml0ei5ibHVtZUBibXctY2FyaXQuZGU+CistLS0KKyBNb2R1bGVzL0ZpbmRRdDQuY21ha2UgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFF0NC5jbWFrZSBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQoraW5kZXggMTEwOTFiNS4uNjcwNDc2OSAxMDA2NDQKKy0tLSBhL01vZHVsZXMvRmluZFF0NC5jbWFrZQorKysrIGIvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCitAQCAtNTIyLDcgKzUyMiw3IEBAIGVuZGZ1bmN0aW9uKCkKKyAKKyBzZXQoUVQ0X0lOU1RBTExFRF9WRVJTSU9OX1RPT19PTEQgRkFMU0UpCisgCistc2V0KF9RVDRfUU1BS0VfTkFNRVMgcW1ha2UgcW1ha2U0IHFtYWtlLXF0NCBxbWFrZS1tYWMpCisrc2V0KF9RVDRfUU1BS0VfTkFNRVMgcW1ha2UgcW1ha2UyIHFtYWtlNCBxbWFrZS1xdDQgcW1ha2UtbWFjKQorIF9xdDRfZmluZF9xbWFrZSgiJHtfUVQ0X1FNQUtFX05BTUVTfSIgUVRfUU1BS0VfRVhFQ1VUQUJMRSBRVFZFUlNJT04pCisgCisgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECitAQCAtMTE0OCwxMiArMTE0OCwxMiBAQCBpZiAoUVRfUU1BS0VfRVhFQ1VUQUJMRSBBTkQKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX01PQ19FWEVDVVRBQkxFIFF0NDo6bW9jIG1vYy1xdDQgbW9jNCBtb2MpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9VSUNfRVhFQ1VUQUJMRSBRdDQ6OnVpYyB1aWMtcXQ0IHVpYzQgdWljKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfVUlDM19FWEVDVVRBQkxFIFF0NDo6dWljMyB1aWMzKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfUkNDX0VYRUNVVEFCTEUgUXQ0OjpyY2MgcmNjKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU0NQUDJYTUxfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzY3BwMnhtbCBxZGJ1c2NwcDJ4bWwpCistICBfZmluZF9xdDRfcHJvZ3JhbShRVF9EQlVTWE1MMkNQUF9FWEVDVVRBQkxFIFF0NDo6cWRidXN4bWwyY3BwIHFkYnVzeG1sMmNwcCkKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX1JDQ19FWEVDVVRBQkxFIFF0NDo6cmNjIHJjYzQgcmNjKQorKyAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU0NQUDJYTUxfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzY3BwMnhtbCBxZGJ1c2NwcDJ4bWw0IHFkYnVzY3BwMnhtbCkKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNYTUwyQ1BQX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c3htbDJjcHAgcWRidXN4bWwyY3BwNCBxZGJ1c3htbDJjcHApCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9MVVBEQVRFX0VYRUNVVEFCTEUgUXQ0OjpsdXBkYXRlIGx1cGRhdGUtcXQ0IGx1cGRhdGU0IGx1cGRhdGUpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9MUkVMRUFTRV9FWEVDVVRBQkxFIFF0NDo6bHJlbGVhc2UgbHJlbGVhc2UtcXQ0IGxyZWxlYXNlNCBscmVsZWFzZSkKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX1FDT0xMRUNUSU9OR0VORVJBVE9SX0VYRUNVVEFCTEUgUXQ0OjpxY29sbGVjdGlvbmdlbmVyYXRvciBxY29sbGVjdGlvbmdlbmVyYXRvci1xdDQgcWNvbGxlY3Rpb25nZW5lcmF0b3IpCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9RQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFIFF0NDo6cWNvbGxlY3Rpb25nZW5lcmF0b3IgcWNvbGxlY3Rpb25nZW5lcmF0b3ItcXQ0IHFjb2xsZWN0aW9uZ2VuZXJhdG9yIHFjb2xsZWN0aW9uZ2VuZXJhdG9yNCkKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RFU0lHTkVSX0VYRUNVVEFCTEUgUXQ0OjpkZXNpZ25lciBkZXNpZ25lci1xdDQgZGVzaWduZXI0IGRlc2lnbmVyKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTElOR1VJU1RfRVhFQ1VUQUJMRSBRdDQ6Omxpbmd1aXN0IGxpbmd1aXN0LXF0NCBsaW5ndWlzdDQgbGluZ3Vpc3QpCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE4OGYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuMy4xLmJiCkBAIC0wLDAgKzEsNTMgQEAKK3JlcXVpcmUgY21ha2UuaW5jCisKK2luaGVyaXQgY21ha2UKKworREVQRU5EUyArPSAiY3VybCBleHBhdCB6bGliIGxpYmFyY2hpdmUgeHogbmN1cnNlcyBiemlwMiIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisgICAgZmlsZTovL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIFwKKyAgICBmaWxlOi8vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCIKKworIyBTdHJpcCAke3ByZWZpeH0gZnJvbSAke2RvY2Rpcn0sIHNldCByZXN1bHQgaW50byBkb2NkaXJfc3RyaXBwZWQKK3B5dGhvbiAoKSB7CisgICAgcHJlZml4PWQuZ2V0VmFyKCJwcmVmaXgiLCBUcnVlKQorICAgIGRvY2Rpcj1kLmdldFZhcigiZG9jZGlyIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBkb2NkaXIuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdkb2NkaXIgbXVzdCBjb250YWluIHByZWZpeCBhcyBpdHMgcHJlZml4JykKKworICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2RpcltsZW4ocHJlZml4KTpdCisgICAgaWYgbGVuKGRvY2Rpcl9zdHJpcHBlZCkgPiAwIGFuZCBkb2NkaXJfc3RyaXBwZWRbMF0gPT0gJy8nOgorICAgICAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJfc3RyaXBwZWRbMTpdCisKKyAgICBkLnNldFZhcigiZG9jZGlyX3N0cmlwcGVkIiwgZG9jZGlyX3N0cmlwcGVkKQorfQorCitFWFRSQV9PRUNNQUtFPSIgXAorICAgIC1EQ01BS0VfRE9DX0RJUj0ke2RvY2Rpcl9zdHJpcHBlZH0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQlpJUDI9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQ1VSTD0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9FWFBBVD0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9GT1JNPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkFSQ0hJVkU9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCTFpNQT0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9aTElCPTEgXAorICAgIC1ES1dTWVNfQ0hBUl9JU19TSUdORUQ9MSBcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnLURLV1NZU19MRlNfV09SS1M9MScsICctREtXU1lTX0xGU19ESVNBQkxFPTEnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vY21ha2UKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L09FVG9vbGNoYWluQ29uZmlnLmNtYWtlICR7RH0ke2RhdGFkaXJ9L2NtYWtlLworCisgICAgbWtkaXIgLXAgJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZAorICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCAke0R9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kL2NtYWtlLnNoCit9CisKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7U0RLUEFUSE5BVElWRX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0iCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZG9jZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3MzU2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoICouZGVza3RvcCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZGVza3RvcC1maWxlLXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscy9yZWxlYXNlcy9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzZiOWY5YWFjMWVhMTQzMDkxMTc4YzIzNDM3ZTZjZDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODQzNTMyNjcyNjkyZjk4ZTliMmQ2YWU2Y2M4NjU4ZGE1NjJkZmRlMTYwNmM3ZjMzZDlkMjI3YTM0NGRlNTZjNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3ODMwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlNldHMgdXAgZGlzdGNjIGZvciBjb21waWxhdGlvbiBvbiB0aGUgdGFyZ2V0IGRldmljZSIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vZGlzdGNjLnNoIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgRGVmYXVsdCB0byB0aGUgaG9zdCBtYWNoaW5lIGZvciBhIHJ1bm5pbmcgcWVtdSBzZXNzaW9uCitESVNUQ0NfSE9TVFMgPz0gIjE5Mi4xNjguNy4xIgorCitkb19jb25maWd1cmUoKSB7CisJc2VkIC1pICJzJUBESVNUQ0NfSE9TVFNAJSR7RElTVENDX0hPU1RTfSUiIGRpc3RjYy5zaAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kCisJaW5zdGFsbCAtbSAwNzU1IGRpc3RjYy5zaCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCit9CisKK1JERVBFTkRTXyR7UE59ID0gImRpc3RjYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjA1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoCkBAIC0wLDAgKzEsNCBAQAorRElTVENDX0hPU1RTPSJARElTVENDX0hPU1RTQCIKKyNESVNUQ0NfVkVSQk9TRT0iMSIKKworZXhwb3J0IERJU1RDQ19IT1NUUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL25mcy1leHBvcnQtcm9vdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjlkMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJDb25maWd1cmF0aW9uIHNjcmlwdCB0byBleHBvcnQgdGFyZ2V0IHJvb3RmcyBmaWxlc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiRW5hYmxlcyBORlMgYWNjZXNzIGZyb20gYW55IGhvc3QgdG8gdGhlIGVudGlyZSBmaWxlc3lzdGVtIChmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMpLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZpbGU6Ly9leHBvcnRzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCBleHBvcnRzICR7RH0ke3N5c2NvbmZkaXJ9LworfQorCitSREVQRU5EU18ke1BOfSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1uZnMtc2VydmVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1M2M1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMKQEAgLTAsMCArMSBAQAorLyAqKHJ3LG5vX3Jvb3Rfc3F1YXNoLGFzeW5jLG5vX3N1YnRyZWVfY2hlY2spCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM2YjNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCisuL3Rlc3RpbmcvcnVuX3Rlc3Quc2ggLi90ZXN0aW5nL2Nhc2UqLnBhdCB8c2VkIFwKKyAgLWUgJ3N8Kiogb2t8UEFTU3wnIFwKKyAgLWUgJ3N8Pz8gZmFpbHxGQUlMfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0XzEuNjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViYTRkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiVG9vbCB0byBwcm9kdWNlIGEgc3RhdGlzdGljcyBiYXNlZCBvbiBhIGRpZmYiCitERVNDUklQVElPTiA9ICJkaWZmc3RhdCByZWFkcyB0aGUgb3V0cHV0IG9mIGRpZmYgYW5kIGRpc3BsYXlzIGEgaGlzdG9ncmFtIG9mIFwKK3RoZSBpbnNlcnRpb25zLCBkZWxldGlvbnMsIGFuZCBtb2RpZmljYXRpb25zIHBlci1maWxlLiBJdCBpcyB1c2VmdWwgZm9yIFwKK3Jldmlld2luZyBsYXJnZSwgY29tcGxleCBwYXRjaCBmaWxlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlmZnN0YXQvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaW5zdGFsbC1zaDtlbmRsaW5lPTQyO21kNT1iMzU0OTcyNmMxMDIyYmVlMDljMTc0YzcyYTBjYTRhNSIKKworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWZmc3RhdC9kaWZmc3RhdC0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImJhODg5ZGE0YzA2YjU0N2FhMmQ3OGZhOTY4MDBhZTZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMzJlNDE4YjQzYmFlNzBkNTQ4ZTMyZGE5MDFlYmM0YWMxMjk3MjM4MWRlMTMxNGJlYmRlMGIxMjZmYjAxMjMiCisKK1MgPSAiJHtXT1JLRElSfS9kaWZmc3RhdC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwdGVzdAorCitMREZMQUdTICs9ICIke1RPT0xDSEFJTl9PUFRJT05TfSIKKworZG9fY29uZmlndXJlICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorCWF1dG90b29sc19kb19jb25maWd1cmUKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtciAke1N9L3Rlc3RpbmcgJHtEfSR7UFRFU1RfUEFUSH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg3OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiQSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJkaXN0Y2MgaXMgYSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0gdGhhdCBkaXN0cmlidXRlcyBcCitjb21waWxhdGlvbiBvZiBDL0MrKy9PYmpDIGNvZGUgYWNyb3NzIG1hY2hpbmVzIG9uIGEgbmV0d29yay4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImF2YWhpIgorCitHVEtDT05GSUcgPSAiZ3RrIgorR1RLQ09ORklHX2xpYmMtdWNsaWJjID0gIiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJyR7R1RLQ09ORklHfScsICcnLCBkKX0gcG9wdCIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrLC0td2l0aG91dC1ndGsgLS13aXRob3V0LWdub21lLGd0aysiCisjIHVzZSBzeXN0ZW0gcG9wdCBieSBkZWZhdWx0CitQQUNLQUdFQ09ORklHW3BvcHRdID0gIi0td2l0aG91dC1pbmNsdWRlZC1wb3B0LC0td2l0aC1pbmNsdWRlZC1wb3B0LHBvcHQiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImF2YWhpLWRhZW1vbiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Rpc3RjYy9kaXN0Y2MuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlYnVpbGRkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2MgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjLnNlcnZpY2UiCitTUkNSRVYgPSAiOWExNzJkM2QyMDA0Mjc1NGEzMGMwY2Q5YTVkNjNmZDFhODEyMGMzMSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtV2Vycm9yIFBZVEhPTj0vZGV2L251bGwiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ob21lIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWdpZCBub2dyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGlzdGNjIgorCitJTklUU0NSSVBUX05BTUUgPSAiZGlzdGNjIgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImRpc3RjYy5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kaXN0Y2MgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaXN0Y2MKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rpc3RjYy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgc2VkIC1pIC1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaXN0Y2Muc2VydmljZQorICAgICR7REVTS1RPUElOU1RBTEx9Cit9CitERVNLVE9QSU5TVEFMTCA9ICIiCitERVNLVE9QSU5TVEFMTF9saWJjLWdsaWJjICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2Rpc3RjYy8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcCAke0R9JHtkYXRhZGlyfS9kaXN0Y2MvCit9CitQQUNLQUdFUyArPSAiZGlzdGNjLWRpc3Rtb24tZ25vbWUiCisKK0ZJTEVTXyR7UE59ID0gIiAke3N5c2NvbmZkaXJ9IFwKKwkJJHtiaW5kaXJ9L2Rpc3RjYyBcCisgICAgJHtiaW5kaXJ9L2xzZGlzdGNjIFwKKwkJJHtiaW5kaXJ9L2Rpc3RjY2QgXAorCQkke2JpbmRpcn0vZGlzdGNjbW9uLXRleHQgXAorCQkke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rpc3RjYy5zZXJ2aWNlIgorRklMRVNfZGlzdGNjLWRpc3Rtb24tZ25vbWUgPSAiICAke2JpbmRpcn0vZGlzdGNjbW9uLWdub21lIFwKKwkJCQkke2RhdGFkaXJ9L2Rpc3RjYyIKKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJZGVsdXNlciBkaXN0Y2MgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZWM5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA4MzMxZmM0NzU5ZDgwOTUxMmY0MDRlN2EyN2Y4MTdhZDZkNjE2NDUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTg6MDA6MzMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gemVyb2NvbmY6IEluY2x1ZGUgZmNudGwuaAorCitXZSBuZWVkIGl0IGZvciBnZXR0aW5nIGRlaW5pdGlvbnMgZm9yIE9fKiBlLmcuIE9fQ1JFQVQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvemVyb2NvbmYuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3plcm9jb25mLmMgYi9zcmMvemVyb2NvbmYuYworaW5kZXggNDE0ZGRjNC4uMzFiZDMzZiAxMDA2NDQKKy0tLSBhL3NyYy96ZXJvY29uZi5jCisrKysgYi9zcmMvemVyb2NvbmYuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKyAjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorICNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzQxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2RlZmF1bHQKQEAgLTAsMCArMSwyNCBAQAorIyBEZWZhdWx0cyBmb3IgZGlzdGNjIGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaXN0Y2MKKworIworIyBzaG91bGQgZGlzdGNjIGJlIHN0YXJ0ZWQgb24gYm9vdD8KKyMKKyMgU1RBUlRESVNUQ0M9InRydWUiCisKK1NUQVJURElTVENDPSJ0cnVlIgorCisjCisjIFdoaWNoIG5ldHdvcmtzL2hvc3RzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGNvbm5lY3QgdG8gdGhlIGRhZW1vbj8KKyMgWW91IGNhbiBsaXN0IG11bHRpcGxlIGhvc3RzL25ldHdvcmtzIHNlcGFyYXRlZCBieSBzcGFjZXMuCisjIE5ldHdvcmtzIGhhdmUgdG8gYmUgaW4gQ0lEUiBub3RhdGlvbiwgZi5lLiAxOTIuMTY4LjEuMC8yNAorIyBIb3N0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgSVAgQWRyZXNzCisjCisjIEFMTE9XRURORVRTPSIxMjcuMC4wLjEiCisKK0FMTE9XRURORVRTPSIxOTIuMTY4LjcuMC8yNCIKKworIworIyBPUFRJT05TIGlzIHVzZWQgZm9yIHRoZSBzeXN0ZW1kIHNlcnZpY2UgZmlsZQorIworT1BUSU9OUz0iLS1hbGxvdyAxOTIuMTY4LjcuMC8yNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM2ZjBmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGRpc3RjYworIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDEKKyMgU2hvcnQtRGVzY3JpcHRpb246IHNpbXBsZSBkaXN0cmlidXRlZCBjb21waWxlciBjbGllbnQgYW5kIHNlcnZlcgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgZGlzdGNjZCBEZWJpYW4gaW5pdC5kIHNjcmlwdCBjb250cmlidXRlZCBieSBKYXNvbiBUaG9tYXMuICAoRGViaWFuICMxNjExMzYpCisjCisjIHNrZWxldG9uCWV4YW1wbGUgZmlsZSB0byBidWlsZCAvZXRjL2luaXQuZC8gc2NyaXB0cy4KKyMJCVRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3Qgc2NyaXB0cyBmb3IgL2V0Yy9pbml0LmQuCisjCisjCQlXcml0dGVuIGJ5IE1pcXVlbCB2YW4gU21vb3JlbmJ1cmcgPG1pcXVlbHNAY2lzdHJvbi5ubD4uCisjCQlNb2RpZmllZCBmb3IgRGViaWFuIEdOVS9MaW51eAorIwkJYnkgSWFuIE11cmRvY2sgPGltdXJkb2NrQGdudS5haS5taXQuZWR1Pi4KKyMKKyMgVmVyc2lvbjoJQCgjKXNrZWxldG9uICAxLjkuMSAgMDgtQXByLTIwMDIgIG1pcXVlbHNAY2lzdHJvbi5ubAorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3IvYmluL2Rpc3RjY2QKK05BTUU9ZGlzdGNjCitERVNDPSJEaXN0cmlidXRlZCBDb21waWxlciBEYWVtb24iCitEQUVNT05fQVJHUz0iLS1waWQtZmlsZT0vdmFyL3J1bi8kTkFNRS5waWQgLS1kYWVtb24iCisjIHBsZWFzZSBjaGFuZ2UgdGhvc2UgdmFyaWFibGVzIGJ5IG92ZXJyaWRpbmcgdGhlbSBpbiAvZXRjL2RlZmF1bHRzL2Rpc3RjYworQUxMT1dFRE5FVFM9IjEyNy4wLjAuMSIKKworIyBSZWFkcyBjb25maWcgZmlsZSAod2lsbCBvdmVycmlkZSBkZWZhdWx0cyBhYm92ZSkKK1sgLXIgL2V0Yy9kZWZhdWx0L2Rpc3RjYyBdICYmIC4gL2V0Yy9kZWZhdWx0L2Rpc3RjYworCit0ZXN0IC14ICREQUVNT04gfHwgZXhpdCAwCisKK3NldCAtZQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworIyBjb25zdHJ1Y3QgYWNjZXNzIGxpc3QKK0FMTE9XPSIiCitmb3IgbmV0IGluICRBTExPV0VETkVUUworZG8KKwlBTExPVz0iJEFMTE9XIC0tYWxsb3cgJG5ldCIKK2RvbmUKKworc2hvdWxkX3N0YXJ0KCkgeworCWlmIFsgIiRTVEFSVERJU1RDQyIgIT0gInRydWUiIF0gJiYgWyAiJFNUQVJURElTVENDIiAhPSAiWUVTIiBdOyB0aGVuCisJCWVjaG8gIlNUQVJURElTVENDIGlzIHNldCB0byBmYWxzZSBpbiAvZXRjL2RlZmF1bHQvZGlzdGNjIgorCQllY2hvICIkREFFTU9OIG5vdCBzdGFydGluZyIKKwkJZXhpdCAwCisJZmkKKwkjIHdlIG5lZWQgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgcGlkIGZpbGUKKwl0b3VjaCAvdmFyL3J1bi8kTkFNRS5waWQKKwljaG93biBkaXN0Y2MgL3Zhci9ydW4vJE5BTUUucGlkCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzaG91bGRfc3RhcnQKKwllY2hvIC1uICJTdGFydGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCS0tZXhlYyAkREFFTU9OIC0tICREQUVNT05fQVJHUyAkQUxMT1cgfHwKKwl7CisJICAgIGNvZGU9JD8KKwkgICAgZWNobyAiJDA6IHN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCWVjaG8gIi4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OIHx8CisJeworCSAgICBjb2RlPSQ/CisJICAgIGVjaG8gIiQwOiBzdG9wIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCXJtIC1mIC92YXIvcnVuLyROQU1FLnBpZCA+L2Rldi9udWxsIDI+JjEKKwllY2hvICIuIgorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSMKKwkjCUlmIHRoZSAicmVsb2FkIiBvcHRpb24gaXMgaW1wbGVtZW50ZWQsIG1vdmUgdGhlICJmb3JjZS1yZWxvYWQiCisJIwlvcHRpb24gdG8gdGhlICJyZWxvYWQiIGVudHJ5IGFib3ZlLiBJZiBub3QsICJmb3JjZS1yZWxvYWQiIGlzCisJIwlqdXN0IHRoZSBzYW1lIGFzICJyZXN0YXJ0Ii4KKwkjCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OCisJc2xlZXAgMQorCXNob3VsZF9zdGFydAorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwkJLS1leGVjICREQUVNT04gLS0gJERBRU1PTl9BUkdTICRBTExPVyB8fAorCXsKKwkgICAgY29kZT0kPworCSAgICBybSAtZiAvdmFyL3J1bi8kTkFNRS5waWQgPi9kZXYvbnVsbCAyPiYxCisJICAgIGVjaG8gIiQwOiByZXN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCWVjaG8gIi4iCisJOzsKKworICAgc3RhdHVzKQorCXN0YXR1cyAkREFFTU9OCisJZXhpdCAkPworCTs7CisgICopCisJTj0vZXRjL2luaXQuZC8kTkFNRQorCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxzdGF0dXN9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjUzZGRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPURpc3RjY2QgQSBEaXN0cmlidXRlZCBDb21waWxhdGlvbiBTZXJ2ZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVXNlcj1kaXN0Y2MKK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9kZWZhdWx0L2Rpc3RjYworRXhlY1N0YXJ0PUBCSU5ESVJAL2Rpc3RjY2QgLS12ZXJib3NlIC0tbm8tZGV0YWNoIC0tZGFlbW9uICRPUFRJT05TCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wCkBAIC0wLDAgKzEsMTIgQEAKK1tEZXNrdG9wIEVudHJ5XQorVmVyc2lvbj0wLjkuNAorRXhlYz1kaXN0Y2Ntb24tZ25vbWUKK05hbWU9ZGlzdGNjIG1vbml0b3IKK0dlbmVyaWNOYW1lPURpc3RyaWJ1dGVkIENvbXBpbGUgTW9uaXRvcgorQ29tbWVudD1HcmFwaGljYWwgdmlldyBvZiBkaXN0cmlidXRlZCBjb21waWxlIHRhc2tzCitJY29uPWRpc3RjY21vbi1nbm9tZS1pY29uCitUcnlFeGVjPWRpc3RjY21vbi1nbm9tZQorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R05PTUU7RGV2ZWxvcG1lbnQ7CitTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWUzZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1doZW4gYnVpbGRpbmcgd2l0aCBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSwgbWFrZSBpbnN0YWxsIGZhaWxzLAordW5hYmxlIHRvIGZpbmQgdGhlIGdub21lX2RhdGEgZmlsZXMuIFRoaXMgcGF0Y2ggY29ycmVjdHMgdGhlCitwYXRjaCBhbmQgZW5zdXJlcyB0aGUgYnVpbGQgd29ya3MgaW4gdGhpcyBjYXNlLgorCitSUCAyMDEzLzMvOAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGRpc3RjYy0zLjEvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaXN0Y2MtMy4xLm9yaWcvTWFrZWZpbGUuaW4JMjAwOC0xMi0wMiAyMTo1MDozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBkaXN0Y2MtMy4xL01ha2VmaWxlLmluCTIwMTMtMDMtMDggMTA6NDk6MjQuMjI0NDAwOTM3ICswMDAwCitAQCAtMTA4OCw3ICsxMDg4LDcgQEAKKyBpbnN0YWxsLWdub21lLWRhdGE6ICQoZ25vbWVfZGF0YSkKKyAJJChta2luc3RhbGxkaXJzKSAiJChERVNURElSKSQocGtnZGF0YWRpcikiCisgCWZvciBwIGluICQoZ25vbWVfZGF0YSk7IGRvCQkJCVwKKy0JJChJTlNUQUxMX0RBVEEpICIkJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisrCSQoSU5TVEFMTF9EQVRBKSAiJChzcmNkaXIpLyQkcCIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0IDE7IFwKKyAJZG9uZQorIAorIGluc3RhbGwtY29uZjogJChjb25mX2ZpbGVzKSAkKGRlZmF1bHRfZmlsZXMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE2NTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkRNSSAoRGVza3RvcCBNYW5hZ2VtZW50IEludGVyZmFjZSkgdGFibGUgcmVsYXRlZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvZG1pZGVjb2RlLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9L2RtaWRlY29kZS8ke0JQfS50YXIuYnoyIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0fGFhcmNoNjR8YXJtfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbAorfQorCitkb191bnBhY2tfZXh0cmEoKSB7CisJc2VkIC1pIC1lICcvXnByZWZpeC9zOi91c3IvbG9jYWw6JHtleGVjX3ByZWZpeH06JyAke1N9L01ha2VmaWxlCit9CithZGR0YXNrIHVucGFja19leHRyYSBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNDA2ZjNjYmIyNzczNjQ5MTY5ODY5N2JlZWRkYjc4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MTNmZjMwNTVkNTYzYTYyYTQyMDc4OWI4ZWUzM2IwMzhkZTlhZmExOGVhNjEyNTQ3NjBkZGY4YWI4N2E1MDg4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxYjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIKQEAgLTAsMCArMSw2OCBAQAorU1VNTUFSWSA9ICJEU1NTTCBzdHlsZXNoZWV0cyB1c2VkIHRvIHRyYW5zZm9ybSBTR01MIGFuZCBYTUwgRG9jQm9vayBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldCIKKyMgU2ltcGxlIHBlcnNtaXNzaXZlCitMSUNFTlNFID0gIkRTU1NMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT00MTtlbmRsaW5lPTc0O21kNT04NzUzODUxNTliMmVlNzZlY2Y1NjEzNmFlN2Y1NDJkNiIKKworREVQRU5EUyA9ICJzZ21sLWNvbW1vbi1uYXRpdmUiCisKK1BSID0gInI0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2Nib29rL2RvY2Jvb2stZHNzc2wtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImJjMTkyZDIzMjY2YjlhNjY0Y2EwYWJhNGE3Nzk0YzdjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmMzI5ZTEyMGJlZTllZjQyZmJkZDc0ZGRkNjBlMDVlNDk3ODZjNWE3OTUzYTBmZjRjNjgwYWU2YmRmMGUyYmMiCisKK1MgPSAiJHtXT1JLRElSfS9kb2Nib29rLWRzc3NsLSR7UFZ9IgorCitpbmhlcml0IG5hdGl2ZQorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZG9jYm9va19kc3NzbF9zeXNyb290X3ByZXByb2Nlc3MiCitDTEVBTkZVTkNTICs9ICJkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9jbGVhbiIKKworCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay1kc3NzbC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2NvbGxhdGVpbmRleC5wbCAke0R9JHtiaW5kaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCWluc3RhbGwgLW0gMDY0NCBjYXRhbG9nICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCWNwIC12IC1SICogJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9L2NhdGFsb2ciID4gXAorCQkgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0vY29tbW9uL2NhdGFsb2ciID4+IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorfQorCitkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCWZpCit9CisKK2RvY2Jvb2tfZHNzc2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsCit9CisKK2RvY2Jvb2tfZHNzc2xfc3R5bGVzaGVldHNfc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorCWZvciBmIGluICRmaWxlczsgZG8KKwkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGY0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworRFREX1ZFUlNJT04gPSAiMy4xIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCisjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgorIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLzMuMS9kb2NiazMxLnppcCBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDMyNzQ5YzBjODA2ZGJhZTgxYzhiY2I3MGRhM2I1ZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjAyNjFkMjc3MWI5YTA1MmFiZmEzZDhmYWIxYWE2MmJlMDU3OTFhMDEwMjgxYzU2NmY5MDczYmYwZTY0NDUzOCIKKworZG9fY29tcGlsZSgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQtMy5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlzZWQgLWkgLWUgJy9JU08gODg3OS9kJyAtZSAnc3xEVERERUNMICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjMuMS8vRU4ifFNHTUxERUNMfGcnIGRvY2Jvb2suY2F0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM5Mzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGRvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYworCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKK0RURF9WRVJTSU9OID0gIjQuMSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gImh0dHA6Ly9kb2Nib29rLm9yZy9zZ21sLzQuMS9kb2NiazQxLnppcCBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg5ZjZmZjJhMjE3M2ViMWUxNDIxNmMxMDUzM2VkZTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGVhYWZjZjBhMzY3NzY5MmU3YWQ0NDEyYzBlNDFjMWRiM2U5ZGE2Y2RjZGIzZGQzMmIyY2MxZjljOTdkNjMxMSIKKworZG9fY29tcGlsZSgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJc2VkIC1pIC1lICcvSVNPIDg4NzkvZCcgLWUgJy9nbWwvZCcgZG9jYm9vay5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTcyM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjUtbmF0aXZlLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworRFREX1ZFUlNJT04gPSAiNC41IgorCitQUiA9ICIke0lOQ19QUn0uMCIKK1BWID0gIjQuNSIKKworU1JDX1VSSVttZDVzdW1dID0gIjA3YzU4MWY0YmJjYmE2ZDNhYWM4NTM2MGExOWY5NWY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgwNDNlNTE0ZTgwYzZjMTljYjE0NmI1ZDM3OTM3ZDEzMDViZjNhYmY5YjAwOTdjMzZkZjdmNzBmNjExY2RmNDMiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCXNlZCAtaSAtZSAnL0lTTyA4ODc5L2QnIC1lJy9nbWwvZCcgZG9jYm9vay5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjUwOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsNzAgQEAKKyMgVGhlIERURHMgb2YgdGhlIHZhcmlvdXMgdmVyc2lvbnMgaGF2ZSB0byBiZSBpbnN0YWxsZWQgaW4gcGFyYWxsZWwgYW5kCisjIHNob3VsZCBub3QgcmVwbGFjZSBlYWNoIG90aGVyLiBUaGUgaW5zdGFsbGF0aW9uIHN0ZXAgaXMgY29tbW9uIGZvcgorIyBhbGwgdmVyc2lvbnMgYW5kIGp1c3QgZGlmZmVycyBpbiAke0RURF9WRVJTSU9OfSB3aGljaCBpcyBzZXQgaW4gZWFjaAorIyB2ZXJzaW9uIHJlY2lwZS4KKyMKKyMgVGhlIERURHMgZG8gaGF2ZSBzb21lIHF1aXJrcyAoc2VlIExGUyBkb2N1bWVudGF0aW9uKS4KK1NVTU1BUlkgPSAiRG9jdW1lbnQgdHlwZSBkZWZpbml0aW9ucyBmb3IgdmVyaWZpY2F0aW9uIG9mIFNHTUwgZGF0YSBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBTR01MIGRhdGEgXAorZmlsZXMgYWdhaW5zdCB0aGUgRG9jQm9vayBydWxlIHNldCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8iCisKK0RFUEVORFMgPSAic2dtbC1jb21tb24tbmF0aXZlIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvJHtEVERfVkVSU0lPTn0vZG9jYm9vay0ke0RURF9WRVJTSU9OfS56aXAgXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyIKKworIyBUaGUgLnppcCBmaWxlIGV4dHJhY3RzIHRvIHRoZSBjdXJyZW50IGRpcgorUyA9ICIke1dPUktESVJ9IgorCitJTkNfUFIgPSAicjMiCisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImRvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCAoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfQorCWluc3RhbGwgZG9jYm9vay5jYXQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059L2NhdGFsb2cKKwljcCAtUHBSciAqLmR0ZCAqLm1vZCAqLmRjbCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0vY2F0YWxvZyIgPiBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKK30KKworZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfcG9zdGluc3QgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKKwlmaQorfQorCitkb2Nib29rX3NnbWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfQorfQorCitDTEVBTkZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3NzdGF0ZV9jbGVhbiIKKworZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCisJZm9yIGYgaW4gJGZpbGVzOyBkbworCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0L2QnICRmCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhN2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMKQEAgLTAsMCArMSwxNiBAQAorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBYTUwgRFRECithbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKK2lzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKK2hvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKK2FueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCit3YXJyYW50eS4KKworSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCityZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCithZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKK3RoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IgCitjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKK2luZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy0wLjYuMTQvcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNzlkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggcnVudGltZSBlcnJvciBvY2N1cnJlZCBlLmcuIHdpdGggZG9jYm9vay10by1tYW4gY2FsbHM6CisKKyAgZ3JlcDogY2hhcmFjdGVyIGNsYXNzIHN5bnRheCBpcyBbWzpzcGFjZTpdXSwgbm90IFs6c3BhY2U6XQorICBncmVwOiBjaGFyYWN0ZXIgY2xhc3Mgc3ludGF4IGlzIFtbOnNwYWNlOl1dLCBub3QgWzpzcGFjZTpdCisgIGp3OiBUaGVyZSBpcyBubyBmcm9udGVuZCBjYWxsZWQgIi9kb2Nib29rL3V0aWxzLTAuNi4xNC9mcm9udGVuZHMvZG9jYm9vayIuCisKK1NlZSBhbHNvOgorCisgICA8aHR0cHM6Ly9xYS5tYW5kcml2YS5jb20vc2hvd19idWcuY2dpP2lkPTYxMTI3PgorCitTaWduZWQtb2ZmLWJ5OiBTdGVmZmVuIFNsZWR6IDxzbGVkekBkcmVzZWFyY2gtZmUuZGU+CisKK2RpZmYgLU51cmQgZG9jYm9vay11dGlscy0wLjYuMTQtb3JpZy9iaW4vancuaW4gZG9jYm9vay11dGlscy0wLjYuMTQvYmluL2p3LmluCistLS0gZG9jYm9vay11dGlscy0wLjYuMTQtb3JpZy9iaW4vancuaW4JMjAxMi0wMy0yOSAwNzo1MDowMC43ODk1NjQ4MjYgKzAyMDAKKysrKyBkb2Nib29rLXV0aWxzLTAuNi4xNC9iaW4vancuaW4JMjAxMi0wMy0yOSAwNzo1MjoxMC4zNzEzMDI5NjcgKzAyMDAKK0BAIC04MCw5ICs4MCw5IEBACisgU0dNTF9DQVRBTE9HU19ESVI9Ii9ldGMvc2dtbCIKKyBpZiBbIC1mICIkU0dNTF9DT05GIiBdCisgdGhlbgorLSAgUkU9J15bOnNwYWNlOl0qU0dNTF9CQVNFX0RJUls6c3BhY2U6XSo9WzpzcGFjZTpdKicKKysgIFJFPSdeW1s6c3BhY2U6XV0qU0dNTF9CQVNFX0RJUltbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSonCisgICBTR01MX0JBU0VfRElSPWBncmVwICRSRSAkU0dNTF9DT05GIHwgc2VkICJzLyRSRS8vImAKKy0gIFJFPSdeWzpzcGFjZTpdKlNHTUxfQ0FUQUxPR1NfRElSWzpzcGFjZTpdKj1bOnNwYWNlOl0qJworKyAgUkU9J15bWzpzcGFjZTpdXSpTR01MX0NBVEFMT0dTX0RJUltbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSonCisgICBTR01MX0NBVEFMT0dTX0RJUj1gZ3JlcCAkUkUgJFNHTUxfQ09ORiB8IHNlZCAicy8kUkUvLyJgCisgZmkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E1ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy1uYXRpdmVfMC42LjE0LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBmb3JtYXR0aW5nIGFuZCBtYW5pcHVsYXRpbmcgRG9jQm9vayBkb2N1bWVudHMiCitERVNDUklQVElPTiA9ICJBIGNvbGxlY3Rpb24gb2YgYWxsIHRoZSBmcmVlIHNvZnR3YXJlIHRvb2xzIHlvdSBuZWVkIHRvIFwKK3dvcmsgb24gYW5kIGZvcm1hdCBEb2NCb29rIGRvY3VtZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2RvY2Jvb2stdG9vbHMvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorREVQRU5EUyA9ICJvcGVuamFkZS1uYXRpdmUgc2dtbHNwbC1uYXRpdmUgZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmUgZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJcCisJZnRwOi8vc291cmNlcy5yZWRoYXQuY29tL3B1Yi9kb2Nib29rLXRvb2xzL25ldy10cmlhbHMvU09VUkNFUy9kb2Nib29rLXV0aWxzLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL3JlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiNDFiMThjMzY1YzAxZjIyNWJjNDE3Y2Y2MzJkODFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4ZmFhYjhlZThhNzYwNWM5MzQyZmI3YjkwNmUwODE1ZTNjZWU4NGE0ODkxODJhZjM4ZThmN2MwZGYyZTkyZTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIEZpeCBoYXJkLWNvZGVkIHJlZmVyZW5jZXMgdG8gL2V0Yy9zZ21sCisJaWYgWyAhIC1lICR7U30vLnNlZF9kb25lIF07IHRoZW4KKwkJc2VkIC1pIC1lICJzfC9ldGMvc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTfS9iaW4vancuaW4KKwkJc2VkIC1pIC1lICJzfC9ldGMvc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTfS9kb2MvbWFuL01ha2VmaWxlLmFtCisJCXNlZCAtaSAtZSAic3wvZXRjL3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U30vZG9jL0hUTUwvTWFrZWZpbGUuYW0KKworCQkjIFBvaW50IGp3IHRvIHRoZSBuYXRpdmUgc3lzcm9vdCBjYXRhbG9nCisJCXNlZCAtaSAtZSAnc3xeU0dNTF9FWFRSQV9DQVRBTE9HUz0iInxTR01MX0VYVFJBX0NBVEFMT0dTPSI6JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cifGcnICR7U30vYmluL2p3LmluCisJCXRvdWNoICR7U30vLnNlZF9kb25lCisJZmkKK30KK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIke1N9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCSMgSW5zdGFsbCB0aGUgYmluYXJpZXMgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgY29tbW9ubHkgdXNlZCBuYW1lcyBmb3IgdGhlbS4KKwlmb3IgZG9jdHlwZSBpbiBodG1sIHBzIGR2aSBtYW4gcGRmIHJ0ZiB0ZXggdGV4aSB0eHQKKwlkbworCQlpbnN0YWxsIC1tIDA3NTUgJHtTfS9iaW4vZG9jYm9vazIkZG9jdHlwZSAke0R9JHtiaW5kaXJ9LworCQlsbiAtc2YgZG9jYm9vazJ4LSRkb2N0eXBlICR7RH0ke2JpbmRpcn0vZGIyJGRvY3R5cGUKKwkJbG4gLXNmIGRvY2Jvb2syJGRvY3R5cGUgJHtEfSR7YmluZGlyfS9kYjIkZG9jdHlwZQorCQlsbiAtc2YgZG9jYm9vazIkZG9jdHlwZSAke0R9JHtiaW5kaXJ9L2RvY2Jvb2stdG8tJGRvY3R5cGUKKwlkb25lCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9iaW4vancgJHtEfSR7YmluZGlyfS8KKwlmb3IgaSBpbiBiYWNrZW5kcy9kdmkgYmFja2VuZHMvaHRtbCBcCisJCWJhY2tlbmRzL3BkZiBiYWNrZW5kcy9wcyBiYWNrZW5kcy9ydGYgYmFja2VuZHMvdGV4IFwKKwkJYmFja2VuZHMvdHh0IFwKKwkJaGVscGVycy9kb2Nib29rMm1hbi1zcGVjLnBsIGhlbHBlcnMvZG9jYm9vazJ0ZXhpLXNwZWMucGwgXAorCQlkb2Nib29rLXV0aWxzLmRzbAorCWRvCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9L2BkaXJuYW1lICRpYAorCQlpbnN0YWxsICR7U30vJGkgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9LyRpCisJZG9uZQorCWZvciBpIGluIGJhY2tlbmRzL21hbiBiYWNrZW5kcy90ZXhpIGZyb250ZW5kcy9kb2Nib29rCisJZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vYGRpcm5hbWUgJGlgCisJCWluc3RhbGwgJHtCfS8kaSAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vJGkKKwlkb25lCisKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTdmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTCkBAIC0wLDAgKzEsMTYgQEAKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAorYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCitpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0Citob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCithbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAord2FycmFudHkuCisKK0lmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAorcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCit0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yIAorY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCitpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3MDM2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaApAQCAtMCwwICsxLDUxNSBAQAorZG9jYm9vay14bWw6IHVwZGF0ZSBjYXRhbG9nLnhtbAorCitSZWZlciBVYnVudHUgMTMuMDQgdG8gdXBkYXRlIGNhdGFsb2cueG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jYm9vay00LjAvY2F0YWxvZy54bWwgICB8IDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbCB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBkb2Nib29rLTQuMi9jYXRhbG9nLnhtbCAgIHwgNjkgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjMvY2F0YWxvZy54bWwgICB8IDcyICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjQvY2F0YWxvZy54bWwgICB8IDYzICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjUvY2F0YWxvZy54bWwgICB8IDYzICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgMjQwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Nib29rLTQuMC9jYXRhbG9nLnhtbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sCisKK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMC9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4wL2NhdGFsb2cueG1sCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZG9jYm9vay00LjAvY2F0YWxvZy54bWwKK0BAIC0wLDAgKzEsNzIgQEAKKys8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iIAorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisrPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIFhNTCBDYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRmlsZSBjYXRhbG9nLnhtbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8IS0tIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgorKyAgICAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCisrICAgICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvLgorKyAgLS0+CisrCisrPCEtLSBUaGlzIGlzIHRoZSBjYXRhbG9nIGRhdGEgZmlsZSBmb3IgRG9jQm9vayBWNC4wLiBJdCBpcyBwcm92aWRlZCBhcworKyAgICAgYSBjb252ZW5pZW5jZSBpbiBidWlsZGluZyB5b3VyIG93biBjYXRhbG9nIGZpbGVzLiBZb3UgbmVlZCBub3QgdXNlCisrICAgICB0aGUgZmlsZW5hbWVzIGxpc3RlZCBoZXJlLCBhbmQgbmVlZCBub3QgdXNlIHRoZSBmaWxlbmFtZSBtZXRob2Qgb2YKKysgICAgIGlkZW50aWZ5aW5nIHN0b3JhZ2Ugb2JqZWN0cyBhdCBhbGwuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEb2NCb29rIERURC4KKysgICAgIFNlZSBYTUwgQ2F0YWxvZ3MgYXQgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS8gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBzdXBwbHlpbmcgYW5kIHVzaW5nIGNhdGFsb2cgZGF0YS4KKysgIC0tPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIERvY0Jvb2sgZHJpdmVyIGZpbGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQmsgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8IS0tIE90aGVyIHdheXMgdG8gcmVmZXIgdG8gRG9jQm9vayBYTUwgdjQuMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQm9vayBYTUwgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4wL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJub3RueC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIENoYXJhY3RlciBFbnRpdGllcyBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRicG9vbHgubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiaGllcngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiZ2VuZW50Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRFREIENBTFMgVGFibGUgTW9kZWwgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKysKKys8IS0tIFVOT0ZGSUNJQUwgY29udmVyc2lvbiBvZiB0aGUgZXhjaGFuZ2UgdGFibGUgbW9kZWwgdG8gWE1MLCBiYXNlZCBvbiB0aGUgT0FTSVMgRXhjaGFuZ2UgLS0+CisrPCEtLSAgICBUYWJsZSBNb2RlbCBQVUJMSUMgIi0vL1NHTUwgT3Blbi8vRFREIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwLy9FTiIgICAgICAgICAgIC0tPgorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4KKysKKys8IS0tIHRoZSBmb2xsb3dpbmcgRlBJIGlzIGRlY2xhcmVkIGZvciB0aGUgRFREIGluc2lkZSB0aGUgRFRELCBidXQgd2UnbGwgLS0+CisrPCEtLSB1c2UgdGhlIHZlcnNpb24gZnJvbSB0aGUgbGF0ZXN0IERvY0Jvb2sKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iCisrICAgICAgICB1cmk9InNvZXh0Ymx4LmR0ZCIvPiAtLT4KKysKKys8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwvY2F0YWxvZz4KK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwKK0BAIC0wLDAgKzEsNjYgQEAKKys8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iIAorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisrPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIFhNTCBDYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjEuMi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBGaWxlIGNhdGFsb2cueG1sIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwhLS0gUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yCisrICAgICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKKysgICAgIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy8uCisrICAtLT4KKysKKys8IS0tIFRoaXMgaXMgdGhlIGNhdGFsb2cgZGF0YSBmaWxlIGZvciBEb2NCb29rIFY0LjEuMi4gSXQgaXMgcHJvdmlkZWQgYXMKKysgICAgIGEgY29udmVuaWVuY2UgaW4gYnVpbGRpbmcgeW91ciBvd24gY2F0YWxvZyBmaWxlcy4gWW91IG5lZWQgbm90IHVzZQorKyAgICAgdGhlIGZpbGVuYW1lcyBsaXN0ZWQgaGVyZSwgYW5kIG5lZWQgbm90IHVzZSB0aGUgZmlsZW5hbWUgbWV0aG9kIG9mCisrICAgICBpZGVudGlmeWluZyBzdG9yYWdlIG9iamVjdHMgYXQgYWxsLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRG9jQm9vayBEVEQuCisrICAgICBTZWUgWE1MIENhdGFsb2dzIGF0IGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcGx5aW5nIGFuZCB1c2luZyBjYXRhbG9nIGRhdGEuCisrICAtLT4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIGRyaXZlciBmaWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xLjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImNhbHN0Ymx4LmR0ZCIvPgorKworKyAgPCEtLSBhbHJlYWR5IGluY2x1ZGVkIGluIGRvY2Jvb2sgNC4yCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJwb29seC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJoaWVyeC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJnZW5lbnQubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRibm90bngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisrCisrCisrPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4xLjIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwvY2F0YWxvZz4KK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4yL2NhdGFsb2cueG1sCistLS0gYS9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbAorKysrIGIvZG9jYm9vay00LjIvY2F0YWxvZy54bWwKK0BAIC0xLDQgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtMjUsNiArMjgsMTIgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKyAKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKK0BAIC00OSw2NiArNTgsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4yLy9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWRpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbnVtLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXRlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1sYXQxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc24uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYm94LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjMvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMy9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjMvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTI1LDEyICsyOCwyMSBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMy8vRU4iCisgICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorIAorKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjMvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjMvL0VOIgorICAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKyAKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuMy8vRU4iCisrICAgICAgICB1cmk9Imh0bWx0Ymx4Lm1vZCIvPgorKworIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIKKyAgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+CisgCitAQCAtNDksNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMy8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLW51bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXB1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby10ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWJveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjQvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHByZWZlcj0icHVibGljIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtNTgsNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNC8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2RpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3B1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3RlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuNCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjUvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuNS9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjUvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIgcHJlZmVyPSJwdWJsaWMiPgorIAorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KK0BAIC01OCw2NiArNjEsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC41Ly9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZGlhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb251bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvdGVjaC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrNC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNjLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zci5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2JveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjIuZW50Ii8+CistCisgPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZjU1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLnhtbApAQCAtMCwwICsxLDY4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBDQUxTIFRhYmxlIE1vZGVsIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAgWE1MIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjQvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjEvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCayBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMy9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCb29rIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuNS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4wL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC40L2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjMvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxYmMzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0XzQuNS5iYgpAQCAtMCwwICsxLDY0IEBACitTVU1NQVJZID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBYTUwgZGF0YSBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBYTUwgZGF0YSBcCitmaWxlcyBhZ2FpbnN0IHRoZSBEb2NCb29rIHJ1bGUgc2V0LCBpdCBzaGlwcyB3aXRoIHRoZSBsYXRlc3QgRG9jQm9vayA0LjUgXAorWE1MIERURCwgYXMgd2VsbCBhcyBhIHNlbGVjdGVkIHNldCBvZiBsZWdhY3kgRFREcyBmb3IgdXNlIHdpdGggb2xkZXIgXAorZG9jdW1lbnRzLCBpbmNsdWRpbmcgNC4wLCA0LjEuMiwgNC4yLCA0LjMgYW5kIDQuNCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcveG1sLyIKKworTElDRU5TRSA9ICJPQVNJUyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14bWwtdXBkYXRlLWNhdGFsb2cueG1sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steG1sLnhtbCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODdiNGQ0NGUxNWNmZmIxZjQwNDhhZjIzZjk4MjA4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMGY4ZWRjZjY5N2Y1MzE4ZTYzZGQ5OGM5YTkzMWYzZmVlMTY3YWYwODA1YmE0NDFkYjM3MmUwZjE3YjJhNDRmIgorCitTPSIke1dPUktESVJ9L2RvY2Jvb2steG1sLTQuNS5jMzE0MjQiCisKK2luaGVyaXQgYWxsYXJjaAorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194bWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3htbF9kdGRfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkb19jb25maWdyZSAoKXsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGUgKCl7CisgICAgOgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICAjIFJlZmVyIGRlYmlhbiBodHRwczovL3BhY2thZ2VzLmRlYmlhbi5vcmcvc2lkL2FsbC9kb2Nib29rLXhtbC9maWxlbGlzdAorICAgIGZvciBEVERWRVJTSU9OIGluIDQuMCA0LjEuMiA0LjIgNC4zIDQuNCA0LjU7IGRvCisgICAgICAgIGluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3NjaGVtYS9kdGQvJHtEVERWRVJTSU9OfQorICAgICAgICBjcCAtdiAtUiBkb2Nib29rLSR7RFREVkVSU0lPTn0vKiAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLyR7RFREVkVSU0lPTn0KKyAgICBkb25lCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKyAgICBpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9kb2Nib29rLXhtbC54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbAorfQorCitkb2Nib29rX3htbF9kdGRfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKyAgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisgICAgdGhlbgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorICAgICAgICAjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisgICAgICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vLiovdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14bWwueG1sCisgICAgZmkKK30KKworZG9jYm9va194bWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgIyBVcGRhdGUgdGhlIGhhcmRjb2RlIGRpciBpbiBkb2Nib29rLXhtbC54bWwKKyAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwKK30KKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS8qICR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1OWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzOiBubyBiYXNoaXNtIGluIGRvY2Jvb2steHNsLXVwZGF0ZQorCitUaGUgY2hlY2tiYXNoaXNtcyBzaG93cyB0aGVyZSBpcyBubyBiYXNoaXNtLCBzbyB1c2UgL2Jpbi9zaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUgYi90b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlCitpbmRleCBhYmEwMDE2Li5jYzczYWEyIDEwMDc1NQorLS0tIGEvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQorKysrIGIvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAjIHZpbTogbnVtYmVyCisgCisgIyBkb2Nib29rLXhzbC11cGRhdGUgLSBVcGRhdGUgZW52aXJvbm1lbnQgdG8gbGF0ZXN0IGRvY2Jvb2steHNsIHNuYXBzaG90CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTU3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKzxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9jYXRhbG9nLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvY2F0YWxvZy54bWwiLz4KKzwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMWJkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCkBAIC0wLDAgKzEsNjkgQEAKK1NVTU1BUlkgPSAiWFNMIHN0eWxlc2hlZXRzIGZvciBwcm9jZXNzaW5nIERvY0Jvb2sgWE1MIHRvIHZhcmlvdXMgb3V0cHV0IGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQiCitMSUNFTlNFID0gIlhTTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2ZWVlZWQ0M2Q0OThjMjJhODM1MzgyNTMzMzU2NDYyIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2Nib29rL2RvY2Jvb2steHNsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14c2wueG1sIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmRkMGY4OTEzMWNjMzViZjRmMmVkMTA1YTFjMTc3NzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk4ZjcyOTZhYjVjOGNjZDJlMGJjMDc2MzQ5NzZhMzdmNTA4NDdkZjJkOGE1OWJkYjFlMTU3NjY0NzAwYjQ2NyIKKworUyA9ICIke1dPUktESVJ9L2RvY2Jvb2steHNsLSR7UFZ9IgorCitpbmhlcml0IGFsbGFyY2gKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCl7CisJOgorfQorCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay14c2wuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtdiAtbTc1NSAtZCAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xCisKKwljcCAtdiAtUiBWRVJTSU9OIGNvbW1vbiBlY2xpcHNlIGVwdWIgZXh0ZW5zaW9ucyBmbyBoaWdobGlnaHRpbmcgaHRtbCBcCisJCWh0bWxoZWxwIGltYWdlcyBqYXZhaGVscCBsaWIgbWFucGFnZXMgcGFyYW1zIHByb2ZpbGluZyBcCisJCXJvdW5kdHJpcCBzbGlkZXMgdGVtcGxhdGUgdGVzdHMgdG9vbHMgd2ViaGVscCB3ZWJzaXRlIFwKKwkJeGh0bWwgeGh0bWwtMV8xIGNhdGFsb2cueG1sIFwKKwkke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xCisKKwlsbiAtcyBWRVJTSU9OICR7RH0vJHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL1ZFUlNJT04ueHNsCisKKwlpbnN0YWxsIC12IC1tNjQ0IC1EIFJFQURNRSBcCisJCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0xLjc4LjEvUkVBRE1FLnR4dAorCWluc3RhbGwgLXYgLW02NDQgICAgUkVMRUFTRS1OT1RFUyogTkVXUyogXAorCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtMS43OC4xCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKwlpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9kb2Nib29rLXhzbC54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorCit9CisKK2RvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisgICAgaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorICAgIHRoZW4KKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKyAgICAgICAgIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorICAgICAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy4qL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorICAgIGZpCit9CisKK2RvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgIyBVcGRhdGUgdGhlIGhhcmRjb2RlIGRpciBpbiBkb2Nib29rLXhtbC54bWwKKyAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKK30KKworUkRFUEVORFNfJHtQTn0gKz0gInBlcmwiCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L3htbC8qICR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbCIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RhdGFkaXJ9L2RvYy8qIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNWI3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBiN2M0MmM2YTk4MjliZWE5MTFiMjIyMDFlZGQ3ZGYyYTliZWMxYTE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6NTI6MzQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBmY250bC5oIGZvciBnZXR0aW5nIGxvZmZfdCBkZWZpbml0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZG9zZnNjay9kb3Nmc2NrLmggfCAyICsrCisgZG9zZnNjay9sZm4uYyAgICAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZG9zZnNjay9kb3Nmc2NrLmggYi9kb3Nmc2NrL2Rvc2ZzY2suaAoraW5kZXggZDkzMTRiMS4uMjA3NmQ1ZiAxMDA2NDQKKy0tLSBhL2Rvc2ZzY2svZG9zZnNjay5oCisrKysgYi9kb3Nmc2NrL2Rvc2ZzY2suaAorQEAgLTUwLDYgKzUwLDggQEAKKyAjZGVmaW5lIENUX0xFX0wodikgKHYpCisgI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLworIAorKyNpbmNsdWRlIDxmY250bC5oPgorKworICNkZWZpbmUgVkZBVF9MTl9BVFRSIChBVFRSX1JPIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZUyB8IEFUVFJfVk9MVU1FKQorIAorIC8qICsrcm9tYW46IFVzZSBvd24gZGVmaW5pdGlvbiBvZiBib290IHNlY3RvciBzdHJ1Y3R1cmUgLS0gdGhlIGtlcm5lbCBoZWFkZXJzJworZGlmZiAtLWdpdCBhL2Rvc2ZzY2svbGZuLmMgYi9kb3Nmc2NrL2xmbi5jCitpbmRleCA5YjJjZmMzLi5iYjA0ZmRhIDEwMDY0NAorLS0tIGEvZG9zZnNjay9sZm4uYworKysrIGIvZG9zZnNjay9sZm4uYworQEAgLTcsNiArNyw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorIAorICNpbmNsdWRlICJjb21tb24uaCIKKyAjaW5jbHVkZSAiaW8uaCIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2YjJkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVGhlIHByb2JsZW0gaXMgdGhhdCB1bnNpZ25lZCBjaGFyWzJdIGlzCitndXJhbnRlZWQgdG8gYmUgOEJpdCBhbGlnbmVkIG9uIGFybQorYnV0IHVuc2lnbmVkIHNob3J0IGlzL25lZWRzIHRvIGJlIDE2Yml0IGFsaWduZWQKK3RoZSB1bmlvbiB7IHVuc2lnbmVkIHNob3J0OyB1bnNpZ25lZCBjaGFyWzJdIH0gdHJpY2sgCitkaWRuJ3Qgd29yayBzbyBubyB3ZSB1c2UgdGhlIGFscGhhIGhhY2suCisKK21lbWNweSBpbnRvIGFuIDE2Yml0IGFsaWduZWQKKworICAgIC16ZWNrZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy9kb3Nmc2NrL2Jvb3QuYy5vcmlnCTIwMDMtMDUtMTUgMTk6MzI6MjMuMDAwMDAwMDAwICswMjAwCisrKysgZG9zZnN0b29scy9kb3Nmc2NrL2Jvb3QuYwkyMDAzLTA2LTEzIDE3OjQ0OjI1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM2LDE3ICszNiwxNSBAQAorICAgICB7IDB4ZmYsICI1LjI1XCIgMzIwayBmbG9wcHkgMnMvNDB0ci84c2VjIiB9LAorIH07CisgCistI2lmIGRlZmluZWQgX19hbHBoYSB8fCBkZWZpbmVkIF9faWE2NF9fIHx8IGRlZmluZWQgX19zMzkweF9fIHx8IGRlZmluZWQgX194ODZfNjRfXyB8fCBkZWZpbmVkIF9fcHBjNjRfXworKworIC8qIFVuYWxpZ25lZCBmaWVsZHMgbXVzdCBmaXJzdCBiZSBjb3BpZWQgYnl0ZS13aXNlICovCisgI2RlZmluZSBHRVRfVU5BTElHTkVEX1coZikJCQlcCisgICAgICh7CQkJCQkJXAorIAl1bnNpZ25lZCBzaG9ydCBfX3Y7CQkJXAorIAltZW1jcHkoICZfX3YsICZmLCBzaXplb2YoX192KSApOwlcCistCUNGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmZiApOwlcCisrCUNGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmX192ICk7CVwKKyAgICAgfSkKKy0jZWxzZQorLSNkZWZpbmUgR0VUX1VOQUxJR05FRF9XKGYpIENGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmZiApCistI2VuZGlmCisrCisgCisgCisgc3RhdGljIGNoYXIgKmdldF9tZWRpYV9kZXNjciggdW5zaWduZWQgY2hhciBtZWRpYSApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhYmQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy1tc2Rvc19mcy10eXBlcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitFbnN1cmUgdGhlIF9fczggdHlwZSBpcyBwcm9wZXJseSBkZWZpbmVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZG9zZnNjay5oLm9yZwkyMDA2LTAyLTIxIDA4OjM2OjE0LjAwMDAwMDAwMCAtMDcwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Rvc2ZzY2suaAkyMDA2LTAyLTIxIDA4OjQwOjEyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTIyLDYgKzIyLDE0IEBACisgICAgICAgICN1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCisrI2lmbmRlZiBfX3M4CisrI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorKyNlbmRpZgorKworKyNpZm5kZWYgX19BU01fU1RVQl9CWVRFT1JERVJfSF9fCisrI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KKyAKKyAvKiAyLjEga2VybmVscyB1c2UgbGUxNl90b19jcHUoKSB0eXBlIGZ1bmN0aW9ucyBmb3IgQ0ZfTEVfVyAmIENvLiwgYnV0IGRvbid0CistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZmlsZS5jLm9yZwkyMDA2LTAyLTIxIDA4OjM3OjM2LjAwMDAwMDAwMCAtMDcwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2ZpbGUuYwkyMDA2LTAyLTIxIDA4OjM3OjQ3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTIzLDYgKzIzLDEwIEBACisgICAgICAgICN1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCisrI2lmbmRlZiBfX3M4CisrI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxsaW51eC9tc2Rvc19mcy5oPgorIAorICNpbmNsdWRlICJjb21tb24uaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdmNzMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9maXhfcG9wdWxhdGVkX2Rvc2ZzX2NyZWF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDg5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworVGhpcyBwYXRjaCBmaXhlcyBwb3B1bGF0ZWQgZG9zZnMgaW1hZ2UgY3JlYXRpb24gd2l0aCBkaXJlY3RvcnkgCitzdHJ1Y3R1cmVzLiBFYXJsaWVyIGl0IHdhcyBjYXVzaW5nIHNlZ2ZhdWx0OyBhbmQgb25seSBpbWFnZSAKK3BvcHVsYXRpb24gd2l0aCBubyBzdWJkaXJlY3RvcmllcyB3YXMgd29ya2luZy4KKworSXNzdWVzIGZpeGVkOgorMS4gKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSBjaGVjayB3YXMgb25seSBuZWVkZWQgZm9yIHJvb3QgCisgICBkaXJlY3RvcnkgZW50cmllcy4gQW5kIHRoaXMgY2hlY2sgaXMgd3JvbmcgZm9yIG5vbi1yb290IAorICAgZGlyZWN0b3JpZXMuCisyLiBGb3IgZWFjaCBkaXIgZW50cnkgMiBkaXItPnRhYmxlIGVudHJpZXMgd2VyZSBuZWVkZWQsIG9uZSBmb3IgCisgICB0aGUgZmlsZS9kaXIgYW5kIDJuZCBmb3IgbG9uZyBmaWxlIG5hbWUgc3VwcG9ydC4gRWFybGllciBsb25nCisgICBuYW1lIHN1cHBvcnQgd2FzIGFkZGVkIGZvciBmaWxlbmFtZXMgYnV0IHRoZSAybmQgZW50cnkgCisgICBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiAmIGNvdW50aW5nIHdhcyBtaXNzZWQuCiszLiBUaGUgbWVtb3J5IGNsZWFyaW5nIHdhcyBtaXNzZWQgYXQgdGhlIGNvZGUgcGF0aCBhZnRlciBkaXItPnRhYmxlIAorICAgbWVtcm95IGFsbG9jYXRpb24uCis0LiBBZGQgZW50cmllcyBmb3IgLiAmIC4uIGRpcmVjdG9yaWVzIGluIGFsbCBub24tcm9vdCBkaXJlY3Rvcmllcy4KKzUuIFRoZSAuIGRpcmVjdG9yeSBwb2ludHMgdG8gdGhlIGNvcnJlY3QgZW50cnkgaW4gZmF0IG5vdy4KKzYuIEFsbCBkaXJlY3Rvcml5IGVudHJpZXMnIHNpemUgd2FzIG5vdCB6ZXJvIGFzIHJlcXVpcmVkIGZvciBkb3Nmc2NrLAorICAgTm93IGFsbCBkaXJlY3RvcnkgZW50cmllcycgc2l6ZSBpcyB6ZXJvLgorCitFbmhhbmNlbWVudHM6CisxLiBBZGRlZCBzdXBwb3J0IGZvciBsb25nIG5hbWVzIGZvciBkaXJlY3RvcnkgbmFtZXMuIFRoaXMgaXMgc2FtZQorICAgYXMgdGhlIGV4aXN0aW5nIGxvbmcgbmFtZSBzdXBwb3J0IGZvciBmaWxlbmFtZXMuCisyLiBBZGRlZCBlcnJvciBtZXNzYWdlcyBmb3IgcHJldmlvdXNseSBzaWxlbnQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIAorICAgb3RoZXIgZXJyb3JzLgorMy4gLWQgb3B0aW9ucyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSB3aXRoIGZhdDMyLCBzbyBub3cgdGhyb3dpbmcgCisgICBhbiBlcnJvciBmb3IgdGhhdC4KKzQuIFVzZSBwcmVkZWZpbmVkIHN0cnVjdHVyZXMgZnJvbSBrZXJuZWwncyBtc2Rvc19mcy5oIGZpbGUsIHJhdGhlciAKKyAgIHRoYW4gZGVmaW5pbmcgYWdhaW4gaGVyZS4gQW5kIGFjY29yZGluZ2x5IGNoYW5nZSB0aGUgbmFtZXMgJiB1c2UKKyAgIG9mIHN0cnVjdHVyZSB2YXJpYWJsZXMuCisKK091dHN0YW5kaW5nIElzc3VlczoKKzEuIFRoZSAuLiBkaXJlY3RvcnkgZW50cnkgZG8gbm90IHBvaW50IHRvIHRoZSBwYXJlbnQgb2YgY3VycmVudAorICAgZGlyZWN0b3J5LiBUaGlzIGlzc3VlIGNhbiBiZSBmaXhlZCBieSBydW5uaW5nIGRvc2ZzY2sgLWEgYWZ0ZXIKKyAgIGltYWdlIGNyZWF0aW9uLgorMi4gRm9yIGZpbGVzIHRoZSBmaWxlc2l6ZSBpcyBjb3JyZWN0LCBidXQgdGhlIGNsdXN0ZXJzIHNpemUgaXMgbW9yZSAKKyAgIHRoYW4gaXQgbmVlZHMgdG8gYmUsIHRoaXMgYWxzbyBjYW4gYmUgZml4ZWQgYnkgcnVubmluZyBkb3Nmc2NrIC1hCisgICBhZnRlciBpbWFnZSBjcmVhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gCisyMDExLzEyLzEzCisKKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCitAQCAtMjEsNyArMjEsMTcgQEAKKyAgICBKdW5lIDIwMDQgLSBKb3JkYW4gQ3JvdXNlIChpbmZvLmxpbnV4QGFtZC5jb20pCisgICAgQWRkZWQgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0gICAKKysKKysgICAyMDExLTEyLTEzOiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorKyAgIEVuaGFuY2VkIHRoZSAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IGZvciBwb3B1bGF0aW9uIG9mIGltYWdlIHdoaWxlCisrICAgY3JlYXRpb24uIEVhcmxpZXIgc3ViZGlyZWN0b3JlcyBzdXBwb3J0IHdhcyBicm9rZW4sIG9ubHkgZmlsZXMgaW4KKysgICB0aGUgcm9vdGRpciB3ZXJlIHN1cHBvcnRlZC4gTm93IGRpcmVjdG9yeSBoaXJhcmNoeSBpcyBzdXBwb3J0ZWQuCisrICAgQWxzbyBhZGRlZCBsb25nIGZpbGVuYW1lIHN1cHBvcnQgdG8gZGlyZWN0b3J5IG5hbWVzLgorKyAgICAgVGhlIC1kIDxkaXJlY3Rvcnk+IG9wdGlvbiAoaW1hZ2UgcG9wdWxhdGlvbiB3aGlsZSBjcmVhdGlvbikKKysgICBpcyBicm9rZW4gd2l0aCBmYXQzMi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLCBBbGwgUmlnaHRzIFJlc2VydmVkCisrCisrCisgICAgRml4ZXMvYWRkaXRpb25zIE1heSAxOTk4IGJ5IFJvbWFuIEhvZGVrCisgICAgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPjoKKyAgICAtIEF0YXJpIGZvcm1hdCBzdXBwb3J0CitAQCAtODYsMjMgKzk2LDIzIEBACisgIyB1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCistI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKy0KKysjaWZuZGVmIF9fQVNNX1NUVUJfQllURU9SREVSX0hfXworICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CistI2lmZGVmIF9fbGUxNl90b19jcHUKKy0vKiArK3JvbWFuOiAyLjEga2VybmVsIGhlYWRlcnMgZGVmaW5lIHRoZXNlIGZ1bmN0aW9uLCB0aGV5J3JlIHByb2JhYmx5IG1vcmUKKy0gKiBlZmZpY2llbnQgdGhlbiBjb2RpbmcgdGhlIHN3YXBzIG1hY2hpbmUtaW5kZXBlbmRlbnRseS4gKi8KKy0jZGVmaW5lIENGX0xFX1cJX19sZTE2X3RvX2NwdQorLSNkZWZpbmUgQ0ZfTEVfTAlfX2xlMzJfdG9fY3B1CistI2RlZmluZSBDVF9MRV9XCV9fY3B1X3RvX2xlMTYKKy0jZGVmaW5lIENUX0xFX0wJX19jcHVfdG9fbGUzMgorLSNlbHNlCistI2RlZmluZSBDRl9MRV9XKHYpICgoKCh2KSAmIDB4ZmYpIDw8IDgpIHwgKCgodikgPj4gOCkgJiAweGZmKSkKKy0jZGVmaW5lIENGX0xFX0wodikgKCgodW5zaWduZWQpKHYpPj4yNCkgfCAoKCh1bnNpZ25lZCkodik+PjgpJjB4ZmYwMCkgfCBcCistICAgICAgICAgICAgICAgKCgodW5zaWduZWQpKHYpPDw4KSYweGZmMDAwMCkgfCAoKHVuc2lnbmVkKSh2KTw8MjQpKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsaW51eC9tc2Rvc19mcy5oPgorKworKyN1bmRlZiBDRl9MRV9XCisrI3VuZGVmIENGX0xFX0wKKysjdW5kZWYgQ1RfTEVfVworKyN1bmRlZiBDVF9MRV9MCisrCisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjZGVmaW5lIENGX0xFX1codikgYnN3YXBfMTYodikKKysjZGVmaW5lIENGX0xFX0wodikgYnN3YXBfMzIodikKKyAjZGVmaW5lIENUX0xFX1codikgQ0ZfTEVfVyh2KQorICNkZWZpbmUgQ1RfTEVfTCh2KSBDRl9MRV9MKHYpCistI2VuZGlmIC8qIGRlZmluZWQoX19sZTE2X3RvX2NwdSkgKi8KKyAgICAgCisgI2Vsc2UKKyAKK0BAIC0yNTMsMzMgKzI2Myw2IEBAIHN0cnVjdCBmYXQzMl9mc2luZm8geworICAgX191MzIJCXJlc2VydmVkMls0XTsKKyB9OworIAorLS8qIFRoaXMgc3RvcmVzIHVwIHRvIDEzIGNoYXJzIG9mIHRoZSBuYW1lICovCistCistc3RydWN0IG1zZG9zX2Rpcl9zbG90IHsKKy0gICAgICAgIF9fdTggICAgaWQ7ICAgICAgICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciBmb3Igc2xvdCAqLworLSAgICAgICAgX191OCAgICBuYW1lMF80WzEwXTsgICAgLyogZmlyc3QgNSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKy0gICAgICAgIF9fdTggICAgYXR0cjsgICAgICAgICAgIC8qIGF0dHJpYnV0ZSBieXRlICovCistICAgICAgICBfX3U4ICAgIHJlc2VydmVkOyAgICAgICAvKiBhbHdheXMgMCAqLworLSAgICAgICAgX191OCAgICBhbGlhc19jaGVja3N1bTsgLyogY2hlY2tzdW0gZm9yIDguMyBhbGlhcyAqLworLSAgICAgICAgX191OCAgICBuYW1lNV8xMFsxMl07ICAgLyogNiBtb3JlIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworLSAgICAgICAgX191MTYgICBzdGFydDsgICAgICAgICAgLyogc3RhcnRpbmcgY2x1c3RlciBudW1iZXIsIDAgaW4gbG9uZyBzbG90cyAqLworLSAgICAgICAgX191OCAgICBuYW1lMTFfMTJbNF07ICAgLyogbGFzdCAyIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworLX07CistCistc3RydWN0IG1zZG9zX2Rpcl9lbnRyeQorLSAgeworLSAgICBjaGFyCW5hbWVbOF0sIGV4dFszXTsJLyogbmFtZSBhbmQgZXh0ZW5zaW9uICovCistICAgIF9fdTggICAgICAgIGF0dHI7CQkJLyogYXR0cmlidXRlIGJpdHMgKi8KKy0gICAgX191OAlsY2FzZTsJCQkvKiBDYXNlIGZvciBiYXNlIGFuZCBleHRlbnNpb24gKi8KKy0gICAgX191OAljdGltZV9tczsJCS8qIENyZWF0aW9uIHRpbWUsIG1pbGxpc2Vjb25kcyAqLworLSAgICBfX3UxNgljdGltZTsJCQkvKiBDcmVhdGlvbiB0aW1lICovCistICAgIF9fdTE2CWNkYXRlOwkJCS8qIENyZWF0aW9uIGRhdGUgKi8KKy0gICAgX191MTYJYWRhdGU7CQkJLyogTGFzdCBhY2Nlc3MgZGF0ZSAqLworLSAgICBfX3UxNglzdGFydGhpOwkJLyogaGlnaCAxNiBiaXRzIG9mIGZpcnN0IGNsLiAoRkFUMzIpICovCistICAgIF9fdTE2CXRpbWUsIGRhdGUsIHN0YXJ0OwkvKiB0aW1lLCBkYXRlIGFuZCBmaXJzdCBjbHVzdGVyICovCistICAgIF9fdTMyCXNpemU7CQkJLyogZmlsZSBzaXplIChpbiBieXRlcykgKi8KKy0gIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLQorIC8qIFRoZSAiYm9vdCBjb2RlIiB3ZSBwdXQgaW50byB0aGUgZmlsZXN5c3RlbS4uLiBpdCB3cml0ZXMgYSBtZXNzYWdlIGFuZAorICAgIHRlbGxzIHRoZSB1c2VyIHRvIHRyeSBhZ2FpbiAqLworIAorQEAgLTM1Niw3ICszMzksNiBAQCBzdGF0aWMgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqcm9vdF9kaXI7Cisgc3RhdGljIGludCBzaXplX3Jvb3RfZGlyOwkvKiBTaXplIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbiBieXRlcyAqLworIHN0YXRpYyBpbnQgc2VjdG9yc19wZXJfY2x1c3RlciA9IDA7CS8qIE51bWJlciBvZiBzZWN0b3JzIHBlciBkaXNrIGNsdXN0ZXIgKi8KKyBzdGF0aWMgaW50IHJvb3RfZGlyX2VudHJpZXMgPSAwOwkvKiBOdW1iZXIgb2Ygcm9vdCBkaXJlY3RvcnkgZW50cmllcyAqLworLXN0YXRpYyBpbnQgcm9vdF9kaXJfbnVtX2VudHJpZXMgPSAwOworIHN0YXRpYyBpbnQgbGFzdF9jbHVzdGVyX3dyaXR0ZW4gPSAwOworIAorIHN0YXRpYyBjaGFyICpibGFua19zZWN0b3I7CQkvKiBCbGFuayBzZWN0b3IgLSBhbGwgemVyb3MgKi8KK0BAIC0xMzE1LDcgKzEyOTcsNyBAQCBzZXR1cF90YWJsZXMgKHZvaWQpCisgICAgICAgZGUtPmRhdGUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoY3RpbWUtPnRtX21kYXkgKworIAkJCQkJICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworIAkJCQkJICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworLSAgICAgIGRlLT5jdGltZV9tcyA9IDA7CisrICAgICAgZGUtPmN0aW1lX2NzID0gMDsKKyAgICAgICBkZS0+Y3RpbWUgPSBkZS0+dGltZTsKKyAgICAgICBkZS0+Y2RhdGUgPSBkZS0+ZGF0ZTsKKyAgICAgICBkZS0+YWRhdGUgPSBkZS0+ZGF0ZTsKK0BAIC0xNDUxLDE2ICsxNDMzLDIzIEBAIHdyaXRlX3RhYmxlcyAodm9pZCkKKyAKKyAvKiBBZGQgYSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgYWxzbyB3cml0ZSBpdCBpbnRvIHRoZSBpbWFnZSAqLworIAorLXN0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmJhc2UsIGNoYXIgKmV4dCkgeworK3N0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmRvc19uYW1lKSB7CisgICAKKyAgIGNoYXIgKmNoID0gZmlsZW5hbWU7CisgICBpbnQgaSwgbGVuOworIAorLSAgbWVtc2V0KGJhc2UsIDB4MjAsIDgpOworLSAgbWVtc2V0KGV4dCwgMHgyMCwgMyk7CisrICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgIi4iKSkgeworKyAgICBzdHJuY3B5KGRvc19uYW1lLCBNU0RPU19ET1QsIE1TRE9TX05BTUUpOworKyAgICByZXR1cm47CisrICB9CisrICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgIi4uIikpIHsKKysgICAgc3RybmNweShkb3NfbmFtZSwgTVNET1NfRE9URE9ULCBNU0RPU19OQU1FKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgbWVtc2V0KGRvc19uYW1lLCAweDIwLCBNU0RPU19OQU1FKTsKKyAgIAorICAgZm9yKGxlbiA9IDAgOyAqY2ggJiYgKmNoICE9ICcuJzsgY2grKykgeworLSAgICBiYXNlW2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgZG9zX25hbWVbbGVuKytdID0gdG91cHBlcigqY2gpOworICAgICBpZiAobGVuID09IDgpIGJyZWFrOworICAgfQorICAgCitAQCAtMTQ2OCw3ICsxNDU3LDcgQEAgc3RhdGljIHZvaWQgY29weV9maWxlbmFtZShjaGFyICpmaWxlbmFtZQorICAgaWYgKCpjaCkgY2grKzsKKyAgIAorICAgZm9yKGxlbiA9IDAgOyAqY2g7IGNoKyspIHsKKy0gICAgZXh0W2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgZG9zX25hbWVbOCArIGxlbisrXSA9IHRvdXBwZXIoKmNoKTsKKyAgICAgaWYgKGxlbiA9PSAzKSBicmVhazsKKyAgIH0KKyB9CitAQCAtMTU1MSw3ICsxNTQwLDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgaW50IHN0YXJ0OworICAgaW50IHVzZWRzZWMsIHRvdGFsc2VjOworIAorLSAgY2hhciBuYW1lODNbOF0sIGV4dDgzWzNdOworKyAgY2hhciBkb3NfbmFtZVtNU0RPU19OQU1FKzFdOworIAorICAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworICAgaW50IGk7CitAQCAtMTU2MiwyMyArMTU1MSwyMiBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICBpZiAoZGlyLT5yb290KSB7CisgICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworICAgICAgIHByaW50ZigiRXJyb3IgLSB0b28gbWFueSBkaXJlY3RvcnkgZW50cmllc1xuIik7CisrICAgICAgcmV0dXJuOworICAgICB9CisgICB9CisgICBlbHNlIHsKKy0gICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CistICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKy0JZGlyLT50YWJsZSA9IAorLQkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIGVsc2UgeworLQlkaXItPnRhYmxlID0gCistCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKy0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0KKy0JbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistICAgICAgfQorLQorLSAgICAgIGRpci0+ZW50cmllcysrOworLSAgICB9CisrICAgIC8qIDIgZW50cmllcywgb25lIGV4dHJhIGZvciBsb25nIGZpbGVuYW1lICovCisrICAgIGlmICghZGlyLT50YWJsZSkKKysgICAgICBkaXItPnRhYmxlID0KKysgICAgICAgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYygyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZWxzZQorKyAgICAgIGRpci0+dGFibGUgPQorKyAgICAgICAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAyICogKGRpci0+ZW50cmllcyArIDEpICoKKysgICAgICAJCQkJICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgcHJpbnRmKCJFcnJvciAtIHJlYWxsb2MgZmFpbGVkXG4iKTsKKysgICAgbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBkaXItPmVudHJpZXMgKz0gMjsKKyAgIH0KKyAKKyAgIGluZmlsZSA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZLCAwKTsKK0BAIC0xNjExLDEzICsxNTk5LDEzIEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgICAgcmV0dXJuIC0xOworICAgfQorIAorLSAgcHJpbnRmKCJBREQgJXNcbiIsIGZpbGVuYW1lKTsKKysgIHByaW50ZigiQUREIEZJTEUgJXNcbiIsIGZpbGVuYW1lKTsKKyAKKyAgIC8qIEdyYWIgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICovCisgICBiYXNlID0gYmFzZW5hbWUoZmlsZW5hbWUpOworICAgCistICAvKiBFeHRyYWN0IG91dCB0aGUgOC4zIG5hbWUgKi8KKy0gIGNvcHlfZmlsZW5hbWUoYmFzZSwgbmFtZTgzLCBleHQ4Myk7CisrICAvKiBjb252ZXJ0IGZvciBkb3MgZmF0IHN0cnVjdHVyZSAgKi8KKysgIGNvcHlfZmlsZW5hbWUoYmFzZSwgZG9zX25hbWUpOworIAorICAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKyAKK0BAIC0xNjI5LDEyICsxNjE3LDkgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgCisgICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisgICAKKy0gIGZvcihpID0gMDsgaSA8IDg7IGkrKykgCistICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIG5hbWU4M1tpXTsKKysgIGZvcihpID0gMDsgaSA8IE1TRE9TX05BTUU7IGkrKykKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZG9zX25hbWVbaV07CisgICAKKy0gIGZvcihpID0gMDsgaSA8IDM7IGkrKykgCistICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIGV4dDgzW2ldOworLQorICAgcCA9IGJhc2U7CisgCisgICBjb3B5X25hbWUoc2xvdC0+bmFtZTBfNCwgMTAsICZwKTsKK0BAIC0xNjQ1LDggKzE2MzAsNyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisgICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisgCistICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBuYW1lODMsIDgpOworLSAgc3RybmNweShlbnRyeS0+ZXh0LCBleHQ4MywgMyk7CisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBkb3NfbmFtZSwgTVNET1NfTkFNRSk7CisgCisgCisgICAvKiBJZiB0aGUgdXNlciBoYXMgaXQgcmVhZCBvbmx5LCB0aGVuIGFkZCByZWFkIG9ubHkgdG8gdGhlIGluY29taW5nCitAQCAtMTY2NSw3ICsxNjQ5LDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorIAkJCQkgICAgICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworIAkJCQkgICAgICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworIAorLSAgZW50cnktPmN0aW1lX21zID0gMDsKKysgIGVudHJ5LT5jdGltZV9jcyA9IDA7CisgICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKyAgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworICAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CitAQCAtMTcxMSw2ICsxNjk1LDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorIAorICBleGl0X2FkZDoKKyAgIGlmIChpbmZpbGUpIGNsb3NlKGluZmlsZSk7CisrICByZXR1cm4gMDsKKyB9CisgCisgLyogQWRkIGEgbmV3IGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGluIHR1cm4gcG9wdWxhdGUgCitAQCAtMTcyNywxMCArMTcxMiwxOCBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgICBzdHJ1Y3QgZGlyZW50ICpkZW50cnkgPSAwOworICAgaW50IHJlbWFpbjsKKyAgIGNoYXIgKmRhdGE7CisrICBjaGFyICpiYXNlOworKyAgY2hhciBkb3NfbmFtZVtNU0RPU19OQU1FKzFdOworKyAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworKyAgaW50IGk7CisrICBjaGFyICpwOworIAorICAgLyogSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ICovCistICBpZiAoIXJkZGlyKSByZXR1cm47CistICAKKysgIGlmICghcmRkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGRpciBkb2VzIG5vdCBleGlzdDogJXNcbiIsIGZpbGVuYW1lKTsKKysgICAgcmV0dXJuOworKyAgfQorKworICAgaWYgKGRpci0+cm9vdCkgeworICAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKyAgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworQEAgLTE3MzgsMjggKzE3MzEsNTggQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorICAgICB9CisgICB9CisgICBlbHNlIHsKKy0gICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CistICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKy0JZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIGVsc2UgeworLQlkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKy0JCQkJCQkJc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0KKy0JLyogWmVybyBpdCBvdXQgdG8gYXZvaWQgaXNzdWVzICovCistCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIH0KKy0JZGlyLT5lbnRyaWVzKys7CisrICAgIC8qIDIgZW50cmllcywgb25lIGV4dHJhIGZvciBsb25nIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSAqLworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYygyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZWxzZQorKyAgICAgIGRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIDIgKiAoZGlyLT5lbnRyaWVzICsgMSkgKgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBpZiAoIWRpci0+dGFibGUpIHsKKysgICAgICBwcmludGYoIkVycm9yIC0gbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKysgICAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKyAgICAgfQorKyAgICAvKiBaZXJvIGl0IG91dCB0byBhdm9pZCBpc3N1ZXMgKi8KKysgICAgbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBkaXItPmVudHJpZXMgKz0gMjsKKyAgIH0KKyAKKysgIHByaW50ZigiQUREIERJUiAlc1xuIiwgZmlsZW5hbWUpOworICAgLyogTm93LCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUgbmV3IGRpcmVjdG9yeSAqLworICAgbmV3ZGlyID0gKHN0cnVjdCBkaXJfZW50cnkgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CistICBpZiAoIW5ld2RpcikgZ290byBleGl0X2FkZF9kaXI7CisrICBpZiAoIW5ld2RpcikgeworKyAgICBwcmludGYoIkVycm9yIC0gY2FsbG9jIGZhaWxlZFxuIik7CisrICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgfQorKworKyAgLyogR3JhYiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgKi8KKysgIGJhc2UgPSBiYXNlbmFtZShmaWxlbmFtZSk7CisrCisrICAvKiBjb252ZXJ0IGZvciBkb3Mgc3RydWN0dXJlICAqLworKyAgY29weV9maWxlbmFtZShiYXNlLCBkb3NfbmFtZSk7CisrCisrICAvKiBNYWtlIGFuIGV4dGVuZGVkIG5hbWUgc2xvdCAqLworKyAgc2xvdCA9IChzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgKikgJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysgIHNsb3QtPmlkID0gJ0EnOworKyAgc2xvdC0+YXR0ciA9IDB4MEY7CisrICBzbG90LT5yZXNlcnZlZCA9IDA7CisrICBzbG90LT5zdGFydCA9IDA7CisrCisrICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisgCisrICBmb3IgKGkgPSAwOyBpIDwgTVNET1NfTkFNRTsgaSsrKQorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBkb3NfbmFtZVtpXTsKKysKKysgIHAgPSBiYXNlOworKworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTVfMTAsIDEyLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTExXzEyLCA0LCAmcCk7CisrCisrICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisgICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisgCistICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBiYXNlbmFtZShmaWxlbmFtZSksIHNpemVvZihlbnRyeS0+bmFtZSkpOworLSAgCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBkb3NfbmFtZSwgTVNET1NfTkFNRSk7CisrCisgICBlbnRyeS0+YXR0ciA9IEFUVFJfRElSOworICAgY3RpbWUgPSBsb2NhbHRpbWUoJmNyZWF0ZV90aW1lKTsKKyAKK0BAIC0xNzcwLDI1ICsxNzkzLDMyIEBAIHN0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUKKyAJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKyAJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKyAKKy0gIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWVfY3MgPSAwOworICAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisgICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKyAgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworIAorICAgLyogTm93LCByZWFkIHRoZSBkaXJlY3RvcnkgKi8KKyAKKy0gIHdoaWxlKChkZW50cnkgPSByZWFkZGlyKHJkZGlyKSkpIHsKKysKKysgIHdoaWxlKChiYXNlWzBdICE9ICcuJykgJiYgKGRlbnRyeSA9IHJlYWRkaXIocmRkaXIpKSkgeworICAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICAgY2hhciAqYnVmZmVyOworLSAgICAKKy0gICAgaWYgKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpCistICAgICAgY29udGludWU7CisgCistICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKy0gICAgaWYgKGRlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisrICAgIGlmIChkZW50cnktPmRfbmFtZVswXSA9PSAnLicpIHsKKysgICAgICAgIC8qIGRvcyBhbHNvIGhhcyAuICYgLi4gZGlyZWN0b3J5IGVudHJpZXMgKi8KKysgICAgICBpZiAoISAoKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikpIHx8ICghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLi4iKSkpKSB7CisrICAgICAgICAvKiBpZ25vcmUgb3RoZXIgLiogZmlsZXMgKi8KKysgICAgICAgIHByaW50ZigiRXJyb3IgLSBGaWxlL0RpciBuYW1lIGlzIG5vdCBkb3MgY29tcGF0aWJsZSwgaWdub3JlZDogJXNcbiIsIGRlbnRyeS0+ZF9uYW1lKTsKKysgICAgICAgIGNvbnRpbnVlOworKyAgICAgIH0KKysgICAgfQorIAorICAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuKGZpbGVuYW1lKSArIHN0cmxlbihkZW50cnktPmRfbmFtZSkgKyAzKTsKKy0gICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKyAgICBpZiAoIWJ1ZmZlcikgeworKyAgICAgICAgcHJpbnRmKCJFcnJvciAtIG1hbGxvYyBmYWlsZWRcbiIpOworKyAgICAgICAgZ290byBleGl0X2FkZF9kaXI7CisrICAgIH0KKyAgICAgCisgICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBmaWxlbmFtZSwgZGVudHJ5LT5kX25hbWUpOworICAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CitAQCAtMTgwNiwxMSArMTgzNiwyMyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgICAvKiBOb3cgdGhhdCB0aGUgZW50aXJlIGRpcmVjdG9yeSBoYXMgYmVlbiB3cml0dGVuLCBnbyBhaGVhZCBhbmQgd3JpdGUgdGhlIGRpcmVjdG9yeQorICAgICAgZW50cnkgYXMgd2VsbCAqLworIAorKyAgZW50cnktPnNpemUgPSAwOyAvKiBhIGRpcmVjdG9yeSBoYXMgemVybyBzaXplICovCisrCisrICBpZiAoYmFzZVswXSA9PSAnLicpICB7IC8qIC4gJiAuLiBwb2ludCB0byBwYXJlbnQncyBjbHVzdGVyICovCisrICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgfQorKworICAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhsYXN0X2NsdXN0ZXJfd3JpdHRlbik7CisgICBlbnRyeS0+c3RhcnRoaSA9IENUX0xFX1coKGxhc3RfY2x1c3Rlcl93cml0dGVuICYgMHhGRkZGMDAwMCkgPj4gMTYpOyAKKy0gIGVudHJ5LT5zaXplID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKysKKysvKiAuIGRpciBzdGFydCBwb2ludHMgdG8gcGFyZW50ICovCisrICBuZXdkaXItPnRhYmxlWzFdLnN0YXJ0ID0gZW50cnktPnN0YXJ0OworKy8qIC4uIGRpciBwb2ludHMgdG8gcGFyZW50IG9mIHBhcmVudCovCisrLyogLi4gZGlyIHN0YXJ0IGlzIG5vdCBzZXQgeWV0LCB3b3VsZCBuZWVkIG1vcmUgY2hhbmdlcyB0byB0aGUgY29kZSwKKysgKiBidXQgZG9zZnNjayBjYW4gZml4IHRoZXNlIC4uIGVudHJ5IHN0YXJ0IHBvaW50ZXJzIGNvcnJlY3RseSAqLworKworKyAgcmVtYWluID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKyAgIAorLSAgcmVtYWluID0gZW50cnktPnNpemU7CisgICBkYXRhID0gKGNoYXIgKikgbmV3ZGlyLT50YWJsZTsKKyAKKyAgIHdoaWxlKHJlbWFpbikgeworQEAgLTE4NTgsNiArMTkwMCw3IEBAIHN0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXIKKyAKKyAgIGlmICghbmV3ZGlyKSB7CisgICAgIGNsb3NlZGlyKGRpcik7CisrICAgIHByaW50ZigiRXJyb3IgLSBjYWxsb2MgZmFpbGVkIVxuIik7CisgICAgIHJldHVybjsKKyAgIH0KKyAKK0BAIC0xODc3LDcgKzE5MjAsMTAgQEAgc3RhdGljIHZvaWQgYWRkX3Jvb3RfZGlyZWN0b3J5KGNoYXIgKmRpcgorICAgICBpZiAoZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworICAKKyAgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihkaXJuYW1lKSArIHN0cmxlbihlbnRyeS0+ZF9uYW1lKSArIDMpOworLSAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrICAgIGlmICghYnVmZmVyKSB7CisrICAgICAgICBwcmludGYoIkVycm9yIC0gbWFsbG9jIGZhaWxlZCFcbiIpOworKyAgICAgICAgY29udGludWU7CisrICAgIH0KKyAKKyAgICAgc3ByaW50ZihidWZmZXIsICIlcy8lcyIsIGRpcm5hbWUsIGVudHJ5LT5kX25hbWUpOworICAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CitAQCAtMjI0NSw2ICsyMjkxLDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgaWYgKGNoZWNrICYmIGxpc3RmaWxlKQkvKiBBdXRvIGFuZCBzcGVjaWZpZWQgYmFkIGJsb2NrIGhhbmRsaW5nIGFyZSBtdXR1YWxseSAqLworICAgICBkaWUgKCItYyBhbmQgLWwgYXJlIGluY29tcGF0aWJsZSIpOwkJLyogZXhjbHVzaXZlIG9mIGVhY2ggb3RoZXIhICovCisgCisrICBpZiAoZGlybmFtZSAmJiAoc2l6ZV9mYXQgPT0gMzIpKQorKyAgICBkaWUgKCItZCBpcyBpbmNvbXBhdGlibGUgd2l0aCBGQVQzMiIpOworKworICAgaWYgKCFjcmVhdGUpIHsKKyAgICAgY2hlY2tfbW91bnQgKGRldmljZV9uYW1lKTsJLyogSXMgdGhlIGRldmljZSBhbHJlYWR5IG1vdW50ZWQ/ICovCisgICAgIGRldiA9IG9wZW4gKGRldmljZV9uYW1lLCBPX1JEV1IpOwkvKiBJcyBpdCBhIHN1aXRhYmxlIGRldmljZSB0byBidWlsZCB0aGUgRlMgb24/ICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1YzhjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvaW5jbHVkZS1saW51eC10eXBlcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitta2Rzb2ZzIGlzIHVzaW5nIHR5cGVzIG9mIHRoZSBzdHlsZSBfX3U4LCB3aGljaCBpdCBnZXRzIHdpdGggc29tZQordmVyc2lvbnMgb2YgbGliYyBoZWFkZXJzIHZpYSBsaW51eC9oZHJlZy5oIGluY2x1ZGluZyBhc20vdHlwZXMuaC4KK05ld2VyIHZlcnNpb24gb2YgZmVkb3JhIChhdCBsZWFzdCkgaGF2ZSBhIGhkcmVnLmggd2hpY2hkb2VzIG5vdAoraW5jbHVkZSBhc20vdHlwZXMuaC4gVG8gd29yayBhcm91bmQgdGhpcyBwYXRjaCBta2Rvc2ZzLmMgdG8gZXhwbGljaXR5CitpbmNsdWRlIGxpbnV4L3R5cGVzLmggd2hpY2ggd2lsbCBpbiB0dXJuIHB1bGwgaW4gYXNtL3R5cGVzLmggd2hpY2gKK2RlZmluZXMgdGhlc2UgdmFyaWFibGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL21rZG9zZnMvbWtkb3Nmcy5jfgkyMDA2LTA3LTEyIDE4OjQ2OjIxLjAwMDAwMDAwMCArMTAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9ta2Rvc2ZzL21rZG9zZnMuYwkyMDA2LTA3LTEyIDE4OjQ2OjIxLjAwMDAwMDAwMCArMTAwMAorQEAgLTYwLDYgKzYwLDcgQEAKKyAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorICNpbmNsdWRlIDxsaW51eC9mcy5oPgorICNpbmNsdWRlIDxsaW51eC9mZC5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjFiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21rZG9zZnMtYm9vdGNvZGUucGF0Y2gKQEAgLTAsMCArMSwyNDEgQEAKK0FkZCBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvQ2hhbmdlTG9nCTE5OTctMDYtMTggMTA6MDk6MzguMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvQ2hhbmdlTG9nCTIwMTEtMTItMDYgMTI6MTQ6MjMuNjM0MDExNTU4ICswMDAwCitAQCAtMSwzICsxLDE0IEBACisrMTl0aCBKdW5lIDIwMDMJCQlTYW0gQmluZ25lciAoc2FtQGJpbmduZXIuY29tKQorKworKwlBZGRlZCBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZSBzbyB0aGF0IGlmIHlvdSBoYXZlCisrCWZvciBleGFtcGxlIFdpbmRvd3MgMjAwMCBib290IGNvZGUsIHlvdSBjYW4gaGF2ZSBpdCB3cml0ZSB0aGF0CisrCWFzIHRoZSBib290Y29kZS4gIFRoaXMgaXMgYSBkdW1wIG9mIHRoZSBiZWhpbm5pbmcgb2YgYSBwYXJ0aXRpb24KKysJZ2VuZXJhbGx5IDUxMiBieXRlcywgYnV0IGNhbiBiZSB1cCB0byByZXNlcnZlZCBzZWN0b3JzKjUxMiBieXRlcy4KKysgICAgICAgIEFsc28gd3JpdGVzIDB4ODAgYXMgdGhlCUJJT1MgZHJpdmUgbnVtYmVyIGlmIHdlIGFyZSBmb3JtYXR0aW5nIGEKKysJaGFyZCBkcml2ZSwgYW5kIHNldHMgdGhlIG51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyB0byBiZSB0aGUKKysJbnVtYmVyIG9mIHNlY3RvcnMgaW4gb25lIHRyYWNrLiBUaGVzZSB3ZXJlIHJlcXVpcmVkIHNvIHRoYXQgRE9TCisrCWNvdWxkIGJvb3QgdXNpbmcgdGhlIGJvb3Rjb2RlLgorKworIDI4dGggSmFudWFyeSAxOTk1CQlILiBQZXRlciBBbnZpbiAoaHBhQHlnZ2RyYXNpbC5jb20pCisgCisgCUJldHRlciBhbGdvcml0aG0gdG8gc2VsZWN0IGNsdXN0ZXIgc2l6ZXMgb24gbGFyZ2UgZmlsZXN5c3RlbXMuCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy44Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9ta2Rvc2ZzLjgJMjAwNC0wMi0yNSAxOTozNjowNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLjgJMjAxMS0xMi0wNiAxMjoxOTo1NC43Nzc4ODg0MzQgKzAwMDAKK0BAIC00NCw2ICs0NCwxMCBAQAorIC5JIG1lc3NhZ2UtZmlsZQorIF0KKyBbCisrLkIgXC1CCisrLkkgYm9vdGNvZGUtZmlsZQorK10KKytbCisgLkIgXC1uCisgLkkgdm9sdW1lLW5hbWUKKyBdCitAQCAtMTY1LDYgKzE2OSwxOCBAQAorIGNhcnJpYWdlIHJldHVybi1saW5lIGZlZWQgY29tYmluYXRpb25zLCBhbmQgdGFicyBoYXZlIGJlZW4gZXhwYW5kZWQuCisgSWYgdGhlIGZpbGVuYW1lIGlzIGEgaHlwaGVuICgtKSwgdGhlIHRleHQgaXMgdGFrZW4gZnJvbSBzdGFuZGFyZCBpbnB1dC4gCisgLlRQCisrLkJJIFwtQiAiIGJvb3Rjb2RlLWZpbGUiCisrVXNlcyBib290IG1hY2hpbmUgY29kZSBmcm9tIGZpbGUgImZpbGUiLiAgT24gYW55IHRoaW5nIG90aGVyIHRoYW4gRkFUMzIsCisrdGhpcyBvbmx5IHdyaXRlcyB0aGUgZmlyc3QgMyBieXRlcywgYW5kIDQ4MCBieXRlcyBmcm9tIG9mZnNldCAzRWguICBPbgorK0ZBVDMyLCB0aGlzIHdyaXRlcyB0aGUgZmlyc3QgMyBieXRlcywgNDIwIGJ5dGVzIGZyb20gb2Zmc2V0IDVBaCB0byBib3RoCisrcHJpbWFyeSBhbmQgYmFja3VwIGJvb3Qgc2VjdG9ycy4gIEFsc28gd3JpdGVzIGFsbCBvdGhlciByZXNlcnZlZCBzZWN0b3JzCisrZXhjbHVkaW5nIHRoZSBzZWN0b3JzIGZvbGxvd2luZyBib290IHNlY3RvcnMgKHVzdWFsbHkgc2VjdG9yIDIgYW5kIDcpLgorK0RvZXMgbm90IHJlcXVpcmUgdGhhdCB0aGUgaW5wdXQgZmlsZSBiZSBhcyBsYXJnZSBhcyByZXNlcnZlZF9zZWN0b3JzKjUxMi4KKytUbyBtYWtlIGEgRkFUMzIgcGFydGl0aW9uIGJvb3RhYmxlLCB5b3Ugd2lsbCBuZWVkIGF0IGxlYXN0IHRoZSBmaXJzdAorKzEzIHNlY3RvcnMgKDY2NTYgYnl0ZXMpLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBwYXJ0aXRpb24gYXMgdGhlIGFyZ3VtZW50CisrdG8gY2xvbmUgdGhlIGJvb3QgY29kZSBmcm9tIHRoYXQgcGFydGl0aW9uLgorK2kuZSBta2Rvc2ZzIC1CIC9kZXYvc2RhMSAvZGV2L3NkYTEKKysuVFAKKyAuQkkgXC1uICIgdm9sdW1lLW5hbWUiCisgU2V0cyB0aGUgdm9sdW1lIG5hbWUgKGxhYmVsKSBvZiB0aGUgZmlsZXN5c3RlbS4gIFRoZSB2b2x1bWUgbmFtZSBjYW4KKyBiZSB1cCB0byAxMSBjaGFyYWN0ZXJzIGxvbmcuICBUaGUgZGVmYXVsdCBpcyBubyBsYWJlbC4KK0BAIC0xOTgsOCArMjE0LDkgQEAKKyBzaW1wbHkgd2lsbCBub3Qgc3VwcG9ydCBpdCA7KQorIC5TSCBBVVRIT1IKKyBEYXZlIEh1ZHNvbiAtIDxkYXZlQGh1bWJ1Zy5kZW1vbi5jby51az47IG1vZGlmaWVkIGJ5IFBldGVyIEFudmluCistPGhwYUB5Z2dkcmFzaWwuY29tPi4gRml4ZXMgYW5kIGFkZGl0aW9ucyBieSBSb21hbiBIb2RlaworLTxyb21hbkBob2Rlay5uZXQ+IGZvciBEZWJpYW4vR05VIExpbnV4LgorKzxocGFAeWdnZHJhc2lsLmNvbT4gYW5kIFNhbSBCaW5nbmVyIDxzYW1AYmluZ25lci5jb20+LiBGaXhlcyBhbmQKKythZGRpdGlvbnMgYnkgUm9tYW4gSG9kZWsgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorK2ZvciBEZWJpYW4vR05VIExpbnV4LgorIC5TSCBBQ0tOT1dMRURHRU1FTlRTCisgLkIgbWtkb3NmcworIGlzIGJhc2VkIG9uIGNvZGUgZnJvbQorSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMDUtMDMtMTIgMTY6MTI6MTYuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mjc6NTUuMTIxODg2MDc2ICswMDAwCitAQCAtMjQsNiArMjQsMTIgQEAKKyAgICAtIE5ldyBvcHRpb25zIC1BLCAtUywgLUMKKyAgICAtIFN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zID4gMkdCCisgICAgLSBGQVQzMiBzdXBwb3J0CisrCisrICAgRml4ZXMvYWRkaXRpb25zIEp1bmUgMjAwMyBieSBTYW0gQmluZ25lcgorKyAgIDxzYW1AYmluZ25lci5jb20+OgorKyAgIC0gQWRkIC1CIG9wdGlvbiB0byByZWFkIGluIGJvb3Rjb2RlIGZyb20gYSBmaWxlCisrICAgLSBXcml0ZSBCSU9TIGRyaXZlIG51bWJlciBzbyB0aGF0IEZTIGNhbiBwcm9wZXJseSBib290CisrICAgLSBTZXQgbnVtYmVyIG9mIGhpZGRlbiBzZWN0b3JzIGJlZm9yZSBib290IGNvZGUgdG8gYmUgb25lIHRyYWNrCisgICAgCisgICAgQ29weWluZzogICAgIENvcHlyaWdodCAxOTkzLCAxOTk0IERhdmlkIEh1ZHNvbiAoZGF2ZUBodW1idWcuZGVtb24uY28udWspCisgCitAQCAtMTUzLDYgKzE1OSw4IEBACisgI2RlZmluZSBGQVRfQkFEICAgICAgMHgwZmZmZmZmNworIAorICNkZWZpbmUgTVNET1NfRVhUX1NJR04gMHgyOQkvKiBleHRlbmRlZCBib290IHNlY3RvciBzaWduYXR1cmUgKi8KKysjZGVmaW5lIEhEX0RSSVZFX05VTUJFUiAweDgwCS8qIEJvb3Qgb2ZmIGZpcnN0IGhhcmQgZHJpdmUgKi8KKysjZGVmaW5lIEZEX0RSSVZFX05VTUJFUiAweDAwCS8qIEJvb3Qgb2ZmIGZpcnN0IGZsb3BweSBkcml2ZSAqLworICNkZWZpbmUgTVNET1NfRkFUMTJfU0lHTiAiRkFUMTIgICAiCS8qIEZBVDEyIGZpbGVzeXN0ZW0gc2lnbmF0dXJlICovCisgI2RlZmluZSBNU0RPU19GQVQxNl9TSUdOICJGQVQxNiAgICIJLyogRkFUMTYgZmlsZXN5c3RlbSBzaWduYXR1cmUgKi8KKyAjZGVmaW5lIE1TRE9TX0ZBVDMyX1NJR04gIkZBVDMyICAgIgkvKiBGQVQzMiBmaWxlc3lzdGVtIHNpZ25hdHVyZSAqLworQEAgLTE3NSw2ICsxODMsOCBAQAorICNkZWZpbmUgQk9PVENPREVfU0laRQkJNDQ4CisgI2RlZmluZSBCT09UQ09ERV9GQVQzMl9TSVpFCTQyMAorIAorKyNkZWZpbmUgTUFYX1JFU0VSVkVECQkweEZGRkYKKysKKyAvKiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaXMgdXNlZCBvbiBhbGwgc3RydWN0dXJlcyB0byBtYWtlIGdjYyBpZ25vcmUgYW55CisgICogYWxpZ25tZW50cyAqLworIAorQEAgLTIwMiw3ICsyMTIsNyBAQAorICAgX191MTYgICAgICAgICBmYXRfbGVuZ3RoOwkvKiBzZWN0b3JzL0ZBVCAqLworICAgX191MTYgICAgICAgICBzZWNzX3RyYWNrOwkvKiBzZWN0b3JzIHBlciB0cmFjayAqLworICAgX191MTYgICAgICAgICBoZWFkczsJCS8qIG51bWJlciBvZiBoZWFkcyAqLworLSAgX191MzIgICAgICAgICBoaWRkZW47CQkvKiBoaWRkZW4gc2VjdG9ycyAodW51c2VkKSAqLworKyAgX191MzIgICAgICAgICBoaWRkZW47CQkvKiBoaWRkZW4gc2VjdG9ycyAob25lIHRyYWNrKSAqLworICAgX191MzIgICAgICAgICB0b3RhbF9zZWN0OwkvKiBudW1iZXIgb2Ygc2VjdG9ycyAoaWYgc2VjdG9ycyA9PSAwKSAqLworICAgdW5pb24geworICAgICBzdHJ1Y3QgeworQEAgLTI4NSw2ICsyOTUsOCBAQAorIAorIC8qIEdsb2JhbCB2YXJpYWJsZXMgLSB0aGUgcm9vdCBvZiBhbGwgZXZpbCA6LSkgLSBzZWUgdGhlc2UgYW5kIHdlZXAhICovCisgCisrc3RhdGljIGNoYXIgKnRlbXBsYXRlX2Jvb3RfY29kZTsJLyogVmFyaWFibGUgdG8gc3RvcmUgYSBmdWxsIHRlbXBsYXRlIGJvb3Qgc2VjdG9yIGluICovCisrc3RhdGljIGludCB1c2VfdGVtcGxhdGUgPSAwOworIHN0YXRpYyBjaGFyICpwcm9ncmFtX25hbWUgPSAibWtkb3NmcyI7CS8qIE5hbWUgb2YgdGhlIHByb2dyYW0gKi8KKyBzdGF0aWMgY2hhciAqZGV2aWNlX25hbWUgPSBOVUxMOwkvKiBOYW1lIG9mIHRoZSBkZXZpY2Ugb24gd2hpY2ggdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtICovCisgc3RhdGljIGludCBhdGFyaV9mb3JtYXQgPSAwOwkvKiBVc2UgQXRhcmkgdmFyaWF0aW9uIG9mIE1TLURPUyBGUyBmb3JtYXQgKi8KK0BAIC04MzcsNiArODQ5LDEyIEBACisgICAgIHZpLT52b2x1bWVfaWRbMl0gPSAodW5zaWduZWQgY2hhcikgKCh2b2x1bWVfaWQgJiAweDAwZmYwMDAwKSA+PiAxNik7CisgICAgIHZpLT52b2x1bWVfaWRbM10gPSAodW5zaWduZWQgY2hhcikgKHZvbHVtZV9pZCA+PiAyNCk7CisgICB9CisrICBpZiAoYnMubWVkaWEgPT0gMHhmOCkgeworKyAgICAgIHZpLT5kcml2ZV9udW1iZXIgPSBIRF9EUklWRV9OVU1CRVI7ICAvKiBTZXQgYmlvcyBkcml2ZSBudW1iZXIgdG8gODBoICovCisrICB9CisrICBlbHNlIHsKKysgICAgICB2aS0+ZHJpdmVfbnVtYmVyID0gRkRfRFJJVkVfTlVNQkVSOyAgLyogU2V0IGJpb3MgZHJpdmUgbnVtYmVyIHRvIDAwaCAqLworKyAgfQorIAorICAgaWYgKCFhdGFyaV9mb3JtYXQpIHsKKyAgICAgbWVtY3B5KHZpLT52b2x1bWVfbGFiZWwsIHZvbHVtZV9uYW1lLCAxMSk7CitAQCAtMTM2Miw2ICsxMzgwLDMyIEBACisgICAgKiBkaXIgYXJlYSBvbiBGQVQxMi8xNiwgYW5kIHRoZSBmaXJzdCBjbHVzdGVyIG9uIEZBVDMyLiAqLworICAgd3JpdGVidWYoIChjaGFyICopIHJvb3RfZGlyLCBzaXplX3Jvb3RfZGlyLCAicm9vdCBkaXJlY3RvcnkiICk7CisgCisrICBpZiAodXNlX3RlbXBsYXRlID09IDEpIHsKKysgICAgLyogZHVwZSB0ZW1wbGF0ZSBpbnRvIHJlc2VydmVkIHNlY3RvcnMgKi8KKysgICAgc2Vla3RvKCAwLCAiU3RhcnQgb2YgcGFydGl0aW9uIiApOworKyAgICBpZiAoc2l6ZV9mYXQgPT0gMzIpIHsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiYmFja3VwIGptcEJvb3QiICk7CisrICAgICAgc2Vla3RvKCAweDVhLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrMHg1YSwgNDIwLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHNlZWt0byggNTEyKjIsICJ0aGlyZCBzZWN0b3IiICk7CisrICAgICAgaWYgKGJhY2t1cF9ib290ICE9IDApIHsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrNTEyKjIsIGJhY2t1cF9ib290KnNlY3Rvcl9zaXplIC0gNTEyKjIsICJkYXRhIHRvIGJhY2t1cCBib290IiApOworKyAgICAgICAgc2Vla3RvKCBiYWNrdXBfYm9vdCpzZWN0b3Jfc2l6ZSwgImJhY2t1cCBib290IHNlY3RvciIgKTsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUsIDMsICJiYWNrdXAgam1wQm9vdCIgKTsKKysgICAgICAgIHNlZWt0byggYmFja3VwX2Jvb3Qqc2VjdG9yX3NpemUrMHg1YSwgImJhY2t1cCBib290IHNlY3RvciBib290IGFyZWEiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzB4NWEsIDQyMCwgImJhY2t1cCBib290IHNlY3RvciBib290IGFyZWEiICk7CisrICAgICAgICBzZWVrdG8oIChiYWNrdXBfYm9vdCsyKSpzZWN0b3Jfc2l6ZSwgInNlY3RvciBmb2xsb3dpbmcgYmFja3VwIGNvZGUiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKyhiYWNrdXBfYm9vdCsyKSpzZWN0b3Jfc2l6ZSwgKHJlc2VydmVkX3NlY3RvcnMtYmFja3VwX2Jvb3QtMikqNTEyLCAicmVtYWluaW5nIGRhdGEiICk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrNTEyKjIsIChyZXNlcnZlZF9zZWN0b3JzLTIpKjUxMiwgInJlbWFpbmluZyBkYXRhIiApOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiam1wQm9vdCIgKTsKKysgICAgICBzZWVrdG8oIDB4M2UsICJzZWN0b3IgMSBib290IGFyZWEiICk7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsweDNlLCA0NDgsICJib290IGNvZGUiICk7CisrICAgIH0KKysgIH0KKysKKyAgIGlmIChibGFua19zZWN0b3IpIGZyZWUoIGJsYW5rX3NlY3RvciApOworICAgaWYgKGluZm9fc2VjdG9yKSBmcmVlKCBpbmZvX3NlY3RvciApOworICAgZnJlZSAocm9vdF9kaXIpOyAgIC8qIEZyZWUgdXAgdGhlIHJvb3QgZGlyZWN0b3J5IHNwYWNlIGZyb20gc2V0dXBfdGFibGVzICovCitAQCAtMTM3Niw3ICsxNDIwLDcgQEAKKyB7CisgICBmYXRhbF9lcnJvcigiXAorIFVzYWdlOiBta2Rvc2ZzIFstQV0gWy1jXSBbLUNdIFstdl0gWy1JXSBbLWwgYmFkLWJsb2NrLWZpbGVdIFstYiBiYWNrdXAtYm9vdC1zZWN0b3JdXG5cCistICAgICAgIFstbSBib290LW1zZy1maWxlXSBbLW4gdm9sdW1lLW5hbWVdIFstaSB2b2x1bWUtaWRdXG5cCisrICAgICAgIFstbSBib290LW1zZy1maWxlXSBbLW4gdm9sdW1lLW5hbWVdIFstaSB2b2x1bWUtaWRdIFstQiBib290Y29kZV1cblwKKyAgICAgICAgWy1zIHNlY3RvcnMtcGVyLWNsdXN0ZXJdIFstUyBsb2dpY2FsLXNlY3Rvci1zaXplXSBbLWYgbnVtYmVyLW9mLUZBVHNdXG5cCisgICAgICAgIFstaCBoaWRkZW4tc2VjdG9yc10gWy1GIGZhdC1zaXplXSBbLXIgcm9vdC1kaXItZW50cmllc10gWy1SIHJlc2VydmVkLXNlY3RvcnNdXG5cCisgICAgICAgIC9kZXYvbmFtZSBbYmxvY2tzXVxuIik7CitAQCAtMTQzOSw3ICsxNDgzLDcgQEAKKyAgIHByaW50ZiAoIiVzICIgVkVSU0lPTiAiICgiIFZFUlNJT05fREFURSAiKVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAKKy0gIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6UzpoOnYiKSkgIT0gRU9GKQorKyAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiQWJjQ2Y6RjpJaTpsOm06bjpyOlI6czpTOnY6QjoiKSkgIT0gRU9GKQorICAgICAvKiBTY2FuIHRoZSBjb21tYW5kIGxpbmUgZm9yIG9wdGlvbnMgKi8KKyAgICAgc3dpdGNoIChjKQorICAgICAgIHsKK0BAIC0xNTA5LDYgKzE1NTMsNTEgQEAKKyAJbGlzdGZpbGUgPSBvcHRhcmc7CisgCWJyZWFrOworIAorKyAgICAgIGNhc2UgJ0InOiAgICAgICAgIC8qIEIgOiByZWFkIGluIGJvb3Rjb2RlICovCisrICAgICAgICBpZiAoIHN0cmNtcChvcHRhcmcsICItIikgKQorKwkgIHsKKysJICAgIG1zZ2ZpbGUgPSBmb3BlbihvcHRhcmcsICJyIik7CisrCSAgICBpZiAoICFtc2dmaWxlICkKKysJICAgICAgcGVycm9yKG9wdGFyZyk7CisrCSAgfQorKwllbHNlCisrCSAgbXNnZmlsZSA9IHN0ZGluOworKworKwlpZiAoIG1zZ2ZpbGUgKQorKwkgIHsKKysgICAgICAgICAgICBpZiAoISh0ZW1wbGF0ZV9ib290X2NvZGUgPSBtYWxsb2MoIE1BWF9SRVNFUlZFRCApKSkKKysgICAgICAgICAgICAgICAgZGllKCAiT3V0IG9mIG1lbW9yeSIgKTsKKysJICAgIC8qIFRoZSB0ZW1wbGF0ZSBib290IHNlY3RvciBpbmNsdWRpbmcgcmVzZXJ2ZWQgbXVzdCBub3QgYmUgPiA2NTUzNSAqLworKyAgICAgICAgICAgIHVzZV90ZW1wbGF0ZSA9IDE7CisrCSAgICBpID0gMDsKKysJICAgIGRvCisrCSAgICAgIHsKKysJCWNoID0gZ2V0Yyhtc2dmaWxlKTsKKysJCXN3aXRjaCAoY2gpCisrCQkgIHsKKysJCSAgY2FzZSBFT0Y6CisrCQkgICAgYnJlYWs7CisrCisrCQkgIGRlZmF1bHQ6CisrCQkgICAgdGVtcGxhdGVfYm9vdF9jb2RlW2krK10gPSBjaDsgLyogU3RvcmUgY2hhcmFjdGVyICovCisrCQkgICAgYnJlYWs7CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgd2hpbGUgKCBjaCAhPSBFT0YgJiYgaSA8IE1BWF9SRVNFUlZFRCApOworKwkgICAgY2ggPSBnZXRjKG1zZ2ZpbGUpOyAvKiBmaW5kIG91dCBpZiB3ZSdyZSBhdCBFT0YgKi8KKysKKysJICAgIC8qIEZpbGwgdXAgd2l0aCB6ZXJvcyAqLworKwkgICAgd2hpbGUoIGkgPCBNQVhfUkVTRVJWRUQgKQorKwkJdGVtcGxhdGVfYm9vdF9jb2RlW2krK10gPSAnXDAnOworKwkgICAgCisrCSAgICBpZiAoIGNoICE9IEVPRiApCisrCSAgICAgIHByaW50ZiAoIldhcm5pbmc6IHRlbXBsYXRlIHRvbyBsb25nOyB0cnVuY2F0ZWQgYWZ0ZXIgJWQgYnl0ZXNcbiIsIGkpOworKwkgICAgCisrCSAgICBpZiAoIG1zZ2ZpbGUgIT0gc3RkaW4gKQorKwkgICAgICBmY2xvc2UobXNnZmlsZSk7CisrCSAgfQorKwlicmVhazsKKysKKyAgICAgICBjYXNlICdtJzoJCS8qIG0gOiBTZXQgYm9vdCBtZXNzYWdlICovCisgCWlmICggc3RyY21wKG9wdGFyZywgIi0iKSApCisgCSAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNDcxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2gKQEAgLTAsMCArMSw2MzkgQEAKK0FkZCAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IHRvIHBvcHVsYXRlIHRoZSBpbWFnZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mjc6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mzc6MTMuNDQ1OTUwNzAzICswMDAwCitAQCAtMTgsNiArMTgsMTAgQEAKKyAgICBhcyBhIHJ1bGUpLCBhbmQgbm90IHRoZSBibG9jay4gIEZvciBleGFtcGxlIHRoZSBib290IGJsb2NrIGRvZXMgbm90CisgICAgb2NjdXB5IGEgZnVsbCBjbHVzdGVyLgorIAorKyAgIEp1bmUgMjAwNCAtIEpvcmRhbiBDcm91c2UgKGluZm8ubGludXhAYW1kLmNvbSkKKysgICBBZGRlZCAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IHRvIHBvcHVsYXRlIHRoZSBpbWFnZQorKyAgIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgQWxsIFJpZ2h0cyBSZXNlcnZlZAorKyAgIAorICAgIEZpeGVzL2FkZGl0aW9ucyBNYXkgMTk5OCBieSBSb21hbiBIb2RlaworICAgIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT46CisgICAgLSBBdGFyaSBmb3JtYXQgc3VwcG9ydAorQEAgLTcxLDYgKzc1LDggQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8bGliZ2VuLmg+CisrI2luY2x1ZGUgPGRpcmVudC5oPgorIAorICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisgI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAwKQorQEAgLTExMCw2ICsxMTYsOCBAQAorICAqIHN1ZmZpY2llbnQgKG9yIGV2ZW4gYmV0dGVyIDopIGZvciA2NCBiaXQgb2Zmc2V0cyBpbiB0aGUgbWVhbnRpbWUgKi8KKyAjZGVmaW5lIGxsc2VlayBsc2VlaworIAorKyNkZWZpbmUgUk9VTkRfVVAodmFsdWUsIGRpdmlzb3IpICh2YWx1ZSArIChkaXZpc29yIC0gKHZhbHVlICUgZGl2aXNvcikpKSAvIGRpdmlzb3IKKysKKyAvKiBDb25zdGFudCBkZWZpbml0aW9ucyAqLworIAorICNkZWZpbmUgVFJVRSAxCQkJLyogQm9vbGVhbiBjb25zdGFudHMgKi8KK0BAIC0xNDksNyArMTU3LDYgQEAKKyAjZGVmaW5lIEFUVFJfVk9MVU1FICA4CQkvKiB2b2x1bWUgbGFiZWwgKi8KKyAjZGVmaW5lIEFUVFJfRElSICAgICAxNgkJLyogZGlyZWN0b3J5ICovCisgI2RlZmluZSBBVFRSX0FSQ0ggICAgMzIJCS8qIGFyY2hpdmVkICovCistCisgI2RlZmluZSBBVFRSX05PTkUgICAgMAkJLyogbm8gYXR0cmlidXRlIGJpdHMgKi8KKyAjZGVmaW5lIEFUVFJfVU5VU0VEICAoQVRUUl9WT0xVTUUgfCBBVFRSX0FSQ0ggfCBBVFRSX1NZUyB8IEFUVFJfSElEREVOKQorIAkvKiBhdHRyaWJ1dGUgYml0cyB0aGF0IGFyZSBjb3BpZWQgImFzIGlzIiAqLworQEAgLTI0NSw2ICsyNTIsMTkgQEAKKyAgIF9fdTMyCQlyZXNlcnZlZDJbNF07CisgfTsKKyAKKysvKiBUaGlzIHN0b3JlcyB1cCB0byAxMyBjaGFycyBvZiB0aGUgbmFtZSAqLworKworK3N0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CisrICAgICAgICBfX3U4ICAgIGlkOyAgICAgICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIHNsb3QgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTBfNFsxMF07ICAgIC8qIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lICovCisrICAgICAgICBfX3U4ICAgIGF0dHI7ICAgICAgICAgICAvKiBhdHRyaWJ1dGUgYnl0ZSAqLworKyAgICAgICAgX191OCAgICByZXNlcnZlZDsgICAgICAgLyogYWx3YXlzIDAgKi8KKysgICAgICAgIF9fdTggICAgYWxpYXNfY2hlY2tzdW07IC8qIGNoZWNrc3VtIGZvciA4LjMgYWxpYXMgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTVfMTBbMTJdOyAgIC8qIDYgbW9yZSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKysgICAgICAgIF9fdTE2ICAgc3RhcnQ7ICAgICAgICAgIC8qIHN0YXJ0aW5nIGNsdXN0ZXIgbnVtYmVyLCAwIGluIGxvbmcgc2xvdHMgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTExXzEyWzRdOyAgIC8qIGxhc3QgMiBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKyt9OworKworIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkKKyAgIHsKKyAgICAgY2hhcgluYW1lWzhdLCBleHRbM107CS8qIG5hbWUgYW5kIGV4dGVuc2lvbiAqLworQEAgLTI5Myw2ICszMTMsMTUgQEAKKyAKKyAjZGVmaW5lIE1FU1NBR0VfT0ZGU0VUIDI5CS8qIE9mZnNldCBvZiBtZXNzYWdlIGluIGFib3ZlIGNvZGUgKi8KKyAKKysvKiBTcGVjaWFsIHN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIGRpcmVjdG9yaWVzIGFzIHdlIGFkZCB0aGVtIGZvciB0aGUgLWQgb3B0aW9uICovCisrCisrc3RydWN0IGRpcl9lbnRyeSB7CisrICBpbnQgcm9vdDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpZmllcyBpZiB0aGlzIGlzIHRoZSByb290IGRpciBvciBub3QgKi8KKysgIGludCBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0YWJsZSAqLworKyAgaW50IGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFibGUgKi8KKysgIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKnRhYmxlOyAgLyogUG9pbnRlciB0byB0aGUgZW50cnkgdGFibGUgKi8KKyt9OworKworIC8qIEdsb2JhbCB2YXJpYWJsZXMgLSB0aGUgcm9vdCBvZiBhbGwgZXZpbCA6LSkgLSBzZWUgdGhlc2UgYW5kIHdlZXAhICovCisgCisgc3RhdGljIGNoYXIgKnRlbXBsYXRlX2Jvb3RfY29kZTsJLyogVmFyaWFibGUgdG8gc3RvcmUgYSBmdWxsIHRlbXBsYXRlIGJvb3Qgc2VjdG9yIGluICovCitAQCAtMzI2LDYgKzM1NSw5IEBACisgc3RhdGljIGludCBzaXplX3Jvb3RfZGlyOwkvKiBTaXplIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbiBieXRlcyAqLworIHN0YXRpYyBpbnQgc2VjdG9yc19wZXJfY2x1c3RlciA9IDA7CS8qIE51bWJlciBvZiBzZWN0b3JzIHBlciBkaXNrIGNsdXN0ZXIgKi8KKyBzdGF0aWMgaW50IHJvb3RfZGlyX2VudHJpZXMgPSAwOwkvKiBOdW1iZXIgb2Ygcm9vdCBkaXJlY3RvcnkgZW50cmllcyAqLworK3N0YXRpYyBpbnQgcm9vdF9kaXJfbnVtX2VudHJpZXMgPSAwOworK3N0YXRpYyBpbnQgbGFzdF9jbHVzdGVyX3dyaXR0ZW4gPSAwOworKworIHN0YXRpYyBjaGFyICpibGFua19zZWN0b3I7CQkvKiBCbGFuayBzZWN0b3IgLSBhbGwgemVyb3MgKi8KKyBzdGF0aWMgaW50IGhpZGRlbl9zZWN0b3JzID0gMDsJCS8qIE51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyAqLworIAorQEAgLTM5OSw3ICs0MzEsNiBAQAorICAgfQorIH0KKyAKKy0KKyAvKiBNYXJrIGEgc3BlY2lmaWVkIHNlY3RvciBhcyBoYXZpbmcgYSBwYXJ0aWN1bGFyIHZhbHVlIGluIGl0J3MgRkFUIGVudHJ5ICovCisgCisgc3RhdGljIHZvaWQKK0BAIC0xMjY2LDYgKzEyOTcsOSBAQAorICAgICAgIGRpZSAoInVuYWJsZSB0byBhbGxvY2F0ZSBzcGFjZSBmb3Igcm9vdCBkaXJlY3RvcnkgaW4gbWVtb3J5Iik7CisgICAgIH0KKyAKKysKKysgIGxhc3RfY2x1c3Rlcl93cml0dGVuID0gMjsKKysgIAorICAgbWVtc2V0KHJvb3RfZGlyLCAwLCBzaXplX3Jvb3RfZGlyKTsKKyAgIGlmICggbWVtY21wKHZvbHVtZV9uYW1lLCAiICAgICAgICAgICAiLCAxMSkgKQorICAgICB7CitAQCAtMTMxNCwxMSArMTM0OCwxMSBAQAorICAgfQorICAgCisgICBpZiAoIShibGFua19zZWN0b3IgPSBtYWxsb2MoIHNlY3Rvcl9zaXplICkpKQorLSAgICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrICAKKyAgIG1lbXNldChibGFua19zZWN0b3IsIDAsIHNlY3Rvcl9zaXplKTsKKyB9CistCistCisrICAKKyAvKiBXcml0ZSB0aGUgbmV3IGZpbGVzeXN0ZW0ncyBkYXRhIHRhYmxlcyB0byB3aGVyZXZlciB0aGV5J3JlIGdvaW5nIHRvIGVuZCB1cCEgKi8KKyAKKyAjZGVmaW5lIGVycm9yKHN0cikJCQkJXAorQEAgLTEzNDAsNyArMTM3NCw3IEBACisgICBkbyB7CQkJCQkJCVwKKyAgICAgaW50IF9fc2l6ZSA9IChzaXplKTsJCQkJXAorICAgICBpZiAod3JpdGUgKGRldiwgYnVmLCBfX3NpemUpICE9IF9fc2l6ZSkJCVwKKy0JZXJyb3IgKCJmYWlsZWQgd2hpbHN0IHdyaXRpbmcgIiBlcnJzdHIpOwlcCisrICAgICAgIGVycm9yICgiZmFpbGVkIHdoaWxzdCB3cml0aW5nICIgZXJyc3RyKTsJXAorICAgfSB3aGlsZSgwKQorIAorIAorQEAgLTE0MTIsNiArMTQ0Niw0NTIgQEAKKyAgIGZyZWUgKGZhdCk7ICAvKiBGcmVlIHVwIHRoZSBmYXQgdGFibGUgc3BhY2UgcmVzZXJ2ZWQgZHVyaW5nIHNldHVwX3RhYmxlcyAqLworIH0KKyAKKysvKiBBZGQgYSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgYWxzbyB3cml0ZSBpdCBpbnRvIHRoZSBpbWFnZSAqLworKworK3N0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmJhc2UsIGNoYXIgKmV4dCkgeworKyAgCisrICBjaGFyICpjaCA9IGZpbGVuYW1lOworKyAgaW50IGksIGxlbjsKKysKKysgIG1lbXNldChiYXNlLCAweDIwLCA4KTsKKysgIG1lbXNldChleHQsIDB4MjAsIDMpOworKyAgCisrICBmb3IobGVuID0gMCA7ICpjaCAmJiAqY2ggIT0gJy4nOyBjaCsrKSB7CisrICAgIGJhc2VbbGVuKytdID0gdG91cHBlcigqY2gpOworKyAgICBpZiAobGVuID09IDgpIGJyZWFrOworKyAgfQorKyAgCisrICBmb3IgKCA7ICpjaCAmJiAqY2ggIT0gJy4nOyBjaCsrKTsKKysgIGlmICgqY2gpIGNoKys7CisrICAKKysgIGZvcihsZW4gPSAwIDsgKmNoOyBjaCsrKSB7CisrICAgIGV4dFtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGlmIChsZW4gPT0gMykgYnJlYWs7CisrICB9CisrfQorKworKy8qIENoZWNrIGZvciBhbiAuYXR0cmliLjxmaWxlbmFtZT4gZmlsZSwgYW5kIHJlYWQgdGhlIGF0dHJpYnV0ZXMgdGhlcmVpbiAqLworKworKy8qIFdlIGFyZSBnb2luZyB0byBiZSBwcmV0dHkgcGVkYW50aWMgYWJvdXQgdGhpcy4gIFRoZSBmaWxlIG5lZWRzIDMKKysgICBieXRlcyBhdCB0aGUgYmVnaW5uaW5nLCB0aGUgYXR0cmlidXRlcyBhcmUgbGlzdGVkIGluIHRoaXMgb3JkZXI6CisrICAgCisrICAgKEgpaWRkZW58KFMpeXN0ZW18KEEpcmNoaXZlZAorKyAgIAorKyAgIEEgY2FwaXRhbCBIU0EgbWVhbnMgdG8gZW5hYmxlIGl0LCBhbnl0aGluZyBlbHNlIHdpbGwgZGlzYWJsZSBpdAorKyAgIChJIHJlY29tbWVuZCBhICctJykgVGhlIHVuaXggdXNlciBhdHRyaWJ1dGVzIHdpbGwgc3RpbGwgYmUgdXNlZCAKKysgICBmb3Igd3JpdGUgYWNjZXNzLgorKworKyAgIEZvciBleGFtcGxlLCB0byBlbmFibGUgc3lzdGVtIGZpbGUgYWNjZXNzIGZvciBsZGxpbnV4LnN5cywgd3JpdGUgCisrICAgdGhlIGZvbGxvd2luZyB0byAuYXR0cmliLmxkbGludXguc3lzOiAtUy0KKysqLworKworK3Vuc2lnbmVkIGNoYXIgY2hlY2tfYXR0cmliX2ZpbGUoY2hhciAqZGlyLCBjaGFyICpmaWxlbmFtZSkgeworKworKyAgY2hhciBhdHRyaWJbNF0gPSB7ICctJywgJy0nLCAnLScgfTsKKysgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IDA7CisrICBpbnQgcmV0ID0gQVRUUl9OT05FOworKyAgaW50IGZkID0gLTE7CisrCisrICBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoMSwgc3RybGVuKGRpcikgKyBzdHJsZW4oZmlsZW5hbWUpICsgMTApOworKyAgaWYgKCFidWZmZXIpIHJldHVybiBBVFRSX05PTkU7CisrCisrICBzcHJpbnRmKGJ1ZmZlciwgIiVzLy5hdHRyaWIuJXMiLCBkaXIsIGZpbGVuYW1lKTsKKysKKysgIGlmIChhY2Nlc3MoYnVmZmVyLCBSX09LKSkgCisrICAgIGdvdG8gZXhpdF9hdHRyaWI7CisrCisrICBpZiAoKGZkID0gb3BlbihidWZmZXIsIE9fUkRPTkxZLCAwKSkgPCAwKQorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKworKyAgaWYgKHJlYWQoZmQsIGF0dHJpYiwgMykgPCAwKQorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKyAgCisrICBpZiAoYXR0cmliWzBdID09ICdIJykgcmV0IHw9IEFUVFJfSElEREVOOworKyAgaWYgKGF0dHJpYlsxXSA9PSAnUycpIHJldCB8PSBBVFRSX1NZUzsKKysgIGlmIChhdHRyaWJbMl0gPT0gJ0EnKSByZXQgfD0gQVRUUl9BUkNIOworKworKyAgcHJpbnRmKCIlczogU2V0dGluZyBhdHJyaWJ1dGUgJXhcbiIsIGZpbGVuYW1lLCByZXQpOworKworKyBleGl0X2F0dHJpYjoKKysgIGlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisrICBpZiAoYnVmZmVyKSBmcmVlKGJ1ZmZlcik7CisrCisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgdm9pZCBjb3B5X25hbWUoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgY2hhciAqKnBvaW50ZXIpIHsKKysgIGludCBpOworKworKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAyKSB7CisrICAgIGlmICgqcG9pbnRlcikgeworKyAgICAgIGJ1ZmZlcltpXSA9ICoqcG9pbnRlcjsKKysgICAgICBidWZmZXJbaSArIDFdID0gMHgwMDsKKysgICAgICAqcG9pbnRlciA9ICoqcG9pbnRlciA/ICpwb2ludGVyICsgMSA6IDA7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgYnVmZmVyW2ldID0gMHhGRjsKKysgICAgICBidWZmZXJbaSArIDFdID0gMHhGRjsKKysgICAgfQorKyAgfSAgCisrfQorKworK3N0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBkaXJfZW50cnkgKmRpciwgdW5zaWduZWQgY2hhciBhdHRyKSAKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdGF0OworKyAgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZW50cnk7CisrICBpbnQgaW5maWxlID0gMDsKKysgIGludCBzZWN0b3JzLCBjbHVzdGVyczsKKysgIHN0cnVjdCB0bSAqY3RpbWU7CisrICBpbnQgYywgczsKKysgIGludCBwdHI7CisrICBjaGFyICpidWZmZXIsICpiYXNlOworKyAgaW50IHN0YXJ0OworKyAgaW50IHVzZWRzZWMsIHRvdGFsc2VjOworKworKyAgY2hhciBuYW1lODNbOF0sIGV4dDgzWzNdOworKworKyAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworKyAgaW50IGk7CisrICBjaGFyICpwOworKworKyAgLyogVGhlIHJvb3QgZGlyZWN0b3J5IGlzIHN0YXRpYywgZXZlcnl0aGluZyBlbHNlIGdyb3dzIGFzIG5lZWRlZCAqLworKworKyAgaWYgKGRpci0+cm9vdCkgeworKyAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKysgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworKyAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKysJZGlyLT50YWJsZSA9IAorKwkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICAgIGVsc2UgeworKwlkaXItPnRhYmxlID0gCisrCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKysJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysKKysJbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgfQorKworKyAgICAgIGRpci0+ZW50cmllcysrOworKyAgICB9CisrICB9CisrCisrICBpbmZpbGUgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSwgMCk7CisrICBpZiAoIWluZmlsZSkgcmV0dXJuOworKyAgCisrICBpZiAoZnN0YXQoaW5maWxlLCAmc3RhdCkpCisrICAgIGdvdG8gZXhpdF9hZGQ7CisrIAorKyAgaWYgKFNfSVNDSFIoc3RhdC5zdF9tb2RlKSB8fFNfSVNCTEsoc3RhdC5zdF9tb2RlKSB8fAorKyAgICAgIFNfSVNGSUZPKHN0YXQuc3RfbW9kZSkgfHwgU19JU0xOSyhzdGF0LnN0X21vZGUpKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBjYW5ub3QgY3JlYXRlIGEgc3BlY2lhbCBmaWxlIGluIGEgRkFURlNcbiIpOworKyAgICBnb3RvIGV4aXRfYWRkOworKyAgfQorKworKyAgLyogRklYTUU6IFRoaXMgaXNuJ3QgdmVyeSBwcmV0dHkgKi8KKysKKysgIHVzZWRzZWMgPSBzdGFydF9kYXRhX3NlY3RvciArIChzaXplX3Jvb3RfZGlyIC8gc2VjdG9yX3NpemUpICsKKysgICAgKGxhc3RfY2x1c3Rlcl93cml0dGVuICogYnMuY2x1c3Rlcl9zaXplKTsKKysKKysgIHRvdGFsc2VjID0gYmxvY2tzICogQkxPQ0tfU0laRSAvIHNlY3Rvcl9zaXplOworKyAgCisrICAvKiBGaWd1cmUgb3V0IGhvdyBtYW55IHNlY3RvcnMgLyBjbHVzdG9ycyB0aGUgZmlsZSByZXF1aXJlcyAqLworKworKyAgc2VjdG9ycyA9IFJPVU5EX1VQKHN0YXQuc3Rfc2l6ZSwgc2VjdG9yX3NpemUpOworKyAgY2x1c3RlcnMgPSBST1VORF9VUChzZWN0b3JzLCAoaW50KSBicy5jbHVzdGVyX3NpemUpOworKworKyAgaWYgKHVzZWRzZWMgKyBzZWN0b3JzID4gdG90YWxzZWMpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtICVzIGlzIHRvbyBiaWcgKCVkIHZzICVkKVxuIiwgZmlsZW5hbWUsIHNlY3RvcnMsIHRvdGFsc2VjIC0gdXNlZHNlYyk7CisrICAgIGNsb3NlKGluZmlsZSk7CisrICAgIHJldHVybiAtMTsKKysgIH0KKysKKysgIHByaW50ZigiQUREICVzXG4iLCBmaWxlbmFtZSk7CisrCisrICAvKiBHcmFiIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAqLworKyAgYmFzZSA9IGJhc2VuYW1lKGZpbGVuYW1lKTsKKysgIAorKyAgLyogRXh0cmFjdCBvdXQgdGhlIDguMyBuYW1lICovCisrICBjb3B5X2ZpbGVuYW1lKGJhc2UsIG5hbWU4MywgZXh0ODMpOworKworKyAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKysKKysgIHNsb3QgPSAoc3RydWN0IG1zZG9zX2Rpcl9zbG90ICopICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrICBzbG90LT5pZCA9ICdBJzsgIAorKyAgc2xvdC0+YXR0ciA9IDB4MEY7CisrICBzbG90LT5yZXNlcnZlZCA9IDA7CisrICBzbG90LT5zdGFydCA9IDA7CisrICAKKysgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gMDsKKysgIAorKyAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKSAKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgbmFtZTgzW2ldOworKyAgCisrICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspIAorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBleHQ4M1tpXTsKKysKKysgIHAgPSBiYXNlOworKworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTVfMTAsIDEyLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTExXzEyLCA0LCAmcCk7CisrCisrCisrICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisrICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBuYW1lODMsIDgpOworKyAgc3RybmNweShlbnRyeS0+ZXh0LCBleHQ4MywgMyk7CisrCisrCisrICAvKiBJZiB0aGUgdXNlciBoYXMgaXQgcmVhZCBvbmx5LCB0aGVuIGFkZCByZWFkIG9ubHkgdG8gdGhlIGluY29taW5nCisrICAgICBhdHRyaWJ1dGUgc2V0dGluZ3MgKi8KKysKKysgIGlmICghKHN0YXQuc3RfbW9kZSAmIFNfSVdVU1IpKSBhdHRyIHw9IEFUVFJfUk87CisrICBlbnRyeS0+YXR0ciA9IGF0dHI7CisrCisrICAvKiBTZXQgdGhlIGFjY2VzcyB0aW1lIG9uIHRoZSBmaWxlICovCisrICBjdGltZSA9IGxvY2FsdGltZSgmY3JlYXRlX3RpbWUpOworKworKyAgZW50cnktPnRpbWUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoKGN0aW1lLT50bV9zZWMgPj4gMSkgKworKwkJCQkJICAoY3RpbWUtPnRtX21pbiA8PCA1KSArIChjdGltZS0+dG1faG91ciA8PCAxMSkpKTsKKysKKysgIGVudHJ5LT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKysJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKysJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKysKKysgIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKysgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CisrICBlbnRyeS0+c2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKKysKKysgIHN0YXJ0ID0gbGFzdF9jbHVzdGVyX3dyaXR0ZW47CisrCisrICBlbnRyeS0+c3RhcnQgPSBDVF9MRV9XKHN0YXJ0KTsgIC8qIHN0YXJ0IHNlY3RvciAqLworKyAgZW50cnktPnN0YXJ0aGkgPSBDVF9MRV9XKChzdGFydCAmIDB4RkZGRjAwMDApID4+IDE2KTsgLyogSGlnaCBzdGFydCBzZWN0b3IgKGZvciBGQVQzMikgKi8KKysKKysgIC8qIFdlIG1hcmsgYWxsIG9mIHRoZSBjbHVzdGVycyB3ZSB1c2UgaW4gdGhlIEZBVCAqLworKyAgCisrICBmb3IoYyA9IDA7IGMgPCBjbHVzdGVyczsgYysrICkgeworKyAgICBpbnQgZnJlZTsKKysgICAgaW50IG5leHQgPSBjID09IChjbHVzdGVycyAtIDEpID8gRkFUX0VPRiA6IHN0YXJ0ICsgYyArIDE7CisrICAgIG1hcmtfRkFUX2NsdXN0ZXIoc3RhcnQgKyBjLCBuZXh0KTsgIAorKyAgICBsYXN0X2NsdXN0ZXJfd3JpdHRlbisrOworKyAgfQorKyAgCisrICAvKiBUaGlzIGNvbmZ1c2VkIG1lIHRvbyAtIGNsdXN0ZXIgMiBzdGFydHMgYWZ0ZXIgdGhlCisrICAgICByb290IGRpcmVjdG9yeSBkYXRhIC0gc2VhcmNoIG1lIGFzIHRvIHdoeSAqLworKworKyAgcHRyID0gKHN0YXJ0X2RhdGFfc2VjdG9yICogc2VjdG9yX3NpemUpICsgc2l6ZV9yb290X2RpcjsKKysgIHB0ciArPSAoc3RhcnQgLSAyKSAqIGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplOworKyAgICAKKysgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyhzZWN0b3Jfc2l6ZSk7CisrCisrICBpZiAoIWJ1ZmZlcikgeworKyAgICBwcmludGYoIkVycm9yIC0gY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKysgICAgZ290byBleGl0X2FkZDsKKysgIH0KKysKKysgIC8qIFdyaXRlIHRoZSBmaWxlIGludG8gdGhlIGZpbGUgYmxvY2sgKi8KKysKKysgIHNlZWt0byhwdHIsICJkYXRhZmlsZSIpOworKworKyAgd2hpbGUoMSkgeworKyAgICBpbnQgc2l6ZSA9IHJlYWQoaW5maWxlLCBidWZmZXIsIHNlY3Rvcl9zaXplKTsgICAgCisrICAgIGlmIChzaXplIDw9IDApIGJyZWFrOworKyAgICAKKysgICAgd3JpdGVidWYoYnVmZmVyLCBzaXplLCAiZGF0YSIpOyAgICAKKysgIH0KKysKKysgZXhpdF9hZGQ6CisrICBpZiAoaW5maWxlKSBjbG9zZShpbmZpbGUpOworK30KKysKKysvKiBBZGQgYSBuZXcgZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgaW4gdHVybiBwb3B1bGF0ZSAKKysgICBpdCB3aXRoIGl0cyBvd24gZmlsZXMgKi8KKysKKysvKiBGSVhNRTogIFRoaXMgc2hvdWxkIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc2l6ZSB0byBhZGQgaXRzZWxmICovCisrCisrc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZSwgc3RydWN0IGRpcl9lbnRyeSAqZGlyKSB7CisrCisrICBzdHJ1Y3QgZGlyX2VudHJ5ICpuZXdkaXIgPSAwOworKyAgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZW50cnk7CisrICBzdHJ1Y3QgdG0gKmN0aW1lOworKyAgRElSICpyZGRpciA9IG9wZW5kaXIoZmlsZW5hbWUpOworKyAgc3RydWN0IGRpcmVudCAqZGVudHJ5ID0gMDsKKysgIGludCByZW1haW47CisrICBjaGFyICpkYXRhOworKworKyAgLyogSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ICovCisrICBpZiAoIXJkZGlyKSByZXR1cm47CisrICAKKysgIGlmIChkaXItPnJvb3QpIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKKysgICAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIGlmICghZGlyLT50YWJsZSkgCisrCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICBlbHNlIHsKKysJZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCisrCQkJCQkJCXNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrCisrCS8qIFplcm8gaXQgb3V0IHRvIGF2b2lkIGlzc3VlcyAqLworKwltZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICB9CisrCWRpci0+ZW50cmllcysrOworKyAgICB9CisrICB9CisrCisrICAvKiBOb3csIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgZW50cnkgZm9yIHRoZSBuZXcgZGlyZWN0b3J5ICovCisrICBuZXdkaXIgPSAoc3RydWN0IGRpcl9lbnRyeSAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkpKTsKKysgIGlmICghbmV3ZGlyKSBnb3RvIGV4aXRfYWRkX2RpcjsKKysKKysgIGVudHJ5ID0gJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysKKysgIHN0cm5jcHkoZW50cnktPm5hbWUsIGJhc2VuYW1lKGZpbGVuYW1lKSwgc2l6ZW9mKGVudHJ5LT5uYW1lKSk7CisrICAKKysgIGVudHJ5LT5hdHRyID0gQVRUUl9ESVI7CisrICBjdGltZSA9IGxvY2FsdGltZSgmY3JlYXRlX3RpbWUpOworKworKyAgZW50cnktPnRpbWUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoKGN0aW1lLT50bV9zZWMgPj4gMSkgKworKwkJCQkJICAoY3RpbWUtPnRtX21pbiA8PCA1KSArIChjdGltZS0+dG1faG91ciA8PCAxMSkpKTsKKysKKysgIGVudHJ5LT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKysJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKysJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKysKKysgIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKysgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CisrCisrICAvKiBOb3csIHJlYWQgdGhlIGRpcmVjdG9yeSAqLworKworKyAgd2hpbGUoKGRlbnRyeSA9IHJlYWRkaXIocmRkaXIpKSkgeworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysgICAgY2hhciAqYnVmZmVyOworKyAgICAKKysgICAgaWYgKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpCisrICAgICAgY29udGludWU7CisrCisrICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKysgICAgaWYgKGRlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisrCisrICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZmlsZW5hbWUpICsgc3RybGVuKGRlbnRyeS0+ZF9uYW1lKSArIDMpOworKyAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrICAgIAorKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZmlsZW5hbWUsIGRlbnRyeS0+ZF9uYW1lKTsKKysgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworKyAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSAKKysJYWRkX2RpcmVjdG9yeShidWZmZXIsIG5ld2Rpcik7CisrICAgICAgZWxzZSBpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkgeworKwl1bnNpZ25lZCBjaGFyIGF0dHJpYiA9IGNoZWNrX2F0dHJpYl9maWxlKGZpbGVuYW1lLCBkZW50cnktPmRfbmFtZSk7CisrCWFkZF9maWxlKGJ1ZmZlciwgbmV3ZGlyLCBhdHRyaWIpOworKyAgICAgIH0KKysgICAgfQorKyAKKysgICAgZnJlZShidWZmZXIpOworKyAgfQorKyAgCisrICAvKiBOb3cgdGhhdCB0aGUgZW50aXJlIGRpcmVjdG9yeSBoYXMgYmVlbiB3cml0dGVuLCBnbyBhaGVhZCBhbmQgd3JpdGUgdGhlIGRpcmVjdG9yeQorKyAgICAgZW50cnkgYXMgd2VsbCAqLworKworKyAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhsYXN0X2NsdXN0ZXJfd3JpdHRlbik7CisrICBlbnRyeS0+c3RhcnRoaSA9IENUX0xFX1coKGxhc3RfY2x1c3Rlcl93cml0dGVuICYgMHhGRkZGMDAwMCkgPj4gMTYpOyAKKysgIGVudHJ5LT5zaXplID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKysgIAorKyAgcmVtYWluID0gZW50cnktPnNpemU7CisrICBkYXRhID0gKGNoYXIgKikgbmV3ZGlyLT50YWJsZTsKKysKKysgIHdoaWxlKHJlbWFpbikgeworKyAgICBpbnQgc2l6ZSA9IAorKyAgICAgIHJlbWFpbiA+IGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplID8gYnMuY2x1c3Rlcl9zaXplICogc2VjdG9yX3NpemUgOiByZW1haW47CisrCisrICAgIGludCBwb3MgPSAoc3RhcnRfZGF0YV9zZWN0b3IgKiBzZWN0b3Jfc2l6ZSkgKyBzaXplX3Jvb3RfZGlyOworKyAgICBwb3MgKz0gKGxhc3RfY2x1c3Rlcl93cml0dGVuIC0gMikgKiBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZTsKKysgICAgCisrICAgIHNlZWt0byhwb3MsICJhZGRfZGlyIik7CisrICAgIHdyaXRlYnVmKGRhdGEsIHNpemUsICJhZGRfZGlyIik7CisrICAgIAorKyAgICByZW1haW4gLT0gc2l6ZTsKKysgICAgZGF0YSArPSBzaXplOworKworKyAgICBtYXJrX0ZBVF9jbHVzdGVyKGxhc3RfY2x1c3Rlcl93cml0dGVuLCByZW1haW4gPyBsYXN0X2NsdXN0ZXJfd3JpdHRlbiArIDEgOiBGQVRfRU9GKTsgICAgICAKKysgICAgbGFzdF9jbHVzdGVyX3dyaXR0ZW4rKzsKKysgIH0KKysgIAorKyBleGl0X2FkZF9kaXI6CisrICBpZiAocmRkaXIpIGNsb3NlZGlyKHJkZGlyKTsKKysgIGlmIChuZXdkaXItPnRhYmxlKSBmcmVlKG5ld2Rpci0+dGFibGUpOworKyAgaWYgKG5ld2RpcikgZnJlZShuZXdkaXIpOworK30gIAorKyAgCisrLyogR2l2ZW4gYSBkaXJlY3RvcnksIGFkZCBhbGwgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlCisrICAgaW1hZ2UuICAKKysqLworKworK3N0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXJuYW1lKSAKKyt7CisrICBESVIgKmRpciA9IG9wZW5kaXIoZGlybmFtZSk7CisrICBzdHJ1Y3QgZGlyZW50ICplbnRyeSA9IDA7CisrICBzdHJ1Y3QgZGlyX2VudHJ5ICpuZXdkaXIgPSAwOworKworKyAgaWYgKCFkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdFxuIiwgZGlybmFtZSk7CisrICAgIHJldHVybjsKKysgIH0KKysgCisrICAvKiBDcmVhdGUgdGhlIHJvb3QgZGlyZWN0b3J5IHN0cnVjdHVyZSAtIHRoaXMgaXMgYSBiaXQgZGlmZmVyZW50IHRoZW4KKysgICAgIGFib3ZlLCBiZWNhdXNlIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgd2UganVzdCByZWZlciB0byBpdC4gKi8KKysKKysgIG5ld2RpciA9IChzdHJ1Y3QgZGlyX2VudHJ5ICopIGNhbGxvYygxLHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CisrCisrICBpZiAoIW5ld2RpcikgeworKyAgICBjbG9zZWRpcihkaXIpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBuZXdkaXItPmVudHJpZXMgPSByb290X2Rpcl9lbnRyaWVzOworKyAgbmV3ZGlyLT5yb290ID0gMTsKKysgIG5ld2Rpci0+Y291bnQgPSAwOworKyAgbmV3ZGlyLT50YWJsZSA9IHJvb3RfZGlyOworKworKyAgd2hpbGUoKGVudHJ5ID0gcmVhZGRpcihkaXIpKSkgeworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysgICAgY2hhciAqYnVmZmVyOworKyAgICAKKysgICAgaWYgKCFzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGVudHJ5LT5kX25hbWUsICIuLiIpKQorKyAgICAgIGNvbnRpbnVlOworKyAgICAKKysgICAgLyogRE9TIHdvdWxkbid0IGxpa2UgYSB0eXBpY2FsIHVuaXggLiAoZG90KSBmaWxlLCBzbyB3ZSBza2lwIHRob3NlIHRvbyAqLworKyAgICBpZiAoZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworKyAKKysgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihkaXJuYW1lKSArIHN0cmxlbihlbnRyeS0+ZF9uYW1lKSArIDMpOworKyAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrCisrICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKKysgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworKyAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSAKKysJYWRkX2RpcmVjdG9yeShidWZmZXIsIG5ld2Rpcik7CisrICAgICAgZWxzZSBpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkgeworKwl1bnNpZ25lZCBjaGFyIGF0dHJpYiA9IGNoZWNrX2F0dHJpYl9maWxlKGRpcm5hbWUsIGVudHJ5LT5kX25hbWUpOworKwlhZGRfZmlsZShidWZmZXIsIG5ld2RpciwgYXR0cmliKTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgZnJlZShidWZmZXIpOworKyAgfQorKworKyAgY2xvc2VkaXIoZGlyKTsKKysgIGlmIChuZXdkaXIpIGZyZWUobmV3ZGlyKTsKKyt9CisgCisgLyogUmVwb3J0IHRoZSBjb21tYW5kIHVzYWdlIGFuZCByZXR1cm4gYSBmYWlsdXJlIGVycm9yIGNvZGUgKi8KKyAKK0BAIC0xNDIzLDcgKzE5MDMsNyBAQAorICAgICAgICBbLW0gYm9vdC1tc2ctZmlsZV0gWy1uIHZvbHVtZS1uYW1lXSBbLWkgdm9sdW1lLWlkXSBbLUIgYm9vdGNvZGVdXG5cCisgICAgICAgIFstcyBzZWN0b3JzLXBlci1jbHVzdGVyXSBbLVMgbG9naWNhbC1zZWN0b3Itc2l6ZV0gWy1mIG51bWJlci1vZi1GQVRzXVxuXAorICAgICAgICBbLWggaGlkZGVuLXNlY3RvcnNdIFstRiBmYXQtc2l6ZV0gWy1yIHJvb3QtZGlyLWVudHJpZXNdIFstUiByZXNlcnZlZC1zZWN0b3JzXVxuXAorLSAgICAgICAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworKyAgICAgICBbLWQgZGlyZWN0b3J5XSAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworIH0KKyAKKyAvKgorQEAgLTE0NjMsNiArMTk0Myw4IEBACisgICBpbnQgYzsKKyAgIGNoYXIgKnRtcDsKKyAgIGNoYXIgKmxpc3RmaWxlID0gTlVMTDsKKysgIGNoYXIgKmRpcm5hbWUgPSBOVUxMOworKworICAgRklMRSAqbXNnZmlsZTsKKyAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgICBpbnQgaSA9IDAsIHBvcywgY2g7CitAQCAtMTQ4Myw3ICsxOTY1LDcgQEAKKyAgIHByaW50ZiAoIiVzICIgVkVSU0lPTiAiICgiIFZFUlNJT05fREFURSAiKVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAKKy0gIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6Uzp2OkI6IikpICE9IEVPRikKKysgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NkOmY6RjpJaTpsOm06bjpyOlI6czpTOnY6QjoiKSkgIT0gRU9GKQorICAgICAvKiBTY2FuIHRoZSBjb21tYW5kIGxpbmUgZm9yIG9wdGlvbnMgKi8KKyAgICAgc3dpdGNoIChjKQorICAgICAgIHsKK0BAIC0xNTA4LDYgKzE5OTAsMTAgQEAKKyAJY3JlYXRlID0gVFJVRTsKKyAJYnJlYWs7CisgCisrICBjYXNlICdkJzoKKysJZGlybmFtZSA9IG9wdGFyZzsKKysJYnJlYWs7CisrCisgICAgICAgY2FzZSAnZic6CQkvKiBmIDogQ2hvb3NlIG51bWJlciBvZiBGQVRzICovCisgCW5yX2ZhdHMgPSAoaW50KSBzdHJ0b2wgKG9wdGFyZywgJnRtcCwgMCk7CisgCWlmICgqdG1wIHx8IG5yX2ZhdHMgPCAxIHx8IG5yX2ZhdHMgPiA0KQorQEAgLTE4MTEsOCArMjI5NywxMCBAQAorICAgZWxzZSBpZiAobGlzdGZpbGUpCisgICAgIGdldF9saXN0X2Jsb2NrcyAobGlzdGZpbGUpOworIAorLSAgd3JpdGVfdGFibGVzICgpOwkJLyogV3JpdGUgdGhlIGZpbGUgc3lzdGVtIHRhYmxlcyBhd2F5ISAqLworIAorKyAgaWYgKGRpcm5hbWUpIGFkZF9yb290X2RpcmVjdG9yeShkaXJuYW1lKTsKKysKKysgIHdyaXRlX3RhYmxlcyAoKTsJCS8qIFdyaXRlIHRoZSBmaWxlIHN5c3RlbSB0YWJsZXMgYXdheSEgKi8gIAorICAgZXhpdCAoMCk7CQkJLyogVGVybWluYXRlIHdpdGggbm8gZXJyb3JzISAqLworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9tc2Rvc19mYXQxMl91bmRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlOGE3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0ZpeCBhIGNvbXBpbGF0aW9uIGVycm9yIGR1ZSB0byB1bmRlZmluZWQgTVNET1NfRkFUMTIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9ib290LmMub3JpZwkyMDA0LTEwLTE1IDA4OjUxOjQyLjM5NDcyNTE3NiAtMDYwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Jvb3QuYwkyMDA0LTEwLTE1IDA4OjQ5OjE2Ljc3Njg2MjQ1NiAtMDYwMAorQEAgLTE0LDYgKzE0LDkgQEAKKyAjaW5jbHVkZSAiaW8uaCIKKyAjaW5jbHVkZSAiYm9vdC5oIgorIAorKyNpZm5kZWYgTVNET1NfRkFUMTIKKysjZGVmaW5lIE1TRE9TX0ZBVDEyIDQwODQKKysjZW5kaWYKKyAKKyAjZGVmaW5lIFJPVU5EX1RPX01VTFRJUExFKG4sbSkgKChuKSAmJiAobSkgPyAobikrKG0pLTEtKChuKS0xKSUobSkgOiAwKQorICAgICAvKiBkb24ndCBkaXZpZGUgYnkgemVybyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL25vZmF0MzJfYXV0b3NlbGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhhNzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRkFUMzIgYXBwZWFycyB0byBiZSBicm9rZW4gd2hlbiB1c2VkIHdpdGggdGhlIC1kIG9wdGlvbiB0byBwb3B1bGF0ZSB0aGUgbXNkb3MKK2ltYWdlLiBUaGlzIGRpc2FibGVzIHRoZSBGQVQzMiBhdXRvc2VsZWN0aW9uIGNvZGUgd2hpY2ggbWVhbnMgd2UgZG9uJ3QgZ2V0Citicm9rZW4gaW1hZ2VzIHdpdGggdGhlIC1kIG9wdGlvbi4gSXQgY2FuIHN0aWxsIGJlIGVuYWJsZWQgb24gdGhlIGNvbW1hbmRsaW5lCithdCB0aGUgdXNlcnMgb3duIHJpc2suIFRoaXMgY2hhbmdlcyB1cyBiYWNrIHRvIHRoZSAyLjEwIHZlcnNpb24ncyBiZWhhdmlvdXIKK3doaWNoIHdhcyBrbm93biB0byB3b3JrIHdlbGwgZXZlbiB3aXRoIGxhcmdlIGltYWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZXBlbmRzIG9uIG90aGVyIHBhdGNoZXMgd2UgYXBwbHldCisKK1JQIDIwMTEvMTIvMTMKKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMTMgMTM6NTQ6MzcuNTM4NTA5MzkxICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMTMgMTM6NTU6MTAuMjU4NTA4NjMxICswMDAwCitAQCAtODA4LDEwICs4MDgsMTIgQEAKKyAgICAgICBicy5tZWRpYSA9IChjaGFyKSAweGY4OyAvKiBTZXQgdXAgdGhlIG1lZGlhIGRlc2NyaXB0b3IgZm9yIGEgaGFyZCBkcml2ZSAqLworICAgICAgIGJzLmRpcl9lbnRyaWVzWzBdID0gKGNoYXIpIDA7CS8qIERlZmF1bHQgdG8gNTEyIGVudHJpZXMgKi8KKyAgICAgICBicy5kaXJfZW50cmllc1sxXSA9IChjaGFyKSAyOworKy8qCisgICAgICAgaWYgKCFzaXplX2ZhdCAmJiBibG9ja3MqU0VDVE9SU19QRVJfQkxPQ0sgPiAxMDY0OTYwKSB7CisgCSAgaWYgKHZlcmJvc2UpIHByaW50ZigiQXV0by1zZWxlY3RpbmcgRkFUMzIgZm9yIGxhcmdlIGZpbGVzeXN0ZW1cbiIpOworIAkgIHNpemVfZmF0ID0gMzI7CisgICAgICAgfQorKyovCisgICAgICAgaWYgKHNpemVfZmF0ID09IDMyKSB7CisgCSAgLyogRm9yIEZBVDMyLCB0cnkgdG8gZG8gdGhlIHNhbWUgYXMgTSQncyBmb3JtYXQgY29tbWFuZDoKKyAJICAgKiBmcyBzaXplIDwgMjU2TTogMC41ayBjbHVzdGVycwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzIuMTEuYmIKQEAgLTAsMCArMSwzOCBAQAorIyBkb3Nmc3Rvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiRE9TIEZBVCBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kYW5pZWwtYmF1bWFubi5jaC9zb2Z0d2FyZS9kb3Nmc3Rvb2xzLyIKKworU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21rZG9zZnMvQ09QWUlORzttZDU9Y2JlNjdmMDhkNjg4M2JmZjU4N2Y2MTVmMGNjODFhYTgiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvJHtCUE59LyR7QlB9LnNyYy50YXIuZ3ovNDA3ZDQwNWFkZTQxMGY3NTk3ZDM2NGFiNWRjOGM5ZjYvJHtCUH0uc3JjLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21rZG9zZnMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsaWdubWVudF9oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb3Nmc3Rvb2xzLW1zZG9zX2ZzLXR5cGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9wb3B1bGF0ZWRfZG9zZnNfY3JlYXRpb24ucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDA3ZDQwNWFkZTQxMGY3NTk3ZDM2NGFiNWRjOGM5ZjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGVhYzZkMTIzODhiM2Q5ZWQ3ODY4NDUyOWMxYjBkOTM0NmZhMmFiYmU0MDZjNGQ0YTNlYjVhMDIzYzk4YTQ4NCIKKworIyBNYWtlZmlsZSBzZXRzIHRoaXMsIGJ1dCB3ZSBjbG9iYmVyIGl0cyBDRkxBR1MsIHNvCisjIGFkZCB0aGlzIGluIGhlcmUgdG8gZm9yIHN1cmUgYWxsb3cgZm9yIGJpZyBmaWxlcy4KKyMKK0NGTEFHU19hcHBlbmQgPSAiIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCitDRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLURfR05VX1NPVVJDRSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAiUFJFRklYPSR7RH0iICJTQklORElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0iIFwKKwkJICAgIk1BTkRJUj0ke0R9JHttYW5kaXJ9L21hbjgiIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMy4wLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYgpAQCAtMCwwICsxLDI0IEBACisjIGRvc2ZzdG9vbHMgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBDb3B5cmlnaHQgKEMpIDIwMTUsIFPDg8K2cmVuIEJyaW5rbWFubiA8c29lcmVuLmJyaW5rbWFubkBnbWFpbD4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiRE9TIEZBVCBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMiCisKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzL3JlbGVhc2VzL2Rvd25sb2FkL3YzLjAuMjgvZG9zZnN0b29scy0zLjAuMjgudGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjZhMDQ3YTZjNjUxODZiOWViYjE4NTM3MDlhZGIzNmRiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlOTU5MTMwNDRlY2YyNzE5YjYzZWExMTIxMjkxNzY0OTcwOWE2ZTUzMjA5YTcyZDYyMjEzNWFhYTg1MTdlZTIiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9zYmluZGlyfSIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0gJHtkb2NkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJQUkVGSVg9JHtEfSR7cHJlZml4fSIgIlNCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfSIgXAorCQkgICAiTUFORElSPSR7RH0ke21hbmRpcn0iICJET0NESVI9JHtEfSR7ZG9jZGlyfSIgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlYzJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jCkBAIC0wLDAgKzEsNzkgQEAKK1NVTU1BUlkgPSAiUGFja2FnZSBtYWludGVuYW5jZSBzeXN0ZW0gZnJvbSBEZWJpYW4iCitMSUNFTlNFID0gIkdQTHYyLjArIgorU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2Rwa2cvZHBrZ18ke1BWfS50YXIueHoiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaCIKKworREVQRU5EUyA9ICJ6bGliIGJ6aXAyIHBlcmwgbmN1cnNlcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlIGdldHRleHQtbmF0aXZlIHBlcmwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30geHogcnVuLXBvc3RpbnN0cyBwZXJsIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gInh6LW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwZXJsbmF0aXZlIHBrZ2NvbmZpZyBzeXN0ZW1kCisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ1NZU1RFTURfU0VSVklDRV8lcycgJSAocG4pLCAnZHBrZy1jb25maWd1cmUuc2VydmljZScpCit9CisKK2V4cG9ydCBQRVJMID0gIiR7YmluZGlyfS9wZXJsIgorUEVSTF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwiCisKK2V4cG9ydCBQRVJMX0xJQkRJUiA9ICIke2xpYmRpcn0vcGVybCIKK1BFUkxfTElCRElSX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0vcGVybC1uYXRpdmUvcGVybCIKKworRVhUUkFfT0VDT05GID0gIlwKKwkJLS1kaXNhYmxlLWRzZWxlY3QgXAorCQktLWVuYWJsZS1zdGFydC1zdG9wLWRhZW1vbiBcCisJCS0td2l0aC16bGliIFwKKwkJLS13aXRoLWJ6MiBcCisJCS0td2l0aG91dC1saWJsem1hIFwKKwkJLS13aXRob3V0LXNlbGludXggXAorCQkiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBUQVI9dGFyIgorCitkb19jb25maWd1cmUgKCkgeworICAgIGVjaG8gPj4gJHtTfS9tNC9jb21waWxlci5tNAorICAgIHNlZCAtaSAtZSAncyNQRVJMX0xJQkRJUj0uKiQjUEVSTF9MSUJESVI9IiR7bGliZGlyfS9wZXJsIiMnICR7U30vY29uZmlndXJlCisgICAgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtQTn0iID0gImRwa2ctbmF0aXZlIiBdOyB0aGVuCisJCSMgdXBkYXRlLWFsdGVybmF0aXZlcyBkb2Vzbid0IGhhdmUgYW4gb2ZmbGluZSBtb2RlCisJCXJtICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcworCQlzZWQgLWkgLWUgJ3N8XiMhLioke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsfCMhL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAke0R9JHtiaW5kaXJ9L2Rwa2ctKgorCWVsc2UKKwkJc2VkIC1pIC1lICdzfF4jIS4qJHtiaW5kaXJ9L3BlcmwtbmF0aXZlLiovcGVybHwjIS91c3IvYmluL2VudiBwZXJsfCcgJHtEfSR7YmluZGlyfS9kcGtnLSoKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnZmFsc2UnLCd0cnVlJyxkKX07dGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTVEVNRF9VTklURElSQCwke3N5c3RlbWRfdW5pdGRpcn0sZycgXAorCQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZHBrZy1jb25maWd1cmUuc2VydmljZQorCWZpCit9CisKK1BST1YgPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorUFJPVl9jbGFzcy1uYXRpdmUgPSAiIgorCitQUk9WSURFUyArPSAiJHtQUk9WfSIKKworUEFDS0FHRVMgPSsgInVwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyIKK0ZJTEVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyA9ICIke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kcGtnL2FsdGVybmF0aXZlcyAke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcyIKK1JQUk9WSURFU191cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2cgKz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1wZXJsIgorRklMRVNfJHtQTn0tcGVybCA9ICIke2xpYmRpcn0vcGVybCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTY3ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBkMTRmZmQ3ODY5OTNkYTYwY2E4NGM0ODEyZGE4YTY1OTRhOGM3NjRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE1OjQ4OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBXaGVuIHJ1bm5pbmcgZG9fcGFja2FnZV93cml0ZV9kZWIsIHdlIGhhdmUgdHJlZXMgb2YKKyBoYXJkbGlua2VkIGZpbGVzIHN1Y2ggYXMgdGhlIGRiZyBzb3VyY2UgZmlsZXMgaW4gJHtQTn0tZGJnLiBJZiBzb21ldGhpbmcKKyBtYWtlcyBhbm90aGVyIGNvcHkgb2Ygb25lIG9mIHRob3NlIGZpbGVzIChvciBkZWxldGVzIG9uZSksIHRoZSBudW1iZXIgb2YKKyBsaW5rcyBhIGZpbGUgaGFzIGNoYW5nZXMgYW5kIHRhciBjYW4gbm90aWNlIHRoaXMsIGUuZy46CisKK3wgREVCVUc6IEV4ZWN1dGluZyBweXRob24gZnVuY3Rpb24gZG9fcGFja2FnZV9kZWIKK3wgZHBrZy1kZWI6IGJ1aWxkaW5nIHBhY2thZ2UgYHNlZC1wdGVzdCcgaW4gYC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2VkLzQuMi4yLXIwL2RlcGxveS1kZWJzL2k1ODYvc2VkLXB0ZXN0XzQuMi4yLXIwLjNfaTM4Ni5kZWInLgorfCB0YXI6IC4vdXNyL2xpYi9zZWQvcHRlc3QvdGVzdHN1aXRlL3RzdC1yZWdleDI6IGZpbGUgY2hhbmdlZCBhcyB3ZSByZWFkIGl0Cit8IGRwa2ctZGViOiBlcnJvcjogc3VicHJvY2VzcyB0YXIgLWNmIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzIDEKKworVGFyIHJldHVybnMgYW4gZXJyb3Igb2YgMSB3aGVuIGZpbGVzICdjaGFuZ2UnIGFuZCBvdGhlciBlcnJvcnMgY29kZXMKK2luIG90aGVyIGVycm9yIGNhc2VzLiBXZSB0d2VhayBkcGtnLWRlYiBoZXJlIHNvIHRoYXQgaXQgaWdub3JlcyBhbiBleGl0Citjb2RlIG9mIDEgZnJvbSB0YXIuIFRoZSBmaWxlcyBkb24ndCByZWFsbHkgY2hhbmdlIChhbmQgd2UgaGF2ZSBsb2NraW5nIGluCitwbGFjZSB0byBhdm9pZCB0aGF0IGtpbmQgb2YgaXNzdWUpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvMy8yNworLS0tCisgZHBrZy1kZWIvYnVpbGQuYyB8IDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rwa2ctZGViL2J1aWxkLmMgYi9kcGtnLWRlYi9idWlsZC5jCitpbmRleCBlYTNkODYxLi4xNTg5OTI3IDEwMDY0NAorLS0tIGEvZHBrZy1kZWIvYnVpbGQuYworKysrIGIvZHBrZy1kZWIvYnVpbGQuYworQEAgLTQ1OCw3ICs0NTgsNyBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIGNoYXIgKmRlYmFyOworICAgY2hhciAqdGZidWY7CisgICBpbnQgYXJmZDsKKy0gIGludCBwMVsyXSwgcDJbMl0sIGd6ZmQ7CisrICBpbnQgcDFbMl0sIHAyWzJdLCBnemZkLCByYzsKKyAgIHBpZF90IGMxLCBjMjsKKyAKKyAgIC8qIERlY29kZSBvdXIgYXJndW1lbnRzLiAqLworQEAgLTUzOCw3ICs1MzgsOSBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIH0KKyAgIGNsb3NlKHAxWzBdKTsKKyAgIHN1YnByb2NfcmVhcChjMiwgXygiPGNvbXByZXNzPiBmcm9tIHRhciAtY2YiKSwgMCk7CistICBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgMCk7CisrICByYyA9IHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCBTVUJQUk9DX1JFVEVSUk9SKTsKKysgIGlmIChyYyAmJiByYyAhPSAxKQorKyAgICBvaHNoaXRlKF8oInN1YnByb2Nlc3MgJXMgcmV0dXJuZWQgZXJyb3IgZXhpdCBzdGF0dXMgJWQiKSwgInRhciAtY2YiLCByYyk7CisgCisgICBpZiAobHNlZWsoZ3pmZCwgMCwgU0VFS19TRVQpKQorICAgICBvaHNoaXRlKF8oImZhaWxlZCB0byByZXdpbmQgdGVtcG9yYXJ5IGZpbGUgKCVzKSIpLCBfKCJjb250cm9sIG1lbWJlciIpKTsKK0BAIC02MjYsNyArNjI4LDEwIEBAIGRvX2J1aWxkKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQorICAgLyogQWxsIGRvbmUsIGNsZWFuIHVwIHdhaXQgZm9yIHRhciBhbmQgPGNvbXByZXNzPiB0byBmaW5pc2ggdGhlaXIgam9iLiAqLworICAgY2xvc2UocDFbMV0pOworICAgc3VicHJvY19yZWFwKGMyLCBfKCI8Y29tcHJlc3M+IGZyb20gdGFyIC1jZiIpLCAwKTsKKy0gIHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCAwKTsKKysgIHJjID0gc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIFNVQlBST0NfUkVURVJST1IpOworKyAgaWYgKHJjICYmIHJjICE9IDEpCisrICAgIG9oc2hpdGUoXygic3VicHJvY2VzcyAlcyByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAlZCIpLCAidGFyIC1jZiIsIHJjKTsKKysKKyAgIC8qIE9rYXksIHdlIGhhdmUgZGF0YS50YXIgYXMgd2VsbCBub3csIGFkZCBpdCB0byB0aGUgYXIgd3JhcHBlci4gKi8KKyAgIGlmIChkZWJfZm9ybWF0Lm1ham9yID09IDIpIHsKKyAgICAgY2hhciBkYXRhbWVtYmVyWzE2ICsgMV07CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxYTZhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYjRlYTU0MTU4YzM5OTg3NGUxMjM5NGViYzkxYWZlOTg5NTQ2OTVlMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNjoxNjoxNiArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gQWRhcHQgdG8gbGludXgtd3JzIGtlcm5lbCB2ZXJzaW9uLCB3aGljaCBoYXMgY2hhcmFjdGVyCisgJ18nIGluc2lkZS4gUmVtb3ZlIHRoZSBmaXJzdC1jaGFyLWRpZ2l0LWNoZWNrIChhcyB0aGUgMS4xNS44LjUgdmVyc2lvbiBkb2VzKS4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYi9kcGtnL3BhcnNlaGVscC5jIHwgNiArKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2Rwa2cvcGFyc2VoZWxwLmMgYi9saWIvZHBrZy9wYXJzZWhlbHAuYworaW5kZXggNzliMjkwOC4uNzc1OGFhNSAxMDA2NDQKKy0tLSBhL2xpYi9kcGtnL3BhcnNlaGVscC5jCisrKysgYi9saWIvZHBrZy9wYXJzZWhlbHAuYworQEAgLTIzNSwxNCArMjM1LDEyIEBAIHBhcnNldmVyc2lvbihzdHJ1Y3QgZHBrZ192ZXJzaW9uICpydmVyc2lvbiwgY29uc3QgY2hhciAqc3RyaW5nLAorIAorICAgLyogWFhYOiBXb3VsZCBiZSBmYXN0ZXIgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGNpc3ZlcnNpb24gYW5kIGNpc3JldmlzaW9uLiAqLworICAgcHRyID0gcnZlcnNpb24tPnZlcnNpb247CistICBpZiAoKnB0ciAmJiAhY19pc2RpZ2l0KCpwdHIrKykpCistICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygidmVyc2lvbiBudW1iZXIgZG9lcyBub3Qgc3RhcnQgd2l0aCBkaWdpdCIpKTsKKyAgIGZvciAoOyAqcHRyOyBwdHIrKykgeworLSAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfjoiLCAqcHRyKSA9PSBOVUxMKQorKyAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfjpfIiwgKnB0cikgPT0gTlVMTCkKKyAgICAgICByZXR1cm4gZHBrZ19wdXRfd2FybihlcnIsIF8oImludmFsaWQgY2hhcmFjdGVyIGluIHZlcnNpb24gbnVtYmVyIikpOworICAgfQorICAgZm9yIChwdHIgPSBydmVyc2lvbi0+cmV2aXNpb247ICpwdHI7IHB0cisrKSB7CistICAgIGlmICghY19pc2RpZ2l0KCpwdHIpICYmICFjX2lzYWxwaGEoKnB0cikgJiYgc3RyY2hyKCIuK34iLCAqcHRyKSA9PSBOVUxMKQorKyAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfl8iLCAqcHRyKSA9PSBOVUxMKQorICAgICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygiaW52YWxpZCBjaGFyYWN0ZXIgaW4gcmV2aXNpb24gbnVtYmVyIikpOworICAgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDI0MjI5OTcxNDkyNTE1YjY0YzgxZThjNjM5MmU1ZGZiZGMyMmI0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6MjU6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIE91ciBwcmUvcG9zdGluc3RzIGV4cGVjdCAkRCB0byBiZSBzZXQgd2hlbiBydW5uaW5nIGluIGEKKyBzeXNyb290IGFuZCBkb24ndCBleHBlY3QgYSBjaHJvb3QuIFRoaXMgbWF0Y2hlcyB1cCBvdXIgc3lzdGVtIGV4cGVjdGF0aW9ucworIHdpdGggd2hhdCBkcGtnIGRvZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTEvMTIvMDcKKy0tLQorIHNyYy9zY3JpcHQuYyB8IDMxICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zY3JpcHQuYyBiL3NyYy9zY3JpcHQuYworaW5kZXggYTk1ODE0NS4uMjRjNDlmOSAxMDA2NDQKKy0tLSBhL3NyYy9zY3JpcHQuYworKysrIGIvc3JjL3NjcmlwdC5jCitAQCAtMTAwLDM2ICsxMDAsOSBAQCBtYWludHNjcmlwdF9wcmVfZXhlYyhzdHJ1Y3QgY29tbWFuZCAqY21kKQorIAlzaXplX3QgaW5zdGRpcmwgPSBzdHJsZW4oaW5zdGRpcik7CisgCisgCWlmICgqaW5zdGRpcikgeworLQkJaWYgKHN0cm5jbXAoYWRtaW5kaXIsIGluc3RkaXIsIGluc3RkaXJsKSAhPSAwKQorLQkJCW9oc2hpdChfKCJhZG1pbmRpciBtdXN0IGJlIGluc2lkZSBpbnN0ZGlyIGZvciBkcGtnIHRvIHdvcmsgcHJvcGVybHkiKSk7CistCQlpZiAoc2V0ZW52KCJEUEtHX0FETUlORElSIiwgYWRtaW5kaXIgKyBpbnN0ZGlybCwgMSkgPCAwKQorLQkJCW9oc2hpdGUoXygidW5hYmxlIHRvIHNldGVudiBmb3Igc3VicHJvY2Vzc2VzIikpOworLQorLQkJaWYgKGNocm9vdChpbnN0ZGlyKSkKKy0JCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaHJvb3QgdG8gJyUuMjUwcyciKSwgaW5zdGRpcik7CistCX0KKy0JLyogU3dpdGNoIHRvIGEga25vd24gZ29vZCBkaXJlY3RvcnkgdG8gZ2l2ZSB0aGUgbWFpbnRhaW5lciBzY3JpcHQKKy0JICogYSBzYW5lciBlbnZpcm9ubWVudCwgYWxzbyBuZWVkZWQgYWZ0ZXIgdGhlIGNocm9vdCgpLiAqLworLQlpZiAoY2hkaXIoIi8iKSkKKy0JCW9oc2hpdGUoXygiZmFpbGVkIHRvIGNoZGlyIHRvICclLjI1NXMnIiksICIvIik7CistCWlmIChkZWJ1Z19oYXNfZmxhZyhkYmdfc2NyaXB0cykpIHsKKy0JCXN0cnVjdCB2YXJidWYgYXJncyA9IFZBUkJVRl9JTklUOworLQkJY29uc3QgY2hhciAqKmFyZ3YgPSBjbWQtPmFyZ3Y7CistCistCQl3aGlsZSAoKisrYXJndikgeworLQkJCXZhcmJ1Zl9hZGRfY2hhcigmYXJncywgJyAnKTsKKy0JCQl2YXJidWZfYWRkX3N0cigmYXJncywgKmFyZ3YpOworLQkJfQorLQkJdmFyYnVmX2VuZF9zdHIoJmFyZ3MpOworLQkJZGVidWcoZGJnX3NjcmlwdHMsICJmb3JrL2V4ZWMgJXMgKCVzICkiLCBjbWQtPmZpbGVuYW1lLAorLQkJICAgICAgYXJncy5idWYpOworLQkJdmFyYnVmX2Rlc3Ryb3koJmFyZ3MpOworKwkJc2V0ZW52KCJEIiwgaW5zdGRpciwgMSk7CisgCX0KKy0JaWYgKCFpbnN0ZGlybCkKKy0JCXJldHVybiBjbWQtPmZpbGVuYW1lOworLQorLQlhc3NlcnQoc3RybGVuKGNtZC0+ZmlsZW5hbWUpID49IGluc3RkaXJsKTsKKy0JcmV0dXJuIGNtZC0+ZmlsZW5hbWUgKyBpbnN0ZGlybDsKKysJcmV0dXJuIGNtZC0+ZmlsZW5hbWU7CisgfQorIAorIC8qKgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Yzg1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGFkYjZiZmQwZmVlY2VhZjAzMGRmMGRlYmUzMzQzZDdmNzNlNzA4YTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6Mjc6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzVdIFRoZSBsdXRpbWVzIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IgYWxsCisgc3lzdGVtcy4KKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgc3JjL2FyY2hpdmVzLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9hcmNoaXZlcy5jIGIvc3JjL2FyY2hpdmVzLmMKK2luZGV4IGJmZjVmMTQuLmI3MTEwMTMgMTAwNjQ0CistLS0gYS9zcmMvYXJjaGl2ZXMuYworKysrIGIvc3JjL2FyY2hpdmVzLmMKK0BAIC00NDksOCArNDQ5LDkgQEAgdGFyb2JqZWN0X3NldF9tdGltZShzdHJ1Y3QgdGFyX2VudHJ5ICp0ZSwgY29uc3QgY2hhciAqcGF0aCkKKyAKKyAgIGlmICh0ZS0+dHlwZSA9PSBUQVJfRklMRVRZUEVfU1lNTElOSykgeworICNpZmRlZiBIQVZFX0xVVElNRVMKKy0gICAgaWYgKGx1dGltZXMocGF0aCwgdHYpICYmIGVycm5vICE9IEVOT1NZUykKKysvKiAgICBpZiAobHV0aW1lcyhwYXRoLCB0dikgJiYgZXJybm8gIT0gRU5PU1lTKQorICAgICAgIG9oc2hpdGUoXygiZXJyb3Igc2V0dGluZyB0aW1lc3RhbXBzIG9mICclLjI1NXMnIiksIHBhdGgpOworKyovCisgI2VuZGlmCisgICB9IGVsc2UgeworICAgICBpZiAodXRpbWVzKHBhdGgsIHR2KSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmU5NmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAwYWQ3YmJhODBkNWI5MDM1MDg5ZmYyYjJmNzdhNzc0YjViMjAxOTE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjI4OjU5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNS81XSBkcGtnLWNvbXBpbGVyLm00OiByZW1vdmUgLVd2bGEKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUmVtb3ZlIHRoZSAtV3ZsYSBmbGFnIGZyb20gdGhlIHNldCBvZiBjb21waWxlciB3YXJuaW5nIGZsYWdzLCBzaW5jZSBnY2MKK29uIG9sZCBob3N0IHN5c3RlbXMgc3VjaCBhcyBDZW50T1MgNS44IGRvZXNuJ3Qgc3VwcG9ydCBpdCwgYW5kIGl0CitjYXVzZXMgYSBidWlsZCBlcnJvciBmb3IgZHBrZy1uYXRpdmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEb25uIFNlZWxleSA8ZG9ubi5zZWVsZXlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtNC9kcGtnLWNvbXBpbGVyLm00IHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL200L2Rwa2ctY29tcGlsZXIubTQgYi9tNC9kcGtnLWNvbXBpbGVyLm00CitpbmRleCA2ODI4NTdjLi4yM2VkN2QwIDEwMDY0NAorLS0tIGEvbTQvZHBrZy1jb21waWxlci5tNAorKysrIGIvbTQvZHBrZy1jb21waWxlci5tNAorQEAgLTUyLDcgKzUyLDYgQEAgQUNfREVGVU4oW0RQS0dfQ0hFQ0tfQ09NUElMRVJfV0FSTklOR1NdLCBbCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XbG9naWNhbC1vcF0pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XbG9naWNhbC1ub3QtcGFyZW50aGVzZXNdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV3N3aXRjaC1ib29sXSkKKy0gIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVd2bGFdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2luaXQtc2VsZl0pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1Xd3JpdGUtc3RyaW5nc10pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XY2FzdC1hbGlnbl0pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMjc1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0F1dGhvcjogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorRGF0ZTogICBXZWQgQXByIDggMTg6MDg6MTQgMjAxNSArMDUzMAorCitbUEFUQ0hdIGFkZCBhcm1lYiB0cmlwbGV0IGVudHJ5IGludG8gdHJpcGxldHRhYmxlLgorCitDcm9zcy1jb21wbGluZyBkcGtnIGFwcGxpY2F0aW9uIGZvciBhcm1lYiBmYWlscyB3aXRoIGJlbG93IGVycm9yCitkdXJpbmcgY29uZmlndXJlIHRhc2ssCisKKyhzbmlwKQorIGNvbmZpZ3VyZToyMzE0MTogY2hlY2tpbmcgZHBrZyBjcHUgdHlwZQorIGNvbmZpZ3VyZToyMzE0ODogcmVzdWx0OiBhcm1lYgorIGNvbmZpZ3VyZToyMzE1MDogV0FSTklORzogYXJtZWIgbm90IGZvdW5kIGluIGNwdXRhYmxlCisgY29uZmlndXJlOjIzMTYyOiBjaGVja2luZyBkcGtnIG9wZXJhdGluZyBzeXN0ZW0gdHlwZQorIGNvbmZpZ3VyZToyMzE2OTogcmVzdWx0OiBsaW51eC1nbnVlYWJpCisgY29uZmlndXJlOjIzMTcxOiBXQVJOSU5HOiBsaW51eC1nbnVlYWJpIG5vdCBmb3VuZCBpbiBvc3RhYmxlCisgY29uZmlndXJlOjIzMTgzOiBjaGVja2luZyBkcGtnIGFyY2hpdGVjdHVyZSBuYW1lCisgY29uZmlndXJlOjIzMTg5OiBlcnJvcjogY2Fubm90IGRldGVybWluZSBob3N0IGRwa2cgYXJjaGl0ZWN0dXJlCistLSBDVVQgLS0KKwordGhlIHJlcXVpcmVkIGNvbWJpbmF0aW9uIG9mICJnbnVlYWJpLWxpbnV4LWFybWViIiB3YXMgbm90IGZvdW5kIGluCit0aGUgdHJpcGxldHRhYmxlIGZpbGUgdGhlcmVieSByZXR1cm5pbmcgZHBrZ19hcmNoIGFzCitlbXB0eSBpbiBjb25maWd1cmUgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorCitkaWZmIC1OYXVycCBkcGtnLTEuMTcuMjFfb3JnL3RyaXBsZXR0YWJsZSBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCistLS0gZHBrZy0xLjE3LjIxX29yZy90cmlwbGV0dGFibGUJMjAxNS0wNC0wOCAxNzowODo1Mi4zNzA3NTkxNzEgKzA1MzAKKysrKyBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCTIwMTUtMDQtMDggMTc6MDk6MTIuNDA2NzUyMDgxICswNTMwCitAQCAtOSw2ICs5LDcgQEAgbXVzbGVhYmloZi1saW51eC1hcm0JbXVzbC1saW51eC1hcm1oZgorIG11c2wtbGludXgtPGNwdT4JbXVzbC1saW51eC08Y3B1PgorIGdudWVhYmloZi1saW51eC1hcm0JYXJtaGYKKyBnbnVlYWJpLWxpbnV4LWFybQlhcm1lbAorK2dudWVhYmktbGludXgtYXJtZWIJYXJtZWIKKyBnbnVhYmluMzItbGludXgtbWlwczY0ZWwJbWlwc24zMmVsCisgZ251YWJpbjMyLWxpbnV4LW1pcHM2NAltaXBzbjMyCisgZ251YWJpNjQtbGludXgtbWlwczY0ZWwJbWlwczY0ZWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ0YzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hcmNoX3BtLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2NvbmZpZ3VyZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBwcm9wZXIgY3B1LCBvcywgb3IKK2FyY2hpdGVjdHVyZSBmb3IgbWlwczY0LCBhbmQgcG9zc2libHkgb3RoZXIgYXJjaCdzCitiZWNhdXNlIG9mIGZhdWx0eSBjb2RlIGFkZGVkIHRvIEFyY2gucG0gaW4gdGhlIGxhdGVzdAorcmVsZWFzZSBmcm9tIHVwc3RyZWFtLiAgV2UgcmVtb3ZlIHRoYXQgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworCistLS0gYS9zY3JpcHRzL0Rwa2cvQXJjaC5wbQorKysrIGIvc2NyaXB0cy9EcGtnL0FyY2gucG0KK0BAIC0yMzMsOSArMjMzLDYgQEAgc3ViIHJlYWRfdHJpcGxldHRhYmxlKCkKKyAJCSAgICAobXkgJGR0ID0gJGRlYnRyaXBsZXQpID1+IHMvPGNwdT4vJF9jcHUvOworIAkJICAgIChteSAkZGEgPSAkZGViYXJjaCkgPX4gcy88Y3B1Pi8kX2NwdS87CisgCistCQkgICAgbmV4dCBpZiBleGlzdHMgJGRlYmFyY2hfdG9fZGVidHJpcGxldHskZGF9CistCQkgICAgICAgICBvciBleGlzdHMgJGRlYnRyaXBsZXRfdG9fZGViYXJjaHskZHR9OworLQorIAkJICAgICRkZWJhcmNoX3RvX2RlYnRyaXBsZXR7JGRhfSA9ICRkdDsKKyAJCSAgICAkZGVidHJpcGxldF90b19kZWJhcmNoeyRkdH0gPSAkZGE7CisgCQl9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiMDc4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZHBrZy1jb25maWd1cmUuc2VydmljZQpAQCAtMCwwICsxLDE3IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPWRwa2cgZmlyc3QgYm9vdCBjb25maWd1cmUKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9wb3N0aW5zdAorRXhlY1N0YXJ0PS1AQkFTRV9CSU5ESVJAL3NoIC1jICIgaWYgWyAkUE9TVElOU1RfTE9HR0lORyA9ICcxJyBdOyB0aGVuIEBCSU5ESVJAL2Rwa2cgLS1jb25maWd1cmUgLWEgPiAkTE9HRklMRSAyPiYxOyBlbHNlIEBCSU5ESVJAL2Rwa2cgLS1jb25maWd1cmUgLWE7IGZpIgorRXhlY1N0YXJ0UG9zdD1AQkFTRV9CSU5ESVJAL3N5c3RlbWN0bCBkaXNhYmxlIGRwa2ctY29uZmlndXJlLnNlcnZpY2UKK1N0YW5kYXJkT3V0cHV0PXN5c2xvZworUmVtYWluQWZ0ZXJFeGl0PU5vCisKK1tJbnN0YWxsXQorV2FudGVkQnk9YmFzaWMudGFyZ2V0CitXYW50ZWRCeT1zeXNpbml0LnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MzMxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2Rwa2cgZGVmaW5lczoKKyNkZWZpbmUgRFBLR19CRUdJTl9ERUNMUwlleHRlcm4gIkMiIHsKKworVGhhdCBtYWtlcyBoZWFkZXIgY3N0ZGxpYiBpbmNsdWRlZCBpbiBhIGV4dGVybiAiQyIgYmxvY2sgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAorYnkgZ2NjIDQuOC4gSXQgZmFpbHMgb24gRmVkb3JhIDE5OgorCisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6IEluIGZ1bmN0aW9uIOKAmGxvbmcgbG9uZyBpbnQgc3RkOjphYnMobG9uZyBsb25nIGludCnigJk6CisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6MTc0OjIwOiBlcnJvcjogZGVjbGFyYXRpb24gb2YgQyBmdW5jdGlvbiDigJhsb25nIGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgbG9uZyBpbnQp4oCZIGNvbmZsaWN0cyB3aXRoCisgICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX19idWlsdGluX2xsYWJzIChfX3gpOyB9CisgICAgICAgICAgICAgICAgICAgIF4KKy91c3IvaW5jbHVkZS9jKysvNC44LjEvY3N0ZGxpYjoxNjY6MzogZXJyb3I6IHByZXZpb3VzIGRlY2xhcmF0aW9uIOKAmGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgaW50KeKAmSBoZXJlCisgICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIF9fYnVpbHRpbl9sYWJzKF9faSk7IH0KKyAgIF4KKworTW92ZSBpbmNsdWRlIGdldHRleHQuaCBvdXQgb2YgdGhlIGV4dGVybiAiQyIgYmxvY2sgdG8gZml4IHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gZHBrZy0xLjE3LjEvbGliL2Rwa2cvaTE4bi5oLm9yaWcJMjAxMy0wOC0xMyAxNzozMToyOC44NzA5MzU1NzMgKzA4MDAKKysrKyBkcGtnLTEuMTcuMS9saWIvZHBrZy9pMThuLmgJMjAxMy0wOC0xMyAxNzozMTozNy44OTMwNjUyNDkgKzA4MDAKK0BAIC0yMyw4ICsyMyw2IEBACisgCisgI2luY2x1ZGUgPGRwa2cvbWFjcm9zLmg+CisgCistRFBLR19CRUdJTl9ERUNMUworLQorIC8qKgorICAqIEBkZWZncm91cCBpMThuIEludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQKKyAgKiBAaW5ncm91cCBkcGtnLWludGVybmFsCitAQCAtMzMsNiArMzEsOCBAQAorIAorICNpbmNsdWRlIDxnZXR0ZXh0Lmg+CisgCisrRFBLR19CRUdJTl9ERUNMUworKworIC8qIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGlzIGJlY2F1c2UgcGdldHRleHQoKSB1c2VzIExDX01FU1NBR0VTLCBidXQgbGliaW50bC5oCisgICogd2hpY2ggZ2V0cyBwdWxsZWQgYnkgZ2V0dGV4dC5oIG9ubHkgaW5jbHVkZXMgaXQgaWYgYnVpbGRpbmcgb3B0aW1pemVkLiAqLworICNpbmNsdWRlIDxsb2NhbGUuaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2YjhhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK0NlbnRPUyA1Ljgga2VybmVscyBhbmQgaGVhZGVycyBzdXBwb3J0IHRoZSBzeW5jX2ZpbGVfcmFuZ2UoKSBzeXN0ZW0gY2FsbCwKK2J1dCBnbGliYyAyLjUgZG9lc24ndCBwcm92aWRlIHRoZSBzeXNjYWxsIHN0dWIuICBJdCBhcHBlYXJzIHRoYXQgdGhpcworcHJvYmxlbSBpcyBrbm93biBidXQgd2lsbCBuZXZlciBiZSBmaXhlZDoKKworICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTUxODU4MQorCisgIEJ1ZyA1MTg1ODEgLSBbUkhFTDVdIGdsaWJjIG1pc3NlcyBzeW5jX2ZpbGVfcmFuZ2Ugc3lzY2FsbCBpbnRlcmZhY2UgCisKKyAgU3RhdHVzOiAgICAgICBDTE9TRUQgQ0FOVEZJWCAKKyAgTGFzdCBDbG9zZWQ6ICAyMDA5LTExLTIyIDIyOjE5OjU1CisKKyAgS2lyYnkgWmhvdSAyMDA5LTA4LTIwIDIzOjM3OjU1IEVEVAorCisgIERlc2NyaXB0aW9uIG9mIHByb2JsZW06CisKKyAgZ2xpYmMgbWlzc2VzIHN5bmNfZmlsZV9yYW5nZSBzeXNjYWxsIGludGVyZmFjZS4gIFRoZSBoZWFkZXIgZmlsZSBhbmQKKyAgbWFuIHBhZ2UgYm90aCBzYXkgJ3N5bmNfZmlsZV9yYW5nZScgc2hvdWxkIGV4aXN0LiAgRnJvbSBtYW4gcGFnZSwKKyAgc3luY19maWxlX3JhbmdlIHNob3VsZCBleGlzdCBzaW5jIGtlcm5lbC0yLjYuMTcKKworICBBbmRyZWFzIFNjaHdhYiAyMDA5LTA4LTIxIDAzOjI0OjI0IEVEVAorCisgIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgdG8gZ2xpYmMgMi42LCBhbmQgY2Fubm90IGJlIGJhY2twb3J0ZWQgZHVlIHRvCisgIEFCSSBicmVha2FnZS4gIFlvdSBjYW4gYWx3YXlzIGZhbGwgYmFjayB0byBzeXNjYWxsKDMpLgorCisgIFVscmljaCBEcmVwcGVyIDIwMDktMTEtMjIgMjI6MTk6NTUgRVNUCisKKyAgQXMgY29tbWVudCAjMSBzYXlzLCBubyBjaGFuY2UgdG8gYmFja3BvcnQgdGhpcy4KKworICBTZWUgdGhlIHN5c2NhbGwgbWFuIHBhZ2UgZm9yIGluc3RydWN0aW9ucy4KKworICBKb24gRSAyMDEwLTAzLTE5IDEwOjMyOjM3IEVEVAorCisgIHRoZW4gd2h5IGRvY3VtZW50IGl0IGlmIGl0J3MgYnJva2VuIGFuZCB5b3UncmUgbm90IGdvaW5nIHRvIGZpeCBpdD8KKyAgLi4gbWlnaHQgd2FudCB0byBGVEZNIG92ZXIgYXQgc3luY19maWxlX3JhbmdlKDIpIC0gaW4gdGhlIG1lYW50aW1lIC0KKyAgYm9ycm93aW5nIGZyb20gZ2xpYmMgMi42IC4uIGFueSB0aG91Z2h0cyBvbiB0aGlzIGltcGxlbWVudGF0aW9uIGZvciBhCisgIGhhY2t5IHdvcmthcm91bmQgZm9yIHRob3NlIHN0aWxsIG9uIHlvdXIgImFuY2llbnQgcmVsZWFzZXMiIC4uIChlZzoKKyAgUkhFTDUuMyk/OgorCisgICNpZmRlZiBVTElfV09OVF9GSVhfVEhJU19JTl9HTElCQzIuNQorICAjZGVmaW5lIE5SX3N5bmNfZmlsZV9yYW5nZSAyNzcKKyAgaW50IHN5bmNfZmlsZV9yYW5nZSAoaW50IGZkLCBfX29mZjY0X3QgZnJvbSwgX19vZmY2NF90IHRvLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisgIHsKKyAgICByZXR1cm4gc3lzY2FsbCAoTlJfc3luY19maWxlX3JhbmdlLCBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTE9OR19MT05HX1BBSVIgKChsb25nKSAoZnJvbSA+PiAzMiksIChsb25nKSBmcm9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTE9OR19MT05HX1BBSVIgKChsb25nKSAodG8gPj4gMzIpLCAobG9uZykgdG8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICB9CisgICNlbmRpZgorCisgIGFzc3VtaW5nIG9mIGNvdXJzZSB0aGF0IHlvdSdyZSBvbiBhbiB4ODZfNjQgYW5kIGluY2x1ZGUvYXNtLQorICB4ODZfNjQvdW5pc3RkLmggaGFzIHRoZSBjb3JyZWN0IGVudHJ5CisKKyAgKGZ3aXcgLSBmaW8gaXMgc3RhcnRpbmcgdG8gdXNlIHRoaXMgbm93KQorCitSYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdXNpbmcgc3lzY2FsbCgpLAord2UgdGFrZSB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgcm91dGUgYW5kIGlnbm9yZSBoZWFkZXIgc3VwcG9ydCBmb3IKK3N5bmNfZmlsZV9yYW5nZSgpIGZsYWdzIHdoZW4gdGhlIGdsaWJjIHZlcnNpb24gaXMgPD0gMi41LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2V2ZXJ5b25lIGVsc2UgYnVpbGRzIG9uIG5ld2VyIGhvc3RzIDotKV0KKworU2lnbmVkLW9mZi1ieTogRG9ubiBTZWVsZXkgPGRvbm4uc2VlbGV5QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBMZWkgTGl1IDxsZWkubGl1MkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2FyY2hpdmVzLmMgfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9zcmMvYXJjaGl2ZXMuYworKysrIGIvc3JjL2FyY2hpdmVzLmMKK0BAIC03NSw3ICs3NSw3IEBACisgICAvKiBJZ25vcmUgdGhlIHJldHVybiBjb2RlIGFzIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gYW4KKyAgICAqIGFzeW5jaHJvbm91cyBoaW50IGZvciB0aGUga2VybmVsLCB3ZSBhcmUgZG9pbmcgYW4gZnN5bmMoKSBsYXRlciBvbgorICAgICogYW55d2F5LiAqLworLSNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XUklURSkKKysjaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpICYmIF9fR0xJQkNfUFJFUkVRKDIsIDYpCisgICBzeW5jX2ZpbGVfcmFuZ2UoZmQsIDAsIDAsIFNZTkNfRklMRV9SQU5HRV9XUklURSk7CisgI2VsaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBRFZJU0UpCisgICBwb3NpeF9mYWR2aXNlKGZkLCAwLCAwLCBQT1NJWF9GQURWX0RPTlRORUVEKTsKK0BAIC0xMTc5LDcgKzExNzksNyBAQAorICAgcmV0dXJuIDA7CisgfQorIAorLSNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSkKKysjaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpICYmIF9fR0xJQkNfUFJFUkVRKDIsIDYpCisgc3RhdGljIHZvaWQKKyB0YXJfd3JpdGViYWNrX2JhcnJpZXIoc3RydWN0IGZpbGVpbmxpc3QgKmZpbGVzLCBzdHJ1Y3QgcGtnaW5mbyAqcGtnKQorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC1ydU4gZHBrZy0xLjE1LjguNS1vcmlnL01ha2VmaWxlLmFtIGRwa2ctMS4xNS44LjUvTWFrZWZpbGUuYW0KKy0tLSBkcGtnLTEuMTUuOC41LW9yaWcvTWFrZWZpbGUuYW0JMjAxMC0xMC0wOCAxMjoyNzoxNS4wNDIwODM3MDMgKzA4MDAKKysrKyBkcGtnLTEuMTUuOC41L01ha2VmaWxlLmFtCTIwMTAtMTAtMDggMTI6Mjc6MjcuNzU1MTQ4MjI4ICswODAwCitAQCAtMTIsOCArMTIsNyBAQAorIAl1dGlscyBcCisgCSQoTUFZQkVfRFNFTEVDVCkgXAorIAlzY3JpcHRzIFwKKy0JcG8gXAorLQltYW4KKysJcG8KKyAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0MDhmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorYnVzeWJveC0xLjE5LjQgdGFyIHV0aWxpdHkgZG9lc24ndCBzdXBwb3J0IC0td2FybmluZz1uby10aW1lc3RhbXAKKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitJbmRleDogZHBrZy0xLjE3LjEvZHBrZy1kZWIvZXh0cmFjdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZHBrZy0xLjE3LjEub3JpZy9kcGtnLWRlYi9leHRyYWN0LmMKKysrKyBkcGtnLTEuMTcuMS9kcGtnLWRlYi9leHRyYWN0LmMKK0BAIC0zMTgsNyArMzE4LDYgQEAgZXh0cmFjdGhhbGYoY29uc3QgY2hhciAqZGViYXIsIGNvbnN0IGNoYQorIAorICAgICAgIGNvbW1hbmRfYWRkX2FyZygmY21kLCAiLWYiKTsKKyAgICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi0iKTsKKy0gICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi0td2FybmluZz1uby10aW1lc3RhbXAiKTsKKyAKKyAgICAgICBtX2R1cDIocDJbMF0sMCk7CisgICAgICAgY2xvc2UocDJbMF0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNmYTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBkcGtnLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub21hbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FyY2hfcG0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgXAorICAgICAgICAgICAgZmlsZTovL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjNiOWQ4NjkwODFlYzQ5YWRlZWY2YzVmZjYyZDY1NzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTE0ODRmMmE3M2QwMjdkNjk2ZTcyMGE2MDM4MGRiNzE5NzhiYjVjMDZjZDg4ZmUzMGMyOTFlMDY5YWM0NTdhNCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDliYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJFeHQyIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEV4dDIgRmlsZXN5c3RlbSBVdGlsaXRpZXMgKGUyZnNwcm9ncykgY29udGFpbiBhbGwgb2YgdGhlIHN0YW5kYXJkIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcsIFwKK2ZpeGluZywgY29uZmlndXJpbmcgLCBhbmQgZGVidWdnaW5nIGV4dDIgZmlsZXN5c3RlbXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyICYgQlNEICYgTUlUIgorTElDRU5TRV9lMmZzcHJvZ3MtZTJmc2NrID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtbWtlMmZzID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtZnNjayA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLXR1bmUyZnMgPSAiR1BMdjIiCitMSUNFTlNFX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNDhmMjFkNzY1Yjg3NWJkMTA0MDA5NzVkMTJjMWNhMiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9leHQyZnMvZXh0MmZzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT01OTZhOGRlZGNiNGU3MzFjNmIyMWM3YTQ2ZmJhNmJlZiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9lMnAvZTJwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT03O21kNT04YTc0YWRlOGY5ZDY1MDk1ZDcwZWYyZDRiZjQ4ZTM2YSBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dWlkL3V1aWQuaC5pbjtiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT1kYmI4MDc5ZTExNGE1Zjg0MTkzNGI5OWU1OWM4ODIwYSBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dWlkL0NPUFlJTkc7bWQ1PTU4ZGNkODQ1MjY1MWZjOGIwN2QxZjY1Y2UwN2NhOGFmIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2V0L2V0X25hbWUuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1lYWQyMzY0NDdkYWM3Yjk4MGRiYzViNDgwNGQ4YzgzNiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9zcy9zcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTZlODlhZDQ3ZGE2ZTc1ZmVjZDJiNWUwZTgxZTFkNGE2IgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9lMmZzcHJvZ3MvZTJmc3Byb2dzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rpci5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHBrZ2NvbmZpZyBtdWx0aWxpYl9oZWFkZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwNDNiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTdWJqZWN0OiBlMmZzcHJvZ3M6IGZpeCBjcm9zcyBjb21waWxhdGlvbiBwcm9ibGVtCisKK1RoZSBjaGVja2luZyBvZiB0eXBlcyBpbiBwYXJzZS10eXBlcy5zaCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSBpbiBhCitjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIGJpbmFyeSBpcyBleGVjdXRlZAorb24gYnVpbGQgbWFjaGluZS4KKworU28gZXZlbiBpZiBhc21fdHlwZXMuaCBoYXMgZ290IGNvcnJlY3Qgc3RhdGVtZW50cyBmb3IgdHlwZXMsIGl0J3MgcG9zc2libGUKK3RoYXQgdGhlIGdlbmVyYXRlZCBiaW5hcnkgd2lsbCByZXBvcnQgYW4gZXJyb3IuIEJlY2F1c2UgdGhlc2UgdHlwZXMgYXJlIGZvcgordGhlIHRhcmdldCBtYWNoaW5lLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWcvcGFyc2UtdHlwZXMuc2ggfCAgICA2ICsrKystLQorIGNvbmZpZ3VyZS5pbiAgICAgICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcvcGFyc2UtdHlwZXMuc2ggYi9jb25maWcvcGFyc2UtdHlwZXMuc2gKK2luZGV4IDUwNzZmNmMuLjI0ZDJhOTkgMTAwNzU1CistLS0gYS9jb25maWcvcGFyc2UtdHlwZXMuc2gKKysrKyBiL2NvbmZpZy9wYXJzZS10eXBlcy5zaAorQEAgLTExOCw4ICsxMTgsMTAgQEAgaWYgLi9hc21fdHlwZXMKKyB0aGVuCisgICAgIHRydWUKKyBlbHNlCistICAgIGVjaG8gIlByb2JsZW0gZGV0ZWN0ZWQgd2l0aCBhc21fdHlwZXMuaCIKKy0gICAgZWNobyAiIiA+IGFzbV90eXBlcy5oCisrICAgIGlmIFsgIiR7Q1JPU1NfQ09NUElMRX0iICE9ICIxIiBdOyB0aGVuCisrCWVjaG8gIlByb2JsZW0gZGV0ZWN0ZWQgd2l0aCBhc21fdHlwZXMuaCIKKysJZWNobyAiIiA+IGFzbV90eXBlcy5oCisrICAgIGZpCisgZmkKKyBybSBhc21fdHlwZXMuYyBhc21fdHlwZXMKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDY4YWRmMGQuLmVkMTY5N2IgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTk1Myw3ICs5NTMsMTEgQEAgQUNfU1VCU1QoU0laRU9GX0xPTkcpCisgQUNfU1VCU1QoU0laRU9GX0xPTkdfTE9ORykKKyBBQ19TVUJTVChTSVpFT0ZfT0ZGX1QpCisgQUNfQ19CSUdFTkRJQU4KKy1CVUlMRF9DQz0iJEJVSUxEX0NDIiBDUFA9IiRDUFAiIC9iaW4vc2ggJGFjX2F1eF9kaXIvcGFyc2UtdHlwZXMuc2gKKytpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorKyAgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisrZWxzZQorKyAgQ1JPU1NfQ09NUElMRT0iMSIgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisrZmkKKyBBU01fVFlQRVNfSEVBREVSPS4vYXNtX3R5cGVzLmgKKyBBQ19TVUJTVF9GSUxFKEFTTV9UWVBFU19IRUFERVIpCisgZG5sCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmNzdjYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSA0OWQwZmUyYTE0ZjJhMjNkYTJmZTI5OTY0MzM3OWI4YzFkMzdkZjczIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK0RhdGU6IEZyaSwgNiBGZWIgMjAxNSAxMjo0NjozOSAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJleHQyZnM6IGZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIGNsb3NlZnMoKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1RoZSBidWcgZml4IGluIGY2NmU2Y2U0NDQ2OiAibGliZXh0MmZzOiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgaWYKK3NfZmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnIiBoYWQgYSB0eXBvIGluIHRoZSBmaXggZm9yCitleHQyZnNfY2xvc2VmcygpLiAgSW4gcHJhY3RpY2UgbW9zdCBvZiB0aGUgc2VjdXJpdHkgZXhwb3N1cmUgd2FzIGZyb20KK3RoZSBvcGVuZnMgcGF0aCwgc2luY2UgdGhpcyBtZWFudCBpZiB0aGVyZSB3YXMgYSBjYXJlZnVsbHkgY3JhZnRlZAorZmlsZSBzeXN0ZW0sIGJ1ZmZlciBvdmVycnVuIHdvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSB3YXMKK29wZW5lZC4KKworSG93ZXZlciwgaWYgY29ycnVwdGVkIGZpbGUgc3lzdGVtIGRpZG4ndCB0cmlwIG92ZXIgc29tZSBjb3JydXB0aW9uCitjaGVjaywgYW5kIHRoZW4gdGhlIGZpbGUgc3lzdGVtIHdhcyBtb2RpZmllZCB2aWEgdHVuZTJmcyBvciBkZWJ1Z2ZzLAorc3VjaCB0aGF0IHRoZSBzdXBlcmJsb2NrIHdhcyBtYXJrZWQgZGlydHkgYW5kIHRoZW4gd3JpdHRlbiBvdXQgdmlhIHRoZQorY2xvc2VmcygpIHBhdGgsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgYnVmZmVyIG92ZXJydW4gY291bGQgYmUKK3RyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcyBjbG9zZWQuCisKK0Fsc28gY2xlYXIgdXAgYSBzaWduZWQgdnMgdW5zaWduZWQgd2FybmluZyB3aGlsZSB3ZSdyZSBhdCBpdC4KKworVGhhbmtzIHRvIE5pY2sgS3JhbGV2aWNoIDxubmtAZ29vZ2xlLmNvbT4gZm9yIGFza2luZyBtZSB0byBsb29rIGF0Citjb21waWxlciB3YXJuaW5nIGluIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCB3aGljaCBsZWQgbWUgdG8gbm90aWNlIHRoZQorYnVnIGluIGY2NmU2Y2U0NDQ2LgorCitBZGRyZXNzZXM6IENWRS0yMDE1LTE1NzIKKworU2lnbmVkLW9mZi1ieTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKy0tLQorIGxpYi9leHQyZnMvY2xvc2Vmcy5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK2luZGV4IDFmOTkxMTMuLmFiNWIyZmIgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL2Nsb3NlZnMuYworKysrIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK0BAIC0yODcsNyArMjg3LDcgQEAgZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKKyAJZGdycF90CQlqOworICNlbmRpZgorIAljaGFyCSpncm91cF9wdHI7CistCWludAlvbGRfZGVzY19ibG9ja3M7CisrCWJsazY0X3QJb2xkX2Rlc2NfYmxvY2tzOworIAlzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0IHByb2dyZXNzOworIAorIAlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworQEAgLTM0Niw3ICszNDYsNyBAQCBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoMihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzKQorIAlncm91cF9wdHIgPSAoY2hhciAqKSBncm91cF9zaGFkb3c7CisgCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykKKysJCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+ZGVzY19ibG9ja3MpCisgCQkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworIAl9IGVsc2UKKyAJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSBjOThmZWMwMDRmMDc3ZTU2NmI5ZGZhMjBiMjVlM2I4NmNiNDYyYTJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI0IERlYyAyMDEzIDAxOjQxOjA4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMTFdIG1rZTJmczogYWRkIHRoZSBhYmlsaXR5IHRvIGNvcHkgZmlsZXMgZnJvbSBhIGdpdmVuCisgZGlyZWN0b3J5CisKK1dlIHdpbGwgYWRkIGEgLWQgb3B0aW9uIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgYWRkaW5nIHRoZSBmaWxlcyBmcm9tIGEKK2dpdmVuIGRpcmVjdG9yeSB0byB0aGUgZmlsZXN5c3RlbSwgaXQgaXMgc2ltaWxpYXIgdG8gZ2VuZXh0MmZzLCBidXQKK2dlbmV4dDJmcyBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgZXh0NC4KKworKiBXZSBhbHJlYWR5IGhhdmUgdGhlIGJhc2ljIG9wZXJhdGlvbnMgaW4gZGVidWdmczoKKyAgLSBDb3B5IHJlZ3VsYXIgZmlsZQorICAtIENyZWF0ZSBkaXJlY3RvcnkKKyAgLSBDcmVhdGUgc3ltbGluaworICAtIENyZWF0ZSBzcGVjaWFsIGZpbGUKKworICBXZSB3aWxsIG1vdmUgdGhlc2Ugb3BlcmF0aW9ucyBpbnRvIGNyZWF0ZV9pbm9kZS5oIGFuZCBjcmVhdGVfaW5vZGUuYywKKyAgdGhlbiBsZXQgYm90aCBta2UyZnMgYW5kIGRlYnVnZnMgdXNlIHRoZW0uCisKKyogV2hhdCB3ZSBuZWVkIHRvIGRvIGFyZToKKyAgLSBDb3B5IHRoZSBnaXZlbiBkaXJlY3RvcnkgcmVjdXJzaXZlbHksIHRoaXMgd2lsbCBiZSBkb25lIGJ5IHRoZQorICAgIHBvcHVsYXRlX2ZzKCkKKyAgLSBTZXQgdGhlIG93bmVyLCBtb2RlIGFuZCBvdGhlciBpbmZvcm1hdGlvbnMKKyAgLSBIYW5kbGUgdGhlIGhhcmQgbGlua3MKKworVE9ETzoKKyAgLSBUaGUgbGliZXh0MmZzIGNhbid0IGNyZWF0ZSB0aGUgc29ja2V0IGZpbGUgKFNfSUZTT0NLKSwgZG8gd2UgaGF2ZSBhCisgICAgcGxhbiB0byBzdXBwb3J0IGl0ID8KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCisgbWlzYy9jcmVhdGVfaW5vZGUuaCB8ICAgMTcgKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWlzYy9jcmVhdGVfaW5vZGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBtaXNjL2NyZWF0ZV9pbm9kZS5oCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ2YWFhNjAKKy0tLSAvZGV2L251bGwKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0wLDAgKzEsMjYgQEAKKysjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisrCisrLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisrZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworK30KKysKKysvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworK2VycmNvZGVfdCBkb19zeW1saW5rX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpCisreworK30KKysKKysvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworK2VycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorK3sKKyt9CisrCisrLyogQ29weSB0aGUgbmF0aXZlIGZpbGUgdG8gdGhlIGZzICovCisrZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisreworK30KKysKKysvKiBDb3B5IGZpbGVzIGZyb20gc291cmNlX2RpciB0byBmcyAqLworK2VycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisreworK30KK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5oIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlmYzk3ZmEKKy0tLSAvZGV2L251bGwKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmgKK0BAIC0wLDAgKzEsMTcgQEAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKysjaW5jbHVkZSAiZTJwL2UycC5oIgorKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisrI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKysKKytleHQyX2ZpbHN5cyAgICBjdXJyZW50X2ZzOworK2V4dDJfaW5vX3QgICAgIHJvb3Q7CisrCisrLyogRm9yIHBvcHVsYXRpbmcgdGhlIGZpbGVzeXN0ZW0gKi8KKytleHRlcm4gZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2Rpcik7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKKytleHRlcm4gZXJyY29kZV90IGRvX3N5bWxpbmtfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCk7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKKytleHRlcm4gZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmY2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSAwOGRmYmFmNGUzZjcwNDIzMmZmNDZkNzhjMDc1OGE2Y2ZlMzk2MWM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAyOjU5OjEwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNvcHkgZmlsZXMgcmVjdXJzaXZlbHkKKworVXNlIG9wZW5kaXIoKSBhbmQgcmVhZGRpcigpIHRvIHJlYWQgdGhlIG5hdGl2ZSBkaXJlY3RvcnksIHRoZW4gdXNlCitsc3RhdCgpIHRvIGlkZW50aWZ5IHRoZSBmaWxlIHR5cGUgYW5kIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8KK2FkZCB0aGUgZmlsZSB0byB0aGUgZmlsZXN5c3RlbSwgY2FsbCB0aGUgcG9wdWxhdGVfZnMoKSByZWN1cnNpdmVseSBpZiBpdAoraXMgYSBkaXJlY3RvcnkuCisKK05PVEU6IHRoZSBsaWJleHQyZnMgY2FuJ3QgY3JlYXRlIHRoZSBzb2NrZXQgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNDZhYWE2MC4uYjY4YjkxMCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xLDUgKzEsMTMgQEAKKyAjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisgCisrI2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMCisrIyBpZiBfX0dOVUNfXyA+PSAyCisrIyAgZGVmaW5lIF9fZnVuY19fIF9fRlVOQ1RJT05fXworKyMgZWxzZQorKyMgIGRlZmluZSBfX2Z1bmNfXyAiPHVua25vd24+IgorKyMgZW5kaWYKKysjZW5kaWYKKysKKyAvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKyBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMjMsNCArMzEsOTMgQEAgZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisgLyogQ29weSBmaWxlcyBmcm9tIHNvdXJjZV9kaXIgdG8gZnMgKi8KKyBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIHsKKysJY29uc3QgY2hhcgkqbmFtZTsKKysJRElSCQkqZGg7CisrCXN0cnVjdCBkaXJlbnQJKmRlbnQ7CisrCXN0cnVjdCBzdGF0CXN0OworKwljaGFyCQlsbl90YXJnZXRbUEFUSF9NQVhdOworKwlleHQyX2lub190CWlubzsKKysJZXJyY29kZV90CXJldHZhbDsKKysJaW50CQlyZWFkX2NudDsKKysKKysJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisrCisrCWlmIChjaGRpcihzb3VyY2VfZGlyKSA8IDApIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIGVycm5vLAorKwkJCV8oIndoaWxlIGNoYW5naW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvIFwiJXNcIiIpLCBzb3VyY2VfZGlyKTsKKysJCXJldHVybiBlcnJubzsKKysJfQorKworKwlpZiAoIShkaCA9IG9wZW5kaXIoIi4iKSkpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIGVycm5vLAorKwkJCV8oIndoaWxlIG9wZW5uaW5nIGRpcmVjdG9yeSBcIiVzXCIiKSwgc291cmNlX2Rpcik7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysKKysJd2hpbGUoKGRlbnQgPSByZWFkZGlyKGRoKSkpIHsKKysJCWlmKCghc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSkgfHwgKCFzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSkpCisrCQkJY29udGludWU7CisrCQlsc3RhdChkZW50LT5kX25hbWUsICZzdCk7CisrCQluYW1lID0gZGVudC0+ZF9uYW1lOworKworKwkJc3dpdGNoKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKKysJCQljYXNlIFNfSUZDSFI6CisrCQkJY2FzZSBTX0lGQkxLOgorKwkJCWNhc2UgU19JRklGTzoKKysJCQkJaWYgKChyZXR2YWwgPSBkb19ta25vZF9pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCAmc3QpKSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLAorKwkJCQkJCV8oIndoaWxlIGNyZWF0aW5nIHNwZWNpYWwgZmlsZSBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWJyZWFrOworKwkJCWNhc2UgU19JRlNPQ0s6CisrCQkJCS8qIEZJWE1FOiB0aGVyZSBpcyBubyBtYWtlIHNvY2tldCBmdW5jdGlvbiBhdG0uICovCisrCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisrCQkJCQlfKCJpZ25vcmluZyBzb2NrZXQgZmlsZSBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCWNvbnRpbnVlOworKwkJCWNhc2UgU19JRkxOSzoKKysJCQkJaWYoKHJlYWRfY250ID0gcmVhZGxpbmsobmFtZSwgbG5fdGFyZ2V0LCBzaXplb2YobG5fdGFyZ2V0KSkpID09IC0xKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCBlcnJubywKKysJCQkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gcmVhZGxpbmsgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIGVycm5vOworKwkJCQl9CisrCQkJCWxuX3RhcmdldFtyZWFkX2NudF0gPSAnXDAnOworKwkJCQlpZiAoKHJldHZhbCA9IGRvX3N5bWxpbmtfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgbG5fdGFyZ2V0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSB3cml0aW5nIHN5bWxpbmtcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWJyZWFrOworKwkJCWNhc2UgU19JRlJFRzoKKysJCQkJaWYgKChyZXR2YWwgPSBkb193cml0ZV9pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCBuYW1lKSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSB3cml0aW5nIGZpbGUgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlicmVhazsKKysJCQljYXNlIFNfSUZESVI6CisrCQkJCWlmICgocmV0dmFsID0gZG9fbWtkaXJfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgJnN0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSBtYWtpbmcgZGlyIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJaWYgKChyZXR2YWwgPSBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgcGFyZW50X2lubywgbmFtZSwgJmlubykpKSB7CisrCQkJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQkvKiBQb3B1bGF0ZSB0aGUgZGlyIHJlY3Vyc2l2ZWx5Ki8KKysJCQkJcmV0dmFsID0gcG9wdWxhdGVfZnMoaW5vLCBuYW1lKTsKKysJCQkJaWYgKHJldHZhbCkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCBfKCJ3aGlsZSBhZGRpbmcgZGlyIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJY2hkaXIoIi4uIik7CisrCQkJCWJyZWFrOworKwkJCWRlZmF1bHQ6CisrCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisrCQkJCQlfKCJpZ25vcmluZyBlbnRyeSBcIiVzXCIiKSwgbmFtZSk7CisrCQl9CisrCX0KKysJY2xvc2VkaXIoZGgpOworKwlyZXR1cm4gcmV0dmFsOworIH0KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQ3YjZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gYWU3ZDMzODIzYmZjMzMwZTA4YjI1YzVmZTRkMjU4MzhlZjdjNzdjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzoxMzoyOCAtMDUwMAorU3ViamVjdDogW1BBVENIIDAzLzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjcmVhdGUgc3BlY2lhbCBmaWxlCisKK1RoZSBkb19ta25vZF9pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHNwZWNpYWwgZmlsZSB3aGljaCBpcworYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbywgbW9zdCBvZiB0aGUgY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywKK3RoZSBkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBiNjhiOTEwLi40ZGE4YWZmIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTExLDYgKzExLDc4IEBACisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworKwlleHQyX2lub190CQlpbm87CisrCWVycmNvZGVfdCAJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCXVuc2lnbmVkIGxvbmcJCW1ham9yLCBtaW5vciwgbW9kZTsKKysJaW50CQkJZmlsZXR5cGU7CisrCisrCXN3aXRjaChzdC0+c3RfbW9kZSAmIFNfSUZNVCkgeworKwkJY2FzZSBTX0lGQ0hSOgorKwkJCW1vZGUgPSBMSU5VWF9TX0lGQ0hSOworKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9DSFJERVY7CisrCQkJYnJlYWs7CisrCQljYXNlIFNfSUZCTEs6CisrCQkJbW9kZSA9IExJTlVYX1NfSUZCTEs7CisrCQkJZmlsZXR5cGUgPSAgRVhUMl9GVF9CTEtERVY7CisrCQkJYnJlYWs7CisrCQljYXNlIFNfSUZJRk86CisrCQkJbW9kZSA9IExJTlVYX1NfSUZJRk87CisrCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisrCQkJYnJlYWs7CisrCX0KKysKKysJaWYgKCEoY3VycmVudF9mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiRmlsZXN5c3RlbSBvcGVuZWQgcmVhZC9vbmx5Iik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBjd2QsIDAxMDc1NSwgMCwgJmlubyk7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrI2lmZGVmIERFQlVHRlMKKysJcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBpbm8pOworKyNlbmRpZgorKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIG5hbWUsIGlubywgZmlsZXR5cGUpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBuYW1lLCBpbm8sIGZpbGV0eXBlKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCwgaW5vKSkKKysJCWNvbV9lcnIoX19mdW5jX18sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIGlubywgKzEsIDApOworKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKysJaW5vZGUuaV9tb2RlID0gbW9kZTsKKysJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKysJCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisrCisrCW1ham9yID0gbWFqb3Ioc3QtPnN0X3JkZXYpOworKwltaW5vciA9IG1pbm9yKHN0LT5zdF9yZGV2KTsKKysKKysJaWYgKChtYWpvciA8IDI1NikgJiYgKG1pbm9yIDwgMjU2KSkgeworKwkJaW5vZGUuaV9ibG9ja1swXSA9IG1ham9yICogMjU2ICsgbWlub3I7CisrCQlpbm9kZS5pX2Jsb2NrWzFdID0gMDsKKysJfSBlbHNlIHsKKysJCWlub2RlLmlfYmxvY2tbMF0gPSAwOworKwkJaW5vZGUuaV9ibG9ja1sxXSA9IChtaW5vciAmIDB4ZmYpIHwgKG1ham9yIDw8IDgpIHwgKChtaW5vciAmIH4weGZmKSA8PCAxMik7CisrCX0KKysJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrCisrCXJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKwlpZiAocmV0dmFsKQorKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgaW5vZGUgJXUiLCBpbm8pOworKworKwlyZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkMTk4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDQtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3ltbGluay5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIDA5ZDMwNDk3NzY4ODIxNjdmNzI0OWVlMjYyNjViNDE2M2Q3MjIyYzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MTk6NTUgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIHN5bWxpbmsKKworVGhlIGRvX3N5bWxpbmtfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBjcmVhdGluZyBzeW1saW5rcywgbW9zdCBvZiB0aGUKK2NvZGUgYXJlIGZyb20gZGVidWdmcy9kZWJ1Z2ZzLmMsIHRoZSBkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkCit0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA0ZGE4YWZmLi5mODQ1MTAzIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTg4LDYgKzg4LDM4IEBAIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIC8qIE1ha2UgYSBzeW1saW5rIG5hbWUgLT4gdGFyZ2V0ICovCisgZXJyY29kZV90IGRvX3N5bWxpbmtfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCkKKyB7CisrCWNoYXIJCQkqY3A7CisrCWV4dDJfaW5vX3QJCXBhcmVudF9pbm87CisrCWVycmNvZGVfdAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysJc3RydWN0IHN0YXQJCXN0OworKworKwljcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKysJaWYgKGNwKSB7CisrCQkqY3AgPSAwOworKwkJaWYgKChyZXR2YWwgPSAgZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgbmFtZSwgJnBhcmVudF9pbm8pKSl7CisrCQkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQluYW1lID0gY3ArMTsKKysJfSBlbHNlCisrCQlwYXJlbnRfaW5vID0gY3dkOworKworK3RyeV9hZ2FpbjoKKysJcmV0dmFsID0gZXh0MmZzX3N5bWxpbmsoY3VycmVudF9mcywgcGFyZW50X2lubywgMCwgbmFtZSwgdGFyZ2V0KTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50X2lubyk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycigiZG9fc3ltbGlua19pbnRlcm5hbCIsIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJZ290byB0cnlfYWdhaW47CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiZXh0MmZzX3N5bWxpbmsiLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworIH0KKyAKKyAvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzNWNkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDUtbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LXJlZ3VsYXItZmlsZS5wYXRjaApAQCAtMCwwICsxLDIyNCBAQAorRnJvbSAyOTczYzc0YWZhYTUzMmYzZjcyNjM5YjQ2MzMyMmIyNTIzNTE5YzIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjI4OjEyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNvcHkgcmVndWxhciBmaWxlCisKK1RoZSBkb193cml0ZV9pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIGNvcHlpbmcgZmlsZSBmcm9tIG5hdGl2ZSBmcyB0bwordGFyZ2V0LCBtb3N0IG9mIHRoZSBjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUKK2RlYnVnZnMvZGVidWdmcy5jIHdpbGwgYmUgbW9kaWZpZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgIDE4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBmODQ1MTAzLi45OGY0YTkzIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTgsNiArOCwxNiBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKysvKiA2NEtpQiBpcyB0aGUgbWluaW1pdW0gYmxrc2l6ZSB0byBiZXN0IG1pbmltaXplIHN5c3RlbSBjYWxsIG92ZXJoZWFkLiAqLworKyNpZm5kZWYgSU9fQlVGU0laRQorKyNkZWZpbmUgSU9fQlVGU0laRSA2NCoxMDI0CisrI2VuZGlmCisrCisrLyogQmxvY2sgc2l6ZSBmb3IgYHN0X2Jsb2NrcycgKi8KKysjaWZuZGVmIFNfQkxLU0laRQorKyNkZWZpbmUgU19CTEtTSVpFIDUxMgorKyNlbmRpZgorKworIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKK0BAIC0xMjcsOSArMTM3LDE4MiBAQCBlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CisgfQorIAorK3N0YXRpYyBlcnJjb2RlX3QgY29weV9maWxlKGludCBmZCwgZXh0Ml9pbm9fdCBuZXdmaWxlLCBpbnQgYnVmc2l6ZSwgaW50IG1ha2VfaG9sZXMpCisreworKwlleHQyX2ZpbGVfdAllMl9maWxlOworKwllcnJjb2RlX3QJcmV0dmFsOworKwlpbnQJCWdvdDsKKysJdW5zaWduZWQgaW50CXdyaXR0ZW47CisrCWNoYXIJCSpidWY7CisrCWNoYXIJCSpwdHI7CisrCWNoYXIJCSp6ZXJvX2J1ZjsKKysJaW50CQljbXA7CisrCisrCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oY3VycmVudF9mcywgbmV3ZmlsZSwKKysJCQkJICBFWFQyX0ZJTEVfV1JJVEUsICZlMl9maWxlKTsKKysJaWYgKHJldHZhbCkKKysJCXJldHVybiByZXR2YWw7CisrCisrCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGJ1ZnNpemUsICZidWYpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwkvKiBUaGlzIGlzIHVzZWQgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIHdob2xlIGJsb2NrIGlzIHplcm8gKi8KKysJcmV0dmFsID0gZXh0MmZzX2dldF9tZW16ZXJvKGJ1ZnNpemUsICZ6ZXJvX2J1Zik7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisrCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXdoaWxlICgxKSB7CisrCQlnb3QgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUpOworKwkJaWYgKGdvdCA9PSAwKQorKwkJCWJyZWFrOworKwkJaWYgKGdvdCA8IDApIHsKKysJCQlyZXR2YWwgPSBlcnJubzsKKysJCQlnb3RvIGZhaWw7CisrCQl9CisrCQlwdHIgPSBidWY7CisrCisrCQkvKiBTcGFyc2UgY29weSAqLworKwkJaWYgKG1ha2VfaG9sZXMpIHsKKysJCQkvKiBDaGVjayB3aGV0aGVyIGFsbCBpcyB6ZXJvICovCisrCQkJY21wID0gbWVtY21wKHB0ciwgemVyb19idWYsIGdvdCk7CisrCQkJaWYgKGNtcCA9PSAwKSB7CisrCQkJCSAvKiBUaGUgd2hvbGUgYmxvY2sgaXMgemVybywgbWFrZSBhIGhvbGUgKi8KKysJCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgZ290LCBFWFQyX1NFRUtfQ1VSLCBOVUxMKTsKKysJCQkJaWYgKHJldHZhbCkKKysJCQkJCWdvdG8gZmFpbDsKKysJCQkJZ290ID0gMDsKKysJCQl9CisrCQl9CisrCisrCQkvKiBOb3JtYWwgY29weSAqLworKwkJd2hpbGUgKGdvdCA+IDApIHsKKysJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV93cml0ZShlMl9maWxlLCBwdHIsCisrCQkJCQkJICAgZ290LCAmd3JpdHRlbik7CisrCQkJaWYgKHJldHZhbCkKKysJCQkJZ290byBmYWlsOworKworKwkJCWdvdCAtPSB3cml0dGVuOworKwkJCXB0ciArPSB3cml0dGVuOworKwkJfQorKwl9CisrCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKysJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisrCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKwlyZXR1cm4gcmV0dmFsOworKworK2ZhaWw6CisrCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKysJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisrCSh2b2lkKSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysJcmV0dXJuIHJldHZhbDsKKyt9CisrCisgLyogQ29weSB0aGUgbmF0aXZlIGZpbGUgdG8gdGhlIGZzICovCisgZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisgeworKwlpbnQJCWZkOworKwlzdHJ1Y3Qgc3RhdAlzdGF0YnVmOworKwlleHQyX2lub190CW5ld2ZpbGU7CisrCWVycmNvZGVfdAlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworKwlpbnQJCWJ1ZnNpemUgPSBJT19CVUZTSVpFOworKwlpbnQJCW1ha2VfaG9sZXMgPSAwOworKworKwlmZCA9IG9wZW4oc3JjLCBPX1JET05MWSk7CisrCWlmIChmZCA8IDApIHsKKysJCWNvbV9lcnIoc3JjLCBlcnJubywgMCk7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysJaWYgKGZzdGF0KGZkLCAmc3RhdGJ1ZikgPCAwKSB7CisrCQljb21fZXJyKHNyYywgZXJybm8sIDApOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGRlc3QsICZuZXdmaWxlKTsKKysJaWYgKHJldHZhbCA9PSAwKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiVGhlIGZpbGUgJyVzJyBhbHJlYWR5IGV4aXN0c1xuIiwgZGVzdCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysjaWZkZWYgREVCVUdGUworKwlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIG5ld2ZpbGUpOworKyNlbmRpZgorKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGRlc3QsIG5ld2ZpbGUsCisrCQkJCUVYVDJfRlRfUkVHX0ZJTEUpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQljbG9zZShmZCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgZGVzdCwgbmV3ZmlsZSwKKysJCQkJCUVYVDJfRlRfUkVHX0ZJTEUpOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoZGVzdCwgcmV0dmFsLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCwgbmV3ZmlsZSkpCisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKysJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CisrCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworKwlpbm9kZS5pX21vZGUgPSAoc3RhdGJ1Zi5zdF9tb2RlICYgfkxJTlVYX1NfSUZNVCkgfCBMSU5VWF9TX0lGUkVHOworKwlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorKwkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKysJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrCWlub2RlLmlfc2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKysJaWYgKGN1cnJlbnRfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorKwkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKysJCWludCBpOworKwkJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CisrCisrCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworKwkJZWgtPmVoX2RlcHRoID0gMDsKKysJCWVoLT5laF9lbnRyaWVzID0gMDsKKysJCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisrCQlpID0gKHNpemVvZihpbm9kZS5pX2Jsb2NrKSAtIHNpemVvZigqZWgpKSAvCisrCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CisrCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworKwkJaW5vZGUuaV9mbGFncyB8PSBFWFQ0X0VYVEVOVFNfRkw7CisrCX0KKysKKysJaWYgKChyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICZpbm9kZSkpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBpbm9kZSAldSIsIG5ld2ZpbGUpOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKwlpZiAoTElOVVhfU19JU1JFRyhpbm9kZS5pX21vZGUpKSB7CisrCQlpZiAoc3RhdGJ1Zi5zdF9ibG9ja3MgPCBzdGF0YnVmLnN0X3NpemUgLyBTX0JMS1NJWkUpIHsKKysJCQltYWtlX2hvbGVzID0gMTsKKysJCQkvKgorKwkJCSAqIFVzZSBJL08gYmxvY2tzaXplIGFzIGJ1ZmZlciBzaXplIHdoZW4KKysJCQkgKiBjb3B5aW5nIHNwYXJzZSBmaWxlcy4KKysJCQkgKi8KKysJCQlidWZzaXplID0gc3RhdGJ1Zi5zdF9ibGtzaXplOworKwkJfQorKwkJcmV0dmFsID0gY29weV9maWxlKGZkLCBuZXdmaWxlLCBidWZzaXplLCBtYWtlX2hvbGVzKTsKKysJCWlmIChyZXR2YWwpCisrCQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAwKTsKKysJfQorKwljbG9zZShmZCk7CisrCisrCXJldHVybiAwOworIH0KKyAKKyAvKiBDb3B5IGZpbGVzIGZyb20gc291cmNlX2RpciB0byBmcyAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2NhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGM4ZDFjNDNiZTI0NDg5MDM2MTM3ZjhmZGViY2ZjY2MyMDhmN2NjOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MzQ6MTQgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIGRpcmVjdG9yeQorCitUaGUgZG9fbWtkaXJfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBtYWtpbmcgZGlyIG9uIHRoZSB0YXJnZXQgZnMsIG1vc3Qgb2YKK3RoZSBjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUgZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZQorbW9kaWZpZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICAzMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA5OGY0YTkzLi42YThjOTJhIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTEzNSw2ICsxMzUsMzcgQEAgdHJ5X2FnYWluOgorIC8qIE1ha2UgYSBkaXJlY3RvcnkgaW4gdGhlIGZzICovCisgZXJyY29kZV90IGRvX21rZGlyX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworKwljaGFyCQkJKmNwOworKwlleHQyX2lub190CQlwYXJlbnRfaW5vLCBpbm87CisrCWVycmNvZGVfdAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysKKysKKysJY3AgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisrCWlmIChjcCkgeworKwkJKmNwID0gMDsKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIG5hbWUsICZwYXJlbnRfaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJbmFtZSA9IGNwKzE7CisrCX0gZWxzZQorKwkJcGFyZW50X2lubyA9IGN3ZDsKKysKKyt0cnlfYWdhaW46CisrCXJldHZhbCA9IGV4dDJmc19ta2RpcihjdXJyZW50X2ZzLCBwYXJlbnRfaW5vLCAwLCBuYW1lKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50X2lubyk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlnb3RvIHRyeV9hZ2FpbjsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorIH0KKyAKKyBzdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5NjM5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDctbWlzYy1jcmVhdGVfaW5vZGUuYy1zZXQtb3duZXItbW9kZS10aW1lLWZvci10aGUtaW5vZC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitGcm9tIDJiMWY2ZTZiMzg2NzAzYTVkN2U2MGI3ZDhiNzI3NDZmM2QzMWE4YmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6Mzk6NTYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogc2V0IG93bmVyL21vZGUvdGltZSBmb3IgdGhlIGlub2RlCisKK1NldCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIGlub2RlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA2YThjOTJhLi5hYWQ3MzU0IDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTE4LDYgKzE4LDQwIEBACisgI2RlZmluZSBTX0JMS1NJWkUgNTEyCisgI2VuZGlmCisgCisrLyogRmlsbCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworK3N0YXRpYyB2b2lkIGZpbGxfaW5vZGUoc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworKwlpZiAoc3QgIT0gTlVMTCkgeworKwkJaW5vZGUtPmlfdWlkID0gc3QtPnN0X3VpZDsKKysJCWlub2RlLT5pX2dpZCA9IHN0LT5zdF9naWQ7CisrCQlpbm9kZS0+aV9tb2RlIHw9IHN0LT5zdF9tb2RlOworKwkJaW5vZGUtPmlfYXRpbWUgPSBzdC0+c3RfYXRpbWU7CisrCQlpbm9kZS0+aV9tdGltZSA9IHN0LT5zdF9tdGltZTsKKysJCWlub2RlLT5pX2N0aW1lID0gc3QtPnN0X2N0aW1lOworKwl9CisrfQorKworKy8qIFNldCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworK2VycmNvZGVfdCBzZXRfaW5vZGVfZXh0cmEoZXh0Ml9pbm9fdCBjd2QsIGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworKwllcnJjb2RlX3QJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCisrCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlmaWxsX2lub2RlKCZpbm9kZSwgc3QpOworKworKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSB3cml0aW5nIGlub2RlICV1IiwgaW5vKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKyt9CisrCisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTQzNSw2ICs0NjksMTcgQEAgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyAJCQkJY29tX2VycihfX2Z1bmNfXywgMCwKKyAJCQkJCV8oImlnbm9yaW5nIGVudHJ5IFwiJXNcIiIpLCBuYW1lKTsKKyAJCX0KKysKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBwYXJlbnRfaW5vLCBuYW1lLCAmaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKworKwkJaWYgKChyZXR2YWwgPSBzZXRfaW5vZGVfZXh0cmEocGFyZW50X2lubywgaW5vLCAmc3QpKSkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJXygid2hpbGUgc2V0dGluZyBpbm9kZSBmb3IgXCIlc1wiIiksIG5hbWUpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGgpOworIAlyZXR1cm4gcmV0dmFsOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTg2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaApAQCAtMCwwICsxLDE2OCBAQAorRnJvbSBkZjg1NjkyOWU0MmJkNGYzYmRjOGQ0ZjU5ZWU4MmFlOGIyODUzMmU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI0IERlYyAyMDEzIDAxOjUwOjQ1IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTFdIG1rZTJmcy5jOiBhZGQgYW4gb3B0aW9uOiAtZCByb290LWRpcmVjdG9yeQorCitUaGlzIG9wdGlvbiBpcyB1c2VkIGZvciBhZGRpbmcgdGhlIGZpbGVzIGZyb20gYSBnaXZlbiBkaXJlY3RvcnkgKHRoZQorcm9vdC1kaXJlY3RvcnkpIHRvIHRoZSBmaWxlc3lzdGVtLCBpdCBpcyBzaW1pbGlhciB0byBnZW5leHQyZnMsIGJ1dAorZ2VuZXh0MmZzIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBleHQ0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9NYWtlZmlsZS5pbiB8ICAgMTQgKysrKysrKysrKy0tLS0KKyBtaXNjL21rZTJmcy5jICAgIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9taXNjL01ha2VmaWxlLmluIGIvbWlzYy9NYWtlZmlsZS5pbgoraW5kZXggNTUzYzM2MS4uODI1MzcyMyAxMDA2NDQKKy0tLSBhL21pc2MvTWFrZWZpbGUuaW4KKysrKyBiL21pc2MvTWFrZWZpbGUuaW4KK0BAIC00Miw3ICs0Miw4IEBAIExQUk9HUz0JCUBFMklOSVRSRF9QUk9HQAorIAorIFRVTkUyRlNfT0JKUz0JdHVuZTJmcy5vIHV0aWwubworIE1LTFBGX09CSlM9CW1rbG9zdCtmb3VuZC5vCistTUtFMkZTX09CSlM9CW1rZTJmcy5vIHV0aWwubyBwcm9maWxlLm8gcHJvZl9lcnIubyBkZWZhdWx0X3Byb2ZpbGUubworK01LRTJGU19PQkpTPQlta2UyZnMubyB1dGlsLm8gcHJvZmlsZS5vIHByb2ZfZXJyLm8gZGVmYXVsdF9wcm9maWxlLm8gXAorKwkJCWNyZWF0ZV9pbm9kZS5vCisgQ0hBVFRSX09CSlM9CWNoYXR0ci5vCisgTFNBVFRSX09CSlM9CWxzYXR0ci5vCisgVVVJREdFTl9PQkpTPQl1dWlkZ2VuLm8KK0BAIC02MCw3ICs2MSw4IEBAIEUyRlJFRUZSQUdfT0JKUz0gZTJmcmVlZnJhZy5vCisgUFJPRklMRURfVFVORTJGU19PQkpTPQlwcm9maWxlZC90dW5lMmZzLm8gcHJvZmlsZWQvdXRpbC5vCisgUFJPRklMRURfTUtMUEZfT0JKUz0JcHJvZmlsZWQvbWtsb3N0K2ZvdW5kLm8KKyBQUk9GSUxFRF9NS0UyRlNfT0JKUz0JcHJvZmlsZWQvbWtlMmZzLm8gcHJvZmlsZWQvdXRpbC5vIHByb2ZpbGVkL3Byb2ZpbGUubyBcCistCQkJcHJvZmlsZWQvcHJvZl9lcnIubyBwcm9maWxlZC9kZWZhdWx0X3Byb2ZpbGUubworKwkJCXByb2ZpbGVkL3Byb2ZfZXJyLm8gcHJvZmlsZWQvZGVmYXVsdF9wcm9maWxlLm8gXAorKwkJCXByb2ZpbGVkL2NyZWF0ZV9pbm9kZS5vCisgUFJPRklMRURfQ0hBVFRSX09CSlM9CXByb2ZpbGVkL2NoYXR0ci5vCisgUFJPRklMRURfTFNBVFRSX09CSlM9CXByb2ZpbGVkL2xzYXR0ci5vCisgUFJPRklMRURfVVVJREdFTl9PQkpTPQlwcm9maWxlZC91dWlkZ2VuLm8KK0BAIC04Miw3ICs4NCw3IEBAIFNSQ1M9CSQoc3JjZGlyKS90dW5lMmZzLmMgJChzcmNkaXIpL21rbG9zdCtmb3VuZC5jICQoc3JjZGlyKS9ta2UyZnMuYyBcCisgCQkkKHNyY2RpcikvdXVpZGdlbi5jICQoc3JjZGlyKS9ibGtpZC5jICQoc3JjZGlyKS9sb2dzYXZlLmMgXAorIAkJJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2Jhc2VfZGV2aWNlLmMgXAorIAkJJChzcmNkaXIpL2lzbW91bnRlZC5jICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZmlsZS5jIFwKKy0JCSQoc3JjZGlyKS9lMnVuZG8uYyAkKHNyY2RpcikvZTJmcmVlZnJhZy5jCisrCQkkKHNyY2RpcikvZTJ1bmRvLmMgJChzcmNkaXIpL2UyZnJlZWZyYWcuYyAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmMKKyAKKyBMSUJTPSAkKExJQkVYVDJGUykgJChMSUJDT01fRVJSKSAKKyBERVBMSUJTPSAkKExJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorQEAgLTYzMCw3ICs2MzIsNyBAQCBta2UyZnMubzogJChzcmNkaXIpL21rZTJmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICAkKHNyY2RpcikvdXRpbC5oIHByb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oIFwKKy0gJChzcmNkaXIpL25scy1lbmFibGUuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmhcCisgICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorIGNoYXR0ci5vOiAkKHNyY2RpcikvY2hhdHRyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCitAQCAtNzEwLDMgKzcxMiw3IEBAIGUyZnJlZWZyYWcubzogJChzcmNkaXIpL2UyZnJlZWZyYWcuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICAkKHNyY2RpcikvZTJmcmVlZnJhZy5oCisrY3JlYXRlX2lub2RlLm86ICQoc3JjZGlyKS9jcmVhdGVfaW5vZGUuaCAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmMgXAorKyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisrICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggXAorKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKK2luZGV4IDJlOGJhNjAuLjU3OGI2MmQgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy5jCisrKysgYi9taXNjL21rZTJmcy5jCitAQCAtMjIsNyArMjIsNiBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RyaW5ncy5oPgorLSNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2lmZGVmIF9fbGludXhfXworQEAgLTQ0LDI0ICs0MywxOSBAQCBleHRlcm4gaW50IG9wdGluZDsKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPGJsa2lkL2Jsa2lkLmg+CisgCisgI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisgI2luY2x1ZGUgImV4dDJmcy9leHQyZnNQLmgiCistI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyAjaW5jbHVkZSAidXVpZC91dWlkLmgiCistI2luY2x1ZGUgImUycC9lMnAuaCIKKy0jaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorICNpbmNsdWRlICJ1dGlsLmgiCisgI2luY2x1ZGUgInByb2ZpbGUuaCIKKyAjaW5jbHVkZSAicHJvZl9lcnIuaCIKKyAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorLSNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisgI2luY2x1ZGUgInF1b3RhL21rcXVvdGEuaCIKKysjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisgCisgI2RlZmluZSBTVFJJREVfTEVOR1RIIDgKKyAKK0BAIC0xMDUsNiArOTksNyBAQCBzdGF0aWMgY2hhciAqbW91bnRfZGlyOworIGNoYXIgKmpvdXJuYWxfZGV2aWNlOworIHN0YXRpYyBpbnQgc3luY19rbHVkZ2U7CS8qIFNldCB1c2luZyB0aGUgTUtFMkZTX1NZTkMgZW52LiBvcHRpb24gKi8KKyBzdGF0aWMgY2hhciAqKmZzX3R5cGVzOworK2NvbnN0IGNoYXIgKnJvb3RfZGlyOyAgLyogQ29weSBmaWxlcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICovCisgCisgc3RhdGljIHByb2ZpbGVfdAlwcm9maWxlOworIAorQEAgLTExNiw3ICsxMTEsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQorIAlmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdICIKKyAJIlstQyBjbHVzdGVyLXNpemVdXG5cdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSAiCisgCSJbLUogam91cm5hbC1vcHRpb25zXVxuIgorLQkiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKysJIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdICIKKysJIlstZCByb290LWRpcmVjdG9yeV1cbiIKKyAJIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyAJIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdICIKKyAJIlstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuXHRbLU8gZmVhdHVyZVssLi4uXV0gIgorQEAgLTEzOTQsNyArMTM5MCw3IEBAIHByb2ZpbGVfZXJyb3I6CisgCX0KKyAKKyAJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LAorLQkJICAgICJiOmNnOmk6amw6bTpubzpxcjpzOnQ6dkM6REU6Rkc6STpKOktMOk06TjpPOlI6U1Q6VTpWIikpICE9IEVPRikgeworKwkJICAgICJiOmNnOmk6amw6bTpubzpxcjpzOnQ6ZDp2QzpERTpGRzpJOko6S0w6TTpOOk86UjpTVDpVOlYiKSkgIT0gRU9GKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2InOgorIAkJCWJsb2Nrc2l6ZSA9IHBhcnNlX251bV9ibG9ja3MyKG9wdGFyZywgLTEpOworQEAgLTE1ODIsNiArMTU3OCw5IEBAIHByb2ZpbGVfZXJyb3I6CisgCQljYXNlICdVJzoKKyAJCQlmc191dWlkID0gb3B0YXJnOworIAkJCWJyZWFrOworKwkJY2FzZSAnZCc6CisrCQkJcm9vdF9kaXIgPSBvcHRhcmc7CisrCQkJYnJlYWs7CisgCQljYXNlICd2JzoKKyAJCQl2ZXJib3NlID0gMTsKKyAJCQlicmVhazsKK0BAIC0yNzI2LDYgKzI3MjUsMjEgQEAgbm9fam91cm5hbDoKKyAJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpKQorIAkJY3JlYXRlX3F1b3RhX2lub2Rlcyhmcyk7CisgCisrCS8qIENvcHkgZmlsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAqLworKwlpZiAocm9vdF9kaXIpIHsKKysJCWlmICghcXVpZXQpCisrCQkJcHJpbnRmKCIlcyIsIF8oIkNvcHlpbmcgZmlsZXMgaW50byB0aGUgZGV2aWNlOiAiKSk7CisrCisrCQljdXJyZW50X2ZzID0gZnM7CisrCQlyb290ID0gRVhUMl9ST09UX0lOTzsKKysJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKHJvb3QsIHJvb3RfZGlyKTsKKysJCWlmIChyZXR2YWwpCisrCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisrCQkJCV8oIlxuRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmaWxlIHN5c3RlbSIpKTsKKysJCWVsc2UgaWYgKCFxdWlldCkKKysJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworKwl9CisrCisgCWlmICghcXVpZXQpCisgCQlwcmludGYoIiVzIiwgXygiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgIgorIAkJICAgICAgICJmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIpKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzMwZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2gKQEAgLTAsMCArMSwyMTAgQEAKK0Zyb20gZDgzZGM5NTBiM2VjMWZiZGUzM2IyM2Q0MmM1MTU0MDkxYTc0ZjRkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzo0NDowMyAtMDUwMAorU3ViamVjdDogW1BBVENIIDA5LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBoYW5kbGUgaGFyZGxpbmtzCisKK0NyZWF0ZSB0aGUgaW5vZGUgYW5kIHNhdmUgdGhlIG5hdGl2ZSBpbm9kZSBudW1iZXIgd2hlbiB3ZSBtZWV0IHRoZSBoYXJkCitsaW5rIChzdF9ubGluayA+IDEpIGF0IHRoZSBmaXJzdCB0aW1lLCB1c2UgZXh0MmZzX2xpbmsoKSB0byBsaW5rIHRoZQorbmFtZSB0byB0aGUgdGFyZ2V0IGlub2RlIG51bWJlciB3aGVuIHdlIG1lZXQgdGhlIHNhbWUgbmF0aXZlIGlub2RlCitudW1iZXIgYWdhaW4uCisKK1RoaXMgYWxnb3JpdGhtIGlzIHJlZmVycmVkIGZyb20gdGhlIGdlbmV4dDJmcy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIG1pc2MvY3JlYXRlX2lub2RlLmggfCAgIDE4ICsrKysrKysrKysrCisgbWlzYy9ta2UyZnMuYyAgICAgICB8ICAgMTIgKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTE4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBhYWQ3MzU0Li43NjM1MDRkIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTE4LDYgKzE4LDQ0IEBACisgI2RlZmluZSBTX0JMS1NJWkUgNTEyCisgI2VuZGlmCisgCisrLyogRm9yIHNhdmluZyB0aGUgaGFyZCBsaW5rcyAqLworK2ludCBoZGxpbmtfY250ID0gSERMSU5LX0NOVDsKKysKKysvKiBMaW5rIGFuIGlub2RlIG51bWJlciB0byBhIGRpcmVjdG9yeSAqLworK3N0YXRpYyBlcnJjb2RlX3QgYWRkX2xpbmsoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBleHQyX2lub190IGlubywgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKwllcnJjb2RlX3QJCXJldHZhbDsKKysKKysJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBpbm9kZSAldSIsIGlubyk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIG5hbWUsIGlubywgaW5vZGUuaV9mbGFncyk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8pOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgcGFyZW50X2lubywgbmFtZSwgaW5vLCBpbm9kZS5pX2ZsYWdzKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBsaW5raW5nICVzIiwgbmFtZSk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCWlub2RlLmlfbGlua3NfY291bnQrKzsKKysKKysJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysJaWYgKHJldHZhbCkKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHdyaXRpbmcgaW5vZGUgJXUiLCBpbm8pOworKworKwlyZXR1cm4gcmV0dmFsOworK30KKysKKyAvKiBGaWxsIHRoZSB1aWQsIGdpZCwgbW9kZSBhbmQgdGltZSBmb3IgdGhlIGlub2RlICovCisgc3RhdGljIHZvaWQgZmlsbF9pbm9kZShzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMjc4LDYgKzMxNiwxNyBAQCBmYWlsOgorIAlyZXR1cm4gcmV0dmFsOworIH0KKyAKKytpbnQgaXNfaGFyZGxpbmsoZXh0Ml9pbm9fdCBpbm8pCisreworKwlpbnQgaTsKKysKKysJZm9yKGkgPSAwOyBpIDwgaGRsaW5rcy5jb3VudDsgaSsrKSB7CisrCQlpZihoZGxpbmtzLmhkbFtpXS5zcmNfaW5vID09IGlubykKKysJCQlyZXR1cm4gaTsKKysJfQorKwlyZXR1cm4gLTE7CisrfQorKworIC8qIENvcHkgdGhlIG5hdGl2ZSBmaWxlIHRvIHRoZSBmcyAqLworIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorIHsKK0BAIC0zODgsOSArNDM3LDExIEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCXN0cnVjdCBkaXJlbnQJKmRlbnQ7CisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQlsbl90YXJnZXRbUEFUSF9NQVhdOworKwl1bnNpZ25lZCBpbnQJc2F2ZV9pbm9kZTsKKyAJZXh0Ml9pbm9fdAlpbm87CisgCWVycmNvZGVfdAlyZXR2YWw7CisgCWludAkJcmVhZF9jbnQ7CisrCWludAkJaGRsaW5rOworIAorIAlyb290ID0gRVhUMl9ST09UX0lOTzsKKyAKK0BAIC00MTIsNiArNDYzLDIyIEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQlsc3RhdChkZW50LT5kX25hbWUsICZzdCk7CisgCQluYW1lID0gZGVudC0+ZF9uYW1lOworIAorKwkJLyogQ2hlY2sgZm9yIGhhcmRsaW5rcyAqLworKwkJc2F2ZV9pbm9kZSA9IDA7CisrCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkgJiYgIVNfSVNMTksoc3Quc3RfbW9kZSkgJiYgc3Quc3RfbmxpbmsgPiAxKSB7CisrCQkJaGRsaW5rID0gaXNfaGFyZGxpbmsoc3Quc3RfaW5vKTsKKysJCQlpZiAoaGRsaW5rID49IDApIHsKKysJCQkJcmV0dmFsID0gYWRkX2xpbmsocGFyZW50X2lubywKKysJCQkJCQloZGxpbmtzLmhkbFtoZGxpbmtdLmRzdF9pbm8sIG5hbWUpOworKwkJCQlpZiAocmV0dmFsKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBsaW5raW5nICVzIiwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWNvbnRpbnVlOworKwkJCX0gZWxzZQorKwkJCQlzYXZlX2lub2RlID0gMTsKKysJCX0KKysKKyAJCXN3aXRjaChzdC5zdF9tb2RlICYgU19JRk1UKSB7CisgCQkJY2FzZSBTX0lGQ0hSOgorIAkJCWNhc2UgU19JRkJMSzoKK0BAIC00ODAsNiArNTQ3LDI3IEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQkJCV8oIndoaWxlIHNldHRpbmcgaW5vZGUgZm9yIFwiJXNcIiIpLCBuYW1lKTsKKyAJCQlyZXR1cm4gcmV0dmFsOworIAkJfQorKworKwkJLyogU2F2ZSB0aGUgaGFyZGxpbmsgaW5vICovCisrCQlpZiAoc2F2ZV9pbm9kZSkgeworKwkJCS8qCisrCQkJICogQ2hlY2sgd2hldGhlciBuZWVkIG1vcmUgbWVtb3J5LCBhbmQgd2UgZG9uJ3QgbmVlZAorKwkJCSAqIGZyZWUoKSBzaW5jZSB0aGUgbGlmZXNwYW4gd2lsbCBiZSBvdmVyIGFmdGVyIHRoZSBmcworKwkJCSAqIHBvcHVsYXRlZC4KKysJCQkgKi8KKysJCQlpZiAoaGRsaW5rcy5jb3VudCA9PSBoZGxpbmtfY250KSB7CisrCQkJCWlmICgoaGRsaW5rcy5oZGwgPSByZWFsbG9jIChoZGxpbmtzLmhkbCwKKysJCQkJCQkoaGRsaW5rX2NudCArIEhETElOS19DTlQpICoKKysJCQkJCQlzaXplb2YgKHN0cnVjdCBoZGxpbmtfcykpKSA9PSBOVUxMKSB7CisrCQkJCQljb21fZXJyKG5hbWUsIGVycm5vLCAiTm90IGVub3VnaCBtZW1vcnkiKTsKKysJCQkJCXJldHVybiBlcnJubzsKKysJCQkJfQorKwkJCQloZGxpbmtfY250ICs9IEhETElOS19DTlQ7CisrCQkJfQorKwkJCWhkbGlua3MuaGRsW2hkbGlua3MuY291bnRdLnNyY19pbm8gPSBzdC5zdF9pbm87CisrCQkJaGRsaW5rcy5oZGxbaGRsaW5rcy5jb3VudF0uZHN0X2lubyA9IGlubzsKKysJCQloZGxpbmtzLmNvdW50Kys7CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGgpOworIAlyZXR1cm4gcmV0dmFsOworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmggYi9taXNjL2NyZWF0ZV9pbm9kZS5oCitpbmRleCA5ZmM5N2ZhLi4yYjZkNDI5IDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuaAorKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAorQEAgLTYsOSArNiwyNyBAQAorICNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisgI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyAKKytzdHJ1Y3QgaGRsaW5rX3MKKyt7CisrCWV4dDJfaW5vX3Qgc3JjX2lubzsKKysJZXh0Ml9pbm9fdCBkc3RfaW5vOworK307CisrCisrc3RydWN0IGhkbGlua3NfcworK3sKKysJaW50IGNvdW50OworKwlzdHJ1Y3QgaGRsaW5rX3MgKmhkbDsKKyt9OworKworK3N0cnVjdCBoZGxpbmtzX3MgaGRsaW5rczsKKysKKyBleHQyX2ZpbHN5cyAgICBjdXJyZW50X2ZzOworIGV4dDJfaW5vX3QgICAgIHJvb3Q7CisgCisrLyogRm9yIHNhdmluZyB0aGUgaGFyZCBsaW5rcyAqLworKyNkZWZpbmUgSERMSU5LX0NOVCAgICAgNAorK2V4dGVybiBpbnQgaGRsaW5rX2NudDsKKysKKyAvKiBGb3IgcG9wdWxhdGluZyB0aGUgZmlsZXN5c3RlbSAqLworIGV4dGVybiBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKTsKKyBleHRlcm4gZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpOworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmMgYi9taXNjL21rZTJmcy5jCitpbmRleCA1NzhiNjJkLi5hNjNmMGI3IDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuYworKysrIGIvbWlzYy9ta2UyZnMuYworQEAgLTI3MzAsNiArMjczMCwxOCBAQCBub19qb3VybmFsOgorIAkJaWYgKCFxdWlldCkKKyAJCQlwcmludGYoIiVzIiwgXygiQ29weWluZyBmaWxlcyBpbnRvIHRoZSBkZXZpY2U6ICIpKTsKKyAKKysJCS8qCisrCQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBoYXJkbGlua3MsIHdlIGRvbid0IG5lZWQgZnJlZSgpCisrCQkgKiBzaW5jZSB0aGUgbGlmZXNwYW4gd2lsbCBiZSBvdmVyIGFmdGVyIHRoZSBmcyBwb3B1bGF0ZWQuCisrCQkgKi8KKysJCWlmICgoaGRsaW5rcy5oZGwgPSAoc3RydWN0IGhkbGlua19zICopCisrCQkJCW1hbGxvYyhoZGxpbmtfY250ICogc2l6ZW9mKHN0cnVjdCBoZGxpbmtfcykpKSA9PSBOVUxMKSB7CisrCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuTm90IGVub3VnaCBtZW1vcnlcbiIpKTsKKysJCQlyZXR2YWwgPSBleHQyZnNfY2xvc2UoZnMpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCisrCQloZGxpbmtzLmNvdW50ID0gMDsKKyAJCWN1cnJlbnRfZnMgPSBmczsKKyAJCXJvb3QgPSBFWFQyX1JPT1RfSU5POworIAkJcmV0dmFsID0gcG9wdWxhdGVfZnMocm9vdCwgcm9vdF9kaXIpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTAtZGVidWdmcy11c2UtdGhlLWZ1bmN0aW9ucy1pbi1taXNjLWNyZWF0ZV9pbm9kZS5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNmNhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaApAQCAtMCwwICsxLDQ5NiBAQAorRnJvbSBkYjg5OTkyZmFiMjIxNWY1MmRjZTRjNTk1YTM5MjcxYjRmZjMwMDBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDA0OjIyOjIyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTFdIGRlYnVnZnM6IHVzZSB0aGUgZnVuY3Rpb25zIGluIG1pc2MvY3JlYXRlX2lub2RlLmMKKworKiBVc2UgdGhlIGZ1bmN0aW9ucyBpbiBtaXNjL2NyZWF0ZV9pbm9kZS5jLCBhbmQgcmVtb3ZlIHRoZSBkdXBsaWNhdGVkCisgIGNvZGUuCisKKyogVGhlIENSRUFURV9JTk9ERV9ERVBTIGluIHRoZSBkZWJ1Z2ZzL01ha2VmaWxlLmluIGlzIHVzZWQgZm9yIHJlY29yZGluZworICBjcmVhdGVfaW5vZGUubydzIGRlcGVuZHMgd2hpY2ggaXMgZnJvbSBtaXNjL01ha2VmaWxlLmluLCB3ZSBoYXZlIHRvCisgIHJlY29tcGlsZSBjcmVhdGVfaW5vZGUubyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gcHJpbnQgbW9yZSBtZXNzYWdlcyB3aGVuCisgIGl0IGlzIHVzZWQgYnkgZGVidWdmcywganVzdCBsaWtlIHdlIHJlY29tcGlsZSBlMmZyZWVmcmFnLm8sIGJ1dCBpdCBzZWVtcworICB0aGF0IHRoZSBlMmZyZWVmcmFnLm8ncyBkZXBlbmRzIGluIGRlYnVnZnMvTWFrZWZpbGUuaW4gaXMgaW5jb3JyZWN0LCBpdAorICB3b3VsZCBub3QgcmVidWlsZCB3aGVuIGl0cyBkZXBlbmRzIChlLmcuOiBsaWIvY29uZmlnLmgpIGlzIGNoYW5nZWQsCisgIHdoaWNoIHdvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgZXJyb3JzLiBNYWtlIGR1cGxpY2F0ZWQgY29kZSBpbgorICBkZWJ1Z2ZzL01ha2VmaWxlLmluIGFuZCBtaXNjL01ha2VmaWxlLmluIGlzIG5vdCBhIGdvb2QgaWRlYSwgbWF5YmUgd2UnZAorICBiZXR0ZXIgZGVmaW5lIENSRUFURV9JTk9ERV9ERVBTIGluIHRoZSB0b3AgTWFrZWZpbGUsIEknZCBsaWtlIHRvIHNlbmQKKyAgYW5vdGhlciBwYXRjaCBhbmQgZml4IHRoZSBlMmZyZWVmcmFnIGlmIHlvdSBhcmUgZmluZSB3aXRoIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgZGVidWdmcy9NYWtlZmlsZS5pbiB8ICAgMTcgKystCisgZGVidWdmcy9kZWJ1Z2ZzLmMgICB8ICAzMDUgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZGVidWdmcy9kZWJ1Z2ZzLmggICB8ICAgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgMjkyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9NYWtlZmlsZS5pbiBiL2RlYnVnZnMvTWFrZWZpbGUuaW4KK2luZGV4IGJmMDM3ZTAuLmY1MWI3OGUgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL01ha2VmaWxlLmluCisrKysgYi9kZWJ1Z2ZzL01ha2VmaWxlLmluCitAQCAtMTgsNyArMTgsNyBAQCBNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uL2xpYi9zcyAuLi9saWIvc3MvbWtfY21kcworIAorIERFQlVHX09CSlM9IGRlYnVnX2NtZHMubyBkZWJ1Z2ZzLm8gdXRpbC5vIG5jaGVjay5vIGljaGVjay5vIGxzLm8gXAorIAlsc2RlbC5vIGR1bXAubyBzZXRfZmllbGRzLm8gbG9nZHVtcC5vIGh0cmVlLm8gdW51c2VkLm8gZTJmcmVlZnJhZy5vIFwKKy0JZmlsZWZyYWcubyBleHRlbnRfY21kcy5vIGV4dGVudF9pbm9kZS5vIHphcC5vCisrCWZpbGVmcmFnLm8gZXh0ZW50X2NtZHMubyBleHRlbnRfaW5vZGUubyB6YXAubyBjcmVhdGVfaW5vZGUubworIAorIFJPX0RFQlVHX09CSlM9IHJvX2RlYnVnX2NtZHMubyByb19kZWJ1Z2ZzLm8gdXRpbC5vIG5jaGVjay5vIGljaGVjay5vIGxzLm8gXAorIAlsc2RlbC5vIGxvZ2R1bXAubyBodHJlZS5vIGUyZnJlZWZyYWcubyBmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gXAorQEAgLTI4LDcgKzI4LDEzIEBAIFNSQ1M9IGRlYnVnX2NtZHMuYyAkKHNyY2RpcikvZGVidWdmcy5jICQoc3JjZGlyKS91dGlsLmMgJChzcmNkaXIpL2xzLmMgXAorIAkkKHNyY2RpcikvbmNoZWNrLmMgJChzcmNkaXIpL2ljaGVjay5jICQoc3JjZGlyKS9sc2RlbC5jIFwKKyAJJChzcmNkaXIpL2R1bXAuYyAkKHNyY2Rpcikvc2V0X2ZpZWxkcy5jICR7c3JjZGlyfS9sb2dkdW1wLmMgXAorIAkkKHNyY2RpcikvaHRyZWUuYyAkKHNyY2RpcikvdW51c2VkLmMgJHtzcmNkaXJ9Ly4uL21pc2MvZTJmcmVlZnJhZy5jIFwKKy0JJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2V4dGVudF9pbm9kZS5jICQoc3JjZGlyKS96YXAuYworKwkkKHNyY2RpcikvZmlsZWZyYWcuYyAkKHNyY2RpcikvZXh0ZW50X2lub2RlLmMgJChzcmNkaXIpL3phcC5jIFwKKysJJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmMKKysKKytDUkVBVEVfSU5PREVfREVQUz0gJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmggXAorKwkkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKysJJChzcmNkaXIpLy4uL2xpYi9leHQyZnMvZXh0MmZzLmggJChzcmNkaXIpLy4uL2xpYi9ldC9jb21fZXJyLmggXAorKwkkKHNyY2RpcikvLi4vbGliL2UycC9lMnAuaCAkKHNyY2RpcikvLi4vbWlzYy9ubHMtZW5hYmxlLmgKKyAKKyBMSUJTPSAkKExJQkVYVDJGUykgJChMSUJFMlApICQoTElCU1MpICQoTElCQ09NX0VSUikgJChMSUJCTEtJRCkgXAorIAkkKExJQlVVSUQpCitAQCAtODEsNiArODcsMTEgQEAgZTJmcmVlZnJhZy5vOiAkKHNyY2RpcikvLi4vbWlzYy9lMmZyZWVmcmFnLmMKKyAJJChFKSAiCUNDICRAIgorIAkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgLUkkKHNyY2RpcikgJDwgLURERUJVR0ZTIC1vICRACisgCisrY3JlYXRlX2lub2RlLm86ICQoQ1JFQVRFX0lOT0RFX0RFUFMpCisrCSQoRSkgIglDQyAkQCIKKysJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpIC1JJChzcmNkaXIpIFwKKysJCSAkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuYyAtRERFQlVHRlMgLW8gJEAKKysKKyBkZWJ1Z2ZzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9kZWJ1Z2ZzLjguaW4KKyAJJChFKSAiCVNVQlNUICRAIgorIAkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9kZWJ1Z2ZzLjguaW4gZGVidWdmcy44CitAQCAtMTQyLDcgKzE1Myw3IEBAIGRlYnVnZnMubzogJChzcmNkaXIpL2RlYnVnZnMuYyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCAkKHNyY2RpcikvamZzX3VzZXIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2pmc19jb21wYXQuaCBcCistICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCisrICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oICQodG9wX3NyY2RpcikvbWlzYy91dGlsLmgKKyB1dGlsLm86ICQoc3JjZGlyKS91dGlsLmMgJChzcmNkaXIpL2RlYnVnZnMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmMgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworaW5kZXggOWMyMTVmNy4uNjJlOWY0NCAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5jCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworQEAgLTI1LDggKzI1LDYgQEAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgI2luY2x1ZGUgImRlYnVnZnMuaCIKKyAjaW5jbHVkZSAidXVpZC91dWlkLmgiCitAQCAtNDEsMjIgKzM5LDExIEBAIGV4dGVybiBjaGFyICpvcHRhcmc7CisgI2RlZmluZSBCVUZTSVogODE5MgorICNlbmRpZgorIAorLS8qIDY0S2lCIGlzIHRoZSBtaW5pbWl1bSBibGtzaXplIHRvIGJlc3QgbWluaW1pemUgc3lzdGVtIGNhbGwgb3ZlcmhlYWQuICovCistI2lmbmRlZiBJT19CVUZTSVpFCistI2RlZmluZSBJT19CVUZTSVpFIDY0KjEwMjQKKy0jZW5kaWYKKy0KKy0vKiBCbG9jayBzaXplIGZvciBgc3RfYmxvY2tzJyAqLworLSNpZm5kZWYgU19CTEtTSVpFCistI2RlZmluZSBTX0JMS1NJWkUgNTEyCistI2VuZGlmCistCisgc3NfcmVxdWVzdF90YWJsZSAqZXh0cmFfY21kczsKKyBjb25zdCBjaGFyICpkZWJ1Z19wcm9nX25hbWU7CisgaW50IHNjaV9pZHg7CisgCistZXh0Ml9maWxzeXMJY3VycmVudF9mcyA9IE5VTEw7CistZXh0Ml9pbm9fdAlyb290LCBjd2Q7CisrZXh0Ml9pbm9fdAljd2Q7CisgCisgc3RhdGljIHZvaWQgb3Blbl9maWxlc3lzdGVtKGNoYXIgKmRldmljZSwgaW50IG9wZW5fZmxhZ3MsIGJsazY0X3Qgc3VwZXJibG9jaywKKyAJCQkgICAgYmxrNjRfdCBibG9ja3NpemUsIGludCBjYXRhc3Ryb3BoaWMsCitAQCAtMTU3NiwxODkgKzE1NjMsMjQgQEAgdm9pZCBkb19maW5kX2ZyZWVfaW5vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB9CisgCisgI2lmbmRlZiBSRUFEX09OTFkKKy1zdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorLXsKKy0JZXh0Ml9maWxlX3QJZTJfZmlsZTsKKy0JZXJyY29kZV90CXJldHZhbDsKKy0JaW50CQlnb3Q7CistCXVuc2lnbmVkIGludAl3cml0dGVuOworLQljaGFyCQkqYnVmOworLQljaGFyCQkqcHRyOworLQljaGFyCQkqemVyb19idWY7CistCWludAkJY21wOworLQorLQlyZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGN1cnJlbnRfZnMsIG5ld2ZpbGUsCistCQkJCSAgRVhUMl9GSUxFX1dSSVRFLCAmZTJfZmlsZSk7CistCWlmIChyZXR2YWwpCistCQlyZXR1cm4gcmV0dmFsOworLQorLQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShidWZzaXplLCAmYnVmKTsKKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKy0JCXJldHVybiByZXR2YWw7CistCX0KKy0KKy0JLyogVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB3aG9sZSBibG9jayBpcyB6ZXJvICovCistCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhidWZzaXplLCAmemVyb19idWYpOworLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworLQkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworLQkJcmV0dXJuIHJldHZhbDsKKy0JfQorLQorLQl3aGlsZSAoMSkgeworLQkJZ290ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKTsKKy0JCWlmIChnb3QgPT0gMCkKKy0JCQlicmVhazsKKy0JCWlmIChnb3QgPCAwKSB7CistCQkJcmV0dmFsID0gZXJybm87CistCQkJZ290byBmYWlsOworLQkJfQorLQkJcHRyID0gYnVmOworLQorLQkJLyogU3BhcnNlIGNvcHkgKi8KKy0JCWlmIChtYWtlX2hvbGVzKSB7CistCQkJLyogQ2hlY2sgd2hldGhlciBhbGwgaXMgemVybyAqLworLQkJCWNtcCA9IG1lbWNtcChwdHIsIHplcm9fYnVmLCBnb3QpOworLQkJCWlmIChjbXAgPT0gMCkgeworLQkJCQkgLyogVGhlIHdob2xlIGJsb2NrIGlzIHplcm8sIG1ha2UgYSBob2xlICovCistCQkJCXJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIGdvdCwgRVhUMl9TRUVLX0NVUiwgTlVMTCk7CistCQkJCWlmIChyZXR2YWwpCistCQkJCQlnb3RvIGZhaWw7CistCQkJCWdvdCA9IDA7CistCQkJfQorLQkJfQorLQorLQkJLyogTm9ybWFsIGNvcHkgKi8KKy0JCXdoaWxlIChnb3QgPiAwKSB7CistCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLAorLQkJCQkJCSAgIGdvdCwgJndyaXR0ZW4pOworLQkJCWlmIChyZXR2YWwpCistCQkJCWdvdG8gZmFpbDsKKy0KKy0JCQlnb3QgLT0gd3JpdHRlbjsKKy0JCQlwdHIgKz0gd3JpdHRlbjsKKy0JCX0KKy0JfQorLQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CistCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworLQlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKy0JcmV0dXJuIHJldHZhbDsKKy0KKy1mYWlsOgorLQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CistCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworLQkodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CistCXJldHVybiByZXR2YWw7CistfQorLQorLQorIHZvaWQgZG9fd3JpdGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CistCWludAkJZmQ7CistCXN0cnVjdCBzdGF0CXN0YXRidWY7CistCWV4dDJfaW5vX3QJbmV3ZmlsZTsKKyAJZXJyY29kZV90CXJldHZhbDsKKy0Jc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CistCWludAkJYnVmc2l6ZSA9IElPX0JVRlNJWkU7CistCWludAkJbWFrZV9ob2xlcyA9IDA7CisgCisgCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsICJ3cml0ZSIsCisgCQkJCSI8bmF0aXZlIGZpbGU+IDxuZXcgZmlsZT4iLCBDSEVDS19GU19SVykpCisgCQlyZXR1cm47CisgCistCWZkID0gb3Blbihhcmd2WzFdLCBPX1JET05MWSk7CistCWlmIChmZCA8IDApIHsKKy0JCWNvbV9lcnIoYXJndlsxXSwgZXJybm8sIDApOworLQkJcmV0dXJuOworLQl9CistCWlmIChmc3RhdChmZCwgJnN0YXRidWYpIDwgMCkgeworLQkJY29tX2Vycihhcmd2WzFdLCBlcnJubywgMCk7CistCQljbG9zZShmZCk7CistCQlyZXR1cm47CistCX0KKy0KKy0JcmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgYXJndlsyXSwgJm5ld2ZpbGUpOworLQlpZiAocmV0dmFsID09IDApIHsKKy0JCWNvbV9lcnIoYXJndlswXSwgMCwgIlRoZSBmaWxlICclcycgYWxyZWFkeSBleGlzdHNcbiIsIGFyZ3ZbMl0pOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCistCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKy0JaWYgKHJldHZhbCkgeworKwlpZiAoKHJldHZhbCA9IGRvX3dyaXRlX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgYXJndlsyXSkpKQorIAkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CistCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsyXSwgbmV3ZmlsZSwKKy0JCQkgICAgIEVYVDJfRlRfUkVHX0ZJTEUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCWNsb3NlKGZkKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMl0sIG5ld2ZpbGUsCistCQkJCSAgICAgRVhUMl9GVF9SRUdfRklMRSk7CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2Vycihhcmd2WzJdLCByZXR2YWwsIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworLQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKy0JbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CistCWlub2RlLmlfbW9kZSA9IChzdGF0YnVmLnN0X21vZGUgJiB+TElOVVhfU19JRk1UKSB8IExJTlVYX1NfSUZSRUc7CistCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CistCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworLQlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKy0JaW5vZGUuaV9zaXplID0gc3RhdGJ1Zi5zdF9zaXplOworLQlpZiAoY3VycmVudF9mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCistCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworLQkJaW50IGk7CistCQlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKy0KKy0JCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgJmlub2RlLmlfYmxvY2tbMF07CistCQllaC0+ZWhfZGVwdGggPSAwOworLQkJZWgtPmVoX2VudHJpZXMgPSAwOworLQkJZWgtPmVoX21hZ2ljID0gZXh0MmZzX2NwdV90b19sZTE2KEVYVDNfRVhUX01BR0lDKTsKKy0JCWkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKy0JCQlzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKy0JCWVoLT5laF9tYXggPSBleHQyZnNfY3B1X3RvX2xlMTYoaSk7CistCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKy0JfQorLQlpZiAoZGVidWdmc193cml0ZV9uZXdfaW5vZGUobmV3ZmlsZSwgJmlub2RlLCBhcmd2WzBdKSkgeworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLmlfbW9kZSkpIHsKKy0JCWlmIChzdGF0YnVmLnN0X2Jsb2NrcyA8IHN0YXRidWYuc3Rfc2l6ZSAvIFNfQkxLU0laRSkgeworLQkJCW1ha2VfaG9sZXMgPSAxOworLQkJCS8qCistCQkJICogVXNlIEkvTyBibG9ja3NpemUgYXMgYnVmZmVyIHNpemUgd2hlbgorLQkJCSAqIGNvcHlpbmcgc3BhcnNlIGZpbGVzLgorLQkJCSAqLworLQkJCWJ1ZnNpemUgPSBzdGF0YnVmLnN0X2Jsa3NpemU7CistCQl9CistCQlyZXR2YWwgPSBjb3B5X2ZpbGUoZmQsIG5ld2ZpbGUsIGJ1ZnNpemUsIG1ha2VfaG9sZXMpOworLQkJaWYgKHJldHZhbCkKKy0JCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsIDApOworLQl9CistCWNsb3NlKGZkKTsKKyB9CisgCisgdm9pZCBkb19ta25vZChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAJdW5zaWduZWQgbG9uZwltb2RlLCBtYWpvciwgbWlub3I7CistCWV4dDJfaW5vX3QJbmV3ZmlsZTsKKyAJZXJyY29kZV90IAlyZXR2YWw7CistCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworIAlpbnQJCWZpbGV0eXBlLCBucjsKKysJc3RydWN0IHN0YXQJc3Q7CisgCisgCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorIAkJcmV0dXJuOworQEAgLTE3NjcsMTE1ICsxNTg5LDUwIEBAIHZvaWQgZG9fbWtub2QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBta25vZCA8bmFtZT4gW3B8IFtjfGJdIDxtYWpvcj4gPG1pbm9yPl0iKTsKKyAJCXJldHVybjsKKyAJfQorKworIAltb2RlID0gbWlub3IgPSBtYWpvciA9IDA7CisgCXN3aXRjaCAoYXJndlsyXVswXSkgeworIAkJY2FzZSAncCc6CistCQkJbW9kZSA9IExJTlVYX1NfSUZJRk87CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisrCQkJc3Quc3RfbW9kZSA9IFNfSUZJRk87CisgCQkJbnIgPSAzOworIAkJCWJyZWFrOworIAkJY2FzZSAnYyc6CistCQkJbW9kZSA9IExJTlVYX1NfSUZDSFI7CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0NIUkRFVjsKKysJCQlzdC5zdF9tb2RlID0gU19JRkNIUjsKKyAJCQluciA9IDU7CisgCQkJYnJlYWs7CisgCQljYXNlICdiJzoKKy0JCQltb2RlID0gTElOVVhfU19JRkJMSzsKKy0JCQlmaWxldHlwZSA9IEVYVDJfRlRfQkxLREVWOworKwkJCXN0LnN0X21vZGUgPSBTX0lGQkxLOworIAkJCW5yID0gNTsKKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CistCQkJZmlsZXR5cGUgPSAwOworIAkJCW5yID0gMDsKKyAJfQorKworIAlpZiAobnIgPT0gNSkgeworIAkJbWFqb3IgPSBzdHJ0b3VsKGFyZ3ZbM10sIGFyZ3YrMywgMCk7CisgCQltaW5vciA9IHN0cnRvdWwoYXJndls0XSwgYXJndis0LCAwKTsKKyAJCWlmIChtYWpvciA+IDY1NTM1IHx8IG1pbm9yID4gNjU1MzUgfHwgYXJndlszXVswXSB8fCBhcmd2WzRdWzBdKQorIAkJCW5yID0gMDsKKyAJfQorKworIAlpZiAoYXJnYyAhPSBucikKKyAJCWdvdG8gdXNhZ2U7CistCWlmIChjaGVja19mc19yZWFkX3dyaXRlKGFyZ3ZbMF0pKQorLQkJcmV0dXJuOworLQlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CistCWlmIChyZXR2YWwpIHsKKysKKysJc3Quc3RfcmRldiA9IG1ha2VkZXYobWFqb3IsIG1pbm9yKTsKKysJaWYgKChyZXR2YWwgPSBkb19ta25vZF9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sICZzdCkpKQorIAkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CistCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CistCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwgZmlsZXR5cGUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwKKy0JCQkJICAgICBmaWxldHlwZSk7CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2Vycihhcmd2WzFdLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CistICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworLQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKy0JbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CistCWlub2RlLmlfbW9kZSA9IG1vZGU7CistCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CistCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworLQlpZiAoKG1ham9yIDwgMjU2KSAmJiAobWlub3IgPCAyNTYpKSB7CistCQlpbm9kZS5pX2Jsb2NrWzBdID0gbWFqb3IqMjU2K21pbm9yOworLQkJaW5vZGUuaV9ibG9ja1sxXSA9IDA7CistCX0gZWxzZSB7CistCQlpbm9kZS5pX2Jsb2NrWzBdID0gMDsKKy0JCWlub2RlLmlfYmxvY2tbMV0gPSAobWlub3IgJiAweGZmKSB8IChtYWpvciA8PCA4KSB8ICgobWlub3IgJiB+MHhmZikgPDwgMTIpOworLQl9CistCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworLQlpZiAoZGVidWdmc193cml0ZV9uZXdfaW5vZGUobmV3ZmlsZSwgJmlub2RlLCBhcmd2WzBdKSkKKy0JCXJldHVybjsKKyB9CisgCisgdm9pZCBkb19ta2RpcihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKy0JY2hhcgkqY3A7CistCWV4dDJfaW5vX3QJcGFyZW50OworLQljaGFyCSpuYW1lOworIAllcnJjb2RlX3QgcmV0dmFsOworIAorIAlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAyLCAibWtkaXIiLAorIAkJCQkiPGZpbGVuYW1lPiIsIENIRUNLX0ZTX1JXKSkKKyAJCXJldHVybjsKKyAKKy0JY3AgPSBzdHJyY2hyKGFyZ3ZbMV0sICcvJyk7CistCWlmIChjcCkgeworLQkJKmNwID0gMDsKKy0JCXBhcmVudCA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKy0JCWlmICghcGFyZW50KSB7CistCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworLQkJCXJldHVybjsKKy0JCX0KKy0JCW5hbWUgPSBjcCsxOworLQl9IGVsc2UgeworLQkJcGFyZW50ID0gY3dkOworLQkJbmFtZSA9IGFyZ3ZbMV07CistCX0KKy0KKy10cnlfYWdhaW46CistCXJldHZhbCA9IGV4dDJmc19ta2RpcihjdXJyZW50X2ZzLCBwYXJlbnQsIDAsIG5hbWUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnQpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCWdvdG8gdHJ5X2FnYWluOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoImV4dDJmc19ta2RpciIsIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKysJaWYgKChyZXR2YWwgPSBkb19ta2Rpcl9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sIE5VTEwpKSkKKysJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKyAKKyB9CisgCitAQCAtMjI3MCw0NCArMjAyNywxNCBAQCB2b2lkIGRvX3B1bmNoKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgdm9pZCBkb19zeW1saW5rKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworLQljaGFyCQkqY3A7CistCWV4dDJfaW5vX3QJcGFyZW50OworLQljaGFyCQkqbmFtZSwgKnRhcmdldDsKKyAJZXJyY29kZV90CXJldHZhbDsKKyAKKyAJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgMywgInN5bWxpbmsiLAorIAkJCQkiPGZpbGVuYW1lPiA8dGFyZ2V0PiIsIENIRUNLX0ZTX1JXKSkKKyAJCXJldHVybjsKKyAKKy0JY3AgPSBzdHJyY2hyKGFyZ3ZbMV0sICcvJyk7CistCWlmIChjcCkgeworLQkJKmNwID0gMDsKKy0JCXBhcmVudCA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKy0JCWlmICghcGFyZW50KSB7CistCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworLQkJCXJldHVybjsKKy0JCX0KKy0JCW5hbWUgPSBjcCsxOworLQl9IGVsc2UgeworLQkJcGFyZW50ID0gY3dkOworLQkJbmFtZSA9IGFyZ3ZbMV07CistCX0KKy0JdGFyZ2V0ID0gYXJndlsyXTsKKy0KKy10cnlfYWdhaW46CistCXJldHZhbCA9IGV4dDJmc19zeW1saW5rKGN1cnJlbnRfZnMsIHBhcmVudCwgMCwgbmFtZSwgdGFyZ2V0KTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50KTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlnb3RvIHRyeV9hZ2FpbjsKKy0JfQorLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJleHQyZnNfc3ltbGluayIsIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKysJaWYgKChyZXR2YWwgPSBkb19zeW1saW5rX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgYXJndlsyXSkpKQorKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworIAorIH0KKyAKK2RpZmYgLS1naXQgYS9kZWJ1Z2ZzL2RlYnVnZnMuaCBiL2RlYnVnZnMvZGVidWdmcy5oCitpbmRleCA2YjRmNmVmLi4yZDQ2NGMxIDEwMDY0NAorLS0tIGEvZGVidWdmcy9kZWJ1Z2ZzLmgKKysrKyBiL2RlYnVnZnMvZGVidWdmcy5oCitAQCAtNSw2ICs1LDcgQEAKKyAjaW5jbHVkZSAic3Mvc3MuaCIKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorKyNpbmNsdWRlICIuLi9taXNjL2NyZWF0ZV9pbm9kZS5oIgorIAorICNpZmRlZiBfX1NURENfXworICNkZWZpbmUgTk9BUkdTIHZvaWQKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDJjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDExLW1rZTJmcy44LmluLXVwZGF0ZS10aGUtbWFudWFsLWZvci10aGUtZC1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA4OWZjYTQzOWYxYjU4NTk1ZjJmNDI0NTk4YTI3ODY5ZjhjN2JkODE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDA0OjQzOjE4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTFdIG1rZTJmcy44LmluOiB1cGRhdGUgdGhlIG1hbnVhbCBmb3IgdGhlIC1kIG9wdGlvbgorCitVcGRhdGUgdGhlIG1hbnVhbCBmb3IgdGhlIC1kIG9wdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9ta2UyZnMuOC5pbiB8ICAgIDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLjguaW4gYi9taXNjL21rZTJmcy44LmluCitpbmRleCBmZWE1MGRhLi5iMWNhNDg2IDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuOC5pbgorKysrIGIvbWlzYy9ta2UyZnMuOC5pbgorQEAgLTUyLDYgKzUyLDEwIEBAIG1rZTJmcyBcLSBjcmVhdGUgYW4gZXh0Mi9leHQzL2V4dDQgZmlsZXN5c3RlbQorIC5JIG51bWJlci1vZi1pbm9kZXMKKyBdCisgWworKy5CIFwtZAorKy5JIHJvb3QtZGlyZWN0b3J5CisrXQorK1sKKyAuQiBcLW4KKyBdCisgWworQEAgLTUwMiw2ICs1MDYsOSBAQCB0aGUKKyByYXRpbykuICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBudW1iZXIKKyBvZiBkZXNpcmVkIGlub2RlcyBkaXJlY3RseS4KKyAuVFAKKysuQkkgXC1kICIgcm9vdC1kaXJlY3RvcnkiCisrQWRkIHRoZSBmaWxlcyBmcm9tIHRoZSByb290LWRpcmVjdG9yeSB0byB0aGUgZmlsZXN5c3RlbS4KKysuVFAKKyAuQkkgXC1vICIgY3JlYXRvci1vcyIKKyBPdmVycmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICJjcmVhdG9yIG9wZXJhdGluZyBzeXN0ZW0iIGZpZWxkIG9mIHRoZQorIGZpbGVzeXN0ZW0uICBUaGUgY3JlYXRvciBmaWVsZCBpcyBzZXQgYnkgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiB0aGUgT1MgdGhlCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODAwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzZmZjdmZWI5MDM4ZDZlOGFhZmZlMmU2OWIyMDVhZDVmYTMzZGYyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CitEYXRlOiBNb24sIDE4IEF1ZyAyMDE0IDIxOjAyOjU2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBtdXNsIGJ1aWxkIGZhaWx1cmVzCisKK0luIGxpYi9leHQyZnMvdW5peF9pby5jLCBfX3U2NCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIF9fdWludDY0X3QuIFRoaXMgdHlwZQoraXMgZ3VhcmFudGVlZCBieSB0aGUgZTJmc3Byb2dzIGJ1aWxkIHN5c3RlbS4KKyg3OTVjMDJkZWYzNjgxYTk5Y2M3OTJhNWViYzE2MmQwNmY4YTFlZWI3KQorCitJbiBtaXNjL2NyZWF0ZV9pbm9kZS5jLCA8bGltaXRzLmg+IGlzIG5lZWRlZCBmb3IgdGhlIGRlZmluaXRpb24gb2YgUEFUSF9NQVguCisoYmJjY2M2ZjNjNmExMDY3MjFmYjZmMWVmNGRmNmJjMzJjNzk4NjIzNSkKKworQm90aCBvZiB0aGVzZSBmaXhlcyBoYXZlIGJlZW4gbWFkZSB1cHN0cmVhbSB3aXRoIHRoZSBnaXQgY29tbWl0IElEcyBnaXZlbiBidXQKK3Rob3NlIGFyZSBsYXJnZXIgY29tbWl0cyBjb250YWluaW5nIG90aGVyIGNoYW5nZXMgbm90IG5lZWRlZCBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBsaWIvZXh0MmZzL3VuaXhfaW8uYyB8IDYgKysrLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdW5peF9pby5jIGIvbGliL2V4dDJmcy91bml4X2lvLmMKK2luZGV4IDE5YmU2MzAuLjBjYzBmNTIgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL3VuaXhfaW8uYworKysrIGIvbGliL2V4dDJmcy91bml4X2lvLmMKK0BAIC05MzEsMTAgKzkzMSwxMCBAQCBzdGF0aWMgZXJyY29kZV90IHVuaXhfZGlzY2FyZChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKyAKKyAJaWYgKGNoYW5uZWwtPmZsYWdzICYgQ0hBTk5FTF9GTEFHU19CTE9DS19ERVZJQ0UpIHsKKyAjaWZkZWYgQkxLRElTQ0FSRAorLQkJX191aW50NjRfdCByYW5nZVsyXTsKKysJCV9fdTY0IHJhbmdlWzJdOworIAorLQkJcmFuZ2VbMF0gPSAoX191aW50NjRfdCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKy0JCXJhbmdlWzFdID0gKF9fdWludDY0X3QpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisrCQlyYW5nZVswXSA9IChfX3U2NCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKysJCXJhbmdlWzFdID0gKF9fdTY0KShjb3VudCkgKiBjaGFubmVsLT5ibG9ja19zaXplOworIAorIAkJcmV0ID0gaW9jdGwoZGF0YS0+ZGV2LCBCTEtESVNDQVJELCAmcmFuZ2UpOworICNlbHNlCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDZkOGRlMDQuLmZjZWM1YWEgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMSw0ICsxLDUgQEAKKyAjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTAorICMgaWYgX19HTlVDX18gPj0gMgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU2N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tIGY2NmU2Y2U0NDQ2NzM4YzJjN2Y0M2Q0MTk4OGEzZWI3MzM0N2UyZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorRGF0ZTogU2F0LCA5IEF1ZyAyMDE0IDEyOjI0OjU0IC0wNDAwCitTdWJqZWN0OiBsaWJleHQyZnM6IGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyBpZiBzX2ZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZworCitJZiBzX2ZpcnN0X21ldGFfYmcgaXMgZ3JlYXRlciB0aGFuIHRoZSBvZiBudW1iZXIgYmxvY2sgZ3JvdXAKK2Rlc2NyaXB0b3IgYmxvY2tzLCB0aGVuIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKK3dpbGwgZW5kIHVwIG92ZXJydW5pbmcgdGhlIG1lbW9yeSBidWZmZXIgYWxsb2NhdGVkIGZvciB0aGUKK2Rlc2NyaXB0b3JzLiAgRml4IHRoaXMgYnkgbGltaXRpbmcgZmlyc3RfbWV0YV9iZyB0byBubyBtb3JlIHRoYW4KK2ZzLT5kZXNjX2Jsb2Nrcy4gIFRoaXMgZG9lc24ndCBjb3JyZWN0IHRoZSBiYWQgc19maXJzdF9tZXRhX2JnIHZhbHVlLAorYnV0IGl0IGF2b2lkcyBjYXVzaW5nIHRoZSBlMmZzcHJvZ3MgdXNlcnNwYWNlIHByb2dyYW1zIGZyb20KK3BvdGVudGlhbGx5IGNyYXNoaW5nLgorCitGaXhlcyBDVkUtMjAxNS0wMjQ3CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitTaWduZWQtb2ZmLWJ5OiBTb25hIFNhcm1hZGkgPHNvbmEuc2FybWFkaUBlbmVhLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK2luZGV4IDQ1OTllZWYuLjFmOTkxMTMgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL2Nsb3NlZnMuYworKysrIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK0BAIC0zNDQsOSArMzQ0LDExIEBAIGVycmNvZGVfdCBleHQyZnNfZmx1c2gyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCisgCSAqIHN1cGVyYmxvY2tzIGFuZCBncm91cCBkZXNjcmlwdG9ycy4KKyAJICovCisgCWdyb3VwX3B0ciA9IChjaGFyICopIGdyb3VwX3NoYWRvdzsKKy0JaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisrCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JZWxzZQorKwkJaWYgKG9sZF9kZXNjX2Jsb2NrcyA+IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnKQorKwkJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKysJfSBlbHNlCisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CisgCisgCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2luaXQoZnMsICZwcm9ncmVzcywgTlVMTCwKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL29wZW5mcy5jIGIvbGliL2V4dDJmcy9vcGVuZnMuYworaW5kZXggYTFhMzUxNy4uYmE1MDFlNiAxMDA2NDQKKy0tLSBhL2xpYi9leHQyZnMvb3BlbmZzLmMKKysrKyBiL2xpYi9leHQyZnMvb3BlbmZzLmMKK0BAIC0zNzgsOSArMzc4LDExIEBAIGVycmNvZGVfdCBleHQyZnNfb3BlbjIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaW9fb3B0aW9ucywKKyAjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgCWdyb3Vwc19wZXJfYmxvY2sgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisgI2VuZGlmCistCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworIAkJZmlyc3RfbWV0YV9iZyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworLQllbHNlCisrCQlpZiAoZmlyc3RfbWV0YV9iZyA+IGZzLT5kZXNjX2Jsb2NrcykKKysJCQlmaXJzdF9tZXRhX2JnID0gZnMtPmRlc2NfYmxvY2tzOworKwl9IGVsc2UKKyAJCWZpcnN0X21ldGFfYmcgPSBmcy0+ZGVzY19ibG9ja3M7CisgCWlmIChmaXJzdF9tZXRhX2JnKSB7CisgCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrKGZzLT5pbywgZ3JvdXBfYmxvY2sgKworLS0gCitjZ2l0IHYwLjEwLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYmQ3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwxMzUgQEAKKyMgRXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncyBzaGlwcGVkIGFjbG9jYWwubTQuIEN1c3RvbSBtYWNyb3Mgc2hvdWxkIGJlIGluCisjIGFjaW5jbHVkZS5tNCBzbyBydW5uaW5nIGFjbG9jYWwgZG9lc24ndCBibG93IHRoZW0gYXdheS4KKyMKKyMgU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworIyBmcm9tIGh0dHA6Ly9hdXRvY29uZi1hcmNoaXZlLmNyeXAudG8vYXhfdGxzLmh0bWwKKyMKKyMgVGhpcyB3YXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgcmVzcGVjdGl2ZSBBdXRvY29uZiBNYWNybydzIGNvcHlyaWdodAorIyBvd25lciBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlCisjIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nCisjIHRoZSBNYWNyby4gWW91IG5lZWQgbm90IGZvbGxvdyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIHdoZW4gdXNpbmcgb3IgZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cywgZXZlbiB0aG91Z2gKKyMgcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4gYWxsIG90aGVyIHVzZSBvZiB0aGUgbWF0ZXJpYWwgdGhhdAorIyBjb25zdGl0dXRlcyB0aGUgQXV0b2NvbmYgTWFjcm8uCisjCisjIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQorIyBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgTWFjcm8gQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZQorIyBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UgbWF5CisjIGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZAorIyB2ZXJzaW9uIGFzIHdlbGwuCisjCitBQ19ERUZVTihbQVhfVExTXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIGNsYXNzKQorICBBQ19DQUNIRV9WQUwoYWNfY3ZfdGxzLCBbCisgICAgYXhfdGxzX2tleXdvcmRzPSJfX3RocmVhZCBfX2RlY2xzcGVjKHRocmVhZCkgbm9uZSIKKyAgICBmb3IgYXhfdGxzX2tleXdvcmQgaW4gJGF4X3Rsc19rZXl3b3JkczsgZG8KKyAgICAgICBjYXNlICRheF90bHNfa2V5d29yZCBpbgorICAgICAgICAgIG5vbmUpIGFjX2N2X3Rscz1ub25lIDsgYnJlYWsgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKAorICAgICAgICAgICAgICAgIFsjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgICAgICAgICAgIGZvbyh2b2lkKSB7CisgICAgICAgICAgICAgICAgIHN0YXRpYyBdICRheF90bHNfa2V5d29yZCBbIGludCBiYXI7CisgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgW2FjX2N2X3Rscz0kYXhfdGxzX2tleXdvcmQgOyBicmVha10sCisgICAgICAgICAgICAgICAgIGFjX2N2X3Rscz1ub25lCisgICAgICAgICAgICAgKQorICAgICAgICAgIGVzYWMKKyAgICBkb25lCitdKQorCisgIGlmIHRlc3QgIiRhY19jdl90bHMiICE9ICJub25lIjsgdGhlbgorICAgIGRubCBBQ19ERUZJTkUoW1RMU10sIFtdLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtUTFNdLCAkYWNfY3ZfdGxzLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgIGZpCisgIEFDX01TR19SRVNVTFQoJGFjX2N2X3RscykKK10pCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICAgICAgaHR0cDovL3d3dy5ub25nbnUub3JnL2F1dG9jb25mLWFyY2hpdmUvY2hlY2tfZ251X21ha2UuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBDSEVDS19HTlVfTUFLRSgpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBzZWFyY2hlcyBmb3IgYSBHTlUgdmVyc2lvbiBvZiBtYWtlLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUKKyMgICBtYWtlZmlsZSB2YXJpYWJsZSBgaWZHTlVtYWtlJyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZywgb3RoZXJ3aXNlIGl0CisjICAgaXMgc2V0IHRvICIjIi4gVGhpcyBpcyB1c2VmdWwgZm9yIGluY2x1ZGluZyBhIHNwZWNpYWwgZmVhdHVyZXMgaW4gYQorIyAgIE1ha2VmaWxlLCB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSBvdGhlciB2ZXJzaW9ucyBvZiBtYWtlLiBUaGUKKyMgICB2YXJpYWJsZSBfY3ZfZ251X21ha2VfY29tbWFuZCBpcyBzZXQgdG8gdGhlIGNvbW1hbmQgdG8gaW52b2tlIEdOVSBtYWtlCisjICAgaWYgaXQgZXhpc3RzLCB0aGUgZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyMKKyMgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaXRzIHVzZToKKyMKKyMgICBNYWtlZmlsZS5pbiBtaWdodCBjb250YWluOgorIworIyAgICAgICAjIEEgZmFpbHNhZmUgd2F5IG9mIHB1dHRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgaW50byBhIG1ha2VmaWxlCisjICAgICAgICQoREVQRU5EKToKKyMgICAgICAgICAgICAgICAkKENDKSAtTU0gJChzcmNkaXIpLyouYyA+ICQoREVQRU5EKQorIworIyAgICAgICBAaWZHTlVtYWtlQCBpZmVxICgkKERFUEVORCksJCh3aWxkY2FyZCAkKERFUEVORCkpKQorIyAgICAgICBAaWZHTlVtYWtlQCBpbmNsdWRlICQoREVQRU5EKQorIyAgICAgICBAaWZHTlVtYWtlQCBlbmRpZgorIworIyAgIFRoZW4gY29uZmlndXJlLmluIHdvdWxkIG5vcm1hbGx5IGNvbnRhaW46CisjCisjICAgICAgIENIRUNLX0dOVV9NQUtFKCkKKyMgICAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQorIworIyAgIFRoZW4gcGVyaGFwcyB0byBjYXVzZSBnbnUgbWFrZSB0byBvdmVycmlkZSBhbnkgb3RoZXIgbWFrZSwgd2UgY291bGQgZG8KKyMgICBzb21ldGhpbmcgbGlrZSB0aGlzIChub3RlIHRoYXQgR05VIG1ha2UgYWx3YXlzIGxvb2tzIGZvciBHTlVtYWtlZmlsZQorIyAgIGZpcnN0KToKKyMKKyMgICAgICAgaWYgICEgdGVzdCB4JF9jdl9nbnVfbWFrZV9jb21tYW5kID0geCA7IHRoZW4KKyMgICAgICAgICAgICAgICBtdiBNYWtlZmlsZSBHTlVtYWtlZmlsZQorIyAgICAgICAgICAgICAgIGVjaG8gLkRFRkFVTFQ6ID4gTWFrZWZpbGUgOworIyAgICAgICAgICAgICAgIGVjaG8gXCAgJF9jdl9nbnVfbWFrZV9jb21tYW5kIFwkQCA+PiBNYWtlZmlsZTsKKyMgICAgICAgZmkKKyMKKyMgICBUaGVuLCBpZiBhbnkgKHdlbGwgYWxtb3N0IGFueSkgb3RoZXIgbWFrZSBpcyBjYWxsZWQsIGFuZCBHTlUgbWFrZSBhbHNvCisjICAgZXhpc3RzLCB0aGVuIHRoZSBvdGhlciBtYWtlIHdyYXBzIHRoZSBHTlUgbWFrZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBKb2huIERhcnJpbmd0b24gPGouZGFycmluZ3RvbkBlbHZpcy5tdXJkb2NoLmVkdS5hdT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4KKyMKKyMgTm90ZTogTW9kaWZpZWQgYnkgVGVkIFRzJ28gdG8gYWRkIEBpZk5vdEdOVU1ha2VACisKK0FDX0RFRlVOKAorICAgICAgICBbQ0hFQ0tfR05VX01BS0VdLCBbIEFDX0NBQ0hFX0NIRUNLKCBmb3IgR05VIG1ha2UsX2N2X2dudV9tYWtlX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JycgOworZG5sIFNlYXJjaCBhbGwgdGhlIGNvbW1vbiBuYW1lcyBmb3IgR05VIG1ha2UKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiAiJE1BS0UiIG1ha2UgZ21ha2UgZ251bWFrZSA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkYSIgOyB0aGVuIGNvbnRpbnVlIDsgZmkgOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgICggc2ggLWMgIiRhIC0tdmVyc2lvbiIgMj4gL2Rldi9udWxsIHwgZ3JlcCBHTlUgIDI+JjEgPiAvZGV2L251bGwgKSA7ICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPSRhIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUgOworICAgICAgICApIDsKK2RubCBJZiB0aGVyZSB3YXMgYSBHTlUgdmVyc2lvbiwgdGhlbiBzZXQgQGlmR05VbWFrZUAgdG8gdGhlIGVtcHR5IHN0cmluZywgJyMnIG90aGVyd2lzZQorICAgICAgICBpZiB0ZXN0ICAieCRfY3ZfZ251X21ha2VfY29tbWFuZCIgIT0gIngiICA7IHRoZW4KKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nIycgOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScjJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCJOb3QgZm91bmQiKTsKKyAgICAgICAgZmkKKyAgICAgICAgQUNfU1VCU1QoaWZHTlVtYWtlKQorICAgICAgICBBQ19TVUJTVChpZk5vdEdOVW1ha2UpCitdICkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvY2FjaGVfaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1RoZSBjb21tZW50IHRvIHRoaXMgZnVuY3Rpb24gc2F5czoKKworIiIiCisgICogU3R1cGlkIGFsZ29yaXRobSAtLS0gd2Ugbm93IGp1c3Qgc2VhcmNoIGZvcndhcmQgc3RhcnRpbmcgZnJvbSB0aGUKKyAgKiBnb2FsLiAgU2hvdWxkIHB1dCBpbiBhIHNtYXJ0ZXIgb25lIHNvbWVkYXkuLi4uCisiIiIKKworVGhpcyBhZGRzIGluIGEgcmF0aGVyIGhhY2t5IGFsZ29ydGhpbSB3aGljaCBzdGFydHMgd2hlcmUgd2UgZmluaXNoZWQKK3NlYXJjaGluZyBwcmV2aW91c2x5IHVzaW5nIGEgc3RhdGljIHZhcmlhYmxlIHJhdGhlciB0aGFuIHN0YXJ0aW5nIAorZnJvbSBzY3JhdGNoIGlmIGEgaGludCBpc24ndCBwcm92aWRlZC4KKworVGhpcyB3YXMgYWZ0ZXIgbm90aWNpbmcgdGhhdCBta2ZzLmV4dDQgLUYgWCAtZCBZIHdhcyBzcGVuZGluZyAqbG90cyoKK29mIHRpbWUgaW4gZXh0MmZzX25ld19ibG9jazIgY2FsbGVkIGZyb20gZXh0MmZzX2JtYXAgZnJvbSBleHQyZnNfZmlsZV93cml0ZSgpLgorCitOdW1iZXJzIHdpc2UsIHRoaXMgdG9vayBhIGNvcmUtaW1hZ2Utc2F0by1zZGsgbWtmcyB0aW1lIGZyb20gb3ZlciAKKzggbWludXRlcyB0byBhcm91bmQgMzUgc2Vjb25kcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTUvMDIvMjAKKworSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvbGliL2V4dDJmcy9hbGxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDIuOS5vcmlnL2xpYi9leHQyZnMvYWxsb2MuYworKysrIGUyZnNwcm9ncy0xLjQyLjkvbGliL2V4dDJmcy9hbGxvYy5jCitAQCAtMTYwLDYgKzE2MCw4IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2lub2RlKGV4dDJfZmlsc3lzIGYKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBibGs2NF90IGxhc3RfZ29hbCA9IDA7CisrCisgLyoKKyAgKiBTdHVwaWQgYWxnb3JpdGhtIC0tLSB3ZSBub3cganVzdCBzZWFyY2ggZm9yd2FyZCBzdGFydGluZyBmcm9tIHRoZQorICAqIGdvYWwuICBTaG91bGQgcHV0IGluIGEgc21hcnRlciBvbmUgc29tZWRheS4uLi4KK0BAIC0xNzAsNiArMTcyLDkgQEAgZXJyY29kZV90IGV4dDJmc19uZXdfYmxvY2syKGV4dDJfZmlsc3lzCisgCWJsazY0X3QJaTsKKyAJaW50CWNfcmF0aW87CisgCisrICAgICAgICBpZiAoIWdvYWwpCisrICAgICAgICAgICAgZ29hbCA9IGxhc3RfZ29hbDsKKysKKyAJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKyAKKyAJaWYgKCFtYXApCitAQCAtMTk0LDYgKzE5OSw3IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrMihleHQyX2ZpbHN5cworIAorIAkJaWYgKCFleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIobWFwLCBpKSkgeworIAkJCSpyZXQgPSBpOworKwkJCWxhc3RfZ29hbCA9IGk7CisgCQkJcmV0dXJuIDA7CisgCQl9CisgCQlpID0gKGkgKyBjX3JhdGlvKSAmIH4oY19yYXRpbyAtIDEpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4Y2M0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAoraW5vZGUuYzogb25seSB1cGRhdGUgdGhlIGljYWNoZSBmb3IgZXh0Ml9pbm9kZQorCitXZSBvbmx5IHJlYWQgdGhlIGNhY2hlIHdoZW46CisKK2J1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKQorCit0aGVuIHdlIHNob3VsZCBvbmx5IHVwZGF0ZSB0aGUgY2FjaGUgaW4gdGhlIHNhbWUgY29uZGl0aW9uLCBvdGhlcndpc2UKK3RoZXJlIHdvdWxkIGJlIGVycm9ycywgZm9yIGV4YW1wbGU6CisKK2NhY2hlWzBdOiBjYWNoZWQgaW5vIDE0IHdoZW4gYnVmc2l6ZSA9IDEyOCBieSBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbCgpCitjYWNoZVsxXTogY2FjaGVkIGlubyAxNCB3aGVuIGJ1ZnNpemUgPSAxNTYgYnkgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbCgpCisKK1RoZW4gdXBkYXRlIHRoZSBjYWNoZToKK2NhY2hlWzBdOiBjYWNoZWQgaW5vIDE1IHdoZW4gYnVmc2l6ZSA9IDE1NiBieSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKCkKKworVGhlbiB0aGUgaW5vIDE0IHdvdWxkIGhpdCB0aGUgY2FjaGVbMV0gd2hlbiBidWZzaXplID0gMTI4IChidXQgaXQgd2FzCitjYWNoZWQgYnkgYnVmc2l6ZSA9IDE1NiksIHNvIHRoZXJlIHdvdWxkIGJlIGVycm9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvZXh0MmZzL2lub2RlLmMgfCAyMCArKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9pbm9kZS5jIGIvbGliL2V4dDJmcy9pbm9kZS5jCistLS0gYS9saWIvZXh0MmZzL2lub2RlLmMKKysrKyBiL2xpYi9leHQyZnMvaW5vZGUuYworQEAgLTYxMiwxMCArNjEyLDEyIEBAIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKyAjZW5kaWYKKyAKKyAJLyogVXBkYXRlIHRoZSBpbm9kZSBjYWNoZSAqLworLQlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gKGZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgKyAxKSAlCistCQlmcy0+aWNhY2hlLT5jYWNoZV9zaXplOworLQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm8gPSBpbm87CistCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlub2RlID0gKmlub2RlOworKwlpZiAoYnVmc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKSB7CisrCQlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gKGZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgKyAxKSAlCisrCQkJZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsKKysJCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlubyA9IGlubzsKKysJCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlub2RlID0gKmlub2RlOworKwl9CisgCisgCXJldHVybiAwOworIH0KK0BAIC02NDgsMTAgKzY1MCwxMiBAQCBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorIAorIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGlub2RlIGNhY2hlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgKi8KKyAJaWYgKGZzLT5pY2FjaGUpIHsKKy0JCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CistCQkJaWYgKGZzLT5pY2FjaGUtPmNhY2hlW2ldLmlubyA9PSBpbm8pIHsKKy0JCQkJZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vZGUgPSAqaW5vZGU7CistCQkJCWJyZWFrOworKwkJaWYgKGJ1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgeworKwkJCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CisrCQkJCWlmIChmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm8gPT0gaW5vKSB7CisrCQkJCQlmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm9kZSA9ICppbm9kZTsKKysJCQkJCWJyZWFrOworKwkJCQl9CisgCQkJfQorIAkJfQorIAl9IGVsc2UgeworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWlzYy1ta2UyZnMuYy1yZXR1cm4tZXJyb3Itd2hlbi1mYWlsZWQtdG8tcG9wdWxhdGUtZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMGNlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gZTRmZmQ2ZmU5NzU4ODhkMzA2YjVmNzAwYmE1NGFmMThiNTlmNjc1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyMCBNYXIgMjAxNCAxMToxMDoyMSArMDgwMAorU3ViamVjdDogW1BBVENIXSBtaXNjL21rZTJmcy5jOiByZXR1cm4gZXJyb3Igd2hlbiBmYWlsZWQgdG8gcG9wdWxhdGUgZmlsZXN5c3RlbQorCitXZSBuZWVkIHJldHVybiByZXR2YWwgd2hlbiAibWtlMmZzIC1kIiBmYWlsZWQsIG90aGVyd2lzZSB0aGUgIiQ/IiB3b3VsZAorYmUgMCB3aGljaCBpcyBtaXNsZWFkaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1pc2MvbWtlMmZzLmMgfCA3ICsrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKK2luZGV4IGE2M2YwYjcuLjg0NjE5MGUgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy5jCisrKysgYi9taXNjL21rZTJmcy5jCitAQCAtMjc0NSwxMCArMjc0NSwxMSBAQCBub19qb3VybmFsOgorIAkJY3VycmVudF9mcyA9IGZzOworIAkJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisgCQlyZXR2YWwgPSBwb3B1bGF0ZV9mcyhyb290LCByb290X2Rpcik7CistCQlpZiAocmV0dmFsKQorKwkJaWYgKHJldHZhbCkgeworIAkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorLQkJCQlfKCJcbkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZmlsZSBzeXN0ZW0iKSk7CistCQllbHNlIGlmICghcXVpZXQpCisrCQkJCV8oIlxuRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmaWxlIHN5c3RlbVxuIikpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9IGVsc2UgaWYgKCFxdWlldCkKKyAJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworIAl9CisgCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdhMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KKworSW5kZXg6IGUyZnNwcm9ncy0xLjQxLjUvcG8vTWFrZWZpbGUuaW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40MS41Lm9yaWcvcG8vTWFrZWZpbGUuaW4uaW4JMjAwOS0wMi0xNCAxMzo0OTowOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlMmZzcHJvZ3MtMS40MS41L3BvL01ha2VmaWxlLmluLmluCTIwMDktMDgtMTkgMTc6NTI6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtMzAsNyArMzAsNyBAQAorIElOU1RBTEwgPSBASU5TVEFMTEAKKyBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorIE1LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKKy1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJChNS0lOU1RBTExESVJTKQorK21raW5zdGFsbGRpcnMgPSAkKE1LSU5TVEFMTERJUlMpCisgCisgR01TR0ZNVCA9IEBHTVNHRk1UQAorIE1TR0ZNVCA9IEBNU0dGTVRACitJbmRleDogZTJmc3Byb2dzLTEuNDEuNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40MS41Lm9yaWcvY29uZmlndXJlLmluCTIwMDktMDgtMTkgMTc6NTM6NTAuMDAwMDAwMDAwICswMTAwCisrKysgZTJmc3Byb2dzLTEuNDEuNS9jb25maWd1cmUuaW4JMjAwOS0wOC0xOSAxNzo0ODozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NzAsNiArOTcwLDggQEAKKyBmaQorIEFDX1NVQlNUKEJVSUxEX0NGTEFHUykKKyBBQ19TVUJTVChCVUlMRF9MREZMQUdTKQorK01LSU5TVEFMTERJUlM9Im1rZGlyIC1wIgorK0FDX1NVQlNUKE1LSU5TVEFMTERJUlMpCisgZG5sCisgZG5sIE1ha2Ugb3VyIG91dHB1dCBmaWxlcywgYmVpbmcgc3VyZSB0aGF0IHdlIGNyZWF0ZSB0aGUgc29tZSBtaXNjZWxsYW5lb3VzIAorIGRubCBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE1M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40Mi45Lm9yaWcvdGVzdHMvTWFrZWZpbGUuaW4KKysrKyBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL01ha2VmaWxlLmluCitAQCAtMTgsNyArMTgsNyBAQCB0ZXN0X29uZTogJChzcmNkaXIpL3Rlc3Rfb25lLmluIE1ha2VmaWxlCisgCUBlY2hvICIjIS9iaW4vc2giID4gdGVzdF9vbmUKKyBASFRSRUVfQ01UQAlAZWNobyAiSFRSRUU9eSIgPj4gdGVzdF9vbmUKKyBAUVVPVEFfQ01UQAlAZWNobyAiUVVPVEE9eSIgPj4gdGVzdF9vbmUKKy0JQGVjaG8gIlNSQ0RJUj1Ac3JjZGlyQCIgPj4gdGVzdF9vbmUKKysJQGVjaG8gIlNSQ0RJUj0vdXNyL2xpYi9lMmZzcHJvZ3MvcHRlc3QvdGVzdCIgPj4gdGVzdF9vbmUKKyAJQGVjaG8gIkRJRkZfT1BUUz1AVU5JX0RJRkZfT1BUU0AiID4+IHRlc3Rfb25lCisgCUBjYXQgJChzcmNkaXIpL3Rlc3Rfb25lLmluID4+IHRlc3Rfb25lCisgCUBjaG1vZCAreCB0ZXN0X29uZQorQEAgLTI2LDcgKzI2LDcgQEAgdGVzdF9vbmU6ICQoc3JjZGlyKS90ZXN0X29uZS5pbiBNYWtlZmlsZQorIHRlc3Rfc2NyaXB0OiB0ZXN0X29uZSB0ZXN0X3NjcmlwdC5pbiBNYWtlZmlsZSBta2UyZnMuY29uZgorIAlAZWNobyAiQ3JlYXRpbmcgdGVzdF9zY3JpcHQuLi4iCisgCUBlY2hvICIjIS9iaW4vc2giID4gdGVzdF9zY3JpcHQKKy0JQGVjaG8gIlNSQ0RJUj1Ac3JjZGlyQCIgPj4gdGVzdF9zY3JpcHQKKysJQGVjaG8gIlNSQ0RJUj0vdXNyL2xpYi9lMmZzcHJvZ3MvcHRlc3QvdGVzdCIgPj4gdGVzdF9zY3JpcHQKKyAJQGNhdCAkKHNyY2RpcikvdGVzdF9zY3JpcHQuaW4gPj4gdGVzdF9zY3JpcHQKKyAJQGNobW9kICt4IHRlc3Rfc2NyaXB0CisgCitJbmRleDogZTJmc3Byb2dzLTEuNDIuOS90ZXN0cy90ZXN0X2NvbmZpZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQyLjkub3JpZy90ZXN0cy90ZXN0X2NvbmZpZworKysrIGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvdGVzdF9jb25maWcKK0BAIC0zLDIzICszLDIzIEBACisgIworIAorIHVuc2V0IExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgTENfVEVMRVBIT05FIExDX1RJTUUgUEFHRVIKKy1GU0NLPSIkVVNFX1ZBTEdSSU5EIC4uL2UyZnNjay9lMmZzY2siCistTUtFMkZTPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvbWtlMmZzIgorLURVTVBFMkZTPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvZHVtcGUyZnMiCistVFVORTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL3R1bmUyZnMiCistQ0hBVFRSPSIkVVNFX1ZBTEdSSU5ELi4vbWlzYy9jaGF0dHIiCistTFNBVFRSPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvbHNhdHRyIgorLUUySU1BR0U9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9lMmltYWdlIgorLUUySU1BR0VfRVhFPSIuLi9taXNjL2UyaW1hZ2UiCistREVCVUdGUz0iJFVTRV9WQUxHUklORCAuLi9kZWJ1Z2ZzL2RlYnVnZnMiCistREVCVUdGU19FWEU9Ii4uL2RlYnVnZnMvZGVidWdmcyIKKy1URVNUX0JJVFM9Ii4uL2RlYnVnZnMvZGVidWdmcyIKKy1SRVNJWkUyRlNfRVhFPSIuLi9yZXNpemUvcmVzaXplMmZzIgorK0ZTQ0s9IiRVU0VfVkFMR1JJTkQgZTJmc2NrIgorK01LRTJGUz0iJFVTRV9WQUxHUklORCBta2UyZnMiCisrRFVNUEUyRlM9IiRVU0VfVkFMR1JJTkQgZHVtcGUyZnMiCisrVFVORTJGUz0iJFVTRV9WQUxHUklORCB0dW5lMmZzIgorK0NIQVRUUj0iJFVTRV9WQUxHUklORCBjaGF0dHIiCisrTFNBVFRSPSIkVVNFX1ZBTEdSSU5EIGxzYXR0ciIKKytFMklNQUdFPSIkVVNFX1ZBTEdSSU5EIGUyaW1hZ2UiCisrRTJJTUFHRV9FWEU9Ii9zYmluL2UyaW1hZ2UiCisrREVCVUdGUz0iJFVTRV9WQUxHUklORCBkZWJ1Z2ZzIgorK0RFQlVHRlNfRVhFPSIvc2Jpbi9kZWJ1Z2ZzIgorK1RFU1RfQklUUz0iL3NiaW4vZGVidWdmcyIKKytSRVNJWkUyRlNfRVhFPSIvc2Jpbi9yZXNpemUyZnMiCisgUkVTSVpFMkZTPSIkVVNFX1ZBTEdSSU5EICRSRVNJWkUyRlNfRVhFIgorLUUyVU5ET19FWEU9Ii4uL21pc2MvZTJ1bmRvIgorLVRFU1RfUkVMPS4uL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsCistVEVTVF9JQ09VTlQ9Li4vdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQKKy1DUkNTVU09Li4vdGVzdHMvcHJvZ3MvY3Jjc3VtCisrRTJVTkRPX0VYRT0iL3NiaW4vZTJ1bmRvIgorK1RFU1RfUkVMPS4vcHJvZ3MvdGVzdF9yZWwKKytURVNUX0lDT1VOVD0uL3Byb2dzL3Rlc3RfaWNvdW50CisrQ1JDU1VNPS4vcHJvZ3MvY3Jjc3VtCisgTERfTElCUkFSWV9QQVRIPS4uL2xpYjouLi9saWIvZXh0MmZzOi4uL2xpYi9lMnA6Li4vbGliL2V0Oi4uL2xpYi9zcworIERZTERfTElCUkFSWV9QQVRIPS4uL2xpYjouLi9saWIvZXh0MmZzOi4uL2xpYi9lMnA6Li4vbGliL2V0Oi4uL2xpYi9zcworIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGU5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gZXhlY3V0aW5nIGEgc2NyaXB0IGRvbid0IGVjaG8gZXZlcnkgY29tbWFuZCwgYXMgd2UgZG8gdGhpcyBmb3IgZW50aXJlCitmaWxlc3lzdGVtcyBhdCByb290ZnMgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmMgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworaW5kZXggNTU5MDI5NS4uYWM1NzI5MiAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5jCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworQEAgLTIzNzgsNyArMjM3OCw3IEBAIHN0YXRpYyBpbnQgc291cmNlX2ZpbGUoY29uc3QgY2hhciAqY21kX2ZpbGUsIGludCBzc19pZHgpCisgCQljcCA9IHN0cmNocihidWYsICdccicpOworIAkJaWYgKGNwKQorIAkJCSpjcCA9IDA7CistCQlwcmludGYoImRlYnVnZnM6ICVzXG4iLCBidWYpOworKwkJLypwcmludGYoImRlYnVnZnM6ICVzXG4iLCBidWYpOyovCisgCQlyZXR2YWwgPSBzc19leGVjdXRlX2xpbmUoc3NfaWR4LCBidWYpOworIAkJaWYgKHJldHZhbCkgeworIAkJCXNzX3BlcnJvcihzc19pZHgsIHJldHZhbCwgYnVmKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlNmViNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYjEzOWUwM2FjMmY3MmU2NDRlNTQ3YzdlZTliMTUxNDM4M2FmNGQ5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMzAgSmFuIDIwMTMgMTU6MjI6MDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gV2hlbiAvZXRjL2xkLnNvLmNhY2hlIGlzIHdyaXRlYWJsZSBieSB1c2VyIHJ1bm5pbmcgYml0YmFrZQorIHRoZW4gaXQgY3JlYXRlcyBpbnZhbGlkIGNhY2hlIChpbiBteSBjYXNlIGxpYnN0ZGMrKy5zbworIGNhbm5vdCBiZSBmb3VuZCBhZnRlciBidWlsZGluZyB6bGliKC1uYXRpdmUpIGFuZCBJIGhhdmUgdG8KKyBjYWxsIHRvdWNoICovbGlic3RkYysrLnNvICYmIC9zYmluL2xkY29uZmlnIHRvIGZpeCBpdC4KKworU28gcmVtb3ZlIGxkY29uZmlnIGNhbGwgZnJvbSBtYWtlIGluc3RhbGwtbGlicworCitQYXRjaCBhdXRob3JlZCBieSBNYXJ0aW4gSmFuc2EuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KKy0tLQorIGxpYi9NYWtlZmlsZS5lbGYtbGliIHwgICAgMyAtLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5lbGYtbGliIGIvbGliL01ha2VmaWxlLmVsZi1saWIKK2luZGV4IDc4NDc5ZDMuLjRhNGE1YWMgMTAwNjQ0CistLS0gYS9saWIvTWFrZWZpbGUuZWxmLWxpYgorKysrIGIvbGliL01ha2VmaWxlLmVsZi1saWIKK0BAIC01MCw4ICs1MCw2IEBAIGluc3RhbGwtc2hsaWJzIGluc3RhbGw6OiAkKEVMRl9MSUIpIGluc3RhbGxkaXJzLWVsZi1saWIgJChERVBfSU5TVEFMTF9TWU1MSU5LKQorIAkkKEUpICIJU1lNTElOSyAkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvIgorIAkkKFEpICQoSU5TVEFMTF9TWU1MSU5LKSAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisgCQkkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvICQoREVTVERJUikKKy0JJChFKSAiCUxEQ09ORklHIgorLQkkKFEpIC0kKExEQ09ORklHKQorIAorIGluc3RhbGwtc3RyaXA6IGluc3RhbGwKKyAJJChFKSAiCVNUUklQLUxJQiAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSIKK0BAIC02Nyw3ICs2NSw2IEBAIHVuaW5zdGFsbC1zaGxpYnMgdW5pbnN0YWxsOjoKKyAJJChSTSkgLWYgJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIFwKKyAJCSQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisgCQkkKERFU1RESVIpJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbworLQktJChMRENPTkZJRykKKyAKKyBjbGVhbjo6CisgCSQoUk0pIC1yZiBlbGZzaGFyZWQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMjUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3J1bi1wdGVzdApAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKKworY2QgLi90ZXN0CisuL3Rlc3Rfc2NyaXB0ICY+Li4vdGVzdC5sb2cKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWVjaG8gIlBBU1M6IGUyZnNwcm9ncyIKKwlybSB0ZXN0LmxvZworZWxzZQorCWVjaG8gIkZBSUw6IGUyZnNwcm9ncyIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlMjljOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDIuOS5iYgpAQCAtMCwwICsxLDExNiBAQAorcmVxdWlyZSBlMmZzcHJvZ3MuaW5jCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlVwZGF0aW5nIGJhY2twb3J0ZWQgcGF0Y2hlcyB0byAxLjQyLjEzIGlzIHRvbyBtdWNoIHBhaW4uIExldCdzIHdhaXQgdW50aWwgMS40MyBpcyByZWxlYXNlZC4iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtaWNhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9xdWlldC1kZWJ1Z2ZzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNC1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zeW1saW5rLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTEtbWtlMmZzLjguaW4tdXBkYXRlLXRoZS1tYW51YWwtZm9yLXRoZS1kLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAxMi1GaXgtbXVzbC1idWlsZC1mYWlsdXJlcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jYWNoZV9pbm9kZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtMDI0Ny5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZjhlNDFlNjNiNDMyYmExMTRiMzNmNTg2NzQ1NjNmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjkyYWMwNmU5MmZhMDBmMmFkYTNlZTY3ZGFkMDEyZDc0ZDY4NTUzNzUyN2FkMTI0MWQ4MmYyZDA0MWYyODAyIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gLS1lbmFibGUtZWxmLXNobGlicyAtLWRpc2FibGUtbGlidXVpZCAtLWRpc2FibGUtdXVpZGQgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcyIKK0VYVFJBX09FQ09ORl9kYXJ3aW4gPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSAtLWVuYWJsZS1ic2Qtc2hsaWJzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWxpYnMKKwkjIFdlIHVzZSBibGtpZCBmcm9tIHV0aWwtbGludXggbm93IHNvIHJlbW92ZSBmcm9tIGhlcmUKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vbGliYmxraWQqCisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L2Jsa2lkCisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZy9ibGtpZC5wYworCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vYmxraWQKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZzY2sKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZpbmRmcworCisJIyBlMmluaXRyZF9oZWxwZXIgYW5kIHRoZSBwa2djb25maWcgZmlsZXMgYmVsb25nIGluIGxpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L2UyaW5pdHJkX2hlbHBlciAke0R9JHtsaWJkaXJ9CisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZXh0MmZzL2V4dDJfdHlwZXMuaAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9jaGF0dHIgJHtEfSR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MKKworCWluc3RhbGwgLXYgLW0gNzU1ICR7U30vY29udHJpYi9wb3B1bGF0ZS1leHRmcy5zaCAke0R9JHtiYXNlX3NiaW5kaXJ9LworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJIyBDbGVhbiBob3N0IHBhdGggaW4gY29tcGlsZV9ldCwgbWtfY21kcworCXNlZCAtaSAtZSAicyxFVF9ESVI9XCIke1N9L2xpYi9ldFwiLEVUX0RJUj1cIiR7ZGF0YWRpcn0vZXRcIixnIiAke0R9JHtiaW5kaXJ9L2NvbXBpbGVfZXQKKwlzZWQgLWkgLWUgInMsU1NfRElSPVwiJHtTfS9saWIvc3NcIixTU19ESVI9XCIke2RhdGFkaXJ9L3NzXCIsZyIgJHtEfSR7YmluZGlyfS9ta19jbWRzCit9CisKK1JERVBFTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtYmFkYmxvY2tzIgorUlJFQ09NTUVORFNfZTJmc3Byb2dzID0gImUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLWUyZnNjayIKKworUEFDS0FHRVMgPSsgImUyZnNwcm9ncy1lMmZzY2sgZTJmc3Byb2dzLW1rZTJmcyBlMmZzcHJvZ3MtdHVuZTJmcyBlMmZzcHJvZ3MtYmFkYmxvY2tzIGUyZnNwcm9ncy1yZXNpemUyZnMiCitQQUNLQUdFUyA9KyAibGliY29tZXJyIGxpYnNzIGxpYmUycCBsaWJleHQyZnMiCisKK0ZJTEVTX2UyZnNwcm9ncy1yZXNpemUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3Jlc2l6ZTJmcyoiCitGSUxFU19lMmZzcHJvZ3MtZTJmc2NrID0gIiR7YmFzZV9zYmluZGlyfS9lMmZzY2sgJHtiYXNlX3NiaW5kaXJ9L2ZzY2suZXh0KiIKK0ZJTEVTX2UyZnNwcm9ncy1ta2UyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L21rZTJmcyAke2Jhc2Vfc2JpbmRpcn0vbWtmcy5leHQqICR7c3lzY29uZmRpcn0vbWtlMmZzLmNvbmYiCitGSUxFU19lMmZzcHJvZ3MtdHVuZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vdHVuZTJmcyAke2Jhc2Vfc2JpbmRpcn0vZTJsYWJlbCIKK0ZJTEVTX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiJHtiYXNlX3NiaW5kaXJ9L2JhZGJsb2NrcyIKK0ZJTEVTX2xpYmNvbWVyciA9ICIke2Jhc2VfbGliZGlyfS9saWJjb21fZXJyLnNvLioiCitGSUxFU19saWJzcyA9ICIke2Jhc2VfbGliZGlyfS9saWJzcy5zby4qIgorRklMRVNfbGliZTJwID0gIiR7YmFzZV9saWJkaXJ9L2xpYmUycC5zby4qIgorRklMRVNfbGliZXh0MmZzID0gIiR7bGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtiYXNlX2xpYmRpcn0vbGliZXh0MmZzLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vKi8qLmF3ayAke2RhdGFkaXJ9LyovKi5zZWQgJHtiYXNlX2xpYmRpcn0vKi5zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiY2hhdHRyIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyIgorQUxURVJOQVRJVkVfVEFSR0VUW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncyIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImxpYmJsa2lkLjMgYmxraWQuOCBmaW5kZnMuOCBmc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGliYmxraWQuM10gPSAiJHttYW5kaXJ9L21hbjMvbGliYmxraWQuMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibGtpZC44XSA9ICIke21hbmRpcn0vbWFuOC9ibGtpZC44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZpbmRmcy44XSA9ICIke21hbmRpcn0vbWFuOC9maW5kZnMuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZzY2suOCIKKworaW5oZXJpdCBwdGVzdAorU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9wdGVzdC5wYXRjaCIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59ICR7UE59LXR1bmUyZnMgY29yZXV0aWxzIHByb2NwcyIKKyNSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZXhwZWN0IgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtCfS90ZXN0cworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1hICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWNwIC1hICR7U30vdGVzdHMvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJc2VkIC1lICdzIS4uL2UyZnNjay9lMmZzY2shZTJmc2NrIWcnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvKi9leHBlY3QqCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9hcm1fYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTQ2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDQ0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvYXJtX2luaXQuYwkyMDA5LTA0LTIxIDE0OjUwOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9pbml0LmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMiwyMSArMzIsMzIgQEAKKyAjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX0FSTV8KKyAjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorIAorKyNpbmNsdWRlICJsaWJlYmxfYXJtLmgiCisrCisgLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gYXJtX3JlbG9jLmRlZi4gICovCisgI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorIAorIAorIGNvbnN0IGNoYXIgKgorIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKy0gICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVsZiAqZWxmOworICAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworICAgICAgRWJsICplaDsKKyAgICAgIHNpemVfdCBlaGxlbjsKKyB7CisrICBpbnQgc29mdF9mbG9hdCA9IDA7CisrCisgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKyAgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfQVJNX1NPRlRfRkxPQVQpKQorKyAgICAgIHNvZnRfZmxvYXQgPSAxOworKyAgfQorKworICAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKyAgIGVoLT5uYW1lID0gIkFSTSI7CisgICBhcm1faW5pdF9yZWxvYyAoZWgpOworQEAgLTU4LDcgKzY5LDEwIEBACisgICBIT09LIChlaCwgY29yZV9ub3RlKTsKKyAgIEhPT0sgKGVoLCBhdXh2X2luZm8pOworICAgSE9PSyAoZWgsIGNoZWNrX29iamVjdF9hdHRyaWJ1dGUpOworLSAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBpZiAoc29mdF9mbG9hdCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAKKyAgIHJldHVybiBNT0RWRVJTSU9OOworIH0KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9hcm1fcmVncy5jCTIwMDktMDQtMjEgMTQ6NTA6MDEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTI4LDYgKzI4LDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgCisgI2RlZmluZSBCQUNLRU5EIGFybV8KK0BAIC01OCw3ICs1OSwxNSBAQAorICAgICAgIG5hbWVsZW4gPSAyOworICAgICAgIGJyZWFrOworIAorLSAgICBjYXNlIDEwIC4uLiAxMjoKKysgICAgY2FzZSAxMCAuLi4gMTE6CisrICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICBuYW1lWzFdID0gJzEnOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAlIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDEyOgorKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworICAgICAgIG5hbWVbMF0gPSAncic7CisgICAgICAgbmFtZVsxXSA9ICcxJzsKKyAgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKK0BAIC03Myw2ICs4Miw5IEBACisgICAgICAgYnJlYWs7CisgCisgICAgIGNhc2UgMTYgKyAwIC4uLiAxNiArIDc6CisrICAgICAgLyogQUFEV0FSRiBzYXlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ2lzdGVycyBpbiB0aGF0IHJhbmdlLAorKyAgICAgICAqIGJ1dCBnY2MgbWFwcyBGUEEgcmVnaXN0ZXJzIGhlcmUKKysgICAgICAgKi8KKyAgICAgICByZWdubyArPSA5NiAtIDE2OworICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgIGNhc2UgOTYgKyAwIC4uLiA5NiArIDc6CitAQCAtODQsMTEgKzk2LDEzOSBAQAorICAgICAgIG5hbWVsZW4gPSAyOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIDY0ICsgMCAuLi4gNjQgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSByZWdubyAtIDY0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDY0ICsgMTAgLi4uIDY0ICsgMzE6CisrICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgIG5hbWVbMF0gPSAncyc7CisrICAgICAgbmFtZVsxXSA9IChyZWdubyAtIDY0KSAvIDEwICsgJzAnOworKyAgICAgIG5hbWVbMl0gPSAocmVnbm8gLSA2NCkgJSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMDQgKyAwIC4uLiAxMDQgKyA3OgorKyAgICAgIC8qIFhYWCBUT0RPOgorKyAgICAgICAqIFRoaXMgY2FuIGJlIGVpdGhlciBpbnRlbCB3aXJlbGVzcyBNTVggZ2VuZXJhbCBwdXJwb3NlL2NvbnRyb2wKKysgICAgICAgKiByZWdpc3RlcnMgb3IgeHNjYWxlIGFjY3VtdWxhdG9yLCB3aGljaCBoYXZlIGRpZmZlcmVudCB1c2FnZS4KKysgICAgICAgKiBXZSBvbmx5IGhhdmUgdGhlIGludGVsIHdpcmVsZXNzIE1NWCBoZXJlIG5vdy4KKysgICAgICAgKiBUaGUgbmFtZSBuZWVkcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgeHNjYWxlIGFjY3VtdWxhdG9yIHRvby4gKi8KKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbWVtY3B5KG5hbWUsICJ3Y2dyIiwgNCk7CisrICAgICAgbmFtZVs0XSA9IHJlZ25vIC0gMTA0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSA1OworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDAgLi4uIDExMiArIDk6CisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDY0OworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdyJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxMTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTEyICsgMTAgLi4uIDExMiArIDE1OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9ICcxJzsKKysgICAgICBuYW1lWzNdID0gcmVnbm8gLSAxMTIgLSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNDsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAxMjg6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisgICAgICAgcmV0dXJuIHN0cGNweSAobmFtZSwgInNwc3IiKSArIDEgLSBuYW1lOworIAorKyAgICBjYXNlIDEyOToKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2ZpcSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMwOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfaXJxIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzE6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9hYnQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMjoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3VuZCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMzOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3Jfc3ZjIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxNDQgLi4uIDE1MDoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3VzciIsIHJlZ25vIC0gMTQ0ICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1MSAuLi4gMTU3OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfZmlxIiwgcmVnbm8gLSAxNTEgKyA4KSArIDE7CisrCisrICAgIGNhc2UgMTU4IC4uLiAxNTk6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9pcnEiLCByZWdubyAtIDE1OCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYwIC4uLiAxNjE6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9hYnQiLCByZWdubyAtIDE2MCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYyIC4uLiAxNjM6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91bmQiLCByZWdubyAtIDE2MiArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTY0IC4uLiAxNjU6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9zdmMiLCByZWdubyAtIDE2NCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTkyIC4uLiAxOTk6CisrICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ2MnOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAtIDE5MiArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAyNTYgKyAwIC4uLiAyNTYgKyA5OgorKyAgICAgIC8qIFhYWCBUT0RPOiBOZW9uIGFsc28gdXNlcyB0aG9zZSByZWdpc3RlcnMgYW5kIGNhbiBjb250YWluCisrICAgICAgICogYm90aCBmbG9hdCBhbmQgaW50ZWdlcnMgKi8KKyAgICAgICAqc2V0bmFtZSA9ICJWRlAiOworICAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworICAgICAgICpiaXRzID0gNjQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9hcm1fcmV0dmFsLmMJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmV0dmFsLmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NSw2ICs0NSwxMyBAQAorICNkZWZpbmUgbmxvY19pbnRyZWcJMQorICNkZWZpbmUgbmxvY19pbnRyZWdzKG4pCSgyICogKG4pKQorIAorKy8qIGYxICAqLyAvKiBYWFggVE9ETzogZjAgY2FuIGFsc28gaGF2ZSBudW1iZXIgOTYgaWYgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCAtbWFiaT1hYXBjcyAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxNiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKyAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKyAgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisgICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiByMC4gICovCitAQCAtNTUsOCArNjIsOSBAQAorICNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorIAorIAorLWludAorLWFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKytzdGF0aWMgaW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwKKysJCSAgICAgICAgICAgIGludCBzb2Z0X2Zsb2F0KQorIHsKKyAgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisgICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KK0BAIC0xMDksMTQgKzExNywzMSBAQAorIAkgIGVsc2UKKyAJICAgIHJldHVybiAtMTsKKyAJfQorKyAgICAgIGlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJeworKwkgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkgICAgICAgICAgICAgICAgICAgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysKKysJICBpZiAoKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkgJiYgIXNvZnRfZmxvYXQpCisrCSAgICB7CisrCSAgICAgICpsb2NwID0gbG9jX2ZwcmVnOworKwkgICAgICBpZiAoc2l6ZSA8PSA4KQorKwkJcmV0dXJuIG5sb2NfZnByZWc7CisrCSAgICAgIGdvdG8gYWdncmVnYXRlOworKwkgICAgfQorKwl9CisgICAgICAgaWYgKHNpemUgPD0gMTYpCisgCXsKKyAJaW50cmVnOgorIAkgICpsb2NwID0gbG9jX2ludHJlZzsKKyAJICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3MgKChzaXplICsgMykgLyA0KTsKKyAJfQorKyAgICAgIC8qIGZhbGwgdGhyb3VnaC4gKi8KKyAKKyAgICAgYWdncmVnYXRlOgorKyAgICAgIC8qIFhYWCBUT0RPIHNvbWV0aW1lcyBhZ2dyZWdhdGVzIGFyZSByZXR1cm5lZCBpbiByMCAoLW1hYmk9YWFwY3MpICovCisgICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKyAKK0BAIC0xMzUsMyArMTYwLDE4IEBACisgICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworICAgcmV0dXJuIC0yOworIH0KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1tc29mdC1mbG9hdCAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbWhhcmQtZmxvYXQgKGN1cnJlbnQgZGVmYXVsdCkgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtMjI5MCw2ICsyMjkwLDkgQEAKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjQJMHgwNDAwMDAwMAorICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNQkweDA1MDAwMDAwCisgCisrLyogRUlfT1NBQkkgdmFsdWVzICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk1fQUVBQkkgICAgNjQgICAgICAvKiBDb250YWlucyBzeW1ib2wgdmVyc2lvbmluZy4gKi8KKysKKyAvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIuICAqLworICNkZWZpbmUgU1RUX0FSTV9URlVOQwkJU1RUX0xPUFJPQyAvKiBBIFRodW1iIGZ1bmN0aW9uLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fMTZCSVQJCVNUVF9ISVBST0MgLyogQSBUaHVtYiBsYWJlbC4gICovCitAQCAtMjMwNywxMiArMjMxMCwxOSBAQAorIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBQaGRyIHBfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBQVF9BUk1fRVhJRFgJCShQVF9MT1BST0MgKyAxKQkvKiBBUk0gdW53aW5kIHNlZ21lbnQuICAqLworKyNkZWZpbmUgUFRfQVJNX1VOV0lORAkJUFRfQVJNX0VYSURYCisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFNoZHIgc2hfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBTSFRfQVJNX0VYSURYCQkoU0hUX0xPUFJPQyArIDEpIC8qIEFSTSB1bndpbmQgc2VjdGlvbi4gICovCisgI2RlZmluZSBTSFRfQVJNX1BSRUVNUFRNQVAJKFNIVF9MT1BST0MgKyAyKSAvKiBQcmVlbXB0aW9uIGRldGFpbHMuICAqLworICNkZWZpbmUgU0hUX0FSTV9BVFRSSUJVVEVTCShTSFRfTE9QUk9DICsgMykgLyogQVJNIGF0dHJpYnV0ZXMgc2VjdGlvbi4gICovCisgCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIER5biBkX3RhZyBmaWVsZC4gICovCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQxCShEVF9MT1BST0MgKyAwKQorKyNkZWZpbmUgRFRfQVJNX1NZTVRBQlNaCQkoRFRfTE9QUk9DICsgMSkKKysjZGVmaW5lIERUX0FSTV9QUkVFTVRNQUIJKERUX0xPUFJPQyArIDIpCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQyCShEVF9MT1BST0MgKyAzKQorKyNkZWZpbmUgRFRfQVJNX05VTQkJNAorIAorIC8qIEFSTSByZWxvY3MuICAqLworIAorQEAgLTIzNDQsMTIgKzIzNTQsNzUgQEAKKyAjZGVmaW5lIFJfQVJNX0dPVFBDCQkyNQkvKiAzMiBiaXQgUEMgcmVsYXRpdmUgb2Zmc2V0IHRvIEdPVCAqLworICNkZWZpbmUgUl9BUk1fR09UMzIJCTI2CS8qIDMyIGJpdCBHT1QgZW50cnkgKi8KKyAjZGVmaW5lIFJfQVJNX1BMVDMyCQkyNwkvKiAzMiBiaXQgUExUIGFkZHJlc3MgKi8KKysjZGVmaW5lIFJfQVJNX0NBTEwJCTI4CisrI2RlZmluZSBSX0FSTV9KVU1QMjQJCTI5CisrI2RlZmluZSBSX0FSTV9USE1fSlVNUDI0CTMwCisrI2RlZmluZSBSX0FSTV9CQVNFX0FCUwkJMzEKKyAjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF83XzAJMzIKKyAjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF8xNV84CTMzCisgI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfMjNfMTUJMzQKKyAjZGVmaW5lIFJfQVJNX0xEUl9TQlJFTF8xMV8wCTM1CisgI2RlZmluZSBSX0FSTV9BTFVfU0JSRUxfMTlfMTIJMzYKKyAjZGVmaW5lIFJfQVJNX0FMVV9TQlJFTF8yN18yMAkzNworKyNkZWZpbmUgUl9BUk1fVEFSR0VUMQkJMzgKKysjZGVmaW5lIFJfQVJNX1NCUkVMMzEJCTM5CisrI2RlZmluZSBSX0FSTV9WNEJYCQk0MAorKyNkZWZpbmUgUl9BUk1fVEFSR0VUMgkJNDEKKysjZGVmaW5lIFJfQVJNX1BSRUwzMQkJNDIKKysjZGVmaW5lIFJfQVJNX01PVldfQUJTX05DCTQzCisrI2RlZmluZSBSX0FSTV9NT1ZUX0FCUwkJNDQKKysjZGVmaW5lIFJfQVJNX01PVldfUFJFTF9OQwk0NQorKyNkZWZpbmUgUl9BUk1fTU9WVF9QUkVMCQk0NgorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfQUJTX05DCTQ3CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9BQlMJNDgKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZXX1BSRUxfTkMJNDkKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZUX1BSRUwJNTAKKysjZGVmaW5lIFJfQVJNX1RITV9KVU1QMTkJNTEKKysjZGVmaW5lIFJfQVJNX1RITV9KVU1QNgkJNTIKKysjZGVmaW5lIFJfQVJNX1RITV9BTFVfUFJFTF8xMV8wCTUzCisrI2RlZmluZSBSX0FSTV9USE1fUEMxMgkJNTQKKysjZGVmaW5lIFJfQVJNX0FCUzMyX05PSQkJNTUKKysjZGVmaW5lIFJfQVJNX1JFTDMyX05PSQkJNTYKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMF9OQwk1NworKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cwCQk1OAorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cxX05DCTU5CisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzEJCTYwCisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzIJCTYxCisrI2RlZmluZSBSX0FSTV9MRFJfUENfRzEJCTYyCisrI2RlZmluZSBSX0FSTV9MRFJfUENfRzIJCTYzCisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cwCTY0CisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cxCTY1CisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cyCTY2CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzAJCTY3CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzEJCTY4CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzIJCTY5CisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzBfTkMJNzAKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMAkJNzEKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMV9OQwk3MgorKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cxCQk3MworKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cyCQk3NAorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cwCQk3NQorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cxCQk3NgorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cyCQk3NworKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMAk3OAorKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMQk3OQorKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMgk4MAorKyNkZWZpbmUgUl9BUk1fTERDX0cwCQk4MQorKyNkZWZpbmUgUl9BUk1fTERDX0cxCQk4MgorKyNkZWZpbmUgUl9BUk1fTERDX0cyCQk4MworKyNkZWZpbmUgUl9BUk1fTU9WV19CUkVMX05DCTg0CisrI2RlZmluZSBSX0FSTV9NT1ZUX0JSRUwJCTg1CisrI2RlZmluZSBSX0FSTV9NT1ZXX0JSRUwJCTg2CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19CUkVMX05DCTg3CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9CUkVMCTg4CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19CUkVMCTg5CisrLyogOTAtOTMgdW5hbGxvY2F0ZWQgKi8KKysjZGVmaW5lIFJfQVJNX1BMVDMyX0FCUwkJOTQKKysjZGVmaW5lIFJfQVJNX0dPVF9BQlMJCTk1CisrI2RlZmluZSBSX0FSTV9HT1RfUFJFTAkJOTYKKysjZGVmaW5lIFJfQVJNX0dPVF9CUkVMMTIJOTcKKysjZGVmaW5lIFJfQVJNX0dPVE9GRjEyCQk5OAorKyNkZWZpbmUgUl9BUk1fR09UUkVMQVgJCTk5CisgI2RlZmluZSBSX0FSTV9HTlVfVlRFTlRSWQkxMDAKKyAjZGVmaW5lIFJfQVJNX0dOVV9WVElOSEVSSVQJMTAxCisgI2RlZmluZSBSX0FSTV9USE1fUEMxMQkJMTAyCS8qIHRodW1iIHVuY29uZGl0aW9uYWwgYnJhbmNoICovCitAQCAtMjM2NCw2ICsyNDM3LDEyIEBACisgCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrIG9mZnNldCAqLworICNkZWZpbmUgUl9BUk1fVExTX0xFMzIJCTEwOAkvKiAzMiBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXRpYworIAkJCQkJICAgVExTIGJsb2NrICovCisrI2RlZmluZSBSX0FSTV9UTFNfTERPMTIJCTEwOQorKyNkZWZpbmUgUl9BUk1fVExTX0xFMTIJCTExMAorKyNkZWZpbmUgUl9BUk1fVExTX0lFMTJHUAkxMTEKKysvKiAxMTIgLSAxMjcgcHJpdmF0ZSByYW5nZSAqLworKyNkZWZpbmUgUl9BUk1fTUVfVE9PCQkxMjgJLyogb2Jzb2xldGUgKi8KKysKKyAjZGVmaW5lIFJfQVJNX1JYUEMyNQkJMjQ5CisgI2RlZmluZSBSX0FSTV9SU0JSRUwzMgkJMjUwCisgI2RlZmluZSBSX0FSTV9USE1fUlBDMjIJCTI1MQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9hcm0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9hcm0uaAkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0FSTV9ICisrI2RlZmluZSBfTElCRUJMX0FSTV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYWE3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmCkBAIC0wLDAgKzEsNzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTM6NTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MjI6NDMuMDAwMDAwMDAwICswMDAwCitAQCAtMTQzLDYgKzE0Myw3IEBACisgI2RlZmluZSBFTEZPU0FCSV9IUFVYCQkxCS8qIEhQLVVYICovCisgI2RlZmluZSBFTEZPU0FCSV9ORVRCU0QJCTIJLyogTmV0QlNELiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0xJTlVYCQkzCS8qIExpbnV4LiAgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0hVUkQJCTQJLyogR05VL0h1cmQgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX1NPTEFSSVMJNgkvKiBTdW4gU29sYXJpcy4gICovCisgI2RlZmluZSBFTEZPU0FCSV9BSVgJCTcJLyogSUJNIEFJWC4gICovCisgI2RlZmluZSBFTEZPU0FCSV9JUklYCQk4CS8qIFNHSSBJcml4LiAgKi8KK0BAIC0xNTAsOCArMTUxLDEzIEBACisgI2RlZmluZSBFTEZPU0FCSV9UUlU2NAkJMTAJLyogQ29tcGFxIFRSVTY0IFVOSVguICAqLworICNkZWZpbmUgRUxGT1NBQklfTU9ERVNUTwkxMQkvKiBOb3ZlbGwgTW9kZXN0by4gICovCisgI2RlZmluZSBFTEZPU0FCSV9PUEVOQlNECTEyCS8qIE9wZW5CU0QuICAqLworKyNkZWZpbmUgRUxGT1NBQklfT1BFTlZNUwkxMwkvKiBPcGVuVk1TICovCisrI2RlZmluZSBFTEZPU0FCSV9OU0sJCTE0CS8qIEhld2xldHQtUGFja2FyZCBOb24tU3RvcCBLZXJuZWwgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0FST1MJCTE1CS8qIEFtaWdhIFJlc2VhcmNoIE9TICovCisrLyogNjQtMjU1IEFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2YWx1ZSByYW5nZSAqLworICNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJCTY0CS8qIEFSTSBFQUJJICovCisgI2RlZmluZSBFTEZPU0FCSV9BUk0JCTk3CS8qIEFSTSAqLworKy8qIFRoaXMgaXMgZGVwcmVjYXRlZD8gSXQncyBub3QgaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIGFueW1vcmUuICovCisgI2RlZmluZSBFTEZPU0FCSV9TVEFOREFMT05FCTI1NQkvKiBTdGFuZGFsb25lIChlbWJlZGRlZCkgYXBwbGljYXRpb24gKi8KKyAKKyAjZGVmaW5lIEVJX0FCSVZFUlNJT04JOAkJLyogQUJJIHZlcnNpb24gKi8KK0BAIC0yMDYsNyArMjEyLDcgQEAKKyAjZGVmaW5lIEVNX0g4XzMwMEgJNDcJCS8qIEhpdGFjaGkgSDgvMzAwSCAqLworICNkZWZpbmUgRU1fSDhTCQk0OAkJLyogSGl0YWNoaSBIOFMgKi8KKyAjZGVmaW5lIEVNX0g4XzUwMAk0OQkJLyogSGl0YWNoaSBIOC81MDAgKi8KKy0jZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBNZXJjZWQgKi8KKysjZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBJQTY0ICovCisgI2RlZmluZSBFTV9NSVBTX1gJNTEJCS8qIFN0YW5mb3JkIE1JUFMtWCAqLworICNkZWZpbmUgRU1fQ09MREZJUkUJNTIJCS8qIE1vdG9yb2xhIENvbGRmaXJlICovCisgI2RlZmluZSBFTV82OEhDMTIJNTMJCS8qIE1vdG9yb2xhIE02OEhDMTIgKi8KK0BAIC0yMjAsNyArMjI2LDggQEAKKyAjZGVmaW5lIEVNX1RJTllKCTYxCQkvKiBBZHZhbmNlZCBMb2dpYyBDb3JwLiBUaW55aiBlbWIuZmFtKi8KKyAjZGVmaW5lIEVNX1g4Nl82NAk2MgkJLyogQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUgKi8KKyAjZGVmaW5lIEVNX1BEU1AJCTYzCQkvKiBTb255IERTUCBQcm9jZXNzb3IgKi8KKy0KKysjZGVmaW5lCUVNX1BEUDEwCTY0CQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTAgKi8KKysjZGVmaW5lIEVNX1BEUDExCTY1CQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTEgKi8KKyAjZGVmaW5lIEVNX0ZYNjYJCTY2CQkvKiBTaWVtZW5zIEZYNjYgbWljcm9jb250cm9sbGVyICovCisgI2RlZmluZSBFTV9TVDlQTFVTCTY3CQkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1Q5KyA4LzE2IG1jICovCisgI2RlZmluZSBFTV9TVDcJCTY4CQkvKiBTVG1pY3JvZWxlY3Ryb25pY3MgU1Q3IDggYml0IG1jICovCitAQCAtMjUwLDcgKzI1NywyMiBAQAorICNkZWZpbmUgRU1fT1BFTlJJU0MJOTIJCS8qIE9wZW5SSVNDIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyAjZGVmaW5lIEVNX0FSQ19BNQk5MwkJLyogQVJDIENvcmVzIFRhbmdlbnQtQTUgKi8KKyAjZGVmaW5lIEVNX1hURU5TQQk5NAkJLyogVGVuc2lsaWNhIFh0ZW5zYSBBcmNoaXRlY3R1cmUgKi8KKy0jZGVmaW5lIEVNX05VTQkJOTUKKysjZGVmaW5lCUVNX1ZJREVPQ09SRQk5NQkJLyogQWxwaGFtb3NhaWMgVmlkZW9Db3JlIHByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fVE1NX0dQUAk5NgkJLyogVGhvbXBzb24gTXVsdGltZWRpYSBHZW5lcmFsIFB1cnBvc2UgUHJvY2Vzc29yICovCisrI2RlZmluZQlFTV9OUzMySwk5NwkJLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAzMjAwMCBzZXJpZXMgKi8KKysjZGVmaW5lCUVNX1RQQwkJOTgJCS8qIFRlbm9yIE5ldHdvcmsgVFBDIHByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fU05QMUsJOTkJCS8qIFRyZWJpYSBTTlAgMTAwMCBwcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX1NUMjAwCTEwMAkJLyogU1RNaWNyb2VsZWN0cm9uaWNzICh3d3cuc3QuY29tKSBTVDIwMCBtaWNyb2NvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNX0lQMksgICAgICAgICAxMDEJCS8qIFViaWNvbSBJUDJYWFggbWljcm9jb250cm9sbGVyIGZhbWlseSAqLworKyNkZWZpbmUJRU1fTUFYCQkxMDIJCS8qIE1BWCBQcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX0NSICAgICAgICAgICAxMDMJCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29tcGFjdFJJU0MgKi8KKysjZGVmaW5lCUVNX0YyTUMxNgkxMDQJCS8qIEZ1aml0c3UgRjJNQzE2ICovCisrI2RlZmluZSBFTV9NU1A0MzAgICAgICAgMTA1CQkvKiBUSSBtc3A0MzAgbWljcm8gY29udHJvbGxlciAqLworKyNkZWZpbmUgRU1fQkxBQ0tGSU4gICAgIDEwNgkJLyogQW5hbG9nIERldmljZXMgQmxhY2tmaW4gKERTUCkgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9TRV9DMzMJMTA3CQkvKiBTMUMzMyBGYW1pbHkgb2YgU2Vpa28gRXBzb24gcHJvY2Vzc29ycyAqLworKyNkZWZpbmUJRU1fU0VQCQkxMDgJCS8qIFNoYXJwIGVtYmVkZGVkIG1pY3JvcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9BUkNBCQkxMDkJCS8qIEFyY2EgUklTQyBNaWNyb3Byb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fTlVNCQkxMTAKKyAKKyAvKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gYXNzaWduIG5ldyB1bm9mZmljaWFsIEVNXyogdmFsdWVzLCBwbGVhc2UKKyAgICBwaWNrIGxhcmdlIHJhbmRvbSBudW1iZXJzICgweDg1MjMsIDB4YTdmMiwgZXRjLikgdG8gbWluaW1pemUgdGhlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlOGRkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDMyM2NhMDRhMGM5MTg5NTQ0MDc1YzE5YjQ5ZGE2N2Y2NDQzYTg5NTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBXZWQsIDIxIEphbiAyMDE1IDA5OjMzOjM4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGVsZl9iZWdpbi5jOiBDVkUtMjAxNC05NDQ3IGZpeAorCit0aGlzIHBhdGNoIGlzIGZyb206CisgaHR0cHM6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9jZ2l0L2VsZnV0aWxzLmdpdC9jb21taXQvP2lkPTE0NzAxOGU3MjllN2MyMmVlYWJmMTViODJkMjZlNGJmNjhhMGQxOGUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CistLS0KKyBsaWJlbGYvZWxmX2JlZ2luLmMgfCA3ICsrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZl9iZWdpbi5jIGIvbGliZWxmL2VsZl9iZWdpbi5jCitpbmRleCBlNDZhZGQzLi5lODNiYTM1IDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZl9iZWdpbi5jCisrKysgYi9saWJlbGYvZWxmX2JlZ2luLmMKK0BAIC03MzYsMTEgKzczNiw4IEBAIHJlYWRfbG9uZ19uYW1lcyAoRWxmICplbGYpCisgCSAgICBicmVhazsKKyAKKyAJICAvKiBOVUwtdGVybWluYXRlIHRoZSBzdHJpbmcuICAqLworLQkgICpydW5wID0gJ1wwJzsKKy0KKy0JICAvKiBTa2lwIHRoZSBOVUwgYnl0ZSBhbmQgdGhlIFwwMTIuICAqLworLQkgIHJ1bnAgKz0gMjsKKy0KKysJICAqcnVucCsrID0gJ1wwJzsKKysgCisgCSAgLyogQSBzYW5pdHkgY2hlY2suICBTb21lYm9keSBtaWdodCBoYXZlIGdlbmVyYXRlZCBpbnZhbGlkCisgCSAgICAgYXJjaGl2ZS4gICovCisgCSAgaWYgKHJ1bnAgPj0gbmV3cCArIGxlbikKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxOTYxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2FyLmMgKGRvX29wZXJfZGVsZXRlKTogRml4IG51bSBwYXNzZWQgdG8gbWVtc2V0CituYXRpdmUgYnVpbGQgZmFpbGVkIGFzIGZvbGxvd2luZyBvbiBGZWRvcmExOCs6IAorYXIuYzogSW4gZnVuY3Rpb24gJ2RvX29wZXJfZGVsZXRlJzoKK2FyLmM6OTE4OjMxOiBlcnJvcjogYXJndW1lbnQgdG8gJ3NpemVvZicgaW4gJ21lbXNldCcgY2FsbCBpcyB0aGUgc2FtZSBleHByZXNzaW9uIGFzIHRoZSBkZXN0aW5hdGlvbjsgZGlkIHlvdSBtZWFuIHRvIGRlcmVmZXJlbmNlIGl0PyBbLVdlcnJvcj1zaXplb2YtcG9pbnRlci1tZW1hY2Nlc3NdCisgICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGZvdW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1RoZSBvcmlnaW5hbCBjb21taXQgaXMgaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2NnaXQvZWxmdXRpbHMuZ2l0L2NvbW1pdC9zcmMvYXIuYz9pZD0xYTRkMDY2OGQxOGJmMTA5MGM1YzA4Y2RiNWNiM2JhMmI4ZWI1NDEwCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorCistLS0gZWxmdXRpbHMtMC4xNDgvc3JjL2FyLmMub3JnCTIwMTMtMDMtMTIgMjE6MTI6MTcuOTI4MjgxMzc1IC0wNTAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2FyLmMJMjAxMy0wMy0xMiAyMToxNTozMC4wNTMyODUyNzEgLTA1MDAKK0BAIC05MTUsNyArOTE1LDcgQEAKKyAJCWxvbmcgaW50IGluc3RhbmNlKQorIHsKKyAgIGJvb2wgKmZvdW5kID0gYWxsb2NhIChzaXplb2YgKGJvb2wpICogYXJnYyk7CistICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGZvdW5kKSk7CisrICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGJvb2wpICogYXJnYyk7CisgCisgICAvKiBMaXN0IG9mIHRoZSBmaWxlcyB3ZSBrZWVwLiAgKi8KKyAgIHN0cnVjdCBhcm1lbSAqdG9fY29weSA9IE5VTEw7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmMzUzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1mc2l6ZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1RoZSBFTEZfVF9MSUIgYW5kIEVMRl9UX0dOVUhBU0ggc2l6ZXMgd2VyZSBtaXNzaW5nIGZyb20gZnNpemUgdGFibGUuCisKK1RoaXMgY291bGQgY2F1c2UgYSBmYWlsdXJlIGluIHRoZSBlbGYqX3hsYXRldG9mIGZ1bmN0aW9uLgorCitkaWZmIC11ciBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9leHR0eXBlcy5oIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9leHR0eXBlcy5oCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZXh0dHlwZXMuaAkyMDA5LTAxLTA4IDEyOjU2OjM3LjAwMDAwMDAwMCAtMDgwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9leHR0eXBlcy5oCTIwMTAtMDgtMTggMTQ6MDA6MzMuMDAwMDAwMDAwIC0wNzAwCitAQCAtOTQsNiArOTQsNyBAQAorIFZlcm5hdXgzMiAoRXh0Xyk7CisgU3ltaW5mbzMyIChFeHRfKTsKKyBNb3ZlMzIgKEV4dF8pOworK0xpYjMyIChFeHRfKTsKKyBhdXh2X3QzMiAoRXh0Xyk7CisgCisgRWhkcjY0IChFeHRfKTsKK0BAIC0xMTAsNiArMTExLDcgQEAKKyBWZXJuYXV4NjQgKEV4dF8pOworIFN5bWluZm82NCAoRXh0Xyk7CisgTW92ZTY0IChFeHRfKTsKKytMaWI2NCAoRXh0Xyk7CisgYXV4dl90NjQgKEV4dF8pOworIAorICN1bmRlZiBTVEFSVAorZGlmZiAtdXIgZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9mc2l6ZS5jIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2ZzaXplLmMKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2ZzaXplLmMJMjAwOS0wMS0wOCAxMjo1NjozNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9mc2l6ZS5jCTIwMTAtMDgtMTggMTQ6MTE6NTcuMDAwMDAwMDAwIC0wNzAwCitAQCAtODcsNyArODcsOSBAQAorICAgICAgIFtFTEZfVF9OSERSXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X05oZHIpKSwJCSAgICAgIFwKKyAgICAgICBbRUxGX1RfU1lNSU5GT10JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9TeW1pbmZvKSksCSAgICAgIFwKKyAgICAgICBbRUxGX1RfTU9WRV0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9Nb3ZlKSksCQkgICAgICBcCistICAgICAgW0VMRl9UX0FVWFZdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfYXV4dl90KSkKKysgICAgICBbRUxGX1RfTElCXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X0xpYikpLAkJICAgICAgXAorKyAgICAgIFtFTEZfVF9BVVhWXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X2F1eHZfdCkpLAkgICAgICBcCisrICAgICAgW0VMRl9UX0dOVUhBU0hdCT0gRUxGVzIoTElCRUxGQklUUywgRlNaX1dPUkQpCisgICAgICAgVFlQRV9TSVpFUyAoMzIpCisgICAgIH0sCisgICAgIFtFTEZDTEFTUzY0IC0gMV0gPSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyODY5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitUaGlzIHBhdGNoIGZpeGVzIGEgd2FybmluZyBzZWVuIHdpdGggZ2NjIDQuOCAoZXNwZWNpYWxseSBvbiB1YnVudHUgMTMuMTApCisKK3wgYWRkcjJsaW5lLmM6IEluIGZ1bmN0aW9uICdoYW5kbGVfYWRkcmVzcyc6Cit8IGFkZHIybGluZS5jOjQ1MDo3OiBlcnJvcjogZm9ybWF0ICclYScgZXhwZWN0cyBhcmd1bWVudCBvZiB0eXBlICdmbG9hdCAqJywgYnV0IGFyZ3VtZW50IDMgaGFzIHR5cGUgJ2NoYXIgKionIFstV2Vycm9yPWZvcm1hdD1dCit8ICAgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorfCAgICAgICAgXgorfCBhZGRyMmxpbmUuYzo0NTM6NzogZXJyb3I6IGZvcm1hdCAnJWEnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnZmxvYXQgKicsIGJ1dCBhcmd1bWVudCAzIGhhcyB0eXBlICdjaGFyICoqJyBbLVdlcnJvcj1mb3JtYXQ9XQorfCAgICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorfCAgICAgICAgXgorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCisKKyVhIGlzIG9sZCBHTlUgc3R5bGUgYW5kIHNob3VsZCBiZSBhYmFuZG9uZWQgaW4gZmF2b3Igb2YgJW0KKworQWxzbyBzZWUKKworaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDM2MQorCit0byBzdXBwb3J0IHRoaXMgYXNzZXJ0aW9uCisKK1RoaXMgcGF0Y2ggaXMgYWRkZWQgdmlhIHJlZGhhdC1jb21wYXRpYmlsaXR5IHBhdGNoIHNvIGxldHMgcmV2ZXJ0IHRoaXMgcGFydAoraGVyZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDYXVzZWQgYnkgYW4gZWFybGllciBwYXRjaF0KKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2FkZHIybGluZS5jCTIwMTMtMDktMjMgMTc6NDY6NDUuNTEzNTg2NTM4IC0wNzAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2FkZHIybGluZS5jCTIwMTMtMDktMjMgMTc6NDY6NDYuMzI5NTg2NTU4IC0wNzAwCitAQCAtNDQ3LDEwICs0NDcsMTAgQEAKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCTIwMTMtMDktMjMgMTc6NDY6NDUuNTIxNTg2NTM4IC0wNzAwCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMJMjAxMy0wOS0yMyAxNzo0Njo0Ni4zMjk1ODY1NTggLTA3MDAKK0BAIC0xMzIsNyArMTMyLDcgQEAKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDYzNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApAQCAtMCwwICsxLDczIEBACitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKK2djYyA0LjcgZG9lcyBub3QgbGlrZSBwb2ludGVyIGNvbnZlcnNpb24sIHNvIGhhdmUgYSB2b2lkICogdG1wIHZhciB0byB3b3JrIAorYXJvdW5kIGZvbGxvd2luZyBjb21waWxhdGlvbiBpc3N1ZS4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDcvMDcKKworfCBtZDUuYzogSW4gZnVuY3Rpb24gJ21kNV9maW5pc2hfY3R4JzoKK3wgbWQ1LmM6MTA4OjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBtZDUuYzoxMDk6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCit8IAorfCBtYWtlWzJdOiAqKiogW21kNS5vXSBFcnJvciAxCit8IG1ha2VbMl06ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCit8IHNoYTEuYzogSW4gZnVuY3Rpb24gJ3NoYTFfZmluaXNoX2N0eCc6Cit8IHNoYTEuYzoxMDk6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IHNoYTEuYzoxMTE6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCit8IAorfCBtYWtlWzJdOiAqKiogW3NoYTEub10gRXJyb3IgMQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL21kNS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvbWQ1LmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvbWQ1LmMKK0BAIC05NSw2ICs5NSw3IEBAIG1kNV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIC8qIFRha2UgeWV0IHVucHJvY2Vzc2VkIGJ5dGVzIGludG8gYWNjb3VudC4gICovCisgICBtZDVfdWludDMyIGJ5dGVzID0gY3R4LT5idWZsZW47CisgICBzaXplX3QgcGFkOworKyAgdm9pZCAqIHRtcDsKKyAKKyAgIC8qIE5vdyBjb3VudCByZW1haW5pbmcgYnl0ZXMuICAqLworICAgY3R4LT50b3RhbFswXSArPSBieXRlczsKK0BAIC0xMDUsOSArMTA2LDEwIEBAIG1kNV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIG1lbWNweSAoJmN0eC0+YnVmZmVyW2J5dGVzXSwgZmlsbGJ1ZiwgcGFkKTsKKyAKKyAgIC8qIFB1dCB0aGUgNjQtYml0IGZpbGUgbGVuZ3RoIGluICpiaXRzKiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworLSAgKihtZDVfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF0gPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworLSAgKihtZDVfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfAorLQkJCQkJCQkoY3R4LT50b3RhbFswXSA+PiAyOSkpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXTsKKysgICoobWQ1X3VpbnQzMiAqKSB0bXAgPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkICsgNF07CisrICAqKG1kNV91aW50MzIgKikgdG1wID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfCAoY3R4LT50b3RhbFswXSA+PiAyOSkpOworIAorICAgLyogUHJvY2VzcyBsYXN0IGJ5dGVzLiAgKi8KKyAgIG1kNV9wcm9jZXNzX2Jsb2NrIChjdHgtPmJ1ZmZlciwgYnl0ZXMgKyBwYWQgKyA4LCBjdHgpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9zaGExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9zaGExLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvc2hhMS5jCitAQCAtOTYsNiArOTYsNyBAQCBzaGExX2ZpbmlzaF9jdHggKGN0eCwgcmVzYnVmKQorICAgLyogVGFrZSB5ZXQgdW5wcm9jZXNzZWQgYnl0ZXMgaW50byBhY2NvdW50LiAgKi8KKyAgIHNoYTFfdWludDMyIGJ5dGVzID0gY3R4LT5idWZsZW47CisgICBzaXplX3QgcGFkOworKyAgdm9pZCAqIHRtcDsKKyAKKyAgIC8qIE5vdyBjb3VudCByZW1haW5pbmcgYnl0ZXMuICAqLworICAgY3R4LT50b3RhbFswXSArPSBieXRlczsKK0BAIC0xMDYsOSArMTA3LDEwIEBAIHNoYTFfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICBtZW1jcHkgKCZjdHgtPmJ1ZmZlcltieXRlc10sIGZpbGxidWYsIHBhZCk7CisgCisgICAvKiBQdXQgdGhlIDY0LWJpdCBmaWxlIGxlbmd0aCBpbiAqYml0cyogYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKy0gICooc2hhMV91aW50MzIgKikgJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXSA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwKKy0JCQkJCQkgICAgIChjdHgtPnRvdGFsWzBdID4+IDI5KSk7CistICAqKHNoYTFfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF07CisrICAqKHNoYTFfdWludDMyICopIHRtcCA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwgKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdOworKyAgKihzaGExX3VpbnQzMiAqKSB0bXAgPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworIAorICAgLyogUHJvY2VzcyBsYXN0IGJ5dGVzLiAgKi8KKyAgIHNoYTFfcHJvY2Vzc19ibG9jayAoY3R4LT5idWZmZXIsIGJ5dGVzICsgcGFkICsgOCwgY3R4KTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZiOTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2hwcGFfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsODAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX2luaXQuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw3NCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIFBBLVJJU0Mgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9QQVJJU0NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysjaW5jbHVkZSAibGliZWJsX3BhcmlzYy5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIHBhcmlzY19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2NfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGlmIChlbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHIgJiYgKGVoZHItPmVfZmxhZ3MgJiBFRl9QQVJJU0NfV0lERSkpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAiUEEtUklTQyI7CisrICBwYXJpc2NfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCBtYWNoaW5lX2ZsYWdfY2hlY2spOworKyAgSE9PSyAoZWgsIHN5bWJvbF90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHNlZ21lbnRfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWN0aW9uX3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrICBpZiAocGE2NCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQ7CisrICBlbHNlCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDE1OSBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBQQS1SSVNDIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK3BhcmlzY19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCwgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIGlmIChlYmwtPmVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWJsLT5lbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrCisrICBpbnQgbnJlZ3MgPSBwYTY0ID8gMTI3IDogMTI4OworKworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIG5yZWdzOworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+PSBucmVncyB8fCBuYW1lbGVuIDwgNikKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIlIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gMzIpCisrICB7CisrICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDU7CisrICAgIH0KKysgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICB9CisrICBlbHNlCisrICB7CisrICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKworKyAgaWYgKHJlZ25vIDwgMzMpIHsKKysgICAgc3dpdGNoIChyZWdubykKKysgICAgICB7CisrICAgICAgY2FzZSAwIC4uLiA5OgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAxMCAuLi4gMzE6CisrICAgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgICAgbmFtZVsxXSA9IHJlZ25vIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAzMjoKKysJKnByZWZpeCA9IE5VTEw7CisrCW5hbWVbMF0gPSAnUyc7CisrCW5hbWVbMV0gPSAnQSc7CisrCW5hbWVbMl0gPSAnUic7CisrCW5hbWVsZW4gPSAzOworKwlicmVhazsKKysgICAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKHBhNjQgJiYgKChyZWdubyAtIDcyKSAlIDIpKSB7CisrICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgNzIgKyAwIC4uLiA3MiArIDExOgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVszXSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDcyICsgMTIgLi4uIDcyICsgNTU6CisrICAgICAgICBuYW1lWzBdID0gJ2YnOworKwluYW1lWzFdID0gJ3InOworKyAgICAgICAgbmFtZVsyXSA9IChyZWdubyArIDggLSA3MikgLyAyIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzNdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSA0OworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVs0XSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgfQorKyAgfQorKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMjggQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBQQS1SSVNDLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKgkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIyMUwsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE3RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNFIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxNFIsCQlSRUx8RVhFQykKKytSRUxPQ19UWVBFIChEUFJFTDIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNERSLCAgICAgICAgICBSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChMVE9GRjE0UiwJCVJFTCkKKytSRUxPQ19UWVBFIChETFRJTkQxNEYsCQkwKQorK1JFTE9DX1RZUEUgKFNFVEJBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxN1IsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKFNFR0JBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVE9GRjIxTCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNEYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIzMiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNFIsCTApCisrUkVMT0NfVFlQRSAoRlBUUjY0LAkJMCkKKytSRUxPQ19UWVBFIChQTEFCRUwzMiwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoUENSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwyMkMsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChESVI2NCwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoRElSMTRXUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNERSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNldGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2REYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkY2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZERiwJCTApCisrUkVMT0NfVFlQRSAoU0VDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFdSLAkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNERSLAkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFI2NCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNkRGLAkwKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKElQTFQsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChFUExULAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDMyLAkJRFlOKQorK1JFTE9DX1RZUEUgKFRQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAyMUwsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNEYsCTApCisrUkVMT0NfVFlQRSAoVFBSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFA2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFdSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2V0YsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkRGLAkwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwJRFlOKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwJRFlOKQorKworKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgICAgICAgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwyMTMgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L1BBLVJJU0MgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiAlcjI4LCBvciBwYWlyICVyMjgsICVyMjkuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJWZyNEwsIG9yIHBhaXIgJWZyNEwsICVmcjRSIG9uIHBhLTMyICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZzMyIDIKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyMzIgNAorKworKy8qICRmcjQgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworKyNpZiAwCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuIEFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIGlzIHN0b3JlZAorKyAgIGluICVyMjggYmVmb3JlIGZ1bmN0aW9uIGNhbGwsIGJ1dCBpdCBtYXkgYmUgY2hhbmdlZCBieSBmdW5jdGlvbi4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysjZW5kaWYKKysKKytzdGF0aWMgaW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwgaW50IHBhNjQpCisreworKyAgRHdhcmZfV29yZCByZWdzaXplID0gcGE2NCA/IDggOiA0OworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUgfHwgdGFnID09IERXX1RBR19tdXRhYmxlX3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IDQ7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCWlmIChwYTY0KSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnOworKwkJICBpZiAoc2l6ZSA8PSA4KQorKwkJICAgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCQl9CisrCQllbHNlIHsKKysJCSAgKmxvY3AgPSBsb2NfZnByZWczMjsKKysJCSAgaWYgKHNpemUgPD0gNCkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzMyOworKwkJICBlbHNlIGlmIChzaXplIDw9IDgpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyMzI7CisrCQl9CisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJaWYgKHBhNjQpCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOiB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9hZ2dyZWdhdGVfc2l6ZSAodHlwZWRpZSwgJnNpemUpICE9IDApCisrCSAgcmV0dXJuIC0xOworKwlpZiAocGE2NCkKKysgICAgICAgICAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrICAgICAgICBpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysgICAgICAgIGlmIChzaXplIDw9IDIgKiByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrI2lmIDAKKysJLyogdGhlcmUgc2hvdWxkIGJlIHNvbWUgd2F5IHRvIGtub3cgdGhpcyBsb2NhdGlvbi4uLiBCdXQgSSBkbyBub3Qgc2VlIGl0LiAqLworKyAgICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyNlbmRpZgorKwkvKiBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworK2ludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICByZXR1cm4gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDExMiBAQAorKy8qIFBBLVJJU0Mgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VnbWVudF90eXBlX25hbWUgKGludCBzZWdtZW50LCBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCXNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIHN3aXRjaCAoc2VnbWVudCkKKysgICAgeworKyAgICBjYXNlIFBUX1BBUklTQ19BUkNIRVhUOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0FSQ0hFWFQiOworKyAgICBjYXNlIFBUX1BBUklTQ19VTldJTkQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfVU5XSU5EIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzeW1ib2wgdHlwZS4gICovCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3N5bWJvbF90eXBlX25hbWUoaW50IHN5bWJvbCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysgICAgc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKwlpZiAoc3ltYm9sID09IFNUVF9QQVJJU0NfTUlMTElDT0RFKQorKwkgIHJldHVybiAiUEFSSVNDX01JTExJIjsKKysJcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzZWN0aW9uIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zZWN0aW9uX3R5cGVfbmFtZSAoaW50IHR5cGUsCisrCQkJY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBTSFRfUEFSSVNDX0VYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19FWFQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGNhc2UgU0hUX1BBUklTQ19ET0M6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRE9DIjsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIENoZWNrIHdoZXRoZXIgbWFjaGluZSBmbGFncyBhcmUgdmFsaWQuICAqLworK2Jvb2wKKytwYXJpc2NfbWFjaGluZV9mbGFnX2NoZWNrIChHRWxmX1dvcmQgZmxhZ3MpCisreworKyAgaWYgKGZsYWdzICZ+IChFRl9QQVJJU0NfVFJBUE5JTCB8IEVGX1BBUklTQ19FWFQgfCBFRl9QQVJJU0NfTFNCIHwKKysJRUZfUEFSSVNDX1dJREUgfCBFRl9QQVJJU0NfTk9fS0FCUCB8CisrCUVGX1BBUklTQ19MQVpZU1dBUCB8IEVGX1BBUklTQ19BUkNIKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBHRWxmX1dvcmQgYXJjaCA9IGZsYWdzICYgRUZfUEFSSVNDX0FSQ0g7CisrCisrICByZXR1cm4gKChhcmNoID09IEVGQV9QQVJJU0NfMV8wKSB8fCAoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMSkgfHwKKysgICAgICAoYXJjaCA9PSBFRkFfUEFSSVNDXzJfMCkpOworK30KKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKytwYXJpc2NfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9QQVJJU0NfRElSNjQ6CisrICAgIGNhc2UgUl9QQVJJU0NfU0VDUkVMNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjMyOgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDkgQEAKKysjaWZuZGVmIF9MSUJFQkxfSFBQQV9ICisrI2RlZmluZSBfTElCRUJMX0hQUEFfSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyKER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMDo0MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDExICsyOSwxMSBAQAorIAkgICAtSSQodG9wX3NyY2RpcikvbGliZWxmIC1JJCh0b3Bfc3JjZGlyKS9saWJkdworIAorIAorLW1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MAorK21vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBsaWJlYmxfcHBjNjRfcGljLmEgXAorLQkgICAgIGxpYmVibF9zMzkwX3BpYy5hCisrCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC05NSw2ICs5NSw5IEBACisgbGliZWJsX3MzOTBfcGljX2FfU09VUkNFUyA9ICQoczM5MF9TUkNTKQorIGFtX2xpYmVibF9zMzkwX3BpY19hX09CSkVDVFMgPSAkKHMzOTBfU1JDUzouYz0ub3MpCisgCisrcGFyaXNjX1NSQ1MgPSBwYXJpc2NfaW5pdC5jIHBhcmlzY19zeW1ib2wuYyBwYXJpc2NfcmVncy5jIHBhcmlzY19yZXR2YWwuYworK2xpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisrYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTE3ODksMTYgKzE3ODksMjQgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMjFMCTE4CS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFdSCTE5CisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0RFIJMjAKKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRSCTIyCS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMjFMCTI2CS8qIEdQLXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFIJMzAJLyogR1AtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYyMUwJMzQJLyogTFQtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0UgkzOAkvKiBMVC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ETFRJTkQxNEYJMzkKKysjZGVmaW5lIFJfUEFSSVNDX1NFVEJBU0UJNDAKKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDMyCTQxCS8qIDMyIGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDIxTAk0MgorKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE3Ugk0MworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0Ugk0NgorICNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMjFMCTUwCS8qIFBMVCByZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNEYJNTUKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIzMgk1NwkvKiAzMiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcG9pbnRlci4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIyMUwJNTgJLyogTFQtcmVsLiBmY3QgcHRyLCBsZWZ0IDIxIGJpdHMuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTRSCTYyCS8qIExULXJlbC4gZmN0IHB0ciwgcmlnaHQgMTQgYml0cy4gKi8KK0BAIC0xODA3LDYgKzE4MTUsNyBAQAorICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMjFMCTY2CS8qIExlZnQgMjEgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyQwk3MworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkYJNzQJLyogMjIgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFdSCTc1CS8qIFBDLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0RFIJNzYJLyogUEMgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KK0BAIC0xODMyLDYgKzE4NDEsOCBAQAorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNldGCTEwMgkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2REYJMTAzCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDY0CTEwNAkvKiA2NCBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFdSCTEwNworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0RFIJMTA4CisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUw2NAkxMTIJLyogNjQgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFdSCTExNQkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0RFIJMTE2CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvaTM4Nl9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNjMDFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmgKQEAgLTAsMCArMSwxNjU3IEBACisjZGVmaW5lIE1ORU1PTklDX0JJVFMgMTAKKyNkZWZpbmUgU1VGRklYX0JJVFMgMworI2RlZmluZSBGQ1QxX0JJVFMgNworI2RlZmluZSBTVFIxX0JJVFMgNAorI2RlZmluZSBPRkYxXzFfQklUUyA3CisjZGVmaW5lIE9GRjFfMV9CSUFTIDMKKyNkZWZpbmUgT0ZGMV8yX0JJVFMgNworI2RlZmluZSBPRkYxXzJfQklBUyA0CisjZGVmaW5lIE9GRjFfM19CSVRTIDEKKyNkZWZpbmUgT0ZGMV8zX0JJQVMgNworI2RlZmluZSBGQ1QyX0JJVFMgNgorI2RlZmluZSBTVFIyX0JJVFMgMgorI2RlZmluZSBPRkYyXzFfQklUUyA3CisjZGVmaW5lIE9GRjJfMV9CSUFTIDUKKyNkZWZpbmUgT0ZGMl8yX0JJVFMgNworI2RlZmluZSBPRkYyXzJfQklBUyA0CisjZGVmaW5lIE9GRjJfM19CSVRTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJQVMgNworI2RlZmluZSBGQ1QzX0JJVFMgNAorI2RlZmluZSBTVFIzX0JJVFMgMQorI2RlZmluZSBPRkYzXzFfQklUUyA2CisjZGVmaW5lIE9GRjNfMV9CSUFTIDEwCisjZGVmaW5lIE9GRjNfMl9CSVRTIDEKKyNkZWZpbmUgT0ZGM18yX0JJQVMgMjEKKworI2luY2x1ZGUgPGkzODZfZGF0YS5oPgorCisjZGVmaW5lIHN1ZmZpeF9ub25lIDAKKyNkZWZpbmUgc3VmZml4X3cgMQorI2RlZmluZSBzdWZmaXhfdzAgMgorI2RlZmluZSBzdWZmaXhfVyAzCisjZGVmaW5lIHN1ZmZpeF90dHRuIDQKKyNkZWZpbmUgc3VmZml4X0QgNworI2RlZmluZSBzdWZmaXhfdzEgNQorI2RlZmluZSBzdWZmaXhfVzEgNgorCitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDFfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9heCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kaXNwOCwKKyAgRkNUX2RzX2J4LAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbSRzLAorICBGQ1RfaW1tJHcsCisgIEZDVF9pbW0xNiwKKyAgRkNUX2ltbTgsCisgIEZDVF9pbW1zOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQxNnJfbSwKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCQ4cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnMTYsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3JlbCwKKyAgRkNUX3NlbCwKKyAgRkNUX3NyZWcyLAorICBGQ1Rfc3JlZzMsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AxX3N0cltdID0KKyAgIiVheFwwIgorICAiJWNsXDAiCisgICIlZWF4XDAiCisgICIlc3RcMCIKKyAgIiV4bW0wXDAiCisgICIqIjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMV9zdHJfaWR4W10gPSB7CisgIDAsCisgIDQsCisgIDgsCisgIDEzLAorICAxNywKKyAgMjMsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AyX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX01PRCRSX00sCisgIEZDVF9Nb2QkUl9tLAorICBGQ1RfYWJzLAorICBGQ1RfYWJzdmFsLAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2RzX3NpLAorICBGQ1RfZHgsCisgIEZDVF9lc19kaSwKKyAgRkNUX2ZyZWcsCisgIEZDVF9pbW04LAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJDY0cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX21vZGEkcl9tLAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMl9zdHJbXSA9CisgICIlZWN4XDAiCisgICIlc3QiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AyX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNSwKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDNfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDNfc3RyW10gPQorICAiJWVkeCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDNfc3RyX2lkeFtdID0geworICAwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zdHJfZW5jIGluc3RydGFiW10gPQoreworICB7IC5tbmVtb25pYyA9IE1ORV9hYWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hYXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYXJwbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ib3VuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic2YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Jzd2FwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbHRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNleGl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Ntb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZzhiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jcHVpZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0ZHEycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RhYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGFzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFicywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnRzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsZzIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxuMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkeiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZjJ4bTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnBhdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHRyYWN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeHAxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3FydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJuZGludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNjYWxlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkY3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0ZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVscCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZibGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zic3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9md2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5jbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZudSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZybCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZnJlZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuaW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHB0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9obHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lucywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnRvLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zd2FwZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmxwZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaXJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDYsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xnZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAyLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xpZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAyLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xtc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvY2ssIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvZHMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcG5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sc2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2x0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDcsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzYmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3dsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnpibCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6d2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbmVnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF1c2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wY250LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZG1zciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRwbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkdHNjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zY2FzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1sYXVuY2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVzdW1lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvZmYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXdyaXRlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NnZHRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb25pdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNCwgLnN0cjMgPSAxLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX213YWl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NpZHRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG9zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VkMmEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3diaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2hudGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd3Jtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hsYXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkbXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0bXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNsZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzaGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2dldHNlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tscWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxMnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2xlYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9uLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZmx1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnNlcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3VzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR2YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhtaW5wb3N1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKK307CitzdGF0aWMgY29uc3QgdWludDhfdCBtYXRjaF9kYXRhW10gPQoreworICAweDExLCAweDM3LAorICAweDIyLCAweGQ1LCAweGEsCisgIDB4MjIsIDB4ZDQsIDB4YSwKKyAgMHgxMSwgMHgzZiwKKyAgMHgxLCAweGZlLCAweDE0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDEwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MTIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHg0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDAsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MjQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4MjAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDEyLCAweDYzLCAwLCAwLAorICAweDEyLCAweDYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZCwgMCwgMCwKKyAgMHgxMiwgMHhmLCAweGY4LCAweGM4LAorICAweDIzLCAweGYsIDB4YTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAweGJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhiMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHhlOCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxMCwKKyAgMHgxMSwgMHg5YSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxOCwKKyAgMHgxMSwgMHg5OCwKKyAgMHgxMSwgMHg5OSwKKyAgMHgxMSwgMHhmOCwKKyAgMHgxMSwgMHhmYywKKyAgMHgxMSwgMHhmYSwKKyAgMHgyMiwgMHhmLCAweDUsCisgIDB4MjIsIDB4ZiwgMHg2LAorICAweDIyLCAweGYsIDB4NywKKyAgMHgyMiwgMHhmLCAweDM0LAorICAweDIyLCAweGYsIDB4MzUsCisgIDB4MTEsIDB4ZjUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg0MCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDNjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgzOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDNhLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGMyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNiwKKyAgMHgxMywgMHhmLCAweGZlLCAweGIwLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGEyLAorICAweDM0LCAweGYzLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU2LCAwLCAwLAorICAweDExLCAweDI3LAorICAweDExLCAweDJmLAorICAweDIsIDB4ZmUsIDB4ZmUsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGY4LCAweDQ4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgxMSwgMHhjOCwKKyAgMHgyMiwgMHhkOSwgMHhkMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgyMiwgMHhkOSwgMHhlMSwKKyAgMHgyMiwgMHhkOSwgMHhlNCwKKyAgMHgyMiwgMHhkOSwgMHhlNSwKKyAgMHgyMiwgMHhkOSwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhlOSwKKyAgMHgyMiwgMHhkOSwgMHhlYSwKKyAgMHgyMiwgMHhkOSwgMHhlYiwKKyAgMHgyMiwgMHhkOSwgMHhlYywKKyAgMHgyMiwgMHhkOSwgMHhlZCwKKyAgMHgyMiwgMHhkOSwgMHhlZSwKKyAgMHgyMiwgMHhkOSwgMHhmMCwKKyAgMHgyMiwgMHhkOSwgMHhmMSwKKyAgMHgyMiwgMHhkOSwgMHhmMiwKKyAgMHgyMiwgMHhkOSwgMHhmMywKKyAgMHgyMiwgMHhkOSwgMHhmNCwKKyAgMHgyMiwgMHhkOSwgMHhmNSwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkOSwgMHhmOCwKKyAgMHgyMiwgMHhkOSwgMHhmOSwKKyAgMHgyMiwgMHhkOSwgMHhmYSwKKyAgMHgyMiwgMHhkOSwgMHhmYiwKKyAgMHgyMiwgMHhkOSwgMHhmYywKKyAgMHgyMiwgMHhkOSwgMHhmZCwKKyAgMHgyMiwgMHhkOSwgMHhmZSwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGM4LAorICAweDEyLCAweGRjLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGU4LAorICAweDEyLCAweGRjLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDE4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDI4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDMwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHg4LAorICAweDEyLCAweGRlLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkZiwgMHhlMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMiwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMywKKyAgMHgxMSwgMHg5YiwKKyAgMHgyMiwgMHhkYiwgMHhlMiwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDEwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZGUsIDB4ZDksCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDM4LAorICAweDEyLCAweGRhLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRkLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkYiwgMHhlMywKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHg4LAorICAweDEyLCAweGRkLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhmNCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhZiwgMCwgMCwKKyAgMHgyLCAweGZkLCAweDY5LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4ZTQsCisgIDB4MSwgMHhmZSwgMHhlYywKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAwLAorICAweDEsIDB4ZjgsIDB4NDAsCisgIDB4MSwgMHhmZSwgMHg2YywKKyAgMHgxMSwgMHhjZCwKKyAgMHgxMSwgMHhjYywKKyAgMHgxMSwgMHhjZSwKKyAgMHgyMiwgMHhmLCAweDgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGY4LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhjZiwKKyAgMHgxLCAweGYwLCAweDcwLAorICAweDEyLCAweGYsIDB4ZjAsIDB4ODAsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgxMSwgMHhlMywKKyAgMHgxMSwgMHhlYiwKKyAgMHgxMSwgMHhlOSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyMCwKKyAgMHgxMSwgMHhlYSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHg5ZiwKKyAgMHgyMywgMHhmLCAweDIsIDAsIDAsCisgIDB4MTIsIDB4YzUsIDAsIDAsCisgIDB4MTIsIDB4OGQsIDAsIDAsCisgIDB4MTEsIDB4YzksCisgIDB4MTIsIDB4YzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzAsCisgIDB4MTEsIDB4ZjAsCisgIDB4MSwgMHhmZSwgMHhhYywKKyAgMHgxMSwgMHhlMiwKKyAgMHgxMSwgMHhlMSwKKyAgMHgxMSwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ODgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGM2LCAweDM4LCAwLAorICAweDEsIDB4ZjAsIDB4YjAsCisgIDB4MSwgMHhmZSwgMHhhMCwKKyAgMHgxLCAweGZlLCAweGEyLAorICAweDIzLCAweGYsIDB4MjAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIxLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjMsIDB4YzAsIDB4YzAsCisgIDB4MTIsIDB4OGMsIDAsIDAsCisgIDB4MTIsIDB4OGUsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNCwKKyAgMHgyMywgMHhmLCAweGJlLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI3LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmMywgMHg5MCwKKyAgMHgxMSwgMHg5MCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGI4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHg4LAorICAweDEsIDB4ZmUsIDB4YywKKyAgMHgxLCAweGZlLCAweGU2LAorICAweDEsIDB4ZmUsIDB4ZWUsCisgIDB4MSwgMHhmZSwgMHg2ZSwKKyAgMHgxMiwgMHg4ZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgxLAorICAweDExLCAweDlkLAorICAweDEyLCAweGZmLCAweDM4LCAweDMwLAorICAweDEsIDB4ZjgsIDB4NTAsCisgIDB4MSwgMHhmOCwgMHg1OCwKKyAgMHgxLCAweGZkLCAweDY4LAorICAweDEsIDB4ZTcsIDB4NiwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgwLAorICAweDExLCAweDYwLAorICAweDExLCAweDYxLAorICAweDExLCAweDljLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDE4LAorICAweDIyLCAweGYsIDB4MzIsCisgIDB4MjIsIDB4ZiwgMHgzMywKKyAgMHgyMiwgMHhmLCAweDMxLAorICAweDExLCAweGMzLAorICAweDExLCAweGMyLAorICAweDExLCAweGNiLAorICAweDExLCAweGNhLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YWEsCisgIDB4MTEsIDB4OWUsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgxOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDFhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MWMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDE4LAorICAweDEsIDB4ZmUsIDB4YWUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhNSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGFkLCAwLCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjMSwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzIsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMzLAorICAweDMzLCAweGYsIDB4MSwgMHhjNCwKKyAgMHgyMywgMHhmLCAweDc4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjOCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzksCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZjksCisgIDB4MTEsIDB4ZmQsCisgIDB4MTEsIDB4ZmIsCisgIDB4MSwgMHhmZSwgMHhhYSwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHgyOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDJhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MmMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4ODQsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAwLAorICAweDIyLCAweGYsIDB4YiwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZiwgMHg5LAorICAweDIzLCAweGYsIDB4ZCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMHgxZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDMwLAorICAweDEzLCAweGYsIDB4ZmUsIDB4YzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4NiwgMCwgMCwKKyAgMHgxLCAweGY4LCAweDkwLAorICAweDExLCAweGQ3LAorICAweDIsIDB4ZmUsIDB4MzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgzMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDM0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhmLCAweDc3LAorICAweDM0LCAweDY2LCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgxOCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDExLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDI4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJkLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDM3LAorICAweDM0LCAweDY2LCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHg1MCwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU3LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVjLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2QsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdlLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGM1LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGQ2LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhkNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUwLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU3LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWUsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhmMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhmNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg1LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg4LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDksIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHhiLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhlOCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGYwLAorICAweDMzLCAweGYsIDB4YWUsIDB4ZjgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGYsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyOSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2YsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YiwgMCwgMCwKKyAgMHgxLCAweGU3LCAweDcsCit9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjIxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbTY4a19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSwzMDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19pbml0LmMJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDkgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtNjhrIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdGFyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfNjhLXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbTY4a19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKyttNjhrX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAibTY4ayI7CisrICBtNjhrX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMDYgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgbTY4ayBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttNjhrX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCSAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysJaWYgKG5hbWUgPT0gTlVMTCkKKysJCXJldHVybiAyNTsKKysKKysJaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDI0IHx8IG5hbWVsZW4gPCA1KQorKwkJcmV0dXJuIC0xOworKworKwkqcHJlZml4ID0gIiUiOworKwkqYml0cyA9IDMyOworKwkqdHlwZSA9IChyZWdubyA8IDggPyBEV19BVEVfc2lnbmVkCisrCQk6IHJlZ25vIDwgMTYgPyBEV19BVEVfYWRkcmVzcyA6IERXX0FURV9mbG9hdCk7CisrCisrCWlmIChyZWdubyA8IDgpCisrCXsKKysJCSpzZXRuYW1lID0gImludGVnZXIiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMTYpCisrCXsKKysJCSpzZXRuYW1lID0gImFkZHJlc3MiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMjQpCisrCXsKKysJCSpzZXRuYW1lID0gIkZQVSI7CisrCX0KKysJZWxzZQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJCSp0eXBlID0gRFdfQVRFX2FkZHJlc3M7CisrCX0KKysKKysJc3dpdGNoIChyZWdubykKKysJeworKwljYXNlIDAgLi4uIDc6CisrCQluYW1lWzBdID0gJ2QnOworKwkJbmFtZVsxXSA9IHJlZ25vICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSA4IC4uLiAxMzoKKysJCW5hbWVbMF0gPSAnYSc7CisrCQluYW1lWzFdID0gcmVnbm8gLSA4ICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNDoKKysJCW5hbWVbMF0gPSAnZic7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNToKKysJCW5hbWVbMF0gPSAncyc7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNiAuLi4gMjM6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysJCW5hbWVbMl0gPSByZWdubyAtIDE2ICsgJzAnOworKyAgIAkJbmFtZWxlbiA9IDM7CisrCQlicmVhazsKKysKKysJY2FzZSAyNDoKKysJCW5hbWVbMF0gPSAncCc7CisrCQluYW1lWzFdID0gJ2MnOworKwkJbmFtZWxlbiA9IDI7CisrCX0KKysKKysJbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysJcmV0dXJuIG5hbWVsZW47CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWxvYy5kZWYJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtNjhrLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKy8qIAkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQkwKQorK1JFTE9DX1RZUEUgKDMyLAkJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFICgxNiwJCQlSRUwpCisrUkVMT0NfVFlQRSAoOCwJCQlSRUwpCisrUkVMT0NfVFlQRSAoUEMzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChQQzE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1Q4LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDMyTywJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOE8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUOCwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKEdMT0JfREFULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoSk1QX1NMT1QsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChSRUxBVElWRSwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEdOVV9WVElOSEVSSVQsCVJFTCkKKytSRUxPQ19UWVBFIChHTlVfVlRFTlRSWSwJUkVMKQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTM6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMTEyNSw2ICsxMTI1LDkgQEAKKyAjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCQkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisgI2RlZmluZSBSXzY4S19KTVBfU0xPVAkyMQkJLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIJCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysvKiBUaGUgbmV4dCAyIGFyZSBHTlUgZXh0ZW5zaW9ucyB0byBlbmFibGUgQysrIHZ0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uICAqLworKyNkZWZpbmUgUl82OEtfR05VX1ZUSU5IRVJJVCAyMworKyNkZWZpbmUgUl82OEtfR05VX1ZURU5UUlkgICAyNAorICNkZWZpbmUgUl82OEtfVExTX0dEMzIgICAgICAyNSAgICAgICAgICAvKiAzMiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyAjZGVmaW5lIFJfNjhLX1RMU19HRDE2ICAgICAgMjYgICAgICAgICAgLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0Q4ICAgICAgIDI3ICAgICAgICAgIC8qIDggYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTE6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTIgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjIG1pcHMKKyttb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjIG1pcHMgbTY4aworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgXAorIAkgICAgIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIGxpYmVibF9wcGM2NF9waWMuYSBcCistCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorKwkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEgXAorKwkgICAgIGxpYmVibF9tNjhrX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTEwMyw2ICsxMDQsMTAgQEAKKyBsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisgYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKyAKKyttNjhrX1NSQ1MgPSBtNjhrX2luaXQuYyBtNjhrX3N5bWJvbC5jIG02OGtfcmVncy5jCisrbGliZWJsX202OGtfcGljX2FfU09VUkNFUyA9ICQobTY4a19TUkNTKQorK2FtX2xpYmVibF9tNjhrX3BpY19hX09CSkVDVFMgPSAkKG02OGtfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19zeW1ib2wuYwkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0MyBAQAorKy8qIG02OGsgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbTY4a19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSXzY4S18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfU1dPUkQ7CisrICAgIGNhc2UgUl82OEtfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl82OEtfODoKKysgICAgICByZXR1cm4gRUxGX1RfQllURTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODFhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbWlwc19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw3MTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19pbml0LmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtaXBzIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9NSVBTXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbWlwc19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKytjb25zdCBjaGFyICoKKyttaXBzX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgaWYgKG1hY2hpbmUgPT0gRU1fTUlQUykKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBiaWctZW5kaWFuIjsKKysgIGVsc2UgaWYgKG1hY2hpbmUgPT0gRU1fTUlQU19SUzNfTEUpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgbGl0dGxlLWVuZGlhbiI7CisrCisrICBtaXBzX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVncy5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDEwNCBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBNSVBTIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttaXBzX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorKwkJICAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIDY2OworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDY1IHx8IG5hbWVsZW4gPCA0KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiQiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAxOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IChyZWdubyAvIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZVsxXSA9IChyZWdubyAlIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vIDwgNjQpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdmJzsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSArICcwJzsKKysJICBuYW1lbGVuID0gMjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgLyAxMCArICcwJzsKKysJICBuYW1lWzJdID0gKHJlZ25vIC0gMzIpICUgMTAgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDM7CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gNjQpCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2gnOworKyAgICAgIG5hbWVbMV0gPSAnaSc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnbCc7CisrICAgICAgbmFtZVsxXSA9ICdvJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKworKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDc5IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbWlwcy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDE2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgzMiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMzIsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDI2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISTE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTE8xNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTYsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMSVRFUkFMLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFBDMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMMTYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwzMiwgICAgICAgICAgICAwKQorKworK1JFTE9DX1RZUEUgKFNISUZUNSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTSElGVDYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoNjQsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfUEFHRSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX09GU1QsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ISTE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfTE8xNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU1VCLCAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9BLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoREVMRVRFLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFUiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVNULCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9ISTE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfTE8xNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTQ05fRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEFERF9JTU1FRElBVEUsICAgICAgMCkKKytSRUxPQ19UWVBFIChQSlVNUCwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMR09ULCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEpBTFIsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMNjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dELCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19MRE0sICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0hJMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9MTzE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HT1RUUFJFTCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUwzMiwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMNjQsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9ISTE2LCAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfTE8xNiwgICAgIDApCisrCisrI2RlZmluZSBOT19DT1BZX1JFTE9DIDEKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZXR2YWwuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwzMjEgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L21pcHMgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrI2luY2x1ZGUgPGVsZi5oPgorKworKyNpbmNsdWRlICIuLi9saWJlYmwvbGliZWJsUC5oIgorKyNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIKKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoZSBBQkkgb2YgdGhlIGZpbGUuICBBbHNvIHNlZSBFRl9NSVBTX0FCSTIgYWJvdmUuICovCisrI2RlZmluZSBFRl9NSVBTX0FCSQkJMHgwMDAwRjAwMAorKworKy8qIFRoZSBvcmlnaW5hbCBvMzIgYWJpLiAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PMzIgICAgICAgICAgMHgwMDAwMTAwMAorKworKy8qIE8zMiBleHRlbmRlZCB0byB3b3JrIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzICovCisrI2RlZmluZSBFX01JUFNfQUJJX082NCAgICAgICAgICAweDAwMDAyMDAwCisrCisrLyogRUFCSSBpbiAzMiBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJMzIgICAgICAgMHgwMDAwMzAwMAorKworKy8qIEVBQkkgaW4gNjQgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTY0ICAgICAgIDB4MDAwMDQwMDAKKysKKysvKiBBbGwgdGhlIHBvc3NpYmxlIE1JUFMgQUJJcy4gKi8KKytlbnVtIG1pcHNfYWJpCisrICB7CisrICAgIE1JUFNfQUJJX1VOS05PV04gPSAwLAorKyAgICBNSVBTX0FCSV9OMzIsCisrICAgIE1JUFNfQUJJX08zMiwKKysgICAgTUlQU19BQklfTjY0LAorKyAgICBNSVBTX0FCSV9PNjQsCisrICAgIE1JUFNfQUJJX0VBQkkzMiwKKysgICAgTUlQU19BQklfRUFCSTY0LAorKyAgICBNSVBTX0FCSV9MQVNUCisrICB9OworKworKy8qIEZpbmQgdGhlIG1pcHMgQUJJIG9mIHRoZSBjdXJyZW50IGZpbGUgKi8KKytlbnVtIG1pcHNfYWJpIGZpbmRfbWlwc19hYmkoRWxmICplbGYpCisreworKyAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrCisrICBpZiAoZWhkciA9PSBOVUxMKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIEdFbGZfV29yZCBlbGZfZmxhZ3MgPSBlaGRyLT5lX2ZsYWdzOworKworKyAgLyogQ2hlY2sgZWxmX2ZsYWdzIHRvIHNlZSBpZiBpdCBzcGVjaWZpZXMgdGhlIEFCSSBiZWluZyB1c2VkLiAgKi8KKysgIHN3aXRjaCAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJKSkKKysgICAgeworKyAgICBjYXNlIEVfTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkkzMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgaWYgKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSTIpKQorKwlyZXR1cm4gTUlQU19BQklfTjMyOworKyAgICB9CisrCisrICAvKiBHQ0MgY3JlYXRlcyBhIHBzZXVkby1zZWN0aW9uIHdob3NlIG5hbWUgZGVzY3JpYmVzIHRoZSBBQkkuICAqLworKyAgc2l6ZV90IHNoc3RybmR4OworKyAgaWYgKGVsZl9nZXRzaGRyc3RybmR4IChlbGYsICZzaHN0cm5keCkgPCAwKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBFbGZfU2NuICpzY24gPSBOVUxMOworKyAgd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbiAoZWxmLCBzY24pKSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworKyAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworKyAgICAgIGlmIChzaGRyID09IE5VTEwpCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgICAgICBuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSkgPzogIiI7CisrICAgICAgaWYgKHN0cm5jbXAgKG5hbWUsICIubWRlYnVnLiIsIDgpICE9IDApCisrICAgICAgICBjb250aW51ZTsKKysKKysgICAgICBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTjMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTzY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworKyAgICB9CisrCisrICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKyt9CisrCisrdW5zaWduZWQgaW50CisrbWlwc19hYmlfcmVnc2l6ZSAoZW51bSBtaXBzX2FiaSBhYmkpCisreworKyAgc3dpdGNoIChhYmkpCisrICAgIHsKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJMzI6CisrICAgIGNhc2UgTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiA0OworKyAgICBjYXNlIE1JUFNfQUJJX04zMjoKKysgICAgY2FzZSBNSVBTX0FCSV9ONjQ6CisrICAgIGNhc2UgTUlQU19BQklfTzY0OgorKyAgICBjYXNlIE1JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gODsKKysgICAgY2FzZSBNSVBTX0FCSV9VTktOT1dOOgorKyAgICBjYXNlIE1JUFNfQUJJX0xBU1Q6CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrCisrLyogJHYwIG9yIHBhaXIgJHYwLCAkdjEgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAkZjAgKGZsb2F0KSwgb3IgcGFpciAkZjAsICRmMSAoZG91YmxlKS4KKysgKiBmMi9mMyBhcmUgdXNlZCBmb3IgQ09NUExFWCAoPSAyIGRvdWJsZXMpIHJldHVybnMgaW4gRm9ydHJhbiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM1IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrLyogJGYwLCBvciBwYWlyICRmMCwgJGYyLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIgNAorKyNkZWZpbmUgbmxvY19mcHJlZ3F1YWQgOAorKworKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKysgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluICR2MC4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMiwgLm51bWJlciA9IDAgfQorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysKKytpbnQKKyttaXBzX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIC8qIEZpcnN0IGZpbmQgdGhlIEFCSSB1c2VkIGJ5IHRoZSBlbGYgb2JqZWN0ICovCisrICBlbnVtIG1pcHNfYWJpIGFiaSA9IGZpbmRfbWlwc19hYmkoZnVuY3R5cGVkaWUtPmN1LT5kYmctPmVsZik7CisrCisrICAvKiBTb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3Jvbmcgd2hpbGUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIEFCSSAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9MQVNUKQorKyAgICByZXR1cm4gLTE7CisrCisrICAvKiBXZSBjb3VsZG4ndCBpZGVudGlmeSB0aGUgQUJJLCBidXQgdGhlIGZpbGUgc2VlbXMgdmFsaWQgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfVU5LTk9XTikKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogQ2FuJ3QgaGFuZGxlIEVBQkkgdmFyaWFudHMgKi8KKysgIGlmICgoYWJpID09IE1JUFNfQUJJX0VBQkkzMikgfHwgKGFiaSA9PSBNSVBTX0FCSV9FQUJJNjQpKQorKyAgICByZXR1cm4gLTI7CisrCisrICB1bnNpZ25lZCBpbnQgcmVnc2l6ZSA9IG1pcHNfYWJpX3JlZ3NpemUgKGFiaSk7CisrICBpZiAoIXJlZ3NpemUpCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfbXV0YWJsZV90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSByZWdzaXplOworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrI2RlZmluZSBBQklfTE9DKGxvYywgcmVnc2l6ZSkgKChyZWdzaXplKSA9PSA0ID8gKGxvYyAjIyBfbzMyKSA6IChsb2MpKQorKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJKmxvY3AgPSBBQklfTE9DKGxvY19mcHJlZywgcmVnc2l6ZSk7CisrCQlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnOworKworKwkJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjsKKysKKysJCWlmIChzaXplIDw9IDQqcmVnc2l6ZSAmJiBhYmkgPT0gTUlQU19BQklfTzMyKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncXVhZDsKKysKKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwkqbG9jcCA9IEFCSV9MT0MobG9jX2ludHJlZywgcmVnc2l6ZSk7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guIFNob3VsZG4ndCBoYXBwZW4gdGhvdWdoIChhdCBsZWFzdCB3aXRoIGdjYykgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6CisrICAgICAgLyogWFhYIFRPRE86IENhbid0IGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJuIHdpdGggb3RoZXIgQUJJJ3MgeWV0IDotLyAqLworKyAgICAgIGlmICgoYWJpICE9IE1JUFNfQUJJX08zMikgJiYgKGFiaSAhPSBNSVBTX0FCSV9PNjQpKQorKyAgICAgICAgcmV0dXJuIC0yOworKworKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNTIgQEAKKysvKiBNSVBTIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK21pcHNfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9NSVBTXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfTUlQU18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgY2FzZSBSX01JUFNfNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTAtMDItMjQgMTg6NTU6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC05MSw2ICs5MSw4IEBACisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQywgMCwgMCB9LAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjdjhwbHVzIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMzMlBMVVMsIDAsIDAgfSwKKyAgIHsgInMzOTAiLCAiZWJsX3MzOTAiLCAiczM5MCIsIDQsIEVNX1MzOTAsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHMiLCAibWlwcyIsIDQsIEVNX01JUFMsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHNlbCIsICJtaXBzZWwiLCA0LCBFTV9NSVBTX1JTM19MRSwgMCwgMCB9LAorIAorICAgeyAibTMyIiwgImVsZl9tMzIiLCAibTMyIiwgMywgRU1fTTMyLCAwLCAwIH0sCisgICB7ICJtNjhrIiwgImVsZl9tNjhrIiwgIm02OGsiLCA0LCBFTV82OEssIDAsIDAgfSwKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9jb21tb24tcmVsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ1Lm9yaWcvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxMC0wMi0yNCAxODo1NTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwOSwxMSArMTA5LDEzIEBACisgfQorIAorIAorKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworIGJvb2wKKyBFQkxIT09LKGNvcHlfcmVsb2NfcCkgKGludCByZWxvYykKKyB7CisgICByZXR1cm4gcmVsb2MgPT0gUl9UWVBFIChDT1BZKTsKKyB9CisrI2VuZGlmCisgCisgYm9vbAorIEVCTEhPT0sobm9uZV9yZWxvY19wKSAoaW50IHJlbG9jKQorQEAgLTEzNSw3ICsxMzcsOSBAQAorICAgZWJsLT5yZWxvY190eXBlX25hbWUgPSBFQkxIT09LKHJlbG9jX3R5cGVfbmFtZSk7CisgICBlYmwtPnJlbG9jX3R5cGVfY2hlY2sgPSBFQkxIT09LKHJlbG9jX3R5cGVfY2hlY2spOworICAgZWJsLT5yZWxvY192YWxpZF91c2UgPSBFQkxIT09LKHJlbG9jX3ZhbGlkX3VzZSk7CisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgICBlYmwtPmNvcHlfcmVsb2NfcCA9IEVCTEhPT0soY29weV9yZWxvY19wKTsKKysjZW5kaWYKKyAgIGVibC0+bm9uZV9yZWxvY19wID0gRUJMSE9PSyhub25lX3JlbG9jX3ApOworICNpZm5kZWYgTk9fUkVMQVRJVkVfUkVMT0MKKyAgIGVibC0+cmVsYXRpdmVfcmVsb2NfcCA9IEVCTEhPT0socmVsYXRpdmVfcmVsb2NfcCk7CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDItMjQgMTg6NTc6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0yNCAxODo1Nzo1Ny4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTEgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjCisrbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYyBtaXBzCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSBcCisgCSAgICAgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgbGliZWJsX3BwYzY0X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hCisrCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC05OSw2ICs5OSwxMCBAQAorIGxpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisgYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisrbWlwc19TUkNTID0gbWlwc19pbml0LmMgbWlwc19zeW1ib2wuYyBtaXBzX3JlZ3MuYyBtaXBzX3JldHZhbC5jCisrbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorK2FtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L25tLUZpeC1zaXplLXBhc3NlZC10by1zbnByaW50Zi1mb3ItaW52YWxpZC1zaF9uYW1lLWNhc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1ZGFkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworbm06IEZpeCBzaXplIHBhc3NlZCB0byBzbnByaW50ZiBmb3IgaW52YWxpZCBzaF9uYW1lIGNhc2UuCituYXRpdmUgYnVpbGQgZmFpbGVkIGFzIGZvbGxvd2luZyBvbiBGZWRvcmExODoKK25tLmM6IEluIGZ1bmN0aW9uICdzaG93X3N5bWJvbHNfc3lzdic6CitubS5jOjc1NjoyNzogZXJyb3I6IGFyZ3VtZW50IHRvICdzaXplb2YnIGluICdzbnByaW50ZicgY2FsbCBpcyB0aGUgc2FtZSBleHByZXNzaW9uIGFzIHRoZSBkZXN0aW5hdGlvbjsgZGlkIHlvdSBtZWFuIHRvIHByb3ZpZGUgYW4gZXhwbGljaXQgbGVuZ3RoPyBbLVdlcnJvcj1zaXplb2YtcG9pbnRlci1tZW1hY2Nlc3NdCisgICAgc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKworVGhlIG9yaWdpbmFsIGNvbW1pdCBpcyBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvY2dpdC9lbGZ1dGlscy5naXQvY29tbWl0L3NyYy9ubS5jP2lkPTU3YmQ2NmNhYmY2ZTZiOWVjZjYyMmNkYmYzNTA4MDQ4OTdhOGRmNTgKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CisKKy0tLSBlbGZ1dGlscy0wLjE0OC9zcmMvbm0uYy5vcmcJMjAxMy0wMy0xMSAyMjozNjoxMS4wMDAwMDAwMDAgLTA1MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvbm0uYwkyMDEzLTAzLTExIDIyOjQ2OjA5LjAwMDAwMDAwMCAtMDUwMAorQEAgLTc1Miw4ICs3NTIsOSBAQAorIAkJCSAgICAgICBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKS0+c2hfbmFtZSk7CisgICAgICAgaWYgKHVubGlrZWx5IChuYW1lID09IE5VTEwpKQorIAl7CistCSAgbmFtZSA9IGFsbG9jYSAoc2l6ZW9mICJbaW52YWxpZCBzaF9uYW1lIDB4MTIzNDU2NzhdIik7CistCSAgc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKysJICBjb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YgIltpbnZhbGlkIHNoX25hbWUgMHgxMjM0NTY3OF0iOworKwkgIG5hbWUgPSBhbGxvY2EgKGJ1ZnN6KTsKKysJICBzbnByaW50ZiAobmFtZSwgYnVmc3osICJbaW52YWxpZCBzaF9uYW1lICUjIiBQUkl4MzIgIl0iLAorIAkJICAgIGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pLT5zaF9uYW1lKTsKKyAJfQorICAgICAgIHNjbm5hbWVzW2VsZl9uZHhzY24gKHNjbildID0gbmFtZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE5MTJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCkBAIC0wLDAgKzEsNzU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9iYWNrZW5kcy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2JhY2tlbmRzL0NoYW5nZUxvZwkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAJKiBwcGNfYXR0cnMuYyAocHBjX2NoZWNrX29iamVjdF9hdHRyaWJ1dGUpOiBIYW5kbGUgdGFnCisgCUdOVV9Qb3dlcl9BQklfU3RydWN0X1JldHVybi4KKyAKKysyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChsaWJlYmxfJS5zbyk6IFVzZSAkKExEX0FTX05FRURFRCkuCisrCisgMjAwOC0xMC0wNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogaTM4Nl9yZWxvYy5kZWY6IEZpeCBlbnRyaWVzIGZvciBUTFNfR09UREVTQywgVExTX0RFU0NfQ0FMTCwgYW5kCitAQCAtNDMzLDYgKzQzNywxMSBAQAorIAkqIHNwYXJjX2luaXQuYzogTGlrZXdpc2UuCisgCSogeDg2XzY0X2luaXQuYzogTGlrZXdpc2UuCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoTERfQVNfTkVFREVEKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShsaWJlYmxfJS5zbyBydWxlKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XbCwtLWFzLW5lZWRlZC4KKysKKyAyMDA1LTExLTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHBwYzY0X3JlbG9jLmRlZjogUkVMMzAgLT4gQUREUjMwLgorQEAgLTQ1NSw2ICs0NjQsOSBAQAorIAkqIE1ha2VmaWxlLmFtICh1bmluc3RhbGwpOiBEb24ndCB0cnkgdG8gcmVtb3ZlICQocGtnaW5jbHVkZWRpcikuCisgCShDTEVBTkZJTEVTKTogQWRkIGxpYmVibF8kKG0pLnNvLgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIAkqIHBwY19yZWxvYy5kZWY6IFVwZGF0ZSBiaXRzIHBlciBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+LgorIAkqIHBwYzY0X3JlbG9jLmRlZjogTGlrZXdpc2UuCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDMsNyArMTAzLDcgQEAKKyAJJChMSU5LKSAtc2hhcmVkIC1vICQoQDoubWFwPS5zbykgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkPCAkKGNwdV8kKikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkKEA6LnNvPS5tYXApIFwKKy0JCS1XbCwteixkZWZzIC1XbCwtLWFzLW5lZWRlZCAkKGxpYmVsZikgJChsaWJkdykgJChsaWJtdWRmbGFwKQorKwkJLVdsLC16LGRlZnMgJChMRF9BU19ORUVERUQpICQobGliZWxmKSAkKGxpYmR3KSAkKGxpYm11ZGZsYXApCisgCSQodGV4dHJlbF9jaGVjaykKKyAKKyBsaWJlYmxfaTM4Ni5zbzogJChjcHVfaTM4NikKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL0NoYW5nZUxvZwkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTIsNiArMiwxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoTE9DQUxFRElSLCBEQVRBRElSTkFNRSk6IFJlbW92ZWQuCisgCisrMjAwOS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IFVzZSBzZWQgYW5kIGV4cHIgaW5zdGVhZCBvZiBtb2Rlcm4gYmFzaCBleHRlbnNpb25zLgorKworIDIwMDktMDktMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIGZvciBtb3JlIG1vZGVybiBhdXRvY29uZi4KK0BAIC0xMCw2ICsxNCwxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoemlwX0xJQlMpOiBDaGVjayBmb3IgbGlibHptYSB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciAtZmdudTg5LWlubGluZTsgYWRkIGl0IHRvIFdFWFRSQSBpZiBpdCB3b3Jrcy4KKysKKyAyMDA5LTA0LTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoZXVfdmVyc2lvbik6IFJvdW5kIGRvd24gaGVyZSwgbm90IGluIHZlcnNpb24uaCBtYWNyb3MuCitAQCAtMjEsNiArMjksOCBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgX19idWlsdGluX3BvcGNvdW50LgorKworIAkqIGNvbmZpZ3VyZS5hYyAoemxpYiBjaGVjayk6IENoZWNrIGZvciBnemRpcmVjdCwgbmVlZCB6bGliID49IDEuMi4yLjMuCisgCisgCSogY29uZmlndXJlLmFjIChfX3RocmVhZCBjaGVjayk6IFVzZSBBQ19MSU5LX0lGRUxTRSwgaW4gY2FzZSBvZgorQEAgLTEwMSw2ICsxMTEsMTAgQEAKKyAJKiBjb25maWd1cmUuYWM6IEFkZCBkdW1teSBhdXRvbWFrZSBjb25kaXRpb25hbCB0byBnZXQgZGVwZW5kZW5jaWVzCisgCWZvciBub24tZ2VuZXJpYyBsaW5rZXIgcmlnaHQuICBTZWUgc3JjL01ha2VmaWxlLmFtLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbi4KKysKKyAyMDA1LTExLTE4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKTogTmV3IHZhcmlhYmxlLgorQEAgLTE0OCw2ICsxNjIsMTcgQEAKKyAJKiBNYWtlZmlsZS5hbSAoYWxsX1NVQkRJUlMpOiBBZGQgbGliZHdmbC4KKyAJKiBjb25maWd1cmUuYWM6IFdyaXRlIGxpYmR3ZmwvTWFrZWZpbGUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWMgKFdFWFRSQSk6IENoZWNrIGZvciAtV2V4dHJhIGFuZCBzZXQgdGhpcyBzdWJzdGl0dXRpb24uCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3RydWN0IHN0YXQgc3RfP3RpbSBtZW1iZXJzLgorKwkqIHNyYy9zdHJpcC5jIChwcm9jZXNzX2ZpbGUpOiBVc2Ugc3RfP3RpbWUgaWYgc3RfP3RpbSBhcmUgbm90IHRoZXJlLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIGZ1dGltZXMgZnVuY3Rpb24uCisrCSogc3JjL3N0cmlwLmMgKGhhbmRsZV9lbGYpIFshIEhBVkVfRlVUSU1FU106IFVzZSB1dGltZXMgaW5zdGVhZC4KKysJKGhhbmRsZV9hcikgWyEgSEFWRV9GVVRJTUVTXTogTGlrZXdpc2UuCisrCisgMjAwNS0wNS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgW0FIX0JPVFRPTV0gKElOVERFQ0wsIF9JTlRERUNMKTogTmV3IG1hY3Jvcy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWcvZXUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZy9ldS5hbQkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy9ldS5hbQkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTI1LDExICsyNSwxNCBAQAorICMjIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uCisgIyMKKyAKKytXRVhUUkEgPSBAV0VYVFJBQAorK0xEX0FTX05FRURFRCA9IEBMRF9BU19ORUVERURACisrCisgREVGUyA9IC1EX0dOVV9TT1VSQ0UgLURIQVZFX0NPTkZJR19IIC1ETE9DQUxFRElSPSciJHtsb2NhbGVkaXJ9IicKKyBJTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2RpcikvbGliIC1JLi4KKyBBTV9DRkxBR1MgPSAtc3RkPWdudTk5IC1XYWxsIC1Xc2hhZG93IFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19XZXJyb3IpLCwtV2Vycm9yKSBcCistCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkIC1XZXh0cmEpIFwKKysJICAgICQoaWYgJCgkKCpGKV9ub19XdW51c2VkKSwsLVd1bnVzZWQgJChXRVhUUkEpKSBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Zvcm1hdCksLVduby1mb3JtYXQsLVdmb3JtYXQ9MikgXAorIAkgICAgJCgkKCpGKV9DRkxBR1MpCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlnLmguaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZy5oLmluCTIwMTAtMDYtMjggMTk6MDc6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlnLmguaW4JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsOCBAQAorIC8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworIAorKy8qIEhhdmUgX19idWlsdGluX3BvcGNvdW50LiAqLworKyN1bmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysKKyAvKiAkbGliZGlyIHN1YmRpcmVjdG9yeSBjb250YWluaW5nIGxpYmVibCBtb2R1bGVzLiAqLworICN1bmRlZiBMSUJFQkxfU1VCRElSCisgCitAQCAtNTUsNCArNTgsNyBAQAorIC8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyAjdW5kZWYgX0xBUkdFX0ZJTEVTCisgCisrLyogU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0LiAqLworKyN1bmRlZiBfX3RocmVhZAorKworICNpbmNsdWRlIDxldS1jb25maWcuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTA2LTI4IDE5OjA3OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTczLDYgKzczLDU0IEBACisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfYzk5IiAhPSB4eWVzXSwKKyAgICAgICBBQ19NU0dfRVJST1IoW2djYyB3aXRoIEM5OSBzdXBwb3J0IHJlcXVpcmVkXSkpCisgCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtV2V4dHJhIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY193ZXh0cmEsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtV2V4dHJhIgorK0FDX0NPTVBJTEVfSUZFTFNFKFt2b2lkIGZvbyAodm9pZCkgeyB9XSwKKysJCSAgYWNfY3ZfY2Nfd2V4dHJhPXllcywgYWNfY3ZfY2Nfd2V4dHJhPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBQ19TVUJTVChXRVhUUkEpCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2Nfd2V4dHJhIiA9IHh5ZXNdLCBbV0VYVFJBPS1XZXh0cmFdLCBbV0VYVFJBPS1XXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1mZ251ODktaW5saW5lIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY19nbnU4OV9pbmxpbmUsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtZmdudTg5LWlubGluZSAtV2Vycm9yIgorK0FDX0NPTVBJTEVfSUZFTFNFKFsKKyt2b2lkIGZvbyAodm9pZCkKKyt7CisrICBpbmxpbmUgdm9pZCBiYXIgKHZvaWQpIHt9CisrICBiYXIgKCk7CisrfQorK2V4dGVybiBpbmxpbmUgdm9pZCBiYXogKHZvaWQpIHt9CisrXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lPXllcywgYWNfY3ZfY2NfZ251ODlfaW5saW5lPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY19nbnU4OV9pbmxpbmUiID0geHllc10sCisrICAgICAgW1dFWFRSQT0iJHtXRVhUUkE6KyRXRVhUUkEgfS1mZ251ODktaW5saW5lIl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uXSwKKysJICAgICAgIGFjX2N2X2FzX25lZWRlZCwgW2RubAorK2NhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKytpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQorK0VPRgorK2lmIEFDX1RSWV9DT01NQU5EKFske0NDLWNjfSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUworKwkJCSAgICAtZlBJQyAtc2hhcmVkIC1vIGNvbmZ0ZXN0LnNvIGNvbmZ0ZXN0LmMKKysJCQkgICAgLVdsLC0tYXMtbmVlZGVkIDE+JkFTX01FU1NBR0VfTE9HX0ZEXSkKKyt0aGVuCisrICBhY19jdl9hc19uZWVkZWQ9eWVzCisrZWxzZQorKyAgYWNfY3ZfYXNfbmVlZGVkPW5vCisrZmkKKytybSAtZiBjb25mdGVzdCpdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2FzX25lZWRlZCIgPSB4eWVzXSwKKysgICAgICBbTERfQVNfTkVFREVEPS1XbCwtLWFzLW5lZWRlZF0sIFtMRF9BU19ORUVERUQ9XSkKKytBQ19TVUJTVChMRF9BU19ORUVERUQpCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX2J1aWx0aW5fcG9wY291bnRdLCBhY19jdl9wb3Bjb3VudCwgW2RubAorK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbZXhpdCAoX19idWlsdGluX3BvcGNvdW50ICgxMjcpKTtdXSldLAorKwkgICAgICAgYWNfY3ZfcG9wY291bnQ9eWVzLCBhY19jdl9wb3Bjb3VudD1ubyldKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X3BvcGNvdW50IiA9IHh5ZXNdLAorKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfQlVJTFRJTl9QT1BDT1VOVF0sIFsxXSwgW0hhdmUgX19idWlsdGluX3BvcGNvdW50Ll0pXSkKKysKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIF9fdGhyZWFkIHN1cHBvcnRdLCBhY19jdl90bHMsIFtkbmwKKyAjIFVzZSB0aGUgc2FtZSBmbGFncyB0aGF0IHdlIHVzZSBmb3Igb3VyIERTT3MsIHNvIHRoZSB0ZXN0IGlzIHJlcHJlc2VudGF0aXZlLgorICMgU29tZSBvbGQgY29tcGlsZXIvbGlua2VyL2xpYmMgY29tYmluYXRpb25zIGZhaWwgc29tZSB3YXlzIGFuZCBub3Qgb3RoZXJzLgorQEAgLTg4LDcgKzEzNiwxMCBAQAorIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKKyBBU19JRihbdGVzdCAieCRhY19jdl90bHMiICE9IHh5ZXNdLAorLSAgICAgIEFDX01TR19FUlJPUihbX190aHJlYWQgc3VwcG9ydCByZXF1aXJlZF0pKQorKyAgICAgIFtBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAorKwkgICAgIFtBQ19NU0dfRVJST1IoWy0tZW5hYmxlLXRocmVhZC1zYWZldHkgcmVxdWlyZXMgX190aHJlYWQgc3VwcG9ydF0pXSwKKysJICAgICBbQUNfREVGSU5FKFtfX3RocmVhZF0sIFsvKiBlbXB0eTogbm8gbXVsdGktdGhyZWFkIHN1cHBvcnQgKi9dLAorKwkJCVtTdHViYmVkIG91dCBpZiBtaXNzaW5nIGNvbXBpbGVyIHN1cHBvcnQuXSldKV0pCisgCisgZG5sIFRoaXMgdGVzdCBtdXN0IGNvbWUgYXMgZWFybHkgYXMgcG9zc2libGUgYWZ0ZXIgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24KKyBkbmwgdGVzdHMsIGJlY2F1c2UgdGhlIGNob2ljZSBvZiB0aGUgZmlsZSBtb2RlbCBjYW4gKGluIHByaW5jaXBsZSkgYWZmZWN0CitAQCAtMjUxLDcgKzMwMiw3IEBACisgCisgIyAxLjIzNDx3aGF0ZXZlcj4gLT4gMTIzNDx3aGF0ZXZlcj4KKyBjYXNlICIkUEFDS0FHRV9WRVJTSU9OIiBpbgorLVtbMC05XV0uKikgZXVfdmVyc2lvbj0iJHtQQUNLQUdFX1ZFUlNJT04vLi99IiA7OworK1tbMC05XV0uKikgZXVfdmVyc2lvbj1gZWNobyAiJFBBQ0tBR0VfVkVSU0lPTiIgfCBzZWQgJ3NAXC5AQCdgIDs7CisgKikgICAgIAkgICBBQ19NU0dfRVJST1IoW2NvbmZ1c2VkIGJ5IHZlcnNpb24gbnVtYmVyICckUEFDS0FHRV9WRVJTSU9OJ10pIDs7CisgZXNhYworIGNhc2UgIiRldV92ZXJzaW9uIiBpbgorQEAgLTI4MCw2ICszMzEsNiBAQAorIGVzYWMKKyAKKyAjIFJvdW5kIHVwIHRvIHRoZSBuZXh0IHJlbGVhc2UgQVBJICh4LnkpIHZlcnNpb24uCistW2V1X3ZlcnNpb249JFsoJGV1X3ZlcnNpb24gKyA5OTkpIC8gMTAwMF1dCisrZXVfdmVyc2lvbj1gZXhwciBcKCAkZXVfdmVyc2lvbiArIDk5OSBcKSAvIDEwMDBgCisgCisgQUNfT1VUUFVUCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliL0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNCw2ICsxNCw5IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBldS1jb25maWcuaCBbISBIQVZFX0JVSUxUSU5fUE9QQ09VTlRdCisrCShfX2J1aWx0aW5fcG9wY291bnQpOiBOZXcgaW5saW5lIGZ1bmN0aW9uLgorKworIAkqIGV1LWNvbmZpZy5oOiBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24uCisgCisgMjAwOS0wMS0xNyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtNzAsNiArNzMsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZXVfYV9TT1VSQ0VTKTogQWRkIGl0LgorIAkqIHN5c3RlbS5oOiBEZWNsYXJlIGNyYzMyX2ZpbGUuCisgCisrMjAwNS0wMi0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA0LTMwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbTogVXNlIC1mZnVuY3Rpb24tc2VjdGlvbnMgZm9yIHhtYWxsb2MuYy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWIvZXUtY29uZmlnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9ldS1jb25maWcuaAkyMDA5LTA4LTEyIDE0OjIzOjIyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9ldS1jb25maWcuaAkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTE4Miw2ICsxODIsMTcgQEAKKyAvKiBUaGlzIG1hY3JvIGlzIHVzZWQgYnkgdGhlIHRlc3RzIGNvbmRpdGlvbmFsaXplIGZvciBzdGFuZGFsb25lIGJ1aWxkaW5nLiAgKi8KKyAjZGVmaW5lIEVMRlVUSUxTX0hFQURFUihuYW1lKSA8bGliIyNuYW1lLmg+CisgCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysjIGRlZmluZSBfX2J1aWx0aW5fcG9wY291bnQgaGFrbWVtX3BvcGNvdW50Cisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisraGFrbWVtX3BvcGNvdW50ICh1bnNpZ25lZCBpbnQgeCkKKyt7CisrICAvKiBIQUtNRU0gMTY5ICovCisrICB1bnNpZ25lZCBpbnQgbiA9IHggLSAoKHggPj4gMSkgJiAwMzMzMzMzMzMzMzMpIC0gKCh4ID4+IDIpICYgMDExMTExMTExMTExKTsKKysgIHJldHVybiAoKG4gKyAobiA+PiAzKSkgJiAwMzA3MDcwNzA3MDcpICUgNjM7CisrfQorKyNlbmRpZgkvKiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQgKi8KKysKKyAKKyAjaWZkZWYgU0hBUkVECisgIyBkZWZpbmUgT0xEX1ZFUlNJT04obmFtZSwgdmVyc2lvbikgXAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmFzbS9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJhc20vQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjcsNiArNjcsMTEgQEAKKyAJKiBhc21fZXJyb3IuYzogQWRkIG5ldyBlcnJvciBBU01fRV9JT0VSUk9SLgorIAkqIGxpYmFzbVAuaDogQWRkIEFTTV9FX0lPRVJST1IgZGVmaW5pdGlvbi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtOSw2ICs5LDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGkzODZfZGlzYXNtLmMgKGkzODZfZGlzYXNtKTogQWRkIGFib3J0IGFmdGVyIGFzc2VydC1jb25zdGFudCBmb3Igb2xkCisrCWNvbXBpbGVycyB0aGF0IGRvbid0IHJlYWxpemUgaXQncyBub3JldHVybi4KKysKKyAJKiBNYWtlZmlsZS5hbSAoaTM4Nl9wYXJzZV9DRkxBR1MpOiBVc2UgcXVvdGVzIGFyb3VuZCBjb21tYW5kCisgCXN1YnN0aXR1dGlvbiB0aGF0IGNhbiBwcm9kdWNlIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAKK0BAIC0zMzgsNiArMzQxLDExIEBACisgCSogZGVmcy9pMzg2LmRvYzogTmV3IGZpbGUuCisgCSogZGVmcy94ODZfNjQ6IE5ldyBmaWxlLgorIAorKzIwMDUtMDQtMDQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluc3RlYWQgb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvaTM4Nl9kaXNhc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliY3B1L2kzODZfZGlzYXNtLmMJMjAwOS0wMS0wOCAyMDo1NjozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvaTM4Nl9kaXNhc20uYwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTc5MSw2ICs3OTEsNyBAQAorIAorIAkJCWRlZmF1bHQ6CisgCQkJICBhc3NlcnQgKCEgIklOVkFMSUQgbm90IGhhbmRsZWQiKTsKKysJCQkgIGFib3J0ICgpOworIAkJCX0KKyAJCSAgICB9CisgCQkgIGVsc2UKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkdy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTI3Niw2ICsyNzYsMTAgQEAKKyAKKyAJKiBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZS5jOiBJbnRlZ3JhdGUgRFdfQVRfc3BlY2lmaWNhdGlvbiB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsaWJkdy5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZHdhcmZfZ2V0c2NvcGV2YXIuYzogVXNlIGR3YXJmX2RpZW5hbWUuCitAQCAtMTA0NCw2ICsxMDQ4LDExIEBACisgCisgMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIGR3YXJmX2Zvcm1yZWZfZGllLmMgKGR3YXJmX2Zvcm1yZWZfZGllKTogQWRkIENVIGhlYWRlciBvZmZzZXQgdG8KKyAJZm9ybXJlZiBvZmZzZXQuCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvbGliZHcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHcvbGliZHcuaAkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L2xpYmR3LmgJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC04NDIsNyArODQyLDcgQEAKKyAKKyAKKyAvKiBJbmxpbmUgb3B0aW1pemF0aW9ucy4gICovCistI2lmZGVmIF9fT1BUSU1JWkVfXworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAvKiBSZXR1cm4gYXR0cmlidXRlIGNvZGUgb2YgZ2l2ZW4gYXR0cmlidXRlLiAgKi8KKyBfX2xpYmR3X2V4dGVybl9pbmxpbmUgdW5zaWduZWQgaW50CisgZHdhcmZfd2hhdGF0dHIgKER3YXJmX0F0dHJpYnV0ZSAqYXR0cikKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkd2ZsL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHdmbC9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkd2ZsL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEyNjUsNiArMTI2NSwxMSBAQAorIAorIDIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBNYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGQgbG9jMmMuYy4KKyAKKyAJKiB0ZXN0Mi5jIChtYWluKTogQ2hlY2sgc3NjYW5mIHJlc3VsdCB0byBxdWlldCB3YXJuaW5nLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVibC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVibC9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlYmwvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjI0LDYgKzYyNCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChsaWJlYmxfKl9zb19TT1VSQ0VTKTogU2V0IHRvICQoKl9TUkNTKSBzbyBkZXBlbmRlbmN5CisgCXRyYWNraW5nIHdvcmtzIHJpZ2h0LgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGliZWJsX3g4Nl82NC5tYXA6IEFkZCB4ODZfNjRfY29yZV9ub3RlLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9DaGFuZ2VMb2cJMjAxMC0wNi0xNCAyMToxNzoyMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjU3LDYgKzY1NywxMSBAQAorIAorIAkqIGVsZi5oOiBVcGRhdGUgZnJvbSBnbGliYy4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZWxmX2JlZ2luLmMgKHJlYWRfZmlsZSkgW19NVURGTEFQXTogRG9uJ3QgdXNlIG1tYXAgZm9yIG5vdy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvY29tbW9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9jb21tb24uaAkyMDA5LTAxLTA4IDIwOjU2OjM2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9jb21tb24uaAkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTE2MCw3ICsxNjAsNyBAQAorICAgKFZhcikgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitAQCAtMTY5LDcgKzE2OSw3IEBACisgICAoRHN0KSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9hZGRyMmxpbmUuYwkyMDEwLTA1LTI4IDE0OjM4OjMwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYwkyMDEwLTA3LTAzIDEzOjA1OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTQ0NywxMCArNDQ3LDEwIEBACisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTY1LDggKzE2NSwxNiBAQAorIAkqIHJlYWRlbGYuYyAoYXR0cl9jYWxsYmFjayk6IFVzZSBwcmludF9ibG9jayBvbmx5IHdoZW4gd2UgZG9uJ3QgdXNlCisgCXByaW50X29wcy4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGxkLmg6IERpc2FibGUgZXh0ZXJuIGlubGluZXMgZm9yIEdDQyA0LjIuCisrCisgMjAwOS0wOC0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBzdHJpbmdzLmMgKHJlYWRfYmxvY2spOiBDb25kaXRpb25hbGl6ZSBwb3NpeF9mYWR2aXNlIHVzZQorKwlvbiBbUE9TSVhfRkFEVl9TRVFVRU5USUFMXS4KKysJRnJvbSBQZXRyIFNhbGluZ2VyIDxQZXRyLlNhbGluZ2VyQHNlem5hbS5jej4uCisrCisgCSogYXIuYyAoZG9fb3Blcl9leHRyYWN0KTogVXNlIHBhdGhjb25mIGluc3RlYWQgb2Ygc3RhdGZzLgorIAorIDIwMDktMDgtMDEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTMzMCw2ICszMzgsOCBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfZnJhbWVfc2VjdGlvbik6IFVzZSB0IGluc3RlYWQgb2YgaiBmb3JtYXRzCisgCWZvciBwdHJkaWZmX3QgT0ZGU0VULgorIAorKwkqIGFkZHIybGluZS5jIChoYW5kbGVfYWRkcmVzcyk6IFVzZSAlYSBpbnN0ZWFkIG9mICVtIGZvciBjb21wYXRpYmlsaXR5LgorKworIDIwMDktMDEtMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfcHJvZ3JhbV9oZWFkZXIpOiBGaXggdHlwbyBpbiAuZWhfZnJhbWVfaGRyIHNlY3Rpb24KK0BAIC01MTMsNiArNTIzLDExIEBACisgCXRoYXQgbWF0Y2hlcyBpdHMgUFRfTE9BRCdzIHBfZmxhZ3MgJn4gUEZfVy4gIE9uIHNwYXJjLCBQRl9YIHJlYWxseQorIAlpcyB2YWxpZCBpbiBSRUxSTy4KKyAKKysyMDA4LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoZHVtcF9hcmNoaXZlX2luZGV4KTogVHdlYWsgcG9ydGFiaWxpdHkgaGFjaworKwl0byBtYXRjaCBbX19HTlVDX18gPCA0XSB0b28uCisrCisgMjAwOC0wMi0yOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2F0dHJpYnV0ZXMpOiBBZGQgYSBjYXN0LgorQEAgLTc2NCw2ICs3NzksOCBAQAorIAorIAkqIHJlYWRlbGYuYyAoaGV4X2R1bXApOiBGaXggcm91bmRpbmcgZXJyb3IgaW4gd2hpdGVzcGFjZSBjYWxjdWxhdGlvbi4KKyAKKysJKiBNYWtlZmlsZS5hbSAocmVhZGVsZl9ub19XZXJyb3IpOiBOZXcgdmFyaWFibGUuCisrCisgMjAwNy0xMC0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBtYWtlLWRlYnVnLWFyY2hpdmUuaW46IE5ldyBmaWxlLgorQEAgLTEyMDMsNiArMTIyMCwxMCBAQAorIAkqIGVsZmxpbnQuYyAodmFsaWRfZV9tYWNoaW5lKTogQWRkIEVNX0FMUEhBLgorIAlSZXBvcnRlZCBieSBDaHJpc3RpYW4gQWljaGluZ2VyIDxHcmVlazBAZ214Lm5ldD4uCisgCisrCSogc3RyaW5ncy5jIChtYXBfZmlsZSk6IERlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgdG8KKysJTUFEVl9TRVFVRU5USUFMIGlmIHVuZGVmaW5lZC4gIAlEb24ndCBjYWxsIHBvc2l4X21hZHZpc2UKKysJaWYgbmVpdGhlciBpcyBkZWZpbmVkLgorKworIDIwMDYtMDgtMDggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfZHluYW1pYyk6IERvbid0IHJlcXVpcmUgRFRfSEFTSCBmb3IgRFRfU1lNVEFCLgorQEAgLTEyNzksNiArMTMwMCwxMCBAQAorIAkqIE1ha2VmaWxlLmFtOiBBZGQgaGFja3MgdG8gY3JlYXRlIGRlcGVuZGVuY3kgZmlsZXMgZm9yIG5vbi1nZW5lcmljCisgCWxpbmtlci4KKyAKKysyMDA2LTA0LTA1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHN0cmluZ3MuYyAoTUFQX1BPUFVMQVRFKTogRGVmaW5lIHRvIDAgaWYgdW5kZWZpbmVkLgorKworIDIwMDYtMDYtMTIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxkZ2VuZXJpYy5jIChsZF9nZW5lcmljX2dlbmVyYXRlX3NlY3Rpb25zKTogRG9uJ3QgY3JlYXRlIC5pbnRlcnAKK0BAIC0xNjI3LDYgKzE2NTIsMTEgQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xvY19zZWN0aW9uKTogRml4IGluZGVudGF0aW9uIGZvciBsYXJnZXIKKyAJYWRkcmVzcyBzaXplLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xpbmVfc2VjdGlvbik6IFByaW50IHNlY3Rpb24gb2Zmc2V0IG9mIGVhY2gKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZmluZHRleHRyZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2ZpbmR0ZXh0cmVsLmMJMjAwOS0wMi0xMSAwMToxMjo1OS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvZmluZHRleHRyZWwuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTQ5MCw3ICs0OTAsMTEgQEAKKyAKKyAKKyBzdGF0aWMgdm9pZAorLWNoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzW25zZWdtZW50c10sCisrY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbCisrI2lmIF9fR05VQ19fID49IDQKKysJCQkJCQkgICAgICBuc2VnbWVudHMKKysjZW5kaWYKKysJICAgXSwKKyAJICAgR0VsZl9BZGRyIGFkZHIsIEVsZiAqZWxmLCBFbGZfU2NuICpzeW1zY24sIER3YXJmICpkdywKKyAJICAgY29uc3QgY2hhciAqZm5hbWUsIGJvb2wgbW9yZV90aGFuX29uZSwgdm9pZCAqKmtub3duc3JjcykKKyB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZC5oCTIwMDktMDYtMTMgMjI6Mzk6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkLmgJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTIyLDYgKzExMjIsNyBAQAorIAorIC8qIENoZWNrZWQgd2hldGhlciB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBmcm9tIGEgRFNPLiAgKi8KKyBleHRlcm4gYm9vbCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpOworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KKyBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorICNlbmRpZgorQEAgLTExMzksNSArMTE0MCw2IEBACisgCisgICByZXR1cm4gc3ltLT5kZWZpbmVkICYmIHN5bS0+aW5fZHNvOworIH0KKysjZW5kaWYJLyogT3B0aW1pemluZyBhbmQgbm90IEdDQyA0LjIuICAqLworIAorICNlbmRpZgkvKiBsZC5oICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC05OSw2ICs5OSw5IEBACisgIyBYWFggV2hpbGUgdGhlIGZpbGUgaXMgbm90IGZpbmlzaGVkLCBkb24ndCB3YXJuIGFib3V0IHRoaXMKKyBsZGdlbmVyaWNfbm9fV3VudXNlZCA9IHllcworIAorKyMgQnVnZ3kgb2xkIGNvbXBpbGVycy4KKytyZWFkZWxmX25vX1dlcnJvciA9IHllcworKworIHJlYWRlbGZfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVibCkgJChsaWJlbGYpICQobGliZXUpICQobGlibXVkZmxhcCkgLWxkbAorIG5tX0xEQUREID0gJChsaWJkdykgJChsaWJlYmwpICQobGliZWxmKSAkKGxpYmV1KSAkKGxpYm11ZGZsYXApIC1sZGwKKyBzaXplX0xEQUREID0gJChsaWJlbGYpICQobGliZXUpICQobGlibXVkZmxhcCkKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9yZWFkZWxmLmMJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNzg0NSw3ICs3ODQ1LDcgQEAKKyAJICBpZiAodW5saWtlbHkgKGVsZl9yYW5kIChlbGYsIGFzX29mZikgPT0gMCkKKyAJICAgICAgfHwgdW5saWtlbHkgKChzdWJlbGYgPSBlbGZfYmVnaW4gKC0xLCBFTEZfQ19SRUFEX01NQVAsIGVsZikpCisgCQkJICAgPT0gTlVMTCkpCistI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpCisrI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpIHx8IF9fR05VQ19fIDwgNAorIAkgICAgd2hpbGUgKDEpCisgI2VuZGlmCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmluZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3N0cmluZ3MuYwkyMDA5LTAyLTExIDAxOjEyOjU5LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpbmdzLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC01MSw2ICs1MSwxMCBAQAorIAorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKysjaWZuZGVmIE1BUF9QT1BVTEFURQorKyMgZGVmaW5lIE1BUF9QT1BVTEFURSAwCisrI2VuZGlmCisrCisgCisgLyogUHJvdG90eXBlcyBvZiBsb2NhbCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBpbnQgcmVhZF9mZCAoaW50IGZkLCBjb25zdCBjaGFyICpmbmFtZSwgb2ZmNjRfdCBmZGxlbik7CitAQCAtNDkxLDggKzQ5NSwxMyBAQAorIAkJICAgIGZkLCBzdGFydF9vZmYpOworICAgICAgIGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkKKyAJeworKyNpZiAhZGVmaW5lZCBQT1NJWF9NQURWX1NFUVVFTlRJQUwgJiYgZGVmaW5lZCBNQURWX1NFUVVFTlRJQUwKKysjIGRlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgTUFEVl9TRVFVRU5USUFMCisrI2VuZGlmCisrI2lmZGVmIFBPU0lYX01BRFZfU0VRVUVOVElBTAorIAkgIC8qIFdlIHdpbGwgZ28gdGhyb3VnaCB0aGUgbWFwcGluZyBzZXF1ZW50aWFsbHkuICAqLworIAkgICh2b2lkKSBwb3NpeF9tYWR2aXNlIChtZW0sIG1hcF9zaXplLCBQT1NJWF9NQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorIAkgIGJyZWFrOworIAl9CisgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFTk9NRU0pCitAQCAtNTg2LDkgKzU5NSwxMSBAQAorICAgICAgIGVsZm1hcF9vZmYgPSBmcm9tICYgfihwcyAtIDEpOworICAgICAgIGVsZm1hcF9iYXNlID0gZWxmbWFwID0gbWFwX2ZpbGUgKGZkLCBlbGZtYXBfb2ZmLCBmZGxlbiwgJmVsZm1hcF9zaXplKTsKKyAKKysjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCisgICAgICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCisgCS8qIExldCB0aGUga2VybmVsIGtub3cgd2UgYXJlIGdvaW5nIHRvIHJlYWQgZXZlcnl0aGluZyBpbiBzZXF1ZW5jZS4gICovCisgCSh2b2lkKSBwb3NpeF9mYWR2aXNlIChmZCwgMCwgMCwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9zdHJpcC5jCTIwMTAtMDEtMTUgMDk6MDU6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC01Myw2ICs1MywxMiBAQAorICNpbmNsdWRlIDxsaWJlYmwuaD4KKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmZGVmIEhBVkVfRlVUSU1FUworKyMgZGVmaW5lIEZVVElNRVMoZmQsIGZuYW1lLCB0dnApIGZ1dGltZXMgKGZkLCB0dnApCisrI2Vsc2UKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSB1dGltZXMgKGZuYW1lLCB0dnApCisrI2VuZGlmCisrCisgCisgLyogTmFtZSBhbmQgdmVyc2lvbiBvZiBwcm9ncmFtLiAgKi8KKyBzdGF0aWMgdm9pZCBwcmludF92ZXJzaW9uIChGSUxFICpzdHJlYW0sIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSk7CitAQCAtMzAxLDggKzMwNywxOCBAQAorIAorICAgICAgIC8qIElmIHdlIGhhdmUgdG8gcHJlc2VydmUgdGhlIHRpbWVzdGFtcCwgd2UgbmVlZCBpdCBpbiB0aGUKKyAJIGZvcm1hdCB1dGltZXMoKSB1bmRlcnN0YW5kcy4gICovCisrI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQVRJTQorICAgICAgIFRJTUVTUEVDX1RPX1RJTUVWQUwgKCZ0dlswXSwgJnByZV9zdC5zdF9hdGltKTsKKysjZWxzZQorKyAgICAgIHR2WzBdLnR2X3NlYyA9IHByZV9zdC5zdF9hdGltZTsKKysgICAgICB0dlswXS50dl91c2VjID0gMDsKKysjZW5kaWYKKysjaWZkZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9NVElNCisgICAgICAgVElNRVNQRUNfVE9fVElNRVZBTCAoJnR2WzFdLCAmcHJlX3N0LnN0X210aW0pOworKyNlbHNlCisrICAgICAgdHZbMV0udHZfc2VjID0gcHJlX3N0LnN0X2F0aW1lOworKyAgICAgIHR2WzFdLnR2X3VzZWMgPSAwOworKyNlbmRpZgorICAgICB9CisgCisgICAvKiBPcGVuIHRoZSBmaWxlLiAgKi8KK0BAIC0xNzQ3LDcgKzE3NjMsNyBAQAorICAgLyogSWYgcmVxdWVzdGVkLCBwcmVzZXJ2ZSB0aGUgdGltZXN0YW1wLiAgKi8KKyAgIGlmICh0dnAgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIGlmIChmdXRpbWVzIChmZCwgdHZwKSAhPSAwKQorKyAgICAgIGlmIChGVVRJTUVTIChmZCwgb3V0cHV0X2ZuYW1lLCB0dnApICE9IDApCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIGdldHRleHQgKCJcCisgY2Fubm90IHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBkYXRlIG9mICclcyciKSwKK0BAIC0xODA0LDcgKzE4MjAsNyBAQAorIAorICAgaWYgKHR2cCAhPSBOVUxMKQorICAgICB7CistICAgICAgaWYgKHVubGlrZWx5IChmdXRpbWVzIChmZCwgdHZwKSAhPSAwKSkKKysgICAgICBpZiAodW5saWtlbHkgKEZVVElNRVMgKGZkLCBmbmFtZSwgdHZwKSAhPSAwKSkKKyAJeworIAkgIGVycm9yICgwLCBlcnJubywgZ2V0dGV4dCAoIlwKKyBjYW5ub3Qgc2V0IGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIGRhdGUgb2YgJyVzJyIpLCBmbmFtZSk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvdGVzdHMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTQsNiArMTU0LDggQEAKKyAKKyAyMDA4LTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGxpbmUyYWRkci5jIChtYWluKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorKworIAkqIHRlc3RmaWxlNDUuUy5iejI6IEFkZCB0ZXN0cyBmb3IgY2x0cSwgY3F0by4KKyAJKiB0ZXN0ZmlsZTQ1LmV4cGVjdC5iejI6IEFkanVzdC4KKyAKK0BAIC04NjIsNiArODY0LDExIEBACisgCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2guCisgCShFWFRSQV9ESVNUKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2ggYW5kIHRlc3RmaWxlMTguYnoyLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZ2V0LWZpbGVzLmMgKG1haW4pOiBVc2UgY29ycmVjdCBmb3JtYXQgc3BlY2lmaWVyLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9saW5lMmFkZHIuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTMyLDcgKzEzMiw3IEBACisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzOTg1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYKQEAgLTAsMCArMSwxNzA5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDc6MTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTY0OSwxMCArNjQ5LDUzIEBACisgCUlmIHNlY3Rpb24gY29udGVudCBoYXNuJ3QgYmVlbiByZWFkIHlldCwgZG8gaXQgYmVmb3JlIGxvb2tpbmcgZm9yIHRoZQorIAlibG9jayBzaXplLiAgSWYgbm8gc2VjdGlvbiBkYXRhIHByZXNlbnQsIGluZmVyIHNpemUgb2Ygc2VjdGlvbiBoZWFkZXIuCisgCisrMjAwNS0wNS0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogbGliZWxmUC5oIChJTlZBTElEX05EWCk6IERlZmluZS4KKysJKiBnZWxmX2dldGR5bi5jIChnZWxmX2dldGR5bik6IFVzZSBpdC4gIFJlbW92ZSBuZHggPCAwIHRlc3QgaWYgYW55LgorKwkqIGdlbGZfZ2V0bGliLmMgKGdlbGZfZ2V0bGliKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRtb3ZlLmMgKGdlbGZfZ2V0bW92ZSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0cmVsLmMgKGdlbGZfZ2V0cmVsKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRyZWxhLmMgKGdlbGZfZ2V0cmVsYSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltLmMgKGdlbGZfZ2V0c3ltKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRzeW1pbmZvLmMgKGdlbGZfZ2V0c3ltaW5mbyk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltc2huZHguYyAoZ2VsZl9nZXRzeW1zaG5keCk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0dmVyc3ltLmMgKGdlbGZfZ2V0dmVyc3ltKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfZHluLmMgKGdlbGZfdXBkYXRlX2R5bik6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX2xpYi5jIChnZWxmX3VwZGF0ZV9saWIpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9tb3ZlLmMgKGdlbGZfdXBkYXRlX21vdmUpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9yZWwuYyAoZ2VsZl91cGRhdGVfcmVsKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfcmVsYS5jIChnZWxmX3VwZGF0ZV9yZWxhKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfc3ltLmMgKGdlbGZfdXBkYXRlX3N5bSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bWluZm8uYyAoZ2VsZl91cGRhdGVfc3ltaW5mbyk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bXNobmR4LmMgKGdlbGZfdXBkYXRlX3N5bXNobmR4KTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfdmVyc3ltLmMgKGdlbGZfdXBkYXRlX3ZlcnN5bSk6IExpa2V3aXNlLgorKwkqIGVsZl9uZXdzY24uYyAoZWxmX25ld3Njbik6IENoZWNrIGZvciBvdmVyZmxvdy4KKysJKiBlbGYzMl91cGRhdGVmaWxlLmMgKF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVtbWFwKSk6IExpa2V3aXNlLgorKwkoX19lbGZ3MihMSUJFTEZCSVRTLHVwZGF0ZWZpbGUpKTogTGlrZXdpc2UuCisrCSogZWxmX2JlZ2luLmMgKGZpbGVfcmVhZF9lbGYpOiBMaWtld2lzZS4KKysJKiBlbGYzMl9uZXdwaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsbmV3cGhkcikpOiBMaWtld2lzZS4KKysJKiBlbGZfZ2V0YXJzeW0uYyAoZWxmX2dldGFyc3ltKTogTGlrZXdpc2UuCisrCSogZWxmMzJfZ2V0c2hkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHNoZHIpKTogTGlrZXdpc2UuCisgMjAwNS0wNS0xMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmLmg6IFVwZGF0ZSBhZ2Fpbi4KKyAKKysyMDA1LTA1LTE3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysJKiBlbGYzMl9nZXRwaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsZ2V0cGhkcikpOiBDaGVjayBpZiBwcm9ncmFtIGhlYWRlcgorKwl0YWJsZSBmaXRzIGludG8gb2JqZWN0J3MgYm91bmRzLgorKwkqIGVsZl9nZXRzaHN0cm5keC5jIChlbGZfZ2V0c2hzdHJuZHgpOiBBZGQgZWxmLT5zdGFydF9vZmZzZXQgdG8KKysJZWxmLT5tYXBfYWRkcmVzcy4gIENoZWNrIGlmIGZpcnN0IHNlY3Rpb24gaGVhZGVyIGZpdHMgaW50byBvYmplY3QncworKwlib3VuZHMuCisrCSogZWxmMzJfZ2V0c2hkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHNoZHIpKToKKysJQ2hlY2sgaWYgc2VjdGlvbiBoZWFkZXIgdGFibGUgZml0cyBpbnRvIG9iamVjdCdzIGJvdW5kcy4KKysJKiBlbGZfYmVnaW4uYyAoZ2V0X3NobnVtKTogRW5zdXJlIHNlY3Rpb24gaGVhZGVycyBmaXRzIGludG8KKysJb2JqZWN0J3MgYm91bmRzLgorKwkoZmlsZV9yZWFkX2VsZik6IE1ha2Ugc3VyZSBzY25jbnQgaXMgc21hbGwgZW5vdWdoIHRvIGFsbG9jYXRlIGJvdGgKKysJRWxmWFhfU2hkciBhbmQgRWxmX1NjbiBhcnJheS4gIE1ha2Ugc3VyZSBzZWN0aW9uIGFuZCBwcm9ncmFtIGhlYWRlcgorKwl0YWJsZXMgZml0IGludG8gb2JqZWN0J3MgYm91bmRzLiAgQXZvaWQgbWVtb3J5IGxlYWsgb24gZmFpbHVyZS4KKysKKyAyMDA1LTA1LTA5ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGYuaDogVXBkYXRlIGZyb20gZ2xpYmMuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHBoZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX2dldHBoZHIuYwkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRwaGRyLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTQsNiArMTE0LDE2IEBACisgCisgICAgICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTCkKKyAJeworKwkgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkgICAgIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfcGhvZmYgPj0gZWxmLT5tYXhpbXVtX3NpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChlbGYtPm1heGltdW1fc2l6ZSAtIGVoZHItPmVfcGhvZmYgPCBzaXplKSkKKysJICAgIHsKKysJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfUEhEUik7CisrCSAgICAgIGdvdG8gb3V0OworKwkgICAgfQorKworIAkgIC8qIEFsbCB0aGUgZGF0YSBpcyBhbHJlYWR5IG1hcHBlZC4gIFVzZSBpdC4gICovCisgCSAgdm9pZCAqZmlsZV9waGRyID0gKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MKKyAJCQkgICAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBlaGRyLT5lX3Bob2ZmKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfZ2V0c2hkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfZ2V0c2hkci5jCTIwMDktMDYtMTMgMjI6NDE6NDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHNoZHIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogUmV0dXJuIHNlY3Rpb24gaGVhZGVyLgorLSAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNSwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMTk5OC4KKyAKK0BAIC04MSw3ICs4MSw4IEBACisgICAgIGdvdG8gb3V0OworIAorICAgc2l6ZV90IHNobnVtOworLSAgaWYgKF9fZWxmX2dldHNoZHJudW1fcmRsb2NrIChlbGYsICZzaG51bSkgIT0gMCkKKysgIGlmIChfX2VsZl9nZXRzaGRybnVtX3JkbG9jayAoZWxmLCAmc2hudW0pICE9IDAKKysgICAgICB8fCBzaG51bSA+IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKSkKKyAgICAgZ290byBvdXQ7CisgICBzaXplX3Qgc2l6ZSA9IHNobnVtICogc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKTsKKyAKK0BAIC05OCw2ICs5OSwxNiBAQAorIAorICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTCkKKyAgICAgeworKyAgICAgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKyAgICAgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9zaG9mZiA+PSBlbGYtPm1heGltdW1fc2l6ZSkKKysJICB8fCB1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBlaGRyLT5lX3Nob2ZmIDwgc2l6ZSkpCisrCXsKKysJICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJICBnb3RvIGZyZWVfYW5kX291dDsKKysJfQorKworICAgICAgIEVsZlcyKExJQkVMRkJJVFMsU2hkcikgKm5vdGN2dDsKKyAKKyAgICAgICAvKiBBbGwgdGhlIGRhdGEgaXMgYWxyZWFkeSBtYXBwZWQuICBJZiB3ZSBjb3VsZCB1c2UgaXQKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfbmV3cGhkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfbmV3cGhkci5jCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX25ld3BoZHIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzNSw2ICsxMzUsMTIgQEAKKyAJICAgfHwgY291bnQgPT0gUE5fWE5VTQorIAkgICB8fCBlbGYtPnN0YXRlLkVMRlcoZWxmLExJQkVMRkJJVFMpLnBoZHIgPT0gTlVMTCkKKyAgICAgeworKyAgICAgIGlmICh1bmxpa2VseSAoY291bnQgPiBTSVpFX01BWCAvIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxQaGRyKSkpKQorKwl7CisrCSAgcmVzdWx0ID0gTlVMTDsKKysJICBnb3RvIG91dDsKKysJfQorKworICAgICAgIC8qIEFsbG9jYXRlIGEgbmV3IHByb2dyYW0gaGVhZGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZgorIAkgZWxlbWVudHMuICAqLworICAgICAgIHJlc3VsdCA9IChFbGZXMihMSUJFTEZCSVRTLFBoZHIpICopCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX3VwZGF0ZWZpbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX3VwZGF0ZWZpbGUuYwkyMDEwLTAxLTEyIDE2OjU3OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl91cGRhdGVmaWxlLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMjMsNiArMjIzLDkgQEAKKyAgIC8qIFdyaXRlIGFsbCB0aGUgc2VjdGlvbnMuICBXZWxsLCBvbmx5IHRob3NlIHdoaWNoIGFyZSBtb2RpZmllZC4gICovCisgICBpZiAoc2hudW0gPiAwKQorICAgICB7CisrICAgICAgaWYgKHVubGlrZWx5IChzaG51bSA+IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZfU2NuICopKSkKKysgCXJldHVybiAxOworKworICAgICAgIEVsZl9TY25MaXN0ICpsaXN0ID0gJmVsZi0+c3RhdGUuRUxGVyhlbGYsTElCRUxGQklUUykuc2NuczsKKyAgICAgICBFbGZfU2NuICoqc2NucyA9IChFbGZfU2NuICoqKSBhbGxvY2EgKHNobnVtICogc2l6ZW9mIChFbGZfU2NuICopKTsKKyAgICAgICBjaGFyICpjb25zdCBzaGRyX3N0YXJ0ID0gKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorQEAgLTY0NSw2ICs2NDgsMTAgQEAKKyAgIC8qIFdyaXRlIGFsbCB0aGUgc2VjdGlvbnMuICBXZWxsLCBvbmx5IHRob3NlIHdoaWNoIGFyZSBtb2RpZmllZC4gICovCisgICBpZiAoc2hudW0gPiAwKQorICAgICB7CisrICAgICAgaWYgKHVubGlrZWx5IChzaG51bSA+IFNJWkVfTUFYIC8gKHNpemVvZiAoRWxmX1NjbiAqKQorKwkJCQkJKyBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsU2hkcikpKSkpCisrCXJldHVybiAxOworKworICAgICAgIG9mZl90IHNoZHJfb2Zmc2V0ID0gZWxmLT5zdGFydF9vZmZzZXQgKyBlaGRyLT5lX3Nob2ZmOworICNpZiBFVl9OVU0gIT0gMgorICAgICAgIHhmY3RfdCBzaGRyX2ZjdHAgPSBfX2VsZl94ZmN0c3RvbVtfX2xpYmVsZl92ZXJzaW9uIC0gMV1bRVZfQ1VSUkVOVCAtIDFdW0VMRlcoRUxGQ0xBU1MsIExJQkVMRkJJVFMpIC0gMV1bRUxGX1RfU0hEUl07CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2JlZ2luLmMJMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjUsNyArMTY1LDggQEAKKyAKKyAgICAgICBpZiAodW5saWtlbHkgKHJlc3VsdCA9PSAwKSAmJiBlaGRyLmUzMi0+ZV9zaG9mZiAhPSAwKQorIAl7CistCSAgaWYgKGVoZHIuZTMyLT5lX3Nob2ZmICsgc2l6ZW9mIChFbGYzMl9TaGRyKSA+IG1heHNpemUpCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLmUzMi0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAobWF4c2l6ZSAtIGVoZHIuZTMyLT5lX3Nob2ZmIDwgc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisgCSAgICAvKiBDYW5ub3QgcmVhZCB0aGUgZmlyc3Qgc2VjdGlvbiBoZWFkZXIuICAqLworIAkgICAgcmV0dXJuIDA7CisgCitAQCAtMjEzLDcgKzIxNCw4IEBACisgCisgICAgICAgaWYgKHVubGlrZWx5IChyZXN1bHQgPT0gMCkgJiYgZWhkci5lNjQtPmVfc2hvZmYgIT0gMCkKKyAJeworLQkgIGlmIChlaGRyLmU2NC0+ZV9zaG9mZiArIHNpemVvZiAoRWxmNjRfU2hkcikgPiBtYXhzaXplKQorKwkgIGlmICh1bmxpa2VseSAoZWhkci5lNjQtPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKGVoZHIuZTY0LT5lX3Nob2ZmICsgc2l6ZW9mIChFbGY2NF9TaGRyKSA+IG1heHNpemUpKQorIAkgICAgLyogQ2Fubm90IHJlYWQgdGhlIGZpcnN0IHNlY3Rpb24gaGVhZGVyLiAgKi8KKyAJICAgIHJldHVybiAwOworIAorQEAgLTI4NSw2ICsyODcsMTUgQEAKKyAgICAgLyogQ291bGQgbm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zLiAgKi8KKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICAvKiBDaGVjayBmb3IgdG9vIG1hbnkgc2VjdGlvbnMuICAqLworKyAgaWYgKGVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCisrICAgIHsKKysgICAgICBpZiAoc2NuY250ID4gU0laRV9NQVggLyAoc2l6ZW9mIChFbGZfU2NuKSArIHNpemVvZiAoRWxmMzJfU2hkcikpKQorKwlyZXR1cm4gTlVMTDsKKysgICAgfQorKyAgZWxzZSBpZiAoc2NuY250ID4gU0laRV9NQVggLyAoc2l6ZW9mIChFbGZfU2NuKSArIHNpemVvZiAoRWxmNjRfU2hkcikpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKyAgIC8qIFdlIGNhbiBub3cgYWxsb2NhdGUgdGhlIG1lbW9yeS4gIEV2ZW4gaWYgdGhlcmUgYXJlIG5vIHNlY3Rpb24gaGVhZGVycywKKyAgICAgIHdlIGFsbG9jYXRlIHNwYWNlIGZvciBhIHplcm90aCBzZWN0aW9uIGluIGNhc2Ugd2UgbmVlZCBpdCBsYXRlci4gICovCisgICBjb25zdCBzaXplX3Qgc2NubWF4ID0gKHNjbmNudCA/OiAoY21kID09IEVMRl9DX1JEV1IgfHwgY21kID09IEVMRl9DX1JEV1JfTU1BUCkKK0BAIC0zMjQsNiArMzM1LDE2IEBACisgCXsKKyAJICAvKiBXZSBjYW4gdXNlIHRoZSBtbWFwcGVkIG1lbW9yeS4gICovCisgCSAgZWxmLT5zdGF0ZS5lbGYzMi5laGRyID0gZWhkcjsKKysKKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKG1heHNpemUgLSBlaGRyLT5lX3Nob2ZmCisrCQkJICAgPCBzY25jbnQgKiBzaXplb2YgKEVsZjMyX1NoZHIpKSkKKysJICAgIHsKKysJICAgIGZyZWVfYW5kX291dDoKKysJICAgICAgZnJlZSAoZWxmKTsKKysJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfRklMRSk7CisrCSAgICAgIHJldHVybiBOVUxMOworKwkgICAgfQorIAkgIGVsZi0+c3RhdGUuZWxmMzIuc2hkcgorIAkgICAgPSAoRWxmMzJfU2hkciAqKSAoKGNoYXIgKikgZWhkciArIGVoZHItPmVfc2hvZmYpOworIAorQEAgLTQxMCw2ICs0MzEsMTEgQEAKKyAJeworIAkgIC8qIFdlIGNhbiB1c2UgdGhlIG1tYXBwZWQgbWVtb3J5LiAgKi8KKyAJICBlbGYtPnN0YXRlLmVsZjY0LmVoZHIgPSBlaGRyOworKworKwkgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAoZWhkci0+ZV9zaG9mZgorKwkJCSAgICsgc2NuY250ICogc2l6ZW9mIChFbGYzMl9TaGRyKSA+IG1heHNpemUpKQorKwkgICAgZ290byBmcmVlX2FuZF9vdXQ7CisgCSAgZWxmLT5zdGF0ZS5lbGY2NC5zaGRyCisgCSAgICA9IChFbGY2NF9TaGRyICopICgoY2hhciAqKSBlaGRyICsgZWhkci0+ZV9zaG9mZik7CisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRhcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2dldGFyc3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2dldGFyc3ltLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNzksNiArMTc5LDkgQEAKKyAgICAgICBzaXplX3QgaW5kZXhfc2l6ZSA9IGF0b2wgKHRtcGJ1Zik7CisgCisgICAgICAgaWYgKFNBUk1BRyArIHNpemVvZiAoc3RydWN0IGFyX2hkcikgKyBpbmRleF9zaXplID4gZWxmLT5tYXhpbXVtX3NpemUKKysjaWYgU0laRV9NQVggPD0gNDI5NDk2NzI5NVUKKysJICB8fCBuID49IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZfQXJzeW0pCisrI2VuZGlmCisgCSAgfHwgbiAqIHNpemVvZiAodWludDMyX3QpID4gaW5kZXhfc2l6ZSkKKyAJeworIAkgIC8qIFRoaXMgaW5kZXggdGFibGUgY2Fubm90IGJlIHJpZ2h0IHNpbmNlIGl0IGRvZXMgbm90IGZpdCBpbnRvCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRzaGRyc3RybmR4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfZ2V0c2hkcnN0cm5keC5jCTIwMDktMDYtMTMgMjI6MzE6MzUuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRzaGRyc3RybmR4LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMjUsMTAgKzEyNSwyNSBAQAorIAkgICAgICBpZiAoZWxmLT5tYXBfYWRkcmVzcyAhPSBOVUxMCisgCQkgICYmIGVsZi0+c3RhdGUuZWxmMzIuZWhkci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBNWV9FTEZEQVRBCisgCQkgICYmIChBTExPV19VTkFMSUdORUQKKy0JCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKQorKwkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcworKwkJCSAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBvZmZzZXQpKQorIAkJCSAgJiAoX19hbGlnbm9mX18gKEVsZjMyX1NoZHIpIC0gMSkpID09IDApKQorLQkJLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKy0JCW51bSA9ICgoRWxmMzJfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpLT5zaF9saW5rOworKwkJeworKwkJICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJCSAgICAgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKwkJICBpZiAodW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gb2Zmc2V0CisrCQkJCTwgc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisrCQkgICAgeworKwkJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJCSAgICAgIHJlc3VsdCA9IC0xOworKwkJICAgICAgZ290byBvdXQ7CisrCQkgICAgfQorKworKwkJICAvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworKwkJICBudW0gPSAoKEVsZjMyX1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorKwkJCQkJICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl9CisgCSAgICAgIGVsc2UKKyAJCXsKKyAJCSAgLyogV2UgYXZvaWQgcmVhZGluZyBpbiBhbGwgdGhlIHNlY3Rpb24gaGVhZGVycy4gIEp1c3QgcmVhZAorQEAgLTE2MywxMCArMTc4LDI1IEBACisgCSAgICAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwKKyAJCSAgJiYgZWxmLT5zdGF0ZS5lbGY2NC5laGRyLT5lX2lkZW50W0VJX0RBVEFdID09IE1ZX0VMRkRBVEEKKyAJCSAgJiYgKEFMTE9XX1VOQUxJR05FRAorLQkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpCisrCQkgICAgICB8fCAoKChzaXplX3QpICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzCisrCQkJICAgKyBlbGYtPnN0YXJ0X29mZnNldCArIG9mZnNldCkpCisgCQkJICAmIChfX2FsaWdub2ZfXyAoRWxmNjRfU2hkcikgLSAxKSkgPT0gMCkpCistCQkvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworLQkJbnVtID0gKChFbGY2NF9TaGRyICopIChlbGYtPm1hcF9hZGRyZXNzICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl7CisrCQkgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkJICAgICB2YWxpZCBhbmQgaXQgZG9lcyBub3QgYXNrIGZvciB0b28gbXVjaC4gICovCisrCQkgIGlmICh1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBvZmZzZXQKKysJCQkJPCBzaXplb2YgKEVsZjY0X1NoZHIpKSkKKysJCSAgICB7CisrCQkgICAgICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfU0VDVElPTl9IRUFERVIpOworKwkJICAgICAgcmVzdWx0ID0gLTE7CisrCQkgICAgICBnb3RvIG91dDsKKysJCSAgICB9CisrCisrCQkgIC8qIFdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gICovCisrCQkgIG51bSA9ICgoRWxmNjRfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIGVsZi0+c3RhcnRfb2Zmc2V0CisrCQkJCQkgKyBvZmZzZXQpKS0+c2hfbGluazsKKysJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBXZSBhdm9pZCByZWFkaW5nIGluIGFsbCB0aGUgc2VjdGlvbiBoZWFkZXJzLiAgSnVzdCByZWFkCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9uZXdzY24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9uZXdzY24uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfbmV3c2NuLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDQsMTAgKzEwNCwxOCBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogV2UgbXVzdCBhbGxvY2F0ZSBhIG5ldyBlbGVtZW50LiAgKi8KKy0gICAgICBFbGZfU2NuTGlzdCAqbmV3cDsKKysgICAgICBFbGZfU2NuTGlzdCAqbmV3cCA9IE5VTEw7CisgCisgICAgICAgYXNzZXJ0IChlbGYtPnN0YXRlLmVsZi5zY25pbmNyID4gMCk7CisgCisrICAgICAgaWYgKAorKyNpZiBTSVpFX01BWCA8PSA0Mjk0OTY3Mjk1VQorKwkgIGxpa2VseSAoZWxmLT5zdGF0ZS5lbGYuc2NuaW5jcgorKwkJICA8IFNJWkVfTUFYIC8gMiAvIHNpemVvZiAoRWxmX1NjbikgLSBzaXplb2YgKEVsZl9TY25MaXN0KSkKKysjZWxzZQorKwkgIDEKKysjZW5kaWYKKysJICApCisgICAgICAgbmV3cCA9IChFbGZfU2NuTGlzdCAqKSBjYWxsb2MgKHNpemVvZiAoRWxmX1Njbkxpc3QpCisgCQkJCSAgICAgKyAoKGVsZi0+c3RhdGUuZWxmLnNjbmluY3IgKj0gMikKKyAJCQkJCSogc2l6ZW9mIChFbGZfU2NuKSksIDEpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGR5bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRkeW4uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGR5bi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBkeW5hbWljIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtOTMsNyArOTMsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTQsNyArMTE0LDcgQEAKKyAKKyAgICAgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAJIGluZGV4IGlzIE9LLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9EeW4sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldGxpYi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bGliLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBsaWJyYXJ5IGZyb20gdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNC4KKyAKK0BAIC04Niw3ICs4Niw3IEBACisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKyAgIEdFbGZfTGliICpyZXN1bHQgPSBOVUxMOworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfTGliKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9MaWIsIGRhdGEpKQorICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICBlbHNlCisgICAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRtb3ZlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldG1vdmUuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldG1vdmUuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IG1vdmUgc3RydWN0dXJlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtODMsNyArODMsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9Nb3ZlKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9Nb3ZlLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRyZWxhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHJlbGEuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbGEuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IFJFTEEgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzEsMTIgKzcxLDYgQEAKKyAgIGlmIChkYXRhX3NjbiA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTEEpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSEFORExFKTsKK0BAIC05Myw3ICs4Nyw3IEBACisgICBpZiAoc2NuLT5lbGYtPmNsYXNzID09IEVMRkNMQVNTMzIpCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIGRhdGEuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0BAIC0xMTQsNyArMTA4LDcgQEAKKyAgICAgeworICAgICAgIC8qIFNpbXBseSBjb3B5IHRoZSBkYXRhIGFmdGVyIHdlIG1hZGUgc3VyZSB3ZSBhcmUgYWN0dWFsbHkgZ2V0dGluZworIAkgY29ycmVjdCBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHJlbC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBSRUwgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzEsMTIgKzcxLDYgQEAKKyAgIGlmIChkYXRhX3NjbiA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTCkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9IQU5ETEUpOworQEAgLTkzLDcgKzg3LDcgQEAKKyAgIGlmIChzY24tPmVsZi0+Y2xhc3MgPT0gRUxGQ0xBU1MzMikKKyAgICAgeworICAgICAgIC8qIFdlIGhhdmUgdG8gY29udmVydCB0aGUgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1JlbCkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWwsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0BAIC0xMTMsNyArMTA3LDcgQEAKKyAgICAgeworICAgICAgIC8qIFNpbXBseSBjb3B5IHRoZSBkYXRhIGFmdGVyIHdlIG1hZGUgc3VyZSB3ZSBhcmUgYWN0dWFsbHkgZ2V0dGluZworIAkgY29ycmVjdCBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDE5OTkuCisgCitAQCAtOTAsNyArOTAsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IGRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE5LDcgKzExOSw3IEBACisgCisgICAgICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgCSBpbmRleCBpcyBPSy4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltKSA+IGRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltLCBkYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1pbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHN5bWluZm8uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bWluZm8uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IGFkZGl0aW9uYWwgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtODQsNyArODQsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW1pbmZvKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW1pbmZvLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1zaG5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW1zaG5keC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltc2huZHguYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNiArMSw2IEBACisgLyogR2V0IHN5bWJvbCBpbmZvcm1hdGlvbiBhbmQgc2VwYXJhdGUgc2VjdGlvbiBpbmRleCBmcm9tIHN5bWJvbCB0YWJsZQorICAgIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtOTAsNyArOTAsNyBAQAorICAgICAgc2VjdGlvbiBpbmRleCB0YWJsZS4gICovCisgICBpZiAobGlrZWx5IChzaG5keGRhdGFfc2NuICE9IE5VTEwpKQorICAgICB7CistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1dvcmQpID4gc2huZHhkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9Xb3JkLCAmc2huZHhkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTEwLDcgKzExMCw3IEBACisgCSB0YWJsZSBlbnRyaWVzIGhhcyB0byBiZSBhZG9wdGVkLiAgVGhlIHVzZXIgYmV0dGVyIGhhcyBwcm92aWRlZAorIAkgYSBidWZmZXIgd2hlcmUgd2UgY2FuIHN0b3JlIHRoZSBpbmZvcm1hdGlvbi4gIFdoaWxlIGNvcHlpbmcgdGhlCisgCSBkYXRhIHdlIGFyZSBjb252ZXJ0aW5nIHRoZSBmb3JtYXQuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gc3ltZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCBzeW1kYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMzksNyArMTM5LDcgQEAKKyAKKyAgICAgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAJIGluZGV4IGlzIE9LLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW0pID4gc3ltZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW0sIHN5bWRhdGEpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHZlcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXR2ZXJzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHZlcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgc3ltYm9sIHZlcnNpb24gaW5mb3JtYXRpb24gYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMTk5OS4KKyAKK0BAIC05Miw3ICs5Miw3IEBACisgCisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfVmVyc3ltLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9keW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX2R5bi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2R5bi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgaW5mb3JtYXRpb24gaW4gZHluYW1pYyB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcxLDEyICs3MSw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX0RZTikpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMDIsNyArOTYsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNiw3ICsxMTAsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9saWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX2xpYi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2xpYi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgbGlicmFyeSBpbiB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDA0LgorIAorQEAgLTY4LDEyICs2OCw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIEVsZl9EYXRhX1NjbiAqZGF0YV9zY24gPSAoRWxmX0RhdGFfU2NuICopIGRhdGE7CisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9MSUIpKQorICAgICB7CitAQCAtODcsNyArODEsNyBAQAorIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworICAgaW50IHJlc3VsdCA9IDA7CistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfTGliKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfTGliLCAmZGF0YV9zY24tPmQpKQorICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICBlbHNlCisgICAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfbW92ZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfbW92ZS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX21vdmUuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIG1vdmUgc3RydWN0dXJlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzUsOCArNzUsNyBAQAorICAgYXNzZXJ0IChzaXplb2YgKEdFbGZfTW92ZSkgPT0gc2l6ZW9mIChFbGY2NF9Nb3ZlKSk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKG5keCA8IDApCistICAgICAgfHwgdW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9Nb3ZlKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9Nb3ZlLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIHJldHVybiAwOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWxhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWxhLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsYS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgUkVMQSByZWxvY2F0aW9uIGluZm9ybWF0aW9uIGF0IGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC02OCwxMiArNjgsNiBAQAorICAgaWYgKGRzdCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTEEpKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTAxLDcgKzk1LDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNyw3ICsxMTEsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfcmVsLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBSRUwgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNjgsMTIgKzY4LDYgQEAKKyAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUwpKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtOTksNyArOTMsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNCw3ICsxMDgsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3N5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIGluZm9ybWF0aW9uIGluIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcyLDEyICs3Miw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1NZTSkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMDIsNyArOTYsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTEyNSw3ICsxMTksNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9TeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfU3ltLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1pbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1pbmZvLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltaW5mby5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgYWRkaXRpb25hbCBzeW1ib2wgaW5mb3JtYXRpb24gaW4gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzIsMTIgKzcyLDYgQEAKKyAgIGlmIChkYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfU1lNSU5GTykpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC05Myw3ICs4Nyw3IEBACisgICByd2xvY2tfd3Jsb2NrIChzY24tPmVsZi0+bG9jayk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW1pbmZvKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW1pbmZvLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1zaG5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfc3ltc2huZHguYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1zaG5keC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw2ICsxLDYgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIGluZm9ybWF0aW9uIGFuZCBzZWN0aW9uIGluZGV4IGluIHN5bWJvbCB0YWJsZSBhdCB0aGUKKyAgICBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzcsMTIgKzc3LDYgQEAKKyAgIGlmIChzeW1kYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChzeW1kYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfU1lNKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTEyOCw3ICsxMjIsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gc3ltZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCAmc3ltZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTE1MSw3ICsxNDUsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9TeW0pID4gc3ltZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfU3ltLCAmc3ltZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV92ZXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3ZlcnN5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3ZlcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIHZlcnNpb24gaW5mb3JtYXRpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAxLgorIAorQEAgLTc1LDggKzc1LDcgQEAKKyAgIGFzc2VydCAoc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPT0gc2l6ZW9mIChFbGY2NF9WZXJzeW0pKTsKKyAKKyAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkKKy0gICAgICB8fCB1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfVmVyc3ltLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIHJldHVybiAwOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9saWJlbGZQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9saWJlbGZQLmgJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvbGliZWxmUC5oCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjA4LDQgKzYwOCw4IEBACisgLyogQWxpZ24gb2Zmc2V0IHRvIDQgYnl0ZXMgYXMgbmVlZGVkIGZvciBub3RlIG5hbWUgYW5kIGRlc2NyaXB0b3IgZGF0YS4gICovCisgI2RlZmluZSBOT1RFX0FMSUdOKG4pCSgoKG4pICsgMykgJiAtNFUpCisgCisrLyogQ29udmVuaWVuY2UgbWFjcm8uICAqLworKyNkZWZpbmUgSU5WQUxJRF9ORFgobmR4LCB0eXBlLCBkYXRhKSBcCisrICB1bmxpa2VseSAoKGRhdGEpLT5kX3NpemUgLyBzaXplb2YgKHR5cGUpIDw9ICh1bnNpZ25lZCBpbnQpIChuZHgpKQorKworICNlbmRpZiAgLyogbGliZWxmUC5oICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjQwLDYgKzE2NDAsMTYgQEAKKyAJb2JqZWN0IHN5bWJvbHMgb3Igc3ltYm9scyB3aXRoIHVua25vd24gdHlwZS4KKyAJKGNoZWNrX3JlbCk6IExpa2V3aXNlLgorIAorKzIwMDUtMDYtMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogcmVhZGVsZi5jIChoYW5kbGVfZHluYW1pYywgaGFuZGxlX3N5bXRhYik6IENoZWNrIGZvciBib2d1cyBzaF9saW5rLgorKwkoaGFuZGxlX3Zlcm5lZWQsIGhhbmRsZV92ZXJkZWYsIGhhbmRsZV92ZXJzeW0sIGhhbmRsZV9oYXNoKTogTGlrZXdpc2UuCisrCShoYW5kbGVfc2NuZ3JwKTogQ2hlY2sgZm9yIGJvZ3VzIHNoX2luZm8uCisrCisrCSogc3RyaXAuYyAoaGFuZGxlX2VsZik6IENoZWNrIGZvciBib2d1cyB2YWx1ZXMgaW4gc2hfbGluaywgc2hfaW5mbywKKysJc3Rfc2huZHgsIGVfc2hzdHJuZHgsIGFuZCBTSFRfR1JPVVAgb3IgU0hUX1NZTVRBQl9TSE5EWCBkYXRhLgorKwlEb24ndCB1c2UgYXNzZXJ0IG9uIGlucHV0IHZhbHVlcywgaW5zdGVhZCBiYWlsIHdpdGggImlsbGZvcm1lZCIgZXJyb3IuCisrCisgMjAwNS0wNi0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X29wcyk6IEFkZCBjb25zdHMuCitAQCAtMTY5MCw2ICsxNzAwLDE5IEBACisgCisgCSogcmVhZGVsZi5jIChkd2FyZl90YWdfc3RyaW5nKTogQWRkIG5ldyB0YWdzLgorIAorKzIwMDUtMDUtMTcgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGVsZmxpbnQuYyAoY2hlY2tfaGFzaCk6IERvbid0IGNoZWNrIGVudHJpZXMgYmV5b25kIGVuZCBvZiBzZWN0aW9uLgorKwkoY2hlY2tfbm90ZSk6IERvbid0IGNyYXNoIGlmIGdlbGZfcmF3Y2h1bmsgZmFpbHMuCisrCShzZWN0aW9uX25hbWUpOiBSZXR1cm4gPGludmFsaWQ+IGlmIGdlbGZfZ2V0c2hkciByZXR1cm5zIE5VTEwuCisrCisrMjAwNS0wNS0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogZWxmbGludC5jIChzZWN0aW9uX25hbWUpOiBSZXR1cm4gIjxpbnZhbGlkPiIgaW5zdGVhZCBvZgorKwljcmFzaGluZyBvbiBpbnZhbGlkIHNlY3Rpb24gbmFtZS4KKysJKGNoZWNrX3N5bXRhYiwgaXNfcmVsX2R5biwgY2hlY2tfcmVsYSwgY2hlY2tfcmVsLCBjaGVja19keW5hbWljLAorKwljaGVja19zeW10YWJfc2huZHgsIGNoZWNrX2hhc2gsIGNoZWNrX3ZlcnN5bSk6IFJvYnVzdGlmeS4KKysKKyAyMDA1LTA1LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHN0cmlwLmMgKGhhbmRsZV9lbGYpOiBEb24ndCB0cmFuc2xhdGUgaGFzaCBhbmQgdmVyc3ltIGRhdGEgZm9ybWF0cywKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvZWxmbGludC5jCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMSw2ICsxMzEsMTAgQEAKKyAvKiBBcnJheSB0byBjb3VudCByZWZlcmVuY2VzIGluIHNlY3Rpb24gZ3JvdXBzLiAgKi8KKyBzdGF0aWMgaW50ICpzY25yZWY7CisgCisrLyogTnVtYmVycyBvZiBzZWN0aW9ucyBhbmQgcHJvZ3JhbSBoZWFkZXJzLiAgKi8KKytzdGF0aWMgdW5zaWduZWQgaW50IHNobnVtOworK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGhudW07CisrCisgCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK0BAIC0zMTksMTAgKzMyMywxOSBAQAorIHsKKyAgIEdFbGZfU2hkciBzaGRyX21lbTsKKyAgIEdFbGZfU2hkciAqc2hkcjsKKysgIGNvbnN0IGNoYXIgKnJldDsKKysKKysgIGlmICgodW5zaWduZWQgaW50KSBpZHggPiBzaG51bSkKKysgICAgcmV0dXJuICI8aW52YWxpZD4iOworIAorICAgc2hkciA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIGlkeCksICZzaGRyX21lbSk7CisrICBpZiAoc2hkciA9PSBOVUxMKQorKyAgICByZXR1cm4gIjxpbnZhbGlkPiI7CisgCistICByZXR1cm4gZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKTsKKysgIHJldCA9IGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSk7CisrICBpZiAocmV0ID09IE5VTEwpCisrICAgIHJldHVybiAiPGludmFsaWQ+IjsKKysgIHJldHVybiByZXQ7CisgfQorIAorIAorQEAgLTM0NCwxMSArMzU3LDYgQEAKKyAgIChzaXplb2YgKHZhbGlkX2VfbWFjaGluZSkgLyBzaXplb2YgKHZhbGlkX2VfbWFjaGluZVswXSkpCisgCisgCistLyogTnVtYmVycyBvZiBzZWN0aW9ucyBhbmQgcHJvZ3JhbSBoZWFkZXJzLiAgKi8KKy1zdGF0aWMgdW5zaWduZWQgaW50IHNobnVtOworLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGhudW07CistCistCisgc3RhdGljIHZvaWQKKyBjaGVja19lbGZfaGVhZGVyIChFYmwgKmVibCwgR0VsZl9FaGRyICplaGRyLCBzaXplX3Qgc2l6ZSkKKyB7CitAQCAtNjMyLDcgKzY0MCw4IEBACisgCSAgfQorICAgICAgIH0KKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9TWU0sIDEsIEVWX0NVUlJFTlQpKQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfU1lNLCAxLCBFVl9DVVJSRU5UKTsKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IHNoX2VudHNpemUpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUydV0gJyVzJzogZW50cnkgc2l6ZSBpcyBkb2VzIG5vdCBtYXRjaCBFbGZYWF9TeW1cbiIpLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKK0BAIC02NzAsNyArNjc5LDcgQEAKKyAJICAgICAgIHhuZHhzY25pZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCB4bmR4c2NuaWR4KSk7CisgICAgIH0KKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDE7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIGZvciAoc2l6ZV90IGNudCA9IDE7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIHN5bSA9IGdlbGZfZ2V0c3ltc2huZHggKGRhdGEsIHhuZHhkYXRhLCBjbnQsICZzeW1fbWVtLCAmeG5keCk7CisgICAgICAgaWYgKHN5bSA9PSBOVUxMKQorQEAgLTY5MCw3ICs2OTksOCBAQAorICAgICAgIGVsc2UKKyAJeworIAkgIG5hbWUgPSBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hkci0+c2hfbGluaywgc3ltLT5zdF9uYW1lKTsKKy0JICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCSAgYXNzZXJ0IChuYW1lICE9IE5VTEwKKysJCSAgfHwgc3Ryc2hkci0+c2hfdHlwZSAhPSBTSFRfU1RSVEFCKTsKKyAJfQorIAorICAgICAgIGlmIChzeW0tPnN0X3NobmR4ID09IFNITl9YSU5ERVgpCitAQCAtMTAzOCw5ICsxMDQ4LDExIEBACisgICAgIHsKKyAgICAgICBHRWxmX1NoZHIgcmNzaGRyX21lbTsKKyAgICAgICBjb25zdCBHRWxmX1NoZHIgKnJjc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmcmNzaGRyX21lbSk7CistICAgICAgYXNzZXJ0IChyY3NoZHIgIT0gTlVMTCk7CisgCistICAgICAgaWYgKHJjc2hkci0+c2hfdHlwZSA9PSBTSFRfRFlOQU1JQykKKysgICAgICBpZiAocmNzaGRyID09IE5VTEwpCisrCWJyZWFrOworKworKyAgICAgIGlmIChyY3NoZHItPnNoX3R5cGUgPT0gU0hUX0RZTkFNSUMgJiYgcmNzaGRyLT5zaF9lbnRzaXplKQorIAl7CisgCSAgLyogRm91bmQgdGhlIGR5bmFtaWMgc2VjdGlvbi4gIExvb2sgdGhyb3VnaCBpdC4gICovCisgCSAgRWxmX0RhdGEgKmQgPSBlbGZfZ2V0ZGF0YSAoc2NuLCBOVUxMKTsKK0BAIC0xMDUwLDcgKzEwNjIsOSBAQAorIAkgICAgeworIAkgICAgICBHRWxmX0R5biBkeW5fbWVtOworIAkgICAgICBHRWxmX0R5biAqZHluID0gZ2VsZl9nZXRkeW4gKGQsIGNudCwgJmR5bl9tZW0pOworLQkgICAgICBhc3NlcnQgKGR5biAhPSBOVUxMKTsKKysKKysJICAgICAgaWYgKGR5biA9PSBOVUxMKQorKwkJYnJlYWs7CisgCisgCSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTENPVU5UKQorIAkJeworQEAgLTEwNjQsNyArMTA3OCw5IEBACisgCQkgICAgICAvKiBEb2VzIHRoZSBudW1iZXIgc3BlY2lmaWVkIG51bWJlciBvZiByZWxhdGl2ZQorIAkJCSByZWxvY2F0aW9ucyBleGNlZWQgdGhlIHRvdGFsIG51bWJlciBvZgorIAkJCSByZWxvY2F0aW9ucz8gICovCistCQkgICAgICBpZiAoZHluLT5kX3VuLmRfdmFsID4gc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUpCisrCQkgICAgICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSAwCisrCQkJICAmJiBkeW4tPmRfdW4uZF92YWwgPiAoc2hkci0+c2hfc2l6ZQorKwkJCQkJCS8gc2hkci0+c2hfZW50c2l6ZSkpCisgCQkJRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBEVF9SRUxDT1VOVCB2YWx1ZSAlZCB0b28gaGlnaCBmb3IgdGhpcyBzZWN0aW9uXG4iKSwKKyAJCQkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwKK0BAIC0xMjI0LDcgKzEyNDAsOCBAQAorIAl9CisgICAgIH0KKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCByZWx0eXBlLCAxLCBFVl9DVVJSRU5UKSkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIHJlbHR5cGUsIDEsIEVWX0NVUlJFTlQpOworKyAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gc2hfZW50c2l6ZSkKKyAgICAgRVJST1IgKGdldHRleHQgKHJlbHR5cGUgPT0gRUxGX1RfUkVMQSA/ICJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfUmVsYVxuIiA6ICJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfUmVsXG4iKSwKK0BAIC0xNDQ3LDcgKzE0NjQsOCBAQAorICAgRWxmX0RhdGEgKnN5bWRhdGEgPSBlbGZfZ2V0ZGF0YSAoc3ltc2NuLCBOVUxMKTsKKyAgIGVudW0gbG9hZF9zdGF0ZSBzdGF0ZSA9IHN0YXRlX3VuZGVjaWRlZDsKKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1JFTEEsIDEsIEVWX0NVUlJFTlQpOworKyAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoX2VudHNpemU7ICsrY250KQorICAgICB7CisgICAgICAgR0VsZl9SZWxhIHJlbGFfbWVtOworICAgICAgIEdFbGZfUmVsYSAqcmVsYSA9IGdlbGZfZ2V0cmVsYSAoZGF0YSwgY250LCAmcmVsYV9tZW0pOworQEAgLTE0OTcsNyArMTUxNSw4IEBACisgICBFbGZfRGF0YSAqc3ltZGF0YSA9IGVsZl9nZXRkYXRhIChzeW1zY24sIE5VTEwpOworICAgZW51bSBsb2FkX3N0YXRlIHN0YXRlID0gc3RhdGVfdW5kZWNpZGVkOworIAorLSAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfUkVMLCAxLCBFVl9DVVJSRU5UKTsKKysgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfUmVsIHJlbF9tZW07CisgICAgICAgR0VsZl9SZWwgKnJlbCA9IGdlbGZfZ2V0cmVsIChkYXRhLCBjbnQsICZyZWxfbWVtKTsKK0BAIC0xNjAwLDcgKzE2MTksOCBAQAorIAkgICBzaGRyLT5zaF9saW5rLCBzZWN0aW9uX25hbWUgKGVibCwgc2hkci0+c2hfbGluayksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworIAorLSAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX0RZTiwgMSwgRVZfQ1VSUkVOVCkpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9EWU4sIDEsIEVWX0NVUlJFTlQpOworKyAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gc2hfZW50c2l6ZSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfRHluXG4iKSwKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CitAQCAtMTYxMCw3ICsxNjMwLDcgQEAKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CisgCisgICBib29sIG5vbl9udWxsX3dhcm5lZCA9IGZhbHNlOworLSAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBmb3IgKGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfRHluIGR5bl9tZW07CisgICAgICAgR0VsZl9EeW4gKmR5biA9IGdlbGZfZ2V0ZHluIChkYXRhLCBjbnQsICZkeW5fbWVtKTsKK0BAIC0xODkxLDYgKzE5MTEsOCBAQAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKyAKKyAgIGlmIChzeW1zaGRyICE9IE5VTEwKKysgICAgICAmJiBzaGRyLT5zaF9lbnRzaXplCisrICAgICAgJiYgc3ltc2hkci0+c2hfZW50c2l6ZQorICAgICAgICYmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorIAkgIDwgc3ltc2hkci0+c2hfc2l6ZSAvIHN5bXNoZHItPnNoX2VudHNpemUpKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKK0BAIC0xOTE3LDYgKzE5MzksMTIgQEAKKyAgICAgfQorIAorICAgRWxmX0RhdGEgKmRhdGEgPSBlbGZfZ2V0ZGF0YSAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIGlkeCksIE5VTEwpOworKyAgaWYgKGRhdGEgPT0gTlVMTCkKKysgICAgeworKyAgICAgIEVSUk9SIChnZXR0ZXh0ICgic2VjdGlvbiBbJTJkXSAnJXMnOiBjYW5ub3QgZ2V0IHNlY3Rpb24gZGF0YVxuIiksCisrIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworKyAgICAgIHJldHVybjsKKysgICAgfQorIAorICAgaWYgKCooKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWYpICE9IDApCisgICAgIEVSUk9SIChnZXR0ZXh0ICgic3ltYm9sIDAgc2hvdWxkIGhhdmUgemVybyBleHRlbmRlZCBzZWN0aW9uIGluZGV4XG4iKSk7CitAQCAtMTk1OSw3ICsxOTg3LDcgQEAKKyAKKyAgIHNpemVfdCBtYXhpZHggPSBuY2hhaW47CisgCistICBpZiAoc3ltc2hkciAhPSBOVUxMKQorKyAgaWYgKHN5bXNoZHIgIT0gTlVMTCAmJiBzeW1zaGRyLT5zaF9lbnRzaXplICE9IDApCisgICAgIHsKKyAgICAgICBzaXplX3Qgc3ltc2l6ZSA9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplOworIAorQEAgLTE5NzAsMTggKzE5OTgsMjggQEAKKyAgICAgICBtYXhpZHggPSBzeW1zaXplOworICAgICB9CisgCisrICBFbGYzMl9Xb3JkICpidWYgPSAoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZjsKKysgIEVsZjMyX1dvcmQgKmVuZCA9IChFbGYzMl9Xb3JkICopICgoY2hhciAqKSBkYXRhLT5kX2J1ZiArIHNoZHItPnNoX3NpemUpOworICAgc2l6ZV90IGNudDsKKyAgIGZvciAoY250ID0gMjsgY250IDwgMiArIG5idWNrZXQ7ICsrY250KQorLSAgICBpZiAoKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGJ1Y2tldCByZWZlcmVuY2UgJXp1IG91dCBvZiBib3VuZHNcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCAtIDIpOworKyAgICB9CisgCisgICBmb3IgKDsgY250IDwgMiArIG5idWNrZXQgKyBuY2hhaW47ICsrY250KQorLSAgICBpZiAoKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGNoYWluIHJlZmVyZW5jZSAlenUgb3V0IG9mIGJvdW5kc1xuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250IC0gMiAtIG5idWNrZXQpOworKyAgICB9CisgfQorIAorIAorQEAgLTIwMTEsMTggKzIwNDksMjggQEAKKyAgICAgICBtYXhpZHggPSBzeW1zaXplOworICAgICB9CisgCisrICBFbGY2NF9Yd29yZCAqYnVmID0gKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmOworKyAgRWxmNjRfWHdvcmQgKmVuZCA9IChFbGY2NF9Yd29yZCAqKSAoKGNoYXIgKikgZGF0YS0+ZF9idWYgKyBzaGRyLT5zaF9zaXplKTsKKyAgIHNpemVfdCBjbnQ7CisgICBmb3IgKGNudCA9IDI7IGNudCA8IDIgKyBuYnVja2V0OyArK2NudCkKKy0gICAgaWYgKCgoRWxmNjRfWHdvcmQgKikgZGF0YS0+ZF9idWYpW2NudF0gPj0gbWF4aWR4KQorKyAgICB7CisrICAgICAgaWYgKGJ1ZiArIGNudCA+PSBlbmQpCisrCWJyZWFrOworKyAgICAgIGVsc2UgaWYgKGJ1ZltjbnRdID49IG1heGlkeCkKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggYnVja2V0IHJlZmVyZW5jZSAlenUgb3V0IG9mIGJvdW5kc1xuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250IC0gMik7CisrICAgIH0KKyAKKyAgIGZvciAoOyBjbnQgPCAyICsgbmJ1Y2tldCArIG5jaGFpbjsgKytjbnQpCistICAgIGlmICgoKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGNoYWluIHJlZmVyZW5jZSAlIiBQUkl1NjQgIiBvdXQgb2YgYm91bmRzXG4iKSwKKy0JICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCAodWludDY0X3QpIChjbnQgLSAyIC0gbmJ1Y2tldCkpOworKwkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgKHVpbnQ2NF90KSBjbnQgLSAyIC0gbmJ1Y2tldCk7CisrICAgIH0KKyB9CisgCisgCitAQCAtMjA0Nyw3ICsyMDk1LDcgQEAKKyAgIGlmIChzaGRyLT5zaF9zaXplIDwgKDQgKyBiaXRtYXNrX3dvcmRzICsgbmJ1Y2tldHMpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKyAgICAgeworICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorLXNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCB0YWJsZSBzZWN0aW9uIGlzIHRvbyBzbWFsbCAoaXMgJWxkLCBleHBlY3RlZCBhdCBsZWFzdCVsZClcbiIpLAorK3NlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCB0YWJsZSBzZWN0aW9uIGlzIHRvbyBzbWFsbCAoaXMgJWxkLCBleHBlY3RlZCBhdCBsZWFzdCAlbGQpXG4iKSwKKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCAobG9uZyBpbnQpIHNoZHItPnNoX3NpemUsCisgCSAgICAgKGxvbmcgaW50KSAoKDQgKyBiaXRtYXNrX3dvcmRzICsgbmJ1Y2tldHMpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkpOworICAgICAgIHJldHVybjsKK0BAIC0yNzE5LDggKzI3NjcsOSBAQAorIAorICAgLyogVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdmVyc2lvbiBzeW1ib2wgdGFibGUgbXVzdCBiZSB0aGUKKyAgICAgIHNhbWUgYXMgdGhlIG51bWJlciBvZiBzeW1ib2xzLiAgKi8KKy0gIGlmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorLSAgICAgICE9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKQorKyAgaWYgKHNoZHItPnNoX2VudHNpemUgJiYgc3ltc2hkci0+c2hfZW50c2l6ZQorKyAgICAgICYmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorKwkgICE9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnIGhhcyBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgdGhhbiBzeW1ib2wgdGFibGUgWyUyZF0gJyVzJ1xuIiksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3JlYWRlbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3JlYWRlbGYuYwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTcyLDYgKzExNzIsOCBAQAorICAgRWxmMzJfV29yZCAqZ3JwcmVmID0gKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWY7CisgCisgICBHRWxmX1N5bSBzeW1fbWVtOworKyAgR0VsZl9TeW0gKnN5bSA9IGdlbGZfZ2V0c3ltIChzeW1kYXRhLCBzaGRyLT5zaF9pbmZvLCAmc3ltX21lbSk7CisrCisgICBwcmludGYgKChncnByZWZbMF0gJiBHUlBfQ09NREFUKQorIAkgID8gbmdldHRleHQgKCJcCisgXG5DT01EQVQgc2VjdGlvbiBncm91cCBbJTJ6dV0gJyVzJyB3aXRoIHNpZ25hdHVyZSAnJXMnIGNvbnRhaW5zICV6dSBlbnRyeTpcbiIsCitAQCAtMTE4NCw4ICsxMTg2LDggQEAKKyAJCSAgICAgIGRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKSwKKyAJICBlbGZfbmR4c2NuIChzY24pLAorIAkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSksCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHN5bXNoZHItPnNoX2xpbmssCistCQkgICAgICBnZWxmX2dldHN5bSAoc3ltZGF0YSwgc2hkci0+c2hfaW5mbywgJnN5bV9tZW0pLT5zdF9uYW1lKQorKwkgIChzeW0gPT0gTlVMTCA/IE5VTEwKKysJICAgOiBlbGZfc3RycHRyIChlYmwtPmVsZiwgc3ltc2hkci0+c2hfbGluaywgc3ltLT5zdF9uYW1lKSkKKyAJICA/OiBnZXR0ZXh0ICgiPElOVkFMSUQgU1lNQk9MPiIpLAorIAkgIGRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKTsKKyAKK0BAIC0xMzM2LDcgKzEzMzgsOCBAQAorIGhhbmRsZV9keW5hbWljIChFYmwgKmVibCwgRWxmX1NjbiAqc2NuLCBHRWxmX1NoZHIgKnNoZHIpCisgeworICAgaW50IGNsYXNzID0gZ2VsZl9nZXRjbGFzcyAoZWJsLT5lbGYpOworLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbms7CisgICBFbGZfRGF0YSAqZGF0YTsKKyAgIHNpemVfdCBjbnQ7CisgICBzaXplX3Qgc2hzdHJuZHg7CitAQCAtMTM1MSw2ICsxMzU0LDExIEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKysgIGdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuRHluYW1pYyBzZWdtZW50IGNvbnRhaW5zICVsdSBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICJcCitAQCAtMTM2MCw5ICsxMzY4LDcgQEAKKyAJICBjbGFzcyA9PSBFTEZDTEFTUzMyID8gMTAgOiAxOCwgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgICBmcHV0c191bmxvY2tlZCAoZ2V0dGV4dCAoIiAgVHlwZSAgICAgICAgICAgICAgVmFsdWVcbiIpLCBzdGRvdXQpOworIAorICAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCitAQCAtMTk0NSw2ICsxOTUxLDEzIEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCisrCQkJCSAgICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICAvKiBOb3cgd2UgY2FuIGNvbXB1dGUgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzZWN0aW9uLiAgKi8KKyAgIHVuc2lnbmVkIGludCBuc3ltcyA9IGRhdGEtPmRfc2l6ZSAvIChjbGFzcyA9PSBFTEZDTEFTUzMyCisgCQkJCSAgICAgICA/IHNpemVvZiAoRWxmMzJfU3ltKQorQEAgLTE5NTUsMTUgKzE5NjgsMTIgQEAKKyAJCSAgICBuc3ltcyksCisgCSAgKHVuc2lnbmVkIGludCkgZWxmX25keHNjbiAoc2NuKSwKKyAJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpLCBuc3ltcyk7CistICBHRWxmX1NoZHIgZ2xpbms7CisgICBwcmludGYgKG5nZXR0ZXh0ICgiICVsdSBsb2NhbCBzeW1ib2wgIFN0cmluZyB0YWJsZTogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiICVsdSBsb2NhbCBzeW1ib2xzICBTdHJpbmcgdGFibGU6IFslMnVdICclcydcbiIsCisgCQkgICAgc2hkci0+c2hfaW5mbyksCisgCSAgKHVuc2lnbmVkIGxvbmcgaW50KSBzaGRyLT5zaF9pbmZvLAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgZnB1dHNfdW5sb2NrZWQgKGNsYXNzID09IEVMRkNMQVNTMzIKKyAJCSAgPyBnZXR0ZXh0ICgiXAorQEAgLTIxOTksNyArMjIwOSwxMyBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCistICBHRWxmX1NoZHIgZ2xpbms7CisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gbmVlZHMgc2VjdGlvbiBbJTJ1XSAnJXMnIGNvbnRhaW5zICVkIGVudHJ5OlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0yMjEwLDkgKzIyMjYsNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworICAgZm9yIChpbnQgY250ID0gc2hkci0+c2hfaW5mbzsgLS1jbnQgPj0gMDsgKQorQEAgLTIyNjUsOCArMjI3OSwxNCBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgaW50IGNsYXNzID0gZ2VsZl9nZXRjbGFzcyAoZWJsLT5lbGYpOworLSAgR0VsZl9TaGRyIGdsaW5rOworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gZGVmaW5pdGlvbiBzZWN0aW9uIFslMnVdICclcycgY29udGFpbnMgJWQgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTIyNzgsOSArMjI5OCw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisgICBmb3IgKGludCBjbnQgPSBzaGRyLT5zaF9pbmZvOyAtLWNudCA+PSAwOyApCitAQCAtMjU0Miw4ICsyNTYwLDE0IEBACisgICAgICAgZmlsZW5hbWUgPSBOVUxMOworICAgICB9CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgLyogUHJpbnQgdGhlIGhlYWRlci4gICovCistICBHRWxmX1NoZHIgZ2xpbms7CisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuVmVyc2lvbiBzeW1ib2xzIHNlY3Rpb24gWyUydV0gJyVzJyBjb250YWlucyAlZCBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnIiwKKyAJCSAgICAiXAorQEAgLTI1NTUsOSArMjU3OSw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgLyogTm93IHdlIGNhbiBmaW5hbGx5IGxvb2sgYXQgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGlzIHNlY3Rpb24uICAqLworICAgZm9yICh1bnNpZ25lZCBpbnQgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorQEAgLTI2MDksNyArMjYzMSwxNyBAQAorICAgZm9yIChFbGYzMl9Xb3JkIGNudCA9IDA7IGNudCA8IG5idWNrZXQ7ICsrY250KQorICAgICArK2NvdW50c1tsZW5ndGhzW2NudF1dOworIAorLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLAorKwkJCQkJICAgICAgIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgICBlbGZfbmR4c2NuIChzY24pKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5IaXN0b2dyYW0gZm9yIGJ1Y2tldCBsaXN0IGxlbmd0aCBpbiBzZWN0aW9uIFslMnVdICclcycgKHRvdGFsIG9mICVkIGJ1Y2tldCk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTI2MjIsOSArMjY1NCw3IEBACisgCSAgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICBpZiAoZXh0cmFzdHIgIT0gTlVMTCkKKyAgICAgZnB1dHMgKGV4dHJhc3RyLCBzdGRvdXQpOworQEAgLTQzMTIsNiArNDM0MiwxNiBAQAorICAgICAgIHJldHVybjsKKyAgICAgfQorIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbms7CisrICBnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLCAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgICBlbGZfbmR4c2NuIChzY24pKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5EV0FSRiBzZWN0aW9uIFslMnp1XSAnJXMnIGF0IG9mZnNldCAlIyIgUFJJeDY0ICIgY29udGFpbnMgJXp1IGVudHJ5OlxuIiwKKyAJCSAgICAiXAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvc3RyaXAuYwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtNTYxLDYgKzU2MSwxMSBAQAorICAgICAgIGdvdG8gZmFpbF9jbG9zZTsKKyAgICAgfQorIAorKyAgaWYgKHNoc3RybmR4ID49IHNobnVtKQorKyAgICBnb3RvIGlsbGZvcm1lZDsKKysKKysjZGVmaW5lIGVsZl9hc3NlcnQodGVzdCkgZG8geyBpZiAoISh0ZXN0KSkgZ290byBpbGxmb3JtZWQ7IH0gd2hpbGUgKDApCisrCisgICAvKiBTdG9yYWdlIGZvciBzZWN0aW9uIGluZm9ybWF0aW9uLiAgV2UgbGVhdmUgcm9vbSBmb3IgdHdvIG1vcmUKKyAgICAgIGVudHJpZXMgc2luY2Ugd2UgdW5jb25kaXRpb25hbGx5IGNyZWF0ZSBhIHNlY3Rpb24gaGVhZGVyIHN0cmluZworICAgICAgdGFibGUuICBNYXliZSBzb21lIHdlaXJkIHRvb2wgY3JlYXRlZCBhbiBFTEYgZmlsZSB3aXRob3V0IG9uZS4KK0BAIC01ODIsNyArNTg3LDcgQEAKKyAgICAgeworICAgICAgIC8qIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlIChpLmUuLCB0aGVyZSBzaG91bGQgbm90IGJlIGFueQorIAkgaG9sZXMgaW4gdGhlIG51bWJlcmluZykuICAqLworLSAgICAgIGFzc2VydCAoZWxmX25keHNjbiAoc2NuKSA9PSBjbnQpOworKyAgICAgIGVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNjbikgPT0gY250KTsKKyAKKyAgICAgICBzaGRyX2luZm9bY250XS5zY24gPSBzY247CisgCitAQCAtNTk1LDYgKzYwMCw3IEBACisgCQkJCQlzaGRyX2luZm9bY250XS5zaGRyLnNoX25hbWUpOworICAgICAgIGlmIChzaGRyX2luZm9bY250XS5uYW1lID09IE5VTEwpCisgCXsKKysJaWxsZm9ybWVkOgorIAkgIGVycm9yICgwLCAwLCBnZXR0ZXh0ICgiaWxsZm9ybWVkIGZpbGUgJyVzJyIpLCBmbmFtZSk7CisgCSAgZ290byBmYWlsX2Nsb3NlOworIAl9CitAQCAtNjA0LDYgKzYxMCw4IEBACisgCisgICAgICAgLyogUmVtZW1iZXIgdGhlIHNoZHIuc2hfbGluayB2YWx1ZS4gICovCisgICAgICAgc2hkcl9pbmZvW2NudF0ub2xkX3NoX2xpbmsgPSBzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbms7CisrICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLm9sZF9zaF9saW5rID49IHNobnVtKQorKwlnb3RvIGlsbGZvcm1lZDsKKyAKKyAgICAgICAvKiBTZWN0aW9ucyBpbiBmaWxlcyBvdGhlciB0aGFuIHJlbG9jYXRhYmxlIG9iamVjdCBmaWxlcyB3aGljaAorIAkgYXJlIG5vdCBsb2FkZWQgY2FuIGJlIGZyZWVseSBtb3ZlZCBieSB1cy4gIEluIHJlbG9jYXRhYmxlCitAQCAtNjE2LDcgKzYyNCw3IEBACisgCSBhcHByb3ByaWF0ZSByZWZlcmVuY2UuICAqLworICAgICAgIGlmICh1bmxpa2VseSAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUJfU0hORFgpKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS5zeW10YWJfaWR4ID09IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnN5bXRhYl9pZHggPT0gMCk7CisgCSAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10uc3ltdGFiX2lkeCA9IGNudDsKKyAJfQorICAgICAgIGVsc2UgaWYgKHVubGlrZWx5IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0dST1VQKSkKK0BAIC02MzMsNyArNjQxLDEyIEBACisgCSAgZm9yIChpbm5lciA9IDE7CisgCSAgICAgICBpbm5lciA8IHNoZHJfaW5mb1tjbnRdLmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCk7CisgCSAgICAgICArK2lubmVyKQorKwkgICAgeworKwkgICAgICBpZiAoZ3JwcmVmW2lubmVyXSA8IHNobnVtKQorIAkgICAgc2hkcl9pbmZvW2dycHJlZltpbm5lcl1dLmdyb3VwX2lkeCA9IGNudDsKKysJICAgICAgZWxzZQorKwkJZ290byBpbGxmb3JtZWQ7CisrCSAgICB9CisgCisgCSAgaWYgKGlubmVyID09IDEgfHwgKGlubmVyID09IDIgJiYgKGdycHJlZlswXSAmIEdSUF9DT01EQVQpID09IDApKQorIAkgICAgLyogSWYgdGhlIHNlY3Rpb24gZ3JvdXAgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCBhbmQgdGhpcworQEAgLTY0NCw3ICs2NTcsNyBAQAorIAl9CisgICAgICAgZWxzZSBpZiAodW5saWtlbHkgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfR05VX3ZlcnN5bSkpCisgCXsKKy0JICBhc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID09IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID09IDApOworIAkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID0gY250OworIAl9CisgCitAQCAtNjUyLDcgKzY2NSw3IEBACisgCSBkaXNjYXJkZWQgcmlnaHQgYXdheS4gICovCisgICAgICAgaWYgKChzaGRyX2luZm9bY250XS5zaGRyLnNoX2ZsYWdzICYgU0hGX0dST1VQKSAhPSAwKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bY250XS5ncm91cF9pZHggIT0gMCk7CisrCSAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4ICE9IDApOworIAorIAkgIGlmIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4XS5pZHggPT0gMCkKKyAJICAgIHsKK0BAIC03MjcsMTEgKzc0MCwxNSBAQAorIAkgICAgeworIAkgICAgICAvKiBJZiBhIHJlbG9jYXRpb24gc2VjdGlvbiBpcyBtYXJrZWQgYXMgYmVpbmcgcmVtb3ZlZCBtYWtlCisgCQkgc3VyZSB0aGUgc2VjdGlvbiBpdCBpcyByZWxvY2F0aW5nIGlzIHJlbW92ZWQsIHRvby4gICovCistCSAgICAgIGlmICgoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9SRUwKKysJICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfUkVMCisgCQkgICB8fCBzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1JFTEEpCistCQkgICYmIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCAhPSAwKQorKwkJeworKwkJICBpZiAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvID49IHNobnVtKQorKwkJICAgIGdvdG8gaWxsZm9ybWVkOworKwkJICBlbHNlIGlmIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggIT0gMCkKKyAJCXNoZHJfaW5mb1tjbnRdLmlkeCA9IDE7CisgCSAgICB9CisrCSAgICB9CisgCisgCSAgaWYgKHNoZHJfaW5mb1tjbnRdLmlkeCA9PSAxKQorIAkgICAgeworQEAgLTc1OCw3ICs3NzUsNyBAQAorIAkJICBpZiAoc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeCAhPSAwCisgCQkgICAgICAmJiBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uZGF0YSA9PSBOVUxMKQorIAkJICAgIHsKKy0JCSAgICAgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUIpOworKwkJICAgICAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUIpOworIAorIAkJICAgICAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLmRhdGEKKyAJCQk9IGVsZl9nZXRkYXRhIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uc2NuLAorQEAgLTc5OCw2ICs4MTUsOSBAQAorIAkJICAgICAgZWxzZSBpZiAoc2NuaWR4ID09IFNITl9YSU5ERVgpCisgCQkJc2NuaWR4ID0geG5keDsKKyAKKysJCSAgICAgIGlmIChzY25pZHggPj0gc2hudW0pCisrCQkJZ290byBpbGxmb3JtZWQ7CisrCisgCQkgICAgICBpZiAoc2hkcl9pbmZvW3NjbmlkeF0uaWR4ID09IDApCisgCQkJLyogVGhpcyBzeW1ib2wgdGFibGUgaGFzIGEgcmVhbCBzeW1ib2wgaW4KKyAJCQkgICBhIGRpc2NhcmRlZCBzZWN0aW9uLiAgU28gcHJlc2VydmUgdGhlCitAQCAtODI4LDEyICs4NDgsMTYgQEAKKyAJCX0KKyAKKyAJICAgICAgLyogSGFuZGxlIHJlZmVyZW5jZXMgdGhyb3VnaCBzaF9pbmZvLiAgKi8KKy0JICAgICAgaWYgKFNIX0lORk9fTElOS19QICgmc2hkcl9pbmZvW2NudF0uc2hkcikKKy0JCSAgJiYgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ID09IDApCisrCSAgICAgIGlmIChTSF9JTkZPX0xJTktfUCAoJnNoZHJfaW5mb1tjbnRdLnNoZHIpKQorKwkJeworKwkJICBpZiAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvID49IHNobnVtKQorKwkJICAgIGdvdG8gaWxsZm9ybWVkOworKwkJICBlbHNlIGlmICggc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ID09IDApCisgCQl7CisgCQkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCA9IDE7CisgCQkgIGNoYW5nZXMgfD0gc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvIDwgY250OworIAkJfQorKwkJfQorIAorIAkgICAgICAvKiBNYXJrIHRoZSBzZWN0aW9uIGFzIGludmVzdGlnYXRlZC4gICovCisgCSAgICAgIHNoZHJfaW5mb1tjbnRdLmlkeCA9IDI7CitAQCAtOTcyLDcgKzk5Niw3IEBACisgCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoIndoaWxlIGdlbmVyYXRpbmcgb3V0cHV0IGZpbGU6ICVzIiksCisgCQkgZWxmX2Vycm1zZyAoLTEpKTsKKyAKKy0JYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisrCWVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKyAKKyAJLyogQWRkIHRoaXMgbmFtZSB0byB0aGUgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlLiAgKi8KKyAJc2hkcl9pbmZvW2NudF0uc2UgPSBlYmxfc3RydGFiYWRkIChzaHN0LCBzaGRyX2luZm9bY250XS5uYW1lLCAwKTsKK0BAIC0xMDA5LDcgKzEwMzMsNyBAQAorIAllcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICAgICAgZ2V0dGV4dCAoIndoaWxlIGNyZWF0ZSBzZWN0aW9uIGhlYWRlciBzZWN0aW9uOiAlcyIpLAorIAkgICAgICAgZWxmX2Vycm1zZyAoLTEpKTsKKy0gICAgICBhc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKysgICAgICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisgCisgICAgICAgc2hkcl9pbmZvW2NudF0uZGF0YSA9IGVsZl9uZXdkYXRhIChzaGRyX2luZm9bY250XS5uZXdzY24pOworICAgICAgIGlmIChzaGRyX2luZm9bY250XS5kYXRhID09IE5VTEwpCitAQCAtMTA2NSw3ICsxMDg5LDcgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoIndoaWxlIGNyZWF0ZSBzZWN0aW9uIGhlYWRlciBzZWN0aW9uOiAlcyIpLAorIAkgICBlbGZfZXJybXNnICgtMSkpOworLSAgYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IGlkeCk7CisrICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IGlkeCk7CisgCisgICAvKiBGaW5hbGl6ZSB0aGUgc3RyaW5nIHRhYmxlIGFuZCBmaWxsIGluIHRoZSBjb3JyZWN0IGluZGljZXMgaW4gdGhlCisgICAgICBzZWN0aW9uIGhlYWRlcnMuICAqLworQEAgLTExNTUsMjAgKzExNzksMjAgQEAKKyAJCSAgICBzaG5keGRhdGEgPSBlbGZfZ2V0ZGF0YSAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLnNjbiwKKyAJCQkJCSAgICAgTlVMTCk7CisgCistCQkgICAgYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkpCisrCQkgICAgZWxmX2Fzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpKQorIAkJCSAgICA+PSBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBlbHNpemUpOworIAkJICB9CisgCisgCQlpZiAoc2hkcl9pbmZvW2NudF0udmVyc2lvbl9pZHggIT0gMCkKKyAJCSAgeworLQkJICAgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9EWU5TWU0pOworKwkJICAgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfRFlOU1lNKTsKKyAJCSAgICAvKiBUaGlzIHNlY3Rpb24gaGFzIGFzc29jaWF0ZWQgdmVyc2lvbgorIAkJICAgICAgIGluZm9ybWF0aW9uLiAgV2UgaGF2ZSB0byBtb2RpZnkgdGhhdAorIAkJICAgICAgIGluZm9ybWF0aW9uLCB0b28uICAqLworIAkJICAgIHZlcnNpb25kYXRhID0gZWxmX2dldGRhdGEgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS52ZXJzaW9uX2lkeF0uc2NuLAorIAkJCQkJICAgICAgIE5VTEwpOworIAorLQkJICAgIGFzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEdFbGZfVmVyc3ltKSkKKysJCSAgICBlbGZfYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoR0VsZl9WZXJzeW0pKQorIAkJCSAgICA+PSBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBlbHNpemUpOworIAkJICB9CisgCitAQCAtMTIyMyw3ICsxMjQ3LDcgQEAKKyAJCSAgICAgIHNlYyA9IHNoZHJfaW5mb1tzeW0tPnN0X3NobmR4XS5pZHg7CisgCQkgICAgZWxzZQorIAkJICAgICAgeworLQkJCWFzc2VydCAoc2huZHhkYXRhICE9IE5VTEwpOworKwkJCWVsZl9hc3NlcnQgKHNobmR4ZGF0YSAhPSBOVUxMKTsKKyAKKyAJCQlzZWMgPSBzaGRyX2luZm9beHNobmR4XS5pZHg7CisgCQkgICAgICB9CitAQCAtMTI0NCw3ICsxMjY4LDcgQEAKKyAJCQkgICAgbnhzaG5keCA9IHNlYzsKKyAJCQkgIH0KKyAKKy0JCQlhc3NlcnQgKHNlYyA8IFNITl9MT1JFU0VSVkUgfHwgc2huZHhkYXRhICE9IE5VTEwpOworKwkJCWVsZl9hc3NlcnQgKHNlYyA8IFNITl9MT1JFU0VSVkUgfHwgc2huZHhkYXRhICE9IE5VTEwpOworIAorIAkJCWlmICgoaW5uZXIgIT0gZGVzdGlkeCB8fCBuc2huZHggIT0gc3ltLT5zdF9zaG5keAorIAkJCSAgICAgfHwgKHNobmR4ZGF0YSAhPSBOVUxMICYmIG54c2huZHggIT0geHNobmR4KSkKK0BAIC0xMjY4LDcgKzEyOTIsNyBAQAorIAkJCSAgICAgfHwgc2hkcl9pbmZvW2NudF0uZGVidWdfZGF0YSA9PSBOVUxMKQorIAkJICAgICAgLyogVGhpcyBpcyBhIHNlY3Rpb24gc3ltYm9sIGZvciBhIHNlY3Rpb24gd2hpY2ggaGFzCisgCQkJIGJlZW4gcmVtb3ZlZC4gICovCistCQkgICAgICBhc3NlcnQgKEdFTEZfU1RfVFlQRSAoc3ltLT5zdF9pbmZvKSA9PSBTVFRfU0VDVElPTik7CisrCQkgICAgICBlbGZfYXNzZXJ0IChHRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5mbykgPT0gU1RUX1NFQ1RJT04pOworIAkJICB9CisgCisgCQlpZiAoZGVzdGlkeCAhPSBpbm5lcikKK0BAIC0xNDU1LDExICsxNDc5LDExIEBACisgCQkgIHsKKyAJCSAgICBHRWxmX1N5bSBzeW1fbWVtOworIAkJICAgIEdFbGZfU3ltICpzeW0gPSBnZWxmX2dldHN5bSAoc3ltZCwgaW5uZXIsICZzeW1fbWVtKTsKKy0JCSAgICBhc3NlcnQgKHN5bSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisgCisgCQkgICAgY29uc3QgY2hhciAqbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc3Ryc2huZHgsCisgCQkJCQkJICAgc3ltLT5zdF9uYW1lKTsKKy0JCSAgICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAobmFtZSAhPSBOVUxMKTsKKyAJCSAgICBzaXplX3QgaGlkeCA9IGVsZl9oYXNoIChuYW1lKSAlIG5idWNrZXQ7CisgCisgCQkgICAgaWYgKGJ1Y2tldFtoaWR4XSA9PSAwKQorQEAgLTE0NzgsNyArMTUwMiw3IEBACisgCSAgICBlbHNlCisgCSAgICAgIHsKKyAJCS8qIEFscGhhIGFuZCBTMzkwIDY0LWJpdCB1c2UgNjQtYml0IFNIVF9IQVNIIGVudHJpZXMuICAqLworLQkJYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX2VudHNpemUKKysJCWVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfZW50c2l6ZQorIAkJCT09IHNpemVvZiAoRWxmNjRfWHdvcmQpKTsKKyAKKyAJCUVsZjY0X1h3b3JkICpidWNrZXQgPSAoRWxmNjRfWHdvcmQgKikgaGFzaGQtPmRfYnVmOworQEAgLTE1MDksMTEgKzE1MzMsMTEgQEAKKyAJCSAgeworIAkJICAgIEdFbGZfU3ltIHN5bV9tZW07CisgCQkgICAgR0VsZl9TeW0gKnN5bSA9IGdlbGZfZ2V0c3ltIChzeW1kLCBpbm5lciwgJnN5bV9tZW0pOworLQkJICAgIGFzc2VydCAoc3ltICE9IE5VTEwpOworKwkJICAgIGVsZl9hc3NlcnQgKHN5bSAhPSBOVUxMKTsKKyAKKyAJCSAgICBjb25zdCBjaGFyICpuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzdHJzaG5keCwKKyAJCQkJCQkgICBzeW0tPnN0X25hbWUpOworLQkJICAgIGFzc2VydCAobmFtZSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChuYW1lICE9IE5VTEwpOworIAkJICAgIHNpemVfdCBoaWR4ID0gZWxmX2hhc2ggKG5hbWUpICUgbmJ1Y2tldDsKKyAKKyAJCSAgICBpZiAoYnVja2V0W2hpZHhdID09IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZW1vdmUtdW51c2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTk3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBmcm9tIHRoZSBjb2RlIHRvIHByZXZlbnQgLVdlcnJvciBjYXVzaW5nIGEgYnVpbGQKK2ZhaWx1cmUgb24gaG9zdHMgd2l0aCBHQ0MgNC42LgorCitUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgdXBzdHJlYW0gc28gc2hvdWxkIG5vdCBiZSByZXF1aXJlZCBvbmNlIHdlJ3ZlIHVwZGF0ZWQKK3RvIGVsZnV0aWxzIDAuMTUyIG9yIGxhdGVyLiBUaGVyZWZvcmUgdGhpcyBwYXRjaCBjb25zb2xpZGF0ZXMgc2V2ZXJhbAorY2hhbmdlcyBmcm9tIGVsZnV0aWxzIHVwc3RyZWFtIGJ5IFJvbGFuZCBNY0dyYXRoIGludG8gYSBzaW5nbGUgZmlsZSBzbyB0aGF0CitpdCdzIGVhc2llciB0byByZW1vdmUgbGF0ZXIgb25jZSB3ZSB1cGdyYWRlLgorTGlua3MgdG8gdXBzdHJlYW0gZ2l0d2ViIG9mIHRoZSBjb25zb2xpZGF0ZWQgY29tbWl0cyBmb2xsb3c6CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD03MDk0ZDAwYTE2OWFmYjI3ZTAzMjNmODU4MGU4MTc3OThhZTdjMjQwCistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD1mZDk5MjU0MzE4NTEyNmViMDI4MGMxZWUwODgzZTA3MzAyMDQ5OWI0CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD00ZGI4OWYwNGJiNTkzMjdhYmQ3YTNiNjBlODhmMmU3ZTczYzY1Yzc5CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD04ZjZjMTc5NWFiOWQ0MWYwMzgwNWVlYmQ1NTc2NzA3MGFkZTU1YWFjCistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD0yNDA3ODRiNDhhYTI3NjgyMmM1YTYxYzlhZDZhNDM1NTA1MWNlMjU5CisKK0pvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4gLSAwNi8wNC8xMQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliYXNtL2FzbV9uZXdzY24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliYXNtL2FzbV9uZXdzY24uYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9hc21fbmV3c2NuLmMKK0BAIC0xNjIsNyArMTYyLDYgQEAgYXNtX25ld3NjbiAoY3R4LCBzY25uYW1lLCB0eXBlLCBmbGFncykKKyAgICAgIEdFbGZfWHdvcmQgZmxhZ3M7CisgeworICAgc2l6ZV90IHNjbm5hbWVfbGVuID0gc3RybGVuIChzY25uYW1lKSArIDE7CistICB1bnNpZ25lZCBsb25nIGludCBodmFsOworICAgQXNtU2NuX3QgKnJlc3VsdDsKKyAKKyAgIC8qIElmIG5vIGNvbnRleHQgaXMgZ2l2ZW4gdGhlcmUgbWlnaHQgYmUgYW4gZWFybGllciBlcnJvci4gICovCitAQCAtMTgwLDggKzE3OSw2IEBAIGFzbV9uZXdzY24gKGN0eCwgc2NubmFtZSwgdHlwZSwgZmxhZ3MpCisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKyAKKy0gIGh2YWwgPSBlbGZfaGFzaCAoc2NubmFtZSk7CistCisgICByd2xvY2tfd3Jsb2NrIChjdHgtPmxvY2spOworIAorICAgLyogVGhpcyBpcyBhIG5ldyBzZWN0aW9uLiAgKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvZWxmbGludC5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYworQEAgLTcwNyw5ICs3MDcsMTAgQEAgc2VjdGlvbiBbJTJkXSAnJXMnOiBzeW1ib2wgJXp1OiBpbnZhbGlkIAorIAl7CisgCSAgaWYgKHhuZHhkYXRhID09IE5VTEwpCisgCSAgICB7CistCSAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorKwkgICAgICBpZiAoIW5vX3huZHhfd2FybmVkKQorKwkJRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzeW1ib2wgJXp1OiB0b28gbGFyZ2Ugc2VjdGlvbiBpbmRleCBidXQgbm8gZXh0ZW5kZWQgc2VjdGlvbiBpbmRleCBzZWN0aW9uXG4iKSwKKy0JCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250KTsKKysJCSAgICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQpOworIAkgICAgICBub194bmR4X3dhcm5lZCA9IHRydWU7CisgCSAgICB9CisgCSAgZWxzZSBpZiAoeG5keCA8IFNITl9MT1JFU0VSVkUpCitAQCAtMTU5MiwxMCArMTU5Myw2IEBAIGNoZWNrX2R5bmFtaWMgKEVibCAqZWJsLCBHRWxmX0VoZHIgKmVoZHIKKyAgICAgICBbRFRfU1RSU1pdID0gdHJ1ZSwKKyAgICAgICBbRFRfU1lNRU5UXSA9IHRydWUKKyAgICAgfTsKKy0gIEdFbGZfQWRkciByZWxhZGRyID0gMDsKKy0gIEdFbGZfV29yZCByZWxzeiA9IDA7CistICBHRWxmX0FkZHIgcGx0cmVsYWRkciA9IDA7CistICBHRWxmX1dvcmQgcGx0cmVsc3ogPSAwOworIAorICAgbWVtc2V0IChoYXNfZHQsICdcMCcsIHNpemVvZiAoaGFzX2R0KSk7CisgICBtZW1zZXQgKGhhc192YWxfZHQsICdcMCcsIHNpemVvZiAoaGFzX3ZhbF9kdCkpOworQEAgLTE2OTQsMTUgKzE2OTEsNiBAQCBzZWN0aW9uIFslMmRdICclcyc6IGVudHJ5ICV6dTogbGV2ZWwgMiB0Cisgc2VjdGlvbiBbJTJkXSAnJXMnOiBlbnRyeSAlenU6IERUX1BMVFJFTCB2YWx1ZSBtdXN0IGJlIERUX1JFTCBvciBEVF9SRUxBXG4iKSwKKyAJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCk7CisgCistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUkVMKQorLQlyZWxhZGRyID0gZHluLT5kX3VuLmRfcHRyOworLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTFNaKQorLQlyZWxzeiA9IGR5bi0+ZF91bi5kX3ZhbDsKKy0gICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9KTVBSRUwpCistCXBsdHJlbGFkZHIgPSBkeW4tPmRfdW4uZF9wdHI7CistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUExUUkVMU1opCistCXBsdHJlbHN6ID0gZHluLT5kX3VuLmRfdmFsOworLQorICAgICAgIC8qIENoZWNrIHRoYXQgYWRkcmVzc2VzIGZvciBlbnRyaWVzIGFyZSBpbiBsb2FkZWQgc2VnbWVudHMuICAqLworICAgICAgIHN3aXRjaCAoZHluLT5kX3RhZykKKyAJeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZGdlbmVyaWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2xkZ2VuZXJpYy5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkZ2VuZXJpYy5jCitAQCAtMjg1LDEyICsyODUsMTAgQEAgc3RhdGljIGludAorIGNoZWNrX2Zvcl9kdXBsaWNhdGUyIChzdHJ1Y3QgdXNlZGZpbGVzICpuZXdwLCBzdHJ1Y3QgdXNlZGZpbGVzICpsaXN0KQorIHsKKyAgIHN0cnVjdCB1c2VkZmlsZXMgKmZpcnN0OworLSAgc3RydWN0IHVzZWRmaWxlcyAqcHJldnA7CisgCisgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIHByZXZwID0gbGlzdDsKKyAgIGxpc3QgPSBmaXJzdCA9IGxpc3QtPm5leHQ7CisgICBkbworICAgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZHNjcmlwdC55CisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LnkKK0BAIC04MDIsMTIgKzgwMiw5IEBAIGFkZF92ZXJzaW9ucyAoc3RydWN0IHZlcnNpb24gKnZlcnNpb25zKQorIAorICAgZG8KKyAgICAgeworLSAgICAgIHN0cnVjdCB2ZXJzaW9uICpvbGRwOworLQorICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5sb2NhbF9uYW1lcywgdHJ1ZSk7CisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmdsb2JhbF9uYW1lcywgZmFsc2UpOworIAorLSAgICAgIG9sZHAgPSB2ZXJzaW9uczsKKyAgICAgICB2ZXJzaW9ucyA9IHZlcnNpb25zLT5uZXh0OworICAgICB9CisgICB3aGlsZSAodmVyc2lvbnMgIT0gTlVMTCk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3Vuc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3Vuc3RyaXAuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy91bnN0cmlwLmMKK0BAIC0xMzAxLDcgKzEzMDEsNiBAQCBtb3JlIHNlY3Rpb25zIGluIHN0cmlwcGVkIGZpbGUgdGhhbiBkZWJ1CisgICAvKiBNYXRjaCBlYWNoIGRlYnVnaW5mbyBzZWN0aW9uIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgc3RyaXBwZWQgc2VjdGlvbi4gICovCisgICBib29sIGNoZWNrX3ByZWxpbmsgPSBmYWxzZTsKKyAgIEVsZl9TY24gKnVuc3RyaXBwZWRfc3ltdGFiID0gTlVMTDsKKy0gIHNpemVfdCB1bnN0cmlwcGVkX3N0cnRhYl9uZHggPSBTSE5fVU5ERUY7CisgICBzaXplX3QgYWxsb2NfYXZhaWwgPSAwOworICAgc2NuID0gTlVMTDsKKyAgIHdoaWxlICgoc2NuID0gZWxmX25leHRzY24gKHVuc3RyaXBwZWQsIHNjbikpICE9IE5VTEwpCitAQCAtMTMxMyw3ICsxMzEyLDYgQEAgbW9yZSBzZWN0aW9ucyBpbiBzdHJpcHBlZCBmaWxlIHRoYW4gZGVidQorICAgICAgIGlmIChzaGRyLT5zaF90eXBlID09IFNIVF9TWU1UQUIpCisgCXsKKyAJICB1bnN0cmlwcGVkX3N5bXRhYiA9IHNjbjsKKy0JICB1bnN0cmlwcGVkX3N0cnRhYl9uZHggPSBzaGRyLT5zaF9saW5rOworIAkgIGNvbnRpbnVlOworIAl9CisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZHNjcmlwdC5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LmMKK0BAIC0yNzI4LDEyICsyNzI4LDkgQEAgYWRkX3ZlcnNpb25zIChzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbnMpCisgCisgICBkbworICAgICB7CistICAgICAgc3RydWN0IHZlcnNpb24gKm9sZHA7CistCisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmxvY2FsX25hbWVzLCB0cnVlKTsKKyAgICAgICBhZGRfaWRfbGlzdCAodmVyc2lvbnMtPnZlcnNpb25uYW1lLCB2ZXJzaW9ucy0+Z2xvYmFsX25hbWVzLCBmYWxzZSk7CisgCistICAgICAgb2xkcCA9IHZlcnNpb25zOworICAgICAgIHZlcnNpb25zID0gdmVyc2lvbnMtPm5leHQ7CisgICAgIH0KKyAgIHdoaWxlICh2ZXJzaW9ucyAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzkyZDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT24gbWFueSBhcmNoaXRlY3R1cmVzIHRoaXMgdGVzdCBmYWlscyBiZWNhdXNlIGJpbmFyaWVzL2xpYnMgcHJvZHVjZWQgYnkKK2JpbnV0aWxzIGRvbid0IHBhc3MgZWxmbGludC4gSG93ZXZlciBlbGZ1dGlscyBzaG91bGRuJ3QgRlRCRlMgYmVjYXVzZSBvZiB0aGlzLgorCitTbyB3ZSBydW4gdGhlIHRlc3RzIG9uIGFsbCBhcmNocyB0byBzZWUgd2hhdCBicmVha3MsIGJ1dCBpZiBpdCBicmVha3Mgd2UgaWdub3JlCit0aGUgcmVzdWx0IChleGl0Y29kZSA3NyBtZWFuczogdGhpcyB0ZXN0IHdhcyBza2lwcGVkKS4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTI4L3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjEyOC5vcmlnL3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gJMjAwNy0wNy0wOCAyMTo0NjoxNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjEyOC90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMDctMDctMDggMjE6NDY6NDkuMDAwMDAwMDAwICswMDAwCitAQCAtMzIsNyArMzIsNyBAQAorICMgIGVjaG8gJDEKKyAgIGlmIFsgLWYgJDEgXTsgdGhlbgorICAgICB0ZXN0cnVuIC4uL3NyYy9lbGZsaW50IC0tcXVpZXQgLS1nbnUtbGQgJDEgfHwKKy0gICAgeyBlY2hvICIqKiogZmFpbHVyZSBpbiAkMSI7IHN0YXR1cz0xOyB9CisrICAgIHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJDEiOyBzdGF0dXM9Nzc7IH0KKyAgIGZpCisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmMTZhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorb24gdWNsaWJjIHN5c3RlbXMgbGliaW50bCBhbmQgbGlidWFyZ3AgYXJlIHNlcGFyYXRlIGZyb20gbGliYy4KK3NvIHRoZXkgbmVlZCB0byBiZSBzcGVjaWZpZWQgb24gY29tbWFuZGxpbmUgd2hlbiB3ZSB1c2UgcHJveHktbGliaW50bAordGhlbiBsaWJpbnRsIGlzIGEgc3RhdGljIGFyY2hpdmUgc28gaXQgc2hvdWxkIGJlIGxpc3RlZCBsYXN0IHNpbmNlCitlbGZ1dGlscyBkb2VzIG5vdCByZXNwZWN0IGRpc2FibGUtbmxzIHdlIG5lZWQgdG8gbGluayBpbiBsaWJpbnRsCisKK1dlIGFkZCBhIG5ldyBvcHRpb24gLS1lbmFibGUtdWNsaWJjIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjb250cm9sCit0aGUgdWNsaWJjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGR1cmluZyBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYyBzcGVjaWZpY10KKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlndXJlLmFjCitAQCAtNTUsOSArNTUsMTYgQEAgQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwgW0FDX0RFRgorIAorIEFIX1RFTVBMQVRFKFtVU0VfTE9DS1NdLCBbRGVmaW5lZCBpZiBsaWJyYXJpZXMgc2hvdWxkIGJlIHRocmVhZC1zYWZlLl0pCisgCisrQUNfQVJHX0VOQUJMRShbdWNsaWJjXSwKKytBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWNsaWJjXSwgW1VzZSB1Y2xpYmMgZm9yIHN5c3RlbSBsaWJyYXJpZXNdKSwKKyt1c2VfdWNsaWJjPXllcywgdXNlX3VjbGliYz1ubykKKytBTV9DT05ESVRJT05BTChVU0VfVUNMSUJDLCB0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXMpCisrQVNfSUYoW3Rlc3QgIiR1c2VfdWNsaWJjIiA9IHllc10sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQorKworK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQorKworIGRubCBBZGQgYWxsIHRoZSBsYW5ndWFnZXMgZm9yIHdoaWNoIHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlLgorIEFMTF9MSU5HVUFTPQorLQorIEFDX1BST0dfQ0MKKyBBQ19QUk9HX1JBTkxJQgorIEFDX1BST0dfWUFDQworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL01ha2VmaWxlLmFtCitAQCAtOTMsNyArOTMsMTIgQEAgaWYgIU1VREZMQVAKKyBsaWJlbGZfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZWxmX3BpY19hX09CSkVDVFMgPSAkKGxpYmVsZl9hX1NPVVJDRVM6LmM9Lm9zKQorIAorKworIGxpYmVsZl9zb19MRExJQlMgPQorK2lmIFVTRV9VQ0xJQkMKKytsaWJlbGZfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBpZiBVU0VfTE9DS1MKKyBsaWJlbGZfc29fTERMSUJTICs9IC1scHRocmVhZAorIGVuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHcvTWFrZWZpbGUuYW0KK0BAIC05OCw2ICs5OCwxMSBAQCBpZiAhTVVERkxBUAorIGxpYmR3X3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCisgCisrbGliZHdfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZHdfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBsaWJkd19zb19TT1VSQ0VTID0KKyBsaWJkdy5zbzogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSBcCisgCSAgLi4vbGliZHdmbC9saWJkd2ZsX3BpYy5hIC4uL2xpYmVibC9saWJlYmwuYSBcCitAQCAtMTA4LDcgKzExMyw3IEBAIGxpYmR3LnNvOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy4KKyAJCS1XbCwtLWVuYWJsZS1uZXctZHRhZ3MsLXJwYXRoLCQocGtnbGliZGlyKSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkPCwtLW5vLXVuZGVmaW5lZCBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQoZmlsdGVyLW91dCAkPCwkXikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZVwKKy0JCS1sZGwgJCh6aXBfTElCUykKKysJCS1sZGwgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpCisgCWlmIHJlYWRlbGYgLWQgJEAgfCBmZ3JlcCAtcSBURVhUUkVMOyB0aGVuIGV4aXQgMTsgZmkKKyAJbG4gLWZzICRAICRALiQoVkVSU0lPTikKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9NYWtlZmlsZS5hbQorQEAgLTYzLDYgKzYzLDEwIEBAIGkzODZfcGFyc2VfQ0ZMQUdTID0gLUROTU5FUz0iYHdjIC1sIDwgaTMKKyBpMzg2X2xleC5vOiBpMzg2X3BhcnNlLmgKKyBpMzg2X2dlbmRpc19MREFERCA9ICQobGliZXUpIC1sbSAkKGxpYm11ZGZsYXApCisgCisraWYgVVNFX1VDTElCQworK2kzODZfZ2VuZGlzX0xEQUREICs9IC1sdWFyZ3AgLWxpbnRsCisrZW5kaWYKKysKKyBpMzg2X3BhcnNlLmg6IGkzODZfcGFyc2UuYyA7CisgCisgbm9pbnN0X0hFQURFUlMgPSBtZW1vcnktYWNjZXNzLmggaTM4Nl9wYXJzZS5oIGkzODZfZGF0YS5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE5OGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaApAQCAtMCwwICsxLDE2MzIgQEAKKyNkZWZpbmUgTU5FTU9OSUNfQklUUyAxMAorI2RlZmluZSBTVUZGSVhfQklUUyAzCisjZGVmaW5lIEZDVDFfQklUUyA3CisjZGVmaW5lIFNUUjFfQklUUyA0CisjZGVmaW5lIE9GRjFfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMV8xX0JJQVMgMworI2RlZmluZSBPRkYxXzJfQklUUyA3CisjZGVmaW5lIE9GRjFfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMV8zX0JJVFMgMQorI2RlZmluZSBPRkYxXzNfQklBUyA3CisjZGVmaW5lIEZDVDJfQklUUyA2CisjZGVmaW5lIFNUUjJfQklUUyAyCisjZGVmaW5lIE9GRjJfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMl8xX0JJQVMgNQorI2RlZmluZSBPRkYyXzJfQklUUyA3CisjZGVmaW5lIE9GRjJfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJVFMgNAorI2RlZmluZSBPRkYyXzNfQklBUyA3CisjZGVmaW5lIEZDVDNfQklUUyA0CisjZGVmaW5lIFNUUjNfQklUUyAxCisjZGVmaW5lIE9GRjNfMV9CSVRTIDYKKyNkZWZpbmUgT0ZGM18xX0JJQVMgMTAKKyNkZWZpbmUgT0ZGM18yX0JJVFMgMQorI2RlZmluZSBPRkYzXzJfQklBUyAyMQorCisjaW5jbHVkZSA8aTM4Nl9kYXRhLmg+CisKKyNkZWZpbmUgc3VmZml4X25vbmUgMAorI2RlZmluZSBzdWZmaXhfdyAxCisjZGVmaW5lIHN1ZmZpeF93MCAyCisjZGVmaW5lIHN1ZmZpeF9XIDMKKyNkZWZpbmUgc3VmZml4X3R0dG4gNAorI2RlZmluZSBzdWZmaXhfRCA3CisjZGVmaW5lIHN1ZmZpeF93MSA1CisjZGVmaW5lIHN1ZmZpeF9XMSA2CisKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMV9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2F4LAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2Rpc3A4LAorICBGQ1RfZHNfYngsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tJHMsCisgIEZDVF9pbW0kdywKKyAgRkNUX2ltbTE2LAorICBGQ1RfaW1tNjQkdywKKyAgRkNUX2ltbTgsCisgIEZDVF9pbW1zOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQxNnJfbSwKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCQ4cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnNjQsCisgIEZDVF9yZWwsCisgIEZDVF9zZWwsCisgIEZDVF9zcmVnMiwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMV9zdHJbXSA9CisgICIlYXhcMCIKKyAgIiVjbFwwIgorICAiJXJheFwwIgorICAiJXN0XDAiCisgICIleG1tMFwwIgorICAiKiI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDFfc3RyX2lkeFtdID0geworICAwLAorICA0LAorICA4LAorICAxMywKKyAgMTcsCisgIDIzLAorfTsKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMl9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2Fic3ZhbCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9vcmVnLAorICBGQ1Rfb3JlZyR3LAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMl9zdHJbXSA9CisgICIlcmN4XDAiCisgICIlc3QiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AyX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNSwKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDNfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDNfc3RyW10gPQorICAiJXJkeCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDNfc3RyX2lkeFtdID0geworICAwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zdHJfZW5jIGluc3RydGFiW10gPQoreworICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic2YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Jzd2FwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbHRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNleGl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Ntb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3B1aWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFicywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnRzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsZzIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxuMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkeiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZjJ4bTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnBhdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHRyYWN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeHAxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3FydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJuZGludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNjYWxlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkY3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0ZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVscCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZibGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zic3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9md2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5jbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZudSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZybCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZnJlZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuaW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHB0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9obHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lucywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zd2FwZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmxwZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaXJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDYsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWF2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGZzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xncywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ2R0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9saWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2NrLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2RzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sdHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMzUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2JsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnN3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6YmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92endsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25lZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdXNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BjbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbm90LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXRzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkbXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZHBtYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmR0c2MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NjYXMsIC5yZXAgPSAwLCAucmVwZSA9IDEsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWxhdW5jaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZXN1bWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9mZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZWFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Ztd3JpdGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2dkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW9uaXRvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDQsIC5zdHIzID0gMSwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9td2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG9zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VkMmEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3diaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2hudGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd3Jtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hsYXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkbXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0bXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNsZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzaGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2dldHNlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tscWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxMnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2xlYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9uLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZmx1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnNlcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3VzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR2YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhtaW5wb3N1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKK307CitzdGF0aWMgY29uc3QgdWludDhfdCBtYXRjaF9kYXRhW10gPQoreworICAweDEsIDB4ZmUsIDB4MTQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4MTAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDAsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgyNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHgyMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MTIsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJkLCAwLCAwLAorICAweDEyLCAweGYsIDB4ZjgsIDB4YzgsCisgIDB4MjMsIDB4ZiwgMHhhMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDB4YmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGIzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhhYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDI4LAorICAweDExLCAweGU4LAorICAweDEyLCAweGZmLCAweDM4LCAweDEwLAorICAweDEyLCAweGZmLCAweDM4LCAweDE4LAorICAweDExLCAweDk4LAorICAweDExLCAweDk5LAorICAweDExLCAweGY4LAorICAweDExLCAweGZjLAorICAweDExLCAweGZhLAorICAweDIyLCAweGYsIDB4NSwKKyAgMHgyMiwgMHhmLCAweDYsCisgIDB4MjIsIDB4ZiwgMHg3LAorICAweDIyLCAweGYsIDB4MzQsCisgIDB4MjIsIDB4ZiwgMHgzNSwKKyAgMHgxMSwgMHhmNSwKKyAgMHgxMywgMHhmLCAweGYwLCAweDQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4M2MsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweDM4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4M2EsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGMyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE2LAorICAweDEzLCAweGYsIDB4ZmUsIDB4YjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YTIsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgxMSwgMHhjOCwKKyAgMHgyMiwgMHhkOSwgMHhkMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgyMiwgMHhkOSwgMHhlMSwKKyAgMHgyMiwgMHhkOSwgMHhlNCwKKyAgMHgyMiwgMHhkOSwgMHhlNSwKKyAgMHgyMiwgMHhkOSwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhlOSwKKyAgMHgyMiwgMHhkOSwgMHhlYSwKKyAgMHgyMiwgMHhkOSwgMHhlYiwKKyAgMHgyMiwgMHhkOSwgMHhlYywKKyAgMHgyMiwgMHhkOSwgMHhlZCwKKyAgMHgyMiwgMHhkOSwgMHhlZSwKKyAgMHgyMiwgMHhkOSwgMHhmMCwKKyAgMHgyMiwgMHhkOSwgMHhmMSwKKyAgMHgyMiwgMHhkOSwgMHhmMiwKKyAgMHgyMiwgMHhkOSwgMHhmMywKKyAgMHgyMiwgMHhkOSwgMHhmNCwKKyAgMHgyMiwgMHhkOSwgMHhmNSwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkOSwgMHhmOCwKKyAgMHgyMiwgMHhkOSwgMHhmOSwKKyAgMHgyMiwgMHhkOSwgMHhmYSwKKyAgMHgyMiwgMHhkOSwgMHhmYiwKKyAgMHgyMiwgMHhkOSwgMHhmYywKKyAgMHgyMiwgMHhkOSwgMHhmZCwKKyAgMHgyMiwgMHhkOSwgMHhmZSwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGM4LAorICAweDEyLCAweGRjLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGU4LAorICAweDEyLCAweGRjLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDE4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDI4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDMwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHg4LAorICAweDEyLCAweGRlLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkZiwgMHhlMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMiwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMywKKyAgMHgxMSwgMHg5YiwKKyAgMHgyMiwgMHhkYiwgMHhlMiwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDEwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZGUsIDB4ZDksCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDM4LAorICAweDEyLCAweGRhLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRkLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkYiwgMHhlMywKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHg4LAorICAweDEyLCAweGRkLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhmNCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhZiwgMCwgMCwKKyAgMHgyLCAweGZkLCAweDY5LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4ZTQsCisgIDB4MSwgMHhmZSwgMHhlYywKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAwLAorICAweDEsIDB4ZmUsIDB4NmMsCisgIDB4MTEsIDB4Y2QsCisgIDB4MTEsIDB4Y2MsCisgIDB4MjIsIDB4ZiwgMHg4LAorICAweDMzLCAweGYsIDB4MSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4Y2YsCisgIDB4MSwgMHhmMCwgMHg3MCwKKyAgMHgxMiwgMHhmLCAweGYwLCAweDgwLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MTEsIDB4ZTMsCisgIDB4MTEsIDB4ZWIsCisgIDB4MTEsIDB4ZTksCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZWEsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4OWYsCisgIDB4MjMsIDB4ZiwgMHgyLCAwLCAwLAorICAweDEyLCAweDhkLCAwLCAwLAorICAweDExLCAweGM5LAorICAweDIzLCAweGYsIDB4YjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDMwLAorICAweDExLCAweGYwLAorICAweDEsIDB4ZmUsIDB4YWMsCisgIDB4MTEsIDB4ZTIsCisgIDB4MTEsIDB4ZTEsCisgIDB4MTEsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHgzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4OGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhjNiwgMHgzOCwgMCwKKyAgMHgxLCAweGYwLCAweGIwLAorICAweDEsIDB4ZmUsIDB4YTAsCisgIDB4MSwgMHhmZSwgMHhhMiwKKyAgMHgyMywgMHhmLCAweDIwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIzLCAweGMwLCAweGMwLAorICAweDEyLCAweDhjLCAwLCAwLAorICAweDEyLCAweDhlLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTQsCisgIDB4MjMsIDB4ZiwgMHhiZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNywgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZjMsIDB4OTAsCisgIDB4MTEsIDB4OTAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhiOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGZlLCAweGMsCisgIDB4MSwgMHhmZSwgMHhlNiwKKyAgMHgxLCAweGZlLCAweGVlLAorICAweDEsIDB4ZmUsIDB4NmUsCisgIDB4MTIsIDB4OGYsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4OGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MSwKKyAgMHgxMSwgMHg5ZCwKKyAgMHgxMiwgMHhmZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgzMCwKKyAgMHgxLCAweGY4LCAweDUwLAorICAweDEsIDB4ZjgsIDB4NTgsCisgIDB4MSwgMHhmZCwgMHg2OCwKKyAgMHgxLCAweGU3LCAweDYsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MCwKKyAgMHgxMSwgMHg5YywKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmLCAweDMyLAorICAweDIyLCAweGYsIDB4MzMsCisgIDB4MjIsIDB4ZiwgMHgzMSwKKyAgMHgxMSwgMHhjMywKKyAgMHgxMSwgMHhjMiwKKyAgMHgxMSwgMHhjYiwKKyAgMHgxMSwgMHhjYSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGFhLAorICAweDExLCAweDllLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MTgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDFjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxOCwKKyAgMHgxLCAweGZlLCAweGFlLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YTUsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZCwgMCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzEsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMyLAorICAweDMzLCAweGYsIDB4MSwgMHhjMywKKyAgMHgzMywgMHhmLCAweDEsIDB4YzQsCisgIDB4MjMsIDB4ZiwgMHg3OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM5LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDIwLAorICAweDExLCAweGY5LAorICAweDExLCAweGZkLAorICAweDExLCAweGZiLAorICAweDEsIDB4ZmUsIDB4YWEsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4MjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDJjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDg0LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMCwKKyAgMHgyMiwgMHhmLCAweGIsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDI4LAorICAweDIyLCAweGYsIDB4OSwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDB4MWYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzMCwKKyAgMHgxMywgMHhmLCAweGZlLCAweGMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODYsIDAsIDAsCisgIDB4MSwgMHhmOCwgMHg5MCwKKyAgMHgxMSwgMHhkNywKKyAgMHgyLCAweGZlLCAweDMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDMwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGViLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTgsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEyLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE2LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTYsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzNywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDZmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDM4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQ4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGY4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZTgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmMCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGY4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2MsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2UsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2IsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGIsIDAsIDAsCisgIDB4MSwgMHhlNywgMHg3LAorfTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTRjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNjY4YWNjZjMyMmZkNzE4NWUyNzNiZmQ1MGI4NDMyMGU3MWQ5ZGU1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTAgQXByIDIwMTUgMDA6Mjk6MTggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gZWxmX2dldGFyc3ltOiBTaWxlbmNlIC1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZCBmYWxzZQorIHBvc2l0aXZlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgbGliZWxmL2VsZl9nZXRhcnN5bS5jIHwgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZl9nZXRhcnN5bS5jIGIvbGliZWxmL2VsZl9nZXRhcnN5bS5jCitpbmRleCBkMGJiMjhhLi4wODk1NGQyIDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZl9nZXRhcnN5bS5jCisrKysgYi9saWJlbGYvZWxmX2dldGFyc3ltLmMKK0BAIC0xNjUsOCArMTY1LDEzIEBAIGVsZl9nZXRhcnN5bSAoZWxmLCBwdHIpCisgICAgICAgaW50IHcgPSBpbmRleDY0X3AgPyA4IDogNDsKKyAKKyAgICAgICAvKiBXZSBoYXZlIGFuIGFyY2hpdmUuICBUaGUgZmlyc3Qgd29yZCBpbiB0aGVyZSBpcyB0aGUgbnVtYmVyIG9mCistCSBlbnRyaWVzIGluIHRoZSB0YWJsZS4gICovCistICAgICAgdWludDY0X3QgbjsKKysJIGVudHJpZXMgaW4gdGhlIHRhYmxlLgorKwkgU2V0IHRvIFNJWkVfTUFYIGp1c3QgdG8gc2lsZW5jZSAtV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQKKysJIGVsZl9nZXRhcnN5bS5jOjI5MDo5OiBlcnJvcjogJ24nIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbgorKwkgVGhlIHJlYWRfbnVtYmVyX2VudHJpZXMgZnVuY3Rpb24gZG9lc24ndCBpbml0aWFsaXplIG4gb25seSB3aGVuIHJldHVybmluZworKwkgLTEgd2hpY2ggaW4gdHVybiBlbnN1cmVzIHRvIGp1bXAgb3ZlciB1c2FnZSBvZiB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCisrCSAqLworKyAgICAgIHVpbnQ2NF90IG4gPSBTSVpFX01BWDsKKyAgICAgICBzaXplX3Qgb2ZmID0gZWxmLT5zdGFydF9vZmZzZXQgKyBTQVJNQUcgKyBzaXplb2YgKHN0cnVjdCBhcl9oZHIpOworICAgICAgIGlmIChyZWFkX251bWJlcl9lbnRyaWVzICgmbiwgZWxmLCAmb2ZmLCBpbmRleDY0X3ApIDwgMCkKKyAJeworLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTIzYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitbUEFUQ0hdIGZpeCBhIHN0YWNrLXVzYWdlIHdhcm5pbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK25vdCB1c2UgYSB2YXJpYWJsZSB0byBhcyBhIGFycmF5IHNpemUsIG90aGVyd2lzZSB0aGUgd2FybmluZyB0byBlcnJvciB0aGF0CitzdGFjayB1c2FnZSBtaWdodCBiZSB1bmJvdW5kZWQgWy1XZXJyb3I9c3RhY2stdXNhZ2U9XSB3aWxsIGhhcHBlbgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9wcGNfaW5pdHJlZy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvcHBjX2luaXRyZWcuYyBiL2JhY2tlbmRzL3BwY19pbml0cmVnLmMKK2luZGV4IDY0ZjUzNzkuLjUyZGRlM2UgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCisrKysgYi9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCitAQCAtOTMsNyArOTMsNyBAQCBwcGNfc2V0X2luaXRpYWxfcmVnaXN0ZXJzX3RpZCAocGlkX3QgdGlkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJcmV0dXJuIGZhbHNlOworICAgICB9CisgICBjb25zdCBzaXplX3QgZ3BycyA9IHNpemVvZiAodXNlcl9yZWdzLnIuZ3ByKSAvIHNpemVvZiAoKnVzZXJfcmVncy5yLmdwcik7CistICBEd2FyZl9Xb3JkIGR3YXJmX3JlZ3NbZ3Byc107CisrICBEd2FyZl9Xb3JkIGR3YXJmX3JlZ3Nbc2l6ZW9mICh1c2VyX3JlZ3Muci5ncHIpIC8gc2l6ZW9mICgqdXNlcl9yZWdzLnIuZ3ByKV07CisgICBmb3IgKHVuc2lnbmVkIGdwciA9IDA7IGdwciA8IGdwcnM7IGdwcisrKQorICAgICBkd2FyZl9yZWdzW2dwcl0gPSB1c2VyX3JlZ3Muci5ncHJbZ3ByXTsKKyAgIGlmICghIHNldGZ1bmMgKDAsIGdwcnMsIGR3YXJmX3JlZ3MsIGFyZykpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlOTJkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Rpc2FibGUgdGhlIHRlc3QgdG8gY29udmVydCBldWMtanAKKworUmVtb3ZlIHRoZSB0ZXN0ICJUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOgorTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzIHByb3ZpZGVkIgorc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBIUC1VWCBhbmQgaWYgdGhlIGV1Yy1qcCBpcyBub3QKK2luc3RhbGxlZCBvbiB0aGUgaG9zdCwgdGhlIGRlcGVuZGVuY2Ugd2lsbCBiZSBidWlsdCB3aXRob3V0CitpY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxkLW5hdGl2ZSBidWlsZGluZyBmYWlsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBtNC9pY29udi5tNCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9tNC9pY29udi5tNCBiL200L2ljb252Lm00CitpbmRleCBhNTAzNjQ2Li4yOTlmMWViIDEwMDY0NAorLS0tIGEvbTQvaWNvbnYubTQKKysrKyBiL200L2ljb252Lm00CitAQCAtMTU5LDYgKzE1OSw3IEBAIGludCBtYWluICgpCisgICAgICAgfQorICAgfQorICNlbmRpZgorKyNpZiAwCisgICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgIHByb3ZpZGVkLiAgKi8KKyAgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KK0BAIC0xNzAsNiArMTcxLDcgQEAgaW50IG1haW4gKCkKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyB9XV0pXSwKKyAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3YzRlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNjI1IEBACitGcm9tIDBkYjE2ODdlZWUwYjRkMTZjY2JjNDBkYjVhMDZiNTc0ZmNhNjYxNGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE0IE5vdiAyMDE0IDE1OjI1OjQyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlYmFzZSBhcm1fYmFja2VuZC5kaWZmIGZyb20gMC4xNTkgdG8gMC4xNjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvYXJtX2luaXQuYyAgICAgICAgICAgICAgICAgfCAgMTggKysrKy0KKyBiYWNrZW5kcy9hcm1fcmVncy5jICAgICAgICAgICAgICAgICB8IDEzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBiYWNrZW5kcy9hcm1fcmV0dmFsLmMgICAgICAgICAgICAgICB8ICA0NCArKysrKysrKysrKy0KKyBiYWNrZW5kcy9saWJlYmxfYXJtLmggICAgICAgICAgICAgICB8ICAgOSArKysKKyBsaWJlbGYvZWxmLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArKysKKyB0ZXN0cy9ydW4tYWRkcmNmaS5zaCAgICAgICAgICAgICAgICB8ICA5MyArKysrKysrKysrKysrKysrKysrKysrKystCisgdGVzdHMvcnVuLWFsbHJlZ3Muc2ggICAgICAgICAgICAgICAgfCAgOTUgKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyB0ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaCB8ICAxMSArKy0KKyA4IGZpbGVzIGNoYW5nZWQsIDQwMSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYmFja2VuZHMvbGliZWJsX2FybS5oCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggMzI4M2M5Ny4uOGI1N2QzZiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC0zNSwyMSArMzUsMzIgQEAKKyAjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX0FSTV8KKyAjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorIAorKyNpbmNsdWRlICJsaWJlYmxfYXJtLmgiCisrCisgLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gYXJtX3JlbG9jLmRlZi4gICovCisgI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorIAorIAorIGNvbnN0IGNoYXIgKgorIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKy0gICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVsZiAqZWxmOworICAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworICAgICAgRWJsICplaDsKKyAgICAgIHNpemVfdCBlaGxlbjsKKyB7CisrICBpbnQgc29mdF9mbG9hdCA9IDA7CisrCisgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKyAgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfQVJNX1NPRlRfRkxPQVQpKQorKyAgICAgIHNvZnRfZmxvYXQgPSAxOworKyAgfQorKworICAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKyAgIGVoLT5uYW1lID0gIkFSTSI7CisgICBhcm1faW5pdF9yZWxvYyAoZWgpOworQEAgLTYxLDcgKzcyLDEwIEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgIEhPT0sgKGVoLCBjb3JlX25vdGUpOworICAgSE9PSyAoZWgsIGF1eHZfaW5mbyk7CisgICBIT09LIChlaCwgY2hlY2tfb2JqZWN0X2F0dHJpYnV0ZSk7CistICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIGlmIChzb2Z0X2Zsb2F0KQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkOworICAgSE9PSyAoZWgsIGFiaV9jZmkpOworICAgSE9PSyAoZWgsIGNoZWNrX3JlbG9jX3RhcmdldF90eXBlKTsKKyAKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1fcmVncy5jIGIvYmFja2VuZHMvYXJtX3JlZ3MuYworaW5kZXggMjFjNWFkMy4uNGVlMTAzOSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9yZWdzLmMKKysrKyBiL2JhY2tlbmRzL2FybV9yZWdzLmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorIAorICNkZWZpbmUgQkFDS0VORCBhcm1fCitAQCAtNzYsNiArNzcsOSBAQCBhcm1fcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgIGJyZWFrOworIAorICAgICBjYXNlIDE2ICsgMCAuLi4gMTYgKyA3OgorKyAgICAgIC8qIEFBRFdBUkYgc2F5cyB0aGF0IHRoZXJlIGFyZSBubyByZWdpc3RlcnMgaW4gdGhhdCByYW5nZSwKKysgICAgICAgKiBidXQgZ2NjIG1hcHMgRlBBIHJlZ2lzdGVycyBoZXJlCisrICAgICAgICovCisgICAgICAgcmVnbm8gKz0gOTYgLSAxNjsKKyAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICBjYXNlIDk2ICsgMCAuLi4gOTYgKyA3OgorQEAgLTg3LDExICs5MSwxMzkgQEAgYXJtX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICBuYW1lbGVuID0gMjsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSA2NCArIDAgLi4uIDY0ICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gcmVnbm8gLSA2NCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSA2NCArIDEwIC4uLiA2NCArIDMxOgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSAocmVnbm8gLSA2NCkgLyAxMCArICcwJzsKKysgICAgICBuYW1lWzJdID0gKHJlZ25vIC0gNjQpICUgMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTA0ICsgMCAuLi4gMTA0ICsgNzoKKysgICAgICAvKiBYWFggVE9ETzoKKysgICAgICAgKiBUaGlzIGNhbiBiZSBlaXRoZXIgaW50ZWwgd2lyZWxlc3MgTU1YIGdlbmVyYWwgcHVycG9zZS9jb250cm9sCisrICAgICAgICogcmVnaXN0ZXJzIG9yIHhzY2FsZSBhY2N1bXVsYXRvciwgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgdXNhZ2UuCisrICAgICAgICogV2Ugb25seSBoYXZlIHRoZSBpbnRlbCB3aXJlbGVzcyBNTVggaGVyZSBub3cuCisrICAgICAgICogVGhlIG5hbWUgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIHhzY2FsZSBhY2N1bXVsYXRvciB0b28uICovCisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG1lbWNweShuYW1lLCAid2NnciIsIDQpOworKyAgICAgIG5hbWVbNF0gPSByZWdubyAtIDEwNCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAwIC4uLiAxMTIgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTEyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDEwIC4uLiAxMTIgKyAxNToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSAnMSc7CisrICAgICAgbmFtZVszXSA9IHJlZ25vIC0gMTEyIC0gMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMTI4OgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKyAgICAgICByZXR1cm4gc3RwY3B5IChuYW1lLCAic3BzciIpICsgMSAtIG5hbWU7CisgCisrICAgIGNhc2UgMTI5OgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2ZpcSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMwOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2lycSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMxOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2FidCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMyOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3VuZCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMzOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3N2YyIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTQ0IC4uLiAxNTA6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91c3IiLCByZWdubyAtIDE0NCArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTEgLi4uIDE1NzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2ZpcSIsIHJlZ25vIC0gMTUxICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1OCAuLi4gMTU5OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfaXJxIiwgcmVnbm8gLSAxNTggKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MCAuLi4gMTYxOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfYWJ0IiwgcmVnbm8gLSAxNjAgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MiAuLi4gMTYzOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdW5kIiwgcmVnbm8gLSAxNjIgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2NCAuLi4gMTY1OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfc3ZjIiwgcmVnbm8gLSAxNjQgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE5MiAuLi4gMTk5OgorKyAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdjJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxOTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMjU2ICsgMCAuLi4gMjU2ICsgOToKKysgICAgICAvKiBYWFggVE9ETzogTmVvbiBhbHNvIHVzZXMgdGhvc2UgcmVnaXN0ZXJzIGFuZCBjYW4gY29udGFpbgorKyAgICAgICAqIGJvdGggZmxvYXQgYW5kIGludGVnZXJzICovCisgICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKyAgICAgICAqYml0cyA9IDY0OworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9yZXR2YWwuYyBiL2JhY2tlbmRzL2FybV9yZXR2YWwuYworaW5kZXggN2FjZWQ3NC4uMDUyMTMyZSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9yZXR2YWwuYworKysrIGIvYmFja2VuZHMvYXJtX3JldHZhbC5jCitAQCAtNDgsNiArNDgsMTMgQEAgc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisgI2RlZmluZSBubG9jX2ludHJlZwkxCisgI2RlZmluZSBubG9jX2ludHJlZ3MobikJKDIgKiAobikpCisgCisrLyogZjEgICovIC8qIFhYWCBUT0RPOiBmMCBjYW4gYWxzbyBoYXZlIG51bWJlciA5NiBpZiBwcm9ncmFtIHdhcyBjb21waWxlZCB3aXRoIC1tYWJpPWFhcGNzICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzE2IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworIC8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorICAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKyAgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluIHIwLiAgKi8KK0BAIC01OCw4ICs2NSw5IEBAIHN0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorICNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorIAorIAorLWludAorLWFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKytzdGF0aWMgaW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwKKysJCSAgICAgICAgICAgIGludCBzb2Z0X2Zsb2F0KQorIHsKKyAgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisgICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KK0BAIC05OCwxNCArMTA2LDMxIEBAIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyAJICAgIGVsc2UKKyAJICAgICAgcmV0dXJuIC0xOworIAkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwl7CisrCSAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCSAgICAgICAgICAgICAgICAgICAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgcmV0dXJuIC0xOworKworKwkgIGlmICgoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KSAmJiAhc29mdF9mbG9hdCkKKysJICAgIHsKKysJICAgICAgKmxvY3AgPSBsb2NfZnByZWc7CisrCSAgICAgIGlmIChzaXplIDw9IDgpCisrCQlyZXR1cm4gbmxvY19mcHJlZzsKKysJICAgICAgZ290byBhZ2dyZWdhdGU7CisrCSAgICB9CisrCX0KKyAJaWYgKHNpemUgPD0gMTYpCisgCSAgeworIAkgIGludHJlZzoKKyAJICAgICpsb2NwID0gbG9jX2ludHJlZzsKKyAJICAgIHJldHVybiBzaXplIDw9IDQgPyBubG9jX2ludHJlZyA6IG5sb2NfaW50cmVncyAoKHNpemUgKyAzKSAvIDQpOworIAkgIH0KKysJICAvKiBmYWxsIHRocm91Z2guICovCisgCisgICAgICAgYWdncmVnYXRlOgorKwkvKiBYWFggVE9ETyBzb21ldGltZXMgYWdncmVnYXRlcyBhcmUgcmV0dXJuZWQgaW4gcjAgKC1tYWJpPWFhcGNzKSAqLworIAkqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisgCXJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKyAgICAgICB9CitAQCAtMTI1LDMgKzE1MCwxOCBAQCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisgICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworICAgcmV0dXJuIC0yOworIH0KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1tc29mdC1mbG9hdCAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbWhhcmQtZmxvYXQgKGN1cnJlbnQgZGVmYXVsdCkgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2xpYmVibF9hcm0uaCBiL2JhY2tlbmRzL2xpYmVibF9hcm0uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMwMDc3MGMKKy0tLSAvZGV2L251bGwKKysrKyBiL2JhY2tlbmRzL2xpYmVibF9hcm0uaAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0FSTV9ICisrI2RlZmluZSBfTElCRUJMX0FSTV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJlbGYvZWxmLmggYi9saWJlbGYvZWxmLmgKK2luZGV4IGEzY2NlM2UuLjA4OTE2NzQgMTAwNjQ0CistLS0gYS9saWJlbGYvZWxmLmgKKysrKyBiL2xpYmVsZi9lbGYuaAorQEAgLTIzNDYsNiArMjM0Niw5IEBAIHR5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjQJMHgwNDAwMDAwMAorICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNQkweDA1MDAwMDAwCisgCisrLyogRUlfT1NBQkkgdmFsdWVzICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk1fQUVBQkkgICAgNjQgICAgICAvKiBDb250YWlucyBzeW1ib2wgdmVyc2lvbmluZy4gKi8KKysKKyAvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIuICAqLworICNkZWZpbmUgU1RUX0FSTV9URlVOQwkJU1RUX0xPUFJPQyAvKiBBIFRodW1iIGZ1bmN0aW9uLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fMTZCSVQJCVNUVF9ISVBST0MgLyogQSBUaHVtYiBsYWJlbC4gICovCitAQCAtMjM2MywxMiArMjM2NiwxOSBAQCB0eXBlZGVmIEVsZjMyX0FkZHIgRWxmMzJfQ29uZmxpY3Q7CisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFBoZHIgcF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFBUX0FSTV9FWElEWAkJKFBUX0xPUFJPQyArIDEpCS8qIEFSTSB1bndpbmQgc2VnbWVudC4gICovCisrI2RlZmluZSBQVF9BUk1fVU5XSU5ECQlQVF9BUk1fRVhJRFgKKyAKKyAvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgU2hkciBzaF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fRVhJRFgJCShTSFRfTE9QUk9DICsgMSkgLyogQVJNIHVud2luZCBzZWN0aW9uLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fUFJFRU1QVE1BUAkoU0hUX0xPUFJPQyArIDIpIC8qIFByZWVtcHRpb24gZGV0YWlscy4gICovCisgI2RlZmluZSBTSFRfQVJNX0FUVFJJQlVURVMJKFNIVF9MT1BST0MgKyAzKSAvKiBBUk0gYXR0cmlidXRlcyBzZWN0aW9uLiAgKi8KKyAKKysvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgRHluIGRfdGFnIGZpZWxkLiAgKi8KKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDEJKERUX0xPUFJPQyArIDApCisrI2RlZmluZSBEVF9BUk1fU1lNVEFCU1oJCShEVF9MT1BST0MgKyAxKQorKyNkZWZpbmUgRFRfQVJNX1BSRUVNVE1BQgkoRFRfTE9QUk9DICsgMikKKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDIJKERUX0xPUFJPQyArIDMpCisrI2RlZmluZSBEVF9BUk1fTlVNCQk0CisgCisgLyogQUFyY2g2NCByZWxvY3MuICAqLworIAorQEAgLTI2NDcsNiArMjY1Nyw3IEBAIHR5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKyAJCQkJCSAgIFRMUyBibG9jayAoTERSLCBTVFIpLiAgKi8KKyAjZGVmaW5lIFJfQVJNX1RMU19JRTEyR1AJMTExCS8qIDEyIGJpdCBHT1QgZW50cnkgcmVsYXRpdmUKKyAJCQkJCSAgIHRvIEdPVCBvcmlnaW4gKExEUikuICAqLworKy8qIDExMiAtIDEyNyBwcml2YXRlIHJhbmdlICovCisgI2RlZmluZSBSX0FSTV9NRV9UT08JCTEyOAkvKiBPYnNvbGV0ZS4gICovCisgI2RlZmluZSBSX0FSTV9USE1fVExTX0RFU0NTRVEJMTI5CisgI2RlZmluZSBSX0FSTV9USE1fVExTX0RFU0NTRVExNgkxMjkKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4tYWRkcmNmaS5zaCBiL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCitpbmRleCA1ZDMzMjQ2Li43ODQ2NGE4IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLWFkZHJjZmkuc2gKKysrKyBiL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCitAQCAtMjUzMCw2ICsyNTMwLDM4IEBAIGR3YXJmX2NmaV9hZGRyZnJhbWUgKC5laF9mcmFtZSk6IG5vIG1hdGNoaW5nIGFkZHJlc3MgcmFuZ2UKKyAJRlBBIHJlZzIxIChmNSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnMjIgKGY2KTogdW5kZWZpbmVkCisgCUZQQSByZWcyMyAoZjcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY0IChzMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjUgKHMxKTogdW5kZWZpbmVkCisrCVZGUCByZWc2NiAoczIpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY3IChzMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjggKHM0KTogdW5kZWZpbmVkCisrCVZGUCByZWc2OSAoczUpOiB1bmRlZmluZWQKKysJVkZQIHJlZzcwIChzNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzEgKHM3KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MiAoczgpOiB1bmRlZmluZWQKKysJVkZQIHJlZzczIChzOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzQgKHMxMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzUgKHMxMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzYgKHMxMik6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzcgKHMxMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzggKHMxNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzkgKHMxNSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODAgKHMxNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnODEgKHMxNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODIgKHMxOCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODMgKHMxOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODQgKHMyMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODUgKHMyMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODYgKHMyMik6IHVuZGVmaW5lZAorKwlWRlAgcmVnODcgKHMyMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODggKHMyNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODkgKHMyNSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTAgKHMyNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTEgKHMyNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTIgKHMyOCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTMgKHMyOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTQgKHMzMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTUgKHMzMSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnOTYgKGYwKTogdW5kZWZpbmVkCisgCUZQQSByZWc5NyAoZjEpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzk4IChmMik6IHVuZGVmaW5lZAorQEAgLTI1MzgsNyArMjU3MCw2NiBAQCBkd2FyZl9jZmlfYWRkcmZyYW1lICguZWhfZnJhbWUpOiBubyBtYXRjaGluZyBhZGRyZXNzIHJhbmdlCisgCUZQQSByZWcxMDEgKGY1KTogdW5kZWZpbmVkCisgCUZQQSByZWcxMDIgKGY2KTogdW5kZWZpbmVkCisgCUZQQSByZWcxMDMgKGY3KTogdW5kZWZpbmVkCistCWludGVnZXIgcmVnMTI4IChzcHNyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDQgKHdjZ3IwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDUgKHdjZ3IxKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDYgKHdjZ3IyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDcgKHdjZ3IzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDggKHdjZ3I0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDkgKHdjZ3I1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTAgKHdjZ3I2KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTEgKHdjZ3I3KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTIgKHdyMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTEzICh3cjEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNCAod3IyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTUgKHdyMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE2ICh3cjQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNyAod3I1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTggKHdyNik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE5ICh3cjcpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyMCAod3I4KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjEgKHdyOSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIyICh3cjEwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjMgKHdyMTEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNCAod3IxMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTI1ICh3cjEzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjYgKHdyMTQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNyAod3IxNSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMjggKHNwc3IpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTI5IChzcHNyX2ZpcSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzAgKHNwc3JfaXJxKTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEzMSAoc3Bzcl9hYnQpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMyIChzcHNyX3VuZCk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzMgKHNwc3Jfc3ZjKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ0IChyOF91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDUgKHI5X3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NiAocjEwX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NyAocjExX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0OCAocjEyX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0OSAocjEzX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MCAocjE0X3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MSAocjhfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTUyIChyOV9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTMgKHIxMF9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTQgKHIxMV9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTUgKHIxMl9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTYgKHIxM19maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTcgKHIxNF9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTggKHIxM19pcnEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTkgKHIxNF9pcnEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjAgKHIxM19hYnQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjEgKHIxNF9hYnQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjIgKHIxM191bmQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjMgKHIxNF91bmQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjQgKHIxM19zdmMpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjUgKHIxNF9zdmMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5MiAod2MwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTMgKHdjMSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk0ICh3YzIpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NSAod2MzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTYgKHdjNCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk3ICh3YzUpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5OCAod2M2KTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTkgKHdjNyk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU2IChkMCk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU3IChkMSk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU4IChkMik6IHVuZGVmaW5lZAorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1hbGxyZWdzLnNoIGIvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKK2luZGV4IDZmMzg2MmUuLjEzNTU3ZDUgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4tYWxscmVncy5zaAorKysrIGIvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKK0BAIC0yNjcxLDcgKzI2NzEsMjggQEAgaW50ZWdlciByZWdpc3RlcnM6CisgCSAxMzogc3AgKHNwKSwgYWRkcmVzcyAzMiBiaXRzCisgCSAxNDogbHIgKGxyKSwgYWRkcmVzcyAzMiBiaXRzCisgCSAxNTogcGMgKHBjKSwgYWRkcmVzcyAzMiBiaXRzCistCTEyODogc3BzciAoc3BzciksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTQ0OiByOF91c3IgKHI4X3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE0NTogcjlfdXNyIChyOV91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDY6IHIxMF91c3IgKHIxMF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDc6IHIxMV91c3IgKHIxMV91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDg6IHIxMl91c3IgKHIxMl91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDk6IHIxM191c3IgKHIxM191c3IpLCBzaWduZWQgMzIgYml0cworKwkxNTA6IHIxNF91c3IgKHIxNF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNTE6IHI4X2ZpcSAocjhfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUyOiByOV9maXEgKHI5X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1MzogcjEwX2ZpcSAocjEwX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NDogcjExX2ZpcSAocjExX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NTogcjEyX2ZpcSAocjEyX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NjogcjEzX2ZpcSAocjEzX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NzogcjE0X2ZpcSAocjE0X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1ODogcjEzX2lycSAocjEzX2lycSksIHNpZ25lZCAzMiBiaXRzCisrCTE1OTogcjE0X2lycSAocjE0X2lycSksIHNpZ25lZCAzMiBiaXRzCisrCTE2MDogcjEzX2FidCAocjEzX2FidCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MTogcjE0X2FidCAocjE0X2FidCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MjogcjEzX3VuZCAocjEzX3VuZCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MzogcjE0X3VuZCAocjE0X3VuZCksIHNpZ25lZCAzMiBiaXRzCisrCTE2NDogcjEzX3N2YyAocjEzX3N2YyksIHNpZ25lZCAzMiBiaXRzCisrCTE2NTogcjE0X3N2YyAocjE0X3N2YyksIHNpZ25lZCAzMiBiaXRzCisgRlBBIHJlZ2lzdGVyczoKKyAJIDE2OiBmMCAoZjApLCBmbG9hdCA5NiBiaXRzCisgCSAxNzogZjEgKGYxKSwgZmxvYXQgOTYgYml0cworQEAgLTI2ODksNyArMjcxMCw3MiBAQCBGUEEgcmVnaXN0ZXJzOgorIAkxMDE6IGY1IChmNSksIGZsb2F0IDk2IGJpdHMKKyAJMTAyOiBmNiAoZjYpLCBmbG9hdCA5NiBiaXRzCisgCTEwMzogZjcgKGY3KSwgZmxvYXQgOTYgYml0cworK01NWCByZWdpc3RlcnM6CisrCTEwNDogd2NncjAgKHdjZ3IwKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDU6IHdjZ3IxICh3Y2dyMSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA2OiB3Y2dyMiAod2NncjIpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwNzogd2NncjMgKHdjZ3IzKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDg6IHdjZ3I0ICh3Y2dyNCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA5OiB3Y2dyNSAod2NncjUpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTExMDogd2NncjYgKHdjZ3I2KSwgdW5zaWduZWQgMzIgYml0cworKwkxMTE6IHdjZ3I3ICh3Y2dyNyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTEyOiB3cjAgKHdyMCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTEzOiB3cjEgKHdyMSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE0OiB3cjIgKHdyMiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE1OiB3cjMgKHdyMyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE2OiB3cjQgKHdyNCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE3OiB3cjUgKHdyNSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE4OiB3cjYgKHdyNiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE5OiB3cjcgKHdyNyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIwOiB3cjggKHdyOCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIxOiB3cjkgKHdyOSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIyOiB3cjEwICh3cjEwKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjM6IHdyMTEgKHdyMTEpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNDogd3IxMiAod3IxMiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTI1OiB3cjEzICh3cjEzKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjY6IHdyMTQgKHdyMTQpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNzogd3IxNSAod3IxNSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTkyOiB3YzAgKHdjMCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTkzOiB3YzEgKHdjMSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk0OiB3YzIgKHdjMiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk1OiB3YzMgKHdjMyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk2OiB3YzQgKHdjNCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk3OiB3YzUgKHdjNSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk4OiB3YzYgKHdjNiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk5OiB3YzcgKHdjNyksIHVuc2lnbmVkIDMyIGJpdHMKKyBWRlAgcmVnaXN0ZXJzOgorKwkgNjQ6IHMwIChzMCksIGZsb2F0IDMyIGJpdHMKKysJIDY1OiBzMSAoczEpLCBmbG9hdCAzMiBiaXRzCisrCSA2NjogczIgKHMyKSwgZmxvYXQgMzIgYml0cworKwkgNjc6IHMzIChzMyksIGZsb2F0IDMyIGJpdHMKKysJIDY4OiBzNCAoczQpLCBmbG9hdCAzMiBiaXRzCisrCSA2OTogczUgKHM1KSwgZmxvYXQgMzIgYml0cworKwkgNzA6IHM2IChzNiksIGZsb2F0IDMyIGJpdHMKKysJIDcxOiBzNyAoczcpLCBmbG9hdCAzMiBiaXRzCisrCSA3MjogczggKHM4KSwgZmxvYXQgMzIgYml0cworKwkgNzM6IHM5IChzOSksIGZsb2F0IDMyIGJpdHMKKysJIDc0OiBzMTAgKHMxMCksIGZsb2F0IDMyIGJpdHMKKysJIDc1OiBzMTEgKHMxMSksIGZsb2F0IDMyIGJpdHMKKysJIDc2OiBzMTIgKHMxMiksIGZsb2F0IDMyIGJpdHMKKysJIDc3OiBzMTMgKHMxMyksIGZsb2F0IDMyIGJpdHMKKysJIDc4OiBzMTQgKHMxNCksIGZsb2F0IDMyIGJpdHMKKysJIDc5OiBzMTUgKHMxNSksIGZsb2F0IDMyIGJpdHMKKysJIDgwOiBzMTYgKHMxNiksIGZsb2F0IDMyIGJpdHMKKysJIDgxOiBzMTcgKHMxNyksIGZsb2F0IDMyIGJpdHMKKysJIDgyOiBzMTggKHMxOCksIGZsb2F0IDMyIGJpdHMKKysJIDgzOiBzMTkgKHMxOSksIGZsb2F0IDMyIGJpdHMKKysJIDg0OiBzMjAgKHMyMCksIGZsb2F0IDMyIGJpdHMKKysJIDg1OiBzMjEgKHMyMSksIGZsb2F0IDMyIGJpdHMKKysJIDg2OiBzMjIgKHMyMiksIGZsb2F0IDMyIGJpdHMKKysJIDg3OiBzMjMgKHMyMyksIGZsb2F0IDMyIGJpdHMKKysJIDg4OiBzMjQgKHMyNCksIGZsb2F0IDMyIGJpdHMKKysJIDg5OiBzMjUgKHMyNSksIGZsb2F0IDMyIGJpdHMKKysJIDkwOiBzMjYgKHMyNiksIGZsb2F0IDMyIGJpdHMKKysJIDkxOiBzMjcgKHMyNyksIGZsb2F0IDMyIGJpdHMKKysJIDkyOiBzMjggKHMyOCksIGZsb2F0IDMyIGJpdHMKKysJIDkzOiBzMjkgKHMyOSksIGZsb2F0IDMyIGJpdHMKKysJIDk0OiBzMzAgKHMzMCksIGZsb2F0IDMyIGJpdHMKKysJIDk1OiBzMzEgKHMzMSksIGZsb2F0IDMyIGJpdHMKKyAJMjU2OiBkMCAoZDApLCBmbG9hdCA2NCBiaXRzCisgCTI1NzogZDEgKGQxKSwgZmxvYXQgNjQgYml0cworIAkyNTg6IGQyIChkMiksIGZsb2F0IDY0IGJpdHMKK0BAIC0yNzIyLDYgKzI4MDgsMTMgQEAgVkZQIHJlZ2lzdGVyczoKKyAJMjg1OiBkMjkgKGQyOSksIGZsb2F0IDY0IGJpdHMKKyAJMjg2OiBkMzAgKGQzMCksIGZsb2F0IDY0IGJpdHMKKyAJMjg3OiBkMzEgKGQzMSksIGZsb2F0IDY0IGJpdHMKKytzdGF0ZSByZWdpc3RlcnM6CisrCTEyODogc3BzciAoc3BzciksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTI5OiBzcHNyX2ZpcSAoc3Bzcl9maXEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMDogc3Bzcl9pcnEgKHNwc3JfaXJxKSwgdW5zaWduZWQgMzIgYml0cworKwkxMzE6IHNwc3JfYWJ0IChzcHNyX2FidCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTMyOiBzcHNyX3VuZCAoc3Bzcl91bmQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMzogc3Bzcl9zdmMgKHNwc3Jfc3ZjKSwgdW5zaWduZWQgMzIgYml0cworIEVPRgorIAorICMgU2VlIHJ1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoIGZvciBpbnN0cnVjdGlvbnMgdG8gcmVnZW5lcmF0ZQorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoIGIvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKK2luZGV4IDAxZTQ1OTQuLjlhOGEzODAgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaAorKysrIGIvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKK0BAIC0zMCwxMiArMzAsMTEgQEAgTm90ZSBzZWdtZW50IG9mIDg5MiBieXRlcyBhdCBvZmZzZXQgMHgyNzQ6CisgICAgIHBpZDogMTEwODcsIHBwaWQ6IDExMDYzLCBwZ3JwOiAxMTA4Nywgc2lkOiAxMTA2MworICAgICB1dGltZTogMC4wMDAwMDAsIHN0aW1lOiAwLjAxMDAwMCwgY3V0aW1lOiAwLjAwMDAwMCwgY3N0aW1lOiAwLjAwMDAwMAorICAgICBvcmlnX3IwOiAtMSwgZnB2YWxpZDogMQorLSAgICByMDogICAgICAgICAgICAgMSAgcjE6ICAgLTEwOTE2NzI1MDggIHIyOiAgIC0xMDkxNjcyNTAwCistICAgIHIzOiAgICAgICAgICAgICAwICByNDogICAgICAgICAgICAgMCAgcjU6ICAgICAgICAgICAgIDAKKy0gICAgcjY6ICAgICAgICAgMzM3MjggIHI3OiAgICAgICAgICAgICAwICByODogICAgICAgICAgICAgMAorLSAgICByOTogICAgICAgICAgICAgMCAgcjEwOiAgLTEyMjU3MDM0OTYgIHIxMTogIC0xMDkxNjcyODQ0CistICAgIHIxMjogICAgICAgICAgICAwICBzcDogICAgMHhiZWVlNjRmNCAgbHI6ICAgIDB4YjZkYzNmNDgKKy0gICAgcGM6ICAgIDB4MDAwMDg1MDAgIHNwc3I6ICAweDYwMDAwMDEwCisrICAgIHIwOiAgICAgICAgICAgIDEgIHIxOiAgLTEwOTE2NzI1MDggIHIyOiAgLTEwOTE2NzI1MDAgIHIzOiAgICAgICAgICAgIDAKKysgICAgcjQ6ICAgICAgICAgICAgMCAgcjU6ICAgICAgICAgICAgMCAgcjY6ICAgICAgICAzMzcyOCAgcjc6ICAgICAgICAgICAgMAorKyAgICByODogICAgICAgICAgICAwICByOTogICAgICAgICAgICAwICByMTA6IC0xMjI1NzAzNDk2ICByMTE6IC0xMDkxNjcyODQ0CisrICAgIHIxMjogICAgICAgICAgIDAgIHNwOiAgIDB4YmVlZTY0ZjQgIGxyOiAgIDB4YjZkYzNmNDggIHBjOiAgIDB4MDAwMDg1MDAKKysgICAgc3BzcjogIDB4NjAwMDAwMTAKKyAgIENPUkUgICAgICAgICAgICAgICAgIDEyNCAgUFJQU0lORk8KKyAgICAgc3RhdGU6IDAsIHNuYW1lOiBSLCB6b21iOiAwLCBuaWNlOiAwLCBmbGFnOiAweDAwNDAwNTAwCisgICAgIHVpZDogMCwgZ2lkOiAwLCBwaWQ6IDExMDg3LCBwcGlkOiAxMTA2MywgcGdycDogMTEwODcsIHNpZDogMTEwNjMKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTRkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2Z1bmNfdmFsdWUucGF0Y2gKQEAgLTAsMCArMSwxNjUgQEAKK0Zyb206IE1hcmsgV2llbGFhcmQgPG1qd0ByZWRoYXQuY29tPgorRGF0ZTogU3VuLCAxNSBKdW4gMjAxNCAxMTozMDozNSArMDIwMAorU3ViamVjdDogbGliZWJsOiBBZGQgc3ltX2Z1bmNfdmFsdWUgaG9vay4KKworVGhlIEFSTSBFQUJJIHNheXMgdGhhdCB0aGUgemVybyBiaXQgb2YgZnVuY3Rpb24gc3ltYm9sIHN0X3ZhbHVlIGluZGljYXRlcword2hldGhlciB0aGUgc3ltYm9sIHBvaW50cyB0byBhIFRIVU1CIG9yIEFSTSBmdW5jdGlvbi4gQWRkIGEgbmV3IGVibCBob29rCit0byBhZGp1c3QgdGhlIHN0X3ZhbHVlIGluIHN1Y2ggYSBjYXNlIHNvIHRoYXQgd2UgZ2V0IHRoZSBhY3R1YWwgdmFsdWUgdGhhdAordGhlIHN5bWJvbCBwb2ludHMgdG8uIEl0IGlzbid0IGVhc2lseSBwb3NzaWJsZSB0byByZXVzZSB0aGUgZXhpc3RpbmcKK3Jlc29sdmVfc3ltX3ZhbHVlIGZvciB0aGlzIHB1cnBvc2UsIHNvIHdlIGVuZCB1cCB3aXRoIGFub3RoZXIgaG9vayB0aGF0CitjYW4gYmUgdXNlZCBmcm9tIGR3ZmxfbW9kdWxlX2dldHN5bSBhbmQgZWxmbGludC4KKworUmViYXNlIGFybV9mdW5jX3ZhbHVlLnBhdGNoIGZyb20gMC4xNTkgdG8gMC4xNjAKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FybV9pbml0LmMgICAgICAgICAgfCAgICAxICsKKyBiYWNrZW5kcy9hcm1fc3ltYm9sLmMgICAgICAgIHwgICAgOCArKysrKysrKworIGxpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMgfCAgICAyICstCisgbGliZWJsL01ha2VmaWxlLmFtICAgICAgICAgICB8ICAgIDMgKystCisgbGliZWJsL2VibC1ob29rcy5oICAgICAgICAgICB8ICAgIDMgKysrCisgbGliZWJsL2VibHN5bWZ1bmN2YWwuYyAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGliZWJsL2xpYmVibC5oICAgICAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggNzE3MTE4Ni4uOWYwMzYzMCAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC03OCw2ICs3OCw3IEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAgIEhPT0sgKGVoLCBhYmlfY2ZpKTsKKyAgIEhPT0sgKGVoLCBjaGVja19yZWxvY190YXJnZXRfdHlwZSk7CisrICBIT09LIChlaCwgc3ltX2Z1bmNfdmFsdWUpOworICAgSE9PSyAoZWgsIHN5bWJvbF90eXBlX25hbWUpOworIAorICAgLyogV2Ugb25seSB1bndpbmQgdGhlIGNvcmUgaW50ZWdlciByZWdpc3RlcnMuICAqLworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9zeW1ib2wuYyBiL2JhY2tlbmRzL2FybV9zeW1ib2wuYworaW5kZXggZGE0YTUwYS4uY2NlYTAzYiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9zeW1ib2wuYworKysrIGIvYmFja2VuZHMvYXJtX3N5bWJvbC5jCitAQCAtMTMwLDYgKzEzMCwxNCBAQCBhcm1fY2hlY2tfcmVsb2NfdGFyZ2V0X3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgRWxmNjRfV29yZCBzaF90eQorICAgcmV0dXJuIHNoX3R5cGUgPT0gU0hUX0FSTV9FWElEWDsKKyB9CisgCisrLyogQVJNIEVBQkkgc2F5cyB0aGF0IHRoZSBsb3cgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbgorKyAgIHN5bWJvbCB2YWx1ZSBpcyBhIFRIVU1CIGZ1bmN0aW9uIG9yIG5vdC4gIE1hc2sgaXQgb2ZmLiAgKi8KKytHRWxmX0FkZHIKKythcm1fc3ltX2Z1bmNfdmFsdWUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgR0VsZl9BZGRyIHZhbCkKKyt7CisrICByZXR1cm4gdmFsICYgfihHRWxmX0FkZHIpMTsKKyt9CisrCisgY29uc3QgY2hhciAqCisgYXJtX3N5bWJvbF90eXBlX25hbWUgKGludCB0eXBlLAorIAkJICAgICAgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKK2RpZmYgLS1naXQgYS9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jIGIvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYworaW5kZXggNDJkMmI2Ny4uZmIxOTJkNyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKKysrKyBiL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKK0BAIC0xMTksNyArMTE5LDcgQEAgX19saWJkd2ZsX2dldHN5bSAoRHdmbF9Nb2R1bGUgKm1vZCwgaW50IG5keCwgR0VsZl9TeW0gKnN5bSwgR0VsZl9BZGRyICphZGRyLAorICAgICAgZGVzY3JpcHRvcnMpLiAgKi8KKyAKKyAgIGNoYXIgKmlkZW50OworLSAgR0VsZl9BZGRyIHN0X3ZhbHVlID0gc3ltLT5zdF92YWx1ZSAmIGVibF9mdW5jX2FkZHJfbWFzayAobW9kLT5lYmwpOworKyAgR0VsZl9BZGRyIHN0X3ZhbHVlID0gZWJsX3N5bV9mdW5jX3ZhbHVlIChtb2QtPmVibCwgc3ltLT5zdF92YWx1ZSk7CisgICAqcmVzb2x2ZWQgPSBmYWxzZTsKKyAgIGlmICghIGFkanVzdF9zdF92YWx1ZSAmJiBtb2QtPmVfdHlwZSAhPSBFVF9SRUwgJiYgYWxsb2MKKyAgICAgICAmJiAoR0VMRl9TVF9UWVBFIChzeW0tPnN0X2luZm8pID09IFNUVF9GVU5DCitkaWZmIC0tZ2l0IGEvbGliZWJsL01ha2VmaWxlLmFtIGIvbGliZWJsL01ha2VmaWxlLmFtCitpbmRleCBlYzQ0NzdiLi44ODljMjFiIDEwMDY0NAorLS0tIGEvbGliZWJsL01ha2VmaWxlLmFtCisrKysgYi9saWJlYmwvTWFrZWZpbGUuYW0KK0BAIC01NSw3ICs1NSw4IEBAIGdlbl9TT1VSQ0VTID0gZWJsb3BlbmJhY2tlbmQuYyBlYmxjbG9zZWJhY2tlbmQuYyBlYmxzdHJ0YWIuYyBcCisgCSAgICAgIGVibHN5c3ZoYXNoZW50cnlzaXplLmMgZWJsYXV4dmluZm8uYyBlYmxjaGVja29iamF0dHIuYyBcCisgCSAgICAgIGVibF9jaGVja19zcGVjaWFsX3NlY3Rpb24uYyBlYmxfc3lzY2FsbF9hYmkuYyBlYmxhYmljZmkuYyBcCisgCSAgICAgIGVibHN0b3RoZXIuYyBlYmxpbml0cmVnLmMgZWJsZHdhcmZ0b3JlZ25vLmMgZWJsbm9ybWFsaXplcGMuYyBcCistCSAgICAgIGVibHVud2luZC5jIGVibHJlc29sdmVzeW0uYyBlYmxjaGVja3JlbG9jdGFyZ2V0dHlwZS5jCisrCSAgICAgIGVibHVud2luZC5jIGVibHJlc29sdmVzeW0uYyBlYmxjaGVja3JlbG9jdGFyZ2V0dHlwZS5jIFwKKysJICAgICAgZWJsc3ltZnVuY3ZhbC5jCisgCisgbGliZWJsX2FfU09VUkNFUyA9ICQoZ2VuX1NPVVJDRVMpCisgCitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibC1ob29rcy5oIGIvbGliZWJsL2VibC1ob29rcy5oCitpbmRleCAyZTMxNDQ2Li45ZGY5NDVkIDEwMDY0NAorLS0tIGEvbGliZWJsL2VibC1ob29rcy5oCisrKysgYi9saWJlYmwvZWJsLWhvb2tzLmgKK0BAIC0xOTEsNSArMTkxLDggQEAgYm9vbCBFQkxIT09LKHVud2luZCkgKEVibCAqZWJsLCBEd2FyZl9BZGRyIHBjLCBlYmxfdGlkX3JlZ2lzdGVyc190ICpzZXRmdW5jLAorICAgIChlLmcuIGZ1bmN0aW9uIGRlc2NyaXB0b3IgcmVzb2x2aW5nKSAgKi8KKyBib29sIEVCTEhPT0socmVzb2x2ZV9zeW1fdmFsdWUpIChFYmwgKmVibCwgR0VsZl9BZGRyICphZGRyKTsKKyAKKysvKiBSZXR1cm5zIHRoZSByZWFsIHZhbHVlIG9mIGEgc3ltYm9sIGZ1bmN0aW9uIGFkZHJlc3Mgb3Igb2Zmc2V0LiAgKi8KKytHRWxmX0FkZHIgRUJMSE9PSyhzeW1fZnVuY192YWx1ZSkgKEVibCAqZWJsLCBHRWxmX0FkZHIgdmFsKTsKKysKKyAvKiBEZXN0cnVjdG9yIGZvciBFTEYgYmFja2VuZCBoYW5kbGUuICAqLworIHZvaWQgRUJMSE9PSyhkZXN0cikgKHN0cnVjdCBlYmwgKik7CitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibHN5bWZ1bmN2YWwuYyBiL2xpYmVibC9lYmxzeW1mdW5jdmFsLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMGIzMjJmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJlYmwvZWJsc3ltZnVuY3ZhbC5jCitAQCAtMCwwICsxLDQzIEBACisrLyogVHVybiBhIHN5bWJvbCBmdW5jdGlvbiB2YWx1ZSBpbnRvIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzIG9yIG9mZnNldC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorKworKyAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcgorKworKyAgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKyAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKysgICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisrCisrICAgb3IKKysKKysgICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKyAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKysgICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisrCisrICAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKysKKysgICBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisrICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmCisrICAgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxpYmVibFAuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrCisrR0VsZl9BZGRyCisrZWJsX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCkKKyt7CisrICBpZiAoZWJsID09IE5VTEwgfHwgZWJsLT5zeW1fZnVuY192YWx1ZSA9PSBOVUxMKQorKyAgICByZXR1cm4gdmFsOworKworKyAgcmV0dXJuIGVibC0+c3ltX2Z1bmNfdmFsdWUgKGVibCwgdmFsKTsKKyt9CitkaWZmIC0tZ2l0IGEvbGliZWJsL2xpYmVibC5oIGIvbGliZWJsL2xpYmVibC5oCitpbmRleCA3ZGJmNDYwLi45NmMwNzZiIDEwMDY0NAorLS0tIGEvbGliZWJsL2xpYmVibC5oCisrKysgYi9saWJlYmwvbGliZWJsLmgKK0BAIC00NzIsNiArNDcyLDE3IEBAIGV4dGVybiBib29sIGVibF91bndpbmQgKEVibCAqZWJsLCBEd2FyZl9BZGRyIHBjLCBlYmxfdGlkX3JlZ2lzdGVyc190ICpzZXRmdW5jLAorIGV4dGVybiBib29sIGVibF9yZXNvbHZlX3N5bV92YWx1ZSAoRWJsICplYmwsIEdFbGZfQWRkciAqYWRkcikKKyAgICBfX25vbm51bGxfYXR0cmlidXRlX18gKDIpOworIAorKy8qIFJldHVybnMgdGhlIHJlYWwgdmFsdWUgb2YgYSBzeW1ib2wgZnVuY3Rpb24gYWRkcmVzcyBvciBvZmZzZXQKKysgICAoZS5nLiB3aGVuIHRoZSBzdF92YWx1ZSBjb250YWlucyBzb21lIGZsYWcgYml0cyB0aGF0IG5lZWQgdG8gYmUKKysgICBtYXNrZWQgb2ZmKS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gZWJsX3Jlc29sdmVfc3ltX3ZhbHVlIHdoaWNoCisrICAgb25seSB3b3JrcyBmb3IgYWN0dWFsIHN5bWJvbCBhZGRyZXNzZXMgKGluIG5vbi1FVF9SRUwgZmlsZXMpIHRoYXQKKysgICBtaWdodCByZXNvbHZlIHRvIGFuIGFkZHJlc3MgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi4KKysgICBlYmxfc3ltX2Z1bmNfdmFsdWUgaXMgY2FsbGVkIHRvIHR1cm4gdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGEKKysgICByZWFsIGFkZHJlc3Mgb3Igb2Zmc2V0ICh0aGUgb3JpZ2luYWwgdmFsdWUgbWlnaHQgbm90IGJlIGEgcmVhbAorKyAgIGFkZHJlc3MpLiAgVGhpcyB3b3JrcyBmb3IgYm90aCBFVF9SRUwgd2hlbiB0aGUgdmFsdWUgaXMgYSBzZWN0aW9uCisrICAgb2Zmc2V0IG9yIEVUX0VYRUMgb3IgRVRfRFlOIHN5bWJvbCB2YWx1ZXMsIHdoaWNoIGFyZSBhZGRyZXNzZXMuICAqLworK2V4dGVybiBHRWxmX0FkZHIgZWJsX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCk7CisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgfQorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJiMzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbTogTWFyayBXaWVsYWFyZCA8bWp3QHJlZGhhdC5jb20+CitEYXRlOiBTdW4sIDE1IEp1biAyMDE0IDEyOjMwOjAyICswMjAwCitTdWJqZWN0OiBsaWJlYmw6IEFkZCBlYmxfdW53aW5kX3JldF9tYXNrLgorCitBbm90aGVyIEFSTSBvZGRpdHkuIEEgcmV0dXJuIHZhbHVlIGFkZHJlc3MgaW4gYW4gdW53aW5kIHdpbGwgY29udGFpbiBhbgorZXh0cmEgYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdG8gcmV0dXJuIHRvIGEgcmVndWxhciBBUk0gb3IgVEhVTUIgZnVuY3Rpb24uCitBZGQgYSBuZXcgZWJsIGZ1bmN0aW9uIHRvIHJldHVybiBhIG1hc2sgdG8gdXNlIHRvIGdldCB0aGUgYWN0dWFsIHJldHVybgorYWRkcmVzcyBkdXJpbmcgYW4gdW53aW5kIGVibF91bndpbmRfcmV0X21hc2suCisKK1JlYmFzZSBhcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoIGZyb20gMC4xNTkgdG8gMC4xNjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvYXJtX2luaXQuYyB8IDMgKysrCisgbGliZWJsL2VibGluaXRyZWcuYyB8IDggKysrKysrKysKKyBsaWJlYmwvbGliZWJsLmggICAgIHwgNCArKysrCisgbGliZWJsL2xpYmVibFAuaCAgICB8IDYgKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggMjI2NjgyOS4uZjhkZjA0MiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC04Nyw1ICs4Nyw4IEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgIC8qIEJpdCB6ZXJvIGVuY29kZXMgd2hldGhlciBhbiBmdW5jdGlvbiBhZGRyZXNzIGlzIFRIVU1CIG9yIEFSTS4gKi8KKyAgIGVoLT5mdW5jX2FkZHJfbWFzayA9IH4oR0VsZl9BZGRyKTE7CisgCisrICAvKiBCaXQgemVybyBlbmNvZGVzIHdoZXRoZXIgdG8gcmV0dXJuIHRvIGEgVEhVTUIgb3IgQVJNIGZ1bmN0aW9uLiAqLworKyAgZWgtPnVud2luZF9yZXRfbWFzayA9IH4oR0VsZl9BZGRyKTE7CisrCisgICByZXR1cm4gTU9EVkVSU0lPTjsKKyB9CitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibGluaXRyZWcuYyBiL2xpYmVibC9lYmxpbml0cmVnLmMKK2luZGV4IDU3MjliM2MuLmNhNjgxYzAgMTAwNjQ0CistLS0gYS9saWJlYmwvZWJsaW5pdHJlZy5jCisrKysgYi9saWJlYmwvZWJsaW5pdHJlZy5jCitAQCAtNTYsMyArNTYsMTEgQEAgZWJsX2Z1bmNfYWRkcl9tYXNrIChFYmwgKmVibCkKKyAgIHJldHVybiAoKGVibCA9PSBOVUxMIHx8IGVibC0+ZnVuY19hZGRyX21hc2sgPT0gMCkKKyAJICA/IH4oR0VsZl9BZGRyKTAgOiBlYmwtPmZ1bmNfYWRkcl9tYXNrKTsKKyB9CisrCisrR0VsZl9BZGRyCisrZWJsX3Vud2luZF9yZXRfbWFzayAoRWJsICplYmwpCisreworKyAgcmV0dXJuICgoZWJsID09IE5VTEwgfHwgZWJsLT51bndpbmRfcmV0X21hc2sgPT0gMCkKKysJICA/IH4oR0VsZl9BZGRyKTAgOiBlYmwtPnVud2luZF9yZXRfbWFzayk7CisrfQorKworZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmwuaCBiL2xpYmVibC9saWJlYmwuaAoraW5kZXggNDBjZjYzNS4uYmU3MDAyNyAxMDA2NDQKKy0tLSBhL2xpYmVibC9saWJlYmwuaAorKysrIGIvbGliZWJsL2xpYmVibC5oCitAQCAtNDIwLDYgKzQyMCwxMCBAQCBleHRlcm4gc2l6ZV90IGVibF9mcmFtZV9ucmVncyAoRWJsICplYmwpCisgICAgdGFibGVzKSBpcyBuZWVkZWQuICAqLworIGV4dGVybiBHRWxmX0FkZHIgZWJsX2Z1bmNfYWRkcl9tYXNrIChFYmwgKmVibCk7CisgCisrLyogTWFzayB0byB1c2UgZm9yIHVud2luZCByZXR1cm4gYWRkcmVzcyBpbiBjYXNlIHRoZSBhcmNoaXRlY3R1cmUgYWRkcworKyAgIHNvbWUgZXh0cmEgbm9uLWFkZHJlc3MgYml0cyB0byBpdC4gICovCisrZXh0ZXJuIEdFbGZfQWRkciBlYmxfdW53aW5kX3JldF9tYXNrIChFYmwgKmVibCk7CisrCisgLyogQ29udmVydCAqUkVHTk8gYXMgaXMgaW4gRFdBUkYgdG8gYSBsb3dlciByYW5nZSBzdWl0YWJsZSBmb3IKKyAgICBEd2FyZl9GcmFtZS0+UkVHUyBpbmRleGluZy4gICovCisgZXh0ZXJuIGJvb2wgZWJsX2R3YXJmX3RvX3JlZ25vIChFYmwgKmVibCwgdW5zaWduZWQgKnJlZ25vKQorZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmxQLmggYi9saWJlYmwvbGliZWJsUC5oCitpbmRleCBkYmQ2N2YzLi5lMThhY2U2IDEwMDY0NAorLS0tIGEvbGliZWJsL2xpYmVibFAuaAorKysrIGIvbGliZWJsL2xpYmVibFAuaAorQEAgLTcwLDYgKzcwLDEyIEBAIHN0cnVjdCBlYmwKKyAgICAgIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgdGhlIGFjdHVhbCBtYXNrIHRvIHVzZS4gICovCisgICBHRWxmX0FkZHIgZnVuY19hZGRyX21hc2s7CisgCisrICAvKiBNYXNrIHRvIHVzZSB0byBnZXQgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gYW4gdW53aW5kIGluIGNhc2UgdGhlCisrICAgICBhcmNoaXRlY3R1cmUgYWRkcyBzb21lIGV4dHJhIG5vbi1hZGRyZXNzIGJpdHMgdG8gaXQuICBXaGVuIG5vdAorKyAgICAgaW5pdGlhbGl6ZWQgKDApIHRoZW4gZWJsX3Vud2luZF9yZXRfbWFzayB3aWxsIHJldHVybiB+MCwgb3RoZXJ3aXNlCisrICAgICBpdCBzaG91bGQgYmUgdGhlIGFjdHVhbCBtYXNrIHRvIHVzZS4gICovCisrICBHRWxmX0FkZHIgdW53aW5kX3JldF9tYXNrOworKworICAgLyogRnVuY3Rpb24gZGVzY3JpcHRvciBsb2FkIGFkZHJlc3MgYW5kIHRhYmxlIGFzIHVzZWQgYnkKKyAgICAgIGVibF9yZXNvbHZlX3N5bV92YWx1ZSBpZiBhdmFpbGFibGUgZm9yIHRoaXMgYXJjaC4gICovCisgICBHRWxmX0FkZHIgZmRfYWRkcjsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTNiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvZml4aGVhZGVyY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRm9yIHNvbWUgYmluYXJpZXMgd2UgY2FuIGdldCBhIGludmFsaWQgc2VjdGlvbiBhbGlnbm1lbnQsIGZvciBleGFtcGxlIGlmIAorc2hfYWxpZ24gPSAxIGFuZCBzaF9hZGRyYWxpZ24gaXMgMC4gSW4gdGhlIGNhc2Ugb2YgYSB6ZXJvIHNpemUgc2VjdGlvbiBsaWtlIAorIi5ub3RlLkdOVS1zdGFjayIsIHRoaXMgaXMgaXJyZWxhdmVudCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBhbmQgd2Ugc2hvdWxkbid0CitlcnJvciBpbiB0aGlzIGNhc2UuCisKK1JQIDIwMTQvNi8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCistLS0gYS9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCisrKysgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCitAQCAtMzM5LDggKzMzOSw4IEBAIF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVudWxsX3dybG9jaykgKEVsZiAqZWxmLCBpbnQgKmNoYW5nZV9ib3AsIHNpemVfdCBzaG51bSkKKyAJCSAgICAgd2UgdGVzdCBmb3IgdGhlIGFsaWdubWVudCBvZiB0aGUgc2VjdGlvbiBiZWluZyBsYXJnZQorIAkJICAgICBlbm91Z2ggZm9yIHRoZSBsYXJnZXN0IGFsaWdubWVudCByZXF1aXJlZCBieSBhIGRhdGEKKyAJCSAgICAgYmxvY2suICAqLworLQkJICBpZiAodW5saWtlbHkgKCEgcG93ZXJvZjIgKHNoZHItPnNoX2FkZHJhbGlnbikpCistCQkgICAgICB8fCB1bmxpa2VseSAoKHNoZHItPnNoX2FkZHJhbGlnbiA/OiAxKSA8IHNoX2FsaWduKSkKKysJCSAgaWYgKHNoZHItPnNoX3NpemUgJiYgKHVubGlrZWx5ICghIHBvd2Vyb2YyIChzaGRyLT5zaF9hZGRyYWxpZ24pKQorKwkJICAgICAgfHwgdW5saWtlbHkgKChzaGRyLT5zaF9hZGRyYWxpZ24gPzogMSkgPCBzaF9hbGlnbikpKQorIAkJICAgIHsKKyAJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0FMSUdOKTsKKyAJCSAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTFhNzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2hwcGFfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsODAwIEBACitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19pbml0LmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsNzQgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBQQS1SSVNDIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfUEFSSVNDXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBwYXJpc2NfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIlBBLVJJU0MiOworKyAgcGFyaXNjX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgbWFjaGluZV9mbGFnX2NoZWNrKTsKKysgIEhPT0sgKGVoLCBzeW1ib2xfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWdtZW50X3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VjdGlvbl90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKyAgaWYgKHBhNjQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMjsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwxNTkgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgUEEtUklTQyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKytwYXJpc2NfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwsIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICBpZiAoZWJsLT5lbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVibC0+ZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKworKyAgaW50IG5yZWdzID0gcGE2NCA/IDEyNyA6IDEyODsKKysKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBucmVnczsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPj0gbnJlZ3MgfHwgbmFtZWxlbiA8IDYpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJSI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSA1OworKyAgICB9CisrICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgfQorKyAgZWxzZQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysKKysgIGlmIChyZWdubyA8IDMzKSB7CisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgMCAuLi4gOToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMTAgLi4uIDMxOgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMzI6CisrCSpwcmVmaXggPSBOVUxMOworKwluYW1lWzBdID0gJ1MnOworKwluYW1lWzFdID0gJ0EnOworKwluYW1lWzJdID0gJ1InOworKwluYW1lbGVuID0gMzsKKysJYnJlYWs7CisrICAgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChwYTY0ICYmICgocmVnbm8gLSA3MikgJSAyKSkgeworKyAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDcyICsgMCAuLi4gNzIgKyAxMToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbM10gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSA3MiArIDEyIC4uLiA3MiArIDU1OgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVszXSA9IChyZWdubyArIDggLSA3MikgLyAyICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gNDsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbNF0gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgIH0KKysgIH0KKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMTI4IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgUEEtUklTQy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyoJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMjFMLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTRSLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRSLAkJUkVMfEVYRUMpCisrUkVMT0NfVFlQRSAoRFBSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTREUiwgICAgICAgICAgUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoTFRPRkYxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRExUSU5EMTRGLAkJMCkKKytSRUxPQ19UWVBFIChTRVRCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTdSLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChTRUdCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUdSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFRPRkYyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0UiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMzIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRSLAkwKQorK1JFTE9DX1RZUEUgKEZQVFI2NCwJCTApCisrUkVMT0NfVFlQRSAoUExBQkVMMzIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJDLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoRElSNjQsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTREUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkYsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZXRiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkRGLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRXUiwJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTREUiwJMCkKKytSRUxPQ19UWVBFIChTRUdSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSNjQsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZERiwJMCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChJUExULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRVBMVCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwzMiwJCURZTikKKytSRUxPQ19UWVBFIChUUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRGLAkwKQorK1JFTE9DX1RZUEUgKFRQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZERiwJMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsCURZTikKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsCURZTikKKysKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DICAgICAgIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMjEzIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9QQS1SSVNDIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogJXIyOCwgb3IgcGFpciAlcjI4LCAlcjI5LiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICVmcjRMLCBvciBwYWlyICVmcjRMLCAlZnI0UiBvbiBwYS0zMiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWczMiAyCisrI2RlZmluZSBubG9jX2ZwcmVncGFpcjMyIDQKKysKKysvKiAkZnI0ICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKysjaWYgMAorKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiBBZGRyZXNzIG9mIHRoZSBsb2NhdGlvbiBpcyBzdG9yZWQKKysgICBpbiAlcjI4IGJlZm9yZSBmdW5jdGlvbiBjYWxsLCBidXQgaXQgbWF5IGJlIGNoYW5nZWQgYnkgZnVuY3Rpb24uICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMjggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrI2VuZGlmCisrCisrc3RhdGljIGludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsIGludCBwYTY0KQorK3sKKysgIER3YXJmX1dvcmQgcmVnc2l6ZSA9IHBhNjQgPyA4IDogNDsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSA0OworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQlpZiAocGE2NCkgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzsKKysJCSAgaWYgKHNpemUgPD0gOCkKKysJCSAgICAgIHJldHVybiBubG9jX2ZwcmVnOworKwkJfQorKwkJZWxzZSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnMzI7CisrCQkgIGlmIChzaXplIDw9IDQpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWczMjsKKysJCSAgZWxzZSBpZiAoc2l6ZSA8PSA4KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjMyOworKwkJfQorKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCWlmIChwYTY0KQorKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZTogeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfYWdncmVnYXRlX3NpemUgKHR5cGVkaWUsICZzaXplKSAhPSAwKQorKwkgIHJldHVybiAtMTsKKysJaWYgKHBhNjQpCisrICAgICAgICAgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKyAgICAgICAgaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrICAgICAgICBpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKyNpZiAwCisrCS8qIHRoZXJlIHNob3VsZCBiZSBzb21lIHdheSB0byBrbm93IHRoaXMgbG9jYXRpb24uLi4gQnV0IEkgZG8gbm90IHNlZSBpdC4gKi8KKysgICAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysjZW5kaWYKKysJLyogZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0IChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwxMTIgQEAKKysvKiBQQS1SSVNDIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlZ21lbnRfdHlwZV9uYW1lIChpbnQgc2VnbWVudCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHNlZ21lbnQpCisrICAgIHsKKysgICAgY2FzZSBQVF9QQVJJU0NfQVJDSEVYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19BUkNIRVhUIjsKKysgICAgY2FzZSBQVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc3ltYm9sIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zeW1ib2xfdHlwZV9uYW1lKGludCBzeW1ib2wsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgIHNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysJaWYgKHN5bWJvbCA9PSBTVFRfUEFSSVNDX01JTExJQ09ERSkKKysJICByZXR1cm4gIlBBUklTQ19NSUxMSSI7CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc2VjdGlvbiB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VjdGlvbl90eXBlX25hbWUgKGludCB0eXBlLAorKwkJCWNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgU0hUX1BBUklTQ19FWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRVhUIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfRE9DOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0RPQyI7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBDaGVjayB3aGV0aGVyIG1hY2hpbmUgZmxhZ3MgYXJlIHZhbGlkLiAgKi8KKytib29sCisrcGFyaXNjX21hY2hpbmVfZmxhZ19jaGVjayAoR0VsZl9Xb3JkIGZsYWdzKQorK3sKKysgIGlmIChmbGFncyAmfiAoRUZfUEFSSVNDX1RSQVBOSUwgfCBFRl9QQVJJU0NfRVhUIHwgRUZfUEFSSVNDX0xTQiB8CisrCUVGX1BBUklTQ19XSURFIHwgRUZfUEFSSVNDX05PX0tBQlAgfAorKwlFRl9QQVJJU0NfTEFaWVNXQVAgfCBFRl9QQVJJU0NfQVJDSCkpCisrICAgIHJldHVybiAwOworKworKyAgR0VsZl9Xb3JkIGFyY2ggPSBmbGFncyAmIEVGX1BBUklTQ19BUkNIOworKworKyAgcmV0dXJuICgoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMCkgfHwgKGFyY2ggPT0gRUZBX1BBUklTQ18xXzEpIHx8CisrICAgICAgKGFyY2ggPT0gRUZBX1BBUklTQ18yXzApKTsKKyt9CisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrcGFyaXNjX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjY0OgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgY2FzZSBSX1BBUklTQ19ESVIzMjoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUwzMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0hQUEFfSAorKyNkZWZpbmUgX0xJQkVCTF9IUFBBX0ggMQorKworKyNpbmNsdWRlIDxsaWJkdy5oPgorKworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMihEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjUyMTQ5NzM3ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxMzoxMS45MTA4MDExMDUgKzAwMDAKK0BAIC0zMywxMSArMzMsMTIgQEAKKyAKKyAKKyBtb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gYWFyY2g2NCBzcGFyYyBwcGMgcHBjNjQgczM5MCBcCistCSAgdGlsZWd4CisrCSAgdGlsZWd4IHBhcmlzYworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYQorKwkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKysJICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTExNiw2ICsxMTcsOSBAQAorIGxpYmVibF90aWxlZ3hfcGljX2FfU09VUkNFUyA9ICQodGlsZWd4X1NSQ1MpCisgYW1fbGliZWJsX3RpbGVneF9waWNfYV9PQkpFQ1RTID0gJCh0aWxlZ3hfU1JDUzouYz0ub3MpCisgCisrcGFyaXNjX1NSQ1MgPSBwYXJpc2NfaW5pdC5jIHBhcmlzY19zeW1ib2wuYyBwYXJpc2NfcmVncy5jIHBhcmlzY19yZXR2YWwuYworK2xpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisrYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjI1MjE0OTczNyArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTE4MTQsMTYgKzE4MTQsMjQgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMjFMCTE4CS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFdSCTE5CisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0RFIJMjAKKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRSCTIyCS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMjFMCTI2CS8qIEdQLXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFIJMzAJLyogR1AtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYyMUwJMzQJLyogTFQtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0UgkzOAkvKiBMVC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ETFRJTkQxNEYJMzkKKysjZGVmaW5lIFJfUEFSSVNDX1NFVEJBU0UJNDAKKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDMyCTQxCS8qIDMyIGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDIxTAk0MgorKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE3Ugk0MworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0Ugk0NgorICNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMjFMCTUwCS8qIFBMVCByZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNEYJNTUKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIzMgk1NwkvKiAzMiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcG9pbnRlci4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIyMUwJNTgJLyogTFQtcmVsLiBmY3QgcHRyLCBsZWZ0IDIxIGJpdHMuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTRSCTYyCS8qIExULXJlbC4gZmN0IHB0ciwgcmlnaHQgMTQgYml0cy4gKi8KK0BAIC0xODMyLDYgKzE4NDAsNyBAQAorICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMjFMCTY2CS8qIExlZnQgMjEgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyQwk3MworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkYJNzQJLyogMjIgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFdSCTc1CS8qIFBDLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0RFIJNzYJLyogUEMgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KK0BAIC0xODU3LDYgKzE4NjYsOCBAQAorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNldGCTEwMgkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2REYJMTAzCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDY0CTEwNAkvKiA2NCBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFdSCTEwNworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0RFIJMTA4CisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUw2NAkxMTIJLyogNjQgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFdSCTExNQkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0RFIJMTE2CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjU2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbTY4a19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw0OTMgQEAKK0Zyb206IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KK0Zyb206IFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLmRlPgorU3ViamVjdDogbTY4ayBzdXBwb3J0CisKK1dyaXR0ZW4gYnkgS3VydCBSb2Vja3gsIGV4Y2VwdCBmb3IgdGhlIHJldHZhbCBzdXBwb3J0IHdoaWNoIHdhcyB3cml0dGVuCitieSBUaG9yc3RlbiBHbGFzZXIKKworCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX2luaXQuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw1MCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG02OGsgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW02OGtfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl82OEtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtNjhrX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworKworK2NvbnN0IGNoYXIgKgorK202OGtfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBlaC0+bmFtZSA9ICJtNjhrIjsKKysgIG02OGtfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZWdzLmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsMTA2IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIG02OGsgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbTY4a19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrCWlmIChuYW1lID09IE5VTEwpCisrCQlyZXR1cm4gMjU7CisrCisrCWlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiAyNCB8fCBuYW1lbGVuIDwgNSkKKysJCXJldHVybiAtMTsKKysKKysJKnByZWZpeCA9ICIlIjsKKysJKmJpdHMgPSAzMjsKKysJKnR5cGUgPSAocmVnbm8gPCA4ID8gRFdfQVRFX3NpZ25lZAorKwkJOiByZWdubyA8IDE2ID8gRFdfQVRFX2FkZHJlc3MgOiBEV19BVEVfZmxvYXQpOworKworKwlpZiAocmVnbm8gPCA4KQorKwl7CisrCQkqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDE2KQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDI0KQorKwl7CisrCQkqc2V0bmFtZSA9ICJGUFUiOworKwl9CisrCWVsc2UKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCQkqdHlwZSA9IERXX0FURV9hZGRyZXNzOworKwl9CisrCisrCXN3aXRjaCAocmVnbm8pCisrCXsKKysJY2FzZSAwIC4uLiA3OgorKwkJbmFtZVswXSA9ICdkJzsKKysJCW5hbWVbMV0gPSByZWdubyArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgOCAuLi4gMTM6CisrCQluYW1lWzBdID0gJ2EnOworKwkJbmFtZVsxXSA9IHJlZ25vIC0gOCArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTQ6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTU6CisrCQluYW1lWzBdID0gJ3MnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTYgLi4uIDIzOgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrCQluYW1lWzJdID0gcmVnbm8gLSAxNiArICcwJzsKKysgICAJCW5hbWVsZW4gPSAzOworKwkJYnJlYWs7CisrCisrCWNhc2UgMjQ6CisrCQluYW1lWzBdID0gJ3AnOworKwkJbmFtZVsxXSA9ICdjJzsKKysJCW5hbWVsZW4gPSAyOworKwl9CisrCisrCW5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrCXJldHVybiBuYW1lbGVuOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbTY4ay4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJMCkKKytSRUxPQ19UWVBFICgzMiwJCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoMTYsCQkJUkVMKQorK1JFTE9DX1RZUEUgKDgsCQkJUkVMKQorK1JFTE9DX1RZUEUgKFBDMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUEMxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQzgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4TywJCVJFTCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChHTE9CX0RBVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEpNUF9TTE9ULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUkVMQVRJVkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChHTlVfVlRJTkhFUklULAlSRUwpCisrUkVMT0NfVFlQRSAoR05VX1ZURU5UUlksCVJFTCkKKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTExNTcsNiArMTE1Nyw5IEBACisgI2RlZmluZSBSXzY4S19HTE9CX0RBVAkyMAkJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEJCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCQkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisrLyogVGhlIG5leHQgMiBhcmUgR05VIGV4dGVuc2lvbnMgdG8gZW5hYmxlIEMrKyB2dGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKysjZGVmaW5lIFJfNjhLX0dOVV9WVElOSEVSSVQgMjMKKysjZGVmaW5lIFJfNjhLX0dOVV9WVEVOVFJZICAgMjQKKyAjZGVmaW5lIFJfNjhLX1RMU19HRDMyICAgICAgMjUgICAgICAgICAgLyogMzIgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0QxNiAgICAgIDI2ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEOCAgICAgICAyNyAgICAgICAgICAvKiA4IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTQ6NDguMzQ0NjIxMTY3ICswMDAwCitAQCAtMzMsMTIgKzMzLDEyIEBACisgCisgCisgbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIGFhcmNoNjQgc3BhcmMgcHBjIHBwYzY0IHMzOTAgXAorLQkgIHRpbGVneCBwYXJpc2MgbWlwcworKwkgIHRpbGVneCBwYXJpc2MgbWlwcyBtNjhrCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2FhcmNoNjRfcGljLmEgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgXAorIAkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYSBsaWJlYmxfbTY4a19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMjUsNiArMTI1LDEwIEBACisgbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorIGFtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisgCisrbTY4a19TUkNTID0gbTY4a19pbml0LmMgbTY4a19zeW1ib2wuYyBtNjhrX3JlZ3MuYyBtNjhrX3JldHZhbC5jCisrbGliZWJsX202OGtfcGljX2FfU09VUkNFUyA9ICQobTY4a19TUkNTKQorK2FtX2xpYmVibF9tNjhrX3BpY19hX09CSkVDVFMgPSAkKG02OGtfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw0MyBAQAorKy8qIG02OGsgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbTY4a19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSXzY4S18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfU1dPUkQ7CisrICAgIGNhc2UgUl82OEtfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl82OEtfODoKKysgICAgICByZXR1cm4gRUxGX1RfQllURTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDE3MiBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvbTY4ayBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoYykgMjAxMSBUaG9yc3RlbiBHbGFzZXIsIERlYmlhbi4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrCisrLyogJWQwLCBvciBwYWlyICVkMCwgJWQxLCBvciAlYTAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzAgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfcHRycmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrI2RlZmluZSBubG9jX3B0cnJlZwkxCisrCisrLyogJWYwICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzE2IH0KKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnCTEKKysKKysvKiBTdHJ1Y3R1cmVzIGFyZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIC0gc21hbGwgc3RydWN0dXJlcyBhcmUgcmV0dXJuZWQKKysgICBpbiAlZDAgLyAlZDEgKC1mcmVnLXN0cnVjdC1yZXR1cm4gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0KSwgbGFyZ2UKKysgICBzdHJ1Y3R1cmVzIHVzZSAlYTEgKGluIGNvbnN0cmFzdCB0byB0aGUgU1lTViBwc0FCSSB3aGljaCBzYXlzICVhMCkgYXMKKysgICByZWVudHJhbnQgc3RvcmFnZSBzcGFjZSBpbmRpY2F0b3IuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzksIC5udW1iZXIgPSAwIH0KKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrCisraW50CisrbTY4a19yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICBEd2FyZl9Xb3JkIHNpemU7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsCisrCQkJCQkJJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwl7CisrCSAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgc2l6ZSA9IDQ7CisrCSAgZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwl9CisrICAgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwl7CisrCSAgKmxvY3AgPSBsb2NfcHRycmVnOworKyAgICAgICAgICByZXR1cm4gbmxvY19wdHJyZWc7CisrCX0KKysgICAgICBpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCXsKKysJICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCQkgICAgICZhdHRyX21lbSksCisrCQkJICAgICAgICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysJICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgeworKwkgICAgICAvKiBYWFggcmVhbGx5IDEwPyAqLworKyAgICAgICAgICAgICAgaWYgKHNpemUgPiAxMCkKKysgICAgICAgICAgICAgICAgcmV0dXJuIC0yOworKyAgICAgICAgICAgICAgKmxvY3AgPSBsb2NfZnByZWc7CisrICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZzsKKysJICAgIH0KKysJfQorKyAgICAgIGlmIChzaXplIDw9IDgpCisrCXsKKysJaW50cmVnOgorKwkgIC8qIFhYWCBjaGVjayBlbmRpYW5uZXNzIG9mIGR3b3JkIHBhaXIsIGludDY0IHZzIGFnZ3JlZ2F0ZSAqLworKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3BhaXI7CisrCX0KKysKKysgICAgYWdncmVnYXRlOgorKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICAgIGlmIChkd2FyZl9hZ2dyZWdhdGVfc2l6ZSAodHlwZWRpZSwgJnNpemUpID09IDAKKysJICAmJiBzaXplID4gMCAmJiBzaXplIDw9IDgpCisrCS8qIG5vdCBhY2N1cmF0ZSBmb3IgYSBzdHJ1Y3Qgd2hvc2Ugb25seSBtZW1iZXIgaXMgYSBmbG9hdCAqLworKwlnb3RvIGludHJlZzsKKysgICAgICBnb3RvIGFnZ3JlZ2F0ZTsKKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzNhM2YyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNzEyIEBACitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX2luaXQuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSw2MCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG1pcHMgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX01JUFNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtaXBzX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworK2NvbnN0IGNoYXIgKgorK21pcHNfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBpZiAobWFjaGluZSA9PSBFTV9NSVBTKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGJpZy1lbmRpYW4iOworKyAgZWxzZSBpZiAobWFjaGluZSA9PSBFTV9NSVBTX1JTM19MRSkKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBsaXR0bGUtZW5kaWFuIjsKKysKKysgIG1pcHNfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWdzLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsMTA0IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIE1JUFMgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK21pcHNfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisrCQkgICAgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gNjY7CisrCisrICBpZiAocmVnbm8gPCAwIHx8IHJlZ25vID4gNjUgfHwgbmFtZWxlbiA8IDQpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJCI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSByZWdubyArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDE7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gKHJlZ25vIC8gMTApICsgJzAnOworKyAgICAgICAgICBuYW1lWzFdID0gKHJlZ25vICUgMTApICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPCA2NCkKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2YnOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpICsgJzAnOworKwkgIG5hbWVsZW4gPSAyOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSAvIDEwICsgJzAnOworKwkgIG5hbWVbMl0gPSAocmVnbm8gLSAzMikgJSAxMCArICcwJzsKKysJICBuYW1lbGVuID0gMzsKKysJfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA9PSA2NCkKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnaCc7CisrICAgICAgbmFtZVsxXSA9ICdpJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdsJzsKKysgICAgICBuYW1lWzFdID0gJ28nOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrCisrICBuYW1lW25hbWVsZW4rK10gPSAnXDAnOworKyAgcmV0dXJuIG5hbWVsZW47CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsNzkgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtaXBzLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMTYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDMyLCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwzMiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMjYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMTzE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwxNiwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKExJVEVSQUwsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1QxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUEMxNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTEwxNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHUFJFTDMyLCAgICAgICAgICAgIDApCisrCisrUkVMT0NfVFlQRSAoU0hJRlQ1LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNISUZUNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICg2NCwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0RJU1AsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9QQUdFLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfT0ZTVCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0hJMTYsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9MTzE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTVUIsICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSU5TRVJUX0EsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9CLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChERUxFVEUsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSElHSEVSLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFU1QsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMX0hJMTYsICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9MTzE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNDTl9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQUREX0lNTUVESUFURSwgICAgICAwKQorK1JFTE9DX1RZUEUgKFBKVU1QLCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUxHT1QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSkFMUiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUw2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfR0QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0xETSwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfSEkxNiwgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0xPMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dPVFRQUkVMLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTDMyLCAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUw2NCwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMX0hJMTYsICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9MTzE2LCAgICAgMCkKKysKKysjZGVmaW5lIE5PX0NPUFlfUkVMT0MgMQorKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDMyMSBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvbWlwcyBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysjaW5jbHVkZSA8ZWxmLmg+CisrCisrI2luY2x1ZGUgIi4uL2xpYmVibC9saWJlYmxQLmgiCisrI2luY2x1ZGUgIi4uL2xpYmR3L2xpYmR3UC5oIgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhlIEFCSSBvZiB0aGUgZmlsZS4gIEFsc28gc2VlIEVGX01JUFNfQUJJMiBhYm92ZS4gKi8KKysjZGVmaW5lIEVGX01JUFNfQUJJCQkweDAwMDBGMDAwCisrCisrLyogVGhlIG9yaWdpbmFsIG8zMiBhYmkuICovCisrI2RlZmluZSBFX01JUFNfQUJJX08zMiAgICAgICAgICAweDAwMDAxMDAwCisrCisrLyogTzMyIGV4dGVuZGVkIHRvIHdvcmsgb24gNjQgYml0IGFyY2hpdGVjdHVyZXMgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzY0ICAgICAgICAgIDB4MDAwMDIwMDAKKysKKysvKiBFQUJJIGluIDMyIGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkkzMiAgICAgICAweDAwMDAzMDAwCisrCisrLyogRUFCSSBpbiA2NCBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJNjQgICAgICAgMHgwMDAwNDAwMAorKworKy8qIEFsbCB0aGUgcG9zc2libGUgTUlQUyBBQklzLiAqLworK2VudW0gbWlwc19hYmkKKysgIHsKKysgICAgTUlQU19BQklfVU5LTk9XTiA9IDAsCisrICAgIE1JUFNfQUJJX04zMiwKKysgICAgTUlQU19BQklfTzMyLAorKyAgICBNSVBTX0FCSV9ONjQsCisrICAgIE1JUFNfQUJJX082NCwKKysgICAgTUlQU19BQklfRUFCSTMyLAorKyAgICBNSVBTX0FCSV9FQUJJNjQsCisrICAgIE1JUFNfQUJJX0xBU1QKKysgIH07CisrCisrLyogRmluZCB0aGUgbWlwcyBBQkkgb2YgdGhlIGN1cnJlbnQgZmlsZSAqLworK2VudW0gbWlwc19hYmkgZmluZF9taXBzX2FiaShFbGYgKmVsZikKKyt7CisrICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysKKysgIGlmIChlaGRyID09IE5VTEwpCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgR0VsZl9Xb3JkIGVsZl9mbGFncyA9IGVoZHItPmVfZmxhZ3M7CisrCisrICAvKiBDaGVjayBlbGZfZmxhZ3MgdG8gc2VlIGlmIGl0IHNwZWNpZmllcyB0aGUgQUJJIGJlaW5nIHVzZWQuICAqLworKyAgc3dpdGNoICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkpKQorKyAgICB7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX082NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgZGVmYXVsdDoKKysgICAgICBpZiAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJMikpCisrCXJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgIH0KKysKKysgIC8qIEdDQyBjcmVhdGVzIGEgcHNldWRvLXNlY3Rpb24gd2hvc2UgbmFtZSBkZXNjcmliZXMgdGhlIEFCSS4gICovCisrICBzaXplX3Qgc2hzdHJuZHg7CisrICBpZiAoZWxmX2dldHNoZHJzdHJuZHggKGVsZiwgJnNoc3RybmR4KSA8IDApCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIEVsZl9TY24gKnNjbiA9IE5VTEw7CisrICB3aGlsZSAoKHNjbiA9IGVsZl9uZXh0c2NuIChlbGYsIHNjbikpICE9IE5VTEwpCisrICAgIHsKKysgICAgICBHRWxmX1NoZHIgc2hkcl9tZW07CisrICAgICAgR0VsZl9TaGRyICpzaGRyID0gZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSk7CisrICAgICAgaWYgKHNoZHIgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgICAgIG5hbWUgPSBlbGZfc3RycHRyIChlbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKSA/OiAiIjsKKysgICAgICBpZiAoc3RybmNtcCAobmFtZSwgIi5tZGVidWcuIiwgOCkgIT0gMCkKKysgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlOMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9ONjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlPNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrICAgIH0KKysKKysgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworK30KKysKKyt1bnNpZ25lZCBpbnQKKyttaXBzX2FiaV9yZWdzaXplIChlbnVtIG1pcHNfYWJpIGFiaSkKKyt7CisrICBzd2l0Y2ggKGFiaSkKKysgICAgeworKyAgICBjYXNlIE1JUFNfQUJJX0VBQkkzMjoKKysgICAgY2FzZSBNSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIDQ7CisrICAgIGNhc2UgTUlQU19BQklfTjMyOgorKyAgICBjYXNlIE1JUFNfQUJJX042NDoKKysgICAgY2FzZSBNSVBTX0FCSV9PNjQ6CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiA4OworKyAgICBjYXNlIE1JUFNfQUJJX1VOS05PV046CisrICAgIGNhc2UgTUlQU19BQklfTEFTVDoKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorK30KKysKKysKKysvKiAkdjAgb3IgcGFpciAkdjAsICR2MSAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICRmMCAoZmxvYXQpLCBvciBwYWlyICRmMCwgJGYxIChkb3VibGUpLgorKyAqIGYyL2YzIGFyZSB1c2VkIGZvciBDT01QTEVYICg9IDIgZG91YmxlcykgcmV0dXJucyBpbiBGb3J0cmFuICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMzIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzUgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKysvKiAkZjAsIG9yIHBhaXIgJGYwLCAkZjIuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrI2RlZmluZSBubG9jX2ZwcmVncGFpciA0CisrI2RlZmluZSBubG9jX2ZwcmVncXVhZCA4CisrCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuICBCdXQsIHRoZSBjb21waWxlcgorKyAgIGhlbHBmdWxseSByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3BhY2UgaW4gJHYwLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyLCAubnVtYmVyID0gMCB9CisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKworK2ludAorK21pcHNfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgLyogRmlyc3QgZmluZCB0aGUgQUJJIHVzZWQgYnkgdGhlIGVsZiBvYmplY3QgKi8KKysgIGVudW0gbWlwc19hYmkgYWJpID0gZmluZF9taXBzX2FiaShmdW5jdHlwZWRpZS0+Y3UtPmRiZy0+ZWxmKTsKKysKKysgIC8qIFNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZyB3aGlsZSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgQUJJICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX0xBU1QpCisrICAgIHJldHVybiAtMTsKKysKKysgIC8qIFdlIGNvdWxkbid0IGlkZW50aWZ5IHRoZSBBQkksIGJ1dCB0aGUgZmlsZSBzZWVtcyB2YWxpZCAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9VTktOT1dOKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBDYW4ndCBoYW5kbGUgRUFCSSB2YXJpYW50cyAqLworKyAgaWYgKChhYmkgPT0gTUlQU19BQklfRUFCSTMyKSB8fCAoYWJpID09IE1JUFNfQUJJX0VBQkk2NCkpCisrICAgIHJldHVybiAtMjsKKysKKysgIHVuc2lnbmVkIGludCByZWdzaXplID0gbWlwc19hYmlfcmVnc2l6ZSAoYWJpKTsKKysgIGlmICghcmVnc2l6ZSkKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IHJlZ3NpemU7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysjZGVmaW5lIEFCSV9MT0MobG9jLCByZWdzaXplKSAoKHJlZ3NpemUpID09IDQgPyAobG9jICMjIF9vMzIpIDogKGxvYykpCisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQkqbG9jcCA9IEFCSV9MT0MobG9jX2ZwcmVnLCByZWdzaXplKTsKKysJCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCisrCQlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyOworKworKwkJaWYgKHNpemUgPD0gNCpyZWdzaXplICYmIGFiaSA9PSBNSVBTX0FCSV9PMzIpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdxdWFkOworKworKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCSpsb2NwID0gQUJJX0xPQyhsb2NfaW50cmVnLCByZWdzaXplKTsKKysJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gU2hvdWxkbid0IGhhcHBlbiB0aG91Z2ggKGF0IGxlYXN0IHdpdGggZ2NjKSAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZToKKysgICAgICAvKiBYWFggVE9ETzogQ2FuJ3QgaGFuZGxlIHN0cnVjdHVyZSByZXR1cm4gd2l0aCBvdGhlciBBQkkncyB5ZXQgOi0vICovCisrICAgICAgaWYgKChhYmkgIT0gTUlQU19BQklfTzMyKSAmJiAoYWJpICE9IE1JUFNfQUJJX082NCkpCisrICAgICAgICByZXR1cm4gLTI7CisrCisrICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSw1MiBAQAorKy8qIE1JUFMgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbWlwc19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX01JUFNfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl9NSVBTXzMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBjYXNlIFJfTUlQU182NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTcxLDYgKzcxLDggQEAKKyAgIHsgInNwYXJjIiwgImVsZl9zcGFyYyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDLCAwLCAwIH0sCisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmN2OHBsdXMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQzMyUExVUywgMCwgMCB9LAorICAgeyAiczM5MCIsICJlYmxfczM5MCIsICJzMzkwIiwgNCwgRU1fUzM5MCwgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwcyIsICJtaXBzIiwgNCwgRU1fTUlQUywgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwc2VsIiwgIm1pcHNlbCIsIDQsIEVNX01JUFNfUlMzX0xFLCAwLCAwIH0sCisgCisgICB7ICJtMzIiLCAiZWxmX20zMiIsICJtMzIiLCAzLCBFTV9NMzIsIDAsIDAgfSwKKyAgIHsgIm02OGsiLCAiZWxmX202OGsiLCAibTY4ayIsIDQsIEVNXzY4SywgMCwgMCB9LAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxNDIzNTg3NSArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMTEyLDExICsxMTIsMTMgQEAKKyB9CisgCisgCisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgYm9vbAorIEVCTEhPT0soY29weV9yZWxvY19wKSAoaW50IHJlbG9jKQorIHsKKyAgIHJldHVybiByZWxvYyA9PSBSX1RZUEUgKENPUFkpOworIH0KKysjZW5kaWYKKyAKKyBib29sCisgRUJMSE9PSyhub25lX3JlbG9jX3ApIChpbnQgcmVsb2MpCitAQCAtMTM4LDcgKzE0MCw5IEBACisgICBlYmwtPnJlbG9jX3R5cGVfbmFtZSA9IEVCTEhPT0socmVsb2NfdHlwZV9uYW1lKTsKKyAgIGVibC0+cmVsb2NfdHlwZV9jaGVjayA9IEVCTEhPT0socmVsb2NfdHlwZV9jaGVjayk7CisgICBlYmwtPnJlbG9jX3ZhbGlkX3VzZSA9IEVCTEhPT0socmVsb2NfdmFsaWRfdXNlKTsKKysjaWZuZGVmIE5PX0NPUFlfUkVMT0MKKyAgIGVibC0+Y29weV9yZWxvY19wID0gRUJMSE9PSyhjb3B5X3JlbG9jX3ApOworKyNlbmRpZgorICAgZWJsLT5ub25lX3JlbG9jX3AgPSBFQkxIT09LKG5vbmVfcmVsb2NfcCk7CisgI2lmbmRlZiBOT19SRUxBVElWRV9SRUxPQworICAgZWJsLT5yZWxhdGl2ZV9yZWxvY19wID0gRUJMSE9PSyhyZWxhdGl2ZV9yZWxvY19wKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjEwLjg0MTQ2ODkzNCArMDAwMAorQEAgLTMzLDEyICszMywxMiBAQAorIAorIAorIG1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBhYXJjaDY0IHNwYXJjIHBwYyBwcGM2NCBzMzkwIFwKKy0JICB0aWxlZ3ggcGFyaXNjCisrCSAgdGlsZWd4IHBhcmlzYyBtaXBzCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2FhcmNoNjRfcGljLmEgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgXAorIAkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMjEsNiArMTIxLDEwIEBACisgbGliZWJsX3BhcmlzY19waWNfYV9TT1VSQ0VTID0gJChwYXJpc2NfU1JDUykKKyBhbV9saWJlYmxfcGFyaXNjX3BpY19hX09CSkVDVFMgPSAkKHBhcmlzY19TUkNTOi5jPS5vcykKKyAKKyttaXBzX1NSQ1MgPSBtaXBzX2luaXQuYyBtaXBzX3N5bWJvbC5jIG1pcHNfcmVncy5jIG1pcHNfcmV0dmFsLmMKKytsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisrYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKysKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorIAllY2hvICdFTEZVVElMU18kKFBBQ0tBR0VfVkVSU0lPTikgeyBnbG9iYWw6ICQqX2luaXQ7IGxvY2FsOiAqOyB9OycgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjY5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbWlwc19yZWFkZWxmX3cucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorU3ViamVjdDogTWFrZSByZWFkZWxmIC13IG91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBtaXBzCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY2MjA0MQorRm9yd2FyZGVkOiBub3QtbmVlZGVkCisKK1Vwc3RyZWFtcyB3YW50cyBhIGNoYW5nZSB3aGVyZSB0aGlzIGlzIGhhbmRsZWQgYnkgYSBob29rIHRoYXQgbmVlZHMKK3RvIGJlIGZpbGxlZCBpbiBieSB0aGUgYmFja2VuZCBmb3IgdGhlIGFyY2guCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1My9zcmMvcmVhZGVsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTMub3JpZy9zcmMvcmVhZGVsZi5jCTIwMTItMDgtMTAgMjI6MDE6NTUuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTMvc3JjL3JlYWRlbGYuYwkyMDEyLTA5LTE4IDIxOjQ2OjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTczNjQsNyArNzM2NCw4IEBACisgICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworICAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworIAorLSAgICAgIGlmIChzaGRyICE9IE5VTEwgJiYgc2hkci0+c2hfdHlwZSA9PSBTSFRfUFJPR0JJVFMpCisrICAgICAgaWYgKHNoZHIgIT0gTlVMTCAmJiAoCisrCSAoc2hkci0+c2hfdHlwZSA9PSBTSFRfUFJPR0JJVFMpIHx8IChzaGRyLT5zaF90eXBlID09IFNIVF9NSVBTX0RXQVJGKSkpCisgCXsKKyAJICBzdGF0aWMgY29uc3Qgc3RydWN0CisgCSAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViMWIzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorSW5kZXg6IGVsZnV0aWxzLTAuMTU5L2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTkub3JpZy9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworKysrIGVsZnV0aWxzLTAuMTU5L2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCitAQCAtMzkzLDYgKzM5MywxNiBAQCBwaWRfZ2V0dGhyZWFkIChEd2ZsICpkd2ZsIF9fYXR0cmlidXRlX18KKyAgIHJldHVybiBmYWxzZTsKKyB9CisgCisrYm9vbAorK2ludGVybmFsX2Z1bmN0aW9uCisrX19saWJkd2ZsX3B0cmFjZV9hdHRhY2ggKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJIGJvb2wgKnRpZF93YXNfc3RvcHBlZHAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIGVycm5vID0gRU5PU1lTOworKyAgX19saWJkd2ZsX3NldGVycm5vIChEV0ZMX0VfRVJSTk8pOworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgYm9vbAorIHBpZF9tZW1vcnlfcmVhZCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgICAgICAgICAgICBEd2FyZl9BZGRyIGFkZHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorQEAgLTQxOSw2ICs0MjksMTMgQEAgcGlkX2RldGFjaCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fICgodQorIHsKKyB9CisgCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrX19saWJkd2ZsX3B0cmFjZV9kZXRhY2ggKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJIGJvb2wgdGlkX3dhc19zdG9wcGVkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrfQorKworIHN0YXRpYyB2b2lkCisgcGlkX3RocmVhZF9kZXRhY2ggKER3ZmxfVGhyZWFkICp0aHJlYWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorIAkJICB2b2lkICp0aHJlYWRfYXJnIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGZmMDdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCkBAIC0wLDAgKzEsMTAyMSBAQAorUmViYXNlIHRvIDEuMTYyCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgMzAgKysrKysrKysrKysrKysrKysrKysrCisgYmFja2VuZHMvQ2hhbmdlTG9nICAgICAgICAgIHwgICAxMiArKysrKysrKysKKyBiYWNrZW5kcy9NYWtlZmlsZS5hbSAgICAgICAgfCAgICAyICstCisgY29uZmlnL0NoYW5nZUxvZyAgICAgICAgICAgIHwgICAgNCArKysKKyBjb25maWcvZXUuYW0gICAgICAgICAgICAgICAgfCAgIDE0ICsrKysrKystLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgfCAgIDYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyBsaWIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgfCAgICA4ICsrKysrKworIGxpYi9ldS1jb25maWcuaCAgICAgICAgICAgICB8ICAgMTAgKysrKysrKworIGxpYmFzbS9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDUgKysrKworIGxpYmNwdS9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDggKysrKysrCisgbGliY3B1L2kzODZfZGlzYXNtLmMgICAgICAgIHwgICAgMSArCisgbGliZHcvQ2hhbmdlTG9nICAgICAgICAgICAgIHwgICAxMyArKysrKysrKysKKyBsaWJkdy9kd2FyZl9iZWdpbl9lbGYuYyAgICAgfCAgICA4ICsrKysrKworIGxpYmR3L2xpYmR3LmggICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJkd2ZsL0NoYW5nZUxvZyAgICAgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrCisgbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jIHwgICAyOSArKysrKysrKysrKysrKysrKysrKworIGxpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jICB8ICAgMTQgKysrKysrKysrKworIGxpYmVibC9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDUgKysrKworIGxpYmVsZi9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgMTAgKysrKysrKworIGxpYmVsZi9jb21tb24uaCAgICAgICAgICAgICB8ICAgIDQgKy0tCisgbGliZWxmL2dudWhhc2hfeGxhdGUuaCAgICAgIHwgICAgNiArKystLQorIHNyYy9DaGFuZ2VMb2cgICAgICAgICAgICAgICB8ICAgMzAgKysrKysrKysrKysrKysrKysrKysrCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgIHwgICAgNSArKysrCisgc3JjL2FkZHIybGluZS5jICAgICAgICAgICAgIHwgICAgNCArLS0KKyBzcmMvZmluZHRleHRyZWwuYyAgICAgICAgICAgfCAgICA2ICsrKystCisgc3JjL2xkLmggICAgICAgICAgICAgICAgICAgIHwgICAgMiArKworIHNyYy9yZWFkZWxmLmMgICAgICAgICAgICAgICB8ICAgMTUgKysrKysrKy0tLS0KKyBzcmMvc3RyaW5ncy5jICAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrCisgc3JjL3N0cmlwLmMgICAgICAgICAgICAgICAgIHwgICAgNiArKysrKworIHRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICB8ICAgMTQgKysrKysrKysrKworIHRlc3RzL01ha2VmaWxlLmFtICAgICAgICAgICB8ICAgIDEgKworIHRlc3RzL2JhY2t0cmFjZS5jICAgICAgICAgICB8ICAgIDEgKworIHRlc3RzL2xpbmUyYWRkci5jICAgICAgICAgICB8ICAgIDIgKy0KKyAzMyBmaWxlcyBjaGFuZ2VkLCAzNDMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGQ4Mjk3ODMuLjg5YmZkMjQgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTI1Myw2ICsyNTMsOCBAQAorIAorIDIwMTItMDEtMjQgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAKKysJKiBjb25maWd1cmUuYWM6IFdyYXAgQUNfQ09NUElMRV9JRkVMU0Ugc291cmNlcyBpbiBBQ19MQU5HX1NPVVJDRS4KKysKKyAJKiBDT1BZSU5HOiBGaXggYWRkcmVzcy4gVXBkYXRlZCB2ZXJzaW9uIGZyb20gZ251bGliLgorIAorIDIwMTItMDEtMjMgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KK0BAIC0yNzEsNiArMjczLDkgQEAKKyAKKyAyMDExLTEwLTA4ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorIAorKwkqIGNvbmZpZ3VyZS5hYyAoLS1kaXNhYmxlLXdlcnJvcik6IEhhbmRsZSBpdCwgY29udHJvbGxpbmcgQlVJTERfV0VSUk9SCisrCWF1dG9tYWtlIG9wdGlvbi4KKysKKyAJKiBjb25maWd1cmUuYWM6IEZpeCB1c2Ugb2YgQUNfQVJHX0VOQUJMRSB0byBoYW5kbGUgJGVuYWJsZXZhbCBjb3JyZWN0bHkuCisgCisgMjAxMS0xMC0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGdtYWlsLmNvbT4KK0BAIC0yOTIsNiArMjk3LDEwIEBACisgCisgCSogY29uZmlndXJlLmFjIChMT0NBTEVESVIsIERBVEFESVJOQU1FKTogUmVtb3ZlZC4KKyAKKysyMDA5LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogVXNlIHNlZCBhbmQgZXhwciBpbnN0ZWFkIG9mIG1vZGVybiBiYXNoIGV4dGVuc2lvbnMuCisrCisgMjAwOS0wOS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBVcGRhdGUgZm9yIG1vcmUgbW9kZXJuIGF1dG9jb25mLgorQEAgLTMwMCw2ICszMDksMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKHppcF9MSUJTKTogQ2hlY2sgZm9yIGxpYmx6bWEgdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLWZnbnU4OS1pbmxpbmU7IGFkZCBpdCB0byBXRVhUUkEgaWYgaXQgd29ya3MuCisrCisgMjAwOS0wNC0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgKGV1X3ZlcnNpb24pOiBSb3VuZCBkb3duIGhlcmUsIG5vdCBpbiB2ZXJzaW9uLmggbWFjcm9zLgorQEAgLTMxMSw2ICszMjQsOCBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgX19idWlsdGluX3BvcGNvdW50LgorKworIAkqIGNvbmZpZ3VyZS5hYyAoemxpYiBjaGVjayk6IENoZWNrIGZvciBnemRpcmVjdCwgbmVlZCB6bGliID49IDEuMi4yLjMuCisgCisgCSogY29uZmlndXJlLmFjIChfX3RocmVhZCBjaGVjayk6IFVzZSBBQ19MSU5LX0lGRUxTRSwgaW4gY2FzZSBvZgorQEAgLTM5MSw2ICs0MDYsMTAgQEAKKyAJKiBjb25maWd1cmUuYWM6IEFkZCBkdW1teSBhdXRvbWFrZSBjb25kaXRpb25hbCB0byBnZXQgZGVwZW5kZW5jaWVzCisgCWZvciBub24tZ2VuZXJpYyBsaW5rZXIgcmlnaHQuICBTZWUgc3JjL01ha2VmaWxlLmFtLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbi4KKysKKyAyMDA1LTExLTE4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKTogTmV3IHZhcmlhYmxlLgorQEAgLTQzOCw2ICs0NTcsMTcgQEAKKyAJKiBNYWtlZmlsZS5hbSAoYWxsX1NVQkRJUlMpOiBBZGQgbGliZHdmbC4KKyAJKiBjb25maWd1cmUuYWM6IFdyaXRlIGxpYmR3ZmwvTWFrZWZpbGUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWMgKFdFWFRSQSk6IENoZWNrIGZvciAtV2V4dHJhIGFuZCBzZXQgdGhpcyBzdWJzdGl0dXRpb24uCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3RydWN0IHN0YXQgc3RfP3RpbSBtZW1iZXJzLgorKwkqIHNyYy9zdHJpcC5jIChwcm9jZXNzX2ZpbGUpOiBVc2Ugc3RfP3RpbWUgaWYgc3RfP3RpbSBhcmUgbm90IHRoZXJlLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIGZ1dGltZXMgZnVuY3Rpb24uCisrCSogc3JjL3N0cmlwLmMgKGhhbmRsZV9lbGYpIFshIEhBVkVfRlVUSU1FU106IFVzZSB1dGltZXMgaW5zdGVhZC4KKysJKGhhbmRsZV9hcikgWyEgSEFWRV9GVVRJTUVTXTogTGlrZXdpc2UuCisrCisgMjAwNS0wNS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgW0FIX0JPVFRPTV0gKElOVERFQ0wsIF9JTlRERUNMKTogTmV3IG1hY3Jvcy4KK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9DaGFuZ2VMb2cgYi9iYWNrZW5kcy9DaGFuZ2VMb2cKK2luZGV4IGZlNjFkOWMuLjk1OTk2MjMgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9DaGFuZ2VMb2cKKysrKyBiL2JhY2tlbmRzL0NoYW5nZUxvZworQEAgLTQ5OCw2ICs0OTgsMTAgQEAKKyAJKiBwcGNfYXR0cnMuYyAocHBjX2NoZWNrX29iamVjdF9hdHRyaWJ1dGUpOiBIYW5kbGUgdGFnCisgCUdOVV9Qb3dlcl9BQklfU3RydWN0X1JldHVybi4KKyAKKysyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChsaWJlYmxfJS5zbyk6IFVzZSAkKExEX0FTX05FRURFRCkuCisrCisgMjAwOC0xMC0wNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogaTM4Nl9yZWxvYy5kZWY6IEZpeCBlbnRyaWVzIGZvciBUTFNfR09UREVTQywgVExTX0RFU0NfQ0FMTCwgYW5kCitAQCAtODI1LDYgKzgyOSwxMSBAQAorIAkqIHNwYXJjX2luaXQuYzogTGlrZXdpc2UuCisgCSogeDg2XzY0X2luaXQuYzogTGlrZXdpc2UuCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoTERfQVNfTkVFREVEKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShsaWJlYmxfJS5zbyBydWxlKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XbCwtLWFzLW5lZWRlZC4KKysKKyAyMDA1LTExLTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHBwYzY0X3JlbG9jLmRlZjogUkVMMzAgLT4gQUREUjMwLgorQEAgLTg0Nyw2ICs4NTYsOSBAQAorIAkqIE1ha2VmaWxlLmFtICh1bmluc3RhbGwpOiBEb24ndCB0cnkgdG8gcmVtb3ZlICQocGtnaW5jbHVkZWRpcikuCisgCShDTEVBTkZJTEVTKTogQWRkIGxpYmVibF8kKG0pLnNvLgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIAkqIHBwY19yZWxvYy5kZWY6IFVwZGF0ZSBiaXRzIHBlciBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+LgorIAkqIHBwYzY0X3JlbG9jLmRlZjogTGlrZXdpc2UuCisgCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvTWFrZWZpbGUuYW0gYi9iYWNrZW5kcy9NYWtlZmlsZS5hbQoraW5kZXggMjFkN2JkMi4uZmU5MjBjOSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL01ha2VmaWxlLmFtCisrKysgYi9iYWNrZW5kcy9NYWtlZmlsZS5hbQorQEAgLTExOSw3ICsxMTksNyBAQCBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAkkKExJTkspIC1zaGFyZWQgLW8gJChAOi5tYXA9LnNvKSBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQ8ICQoY3B1XyQqKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQoQDouc289Lm1hcCkgXAorLQkJLVdsLC16LGRlZnMgLVdsLC0tYXMtbmVlZGVkICQobGliZWxmKSAkKGxpYmR3KQorKwkJLVdsLC16LGRlZnMgJChMRF9BU19ORUVERUQpICQobGliZWxmKSAkKGxpYmR3KQorIAlAJCh0ZXh0cmVsX2NoZWNrKQorIAorIGxpYmVibF9pMzg2LnNvOiAkKGNwdV9pMzg2KQorZGlmZiAtLWdpdCBhL2NvbmZpZy9DaGFuZ2VMb2cgYi9jb25maWcvQ2hhbmdlTG9nCitpbmRleCA2NGI1OGUxLi42M2IzZTkwIDEwMDY0NAorLS0tIGEvY29uZmlnL0NoYW5nZUxvZworKysrIGIvY29uZmlnL0NoYW5nZUxvZworQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAKKyAJKiBrbm93bi1kd2FyZi5hd2s6IFVzZSBnYXdrLgorIAorKzIwMTEtMTAtMDggIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisrCisrCSogZXUuYW0gW0JVSUxEX1dFUlJPUl06IENvbmRpdGlvbmFsaXplIC1XZXJyb3IgdXNlIG9uIHRoaXMuCisrCisgMjAxMC0wNy0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmdXRpbHMuc3BlYy5pbjogQWRkIG1vcmUgQnVpbGRSZXF1aXJlcy4KK2RpZmYgLS1naXQgYS9jb25maWcvZXUuYW0gYi9jb25maWcvZXUuYW0KK2luZGV4IDcwZDMyZGUuLjY1YWYwODUgMTAwNjQ0CistLS0gYS9jb25maWcvZXUuYW0KKysrKyBiL2NvbmZpZy9ldS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgQ29tbW9uIGF1dG9tYWtlIGZyYWdtZW50cyBmb3IgZWxmdXRpbHMgc3ViZGlyZWN0b3J5IG1ha2VmaWxlcy4KKyAjIworLSMjIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBSZWQgSGF0LCBJbmMuCisrIyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEsIDIwMTQgUmVkIEhhdCwgSW5jLgorICMjCisgIyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisgIyMKK0BAIC0yOSw2ICsyOSw5IEBACisgIyMgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICMjCisgCisrV0VYVFJBID0gQFdFWFRSQUAKKytMRF9BU19ORUVERUQgPSBATERfQVNfTkVFREVEQAorKworIERFRlMgPSAtRF9HTlVfU09VUkNFIC1ESEFWRV9DT05GSUdfSCAtRExPQ0FMRURJUj0nIiR7bG9jYWxlZGlyfSInCisgQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSS4uCisgCitAQCAtMzgsMTIgKzQxLDE3IEBAIFNUQUNLX1VTQUdFX1dBUk5JTkc9LVdzdGFjay11c2FnZT0yNjIxNDQKKyBlbHNlCisgU1RBQ0tfVVNBR0VfV0FSTklORz0KKyBlbmRpZgorLUFNX0NGTEFHUyA9IC1zdGQ9Z251OTkgLVdhbGwgLVdzaGFkb3cgLVdmb3JtYXQ9MiBcCisrQU1fQ0ZMQUdTID0gLXN0ZD1nbnU5OSAtV2FsbCAtV3NoYWRvdyBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Vycm9yKSwsLVdlcnJvcikgXAorLQkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAtV2V4dHJhKSBcCisrCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkICQoV0VYVFJBKSkgXAorKwkgICAgJChpZiAkKCQoKkYpX25vX1dmb3JtYXQpLC1Xbm8tZm9ybWF0LC1XZm9ybWF0PTIpIFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19Xc3RhY2tfdXNhZ2UpLCwkKFNUQUNLX1VTQUdFX1dBUk5JTkcpKSBcCisgCSAgICAkKCQoKkYpX0NGTEFHUykKKyAKKytpZiBCVUlMRF9XRVJST1IKKytBTV9DRkxBR1MgKz0gJChpZiAkKCQoKkYpX25vX1dlcnJvciksLC1XZXJyb3IpCisrZW5kaWYKKysKKyBDT01QSUxFLm9zID0gJChmaWx0ZXItb3V0IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSwgJChDT01QSUxFKSkKKyAKKyBERUZTLm9zID0gLURQSUMgLURTSEFSRUQKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJjOWZmNTYuLjI3YTFlZjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNiw2ICsxMDYsNTUgQEAgQ0ZMQUdTPSIkb2xkX0NGTEFHUyJdKQorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2M5OSIgIT0geHllc10sCisgICAgICAgQUNfTVNHX0VSUk9SKFtnY2Mgd2l0aCBHTlU5OSBzdXBwb3J0IHJlcXVpcmVkXSkpCisgCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtV2V4dHJhIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY193ZXh0cmEsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtV2V4dHJhIgorK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbdm9pZCBmb28gKHZvaWQpIHsgfV0pXSwKKysJCSAgYWNfY3ZfY2Nfd2V4dHJhPXllcywgYWNfY3ZfY2Nfd2V4dHJhPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBQ19TVUJTVChXRVhUUkEpCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2Nfd2V4dHJhIiA9IHh5ZXNdLCBbV0VYVFJBPS1XZXh0cmFdLCBbV0VYVFJBPS1XXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1mZ251ODktaW5saW5lIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY19nbnU4OV9pbmxpbmUsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtZmdudTg5LWlubGluZSAtV2Vycm9yIgorK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbCisrdm9pZCBmb28gKHZvaWQpCisreworKyAgaW5saW5lIHZvaWQgYmFyICh2b2lkKSB7fQorKyAgYmFyICgpOworK30KKytleHRlcm4gaW5saW5lIHZvaWQgYmF6ICh2b2lkKSB7fQorK10pXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lPXllcywgYWNfY3ZfY2NfZ251ODlfaW5saW5lPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY19nbnU4OV9pbmxpbmUiID0geHllc10sCisrICAgICAgW1dFWFRSQT0iJHtXRVhUUkE6KyRXRVhUUkEgfS1mZ251ODktaW5saW5lIl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uXSwKKysJICAgICAgIGFjX2N2X2FzX25lZWRlZCwgW2RubAorK2NhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKytpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQorK0VPRgorK2lmIEFDX1RSWV9DT01NQU5EKFske0NDLWNjfSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUworKwkJCSAgICAtZlBJQyAtc2hhcmVkIC1vIGNvbmZ0ZXN0LnNvIGNvbmZ0ZXN0LmMKKysJCQkgICAgLVdsLC0tYXMtbmVlZGVkIDE+JkFTX01FU1NBR0VfTE9HX0ZEXSkKKyt0aGVuCisrICBhY19jdl9hc19uZWVkZWQ9eWVzCisrZWxzZQorKyAgYWNfY3ZfYXNfbmVlZGVkPW5vCisrZmkKKytybSAtZiBjb25mdGVzdCpdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2FzX25lZWRlZCIgPSB4eWVzXSwKKysgICAgICBbTERfQVNfTkVFREVEPS1XbCwtLWFzLW5lZWRlZF0sIFtMRF9BU19ORUVERUQ9XSkKKytBQ19TVUJTVChMRF9BU19ORUVERUQpCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX2J1aWx0aW5fcG9wY291bnRdLCBhY19jdl9wb3Bjb3VudCwgW2RubAorK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbZXhpdCAoX19idWlsdGluX3BvcGNvdW50ICgxMjcpKTtdXSldLAorKwkgICAgICAgYWNfY3ZfcG9wY291bnQ9eWVzLCBhY19jdl9wb3Bjb3VudD1ubyldKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X3BvcGNvdW50IiA9IHh5ZXNdLAorKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfQlVJTFRJTl9QT1BDT1VOVF0sIFsxXSwgW0hhdmUgX19idWlsdGluX3BvcGNvdW50Ll0pXSkKKysKKysKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIF9fdGhyZWFkIHN1cHBvcnRdLCBhY19jdl90bHMsIFtkbmwKKyAjIFVzZSB0aGUgc2FtZSBmbGFncyB0aGF0IHdlIHVzZSBmb3Igb3VyIERTT3MsIHNvIHRoZSB0ZXN0IGlzIHJlcHJlc2VudGF0aXZlLgorICMgU29tZSBvbGQgY29tcGlsZXIvbGlua2VyL2xpYmMgY29tYmluYXRpb25zIGZhaWwgc29tZSB3YXlzIGFuZCBub3Qgb3RoZXJzLgorQEAgLTEyMiw3ICsxNzEsMTAgQEAgc3RhdGljIF9fdGhyZWFkIGludCBhOyBpbnQgZm9vIChpbnQgYikgeyByZXR1cm4gYSArIGI7IH1dXSwKKyBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfdGxzIiAhPSB4eWVzXSwKKy0gICAgICBBQ19NU0dfRVJST1IoW19fdGhyZWFkIHN1cHBvcnQgcmVxdWlyZWRdKSkKKysgICAgICBbQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwKKysJICAgICBbQUNfTVNHX0VSUk9SKFstLWVuYWJsZS10aHJlYWQtc2FmZXR5IHJlcXVpcmVzIF9fdGhyZWFkIHN1cHBvcnRdKV0sCisrCSAgICAgW0FDX0RFRklORShbX190aHJlYWRdLCBbLyogZW1wdHk6IG5vIG11bHRpLXRocmVhZCBzdXBwb3J0ICovXSwKKysJCQlbU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0Ll0pXSldKQorIAorIGRubCBUaGlzIHRlc3QgbXVzdCBjb21lIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uCisgZG5sIHRlc3RzLCBiZWNhdXNlIHRoZSBjaG9pY2Ugb2YgdGhlIGZpbGUgbW9kZWwgY2FuIChpbiBwcmluY2lwbGUpIGFmZmVjdAorQEAgLTIyNCw2ICsyNzYsMTEgQEAgQU1fQ09ORElUSU9OQUwoVVNFX1ZBTEdSSU5ELCB0ZXN0ICIkdXNlX3ZhbGdyaW5kIiA9IHllcykKKyBBTV9DT05ESVRJT05BTChCVUlMRF9TVEFUSUMsIFtkbmwKKyB0ZXN0ICIkdXNlX2dwcm9mIiA9IHllcyAtbyAiJHVzZV9nY292IiA9IHllc10pCisgCisrQUNfQVJHX0VOQUJMRShbd2Vycm9yXSwKKytBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXdlcnJvcl0sW2RvIG5vdCBidWlsZCB3aXRoIC1XZXJyb3JdKSwKKysJICAgICAgIFtlbmFibGVfd2Vycm9yPSRlbmFibGV2YWxdLCBbZW5hYmxlX3dlcnJvcj15ZXNdKQorK0FNX0NPTkRJVElPTkFMKEJVSUxEX1dFUlJPUiwgdGVzdCAiJGVuYWJsZV93ZXJyb3IiID0geWVzKQorKworIEFDX0FSR19FTkFCTEUoW3Rlc3RzLXJwYXRoXSwKKyBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdGVzdHMtcnBhdGhdLFtidWlsZCAkT1JJR0lOLXVzaW5nIHJwYXRoIGludG8gdGVzdHNdKSwKKyAJICAgICAgIFt0ZXN0c191c2VfcnBhdGg9JGVuYWJsZXZhbF0sIFt0ZXN0c191c2VfcnBhdGg9bm9dKQorQEAgLTM4OCw3ICs0NDUsNyBAQCBjYXNlICIkZXVfdmVyc2lvbiIgaW4KKyBlc2FjCisgCisgIyBSb3VuZCB1cCB0byB0aGUgbmV4dCByZWxlYXNlIEFQSSAoeC55KSB2ZXJzaW9uLgorLWV1X3ZlcnNpb249JCgoIChldV92ZXJzaW9uICsgOTk5KSAvIDEwMDAgKSkKKytldV92ZXJzaW9uPWBleHByIFwoICRldV92ZXJzaW9uICsgOTk5IFwpIC8gMTAwMGAKKyAKKyBkbmwgVW5pcXVlIElEIGZvciB0aGlzIGJ1aWxkLgorIE1PRFZFUlNJT049IkJ1aWxkIGZvciAke0xJQkVCTF9TVUJESVJ9ICR7ZXVfdmVyc2lvbn0gJHthY19jdl9idWlsZH0iCitkaWZmIC0tZ2l0IGEvbGliL0NoYW5nZUxvZyBiL2xpYi9DaGFuZ2VMb2cKK2luZGV4IGQwNGJmMTcuLjcyMGM5OGQgMTAwNjQ0CistLS0gYS9saWIvQ2hhbmdlTG9nCisrKysgYi9saWIvQ2hhbmdlTG9nCitAQCAtNzMsNiArNzMsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogZXUtY29uZmlnLmggWyEgSEFWRV9CVUlMVElOX1BPUENPVU5UXQorKwkoX19idWlsdGluX3BvcGNvdW50KTogTmV3IGlubGluZSBmdW5jdGlvbi4KKysKKyAJKiBldS1jb25maWcuaDogQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uLgorIAorIDIwMDktMDEtMTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTEyOSw2ICsxMzIsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZXVfYV9TT1VSQ0VTKTogQWRkIGl0LgorIAkqIHN5c3RlbS5oOiBEZWNsYXJlIGNyYzMyX2ZpbGUuCisgCisrMjAwNS0wMi0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA0LTMwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbTogVXNlIC1mZnVuY3Rpb24tc2VjdGlvbnMgZm9yIHhtYWxsb2MuYy4KK2RpZmYgLS1naXQgYS9saWIvZXUtY29uZmlnLmggYi9saWIvZXUtY29uZmlnLmgKK2luZGV4IDQwMGNkYzYuLjg3MmY2YmMgMTAwNjQ0CistLS0gYS9saWIvZXUtY29uZmlnLmgKKysrKyBiL2xpYi9ldS1jb25maWcuaAorQEAgLTE2Myw2ICsxNjMsMTYgQEAgYXNtICgiLnNlY3Rpb24gcHJlZGljdF9kYXRhLCBcImF3XCI7IC5wcmV2aW91c1xuIgorIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCBieSB0aGUgdGVzdHMgY29uZGl0aW9uYWxpemUgZm9yIHN0YW5kYWxvbmUgYnVpbGRpbmcuICAqLworICNkZWZpbmUgRUxGVVRJTFNfSEVBREVSKG5hbWUpIDxsaWIjI25hbWUuaD4KKyAKKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9QT1BDT1VOVAorKyMgZGVmaW5lIF9fYnVpbHRpbl9wb3Bjb3VudCBoYWttZW1fcG9wY291bnQKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKytoYWttZW1fcG9wY291bnQgKHVuc2lnbmVkIGludCB4KQorK3sKKysgIC8qIEhBS01FTSAxNjkgKi8KKysgIHVuc2lnbmVkIGludCBuID0geCAtICgoeCA+PiAxKSAmIDAzMzMzMzMzMzMzMykgLSAoKHggPj4gMikgJiAwMTExMTExMTExMTEpOworKyAgcmV0dXJuICgobiArIChuID4+IDMpKSAmIDAzMDcwNzA3MDcwNykgJSA2MzsKKyt9CisrI2VuZGlmCS8qIEhBVkVfQlVJTFRJTl9QT1BDT1VOVCAqLworIAorICNpZmRlZiBTWU1CT0xfVkVSU0lPTklORworICMgZGVmaW5lIE9MRF9WRVJTSU9OKG5hbWUsIHZlcnNpb24pIFwKK2RpZmYgLS1naXQgYS9saWJhc20vQ2hhbmdlTG9nIGIvbGliYXNtL0NoYW5nZUxvZworaW5kZXggOWIyNWFmOS4uMzJiOWZkMCAxMDA2NDQKKy0tLSBhL2xpYmFzbS9DaGFuZ2VMb2cKKysrKyBiL2xpYmFzbS9DaGFuZ2VMb2cKK0BAIC04Nyw2ICs4NywxMSBAQAorIAkqIGFzbV9lcnJvci5jOiBBZGQgbmV3IGVycm9yIEFTTV9FX0lPRVJST1IuCisgCSogbGliYXNtUC5oOiBBZGQgQVNNX0VfSU9FUlJPUiBkZWZpbml0aW9uLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wMi0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IEFkZCAtV3VudXNlZCAtV2V4dHJhIC1XZm9ybWF0PTIuCitkaWZmIC0tZ2l0IGEvbGliY3B1L0NoYW5nZUxvZyBiL2xpYmNwdS9DaGFuZ2VMb2cKK2luZGV4IGEyMGY0NDAuLjVlYTIzYjcgMTAwNjQ0CistLS0gYS9saWJjcHUvQ2hhbmdlTG9nCisrKysgYi9saWJjcHUvQ2hhbmdlTG9nCitAQCAtNTEsNiArNTEsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogaTM4Nl9kaXNhc20uYyAoaTM4Nl9kaXNhc20pOiBBZGQgYWJvcnQgYWZ0ZXIgYXNzZXJ0LWNvbnN0YW50IGZvciBvbGQKKysJY29tcGlsZXJzIHRoYXQgZG9uJ3QgcmVhbGl6ZSBpdCdzIG5vcmV0dXJuLgorKworIAkqIE1ha2VmaWxlLmFtIChpMzg2X3BhcnNlX0NGTEFHUyk6IFVzZSBxdW90ZXMgYXJvdW5kIGNvbW1hbmQKKyAJc3Vic3RpdHV0aW9uIHRoYXQgY2FuIHByb2R1Y2UgbGVhZGluZyB3aGl0ZXNwYWNlLgorIAorQEAgLTM4MCw2ICszODMsMTEgQEAKKyAJKiBkZWZzL2kzODYuZG9jOiBOZXcgZmlsZS4KKyAJKiBkZWZzL3g4Nl82NDogTmV3IGZpbGUuCisgCisrMjAwNS0wNC0wNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW5zdGVhZCBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorZGlmZiAtLWdpdCBhL2xpYmNwdS9pMzg2X2Rpc2FzbS5jIGIvbGliY3B1L2kzODZfZGlzYXNtLmMKK2luZGV4IDgzMjI0MWYuLmM3YTBkZjAgMTAwNjQ0CistLS0gYS9saWJjcHUvaTM4Nl9kaXNhc20uYworKysrIGIvbGliY3B1L2kzODZfZGlzYXNtLmMKK0BAIC04MjIsNiArODIyLDcgQEAgaTM4Nl9kaXNhc20gKGNvbnN0IHVpbnQ4X3QgKipzdGFydHAsIGNvbnN0IHVpbnQ4X3QgKmVuZCwgR0VsZl9BZGRyIGFkZHIsCisgCisgCQkJZGVmYXVsdDoKKyAJCQkgIGFzc2VydCAoISAiSU5WQUxJRCBub3QgaGFuZGxlZCIpOworKwkJCSAgYWJvcnQgKCk7CisgCQkJfQorIAkJICAgIH0KKyAJCSAgZWxzZQorZGlmZiAtLWdpdCBhL2xpYmR3L0NoYW5nZUxvZyBiL2xpYmR3L0NoYW5nZUxvZworaW5kZXggNDg3ZTM0YS4uMDZjNzM3YiAxMDA2NDQKKy0tLSBhL2xpYmR3L0NoYW5nZUxvZworKysrIGIvbGliZHcvQ2hhbmdlTG9nCitAQCAtODg5LDYgKzg4OSwxMCBAQAorIAorIAkqIE1ha2VmaWxlLmFtIChrbm93bi1kd2FyZi5oKTogUnVuIGdhd2sgb24gY29uZmlnL2tub3duLWR3YXJmLmF3ay4KKyAKKysyMDExLTA3LTIwICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisrCisrCSogZHdhcmZfYmVnaW5fZWxmLmM6IEFkZCBmYWxsYmFjayBmb3IgYmU2NHRvaCBpZiBub3QgZGVmaW5lZC4KKysKKyAyMDExLTA3LTE0ICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCisgCSogbGliZHcuaCAoZHdhcmZfb2ZmZGllKTogRml4IGRvY3VtZW50YXRpb24gdG8gbWVudGlvbiAuZGVidWdfaW5mby4KK0BAIC0xMjQ4LDYgKzEyNTIsMTAgQEAKKyAKKyAJKiBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZS5jOiBJbnRlZ3JhdGUgRFdfQVRfc3BlY2lmaWNhdGlvbiB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsaWJkdy5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZHdhcmZfZ2V0c2NvcGV2YXIuYzogVXNlIGR3YXJmX2RpZW5hbWUuCitAQCAtMjAxNiw2ICsyMDI0LDExIEBACisgCisgMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIGR3YXJmX2Zvcm1yZWZfZGllLmMgKGR3YXJmX2Zvcm1yZWZfZGllKTogQWRkIENVIGhlYWRlciBvZmZzZXQgdG8KKyAJZm9ybXJlZiBvZmZzZXQuCisgCitkaWZmIC0tZ2l0IGEvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMgYi9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworaW5kZXggNGUwZDU5MC4uYTY2MTZhMSAxMDA2NDQKKy0tLSBhL2xpYmR3L2R3YXJmX2JlZ2luX2VsZi5jCisrKysgYi9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworQEAgLTQ3LDYgKzQ3LDE0IEBACisgI2lmIFVTRV9aTElCCisgIyBpbmNsdWRlIDxlbmRpYW4uaD4KKyAjIGRlZmluZSBjcmMzMgkJbG9zZXJfY3JjMzIKKysjIGlmbmRlZiBiZTY0dG9oCisrIyAgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjICBpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisrIyAgIGRlZmluZSBiZTY0dG9oKHgpIGJzd2FwXzY0ICh4KQorKyMgIGVsc2UKKysjICAgZGVmaW5lIGJlNjR0b2goeCkgKHgpCisrIyAgZW5kaWYKKysjIGVuZGlmCisgIyBpbmNsdWRlIDx6bGliLmg+CisgIyB1bmRlZiBjcmMzMgorICNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYmR3L2xpYmR3LmggYi9saWJkdy9saWJkdy5oCitpbmRleCA0NzNlMWEyLi41YTUxMWNkIDEwMDY0NAorLS0tIGEvbGliZHcvbGliZHcuaAorKysrIGIvbGliZHcvbGliZHcuaAorQEAgLTEwMDQsNyArMTAwNCw3IEBAIGV4dGVybiBEd2FyZl9PT00gZHdhcmZfbmV3X29vbV9oYW5kbGVyIChEd2FyZiAqZGJnLCBEd2FyZl9PT00gaGFuZGxlcik7CisgCisgCisgLyogSW5saW5lIG9wdGltaXphdGlvbnMuICAqLworLSNpZmRlZiBfX09QVElNSVpFX18KKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgLyogUmV0dXJuIGF0dHJpYnV0ZSBjb2RlIG9mIGdpdmVuIGF0dHJpYnV0ZS4gICovCisgX19saWJkd19leHRlcm5faW5saW5lIHVuc2lnbmVkIGludAorIGR3YXJmX3doYXRhdHRyIChEd2FyZl9BdHRyaWJ1dGUgKmF0dHIpCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9DaGFuZ2VMb2cgYi9saWJkd2ZsL0NoYW5nZUxvZworaW5kZXggYTUyNTNlMi4uNTlhYmZhYyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvQ2hhbmdlTG9nCisrKysgYi9saWJkd2ZsL0NoYW5nZUxvZworQEAgLTcwNCw2ICs3MDQsMjEgQEAKKyAJKGR3ZmxfbW9kdWxlX2FkZHJzeW0pIChpX3RvX3N5bWZpbGUpOiBOZXcgZnVuY3Rpb24uCisgCShkd2ZsX21vZHVsZV9hZGRyc3ltKSAoc2VhcmNoX3RhYmxlKTogVXNlIGl0LgorIAorKzIwMTMtMTEtMDkgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKysKKysJT2xkZXIgT1MgY29tcGF0aWJpbGl0eSBiaXRzLgorKwkqIGxpbnV4LWNvcmUtYXR0YWNoLmMgKGJlNjR0b2gsIGxlNjR0b2gsIGJlMzJ0b2gsIGxlMzJ0b2gpOiBQcm92aWRlCisrCWZhbGxiYWNrcyBpZiBub3QgZGVmaW5lZCBieSBzeXN0ZW0uCisrCisrMjAxMy0xMS0wOSAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorKworKwlIYW5kbGUgVC1zdG9wcGVkIGRldGFjaCBmb3Igb2xkIGtlcm5lbHMuCisrCSogbGludXgtcGlkLWF0dGFjaC5jIChzdHJ1Y3QgcGlkX2FyZyk6IE5ldyBmaWVsZCBzdG9wcGVkLgorKwkocHRyYWNlX2F0dGFjaCk6IE5ldyBwYXJhbWV0ZXIgc3RvcHBlZHAuICBTZXQgaXQgYXBwcm9wcmlhdGVseS4KKysJKHBpZF9zZXRfaW5pdGlhbF9yZWdpc3RlcnMpOiBQYXNzIHRoZSBuZXcgZmllbGQuCisrCShwaWRfdGhyZWFkX2RldGFjaCk6IEhhbmRsZSB0aGUgY2FzZSBvZiBTVE9QUEVEIGZvciBvbGQga2VybmVscy4KKysJKF9fbGliZHdmbF9hdHRhY2hfc3RhdGVfZm9yX3BpZCk6IEluaXRpYWxpemUgU1RPUFBFRC4KKysKKyAyMDEzLTExLTA3ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisgCSAgICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCitAQCAtMjQ2OSw2ICsyNDg0LDExIEBACisgCisgMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA3LTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIE1ha2VmaWxlLmFtIChub2luc3RfSEVBREVSUyk6IEFkZCBsb2MyYy5jLgorIAorIAkqIHRlc3QyLmMgKG1haW4pOiBDaGVjayBzc2NhbmYgcmVzdWx0IHRvIHF1aWV0IHdhcm5pbmcuCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jIGIvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCitpbmRleCA1YTdiM2IzLi5kMDVhYzdlIDEwMDY0NAorLS0tIGEvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCisrKysgYi9saWJkd2ZsL2xpbnV4LWNvcmUtYXR0YWNoLmMKK0BAIC0yOSw2ICsyOSwzNSBAQAorICNpbmNsdWRlICJsaWJkd2ZsUC5oIgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlICJzeXN0ZW0uaCIKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjIGlmbmRlZiBiZTY0dG9oCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgYnN3YXBfNjQgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGxlNjR0b2gKKysjICBkZWZpbmUgbGU2NHRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgYmUzMnRvaAorKyMgIGRlZmluZSBiZTMydG9oKHgpIGJzd2FwXzMyICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTMydG9oCisrIyAgZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrIyBlbmRpZgorKyNlbHNlCisrIyBpZm5kZWYgYmU2NHRvaAorKyMgIGRlZmluZSBiZTY0dG9oKHgpICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTY0dG9oCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgYnN3YXBfNjQgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGJlMzJ0b2gKKysjICBkZWZpbmUgYmUzMnRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGUzMnRvaAorKyMgIGRlZmluZSBsZTMydG9oKHgpIGJzd2FwXzMyICh4KQorKyMgZW5kaWYKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiLi4vbGliZHcvbWVtb3J5LWFjY2Vzcy5oIgorIAorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jIGIvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKK2luZGV4IGFlNzE3MDIuLjA3NmIyYzMgMTAwNjQ0CistLS0gYS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworKysrIGIvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKK0BAIC0yNTUsNiArMjU1LDExIEBAIHZvaWQKKyBpbnRlcm5hbF9mdW5jdGlvbgorIF9fbGliZHdmbF9wdHJhY2VfZGV0YWNoIChwaWRfdCB0aWQsIGJvb2wgdGlkX3dhc19zdG9wcGVkKQorIHsKKysgIC8vIE9sZGVyIGtlcm5lbHMgKHRlc3RlZCBrZXJuZWwtMi42LjE4LTM0OC4xMi4xLmVsNS54ODZfNjQpIG5lZWQgc3BlY2lhbAorKyAgLy8gaGFuZGxpbmcgb2YgdGhlIGRldGFjaG1lbnQgdG8ga2VlcCB0aGUgcHJvY2VzcyBTdGF0ZTogVCAoc3RvcHBlZCkuCisrICBpZiAodGlkX3dhc19zdG9wcGVkKQorKyAgICBzeXNjYWxsIChfX05SX3RraWxsLCB0aWQsIFNJR1NUT1ApOworKworICAgLyogVGhpcyBoYW5kbGluZyBpcyBuZWVkZWQgb25seSBvbiBvbGRlciBMaW51eCBrZXJuZWxzIHN1Y2ggYXMKKyAgICAgIDIuNi4zMi0zNTguMjMuMi5lbDYucHBjNjQuICBMYXRlciBrZXJuZWxzIHN1Y2ggYXMKKyAgICAgIDMuMTEuNy0yMDAuZmMxOS54ODZfNjQgcmVtZW1iZXIgdGhlIFQgKHN0b3BwZWQpIHN0YXRlCitAQCAtMjYyLDYgKzI2NywxNSBAQCBfX2xpYmR3ZmxfcHRyYWNlX2RldGFjaCAocGlkX3QgdGlkLCBib29sIHRpZF93YXNfc3RvcHBlZCkKKyAgICAgIFBUUkFDRV9ERVRBQ0guICAqLworICAgcHRyYWNlIChQVFJBQ0VfREVUQUNILCB0aWQsIE5VTEwsCisgCSAgKHZvaWQgKikgKGludHB0cl90KSAodGlkX3dhc19zdG9wcGVkID8gU0lHU1RPUCA6IDApKTsKKysKKysgIGlmICh0aWRfd2FzX3N0b3BwZWQpCisrICAgIHsKKysgICAgICAvLyBXYWl0IHRpbGwgdGhlIFNJR1NUT1Agc2V0dGxlcyBkb3duLgorKyAgICAgIGludCBpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKKysJaWYgKGxpbnV4X3Byb2NfcGlkX2lzX3N0b3BwZWQgKHRpZCkpCisrCSAgYnJlYWs7CisrICAgIH0KKyB9CisgCisgc3RhdGljIHZvaWQKK2RpZmYgLS1naXQgYS9saWJlYmwvQ2hhbmdlTG9nIGIvbGliZWJsL0NoYW5nZUxvZworaW5kZXggNTFhZTYwZi4uYWVlMDIxNyAxMDA2NDQKKy0tLSBhL2xpYmVibC9DaGFuZ2VMb2cKKysrKyBiL2xpYmVibC9DaGFuZ2VMb2cKK0BAIC03ODAsNiArNzgwLDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmVibF8qX3NvX1NPVVJDRVMpOiBTZXQgdG8gJCgqX1NSQ1MpIHNvIGRlcGVuZGVuY3kKKyAJdHJhY2tpbmcgd29ya3MgcmlnaHQuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBsaWJlYmxfeDg2XzY0Lm1hcDogQWRkIHg4Nl82NF9jb3JlX25vdGUuCitkaWZmIC0tZ2l0IGEvbGliZWxmL0NoYW5nZUxvZyBiL2xpYmVsZi9DaGFuZ2VMb2cKK2luZGV4IDMwMDE3Y2QuLjljYTljNzMgMTAwNjQ0CistLS0gYS9saWJlbGYvQ2hhbmdlTG9nCisrKysgYi9saWJlbGYvQ2hhbmdlTG9nCitAQCAtMzk4LDYgKzM5OCwxMSBAQAorIAorIAkqIGVsZi1rbm93bGVkZ2UuaCAoU0VDVElPTl9TVFJJUF9QKTogUmVtb3ZlIDwgU0hUX05VTSBjaGVjay4KKyAKKysyMDExLTAzLTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGdudWhhc2hfeGxhdGUuaCAoZWxmX2N2dF9nbnVoYXNoKTogQXZvaWQgcG9zdC1pbmNyZW1lbnQgaW4gYnN3YXBfMzIKKysJYXJndW1lbnQsIHNpbmNlIHNvbWUgaW1wbGVtZW50YXRpb25zIGFyZSBidWdneSBtYWNyb3MuCisrCisgMjAxMS0wMi0yNiAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorIAkqIGVsZl9lbmQuYyAoZWxmX2VuZCk6IENhbGwgcndsb2NrX3VubG9jayBiZWZvcmUgcndsb2NrX2ZpbmkuCitAQCAtMTA3NSw2ICsxMDgwLDExIEBACisgCisgCSogZWxmLmg6IFVwZGF0ZSBmcm9tIGdsaWJjLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZfYmVnaW4uYyAocmVhZF9maWxlKSBbX01VREZMQVBdOiBEb24ndCB1c2UgbW1hcCBmb3Igbm93LgorZGlmZiAtLWdpdCBhL2xpYmVsZi9jb21tb24uaCBiL2xpYmVsZi9jb21tb24uaAoraW5kZXggNzQ0ZjFiYi4uMTg1ZWE1OSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9jb21tb24uaAorKysrIGIvbGliZWxmL2NvbW1vbi5oCitAQCAtMTM5LDcgKzEzOSw3IEBAIGxpYmVsZl9yZWxlYXNlX2FsbCAoRWxmICplbGYpCisgICAoVmFyKSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK0BAIC0xNDgsNyArMTQ4LDcgQEAgbGliZWxmX3JlbGVhc2VfYWxsIChFbGYgKmVsZikKKyAgIChEc3QpID0gKHNpemVvZiAoVmFyKSA9PSAxCQkJCQkJICAgICAgXAorIAkgICA/ICh1bnNpZ25lZCBjaGFyKSAoVmFyKQkJCQkJICAgICAgXAorIAkgICA6IChzaXplb2YgKFZhcikgPT0gMgkJCQkJCSAgICAgIFwKKy0JICAgICAgPyBic3dhcF8xNiAoVmFyKQkJCQkJCSAgICAgIFwKKysJICAgICAgPyAodW5zaWduZWQgc2hvcnQgaW50KSBic3dhcF8xNiAoVmFyKQkJCSAgICAgIFwKKyAJICAgICAgOiAoc2l6ZW9mIChWYXIpID09IDQJCQkJCSAgICAgIFwKKyAJCSA/IGJzd2FwXzMyIChWYXIpCQkJCQkgICAgICBcCisgCQkgOiBic3dhcF82NCAoVmFyKSkpKQorZGlmZiAtLWdpdCBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmggYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitpbmRleCAwNGQ5Y2ExLi4zZTI1OTM2IDEwMDY0NAorLS0tIGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorKysrIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorQEAgLTEsNSArMSw1IEBACisgLyogQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHZlcnNpb25pbmcgaW5mb3JtYXRpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNi4KKyAKK0BAIC02OSw3ICs2OSw5IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgZGVzdDMyID0gKEVsZjMyX1dvcmQgKikgJmRlc3Q2NFtiaXRtYXNrX3dvcmRzXTsKKyAgIHdoaWxlIChsZW4gPj0gNCkKKyAgICAgeworLSAgICAgICpkZXN0MzIrKyA9IGJzd2FwXzMyICgqc3JjMzIrKyk7CisrICAgICAgKmRlc3QzMiA9IGJzd2FwXzMyICgqc3JjMzIpOworKyAgICAgICsrZGVzdDMyOworKyAgICAgICsrc3JjMzI7CisgICAgICAgbGVuIC09IDQ7CisgICAgIH0KKyB9CitkaWZmIC0tZ2l0IGEvc3JjL0NoYW5nZUxvZyBiL3NyYy9DaGFuZ2VMb2cKK2luZGV4IDE1ZTZmYWUuLjc4NTM1YzggMTAwNjQ0CistLS0gYS9zcmMvQ2hhbmdlTG9nCisrKysgYi9zcmMvQ2hhbmdlTG9nCitAQCAtMTU5OCw4ICsxNTk4LDE2IEBACisgCSogcmVhZGVsZi5jIChhdHRyX2NhbGxiYWNrKTogVXNlIHByaW50X2Jsb2NrIG9ubHkgd2hlbiB3ZSBkb24ndCB1c2UKKyAJcHJpbnRfb3BzLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGQuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIHN0cmluZ3MuYyAocmVhZF9ibG9jayk6IENvbmRpdGlvbmFsaXplIHBvc2l4X2ZhZHZpc2UgdXNlCisrCW9uIFtQT1NJWF9GQURWX1NFUVVFTlRJQUxdLgorKwlGcm9tIFBldHIgU2FsaW5nZXIgPFBldHIuU2FsaW5nZXJAc2V6bmFtLmN6Pi4KKysKKyAJKiBhci5jIChkb19vcGVyX2V4dHJhY3QpOiBVc2UgcGF0aGNvbmYgaW5zdGVhZCBvZiBzdGF0ZnMuCisgCisgMjAwOS0wOC0wMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtMTc2Myw2ICsxNzcxLDggQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2ZyYW1lX3NlY3Rpb24pOiBVc2UgdCBpbnN0ZWFkIG9mIGogZm9ybWF0cworIAlmb3IgcHRyZGlmZl90IE9GRlNFVC4KKyAKKysJKiBhZGRyMmxpbmUuYyAoaGFuZGxlX2FkZHJlc3MpOiBVc2UgJWEgaW5zdGVhZCBvZiAlbSBmb3IgY29tcGF0aWJpbGl0eS4KKysKKyAyMDA5LTAxLTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX3Byb2dyYW1faGVhZGVyKTogRml4IHR5cG8gaW4gLmVoX2ZyYW1lX2hkciBzZWN0aW9uCitAQCAtMTk0Niw2ICsxOTU2LDExIEBACisgCXRoYXQgbWF0Y2hlcyBpdHMgUFRfTE9BRCdzIHBfZmxhZ3MgJn4gUEZfVy4gIE9uIHNwYXJjLCBQRl9YIHJlYWxseQorIAlpcyB2YWxpZCBpbiBSRUxSTy4KKyAKKysyMDA4LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoZHVtcF9hcmNoaXZlX2luZGV4KTogVHdlYWsgcG9ydGFiaWxpdHkgaGFjaworKwl0byBtYXRjaCBbX19HTlVDX18gPCA0XSB0b28uCisrCisgMjAwOC0wMi0yOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2F0dHJpYnV0ZXMpOiBBZGQgYSBjYXN0LgorQEAgLTIxOTcsNiArMjIxMiw4IEBACisgCisgCSogcmVhZGVsZi5jIChoZXhfZHVtcCk6IEZpeCByb3VuZGluZyBlcnJvciBpbiB3aGl0ZXNwYWNlIGNhbGN1bGF0aW9uLgorIAorKwkqIE1ha2VmaWxlLmFtIChyZWFkZWxmX25vX1dlcnJvcik6IE5ldyB2YXJpYWJsZS4KKysKKyAyMDA3LTEwLTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIG1ha2UtZGVidWctYXJjaGl2ZS5pbjogTmV3IGZpbGUuCitAQCAtMjYzNiw2ICsyNjUzLDEwIEBACisgCSogZWxmbGludC5jICh2YWxpZF9lX21hY2hpbmUpOiBBZGQgRU1fQUxQSEEuCisgCVJlcG9ydGVkIGJ5IENocmlzdGlhbiBBaWNoaW5nZXIgPEdyZWVrMEBnbXgubmV0Pi4KKyAKKysJKiBzdHJpbmdzLmMgKG1hcF9maWxlKTogRGVmaW5lIFBPU0lYX01BRFZfU0VRVUVOVElBTCB0bworKwlNQURWX1NFUVVFTlRJQUwgaWYgdW5kZWZpbmVkLiAgCURvbid0IGNhbGwgcG9zaXhfbWFkdmlzZQorKwlpZiBuZWl0aGVyIGlzIGRlZmluZWQuCisrCisgMjAwNi0wOC0wOCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmbGludC5jIChjaGVja19keW5hbWljKTogRG9uJ3QgcmVxdWlyZSBEVF9IQVNIIGZvciBEVF9TWU1UQUIuCitAQCAtMjcxMiw2ICsyNzMzLDEwIEBACisgCSogTWFrZWZpbGUuYW06IEFkZCBoYWNrcyB0byBjcmVhdGUgZGVwZW5kZW5jeSBmaWxlcyBmb3Igbm9uLWdlbmVyaWMKKyAJbGlua2VyLgorIAorKzIwMDYtMDQtMDUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogc3RyaW5ncy5jIChNQVBfUE9QVUxBVEUpOiBEZWZpbmUgdG8gMCBpZiB1bmRlZmluZWQuCisrCisgMjAwNi0wNi0xMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGRnZW5lcmljLmMgKGxkX2dlbmVyaWNfZ2VuZXJhdGVfc2VjdGlvbnMpOiBEb24ndCBjcmVhdGUgLmludGVycAorQEAgLTMwNjAsNiArMzA4NSwxMSBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbG9jX3NlY3Rpb24pOiBGaXggaW5kZW50YXRpb24gZm9yIGxhcmdlcgorIAlhZGRyZXNzIHNpemUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbGluZV9zZWN0aW9uKTogUHJpbnQgc2VjdGlvbiBvZmZzZXQgb2YgZWFjaAorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggZGJhYzNlYi4uOTAyOGFhMSAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtOTAsNiArOTAsMTEgQEAgZW5kaWYKKyBsZGdlbmVyaWNfbm9fV3VudXNlZCA9IHllcworIGxkZ2VuZXJpY19ub19Xc3RhY2tfdXNhZ2UgPSB5ZXMKKyAKKysjIEJ1Z2d5IG9sZCBjb21waWxlcnMgb3IgbGliYyBoZWFkZXJzLgorK3JlYWRlbGZfbm9fV2Vycm9yID0geWVzCisrc3RyaW5nc19ub19XZXJyb3IgPSB5ZXMKKythZGRyMmxpbmVfbm9fV2Zvcm1hdCA9IHllcworKworICMgQmFkLCBiYWQgc3RhY2sgdXNhZ2UuLi4KKyByZWFkZWxmX25vX1dzdGFja191c2FnZSA9IHllcworIG5tX25vX1dzdGFja191c2FnZSA9IHllcworZGlmZiAtLWdpdCBhL3NyYy9hZGRyMmxpbmUuYyBiL3NyYy9hZGRyMmxpbmUuYworaW5kZXggMGNlODU0Zi4uZDJkMGM4YyAxMDA2NDQKKy0tLSBhL3NyYy9hZGRyMmxpbmUuYworKysrIGIvc3JjL2FkZHIybGluZS5jCitAQCAtNjIyLDEwICs2MjIsMTAgQEAgaGFuZGxlX2FkZHJlc3MgKGNvbnN0IGNoYXIgKnN0cmluZywgRHdmbCAqZHdmbCkKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglbVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL2ZpbmR0ZXh0cmVsLmMgYi9zcmMvZmluZHRleHRyZWwuYworaW5kZXggMjY0YTA2Yi4uZDdkZTIwMiAxMDA2NDQKKy0tLSBhL3NyYy9maW5kdGV4dHJlbC5jCisrKysgYi9zcmMvZmluZHRleHRyZWwuYworQEAgLTUwMiw3ICs1MDIsMTEgQEAgcHRyY29tcGFyZSAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQorIAorIAorIHN0YXRpYyB2b2lkCistY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbbnNlZ21lbnRzXSwKKytjaGVja19yZWwgKHNpemVfdCBuc2VnbWVudHMsIHN0cnVjdCBzZWdtZW50cyBzZWdtZW50c1sKKysjaWYgX19HTlVDX18gPj0gNAorKwkJCQkJCSAgICAgIG5zZWdtZW50cworKyNlbmRpZgorKwkgICBdLAorIAkgICBHRWxmX0FkZHIgYWRkciwgRWxmICplbGYsIEVsZl9TY24gKnN5bXNjbiwgRHdhcmYgKmR3LAorIAkgICBjb25zdCBjaGFyICpmbmFtZSwgYm9vbCBtb3JlX3RoYW5fb25lLCB2b2lkICoqa25vd25zcmNzKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvbGQuaCBiL3NyYy9sZC5oCitpbmRleCAyOWY0MDMxLi44Njk1YzMxIDEwMDY0NAorLS0tIGEvc3JjL2xkLmgKKysrKyBiL3NyYy9sZC5oCitAQCAtMTExNCw2ICsxMTE0LDcgQEAgZXh0ZXJuIGJvb2wgZHluYW1pY2FsbHlfbGlua2VkX3AgKHZvaWQpOworIAorIC8qIENoZWNrZWQgd2hldGhlciB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBmcm9tIGEgRFNPLiAgKi8KKyBleHRlcm4gYm9vbCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpOworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KKyBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorICNlbmRpZgorQEAgLTExMzEsNSArMTEzMiw2IEBAIGxpbmtlZF9mcm9tX2Rzb19wIChzdHJ1Y3Qgc2NuaW5mbyAqc2NuaW5mbywgc2l6ZV90IHN5bWlkeCkKKyAKKyAgIHJldHVybiBzeW0tPmRlZmluZWQgJiYgc3ltLT5pbl9kc287CisgfQorKyNlbmRpZgkvKiBPcHRpbWl6aW5nIGFuZCBub3QgR0NDIDQuMi4gICovCisgCisgI2VuZGlmCS8qIGxkLmggKi8KK2RpZmYgLS1naXQgYS9zcmMvcmVhZGVsZi5jIGIvc3JjL3JlYWRlbGYuYworaW5kZXggYjRjYjNhOC4uNjA2ZDIyMCAxMDA2NDQKKy0tLSBhL3NyYy9yZWFkZWxmLmMKKysrKyBiL3NyYy9yZWFkZWxmLmMKK0BAIC00MzY0LDEwICs0MzY0LDEyIEBAIGxpc3RwdHJfYmFzZSAoc3RydWN0IGxpc3RwdHIgKnApCisgICByZXR1cm4gYmFzZTsKKyB9CisgCisrc3RhdGljIGNvbnN0IGNoYXIgKmxpc3RwdHJfbmFtZTsKKysKKyBzdGF0aWMgaW50CistY29tcGFyZV9saXN0cHRyIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpCisrY29tcGFyZV9saXN0cHRyIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQorIHsKKy0gIGNvbnN0IGNoYXIgKm5hbWUgPSBhcmc7CisrICBjb25zdCBjaGFyICpjb25zdCBuYW1lID0gbGlzdHB0cl9uYW1lOworICAgc3RydWN0IGxpc3RwdHIgKnAxID0gKHZvaWQgKikgYTsKKyAgIHN0cnVjdCBsaXN0cHRyICpwMiA9ICh2b2lkICopIGI7CisgCitAQCAtNDQ2Myw4ICs0NDY1LDExIEBAIHN0YXRpYyB2b2lkCisgc29ydF9saXN0cHRyIChzdHJ1Y3QgbGlzdHB0cl90YWJsZSAqdGFibGUsIGNvbnN0IGNoYXIgKm5hbWUpCisgeworICAgaWYgKHRhYmxlLT5uID4gMCkKKy0gICAgcXNvcnRfciAodGFibGUtPnRhYmxlLCB0YWJsZS0+biwgc2l6ZW9mIHRhYmxlLT50YWJsZVswXSwKKy0JICAgICAmY29tcGFyZV9saXN0cHRyLCAodm9pZCAqKSBuYW1lKTsKKysgICAgeworKyAgICAgIGxpc3RwdHJfbmFtZSA9IG5hbWU7CisrICAgICAgcXNvcnQgKHRhYmxlLT50YWJsZSwgdGFibGUtPm4sIHNpemVvZiB0YWJsZS0+dGFibGVbMF0sCisrCSAgICAgJmNvbXBhcmVfbGlzdHB0cik7CisrICAgIH0KKyB9CisgCisgc3RhdGljIGJvb2wKK0BAIC05NTYxLDcgKzk1NjYsNyBAQCBkdW1wX2FyY2hpdmVfaW5kZXggKEVsZiAqZWxmLCBjb25zdCBjaGFyICpmbmFtZSkKKyAJICBpZiAodW5saWtlbHkgKGVsZl9yYW5kIChlbGYsIGFzX29mZikgPT0gMCkKKyAJICAgICAgfHwgdW5saWtlbHkgKChzdWJlbGYgPSBlbGZfYmVnaW4gKC0xLCBFTEZfQ19SRUFEX01NQVAsIGVsZikpCisgCQkJICAgPT0gTlVMTCkpCistI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpCisrI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpIHx8IF9fR05VQ19fIDwgNAorIAkgICAgd2hpbGUgKDEpCisgI2VuZGlmCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCitkaWZmIC0tZ2l0IGEvc3JjL3N0cmluZ3MuYyBiL3NyYy9zdHJpbmdzLmMKK2luZGV4IGIyYmNlN2IuLmZlMGFiNmMgMTAwNjQ0CistLS0gYS9zcmMvc3RyaW5ncy5jCisrKysgYi9zcmMvc3RyaW5ncy5jCitAQCAtNDMsNiArNDMsMTAgQEAKKyAKKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmbmRlZiBNQVBfUE9QVUxBVEUKKysjIGRlZmluZSBNQVBfUE9QVUxBVEUgMAorKyNlbmRpZgorKworIAorIC8qIFByb3RvdHlwZXMgb2YgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgaW50IHJlYWRfZmQgKGludCBmZCwgY29uc3QgY2hhciAqZm5hbWUsIG9mZjY0X3QgZmRsZW4pOworQEAgLTQ4OSw4ICs0OTMsMTMgQEAgbWFwX2ZpbGUgKGludCBmZCwgb2ZmNjRfdCBzdGFydF9vZmYsIG9mZjY0X3QgZmRsZW4sIHNpemVfdCAqbWFwX3NpemVwKQorIAkJICAgIGZkLCBzdGFydF9vZmYpOworICAgICAgIGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkKKyAJeworKyNpZiAhZGVmaW5lZCBQT1NJWF9NQURWX1NFUVVFTlRJQUwgJiYgZGVmaW5lZCBNQURWX1NFUVVFTlRJQUwKKysjIGRlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgTUFEVl9TRVFVRU5USUFMCisrI2VuZGlmCisrI2lmZGVmIFBPU0lYX01BRFZfU0VRVUVOVElBTAorIAkgIC8qIFdlIHdpbGwgZ28gdGhyb3VnaCB0aGUgbWFwcGluZyBzZXF1ZW50aWFsbHkuICAqLworIAkgICh2b2lkKSBwb3NpeF9tYWR2aXNlIChtZW0sIG1hcF9zaXplLCBQT1NJWF9NQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorIAkgIGJyZWFrOworIAl9CisgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFTk9NRU0pCitAQCAtNTgxLDkgKzU5MCwxMSBAQCByZWFkX2Jsb2NrIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZuYW1lLCBvZmY2NF90IGZkbGVuLCBvZmY2NF90IGZyb20sIG9mZjY0X3QgdG8pCisgICAgICAgZWxmbWFwX29mZiA9IGZyb20gJiB+KHBzIC0gMSk7CisgICAgICAgZWxmbWFwX2Jhc2UgPSBlbGZtYXAgPSBtYXBfZmlsZSAoZmQsIGVsZm1hcF9vZmYsIGZkbGVuLCAmZWxmbWFwX3NpemUpOworIAorKyNpZmRlZiBQT1NJWF9GQURWX1NFUVVFTlRJQUwKKyAgICAgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKKyAJLyogTGV0IHRoZSBrZXJuZWwga25vdyB3ZSBhcmUgZ29pbmcgdG8gcmVhZCBldmVyeXRoaW5nIGluIHNlcXVlbmNlLiAgKi8KKyAJKHZvaWQpIHBvc2l4X2ZhZHZpc2UgKGZkLCAwLCAwLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorICAgICB9CisgCisgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKK2RpZmYgLS1naXQgYS9zcmMvc3RyaXAuYyBiL3NyYy9zdHJpcC5jCitpbmRleCA1ZTY5MzM0Li44YmQxNzkwIDEwMDY0NAorLS0tIGEvc3JjL3N0cmlwLmMKKysrKyBiL3NyYy9zdHJpcC5jCitAQCAtNDQsNiArNDQsMTIgQEAKKyAjaW5jbHVkZSA8bGliZWJsLmg+CisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZmRlZiBIQVZFX0ZVVElNRVMKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSBmdXRpbWVzIChmZCwgdHZwKQorKyNlbHNlCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgdXRpbWVzIChmbmFtZSwgdHZwKQorKyNlbmRpZgorKworIHR5cGVkZWYgdWludDhfdCBHRWxmX0J5dGU7CisgCisgLyogTmFtZSBhbmQgdmVyc2lvbiBvZiBwcm9ncmFtLiAgKi8KK2RpZmYgLS1naXQgYS90ZXN0cy9DaGFuZ2VMb2cgYi90ZXN0cy9DaGFuZ2VMb2cKK2luZGV4IDE5ODc4YWMuLjY4MTUwMjggMTAwNjQ0CistLS0gYS90ZXN0cy9DaGFuZ2VMb2cKKysrKyBiL3Rlc3RzL0NoYW5nZUxvZworQEAgLTYwOSw2ICs2MDksMTMgQEAKKyAKKyAyMDEzLTEyLTAyICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisgCisrCUhhbmRsZSBULXN0b3BwZWQgZGV0YWNoIGZvciBvbGQga2VybmVscy4KKysJKiBiYWNrdHJhY2UuYzogSW5jbHVkZSBzeXMvc3lzY2FsbC5oLgorKwkobGludXhfcHJvY19waWRfaXNfc3RvcHBlZCk6IE5ldyBmdW5jdGlvbi4KKysJKHB0cmFjZV9kZXRhY2hfc3RvcHBlZCk6IEhhbmRsZSBvbGQga2VybmVscy4KKysKKysyMDEzLTEyLTAyICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisrCisgCSogTWFrZWZpbGUuYW0gKGNoZWNrX1BST0dSQU1TKTogQWRkIGJhY2t0cmFjZSwgYmFja3RyYWNlLWNoaWxkLAorIAliYWNrdHJhY2UtZGF0YSBhbmQgYmFja3RyYWNlLWR3YXJmLgorIAkoQlVJTFRfU09VUkNFUywgY2xlYW4tbG9jYWwsIGJhY2t0cmFjZS1jaGlsZC1iaWFyY2gpOiBOZXcuCitAQCAtMTQ3Myw2ICsxNDgwLDggQEAKKyAKKyAyMDA4LTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGxpbmUyYWRkci5jIChtYWluKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorKworIAkqIHRlc3RmaWxlNDUuUy5iejI6IEFkZCB0ZXN0cyBmb3IgY2x0cSwgY3F0by4KKyAJKiB0ZXN0ZmlsZTQ1LmV4cGVjdC5iejI6IEFkanVzdC4KKyAKK0BAIC0yMTgxLDYgKzIxOTAsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaC4KKyAJKEVYVFJBX0RJU1QpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaCBhbmQgdGVzdGZpbGUxOC5iejIuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTI0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBnZXQtZmlsZXMuYyAobWFpbik6IFVzZSBjb3JyZWN0IGZvcm1hdCBzcGVjaWZpZXIuCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNDI1ZjhjZC4uNjk3NjBhNCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTM4Miw2ICszODIsNyBAQCBnZXRfbGluZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBnZXRfZmlsZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBnZXRfYXJhbmdlc19MREFERCA9ICQobGliZHcpICQobGliZWxmKQorIGFsbGZjdHNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKytsaW5lMmFkZHJfbm9fV2Zvcm1hdCA9IHllcworIGxpbmUyYWRkcl9MREFERCA9ICQobGliZHcpICQoYXJncF9MREFERCkKKyBhZGRyc2NvcGVzX0xEQUREID0gJChsaWJkdykgJChhcmdwX0xEQUREKQorIGZ1bmNzY29wZXNfTERBREQgPSAkKGxpYmR3KSAkKGFyZ3BfTERBREQpCitkaWZmIC0tZ2l0IGEvdGVzdHMvYmFja3RyYWNlLmMgYi90ZXN0cy9iYWNrdHJhY2UuYworaW5kZXggYWJkNTZhYi4uNmE3YzY2MSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2JhY2t0cmFjZS5jCisrKysgYi90ZXN0cy9iYWNrdHJhY2UuYworQEAgLTM2LDYgKzM2LDcgQEAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKKyAKKyAjaWZuZGVmIF9fbGludXhfXworZGlmZiAtLWdpdCBhL3Rlc3RzL2xpbmUyYWRkci5jIGIvdGVzdHMvbGluZTJhZGRyLmMKK2luZGV4IGUwZDY1ZDMuLjdjMTcxYjkgMTAwNjQ0CistLS0gYS90ZXN0cy9saW5lMmFkZHIuYworKysrIGIvdGVzdHMvbGluZTJhZGRyLmMKK0BAIC0xMjQsNyArMTI0LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg1MTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tOiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitTdWJqZWN0OiBVc2UgJW1bIGluc3RlYWQgb2YgJWFbIGluIHNjYW5mKCkKKworJWEgd2FzIGEgZ251IGV4dGVudGlvbiwgYnV0IEM5OSBtYWRlIHRoaXMgYSBmbG9hdC4gIFNvIGl0IGdvdAorY2hhbmdlZCB0byAlbSAoc3VwcG9ydGVkIGJ5IGdsaWJjIDIuNyksIGJ1dCAlYVsgYW5kICVhcyBhcmUKK3N0aWxsIHN1cHBvcnRlZCBieSBnbGliYy4gIFRoZSBwb3J0YWJpbGl0eSBicmFuY2ggY2hhbmdlZCB0aGlzCitmcm9tICVtIHRvICVhIGFnYWluIHNpbmNlIHRoYXQncyBzdXBwb3J0ZWQgYnkgbW9yZSB2ZXJzaW9ucyBvZgorZ2xpYmMuICBIb3dldmVyIGdjYyBnaXZlcyBhIHdhcm5pbmcgYWJvdXQgdGhpcyB1c2luZyAtV2Zvcm1hdAorYW5kIHdlIGhhdmUgYSBuZXcgZW5vdWdoIGxpYmMgdG8gdXNlICVtLgorCitJbmRleDogZWxmdXRpbHMtMC4xNTMvc3JjL2FkZHIybGluZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTMub3JpZy9zcmMvYWRkcjJsaW5lLmMJMjAxMi0wMi0yNCAyMjoyOTo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1My9zcmMvYWRkcjJsaW5lLmMJMjAxMi0wMi0yNCAyMjoyOTo1Mi4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NTUsMTAgKzQ1NSwxMCBAQAorICAgICAgIGJvb2wgcGFyc2VkID0gZmFsc2U7CisgICAgICAgaW50IGksIGo7CisgICAgICAgY2hhciAqbmFtZSA9IE5VTEw7CistICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKysgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorIAkgICYmIHN0cmluZ1tpXSA9PSAnXDAnKQorIAlwYXJzZWQgPSBhZGp1c3RfdG9fc2VjdGlvbiAobmFtZSwgJmFkZHIsIGR3ZmwpOworLSAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisgCXsKKyAJZGVmYXVsdDoKKyAJICBicmVhazsKK0luZGV4OiBlbGZ1dGlscy0wLjE1My90ZXN0cy9saW5lMmFkZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTUzLm9yaWcvdGVzdHMvbGluZTJhZGRyLmMJMjAxMi0wMi0yNCAyMjoyOTo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1My90ZXN0cy9saW5lMmFkZHIuYwkyMDEyLTAyLTI0IDIyOjI5OjUyLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMiw3ICsxMzIsNyBAQAorICAgICB7CisgICAgICAgc3RydWN0IGFyZ3MgYSA9IHsgLmFyZyA9IGFyZ3ZbY250XSB9OworIAorLSAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVhW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVtW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorIAl7CisgCWRlZmF1bHQ6CisgCWNhc2UgMDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCkBAIC0wLDAgKzEsMzkgQEAKK09uIG1hbnkgYXJjaGl0ZWN0dXJlcyB0aGlzIHRlc3QgZmFpbHMgYmVjYXVzZSBiaW5hcmllcy9saWJzIHByb2R1Y2VkIGJ5CitiaW51dGlscyBkb24ndCBwYXNzIGVsZmxpbnQuIEhvd2V2ZXIgZWxmdXRpbHMgc2hvdWxkbid0IEZUQkZTIGJlY2F1c2Ugb2YgdGhpcy4KKworU28gd2UgcnVuIHRoZSB0ZXN0cyBvbiBhbGwgYXJjaHMgdG8gc2VlIHdoYXQgYnJlYWtzLCBidXQgaWYgaXQgYnJlYWtzIHdlIGlnbm9yZQordGhlIHJlc3VsdCAoZXhpdGNvZGUgNzcgbWVhbnM6IHRoaXMgdGVzdCB3YXMgc2tpcHBlZCkuCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1Ni90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTYub3JpZy90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTYvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDEzLTA3LTI4IDE0OjM2OjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTE4LDQgKzE4LDQgQEAKKyAKKyAuICRzcmNkaXIvdGVzdC1zdWJyLnNoCisgCistdGVzdHJ1bl9vbl9zZWxmICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL2VsZmxpbnQgLS1xdWlldCAtLWdudS1sZAorK3Rlc3RydW5fb25fc2VsZl9za2lwICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL2VsZmxpbnQgLS1xdWlldCAtLWdudS1sZAorSW5kZXg6IGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3Rlc3Qtc3Vici5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU2Lm9yaWcvdGVzdHMvdGVzdC1zdWJyLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTYvdGVzdHMvdGVzdC1zdWJyLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMTQ5LDMgKzE0OSwxOCBAQAorICAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAorICAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKKyB9CisrCisrIyBTYW1lIGFzIHRlc3RydW5fb25fc2VsZigpLCBidXQgc2tpcCBvbiBmYWlsdXJlLgorK3Rlc3RydW5fb25fc2VsZl9za2lwKCkKKyt7CisrICBleGl0X3N0YXR1cz0wCisrCisrICBmb3IgZmlsZSBpbiAkc2VsZl90ZXN0X2ZpbGVzOyBkbworKyAgICAgIHRlc3RydW4gJCogJGZpbGUgXAorKwkgIHx8IHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJCogJGZpbGUiOyBleGl0X3N0YXR1cz03NzsgfQorKyAgZG9uZQorKworKyAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAorKyAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKKyt9CisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTUzM2JmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaApAQCAtMCwwICsxLDEwNiBAQAorRnJvbSAzZGFlYzJkZDExYTA0OTU1Zjk1ZThmNjVhNDg4MjAxMDNkODRkYmVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBUaHUsIDkgQXByIDIwMTUgMTI6MTI6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gdWNsaWJjIHN1cHBvcnQgZm9yIGVsZnV0aWxzIDAuMTYxCisKK29uIHVjbGliYyBzeXN0ZW1zIGxpYmludGwgYW5kIGxpYnVhcmdwIGFyZSBzZXBhcmF0ZSBmcm9tIGxpYmMuCitzbyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmRsaW5lIHdoZW4gd2UgdXNlIHByb3h5LWxpYmludGwKK3RoZW4gbGliaW50bCBpcyBhIHN0YXRpYyBhcmNoaXZlIHNvIGl0IHNob3VsZCBiZSBsaXN0ZWQgbGFzdCBzaW5jZQorZWxmdXRpbHMgZG9lcyBub3QgcmVzcGVjdCBkaXNhYmxlLW5scyB3ZSBuZWVkIHRvIGxpbmsgaW4gbGliaW50bAorCitXZSBhZGQgYSBuZXcgb3B0aW9uIC0tZW5hYmxlLXVjbGliYyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udHJvbAordGhlIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkdXJpbmcgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW0+CitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1tKdW5saW5nIFpoZW5nOgorIC0gYWRqdXN0IGNvbnRleHQKK10KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICB8IDggKysrKysrKysKKyBsaWJjcHUvTWFrZWZpbGUuYW0gfCA0ICsrKysKKyBsaWJkdy9NYWtlZmlsZS5hbSAgfCA3ICsrKysrKy0KKyBsaWJlbGYvTWFrZWZpbGUuYW0gfCA1ICsrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGExYWQ2ZGIuLjgxZmMzM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDYgKzcwLDE0IEBAIEFTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCisgCisgQUhfVEVNUExBVEUoW1VTRV9MT0NLU10sIFtEZWZpbmVkIGlmIGxpYnJhcmllcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUuXSkKKyAKKytBQ19BUkdfRU5BQkxFKFt1Y2xpYmNdLAorK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11Y2xpYmNdLCBbVXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllc10pLAorK3VzZV91Y2xpYmM9eWVzLCB1c2VfdWNsaWJjPW5vKQorK0FNX0NPTkRJVElPTkFMKFVTRV9VQ0xJQkMsIHRlc3QgIiR1c2VfdWNsaWJjIiA9IHllcykKKytBU19JRihbdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzXSwgW0FDX0RFRklORShVU0VfVUNMSUJDKV0pCisrCisrQUhfVEVNUExBVEUoW1VTRV9VQ0xJQkNdLCBbRGVmaW5lZCBpZiB1Y2xpYmMgbGlicmFyaWVzIGFyZSB1c2VkLl0pCisrCisgQUNfUFJPR19DQworIEFDX1BST0dfUkFOTElCCisgQUNfUFJPR19ZQUNDCitkaWZmIC0tZ2l0IGEvbGliY3B1L01ha2VmaWxlLmFtIGIvbGliY3B1L01ha2VmaWxlLmFtCitpbmRleCAzYmVjY2YzLi45YmE2YzA0IDEwMDY0NAorLS0tIGEvbGliY3B1L01ha2VmaWxlLmFtCisrKysgYi9saWJjcHUvTWFrZWZpbGUuYW0KK0BAIC04MCw2ICs4MCwxMCBAQCBpMzg2X3BhcnNlX0NGTEFHUyA9IC1ETk1ORVM9ImB3YyAtbCA8IGkzODYubW5lbW9uaWNzYCIKKyBpMzg2X2xleC5vOiBpMzg2X3BhcnNlLmgKKyBpMzg2X2dlbmRpc19MREFERCA9ICQobGliZXUpIC1sbQorIAorK2lmIFVTRV9VQ0xJQkMKKytpMzg2X2dlbmRpc19MREFERCArPSAtbHVhcmdwIC1saW50bAorK2VuZGlmCisrCisgaTM4Nl9wYXJzZS5oOiBpMzg2X3BhcnNlLmMgOworIAorIEVYVFJBX0RJU1QgPSBkZWZzL2kzODYKK2RpZmYgLS1naXQgYS9saWJkdy9NYWtlZmlsZS5hbSBiL2xpYmR3L01ha2VmaWxlLmFtCitpbmRleCA4ODdkYTZiLi5kMzFiNDI4IDEwMDY0NAorLS0tIGEvbGliZHcvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmR3L01ha2VmaWxlLmFtCitAQCAtMTAyLDYgKzEwMiwxMSBAQCBlbmRpZgorIGxpYmR3X3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCisgCisrbGliZHdfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZHdfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBsaWJkd19zb19TT1VSQ0VTID0KKyBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSAuLi9saWJkd2VsZi9saWJkd2VsZl9waWMuYSBcCisgCSAgLi4vbGliZHdmbC9saWJkd2ZsX3BpYy5hIC4uL2xpYmVibC9saWJlYmwuYSBcCitAQCAtMTEyLDcgKzExNyw3IEBAIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIC4uL2xpYmR3ZWxmL2xpYmR3ZWxmX3BpYy5hIFwKKyAJCS1XbCwtLWVuYWJsZS1uZXctZHRhZ3MsLXJwYXRoLCQocGtnbGliZGlyKSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkPCwtLW5vLXVuZGVmaW5lZCBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQoZmlsdGVyLW91dCAkPCwkXikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZVwKKy0JCS1sZGwgJCh6aXBfTElCUykKKysJCS1sZGwgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpCisgCUAkKHRleHRyZWxfY2hlY2spCisgCWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCisgCitkaWZmIC0tZ2l0IGEvbGliZWxmL01ha2VmaWxlLmFtIGIvbGliZWxmL01ha2VmaWxlLmFtCitpbmRleCBhZmNiMmFhLi4wMjgzNmExIDEwMDY0NAorLS0tIGEvbGliZWxmL01ha2VmaWxlLmFtCisrKysgYi9saWJlbGYvTWFrZWZpbGUuYW0KK0BAIC05Myw3ICs5MywxMiBAQCBsaWJlbGZfYV9TT1VSQ0VTID0gZWxmX3ZlcnNpb24uYyBlbGZfaGFzaC5jIGVsZl9lcnJvci5jIGVsZl9maWxsLmMgXAorIGxpYmVsZl9waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJlbGZfcGljX2FfT0JKRUNUUyA9ICQobGliZWxmX2FfU09VUkNFUzouYz0ub3MpCisgCisrCisgbGliZWxmX3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmVsZl9zb19MRExJQlMgKz0gLWxpbnRsIC1sdWFyZ3AKKytlbmRpZgorKworIGlmIFVTRV9MT0NLUworIGxpYmVsZl9zb19MRExJQlMgKz0gLWxwdGhyZWFkCisgZW5kaWYKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjFlODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGaXggZWxmX2N2dF9ndW5oYXNoIGlmIGRlc3QgYW5kIHNyYyBhcmUgc2FtZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSAnZGVzdCcgYW5kICdzcmMnIGNhbiBiZSBzYW1lLCB3ZSBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlIG9mIHNyYzMyWzJdCitiZWZvcmUgc3dhcGluZyBpdC4KKworU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxCYW9TaGFuLlBhbmdAd2luZHJpdmVyLmNvbT4KK2RpZmYgLS1naXQgYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAoraW5kZXggNmZhZjExMy4uMDRkOWNhMSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKKysrKyBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK0BAIC00MCw2ICs0MCw3IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgICAgd29yZHMuICBXZSBtdXN0IGRldGFuZ2xlIHRoZW0gaGVyZS4gICAqLworICAgRWxmMzJfV29yZCAqZGVzdDMyID0gZGVzdDsKKyAgIGNvbnN0IEVsZjMyX1dvcmQgKnNyYzMyID0gc3JjOworKyAgRWxmMzJfV29yZCBzYXZlX3NyYzMyXzIgPSBzcmMzMlsyXTsgLy8gZGVzdCBjb3VsZCBiZSBlcXVhbCB0byBzcmMKKyAKKyAgIC8qIEZpcnN0IGZvdXIgY29udHJvbCB3b3JkcywgMzIgYml0cy4gICovCisgICBmb3IgKHVuc2lnbmVkIGludCBjbnQgPSAwOyBjbnQgPCA0OyArK2NudCkKK0BAIC01MCw3ICs1MSw3IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgICAgIGxlbiAtPSA0OworICAgICB9CisgCistICBFbGYzMl9Xb3JkIGJpdG1hc2tfd29yZHMgPSBlbmNvZGUgPyBzcmMzMlsyXSA6IGRlc3QzMlsyXTsKKysgIEVsZjMyX1dvcmQgYml0bWFza193b3JkcyA9IGVuY29kZSA/IHNhdmVfc3JjMzJfMiA6IGRlc3QzMlsyXTsKKyAKKyAgIC8qIE5vdyB0aGUgNjQgYml0IHdvcmRzLiAgKi8KKyAgIEVsZjY0X1h3b3JkICpkZXN0NjQgPSAoRWxmNjRfWHdvcmQgKikgJmRlc3QzMls0XTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2QzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGxpbmsgdG8gdGhlIGRlcGVuZGVuY2llcyBvZiBsaWJkdyBleHBsaWNpdCwgYXMgcmVjZW50CisjIGxkIG5vIGxvbmdlciBpbXBsaWNpdGx5IGxpbmtzIHRoZW0uIFNlZQorIyBodHRwOi8vbGlzdHMuZmVkb3JhcHJvamVjdC5vcmcvcGlwZXJtYWlsL2RldmVsLzIwMTAtTWFyY2gvMTMzNjAxLmh0bWwgYXMKKyMgYSBzaW1pbGFyIGV4YW1wbGUgb2YgdGhlIGVycm9yIG1lc3NhZ2UgeW91IGNhbiBlbmNvdW50ZXIgd2l0aG91dCB0aGlzIHBhdGNoLAorIyBhbmQgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL1VuZGVyc3RhbmRpbmdEU09MaW5rQ2hhbmdlIGFuZAorIyBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVhdHVyZXMvQ2hhbmdlSW5JbXBsaWNpdERTT0xpbmtpbmcgZm9yIG1vcmUKKyMgZGV0YWlscy4KKworLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCitAQCAtODYsNyArODYsNyBAQCBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LmEgJCh6aXBfTElCUykgJChsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5hCisgZWxzZQorIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uc28KKy1saWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvCisrbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbyAkKHppcF9MSUJTKSAkKGxpYmVsZikgJChsaWJlYmwpIC1sZGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCisgZW5kaWYKKyBsaWJlYmwgPSAuLi9saWJlYmwvbGliZWJsLmEKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xNzIsNyArMTcyLDcgQEAgbGliZHcgPSAuLi9saWJkdy9saWJkdy5hICQoemlwX0xJQlMpICQobAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuYQorIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uYQorIGVsc2UKKy1saWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvCisrbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbyAkKHppcF9MSUJTKSAkKGxpYmVsZikgJChsaWJlYmwpIC1sZGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCisgbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5zbworIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9tZW1wY3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaApAQCAtMCwwICsxLDI0IEBACisKK3VjbGliYyBkb2VzIG5vdCBleHBvcnQgX19tZW1wY3B5IGxpa2UgZ2xpYmMgc28gd2UgYWxpYXMgaXQgaGVyZS4KK1RoaXMgcGF0Y2ggbWF5IG1ha2Ugc2Vuc2UgZm9yIHVwc3RyZWFtIGJ1dCBlbGZ1dGlscyB1c2VzIG1vcmUKK2dsaWJjIHNwZWNpZmljIGZlYXR1cmVzIGxpa2Ugb2JzdGFja19wcmludGYgd2hpY2ggYXJlIG1pc3NpbmcgaW4KK3VjbGliYyB0aGV5IG5lZWQgdG8gYmUgZml4ZWQgYWxvbmcgdG8gbWFrZSBpdCB3b3JrIGFsbCB0aGUgd2F5CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtFbGZ1dGlscyB1c2VzIG1vcmUgZ2xpYmMgc3BlY2lmaWMgZmVhdHVyZXNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfYmVnaW4uYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfYmVnaW4uYworQEAgLTY4LDYgKzY4LDkgQEAKKyAjaW5jbHVkZSAibGliZWxmUC5oIgorICNpbmNsdWRlICJjb21tb24uaCIKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNkZWZpbmUgX19tZW1wY3B5IG1lbXBjcHkKKysjZW5kaWYKKyAKKyAvKiBDcmVhdGUgZGVzY3JpcHRvciBmb3IgYXJjaGl2ZSBpbiBtZW1vcnkuICAqLworIHN0YXRpYyBpbmxpbmUgRWxmICoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg0OTBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LmJiCkBAIC0wLDAgKzEsOTEgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIGhhbmRsaW5nIGNvbXBpbGVkIG9iamVjdCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9lbGZ1dGlscyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiKEdQTC0yKyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiM1wKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0VYQ0VQVElPTjttZDU9NTcwYWRjYjBjMTIxOGFiNTdmMjI0OWM2N2QwY2U0MTciCitERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCisKK1BSID0gInIxMSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvZS9sLyR7QlBOfS8ke0JQfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTBiZWQxMTMwMTM1ZjE3YWQyNzUzM2IwMDM0ZGJhOGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGFlYmZhNGE3NDVkYjIxY2Y1NDI5Yzk1NDFmZTQ4MjcyOWI2MmVmYzdlNTNlOTExMDE1MWI0MTY5ZmU4ODdkYSIKKworIyBwaWNrIHRoZSBwYXRjaCBmcm9tIGRlYmlhbgorIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9lL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LTEuZGViaWFuLnRhci5negorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcm9idXN0aWZ5LmRpZmYgXAorICAgICAgICBmaWxlOi8vaHBwYV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vYXJtX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9taXBzX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9tNjhrX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9lbGZfYWRkaXRpb25zLmRpZmYgXAorICAgICAgICBmaWxlOi8vZWxmdXRpbHMtZnNpemUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcmVtb3ZlLXVudXNlZC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9tZW1wY3B5LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9kc28tbGluay1jaGFuZ2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2VsZl9iZWdpbi5jLUNWRS0yMDE0LTk0NDctZml4LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1nY2MtNC44LnBhdGNoIFwKKyIKKyMgT25seSBhcHBseSB3aGVuIGJ1aWxkaW5nIHVjbGliYyBiYXNlZCB0YXJnZXQgcmVjaXBlCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCIKKworIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAorIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKKyMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9pMzg2X2Rpcy5oIFwKKyAgICAgICAgZmlsZTovL3g4Nl82NF9kaXMuaCBcCisiCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS11Y2xpYmMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAnL15pMzg2X2Rpcy5oOi8sKzQgey8uKi9kfScgJHtTfS9saWJjcHUvTWFrZWZpbGUuYW0KKworICAgIGNwICR7V09SS0RJUn0vKmRpcy5oICR7U30vbGliY3B1Cit9CisKKyMgd2UgY2FuIG5vdCBidWlsZCBjb21wbGV0ZSBlbGZ1dGlscyB3aGVuIHVzaW5nIHVjbGliYworIyBidXQgc29tZSByZWNpcGVzIGUuZy4gZ2NjIDQuNSBkZXBlbmRzIG9uIGxpYmVsZiBzbyB3ZQorIyBidWlsZCBvbmx5IGxpYmVsZiBmb3IgdWNsaWJjIGNhc2UKKworRVhUUkFfT0VNQUtFX2xpYmMtdWNsaWJjID0gIi1DIGxpYmVsZiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKK0ZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKKyAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKKyAgICAke2JpbmRpcn0vZXUtbGQgXAorICAgICR7YmluZGlyfS9ldS1ubSBcCisgICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAorICAgICR7YmluZGlyfS9ldS1zaXplIFwKKyAgICAke2JpbmRpcn0vZXUtc3RyaXAiCisKK0ZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKK0ZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKK0ZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCisjRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCisjRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCisKKyMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MTgxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2My5iYgpAQCAtMCwwICsxLDg3IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvZWxmdXRpbHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIihHUEx2MyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAibGlidG9vbCBiemlwMiB6bGliIHZpcnR1YWwvbGliaW50bCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvZS9sL2VsZnV0aWxzLyR7UFZ9LyR7QlB9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3N2NlODdmMjU5OTg3ZDJlNTRlNGQ4N2I4NmNiZWU0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3Yzc3NGYxZWVmMzI5MzA5ZjNiMDVlNzMwYmRhYzUwMDEzMTU1ZDQzNzUxOGEyZWMwZTI0ODcxZDMxMmYyZTIzIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9tZW1wY3B5LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2Rzby1saW5rLWNoYW5nZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaCBcCisiCisKKyMgcGljayB0aGUgcGF0Y2ggZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vZS9lbGZ1dGlscy9lbGZ1dGlsc18wLjE1OS00LmRlYmlhbi50YXIueHoKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmIFwKKyAgICAgICAgZmlsZTovL2hwcGFfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL2FybV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbWlwc19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbTY4a19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgXAorICAgICAgICBmaWxlOi8vc2NhbmYtZm9ybWF0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL21pcHNfcmVhZGVsZl93LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2FybV9mdW5jX3ZhbHVlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbm9uX2xpbnV4LnBhdGNoIFwKKyIKKworIyBPbmx5IGFwcGx5IHdoZW4gYnVpbGRpbmcgdWNsaWJjIGJhc2VkIHRhcmdldCByZWNpcGUKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIgorCisjIFRoZSBidWlsZHN5c3RlbSB3YW50cyB0byBnZW5lcmF0ZSAyIC5oIGZpbGVzIGZyb20gc291cmNlIHVzaW5nIGEgYmluYXJ5IGl0IGp1c3QgYnVpbHQsCisjIHdoaWNoIGNhbiBub3QgcGFzcyB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyBsZXQncyB3b3JrIGFyb3VuZCBpdCBieSBhZGRpbmcgMiAuaCBmaWxlcworIyBhbG9uZyB3aXRoIHRoZSBkb19jb25maWd1cmVfcHJlcGVuZCgpCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9ZXUtIC0td2l0aG91dC1sem1hIgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1iemxpYiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLXVjbGliYyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iICE9ICJ4ODZfNjQiIF0gJiYgWyAteiBgZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgJ2kuODYnYCBdO3RoZW4KKwkJcm0gJHtEfSR7YmluZGlyfS9ldS1vYmpkdW1wCisJZmkKK30KKworIyB3ZSBjYW4gbm90IGJ1aWxkIGNvbXBsZXRlIGVsZnV0aWxzIHdoZW4gdXNpbmcgdWNsaWJjCisjIGJ1dCBzb21lIHJlY2lwZXMgZS5nLiBnY2MgNC41IGRlcGVuZHMgb24gbGliZWxmIHNvIHdlCisjIGJ1aWxkIG9ubHkgbGliZWxmIGZvciB1Y2xpYmMgY2FzZQorCitFWFRSQV9PRU1BS0VfbGliYy11Y2xpYmMgPSAiLUMgbGliZWxmIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFBhY2thZ2UgdXRpbGl0aWVzIHNlcGFyYXRlbHkKK1BBQ0tBR0VTID0rICIke1BOfS1iaW51dGlscyBsaWJlbGYgbGliYXNtIGxpYmR3IgorRklMRVNfJHtQTn0tYmludXRpbHMgPSAiXAorICAgICR7YmluZGlyfS9ldS1hZGRyMmxpbmUgXAorICAgICR7YmluZGlyfS9ldS1sZCBcCisgICAgJHtiaW5kaXJ9L2V1LW5tIFwKKyAgICAke2JpbmRpcn0vZXUtcmVhZGVsZiBcCisgICAgJHtiaW5kaXJ9L2V1LXNpemUgXAorICAgICR7YmluZGlyfS9ldS1zdHJpcCIKKworRklMRVNfbGliZWxmID0gIiR7bGliZGlyfS9saWJlbGYtJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmVsZi5zby4qIgorRklMRVNfbGliYXNtID0gIiR7bGliZGlyfS9saWJhc20tJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmFzbS5zby4qIgorRklMRVNfbGliZHcgID0gIiR7bGliZGlyfS9saWJkdy0ke1BWfS5zbyAke2xpYmRpcn0vbGliZHcuc28uKiAke2xpYmRpcn0vZWxmdXRpbHMvbGliKiIKKyMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CisjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KKyNGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyotJHtQVn0uc28gJHtiYXNlX2xpYmRpcn0vKi0ke1BWfS5zbyIKKyNGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmFzbS5zbyAke2xpYmRpcn0vbGliZHcuc28gJHtsaWJkaXJ9L2xpYmVsZi5zbyIKKworIyBUaGUgcGFja2FnZSBjb250YWlucyBzeW1saW5rcyB0aGF0IHRyaXAgdXAgaW5zYW5lCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmR3ID0gImRldi1zbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1jb25maWd1cmUuaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5NWEyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoCkBAIC0wLDAgKzEsMTA4IEBACitBbGxvdyBjcm9zcyBjb21waWxpbmcuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCistLS0gYS9jb25maWd1cmUuaW4JMjAxMi0xMi0xNCAxNTozMTozMi42MjMxODA0NTAgKzAxMDAKKysrKyBiL2NvbmZpZ3VyZS5pbgkyMDEyLTEyLTE0IDE1OjUzOjM0LjUxODIzMzUxOSArMDEwMAorQEAgLTQ4MSw3ICs0ODEsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBhbnkgdmFsdWUgZXhpc3RzIGZvciBXTk9IQU5HXSkKK0BAIC01MDYsNyArNTA2LDkgQEAKKyAJQUNfTVNHX1JFU1VMVChubykKKyAJQUNfREVGSU5FKFdOT0hBTkdfQkFDS1VQX1ZBTFVFLCAxKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKHllcykKKysJQUNfREVGSU5FX1VOUVVPVEVEKFdOT0hBTkdfQkFDS1VQX1ZBTFVFLCBgY2F0IHdub2hhbmdgKQorKwlybSAtZiB3bm9oYW5nCisgKQorIAorICMKK0BAIC01NzQsNyArNTc2LDggQEAKKyAJQUNfREVGSU5FKFJFQVJNX1NJRykKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCistLCBBQ19NU0dfV0FSTihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKyssCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorICMgSFBVWDcgaGFzIHRyb3VibGUgd2l0aCB0aGUgYmlnIGNhdCBzbyBzcGxpdCBpdAorQEAgLTcyNSw3ICs3MjgsOSBAQAorICwKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgIEFDX0RFRklORShIQVZFX1NHVFRZQikKKysgICAgICAgIFBUWV9UWVBFPXNndHR5YgorICkKKyAKKyAjIG1hY2ggc3lzdGVtcyBoYXZlIGluY2x1ZGUgZmlsZXMgZm9yIHVuaW1wbGVtZW50ZWQgZmVhdHVyZXMKK0BAIC03NDksNyArNzU0LDkgQEAKKyAsCisgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfVEVSTUlPKQorKyAgICAgICAgUFRZX1RZUEU9dGVybWlvcworKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgKQorIAorICAgIyBub3cgY2hlY2sgZm9yIHRoZSBuZXcgc3R5bGUgdHR5cyAobm90IHlldCBwb3NpeCkKK0BAIC03NzEsNyArNzc4LDkgQEAKKyAgICwKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysgICAgICAgIEFDX0RFRklORShIQVZFX1RFUk1JT1MpCisrICAgICAgICBQVFlfVFlQRT10ZXJtaW9zCisrICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICkKKyBmaQorIAorQEAgLTc5NCw3ICs4MDMsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBUSU9DR1dJTlNaIGluIHRlcm1pb3MuaF0pCitAQCAtODE2LDcgKzgyNSw3IEBACisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyAjIGZpbmFsbHkgY2hlY2sgZm9yIENyYXkgc3R5bGUgdHR5cworQEAgLTgzNyw3ICs4NDYsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgIworQEAgLTg4OSw3ICs4OTgsOCBAQAorIAlBQ19NU0dfUkVTVUxUKHllcyksCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX0RFRklORShIQVZFX1NWX1RJTUVaT05FKQorKwlBQ19NU0dfUkVTVUxUKHllcyksCisgKQorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGFkODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWV4cGVjdC1pbnN0YWxsLXNjcmlwdHMtd2l0aG91dC11c2luZy10aGUtZml4bGluZTEtdGMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt3cmxpbnV4IHNwZWNpZmljXQorCitTdWJqZWN0OiBleHBlY3Q6IGluc3RhbGwgc2NyaXB0cyB3aXRob3V0IHVzaW5nIHRoZSBmaXhsaW5lMSB0Y2wgc2NyaXB0CisKK09uIG9sZGVyIG1hY2hpbmVzIGxpa2UgU0xFRDExLjIsIHdlIGFyZSBlbmNvdW50ZXJpbmcgZG9faW5zdGFsbCBmYWlsdXJlcworY29tcGxhaW5pbmcgdGhhdCAnR0xJQkNfMi4xNCcgaXMgbm90IGZvdW5kIGluIC9saWI2NC9saWJjLnNvLjYgYnV0IGlzIHJlcXVpcmVkCitieSBsaWJ0Y2w4LjYuc28uMC4KKworVGhpcyBpcyBiZWNhdXNlIHRoYXQgd2UncmUgZXhlY3V0aW5nIHRoZSBmaXhsaW5lMSB0Y2wgc2NyaXB0IHdoaWNoIHJlcXVpcmVzCitsaWJ0Y2w4LjYuc28uMCBpbiBzeXNyb290LiBIb3dldmVyLCBhbGwgY29tbWFuZHMgaW4gU0NSSVBUUyBhbHJlYWR5IGhhdmUgZ290Cit0aGUgY29ycmVjdCBmaXJzdCBsaW5lLCB0aGF0IGlzICcjIS9iaW4vc2gnLiBXZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBhbnl0aGluZy4KK1RoYXQncyB3aHkgd2UgY291bGQganVzdCBjb3B5IHRoZW0uCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggYzA1Yzg4MC4uZjEzOTRmZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTM4MCw3ICszODAsNyBAQCBkaXN0OiBkaXN0LWNsZWFuIGRvYworIAljcCAkKERJU1RfUk9PVCkvJChQS0dfRElSKS50YXIuZ3ogJCh0b3BfYnVpbGRkaXIpCisgCisgJChTQ1JJUFRTKToKKy0JJChUQ0xTSCkgJChzcmNkaXIpL2ZpeGxpbmUxICQoU0hPUlRfQklORElSKSA8ICQoc3JjZGlyKS9leGFtcGxlLyRAID4gJEAKKysJY3AgJChzcmNkaXIpL2V4YW1wbGUvJEAgJEAKKyAKKyAjIyBXZSBjYW5ub3QgdXNlIFRDTF9MSUJTIGJlbG93IChhZnRlciBUQ0xfTElCX1NQRUMpIGJlY2F1c2UgaXRzCisgIyMgZXhwYW5zaW9uIHJlZmVyZW5jZXMgdGhlIGNvbnRlbnRzIG9mIExJQlMsIHdoaWNoIGNvbnRhaW5zIGxpbmtlcgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDItdGNsLm00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGM2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVc2UgcHJvcGVyIC1MIHBhdGggd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvdGNsY29uZmlnL3RjbC5tNCBiL3RjbGNvbmZpZy90Y2wubTQKKy0tLSBhL3RjbGNvbmZpZy90Y2wubTQJMjAxMi0xMi0xNCAwOToxNjo1OC43ODk4NjEyODEgKzAxMDAKKysrKyBiL3RjbGNvbmZpZy90Y2wubTQJMjAxMi0xMi0xNCAxMDo1NTo0My41NDIyOTcwMTAgKzAxMDAKK0BAIC0zNzEsNyArMzcxLDcgQEAKKyAgICAgIyBvZiBUQ0xfQlVJTERfTElCX1NQRUMuIEFuIGV4dGVuc2lvbiBzaG91bGQgbWFrZSB1c2Ugb2YgVENMX0xJQl9TUEVDCisgICAgICMgaW5zdGVhZCBvZiBUQ0xfQlVJTERfTElCX1NQRUMgc2luY2UgaXQgd2lsbCB3b3JrIHdpdGggYm90aCBhbgorICAgICAjIGluc3RhbGxlZCBhbmQgdW5pbnN0YWxsZWQgdmVyc2lvbiBvZiBUY2wuCistICAgIGlmIHRlc3QgLWYgIiR7VENMX0JJTl9ESVJ9L01ha2VmaWxlIiA7IHRoZW4KKysgICAgaWYgdGVzdCAtZiAiJHtUQ0xfQklOX0RJUn0vTWFrZWZpbGUiIHx8IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgICAgICBUQ0xfTElCX1NQRUM9IiR7VENMX0JVSUxEX0xJQl9TUEVDfSIKKyAgICAgICAgIFRDTF9TVFVCX0xJQl9TUEVDPSIke1RDTF9CVUlMRF9TVFVCX0xJQl9TUEVDfSIKKyAgICAgICAgIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9CVUlMRF9TVFVCX0xJQl9QQVRIfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk3ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDEtZXhhbXBsZS1zaGViYW5nLnBhdGNoCkBAIC0wLDAgKzEsMTQ0IEBACitBdXRob3I6IE1pa2UgTWFya2xleSA8bWlrZUBtYXJrbGV5Lm9yZz4KK0F1dGhvcjogU2VyZ2VpIEdvbG92YW4gPHNnb2xvdmFuQGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogRml4ZXMgc2hlYmFuZ3MgaW4gZXhhbXBsZXMgKENsb3NlczogIzE1MjM2NykuCisKK0JhY2twb3J0ZWQgZnJvbSBEZWJpYW4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL2JlZXIuZXhwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvYmVlci5leHAJMjAwNi0wMS0yNSAxMzo1MTozOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvYmVlci5leHAJMjAxMy0xMS0wMSAxNzozNToxOS44MTczMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC1mCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIDk5IGJvdHRsZXMgb2YgYmVlciBvbiB0aGUgd2FsbCwgRXhwZWN0LXN0eWxlCisgIyBBdXRob3I6IERvbiBMaWJlcyA8bGliZXNAbmlzdC5nb3Y+CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL2V4cGVjdGQucHJvdG8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9leHBlY3RkLnByb3RvCTIwMTAtMDctMDIgMDk6MDM6MzEuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL2V4cGVjdGQucHJvdG8JMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsMTAgQEAKKy0jIS9kZXBvdC90Y2wvc3JjL2V4cGVjdC9lIC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKysKKyAjIERlc2NyaXB0aW9uOiBTaW1wbGUgZnJhZ21lbnQgdG8gYmVnaW4gYSB0ZWxuZXQgZGFlbW9uCisgIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIENoYXB0ZXIgMTcgb2YgIkV4cGxvcmluZyBFeHBlY3QiCisgIyBBdXRob3I6IERvbiBMaWJlcywgTklTVAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9pcnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvaXJzaAkyMDEwLTA3LTAyIDA5OjAzOjMxLjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9pcnNoCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBEbyByc2ggaW50ZXJhY3RpdmVseS4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgIyAgICByc2ggPHJlbW90ZT4gbHMgLWwgInwiIG1vcmUKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkLmNnaQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3Bhc3N3ZC5jZ2kJMjAwMC0wMS0wNiAxNToyMjowNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkLmNnaQkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgVGhpcyBpcyBhIENHSSBzY3JpcHQgdG8gcHJvY2VzcyByZXF1ZXN0cyBjcmVhdGVkIGJ5IHRoZSBhY2NvbXBhbnlpbmcKKyAjIHBhc3N3ZC5odG1sIGZvcm0uICBUaGlzIHNjcmlwdCBpcyBwcmV0dHkgYmFzaWMsIGFsdGhvdWdoIGl0IGlzCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZHByb21wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3Bhc3N3ZHByb21wdAkyMDAzLTA5LTA1IDEyOjAxOjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9wYXNzd2Rwcm9tcHQJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0CisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIFRoaXMgc2NyaXB0IHByb21wdHMgZm9yIGEgcGFzc3dkIGZyb20gc3RkaW4gd2hpbGUgZWNob2luZyAqJ3MKKyAKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvcmVwcm9tcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9yZXByb21wdAkyMDAwLTAxLTA2IDE1OjIyOjA3LjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9yZXByb21wdAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgTmFtZTogcmVwcm9tcHQKKyAjIERlc2NyaXB0aW9uOiByZXByb21wdCBldmVyeSBzbyBvZnRlbiB1bnRpbCB1c2VyIGVudGVycyBzb21ldGhpbmcKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvdGVybV9leHBlY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS90ZXJtX2V4cGVjdAkyMDA1LTAyLTE1IDEwOjExOjMxLjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS90ZXJtX2V4cGVjdAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3RrCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB3aXNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgTmFtZTogdGt0ZXJtIC0gdGVybWluYWwgZW11bGF0b3IgdXNpbmcgRXhwZWN0IGFuZCBUayB0ZXh0IHdpZGdldCwgdjMuMAorICMgQXV0aG9yOiBEb24gTGliZXMsIEp1bHkgJzk0CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3ZyZnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS92cmZ5CTIwMTAtMDctMDIgMDk6MDM6MzEuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3ZyZnkJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC1mCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAKKyAjIHNlcGFyYXRlIGFkZHJlc3MgaW50byB1c2VyIGFuZCBob3N0CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3hybG9naW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS94cmxvZ2luCTIwMDAtMDEtMDYgMTU6MjI6MDguMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3hybG9naW4JMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsMTAgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisrCisgIyB4cmxvZ2luIC0gcmxvZ2luIGJ1dCB3aXRoIGN1cnJlbnQgRElTUExBWQorICMKKyAjIFlvdSBjYW4gZXh0ZW5kIHRoaXMgaWRlYSB0byBzYXZlIGFueSBhcmJpdHJhcnkgaW5mb3JtYXRpb24gYWNyb3NzIHJsb2dpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyYWFiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIKQEAgLTAsMCArMSw2NCBAQAorU1VNTUFSWSA9ICJ0b29sIGZvciBhdXRvbWF0aW5nIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBhY2NvcmRpbmcgdG8gYSBzY3JpcHQiCitERVNDUklQVElPTiA9ICJFeHBlY3QgaXMgYSB0b29sIGZvciBhdXRvbWF0aW5nIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBhY2NvcmRpbmcgdG8gYSBzY3JpcHQuIFwKK0ZvbGxvd2luZyB0aGUgc2NyaXB0LCBFeHBlY3Qga25vd3Mgd2hhdCBjYW4gYmUgZXhwZWN0ZWQgZnJvbSBhIHByb2dyYW0gYW5kIHdoYXQgXAordGhlIGNvcnJlY3QgcmVzcG9uc2Ugc2hvdWxkIGJlLiBFeHBlY3QgaXMgYWxzbyB1c2VmdWwgZm9yIHRlc3RpbmcgdGhlc2Ugc2FtZSBcCithcHBsaWNhdGlvbnMuIEFuZCBieSBhZGRpbmcgVGssIHlvdSBjYW4gYWxzbyB3cmFwIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBpbiBcCitYMTEgR1VJcy4gQW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgcHJvdmlkZXMgYnJhbmNoaW5nIGFuZCBoaWdoLWxldmVsIGNvbnRyb2wgXAorc3RydWN0dXJlcyB0byBkaXJlY3QgdGhlIGRpYWxvZ3VlLiBJbiBhZGRpdGlvbiwgdGhlIHVzZXIgY2FuIHRha2UgY29udHJvbCBhbmQgXAoraW50ZXJhY3QgZGlyZWN0bHkgd2hlbiBkZXNpcmVkLCBhZnRlcndhcmQgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHNjcmlwdC4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBlY3QvIgorTElDRU5TRSA9ICJQRCIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpY2Vuc2UudGVybXM7bWQ1PWZiZjJkZTdlOTEwMjUwNWIxNDM5ZGIwNmZjMzZjZTVjIgorCitERVBFTkRTICs9ICJ0Y2wiCitSREVQRU5EU18ke1BOfSA9ICJ0Y2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9leHBlY3QvRXhwZWN0LyR7UFZ9LyR7QlBOfSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXRjbC5tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMS1leGFtcGxlLXNoZWJhbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDRlMWE0ZjRjODc3ZTlkZGM1YTU0MmRmYTdlY2M5MmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjI4ZGNhOTA0MjhhM2IzMGU2NTA1MjVjZGMxNjI1NWQ3NmJiNmNjZDY1ZDQ0OGJlNTNlNjIwZDk1ZDVjYzA0MCIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbyAgICR7RH0ke2xpYmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L2ZpeGxpbmUxICAgICAgICAgICAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9LworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9leGFtcGxlLyogICAgICAgICAgJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS8KKyAgICAgICAgcm0gJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS9saWJleHBlY3QqLnNvCisgICAgICAgIHNlZCAtZSAnc3wkZGlyfCR7bGliZGlyfXwnIC1pICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vcGtnSW5kZXgudGNsCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXRjbD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC10Y2xpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9L3RjbDguNiBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAgICIKK0VYVFJBX09FTUFLRV9pbnN0YWxsID0gIiAnU0NSSVBUUz0nICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59JHtQVn0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyX25hdGl2ZX0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9leHBlY3QuaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9leHBlY3RfdGNsLmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0X2NvbW0uaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS90Y2xkYmcuaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8qLmggXAorICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2xpYmV4cGVjdCR7UFZ9LnNvIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vZXhwZWN0JHtQVn0vKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiMGUzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mZGlzay9ncHRmZGlza18xLjAuMC5iYgpAQCAtMCwwICsxLDIwIEBACitERVNDUklQVElPTiA9ICJHUFQgZmRpc2sgaXMgYSBkaXNrIHBhcnRpdGlvbmluZyB0b29sIGxvb3NlbHkgbW9kZWxlZCBvbiBMaW51eCBmZGlzaywgYnV0IHVzZWQgZm9yIG1vZGlmeWluZyBHVUlEIFBhcnRpdGlvbiBUYWJsZSAoR1BUKSBkaXNrcy4gVGhlIHJlbGF0ZWQgRml4UGFydHMgdXRpbGl0eSBmaXhlcyBzb21lIGNvbW1vbiBwcm9ibGVtcyBvbiBNYXN0ZXIgQm9vdCBSZWNvcmQgKE1CUikgZGlza3MuIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK0RFUEVORFMgPSAidXRpbC1saW51eCBwb3B0IG5jdXJzZXMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke1BWfS8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMjA2MWY5MTdhZjA4NDIxNTg5OGQ0ZmVhMDRkODM4OGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI2Njk1Njc0M2E3OTlmYzA0NzFjZGIwMzI2NjVjMTM5MWU4MmY5YzViM2YxZDdkNzI2ZDI5ZmUyYmEwMWQ2YyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGNnZGlzayAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBnZGlzayAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBzZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgZml4cGFydHMgJHtEfSR7c2JpbmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE2YjJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSAwOGFiZjk0NGIyYmZmMjdiNmRkMzI1ZGQxNWI0ODYxY2ViZWYxMTNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBXZWQsIDggQXByIDIwMTUgMDM6MjY6NTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIC1QIHByb21wdCBpbnRvIFVzYWdlIGluZm8KKworQ3VycmVudGx5LCBVc2FnZSBpbmZvIGRvZXNuJ3QgaW5jbHVkZSAtUCBwcm9tcHQsIGFkZCBpdDoKKworcm9vdEBhcm1hOWVsOn4jIGZpbGUKK1VzYWdlOiBmaWxlIFstYmNFaGlrTGxObnByc3Z6MF0gWy0tYXBwbGVdIFstLW1pbWUtZW5jb2RpbmddIFstLW1pbWUtdHlwZV0KKyAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc10KKyAgICAgICAgICAgIFstUCBwYXJhbWV0ZXI9bGltaXRzXSBmaWxlIC4uLgorICAgICAgIGZpbGUgLUMgWy1tIG1hZ2ljZmlsZXNdCisgICAgICAgZmlsZSBbLS1oZWxwXQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KKy0tLQorIHNyYy9maWxlLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZpbGUuYyBiL3NyYy9maWxlLmMKK2luZGV4IDJiMTVlMjEuLmU1YTk1N2IgMTAwNjQ0CistLS0gYS9zcmMvZmlsZS5jCisrKysgYi9zcmMvZmlsZS5jCitAQCAtNzYsOCArNzYsOCBAQCBpbnQgZ2V0b3B0X2xvbmcoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBzdHJ1YworICMgZGVmaW5lIFVTQUdFICBcCisgICAgICJVc2FnZTogJXMgWyIgRklMRV9GTEFHUyBcCisgCSJdIFstLWFwcGxlXSBbLS1leHRlbnNpb25dIFstLW1pbWUtZW5jb2RpbmddIFstLW1pbWUtdHlwZV1cbiIgXAorLSAgICAiICAgICAgICAgICAgWy1lIHRlc3RuYW1lXSBbLUYgc2VwYXJhdG9yXSBbLWYgbmFtZWZpbGVdIFstbSBtYWdpY2ZpbGVzXSAiIFwKKy0gICAgImZpbGUgLi4uXG4iIFwKKysgICAgIiAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc11cbiAiIFwKKysgICAgIiAgICAgICAgICAgIFstUCBwYXJhbWV0ZXI9bGltaXRzXSBmaWxlIC4uLlxuIiBcCisgICAgICIgICAgICAgJXMgLUMgWy1tIG1hZ2ljZmlsZXNdXG4iIFwKKyAgICAgIiAgICAgICAlcyBbLS1oZWxwXVxuIgorIAorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY0ODVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9kZWJpYW4tNzQyMjYyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1RoZSBhd2sgcGF0dGVybiB3YXMgY2hlY2tlZCAqYmVmb3JlKiB0aGUgUGVybCBwYXR0ZXJuLCBzbyB0aGUgcGVybAorc2NyaXB0IHdpdGggQkVHSU57Li4ufSB3b3VsZCBiZSByZXBvcnRlZCBhcyBhd2ssIHRoaXMgcGF0Y2ggZml4ZXMgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEJpZWRsIDxkZWJpYW4uYXhobkBtYW5jaG1hbC5pbi11bG0uZGU+CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL21hZ2ljL01hZ2Rpci9jb21tYW5kcyBiL21hZ2ljL01hZ2Rpci9jb21tYW5kcworLS0tIGEvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCisrKysgYi9tYWdpYy9NYWdkaXIvY29tbWFuZHMKK0BAIC01Nyw2ICs1Nyw3IEBACisgMAlzdHJpbmcvd3QJIyFcIC91c3IvYmluL2F3awlhd2sgc2NyaXB0IHRleHQgZXhlY3V0YWJsZQorICE6bWltZQl0ZXh0L3gtYXdrCisgMAlyZWdleC80MDk2CT1eXFxzezAsMTAwfUJFR0lOXFxzezAsMTAwfVt7XQlhd2sgb3IgcGVybCBzY3JpcHQgdGV4dAorKyE6c3RyZW5ndGggLSAxMgorIAorICMgQVQmVCBCZWxsIExhYnMnIFBsYW4gOSBzaGVsbAorIDAJc3RyaW5nL3d0CSMhXCAvYmluL3JjCVBsYW4gOSByYyBzaGVsbCBzY3JpcHQgdGV4dCBleGVjdXRhYmxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiOTVkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yNC5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIkZpbGUgY2xhc3NpZmljYXRpb24gdG9vbCIKK0RFU0NSSVBUSU9OID0gIkZpbGUgYXR0ZW1wdHMgdG8gY2xhc3NpZnkgZmlsZXMgZGVwZW5kaW5nIFwKK29uIHRoZWlyIGNvbnRlbnRzIGFuZCBwcmludHMgYSBkZXNjcmlwdGlvbiBpZiBhIG1hdGNoIGlzIGZvdW5kLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZGFyd2luc3lzLmNvbS9maWxlLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyB0d28gY2xhdXNlIEJTRAorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT0yO21kNT02YTczODI4NzJlZGI2OGQzM2UxYTkzOThiNmUwMzE4OCIKKworREVQRU5EUyA9ICJ6bGliIGZpbGUtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9maWxlL2ZpbGUuZ2l0IFwKKyAgICAgICAgZmlsZTovL2RlYmlhbi03NDIyNjIucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNSRVYgPSAiM2MwODc0YmU0ZDMyMzJkNjcyYjIwZjUxMzQ1MWEzOWNmZDdjNTg1YSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pc2MvKi5tZ2MiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAorCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKKwkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjgzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9maWxlcy9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChlbWJlZGRlZCBzcGVjaWZpYykKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogZmxleC0yLjUuMzcvZG9jL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZmxleC0yLjUuMzcub3JpZy9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wNy0yMSAwNDoxODoyNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBmbGV4LTIuNS4zNy9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wNy0zMCAxNzo1NzowOS44MzQ4MzQ1MzEgKzAzMDAKK0BAIC0yLDcgKzIsNyBAQAorIAorIGluZm9fVEVYSU5GT1MgPQlmbGV4LnRleGkKKyBkaXN0X21hbl9NQU5TID0gZmxleC4xCistZGlzdF9kb2NfREFUQT0gZmxleC5wZGYKKytFWFRSQV9ESVNUPSBmbGV4LnBkZgorIAorIENMRUFORklMRVMgPSBcCisgCWZsZXguaGtzIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmZiYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0MT0idGVzdC1hbGxvYy1leHRyYSB0ZXN0LWFycmF5LW5yIHRlc3QtYXJyYXktciB0ZXN0LWJhc2ljLW5yIHRlc3QtYmFzaWMtciB0ZXN0LWV4dGVuZGVkIHRlc3QtcXVvdGVzIFwKK3Rlc3QtYmlzb24tbnIgdGVzdC1iaXNvbi15eWxsb2MgdGVzdC1iaXNvbi15eWx2YWwgdGVzdC1jKystYmFzaWMgdGVzdC1jLWNwcC1uciB0ZXN0LXByZWZpeC1uciB0ZXN0LWNjbCBcCit0ZXN0LWMtY3BwLXIgdGVzdC1jKystbXVsdGlwbGUtc2Nhbm5lcnMgdGVzdC1tZW0tciB0ZXN0LW1lbS1uciB0ZXN0LWRlYnVnLW5yIHRlc3QtbGluZWRpci1yIHRlc3Qtbm9hbnNpLXIgXAordGVzdC15eWV4dHJhIHRlc3QtaGVhZGVyLXIgdGVzdC1ub2Fuc2ktbnIgdGVzdC1kZWJ1Zy1yIFRFTVBMQVRFIHRlc3QtdG9wIHRlc3QtaGVhZGVyLW5yIHRlc3QtcHJlZml4LXIiCit0ZXN0Mj0idGVzdC1tdWx0aXBsZS1zY2FubmVycy1uciB0ZXN0LXBvc2l4bHktY29ycmVjdCB0ZXN0LXBvc2l4IHRlc3Qtc3RyaW5nLXIgdGVzdC1zdHJpbmctbnIiCit0ZXN0Mz0idGVzdC1wdGhyZWFkIHRlc3QtaW5jbHVkZS1ieS1wdXNoIHRlc3QtaW5jbHVkZS1ieS1idWZmZXIgdGVzdC1pbmNsdWRlLWJ5LXJlZW50cmFudCIKK3Rlc3Q0PSJ0ZXN0LWxpbmVuby1uciB0ZXN0LWxpbmVuby1yIHRlc3QtbGluZW5vLXRyYWlsaW5nIgordGVzdDU9InRlc3QtYysrLXl5d3JhcCB0ZXN0LXJlc2Nhbi1yIHRlc3QtcmVzY2FuLW5yIgordGVzdDY9InRlc3QtcmVqZWN0LW5yIHRlc3QtcmVqZWN0LXIiCit0ZXN0Nz0idGVzdC1yZWplY3Qtc2VyIHRlc3QtcmVqZWN0LXZlciIKK3Rlc3Q4PSJ0ZXN0LW11bHRpcGxlLXNjYW5uZXJzLXIiCisKK291dHB1dCgpIHsKKyAgaWYgWyAkPyAtZXEgMCBdOyBcCisgICAgdGhlbiBlY2hvICJQQVNTOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIkZBSUw6ICRpIjsgXAorICBmaTsKK30KKworZm9yIGkgaW4gJHRlc3QxOyBkbyAkaS8kaSA8ICRpL3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDI7IGRvICRpLyRpID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3QzOyBkbyBjZCAkaTsgLi8kaSB0ZXN0LTEuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBjZCAuLjsgZG9uZQorZm9yIGkgaW4gJHRlc3Q0OyBkbyB0ZXN0IGAkaS8kaSA8ICRpL3Rlc3QuaW5wdXRgIC1lcSBgJGkvJGkgMSA8ICRpL3Rlc3QuaW5wdXRgID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q1OyBkbyAkaS8kaSAkaS90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q2OyBkbyB0ZXN0LXJlamVjdC8kaSA8IHRlc3QtcmVqZWN0L3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDc7IGRvIHRlc3QtcmVqZWN0LyRpIHRlc3QtcmVqZWN0LyRpLnRhYmxlcyA8IHRlc3QtcmVqZWN0L3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitjZCAkdGVzdDg7IC4vJHRlc3Q4ID4vZGV2L251bGw7IGk9JHRlc3Q4IG91dHB1dApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGEyNmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJGbGV4IChUaGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyKSIKK0RFU0NSSVBUSU9OID0gIkZsZXggaXMgYSBmYXN0IGxleGljYWwgYW5hbHlzZXIgZ2VuZXJhdG9yLiAgRmxleCBpcyBhIHRvb2wgZm9yIGdlbmVyYXRpbmcgcHJvZ3JhbXMgdGhhdCByZWNvZ25pemUgXAorbGV4aWNhbCBwYXR0ZXJucyBpbiB0ZXh0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZmxleC8iCisKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0RFUEVORFMgKz0gIiR7QCdiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUnIGlmICcke1BURVNUX0VOQUJMRUR9JyA9PSAnMScgZWxzZSAnJ30iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2ZsZXgvZmxleC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwdGVzdAorCisKK000ID0gIiR7YmluZGlyfS9tNCIKK000X2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbTQiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9NND0ke000fSIKK0VYVFJBX09FTUFLRSArPSAibTQ9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L200IgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmxleCBNND0ke000fQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmxleCBNND0ke000fQorfQorCitSREVQRU5EU18ke1BOfSArPSAibTQiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJZm9yIGkgaW4gYGZpbmQgJHtTfS90ZXN0cy8gLXR5cGUgZCB8Z3JlcCAtRXYgImNvbmNhdGVuYXRlZC1vcHRpb25zfHJlamVjdHx0YWJsZS1vcHRzIiB8IGF3ayAtRi8gJ3twcmludCAkTkZ9J2A7IFwKKwkgIGRvIG9lX3J1bm1ha2UgLUMgJHtTfS90ZXN0cy8kaSAtZiAke0J9L3Rlc3RzLyRpL01ha2VmaWxlIHRvcF9idWlsZGRpcj0ke0J9IEZMRVg9ZmxleCAkaTsgXAorCWRvbmUKKwlvZV9ydW5tYWtlIC1DICR7U30vdGVzdHMvdGVzdC1yZWplY3QgLWYgJHtCfS90ZXN0cy90ZXN0LXJlamVjdC9NYWtlZmlsZSB0b3BfYnVpbGRkaXI9JHtCfSBGTEVYPWZsZXggdGVzdC1yZWplY3QtbnIgdGVzdC1yZWplY3QtciB0ZXN0LXJlamVjdC1zZXIgdGVzdC1yZWplY3QtdmVyCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJZm9yIGkgaW4gYGZpbmQgJHtTfS90ZXN0cy8gLXR5cGUgZCB8IGF3ayAtRi8gJ3twcmludCAkTkZ9J2A7IFwKKwkgIGRvIGNwIC1yICR7U30vdGVzdHMvJGkgJHtEfSR7UFRFU1RfUEFUSH07IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXhfMi41LjM5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODU3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgZmxleC5pbmMKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTQ3NDJjZjkyZTg5MDQwYjM5NDg2YTYyMTliNjgwNjciCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3N2Q0NGM2YmI4YzA3MDVlMDAxN2FiOWE4NGExNTAyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZGQyYjU1ZjNiYzM4Y2I1MTJiNDhmYWQ3ZDcyZjQzYjExZWYyNDQ0ODdmZjI1ZmMwMGFhYmVjMWUzMmI2MTdmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyNDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMKQEAgLTAsMCArMSwxMTggQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjQuOC40IgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjQuOC40IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNC44OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKK1NSQ19VUkkgPSAiXAorICAgICR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMS1pbmRleF9tYWNyby5wYXRjaCBcCisgICAgZmlsZTovLzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNC1zaC1wcjI0ODM2LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzItbGlidG9vbC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgZmlsZTovLzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBcCisgICAgZmlsZTovLzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Mi1wcjU3NzQ4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0My1jcHAucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YTg0YTMwODM5YjJhY2EyMmEyZDcyM2RlMmE2MjZlYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YTgwYWEyMzc5OGI4ZTliNTc5MzQ5NGI4Yzk3NmIzOWI4ZDlhYTJlNTNjZDVlZDU1MzRhZmY2NjJhN2Y4Njk1IgorCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCisjIExhbmd1YWdlIE92ZXJyaWRlcworRk9SVFJBTiA9ICIiCitKQVZBID0gIiIKKworTFRPID0gIi0tZW5hYmxlLWx0byIKKworRVhUUkFfT0VDT05GX0JBU0UgPSAiXAorICAgICR7TFRPfSBcCisgICAgLS1lbmFibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXCAKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwgCisgICAgLS13aXRoLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwgCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg4MDExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGJmM2Q5NmFlNThmYTE4MGI4YjQ2OGQyNWRjMmUwMjA5ZGFjYTI3NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgICAgMiArLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZDgwOTUzNS4uMWI3NmM5MCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzQzOSw3ICs3NDM5LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDhlYzFhYS4uODlkMWQzZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjg3Myw3ICsyODczLDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTNiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGQwMzA5NzNjODcyYzAwZDkxNjkyMWQ4NGRlZWUwYWYyYzBkMzgwODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzM1XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8ICAgIDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCA3NDNkOTUxLi5hZTRlYTYwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gZDJkOWRkNzU2YzQzNTZkMTRkZDdhZTAwMzg1NjM0NGNiNGYzNzk4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCAgICA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8ICAgIDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8ICAgIDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggMGQzMDlhNS4uZjJmMWUxZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggYjVmZDk4OS4uM2RhOWE1ZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCAyZDhlOTc4Li4xNGViMDhmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gYTU1Yzc1MWE0NDljMmNiZjBiM2ZjYzA3YWFiMWI4NmJmOTY2MTUxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNjMgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxMTcgKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgIDMwOCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgMzAwICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDEwMCArKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDY5MiArKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDQwNiArKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzUgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgICAyICsKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCAwODcxYTZhLi4zMjZkN2VmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTE5MDUsNiArMTkwNSw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjA2OSw2ICsyMDcyLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGY0MGRkY2YuLmM1N2E3NTEgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU4MjIsNiArMTU4MjIsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYwNzksNiArMTYwODIsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDU4MGQ3MjUuLjNmZTYxYjggMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCAwZTZiMWZjLi40MDVhZWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK0BAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjU3IEBACitGcm9tIDZhM2U4NTA2YTEyYzEyNzI4ZDhiMjk5MDFkZWZkNzM4YmU0Mzc1N2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDA1LzM1XSB1Y2xpYmMtbG9jYWxlLW5vX194CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDQ1ICsrKysrKysrKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDE0IC0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgICAgMSArCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgICA3IC0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgICAgNyAtLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAgIDcgKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDE4ICsrKy0tLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgICA0IC0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICAzIC0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgICAzIC0tCisgMTAgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IDJhZTNlNGEuLmU3NGZkZGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTYwLDQgKzYwLDQ5IEBAIGV4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZgorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDUwODFkYzEuLjIxNDMwZDAgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IGRhMDdjMWYuLjRiY2E1ZjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC02OCw2ICs2OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitpbmRleCBjMjY2NGE3Li5lYzVjMzI5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDcyOTRlM2EuLjdiMTI4NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitpbmRleCAxMzU5NGQ5Li5kNzY5M2I0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDE0MjQwNzguLmQ4OWRhMzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzYsMTUgKzM2LDExIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CistZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CistI2Vsc2UKKy0jdW5kZWYgX190ZXh0ZG9tYWluCistI3VuZGVmIF9fYmluZHRleHRkb21haW4KKy0jZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjdW5kZWYgdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBiaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKyAgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCitAQCAtNzAsNyArNjYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKyAgICAgeworLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgeworICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IGFhNTI3MzEuLjJlNmY4MGEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggODgzZWMxYS4uMmM3MDY0MiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC00MSw5ICs0MSw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZTA3MDdkNy4uZDg0OGVkNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA2ODU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSAyMjU1MTFhM2FlYjE5M2E5MTZiMzk5OWYwYjY0MGEzOTJjYWE2N2NkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8zNV0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICAgIDQgKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgICAxMyArKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMmU2ZjgwYS4uMzFlYmI5ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQwMSw3ICs0MDEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggMmM3MDY0Mi4uZDVjODk2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0xMjcsMTIgKzEyNywyNSBAQCBuYW1lc3BhY2Ugc3RkCisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUxMTIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw1NDIgQEAKK0Zyb20gNmZmZTdjNDZmNTJkMjc4NjRjM2RmMzY2M2UxNmVjOWRkZWU3MWU4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMzVdIHVjbGliYy1sb2NhbGUtdXBkYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgICAzICsKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgNzQgKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgNDIgKysrKysrLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgNTEgKysrKysrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTIgKystLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAzNCArKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDUgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgMTggKysrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgMTcgKysrLS0KKyA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMzEsNiArMzEsOSBAQAorIAorICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorICNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxjc3RkZGVmPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIzICszOSwyMCBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIHRlbXBsYXRlPD4KKyAgICAgdm9pZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19mOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fbGQ7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2xkOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHZvaWQKK0BAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisgICB9CisgCisgICBfX2NfbG9jYWxlCisgICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CistfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistbmFtZXNwYWNlIF9fZ251X2N4eAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorICAgICB7CisgICAgICAgIkxDX0NUWVBFIiwKK0BAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyAgICAgICAiTENfSURFTlRJRklDQVRJT04iCisgI2VuZGlmCisgICAgIH07CistfQorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKy19ICAvLyBuYW1lc3BhY2Ugc3RkCisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisgI2VuZGlmCistCistICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCistICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCistICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorICAgLy8gYmUgYXZvaWRlZC4KKy0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKy0gICAgaW50CistICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGVuZGlmCisgI2VuZGlmCisgCistICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOworKyAgICAgIHZhX2VuZChfX2FyZ3MpOworIAorICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zMywxNiArMzMsMjAgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisgICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKy0gIHRlbXBsYXRlPD4KKyAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisgICAgIHsKK0BAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAJfQorICAgICB9CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCisrICAgIHsgfQorIAorICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsKKy0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKy0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisrCisgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKy0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorKworICAgICByZXR1cm4gX19yZXQ7CisgICB9CisgCitAQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAgIH0KKyAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCistfQorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC01MywxMiArNTMsMTYgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCXNpemVfdCBfX3JlZnMpCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorICAgICAgeworLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KKysgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworICAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIH0KKyAJYnJlYWs7CisgICAgICAgZGVmYXVsdDoKKy0JOworKwlfX3JldCA9IHBhdHRlcm4oKTsKKyAgICAgICB9CisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KK0BAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisgCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKK0BAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK0BAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKysgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitAQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTUwLDEyICs1MCwyMSBAQAorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCisgICAgIHsKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKysKKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyMzgwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDlmMjE1ODQ1MTk4MWNmMGE4MGNmYWJkYzc5YWUzMWJiNjk3NmE4MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0ODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDA4LzM1XSBtaXNzaW5nLWV4ZWNpbmZvX2gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBib2VobS1nYy9pbmNsdWRlL2djLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib2VobS1nYy9pbmNsdWRlL2djLmggYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK2luZGV4IGM1MWUwMTcuLmE3YmE4ZGMgMTAwNjQ0CistLS0gYS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKysrKyBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorQEAgLTUwMyw3ICs1MDMsNyBAQCBHQ19BUEkgR0NfUFRSIEdDX21hbGxvY19hdG9taWNfaWdub3JlX29mZl9wYWdlIEdDX1BST1RPKChzaXplX3QgbGIpKTsKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY4Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gZTM5M2UwNzZmMWFiODJkMjVlMWFhMDRkNmVkZWEyN2I0MWQzZWIwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjAzICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMzVdIGM5OS1zbnByaW50ZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworaW5kZXggZTg1YmQ4My4uNmFmODM5YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitAQCAtMTM5LDcgKzEzOSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHVzaW5nIDo6dnNwcmludGY7CisgfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA3M2Y2OWQ4MDZlMmM5NTYxYTU0OTk1MjIzNDMxYTEwNzZjZmQ2MTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8zNV0gYzk5LWNvbXBsZXgtdWdseS1oYWNrCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggYzU3YTc1MS4uYTEzMzNlMiAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xODczNCw2ICsxODczNCw5IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciBJU08gQzk5IHN1cHBvcnQgdG8gVFIxIGluIDxjb21wbGV4Lmg+Li4uICIgPiY2OyB9CisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGNvbXBsZXguaD4KKysjaWZkZWYgX19VQ0xJQkNfXworKyNlcnJvciB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSB0ZXN0IGZhaWxzIGhlcmUgZm9yIGNyb3NzIHVudGlsIHVDbGliYyBzdXBwb3J0cyB0aGUgY29tcGxleCBmdW5jcworKyNlbmRpZgorIGludAorIG1haW4gKCkKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNzliMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYjAzNzk1M2U0MDMxMmI0NWFiODRlZDBhM2FkODgyYmI1ZTQxMzEwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjUxOjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMzVdIGluZGV4X21hY3JvCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgICAgICAgfCAgICAzICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIHwgICAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQoraW5kZXggMzhlYjFlOC4uMTU4ZDIxYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorQEAgLTU1LDYgKzU1LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitpbmRleCBkN2I1Y2JkLi5iOWIzYWNiIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitAQCAtNDgsNiArNDgsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBuYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMi1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhkNDVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBhMGNiMTNiZGQ5OGE5NDFiODFmZGFmZTRjZDk2ZTRjNTY5ZmViNjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8zNV0gbGlibXVkZmxhcC1zdXN2My1sZWdhY3kKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYm11ZGZsYXAvbWYtaG9va3MyLmMgfCAgIDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlibXVkZmxhcC9tZi1ob29rczIuYyBiL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKK2luZGV4IDRhZjE3ZGYuLmEzYzZiMmYgMTAwNjQ0CistLS0gYS9saWJtdWRmbGFwL21mLWhvb2tzMi5jCisrKysgYi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCitAQCAtNDI0LDcgKzQyNCw3IEBAIFdSQVBQRVIyKHZvaWQsIGJ6ZXJvLCB2b2lkICpzLCBzaXplX3QgbikKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzQsNyArNDM0LDcgQEAgV1JBUFBFUjIodm9pZCwgYmNvcHksIGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZGVzdCwgc2l6ZV90IG4pCisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0NCw3ICs0NDQsNyBAQCBXUkFQUEVSMihpbnQsIGJjbXAsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pCisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbiA9PSAwID8gMCA6IG1lbWNtcCAoczEsIHMyLCBuKTsKKyB9CisgCisgCitAQCAtNDUzLDcgKzQ1Myw3IEBAIFdSQVBQRVIyKGNoYXIgKiwgaW5kZXgsIGNvbnN0IGNoYXIgKnMsIGludCBjKQorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjIsNyArNDYyLDcgQEAgV1JBUFBFUjIoY2hhciAqLCByaW5kZXgsIGNvbnN0IGNoYXIgKnMsIGludCBjKQorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgInJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiByaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cnJjaHIgKHMsIGMpOworIH0KKyAKKyAvKiBYWFg6ICBzdHBjcHksIG1lbWNjcHkgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlZmRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAxMDRlNGQ2NjIwOGYyNzI2YjE0ZDJmNWVlYmNlOTA3MDBjYmM4M2M4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6MDIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8zNV0gbGlic3RkYysrLW5hbWVzcGFjZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggfCAgICA0ICsrKy0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICAgIHwgICAgNCArKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMDY3NjU3YS4uZGQ3NmE2YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zMiw3ICszMiw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCitAQCAtMTE2LDMgKzExNyw0IEBACisgCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKyAJIH0KKyAgICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCAxNjY1ZGRlLi45MDVjNDMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0zMyw3ICszMyw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorQEAgLTc1LDMgKzc2LDQgQEAKKyAgICAgICBkZWxldGUgX01fZGF0YTsKKyAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgICAgIH0KKyt9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGZkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gZWRjOWFjYjE4MTgxMGYyMzRiNmI5ZjdkMjgyMGIwZTRmNmExZWVhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjQ4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMzVdIHNoLXByMjQ4MzYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvZm9ydW0ucGhwP3RocmVhZF9pZD04OTU5MzA0JmZvcnVtX2lkPTUzNDgKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjQ4MzYKKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBlMTJhMTgwLi4xMzViYmY1IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTIzMzc4LDcgKzIzMzc4LDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGViYTM1NzcuLjYzNjNhMjEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMzE0MSw3ICszMTQxLDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNTBlNTM2NjAwNWIwZjZhZjI3Mzc4ZTJhNWMzY2I5Zjk5MzZhN2U2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU4OjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMzVdIGFybTogVXNlIFRBUkdFVF9FTkRJQU5fT1BUSU9OIGZvciBkZXRlcm1pbmluZworIE1VTFRJTElCX0RFRkFVTFRTCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitpbmRleCA0ODhlZmE0Li43NTNkYzNhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNDYsNyArNDYsNyBAQAorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPWhhcmQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPWhhcmQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NWU0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMjIxIEBACitGcm9tIDE2MDM5N2VmM2MzMzMxMDk5YWYwMjhmMWI4ZDNlMDg1YjA3ZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgICAgfCAgICAyICstCisgZ2NjL2NvbW1vbi5vcHQgICAgICB8ICAgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrKysrKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8ICAgMTAgKysrKysrKysrKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8ICAgMTkgKysrKysrKysrKysrKysrKysrKworIDggZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjguNC9nY2MvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvTWFrZWZpbGUuaW4KKysrKyBnY2MtNC44LjQvZ2NjL01ha2VmaWxlLmluCitAQCAtMjAxOSw3ICsyMDE5LDcgQEAgYXR0cmlicy5vIDogYXR0cmlicy5jICQoQ09ORklHX0gpICQoU1lTVAorIAorIGluY3BhdGgubzogaW5jcGF0aC5jIGluY3BhdGguaCAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSAkKENQUExJQl9IKSBcCisgCQlpbnRsLmggcHJlZml4LmggY29yZXR5cGVzLmggJChUTV9IKSBjcHBkZWZhdWx0LmggJChUQVJHRVRfSCkgXAorLQkJJChNQUNITU9ERV9IKQorKwkJJChNQUNITU9ERV9IKSAkKEZMQUdTX0gpIHRvcGxldi5oCisgCisgQ0ZMQUdTLXByZWZpeC5vICs9IC1EUFJFRklYPVwiJChwcmVmaXgpXCIgLURCQVNFVkVSPSQoQkFTRVZFUl9zKQorIHByZWZpeC5vOiBwcmVmaXguYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCBwcmVmaXguaCBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb21tb24ub3B0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbW1vbi5vcHQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbW1vbi5vcHQKK0BAIC01OTUsNiArNTk1LDEwIEBAIFdwZWRhbnRpYworIENvbW1vbiBWYXIocGVkYW50aWMpIFdhcm5pbmcKKyBJc3N1ZSB3YXJuaW5ncyBuZWVkZWQgZm9yIHN0cmljdCBjb21wbGlhbmNlIHRvIHRoZSBzdGFuZGFyZAorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnLmluCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcuaW4KK0BAIC0xMzgsNiArMTM4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWd1cmUKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorQEAgLTkxOCw2ICs5MTgsNyBAQCB3aXRoX2djCisgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9wbHVnaW4KKyBlbmFibGVfbGlicXVhZG1hdGhfc3VwcG9ydAorIHdpdGhfbGlua2VyX2hhc2hfc3R5bGUKK0BAIC0xNjM5LDYgKzE2NDAsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWRpc2FibGUtbGlicXVhZG1hdGgtc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSBsaWJxdWFkbWF0aCBzdXBwb3J0IGZvciBGb3J0cmFuCitAQCAtMTc4NDcsNyArMTc4NTAsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzg1MCAiY29uZmlndXJlIgorKyNsaW5lIDE3ODUzICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTE3OTUzLDcgKzE3OTU2LDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc5NTYgImNvbmZpZ3VyZSIKKysjbGluZSAxNzk1OSAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0yNzIxOSw2ICsyNzIyMiwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpCisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWd1cmUuYWMKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUxMjAsNiArNTEyMCwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1sCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorSW5kZXg6IGdjYy00LjguNC9nY2MvZG9jL2ludm9rZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGdjYy00LjguNC9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjU4LDYgKzI1OCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgQGdvbAorIC1Xc2lnbi1jb21wYXJlICAtV3NpZ24tY29udmVyc2lvbiAgLVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3MgQGdvbAorQEAgLTQwMjIsNiArNDAyMywxNCBAQCBoZWFkZXJzLS0tZm9yIHRoYXQsIEBvcHRpb257LVd1bmtub3duLXByCisgIGZvciBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sKKyAgdG8gYmUgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorSW5kZXg6IGdjYy00LjguNC9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC44LjQvZ2NjL2djYy5jCitAQCAtNzQxLDYgKzc0MSw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9XAorICAgICAlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fVwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgJXtmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAorICAgICAle2ZnbnUtdG06JTppbmNsdWRlKGxpYml0bS5zcGVjKSUobGlua19pdG0pfVwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2luY3BhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9pbmNwYXRoLmMKKysrKyBnY2MtNC44LjQvZ2NjL2luY3BhdGguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4Miw2ICszODMsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3JvbworIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGU5OWM5Yzk3MjY2ZDZkM2U4Y2FjNzk4YWE5MTQwODI1MGM0ZDYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDE3LzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggY2Q0MWM3OC4uZWFjNGE5MiAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTMsNyArMzkzLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSA1NjIwN2ZhMjkyM2U4ZWRmNzc0ZTk4ZmZhYzgyNjY2MDkxMDc2YmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAxYjc2YzkwLi5lNGRjZTdjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzcyLDYgKzY3NzIsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0Zyb20gMThmZGU1NzQwYjA5MzI0ZGZiOWNmNDFlOTg0OTY3MjU3M2ZmNWZhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8ICAgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICAgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDcgKzI2LDYgQEAKKyAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KKyAKKyBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKKy1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCisrTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KKyBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAorLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKKytNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmYwMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSAzMDdjOGZmM2VmNjY2YjdiZDVhYzczMzg2M2YyZmJiMjdhOWQ1MjFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8ICAgIDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAgICAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrLS0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mub3B0IGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitpbmRleCAxMGFlODRkLi5kYzNmZmRmIDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xMjk5LDYgKzEyOTksMTAgQEAgbm9zdGRpbmMrKworIEMrKyBPYmpDKysKKyBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysKKyAKKytub3N0ZGxpYisrCisrRHJpdmVyCisrRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQorKworIG8KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKKyA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAorZGlmZiAtLWdpdCBhL2djYy9jcC9nKytzcGVjLmMgYi9nY2MvY3AvZysrc3BlYy5jCitpbmRleCBiODk2ZWVhLi5mNTUyMTZiIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2crK3NwZWMuYworKysrIGIvZ2NjL2NwL2crK3NwZWMuYworQEAgLTEyNiw2ICsxMjYsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqaW5fZGVjb2RlZF9vcHRpb25zLAorICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IGEwMjI2MjIuLmYxNWM5OTEgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMTkwLDcgKzE5MCw3IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgLWZyZXBvICAtZm5vLXJ0dGkgIC1mc3RhdHMgIC1mdGVtcGxhdGUtYmFja3RyYWNlLWxpbWl0PUB2YXJ7bn0gQGdvbAorIC1mdGVtcGxhdGUtZGVwdGg9QHZhcntufSBAZ29sCisgLWZuby10aHJlYWRzYWZlLXN0YXRpY3MgLWZ1c2UtY3hhLWF0ZXhpdCAgLWZuby13ZWFrICAtbm9zdGRpbmMrKyBAZ29sCistLWZuby1kZWZhdWx0LWlubGluZSAgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKystbm9zdGRsaWIrKyAtZm5vLWRlZmF1bHQtaW5saW5lICAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAorIC1XYWJpICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCitAQCAtNDUzLDcgKzQ1Myw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtbm9zdGFydGZpbGVzICAtbm9kZWZhdWx0bGlicyAgLW5vc3RkbGliIC1waWUgLXJkeW5hbWljIEBnb2wKKyAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCisgLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiBAZ29sCistLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKKystc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAorIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKKyAtdSBAdmFye3N5bWJvbH19CisgCitAQCAtOTg4Niw2ICs5ODg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW50cmllcyBpbgorIGxpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgorIG1lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAKKytAaXRlbSAtbm9zdGRsaWIrKworK0BvcGluZGV4IG5vc3RkbGliKysKKytEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KKytPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KKysKKyBAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KKyBAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisgQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZWZkYjYyNS4uNDc3NzUyZiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNzQ4LDYgKzc0OCw3IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAgJShtZmxpYikgIiBTVEFDS19TUExJVF9TUEVDICJcCisgICAgICV7ZnByb2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292fSAiIFNBTklUSVpFUl9TUEVDICIgXAorICAgICAleyFub3N0ZGxpYjoleyFub2RlZmF1bHRsaWJzOiUobGlua19zc3ApICUobGlua19nY2NfY19zZXF1ZW5jZSl9fVwKKysgICAgJXshbm9zdGRsaWIrKzp9XAorICAgICAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JUV9fSAle1QqfSB9fX19fX0iCisgI2VuZGlmCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNjNjFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMDA0Njk2ZTA1NGFlOWRjNzFkNTEyY2M3NTVjY2M0MDc0ZmM2MmIyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGI2NWQyMWQuLmJkYWI0NWEgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjU4MjksMTMgKzI1ODI5LDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZTIyNmI4NS4uNWY1YzkwOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00MDk5LDEzICs0MDk5LDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGM4YWJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDdmNWM5ZGNjNzFjOGI4M2EwYjU1OTYyNjZjYzRiZGYwOTM2ZThlMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCAgICA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNDc3NzUyZi4uNTEwNjJhYSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDA5OCw2ICs0MDk4LDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NDM1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK0Zyb20gNDZkNTI0MzkwNTJmMDg3NmE5MmRjZjhhMGFiOWM2MGQ3NWM4MDMwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMzVdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UKKyBpbiAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgICAgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDkwYTJiYmEuLjIzMjA0OTcgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ2OSw3ICs0NjksNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGJkYWI0NWEuLmQ1ODc5OTMgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE1MzksOCArMTE1MzksOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZjVjOTA5Li41ZTVlODRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MjAsOCArMTcyMCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCAyOWZkZmM3Li5lMDQ4ZGNlIDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIjsgdGhlbgorIAkJcG9zdHBvbmVfZGVmYXVsdHNfaD0ieWVzIgorIAkgICAgZWxzZQorIAkJZWNobyAiIyBpbmNsdWRlIFwiJGZpbGVcIiIgPj4gJHtvdXRwdXR9VAorQEAgLTEwMyw3ICsxMDMsNyBAQCBlc2FjCisgCisgIyBJZiB3ZSBwb3N0cG9uZWQgaW5jbHVkaW5nIGRlZmF1bHRzLmgsIGFkZCB0aGUgI2luY2x1ZGUgbm93LgorIGlmIHRlc3QgeCIkcG9zdHBvbmVfZGVmYXVsdHNfaCIgPSB4InllcyI7IHRoZW4KKy0gICAgZWNobyAiIyBpbmNsdWRlIFwiZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisrICAgIGVjaG8gIiMgaW5jbHVkZSBcIi4vZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisgZmkKKyAKKyAjIEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbiBndWFyZCwgcGFydCB0d28uCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdkODQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gZTBkMTVmNGY4YmYyOGMzNTFiOTIxNWNhMzdmMWNhYTI0ZGYwZTFmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE4OjU0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMzVdIFBSIHRhcmdldC8zMjIxOQorCisqIHZhcmFzbS5jIChkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSk6IFdlYWsgZGF0YSBpcyBub3QgbG9jYWwuCisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jIHwgICAxNCArKysrKysrKysrKysrKworIGdjYy92YXJhc20uYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKysrKy0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKKworZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJlN2RlZGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworQEAgLTAsMCArMSwxNCBAQAorKy8qIFBSIHRhcmdldC8zMjIxOSAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysvKiB7IGRnLXJlcXVpcmUtdmlzaWJpbGl0eSAiIiB9ICovCisrLyogeyBkZy1vcHRpb25zICItZlBJQyIgeyB0YXJnZXQgZnBpYyB9IH0gKi8KKysKKytleHRlcm4gdm9pZCBmKCkgX19hdHRyaWJ1dGVfXygod2Vhayx2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOworK2V4dGVybiBpbnQgcHV0cyggY2hhciBjb25zdCogKTsKKytpbnQgbWFpbigpCisreworKwlpZiAoZikKKysJCWYoKTsKKysJcmV0dXJuIDA7CisrfQorKworZGlmZiAtLWdpdCBhL2djYy92YXJhc20uYyBiL2djYy92YXJhc20uYworaW5kZXggNjY0ODEwMy4uZmFkYmE3OCAxMDA2NDQKKy0tLSBhL2djYy92YXJhc20uYworKysrIGIvZ2NjL3ZhcmFzbS5jCitAQCAtNjY3NSw2ICs2Njc1LDEwIEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwgaW50IHNobGliKQorICAgLyogU3RhdGljIHZhcmlhYmxlcyBhcmUgYWx3YXlzIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKCEgVFJFRV9QVUJMSUMgKGV4cCkpCisgICAgIGxvY2FsX3AgPSB0cnVlOworKyAgLyogaGlkZGVuIHdlYWsgY2FuJ3QgYmUgb3ZlcnJpZGRlbiBieSBzb21ldGhpbmcgbm9uLWxvY2FsLCBhbGwKKysgICAgIHRoYXQgaXMgcG9zc2libGUgaXMgdGhhdCBpdCBpcyBub3QgZGVmaW5lZCBhdCBhbGwuICovCisrICBlbHNlIGlmIChERUNMX1dFQUsgKGV4cCkpCisrICAgIGxvY2FsX3AgPSBmYWxzZTsKKyAgIC8qIEEgdmFyaWFibGUgaXMgbG9jYWwgaWYgdGhlIHVzZXIgaGFzIHNhaWQgZXhwbGljaXRseSB0aGF0IGl0IHdpbGwKKyAgICAgIGJlLiAgKi8KKyAgIGVsc2UgaWYgKChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChleHApCitAQCAtNjY4OCwxMSArNjY5Miw2IEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwgaW50IHNobGliKQorICAgICAgbG9jYWwuICAqLworICAgZWxzZSBpZiAoREVDTF9WSVNJQklMSVRZIChleHApICE9IFZJU0lCSUxJVFlfREVGQVVMVCkKKyAgICAgbG9jYWxfcCA9IHRydWU7CistICAvKiBEZWZhdWx0IHZpc2liaWxpdHkgd2VhayBkYXRhIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc3Ryb25nIHN5bWJvbAorLSAgICAgaW4gYW5vdGhlciBtb2R1bGUgYW5kIHNvIGFyZSBub3QgbG9jYWwuICAqLworLSAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApCistCSAgICYmICFyZXNvbHZlZF9sb2NhbGx5KQorLSAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBJZiBQSUMsIHRoZW4gYXNzdW1lIHRoYXQgYW55IGdsb2JhbCBuYW1lIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisgICAgICBzeW1ib2xzIHJlc29sdmVkIGZyb20gb3RoZXIgbW9kdWxlcy4gICovCisgICBlbHNlIGlmIChzaGxpYikKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBhZjhhNTZlYTRlMTdiMjkwOWVmZjJjNTc3MDRhYjQzZWYyNGYyOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAgICAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCA4Mzg1ZTk2Li5iOGY3YTkyIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjcwNCw3ICsxMjcwNCw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDdkOTdmZWQuLjNmOWY0ODQgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gMDhjMjM5ODQ0NWU2Y2FjMjgyNDg4ZjY0YWU2YmYyOWNiY2Q4ZGIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAgIDEwICsrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKK2luZGV4IDE0MjVkZjYuLmQxOGUzY2IgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNDIwOCwxNyArNDIwOCwxOSBAQCB2b2lkIGZvbyAoKQorIH0KKyAKKyBfQUNFT0YKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKKytpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKyAgIGZpCisgZmkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisgcm0gLWYgY29uZnRlc3QqCisgCisgZmkKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGI3YWJhNS4uYzdjOTY0NCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC0yMTYsMTYgKzIxNiwxNCBAQCB2b2lkIGZvbyAoKQorICAgYmFyKCk7CisgfQorIF0pXSkKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCistICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKysgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworLSAgZmldKQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKysgIGZpCisrZmkKKyBybSAtZiBjb25mdGVzdCoKKyBdKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGEwZjliZDA5YzgxNmFkMjllY2Y3YzI5ZDZjMjdmN2RmOTc3MTAzNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDI3LzM1XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCisKK0N1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQorcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgorcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCitwZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgorCitUaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAorLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KKworW1lPQ1RPICMyMDc0XQorCitSUCAyMDEyLzA0LzEzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NwL2xhbmctc3BlY3MuaCB8ICAgIDIgKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK2luZGV4IGEwMDFjM2UuLjFhYWUxZTQgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1MTA2MmFhLi5jZjZiOTllIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMDQyLDcgKzEwNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQorICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDMwMWUxOGQ0NzExZGI1OTI1ZTc2N2ZhZDA4ZGZmYTljZmUwYTJmMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCAxYTBiZTUwLi45ODljMmZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgbWlwcyotbXRpLWxpbnV4KikKKyBtaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGxpbnV4LmggZ2xpYmMtc3RkaW50LmggJHt0bV9maWxlfSBtaXBzL2dudS11c2VyLmggbWlwcy9nbnUtdXNlcjY0LmggbWlwcy9saW51eDY0LmggbWlwcy9saW51eC1jb21tb24uaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3QtbGludXg2NCIKKy0JdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV9OMzIiCisrCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfNjQiCisgCWNhc2UgJHt0YXJnZXR9IGluCisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTZkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjA5IEBACitGcm9tIDI5ZDEyMzQ0ZmI2ODJhMDUzZGU1M2ViMDhiOTU3MDRjZjNiNjdhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICAgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oICAgIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitAQCAtMjMsOCArMjMsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNTcsNyArNTcsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXguaAorQEAgLTIwLDQgKzIwLDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitAQCAtMjcsNiArMjcsNiBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGZfeDg2XzY0IgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05YMzIgImVsZjMyX3g4Nl82NCIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGlieDMyL2xkLWxpbnV4LXgzMi5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy9saW51eC5oCitAQCAtMTcsNCArMTcsNCBAQCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHCisgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCitAQCAtMjIsMTAgKzIyLDEwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGY2NCV7RUI6Yn0le0VMOmx9dHNtaXAiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLnNvLjEiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiAiL2xpYjMyL2xkLnNvLjEiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgIi9saWIzMi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKKyAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiwgXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitAQCAtMzY2LDE0ICszNjYsMTQgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorICNlbHNlCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCisgI2VuZGlmCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zaC9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc2gvbGludXguaAorQEAgLTQzLDcgKzQzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXguaAorQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdQorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitAQCAtOTIsOCArOTIsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2xpbnV4LmgKK0BAIC03MywxMCArNzMsMTAgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGMxODE2YzE2MDE1NmY5OWMzNGU2YTBhMDMxMWJiMDIxOTMyNjgwNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggMjMyMDQ5Ny4uODU2MmE2MiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDYyNyw3ICs0NjI3LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGI4NTI2NWJjOTRlYzFiZWFmMWQzYjY5N2MwM2RiNjI5OTE1NTM0NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDNjNTUwYTYuLjAxYzc2MjYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY4MTIsMTIgKzI2ODEyLDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMzYwMWFiNi4uMDZlNTAxZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00Nzc5LDE1ICs0Nzc5LDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggNDk1M2M5Zi4uNTNhMTE0NSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMDU3OCwxMSArMjA1NzgsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA3M2Q0MzBhLi5mMjEzNWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIxMSw3ICsyMTEsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNmM3MTVmY2ZhMjYyYWRhZGNhODFjNjhhMWYzZjY5YWEzMTg3YTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi40NmY0N2MyIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTk4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gOTdlNDU5MWMyMDMxMDQyNWU3YWNhMGU2NzEyYThkOTQ4MGU3NzQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IDgwZjQ1NGQuLjRkYjNlYjkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgQkU4X0xJTktfU1BFQwkJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBCRThfTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmYzVlNGJlYWVhODU2YTJiNDg2Yzc3MGFkM2FkZGMwZjViYjMxMDBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOGJjMGM5OC4uM2NkMDgxNyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTUxOSwxMCArMTE1MTksMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMTUzMyw2ICsxMTU0MywxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZTVlODRmLi40MTVhNmRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MDAsMTAgKzE3MDAsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xNzE0LDYgKzE3MjQsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0Y2Y0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSBkZWZmZGIwYjI0OTdhMTA2MDYxZDNlYTJjNmEzZmVmNGZiYTM0NDVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mzk6NTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNS8zNV0gd2Nhc3QtcXVhbCBQUi81NTM4MworCitUaGlzIGlzIGEgYmFja3BvcnQgZnJvbSBnY2MgYnVnemlsbGEKKworaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTM4MworCitUaGlzIGNvbW1pdCBmaXhlcyBhIHdyb25nIHdhcm5pbmcgYmVoYXZpb3IuIFRoaXMgYnVnIHdoaWNoIGhhcyBubword29ya2Fyb3VuZCBvdGhlciB0aGFuIGRpc2FibGluZyB0aGUgd2FybmluZy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgZ2NjL2MvYy10eXBlY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMgfCAgICA2ICsrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2MvYy10eXBlY2suYyBiL2djYy9jL2MtdHlwZWNrLmMKK2luZGV4IGRkYjZkMzkuLmM2MjQxMjAgMTAwNjQ0CistLS0gYS9nY2MvYy9jLXR5cGVjay5jCisrKysgYi9nY2MvYy9jLXR5cGVjay5jCitAQCAtNDQ2NCw3ICs0NDY0LDcgQEAgaGFuZGxlX3dhcm5fY2FzdF9xdWFsIChsb2NhdGlvbl90IGxvYywgdHJlZSB0eXBlLCB0cmVlIG90eXBlKQorICAgICAvKiBUaGVyZSBhcmUgcXVhbGlmaWVycyBwcmVzZW50IGluIElOX09UWVBFIHRoYXQgYXJlIG5vdCBwcmVzZW50CisgICAgICAgIGluIElOX1RZUEUuICAqLworICAgICB3YXJuaW5nX2F0IChsb2MsIE9QVF9XY2FzdF9xdWFsLAorLQkJImNhc3QgZGlzY2FyZHMgJXEjdiBxdWFsaWZpZXIgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlIiwKKysJCSJjYXN0IGRpc2NhcmRzICVxdiBxdWFsaWZpZXIgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlIiwKKyAJCWRpc2NhcmRlZCk7CisgCisgICBpZiAoYWRkZWQgfHwgZGlzY2FyZGVkKQorZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKK2luZGV4IDY0MGU0ZjAuLjU2MzgyYzcgMTAwNjQ0CistLS0gYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYworKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKK0BAIC04NSwxMSArODUsMTEgQEAgZjMgKHZvaWQgKioqYmFyKQorIHZvaWQKKyBmNCAodm9pZCAqIGNvbnN0ICoqYmFyKQorIHsKKy0gIGNvbnN0IHZvaWQgKioqcDkgPSAoY29uc3Qgdm9pZCAqKiopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCisrICBjb25zdCB2b2lkICoqKnA5ID0gKGNvbnN0IHZvaWQgKioqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCBkaXNjYXJkcyAuY29uc3QuIHF1YWxpZmllciIgfSAqLworICAgdm9pZCAqIGNvbnN0ICoqcDExID0gKHZvaWQgKiBjb25zdCAqKikgYmFyOworLSAgdm9pZCAqKiBjb25zdCAqcDEzID0gKHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKysgIHZvaWQgKiogY29uc3QgKnAxMyA9ICh2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IGRpc2NhcmRzIC5jb25zdC4gcXVhbGlmaWVyIiB9ICovCisgICBjb25zdCB2b2lkICogY29uc3QgKipwMTUgPSAoY29uc3Qgdm9pZCAqIGNvbnN0ICoqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCIgfSAqLworLSAgY29uc3Qgdm9pZCAqKiBjb25zdCAqcDE3ID0gKGNvbnN0IHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKysgIGNvbnN0IHZvaWQgKiogY29uc3QgKnAxNyA9IChjb25zdCB2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IGRpc2NhcmRzIC5jb25zdC4gcXVhbGlmaWVyIiB9ICovCisgICB2b2lkICogY29uc3QgKiBjb25zdCAqIHAxOSA9ICh2b2lkICogY29uc3QgKiBjb25zdCAqKSBiYXI7CisgICBjb25zdCB2b2lkICogY29uc3QgKiBjb25zdCAqcDIxID0gKGNvbnN0IHZvaWQgKiBjb25zdCAqIGNvbnN0ICopIGJhcjsKKyB9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzgyOTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1doZW4gY3Jvc3MgY29tcGlsaW5nIGEgdGFyZ2V0IGdjYywgdGFyZ2V0IGZsYWdzIG1heSBiZSB1c2VkIG9uIHRoZSBob3N0CisKK0NvbmZpZ3VyZSBpZGVudGlmaWVzIGEgbnVtYmVyIG9mIHdhcm5pbmcgZmxhZ3MgKFdBUk5fQ0ZMQUdTIGFuZAorV0FSTl9DWFhGTEFHUykgZnJvbSB0aGUgJENDIHZhbHVlLiAgVGhlIGNyb3NzIGNvbXBpbGVyIG1heSBiZSBkaWZmZXJlbnQKK2Zyb20gdGhlIGhvc3QgY29tcGlsZXIgYW5kIG1heSBub3Qgc3VwcG9ydCB0aGUgc2FtZSBzZXQgb2YgZmxhZ3MuICBUaGlzCitsZWFkcyB0byBwcm9ibGVtcyBzdWNoIGFzOgorCitjYzFwbHVzOiBlcnJvcjogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gIi1Xbm8tbmFycm93aW5nIgorY2MxcGx1czogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICItV25vLW92ZXJsZW5ndGgtc3RyaW5ncyIKKworV29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IHJlbW92aW5nIHRoZSB3YXJuaW5nIGZsYWdzIGZyb20gdGhlCitCVUlMRF9DWFhGTEFHUyB2YWx1ZSwgaW4gYSB3YXkgc2ltaWxhciB0byB0aGUgQlVJTERfQ0ZMQUdTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlndXJlCisrKysgZ2NjLTQuOC40L2djYy9jb25maWd1cmUKK0BAIC0xNzg2NCw3ICsxNzg2NCw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDE3ODUzICJjb25maWd1cmUiCisrI2xpbmUgMTc4NjcgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTc5NzAsNyArMTc5NzAsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzk1OSAiY29uZmlndXJlIgorKyNsaW5lIDE3OTczICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTI2OTE4LDE4ICsyNjkxOCwxNSBAQCAkYXNfZWNobyAiI2RlZmluZSBUQVJHRVRfTElCQ19QUk9WSURFU19TCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorLWhhdmVfc3lzX3NkdF9oPW5vCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKyAjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisgIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCistIworLSMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0jCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorICNmaQorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorLSRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5NjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjE5MDJhOTAgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaApAQCAtMCwwICsxLDc4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhagorCisyMDEzLTA4LTAxICBNYXJ0aW4gSmFtYm9yICA8bWphbWJvckBzdXNlLmN6PgorCisJUFIgbWlkZGxlLWVuZC81Nzc0OAorCSogc3Rvci1sYXlvdXQuYyAoY29tcHV0ZV9yZWNvcmRfbW9kZSk6IFRyZWF0IHplcm8tc2l6ZWQgYXJyYXkgZmllbGRzCisJbGlrZSBpbmNvbXBsZXRlIHR5cGVzLgorCit0ZXN0c3VpdGUvCisJKiBnY2MuZGcvdG9ydHVyZS9wcjU3NzQ4LmM6IE5ldyB0ZXN0LgorCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL3N0b3ItbGF5b3V0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2Mvc3Rvci1sYXlvdXQuYwkyMDEzLTA0LTI4IDEwOjI5OjE4LjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00LjguMS9nY2Mvc3Rvci1sYXlvdXQuYwkyMDEzLTA4LTAxIDE1OjAyOjA4LjAxODAwNjEyNSAtMDcwMAorQEAgLTE2MTgsNyArMTYxOCw5IEBACisgCQkgICAmJiBpbnRlZ2VyX3plcm9wIChUWVBFX1NJWkUgKFRSRUVfVFlQRSAoZmllbGQpKSkpKQorIAkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoYml0X3Bvc2l0aW9uIChmaWVsZCksIDEpCisgCSAgfHwgREVDTF9TSVpFIChmaWVsZCkgPT0gMAorLQkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoREVDTF9TSVpFIChmaWVsZCksIDEpKQorKwkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoREVDTF9TSVpFIChmaWVsZCksIDEpCisrCSAgfHwgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChmaWVsZCkpID09IEFSUkFZX1RZUEUKKysJICAgICAgJiYgdHJlZV9sb3dfY3N0IChERUNMX1NJWkUgKGZpZWxkKSwgMSkgPT0gMCkpCisgCXJldHVybjsKKyAKKyAgICAgICAvKiBJZiB0aGlzIGZpZWxkIGlzIHRoZSB3aG9sZSBzdHJ1Y3QsIHJlbWVtYmVyIGl0cyBtb2RlIHNvCitJbmRleDogZ2NjLTQuOC4xL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jCTIwMTMtMDgtMDEgMTU6MDI6MDguMDYyMDA2MTI2IC0wNzAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogUFIgbWlkZGxlLWVuZC81Nzc0OCAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOworKworK3R5cGVkZWYgbG9uZyBsb25nIFYKKysgIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMiAqIHNpemVvZiAobG9uZyBsb25nKSksIG1heV9hbGlhcykpOworKworK3R5cGVkZWYgc3RydWN0IFMgeyBWIGE7IFYgYlswXTsgfSBQIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDEpKSk7CisrCisrc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFQgeyBjaGFyIGM7IFAgczsgfTsKKysKKyt2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKKytjaGVjayAoc3RydWN0IFQgKnQpCisreworKyAgaWYgKHQtPnMuYlswXVswXSAhPSAzIHx8IHQtPnMuYlswXVsxXSAhPSA0KQorKyAgICBhYm9ydCAoKTsKKyt9CisrCisraW50IF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKKytnZXRfaSAodm9pZCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCisrZm9vIChQICpwKQorK3sKKysgIFYgYSA9IHsgMywgNCB9OworKyAgaW50IGkgPSBnZXRfaSgpOworKyAgcC0+YltpXSA9IGE7CisrfQorKworK2ludAorK21haW4gKCkKKyt7CisrICBzdHJ1Y3QgVCAqdCA9IChzdHJ1Y3QgVCAqKSBtYWxsb2MgKDEyOCk7CisrCisrICBmb28gKCZ0LT5zKTsKKysgIGNoZWNrICh0KTsKKysKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWY4NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDMtY3BwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1RoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbiBidWlsZGluZyAKK2djYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZCBpbgorYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgorCitjb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKK2NvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQorY29uZmlndXJlOjM2NjY6ICQ/ID0gMAorY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KK2NvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgorY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlIHVzaW5nIAordGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIgaGVhZGVycyBhcmUgCit2ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZyBpbnRvIAorY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkIGZhaWx1cmVzIAorcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCisKK1RoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkIGVudmlyb25tZW50IHdoZW4KK3VzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlIHRoZSB2ZXJzaW9uCit3aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0byBhdm9pZCB0aGUgCitwcm9ibGVtLgorCitSUCAyMi8wOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0wMy0zMCAxMToyNTowMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvTWFrZWZpbGUuaW4JMjAxMy0wOC0xMyAxMjowMzoxNy4xNTE5ODg4ODIgKzAwMDAKK0BAIC0xNDksNiArMTQ5LDcgQEAKKyAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAorIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCisgCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODc2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0NC1nZW5ndHlwZXMucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorZ2VuZ3R5cGUgaXMgZ2VuZXJhdGVkIGZvciBib3RoIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHRoZSB0YXJnZXQuIC1ER0VORVJBVE9SX0ZJTEUKK3dhcyBhZGRlZCBpbiB0aGUgcGF0Y2ggaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTItMDcvbXNnMDAyNzMuaHRtbAorYW5kIHdhcyBhcHBsaWVkIHRvIGJvdGggdmVyc2lvbnMgb2YgZ2VuZ3R5cGUuCisKK1VuZm9ydHVuYXRlbHkgdGhlIHByZXNlbmNlIG9mIHRoaXMgZmxhZyB0cmlnZ2VycyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYmNvbmZpZy5oKSAKK3RvIGJlIGluY2x1ZGVkIGZvciB0aGUgdGFyZ2V0IGJ1aWxkIG9mIGdlbmd0eXBlLiBDb21waWxpbmcgZ2VuZ3R5cGUgd2l0aCB0aGUgdGFyZ2V0IAorY29tcGlsZXIgYW5kIGJjb25maWcuaCBjYW4gcmVzdWx0IGluIGVycm9ycyBpZiB0aGUgYnVpbGQgYW5kIHRhcmdldCBzeXN0ZW1zIGFyZSAKK2Rpc3NpbWlsYXIuIEFuIGV4YW1wbGUgY2FzZSB0aGlzIGZhaWxzIGlzIGNyb3NzIGNvbXBpbGluZyBnY2Mgb24gbGludXggZm9yIGEgZGFyd2luIAordGFyZ2V0IHN5c3RlbToKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzoyNTowOgorfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6IEluIGZ1bmN0aW9uICd2b2lkIHBhcnNlX2Vycm9yKGNvbnN0IGNoYXIqLCAuLi4pJzoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9zeXN0ZW0uaDo5Mzo1MzogZXJyb3I6ICdmcHV0Y191bmxvY2tlZCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCit8ICAjICBkZWZpbmUgZnB1dGMoQywgU3RyZWFtKSBmcHV0Y191bmxvY2tlZCAoQywgU3RyZWFtKQorCit3aGljaCBvY2N1cnMgc2luY2UgYXV0by1idWlsZC5oIGFuZCBhdXRvLWhvc3QuaCBoYXZlIGRpZmZlcm5ldCB2YWx1ZXMgb2YKK0hBVkVfRlBVVENfVU5MT0NLRUQ6CisKKyNkZWZpbmUgSEFWRV9GUFVUQ19VTkxPQ0tFRCAxCisvKiAjdW5kZWYgSEFWRV9GUFVUU19VTkxPQ0tFRCAqLworCitUaGUgb2J2aW91cyBmaXggaXMgdG8gb25seSBpbmNsdWRlIHRoZSBmbGFnIG9uIGJ1aWxkLyB0YXJnZXRzIHdoaWNoIHRoaXMgcGF0Y2ggZG9lcywgaG93ZXZlciAKK3RoaXMgYWxzbyBsZWFkcyB0byBjb21waWxlIGVycm9ycyBkdWUgdG8gY29uc3RfdHJlZSBiZWluZyB1bmRlZmluZWQgYnV0IHVzZWQgaW4gZG91YmxlX2ludC5oCisKK0kgYWRkZWQgYSBHRU5FUkFUT1JfRklMRTIgZmxhZyB0byB3b3JrYXJvdW5kIHRob3NlIGluIHRoZSAKK3RhcmdldCBjYXNlIGFuZCBhbGxvdyB0aGUgYnVpbGQgdG8gc3VjY2VlZC4KKworT25seSB0aGUgYnVpbGQvZ2VuZ3R5cGVzIHNob3VsZCBoYXZlIHRoZSAtREdFTkVSQVRPUl9GSUxFIAorCitSUCAyMi84LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzYuODQ0MDE0NDI0ICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM3Ljc4NDAxNDQwMiArMDAwMAorQEAgLTM5MDMsMjcgKzM5MDMsMjkgQEAKKyAKKyBnZW5ndHlwZS1sZXgubyBidWlsZC9nZW5ndHlwZS1sZXgubyA6IGdlbmd0eXBlLWxleC5jIGdlbmd0eXBlLmggJChTWVNURU1fSCkKKyBnZW5ndHlwZS1sZXgubzogJChDT05GSUdfSCkgJChCQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLWxleC5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS1wYXJzZS5vIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gOiBnZW5ndHlwZS1wYXJzZS5jIGdlbmd0eXBlLmggXAorICAgJChTWVNURU1fSCkKKyBnZW5ndHlwZS1wYXJzZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtc3RhdGUubyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiBnZW5ndHlwZS1zdGF0ZS5jICQoU1lTVEVNX0gpIFwKKyAgIGdlbmd0eXBlLmggZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgJChPQlNUQUNLX0gpIFwKKyAgICQoWFJFR0VYX0gpCisgZ2VuZ3R5cGUtc3RhdGUubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUubyBidWlsZC9nZW5ndHlwZS5vIDogZ2VuZ3R5cGUuYyAkKFNZU1RFTV9IKSBnZW5ndHlwZS5oIAlcCisgICBydGwuZGVmIGluc24tbm90ZXMuZGVmIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpIFwKKyAgICQoT0JTVEFDS19IKSAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLm86ICQoQkNPTkZJR19IKQorIAorIGJ1aWxkL2dlbm1kZGVwcy5vOiBnZW5tZGRlcHMuYyAkKEJDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmgJXAorQEAgLTM5ODgsNyArMzk5MCw3IEBACisgIyBhbnkgc3lzdGVtIGhlYWRlciBpcyBpbmNsdWRlZC4KKyBnZW5ndHlwZS1sZXguYyA6IGdlbmd0eXBlLWxleC5sCisgCS0kKEZMRVgpICQoRkxFWEZMQUdTKSAtbyRAICQ8ICYmIHsgXAorLQkgIGVjaG8gJyNpbmNsdWRlICJiY29uZmlnLmgiJyA+ICRALnRtcDsgXAorKwkgIGVjaG8gJycgPiAkQC50bXA7IFwKKyAJICBjYXQgJEAgPj4gJEAudG1wOyBcCisgCSAgbXYgJEAudG1wICRAOyBcCisgCX0KK0luZGV4OiBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9kb3VibGUtaW50LmgJMjAxMy0wMS0zMCAxMTowNDozMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTA4LTE5IDExOjQxOjUxLjU2NDAxMjcxOSArMDAwMAorQEAgLTQ0OCwxMCArNDQ4LDEyIEBACisgCisgCisgI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUyCisgLyogQ29udmVyc2lvbiB0byBhbmQgZnJvbSBHTVAgaW50ZWdlciByZXByZXNlbnRhdGlvbnMuICAqLworIAorIHZvaWQgbXB6X3NldF9kb3VibGVfaW50IChtcHpfdCwgZG91YmxlX2ludCwgYm9vbCk7CisgZG91YmxlX2ludCBtcHpfZ2V0X2RvdWJsZV9pbnQgKGNvbnN0X3RyZWUsIG1wel90LCBib29sKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogRE9VQkxFX0lOVF9IICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNGY0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitnY2MgNC44IHdvbid0IGJ1aWxkIHdpdGggLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgc2luY2UgdGhlICouUHBvIGZpbGVzCitkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAgCisyMDEyLzA5LzIyCisKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDEtMTQgMTg6MTY6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTA5LTIyIDEwOjM4OjE4LjkwNDA2NDc1MCArMDAwMAorQEAgLTEwMCw3ICsxMDAsOCBAQAorIElGVU5DX0RFRgk9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUCT0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCisgCistTV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUwkJPSAKKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wNS0zMSAwOTowOToyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDktMjIgMTA6NDA6NDIuNTIwMDU5OTE3ICswMDAwCitAQCAtMjk4LDcgKzI5OCw4IEBACisgUEFUX1MgPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGID0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQgPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKy1NX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUyA9IAorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWZkNTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitXaGVuIGNvbXBpbGluZyBhIHByb2plY3QgdXNpbmcgLWZyZXBvLCAucnBvIGZpbGVzIGFyZSB3cml0dGVuIGFsb25nc2lkZQordGhlIC5vIGZpbGUsIHRoZSBzeW1ib2xzIGVpdGhlciBoYXZlIE8gb3IgQyBhZ2FpbnN0IHRoZW0uIER1cmluZyBmaW5hbCBsaW5raW5nLAordGhlIG9iamVjdHMgY2FuIGJlIHJlY29tcGlsZWQgd2l0aCBzb21lIG9mIHRoZSBlbnRyaWVzIHR3ZWFrZWQvY2hvc2VuIGJ5IHRoZSAKK3RsaW5rLmMgY29kZSAodmlzaWJsZSB3aXRoIFRMSU5LX1ZFUkJPU0U9MyksIGl0IGRvZXMgdGhpcyBieSBjaGFuZ2luZyBPIC0+IEMKK2luIHRoZSAucnBvIGZpbGVzLgorCitNeSB0ZXN0cyBzaG93ZWQgdGhhdCBpbml0X3JlcG8gKGNwL3JlcG8uYykgd2FzIGNvcnJlY3RseSBjYWxsaW5nIAorSURFTlRJRklFUl9SRVBPX0NIT1NFTiBhZ2FpbnN0IHRoZSByaWdodCBpZGVudGlmZXJzIGFuZCBzZXR0aW5nIHRoZQorY2hvc2VuIGJpdC4KKworQnkgdGhlIHRpbWUgZmluaXNoX3JlcG8oKSBvciBlbWl0X3JlcG9fcCgpIHdlcmUgY2FsbGVkLCB0aGUgcG9pbnRlciByZXR1cm5lZAorYnkgZ2V0X2lkZW50aWZpZXIoKSBmb3IgdGhlIHN5bWJvbCBtYXJrZWQgZHVyaW5nIGluaXRfcmVwbyBoYWQgY2hhbmdlZCBhbmQKK3RoZSBjaG9zZW4gYml0IHdhcyBubyBsb25nZXIgc2V0LiBUaGlzIGxlYWQgdG8gbGlua2luZyBidWdzIGxpa2U6CisKK2NvbGxlY3Q6IHJlbGlua2luZworY29sbGVjdDI6IGVycm9yOiAnX1pOSzZzdWRva3U1Q2xlYXJJTlNfOFNlcXVlbmNlRUVjbEVSUzFfJyB3YXMgYXNzaWduZWQgdG8gJ2JvYXJkLnJwbycsIGJ1dCB3YXMgbm90IGRlZmluZWQgZHVyaW5nIHJlY29tcGlsYXRpb24sIG9yIHZpY2UgdmVyc2EKKworVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGdldHRpbmcgY2FsbGVkIGJlZm9yZQorZmluaXNoX3JlcG8oKSBpcyBjYWxsZWQgYW5kIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzIGlzIHNldCB0byBmYWxzZSAKK3NvIHRoZSBpZGVudGlmaWVycyBhcmUgbm90IHByZXNlcnZlZC4gVGhleSBhcmUgcmVjcmVhdGVkIGJ1dCB0aGUgCitjaG9zZW4gYml0cyBnZXQgd2lwZWQgb3V0IHdoaWNoIGlzIHdoeSB0aGUgcG9pbnRlciBjaGFuZ2VzIGFuZCB0aGUgCitjaG9zZW4gYml0IGlzIG5vdCBzZXQuCisKK1RoZSBmaXggaXMgdG8gY2hhbmdlIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzICphZnRlciogdGhlIGZpbmlzaF9yZXBvIAorY2FsbHMgYXJlIG1hZGUuCisKK1JlcHJvZHVjdGlvbiBpcyB0cmlja3kgc2luY2UgeW91IG5lZWQgdG8gdHJpZ2dlciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYXQKK2p1c3QgdGhlIHJpZ2h0IG1vbWVudC4KKworUlAgMjAxMy8xMC85CisKK1tZT0NUTyAjNTEzM10KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL3RvcGxldi5jCTIwMTMtMDMtMjggMDg6Mjk6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy90b3BsZXYuYwkyMDEzLTEwLTA5IDIwOjI3OjE3LjA4OTIyODAyMyArMDAwMAorQEAgLTU1MSwxMSArNTUxLDExIEBACisgICBpZiAoZmxhZ19zeW50YXhfb25seSB8fCBmbGFnX3dwYSkKKyAgICAgcmV0dXJuOworIAorLSAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKy0KKyAgIC8qIFRoaXMgbXVzdCBhbHNvIGNhbGwgZmluYWxpemVfY29tcGlsYXRpb25fdW5pdC4gICovCisgICBsYW5nX2hvb2tzLmRlY2xzLmZpbmFsX3dyaXRlX2dsb2JhbHMgKCk7CisgCisrICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOworKworICAgaWYgKHNlZW5fZXJyb3IgKCkpCisgICAgIHJldHVybjsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gOWUwZTE5ZWFjMjU2MmY3Mzg1ODYwMmZlMjZlMjA0NGViOGIyMGM0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgNSBGZWIgMjAxNCAxNjo1MjozMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBFbmFibGUgU1BFICYgQWx0aVZlYyBnZW5lcmF0aW9uIG9uIHBvd2VwYypsaW51eCB0YXJnZXQKKworV2hlbiBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eCwgdGhlIHJlc3VsdGluZyBHQ0Mgd2lsbCAKK25vdCBiZSBhYmxlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIFNQRSB0YXJnZXRzIChlNTAwdjEvdjIpLgorR0NDIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4c3BlIHdpbGwgbm90IGJlIGFibGUgdG8KK2dlbmVyYXRlIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zIChmb3IgZTY1MDApLgorVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJlZCBmaWxlIHN1Y2ggdGhhdCBTUEUgb3IgQWx0aVZlYyBjb2RlCitjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gZ2NjIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LgorVGhlIEFCSSBhbmQgc3BlY2lmZmljIGluc3RydWN0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKyItbWFiaT1zcGUgb3IgLW1hYmk9YWx0aXZlYyIgYW5kIHRoZSAiLW1zcGUgb3IgLW1hbHRpdmVjIiBwYXJhbWV0ZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggY2I3YTk0ZS4uZDM5MmMyYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIwNjgsNyArMjA2OCwxMiBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHQtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIgOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmggcnM2MDAwL2xpbnV4YWx0aXZlYy5oIHJzNjAwMC9saW51eHNwZS5oIHJzNjAwMC9lNTAwLmgiIDs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXBwY29zICR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtcHBjY29tbSIKKyAJY2FzZSAke3RhcmdldH0gaW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDhjNjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDgxIEBACitFbnN1cmUgdGFyZ2V0IGdjYyBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZAorCitUaGVyZSBhcmUgYSBmZXcgaGVhZGVycyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgT3BlbkVtYmVkZGVkCitnY2MtcnVudGltZSB0YXJnZXQgKG9tcC5oLCBzc3AvKi5oKS4gQmVpbmcgaW5zdGFsbGVkIGZyb20gYSByZWNpcGUKK2J1aWx0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgdGhlc2UgYXJlIHdpdGhpbiB0aGUgdGFyZ2V0CitzeXNyb290IGFuZCBub3QgY3Jvc3MvbmF0aXZlc2RrOyB0aHVzIHRoZXkgd2VyZW4ndCBhYmxlIHRvIGJlCitmb3VuZCBieSBnY2Mgd2l0aCB0aGUgZXhpc3Rpbmcgc2VhcmNoIHBhdGhzLiBBZGQgc3VwcG9ydCBmb3IKK3BpY2tpbmcgdXAgdGhlc2UgaGVhZGVycyB1bmRlciB0aGUgc3lzcm9vdCBzdXBwbGllZCBvbiB0aGUgZ2NjCitjb21tYW5kIGxpbmUgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgkyMDE0LTEyLTIzIDExOjU3OjMzLjMyNzg3MzMzMSArMDAwMAorKysrIGIvZ2NjL01ha2VmaWxlLmluCTIwMTUtMDEtMjEgMTE6MzI6MzUuNDQ3MzA1Mzk0ICswMDAwCitAQCAtNTg3LDYgKzU4Nyw3IEBACisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCisgbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKytsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCitAQCAtMjUzNCw2ICsyNTM1LDcgQEAKKyAKKyBQUkVQUk9DRVNTT1JfREVGSU5FUyA9IFwKKyAgIC1ER0NDX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGVcIiBcCisrICAtREdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ9XCIkKGxpYnN1YmRpcl90YXJnZXQpL2luY2x1ZGVcIiBcCisgICAtREZJWEVEX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGUtZml4ZWRcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUj1cIiQoZ2NjX2d4eF9pbmNsdWRlX2RpcilcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVD0kKGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3QpIFwKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0xMyAxNzo0MDoyNi4xMzEwMTI3MjUgKzAwMDAKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0yMSAxMTozMDowOC45Mjg0MjY0OTIgKzAwMDAKK0BAIC01OSw2ICs1OSwxMCBAQAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCBmOTRhZTE3Li5kOThiNDBiIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTM5MCw0ICsxMzkwLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIAorICNlbmRpZiAvKiBHQ0NfSU5TTl9GTEFHU19IICAqLworIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDlmMGI3ODEuLjE3NGZjYTggMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTExODksMTMgKzExODksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMKQEAgLTAsMCArMSwxMjcgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjQuOS4zIgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjQuOS4zIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNC45OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKK1NSQ19VUkkgPSAiXAorICAgICR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMS1pbmRleF9tYWNyby5wYXRjaCBcCisgICAgZmlsZTovLzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgZmlsZTovLzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtc2R0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMi1saWJ0b29sLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0My1jcHAucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUxLWVhYmlzcGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaCBcCisgICAgZmlsZTovLzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaCBcCisgICAgZmlsZTovLzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNmY4MzFiNGQyNTE4NzI3MzZlOGU5Y2MwOTc0NmYzMjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjMzMmIyYTVhMzIxYjU3NTA4YjkwMzEzNTRhODUwM2FmNmZkZmI4NjhiOGMxNzQ4ZDMzMDI4ZDEwMGE4YjY3ZSIKKworUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ODAxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBiZjNkOTZhZTU4ZmExODBiOGI0NjhkMjVkYzJlMDIwOWRhY2EyNzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQ4MDk1MzUuLjFiNzZjOTAgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0MzksNyArNzQzOSw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQ4ZWMxYWEuLjg5ZDFkM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4NzMsNyArMjg3Myw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEzYjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBkMDMwOTczYzg3MmMwMGQ5MTY5MjFkODRkZWVlMGFmMmMwZDM4MDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCAgICA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5OGU5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIGQyZDlkZDc1NmM0MzU2ZDE0ZGQ3YWUwMDM4NTYzNDRjYjRmMzc5ODUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzM1XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgICAgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCAgICA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCAgICA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IDBkMzA5YTUuLmYyZjFlMWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjYzLDUgKzI2MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IGI1ZmQ5ODkuLjNkYTlhNWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggMmQ4ZTk3OC4uMTRlYjA4ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmNWYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIGE1NWM3NTFhNDQ5YzJjYmYwYjNmY2MwN2FhYjFiODZiZjk2NjE1MTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMTE3ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjICAgICAgICB8ICAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDMwMCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA2OTIgKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc1ICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oICAgICAgIHwgICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggMDg3MWE2YS4uMzI2ZDdlZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xOTA1LDYgKzE5MDUsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTIwNjksNiArMjA3Miw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmNDBkZGNmLi5jNTdhNzUxIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1ODIyLDYgKzE1ODIyLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MDc5LDYgKzE2MDgyLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCA1ODBkNzI1Li4zZmU2MWI4IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggMGU2YjFmYy4uNDA1YWVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JiZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSA2YTNlODUwNmExMmMxMjcyOGQ4YjI5OTAxZGVmZDczOGJlNDM3NTdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA0NSArKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICAxNCAtLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICAgNyAtLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgIDcgLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgICA3ICstLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxOCArKystLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAgMyAtLQorIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMCArMzksNiBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCistI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKy0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCistI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsKKy0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKyAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIHsKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwNjg1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gMjI1NTExYTNhZWIxOTNhOTE2YjM5OTlmMGI2NDBhMzkyY2FhNjdjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ1OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMzVdIHVjbGliYy1sb2NhbGUtd2NoYXJfZml4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgfCAgICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8ICAgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1MTEyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDZmZmU3YzQ2ZjUyZDI3ODY0YzNkZjM2NjNlMTZlYzlkZGVlNzFlOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICAgMyArCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDc0ICsrKysrKysrKy0tLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgIDQyICsrKysrKy0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgIDUxICsrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgMzQgKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgIDE4ICsrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MjM4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA5ZjIxNTg0NTE5ODFjZjBhODBjZmFiZGM3OWFlMzFiYjY5NzZhODAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCBjNTFlMDE3Li5hN2JhOGRjIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2ODc3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGUzOTNlMDc2ZjFhYjgyZDI1ZTFhYTA0ZDZlZGVhMjdiNDFkM2ViMDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IGU4NWJkODMuLjZhZjgzOWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI4NTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNzNmNjlkODA2ZTJjOTU2MWE1NDk5NTIyMzQzMWExMDc2Y2ZkNjE2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMzVdIGM5OS1jb21wbGV4LXVnbHktaGFjaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGM1N2E3NTEuLmExMzMzZTIgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTg3MzQsNiArMTg3MzQsOSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSVNPIEM5OSBzdXBwb3J0IHRvIFRSMSBpbiA8Y29tcGxleC5oPi4uLiAiID4mNjsgfQorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDExLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTc5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGIwMzc5NTNlNDAzMTJiNDVhYjg0ZWQwYTNhZDg4MmJiNWU0MTMxMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1MTowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzM1XSBpbmRleF9tYWNybworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlICAgICAgIHwgICAgMyArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK2luZGV4IDM4ZWIxZTguLjE1OGQyMWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK0BAIC01NSw2ICs1NSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAoraW5kZXggZDdiNWNiZC4uYjliM2FjYiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorQEAgLTQ4LDYgKzQ4LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzZWZkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gMTA0ZTRkNjYyMDhmMjcyNmIxNGQyZjVlZWJjZTkwNzAwY2JjODNjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMzVdIGxpYnN0ZGMrKy1uYW1lc3BhY2UKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIHwgICAgNCArKystCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgICB8ICAgIDQgKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDA2NzY1N2EuLmRkNzZhNmMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzIsNyArMzIsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorQEAgLTExNiwzICsxMTcsNCBAQAorIAkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisgCSB9CisgICAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggMTY2NWRkZS4uOTA1YzQzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMzMsNyArMzMsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKK0BAIC03NSwzICs3Niw0IEBACisgICAgICAgZGVsZXRlIF9NX2RhdGE7CisgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICAgICB9CisrfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhmZDUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGVkYzlhY2IxODE4MTBmMjM0YjZiOWY3ZDI4MjBiMGU0ZjZhMWVlYWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDo0OCArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzM1XSBzaC1wcjI0ODM2CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfaWQ9ODk1OTMwNCZmb3J1bV9pZD01MzQ4CitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI0ODM2CistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggZTEyYTE4MC4uMTM1YmJmNSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yMzM3OCw3ICsyMzM3OCw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlYmEzNTc3Li42MzYzYTIxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTMxNDEsNyArMzE0MSw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M0NmZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDUwZTUzNjYwMDViMGY2YWYyNzM3OGUyYTVjM2NiOWY5OTM2YTdlNjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1ODozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE1LzM1XSBhcm06IFVzZSBUQVJHRVRfRU5ESUFOX09QVElPTiBmb3IgZGV0ZXJtaW5pbmcKKyBNVUxUSUxJQl9ERUZBVUxUUworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2NvZmYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYXJtL2NvZmYuaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKK0BAIC0zMiw4ICszMiwxMSBAQAorICNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKE1BU0tfQVBDU19GUkFNRSkKKyAKKyAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCisrI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNlbmRpZgorICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKyAgeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAjZW5kaWYKKyAMCisgLyogVGhpcyBpcyBDT0ZGLCBidXQgcHJlZmVyIHN0YWJzLiAgKi8KK0luZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FybS9lbGYuaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9lbGYuaAorQEAgLTExNiw4ICsxMTYsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCisrI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNlbmRpZgorICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9CisrICB7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9CisgI2VuZGlmCisgDAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX1NUQVJUX0FQUF9PRkYgdHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzVlZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKQEAgLTAsMCArMSwxOTAgQEAKK0Zyb20gMTYwMzk3ZWYzYzMzMzEwOTlhZjAyOGYxYjhkM2UwODViMDdkODhhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU5OjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMzVdIGdjYzogcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjogY29kZXNvdXJjZXJ5XQorLS0tCisgZ2NjL01ha2VmaWxlLmluICAgICB8ICAgIDIgKy0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgICAgNCArKysrCisgZ2NjL2NvbmZpZy5pbiAgICAgICB8ICAgIDYgKysrKysrCisgZ2NjL2NvbmZpZ3VyZSAgICAgICB8ICAgMjAgKysrKysrKysrKysrKysrKysrLS0KKyBnY2MvY29uZmlndXJlLmFjICAgIHwgICAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKysKKyBnY2MvaW5jcGF0aC5jICAgICAgIHwgICAxOSArKysrKysrKysrKysrKysrKysrCisgOCBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29tbW9uLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29tbW9uLm9wdAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbW1vbi5vcHQKK0BAIC02MDMsNiArNjAzLDEwIEBAIFdwZWRhbnRpYworIENvbW1vbiBWYXIocGVkYW50aWMpIFdhcm5pbmcKKyBJc3N1ZSB3YXJuaW5ncyBuZWVkZWQgZm9yIHN0cmljdCBjb21wbGlhbmNlIHRvIHRoZSBzdGFuZGFyZAorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcuaW4KKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcuaW4KK0BAIC0xMzgsNiArMTM4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZ3VyZQorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZQorQEAgLTkyOCw2ICs5MjgsNyBAQCB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV9saW5rX211dGV4CisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2hvc3Rfc2hhcmVkCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKK0BAIC0xNjQ4LDYgKzE2NDksOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWVuYWJsZS1ob3N0LXNoYXJlZCAgICBidWlsZCBob3N0IGNvZGUgYXMgc2hhcmVkIGxpYnJhcmllcworICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKK0BAIC0yNzcwMiw2ICsyNzcwNSwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpCisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUzNjYsNiArNTM2NiwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1sCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjYwLDYgKzI2MCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgQGdvbAorIC1Xc2lnbi1jb21wYXJlICAtV3NpZ24tY29udmVyc2lvbiAtV2Zsb2F0LWNvbnZlcnNpb24gQGdvbAorQEAgLTQyMzAsNiArNDIzMSwxNCBAQCBoZWFkZXJzLS0tZm9yIHRoYXQsIEBvcHRpb257LVd1bmtub3duLXByCisgIGZvciBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sKKyAgdG8gYmUgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9nY2MuYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCitAQCAtNzY0LDYgKzc2NCw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9XAorICAgICAlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fSAiIFZUQUJMRV9WRVJJRklDQVRJT05fU1BFQyAiIFwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgJXtmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAorICAgICAle2ZnbnUtdG06JTppbmNsdWRlKGxpYml0bS5zcGVjKSUobGlua19pdG0pfVwKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9pbmNwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2luY3BhdGguYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2luY3BhdGguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4Miw2ICszODMsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3JvbworIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGU5OWM5Yzk3MjY2ZDZkM2U4Y2FjNzk4YWE5MTQwODI1MGM0ZDYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDE3LzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggY2Q0MWM3OC4uZWFjNGE5MiAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTMsNyArMzkzLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSA1NjIwN2ZhMjkyM2U4ZWRmNzc0ZTk4ZmZhYzgyNjY2MDkxMDc2YmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAxYjc2YzkwLi5lNGRjZTdjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzcyLDYgKzY3NzIsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4YmUwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK0Zyb20gMThmZGU1NzQwYjA5MzI0ZGZiOWNmNDFlOTg0OTY3MjU3M2ZmNWZhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8ICAgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICAgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDEwICsyNiw5IEBACisgIyBNVUxUSUxJQl9PU0RJUk5BTUVTIGFjY29yZGluZyB0byB3aGF0IGlzIGZvdW5kIG9uIHRoZSB0YXJnZXQuCisgCisgTVVMVElMSUJfT1BUSU9OUyAgICA6PSBtNjQvbTMyCistTVVMVElMSUJfRElSTkFNRVMgICA6PSA2NCAzMgorK01VTFRJTElCX0RJUk5BTUVTICAgOj0gLiAuCisgTVVMVElMSUJfRVhUUkFfT1BUUyA6PSAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTIDo9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGM2NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYy1saW51eC1nbnUpCisrTVVMVElMSUJfT1NESVJOQU1FUyA6PSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorIAorIHJzNjAwMC1saW51eC5vOiAkKHNyY2RpcikvY29uZmlnL3JzNjAwMC9yczYwMDAtbGludXguYworIAkkKENPTVBJTEUpICQ8CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjQ2NjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIDMwN2M4ZmYzZWY2NjZiN2JkNWFjNzMzODYzZjJmYmIyN2E5ZDUyMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAorU3ViamVjdDogW1BBVENIIDIwLzM1XSBvcHRpb25hbCBsaWJzdGRjCisKK2djYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKword2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKword2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKworb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKK2RyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgorCitBICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCitkbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgorCitSUCAyOS82LzEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgICAgNCArKysrCisgZ2NjL2NwL2crK3NwZWMuYyAgICB8ICAgIDEgKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKystLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTEzMjMsNiArMTMyMywxMCBAQCBub3N0ZGluYysrCisgQysrIE9iakMrKworIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKworIAorK25vc3RkbGliKysKKytEcml2ZXIKKytEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5CisrCisgbworIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQorIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY3AvZysrc3BlYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jcC9nKytzcGVjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkXworICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0xOTMsNiArMTkzLDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdnRhYmxlLXZlcmlmeT1AdmFye3N0ZHxwcmVpbml0fG5vbmV9IEBnb2wKKyAtZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAorKy1ub3N0ZGxpYisrIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaSAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ1Nyw3ICs0NTgsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLW5vc3RhcnRmaWxlcyAgLW5vZGVmYXVsdGxpYnMgIC1ub3N0ZGxpYiAtcGllIC1yZHluYW1pYyBAZ29sCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9fQorIAorQEAgLTEwMjg1LDYgKzEwMjg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW4KKyBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKKyBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisgCisrQGl0ZW0gLW5vc3RkbGliKysKKytAb3BpbmRleCBub3N0ZGxpYisrCisrRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCisrT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisrCisgQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9CisgQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworQEAgLTc3Miw2ICs3NzIsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCisgICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAorICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCisrICAgICV7IW5vc3RkbGliKys6fVwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2M2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAwMDQ2OTZlMDU0YWU5ZGM3MWQ1MTJjYzc1NWNjYzQwNzRmYzYyYjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggYjY1ZDIxZC4uYmRhYjQ1YSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNTgyOSwxMyArMjU4MjksNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlMjI2Yjg1Li41ZjVjOTA5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQwOTksMTMgKzQwOTksNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gN2Y1YzlkY2M3MWM4YjgzYTBiNTU5NjI2NmNjNGJkZjA5MzZlOGUwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMzVdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA0Nzc3NTJmLi41MTA2MmFhIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00MDk4LDYgKzQwOTgsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZTllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSBmN2Q0OWNhNDQ1ZTYwZmFhMWI1MjU2YzZiNGY5NmMxZWU1YzBlMzUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZQorIGluICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKK29jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Cit3b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KK3RtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJworCitTbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgICAgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IGQxYWIyMmYuLjE1ZmU0YjYgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ4Myw3ICs0ODMsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDUzOTliMmIuLjYwYTA0YmQgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE2MzEsOCArMTE2MzEsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBmODdjM2I2Li40NjBlMGQ5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3NDAsOCArMTc0MCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCBjNzE0NmVkLi5iMTUzZjQ1IDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDYsNyArMTA2LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhY2Y3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGUwZDE1ZjRmOGJmMjhjMzUxYjkyMTVjYTM3ZjFjYWEyNGRmMGUxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxODo1NCArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzM1XSBQUiB0YXJnZXQvMzIyMTkKKworKiB2YXJhc20uYyAoZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEpOiBXZWFrIGRhdGEgaXMgbm90IGxvY2FsLgorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyB8ICAgMTQgKysrKysrKysrKysrKysKKyBnY2MvdmFyYXNtLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsrKystLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy92YXJhc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvdmFyYXNtLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy92YXJhc20uYworQEAgLTY3NzEsNiArNjc3MSwxMCBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsCisgICAvKiBTdGF0aWMgdmFyaWFibGVzIGFyZSBhbHdheXMgbG9jYWwuICAqLworICAgZWxzZSBpZiAoISBUUkVFX1BVQkxJQyAoZXhwKSkKKyAgICAgbG9jYWxfcCA9IHRydWU7CisrICAvKiBoaWRkZW4gd2VhayBjYW4ndCBiZSBvdmVycmlkZGVuIGJ5IHNvbWV0aGluZyBub24tbG9jYWwsIGFsbAorKyAgICAgdGhhdCBpcyBwb3NzaWJsZSBpcyB0aGF0IGl0IGlzIG5vdCBkZWZpbmVkIGF0IGFsbC4gKi8KKysgIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKSkKKysgICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogQSB2YXJpYWJsZSBpcyBsb2NhbCBpZiB0aGUgdXNlciBoYXMgc2FpZCBleHBsaWNpdGx5IHRoYXQgaXQgd2lsbAorICAgICAgYmUuICAqLworICAgZWxzZSBpZiAoKERFQ0xfVklTSUJJTElUWV9TUEVDSUZJRUQgKGV4cCkKK0BAIC02Nzg0LDExICs2Nzg4LDYgQEAgZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEgKGNvbnN0X3RyZWUgZXhwLAorICAgICAgbG9jYWwuICAqLworICAgZWxzZSBpZiAoREVDTF9WSVNJQklMSVRZIChleHApICE9IFZJU0lCSUxJVFlfREVGQVVMVCkKKyAgICAgbG9jYWxfcCA9IHRydWU7CistICAvKiBEZWZhdWx0IHZpc2liaWxpdHkgd2VhayBkYXRhIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc3Ryb25nIHN5bWJvbAorLSAgICAgaW4gYW5vdGhlciBtb2R1bGUgYW5kIHNvIGFyZSBub3QgbG9jYWwuICAqLworLSAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApCistCSAgICYmICFyZXNvbHZlZF9sb2NhbGx5KQorLSAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBJZiBQSUMsIHRoZW4gYXNzdW1lIHRoYXQgYW55IGdsb2JhbCBuYW1lIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisgICAgICBzeW1ib2xzIHJlc29sdmVkIGZyb20gb3RoZXIgbW9kdWxlcy4gICovCisgICBlbHNlIGlmIChzaGxpYikKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMi5jCitAQCAtMCwwICsxLDEzIEBACisrLyogUFIgdGFyZ2V0LzMyMjE5ICovCisrLyogeyBkZy1kbyBydW4gfSAqLworKy8qIHsgZGctcmVxdWlyZS12aXNpYmlsaXR5ICIiIH0gKi8KKysvKiB7IGRnLW9wdGlvbnMgIi1mUElDIiB7IHRhcmdldCBmcGljIH0gfSAqLworKworK2V4dGVybiB2b2lkIGYoKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLHZpc2liaWxpdHkoImhpZGRlbiIpKSk7CisrZXh0ZXJuIGludCBwdXRzKCBjaGFyIGNvbnN0KiApOworK2ludCBtYWluKCkKKyt7CisrICBpZiAoZikKKysgICAgZigpOworKyAgcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBhZjhhNTZlYTRlMTdiMjkwOWVmZjJjNTc3MDRhYjQzZWYyNGYyOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAgICAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCA4Mzg1ZTk2Li5iOGY3YTkyIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjcwNCw3ICsxMjcwNCw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDdkOTdmZWQuLjNmOWY0ODQgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gMDhjMjM5ODQ0NWU2Y2FjMjgyNDg4ZjY0YWU2YmYyOWNiY2Q4ZGIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAgIDEwICsrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKK2luZGV4IDE0MjVkZjYuLmQxOGUzY2IgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNDIwOCwxNyArNDIwOCwxOSBAQCB2b2lkIGZvbyAoKQorIH0KKyAKKyBfQUNFT0YKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKKytpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKyAgIGZpCisgZmkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisgcm0gLWYgY29uZnRlc3QqCisgCisgZmkKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGI3YWJhNS4uYzdjOTY0NCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC0yMTYsMTYgKzIxNiwxNCBAQCB2b2lkIGZvbyAoKQorICAgYmFyKCk7CisgfQorIF0pXSkKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCistICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKysgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworLSAgZmldKQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKysgIGZpCisrZmkKKyBybSAtZiBjb25mdGVzdCoKKyBdKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGEwZjliZDA5YzgxNmFkMjllY2Y3YzI5ZDZjMjdmN2RmOTc3MTAzNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDI3LzM1XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCisKK0N1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQorcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgorcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCitwZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgorCitUaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAorLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KKworW1lPQ1RPICMyMDc0XQorCitSUCAyMDEyLzA0LzEzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NwL2xhbmctc3BlY3MuaCB8ICAgIDIgKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK2luZGV4IGEwMDFjM2UuLjFhYWUxZTQgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1MTA2MmFhLi5jZjZiOTllIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMDQyLDcgKzEwNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQorICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDMwMWUxOGQ0NzExZGI1OTI1ZTc2N2ZhZDA4ZGZmYTljZmUwYTJmMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCAxYTBiZTUwLi45ODljMmZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgbWlwcyotbXRpLWxpbnV4KikKKyBtaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGxpbnV4LmggZ2xpYmMtc3RkaW50LmggJHt0bV9maWxlfSBtaXBzL2dudS11c2VyLmggbWlwcy9nbnUtdXNlcjY0LmggbWlwcy9saW51eDY0LmggbWlwcy9saW51eC1jb21tb24uaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3QtbGludXg2NCIKKy0JdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV9OMzIiCisrCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfNjQiCisgCWNhc2UgJHt0YXJnZXR9IGluCisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWQyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjI4IEBACitGcm9tIDI5ZDEyMzQ0ZmI2ODJhMDUzZGU1M2ViMDhiOTU3MDRjZjNiNjdhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICAgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oICAgIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjMsOCArMjMsOCBAQAorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNTcsNyArNTcsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTIwLDQgKzIwLDQgQEAKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjcsNiArMjcsNiBAQAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTE4LDggKzE4LDggQEAKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjMsMjAgKzIzLDIwIEBACisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliNjQvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWI2NC9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliMzIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliL2xkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkNjQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wfSIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYjMyL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0zNjcsMTQgKzM2NywxNCBAQAorICN1bmRlZglMSU5LX09TX0RFRkFVTFRfU1BFQworICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorICNpZmRlZiBMSU5VWDY0X0RFRkFVTFRfQUJJX0VMRnYyCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6L2xpYjY0L2xkNjQuc28uMTs6L2xpYjY0L2xkNjQuc28uMn0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjJ9IgorICNlbHNlCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjF9IgorICNlbmRpZgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc2gvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc2gvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC00Myw3ICs0Myw3IEBACisgCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICJfbGludXgiCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC04Myw3ICs4Myw3IEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICItbSBlbGYzMl9zcGFyYyAle3NoYXJlZDotc2hhcmVkfSBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC05Miw4ICs5Miw4IEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTczLDEwICs3MywxMCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGMxODE2YzE2MDE1NmY5OWMzNGU2YTBhMDMxMWJiMDIxOTMyNjgwNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggMjMyMDQ5Ny4uODU2MmE2MiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDYyNyw3ICs0NjI3LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGI4NTI2NWJjOTRlYzFiZWFmMWQzYjY5N2MwM2RiNjI5OTE1NTM0NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDNjNTUwYTYuLjAxYzc2MjYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY4MTIsMTIgKzI2ODEyLDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMzYwMWFiNi4uMDZlNTAxZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00Nzc5LDE1ICs0Nzc5LDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggNDk1M2M5Zi4uNTNhMTE0NSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMDU3OCwxMSArMjA1NzgsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA3M2Q0MzBhLi5mMjEzNWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIxMSw3ICsyMTEsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNmM3MTVmY2ZhMjYyYWRhZGNhODFjNjhhMWYzZjY5YWEzMTg3YTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi40NmY0N2MyIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzZjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOTdlNDU5MWMyMDMxMDQyNWU3YWNhMGU2NzEyYThkOTQ4MGU3NzQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQyBFQUJJX0xJTktfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjlmODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGZjNWU0YmVhZWE4NTZhMmI0ODZjNzcwYWQzYWRkYzBmNWJiMzEwMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAorU3ViamVjdDogW1BBVENIIDM0LzM1XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgorIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorCitVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KK3NvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA4YmMwYzk4Li4zY2QwODE3IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNTE5LDEwICsxMTUxOSwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTExNTMzLDYgKzExNTQzLDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDVlNWU4NGYuLjQxNWE2ZGYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTcwMCwxMCArMTcwMCwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE3MTQsNiArMTcyNCwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5NjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjE5MDJhOTAgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmODY0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQzLWNwcC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4gYnVpbGRpbmcgCitnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQgaW4KK2J1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyICBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZSB1c2luZyAKK3RoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyIGhlYWRlcnMgYXJlIAordmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcgaW50byAKK2NvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZCBmYWlsdXJlcyAKK3JlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgorCitUaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aGVuCit1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZSB0aGUgdmVyc2lvbgord2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8gYXZvaWQgdGhlIAorcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDMtMzAgMTE6MjU6MDMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL01ha2VmaWxlLmluCTIwMTMtMDgtMTMgMTI6MDM6MTcuMTUxOTg4ODgyICswMDAwCitAQCAtMTQ5LDYgKzE0OSw3IEBACisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg3NjFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2dlbmd0eXBlIGlzIGdlbmVyYXRlZCBmb3IgYm90aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgdGFyZ2V0LiAtREdFTkVSQVRPUl9GSUxFCit3YXMgYWRkZWQgaW4gdGhlIHBhdGNoIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDEyLTA3L21zZzAwMjczLmh0bWwKK2FuZCB3YXMgYXBwbGllZCB0byBib3RoIHZlcnNpb25zIG9mIGdlbmd0eXBlLgorCitVbmZvcnR1bmF0ZWx5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZsYWcgdHJpZ2dlcnMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKGJjb25maWcuaCkgCit0byBiZSBpbmNsdWRlZCBmb3IgdGhlIHRhcmdldCBidWlsZCBvZiBnZW5ndHlwZS4gQ29tcGlsaW5nIGdlbmd0eXBlIHdpdGggdGhlIHRhcmdldCAKK2NvbXBpbGVyIGFuZCBiY29uZmlnLmggY2FuIHJlc3VsdCBpbiBlcnJvcnMgaWYgdGhlIGJ1aWxkIGFuZCB0YXJnZXQgc3lzdGVtcyBhcmUgCitkaXNzaW1pbGFyLiBBbiBleGFtcGxlIGNhc2UgdGhpcyBmYWlscyBpcyBjcm9zcyBjb21waWxpbmcgZ2NjIG9uIGxpbnV4IGZvciBhIGRhcndpbiAKK3RhcmdldCBzeXN0ZW06CisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6MjU6MDoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOiBJbiBmdW5jdGlvbiAndm9pZCBwYXJzZV9lcnJvcihjb25zdCBjaGFyKiwgLi4uKSc6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2Mvc3lzdGVtLmg6OTM6NTM6IGVycm9yOiAnZnB1dGNfdW5sb2NrZWQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorfCAgIyAgZGVmaW5lIGZwdXRjKEMsIFN0cmVhbSkgZnB1dGNfdW5sb2NrZWQgKEMsIFN0cmVhbSkKKword2hpY2ggb2NjdXJzIHNpbmNlIGF1dG8tYnVpbGQuaCBhbmQgYXV0by1ob3N0LmggaGF2ZSBkaWZmZXJuZXQgdmFsdWVzIG9mCitIQVZFX0ZQVVRDX1VOTE9DS0VEOgorCisjZGVmaW5lIEhBVkVfRlBVVENfVU5MT0NLRUQgMQorLyogI3VuZGVmIEhBVkVfRlBVVFNfVU5MT0NLRUQgKi8KKworVGhlIG9idmlvdXMgZml4IGlzIHRvIG9ubHkgaW5jbHVkZSB0aGUgZmxhZyBvbiBidWlsZC8gdGFyZ2V0cyB3aGljaCB0aGlzIHBhdGNoIGRvZXMsIGhvd2V2ZXIgCit0aGlzIGFsc28gbGVhZHMgdG8gY29tcGlsZSBlcnJvcnMgZHVlIHRvIGNvbnN0X3RyZWUgYmVpbmcgdW5kZWZpbmVkIGJ1dCB1c2VkIGluIGRvdWJsZV9pbnQuaAorCitJIGFkZGVkIGEgR0VORVJBVE9SX0ZJTEUyIGZsYWcgdG8gd29ya2Fyb3VuZCB0aG9zZSBpbiB0aGUgCit0YXJnZXQgY2FzZSBhbmQgYWxsb3cgdGhlIGJ1aWxkIHRvIHN1Y2NlZWQuCisKK09ubHkgdGhlIGJ1aWxkL2dlbmd0eXBlcyBzaG91bGQgaGF2ZSB0aGUgLURHRU5FUkFUT1JfRklMRSAKKworUlAgMjIvOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM2Ljg0NDAxNDQyNCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNy43ODQwMTQ0MDIgKzAwMDAKK0BAIC0zOTAzLDI3ICszOTAzLDI5IEBACisgCisgZ2VuZ3R5cGUtbGV4Lm8gYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gOiBnZW5ndHlwZS1sZXguYyBnZW5ndHlwZS5oICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtbGV4Lm86ICQoQ09ORklHX0gpICQoQkNPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1sZXgubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtcGFyc2UubyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vIDogZ2VuZ3R5cGUtcGFyc2UuYyBnZW5ndHlwZS5oIFwKKyAgICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLXN0YXRlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLm8gYnVpbGQvZ2VuZ3R5cGUubyA6IGdlbmd0eXBlLmMgJChTWVNURU1fSCkgZ2VuZ3R5cGUuaCAJXAorICAgcnRsLmRlZiBpbnNuLW5vdGVzLmRlZiBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSBcCisgICAkKE9CU1RBQ0tfSCkgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBidWlsZC9nZW5tZGRlcHMubzogZ2VubWRkZXBzLmMgJChCQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oCVwKK0BAIC0zOTg4LDcgKzM5OTAsNyBAQAorICMgYW55IHN5c3RlbSBoZWFkZXIgaXMgaW5jbHVkZWQuCisgZ2VuZ3R5cGUtbGV4LmMgOiBnZW5ndHlwZS1sZXgubAorIAktJChGTEVYKSAkKEZMRVhGTEFHUykgLW8kQCAkPCAmJiB7IFwKKy0JICBlY2hvICcjaW5jbHVkZSAiYmNvbmZpZy5oIicgPiAkQC50bXA7IFwKKysJICBlY2hvICcnID4gJEAudG1wOyBcCisgCSAgY2F0ICRAID4+ICRALnRtcDsgXAorIAkgIG12ICRALnRtcCAkQDsgXAorIAl9CitJbmRleDogZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvZG91YmxlLWludC5oCTIwMTMtMDEtMzAgMTE6MDQ6MzAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgJMjAxMy0wOC0xOSAxMTo0MTo1MS41NjQwMTI3MTkgKzAwMDAKK0BAIC00NDgsMTAgKzQ0OCwxMiBAQAorIAorIAorICNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKysjaWZuZGVmIEdFTkVSQVRPUl9GSUxFMgorIC8qIENvbnZlcnNpb24gdG8gYW5kIGZyb20gR01QIGludGVnZXIgcmVwcmVzZW50YXRpb25zLiAgKi8KKyAKKyB2b2lkIG1wel9zZXRfZG91YmxlX2ludCAobXB6X3QsIGRvdWJsZV9pbnQsIGJvb2wpOworIGRvdWJsZV9pbnQgbXB6X2dldF9kb3VibGVfaW50IChjb25zdF90cmVlLCBtcHpfdCwgYm9vbCk7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2VuZGlmIC8qIERPVUJMRV9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTRmNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorZ2NjIDQuOCB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHNpbmNlIHRoZSAqLlBwbyBmaWxlcworZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQIAorMjAxMi8wOS8yMgorCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTAxLTE0IDE4OjE2OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wOS0yMiAxMDozODoxOC45MDQwNjQ3NTAgKzAwMDAKK0BAIC0xMDAsNyArMTAwLDggQEAKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0gCisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDUtMzEgMDk6MDk6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA5LTIyIDEwOjQwOjQyLjUyMDA1OTkxNyArMDAwMAorQEAgLTI5OCw3ICsyOTgsOCBAQAorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPSAKKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmZDU1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorV2hlbiBjb21waWxpbmcgYSBwcm9qZWN0IHVzaW5nIC1mcmVwbywgLnJwbyBmaWxlcyBhcmUgd3JpdHRlbiBhbG9uZ3NpZGUKK3RoZSAubyBmaWxlLCB0aGUgc3ltYm9scyBlaXRoZXIgaGF2ZSBPIG9yIEMgYWdhaW5zdCB0aGVtLiBEdXJpbmcgZmluYWwgbGlua2luZywKK3RoZSBvYmplY3RzIGNhbiBiZSByZWNvbXBpbGVkIHdpdGggc29tZSBvZiB0aGUgZW50cmllcyB0d2Vha2VkL2Nob3NlbiBieSB0aGUgCit0bGluay5jIGNvZGUgKHZpc2libGUgd2l0aCBUTElOS19WRVJCT1NFPTMpLCBpdCBkb2VzIHRoaXMgYnkgY2hhbmdpbmcgTyAtPiBDCitpbiB0aGUgLnJwbyBmaWxlcy4KKworTXkgdGVzdHMgc2hvd2VkIHRoYXQgaW5pdF9yZXBvIChjcC9yZXBvLmMpIHdhcyBjb3JyZWN0bHkgY2FsbGluZyAKK0lERU5USUZJRVJfUkVQT19DSE9TRU4gYWdhaW5zdCB0aGUgcmlnaHQgaWRlbnRpZmVycyBhbmQgc2V0dGluZyB0aGUKK2Nob3NlbiBiaXQuCisKK0J5IHRoZSB0aW1lIGZpbmlzaF9yZXBvKCkgb3IgZW1pdF9yZXBvX3AoKSB3ZXJlIGNhbGxlZCwgdGhlIHBvaW50ZXIgcmV0dXJuZWQKK2J5IGdldF9pZGVudGlmaWVyKCkgZm9yIHRoZSBzeW1ib2wgbWFya2VkIGR1cmluZyBpbml0X3JlcG8gaGFkIGNoYW5nZWQgYW5kCit0aGUgY2hvc2VuIGJpdCB3YXMgbm8gbG9uZ2VyIHNldC4gVGhpcyBsZWFkIHRvIGxpbmtpbmcgYnVncyBsaWtlOgorCitjb2xsZWN0OiByZWxpbmtpbmcKK2NvbGxlY3QyOiBlcnJvcjogJ19aTks2c3Vkb2t1NUNsZWFySU5TXzhTZXF1ZW5jZUVFY2xFUlMxXycgd2FzIGFzc2lnbmVkIHRvICdib2FyZC5ycG8nLCBidXQgd2FzIG5vdCBkZWZpbmVkIGR1cmluZyByZWNvbXBpbGF0aW9uLCBvciB2aWNlIHZlcnNhCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBnZXR0aW5nIGNhbGxlZCBiZWZvcmUKK2ZpbmlzaF9yZXBvKCkgaXMgY2FsbGVkIGFuZCBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyBpcyBzZXQgdG8gZmFsc2UgCitzbyB0aGUgaWRlbnRpZmllcnMgYXJlIG5vdCBwcmVzZXJ2ZWQuIFRoZXkgYXJlIHJlY3JlYXRlZCBidXQgdGhlIAorY2hvc2VuIGJpdHMgZ2V0IHdpcGVkIG91dCB3aGljaCBpcyB3aHkgdGhlIHBvaW50ZXIgY2hhbmdlcyBhbmQgdGhlIAorY2hvc2VuIGJpdCBpcyBub3Qgc2V0LgorCitUaGUgZml4IGlzIHRvIGNoYW5nZSBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyAqYWZ0ZXIqIHRoZSBmaW5pc2hfcmVwbyAKK2NhbGxzIGFyZSBtYWRlLgorCitSZXByb2R1Y3Rpb24gaXMgdHJpY2t5IHNpbmNlIHlvdSBuZWVkIHRvIHRyaWdnZXIgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGF0CitqdXN0IHRoZSByaWdodCBtb21lbnQuCisKK1JQIDIwMTMvMTAvOQorCitbWU9DVE8gIzUxMzNdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy90b3BsZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy90b3BsZXYuYwkyMDEzLTAzLTI4IDA4OjI5OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvdG9wbGV2LmMJMjAxMy0xMC0wOSAyMDoyNzoxNy4wODkyMjgwMjMgKzAwMDAKK0BAIC01NTEsMTEgKzU1MSwxMSBAQAorICAgaWYgKGZsYWdfc3ludGF4X29ubHkgfHwgZmxhZ193cGEpCisgICAgIHJldHVybjsKKyAKKy0gIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CistCisgICAvKiBUaGlzIG11c3QgYWxzbyBjYWxsIGZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQuICAqLworICAgbGFuZ19ob29rcy5kZWNscy5maW5hbF93cml0ZV9nbG9iYWxzICgpOworIAorKyAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKysKKyAgIGlmIChzZWVuX2Vycm9yICgpKQorICAgICByZXR1cm47CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThmOGZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDllMGUxOWVhYzI1NjJmNzM4NTg2MDJmZTI2ZTIwNDRlYjhiMjBjNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0CisKK1doZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwgCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGNiN2E5NGUuLmQzOTJjMmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDY4LDcgKzIwNjgsMTIgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1ydGVtcyB0LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKKysJY2FzZSAke3RhcmdldH0gaW4KKysJICAgIHBvd2VycGMqLSotbGludXgqc3BlKiB8IHBvd2VycGMqLSotbGludXgqYWx0aXZlYyopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiIDs7CisrCSAgICAqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIiA7OworKwllc2FjCisgCWV4dHJhX29wdGlvbnM9IiR7ZXh0cmFfb3B0aW9uc30gcnM2MDAwL3N5c3Y0Lm9wdCIKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNvcyAke3RtYWtlX2ZpbGV9IHJzNjAwMC90LXBwY2NvbW0iCisgCWNhc2UgJHt0YXJnZXR9IGluCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYWQ2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gY2I5YjFjMDQxYjYzNGE0YzEyODg5NmUzZDNlZWQ0MDgyNjA4Yzc5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMgTWF5IDIwMTQgMTk6MjU6MTcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICIyMDEzLTA1LTIxICBDaHJpc3RpYW4gQnJ1ZWwgCisgPGNocmlzdGlhbi5icnVlbEBzdC5jb20+IgorCitUaGlzIHJldmVydHMgY29tbWl0IDM5ODMwMzZhOGI2YjI3MTBjNTc3NzcxOTRmMjE1MDc4MTlhNzM1NTMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0NvbmZsaWN0czoKKwlnY2MvQ2hhbmdlTG9nCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgfCAyMTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyBnY2MvZHdhcmYyb3V0LmMgfCAgMzMgKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMzQgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZHdhcmYyb3V0LmMgYi9nY2MvZHdhcmYyb3V0LmMKK2luZGV4IDEyNzIzMjYuLjZhYzJiMjggMTAwNjQ0CistLS0gYS9nY2MvZHdhcmYyb3V0LmMKKysrKyBiL2djYy9kd2FyZjJvdXQuYworQEAgLTEwODcwLDI3ICsxMDg3MCwyNSBAQCBzdGF0aWMgZHdfbG9jX2Rlc2NyX3JlZgorIG11bHRpcGxlX3JlZ19sb2NfZGVzY3JpcHRvciAocnR4IHJ0bCwgcnR4IHJlZ3MsCisgCQkJICAgICBlbnVtIHZhcl9pbml0X3N0YXR1cyBpbml0aWFsaXplZCkKKyB7CistICBpbnQgc2l6ZSwgaTsKKysgIGludCBucmVncywgc2l6ZSwgaTsKKysgIHVuc2lnbmVkIHJlZzsKKyAgIGR3X2xvY19kZXNjcl9yZWYgbG9jX3Jlc3VsdCA9IE5VTEw7CisgCistICAvKiBTaW1wbGUsIGNvbnRpZ3VvdXMgcmVnaXN0ZXJzLiAgKi8KKy0gIGlmIChyZWdzID09IE5VTExfUlRYKQorLSAgICB7CistICAgICAgdW5zaWduZWQgcmVnID0gUkVHTk8gKHJ0bCk7CistICAgICAgaW50IG5yZWdzOworLQorKyAgcmVnID0gUkVHTk8gKHJ0bCk7CisgI2lmZGVmIExFQUZfUkVHX1JFTUFQCistICAgICAgaWYgKGNydGwtPnVzZXNfb25seV9sZWFmX3JlZ3MpCistCXsKKy0JICBpbnQgbGVhZl9yZWcgPSBMRUFGX1JFR19SRU1BUCAocmVnKTsKKy0JICBpZiAobGVhZl9yZWcgIT0gLTEpCistCSAgICByZWcgPSAodW5zaWduZWQpIGxlYWZfcmVnOworLQl9CisrICBpZiAoY3J0bC0+dXNlc19vbmx5X2xlYWZfcmVncykKKysgICAgeworKyAgICAgIGludCBsZWFmX3JlZyA9IExFQUZfUkVHX1JFTUFQIChyZWcpOworKyAgICAgIGlmIChsZWFmX3JlZyAhPSAtMSkKKysJcmVnID0gKHVuc2lnbmVkKSBsZWFmX3JlZzsKKysgICAgfQorICNlbmRpZgorKyAgZ2NjX2Fzc2VydCAoKHVuc2lnbmVkKSBEQlhfUkVHSVNURVJfTlVNQkVSIChyZWcpID09IGRieF9yZWdfbnVtYmVyIChydGwpKTsKKysgIG5yZWdzID0gaGFyZF9yZWdub19ucmVnc1tSRUdOTyAocnRsKV1bR0VUX01PREUgKHJ0bCldOworIAorLSAgICAgIGdjY19hc3NlcnQgKCh1bnNpZ25lZCkgREJYX1JFR0lTVEVSX05VTUJFUiAocmVnKSA9PSBkYnhfcmVnX251bWJlciAocnRsKSk7CistICAgICAgbnJlZ3MgPSBoYXJkX3JlZ25vX25yZWdzW1JFR05PIChydGwpXVtHRVRfTU9ERSAocnRsKV07CistCisrICAvKiBTaW1wbGUsIGNvbnRpZ3VvdXMgcmVnaXN0ZXJzLiAgKi8KKysgIGlmIChyZWdzID09IE5VTExfUlRYKQorKyAgICB7CisgICAgICAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChydGwpKSAvIG5yZWdzOworIAorICAgICAgIGxvY19yZXN1bHQgPSBOVUxMOworQEAgLTEwOTE4LDkgKzEwOTE2LDEwIEBAIG11bHRpcGxlX3JlZ19sb2NfZGVzY3JpcHRvciAocnR4IHJ0bCwgcnR4IHJlZ3MsCisgICAgIHsKKyAgICAgICBkd19sb2NfZGVzY3JfcmVmIHQ7CisgCistICAgICAgdCA9IG9uZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKGRieF9yZWdfbnVtYmVyIChYVkVDRVhQIChyZWdzLCAwLCBpKSksCisrICAgICAgdCA9IG9uZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKFJFR05PIChYVkVDRVhQIChyZWdzLCAwLCBpKSksCisgCQkJCSAgVkFSX0lOSVRfU1RBVFVTX0lOSVRJQUxJWkVEKTsKKyAgICAgICBhZGRfbG9jX2Rlc2NyICgmbG9jX3Jlc3VsdCwgdCk7CisrICAgICAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChYVkVDRVhQIChyZWdzLCAwLCAwKSkpOworICAgICAgIGFkZF9sb2NfZGVzY3Jfb3BfcGllY2UgKCZsb2NfcmVzdWx0LCBzaXplKTsKKyAgICAgfQorIAorLS0gCisxLjkuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MS1lYWJpc3BlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUzODkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGFrZW4gZnJvbSBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wNC9tc2cwMjA2NC5odG1sCisKKzIwMTQtMDQtMzAgIENlc2FyIFBoaWxpcHBpZGlzICA8Y2VzYXJAY29kZXNvdXJjZXJ5LmNvbT4KKworCWdjYy8KKwkqIGR3YXJmMmNmaS5jIChkd2ZfcmVnbm8pOiBEb24ndCBhc3NlcnQgcmVnIGlzIGEgcHNldWRvCisJcmVnaXN0ZXIuCisJCisKK2RpZmYgLS1naXQgYS9nY2MvZHdhcmYyY2ZpLmMgYi9nY2MvZHdhcmYyY2ZpLmMKK2luZGV4IDQxODA4OTAuLjQwZWYwZTIgMTAwNjQ0CistLS0gYS9nY2MvZHdhcmYyY2ZpLmMKKysrKyBiL2djYy9kd2FyZjJjZmkuYworQEAgLTkwNiw3ICs5MDYsNiBAQCBub3RpY2VfZWhfdGhyb3cgKHJ0eCBpbnNuKQorIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQKKyBkd2ZfcmVnbm8gKGNvbnN0X3J0eCByZWcpCisgeworLSAgZ2NjX2Fzc2VydCAoUkVHTk8gKHJlZykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpOworICAgcmV0dXJuIERXQVJGX0ZSQU1FX1JFR05VTSAoUkVHTk8gKHJlZykpOworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTU4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoCkBAIC0wLDAgKzEsMTM4IEBACitGcm9tIGQ2MjYyOTdlODdlMTkyNTFhMjg0ZWExZTkzNjBlODMxYjQ4OTk5Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBtcGYgPG1wZkAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBUaHUsIDQgU2VwIDIwMTQgMDg6MzI6MDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRhcmdldCBob29rIHRvIG92ZXJyaWRlIERXQVJGMiBmcmFtZSByZWdpc3RlciBzaXplCisKK2djYy8KKworCSogdGFyZ2V0LmRlZiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogTmV3IHRhcmdldCBob29rLgorCSogdGFyZ2hvb2tzLmMgKGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpOiBOZXcgZnVuY3Rpb24uCisJKiB0YXJnaG9va3MuaCAoZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSk6IE5ldyBwcm90b3R5cGUuCisJKiBkb2MvdG0udGV4aS5pbiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogRG9jdW1lbnQuCisJKiBkb2MvdG0udGV4aTogUmVnZW5lcmF0ZS4KKwkqIGR3YXJmMmNmaS5jIChleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyk6IEFic3RyYWN0IG1vZGUKKwlzZWxlY3Rpb24gbG9naWMgdG8gZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZS4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNDg5OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICB8IDEwICsrKysrKysrKysKKyBnY2MvZG9jL3RtLnRleGkgICAgfCAgNyArKysrKysrCisgZ2NjL2RvYy90bS50ZXhpLmluIHwgIDIgKysKKyBnY2MvZHdhcmYyY2ZpLmMgICAgfCAgNCArLS0tCisgZ2NjL3RhcmdldC5kZWYgICAgIHwgMTEgKysrKysrKysrKysKKyBnY2MvdGFyZ2hvb2tzLmMgICAgfCAxMyArKysrKysrKysrKysrCisgZ2NjL3Rhcmdob29rcy5oICAgIHwgIDEgKworIDcgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkKKysrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpCitAQCAtOTAxNyw2ICs5MDE3LDEzIEBAIHJlZ2lzdGVyIGluIER3YXJmLiAgT3RoZXJ3aXNlLCB0aGlzIGhvb2sKKyBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIEBjb2Rle05VTExfUlRYfS4KKyBAZW5kIGRlZnR5cGVmbgorIAorK0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7ZW51bSBtYWNoaW5lX21vZGV9IFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSAoaW50IEB2YXJ7cmVnbm99KQorK0dpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHdoaWNoIHRoZQorK2NvcnJlc3BvbmRpbmcgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgc2hvdWxkIGhhdmUuICBUaGlzIGlzIG5vcm1hbGx5CisrdXNlZCB0byByZXR1cm4gYSBzbWFsbGVyIG1vZGUgdGhhbiB0aGUgcmF3IG1vZGUgdG8gcHJldmVudCBjYWxsCisrY2xvYmJlcmVkIHBhcnRzIG9mIGEgcmVnaXN0ZXIgYWx0ZXJpbmcgdGhlIGZyYW1lIHJlZ2lzdGVyIHNpemUKKytAZW5kIGRlZnR5cGVmbgorKworIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB2b2lkIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQSAodHJlZSBAdmFye2FkZHJlc3N9KQorIElmIHNvbWUgcmVnaXN0ZXJzIGFyZSByZXByZXNlbnRlZCBpbiBEd2FyZi0yIHVud2luZCBpbmZvcm1hdGlvbiBpbgorIG11bHRpcGxlIHBpZWNlcywgZGVmaW5lIHRoaXMgaG9vayB0byBmaWxsIGluIGluZm9ybWF0aW9uIGFib3V0IHRoZQorSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkuaW4KKysrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpLmluCitAQCAtNjc0NSw2ICs2NzQ1LDggQEAgdGhlIHRhcmdldCBzdXBwb3J0cyBEV0FSRiAyIGZyYW1lIHVud2luZAorIAorIEBob29rIFRBUkdFVF9EV0FSRl9SRUdJU1RFUl9TUEFOCisgCisrQGhvb2sgVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFCisrCisgQGhvb2sgVEFSR0VUX0lOSVRfRFdBUkZfUkVHX1NJWkVTX0VYVFJBCisgCisgQGhvb2sgVEFSR0VUX0FTTV9UVFlQRQorSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKKysrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtMjcxLDExICsyNzEsOSBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCisgICAgICAgaWYgKHJudW0gPCBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCisgCXsKKyAJICBIT1NUX1dJREVfSU5UIG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChtb2RlKTsKKy0JICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSByZWdfcmF3X21vZGVbaV07CisgCSAgSE9TVF9XSURFX0lOVCBzaXplOworKwkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworIAorLQkgIGlmIChIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQgKGksIHNhdmVfbW9kZSkpCistCSAgICBzYXZlX21vZGUgPSBjaG9vc2VfaGFyZF9yZWdfbW9kZSAoaSwgMSwgdHJ1ZSk7CisgCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKKyAJICAgIHsKKyAJICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3RhcmdldC5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2V0LmRlZgorKysrIGdjYy00LjkuMi9nY2MvdGFyZ2V0LmRlZgorQEAgLTMyMTgsNiArMzIxOCwxNyBAQCBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuCisgIHJ0eCwgKHJ0eCByZWcpLAorICBob29rX3J0eF9ydHhfbnVsbCkKKyAKKysvKiBHaXZlbiBhIHJlZ2lzdGVyIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgY29ycmVzcG9uZGluZyBEV0FSRiBmcmFtZQorKyAgIHJlZ2lzdGVyLiAgKi8KKytERUZIT09LCisrKGR3YXJmX2ZyYW1lX3JlZ19tb2RlLAorKyAiR2l2ZW4gYSByZWdpc3RlciwgdGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIG1vZGUgd2hpY2ggdGhlXG5cCisrY29ycmVzcG9uZGluZyBEd2FyZiBmcmFtZSByZWdpc3RlciBzaG91bGQgaGF2ZS4gIFRoaXMgaXMgbm9ybWFsbHlcblwKKyt1c2VkIHRvIHJldHVybiBhIHNtYWxsZXIgbW9kZSB0aGFuIHRoZSByYXcgbW9kZSB0byBwcmV2ZW50IGNhbGxcblwKKytjbG9iYmVyZWQgcGFydHMgb2YgYSByZWdpc3RlciBhbHRlcmluZyB0aGUgZnJhbWUgcmVnaXN0ZXIgc2l6ZSIsCisrIGVudW0gbWFjaGluZV9tb2RlLCAoaW50IHJlZ25vKSwKKysgZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSkKKysKKyAvKiBJZiBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyBuZWVkcyB0byBmaWxsIGluIHRhYmxlCisgICAgZW50cmllcyBub3QgY29ycmVzcG9uZGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMgYmVsb3cKKyAgICBGSVJTVF9QU0VVRE9fUkVHSVNURVIsIHRoaXMgaG9vayBzaG91bGQgZ2VuZXJhdGUgdGhlIG5lY2Vzc2FyeQorSW5kZXg6IGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2hvb2tzLmMKKysrKyBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5jCitAQCAtMTQzOCw2ICsxNDM4LDE5IEBAIGRlZmF1bHRfZGVidWdfdW53aW5kX2luZm8gKHZvaWQpCisgICByZXR1cm4gVUlfTk9ORTsKKyB9CisgCisrLyogRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG1vZGUgZm9yIGEgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgdGhhdCByZXByZXNlbnRzCisrICAgcmVnaXN0ZXIgUkVHTk8uICAqLworKworK2VudW0gbWFjaGluZV9tb2RlCisrZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaW50IHJlZ25vKQorK3sKKysgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHJlZ19yYXdfbW9kZVtyZWdub107CisrCisrICBpZiAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEIChyZWdubywgc2F2ZV9tb2RlKSkKKysgICAgc2F2ZV9tb2RlID0gY2hvb3NlX2hhcmRfcmVnX21vZGUgKHJlZ25vLCAxLCB0cnVlKTsKKysgIHJldHVybiBzYXZlX21vZGU7CisrfQorKworIC8qIFRvIGJlIHVzZWQgYnkgdGFyZ2V0cyB3aGVyZSByZWdfcmF3X21vZGUgZG9lc24ndCByZXR1cm4gdGhlIHJpZ2h0CisgICAgbW9kZSBmb3IgcmVnaXN0ZXJzIHVzZWQgaW4gYXBwbHlfYnVpbHRpbl9yZXR1cm4gYW5kIGFwcGx5X2J1aWx0aW5fYXJnLiAgKi8KKyAKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3Rhcmdob29rcy5oCisrKysgZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuaAorQEAgLTE5NCw2ICsxOTQsNyBAQCBleHRlcm4gaW50IGRlZmF1bHRfbGFiZWxfYWxpZ25fbWF4X3NraXAKKyBleHRlcm4gaW50IGRlZmF1bHRfanVtcF9hbGlnbl9tYXhfc2tpcCAocnR4KTsKKyBleHRlcm4gc2VjdGlvbiAqIGRlZmF1bHRfZnVuY3Rpb25fc2VjdGlvbih0cmVlIGRlY2wsIGVudW0gbm9kZV9mcmVxdWVuY3kgZnJlcSwKKyAJCQkJCSAgYm9vbCBzdGFydHVwLCBib29sIGV4aXQpOworK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlIChpbnQpOworIGV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2dldF9yZWdfcmF3X21vZGUgKGludCk7CisgCisgZXh0ZXJuIHZvaWQgKmRlZmF1bHRfZ2V0X3BjaF92YWxpZGl0eSAoc2l6ZV90ICopOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNDQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbSBhMjJhMjIyYzhmOTI5OWY2YzA3YTAyNzQzODhhZGU3ZDRhYjhjMjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIwIEp1biAyMDE0IDE2OjQxOjA4IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdjYzogZml4IHNlZ2ZhdWx0IGZyb20gY2FsbGluZyBmcmVlIG9uIG5vbi1tYWxsb2MnZCBhcmVhCisKK1dlIHNlZSB0aGUgZm9sbG93aW5nIG9uIGEgMzJiaXQgZ2NjIGluc3RhbGxlZCBvbiA2NCBiaXQgaG9zdDoKKworICBSZWFkaW5nIHN5bWJvbHMgZnJvbSAuL2k1ODYtcG9reW1sbGliMzItbGludXgtZ2NjLi4uZG9uZS4KKyAgKGdkYikgcnVuCisgIFN0YXJ0aW5nIHByb2dyYW06IHg4Ni1wb2t5bWxsaWIzMi1saW51eC9saWIzMi1nY2MvNC45LjAtcjAvaW1hZ2UvdXNyL2Jpbi9pNTg2LXBva3ltbGxpYjMyLWxpbnV4LWdjYworCisgIFByb2dyYW0gcmVjZWl2ZWQgc2lnbmFsIFNJR1NFR1YsIFNlZ21lbnRhdGlvbiBmYXVsdC4KKyAgMHhmN2U5NTdlMCBpbiBmcmVlICgpIGZyb20gL2xpYi9pMzg2LWxpbnV4LWdudS9saWJjLnNvLjYKKyAgKGdkYikgYnQKKyAgIzAgIDB4ZjdlOTU3ZTAgaW4gZnJlZSAoKSBmcm9tIC9saWIvaTM4Ni1saW51eC1nbnUvbGliYy5zby42CisgICMxICAweDA4MDRiNzNjIGluIHNldF9tdWx0aWxpYl9kaXIgKCkgYXQgZ2NjLTQuOS4wL2djYy9nY2MuYzo3ODI3CisgICMyICBtYWluIChhcmdjPTEsIGFyZ3Y9MHhmZmZmZDUwNCkgYXQgZ2NjLTQuOS4wL2djYy9nY2MuYzo2Njg4CisgIChnZGIpCisKK1RoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIHdlIGNvbmRpdGlvbmFsbHkgYXNzaWduIHRoZSBwb2ludGVyIHdlCitldmVudHVhbGx5IGZyZWUsIGFuZCB0aGUgY29uZGl0aW9uYWwgbWF5IGFzc2lnbiB0aGUgcG9pbnRlciB0byB0aGUKK25vbi1tYWxsb2MnZCBpbnRlcm5hbCBzdHJpbmcgIi4iIHdoaWNoIGZhaWxzIHdoZW4gd2UgZnJlZSBpdCBoZXJlOgorCisgICBpZiAobXVsdGlsaWJfZGlyID09IE5VTEwgJiYgbXVsdGlsaWJfb3NfZGlyICE9IE5VTEwKKyAgICAgICAmJiBzdHJjbXAgKG11bHRpbGliX29zX2RpciwgIi4iKSA9PSAwKQorICAgICB7CisgICAgICAgZnJlZSAoQ09OU1RfQ0FTVCAoY2hhciAqLCBtdWx0aWxpYl9vc19kaXIpKTsKKyAgICAgICAuLi4KKworQXMgc3VnZ2VzdGVkIGJ5IEpha3ViLCBlbnN1cmUgdGhlICIuIiBjYXNlIGlzIGFsc28gbWFsbG9jJ2QgdmlhCit4c3RyZHVwKCkgYW5kIGhlbmNlIHRoZSBwb2ludGVyIGZvciB0aGUgIi4iIGNhc2UgY2FuIGJlIGZyZWVkLgorCitDYzogSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KK0NjOiBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CitDYzogTWF0dGhpYXMgS2xvc2UgPGRva29AdWJ1bnR1LmNvbT4KK0NDOiBUb2JpYXMgQnVybnVzIDxidXJudXNAbmV0LWIuZGU+CitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFsgaHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA2L21zZzAyMDY5Lmh0bWwgXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDlhYzE4ZTYwZDgwMS4uMTY4YWNmN2ViMGM5IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC03NzkwLDEwICs3NzkwLDE1IEBAIHNldF9tdWx0aWxpYl9kaXIgKHZvaWQpCisgCQlxMisrOworIAkgICAgICBpZiAoKnEyID09ICc6JykKKyAJCW1sX2VuZCA9IHEyOworLQkgICAgICBuZXdfbXVsdGlsaWJfb3NfZGlyID0gWE5FV1ZFQyAoY2hhciwgbWxfZW5kIC0gcSk7CistCSAgICAgIG1lbWNweSAobmV3X211bHRpbGliX29zX2RpciwgcSArIDEsIG1sX2VuZCAtIHEgLSAxKTsKKy0JICAgICAgbmV3X211bHRpbGliX29zX2RpclttbF9lbmQgLSBxIC0gMV0gPSAnXDAnOworLQkgICAgICBtdWx0aWxpYl9vc19kaXIgPSAqbmV3X211bHRpbGliX29zX2RpciA/IG5ld19tdWx0aWxpYl9vc19kaXIgOiAiLiI7CisrCSAgICAgIGlmIChtbF9lbmQgLSBxID09IDEpCisrCQltdWx0aWxpYl9vc19kaXIgPSB4c3RyZHVwICgiLiIpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG5ld19tdWx0aWxpYl9vc19kaXIgPSBYTkVXVkVDIChjaGFyLCBtbF9lbmQgLSBxKTsKKysJCSAgbWVtY3B5IChuZXdfbXVsdGlsaWJfb3NfZGlyLCBxICsgMSwgbWxfZW5kIC0gcSAtIDEpOworKwkJICBuZXdfbXVsdGlsaWJfb3NfZGlyW21sX2VuZCAtIHEgLSAxXSA9ICdcMCc7CisrCQkgIG11bHRpbGliX29zX2RpciA9IG5ld19tdWx0aWxpYl9vc19kaXI7CisrCQl9CisgCisgCSAgICAgIGlmIChxMiA8IGVuZCAmJiAqcTIgPT0gJzonKQorIAkJeworLS0gCisxLjkuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZWZhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDYxIEBACitnY2MvTWFrZWZpbGUuaW46IGZpeCBwYXJhbGxlbCBidWlsZGluZyBmYWlsdXJlCisKK1RoZSBnY2MtYXIubywgZ2NjLW5tLm8sIGdjYy1yYW5saWIubyBhbmQgZXJyb3JzLm8gaW5jbHVkZWQKK2NvbmZpZy5oIHdoaWNoIHdhcyBhIGdlbmVyYXRlZCBmaWxlLiBCdXQgbm8gZXhwbGljaXR5IHJ1bGUKK3RvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3kuIFRoZXJlIHdhcyBwb3RlbnRpYWwgYnVpbGRpbmcKK2ZhaWx1cmUgd2hpbGUgcGFyYWxsZWwgbWFrZS4KKworRm9yIGdjYy1hci5vLCBnY2Mtbm0ubyBhbmQgZ2NjLXJhbmxpYi5vLCB0aGV5IHdlcmUgY29tcGlsZWQgZnJvbSBvbmUgQworc291cmNlIGZpbGUgZ2NjLWFyLmMsIHdlIGFkZCB0aGVtIHRvIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUywgc28gdGhlCisnJChBTExfSE9TVF9PQkpTKSA6IHwgJChnZW5lcmF0ZWRfZmlsZXMpJyBydWxlIGNvdWxkIHdvcmsgZm9yIHRoZXNlCitvYmplY3RzLgorCitGb3IgZXJyb3JzLm8sIGl0IGlzIHBhcnQgb2YgZ2VuZ3R5cGUsIGFuZCB0aGUgZ2VuZ3R5cGUgZ2VuZXJhdG9yIHByb2dyYW0KK2lzIHNwZWNpYWw6IFR3byB2ZXJzaW9ucyBhcmUgYnVpbHQuIE9uZSBpcyBmb3IgdGhlIGJ1aWxkIG1hY2hpbmUsIGFuZCBvbmUKK2lzIGZvciB0aGUgaG9zdC4gV2UgcmVmZXJlZCB3aGF0IGdlbmd0eXBlLXBhcnNlLm8gZGlkICh3aGljaCBhbHNvIGlzIHBhcnQKK29mIGdlbmd0eXBlKS4KKworW0dDQyAjNjE4OTldCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MTg5OQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggNjQ3NWNiYS4uNTZlNTBiYiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtMTQ4MSwxMyArMTQ4MSwxNiBAQCBPQkpTLWxpYmNvbW1vbi10YXJnZXQgPSAkKGNvbW1vbl9vdXRfb2JqZWN0X2ZpbGUpIHByZWZpeC5vIHBhcmFtcy5vIFwKKyAJb3B0cy5vIG9wdHMtY29tbW9uLm8gb3B0aW9ucy5vIHZlYy5vIGhvb2tzLm8gY29tbW9uL2NvbW1vbi10YXJnaG9va3MubyBcCisgCWhhc2gtdGFibGUubyBmaWxlLWZpbmQubworIAorKyMgT2JqZWN0cyBjb21waWxlZCBmcm9tIG9uZSBDIHNvdXJjZSBmaWxlIGdjYy1hci5jCisrT0JKUy1nY2MtYXIgPSBnY2MtYXIubyBnY2Mtbm0ubyBnY2MtcmFubGliLm8KKysKKyAjIFRoaXMgbGlzdHMgYWxsIGhvc3Qgb2JqZWN0cyBmb3IgdGhlIGZyb250IGVuZHMuCisgQUxMX0hPU1RfRlJPTlRFTkRfT0JKUyA9ICQoZm9yZWFjaCB2LCQoQ09ORklHX0xBTkdVQUdFUyksJCgkKHYpX09CSlMpKQorIAorIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUyA9ICQoR0NDX09CSlMpICQoT0JKUykgJChPQkpTLWxpYmNvbW1vbikgXAorICAgJChPQkpTLWxpYmNvbW1vbi10YXJnZXQpIEBUUkVFQlJPV1NFUkAgbWFpbi5vIGMtZmFtaWx5L2NwcHNwZWMubyBcCisgICAkKENPTExFQ1QyX09CSlMpICQoRVhUUkFfR0NDX09CSlMpICQoR0NPVl9PQkpTKSAkKEdDT1ZfRFVNUF9PQkpTKSBcCistICBsdG8td3JhcHBlci5vCisrICBsdG8td3JhcHBlci5vICQoT0JKUy1nY2MtYXIpCisgCisgIyBUaGlzIGxpc3RzIGFsbCBob3N0IG9iamVjdCBmaWxlcywgd2hldGhlciB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGlzCisgIyBjb21waWxhdGlvbiBvciBub3QuCitAQCAtMjQzNyw2ICsyNDQwLDggQEAgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKyBDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCisgCisrZXJyb3JzLm8gOiAkKENPTkZJR19IKQorKworIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdkYWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMTQ4IEBACitGcm9tIDRmZDM5ZjEzMjkzNzllMDBmOTU4Mzk0YWRkZTZiZTk2ZjBjYWYyMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBoYWlucXVlIDxoYWlucXVlQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IEZyaSwgNSBEZWMgMjAxNCAxNjo1MzoyMiArMDAwMAorU3ViamVjdDogW1BBVENIXSAyMDE0LTEyLTA1ICBPbGl2aWVyIEhhaW5xdWUgIDxoYWlucXVlQGFkYWNvcmUuY29tPgorCisgICAgICAgICogZHdhcmYyY2ZpLmMgKGluaXRfb25lX2R3YXJmX3JlZ19zaXplKTogTmV3IGhlbHBlciwgcHJvY2Vzc2luZworICAgICAgICBvbmUgcGFydGljdWxhciByZWcgZm9yIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzLgorICAgICAgICAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBSZXdvcmsgdG8gdXNlIGhlbHBlciBhbmQKKyAgICAgICAgYWNjb3VudCBmb3IgZHdhcmYgcmVnaXN0ZXIgc3BhbnMuCisKKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTg0MjggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgfCAgNyArKysrKworIGdjYy9kd2FyZjJjZmkuYyB8IDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCisrKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworQEAgLTI1Miw3ICsyNTIsNTkgQEAgaW5pdF9yZXR1cm5fY29sdW1uX3NpemUgKGVudW0gbWFjaGluZV9tbworIAkJICBnZW5faW50X21vZGUgKHNpemUsIG1vZGUpKTsKKyB9CisgCistLyogR2VuZXJhdGUgY29kZSB0byBpbml0aWFsaXplIHRoZSByZWdpc3RlciBzaXplIHRhYmxlLiAgKi8KKysvKiBEYXRhc3RydWN0dXJlIHVzZWQgYnkgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgYW5kCisrICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgdG8gY29tbXVuaWNhdGUgb24gd2hhdCBoYXMgYmVlbiBkb25lIGJ5IHRoZQorKyAgIGxhdHRlci4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICAvKiBXaGV0aGVyIHRoZSBkd2FyZiByZXR1cm4gY29sdW1uIHdhcyBpbml0aWFsaXplZC4gICovCisrICBib29sIHdyb3RlX3JldHVybl9jb2x1bW47CisrCisrICAvKiBGb3IgZWFjaCBoYXJkIHJlZ2lzdGVyIFJFR05PLCB3aGV0aGVyIGluaXRfb25lX2R3YXJmX3JlZ19zaXplCisrICAgICB3YXMgZ2l2ZW4gUkVHTk8gdG8gcHJvY2VzcyBhbHJlYWR5LiAgKi8KKysgIGJvb2wgcHJvY2Vzc2VkX3JlZ25vIFtGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworKworK30gaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlOworKworKy8qIEhlbHBlciBmb3IgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMuICBHZW5lcmF0ZSBjb2RlIHRvCisrICAgaW5pdGlhbGl6ZSB0aGUgZHdhcmYgcmVnaXN0ZXIgc2l6ZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHJlZ2lzdGVyCisrICAgUkVHTk8gaW4gUkVHTU9ERS4gIFRBQkxFIGlzIHRoZSB0YWJsZSBiYXNlIGFkZHJlc3MsIFNMT1RNT0RFIGlzIHRoZSBtb2RlIHRvCisrICAgdXNlIGZvciB0aGUgc2l6ZSBlbnRyeSB0byBpbml0aWFsaXplLCBhbmQgSU5JVF9TVEFURSBpcyB0aGUgY29tbXVuaWNhdGlvbgorKyAgIGRhdGFzdHJ1Y3R1cmUgY29udmV5aW5nIHdoYXQgd2UncmUgZG9pbmcgdG8gb3VyIGNhbGxlci4gICovCisrCisrc3RhdGljCisrdm9pZCBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaW50IHJlZ25vLCBtYWNoaW5lX21vZGUgcmVnbW9kZSwKKysJCQkgICAgICBydHggdGFibGUsIG1hY2hpbmVfbW9kZSBzbG90bW9kZSwKKysJCQkgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc3RhdGUgKmluaXRfc3RhdGUpCisreworKyAgY29uc3QgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKHJlZ25vKTsKKysgIGNvbnN0IHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworKworKyAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKKysgIGNvbnN0IEhPU1RfV0lERV9JTlQgcmVnc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHJlZ21vZGUpOworKworKyAgaW5pdF9zdGF0ZS0+cHJvY2Vzc2VkX3JlZ25vW3JlZ25vXSA9IHRydWU7CisrCisrICBpZiAocm51bSA+PSBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCisrICAgIHJldHVybjsKKysKKysgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCisrICAgIHsKKysgICAgICBpZiAocmVnbW9kZSA9PSBWT0lEbW9kZSkKKysJcmV0dXJuOworKyAgICAgIGluaXRfc3RhdGUtPndyb3RlX3JldHVybl9jb2x1bW4gPSB0cnVlOworKyAgICB9CisrCisrICBpZiAoc2xvdG9mZnNldCA8IDApCisrICAgIHJldHVybjsKKysKKysgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAodGFibGUsIHNsb3Rtb2RlLCBzbG90b2Zmc2V0KSwKKysJCSAgZ2VuX2ludF9tb2RlIChyZWdzaXplLCBzbG90bW9kZSkpOworK30KKysKKysvKiBHZW5lcmF0ZSBjb2RlIHRvIGluaXRpYWxpemUgdGhlIGR3YXJmIHJlZ2lzdGVyIHNpemUgdGFibGUgbG9jYXRlZAorKyAgIGF0IHRoZSBwcm92aWRlZCBBRERSRVNTLiAgKi8KKyAKKyB2b2lkCisgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZWUgYWRkcmVzcykKK0BAIC0yNjEsMzUgKzMxMyw0MCBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCisgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gVFlQRV9NT0RFIChjaGFyX3R5cGVfbm9kZSk7CisgICBydHggYWRkciA9IGV4cGFuZF9ub3JtYWwgKGFkZHJlc3MpOworICAgcnR4IG1lbSA9IGdlbl9ydHhfTUVNIChCTEttb2RlLCBhZGRyKTsKKy0gIGJvb2wgd3JvdGVfcmV0dXJuX2NvbHVtbiA9IGZhbHNlOworKworKyAgaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlIGluaXRfc3RhdGU7CisrCisrICBtZW1zZXQgKChjaGFyICopJmluaXRfc3RhdGUsIDAsIHNpemVvZiAoaW5pdF9zdGF0ZSkpOworIAorICAgZm9yIChpID0gMDsgaSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsgaSsrKQorICAgICB7CistICAgICAgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKGkpOworLSAgICAgIHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworLQorLSAgICAgIGlmIChybnVtIDwgRFdBUkZfRlJBTUVfUkVHSVNURVJTKQorLQl7CistCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAobW9kZSk7CistCSAgSE9TVF9XSURFX0lOVCBzaXplOworLQkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworKyAgICAgIG1hY2hpbmVfbW9kZSBzYXZlX21vZGU7CisrICAgICAgcnR4IHNwYW47CisgCistCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKKysgICAgICAvKiBObyBwb2ludCBpbiBwcm9jZXNzaW5nIGEgcmVnaXN0ZXIgbXVsdGlwbGUgdGltZXMuICBUaGlzIGNvdWxkIGhhcHBlbgorKyAgICAgICAgd2l0aCByZWdpc3RlciBzcGFucywgZS5nLiB3aGVuIGEgcmVnIGlzIGZpcnN0IHByb2Nlc3NlZCBhcyBhIHBpZWNlIG9mCisrICAgICAgICBhIHNwYW4sIHRoZW4gYXMgYSByZWdpc3RlciBvbiBpdHMgb3duIGxhdGVyIG9uLiAgKi8KKysKKysgICAgICBpZiAoaW5pdF9zdGF0ZS5wcm9jZXNzZWRfcmVnbm9baV0pCisrICAgICAgIGNvbnRpbnVlOworKworKyAgICAgIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworKyAgICAgIHNwYW4gPSB0YXJnZXRtLmR3YXJmX3JlZ2lzdGVyX3NwYW4gKGdlbl9ydHhfUkVHIChzYXZlX21vZGUsIGkpKTsKKysgICAgICBpZiAoIXNwYW4pCisrICAgICAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpLCBzYXZlX21vZGUsIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOworKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIGZvciAoaW50IHNpID0gMDsgc2kgPCBYVkVDTEVOIChzcGFuLCAwKTsgc2krKykKKyAJICAgIHsKKy0JICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKKy0JCWNvbnRpbnVlOworLQkgICAgICB3cm90ZV9yZXR1cm5fY29sdW1uID0gdHJ1ZTsKKy0JICAgIH0KKy0JICBzaXplID0gR0VUX01PREVfU0laRSAoc2F2ZV9tb2RlKTsKKy0JICBpZiAob2Zmc2V0IDwgMCkKKy0JICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICBydHggcmVnID0gWFZFQ0VYUCAoc3BhbiwgMCwgc2kpOworKyAgICAgICAgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZQorKyAgICAgICAgICAgICAgIChSRUdOTyAocmVnKSwgR0VUX01PREUgKHJlZyksIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOworKyAgICAgICAgICAgfQorIAorLQkgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAobWVtLCBtb2RlLCBvZmZzZXQpLAorLQkJCSAgZ2VuX2ludF9tb2RlIChzaXplLCBtb2RlKSk7CisgCX0KKyAgICAgfQorIAorLSAgaWYgKCF3cm90ZV9yZXR1cm5fY29sdW1uKQorKyAgaWYgKCFpbml0X3N0YXRlLndyb3RlX3JldHVybl9jb2x1bW4pCisgICAgIGluaXRfcmV0dXJuX2NvbHVtbl9zaXplIChtb2RlLCBtZW0sIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pOworIAorICNpZmRlZiBEV0FSRl9BTFRfRlJBTUVfUkVUVVJOX0NPTFVNTgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZjOTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBjMDIzNWEzM2RlOGM0Zjc4Y2NlMzViMmE4YzIwMzVjODNmZTFiZDE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogaGFpbnF1ZSA8aGFpbnF1ZUAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBGcmksIDUgRGVjIDIwMTQgMTc6MDE6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gMjAxNC0xMi0wNSAgT2xpdmllciBIYWlucXVlICA8aGFpbnF1ZUBhZGFjb3JlLmNvbT4KKworICAgICAgICBnY2MvCisgICAgICAgICogZGVmYXVsdHMuaDogKERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKTogRGVmaW5lIGRlZmF1bHQuCisgICAgICAgICogZHdhcmYyY2ZpLmMgKGluaXRfb25lX2R3YXJmX3JlZ19zaXplKTogSG9ub3IKKyAgICAgICAgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4uCisKKyAgICAgICAgbGliZ2NjLworICAgICAgICAqIHVud2luZC1kdzIuYyAoRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4pOiBSZW1vdmUgZGVmYXVsdCBkZWYsCisgICAgICAgIG5vdyBwcm92aWRlZCBieSBkZWZhdWx0cy5oLgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE4NDI5IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KKworLS0tCisgZ2NjL0NoYW5nZUxvZyAgICAgICB8IDYgKysrKysrCisgZ2NjL2RlZmF1bHRzLmggICAgICB8IDUgKysrKysKKyBnY2MvZHdhcmYyY2ZpLmMgICAgIHwgMyArKy0KKyBsaWJnY2MvQ2hhbmdlTG9nICAgIHwgNSArKysrKworIGxpYmdjYy91bndpbmQtZHcyLmMgfCA0IC0tLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2RlZmF1bHRzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZGVmYXVsdHMuaAorKysrIGdjYy00LjkuMi9nY2MvZGVmYXVsdHMuaAorQEAgLTQzOCw2ICs0MzgsMTEgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICNkZWZpbmUgRFdBUkZfRlJBTUVfUkVHTlVNKFJFRykgREJYX1JFR0lTVEVSX05VTUJFUiAoUkVHKQorICNlbmRpZgorIAorKy8qIFRoZSBtYXBwaW5nIGZyb20gZHdhcmYgQ0ZBIHJlZyBudW1iZXIgdG8gaW50ZXJuYWwgZHdhcmYgcmVnIG51bWJlcnMuICAqLworKyNpZm5kZWYgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4KKysjZGVmaW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSAoUkVHTk8pCisrI2VuZGlmCisrCisgLyogTWFwIHJlZ2lzdGVyIG51bWJlcnMgaGVsZCBpbiB0aGUgY2FsbCBmcmFtZSBpbmZvIHRoYXQgZ2NjIGhhcworICAgIGNvbGxlY3RlZCB1c2luZyBEV0FSRl9GUkFNRV9SRUdOVU0gdG8gdGhvc2UgdGhhdCBzaG91bGQgYmUgb3V0cHV0IGluCisgICAgLmRlYnVnX2ZyYW1lIGFuZCAuZWhfZnJhbWUuICAqLworSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKKysrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtMjgwLDggKzI4MCw5IEBAIHZvaWQgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgKGludCByZWdubywKKyB7CisgICBjb25zdCB1bnNpZ25lZCBpbnQgZG51bSA9IERXQVJGX0ZSQU1FX1JFR05VTSAocmVnbm8pOworICAgY29uc3QgdW5zaWduZWQgaW50IHJudW0gPSBEV0FSRjJfRlJBTUVfUkVHX09VVCAoZG51bSwgMSk7CisrICBjb25zdCB1bnNpZ25lZCBpbnQgZGNvbCA9IERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChybnVtKTsKKyAKKy0gIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7CisrICBjb25zdCBIT1NUX1dJREVfSU5UIHNsb3RvZmZzZXQgPSBkY29sICogR0VUX01PREVfU0laRSAoc2xvdG1vZGUpOworICAgY29uc3QgSE9TVF9XSURFX0lOVCByZWdzaXplID0gR0VUX01PREVfU0laRSAocmVnbW9kZSk7CisgCisgICBpbml0X3N0YXRlLT5wcm9jZXNzZWRfcmVnbm9bcmVnbm9dID0gdHJ1ZTsKK0luZGV4OiBnY2MtNC45LjIvbGliZ2NjL3Vud2luZC1kdzIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2xpYmdjYy91bndpbmQtZHcyLmMKKysrKyBnY2MtNC45LjIvbGliZ2NjL3Vud2luZC1kdzIuYworQEAgLTU1LDEwICs1NSw2IEBACisgI2RlZmluZSBQUkVfR0NDM19EV0FSRl9GUkFNRV9SRUdJU1RFUlMgRFdBUkZfRlJBTUVfUkVHSVNURVJTCisgI2VuZGlmCisgCistI2lmbmRlZiBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTgorLSNkZWZpbmUgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4oUkVHTk8pIChSRUdOTykKKy0jZW5kaWYKKy0KKyAvKiA/Pz8gRm9yIHRoZSBwdWJsaWMgZnVuY3Rpb24gaW50ZXJmYWNlcywgd2UgdGVuZCB0byBnY2NfYXNzZXJ0IHRoYXQgdGhlCisgICAgY29sdW1uIG51bWJlcnMgYXJlIGluIHJhbmdlLiAgRm9yIHRoZSBkd2FyZjIgdW53aW5kIGluZm8gdGhpcyBkb2VzIGhhcHBlbiwKKyAgICBhbHRob3VnaCBzbyBmYXIgaW4gYSBjYXNlIHRoYXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTU1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitEaXNhYmxlIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIGFuZCBvdGhlciBtdWx0aWxpYiBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUgQUJJLCBhcworbG9uZyBhcyB0aGUgZHluYW1pYyBsb2FkZXIgaXMgcHJlc2VudCBpbiAvbGliLgorCitXZSBzaW1wbHkgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgcnVsZXMgaW4gZ2NjIHRvIGZpbmQgYW5kIGNvbmZpZ3VyZSB0aGUgCitub3JtYWwgbGliZGlyLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMS5vcmlnL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKysrKyBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorQEAgLTIxLDExICsyMSwxMSBAQAorIExJQjFBU01TUkMgICA9IGFhcmNoNjQvbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF9hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UKKyAKKy1BQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSAuPS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKy1NVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKysjTVVMVElMSUJfT1NESVJOQU1FUyA9IC49Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKyAKKyAjIERpc2FibGUgdGhlIG11bHRpbGliIGZvciBsaW51eC1nbnUgdGFyZ2V0cyBmb3IgdGhlIHRpbWUgYmVpbmc7IGZvY3VzCisgIyBvbiB0aGUgYmFyZW1ldGFsIHRhcmdldHMuCistTVVMVElMSUJfT1BUSU9OUyAgICA9CistTVVMVElMSUJfRElSTkFNRVMgICA9CisrI01VTFRJTElCX09QVElPTlMgICAgPQorKyNNVUxUSUxJQl9ESVJOQU1FUyAgID0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0MmJhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGNhMDNjZjFiMTMzZDY2ZWI5NzhjNjhmNmRiYzM0NWU5YWFiY2JhODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB1cm9zIDx1cm9zQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IE1vbiwgMzAgSnVuIDIwMTQgMTk6MzA6NTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcjIxMjE3MQorCisqIGV4Y2VwdC5jIChlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCk6IE5ldyBoZWxwZXIKKyBmdW5jdGlvbi4gCShjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMpOiBVc2UKKyBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCB0byAJZW1pdCBFSF9SRUdJT05fRU5EIG5vdGUuIAorICoganVtcC5jIChjbGVhbnVwX2JhcnJpZXJzKTogRG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIAorIGNvcnJlc3BvbmRpbmcgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4KKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjEyMTcxIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2djYy5nbnUub3JnL3ZpZXdjdnMvZ2NjP3ZpZXc9cmV2aXNpb24mcmV2aXNpb249MjEyMTcxXQorU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxiYW9zaGFuLnBhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9leGNlcHQuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrLS0tLS0KKyBnY2MvanVtcC5jICAgfCAgIDE5ICsrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZXhjZXB0LmMgYi9nY2MvZXhjZXB0LmMKK2luZGV4IGRjNWMxZDIuLjdhYzExNGYgMTAwNjQ0CistLS0gYS9nY2MvZXhjZXB0LmMKKysrKyBiL2djYy9leGNlcHQuYworQEAgLTI0NjYsNiArMjQ2NiwyMCBAQCBhZGRfY2FsbF9zaXRlIChydHggbGFuZGluZ19wYWQsIGludCBhY3Rpb24sIGludCBzZWN0aW9uKQorICAgcmV0dXJuIGNhbGxfc2l0ZV9iYXNlICsgY3J0bC0+ZWguY2FsbF9zaXRlX3JlY29yZF92W3NlY3Rpb25dLT5sZW5ndGggKCkgLSAxOworIH0KKyAKKytzdGF0aWMgcnR4CisrZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKHJ0eCBpbnNuKQorK3sKKysgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChpbnNuKTsKKysKKysgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgY29ycmVzcG9uZGluZworKyAgICAgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCisrICBpZiAobmV4dCAmJiBOT1RFX1AgKG5leHQpCisrICAgICAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCisrICAgIGluc24gPSBuZXh0OworKworKyAgcmV0dXJuIGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsIGluc24pOworK30KKysKKyAvKiBUdXJuIFJFR19FSF9SRUdJT04gbm90ZXMgYmFjayBpbnRvIE5PVEVfSU5TTl9FSF9SRUdJT04gbm90ZXMuCisgICAgVGhlIG5ldyBub3RlIG51bWJlcnMgd2lsbCBub3QgcmVmZXIgdG8gcmVnaW9uIG51bWJlcnMsIGJ1dAorICAgIGluc3RlYWQgdG8gY2FsbCBzaXRlIGVudHJpZXMuICAqLworQEAgLTI1NDQsOCArMjU1OCw4IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKKyAJCW5vdGUgPSBlbWl0X25vdGVfYmVmb3JlIChOT1RFX0lOU05fRUhfUkVHSU9OX0JFRywKKyAJCQkJCSBmaXJzdF9ub19hY3Rpb25faW5zbl9iZWZvcmVfc3dpdGNoKTsKKyAJCU5PVEVfRUhfSEFORExFUiAobm90ZSkgPSBjYWxsX3NpdGU7CistCQlub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwKKy0JCQkJCWxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisrCQlub3RlCisrCQkgID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworIAkJZ2NjX2Fzc2VydCAobGFzdF9hY3Rpb24gIT0gLTMKKyAJCQkgICAgfHwgKGxhc3RfYWN0aW9uX2luc24KK0BAIC0yNTY5LDggKzI1ODMsNyBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCisgCQkgICAgZmlyc3Rfbm9fYWN0aW9uX2luc24gPSBOVUxMX1JUWDsKKyAJCSAgfQorIAorLQkJbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCistCQkJCQlsYXN0X2FjdGlvbl9pbnNuKTsKKysJCW5vdGUgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9hY3Rpb25faW5zbik7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworIAkgICAgICB9CisgCitAQCAtMjYxNyw3ICsyNjMwLDcgQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQorIAorICAgaWYgKGxhc3RfYWN0aW9uID49IC0xICYmICEgZmlyc3Rfbm9fYWN0aW9uX2luc24pCisgICAgIHsKKy0gICAgICBub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwgbGFzdF9hY3Rpb25faW5zbik7CisrICAgICAgbm90ZSA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X2FjdGlvbl9pbnNuKTsKKyAgICAgICBOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2p1bXAuYyBiL2djYy9qdW1wLmMKK2luZGV4IDk0MThmNjUuLmE1ZTVmNTIgMTAwNjQ0CistLS0gYS9nY2MvanVtcC5jCisrKysgYi9nY2MvanVtcC5jCitAQCAtMTIxLDE1ICsxMjEsMjYgQEAgcmVidWlsZF9qdW1wX2xhYmVsc19jaGFpbiAocnR4IGNoYWluKQorIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyBjbGVhbnVwX2JhcnJpZXJzICh2b2lkKQorIHsKKy0gIHJ0eCBpbnNuLCBuZXh0LCBwcmV2OworLSAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gbmV4dCkKKysgIHJ0eCBpbnNuOworKyAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKKyAgICAgeworLSAgICAgIG5leHQgPSBORVhUX0lOU04gKGluc24pOworICAgICAgIGlmIChCQVJSSUVSX1AgKGluc24pKQorIAl7CistCSAgcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKKysJICBydHggcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKKyAJICBpZiAoIXByZXYpCisgCSAgICBjb250aW51ZTsKKysKKysJICBpZiAoQ0FMTF9QIChwcmV2KSkKKysJICAgIHsKKysJICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyBjb3JyZXNwb25kaW5nCisrCQkgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCisrCSAgICAgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChwcmV2KTsKKysKKysJICAgICAgaWYgKE5PVEVfUCAobmV4dCkKKysJCSAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCisrCQlwcmV2ID0gbmV4dDsKKysJICAgIH0KKysKKyAJICBpZiAoQkFSUklFUl9QIChwcmV2KSkKKyAJICAgIGRlbGV0ZV9pbnNuIChpbnNuKTsKKyAJICBlbHNlIGlmIChwcmV2ICE9IFBSRVZfSU5TTiAoaW5zbikpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTgyN2NiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSA2ZWFlM2U2MzdmY2MyMmQyMWI1MWQ0NGQ2MWUzYTljYjQ4MjVlNzc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMzAgT2N0IDIwMTQgMjA6Mzc6MTQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF1QUiBydGwtb3B0aW1pemF0aW9uLzYzMzQ4CisgCitQUiBydGwtb3B0aW1pemF0aW9uLzYzMzQ4CisqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IERvIG5vdCBlbWl0IGV4dHJhIGJhcnJpZXIuCisKK05vdGU6IHRoaXMgcGF0Y2ggaXMgdG8gZml4IHRoZSBzaWRlIGVmZmVjdCBpbnRyb2R1Y2VkIGJ5IHIyMTIxNzEgd2hpY2ggd2FzIHJlcG9ydGVkIGF0OgoraHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMzNDgKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE1NjEzIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2djYy5nbnUub3JnL3ZpZXdjdnMvZ2NjP3ZpZXc9cmV2aXNpb24mcmV2aXNpb249MjE1NjEzXQorU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxiYW9zaGFuLnBhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvZW1pdC1ydGwuYyB8ICAgMTEgLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZW1pdC1ydGwuYyBiL2djYy9lbWl0LXJ0bC5jCitpbmRleCA0NzM2ZjhkLi5hZTY5ZGJkIDEwMDY0NAorLS0tIGEvZ2NjL2VtaXQtcnRsLmMKKysrKyBiL2djYy9lbWl0LXJ0bC5jCitAQCAtMzQyMiw3ICszNDIyLDYgQEAgdHJ5X3NwbGl0IChydHggcGF0LCBydHggdHJpYWwsIGludCBsYXN0KQorIHsKKyAgIHJ0eCBiZWZvcmUgPSBQUkVWX0lOU04gKHRyaWFsKTsKKyAgIHJ0eCBhZnRlciA9IE5FWFRfSU5TTiAodHJpYWwpOworLSAgaW50IGhhc19iYXJyaWVyID0gMDsKKyAgIHJ0eCBub3RlLCBzZXEsIHRlbTsKKyAgIGludCBwcm9iYWJpbGl0eTsKKyAgIHJ0eCBpbnNuX2xhc3QsIGluc247CitAQCAtMzQ0MSwxNCArMzQ0MCw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyAKKyAgIHNwbGl0X2JyYW5jaF9wcm9iYWJpbGl0eSA9IC0xOworIAorLSAgLyogSWYgd2UgYXJlIHNwbGl0dGluZyBhIEpVTVBfSU5TTiwgaXQgbWlnaHQgYmUgZm9sbG93ZWQgYnkgYSBCQVJSSUVSLgorLSAgICAgV2UgbWF5IG5lZWQgdG8gaGFuZGxlIHRoaXMgc3BlY2lhbGx5LiAgKi8KKy0gIGlmIChhZnRlciAmJiBCQVJSSUVSX1AgKGFmdGVyKSkKKy0gICAgeworLSAgICAgIGhhc19iYXJyaWVyID0gMTsKKy0gICAgICBhZnRlciA9IE5FWFRfSU5TTiAoYWZ0ZXIpOworLSAgICB9CistCisgICBpZiAoIXNlcSkKKyAgICAgcmV0dXJuIHRyaWFsOworIAorQEAgLTM1OTQsOCArMzU4NSw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyAgIHRlbSA9IGVtaXRfaW5zbl9hZnRlcl9zZXRsb2MgKHNlcSwgdHJpYWwsIElOU05fTE9DQVRJT04gKHRyaWFsKSk7CisgCisgICBkZWxldGVfaW5zbiAodHJpYWwpOworLSAgaWYgKGhhc19iYXJyaWVyKQorLSAgICBlbWl0X2JhcnJpZXJfYWZ0ZXIgKHRlbSk7CisgCisgICAvKiBSZWN1cnNpdmVseSBjYWxsIHRyeV9zcGxpdCBmb3IgZWFjaCBuZXcgaW5zbiBjcmVhdGVkOyBieSB0aGUKKyAgICAgIHRpbWUgY29udHJvbCByZXR1cm5zIGhlcmUgdGhhdCBpbnNuIHdpbGwgYmUgZnVsbHkgc3BsaXQsIHNvCistLSAKKzEuNy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTlmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gNWMwMDkyMDcwMjUzMTEzY2YwZDljNDVlYWNjODg0YjNlY2MzNGQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGpzbTI4IDxqc20yOEAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBTYXQsIDI1IE9jdCAyMDE0IDAwOjIzOjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIE9ubHkgYWxsb3cgZTUwMCBkb3VibGUgaW4gU1BFX1NJTURfUkVHTk9fUCByZWdpc3RlcnMuCisKK3JzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIGFsbG93cyBTUEUgdmVjdG9ycyBpbiBzaW5nbGUKK3JlZ2lzdGVycyBzYXRpc2Z5aW5nIFNQRV9TSU1EX1JFR05PX1AgKGkuZS4gcmVnaXN0ZXIgbnVtYmVycyAwIHRvCiszMSkuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZyB0ZXN0IGZvciBlNTAwIGRvdWJsZSB0cmVhdHMgYWxsCityZWdpc3RlcnMgYXMgYmVpbmcgYWJsZSB0byBzdG9yZSBhIDY0LWJpdCB2YWx1ZSwgcmF0aGVyIHRoYW4ganVzdAordGhvc2UgR1BScy4KKworTG9naWNhbGx5IHRoaXMgaW5jb25zaXN0ZW5jeSBpcyB3cm9uZzsgaW4gYWRkaXRpb24sIGl0IGNhdXNlcyBwcm9ibGVtcwordW53aW5kaW5nIGZyb20gc2lnbmFsIGhhbmRsZXJzLiAgbGludXgtdW53aW5kLmggdXNlcworQVJHX1BPSU5URVJfUkVHTlVNIGFzIGEgcGxhY2UgdG8gc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gYQorc2lnbmFsIGhhbmRsZXIsIGJ1dCB0aGlzIGxvZ2ljIGluIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsCityZXN1bHRzIGluIHRoYXQgYmVpbmcgY29uc2lkZXJlZCBhbiA4LWJ5dGUgcmVnaXN0ZXIsIHJlc3VsdGluZyBpbgorYXNzZXJ0aW9uIGZhaWx1cmVzLgorKDxodHRwczovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDkvbXNnMDI2MjUuaHRtbD4gZmlyc3QKK25lZWRzIHRvIGJlIGFwcGxpZWQgZm9yIHVud2luZGluZyB0byB3b3JrIGluIGdlbmVyYWwgb24gZTUwMC4pICBUaGlzCitwYXRjaCBtYWtlcyByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCBoYW5kbGUgdGhlIGU1MDAgZG91YmxlCitjYXNlIGNvbnNpc3RlbnRseSB3aXRoIFNQRSB2ZWN0b3JzLgorCitUZXN0ZWQgd2l0aCBubyByZWdyZXNzaW9ucyB3aXRoIGNyb3NzIHRvIHBvd2VycGMtbGludXgtZ251c3BlIChnaXZlbgordGhlIGFmb3JlbWVudGlvbmVkIHBhdGNoIGFwcGxpZWQpLiAgRmFpbHVyZXMgb2Ygc2lnbmFsIGhhbmRsaW5nCit1bndpbmRpbmcgdGVzdHMgc3VjaCBhcyBnY2MuZGcvY2xlYW51cC17OCw5LDEwLDExfS5jIGFyZSBmaXhlZCBieSB0aGlzCitwYXRjaC4KKworCSogY29uZmlnL3JzNjAwMC9yczYwMDAuYyAocnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwpOiBEbworCW5vdCBhbGxvdyBlNTAwIGRvdWJsZSBpbiByZWdpc3RlcnMgbm90IHNhdGlzeWZpbmcKKwlTUEVfU0lNRF9SRUdOT19QLgorCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNjY4OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICAgICAgICAgIHwgNiArKysrKysKKyBnY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKK0BAIC0xNzAzLDcgKzE3MDMsNyBAQCByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCAoaW50IHJlCisgICAgICBTQ21vZGUgc28gYXMgdG8gcGFzcyB0aGUgdmFsdWUgY29ycmVjdGx5IGluIGEgcGFpciBvZgorICAgICAgcmVnaXN0ZXJzLiAgKi8KKyAgIGVsc2UgaWYgKFRBUkdFVF9FNTAwX0RPVUJMRSAmJiBGTE9BVF9NT0RFX1AgKG1vZGUpICYmIG1vZGUgIT0gU0Ntb2RlCistCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkpCisrCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkgJiYgU1BFX1NJTURfUkVHTk9fUCAocmVnbm8pKQorICAgICByZWdfc2l6ZSA9IFVOSVRTX1BFUl9GUF9XT1JEOworIAorICAgZWxzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKKworVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAorZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCitidWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAorc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQorZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCitwaWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYworY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9nY2MvTWFrZWZpbGUuaW4JMjAxNC0xMi0yMyAxMTo1NzozMy4zMjc4NzMzMzEgKzAwMDAKKysrKyBiL2djYy9NYWtlZmlsZS5pbgkyMDE1LTAxLTIxIDExOjMyOjM1LjQ0NzMwNTM5NCArMDAwMAorQEAgLTU4Nyw2ICs1ODcsNyBAQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI1MzQsNiArMjUzNSw3IEBACisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMTMgMTc6NDA6MjYuMTMxMDEyNzI1ICswMDAwCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMjEgMTE6MzA6MDguOTI4NDI2NDkyICswMDAwCitAQCAtNTksNiArNTksMTAgQEAKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggZjk0YWUxNy4uZDk4YjQwYiAxMDA2NDQKKy0tLSBhL2djYy9kZWZhdWx0cy5oCisrKysgYi9nY2MvZGVmYXVsdHMuaAorQEAgLTEzOTAsNCArMTM5MCwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAKKyAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5ZjBiNzgxLi4xNzRmY2E4IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMTg5LDEzICsxMTg5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGJkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gODYxYmNmZDRhZTgxNGYzNTFlMGM2NjhlZTI2ZDAxZDEzMzFlMDQyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE1OjI3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzYvMzddIFVzZSBTWVNURU1MSUJTX0RJUiByZXBsYWNlbWVudCBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcKKyBiYXNlX2xpYmRpcgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAorICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfS5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0uc28uMSIKKyAKKyAjZGVmaW5lIENQUF9TUEVDICIle3B0aHJlYWQ6LURfUkVFTlRSQU5UfSIKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVmYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTk4IEBACitCZWluZyBhYmxlIHRvIGJ1aWxkIGEgbmF0aXZlc2RrIGdjYyBpcyB1c2VmdWwsIHBhcnRpY3VsYXJseSBpbiBjYXNlcword2hlcmUgdGhlIGhvc3QgY29tcGlsZXIgbWF5IGJlIG9mIGFuIGluY29tcGF0aWJsZSB2ZXJzaW9uIChvciBhIDMyCitiaXQgY29tcGlsZXIgaXMgbmVlZGVkKS4KKworU2FkbHksIGJ1aWxkaW5nIG5hdGl2ZXNkay1nY2MgaXMgbm90IHN0cmFpZ2h0IGZvcndhcmQuIFdlIGluc3RhbGwKK25hdGl2ZXNkay1nY2MgaW50byBhIHJlbG9jYXRhYmxlIGxvY2F0aW9uIGFuZCB0aGlzIG1lYW5zIHRoYXQgaXRzCitsaWJyYXJ5IGxvY2F0aW9ucyBjYW4gY2hhbmdlLiAiTm9ybWFsIiBzeXNyb290IHN1cHBvcnQgZG9lc24ndCBoZWxwCitpbiB0aGlzIGNhc2Ugc2luY2UgdGhlIHZhbHVlcyBvZiBwYXRocyBsaWtlICJsaWJkaXIiIGNoYW5nZSwgbm90IGp1c3QKK2Jhc2Ugcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHN5c3RlbS4KKworSW4gb3JkZXIgdG8gaGFuZGxlIHRoaXMgd2UgZG8gdHdvIHRoaW5nczoKKworYSkgQWRkICVyIGludG8gc3BlYyBmaWxlIG1hcmt1cCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgaW5qZWN0ZWQgcGF0aHMKKyAgIHN1Y2ggYXMgU1lTVEVNTElCU19ESVIgKHNlZSBnY2NfbXVsdGlsaWJfc2V0dXAoKSkuCitiKSBBZGQgb3RoZXIgcGF0aHMgd2hpY2ggbmVlZCByZWxvY2F0aW9uIGludG8gYSAuZ2NjcmVsb2NwcmVmaXggc2VjdGlvbgorICAgd2hpY2ggdGhlIHJlbG9jYXRpb24gY29kZSB3aWxsIG5vdGljZSBhbmQgYWRqdXN0IGF1dG9tYXRpY2FsbHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxNS83LzI4CitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1ZmQzZDBhLi4yZGUyOWFhIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMjAsNiArMTIwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IFRBUkdFVF9TWVNURU1fUk9PVDsKKyAjZWxzZQorIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSAwOworICNlbmRpZgorKyAKKytzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOworIAorIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KKyAKK0BAIC0zODQsNiArMzg2LDcgQEAgb3Igd2l0aCBjb25zdGFudCB0ZXh0IGluIGEgc2luZ2xlIGFyZ3VtZW50LgorICAlRyAgICAgcHJvY2VzcyBMSUJHQ0NfU1BFQyBhcyBhIHNwZWMuCisgICVSICAgICBPdXRwdXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0X3N5c3RlbV9yb290IGFuZAorICAgICAgICAgdGFyZ2V0X3N5c3Jvb3Rfc3VmZml4LgorKyAlciAgICAgT3V0cHV0IHRoZSBiYXNlIHBhdGggdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeAorICAlUyAgICAgcHJvY2VzcyBTVEFSVEZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgUyBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVFICAgICBwcm9jZXNzIEVOREZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgRSBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVDICAgICBwcm9jZXNzIENQUF9TUEVDIGFzIGEgc3BlYy4KK0BAIC0xMjE4LDEwICsxMjIxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgICAgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBiZWNhdXNlLCBpbiB0aGF0IGNhc2UsIHdlIGtub3cgd2hlcmUgdGhlCisgICAgY29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgdXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoYXQKKyAgICBsb2NhdGlvbiBpbnN0ZWFkLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfZXhlY19wcmVmaXggPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfbGliZXhlY19wcmVmaXggPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfYmluZGlyX3ByZWZpeCA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2V4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2JpbmRpcl9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKytzdGF0aWMgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7CisgCisgLyogRm9yIG5hdGl2ZSBjb21waWxlcnMsIHRoZXNlIGFyZSB3ZWxsLWtub3duIHBhdGhzIGNvbnRhaW5pbmcKKyAgICBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IgY3Jvc3MKK0BAIC0xMjI5LDkgKzEyMzIsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX2V4ZWNfcHJlZml4ID0gTURfRVhFQ19QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXggPSBNRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4XzEgPSBNRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMQorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMjsKKyAKKyAvKiBBIHJlbGF0aXZlIHBhdGggdG8gYmUgdXNlZCBpbiBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiB0b29scworQEAgLTUzMDUsNiArNTMwOCwxMSBAQCBkb19zcGVjXzEgKGNvbnN0IGNoYXIgKnNwZWMsIGludCBpbnN3aXRjaCwgY29uc3QgY2hhciAqc29mdF9tYXRjaGVkX3BhcnQpCisgCSAgICAgIH0KKyAJICAgIGJyZWFrOworIAorKyAgICAgICAgICBjYXNlICdyJzoKKysgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2ssIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgsCisrCQkgICAgICBzdHJsZW4gKHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgpKTsKKysgICAgICAgICAgICBicmVhazsKKysKKyAJICBjYXNlICdTJzoKKyAJICAgIHZhbHVlID0gZG9fc3BlY18xIChzdGFydGZpbGVfc3BlYywgMCwgTlVMTCk7CisgCSAgICBpZiAodmFsdWUgIT0gMCkKKworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCitpbmRleCBkYWQ2OWU2Li5jZjQzZjI4IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTM1LDYgKzM1LDMwIEBACisgIyB1bmRlZiBDUk9TU19JTkNMVURFX0RJUgorICNlbmRpZgorIAorK3N0YXRpYyBjaGFyIEdQTFVTUExVU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR0NDX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdDQ19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVDsKKysjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBMT0NBTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBMT0NBTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgUFJFRklYX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFBSRUZJWF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBGSVhFRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBGSVhFRF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBDUk9TU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBDUk9TU19JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFRPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gVE9PTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisrc3RhdGljIGNoYXIgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUjsKKysjZW5kaWYKKysKKyBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjaWZkZWYgSU5DTFVERV9ERUZBVUxUUworID0gSU5DTFVERV9ERUZBVUxUUzsKK0BAIC00MiwzOCArNjYsMzggQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgPSB7CisgI2lmZGVmIEdQTFVTUExVU19JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgZ2VuZXJpYyBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyB0YXJnZXQtZGVwZW5kZW50IGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgYmFja3dhcmQgYW5kIGRlcHJlY2F0ZWQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworLSAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBHQ0NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKy0gICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVIsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAyIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCistICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgUFJFRklYX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZml4aW5jbHVkZXMuICAqLworLSAgICB7IEZJWEVEX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwKKysgICAgeyBGSVhFRF9JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsCisgICAgICAgLyogQSBtdWx0aWxpYiBzdWZmaXggbmVlZHMgYWRkaW5nIGlmIGRpZmZlcmVudCBtdWx0aWxpYnMgdXNlCisgCSBkaWZmZXJlbnQgaGVhZGVycy4gICovCisgI2lmZGVmIFNZU1JPT1RfSEVBREVSU19TVUZGSVhfU1BFQworQEAgLTg1LDE2ICsxMDksMTYgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2VuZGlmCisgI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisgICAgIC8qIE9uZSBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IENST1NTX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisgICAgIC8qIEFub3RoZXIgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgVE9PTF9JTkNMVURFX0RJUlZBUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKyAgICAgLyogL3Vzci9pbmNsdWRlIGNvbWVzIGRlYWQgbGFzdC4gICovCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgIH07CitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuaCBiL2djYy9jcHBkZWZhdWx0LmgKK2luZGV4IDMwYjZmZWQuLjJlZjk2YjcgMTAwNjQ0CistLS0gYS9nY2MvY3BwZGVmYXVsdC5oCisrKysgYi9nY2MvY3BwZGVmYXVsdC5oCitAQCAtMzMsNyArMzMsOCBAQAorIAorIHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUKKyB7CistICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrICBjb25zdCBjaGFyICpmbmFtZTsgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKworICAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIAkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLworICAgY29uc3QgY2hhciBjcGx1c3BsdXM7CQkvKiBPbmx5IGxvb2sgaGVyZSBpZiB3ZSdyZSBjb21waWxpbmcgQysrLiAgKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK1NlYXJjaCB0YXJnZXQgc3lzcm9vdCBnY2MgdmVyc2lvbiBzcGVjaWZpYyBkaXJzIHdpdGggbXVsdGlsaWIuCisKK1dlIGluc3RhbGwgdGhlIGdjYyBsaWJyYXJpZXMgKHN1Y2ggYXMgY3J0YmVnaW4ucCkgaW50bworPHN5c3Jvb3Q+PGxpYmRpcj4vPHRhcmdldC1zeXM+LzUuMi4wLword2hpY2ggaXMgYSBkZWZhdWx0IHNlYXJjaCBwYXRoIGZvciBHQ0MgKGFrYSBtdWx0aV9zdWZmaXggaW4gdGhlIAorY29kZSBiZWxvdykuIDx0YXJnZXQtc3lzPiBpcyAnbWFjaGluZScgaW4gZ2NjJ3MgdGVybWlub2xvZ3kuIFdlIHVzZQordGhlc2UgZGlyZWN0b3JpZXMgc28gdGhhdCBtdWx0aXBsZSBnY2MgdmVyc2lvbnMgY291bGQgaW4gdGhlb3J5IAorY28tZXhpc3Qgb24gdGFyZ2V0LgorCitXZSBvbmx5IHdhbnQgdG8gYnVpbGQgb25lIGdjYy1jcm9zcy1jYW5hZGlhbiBwZXIgYXJjaCBhbmQgaGF2ZSB0aGlzIHdvcmsgCitmb3IgYWxsIG11bHRpbGlicy4gPHRhcmdldC1zeXM+IGNhbiBiZSBoYW5kbGVkIGJ5IG1hcHBpbmcgdGhlIG11bHRpbGliCis8dGFyZ2V0LXN5cz4gdG8gdGhlIG9uZSB1c2VkIGJ5IGdjYy1jcm9zcy1jYW5hZGlhbiwgZS5nLiBtaXBzNjQtcG9sa21sbGliMzItbGludXggCitpcyBzeW1saW5rZWQgdG8gYnkgbWlwczY0LXBva3ktbGludXguCisKK1RoZSBkZWZhdWx0IGdjYyBzZWFyY2ggcGF0aCBpbiB0aGUgdGFyZ2V0IHN5c3Jvb3QgZm9yIGEgImxpYjY0IiBtdXRsaWxpYiBpczoKKworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCit3aGljaCBtZWFucyB0aGF0IHRoZSBsaWIzMiBjcnRiZWdpbi5vIHdpbGwgYmUgZm91bmQgYW5kIHRoZSBsaWI2NCBvbmVzCit3aWxsIG5vdCB3aGljaCBsZWFkcyB0byBjb21waWxlciBmYWlsdXJlcy4KKworVGhpcyBwYXRjaCBpbmplY3RzIGEgbXVsdGlsaWIgdmVyc2lvbiBvZiB0aGF0IHBhdGggZmlyc3Qgc28gdGhlIGxpYjY0CitiaW5hcmllcyBjYW4gYmUgZm91bmQgZmlyc3QuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIHNlYXJjaCBwYXRoIGJlY29tZXM6CisKKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworUlAgMjAxNS83LzMxCisKK0luZGV4OiBnY2MtNS4yLjAvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTUuMi4wLm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTUuMi4wL2djYy9nY2MuYworQEAgLTIzMDUsNyArMjMwNSw3IEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAorICAgICAgIGlmIChwYXRoID09IE5VTEwpCisgCXsKKyAJICBsZW4gPSBwYXRocy0+bWF4X2xlbiArIGV4dHJhX3NwYWNlICsgMTsKKy0JICBsZW4gKz0gTUFYIChNQVggKHN1ZmZpeF9sZW4sIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKysJICBsZW4gKz0gTUFYICgoc3VmZml4X2xlbiArIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKyAJICBwYXRoID0gWE5FV1ZFQyAoY2hhciwgbGVuKTsKKyAJfQorIAorQEAgLTIzMTcsNiArMjMxNywzMyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAJICAvKiBMb29rIGZpcnN0IGluIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkuICAqLworIAkgIGlmICghc2tpcF9tdWx0aV9kaXIpCisgCSAgICB7CisrCSAgICAgIGlmICghKHBsLT5vc19tdWx0aWxpYiA/IHNraXBfbXVsdGlfb3NfZGlyIDogc2tpcF9tdWx0aV9kaXIpKQorKwkgICAgICAgIHsKKysJICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNfbXVsdGk7CisrCSAgICAgICAgICBzaXplX3QgdGhpc19tdWx0aV9sZW47CisrCisrCSAgICAgICAgICBpZiAocGwtPm9zX211bHRpbGliKQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9vc19kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX29zX2Rpcl9sZW47CisrCQkgICAgfQorKwkgICAgICAgICAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX2Rpcl9sZW47CisrCQkgICAgfQorKworKwkgICAgICAgICAgLyogTG9vayBpbiBtdWx0aWxpYiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5IGZpcnN0ICovCisrCSAgICAgICAgICBpZiAodGhpc19tdWx0aV9sZW4pCisrCSAgICAgICAgICAgIHsKKysJCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgdGhpc19tdWx0aSwgdGhpc19tdWx0aV9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICBtZW1jcHkgKHBhdGggKyBsZW4gKyB0aGlzX211bHRpX2xlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworKwkgICAgICAgICAgICAgICAgaWYgKHJldCkKKysJCSAgICAgICAgICBicmVhazsKKysJICAgICAgICAgICAgfQorKwkgICAgICAgIH0KKysKKyAJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKyAJICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworIAkgICAgICBpZiAocmV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5MWY1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMKQEAgLTAsMCArMSwxMjAgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjUuMi4wIgorCisjU05BUCA9ICI1LTIwMTUwNDA1IgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjUuMi4wIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNS4yOiR7RklMRV9ESVJOQU1FfS9nY2MtNS4yL2JhY2twb3J0OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisjQkFTRVVSSSA9ICJodHRwOi8vd3d3Lm5ldGd1bGwuY29tL2djYy9zbmFwc2hvdHMvJHtTTkFQfS9nY2MtJHtTTkFQfS50YXIuYnoyIgorQkFTRVVSSSA9ICIke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiYTUxYmNmZWIzZGE3ZGQ0YzYyM2UyNzIwN2VkNDM0NjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWY4MzViMDRiNWY3ZGQ0ZjRkMmRjOTYxOTBlYzE2MjFiOGQ4OWYyZGM2ZjYzOGY5ZjhiYzFiMTAxNGJhOGNhZCIKKworU1JDX1VSSSA9ICJcCisgICAgICAgICAgICR7QkFTRVVSSX0gXAorICAgICAgICAgICAke0JBQ0tQT1JUU30gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWxpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOS1leHBvcnQtQ1BQLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM3LXByNjU3NzkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICIKKworQkFDS1BPUlRTID0gIiIKKyNTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7U05BUH0iCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCisjIExhbmd1YWdlIE92ZXJyaWRlcworRk9SVFJBTiA9ICIiCitKQVZBID0gIiIKKworTFRPID0gIi0tZW5hYmxlLWx0byIKKworRVhUUkFfT0VDT05GX0JBU0UgPSAiXAorICAgICR7TFRPfSBcCisgICAgLS1lbmFibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzc2NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGEwZmVlMGNlZTNkNGJkNGFhYjFlM2E4ZTA0NDQ2Zjk5ZDkxOGM0ZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgMiArLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNzYxNmY4OC4uNTBlN2NiYyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzQ2NCw3ICs3NDY0LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGM4NWEwOC4uZjM0YWY3ZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzEwNCw3ICszMTA0LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDMzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDc2MzUyNDhhNGM5YjUxZDcyM2Q3MjFhY2FlZWI1ZjJmMTE5NTc5ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzM1XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8IDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCA3NDNkOTUxLi5hZTRlYTYwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2EyNTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gM2FlZTU4YWQwNDNhZjMzYWIwMGM5Y2Q3YmM4OGYwY2FkZTgzZjIzNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8IDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8IDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggNmRhNWYyMi4uMmY4NWMyZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggZWUzZWY4Ni4uN2ZkNTQ4NSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCBmZDUyYjczLi4yNjI3Y2YzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzk0N2E3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gOWY3M2UwNjMxNWM5NDYyOWZiOTAyYmQ5NDIxOTY2N2NmODMwN2I4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNyArKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDExNyArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyAgICAgICAgfCAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAzMDAgKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgNjkyICsrKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3NSArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCAgICAgICB8ICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCBhMWUzMDFmLi4wZmU5MzI2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTE5ODMsNiArMTk4Myw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjE2Nyw2ICsyMTcwLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGY1YjI4ZjQuLmZiYWQ2NjcgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU5MTMsNiArMTU5MTMsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYxOTEsNiArMTYxOTQsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDA2YjVkNDcuLjdkM2Y4MzUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCBhYTFiMmZhLi40NWM0NjE3IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK0BAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDUzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjU3IEBACitGcm9tIGE4ZTY4MzkxN2EzZThhNjY0MjYzOWU2NWMwNmQ0ZDRmYzQ2Y2M4YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDA1LzM1XSB1Y2xpYmMtbG9jYWxlLW5vX194CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCA0NSArKysrKysrKysrKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNCAtLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMSArCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgNyAtLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgNyAtLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgNyArLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxOCArKysrLS0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA0IC0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDMgLS0KKyAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmCisgCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKKysjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKKysjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAorKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKKysjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCisrIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCisrIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKKysjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKKysjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKysKKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAorKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAorKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKKysjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAorKyMgZW5kaWYKKysKKysjZWxzZQorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCisrIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KKysvLworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQorKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICB0ZW1wbGF0ZTw+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorIHsKKyAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyB9CisrI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKyAjZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK2luZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTM4LDEzICszOCw2IEBACisgI3VuZGVmIF9MSUJDCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK2luZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7CistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAgIH0KKyAKK0BAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICB7CisgICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAgLy8gYmUgdXNlZC4KKy0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTQwLDkgKzQwLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIGNkYjllOWM5NDQwYmViNTliYzIwNDc2ZWVhNWE5Y2YyNTM4Y2QxOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDA2LzM1XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgIDQgKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4Yjc5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDI0NGI5ZDFiNWNjNmQ1MzgyOTM1MTkyOTk4NTMxZWU3MGFmYjI2MmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgIDMgKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgNzQgKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgNDIgKysrKysrLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCA1MSArKysrKysrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8IDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDM0ICsrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAxOCArKysrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8IDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjZiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwYTgwZjYwZGUwOGJkNTgyOWNhMWIzNzU4ZjcwYTkyYjYxZGRhMTQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCA2YjM4ZjJkLi5mY2E5OGZmIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1YjJhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDdiN2NhZjQzMDVhNTRmYTRkZmRkMGVmZDViZDQxY2I5NGNiY2Y0M2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IDM3ZjAxY2EuLmYwMGMwNmQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTE0NCw3ICsxNDQsNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUwMmVmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTkyIEBACitGcm9tIGQxZTg1YTM2M2ZmY2QyNTllOWIwODQxYjg1Y2ExMGFmMmYzMWJkNzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDEwLzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9jb21tb24ub3B0ICAgICAgfCAgNCArKysrCisgZ2NjL2NvbmZpZy5pbiAgICAgICB8ICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAxNiArKysrKysrKysrKysrKysrCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8IDEwICsrKysrKysrKysKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgIDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8IDE5ICsrKysrKysrKysrKysrKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9jb21tb24ub3B0IGIvZ2NjL2NvbW1vbi5vcHQKK2luZGV4IGI0OWFjNDYuLjc4M2QyMzEgMTAwNjQ0CistLS0gYS9nY2MvY29tbW9uLm9wdAorKysrIGIvZ2NjL2NvbW1vbi5vcHQKK0BAIC02MjMsNiArNjIzLDEwIEBAIFdyZXR1cm4tbG9jYWwtYWRkcgorIENvbW1vbiBWYXIod2Fybl9yZXR1cm5fbG9jYWxfYWRkcikgSW5pdCgxKSBXYXJuaW5nCisgV2FybiBhYm91dCByZXR1cm5pbmcgYSBwb2ludGVyL3JlZmVyZW5jZSB0byBhIGxvY2FsIG9yIHRlbXBvcmFyeSB2YXJpYWJsZS4KKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcuaW4gYi9nY2MvY29uZmlnLmluCitpbmRleCBmMmVkMzAxLi5mMjkwYzZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5pbgorKysrIGIvZ2NjL2NvbmZpZy5pbgorQEAgLTE2OCw2ICsxNjgsMTIgQEAKKyAjZW5kaWYKKyAKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzICovCisrI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysjZW5kaWYKKysKKysKKyAvKiBEZWZpbmUgaWYgeW91IHdhbnQgYWxsIG9wZXJhdGlvbnMgb24gUlRMICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCisgICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5NTIzNzczLi4xODE3NDhlIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTkzMiw2ICs5MzIsNyBAQCB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV9saW5rX211dGV4CisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2hvc3Rfc2hhcmVkCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKK0BAIC0xNjYxLDYgKzE2NjIsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWVuYWJsZS1ob3N0LXNoYXJlZCAgICBidWlsZCBob3N0IGNvZGUgYXMgc2hhcmVkIGxpYnJhcmllcworICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKK0BAIC0yODA4Nyw2ICsyODA5MCwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNjhiMGVlOC4uOGIwNzA3OCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC01NTcxLDYgKzU1NzEsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicywKKyAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICAgICAgWzFdLAorKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgQUNfU1VCU1Qoc3ViZGlycykKKyBBQ19TVUJTVChzcmNkaXIpCitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDUyMGMyYzUuLjBkZjhhNDcgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjY5LDYgKzI2OSw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgIC1Xbm8tc2hhZG93LWl2YXIgQGdvbAorIC1Xc2hpZnQtY291bnQtbmVnYXRpdmUgLVdzaGlmdC1jb3VudC1vdmVyZmxvdyBAZ29sCitAQCAtNDQzMiw2ICs0NDMzLDE0IEBAIG1hZGUgdXAgb2YgZGF0YSBvbmx5IGFuZCB0aHVzIHJlcXVpcmVzIG5vIHNwZWNpYWwgdHJlYXRtZW50LiAgQnV0LCBmb3IKKyBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sgdG8gYmUKKyBtYWRlIGV4ZWN1dGFibGUgaW4gb3JkZXIgZm9yIHRoZSBwcm9ncmFtIHRvIHdvcmsgcHJvcGVybHkuCisgCisrQGl0ZW0gLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQG9waW5kZXggV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstSX0gb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0KKytkaXJlY3RvcmllcyBzdWNoIGFzIEBmaWxley91c3IvaW5jbHVkZX0gd2hlbiBjcm9zcyBjb21waWxpbmcuICBUaGlzCisrb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2gKKytkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0IGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgdGhlIHRhcmdldAorK3N5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KKysKKyBAaXRlbSAtV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV25vLWZsb2F0LWVxdWFsCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBkOTU2YzM2Li42NzViY2MxIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC04MzUsNiArODM1LDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICIle2Z1c2UtbGQ9KjotZnVzZS1sZD0lKn0gIiBMSU5LX0NPTVBSRVNTX0RFQlVHX1NQRUMgXAorICAgICIlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fSAiIFZUQUJMRV9WRVJJRklDQVRJT05fU1BFQyAiIFwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgIiBDSEtQX1NQRUMgIiBcCisgICAgICV7Zm9wZW5hY2N8Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggNmM1NGNhNi4uY2MwYzkyMSAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODMsNiArMzg0LDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgCX0KKyAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKKyAgICAgfQorKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgeworKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKKysKKysgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKKysgICAgICAgICB7CisrICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKysgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKysgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKKysgICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2N2Q5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBmMTU4ZmNjMDg0ZTg4YjFkOGQxZWNmNWIwMDVkMzc3NzY1YWVmMTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8zNV0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IGNjMGM5MjEuLjBiYzFmNjcgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzk0LDcgKzM5NCw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmY2E3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gYTU0MjM5Y2JkYzZmOTNjNmQ3NGVhNmIwNzhmMTQ3MDc3MGM0ZjVhYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDUwZTdjYmMuLjZiOTc2OTMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY3MzMsNiArNjczMywzOCBAQCBmaQorIAorIAorIAorKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCisrIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKKysjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgorKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCisrIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCisrIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KKytpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisgIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCisgIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KKyBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2MwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbSBkNTE1MWJlYmQwNzllOTgxZGM3MTBmMmEwMzE4MzBkODljYjFlNzJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTA6MDYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8zNV0gNjQtYml0IG11bHRpbGliIGhhY2suCisKK0dDQyBoYXMgaW50ZXJuYWwgbXVsdGlsaWIgaGFuZGxpbmcgY29kZSBidXQgaXQgYXNzdW1lcyBhIHZlcnkgc3BlY2lmaWMgcmlnaWQgZGlyZWN0b3J5CitsYXlvdXQuIFRoZSBidWlsZCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlsaWIgbGF5b3V0IGlzIHZlcnkgZ2VuZXJpYyBhbmQgYWxsb3dzCitjb21wbGV0ZSBjdXN0b21pc2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorCitUaGlzIHBhdGNoIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byBhbGxvdyBhbnkgY3VzdG9tIGRpcmVjdG9yaWVzIHRvIGJlIHBhc3NlZCBpbnRvIGdjYworYW5kIGhhbmRsZWQgY29ycmVjdGx5LiBJdCBmb3JjZXMgZ2NjIHRvIHVzZSB0aGUgYmFzZV9saWJkaXIgKHdoaWNoIGlzIHRoZSBjdXJyZW50CitkaXJlY3RvcnksICIuIikuIFdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgZWFjaCBtdWx0aWxpYiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgd2UgZG9uJ3QKK2tub3cgd2hpY2ggY29tcGlsZXIgb3B0aW9ucyBtYXkgYmUgYmVpbmcgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLiBTaW5jZSB3ZSBoYXZlIGEgY29tcGlsZXIKK3BlciBtdWxpdGxpYiBhdCB0aGlzIHBvaW50IHRoYXQgaXNuJ3QgYW4gaXNzdWUuCisKK1RoZSBvbmUgcHJvYmxlbSBpcyB0aGUgdGFyZ2V0IGNvbXBpbGVyIGlzIG9ubHkgZ29pbmcgdG8gd29yayBmb3IgdGhlIGRlZmF1bHQgbXVsdGxpbGliIGF0Cit0aGlzIHBvaW50LiBJZGVhbGx5IHdlJ2QgZmlndXJlIG91dCB3aGljaCBtdWx0aWxpYnMgd2VyZSBiZWluZyBlbmFibGVkIHdpdGggd2hpY2ggcGF0aHMKK2FuZCBiZSBhYmxlIHRvIHBhdGNoIHRoZXNlIGVudHJpZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBjb3JyZWN0IHBhdGhzIGJ1dCB0aGlzIHdlCitkb24ndCBoYXZlIHN1Y2ggY29kZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGUgdGFyZ2V0IGdjYyByZWNpcGUgc2hvdWxkIGRvCithbmQgb3ZlcnJpZGUgdGhlc2UgcGxhdGZvcm0gZGVmYXVsdHMgaW4gaXRzIGJ1aWxkIGNvbmZpZy4KKworUlAgMTUvOC8xMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRWx2aXMgRG93c29uIDxlbHZpcy5kb3dzb25AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgICB8ICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8IDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgNSArKy0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgYi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitpbmRleCBmNmRiYjc4Li5kNzcwZGE1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAoraW5kZXggN2U5NjQwNi4uYjcyZGNiMCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitpbmRleCBiNmIzNTFkLi4xZDViMzdhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiwxMCArMjYsOSBAQAorICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgorIAorIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgorLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKKytNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgorIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCistTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQorK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKyAKKyByczYwMDAtbGludXgubzogJChzcmNkaXIpL2NvbmZpZy9yczYwMDAvcnM2MDAwLWxpbnV4LmMKKyAJJChDT01QSUxFKSAkPAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzRmZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorRnJvbSBkN2I0MmQ5M2QwNzdiMjUyM2MyNmYwZGZmMGI2YzQ0ZmRmZmY5ZDNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8IDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgOCArKysrKysrLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggOTgzZjRhOC4uOTY5MjRmNiAxMDA2NDQKKy0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAorKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitAQCAtMTU0Myw2ICsxNTQzLDEwIEBAIG5vc3RkaW5jKysKKyBDKysgT2JqQysrCisgRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrCisgCisrbm9zdGRsaWIrKworK0RyaXZlcgorK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKKysKKyBvCisgQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCisgOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKK2RpZmYgLS1naXQgYS9nY2MvY3AvZysrc3BlYy5jIGIvZ2NjL2NwL2crK3NwZWMuYworaW5kZXggNjUzNmQ3ZS4uZjU3YTVkNCAxMDA2NDQKKy0tLSBhL2djYy9jcC9nKytzcGVjLmMKKysrKyBiL2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqKmluX2RlY29kZWRfb3B0aW9ucywKKyAgICAgICBzd2l0Y2ggKGRlY29kZWRfb3B0aW9uc1tpXS5vcHRfaW5kZXgpCisgCXsKKyAJY2FzZSBPUFRfbm9zdGRsaWI6CisrCWNhc2UgT1BUX25vc3RkbGliX186CisgCWNhc2UgT1BUX25vZGVmYXVsdGxpYnM6CisgCSAgbGlicmFyeSA9IC0xOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitpbmRleCAwZGY4YTQ3Li43Mzg1NmQwIDEwMDY0NAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTE5NSw2ICsxOTUsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisgLWZ2dGFibGUtdmVyaWZ5PUBye1t9c3RkQHJ7fH1wcmVpbml0QHJ7fH1ub25lQHJ7XX0gQGdvbAorIC1mdnR2LWNvdW50cyAtZnZ0di1kZWJ1ZyBAZ29sCisrLW5vc3RkbGliKysgQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAorIC1XYWJpPUB2YXJ7bn0gIC1XYWJpLXRhZyAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ4OCw3ICs0ODksNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorIC1zdGF0aWMtbGlibXB4IC1zdGF0aWMtbGlibXB4d3JhcHBlcnMgQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9IC16IEB2YXJ7a2V5d29yZH19CisgCitAQCAtMTExODUsNiArMTExODYsMTEgQEAgVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCisgbGliYy4gIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgc3VwcGxpZWQgdGhyb3VnaCBzb21lIG90aGVyCisgbWVjaGFuaXNtIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorIAorK0BpdGVtIC1ub3N0ZGxpYisrCisrQG9waW5kZXggbm9zdGRsaWIrKworK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorK09ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgorKworIEBjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vc3RkbGlifQorIEBjaW5kZXggQG9wdGlvbnstbm9zdGRsaWJ9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKyBAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9zdGRsaWJ9CitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA2NzViY2MxLi5hMzdlYzhiIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC04NDUsNiArODQ1LDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9IH19fX19fSIKKyAjZW5kaWYKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjFlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSBhZDE1OTI3OTE2OTgyODZiODA2MjZkZGQ1Njc5ZmYyZWY0NTdhYjc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggMTgxNzQ4ZS4uOTAwOTA2NCAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNjQ1MSwxMyArMjY0NTEsNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA4YjA3MDc4Li5jN2EyOGI0IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQzNjEsMTMgKzQzNjEsNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWRlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMmIyMmVlMmU0NDY4OGY4YTcyYjlhZjc2YTA0MzFkODZiYWMwMGQ0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMzVdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8IDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBhMzdlYzhiLi44N2I0N2M1IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00MzUyLDYgKzQzNTIsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTA2MTMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSAxMmY0NjdiYzZkODk1M2JhMzQyZmU1MTY2YjlhMmYzOTdiMzM0Nzk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbgorICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKK29jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Cit3b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KK3RtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJworCitTbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDRhYjc0MDUuLjY2MWFlMTcgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTUwMiw3ICs1MDIsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDkwMDkwNjQuLmYwNTljMmYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE4NDEsOCArMTE4NDEsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBjN2EyOGI0Li4yZTY2OGE1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE4MzIsOCArMTgzMiw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCBjMzJmMDg3Li42ODAzYWI5IDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDksNyArMTA5LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzMzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDk1NTA2YjQ0YzllZjQ3MjVmZWY1MmZhODY0ZDNkM2ZjZjkzMWU0NDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAorU3ViamVjdDogW1BBVENIIDE4LzM1XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KKworKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKK3VzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKK2RpcmVjdG9yeS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8IDIgKy0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK2luZGV4IGUxNTkyZjcuLjc2ZDE5YjMgMTAwNzU1CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTEyNzQ3LDcgKzEyNzQ3LDcgQEAgZXNhYworIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBhY19leHQ9JHthY19mY19zcmNleHQtZn0KKyBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworaW5kZXggMzVhOGIzOS4uNmEwZDhhOSAxMDA2NDQKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitAQCAtMjQwLDcgKzI0MCw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCisgCisgIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUzOTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorRnJvbSA5NGY2MTljZDMyNTdlMzVlMjBhODc3NjQwZDBjYjkwYzJiM2VmYzE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8zNV0gbGliZ2NjLXNqbGotY2hlY2sKKworYWNfZm5fY190cnlfY29tcGlsZSBkb2VzbnQgc2VlbSB0byBrZWVwIHRoZSBpbnRlcm1lZGlhdGUgZmlsZXMKK3doaWNoIGFyZSBuZWVkZWQgZm9yIHNqbGogdGVzdCB0byBwYXNzIHNpbmNlIGl0IGdyZXBzIGludG8gdGhlCitnZW5lcmF0ZWQgZmlsZS4gU28gd2UgcnVuIHRoZSBjb21waWxlciBjb21tYW5kIHVzaW5nIEFDX1RSWV9DT01NQU5ECit3aGljaCB0aGVuIGdlbmVyYXRlcyB0aGUgbmVlZGVkIC5zIGZpbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJnY2MvY29uZmlndXJlICAgIHwgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAxMCArKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitpbmRleCAwOGM5MzE5Li41ZmZhZWIzIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTQ1NzAsMTcgKzQ1NzAsMTkgQEAgdm9pZCBmb28gKCkKKyB9CisgCisgX0FDRU9GCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistaWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6CisraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCisgICBmaQorIGZpCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorIHJtIC1mIGNvbmZ0ZXN0KgorIAorIGZpCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDFjNDA1ZTguLmY1Mjk3NWQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtMjU1LDE2ICsyNTUsMTQgQEAgdm9pZCBmb28gKCkKKyAgIGJhcigpOworIH0KKyBdKV0pCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAorLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCisrICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKy0gIGZpXSkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisrICBmaQorK2ZpCisgcm0gLWYgY29uZnRlc3QqCisgXSkKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJjNjhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA2ZTYyODNkNjQ1YzgzY2E1MzQyMTlhMDJhZTg4MmEzZDdiZTk1ZmYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCBiMDcyOGYwLi5lNjllZTdkIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggODdiNDdjNS4uZTZlZmFlNyAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTE0Miw3ICsxMTQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGNwcC1vdXRwdXQiLAorLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisrICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAorICAgeyJAYXNzZW1ibGVyIiwKKyAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhZDQ4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3Zjc2NmZjNDdmOTM4OGRkMDA5NDg1MmE0M2YxYWYyNTY4YjRiOWIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8zNV0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBjYjA4YTVjLi5iMTU1NzQ0IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMjAxMSwyOSArMjAxMSwyOSBAQCBtaXBzKi0qLWxpbnV4KikJCQkJIyBMaW51eCBNSVBTLCBlaXRoZXIgZW5kaWFuLgorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHMzMgorIAkJCTs7CisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCisgCQkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3Qtc3QiCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHM2NG9jdGVvbiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0NQVV9TVFJJTkdfREVGQVVMVD1cXFwib2N0ZW9uXFxcIiIKKyAJCQl0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19TT0ZUX0ZMT0FUX0FCSQorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzaXNhNjRyNiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczY0cjYKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwc2lzYTY0cjIqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHM2NHIyCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHM2NCotKi1saW51eCogfCBtaXBzaXNhNjQqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCWVzYWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MjBkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKQEAgLTAsMCArMSwyMTYgQEAKK0Zyb20gNGY5NGFkZGVkOGI3MDQzNjQyMzg2YjMxZWQ0YzNhMWJkMDE2ZjMxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI0OjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMzVdIERlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIKKworVGhpcyBwYXRjaCBkZWZpbmVzIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKK3JlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSIHdoaWNoIGNhbiBiZSBzZXQgaW4gZ2VuZXJhdGVkIGhlYWRlcnMKK1RoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIG9mIGhhcmRjb2RlZCBtdWx0aWxpYiBpbiBnY2MKK0NoYW5nZSBpcyBvbmx5IGZvciB0aGUgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgaW4gT0UgaW5jbHVkaW5nCitTSCwgc3BhcmMsIGFscGhhIGZvciBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydCAoaWYgYW55KQorCitSZW1vdmVzIHRoZSBkb19oZWFkZXJmaXggdGFzayBpbiBtZXRhZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIHwgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICA2ICsrKy0tLQorIGdjYy9jb25maWcvbGludXguaCAgICAgICAgICAgfCAgOCArKysrLS0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgMTAgKysrKystLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXguaCAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAoraW5kZXggMmM3MGEyZi4uZGQwNDhkYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK0BAIC0yMyw4ICsyMyw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2RlZmluZSBFWFRSQV9TUEVDUyBcCisgeyAiZWxmX2R5bmFtaWNfbGlua2VyIiwgRUxGX0RZTkFNSUNfTElOS0VSIH0sCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IGU5ZDY1ZGMuLmNmZGYzZjAgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTY4LDggKzY4LDggQEAKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIGFuZCBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkuICAqLworIAorICN1bmRlZiAgR0xJQkNfRFlOQU1JQ19MSU5LRVIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIi9saWIvbGQtbGludXguc28uMyIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgIi9saWIvbGQtbGludXgtYXJtaGYuc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hcm1oZi5zby4zIgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAoraW5kZXggMTI3OWNiYS4uMWRkZTc0NyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTYyLDcgKzYyLDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggYi9nY2MvY29uZmlnL2kzODYvbGludXguaAoraW5kZXggYTEwMDk2My4uMjFiYTJiMiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2kzODYvbGludXguaAorQEAgLTIwLDQgKzIwLDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmggYi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitpbmRleCBhMjdkM2JlLi42MTg1Y2NlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorQEAgLTI3LDYgKzI3LDYgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGZfeDg2XzY0IgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05YMzIgImVsZjMyX3g4Nl82NCIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGlieDMyL2xkLWxpbnV4LXgzMi5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbGludXguaCBiL2djYy9jb25maWcvbGludXguaAoraW5kZXggODU3Mzg5YS4uMjJiOWJlNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9saW51eC5oCitAQCAtNzMsMTAgKzczLDEwIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggYi9nY2MvY29uZmlnL21pcHMvbGludXguaAoraW5kZXggOTFkZjI2MS4uYzMwNmFmYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL21pcHMvbGludXguaAorQEAgLTIyLDIwICsyMiwyMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0CisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIgIi9zeXN0ZW0vYmluL2xpbmtlcjMyIgorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAoraW5kZXggMDg3OWU3ZS4uMzFjNDMzOCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitAQCAtMzU3LDE0ICszNTcsMTQgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yfSIKKyAjZWxzZQorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMjs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xfSIKKyAjZW5kaWYKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc2gvbGludXguaCBiL2djYy9jb25maWcvc2gvbGludXguaAoraW5kZXggMGY1ZDYxNC4uMTY4NDE2YyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc2gvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitAQCAtNDMsNyArNDMsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc3BhcmMvbGludXguaCBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAoraW5kZXggNTZkZWY0Yi4uMDBiNTY0YyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc3BhcmMvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitAQCAtODMsNyArODMsNyBAQCBleHRlcm4gY29uc3QgY2hhciAqaG9zdF9kZXRlY3RfbG9jYWxfY3B1IChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK2luZGV4IGZhODA1ZmQuLjBlYjRhY2QgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK0BAIC04NCw4ICs4NCw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzdkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA4ZGI2MDYyMDU0ODdlYmIwM2VhZTc4ODgyNmZhZjY0YmQ2OTE4NDUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KKworVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCitidWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKKworaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAorCitUaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCitpdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAord291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCitUaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCiskKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDY2MWFlMTcuLjk0NzBhOTIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTMyNTUsNyArMzI1NSw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpICQkKGNkICQoc3JjZGlyKTsgZWNobyAqLmggKi5kZWYpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSAkJChjZCAkKHNyY2Rpcik7IGVjaG8gKi5oICouZGVmKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI0LURpc2FibGUtc2R0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMjE5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBlMTM2MzQyZDJmN2MwYmRiMWNmNGI1N2FkMzQ0MGQzYzllNzEwMzIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8zNV0gRGlzYWJsZSBzZHQuCisKK1dlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KK0l0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCitzZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKK2J1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgorCitSUCAyMDEyLzgvNworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitEaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBmMDU5YzJmLi45ODg1M2IzIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI3NzMzLDEyICsyNzczMywxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDJlNjY4YTUuLjUyY2RjYjggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNTIzMiwxNSArNTIzMiwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgorIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGZiYWQ2NjcuLjdkNWE2YzYgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjA4OTcsMTEgKzIwODk3LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggN2E3YzFkOC4uYjEzZWFiYyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMjksNyArMjI5LDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjUtbGlidG9vbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5NzdkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAxY2E1NDk2N2Q4ZjY3YWIwZWNhNzcyMzM0ZTVjOTI1YTVlOGM4MGNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjk6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gbGlidG9vbAorCitsaWJzdGRjKysgZnJvbSBnY2MtcnVudGltZSBnZXRzIGNyZWF0ZWQgd2l0aCAtcnBhdGg9L3Vzci9saWIvLi4vbGliIGZvciBxZW11eDg2LTY0Cit3aGVuIHJ1bm5pbmcgb24gYW0geDg2XzY0IGJ1aWxkIGhvc3QuCisKK1RoaXMgcGF0Y2ggc3RvcHMgdGhpcyBzcGVhZGluZyB0byBsaWJkaXIgaW4gdGhlIGxpYnN0ZGMrKy5sYSBmaWxlIHdpdGhpbiBsaWJ0b29sLgorQXJndWFibHksIGl0IHNob3VsZG4ndCBiZSBwYXNzaW5nIHRoaXMgaW50byBsaWJ0b29sIGluIHRoZSBmaXJzdCBwbGFjZSBidXQKK2ZvciBub3cgdGhpcyByZXNvbHZlcyB0aGUgbmFzdGllc3QgcHJvYmxlbXMgdGhpcyBjYXVzZXMuCisKK2Z1bmNfbm9ybWFsX2Fic3BhdGggd291bGQgcmVzb2x2ZSBhbiBlbXB0eSBwYXRoIHRvIGBwd2RgIHNvIHdlIG5lZWQKK3RvIGZpbHRlciB0aGUgemVybyBjYXNlLgorCitSUCAyMDEyLzgvMjQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsdG1haW4uc2ggfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDk1MDNlYzguLjAxMjFmYmEgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYzNTksNiArNjM1OSwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorIAorICAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKysgICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisrCWZ1bmNfbm9ybWFsX2Fic3BhdGggIiRpbnN0YWxsX2xpYmRpciIKKysJaW5zdGFsbF9saWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisrICAgICAgZmkKKyAKKyAgICAgICBvbGRsaWJzPQorICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhNjUyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA1ZjVjYTU3ZmNlYzRiYWZlMzc4MDM3MWQxMzQyYWNkNDBjNjA4Njk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzA6MzIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNi8zNV0gZ2NjOiBhcm12NDogcGFzcyBmaXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJLgorCitUaGUgTElOS19TUEVDIGZvciBsaW51eCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGxpbnV4LWVhYmkuaCB3aGljaAorbWVhbnMgdGhlIHZhbHVlIG9mIFRBUkdFVF9GSVhfVjRCWF9TUEVDIGdldHMgbG9zdCBhbmQgYXMgYSByZXN1bHQKK3RoZSBvcHRpb24gaXMgbm90IHBhc3NlZCB0byBsaW5rZXIgd2hlbiBjaG9zaW5nIG1hcmNoPWFybXY0CitUaGlzIHBhdGNoIHJlZGVmaW5lcyB0aGlzIGluIGxpbnV4LWVhYmkuaCBhbmQgcmVpbnNlcnRzIGl0Citmb3IgZWFiaSBkZWZhdWx0aW5nIHRvb2xjaGFpbnMuCisKK1dlIG1pZ2h0IHdhbnQgdG8gc2VuZCBpdCB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggfCA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggY2ZkZjNmMC4uMDQ4YTA2MiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNzcsMTAgKzc3LDE0IEBACisgICAgICV7bWZsb2F0LWFiaT1zb2Z0KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIn0gXAorICAgICAleyFtZmxvYXQtYWJpPSo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUICJ9IgorIAorKy8qIEZvciBhcm12NCB3ZSBwYXNzIC0tZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSSAqLworKyN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQworKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCisrCisgLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KKyAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCisgI3VuZGVmICBMSU5LX1NQRUMKKy0jZGVmaW5lIExJTktfU1BFQyBFQUJJX0xJTktfU1BFQwkJCQkJXAorKyNkZWZpbmUgTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDIEVBQklfTElOS19TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDVkYTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSA0ODRlOGMxZThkNDNlNjI2ZWUyZGRiZGU5ZWI4ZTBhZjdhMTc2YWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5ODg1M2IzLi5kMGVjNTBmIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExODIxLDEwICsxMTgyMSwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTExODM1LDYgKzExODQ1LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDUyY2RjYjguLjNjZjYwNmEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTgxMiwxMCArMTgxMiwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE4MjYsNiArMTgzNiwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTAyZTkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDExMmNhOWY4NjAxMTRiYzc5MjczYTc5ZWQ0MjcyMmZkYzlkZWQ2ZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwOTozOTozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBBdm9pZCB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYQorIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDAxMjFmYmEuLjUyYmRiZGIgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI5LWV4cG9ydC1DUFAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDVhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gYTk4MzAzM2YxMzI3YTY5MmFmNTViZThkMWFhNjFhZWRlMThjNGFmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA5OjQwOjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjkvMzVdIGV4cG9ydCBDUFAKKworVGhlIE9FIGVudmlyb25tZW50IHNldHMgYW5kIGV4cG9ydHMgQ1BQIGFzIGJlaW5nIHRoZSB0YXJnZXQgZ2NjLiBXaGVuCitidWlsZGluZyBnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQKK2luIGJ1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlCit1c2luZyB0aGUgaG9zdCAiZ2NjIiwgbm90IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjLiBTaW5jZSB0aGUgbWluZ3czMgoraGVhZGVycyBhcmUgdmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcKK2ludG8gY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkCitmYWlsdXJlcyByZWxhdGVkIHRvIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1ZGUgYSBwcm9jZXNzLmggZmlsZSBmb3IgcGVtLXVuaXguYy4KKworVGhlIGZpeCBpcyB0byBlbnN1cmUgd2UgZXhwb3J0IGEgc2FuZSBDUFAgdmFsdWUgaW50byB0aGUgYnVpbGQKK2Vudmlyb25tZW50IHdoZW4gdXNpbmcgYnVpbGQgdGFyZ2V0cy4gV2UgY291bGQgZGVmaW5lIGEgQ1BQX0ZPUl9CVUlMRCB2YWx1ZSB3aGljaCBtYXkgYmUKK3RoZSB2ZXJzaW9uIHdoaWNoIG5lZWRzIHRvIGJlIHVwc3RyZWFtZWQgYnV0IGZvciBub3csIHRoaXMgZml4IGlzIGdvb2QgZW5vdWdoIHRvCithdm9pZCB0aGUgcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzNmI0MDA4Li5hNzgzZTFlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTQ5LDYgKzE0OSw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczZGNhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSAzZDg3MGExODRjMDVkZjEzMzhkYjE4NzAzMDFjNDE0NGJhOTlmYzNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMzAvMzVdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAorCitXaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggYjE1NTc0NC4uMDU0MWI4YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIzMzcsNyArMjMzNywxNCBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCWNhc2UgJHt0YXJnZXR9IGluCisrCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCQk7OworKwkgICAgKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIgorKwkJOzsKKysJZXNhYworIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNjb21tIgorIAlleHRyYV9vYmpzPSIkZXh0cmFfb2JqcyByczYwMDAtbGludXgubyIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2Y2JhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBhODI0Y2QzZjQ1ODc1ZjZjMWM0N2NjZGJmMzM1MzQ5NDdiZDJiNTg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjE6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMS8zNV0gRGlzYWJsZSB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyBhbmQgb3RoZXIgbXVsdGlsaWIKKyBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUKK0FCSSwgYXMKK2xvbmcgYXMgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIHByZXNlbnQgaW4gL2xpYi4KKworV2Ugc2ltcGx5IHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHJ1bGVzIGluIGdjYyB0byBmaW5kIGFuZCBjb25maWd1cmUgdGhlCitub3JtYWwgbGliZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbT0UtU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAoraW5kZXggYzI5NjM3Ni4uM2JiNTliZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKysrKyBiL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK0BAIC0yMSw4ICsyMSw4IEBACisgTElCMUFTTVNSQyAgID0gYWFyY2g2NC9saWIxZnVuY3MuYXNtCisgTElCMUFTTUZVTkNTID0gX2FhcmNoNjRfc3luY19jYWNoZV9yYW5nZQorIAorLUFBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG1hYmkubHA2ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCistTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI0FBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCisrI01VTFRJTElCX09TRElSTkFNRVMgPSBtYWJpLmxwNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKyAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG1hYmkuaWxwMzI9Li4vbGliaWxwMzIKKysjTVVMVElMSUJfT1NESVJOQU1FUyArPSBtYWJpLmlscDMyPS4uL2xpYmlscDMyCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxMzMwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gZTYwMDkwZjdjNTM3Yzg0ZmQxYjIyMzA3ZWRkOWYzODYyMjhjNzMzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjI1OjExICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIEVuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArKworIGdjYy9jcHBkZWZhdWx0LmMgfCA0ICsrKysKKyBnY2MvZGVmYXVsdHMuaCAgIHwgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgIHwgNyAtLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA5NDcwYTkyLi4xNDk3ZWRlIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC01ODIsNiArNTgyLDcgQEAgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI2MDMsNiArMjYwNCw3IEBAIENGTEFHUy1pbnRsLm8gKz0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIgorIAorIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAorICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKKysgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKKyAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAorZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCitpbmRleCA1ODBjMWJhLi4wM2EwMjg3IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTU5LDYgKzU5LDEwIEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCAxZDU0Nzk4Li45ODNkNDVlIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTM2MSw0ICsxMzYxLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIAorICNlbmRpZiAvKiBHQ0NfSU5TTl9GTEFHU19IICAqLworIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGU2ZWZhZTcuLjNjYTI3YjkgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEyNjMsMTMgKzEyNjMsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTllNDEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDk5N2Y5ZTkzOWY4NWY2NTFiMjJhNDgyNTFjZmIxNDQ0ODMxZDU0Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMToxNzoxOSArMDAwMAorU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2MgNC44KyB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisKK3NpbmNlIHRoZSAqLlBwbyBmaWxlcyBkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAKKzIwMTIvMDkvMjIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmF0b21pYy9NYWtlZmlsZS5hbSB8IDMgKystCisgbGliYXRvbWljL01ha2VmaWxlLmluIHwgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbSBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQoraW5kZXggM2Q4YWI2Mi4uMjNkZmY3ZSAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmFtCitAQCAtMTAxLDcgKzEwMSw4IEBAIFBBVF9TCQk9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0KKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbiBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgoraW5kZXggOTI4ODY1Mi4uMzcyMDI1NiAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmluCitAQCAtMzMwLDcgKzMzMCw4IEBAIFBBVF9OID0gJCh3b3JkIDIsJChQQVRfU1BMSVQpKQorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPQorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwN2NkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYzk0ZGEyNTdhMjE5ODczYjk0NmUwODMwNjE0MWFmNzc0OTY3OWY2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDMgTWFyIDIwMTUgMDg6MjE6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gRG9uJ3Qgc2VhcmNoIGhvc3QgZGlyZWN0b3J5IGR1cmluZyAicmVsaW5rIiBpZgorICRpbnN0X3ByZWZpeCBpcyBwcm92aWRlZAorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC1wYXRjaGVzLzIwMTEtMDEvbXNnMDAwMjYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDUyYmRiZGIuLjgyYmNlYzMgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYwMDQsMTIgKzYwMDQsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZmkKKyAJICAgIGVsc2UKKyAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKysJICAgICAgIyBEZWZhdWx0IGlmICRsaWJkaXIgaXMgbm90IHJlbGF0aXZlIHRvIHRoZSBwcmVmaXg6CisgCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKy0JICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorKworIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJY2FzZSAkbGliZGlyIGluCisgCQkgIFtcXC9dKikKKy0JCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgIGFkZF9kaXI9Ii1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NWYzODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbSAzYTA5NTQ1ZjNkMThjZTQ5MmVmNTU2MzkyMTVhMDcyMjgyZGUwM2QwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgOCBNYXIgMjAxNSAwMzo0MTozOSArMDAwMAorU3ViamVjdDogW1BBVENIIDM1LzM1XSBEb250IGxpbmsgdGhlIHBsdWdpbnMgd2l0aCBsaWJnb21wIGV4cGxpY2l0bHkKKworVGhleSBhcmUgZGxvcGVuZWQgYnkgbGliZ29tcCBhbnl3YXkuIFRoaXMgZml4ZXMKK3RoZSBsaWJ0b29sIHJlbGluayBpc3N1ZSB3aGljaCBjYXVzZXMgaXNzdWVzIGR1cmluZworY3Jvc3MgY29tcGlsYXRpb24KKworbGlidG9vbDogaW5zdGFsbDogL3Vzci9iaW4vaW5zdGFsbCAtYyAubGlicy9saWJnb21wLmxhaQorL2hvbWUvdWJ1bnR1L3dvcmsvYmxlZWRpbmcvYnVpbGQtcWVtdXg4Ni02NG1jL3RtcC93b3JrL2NvcmUyLTY0LXJkay1saW51eC9nY2MtcnVudGltZS81LjAtcjAvaW1hZ2UvdXNyL2xpYi8uLi9saWIvbGliZ29tcC5sYQorbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IGNhbm5vdCBpbnN0YWxsIGBsaWJnb21wLXBsdWdpbi1ob3N0X25vbnNobS5sYScKK3RvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gL3Vzci9saWIKK01ha2VmaWxlOjUxNzogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUycgZmFpbGVkCittYWtlWzJdOiAqKiogW2luc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFU10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliZ29tcC9NYWtlZmlsZS5pbiAgICAgICAgfCA3ICsrKy0tLS0KKyBsaWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbSB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnb21wL01ha2VmaWxlLmluIGIvbGliZ29tcC9NYWtlZmlsZS5pbgoraW5kZXggYjYxYjEwOC4uNzFiMjYyNyAxMDA2NDQKKy0tLSBhL2xpYmdvbXAvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmdvbXAvTWFrZWZpbGUuaW4KK0BAIC0xMjMsNyArMTIzLDcgQEAgYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSIgIiQoREVTVERJUikkKGluZm9kaXIpIiBcCisgCSIkKERFU1RESVIpJChmaW5jbHVkZWRpcikiICIkKERFU1RESVIpJChsaWJzdWJpbmNsdWRlZGlyKSIgXAorIAkiJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIgorIExUTElCUkFSSUVTID0gJCh0b29sZXhlY2xpYl9MVExJQlJBUklFUykKKy1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9ERVBFTkRFTkNJRVMgPSBsaWJnb21wLmxhCisrbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0KKyBhbV9saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9PQkpFQ1RTID0gIFwKKyAJbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGEtcGx1Z2luLWhvc3QubG8KKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9PQkpFQ1RTID0gIFwKK0BAIC0xMzMsNyArMTMzLDcgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgXAorIAktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorIAkkKGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKyBhbV9fREVQRU5ERU5DSUVTXzEgPQorLUBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9ERVBFTkRFTkNJRVMgPSBsaWJnb21wLmxhIFwKKytAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfREVQRU5ERU5DSUVTID0gIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorIEBQTFVHSU5fTlZQVFhfVFJVRUBhbV9saWJnb21wX3BsdWdpbl9udnB0eF9sYV9PQkpFQ1RTID0gIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACWxpYmdvbXBfcGx1Z2luX252cHR4X2xhLXBsdWdpbi1udnB0eC5sbworQEAgLTQwNyw3ICs0MDcsNyBAQCBsaWJnb21wX2xhX1NPVVJDRVMgPSBhbGxvYy5jIGJhcnJpZXIuYyBjcml0aWNhbC5jIGVudi5jIGVycm9yLmMgaXRlci5jIFwKKyBAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTERGTEFHUyA9ICBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAkkKGxpYmdvbXBfcGx1Z2luX252cHR4X3ZlcnNpb25faW5mbykgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUAJJChsdF9ob3N0X2ZsYWdzKSAkKFBMVUdJTl9OVlBUWF9MREZMQUdTKQorLUBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSBsaWJnb21wLmxhICQoUExVR0lOX05WUFRYX0xJQlMpCisrQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9ICQoUExVR0lOX05WUFRYX0xJQlMpCisgQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvID0gLXZlcnNpb24taW5mbyAkKGxpYnRvb2xfVkVSU0lPTikKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9TT1VSQ0VTID0gcGx1Z2luL3BsdWdpbi1ob3N0LmMKK0BAIC00MTUsNyArNDE1LDYgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtREhPU1RfTk9OU0hNX1BMVUdJTgorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MgPSBcCisgCSQobGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvKSAkKGx0X2hvc3RfZmxhZ3MpCisgCistbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0gbGliZ29tcC5sYQorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisgbm9kaXN0X25vaW5zdF9IRUFERVJTID0gbGliZ29tcF9mLmgKKyBub2Rpc3RfbGlic3ViaW5jbHVkZV9IRUFERVJTID0gb21wLmggb3BlbmFjYy5oCitkaWZmIC0tZ2l0IGEvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0gYi9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQoraW5kZXggMTY3NDg1Zi4uZDJjNTQyOCAxMDA2NDQKKy0tLSBhL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtCisrKysgYi9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQorQEAgLTM1LDcgKzM1LDcgQEAgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAkKFBMVUdJTl9OVlBUWF9DUFBGTEFHUykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MREZMQUdTID0gJChsaWJnb21wX3BsdWdpbl9udnB0eF92ZXJzaW9uX2luZm8pIFwKKyAJJChsdF9ob3N0X2ZsYWdzKQorIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xERkxBR1MgKz0gJChQTFVHSU5fTlZQVFhfTERGTEFHUykKKy1saWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSBsaWJnb21wLmxhICQoUExVR0lOX05WUFRYX0xJQlMpCisrbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gJChQTFVHSU5fTlZQVFhfTElCUykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworIGVuZGlmCisgCitAQCAtNDUsNSArNDUsNCBAQCBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9TT1VSQ0VTID0gcGx1Z2luL3BsdWdpbi1ob3N0LmMKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ESE9TVF9OT05TSE1fUExVR0lOCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTERGTEFHUyA9IFwKKyAJJChsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV92ZXJzaW9uX2luZm8pICQobHRfaG9zdF9mbGFncykKKy1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJBREQgPSBsaWJnb21wLmxhCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5MTk0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSA4NjFiY2ZkNGFlODE0ZjM1MWUwYzY2OGVlMjZkMDFkMTMzMWUwNDIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzNi8zN10gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZworIGJhc2VfbGliZGlyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK2luZGV4IDlhYmIyNTIuLjc5NTI1ZWUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAorICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorIAorICN1bmRlZiAgQVNBTl9DQzFfU1BFQworICNkZWZpbmUgQVNBTl9DQzFfU1BFQyAiJXslOnNhbml0aXplKGFkZHJlc3MpOi1mdW53aW5kLXRhYmxlc30iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM3LXByNjU3NzkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjQ2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoCkBAIC0wLDAgKzEsMTczIEBACitMaXN0LUlkOiA8Z2NjLXBhdGNoZXMuZ2NjLmdudS5vcmc+CitMaXN0LUFyY2hpdmU6IDxodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvPgorTGlzdC1Qb3N0OiA8bWFpbHRvOmdjYy1wYXRjaGVzIGF0IGdjYyBkb3QgZ251IGRvdCBvcmc+CitMaXN0LUhlbHA6IDxtYWlsdG86Z2NjLXBhdGNoZXMtaGVscCBhdCBnY2MgZG90IGdudSBkb3Qgb3JnPgorRGF0ZTogTW9uLCAyMCBBcHIgMjAxNSAxMjo0MDo0OSArMDkzMAorRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhIGF0IGdtYWlsIGRvdCBjb20+CitUbzogZ2NjLXBhdGNoZXMgYXQgZ2NjIGRvdCBnbnUgZG90IG9yZworU3ViamVjdDogW1BhdGNoXSBwcjY1Nzc5IC0gWzUvNiBSZWdyZXNzaW9uXSB1bmRlZmluZWQgbG9jYWwgc3ltYm9sIG9uIHBvd2VycGMKKworVGhpcyBwYXRjaCByZW1vdmVzIGJvZ3VzIGRlYnVnIGluZm8gbGVmdCBhcm91bmQgYnkgc2hyaW5rLXdyYXBwaW5nLAord2hpY2ggb24gc29tZSBwb3dlcnBjIHRhcmdldHMgd2l0aCBqdXN0IHRoZSByaWdodCByZWdpc3RlciBhbGxvY2F0aW9uCitsZWQgdG8gYXNzZW1ibHkgZXJyb3JzLgorCitCb290c3RyYXBwZWQgYW5kIHJlZ3Jlc3Npb24gdGVzdGVkIHBvd2VycGM2NC1saW51eCBhbmQgeDg2XzY0LWxpbnV4LgorCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02NTc3OQorCitnY2MvCisJUFIgZGVidWcvNjU3NzkKKwkqIHNocmluay13cmFwLmMgKGluc25fdXNlc19yZWcpOiBOZXcgZnVuY3Rpb24uCisJKG1vdmVfaW5zbl9mb3Jfc2hyaW5rX3dyYXApOiBSZW1vdmUgZGVidWcgaW5zbnMgdXNpbmcgcmVncyBzZXQKKwlieSB0aGUgbW92ZWQgaW5zbi4KK2djYy90ZXN0c3VpdGUvCisJKiBnY2MuZGcvcHI2NTc3OS5jOiBOZXcuCisJCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgKGZyb20gbWFpbGluZyBsaXN0LCBub3QgbWVyZ2VkIHlldCkKKworSW5kZXg6IGEvZ2NjL3Nocmluay13cmFwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2djYy9zaHJpbmstd3JhcC5jLm9yaWcKKysrKyBiL2djYy9zaHJpbmstd3JhcC5jCitAQCAtMTgyLDYgKzE4MiwyMSBAQCBsaXZlX2VkZ2VfZm9yX3JlZyAoYmFzaWNfYmxvY2sgYmIsIGludCByCisgICByZXR1cm4gbGl2ZV9lZGdlOworIH0KKyAKKytzdGF0aWMgYm9vbAorK2luc25fdXNlc19yZWcgKHJ0eF9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCBlbmRfcmVnbm8pCisreworKyAgZGZfcmVmIHVzZTsKKysKKysgIEZPUl9FQUNIX0lOU05fVVNFICh1c2UsIGluc24pCisrICAgIHsKKysgICAgICBydHggcmVnID0gREZfUkVGX1JFRyAodXNlKTsKKysKKysgICAgICBpZiAoUkVHX1AgKHJlZykgJiYgUkVHTk8gKHJlZykgPj0gcmVnbm8gJiYgUkVHTk8gKHJlZykgPCBlbmRfcmVnbm8pCisrCXJldHVybiB0cnVlOworKyAgICB9CisrICByZXR1cm4gZmFsc2U7CisrfQorKworIC8qIFRyeSB0byBtb3ZlIElOU04gZnJvbSBCQiB0byBhIHN1Y2Nlc3Nvci4gIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgVVNFUyBhbmQgREVGUyBhcmUgdGhlIHNldCBvZiByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBhbmQgZGVmaW5lZAorICAgIGFmdGVyIElOU04gaW4gQkIuICBTUExJVF9QIGluZGljYXRlcyB3aGV0aGVyIGEgbGl2ZSBlZGdlIGZyb20gQkIKK0BAIC0zNDAsMTAgKzM1NSwxNSBAQCBtb3ZlX2luc25fZm9yX3Nocmlua193cmFwIChiYXNpY19ibG9jayBiCisgICAgICAgKnNwbGl0X3AgPSB0cnVlOworICAgICB9CisgCisrICB2ZWM8YmFzaWNfYmxvY2s+IGxpdmVfYmJzOworKyAgaWYgKE1BWV9IQVZFX0RFQlVHX0lOU05TKQorKyAgICBsaXZlX2Jicy5jcmVhdGUgKDUpOworICAgLyogQXQgdGhpcyBwb2ludCB3ZSBhcmUgY29tbWl0dGVkIHRvIG1vdmluZyBJTlNOLCBidXQgbGV0J3MgdHJ5IHRvCisgICAgICBtb3ZlIGl0IGFzIGZhciBhcyB3ZSBjYW4uICAqLworICAgZG8KKyAgICAgeworKyAgICAgIGlmIChNQVlfSEFWRV9ERUJVR19JTlNOUykKKysJbGl2ZV9iYnMuc2FmZV9wdXNoIChiYik7CisgICAgICAgbGl2ZV9vdXQgPSBkZl9nZXRfbGl2ZV9vdXQgKGJiKTsKKyAgICAgICBsaXZlX2luID0gZGZfZ2V0X2xpdmVfaW4gKG5leHRfYmxvY2spOworICAgICAgIGJiID0gbmV4dF9ibG9jazsKK0BAIC00MjYsNiArNDQ2LDM0IEBAIG1vdmVfaW5zbl9mb3Jfc2hyaW5rX3dyYXAgKGJhc2ljX2Jsb2NrIGIKKyAJU0VUX1JFR05PX1JFR19TRVQgKGJiX3VzZXMsIGkpOworICAgICB9CisgCisrICAvKiBSZW1vdmUgZGVidWcgaW5zbnMgdXNpbmcgcmVncyBzZXQgYnkgdGhlIGluc24gd2UgYXJlIG1vdmluZy4gICovCisrICBpZiAoTUFZX0hBVkVfREVCVUdfSU5TTlMpCisrICAgIHsKKysgICAgICB3aGlsZSAoIWxpdmVfYmJzLmlzX2VtcHR5ICgpKQorKwl7CisrCSAgcnR4X2luc24gKmRpbnNuOworKwkgIGJhc2ljX2Jsb2NrIHRtcF9iYiA9IGxpdmVfYmJzLnBvcCAoKTsKKysKKysJICBGT1JfQkJfSU5TTlNfUkVWRVJTRSAodG1wX2JiLCBkaW5zbikKKysJICAgIHsKKysJICAgICAgaWYgKGRpbnNuID09IGluc24pCisrCQlicmVhazsKKysJICAgICAgaWYgKERFQlVHX0lOU05fUCAoZGluc24pCisrCQkgICYmIGluc25fdXNlc19yZWcgKGRpbnNuLCBkcmVnbm8sIGVuZF9kcmVnbm8pKQorKwkJeworKwkJICBpZiAoKnNwbGl0X3ApCisrCQkgICAgLyogSWYgc3BsaXQsIHRoZW4gd2Ugd2lsbCBiZSBtb3ZpbmcgaW5zbiBpbnRvIGEKKysJCSAgICAgICBuZXdseSBjcmVhdGVkIGJsb2NrIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbnRyeQorKwkJICAgICAgIGJsb2NrLiAgTW92ZSB0aGUgZGVidWcgaW5mbyB0aGVyZSB0b28uICAqLworKwkJICAgIGVtaXRfZGVidWdfaW5zbl9hZnRlciAoUEFUVEVSTiAoZGluc24pLCBiYl9ub3RlIChiYikpOworKwkJICBkZWxldGVfaW5zbiAoZGluc24pOworKwkJICBicmVhazsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICAgIGxpdmVfYmJzLnJlbGVhc2UgKCk7CisrICAgIH0KKysKKyAgIGVtaXRfaW5zbl9hZnRlciAoUEFUVEVSTiAoaW5zbiksIGJiX25vdGUgKGJiKSk7CisgICBkZWxldGVfaW5zbiAoaW5zbik7CisgICByZXR1cm4gdHJ1ZTsKK0luZGV4OiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNjU3NzkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI2NTc3OS5jCitAQCAtMCwwICsxLDY0IEBACisrLyogeyBkZy1kbyBydW4gfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1nIiB9ICovCisrLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tcmVsb2NhdGFibGUiIHsgdGFyZ2V0IHBvd2VycGMtKi1ydGVtcyogfSB9ICovCisrCisrdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorK2FkbGVyMzIgKHVuc2lnbmVkIGxvbmcgYWRsZXIsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKKyt7CisrICB1bnNpZ25lZCBsb25nIHMxID0gYWRsZXIgJiAweGZmZmY7CisrICB1bnNpZ25lZCBsb25nIHMyID0gKGFkbGVyID4+IDE2KSAmIDB4ZmZmZjsKKysgIGludCBrOworKworKyAgaWYgKGJ1ZiA9PSAwKQorKyAgICByZXR1cm4gMUw7CisrCisrICB3aGlsZSAobGVuID4gMCkKKysgICAgeworKyAgICAgIGsgPSBsZW4gPCA1NTUyID8gbGVuIDogNTU1MjsKKysgICAgICBsZW4gLT0gazsKKysgICAgICB3aGlsZSAoayA+PSAxNikKKysJeworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgayAtPSAxNjsKKysJfQorKyAgICAgIGlmIChrICE9IDApCisrCWRvCisrCSAgeworKwkgICAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICB9IHdoaWxlICgtLWspOworKyAgICAgIHMxICY9IDB4ZmZmZmZmZmZVTDsKKysgICAgICBzMiAmPSAweGZmZmZmZmZmVUw7CisrICAgICAgczEgJT0gNjU1MjFMOworKyAgICAgIHMyICU9IDY1NTIxTDsKKysgICAgfQorKyAgcmV0dXJuIChzMiA8PCAxNikgfCBzMTsKKyt9CisrCisrdW5zaWduZWQgY2hhciBidWZbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywKKysJCQk4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LAorKwkJCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCQkJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJCQkweDU1LCAweGFhIH07CisraW50CisrbWFpbiAoKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgeCA9IGFkbGVyMzIgKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisrICBpZiAoeCAhPSAweDY0MDQwOWVmVUwpCisrICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI0ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzgtZml4LWcrKy1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1BvcnRpb25zIG9mCisKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9nY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZy9tc2cyNjAxMy5odG1sCisKK2FyZSBub3QgdXBzdHJlYW1lZCB5ZXQuIFNvIGxldHMga2VlcCBtaXNzaW5nIHBpZWNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dpdGhvdXQgdGhpcywgY29tcGlsaW5nIHNvbWV0aGluZyBzaW1wbGUgbGlrZSAjaW5jbHVkZSA8bGltaXRzPiBvbiB0YXJnZXQKK3dpdGggYysrIHRlc3QuY3BwIGZhaWxzIHVuYWJsZSB0byBmaW5kIHRoZSBoZWFkZXIuIHN0cmFjZSBzaG93cyBpdCBsb29raW5nIGluCit1c3IvaW5jbHVkZS94eHh4IHJhdGhlciB0aGFuIC91c3IvaW5jbHVkZS94eHh4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNTo1NTo0OS40ODgzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE2OjAyOjMxLjc3MjQwNjY3OSAtMDcwMAorQEAgLTE0OCw3ICsxNDgsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTU6NTU6NDkuNDcyMzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNjowMjozMS43ODA0MDY2ODAgLTA3MDAKK0BAIC0zMzI1LDcgKzMzMjUsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMjVjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIGFjZWEwZGY5OTk3YTQ3ZjhiODIyNGI2Y2ExNjE4YzhjOWRmYmU2ZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgNSBKdWwgMjAxNSAyMDoyNToxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBsaWJjYzE6IGZpeCBsaWJjYzEncyBpbnN0YWxsIHBhdGggYW5kIHJwYXRoCisKKyogSW5zdGFsbCBsaWJjYzEuc28gYW5kIGxpYmNjMXBsdWdpbi5zbyBpbnRvCisgICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbiksIGFzIHdoYXQgd2UKKyAgaGFkIGRvbmUgdG8gbHRvLXBsdWdpbi4KKyogRml4IGJhZCBSUEFUSCBpdXNzdWU6CisgIGdjYy01LjIuMDogcGFja2FnZSBnY2MtcGx1Z2lucyBjb250YWlucyBiYWQgUlBBVEggL3BhdGh0L3RvL3RtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9saWI2NC8uLi9saWI2NCBpbiBmaWxlCisgL3BhdGgvdG8vZ2NjLzUuMi4wLXIwL3BhY2thZ2VzLXNwbGl0L2djYy1wbHVnaW5zL3Vzci9saWI2NC9nY2MveDg2XzY0LXBva3ktbGludXgvNS4yLjAvcGx1Z2luL2xpYmNjMXBsdWdpbi5zby4wLjAuMAorIFtycGF0aHNdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJjYzEvTWFrZWZpbGUuYW0gIHwgICAgNCArKy0tCisgbGliY2MxL01ha2VmaWxlLmluICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmFtIGIvbGliY2MxL01ha2VmaWxlLmFtCitpbmRleCA3YTI3NGIzLi5kYjY5YmVhIDEwMDY0NAorLS0tIGEvbGliY2MxL01ha2VmaWxlLmFtCisrKysgYi9saWJjYzEvTWFrZWZpbGUuYW0KK0BAIC0zNSw4ICszNSw4IEBAIGxpYmliZXJ0eSA9ICQoaWYgJCh3aWxkY2FyZCAkKGxpYmliZXJ0eV9ub2FzYW4pKSwkKFdjKSQobGliaWJlcnR5X25vYXNhbiksIFwKKyAJICAgICQoV2MpJChsaWJpYmVydHlfbm9ybWFsKSkpCisgbGliaWJlcnR5X2RlcCA9ICQocGF0c3Vic3QgJChXYyklLCUsJChsaWJpYmVydHkpKQorIAorLXBsdWdpbmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKS9wbHVnaW4KKy1jYzFsaWJkaXIgPSAkKGxpYmRpcikvJChsaWJzdWZmaXgpCisrY2MxbGliZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKQorK3BsdWdpbmRpciA9ICQoY2MxbGliZGlyKQorIAorIGlmIEVOQUJMRV9QTFVHSU4KKyBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEKK2RpZmYgLS1naXQgYS9saWJjYzEvTWFrZWZpbGUuaW4gYi9saWJjYzEvTWFrZWZpbGUuaW4KK2luZGV4IDE5MTYxMzQuLmM4OTk1ZDIgMTAwNjQ0CistLS0gYS9saWJjYzEvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmNjMS9NYWtlZmlsZS5pbgorQEAgLTI2Miw4ICsyNjIsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCisgCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQorIAorIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKKy1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCistY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQorK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKKytwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKKyBARU5BQkxFX1BMVUdJTl9UUlVFQHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmNjMXBsdWdpbi5sYQorIEBFTkFCTEVfUExVR0lOX1RSVUVAY2MxbGliX0xUTElCUkFSSUVTID0gbGliY2MxLmxhCisgQlVJTFRfU09VUkNFUyA9IGNvbXBpbGVyLW5hbWUuaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODFhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxOTYgQEAKK0JlaW5nIGFibGUgdG8gYnVpbGQgYSBuYXRpdmVzZGsgZ2NjIGlzIHVzZWZ1bCwgcGFydGljdWxhcmx5IGluIGNhc2VzCit3aGVyZSB0aGUgaG9zdCBjb21waWxlciBtYXkgYmUgb2YgYW4gaW5jb21wYXRpYmxlIHZlcnNpb24gKG9yIGEgMzIKK2JpdCBjb21waWxlciBpcyBuZWVkZWQpLgorCitTYWRseSwgYnVpbGRpbmcgbmF0aXZlc2RrLWdjYyBpcyBub3Qgc3RyYWlnaHQgZm9yd2FyZC4gV2UgaW5zdGFsbAorbmF0aXZlc2RrLWdjYyBpbnRvIGEgcmVsb2NhdGFibGUgbG9jYXRpb24gYW5kIHRoaXMgbWVhbnMgdGhhdCBpdHMKK2xpYnJhcnkgbG9jYXRpb25zIGNhbiBjaGFuZ2UuICJOb3JtYWwiIHN5c3Jvb3Qgc3VwcG9ydCBkb2Vzbid0IGhlbHAKK2luIHRoaXMgY2FzZSBzaW5jZSB0aGUgdmFsdWVzIG9mIHBhdGhzIGxpa2UgImxpYmRpciIgY2hhbmdlLCBub3QganVzdAorYmFzZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc3lzdGVtLgorCitJbiBvcmRlciB0byBoYW5kbGUgdGhpcyB3ZSBkbyB0d28gdGhpbmdzOgorCithKSBBZGQgJXIgaW50byBzcGVjIGZpbGUgbWFya3VwIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmplY3RlZCBwYXRocworICAgc3VjaCBhcyBTWVNURU1MSUJTX0RJUiAoc2VlIGdjY19tdWx0aWxpYl9zZXR1cCgpKS4KK2IpIEFkZCBvdGhlciBwYXRocyB3aGljaCBuZWVkIHJlbG9jYXRpb24gaW50byBhIC5nY2NyZWxvY3ByZWZpeCBzZWN0aW9uCisgICB3aGljaCB0aGUgcmVsb2NhdGlvbiBjb2RlIHdpbGwgbm90aWNlIGFuZCBhZGp1c3QgYXV0b21hdGljYWxseS4KKworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvNy8yOAorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC0zNSw2ICszNSwzMCBAQAorICMgdW5kZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAjZW5kaWYKKyAKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdDQ19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHQ0NfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ7CisrI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgTE9DQUxfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTE9DQUxfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFBSRUZJWF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBQUkVGSVhfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgRklYRURfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gRklYRURfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgQ1JPU1NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gQ1JPU1NfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBUT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFRPT0xfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorK3N0YXRpYyBjaGFyIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVI7CisrI2VuZGlmCisrCisgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2lmZGVmIElOQ0xVREVfREVGQVVMVFMKKyA9IElOQ0xVREVfREVGQVVMVFM7CitAQCAtNDIsMzggKzY2LDM4IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorID0geworICNpZmRlZiBHUExVU1BMVVNfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGdlbmVyaWMgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgdGFyZ2V0LWRlcGVuZGVudCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGJhY2t3YXJkIGFuZCBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKy0gICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgR0NDX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCistICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSLCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMiB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorLSAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGZpeGluY2x1ZGVzLiAgKi8KKy0gICAgeyBGSVhFRF9JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsCisrICAgIHsgRklYRURfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLAorICAgICAgIC8qIEEgbXVsdGlsaWIgc3VmZml4IG5lZWRzIGFkZGluZyBpZiBkaWZmZXJlbnQgbXVsdGlsaWJzIHVzZQorIAkgZGlmZmVyZW50IGhlYWRlcnMuICAqLworICNpZmRlZiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKK0BAIC04NSwxNiArMTA5LDE2IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNlbmRpZgorICNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorICAgICAvKiBPbmUgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBDUk9TU19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBBbm90aGVyIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFRPT0xfSU5DTFVERV9ESVJWQVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisgICAgIC8qIC91c3IvaW5jbHVkZSBjb21lcyBkZWFkIGxhc3QuICAqLworLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CisgICB9OworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmggYi9nY2MvY3BwZGVmYXVsdC5oCistLS0gYS9nY2MvY3BwZGVmYXVsdC5oCisrKysgYi9nY2MvY3BwZGVmYXVsdC5oCitAQCAtMzMsNyArMzMsOCBAQAorIAorIHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUKKyB7CistICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrICBjb25zdCBjaGFyICpmbmFtZTsgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKworICAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIAkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLworICAgY29uc3QgY2hhciBjcGx1c3BsdXM7CQkvKiBPbmx5IGxvb2sgaGVyZSBpZiB3ZSdyZSBjb21waWxpbmcgQysrLiAgKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTIwLDYgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSBUQVJHRVRfU1lTVEVNX1JPT1Q7CisgI2Vsc2UKKyBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gMDsKKyAjZW5kaWYKKysgCisrc3RhdGljIGNoYXIgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTWVNURU1MSUJTX0RJUjsKKyAKKyAvKiBOb256ZXJvIG1lYW5zIHBhc3MgdGhlIHVwZGF0ZWQgdGFyZ2V0X3N5c3RlbV9yb290IHRvIHRoZSBjb21waWxlci4gICovCisgCitAQCAtMzkwLDYgKzM5Miw3IEBAIG9yIHdpdGggY29uc3RhbnQgdGV4dCBpbiBhIHNpbmdsZSBhcmd1bWVudC4KKyAgJUcgICAgIHByb2Nlc3MgTElCR0NDX1NQRUMgYXMgYSBzcGVjLgorICAlUiAgICAgT3V0cHV0IHRoZSBjb25jYXRlbmF0aW9uIG9mIHRhcmdldF9zeXN0ZW1fcm9vdCBhbmQKKyAgICAgICAgIHRhcmdldF9zeXNyb290X3N1ZmZpeC4KKysgJXIgICAgIE91dHB1dCB0aGUgYmFzZSBwYXRoIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgKKyAgJVMgICAgIHByb2Nlc3MgU1RBUlRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIFMgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlRSAgICAgcHJvY2VzcyBFTkRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIEUgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlQyAgICAgcHJvY2VzcyBDUFBfU1BFQyBhcyBhIHNwZWMuCitAQCAtMTI4NiwxMCArMTI4OSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworICAgIGdjY19leGVjX3ByZWZpeCBpcyBzZXQgYmVjYXVzZSwgaW4gdGhhdCBjYXNlLCB3ZSBrbm93IHdoZXJlIHRoZQorICAgIGNvbXBpbGVyIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHVzZSBwYXRocyByZWxhdGl2ZSB0byB0aGF0CisgICAgbG9jYXRpb24gaW5zdGVhZC4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2V4ZWNfcHJlZml4ID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4ID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2JpbmRpcl9wcmVmaXggPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9leGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9saWJleGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9iaW5kaXJfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cisrc3RhdGljIGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIAorIC8qIEZvciBuYXRpdmUgY29tcGlsZXJzLCB0aGVzZSBhcmUgd2VsbC1rbm93biBwYXRocyBjb250YWluaW5nCisgICAgY29tcG9uZW50cyB0aGF0IG1heSBiZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtLiAgRm9yIGNyb3NzCitAQCAtMTI5Nyw5ICsxMzAwLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9leGVjX3ByZWZpeCA9IE1EX0VYRUNfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4ID0gTURfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeF8xID0gTURfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzFbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzI7CisgCisgLyogQSByZWxhdGl2ZSBwYXRoIHRvIGJlIHVzZWQgaW4gZmluZGluZyB0aGUgbG9jYXRpb24gb2YgdG9vbHMKK0BAIC01NTUwLDYgKzU1NTMsMTEgQEAgZG9fc3BlY18xIChjb25zdCBjaGFyICpzcGVjLCBpbnQgaW5zd2l0Y2gsIGNvbnN0IGNoYXIgKnNvZnRfbWF0Y2hlZF9wYXJ0KQorIAkgICAgICB9CisgCSAgICBicmVhazsKKyAKKysgICAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrLCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4LAorKwkJICAgICAgc3RybGVuICh0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4KSk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisgCSAgY2FzZSAnUyc6CisgCSAgICB2YWx1ZSA9IGRvX3NwZWNfMSAoc3RhcnRmaWxlX3NwZWMsIDAsIE5VTEwpOworIAkgICAgaWYgKHZhbHVlICE9IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1Njk4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQxLWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDg4IEBACitTZWFyY2ggdGFyZ2V0IHN5c3Jvb3QgZ2NjIHZlcnNpb24gc3BlY2lmaWMgZGlycyB3aXRoIG11bHRpbGliLgorCitXZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KKzxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KK3doaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZSAKK2NvZGUgYmVsb3cpLiA8dGFyZ2V0LXN5cz4gaXMgJ21hY2hpbmUnIGluIGdjYydzIHRlcm1pbm9sb2d5LiBXZSB1c2UKK3RoZXNlIGRpcmVjdG9yaWVzIHNvIHRoYXQgbXVsdGlwbGUgZ2NjIHZlcnNpb25zIGNvdWxkIGluIHRoZW9yeSAKK2NvLWV4aXN0IG9uIHRhcmdldC4KKworV2Ugb25seSB3YW50IHRvIGJ1aWxkIG9uZSBnY2MtY3Jvc3MtY2FuYWRpYW4gcGVyIGFyY2ggYW5kIGhhdmUgdGhpcyB3b3JrIAorZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgorPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4gbWlwczY0LXBvbGttbGxpYjMyLWxpbnV4IAoraXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgorCitUaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIgaXM6CisKKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKword2hpY2ggbWVhbnMgdGhhdCB0aGUgbGliMzIgY3J0YmVnaW4ubyB3aWxsIGJlIGZvdW5kIGFuZCB0aGUgbGliNjQgb25lcword2lsbCBub3Qgd2hpY2ggbGVhZHMgdG8gY29tcGlsZXIgZmFpbHVyZXMuCisKK1RoaXMgcGF0Y2ggaW5qZWN0cyBhIG11bHRpbGliIHZlcnNpb24gb2YgdGhhdCBwYXRoIGZpcnN0IHNvIHRoZSBsaWI2NAorYmluYXJpZXMgY2FuIGJlIGZvdW5kIGZpcnN0LiBXaXRoIHRoaXMgY2hhbmdlIHRoZSBzZWFyY2ggcGF0aCBiZWNvbWVzOgorCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQIDIwMTUvNy8zMQorCitJbmRleDogZ2NjLTUuMi4wL2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjIuMC5vcmlnL2djYy9nY2MuYworKysrIGdjYy01LjIuMC9nY2MvZ2NjLmMKK0BAIC0yMzA1LDcgKzIzMDUsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAgICAgICBpZiAocGF0aCA9PSBOVUxMKQorIAl7CisgCSAgbGVuID0gcGF0aHMtPm1heF9sZW4gKyBleHRyYV9zcGFjZSArIDE7CistCSAgbGVuICs9IE1BWCAoTUFYIChzdWZmaXhfbGVuLCBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisrCSAgbGVuICs9IE1BWCAoKHN1ZmZpeF9sZW4gKyBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisgCSAgcGF0aCA9IFhORVdWRUMgKGNoYXIsIGxlbik7CisgCX0KKyAKK0BAIC0yMzE3LDYgKzIzMTcsMzMgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgCSAgLyogTG9vayBmaXJzdCBpbiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5LiAgKi8KKyAJICBpZiAoIXNraXBfbXVsdGlfZGlyKQorIAkgICAgeworKwkgICAgICBpZiAoIShwbC0+b3NfbXVsdGlsaWIgPyBza2lwX211bHRpX29zX2RpciA6IHNraXBfbXVsdGlfZGlyKSkKKysJICAgICAgICB7CisrCSAgICAgICAgICBjb25zdCBjaGFyICp0aGlzX211bHRpOworKwkgICAgICAgICAgc2l6ZV90IHRoaXNfbXVsdGlfbGVuOworKworKwkgICAgICAgICAgaWYgKHBsLT5vc19tdWx0aWxpYikKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfb3NfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9vc19kaXJfbGVuOworKwkJICAgIH0KKysJICAgICAgICAgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9kaXJfbGVuOworKwkJICAgIH0KKysKKysJICAgICAgICAgIC8qIExvb2sgaW4gbXVsdGlsaWIgTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeSBmaXJzdCAqLworKwkgICAgICAgICAgaWYgKHRoaXNfbXVsdGlfbGVuKQorKwkgICAgICAgICAgICB7CisrCQkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIHRoaXNfbXVsdGksIHRoaXNfbXVsdGlfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgbWVtY3B5IChwYXRoICsgbGVuICsgdGhpc19tdWx0aV9sZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworKwkgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKysJICAgICAgICAgICAgICAgIGlmIChyZXQpCisrCQkgICAgICAgICAgYnJlYWs7CisrCSAgICAgICAgICAgIH0KKysJICAgICAgICB9CisrCisgCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisgCSAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKyAJICAgICAgaWYgKHJldCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2MwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTAwIEBACitTVU1NQVJZID0gIkdOVSBjYyBhbmQgZ2NjIEMgY29tcGlsZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2djYy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEwiCisKK05BVElWRURFUFMgPSAiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworQlBOID0gImdjYyIKKworZGVmIGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ0FSTVBLR1NGWF9FQUJJJywgVHJ1ZSkgPT0gImhmIiBhbmQgZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKSA9PSAiYXJtIjoKKyAgICAgICAgcmV0dXJuICItLXdpdGgtZmxvYXQ9aGFyZCIKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisgICAgICAgIHJldHVybiAiLS13aXRoLWZsb2F0PXNvZnQiCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdwcGMtZWZkJyBdOgorICAgICAgICByZXR1cm4gIi0tZW5hYmxlLWU1MDBfZG91YmxlIgorICAgIHJldHVybiAiIgorCitnZXRfZ2NjX2Zsb2F0X3NldHRpbmdbdmFyZGVwdmFsdWVdID0gIiR7QGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCl9IgorCitkZWYgZ2V0X2djY19taXBzX3BsdF9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ21pcHMnLCAnbWlwc2VsJyBdIGFuZCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ21wbHQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJldHVybiAiLS13aXRoLW1pcHMtcGx0IgorICAgIHJldHVybiAiIgorCitkZWYgZ2V0X2xvbmdfZG91YmxlX3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkgaW4gWyAncG93ZXJwYycsICdwb3dlcnBjNjQnIF0gYW5kIGQuZ2V0VmFyKCdUQ0xJQkMnLCBUcnVlKSBpbiBbICd1Y2xpYmMnLCAnZ2xpYmMnIF06CisgICAgICAgIHJldHVybiAiLS13aXRoLWxvbmctZG91YmxlLTEyOCIKKyAgICByZXR1cm4gIiIKKworZGVmIGdldF9nY2NfbXVsdGlhcmNoX3NldHRpbmcoYmIsIGQpOgorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIG11bHRpYXJjaF9vcHRpb25zID0geworICAgICAgICAiaTU4NiI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJpNjg2IjogICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICAgICAgInBvd2VycGMiOiAiLS1lbmFibGUtdGFyZ2V0cz1wb3dlcnBjNjQiLAorICAgICAgICAibWlwcyI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJzcGFyYyI6ICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICB9CisKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgaWYgdGFyZ2V0X2FyY2ggaW4gbXVsdGlhcmNoX29wdGlvbnMgOgorICAgICAgICAgICAgcmV0dXJuIG11bHRpYXJjaF9vcHRpb25zW3RhcmdldF9hcmNoXQorICAgIHJldHVybiAiIgorCisjIHRoaXMgaXMgdXNlZCBieSB0aGUgbXVsdGlsaWIgc2V0dXAgb2YgZ2NjCitkZWYgZ2V0X3R1bmVfcGFyYW1ldGVycyh0dW5lLCBkKToKKyAgICBhdmFpbHR1bmVzID0gZC5nZXRWYXIoJ0FWQUlMVFVORVMnLCBUcnVlKQorICAgIGlmIHR1bmUgbm90IGluIGF2YWlsdHVuZXMuc3BsaXQoKToKKyAgICAgICAgYmIuZXJyb3IoJ1RoZSB0dW5lOiAlcyBpcyBub3Qgb25lIG9mIHRoZSBhdmFpbGFibGUgdHVuZXM6ICVzJywgdHVuZSBvciBOb25lLCBhdmFpbHR1bmVzKQorCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgb3ZlcnJpZGUgPSAnOnR1bmUtJyArIHR1bmUKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIHJldGRpY3QgPSB7fQorICAgIHJldGRpY3RbJ3R1bmUnXSA9IHR1bmUKKyAgICByZXRkaWN0WydjY2FyZ3MnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfQ0NBUkdTJywgVHJ1ZSkKKyAgICByZXRkaWN0WydmZWF0dXJlcyddID0gbG9jYWxkYXRhLmdldFZhcignVFVORV9GRUFUVVJFUycsIFRydWUpCisgICAgIyBCQVNFTElCIGlzIHVzZWQgYnkgdGhlIG11bHRpbGliIGNvZGUgdG8gY2hhbmdlIGxpYnJhcnkgcGF0aHMKKyAgICByZXRkaWN0WydiYXNlbGliJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdCQVNFX0xJQicsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0JBU0VMSUInLCBUcnVlKQorICAgIHJldGRpY3RbJ2FyY2gnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfQVJDSCcsIFRydWUpCisgICAgcmV0ZGljdFsnYWJpZXh0ZW5zaW9uJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdBQklFWFRFTlNJT04nLCBUcnVlKQorICAgIHJldGRpY3RbJ3RhcmdldF9mcHUnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKQorICAgIHJldGRpY3RbJ3BrZ2FyY2gnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpCisgICAgcmV0ZGljdFsncGFja2FnZV9leHRyYV9hcmNocyddID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9FWFRSQV9BUkNIUycsIFRydWUpCisgICAgcmV0dXJuIHJldGRpY3QKKworZ2V0X3R1bmVfcGFyYW1ldGVyc1t2YXJkZXBzZXhjbHVkZV0gPSAiQVZBSUxUVU5FUyBUVU5FX0NDQVJHUyBPVkVSUklERVMgVFVORV9GRUFUVVJFUyBCQVNFX0xJQiBCQVNFTElCIFRVTkVfQVJDSCBBQklFWFRFTlNJT04gVEFSR0VUX0ZQVSBUVU5FX1BLR0FSQ0ggUEFDS0FHRV9FWFRSQV9BUkNIUyIKKworREVCSUFOTkFNRV8ke01MUFJFRklYfWxpYmdjYyA9ICJsaWJnY2MxIgorCitNSVJST1JTID0rICJcCiske0dOVV9NSVJST1J9L2djYyAgICBmdHA6Ly9nY2MuZ251Lm9yZy9wdWIvZ2NjL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYwlmdHA6Ly9nZC50dXdpZW4uYWMuYXQvZ251L2djYy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MJaHR0cDovL21pcnJvcnMucmNuLm5ldC9wdWIvc291cmNld2FyZS9nY2MvcmVsZWFzZXMvIFxuIFwKKyR7R05VX01JUlJPUn0vZ2NjICAgaHR0cDovL2djYy5nZXQtc29mdHdhcmUuY29tL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYwlodHRwOi8vZ2NjLmdldC1zb2Z0d2FyZS5jb20vcmVsZWFzZXMvIFxuIFwKKyIKKyMKKyMgU2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMKKyMKK2djY2xpYmRpciA9ICIke2xpYmRpcn0vZ2NjIgorQklOViA9ICIke1BWfSIKKyNTID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9IgorUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKwordGFyZ2V0X2luY2x1ZGVkaXIgPz0gIiR7aW5jbHVkZWRpcn0iCit0YXJnZXRfbGliZGlyID89ICIke2xpYmRpcn0iCit0YXJnZXRfYmFzZV9saWJkaXIgPz0gIiR7YmFzZV9saWJkaXJ9IgordGFyZ2V0X3ByZWZpeCA/PSAiJHtwcmVmaXh9IgorCisjIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgZm9yIHRoZSBzaGFyZWQgd29yayBkaXJlY3RvcnksIHRoZSBkb19wYXRjaCBzaWduYXR1cmVzIG1hdGNoCisjIFRoZSByZWFsIFdPUktESVIgbG9jYXRpb24gaXNuJ3QgYSBkZXBlbmRlbmN5IGZvciB0aGUgc2hhcmVkIHdvcmtkaXIuCitzcmNfcGF0Y2hlc1t2YXJkZXBzZXhjbHVkZV0gPSAiV09SS0RJUiIKK3Nob3VsZF9hcHBseVt2YXJkZXBzZXhjbHVkZV0gKz0gIlBOIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRiZTczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxMjggQEAKK3JlcXVpcmUgZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKK3JlcXVpcmUgZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCisjCisjIEJ1aWxkIHRoZSBsaXN0IG9mIGxhbmFndWFnZXMgdG8gYnVpbGQuCisjCisjIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB2ZXJzaW9uIHNwZWNpZmljIC5pbmMgZmlsZS4KKworIyBKYXZhIChnY2ogZG9lc24ndCB3b3JrIG9uIGFsbCBhcmNoaXRlY3R1cmVzKQorSkFWQSA/PSAiLGphdmEiCitKQVZBX2FybSA/PSAiIgorSkFWQV9hcm1lYiA/PSAiIgorSkFWQV9taXBzZWwgPz0gIiIKK0pBVkFfc2gzID89ICIiCisjIGdjYyAzLnggZXhwZWN0cyAnZjc3JywgNC4wIGV4cGVjdHMgJ2Y5NScsIDQuMSBhbmQgNC4yIGV4cGVjdCAnZm9ydHJhbicKK0ZPUlRSQU4gPz0gIixmNzciCitMQU5HVUFHRVMgPz0gImMsYysrJHtGT1JUUkFOfSR7SkFWQX0iCisjIGRpc2FibGUgLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIGZvciBwb3dlcnBjIFNQRQorIyBhdCAtT3MgbGliZ2NjLnNvLjEgY3JlYXRlcyByZWZlcmVuY2VzIGludG8KKyMgaGlkZGVuIHN5bWJvbHMgaW4gbGliZ2NjLmEgd2hpY2ggbGlua2VyIGNvbXBsYWlucworIyB3aGVuIGxpbmtpbmcgc2hhcmVkIGxpYnJhcmllcyBmdXJ0aGVyIGluIHRoZSBidWlsZCBsaWtlIChnbnV0bHMpCisKK1NQRUNJQUxfQVJDSF9MSVNUID0gInBvd2VycGMiCitPUFRTUEFDRSA9ICcke0BiYi51dGlscy5jb250YWlucygiU1BFQ0lBTF9BUkNIX0xJU1QiLCAiJHtUQVJHRVRfQVJDSH0iLCAiIiwgIi0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSIsZCl9JworCitFWFRSQV9PRUNPTkZfQkFTRSA/PSAiIgorRVhUUkFfT0VDT05GX1BBVEhTID89ICIiCitFWFRSQV9PRUNPTkZfSU5JVElBTCA/PSAiIgorCitHQ0NNVUxUSUxJQiA/PSAiLS1kaXNhYmxlLW11bHRpbGliIgorR0NDVEhSRUFEUyA/PSAicG9zaXgiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgJHtAWyctLWVuYWJsZS1jbG9jYWxlPWdlbmVyaWMnLCAnJ11bZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSAhPSAnbm8nXX0gXAorICAgIC0td2l0aC1nbnUtbGQgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPSR7TEFOR1VBR0VTfSBcCisgICAgLS1lbmFibGUtdGhyZWFkcz0ke0dDQ1RIUkVBRFN9IFwKKyAgICAke0dDQ01VTFRJTElCfSBcCisgICAgLS1lbmFibGUtYzk5IFwKKyAgICAtLWVuYWJsZS1sb25nLWxvbmcgXAorICAgIC0tZW5hYmxlLXN5bXZlcnM9Z251IFwKKyAgICAtLWVuYWJsZS1saWJzdGRjeHgtcGNoIFwKKyAgICAtLXByb2dyYW0tcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIC0td2l0aG91dC1sb2NhbC1wcmVmaXggXAorICAgICR7T1BUU1BBQ0V9IFwKKyAgICAke0VYVFJBX09FQ09ORl9CQVNFfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfUEFUSFN9IFwKKyAgICAke0BnZXRfZ2NjX21pcHNfcGx0X3NldHRpbmcoYmIsIGQpfSBcCisgICAgJHtAZ2V0X2xvbmdfZG91YmxlX3NldHRpbmcoYmIsIGQpfSBcCisgICAgJHtAZ2V0X2djY19tdWx0aWFyY2hfc2V0dGluZyhiYiwgZCl9IFwKKyIKKworZXhwb3J0IGdjY19jdl9jb2xsZWN0Ml9saWJzID0gJ25vbmUgcmVxdWlyZWQnCisjIFdlIG5lZWQgdG8gc2V0IGdjY19jdl9jb2xsZWN0Ml9saWJzIGVsc2UgdGhlcmUgaXMgY3Jvc3MtY29tcGlsYXRpb24gYmFkbmVzcworIyBpbiB0aGUgY29uZmlnLmxvZyBmaWxlcyAod2hpY2ggbWlnaHQgbm90IGdldCBnZW5lcmF0ZWQgdW50aWwgZG9fY29tcGlsZQorIyBoZW5jZSBiZWluZyBtaXNzZWQgYnkgdGhlIGluc2FuZSBkb19jb25maWd1cmUgY2hlY2spLgorCisjIEJ1aWxkIHVjbGliYyBjb21waWxlcnMgd2l0aG91dCBjeGFfYXRleGl0IHN1cHBvcnQKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGludXggPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ZWwgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0bjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NGVsbjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCisKKyMgQVJNdjYrIGFkZHMgYXRvbWljIGluc3RydWN0aW9ucyB0aGF0IGFmZmVjdCB0aGUgQUJJIGluIGxpYnJhcmllcyBidWlsdAorIyB3aXRoIFRVTkVfQ0NBUkdTIGluIGdjYy1ydW50aW1lLiAgTWFrZSB0aGUgY29tcGlsZXIgZGVmYXVsdCB0byBhCisjIGNvbXBhdGlibGUgYXJjaGl0ZWN0dXJlLiAgYXJtdjYgYW5kIGFybXY3YSBjb3ZlciB0aGUgbWluaW11bSB0dW5lCisjIGZlYXR1cmVzIHVzZWQgaW4gT0UuCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybXY2ID0gIiAtLXdpdGgtYXJjaD1hcm12NiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtdjdhID0gIiAtLXdpdGgtYXJjaD1hcm12Ny1hIgorCitFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUID8/PSAiIgorQ1BQRkxBR1MgPSAiIgorCitTWVNURU1IRUFERVJTID0gIiR7dGFyZ2V0X2luY2x1ZGVkaXJ9IgorU1lTVEVNTElCUyA9ICIke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorU1lTVEVNTElCUzEgPSAiJHt0YXJnZXRfbGliZGlyfS8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIHRlYWNoIGdjYyB0byBmaW5kIGNvcnJlY3QgdGFyZ2V0IGluY2x1ZGVkaXIgd2hlbiBjaGVja2luZyBsaWJjIHNzcCBzdXBwb3J0CisJbWtkaXIgLXAgJHtCfS9nY2MKKwllY2hvICJOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIgPSAke1NZU1RFTUhFQURFUlN9IiA+ICR7Qn0vZ2NjL3Qtb2UKKwljYXQgJHtTfS9nY2MvZGVmYXVsdHMuaCB8IGdyZXAgLXYgIlwjZW5kaWYuKkdDQ19ERUZBVUxUU19IIiA+ICR7Qn0vZ2NjL2RlZmF1bHRzLmgubmV3CisJY2F0ID4+JHtCfS9nY2MvZGVmYXVsdHMuaC5uZXcgPDxfRU9GCisjZGVmaW5lIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiAiJHtTWVNURU1IRUFERVJTfSIKKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIke1NZU1RFTUxJQlN9IgorI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIiR7U1lTVEVNTElCUzF9IgorI2RlZmluZSBTWVNURU1MSUJTX0RJUiAiJHtTWVNURU1MSUJTfSIKKyNlbmRpZiAvKiAhIEdDQ19ERUZBVUxUU19IICovCitfRU9GCisJbXYgJHtCfS9nY2MvZGVmYXVsdHMuaC5uZXcgJHtCfS9nY2MvZGVmYXVsdHMuaAorfQorCitkb19jb25maWd1cmUgKCkgeworCSMgU2V0dXAgdGhlc2UgdmFycyBmb3IgY3Jvc3MgYnVpbGRpbmcgb25seQorCSMgLi4uIGJlY2F1c2UgZm9vX0ZPUl9UQVJHRVQgYXBwYXJlbnRseSBnZXRzIG1pc2ludGVycHJldGVkIGluc2lkZSB0aGUKKwkjIGdjYyBidWlsZCBzdHVmZiB3aGVuIHRoZSBidWlsZCBpcyBwcm9kdWNpbmcgYSBjcm9zcyBjb21waWxlciAtIGkuZS4KKwkjIHdoZW4gdGhlICdjdXJyZW50JyB0YXJnZXQgaXMgdGhlICdob3N0JyBzeXN0ZW0sIGFuZCB0aGUgaG9zdCBpcyBub3QKKwkjIHRoZSB0YXJnZXQgKGJlY2F1c2UgdGhlIGJ1aWxkIGlzIGFjdHVhbGx5IG1ha2luZyBhIGNyb3NzIGNvbXBpbGVyISkKKwlpZiBbICIke0JVSUxEX1NZU30iICE9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQlleHBvcnQgQ0NfRk9SX1RBUkdFVD0iJHtDQ30iCisJCWV4cG9ydCBHQ0NfRk9SX1RBUkdFVD0iJHtDQ30iCisJCWV4cG9ydCBDWFhfRk9SX1RBUkdFVD0iJHtDWFh9IgorCQlleHBvcnQgQVNfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1hcyIKKwkJZXhwb3J0IExEX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9bGQiCisJCWV4cG9ydCBOTV9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfW5tIgorCQlleHBvcnQgQVJfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1hciIKKwkJZXhwb3J0IEdGT1JUUkFOX0ZPUl9UQVJHRVQ9Imdmb3J0cmFuIgorCQlleHBvcnQgUkFOTElCX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9cmFubGliIgorCWZpCisJZXhwb3J0IENDX0ZPUl9CVUlMRD0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IENYWF9GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9MREZMQUdTfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCisKKwlvZV9ydW5jb25mCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGU0ODgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0wLDAgKzEsMTc3IEBACitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK1NVTU1BUlkgPSAiR05VIGNjIGFuZCBnY2MgQyBjb21waWxlcnMgKGNyb3NzLWNhbmFkaWFuIGZvciAke1RBUkdFVF9BUkNIfSB0YXJnZXQpIgorUE4gPSAiZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtIT1NUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay0ke0hPU1RfUFJFRklYfWxpYmMtZm9yLWdjYyBuYXRpdmVzZGstZ2V0dGV4dCIKKworR0NDTVVMVElMSUIgPSAiLS1lbmFibGUtbXVsdGlsaWIiCisKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0JHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1idWlsZC10aW1lLXRvb2xzPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtUQVJHRVRfU1lTfS9iaW4gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisjIFdlIGhhdmUgdG8gcG9pbnQgZ2NjIGF0IGEgc3lzcm9vdCBidXQgd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIGlmIHRoaXMgY2hhbmdlcworIyBlLmcuIHdlIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBtYWNoaW5lcyB3aXRoIGRpZmZlcmVudCB0dW5lcy4KK0VYVFJBX09FQ09ORl9QQVRIU1t2YXJkZXBzZXhjbHVkZV0gPSAiVFVORV9QS0dBUkNIIgorVEFSR0VUX0FSQ0hbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfQVJDSCIKK2dldF9nY2NfZmxvYXRfc2V0dGluZ1t2YXJkZXB2YWx1ZV0gPSAiIgorCisjCisjIGdjYy1jcm9zcyBsb29rcyBhbmQgZmluZHMgdGhlc2UgaW4gJHtleGVjX3ByZWZpeH0gYnV0IHdlJ3JlIG5vdCBzbyBsdWNreQorIyBmb3IgdGhlIHNkay4gSGFyZGNvZGluZyB0aGUgcGF0aHMgZW5zdXJlcyB0aGUgYnVpbGQgZG9lc24ndCBnbyBjYW5hZGlhbiBvciB3b3JzZS4KKyMKK2V4cG9ydCBBUl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hciIKK2V4cG9ydCBBU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hcyIKK2V4cG9ydCBETExUT09MX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWRsbHRvb2wiCitleHBvcnQgQ0NfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorZXhwb3J0IENYWF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1nKysiCitleHBvcnQgR0NDX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWdjYyIKK2V4cG9ydCBMRF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1sZCIKK2V4cG9ydCBMSVBPX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWxpcG8iCitleHBvcnQgTk1fRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bm0iCitleHBvcnQgT0JKRFVNUF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1vYmpkdW1wIgorZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgU1RSSVBfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9c3RyaXAiCitleHBvcnQgV0lORFJFU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH13aW5kcmVzIgorCisjCisjIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBhbmQgbWFrZSBzdXJlIHRoZSBjb21waWxlciBjYW4gZmluZCBzdGFnaW5nCisjCitleHBvcnQgQVJDSF9GTEFHU19GT1JfVEFSR0VUID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IENDX0ZPUl9CVUlMRD0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IENYWF9GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9MREZMQUdTfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBhbGwtaG9zdCBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworfQorCisjIEhhdmluZyBhbnl0aGluZyBhdXRvIGRlcGVuZGluZyBvbiBnY2MtY3Jvc3Mtc2RrIGlzIGEgcmVhbGx5IGJhZCBpZGVhLi4uCitFWENMVURFX0ZST01fU0hMSUJTID0gIjEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MiCisKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke2V4ZWNfcHJlZml4fS9iaW4vKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyogXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKi5vIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYiogXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9pbmNsdWRlLyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vZ3R5cGUuKiBcCisgICAgJHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyogXAorICAgICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2xpYi8qIFwKKyAgICAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS91c3IvaW5jbHVkZS8qIFwKKyIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vLmRlYnVnIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luLy5kZWJ1ZyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICJcCisgICAgJHtpbmZvZGlyfSBcCisgICAgJHttYW5kaXJ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvUkVBRE1FIFwKKyIKKworRVhFRVhUID0gIiIKKworIyBDb21wdXRlIGhvdyB0byBnZXQgZnJvbSBsaWJleGVjZGlyIHRvIGJpbmRpciBpbiBweXRob24gKGVhc2llciB0aGFuIHNoZWxsKQorQklOUkVMUEFUSCA9ICIke0Bvcy5wYXRoLnJlbHBhdGgoZC5leHBhbmQoIiR7YmluZGlyfSIpLCBkLmV4cGFuZCgiJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9IikpfSIKKworZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwkjIENsZWFudXAgc29tZSBvZiB0aGUgJHtsaWJkaXJ9eyxleGVjfS9nY2Mgc3R1ZmYgLi4uCisJcm0gLXIgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtciAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisKKwkjIFdlIGNhcmUgYWJvdXQgZysrIG5vdCBjKysKKwlybSAtZiAke0R9JHtiaW5kaXJ9LypjKysKKworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZ2NjLTx2ZXJzaW9uPiBjb3BpZXMKKwlybSAtZiAke0R9JHtiaW5kaXJ9LypnY2MtPy4/KgorCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlybSAtZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vbGliL2xpYmliZXJ0eS5hCisJIyBOb3Qgc3VyZSB3aGVyZSB0aGUgc3RyYW5nZSBwYXRocyBjb21lIGZyb20KKwlybSAtZiAke0R9JHtsaWJkaXJ9Ly4uL2xpYi9saWJpYmVydHkuYQorCXJtIC1mICR7RH0ke2xpYmRpcn0vbGliaWJlcnR5LmEKKworCSMgQ2xlYW51cCBlbXB0eSBkaXJlY3RvcmllcyB3aGljaCBhcmUgbm90IHNoaXBwZWQKKwkjIHdlIHVzZSBybWRpciBpbnN0ZWFkIG9mICdybSAtZicgdG8gZW5zdXJlIHRoZSBub24gZW1wdHkgZGlyZWN0b3JpZXMgYXJlIG5vdCBkZWxldGVkCisJIyAke0R9JHtsaWJkaXJ9Ly4uL2xpYiBvbmx5IHNlZW1zIHRvIGFwcGVhciB3aXRoIFNES01BQ0hJTkU9aTY4NgorCWxvY2FsIGVtcHR5X2RpcnM9IiR7RH0ke2xpYmRpcn0vLi4vbGliICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9saWIgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9IgorCWZvciBpIGluICRlbXB0eV9kaXJzOyBkbworCQlbIC1kICRpIF0gJiYgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJGkKKwlkb25lCisKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCXN1ZmZpeD0ke0VYRUVYVH0KKwlmb3IgdCBpbiBhciBhcyBsZCBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHN0cmlwIGc3NyBnY2MgY3BwIGdmb3J0cmFuOyBkbworCQlpZiBbICIkdCIgPSAiZzc3IiAtbyAiJHQiID0gImdmb3J0cmFuIiBdICYmIFsgISAtZSAke0R9JHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH0kdCRzdWZmaXggXTsgdGhlbgorCQkJY29udGludWUKKwkJZmkKKworCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQkc3VmZml4ICRkZXN0JHQkc3VmZml4CisJZG9uZQorCXQ9cmVhbC1sZAorCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH1sZCRzdWZmaXggJGRlc3QkdCRzdWZmaXgKKworCSMgbGlicXVhZG1hdGggaGVhZGVycyBuZWVkIHRvICBiZSBhdmFpbGFibGUgaW4gdGhlIGdjYyBsaWJleGVjIGRpcgorCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGhfd2Vhay5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KKwkKKwljcm9zc19jYW5hZGlhbl9iaW5kaXJsaW5rcworfQorCitFTEZVVElMUyA9ICJuYXRpdmVzZGstZWxmdXRpbHMiCitERVBFTkRTICs9ICJuYXRpdmVzZGstZ21wIG5hdGl2ZXNkay1tcGZyIG5hdGl2ZXNkay1saWJtcGMgJHtFTEZVVElMU30gbmF0aXZlc2RrLXpsaWIiCitSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLW1wZnIgbmF0aXZlc2RrLWxpYm1wYyAke0VMRlVUSUxTfSIKKworU1lTVEVNSEVBREVSUyA9ICIvdXNyL2luY2x1ZGUiCitTWVNURU1MSUJTID0gIiR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCitTWVNURU1MSUJTMSA9ICIke3RhcmdldF9saWJkaXJ9LyIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICAtLXdpdGgtbXBmcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsYXlvdXRfZXhlY19wcmVmaXh9IFwKKyAgICAtLXdpdGgtbXBjPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9leGVjX3ByZWZpeH0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtYmFyZW1ldGFsID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCisjIGdjYyA0LjcgbmVlZHMgLWlzeXN0ZW0KK2V4cG9ydCBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQgPSAiLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSAtaXN5c3RlbT0ke3RhcmdldF9pbmNsdWRlZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC44LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS4yLmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5NzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsOTYgQEAKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIgorUEFDS0FHRVMgPSAiIgorCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitQTiA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKKworQ1JPU1NfVEFSR0VUX1NZU19ESVJfYXBwZW5kID0gIi4ke1BOfSIKKworIyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIGEgLXZlcnktIGJhc2ljIGNvbmZpZworIyBzeXNyb290IGlzIG5lZWRlZCBpbiBjYXNlIHdlIHVzZSBsaWJjLWluaXRpYWwKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS13aXRoLW5ld2xpYiBcCisgICAgLS13aXRob3V0LWhlYWRlcnMgXAorICAgIC0tZGlzYWJsZS1zaGFyZWQgXAorICAgIC0tZGlzYWJsZS10aHJlYWRzIFwKKyAgICAtLWRpc2FibGUtbXVsdGlsaWIgXAorICAgIC0tZGlzYWJsZS1fX2N4YV9hdGV4aXQgXAorICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jIFwKKyAgICAke09QVFNQQUNFfSBcCisgICAgLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke0dDQ0NST1NTX0JVSUxEU1lTUk9PVH0gXAorICAgICR7RVhUUkFfT0VDT05GX0lOSVRJQUx9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnLS13aXRoLWxkPSR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS8ke1RBUkdFVF9QUkVGSVh9bGQuYmZkJywgJycsIGQpfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUfSBcCisiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLW5hdGl2ZS1zeXN0ZW0taGVhZGVyLWRpcj0ke1NZU1RFTUhFQURFUlN9IgorCitHQ0NDUk9TU19CVUlMRFNZU1JPT1QgPSAiJHtCfS90bXBzeXNyb290IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc3lzcj0ke0dDQ0NST1NTX0JVSUxEU1lTUk9PVH0ke3RhcmdldF9pbmNsdWRlZGlyfQorCW1rZGlyIC1wICRzeXNyCisJZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworCQlybSAtZiAkc3lzci8kdAorCQlsbiAtcyAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfS8kdCAkc3lzci8KKwlkb25lCit9CisKK2RvX2NvbXBpbGUgKCkgeworICAgIG9lX3J1bm1ha2UgYWxsLWdjYyBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworfQorZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1nY2MKKworCSMgV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAoaGVyZSBzaGFyZXMvIGNvbnRhaW5zIG1hbi8sIGluZm8vLCBsb2NhbGUvKS4KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuYSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtleGVjX3ByZWZpeH0vbGliIC1uYW1lIGxpYmliZXJ0eS5oIHwgeGFyZ3Mgcm0gLWYKKworCSMgSW5zZXJ0IHN5bWxpbmtzIGludG8gbGliZXhlYyBzbyB3aGVuIHRvb2xzIHdpdGhvdXQgYSBwcmVmaXggYXJlIHNlYXJjaGVkIGZvciwgdGhlIGNvcnJlY3Qgb25lcyBhcmUKKwkjIGZvdW5kLiBUaGVzZSBuZWVkIHRvIGJlIHJlbGF0aXZlIHBhdGhzIHNvIHRoZXkgd29yayBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorCWRlc3Q9JHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8KKwlpbnN0YWxsIC1kICRkZXN0CisJdXNlbGQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJy5iZmQnLCAnJywgZCl9CisJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfWxkJHt1c2VsZH0gJHtkZXN0fWxkCisJZm9yIHQgaW4gYXIgYXMgbm0gb2JqY29weSBvYmpkdW1wIHJhbmxpYiBzdHJpcCBnNzcgZ2NjIGNwcCBnZm9ydHJhbjsgZG8KKwkJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfSR0ICRkZXN0JHQKKwlkb25lCisJIyBmaXhlZCBsaW1pdHMuaCBpbmZhY3QgaW5jbHVkZXMgdGhlIHNvIGNhbGxlZCByZWFsIGxpbWl0cy5oCisJIyB3aGljaCBzaG91bGQgY29tZSBmcm9tIGxpYmMgYnV0IHdoZW4gd2UgYnVpbGQgbGliYy1pbml0aWFsCisJIyB0aGVuIGJ1bmNoIG9mIGNvbmZpZ3VyZSB0ZXN0cyBpbmNsdWRlIGZpeGVkIGxpbWl0cy5oIHdoaWNoIGluIHR1cm4KKwkjIGluY2x1ZGVzIHJlYWwgbGltaXRzLmggYnV0IHRoaXMgcmVhbCBsaW1pdHMuaCBpcyBub3Qgc3RhZ2VkIHlldAorCSMgc28gd2Ugb3ZlcndpcnRlIHRoZSBnZW5lcmF0ZWQgaW5jbHVkZS1maXhlZC9saW1pdHMuaCBmb3IgZ2NjLWNyb3NzLWluaXRpYWwKKwkjIHRvIGdldCByaWQgcmVmZXJlbmNlcyB0byByZWFsIGxpbWl0cy5oCisJY3AgZ2NjL2luY2x1ZGUtZml4ZWQvbGltaXRzLmggJHtEfSR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9saW1pdHMuaAorCisJIyBnY2MtcnVudGltZSBpbnN0YWxscyBsaWJnY2MgaW50byBhIHNwZWNpYWwgbG9jYXRpb24gaW4gc3RhZ2luZyBzaW5jZSBpdCBicmVha3MgZG9pbmcgYSBzdGFuZGFsb25lIGJ1aWxkCisJY2FzZSAke1BOfSBpbgorCQkqZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9KQorCQkJZGVzdD0ke0R9LyR7aW5jbHVkZWRpcn0vZ2NjLWJ1aWxkLWludGVybmFsLWluaXRpYWwtJHtUQVJHRVRfU1lTfQorCQkJaGFyZGxpbmtkaXIgLiAkZGVzdAorCQk7OworCWVzYWMKK30KKyMKKyMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3lzcm9vdCBzdGFnaW5nIGNvcHkgc2luY2UgdGhpcyB3b24ndCBsb29rIGxpa2UgYSB0YXJnZXQgc3lzdGVtCisjCitzeXNyb290X3N0YWdlX2FsbCgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9ICR7U1lTUk9PVF9ERVNURElSfQorCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfYmFzZV9saWJkaXJ9LworCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfbGliZGlyfS8KKwltdiAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9iYXNlX2xpYmRpcn0vKiAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9iYXNlX2xpYmRpcn0vIHx8IHRydWUKKwltdiAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9saWJkaXJ9LyogJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfbGliZGlyfS8gfHwgdHJ1ZQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfS8ke1NUQUdJTkdfRElSX0hPU1R9LyAke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyAke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8ke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zcy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzczZTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3M2U1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExMDYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYwpAQCAtMCwwICsxLDE5OCBAQAoraW5oZXJpdCBjcm9zcworCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRVhUUkFERVBFTkRTID0gIiIKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjICR7RVhUUkFERVBFTkRTfSAke05BVElWRURFUFN9IgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyIKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgICAgIGQuc2V0VmFyKCJFWFRSQURFUEVORFMiLCAibGludXgtbGliYy1oZWFkZXJzIikKK30KKworUE4gPSAiZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorCityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiCitFWFRSQV9PRUNPTkZfYXBwZW5kX3NoNCA9ICIgXAorICAgIC0td2l0aC1tdWx0aWxpYi1saXN0PSBcCisgICAgLS1lbmFibGUtaW5jb21wbGV0ZS10YXJnZXRzIFwKKyIKKworRVhUUkFfT0VDT05GICs9ICJcCisgICAgLS13aXRoLW1wZnI9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyIKKworREVQRU5EU19yZW1vdmVfbGliYy1iYXJlbWV0YWwgOj0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1iYXJlbWV0YWwgPSAiIC0td2l0aG91dC1oZWFkZXJzIgorRVhUUkFfT0VDT05GX3JlbW92ZV9saWJjLWJhcmVtZXRhbCA9ICItLWVuYWJsZS10aHJlYWRzPXBvc2l4IgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdCR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQgKz0gIi1pc3lzdGVtJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0iCisKK2RvX2NvbXBpbGUgKCkgeworCWV4cG9ydCBDQz0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IEFSX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tYXIiCisJZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUPSIke1RBUkdFVF9TWVN9LXJhbmxpYiIKKwlleHBvcnQgTERfRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1sZCIKKwlleHBvcnQgTk1fRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1ubSIKKwlleHBvcnQgQ0NfRk9SX1RBUkdFVD0iJHtDQ0FDSEV9ICR7VEFSR0VUX1NZU30tZ2NjIgorCWV4cG9ydCBDRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DWFhGTEFHU30iCisJZXhwb3J0IExERkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfTERGTEFHU30iCisKKwlvZV9ydW5tYWtlIGFsbC1ob3N0IGNvbmZpZ3VyZS10YXJnZXQtbGliZ2NjCisJIyBub3cgZ2VuZXJhdGUgc2NyaXB0IHRvIGRyaXZlIHRlc3RpbmcKKwllY2hvICIjIS91c3IvYmluL2VudiBzaCIgPiR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZXQgPj4gJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCSMgcHJ1bmUgb3V0IHRoZSB1bm5lZWRlZCB2YXJzCisJc2VkIC1pIC1lICIvXkJBU0gvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15VU0VSL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eT1BUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRElSU1RBQ0svZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15FVUlEL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRlVOQ05BTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15HUk9VUFMvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15IT1NUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eSE9NRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXklGUy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkxDX0FMTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkxPR05BTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15NQUNIVFlQRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXk9TVFlQRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBJUEUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TSEVMTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXicvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15VSUQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15URVJNL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUEFUQ0hfR0VUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUEtHXy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBPU0lYTFlfL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUFBJRC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBTNC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlEvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TSExWTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlNUQUdJTkcvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15MRF9MSUJSQVJZX1BBVEgvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QU0VVRE8vZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCisJIyBhcHBlbmQgZXhlY3V0aW9uIHBhcnQgb2YgdGhlIHNjcmlwdAorY2F0ID4+ICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MgPDwgU1RPUAordGFyZ2V0PSJcJDEiCit1c2FnZSAoKSB7CisJZWNobyAiVXNhZ2U6IgorCWVjaG8gIlwkMCB1c2VyQHRhcmdldCAnZXh0cmEgb3B0aW9ucyB0byBkZWphZ251JyIKKwllY2hvICJcJDAgdGFyZ2V0ICdleHRyYSBvcHRpb25zIHRvIGRlamFnbnUnIgorCWVjaG8gIlwkMCB0YXJnZXQiCisJZWNobyAiZS5nLiBcJDAgMTkyLjE2OC43LjIgJyBkZy5leHA9dmlzaWJpbGl0eS1kLmMnIgorCWVjaG8gIndpbGwgb25seSBydW4gdmlzaWJpbGl0eS1kLmMgdGVzdCBjYXNlIgorCWVjaG8gImUuZy4gXCQwIDE5Mi4xNjguNy4yICcvLW10aHVtYiBkZy5leHA9dmlzaWJpbGl0eS1kLmMnIgorCWVjaG8gIndpbGwgb25seSBydW4gdmlzaWJpbGl0eS1kLmMgdGVzdCBjYXNlIGluIHRodW1iIG1vZGUiCisJZWNobyAiWW91IG5lZWQgdG8gaGF2ZSBkZWphZ251IGF1dG9nZW4gZXhwZWN0IGluc3RhbGxlZCIKKwllY2hvICJvbiB0aGUgYnVpbGQgaG9zdCIKKyAgICB9CitpZiBbICJ4XCR0YXJnZXQiID0gIngiIF0KK3RoZW4KKwllY2hvICJQbGVhc2Ugc3BlY2lmeSB0aGUgdGFyZ2V0IG1hY2hpbmUgYW5kIHJlbW90ZSB1c2VyIGluIGZvcm0gb2YgdXNlckB0YXJnZXRcbiIKKwl1c2FnZQorCWV4aXQgMTsKK2ZpCisKK3NoaWZ0CisKK2VjaG8gIlwkdGFyZ2V0IiB8IGdyZXAgIkAiIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iID0gIngwIiBdCit0aGVuCisgICB1c2VyPVwkKGVjaG8gXCR0YXJnZXQgfCBjdXQgLWQgJ0AnIC1mIDEpCisgICB0YXJnZXQ9XCQoZWNobyBcJHRhcmdldCB8IGN1dCAtZCAnQCcgLWYgMikKK2Vsc2UKKyAgIHVzZXI9XCRVU0VSCitmaQorc3NoIFwkdXNlckBcJHRhcmdldCBkYXRlIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iICE9ICJ4MCIgXQordGhlbgorCWVjaG8gIkZhaWxlZCBjb25uZWN0aW5nIHRvIFwkdXNlckBcJHRhcmdldCBpdCBjb3VsZCBiZSBiZWNhdXNlIgorCWVjaG8gInlvdSBkb24ndCBoYXZlIHBhc3N3b3JkbGVzcyBzc2ggc2V0dXAgdG8gYWNjZXNzIFwkdGFyZ2V0IgorCWVjaG8gIm9yIHNvbWV0aW1lcyBob3N0IGtleSBoYXMgYmVlbiBjaGFuZ2VkIgorCWVjaG8gImluIHN1Y2ggY2FzZSBkbyBzb21ldGhpbmcgbGlrZSBiZWxvdyBvbiBidWlsZCBob3N0IgorCWVjaG8gInNzaC1rZXlnZW4gLWYgIn4vLnNzaC9rbm93bl9ob3N0cyIgLVIgXCR0YXJnZXQiCisJZWNobyAiYW5kIHRoZW4gdHJ5IHNzaCBcJHVzZXJAXCR0YXJnZXQiCisKKwl1c2FnZQorCWV4aXQgMQorZmkKKwllY2hvICJsYXBwZW5kIGJvYXJkc19kaXIgW3B3ZF0vLi4vLi4vLi4iID4gJHtCfS9zaXRlLmV4cAorCWVjaG8gImxvYWRfZ2VuZXJpY19jb25maWcgXCJ1bml4XCIiID4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gdXNlcm5hbWUgXCR1c2VyIiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwllY2hvICJzZXRfYm9hcmRfaW5mbyByc2hfcHJvZyBzc2giID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIHJjcF9wcm9nIHNjcCIgPj4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gaG9zdG5hbWUgXCR0YXJnZXQiID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCURFSkFHTlU9JHtCfS9zaXRlLmV4cCBtYWtlIC1rIGNoZWNrIFJVTlRFU1RGTEFHUz0iLS10YXJnZXRfYm9hcmQ9JHtQQUNLQUdFX0FSQ0h9XCRAIgorCitTVE9QCisKKwljaG1vZCAreCAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisKK30KKworSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCisKKyMgQ29tcHV0ZSBob3cgdG8gZ2V0IGZyb20gbGliZXhlY2RpciB0byBiaW5kaXIgaW4gcHl0aG9uIChlYXNpZXIgdGhhbiBzaGVsbCkKK0JJTlJFTFBBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGQuZXhwYW5kKCIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9TWVN9IiksIGQuZXhwYW5kKCIke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0iKSl9IgorCitkb19pbnN0YWxsICgpIHsKKwkoIGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC11bndpbmRfaCApCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWhvc3QKKworCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2xpYmRpcn0KKyAgICAKKwkjIExpbmsgZ2ZvcnRyYW4gdG8gZzc3IHRvIHNhdGlzZnkgbm90LXNvLXNtYXJ0IGNvbmZpZ3VyZSBvciBoYXJkIGNvZGVkIGc3NworCSMgZ2ZvcnRyYW4gaXMgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUuIFRoaXMgaXMgYSBzYWZlIGFuZCBwcmFjdGljYWwgc29sdXRpb24uIAorCWxuIC1zZiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfUFJFRklYfWc3NyB8fCB0cnVlCisKKwkKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4gVGhlc2UgbmVlZCB0byBiZSByZWxhdGl2ZSBwYXRocyBzbyB0aGV5IHdvcmsgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCWZvciB0IGluIGFyIGFzIGxkIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgZzc3IGdjYyBjcHAgZ2ZvcnRyYW47IGRvCisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAkZGVzdCR0CisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAke2Rlc3R9JHtUQVJHRVRfUFJFRklYfSR0CisJZG9uZQorCisJIyBSZW1vdmUgdGhpbmdzIHdlIGRvbid0IG5lZWQgYnV0IGtlZXAgc2hhcmUvamF2YQorCWZvciBkIGluIGluZm8gbWFuIHNoYXJlL2RvYyBzaGFyZS9sb2NhbGUgc2hhcmUvbWFuIHNoYXJlL2luZm87IGRvCisJCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8kZAorCWRvbmUKKworCSMgbGlicXVhZG1hdGggaGVhZGVycyBuZWVkIHRvICBiZSBhdmFpbGFibGUgaW4gdGhlIGdjYyBsaWJleGVjIGRpcgorCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGhfd2Vhay5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmEgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuaCB8IHhhcmdzIHJtIC1mCisKKwkjIGdjYy1ydW50aW1lIGluc3RhbGxzIGxpYmdjYyBpbnRvIGEgc3BlY2lhbCBsb2NhdGlvbiBpbiBzdGFnaW5nIHNpbmNlIGl0IGJyZWFrcyBkb2luZyBhIHN0YW5kYWxvbmUgYnVpbGQKKwljYXNlICR7UE59IGluCisJCSpnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSkKKwkJCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2djYy1idWlsZC1pbnRlcm5hbC0ke1RBUkdFVF9TWVN9CisJCQloYXJkbGlua2RpciAuICRkZXN0CisJCTs7CisJZXNhYworfQorCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNjY2EwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2NjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzY2NhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzUuMi5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyNTk5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsMTAgQEAKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK1NZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK1NZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCitTWVNURU1MSUJTMSA9ICIke1NES1BBVEhOQVRJVkV9JHtsaWJkaXJfbmF0aXZlc2RrfS8iCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgZ2V0dGV4dC1uYXRpdmUgJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsLWNyb3Nzc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkwZTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay1pbml0aWFsLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTBlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MGUxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF8ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjg4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMKQEAgLTAsMCArMSwxMiBAQAoraW5oZXJpdCBjcm9zc3NkaworCitQTiA9ICJnY2MtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0iCisKK1NZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK1NZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCitTWVNURU1MSUJTMSA9ICIke1NES1BBVEhOQVRJVkV9JHtsaWJkaXJfbmF0aXZlc2RrfS8iCisKK0dDQ01VTFRJTElCID0gIi0tZGlzYWJsZS1tdWx0aWxpYiIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay0ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjIGdldHRleHQtbmF0aXZlICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtY3Jvc3NzZGsgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrLWNyb3Nzc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTZjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGsuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE2YzRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtbXVsdGlsaWItY29uZmlnLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmOWY1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKQEAgLTAsMCArMSwyMjcgQEAKKyMgZm9sbG93aW5nIGNvZGUgbW9kaWZpZXMgdGhlc2UgZGVmaW5pdGlvbnMgaW4gdGhlIGdjYyBjb25maWcKKyMgICAgTVVMVElMSUJfT1BUSU9OUworIyAgICBNVUxUSUxJQl9ESVJOQU1FUworIyAgICBNVUxUSUxJQl9PU0RJUk5BTUVTCisjICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NAorIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUlgzMgorIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUk4zMgorIyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNlIG9mIHRoZXNlIHZhcmlhYmxlcyBsb29rIGF0IHRoZXNlIGZpbGVzIGluIHRoZSBnY2Mgc291cmNlIGNvZGUKKyMgICAgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisjICAgIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL2kzODYvbGludXg2NC5oCisjICAgIGdjYy9jb25maWcvbWlwcy9saW51eDY0LmgKKyMgICAgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCisKK01VTFRJTElCX09QVElPTl9XSElURUxJU1QgPz89ICItbTMyIC1tNjQgLW14MzIgLW1hYmk9bjMyIC1tYWJpPTMyIC1tYWJpPTY0IiAKKworcHl0aG9uIGdjY19tdWx0aWxpYl9zZXR1cCgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IGdsb2IKKworICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdCJywgVHJ1ZSkKKyAgICBzcmNfY29uZl9kaXIgPSAnJXMvZ2NjL2NvbmZpZycgJSBzcmNkaXIKKyAgICBidWlsZF9jb25mX2RpciA9ICclcy9nY2MvY29uZmlnJyAlIGJ1aWxkZGlyCisKKyAgICBiYi51dGlscy5yZW1vdmUoYnVpbGRfY29uZl9kaXIsIFRydWUpCisgICAgbWxfZ2xvYnMgPSAoJyVzLyovdC1saW51eDY0JyAlIHNyY19jb25mX2RpciwKKyAgICAgICAgICAgICAgICAnJXMvKi9saW51eDY0LmgnICUgc3JjX2NvbmZfZGlyLAorICAgICAgICAgICAgICAgICclcy8qL2xpbnV4LmgnICUgc3JjX2NvbmZfZGlyLAorICAgICAgICAgICAgICAgICclcy9saW51eC5oJyAlIHNyY19jb25mX2RpcikKKworICAgICMgY29weSB0aGUgdGFyZ2V0IG11bHRpbGliIGNvbmZpZyBmaWxlcyB0byAke0J9CisgICAgZm9yIG1sX2dsb2IgaW4gbWxfZ2xvYnM6CisgICAgICAgIGZvciBmbiBpbiBnbG9iLmdsb2IobWxfZ2xvYik6CisgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnBhdGgucmVscGF0aChmbiwgc3JjX2NvbmZfZGlyKQorICAgICAgICAgICAgcGFyZW50X2RpciA9IG9zLnBhdGguZGlybmFtZShyZWxfcGF0aCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcignJXMvJXMnICUgKGJ1aWxkX2NvbmZfZGlyLCBwYXJlbnRfZGlyKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZuLCAnJXMvJXMnICUgKGJ1aWxkX2NvbmZfZGlyLCByZWxfcGF0aCkpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbXVsdGlsaWJzID0gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgaWYgbm90IG11bHRpbGlicyBhbmQgcG4gIT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICByZXR1cm4KKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKworICAgIGlmICgnJXNnY2MnICUgbWxwcmVmaXgpICE9IHBuIGFuZCAobm90IHBuLnN0YXJ0c3dpdGgoJ2djYy1jcm9zcy1jYW5hZGlhbicpKSBhbmQgcG4gIT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICByZXR1cm4KKworCisgICAgZGVmIHdyaXRlX2NvbmZpZyhyb290LCBmaWxlcywgb3B0aW9ucywgZGlybmFtZXMsIG9zZGlybmFtZXMpOgorICAgICAgICBmb3IgbWxfY29uZl9maWxlIGluIGZpbGVzOgorICAgICAgICAgICAgd2l0aCBvcGVuKHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgIyByZWNyZWF0ZSBtdWx0aWxpYiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHN1YnN0cyA9IFsKKyAgICAgICAgICAgICAgICAgICAgKHInXihccyooTVVMVElMSUJfT1BUSU9OU1xzKj0pLiopJCcsIHInXDIgJXMnICUgJy8nLmpvaW4ob3B0aW9ucykpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKk1VTFRJTElCX09QVElPTlNccypcKz0uKikkJywgJycpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKihNVUxUSUxJQl9ESVJOQU1FU1xzKj0pLiopJCcsIHInXDIgJXMnICUgJyAnLmpvaW4oZGlybmFtZXMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9ESVJOQU1FU1xzKlwrPS4qKSQnLCAnJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqKE1VTFRJTElCX09TRElSTkFNRVNccyo9KS4qKSQnLCByJ1wyICVzJyAlICcgJy5qb2luKG9zZGlybmFtZXMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9PU0RJUk5BTUVTXHMqXCs9LiopJCcsICcnKSwKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgICAgICBmb3IgKGksIGxpbmUpIGluIGVudW1lcmF0ZShmaWxlbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Vic3QgaW4gc3Vic3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YihzdWJzdFswXSwgc3Vic3RbMV0sIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaW5lc1tpXSA9IGxpbmUKKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihyb290ICsgJy8nICsgbWxfY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJycuam9pbihmaWxlbGluZXMpKQorCisgICAgZGVmIHdyaXRlX2hlYWRlcnMocm9vdCwgZmlsZXMsIGxpYmRpcjMyLCBsaWJkaXI2NCwgbGliZGlyeDMyLCBsaWJkaXJuMzIpOgorICAgICAgICBkZWYgd3JhcF9saWJkaXIobGliZGlyKToKKyAgICAgICAgICAgIGlmIGxpYmRpci5maW5kKCdTWVNURU1MSUJTX0RJUicpICE9IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiAnIiVyIicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICciLyVzLyInICUgbGliZGlyCisKKyAgICAgICAgZm9yIG1sX2NvbmZfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGZuID0gcm9vdCArICcvJyArIG1sX2NvbmZfZmlsZQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZWxpbmVzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgIyByZXBsYWNlIGxpbmVzIGxpa2UKKyAgICAgICAgICAgICAgICAjICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAgICAgICAgICAgICAgICAjIGJ5CisgICAgICAgICAgICAgICAgIyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvIiAibGQtbGludXguc28uMiIKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgbmVlZGVkIHRvIHB1dCB0aGUgY29ycmVjdCBkeW5hbWljIGxvYWRlciBwYXRoIGluIHRoZSBnZW5lcmF0ZWQgYmluYXJpZXMKKyAgICAgICAgICAgICAgICBzdWJzdHMgPSBbCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXIzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSNjRccyopKFxTKykoXHMqXCJcUytcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUjY0XHMqXCJcUytcIlxzKikoXFMrKShccypcIlxTK1wiXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1w1JyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSWDMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyeDMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXJuMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqVUNMSUJDX0RZTkFNSUNfTElOS0VSNjRccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUk4zMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcm4zMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUlxiXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgIF0KKworICAgICAgICAgICAgICAgIGZvciAoaSwgbGluZSkgaW4gZW51bWVyYXRlKGZpbGVsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJzdCBpbiBzdWJzdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKHN1YnN0WzBdLCBzdWJzdFsxXSwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWxpbmVzW2ldID0gbGluZQorCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJy5qb2luKGZpbGVsaW5lcykpCisKKworICAgIGdjY190YXJnZXRfY29uZmlnX2ZpbGVzID0geworICAgICAgICAneDg2XzY0JyAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnaTU4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnaTY4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnbWlwcycgICAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCddLAorICAgICAgICAnbWlwczY0JyAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCddLAorICAgICAgICAncG93ZXJwYycgICA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0J10sCisgICAgICAgICdwb3dlcnBjNjQnIDogWydnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQnXSwKKyAgICB9CisKKyAgICBnY2NfaGVhZGVyX2NvbmZpZ19maWxlcyA9IHsKKyAgICAgICAgJ3g4Nl82NCcgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ2k1ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ2k2ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ21pcHMnICAgICAgOiBbJ2djYy9jb25maWcvbWlwcy9saW51eC5oJywgJ2djYy9jb25maWcvbWlwcy9saW51eDY0LmgnXSwKKyAgICAgICAgJ21pcHM2NCcgICAgOiBbJ2djYy9jb25maWcvbWlwcy9saW51eC5oJywgJ2djYy9jb25maWcvbWlwcy9saW51eDY0LmgnXSwKKyAgICAgICAgJ3Bvd2VycGMnICAgOiBbJ2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCddLAorICAgICAgICAncG93ZXJwYzY0JyA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oJ10sCisgICAgfQorCisgICAgbGliZGlyMzIgPSAnU1lTVEVNTElCU19ESVInCisgICAgbGliZGlyNjQgPSAnU1lTVEVNTElCU19ESVInCisgICAgbGliZGlyeDMyID0gJ1NZU1RFTUxJQlNfRElSJworICAgIGxpYmRpcm4zMiA9ICdTWVNURU1MSUJTX0RJUicKKworCisgICAgdGFyZ2V0X2FyY2ggPSAoZC5nZXRWYXIoJ1RBUkdFVF9BUkNIX01VTFRJTElCX09SSUdJTkFMJywgVHJ1ZSkgaWYgbWxwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSkKKyAgICBpZiBwbiA9PSAibmF0aXZlc2RrLWdjYyI6CisgICAgICAgIGhlYWRlcl9jb25maWdfZmlsZXMgPSBnY2NfaGVhZGVyX2NvbmZpZ19maWxlc1tkLmdldFZhcigiU0RLX0FSQ0giLCBUcnVlKV0KKyAgICAgICAgd3JpdGVfaGVhZGVycyhidWlsZGRpciwgaGVhZGVyX2NvbmZpZ19maWxlcywgbGliZGlyMzIsIGxpYmRpcjY0LCBsaWJkaXJ4MzIsIGxpYmRpcm4zMikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiB0YXJnZXRfYXJjaCBub3QgaW4gZ2NjX3RhcmdldF9jb25maWdfZmlsZXM6CisgICAgICAgIGJiLndhcm4oJ2djYyBtdWx0aWxpYiBzZXR1cCBpcyBub3Qgc3VwcG9ydGVkIGZvciBUQVJHRVRfQVJDSD0nICsgdGFyZ2V0X2FyY2gpCisgICAgICAgIHJldHVybgorCisgICAgdGFyZ2V0X2NvbmZpZ19maWxlcyA9IGdjY190YXJnZXRfY29uZmlnX2ZpbGVzW3RhcmdldF9hcmNoXQorICAgIGhlYWRlcl9jb25maWdfZmlsZXMgPSBnY2NfaGVhZGVyX2NvbmZpZ19maWxlc1t0YXJnZXRfYXJjaF0KKworICAgIG1sX2xpc3QgPSBbJ0RFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMJyBpZiBtbHByZWZpeCBlbHNlICdERUZBVUxUVFVORSddCisgICAgbWx0dW5lcyA9IFsoJ0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcycgJSBtbCkgZm9yIG1sIGluIG11bHRpbGlic10KKyAgICBpZiBtbHByZWZpeDoKKyAgICAgICAgbWxpbmRleCA9IDAKKyAgICAgICAgZm9yIG1sIGluIG11bHRpbGliczoKKyAgICAgICAgICAgIGlmIG1scHJlZml4ID09IG1sICsgJy0nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBtbGluZGV4ICs9IDEKKworICAgICAgICBtbF9saXN0LmV4dGVuZChtbHR1bmVzWzptbGluZGV4XSArIFsnREVGQVVMVFRVTkUnXSArIG1sdHVuZXNbKG1saW5kZXggKyAxKTpdKQorICAgIGVsc2U6CisgICAgICAgIG1sX2xpc3QuZXh0ZW5kKG1sdHVuZXMpCisKKyAgICBvcHRpb25zID0gW10KKyAgICBkaXJuYW1lcyA9IFtdCisgICAgb3NkaXJuYW1lcyA9IFtdCisgICAgb3B0c2V0cyA9IFtdCisKKyAgICBmb3IgbWwgaW4gbWxfbGlzdDoKKyAgICAgICAgdHVuZSA9IGQuZ2V0VmFyKG1sLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgdHVuZS4gU2tpcHBpbmcuLi4iICUgbWwpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0dW5lX3BhcmFtZXRlcnMgPSBnZXRfdHVuZV9wYXJhbWV0ZXJzKHR1bmUsIGQpCisKKyAgICAgICAgdHVuZV9iYXNlbGliID0gdHVuZV9wYXJhbWV0ZXJzWydiYXNlbGliJ10KKyAgICAgICAgaWYgbm90IHR1bmVfYmFzZWxpYjoKKyAgICAgICAgICAgIGJiLndhcm4oIlR1bmUgJXMgZG9lc24ndCBoYXZlIGEgYmFzZWxpYiBzZXQuIFNraXBwaW5nLi4uIiAlIHR1bmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliNjQnOgorICAgICAgICAgICAgbGliZGlyNjQgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYngzMic6CisgICAgICAgICAgICBsaWJkaXJ4MzIgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYjMyJzoKKyAgICAgICAgICAgIGxpYmRpcm4zMiA9IHR1bmVfYmFzZWxpYgorICAgICAgICBlbGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliJzoKKyAgICAgICAgICAgIGxpYmRpcjMyID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5lcnJvcignVW5rbm93biBsaWJkaXIgKCVzKSBvZiB0aGUgdHVuZSA6ICVzJyAlICh0dW5lX2Jhc2VsaWIsIHR1bmUpKQorCisgICAgICAgICMgdGFrZSBvdXQgJy0nIG1jcHU9J3MgYW5kIG1hcmNoPSdzIGZyb20gcGFyYW1ldGVycworICAgICAgICBvcHRzID0gW10KKyAgICAgICAgd2hpdGVsaXN0ID0gKGQuZ2V0VmFyKCJNVUxUSUxJQl9PUFRJT05fV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGkgaW4gdHVuZV9wYXJhbWV0ZXJzWydjY2FyZ3MnXS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgaSBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHN0cmlwICctJyBmcm9tIG9wdGlvbgorICAgICAgICAgICAgICAgIG9wdHMuYXBwZW5kKGlbMTpdKQorICAgICAgICBvcHRpb25zLmFwcGVuZCgiICIuam9pbihvcHRzKSkKKworICAgICAgICBpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYic6CisgICAgICAgICAgICBkaXJuYW1lcy5hcHBlbmQoJzMyJykgICMgL2xpYiA9PiAzMmJpdCBsaWIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcm5hbWVzLmFwcGVuZCh0dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpKQorICAgICAgICBvc2Rpcm5hbWVzLmFwcGVuZCgnLi4vJyArIHR1bmVfYmFzZWxpYikKKworICAgIHdyaXRlX2NvbmZpZyhidWlsZGRpciwgdGFyZ2V0X2NvbmZpZ19maWxlcywgb3B0aW9ucywgZGlybmFtZXMsIG9zZGlybmFtZXMpCisgICAgd3JpdGVfaGVhZGVycyhidWlsZGRpciwgaGVhZGVyX2NvbmZpZ19maWxlcywgbGliZGlyMzIsIGxpYmRpcjY0LCBsaWJkaXJ4MzIsIGxpYmRpcm4zMikKK30KKworZ2NjX211bHRpbGliX3NldHVwW2NsZWFuZGlyc10gPSAiJHtCfS9nY2MvY29uZmlnIgorCitFWFRSQUNPTkZGVU5DUyArPSAiZ2NjX211bHRpbGliX3NldHVwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTc1N2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKQEAgLTAsMCArMSwxOTUgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0NYWEZMQUdTIDo9ICIke0BvZV9maWx0ZXJfb3V0KCctZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4nLCAnJHtDWFhGTEFHU30nLCBkKX0iCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4c3RkYmFzZSA9ICIgLS1lbmFibGUtY2xvY2FsZT1nbnUiCisKK1JVTlRJTUVUQVJHRVQgPSAibGlic3NwIGxpYnN0ZGMrKy12MyBsaWJnb21wIGxpYmF0b21pYyIKKyMgID8KKyMgbGliaWJlcnR5CisjIGxpYm11ZGZsYXAKKyMgbGliZ2ZvcnRyYW4gbmVlZHMgc2VwYXJhdGUgcmVjaXBlIGR1ZSB0byBsaWJxdWFkbWF0aCBkZXBlbmRlbmN5CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IENYWD0iJHtDWFh9IC1ub3N0ZGluYysrIC1ub3N0ZGxpYisrIgorCW10YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwloYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0ICR7Qn0KKwlmb3IgZCBpbiBsaWJnY2MgJHtSVU5USU1FVEFSR0VUfTsgZG8KKwkJZWNobyAiQ29uZmlndXJpbmcgJGQiCisJCXJtIC1yZiAke0J9LyR0YXJnZXQvJGQvCisJCW1rZGlyIC1wICR7Qn0vJHRhcmdldC8kZC8KKwkJY2QgJHtCfS8kdGFyZ2V0LyRkLworCQljaG1vZCBhK3ggJHtTfS8kZC9jb25maWd1cmUKKwkJJHtTfS8kZC9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKwlkb25lCit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWZvciBkIGluIGxpYmdjYyAke1JVTlRJTUVUQVJHRVR9OyBkbworCQljZCAke0J9LyR0YXJnZXQvJGQvCisJCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJGQvCisJZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwlmb3IgZCBpbiAke1JVTlRJTUVUQVJHRVR9OyBkbworCQljZCAke0J9LyR0YXJnZXQvJGQvCisJCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJGQvIGluc3RhbGwKKwlkb25lCisJcm0gLXJmICR7RH0ke2luZm9kaXJ9L2xpYmdvbXAuaW5mbyAke0R9JHtpbmZvZGlyfS9kaXIKKwlybSAtcmYgJHtEfSR7aW5mb2Rpcn0vbGlicXVhZG1hdGguaW5mbyAke0R9JHtpbmZvZGlyfS9kaXIKKwlpZiBbIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZQorCWZpCisJaWYgWyAtZCAke0R9JHtpbmZvZGlyfSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2luZm9kaXJ9CisJZmkKKwlpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LWdudXNwZSIgXTsgdGhlbgorCQlsbiAtcyAke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS1saW51eAorCWZpCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyBsaWJnY2MiCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0tZGJnIFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1wcmVjb21waWxlLWRldiBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlic3RkYysrLXN0YXRpY2RldiBcCisgICAgbGliZzJjIFwKKyAgICBsaWJnMmMtZGV2IFwKKyAgICBsaWJzc3AgXAorICAgIGxpYnNzcC1kZXYgXAorICAgIGxpYnNzcC1zdGF0aWNkZXYgXAorICAgIGxpYm11ZGZsYXAgXAorICAgIGxpYm11ZGZsYXAtZGV2IFwKKyAgICBsaWJtdWRmbGFwLXN0YXRpY2RldiBcCisgICAgbGlicXVhZG1hdGggXAorICAgIGxpYnF1YWRtYXRoLWRldiBcCisgICAgbGlicXVhZG1hdGgtc3RhdGljZGV2IFwKKyAgICBsaWJnb21wIFwKKyAgICBsaWJnb21wLWRldiBcCisgICAgbGliZ29tcC1zdGF0aWNkZXYgXAorICAgIGxpYmF0b21pYyBcCisgICAgbGliYXRvbWljLWRldiBcCisgICAgbGliYXRvbWljLXN0YXRpY2RldiBcCisiCisKKyMgTW9zdCBsaWJyYXJpZXMgYXJlIGxpY2Vuc2VkIHdpdGggdGhlIGV4Y2VwdGlvbiwgYnV0CisjIG9uZSBsaWJyYXJ5IGlzIHJlYWxseSBHUEx2My4KKyMKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCitMSUNFTlNFX2xpYnN0ZGMrKyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3RkYysrLXByZWNvbXBpbGUtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzdGRjKystZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzdGRjKystc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnMmMgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmcyYy1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnNzcCA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3NwLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3NwLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZ2ZvcnRyYW4gPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmdmb3J0cmFuLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZ2ZvcnRyYW4tc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJtdWRmbGFwID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJtdWRmbGFwLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlibXVkZmxhcC1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnF1YWRtYXRoID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJxdWFkbWF0aC1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnF1YWRtYXRoLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliYXRvbWljID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJhdG9taWMtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJhdG9taWMtc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCitMSUNFTlNFX2xpYmdvbXAgPSAiR1BMdjMiCitMSUNFTlNFX2xpYmdvbXAtZGV2ID0gIkdQTHYzIgorTElDRU5TRV9saWJnb21wLXN0YXRpY2RldiA9ICJHUEx2MyIKKworIyBUaGUgYmFzZSBwYWNrYWdlIGRvZXNuJ3QgZXhpc3QsIHNvIHdlIGNsZWFyIHRoZSByZWNvbW1lbmRzLgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiIKKworIyBpbmNsdWRlIHB5dGhvbiBkZWJ1Z2dpbmcgc2NyaXB0cworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zby4qLWdkYi5weSBcCisgICAgJHtkYXRhZGlyfS9nY2MtJHtCSU5WfS9weXRob24vbGlic3RkY3h4IFwKKyIKKworRklMRVNfbGliZzJjID0gIiR7dGFyZ2V0X2xpYmRpcn0vbGliZzJjLnNvLioiCitGSUxFU19saWJnMmMtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZzJjLnNvIFwKKyAgICAke2xpYmRpcn0vbGliZzJjLmEgXAorICAgICR7bGliZGlyfS9saWJmcnRiZWdpbi5hIFwKKyIKKworRklMRVNfbGlic3RkYysrID0gIiR7bGliZGlyfS9saWJzdGRjKysuc28uKiIKK0ZJTEVTX2xpYnN0ZGMrKy1kZXYgPSAiXAorICAgICR7aW5jbHVkZWRpcn0vYysrLyBcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5sYSBcCisgICAgJHtsaWJkaXJ9L2xpYnN1cGMrKy5sYSBcCisiCitGSUxFU19saWJzdGRjKystc3RhdGljZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGlic3RkYysrLmEgXAorICAgICR7bGliZGlyfS9saWJzdXBjKysuYSBcCisiCisKK0ZJTEVTX2xpYnN0ZGMrKy1wcmVjb21waWxlLWRldiA9ICIke2luY2x1ZGVkaXJ9L2MrKy8ke1RBUkdFVF9TWVN9L2JpdHMvKi5nY2giCisKK0ZJTEVTX2xpYnNzcCA9ICIke2xpYmRpcn0vbGlic3NwLnNvLioiCitGSUxFU19saWJzc3AtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGlic3NwKi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnNzcCpfbm9uc2hhcmVkLmEgXAorICAgICR7bGliZGlyfS9saWJzc3AqLmxhIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3NzcCBcCisiCitGSUxFU19saWJzc3Atc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJzc3AqLmEiCisKK0ZJTEVTX2xpYnF1YWRtYXRoID0gIiR7bGliZGlyfS9saWJxdWFkbWF0aCouc28uKiIKK0ZJTEVTX2xpYnF1YWRtYXRoLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9xdWFkbWF0aCogXAorICAgICR7bGliZGlyfS9saWJxdWFkbWF0aCouc28gXAorICAgICR7bGliZGlyfS9saWJxdWFkbWF0aC5sYSBcCisiCitGSUxFU19saWJxdWFkbWF0aC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYnF1YWRtYXRoLmEiCisKK0ZJTEVTX2xpYm11ZGZsYXAgPSAiJHtsaWJkaXJ9L2xpYm11ZGZsYXAqLnNvLioiCitGSUxFU19saWJtdWRmbGFwLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYm11ZGZsYXAqLnNvIFwKKyAgICAke2xpYmRpcn0vbGlibXVkZmxhcC5sYSBcCisiCitGSUxFU19saWJtdWRmbGFwLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXVkZmxhcC5hIgorCitGSUxFU19saWJnb21wID0gIiR7bGliZGlyfS9saWJnb21wKiR7U09MSUJTfSIKK0ZJTEVTX2xpYmdvbXAtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZ29tcCoke1NPTElCU0RFVn0gXAorICAgICR7bGliZGlyfS9saWJnb21wKi5sYSBcCisgICAgJHtsaWJkaXJ9L2xpYmdvbXAuc3BlYyBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9vbXAuaCBcCisiCitGSUxFU19saWJnb21wLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliZ29tcCouYSIKKworRklMRVNfbGliYXRvbWljID0gIiR7bGliZGlyfS9saWJhdG9taWMuc28uKiIKK0ZJTEVTX2xpYmF0b21pYy1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJhdG9taWMuc28gXAorICAgICR7bGliZGlyfS9saWJhdG9taWMubGEgXAorIgorRklMRVNfbGliYXRvbWljLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliYXRvbWljLmEiCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZDY5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1ydW50aW1lLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2Q2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtcnVudGltZS5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMxZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXJ1bnRpbWUuaW5jCisKK0ZJTEVTX2xpYmdvbXAtZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9vcGVuYWNjLmggXAorIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ODdjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYwpAQCAtMCwwICsxLDExOSBAQAorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJOQ1NBIHwgTUlUIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vbGlic2FuaXRpemVyL0xJQ0VOU0UuVFhUO21kNT0wMjQ5YzM3NzQ4OTM2ZmFmNWIxZWZkNTc4OTU4NzkwOSBcCisiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBtdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgaWYgWyAtZCAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0IF07IHRoZW4KKyAgICAgICAgaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisgICAgZmkKKworICAgIGVjaG8gIkNvbmZpZ3VyaW5nIGxpYnNhbml0aXplciIKKyAgICBybSAtcmYgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICBta2RpciAtcCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgICMgVGhpcyBpcyBraW5kIG9mIGdyb3NzLCBidXQgaXQncyBhbiBlYXN5IHdheSB0byBtYWtlIGNvbmZpZ3VyZSBoYXBweQorICAgICMgd2l0aG91dCBoYWNraW5nIGl0IHVwIHRvIHVzZSB0aGUgc3lzdGVtIHN0ZGMrKyBpbnN0ZWFkIG9mIHRoZSBvbmUgaXQKKyAgICAjIGV4cGVjdHMgdG8gYmUgbmV3bHkgYnVpbHQuCisgICAgcm0gLXJmICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvCisgICAgbWtkaXIgLXAgJHtCfS8kdGFyZ2V0L2xpYnN0ZGMrKy12My9zcmMvCisgICAgbG4gLXMgJHtTVEFHSU5HX0xJQkRJUn0vbGlic3RkYysrLmxhICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvc3JjLworICAgIGxuIC1zICR7U1RBR0lOR19MSUJESVJ9L2xpYnN0ZGMrKy5zbyAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzL3NyYy8KKyAgICBjZCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIGNobW9kIGEreCAke1N9L2xpYnNhbml0aXplci9jb25maWd1cmUKKyAgICAke1N9L2xpYnNhbml0aXplci9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKyAgICAjIEVhc2llc3Qgd2F5IHRvIHN0b3AgYmFkIFJQQVRIcyBnZXR0aW5nIGludG8gdGhlIGxpYnJhcnkgc2luY2Ugd2UgaGF2ZSBhCisgICAgIyBicm9rZW4gbGlidG9vbCBoZXJlCisgICAgc2VkIC1pIC1lICdzL2hhcmRjb2RlX2ludG9fbGlicz15ZXMvaGFyZGNvZGVfaW50b19saWJzPW5vLycgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci9saWJ0b29sCit9CisKK2RvX2NvbXBpbGUgKCkgeworICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGNkICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGNkICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvIGluc3RhbGwKKyAgICBpZiBbIC1kICR7RH0ke2luZm9kaXJ9IF07IHRoZW4KKyAgICAgICAgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7aW5mb2Rpcn0KKyAgICBmaQorICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorREVQRU5EUyA9ICJnY2MtcnVudGltZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKK1BBQ0tBR0VTID0gIiR7UE59IgorUEFDS0FHRVMgKz0gImxpYmFzYW4gbGlidWJzYW4gbGlibHNhbiBsaWJ0c2FuIgorUEFDS0FHRVMgKz0gImxpYmFzYW4tZGV2IGxpYnVic2FuLWRldiBsaWJsc2FuLWRldiBsaWJ0c2FuLWRldiIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuLWRiZyBsaWJ1YnNhbi1kYmcgbGlibHNhbi1kYmcgbGlidHNhbi1kYmciCitQQUNLQUdFUyArPSAibGliYXNhbi1zdGF0aWNkZXYgbGlidWJzYW4tc3RhdGljZGV2IGxpYmxzYW4tc3RhdGljZGV2IGxpYnRzYW4tc3RhdGljZGV2IgorCitSREVQRU5EU19saWJhc2FuICs9ICJsaWJzdGRjKysiCitSREVQRU5EU19saWJ1YnNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlibHNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlidHNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGliYXNhbi1kZXYgKz0gIiR7UE59IgorUkRFUEVORFNfbGlidWJzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYmxzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYnRzYW4tZGV2ICs9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJsaWJhc2FuIGxpYnVic2FuIgorUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX3g4Ni02NCA9ICIgbGlibHNhbiBsaWJ0c2FuIgorUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX3g4NiA9ICIgbGlibHNhbiIKKworZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorCisjIE1JUFMsIGFhcmNoNjQsIGFuZCBTUEFSQyBhcmUgYnJva2VuLgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFybSkuKi1saW51eCcKKworRklMRVNfbGliYXNhbiArPSAiJHtsaWJkaXJ9L2xpYmFzYW4uc28uKiIKK0ZJTEVTX2xpYmFzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmFzYW4uc28uKiIKK0ZJTEVTX2xpYmFzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW5fcHJlaW5pdC5vIFwKKyAgICAke2xpYmRpcn0vbGliYXNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW4ubGEgXAorIgorRklMRVNfbGliYXNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJhc2FuLmEiCisKK0ZJTEVTX2xpYnVic2FuICs9ICIke2xpYmRpcn0vbGlidWJzYW4uc28uKiIKK0ZJTEVTX2xpYnVic2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJ1YnNhbi5zby4qIgorRklMRVNfbGlidWJzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnVic2FuLnNvIFwKKyAgICAke2xpYmRpcn0vbGlidWJzYW4ubGEgXAorIgorRklMRVNfbGlidWJzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlidWJzYW4uYSIKKworRklMRVNfbGlibHNhbiArPSAiJHtsaWJkaXJ9L2xpYmxzYW4uc28uKiIKK0ZJTEVTX2xpYmxzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmxzYW4uc28uKiIKK0ZJTEVTX2xpYmxzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmxzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJsc2FuLmxhIFwKKyIKK0ZJTEVTX2xpYmxzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlibHNhbi5hIgorCitGSUxFU19saWJ0c2FuICs9ICIke2xpYmRpcn0vbGlidHNhbi5zby4qIgorRklMRVNfbGlidHNhbi1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGlidHNhbi5zby4qIgorRklMRVNfbGlidHNhbi1kZXYgKz0gIlwKKyAgICAke2xpYmRpcn0vbGlidHNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnRzYW4ubGEgXAorIgorRklMRVNfbGlidHNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJ0c2FuLmEiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNwZWMgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9zYW5pdGl6ZXIvKi5oIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXNhbml0aXplcnMuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2Mtc2FuaXRpemVycy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZjY2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1zYW5pdGl6ZXJzLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zaGFyZWQtc291cmNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNmZmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMKQEAgLTAsMCArMSw5IEBACitkb19mZXRjaCgpIHsKKwk6Cit9Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkZWx0YXNrIGRvX3VucGFjaworZGVsdGFzayBkb19wYXRjaAorCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gImdjYy1zb3VyY2UtJHtQVn06ZG9fcHJlY29uZmlndXJlIgorZG9fcG9wdWxhdGVfbGljW2RlcGVuZHNdICs9ICJnY2Mtc291cmNlLSR7UFZ9OmRvX3VucGFjayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NGZkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK2RlbHRhc2sgZG9fY29uZmlndXJlIAorZGVsdGFzayBkb19jb21waWxlIAorZGVsdGFzayBkb19wYWNrYWdlIAorZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX3JwbSAKK2RlbHRhc2sgZG9fcGFja2FnZV93cml0ZV9pcGsgCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIGRvX2luc3RhbGwgCitkZWx0YXNrIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK2RlbHRhc2sgZG9fcG9wdWxhdGVfbGljIAorZGVsdGFzayBkb19wYWNrYWdlX3FhCitkZWx0YXNrIGRvX3BhY2thZ2VkYXRhCitkZWx0YXNrIGRvX3JtX3dvcmsKKworUE4gPSAiZ2NjLXNvdXJjZS0ke1BWfSIKK1dPUktESVIgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfSIKK1NTVEFURV9TV1NQRUMgPSAic3N0YXRlOmdjYzo6JHtQVn06JHtQUn06OiR7U1NUQVRFX1ZFUlNJT059OiIKKworU1RBTVAgPSAiJHtTVEFNUFNfRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0iCitTVEFNUENMRUFOID0gIiR7U1RBTVBTX0RJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSoiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTID0gIiIKK1BBQ0tBR0VTID0gIiIKKworcHl0aG9uIGRvX3ByZWNvbmZpZ3VyZSAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBjbWQgPSBkLmV4cGFuZCgnY2QgJHtTfSAmJiBQQVRIPSR7UEFUSH0gZ251LWNvbmZpZ2l6ZScpCisgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgIyBTZWUgMDA0NC1nZW5ndHlwZXMucGF0Y2gsIHdlIG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGlzIGZpbGUKKyAgICBiYi51dGlscy5yZW1vdmUoZC5leHBhbmQoIiR7U30vZ2NjL2dlbmd0eXBlLWxleC5jIikpCisgICAgY21kID0gZC5leHBhbmQoInNlZCAtaSAncy9CVUlMRF9JTkZPPWluZm8vQlVJTERfSU5GTz0vJyAke1N9L2djYy9jb25maWd1cmUiKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorfQorYWRkdGFzayBkb19wcmVjb25maWd1cmUgYWZ0ZXIgZG9fcGF0Y2gKK2RvX3ByZWNvbmZpZ3VyZVtkZXBlbmRzXSArPSAiZ251LWNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBhdXRvY29uZi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MGZhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODkwZmEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYworCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTBmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtdGFyZ2V0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxNjBjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKQEAgLTAsMCArMSwyMTQgQEAKK0dDQ01VTFRJTElCID0gIi0tZW5hYmxlLW11bHRpbGliIgorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtc3lzcm9vdD0vIFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorICAgIC0td2l0aC1uYXRpdmUtc3lzdGVtLWhlYWRlci1kaXI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0gXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGludXhzdGRiYXNlID0gIiAtLWVuYWJsZS1jbG9jYWxlPWdudSIKKworIyBsaWJjYzEgcmVxdXJlcyBnY2NfY3Zfb2JqZHVtcCB3aGVuIGNyb3NzIGJ1aWxkLCBidXQgZ2NjX2N2X29iamR1bXAgaXMKKyMgc2V0IGluIHN1YmRpciBnY2MsIHNvIHN1YmRpciBsaWJjYzEgY2FuJ3QgdXNlIGl0LCBleHBvcnQgaXQgaGVyZSB0bworIyBmaXggdGhlIHByb2JsZW0uCitleHBvcnQgZ2NjX2N2X29iamR1bXAgPSAiJHtUQVJHRVRfUFJFRklYfW9iamR1bXAiCisKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiJHtAZ2V0X2djY19mbG9hdF9zZXR0aW5nKGJiLCBkKX0iCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfSAke1BOfS1wbHVnaW5zICR7UE59LXN5bWxpbmtzIFwKKyAgICBnKysgZysrLXN5bWxpbmtzIFwKKyAgICBjcHAgY3BwLXN5bWxpbmtzIFwKKyAgICBnNzcgZzc3LXN5bWxpbmtzIFwKKyAgICBnZm9ydHJhbiBnZm9ydHJhbi1zeW1saW5rcyBcCisgICAgZ2NvdiBnY292LXN5bWxpbmtzIFwKKyAgICAke1BOfS1kb2MgXAorICAgICR7UE59LWRldiBcCisgICAgJHtQTn0tZGJnIFwKKyIKKworRklMRVNfJHtQTn0gPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2NjKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NvbGxlY3QyIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY2MqIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbHRvKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU30gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJsdG8qJHtTT0xJQlNERVZ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlN9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS1maXhlZCBcCisiCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vLmRlYnVnLyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi8uZGVidWcvIFwKKyIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlNERVZ9IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTREVWfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vaW5jbHVkZS8gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vZ2VuZ3R5cGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2d0eXBlLnN0YXRlIFwKKyIKK0ZJTEVTXyR7UE59LXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vY2MgXAorICAgICR7YmluZGlyfS9nY2MgXAorICAgICR7YmluZGlyfS9nY2NidWcgXAorIgorCitGSUxFU18ke1BOfS1wbHVnaW5zID0gIlwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbiBcCisiCitBTExPV19FTVBUWV8ke1BOfS1wbHVnaW5zID0gIjEiCisKK0ZJTEVTX2c3NyA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nNzcgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9mNzcxIFwKKyIKK0ZJTEVTX2c3Ny1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2c3NyBcCisgICAgJHtiaW5kaXJ9L2Y3NyBcCisiCitGSUxFU19nZm9ydHJhbiA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2Y5NTEgXAorIgorRklMRVNfZ2ZvcnRyYW4tc3ltbGlua3MgPSAiXAorICAgICR7YmluZGlyfS9nZm9ydHJhbiBcCisgICAgJHtiaW5kaXJ9L2Y5NSIKKworRklMRVNfY3BwID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWNwcCBcCisgICAgJHtiYXNlX2xpYmRpcn0vY3BwIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY2MxIgorRklMRVNfY3BwLXN5bWxpbmtzID0gIiR7YmluZGlyfS9jcHAiCisKK0ZJTEVTX2djb3YgPSAiJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nY292IFwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdjb3YtdG9vbCBcCisiCitGSUxFU19nY292LXN5bWxpbmtzID0gIiR7YmluZGlyfS9nY292IFwKKyAgICAke2JpbmRpcn0vZ2Nvdi10b29sIFwKKyIKKworRklMRVNfZysrID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWcrKyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NjMXBsdXMgXAorIgorRklMRVNfZysrLXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vYysrIFwKKyAgICAke2JpbmRpcn0vZysrIFwKKyIKKworRklMRVNfJHtQTn0tZG9jID0gIlwKKyAgICAke2luZm9kaXJ9IFwKKyAgICAke21hbmRpcn0gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9SRUFETUUgXAorIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsbC1ob3N0Cit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwkjIEFkZCB1bndpbmQuaCwgaXQgY29tZXMgZnJvbSBsaWJnY2Mgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBidWlsZCBhZ2FpbgorCWluc3RhbGwgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9LyR7VEFSR0VUX1NZU30vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3Vud2luZC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKKworCSMgQ2xlYW51cCBzb21lIG9mIHRoZSAke2xpYmRpcn17LGV4ZWN9L2djYyBzdHVmZiAuLi4KKwlybSAtciAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yICR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yZiAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubGEKKwlybWRpciAke0R9JHtpbmNsdWRlZGlyfQorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKworCSMgSGFjayBhcm91bmQgc3BlY3MgZmlsZSBhc3N1bXB0aW9ucworCXRlc3QgLWYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzICYmIHNlZCAtaSAtZSAnL14qY3Jvc3NfY29tcGlsZTokLyB7IG47IHMvMS8wLzsgfScgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzCisKKwkjIENsZWFudXAgbWFucGFnZXMuLgorCXJtIC1yZiAke0R9JHttYW5kaXJ9L21hbjcKKworCWNkICR7RH0ke2JpbmRpcn0KKworCSMgV2UgY2FyZSBhYm91dCBnKysgbm90IGMrKworCXJtIC1mICpjKysKKworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZ2NjLTx2ZXJzaW9uPiBvbmVzIGZvciB0aGlzCisJcm0gLWYgKmdjYy0/Lj8qCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSBsaWJpYmVydHkuYSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lIGxpYmliZXJ0eS5oIHwgeGFyZ3Mgcm0gLWYKKworCSMgTm90IHN1cmUgd2h5IHdlIGVuZCB1cCB3aXRoIHRoZXNlIGJ1dCB3ZSBkb24ndCB3YW50IHRoZW0uLi4KKwlybSAtZiAke1RBUkdFVF9QUkVGSVh9JHtUQVJHRVRfUFJFRklYfSoKKworCSMgU3ltbGlua3Mgc28gd2UgY2FuIHVzZSB0aGVzZSB0cml2aWFsbHkgb24gdGhlIHRhcmdldAorCWlmIFsgLWUgJHtUQVJHRVRfUFJFRklYfWc3NyBdOyB0aGVuCisJCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Zzc3IGc3NyB8fCB0cnVlCisJCWxuIC1zZiBnNzcgZjc3IHx8IHRydWUKKwlmaQorCWlmIFsgLWUgJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuIF07IHRoZW4KKwkJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBnZm9ydHJhbiB8fCB0cnVlCisJCWxuIC1zZiBnZm9ydHJhbiBmOTUgfHwgdHJ1ZQorCWZpCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nKysgZysrCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nY2MgZ2NjCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1jcHAgY3BwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0KKwlsbiAtc2YgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1jcHAgJHtEfSR7YmFzZV9saWJkaXJ9L2NwcAorCWxuIC1zZiBnKysgYysrCisJbG4gLXNmIGdjYyBjYworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICAjCisgICAgICAgICMgVGhlZml4aW5jLnNoIHNjcmlwdCwgcnVuIG9uIHRoZSBnY2MncyBjb21waWxlIHBoYXNlLCBsb29rcyBpbnRvIHN5c3Jvb3QgaGVhZGVyCisgICAgICAgICMgZmlsZXMgYW5kIHBsYWNlcyB0aGUgbW9kaWZpZWQgZmlsZXMgaW50bworICAgICAgICAjIHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQgZm9sZGVyLiBUaGlzIG1ha2VzIHRoZQorICAgICAgICAjIGJ1aWxkIG5vdCBkZXRlcm1pbmlzdGljLiBUaGUgZm9sbG93aW5nIGNvZGUgcHJ1bmVzIGFsbCB0aG9zZSBoZWFkZXJzCisgICAgICAgICMgZXhjZXB0IHRob3NlIHVuZGVyIGluY2x1ZGUtZml4ZWQvbGludXgsICpsaW1pdHMuaCBhbmQgUkVBRE1FLCB5aWVsZGluZworICAgICAgICAjIHRoZSBzYW1lIGluY2x1ZGUtZml4ZWQgZm9sZGVycyBubyBtYXR0ZXIgd2hhdCBzeXNyb290CisKKyAgICAgICAgaW5jbHVkZV9maXhlZD0iJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQiCisgICAgICAgIGZvciBmIGluICQoZmluZCAke2luY2x1ZGVfZml4ZWR9IC10eXBlIGYpOyBkbworICAgICAgICAgICAgICAgIGNhc2UgJGYgaW4KKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvbGludXgvKikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvKmxpbWl0cy5oKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICovaW5jbHVkZS1maXhlZC9SRUFETUUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgZmlsZSBhbmQgZGlyZWN0b3J5IGlmIGVtcHR5CisgICAgICAgICAgICAgICAgICAgIGJiZGVidWcgMiAiUHJ1bmluZyAkZiIKKyAgICAgICAgICAgICAgICAgICAgcm0gJGYKKyAgICAgICAgICAgICAgICAgICAgZmluZCAkKGRpcm5hbWUgJGYpIC1tYXhkZXB0aCAwIC1lbXB0eSAtZXhlYyBybWRpciB7fSBcOworICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZG9uZQorfQorCisjIEluc3RhbGxpbmcgL3Vzci9saWIvZ2NjLyogbWVhbnMgd2UnZCBoYXZlIHR3byBjb3BpZXMsIG9uZSBmcm9tIGdjYy1jcm9zcworIyBhbmQgb25lIGZyb20gaGVyZS4gVGhlc2UgY2FuIGNvbmZ1c2UgZ2NjIGNyb3NzIHdoZXJlIGluY2x1ZGVzIHVzZSAjaW5jbHVkZV9uZXh0CisjIGFuZCBidWlsZHMgdHJhY2sgZmlsZSBkZXBlbmRlbmNpZXMgKGUuZy4gcGVybCBhbmQgaXRzIG1ha2VkZXBlbmRzIGNvZGUpLgorIyBGb3IgZGV0ZXJtaW5pc20gd2UgZG9uJ3QgaW5zdGFsbCB0aGlzIGV2ZXIgYW5kIHJlbHkgb24gdGhlIGNvcHkgZnJvbSBnY2MtY3Jvc3MuCisjIFtZT0NUTyAjNzI4N10KK3N5c3Jvb3Rfc3RhZ2VfZGlyc19hcHBlbmQgKCkgeworCXJtIC1yZiAkdG8ke2xpYmRpcn0vZ2NjCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2MThkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgZmFpbHMgd2l0aAorIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDM4OigudGV4dC51bmxpa2VseSsweDJmYSk6IHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9BUk1fVEhNX0NBTEwgYWdhaW5zdCBzeW1ib2wgYGZhbmN5X2Fib3J0KGNoYXIgY29uc3QqLCBpbnQsIGNoYXIgY29uc3QqKScgZGVmaW5lZCBpbiAuZ2x1ZV83IHNlY3Rpb24gaW4gbGlua2VyIHN0dWJzCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0NDI6KC50ZXh0LnVubGlrZWx5KzB4MzE4KTogYWRkaXRpb25hbCByZWxvY2F0aW9uIG92ZXJmbG93cyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dAorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGJhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjkuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy10YXJnZXQuaW5jCisKKyMgQnVpbGRpbmcgd2l0aCB0aHVtYiBlbmFibGVkIG9uIGFybXY0dCBmYWlscyB3aXRoCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0Mzg6KC50ZXh0LnVubGlrZWx5KzB4MmZhKTogcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX0FSTV9USE1fQ0FMTCBhZ2FpbnN0IHN5bWJvbCBgZmFuY3lfYWJvcnQoY2hhciBjb25zdCosIGludCwgY2hhciBjb25zdCopJyBkZWZpbmVkIGluIC5nbHVlXzcgc2VjdGlvbiBpbiBsaW5rZXIgc3R1YnMKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQ0MjooLnRleHQudW5saWtlbHkrMHgzMTgpOiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0CitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKKyNTWVNURU1IRUFERVJTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfaW5jbHVkZWRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0iCisjU1lTVEVNTElCU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2Jhc2VfbGliZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfS8iCisjU1lTVEVNTElCUzFfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9saWJkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9LyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTUyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjIuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy10YXJnZXQuaW5jCisKKyMgQnVpbGRpbmcgd2l0aCB0aHVtYiBlbmFibGVkIG9uIGFybXY0dCBmYWlscyB3aXRoCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0Mzg6KC50ZXh0LnVubGlrZWx5KzB4MmZhKTogcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX0FSTV9USE1fQ0FMTCBhZ2FpbnN0IHN5bWJvbCBgZmFuY3lfYWJvcnQoY2hhciBjb25zdCosIGludCwgY2hhciBjb25zdCopJyBkZWZpbmVkIGluIC5nbHVlXzcgc2VjdGlvbiBpbiBsaW5rZXIgc3R1YnMKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQ0MjooLnRleHQudW5saWtlbHkrMHgzMTgpOiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0CitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBFYXNpZXN0IHdheSB0byBzdG9wIGJhZCBSUEFUSHMgZ2V0dGluZyBpbnRvIHRoZSBsaWJyYXJ5IHNpbmNlIHdlIGhhdmUgYQorCSMgYnJva2VuIGxpYnRvb2wgaGVyZQorCXNlZCAtaSAtZSAncy9oYXJkY29kZV9pbnRvX2xpYnM9eWVzL2hhcmRjb2RlX2ludG9fbGlicz1uby8nICR7U30vbGliY2MxL2NvbmZpZ3VyZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWVhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTQ0IEBACitCUE4gPSAibGliZ2NjIgorCityZXF1aXJlIGdjYy1zaGFyZWQtc291cmNlLmluYworCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19jb25maWd1cmUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9ICR7RH0ke2xpYmRpcn0KKwloYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vJHtMSUJHQ0NCVUlMRFRSRUVOQU1FfSR0YXJnZXQvICR7Qn0KKwlta2RpciAtcCAke0J9LyR7QlBOfQorCW1rZGlyIC1wICR7Qn0vJHRhcmdldC8ke0JQTn0vCisJY2QgJHtCfS8ke0JQTn0KKwljaG1vZCBhK3ggJHtTfS8ke0JQTn0vY29uZmlndXJlCisJJHtTfS8ke0JQTn0vY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHtCUE59CisJb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8ke0JQTn0vCit9CisKK2RvX2luc3RhbGwgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHtCUE59CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8ke0JQTn0vIGluc3RhbGwKKworCSMgTW92ZSBsaWJnY2NfcyBpbnRvIC9saWIKKwlta2RpciAtcCAke0R9JHtiYXNlX2xpYmRpcn0KKwlpZiBbIC1mICR7RH0ke2xpYmRpcn0vbm9mL2xpYmdjY19zLnNvIF07IHRoZW4KKwkJbXYgJHtEfSR7bGliZGlyfS9ub2YvbGliZ2NjKiAke0R9JHtiYXNlX2xpYmRpcn0KKwllbHNlCisJCW12ICR7RH0ke2xpYmRpcn0vbGliZ2NjKiAke0R9JHtiYXNlX2xpYmRpcn0gfHwgdHJ1ZQorCWZpCisKKwkjIGluc3RhbGwgdGhlIHJ1bnRpbWUgaW4gL3Vzci9saWIvIG5vdCBpbiAvdXNyL2xpYi9nY2Mgb24gdGFyZ2V0CisJIyBzbyB0aGF0IGNyb3NzLWdjYyBjYW4gZmluZCBpdCBpbiB0aGUgc3lzcm9vdAorCisJbXYgJHtEfSR7bGliZGlyfS9nY2MvKiAke0R9JHtsaWJkaXJ9CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ2NjLworCSMgdW53aW5kLmggaXMgaW5zdGFsbGVkIGhlcmUgd2hpY2ggaXMgc2hpcHBlZCBpbiBnY2MtY3Jvc3MKKwkjIGFzIHdlbGwgYXMgdGFyZ2V0IGdjYyBhbmQgdGhleSBhcmUgaWRlbnRpY2FsIHNvIHdlIGRvbnQKKwkjIHNoaXAgb25lIHdpdGggbGliZ2NjIGhlcmUKKwlybSAtcmYgJHtEfSR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saWJjLWJhcmVtZXRhbCAoKSB7CisJcm1kaXIgJHtEfSR7YmFzZV9saWJkaXJ9Cit9CisKK1JERVBFTkRTXyR7UE59LWRldl9saWJjLWJhcmVtZXRhbCA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCithZGR0YXNrIG11bHRpbGliX2luc3RhbGwgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CisjIHRoaXMgbWFrZXMgbXVsdGlsaWIgZ2NjIGZpbGVzIGZpbmRhYmxlIGZvciB0YXJnZXQgZ2NjCisjIGUuZy4KKyMgICAgL3Vzci9saWIvaTU4Ni1wb2t5bWxsaWIzMi1saW51eC80LjcvCisjIGJ5IGNyZWF0aW5nIHRoaXMgc3ltbGluayB0byBpdAorIyAgICAvdXNyL2xpYjY0L3g4Nl82NC1wb2t5LWxpbnV4LzQuNy8zMgorCitmYWtlcm9vdCBweXRob24gZG9fbXVsdGlsaWJfaW5zdGFsbCgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIG11bHRpbGlicyA9IGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpCisgICAgaWYgbm90IG11bHRpbGlicyBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBiaW52ID0gZC5nZXRWYXIoJ0JJTlYnLCBUcnVlKQorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgIGlmICgnJXNsaWJnY2MnICUgbWxwcmVmaXgpICE9IGQuZ2V0VmFyKCdQTicsIFRydWUpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG1scHJlZml4OgorICAgICAgICBvcmlnX3R1bmUgPSBkLmdldFZhcignREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwnLCBUcnVlKQorICAgICAgICBvcmlnX3R1bmVfcGFyYW1zID0gZ2V0X3R1bmVfcGFyYW1ldGVycyhvcmlnX3R1bmUsIGQpCisgICAgICAgIG9yaWdfdHVuZV9iYXNlbGliID0gb3JpZ190dW5lX3BhcmFtc1snYmFzZWxpYiddCisgICAgICAgIG9yaWdfdHVuZV9iaXRuZXNzID0gb3JpZ190dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpCisgICAgICAgIGlmIG5vdCBvcmlnX3R1bmVfYml0bmVzczoKKyAgICAgICAgICAgIG9yaWdfdHVuZV9iaXRuZXNzID0gJzMyJworCisgICAgICAgIHNyYyA9ICcuLi8uLi8uLi8nICsgb3JpZ190dW5lX2Jhc2VsaWIgKyAnLycgKyBcCisgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX1NZU19NVUxUSUxJQl9PUklHSU5BTCcsIFRydWUpICsgJy8nICsgYmludiArICcvJworCisgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgXAorICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycgKyBvcmlnX3R1bmVfYml0bmVzcworCisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKKyAgICAgICAgcmV0dXJuCisKKworICAgIGZvciBtbCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgdHVuZSA9IGQuZ2V0VmFyKCdERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJyArIG1sLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZToKKyAgICAgICAgICAgIGJiLndhcm4oJ0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcyBpcyBub3QgZGVmaW5lZC4gU2tpcHBpbmcuLi4nICUgbWwpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHR1bmVfcGFyYW1ldGVycyA9IGdldF90dW5lX3BhcmFtZXRlcnModHVuZSwgZCkKKyAgICAgICAgdHVuZV9iYXNlbGliID0gdHVuZV9wYXJhbWV0ZXJzWydiYXNlbGliJ10KKyAgICAgICAgaWYgbm90IHR1bmVfYmFzZWxpYjoKKyAgICAgICAgICAgIGJiLndhcm4oIlR1bmUgJXMgZG9lc24ndCBoYXZlIGEgYmFzZWxpYiBzZXQuIFNraXBwaW5nLi4uIiAlIHR1bmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHR1bmVfYXJjaCA9IHR1bmVfcGFyYW1ldGVyc1snYXJjaCddCisgICAgICAgIHR1bmVfYml0bmVzcyA9IHR1bmVfYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKyAgICAgICAgaWYgbm90IHR1bmVfYml0bmVzczoKKyAgICAgICAgICAgIHR1bmVfYml0bmVzcyA9ICczMicgIyAvbGliID0+IDMyYml0IGxpYgorCisgICAgICAgIHNyYyA9ICcuLi8uLi8uLi8nICsgdHVuZV9iYXNlbGliICsgJy8nICsgXAorICAgICAgICAgICAgdHVuZV9hcmNoICsgZC5nZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCBUcnVlKSArICdtbCcgKyBtbCArIFwKKyAgICAgICAgICAgICctJyArIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycKKworICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIFwKKyAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nICsgdHVuZV9iaXRuZXNzCisKKyAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorfQorCitkZWYgZ2V0X29yaWdpbmFsX3ZlbmRvcm9zKGQpOgorICAgIHZlbmRvcm9zID0gZC5leHBhbmQoJyR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9JykKKyAgICBmb3Igc3VmZml4IGluIFtkLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSksIGQuZ2V0VmFyKCdMSUJDRVhURU5TSU9OJywgVHJ1ZSldOgorICAgICAgICBpZiBzdWZmaXggYW5kIHZlbmRvcm9zLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICB2ZW5kb3JvcyA9IHZlbmRvcm9zWzotbGVuKHN1ZmZpeCldCisgICAgcmV0dXJuIHZlbmRvcm9zCisKK09SSUdfVEFSR0VUX1ZFTkRPUk9TIDo9ICIke0BnZXRfb3JpZ2luYWxfdmVuZG9yb3MoZCl9IgorQkFTRVRBUkdFVF9TWVMgPSAiJHtUQVJHRVRfQVJDSH0ke09SSUdfVEFSR0VUX1ZFTkRPUk9TfSIKKworYWRkdGFzayBleHRyYV9zeW1saW5rcyBhZnRlciBkb19tdWx0aWxpYl9pbnN0YWxsIGJlZm9yZSBkb19wYWNrYWdlIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK2Zha2Vyb290IHB5dGhvbiBkb19leHRyYV9zeW1saW5rcygpIHsKKyAgICB0YXJnZXRzeXMgPSBkLmdldFZhcignQkFTRVRBUkdFVF9TWVMnLCBUcnVlKQorCisgICAgaWYgdGFyZ2V0c3lzICE9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSk6CisgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgdGFyZ2V0c3lzCisgICAgICAgIHNyYyA9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cyhkZXN0KSBhbmQgb3MucGF0aC5sZXhpc3RzKGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkpOgorICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTJmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYwpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGxpYmdjYy1jb21tb24uaW5jCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQQVRIX3ByZXBlbmQgPSAiJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LiR7U1RBR0lOR0NDfToiCisKK1BBQ0tBR0VTID0gIiIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2hhcmVkIgorCitMSUJHQ0NCVUlMRFRSRUVOQU1FID0gImdjYy1idWlsZC1pbnRlcm5hbC1pbml0aWFsLSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMjUzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYyNTNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5YWRiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYwpAQCAtMCwwICsxLDQxIEBACityZXF1aXJlIGxpYmdjYy1jb21tb24uaW5jCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59IFwKKyAgICAke1BOfS1kZXYgXAorICAgICR7UE59LWRiZyBcCisiCisKKyMgQWxsIGxpYmdjYyBzb3VyY2UgaXMgbWFya2VkIHdpdGggdGhlIGV4Y2VwdGlvbi4KKyMKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCisKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmdjYyouc28uKiIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtiYXNlX2xpYmRpcn0vbGliZ2NjKi5zbyBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qY3J0KiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS82NCBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8zMiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS94MzIgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbjMyIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmdjYyogXAorICAgICR7QGJhc2VfY29uZGl0aW9uYWwoJ0JBU0VUQVJHRVRfU1lTJywgJyR7VEFSR0VUX1NZU30nLCAnJywgJyR7bGliZGlyfS8ke0JBU0VUQVJHRVRfU1lTfScsIGQpfSBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnY292LmEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9Ly5kZWJ1Zy8iCisKK0xJQkdDQ0JVSUxEVFJFRU5BTUUgPSAiZ2NjLWJ1aWxkLWludGVybmFsLSIKKworZG9fcGFja2FnZVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCisKK0lOU0FORV9TS0lQXyR7UE59LWRldiA9ICJzdGF0aWNkZXYiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyODQzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jCkBAIC0wLDAgKzEsNzQgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKwltdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisKKwllY2hvICJDb25maWd1cmluZyBsaWJnZm9ydHJhbiIKKwlybSAtcmYgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCW1rZGlyIC1wICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwljZCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJY2htb2QgYSt4ICR7U30vbGliZ2ZvcnRyYW4vY29uZmlndXJlCisJJHtTfS9saWJnZm9ydHJhbi9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKwkjIEVhc2llc3Qgd2F5IHRvIHN0b3AgYmFkIFJQQVRIcyBnZXR0aW5nIGludG8gdGhlIGxpYnJhcnkgc2luY2Ugd2UgaGF2ZSBhCisJIyBicm9rZW4gbGlidG9vbCBoZXJlCisJc2VkIC1pIC1lICdzL2hhcmRjb2RlX2ludG9fbGlicz15ZXMvaGFyZGNvZGVfaW50b19saWJzPW5vLycgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuL2xpYnRvb2wKK30KKworZG9fY29tcGlsZSAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJY2QgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCit9CisKK2RvX2luc3RhbGwgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLyBpbnN0YWxsCisJaWYgWyAtZCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUgXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKwlmaQorCWlmIFsgLWQgJHtEfSR7aW5mb2Rpcn0gXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtpbmZvZGlyfQorCWZpCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgPSAiZ2NjLXJ1bnRpbWUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0tZGJnIFwKKyAgICBsaWJnZm9ydHJhbiBcCisgICAgbGliZ2ZvcnRyYW4tZGV2IFwKKyAgICBsaWJnZm9ydHJhbi1zdGF0aWNkZXYgXAorIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLnNvLioiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJnZm9ydHJhbiouc28gXAorICAgICR7bGliZGlyfS9saWJnZm9ydHJhbi5zcGVjIFwKKyAgICAke2xpYmRpcn0vbGliZ2ZvcnRyYW4ubGEgXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmdmb3J0cmFuYmVnaW4uKiBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliY2FmX3NpbmdsZSogXAorIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJnZm9ydHJhbi5hIgorCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmdmb3J0cmFuLWRldiA9ICJzdGF0aWNkZXYiCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBmID0gZC5nZXRWYXIoIkZPUlRSQU4iLCBUcnVlKQorICAgIGlmICJmb3J0cmFuIiBub3QgaW4gZjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmdmb3J0cmFuIG5lZWRzIGZvcnRyYW4gc3VwcG9ydCB0byBiZSBlbmFibGVkIGluIHRoZSBjb21waWxlciIpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGQ4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnZm9ydHJhbi5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRkOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2ZvcnRyYW4uaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZDhiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdmb3J0cmFuLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhOTVhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuOS4xLmluYwpAQCAtMCwwICsxLDkgQEAKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MyAmIExHUEx2MiAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQkgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSVttZDVzdW1dID0gImYzYjk3ZGU5MTlhOWRiYTg0NDkwYjJlMDc2ZWM0Y2IwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ5OTRhZDk4NjcyNmFjNDEyOGE2ZjFiZDgwMjBjZDY3MmU5YTkyYWE3NmI4MDczNjU2M2VmOTkyOTkyNzY0ZWYiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmJhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiR05VIGRlYnVnZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYi8iCitMSUNFTlNFID0gIkdQTHYzKyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTID0gImV4cGF0IHpsaWIgbmN1cnNlcyByZWFkbGluZSAke0xUVE5HVVNUfSIKKworTFRUTkdVU1QgPSAibHR0bmctdXN0IgorTFRUTkdVU1RfYWFyY2g2NCA9ICIiCitMVFROR1VTVF9saWJjLXVjbGliYyA9ICIiCitMVFROR1VTVF9taXBzID0gIiIKK0xUVE5HVVNUX21pcHNlbCA9ICIiCitMVFROR1VTVF9taXBzNjQgPSAiIgorTFRUTkdVU1RfbWlwczY0ZWwgPSAiIgorTFRUTkdVU1RfbWlwczY0bjMyID0gIiIKK0xUVE5HVVNUX21pcHM2NGVsbjMyID0gIiIKK0xUVE5HVVNUX3NoNCA9ICIiCitMVFROR1VTVF9saWJjLW11c2wgPSAiIgorCitJTkNfUFIgPSAicjAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKwkJZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisJCWZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQlmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYi9nZGItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAiCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENYWF9GT1JfQlVJTEQgPSAiJHtCVUlMRF9DWFh9IgorZXhwb3J0IENQUF9GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFB9IgorZXhwb3J0IENGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IENYWEZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWEZMQUdTfSIKK2V4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFBGTEFHU30iCisKK0IgPSAiJHtXT1JLRElSfS9idWlsZC0ke1RBUkdFVF9TWVN9IgorCitFWFRSQV9PRU1BS0UgPSAiJ1NVQkRJUlM9aW50bCBtbWFsbG9jIGxpYmliZXJ0eSBvcGNvZGVzIGJmZCBzaW0gZ2RiIGV0YyB1dGlscyciCisKK0VYUEFUID0gIi0td2l0aC1leHBhdCAtLXdpdGgtbGliZXhwYXQtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0iCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ2RidGsgLS1kaXNhYmxlLXR1aSAtLWRpc2FibGUteCAtLWRpc2FibGUtd2Vycm9yIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vyc2VzIC0tZGlzYWJsZS1tdWx0aWxpYiAtLXdpdGgtc3lzdGVtLXJlYWRsaW5lIC0tZGlzYWJsZS1zaW0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1sem1hIC0td2l0aG91dC1ndWlsZSBcCisgICAgICAgICAgICAgICAgJHtHREJQUk9QUkVGSVh9ICR7RVhQQVR9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsICctLWVuYWJsZS02NC1iaXQtYmZkJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgICIKKworR0RCUFJPUFJFRklYID0gIi0tcHJvZ3JhbS1wcmVmaXg9JyciCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJIyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGF2b2lkIHRoZSBhdXRvY29uZi9hdXRvbWFrZS9hY2xvY2FsL2F1dG9oZWFkZXIKKwkjIGNhbGxzIGZvciBub3cKKwkoY2QgJHtTfSAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgaW4gcnVubmluZyBnbnUtY29uZmlnaXplIgorCW9lX3J1bmNvbmYKK30KKworIyB3ZSBkb24ndCB3YW50IGdkYiB0byBwcm92aWRlIGJmZC9pYmVydHkvb3Bjb2Rlcywgd2hpY2ggaW5zdGVhZCB3aWxsIG92ZXJyaWRlIHRoZQorIyByaWdodCBiaXRzIGluc3RhbGxlZCBieSBiaW51dGlscy4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9CisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2xvY2FsZQorfQorCitSUkVDT01NRU5EU19nZGJfYXBwZW5kX2xpbnV4ID0gIiBnbGliYy10aHJlYWQtZGIgIgorUlJFQ09NTUVORFNfZ2RiX2FwcGVuZF9saW51eC1nbnVlYWJpID0gIiBnbGliYy10aHJlYWQtZGIgIgorUlJFQ09NTUVORFNfZ2Ric2VydmVyX2FwcGVuZF9saW51eCA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKK1JSRUNPTU1FTkRTX2dkYnNlcnZlcl9hcHBlbmRfbGludXgtZ251ZWFiaSA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDYwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSwzOCBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgoraW5oZXJpdCBweXRob24tZGlyCisKK1NVTU1BUlkgPSAiR05VIGRlYnVnZ2VyIChjcm9zcy1jYW5hZGlhbiBnZGIgZm9yICR7VEFSR0VUX0FSQ0h9IHRhcmdldCkiCitQTiA9ICJnZGItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJnZGIiCisKK0RFUEVORFMgPSAibmF0aXZlc2RrLW5jdXJzZXMgbmF0aXZlc2RrLWV4cGF0IG5hdGl2ZXNkay1nZXR0ZXh0IG5hdGl2ZXNkay1yZWFkbGluZSBuYXRpdmVzZGstcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gKz0gIm5hdGl2ZXNkay1weXRob24tY29yZSBuYXRpdmVzZGstcHl0aG9uLWxhbmcgbmF0aXZlc2RrLXB5dGhvbi1yZSBcCisgICAgICAgICAgICAgICAgICAgbmF0aXZlc2RrLXB5dGhvbi1jb2RlY3MgbmF0aXZlc2RrLXB5dGhvbi1uZXRjbGllbnQiCisKK0dEQlBST1BSRUZJWCA9ICItLXByb2dyYW0tcHJlZml4PScke1RBUkdFVF9QUkVGSVh9JyIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS13aXRoLXB5dGhvbj0ke1dPUktESVJ9L3B5dGhvbiIKKworU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtTVEFHSU5HX0RBVEFESVJ9L2dkYiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CitjYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKKyMhIC9iaW4vc2gKK2Nhc2UgIlwkMiIgaW4KKyAgICAgICAgLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKKyAgICAgICAgLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIgOzsKKyAgICAgICAgLS1leGVjLXByZWZpeCkgZWNobyAiJHtleGVjX3ByZWZpeH0iIDs7CisgICAgICAgICopIGV4aXQgMSA7OworZXNhYworZXhpdCAwCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KK30KKworIyB3ZSBkb24ndCB3YW50IGdkYiB0byBwcm92aWRlIGJmZC9pYmVydHkvb3Bjb2Rlcywgd2hpY2ggaW5zdGVhZCB3aWxsIG92ZXJyaWRlIHRoZQorIyByaWdodCBiaXRzIGluc3RhbGxlZCBieSBiaW51dGlscy4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtleGVjX3ByZWZpeH0vbGliCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDEwMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGdkYi1jb21tb24uaW5jCityZXF1aXJlIGdkYi1jcm9zcy1jYW5hZGlhbi5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDQ3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy5pbmMKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBnZGItY29tbW9uLmluYworCitERVBFTkRTID0gImV4cGF0LW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgcHl0aG9uLW5hdGl2ZSIKKworaW5oZXJpdCBweXRob25uYXRpdmUKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIGV4cG9ydCBCVUlMRF9TWVM9IiR7QlVJTERfU1lTfSIKKyAgICBleHBvcnQgSE9TVF9TWVM9IiR7SE9TVF9TWVN9IgorICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0iJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgorICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0iJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorfQorCisjRVhUUkFfT0VNQUtFICs9ICJMREZMQUdTPScke0JVSUxEX0xERkxBR1N9JyIKKworR0RCUFJPUFJFRklYID0gIiIKKworUE4gPSAiZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorQlBOID0gImdkYiIKKworaW5oZXJpdCBjcm9zcworaW5oZXJpdCBnZXR0ZXh0CisKK2RhdGFkaXIgLj0gIi9nZGItJHtUVU5FX1BLR0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTVjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZ2RiLWNyb3NzLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGMwMjEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgZ2RiLWNvbW1vbi5pbmMKKworaW5oZXJpdCBnZXR0ZXh0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaCBcCisgICAgICAgICAgICIKKyNMREZMQUdTX2FwcGVuZCA9ICIgLXMiCisjZXhwb3J0IENGTEFHU19hcHBlbmQ9IiAtTCR7U1RBR0lOR19MSUJESVJ9IgorCisjIGNyb3NzLWNhbmFkaWFuIG11c3Qgbm90IHNlZSB0aGlzCitQQUNLQUdFUyA9KyAiZ2Ric2VydmVyIgorRklMRVNfZ2Ric2VydmVyID0gIiR7YmluZGlyfS9nZGJzZXJ2ZXIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OTZjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDEyYjA1MDY5NTE0NjBjM2NjMzdkNzc1NDc4ZDAyNGRiM2Y5NWU5ZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI3OjU1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBtYWtlIG1hbiBpbnN0YWxsIHJlbGF0aXZlIHRvIERFU1RESVIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzaW0vY29tbW9uL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KK2luZGV4IGQ0OWE5M2IuLjIxMjFjNDYgMTAwNjQ0CistLS0gYS9zaW0vY29tbW9uL01ha2VmaWxlLmluCisrKysgYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCitAQCAtMzUsNyArMzUsNyBAQCB0b29sZGlyID0gJChsaWJkaXIpLyQodGFyZ2V0X2FsaWFzKQorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBtYW5kaXIgPSBAbWFuZGlyQAorLW1hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorK21hbjFkaXIgPSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyBpbmZvZGlyID0gQGluZm9kaXJACisgaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjYjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDI2MmNjYzRmZGIyYTNkZjBmMTZjNjFhODA3MDQ2OTY0YWU3NzI5YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI5OjIzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBDaGFuZ2Ugb3JkZXIgb2YgQ0ZMQUdTCisKK0xldHMgdXMgb3ZlcnJpZGUgV2Vycm9yIGlmIG5lZWQgYmUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitpbmRleCAxZWQyZWM4Li4wY2VmOTViIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorKysrIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorQEAgLTEzMSwxMCArMTMxLDEwIEBAIENGTEFHUyA9IEBDRkxBR1NACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgCisgIyBJTlRFUk5BTF9DRkxBR1MgaXMgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb3RoZXIgKkNGTEFHUyBtYWNyb3MuCistSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAgJHtDRkxBR1N9ICR7R0xPQkFMX0NGTEFHU30gXAorK0lOVEVSTkFMX0NGTEFHU19CQVNFID0gJHtHTE9CQUxfQ0ZMQUdTfSBcCisgCSR7UFJPRklMRV9DRkxBR1N9ICR7SU5DTFVERV9DRkxBR1N9ICR7Q1BQRkxBR1N9CisgSU5URVJOQUxfV0FSTl9DRkxBR1MgPSAgJHtJTlRFUk5BTF9DRkxBR1NfQkFTRX0gJChXQVJOX0NGTEFHUykKKy1JTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAtREdEQlNFUlZFUgorK0lOVEVSTkFMX0NGTEFHUyA9ICAke0lOVEVSTkFMX1dBUk5fQ0ZMQUdTfSAkKFdFUlJPUl9DRkxBR1MpICR7Q0ZMQUdTfSAtREdEQlNFUlZFUgorIAorICMgTERGTEFHUyBpcyBzcGVjaWZpY2FsbHkgcmVzZXJ2ZWQgZm9yIHNldHRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgIyB3aGVuIHJ1bm5pbmcgbWFrZS4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2UyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKQEAgLTAsMCArMSw5MjEgQEAKK0Zyb20gNDA3Y2IxM2NmYjcwNjk3ZjQ1ZGZiNzYxMzA0ZTAwNWUxZWNiZDBlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6MzE6MTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIEFkZCBzdXBwb3J0IGZvciBSZW5lc2FzIFNIIChzaDQpIGFyY2hpdGVjdHVyZS4KKworZ2RiICg3LjQtMX5jdnMyMDExMTExNy4yKSBleHBlcmltZW50YWw7IHVyZ2VuY3k9bG93CisgLgorICAgKiBBZGQgUmVuZXNhcyBTSCAoc2g0KSBzdXBwb3J0IChDbG9zZXM6ICM1NzYyNDIpCisgICAgIC0gVGhhbmtzIE5vYnVoaXJvIEl3YW1hdHN1LCBUYWthc2hpIFlvc2hpaS4KK0F1dGhvcjogSGVjdG9yIE9yb24gPHp1bWJpQGRlYmlhbi5vcmc+CitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzU3NjI0MgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGdkYi9jb25maWd1cmUuaG9zdCAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgZ2RiL3NoLWxpbnV4LXRkZXAuYyAgICAgICAgICAgICAgICAgIHwgNTE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ2RiL3NoLXRkZXAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU0ICsrLS0KKyBnZGIvc2gtdGRlcC5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDkgKysrKworIGdkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCB8ICAgNSArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYyAgICAgICAgIHwgICAzICstCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMgICAgIHwgICAzICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyAgICAgfCAgIDQgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgICAgICB8ICAgMyArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgICAgIHwgICA0ICsKKyAxMSBmaWxlcyBjaGFuZ2VkLCA2MTcgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvTWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KK2luZGV4IDc5Mzc4MDEuLjYzYmFmODEgMTAwNjQ0CistLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrKyBiL2dkYi9NYWtlZmlsZS5pbgorQEAgLTE3MDcsNiArMTcwNyw3IEBAIEFMTERFUEZJTEVTID0gXAorIAlzY29yZS10ZGVwLmMgXAorIAlzZXItZ28zMi5jIHNlci1waXBlLmMgc2VyLXRjcC5jIHNlci1taW5ndy5jIFwKKyAJc2gtdGRlcC5jIHNoNjQtdGRlcC5jIHNobmJzZC10ZGVwLmMgc2huYnNkLW5hdC5jIFwKKysJc2gtbGludXgtdGRlcC5jIHNoLWxpbnV4LW5hdC5jIFwKKyAJc29sMi10ZGVwLmMgXAorIAlzb2xpYi1zdnI0LmMgXAorIAlzcGFyYy1saW51eC1uYXQuYyBzcGFyYy1saW51eC10ZGVwLmMgXAorZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUuaG9zdCBiL2dkYi9jb25maWd1cmUuaG9zdAoraW5kZXggZDA3YmU0Yi4uYjYzOTFjNSAxMDA2NDQKKy0tLSBhL2dkYi9jb25maWd1cmUuaG9zdAorKysrIGIvZ2RiL2NvbmZpZ3VyZS5ob3N0CitAQCAtMTUwLDYgKzE1MCw3IEBAIHBvd2VycGMqLSotbGludXgqKQlnZGJfaG9zdD1saW51eCA7OworIAorIHMzOTAqLSotbGludXgqKQkJZ2RiX2hvc3Q9bGludXggOzsKKyAKKytzaCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OworIHNoKi0qLW5ldGJzZGVsZiogfCBzaCotKi1rbmV0YnNkKi1nbnUpCisgCQkJZ2RiX2hvc3Q9bmJzZCA7OworIHNoKi0qLW9wZW5ic2QqKQkJZ2RiX2hvc3Q9bmJzZCA7OworZGlmZiAtLWdpdCBhL2dkYi9zaC1saW51eC10ZGVwLmMgYi9nZGIvc2gtbGludXgtdGRlcC5jCitpbmRleCAyZmYyZWU4Li4xYTExMjYyIDEwMDY0NAorLS0tIGEvZ2RiL3NoLWxpbnV4LXRkZXAuYworKysrIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYworQEAgLTE4LDE0ICsxOCwzNyBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJnZGJjb3JlLmgiCisrI2luY2x1ZGUgImZyYW1lLmgiCisrI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKKysjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCisrI2luY2x1ZGUgImR3YXJmMi1mcmFtZS5oIgorKyNpbmNsdWRlICJ2YWx1ZS5oIgorKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorKyNpbmNsdWRlICJpbmZlcmlvci5oIgorICNpbmNsdWRlICJvc2FiaS5oIgorIAorKyNpbmNsdWRlICJyZWdncm91cHMuaCIKKysjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJmbG9hdGZvcm1hdC5oIgorICNpbmNsdWRlICJzb2xpYi1zdnI0LmgiCisgI2luY2x1ZGUgInN5bXRhYi5oIgorKyNpbmNsdWRlICJnZGJfc3RyaW5nLmgiCisrI2luY2x1ZGUgImNvbW1hbmQuaCIKKysjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgorIAorICNpbmNsdWRlICJ0cmFkLWZyYW1lLmgiCisgI2luY2x1ZGUgInRyYW1wLWZyYW1lLmgiCisgCisrI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxzeXMvdXNlci5oPgorKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorKworKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisrCisrI2luY2x1ZGUgInJlZ3NldC5oIgorICNpbmNsdWRlICJnbGliYy10ZGVwLmgiCisgI2luY2x1ZGUgInNoLXRkZXAuaCIKKyAjaW5jbHVkZSAibGludXgtdGRlcC5oIgorQEAgLTE4MCw5ICsyMDMsNTA1IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhbXBfZnJhbWUgc2hfbGludXhfcnRfc2lncmV0dXJuX3RyYW1wX2ZyYW1lID0geworICAgc2hfbGludXhfcnRfc2lncmV0dXJuX2luaXQKKyB9OworIAorKy8qIFJlY29nbml6aW5nIHNpZ25hbCBoYW5kbGVyIGZyYW1lcy4gICovCisrCisrLyogR05VL0xpbnV4IGhhcyB0d28gZmxhdm9ycyBvZiBzaWduYWxzLiAgTm9ybWFsIHNpZ25hbCBoYW5kbGVycywgYW5kCisrICAgInJlYWx0aW1lIiAoUlQpIHNpZ25hbHMuICBUaGUgUlQgc2lnbmFscyBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsCisrICAgaW5mb3JtYXRpb24gdG8gdGhlIHNpZ25hbCBoYW5kbGVyIGlmIHRoZSBTQV9TSUdJTkZPIGZsYWcgaXMgc2V0CisrICAgd2hlbiBlc3RhYmxpc2hpbmcgYSBzaWduYWwgaGFuZGxlciB1c2luZyBgc2lnYWN0aW9uJy4gIEl0IGlzIG5vdAorKyAgIHVubGlrZWx5IHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIEdOVS9MaW51eCB3aWxsIHN1cHBvcnQgU0FfU0lHSU5GTworKyAgIGZvciBub3JtYWwgc2lnbmFscyB0b28uICAqLworKworKy8qIFdoZW4gdGhlIFNIIExpbnV4IGtlcm5lbCBjYWxscyBhIHNpZ25hbCBoYW5kbGVyIGFuZCB0aGUKKysgICBTQV9SRVNUT1JFUiBmbGFnIGlzbid0IHNldCwgdGhlIHJldHVybiBhZGRyZXNzIHBvaW50cyB0byBhIGJpdCBvZgorKyAgIGNvZGUgb24gdGhlIHN0YWNrLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgdGhlIFBDIGFwcGVhcnMgdG8KKysgICBiZSB3aXRoaW4gdGhpcyBiaXQgb2YgY29kZS4KKysKKysgICBUaGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgZm9yIG5vcm1hbCBzaWduYWxzIGlzCisrICAgICAgIG1vdi53ICAxZixyMworKyAgICAgICB0cmFwYSAgIzE2CisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAxOiAud29yZCAgX19OUl9zaWdyZXR1cm4KKysgICBvciAweDkzMDUgMHhjMzEwIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgwMDc3LgorKworKyAgIENoZWNraW5nIGZvciB0aGUgY29kZSBzZXF1ZW5jZSBzaG91bGQgYmUgc29tZXdoYXQgcmVsaWFibGUsIGJlY2F1c2UKKysgICB0aGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHNpZ3JldHVybi4gIFRoaXMgaXMgdW5saWtlbHkKKysgICB0byBvY2N1ciBhbnl3aGVyZSBvdGhlciB0aGFuIGEgc2lnbmFsIHRyYW1wb2xpbmUuCisrCisrICAgSXQga2luZCBvZiBzdWNrcyB0aGF0IHdlIGhhdmUgdG8gcmVhZCBtZW1vcnkgZnJvbSB0aGUgcHJvY2VzcyBpbgorKyAgIG9yZGVyIHRvIGlkZW50aWZ5IGEgc2lnbmFsIHRyYW1wb2xpbmUsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKKysgICBhbnkgb3RoZXIgd2F5LiAgVGhlIFBDX0lOX1NJR1RSQU1QIG1hY3JvIGluIHRtLWxpbnV4LmggYXJyYW5nZXMgdG8KKysgICBvbmx5IGNhbGwgdXMgaWYgbm8gZnVuY3Rpb24gbmFtZSBjb3VsZCBiZSBpZGVudGlmaWVkLCB3aGljaCBzaG91bGQKKysgICBiZSB0aGUgY2FzZSBzaW5jZSB0aGUgY29kZSBpcyBvbiB0aGUgc3RhY2suCisrCisrICAgRGV0ZWN0aW9uIG9mIHNpZ25hbCB0cmFtcG9saW5lcyBmb3IgaGFuZGxlcnMgdGhhdCBzZXQgdGhlCisrICAgU0FfUkVTVE9SRVIgZmxhZyBpcyBpbiBnZW5lcmFsIG5vdCBwb3NzaWJsZS4gIFVuZm9ydHVuYXRlbHkgdGhpcyBpcworKyAgIHdoYXQgdGhlIEdOVSBDIExpYnJhcnkgaGFzIGJlZW4gZG9pbmcgZm9yIHF1aXRlIHNvbWUgdGltZSBub3cuCisrICAgSG93ZXZlciwgYXMgb2YgdmVyc2lvbiAyLjEuMiwgdGhlIEdOVSBDIExpYnJhcnkgdXNlcyBzaWduYWwKKysgICB0cmFtcG9saW5lcyAobmFtZWQgX19yZXN0b3JlIGFuZCBfX3Jlc3RvcmVfcnQpIHRoYXQgYXJlIGlkZW50aWNhbAorKyAgIHRvIHRoZSBvbmVzIHVzZWQgYnkgdGhlIGtlcm5lbC4gIFRoZXJlZm9yZSwgdGhlc2UgdHJhbXBvbGluZXMgYXJlCisrICAgc3VwcG9ydGVkIHRvby4gICovCisrCisrI2RlZmluZSBNT1ZXKG4pCSAoMHg5MzAwfCgobiktMikpCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrbiB0byBSMyAqLworKyNkZWZpbmUgVFJBUDE2CSAweGMzMTAJCQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBPUl9SMF9SMCAweDIwMGIJCQkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04wCU1PVlcoNykJCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrNyB0byBSMyAqLworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjEJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMglPUl9SMF9SMAkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGludXhfc2lndHJhbXBfY29kZVtdID0KKyt7CisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMCwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04xLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIF9fTlJfc2lncmV0dXJuCisrfTsKKysKKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0xFTiAoc2l6ZW9mIGxpbnV4X3NpZ3RyYW1wX2NvZGUpCisrCisrLyogSWYgUEMgaXMgaW4gYSBzaWd0cmFtcCByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mCisrICAgdGhlIHJvdXRpbmUuICBPdGhlcndpc2UsIHJldHVybiAwLiAgKi8KKysKKytzdGF0aWMgQ09SRV9BRERSCisrc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAobmV4dF9mcmFtZSk7CisrICBnZGJfYnl0ZSBidWZbTElOVVhfU0lHVFJBTVBfTEVOXTsKKysKKysgIC8qIFdlIG9ubHkgcmVjb2duaXplIGEgc2lnbmFsIHRyYW1wb2xpbmUgaWYgUEMgaXMgYXQgdGhlIHN0YXJ0IG9mCisrICAgICBvbmUgb2YgdGhlIHRocmVlIGluc3RydWN0aW9ucy4gIFdlIG9wdGltaXplIGZvciBmaW5kaW5nIHRoZSBQQyBhdAorKyAgICAgdGhlIHN0YXJ0LCBhcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXMgbm90IHRoZQorKyAgICAgZmlyc3QgZnJhbWUgb24gdGhlIHN0YWNrLiAgV2UgYXNzdW1lIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCisrICAgICBQQyBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgdGhlcmUgd2lsbCBiZQorKyAgICAgYSBmZXcgdHJhaWxpbmcgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHN0YWNrLiAgKi8KKysKKysgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9TSUdUUkFNUF9MRU4pKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChidWZbMF0gIT0gTElOVVhfU0lHVFJBTVBfSU5TTjApCisrICAgIHsKKysgICAgICBpZiAoYnVmWzBdICE9IExJTlVYX1NJR1RSQU1QX0lOU04xKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgICAgcGMgLT0gMjsKKysKKysgICAgICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfU0lHVFJBTVBfTEVOKSkKKysJcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfc2lndHJhbXBfY29kZSwgTElOVVhfU0lHVFJBTVBfTEVOKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiBwYzsKKyt9CisrCisrLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGZvciBSVCBzaWduYWxzLiAgSGVyZSB0aGUgaW5zdHJ1Y3Rpb24KKysgICBzZXF1ZW5jZSBpcworKyAgICAgICBtb3YudyAgMWYscjMKKysgICAgICAgdHJhcGEgICMxNgorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgMTogLndvcmQgIF9fTlJfcnRfc2lncmV0dXJuCisrICAgb3IgMHg5MzA1IDB4YzMxMCAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MDBhZC4KKysKKysgICBUaGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHJ0X3NpZ3JldHVybi4gICovCisrCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMAkJTU9WVyg3KQkJLyogTW92ZSBtZW0gd29yZCBhdCBQQys3IHRvIFIzICovCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMQkJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMgkJT1JfUjBfUjAJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGVbXSA9CisreworKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjAsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMSwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBfX05SX3J0X3NpZ3JldHVybgorK307CisrCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9MRU4gKHNpemVvZiBsaW51eF9ydF9zaWd0cmFtcF9jb2RlKQorKworKy8qIElmIFBDIGlzIGluIGEgUlQgc2lndHJhbXAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydAorKyAgIG9mIHRoZSByb3V0aW5lLiAgT3RoZXJ3aXNlLCByZXR1cm4gMC4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKG5leHRfZnJhbWUpOworKyAgZ2RiX2J5dGUgYnVmW0xJTlVYX1JUX1NJR1RSQU1QX0xFTl07CisrCisrICAvKiBXZSBvbmx5IHJlY29nbml6ZSBhIHNpZ25hbCB0cmFtcG9saW5lIGlmIFBDIGlzIGF0IHRoZSBzdGFydCBvZgorKyAgICAgb25lIG9mIHRoZSB0d28gaW5zdHJ1Y3Rpb25zLiAgV2Ugb3B0aW1pemUgZm9yIGZpbmRpbmcgdGhlIFBDIGF0CisrICAgICB0aGUgc3RhcnQsIGFzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbXBvbGluZSBpcyBub3QgdGhlCisrICAgICBmaXJzdCBmcmFtZSBvbiB0aGUgc3RhY2suICBXZSBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKKysgICAgIFBDIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aGVyZSB3aWxsIGJlCisrICAgICBhIGZldyB0cmFpbGluZyByZWFkYWJsZSBieXRlcyBvbiB0aGUgc3RhY2suICAqLworKworKyAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1JUX1NJR1RSQU1QX0xFTikpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMCkKKysgICAgeworKyAgICAgIGlmIChidWZbMF0gIT0gTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEpCisrCXJldHVybiAwOworKworKyAgICAgIHBjIC09IDI7CisrCisrICAgICAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsCisrCQkJCSAgICAgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSkKKysJcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfcnRfc2lndHJhbXBfY29kZSwgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiBwYzsKKyt9CisrCisrLyogUmV0dXJuIHdoZXRoZXIgUEMgaXMgaW4gYSBHTlUvTGludXggc2lndHJhbXAgcm91dGluZS4gICovCisrCisrc3RhdGljIGludAorK3NoX2xpbnV4X3NpZ3RyYW1wX3AgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAodGhpc19mcmFtZSk7CisrICBjaGFyICpuYW1lOworKworKyAgZmluZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgJm5hbWUsIE5VTEwsIE5VTEwpOworKworKyAgLyogSWYgd2UgaGF2ZSBOQU1FLCB3ZSBjYW4gb3B0aW1pemUgdGhlIHNlYXJjaC4gIFRoZSB0cmFtcG9saW5lcyBhcmUKKysgICAgIG5hbWVkIF9fcmVzdG9yZSBhbmQgX19yZXN0b3JlX3J0LiAgSG93ZXZlciwgdGhleSBhcmVuJ3QgZHluYW1pY2FsbHkKKysgICAgIGV4cG9ydGVkIGZyb20gdGhlIHNoYXJlZCBDIGxpYnJhcnksIHNvIHRoZSB0cmFtcG9saW5lIG1heSBhcHBlYXIgdG8KKysgICAgIGJlIHBhcnQgb2YgdGhlIHByZWNlZGluZyBmdW5jdGlvbi4gIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBzaWdhY3Rpb24sCisrICAgICBfX3NpZ2FjdGlvbiwgb3IgX19saWJjX3NpZ2FjdGlvbiAoYWxsIGFsaWFzZXMgdG8gdGhlIHNhbWUgZnVuY3Rpb24pLiAgKi8KKysgIGlmIChuYW1lID09IE5VTEwgfHwgc3Ryc3RyIChuYW1lLCAic2lnYWN0aW9uIikgIT0gTlVMTCkKKysgICAgcmV0dXJuIChzaF9saW51eF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSkgIT0gMAorKwkgICAgfHwgc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpICE9IDApOworKworKyAgcmV0dXJuIChzdHJjbXAgKCJfX3Jlc3RvcmUiLCBuYW1lKSA9PSAwCisrCSAgfHwgc3RyY21wICgiX19yZXN0b3JlX3J0IiwgbmFtZSkgPT0gMCk7CisrfQorKworKy8qIE9mZnNldCB0byBzdHJ1Y3Qgc2lnY29udGV4dCBpbiB1Y29udGV4dCwgZnJvbSA8YXNtL3Vjb250ZXh0Lmg+LiAgKi8KKysjZGVmaW5lIFNIX0xJTlVYX1VDT05URVhUX1NJR0NPTlRFWFRfT0ZGU0VUIDEyCisrCisrCisrLyogQXNzdW1pbmcgTkVYVF9GUkFNRSBpcyBhIGZyYW1lIGZvbGxvd2luZyBhIEdOVS9MaW51eCBzaWd0cmFtcAorKyAgIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBzaWdjb250ZXh0IHN0cnVjdHVyZS4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3NpZ2NvbnRleHRfYWRkciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjOworKyAgQ09SRV9BRERSIHNwOworKworKyAgc3AgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7CisrCisrICBwYyA9IHNoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKTsKKysgIGlmIChwYykKKysgICAgeworKyAgICAgIHJldHVybiBzcDsKKysgICAgfQorKworKyAgcGMgPSBzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSk7CisrICBpZiAocGMpCisrICAgIHsKKysgICAgICBDT1JFX0FERFIgdWNvbnRleHRfYWRkcjsKKysKKysgICAgICAvKiBUaGUgc2lnY29udGV4dCBzdHJ1Y3R1cmUgaXMgcGFydCBvZiB0aGUgdXNlciBjb250ZXh0LiAgQQorKwkgcG9pbnRlciB0byB0aGUgdXNlciBjb250ZXh0IGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQKKysJIHRvIHRoZSBzaWduYWwgaGFuZGxlci4gICovCisrICAgICAgdWNvbnRleHRfYWRkciA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgQVJHMF9SRUdOVU0rMik7CisrICAgICAgcmV0dXJuIHVjb250ZXh0X2FkZHIgKyBTSF9MSU5VWF9VQ09OVEVYVF9TSUdDT05URVhUX09GRlNFVDsKKysgICAgfQorKworKyAgZXJyb3IgKCJDb3VsZG4ndCByZWNvZ25pemUgc2lnbmFsIHRyYW1wb2xpbmUuIik7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogU2lnbmFsIHRyYW1wb2xpbmVzLiAgKi8KKytleHRlcm4gc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCk7CisrCisrc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyt7CisrICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlOworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2N1cnJlbnRfYXJjaCAoKSk7CisrICBDT1JFX0FERFIgc2lnY29udGV4dF9hZGRyOworKworKyAgaWYgKCp0aGlzX2NhY2hlKQorKyAgICByZXR1cm4gKnRoaXNfY2FjaGU7CisrCisrICBjYWNoZSA9IHNoX2FsbG9jX2ZyYW1lX2NhY2hlICgpOworKworKyAgY2FjaGUtPmJhc2UgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7CisrICBzaWdjb250ZXh0X2FkZHIgPSB0ZGVwLT5zaWdjb250ZXh0X2FkZHIgKHRoaXNfZnJhbWUpOworKyAgaWYgKHRkZXAtPnNjX3JlZ19vZmZzZXQpCisrICAgIHsKKysgICAgICBpbnQgaTsKKysKKysgICAgICBnZGJfYXNzZXJ0ICh0ZGVwLT5zY19udW1fcmVncyA8PSBTSF9OVU1fUkVHUyk7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8IHRkZXAtPnNjX251bV9yZWdzOyBpKyspCisrCWlmICh0ZGVwLT5zY19yZWdfb2Zmc2V0W2ldICE9IC0xKQorKwkgIGNhY2hlLT5zYXZlZF9yZWdzW2ldID0gc2lnY29udGV4dF9hZGRyICsgdGRlcC0+c2NfcmVnX29mZnNldFtpXTsKKysgICAgfQorKworKyAgKnRoaXNfY2FjaGUgPSBjYWNoZTsKKysgIHJldHVybiBjYWNoZTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCisrCQkJICAgICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQpCisreworKyAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9CisrICAgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKysKKysgICgqdGhpc19pZCkgPSBmcmFtZV9pZF9idWlsZCAoY2FjaGUtPmJhc2UgKyA2NCwgY2FjaGUtPnBjKTsKKyt9CisrCisrZXh0ZXJuIHN0cnVjdCB2YWx1ZSAqIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKCk7Cisrc3RhdGljIHN0cnVjdCB2YWx1ZSAqCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisrICAgICAgICAgICAgICAgICAgIHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQorK3sKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKysKKysgIHJldHVybiBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlLCByZWdudW0pOworK30KKysKKytzdGF0aWMgaW50Cisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfc25pZmZlciAoY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCAqc2VsZiwKKysgICAgICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorKyAgICAgICAgICAgICAgICAgdm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUpCisreworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpKTsKKysKKysgIC8qIFdlIHNob3VsZG4ndCBldmVuIGJvdGhlciBpZiB3ZSBkb24ndCBoYXZlIGEgc2lnY29udGV4dF9hZGRyCisrICAgICBoYW5kbGVyLiAgKi8KKysgIGlmICh0ZGVwLT5zaWdjb250ZXh0X2FkZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAodGRlcC0+c2lndHJhbXBfcCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPnNpZ3RyYW1wX3AgKHRoaXNfZnJhbWUpKQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3Vud2luZCA9CisreworKyAgU0lHVFJBTVBfRlJBTUUsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciwKKysgIE5VTEwsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9zbmlmZmVyCisrfTsKKysKKysvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTgorKyAgIGluIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQorKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrdm9pZAorK3NoX3N1cHBseV9ncmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmdyZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjb25zdCBjaGFyICpyZWdzID0gZ3JlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+Z3JlZ3NldF9udW1fcmVnczsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKChyZWdudW0gPT0gaSB8fCByZWdudW0gPT0gLTEpCisrICAgICAgJiYgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldICE9IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSwgcmVncyArIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSk7CisrICAgIH0KKyt9CisrCisrLyogQ29sbGVjdCByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgcmVnaXN0ZXIgY2FjaGUgUkVHQ0FDSEUgYW5kIHN0b3JlCisrICAgaXQgaW4gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTiBhcyBkZXNjcmliZWQgYnkgdGhlCisrICAgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHNldCBSRUdTRVQuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yCisrICAgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3ZvaWQKKytzaF9jb2xsZWN0X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKKysgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICBpbnQgcmVnbnVtLCB2b2lkICpncmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY2hhciAqcmVncyA9IGdyZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpOworKworKyAgZm9yIChpID0gMDsgaSA8IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3M7IGkrKykKKysgICAgeworKyAgICAgIGlmICgocmVnbnVtID09IGkgfHwgcmVnbnVtID09IC0xKQorKyAgICAgICYmIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSAhPSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBpLCByZWdzICsgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldKTsKKysgICAgfQorK30KKysKKysvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRlBSRUdTIGFuZCBMRU4KKysgICBpbiB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQorKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrc3RhdGljIHZvaWQKKytzaF9zdXBwbHlfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY29uc3QgY2hhciAqcmVncyA9IGZwcmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgeworKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpKzI1LCByZWdzICsgaSo0KTsKKysgICAgfQorKyAgaWYgKHJlZ251bSA9PSBGUFNDUl9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgRlBTQ1JfUkVHTlVNLCByZWdzICsgMzIqNCk7CisrICBpZiAocmVnbnVtID09IEZQVUxfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7CisrfQorKworKy8qIENvbGxlY3QgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIHJlZ2lzdGVyIGNhY2hlIFJFR0NBQ0hFIGFuZCBzdG9yZQorKyAgIGl0IGluIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEZQUkVHUyBhbmQgTEVOIGFzIGRlc2NyaWJlZCBieSB0aGUKKysgICBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQgUkVHU0VULiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvcgorKyAgIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3NoX2NvbGxlY3RfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKKysgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgIGludCByZWdudW0sIHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY2hhciAqcmVncyA9IGZwcmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgeworKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgaSsyNSwgcmVncyArIGkqNCk7CisrICAgIH0KKysgIGlmIChyZWdudW0gPT0gRlBTQ1JfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBGUFNDUl9SRUdOVU0sIHJlZ3MgKyAzMio0KTsKKysgIGlmIChyZWdudW0gPT0gRlBVTF9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7CisrfQorKworKy8qIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgY29yZSBzZWN0aW9uIGlkZW50aWZpZWQKKysgICBieSBTRUNUX05BTUUgYW5kIFNFQ1RfU0laRS4gICovCisrCisrY29uc3Qgc3RydWN0IHJlZ3NldCAqCisrc2hfbGludXhfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VjdF9uYW1lLCBzaXplX3Qgc2VjdF9zaXplKQorK3sKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworKworKyAgaWYgKHN0cmNtcCAoc2VjdF9uYW1lLCAiLnJlZyIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPmdyZWdzZXQgPT0gTlVMTCkKKysgICAgdGRlcC0+Z3JlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJjaCwgc2hfc3VwcGx5X2dyZWdzZXQsCisrICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZ3JlZ3NldCk7CisrICAgICAgcmV0dXJuIHRkZXAtPmdyZWdzZXQ7CisrICAgIH0KKysKKysgIGlmICgoc3RyY21wIChzZWN0X25hbWUsICIucmVnMiIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCkpCisrICAgIHsKKysgICAgICBpZiAodGRlcC0+ZnByZWdzZXQgPT0gTlVMTCkKKysgICAgdGRlcC0+ZnByZWdzZXQgPSByZWdzZXRfYWxsb2MgKGdkYmFyY2gsIHNoX3N1cHBseV9mcHJlZ3NldCwKKysgICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZnByZWdzZXQpOworKyAgICAgIHJldHVybiB0ZGVwLT5mcHJlZ3NldDsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFRoZSByZWdpc3RlciBzZXRzIHVzZWQgaW4gR05VL0xpbnV4IEVMRiBjb3JlLWR1bXBzIGFyZSBpZGVudGljYWwgdG8KKysgICB0aGUgcmVnaXN0ZXIgc2V0cyBpbiBgc3RydWN0IHVzZXInIHRoYXQgYXJlIHVzZWQgZm9yIGEub3V0CisrICAgY29yZS1kdW1wcy4gIFRoZXNlIGFyZSBhbHNvIHVzZWQgYnkgcHRyYWNlKDIpLiAgVGhlIGNvcnJlc3BvbmRpbmcKKysgICB0eXBlcyBhcmUgYGVsZl9ncmVnc2V0X3QnIGZvciB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyAod2l0aAorKyAgIGBlbGZfZ3JlZ190JyB0aGUgdHlwZSBvZiBhIHNpbmdsZSBHUCByZWdpc3RlcikgYW5kIGBlbGZfZnByZWdzZXRfdCcKKysgICBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKysKKysgICBUaG9zZSB0eXBlcyB1c2VkIHRvIGJlIGF2YWlsYWJsZSB1bmRlciB0aGUgbmFtZXMgYGdyZWdzZXRfdCcgYW5kCisrICAgYGZwcmVnc2V0X3QnIHRvbywgYW5kIEdEQiB1c2VkIHRob3NlIG5hbWVzIGluIHRoZSBwYXN0LiAgQnV0IHRob3NlCisrICAgbmFtZXMgYXJlIG5vdyB1c2VkIGZvciB0aGUgcmVnaXN0ZXIgc2V0cyB1c2VkIGluIHRoZSBgbWNvbnRleHRfdCcKKysgICB0eXBlLCB3aGljaCBoYXZlIGEgZGlmZmVyZW50IHNpemUgYW5kIGxheW91dC4gICovCisrCisrLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QgdXNlcicKKysgICBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCisrCisrLyogRnJvbSA8c3lzL3JlZy5oPi4gICovCisrc3RhdGljIGludCBzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXRbXSA9CisreworKyAwLAk0LAk4LAkxMiwJMTYsCTIwLAkyNCwJMjgsCisrIDMyLAkzNiwJNDAsCTQ0LAk0OCwJNTIsCTU2LAk2MCwKKysKKysgUkVHX1BDKjQsICAgUkVHX1BSKjQsICAgUkVHX0dCUio0LCAgLTEsCisrIFJFR19NQUNIKjQsIFJFR19NQUNMKjQsIFJFR19TUio0LAorK307CisrCisrLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QKKysgICBzaWdjb250ZXh0JyBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCisrCisrLyogRnJvbSA8YXNtL3NpZ2NvbnRleHQuaD4uICAqLworK3N0YXRpYyBpbnQgc2hfbGludXhfc2NfcmVnX29mZnNldFtdID0KKyt7CisrIDQsCTgsCTEyLAkxNiwJMjAsCTI0LAkyOCwJMzIsCisrIDM2LAk0MCwJNDQsCTQ4LAk1MiwJNTYsCTYwLAk2NCwKKysgNjgsCTcyLAk4MCwJLTEsCisrIDg0LAk4OCwJNzYKKyt9OworKworIHN0YXRpYyB2b2lkCisgc2hfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpCisgeworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisrICBiZmQgYWJmZDsKKysKKysgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9IHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldDsKKysgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXQpOworKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAyMyAqIDQ7CisrCisrICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAzMjsgICAgIC8qIEZyb20gPGJpdHMvc2V0am1wLmg+LiAgKi8KKysKKysgIHRkZXAtPnNpZ3RyYW1wX3AgPSBzaF9saW51eF9zaWd0cmFtcF9wOworKyAgdGRlcC0+c2lnY29udGV4dF9hZGRyID0gc2hfbGludXhfc2lnY29udGV4dF9hZGRyOworKyAgdGRlcC0+c2NfcmVnX29mZnNldCA9IHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQ7CisrICB0ZGVwLT5zY19udW1fcmVncyA9IEFSUkFZX1NJWkUgKHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQpOworKworKyAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlcihnZGJhcmNoLCAmc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdW53aW5kKTsKKysKKysgIC8qIElmIHdlIGhhdmUgYSByZWdpc3RlciBtYXBwaW5nLCBlbmFibGUgdGhlIGdlbmVyaWMgY29yZSBmaWxlCisrICAgICBzdXBwb3J0LCB1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLiAgKi8KKysgIGlmICh0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQKKysgICAgICAmJiAhZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb25fcCAoZ2RiYXJjaCkpCisrICAgIHNldF9nZGJhcmNoX3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbiAoZ2RiYXJjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoX2xpbnV4X3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbik7CisrCisgICBsaW51eF9pbml0X2FiaSAoaW5mbywgZ2RiYXJjaCk7CisgCisgICAvKiBHTlUvTGludXggdXNlcyBTVlI0LXN0eWxlIHNoYXJlZCBsaWJyYXJpZXMuICAqLworZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmMgYi9nZGIvc2gtdGRlcC5jCitpbmRleCA4MmNmMmY0Li5iNDQzZTQ2IDEwMDY0NAorLS0tIGEvZ2RiL3NoLXRkZXAuYworKysrIGIvZ2RiL3NoLXRkZXAuYworQEAgLTIxLDYgKzIxLDkgQEAKKyAgICBzYWNAY3lnbnVzLmNvbS4gICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJjb21tYW5kLmgiCisrI2luY2x1ZGUgImR1bW15LWZyYW1lLmgiCisgI2luY2x1ZGUgImZyYW1lLmgiCisgI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKKyAjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCitAQCAtMzUsNiArMzgsNyBAQAorICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisgI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCisgI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisrI2luY2x1ZGUgInJlZ3NldC5oIgorICNpbmNsdWRlICJkb3VibGVzdC5oIgorICNpbmNsdWRlICJvc2FiaS5oIgorICNpbmNsdWRlICJyZWdncm91cHMuaCIKK0BAIC02NywyMyArNzEsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2hfY2NfZW51bVtdID0geworIAorIHN0YXRpYyBjb25zdCBjaGFyICpzaF9hY3RpdmVfY2FsbGluZ19jb252ZW50aW9uID0gc2hfY2NfZ2NjOworIAorLSNkZWZpbmUgU0hfTlVNX1JFR1MgNjcKKy0KKy1zdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUKKy17CistICAvKiBCYXNlIGFkZHJlc3MuICAqLworLSAgQ09SRV9BRERSIGJhc2U7CistICBMT05HRVNUIHNwX29mZnNldDsKKy0gIENPUkVfQUREUiBwYzsKKy0KKy0gIC8qIEZsYWcgc2hvd2luZyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgcHJvbG9ndWUgY29kZS4gICovCistICBpbnQgdXNlc19mcDsKKy0KKy0gIC8qIFNhdmVkIHJlZ2lzdGVycy4gICovCistICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tTSF9OVU1fUkVHU107CistICBDT1JFX0FERFIgc2F2ZWRfc3A7CistfTsKKy0KKyBzdGF0aWMgaW50Cisgc2hfaXNfcmVuZXNhc19jYWxsaW5nX2NvbnZlbnRpb24gKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUpCisgeworQEAgLTEwNDMsNyArMTAzMCw3IEBAIHNoX3RyZWF0X2FzX2ZsdF9wIChzdHJ1Y3QgdHlwZSAqdHlwZSkKKyAgICAgcmV0dXJuIDA7CisgICAvKiBPdGhlcndpc2UgaWYgdGhlIHR5cGUgb2YgdGhhdCBtZW1iZXIgaXMgZmxvYXQsIHRoZSB3aG9sZSB0eXBlIGlzCisgICAgICB0cmVhdGVkIGFzIGZsb2F0LiAgKi8KKy0gIGlmIChUWVBFX0NPREUgKFRZUEVfRklFTERfVFlQRSAodHlwZSwgMCkpID09IFRZUEVfQ09ERV9GTFQpCisrICBpZiAoVFlQRV9DT0RFIChjaGVja190eXBlZGVmIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIDApKSkgPT0gVFlQRV9DT0RFX0ZMVCkKKyAgICAgcmV0dXJuIDE7CisgICAvKiBPdGhlcndpc2UgaXQncyBub3QgdHJlYXRlZCBhcyBmbG9hdC4gICovCisgICByZXR1cm4gMDsKK0BAIC0xMDkzLDcgKzEwODAsNyBAQCBzaF9wdXNoX2R1bW15X2NhbGxfZnB1IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyAgICAgIGluIGZvdXIgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gIExvb3AgdGhydSBhcmdzIGZyb20gZmlyc3QgdG8gbGFzdC4gICovCisgICBmb3IgKGFyZ251bSA9IDA7IGFyZ251bSA8IG5hcmdzOyBhcmdudW0rKykKKyAgICAgeworLSAgICAgIHR5cGUgPSB2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pOworKyAgICAgIHR5cGUgPSBjaGVja190eXBlZGVmICh2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pKTsKKyAgICAgICBsZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7CisgICAgICAgdmFsID0gc2hfanVzdGlmeV92YWx1ZV9pbl9yZWcgKGdkYmFyY2gsIGFyZ3NbYXJnbnVtXSwgbGVuKTsKKyAKK0BAIC0xODIxLDcgKzE4MDgsNyBAQCBzaF9kd2FyZjJfZnJhbWVfaW5pdF9yZWcgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtLAorICAgICByZWctPmhvdyA9IERXQVJGMl9GUkFNRV9SRUdfVU5ERUZJTkVEOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQorIHsKKyAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7CitAQCAtMTg0OCw3ICsxODM1LDcgQEAgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCisgICByZXR1cm4gY2FjaGU7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3N0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisgc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyB7CisgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKK0BAIC0xOTE1LDkgKzE5MDIsOSBAQCBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorICAgcmV0dXJuIGNhY2hlOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHZhbHVlICoKKy1zaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKy0JCQl2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkKKytzdHJ1Y3QgdmFsdWUgKgorK3NoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKKysJCQlpbnQgcmVnbnVtKQorIHsKKyAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworICAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9IHNoX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKK0BAIC0xOTMxLDcgKzE5MTgsNyBAQCBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKyAgICAgIHRoZSBjdXJyZW50IGZyYW1lLiAgRnJvYiByZWdudW0gc28gdGhhdCB3ZSBwdWxsIHRoZSB2YWx1ZSBmcm9tCisgICAgICB0aGUgY29ycmVjdCBwbGFjZS4gICovCisgICBpZiAocmVnbnVtID09IGdkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoKSkKKy0gICAgcmVnbnVtID0gUFJfUkVHTlVNOworKyAgICByZWdudW0gPSBQUl9SRUdOVU07IC8qIFhYWDogcmVhbGx5PyAqLworIAorICAgaWYgKHJlZ251bSA8IFNIX05VTV9SRUdTICYmIGNhY2hlLT5zYXZlZF9yZWdzW3JlZ251bV0gIT0gLTEpCisgICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X21lbW9yeSAodGhpc19mcmFtZSwgcmVnbnVtLAorQEAgLTIyMzcsOCArMjIyNCw4IEBAIHNoX3JldHVybl9pbl9maXJzdF9oaWRkZW5fcGFyYW1fcCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgc3RhdGljIHN0cnVjdCBnZGJhcmNoICoKKyBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorIHsKKy0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworICAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcDsKKysgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworIAorICAgLyogU0g1IGlzIGhhbmRsZWQgZW50aXJlbHkgaW4gc2g2NC10ZGVwLmMuICAqLworICAgaWYgKGluZm8uYmZkX2FyY2hfaW5mby0+bWFjaCA9PSBiZmRfbWFjaF9zaDUpCitAQCAtMjI1NCw2ICsyMjQxLDE4IEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgICB0ZGVwID0gWENORVcgKHN0cnVjdCBnZGJhcmNoX3RkZXApOworICAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVwKTsKKyAKKysgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLworKyAgdGRlcC0+Z3JlZ3NldCA9IE5VTEw7CisrICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBOVUxMOworKyAgdGRlcC0+Z3JlZ3NldF9udW1fcmVncyA9IDIzOworKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAwOworKworKyAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKysgIHRkZXAtPmZwcmVnc2V0ID0gTlVMTDsKKysgIHRkZXAtPnNpemVvZl9mcHJlZ3NldCA9IDM0KjQ7CisrCisrICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAtMTsKKysKKyAgIHNldF9nZGJhcmNoX3Nob3J0X2JpdCAoZ2RiYXJjaCwgMiAqIFRBUkdFVF9DSEFSX0JJVCk7CisgICBzZXRfZ2RiYXJjaF9pbnRfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKKyAgIHNldF9nZGJhcmNoX2xvbmdfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKK0BAIC0yNDA0LDEwICsyNDAzLDExIEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKysgIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJzIChnZGJhcmNoKTsKKysKKyAgIC8qIEhvb2sgaW4gQUJJLXNwZWNpZmljIG92ZXJyaWRlcywgaWYgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gICovCisgICBnZGJhcmNoX2luaXRfb3NhYmkgKGluZm8sIGdkYmFyY2gpOworIAorLSAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdkYmFyY2gpOworICAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJnNoX3N0dWJfdW53aW5kKTsKKyAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9mcmFtZV91bndpbmQpOworIAorZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmggYi9nZGIvc2gtdGRlcC5oCitpbmRleCBmYzY3MWE1Li42OTlmNTlmIDEwMDY0NAorLS0tIGEvZ2RiL3NoLXRkZXAuaAorKysrIGIvZ2RiL3NoLXRkZXAuaAorQEAgLTIxLDYgKzIxLDEyIEBACisgCisgLyogQ29udHJpYnV0ZWQgYnkgU3RldmUgQ2hhbWJlcmxhaW4gc2FjQGN5Z251cy5jb20uICAqLworIAorK3N0cnVjdCBmcmFtZV9pbmZvOworK3N0cnVjdCBnZGJhcmNoOworK3N0cnVjdCByZWdncm91cDsKKytzdHJ1Y3QgcmVnc2V0OworK3N0cnVjdCByZWdjYWNoZTsKKysKKyAvKiBSZWdpc3RlcnMgZm9yIGFsbCBTSCB2YXJpYW50cy4gIFVzZWQgYWxzbyBieSBzaDMtcm9tLmMuICAqLworIGVudW0KKyAgIHsKK0BAIC0yOSw2ICszNSw3IEBAIGVudW0KKyAgICAgQVJHMF9SRUdOVU0gPSA0LAorICAgICBBUkdMQVNUX1JFR05VTSA9IDcsCisgICAgIEZQX1JFR05VTSA9IDE0LAorKyAgICBTUF9SRUdOVU0gPSAxNSwKKyAgICAgUENfUkVHTlVNID0gMTYsCisgICAgIFBSX1JFR05VTSA9IDE3LAorICAgICBHQlJfUkVHTlVNID0gMTgsCitAQCAtODEsNiArODgsMjQgQEAgZW51bQorICAgICBGVjBfUkVHTlVNID0gNzYsCisgICAgIEZWX0xBU1RfUkVHTlVNID0gNzkKKyAgIH07CisrI2RlZmluZSBTSF9OVU1fUkVHUyA2NworKworK3N0cnVjdCBzaF9mcmFtZV9jYWNoZQorK3sKKysgIC8qIEJhc2UgYWRkcmVzcy4gICovCisrICBDT1JFX0FERFIgYmFzZTsKKysgIExPTkdFU1Qgc3Bfb2Zmc2V0OworKyAgQ09SRV9BRERSIHBjOworKworKyAgLyogRmxhZyBzaG93aW5nIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBwcm9sb2d1ZSBjb2RlLiAqLworKyAgaW50IHVzZXNfZnA7CisrCisrICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLworKyAgQ09SRV9BRERSIHNhdmVkX3JlZ3NbU0hfTlVNX1JFR1NdOworKyAgQ09SRV9BRERSIHNhdmVkX3NwOworK307CisrCisrZXh0ZXJuIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSk7CisgCisgLyogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcmVnaXN0ZXIgaW4gYSBjb3JlLWZpbGUuICAqLworIHN0cnVjdCBzaF9jb3JlZmlsZV9yZWdtYXAKK0BAIC04OSw4ICsxMTQsMzIgQEAgc3RydWN0IHNoX2NvcmVmaWxlX3JlZ21hcAorICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyB9OworIAorKy8qIHNoIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gICovCisgc3RydWN0IGdkYmFyY2hfdGRlcAorIHsKKysgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLworKyAgc3RydWN0IHJlZ3NldCAqZ3JlZ3NldDsKKysgIGludCAqZ3JlZ3NldF9yZWdfb2Zmc2V0OworKyAgaW50IGdyZWdzZXRfbnVtX3JlZ3M7CisrICBzaXplX3Qgc2l6ZW9mX2dyZWdzZXQ7CisrCisrICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLworKyAgc3RydWN0IHJlZ3NldCAqZnByZWdzZXQ7CisrICBzaXplX3Qgc2l6ZW9mX2ZwcmVnc2V0OworKworKyAgLyogT2Zmc2V0IG9mIHNhdmVkIFBDIGluIGptcF9idWYuICAqLworKyAgaW50IGpiX3BjX29mZnNldDsKKysKKysgIC8qIERldGVjdCBzaWd0cmFtcC4gICovCisrICBpbnQgKCpzaWd0cmFtcF9wKSAoc3RydWN0IGZyYW1lX2luZm8gKik7CisrCisrICAvKiBHZXQgYWRkcmVzcyBvZiBzaWdjb250ZXh0IGZvciBzaWd0cmFtcC4gICovCisrICBDT1JFX0FERFIgKCpzaWdjb250ZXh0X2FkZHIpIChzdHJ1Y3QgZnJhbWVfaW5mbyAqKTsKKysKKysgIC8qIE9mZnNldCBvZiByZWdpc3RlcnMgaW4gYHN0cnVjdCBzaWdjb250ZXh0Jy4gICovCisrICBpbnQgKnNjX3JlZ19vZmZzZXQ7CisrICBpbnQgc2NfbnVtX3JlZ3M7CisrCisgICAvKiBOb24tTlVMTCB3aGVuIGRlYnVnZ2luZyBmcm9tIGEgY29yZSBmaWxlLiAgUHJvdmlkZXMgdGhlIG9mZnNldAorICAgICAgd2hlcmUgZWFjaCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgaXMgc3RvcmVkIGluc2lkZSB0aGUgYXNzb2NpYXRlZAorICAgICAgY29yZSBmaWxlIHNlY3Rpb24uICAqLworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAoraW5kZXggODg1NGFmMC4uZWY0NDY4MiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCitAQCAtMTEzLDYgKzExMywxMSBAQCBzd2l0Y2ggLWdsb2IgLS0gW2lzdGFyZ2V0XSB7CisgICAgICAgICAgICAgYXBwZW5kIGxpbmstZmxhZ3MgIiAtbSBlbGYzMnBwYyIKKyAgICAgICAgIH0KKyAgICAgfQorKyAgICAic2gqLWxpbnV4KiIgeworKyAgICAgICAgc2V0IGFzbS1hcmNoIHNoLWxpbnV4CisrICAgICAgICBzZXQgYXNtLWZsYWdzICItSSR7c3JjZGlyfS8ke3N1YmRpcn0gLUkke29iamRpcn0vJHtzdWJkaXJ9IgorKwlzZXQgZGVidWctZmxhZ3MgIi1nZHdhcmYtMiIKKysgICAgfQorICAgICAic2gqLSotKiIgeworICAgICAgICAgc2V0IGFzbS1hcmNoIHNoCisgCXNldCBkZWJ1Zy1mbGFncyAiLWdkd2FyZi0yIgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCitpbmRleCBhNGE1ZmM1Li44OWVmZWQ3IDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworQEAgLTQwLDkgKzQwLDggQEAKKyAJbW92LmwgICAuTGNvbnN0XEAscjEKKyAJYnJhCS5MYWZ0ZXJjb25zdFxACisgCW5vcAorLQlub3AKKy0uTGNvbnN0XEA6CisgCS5hbGlnbgkyCisrLkxjb25zdFxAOgorIAkubG9uZwlcc3VicgorIAkuYWxpZ24JMQorIC5MYWZ0ZXJjb25zdFxAOgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKK2luZGV4IDQyNGUxYjguLjBkZTJlN2IgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKK0BAIC0xLDYgKzEsOSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorIAorIHZvaWQKKyBoYW5kbGVfVVNSMSAoaW50IHNpZykKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCitpbmRleCA0MjRlMWI4Li45NTJhYWYyIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCitAQCAtMSw2ICsxLDEwIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisrCisgCisgdm9pZAorIGhhbmRsZV9VU1IxIChpbnQgc2lnKQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCitpbmRleCA4MWYzYjA4Li4xNTc0YjJkIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworQEAgLTEsNiArMSw5IEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorIAorIC8qIFNpZ25hbCBoYW5kbGVycywgd2Ugc2V0IGJyZWFrcG9pbnRzIGluIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgc2lnbmFscyByZWFsbHkgZ2V0IGRlbGl2ZXJlZC4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworaW5kZXggNzU2NjA2OC4uMTIwNWE5YiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworQEAgLTMsNiArMywxMCBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZGVmaW5lIGFsYXJtKGEpICAgICAgIC8qIERpdHRvIGZvciBhbGFybSgpICovCisrI2VuZGlmCisgCisgc3RhdGljIGludCBjb3VudCA9IDA7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZpeC1kZXRlY3Rpb24tb2YtNjQtYml0LVBQQy1pbmZlcmlvci1pbi1nZGJzZXJ2ZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTQzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNGZlNjdkYmFmYTFiZWU2NzlkYWVjYzEyZWQzMDYyMWQ1YzI2MDVkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFlhbyBRaSA8eWFvQGNvZGVzb3VyY2VyeS5jb20+CitEYXRlOiBNb24sIDExIE1heSAyMDE1IDEwOjU3OjMzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBkZXRlY3Rpb24gb2YgNjQtYml0IFBQQyBpbmZlcmlvciBpbiBnZGJzZXJ2ZXIKKworSXNzdWUgIzE2Nzc1CisKKyogZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYyAocHBjX2FyY2hfc2V0dXApOiBDaGFuZ2UgdmFyaWFibGUgbXNyIHRvIHR5cGUKKyd1bnNpZ25lZCBsb25nJy4gIENoZWNrIGJpdCA2MyBvciBiaXQgMzEgaXMgb25lLgorCitodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1wYXRjaGVzLzIwMTQtMTIvbXNnMDAyMzkuaHRtbAorV3JpdHRlbiBieTogWWFvIFFpIDx5YW9AY29kZXNvdXJjZXJ5LmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIHwgMTEgKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworaW5kZXggNjNkNDIxOC4uYTYyY2YyMiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworQEAgLTM3NCw3ICszNzQsNyBAQCBwcGNfYXJjaF9zZXR1cCAodm9pZCkKKyB7CisgICBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjOworICNpZmRlZiBfX3Bvd2VycGM2NF9fCistICBsb25nIG1zcjsKKysgIHVuc2lnbmVkIGxvbmcgbXNyOworICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZTsKKyAKKyAgIC8qIE9uIGEgNjQtYml0IGhvc3QsIGFzc3VtZSA2NC1iaXQgaW5mZXJpb3IgcHJvY2VzcyB3aXRoIG5vCitAQCAtMzg0LDEzICszODQsMTYgQEAgcHBjX2FyY2hfc2V0dXAgKHZvaWQpCisgICBjdXJyZW50X3Byb2Nlc3MgKCktPnRkZXNjID0gdGRlc2M7CisgICBwcGNfaHdjYXAgPSAwOworIAorLSAgLyogT25seSBpZiB0aGUgaGlnaCBiaXQgb2YgdGhlIE1TUiBpcyBzZXQsIHdlIGFjdHVhbGx5IGhhdmUKKy0gICAgIGEgNjQtYml0IGluZmVyaW9yLiAgKi8KKysgIC8qIFdlIGFjdHVhbGx5IGhhdmUgYSA2NC1iaXQgaW5mZXJpb3Igb25seSBpZiB0aGUgY2VydGFpbiBiaXQgb2YgdGhlCisrICAgICBNU1IgaXMgc2V0LiAgVGhlIFBvd2VySVNBIEJvb2sgSUlJLVMgTVNSIGlzIGRpZmZlcmVudCBmcm9tIHRoZQorKyAgICAgUG93ZXJJU0EgQm9vayBJSUktRSBNU1IuICBUaGUgQm9vayBJSUktUyBNU1IgaXMgNjQgYml0cyB3aWRlLCBhbmQKKysgICAgIGl0cyBNU1JbU0ZdIGlzIHRoZSBiaXQgMCBvZiBhIDY0LWJpdCB2YWx1ZS4gIEJvb2sgSUlJLUUgTVNSIGlzIDMyCisrICAgICBiaXRzIHdpZGUsIGFuZCBpdHMgTVNSW0NNXSBpcyB0aGUgYml0IDAgb2YgYSAzMi1iaXQgdmFsdWUuICAqLworICAgcmVnY2FjaGUgPSBuZXdfcmVnaXN0ZXJfY2FjaGUgKHRkZXNjKTsKKyAgIGZldGNoX2luZmVyaW9yX3JlZ2lzdGVycyAocmVnY2FjaGUsIGZpbmRfcmVnbm8gKHRkZXNjLCAibXNyIikpOworICAgY29sbGVjdF9yZWdpc3Rlcl9ieV9uYW1lIChyZWdjYWNoZSwgIm1zciIsICZtc3IpOworICAgZnJlZV9yZWdpc3Rlcl9jYWNoZSAocmVnY2FjaGUpOworLSAgaWYgKG1zciA8IDApCisrICBpZiAobXNyICYgMHg4MDAwMDAwMDgwMDAwMDAwKQorICAgICB7CisgICAgICAgcHBjX2dldF9od2NhcCAoJnBwY19od2NhcCk7CisgICAgICAgaWYgKHBwY19od2NhcCAmIFBQQ19GRUFUVVJFX0NFTEwpCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1MmUyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgZ2RiLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCisKK2luaGVyaXQgcHl0aG9uLWRpcgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24sLS13aXRob3V0LXB5dGhvbixweXRob24scHl0aG9uIHB5dGhvbi1jb2RlY3MiCitQQUNLQUdFQ09ORklHW2JhYmVsdHJhY2VdID0gIi0td2l0aC1iYWJlbHRyYWNlLC0td2l0aG91dC1iYWJlbHRyYWNlLGJhYmVsdHJhY2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgLW4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24nLCAnJywgZCl9IiBdOyB0aGVuCisJCWNhdCA+ICR7V09SS0RJUn0vcHl0aG9uIDw8IEVPRgorIyEvYmluL3NoCitjYXNlICJcJDIiIGluCisJLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKKwktLWxkZmxhZ3MpIGVjaG8gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfS8uLiAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IiA7OworCS0tZXhlYy1wcmVmaXgpIGVjaG8gIiR7ZXhlY19wcmVmaXh9IiA7OworCSopIGV4aXQgMSA7OworZXNhYworZXhpdCAwCitFT0YKKwkJY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYTRhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMKQEAgLTAsMCArMSwxMzAgQEAKK1NVTU1BUlkgPSAiRGlzdHJpYnV0ZWQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQtc2NtLmNvbSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gIm9wZW5zc2wgY3VybCB6bGliIGV4cGF0IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnaXQtcmVwbGFjZW1lbnQtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvc2NtL2dpdC9naXQtJHtQVn0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvc2NtL2dpdC9naXQtbWFucGFnZXMtJHtQVn0udGFyLmd6O25hbWU9bWFucGFnZXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQtJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdjMGQ3ZWYwM2E3ZWIwNGNlNzk1YjBmNjBlNjhlN2UxIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBlcmw9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwgXAorCQktLXdpdGhvdXQtdGNsdGsgXAorIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGVybG5hdGl2ZQorCitFWFRSQV9PRU1BS0UgPSAiTk9fUFlUSE9OPTEgQ0ZMQUdTPScke0NGTEFHU30nIExERkxBR1M9JyR7TERGTEFHU30nIgorRVhUUkFfT0VNQUtFICs9ICInUEVSTF9QQVRIPS91c3IvYmluL2VudiBwZXJsJyIKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTPTEiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgcGVybC9wZXJsLm1hayB0byBmaXggdGhlIG91dC1vZi1kYXRlIHBlcmwubWFrIGVycm9yCisJIyBkdXJpbmcgcmVidWlsZAorCXJtIC1mIHBlcmwvcGVybC5tYWsKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9IiR7RH0iIGJpbmRpcj0ke2JpbmRpcn0gXAorCQl0ZW1wbGF0ZV9kaXI9JHtkYXRhZGlyfS9naXQtY29yZS90ZW1wbGF0ZXMgXAorCQlHSVRfUFlUSE9OX0RJUj0ke0R9JHtkYXRhZGlyfS9naXQtY29yZS9weXRob24KKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjUKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjcKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjEgJHtXT1JLRElSfS9tYW4xLyoKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjUgJHtXT1JLRElSfS9tYW41LyoKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjcgJHtXT1JLRElSfS9tYW43LyoKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCAke0R9LyR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL2dpdAorfQorCitwZXJsX25hdGl2ZV9maXh1cCAoKSB7CisJc2VkIC1pIC1lICdzIyR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8jJHtiaW5kaXJ9LyMnIFwKKwkgICAgICAgLWUgJ3MjJHtsaWJkaXJ9L3BlcmwtbmF0aXZlLyMke2xpYmRpcn0vIycgXAorCSAgICAke0BkLmdldFZhcigiUEVSTFRPT0xTIiwgVHJ1ZSkucmVwbGFjZSgnIC8nLGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyAnLycpfQorCisJIyAke2xpYmRpcn0gaXMgbm90IGFwcGxpY2FibGUgaGVyZSwgcGVybC1uYXRpdmUgZmlsZXMgYXJlIGFsd2F5cworCSMgaW5zdGFsbGVkIHRvIC91c3IvbGliIG9uIGJvdGggMzIvNjQgYml0cyB0YXJnZXRzLgorCW12ICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvcGVybC1uYXRpdmUvcGVybCAke0R9JHtsaWJkaXJ9CisJcm1kaXIgLXAgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9wZXJsLW5hdGl2ZSB8fCB0cnVlCit9CisKK1JFTF9HSVRfRVhFQ19QQVRIID0gIiR7QG9zLnBhdGgucmVscGF0aChsaWJleGVjZGlyLCBiaW5kaXIpfS9naXQtY29yZSIKK1JFTF9HSVRfVEVNUExBVEVfRElSID0gIiR7QG9zLnBhdGgucmVscGF0aChkYXRhZGlyLCBiaW5kaXIpfS9naXQtY29yZS90ZW1wbGF0ZXMiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJcGVybF9uYXRpdmVfZml4dXAKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vZ2l0IFwKKwkJR0lUX0VYRUNfUEFUSD0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfRVhFQ19QQVRIfSBcCisJCUdJVF9URU1QTEFURV9ESVI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX1RFTVBMQVRFX0RJUn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vZ2l0IFwKKwkJR0lUX0VYRUNfUEFUSD0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfRVhFQ19QQVRIfSBcCisJCUdJVF9URU1QTEFURV9ESVI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX1RFTVBMQVRFX0RJUn0KKwlwZXJsX25hdGl2ZV9maXh1cAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9naXQtY29yZSAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9naXQtY29yZS8uZGVidWciCisKK1BFUkxUT09MUyA9ICIgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFkZC0taW50ZXJhY3RpdmUgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFyY2hpbXBvcnQgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWN2c2V4cG9ydGNvbW1pdCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtY3ZzaW1wb3J0IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jdnNzZXJ2ZXIgXAorICAgICR7YmluZGlyfS9naXQtY3Zzc2VydmVyIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1kaWZmdG9vbCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtcmVsaW5rIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zZW5kLWVtYWlsIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zdm4gXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWluc3Rhd2ViIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zdWJtb2R1bGUgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFtIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1yZXF1ZXN0LXB1bGwgXAorICAgICR7ZGF0YWRpcn0vZ2l0d2ViL2dpdHdlYi5jZ2kgXAorICAgICR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzL2hvb2tzL3ByZXBhcmUtY29tbWl0LW1zZy5zYW1wbGUgXAorICAgICR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzL2hvb2tzL3ByZS1yZWJhc2Uuc2FtcGxlIFwKKyIKKworIyBCYXNpYyB0YWIgY29tcGxldGlvbiBzdXBwb3J0CitQQUNLQUdFUyA9KyAiJHtQTn0tYmFzaC1jb21wbGV0aW9uIgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zLyoiCisKKyMgR2l0IHRvb2xzIHJlcXVpcmluZyBwZXJsCitQQUNLQUdFUyA9KyAiJHtQTn0tcGVybHRvb2xzIgorRklMRVNfJHtQTn0tcGVybHRvb2xzICs9ICIgXAorICAgICR7UEVSTFRPT0xTfSBcCisgICAgJHtsaWJkaXJ9L3BlcmwgXAorICAgICR7ZGF0YWRpcn0vcGVybCBcCisiCitSREVQRU5EU18ke1BOfS1wZXJsdG9vbHMgPSAiJHtQTn0gcGVybCBwZXJsLW1vZHVsZS1maWxlLXBhdGggZmluZHV0aWxzIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tcHl0aG9uIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qIgorCisKKyMgZ2l0LXRrIHBhY2thZ2Ugd2l0aCBnaXRrIGFuZCBnaXQtZ3VpCitQQUNLQUdFUyA9KyAiJHtQTn0tdGsiCisjUkRFUEVORFNfJHtQTn0tdGsgPSAiJHtQTn0gdGsgdGNsIgorI0VYVFJBX09FTUFLRSA9ICJUQ0xfUEFUSD0ke1NUQUdJTkdfQklORElSX0NST1NTfS90Y2xzaCIKK0ZJTEVTXyR7UE59LXRrID0gIiBcCisgICAgJHtiaW5kaXJ9L2dpdGsgXAorICAgICR7ZGF0YWRpcn0vZ2l0ayBcCisiCisKK1BBQ0tBR0VTID0rICJnaXR3ZWIiCitGSUxFU19naXR3ZWIgPSAiJHtkYXRhZGlyfS9naXR3ZWIvIgorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ODZjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ2l0LmluYworCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9bm8gXAorICAgICAgICAgICAgICAgICBhY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz0ke2FjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzPXllc30gXAorICAgICAgICAgICAgICAgICAiCitFWFRSQV9PRU1BS0UgKz0gIk5PX0dFVFRFWFQ9MSIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiM2JjOWIwYTgwM2FlOGVjNmM1MzE2Y2M2NGYwYjdmNzgiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICI4ZmExM2JhODQzNGZmODNkMjRmNTdmODMxZDU1ZGJiOTA0NjQzNGMyNjY2NDExODBhMzc3NDRmYWNmY2U3MmFjIgorU1JDX1VSSVttYW5wYWdlcy5tZDVzdW1dID0gIjEzNGIwNDllNTE0MjBhMzM2MDQ5YWFjMjFjODhhNzVhIgorU1JDX1VSSVttYW5wYWdlcy5zaGEyNTZzdW1dID0gIjc0NWU0ZTc5N2ZlNTA2MWU3ODFjODgwZDM3MGIxYmViNDgwMTk5MTI3ZGE1YWNhZjRlMzc2ZTBiMDlkNGQ2ODUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5NDExNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaApAQCAtMCwwICsxLDE3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1BhdGNoIGNvdXJ0ZXN5IGdlbnRvby1wb3J0YWdlL3N5cy1kZXZlbC9nbnVjb25maWcvZmlsZXMvYXV0b21ha2UtMS44LjUtY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaC4KKwordXBkYXRlZCB0byAyMDA1MDUxNiBieSBNYXJjaW4gJ0hydycgSnVzemtpZXdpY3ogKGJ5IGhhbmQpCit1cGRhdGVkIHRvIDIwMDgwMTIzIGJ5IE5pdGluIEEgS2FtYmxlIChieSBoYW5kKQordXBkYXRlZCB0byAyMDExMTAwMSBieSBTYXVsIFdvbGQgKGJ5IGhhbmQpCit1cGRhdGVkIHRvIDIwMTIwODE4IGJ5IE1hcmNpbiAnSHJ3JyBKdXN6a2lld2ljeiAoYnkgaGFuZCkKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW4uanVzemtpZXdpY3pAbGluYXJvLm9yZz4KKworLS0tCisgY29uZmlnLmd1ZXNzIHwgICA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKKworLS0tIGdpdC5vcmlnL2NvbmZpZy5ndWVzcworKysrIGdpdC9jb25maWcuZ3Vlc3MKK0BAIC0xMzgsNiArMTM4LDE5IEBAIFVOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHwKKyBVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorIFVOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorIAorKyMgRGV0ZWN0IHVjbGliYyBzeXN0ZW1zLgorKworK0xJQkM9ImdudSIKKytpZiBbIC1mIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaCBdCisrdGhlbgorKwlMSUJDPXVjbGliYworKwlpZiBbIC1uIGBncmVwICIjZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18iIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaGAgXQorKwl0aGVuCisrCQlVQ0xJQkNfU1VCVkVSPWBzZWQgLW4gIi8jZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18gL3MvLy9wIiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmhgCisrCQlMSUJDPSRMSUJDJFVDTElCQ19TVUJWRVIKKysJZmkKKytmaQorKworICMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKyAKKyBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCitAQCAtODg2LDE1ICs4OTksMTUgQEAgRU9GCisgCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgCWVzYWMKKyAJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCistCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKysJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGFybSo6TGludXg6KjoqKQorIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisgCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKyAJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKyAJdGhlbgorLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWVsc2UKKyAJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisgCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorQEAgLTkwNiwxOSArOTE5LDE5IEBAIEVPRgorIAlmaQorIAlleGl0IDs7CisgICAgIGF2cjMyKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgY3JpczpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgY3Jpc3YzMjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgZnJ2OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBoZXhhZ29uOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBpKjg2OkxpbnV4Oio6KikKKyAJTElCQz1nbnUKK0BAIC05MzIsMTMgKzk0NSwxMyBAQCBFT0YKKyAJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorIAlleGl0IDs7CisgICAgIGlhNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIG0zMnIqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtNjgqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisgCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKK0BAIC05NTcsNTQgKzk3MCw1NCBAQCBFT0YKKyAJI2VuZGlmCisgRU9GCisgCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKy0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKysJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9CisgCTs7CisgICAgIG9yMzI6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhZHJlOkxpbnV4Oio6KikKKy0JZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQorKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCistCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisrCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKyAJIyBMb29rIGZvciBDUFUgbGV2ZWwKKyAJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKy0JICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKKy0JICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKy0JICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKysJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisrCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OworKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKyAJZXNhYworIAlleGl0IDs7CisgICAgIHBwYzY0OkxpbnV4Oio6KikKKy0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgcHBjOkxpbnV4Oio6KikKKy0JZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisrCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKyAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAorIAlleGl0IDs7CisgICAgIHNoNjQqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzaCo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHRpbGUqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB2YXg6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB4ODZfNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHh0ZW5zYSo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisgCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4gYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ5MDhmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvZ251LWNvbmZpZ2l6ZS5pbgpAQCAtMCwwICsxLDI2NyBAQAorIyEgL3Vzci9iaW4vZW52IHBlcmwKKyMgLSotIHBlcmwgLSotCisKK2V2YWwgJ2Nhc2UgJCMgaW4gMCkgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCI7OyAqKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIiAiJEAiOzsgZXNhYycKKyAgICBpZiAwOworCisjIGdudS1jb25maWdpemUgLSBpbnN0YWxsIHRoZSBHTlUgY29uZmlnLmd1ZXNzIC8gY29uZmlnLnN1YiBpbiBhIGRpcmVjdG9yeSB0cmVlCisjIEJhc2VkIG9uIGF1dG9yZWNvbmY6CisjICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3LCBVU0EuCisKK0JFR0lOCit7CisgIG15ICRkYXRhZGlyID0gJEVOVnsnYXV0b200dGVfcGVybGxpYmRpcid9IHx8ICdAYXV0b200dGVfcGVybGxpYmRpckAnOworIyAgJy9ob21lL2tlcmdvdGgvY29kZS9idWlsZC1hcm0vdG1wL3N0YWdpbmcvc2hhcmUvYXV0b2NvbmYnOworICB1bnNoaWZ0IEBJTkMsICRkYXRhZGlyOworCisgICMgT3ZlcnJpZGUgU0hFTEwuICBPbiBESkdQUCBTSEVMTCBtYXkgbm90IGJlIHNldCB0byBhIHNoZWxsCisgICMgdGhhdCBjYW4gaGFuZGxlIHJlZGlyZWN0aW9uIGFuZCBxdW90ZSBhcmd1bWVudHMgY29ycmVjdGx5LAorICAjIGUuZy46IENPTU1BTkQuQ09NLiAgRm9yIERKR1BQIGFsd2F5cyB1c2UgdGhlIHNoZWxsIHRoYXQgY29uZmlndXJlCisgICMgaGFzIGRldGVjdGVkLgorICAkRU5WeydTSEVMTCd9ID0gJy9iaW4vc2gnIGlmICgkXk8gZXEgJ2RvcycpOworfQorCit1c2UgQXV0b200dGU6OkNoYW5uZWxEZWZzOwordXNlIEF1dG9tNHRlOjpDaGFubmVsczsKK3VzZSBBdXRvbTR0ZTo6Q29uZmlndXJlX2FjOwordXNlIEF1dG9tNHRlOjpGaWxlVXRpbHM7Cit1c2UgQXV0b200dGU6OkdlbmVyYWw7Cit1c2UgQXV0b200dGU6OlhGaWxlOworIyBEbyBub3QgdXNlIEN3ZDo6Y2hkaXIsIHNpbmNlIGl0IG1pZ2h0IGhhbmcuCit1c2UgQ3dkICdjd2QnOwordXNlIHN0cmljdDsKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIFZhcmlhYmxlcy4gICMjCisjIyAtLS0tLS0tLS0tLSAjIworCisjICRIRUxQCisjIC0tLS0tCiskaGVscCA9ICJVc2FnZTogJDAgW09QVElPTl0gLi4uIFtDT05GSUdVUkUtQUMgb3IgRElSRUNUT1JZXSAuLi4KKworSW5zdGFsbCB0aGUgR05VIGNvbmZpZy5zdWIgYW5kIGNvbmZpZy5ndWVzcyBzY3JpcHRzIGluIHRoZQorRElSRUNUT1JJRVMgb3IgdGhlIGRpcmVjdG9yeSB0cmVlcyBkcml2ZW4gYnkgQ09ORklHVVJFLUFDCisoZGVmYXVsdGluZyB0byBgLicpLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgIC1mLCAtLWZvcmNlICAgICAgICAgICAgICBjb25zaWRlciBhbGwgZmlsZXMgb2Jzb2xldGUKKyAgLXMsIC0tc3ltbGluayAgICAgICAgICAgIGluc3RhbGwgc3ltYm9saWMgbGlua3MgaW5zdGVhZCBvZiBjb3BpZXMKKyAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbc3ludGF4XQorCisiIC4gQXV0b200dGU6OkNoYW5uZWxEZWZzOjp1c2FnZSAuICIKKworVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxgV0FSTklOR1NcJyBpcyBob25vcmVkLiAgU29tZSBzdWJ0b29scyBtaWdodAorc3VwcG9ydCBvdGhlciB3YXJuaW5nIHR5cGVzLCB1c2luZyBcYGFsbCcgaXMgZW5jb3VyYWdlZC4KKyI7CisKKyMgJFZFUlNJT04KKyMgLS0tLS0tLS0KKyR2ZXJzaW9uID0gImdudS1jb25maWdpemUgMS4wCisKK0NvcHlyaWdodCAoQykgMjAwNCBDaHJpcyBMYXJzb24KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyI7CisKK215ICRjb25maWdkaXIgID0gJ0BnbnUtY29uZmlnZGlyQCc7CisjJy9ob21lL2tlcmdvdGgvY29kZS9idWlsZC1hcm0vdG1wL3N0YWdpbmcvaTY4Ni1saW51eC9zaGFyZS9nbnUtY29uZmlnJzsKK215ICRhdXRvY29uZiAgID0gJEVOVnsnQVVUT0NPTkYnfSAgICAgfHwgJ2F1dG9jb25mJzsKKworIyB1c2Ugc3ltbGlua3MgaW5zdGVhZC4KK215ICRzeW1saW5rID0gMDsKKworbXkgJGNvbmZpZ3VyZV9hYzsKKworbXkgJHJtID0gInJtIC1mIjsKK215ICRsbl9zID0gImxuIC1zZiI7CitteSAkY3AgPSAiY3AgLWYiOworbXkgJG1rZGlyID0gIm1rZGlyIjsKK215ICRjaG1vZCA9ICJjaG1vZCI7CisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIFJvdXRpbmVzLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworCisjIHBhcnNlX2FyZ3MgKCkKKyMgLS0tLS0tLS0tLS0tLQorIyBQcm9jZXNzIGFueSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorc3ViIHBhcnNlX2FyZ3MgKCkKK3sKKyAgbXkgJHNyY2RpcjsKKworICBnZXRvcHQgKCdzfHN5bWxpbmsnICAgICAgICAgICAgPT4gXCRzeW1saW5rKTsKKworICAjIEV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY29uZmlndXJlLmFjLCB0cmltIHRvIGdldCB0aGUKKyAgIyBkaXJlY3RvcnksIGFuZCBsb29rIGZvciBjb25maWd1cmUuYWMgYWdhaW4uICBCZWNhdXNlIChpKSB0aGUgY29kZQorICAjIGlzIHNpbXBsZXIsIGFuZCAoaWkpIHdlIGFyZSBzdGlsbCBhYmxlIHRvIGRpYWdub3NlIHNpbXVsdGFuZW91cworICAjIHByZXNlbmNlIG9mIGNvbmZpZ3VyZS5hYyBhbmQgY29uZmlndXJlLmluLgorICBAQVJHViA9IG1hcCB7IC9jb25maWd1cmVcLihhY3xpbikkLyA/IGRpcm5hbWUgKCRfKSA6ICRfIH0gQEFSR1Y7CisgIHB1c2ggQEFSR1YsICcuJyB1bmxlc3MgQEFSR1Y7Cit9CisKKworIyAmZ251X2NvbmZpZ2l6ZV9jdXJyZW50X2RpcmVjdG9yeQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3RvcnkgKCkKK3sKKyAgbXkgJGNvbmZpZ3VyZV9hYyA9IHJlcXVpcmVfY29uZmlndXJlX2FjOworCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICMgSXMgaXQgdXNpbmcgQXV0b2NvbmY/ICAjCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgbXkgJHVzZXNfYXV0b2NvbmY7CisgIG15ICR1c2VzX2dldHRleHQ7CisgIG15ICRjb25maWd1cmVfYWNfZmlsZSA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgJGNvbmZpZ3VyZV9hYzsKKyAgd2hpbGUgKCRfID0gJGNvbmZpZ3VyZV9hY19maWxlLT5nZXRsaW5lKQorICAgICB7CisgICAgICAgcy8jLiovLzsKKyAgICAgICBzL2RubC4qLy87CisgICAgICAgJHVzZXNfYXV0b2NvbmYgPSAxIGlmIC9BQ19JTklULzsKKyAgICAgfQorCisgIGlmICghJHVzZXNfYXV0b2NvbmYpCisgICAgeworICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogbm90IHVzaW5nIEF1dG9jb25mIjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbXkgJGF1eF9kaXI7CisgIG15IEBzdWJkaXI7CisgIG15ICRjbWQ7CisgIG15ICRkZXN0OworCisgIHZlcmIgIiRjb25maWd1cmVfYWM6IHRyYWNpbmciOworICBteSAkdHJhY2VzID0gbmV3IEF1dG9tNHRlOjpYRmlsZQorICAgICgiJGF1dG9jb25mIgorICAgICAuIGpvaW4gKCcgLS10cmFjZT0nLCAnJywKKwkgICAgICMgSWYgeW91IGNoYW5nZSB0aGlzIGxpc3QsIHVwZGF0ZSB0aGUKKwkgICAgICMgYEF1dG9yZWNvbmYtcHJlc2VsZWN0aW9ucycgc2VjdGlvbiBvZiBhdXRvbTR0ZS5pbi4KKwkgICAgICdBQ19DT05GSUdfQVVYX0RJUjpBQ19DT05GSUdfQVVYX0RJUjpcJDEnLAorCSAgICAgJ0FDX0NPTkZJR19TVUJESVJTOkFDX0NPTkZJR19TVUJESVJTOlwkMScsCisJICAgICAnQUNfSU5JVCcsCisJICAgICkKKyAgICAgLiAnIHwnKTsKKyAgd2hpbGUgKCRfID0gJHRyYWNlcy0+Z2V0bGluZSkKKyAgICB7CisgICAgICAkYXV4X2RpciA9ICQxICAgICAgICAgICAgICAgICBpZiAvQUNfQ09ORklHX0FVWF9ESVI6KC4qKS87CisgICAgICAkdXNlc19hdXRvY29uZiA9IDEgICAgICAgICAgICBpZiAvQUNfSU5JVC87CisgICAgICBwdXNoIEBzdWJkaXIsIHNwbGl0ICgnICcsICQxKSBpZiAvQUNfQ09ORklHX1NVQkRJUlM6KC4qKS87CisgICAgfQorCisgICMgVGhlIHN1YmRpcnMgYXJlICpvcHRpb25hbCosIHRoZXkgbWF5IG5vdCBleGlzdC4KKyAgZm9yZWFjaCAoQHN1YmRpcikKKyAgICB7CisgICAgICBpZiAoLWQpCisJeworCSAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogc3ViZGlyZWN0b3J5ICRfIHRvIGdudS1jb25maWdpemUiOworCSAgZ251X2NvbmZpZ2l6ZSAoJF8pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB2ZXJiICIkY29uZmlndXJlX2FjOiBzdWJkaXJlY3RvcnkgJF8gbm90IHByZXNlbnQiOworCX0KKyAgICB9CisKKyAgJGRlc3QgPSAiLiI7CisKKyAgaWYgKGRlZmluZWQgJGF1eF9kaXIpCisgICAgeworICAgICAgJGRlc3QgPSAkYXV4X2RpcjsKKyAgICAgIGlmICghIC1kICRhdXhfZGlyKQorICAgICAgICB7CisgICAgICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogY3JlYXRpbmcgZGlyZWN0b3J5ICRhdXhfZGlyIjsKKyAgICAgICAgICBta2RpciAkYXV4X2RpcgorICAgICAgICAgICAgb3IgZXJyb3IgImNhbm5vdCBjcmVhdGUgJGF1eF9kaXI6ICQhIjsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoISRzeW1saW5rKQorICAgIHsKKyAgICAgICRjbWQgPSAkY3A7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJGNtZCA9ICRsbl9zOworICAgIH0KKworICB4c3lzdGVtICgiJGNtZCAkY29uZmlnZGlyL2NvbmZpZy5ndWVzcyAkZGVzdC8iKTsKKyAgeHN5c3RlbSAoIiRjaG1vZCB1K3ggJGRlc3QvY29uZmlnLmd1ZXNzIik7CisgIHhzeXN0ZW0gKCIkY21kICRjb25maWdkaXIvY29uZmlnLnN1YiAkZGVzdC8iKTsKKyAgeHN5c3RlbSAoIiRjaG1vZCB1K3ggJGRlc3QvY29uZmlnLnN1YiIpOworfQorCisKKyMgJmdudV9jb25maWdpemUgKCRESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWNvbmYgdGhlICRESVJFQ1RPUlkuCitzdWIgZ251X2NvbmZpZ2l6ZSAoJCkKK3sKKyAgbXkgKCRkaXJlY3RvcnkpID0gQF87CisgIG15ICRjd2QgPSBjd2Q7CisKKyAgIyBUaGUgZm9ybWF0IGZvciB0aGlzIG1lc3NhZ2UgaXMgbm90IGZyZWU6IHRha2VuIGZyb20gRW1hY3MsIGl0c2VsZgorICAjIHVzaW5nIEdOVSBNYWtlJ3MgZm9ybWF0LgorICB2ZXJiICJFbnRlcmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGRpcmVjdG9yeQorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGRpcmVjdG9yeTogJCEiOworCisgIGdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3Rvcnk7CisKKyAgIyBUaGUgZm9ybWF0IGlzIG5vdCBmcmVlOiB0YWtlbiBmcm9tIEVtYWNzLCBpdHNlbGYgdXNpbmcgR05VIE1ha2UncworICAjIGZvcm1hdC4KKyAgdmVyYiAiTGVhdmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGN3ZAorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGN3ZDogJCEiOworfQorCisKKyMjIC0tLS0tLSAjIworIyMgTWFpbi4gICMjCisjIyAtLS0tLS0gIyMKKworcGFyc2VfYXJnczsKKworIyBBdXRvcmVjb25mIGFsbCB0aGUgZ2l2ZW4gY29uZmlndXJlLmFjLiAgQSB3aGlsZSBsb29wLCBub3QgYSBmb3IsCisjIHNpbmNlIHRoZSBsaXN0IGNhbiBjaGFuZ2UgYXQgcnVudGltZSBiZWNhdXNlIG9mIEFDX0NPTkZJR19TVUJESVJTLgorZm9yIG15ICRkaXJlY3RvcnkgKEBBUkdWKQorICB7CisgICAgZ251X2NvbmZpZ2l6ZSAoJGRpcmVjdG9yeSk7CisgIH0KKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL211c2wtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQ3NDM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorc3VwcG9ydCBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdudS1jb25maWctMjAxMjA4MTQvY29uZmlnLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1jb25maWctMjAxMjA4MTQub3JpZy9jb25maWcuc3ViCTIwMTItMDktMTggMDI6Mjc6NDUuMDAwMDAwMDAwIC0wNzAwCisrKysgZ251LWNvbmZpZy0yMDEyMDgxNC9jb25maWcuc3ViCTIwMTQtMDMtMjYgMDA6MzQ6MTkuOTU1OTk2NzA5IC0wNzAwCitAQCAtMTIzLDYgKzEyMyw3IEBACisgbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCisgY2FzZSAkbWF5YmVfb3MgaW4KKyAgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgXAorKyAgbGludXgtbXVzbCogfCBcCisgICBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorQEAgLTEzNjUsNiArMTM2Niw3IEBACisgCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKyAJICAgICAgfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisgCSAgICAgIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisrCSAgICAgIHwgLWxpbnV4LW11c2wqIFwKKyAJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorIAkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy91Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZTEwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uZmlnLnN1Yi5vcmlnCTIwMDQtMDUtMTQgMTk6Mzg6MzYuMDAwMDAwMDAwIC0wNTAwCisrKysgY29uZmlnLnN1YgkyMDA0LTA1LTE0IDE5OjM5OjE3LjAwMDAwMDAwMCAtMDUwMAorQEAgLTExOCw3ICsxMTgsNyBAQAorICMgSGVyZSB3ZSBtdXN0IHJlY29nbml6ZSBhbGwgdGhlIHZhbGlkIEtFUk5FTC1PUyBjb21iaW5hdGlvbnMuCisgbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCisgY2FzZSAkbWF5YmVfb3MgaW4KKy0gIG50by1xbngqIHwgbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtdWNsaWJjKiB8IGZyZWVic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgIG9zPS0kbWF5YmVfb3MKKyAgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICAgOzsKK0BAIC0xMTM1LDcgKzExMzUsOCBAQAorIAkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKyAJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorIAkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCistCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LXVjbGliYyogXAorKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisgCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisgCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorIAkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfMjAxMjA4MTQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViN2U0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiZ251LWNvbmZpZ2l6ZSIKK0RFU0NSSVBUSU9OID0gIlRvb2wgdGhhdCBpbnN0YWxscyB0aGUgR05VIGNvbmZpZy5ndWVzcyAvIGNvbmZpZy5zdWIgaW50byBhIGRpcmVjdG9yeSB0cmVlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jb25maWcuZ3Vlc3M7ZW5kbGluZT0zOTttZDU9Yjc5YTQ2NjM0NzVmNGQ3MjQ4NDY0NjMyNzc4MTdlMGQiCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvZ251LWNvbmZpZy9nbnUtY29uZmlnLSR7UFZ9LnRhci5iejIgXAorCSAgIGZpbGU6Ly9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoIFwKKwkgICBmaWxlOi8vbXVzbC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudS1jb25maWdpemUuaW4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiY2ZjYTVhMmJiMzllZGFkNGFhZTVhNjVlZmM4NDA5NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NGY5OWE4ZTc2ZjNlOGU0ZmVjMGJiNWFkNDc2MmY4ZTQ0MzY2MTY4NTU0Y2U2NmNiODVhZmJlMmVkM2VmZDhiIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnIFwKKwkJICAgJHtEfSR7YmluZGlyfQorCWNhdCAke1dPUktESVJ9L2dudS1jb25maWdpemUuaW4gfCBcCisJCXNlZCAtZSAncyxAZ251LWNvbmZpZ2RpckAsJHtkYXRhZGlyfS9nbnUtY29uZmlnLGcnIFwKKwkJICAgIC1lICdzLEBhdXRvbTR0ZV9wZXJsbGliZGlyQCwke2RhdGFkaXJ9L2F1dG9jb25mLGcnID4gJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJIyBJbiB0aGUgbmF0aXZlIGNhc2Ugd2Ugd2FudCB0aGUgc3lzdGVtIHBlcmwgYXMgcGVybC1uYXRpdmUgY2FuJ3QgaGF2ZSBidWlsdCB5ZXQKKwlpZiBbICIke1BOfSIgIT0gImdudS1jb25maWctbmF0aXZlIiAtYSAiJHtQTn0iICE9ICJuYXRpdmVzZGstZ251LWNvbmZpZyIgXTsgdGhlbgorCQlzZWQgLWkgLWUgJ3MsL3Vzci9iaW4vZW52LCR7YmluZGlyfS9lbnYsZycgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJZmkKKwljaG1vZCA3NTUgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJaW5zdGFsbCAtbSAwNjQ0IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViICR7RH0ke2RhdGFkaXJ9L2dudS1jb25maWcvCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vZ251LWNvbmZpZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDVmMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJnbnUtY29uZmlnaXplIgorREVTQ1JJUFRJT04gPSAiVG9vbCB0aGF0IGluc3RhbGxzIHRoZSBHTlUgY29uZmlnLmd1ZXNzIC8gY29uZmlnLnN1YiBpbnRvIGEgZGlyZWN0b3J5IHRyZWUiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29uZmlnLmd1ZXNzO2JlZ2lubGluZT03O2VuZGxpbmU9Mjc7bWQ1PTliYWM4YjE3NDNjMjI0MGFlMDdjY2U2ZTU0NmFjMmYyIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitTUkNSRVYgPSAiYjU3NmZhODdjMTQwYjgyNDQ2NmVmMTYzOGU5NDVlODdkYzVjMDM0MyIKK1BWID0gIjIwMTUwNzI4K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5zdi5nbnUub3JnL2NvbmZpZy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZ251LWNvbmZpZ2l6ZS5pbiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZyBcCisJCSAgICR7RH0ke2JpbmRpcn0KKwljYXQgJHtXT1JLRElSfS9nbnUtY29uZmlnaXplLmluIHwgXAorCQlzZWQgLWUgJ3MsQGdudS1jb25maWdkaXJALCR7ZGF0YWRpcn0vZ251LWNvbmZpZyxnJyBcCisJCSAgICAtZSAncyxAYXV0b200dGVfcGVybGxpYmRpckAsJHtkYXRhZGlyfS9hdXRvY29uZixnJyA+ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCSMgSW4gdGhlIG5hdGl2ZSBjYXNlIHdlIHdhbnQgdGhlIHN5c3RlbSBwZXJsIGFzIHBlcmwtbmF0aXZlIGNhbid0IGhhdmUgYnVpbHQgeWV0CisJaWYgWyAiJHtQTn0iICE9ICJnbnUtY29uZmlnLW5hdGl2ZSIgLWEgIiR7UE59IiAhPSAibmF0aXZlc2RrLWdudS1jb25maWciIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzLC91c3IvYmluL2Vudiwke2JpbmRpcn0vZW52LGcnICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWZpCisJY2htb2QgNzU1ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWluc3RhbGwgLW0gMDY0NCBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnLworfQorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L2dudS1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc4OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9hYXJjaDY0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2d1aWxlOiBhZGQgYWFyY2g2NCByZWNvZ25pdGlvbgorCitBc3N1bWUgbGl0dGxlLWVuZGlhbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbQorCistLS0gYS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQorKysrIGIvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KK0BAIC03MCw2ICs3MCw4IEBACisgICAgICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAic3BhcmM2NCIgInBvd2VycGMiICJwb3dlcnBjNjQiICJzcHUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiICJtaXBzNjQiKSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFhcmNoNjQiIGNwdSkKKysgICAgICAgICAgICAgKGVuZGlhbm5lc3MgbGl0dGxlKSkKKyAgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWIiIGNwdSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKyAgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qIiBjcHUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0MzI4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fZW5kaWFubmVzcy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTdXBwb3J0IGZvcm0gQVJNIGVuZGlhbm5lc3MKKworRml4ZXMgWW9jdG8gYnVnIyAyNzI5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3VpbGUtMi4wLjUvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuNS5vcmlnL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCTIwMTItMDEtMjQgMDM6MDY6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgZ3VpbGUtMi4wLjUvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20JMjAxMi0wNy0xMiAxMzowNTo0NC4zNzIzNjQxMDMgLTA3MDAKK0BAIC03MCw3ICs3MCw5IEBACisgICAgICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAic3BhcmM2NCIgInBvd2VycGMiICJwb3dlcnBjNjQiICJzcHUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiICJtaXBzNjQiKSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKy0gICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWwiIGNwdSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWIiIGNwdSkKKysgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qIiBjcHUpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGxpdHRsZSkpCisgICAgICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgICAgKGVycm9yICJ1bmtub3duIENQVSBlbmRpYW5uZXNzIiBjcHUpKSkpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIzOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0Zyb20gZTUyYmZjZGJhY2E1ZGNlNDk4Njc4ZDhmNTEyMzgxZTNlMzlhNDA2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+CitEYXRlOiBTdW4sIDE4IE1hciAyMDEyIDExOjQwOjU1IC0wNTAwCitTdWJqZWN0OiBNYXJrICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIgZ2MgdGVzdCBhcyB1bnJlc29sdmVkLgorCitBcyBwZXIgZGlzY3Vzc2lvbiB3aXRoIHVwc3RyZWFtLCBtYXJrIHRoaXMgdGVzdCBhcyB1bnJlc29sdmVkIHNpbmNlIGl0CittYXkgcHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3IvdGltaW5nIG9mIHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCistLS0KKyB0ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgfCAgIDExICsrKysrKy0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKK2luZGV4IGE5Njk3NTIuLjhjOGUxM2UgMTAwNjQ0CistLS0gYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKKysrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAorQEAgLTg0LDExICs4NCwxMyBAQAorICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgorIAorICAgICAgIChtYXliZS1nYy1mbGFraW5lc3MKKy0gICAgICAgKD0gKGxldCBscCAoKGkgMCkpCistICAgICAgICAgICAgKGlmIChndWFyZCkKKy0gICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKy0gICAgICAgICAgICAgICAgaSkpCistICAgICAgICAgIHRvdGFsKSkpKQorKyAgICAgICAob3IgKD0gKGxldCBscCAoKGkgMCkpCisrICAgICAgICAgICAgICAgIChpZiAoZ3VhcmQpCisrICAgICAgICAgICAgICAgICAgICAobHAgKDErIGkpKQorKyAgICAgICAgICAgICAgICAgICAgaSkpCisrICAgICAgICAgICAgICB0b3RhbCkKKysgICAgICAgICAgICh0aHJvdyAndW5yZXNvbHZlZCkpKSkpCisrCisgCisgICAocGFzcy1pZiAiTGV4aWNhbCB2YXJzIGFyZSBjb2xsZWN0YWJsZSIKKyAgICAgKGxldCAoKGwgKGNvbXBpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZTNiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitGcm9tIDg0ODU0MzA5MWQ1NWRkZGI1NGE4NTYxMjE1NTk2NDUwNmQ3MTI4NTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPgorRGF0ZTogU3VuLCAxOCBNYXIgMjAxMiAxMzoyODoyNCAtMDUwMAorU3ViamVjdDogTWFyayAibXV0ZXggd2l0aCBvd25lciBub3QgcmV0YWluZWQiIHRocmVhZHMgdGVzdCBhcyB1bnJlc29sdmVkLgorCitBcyBwZXIgZGlzY3Vzc2lvbiB3aXRoIHVwc3RyZWFtLCBtYXJrIHRoaXMgdGVzdCBhcyB1bnJlc29sdmVkIHNpbmNlIGl0CittYXkgcHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3IvdGltaW5nIG9mIHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCistLS0KKyB0ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdCB8ICAgIDYgKysrKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdCBiL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CitpbmRleCA4NWE3YzM4Li41MDg5OWNiIDEwMDY0NAorLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QKKysrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CitAQCAtNDE0LDggKzQxNCwxMCBAQAorIAorICAgICAgICAgICAgIChnYykgKGdjKQorICAgICAgICAgICAgIChsZXQgKChtIChnKSkpCistICAgICAgICAgICAgICAoYW5kIChtdXRleD8gbSkKKy0gICAgICAgICAgICAgICAgICAgKGVxPyAobXV0ZXgtb3duZXIgbSkgKGN1cnJlbnQtdGhyZWFkKSkpKSkpKQorKyAgICAgICAgICAgICAgKG9yCisrICAgICAgICAgICAgICAgKGFuZCAobXV0ZXg/IG0pCisrICAgICAgICAgICAgICAgICAgICAoZXE/IChtdXRleC1vd25lciBtKSAoY3VycmVudC10aHJlYWQpKSkKKysgICAgICAgICAgICAgICAodGhyb3cgJ3VucmVzb2x2ZWQpKSkpKSkKKyAKKyAgICAgICA7OworICAgICAgIDs7IG11dGV4IGxvY2sgbGV2ZWxzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGMyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBmaXhlcyBzZWQgaXNzdWUgd2hlbiBwcmVmaXggaGFzIC8gaW4gaXQsIGxpa2UgL3Vzci9sb2NhbAorCithdXRvcmVjb25mIGVycm9yIGF2b2lkZWQ6Cit8IHNlZDogLWUgZXhwcmVzc2lvbiAjMSwgY2hhciA5OiB1bmtub3duIG9wdGlvbiB0byBgcycKK3wgY29uZmlndXJlLmFjOjM5OiBlcnJvcjogQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHMKKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDEKKworSW5kZXg6IGd1aWxlLTIuMC41L2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuNS5vcmlnL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKysrKyBndWlsZS0yLjAuNS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCitAQCAtMTg3LDcgKzE4Nyw3IEBAIGVsc2UKKyAgICAgdj1VTktOT1dOCisgZmkKKyAKKy12PWBlY2hvICIkdiIgfHNlZCAicy9eJHByZWZpeC8vImAKKyt2PWBlY2hvICIkdiIgfHNlZCAicyNeJHByZWZpeCMjImAKKyAKKyAjIFRlc3Qgd2hldGhlciB0byBhcHBlbmQgdGhlICItZGlydHkiIHN1ZmZpeCBvbmx5IGlmIHRoZSB2ZXJzaW9uCisgIyBzdHJpbmcgd2UncmUgdXNpbmcgY2FtZSBmcm9tIGdpdC4gIEkuZS4sIHNraXAgdGhlIHRlc3QgaWYgaXQncyAiVU5LTk9XTiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwYjlkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gOWM0ZTEyMGE3YTg3ZGIzNGQyMmE1MDg4M2E1YTUyNTE3MGI0ODBkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA2IEphbiAyMDE1IDIzOjEwOjUxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmd1aWxlL01ha2VmaWxlLmFtOiBpbnN0YWxsLWRhdGEtaG9vayAtPiBpbnN0YWxsLWV4ZWMtaG9vaworCitJdCBtYXkgaW5zdGFsbCBzdWNoIGEgZmlsZToKKy91c3IvbGliNjQvbGliZ3VpbGUtMi4wKi1nZGIuc2NtCisKK1RoaXMgaXMgYmVjYXVzZSB3aGVuIHRoZXJlIGlzIG5vIGZpbGUgaW4gdGhlIGRpcmVjdG9yeToKK2ZvciBmIGluIGxpYmd1aWxlLTIuMCo7IGRvCisgICAgW3NuaXBdCitkb25lCisKK1RoZSBmIHdvdWxkIGJlIGxpYmd1aWxlLTIuMCogaXRzZWxmLCB1c2UgaW5zdGFsbC1leGVjLWhvb2sgd2lsbCBmaXggdGhlCitwcm9ibGVtIHNpbmNlIGl0IGRlcGVuZHMgb24gaW5zdGFsbC1saWJMVExJQlJBUklFUy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvTWFrZWZpbGUuYW0gfCAgICA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS9NYWtlZmlsZS5hbSBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCitpbmRleCA1ZGVjZDk5Li41MjY0NWI3IDEwMDY0NAorLS0tIGEvbGliZ3VpbGUvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCitAQCAtNDQ2LDEwICs0NDYsOCBAQCBFWFRSQV9saWJndWlsZV9AR1VJTEVfRUZGRUNUSVZFX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBfc2NtLmgJCVwKKyAjIyBkZWxldGUgZ3VpbGUtc25hcmYuYXdrIGZyb20gdGhlIGluc3RhbGxhdGlvbiBiaW5kaXIsIGluIGNhc2UgaXQncworICMjIGxpbmdlcmluZyB0aGVyZSBkdWUgdG8gYW4gZWFybGllciBndWlsZSB2ZXJzaW9uIG5vdCBoYXZpbmcgYmVlbgorICMjIHdpcGVkIG91dC4KKy1pbnN0YWxsLWV4ZWMtaG9vazoKKytpbnN0YWxsLWV4ZWMtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KKyAJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS9ndWlsZS1zbmFyZi5hd2sKKy0KKy1pbnN0YWxsLWRhdGEtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KKyAJQCQoTUtESVJfUCkgJChERVNURElSKSQobGliZGlyKQorICMjIFdlIHdhbnQgdG8gaW5zdGFsbCBsaWJndWlsZS0yLjAtZ2RiLnNjbSBhcyBTT01FVEhJTkctZ2RiLnNjbS4KKyAjIyBTT01FVEhJTkcgaXMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZmluYWwgbGlicmFyeS4gIFdlIHdhbnQgdG8gaWdub3JlCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDA1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSBhODVjNzhlYTEzOTM5ODVmZGI2ZTY2NzhkZWExOTEzNWM1NTNkMzQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+CitEYXRlOiBGcmksIDE5IFNlcCAyMDE0IDIxOjE4OjA5IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIFZNOiBBU01fTVVMIGZvciBBUk06IEFkZCBlYXJseWNsb2JiZXIgY29uc3RyYWludCB0byB0aGUgU01VTEwKKyBvdXRwdXRzLgorCitSZXBvcnRlZCBieSBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPi4KKworKiBsaWJndWlsZS92bS1pLXNjaGVtZS5jIChBU01fTVVMKVtBUk1dOiBBZGQgZWFybHljbG9iYmVyICgmKSBjb25zdHJhaW50CisgIHRvIHRoZSBTTVVMTCBvdXRwdXQgcmVnaXN0ZXJzLgorCitBdXRob3I6IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJndWlsZS92bS1pLXNjaGVtZS5jIHwgNSArKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS92bS1pLXNjaGVtZS5jIGIvbGliZ3VpbGUvdm0taS1zY2hlbWUuYworaW5kZXggNTg3YWE5NS4uMTYyZWZhYiAxMDA2NDQKKy0tLSBhL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKKysrKyBiL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKK0BAIC0xLDUgKzEsNCBAQAorLS8qIENvcHlyaWdodCAoQykgMjAwMSwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywKKy0gKiAgIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICogCisgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorQEAgLTM2Myw3ICszNjIsNyBAQCBWTV9ERUZJTkVfRlVOQ1RJT04gKDE0OSwgZ2UsICJnZT8iLCAyKQorICAgICAgIHsJCQkJCQkJCQlcCisgCXNjbV90X3NpZ25lZF9iaXRzIHJsbywgcmhpOwkJCQkJXAorIAlhc20gKCJzbXVsbCAlMCwgJTEsICUyLCAlM1xuIgkJCQkJXAorLQkgICAgIDogIj1yIiAocmxvKSwgIj1yIiAocmhpKQkJCQkJXAorKwkgICAgIDogIj0mciIgKHJsbyksICI9JnIiIChyaGkpCQkJCQlcCisgCSAgICAgOiAiciIgKFNDTV9VTlBBQ0sgKHgpIC0gc2NtX3RjMl9pbnQpLAkJCVwKKyAJICAgICAgICJyIiAoU0NNX0lfSU5VTSAoeSkpKTsJCQkJCVwKKyAJaWYgKFNDTV9MSUtFTFkgKFNDTV9TUlMgKHJsbywgMzEpID09IHJoaSkpCQkJXAorLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlMzEyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5zdXNlIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogZ3VpbGUtMi4wLjMvbGliZ3VpbGUvaGFzaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjMub3JpZy9saWJndWlsZS9oYXNoLmMJMjAxMS0wNy0wNiAxNTo0OTo1OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy9saWJndWlsZS9oYXNoLmMJMjAxMi0wMS0xMyAyMTo0OTo0My4zMzI4NDQ4ODQgLTA4MDAKK0BAIC0yNzAsNyArMjcwLDcgQEAgc2NtX2hhc2hlcihTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4sIHNpegorIHVuc2lnbmVkIGxvbmcKKyBzY21faWhhc2hxIChTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4pCisgeworLSAgcmV0dXJuIChTQ01fVU5QQUNLIChvYmopID4+IDEpICUgbjsKKysgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgPj4gMSkgJSBuOworIH0KKyAKKyAKK0BAIC0zMDYsNyArMzA2LDcgQEAgc2NtX2loYXNodiAoU0NNIG9iaiwgdW5zaWduZWQgbG9uZyBuKQorICAgaWYgKFNDTV9OVU1QKG9iaikpCisgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgc2NtX2hhc2hlcihvYmosIG4sIDEwKTsKKyAgIGVsc2UKKy0gICAgcmV0dXJuIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworIH0KKyAKKyAKK0luZGV4OiBndWlsZS0yLjAuMy9saWJndWlsZS9zdHJ1Y3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC4zLm9yaWcvbGliZ3VpbGUvc3RydWN0LmMJMjAxMS0wNy0wNiAxNTo1MDowMC4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy9saWJndWlsZS9zdHJ1Y3QuYwkyMDEyLTAxLTEzIDIxOjQ5OjQzLjMzMjg0NDg4NCAtMDgwMAorQEAgLTk0Miw3ICs5NDIsNyBAQCBzY21fc3RydWN0X2loYXNocSAoU0NNIG9iaiwgdW5zaWduZWQgbG9uCisgeworICAgLyogVGhlIGxlbmd0aCBvZiB0aGUgaGFzaCB0YWJsZSBzaG91bGQgYmUgYSByZWxhdGl2ZSBwcmltZSBpdCdzIG5vdAorICAgICAgbmVjZXNzYXJ5IHRvIHNoaWZ0IGRvd24gdGhlIGFkZHJlc3MuICAqLworLSAgcmV0dXJuIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSBTQ01fVU5QQUNLIChvYmopICUgbjsKKyB9CisgCisgU0NNX0RFRklORSAoc2NtX3N0cnVjdF92dGFibGVfbmFtZSwgInN0cnVjdC12dGFibGUtbmFtZSIsIDEsIDAsIDAsIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjAxNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuc3VzZSBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworU2VlIGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTEwMDk2Cit3aHkgdGhpcyB0ZXN0IGlzIHR1cm5lZCBvZmYuCitJbmRleDogZ3VpbGUtMi4wLjMvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjMub3JpZy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMS0xMC0xNSAwOTozNDo0MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMi0wMS0xMyAyMTo1MjoxMC4yODI1NDAzNTUgLTA4MDAKK0BAIC02NSwyMyArNjUsMjMgQEAKKyAgICAgICBmb28pKSkKKyAKKyAKKy0od2l0aC10ZXN0LXByZWZpeCAiZ2MiCistICAocGFzcy1pZiAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiCistICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQorLSAgICAgICAgICAgKHRvdGFsIDEwMDApKQorLQorLSAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKKys7Oyh3aXRoLXRlc3QtcHJlZml4ICJnYyIKKys7OyAgKHBhc3MtaWYgIlVudXNlZCBtb2R1bGVzIGFyZSByZW1vdmVkIgorKzs7ICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQorKzs7ICAgICAgICAgICAodG90YWwgMTAwMCkpCisrOzsKKys7OyAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKKyAKKyAgICAgICA7OyBBdm9pZCBmYWxzZSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGVzIG9uIHRoZSBzdGFjay4KKy0gICAgICAoc3RhY2stY2xlYW51cCAyMCkKKys7OyAgICAgIChzdGFjay1jbGVhbnVwIDIwKQorIAorLSAgICAgIChnYykKKy0gICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KKy0gICAgICAoZ2MpIDs7IHRocmljZTogYmVjYXVzZSB0aGUgdGVzdCBkb2Vzbid0IHN1Y2NlZWQgd2l0aCBvbmx5CisrOzsgICAgICAoZ2MpCisrOzsgICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KKys7OyAgICAgIChnYykgOzsgdGhyaWNlOiBiZWNhdXNlIHRoZSB0ZXN0IGRvZXNuJ3Qgc3VjY2VlZCB3aXRoIG9ubHkKKyAgICAgICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgorIAorLSAgICAgICg9IChsZXQgbHAgKChpIDApKQorLSAgICAgICAgICAgKGlmIChndWFyZCkKKy0gICAgICAgICAgICAgICAobHAgKDErIGkpKQorLSAgICAgICAgICAgICAgIGkpKQorLSAgICAgICAgIHRvdGFsKSkpKQorKzs7ICAgICAgKD0gKGxldCBscCAoKGkgMCkpCisrOzsgICAgICAgICAgIChpZiAoZ3VhcmQpCisrOzsgICAgICAgICAgICAgICAobHAgKDErIGkpKQorKzs7ICAgICAgICAgICAgICAgaSkpCisrOzsgICAgICAgICB0b3RhbCkpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzM0ODM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK2xpYmd1aWxlL3ZtLWktc3lzdGVtLmM6IHdvcmthcm91bmQgaWNlIHNzYSBjb3JydXB0aW9uIHdoaWxlIGNvbXBpbGluZyB3aXRoIG9wdGlvbiAtZyAtTworCitXaGlsZSBjb21waWxpbmcgd2l0aCBvcHRpb24gLWcgLU8sIHRoZXJlIHdhcyBhIHNzYSBjb3JydXB0aW9uOgorLi4KK1VuYWJsZSB0byBjb2FsZXNjZSBzc2FfbmFtZXMgNDggYW5kIDM0NzYgd2hpY2ggYXJlIG1hcmtlZCBhcyBNVVNUIENPQUxFU0NFLgorc3BfNDgoYWIpIGFuZCAgc3BfMzQ3NihhYikKK2d1aWxlLTIuMC4xMS9saWJndWlsZS92bS1lbmdpbmUuYzogSW4gZnVuY3Rpb24gJ3ZtX2RlYnVnX2VuZ2luZSc6CitndWlsZS0yLjAuMTEvbGliZ3VpbGUvdm0uYzo2NzM6MTk6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBTU0EgY29ycnVwdGlvbgorICNkZWZpbmUgVk1fTkFNRSAgIHZtX2RlYnVnX2VuZ2luZQorICAgICAgICAgICAgICAgICAgIF4KK2d1aWxlLTIuMC4xMS9saWJndWlsZS92bS1lbmdpbmUuYzozOToxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8gJ1ZNX05BTUUnCisgVk1fTkFNRSAoU0NNIHZtLCBTQ00gcHJvZ3JhbSwgU0NNICphcmd2LCBpbnQgbmFyZ3MpCisgXgorUGxlYXNlIHN1Ym1pdCBhIGZ1bGwgYnVnIHJlcG9ydCwKK3dpdGggcHJlcHJvY2Vzc2VkIHNvdXJjZSBpZiBhcHByb3ByaWF0ZS4KK1NlZSA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4gZm9yIGluc3RydWN0aW9ucy4KKy4uLgorCitUd2VhayBsaWJndWlsZS92bS1pLXN5c3RlbS5jIHRvIGFkZCBib3VuZGFyeSB2YWx1ZSBjaGVjayB0byB3b3JrYXJvdW5kIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvdm0taS1zeXN0ZW0uYyB8IDIwICsrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS92bS1pLXN5c3RlbS5jIGIvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworLS0tIGEvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworKysrIGIvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworQEAgLTYyNSwxMCArNjI1LDIyIEBAIFZNX0RFRklORV9JTlNUUlVDVElPTiAoNDcsIGJpbmRfb3B0aW9uYWxzX3NodWZmbGUsICJiaW5kLW9wdGlvbmFscy9zaHVmZmxlIiwgNiwKKyAgIC8qIG5vdyBzaHVmZmxlIHVwLCBmcm9tIHdhbGsgdG8gbnRvdGFsICovCisgICB7CisgICAgIHNjbV90X3B0cmRpZmYgbnNodWYgPSBzcCAtIHdhbGsgKyAxLCBpOworLSAgICBzcCA9IChmcCAtIDEpICsgbnRvdGFsICsgbnNodWY7CistICAgIENIRUNLX09WRVJGTE9XICgpOworLSAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKy0gICAgICBzcFstaV0gPSB3YWxrW25zaHVmLWktMV07CisrICAgIC8qIGNoZWNrIHRoZSB2YWx1ZSBvZiBuc2h1ZiB0byB3b3JrYXJvdW5kIGljZSBzc2EgY29ycnVwdGlvbiAqLworKyAgICAvKiB3aGlsZSBjb21waWxpbmcgd2l0aCAtTyAtZyAqLworKyAgICBpZiAobnNodWYgPiAwKQorKyAgICB7CisrICAgICAgc3AgPSAoZnAgLSAxKSArIG50b3RhbCArIG5zaHVmOworKyAgICAgIENIRUNLX09WRVJGTE9XICgpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2h1ZjsgaSsrKQorKyAgICAgICAgc3BbLWldID0gd2Fsa1tuc2h1Zi1pLTFdOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgIHNwID0gKGZwIC0gMSkgKyBudG90YWwgKyBuc2h1ZjsKKysgICAgICBDSEVDS19PVkVSRkxPVyAoKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKysgICAgICAgIHNwWy1pXSA9IHdhbGtbbnNodWYtaS0xXTsKKysgICAgfQorICAgfQorICAgLyogYW5kIGZpbGwgb3B0aW9uYWxzICYga2V5d29yZCBhcmdzIHdpdGggU0NNX1VOREVGSU5FRCAqLworICAgd2hpbGUgKHdhbGsgPD0gKGZwIC0gMSkgKyBudG90YWwpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Njk2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCkBAIC0wLDAgKzEsMTExIEBACitTVU1NQVJZID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyIKK0RFU0NSSVBUSU9OID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyxcCisgdGhlIG9mZmljaWFsIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLlwKKyBHdWlsZSBpcyBhIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBwcm9ncmFtbWVycyBjcmVhdGUgZmxleGlibGUgYXBwbGljYXRpb25zLlwKKyBVc2luZyBHdWlsZSBpbiBhbiBhcHBsaWNhdGlvbiBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZnVuY3Rpb25hbGl0eSB0byBiZVwKKyBleHRlbmRlZCBieSB1c2VycyBvciBvdGhlciBwcm9ncmFtbWVycyB3aXRoIHBsdWctaW5zLCBtb2R1bGVzLCBvciBzY3JpcHRzLlwKKyBHdWlsZSBwcm92aWRlcyB3aGF0IG1pZ2h0IGJlIGRlc2NyaWJlZCBhcyAncHJhY3RpY2FsIHNvZnR3YXJlIGZyZWVkb20sJ1wKKyBtYWtpbmcgaXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIGN1c3RvbWl6ZSBhbiBhcHBsaWNhdGlvbiB0byBtZWV0IHRoZWlyXAorIG5lZWRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIHRoZSBhcHBsaWNhdGlvbidzIGludGVybmFscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWlsZS8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3VpbGUvZ3VpbGUtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9lbmRpYW5uZXNzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2ggXAorICAgICAgICAgICAiCisKKyMgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMS1DaGFuZ2UtZ3VpbGUtdG8tZ3VpbGUtWC5ZLWZvci1pbmZvLXBhZ2VzLnBhdGNoCisjICAgICAgICAgICBmaWxlOi8vb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaAorCitTUkNfVVJJW21kNXN1bV0gPSAiMDNmMWJjZTFhNDk4MzA3NmQ5NTUwMDM0NzIzMDZhMTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWVkMGE0YTZkYjRlMzEwY2JkZmViMzYxM2ZhNmY4NmZkZGM5MWVmNjI0YzFlM2Y4OTM3YTYzMDRjNjkxMDNlMiIKKworCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB0ZXhpbmZvCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworREVQRU5EUyA9ICJsaWJ1bmlzdHJpbmcgYmR3Z2MgZ21wIGxpYnRvb2wgbGliZmZpIG5jdXJzZXMgcmVhZGxpbmUiCisjIGFkZCBndWlsZS1uYXRpdmUgb25seSB0byB0aGUgdGFyZ2V0IHJlY2lwZSdzIERFUEVORFMKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZ3VpbGUtbmF0aXZlIGxpYmF0b21pYy1vcHMiCisKK1JERVBFTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjX2NsYXNzLXRhcmdldCA9ICJnbGliYy1nY29udi1pc284ODU5LTEiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLXdpdGhvdXQtbGlibHRkbC1wcmVmaXggLS13aXRob3V0LWxpYmdtcC1wcmVmaXggLS13aXRob3V0LWxpYnJlYWRsaW5lLXByZWZpeCcsICcnXVtiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLGQpXX0iCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAtLXdpdGgtbGlidW5pc3RyaW5nLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmdtcC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJsdGRsLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJbWtkaXIgLXAgcG8KK30KKworZXhwb3J0IEdVSUxFX0ZPUl9CVUlMRD0iJHtCVUlMRF9TWVN9LWd1aWxlIgorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwkjIGp1c3QgZm9yIHRhcmdldCByZWNpcGUKKwlpZiBbICIke1BOfSIgPSAiZ3VpbGUiIF0KKwl0aGVuCisJCXNlZCAtaSAtZSBzOiR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczovJHtUQVJHRVRfU1lTfTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczotTC91c3IvbGliOjpnIFwKKyAgICAgICAgCSAgICAgICAtZSBzOi1pc3lzdGVtL3Vzci9pbmNsdWRlOjpnIFwKKwkgICAgICAgICAgICAgICAtZSBzOiwvdXNyL2xpYjosXCRce2xpYmRpclx9OmcgXAorCSAgICAgICAgICAgICAgICAgIG1ldGEvZ3VpbGUtMi4wLnBjCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gMDc1NSAgJHtEfSR7YmluZGlyfS9ndWlsZSAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndWlsZSBcCisJCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCisJCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUgXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTID0gImd1aWxlX2Nyb3NzX2NvbmZpZyIKKworZ3VpbGVfY3Jvc3NfY29uZmlnKCkgeworCSMgdGhpcyBpcyBvbmx5IGZvciB0YXJnZXQgcmVjaXBlCisJaWYgWyAiJHtQTn0iID0gImd1aWxlIiBdCisJdGhlbgorCSAgICAgICAgIyBDcmVhdGUgZ3VpbGUtY29uZmlnIHJldHVybmluZyB0YXJnZXQgdmFsdWVzIGluc3RlYWQgb2YgbmF0aXZlIHZhbHVlcworCSAgICAgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSX0NST1NTfQorICAgICAgICAJZWNobyAnIyEnYHdoaWNoICR7QlVJTERfU1lTfS1ndWlsZWAkJyBcXFxuLS1uby1hdXRvLWNvbXBpbGUgLWUgbWFpbiAtc1xuISNcbihkZWZpbmUgJWd1aWxlLWJ1aWxkLWluZm8gJ1wnXCggXAorCQkJPiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgc2VkIC1uIC1lICdzOl5bIFx0XSp7WyBcdF0qIjogICg6JyBcCisJCQktZSAnczoiLFsgXHRdKiI6IC4gIjonIFwKKwkJCS1lICdzOiIgKn0sICpcXDoiKTonIFwKKwkJCS1lICdzOl4uKmNhY2hlZGlyLiokOjonIFwKKwkJCS1lICcvXiAgKC9wJyBcCisJCQk8ICR7Qn0vbGliZ3VpbGUvbGlicGF0aC5oID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBlY2hvICcpKScgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGNhdCAke0J9L21ldGEvZ3VpbGUtY29uZmlnID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBpbnN0YWxsICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L2d1aWxlLWNvbmZpZworCWZpCit9CisKKyMgR3VpbGUgbmVlZHMgdGhlIGNvbXBpbGVkIGZpbGVzIHRvIGJlIG5ld2VyIHRoYW4gdGhlIHNvdXJjZSwgYW5kIGl0IHdvbid0CisjIGF1dG8tY29tcGlsZSBpbnRvIHRoZSBwcmVmaXggZXZlbiBpZiBpdCBjYW4gd3JpdGUgdGhlcmUsIHNvIHRvdWNoIHRoZW0gaGVyZSBhcworIyBzeXNyb290IGlzIG1hbmFnZWQuCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJndWlsZV9zc3RhdGVfcG9zdGluc3QiCitndWlsZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKyAgICAgICAgICAgICAgICBmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2xpYmRpcn0vZ3VpbGUvMi4wL2NjYWNoZSAtdHlwZSBmIHwgeGFyZ3MgdG91Y2gKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZmlsZXMvZ3VpbHQtYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE0MzllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2gKQEAgLTAsMCArMSwyODggQEAKK2d1aWx0OiBleHBsaWNpdGx5IGNhbGwgZm9yIGJhc2gKKworUnVubmluZyBjb21wbGV4IGd1aWx0IHN0YWNrcyBvZiBwYXRjaGVzL2NvbW1pdHMgY2FuIGNhdXNlIGludGVyZXN0aW5nCitmYWlsdXJlcyBhZnRlciB+MjBtIG9mIHByb2Nlc3NpbmcsIHdpdGggZXJyb3JzIGxpa2UgIkJhZCBzdWJzdGl0dXRpb24iLgorCitUaGVzZSBoYXZlIGJlZW4gdHJhY2VkIGJhY2sgdG8gaGF2aW5nIC9iaW4vc2ggLS0+ICAvYmluL2Rhc2ggb24gVWJ1bnR1CitzeXN0ZW1zLiAgUHV0dGluZyBhIHNoZWxsIHRoYXQgYWN0dWFsbHkgKndvcmtzKiAoc3VjaCBhcyAvYmluL2Jhc2gpCitpbiBhcyAvYmluL3NoIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkuICBTbyBoZXJlIHdlIGNoYW5nZSB0aGUgZ3VpbHQKK3NjcmlwdHMgdG8gZXhwbGljaXRseSBjYWxsIGZvciBiYXNoIHRvIGVuc3VyZSB3ZSBkb24ndCBoYXZlIGEgc2ltaWxhcgoraXNzdWUgYWZ0ZXIgZGVwbG95bWVudC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZS1zcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGd1aWx0ICAgICAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtYWRkICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1hcHBsaWVkICAgICAgIHwgICAgMiArLQorIGd1aWx0LWJyYW5jaCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZGVsZXRlICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1kaWZmICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWV4cG9ydCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZmlsZXMgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1mb2xkICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWZvcmsgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZ3JhcGggICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1oZWFkZXIgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWhlbHAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaW1wb3J0ICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1pbXBvcnQtY29tbWl0IHwgICAgMiArLQorIGd1aWx0LWluaXQgICAgICAgICAgfCAgICA0ICsrLS0KKyBndWlsdC1uZXcgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LW5leHQgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcGF0Y2hib21iICAgICB8ICAgIDIgKy0KKyBndWlsdC1wb3AgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXByZXYgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcHVzaCAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1yZWJhc2UgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXJlZnJlc2ggICAgICAgfCAgICAyICstCisgZ3VpbHQtcm0gICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1zZXJpZXMgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXN0YXR1cyAgICAgICAgfCAgICAyICstCisgZ3VpbHQtdG9wICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC11bmFwcGxpZWQgICAgIHwgICAgMiArLQorIDI5IGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQorCistLS0gYS9ndWlsdAorKysrIGIvZ3VpbHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYtMjAxMAorICMKKy0tLSBhL2d1aWx0LWFkZAorKysrIGIvZ3VpbHQtYWRkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtYXBwbGllZAorKysrIGIvZ3VpbHQtYXBwbGllZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWJyYW5jaAorKysrIGIvZ3VpbHQtYnJhbmNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3LTIwMDgKKyAjCistLS0gYS9ndWlsdC1kZWxldGUKKysrKyBiL2d1aWx0LWRlbGV0ZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWRpZmYKKysrKyBiL2d1aWx0LWRpZmYKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChDKSAyMDA3IEpvc2VmICdKZWZmJyBTaXBlayA8amVmZnBjQGpvc2Vmc2lwZWsubmV0PgorICMKKy0tLSBhL2d1aWx0LWV4cG9ydAorKysrIGIvZ3VpbHQtZXhwb3J0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgUGllcnJlIEhhYm91eml0LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZmlsZXMKKysrKyBiL2d1aWx0LWZpbGVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoQykgMjAwNyBZYXN1c2hpIFNIT0pJIDx5YXNoaUBhdG1hcmstdGVjaG5vLmNvbT4KKyAjCistLS0gYS9ndWlsdC1mb2xkCisrKysgYi9ndWlsdC1mb2xkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZm9yaworKysrIGIvZ3VpbHQtZm9yaworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWdyYXBoCisrKysgYi9ndWlsdC1ncmFwaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWhlYWRlcgorKysrIGIvZ3VpbHQtaGVhZGVyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LTIwMTAKKyAjCistLS0gYS9ndWlsdC1oZWxwCisrKysgYi9ndWlsdC1oZWxwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW1wb3J0CisrKysgYi9ndWlsdC1pbXBvcnQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1pbXBvcnQtY29tbWl0CisrKysgYi9ndWlsdC1pbXBvcnQtY29tbWl0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW5pdAorKysrIGIvZ3VpbHQtaW5pdAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKK0BAIC0zMSw3ICszMSw3IEBAIHRvdWNoICIkR1VJTFRfRElSLyRicmFuY2gvc3RhdHVzIgorIAorIG1rZGlyIC1wICIkR0lUX0RJUi9ob29rcy9ndWlsdCIKKyBjYXQgPiAiJEdJVF9ESVIvaG9va3MvZ3VpbHQvZGVsZXRlIiA8PEVPRgorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIyBVc2FnZTogPHNjcmlwdD4gPHBhdGNoIGJlaW5nIHJlbW92ZWQ+CisgCisgZWNobyAiUmVtb3ZpbmcgcGF0Y2ggJ1wkMScuLi4iCistLS0gYS9ndWlsdC1uZXcKKysrKyBiL2d1aWx0LW5ldworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LW5leHQKKysrKyBiL2d1aWx0LW5leHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wYXRjaGJvbWIKKysrKyBiL2d1aWx0LXBhdGNoYm9tYgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LXBvcAorKysrIGIvZ3VpbHQtcG9wCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcHJldgorKysrIGIvZ3VpbHQtcHJldgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXB1c2gKKysrKyBiL2d1aWx0LXB1c2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1yZWJhc2UKKysrKyBiL2d1aWx0LXJlYmFzZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LXJlZnJlc2gKKysrKyBiL2d1aWx0LXJlZnJlc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1ybQorKysrIGIvZ3VpbHQtcm0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1zZXJpZXMKKysrKyBiL2d1aWx0LXNlcmllcworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXN0YXR1cworKysrIGIvZ3VpbHQtc3RhdHVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtdG9wCisrKysgYi9ndWlsdC10b3AKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC11bmFwcGxpZWQKKysrKyBiL2d1aWx0LXVuYXBwbGllZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2d1aWx0LW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzYzY4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAicXVpbHQtbGlrZSB0b29sIGZvciBHaXQiCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNmYzNDAwZGMxYTAxY2ViYWZlOGE1MmIzZjM0NDEzNSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJnaXQ6Ly9yZXBvLm9yLmN6L2d1aWx0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWlsdC1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgIgorUFYgPSAiMC4zNStnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICJjMmE1YmFlNTExYzZkNTM1NGFhNGUxY2I1OTA2OWMzMWRmMmI4ZWViIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIHdlIGRvbid0IGNvbXBpbGUsIHdlIGp1c3QgaW5zdGFsbAorZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtEfS8ke3ByZWZpeH0gaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzZkNTBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQcm9ncmFtIGZvciBjcmVhdGluZyBzaW1wbGUgbWFuIHBhZ2VzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAiYXV0b2NvbmYtbmF0aXZlIGF1dG9tYWtlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2Y3YWFhZWVhNDBiZmYxMTc2ZGY4MjU0MzA2OTQxNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzU5YjI2ZjYwY2IwNmU0NWIwMGU3MjlkZWE3MjFlN2ExNzIyMGUyYzE3ZDgwMGViNDI4MjcxYTc1MDM4MmIwNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbmxzIgorCisjIFdlIGRvbid0IHdhbnQgdG8gcmVjb25maWd1cmUgdGhpbmdzIGFzIGl0IHdvdWxkIHJlcXVpcmUgJ3BlcmxuYXRpdmUnIHRvIGJlCisjIHVzZWQuCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBwZXJsCisJc2VkIC1pIC1lICIxczojIS4qOiMhIC91c3IvYmluL2VudiBwZXJsOiIgJHtEfSR7YmluZGlyfS9oZWxwMm1hbgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2ZpbGVzL01vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FmNzJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsKQEAgLTAsMCArMSw3MiBAQAorIyBFRVBST01FUgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0VFUFJPTUVSX0RJUgk6PSBlZXByb21lcgorCitFRVBST01FUl9DRkxBR1MJOj0gLVdzdHJpY3QtcHJvdG90eXBlcyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdjYXN0LXF1YWwgXAorCQkgICAtV2Nhc3QtYWxpZ24gLVd3cml0ZS1zdHJpbmdzIC1XbmVzdGVkLWV4dGVybnMgLVdpbmxpbmUgXAorCQkgICAtVyAtV3VuZGVmIC1XbWlzc2luZy1wcm90b3R5cGVzIC1JaW5jbHVkZQorCitFRVBST01FUl9UQVJHRVRTCTo9IGVlcHJvbWVyIGVlcHJvbSBlZXByb2cKKworIworIyBQcm9ncmFtcworIworCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tZXI6ICQoRUVQUk9NRVJfRElSKS9lZXByb21lci5vCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9tLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisKKyQoRUVQUk9NRVJfRElSKS9lZXByb2c6ICQoRUVQUk9NRVJfRElSKS9lZXByb2cubyAkKEVFUFJPTUVSX0RJUikvMjRjWFgubyAKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisKKyMKKyMgT2JqZWN0cworIworCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tZXIubzogJChFRVBST01FUl9ESVIpL2VlcHJvbWVyLmMKKwkkKENDKSAkKENGTEFHUykgJChFRVBST01FUl9DRkxBR1MpIC1jICQ8IC1vICRACisKKyQoRUVQUk9NRVJfRElSKS9lZXByb20ubzogJChFRVBST01FUl9ESVIpL2VlcHJvbS5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9nLm86ICQoRUVQUk9NRVJfRElSKS9lZXByb2cuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworJChFRVBST01FUl9ESVIpLzI0Y1hYLm86ICQoRUVQUk9NRVJfRElSKS8yNGNYWC5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCisjCisjIENvbW1hbmRzCisjCisKK2FsbC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCitzdHJpcC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCXN0cmlwICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKworY2xlYW4tZWVwcm9tZXI6CisJJChSTSkgJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywqLm8gJChFRVBST01FUl9UQVJHRVRTKSkKKworaW5zdGFsbC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCSQoSU5TVEFMTF9ESVIpICQoREVTVERJUikkKHNiaW5kaXIpICQoREVTVERJUikkKG1hbjhkaXIpCisJZm9yIHByb2dyYW0gaW4gJChFRVBST01FUl9UQVJHRVRTKSA7IGRvIFwKKwkkKElOU1RBTExfUFJPR1JBTSkgJChFRVBST01FUl9ESVIpLyQkcHJvZ3JhbSAkKERFU1RESVIpJChzYmluZGlyKSA7IGRvbmUKKwordW5pbnN0YWxsLWVlcHJvbWVyOgorCWZvciBwcm9ncmFtIGluICQoRUVQUk9NRVJfVEFSR0VUUykgOyBkbyBcCisJJChSTSkgJChERVNURElSKSQoc2JpbmRpcikvJCRwcm9ncmFtIDsgXAorCSQoUk0pICQoREVTVERJUikkKG1hbjhkaXIpLyQkcHJvZ3JhbS44IDsgZG9uZQorCithbGw6IGFsbC1lZXByb21lcgorCitzdHJpcDogc3RyaXAtZWVwcm9tZXIKKworY2xlYW46IGNsZWFuLWVlcHJvbWVyCisKK2luc3RhbGw6IGluc3RhbGwtZWVwcm9tZXIKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtZWVwcm9tZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9pMmMtdG9vbHNfMy4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmNGQ2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiU2V0IG9mIGkyYyB0b29scyBmb3IgbGludXgiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kbC5sbS1zZW5zb3JzLm9yZy9pMmMtdG9vbHMvcmVsZWFzZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9Nb2R1bGUubWsgXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjcxMDRhMTA0M2QxMWE1ZTJjN2IxMzE2MTRlYjFiOTYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiNWU2OWYyZTJhNmUzYWEyZWNkZmU2YTVmNDkwYjE0OWM1MDQ0Njg3NzBmNTg5MjFjOGM1YjhhNzg2MGE0NDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgY3AgJHtXT1JLRElSfS9Nb2R1bGUubWsgJHtTfS9lZXByb21lci8KKyAgICBzZWQgLWkgJ3MjL3Vzci9sb2NhbCMvdXNyIycgJHtTfS9NYWtlZmlsZQorICAgIGVjaG8gImluY2x1ZGUgZWVwcm9tZXIvTW9kdWxlLm1rIiA+PiAke1N9L01ha2VmaWxlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vbGludXgKKyAgICBpbnN0YWxsIC1tIDA2NDQgaW5jbHVkZS9saW51eC9pMmMtZGV2LmggJHtEfSR7aW5jbHVkZWRpcn0vbGludXgvaTJjLWRldi11c2VyLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saW51eC9pMmMtZGV2LmgKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7c2JpbmRpcn0vaTJjLXN0dWItZnJvbS1kdW1wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZGNtb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RlY29kZS1lZGlkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZWNvZGUtZGltbXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RlY29kZS12YWlvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LW1pc2MiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICJwZXJsIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjRhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJpY2VjYyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCBoYXMgXAorYmVlbiBtb2RpZmllZCBpbiBvcmRlciB0byBtYWtlIGl0IHdvcmsgd2l0aCBPRS4iCitTRUNUSU9OID0gImJhc2UiCisjIHNvdXJjZSBmaWxlIGhhcyBqdXN0IGEgIkdQTCIgd29yZCwgYnV0IHVwc3RyZWFtIGlzIEdQTHYyKy4KKyMgbW9zdCBwcm9iYWJseSBqdXN0IEdQTCB3b3VsZCBiZSBhIG1pc3Rha2UKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaWNlY2MtY3JlYXRlLWVudjtiZWdpbmxpbmU9MjtlbmRsaW5lPTU7bWQ1PWFlMWRmM2Q2YTA1OGJmZGE0MGI2NjA5NGM1ZjYwNjVmIgorCitQUiA9ICJyMiIKKworREVQRU5EUyA9ICIiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitpbmhlcml0IG5hdGl2ZQorCisjIFRoaXMgaXMgbmVlZGVkLCBiZWNhdXNlIG90aGVyd2lzZSB0aGVyZSBpcyBkZXBlbmRlbmN5IGxvb3AgZnJvbSBxdWlsdC1uYXRpdmUKKyMgRGVwZW5kZW5jeSBsb29wICMxIGZvdW5kOgorIyAgVGFzayAxMDkwNyAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19pbnN0YWxsKSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19jb21waWxlJ10pCisjICBUYXNrIDEwOTA4IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX3BvcHVsYXRlX3N5c3Jvb3QpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX2luc3RhbGwnXSkKKyMgIFRhc2sgMTA5OTcgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fcGF0Y2gpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fdW5wYWNrJywgJ3F1aWx0LW5hdGl2ZSwgZG9fcG9wdWxhdGVfc3lzcm9vdCddKQorIyAgVGFzayAxMTAwMSAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19jb25maWd1cmUpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fcGF0Y2gnXSkKKyMgIFRhc2sgMTEwMDIgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fY29tcGlsZSkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19jb25maWd1cmUnXSkKKyMgIFRhc2sgMTA5OTggKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9faW5zdGFsbCkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19jb21waWxlJ10pCisjICBUYXNrIDEwOTk5IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX3BvcHVsYXRlX3N5c3Jvb3QpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9faW5zdGFsbCddKQorIyAgVGFzayAxMDkxMCAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19jb25maWd1cmUpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX3BhdGNoJywgJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19wb3B1bGF0ZV9zeXNyb290J10pCisjICBUYXNrIDEwOTExIChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX2NvbXBpbGUpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX2NvbmZpZ3VyZSddKQorUEFUQ0hUT09MID0gInBhdGNoIgorU1JDX1VSSSA9ICJmaWxlOi8vaWNlY2MtY3JlYXRlLWVudiIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pY2VjYy1jcmVhdGUtZW52ICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2U0ZGJjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudgpAQCAtMCwwICsxLDE5MiBAQAorIyEgL3Vzci9iaW4vZW52IGJhc2gKKyMgaWNlY2MgLS0gQSBzaW1wbGUgZGlzdHJpYnV0ZWQgY29tcGlsZXIgc3lzdGVtCisjCisjIENvcHlyaWdodCAoQykgMjAwNCBieSB0aGUgSWNlY3JlYW0gQXV0aG9ycworIyBHUEwKKwordGFyZ2V0X2ZpbGVzPQorCitpc19jb250YWluZWQgKCkKK3sKKyAgY2FzZSAiICR0YXJnZXRfZmlsZXMgIiBpbgorICAgICoiICQxICIqICkgcmV0dXJuIDAgOzsKKyAgICAqIj0kMSAiKiApIHJldHVybiAwOzsKKyAgICAqICkgcmV0dXJuIDEgOzsKKyAgZXNhYworfQorCithZGRfZmlsZSAoKQoreworICBsb2NhbCBuYW1lPSIkMSIKKyAgbG9jYWwgcGF0aD0iJDEiOworICBpZiB0ZXN0IC1uICIkMiI7IHRoZW4KKyAgICBuYW1lPSIkMiIKKyAgZmkKKyAgdGVzdCAteiAiJG5hbWUiICYmIHJldHVybgorICAjIGxzIC1IIGlzbid0IHJlYWxseSB0aGUgc2FtZSBhcyByZWFkbGluaywgYnV0CisgICMgcmVhZGxpbmsgaXMgbm90IHBvcnRhYmxlIGVub3VnaC4KKyAgcGF0aD1gbHMgLUggJHBhdGhgCisgIHRvYWRkPSIkbmFtZT0kcGF0aCIKKyAgaXNfY29udGFpbmVkICIkdG9hZGQiICYmIHJldHVybgorICBpZiB0ZXN0IC16ICIkc2lsZW50IjsgdGhlbgorICBlY2hvICJhZGRpbmcgZmlsZSAkdG9hZGQiCisgIGZpCisgIHRhcmdldF9maWxlcz0iJHRhcmdldF9maWxlcyAkdG9hZGQiCisgIGlmIHRlc3QgLXggIiRwYXRoIjsgdGhlbgorICAgICMgT25seSBjYWxsIGxkZCB3aGVuIGl0IG1ha2VzIHNlbnNlCisgICAgaWYgZmlsZSAtTCAiJHBhdGgiIHwgZ3JlcCAnRUxGJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJaWYgISBmaWxlIC1MICIkcGF0aCIgfCBncmVwICdzdGF0aWMnID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAjIGxkZCBub3cgb3V0cHV0cyBsZCBhcyAvbGliL2xkLWxpbnV4LnNvLnh4IG9uIGN1cnJlbnQgbnB0bCBiYXNlZCBnbGliYworCQkjIHRoaXMgcmVnZXhwIHBhcnNlIHRoZSBvdXRwdXRzIGxpa2U6CisJCSMgbGRkIC91c3IvYmluL2djYworCQkjICAgICAgICAgbGludXgtZ2F0ZS5zby4xID0+ICAoMHhmZmZmZTAwMCkKKwkJIyAgICAgICAgIGxpYmMuc28uNiA9PiAvbGliL3Rscy9saWJjLnNvLjYgKDB4YjdlODEwMDApCisJCSMgICAgICAgICAvbGliL2xkLWxpbnV4LnNvLjIgKDB4YjdmZTgwMDApCisJCSMgY292ZXJpbmcgYm90aCBzaXR1YXRpb25zICggd2l0aCA9PiBhbmQgd2l0aG91dCApCisgICAgICAgICAgZm9yIGxpYiBpbiBgbGRkICIkcGF0aCIgfCBzZWQgLW4gJ3MsXlteL10qXCgvW14gXSpcKS4qLFwxLHAnYDsgZG8KKwkgICAgdGVzdCAtZiAiJGxpYiIgfHwgY29udGludWUKKwkgICAgIyBDaGVjayB3ZXRoZXIgdGhlIHNhbWUgbGlicmFyeSBhbHNvIGV4aXN0cyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwKKwkgICAgIyBhbmQgcHJlZmVyIHRoYXQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBpcyBhIG1vcmUgZ2VuZXJpYyBvbmUuCisJICAgIGxvY2FsIGJhc2VsaWI9YGVjaG8gIiRsaWIiIHwgc2VkICdzLFwoL1teL10qXCkvLipcKC9bXi9dKlwpJCxcMVwyLCdgCisJICAgIHRlc3QgLWYgIiRiYXNlbGliIiAmJiBsaWI9JGJhc2VsaWIKKwkgIGFkZF9maWxlICIkbGliIgorICAgICAgICBkb25lCisgICAgICBmaQorICAgIGZpCisgIGZpCit9CisKKyMgYmFja3dhcmQgY29tcGF0CitpZiB0ZXN0ICIkMSIgPSAiLS1yZXNwZWN0LXBhdGgiOyB0aGVuCisgIHNoaWZ0CitmaQorCisjYWRkIGEgLS1zaWxlbnQgc3dpdGNoIHRvIGF2b2lkICJicm9rZW4gcGlwZSIgZXJyb3JzIHdoZW4gY2FsbGluZyB0aGlzIHNjaXB0IGZyb20gd2l0aGluIE9FCitpZiB0ZXN0ICIkMSIgPSAiLS1zaWxlbnQiOyB0aGVuCisgc2lsZW50PTEKKyBzaGlmdAorZmkKKworCithZGRlZF9nY2M9JDEKK3NoaWZ0CithZGRlZF9neHg9JDEKK3NoaWZ0CithZGRlZF9hcz0kMQorc2hpZnQKK2FyY2hpdmVfbmFtZT0kMQorCitpZiB0ZXN0IC16ICIkYWRkZWRfZ2NjIiB8fCB0ZXN0IC16ICIkYWRkZWRfZ3h4IiA7IHRoZW4KKwllY2hvICJ1c2FnZTogJDAgPGdjY19wYXRoPiA8ZysrX3BhdGg+IgorCWV4aXQgMQorZmkKKworaWYgISB0ZXN0IC14ICIkYWRkZWRfZ2NjIiA7IHRoZW4KKyAgZWNobyAiJyRhZGRlZF9nY2MnIGlzIG5vIGV4ZWN1dGFibGUuIgorICBleGl0IDEKK2ZpCisKK2lmICEgdGVzdCAteCAiJGFkZGVkX2d4eCIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfZ2NjJyBpcyBubyBleGVjdXRhYmxlLiIKKyAgZXhpdCAxCitmaQorCisKKworYWRkX2ZpbGUgJGFkZGVkX2djYyAvdXNyL2Jpbi9nY2MKK2FkZF9maWxlICRhZGRlZF9neHggL3Vzci9iaW4vZysrCisKK2lmIHRlc3QgLXogIiRhZGRlZF9hcyIgOyB0aGVuCisgYWRkX2ZpbGUgL3Vzci9iaW4vYXMgL3Vzci9iaW4vYXMKK2Vsc2UKKyBpZiAhIHRlc3QgLXggIiRhZGRlZF9hcyIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfYXMnIGlzIG5vIGV4ZWN1dGFibGUuIgorICBleGl0IDEKKyBmaQorCisgYWRkX2ZpbGUgJGFkZGVkX2FzICAvdXNyL2Jpbi9hcworZmkKKworYWRkX2ZpbGUgYCRhZGRlZF9nY2MgLXByaW50LXByb2ctbmFtZT1jYzFgIC91c3IvYmluL2NjMQorYWRkX2ZpbGUgYCRhZGRlZF9neHggLXByaW50LXByb2ctbmFtZT1jYzFwbHVzYCAvdXNyL2Jpbi9jYzFwbHVzCitzcGVjZmlsZT1gJGFkZGVkX2djYyAtcHJpbnQtZmlsZS1uYW1lPXNwZWNzYAoraWYgdGVzdCAtbiAiJHNwZWNmaWxlIiAmJiB0ZXN0IC1lICIkc3BlY2ZpbGUiOyB0aGVuCisgIGFkZF9maWxlICIkc3BlY2ZpbGUiCitmaQorCitsdG9maWxlPWAkYWRkZWRfZ2NjIC1wcmludC1wcm9nLW5hbWU9bHRvMWAKK3BsdWdpbmZpbGU9IiR7bHRvZmlsZSVsdG8xfWxpYmx0b19wbHVnaW4uc28iCitpZiB0ZXN0IC1yICIkcGx1Z2luZmlsZSIKK3RoZW4KKyAgYWRkX2ZpbGUgJHBsdWdpbmZpbGUgICR7cGx1Z2luZmlsZSMqdXNyfQorICBhZGRfZmlsZSAkcGx1Z2luZmlsZSAgL3VzciR7cGx1Z2luZmlsZSMqdXNyfQorZmkKKwordGVtcGRpcj1gbWt0ZW1wIC1kIC90bXAvaWNlY2NlbnZYWFhYWFhgCituZXdfdGFyZ2V0X2ZpbGVzPQorZm9yIGkgaW4gJHRhcmdldF9maWxlczsgZG8KKyBjYXNlICRpIGluCisgICAqPS8qKQorICAgIHRhcmdldD1gZWNobyAkaSB8IGN1dCAtZD0gLWYxYAorICAgIHBhdGg9YGVjaG8gJGkgfCBjdXQgLWQ9IC1mMmAKKyAgICA7OworICAgKikKKyAgICBwYXRoPSRpCisgICAgdGFyZ2V0PSRpCisgICAgOzsKKyAgZXNhYworICBta2RpciAtcCAkdGVtcGRpci9gZGlybmFtZSAkdGFyZ2V0YAorICBjcCAtcCAkcGF0aCAkdGVtcGRpci8kdGFyZ2V0CisgIGlmIHRlc3QgLWYgJHRlbXBkaXIvJHRhcmdldCAtYSAteCAkdGVtcGRpci8kdGFyZ2V0OyB0aGVuCisgICAgc3RyaXAgLXMgJHRlbXBkaXIvJHRhcmdldCAyPi9kZXYvbnVsbAorICBmaQorICB0YXJnZXQ9YGVjaG8gJHRhcmdldCB8IGN1dCAtYjItYAorICBuZXdfdGFyZ2V0X2ZpbGVzPSIkbmV3X3RhcmdldF9maWxlcyAkdGFyZ2V0IgorZG9uZQorCisjc29ydCB0aGUgZmlsZXMKK3RhcmdldF9maWxlcz1gZm9yIGkgaW4gJG5ld190YXJnZXRfZmlsZXM7IGRvIGVjaG8gJGk7IGRvbmUgfCBzb3J0YAorCisjdGVzdCBpZiBhbiBhcmNoaXZlIG5hbWUgd2FzIHN1cHBsaWVkCisjaWYgbm90IHVzZSB0aGUgbWQ1IG9mIGFsbCBmaWxlcyBhcyB0aGUgYXJjaGl2ZSBuYW1lCitpZiB0ZXN0IC16ICIkYXJjaGl2ZV9uYW1lIjsgdGhlbgorICBtZDVzdW09Tk9ORQorICBmb3IgZmlsZSBpbiAvdXNyL2Jpbi9tZDVzdW0gL2Jpbi9tZDUgL3Vzci9iaW4vbWQ1OyBkbworICAgIGlmIHRlc3QgLXggJGZpbGU7IHRoZW4KKyAgICAgIG1kNXN1bT0kZmlsZQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisKKyAgI2NhbGN1bGF0ZSBtZDUgYW5kIHVzZSBpdCBhcyB0aGUgYXJjaGl2ZSBuYW1lCisgIGFyY2hpdmVfbmFtZT1gZm9yIGkgaW4gJHRhcmdldF9maWxlczsgZG8gdGVzdCAtZiAkdGVtcGRpci8kaSAmJiAkbWQ1c3VtICR0ZW1wZGlyLyRpOyBkb25lIHwgc2VkIC1lICdzLyAuKiQvLycgfCAkbWQ1c3VtIHwgc2VkIC1lICdzLyAuKiQvLydgLnRhci5neiB8fCB7CisgICAgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgICAgZWNobyAiQ291bGRuJ3QgY29tcHV0ZSBNRDUgc3VtLiIKKyAgICBmaQorICAgIGV4aXQgMgorICB9CisgIG15ZGlyPWBwd2RgCitlbHNlCisgIG15ZGlyPSJgZGlybmFtZSAiJGFyY2hpdmVfbmFtZSJgIgorCisgICNjaGVjayBpZiB3ZSBoYXZlIGEgZnVsbCBwYXRoIG9yIG9ubHkgYSBmaWxlbmFtZQorICBpZiB0ZXN0ICIkbXlkaXIiID0gIi4iIDsgdGhlbgorICAgIG15ZGlyPWBwd2RgCisgIGVsc2UKKyAgICBteWRpcj0iIgorICBmaQorZmkKKworaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KK2VjaG8gImNyZWF0aW5nICRhcmNoaXZlX25hbWUiCitmaQorCitjZCAkdGVtcGRpcgordGFyIC1jemhmICIkbXlkaXIvJGFyY2hpdmVfbmFtZSIgJHRhcmdldF9maWxlcyB8fCB7CisgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgZWNobyAiQ291bGRuJ3QgY3JlYXRlIGFyY2hpdmUiCisgZmkKKyAgZXhpdCAzCit9CitjZCAuLgorcm0gLXJmICR0ZW1wZGlyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNvbi1uYW1pbmctdXRpbHMvaWNvbi1uYW1pbmctdXRpbHNfMC44LjkwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjM1NmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkVuYWJsZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGRlc2t0b3AgaWNvbiB0aGVtZXMiCitERVNDUklQVElPTiA9ICJBIFBlcmwgc2NyaXB0IHVzZWQgZm9yIG1haW50YWluaW5nIGJhY2t3YXJkcyBcCitjb21wYXRpYmlsaXR5IHdpdGggY3VycmVudCBkZXNrdG9wIGljb24gdGhlbWVzLCB3aGlsZSBtaWdyYXRpbmcgdG8gdGhlIFwKK25hbWVzIHNwZWNpZmllZCBpbiB0aGUgSWNvbiBOYW1pbmcgU3BlY2lmaWNhdGlvbi4gVGhlIEljb24gTmFtaW5nIFwKK1V0aWxpdGllcyBtYXAgdGhlIGljb24gbmFtZXMgdXNlZCBieSB0aGUgR05PTUUgYW5kIEtERSBkZXNrdG9wcyB0byB0aGUgXAoraWNvbiBuYW1lcyBwcm9wb3NlZCBpbiB0aGUgSWNvbiBOYW1pbmcgU3BlY2lmaWNhdGlvbiwgYW5kIGdlbmVyYXRlIHRoZSBcCitpY29uIGZpbGVzIGFwcHJvcHJpYXRlIHRvIHRoZSBkZXNrdG9wIGVudmlyb25tZW50IHlvdSB1c2UuIFRoZSBJY29uIFwKK05hbWluZyBTcGVjaWZpY2F0aW9uIHByb3ZpZGVzIGEgc3RhbmRhcmQgbGlzdCBvZiBjb21tb24gaWNvbiBjb250ZXh0cyBcCithbmQgbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIGljb24gdGhlbWVzIHdvcmsgaW4gYSBkZXNrdG9wIFwKK2Vudmlyb25tZW50IG9yIGFwcGxpY2F0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgbmFtaW5nIHNwZWNpZmljYXRpb24uICIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gImxpYnhtbC1zaW1wbGUtcGVybC1uYXRpdmUiCitQUiA9ICJyNSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3RhbmdvLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9pY29uLW5hbWluZy11dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMmM1YzdhNDE4ZTVlYjMyNjhmNjVlMjE5OTMyNzdmYmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDQ0YWIyMTk5ZWQ4YzZhNTVjZTM2ZmQ0ZmNkOGI4MDIxYTVlMjFmNWJhYjAyOGMwYTdjZGNmNTJhNTkwMmUxYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYWxsYXJjaCBwZXJsbmF0aXZlCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJIyBNYWtlIHN1cmUgd2UgdXNlIG91ciBuYXRpdmVwZXJsIHdyYXBwZXIuCisJc2VkIC1pIC1lICIxczojIS4qOiMhL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmw6IiAke1N9L2ljb24tbmFtZS1tYXBwaW5nLnBsLmluCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2R0ZHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOGNmYjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIKQEAgLTAsMCArMSw0MjAgQEAKKyMhL2Jpbi9iYXNoCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKKwordXNhZ2UgKCkKK3sKKworICBJTlNUX0FSQ0g9YHVuYW1lIC1tYAorICBJTlNUX09TPWB1bmFtZSAtb3wgdHIgJ1tBLVpdJyAnW2Etel0nYAorICBJTlNUX0tSPWB1bmFtZSAtcnwgdHIgJ1tBLVpdJyAnW2Etel0nYAorCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFdlbGNvbWUgdG8gWW9jdG8gQXBwbGljYXRpb24gRGV2ZWxvcGVtZW50IFRvb2xzIChBRFQpIEluc3RhbGxlciIKKyAgZWNob19pbmZvICIjICIKKyAgZWNob19pbmZvICIjIEhvc3QgTWFjaGluZTpcdFx0XHRcdCIkSU5TVF9BUkNICisgIGVjaG9faW5mbyAiIyBPUyBpbmZvOlx0XHRcdFx0JElOU1RfS1IiICAKKyAgZWNob19pbmZvICIjIFlvY3RvIEFEVCB2ZXJzaW9uIHRvIGJlIGluc3RhbGxlZDpcdCRZT0NUT0FEVF9WRVJTSU9OIgorICBlY2hvX2luZm8gIiMgc3VwcG9ydGVkIHRhcmdldCBhcmNoaXRlY3R1cmVzOlx0JFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTIgorICBlY2hvX2luZm8gIiMgc3VwcG9ydGVkIHRhcmdldCByb290X2ZzIGltYWdlczpcdCRZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKworICBlY2hvX2luZm8gIlN5c3RlbXdpZGUgaW5zdGFsbGF0aW9uLiBJbnN0YWxsYXRpb24gd2lsbCBvY2N1ciB1bmRlciAkSU5TVEFMTF9GT0xERVJcbiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIiMgWW91ciBzeXN0ZW0gaW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb25zIGZyb20gYWR0X2luc3RhbGxlci5jb25mIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisKKyAgZWNob19pbmZvICIjIENyb3NzIHRvb2xjaGFpbnM6XHRcdCRZT0NUT0FEVF9UQVJHRVRTIgorICBlY2hvX2luZm8gIiMgSW5zdGFsbCBRZW11Olx0XHRcdCRZT0NUT0FEVF9RRU1VIgorICBlY2hvX2luZm8gIiMgSW5zdGFsbCBORlMgdXRpbGl0aWVzOlx0JFlPQ1RPQURUX05GU19VVElMIgorICAjZWNob19pbmZvICIjIEluc3RhbGwgYml0YmFrZSArIFVJOlx0XHQkWU9DVE9BRFRfQklUQkFLRSIKKyAgI2VjaG9faW5mbyAiIyBJbnN0YWxsIG1ldGFkYXRhOlx0JFlPQ1RPQURUX01FVEFEQVRBIgorICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisKKyAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBZb3VyIHJvb3RmcyBpbWFnZShzKSBhbmQgdGFyZ2V0IHN5c3Jvb3Qgc2VsZWN0aW9ucyBmcm9tIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKK3Byb21wdD0xCitmb3IgYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICBkb3dubG9hZF9pbWFnZXMgJGFyY2hfdHlwZSAkcHJvbXB0Citkb25lCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIHNlbGVjdF9pbnN0YWxsX3R5cGUKK30KKwordmFsaWRhdGVfY29uZmlnKCkKK3sKKworICBmb3Igc2VsZWN0ZWRfYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICAgIGZvdW5kPTAKKyAgICBzZWxlY3RfbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJHNlbGVjdGVkX2FyY2hfdHlwZSIKKyAgICBzZWxlY3RfbWFjaGluZT1gZXZhbCBlY2hvICRzZWxlY3RfbWFjaGluZV92YXJgCisgICAgc2hvd19lcnJvcl9iYW5uZXI9MAorCisgICAgZm9yIHN1cHBvcnRlZF9hcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTOyBkbworICAgICAgaWYgWyAiJHNlbGVjdGVkX2FyY2hfdHlwZSIgPT0gIiRzdXBwb3J0ZWRfYXJjaF90eXBlIiBdOyB0aGVuCisgICAgICAgIGZvdW5kPTEKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIFsgJGZvdW5kID09IDAgXTsgdGhlbgorICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVEFEVF9UQVJHRVRTIGluIGFkdF9pbnN0YWxsZXIuY29uZiBjb250YWlucyBpbnZhbGlkIGVudHJpZXM6ICRZT0NUT0FEVF9UQVJHRVRTLiBWYWxpZCB2YWx1ZXMgYXJlOiAkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFMiCisgICAgICAgc2hvd19lcnJvcl9iYW5uZXI9MQorICAgIGVsaWYgWyAteiAiJHNlbGVjdF9tYWNoaW5lIiBdOyB0aGVuCisgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBObyBNQUNISU5FIHdhcyBkZWZpbmVkIGZvciAkc2VsZWN0ZWRfYXJjaF90eXBlIGFyY2hpdGVjdHVyZSEgVGhpcyBpcyBuZWVkZWQgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluIGFuZCB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCBzZXR0aW5ncy4iCisgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIFRvIGRvIHRoYXQsIGluIGFkdC1pbnN0YWxsZXIuY29uZiwgc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6IFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyRzZWxlY3RlZF9hcmNoX3R5cGUiCisgICAgICAgc2hvd19lcnJvcl9iYW5uZXI9MQorICAgIGZpCisKKyAgICBpZiBbICRzaG93X2Vycm9yX2Jhbm5lciA9PSAxIF07IHRoZW4KKyAgICAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgIGV4aXQgLTEKKyAgICBmaQorICBkb25lCisKKyAgZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFM7IGRvCisgICAgI3NlbGVjdF90YXJnZXRfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF8kYXJjaF90eXBlIgorICAgICNzZWxlY3RfdGFyZ2V0PWBldmFsIGVjaG8gJHNlbGVjdF90YXJnZXRfdmFyYAorCisgICAgI2lmIFsgIiRzZWxlY3RfdGFyZ2V0IiAhPSAiWSIgXSB8fCBbICIkc2VsZWN0ZWRfdGFyZ2V0IiAhPSAieSIgXTsgdGhlbgorICAgICMgIGNvbnRpbnVlOworICAgICNmaQorCisgICAgdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyRhcmNoX3R5cGUiCisgICAgdGFyZ2V0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyYAorCisKKyAgICBzZWxlY3Rfcm9vdGZzX3Zhcj0iXCRZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSIKKyAgICBzZWxlY3Rfcm9vdGZzPWBldmFsIGVjaG8gJHNlbGVjdF9yb290ZnNfdmFyYAorCisgICAgaWYgWyAiJHNlbGVjdF9yb290ZnMiID09ICIiIF0gJiYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiIiBdOyB0aGVuCisgICAgICAgY29udGludWU7CisgICAgZmkKKworICAgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworI3ZhbGlkYXRlIHJvb3RmcyB0eXBlIGRlZmluZWQgaW4gWU9DVE9BRFRfUk9PVEZTX3tBUkNIfSBpcyB2YWxpZCBhbmQgaW4gWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUworICAgICAgZm91bmQ9MAorICAgICAgZm9yIHN1cHBvcnRlZF9yb290ZnNfdHlwZSBpbiAkWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUzsgZG8KKyAgICAgICAgaWYgWyAiJGltYWdlX3R5cGUiID09ICIkc3VwcG9ydGVkX3Jvb3Rmc190eXBlIiBdOyB0aGVuCisgICAgICAgICAgZm91bmQ9MQorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiBbICRmb3VuZCA9PSAwIF07IHRoZW4KKyN0aGUgcm9vdGZzIHR5cGUgbGlzdGVkIGZvciBkb3dubG9hZGluZyBpcyBub3QgdmFsaWQKKyAgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBTZWxlY3RlZCBZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSB2YWx1ZTogJGltYWdlX3R5cGUsIGlzIG5vdCB2YWxpZCEgVmFsaWQgdmFsdWVzIGFyZTogJFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlMgIgorICAgICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICAgIGV4aXQgLTEKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZm91bmQ9MAorICAgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworI3ZhbGlkYXRlIHRoYXQgcm9vdGZzIHRvIGJlIGV4dHJhY3RlZCBtdXN0IGJlIGluIHRoZSBpdGVtOiBZT0NUT0FEVF9ST09URlNfJHtBUkNIfQorICAgICAgaWYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiJGltYWdlX3R5cGUiIF07IHRoZW4KKyAgICAgICAgZm91bmQ9MQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisjIHRoZSByb290ZnMgaW1hZ2UgdG8gYmUgZXh0cmFjdGVkIGlzIG5vdCBzZWxlY3RlZAorICAgIGlmIFsgJGZvdW5kID09IDAgXTsgdGhlbgorICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kYXJjaF90eXBlIHNlbGVjdGlvbjogJHRhcmdldF9zeXNyb290X2ltYWdlIGlzIG5vdCBpbmNsdWRlZCBpbiBZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSBzZWxlY3Rpb25zOiAkc2VsZWN0X3Jvb3RmcyIKKyAgICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgZXhpdCAtMQorICAgIGZpCisgIGRvbmUKK30KKworCisjZGV0ZWN0IG9wa2cgaW5zdGFsbGVkIG9yIG5vdCwgZm9yIGluc3RhbGxpbmcgc2RrLCB3ZSB3aWxsIHVzZQorI3RoaXMgaW5zdGFsbGVkIGxvY2FsIG9wa2cKK2luc3RhbGxfb3BrZygpCit7CitpZiBbICEgLXggIiRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIgXTsgdGhlbgorICBlY2hvX2luZm8gIk9QS0cgaXMgbm90IHNldHVwLCBzZXR0aW5nIHVwIG9wa2cgaW4gbG9jYWwsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBpbnN0YWxsaW5nIHlvY3RvIEFEVC4uLlxuIgorCisgIGlmIFsgLWQgJExPQ0FMX09QS0dfTE9DIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIkRlbGV0aW5nIG9sZCBPUEtHIGZvbGRlciwgd2hpY2ggZG9lc24ndCBjb250YWluIGV4ZWN1dGFibGVzLi4uICIKKyAgICBybSAtcmYgJExPQ0FMX09QS0dfTE9DCisgIGZpCisKKyAgcGFyZW50X2ZvbGRlcj1gcHdkYAorICBjZCAkTE9DQUxfT1BLR19GT0xERVIKKyAgY2hlY2tfcmVzdWx0CisKKyAgb3BrZ19zb3VyY2VfZGlyPWBscyAtZCBvcGtnLSpgCisKKyAgaWYgWyAkb3BrZ19zb3VyY2VfZGlyID09ICIiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IE9QS0cgc291cmNlIGRpcmVjdG9yeSBpcyBub3QgZm91bmQhIgorICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAtMQorICBmaQorCisgIGNkICRvcGtnX3NvdXJjZV9kaXIKKyAgY2hlY2tfcmVzdWx0CisKKyAgZWNob19pbmZvICJDb25maWd1cmUgb3BrZyAuLi5cbiIKKyAgYXV0b3JlY29uZiAtaQorICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0kcGFyZW50X2ZvbGRlci8kTE9DQUxfT1BLR19MT0MgLS1lbmFibGUtc2hhcmVkPW5vIC0tZGlzYWJsZS1jdXJsIC0tZGlzYWJsZS1zc2wtY3VybCAtLWRpc2FibGUtZ3BnID4+ICRwYXJlbnRfZm9sZGVyLyRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorCisgIGVjaG9faW5mbyAiTWFrZSBvcGtnIC4uLlxuIgorICBtYWtlICY+PiAkcGFyZW50X2ZvbGRlci8kWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKKworICBlY2hvX2luZm8gIk1ha2UgSW5zdGFsbCBvcGtnIC4uLlxuIgorICBtYWtlIGluc3RhbGwgJj4+ICRwYXJlbnRfZm9sZGVyLyRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgICNpZiBtZWV0IGVycm9yIHdoZW4gaW5zdGFsbGluZyBvcGtnLCBjYW5jZWwgdGhlIGluc3RhbGxhdGlvbgorICBjaGVja19yZXN1bHQKKworICBjZCAkcGFyZW50X2ZvbGRlcgorICBlY2hvX2luZm8gIlN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgT1BLRy5cbiIKK2ZpCit9CisKK2NvbmZpcm1fZG93bmxvYWQoKQoreworI2F2b2lkIHJlcGVhdGVkIHJlbWluZGluZworaWYgWyAiJG92ZXJyaWRlX29sZGZpbGUiID09IDEgXTsgdGhlbgorICByZXR1cm4gJHByZV9yZXN1bHQKK2Vsc2UKKyAgb3ZlcnJpZGVfb2xkZmlsZT0xCitmaQorCit3aGlsZSB0cnVlOyBkbworICAjZWNob19pbmZvICJbQURUX0lOU1RdIEZpbGVzIFskMV0gYWxyZWFkeSBleGlzdHMuIElmIHlvdSBjb250aW51ZSBkb3dubG9hZGluZywgb2xkIGZpbGVzIHdpbGwgYmUgb3ZlcnJpZGVkLiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBGdXJ0aGVyIHByb21wdHMgd2lsbCBub3QgYmUgZ2l2ZW4gaWYgdGhlcmUncmUgbW9yZSBleGlzdGluZyBmaWxlcyB0byBiZSBkb3dubG9hZGVkLiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBEbyB5b3Ugd2FudCB0byBjb250aW51ZSBkb3dubG9hZGluZz8gUGxlYXNlIGVudGVyIFkvTjoiCisgIGVjaG9faW5mbyAiXG5GaWxlIFskMV0gYWxyZWFkeSBleGlzdHMsIHdoaWNoIG1lYW5zIHlvdSd2ZSBkb3dubG9hZGVkIHRoZSBxZW11IGtlcm5lbCBhbmQgcm9vdGZzIGZpbGUocykgYmVmb3JlLiAgSWYgeW91IGNob29zZSBjb250aW51ZSBkb3dubG9hZGluZywgb2xkIGZpbGVzIHdpbGwgYmUgb3ZlcnJpZGRlbi4iCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBEbyB5b3Ugd2FudCB0byBjb250aW51ZSBkb3dubG9hZGluZz8gUGxlYXNlIGVudGVyIFkvTjoiCisgIHJlYWQgWU9DVE9BRFRfSU5TVEFMTAorICBZT0NUT0FEVF9JTlNUQUxMPWB0ciAnW2Etel0nICdbQS1aXSc8PDwiJFlPQ1RPQURUX0lOU1RBTEwiYAorICBpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIlkiIF07IHRoZW4KKyAgICBwcmVfcmVzdWx0PTAKKyAgICByZXR1cm4gMAorICBlbGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiTiIgXTsgdGhlbgorICAgIHByZV9yZXN1bHQ9MQorICAgIHJldHVybiAxCisgIGZpCitkb25lCit9CisKK2Rvd25sb2FkX2ZpbGUoKQoreworbG9jYWwgZmlsZW5hbWU9YGVjaG8gJHsxIyMqL31gCitpZiBbIC1mICIkTE9DQUxfRE9XTkxPQUQvJGZpbGVuYW1lIiBdOyB0aGVuCisgIGNvbmZpcm1fZG93bmxvYWQgJGZpbGVuYW1lCisgIHJlc3VsdD0iJD8iCisgIGlmIFsgISAiJHJlc3VsdCIgPT0gIjAiIF07IHRoZW4KKyAgICByZXR1cm4KKyAgZWxzZQorICAgIGVjaG8gIlJlbW92aW5nIG9sZCBmaWxlIFskMV0iCisgICAgcm0gLXJmICIkTE9DQUxfRE9XTkxPQUQvJGZpbGVuYW1lIiAKKyAgZmkKK2ZpCitlY2hvX2luZm8gIkRvd25sb2FkaW5nIGZpbGU6ICRmaWxlbmFtZS4uLiIKK3dnZXQgIiRZT0NUT0FEVF9SRVBPL3Jvb3Rmcy8kMSIgLVAgJExPQ0FMX0RPV05MT0FEIC0tcHJvZ3Jlc3M9YmFyOmZvcmNlIDI+JjEgfCB0ZWUgLWEgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIiAKK30KKworCisKKyNOZWVkIHRocmVlIGlucHV0IHBhcmFtczoKKyMgJDEgYXJjaF90eXBlKGFybSBwb3dlcnBjIHg4NiBtaXBzKQorIyAkMiBtYWNoaW5lKHFlbXVhcm0gYmVhZ2xlYm9hcmQpCisjICQzIHJvb3Rmc19pbWFnZV90eXBlIChhIGxpc3Qgb2Ygc2RrIHNhdG8gbWluaW1hbCBsc2IpCitnZXRfaW1hZ2UoKQoreworICBsb2NhbCBtYWNoaW5lPSQyCisgCisgIGlmIFsgIiQxIiA9PSAieDg2IiBdIHx8IFsgIiQxIiA9PSAieDg2XzY0IiBdOyB0aGVuCisgICAga2VybmVsPSJiekltYWdlLSRtYWNoaW5lLmJpbiIKKyAgZWxpZiBbICIkMSIgPT0gInBwYyIgXSB8fCBbICIkMSIgPT0gIm1pcHMiIF07IHRoZW4KKyAgICBrZXJuZWw9InZtbGludXgtJG1hY2hpbmUuYmluIgorICBlbHNlCisgICAga2VybmVsPSJ6SW1hZ2UtJG1hY2hpbmUuYmluIgorICBmaQorCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG93bmxvYWRpbmcgcWVtdSBrZXJuZWwgYmluYXJ5OiAkcWVtdV9rZXJuZWwiCisgIGRvd25sb2FkX2ZpbGUgJG1hY2hpbmUvJGtlcm5lbAorICBjaGVja19yZXN1bHQKKyAgCisgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworICAgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG93bmxvYWRpbmcgcm9vdGZzIGZpbGU6IGNvcmUtaW1hZ2UtJGltYWdlX3R5cGUtJG1hY2hpbmUudGFyLmJ6MiIKKyAgICBmaWxlbmFtZT0iY29yZS1pbWFnZS0kaW1hZ2VfdHlwZS0kbWFjaGluZS50YXIuYnoyIgorICAgIGRvd25sb2FkX2ZpbGUgJG1hY2hpbmUvJGZpbGVuYW1lCisgICAgY2hlY2tfcmVzdWx0CisgIGRvbmUKK30KKworZG93bmxvYWRfaW1hZ2VzKCkKK3sKKyAgc2VsZWN0X3Jvb3Rmc192YXI9IlwkWU9DVE9BRFRfUk9PVEZTXyQxIgorICBzZWxlY3Rfc3lzcm9vdF9pbWFnZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEiCisgIHNlbGVjdF9zeXNyb290X3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfJDEiCisgIHNlbGVjdF9tYWNoaW5lX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kMSIKKyAgc2VsZWN0X3Jvb3Rmcz1gZXZhbCBlY2hvICRzZWxlY3Rfcm9vdGZzX3ZhcmAKKyAgc2VsZWN0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkc2VsZWN0X3N5c3Jvb3RfaW1hZ2VfdmFyYAorICBzZWxlY3Rfc3lzcm9vdD1gZXZhbCBlY2hvICRzZWxlY3Rfc3lzcm9vdF92YXJgCisgIHNlbGVjdF9tYWNoaW5lPWBldmFsIGVjaG8gJHNlbGVjdF9tYWNoaW5lX3ZhcmAKKworICBpZiBbIC1uICIkc2VsZWN0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBzZWxlY3Rfc3lzcm9vdD1gcmVhZGxpbmsgLW0gJHNlbGVjdF9zeXNyb290YAorICBmaQorCisgIGlmIFsgIiRzZWxlY3Rfcm9vdGZzIiAhPSAiIiBdOyB0aGVuCisgICAgaWYgWyAkMiBdOyB0aGVuCisgICAgI2VjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICNlY2hvX2luZm8gIiMgVG8gYmUgZG93bmxvYWRlZCByb290ZnMgaW1hZ2UgZGV0YWlscyBkZWZpbmVkIGluIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgYXJjaGl0ZWN0dXJlOlx0XHQkMSIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IG1hY2hpbmU6XHRcdCRzZWxlY3RfbWFjaGluZSIKKyAgICBlY2hvX2luZm8gIiMgUm9vdF9mcyBpbWFnZXM6XHRcdCRzZWxlY3Rfcm9vdGZzIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgc3lzcm9vdCBpbWFnZTpcdFx0JHNlbGVjdF9zeXNyb290X2ltYWdlIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgc3lzcm9vdCBsb2M6XHRcdCRzZWxlY3Rfc3lzcm9vdCIKKyAgICBlY2hvX2luZm8gIlxuIgorICAgICNlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBlbHNlCisgICAgZ2V0X2ltYWdlICQxICRzZWxlY3RfbWFjaGluZSAkc2VsZWN0X3Jvb3RmcworICAgIGZpCisgIGZpCit9CisKKworCisKKyNNYWluIGJvZHkgb2YgaW5zdGFsbGVyCisKK2NsZWFyCisKK3J1bl9wYXRoPWBkaXJuYW1lICQwYAorY2QgJHJ1bl9wYXRoCisKK2lmIFsgISAtZiAic2NyaXB0cy91dGlsIiBdOyB0aGVuCisgIGVjaG8gLWUgIltBRFRfSU5TVF0gRXJyb3I6IFNjcmlwdCBmaWxlOiB1dGlsLCBjYW4ndCBiZSBmb3VuZCB1bmRlcjogJHJ1bl9wYXRoISIKKyAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCitpZiBbICEgLWYgInNjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCIgXTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBTY3JpcHQgZmlsZTogYWR0X2luc3RhbGxlcl9pbnRlcm5hbCwgY2FuJ3QgYmUgZm91bmQgdW5kZXI6ICRydW5fcGF0aCEiCisgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworY29uZmlnX2ZpbGU9ImFkdF9pbnN0YWxsZXIuY29uZiIKK2lmIFsgISAtZiAiJGNvbmZpZ19maWxlIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogSW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZTogYWR0X2luc3RhbGxlci5jb25mIGlzIG5vdCBmb3VuZCFcbiIKKyAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQuIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworLiBzY3JpcHRzL2RhdGFfZGVmaW5lCisuIHNjcmlwdHMvdXRpbAorCisKK2lmIFsgLWYgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIiBdOyB0aGVuCisgIHJtICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCitmaQorCitlY2hvIC1uICJQbGVhc2UgZW50ZXIgdGhlIGluc3RhbGwgbG9jYXRpb24gKGRlZmF1bHQ6ICRERUZBVUxUX0lOU1RBTExfRk9MREVSKTogIgorcmVhZCBJTlNUQUxMX0ZPTERFUgorCitpZiBbICIkSU5TVEFMTF9GT0xERVIiID0gIiIgXTsgdGhlbgorICAgIElOU1RBTExfRk9MREVSPSRERUZBVUxUX0lOU1RBTExfRk9MREVSCitmaQorCitldmFsIElOU1RBTExfRk9MREVSPSQocHJpbnRmICIlcSIgIiRJTlNUQUxMX0ZPTERFUiIpCitpZiBbIC1kICIkSU5TVEFMTF9GT0xERVIiIF07IHRoZW4KKwlleHBvcnQgSU5TVEFMTF9GT0xERVI9JChjZCAiJElOU1RBTExfRk9MREVSIjsgcHdkKQorZWxzZQorCWV4cG9ydCBJTlNUQUxMX0ZPTERFUj0kKHJlYWRsaW5rIC1tICIkSU5TVEFMTF9GT0xERVIiKQorZmkKKworaWYgWyAtbiAiJChlY2hvICRJTlNUQUxMX0ZPTERFUnxncmVwICcgJykiIF07IHRoZW4KKyAgICAgICBlY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkSU5TVEFMTF9GT0xERVIpIGNvbnRhaW5zIHNwYWNlcy4gQWJvcnQhIgorICAgICAgIGV4aXQgMQorZmkKKworY2xlYXIKKwordXNhZ2UKKwordXNlcl9pbnN0X3R5cGU9IiQ/IgorCit2YWxpZGF0ZV9jb25maWcKK2NoZWNrX3Jlc3VsdAorCisjY2hlY2sgYWR0X3JlcG8gZXhpc3QKK3dnZXQgLS1zcGlkZXIgJFlPQ1RPQURUX1JFUE8gMj4mMSB8IHRlZSAtYSAiJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUiCitpZiBncmVwIC1xICI0MDQgTm90IEZvdW5kIiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9SRVBPIGRvZXMgbm90IGV4aXN0OiAkWU9DVE9BRFRfUkVQTyIKKyAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCisjZmlyc3RseSB3ZSBuZWVkIHRvIGluc3RhbGwgb3BrZyBob3N0CitpbnN0YWxsX29wa2cKKworI0NyZWF0ZSBmb2xkZXJzIGZvciBob2xkaW5nIHJvb3Rmcy9xZW11IGltYWdlcworaWYgWyAhIC1kICIkTE9DQUxfRE9XTkxPQUQiIF07IHRoZW4KKyAgZWNob19pbmZvICJDcmVhdGluZyBuZXcgaW1hZ2VzIGRvd25sb2FkaW5nIGZvbGRlcjogJExPQ0FMX0RPV05MT0FEIC4uLiIKKyAgbWtkaXIgLXAgJExPQ0FMX0RPV05MT0FECitmaQorCisjZG93bmxvYWRpbmcgcmVxdWlyZWQgcWVtdSBpbWFnZXMvcm9vdGZzCitpZiBbICIkdXNlcl9pbnN0X3R5cGUiID09ICIwIiBdOyB0aGVuCisgIG92ZXJyaWRlX29sZGZpbGU9MQorZWxzZQorICBvdmVycmlkZV9vbGRmaWxlPTAKK2ZpCisKK2ZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIGRvd25sb2FkX2ltYWdlcyAkYXJjaF90eXBlCitkb25lCisKK3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCAkdXNlcl9pbnN0X3R5cGUKKworcmVzdWx0PSIkPyIKKyNlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgoraWYgWyAiJHJlc3VsdCIgPT0gIjAiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFlvY3RvIEFEVCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyLmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2ZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mCkBAIC0wLDAgKzEsNzUgQEAKKyMgWW9jdG8gQURUIEluc3RhbGxlciBDb25maWd1cmF0aW9uIEZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKKworIyBZb3VyIHlvY3RvIGRpc3RybyByZXBvc2l0b3J5LCB0aGlzIHNob3VsZCBpbmNsdWRlIElQS0cgYmFzZWQgcGFja2FnZXMgYW5kIHJvb3QgZmlsZXN5c3RlbSBmaWxlcyB3aGVyZSB0aGUgaW5zdGFsbGF0aW9uIGlzIGJhc2VkIG9uCisKK1lPQ1RPQURUX1JFUE89IkFEVFJFUE8iCisKKyMgVGhlIGZvbGxvd2luZyBhcmUgZm9yIHN5c3RlbSB3aWRlIHNldHVwCisjIFRhcmdldCBhcmNoaXRlY3R1cmVzIHRoYXQgeW91IHdhbnQgdG8gc2V0dXAgaG9zdCBjcm9zcyBkZXYgZW52aXJvbm1lbnQgZm9yCisjIHZhbGlkIHZhbHVlcyBhcmU6IGFybSwgeDg2LCB4ODZfNjQsIHBwYywgbWlwcyB3aXRoIHNwYWNlIHNlcGFyYXRpb24gYmV0d2VlbiBlbnRyaWVzCitZT0NUT0FEVF9UQVJHRVRTPSJhcm0geDg2IgorIyBXaGV0aGVyIGluc3RhbGwgcWVtdSBvciBub3QsIHZhbGlkIGVudHJpZXMgYXJlOiBZL04KK1lPQ1RPQURUX1FFTVU9IlkiCisjIFdoZXRoZXIgaW5zdGFsbCB1c2VyLW1vZGUgbmZzIG9yIG5vdCwgdmFsaWQgZW50cmllcyBhcmU6IFkvTi4gIElmIHlvdSB3YW50IHRvIHVzZSBZb2N0byBFY2xpcHNlIHBsdWctaW4gYXMgeW91ciBkZXYgSURFLCB5b3UgbmVlZCB0byBzZWxlY3QgYm90aCBxZW11IGFuZCBORlMKK1lPQ1RPQURUX05GU19VVElMPSJZIgorCisjIFRoZXNlIDIgdmFsdWVzIHdpbGwgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXJ0dXJlIGluc3RhbGxlcgorI1lPQ1RPQURUX0JJVEJBS0U9IlkiCisjWU9DVE9BRFRfTUVUQURBVEE9IlkiCisKKyNUaGUgZm9sbG93aW5ncyBhcmUgZm9yIHNldHRpbmcgdXAgc3BlY2lmaWMgdGFyZ2V0IGFyY2hpdGVjdHVyZQorI1lPQ1RPQURUX1JPT1RGU18kYXJjaCBpcyBmb3Igc3BlY2lmeWluZyB3aGF0IHJvb3QgZmlsZXN5c3RlbSBpbWFnZSBmaWxlcyB5b3Ugd2FudCB0byBkb3dubG9hZCBmcm9tIHRoZSByZXBvc2l0b3J5LiBUaGUgdmFsaWQgdmFsdWVzIHRvIHJlcGxhY2UgJGFyY2ggYXJlOiBhcm0sIHg4NiwgeDg2XzY0LCBwb3dlcnBjLCBtaXBzLiAgVGhlIHZhbGlkIGltYWdlIGZpbGVzIGFyZTogbWluaW1hbCwgbWluaW1hbC1kZXYsIHNhdG8sIHNhdG8tZGV2LCBzYXRvLXNkayxsc2IsIGxzYi1kZXYsIGxzYi1zZGsuICBJZiB5b3Ugd2FudCB0byBkb3dubG9hZCBtdWx0aXBsZSBpbWFnZXMsIHRoZSBlbnRyaWVzIGFyZSBzcGFjZSBzZXBhcmF0ZWQKK1lPQ1RPQURUX1JPT1RGU19hcm09Im1pbmltYWwgc2F0by1zZGsiCisjU3BlY2lmeSB3aGljaCByb290IGZpbGVzeXN0ZW0gZmlsZSB0byB1c2UgdG8gZXh0cmFjdCBhcyB0YXJnZXQgc3lzcm9vdC4gIFBsZWFzZSBlbnN1cmUgdGhlIGVudHJ5IGlzIGluIHRoZSBsaXN0IG9mIGRvd25sb2FkZWQgcm9vdCBmaWxlc3lzdGVtIGZpbGVzIHRoYXQgc3BlY2lmaWVkIGFib3ZlIGluIFlPQ1RPQURUX1JPT1RGU18kYXJjaAorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfYXJtPSJzYXRvLXNkayIKKyNUaGUgbWFjaGluZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZG93bmxvYWQgdGhlIGltYWdlLiBFYWNoIG1hY2hpbmUgbWlnaHQgaGF2ZQorI2RpZmZlcmVudCBjb21waWxhdGlvbiBvcHRpb25zIGluIG9yZGVyIHRvIHNlbGVjdCBjZXJ0YWluIGhhcmR3YXJlIG1vZGVscyBvcgorI2NvbmZpZ3VyYXRpb25zCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9hcm09InFlbXVhcm0iCisjVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSB0YXJnZXQgc3lzcm9vdCB3aWxsIGJlIHNldHVwCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfYXJtPSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9hcm0iCisKKworI0hlcmUncyBhIHRlbXBsYXRlIGZvciBzZXR0aW5nIHVwIHRhcmdldCBhcmNoIG9mIHg4NiAKK1lPQ1RPQURUX1JPT1RGU194ODY9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfeDg2PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4Nj0icWVtdXg4NiIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ194ODY9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4NiIKKworI0hlcmUncyBzb21lIHRlbXBsYXRlIG9mIG90aGVyIGFyY2hlcywgd2hpY2ggeW91IG5lZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBpbiAiIgorWU9DVE9BRFRfUk9PVEZTX3g4Nl82ND0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV94ODZfNjQ9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2XzY0PSJxZW11eDg2LTY0IgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX3g4Nl82ND0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2XzY0IgorCitZT0NUT0FEVF9ST09URlNfcHBjPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX3BwYz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9wcGM9InFlbXVwcGMiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfcHBjPSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9wcGMiCisKK1lPQ1RPQURUX1JPT1RGU19taXBzPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX21pcHM9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfbWlwcz0icWVtdW1pcHMiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfbWlwcz0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfbWlwcyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyN2IzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYKQEAgLTAsMCArMSw2IEBACithcmNoIGFsbCAxCithcmNoIGFueSA2CithcmNoIG5vYXJjaCAxMQorYXJjaCBpNjg2LW5hdGl2ZXNkayAxNgorc3JjIHlwLWk2ODYtbmF0aXZlc2RrIEFEVFJFUE9fVVJML2FkdC1pcGsvaTY4Ni1uYXRpdmVzZGsKK3NyYyB5cC1pNjg2LWFsbCBBRFRSRVBPX1VSTC9hZHQtaXBrL2FsbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1MDRhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYKQEAgLTAsMCArMSw2IEBACithcmNoIGFsbCAxCithcmNoIGFueSA2CithcmNoIG5vYXJjaCAxMQorYXJjaCB4ODZfNjQtbmF0aXZlc2RrIDE2CitzcmMgeXAteDg2XzY0LW5hdGl2ZXNkayBBRFRSRVBPX1VSTC9hZHQtaXBrL3g4Nl82NC1uYXRpdmVzZGsKK3NyYyB5cC14ODZfNjQtYWxsIEFEVFJFUE9fVVJML2FkdC1pcGsvYWxsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjVmYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbApAQCAtMCwwICsxLDMxMiBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitwYXJzZV9jb25maWcoKQoreworICBJTlNUX0FSQ0g9YHVuYW1lIC1tYAorCisgIGNhc2UgJElOU1RfQVJDSCBpbiAKKyAgaVszLTZdODYpCisgICAgT1BLR19DT05GSUdfRklMRT0kWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfMzIKKyAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiRJTlNUQUxMX0ZPTERFUi9zeXNyb290cy8kSU5TVF9BUkNIJFNES19WRU5ET1ItbGludXgvIgorICAgIDs7CisgIHg4Nl82NCkKKyAgICBPUEtHX0NPTkZJR19GSUxFPSRZT0NUT0FEVF9PUEtHX0NPTkZfRklMRV82NAorICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD0iJElOU1RBTExfRk9MREVSL3N5c3Jvb3RzL3g4Nl82NCRTREtfVkVORE9SLWxpbnV4LyIKKyAgICA7OworICAqKQorICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogSW5zdGFsbGF0aW9uIE1hY2hpbmUgaXMgbm90IHN1cHBvcnRlZCEiCisgICAgZXhpdCAtMQorICAgIDs7CisgIGVzYWMKK30KKworZ2V0X3N1ZG9fYXBwKCkKK3sKKyAgdXNlcm5hbWU9JChpZCAtbnUpCisKKyAgIyBmaW5kIHRoZSBvd25lciBvZiB0aGUgcGFyZW50CisgIGRpcj0kMQorICB3aGlsZSBbIDEgXTsgZG8KKyAgICAgIGlmIFsgLWQgJGRpciBdOyB0aGVuCisgICAgICAgICAgb3duZXI9JChzdGF0IC1jICVVICRkaXIpCisgICAgICAgICAgYnJlYWsKKyAgICAgZWxzZQorICAgICAgICAgIGRpcj0kKGRpcm5hbWUgJGRpcikKKyAgICAgZmkKKyAgZG9uZQorCisgIGlmIFsgIiRvd25lciIgPSAiJHVzZXJuYW1lIiBdOyB0aGVuCisgICAgICB0cnVlCisgIGVsc2UKKyAgICAgIGVjaG8gc3VkbworICBmaQorfQorCisjIHRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhcmNoX3R5cGUgKHg4NiwgeDg2XzY0LCBhcm0sIHBwYywgbWlwcykgYXMgdGhlIGZpcnN0CisjIGFyZ3VtZW50LCByZXR1cm5pbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSB0YXJnZXQgcm9vdGZzCitnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbigpIHsKKwlbIC16ICIkMSIgXSAmJiByZXR1cm4KKworCWFyY2hfdHlwZT0kMQorCSMgcm9vdGZzIGV4dHJhY3Rpb24gZGlyZWN0b3J5CisJdGFyZ2V0X3N5c3Jvb3RfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ18kYXJjaF90eXBlIgorCXRhcmdldF9zeXNyb290PWBldmFsIGVjaG8gJHRhcmdldF9zeXNyb290X3ZhcmAKKworCWlmIFsgIiR0YXJnZXRfc3lzcm9vdCIgPT0gIiIgXTsgdGhlbgorCQlyZXR1cm4KKwllbHNlCisJCWVjaG8gImByZWFkbGluayAtbSAkdGFyZ2V0X3N5c3Jvb3RgIgorCWZpCit9CisKKworI2xldCB1cyBpbnN0YWxsIGEgcWVtdS1uYXRpdmUgZmlyc3RseQorI2luc3RhbGxhdGlvbiBzdGVwIDIKK2luc3RhbGxfbmF0aXZlX3NkaygpCit7CisKK2VjaG9faW5mbyAiXG5TdGFydCBpbnN0YWxsaW5nIHNlbGVjdGVkIG5hdGl2ZSBBRFQgZm9yIGFyY2hzOiAkWU9DVE9BRFRfVEFSR0VUUy4uLiIKKworIyB3aGVyZSB0aGUgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KK05BVElWRV9JTlNUQUxMX0RJUj0kSU5TVEFMTF9GT0xERVIKKworaWYgWyAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5OYXRpdmUgQURUIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgXCIkSU5TVEFMTF9GT0xERVJcIiBhbHJlYWR5IGV4aXN0cyEgQ29udGludWUgaW5zdGFsbGF0aW9uIHdpbGwgb3ZlcnJpZGUgaXRzIGNvbnRlbnRzISIKKyAgY29uZmlybV9pbnN0YWxsICQxCitmaQorCisjTm93IGJlZ2luIHRvIGluc3RhbGwgbmF0aXZlIHNkayBhbmQgZXh0cmFjdCBxZW11IHJvb3RmcyB3aGljaCBuZWVkcyBwcml2aWxlZ2UgcmlnaHRzCisjZGVwZW5kaW5nIG9uIHRoZSBpbnN0YWxsIGxvY2F0aW9uCitTVURPPSQoZ2V0X3N1ZG9fYXBwICROQVRJVkVfSU5TVEFMTF9ESVIpCitpZiBbIC1uICIkU1VETyIgXTsgdGhlbgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIlBsZWFzZSBub3RlIGZyb20gdGhpcyBwb2ludCBvbiBpbnN0YWxsYXRpb24gcmVxdWlyZXMgc3VkbyBwYXNzd29yZCAuLi4iCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCitmaQorCisjd2UgbmVlZCB0byBtYWtlIHRoaXMgZGlyZWN0b3J5IGZpcnN0bHkgc2luY2Ugb3BrZyBuZWVkIHRvIHVzZSBpdC4KK09QS0dfTE9DS19ESVI9IiROQVRJVkVfSU5TVEFMTF9ESVIvJE9QS0dfTElCRElSL29wa2ciCitpZiBbICEgLWQgIiRPUEtHX0xPQ0tfRElSIiBdOyB0aGVuCisgICRTVURPIG1rZGlyIC1wICRPUEtHX0xPQ0tfRElSCisgIGVjaG9faW5mbyAiU3VjY2Vzc2Z1bGx5IGNyZWF0ZSBkaXJlY3RvcnkgJE9QS0dfTE9DS19ESVIuICIKKyNpZiB1c2VyIGRlbGV0ZSAvb3B0L3h4eCwgd2hpbGUgZGFuZ2xpbmcgZm9sZGVycyB0aGVyZSwgcmVwb3J0IGVycm9yCitlbGlmIFsgISAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5EYW5nbGluZyBvcGtnIGNhY2hlIGZvbGRlciAkT1BLR19MT0NLX0RJUiBkZXRlY3RlZC4gQ29udGludWUgaW5zdGFsbGF0aW9uIHdpbGwgcmVtb3ZlIHRoZSBmb2xkZXIhIgorICBjb25maXJtX2luc3RhbGwgJDEKKyAgJFNVRE8gcm0gLXJmICRPUEtHX0xPQ0tfRElSCisgICRTVURPIG1rZGlyIC1wICRPUEtHX0xPQ0tfRElSCisjaWYgdXNlciBhcmUgdXBkYXRpbmcgaW5zdGFsbGluZywganVzdCBsZXQgaGltL2hlciBnbywgZ2l2ZSBoZXIvaGltIHByb21wdAorZWxzZQorICBlY2hvX2luZm8gIkFEVCBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZC4gV2lsbCB1cGRhdGUgaXRzIGNvbnRlbnRzLi4uIgorZmkKKworI2ZpcnN0IHVwZGF0ZSByZXBvc2l0b3J5CitpZiBbICJ4JFNVRE8iID0gIngiIF07IHRoZW4KKyAgICBPUEtHX0NNRD0iJExPQ0FMX09QS0dfTE9DL2Jpbi9vcGtnIgorZWxzZQorICAgIE9QS0dfQ01EPSJzdWRvIC1FICRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIKK2ZpCisKK2VjaG9faW5mbyAiVXBkYXRpbmcgb3BrZy4uLiIKKyRPUEtHX0NNRCAtZiAkT1BLR19DT05GSUdfRklMRSAtbyAkTkFUSVZFX0lOU1RBTExfRElSIHVwZGF0ZSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKK2NoZWNrX3Jlc3VsdAorZWNob19pbmZvICJvcGtnIHVwZGF0ZSBwcm9jZXNzIGVuZGVkLi4uIgorCisjaW5zdGFsbCBiZWxvdyBtdXN0IHNkay1ob3N0IHBhY2thZ2VzCitPUEtHX0lOU1RBTExfQ01EPSIkT1BLR19DTUQgIgorT1BLR19JTlNUQUxMX05BVElWRV9DTUQ9IiRPUEtHX0lOU1RBTExfQ01EICAtLWZvcmNlLW92ZXJ3cml0ZSAtZiAkT1BLR19DT05GSUdfRklMRSAtbyAkTkFUSVZFX0lOU1RBTExfRElSIGluc3RhbGwiCisKK0JBU0VfSE9TVFNES19QS0dOQU1FUz0icHNldWRvIG9wa2cgcGtnY29uZmlnIGxpYnRvb2wgYXV0b2NvbmYgYXV0b21ha2UiCitmb3IgcGtnIGluICRCQVNFX0hPU1RTREtfUEtHTkFNRVM7IGRvCisgIGVjaG9faW5mbyAiSW5zdGFsbGluZyAke3BrZ30gbmF0aXZlc2RrIC4uLlxuIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLSR7cGtnfSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0Citkb25lCisKK2ZvciB0YXJnZXRfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJHRhcmdldF90eXBlIgorICBtYWNoaW5lPWBldmFsIGVjaG8gJG1hY2hpbmVfdmFyYAorICBlY2hvX2luZm8gIkluc3RhbGxpbmcgY3Jvc3MgY2FuYWRpYW4gcGFja2FnZXMgZm9yICRtYWNoaW5lIC4uLiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0kbWFjaGluZSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisKKyAgdGFyZ2V0X3N5c3Jvb3Q9YGdldF90YXJnZXRfcm9vdGZzX2xvY2F0aW9uICR0YXJnZXRfdHlwZWAKKyAgWyAteiAiJHRhcmdldF9zeXNyb290IiBdICYmIGNvbnRpbnVlCisKKyAgIyBnZXQgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBwYXRoczogb3JpZ2luYWwgKHRoZSBvbmUgYmVmb3JlIHJlbG9jYXRpb24pCisgICMgYW5kIHJlbG9jYXRlZAorICBlbnZfc2NyaXB0X29yaWdpbmFsPWAkT1BLR19DTUQgLWYgJE9QS0dfQ09ORklHX0ZJTEUgLW8gJE5BVElWRV9JTlNUQUxMX0RJUiBmaWxlcyBtZXRhLWVudmlyb25tZW50LSRtYWNoaW5lfFwKKwkJCQkJCQlncmVwIGVudmlyb25tZW50LXNldHVwYAorICBlbnZfc2NyaXB0X3JlbG9jYXRlZD0kSU5TVEFMTF9GT0xERVIvJHtlbnZfc2NyaXB0X29yaWdpbmFsIyMqL30KKworICAjIG9wa2cgd2lsbCBub3QgaW5zdGFsbCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4gcGFja2FnZSBpZiBpdCB3YXMgYWxyZWFkeQorICAjIGluc3RhbGxlZC4gU28sIHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgaXMgaW4gb25lIHBsYWNlIG9yIHRoZSBvdGhlci4KKyAgWyAtZSAiJElOU1RBTExfRk9MREVSLyRlbnZfc2NyaXB0X29yaWdpbmFsIiBdICYmIGVudl9zY3JpcHQ9JElOU1RBTExfRk9MREVSLyRlbnZfc2NyaXB0X29yaWdpbmFsCisgIFsgLWUgIiRlbnZfc2NyaXB0X29yaWdpbmFsIiBdICYmIGVudl9zY3JpcHQ9JGVudl9zY3JpcHRfb3JpZ2luYWwKKyAgWyAtZSAiJGVudl9zY3JpcHRfcmVsb2NhdGVkIiBdICYmIGVudl9zY3JpcHQ9JGVudl9zY3JpcHRfcmVsb2NhdGVkCisKKyAgJFNVRE8gc2VkIC1pIC1lICJzJVNES1RBUkdFVFNZU1JPT1Q9LiolU0RLVEFSR0VUU1lTUk9PVD0kdGFyZ2V0X3N5c3Jvb3QlZyIgJGVudl9zY3JpcHQKK2RvbmUKKworaWYgWyAiJFlPQ1RPQURUX1FFTVUiID09ICJZIiBdIHx8IFsgIiRZT0NUT0FEVF9RRU1VIiA9PSAieSIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuSW5zdGFsbGluZyBxZW11IG5hdGl2ZSAuLi4iCisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstcWVtdSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstcWVtdS1oZWxwZXIgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorZmkKKworaWYgWyAiJFlPQ1RPQURUX05GU19VVElMIiA9PSAiWSIgXSB8fCBbICIkWU9DVE9BRFRfTkZTX1VUSUwiID09ICJ5IiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5JbnN0YWxsaW5nIHVuZnMgLi4uIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLXVuZnMzICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKK2ZpCisKKyMgTG9zZSB0aGUgLi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IHBhcnQsIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGtlZXAKKyMgdGhlIGVudGlyZSBkaXJlY3Rvcnkgc3RydWN0dXJlLiBXZSBjb3VsZCBwYXRjaCBvcGtnIHRvIGRvIHRoYXQgYnV0IGl0J3MgZmFyCisjIHNpbXBsZXIgdG8gZG8gdGhhdCBoZXJlIGFuZCBhY2hpZXZlIHRoZSBzYW1lIHJlc3VsdC4KKyMgVGhpcyBpcyBkb25lIGluIHR3byBzdGVwczoKK2lmIFsgLWQgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUiBdOyB0aGVuCisgICAgIyBTdGVwIDE6IGNvcHkgLi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IGNvbnRlbnRzIHRvICROQVRJVkVfSU5TVEFMTF9ESVIuCisgICAgIyBXZSBjYW5ub3QgdXNlIG1vdmUgaWYgJE5BVElWRV9JTlNUQUxMX0RJUiBpcyBub3QgZW1wdHkgKGZvciBleGFtcGxlOiBjb250YWlucworICAgICMgYW5vdGhlciBTREspCisgICAgJFNVRE8gY3AgLXIgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUi8qICROQVRJVkVfSU5TVEFMTF9ESVIKKworICAgICMgZGVsZXRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG5vdworICAgICRTVURPIHJtIC1yZiAkTkFUSVZFX0lOU1RBTExfRElSLyRERUZBVUxUX0lOU1RBTExfRk9MREVSLyoKKworICAgICMgU3RlcCAyOiBEZWxldGUgdGhlIC4vb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSBkaXJlY3RvcmllcyB0b28sIHRoZXkgc2hvdWxkIGJlIGVtcHR5CisgICAgZGlyPSROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIKKyAgICB3aGlsZSBbICIkZGlyIiAhPSAiJE5BVElWRV9JTlNUQUxMX0RJUiIgXTsgZG8KKyAgICAgICAgIyBpZiB0aGUgdXNlciBjaG9zZSAvIGFzIHRoZSBpbnN0YWxsIGZvbGRlciwgdGhlbiB3ZSBzaG91bGQgbGVhdmUgL29wdCBpbiBwbGFjZQorICAgICAgICBpZiBbICIkZGlyIiA9ICIvb3B0IiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorCisgICAgICAgICMgdHJ5IHRvIGRlbGV0ZSB0aGUgZGlyZWN0b3J5LCBvbmx5IGlmIGl0J3MgZW1wdHkKKyAgICAgICAgJFNVRE8gcm1kaXIgJGRpcgorICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisKKyAgICAgICAgIyBnbyB0byB0aGUgbmV4dCBkaXJlY3RvcnkKKyAgICAgICAgZGlyPSQoZGlybmFtZSAkZGlyKQorICAgIGRvbmUKKyAgICAjIFN0ZXAgMzogUmV3cml0ZSB0aGUgKi5saXN0IGZpbGVzIHRvIGNvbnRhaW4gdGhlIGNvcnJlY3QgcGF0aHMKKyAgICAkU1VETyBmaW5kICROQVRJVkVfSU5TVEFMTF9ESVIvdmFyL2xpYi9vcGtnIC10eXBlIGYgLWV4ZWMgc2VkIC1pIC1lICcjXiRERUZBVUxUX0lOU1RBTExfRk9MREVSIyROQVRJVkVfSU5TVEFMTF9ESVIjJyB7fSBcOworZmkKKworIyBMaW5rIHRoZSBsZC5zby5jYWNoZSBmaWxlIGludG8gdGhlIGhvc3RzIGZpbGVzeXN0ZW0KK2lmIFsgISAtZiAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9ldGMvbGQuc28uY2FjaGUiIF07IHRoZW4KK2VjaG9faW5mbyAiTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0IGZpbGVzeXN0ZW0iCiskU1VETyBsbiAtcyAvZXRjL2xkLnNvLmNhY2hlICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZXRjL2xkLnNvLmNhY2hlCitjaGVja19yZXN1bHQKK2ZpCisKKyMgcmVsb2NhdGUgYmluYXJpZXMKK2VjaG9faW5mbyAiXG5SZWxvY2F0aW5nIGJpbmFyaWVzIC4uLiIKK2VzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJERFRkFVTFRfSU5TVEFMTF9GT0xERVIgfHNlZCAtZSAiczpbXCtcLl06XFxcXFxcXFxcMDpnIikKKworIyBXZSBkb24ndCBjaGFuZ2UgdGhlIHNjcmlwdCBpbi1wbGFjZSBzaW5jZSB3ZSBtYXkgd2FudCB0aGUgdXNlciB0byByZS1ydW4KKyMgYWR0LWluc3RhbGxlciBzY3JpcHQKK3NlZCAtZSAiczojI0RFRkFVTFRfSU5TVEFMTF9ESVIjIzokZXNjYXBlZF9zZGtwYXRoOiIgc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgPiBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkKK2NobW9kICt4IHNjcmlwdHMvcmVsb2NhdGVfc2RrX3RtcC5weQorCitkbF9wYXRoPSQoZmluZCAkT0VDT1JFX05BVElWRV9TWVNST09UL2xpYiAtbmFtZSAibGQtbGludXgqIikKK2V4ZWN1dGFibGVfZmlsZXM9JChmaW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgLXR5cGUgZiAtcGVybSAvMTExKQorCiskU1VETyBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkgJElOU1RBTExfRk9MREVSICRkbF9wYXRoICRleGVjdXRhYmxlX2ZpbGVzCitjaGVja19yZXN1bHQKKworIyByZXBsYWNlIC9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IHdpdGggdGhlIGluc3RhbGwgZm9sZGVyIGluIGFsbCBjb25maWdzCitlbnZfc2V0dXBfc2NyaXB0PSQoZmluZCAkTkFUSVZFX0lOU1RBTExfRElSLyAtbmFtZSAiZW52aXJvbm1lbnQtc2V0dXAtKiIpCiskU1VETyBzZWQgLWkgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9GT0xERVI6JE5BVElWRV9JTlNUQUxMX0RJUjpnIiAkZW52X3NldHVwX3NjcmlwdAorCitmaW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgLXR5cGUgZiAtZXhlYyBmaWxlICd7fScgXDsgfCBncmVwICI6LipcKEFTQ0lJXHxzY3JpcHRcfHNvdXJjZVwpLip0ZXh0IiB8IFwKKyAgICBjdXQgLWQnOicgLWYxIHwgeGFyZ3MgJFNVRE8gc2VkIC1pIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6ZyIKKworIyBjaGFuZ2UgYWxsIHN5bWxpbmtzIHBvaW50aW5nIHRvIC9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059Citmb3IgbCBpbiAkKGZpbmQgJE5BVElWRV9JTlNUQUxMX0RJUiAtdHlwZSBsKTsgZG8KKyAgICAkU1VETyBsbiAtc2ZuICQocmVhZGxpbmsgJGx8c2VkIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6IikgJGwKK2RvbmUKKworIyBmaW5kIG91dCBhbGwgcGVybCBzY3JpcHRzIGluICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgYW5kIG1vZGlmeSB0aGVtCisjIHJlcGxhY2luZyB0aGUgaG9zdCBwZXJsIHdpdGggU0RLIHBlcmwuCitmb3IgcGVybF9zY3JpcHQgaW4gJCgkU1VETyBncmVwIC1tIDEgIl4jIS4qcGVybCIgLXJsICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QpOyBkbworICAgICRTVURPIHNlZCAtaSAtZSAiczpeIyEgKi91c3IvYmluL3BlcmwuKjojISAvdXNyL2Jpbi9lbnYgcGVybDpnIiAtZSBcCisgICAgICAgICJzOiAvdXNyL2Jpbi9wZXJsOiAvdXNyL2Jpbi9lbnYgcGVybDpnIiAkcGVybF9zY3JpcHQKK2RvbmUKKworZWNob19pbmZvICJcblN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgc2VsZWN0ZWQgbmF0aXZlIEFEVCEiCit9CisKKyNOZWVkIHRocmVlIGlucHV0IHBhcmFtcywgJDEgLS0gYXJjaF90eXBlKGFybSBwb3dlcnBjIHg4NiBtaXBzKSAjMiAtLSB1c2VyIGluc3RhbGxhdGlvbiB0eXBlCisjY3VzdG9tZXIgb3Igc2NpbGVudAorCitpbnN0YWxsX3RhcmdldCgpCit7CisKK3RhcmdldF9zeXNyb290PWBnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbiAkMWAKK1sgLXogIiR0YXJnZXRfc3lzcm9vdCIgXSAmJiByZXR1cm4gMAorCit0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEiCit0YXJnZXRfc3lzcm9vdF9pbWFnZT1gZXZhbCBlY2hvICR0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXJgCitpZiBbICIkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UiID09ICIiIF07IHRoZW4KKyAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kMSBzZWxlY3Rpb24gaXMgZW1wdHksIGZhaWxlZCB0byBjcmVhdGUgdGFyZ2V0IHN5c3Jvb3QhIgorICByZXR1cm4gMQorZmkKKworZWNob19pbmZvICJJbnN0YWxsaW5nIHRhcmdldCBzeXNyb290IGZvciBhcmNoOiAkMSwgcm9vdGZzIHR5cGU6ICR0YXJnZXRfc3lzcm9vdF9pbWFnZSwgbG9jYXRpb246ICR0YXJnZXRfc3lzcm9vdCIKKwordGFyZ2V0X21hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyQxIgordGFyZ2V0X21hY2hpbmU9YGV2YWwgZWNobyAkdGFyZ2V0X21hY2hpbmVfdmFyYAorc3lzcm9vdF9pbWFnZV9uYW1lPSJjb3JlLWltYWdlLSR0YXJnZXRfc3lzcm9vdF9pbWFnZS0kdGFyZ2V0X21hY2hpbmUudGFyLmJ6MiIKKyAgICAjZWNob19pbmZvICJFeHRyYWN0aW5nIHJvb3RmczogJHN5c3Jvb3RfaW1hZ2VfbmFtZSwgdXNpbmcgcHNldWRvLi4uIgorCisjIHN1ZG8gcGFzc3dvcmQgbWlnaHQgYmUgbmVlZGVkIHRvIGluc3RhbGwgdGhlIHRhcmdldCBzeXNyb290CitTVURPPSQoZ2V0X3N1ZG9fYXBwICR0YXJnZXRfc3lzcm9vdCkKKworJFNVRE8gc2NyaXB0cy9leHRyYWN0X3Jvb3RmcyAkc3lzcm9vdF9pbWFnZV9uYW1lICR0YXJnZXRfc3lzcm9vdCAkT0VDT1JFX05BVElWRV9TWVNST09UICR1c2VyX2luc3RfdHlwZQorY2hlY2tfcmVzdWx0Cit9CisKKworI01haW4gcGFydAorLiBzY3JpcHRzL2RhdGFfZGVmaW5lCisuIHNjcmlwdHMvdXRpbAorCitwYXJzZV9jb25maWcKKworI3NlY29uZGx5IHdlIHdpbGwgc3RhcnQgdG8gaW5zdGFsbCBuYXRpdmUgdG9vbHMKK3VzZXJfaW5zdF90eXBlPSQxCitpbnN0YWxsX25hdGl2ZV9zZGsgJHVzZXJfaW5zdF90eXBlCitjaGVja19yZXN1bHQKKworZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgaW5zdGFsbF90YXJnZXQgJGFyY2hfdHlwZQorICBjaGVja19yZXN1bHQKK2RvbmUKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2RhdGFfZGVmaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDY3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZQpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vYmFzaAorCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKK2NvbmZpZ19maWxlPSJhZHRfaW5zdGFsbGVyLmNvbmYiCitzb3VyY2UgYHB3ZGAvJGNvbmZpZ19maWxlCisKK0xPQ0FMX09QS0dfTE9DPSIuL29wa2cvYnVpbGQvb3BrZyIKK0xPQ0FMX09QS0dfRk9MREVSPSIuL29wa2cvYnVpbGQiCisKKyMgTGlzdCBhbGwgc3VwcG9ydGVkIHJvb3QgZnMgdHlwZXMgYW5kIHRhcmdldCB0eXBlcywKKyMgaXQgd2lsbCBiZSB1c2VkIGluIHVzZXIgY29uZmlndXJhdGlvbiB2YWxpZGl0eSBjaGVja2luZworWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUz0ibWluaW1hbCBtaW5pbWFsLWRldiBzYXRvIHNhdG8tZGV2IHNhdG8tc2RrIGxzYiBsc2ItZGV2IGxzYi1zZGsiCitZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUz0ieDg2IHg4Nl82NCBhcm0gcHBjIG1pcHMiCisjIERpZmZlcmVudCBob3N0ICgzMiBiaXQgb3IgNjQgYml0KSB3aWxsIGhhdmUgZGlmZmVyZW50IG9wa2cKKyMgY29uZmlndXJhdGlvbiBmaWxlcworWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfMzI9Ii4vb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZiIKK1lPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzY0PSIuL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZXh0cmFjdF9yb290ZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDFhNTk1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworZXh0cmFjdF9yb290ZnMoKQoreworCisgIG5hdGl2ZV9zeXNyb290PSQzCisgIHRhcmdldF9zeXNyb290PSQyCisgIFBTRVVET19DT01NQU5EPSIkbmF0aXZlX3N5c3Jvb3QvdXNyL2Jpbi9wc2V1ZG8iCisgIFRBUl9PUFRTPSIteGpmIgorICBQU0VVRE9fT1BUUz0iLVAgJG5hdGl2ZV9zeXNyb290L3VzciIKKworCisgIHJtIC1yZiAkUFNFVURPX0xPQ0FMU1RBVEVESVIKKworICBpZiBbIC1kICIkdGFyZ2V0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIlxuVGFyZ2V0IHN5c3Jvb3QgbG9jYXRpb246ICR0YXJnZXRfc3lzcm9vdCwgYWxyZWFkeSBleGlzdHMhIElmIHlvdSBjb250aW51ZSBpbnN0YWxsYXRpb24sIHRoaXMgZm9sZGVyIHdpbGwgYmUgcmUtY3JlYXRlZC4iCisgICAgY29uZmlybV9pbnN0YWxsICQ0CisgICAgcm0gLXJmICIkdGFyZ2V0X3N5c3Jvb3QiCisgIGZpCisKKyAgaWYgWyAhIC1kICIkdGFyZ2V0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIkNyZWF0aW5nIGRpcmVjdG9yeSAkdGFyZ2V0X3N5c3Jvb3QuLi4iCisgICAgbWtkaXIgLXAgIiR0YXJnZXRfc3lzcm9vdCIKKyAgZmkKKworICBwc2V1ZG9fc3RhdGVfZGlyPSIkdGFyZ2V0X3N5c3Jvb3QvLi4vJChiYXNlbmFtZSAiJHRhcmdldF9zeXNyb290IikucHNldWRvX3N0YXRlIgorICBta2RpciAtcCAiJHBzZXVkb19zdGF0ZV9kaXIiCisgIHRvdWNoICIkcHNldWRvX3N0YXRlX2Rpci9wc2V1ZG8ucGlkIgorICBQU0VVRE9fTE9DQUxTVEFURURJUj0iJHBzZXVkb19zdGF0ZV9kaXIiCisgIGV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgorCisgIGVjaG9faW5mbyAiRXh0cmFjdGluZyByb290ZnM6ICQxLCB1c2luZyBwc2V1ZG8uLi4iCisgICRQU0VVRE9fQ09NTUFORCAkUFNFVURPX09QVFMgdGFyIC1DICQyICIkVEFSX09QVFMiICRMT0NBTF9ET1dOTE9BRC8kMSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0Cit9CisKKyNNYWluIHBhcnQKKy4gc2NyaXB0cy91dGlsCisKKyNQYXJhbWV0ZXIgZGV0YWlsIGlzIGxpc3RlZCBiZWxvdzoKKyNQYXJhbSA0OiBTaWxlbnQgaW5zdGFsbCBvciBjdXN0b21pemUgaW5zdGFsbAorI1BhcmFtIDM6IE9FQ09SRV9OQVRJVkVfU1lTUk9PVAorI1BhcmFtIDI6IHVzZXIgZGVmaW5lZCByb290ZnMgZXh0cmFjdGlvbiBkaXJlY3RvcnkKKyNwYXJhbSAxOiBzeXNyb290IGltYWdlIG5hbWUKK2V4dHJhY3Rfcm9vdGZzICQxICQyICQzICQ0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy91dGlsIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU3NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitlY2hvX2luZm8oKQoreworICBlY2hvIC1lICQxIHwgdGVlIC1hICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCit9CisKK3NlbGVjdF9pbnN0YWxsX3R5cGUoKQoreworIyBJZiBjaG9vc2luZyBzaWxlbnQgaW5zdGFsbCwgYWxsIG9sZGVyIGluc3RhbGxhdGlvbiBkYXRhIHdpbGwgYmUKKyMgb3ZlcnJpZGVuIHdpdGhvdXQgdXNlcidzIGludGVyYWN0aW9uCit3aGlsZSB0cnVlOyBkbworICAjZWNob19pbmZvICJbQURUX0lOU1RdIFNpbGVudCBpbnN0YWxsIG1lYW5zIG92ZXJyaWRlcyBhbGwgZXhpc3Rpbmcgb2xkZXIiCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gZGF0YSBhbmQgdGhlIGluc3RhbGxhdGlvbiBuZWVkcyBsZWFzdCB1c2VyIGludGVyYWN0aW9uIgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIElmIHlvdSB3YW50IHRvIHVzZSBzaWxlbnQgaW5zdGFsbGF0aW9uLCBwbGVhc2UgZW50ZXIgUzoiCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIGluc3RhbGxhdGlvbiwgcGxlYXNlIGVudGVyIEM6IgorICAjZWNob19pbmZvICJbQURUX0lOU1R9IElmIHlvdSB3YW50IHRvIGV4aXQgY3VycmVudCBpbnN0YWxsYXRpb24sIHBsZWFzZSBlbnRlciBYOiIKKyAgZWNob19pbmZvICJUaGVyZSdyZSB0d28gd2F5cyB5b3UgY2FuIGRvIGluc3RhbGxhdGlvbjogc2lsZW50IG1vZGUgb3IgaW50ZXJhY3RpdmUgbW9kZS4gVG8gY2hvb3NlIHNpbGVudCBtb2RlLCB3aGljaCBtZWFucyB5b3Ugb3B0IGZvciB0aGUgc3lzdGVtIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBkYXRhIHVuZGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzIHdpdGhvdXQgcHJvbXB0aW5nIGZvciB5b3VyIGNvbmZpcm1hdGlvbi4gIFBsZWFzZSBiZSBjYXV0aW91cyB3aXRoIHRoaXMgc2VsZWN0aW9uIHdoaWNoIG1heSB0cmlnZ2VyIHlvdXIgbG9zaW5nIGRhdGEuICBXaXRoIHRoZSBpbnRlcmFjdGl2ZSBtb2RlLCB5b3UgaGF2ZSB0byBjbG9zZWx5IG1vbml0b3IgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLCBzaW5jZSBpdCB3aWxsIHByb21wdCB5b3UgZWFjaCBzdGVwIGl0IG5lZWRzIHRvIG92ZXJyaWRlIHNvbWUgZXhpc3RpbmcgZGF0YS4gIFRvIGNob29zZSBzaWxlbnQgbW9kZSwgcGxlYXNlIGVudGVyIFtTXSwgZm9yIGludGVyYWN0aXZlIG1vZGUsIHBsZWFzZSBlbnRlciBbSV0gb3IgW1hdIHRvIGV4aXQgdGhlIGluc3RhbGxhdGlvbi4iCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBQbGVhc2UgZW50ZXIgeW91ciBzZWxlY3Rpb25zIGhlcmU6IgorICByZWFkIFlPQ1RPQURUX1NFTAorICBZT0NUT0FEVF9TRUw9YHRyICdbYS16XScgJ1tBLVpdJzw8PCIkWU9DVE9BRFRfU0VMImAKKyAgaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIlMiIF07IHRoZW4KKyAgICByZXR1cm4gIjAiCisgIGVsaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIkkiIF07IHRoZW4KKyAgICByZXR1cm4gIjEiCisgIGVsaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIlgiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBVc2VyIGNhbmNlbGxlZCBpbnN0YWxsYXRpb24hIgorICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAxCisgIGZpCitkb25lCisKKworfQorCitjb25maXJtX2luc3RhbGwoKQoreworIyBiZWxvdyBhcmUgcHJvbXB0LCBtYWtlIHN1cmUgdXNlciBzdGlsbCB3YW50IHRvIGluc3RhbGwgZXZlbiBtZWV0CisjIHNvbWUgcHJvbXB0cworCisjVXNlciBsaWtlcyB0byBlbmpveSBzaWxlbnQgaW5zdGFsbGF0aW9uLCB3ZSB3aWxsIG5vdCBicmVhayBoaXMKKyNpbnN0YWxsYXRpb24gcHJvY2VzcyBoZXJlCitpZiBbICIkMSIgPT0gIjAiIF07IHRoZW4KKyAgcmV0dXJuCitmaQorCit3aGlsZSB0cnVlOyBkbworICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRG8geW91IHdhbnQgdG8gY29udGludWUgaW5zdGFsbGF0aW9uPyBQbGVhc2UgZW50ZXIgWS9OOiIKKyAgcmVhZCBZT0NUT0FEVF9JTlNUQUxMCisgIFlPQ1RPQURUX0lOU1RBTEw9YHRyICdbYS16XScgJ1tBLVpdJzw8PCIkWU9DVE9BRFRfSU5TVEFMTCJgCisgIGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiWSIgXTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgWyAiJFlPQ1RPQURUX0lOU1RBTEwiID09ICJOIiBdOyB0aGVuCisgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgVXNlciBjYW5jZWxsZWQgaW5zdGFsbGF0aW9uISIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgMQorICBmaQorZG9uZQorfQorCitjaGVja19yZXN1bHQoKQoreworICByZXN1bHQ9JD8KKyAgaWYgWyAkcmVzdWx0IC1lcSAxIF07IHRoZW4KKyAgICBleGl0IC0xCisgIGVsaWYgWyAgJHJlc3VsdCAtbmUgMCBdOyB0aGVuCisgICAgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAgZWNob19pbmZvICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBleGl0IC0xCisgIGZpCit9CisKKyMgeW9jdG8gYWR0IGluc3RhbGxhdGlvbiBsb2cgZmlsZQorWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRT0iYWR0X2luc3RhbGxlci5sb2ciCisjIFRlbXAgZm9sZGVycyBob2xkaW5nIHFlbXUvcm9vdGZzIGRvd25sb2FkZWQgaW1hZ2VzCisjIEl0IHdpbGwgYmUgcHV0IGludG8gdGhlIGluc3RhbGxhdGlvbiBmb2xkZXIKK0xPQ0FMX0RPV05MT0FEPSIuL2Rvd25sb2FkX2ltYWdlIgorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlcl8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTM4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiCkBAIC0wLDAgKzEsOTUgQEAKKyMgWW9jdG8gQURUIEluc3RhbGxlciBiYiBmaWxlCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTIgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCisKK1NVTU1BUlkgPSAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCIKK0RFU0NSSVBUSU9OID0gIkNyZWF0ZXMgdGhlIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgaW5zdGFsbGVyIHRhcmJhbGwiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2FwcGxpY2F0aW9uLWRldmVsb3BtZW50LXRvb2xraXQtYWR0IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitMSUNFTlNFID0gIk1JVCIKKworUEFDS0FHRVMgPSAiIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUFIgPSAicjExIgorCitBRFRfREVQTE9ZID0gIiR7REVQTE9ZX0RJUn0vc2RrLyIKK0FEVF9ESVIgPSAiJHtXT1JLRElSfS9hZHQtaW5zdGFsbGVyLyIKK1MgPSAiJHtXT1JLRElSfS9vcGtnLSR7UFZ9IgorCitQViA9ICIwLjMuMCIKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL29wa2cvb3BrZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vd2dldF9jYWNoZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZHRfaW5zdGFsbGVyIFwKKyAgICAgICAgICAgZmlsZTovL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL3V0aWwgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy9kYXRhX2RlZmluZSBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzIFwKKyAgICAgICAgICAgZmlsZTovL2FkdF9pbnN0YWxsZXIuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZiBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDEyY2RjNzFkNzhiOThmYWNjODRiMTkzMzFlYzY0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZjczNWQxY2RiOGVmMzcxOGZiMGY5ZmJhNDRjYTBkOWE1YzkwZDNhN2YwMTRmMzdhNmQyZjk0NzRmNTQ5ODhmIgorCitBRFRSRVBPID89ICJodHRwOi8vYWR0cmVwby55b2N0b3Byb2plY3Qub3JnLyR7U0RLX1ZFUlNJT059IgorCisjIFRoaXMgcmVjaXBlIG1ha2VzIG5vIHNlbnNlIGFzIGEgbXVsdGlsaWIKK01VTFRJTElCUyA9ICIiCisKK2RvX3BvcHVsYXRlX2FkdFt1bWFza10gPSAiMDIyIgorCitmYWtlcm9vdCBkb19wb3B1bGF0ZV9hZHQgKCkgeworCWNkICR7V09SS0RJUn0KKwlta2RpciAtcCAke0FEVF9ERVBMT1l9CisJcm0gLWYgJHtBRFRfREVQTE9ZfS9hZHRfaW5zdGFsbGVyLnRhci5iejIKKwlybSAtcmYgJHtBRFRfRElSfQorCW1rZGlyIC1wICR7QURUX0RJUn0vb3BrZy9idWlsZAorCWNwIC1yIG9wa2cgJHtBRFRfRElSfS8KKwlzZWQgLWkgLWUgJ3MjQURUUkVQT19VUkwjJHtBRFRSRVBPfSMnICR7QURUX0RJUn0vb3BrZy9jb25mLyouY29uZgorCWNwIC1yIG9wa2ctJHtQVn0gJHtBRFRfRElSfS9vcGtnL2J1aWxkLworCW12ICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLSR7UFZ9ICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLXN2bgorCXJtIC1yZiAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4vcGF0Y2hlcyAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4vLnBjCisJY3AgLXIgc2NyaXB0cyAke0FEVF9ESVJ9LworCWNwIGFkdF9pbnN0YWxsZXIgJHtBRFRfRElSfQorCWNwIGFkdF9pbnN0YWxsZXIuY29uZiAke0FEVF9ESVJ9CisJc2VkIC1pIC1lICdzI0FEVFJFUE8jJHtBRFRSRVBPfSMnICR7QURUX0RJUn0vYWR0X2luc3RhbGxlci5jb25mCisJZWNobyAnU0RLX1ZFTkRPUj0ke1NES19WRU5ET1J9JyA+PiAke0FEVF9ESVJ9L3NjcmlwdHMvZGF0YV9kZWZpbmUKKwllY2hvICdERUZBVUxUX0lOU1RBTExfRk9MREVSPSR7U0RLUEFUSH0nID4+ICR7QURUX0RJUn0vc2NyaXB0cy9kYXRhX2RlZmluZQorCWNwICR7Q09SRUJBU0V9L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ICR7QURUX0RJUn0vc2NyaXB0cy8KKwl0YXIgY2ZqIGFkdF9pbnN0YWxsZXIudGFyLmJ6MiBhZHQtaW5zdGFsbGVyCisJY3AgJHtXT1JLRElSfS9hZHRfaW5zdGFsbGVyLnRhci5iejIgJHtBRFRfREVQTE9ZfQorfQorCitkb19wb3B1bGF0ZV9hZHRbbm9zdGFtcF0gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcG9wbHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCithZGR0YXNrIHBvcHVsYXRlX2FkdCBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTc1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2ZpbGVzL3dnZXRfY2FjaGUucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBsaWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jIGIvbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYworaW5kZXggOTAwMTQ5My4uMThlZjkxZSAxMDA2NDQKKy0tLSBhL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKKysrKyBiL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKK0BAIC01MCw2ICs1MCw3IEBAIGludCBvcGtnX2Rvd25sb2FkX2JhY2tlbmQoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0LAorIAorICAgICBhcmd2W2krK10gPSAid2dldCI7CisgICAgIGFyZ3ZbaSsrXSA9ICItcSI7CisrICAgIGFyZ3ZbaSsrXSA9ICItLW5vLWNhY2hlIjsKKyAgICAgaWYgKG9wa2dfY29uZmlnLT5odHRwX3Byb3h5IHx8IG9wa2dfY29uZmlnLT5mdHBfcHJveHkpIHsKKyAgICAgICAgIGFyZ3ZbaSsrXSA9ICItWSI7CisgICAgICAgICBhcmd2W2krK10gPSAib24iOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc3NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYwpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlV0aWxpdHkgc2NyaXB0cyBmb3IgaW50ZXJuYXRpb25hbGl6aW5nIFhNTCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorCitVUkxWPSIke0AnLicuam9pbihkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMDoyXSl9IgorU1JDX1VSSSA9ICJodHRwOi8vbGF1bmNocGFkLm5ldC8ke0JQTn0vdHJ1bmsvJHtQVn0vK2Rvd25sb2FkLyR7QlB9LnRhci5neiIKK1MgPSAiJHtXT1JLRElSfS9pbnRsdG9vbC0ke1BWfSIKKworREVQRU5EUyA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZ2V0dGV4dC1kZXYgbGlieG1sLXBhcnNlci1wZXJsIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKKyMgZ2V0dGV4dCBpcyBhc3N1bWVkIHRvIGV4aXN0IG9uIHRoZSBob3N0CitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBlcmwtbW9kdWxlcyIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0ZJTEVTXyR7UE59LWRldiA9ICIiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LWRlcHMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwZXJsbmF0aXZlCisKK2V4cG9ydCBQRVJMID0gIiR7YmluZGlyfS9lbnYgcGVybCIKK1BFUkxfY2xhc3MtbmF0aXZlID0gIi91c3IvYmluL2VudiBuYXRpdmVwZXJsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9pbnRsdG9vbC1ub3dhcm4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzkzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBpbnRsdG9vbC0wLjQwLjAvaW50bHRvb2wtZXh0cmFjdC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLWV4dHJhY3QuaW4JMjAxMS0xMC0wOCAyMjoyNDo1Ny4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtZXh0cmFjdC5pbgkyMDExLTEyLTA3IDE2OjA0OjA3LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcgCisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLW1lcmdlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtbWVyZ2UuaW4JMjAxMS0xMC0wOCAxNzo1MjowMS4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtbWVyZ2UuaW4JMjAxMS0xMi0wNyAxNjowNTo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXByZXBhcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjUwLjAub3JpZy9pbnRsdG9vbC1wcmVwYXJlLmluCTIwMTEtMTAtMDggMDk6MTY6NTguMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXByZXBhcmUuaW4JMjAxMS0xMi0wNyAxNjowNjoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjICBJbnRsdG9vbCAuZGVza3RvcCwgLmRpcmVjdG9yeSBQcmVwYXJlIFRvb2wKK0luZGV4OiBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtdXBkYXRlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtdXBkYXRlLmluCTIwMTEtMTAtMDggMjI6MjQ6NTcuMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXVwZGF0ZS5pbgkyMDExLTEyLTA3IDE2OjA2OjM5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcKKysjIUBJTlRMVE9PTF9QRVJMQAorICMgLSotIE1vZGU6IHBlcmw7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgIC0qLQorIAorICMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNlZTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL25vcGVybGNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0luIHRoZSB0YXJnZXQgY2FzZSwgd2UgY2FuJ3QgY2hlY2sgaWYgcGVybCBleGlzdHMgb3IgdHJ5IHJ1bm5pbmcgaXQuIElmIHdlCitkb24ndCBwYXRjaCB0aGUgY29kZSwgdGhlIG5hdGl2ZSBwZXJsIGxvY2F0aW9uIHdvdWxkIGJlIHVzZWQsIG5vdCB0aGUgdGFyZ2V0Cit3aGljaCBpcyBhbHNvIGluY29ycmVjdC4gV2UgdGhlcmVmb3JlIGRpc2FibGUgdGhpcyBjb2RlIGFuZCByZWx5IG9uIHRoZSAKK2NvcnJlY3QgdmFsdWUgb2YgUEVSTCBiZWluZyBwYXNzZWQgaW4uCisKK1JQIDMxLzgvMjAxMQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1MzM4YTc2Li5lNzA5YTJiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMSwyNCArMTEsMTAgQEAgQUNfU1VCU1QocGtnZGF0YWRpcikgZG5sIGF1dG9tYWtlIGRvZXMgbm90IG5lZWQgdGhpcywgYnV0IGxpYnRvb2xpemUgZG9lcworIGFjbG9jYWxkaXI9JyR7ZGF0YWRpcn0nL2FjbG9jYWwKKyBBQ19TVUJTVChhY2xvY2FsZGlyKQorIAorLUFDX1BBVEhfUFJPRyhQRVJMLCBwZXJsKQorIGlmIHRlc3QgLXogIiRQRVJMIjsgdGhlbgorLSAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorLWZpCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgcGVybCA+PSA1LjguMV0pCistJFBFUkwgLWUgInVzZSA1LjguMTsiID4gL2Rldi9udWxsIDI+JjEKKy1pZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCistICAgQUNfTVNHX0VSUk9SKFtwZXJsIDUuOC4xIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCistZWxzZQorLSAgIFBFUkxfVkVSU0lPTj0iYCRQRVJMIC1lIFwicHJpbnRmICcldmQnLCAkXlZcImAiCistICAgQUNfTVNHX1JFU1VMVChbJFBFUkxfVkVSU0lPTl0pCistZmkKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCistaWYgYCRQRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKy0gICBBQ19NU0dfUkVTVUxUKFtva10pCistZWxzZQorLSAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKysgICBBQ19NU0dfRVJST1IoW1BFUkwgdmFyaWFibGUgbm90IHNldF0pCisgZmkKKytBQ19TVUJTVChQRVJMKQorIEFDX1BBVEhfUFJPRyhCWlIsIGJ6cikKKyAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTIxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1BlcmwgNS4yMiBoYXMgZGVwcmVjYXRlZCBzb21lIHJlZ2V4IGZlYXR1cmVzLCB3aGljaCBjYXVzZXMgd2FybmluZ3Mgd2hlbgoraW50bHRvb2wtdXBkYXRlIHJ1bnM6CisKK1VuZXNjYXBlZCBsZWZ0IGJyYWNlIGluIHJlZ2V4IGlzIGRlcHJlY2F0ZWQsIHBhc3NlZCB0aHJvdWdoIGluIHJlZ2V4OyBtYXJrZWQgYnkKKzwtLSBIRVJFIGluIG0vXiguKilcJHsgPC0tIEhFUkUgPyhbQS1aX10rKX0/KC4qKSQvIGF0CisvZGF0YS9wb2t5LW1hc3Rlci90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vaW50bHRvb2wtdXBkYXRlIGxpbmUgMTA2NS4KKworVGFrZSBhIHBhdGNoIGZyb20gRGViaWFuIHRvIHNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9pbnRsdG9vbC8rYnVnLzE0NjUwMTApCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0gaW50bHRvb2wtMC41MS4wLU9SSUcvaW50bHRvb2wtdXBkYXRlLmluCTIwMTUtMDUtMjcgMDA6MjA6NDMuMDM4Mzc5OTYzICswMjAwCisrKysgaW50bHRvb2wtMC41MS4wL2ludGx0b29sLXVwZGF0ZS5pbgkyMDE1LTA1LTI3IDAwOjIzOjUzLjMwOTA3ODA1MiArMDIwMAorQEAgLTEwNjIsNyArMTA2Miw3IEBACisgCX0KKyAgICAgfQorIAorLSAgICBpZiAoJHN0ciA9fiAvXiguKilcJHs/KFtBLVpfXSspfT8oLiopJC8pCisrICAgIGlmICgkc3RyID1+IC9eKC4qKVwkXHs/KFtBLVpfXSspXH0/KC4qKSQvKQorICAgICB7CisgCW15ICRyZXN0ID0gJDM7CisgCW15ICR1bnRvdWNoZWQgPSAkMTsKK0BAIC0xMTkwLDEwICsxMTkwLDEwIEBACisgCSRuYW1lICAgID1+IHMvXCgrJC8vZzsKKyAJJHZlcnNpb24gPX4gcy9cKCskLy9nOworIAorLQkkdmFyaGFzaHsiUEFDS0FHRV9OQU1FIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/QUNfUEFDS0FHRV9OQU1FfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkez9QQUNLQUdFfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfVkVSU0lPTn0/Lyk7CistCSR2YXJoYXNoeyJWRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJHs/VkVSU0lPTn0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9OQU1FXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P1BBQ0tBR0VcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX1ZFUlNJT05cfT8vKTsKKysJJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/VkVSU0lPTlx9Py8pOworICAgICB9CisgCisgICAgIGlmICgkY29uZl9zb3VyY2UgPX4gL15BQ19JTklUXCgoW14sXCldKyksKFteLFwpXSspWyxdPyhbXixcKV0rKT8vbSkKK0BAIC0xMjE5LDExICsxMjE5LDExIEBACisgCSR2ZXJzaW9uID1+IHMvXCgrJC8vZzsKKyAgICAgICAgICRidWd1cmwgID1+IHMvXCgrJC8vZyBpZiAoZGVmaW5lZCAkYnVndXJsKTsKKyAKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfTkFNRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/UEFDS0FHRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX1ZFUlNJT059Py8pOworLQkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1ZFUlNJT059Py8pOworLSAgICAgICAgJHZhcmhhc2h7IlBBQ0tBR0VfQlVHUkVQT1JUIn0gPSAkYnVndXJsIGlmIChkZWZpbmVkICRidWd1cmwgYW5kIG5vdCAkYnVndXJsID1+IC9cJHs/XHcrfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX05BTUVcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/UEFDS0FHRVx9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRV9WRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJFx7P0FDX1BBQ0tBR0VfVkVSU0lPTlx9Py8pOworKwkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9WRVJTSU9OXH0/Lyk7CisrICAgICAgICAkdmFyaGFzaHsiUEFDS0FHRV9CVUdSRVBPUlQifSA9ICRidWd1cmwgaWYgKGRlZmluZWQgJGJ1Z3VybCBhbmQgbm90ICRidWd1cmwgPX4gL1wkXHs/XHcrXH0/Lyk7CisgICAgIH0KKyAKKyAgICAgIyBccyBtYWtlcyB0aGlzIG5vdCB3b3JrLCB3aHk/ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzY5ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorU2lnbmVkLW9mZi1ieTogRmxvcmluIFNhcmJ1IDxmbG9yaW4uc2FyYnVAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworSW5kZXg6IGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNDAuNi5vcmlnL2ludGx0b29sLm00CTIwMDktMDItMTQgMTQ6MTI6MjguMDAwMDAwMDAwIC0wODAwCisrKysgaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00CTIwMTEtMTEtMjMgMTU6Mzk6MzQuNjg5NTYxODcyIC0wODAwCitAQCAtMTIyLDE0ICsxMjIsMTYgQEAKKyAgICBJVF9QRVJMX1ZFUlNJT049ImAkSU5UTFRPT0xfUEVSTCAtZSBcInByaW50ZiAnJXZkJywgJF5WXCJgIgorICAgIEFDX01TR19SRVNVTFQoWyRJVF9QRVJMX1ZFUlNJT05dKQorIGZpCistaWYgdGVzdCAieCQyIiAhPSAieG5vLXhtbCI7IHRoZW4KKy0gICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCistICAgaWYgYCRJTlRMVE9PTF9QRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKy0gICAgICAgQUNfTVNHX1JFU1VMVChbb2tdKQorLSAgIGVsc2UKKy0gICAgICAgQUNfTVNHX0VSUk9SKFtYTUw6OlBhcnNlciBwZXJsIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorLSAgIGZpCistZmkKKysKKysjIERpc2FibGUgdGhpcyBjaGVjayBzaW5jZSB3ZSBrbm93IFhNTDo6UGFyc2VyIGlzIGluc3RhbGxlZAorKyNpZiB0ZXN0ICJ4JDIiICE9ICJ4bm8teG1sIjsgdGhlbgorKyMgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCisrIyAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCisrIyAgICAgICBBQ19NU0dfUkVTVUxUKFtva10pCisrIyAgIGVsc2UKKysjICAgICAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKysjICAgZmkKKysjZmkKKyAKKyAjIFN1YnN0aXR1dGUgQUxMX0xJTkdVQVMgc28gd2UgY2FuIHVzZSBpdCBpbiBwby9NYWtlZmlsZQorIEFDX1NVQlNUKEFMTF9MSU5HVUFTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWZlZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvdXNlLW5hdGl2ZXBlcmwucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorT0UgaGFzIHBlcmwgYmluYXJ5IGFzICduYXRpdmVwZXJsJyBpbiBuYXRpdmUgc3lzcm9vdCBzbyB3ZSBsb29rIGZvciBpdAoraW4gb3JkZXIgdG8gYXZvaWQgaW50bHRvb2wgc2VhcmNoaW5nIGFuZCBmaW5kaW5nIHBlcmwgZnJvbSAvdXNyL2Jpbgorb24gYnVpbGQgc3lzdGVtIHdoaWNoIG1heSBub3QgaGF2ZSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBpdCBuZWVkcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KK0luZGV4OiBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjQwLjYub3JpZy9pbnRsdG9vbC5tNAkyMDA5LTAyLTE0IDE0OjEyOjI4LjAwMDAwMDAwMCAtMDgwMAorKysrIGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAkyMDExLTA4LTA5IDA4OjA3OjE2LjQyNzM0Nzg0NiAtMDcwMAorQEAgLTExMCw3ICsxMTAsNyBAQAorICAgICBBQ19NU0dfRVJST1IoW0dOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKyBmaQorIAorLUFDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBwZXJsKQorK0FDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBuYXRpdmVwZXJsKQorIGlmIHRlc3QgLXogIiRJTlRMVE9PTF9QRVJMIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIwZDQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGludGx0b29sLmluYworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJICs9ICJmaWxlOi8vaW50bHRvb2wtbm93YXJuLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2ggXAorICAgICAgICAgICAke05BVElWRVBBVENIRVN9IFwKKyAgICAgICAgICAgIgorCisjCisjIEFsbCBvZiB0aGUgaW50bHRvb2wgc2NyaXB0cyBoYXZlIHRoZSBjb3JyZWN0IHBhdGhzIHRvIHBlcmwgYWxyZWFkeQorIyBlbWJlZGRlZCBpbnRvIHRoZW0gYW5kIGNhbiBmaW5kIHBlcmwgZmluZSwgc28gd2UgYWRkIHRoZSByZW1vdmUgeG1sLWNoZWNrCisjIGluIHRoZSBpbnRsdG9vbC5tNCB2aWEgdGhlIHJlbW92ZS14bWwtY2hlY2sucGF0Y2gKK05BVElWRVBBVENIRVMgPSAiZmlsZTovL25vcGVybGNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgZmlsZTovL3JlbW92ZS14bWwtY2hlY2sucGF0Y2giCitOQVRJVkVQQVRDSEVTX2NsYXNzLW5hdGl2ZSA9ICJmaWxlOi8vdXNlLW5hdGl2ZXBlcmwucGF0Y2giIAorCitTUkNfVVJJW21kNXN1bV0gPSAiMTJlNTE3Y2FjMmI1N2EwMTIxY2RhMzUxNTcwZjFlNjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjdjNzRkOTQxOTZiMTUzYjc3NGFiOWY4OWIyZmE2YzZiYTc5MzUyNDA3MDM3YzhjMTRkNWFlYjMzNGU5NTljZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5ZDkxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gOWJlNzE3MDBlYjU4MGM4MTU2ODg1ODRhNjQ2MjFhMzg4NjdjM2ZkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphbWVzIE15YXR0IDxqYW1lcy5teWF0dEB0ZXNzZWxsYS5jb20+CitEYXRlOiBUaHUsIDUgRmViIDIwMTUgMTU6NTc6MTQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0ganNvbl90b2tlbmVyIHJlcXVpcmVzIElORiBhbmQgTkFOCisKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisganNvbl90b2tlbmVyLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGpzb24tYy0wLjEyL2pzb25fdG9rZW5lci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ganNvbi1jLTAuMTIub3JpZy9qc29uX3Rva2VuZXIuYworKysrIGpzb24tYy0wLjEyL2pzb25fdG9rZW5lci5jCitAQCAtMTYsNiArMTYsNyBAQAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKyAjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlICJtYXRoX2NvbXBhdC5oIgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtMzUyLDEyICszNTMsMTAgQEAgc3RydWN0IGpzb25fb2JqZWN0KiBqc29uX3Rva2VuZXJfcGFyc2VfZQorIAorICAgICBjYXNlIGpzb25fdG9rZW5lcl9zdGF0ZV9pbmY6IC8qIGFrYSBzdGFydHMgd2l0aCAnaScgKi8KKyAgICAgICB7CistCWludCBzaXplOworLQlpbnQgc2l6ZV9pbmY7CisrCXNpemVfdCBzaXplX2luZjsKKyAJaW50IGlzX25lZ2F0aXZlID0gMDsKKyAKKyAJcHJpbnRidWZfbWVtYXBwZW5kX2Zhc3QodG9rLT5wYiwgJmMsIDEpOworLQlzaXplID0ganNvbl9taW4odG9rLT5zdF9wb3MrMSwganNvbl9udWxsX3N0cl9sZW4pOworIAlzaXplX2luZiA9IGpzb25fbWluKHRvay0+c3RfcG9zKzEsIGpzb25faW5mX3N0cl9sZW4pOworIAljaGFyICppbmZidWYgPSB0b2stPnBiLT5idWY7CisgCWlmICgqaW5mYnVmID09ICctJykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQyBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbmlwdWxhdGUgSlNPTiBkYXRhIgorREVTQ1JJUFRJT04gPSAiSlNPTi1DIGltcGxlbWVudHMgYSByZWZlcmVuY2UgY291bnRpbmcgb2JqZWN0IG1vZGVsIHRoYXQgYWxsb3dzIHlvdSB0byBlYXNpbHkgY29uc3RydWN0IEpTT04gb2JqZWN0cyBpbiBDLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9qc29uLWMvanNvbi1jL3dpa2kiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRlNTRiNjBmYmJjMzUxMjNiYTE5M2ZlYThlZTIxNmYyIgorCitTUkNfVVJJID0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMvcmVsZWFzZXMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2E0YmJiODgxZGZjNDAxN2U4MDIxYjVlMGE4YzQ5MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDBjMDFiMmIzZjgyZGNiNDI2MTc1MWViNzFmMWIwODQ0MDRmYjdkNmEyODJmMDYwNzRkM2MxNzA3OGI5ZjNmIgorCitSUFJPVklERVNfJHtQTn0gPSAibGlianNvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBDbGVhbiB1cCBhdXRvY29uZiBjcnVmdCB0aGF0IHNob3VsZCBub3QgYmUgaW4gdGhlIHRhcmJhbGwKKyAgICBybSAtZiAke1N9L2NvbmZpZy5zdGF0dXMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEyZjkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiTGludXgga2VybmVsIHN0eWxlIGNvbmZpZ3VyYXRpb24gZnJhbWV3b3JrIGZvciBvdGhlciBwcm9qZWN0cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBrY29uZmlnLWZyb250ZW5kcyBwcm9qZWN0IGFpbXMgYXQgY2VudHJhbGlzaW5nIFwKK3RoZSBlZmZvcnQgb2Yga2VlcGluZyBhbiB1cC10by1kYXRlLCBvdXQtb2YtdHJlZSwgcGFja2FnaW5nIG9mIHRoZSBcCitrY29uZmlnIGluZnJhc3RydWN0dXJlLCByZWFkeSBmb3IgdXNlIGJ5IHRoaXJkLXBhcnR5IHByb2plY3RzLiBcCitUaGUga2NvbmZpZy1mcm9udGVuZHMgcGFja2FnZSBwcm92aWRlcyB0aGUga2NvbmZpZyBwYXJzZXIsIGFzIHdlbGwgYXMgYWxsIFwKK3RoZSBmcm9udGVuZHMiCitIT01FUEFHRSA9ICJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvcHJvamVjdHMva2NvbmZpZy1mcm9udGVuZHMiCitMSUNFTlNFID0gIkdQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05YjhjZjYwZmYzOTc2N2ZmMDRiNjcxZmNhODMwMjQwOCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTICs9ICJuY3Vyc2VzIGZsZXggYmlzb24gZ3BlcmYtbmF0aXZlIHBrZ2NvbmZpZy1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCitTUkNfVVJJID0gImh0dHA6Ly95bW9yaW4uaXMtYS1nZWVrLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjkzOTI4MGRjYzgzZjhmZWFiZDg3YTFkNWY5YjAwYzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWEyNjE1YTYyYzc0YmVhNmNlM2IzODQwMmYwMGM3NTEzODU4ZjMwN2Y2YmE3YWE5ZmRiZjBiYmMxMmJjZjQwNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCBzY3JpcHRzLy5hdXRvc3R1ZmYvbTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbG4gLXMga2NvbmZpZy1jb25mICR7RH0ke2JpbmRpcn0vY29uZgorCWxuIC1zIGtjb25maWctbWNvbmYgJHtEfSR7YmluZGlyfS9tY29uZgorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1nY29uZiAtLWRpc2FibGUtcWNvbmYiCisKKyMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CisjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KK1NPTElCUyA9ICItJHtAZC5nZXRWYXIoJ1BWJywxKVs6LTJdfS5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGlia2NvbmZpZy1wYXJzZXIuc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLTIuNC42LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc3YzczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGxpYnJhcnkgc3VwcG9ydCBzY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIEdOVSBsaWJ0b29sLCBhIGdlbmVyaWMgbGlicmFyeSBzdXBwb3J0IHNjcmlwdC4gXAorTGlidG9vbCBoaWRlcyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIHNwZWNpYWwgbGlicmFyeSB0eXBlcyBcCisoc3VjaCBhcyBzaGFyZWQgbGlicmFyaWVzKSBiZWhpbmQgYSBjb25zaXN0ZW50IGludGVyZmFjZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC9saWJ0b29sLmh0bWwiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgIGZpbGU6Ly9saWJsdGRsL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0b29sL2xpYnRvb2wtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RyYWlsaW5nc2xhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1maW5hbC1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9ybS1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vaGFyZGNvZGVwYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImFkZGY0NGI2NDZkZGI0ZTM5MTk4MDVhYTg4ZmE3YzVlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUzYmQ0ZDVkM2QwMjVhMzZjMjFkZDZhZjdlYTgxOGEyYWZjZDRkZmMxZWE1YTE3YjM5ZDc4NTRiY2QwYzA2ZTMiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJIyBTb21ldGltZXMgdGhpcyBmaWxlIGRvZXNuJ3QgZ2V0IHJlYnVpbHQsIGZvcmNlIHRoZSBpc3N1ZQorCXJtIC1mICR7U30vYnVpbGQtYXV4L2x0bWFpbi5zaAorCW1ha2UgYnVpbGQtYXV4L2x0bWFpbi5zaAorCS4vY29uZmlnLnN0YXR1cworfQorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1saWJ0b29saXplIgorCitERVBFTkRTID0gImxpYnRvb2wtbmF0aXZlIgorCitQQUNLQUdFUyA9KyAibGlibHRkbCIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCisKK0ZJTEVTXyR7UE59LWRldl9yZW1vdmUgPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfbGlibHRkbCA9ICIke2xpYmRpcn0vbGlibHRkbCR7U09MSUJTfSIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9iYXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1jcm9zc18yLjQuNi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3ODgwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKQEAgLTAsMCArMSw0MSBAQAorcmVxdWlyZSBsaWJ0b29sLSR7UFZ9LmluYworCitQQUNLQUdFUyA9ICIiCitTUkNfVVJJICs9ICJmaWxlOi8vcHJlZml4LnBhdGNoIgorU1JDX1VSSSArPSAiZmlsZTovL2ZpeGluc3RhbGwucGF0Y2giCisKK2RhdGFkaXIgPSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfZGF0YWRpcn0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWluc3RhbGwgLW0gMDc1NSAke0hPU1RfU1lTfS1saWJ0b29sICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyR7SE9TVF9TWVN9LWxpYnRvb2wKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCUdSRVA9Jy9iaW4vZ3JlcCcgU0VEPSdzZWQnICR7U30vYnVpbGQtYXV4L2lubGluZS1zb3VyY2UgbGlidG9vbGl6ZSA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2xpYnRvb2xpemUKKwljaG1vZCAwNzU1ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2xpYnRvb2xpemUKKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9kYXRhZGlyfS9hY2xvY2FsLworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29tcGlsZSAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29uZmlnLnN1YiAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9kZXBjb21wICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2luc3RhbGwtc2ggJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvbWlzc2luZyAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7U30vYnVpbGQtYXV4L2x0bWFpbi5zaCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7U30vbTQvKi5tNCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vYWNsb2NhbC8KK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitsaWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9ICR7U1lTUk9PVF9ERVNURElSfSR7dGFyZ2V0X2RhdGFkaXJ9Cit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJsaWJ0b29saXplICotbGlidG9vbCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1uYXRpdmVfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1MjE4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworREVQRU5EUyA9ICIiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wcmVmaXgucGF0Y2giCisKK2luaGVyaXQgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX05BVElWRX0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDA4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC00MDQsMjEgKzQwNCw2IEBAICQobm90ZXNfdHh0KTogJChub3Rlc190ZXhpKQorIAkkKEFNX1ZfR0VOKSQoTUFLRUlORk8pIC1QICckKHNyY2RpcikvZG9jJyAtLW5vLWhlYWRlcnMgXAorIAkgICAgJChNQUtFSU5GT0ZMQUdTKSAtbyAnJEAnICckKG5vdGVzX3RleGkpJworIAorLWRpc3RfbWFuMV9NQU5TCQk9ICQobGlidG9vbF8xKSAkKGxpYnRvb2xpemVfMSkKKy1NQUlOVEFJTkVSQ0xFQU5GSUxFUwkrPSAkKGRpc3RfbWFuMV9NQU5TKQorLXVwZGF0ZV9tYW5zID0gXAorLSAgUEFUSD0iLiQoUEFUSF9TRVBBUkFUT1IpJCRQQVRIIjsgZXhwb3J0IFBBVEg7IFwKKy0gICQoSEVMUDJNQU4pIC0tb3V0cHV0PSckQCcKKy0KKy0jIEl0J3Mgd3JvbmcgdG8gbWFrZSBkaXN0cmlidXRlZCBmaWxlcyAoZS5nLiAkKGxpYnRvb2xfMSkpIHJlbHkgb24KKy0jIGZpbGVzIGNyZWF0ZWQgaW4gdGhlIGJ1aWxkIHRyZWUsIHNvIGluc3RlYWQgd2UgcmVnZW5lcmF0ZSB0aGUKKy0jIG1hbnVhbCBwYWdlcyBpZiB0aGUgc291cmNlcyBmb3IgdGhlIGJ1aWxkLXRyZWUgZmlsZXMgd2Ugd2FudCB0bworLSMgcnVuIGhhdmUgY2hhbmdlZC4KKy0kKGxpYnRvb2xfMSk6ICQobHRtYWluX3NoKQorLQkkKEFNX1ZfR0VOKSQodXBkYXRlX21hbnMpIC0taGVscC1vcHRpb249LS1oZWxwLWFsbCBsaWJ0b29sCistJChsaWJ0b29saXplXzEpOiAkKGxpYnRvb2xpemVfaW4pCistCSQoQU1fVl9HRU4pJCh1cGRhdGVfbWFucykgbGlidG9vbGl6ZQorLQorIAorICMjIC0tLS0tLS0tLS0tLS0gIyMKKyAjIyBJbnN0YWxsYXRpb24uICMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LWZpbmFsLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWY4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitFbmFsYmluZyBzeXNyb290IHN1cHBvcnQgZXhwb3NlZCBhIGJ1ZyB3aGVyZSB0aGUgZmluYWwgbGlicmFyeQoraGFkIGFuIFJQQVRIIGVuY29kZWQgaW50byBpdCB3aGljaCBzdGlsbCBwb2ludGVkIHRvIHRoZSBzeXNyb290LgorVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlIHVudGlsIGl0IGdldHMgc29ydGVkIG91dCB1cHN0cmVhbS4KKworRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTc1NjksOSArNzU2OSwxMSBAQCBFT0YKKyAJICB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRjb21waWxlX3JwYXRoJHJwYXRoCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCQkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCistCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKy0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisgCQllbHNlCitAQCAtODMwMSw2ICs4MzAzLDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCitAQCAtODM1Miw2ICs4MzU4LDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkOTU5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJlc29sdmUtbHQtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCB1cGRhdGVzIGxpYnRvb2wubTQgKGFuZCBpdHMgb3V0cHV0KSB0byByZXNvbHZlIGEgcHJvYmxlbQord2l0aCB2YXJpYWJsZSAnbHRfc3lzcm9vdCcgbm90IGJlaW5nIHByb3Blcmx5IHVwZGF0ZWQgaWYgdGhlIG9wdGlvbgorJy0td2l0aFstbGlidG9vbF0tc3lzcm9vdCcgaXMgbm90IHByb3ZpZGVkIHdoZW4gcnVubmluZyB0aGUgJ2NvbmZpZ3VyZScKK3NjcmlwdCBmb3IgYSBwYWNrYWdlLgorCitJIGhhdmUgYWxzbyByZXBvcnRlZCB0aGUgcHJvYmxlbSB0byBsaWJ0b29sIGhlcmUKKworaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1saWJ0b29sLzIwMTMtMDkvbXNnMDAwMDUuaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBIYW5zIEJlY2tlcnVzIDxoYW5zLmJlY2tlcnVzIGF0IGdtYWlsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKKy0tLSBhL200L2xpYnRvb2wubTQKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC0xMjI1LDE2ICsxMjI1LDIxIEBAIGRubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKyBkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKyBsdF9zeXNyb290PQorIGNhc2UgJHdpdGhfbGlidG9vbF9zeXNyb290IGluICMoCistIHllcykKKysgbm8pCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgICAjIFRyZWF0ICIvIiB0aGUgc2FtZSBhIGFuIHVuc2V0IHN5c3Jvb3QuIEl0IHNlZW1zIHRvIGJlIG1vcmUKKysgICAgICMgY29tcGF0aWJsZSBhY3Jvc3MgaG9zdCBwbGF0Zm9ybXMgdGhhdCB3YXkhPworKyAgICAgaWYgdGVzdCAiJGx0X3N5c3Jvb3QiID0gLzsgdGhlbgorKyAgICAgICBsdF9zeXNyb290PQorKyAgICAgZmkKKyAgICBmaQorICAgIDs7ICMoCisrIHllc3wnJ3wvKQorKyAgIDs7ICMoCisgIC8qKQorICAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgIDs7ICMoCistIG5vfCcnKQorLSAgIDs7ICMoCisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfbGlidG9vbF9zeXNyb290XSkKKyAgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmVjOTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorV2UgZG9uJ3Qgd2FudCB0byBhZGQgUlBBVEhTIHdoaWNoIG1hdGNoIGRlZmF1bHQgbGlua2VyCitzZWFyY2ggcGF0aHMsIHRoZXkncmUgYSB3YXN0ZSBvZiBzcGFjZS4gVGhpcyBwYXRjaAorZmlsdGVycyBsaWJ0b29scyBsaXN0IGFuZCByZW1vdmVzIHRoZSBvbmVzIHdlIGRvbid0IG5lZWQuCisKK1JQIDIzLzkvMjAxMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJ0b29sLTIuNC4yL2J1aWxkLWF1eC9sdG1haW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0b29sLTIuNC4yLm9yaWcvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGxpYnRvb2wtMi40LjIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTcyODYsOCArNzI4NiwxNCBAQCBFT0YKKyAJCSAgZXNhYworIAkJZmkKKyAJICAgICAgZWxzZQorLQkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysJICAgICAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgICAgICA7OworKwkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCitAQCAtODAxOSw4ICs4MDI1LDE0IEBAIEVPRgorIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKy0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisrICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgIHJwYXRoKz0iICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorQEAgLTgwNzAsOCArODA4MiwxNCBAQCBFT0YKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjICAgIAorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM0M2JmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXhpbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitUaGVyZSBpcyBubyBwb2ludCBpbiBoYXZpbmcgImV4ZWN1dGFibGUiIGJpbmFyaWVzIGluIHRoZSAubGlicworZGlyZWN0b3J5IGxpbmtlZCB3aXRoIGRpZmZlcmVudCBycGF0aHMgdG8gdGhlIHRhcmdldCB3aGljaCAKK2NvdWxkIGNvbmNpdmFibHkgYmUgcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW0gd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgZXh0cmEgcnBhdGhzICgkY29tcGlsZV9ycGF0aCkgc28gdGhhdCB0aGUKK291dHB1dCBmcm9tIHRoZSAibGluayIgc3RhZ2UgY2FuIGJlIHVzZWQgb24gdGhlIHRhcmdldC4gV2UgY2FuIHRoZW4KK2F2b2lkIGhhdmluZyB0byAicmVsaW5rIiBkdXJpbmcgdGhlIGluc3RhbGwgc3RhZ2UuCisKK1RoaXMgc2F2ZXMgc29tZSBidWlsZCB0aW1lIChkb19pbnN0YWxsIGlzIG92ZXIgMiBtaW51dGVzIGZhc3RlciBmb3IKK3B1bHNlYXVkaW8pLgorCitUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyBhbiBhbm5veWluZyAic2VlbXMgdG8gYmUgbW92ZWQiIHdhcm5pbmcKK3doaWNoIGlzIHRvdGFsbHkgYm9ndXMgaW4gdGhlIHN5c3Jvb3QgY2FzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBhcmUgdW5saWtlbHkgdG8gdGFrZSBhIHBhdGNoIGxpa2UgdGhpc10KKworUlAgMjAxMS8xMS8xNgorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMjM1NSw3ICsyMzU1LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKy0JaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKyAgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCisgICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CitAQCAtMjM5NCw3ICsyMzk0LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJICBzaGlmdAorIAorIAkgIHNyY25hbWU9JHJlYWxuYW1lCistCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSR7cmVhbG5hbWV9VAorKwkgIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorIAorIAkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKyAJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKK0BAIC02MTYyLDE1ICs2MTYyLDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisgCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisgCSAgICAjIHNlYXJjaCBwYXRoLgorLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICopCistCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKy0JICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CistCSAgICAgIGVzYWMKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKysJICAgICNjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAjKiIgJGFic2RpciAiKikgOzsKKysJICAgICMqKQorKwkgICAgIyAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorKwkgICAgIyAgKiIgJGFic2RpciAiKikgOzsKKysJICAgICMgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworKwkgICAgIyAgZXNhYworKwkgICAgIyAgOzsKKysJICAgICNlc2FjCisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkbGliZGlyICIqKSA7OworIAkgICAgKikKK0BAIC02MjM2LDE1ICs2MjM2LDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisgCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisgCSAgICAjIHNlYXJjaCBwYXRoLgorLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICopCistCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKy0JICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CistCSAgICAgIGVzYWMKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKysJICAgICNjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAjKiIgJGFic2RpciAiKikgOzsKKysJICAgICMqKQorKwkgICAgIyAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorKwkgICAgIyAgKiIgJGFic2RpciAiKikgOzsKKysJICAgICMgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworKwkgICAgIyAgZXNhYworKwkgICAgIyAgOzsKKysJICAgICNlc2FjCisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkbGliZGlyICIqKSA7OworIAkgICAgKikKK0BAIC02NTkwLDggKzY1OTAsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICBldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKyAJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCistCQkgICAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisrCQkgICN0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorKwkJICAjICBmdW5jX3dhcm5pbmcgIickZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKyAKKyAJCSAgcGF0aD0tTCRhYnNkaXIKKyAJCWZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9oYXJkY29kZXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjM5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitJZiBmb3IgZXhhbXBsZSB5b3UgYnVpbGQgb24gYSBtYWNoaW5lIHdpdGggL2Jpbi9ncmVwLCB0aGVuIHJlc3RvcmUgdGhhdCBzc3RhdGUKK29udG8gYSBtYWNoaW5lIHdpdGggL3Vzci9iaW4vZ3JlcCwgdGhpbmdzIHdpbGwgZmFpbC4gU2ltcGx5IGRvbid0IGJvdGhlcgoraGFyZGNvZGluZyBwYXRocy4KKworUlAgMjAxNS8yLzMKKworSW5kZXg6IGxpYnRvb2wtMi40LjUvbGlidG9vbGl6ZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRvb2wtMi40LjUub3JpZy9saWJ0b29saXplLmluCisrKysgbGlidG9vbC0yLjQuNS9saWJ0b29saXplLmluCitAQCAtNDAsMTEgKzQwLDExIEBACisgCisgOiAke0FVVE9DT05GPSJhdXRvY29uZiJ9CisgOiAke0FVVE9NQUtFPSJhdXRvbWFrZSJ9CistOiAke0VHUkVQPSJARUdSRVBAIn0KKy06ICR7RkdSRVA9IkBGR1JFUEAifQorLTogJHtHUkVQPSJAR1JFUEAifQorLTogJHtMTl9TPSJATE5fU0AifQorLTogJHtTRUQ9IkBTRURAIn0KKys6ICR7RUdSRVA9ImVncmVwIn0KKys6ICR7RkdSRVA9ImZncmVwIn0KKys6ICR7R1JFUD0iZ3JlcCJ9CisrOiAke0xOX1M9ImxuIC1zIn0KKys6ICR7U0VEPSJzZWQifQorIAorIAorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0YzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9ybS1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitsaWJ0b29sOiBub3JtYWxpemUgbGluayBwYXRocyBiZWZvcmUgY29uc2lkZXJpbmcgZm9yIFJQQVRICisKK0xpYnRvb2wgbWF5IGJlIHBhc3NlZCBsaW5rIHBhdGhzIG9mIHRoZSBmb3JtICIvdXNyL2xpYi8uLi9saWIiLCB3aGljaAorZm9vbCBpdHMgZGV0ZWN0aW9uIGNvZGUgaW50byB0aGlua2luZyBpdCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYW4KK1JQQVRIIGluIHRoZSBnZW5lcmF0ZWQgYmluYXJ5LiAgTm9ybWFsaXplIGJlZm9yZSBjb21wYXJpc2lvbi4KKworU2lnbmVkLW9mZi1ieTogQW5keSBSb3NzIDxhbmR5LnJvc3NAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgkyMDEyLTA4LTE2IDEzOjU4OjU1LjA1ODkwMDM2MyAtMDcwMAorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgkyMDEyLTA4LTIyIDExOjAxOjM0LjE5MTM0NTk4OSAtMDcwMAorQEAgLTcyODgsOCArNzI4OCwxMCBAQAorIAkgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysgICAgICAgICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJGxpYmRpciIKKysgICAgICAgICAgICAgICAgbGliZGlyX25vcm09JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgCSAgICAgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAgICAgKiIgJGxpYmRpcl9ub3JtICIqKSA7OworIAkgICAgICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisgICAgICAgICAgICAgICAgICAgIDs7CitAQCAtODAyNyw4ICs4MDI5LDEwIEBACisgCSAgZWxzZQorICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorICAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKyAgICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiRsaWJkaXIiCisrICAgICAgICAgICAgbGliZGlyX25vcm09JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCistCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKiIgJGxpYmRpcl9ub3JtICIqKSA7OworIAkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICAgIHJwYXRoKz0iICRmbGFnIgorICAgICAgICAgICAgICAgIDs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcHJlZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2RmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitSZW5hbWVzICJsaWJ0b29sIiAtPiAiJHtUQVJHRVRfUFJFRklYfWxpYnRvb2wiIHdoaWNoIG1ha2VzIHN1cmUKK2l0IGNhbid0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIGhvc3QgbGlidG9vbC4KKworT3JpZ2luYWxseSBieTogUlAKKworVXBkYXRlZDogRGF0ZTogMjAxMC8wNi8yOAorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSXQgYWxzbyBhZGp1c3RzIGxpYnRvb2wgc28gdGhhdCB0aGUgaGVhZGVyIGF0IHRoZSBzY3JpcHQgaXMgdXNlZCBmb3IgCitzY3JpcHQgZXhlY3V0aW9uIGFuZCBub3QgdGhldmFsdWUgb2YgJFNIRUxMLiBUaGlzIGlzIGJlY2F1c2UgbWFueSAKK01ha2VmaWxlcyBjaGFuZ2UgJFNIRUxMIHNvIGRhc2ggY2FuIGdldCB1c2VkIHRvIGV4ZWN1dGUgd2hhdCBpcyAKK290aGVyd2lzZSBjb25maWd1cmVkIGFzIGEgYmFzaCBzaGVsbCBzY3JpcHQuIFNpbmNlIHdlIGRvbid0IG5lZWQgdG8gCitleGVjdXRlIHNjaXB0cyB0aGlzIHdheSBvbiBhbnkgc3lzdGVtIEknbSBhd2FyZSBvZiB1cyBidWlsZGluZyB1cG9uLCAKK3RoZSBzaW1wbGVzdCBmaXggaXMganVzdCB0byByZW1vdmUgJFNIRUxMLgorCitVcGRhdGVkOiBEYXRlOiAyMDExLzExLzA5CitSUAorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTMxLDcgKzMxLDcgQEAgU1VCRElSUwkJCT0gLgorIERJU1RfU1VCRElSUwkJPSAkKFNVQkRJUlMpCisgRVhUUkFfRElTVAkJPQorIAorLUJVSUxUX1NPVVJDRVMJCT0gbGlidG9vbCBsaWJ0b29saXplCisrQlVJTFRfU09VUkNFUwkJPSAkKGhvc3RfYWxpYXMpLWxpYnRvb2wgbGlidG9vbGl6ZQorIAorIENMRUFORklMRVMJCT0KKyBNT1NUTFlDTEVBTkZJTEVTCT0KK0BAIC02Nyw3ICs2Nyw3IEBAIGJ1aWxkX3NjcmlwdHMJPSAkKHNyY2RpcikvJChhdXhfZGlyKS9hbm5vdW5jZS1nZW4gXAorIAorIEVYVFJBX0RJU1QgICAgICs9IGJvb3RzdHJhcCBib290c3RyYXAuY29uZiAkKGJ1aWxkX3NjcmlwdHMpIGNmZy5tayBtYWludC5tayBcCisgCQkgIEdOVW1ha2VmaWxlCistQ0xFQU5GSUxFUyAgICAgKz0gbGlidG9vbCBsaWJ0b29saXplCisrQ0xFQU5GSUxFUyAgICAgKz0gJChob3N0X2FsaWFzKS1saWJ0b29sIGxpYnRvb2xpemUKKyAKKyAjIyBJZiBhIGZpbGUgaXMgbmFtZWQgc2V2ZXJhbCB0aW1lcyBiZWxvdywgYW5kIGVzcGVjaWFsbHkgaWYgaXQKKyAjIyBpcyBhIGRpc3RyaWJ1dGVkIGZpbGUgY3JlYXRlZCBkdXJpbmcgTGlidG9vbCBib290c3RyYXAsIHdlCitAQCAtMjc2LDcgKzI3Niw3IEBAIGNvbmZpZ3VyZV9lZGl0ID0gJChib290c3RyYXBfZWRpdCkgXAorIAktZSAnc3xAc3JjZGlyXEB8JChzcmNkaXIpfGcnCisgCisgIyBUaGUgbGlidG9vbCBkaXN0cmlidXRvciBhbmQgdGhlIHN0YW5kYWxvbmUgbGlidG9vbCBzY3JpcHQuCistYmluX1NDUklQVFMgPSBsaWJ0b29sCisrYmluX1NDUklQVFMgPSAkKGhvc3RfYWxpYXMpLWxpYnRvb2wKKyAKKyBsaWJ0b29saXplOiAkKGxpYnRvb2xpemVfaW4pICQoY29uZmlnX3N0YXR1cykKKyAJJChBTV9WX2F0KXJtIC1mICckQCcKK0BAIC0yODcsNyArMjg3LDcgQEAgbGlidG9vbGl6ZTogJChsaWJ0b29saXplX2luKSAkKGNvbmZpZ19zdGF0dXMpCisgIyBXZSB1c2VkIHRvIGRvIHRoaXMgd2l0aCBhICdzdGFtcC12Y2wnIGZpbGUsIGJ1dCBub24tZ21ha2UgYnVpbGRzCisgIyB3b3VsZCByZXJ1biBjb25maWd1cmUgb24gZXZlcnkgaW52b2NhdGlvbiwgc28gbm93IHdlIG1hbnVhbGx5CisgIyBjaGVjayB0aGUgdmVyc2lvbiBudW1iZXJzIGZyb20gdGhlIGJ1aWxkIHJ1bGUgd2hlbiBuZWNlc3NhcnkuCistbGlidG9vbDogJChsdG1haW5fc2gpICQoY29uZmlnX3N0YXR1cykgJChkb3R2ZXJzaW9uKQorKyQoaG9zdF9hbGlhcyktbGlidG9vbDogJChsdG1haW5fc2gpICQoY29uZmlnX3N0YXR1cykgJChkb3R2ZXJzaW9uKQorIAlAJChyZWJ1aWxkKTsgXAorIAlpZiB0ZXN0IC1mICckQCc7IHRoZW4gXAorIAkgIGV2YWwgYCckKFNFRCknIC1uICcvXnBhY2thZ2VfcmV2aXNpb249L3AnICckQCdgOyBcCitAQCAtNzMxLDEyICs3MzEsMTIgQEAgVEVTVFNfRU5WSVJPTk1FTlQgPSBNQUtFPSIkKE1BS0UpIiBDQz0iJChDQykiIENGTEFHUz0iJChDRkxBR1MpIiBcCisgCisgQlVJTERDSEVDS19FTlZJUk9OTUVOVCA9IF9sdF9wa2dkYXRhZGlyPSIkKGFic190b3Bfc3JjZGlyKSIgXAorIAlMSUJUT09MSVpFPSIkKGFic190b3BfYnVpbGRkaXIpL2xpYnRvb2xpemUiIFwKKy0JTElCVE9PTD0iJChhYnNfdG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCisrCUxJQlRPT0w9IiQoYWJzX3RvcF9idWlsZGRpcikvJChob3N0X2FsaWFzKS1saWJ0b29sIiBcCisgCXRzdF9hY2xvY2FsZGlyPSIkKGFic190b3Bfc3JjZGlyKS9tNCIKKyAKKyBJTlNUQUxMQ0hFQ0tfRU5WSVJPTk1FTlQgPSBcCisgCUxJQlRPT0xJWkU9IiQoYmluZGlyKS9gZWNobyBsaWJ0b29saXplIHwkKFNFRCkgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYCIgXAorLQlMSUJUT09MPSIkKGJpbmRpcikvYGVjaG8gbGlidG9vbCB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKysJTElCVE9PTD0iJChiaW5kaXIpL2BlY2hvICQoaG9zdF9hbGlhcyktbGlidG9vbCB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKyAJTFRETElOQ0w9Ii1JJChpbmNsdWRlZGlyKSIgXAorIAlMSUJMVERMPSIkKGxpYmRpcikvbGlibHRkbC5sYSIgXAorIAl0c3RfYWNsb2NhbGRpcj0iJChhY2xvY2FsZGlyKSIKK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorLS0tIGEvbTQvbGlidG9vbC5tNAorKysrIGIvbTQvbGlidG9vbC5tNAorQEAgLTg2LDcgKzg2LDggQEAgX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisgTElCVE9PTF9ERVBTPSRsdG1haW4KKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgQUNfU1VCU1QoTElCVE9PTClkbmwKKyAKKyBfTFRfU0VUVVAKK0BAIC0xOTksNyArMjAwLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJiMTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9yZW5hbWUtd2l0aC1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsMTY2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCByZW5hbWVzIHRoZSAtLXdpdGgtc3lzcm9vdCBvcHRpb24gdG8gLS13aXRoLWxpYnRvb2wtc3lzcm9vdAordG8gYXZvaWQgbmFtZXNwYWNlIGNvbmZsaWN0IHdpdGggYmludXRpbHMsIGdjYyBhbmQgb3RoZXIgdG9vbGNoYWluCitjb21wb25lbnRzLgorCitJIGFsc28gcmVwb3J0ZWQgdGhlIHByb2JsZW0gdG8gbGlidG9vbCBoZXJlCisKK2h0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9saWJ0b29sLzIwMTAtMTAvbXNnMDAwNDguaHRtbAorCistS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorLS0tIGEvbTQvbGlidG9vbC5tNAorKysrIGIvbTQvbGlidG9vbC5tNAorQEAgLTEyMTUsMjggKzEyMTUsMjggQEAgX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorICMgLS0tLS0tLS0tLS0tLS0tLQorIEFDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKKyBbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCistQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAorLVtBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3Jvb3RAPDpAPURJUkA6PkBdLAorK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAorK1tBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnRvb2wtc3lzcm9vdEA8OkA9RElSQDo+QF0sCisgICBbU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QKKyAgICBpZiBub3Qgc3BlY2lmaWVkKS5dKV0sCistW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQorIAorIGRubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKyBkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKyBsdF9zeXNyb290PQorLWNhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAorK2Nhc2UgJHdpdGhfbGlidG9vbF9zeXNyb290IGluICMoCisgIHllcykKKyAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgICBmaQorICAgIDs7ICMoCisgIC8qKQorLSAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICA7OyAjKAorICBub3wnJykKKyAgICA7OyAjKAorICAqKQorLSAgIEFDX01TR19SRVNVTFQoWyR3aXRoX3N5c3Jvb3RdKQorKyAgIEFDX01TR19SRVNVTFQoWyR3aXRoX2xpYnRvb2xfc3lzcm9vdF0pCisgICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgICA7OworIGVzYWMKK2RpZmYgLS1naXQgYS90ZXN0cy9zeXNyb290LmF0IGIvdGVzdHMvc3lzcm9vdC5hdAorLS0tIGEvdGVzdHMvc3lzcm9vdC5hdAorKysrIGIvdGVzdHMvc3lzcm9vdC5hdAorQEAgLTY0LDcgKzY0LDcgQEAgd2hpbGUgcmVhZCBmaWxlOyBkbworIGRvbmVdKQorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTExNCw3ICsxMTQsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF1dKQorQEAgLTE1NSw3ICsxNTUsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbcHJvZy5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF1dKQorZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3RzdWl0ZSBiL3Rlc3RzL3Rlc3RzdWl0ZQorLS0tIGEvdGVzdHMvdGVzdHN1aXRlCisrKysgYi90ZXN0cy90ZXN0c3VpdGUKK0BAIC00ODk0NSw3ICs0ODk0NSw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNDkxNTQsNyArNDkxNTQsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTQ5MzQyLDcgKzQ5MzQyLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC00OTY5NCw3ICs0OTY5NCw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNDk5MDMsNyArNDk5MDMsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTUwMDkxLDcgKzUwMDkxLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC01MDQ0Myw3ICs1MDQ0Myw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNTA2NTIsNyArNTA2NTIsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTUwODQwLDcgKzUwODQwLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODgyNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC90cmFpbGluZ3NsYXNoLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBIGNvbW1hbmQgbGlrZSAvYmluL3NoIC4uLy4uL2k1ODYtcG9reS1saW51eC1saWJ0b29sICAgLS1tb2RlPWluc3RhbGwgL3Vzci9iaW4vaW5zdGFsbCAtYyAgIGdjay1yb290cy1zdG9yZS1zdGFuZGFsb25lLmxhICcvbWVkaWEvZGF0YTEvYnVpbGRzL3Bva3kxL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvZ25vbWUta2V5cmluZy0yLjI2LjEtcjEvaW1hZ2UvdXNyL2xpYi9nbm9tZS1rZXlyaW5nL3N0YW5kYWxvbmUvJyBmYWlscyAoZS5nLiBnbm9tZS1rZXlyaW5nIG9yIHB1bHNlYXVkaW8pCisKK1RoaXMgaXMgYmVjYXVzZSBsaWJkaXIgaGFzIGEgdHJhaWxpbmcgc2xhc2ggd2hpY2ggYnJlYWtzIHRoZSBjb21wYXJpc2lvbi4KKworUlAgMi8xLzEwCisKK01lcmdlZCBhIHBhdGNoIHJlY2VpdmVkIGZyb20gR2FyeSBUaG9tYXMgPGdhcnlAbWxiYXNzb2MuY29tPgorCitEYXRlOiAyMDEwLzA3LzEyCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMjM1Niw4ICsyMzU2LDE1IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKyAJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKyAgICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGxpYmRpciIKKysgICAgICBkZXN0bGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0ZGlyIgorKyAgICAgIHNfZGVzdGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisgCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKy0JICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKysJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJHNfZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkZGVzdGxpYmRpclwkJSUiYAorIAorIAkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKyAJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdW53aW5kLW9wdC1wYXJzaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzNiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaApAQCAtMCwwICsxLDE3OSBAQAorQ3V0IGFuZCBwYXN0ZSB0aGUgcGllY2VzIG9mIGJ1aWxkLWF1eC9vcHRpb25zLXBhcnNlciBpbmxpbmUgaW50byB0aGUgbWFpbgorbHRtYWluLnNoIGNvZGUuIFRoaXMgcmVtb3ZlcyBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGNhdXNlZCBieSB0aGUgCityZXBlYXRlZCBjYWxscyB0byBmdW5jX3F1b3RlX2Zvcl9ldmFsLCB0aGUgbWVjaGFuaXNtIGZ1bmNsaWIgdXNlcwordG8gY29uc3RydWN0IHRoZSBmdW5jdGlvbnMgdXNlZCBmb3Igb3B0aW9uIHBhcnNpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtCZWluZyBkaXNjdXNzZWQgb24gbWFpbGluZyBsaXN0IEZlYiAyMDE1XQorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK2luZGV4IGQ1Y2YwN2EuLjBmNTQzMDMgMTAwNjQ0CistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMzQyLDExICszNDIsMTUgQEAgX0xUX0VPRgorICMgbGlidG9vbF9vcHRpb25zX3ByZXAgW0FSR10uLi4KKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQcmVwYXJhdGlvbiBmb3Igb3B0aW9ucyBwYXJzZWQgYnkgbGlidG9vbC4KKy1saWJ0b29sX29wdGlvbnNfcHJlcCAoKQorLXsKKysjbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKysjeworICAgICAkZGVidWdfbW9kZQorIAorICAgICAjIE9wdGlvbiBkZWZhdWx0czoKKysgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKysgICAgb3B0X3dhcm5pbmdfdHlwZXM9CisrCisrICAgICMgT3B0aW9uIGRlZmF1bHRzOgorICAgICBvcHRfY29uZmlnPWZhbHNlCisgICAgIG9wdF9kbG9wZW49CisgICAgIG9wdF9kcnlfcnVuPWZhbHNlCitAQCAtMzgyLDE5ICszODYsMTQgQEAgbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKyAgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgIDs7CisgICAgIGVzYWMKKy0KKy0gICAgIyBQYXNzIGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KKy0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKy0gICAgbGlidG9vbF9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorLX0KKy1mdW5jX2FkZF9ob29rIGZ1bmNfb3B0aW9uc19wcmVwIGxpYnRvb2xfb3B0aW9uc19wcmVwCisrI30KKyAKKyAKKyAjIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQcm92aWRlIGhhbmRsaW5nIGZvciBsaWJ0b29sIHNwZWNpZmljIG9wdGlvbnMuCistbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCisteworKyNsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKKysjeworICAgICAkZGVidWdfY21kCisgCisgICAgICMgUGVyZm9ybSBvdXIgb3duIGxvb3AgdG8gY29uc3VtZSBhcyBtYW55IG9wdGlvbnMgYXMgcG9zc2libGUgaW4KK0BAIC00NzQsMjkgKzQ3Myw5MCBAQCBsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICA7OworIAorLQkjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0aGlzIGhvb2sgZnVuY3Rpb246CistICAgICAgICAqKQkJc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKy0gICAgICBlc2FjCistICAgIGRvbmUKKysgICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCisrICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKysgICAgICAgICAgICAgICAgICAgICAgJGRlYnVnX2NtZAorKyAgICAgICAgICAgICAgICAgICAgICA7OworIAorKyAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgLS13YXJuaW5ncyBub25lICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKwkJICAgICAgOzsKKyAKKy0gICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCistICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CistICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CistfQorLWZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucworKyAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCisrICAgICAgICAgICAgICAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAkMSIgaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhaWxpbmcgc3BhY2UgcHJldmVudHMgbWF0Y2hpbmcgbGFzdCAkMSBhYm92ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmRfdW5pcSBvcHRfd2FybmluZ190eXBlcyAiICQxIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqYWxsKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqbm9uZSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPW5vbmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz06CisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz1mdW5jX2ZhdGFsX2Vycm9yCisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICopCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB3YXJuaW5nIGNhdGVnb3J5OiAnJDEnIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAgLS12ZXJib3NlfC12KSBvcHRfdmVyYm9zZT06IDs7CisrICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OworKyAgICAgICAgLVw/fC1oKSAgICAgICBmdW5jX3VzYWdlIDs7CisrICAgICAgICAtLWhlbHApICAgICAgIGZ1bmNfaGVscCA7OworKworKwkjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zIChwbHVnaW5zIG1heSBuZWVkIHRoaXMpOgorKwktLSo9KikgICAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzICIkX0dfb3B0IgorKwkgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X2VxdWFsc19yaHMiICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gc2hvcnQgb3B0aW9uczoKKysgICAgICAgIC1XKikKKysgICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisrICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisrICAgICAgICAtXD8qfC1oKnwtdip8LXgqKQorKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKysgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgIC0tKSAgICAgICAgICAgYnJlYWsgOzsKKysgICAgICAgIC0qKSAgICAgICAgICAgZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJF9HX29wdCciIDs7CisrICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OyBzaGlmdDsgYnJlYWsgOzsKKysgICAgICBlc2FjCisrICAgIGRvbmUKKysjfQorIAorKyMgRGlzcGxheSBhbGwgd2FybmluZ3MgaWYgLVcgd2FzIG5vdCBnaXZlbi4KKyt0ZXN0IC1uICIkb3B0X3dhcm5pbmdfdHlwZXMiIHx8IG9wdF93YXJuaW5nX3R5cGVzPSIgJHdhcm5pbmdfY2F0ZWdvcmllcyIKKyAKKyAKKyAjIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorICMgYXJndW1lbnRzLgorLWxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQorLXsKKysjbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCisrI3sKKyAgICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgICAgaWYgdGVzdCAwIC1sdCAkIzsgdGhlbgorLSAgICAgIG5vbm9wdD0kMQorKyAgICAgIG5vbm9wdD0kX0dfb3B0CisgICAgICAgc2hpZnQKKyAgICAgZmkKKyAKK0BAIC01MzcsMjAgKzU5NywxMCBAQCBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKKyAgICAgICBnZW5lcmljX2hlbHA9JGhlbHAKKyAgICAgICBoZWxwPSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICB9CisrI30KKyAKKy0gICAgIyBQYXNzIGJhY2sgdGhlIHVucGFyc2VkIGFyZ3VtZW50IGxpc3QKKy0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKy0gICAgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKy19CistZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zCistCistCistIyBQcm9jZXNzIG9wdGlvbnMgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCAtLWhlbHAgYW5kIC0tdmVyc2lvbgorLSMgY2FuIHJldHVybiBxdWlja2x5LgorLWZ1bmNfb3B0aW9ucyAkezErIiRAIn0KKy1ldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAorLQorLQorKyMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQhCisrJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKyAKKyAjIyAtLS0tLS0tLS0tLSAjIworICMjICAgIE1haW4uICAgICMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmOTlmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdXNlLXN5c3Jvb3QtaW4tbGlicGF0aC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hlbiB1c2luZyBzeXNyb290IHdlIHNob3VsZCBhcHBlbmQgaXQgdG8gbGliZGlyLCB3aGljaCBpcyBoZWxwZnVsIGluCitjcm9zcyBidWlsZHMgYXMgdGhlIHN5c3RlbSBpcyBzdGFnZWQgaW4gdGhlIHN5c3Jvb3QuIEZvciBub3JtYWwgYnVpbGRzLAoraS5lLiB3aGVuIGx0X3N5c3Jvb3QgaXMgbm90IHNldCwgaXQgd2lsbCBzdGlsbCBiZWhhdmUgdGhlIHNhbWUgYW5kIGFkZAorLUwvdXNyL2xpYiB0byB0aGUgcmVsaW5rIGNvbW1hbmQuCisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTY0MjEsNyArNjQyMSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCistCSAgICAgIGFkZF9kaXI9LUwkbGliZGlyCisrCSAgICAgIGFkZF9kaXI9Ii1MJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisgCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQljYXNlICRsaWJkaXIgaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjFiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCisKKyMKKyMgV2Ugd2FudCB0aGUgcmVzdWx0cyBvZiBsaWJ0b29sLWNyb3NzIHByZXNlcnZlZCAtIGRvbid0IHN0YWdlIGFueXRoaW5nIG91cnNlbHZlcy4KKyMKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgc2VkIC1lICdzQC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9QEBnJyBcCisgICAgICAgICAgICAtZSAnc0Ake1NUQUdJTkdfRElSX0hPU1R9QEBnJyBcCisgICAgICAgICAgICAtZSAnc0BeXChzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IlwpLipAXDEke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSJcKS4qQFwxJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IkAnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iXCkuKkBcMSR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChwcmVkZXBfb2JqZWN0cz0iXCkuKkBcMSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChwb3N0ZGVwX29iamVjdHM9IlwpLipAXDEiQCcgXAorICAgICAgICAgICAgLWkgJHtEfSR7YmluZGlyfS9saWJ0b29sCit9CisKK2xpYnRvb2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9LyoKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8qCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbmF0aXZlc2RrLWxpYnRvb2xfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ZWFkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiCkBAIC0wLDAgKzEsMzEgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vbGlidG9vbDoiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wcmVmaXgucGF0Y2giCitTUkNfVVJJICs9ICJmaWxlOi8vZml4aW5zdGFsbC5wYXRjaCIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworUyA9ICIke1dPUktESVJ9L2xpYnRvb2wtJHtQVn0iCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9saWJ0b29sLyoiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJ9LworfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImxpYnRvb2xuYXRpdmVzZGtfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitsaWJ0b29sbmF0aXZlc2RrX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWluc3RhbGwgLW0gNzU1ICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tbGlidG9vbCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyR7SE9TVF9TWVN9LWxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzLW5hdGl2ZV8wLjkuNjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhOTBmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiQ29udmVydCBMaW51eERvYyBTR01MIHNvdXJjZSBpbnRvIG90aGVyIGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9saW51eGRvYy10b29scyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDc3ZWY2NGVjM2FjMjU3ZmIwZDc4NjUzMWNmMjY5MzEiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIG9wZW5qYWRlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbC9saW51eGRvYy10b29scy9saW51eGRvYy10b29sc18ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3NnbWwycnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfdHh0X2RvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3RleF9kb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9kdmlwc19kb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDEzZDUwMDkxOGE3YTE0NWIwZWRjMmYxNmY2MWRkMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MTAzZmFjZWUxOGEyZWE5NzE4NmNhNDU5ZDc0M2QyMmY3Zjg5YWQ0YjVjZDFkZmQxYzM0ZjgzZDZiZmQ0MTAxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbmF0aXZlCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ1RNUERJUj0ke1R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwYjM2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX2R2aXBzX2RvYy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitEaXNhYmxlIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24gd2hpY2ggcmVxdWlyZXMgdGhlIGR2aXBzIHV0aWxpdHkuCitUaGlzIHBhdGNoIHNob3VsZCBiZSBkcm9wcGVkIG9uY2Ugd2UgaW5jbHVkZSBhIG5hdGl2ZSB2ZXJzaW9uIG9mCitkdmlwcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1RlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGRvY3VtZW50YXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2ggbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCistLS0gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMi0yNSAxNToyNjo0MS4xNDI5MTc3ODIgLTA4MDAKKysrKyBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMi0yNSAxNToyNzoyNS4xNDE5MTc0NzIgLTA4MDAKK0BAIC01MiwxMyArNTIsMTMgQEAKKyAjCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKyAjZmkKKyAKKy1pZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCistCWVjaG8gIiAgICsgZHZpcHMiID4mMgorLQlkdmlwcyAtdCBsZXR0ZXIgLW8gLi9ndWlkZS5wcyAuL2d1aWRlLmR2aQorLQlpZiBbIC1uICJgd2hpY2ggZ3ppcGAiIC1hIC1mIC4vZ3VpZGUucHMgXTsgdGhlbgorLQkJZ3ppcCAtZk4gLi9ndWlkZS5wcworLQlmaQorLWZpCisrI2lmIFsgLW4gImB3aGljaCBkdmlwc2AiIF07IHRoZW4KKysjCWVjaG8gIiAgICsgZHZpcHMiID4mMgorKyMJZHZpcHMgLXQgbGV0dGVyIC1vIC4vZ3VpZGUucHMgLi9ndWlkZS5kdmkKKysjCWlmIFsgLW4gImB3aGljaCBnemlwYCIgLWEgLWYgLi9ndWlkZS5wcyBdOyB0aGVuCisrIwkJZ3ppcCAtZk4gLi9ndWlkZS5wcworKyMJZmkKKysjZmkKKyAKKyAKKyBlY2hvICItIEJ1aWxkaW5nIGluZm8gZG9jcyIgPiYyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3NnbWwycnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzhhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIDc1NmYyMGU3MGE5N2VlMmRlYTliMzJjMDk1NWVhYmZjMjdmMjliZTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDI5IE1heSAyMDEzIDE2OjUwOjE3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoZSBidWlsZCBvZiBzZ21sMnJ0ZiBpcyBwcm9ibGVtYXRpYyBkdWUgdG8gdGhlIHdheSBpdCB3YW50cworIHRvIGxpbmsgdG8gYSBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uIG9mIGZsZXguIEZsZXggb25seQorIHNoaXBzIHdpdGggYSBzdGF0aWMgbGliLiBSYXRoZXIgdGhhbiBkaXZlcmdpbmcgZnJvbQorIHVwc3RyZWFtIGZsZXgsIHNpbXBseSBza2lwIGJ1aWxkaW5nIHRoaXMgdW4tbmVlZGVkIHV0aWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGEgZmVhdHVyZS4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgMTIgKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDM1OWYxNGUuLmZjMDQwMjAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00MCw3ICs0MCw3IEBAIHBlcmw1bGliX2RkaXIgICAgICA9ICQoREVTVERJUikkKHBlcmw1bGliZGlyKQorIHBrZ2RhdGFfZGRpciAgICAgICA9ICQoREVTVERJUikkKHBrZ2RhdGFkaXIpCisgdGV4X2RkaXIgICAgICAgICAgID0gJChERVNURElSKSQodGV4ZGlyKQorIAorLXByb2dzICAgIDo9IHNnbWwyaHRtbCBzZ21sMmluZm8gc2dtbDJsYXRleCBzZ21sMmx5eCBzZ21sMnJ0ZiBzZ21sMnR4dCBzZ21sY2hlY2sKKytwcm9ncyAgICA6PSBzZ21sMmh0bWwgc2dtbDJpbmZvIHNnbWwybGF0ZXggc2dtbDJseXggc2dtbDJ0eHQgc2dtbGNoZWNrCisgCisgUFJPRklMRSAgPQorIElOQ0xVREUgID0KK0BAIC03MSw5ICs3MSw5IEBAIGVuZGlmCisgCSggY2Qgc2dtbHByZSA7IFwKKyAJICAkKE1BS0UpICBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgTEVYPWZsZXggc2dtbHByZSB8fCBleGl0IC0xICkKKyAKKy0JQGVjaG8gIkNvbXBpbGluZyBSVEYgY29udmVyc2lvbiB0b29scyAoaW4gcnRmLWZpeC8pLi4uIgorLQkoIGNkIHJ0Zi1maXggOyBcCistCSAgJChNQUtFKSBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgfHwgZXhpdCAtMSApCisrIwlAZWNobyAiQ29tcGlsaW5nIFJURiBjb252ZXJzaW9uIHRvb2xzIChpbiBydGYtZml4LykuLi4iCisrIwkoIGNkIHJ0Zi1maXggOyBcCisrIwkgICQoTUFLRSkgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIHx8IGV4aXQgLTEgKQorIAorIAlAZWNobyAibWFraW5nIG1hbiBwYWdlcyBpbiBnZW5tYW4gLi4uIgorIAlpZiBbICEgLWQgZ2VubWFuIF07IHRoZW4gbWtkaXIgZ2VubWFuIDsgZmkKK0BAIC0xMTcsNyArMTE3LDcgQEAgZW5kaWYKKyAKKyAjICAgIC0tIEluc3RhbGwgYXV4aWxpYXJ5IHByb2dyYW1zCisgCW1rZGlyIC1wICQoYXV4YmluX2RkaXIpCistCWZvciBpaSBpbiBzZ21scHJlL3NnbWxwcmUgcnRmLWZpeC9ydGYycnRmOyBkbyBcCisrCWZvciBpaSBpbiBzZ21scHJlL3NnbWxwcmU7IGRvIFwKKyAJICBibj1gYmFzZW5hbWUgJCRpaWA7IFwKKyAJICAkKElOU1RBTExfUFJPR1JBTSkgJCRpaSAkKGF1eGJpbl9kZGlyKS8kJGJuOyBcCisgCWRvbmUKK0BAIC0yMDYsNyArMjA2LDcgQEAgYmluL2xpbnV4ZG9jOjogTWFrZWZpbGUgYmluL2xpbnV4ZG9jLmluCisgCisgY2xlYW46OgorIAktcm0gLWYgKn4gYmluLyp+IGJpbi9saW51eGRvYworLQlmb3IgZCBpbiAkKERESVJTKSAkKE1ESVJTKSBydGYtZml4OyBkbyAkKE1BS0UpIC1DICQkZCBjbGVhbjsgZG9uZQorKwlmb3IgZCBpbiAkKERESVJTKSAkKE1ESVJTKTsgZG8gJChNQUtFKSAtQyAkJGQgY2xlYW47IGRvbmUKKyAJKGNkIHNnbWxwcmUgOyBybSAtZiBzZ21scHJlLm8gc2dtbHByZSkKKyAJLXJtIC1yZiBnZW5tYW4vCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdGV4X2RvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyODk1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRGlzYWJsZSBidWlsZGluZyBkb2N1bWVudGF0aW9uIHdoaWNoIHJlcXVpcmVzIHRoZSBsYXRleCB1dGlsaXR5LgorVGhpcyBwYXRjaCBzaG91bGQgYmUgZHJvcHBlZCBvbmNlIHdlIGluY2x1ZGUgYSBuYXRpdmUgdmVyc2lvbiBvZgorbGF0ZXguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitUZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBkb2N1bWVudGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAorLS0tIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoCTIwMDktMTEtMDkgMTE6NTg6MjUuMDAwMDAwMDAwIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDItMjUgMTU6MjM6NTguNjEwMDE2MTE0IC0wODAwCitAQCAtNDYsMTEgKzQ2LDExIEBACisgCSRUTVBESVIvc2dtbDJ0eHQgLWIgMSAuL2d1aWRlCisgZmkKKyAKKy1pZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCistCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMmxhdGV4CistCWVjaG8gIi0gQnVpbGRpbmcgbGF0ZXggZG9jcyIgPiYyCistCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCisrIwlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJsYXRleAorKyMJZWNobyAiLSBCdWlsZGluZyBsYXRleCBkb2NzIiA+JjIKKysjCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKysjZmkKKyAKKyBpZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCisgCWVjaG8gIiAgICsgZHZpcHMiID4mMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdHh0X2RvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3ODQxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRGlzYWJsZSBidWlsZGluZyB0eHQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLAorYXMgSSBoYXZlIGZvdW5kIGFuIFVidW50dSAxMC4xMCBzeXN0ZW0gd2hpY2ggdGhyb3dzIGVycm9ycyBkdXJpbmcKK2J1aWxkaW5nIHRoaXMgdGhhdCBJJ2QgbGlrZSB0byB1bHRpbWF0ZWx5IGZpeC4gVGhlIGVycm9yIG1hbmlmZXN0cworaXRzZWxmIGZyb20gdGhlIGVuZCBvZiBMaW51eERvY1Rvb2xzLnBtIHdpdGggdGhlIGZvbGxvd2luZyBtZXNzYWdlcworZHVyaW5nIGRvX2luc3RhbGw6CisKK3wgLSBCdWlsZGluZyB0eHQgZG9jcworfCBQcm9jZXNzaW5nIGZpbGUgLi9ndWlkZQorfCB0cm9mZjogZmF0YWwgZXJyb3I6IGNhbid0IGZpbmQgbWFjcm8gZmlsZSBzCit8ICBmbXRfdHh0Ojpwb3N0QVNQOiBFbXB0eSBvdXRwdXQgZmlsZSwgZXJyb3Igd2hlbiBjYWxsaW5nIGdyb2ZmLiBBYm9ydGluZy4uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorVGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpY2ggZGlzYWJsZXMgZG9jdW1lbnRhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy8vZG9jL01ha2Vkb2Muc2ggbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCistLS0gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvL2RvYy9NYWtlZG9jLnNoCTIwMDktMTEtMDkgMTE6NTg6MjUuMDAwMDAwMDAwIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDMtMDQgMTc6Mzc6MjQuNzg4OTIzOTk4IC0wODAwCitAQCAtNDAsMTEgKzQwLDExIEBACisgCisgY2htb2QgdSt4ICRUTVBESVIvbGludXhkb2MKKyAKKy1pZiBbIC1uICJgd2hpY2ggZ3JvZmZgIiBdOyB0aGVuCistCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMnR4dAorLQllY2hvICItIEJ1aWxkaW5nIHR4dCBkb2NzIiA+JjIKKy0JJFRNUERJUi9zZ21sMnR4dCAtYiAxIC4vZ3VpZGUKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggZ3JvZmZgIiBdOyB0aGVuCisrIwlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJ0eHQKKysjCWVjaG8gIi0gQnVpbGRpbmcgdHh0IGRvY3MiID4mMgorKyMJJFRNUERJUi9zZ21sMnR4dCAtYiAxIC4vZ3VpZGUKKysjZmkKKyAKKyBpZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCisgCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMmxhdGV4CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuMTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTRlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYwpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIG00LmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworTElDRU5TRSA9ICJHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisJICAgICAgICAgICAgZmlsZTovL2V4YW1wbGVzL0NPUFlJTkc7bWQ1PTQwMzE1OTNiMjE2NmQ2YzQ3Y2FlMjgyZDk0NGE3ZWRlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vYWNfY29uZmlnX2xpbmtzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorCSAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNWU5OTU0YjFkYWUwMzY3NjJmN2IxMzY3M2EyY2Y3NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzY2U3MjUxMzNlZTU1MmI4YjRiYWNhNzgzN2ZiNzcyOTQwYjI1ZTgxYjJhOWRjOTI1MzdhZWFmNzMzNTM4YzllIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC45LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiMmMxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBtNC5pbmMKKworTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmVcCisJZmlsZTovL2V4YW1wbGVzL0NPUFlJTkc7bWQ1PTFkNDliZDYxZGM1OTBmMDE0Y2FlNzE3M2I0M2UzZTVjIgorCitQUiA9ICJyMiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYmE4ZTE0N2FmZjVlNzliZDJiZmI5ODNkODZiNTNkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MTVjZTUzODUzZmJmNjQ5MzYxN2Y0NjczODliNzk5MjA4YjFlYzk4Mjk2Yjk1YmU0NGE2ODNmOGJjZmQ3YzQ3IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC1uYXRpdmVfMS40LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDhhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitpbmhlcml0IG5hdGl2ZQorCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCitERVBFTkRTICs9ICJnbnUtY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L2dudS1jb25maWcvY29uZmlnLnN1YiAuCisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9nbnUtY29uZmlnL2NvbmZpZy5ndWVzcyAuCisJb2VfcnVuY29uZgorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTgzOTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYwpAQCAtMCwwICsxLDEwIEBACitTVU1NQVJZID0gIlRyYWRpdGlvbmFsIFVuaXggbWFjcm8gcHJvY2Vzc29yIgorREVTQ1JJUFRJT04gPSAiR05VIG00IGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFkaXRpb25hbCBVbml4IG1hY3JvIHByb2Nlc3Nvci4gIEl0IGlzIG1vc3RseSBTVlI0IFwKK2NvbXBhdGlibGUgYWx0aG91Z2ggaXQgaGFzIHNvbWUgZXh0ZW5zaW9ucyAoZm9yIGV4YW1wbGUsIGhhbmRsaW5nIG1vcmUgdGhhbiA5IHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0byBtYWNyb3MpLiBcCitHTlUgTTQgYWxzbyBoYXMgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciBpbmNsdWRpbmcgZmlsZXMsIHJ1bm5pbmcgc2hlbGwgY29tbWFuZHMsIGRvaW5nIGFyaXRobWV0aWMsIGV0Yy4iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VNQUtFICs9ICInaW5mb2Rpcj0ke2luZm9kaXJ9JyIKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAiCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbTQvbTQtJHtQVn0udGFyLmd6IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2FjX2NvbmZpZ19saW5rcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1YzBiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitUaGlzIHBhdGNoIGZpeGVzIGEgYnVpbGQgcHJvYmxlbSBmb3IgbTQtbmF0aXZlIGV4cGVyaWVuY2VkIG9uIFVidW50dSA5LjEwLAord2hlcmUgYXV0b2NvbmYvYXV0b21ha2UgKEFDX0NPTkZJR19MSU5LUykgZW5kcyB1cCBtYWtpbmcgR05VbWFrZWZpbGUgYQorc3ltbGluayB0byBpdHNlbGYuCisKK1RoZSBwYXRjaCBjb21tZW50cyBvdXQgYWNfY29uZmlnX2xpbmtzIGRpcmVjdGx5IGluIGNvbmZpZ3VyZSwKK2FzIGF1dG9yZWNvbmYgaXMgbm90IGFjdHVhbGx5IHJ1biBmb3IgbTQtbmF0aXZlLgorCitJIGJlbGlldmUgaXQgc2hvdWxkIGJlIHNhZmUsIGFzIEdOVW1ha2VmaWxlIGlzIGFjdHVhbGx5IHVucGFja2VkIGZyb20KK3NvdXJjZSwgYW5kIHdoYXQgd2Ugd2FudCBpcyB0byBpcyB0byBub3QgdG91Y2ggaXQuCisKK1Rlc3RlZCBvbiB4ODZfNjRfbGludXggKFVidW50dSA4LjA0IGFuZCA5LjEwKS4KKworMjAwOS0xMS0xMAlFc2JlbiBIYWFiZW5kYWwJICAgIDxlaGFAZG9yZWRldmVsb3BtZW50LmRrPgorCitkaWZmIC11ck4gbTQtMS40LjEzLm9yaWcvY29uZmlndXJlIG00LTEuNC4xMy9jb25maWd1cmUKKy0tLSBtNC0xLjQuMTMub3JpZy9jb25maWd1cmUJMjAwOS0xMS0xMCAxMDo1NDowMC4zMDE3MDcwOTcgKzAxMDAKKysrKyBtNC0xLjQuMTMvY29uZmlndXJlCTIwMDktMTEtMTAgMTA6NTQ6MTcuMzE0MjA2Mzc5ICswMTAwCitAQCAtMTQ4NjAsOCArMTQ4NjAsOCBAQAorICAgIyBvbmx5LCBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgd2Ugc2tpcCB0aGUgbGluayB3aXRoIG9sZGVyIGF1dG9jb25mLgorICAgIyBBdXRvbWFrZSAxLjEwLjEgYW5kIGVhcmxpZXIgdHJ5IHRvIHJlbW92ZSBHTlVtYWtlZmlsZSBpbiBub24tVlBBVEgKKyAgICMgYnVpbGRzLCBzbyB1c2UgYSBzaGVsbCB2YXJpYWJsZSB0byBieXBhc3MgdGhpcy4KKy0gIEdOVW1ha2VmaWxlPUdOVW1ha2VmaWxlCistICBhY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgJEdOVW1ha2VmaWxlOiRHTlVtYWtlZmlsZSIKKysgIyBHTlVtYWtlZmlsZT1HTlVtYWtlZmlsZQorKyAjIGFjX2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyAkR05VbWFrZWZpbGU6JEdOVW1ha2VmaWxlIgorIAorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2ZpeF9mb3JfY2lyY3VsYXJfZGVwZW5kZW5jeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzQ1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1RoZSBvbGRlciBHUEx2MiBtNCBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBuZXdlciBhdXRvY29uZi4gSXQgY2F1c2VzIHRoZSAKK2NpcmN1bGFyIGRlcGVuZGVuY3kgYXMgc2VlbiBiZWxsb3cuCisgIFJlbW92aW5nIHRoaXMgbTQgZmlsZSB3aGljaCB3YXMgbmVlZGVkIG9ubHkgZm9ybCBvbGRlciBhdXRvY29uZgorCit8IGNvbmZpZ3VyZS5hYzozNDogZXJyb3I6IEFDX1JFUVVJUkU6IGNpcmN1bGFyIGRlcGVuZGVuY3kgb2YgQUNfR05VX1NPVVJDRQorfCAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbTQtMS40LjktcjAvbTQtMS40LjkvbTQvZXh0ZW5zaW9ucy5tNDoxOTogQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgLi4vLi4vbGliL2F1dG9jb25mL3NwZWNpZmljLm00OjMxMDogQUNfR05VX1NPVVJDRSBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9tNC0xLjQuOS1yMC9tNC0xLjQuOS9tNC9nbnVsaWItY29tcC5tNDoyMTogTTRfRUFSTFkgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6MzQ6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9tNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorfCBhY2xvY2FsOiAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vYXV0b200dGUgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKK3wgYXV0b3JlY29uZjogYWNsb2NhbCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wMy8xNgorCitJbmRleDogbTQtMS40LjkvbTQvZXh0ZW5zaW9ucy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG00LTEuNC45Lm9yaWcvbTQvZXh0ZW5zaW9ucy5tNAorKysrIG00LTEuNC45L200L2V4dGVuc2lvbnMubTQKK0BAIC02LDUzICs2LDEwIEBACisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgVGhpcyBkZWZpbml0aW9uIG9mIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBpcyBzdG9sZW4gZnJvbSBDVlMKKy0jIEF1dG9jb25mLiAgUGVyaGFwcyB3ZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSB3ZSBjYW4gYXNzdW1lIEF1dG9jb25mCistIyAyLjYxIG9yIGxhdGVyIGV2ZXJ5d2hlcmUsIGJ1dCBzaW5jZSBDVlMgQXV0b2NvbmYgbXV0YXRlcyByYXBpZGx5CistIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorLQorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisgCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKyBBQ19ERUZVTihbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy0gIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0pCisrICBbXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L21ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmYjQxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3LmhvbGdlcnNjaHVyaWcuZGUvcGF0Y2hlci5odG1sCisjCisKKy0tLSBtNC0xLjQuMi9kb2MvTWFrZWZpbGUuaW5+bWFrZQorKysrIG00LTEuNC4yL2RvYy9NYWtlZmlsZS5pbgorQEAgLTU3LDkgKzU3LDkgQEAKKyAJZGF0ZSA+ICQoc3JjZGlyKS9zdGFtcC12dGkKKyAKKyBpbnN0YWxsOiBhbGwKKy0JJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChpbmZvZGlyKQorKwkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChpbmZvZGlyKQorIAljZCAkKHNyY2RpcikgJiYgZm9yIGZpbGUgaW4gbTQuaW5mbyo7IGRvIFwKKy0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoaW5mb2RpcikvJCRmaWxlOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChpbmZvZGlyKS8kJGZpbGU7IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbDoKKy0tLSBtNC0xLjQuMi9zcmMvTWFrZWZpbGUuaW5+bWFrZQorKysrIG00LTEuNC4yL3NyYy9NYWtlZmlsZS5pbgorQEAgLTM1LDcgKzM1LDcgQEAKKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorIHRyYW5zZm9ybSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorLWJpbmRpciA9ICQoZXhlY19wcmVmaXgpL2JpbgorK2JpbmRpciA9IEBiaW5kaXJACisgCisgQ09NUElMRSA9ICQoQ0MpIC1jICQoREVGUykgJChJTkNMVURFUykgJChDUFBGTEFHUykgJChDRkxBR1MpCisgTElOSyA9ICQoQ0MpICQoTERGTEFHUykgLW8gJEAKK0BAIC04NCw4ICs4NCw4IEBACisgCSQoTElOSykgYW5zaTJrbnIubyAkKExJQlMpCisgCisgaW5zdGFsbDogYWxsCistCSQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgbTQgJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYAorKwkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBtNCAkKERFU1RESVIpJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYAorIAorIHVuaW5zdGFsbDoKKyAJcm0gLWYgJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZmIzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorZWdsaWJjIGhhcyByZW1vdmUgZ2V0cyBzdGFydGluZyAyLjE2Cit0aGVyZWZvcmUgY2hlY2sgZm9yIGl0cyBiZWluZyB0aGVyZSBiZWZvcmUgCit1bmRlZmluaW5nIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogbTQtMS40LjE3L2xpYi9zdGRpby5pbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbTQtMS40LjE3Lm9yaWcvbGliL3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNDo0MTowMS42Nzg0OTYyMjcgKzAzMDAKKysrKyBtNC0xLjQuMTcvbGliL3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNDo0MTo0OC44NDk0Mjc4MzkgKzAzMDAKK0BAIC03MTcsMTAgKzcxNywxMiBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmc7IGJlc2lkZXMsIEMxMQorICAgIHJlbW92ZWQgaXQuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworICNpZiBIQVZFX1JBV19ERUNMX0dFVFMKKyBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisgI2VuZGlmCisrI2VuZGlmCisgCisgCisgI2lmIEBHTlVMSUJfT0JTVEFDS19QUklOVEZAIHx8IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjE3LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJjMGFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgbTQtJHtQVn0uaW5jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmMwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJlOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjo0ODogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorLi4uCit8IE1ha2VmaWxlLmFtOjE5OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCisKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDQKKworSW5kZXg6IG1ha2UtMy44MS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9jb25maWd1cmUuaW4KKysrKyBtYWtlLTMuODEvY29uZmlndXJlLmluCitAQCAtNDQsOSArNDQsNiBAQCBBQ19BSVgKKyBBQ19JU0NfUE9TSVgKKyBBQ19NSU5JWAorIAorLSMgTmVlZGVkIGZvciBhbnNpMmtucgorLUFNX0NfUFJPVE9UWVBFUworLQorICMgRW5hYmxlIGdldHRleHQsIGluICJleHRlcm5hbCIgbW9kZS4KKyAKKyBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKDAuMTQuMSkKK0luZGV4OiBtYWtlLTMuODEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9NYWtlZmlsZS5hbQorKysrIG1ha2UtMy44MS9NYWtlZmlsZS5hbQorQEAgLTE2LDcgKzE2LDcgQEAKKyAjIEdOVSBNYWtlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gMS44IGRpc3QtYnppcDIgY2hlY2stbmV3cyBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAxLjggZGlzdC1iemlwMiBjaGVjay1uZXdzCisgQUNMT0NBTF9BTUZMQUdTCT0gIC1JIGNvbmZpZworIAorIE1BS0VfSE9TVCA9CUBNQUtFX0hPU1RACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkNzYwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlaW5mby5wYXRjaApAQCAtMCwwICsxLDIyIEBACitBbGxvdyBkb2NzIHRvIGJ1aWxkIHdpdGggbWFrZWluZm8gNS5YLCBmaXhpbmcgdGhlIGVycm9yOgorCitkb2MvbWFrZS50ZXhpOjgxNjU6IEBpdGVteCBtdXN0IGZvbGxvdyBAaXRlbQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JQCisyMDE0LzAzLzI5CisKK0luZGV4OiBtYWtlLTMuODEvZG9jL21ha2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1ha2UtMy44MS5vcmlnL2RvYy9tYWtlLnRleGkJMjAwNi0wNC0wMSAwNjozNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtYWtlLTMuODEvZG9jL21ha2UudGV4aQkyMDE0LTAzLTI5IDA5OjM5OjUxLjAwNzcyNzAxMiArMDAwMAorQEAgLTgxNjIsNyArODE2Miw3IEBACisgcmFyZWx5IG5lZWQgdG8gc3BlY2lmeSB0aGlzIG9wdGlvbiBzaW5jZSBAc2FtcHttYWtlfSBkb2VzIGl0IGZvciB5b3U7Cisgc2VlIEByZWZ7LXcgT3B0aW9uLCAsVGhlIEBzYW1wey0tcHJpbnQtZGlyZWN0b3J5fSBPcHRpb259LikKKyAKKy1AaXRlbXggLS1uby1wcmludC1kaXJlY3RvcnkKKytAaXRlbSAtLW5vLXByaW50LWRpcmVjdG9yeQorIEBjaW5kZXggQGNvZGV7LS1uby1wcmludC1kaXJlY3Rvcnl9CisgRGlzYWJsZSBwcmludGluZyBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdW5kZXIgQGNvZGV7LXd9LgorIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIEBjb2Rley13fSBpcyB0dXJuZWQgb24gYXV0b21hdGljYWxseSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlYTYwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiR05VIHRvb2wgdGhhdCBjb250cm9scyB0aGUgYnVpbGQgcHJvY2VzcyIKK0RFU0NSSVBUSU9OID0gIk1ha2UgaXMgYSB0b29sIHdoaWNoIGNvbnRyb2xzIHRoZSBnZW5lcmF0aW9uIG9mIGV4ZWN1dGFibGVzIGFuZCBvdGhlciBub24tc291cmNlIGZpbGVzIG9mIGEgXAorcHJvZ3JhbSBmcm9tIHRoZSBwcm9ncmFtJ3Mgc291cmNlIGZpbGVzLiAgTWFrZSBnZXRzIGl0cyBrbm93bGVkZ2Ugb2YgaG93IHRvIGJ1aWxkIHlvdXIgcHJvZ3JhbSBmcm9tIGEgZmlsZSBcCitjYWxsZWQgdGhlIG1ha2VmaWxlLCB3aGljaCBsaXN0cyBlYWNoIG9mIHRoZSBub24tc291cmNlIGZpbGVzIGFuZCBob3cgdG8gY29tcHV0ZSBpdCBmcm9tIG90aGVyIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tYWtlLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tYWtlL21ha2UtJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdGV4aW5mbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTc5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzMuODEuYmIKQEAgLTAsMCArMSwxNSBAQAorUFIgPSAicjEiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zNjFiNmI4MzdjYWQyNmM2OTAwYTkyNmI2MmFhZGE1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbG9iL0NPUFlJTkcuTElCO21kNT00YTc3MGI2N2U2YmUwZjYwZGEyNDRiZWIyZGUwZmNlNCIKKworcmVxdWlyZSBtYWtlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCitTUkNfVVJJICs9ICJmaWxlOi8vbWFrZWluZm8ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNTQ4NTNlMGIyZGE5MGM1MjdlMzVhYWJiOGQ2ZjFlNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmM2U2OTAyMzc3MWUyMzkwOGY1ZDU1OTI5NTRkODI3MWQzZDZhZjA5NjkzY2VjZmQyOWNlZTZmZGU4NTUwZGM4IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjBkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYgpAQCAtMCwwICsxLDEyIEBACitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCityZXF1aXJlIG1ha2UuaW5jCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWd1aWxlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTdhN2EyMjRhODIyZjk0Nzg5YTU4N2NjYmNlZGZmNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJjNzYxMzM4OTY1MGVlNmEyNDU1NGI1MjU3MmEyNzJmNzM1NjE2NGZkMmM0MTMyYjBiY2YxMzEyM2U0ZmNhNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvQ09QWUlORy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg5MDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2gKQEAgLTAsMCArMSwzNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC1ydU4gbWFrZWRldnMtMS4wLjAtb3JpZy9DT1BZSU5HIG1ha2VkZXZzLTEuMC4wL0NPUFlJTkcKKy0tLSBtYWtlZGV2cy0xLjAuMC1vcmlnL0NPUFlJTkcJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBtYWtlZGV2cy0xLjAuMC9DT1BZSU5HCTIwMTAtMTItMDkgMTY6NDI6MjAuMjc0OTg0NjY1ICswODAwCitAQCAtMCwwICsxLDM0MCBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrDAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKwwKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKwwKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKwwKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKwwKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysKKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9tYWtlZGV2cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWYzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYwpAQCAtMCwwICsxLDU4OSBAQAorI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNkZWZpbmUgTUlOT1JCSVRTCTgKKyNkZWZpbmUgTUtERVYobWEsbWkpCSgoKG1hKSA8PCBNSU5PUkJJVFMpIHwgKG1pKSkKKyNkZWZpbmUgTUFYX0lEX0xFTiAgICAgIDQwCisjZGVmaW5lIE1BWF9OQU1FX0xFTiAgICA0MAorI2lmbmRlZiBQQVRIX01BWAorI2RlZmluZSBQQVRIX01BWCAgICAgICAgNDA5NgorI2VuZGlmCisjZGVmaW5lIFZFUlNJT04gICAgICAgICAiMS4wLjEiCisKKy8qIFRoZXNlIGFyZSBhbGwgc3RvbGVuIGZyb20gYnVzeWJveCdzIGxpYmJiIHRvIG1ha2UKKyAqIGVycm9yIGhhbmRsaW5nIHNpbXBsZXIgKGFuZCBzaW5jZSBJIG1haW50YWluIGJ1c3lib3gsCisgKiBJJ20gcmF0aGVyIHBhcnRpYWwgdG8gdGhlc2UgZm9yIGVycm9yIGhhbmRsaW5nKS4KKyAqICAtRXJpaworICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYXBwX25hbWUgPSAibWFrZWRldnMiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbW9yeV9leGhhdXN0ZWQgPSAibWVtb3J5IGV4aGF1c3RlZCI7CitzdGF0aWMgY2hhciBkZWZhdWx0X3Jvb3RkaXJbXT0iLiI7CitzdGF0aWMgY2hhciAqcm9vdGRpciA9IGRlZmF1bHRfcm9vdGRpcjsKK3N0YXRpYyBpbnQgdHJhY2UgPSAwOworCitzdHJ1Y3QgbmFtZV9pZCB7CisJY2hhciBuYW1lW01BWF9OQU1FX0xFTisxXTsKKwl1bnNpZ25lZCBsb25nIGlkOworCXN0cnVjdCBuYW1lX2lkICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBuYW1lX2lkICp1c3JfbGlzdCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IG5hbWVfaWQgKmdycF9saXN0ID0gTlVMTDsKKworc3RhdGljIHZvaWQgdmVycm9yX21zZyhjb25zdCBjaGFyICpzLCB2YV9saXN0IHApCit7CisJZmZsdXNoKHN0ZG91dCk7CisJZnByaW50ZihzdGRlcnIsICIlczogIiwgYXBwX25hbWUpOworCXZmcHJpbnRmKHN0ZGVyciwgcywgcCk7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yX21zZ19hbmRfZGllKGNvbnN0IGNoYXIgKnMsIC4uLikKK3sKKwl2YV9saXN0IHA7CisKKwl2YV9zdGFydChwLCBzKTsKKwl2ZXJyb3JfbXNnKHMsIHApOworCXZhX2VuZChwKTsKKwlwdXRjKCdcbicsIHN0ZGVycik7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZCB2cGVycm9yX21zZyhjb25zdCBjaGFyICpzLCB2YV9saXN0IHApCit7CisJaW50IGVyciA9IGVycm5vOworCisJaWYgKHMgPT0gMCkKKwkJcyA9ICIiOworCXZlcnJvcl9tc2cocywgcCk7CisJaWYgKCpzKQorCQlzID0gIjogIjsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHMsIHN0cmVycm9yKGVycikpOworfQorCitzdGF0aWMgdm9pZCBwZXJyb3JfbXNnX2FuZF9kaWUoY29uc3QgY2hhciAqcywgLi4uKQoreworCXZhX2xpc3QgcDsKKworCXZhX3N0YXJ0KHAsIHMpOworCXZwZXJyb3JfbXNnKHMsIHApOworCXZhX2VuZChwKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyBGSUxFICp4Zm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFICpmcDsKKworCWlmICgoZnAgPSBmb3BlbihwYXRoLCBtb2RlKSkgPT0gTlVMTCkKKwkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIHBhdGgpOworCXJldHVybiBmcDsKK30KKworc3RhdGljIGNoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwljaGFyICp0OworCisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0ID0gc3RyZHVwKHMpOworCisJaWYgKHQgPT0gTlVMTCkKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHN0cnVjdCBuYW1lX2lkKiBhbGxvY19ub2RlKHZvaWQpCit7CisJc3RydWN0IG5hbWVfaWQgKm5vZGU7CisJbm9kZSA9IChzdHJ1Y3QgbmFtZV9pZCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmFtZV9pZCkpOworCWlmIChub2RlID09IE5VTEwpIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisJfQorCW1lbXNldCgodm9pZCAqKW5vZGUtPm5hbWUsIDAsIE1BWF9OQU1FX0xFTisxKTsKKwlub2RlLT5pZCA9IDB4ZmZmZmZmZmY7CisJbm9kZS0+bmV4dCA9IE5VTEw7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCogcGFyc2VfbGluZShjaGFyICpsaW5lKQoreworCWNoYXIgKnA7CisJaW50IGk7CisJY2hhciBpZF9idWZbTUFYX0lEX0xFTisxXTsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZTsKKwlub2RlID0gYWxsb2Nfbm9kZSgpOworCXAgPSBsaW5lOworCWkgPSAwOworCS8vIEdldCBuYW1lIGZpZWxkCisJd2hpbGUgKCpwICE9ICc6JykgeworCQlpZiAoaSA+IE1BWF9OQU1FX0xFTikKKwkJCWVycm9yX21zZ19hbmRfZGllKCJOYW1lIGZpZWxkIHRvbyBsb25nIik7CisJCW5vZGUtPm5hbWVbaSsrXSA9ICpwKys7CisJfQorCW5vZGUtPm5hbWVbaV0gPSAnXDAnOworCXArKzsKKwkvLyBTa2lwIHRoZSBzZWNvbmQgZmllbGQKKwl3aGlsZSAoKnAgIT0gJzonKQorCQlwKys7CisJcCsrOworCS8vIEdldCBpZCBmaWVsZAorCWkgPSAwOworCXdoaWxlICgqcCAhPSAnOicpIHsKKwkJaWYgKGkgPiBNQVhfSURfTEVOKQorCQkJZXJyb3JfbXNnX2FuZF9kaWUoIklEIGZpbGVkIHRvbyBsb25nIik7CisJCWlkX2J1ZltpKytdID0gKnArKzsKKwl9CisJaWRfYnVmW2ldID0gJ1wwJzsKKwlub2RlLT5pZCA9IGF0b2woaWRfYnVmKTsKKwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2xpc3RfZnJvbV9maWxlKEZJTEUgKmZpbGUsIHN0cnVjdCBuYW1lX2lkICoqcGxpc3QpCit7CisJY2hhciAqbGluZTsKKwlpbnQgbGVuID0gMDsKKwlzaXplX3QgbGVuZ3RoID0gMjU2OworCXN0cnVjdCBuYW1lX2lkICpub2RlLCAqY3VyOworCisJaWYoKGxpbmUgPSAoY2hhciAqKW1hbGxvYyhsZW5ndGgpKSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKworCXdoaWxlICgobGVuID0gZ2V0bGluZSgmbGluZSwgJmxlbmd0aCwgZmlsZSkpICE9IC0xKSB7CisJCW5vZGUgPSBwYXJzZV9saW5lKGxpbmUpOworCQlpZiAoKnBsaXN0ID09IE5VTEwpIHsKKwkJCSpwbGlzdCA9IG5vZGU7CisJCQljdXIgPSAqcGxpc3Q7CisJCX0gZWxzZSB7CisJCQljdXItPm5leHQgPSBub2RlOworCQkJY3VyID0gY3VyLT5uZXh0OworCQl9CisJfQorCisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnZlcnQyZ3VpZChjaGFyICppZF9idWYsIHN0cnVjdCBuYW1lX2lkICpzZWFyY2hfbGlzdCkKK3sKKwljaGFyICpwOworCWludCBpc251bTsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZTsKKwlwID0gaWRfYnVmOworCWlzbnVtID0gMTsKKwl3aGlsZSAoKnAgIT0gJ1wwJykgeworCQlpZiAoIWlzZGlnaXQoKnApKSB7CisJCQlpc251bSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlwKys7CisJfQorCWlmIChpc251bSkgeworCQkvLyBDaGVjayBmb3IgYmFkIHVzZXIvZ3JvdXAgbmFtZQorCQlub2RlID0gc2VhcmNoX2xpc3Q7CisJCXdoaWxlIChub2RlICE9IE5VTEwpIHsKKwkJCWlmICghc3RybmNtcChub2RlLT5uYW1lLCBpZF9idWYsIHN0cmxlbihpZF9idWYpKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogQmFkIHVzZXIvZ3JvdXAgbmFtZSAlcyBkZXRlY3RlZFxuIiwgaWRfYnVmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW5vZGUgPSBub2RlLT5uZXh0OworCQl9CisJCXJldHVybiAodW5zaWduZWQgbG9uZylhdG9sKGlkX2J1Zik7CisJfSBlbHNlIHsKKwkJbm9kZSA9IHNlYXJjaF9saXN0OworCQl3aGlsZSAobm9kZSAhPSBOVUxMKSB7CisJCQlpZiAoIXN0cm5jbXAobm9kZS0+bmFtZSwgaWRfYnVmLCBzdHJsZW4oaWRfYnVmKSkpCisJCQkJcmV0dXJuIG5vZGUtPmlkOworCQkJbm9kZSA9IG5vZGUtPm5leHQ7CisJCX0KKwkJZXJyb3JfbXNnX2FuZF9kaWUoIk5vIGVudHJ5IGZvciAlcyBpbiBzZWFyY2ggbGlzdCIsIGlkX2J1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2xpc3Qoc3RydWN0IG5hbWVfaWQgKmxpc3QpCit7CisJc3RydWN0IG5hbWVfaWQgKmN1cjsKKwljdXIgPSBsaXN0OworCXdoaWxlIChjdXIgIT0gTlVMTCkgeworCQlsaXN0ID0gY3VyOworCQljdXIgPSBjdXItPm5leHQ7CisJCWZyZWUobGlzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfbmV3X2RpcmVjdG9yeShjaGFyICpuYW1lLCBjaGFyICpwYXRoLAorCQl1bnNpZ25lZCBsb25nIHVpZCwgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpCisJCWZwcmludGYoc3RkZXJyLCAiRGlyZWN0b3J5OiAlcyAlcyAgVUlEOiAlbGQgIEdJRCAlbGQgIE1PREU6ICUwNGxvIiwgcGF0aCwgbmFtZSwgdWlkLCBnaWQsIG1vZGUpOworCisJaWYgKG1rZGlyKHBhdGgsIG1vZGUpIDwgMCkgeworCQlpZiAoRUVYSVNUID09IGVycm5vKSB7CisJCQkvKiBVbmNvbmRpdGlvbmFsbHkgYXBwbHkgdGhlIG1vZGUgc2V0dGluZyB0byB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5LgorCQkJICogWFhYIHNob3VsZCBvdXRwdXQgc29tZXRoaW5nIHdoZW4gdHJhY2UgKi8KKwkJCWNobW9kKHBhdGgsIG1vZGUgJiB+U19JRk1UKTsKKwkJfQorCX0KKwlpZiAodHJhY2UpCisJCXB1dGMoJ1xuJywgc3RkZXJyKTsKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZGV2aWNlKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCXVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUsIGRldl90IHJkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCWlmICh0cmFjZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkRldmljZTogJXMgJXMgIFVJRDogJWxkICBHSUQ6ICVsZCAgTU9ERTogJTA0bG8gIE1BSk9SOiAlZCAgTUlOT1I6ICVkIiwKKwkJCQlwYXRoLCBuYW1lLCB1aWQsIGdpZCwgbW9kZSwgKHNob3J0KShyZGV2ID4+IDgpLCAoc2hvcnQpKHJkZXYgJiAweGZmKSk7CisJfQorCisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisJc3RhdHVzID0gbHN0YXQocGF0aCwgJnNiKTsKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJLyogSXQgaXMgb2sgZm9yIHNvbWUgdHlwZXMgb2YgZmlsZXMgdG8gbm90IGV4aXQgb24gZGlzayAoc3VjaCBhcworCQkgKiBkZXZpY2Ugbm9kZXMpLCBidXQgaWYgdGhleSBfZG9fIGV4aXN0LCB0aGUgZmlsZSB0eXBlIGJpdHMgaGFkCisJCSAqIGJldHRlciBtYXRjaCB0aG9zZSBvZiB0aGUgYWN0dWFsIGZpbGUgb3Igc3RyYW5nZSB0aGluZ3Mgd2lsbCBoYXBwZW4uLi4gKi8KKwkJaWYgKChtb2RlICYgU19JRk1UKSAhPSAoc2Iuc3RfbW9kZSAmIFNfSUZNVCkpIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlwdXRjKCdcbicsIHN0ZGVycik7CisJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGV4aXN0aW5nIGZpbGUgKDA0JW8pIHR5cGUgZG9lcyBub3QgbWF0Y2ggc3BlY2lmaWVkIGZpbGUgdHlwZSAoMDQlbG8pISIsCisJCQkJCQlwYXRoLCAoc2Iuc3RfbW9kZSAmIFNfSUZNVCksIChtb2RlICYgU19JRk1UKSk7CisJCX0KKwkJaWYgKG1vZGUgIT0gc2Iuc3RfbW9kZSkgeworCQkJaWYgKHRyYWNlKQorCQkJCWZwcmludGYoc3RkZXJyLCAiIC0tIGFwcGx5aW5nIG5ldyBtb2RlIDA0JWxvIChvbGQgd2FzIDA0JW8pXG4iLCBtb2RlICYgflNfSUZNVCwgc2Iuc3RfbW9kZSAmIH5TX0lGTVQpOworCQkJLyogQXBwbHkgdGhlIG1vZGUgc2V0dGluZyB0byB0aGUgZXhpc3RpbmcgZGV2aWNlIG5vZGUgKi8KKwkJCWNobW9kKHBhdGgsIG1vZGUgJiB+U19JRk1UKTsKKwkJfQorCQllbHNlIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAtLSBleHRyYW5lb3VzIGVudHJ5IGluIHRhYmxlXG4iLCBwYXRoKTsKKwkJfQorCX0KKwllbHNlIHsKKwkJbWtub2QocGF0aCwgbW9kZSwgcmRldik7CisJCWlmICh0cmFjZSkKKwkJCXB1dGMoJ1xuJywgc3RkZXJyKTsKKworCX0KKworCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworc3RhdGljIHZvaWQgYWRkX25ld19maWxlKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCQkJCSAgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGaWxlOiAlcyAlcyAgVUlEOiAlbGQgIEdJRDogJWxkICBNT0RFOiAlMDRsb1xuIiwKKwkJCXBhdGgsIG5hbWUsIGdpZCwgdWlkLCBtb2RlKTsKKwl9CisKKwlpbnQgZmQgPSBvcGVuKHBhdGgsT19DUkVBVCB8IE9fV1JPTkxZLCBtb2RlKTsKKwlpZiAoZmQgPCAwKSB7CisJCWVycm9yX21zZ19hbmRfZGllKCIlczogZmlsZSBjYW4gbm90IGJlIGNyZWF0ZWQhIiwgcGF0aCk7CisJfSBlbHNlIHsKKwkJY2xvc2UoZmQpOworCX0KKwljaG1vZChwYXRoLCBtb2RlKTsKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKKworc3RhdGljIHZvaWQgYWRkX25ld19maWZvKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCQkJCSAgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpIHsKKwkJcHJpbnRmKCJGaWZvOiAlcyAlcyAgVUlEOiAlbGQgIEdJRDogJWxkICBNT0RFOiAlMDRsb1xuIiwKKwkJCXBhdGgsIG5hbWUsIGdpZCwgdWlkLCBtb2RlKTsKKwl9CisKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzdGF0IHNiOworCisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisJc3RhdHVzID0gc3RhdChwYXRoLCAmc2IpOworCisKKwkvKiBVcGRhdGUgdGhlIG1vZGUgaWYgd2UgZXhpc3QgYW5kIGFyZSBhIGZpZm8gYWxyZWFkeSAqLworCWlmIChzdGF0dXMgPj0gMCAmJiBTX0lTRklGTyhzYi5zdF9tb2RlKSkgeworCQljaG1vZChwYXRoLCBtb2RlKTsKKwl9IGVsc2UgeworCQlpZiAobWtub2QocGF0aCwgbW9kZSwgMCkpCisJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGZpbGUgY2FuIG5vdCBiZSBjcmVhdGVkIHdpdGggbWtub2QhIiwgcGF0aCk7CisJfQorCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworCisvKiAgZGV2aWNlIHRhYmxlIGVudHJpZXMgdGFrZSB0aGUgZm9ybSBvZjoKKyAgICA8cGF0aD4JPHR5cGU+IDxtb2RlPgk8dXNyPgk8Z3JwPgk8bWFqb3I+CTxtaW5vcj4JPHN0YXJ0Pgk8aW5jPgk8Y291bnQ+CisgICAgL2Rldi9tZW0gICAgYyAgICAgIDY0MCAgICAgIDAgICAgICAgMCAgICAgICAxICAgICAgIDEgICAgICAgMCAgICAgICAgMCAgICAgICAgLQorICAgIC9kZXYvemVybyAgIGMgICAgICA2NDQgICAgICByb290ICAgIHJvb3QgICAgMSAgICAgICA1ICAgICAgIC0gICAgICAgIC0gICAgICAgIC0KKworICAgIHR5cGUgY2FuIGJlIG9uZSBvZjoKKwlmCUEgcmVndWxhciBmaWxlCisJZAlEaXJlY3RvcnkKKwljCUNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlCisJYglCbG9jayBzcGVjaWFsIGRldmljZSBmaWxlCisJcAlGaWZvIChuYW1lZCBwaXBlKQorCisgICAgSSBkb24ndCBib3RoZXIgd2l0aCBzeW1saW5rcyAocGVybWlzc2lvbnMgYXJlIGlycmVsZXZhbnQpLCBoYXJkCisgICAgbGlua3MgKHNwZWNpYWwgY2FzZXMgb2YgcmVndWxhciBmaWxlcyksIG9yIHNvY2tldHMgKHdoeSBib3RoZXIpLgorCisgICAgUmVndWxhciBmaWxlcyBtdXN0IGV4aXN0IGluIHRoZSB0YXJnZXQgcm9vdCBkaXJlY3RvcnkuICBJZiBhIGNoYXIsCisgICAgYmxvY2ssIGZpZm8sIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgorKi8KK3N0YXRpYyBpbnQgaW50ZXJwcmV0X3RhYmxlX2VudHJ5KGNoYXIgKmxpbmUpCit7CisJY2hhciAqbmFtZTsKKwljaGFyIHVzcl9idWZbTUFYX0lEX0xFTl07CisJY2hhciBncnBfYnVmW01BWF9JRF9MRU5dOworCWNoYXIgcGF0aFs0MDk2XSwgdHlwZTsKKwl1bnNpZ25lZCBsb25nIG1vZGUgPSAwNzU1LCB1aWQgPSAwLCBnaWQgPSAwLCBtYWpvciA9IDAsIG1pbm9yID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMCwgaW5jcmVtZW50ID0gMSwgY291bnQgPSAwOworCisJaWYgKDAgPiBzc2NhbmYobGluZSwgIiU0MHMgJWMgJWxvICU0MHMgJTQwcyAlbHUgJWx1ICVsdSAlbHUgJWx1IiwgcGF0aCwKKwkJICAgICZ0eXBlLCAmbW9kZSwgdXNyX2J1ZiwgZ3JwX2J1ZiwgJm1ham9yLCAmbWlub3IsICZzdGFydCwKKwkJICAgICZpbmNyZW1lbnQsICZjb3VudCkpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzc2NhbmYgcmV0dXJuZWQgPCAwIGZvciBsaW5lICclcydcbiIsIGFwcF9uYW1lLCBsaW5lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdWlkID0gY29udmVydDJndWlkKHVzcl9idWYsIHVzcl9saXN0KTsKKwlnaWQgPSBjb252ZXJ0Mmd1aWQoZ3JwX2J1ZiwgZ3JwX2xpc3QpOworCisJaWYgKHN0cm5jbXAocGF0aCwgIi8iLCAxKSkgeworCQllcnJvcl9tc2dfYW5kX2RpZSgiRGV2aWNlIHRhYmxlIGVudHJpZXMgcmVxdWlyZSBhYnNvbHV0ZSBwYXRocyIpOworCX0KKwluYW1lID0geHN0cmR1cChwYXRoICsgMSk7CisJLyogcHJlZml4IHBhdGggd2l0aCByb290ZGlyICovCisJc3ByaW50ZihwYXRoLCAiJXMvJXMiLCByb290ZGlyLCBuYW1lKTsKKworCS8qIFhYWCBXaHkgaXMgbmFtZSBwYXNzZWQgaW50byBhbGwgb2YgdGhlIGFkZF9uZXdfKigpIHJvdXRpbmVzPyAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgJ2QnOgorCQltb2RlIHw9IFNfSUZESVI7CisJCWFkZF9uZXdfZGlyZWN0b3J5KG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnZic6CisJCW1vZGUgfD0gU19JRlJFRzsKKwkJYWRkX25ld19maWxlKG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAncCc6CisJCW1vZGUgfD0gU19JRklGTzsKKwkJYWRkX25ld19maWZvKG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnYyc6CisJY2FzZSAnYic6CisJCW1vZGUgfD0gKHR5cGUgPT0gJ2MnKSA/IFNfSUZDSFIgOiBTX0lGQkxLOworCQlpZiAoY291bnQgPiAwKSB7CisJCQlpbnQgaTsKKwkJCWRldl90IHJkZXY7CisJCQljaGFyIGJ1Zls4MF07CisKKwkJCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgaSsrKSB7CisJCQkJc3ByaW50ZihidWYsICIlcyVkIiwgbmFtZSwgaSk7CisJCQkJc3ByaW50ZihwYXRoLCAiJXMvJXMlZCIsIHJvb3RkaXIsIG5hbWUsIGkpOworCQkJCS8qIEZJWE1FOiAgTUtERVYgdXNlcyBpbGxpY2l0IGluc2lkZXIga25vd2xlZGdlIG9mIGtlcm5lbAorCQkJCSAqIG1ham9yL21pbm9yIHJlcHJlc2VudGF0aW9uLi4uICAqLworCQkJCXJkZXYgPSBNS0RFVihtYWpvciwgbWlub3IgKyAoaSAtIHN0YXJ0KSAqIGluY3JlbWVudCk7CisJCQkJc3ByaW50ZihwYXRoLCAiJXMvJXNcMCIsIHJvb3RkaXIsIGJ1Zik7CisJCQkJYWRkX25ld19kZXZpY2UoYnVmLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSwgcmRldik7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBGSVhNRTogIE1LREVWIHVzZXMgaWxsaWNpdCBpbnNpZGVyIGtub3dsZWRnZSBvZiBrZXJuZWwKKwkJCSAqIG1ham9yL21pbm9yIHJlcHJlc2VudGF0aW9uLi4uICAqLworCQkJZGV2X3QgcmRldiA9IE1LREVWKG1ham9yLCBtaW5vcik7CisJCQlhZGRfbmV3X2RldmljZShuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSwgcmRldik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3JfbXNnX2FuZF9kaWUoIlVuc3VwcG9ydGVkIGZpbGUgdHlwZSIpOworCX0KKwlpZiAobmFtZSkgZnJlZShuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBwYXJzZV9kZXZpY2VfdGFibGUoRklMRSAqIGZpbGUpCit7CisJY2hhciAqbGluZTsKKwlzaXplX3QgbGVuZ3RoID0gMjU2OworCWludCBsZW4gPSAwOworCisJaWYoKGxpbmUgPSAoY2hhciAqKW1hbGxvYyhsZW5ndGgpKSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKwkvKiBMb29rcyBvayBzbyBmYXIuICBUaGUgZ2VuZXJhbCBwbGFuIG5vdyBpcyB0byByZWFkIGluIG9uZQorCSAqIGxpbmUgYXQgYSB0aW1lLCB0cmltIG9mZiBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLAorCSAqIGNoZWNrIGZvciBsZWFkaW5nIGNvbW1lbnQgZGVsaW1pdGVycyAoJyMnKSBvciBhIGJsYW5rIGxpbmUsCisJICogdGhlbiB0cnkgYW5kIHBhcnNlIHRoZSBsaW5lIGFzIGEgZGV2aWNlIHRhYmxlIGVudHJ5LiBJZiB3ZSBmYWlsCisJICogdG8gcGFyc2UgdGhpbmdzLCB0cnkgYW5kIGhlbHAgdGhlIHBvb3IgZm9vbCB0byBmaXggdGhlaXIKKwkgKiBkZXZpY2UgdGFibGUgd2l0aCBhIHVzZWZ1bCBlcnJvciBtc2cuLi4gKi8KKworCXdoaWxlICgobGVuID0gZ2V0bGluZSgmbGluZSwgJmxlbmd0aCwgZmlsZSkpICE9IC0xKSB7CisJCS8qIEZpcnN0IHRyaW0gb2ZmIGFueSB3aGl0ZXNwYWNlICovCisKKwkJLyogdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisJCXdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UobGluZVtsZW4gLSAxXSkpCisJCQlsaW5lWy0tbGVuXSA9ICdcMCc7CisKKwkJLyogdHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwkJbWVtbW92ZShsaW5lLCAmbGluZVtzdHJzcG4obGluZSwgIiBcblxyXHRcdiIpXSwgbGVuICsgMSk7CisKKwkJLyogSWYgdGhpcyBpcyBOT1QgYSBjb21tZW50IG9yIGFuIGVtcHR5IGxpbmUsIHRyeSB0byBpbnRlcnByZXQgaXQgKi8KKwkJaWYgKCpsaW5lICE9ICcjJyAmJiAqbGluZSAhPSAnXDAnKSBpbnRlcnByZXRfdGFibGVfZW50cnkobGluZSk7CisJfQorCisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGV2dGFibGUoRklMRSAqIGRldnRhYmxlKQoreworCXN0cnVjdCBzdGF0IHNiOworCisJaWYgKGxzdGF0KHJvb3RkaXIsICZzYikpIHsKKwkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIHJvb3RkaXIpOworCX0KKwlpZiAoY2hkaXIocm9vdGRpcikpCisJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCByb290ZGlyKTsKKworCWlmIChkZXZ0YWJsZSkKKwkJcGFyc2VfZGV2aWNlX3RhYmxlKGRldnRhYmxlKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCXsicm9vdCIsIDEsIE5VTEwsICdyJ30sCisJeyJoZWxwIiwgMCwgTlVMTCwgJ2gnfSwKKwl7InRyYWNlIiwgMCwgTlVMTCwgJ3QnfSwKKwl7InZlcnNpb24iLCAwLCBOVUxMLCAndid9LAorCXsiZGV2dGFibGUiLCAxLCBOVUxMLCAnRCd9LAorCXtOVUxMLCAwLCBOVUxMLCAwfQorfTsKKworc3RhdGljIGNoYXIgKmhlbHB0ZXh0ID0KKwkiVXNhZ2U6IG1ha2VkZXZzIFtPUFRJT05TXVxuIgorCSJCdWlsZCBlbnRyaWVzIGJhc2VkIHVwb24gZGV2aWNlX3RhYmxlLnR4dFxuXG4iCisJIk9wdGlvbnM6XG4iCisJIiAgLXIsIC1kLCAtLXJvb3Q9RElSICAgICBCdWlsZCBmaWxlc3lzdGVtIGZyb20gZGlyZWN0b3J5IERJUiAoZGVmYXVsdDogY3dkKVxuIgorCSIgIC1ELCAtLWRldnRhYmxlPUZJTEUgICAgVXNlIHRoZSBuYW1lZCBGSUxFIGFzIGEgZGV2aWNlIHRhYmxlIGZpbGVcbiIKKwkiICAtaCwgLS1oZWxwICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIHRleHRcbiIKKwkiICAtdCwgLS10cmFjZSAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKwkiICAtdiwgLS12ZXJzaW9uICAgICAgICAgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvblxuXG4iOworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgYywgb3B0OworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwljaGFyIHBhc3N3ZF9wYXRoW1BBVEhfTUFYXTsKKwljaGFyIGdyb3VwX3BhdGhbUEFUSF9NQVhdOworCUZJTEUgKnBhc3N3ZF9maWxlID0gTlVMTDsKKwlGSUxFICpncm91cF9maWxlID0gTlVMTDsKKwlGSUxFICpkZXZ0YWJsZSA9IE5VTEw7CisJRElSICpkaXIgPSBOVUxMOworCisJdW1hc2sgKDApOworCisJaWYgKGFyZ2M9PTEpIHsKKwkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJEOmQ6cjpodHYiLAorCQkJbG9uZ19vcHRpb25zLCAmYykpID49IDApIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnRCc6CisJCQlkZXZ0YWJsZSA9IHhmb3BlbihvcHRhcmcsICJyIik7CisJCQlpZiAoZnN0YXQoZmlsZW5vKGRldnRhYmxlKSwgJnN0YXRidWYpIDwgMCkKKwkJCQlwZXJyb3JfbXNnX2FuZF9kaWUob3B0YXJnKTsKKwkJCWlmIChzdGF0YnVmLnN0X3NpemUgPCAxMCkKKwkJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IG5vdCBhIHByb3BlciBkZXZpY2UgdGFibGUgZmlsZSIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQlwcmludGYoaGVscHRleHQpOworCQkJZXhpdCgwKTsKKwkJY2FzZSAncic6CisJCWNhc2UgJ2QnOgkJCQkvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG1rZnMuamZmcywgZ2VuZXh0MmZzLCBldGMuLi4gKi8KKwkJCWlmIChyb290ZGlyICE9IGRlZmF1bHRfcm9vdGRpcikgeworCQkJCWVycm9yX21zZ19hbmRfZGllKCJyb290IGRpcmVjdG9yeSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiKTsKKwkJCX0KKwkJCWlmICgoZGlyID0gb3BlbmRpcihvcHRhcmcpKSA9PSBOVUxMKSB7CisJCQkJcGVycm9yX21zZ19hbmRfZGllKG9wdGFyZyk7CisJCQl9IGVsc2UgeworCQkJCWNsb3NlZGlyKGRpcik7CisJCQl9CisJCQkvKiBJZiAiLyIgaXMgc3BlY2lmaWVkLCB1c2UgIiIgYmVjYXVzZSByb290ZGlyIGlzIGFsd2F5cyBwcmVwZW5kZWQgdG8gYQorCQkJICogc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggIi8iICovCisJCQlpZiAoMCA9PSBzdHJjbXAob3B0YXJnLCAiLyIpKQorCQkJCXJvb3RkaXIgPSB4c3RyZHVwKCIiKTsKKwkJCWVsc2UKKwkJCQlyb290ZGlyID0geHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSAndCc6CisJCQl0cmFjZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlICd2JzoKKwkJCXByaW50ZigiJXM6ICVzXG4iLCBhcHBfbmFtZSwgVkVSU0lPTik7CisJCQlleGl0KDApOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoYXJndltvcHRpbmRdICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvLyBHZXQgbmFtZS1pZCBtYXBwaW5nCisJc3ByaW50ZihwYXNzd2RfcGF0aCwgIiVzL2V0Yy9wYXNzd2QiLCByb290ZGlyKTsKKwlzcHJpbnRmKGdyb3VwX3BhdGgsICIlcy9ldGMvZ3JvdXAiLCByb290ZGlyKTsKKwlpZiAoKHBhc3N3ZF9maWxlID0gZm9wZW4ocGFzc3dkX3BhdGgsICJyIikpICE9IE5VTEwpIHsKKwkJZ2V0X2xpc3RfZnJvbV9maWxlKHBhc3N3ZF9maWxlLCAmdXNyX2xpc3QpOworCQlmY2xvc2UocGFzc3dkX2ZpbGUpOworCX0KKwlpZiAoKGdyb3VwX2ZpbGUgPSBmb3Blbihncm91cF9wYXRoLCAiciIpKSAhPSBOVUxMKSB7CisJCWdldF9saXN0X2Zyb21fZmlsZShncm91cF9maWxlLCAmZ3JwX2xpc3QpOworCQlmY2xvc2UoZ3JvdXBfZmlsZSk7CisJfQorCisJLy8gUGFyc2UgZGV2dGFibGUKKwlpZihkZXZ0YWJsZSkgeworCQlwYXJzZV9kZXZ0YWJsZShkZXZ0YWJsZSk7CisJCWZjbG9zZShkZXZ0YWJsZSk7CisJfQorCisJLy8gRnJlZSBsaXN0CisJZnJlZV9saXN0KHVzcl9saXN0KTsKKwlmcmVlX2xpc3QoZ3JwX2xpc3QpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNTg3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2c18xLjAuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlRvb2wgZm9yIGNyZWF0aW5nIGRldmljZSBub2RlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKK1NFQ1RJT04gPSAiYmFzZSIKK1NSQ19VUkkgPSAiZmlsZTovL21ha2VkZXZzLmMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9IgorCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke2RhdGFkaXJ9IgorCitkb19jb21waWxlKCkgeworCSR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IC1vICR7U30vbWFrZWRldnMgJHtTfS9tYWtlZGV2cy5jCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbWFrZWRldnMgJHtEfSR7YmFzZV9zYmluZGlyfS9tYWtlZGV2cworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0ICR7RH0ke2RhdGFkaXJ9LworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MjcwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDcxIEBACittYWtlIHRoZSB0b29sIHRvIGJlIGNyb3NzIGNvbXBpbGFibGUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtlbGZJbWFnZS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCTIwMTItMDctMTQgMTQ6MTA6NDcuODAwOTE2MDgzIC0wNzAwCitAQCAtNzAsNiArNzAsOSBAQAorIAkJQUNfTVNHX0VSUk9SKFtjYyBub3QgZm91bmRdKQorIAlmaQorIAlldmFsICIke3dpdGhfZGVmYXVsdH1fQ0M9JyRDQyciCisrCWlmIHRlc3QgIngkSE9TVF9DQyIgPSAneCc7IHRoZW4KKysJCUFDX0NIRUNLX1BST0coW0hPU1RfQ0NdLCBbJENDXSwgWyRDQ10sIFtnY2NdLCBbJFBBVEhdKQorKwlmaQorIAlBQ19QUk9HX0NQUAorIAlpZiB0ZXN0ICIkQ1BQIiA9IG5vOyB0aGVuCisgCQlBQ19NU0dfRVJST1IoW2NwcCBub3QgZm91bmRdKQorQEAgLTE3Miw3ICsxNzUsNiBAQAorIAorIGRubCAtLS1PdXRwdXQgdmFyaWFibGVzLi4uCisgCistSE9TVF9DQz0kQ0MKKyBIT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTIC1PMiAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSIKKyAKKyBkbmwgVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZXNlIGFwcHJvcHJpYXRlbHkgZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYworSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaTM4Ni9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCw3ICs0LDcgQEAKKyAKKyAkKExJMzg2X09CSikvbWtlbGYtbGludXgtaTM4Ni5vOiAkKExJMzg2X0RJUikvbWtlbGYtbGludXgtaTM4Ni5jICQoTEkzODZfRElSKS9jb252ZXJ0LmJpbi5jICQoTEkzODZfREVQKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisgCisgCisgaWZkZWYgSTM4Nl9DQworSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaWE2NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCw3ICs0LDcgQEAKKyAKKyAkKExJQTY0X09CSikvbWtlbGYtbGludXgtaWE2NC5vOiAkKExJQTY0X0RJUikvbWtlbGYtbGludXgtaWE2NC5jICQoTElBNjRfRElSKS9jb252ZXJ0LmJpbi5jICQoTElBNjRfREVQKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisgCisgaWZkZWYgSUE2NF9DQworIAorSW5kZXg6IG1rZWxmSW1hZ2UvbWFpbi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9tYWluL01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9tYWluL01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCwxMSArNCwxMSBAQAorIAorICQoT0JKRElSKS9zYmluL21rZWxmSW1hZ2U6ICQoTUtFTEZfT0JKUykgJChERVBTKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpICQoTUtFTEZfT0JKUykgLW8gJEAgJChMSUJTKQorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAkKE1LRUxGX09CSlMpIC1vICRAICQoTElCUykKKyAKKyAkKE9CSkRJUikvbWFpbi9ta2VsZkltYWdlLm86IG1haW4vbWtlbGZJbWFnZS5jIGluY2x1ZGUvbWtlbGZJbWFnZS5oICQoREVQUykKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorIAorICQoT0JKRElSKS9tYW4vbWFuOC9ta2VsZkltYWdlLjg6IG1haW4vbWtlbGZJbWFnZS5tYW4KKyAJJChNS0RJUikgLXAgJChARCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTZhNjVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0xldCBtYWtlZmlsZSBmaW5kIGxpYnogYW5kIHpsaWIuaCBieSBDRkxBR1MgYW5kIExERkxBR1MuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBkMWFjYzM2Li42Zjg2NWIwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02Miw3ICs2Miw3IEBAIEFDX0NIRUNLX1BST0coW1JQTV0sICAgcnBtLCAgIHJwbSwgICBbXSwgWyRQQVRIXSkKKyBBQ19DSEVDS19QUk9HKFtTRURdLCAgIHNlZCwgICBzZWQsICAgW10sIFskUEFUSF0pCisgQUNfQ0hFQ0tfUFJPRyhbRklORF0sICBmaW5kLCAgZmluZCwgIFtdLCBbJFBBVEhdKQorIAorLUFDX0NIRUNLX0hFQURFUih6bGliLmgsIEFDX0NIRUNLX0xJQih6LCBpbmZsYXRlSW5pdF8sIFtBQ19ERUZJTkUoSEFWRV9aTElCX0gsIDEpIExJQlM9IiRMSUJTIC1seiJdKSkKKytBQ19DSEVDS19IRUFERVIoemxpYi5oLCBBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUluaXRfLCBbQUNfREVGSU5FKEhBVkVfWkxJQl9ILCAxKSBMSUJTPSIkTElCUyAkTERGTEFHUyAtbHoiXSkpCisgCisgZG5sIEZpbmQgdGhlIGRlZmF1bHQgcHJvZ3JhbXMKKyBpZiB0ZXN0ICJ3aXRoX2RlZmF1bHQiICE9IG5vIDsgdGhlbgorQEAgLTE3NSw3ICsxNzUsNyBAQCBmaQorIAorIGRubCAtLS1PdXRwdXQgdmFyaWFibGVzLi4uCisgCistSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykiCisrSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykgJENGTEFHUyIKKyAKKyBkbmwgVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZXNlIGFwcHJvcHJpYXRlbHkgZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYworIEkzODZfQ0ZMQUdTPSIkSTM4Nl9DRkxBR1MgLU9zIC1mZnJlZXN0YW5kaW5nIC1XYWxsIC1XIC1Xbm8tZm9ybWF0IFwkKEkzODZfQ1BQRkxBR1MpIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDViOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIGNyZWF0aW5nIEVMRiBib290IGltYWdlcyBmb3IgRUxGLWJhc2VkIExpbnV4IGtlcm5lbCBpbWFnZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNvcmVib290Lm9yZy9Na2VsZmltYWdlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYTViZWQyZjYwZDM1NzYxOGNhMTYxYWQ1MzlmN2MwYSIKKworU1JDUkVWID0gIjY4NmE0OGEzMzliMzIwMDE4NGMyN2U3Zjk4ZDRjMDMxODBiMmJlNmMiCitQViA9ICI0LjArZ2l0JHtTUkNQVn0iCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJta2VsZmltYWdlIGhhcyBiZWVuIHJlbW92ZWQgaW4gY29yZWJvb3QgNC4xIHJlbGVhc2U6IFwKK2h0dHA6Ly9yZXZpZXcuY29yZWJvb3Qub3JnL2dpdHdlYj9wPWNvcmVib290LmdpdDthPWNvbW1pdDtoPTM0ZmM0YWI4MGI1MDc3MzllMjU4MGQ0OTBkZmY2N2ZjZmRkZTExZWEiCisKKworREVQRU5EUyArPSAiemxpYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9yZXZpZXcuY29yZWJvb3Qub3JnL3AvY29yZWJvb3Q7cHJvdG9jb2w9aHR0cCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9zcy1jb21waWxlLnBhdGNoICAgXAorICAgICAgICAgICBmaWxlOi8vZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaCAgIFwKKyAgICAgICAgICAiCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQvdXRpbC9ta2VsZkltYWdlIgorCitDRkxBR1MgKz0gIi1mbm8tc3RhY2stcHJvdGVjdG9yIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIkhPU1RfQ0M9JyR7QlVJTERfQ0N9JyIKK0VYVFJBX09FTUFLRSArPSAiSE9TVF9DUFBGTEFHUz0nJHtCVUlMRF9DUFBGTEFHU30nIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm1kaXIgJHtEfSR7ZGF0YWRpcn0vbWtlbGZJbWFnZS9lbGYzMi1pMzg2CisJcm1kaXIgJHtEfSR7ZGF0YWRpcn0vbWtlbGZJbWFnZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYWNfaW5pdF9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmFmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0dldCB0aGUgdmVyc2lvbiBvZiBta2xpYnMgYnkgc2ltcGxlciBtZWFucy4gVGhlIE1LTElCU19WRVJTSU9OIHN0cmluZyBpbiB0aGUgCitjb25maWd1cmUuYWMgZmlsZSBpcyByZXBsYWNlZCB3aXRoIHJlYWwgdmVyc2lvbiBzdHJpbmcgYnkgdGhlIAorZG9fY29uZmlndXJlX3ByZXBlbmQoKSBmdW5jdGlvbiBmcm9tIHRoZSByZWNpcGUgLmJiIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTEvMDEvMjQKKworSW5kZXg6IG1rbGlicy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2xpYnMub3JpZy9jb25maWd1cmUuYWMJMjAxMC0wMi0yMSAxNzozNDo1Ni4wMDAwMDAwMDAgLTA4MDAKKysrKyBta2xpYnMvY29uZmlndXJlLmFjCTIwMTEtMDEtMjQgMTg6NTI6MTkuOTQzMjQyMDc5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy1BQ19JTklUKFtta2xpYnNdLG00X2VzeXNjbWQoZHBrZy1wYXJzZWNoYW5nZWxvZyB8IHBlcmwgLW5lICdwcmludCAkMSBpZiBtL15WZXJzaW9uOiAoLiopJC87JykpCisrQUNfSU5JVChbbWtsaWJzXSwgTUtMSUJTX1ZFUlNJT04pCisgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBuby1kZWZpbmVdKQorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2F2b2lkLWZhaWx1cmUtb24tc3ltYm9sLXByb3ZpZGVkLWJ5LWFwcGxpY2F0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZkNjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmMTcyMTAxMTMwNjA0ZTRhOWVmYTU3NDZmNGQ4ZDMwZGU5OWEwZmRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxNyBBcHIgMjAxNSAxNDo0ODoyMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBhdm9pZCBmYWlsdXJlIG9uIHN5bWJvbCBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVW5kZWZpbmVkIHN5bWJvbHMgaW4gYSBsaWJyYXJ5IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24KK3RoYXQgbGlua3MgdG8gdGhlIGxpYnJhcnksIHN1Y2ggYXMgYGxvZ3NpbmsnIGluIGxpYm11bHRpcGF0aC5zby4wLgorVGhpcyBmaXggY2hlY2tzIHRoZSB0eXBlIG9mIG9iamVjdCBpbiB3aGljaCB0aGUgc3ltYm9sIGlzIG5lZWRlZAorYW5kIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHN5bWJvbCBpbiBhcHBsaWNhdGlvbiwgd2hlbiBhIHN5bWJvbAorY2Fubm90IGJlIHByb3ZpZGVkIGJ5IGxpYnJhcmllcy4gSXQgcHJldmVudHMgZmFsc2UgYWxhcm0gb24gYWJzZW5jZQorb2Ygc3ltYm9scy4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL21rbGlicyB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMgYi9zcmMvbWtsaWJzCitpbmRleCBjNTYxNGVhLi5iMGQ5MDM0IDEwMDc1NQorLS0tIGEvc3JjL21rbGlicworKysrIGIvc3JjL21rbGlicworQEAgLTEzMyw5ICsxMzMsOSBAQCBjbGFzcyBTeW1ib2wob2JqZWN0KToKKyAgICAgICAgIHJldHVybiAnQCcuam9pbihyZXQpCisgCisgY2xhc3MgVW5kZWZpbmVkU3ltYm9sKFN5bWJvbCk6CistICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5KToKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnksIG9iamVjdCk6CisgICAgICAgICBzdXBlcihVbmRlZmluZWRTeW1ib2wsIHNlbGYpLl9faW5pdF9fKG5hbWUsIHZlcnNpb24sIGxpYnJhcnkpCistICAgICAgICBzZWxmLndlYWssIHNlbGYubGlicmFyeSA9IHdlYWssIGxpYnJhcnkKKysgICAgICAgIHNlbGYud2Vhaywgc2VsZi5saWJyYXJ5LCBzZWxmLm9iamVjdCA9IHdlYWssIGxpYnJhcnksIG9iamVjdAorIAorICMgUmV0dXJuIHVuZGVmaW5lZCBzeW1ib2xzIGluIGFuIG9iamVjdCBhcyBhIHNldCBvZiB0dXBsZXMgKG5hbWUsIHdlYWtuZXNzKQorIGRlZiB1bmRlZmluZWRfc3ltYm9scyhvYmopOgorQEAgLTE0NCw2ICsxNDQsMTEgQEAgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKG9iaik6CisgCisgICAgIG91dHB1dCA9IGNvbW1hbmQoIm1rbGlicy1yZWFkZWxmIiwgIi0tcHJpbnQtc3ltYm9scy11bmRlZmluZWQiLCBvYmopCisgCisrICAgIGlmIGxlbihvYmopID4gbGVuKGRlc3RfcGF0aCkgYW5kIG9ials6bGVuKGRlc3RfcGF0aCldID09IGRlc3RfcGF0aDoKKysgICAgICAgIG9iamVjdCA9IG9ialtsZW4oZGVzdF9wYXRoKSArIDE6LWxlbignLXNvLXN0cmlwcGVkJyldCisrICAgIGVsc2U6CisrICAgICAgICBvYmplY3QgPSBvYmoKKysKKyAgICAgcmVzdWx0ID0gW10KKyAgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgorICAgICAgICAgbmFtZSwgd2Vha19zdHJpbmcsIHZlcnNpb25fc3RyaW5nLCBsaWJyYXJ5X3N0cmluZyA9IGxpbmUuc3BsaXQoKVs6NF0KK0BAIC0xNjAsNyArMTY1LDcgQEAgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKG9iaik6CisgICAgICAgICBpZiBsaWJyYXJ5X3N0cmluZy5sb3dlcigpICE9ICdub25lJzoKKyAgICAgICAgICAgICBsaWJyYXJ5ID0gbGlicmFyeV9zdHJpbmcKKyAKKy0gICAgICAgIHJlc3VsdC5hcHBlbmQoVW5kZWZpbmVkU3ltYm9sKG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnkpKQorKyAgICAgICAgcmVzdWx0LmFwcGVuZChVbmRlZmluZWRTeW1ib2wobmFtZSwgd2VhaywgdmVyc2lvbiwgbGlicmFyeSwgb2JqZWN0KSkKKyAKKyAgICAgcmV0dXJuIHJlc3VsdAorIAorQEAgLTQ5NSwxMiArNTAwLDEzIEBAIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlLnNlYXJjaCgiXnBzXyIsIHN0cihzeW1ib2wpKSkKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCAocmUuc2VhcmNoKCJsZC1saW51eC5zby4zJCIsIHN0cihzeW1ib2wpKSkKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCAocmUuc2VhcmNoKCJeX19nbnVfbG9jYWxfZ3AiLCBzdHIoc3ltYm9sKSkpKToKKy0gICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgIm5lZWRlZF9zeW1ib2xzIGFkZGluZyAlcywgd2VhazogJXMiICUgKHN5bWJvbCwgc3ltYm9sLndlYWspKQorKyAgICAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAibmVlZGVkX3N5bWJvbHMgYWRkaW5nICVzLCB3ZWFrOiAlcywgZm9yICVzIiAlIChzeW1ib2wsIHN5bWJvbC53ZWFrLCBvYmopKQorICAgICAgICAgICAgICAgICBuZWVkZWRfc3ltYm9sc1tzdHIoc3ltYm9sKV0gPSBzeW1ib2wKKyAgICAgICAgIGxpYnJhcmllcy51cGRhdGUobGlicmFyeV9kZXBlbmRzKG9iaikpCisgCisgICAgICMgY2FsY3VsYXRlIHdoYXQgc3ltYm9scyBhcmUgcHJlc2VudCBpbiBzbWFsbF9saWJzIGFuZCBhdmFpbGFibGVfbGlicworICAgICBwcmVzZW50X3N5bWJvbHMgPSB7fQorKyAgICBwcmVzZW50X3N5bWJvbF9wcm9ncyA9IHt9CisgICAgIGNoZWNrZWRfbGlicyA9IHNtYWxsX2xpYnMKKyAgICAgY2hlY2tlZF9saWJzLmV4dGVuZChhdmFpbGFibGVfbGlicykKKyAgICAgY2hlY2tlZF9saWJzLmFwcGVuZChsZGxpYikKK0BAIC01MTAsNiArNTE2LDEyIEBAIHdoaWxlIDE6CisgICAgICAgICAgICAgbmFtZXMgPSBzeW1ib2wuYmFzZV9uYW1lcygpCisgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgIHByZXNlbnRfc3ltYm9sc1tuYW1lXSA9IHN5bWJvbAorKyAgICAgICAgICAgIGlmIG5vdCBzb19wYXR0ZXJuLm1hdGNoKGxpYik6CisrICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJwcmVzZW50X3N5bWJvbF9wcm9ncyBhZGRpbmcgJXMsIGZyb20gZXhlY3V0YWJsZSAlcyIgJSAoJyAnLmpvaW4obmFtZXMpLCBsaWIpKQorKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKysgICAgICAgICAgICAgICAgICAgIHByb2dzID0gcHJlc2VudF9zeW1ib2xfcHJvZ3MuZ2V0KG5hbWUsIHNldCgpKQorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3MuYWRkKGxpYikKKysgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfc3ltYm9sX3Byb2dzW25hbWVdID0gcHJvZ3MKKyAKKyAgICAgIyBhcmUgd2UgZmluaXNoZWQ/CisgICAgIG51bV91bnJlc29sdmVkID0gMAorQEAgLTU2NSw2ICs1NzcsMTQgQEAgd2hpbGUgMToKKyAgICAgZm9yIG5hbWUgaW4gbmVlZGVkX3N5bWJvbHM6CisgICAgICAgICBpZiBub3QgbmFtZSBpbiBzeW1ib2xfcHJvdmlkZXI6CisgICAgICAgICAgICAgaWYgbm90IG5lZWRlZF9zeW1ib2xzW25hbWVdLndlYWs6CisrICAgICAgICAgICAgICAgICMgV09SS0FST1VORDogVW5kZWZpbmVkIHN5bWJvbHMgaW4gYSBsaWJyYXJ5IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24KKysgICAgICAgICAgICAgICAgIyB0aGF0IGxpbmtzIHRvIHRoZSBsaWJyYXJ5LiBTbyBpZiB0aGUgb2JqZWN0IHdoaWNoIHJlcXVpcmVzIHRoZSBzeW1ib2wgaXMgYSBsaWJyYXJ5CisrICAgICAgICAgICAgICAgICMgYW5kIHNvbWUgYXBwbGljYXRpb24gY2FuIHByb3ZpZGUgdGhlIHN5bWJvbCwgdGhlIHVuZGVmaW5lZCBzeW1ib2wgaXMgc2tpcHBlZC4KKysgICAgICAgICAgICAgICAgc3ltYm9sID0gbmVlZGVkX3N5bWJvbHNbbmFtZV0KKysgICAgICAgICAgICAgICAgaWYgc29fcGF0dGVybi5tYXRjaChzeW1ib2wub2JqZWN0KSBhbmQgcHJlc2VudF9zeW1ib2xfcHJvZ3MuZ2V0KG5hbWUsIE5vbmUpOgorKyAgICAgICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgInN5bWJvbCAlcyBpbiBsaWJyYXJ5ICVzIGlzIHByb3ZpZGVkIGJ5IGV4ZWN1dGFibGUgJXMiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIHN5bWJvbC5vYmplY3QsICcgJy5qb2luKHByZXNlbnRfc3ltYm9sX3Byb2dzW25hbWVdKSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGxpYnJhcnkgcHJvdmlkZXMgbm9uLXdlYWsgJXMiICUgbmFtZSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbGliID0gc3ltYm9sX3Byb3ZpZGVyW25hbWVdCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X1NUVF9HTlVfSUZVTkMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyN2E0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1RoZSBsaWJjNi1kZXYgaW4gVWJ1bnR1IDkuMDQgaXMgc28gb2xkIHRoYXQgdGhlIGVsZi5oIGRvZXNuJ3QKK2RlZmluZSBTVFRfR05VX0lGVU5DLCBzbyB3ZSBoYXZlIHRvIGRlZmluZSBpdCBvdXJzZWx2ZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdIC0gb2xkIHJlbGVhc2Ugc3BlY2lmaWMsIG1heWJlIHJlbW92YWJsZQorCistLSBEZXh1YW4gQ3VpIChkZXh1YW4uY3VpQGludGVsLmNvbSkgRmViIDE2LCAyMDExLgorCitkaWZmIC0tZ2l0IGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitpbmRleCAyNDQ0YzM5Li41NmQ5M2Y4IDEwMDY0NAorLS0tIGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCisrKysgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK0BAIC02LDYgKzYsMTQgQEAKKyAjaW5jbHVkZSA8dmVjdG9yPgorIAorICNpbmNsdWRlIDxlbGYuaD4KKysvKgorKyAqIFRoZSAvdXNyL2luY2x1ZGUvZWxmLmggaW4gc29tZSBkaXN0cmlidXRpb25zKGxpa2UgVWJ1bnR1IDkuMDQpIGRvZXNuJ3QKKysgKiBkZWZpbmUgdGhlIG1hY3JvLiBXZSBuZWVkIHRvIGRlZmluZSBpdCBoZXJlLgorKyAqLworKyNpZm5kZWYgU1RUX0dOVV9JRlVOQworKyNkZWZpbmUgU1RUX0dOVV9JRlVOQyAgIDEwICAgICAgICAgICAgICAvKiBTeW1ib2wgaXMgaW5kaXJlY3QgY29kZSBvYmplY3QgKi8KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgCisgI2luY2x1ZGUgImVsZi5ocHAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9jcm9zc19jb21waWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDgxIEBACitSZW1vdmUgZGVwZW5kZW5jeSBvbiBkcGtnCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0Fza2luZyB0aGUgaG9zdCBPUyB3aGV0aGVyIGl0IHN1cHBvcnRzIG11bHRpYXJjaCBpcyBub3QgdXNlZnVsCitpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBvciBpZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkCithIGxpYmRpciBleHBsaWNpdGx5LiBTbyB0aGlzIHBhdGNoLCBiYXNlZCBvbiB0aGUgd29yayBvZiBNZW50b3IKK0dyYXBoaWNzLCByZW1vdmVzIG1rbGlicydzIGRlcGVuZGVuY3kgb24gZHBrZyBwYWNrYWdlLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDxZdWFuamllLkh1YW5nQHdpbmRyaXZlci5jb20+Cisgc3JjL21rbGlicyB8IDMwICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMgYi9zcmMvbWtsaWJzCitpbmRleCBkOWI3ODRiLi5jNTYxNGVhIDEwMDc1NQorLS0tIGEvc3JjL21rbGlicworKysrIGIvc3JjL21rbGlicworQEAgLTI2MSw2ICsyNjEsMTEgQEAgZGVmIGV4dHJhY3Rfc29uYW1lKHNvX2ZpbGUpOgorICAgICByZXR1cm4gIiIKKyAKKyBkZWYgbXVsdGlhcmNoKHBhdGhzKToKKysgICAgIyBBc2tpbmcgdGhlIGhvc3QgT1Mgd2hldGhlciBpdCBzdXBwb3J0cyBtdWx0aWFyY2ggaXMgbm90IHVzZWZ1bAorKyAgICAjIGluIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIG9yIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQKKysgICAgIyBhIGxpYmRpciBleHBsaWNpdGx5LgorKyAgICBpZiBzeXNyb290ICE9ICIiIG9yIGxpYmRpciAhPSAiIjoKKysgICAgICAgIHJldHVybiBwYXRocworICAgICBkZXZudWxsID0gb3BlbignL2Rldi9udWxsJywgJ3cnKQorICAgICBkcGtnX2FyY2hpdGVjdHVyZSA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICBbJ2Rwa2ctYXJjaGl0ZWN0dXJlJywgJy1xREVCX0hPU1RfTVVMVElBUkNIJ10sCitAQCAtMzQwLDcgKzM0NSw3IEBAIGxpYl9wYXRoID0gW10KKyBkZXN0X3BhdGggPSAiREVTVCIKKyBsZGxpYiA9ICJMRExJQiIKKyBpbmNsdWRlX2RlZmF1bHRfbGliX3BhdGggPSAieWVzIgorLWRlZmF1bHRfbGliX3BhdGggPSBtdWx0aWFyY2goWyIvbGliLyIsICIvdXNyL2xpYi8iLCAiL3Vzci9YMTFSNi9saWIvIl0pCisrZGVmYXVsdF9saWJfcGF0aCA9IFsiL2xpYi8iLCAiL3Vzci9saWIvIiwgIi91c3IvWDExUjYvbGliLyJdCisgbGliY19leHRyYXNfZGlyID0gIi91c3IvbGliL2xpYmNfcGljIgorIGxpYmNfZXh0cmFzX2Rpcl9kZWZhdWx0ID0gVHJ1ZQorIGxpYmRpciA9ICJsaWIiCitAQCAtMzg2LDcgKzM5MSw3IEBAIGZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgorICAgICBlbGlmIG9wdCA9PSAiLS1saWJkaXIiOgorICAgICAgICAgbGliZGlyID0gYXJnCisgICAgIGVsaWYgb3B0IGluICgiLS1oZWxwIiwgIi1oIik6CistCXVzYWdlKDApCisrICAgICAgICB1c2FnZSgwKQorICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgZWxpZiBvcHQgaW4gKCItLXZlcnNpb24iLCAiLVYiKToKKyAgICAgICAgIHZlcnNpb24odmVycykKK0BAIC0zOTUsNiArNDAwLDcgQEAgZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6CisgICAgICAgICBwcmludCAiV0FSTklORzogdW5rbm93biBvcHRpb246ICIgKyBvcHQgKyAiXHRhcmc6ICIgKyBhcmcKKyAKKyBpZiBpbmNsdWRlX2RlZmF1bHRfbGliX3BhdGggPT0gInllcyI6CisrICAgIGRlZmF1bHRfbGliX3BhdGggPSBtdWx0aWFyY2goZGVmYXVsdF9saWJfcGF0aCkKKyAgICAgbGliX3BhdGguZXh0ZW5kKFthLnJlcGxhY2UoIi9saWIvIiwgIi8iICsgbGliZGlyICsgIi8iKSBmb3IgYSBpbiBkZWZhdWx0X2xpYl9wYXRoXSkKKyAKKyBpZiBsaWJjX2V4dHJhc19kaXJfZGVmYXVsdDoKK0BAIC02NjEsMTYgKzY2OSwxNiBAQCBsZF9wYXRoX25hbWUgPSBvcy5wYXRoLmRpcm5hbWUobGRsaWIpCisgbGRfZnVsbF9wYXRoID0gIi4uLyIgKyBsZGxpYgorIGxkX2ZpbGUgPSBmaW5kX2xpYihsZF9maWxlX25hbWUpCisgCistaWYgbGRfcGF0aF9uYW1lICE9ICIvbGliIjoKKy0gICAgaWYgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CistICAgICAgICBvcy5yZW1vdmUoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lKQorKyNpZiBsZF9wYXRoX25hbWUgIT0gIi9saWIiOgorKyMgICAgaWYgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CisrIyAgICAgICAgb3MucmVtb3ZlKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKyAKKy1pZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKToKKy0gICAgb3MubWtkaXIoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKQorKyNpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKToKKysjICAgIG9zLm1rZGlyKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSkKKyAKKy1pZiBub3Qgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2Z1bGxfcGF0aCwgb3MuRl9PSyk6CistICAgIGRlYnVnKERFQlVHX05PUk1BTCwgIkk6IHN0cmlwcGluZyBhbmQgY29weWluZyBkeW5hbWljIGxpbmtlciB0byAiICsgbGRfZnVsbF9wYXRoKQorK2lmIG5vdCBvcy5hY2Nlc3MoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCBvcy5GX09LKToKKysgICAgZGVidWcoREVCVUdfTk9STUFMLCAiSTogc3RyaXBwaW5nIGFuZCBjb3B5aW5nIGR5bmFtaWMgbGlua2VyIHRvICIgKyBsZF9maWxlX25hbWUpCisgICAgIGNvbW1hbmQodGFyZ2V0ICsgIm9iamNvcHkiLCAiLS1zdHJpcC11bm5lZWRlZCAtUiAubm90ZSAtUiAuY29tbWVudCIsCistICAgICAgICAgICAgbGRfZmlsZSwgZGVzdF9wYXRoICsgIi8iICsgbGRfZnVsbF9wYXRoKQorKyAgICAgICAgICAgIGxkX2ZpbGUsIGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKyAKKy1vcy5jaG1vZChkZXN0X3BhdGggKyAiLyIgKyBsZF9mdWxsX3BhdGgsIDA3NTUpCisrb3MuY2htb2QoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCAwNzU1KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTY1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBlZGRmMDRjN2Y4MzEyZTljMjljZGIyNGU0MzFiN2U0ZmIyY2M3MGVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAxNDowMDowNiArMDgwMAorU3ViamVjdDogW1BBVENIXSBTaG93IEdOVSB1bmlxdWUgc3ltYm9scyBhcyBwcm92aWRlZCBzeW1ib2xzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0dOVSBVbmlxdWUgc3ltYm9sIGlzIGEgR05VIGV4dGVuc2lvbiBlbXBsb3llZCBieSBuZXcgdmVyc2lvbiBvZiBHQ0MKK2J5IGRlZmF1bHQuIEV2ZW4gU3RhbmRhcmQgQysrIGxpYnJhcnkgaW4gR0NDIDQuOSBwcm92aWRlcyBzb21lIHN5bWJvbHMsCitzdWNoIGFzIF9aTlNzNF9SZXAyMF9TX2VtcHR5X3JlcF9zdG9yYWdlRSBpbiB0aGlzIGJpbmRpbmcgdHlwZSBpbnN0ZWFkCitvZiBFTEYgc3RhbmRhcmQgd2VhayBiaW5kaW5nLgorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgb2YgdGhpcyBuZXcgYmluZGluZyB0eXBlIHRvIG1rbGlicy1yZWFkZWxmLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK2luZGV4IDU2ZDkzZjguLjAxMzQ1MzAgMTAwNjQ0CistLS0gYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKKysrKyBiL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAorQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zeW1ib2xzX3Byb3ZpZGVkIChjb25zdCBFbGY6OnNlY3Rpb25fdHlwZTxFbGY6OnNlY3Rpb25fdHlwZV8KKyAgICAgdWludDhfdCB0eXBlID0gc3ltYm9sLT5nZXRfdHlwZSAoKTsKKyAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldF9uYW1lX3N0cmluZyAoKTsKKyAKKy0gICAgaWYgKGJpbmQgIT0gU1RCX0dMT0JBTCAmJiBiaW5kICE9IFNUQl9XRUFLKQorKyAgICBpZiAoYmluZCAhPSBTVEJfR0xPQkFMICYmIGJpbmQgIT0gU1RCX1dFQUsgJiYgYmluZCAhPSBTVEJfR05VX1VOSVFVRSkKKyAgICAgICBjb250aW51ZTsKKyAgICAgaWYgKHNobmR4ID09IFNITl9VTkRFRiB8fCBzaG5keCA9PSBTSE5fQUJTKQorICAgICAgIGNvbnRpbnVlOworLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3N5c3Jvb3RlZC1sZHNvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTUwMGEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaApAQCAtMCwwICsxLDE4IEBACitJbiBjcm9zcyBidWlsZHMgd2Ugd2lsbCBoYXZlIHRvIHJlc3BlY3Qgc3lzcm9vdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBta2xpYnMtMC4xLjM5L3NyYy9ta2xpYnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2xpYnMtMC4xLjM5Lm9yaWcvc3JjL21rbGlicwkyMDE0LTAzLTAxIDE4OjI1OjM2LjAwMDAwMDAwMCArMDAwMAorKysrIG1rbGlicy0wLjEuMzkvc3JjL21rbGlicwkyMDE0LTEwLTE5IDAwOjUxOjQ2LjgxMzUzNDU5NiArMDAwMAorQEAgLTQ5NSw3ICs0OTUsNyBAQAorICAgICBwcmVzZW50X3N5bWJvbHMgPSB7fQorICAgICBjaGVja2VkX2xpYnMgPSBzbWFsbF9saWJzCisgICAgIGNoZWNrZWRfbGlicy5leHRlbmQoYXZhaWxhYmxlX2xpYnMpCistICAgIGNoZWNrZWRfbGlicy5hcHBlbmQobGRsaWIpCisrICAgIGNoZWNrZWRfbGlicy5hcHBlbmQoc3lzcm9vdCArIGxkbGliKQorICAgICBmb3IgbGliIGluIGNoZWNrZWRfbGliczoKKyAgICAgICAgIGZvciBzeW1ib2wgaW4gcHJvdmlkZWRfc3ltYm9scyhsaWIpOgorICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJwcmVzZW50X3N5bWJvbHMgYWRkaW5nICVzIiAlIHN5bWJvbCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmVjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIGxpYnJhcnkgb3B0aW1pc2F0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJta2xpYnMgcHJvZHVjZXMgY3V0LWRvd24gc2hhcmVkIGxpYnJhcmllcyB0aGF0IGNvbnRhaW4gb25seSB0aGUgcm91dGluZXMgcmVxdWlyZWQgYnkgYSBwYXJ0aWN1bGFyIHNldCBvZiBleGVjdXRhYmxlcy4iCitIT01FUEFHRSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvbWtsaWJzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9OThkMzEwMzdiMTNkODk2ZTMzODkwNzM4ZWYwMWFmNjQiCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vbS9ta2xpYnMvJHtCUE59XyR7UFZ9LnRhci54eiBcCisJZmlsZTovL2FjX2luaXRfZml4LnBhdGNoXAorCWZpbGU6Ly9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaFwKKwlmaWxlOi8vc3lzcm9vdGVkLWxkc28ucGF0Y2ggXAorCWZpbGU6Ly9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaCBcCisJZmlsZTovL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2ggXAorCWZpbGU6Ly9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMWRhZmU1Zjk2MmNhYTlkYzVmMjY1MWMwNzIzODEyYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZGIyNGFlNzc5ZDIxY2NmZWQ0OWYyMmU0OWEyYjdlZTQzZWMwZTkxOTdiYzIwNmQ4MWNkMDJmOTZlOTFlMTI1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IG5hdGl2ZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHMvMDAwMS1tbWMuaC1kb24tdC1pbmNsdWRlLWFzbS1nZW5lcmljLWludC1sbDY0LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyNGRlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittbWMuaDogZG9uJ3QgaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKworSW5jbHVkaW5nIHRoaXMgZmlsZSBjYXVzZXMgYSBjb21waWxlIGZhaWx1cmUgZm9yIHFlbXVtaXBzNjQuCitUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB0byBiZSBleHBsaWNpdGx5IGluY2x1ZGVkLCBiZWNhdXNlIGl0IHdpbGwgYmUKK2luY2x1ZGVkIGJ5IHRoZSA8bGludXgvbW1jL2lvY3RsLmg+IGZpbGUgaWYgX01JUFNfU1pMT05HIGlzIG5vdCA2NC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbW1jLmggfCAgICAxIC0KKyAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbW1jLmggYi9tbWMuaAoraW5kZXggOTg3MWQ2Mi4uM2RmMmNkZiAxMDA2NDQKKy0tLSBhL21tYy5oCisrKysgYi9tbWMuaAorQEAgLTE0LDcgKzE0LDYgQEAKKyAgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgICovCisgCistI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisgI2luY2x1ZGUgPGxpbnV4L21tYy9pb2N0bC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTUwMzYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK0RFU0NSSVBUSU9OID0gIlVzZXJzcGFjZSB0b29scyBmb3IgTU1DL1NEIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvY2dpdC9saW51eC9rZXJuZWwvZ2l0L2NqYi9tbWMtdXRpbHMuZ2l0LyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9tbWMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1kNzc0N2ZjODdmMWViMjJiOTQ2ZWY4MTk5Njk1MDNmMCIKKworQlJBTkNIID89ICJtYXN0ZXIiCitTUkNSRVYgPSAiZjRlYjI0MTUxOWY4ZDUwMGNlNjA2OGE3MGQyMzg5YmUzOWFjNTE4OSIKKworUFYgPSAiMC4xIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9jamIvbW1jLXV0aWxzLmdpdDticmFuY2g9JHtCUkFOQ0h9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgInM6LVdlcnJvcjo6ZyIgJHtTfS9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBtbWMgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzYxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy8wMDAxLWhhc2h0YWJsZS1SZW1vdmUtZHVwbGljYXRlLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS0ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBiODU2ZmYzNWMyMDEyNGNlYWU0MGJiYzRkMzI1ODRkZjQ3NjE4Yzk2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjUgRmViIDIwMTUgMDk6Mjg6MjYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gaGFzaHRhYmxlOiBSZW1vdmUgZHVwbGljYXRlIGhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS9oYXNodGFibGVfaXRlcmF0b3Jfa2V5CisKK2djYzUgaXMgZGVmYXVsdGluZyB0byBnbnUxMSBpbnN0ZWFkIG9mIGdudTg5IGxpa2UgcHJldmlvdXMgdmVyc2lvbnMKK2FzIGEgcmVzdWx0IHRoZSBzZW1hbnRpY3Mgb2YgJ2V4dGVybiBpbmxpbmUnIGNoYW5nZXMgd2hlcmUgaW4gZ251ODkgZm9yICdleHRlcm4gaW5saW5lJyBubyBleHRlcm5hbAordmlzaWJsZSBmdW5jdGlvbiBpcyBnZW5lcmF0ZWQsaW4gYzk5ICdleHRlcm5hbCBpbmxpbmUnIGdlbmVyYXRlcyBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24KK3RoZXJlIGlzIG5vIGVxdWl2YWxlbnQgaW4gYzk5KyBiZWNhdXNlIHJlZGVmaW5pdGlvbnMgYXJlbnQgYWxsb3dlZAorYnV0ICdzdGF0aWMgaW5saW5lJyByZW1haW5zIHNhbWUgZm9yIGZvciBjODkgYW5kIGM5OSssIHRoYXRzIHdoeSB3ZSBjaGFuZ2UgdGhlIHNlbWFudGljcworc28gd2UgbWFrZSB0aGUgZnVuY3Rpb25zIHN0YXRpYyBpbmxpbmUsIGFuZCBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKKy0tLQorIG1rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYyB8IDEyIC0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmgKKysrKyBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5oCitAQCAtMjgsNyArMjgsNyBAQCBoYXNodGFibGVfaXRlcmF0b3Ioc3RydWN0IGhhc2h0YWJsZSAqaCk7CisgLyogaGFzaHRhYmxlX2l0ZXJhdG9yX2tleQorICAqIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworIAorLWV4dGVybiBpbmxpbmUgdm9pZCAqCisrc3RhdGljIGlubGluZSB2b2lkICoKKyBoYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorIHsKKyAgICAgcmV0dXJuIGktPmUtPms7CitAQCAtMzcsNyArMzcsNyBAQCBoYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qIHZhbHVlIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworIAorLWV4dGVybiBpbmxpbmUgdm9pZCAqCisrc3RhdGljIGlubGluZSB2b2lkICoKKyBoYXNodGFibGVfaXRlcmF0b3JfdmFsdWUoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisgeworICAgICByZXR1cm4gaS0+ZS0+djsKK0luZGV4OiBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jCisrKysgZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYworQEAgLTM1LDE4ICszNSw2IEBAIGhhc2h0YWJsZV9pdGVyYXRvcihzdHJ1Y3QgaGFzaHRhYmxlICpoKQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistLyoga2V5ICAgICAgLSByZXR1cm4gdGhlIGtleSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworLS8qIHZhbHVlICAgIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworLQorLXZvaWQgKgorLWhhc2h0YWJsZV9pdGVyYXRvcl9rZXkoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisteyByZXR1cm4gaS0+ZS0+azsgfQorLQorLXZvaWQgKgorLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZShzdHJ1Y3QgaGFzaHRhYmxlX2l0ciAqaSkKKy17IHJldHVybiBpLT5lLT52OyB9CistCistLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qIGFkdmFuY2UgLSBhZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBlbGVtZW50CisgICogICAgICAgICAgIHJldHVybnMgemVybyBpZiBhZHZhbmNlZCB0byBlbmQgb2YgdGFibGUgKi8KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2Q2YTMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvYWRkLWV4Y2x1c2lvbi10by1ta2ZzLWpmZnMyLWdpdC0yLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIC90bXAvbWtmcy5qZmZzMi5jCTIwMDktMDEtMTEgMTU6Mjg6NDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2l0L21rZnMuamZmczIuYwkyMDA5LTAxLTExIDE1OjU5OjI5LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMCw2ICsxMDAsMTEgQEAKKyAJc3RydWN0IHJiX25vZGUgaGFyZGxpbmtfcmI7CisgfTsKKyAKKytzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSB7CisrCXN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBuZXh0OyAgLyogUG9pbnRzIHRvIHRoZSBuZXh0IGlnbm9yZXBhdGggZWxlbWVudCAqLworKwljaGFyIG5hbWVbUEFUSF9NQVhdOyAgICAgICAgLyogTmFtZSBvZiB0aGUgZW50cnkgKi8KKyt9OworK3N0YXRpYyBzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogaWdub3JlcGF0aCA9IDA7Cisgc3RydWN0IHJiX3Jvb3QgaGFyZGxpbmtzOworIHN0YXRpYyBpbnQgb3V0X2ZkID0gLTE7Cisgc3RhdGljIGludCBpbl9mZCA9IC0xOworQEAgLTQwOCw3ICs0MTMsNyBAQAorIAljaGFyICpocGF0aCwgKnRwYXRoOworIAlzdHJ1Y3QgZGlyZW50ICpkcCwgKipuYW1lbGlzdDsKKyAJc3RydWN0IGZpbGVzeXN0ZW1fZW50cnkgKmVudHJ5OworLQorKwlzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogZWxlbWVudCA9IGlnbm9yZXBhdGg7CisgCisgCWlmIChsc3RhdChob3N0cGF0aCwgJnNiKSkgeworIAkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIGhvc3RwYXRoKTsKK0BAIC00MTcsNiArNDIyLDE1IEBACisgCWVudHJ5ID0gYWRkX2hvc3RfZmlsZXN5c3RlbV9lbnRyeSh0YXJnZXRwYXRoLCBob3N0cGF0aCwKKyAJCQlzYi5zdF91aWQsIHNiLnN0X2dpZCwgc2Iuc3RfbW9kZSwgMCwgcGFyZW50KTsKKyAKKysJd2hpbGUgKCBlbGVtZW50ICkgeworKwkJaWYgKCBzdHJjbXAoIGVsZW1lbnQtPm5hbWUsIHRhcmdldHBhdGggKSA9PSAwICkgeworKwkJCXByaW50ZiggIk5vdGU6IGlnbm9yaW5nIGRpcmVjdG9yaWVzIGJlbG93ICclcydcbiIsIHRhcmdldHBhdGggKTsKKysJCQlyZXR1cm4gZW50cnk7CisrCQkJYnJlYWs7CisrCQl9CisrCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJfQorKworIAluID0gc2NhbmRpcihob3N0cGF0aCwgJm5hbWVsaXN0LCAwLCBhbHBoYXNvcnQpOworIAlpZiAobiA8IDApIHsKKyAJCXBlcnJvcl9tc2dfYW5kX2RpZSgib3BlbmluZyBkaXJlY3RvcnkgJXMiLCBob3N0cGF0aCk7CitAQCAtMTQ1Myw2ICsxNDY3LDcgQEAKKyAJeyJyb290IiwgMSwgTlVMTCwgJ3InfSwKKyAJeyJwYWdlc2l6ZSIsIDEsIE5VTEwsICdzJ30sCisgCXsiZXJhc2VibG9jayIsIDEsIE5VTEwsICdlJ30sCisrCXsiaWdub3JlIiwgMSwgTlVMTCwgJ0knfSwKKyAJeyJvdXRwdXQiLCAxLCBOVUxMLCAnbyd9LAorIAl7ImhlbHAiLCAwLCBOVUxMLCAnaCd9LAorIAl7InZlcmJvc2UiLCAwLCBOVUxMLCAndid9LAorQEAgLTE1MDAsNiArMTUxNSw3IEBACisgIiAgLUwsIC0tbGlzdC1jb21wcmVzc29ycyAgU2hvdyB0aGUgbGlzdCBvZiB0aGUgYXZhaWFibGUgY29tcHJlc3NvcnNcbiIKKyAiICAtdCwgLS10ZXN0LWNvbXByZXNzaW9uICBDYWxsIGRlY29tcHJlc3MgYW5kIGNvbXBhcmUgd2l0aCB0aGUgb3JpZ2luYWwgKGZvciB0ZXN0KVxuIgorICIgIC1uLCAtLW5vLWNsZWFubWFya2VycyAgIERvbid0IGFkZCBhIGNsZWFubWFya2VyIHRvIGV2ZXJ5IGVyYXNlYmxvY2tcbiIKKysiICAtSSwgLS1pZ25vcmU9UEFUSCAgICAgICBJZ25vcmUgc3ViIGRpcmVjdG9yeSBhbmQgZmlsZSB0cmVlIGJlbG93IFBBVEggd2hlbiByZWN1cnNpbmcgb3ZlciB0aGUgZmlsZSBzeXN0ZW1cbiIKKyAiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICBPdXRwdXQgdG8gRklMRSAoZGVmYXVsdDogc3Rkb3V0KVxuIgorICIgIC1sLCAtLWxpdHRsZS1lbmRpYW4gICAgIENyZWF0ZSBhIGxpdHRsZS1lbmRpYW4gZmlsZXN5c3RlbVxuIgorICIgIC1iLCAtLWJpZy1lbmRpYW4gICAgICAgIENyZWF0ZSBhIGJpZy1lbmRpYW4gZmlsZXN5c3RlbVxuIgorQEAgLTE2NjYsNiArMTY4Miw3IEBACisgCWNoYXIgKmNvbXByX25hbWUgPSBOVUxMOworIAlpbnQgY29tcHJfcHJpb3IgID0gLTE7CisgCWludCB3YXJuX3BhZ2Vfc2l6ZSA9IDA7CisrCXN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBlbGVtZW50ID0gaWdub3JlcGF0aDsKKyAKKyAJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworIAlpZiAocGFnZV9zaXplIDwgMCkgLyogU3lzdGVtIGRvZXNuJ3Qga25vdyBzbyAuLi4gKi8KK0BAIC0xNjc2LDcgKzE2OTMsNyBAQAorIAlqZmZzMl9jb21wcmVzc29yc19pbml0KCk7CisgCisgCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwKKy0JCQkJCSJEOmQ6cjpzOm86cVVQZmg/dlZlOmxicDo6bmM6bTp4Olg6THR5Omk6IiwgbG9uZ19vcHRpb25zLCAmYykpID49IDApCisrCQkJCQkiRDpkOnI6czpJOm86cVVQZmg/dlZlOmxicDo6bmM6bTp4Olg6THR5Omk6IiwgbG9uZ19vcHRpb25zLCAmYykpID49IDApCisgCXsKKyAJCXN3aXRjaCAob3B0KSB7CisgCQkJY2FzZSAnRCc6CitAQCAtMTcwMCw2ICsxNzE3LDI4IEBACisgCQkJCXdhcm5fcGFnZV9zaXplID0gMDsgLyogc2V0IGJ5IHVzZXIsIHNvIGRvbid0IG5lZWQgdG8gd2FybiAqLworIAkJCQlicmVhazsKKyAKKysJCQljYXNlICdJJzoKKysJCQkJcHJpbnRmKCAiTm90ZTogQWRkaW5nICclcycgdG8gaWdub3JlIFBhdGhcbiIsIG9wdGFyZyApOworKwkJCQllbGVtZW50ID0gaWdub3JlcGF0aDsKKysJCQkJaWYgKCAhaWdub3JlcGF0aCApIHsKKysJCQkJCWlnbm9yZXBhdGggPSB4bWFsbG9jKCBzaXplb2YoIHN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5ICkgKTsKKysJCQkJCWlnbm9yZXBhdGgtPm5leHQgPSAwOworKwkJCQkJc3RyY3B5KCAmaWdub3JlcGF0aC0+bmFtZVswXSwgb3B0YXJnICk7CisrCQkJCX0gZWxzZSB7CisrCQkJCQl3aGlsZSAoIGVsZW1lbnQtPm5leHQgKSBlbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJCQkJCWVsZW1lbnQtPm5leHQgPSB4bWFsbG9jKCBzaXplb2YoIHN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5ICkgKTsKKysgCQkJCQllbGVtZW50LT5uZXh0LT5uZXh0ID0gMDsKKysJCQkJCXN0cmNweSggJmVsZW1lbnQtPm5leHQtPm5hbWVbMF0sIG9wdGFyZyApOworKwkJCQl9CisrCQkJCXByaW50ZiggIi0tLS0tLS0tLSBEdW1waW5nIGlnbm9yZSBwYXRoIGxpc3QgLS0tLS0tLS0tLS0tLS0tLVxuIiApOworKwkJCQllbGVtZW50ID0gaWdub3JlcGF0aDsKKysJCQkJd2hpbGUgKCBlbGVtZW50ICkgeworKwkJCQkJcHJpbnRmKCAiICAqICclcydcbiIsICZlbGVtZW50LT5uYW1lWzBdICk7CisrCQkJCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJCQkJfQorKwkJCQlwcmludGYoICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKTsKKysJCQkJYnJlYWs7CisrCisgCQkJY2FzZSAnbyc6CisgCQkJCWlmIChvdXRfZmQgIT0gLTEpIHsKKyAJCQkJCWVycm9yX21zZ19hbmRfZGllKCJvdXRwdXQgZmlsZW5hbWUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMTYyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2ZpeC1hcm12Ny1uZW9uLWFsaWdubWVudC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworTkVPTiBpbnN0cnVjdGlvbiBWTEQxLjY0IHdhcyB1c2VkIHRvIGNvcHkgNjQgYml0cyBkYXRhIGFmdGVyIHR5cGUKK2Nhc3RpbmcsIGFuZCB0aGV5IHdpbGwgdHJpZ2dlciBhbGlnbm1lbnQgdHJhcC4KK1RoaXMgcGF0Y2ggdXNlcyBtZW1jcHkgdG8gYXZvaWQgYWxpZ25tZW50IHByb2JsZW0uCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPFl1YW5qaWUuSHVhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL21rZnMudWJpZnMva2V5LmggYi9ta2ZzLnViaWZzL2tleS5oCitpbmRleCBkM2EwMmQ0Li5lN2U5MjE4IDEwMDY0NAorLS0tIGEvbWtmcy51Ymlmcy9rZXkuaAorKysrIGIvbWtmcy51Ymlmcy9rZXkuaAorQEAgLTE0MSwxMCArMTQxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkYXRhX2tleV9pbml0KHVuaW9uIHViaWZzX2tleSAqa2V5LCBpbm9fdCBpbnVtLAorICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGUoY29uc3QgdW5pb24gdWJpZnNfa2V5ICpmcm9tLCB2b2lkICp0bykKKyB7CistCXVuaW9uIHViaWZzX2tleSAqdCA9IHRvOworKwlfX2xlMzIgeFsyXTsKKyAKKy0JdC0+ajMyWzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKy0JdC0+ajMyWzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysJeFswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CisrCXhbMV0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMV0pOworKworKwltZW1jcHkodG8sICZ4LCA4KTsKKyAJbWVtc2V0KHRvICsgOCwgMCwgVUJJRlNfTUFYX0tFWV9MRU4gLSA4KTsKKyB9CisgCitAQCAtMTU2LDEwICsxNTgsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGtleV93cml0ZShjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmZyb20sIHZvaWQgKnRvKQorICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGVfaWR4KGNvbnN0IHVuaW9uIHViaWZzX2tleSAqZnJvbSwgdm9pZCAqdG8pCisgeworLQl1bmlvbiB1Ymlmc19rZXkgKnQgPSB0bzsKKysJX19sZTMyIHhbMl07CisrCisrCXhbMF0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMF0pOworKwl4WzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKyAKKy0JdC0+ajMyWzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKy0JdC0+ajMyWzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysJbWVtY3B5KHRvLCAmeCwgOCk7CisgfQorIAorIC8qKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvbXRkLXV0aWxzLWZpeC1jb3JydXB0LWNsZWFubWFya2VyLXdpdGgtZmxhc2hfZXJhc2UtLWotY29tbWFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwN2NmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworRnJvbSBwYXRjaHdvcmsgTW9uIEF1ZyAgOCAwODoxNjo0MyAyMDExCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK1N1YmplY3Q6IG10ZC11dGlsczogZml4IGNvcnJ1cHQgY2xlYW5tYXJrZXIgd2l0aCBmbGFzaF9lcmFzZSAtaiBjb21tYW5kCitEYXRlOiBTdW4sIDA3IEF1ZyAyMDExIDIyOjE2OjQzIC0wMDAwCitGcm9tOiBiMzUzNjJAZnJlZXNjYWxlLmNvbQorWC1QYXRjaHdvcmstSWQ6IDEwODg3MworTWVzc2FnZS1JZDogPDEzMTI3OTE0MDMtMTM0NzMtMS1naXQtc2VuZC1lbWFpbC1iMzUzNjJAZnJlZXNjYWxlLmNvbT4KK1RvOiA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KK0NjOiBMaXUgU2h1byA8YjM1MzYyQGZyZWVzY2FsZS5jb20+LCBBcnRlbS5CaXR5dXRza2l5QG5va2lhLmNvbSwKKyBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPiwgbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKKworRnJvbTogTGl1IFNodW8gPGIzNTM2MkBmcmVlc2NhbGUuY29tPgorCitGbGFzaF9lcmFzZSAtaiBzaG91bGQgZmlsbCBkaXNjcmV0ZSBmcmVlb29iIGFyZWFzIHdpdGggcmVxdWlyZWQgYnl0ZXMKK29mIEpGRlMyIGNsZWFubWFya2VyIGluIGpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKS4gTm90IGp1c3QgZmlsbAordGhlIGZpcnN0IGZyZWVvb2IgYXJlYS4KKworVGhlIGJlbG93IGlzIHRoZSByZXN1bHQgd2l0aG91dCB0aGlzIHdvcmthcm91bmQ6CisKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDAwMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwNDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMDgwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDBjMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxMDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMTQwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDE4MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxYzAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMjAwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDI0MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAyODAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorLi4uCisKK1NpZ25lZC1vZmYtYnk6IExpdSBTaHVvIDxiMzUzNjJAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisKK1VwZGF0ZWQgZm9yIHRoZSBuZXcgdmVyc2lvbgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCit2MiA6IGdldCBsZW5ndGggb2YgYXZhaWxibGUgZnJlZW9vYiBieXRlcyBmcm9tIG9vYmluZm8gaW5mb3JtYXRpb24sCisgICAgICBub3QgdXNlIHRoZSBpb2N0bCBFQ0NHRVRMQVlPVVQgd2hpY2ggaXMgYmVpbmcgZGVwcmVjYXRlZC4KKworIGZsYXNoX2VyYXNlLmMgfCAgIDQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mbGFzaF9lcmFzZS5jIGIvZmxhc2hfZXJhc2UuYworaW5kZXggOTMzMzczYS4uNGI5ZDg0YiAxMDA2NDQKKy0tLSBhL2ZsYXNoX2VyYXNlLmMKKysrKyBiL2ZsYXNoX2VyYXNlLmMKK0BAIC05OSw2ICs5OSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWJvb2wgaXNOQU5EOworIAlpbnQgZXJyb3IgPSAwOworIAlvZmZfdCBvZmZzZXQgPSAwOworKwl2b2lkICpvb2JfZGF0YSA9IE5VTEw7CisgCisgCS8qCisgCSAqIFByb2Nlc3MgdXNlciBhcmd1bWVudHMKK0BAIC0yMDEsMTUgKzIwMiw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJCWlmIChpb2N0bChmZCwgTUVNR0VUT09CU0VMLCAmb29iaW5mbykgIT0gMCkKKyAJCQkJcmV0dXJuIHN5c19lcnJtc2coIiVzOiB1bmFibGUgdG8gZ2V0IE5BTkQgb29iaW5mbyIsIG10ZF9kZXZpY2UpOworIAorKwkJCWNsZWFubWFya2VyLnRvdGxlbiA9IGNwdV90b19qZTMyKDgpOworIAkJCS8qIENoZWNrIGZvciBhdXRvcGxhY2VtZW50ICovCisgCQkJaWYgKG9vYmluZm8udXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgeworLQkJCQkvKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBmcmVlIGJ5dGVzICovCistCQkJCWlmICghb29iaW5mby5vb2JmcmVlWzBdWzFdKQorKwkJCQlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXRfdXNlciBlY2NsYXlvdXQ7CisrCQkJCWludCBpLCBvb2JhdmFpbDsKKysKKysJCQkJZm9yIChpID0gMCwgb29iYXZhaWwgPSAwOyBvb2JpbmZvLm9vYmZyZWVbaV1bMV07IGkrKykKKysJCQkJCW9vYmF2YWlsICs9IG9vYmluZm8ub29iZnJlZVtpXVsxXTsKKysKKysJCQkJaWYgKCFvb2JhdmFpbCkKKyAJCQkJCXJldHVybiBlcnJtc2coIiBFZWVwLiBBdXRvcGxhY2VtZW50IHNlbGVjdGVkIGFuZCBubyBlbXB0eSBzcGFjZSBpbiBvb2IiKTsKKysKKysJCQkJLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLworIAkJCQljbG1wb3MgPSBvb2JpbmZvLm9vYmZyZWVbMF1bMF07CistCQkJCWNsbWxlbiA9IG9vYmluZm8ub29iZnJlZVswXVsxXTsKKy0JCQkJaWYgKGNsbWxlbiA+IDgpCistCQkJCQljbG1sZW4gPSA4OworKwkJCQljbG1sZW4gPSBNSU4ob29iYXZhaWwsIDgpOworKworKwkJCQlpZiAob29iaW5mby5vb2JmcmVlWzBdWzFdIDwgOCAmJiBvb2JhdmFpbCA+PSA4KSB7CisrCQkJCQlpbnQgbGVmdCwgbiwgbGFzdCA9IDA7CisrCQkJCQl2b2lkICpjbTsKKysKKysJCQkJCW9vYl9kYXRhID0gbWFsbG9jKG10ZC5vb2Jfc2l6ZSk7CisrCQkJCQlpZiAoIW9vYl9kYXRhKQorKwkJCQkJCXJldHVybiAtRU5PTUVNOworKworKwkJCQkJbWVtc2V0KG9vYl9kYXRhLCAweGZmLCBtdGQub29iX3NpemUpOworKwkJCQkJY20gPSAmY2xlYW5tYXJrZXI7CisrCQkJCQlmb3IgKGkgPSAwLCBsZWZ0ID0gY2xtbGVuOyBsZWZ0IDsgaSsrKSB7CisrCQkJCQkJbiA9IE1JTihsZWZ0LCBvb2JpbmZvLm9vYmZyZWVbaV1bMV0pOworKwkJCQkJCW1lbWNweShvb2JfZGF0YSArIG9vYmluZm8ub29iZnJlZVtpXVswXSwKKysJCQkJCQkJCWNtLCBuKTsKKysJCQkJCQlsZWZ0IC09IG47CisrCQkJCQkJY20gICArPSBuOworKwkJCQkJCWxhc3QgPSBvb2JpbmZvLm9vYmZyZWVbaV1bMF0gKyBuOworKwkJCQkJfQorKworKwkJCQkJY2xtbGVuID0gbGFzdCAtIGNsbXBvczsKKysJCQkJfQorIAkJCX0gZWxzZSB7CisgCQkJCS8qIExlZ2FjeSBtb2RlICovCisgCQkJCXN3aXRjaCAobXRkLm9vYl9zaXplKSB7CitAQCAtMjI3LDcgKzI1Niw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQkJCQkJYnJlYWs7CisgCQkJCX0KKyAJCQl9CistCQkJY2xlYW5tYXJrZXIudG90bGVuID0gY3B1X3RvX2plMzIoOCk7CisgCQl9CisgCQljbGVhbm1hcmtlci5oZHJfY3JjID0gY3B1X3RvX2plMzIobXRkX2NyYzMyKDAsICZjbGVhbm1hcmtlciwgc2l6ZW9mKGNsZWFubWFya2VyKSAtIDQpKTsKKyAJfQorQEAgLTI3Niw3ICszMDQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAkJLyogd3JpdGUgY2xlYW5tYXJrZXIgKi8KKyAJCWlmIChpc05BTkQpIHsKKy0JCQlpZiAobXRkX3dyaXRlX29vYihtdGRfZGVzYywgJm10ZCwgZmQsICh1aW50NjRfdClvZmZzZXQgKyBjbG1wb3MsIGNsbWxlbiwgJmNsZWFubWFya2VyKSAhPSAwKSB7CisrCQkJdm9pZCAqZGF0YSA9IG9vYl9kYXRhID8gb29iX2RhdGEgKyBjbG1wb3MgOiAmY2xlYW5tYXJrZXI7CisrCQkJaWYgKG10ZF93cml0ZV9vb2IobXRkX2Rlc2MsICZtdGQsIGZkLCAodWludDY0X3Qpb2Zmc2V0ICsgY2xtcG9zLCBjbG1sZW4sIGRhdGEpICE9IDApIHsKKyAJCQkJc3lzX2Vycm1zZygiJXM6IE1URCB3cml0ZW9vYiBmYWlsdXJlIiwgbXRkX2RldmljZSk7CisgCQkJCWNvbnRpbnVlOworIAkJCX0KK0BAIC0yOTEsNSArMzIwLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJc2hvd19wcm9ncmVzcygmbXRkLCBvZmZzZXQsIGViLCBlYl9zdGFydCwgZWJfY250KTsKKyAJYmFyZXZlcmJvc2UoIXF1aWV0LCAiXG4iKTsKKyAKKysJaWYgKG9vYl9kYXRhKQorKwkJZnJlZShvb2JfZGF0YSk7CisrCisgCXJldHVybiAwOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RjYTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIG1lbW9yeSB0ZWNobm9sb2d5IGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9jb21tb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1iYTA1YjA3OTEyYTQ0ZWEyYmY4MWNlNDA5MzgwMDQ5YyIKKworREVQRU5EUyA9ICJ6bGliIGx6byBlMmZzcHJvZ3MgdXRpbC1saW51eCIKKworUFYgPSAiMS41LjErZ2l0JHtTUkNQVn0iCisKK1NSQ1JFViA9ICI5ZjEwNzEzMmE2YTA3M2NjZTM3NDM0Y2E5Y2RhNjkxN2RkOGQ4NjZiIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0LyIKKworIyB4YXR0ciBzdXBwb3J0IGNyZWF0ZXMgYW4gYWRkaXRpb25hbCBjb21waWxlLXRpbWUgZGVwZW5kZW5jeSBvbiBhY2wgYmVjYXVzZQorIyB0aGUgc3lzL2FjbC5oIGhlYWRlciBpcyBuZWVkZWQuIGxpYmFjbCBpcyBub3QgbmVlZGVkIGFuZCB0aHVzIGVuYWJsaW5nIHhhdHRyCisjIHJlZ2FyZGxlc3Mgd2hldGhlciBhY2wgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgZGlzdHJvIHNob3VsZCBiZSBva2F5LgorUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICIsLGFjbCwiCisKK0VYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdSQU5MSUI9JHtSQU5MSUJ9JyAnQVI9JHtBUn0nICdDRkxBR1M9JHtDRkxBR1N9ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3hhdHRyJywgJycsICctRFdJVEhPVVRfWEFUVFInLCBkKX0gLUkke1N9L2luY2x1ZGUnICdCVUlMRERJUj0ke1N9JyIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK30KKworUEFDS0FHRVMgPSsgIm10ZC11dGlscy1qZmZzMiBtdGQtdXRpbHMtdWJpZnMgbXRkLXV0aWxzLW1pc2MiCisKK0ZJTEVTX210ZC11dGlscy1qZmZzMiA9ICIke3NiaW5kaXJ9L21rZnMuamZmczIgJHtzYmluZGlyfS9qZmZzMmR1bXAgJHtzYmluZGlyfS9qZmZzMnJlYWRlciAke3NiaW5kaXJ9L3N1bXRvb2wiCitGSUxFU19tdGQtdXRpbHMtdWJpZnMgPSAiJHtzYmluZGlyfS9ta2ZzLnViaWZzICR7c2JpbmRpcn0vdWJpKiIKK0ZJTEVTX210ZC11dGlscy1taXNjID0gIiR7c2JpbmRpcn0vbmZ0bCogJHtzYmluZGlyfS9mdGwqICR7c2JpbmRpcn0vcmZkKiAke3NiaW5kaXJ9L2RvYyogJHtzYmluZGlyfS9zZXJ2ZV9pbWFnZSAke3NiaW5kaXJ9L3JlY3ZfaW1hZ2UiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIGdpdC8uY29tcHIuYy5kZXA6NDY6IHdhcm5pbmc6IE5VTCBjaGFyYWN0ZXIgc2VlbjsgcmVzdCBvZiBsaW5lIGlnbm9yZWQKKyMgZ2l0Ly5jb21wci5jLmRlcDo0NzogKioqIG1pc3Npbmcgc2VwYXJhdG9yLiAgU3RvcC4KK1BBUkFMTEVMX01BS0UgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvZml4LWJyb2tlbi1sei5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NTQ5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBXZW5saW4gS2FuZyA8d2VubGluLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggOGY5MzA1YS4uNjk0ZTgzNyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI1MSw2ICsyNTEsNyBAQCBpbnN0YWxsLXNjcmlwdHM6ICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorIAlAZm9yIGogaW4gJChTQ1JJUFRTKSA7IGRvIFwKKyAJCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9zY3JpcHRzLyQkaiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisgCQllY2hvICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAlkb25lCisgCXJtIC1mICR7REVTVERJUn0kKGJpbmRpcikvbHoKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMjg3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMtbWFrZWluZm8ucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBtdG9vbHMtMy45LjkvY29uZmlndXJlLmluLm9yaWcJMjAwNi0wNC0xNCAxNjowNTo1NC4zMzc2NTUxOTIgLTA2MDAKKysrKyBtdG9vbHMtMy45LjkvY29uZmlndXJlLmluCTIwMDYtMDQtMTQgMTY6MTI6MjkuNzM2NTQ1NDI0IC0wNjAwCitAQCAtMjEsNiArMjEsMzMgQEAKKyBBQ19DX0NPTlNUCisgQUNfQ19JTkxJTkUKKyAKKytBQ19DSEVDS19QUk9HKE1BS0VJTkZPLCBtYWtlaW5mbywgbWFrZWluZm8sICkKKytpZiB0ZXN0ICJ4JE1BS0VJTkZPIiA9ICJ4IjsgdGhlbgorKwlNQUtFSU5GTz0iQGVjaG8gbWFrZWluZm8gbWlzc2luZzsgdHJ1ZSIKKytmaQorK0FDX0NIRUNLX1BST0coVEVYSTJEVkksIHRleGkyZHZpLCB0ZXhpMmR2aSwgKQorK2lmIHRlc3QgIngkVEVYSTJEVkkiID0gIngiOyB0aGVuCisrCVRFWEkyRFZJPSJAZWNobyB0ZXhpMmR2aSBtaXNzaW5nOyB0cnVlIgorK2ZpCisrQUNfQ0hFQ0tfUFJPRyhURVhJMlBERiwgdGV4aTJwZGYsIHRleGkycGRmLCApCisraWYgdGVzdCAieCRURVhJMlBERiIgPSAieCI7IHRoZW4KKysJVEVYSTJQREY9IkBlY2hvIHRleGkycGRmIG1pc3Npbmc7IHRydWUiCisrZmkKKytBQ19DSEVDS19QUk9HKFRFWEkySFRNTCwgdGV4aTJodG1sLCB0ZXhpMmh0bWwsICkKKytpZiB0ZXN0ICJ4JFRFWEkySFRNTCIgPSAieCI7IHRoZW4KKysJVEVYSTJIVE1MPSJAZWNobyB0ZXhpMmh0bWwgbWlzc2luZzsgdHJ1ZSIKKytmaSAgICAKKytBQ19DSEVDS19QUk9HKERWSTJQUywgZHZpMnBzLCBkdmkycHMsICkKKytpZiB0ZXN0ICJ4JERWSTJQUyIgPSAieCI7IHRoZW4KKysJRFZJMlBTPSJAZWNobyBkdmkycHMgbWlzc2luZzsgdHJ1ZSIKKytmaQorKworK0FDX1NVQlNUKE1BS0VJTkZPKQorK0FDX1NVQlNUKFRFWEkyRFZJKQorK0FDX1NVQlNUKFRFWEkyUERGKQorK0FDX1NVQlNUKFRFWEkySFRNTCkKKytBQ19TVUJTVChEVkkyUFMpCisrCisgCisgZG5sIENoZWNrIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyBkbmwgRW5hYmxlIE9TLzIgZXh0ZW5kZWQgZGVuc2l0eSBmb3JtYXQgZGlza3MKKy0tLSBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4uc2F2CTIwMDYtMDQtMTQgMTU6NTY6MTkuMDAwMDAwMDAwIC0wNjAwCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCTIwMDYtMDQtMTQgMTY6MTU6MjkuMzE1MjQ1MzEyIC0wNjAwCitAQCAtMTEsMTAgKzExLDExIEBACisgVVNFUkxERkxBR1MgPQorIFVTRVJMRExJQlMgPQorIAorLU1BS0VJTkZPID0gbWFrZWluZm8KKy1URVhJMkRWSSA9IHRleGkyZHZpCistVEVYSTJQREYgPSB0ZXhpMnBkZgorLVRFWEkySFRNTCA9IHRleGkyaHRtbAorK01BS0VJTkZPID0gQE1BS0VJTkZPQAorK1RFWEkyRFZJID0gQFRFWEkyRFZJQAorK1RFWEkyUERGID0gQFRFWEkyUERGQAorK1RFWEkySFRNTCA9IEBURVhJMkhUTUxACisrRFZJMlBTID0gQERWSTJQU0AKKyAKKyAKKyAjIGRvIG5vdCBlZGl0IGJlbG93IHRoaXMgbGluZQorQEAgLTE4MSw3ICsxODIsNyBAQAorIAorIHBzOiBtdG9vbHMucHMKKyAlLnBzOiAlLmR2aQorLQlkdmlwcyAtZiA8ICQ8ID4gJEAKKysJJChEVkkyUFMpIC1mIDwgJDwgPiAkQAorIAorIHBkZjogbXRvb2xzLnBkZgorICUucGRmOiAlLnRleGkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWEzMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsMTI5IEBACiskTmV0QlNEOiBwYXRjaC1hYSx2IDEuMTAgMjAwNy8wOC8xNyAyMDo1NTozNCBqb2VyZyBFeHAgJAorCistLS0KKyBNYWtlZmlsZS5pbiB8ICAgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG10b29scy0zLjkuOS5vcmlnL01ha2VmaWxlLmluCTIwMDctMTAtMTIgMTE6MTg6NDYuMDAwMDAwMDAwICswMTAwCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCTIwMDctMTAtMTIgMTE6Mjg6MTQuMDAwMDAwMDAwICswMTAwCitAQCAtMTk1LDMwICsxOTUsMjIgQEAgaHRtbDogbXRvb2xzLmh0bWwgbXRvb2xzX3RvYy5odG1sCisgCisgIyBEb24ndCBjZCwgdG8gYXZvaWQgYnJlYWtpbmcgaW5zdGFsbC1zaCByZWZlcmVuY2VzLgorIGluc3RhbGwtaW5mbzogaW5mbworLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChpbmZvZGlyKQorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoaW5mb2RpcikKKyAJaWYgdGVzdCAtZiBtdG9vbHMuaW5mbzsgdGhlbiBcCisgCSAgZm9yIGkgaW4gbXRvb2xzLmluZm8qOyBkbyBcCistCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoaW5mb2RpcikvJCRpOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRpICR7REVTVERJUn0kKGluZm9kaXIpLyQkaTsgXAorIAkgIGRvbmU7IFwKKyAJZWxzZSBcCisgCSAgZm9yIGkgaW4gJChzcmNkaXIpL210b29scy5pbmZvKjsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKGluZm9kaXIpL2BlY2hvICQkaSB8IHNlZCAnc3xeJChzcmNkaXIpL3x8J2A7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJHtERVNURElSfSQoaW5mb2RpcikvYGVjaG8gJCRpIHwgc2VkICdzfF4kKHNyY2RpcikvfHwnYDsgXAorIAkgIGRvbmU7IFwKKyAJZmk7IFwKKy0JaWYgWyAtbiAiJChJTlNUQUxMX0lORk8pIiBdIDsgdGhlbiBcCistCQlpZiBbIC1mICQoaW5mb2RpcikvZGlyLmluZm8gXSA7IHRoZW4gXAorLQkJCSQoSU5TVEFMTF9JTkZPKSAkKGluZm9kaXIpL210b29scy5pbmZvICQoaW5mb2RpcikvZGlyLmluZm87IFwKKy0JCWZpOyBcCistCQlpZiBbIC1mICQoaW5mb2RpcikvZGlyIF0gOyB0aGVuIFwKKy0JCQkkKElOU1RBTExfSU5GTykgJChpbmZvZGlyKS9tdG9vbHMuaW5mbyAkKGluZm9kaXIpL2RpcjsgXAorLQkJZmk7IFwKKy0JZmkKKyAKKyB1bmluc3RhbGwtaW5mbzoKKyAJY2QgJChpbmZvZGlyKSAmJiBybSAtZiBtdG9vbHMuaW5mbyoKKyAKKy1pbnN0YWxsOgkkKGJpbmRpcikvbXRvb2xzIEBCSU5GTE9QUFlEQCBpbnN0YWxsLW1hbiBpbnN0YWxsLWxpbmtzIFwKKy0JCSQoYmluZGlyKS9ta21hbmlmZXN0IGluc3RhbGwtc2NyaXB0cyBpbnN0YWxsLWluZm8KKytpbnN0YWxsOgkke0RFU1RESVJ9JChiaW5kaXIpL210b29scyAke0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWQgaW5zdGFsbC1tYW4gaW5zdGFsbC1saW5rcyBcCisrCQkke0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3QgaW5zdGFsbC1zY3JpcHRzIGluc3RhbGwtaW5mbworIAorIHVuaW5zdGFsbDoJdW5pbnN0YWxsLWJpbiB1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1saW5rcyBcCisgCQl1bmluc3RhbGwtc2NyaXB0cworQEAgLTIyOCw1MiArMjIwLDUyIEBAIGRpc3RjbGVhbjogY2xlYW4gdGV4Y2xlYW4KKyBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKyAKKyAKKy0kKGJpbmRpcikvZmxvcHB5ZDogZmxvcHB5ZAorLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkICQoYmluZGlyKS9mbG9wcHlkCisrJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkOiBmbG9wcHlkCisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkICR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZAorIAorLSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0OiBmbG9wcHlkX2luc3RhbGx0ZXN0CistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWRfaW5zdGFsbHRlc3QgJChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3QKKyske0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3Q6IGZsb3BweWRfaW5zdGFsbHRlc3QKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWRfaW5zdGFsbHRlc3QgJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0CisgCistJChiaW5kaXIpL210b29sczogbXRvb2xzCistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIG10b29scyAkKGJpbmRpcikvbXRvb2xzCisrJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHM6IG10b29scworKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbXRvb2xzICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCistJChiaW5kaXIpL21rbWFuaWZlc3Q6IG1rbWFuaWZlc3QKKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgbWttYW5pZmVzdCAkKGJpbmRpcikvbWttYW5pZmVzdAorKyR7REVTVERJUn0kKGJpbmRpcikvbWttYW5pZmVzdDogbWttYW5pZmVzdAorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbWttYW5pZmVzdCAke0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3QKKyAKKyAjJChFVENESVIpL210b29sczogbXRvb2xzLmV0YworICMJY3AgbXRvb2xzLmV0YyAkKEVUQ0RJUikvbXRvb2xzCisgCistaW5zdGFsbC1saW5rczogJChiaW5kaXIpL210b29scworK2luc3RhbGwtbGlua3M6ICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCUBmb3IgaiBpbiAkKExJTktTKTsgZG8gXAorLQkJcm0gLWYgJChiaW5kaXIpLyQkaiA7IFwKKy0JCSQoTE5fUykgbXRvb2xzICQoYmluZGlyKS8kJGogOyBcCistCQllY2hvICQoYmluZGlyKS8kJGogOyBcCisrCQlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCSQoTE5fUykgbXRvb2xzICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJZG9uZQorIAorICMjICJ6IiBpcyB0aGUgb2xkZXIgdmVyc2lvbiBvZiAiZ3oiOyB0aGUgbmFtZSBpcyBqdXN0ICp0b28qIHNob3J0CistaW5zdGFsbC1zY3JpcHRzOiAkKGJpbmRpcikvbXRvb2xzCistCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCisraW5zdGFsbC1zY3JpcHRzOiAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworKwlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKyAJQGZvciBqIGluICQoU0NSSVBUUykgOyBkbyBcCistCQkkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICQoYmluZGlyKS8kJGogOyBcCistCQllY2hvICQoYmluZGlyKS8kJGogOyBcCisrCQkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQllY2hvICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAlkb25lCistCXJtIC1mICQoYmluZGlyKS9segorLQkkKExOX1MpIHV6ICQoYmluZGlyKS9segorKwlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpL2x6CisrCSQoTE5fUykgdXogJHtERVNURElSfSQoYmluZGlyKS9segorIAorIGluc3RhbGwtbWFuOgorLQlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoTUFOMURJUikKKysJQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChNQU4xRElSKQorIAlAZm9yIGogaW4gJChNQU4xKTsgZG8gXAorLQkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJChNQU4xRElSKS8kJGogOyBcCistCQllY2hvICQoTUFOMURJUikvJCRqIDsgXAorKwkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJHtERVNURElSfSQoTUFOMURJUikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChNQU4xRElSKS8kJGogOyBcCisgCWRvbmUKKy0JQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKE1BTjVESVIpCisrCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoTUFONURJUikKKyAJQGZvciBqIGluICQoTUFONSk7IGRvIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICQoTUFONURJUikvJCRqIDsgXAorLQkJZWNobyAkKE1BTjVESVIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICR7REVTVERJUn0kKE1BTjVESVIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoTUFONURJUikvJCRqIDsgXAorIAlkb25lCisgCisgdW5pbnN0YWxsLWJpbjoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IzZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLmdwbHYzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Rpc2FibGUgYnVpbGRpbmcgd2l0aCBYMTEgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbXRvb2xzLTQuMC4xNS5vcmlnLy9NYWtlZmlsZS5pbiBtdG9vbHMtNC4wLjE1Ly9NYWtlZmlsZS5pbgorLS0tIG10b29scy00LjAuMTUub3JpZy8vTWFrZWZpbGUuaW4JMjAxMC0xMC0xNyAwODo0MTowOS4wMDAwMDAwMDAgLTA3MDAKKysrKyBtdG9vbHMtNC4wLjE1Ly9NYWtlZmlsZS5pbgkyMDEwLTExLTIzIDEzOjU5OjQ5LjI1ODI1ODM3NCAtMDgwMAorQEAgLTE0Niw3ICsxNDYsNyBAQAorIENYWEZMQUdTICA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNYWEZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpCisgTElOSyAgICAgID0gJChDQykgJChMREZMQUdTKSAkKFVTRVJMREZMQUdTKSBAZXh0cmFsaWJkaXJACisgQUxMTElCUyAgID0gJChVU0VSTERMSUJTKSAkKE1BQ0hERVBMSUJTKSAkKFNITElCKSAkKExJQlMpCistWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAtbFhhdSAtbFgxMSAkKExJQlMpCisrWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAkKExJQlMpCisgWF9DQ0ZMQUdTID0gJChYX0NGTEFHUykgJChDRkxBR1MpCisgCisgYWxsOiAgICBtdG9vbHMgJChMSU5LUykgbWttYW5pZmVzdCBARkxPUFBZREAgbXRvb2xzLjEgbXRvb2xzLjUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDViNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworLS0tIG10b29scy0zLjkuOS5vcmlnL01ha2VmaWxlLmluCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCitAQCAtMTI4LDExICsxMjgsMTEgQEAgWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKKyBYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACisgQ0ZMQUdTID0gJChDUFBGTEFHUykgJChERUZTKSAkKE1ZQ0ZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpIAorIENYWEZMQUdTICA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNYWEZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpIAorIExJTksgICAgICA9ICQoQ0MpICQoTERGTEFHUykgJChVU0VSTERGTEFHUykgQGV4dHJhbGliZGlyQAorIEFMTExJQlMgICA9ICQoVVNFUkxETElCUykgJChNQUNIREVQTElCUykgJChTSExJQikgJChMSUJTKQorLVhfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChYX1BSRV9MSUJTKSAtbFhhdSAtbFgxMSAkKExJQlMpIAorK1hfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChYX1BSRV9MSUJTKSAkKExJQlMpCisgWF9DQ0ZMQUdTID0gJChYX0NGTEFHUykgJChDRkxBR1MpCisgCisgYWxsOiAgICBtdG9vbHMgJChMSU5LUykgbWttYW5pZmVzdCBARkxPUFBZREAKKyAKKyAlLm86ICUuYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg0YTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIKQEAgLTAsMCArMSw1NiBAQAorIyBtdG9vbHMgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIlV0aWxpdGllcyB0byBhY2Nlc3MgTVMtRE9TIGRpc2tzIHdpdGhvdXQgbW91bnRpbmcgdGhlbSIKK0RFU0NSSVBUSU9OID0gIk10b29scyBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBhY2Nlc3NpbmcgTVMtRE9TIGRpc2tzIGZyb20gVW5peCB3aXRob3V0IG1vdW50aW5nIHRoZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL210b29scy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTkyYjU4ZWM3NzY5Njc4OGNlMjc4YjA0NGQyYThlOWQzIgorUFIgPSAicjYiCisKK1JERVBFTkRTXyR7UE59ID0gImdsaWJjLWdjb252LWlibTg1MCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKwlnbGliYy1nY29udi1pYm00MzcgXAorCWdsaWJjLWdjb252LWlibTczNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzc1IFwKKwlnbGliYy1nY29udi1pYm04NTEgXAorCWdsaWJjLWdjb252LWlibTg1MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODU1IFwKKwlnbGliYy1nY29udi1pYm04NTcgXAorCWdsaWJjLWdjb252LWlibTg2MCBcCisJZ2xpYmMtZ2NvbnYtaWJtODYxIFwKKwlnbGliYy1nY29udi1pYm04NjIgXAorCWdsaWJjLWdjb252LWlibTg2MyBcCisJZ2xpYmMtZ2NvbnYtaWJtODY1IFwKKwlnbGliYy1nY29udi1pYm04NjYgXAorCWdsaWJjLWdjb252LWlibTg2OSBcCisJIgorCisjaHR0cDovL210b29scy5saW51eC5sdS9tdG9vbHMtJHtQVn0udGFyLmd6IAorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbXRvb2xzLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL210b29scy1tYWtlaW5mby5wYXRjaCBcCisJZmlsZTovL210b29scy5wYXRjaCBcCisJZmlsZTovL25vLXgxMS5wYXRjaCBcCisJZmlsZTovL2ZpeC1icm9rZW4tbHoucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2U2OGI4NTdiNGUxZjNhNjUyMWQxZGZlZmJkMzBhMzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWYwODNhNzM0MjVkNjY0ZDQ2MDdlZjZjNjU2NGZkOTMxOWEwZTQ3ZWU3YzEwNTI1OWE0NTM1NmNiODM0NjkwZSIKKworUyA9ICIke1dPUktESVJ9L210b29scy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGliYnNkXSA9ICJhY19jdl9saWJfYnNkX21haW49eWVzLGFjX2N2X2xpYl9ic2RfbWFpbj1ubyxsaWJic2QiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYmluZGlyIHRvIGZpeCBwYXJhbGxlbCBpbnN0YWxsYXRpb24gaXNzdWVzCisgICAgbWtkaXIgLXAgJHtEfS8ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9LyR7ZGF0YWRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRlY2ZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIHRvIGFjY2VzcyBNUy1ET1MgZGlza3Mgd2l0aG91dCBtb3VudGluZyB0aGVtIgorREVTQ1JJUFRJT04gPSAiTXRvb2xzIGlzIGEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgdG8gYWNjZXNzIE1TLURPUyBkaXNrcyBmcm9tIEdOVSBhbmQgVW5peCB3aXRob3V0IG1vdW50aW5nIHRoZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL210b29scy8iCitTRUNUSU9OID0gIm9wdGlvbmFsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCisKK1JERVBFTkRTXyR7UE59ID0gImdsaWJjLWdjb252LWlibTg1MCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKwlnbGliYy1nY29udi1pYm00MzcgXAorCWdsaWJjLWdjb252LWlibTczNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzc1IFwKKwlnbGliYy1nY29udi1pYm04NTEgXAorCWdsaWJjLWdjb252LWlibTg1MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODU1IFwKKwlnbGliYy1nY29udi1pYm04NTcgXAorCWdsaWJjLWdjb252LWlibTg2MCBcCisJZ2xpYmMtZ2NvbnYtaWJtODYxIFwKKwlnbGliYy1nY29udi1pYm04NjIgXAorCWdsaWJjLWdjb252LWlibTg2MyBcCisJZ2xpYmMtZ2NvbnYtaWJtODY1IFwKKwlnbGliYy1nY29udi1pYm04NjYgXAorCWdsaWJjLWdjb252LWlibTg2OSBcCisJIgorU1JDX1VSSVttZDVzdW1dID0gImEyMzY0NjYxNzU0NmJmNmFkNTZmMDYxZDhiMjgzYzg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5ZTljZjgwODg1Mzk5YzRmMjI5ZTVkODdlNDljMGMyYmZlZWMwNDRlMTM4NmQ1OWZjZDBiMGFlYWQ2YjJmODUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tdG9vbHMvbXRvb2xzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbXRvb2xzLW1ha2VpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vLXgxMS5ncGx2My5wYXRjaCIKKworCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJic2RdID0gImFjX2N2X2xpYl9ic2RfbWFpbj15ZXMsYWNfY3ZfbGliX2JzZF9tYWluPW5vLGxpYmJzZCIKKworZG9faW5zdGFsbF9wcmVwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBiaW5kaXIgdG8gZml4IHBhcmFsbGVsIGluc3RhbGxhdGlvbiBpc3N1ZXMKKyAgICBta2RpciAtcCAke0R9LyR7YmluZGlyfQorICAgIG1rZGlyIC1wICR7RH0vJHtkYXRhZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzI0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJHZW5lcmFsLXB1cnBvc2UgeDg2IGFzc2VtYmxlciIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTkwOTA0NDg2ZjhmYmYxODYxY2Y0Mjc1MmUxYTM5ZWZlIgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44NikuKi0obGludXh8ZnJlZWJzZC4qKScKKworCitTUkNfVVJJID0gImh0dHA6Ly93d3cubmFzbS51cy9wdWIvbmFzbS9yZWxlYXNlYnVpbGRzLyR7UFZ9L25hc20tJHtQVn0udGFyLmJ6MiAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YWFlNWNiOGUwM2ZhYzQ4MDI5YzgyYTc0NzBhYjA2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGEzYTAyOTFhMGJkYzA2MzA1YjdiYTE5NGYxZTJjMmI1NWFlNmYxMTIxMGI0YWY0MzcyOTg2ODE0OWQ1NDQ1IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgLWYgJHtTfS9hY2xvY2FsLm00IF0gJiYgWyAhIC1mICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuMQorCisJb2VfcnVubWFrZSAnSU5TVEFMTFJPT1Q9JHtEfScgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvZml4LXJlZ2V4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQwYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDU1ZjZmZDhmMTk1OGFhMzY1ODRlZWZlZWNjZTc4MmE1MDU5NjNjODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBiZW52bSA8YmVudm1AeW93LWdtb2ZmYXR0LWx4Mi53cnMuY29tPgorRGF0ZTogV2VkLCA5IEphbiAyMDEzIDEyOjE0OjA2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBNYWtlZmlsZSByZWd1bGFyIGV4cHJlc3Npb24KKworVGhpcyBwYXRjaCBtb2RpZmllcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSBNYWtlZmlsZSB0byBzdG9wIGJ1aWxkcworZnJvbSBmYWlsaW5nIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBwYXRoIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzICIuYSIuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBNYWtlZmlsZS5wcm9nLmluIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJvZy5pbiBiL01ha2VmaWxlLnByb2cuaW4KK2luZGV4IDc2MzEwYzkuLjQ0YzM1MzQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5wcm9nLmluCisrKysgYi9NYWtlZmlsZS5wcm9nLmluCitAQCAtMTIsNyArMTIsNyBAQCBMSU5LRkxBR1MgPSBATElOS0ZMQUdTQAorIAorIEFMTF9MSUJTID0gJChYTElCUykgJChMSUJTKQorIE1ha2VmaWxlLmx0OgorLQllY2hvICdMVF9MSUJTPSdgZWNobyAkKEFMTF9MSUJTKXxzZWQgJ3MvXC5hLy5sYS9nJ2AgPk1ha2VmaWxlLmx0CisrCWVjaG8gJ0xUX0xJQlM9J2BlY2hvICQoQUxMX0xJQlMpIHwgc2VkICdzL1wuYVxzL1wubGEgL2cnIHwgc2VkIHMvXC5hJCQvXC5sYS9gID4gTWFrZWZpbGUubHQKKyAKKyBQUk9HOj0kKHNoZWxsIGVjaG8gIiQoUFJPRykiIHwgc2VkICdAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAnKQorIAorLS0gCisxLjcuMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhiOWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgbGlidG9vbCBRQSBpc3N1ZXMgd2l0aCBXT1JLRElSIGNyZWVwaW5nIGluIHRvCitsaWJvc3Bncm92ZS5sYSBhbmQgbGlib3N0eWxlLmxhLiBQYXRjaCBvYnRhaW5lZCBmcm9tIE9wZW5FbWJlZGRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1dvcmthcm91bmQgaXMgc3BlY2lmaWMgdG8gb3VyIGJ1aWxkIHN5c3RlbS4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9zcGdyb3ZlL01ha2VmaWxlLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvc3Bncm92ZS9NYWtlZmlsZS5zdWIKKysrKyBvcGVuamFkZS0xLjMuMi9zcGdyb3ZlL01ha2VmaWxlLnN1YgorQEAgLTEsOCArMSw4IEBACisgTFRWRVJTSU9OPTA6MTowCisgTElCPW9zcGdyb3ZlCisgSU5DTFVERT0tSSQoc3JjZGlyKS8uLi9ncm92ZQorLURFUExJQlM9LWxtIC1MJChUT1ApL2dyb3ZlIC1MJChUT1ApL2dyb3ZlLy5saWJzIFwKKy0JLUwkKFRPUCkvbGliIC1MJChUT1ApL2xpYi8ubGlicyBcCisrREVQTElCUz0tbG0gJChUT1ApL2dyb3ZlIFwKKysJJChUT1ApL2xpYiBcCisgCSQoTElCX1RIUkVBRFMpCisgT0JKUz1Hcm92ZUFwcC5vIEdyb3ZlQnVpbGRlci5vIFNkTm9kZS5vCisgR0VOU1JDUz1ncm92ZV9pbnN0LmN4eAorSW5kZXg6IG9wZW5qYWRlLTEuMy4yL3N0eWxlL01ha2VmaWxlLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvc3R5bGUvTWFrZWZpbGUuc3ViCisrKysgb3BlbmphZGUtMS4zLjIvc3R5bGUvTWFrZWZpbGUuc3ViCitAQCAtMSw4ICsxLDggQEAKKyBMVFZFUlNJT049MDoxOjAKKyBMSUI9b3N0eWxlCistREVQTElCUz0tbG0gLUwkKFRPUCkvZ3JvdmUgLUwkKFRPUCkvZ3JvdmUvLmxpYnMgXAorLSAgLUwkKFRPUCkvbGliIC1MJChUT1ApL2xpYi8ubGlicyBcCistICAtTCQoVE9QKS9zcGdyb3ZlIC1MJChUT1ApL3NwZ3JvdmUvLmxpYnMgCisrREVQTElCUz0tbG0gJChUT1ApL2dyb3ZlIFwKKysgICQoVE9QKS9saWIgIFwKKysgICQoVE9QKS9zcGdyb3ZlCisgT0JKUz1MYW5nT2JqLm8gXAorICAgQ29sbGVjdG9yLm8gXAorICAgRHNzc2xBcHAubyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbXNnZ2VuLnBsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdmZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitjb21taXQgZmNjNWI5NGYxMTg0OTViMWE0NjdlZGNkYTZjNmY2MzE2OTFjM2Y2OQorQXV0aG9yOiBEZW5uaXMgTGFuIDxkZW5uaXMueXh1bkBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMyAwOToyNTo0MiAyMDEyICswODAwCisKKyAgICBvcGVuamFkZTogZml4IHVuZGVmaW5lZCBHZXRvcHRzIGVycm9yLCB1c2Ugc3RkIG5hbWVzcGFjZQorICAgIAorICAgIFVzaW5nIEdlbnRvbyBMaW51eCBhcyB0aGUgYnVpbGQgaG9zdCwgaXQgZmFpbHMgd2l0aG91dCB0aGlzIHBhdGNoCisgICAgVXNlIEdldG9wdDo6U3RkIGluIHBsYWNlIG9mIGdldG9wdHMucGwuCisgICAgCisgICAgVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyB1cHN0cmVhbV0KKyAgICBPcmlnaW5hbC1BdXRob3ItQnk6IE1pa2UgR2lsYmVydCA8ZmxvcHB5bUBnZW50b28ub3JnPgorICAgIFNpZ25lZC1vZmYtYnk6IERlbm5pcyBMYW4gPGRlbm5pcy55eHVuQGdtYWlsLmNvbT4KKworZGlmZiAtLWdpdCBhL21zZ2dlbi5wbCBiL21zZ2dlbi5wbAoraW5kZXggMGMzMzk2OC4uMmVlM2Y2NiAxMDA2NDQKKy0tLSBhL21zZ2dlbi5wbAorKysrIGIvbXNnZ2VuLnBsCitAQCAtNCw2ICs0LDcgQEAKKyAjIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisgCisgdXNlIFBPU0lYOworK3VzZSBHZXRvcHQ6OlN0ZDsKKyAKKyAjIFBhY2thZ2UgYW5kIHZlcnNpb24uCisgJHBhY2thZ2UgPSAnb3BlbmphZGUnOworQEAgLTE4LDggKzE5LDcgQEAgJGdlbl9jID0gMDsKKyB1bmRlZiAkb3B0X2w7CisgdW5kZWYgJG9wdF9wOworIHVuZGVmICRvcHRfdDsKKy1kbyAnZ2V0b3B0cy5wbCc7CistJkdldG9wdHMoJ2w6cDp0OicpOworK2dldG9wdHMoJ2w6cDp0OicpOworICRtb2R1bGUgPSAkb3B0X2w7CisgJHBvdF9maWxlID0gJG9wdF9wOworIAorQEAgLTcyLDcgKzcyLDcgQEAgd2hpbGUgKDxERUY+KSB7CisgICAgIGVsc2UgeworIAkkZmllbGRbMF0gPX4gL15bSVdRWEVdWzAtOV0kLyB8fCAmZXJyb3IoImludmFsaWQgZmlyc3QgZmllbGQiKTs7CisgCSR0eXBlWyRudW1dID0gc3Vic3RyKCRmaWVsZFswXSwgMCwgMSk7CistCSRhcmdjID0gaW50KHN1YnN0cigkZmllbGRbMF0sIDEsIDEpKTsKKysJJGFyZ2MgPSBzdWJzdHIoJGZpZWxkWzBdLCAxLCAxKTsKKyAgICAgfQorICAgICAkbmFyZ3NbJG51bV0gPSAkYXJnYzsKKyAgICAgJGZpZWxkWzFdID1+IC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKyQvIHx8ICZlcnJvcigiaW52YWxpZCB0YWciKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3JlYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyM2E0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK0Vuc3VyZSB3ZSByZWF1dG9jb25mIHRoZSBwYWNrYWcKKworQ3VycmVudGx5IHNpbmNlIGNvbmZpZ3VyZS5pbiBpbiBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgd2UgZG9uJ3QgcmVhdXRvY29uZiB0aGUgCityZWNpcGUuIFdlIHJlYWxseSBuZWVkIHRvIGRvIHRoaXMsIHRvIHVwZGF0ZSB0aGluZ3MgbGlrZSB0aGUgbGlidG9vbCBzY3JpcHQgdXNlZAorYW5kIGZpeCB2YXJpb3VzIGlzc3VlcyBzdWNoIGFzIHRob3NlIHRoYXQgY291bGQgY3JlZXAgaW4gaWYgYSByZWF1dG9jb25mIGlzIAordHJpZ2dlcmVkIGZvciBzb21lIHJlYXNvbi4gU2luY2UgdGhpcyBzb3VyY2Ugb25seSBjYWxscyBBTV9JTklUX0FVVE9NQUtFIHRvIAorZ2FpbiB0aGUgUEFDS0FHRSBhbmQgVkVSU0lPTiBkZWZpbml0aW9ucyBhbmQgdGhhdCBtYWNybyBub3cgZXJyb3JzIGlmIE1ha2VmaWxlLmFtIAorZG9lc24ndCBleGlzdCwgd2UgbmVlZCB0byBhZGQgdGhlc2UgZGVmaW5pdGlvbnMgbWFudWFsbHkuIAorCitUaGVzZSBjaGFuZ2VzIGF2b2lkIGZhaWx1cmVzIGxpa2U6IAorLS0tLSAKK3wgLi4uIAorfCBEc3NzbEFwcC5jeHg6MTE3OjM2OiBlcnJvcjogJ1BBQ0tBR0UnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZSAKK3wgRHNzc2xBcHAuY3h4OjExODozNjogZXJyb3I6ICdWRVJTSU9OJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUgCit8IG1ha2VbMl06ICoqKiBbRHNzc2xBcHAubG9dIEVycm9yIDEgLS0tLQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMi82LzEyCisKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuamFkZS0xLjMuMi9hY2luY2x1ZGUubTQJMjAxMi0wNi0xMiAxMjo0ODo1NC44NzEzNjUzNDQgKzAwMDAKK0BAIC0wLDAgKzEsMzkgQEAKKytkbmwgQ29uZmlndXJlLXRpbWUgc3dpdGNoIHdpdGggZGVmYXVsdAorK2RubAorK2RubCBFYWNoIHN3aXRjaCBkZWZpbmVzIGFuIC0tZW5hYmxlLUZPTyBhbmQgLS1kaXNhYmxlLUZPTyBvcHRpb24gaW4KKytkbmwgdGhlIHJlc3VsdGluZyBjb25maWd1cmUgc2NyaXB0LgorK2RubAorK2RubCBVc2FnZToKKytkbmwgc21yX1NXSVRDSChuYW1lLCBkZXNjcmlwdGlvbiwgZGVmYXVsdCwgcG9zLWRlZiwgbmVnLWRlZikKKytkbmwKKytkbmwgd2hlcmU6CisrZG5sCisrZG5sIG5hbWUgICAgICAgIG5hbWUgb2Ygc3dpdGNoOyBnZW5lcmF0ZXMgLS1lbmFibGUtbmFtZSAmIC0tZGlzYWJsZS1uYW1lCisrZG5sICAgICAgICAgICAgIG9wdGlvbnMKKytkbmwgZGVzY3JpcHRpb24gaGVscCBzdHJpbmcgaXMgc2V0IHRvIHRoaXMgcHJlZml4ZWQgYnkgImVuYWJsZSIgb3IKKytkbmwgICAgICAgICAgICAgImRpc2FibGUiLCB3aGljaGV2ZXIgaXMgdGhlIG5vbi1kZWZhdWx0IHZhbHVlCisrZG5sIGRlZmF1bHQgICAgIGVpdGhlciAib24iIG9yICJvZmYiOyBzcGVjaWZpZXMgZGVmYXVsdCBpZiBuZWl0aGVyCisrZG5sICAgICAgICAgICAgIC0tZW5hYmxlLW5hbWUgbm9yIC0tZGlzYWJsZS1uYW1lIGlzIHNwZWNpZmllZAorK2RubCBwb3MtZGVmICAgICBhIHN5bWJvbCB0byBBQ19ERUZJTkUgaWYgc3dpdGNoIGlzIG9uIChvcHRpb25hbCkKKytkbmwgbmVnLWRlZiAgICAgYSBzeW1ib2wgdG8gQUNfREVGSU5FIGlmIHN3aXRjaCBpcyBvZmYgKG9wdGlvbmFsKQorK2RubAorK0FDX0RFRlVOKHNtcl9TV0lUQ0gsIFsKKysgICAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gZW5hYmxlICQyKQorKyAgICBBQ19BUkdfRU5BQkxFKAorKyAgICAgICAgJDEsCisrICAgICAgICBpZmVsc2UoJDMsIG9uLAorKyAgICAgICAgICAgIFsgIC0tZGlzYWJsZS1bJDFdICAgIGRpc2FibGUgWyQyXV0sCisrICAgICAgICAgICAgWyAgLS1lbmFibGUtWyQxXSAgICAgZW5hYmxlIFskMl1dKSwKKysgICAgICAgIFsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgICBpZmVsc2UoJDQsICwgLCBBQ19ERUZJTkUoJDQpKQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisrICAgICAgICAgICAgaWZlbHNlKCQ1LCAsICwgQUNfREVGSU5FKCQ1KSkKKysgICAgICAgIGZpIF0sCisrICAgICAgICBpZmVsc2UoJDMsIG9uLAorKyAgICAgICAgICAgWyBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgICAgaWZlbHNlKCQ0LCAsICwgQUNfREVGSU5FKCQ0KSkgXSwKKysgICAgICAgICAgIFsgQUNfTVNHX1JFU1VMVChubykKKysgICAgICAgICAgICBpZmVsc2UoJDUsICwgLCBBQ19ERUZJTkUoJDUpKV0pKV0pCisrCitJbmRleDogb3BlbmphZGUtMS4zLjIvY29uZmlnL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvY29uZmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTA2LTEyIDEyOjQ3OjIwLjczNTM2NTQ0NSArMDAwMAorKysrIG9wZW5qYWRlLTEuMy4yL2NvbmZpZy9jb25maWd1cmUuaW4JMjAxMi0wNi0xMiAxMjo0ODoxNy41MDczNjQwODAgKzAwMDAKK0BAIC0xMiw5ICsxMiwxMiBAQAorIGRubCAgQ3JlZGl0czogdGhpcyBhdXRvY29uZiBzY3JpcHQgd2FzIGxhcmdlbHkgImluc3BpcmVkIiA8Zz4gYnkgdGhlCisgZG5sICBhdXRvY29uZiBzY3JpcHQgYXJvdW5kIFNQIG1hZGUgYnkgSGVucnkgVGhvbXBzb24uCisgZG5sCistQUNfSU5JVChkc3NzbCkKKytBQ19JTklUKFtvcGVuamFkZV0sIFsxLjMuMl0pCisgQUNfQ09ORklHX0FVWF9ESVIoY29uZmlnKQorLUFNX0lOSVRfQVVUT01BS0UoIG9wZW5qYWRlLCAxLjMuMikKKytBQ19TVUJTVChbUEFDS0FHRV0sIFtvcGVuamFkZV0pCisrQUNfU1VCU1QoW1ZFUlNJT05dLCBbMS4zLjJdKQorK0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiKQorK0FDX0RFRklORV9VTlFVT1RFRChWRVJTSU9OLCAiJFZFUlNJT04iKQorIFRPUD1gcHdkYAorIEFDX1NVQlNUKFRPUCkKKyBkbmwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi91c2VyLWRlY2xhcmVkLWRlZmF1bHQtY29uc3RydWN0b3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2FmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK0luIEdDQyA0LjYgdGhlIGNvbXBpbGVyIG5vIGxvbmdlciBhbGxvd3Mgb2JqZWN0cyBvZiBjb25zdC1xdWFsaWZpZWQgdHlwZSB0bworYmUgZGVmYXVsdCBpbml0aWFsaXplZCB1bmxlc3MgdGhlIHR5cGUgaGFzIGEgdXNlci1kZWNsYXJlZCBkZWZhdWx0Citjb25zdHJ1Y3Rvci4KKworUGF0Y2ggZnJvbSBHZW50b28gYnVnemlsbGE6IGh0dHA6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTM1ODAyMQorCitHZW50b28gQnVnemlsbGEgZGVzY3JpcHRpb24gZm9sbG93czoKKyJJZiBhIGNsYXNzIG9yIHN0cnVjdCBoYXMgbm8gdXNlci1kZWZpbmVkIGRlZmF1bHQgY29uc3RydWN0b3IsIEMrKyBkb2Vzbid0CithbGxvdyB5b3UgdG8gZGVmYXVsdCBjb25zdHJ1Y3QgYSBjb25zdCBpbnN0YW5jZSBvZiBpdC4KKworaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvMzU4MDIxCitodHRwOi8vY2xhbmcubGx2bS5vcmcvY29tcGF0aWJpbGl0eS5odG1sI2RlZmF1bHRfaW5pdF9jb25zdAoraHR0cDovL2djYy5nbnUub3JnL1BSNDQ0OTkiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGEvamFkZS9UZVhGT1RCdWlsZGVyLmN4eAorKysrIGIvamFkZS9UZVhGT1RCdWlsZGVyLmN4eAorQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgorICAgICAgIHZhbHVlLmNvbnZlcnRTdHJpbmcobmljXy5wbGFjZW1lbnQpOworICAgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBQYWdlRmxvYXRGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBQYWdlRmxvYXRGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIFBhZ2VGbG9hdE5JQyBuaWNfOworICAgICBTdHJpbmdDIG5hbWVfOworQEAgLTEwMSw2ICsxMDMsOCBAQCBwdWJsaWM6CisgICAgICAgZm90Yi5lbmRQYWdlRm9vdG5vdGUoKTsKKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IFBhZ2VGb290bm90ZUZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIFBhZ2VGb290bm90ZUZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgIH07CisgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistLS0gYS9qYWRlL1RyYW5zZm9ybUZPVEJ1aWxkZXIuY3h4CisrKysgYi9qYWRlL1RyYW5zZm9ybUZPVEJ1aWxkZXIuY3h4CitAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CisgICB9OworICAgY2xhc3MgRW50aXR5UmVmRmxvd09iaiA6IHB1YmxpYyBUcmFuc2Zvcm1FeHRlbnNpb25GbG93T2JqIHsKKyAgIHB1YmxpYzoKKysgICAgRW50aXR5UmVmRmxvd09iaigpIHt9CisgICAgIHZvaWQgYXRvbWljKFRyYW5zZm9ybUZPVEJ1aWxkZXIgJmZvdGIsIGNvbnN0IE5vZGVQdHIgJikgY29uc3QgeworICAgICAgIGZvdGIuZW50aXR5UmVmKG5hbWVfKTsKKyAgICAgfQorQEAgLTU2LDYgKzU3LDcgQEAgcHVibGljOgorICAgfTsKKyAgIGNsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkZsb3dPYmogOiBwdWJsaWMgVHJhbnNmb3JtRXh0ZW5zaW9uRmxvd09iaiB7CisgICBwdWJsaWM6CisrICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkZsb3dPYmooKSB7fQorICAgICB2b2lkIGF0b21pYyhUcmFuc2Zvcm1GT1RCdWlsZGVyICZmb3RiLCBjb25zdCBOb2RlUHRyICYpIGNvbnN0IHsKKyAgICAgICBmb3RiLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihkYXRhXyk7CisgICAgIH0KK0BAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CisgICAgICAgfQorICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRW1wdHlFbGVtZW50Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgRW1wdHlFbGVtZW50Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBFbGVtZW50TklDIG5pY187CisgICB9OworQEAgLTEzMyw2ICsxMzcsOCBAQCBwdWJsaWM6CisgICAgICAgfQorICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRWxlbWVudEZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIEVsZW1lbnRGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIEVsZW1lbnROSUMgbmljXzsKKyAgIH07CitAQCAtMTUwLDYgKzE1Niw4IEBAIHB1YmxpYzoKKyAgICAgICB2YWx1ZS5jb252ZXJ0U3RyaW5nKHN5c3RlbUlkXyk7CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBFbnRpdHlGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBFbnRpdHlGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIFN0cmluZ0Mgc3lzdGVtSWRfOworICAgfTsKK0BAIC0xNzQsNiArMTgyLDggQEAgcHVibGljOgorICAgICAgIH0KKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IERvY3VtZW50VHlwZUZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIERvY3VtZW50VHlwZUZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgRG9jdW1lbnRUeXBlTklDIG5pY187CisgICB9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3YWE2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKQEAgLTAsMCArMSwxMDggQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCBEU1NTTCBzdHlsZXNoZWV0cyBmb3IgU0dNTCBhbmQgWE1MIGRvY3VtZW50cyIKK0RFU0NSSVBUSU9OID0gIk9wZW5KYWRlIGlzIGEgc3VpdGUgb2YgdG9vbHMgZm9yIHZhbGlkYXRpbmcsIFwKK3Byb2Nlc3NpbmcsIGFuZCBhcHBseWluZyBEU1NTTCAoRG9jdW1lbnQgU3R5bGUgU2VtYW50aWNzIGFuZCBcCitTcGVjaWZpY2F0aW9uIExhbmd1YWdlKSBzdHlsZXNoZWV0cyB0byBTR01MIGFuZCBYTUwgZG9jdW1lbnRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY0MWZmMWU0NTExZjBhODcwNDRhZDQyZjg3Y2IxMDQ1IgorCitQUiA9ICJyNSIKKworREVQRU5EUyA9ICJvcGVuc3AtbmF0aXZlIHNnbWwtY29tbW9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInNnbWwtY29tbW9uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb3BlbmphZGUvb3BlbmphZGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21zZ2dlbi5wbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWF1dG9jb25mLnBhdGNoIFwKKwkgICBmaWxlOi8vdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1yZWdleC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkZjY5MmUzMTg2MTA5Y2MwMGRiNjgyNWI3NzcyMDFlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFkMmQ3OTk2Y2M5NGY5Yjg3ZDBjNTFjZjBlMDI4MDcwYWMxNzdjNDEyM2VjYmZkN2FjMWNiOGQwYjdkMzIyZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBuYXRpdmUKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNwaW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfS9PcGVuU1AgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNwbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9IgorCisjIFdlIG5lZWQgdG8gc2V0IGRhdGFkaXIgZXhwbGljaXRseSwgYnV0IGFkZGluZyBpdCB0byBFWFRSQV9PRUNPTkYKKyMgcmVzdWx0cyBpbiBpdCBiZWluZyBzcGVjaWZpZWQgdHdpY2Ugd2hlbiBjb25maWd1cmUgaXMgcnVuLgorQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRhdGFkaXI9JHtkYXRhZGlyfScsICctLWRhdGFkaXI9JHtTVEFHSU5HX0RBVEFESVJ9L3NnbWwvb3BlbmphZGUtJHtQVn0nKX0iCisKKyMgQ09ORklHVVJFT1BUUyBoYXMgaGFyZCBjb2RlZCBwYXRocyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdCdzIHZhcmRlcHMKKyMgdGhlcmUgYXJlIG90aGVyIGJpdHMgaW4gdGhlcmUgdG9vIGJ1dCB0aGV5IGFyZSBwaWNrZWQgdXAgYnkgb3RoZXIgdmFyaWFibGUKKyMgZGVwZW5kZW5jaWVzIHNvIGl0IGFsbCB3b3JrcyBvdXQKK29lX3J1bmNvbmZbdmFyZGVwc2V4Y2x1ZGVdICs9ICJDT05GSUdVUkVPUFRTIgorCitDRkxBR1MgPSsgIi1JJHtTfS9pbmNsdWRlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJvcGVuamFkZV9zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gIm9wZW5qYWRlX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK0NMRUFORlVOQ1MgKz0gIm9wZW5qYWRlX3NzdGF0ZV9jbGVhbiIKKworIyBjb25maWd1cmUuaW4gbmVlZHMgdG8gYmUgcmVsb2FjdGVkIHRvIHRyaWdnZXIgcmVhdXRvY29uZgorZG9fZXh0cmF1bnBhY2sgKCkgeworCWNwICR7U30vY29uZmlnL2NvbmZpZ3VyZS5pbiAke1N9LworfQorYWRkdGFzayBleHRyYXVucGFjayBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKKyMgV2UgbmVlZCB0byBkbyB0aGlzIGVsc2UgdGhlIHNvdXJjZSBpbnRlcmRlcGVuZGVuY2llcyBhcmVuJ3QgZ2VuZXJhdGVkIGFuZAorIyBidWlsZCBmYWlsdXJlcyBjYW4gcmVzdWx0IChlLmcuIHplcm8gc2l6ZSBzdHlsZS9NYWtlZmlsZS5kZXAgZmlsZSkKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJb2VfcnVubWFrZSBkZXBlbmQKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvb3BlbmphZGUuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CQorCWluc3RhbGwgLW0gMDc1NSAke1N9L2phZGUvLmxpYnMvb3BlbmphZGUgJHtEfSR7YmluZGlyfS9vcGVuamFkZQorCWxuIC1zZiBvcGVuamFkZSAke0R9JHtiaW5kaXJ9L2phZGUKKworCW9lX2xpYmluc3RhbGwgLWEgLXNvIC1DIHN0eWxlIGxpYm9zdHlsZSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtYSAtc28gLUMgc3Bncm92ZSBsaWJvc3Bncm92ZSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtYSAtc28gLUMgZ3JvdmUgbGlib2dyb3ZlICR7RH0ke2xpYmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsL2NhdGFsb2cgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsLyouZHRkICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC8qLmRzbCAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvKi5zZ20gJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCisJaW5zdGFsbCAtZCAke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC9jYXRhbG9nICR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS9jYXRhbG9nCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS9jYXRhbG9nIiA+IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS5jYXQKK30KKworb3BlbmphZGVfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUgXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9LmNhdAorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0uY2F0CisJZmkKK30KKworb3BlbmphZGVfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZQorfQorCitvcGVuamFkZV9zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCisJZm9yIGYgaW4gJGZpbGVzOyBkbworCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL29wZW5qYWRlLSR7UFZ9LmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjIxOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3AtMS41LjIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MzU5OTI5MSZncm91cF9pZD0yMTE1JmF0aWQ9MTAyMTE1XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluIE9wZW5TUC0xLjUuMi9jb25maWd1cmUuaW4KKy0tLSBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluCTIwMDUtMTItMjMgMTY6MTU6MjEuMDAwMDAwMDAwICswMjAwCisrKysgT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbgkyMDEzLTAxLTAzIDA5OjA0OjUxLjkyMjY0NTY4OSArMDIwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBBTV9JTklUX0FVVE9NQUtFKE9wZW5TUCwgMS41LjIsIG5vLWRlZmluZSkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyBBQ19QUkVSRVEoMi41MykKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorIEFNX1NBTklUWV9DSEVDSworCisgZG5sIEF1dG9oZWFkZXIgZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3BfMS41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMTE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiQW4gU0dNTCBwYXJzZXIiCitERVNDUklQVElPTiA9ICJBbiBTR01MIHBhcnNlciB1c2VkIGJ5IHRoZSBPcGVuSmFkZSBzdWl0ZSBvZiB1dGlsaXRpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5qYWRlLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjQxZmYxZTQ1MTFmMGE4NzA0NGFkNDJmODdjYjEwNDUiCisKK1BSID0gInIxIgorCisjIEF0IC1PcyBpdCBlbmNvdW50ZXJzIGNhbGxzIHRvIHNvbWUgaW5saW5lIGZ1bmN0aW9ucyB3aGljaCBhcmUgdGhlbgorIyBub3QgZm91bmQgaW4gYW55IG90aGVyIG9iamVjdHMgd2l0aCBnY2MgNC41CitGVUxMX09QVElNSVpBVElPTiArPSAiLU8yIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9vcGVuamFkZS9PcGVuU1AtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NzBiMjIzYzVkMTJjZWU0MGM5MTM3YmU4NmI2YzM5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1N2Y0ODk4NDk4YTM2ODkxOGIwZDQ5YzgyNmFhNDM0YmI1YjcwM2QyYzNiMTY5YmViMzQ4MDE2YWIyNTYxN2NlIgorCitTID0gIiR7V09SS0RJUn0vT3BlblNQLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jLWJ1aWxkIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIlwKKwktLWRpc2FibGUtZG9jLWJ1aWxkIFwKKwktLWVuYWJsZS1kZWZhdWx0LWNhdGFsb2c9JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cgXAorCS0tZW5hYmxlLWRlZmF1bHQtc2VhcmNoLXBhdGg9JHtkYXRhZGlyfS9zZ21sIFwKKwkiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgU2V0IHVwIHN5bWxpbmtzIHRvIG9mdGVuLXVzZWQgYWx0ZXJuYXRlIG5hbWVzLiBTZWUKKwkjIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvb3BlbnNwLmh0bWwKKwljZCAke0R9JHtsaWJkaXJ9CisJbG4gLXNmIGxpYm9zcC5zbyBsaWJzcC5zbworCisJY2QgJHtEfSR7YmluZGlyfQorCWZvciB1dGlsIGluIG5zZ21scyBzZ21sbm9ybSBzcGFtIHNwY2F0IHNwZW50IHN4OyBkbworCQlsbiAtc2YgbyR1dGlsICR1dGlsCQorCWRvbmUKKwlsbiAtc2Ygb3N4IHNnbWwyeG1sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlmb3IgdXRpbCBpbiBuc2dtbHMgc2dtbG5vcm0gc3BhbSBzcGNhdCBzcGVudCBzeDsgZG8KKwkJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS8kdXRpbCBcCisJCSAgICAtRCAke3N5c2NvbmZkaXJ9L3NnbWwKKwlkb25lCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L09wZW5TUC8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGRiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorSWYgYSB0aGUgbnVtYmVyIG9mIGhhcmQgbGlua3MgZGVjcmVhc2VzIG9yIGluY3JlYXNlcyB3aGlsZSBjcmVhdGluZwordGhlIHRhciBmaWxlcyB1c2VkIGZvciBhbiBpcGsgcGFja2FnZSwgdGFyIGZhaWxzIHdpdGggZXJyb3IgY29kZSAxOgorCit8IERFQlVHOiBFeGVjdXRpbmcgcHl0aG9uIGZ1bmN0aW9uIGRvX3BhY2thZ2VfaXBrCit8IHRhcjogLi91c3Ivc3JjL2RlYnVnL2dwZXJmLzMuMC40LXIwL2dwZXJmLTMuMC40L3NyYy9tYWluLmNjOiBmaWxlIGNoYW5nZWQgYXMgd2UgcmVhZCBpdAorTk9URTogcmVjaXBlIGdwZXJmLTMuMC40LXIwOiB0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrOiBGYWlsZWQKK0VSUk9SOiBUYXNrIDY1MzkgKHJlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjQuYmIsIGRvX3BhY2thZ2Vfd3JpdGVfaXBrKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJzEnCisKKworV2UgZGV0ZWN0IGlmIHRoZSBlcnJvciBjb2RlIHByb2R1Y2VkIGJ5IHRhciBpcyAxIGFuZCBpbiB0aGlzIGNhc2UgaWdub3JlIGl0LgorCitUaGlzIGEgc2ltaWxhciBiZWhhdmlvciB0byB0aGUgb25lIG9uIGRwa2c6CitodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2NvbW1pdC8/aWQ9NDA3MzE5NDI1MTVlYzhkODBjNzI3YWQ1NjExNzQ5ODZkNGYwNTgxOAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGdpdC9vcGtnLWJ1aWxkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvb3BrZy1idWlsZAorKysrIGdpdC9vcGtnLWJ1aWxkCitAQCAtMjUwLDggKzI1MCwyMSBAQCB0bXBfZGlyPSRkZXN0X2Rpci9JUEtHX0JVSUxELiQkCisgbWtkaXIgJHRtcF9kaXIKKyAKKyBlY2hvICRDT05UUk9MID4gJHRtcF9kaXIvdGFyWAorLSggY2QgJHBrZ19kaXIgJiYgdGFyICRvZ2FyZ3MgLVggJHRtcF9kaXIvdGFyWCAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9kYXRhLnRhci5neiAuICkKKy0oIGNkICRwa2dfZGlyLyRDT05UUk9MICYmIHRhciAkb2dhcmdzIC1jeiAkdGFyZm9ybWF0IC1mICR0bXBfZGlyL2NvbnRyb2wudGFyLmd6IC4gKQorKworKworKyMgSWdub3JlIGVycm9yIGNvZGUgMSwgY2F1c2VkIGJ5IG1vZGlmeWluZyB0aGUgbnVtYmVyIG9mIGhhcmQgbGlua3Mgd2hpbGUgY3JlYXRpbmcgdGhlIHRhciBmaWxlCisrcmM9MAorKyggY2QgJHBrZ19kaXIgJiYgdGFyICRvZ2FyZ3MgLVggJHRtcF9kaXIvdGFyWCAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9kYXRhLnRhci5neiAuICkgfHwgcmM9JD8KKytpZiBbICRyYyAtbmUgMSBdICYmIFsgJHJjIC1uZSAwIF07IHRoZW4KKysgICAgICAgIGV4aXQgJHJjIAorK2ZpCisrCisrcmM9MAorKyggY2QgJHBrZ19kaXIvJENPTlRST0wgJiYgdGFyICRvZ2FyZ3MgLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvY29udHJvbC50YXIuZ3ogLiApIHx8IHJjPSQ/CisraWYgWyAkcmMgLW5lIDEgXSAmJiBbICRyYyAtbmUgMCBdOyB0aGVuCisrICAgICAgICBleGl0ICRyYworK2ZpCisrCisgcm0gJHRtcF9kaXIvdGFyWAorIAorIGVjaG8gIjIuMCIgPiAkdG1wX2Rpci9kZWJpYW4tYmluYXJ5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTE4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkFkZGl0aW9uYWwgdXRpbGl0aWVzIGZvciB0aGUgb3BrZyBwYWNrYWdlIG1hbmFnZXIiCitTVU1NQVJZX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJVdGlsaXR5IGZvciBtYW5hZ2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb3BrZy5weTtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT0xNTkxNzQ5MWFkNmJmN2FjYzY2NmNhNWY3Y2MxZTA4MyIKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1NSQ1JFViA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgorUFYgPSAiMC4xLjgrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vdGFyX2lnbm9yZV9lcnJvci5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK1BZVEhPTlJERVBTID0gInB5dGhvbiBweXRob24tc2hlbGwgcHl0aG9uLWlvIHB5dGhvbi1tYXRoIHB5dGhvbi1jcnlwdCBweXRob24tbG9nZ2luZyBweXRob24tZmNudGwgcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLXBpY2tsZSBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLXRleHR1dGlscyBweXRob24tc3RyaW5nb2xkIgorUFlUSE9OUkRFUFNfY2xhc3MtbmF0aXZlID0gIiIKKworUEFDS0FHRUNPTkZJRyA9ICJweXRob24iCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLCwsJHtQWVRIT05SREVQU30iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKwlzZWQgLWkgJHtEfSR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIC1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnOyBzLC91c3IvbGliLCR7bGliZGlyfSxnJworfQorCitQQUNLQUdFUyA9KyAidXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnIgorRklMRVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gIiR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIgorUlBST1ZJREVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorUlJFUExBQ0VTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKK1JDT05GTElDVFNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2ctYXJjaC1jb25maWdfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTNkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgY29uZmlndXJhdGlvbiBmb3Igb3BrZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorUFIgPSAicjEiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKKwlta2RpciAtcCAke1N9LyR7c3lzY29uZmRpcn0vb3BrZy8KKworCWFyY2hjb25mPSR7U30vJHtzeXNjb25mZGlyfS9vcGtnL2FyY2guY29uZgorCisJcm0gLWYgJGFyY2hjb25mCisJaXBrZ2FyY2hzPSIke0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTfSIKKwlwcmlvcml0eT0xCisJZm9yIGFyY2ggaW4gJGlwa2dhcmNoczsgZG8gCisJCWVjaG8gImFyY2ggJGFyY2ggJHByaW9yaXR5IiA+PiAkYXJjaGNvbmYKKwkJcHJpb3JpdHk9JChleHByICRwcmlvcml0eSArIDUpCisJZG9uZQorfQorCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vb3BrZworCWluc3RhbGwgLW0gMDY0NCAgJHtTfS8ke3N5c2NvbmZkaXJ9L29wa2cvKiAke0R9JHtzeXNjb25mZGlyfS9vcGtnLworfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvICIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L29wa2cvYXJjaC5jb25mIgorCitSUkVQTEFDRVNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKK1JDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKK1JQUk9WSURFU18ke1BOfSA9ICJvcGtnLWNvbmZpZy1iYXNlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWtleXJpbmdzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ2YWJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJLZXlyaW5ncyBmb3IgdmVyaWZ5aW5nIG9wa2cgcGFja2FnZXMgYW5kIGZlZWRzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworIyBEaXN0cm8tc3BlY2lmaWMga2V5cyBjYW4gYmUgYWRkZWQgdG8gdGhpcyBwYWNrYWdlIGluIHR3byB3YXlzOgorIworIyAgIDEpIEluIGEgLmJiYXBwZW5kLCBhZGQgLmdwZyBhbmQvb3IgLmFzYyBmaWxlcyB0byBTUkNfVVJJIGFuZCBpbnN0YWxsIHRoZW0gdG8KKyMgICAgICAke0R9JHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzLyBpbiBhIGRvX2luc3RhbGxfYXBwZW5kIGZ1bmN0aW9uLiBUaGVzZQorIyAgICAgIGZpbGVzIHNob3VsZCBub3QgYmUgbmFtZWQgJ2tleS0kbmFtZS5ncGcnIHRvIGVuc3VyZSB0aGV5IGRvbid0IGNvbmZsaWN0CisjICAgICAgd2l0aCBrZXlzIGV4cG9ydGVkIGFzIHBlciAoMikuCisjCisjICAgMikgSW4gYSAuYmJhcHBlbmQsIGRpc3RybyBjb25maWcgb3IgbG9jYWwuY29uZiwgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlCisjICAgICAgT1BLR19LRVlSSU5HX0tFWVMgdG8gY29udGFpbiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGtleSBuYW1lcy4gRm9yCisjICAgICAgZWFjaCBuYW1lLCAnZ3BnIC0tZXhwb3J0ICRuYW1lJyB3aWxsIGJlIHJhbiB0byBleHBvcnQgdGhlIHB1YmxpYyBrZXkgdG8gYQorIyAgICAgIGZpbGUgbmFtZWQgJ2tleS0kbmFtZS5ncGcnLiBUaGUgcHVibGljIGtleSBtdXN0IHRoZXJlZm9yZSBiZSBpbiB0aGUgZ3BnCisjICAgICAga2V5cmluZ3Mgb24gdGhlIGJ1aWxkIG1hY2hpbmUuCisKK09QS0dfS0VZUklOR19LRVlTID89ICIiCisKK2RvX2NvbXBpbGUoKSB7CisgICAgZm9yIG5hbWUgaW4gJHtPUEtHX0tFWVJJTkdfS0VZU307IGRvCisgICAgICAgIGdwZyAtLWV4cG9ydCAke25hbWV9ID4gJHtCfS9rZXktJHtuYW1lfS5ncGcKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vb3BrZy9rZXlyaW5ncy8KKyAgICBmb3IgbmFtZSBpbiAke09QS0dfS0VZUklOR19LRVlTfTsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7Qn0va2V5LSR7bmFtZX0uZ3BnICR7RH0ke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MvCisgICAgZG9uZQorfQorCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MiCisKKyMgV2UgbmVlZCAnb3BrZy1rZXknIHRvIHJ1biB0aGUgcG9zdGluc3Qgc2NyaXB0CitSREVQRU5EU18ke1BOfSA9ICJvcGtnIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworIyEgL2Jpbi9zaAorc2V0IC1lCisKK2lmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICMgT24gdGFyZ2V0CisgICAgb3BrZy1rZXkgcG9wdWxhdGUKK2Vsc2UKKyAgICBleGl0IDEKK2ZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtb3BrZ19hcmNoaXZlLWFkZC1zdXBwb3J0LWZvci1lbXB0eS1jb21wcmVzc2VkLWZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWJkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGJkMzJiYjg2NDY0NTk1MDhiYjBiMGNlNTRhMTRiZDZmZTBlMTliNzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPgorRGF0ZTogVGh1LCAyNyBBdWcgMjAxNSAxNTo1MjoxNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBvcGtnX2FyY2hpdmU6IGFkZCBzdXBwb3J0IGZvciBlbXB0eSBjb21wcmVzc2VkIGZpbGVzCisKK1JlZ3Jlc3Npb24gZnJvbSAwLjIueDogb3BrZyB1c2VkIHRvIHN1cHBvcnQgZW1wdHkgUGFja2FnZS5neiBmaWxlcy4KKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorLS0tCisgbGlib3BrZy9vcGtnX2FyY2hpdmUuYyB8IDE1ICsrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlib3BrZy9vcGtnX2FyY2hpdmUuYyBiL2xpYm9wa2cvb3BrZ19hcmNoaXZlLmMKK2luZGV4IGJlOTAzZTQuLjdlOTFlNDggMTAwNjQ0CistLS0gYS9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCisrKysgYi9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCitAQCAtMTIxLDYgKzEyMSw5IEBAIHN0YXRpYyBpbnQgY29weV90b19zdHJlYW0oc3RydWN0IGFyY2hpdmUgKmEsIEZJTEUgKiBzdHJlYW0pCisgICAgIGludCBlb2Y7CisgICAgIHNpemVfdCBsZW4gPSBFWFRSQUNUX0JVRkZFUl9MRU47CisgCisrICAgIGlmIChhcmNoaXZlX2Zvcm1hdChhKSA9PSBBUkNISVZFX0ZPUk1BVF9FTVBUWSkKKysgICAgICAgIHJldHVybiAwOworKworICAgICBidWZmZXIgPSB4bWFsbG9jKGxlbik7CisgCisgICAgIHdoaWxlICgxKSB7CitAQCAtNjU0LDYgKzY1NywxMyBAQCBzdGF0aWMgc3RydWN0IGFyY2hpdmUgKm9wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorICAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKyAgICAgfQorIAorKyAgICByID0gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2VtcHR5KGFyKTsKKysgICAgaWYgKHIgIT0gQVJDSElWRV9PSykgeworKyAgICAgICAgb3BrZ19tc2coRVJST1IsICJFbXB0eSBmb3JtYXQgbm90IHN1cHBvcnRlZDogJXNcbiIsCisrICAgICAgICAgICAgICAgICBhcmNoaXZlX2Vycm9yX3N0cmluZyhhcikpOworKyAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKysgICAgfQorKworICAgICAvKiBPcGVuIGlucHV0IGZpbGUgYW5kIHByZXBhcmUgZm9yIHJlYWRpbmcuICovCisgICAgIHIgPSBhcmNoaXZlX3JlYWRfb3Blbl9maWxlbmFtZShhciwgZmlsZW5hbWUsIEVYVFJBQ1RfQlVGRkVSX0xFTik7CisgICAgIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKK0BAIC03MjMsNiArNzMzLDcgQEAgc3RydWN0IG9wa2dfYXIgKmFyX29wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorIHsKKyAgICAgc3RydWN0IG9wa2dfYXIgKmFyOworICAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnk7CisrICAgIGludCBlb2Y7CisgCisgICAgIGFyID0gKHN0cnVjdCBvcGtnX2FyICopeG1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa2dfYXIpKTsKKyAKK0BAIC03MzcsOCArNzQ4LDggQEAgc3RydWN0IG9wa2dfYXIgKmFyX29wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorICAgICAgKiBoZWFkZXIuIFdlIHNraXAgb3ZlciB0aGlzIGhlYWRlciBoZXJlIHNvIHRoYXQgdGhlIGNhbGxlciBkb2Vzbid0IG5lZWQKKyAgICAgICogdG8ga25vdyBhYm91dCBpdC4KKyAgICAgICovCistICAgIGVudHJ5ID0gcmVhZF9oZWFkZXIoYXItPmFyLCBOVUxMKTsKKy0gICAgaWYgKCFlbnRyeSkKKysgICAgZW50cnkgPSByZWFkX2hlYWRlcihhci0+YXIsICZlb2YpOworKyAgICBpZiAoIWVudHJ5ICYmICFlb2YpCisgICAgICAgICBnb3RvIGVycl9jbGVhbnVwOworIAorICAgICByZXR1cm4gYXI7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTc0MDI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCkBAIC0wLDAgKzEsMTcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BrZyBmaXJzdCBib290IGNvbmZpZ3VyZQorRGVmYXVsdERlcGVuZGVuY2llcz1ubworQWZ0ZXI9c3lzdGVtZC1yZW1vdW50LWZzLnNlcnZpY2Ugc3lzdGVtZC10bXBmaWxlcy1zZXR1cC5zZXJ2aWNlIHRtcC5tb3VudAorQmVmb3JlPXN5c2luaXQudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L3Bvc3RpbnN0CitFeGVjU3RhcnQ9LUBCQVNFX0JJTkRJUkAvc2ggLWMgIiBpZiBbICRQT1NUSU5TVF9MT0dHSU5HID0gJzEnIF07IHRoZW4gQEJJTkRJUkAvb3BrZyBjb25maWd1cmUgPiAkTE9HRklMRSAyPiYxOyBlbHNlIEBCSU5ESVJAL29wa2cgY29uZmlndXJlOyBmaSIKK0V4ZWNTdGFydFBvc3Q9QEJBU0VfQklORElSQC9zeXN0ZW1jdGwgZGlzYWJsZSBvcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCitTdGFuZGFyZE91dHB1dD1zeXNsb2cKK1JlbWFpbkFmdGVyRXhpdD1ObworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWJhc2ljLnRhcmdldAorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlOWU5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mCkBAIC0wLDAgKzEsMjggQEAKKyMgTXVzdCBoYXZlIG9uZSBvciBtb3JlIHNvdXJjZSBlbnRyaWVzIG9mIHRoZSBmb3JtOgorIworIyAgIHNyYyA8c3JjLW5hbWU+IDxzb3VyY2UtdXJsPgorIworIyBhbmQgb25lIG9yIG1vcmUgZGVzdGluYXRpb24gZW50cmllcyBvZiB0aGUgZm9ybToKKyMKKyMgICBkZXN0IDxkZXN0LW5hbWU+IDx0YXJnZXQtcGF0aD4KKyMKKyMgd2hlcmUgPHNyYy1uYW1lPiBhbmQgPGRlc3QtbmFtZXM+IGFyZSBpZGVudGlmaWVycyB0aGF0CisjIHNob3VsZCBtYXRjaCBbYS16QS1aMC05Ll8tXSssIDxzb3VyY2UtdXJsPiBzaG91bGQgYmUgYQorIyBVUkwgdGhhdCBwb2ludHMgdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIEZhbWlsaWFyCisjIFBhY2thZ2VzIGZpbGUsIGFuZCA8dGFyZ2V0LXBhdGg+IHNob3VsZCBiZSBhIGRpcmVjdG9yeQorIyB0aGF0IGV4aXN0cyBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKworIyBQcm94eSBTdXBwb3J0Cisjb3B0aW9uIGh0dHBfcHJveHkgaHR0cDovL3Byb3h5LnRsZDozMTI4Cisjb3B0aW9uIGZ0cF9wcm94eSBodHRwOi8vcHJveHkudGxkOjMxMjgKKyNvcHRpb24gcHJveHlfdXNlcm5hbWUgPHVzZXJuYW1lPgorI29wdGlvbiBwcm94eV9wYXNzd29yZCA8cGFzc3dvcmQ+CisKKyMgRW5hYmxlIEdQR01FIHNpZ25hdHVyZQorIyBvcHRpb24gY2hlY2tfc2lnbmF0dXJlIDEKKworIyBPZmZsaW5lIG1vZGUgKGZvciB1c2UgaW4gY29uc3RydWN0aW5nIGZsYXNoIGltYWdlcyBvZmZsaW5lKQorI29wdGlvbiBvZmZsaW5lX3Jvb3QgdGFyZ2V0CisKKyMgRGVmYXVsdCBkZXN0aW5hdGlvbiBmb3IgaW5zdGFsbGVkIHBhY2thZ2VzCitkZXN0IHJvb3QgLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYmIyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIKQEAgLTAsMCArMSw3MiBAQAorU1VNTUFSWSA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciIKK1NVTU1BUllfbGlib3BrZyA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJ5IgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy9pc3N1ZXMvbGlzdCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29wa2cuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTIxO21kNT05MDQzNWE1MTljNmVhNjllZjIyZTRhODhiY2M1MmZhMCIKKworREVQRU5EUyA9ICJsaWJhcmNoaXZlIgorCitQRSA9ICIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDEyY2RjNzFkNzhiOThmYWNjODRiMTkzMzFlYzY0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZjczNWQxY2RiOGVmMzcxOGZiMGY5ZmJhNDRjYTBkOWE1YzkwZDNhN2YwMTRmMzdhNmQyZjk0NzRmNTQ5ODhmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAib3BrZy1jb25maWd1cmUuc2VydmljZSIKKwordGFyZ2V0X2xvY2Fsc3RhdGVkaXIgOj0gIiR7bG9jYWxzdGF0ZWRpcn0iCitPUEtHTElCRElSID0gIiR7dGFyZ2V0X2xvY2Fsc3RhdGVkaXJ9L2xpYiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKworUEFDS0FHRUNPTkZJR1tncGddID0gIi0tZW5hYmxlLWdwZywtLWRpc2FibGUtZ3BnLGdwZ21lIGxpYmdwZy1lcnJvcixnbnVwZyIKK1BBQ0tBR0VDT05GSUdbY3VybF0gPSAiLS1lbmFibGUtY3VybCwtLWRpc2FibGUtY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tzc2wtY3VybF0gPSAiLS1lbmFibGUtc3NsLWN1cmwsLS1kaXNhYmxlLXNzbC1jdXJsLGN1cmwgb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tzaGEyNTZdID0gIi0tZW5hYmxlLXNoYTI1NiwtLWRpc2FibGUtc2hhMjU2IgorUEFDS0FHRUNPTkZJR1twYXRoZmluZGVyXSA9ICItLWVuYWJsZS1wYXRoZmluZGVyLC0tZGlzYWJsZS1wYXRoZmluZGVyLHBhdGhmaW5kZXIiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKKwllY2hvICJvcHRpb24gbGlzdHNfZGlyICR7T1BLR0xJQkRJUn0vb3BrZy9saXN0cyIgPj4ke0R9JHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZgorCisJIyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkKKwlpbnN0YWxsIC1kICR7RH0ke09QS0dMSUJESVJ9L29wa2cKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07dGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wa2ctY29uZmlndXJlLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTVEVNRF9VTklURElSQCwke3N5c3RlbWRfdW5pdGRpcn0sZycgXAorCQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3BrZy1jb25maWd1cmUuc2VydmljZQorCWZpCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IG9wa2ctYXJjaC1jb25maWcgcnVuLXBvc3RpbnN0cyBsaWJhcmNoaXZlIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSUkVQTEFDRVNfJHtQTn0gPSAib3BrZy1ub2dwZyBvcGtnLWNvbGxhdGVyYWwiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKK1JQUk9WSURFU18ke1BOfSA9ICJvcGtnLWNvbGxhdGVyYWwiCisKK1BBQ0tBR0VTID0rICJsaWJvcGtnIgorCitGSUxFU19saWJvcGtnID0gIiR7bGliZGlyfS8qLnNvLiogJHtPUEtHTElCRElSfS9vcGtnLyIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI1N2MzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjIzLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiT3B0aW1pc2VkIElubmVyIExvb3AgUnVudGltZSBDb21waWxlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmVudHJvcHl3YXZlLmNvbS9wcm9qZWN0cy9vcmMvIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UgJiBCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xNDAwYmQ5ZDA5ZThhZjU2YjllYzk4MmIzZDg1Nzk3ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvb3JjL29yYy0ke1BWfS50YXIueHo7bmFtZT1vcmMiCitTUkNfVVJJW29yYy5tZDVzdW1dID0gIjcyZTA2MTJhY2U1NGQ3N2FhMmY3YTAwNjM0OGVlODFhIgorU1JDX1VSSVtvcmMuc2hhMjU2c3VtXSA9ICI3NjdlYWViY2UyOTQxNzM3YjQzMzY4MjI1ZWM1NDU5OGIzMDU1Y2E3OGI0ZGM1MGM0MDkyZjVmY2RjMGJkZmU3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyA9KyAib3JjLWV4YW1wbGVzIgorRklMRVNfb3JjLWV4YW1wbGVzID0gIiR7bGliZGlyfS9vcmMvKiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ09SQyAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgc2VkIC1pIC1lICdzIy90bXAjLiNnJyAke1N9L29yYy9vcmNjb2RlbWVtLmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY3YzUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMS1DaGFuZ2UtbGlicmFyeS1uYW1lLnBhdGNoCkBAIC0wLDAgKzEsMTE5IEBACitGcm9tOiBQaW90ciBSb3N6YXR5Y2tpIDxkZXh0ZXJAZGViaWFuLm9yZz4KK0RhdGU6IFdlZCwgMjcgSmFuIDIwMTAgMTY6NTM6MTEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hhbmdlIGxpYnJhcnkgbmFtZQorCitUaGUgc29uYW1lIHdhcyBjaGFuZ2VkIHRvIG9zc3AtdXVpZCB0byBwcmV2ZW5kIHRoZSBuYW1lIGNsYXNoIHdpdGggZTJmc3Byb2dzJ3MKK3V1aWQgbGlicmFyeS4KKy0tLQorIE1ha2VmaWxlLmluICAgICAgfCAgICA2ICsrKy0tLQorIHBlcmwvTWFrZWZpbGUuUEwgfCAgIDEyICsrKysrKy0tLS0tLQorIHBocC9jb25maWcubTQgICAgfCAgICAyICstCisgdXVpZC1jb25maWcuaW4gICB8ICAgIDIgKy0KKyB1dWlkLnBjLmluICAgICAgIHwgICAgNCArKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZDI4ZjRiZS4uYzJiYTk5ZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTYyLDEzICs2MiwxMyBAQCBQRVJMICAgICAgICA9IEBQRVJMQAorIFBIUCAgICAgICAgID0gQFBIUEAKKyBQR19DT05GSUcgICA9IEBQR19DT05GSUdACisgCistTElCX05BTUUgICAgPSBsaWJ1dWlkLmxhCisrTElCX05BTUUgICAgPSBsaWJvc3NwLXV1aWQubGEKKyBMSUJfT0JKUyAgICA9IHV1aWQubG8gdXVpZF9tZDUubG8gdXVpZF9zaGExLmxvIHV1aWRfcHJuZy5sbyB1dWlkX21hYy5sbyB1dWlkX3RpbWUubG8gdXVpZF91aTY0LmxvIHV1aWRfdWkxMjgubG8gdXVpZF9zdHIubG8KKyAKKy1EQ0VfTkFNRSAgICA9IGxpYnV1aWRfZGNlLmxhCisrRENFX05BTUUgICAgPSBsaWJvc3NwLXV1aWRfZGNlLmxhCisgRENFX09CSlMgICAgPSB1dWlkX2RjZS5sbyAkKExJQl9PQkpTKQorIAorLUNYWF9OQU1FICAgID0gbGlidXVpZCsrLmxhCisrQ1hYX05BTUUgICAgPSBsaWJvc3NwLXV1aWQrKy5sYQorIENYWF9PQkpTICAgID0gdXVpZCsrLmxvICQoTElCX09CSlMpCisgCisgUFJHX05BTUUgICAgPSB1dWlkCitkaWZmIC0tZ2l0IGEvcGVybC9NYWtlZmlsZS5QTCBiL3BlcmwvTWFrZWZpbGUuUEwKK2luZGV4IDkyZjQ0OTQuLjljNmZlZTYgMTAwNjQ0CistLS0gYS9wZXJsL01ha2VmaWxlLlBMCisrKysgYi9wZXJsL01ha2VmaWxlLlBMCitAQCAtMzMsOSArMzMsOSBAQCB1c2UgQ29uZmlnOworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworIAorICMgICBkZXRlcm1pbmUgc291cmNlIGRpcmVjdG9yeQorLW15ICgkc3JjZGlyKSA9IG1hcCB7IG15ICRkID0gJF87ICRkID1+IHMvXC9saWJ1dWlkXC5sYSQvLzsgJGQgfQorLSAgICAgICAgICAgICAgIGdyZXAgeyAtZiAkXyB9ICgiLi4vbGlidXVpZC5sYSIsIGdsb2IoIi4uLyovbGlidXVpZC5sYSIpKQorLSAgICBvciBkaWUgIm5vIHNvdXJjZSBkaXJlY3RvcnkgZm91bmQgKHdoZXJlIGxpYnV1aWQubGEgaXMgbG9jYXRlZCkiOworK215ICgkc3JjZGlyKSA9IG1hcCB7IG15ICRkID0gJF87ICRkID1+IHMvXC9saWJvc3NwLXV1aWRcLmxhJC8vOyAkZCB9CisrICAgICAgICAgICAgICAgZ3JlcCB7IC1mICRfIH0gKCIuLi9saWJvc3NwLXV1aWQubGEiLCBnbG9iKCIuLi8qL2xpYm9zc3AtdXVpZC5sYSIpKQorKyAgICBvciBkaWUgIm5vIHNvdXJjZSBkaXJlY3RvcnkgZm91bmQgKHdoZXJlIGxpYm9zc3AtdXVpZC5sYSBpcyBsb2NhdGVkKSI7CisgCisgIyAgIGRldGVybWluZSBleHRyYSBidWlsZCBvcHRpb25zCisgbXkgJGNvbXBhdCA9IDA7CitAQCAtNDcsMTUgKzQ3LDE1IEBAIFdyaXRlTWFrZWZpbGUoCisgICAgIFZFUlNJT05fRlJPTSAgICAgID0+ICd1dWlkLnBtJywKKyAgICAgQUJTVFJBQ1RfRlJPTSAgICAgPT4gJ3V1aWQucG9kJywKKyAgICAgUFJFUkVRX1BNICAgICAgICAgPT4ge30sCistICAgIExJQlMgICAgICAgICAgICAgID0+IFsgIi1MJHNyY2Rpci8ubGlicyAtTCRzcmNkaXIgLWx1dWlkIiBdLAorKyAgICBMSUJTICAgICAgICAgICAgICA9PiBbICItTCRzcmNkaXIvLmxpYnMgLUwkc3JjZGlyIC1sb3NzcC11dWlkIiBdLAorICAgICBERUZJTkUgICAgICAgICAgICA9PiAnJywKKyAgICAgSU5DICAgICAgICAgICAgICAgPT4gIi1JLiAtSSRzcmNkaXIiLAorICAgICBQTSAgICAgICAgICAgICAgICA9PiB7ICd1dWlkLnBtJyAgID0+ICckKElOU1RfTElCRElSKS91dWlkLnBtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXVpZC5wb2QnICA9PiAnJChJTlNUX0xJQkRJUikvdXVpZC5wb2QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wbScgID0+ICckKElOU1RfTElCRElSKS8uLi9EYXRhL1VVSUQucG0nKSAgOiAoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9MSUJESVIpLy4uL0RhdGEvVVVJRC5wb2QnKSA6ICgpKSwgfSwKKy0gICAgTUFOM1BPRFMgICAgICAgICAgPT4geyAndXVpZC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvT1NTUDo6dXVpZC4zJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJGNvbXBhdCA/ICgndXVpZF9jb21wYXQucG9kJyA9PiAnJChJTlNUX01BTjNESVIpL0RhdGE6OlVVSUQuMycpIDogKCkpLCB9LAorKyAgICBNQU4zUE9EUyAgICAgICAgICA9PiB7ICd1dWlkLnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9PU1NQOjp1dWlkLjNwbScsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9EYXRhOjpVVUlELjNwbScpIDogKCkpLCB9LAorICAgICBUWVBFTUFQUyAgICAgICAgICA9PiBbICd1dWlkLnRtJyBdLAorICAgICB0ZXN0ICAgICAgICAgICAgICA9PiB7IFRFU1RTID0+ICd1dWlkLnRzJyAuICgkY29tcGF0ID8gJyB1dWlkX2NvbXBhdC50cycgOiAnJykgfSwKKyAgICAgTk9fTUVUQSAgICAgICAgICAgPT4gMSwKK2RpZmYgLS1naXQgYS9waHAvY29uZmlnLm00IGIvcGhwL2NvbmZpZy5tNAoraW5kZXggNTA5MWI5Ni4uOTY5YjQ1NyAxMDA2NDQKKy0tLSBhL3BocC9jb25maWcubTQKKysrKyBiL3BocC9jb25maWcubTQKK0BAIC0zNCw3ICszNCw3IEBAIGlmIHRlc3QgIiRQSFBfVVVJRCIgIT0gIm5vIjsgdGhlbgorICAgICBQSFBfTkVXX0VYVEVOU0lPTih1dWlkLCB1dWlkLmMsICRleHRfc2hhcmVkKQorICAgICBBQ19ERUZJTkUoSEFWRV9VVUlELCAxLCBbSGF2ZSBPU1NQIHV1aWQgbGlicmFyeV0pCisgICAgIFBIUF9BRERfTElCUEFUSChbLi5dLCApCistICAgIFBIUF9BRERfTElCUkFSWShbdXVpZF0sLCBVVUlEX1NIQVJFRF9MSUJBREQpCisrICAgIFBIUF9BRERfTElCUkFSWShbb3NzcC11dWlkXSwsIFVVSURfU0hBUkVEX0xJQkFERCkKKyAgICAgUEhQX0FERF9JTkNMVURFKFsuLl0pCisgICAgIFBIUF9TVUJTVChVVUlEX1NIQVJFRF9MSUJBREQpCisgCitkaWZmIC0tZ2l0IGEvdXVpZC1jb25maWcuaW4gYi91dWlkLWNvbmZpZy5pbgoraW5kZXggOGQyYTA2My4uNWI1ODgxMiAxMDA2NDQKKy0tLSBhL3V1aWQtY29uZmlnLmluCisrKysgYi91dWlkLWNvbmZpZy5pbgorQEAgLTEyMSw3ICsxMjEsNyBAQCBkbworICAgICAgICAgICAgIG91dHB1dF9leHRyYT0iJG91dHB1dF9leHRyYSAkdXVpZF9sZGZsYWdzIgorICAgICAgICAgICAgIDs7CisgICAgICAgICAtLWxpYnMpCistICAgICAgICAgICAgb3V0cHV0PSIkb3V0cHV0IC1sdXVpZCIKKysgICAgICAgICAgICBvdXRwdXQ9IiRvdXRwdXQgLWxvc3NwLXV1aWQiCisgICAgICAgICAgICAgb3V0cHV0X2V4dHJhPSIkb3V0cHV0X2V4dHJhICR1dWlkX2xpYnMiCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICogKQorZGlmZiAtLWdpdCBhL3V1aWQucGMuaW4gYi91dWlkLnBjLmluCitpbmRleCBjNzZhZDFlLi5kZTAwYzJmIDEwMDY0NAorLS0tIGEvdXVpZC5wYy5pbgorKysrIGIvdXVpZC5wYy5pbgorQEAgLTM2LDcgKzM2LDcgQEAgTmFtZTogT1NTUCB1dWlkCisgRGVzY3JpcHRpb246IFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSBMaWJyYXJ5CisgVmVyc2lvbjogQFVVSURfVkVSU0lPTl9SQVdACisgVVJMOiBodHRwOi8vd3d3Lm9zc3Aub3JnL3BrZy9saWIvdXVpZC8KKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLUxpYnM6IC1MJHtsaWJkaXJ9IC1sdXVpZAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L29zc3AKKytMaWJzOiAtTCR7bGliZGlyfSAtbG9zc3AtdXVpZAorIExpYnMucHJpdmF0ZTogQExJQlNACisgCistLSAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDItdXVpZC1wcmVzZXJ2ZS1tLW9wdGlvbi1zdGF0dXMtaW4tdi1vcHRpb24taGFuZGxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGE2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb206IE1hcmNvIE5lbmNpYXJpbmkgPG1hcmNvLm5lbmNpYXJpbmlAZGV2aXNlLml0PgorRGF0ZTogV2VkLCAyNyBKYW4gMjAxMCAxOTo0NjoyMSArMDEwMAorU3ViamVjdDogW1BBVENIXSB1dWlkOiBwcmVzZXJ2ZSAtbSBvcHRpb24gc3RhdHVzIGluIC12IG9wdGlvbiBoYW5kbGluZworCitCdWc6IDUzMTM5NgorLS0tCisgdXVpZF9jbGkuYyB8ICAgMTkgKysrKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvdXVpZF9jbGkuYyBiL3V1aWRfY2xpLmMKK2luZGV4IGQxYjBiMTEuLjE0YTY3ZmUgMTAwNjQ0CistLS0gYS91dWlkX2NsaS5jCisrKysgYi91dWlkX2NsaS5jCitAQCAtMTQwLDExICsxNDAsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICAgICAgICAgICAgaSA9IHN0cnRvbChvcHRhcmcsICZwLCAxMCk7CisgICAgICAgICAgICAgICAgIGlmICgqcCAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoImludmFsaWQgYXJndW1lbnQgdG8gb3B0aW9uICd2JyIpOworKyAgICAgICAgICAgICAgICB2ZXJzaW9uICY9IH4oVVVJRF9NQUtFX1YxfFVVSURfTUFLRV9WM3xVVUlEX01BS0VfVjR8VVVJRF9NQUtFX1Y1KTsKKyAgICAgICAgICAgICAgICAgc3dpdGNoIChpKSB7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnNpb24gPSBVVUlEX01BS0VfVjE7IGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJzaW9uID0gVVVJRF9NQUtFX1YzOyBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogdmVyc2lvbiA9IFVVSURfTUFLRV9WNDsgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHZlcnNpb24gPSBVVUlEX01BS0VfVjU7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WMTsgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnNpb24gfD0gVVVJRF9NQUtFX1YzOyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjQ7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WNTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlKCJpbnZhbGlkIHZlcnNpb24gb24gb3B0aW9uICd2JyIpOworICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworQEAgLTIxMywxMCArMjE0LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgIH0KKyAgICAgZWxzZSB7CisgICAgICAgICAvKiBlbmNvZGluZyAqLworLSAgICAgICAgaWYgKCAgICh2ZXJzaW9uID09IFVVSURfTUFLRV9WMSAmJiBhcmdjICE9IDApCistICAgICAgICAgICAgfHwgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1YzICYmIGFyZ2MgIT0gMikKKy0gICAgICAgICAgICB8fCAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjQgJiYgYXJnYyAhPSAwKQorLSAgICAgICAgICAgIHx8ICh2ZXJzaW9uID09IFVVSURfTUFLRV9WNSAmJiBhcmdjICE9IDIpKQorKyAgICAgICAgaWYgKCAgICh2ZXJzaW9uICYgVVVJRF9NQUtFX1YxICYmIGFyZ2MgIT0gMCkKKysgICAgICAgICAgICB8fCAodmVyc2lvbiAmIFVVSURfTUFLRV9WMyAmJiBhcmdjICE9IDIpCisrICAgICAgICAgICAgfHwgKHZlcnNpb24gJiBVVUlEX01BS0VfVjQgJiYgYXJnYyAhPSAwKQorKyAgICAgICAgICAgIHx8ICh2ZXJzaW9uICYgVVVJRF9NQUtFX1Y1ICYmIGFyZ2MgIT0gMikpCisgICAgICAgICAgICAgdXNhZ2UoImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgICAgICAgaWYgKChyYyA9IHV1aWRfY3JlYXRlKCZ1dWlkKSkgIT0gVVVJRF9SQ19PSykKKyAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9jcmVhdGU6ICVzIiwgdXVpZF9lcnJvcihyYykpOworQEAgLTIzMiw3ICsyMzMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9sb2FkKHV1aWQsICJuaWwiKSkgIT0gVVVJRF9SQ19PSykKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yKDEsICJ1dWlkX2xvYWQ6ICVzIiwgdXVpZF9lcnJvcihyYykpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjMgfHwgdmVyc2lvbiA9PSBVVUlEX01BS0VfVjUpIHsKKysgICAgICAgICAgICBpZiAodmVyc2lvbiAmIFVVSURfTUFLRV9WMyB8fCB2ZXJzaW9uICYgVVVJRF9NQUtFX1Y1KSB7CisgICAgICAgICAgICAgICAgIGlmICgocmMgPSB1dWlkX2NyZWF0ZSgmdXVpZF9ucykpICE9IFVVSURfUkNfT0spCisgICAgICAgICAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9jcmVhdGU6ICVzIiwgdXVpZF9lcnJvcihyYykpOworICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9sb2FkKHV1aWRfbnMsIGFyZ3ZbMF0pKSAhPSBVVUlEX1JDX09LKSB7CistLSAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjYmI1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb206IE1hcmNvIE5lbmNpYXJpbmkgPG1hcmNvLm5lbmNpYXJpbmlAZGV2aXNlLml0PgorRGF0ZTogVHVlLCAyIEZlYiAyMDEwIDEyOjE2OjQ5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB3aGF0aXMgZW50cmllcworCitGaXggd2hhdGlzIGVudHJ5IG9mIHV1aWQuMSwgdXVpZC4zb3NzcCBhbmQgdXVpZCsrLjNvc3NwIG1hbnBhZ2VzCistLS0KKyB1dWlkKysucG9kICAgfCAgICAyICstCisgdXVpZC5wb2QgICAgIHwgICAgMiArLQorIHV1aWRfY2xpLnBvZCB8ICAgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvdXVpZCsrLnBvZCBiL3V1aWQrKy5wb2QKK2luZGV4IDhiNWE0YjEuLjg5YzVlZmIgMTAwNjQ0CistLS0gYS91dWlkKysucG9kCisrKysgYi91dWlkKysucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4gKEMrKyBBUEkpCisrQjx1dWlkKys+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4gKEMrKyBBUEkpCisgCisgPWhlYWQxIFZFUlNJT04KKyAKK2RpZmYgLS1naXQgYS91dWlkLnBvZCBiL3V1aWQucG9kCitpbmRleCA0YWQzNzQyLi4wMTc5YTQ2IDEwMDY0NAorLS0tIGEvdXVpZC5wb2QKKysrKyBiL3V1aWQucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4KKytCPHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4KKyAKKyA9aGVhZDEgVkVSU0lPTgorIAorZGlmZiAtLWdpdCBhL3V1aWRfY2xpLnBvZCBiL3V1aWRfY2xpLnBvZAoraW5kZXggZGRlYzZiYi4uZGY5ZGM4MyAxMDA2NDQKKy0tLSBhL3V1aWRfY2xpLnBvZAorKysrIGIvdXVpZF9jbGkucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciBDb21tYW5kLUxpbmUgVG9vbD4KKytCPHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciBDb21tYW5kLUxpbmUgVG9vbD4KKyAKKyA9aGVhZDEgVkVSU0lPTgorIAorLS0gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1ZTExMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDQtZml4LWRhdGEtdXVpZC1mcm9tLXN0cmluZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitEZXNjcmlwdGlvbjogU3VwcG9ydCBkYXNoLWxlc3MgYXJncyB0byBmcm9tX3N0cmluZy4KK0F1dGhvcjogVGltIFJldG91dCA8ZGlvY2xlc0BkZWJpYW4ub3JnPgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82MzU2MDcKKworVGhlIG1vZHVsZSBEYXRhOjpHVUlEIGRlcGVuZHMgb24gRGF0YTo6VVVJRCBzdXBwb3J0aW5nIHRoaXMgYmVoYXZpb3VyLgorCistLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSBkZWJpYW4gb3NzcC11dWlkIDEuNi4yIGludGVncmF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL3BlcmwvdXVpZF9jb21wYXQucG0KKysrKyBiL3BlcmwvdXVpZF9jb21wYXQucG0KK0BAIC05Myw3ICs5Myw5IEBACisgICAgICR1dWlkLT5pbXBvcnQoJ3N0cicsCisgICAgICAgICAgICRzdHIgPX4gL14weC8KKyAgICAgICAgID8gam9pbiAnLScsIHVucGFjaygneDIgYTggYTQgYTQgYTQgYTEyJywgJHN0cikKKy0gICAgICAgIDogJHN0cgorKyAgICAgICAgOiAkc3RyID1+IC8tLworKyAgICAgICAgPyAkc3RyCisrICAgICAgICA6IGpvaW4gJy0nLCB1bnBhY2soJ0E4IEE0IEE0IEE0IEExMicsICRzdHIpCisgICAgICk7CisgICAgIHJldHVybiAkdXVpZC0+ZXhwb3J0KCdiaW4nKTsKKyB9CistLS0gYS9wZXJsL3V1aWRfY29tcGF0LnRzCisrKysgYi9wZXJsL3V1aWRfY29tcGF0LnRzCitAQCAtMjgsNyArMjgsNyBAQAorICMjICB1dWlkX2NvbXBhdC50czogRGF0YTo6VVVJRCBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IFBlcmwgQVBJIChQZXJsIHRlc3Qgc3VpdGUgcGFydCkKKyAjIworIAorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE0OworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE2OworIAorIEJFR0lOIHsKKyAgICAgdXNlX29rKCdEYXRhOjpVVUlEJyk7CitAQCAtNTMsMyArNTMsNSBAQAorIG9rKCR1dWlkOCA9ICR1Zy0+ZnJvbV9zdHJpbmcoIjZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCIpKTsKKyBvaygkdWctPmNvbXBhcmUoJHV1aWQ3LCAkdXVpZDgpID09IDApOworIAorK29rKCR1dWlkOSA9ICR1Zy0+ZnJvbV9zdHJpbmcoIjZiYTdiODExOWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4IikpOworK29rKCR1Zy0+Y29tcGFyZSgkdXVpZDcsICR1dWlkOSkgPT0gMCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIyMmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaApAQCAtMCwwICsxLDE5IEBACit1dWlkLnBjIGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIHNvIHNob3VsZCBiZSBpbnN0YWxsZWQgZnJvbSB0aGUgY3VycmVudAorZGlyZWN0b3J5LCBhbmQgbm90ICRTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3Nob3VsZCBiZSBzdWJtaXR0ZWRdCitTaWduZWQtT2ZmLUJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitJbmRleDogdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTExLTEzIDE2OjU4OjI4LjYyNDE1NjAwMCArMDAwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0xMS0xMyAxNzowNToyNC4yMjQxNTg2NzAgKzAwMDAKK0BAIC0yMzIsNyArMjMyLDcgQEAKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNzU1IHV1aWQtY29uZmlnICQoREVTVERJUikkKGJpbmRpcikvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWQtY29uZmlnLjEgJChERVNURElSKSQobWFuZGlyKS9tYW4xLworLQkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnLworKwkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgdXVpZC5wYyAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy8KKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0IHV1aWQuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS8KKyAJLUBpZiBbICIuJChXSVRIX0RDRSkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgIGVjaG8gIiQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWRfZGNlLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvIjsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmYzEzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KK0BAIC0xMTMsMTUgKzExMywxNSBAQCBhbGw6ICQoVEFSR0VUUykKKwlAJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChDUFBGTEFHUykgJChDWFhGTEFHUykgLWMgJDwKKworICQoTElCX05BTUUpOiAkKExJQl9PQkpTKQorLQlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyAkKExJQl9OQU1FKSAkKExJQl9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKysJQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyAkKExJQl9OQU1FKSAkKExJQl9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKwkgICAgLXZlcnNpb24taW5mbyBgJChTSFRPT0wpIHZlcnNpb24gLWwgYyAtZCBsaWJ0b29sICQoUykvdXVpZF92ZXJzLmhgCisKKyAkKERDRV9OQU1FKTogJChEQ0VfT0JKUykKKy0JQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gJChEQ0VfTkFNRSkgJChEQ0VfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisrCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJChEQ0VfTkFNRSkgJChEQ0VfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChDWFhfTkFNRSk6ICQoQ1hYX09CSlMpCistCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ1hYKSAtbyAkKENYWF9OQU1FKSAkKENYWF9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKysJQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDWFgpICQoTERGTEFHUykgLW8gJChDWFhfTkFNRSkgJChDWFhfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChQUkdfTkFNRSk6ICQoUFJHX09CSlMpICQoTElCX05BTUUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjOTFiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitSZW1vdmUgaGFyZGNvZGVkIGxpYnRvb2wgbmFtZSwgZmFsbCBiYWNrIHRvIGdlbmVyYXRlZCBuYW1lCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCitUaGUgcHJvamVjdCBhcHBlYXJzIHRvIG5vIGxvbmdlciBiZSBhY2NlcHRpbmcgY2hhbmdlcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4gdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE0OjM3OjE5LjU3OTY3MjkzMCAtMDUwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNDozNzo0OS4xMTI3MzM3ODcgLTA1MDAKK0BAIC0zMiw2ICszMiw3IEBACisgVlBBVEggICAgICAgPSBAc3JjZGlyQAorIHNyY2RpciAgICAgID0gQHNyY2RpckAKKyB0b3Bfc3JjZGlyICA9IEB0b3Bfc3JjZGlyQAorK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgUyAgICAgICAgICAgPSAkKHNyY2RpcikKKyBDICAgICAgICAgICA9IC4KKyAKK0BAIC01NSw3ICs1Niw3IEBACisgQ1AgICAgICAgICAgPSBjcAorIFJNRElSICAgICAgID0gcm1kaXIKKyBTSFRPT0wgICAgICA9ICQoUykvc2h0b29sCistTElCVE9PTCAgICAgPSAkKEMpL2xpYnRvb2wKKytMSUJUT09MICAgICA9IEBMSUJUT09MQAorIFRSVUUgICAgICAgID0gdHJ1ZQorIFBPRDJNQU4gICAgID0gcG9kMm1hbgorIFBFUkwgICAgICAgID0gQFBFUkxACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNmI1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbm9zdHJpcC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXZSBkb24ndCB3YW50IGFueXRoaW5nIHN0cmlwcGVkCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCitUaGUgcHJvamVjdCBhcHBlYXJzIHRvIG5vIGxvbmdlciBiZSBhY2NlcHRpbmcgY2hhbmdlcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4gdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE0OjQyOjQyLjIyNTc4OTQ1NiAtMDUwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNTowMzowMy4xMTk3MzM0MDAgLTA1MDAKK0BAIC0yNTQsNyArMjU0LDcgQEAKKyAJLUBpZiBbICIuJChXSVRIX0NYWCkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoQ1hYX05BTUUpICQoREVTVERJUikkKGxpYmRpcikvOyBcCisgCWZpCistCUAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1zIC1tIDc1NSB1dWlkICQoREVTVERJUikkKGJpbmRpcikvCisrCUAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDc1NSB1dWlkICQoREVTVERJUikkKGJpbmRpcikvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWQuMSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvCisgCS1AaWYgWyAiLiQoV0lUSF9QRVJMKSIgPSAueWVzIF07IHRoZW4gXAorIAkgICAgKGNkICQoUykvcGVybCAmJiAkKE1BS0UpICQoTUZMQUdTKSBpbnN0YWxsIERFU1RESVI9JChERVNURElSKSk7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5MjZiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJPU1NQIHV1aWQgaXMgYSBJU08tQzoxOTk5IGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBcCisoQVBJKSBhbmQgY29ycmVzcG9uZGluZyBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIChDTEkpIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiBcCitEQ0UgMS4xLCBJU08vSUVDIDExNTc4OjE5OTYgYW5kIFJGQyA0MTIyIGNvbXBsaWFudCBVbml2ZXJzYWxseSBVbmlxdWUgXAorSWRlbnRpZmllciAoVVVJRCkuIEl0IHN1cHBvcnRzIERDRSAxLjEgdmFyaWFudCBVVUlEcyBvZiB2ZXJzaW9uIDEgKHRpbWUgXAorYW5kIG5vZGUgYmFzZWQpLCB2ZXJzaW9uIDMgKG5hbWUgYmFzZWQsIE1ENSksIHZlcnNpb24gNCAocmFuZG9tIG51bWJlciBcCitiYXNlZCkgYW5kIHZlcnNpb24gNSAobmFtZSBiYXNlZCwgU0hBLTEpLiIKK0RFU0NSSVBUSU9OX3V1aWQgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgdG9vbCB0byBjcmVhdGUgVW5pdmVyc2FsbHkgXAorVW5pcXVlIElkZW50aWZpZXJzIChVVUlEKSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9zc3Aub3JnL3BrZy9saWIvdXVpZC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0zMDtlbmRsaW5lPTU1O21kNT1iMzk0ZmFkYjAzOWJiZmNhNmFkOWQ5ZDc2OWVlOTYwZSBcCisJICAgZmlsZTovL3V1aWRfbWQ1LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yODttZDU9OWMxZjRiMjIxODU0NmRlYWUyNGM5MWJlMWRjZjAwZGQiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9vLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorCSAgIGZpbGU6Ly8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2ggXAorCSAgIGZpbGU6Ly91dWlkLWxpYnRvb2wucGF0Y2ggXAorCSAgIGZpbGU6Ly91dWlkLW5vc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5zdGFsbC1wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKKwkgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZGIwZDQzYTkwMjJhNmViYmJjMjUzMzdhZTI4OTQyZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMWE2MTUyMjViYWE1ZjhiYjY4NjgyNDQyM2Y1MGU0NDI3YWNkM2Y3MGQzOTQ3NjViZGZmMzI4MDFmMGZkNWIwIgorCitTID0gIiR7V09SS0RJUn0vdXVpZC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWRjZSAtLXdpdGhvdXQtY3h4IC0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLWNvbXBhdCAtLXdpdGhvdXQtcGhwIC0td2l0aG91dC1wZ3NxbCIKK0VYVFJBX09FQ09ORiA9ICItLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9vc3NwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgIyBUaGlzIHBhY2thZ2UgaGFzIGEgY29tcGxldGVseSBjdXN0b20gYWNsb2NhbC5tNCwgd2hpY2ggc2hvdWxkIGJlIGFjaW5jbHVkZS5tNC4KKyAgaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKyAgICBtdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKyAgZmkKKworICBybSAtZiAke1N9L2xpYnRvb2wubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgIG1rZGlyIC1wICAke0R9JHtpbmNsdWRlZGlyfS9vc3NwCisgIG12ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL3V1aWQucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvb3NzcC11dWlkLnBjCit9CisKK1BBQ0tBR0VTID0rICJ1dWlkIgorRklMRVNfdXVpZCA9ICIke2JpbmRpcn0vdXVpZCIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJvc3NwLXV1aWQuc28uMTYqIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vdXVpZC1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInV1aWQuMyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZXyR7UE59LWRvYyA9ICIyMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXVpZC4zXSA9ICIke21hbmRpcn0vbWFuMy91dWlkLjMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzMTg2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIHRvb2xzIGZvciBkZXZlbG9wbWVudCBvbiB0aGUgZGV2aWNlIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSUFJPVklERVNfJHtQTn0gPSAicWVtdS1jb25maWciCitSUkVQTEFDRVNfJHtQTn0gPSAicWVtdS1jb25maWciCitSQ09ORkxJQ1RTXyR7UE59ID0gInFlbXUtY29uZmlnIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZGlzdGNjLWNvbmZpZyBcCisgICAgb3Byb2ZpbGV1aS1zZXJ2ZXIgXAorICAgIG5mcy1leHBvcnQtcm9vdCBcCisgICAgYmFzaCBcCisgICAgIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2guaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmZiOGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYwpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIlRvb2wgZm9yIGFwcGx5aW5nIGEgcGF0Y2ggZmlsZSIKK0RFU0NSSVBUSU9OID0gInBhdGNoIHRha2VzIGEgcGF0Y2ggZmlsZSBjb250YWluaW5nIGEgZGlmZmVyZW5jZSBsaXN0aW5nIFwKK3Byb2R1Y2VkIGJ5IHRoZSBkaWZmIHByb2dyYW0gYW5kIGFwcGxpZXMgdGhvc2UgZGlmZmVyZW5jZXMgdG8gb25lIG9yIG1vcmUgXAorb3JpZ2luYWwgZmlsZXMsIHByb2R1Y2luZyBwYXRjaGVkIHZlcnNpb25zLiIKK1NFQ1RJT04gPSAidXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9wYXRjaC8iCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9wYXRjaC9wYXRjaC0ke1BWfS50YXIuZ3oiCitTID0gIiR7V09SS0RJUn0vcGF0Y2gtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAicGF0Y2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZGViaWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA3NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaApAQCAtMCwwICsxLDEwNDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworLS0tIHBhdGNoLTIuNS45Lm9yaWcvbTQvaGFzaC5tNAorKysrIHBhdGNoLTIuNS45L200L2hhc2gubTQKK0BAIC0wLDAgKzEsMTUgQEAKKysjIGhhc2gubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0hBU0hdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9oYXNoLmMuCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RkbGliLmgpCisrICBBQ19IRUFERVJfU1REQk9PTAorKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShmcmVlIG1hbGxvYykKKytdKQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvbTQvbmFub3NlY29uZF9zdGF0Lm00CisrKysgcGF0Y2gtMi41LjkvbTQvbmFub3NlY29uZF9zdGF0Lm00CitAQCAtMCwwICsxLDM1IEBACisrQUNfREVGVU4oW2FnX0NIRUNLX05BTk9TRUNPTkRfU1RBVF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfbnNlY10sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7IF0sCisrCVthY19jdl9zdGF0X25zZWM9eWVzXSwKKysJW2FjX2N2X3N0YXRfbnNlYz1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9OU0VDLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgaGFzIG5hbm9zZWNvbmQgdGltZXN0YW1wcy5dKQorKyAgIGZpCisrCisrICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfdGltZXZhbF0sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8dGltZS5oPgorKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW0udHZfbnNlYyArIHN0LnN0X210aW0udHZfbnNlYyArIHN0LnN0X2N0aW0udHZfbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD15ZXNdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX1RJTUVWQUwsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBjb210YWlucyBzdHJ1Y3QgdGltZXZhbCdzLl0pCisrICAgZmldKQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBwYXRjaC0yLjUuOS9NYWtlZmlsZS5pbgorQEAgLTYyLDcgKzYyLDcgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyAKKyBMSUJTUkNTID0gZXJyb3IuYyBtYWxsb2MuYyBtZW1jaHIuYyBta2Rpci5jIFwKKy0JcmVhbGxvYy5jIHJtZGlyLmMgc3RyY2FzZWNtcC5jIHN0cm5jYXNlY21wLmMKKysJcmVhbGxvYy5jIHJtZGlyLmMgc3RyY2FzZWNtcC5jIHN0cm5jYXNlY21wLmMgaGFzaC5jCisgU1JDUyA9ICQoTElCU1JDUykgXAorIAlhZGRleHQuYyBhcmdtYXRjaC5jIGJhY2t1cGZpbGUuYyBcCisgCWJhc2VuYW1lLmMgZGlybmFtZS5jIFwKK0BAIC03OCwxMiArNzgsMTIgQEAKKyAJbWFrZXRpbWUuJChPQkpFWFQpIHBhcnRpbWUuJChPQkpFWFQpIFwKKyAJcGF0Y2guJChPQkpFWFQpIHBjaC4kKE9CSkVYVCkgXAorIAlxdW90ZS4kKE9CSkVYVCkgcXVvdGVhcmcuJChPQkpFWFQpIHF1b3Rlc3lzLiQoT0JKRVhUKSBcCistCXV0aWwuJChPQkpFWFQpIHZlcnNpb24uJChPQkpFWFQpIHhtYWxsb2MuJChPQkpFWFQpCisrCXV0aWwuJChPQkpFWFQpIHZlcnNpb24uJChPQkpFWFQpIHhtYWxsb2MuJChPQkpFWFQpIGhhc2guJChPQkpFWFQpCisgSERSUyA9IGFyZ21hdGNoLmggYmFja3VwZmlsZS5oIGNvbW1vbi5oIGRpcm5hbWUuaCBcCisgCWVycm9yLmggZ2V0b3B0LmggZ2V0dGV4dC5oIFwKKyAJaW5wLmggbWFrZXRpbWUuaCBwYXJ0aW1lLmggcGNoLmggXAorIAlxdW90ZS5oIHF1b3RlYXJnLmggcXVvdGVzeXMuaCBcCistCXVubG9ja2VkLWlvLmggdXRpbC5oIHZlcnNpb24uaCB4YWxsb2MuaAorKwl1bmxvY2tlZC1pby5oIHV0aWwuaCB2ZXJzaW9uLmggeGFsbG9jLmggaGFzaC5oCisgTUlTQyA9IEFVVEhPUlMgQ09QWUlORyBDaGFuZ2VMb2cgSU5TVEFMTCBNYWtlZmlsZS5pbiBORVdTIFJFQURNRSBcCisgCWFjbG9jYWwubTQgXAorIAljb25maWcuaGluIGNvbmZpZ3VyZSBjb25maWd1cmUuYWMgXAorLS0tIHBhdGNoLTIuNS45Lm9yaWcvYWNsb2NhbC5tNAorKysrIHBhdGNoLTIuNS45L2FjbG9jYWwubTQKK0BAIC0xLDMgKzEsMTA1OCBAQAorK2RubCBhY2xvY2FsLm00IGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS40LXA2CisrCisrZG5sIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NS04LCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrCisrZG5sIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorK2RubCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorK2RubCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisrZG5sIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKysjIGxpYi1wcmVmaXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9BUkdfV0lUSCBpcyBzeW5vbnltb3VzIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mLTIuMTMsIGFuZAorK2RubCBzaW1pbGFyIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mIDIuNTIuLi4yLjU3IGV4Y2VwdCB0aGF0IGlzIGRvZXNuJ3QKKytkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KKytpZmRlZihbQUNfSEVMUF9TVFJJTkddLAorK1tBQ19ERUZVTihbQUNfTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sW1skMl1dLFskM10sWyQ0XSldKV0sCisrW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKysKKytkbmwgQUNfTElCX1BSRUZJWCBhZGRzIHRvIHRoZSBDUFBGTEFHUyBhbmQgTERGTEFHUyB0aGUgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkCisrZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKKytkbmwgYSB1c2VyIHdpbGwgd2FudCBwYWNrYWdlcyB0byB1c2Ugb3RoZXIgcGFja2FnZXMgaGUgcHJldmlvdXNseSBpbnN0YWxsZWQKKytkbmwgd2l0aCB0aGUgc2FtZSAtLXByZWZpeCBvcHRpb24uCisrZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKKytkbmwgbGlicmFyaWVzLCBidXQgaXMgb3RoZXJ3aXNlIHZlcnkgY29udmVuaWVudC4KKytBQ19ERUZVTihbQUNfTElCX1BSRUZJWF0sCisrWworKyAgQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJfTElOS0ZMQUdTXSkKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYi1wcmVmaXhbPURJUl0gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWItcHJlZml4ICAgIGRvbid0IHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisrICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgaGF2ZWl0PQorKyAgICAgIGZvciB4IGluICRMREZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvbGliIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSR7TERGTEFHUzorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX1BSRVBBUkVfUFJFRklYIGNyZWF0ZXMgdmFyaWFibGVzIGFjbF9maW5hbF9wcmVmaXgsCisrZG5sIGFjbF9maW5hbF9leGVjX3ByZWZpeCwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdoaWNoICRwcmVmaXggYW5kCisrZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdLAorK1sKKysgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorKyAgZG5sIGF0IHRoZSBlbmQgb2YgY29uZmlndXJlLgorKyAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisrICBmaQorKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworKyAgZWxzZQorKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGZpCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorKworK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCisrZG5sIHZhcmlhYmxlcyBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGJvdW5kIHRvIHRoZSB2YWx1ZXMgdGhleSB3aWxsIGhhdmUKKytkbmwgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKytBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKKytbCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorKyAgJDEKKysgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisrXSkKKysKKysjIGxpYi1saW5rLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisrZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCisrZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCisrICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorKyAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICBdKQorKyAgTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbGlicyIKKysgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorKyAgSU5DW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgZG5sIEFsc28gc2V0IEhBVkVfTElCW11OQU1FIHNvIHRoYXQgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiByZXVzZSB0aGUKKysgIGRubCByZXN1bHRzIG9mIHRoaXMgc2VhcmNoIHdoZW4gdGhpcyBsaWJyYXJ5IGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5LgorKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisrICB1bmRlZmluZShbTmFtZV0pCisrICB1bmRlZmluZShbTkFNRV0pCisrXSkKKysKKytkbmwgQUNfTElCX0hBVkVfTElOS0ZMQUdTKG5hbWUsIGRlcGVuZGVuY2llcywgaW5jbHVkZXMsIHRlc3Rjb2RlKQorK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorK2RubCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIHRvZ2V0aGVyIHdpdGggdGhlIHNwZWNpZmllZCBpbmNsdWRlIGZpbGVzIGFuZAorK2RubCB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBzcGVjaWZpZWQgdGVzdGNvZGUuIElmIGZvdW5kLCBpdAorK2RubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCisrZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisrZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworK2RubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytBQ19ERUZVTihbQUNfTElCX0hBVkVfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQorKyAgZG5sIGFjY29yZGluZ2x5LgorKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrCisrICBkbmwgQWRkICRJTkNbXU5BTUUgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisrICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYltdTmFtZS1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4KKysgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZV0sIFsKKysgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgTElCUz0iJExJQlMgJExJQltdTkFNRSIKKysgICAgQUNfVFJZX0xJTksoWyQzXSwgWyQ0XSwgW2FjX2N2X2xpYltdTmFtZT15ZXNdLCBbYWNfY3ZfbGliW11OYW1lPW5vXSkKKysgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgIF0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfbGliW11OYW1lIiA9IHllczsgdGhlbgorKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKysgICAgQUNfREVGSU5FKFtIQVZFX0xJQl1OQU1FLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAkMSBsaWJyYXJ5Ll0pCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSkKKysgICAgQUNfTVNHX1JFU1VMVChbJExJQltdTkFNRV0pCisrICBlbHNlCisrICAgIEhBVkVfTElCW11OQU1FPW5vCisrICAgIGRubCBJZiAkTElCW11OQU1FIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQKKysgICAgZG5sICRJTkNbXU5BTUUgZWl0aGVyLgorKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCisrICAgIExJQltdTkFNRT0KKysgICAgTFRMSUJbXU5BTUU9CisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUUpCisrICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CisrZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCisrZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytBQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkgICAgICAgICAgICAgICAgZG5sIHdlIHVzZSAkQ0MsICRHQ0MsICRMREZMQUdTCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSAgICAgICAgIGRubCB3ZSB1c2UgJGhvc3QKKysgIEFDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKSBkbmwgd2UgdXNlICRhY19hdXhfZGlyCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworKyAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCisrICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAorKyAgICAuIC4vY29uZnRlc3Quc2gKKysgICAgcm0gLWYgLi9jb25mdGVzdC5zaAorKyAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorKyAgXSkKKysgIHdsPSIkYWNsX2N2X3dsIgorKyAgbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIHNobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorKyAgaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKysgIGhhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKysgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisrICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorKyAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKKysgICAgOiwgZW5hYmxlX3JwYXRoPXllcykKKytdKQorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCisrWworKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKysgIHVzZV9hZGRpdGlvbmFsPXllcworKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgIF0pCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorK1sKKysgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisrICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKysgICAgZWxzZQorKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICAgICAgICBdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKysgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisrICAgICAgZmkKKysgICAgZmkKKytdKQorKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisrICBkbmwgJExERkxBR1MuIFVzaW5nIGJyZWFkdGgtZmlyc3Qtc2VhY2guCisrICBMSUJbXU5BTUU9CisrICBMVExJQltdTkFNRT0KKysgIElOQ1tdTkFNRT0KKysgIHJwYXRoZGlycz0KKysgIGx0cnBhdGhkaXJzPQorKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorKyAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCisrICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisrICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgorKyAgICBuYW1lc19uZXh0X3JvdW5kPQorKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKysgICAgICBhbHJlYWR5X2hhbmRsZWQ9CisrICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKysgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKysgICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKysgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKysgICAgICAgIGRubCBTZWUgaWYgaXQgd2FzIGFscmVhZHkgbG9jYXRlZCBieSBhbiBlYXJsaWVyIEFDX0xJQl9MSU5LRkxBR1MKKysgICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KKysgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisrICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kdmFsdWUiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgQW4gZWFybGllciBjYWxsIHRvIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBoYXMgZGV0ZXJtaW5lZAorKyAgICAgICAgICAgIGRubCB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGV4aXN0LiBTbyBqdXN0IGRyb3AgaXQuCisrICAgICAgICAgICAgOgorKyAgICAgICAgICBmaQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGxpYiRuYW1lIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQgJExERkxBR1MKKysgICAgICAgICAgZG5sIGFuZCB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRS8kTFRMSUJOQU1FLgorKyAgICAgICAgICBmb3VuZF9kaXI9CisrICAgICAgICAgIGZvdW5kX2xhPQorKyAgICAgICAgICBmb3VuZF9zbz0KKysgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorKyAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cworKyAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeSBpbnRvIHRoZSBleGVjdXRhYmxlJ3MgcnVucGF0aCwgdW5sZXNzIGl0J3MgdGhlCisrICAgICAgICAgICAgICBkbmwgc3RhbmRhcmQgL3Vzci9saWIuCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBObyBoYXJkY29kaW5nIGlzIG5lZWRlZC4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysgICAgICAgICAgICAgICAgICBkbmwgcmVzdWx0aW5nIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBkbmwgUmVseSBvbiAiLUwkZm91bmRfZGlyIi4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKKysgICAgICAgICAgICAgICAgICAgIGRubCBvciB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRQorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRoYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIHZlcnkgb2xkIHN5c3RlbXMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX2EiCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKysgICAgICAgICAgICAgICAgZG5sIGZhbGxiYWNrLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBBc3N1bWUgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5lYXJieS4KKysgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisrICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KKysgICAgICAgICAgICAgICovbGliIHwgKi9saWIvKQorKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgJ3MsL2xpYi8qJCwsJ2AKKysgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorKyAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisrICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorKyAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKKysgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRJTkNOQU1FLAorKyAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgSU5DW11OQU1FPSIke0lOQ1tdTkFNRX0ke0lOQ1tdTkFNRTorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIExvb2sgZm9yIGRlcGVuZGVuY2llcy4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUmVhZCB0aGUgLmxhIGZpbGUuIEl0IGRlZmluZXMgdGhlIHZhcmlhYmxlcworKyAgICAgICAgICAgICAgZG5sIGRsbmFtZSwgbGlicmFyeV9uYW1lcywgb2xkX2xpYnJhcnksIGRlcGVuZGVuY3lfbGlicywgY3VycmVudCwKKysgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisrICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKysgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorKyAgICAgICAgICAgICAgZG5sIFdlIHVzZSBvbmx5IGRlcGVuZGVuY3lfbGlicy4KKysgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKysgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKysgICAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJExJQk5BTUUsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMVExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtUiopCisrICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgLWwqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKi5sYSkKKysgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4gVGhyb3cgYXdheSB0aGUgLmxhJ3MKKysgICAgICAgICAgICAgICAgICAgIGRubCBkaXJlY3Rvcnk7IGl0IGlzIGFscmVhZHkgY29udGFpbmVkIGluIGEgcHJlY2VkaW5nIC1MCisrICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgICAgICAgIGRubCBNb3N0IGxpa2VseSBhbiBpbW1lZGlhdGUgbGlicmFyeSBuYW1lLgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCisrICAgICAgICAgICAgZG5sIGtub3duIHRvIHRoZSBsaW5rZXIgYW5kIHJ1bnRpbWUgbG9hZGVyLiAoQWxsIHRoZSBzeXN0ZW0KKysgICAgICAgICAgICBkbmwgZGlyZWN0b3JpZXMga25vd24gdG8gdGhlIGxpbmtlciBzaG91bGQgYWxzbyBiZSBrbm93biB0byB0aGUKKysgICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQorKyAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGRvbmUKKysgIGRvbmUKKysgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisrICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorKyAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorKyAgICAgIGFsbGRpcnM9CisrICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICBkb25lCisrICAgICAgZG5sIE5vdGU6IGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisrICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisrICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICBlbHNlCisrICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisrICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICAgIGRvbmUKKysgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgZG5sIFdoZW4gdXNpbmcgbGlidG9vbCwgdGhlIG9wdGlvbiB0aGF0IHdvcmtzIGZvciBib3RoIGxpYnJhcmllcyBhbmQKKysgICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tUiRmb3VuZF9kaXIiCisrICAgIGRvbmUKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX0FQUEVORFRPVkFSKFZBUiwgQ09OVEVOVFMpIGFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIENPTlRFTlRTIHRvIFZBUiwKKytkbmwgdW5sZXNzIGFscmVhZHkgcHJlc2VudCBpbiBWQVIuCisrZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKKytkbmwgY29udGFpbnMgdHdvIG9yIHRocmVlIGNvbnNlY3V0aXZlIGVsZW1lbnRzIHRoYXQgYmVsb25nIHRvZ2V0aGVyLgorK0FDX0RFRlVOKFtBQ19MSUJfQVBQRU5EVE9WQVJdLAorK1sKKysgIGZvciBlbGVtZW50IGluIFskMl07IGRvCisrICAgIGhhdmVpdD0KKysgICAgZm9yIHggaW4gJFskMV07IGRvCisrICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKysgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgIGJyZWFrCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgIFskMV09IiR7WyQxXX0ke1skMV06KyB9JGVsZW1lbnQiCisrICAgIGZpCisrICBkb25lCisrXSkKKysKKysjIGxpYi1sZC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorK2RubCB3aXRoIHJlcGxhY2VtZW50cyBzL0FDXy9BQ19MSUIvIGFuZCBzL2x0X2N2L2FjbF9jdi8gdG8gYXZvaWQgY29sbGlzaW9uCisrZG5sIHdpdGggbGlidG9vbC5tNC4KKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgd2l0aF9nbnVfbGQgdG8geWVzIG9yIG5vLgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF9HTlVdLAorK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCisrWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKysqR05VKiB8ICond2l0aCBCRkQnKikKKysgIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMgOzsKKysqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7CisrZXNhY10pCisrd2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorK10pCisrCisrZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIExELgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCisrW0FDX0FSR19XSVRIKGdudS1sZCwKKytbICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dXSwKKyt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorK2FjX3Byb2c9bGQKKytpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5IEdDQ10pCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqKQorKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKysgICopCisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX3Byb2cgaW4KKysgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisrICAgIFtbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopXQorKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCisrICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKKysgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKysJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorKyAgICAgIGRvbmUKKysgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKysgICAgICA7OworKyAgIiIpCisrICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorKyAgICBhY19wcm9nPWxkCisrICAgIDs7CisrICAqKQorKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisrICAgIHdpdGhfZ251X2xkPXVua25vd24KKysgICAgOzsKKysgIGVzYWMKKytlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCisrZWxzZQorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCisrZmkKKytBQ19DQUNIRV9WQUwoYWNsX2N2X3BhdGhfTEQsCisrW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKysgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisrICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKysgICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKysgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisrICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPCAvZGV2L251bGxgIGluCisrICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKKysgICAgICAqKQorKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysgIGRvbmUKKysgIElGUz0iJGFjX3NhdmVfaWZzIgorK2Vsc2UKKysgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorK2ZpXSkKKytMRD0iJGFjbF9jdl9wYXRoX0xEIgorK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoJExEKQorK2Vsc2UKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKyt0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorK0FDX0xJQl9QUk9HX0xEX0dOVQorK10pCisrCisrIyBpc2MtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS4yKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgd2l0aCBhdXRvY29uZi0yLjUzIGFuZCBuZXdlci4gIFJlbW92ZSBpdCBpbiAyMDA1LgorKworKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisrIyBDdXJyZW50bHkgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdXRvY29uZiBtYWNybworKyMgYmVjYXVzZSBnZXR0ZXh0J3MgZ2V0dGV4dC5tNCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGF1dG9tYWtlIHBhY2thZ2UpCisrIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorKyMgZ2l2ZSB0aGVzZSBkaWFnbm9zdGljczoKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX0NPTVBJTEUgd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrCisrdW5kZWZpbmUoW0FDX0lTQ19QT1NJWF0pCisrCisrQUNfREVGVU4oW0FDX0lTQ19QT1NJWF0sCisrICBbCisrICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisrICAgIEFDX0NIRUNLX0xJQihjcG9zaXgsIHN0cmVycm9yLCBbTElCUz0iJExJQlMgLWxjcG9zaXgiXSkKKysgIF0KKyspCisrCisrIyBDaGVjayBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5LgorKworKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrIyAwMjExMS0xMzA3LCBVU0EuCisrCisrIyBQcmVwYXJlIGZvciBzdWJzdGl0dXRpbmcgPHN0ZGJvb2wuaD4gaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4KKysKKytBQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQk9PTF0pCisrCisrICAjIERlZmluZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorKworKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuCisrICAgIFNUREJPT0xfSD0nJworKyAgZWxzZQorKyAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcKKysgIGZpCisrICBBQ19TVUJTVChbU1REQk9PTF9IXSkKKysKKysgIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgorKyAgICBIQVZFX19CT09MPTEKKysgIGVsc2UKKysgICAgSEFWRV9fQk9PTD0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfX0JPT0xdKQorK10pCisrCisrIyBUaGlzIG1hY3JvIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTQuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgorKyMgaGF2ZSB0aGlzIG1hY3JvIGJ1aWx0LWluLgorKworK0FDX0RFRlVOKFtBQ19IRUFERVJfU1REQk9PTF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTldLAorKyAgICAgW2FjX2N2X2hlYWRlcl9zdGRib29sX2hdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysJICAjaWZuZGVmIGJvb2wKKysJICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIHRydWUKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgdHJ1ZSAhPSAxCisrCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCisrCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCisrCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CisrCisrCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworKwkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisrCSAgYm9vbCBlID0gJnM7CisrCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisrCSAgY2hhciBnW3RydWVdOworKwkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisrCSAgY2hhciBpW3NpemVvZiBzLnRdOworKwldLAorKwlbIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7IF0sCisrCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllc10sCisrCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vXSldKQorKyAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCisrICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1REQk9PTF9ILCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RkYm9vbC5oIGNvbmZvcm1zIHRvIEM5OS5dKQorKyAgIGZpXSkKKysKKysjc2VyaWFsIDUKKysKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcKKysKKytkbmwgRGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgaWYgYHN0cnVjdCB1dGltYnVmJyBpcyBkZWNsYXJlZCAtLQorK2RubCB1c3VhbGx5IGluIDx1dGltZS5oPi4KKytkbmwgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLgorKworK0FDX0RFRlVOKFtqbV9DSEVDS19UWVBFX1NUUlVDVF9VVElNQlVGXSwKKytbCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3lzL3RpbWUuaCB1dGltZS5oKQorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1RJTUVdKQorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgdXRpbWJ1Zl0sIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiwKKysgICAgW0FDX1RSWV9DT01QSUxFKAorKyAgICAgIFsKKysjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisrIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbHNlCisrIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKysjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyMgZWxzZQorKyMgIGluY2x1ZGUgPHRpbWUuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2lmZGVmIEhBVkVfVVRJTUVfSAorKyMgaW5jbHVkZSA8dXRpbWUuaD4KKysjZW5kaWYKKysgICAgICBdLAorKyAgICAgIFtzdGF0aWMgc3RydWN0IHV0aW1idWYgeDsgeC5hY3RpbWUgPSB4Lm1vZHRpbWU7XSwKKysgICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzLAorKyAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubykKKysgICAgXSkKKysKKysgIGlmIHRlc3QgJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfVVRJTUJVRiwgMSwKKysgICAgICBbRGVmaW5lIGlmIHN0cnVjdCB1dGltYnVmIGlzIGRlY2xhcmVkIC0tIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorKyAgICAgICBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuIF0pCisrICBmaQorK10pCisrCisrIyBvbmNlb25seS5tNCBzZXJpYWwgMworK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgVGhpcyBmaWxlIGRlZmluZXMgc29tZSAib25jZSBvbmx5IiB2YXJpYW50cyBvZiBzdGFuZGFyZCBhdXRvY29uZiBtYWNyb3MuCisrZG5sICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfSEVBREVSUworK2RubCAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0ZVTkNTCisrZG5sICAgQUNfQ0hFQ0tfREVDTFNfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfREVDTFMKKytkbmwgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pICBsaWtlICBBQ19IRUFERVJfU1REQworK2RubCBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGNoZWNrIGZvciBlYWNoIG9mIHRoZSBoZWFkZXJzL2Z1bmN0aW9ucy9kZWNscworK2RubCB3aWxsIGJlIHB1dCBvbmx5IG9uY2UgaW50byB0aGUgJ2NvbmZpZ3VyZScgZmlsZS4gSXQga2VlcHMgdGhlIHNpemUgb2YKKytkbmwgdGhlICdjb25maWd1cmUnIGZpbGUgZG93biwgYW5kIGF2b2lkcyByZWR1bmRhbnQgb3V0cHV0IHdoZW4gJ2NvbmZpZ3VyZScKKytkbmwgaXMgcnVuLgorK2RubCBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY2hlY2tzIGNhbm5vdCBiZSBjb25kaXRpb25hbGl6ZWQuIElmIHlvdSB3cml0ZQorK2RubCAgIGlmIHNvbWVfY29uZGl0aW9uOyB0aGVuIGdsX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpOyBmaQorK2RubCBpbnNpZGUgYW4gQUNfREVGVU5lZCBmdW5jdGlvbiwgdGhlIGdsX0NIRUNLX0hFQURFUlMgbWFjcm8gY2FsbCBleHBhbmRzIHRvCisrZG5sIGVtcHR5LCBhbmQgdGhlIGNoZWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBib2R5IG9mIHRoZSBBQ19ERUZVTmVkCisrZG5sIGZ1bmN0aW9uLgorKworK2RubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCisrQUNfUFJFUkVRKDIuNTQpCisrCisrIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfSEVBREVSUyhIRUFERVIxIEhFQURFUjIgLi4uKS4KKytBQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfSEVBREVSX05BTUVdLCBbJDFdLCBbCisrICAgIEFDX0RFRlVOKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpLCBbCisrICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhnbF9IRUFERVJfTkFNRSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSkKKysgIF0pCisrXSkKKysKKysjIEFDX0NIRUNLX0ZVTkNTX09OQ0UoRlVOQzEgRlVOQzIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCisrIyBBQ19DSEVDS19GVU5DUyhGVU5DMSBGVU5DMiAuLi4pLgorK0FDX0RFRlVOKFtBQ19DSEVDS19GVU5DU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfRlVOQ19OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSksIFsKKysgICAgICBBQ19DSEVDS19GVU5DUyhtNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCisrICBdKQorK10pCisrCisrIyBBQ19DSEVDS19ERUNMU19PTkNFKERFQ0wxIERFQ0wyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfREVDTFMoREVDTDEsIERFQ0wyLCAuLi4pLgorK0FDX0RFRlVOKFtBQ19DSEVDS19ERUNMU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfREVDTF9OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSksIFsKKysgICAgICBBQ19DSEVDS19ERUNMUyhtNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCisrICBdKQorK10pCisrCisgIyBiYWNrdXBmaWxlLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMjEsNiArMTA3Niw3IEBACisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UobGltaXRzLmggc3RyaW5nLmggdW5pc3RkLmgpCisgICBBQ19DSEVDS19GVU5DUyhwYXRoY29uZikKKyBdKQorKworICNzZXJpYWwgNQorIAorIGRubCBGcm9tIEppbSBNZXllcmluZy4KK0BAIC02MywzMSArMTExOSw3IEBACisgICAgZmkKKyAgIF0KKyApCistIyBkaXJuYW1lLm00IHNlcmlhbCAxCistZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9ESVJOQU1FXSwKKy1bCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5oLgorLSAgQUNfUkVRVUlSRShbam1fQUNfRE9TXSkKKy0KKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvYmFzZW5hbWUuYy4KKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKy0KKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJpcHNsYXNoLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistXSkKKyAjc2VyaWFsIDUKKyAKKyAjIERlZmluZSBzb21lIG1hY3JvcyByZXF1aXJlZCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBjb2RlIGluIGxpYi8qLmMKK0BAIC0xNDEsNiArMTE3MywzMyBAQAorICAgICAgIFtEZWZpbmUgaWYgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgbWF5IGFsc28gc2VydmUgYXMgYSBmaWxlIG5hbWUKKyAgICAgICAgY29tcG9uZW50IHNlcGFyYXRvci5dKQorICAgXSkKKysKKysjIGRpcm5hbWUubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0RJUk5BTUVdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmguCisrICBBQ19SRVFVSVJFKFtqbV9BQ19ET1NdKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Rpcm5hbWUuYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9iYXNlbmFtZS5jLgorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cmlwc2xhc2guYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKytdKQorKworICNzZXJpYWwgNworIAorIEFDX0RFRlVOKFtnbF9FUlJPUl0sCitAQCAtMTU5LDcgKzEyMTgsNjcgQEAKKyAgIEFDX0NIRUNLX0RFQ0xTKFtzdHJlcnJvcl0pCisgICBBQ19GVU5DX1NUUkVSUk9SX1IKKyBdKQorLSMgZ2V0b3B0Lm00IHNlcmlhbCAxCisrCisrIyBtZW1jaHIubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ0hSXSwKKytbCisrICBBQ19SRVBMQUNFX0ZVTkNTKG1lbWNocikKKysgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0gbm87IHRoZW4KKysgICAgam1fUFJFUkVRX01FTUNIUgorKyAgZmkKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtY2hyLmMuCisrQUNfREVGVU4oW2ptX1BSRVJFUV9NRU1DSFJdLCBbCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0UobGltaXRzLmggc3RkbGliLmgpCisrICBBQ19DSEVDS19IRUFERVJTKGJwLXN5bS5oKQorK10pCisrCisrIyBybWRpci5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfRlVOQ19STURJUl0sCisrWworKyAgQUNfUkVQTEFDRV9GVU5DUyhybWRpcikKKysgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcm1kaXIgPSBubzsgdGhlbgorKyAgICBnbF9QUkVSRVFfUk1ESVIKKysgIGZpCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JtZGlyLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9STURJUl0sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVEFUXSkKKysgIDoKKytdKQorKworKworKyMgZ2V0b3B0Lm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9HRVRPUFRdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9nZXRvcHQuYy4KKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKytdKQorKworKyMgeGFsbG9jLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorQEAgLTE2NywxMSArMTI4NiwyNSBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9HRVRPUFRdLAorK0FDX0RFRlVOKFtnbF9YQUxMT0NdLAorIFsKKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9nZXRvcHQuYy4KKysgIGdsX1BSRVJFUV9YTUFMTE9DCisrICBnbF9QUkVSRVFfWFNUUkRVUAorK10pCisrCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94bWFsbG9jLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9YTUFMTE9DXSwgWworKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfUkVRVUlSRShbam1fRlVOQ19NQUxMT0NdKQorKyAgQUNfUkVRVUlSRShbam1fRlVOQ19SRUFMTE9DXSkKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHN0cmR1cC5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfWFNUUkRVUF0sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKyBdKQorKworICMgbWFsbG9jLm00IHNlcmlhbCA3CisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMTk3LDY2ICsxMzMwLDggQEAKKyBBQ19ERUZVTihbZ2xfUFJFUkVRX01BTExPQ10sIFsKKyAgIDoKKyBdKQorLSMgbWJydG93Yy5tNCBzZXJpYWwgNQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorLQorLWRubCBGcm9tIFBhdWwgRWdnZXJ0CistCistZG5sIFRoaXMgZmlsZSBjYW4gYmUgcmVtb3ZlZCwgYW5kIGptX0ZVTkNfTUJSVE9XQyByZXBsYWNlZCB3aXRoCistZG5sIEFDX0ZVTkNfTUJSVE9XQywgd2hlbiBhdXRvY29uZiAyLjU3IGNhbiBiZSBhc3N1bWVkIGV2ZXJ5d2hlcmUuCistCistQUNfREVGVU4oW2ptX0ZVTkNfTUJSVE9XQ10sCistWworLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZF0sCistICAgIGptX2N2X2Z1bmNfbWJydG93YywKKy0gICAgW0FDX1RSWV9MSU5LKAorLSAgICAgICBbI2luY2x1ZGUgPHdjaGFyLmg+XSwKKy0gICAgICAgW21ic3RhdGVfdCBzdGF0ZTsgcmV0dXJuICEgKHNpemVvZiBzdGF0ZSAmJiBtYnJ0b3djKTtdLAorLSAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9eWVzLAorLSAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9bm8pXSkKKy0gIGlmIHRlc3QgJGptX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9NQlJUT1dDLCAxLAorLSAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCistICBmaQorLV0pCistIyBtYnN0YXRlX3QubTQgc2VyaWFsIDkKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCistCistIyBGcm9tIFBhdWwgRWdnZXJ0LgorLQorLSMgQmVPUyA1IGhhcyA8d2NoYXIuaD4gYnV0IGRvZXMgbm90IGRlZmluZSBtYnN0YXRlX3QsCistIyBzbyB5b3UgY2FuJ3QgZGVjbGFyZSBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgorLSMgQ2hlY2sgZm9yIHRoaXMgaW5jb21wYXRpYmlsaXR5IHdpdGggU3RhbmRhcmQgQy4KKyAKKy0jIEFDX1RZUEVfTUJTVEFURV9UCistIyAtLS0tLS0tLS0tLS0tLS0tLQorLUFDX0RFRlVOKFtBQ19UWVBFX01CU1RBVEVfVF0sCistICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBhY19jdl90eXBlX21ic3RhdGVfdCwKKy0gICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0JW0FDX0xBTkdfUFJPR1JBTSgKKy0JICAgW0FDX0lOQ0xVREVTX0RFRkFVTFQKKy0jCSAgICBpbmNsdWRlIDx3Y2hhci5oPl0sCistCSAgIFttYnN0YXRlX3QgeDsgcmV0dXJuIHNpemVvZiB4O10pXSwKKy0JW2FjX2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCistCVthY19jdl90eXBlX21ic3RhdGVfdD1ub10pXSkKKy0gICBpZiB0ZXN0ICRhY19jdl90eXBlX21ic3RhdGVfdCA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKFtIQVZFX01CU1RBVEVfVF0sIDEsCistCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC5dKQorLSAgIGVsc2UKKy0gICAgIEFDX0RFRklORShbbWJzdGF0ZV90XSwgaW50LAorLQkgICAgICAgW0RlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS5dKQorLSAgIGZpXSkKKy0jIG1lbWNoci5tNCBzZXJpYWwgMQorKyMgcmVhbGxvYy5tNCBzZXJpYWwgNworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK0BAIC0yNjQsMTE2ICsxMzM5LDI0IEBACisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ0hSXSwKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCisrZG5sIERldGVybWluZSB3aGV0aGVyIHJlYWxsb2Mgd29ya3Mgd2hlbiBib3RoIGFyZ3VtZW50cyBhcmUgMC4KKytkbmwgSWYgaXQgZG9lc24ndCwgYXJyYW5nZSB0byB1c2UgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX1JFQUxMT0NdLAorIFsKKy0gIEFDX1JFUExBQ0VfRlVOQ1MobWVtY2hyKQorLSAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1jaHIgPSBubzsgdGhlbgorLSAgICBqbV9QUkVSRVFfTUVNQ0hSCisrICBBQ19SRVFVSVJFKFtBQ19GVU5DX1JFQUxMT0NdKQorKyAgZG5sIGF1dG9jb25mIDwgMi41NyB1c2VkIHRoZSBzeW1ib2wgYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzLgorKyAgaWYgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA9IFhubyB8fCB0ZXN0IFgiJGFjX2N2X2Z1bmNfcmVhbGxvY193b3JrcyIgPSBYbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX1JFQUxMT0MKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbWNoci5jLgorLUFDX0RFRlVOKFtqbV9QUkVSRVFfTUVNQ0hSXSwgWworLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKGxpbWl0cy5oIHN0ZGxpYi5oKQorLSAgQUNfQ0hFQ0tfSEVBREVSUyhicC1zeW0uaCkKKy1dKQorLSNzZXJpYWwgMQorLQorLWRubCBGcm9tIE11bWl0IEtoYW4gYW5kIFBhdWwgRWdnZXJ0CistZG5sIERldGVybWluZSB3aGV0aGVyIG1rZGlyIGFjY2VwdHMgb25seSBvbmUgYXJndW1lbnQgaW5zdGVhZCBvZiB0aGUgdXN1YWwgdHdvLgorLQorLUFDX0RFRlVOKFtQQVRDSF9GVU5DX01LRElSX1RBS0VTX09ORV9BUkddLAorLSAgW0FDX0NIRUNLX0ZVTkNTKG1rZGlyKQorLSAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50XSwKKy0gICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcsCistICAgICBbcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz1ubworLSAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistCSAgXSwKKy0JICBbbWtkaXIgKCIuIiwgMCk7XSwKKy0JICAsCistCSAgW0FDX1RSWV9DT01QSUxFKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistCSAgICAgXSwKKy0JICAgICBbbWtkaXIgKCIuIik7XSwKKy0JICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPXllcworLQkgICldCistCSkKKy0gICAgICBmaQorLSAgICAgXQorLSAgICkKKy0gICBpZiB0ZXN0ICRwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnID0geWVzOyB0aGVuCistICAgICBBQ19ERUZJTkUoW01LRElSX1RBS0VTX09ORV9BUkddLCAxLAorLSAgICAgICBbRGVmaW5lIGlmIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50Ll0pCistICAgZmkKKy0gIF0KKy0pCistIyBvbmNlb25seS5tNCBzZXJpYWwgMworLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0KKy1kbmwgVGhpcyBmaWxlIGRlZmluZXMgc29tZSAib25jZSBvbmx5IiB2YXJpYW50cyBvZiBzdGFuZGFyZCBhdXRvY29uZiBtYWNyb3MuCistZG5sICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfSEVBREVSUworLWRubCAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0ZVTkNTCistZG5sICAgQUNfQ0hFQ0tfREVDTFNfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfREVDTFMKKy1kbmwgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pICBsaWtlICBBQ19IRUFERVJfU1REQworLWRubCBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGNoZWNrIGZvciBlYWNoIG9mIHRoZSBoZWFkZXJzL2Z1bmN0aW9ucy9kZWNscworLWRubCB3aWxsIGJlIHB1dCBvbmx5IG9uY2UgaW50byB0aGUgJ2NvbmZpZ3VyZScgZmlsZS4gSXQga2VlcHMgdGhlIHNpemUgb2YKKy1kbmwgdGhlICdjb25maWd1cmUnIGZpbGUgZG93biwgYW5kIGF2b2lkcyByZWR1bmRhbnQgb3V0cHV0IHdoZW4gJ2NvbmZpZ3VyZScKKy1kbmwgaXMgcnVuLgorLWRubCBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY2hlY2tzIGNhbm5vdCBiZSBjb25kaXRpb25hbGl6ZWQuIElmIHlvdSB3cml0ZQorLWRubCAgIGlmIHNvbWVfY29uZGl0aW9uOyB0aGVuIGdsX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpOyBmaQorLWRubCBpbnNpZGUgYW4gQUNfREVGVU5lZCBmdW5jdGlvbiwgdGhlIGdsX0NIRUNLX0hFQURFUlMgbWFjcm8gY2FsbCBleHBhbmRzIHRvCistZG5sIGVtcHR5LCBhbmQgdGhlIGNoZWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBib2R5IG9mIHRoZSBBQ19ERUZVTmVkCistZG5sIGZ1bmN0aW9uLgorLQorLWRubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCistQUNfUFJFUkVRKDIuNTQpCistCistIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorLSMgQUNfQ0hFQ0tfSEVBREVSUyhIRUFERVIxIEhFQURFUjIgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSU19PTkNFXSwgWworLSAgOgorLSAgQUNfRk9SRUFDSChbZ2xfSEVBREVSX05BTUVdLCBbJDFdLCBbCistICAgIEFDX0RFRlVOKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpLCBbCistICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhnbF9IRUFERVJfTkFNRSkKKy0gICAgXSkKKy0gICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSkKKy0gIF0pCistXSkKKy0KKy0jIEFDX0NIRUNLX0ZVTkNTX09OQ0UoRlVOQzEgRlVOQzIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCistIyBBQ19DSEVDS19GVU5DUyhGVU5DMSBGVU5DMiAuLi4pLgorLUFDX0RFRlVOKFtBQ19DSEVDS19GVU5DU19PTkNFXSwgWworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcmVhbGxvYy5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfUkVBTExPQ10sIFsKKyAgIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0ZVTkNfTkFNRV0sIFskMV0sIFsKKy0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pLCBbCistICAgICAgQUNfQ0hFQ0tfRlVOQ1MobTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorLSAgXSkKKyBdKQorIAorLSMgQUNfQ0hFQ0tfREVDTFNfT05DRShERUNMMSBERUNMMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKy0jIEFDX0NIRUNLX0RFQ0xTKERFQ0wxLCBERUNMMiwgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfREVDTFNfT05DRV0sIFsKKy0gIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0RFQ0xfTkFNRV0sIFskMV0sIFsKKy0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pLCBbCistICAgICAgQUNfQ0hFQ0tfREVDTFMobTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorLSAgXSkKKy1dKQorICMgcXVvdGUubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC0zODcsNiArMTM3MCw3IEBACisgICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcXVvdGUuYy4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdGRkZWYuaCkKKyBdKQorKworICMgcXVvdGVhcmcubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC00MDMsMzIgKzEzODcsNjkgQEAKKyAgIEFDX1RZUEVfTUJTVEFURV9UCisgICBqbV9GVU5DX01CUlRPV0MKKyBdKQorLSMgcmVhbGxvYy5tNCBzZXJpYWwgNworLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBtYnN0YXRlX3QubTQgc2VyaWFsIDkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyBkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisgZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistZG5sIEZyb20gSmltIE1leWVyaW5nLgorLWRubCBEZXRlcm1pbmUgd2hldGhlciByZWFsbG9jIHdvcmtzIHdoZW4gYm90aCBhcmd1bWVudHMgYXJlIDAuCistZG5sIElmIGl0IGRvZXNuJ3QsIGFycmFuZ2UgdG8gdXNlIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KKysjIEZyb20gUGF1bCBFZ2dlcnQuCisgCistQUNfREVGVU4oW2ptX0ZVTkNfUkVBTExPQ10sCisrIyBCZU9TIDUgaGFzIDx3Y2hhci5oPiBidXQgZG9lcyBub3QgZGVmaW5lIG1ic3RhdGVfdCwKKysjIHNvIHlvdSBjYW4ndCBkZWNsYXJlIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCisrIyBDaGVjayBmb3IgdGhpcyBpbmNvbXBhdGliaWxpdHkgd2l0aCBTdGFuZGFyZCBDLgorKworKyMgQUNfVFlQRV9NQlNUQVRFX1QKKysjIC0tLS0tLS0tLS0tLS0tLS0tCisrQUNfREVGVU4oW0FDX1RZUEVfTUJTVEFURV9UXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG1ic3RhdGVfdF0sIGFjX2N2X3R5cGVfbWJzdGF0ZV90LAorKyAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKwlbQUNfTEFOR19QUk9HUkFNKAorKwkgICBbQUNfSU5DTFVERVNfREVGQVVMVAorKyMJICAgIGluY2x1ZGUgPHdjaGFyLmg+XSwKKysJICAgW21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7XSldLAorKwlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzXSwKKysJW2FjX2N2X3R5cGVfbWJzdGF0ZV90PW5vXSldKQorKyAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoW0hBVkVfTUJTVEFURV9UXSwgMSwKKysJICAgICAgIFtEZWZpbmUgdG8gMSBpZiA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzdGF0ZV90Ll0pCisrICAgZWxzZQorKyAgICAgQUNfREVGSU5FKFttYnN0YXRlX3RdLCBpbnQsCisrCSAgICAgICBbRGVmaW5lIHRvIGEgdHlwZSBpZiA8d2NoYXIuaD4gZG9lcyBub3QgZGVmaW5lLl0pCisrICAgZmldKQorKworKyMgbWJydG93Yy5tNCBzZXJpYWwgNQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0CisrCisrZG5sIFRoaXMgZmlsZSBjYW4gYmUgcmVtb3ZlZCwgYW5kIGptX0ZVTkNfTUJSVE9XQyByZXBsYWNlZCB3aXRoCisrZG5sIEFDX0ZVTkNfTUJSVE9XQywgd2hlbiBhdXRvY29uZiAyLjU3IGNhbiBiZSBhc3N1bWVkIGV2ZXJ5d2hlcmUuCisrCisrQUNfREVGVU4oW2ptX0ZVTkNfTUJSVE9XQ10sCisgWworLSAgQUNfUkVRVUlSRShbQUNfRlVOQ19SRUFMTE9DXSkKKy0gIGRubCBhdXRvY29uZiA8IDIuNTcgdXNlZCB0aGUgc3ltYm9sIGFjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcy4KKy0gIGlmIHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPSBYbm8gfHwgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MiID0gWG5vOyB0aGVuCistICAgIGdsX1BSRVJFUV9SRUFMTE9DCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkXSwKKysgICAgam1fY3ZfZnVuY19tYnJ0b3djLAorKyAgICBbQUNfVFJZX0xJTksoCisrICAgICAgIFsjaW5jbHVkZSA8d2NoYXIuaD5dLAorKyAgICAgICBbbWJzdGF0ZV90IHN0YXRlOyByZXR1cm4gISAoc2l6ZW9mIHN0YXRlICYmIG1icnRvd2MpO10sCisrICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz15ZXMsCisrICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz1ubyldKQorKyAgaWYgdGVzdCAkam1fY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX01CUlRPV0MsIDEsCisrICAgICAgW0RlZmluZSB0byAxIGlmIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWQuXSkKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JlYWxsb2MuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1JFQUxMT0NdLCBbCistICA6CistXSkKKy0jIHJtZGlyLm00IHNlcmlhbCAxCisrIyBoYXNoLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorQEAgLTQzNiwxOCArMTQ1Nyw3MSBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9GVU5DX1JNRElSXSwKKytBQ19ERUZVTihbZ2xfSEFTSF0sCisgWworLSAgQUNfUkVQTEFDRV9GVU5DUyhybWRpcikKKy0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcm1kaXIgPSBubzsgdGhlbgorLSAgICBnbF9QUkVSRVFfUk1ESVIKKy0gIGZpCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvaGFzaC5jLgorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0ZGxpYi5oKQorKyAgQUNfSEVBREVSX1NUREJPT0wKKysgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoZnJlZSBtYWxsb2MpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JtZGlyLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9STURJUl0sIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVEFUXSkKKy0gIDoKKytBQ19ERUZVTihbYWdfQ0hFQ0tfTkFOT1NFQ09ORF9TVEFUXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF9uc2VjXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW1lbnNlYyArIHN0LnN0X210aW1lbnNlYyArIHN0LnN0X2N0aW1lbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfbnNlYz15ZXNdLAorKwlbYWNfY3Zfc3RhdF9uc2VjPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF9uc2VjID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX05TRUMsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBoYXMgbmFub3NlY29uZCB0aW1lc3RhbXBzLl0pCisrICAgZmkKKysKKysgICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF90aW1ldmFsXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDx0aW1lLmg+CisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysJXSwKKysJWyByZXR1cm4gc3Quc3RfYXRpbS50dl9uc2VjICsgc3Quc3RfbXRpbS50dl9uc2VjICsgc3Quc3RfY3RpbS50dl9uc2VjOyBdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPXllc10sCisrCVthY19jdl9zdGF0X3RpbWV2YWw9bm9dKQorKyAgICAgXSkKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X3RpbWV2YWwgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUQVRfVElNRVZBTCwgMSwgW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGNvbXRhaW5zIHN0cnVjdCB0aW1ldmFsJ3MuXSkKKysgICBmaV0pCisrCisrI3NlcmlhbCA3IC0qLSBhdXRvY29uZiAtKi0KKysKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCisrZG5sCisrZG5sIFNlZSBpZiB0aGUgZ2xpYmMgKl91bmxvY2tlZCBJL08gbWFjcm9zIG9yIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLgorK2RubCBVc2Ugb25seSB0aG9zZSAqX3VubG9ja2VkIG1hY3JvcyBvciBmdW5jdGlvbnMgdGhhdCBhcmUgZGVjbGFyZWQKKytkbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVjbGFyZWQgaW4gU29sYXJpcyAyLjUuMSBidXQgd2VyZSByZW1vdmVkCisrZG5sIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQgb24gU29sYXJpcyAyLjUuMSB0byBydW4KKytkbmwgb24gU29sYXJpcyAyLjYpLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPXSwKKytbCisrICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZmdldHNfdW5sb2NrZWQoKSwgZnB1dHNfdW5sb2NrZWQoKQorKyAgZG5sIGV0Yy4KKysgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKworKyAgQUNfQ0hFQ0tfREVDTFNfT05DRSgKKysgICAgIFtjbGVhcmVycl91bmxvY2tlZCBmZW9mX3VubG9ja2VkIGZlcnJvcl91bmxvY2tlZAorKyAgICAgIGZmbHVzaF91bmxvY2tlZCBmZ2V0c191bmxvY2tlZCBmcHV0Y191bmxvY2tlZCBmcHV0c191bmxvY2tlZAorKyAgICAgIGZyZWFkX3VubG9ja2VkIGZ3cml0ZV91bmxvY2tlZCBnZXRjX3VubG9ja2VkCisrICAgICAgZ2V0Y2hhcl91bmxvY2tlZCBwdXRjX3VubG9ja2VkIHB1dGNoYXJfdW5sb2NrZWRdKQorIF0pCisgCisgIyBDaGVjayBmb3Igc2V0bW9kZSwgRE9TIHN0eWxlLgorQEAgLTQ4OCwxODAgKzE1NjIsMzkgQEAKKyAgICAgIEFDX0RFRklORShIQVZFX1NFVE1PREVfRE9TLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIERPUy1zdHlsZSBgc2V0bW9kZScgZnVuY3Rpb24uXSkKKyAgICBmaV0pCistIyBDaGVjayBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5LgorLQorLSMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCistIyAwMjExMS0xMzA3LCBVU0EuCistCistIyBQcmVwYXJlIGZvciBzdWJzdGl0dXRpbmcgPHN0ZGJvb2wuaD4gaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4KKy0KKy1BQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKKy1bCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQk9PTF0pCistCistICAjIERlZmluZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorLQorLSAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuCistICAgIFNUREJPT0xfSD0nJworLSAgZWxzZQorLSAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcKKy0gIGZpCistICBBQ19TVUJTVChbU1REQk9PTF9IXSkKKy0KKy0gIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgorLSAgICBIQVZFX19CT09MPTEKKy0gIGVsc2UKKy0gICAgSEFWRV9fQk9PTD0wCistICBmaQorLSAgQUNfU1VCU1QoW0hBVkVfX0JPT0xdKQorLV0pCistCistIyBUaGlzIG1hY3JvIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTQuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgorLSMgaGF2ZSB0aGlzIG1hY3JvIGJ1aWx0LWluLgorLQorLUFDX0RFRlVOKFtBQ19IRUFERVJfU1REQk9PTF0sCistICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTldLAorLSAgICAgW2FjX2N2X2hlYWRlcl9zdGRib29sX2hdLAorLSAgICAgW0FDX1RSWV9DT01QSUxFKAorLQlbCistCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKy0JICAjaWZuZGVmIGJvb2wKKy0JICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorLQkgICNlbmRpZgorLQkgICNpZm5kZWYgZmFsc2UKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWYgZmFsc2UKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIHRydWUKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWYgdHJ1ZSAhPSAxCistCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCistCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCistCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CistCistCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CistCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworLQkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKy0JICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CistCSAgYm9vbCBlID0gJnM7CistCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CistCSAgY2hhciBnW3RydWVdOworLQkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CistCSAgY2hhciBpW3NpemVvZiBzLnRdOworLQldLAorLQlbIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7IF0sCistCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllc10sCistCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vXSldKQorLSAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCistICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKEhBVkVfU1REQk9PTF9ILCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RkYm9vbC5oIGNvbmZvcm1zIHRvIEM5OS5dKQorLSAgIGZpXSkKKy0jc2VyaWFsIDcgLSotIGF1dG9jb25mIC0qLQorLQorLWRubCBGcm9tIEppbSBNZXllcmluZy4KKy1kbmwKKy1kbmwgU2VlIGlmIHRoZSBnbGliYyAqX3VubG9ja2VkIEkvTyBtYWNyb3Mgb3IgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCistZG5sIFVzZSBvbmx5IHRob3NlICpfdW5sb2NrZWQgbWFjcm9zIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZAorLWRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWNsYXJlZCBpbiBTb2xhcmlzIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQKKy1kbmwgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdCBvbiBTb2xhcmlzIDIuNS4xIHRvIHJ1bgorLWRubCBvbiBTb2xhcmlzIDIuNikuCistCistQUNfREVGVU4oW2ptX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU9dLAorLVsKKy0gIGRubCBQZXJzdWFkZSBnbGliYyA8c3RkaW8uaD4gdG8gZGVjbGFyZSBmZ2V0c191bmxvY2tlZCgpLCBmcHV0c191bmxvY2tlZCgpCistICBkbmwgZXRjLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistCistICBBQ19DSEVDS19ERUNMU19PTkNFKAorLSAgICAgW2NsZWFyZXJyX3VubG9ja2VkIGZlb2ZfdW5sb2NrZWQgZmVycm9yX3VubG9ja2VkCistICAgICAgZmZsdXNoX3VubG9ja2VkIGZnZXRzX3VubG9ja2VkIGZwdXRjX3VubG9ja2VkIGZwdXRzX3VubG9ja2VkCistICAgICAgZnJlYWRfdW5sb2NrZWQgZndyaXRlX3VubG9ja2VkIGdldGNfdW5sb2NrZWQKKy0gICAgICBnZXRjaGFyX3VubG9ja2VkIHB1dGNfdW5sb2NrZWQgcHV0Y2hhcl91bmxvY2tlZF0pCistXSkKKy0jc2VyaWFsIDUKKy0KKy1kbmwgRnJvbSBKaW0gTWV5ZXJpbmcKKy0KKy1kbmwgRGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgaWYgYHN0cnVjdCB1dGltYnVmJyBpcyBkZWNsYXJlZCAtLQorLWRubCB1c3VhbGx5IGluIDx1dGltZS5oPi4KKy1kbmwgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLgorLQorLUFDX0RFRlVOKFtqbV9DSEVDS19UWVBFX1NUUlVDVF9VVElNQlVGXSwKKy1bCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3lzL3RpbWUuaCB1dGltZS5oKQorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1RJTUVdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgdXRpbWJ1Zl0sIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiwKKy0gICAgW0FDX1RSWV9DT01QSUxFKAorLSAgICAgIFsKKy0jaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCistIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorLSMgaW5jbHVkZSA8dGltZS5oPgorLSNlbHNlCistIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKy0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgorLSMgZWxzZQorLSMgIGluY2x1ZGUgPHRpbWUuaD4KKy0jIGVuZGlmCistI2VuZGlmCistI2lmZGVmIEhBVkVfVVRJTUVfSAorLSMgaW5jbHVkZSA8dXRpbWUuaD4KKy0jZW5kaWYKKy0gICAgICBdLAorLSAgICAgIFtzdGF0aWMgc3RydWN0IHV0aW1idWYgeDsgeC5hY3RpbWUgPSB4Lm1vZHRpbWU7XSwKKy0gICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzLAorLSAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubykKKy0gICAgXSkKKyAKKy0gIGlmIHRlc3QgJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiA9IHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfVVRJTUJVRiwgMSwKKy0gICAgICBbRGVmaW5lIGlmIHN0cnVjdCB1dGltYnVmIGlzIGRlY2xhcmVkIC0tIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorLSAgICAgICBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuIF0pCistICBmaQorLV0pCistIyB4YWxsb2MubTQgc2VyaWFsIDEKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrI3NlcmlhbCAxCisgCistQUNfREVGVU4oW2dsX1hBTExPQ10sCistWworLSAgZ2xfUFJFUkVRX1hNQUxMT0MKKy0gIGdsX1BSRVJFUV9YU1RSRFVQCistXSkKKytkbmwgRnJvbSBNdW1pdCBLaGFuIGFuZCBQYXVsIEVnZ2VydAorK2RubCBEZXRlcm1pbmUgd2hldGhlciBta2RpciBhY2NlcHRzIG9ubHkgb25lIGFyZ3VtZW50IGluc3RlYWQgb2YgdGhlIHVzdWFsIHR3by4KKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3htYWxsb2MuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1hNQUxMT0NdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19SRVFVSVJFKFtqbV9GVU5DX01BTExPQ10pCistICBBQ19SRVFVSVJFKFtqbV9GVU5DX1JFQUxMT0NdKQorLV0pCisrQUNfREVGVU4oW1BBVENIX0ZVTkNfTUtESVJfVEFLRVNfT05FX0FSR10sCisrICBbQUNfQ0hFQ0tfRlVOQ1MobWtkaXIpCisrICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnRdLAorKyAgICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZywKKysgICAgIFtwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPW5vCisrICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpciA9IHllczsgdGhlbgorKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICBdLAorKwkgIFtta2RpciAoIi4iLCAwKTtdLAorKwkgICwKKysJICBbQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAgICBdLAorKwkgICAgIFtta2RpciAoIi4iKTtdLAorKwkgICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9eWVzCisrCSAgKV0KKysJKQorKyAgICAgIGZpCisrICAgICBdCisrICAgKQorKyAgIGlmIHRlc3QgJHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShbTUtESVJfVEFLRVNfT05FX0FSR10sIDEsCisrICAgICAgIFtEZWZpbmUgaWYgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnQuXSkKKysgICBmaQorKyAgXQorKykKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzdHJkdXAuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1hTVFJEVVBdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistXSkKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbmZpZ3VyZQorKysrIHBhdGNoLTIuNS45L2NvbmZpZ3VyZQorQEAgLTEsMTEgKzEsMTAgQEAKKyAjISAvYmluL3NoCisgIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3IGZvciBwYXRjaCAyLjUuOS4KKysjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSBmb3IgcGF0Y2ggMi41LjkuCisgIworICMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1wYXRjaEBnbnUub3JnPi4KKyAjCistIyBDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgorLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworQEAgLTIyLDkgKzIxLDEwIEBACisgZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIHNldCAtbyBwb3NpeAorIGZpCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorLWlmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgYXNfdW5zZXQ9dW5zZXQKKyBlbHNlCisgICBhc191bnNldD1mYWxzZQorQEAgLTQzLDcgKzQzLDcgQEAKKyAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgICBMQ19URUxFUEhPTkUgTENfVElNRQorIGRvCistICBpZiAoc2V0ICt4OyB0ZXN0IC1uICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgICBlbHNlCisgICAgICRhc191bnNldCAkYXNfdmFyCitAQCAtMjIwLDE2ICsyMjAsMTcgQEAKKyBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgICBhc19ta2Rpcl9wPToKKyBlbHNlCisrICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICAgYXNfbWtkaXJfcD1mYWxzZQorIGZpCisgCisgYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKy1hc190cl9jcHA9InNlZCB5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKy1hc190cl9zaD0ic2VkIHklKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAKKyAjIElGUworQEAgLTY2OSw3ICs2NzAsNyBAQAorIAorICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorIGZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorLSAgICAgICAgICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCisrCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorIGRvCisgICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKyAgIGNhc2UgJGFjX3ZhbCBpbgorQEAgLTcwOSwxMCArNzEwLDEwIEBACisgICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gaXRzIHBhcmVudC4KKyAgIGFjX2NvbmZkaXI9YChkaXJuYW1lICIkMCIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0gICAgICAgICBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCistICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgXAorKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiQwIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC04MDQsOSArODA1LDkgQEAKKyAgIGNhdCA8PF9BQ0VPRgorIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKysJCQkgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KKysJCQkgIFtQUkVGSVhdCisgCisgQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCisgXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK0BAIC04OTYsMTIgKzg5Nyw0NSBAQAorICAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7CisgZXNhYworLSMgRG9uJ3QgYmxpbmRseSBwZXJmb3JtIGEgYGNkICIkYWNfZGlyIi8kYWNfZm9vICYmIHB3ZGAgc2luY2UgJGFjX2ZvbyBjYW4gYmUKKy0jIGFic29sdXRlLgorLWFjX2Fic19idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19idWlsZGRpciAmJiBwd2RgCistYWNfYWJzX3RvcF9idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICR7YWNfdG9wX2J1aWxkZGlyfS4gJiYgcHdkYAorLWFjX2Fic19zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfc3JjZGlyICYmIHB3ZGAKKy1hY19hYnNfdG9wX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY190b3Bfc3JjZGlyICYmIHB3ZGAKKysKKysjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKysjIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorK2Nhc2UgYHB3ZGAgaW4KKysuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysqKQorKyAgY2FzZSAiJGFjX2RpciIgaW4KKysgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKyAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysqKQorKyAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCisrICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3NyY2RpciBpbgorKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKysgICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKysgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKyAKKyAgICAgY2QgJGFjX2RpcgorICAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgorQEAgLTkxMiwxMyArOTQ2LDEzIEBACisgICAgICAgZWNobworICAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQorICAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuYWMgfHwKKy0gICAgICAgICAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KKysJICAgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgorICAgICAgIGVjaG8KKyAgICAgICAkYWNfY29uZmlndXJlIC0taGVscAorICAgICBlbHNlCisgICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgICBmaQorLSAgICBjZCAkYWNfcG9wZGlyCisrICAgIGNkICIkYWNfcG9wZGlyIgorICAgZG9uZQorIGZpCisgCitAQCAtOTI2LDEwICs5NjAsOSBAQAorIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgIGNhdCA8PFxfQUNFT0YKKyBwYXRjaCBjb25maWd1cmUgMi41LjkKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKKyAKKy1Db3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgorLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyBfQUNFT0YKK0BAIC05NDEsNyArOTc0LDcgQEAKKyBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorIAorIEl0IHdhcyBjcmVhdGVkIGJ5IHBhdGNoICRhc19tZSAyLjUuOSwgd2hpY2ggd2FzCistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisgCisgICAkICQwICRACisgCitAQCAtMTAxOCwxOSArMTA1MSwxOSBAQAorICAgICAyKQorICAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisgICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCistICAgICAgICBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisrCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgICBlbHNlCistICAgICAgICBjYXNlICRhY19hcmcgaW4KKy0gICAgICAgICAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCistICAgICAgICAgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKy0gICAgICAgICAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorLSAgICAgICAgICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKy0gICAgICAgICAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKy0gICAgICAgICAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CistICAgICAgICAgICAgZXNhYworLSAgICAgICAgICAgIDs7CistICAgICAgICAgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworLSAgICAgICAgZXNhYworKwljYXNlICRhY19hcmcgaW4KKysJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKysJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisrCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisrCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworKwllc2FjCisgICAgICAgZmkKKyAgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKKyAgICAgICAjIEdldCByaWQgb2YgdGhlIGxlYWRpbmcgc3BhY2UuCitAQCAtMTA2NCwxMiArMTA5NywxMiBAQAorICAgICBjYXNlIGAoYWNfc3BhY2U9JyInIicgJyInIic7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgICphY19zcGFjZT1cICopCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKKy0gICAgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCisrCSJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKKysJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSciJyInXFwyJyInIicvcCIKKyAgICAgICA7OworICAgICAqKQorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKysJInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICAgOzsKKyAgICAgZXNhYzsKKyB9CitAQCAtMTA5OCw3ICsxMTMxLDcgQEAKKyAgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgIGRvCisgCWV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorLSAgICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKysJZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICAgICBkb25lIHwgc29ydAorICAgICAgIGVjaG8KKyAgICAgZmkKK0BAIC0xMTE3LDcgKzExNTAsNyBAQAorICAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgfSA+JjUKKy0gIHJtIC1mIGNvcmUgY29yZS4qICouY29yZSAmJgorKyAgcm0gLWYgY29yZSAqLmNvcmUgJiYKKyAgIHJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgICAgICAnIDAKK0BAIC0xMTk3LDcgKzEyMzAsNyBAQAorICMgdmFsdWUuCisgYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCisgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8CistICAgICAgICAgICAgICAgc2VkIC1uICdzL15hY19lbnZfXChbYS16QS1aXzAtOV0qXClfc2V0PS4qL1wxL3AnYDsgZG8KKysJICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisgICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKyAgIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorQEAgLTEyMTQsMTMgKzEyNDcsMTMgQEAKKyAgICAgLCk7OworICAgICAqKQorICAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKy0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CisgZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorIGVjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KKy0gICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisrCWFjX2NhY2hlX2NvcnJ1cHRlZD06CisgICAgICAgZmk7OworICAgZXNhYworICAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorQEAgLTE2MjksNyArMTY2Miw2IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorIAorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xNjQ5LDggKzE2ODEsOCBAQAorICMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyAjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisgIyBvZiBleGVleHQuCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0Li4uICRFQ0hPX0MiID4mNgorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNgorIGFjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rX2RlZmF1bHRcIiIpID4mNQorICAgKGV2YWwgJGFjX2xpbmtfZGVmYXVsdCkgMj4mNQorQEAgLTE2NzAsMjMgKzE3MDIsMjMgQEAKKyAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkKKy0gICAgICAgIDs7CisrCTs7CisgICAgIGNvbmZ0ZXN0LiRhY19leHQgKQorLSAgICAgICAgIyBUaGlzIGlzIHRoZSBzb3VyY2UgZmlsZS4KKy0gICAgICAgIDs7CisrCSMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCisrCTs7CisgICAgIFthYl0ub3V0ICkKKy0gICAgICAgICMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CistICAgICAgICAjIGNlcnRhaW5seSByaWdodC4KKy0gICAgICAgIGJyZWFrOzsKKysJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKysJIyBjZXJ0YWlubHkgcmlnaHQuCisrCWJyZWFrOzsKKyAgICAgKi4qICkKKy0gICAgICAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLSAgICAgICAgIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCistICAgICAgICAjIGJ1dCBpdCB3b3VsZCBiZSBjb29sIHRvIGZpbmQgb3V0IGlmIGl0J3MgdHJ1ZS4gIERvZXMgYW55Ym9keQorLSAgICAgICAgIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCistICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CistICAgICAgICBicmVhazs7CisrCWFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorKwkjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKKysJIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKKysJIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCisrCWV4cG9ydCBhY19jdl9leGVleHQKKysJYnJlYWs7OworICAgICAqICkKKy0gICAgICAgIGJyZWFrOzsKKysJYnJlYWs7OworICAgZXNhYworIGRvbmUKKyBlbHNlCitAQCAtMTc2MCw4ICsxNzkyLDggQEAKKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLSAgICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CistICAgICAgICAgIGJyZWFrOzsKKysJICBleHBvcnQgYWNfY3ZfZXhlZXh0CisrCSAgYnJlYWs7OworICAgICAqICkgYnJlYWs7OworICAgZXNhYworIGRvbmUKK0BAIC0xNzg2LDcgKzE4MTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTgzNyw3ICsxODY4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE4NTcsMTEgKzE4ODcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xODc0LDcgKzE5MTMsNyBAQAorIAorIGFjX2NvbXBpbGVyX2dudT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKyAKKyBmaQorQEAgLTE4OTAsNyArMTkyOSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xOTA3LDExICsxOTQ1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTkyNCw3ICsxOTcxLDcgQEAKKyAKKyBhY19jdl9wcm9nX2NjX2c9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgorQEAgLTE5NTEsNyArMTk5OCw2IEBACisgICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KKyBhY19zYXZlX0NDPSRDQworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xOTc5LDYgKzIwMjUsMTYgQEAKKyAgIHZhX2VuZCAodik7CisgICByZXR1cm4gczsKKyB9CisrCisrLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKysgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisrICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisrICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkMSBpcyBhZGRlZCB0byBnZXQKKysgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisrICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisrICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQxLiAgKi8KKytpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworKworIGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworIHN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9OworIHN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworQEAgLTIwMDUsMTEgKzIwNjEsMjAgQEAKKyAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjAyMiw3ICsyMDg3LDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBkb25lCisgcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisgQ0M9JGFjX3NhdmVfQ0MKK0BAIC0yMDUwLDE5ICsyMTE1LDI3IEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKKy0gICAnJ1wKKy0gICAnI2luY2x1ZGUgPHN0ZGxpYi5oPicgXAorKyAgICcnIFwKKyAgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAorQEAgLTIwNzAsMTQgKzIxNDMsMTMgQEAKKyAgICAndm9pZCBleGl0IChpbnQpOycKKyBkbworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorICRhY19kZWNsYXJhdGlvbgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyBpbnQKKyBtYWluICgpCisgeworQEAgLTIwODgsMTEgKzIxNjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yMTA1LDkgKzIxODYsOCBAQAorIAorIGNvbnRpbnVlCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjEyNCwxMSArMjIwNCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTIxNDAsNyArMjIyOSw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGRvbmUKKyBybSAtZiBjb25mdGVzdCoKKyBpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCitAQCAtMjE1NCw3ICsyMjQzLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgYWNfZXh0PWMKKyBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK0BAIC0yMTg5LDcgKzIyNzgsNiBAQAorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIyMDAsNyArMjI4OCw3IEBACisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorKwkJICAgICBTeW50YXggZXJyb3IKKyBfQUNFT0YKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCitAQCAtMjIxMiw2ICsyMzAwLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIyMzIsNyArMjMyMSw2IEBACisgICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjI1MCw2ICsyMzM4LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIyOTYsNyArMjM4NSw2IEBACisgICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjMwNyw3ICsyMzk1LDcgQEAKKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCisrCQkgICAgIFN5bnRheCBlcnJvcgorIF9BQ0VPRgorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKK0BAIC0yMzE5LDYgKzI0MDcsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjMzOSw3ICsyNDI4LDYgQEAKKyAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMzU3LDYgKzI0NDUsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjQzMSw2ICsyNTIwLDcgQEAKKyAjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworICMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworICMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKysjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyAjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgorQEAgLTI0NDcsNiArMjUzNyw3IEBACisgY2FzZSAkYXNfZGlyLyBpbgorICAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKyAgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorKyAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCisgICAvdXNyL3VjYi8qICkgOzsKKyAgICopCisgICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCitAQCAtMjQ1NCwyMCArMjU0NSwyMCBAQAorICAgICAjIGJ5IGRlZmF1bHQuCisgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gICAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCistICAgICAgICAgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCistICAgICAgICAgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICAgICAgICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKy0gICAgICAgICAgICA6CistICAgICAgICAgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKy0gICAgICAgICAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgICAgICAgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCistICAgICAgICAgICAgOgorLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorLSAgICAgICAgICAgIGJyZWFrIDMKKy0gICAgICAgICAgZmkKKy0gICAgICAgIGZpCisrCWlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisrCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKysJICAgIDoKKysJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKysJICAgIDoKKysJICBlbHNlCisrCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisrCSAgICBicmVhayAzCisrCSAgZmkKKysJZmkKKyAgICAgICBkb25lCisgICAgIGRvbmUKKyAgICAgOzsKK0BAIC0yNDk5LDcgKzI1OTAsNyBAQAorIAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2Cistc2V0IGR1bW15ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5LC4vKy0sX19wXywnYAorK3NldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSw6Li8rLSxfX19wXywnYAorIGlmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjU5Niw3ICsyNjg3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFJWCIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQUlYLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNjI4LDcgKzI3MTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjY0OSwxMSArMjczOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTI2NjYsMTIgKzI3NjQsMTEgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjY5Myw3ICsyNzkwLDYgQEAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI3MTgsNyArMjgxNCw2IEBACisgICA6CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI3MzAsOSArMjgyNSw5IEBACisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorICNlbHNlCisgIyBkZWZpbmUgSVNMT1dFUihjKSBcCistICAgICAgICAgICAgICAgICAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKysJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorICNlbmRpZgorIAorQEAgLTI3NDMsNyArMjgzOCw3IEBACisgICBpbnQgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorLSAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgIGV4aXQoMik7CisgICBleGl0ICgwKTsKKyB9CitAQCAtMjc2OCw3ICsyODYzLDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGZpCitAQCAtMjc5Myw3ICsyODg4LDcgQEAKKyAKKyAKKyBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKy0gICAgICAgICAgICAgICAgICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisrCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKKyBkbworIGFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitAQCAtMjgwMiw3ICsyODk3LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI4MTQsMTEgKzI5MDgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yODMxLDcgKzI5MzQsNyBAQAorIAorIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTI4NTgsNyArMjk2MSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBtaW5peC9jb25maWcuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI4NjksMTEgKzI5NzEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yODg2LDcgKzI5OTcsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTI4OTQsNyArMzAwNSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yOTEyLDYgKzMwMjIsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjkzMSwzMyArMzA0MiwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtMzAwMCwxNSArMzExMCwxNSBAQAorIGZpCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc3RyZXJyb3IiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzdHJlcnJvci4uLiAkRUNIT19DIiA+JjYKKy1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9zdHJlcnJvcitzZXR9IiA9IHNldDsgdGhlbgorKworKyAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJlcnJvciBpbiAtbGNwb3NpeCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RyZXJyb3IgaW4gLWxjcG9zaXguLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworLWFjX2N2X3NlYXJjaF9zdHJlcnJvcj1ubworKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworK0xJQlM9Ii1sY3Bvc2l4ICAkTElCUyIKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzAzMiw3OSArMzE0Miw0MyBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBhY19jdl9zZWFyY2hfc3RyZXJyb3I9Im5vbmUgcmVxdWlyZWQiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPSBubzsgdGhlbgorLSAgZm9yIGFjX2xpYiBpbiBjcG9zaXg7IGRvCistICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKy0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciBzdHJlcnJvciAoKTsKKy1pbnQKKy1tYWluICgpCisteworLXN0cmVycm9yICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgYWNfY3Zfc2VhcmNoX3N0cmVycm9yPSItbCRhY19saWIiCistYnJlYWsKKysgIGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3I9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisrYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgZG9uZQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKyBmaQorLUxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciIgPiY2CisraWYgdGVzdCAkYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciA9IHllczsgdGhlbgorKyAgTElCUz0iJExJQlMgLWxjcG9zaXgiCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA+JjYKKy1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiAhPSBubzsgdGhlbgorLSAgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX2N2X3NlYXJjaF9zdHJlcnJvciAkTElCUyIKKyAKKy1maQorKworIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sYXJnZWZpbGUgb3IgLS1kaXNhYmxlLWxhcmdlZmlsZSB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGFyZ2VmaWxlK3NldH0iID0gc2V0OyB0aGVuCitAQCAtMzEyNCw4ICszMTk4LDcgQEAKKyAgICAgICAgd2hpbGUgOjsgZG8KKyAgICAgIAkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKyAgICAgIAkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorLSAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKysJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMxNTAsMTEgKzMyMjMsMjAgQEAKKyBfQUNFT0YKKyAgICAgIAkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzE2NiwxNSArMzI0OCwyNCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICAgICAgCSBDQz0iJENDIC1uMzIiCisgICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMxODYsOCArMzI3Nyw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLSAgICAgICAgIGJyZWFrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKysJIGJyZWFrCisgICAgICAgIGRvbmUKKyAgICAgICAgQ0M9JGFjX3NhdmVfQ0MKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQEAgLTMyMDcsNyArMzI5OCw2IEBACisgICB3aGlsZSA6OyBkbworICAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9bm8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMjMyLDExICszMzIyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzI0OCw5ICszMzQ3LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzI3NiwxMSArMzM3NCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMyOTIsNyArMzM5OSw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYnJlYWsKKyBkb25lCisgZmkKK0BAIC0zMzE0LDcgKzM0MjEsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19sYXJnZV9maWxlcz1ubworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMzMzksMTEgKzM0NDUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMzU1LDkgKzM0NzAsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMzgzLDExICszNDk3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzM5OSw3ICszNTIyLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBicmVhaworIGRvbmUKKyBmaQorQEAgLTM0NDMsNyArMzU2Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNTA2LDExICszNjI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzUyMyw3ICszNjU0LDcgQEAKKyAKKyBhY19jdl9jX2NvbnN0PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNgorQEAgLTM1NTAsNyArMzY4MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNTcwLDExICszNzAwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzU4Nyw3ICszNzI2LDcgQEAKKyAKKyBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC0zNjEwLDcgKzM3NDksNiBAQAorICAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCisgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzYzNCwxMSArMzc3MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzY1MCwxMiArMzc5NywxMiBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gbm87IHRoZW4KKyAgIGZvciBhY19saWIgaW4gZGlyOyBkbworICAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNjc5LDExICszODI2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNjk2LDcgKzM4NTIsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGRvbmUKKyBmaQorIExJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworQEAgLTM3MTcsNyArMzg3NCw2IEBACisgICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKyBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNzQxLDExICszODk3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNzU3LDEyICszOTIyLDEyIEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSBubzsgdGhlbgorICAgZm9yIGFjX2xpYiBpbiB4OyBkbworICAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNzg2LDExICszOTUxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zODAzLDcgKzM5NzcsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGRvbmUKKyBmaQorIExJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworQEAgLTM4MjMsNyArMzk5OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zODQ0LDExICs0MDE4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzg2MSwxMiArNDA0NCwxMSBAQAorIAorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zODg4LDcgKzQwNzAsNiBAQAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzkxMyw3ICs0MDk0LDYgQEAKKyAgIDoKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzkyNSw5ICs0MTA1LDkgQEAKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisgI2Vsc2UKKyAjIGRlZmluZSBJU0xPV0VSKGMpIFwKKy0gICAgICAgICAgICAgICAgICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKy0gICAgICAgICAgICAgICAgICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisgI2VuZGlmCisgCitAQCAtMzkzOCw3ICs0MTE4LDcgQEAKKyAgIGludCBpOworICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCistICAgICAgICB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKysJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICAgZXhpdCgyKTsKKyAgIGV4aXQgKDApOworIH0KK0BAIC0zOTYzLDcgKzQxNDMsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZmkKK0BAIC0zOTk5LDcgKzQxNzksNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDAxMCwxMSArNDE4OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQwMjcsNyArNDIxNSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDAzNSw3ICs0MjIzLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MDUzLDYgKzQyNDAsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDA3MiwzMyArNDI2MCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworKyAgICA7OworKyAgbm86eWVzOiogKQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLSAgbm86eWVzICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQxMDksNyArNDI5Niw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDEzMSw3ICs0MzE4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQxNTEsMTEgKzQzMzcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MTY4LDcgKzQzNjMsNyBAQAorIAorIGFjX2N2X3R5cGVfbW9kZV90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tb2RlX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX21vZGVfdCIgPiY2CitAQCAtNDE4OCw3ICs0MzgzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQyMDgsMTEgKzQ0MDIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MjI1LDcgKzQ0MjgsNyBAQAorIAorIGFjX2N2X3R5cGVfb2ZmX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX29mZl90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmZfdCIgPiY2CitAQCAtNDI0NSw3ICs0NDQ4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQyNjUsMTEgKzQ0NjcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MjgyLDcgKzQ0OTMsNyBAQAorIAorIGFjX2N2X3R5cGVfcGlkX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3BpZF90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9waWRfdCIgPiY2CitAQCAtNDMwMiw3ICs0NTEzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQzMjksMTEgKzQ1MzksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MzQ2LDcgKzQ1NjUsNyBAQAorIAorIGFjX2N2X3R5cGVfc2lnbmFsPWludAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaWduYWwiID4mNgorQEAgLTQzNjIsNyArNDU4MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MzgyLDExICs0NjAwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDM5OSw3ICs0NjI2LDcgQEAKKyAKKyBhY19jdl90eXBlX3NpemVfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2l6ZV90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaXplX3QiID4mNgorQEAgLTQ0MTksNyArNDY0Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NDY4LDExICs0Njk0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDQ4NSw3ICs0NzIwLDcgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNgorQEAgLTQ0OTUsNyArNDczMCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NTE1LDExICs0NzQ5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDUzMiw3ICs0Nzc1LDcgQEAKKyAKKyBhY19jdl90eXBlX19Cb29sPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9fQm9vbCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX0Jvb2wiID4mNgorQEAgLTQ1ODksNyArNDgzMiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NjAwLDExICs0ODQyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDYxNyw3ICs0ODY4LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC00NjI1LDcgKzQ4NzYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ2NDMsNiArNDg5Myw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC00NjYyLDMzICs0OTEzLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNDY5OSw3ICs0OTQ5LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC00NzMzLDcgKzQ5ODMsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDc0NCwxMSArNDk5MywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ3NjEsNyArNTAxOSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDc2OSw3ICs1MDI3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00Nzg3LDYgKzUwNDQsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDgwNiwzMyArNTA2NCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQ4NDMsNyArNTEwMCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDg2NSw3ICs1MTIyLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ4ODYsMTEgKzUxNDIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00OTAzLDcgKzUxNjgsNyBAQAorIAorIGFjX2N2X2hlYWRlcl90aW1lPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGltZSIgPiY2CitAQCAtNDkzMyw3ICs1MTk4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ5NjQsMTEgKzUyMjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00OTgxLDcgKzUyNTQsNyBAQAorIAorIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiIgPiY1CitAQCAtNTAwNSw3ICs1Mjc4LDYgQEAKKyAgIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTA0NSw3ICs1MzE3LDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCIgPiY1CitAQCAtNTA3Niw3ICs1MzQ4LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUwODcsMTEgKzUzNTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MTA0LDcgKzUzODQsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTUxMTIsNyArNTM5Miw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTEzMCw2ICs1NDA5LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTUxNDksMzMgKzU0MjksMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC01MTg2LDcgKzU0NjUsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTUyMjAsNyArNTQ5OSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01MjMxLDExICs1NTA5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTI0OCw3ICs1NTM1LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01MjU2LDcgKzU1NDMsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUyNzQsNiArNTU2MCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01MjkzLDMzICs1NTgwLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTMzMCw3ICs1NjE2LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01MzY0LDcgKzU2NTAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTM3NSwxMSArNTY2MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUzOTIsNyArNTY4Niw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTQwMCw3ICs1Njk0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NDE4LDYgKzU3MTEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTQzNywzMyArNTczMSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTU0NzQsNyArNTc2Nyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTQ5Nyw3ICs1NzkwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU1MTcsMTEgKzU4MDksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NTM0LDcgKzU4MzUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRlbnY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY2CitAQCAtNTU2Miw3ICs1ODYzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU1ODIsMTEgKzU4ODIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NTk5LDcgKzU5MDgsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9tYWxsb2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY2CitAQCAtNTYyOCw3ICs1OTM3LDYgQEAKKyBlbHNlCisgCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTY0NywxMSArNTk1NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU2NjQsNyArNTk4MSw3IEBACisgCisgYWNfY3Zfd2luX29yX2Rvcz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dpbl9vcl9kb3MiID4mNQorQEAgLTU3MTQsNyArNjAzMSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NzI1LDExICs2MDQxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTc0Miw3ICs2MDY3LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01NzUwLDcgKzYwNzUsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU3NjgsNiArNjA5Miw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01Nzg3LDMzICs2MTEyLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTgyNCw3ICs2MTQ4LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01ODcyLDcgKzYxOTYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTkwNSwxMSArNjIyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTkyMiw3ICs2MjU0LDggQEAKKyAKKyBqbV9jdl9zdHJ1Y3RfZGlyZW50X2RfaW5vPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgCisgZmkKK0BAIC02MDExLDIxICs2MzQ0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTYwNTYsMTEgKzYzOTYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYwNzMsNyArNjQyMiw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjEyNiwyMSArNjQ3NiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02MTcxLDExICs2NTI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MTg4LDcgKzY1NTQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTYyMDMsMjEgKzY1NzAsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIF9kb3BybnQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBfZG9wcm50LgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgX2RvcHJudCBpbm5vY3VvdXNfX2RvcHJudAorKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBfZG9wcm50ICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiBfZG9wcm50CisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjI0OCwxMSArNjYyMiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjI2NSw3ICs2NjQ4LDggQEAKKyAKKyBhY19jdl9mdW5jX19kb3BybnQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX19kb3BybnQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX19kb3BybnQiID4mNgorQEAgLTYyODgsMTMgKzY2NzIsMTIgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyBpbnQKKyBtYWluICgpCisgeworQEAgLTYzMDUsMTEgKzY2ODgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYzMjIsMTIgKzY3MTQsMjAgQEAKKyAKKyBhY19jdl9saWJfZXJyb3JfYXRfbGluZT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4mNgorIGlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKy0gIExJQk9CSlM9IiRMSUJPQkpTIGVycm9yLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICJlcnJvci4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgZXJyb3IuJGFjX29iamV4dCIgICB8IFwKKysgICAgImVycm9yLiRhY19vYmpleHQgIiogfCBcCisrICAqIiBlcnJvci4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTIGVycm9yLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgCisgCitAQCAtNjM0MywyMSArNjc0MywyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02Mzg4LDExICs2Nzk1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NDA1LDcgKzY4MjEsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTY0MjMsNyArNjg0MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NDQzLDExICs2ODU5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjQ2MCw3ICs2ODg1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3I9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3IiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3IiID4mNgorQEAgLTY0ODYsNyArNjkxMSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NTA2LDExICs2OTMwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjUyMyw3ICs2OTU2LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3Jfcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IiID4mNgorQEAgLTY1NTMsMjEgKzY5ODYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjU5OCwxMSArNzAzOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjYxNSw3ICs3MDY0LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02NjM2LDcgKzcwODYsNiBAQAorICAgICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPW5vCisgICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yID0geWVzOyB0aGVuCisgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY2NTcsMTEgKzcxMDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NjczLDcgKzcxMzEsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZWxzZQorICAgICAgICMgc3RyZXJyb3JfciBpcyBub3QgZGVjbGFyZWQuICBDaG9vc2UgYmV0d2VlbgorICAgICAgICMgc3lzdGVtcyB0aGF0IGhhdmUgcmVsYXRpdmVseSBpbmFjY2Vzc2libGUgZGVjbGFyYXRpb25zIGZvciB0aGUKK0BAIC02Njg1LDcgKzcxNDMsNiBAQAorICAgOgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NzIxLDcgKzcxNzgsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyAgICAgZmkKKyAKK0BAIC02NzQ5LDIxICs3MjA2LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTY3OTQsMTEgKzcyNTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY4MTEsNyArNzI4NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjgyMSw3ICs3Mjk1LDE0IEBACisgX0FDRU9GCisgCisgZWxzZQorLSAgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyBkb25lCisgCitAQCAtNjg1NSw3ICs3MzM2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY4NjYsMTEgKzczNDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02ODgzLDcgKzczNzIsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTY4OTEsNyArNzM4MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjkwOSw2ICs3Mzk3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTY5MjgsMzMgKzc0MTcsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC02OTY1LDcgKzc0NTMsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTY5ODksNyArNzQ3Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03MDUzLDIxICs3NTQwLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTcwOTgsMTEgKzc1OTIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTcxMTUsNyArNzYxOCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNzEyNSw3ICs3NjI5LDE0IEBACisgX0FDRU9GCisgCisgZWxzZQorLSAgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyBkb25lCisgCitAQCAtNzE2Myw3ICs3Njc0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTcxNzQsMTEgKzc2ODQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03MTkxLDcgKzc3MTAsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTcxOTksNyArNzcxOCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzIxNyw2ICs3NzM1LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTcyMzYsMzMgKzc3NTUsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03MjczLDcgKzc3OTEsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTcyOTcsNyArNzgxNSw2IEBACisgICBhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm8KKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzMzNyw3ICs3ODU0LDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+JjUKK0BAIC03MzUzLDcgKzc4NzAsMTQgQEAKKyAjZGVmaW5lIEhBVkVfTUFMTE9DIDAKKyBfQUNFT0YKKyAKKy0gICBMSUJPQkpTPSIkTElCT0JKUyBtYWxsb2MuJGFjX29iamV4dCIKKysgICBjYXNlICRMSUJPQkpTIGluCisrICAgICJtYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICoiIG1hbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAibWFsbG9jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiBtYWxsb2MuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBtYWxsb2MuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgCisgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyAjZGVmaW5lIG1hbGxvYyBycGxfbWFsbG9jCitAQCAtNzM4OCw3ICs3OTEyLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTczOTksMTEgKzc5MjIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NDE2LDcgKzc5NDgsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc0MjQsNyArNzk1Niw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzQ0Miw2ICs3OTczLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc0NjEsMzMgKzc5OTMsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03NDk4LDcgKzgwMjksNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTc1MjIsNyArODA1Myw2IEBACisgICBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc1NjIsNyArODA5Miw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA+JjUKK0BAIC03NTc4LDcgKzgxMDgsMTQgQEAKKyAjZGVmaW5lIEhBVkVfUkVBTExPQyAwCisgX0FDRU9GCisgCistICAgTElCT0JKUz0iJExJQk9CSlMgcmVhbGxvYy4kYWNfb2JqZXh0IgorKyAgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgInJlYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICoiIHJlYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICAgInJlYWxsb2MuJGFjX29iamV4dCAiKiB8IFwKKysgICoiIHJlYWxsb2MuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyByZWFsbG9jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIAorIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisgI2RlZmluZSByZWFsbG9jIHJwbF9yZWFsbG9jCitAQCAtNzYxOSw3ICs4MTU2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc2MzAsMTEgKzgxNjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NjQ3LDcgKzgxOTIsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc2NTUsNyArODIwMCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzY3Myw2ICs4MjE3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc2OTIsMzMgKzgyMzcsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03NzI5LDcgKzgyNzMsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTc3NzIsNyArODMxNiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NzgzLDExICs4MzI2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzgwMCw3ICs4MzUyLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03ODA4LDcgKzgzNjAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc4MjYsNiArODM3Nyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03ODQ1LDMzICs4Mzk3LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzg4Miw3ICs4NDMzLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03OTE2LDcgKzg0NjcsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzkyNywxMSArODQ3NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc5NDQsNyArODUwMyw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzk1Miw3ICs4NTExLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03OTcwLDYgKzg1MjgsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzk4OSwzMyArODU0OCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTgwMjYsNyArODU4NCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtODA1MywyMSArODYxMSwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04MDk4LDExICs4NjYzLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04MTE1LDcgKzg2ODksOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTgxMzksMjEgKzg3MTQsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODE4NCwxMSArODc2NiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODIwMSw3ICs4NzkyLDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04MjQxLDcgKzg4MzMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODI1OSwxMSArODg1MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgyNzYsNyArODg3Niw3IEBACisgCisgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjYKK0BAIC04MzAwLDcgKzg5MDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODMxNywxMSArODkxNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODMzNCw3ICs4OTQyLDggQEAKKyAKKyBqbV9jdl9mdW5jX21icnRvd2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRqbV9jdl9mdW5jX21icnRvd2MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRqbV9jdl9mdW5jX21icnRvd2MiID4mNgorQEAgLTgzNDgsNjkgKzg5NTcsNDY1IEBACisgCisgCisgCistCistCistCistCistZm9yIGFjX2Z1bmMgaW4gcGF0aGNvbmYKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2CistaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGZyZWUgaXMgZGVjbGFyZWQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBmcmVlIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2ZyZWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLXsKKy0jZW5kaWYKKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCistY2hva2UgbWUKKy0jZWxzZQorLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworLSNlbmRpZgorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy0KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisrI2lmbmRlZiBmcmVlCisrICBjaGFyICpwID0gKGNoYXIgKikgZnJlZTsKKysjZW5kaWYKKysKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9oYXZlX2RlY2xfZnJlZT15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9oYXZlX2RlY2xfZnJlZT1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUiID4mNgorK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9mcmVlID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUUgMQorK19BQ0VPRgorKworKworK2Vsc2UKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfREVDTF9GUkVFIDAKKytfQUNFT0YKKysKKysKKytmaQorKworKworKworKworKworKyAgOgorKworKworKworKworKworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRib29sX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysJICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorKwkgICNpZm5kZWYgYm9vbAorKwkgICAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgdHJ1ZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiB0cnVlICE9IDEKKysJICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKysJICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysKKysJICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKysKKysJICBjaGFyIGFbdHJ1ZSA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07CisrCSAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworKwkgIGNoYXIgZFsoYm9vbCkgLTAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKysJICBib29sIGUgPSAmczsKKysJICBjaGFyIGZbKF9Cb29sKSAtMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKysJICBjaGFyIGdbdHJ1ZV07CisrCSAgY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKysJICBjaGFyIGlbc2l6ZW9mIHMudF07CisrCisraW50CisrbWFpbiAoKQorK3sKKysgcmV0dXJuICFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X2hlYWRlcl9zdGRib29sX2g9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2CisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfQm9vbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0Jvb2wuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl90eXBlX19Cb29sK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmICgoX0Jvb2wgKikgMCkKKysgIHJldHVybiAwOworK2lmIChzaXplb2YgKF9Cb29sKSkKKysgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3R5cGVfX0Jvb2w9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3ZfdHlwZV9fQm9vbD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX19Cb29sIiA+JjYKKytpZiB0ZXN0ICRhY19jdl90eXBlX19Cb29sID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9fQk9PTCAxCisrX0FDRU9GCisrCisrCisrZmkKKysKKysgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKKytfQUNFT0YKKysKKysgICBmaQorKworKyAgOgorKworKworKworKworKworKworKworKworKworKworK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9zdGF0X25zZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3N0YXRfbnNlYz15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9zdGF0X25zZWM9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zdGF0X25zZWMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zdGF0X25zZWMiID4mNgorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCisrX0FDRU9GCisrCisrICAgZmkKKysKKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3Zfc3RhdF90aW1ldmFsK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrCSAgI2luY2x1ZGUgPHRpbWUuaD4KKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiBzdC5zdF9hdGltLnR2X25zZWMgKyBzdC5zdF9tdGltLnR2X25zZWMgKyBzdC5zdF9jdGltLnR2X25zZWM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3Zfc3RhdF90aW1ldmFsPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3N0YXRfdGltZXZhbD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0YXRfdGltZXZhbCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N0YXRfdGltZXZhbCIgPiY2CisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1RBVF9USU1FVkFMIDEKKytfQUNFT0YKKysKKysgICBmaQorKworKworKworKworKworK2ZvciBhY19mdW5jIGluIHBhdGhjb25mCisrZG8KKythc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgorK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKysgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisrICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKysvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKyt7CisrI2VuZGlmCisrLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrY2hhciAkYWNfZnVuYyAoKTsKKysvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisrICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisrICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworKyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorK2Nob2tlIG1lCisrI2Vsc2UKKytjaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKKysjZW5kaWYKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gZiAhPSAkYWNfZnVuYzsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NDIzLDcgKzk0MjgsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTg0NTQsNyArOTQ2MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NDY1LDExICs5NDcwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODQ4Miw3ICs5NDk2LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC04NDkwLDcgKzk1MDQsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg1MDgsNiArOTUyMSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC04NTI3LDMzICs5NTQxLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtODU2NCw3ICs5NTc3LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC04NTg3LDcgKzk2MDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODYwNywxMSArOTYxOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg2MjQsNyArOTY0NSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZyZWU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjYKK0BAIC04NjQ4LDcgKzk2NjksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODY2OCwxMSArOTY4OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg2ODUsNyArOTcxNCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2dldGVudj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRlbnYiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjYKK0BAIC04NzA5LDcgKzk3MzgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODcyOSwxMSArOTc1NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg3NDYsNyArOTc4Myw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9tYWxsb2MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjYKK0BAIC04NzcwLDcgKzk4MDcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODc5MCwxMSArOTgyNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg4MDcsNyArOTg1Miw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX21rdGVtcD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9ta3RlbXAiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWt0ZW1wIiA+JjYKK0BAIC04ODQ5LDIxICs5ODk0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTg4OTQsMTEgKzk5NDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg5MTEsNyArOTk3Miw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtODkzNCwyMSArOTk5NiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04OTc5LDExICsxMDA0OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODk5Niw3ICsxMDA3NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtOTAwNiw3ICsxMDA4NSwxNCBAQAorIF9BQ0VPRgorIAorIGVsc2UKKy0gIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgZG9uZQorIAorQEAgLTkwMTksNyArMTAxMDUsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPW5vCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTAzNiwxMSArMTAxMjEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MDUyLDkgKzEwMTQ2LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTA3MiwxMSArMTAxNjUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MDg4LDcgKzEwMTkwLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBicmVhaworIGRvbmUKKyBmaQorQEAgLTkxMTIsNyArMTAyMTQsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTEyOSwxMSArMTAyMzAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkxNDYsNyArMTAyNTYsOCBAQAorIAorIGFjX2N2X2Z1bmNfZnNlZWtvPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19mc2Vla28iID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2ZzZWVrbyIgPiY2CitAQCAtOTE2NSw3ICsxMDI3Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MTg1LDExICsxMDI5NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkyMDIsNyArMTAzMjEsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCIgPiY2CitAQCAtOTIzMCw3ICsxMDM0OSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MjUwLDExICsxMDM2OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkyNjcsNyArMTAzOTQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPiY2CitAQCAtOTI5NSw3ICsxMDQyMiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MzE1LDExICsxMDQ0MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkzMzIsNyArMTA0NjcsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmVycm9yX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPiY2CitAQCAtOTM2MCw3ICsxMDQ5NSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MzgwLDExICsxMDUxNCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkzOTcsNyArMTA1NDAsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZCIgPiY2CitAQCAtOTQyNSw3ICsxMDU2OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NDQ1LDExICsxMDU4NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk0NjIsNyArMTA2MTMsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY2CitAQCAtOTQ5MCw3ICsxMDY0MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NTEwLDExICsxMDY2MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk1MjcsNyArMTA2ODYsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZCIgPiY2CitAQCAtOTU1NSw3ICsxMDcxNCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NTc1LDExICsxMDczMywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk1OTIsNyArMTA3NTksNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPiY2CitAQCAtOTYyMCw3ICsxMDc4Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NjQwLDExICsxMDgwNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk2NTcsNyArMTA4MzIsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZCIgPiY2CitAQCAtOTY4NSw3ICsxMDg2MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NzA1LDExICsxMDg3OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk3MjIsNyArMTA5MDUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9md3JpdGVfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgPiY2CitAQCAtOTc1MCw3ICsxMDkzMyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NzcwLDExICsxMDk1MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk3ODcsNyArMTA5NzgsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgPiY2CitAQCAtOTgxNSw3ICsxMTAwNiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05ODM1LDExICsxMTAyNSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk4NTIsNyArMTEwNTEsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZCIgPiY2CitAQCAtOTg4MCw3ICsxMTA3OSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05OTAwLDExICsxMTA5OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk5MTcsNyArMTExMjQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZCIgPiY2CitAQCAtOTk0NSw3ICsxMTE1Miw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05OTY1LDExICsxMTE3MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk5ODIsNyArMTExOTcsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZCIgPiY2CitAQCAtMTAwNzUsNyArMTEyOTAsNiBAQAorICAgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDExNSw3ICsxMTMyOSw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQiID4mNQorQEAgLTEwMTQ2LDcgKzExMzYwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMTU3LDExICsxMTM3MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwMTc0LDcgKzExMzk2LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC0xMDE4Miw3ICsxMTQwNCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTAyMDAsNiArMTE0MjEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMTAyMTksMzMgKzExNDQxLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtMTAyNTYsNyArMTE0NzcsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTEwMjc3LDcgKzExNDk4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMzAwLDExICsxMTUyMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTAzMTcsNyArMTE1NDYsOCBAQAorIAorIGFjX2N2X2Z1bmNfc2V0bW9kZV9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NldG1vZGVfZG9zIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zZXRtb2RlX2RvcyIgPiY2CitAQCAtMTAzMzgsMjEgKzExNTY4LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTEwMzgzLDExICsxMTYyMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA0MDAsNyArMTE2NDYsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTEwNDE1LDIxICsxMTY2MiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgX2RvcHJudCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIF9kb3BybnQuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSBfZG9wcm50IGlubm9jdW91c19fZG9wcm50CisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF9kb3BybnQgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmIF9kb3BybnQKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDQ2MCwxMSArMTE3MTQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNDc3LDcgKzExNzQwLDggQEAKKyAKKyBhY19jdl9mdW5jX19kb3BybnQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX19kb3BybnQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX19kb3BybnQiID4mNgorQEAgLTEwNTAzLDIxICsxMTc2NywyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDU0OCwxMSArMTE4MTksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNTY1LDcgKzExODQ1LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC0xMDU4NSw3ICsxMTg2Niw2IEBACisgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPW5vCisgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpciA9IHllczsgdGhlbgorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNjA1LDExICsxMTg4NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNjIxLDcgKzExOTEwLDYgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNjQxLDExICsxMTkyOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNjU4LDEwICsxMTk1NSwxMCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBmaQorIAorIAorQEAgLTEwNjg2LDcgKzExOTgzLDYgQEAKKyBlbHNlCisgCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTA3MDUsMTEgKzEyMDAxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA3MjIsNyArMTIwMjcsNyBAQAorIAorIGFjX2N2X3dpbl9vcl9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93aW5fb3JfZG9zIiA+JjUKK0BAIC0xMDgzNCwxMyArMTIxMzksMTMgQEAKKyAgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisgICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzLycvJ1xcXFwnJy9nOworLSAgICAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisrCSJzLycvJ1xcXFwnJy9nOworKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgICA7OworICAgICAqKQorICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorKwkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgICA7OworICAgICBlc2FjOworIH0gfAorQEAgLTEwODcwLDEzICsxMjE3NSwxMyBAQAorICMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisgIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorIGlmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCistICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9L3sKKysgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworIHMvOipcJChzcmNkaXIpOiovOi87Cisgcy86Klwke3NyY2Rpcn06Ki86LzsKKyBzLzoqQHNyY2RpckA6Ki86LzsKKy1zL15cKFtePV0qPVsgCV0qXCk6Ki9cMS87Cisrcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOworIHMvOiokLy87Cistcy9eW149XSo9WyAJXSokLy87Cisrcy9eW149XSo9WwkgXSokLy87CisgfScKKyBmaQorIAorQEAgLTEwODg3LDcgKzEyMTkyLDcgQEAKKyBmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgIGFjX2k9YGVjaG8gIiRhY19pIiB8CistICAgICAgICAgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAorKwkgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAorICAgIyAyLiBBZGQgdGhlbS4KKyAgIGFjX2xpYm9ianM9IiRhY19saWJvYmpzICRhY19pXCRVLiRhY19vYmpleHQiCisgICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgJGFjX2kiJyRVLmxvJworQEAgLTEwOTMxLDkgKzEyMjM2LDEwIEBACisgZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIHNldCAtbyBwb3NpeAorIGZpCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorLWlmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgYXNfdW5zZXQ9dW5zZXQKKyBlbHNlCisgICBhc191bnNldD1mYWxzZQorQEAgLTEwOTUyLDcgKzEyMjU4LDcgQEAKKyAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgICBMQ19URUxFUEhPTkUgTENfVElNRQorIGRvCistICBpZiAoc2V0ICt4OyB0ZXN0IC1uICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgICBlbHNlCisgICAgICRhc191bnNldCAkYXNfdmFyCitAQCAtMTExMzEsMTYgKzEyNDM3LDE3IEBACisgaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICAgYXNfbWtkaXJfcD06CisgZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgIGFzX21rZGlyX3A9ZmFsc2UKKyBmaQorIAorIGFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCistYXNfdHJfY3BwPSJzZWQgeSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCistYXNfdHJfc2g9InNlZCB5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCisgIyBJRlMKK0BAIC0xMTE2Nyw3ICsxMjQ3NCw3IEBACisgY2F0ID4mNSA8PF9DU0VPRgorIAorIFRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcGF0Y2ggJGFzX21lIDIuNS45LCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKyAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworQEAgLTExMjExLDkgKzEyNTE4LDkgQEAKKyAgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorLSAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKysJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCistICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisrCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorIAorIENvbmZpZ3VyYXRpb24gZmlsZXM6CisgJGNvbmZpZ19maWxlcworQEAgLTExMjI3LDExICsxMjUzNCwxMCBAQAorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgYWNfY3NfdmVyc2lvbj0iXFwKKyBwYXRjaCBjb25maWcuc3RhdHVzIDIuNS45CistY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LAorK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSwKKyAgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorIAorLUNvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCistRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisgc3JjZGlyPSRzcmNkaXIKK0BAIC0xMTQ2Myw5ICsxMjc2OSw5IEBACisgICAgICAgKGVjaG8gJzp0CisgICAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiJyAmJiBjYXQgJHRtcC9zdWJzLmZyYWcpID4kdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZAorICAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKy0gIAlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorKwlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgIGVsc2UKKy0gIAlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorKwlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgIGZpCisgICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKKyAgICAgICBhY19iZWc9JGFjX2VuZAorQEAgLTExNDgzLDIxICsxMjc4OSwyMSBAQAorICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCistICAgICAgICBjYXQgPiR0bXAvc3RkaW4KKy0gICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwljYXQgPiR0bXAvc3RkaW4KKysJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICAgZXNhYworIAorICAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgorICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYWNfZmlsZSIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE1MTMsMTAgKzEyODE5LDEwIEBACisgICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC0xMTU1NCwxMiArMTI4NjAsNDUgQEAKKyAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworIGVzYWMKKy0jIERvbid0IGJsaW5kbHkgcGVyZm9ybSBhIGBjZCAiJGFjX2RpciIvJGFjX2ZvbyAmJiBwd2RgIHNpbmNlICRhY19mb28gY2FuIGJlCistIyBhYnNvbHV0ZS4KKy1hY19hYnNfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfYnVpbGRkaXIgJiYgcHdkYAorLWFjX2Fic190b3BfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAke2FjX3RvcF9idWlsZGRpcn0uICYmIHB3ZGAKKy1hY19hYnNfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3NyY2RpciAmJiBwd2RgCistYWNfYWJzX3RvcF9zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfdG9wX3NyY2RpciAmJiBwd2RgCisrCisrIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCisrIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KKytjYXNlIGBwd2RgIGluCisrLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrKikKKysgIGNhc2UgIiRhY19kaXIiIGluCisrICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrKikKKysgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorKyAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyopCisrICBjYXNlICRhY19zcmNkaXIgaW4KKysgIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyopCisrICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisrICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisgCisgCisgICBjYXNlICRJTlNUQUxMIGluCitAQCAtMTE1NjcsMTEgKzEyOTA2LDYgQEAKKyAgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZGRpciRJTlNUQUxMIDs7CisgICBlc2FjCisgCistICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorLSAgICBybSAtZiAiJGFjX2ZpbGUiCistICBmaQorICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCitAQCAtMTE1ODEsNyArMTI5MTUsNyBAQAorICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgorICAgZmkKKyAgIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKysJCQkJICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgorIAorICAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgICMgc3JjIHRyZWUuCitAQCAtMTE1OTAsMjYgKzEyOTI0LDMyIEBACisgICAgICAgY2FzZSAkZiBpbgorICAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgIFtcXC8kXSopCistICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKy0gICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKysJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZWNobyAkZjs7CisrCSBlY2hvICIkZiI7OworICAgICAgICopICMgUmVsYXRpdmUKKy0gICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKy0gICAgICAgICAgICMgQnVpbGQgdHJlZQorLSAgICAgICAgICAgZWNobyAkZgorLSAgICAgICAgIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKy0gICAgICAgICAgICMgU291cmNlIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJHNyY2Rpci8kZgorLSAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICMgL2Rldi9udWxsIHRyZWUKKy0gICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKwkgICAjIEJ1aWxkIHRyZWUKKysJICAgZWNobyAiJGYiCisrCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisrCSAgICMgU291cmNlIHRyZWUKKysJICAgZWNobyAiJHNyY2Rpci8kZiIKKysJIGVsc2UKKysJICAgIyAvZGV2L251bGwgdHJlZQorKwkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZmk7OworKwkgZmk7OworICAgICAgIGVzYWMKKyAgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrCisrICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorKyAgICBybSAtZiAiJGFjX2ZpbGUiCisrICBmaQorIF9BQ0VPRgorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgICBzZWQgIiRhY192cHN1YgorQEAgLTExNjQ5LDEyICsxMjk4OSwxMiBAQAorICMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KKyAjCisgIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorLWFjX2RBPSdzLF5cKFsgCV0qXCkjXChbIAldKmRlZmluZVsgCV1bIAldKlwpJworLWFjX2RCPSdbIAldLiokLFwxI1wyJworK2FjX2RBPSdzLF5cKFsJIF0qXCkjXChbCSBdKmRlZmluZVsJIF1bCSBdKlwpJworK2FjX2RCPSdbCSBdLiokLFwxI1wyJworIGFjX2RDPScgJworIGFjX2REPScsO3QnCisgIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KKy1hY191QT0ncyxeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKKythY191QT0ncyxeXChbCSBdKlwpI1woWwkgXSpcKXVuZGVmXChbCSBdWwkgXSpcKScKKyBhY191Qj0nJCxcMSNcMmRlZmluZVwzJworIGFjX3VDPScgJworIGFjX3VEPScsO3QnCitAQCAtMTE2NjMsMTEgKzEzMDAzLDExIEBACisgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgICBjYXNlICRhY19maWxlIGluCisgICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKy0gICAgICAgIGNhdCA+JHRtcC9zdGRpbgorLSAgICAgICAgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWNhdCA+JHRtcC9zdGRpbgorKwlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgICBlc2FjCisgCitAQCAtMTE2ODEsMjggKzEzMDIxLDI5IEBACisgICAgICAgY2FzZSAkZiBpbgorICAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgIFtcXC8kXSopCistICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKy0gICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKysJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZWNobyAkZjs7CisrCSAjIERvIHF1b3RlICRmLCB0byBwcmV2ZW50IERPUyBwYXRocyBmcm9tIGJlaW5nIElGUydkLgorKwkgZWNobyAiJGYiOzsKKyAgICAgICAqKSAjIFJlbGF0aXZlCistICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCistICAgICAgICAgICAjIEJ1aWxkIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJGYKKy0gICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCistICAgICAgICAgICAjIFNvdXJjZSB0cmVlCistICAgICAgICAgICBlY2hvICRzcmNkaXIvJGYKKy0gICAgICAgICBlbHNlCistICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCistICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisrCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKysJICAgIyBCdWlsZCB0cmVlCisrCSAgIGVjaG8gIiRmIgorKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorKwkgICAjIFNvdXJjZSB0cmVlCisrCSAgIGVjaG8gIiRzcmNkaXIvJGYiCisrCSBlbHNlCisrCSAgICMgL2Rldi9udWxsIHRyZWUKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGZpOzsKKysJIGZpOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAgIyBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlcy4KKy0gIHNlZCAncy9bIAldKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCisrICBzZWQgJ3MvWwkgXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgorIAorIF9BQ0VPRgorIAorQEAgLTExNzI1LDkgKzEzMDY2LDkgQEAKKyBzLFtcXCRgXSxcXCYsZworIHQgY2xlYXIKKyA6IGNsZWFyCistcyxeWyAJXSojWyAJXSpkZWZpbmVbIAldWyAJXSpcKFteIAkoXVteIAkoXSpcKVwoKFteKV0qKVwpWyAJXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKKytzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIChdW14JIChdKlwpXCgoW14pXSopXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDFcMiR7YWNfZEN9XDMke2FjX2REfSxncAorIHQgZW5kCistcyxeWyAJXSojWyAJXSpkZWZpbmVbIAldWyAJXSpcKFteIAldW14gCV0qXClbIAldKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKKytzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAorIDogZW5kCisgX0FDRU9GCisgIyBJZiBzb21lIG1hY3JvcyB3ZXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgdGltZXMKK0BAIC0xMTc0MSwxMyArMTMwODIsMTMgQEAKKyAjIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCisgY2F0ID4+Y29uZnRlc3QudW5kZWZzIDw8XF9BQ0VPRgorLXMsXlsgCV0qI1sgCV0qdW5kZWZbIAldWyAJXSpbYS16QS1aX11bYS16QS1aXzAtOV0qLC8qICYgKi8sCisrcyxeWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKKyBfQUNFT0YKKyAKKyAjIEJyZWFrIHVwIGNvbmZ0ZXN0LmRlZmluZXMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKKyAjIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCisgZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICNkZWZpbmUgdGVtcGxhdGVzIG9ubHkgaWYgbmVjZXNzYXJ5LicgPj4kQ09ORklHX1NUQVRVUworLWVjaG8gJyAgaWYgZ3JlcCAiXlsgCV0qI1sgCV0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKKytlY2hvICcgIGlmIGdyZXAgIl5bCSBdKiNbCSBdKmRlZmluZSIgJHRtcC9pbiA+L2Rldi9udWxsOyB0aGVuJyA+PiRDT05GSUdfU1RBVFVTCisgZWNobyAnICAjIElmIHRoZXJlIGFyZSBubyBkZWZpbmVzLCB3ZSBtYXkgaGF2ZSBhbiBlbXB0eSBpZi9maScgPj4kQ09ORklHX1NUQVRVUworIGVjaG8gJyAgOicgPj4kQ09ORklHX1NUQVRVUworIHJtIC1mIGNvbmZ0ZXN0LnRhaWwKK0BAIC0xMTc1Niw3ICsxMzA5Nyw3IEBACisgICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC9kZWZpbmVzLnNlZC4KKyAgIGVjaG8gJyAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUworICAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI2RlZmluZScgbGluZXMuCistICBlY2hvICcvXlsgCV0qI1sgCV0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCisrICBlY2hvICcvXlsJIF0qI1sJIF0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgorICAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCitAQCAtMTE3ODMsNyArMTMxMjQsNyBAQAorICAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvdW5kZWZzLnNlZC4KKyAgIGVjaG8gJyAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjdW5kZWYnCistICBlY2hvICcvXlsgCV0qI1sgCV0qdW5kZWYvIWInID4+JENPTkZJR19TVEFUVVMKKysgIGVjaG8gJy9eWwkgXSojWwkgXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUworICAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUworQEAgLTExODE3LDEwICsxMzE1OCwxMCBAQAorICAgICBlbHNlCisgICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYWNfZmlsZSIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE4MzYsMTAgKzEzMTc3LDEwIEBACisgICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHBhdGNoLTIuNS45L2NvbmZpZ3VyZS5hYworQEAgLTY0LDYgKzY0LDkgQEAKKyBnbF9QUkVSRVFfWE1BTExPQworIGdsX1FVT1RFCisgZ2xfUVVPVEVBUkcKKytnbF9IQVNICisrCisrYWdfQ0hFQ0tfTkFOT1NFQ09ORF9TVEFUCisgCisgZG5sIFRoaXMgc2hvdWxkIGJlIGluIGdudWxpYiwgYnV0IGlzbid0IGZvciBzb21lIHJlYXNvbi4KKyBBQ19ERUZVTihbam1fUFJFUkVRX0FEREVYVF0sCistLS0gcGF0Y2gtMi41Ljkub3JpZy9wY2guYworKysrIHBhdGNoLTIuNS45L3BjaC5jCitAQCAtMSw2ICsxLDYgQEAKKyAvKiByZWFkaW5nIHBhdGNoZXMgKi8KKyAKKy0vKiAkSWQ6IHBjaC5jLHYgMS40NCAyMDAzLzA1LzIwIDE0OjAzOjE3IGVnZ2VydCBFeHAgJCAqLworKy8qICRJZDogcGNoLmMsdiAxLjQ1IDIwMDMvMDcvMDIgMjI6MTk6MjEgZWdnZXJ0IEV4cCAkICovCisgCisgLyogQ29weXJpZ2h0IChDKSAxOTg2LCAxOTg3LCAxOTg4IExhcnJ5IFdhbGwKKyAKK0BAIC0zNjYsMTAgKzM2NiwxNiBAQAorIAlpZiAoIXN0YXJzX2xhc3RfbGluZSAmJiBzdHJuRVEocywgIioqKiAiLCA0KSkKKyAJICAgIG5hbWVbT0xEXSA9IGZldGNobmFtZSAocys0LCBzdHJpcHBhdGgsICZwX3RpbWVzdGFtcFtPTERdKTsKKyAJZWxzZSBpZiAoc3RybkVRKHMsICIrKysgIiwgNCkpCisrCSAgeworIAkgICAgLyogU3dhcCB3aXRoIE5FVyBiZWxvdy4gICovCisgCSAgICBuYW1lW09MRF0gPSBmZXRjaG5hbWUgKHMrNCwgc3RyaXBwYXRoLCAmcF90aW1lc3RhbXBbT0xEXSk7CisrCSAgICBwX3N0cmlwX3RyYWlsaW5nX2NyID0gc3RyaXBfdHJhaWxpbmdfY3I7CisrCSAgfQorIAllbHNlIGlmIChzdHJuRVEocywgIkluZGV4OiIsIDYpKQorKwkgIHsKKyAJICAgIG5hbWVbSU5ERVhdID0gZmV0Y2huYW1lIChzKzYsIHN0cmlwcGF0aCwgKHRpbWVfdCAqKSAwKTsKKysJICAgIHBfc3RyaXBfdHJhaWxpbmdfY3IgPSBzdHJpcF90cmFpbGluZ19jcjsKKysJICB9CisgCWVsc2UgaWYgKHN0cm5FUShzLCAiUHJlcmVxOiIsIDcpKSB7CisgCSAgICBmb3IgKHQgPSBzICsgNzsgIElTU1BBQ0UgKCh1bnNpZ25lZCBjaGFyKSAqdCk7ICB0KyspCisgCSAgICAgIGNvbnRpbnVlOworQEAgLTQwOSw2ICs0MTUsNyBAQAorIAkJICAgIHBfdGltZXN0YW1wW05FV10gPSB0aW1lc3RhbXA7CisgCQkgICAgcF9yZmM5MzRfbmVzdGluZyA9ICh0IC0gcykgPj4gMTsKKyAJCSAgfQorKwkJcF9zdHJpcF90cmFpbGluZ19jciA9IHN0cmlwX3RyYWlsaW5nX2NyOworIAkgICAgICB9CisgCSAgfQorIAlpZiAoKGRpZmZfdHlwZSA9PSBOT19ESUZGIHx8IGRpZmZfdHlwZSA9PSBFRF9ESUZGKSAmJgorLS0tIHBhdGNoLTIuNS45Lm9yaWcvdXRpbC5jCisrKysgcGF0Y2gtMi41LjkvdXRpbC5jCitAQCAtNDUsOSArNDUsMTcgQEAKKyAjIGRlZmluZSByYWlzZShzaWcpIGtpbGwgKGdldHBpZCAoKSwgc2lnKQorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxoYXNoLmg+CisgCisgc3RhdGljIHZvaWQgbWFrZWRpcnMgKGNoYXIgKik7Cisrc3RhdGljIGJvb2wgZmlkX3NlYXJjaCAoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc3RhdCAqLCBib29sKTsKKysjIGRlZmluZSBmaWRfZXhpc3RzKG5hbWUsIHBzdCkgZmlkX3NlYXJjaCAobmFtZSwgcHN0LCBmYWxzZSkKKysjIGRlZmluZSBpbnNlcnRfZmlkKG5hbWUpIGZpZF9zZWFyY2ggKG5hbWUsIE5VTEwsIHRydWUpCisgCisgLyogTW92ZSBhIGZpbGUgRlJPTSAod2hlcmUgKkZST01fTkVFRFNfUkVNT1ZBTCBpcyBub256ZXJvIGlmIEZST00KKyAgICBuZWVkcyByZW1vdmFsIHdoZW4gY2xlYW5pbmcgdXAgYXQgdGhlIGVuZCBvZiBleGVjdXRpb24pCitAQCAtNjQsNyArNzIsNyBAQAorICAgc3RydWN0IHN0YXQgdG9fc3Q7CisgICBpbnQgdG9fZXJybm8gPSAhIGJhY2t1cCA/IC0xIDogc3RhdCAodG8sICZ0b19zdCkgPT0gMCA/IDAgOiBlcnJubzsKKyAKKy0gIGlmIChiYWNrdXApCisrICBpZiAoYmFja3VwICYmICh0b19lcnJubyB8fCAhIGZpZF9leGlzdHMgKHRvLCAmdG9fc3QpKSkKKyAgICAgeworICAgICAgIGludCB0cnlfbWFrZWRpcnNfZXJybm8gPSAwOworICAgICAgIGNoYXIgKmJha25hbWU7CitAQCAtMTY1LDYgKzE3Myw3IEBACisgCSAgICAgIGlmICghIHRvX2Rpcl9rbm93bl90b19leGlzdCkKKyAJCW1ha2VkaXJzICh0byk7CisgCSAgICAgIGNvcHlfZmlsZSAoZnJvbSwgdG8sIDAsIG1vZGUpOworKwkgICAgICBpbnNlcnRfZmlkICh0byk7CisgCSAgICAgIHJldHVybjsKKyAJICAgIH0KKyAKK0BAIC0xNzMsNiArMTgyLDcgQEAKKyAJfQorIAorICAgICByZW5hbWVfc3VjY2VlZGVkOgorKyAgICAgIGluc2VydF9maWQgKHRvKTsKKyAgICAgICAvKiBEbyBub3QgY2xlYXIgKkZST01fTkVFRFNfUkVNT1ZBTCBpZiBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCisgCSByZW5hbWUgcmV0dXJuZWQgemVybyBiZWNhdXNlIEZST00gYW5kIFRPIGFyZSBoYXJkIGxpbmtzIHRvCisgCSB0aGUgc2FtZSBmaWxlLiAgKi8KK0BAIC0xMDExLDMgKzEwMjEsMTA1IEBACisgICBpZiAoZmlsZV9zZWVrIChzdHJlYW0sIG9mZnNldCwgcHRybmFtZSkgIT0gMCkKKyAgICAgcGZhdGFsICgiZnNlZWsiKTsKKyB9CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBkZXZfdAkJZmlkX2RldjsKKysgIGlub190CQlmaWRfaW5vOworKyAgdGltZV90CWZpZF9tdGltZTsKKysgIHVuc2lnbmVkIGxvbmcJZmlkX210aW1lbnNlYzsKKyt9IGZpbGVfaWQ7CisrCisrdW5zaWduZWQKKytmaWxlX2lkX2hhc2hlciAoZmlsZV9pZCAqZW50cnksIHVuc2lnbmVkIHRhYmxlX3NpemUpCisreworKyAgcmV0dXJuICgodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9pbm8gKworKyAgCSAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfZGV2ICsKKysgIAkgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+ZmlkX210aW1lICsKKysJICAodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9tdGltZW5zZWMpICUgdGFibGVfc2l6ZTsKKyt9CisrCisrYm9vbAorK2ZpbGVfaWRfY29tcGFyYXRvciAoZmlsZV9pZCAqZW50cnkxLCBmaWxlX2lkICplbnRyeTIpCisreworKyAgcmV0dXJuIChlbnRyeTEtPmZpZF9kZXYJPT0gZW50cnkyLT5maWRfZGV2ICYmCisrCSAgZW50cnkxLT5maWRfaW5vCT09IGVudHJ5Mi0+ZmlkX2lubyAmJgorKwkgIGVudHJ5MS0+ZmlkX210aW1lCT09IGVudHJ5Mi0+ZmlkX210aW1lICYmCisrCSAgZW50cnkxLT5maWRfbXRpbWVuc2VjID09IGVudHJ5Mi0+ZmlkX210aW1lbnNlYyk7CisrfQorKworK3ZvaWQKKytmaWxlX2lkX2ZyZWVyIChmaWxlX2lkICplbnRyeSkKKyt7CisrICBmcmVlIChlbnRyeSk7CisrfQorKworK0hhc2hfdGFibGUgKmZpbGVfaWRfaGFzaDsKKysKKysvKiBDaGVjayBpZiB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IEZJTEVOQU1FIGFuZCBQU1Qgd2FzIGFscmVhZHkgc2Vlbi4gSWYgdGhlCisrICAgZmlsZSB3YXMgYWxyZWFkeSBzZWVuLCByZXR1cm5zIFRSVUUuICBJZiB0aGUgZmlsZSBoYXMgbm90IHlldCBiZWVuIHNlZW4KKysgICBhbmQgSU5TRVJUIGlzIFRSVUUsIGl0IGlzIGluc2VydGVkLiAgUFNUIG9yIEZJTEVOQU1FIG1heSBiZSBOVUxMIChidXQgbm90CisrICAgYm90aCBvZiB0aGVtKS4gICovCisrCisrc3RhdGljIGJvb2wKKytmaWRfc2VhcmNoIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgc3RydWN0IHN0YXQgKnBzdCwgYm9vbCBpbnNlcnQpCisreworKyAgc3RydWN0IHN0YXQgc3Q7CisrCisrICBpZiAoIWZpbGVfaWRfaGFzaCkKKysgICAgeworKyAgICAgIGZpbGVfaWRfaGFzaCA9IGhhc2hfaW5pdGlhbGl6ZSAoMCwgTlVMTCwgKEhhc2hfaGFzaGVyKSBmaWxlX2lkX2hhc2hlciwKKysJCQkJICAgICAgKEhhc2hfY29tcGFyYXRvcikgZmlsZV9pZF9jb21wYXJhdG9yLAorKwkJCQkgICAgICAoSGFzaF9kYXRhX2ZyZWVyKSBmaWxlX2lkX2ZyZWVyKTsKKysgICAgICBpZiAoIWZpbGVfaWRfaGFzaCkKKysJcGZhdGFsICgiaGFzaF9pbml0aWFsaXplIik7CisrICAgIH0KKysKKysgIGlmICghcHN0KQorKyAgICB7CisrICAgICAgaWYgKHN0YXQgKGZpbGVuYW1lLCAmc3QpICE9IDApCisrCXBmYXRhbCAoIiVzIiwgcXVvdGVhcmcgKGZpbGVuYW1lKSk7CisrICAgICAgcHN0ID0gJnN0OworKyAgICB9CisrCisrICBpZiAoaW5zZXJ0KQorKyAgICB7CisrICAgICAgZmlsZV9pZCAqcGZpZCA9IHhtYWxsb2MgKHNpemVvZiAoZmlsZV9pZCkpLCAqb2xkX3BmaWQ7CisrICAgICAgcGZpZC0+ZmlkX2RldgkgID0gcHN0LT5zdF9kZXY7CisrICAgICAgcGZpZC0+ZmlkX2lubwkgID0gcHN0LT5zdF9pbm87CisrICAgICAgcGZpZC0+ZmlkX210aW1lCSAgPSBwc3QtPnN0X210aW1lOworKyNpZiBkZWZpbmVkKEhBVkVfU1RBVF9OU0VDKQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW1lbnNlYzsKKysjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW0udHZfbnNlYzsKKysjZWxzZQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSAwOworKyNlbmRpZgorKyAgICAgIG9sZF9wZmlkID0gaGFzaF9pbnNlcnQgKGZpbGVfaWRfaGFzaCwgcGZpZCk7CisrICAgICAgaWYgKCFvbGRfcGZpZCkKKysJcGZhdGFsICgiaGFzaF9pbnNlcnQiKTsKKysgICAgICBlbHNlIGlmIChvbGRfcGZpZCAhPSBwZmlkKQorKyAgICAgICAgeworKwkgIGZyZWUgKHBmaWQpOworKwkgIHJldHVybiB0cnVlOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gZmFsc2U7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGZpbGVfaWQgZmlkOworKyAgICAgIGZpZC5maWRfZGV2CT0gcHN0LT5zdF9kZXY7CisrICAgICAgZmlkLmZpZF9pbm8JPSBwc3QtPnN0X2lubzsKKysgICAgICBmaWQuZmlkX210aW1lCT0gcHN0LT5zdF9tdGltZTsKKysjaWYgZGVmaW5lZChIQVZFX1NUQVRfTlNFQykKKysgICAgICBmaWQuZmlkX210aW1lbnNlYyA9IHBzdC0+c3RfbXRpbWVuc2VjOworKyNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX1RJTUVWQUwpCisrICAgICAgZmlkLmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW0udHZfbnNlYzsKKysjZWxzZQorKyAgICAgIGZpZC5maWRfbXRpbWVuc2VjID0gMDsKKysjZW5kaWYKKysgICAgICByZXR1cm4gaGFzaF9sb29rdXAgKGZpbGVfaWRfaGFzaCwgJmZpZCkgIT0gMDsKKysgICAgfQorK30KKysKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2hhc2guYworKysrIHBhdGNoLTIuNS45L2hhc2guYworQEAgLTAsMCArMSwxMDUxIEBACisrLyogaGFzaCAtIGhhc2hpbmcgdGFibGUgcHJvY2Vzc2luZy4KKysKKysgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZywgMTk5Mi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEEgZ2VuZXJpYyBoYXNoIHRhYmxlIHBhY2thZ2UuICAqLworKworKy8qIERlZmluZSBVU0VfT0JTVEFDSyB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlIG9ic3RhY2tzIGluc3RlYWQKKysgICBvZiBtYWxsb2MuICBJZiB5b3UgY2hhbmdlIFVTRV9PQlNUQUNLLCB5b3UgaGF2ZSB0byByZWNvbXBpbGUhICAqLworKworKyNpZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxzdGRib29sLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrI2lmbmRlZiBIQVZFX0RFQ0xfRlJFRQorKyJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisrI2VuZGlmCisrI2lmICFIQVZFX0RFQ0xfRlJFRQorK3ZvaWQgZnJlZSAoKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBVkVfREVDTF9NQUxMT0MKKysidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorKyNlbmRpZgorKyNpZiAhSEFWRV9ERUNMX01BTExPQworK2NoYXIgKm1hbGxvYyAoKTsKKysjZW5kaWYKKysKKysjaWYgVVNFX09CU1RBQ0sKKysjIGluY2x1ZGUgIm9ic3RhY2suaCIKKysjIGlmbmRlZiBvYnN0YWNrX2NodW5rX2FsbG9jCisrIyAgZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgbWFsbG9jCisrIyBlbmRpZgorKyMgaWZuZGVmIG9ic3RhY2tfY2h1bmtfZnJlZQorKyMgIGRlZmluZSBvYnN0YWNrX2NodW5rX2ZyZWUgZnJlZQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSAiaGFzaC5oIgorKworK3N0cnVjdCBoYXNoX3RhYmxlCisrICB7CisrICAgIC8qIFRoZSBhcnJheSBvZiBidWNrZXRzIHN0YXJ0cyBhdCBCVUNLRVQgYW5kIGV4dGVuZHMgdG8gQlVDS0VUX0xJTUlULTEsCisrICAgICAgIGZvciBhIHBvc3NpYmlsaXR5IG9mIE5fQlVDS0VUUy4gIEFtb25nIHRob3NlLCBOX0JVQ0tFVFNfVVNFRCBidWNrZXRzCisrICAgICAgIGFyZSBub3QgZW1wdHksIHRoZXJlIGFyZSBOX0VOVFJJRVMgYWN0aXZlIGVudHJpZXMgaW4gdGhlIHRhYmxlLiAgKi8KKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldF9saW1pdDsKKysgICAgdW5zaWduZWQgbl9idWNrZXRzOworKyAgICB1bnNpZ25lZCBuX2J1Y2tldHNfdXNlZDsKKysgICAgdW5zaWduZWQgbl9lbnRyaWVzOworKworKyAgICAvKiBUdW5pbmcgYXJndW1lbnRzLCBrZXB0IGluIGEgcGh5c2ljYWx5IHNlcGFyYXRlIHN0cnVjdHVyZS4gICovCisrICAgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmc7CisrCisrICAgIC8qIFRocmVlIGZ1bmN0aW9ucyBhcmUgZ2l2ZW4gdG8gYGhhc2hfaW5pdGlhbGl6ZScsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgorKyAgICAgICBibG9jayBmb3IgdGhpcyBmdW5jdGlvbi4gIEluIGEgd29yZCwgSEFTSEVSIHJhbmRvbWl6ZXMgYSB1c2VyIGVudHJ5CisrICAgICAgIGludG8gYSBudW1iZXIgdXAgZnJvbSAwIHVwIHRvIHNvbWUgbWF4aW11bSBtaW51cyAxOyBDT01QQVJBVE9SIHJldHVybnMKKysgICAgICAgdHJ1ZSBpZiB0d28gdXNlciBlbnRyaWVzIGNvbXBhcmUgZXF1YWxseTsgYW5kIERBVEFfRlJFRVIgaXMgdGhlIGNsZWFudXAKKysgICAgICAgZnVuY3Rpb24gZm9yIGEgdXNlciBlbnRyeS4gICovCisrICAgIEhhc2hfaGFzaGVyIGhhc2hlcjsKKysgICAgSGFzaF9jb21wYXJhdG9yIGNvbXBhcmF0b3I7CisrICAgIEhhc2hfZGF0YV9mcmVlciBkYXRhX2ZyZWVyOworKworKyAgICAvKiBBIGxpbmtlZCBsaXN0IG9mIGZyZWVkIHN0cnVjdCBoYXNoX2VudHJ5IHN0cnVjdHMuICAqLworKyAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqZnJlZV9lbnRyeV9saXN0OworKworKyNpZiBVU0VfT0JTVEFDSworKyAgICAvKiBXaGVuZXZlciBvYnN0YWNrcyBhcmUgdXNlZCwgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYWxsIG92ZXJmbG93ZWQKKysgICAgICAgZW50cmllcyBpbnRvIGEgc2luZ2xlIHN0YWNrLCBzbyB0aGV5IGFsbCBjYW4gYmUgZnJlZWQgaW4gYSBzaW5nbGUKKysgICAgICAgb3BlcmF0aW9uLiAgSXQgaXMgbm90IGNsZWFyIGlmIHRoZSBzcGVlZHVwIGlzIHdvcnRoIHRoZSB0cm91YmxlLiAgKi8KKysgICAgc3RydWN0IG9ic3RhY2sgZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICB9OworKworKy8qIEEgaGFzaCB0YWJsZSBjb250YWlucyBtYW55IGludGVybmFsIGVudHJpZXMsIGVhY2ggaG9sZGluZyBhIHBvaW50ZXIgdG8KKysgICBzb21lIHVzZXIgcHJvdmlkZWQgZGF0YSAoYWxzbyBjYWxsZWQgYSB1c2VyIGVudHJ5KS4gIEFuIGVudHJ5IGluZGlzdGluY3RseQorKyAgIHJlZmVycyB0byBib3RoIHRoZSBpbnRlcm5hbCBlbnRyeSBhbmQgaXRzIGFzc29jaWF0ZWQgdXNlciBlbnRyeS4gIEEgdXNlcgorKyAgIGVudHJ5IGNvbnRlbnRzIG1heSBiZSBoYXNoZWQgYnkgYSByYW5kb21pemF0aW9uIGZ1bmN0aW9uICh0aGUgaGFzaGluZworKyAgIGZ1bmN0aW9uLCBvciBqdXN0IGBoYXNoZXInIGZvciBzaG9ydCkgaW50byBhIG51bWJlciAob3IgYHNsb3QnKSBiZXR3ZWVuIDAKKysgICBhbmQgdGhlIGN1cnJlbnQgdGFibGUgc2l6ZS4gIEF0IGVhY2ggc2xvdCBwb3NpdGlvbiBpbiB0aGUgaGFzaCB0YWJsZSwKKysgICBzdGFydHMgYSBsaW5rZWQgY2hhaW4gb2YgZW50cmllcyBmb3Igd2hpY2ggdGhlIHVzZXIgZGF0YSBhbGwgaGFzaCB0byB0aGlzCisrICAgc2xvdC4gIEEgYnVja2V0IGlzIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCBlbnRyaWVzIGhhc2hpbmcgdG8gdGhlIHNhbWUgc2xvdC4KKysKKysgICBBIGdvb2QgYGhhc2hlcicgZnVuY3Rpb24gd2lsbCBkaXN0cmlidXRlIGVudHJpZXMgcmF0aGVyIGV2ZW5seSBpbiBidWNrZXRzLgorKyAgIEluIHRoZSBpZGVhbCBjYXNlLCB0aGUgbGVuZ3RoIG9mIGVhY2ggYnVja2V0IGlzIHJvdWdobHkgdGhlIG51bWJlciBvZgorKyAgIGVudHJpZXMgZGl2aWRlZCBieSB0aGUgdGFibGUgc2l6ZS4gIEZpbmRpbmcgdGhlIHNsb3QgZm9yIGEgZGF0YSBpcyB1c3VhbGx5CisrICAgZG9uZSBpbiBjb25zdGFudCB0aW1lIGJ5IHRoZSBgaGFzaGVyJywgYW5kIHRoZSBsYXRlciBmaW5kaW5nIG9mIGEgcHJlY2lzZQorKyAgIGVudHJ5IGlzIGxpbmVhciBpbiB0aW1lIHdpdGggdGhlIHNpemUgb2YgdGhlIGJ1Y2tldC4gIENvbnNlcXVlbnRseSwgYQorKyAgIGxhcmdlciBoYXNoIHRhYmxlIHNpemUgKHRoYXQgaXMsIGEgbGFyZ2VyIG51bWJlciBvZiBidWNrZXRzKSBpcyBwcm9uZSB0bworKyAgIHlpZWxkaW5nIHNob3J0ZXIgY2hhaW5zLCAqZ2l2ZW4qIHRoZSBgaGFzaGVyJyBmdW5jdGlvbiBiZWhhdmVzIHByb3Blcmx5LgorKworKyAgIExvbmcgYnVja2V0cyBzbG93IGRvd24gdGhlIGxvb2t1cCBhbGdvcml0aG0uICBPbmUgbWlnaHQgdXNlIGJpZyBoYXNoIHRhYmxlCisrICAgc2l6ZXMgaW4gaG9wZSB0byByZWR1Y2UgdGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIGJ1Y2tldHMsIGJ1dCB0aGlzIG1pZ2h0CisrICAgYmVjb21lIGlub3JkaW5hdGUsIGFzIHVudXNlZCBzbG90cyBpbiB0aGUgaGFzaCB0YWJsZSB0YWtlIHNvbWUgc3BhY2UuICBUaGUKKysgICBiZXN0IGJldCBpcyB0byBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBhIGdvb2QgYGhhc2hlcicgZnVuY3Rpb24gKGJld2FyZQorKyAgIHRoYXQgdGhvc2UgYXJlIG5vdCB0aGF0IGVhc3kgdG8gd3JpdGUhIDotKSwgYW5kIHRvIHVzZSBhIHRhYmxlIHNpemUKKysgICBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIG51bWJlciBvZiBlbnRyaWVzLiAgKi8KKysKKysvKiBJZiBhbiBpbnNlcnRpb24gbWFrZXMgdGhlIHJhdGlvIG9mIG5vbmVtcHR5IGJ1Y2tldHMgdG8gdGFibGUgc2l6ZSBsYXJnZXIKKysgICB0aGFuIHRoZSBncm93dGggdGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuIDAuMCBhbmQgMS4wKSwgdGhlbiBpbmNyZWFzZQorKyAgIHRoZSB0YWJsZSBzaXplIGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBncm93dGggZmFjdG9yIChhIG51bWJlciBncmVhdGVyIHRoYW4KKysgICAxLjApLiAgVGhlIGdyb3d0aCB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gMC44LCBhbmQgdGhlIGdyb3d0aCBmYWN0b3IKKysgICBkZWZhdWx0cyB0byAxLjQxNCwgbWVhbmluZyB0aGF0IHRoZSB0YWJsZSB3aWxsIGhhdmUgZG91YmxlZCBpdHMgc2l6ZQorKyAgIGV2ZXJ5IHNlY29uZCB0aW1lIDgwJSBvZiB0aGUgYnVja2V0cyBnZXQgdXNlZC4gICovCisrI2RlZmluZSBERUZBVUxUX0dST1dUSF9USFJFU0hPTEQgMC44CisrI2RlZmluZSBERUZBVUxUX0dST1dUSF9GQUNUT1IgMS40MTQKKysKKysvKiBJZiBhIGRlbGV0aW9uIGVtcHRpZXMgYSBidWNrZXQgYW5kIGNhdXNlcyB0aGUgcmF0aW8gb2YgdXNlZCBidWNrZXRzIHRvCisrICAgdGFibGUgc2l6ZSB0byBiZWNvbWUgc21hbGxlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuCisrICAgMC4wIGFuZCAxLjApLCB0aGVuIHNocmluayB0aGUgdGFibGUgYnkgbXVsdGlwbHlpbmcgYnkgdGhlIHNocmluayBmYWN0b3IgKGEKKysgICBudW1iZXIgZ3JlYXRlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIGJ1dCBzbWFsbGVyIHRoYW4gMS4wKS4gIFRoZSBzaHJpbmsKKysgICB0aHJlc2hvbGQgYW5kIGZhY3RvciBkZWZhdWx0IHRvIDAuMCBhbmQgMS4wLCBtZWFuaW5nIHRoYXQgdGhlIHRhYmxlIG5ldmVyCisrICAgc2hyaW5rcy4gICovCisrI2RlZmluZSBERUZBVUxUX1NIUklOS19USFJFU0hPTEQgMC4wCisrI2RlZmluZSBERUZBVUxUX1NIUklOS19GQUNUT1IgMS4wCisrCisrLyogVXNlIHRoaXMgdG8gaW5pdGlhbGl6ZSBvciByZXNldCBhIFRVTklORyBzdHJ1Y3R1cmUgdG8KKysgICBzb21lIHNlbnNpYmxlIHZhbHVlcy4gKi8KKytzdGF0aWMgY29uc3QgSGFzaF90dW5pbmcgZGVmYXVsdF90dW5pbmcgPQorKyAgeworKyAgICBERUZBVUxUX1NIUklOS19USFJFU0hPTEQsCisrICAgIERFRkFVTFRfU0hSSU5LX0ZBQ1RPUiwKKysgICAgREVGQVVMVF9HUk9XVEhfVEhSRVNIT0xELAorKyAgICBERUZBVUxUX0dST1dUSF9GQUNUT1IsCisrICAgIGZhbHNlCisrICB9OworKworKy8qIEluZm9ybWF0aW9uIGFuZCBsb29rdXAuICAqLworKworKy8qIFRoZSBmb2xsb3dpbmcgZmV3IGZ1bmN0aW9ucyBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvdmVyYWxsIGhhc2gKKysgICB0YWJsZSBvcmdhbml6YXRpb246IHRoZSBudW1iZXIgb2YgZW50cmllcywgbnVtYmVyIG9mIGJ1Y2tldHMgYW5kIG1heGltdW0KKysgICBsZW5ndGggb2YgYnVja2V0cy4gICovCisrCisrLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZS4gIFRoZSB0YWJsZSBzaXplLCB0aGUgdG90YWwKKysgICBudW1iZXIgb2YgYnVja2V0cyAodXNlZCBwbHVzIHVudXNlZCksIG9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cywgYXJlCisrICAgdGhlIHNhbWUgcXVhbnRpdHkuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbl9idWNrZXRzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICByZXR1cm4gdGFibGUtPm5fYnVja2V0czsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gdXNlIChub24tZW1wdHkgYnVja2V0cykuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbl9idWNrZXRzX3VzZWQgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHJldHVybiB0YWJsZS0+bl9idWNrZXRzX3VzZWQ7CisrfQorKworKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBlbnRyaWVzLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X25fZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgcmV0dXJuIHRhYmxlLT5uX2VudHJpZXM7CisrfQorKworKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGNoYWluIChidWNrZXQpLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgdW5zaWduZWQgbWF4X2J1Y2tldF9sZW5ndGggPSAwOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yID0gYnVja2V0OworKwkgIHVuc2lnbmVkIGJ1Y2tldF9sZW5ndGggPSAxOworKworKwkgIHdoaWxlIChjdXJzb3IgPSBjdXJzb3ItPm5leHQsIGN1cnNvcikKKysJICAgIGJ1Y2tldF9sZW5ndGgrKzsKKysKKysJICBpZiAoYnVja2V0X2xlbmd0aCA+IG1heF9idWNrZXRfbGVuZ3RoKQorKwkgICAgbWF4X2J1Y2tldF9sZW5ndGggPSBidWNrZXRfbGVuZ3RoOworKwl9CisrICAgIH0KKysKKysgIHJldHVybiBtYXhfYnVja2V0X2xlbmd0aDsKKyt9CisrCisrLyogRG8gYSBtaWxkIHZhbGlkYXRpb24gb2YgYSBoYXNoIHRhYmxlLCBieSB0cmF2ZXJzaW5nIGl0IGFuZCBjaGVja2luZyB0d28KKysgICBzdGF0aXN0aWNzLiAgKi8KKysKKytib29sCisraGFzaF90YWJsZV9vayAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHVuc2lnbmVkIG5fYnVja2V0c191c2VkID0gMDsKKysgIHVuc2lnbmVkIG5fZW50cmllcyA9IDA7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQ7CisrCisrCSAgLyogQ291bnQgYnVja2V0IGhlYWQuICAqLworKwkgIG5fYnVja2V0c191c2VkKys7CisrCSAgbl9lbnRyaWVzKys7CisrCisrCSAgLyogQ291bnQgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCisrCSAgICBuX2VudHJpZXMrKzsKKysJfQorKyAgICB9CisrCisrICBpZiAobl9idWNrZXRzX3VzZWQgPT0gdGFibGUtPm5fYnVja2V0c191c2VkICYmIG5fZW50cmllcyA9PSB0YWJsZS0+bl9lbnRyaWVzKQorKyAgICByZXR1cm4gdHJ1ZTsKKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrdm9pZAorK2hhc2hfcHJpbnRfc3RhdGlzdGljcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIEZJTEUgKnN0cmVhbSkKKyt7CisrICB1bnNpZ25lZCBuX2VudHJpZXMgPSBoYXNoX2dldF9uX2VudHJpZXMgKHRhYmxlKTsKKysgIHVuc2lnbmVkIG5fYnVja2V0cyA9IGhhc2hfZ2V0X25fYnVja2V0cyAodGFibGUpOworKyAgdW5zaWduZWQgbl9idWNrZXRzX3VzZWQgPSBoYXNoX2dldF9uX2J1Y2tldHNfdXNlZCAodGFibGUpOworKyAgdW5zaWduZWQgbWF4X2J1Y2tldF9sZW5ndGggPSBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCAodGFibGUpOworKworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBlbnRyaWVzOiAgICAgICAgICV1XG4iLCBuX2VudHJpZXMpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzOiAgICAgICAgICV1XG4iLCBuX2J1Y2tldHMpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzIHVzZWQ6ICAgICV1ICglLjJmJSUpXG4iLCBuX2J1Y2tldHNfdXNlZCwKKysJICAgKDEwMC4wICogbl9idWNrZXRzX3VzZWQpIC8gbl9idWNrZXRzKTsKKysgIGZwcmludGYgKHN0cmVhbSwgIm1heCBidWNrZXQgbGVuZ3RoOiAldVxuIiwgbWF4X2J1Y2tldF9sZW5ndGgpOworK30KKysKKysvKiBJZiBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUsIHJldHVybiB0aGUKKysgICBlbnRyeSBmcm9tIHRoZSB0YWJsZS4gIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuICAqLworKworK3ZvaWQgKgorK2hhc2hfbG9va3VwIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgIGlmIChidWNrZXQtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrICAgIGlmICh0YWJsZS0+Y29tcGFyYXRvciAoZW50cnksIGN1cnNvci0+ZGF0YSkpCisrICAgICAgcmV0dXJuIGN1cnNvci0+ZGF0YTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBXYWxraW5nLiAgKi8KKysKKysvKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgcGFnZSB0cmF2ZXJzZSB0aGUgaGFzaCB0YWJsZSBhbmQgcHJvY2VzcyB0aGUKKysgICBjb250YWluZWQgZW50cmllcy4gIEZvciB0aGUgdHJhdmVyc2FsIHRvIHdvcmsgcHJvcGVybHksIHRoZSBoYXNoIHRhYmxlCisrICAgc2hvdWxkIG5vdCBiZSByZXNpemVkIG5vciBtb2RpZmllZCB3aGlsZSBhbnkgcGFydGljdWxhciBlbnRyeSBpcyBiZWluZworKyAgIHByb2Nlc3NlZC4gIEluIHBhcnRpY3VsYXIsIGVudHJpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZCBvciByZW1vdmVkLiAgKi8KKysKKysvKiBSZXR1cm4gdGhlIGZpcnN0IGRhdGEgaW4gdGhlIHRhYmxlLCBvciBOVUxMIGlmIHRoZSB0YWJsZSBpcyBlbXB0eS4gICovCisrCisrdm9pZCAqCisraGFzaF9nZXRfZmlyc3QgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBpZiAodGFibGUtPm5fZW50cmllcyA9PSAwKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgOyBidWNrZXQrKykKKysgICAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICAgIGFib3J0ICgpOworKyAgICBlbHNlIGlmIChidWNrZXQtPmRhdGEpCisrICAgICAgcmV0dXJuIGJ1Y2tldC0+ZGF0YTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSB1c2VyIGRhdGEgZm9yIHRoZSBlbnRyeSBmb2xsb3dpbmcgRU5UUlksIHdoZXJlIEVOVFJZIGhhcyBiZWVuCisrICAgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIGVpdGhlciBgaGFzaF9nZXRfZmlyc3QnIG9yIGBoYXNoX2dldF9uZXh0Jy4KKysgICBSZXR1cm4gTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBlbnRyaWVzLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2dldF9uZXh0IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIEZpbmQgbmV4dCBlbnRyeSBpbiB0aGUgc2FtZSBidWNrZXQuICAqLworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICBpZiAoY3Vyc29yLT5kYXRhID09IGVudHJ5ICYmIGN1cnNvci0+bmV4dCkKKysgICAgICByZXR1cm4gY3Vyc29yLT5uZXh0LT5kYXRhOworKworKyAgLyogRmluZCBmaXJzdCBlbnRyeSBpbiBhbnkgc3Vic2VxdWVudCBidWNrZXQuICAqLworKyAgd2hpbGUgKCsrYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkKKysgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysgICAgICByZXR1cm4gYnVja2V0LT5kYXRhOworKworKyAgLyogTm9uZSBmb3VuZC4gICovCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogRmlsbCBCVUZGRVIgd2l0aCBwb2ludGVycyB0byBhY3RpdmUgdXNlciBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlLCB0aGVuCisrICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgY29waWVkLiAgRG8gbm90IGNvcHkgbW9yZSB0aGFuIEJVRkZFUl9TSVpFCisrICAgcG9pbnRlcnMuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIHZvaWQgKipidWZmZXIsCisrCQkgIHVuc2lnbmVkIGJ1ZmZlcl9zaXplKQorK3sKKysgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysJICAgIHsKKysJICAgICAgaWYgKGNvdW50ZXIgPj0gYnVmZmVyX3NpemUpCisrCQlyZXR1cm4gY291bnRlcjsKKysJICAgICAgYnVmZmVyW2NvdW50ZXIrK10gPSBjdXJzb3ItPmRhdGE7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIGNvdW50ZXI7CisrfQorKworKy8qIENhbGwgYSBQUk9DRVNTT1IgZnVuY3Rpb24gZm9yIGVhY2ggZW50cnkgb2YgYSBoYXNoIHRhYmxlLCBhbmQgcmV0dXJuIHRoZQorKyAgIG51bWJlciBvZiBlbnRyaWVzIGZvciB3aGljaCB0aGUgcHJvY2Vzc29yIGZ1bmN0aW9uIHJldHVybmVkIHN1Y2Nlc3MuICBBCisrICAgcG9pbnRlciB0byBzb21lIFBST0NFU1NPUl9EQVRBIHdoaWNoIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gZWFjaCBjYWxsIHRvCisrICAgdGhlIHByb2Nlc3NvciBmdW5jdGlvbi4gIFRoZSBQUk9DRVNTT1IgYWNjZXB0cyB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMKKysgICB0aGUgdXNlciBlbnRyeSBiZWluZyB3YWxrZWQgaW50bywgdGhlIHNlY29uZCBpcyB0aGUgdmFsdWUgb2YgUFJPQ0VTU09SX0RBVEEKKysgICBhcyByZWNlaXZlZC4gIFRoZSB3YWxraW5nIGNvbnRpbnVlIGZvciBhcyBsb25nIGFzIHRoZSBQUk9DRVNTT1IgZnVuY3Rpb24KKysgICByZXR1cm5zIG5vbnplcm8uICBXaGVuIGl0IHJldHVybnMgemVybywgdGhlIHdhbGtpbmcgaXMgaW50ZXJydXB0ZWQuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9kb19mb3JfZWFjaCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIEhhc2hfcHJvY2Vzc29yIHByb2Nlc3NvciwKKysJCSAgdm9pZCAqcHJvY2Vzc29yX2RhdGEpCisreworKyAgdW5zaWduZWQgY291bnRlciA9IDA7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwkgICAgeworKwkgICAgICBpZiAoISgqcHJvY2Vzc29yKSAoY3Vyc29yLT5kYXRhLCBwcm9jZXNzb3JfZGF0YSkpCisrCQlyZXR1cm4gY291bnRlcjsKKysJICAgICAgY291bnRlcisrOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBjb3VudGVyOworK30KKysKKysvKiBBbGxvY2F0aW9uIGFuZCBjbGVhbi11cC4gICovCisrCisrLyogUmV0dXJuIGEgaGFzaCBpbmRleCBmb3IgYSBOVUwtdGVybWluYXRlZCBTVFJJTkcgYmV0d2VlbiAwIGFuZCBOX0JVQ0tFVFMtMS4KKysgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugcm91dGluZSBmb3IgY29uc3RydWN0aW5nIG90aGVyIGhhc2hpbmcgZnVuY3Rpb25zLiAgKi8KKysKKysjaWYgVVNFX0RJRkZfSEFTSAorKworKy8qIEFib3V0IGhhc2hpbmdzLCBQYXVsIEVnZ2VydCB3cml0ZXMgdG8gbWUgKEZQKSwgb24gMTk5NC0wMS0wMTogIlBsZWFzZSBzZWUKKysgICBCLiBKLiBNY0tlbnppZSwgUi4gSGFycmllcyAmIFQuIEJlbGwsIFNlbGVjdGluZyBhIGhhc2hpbmcgYWxnb3JpdGhtLAorKyAgIFNvZnR3YXJlLS1wcmFjdGljZSAmIGV4cGVyaWVuY2UgMjAsIDIgKEZlYiAxOTkwKSwgMjA5LTIyNC4gIEdvb2QgaGFzaAorKyAgIGFsZ29yaXRobXMgdGVuZCB0byBiZSBkb21haW4tc3BlY2lmaWMsIHNvIHdoYXQncyBnb29kIGZvciBbZGlmZnV0aWxzJ10gaW8uYworKyAgIG1heSBub3QgYmUgZ29vZCBmb3IgeW91ciBhcHBsaWNhdGlvbi4iICAqLworKworK3Vuc2lnbmVkCisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgdW5zaWduZWQgbl9idWNrZXRzKQorK3sKKysjIGRlZmluZSBST1RBVEVfTEVGVChWYWx1ZSwgU2hpZnQpIFwKKysgICgoVmFsdWUpIDw8IChTaGlmdCkgfCAoVmFsdWUpID4+ICgoc2l6ZW9mICh1bnNpZ25lZCkgKiBDSEFSX0JJVCkgLSAoU2hpZnQpKSkKKysjIGRlZmluZSBIQVNIX09ORV9DSEFSKFZhbHVlLCBCeXRlKSBcCisrICAoKEJ5dGUpICsgUk9UQVRFX0xFRlQgKFZhbHVlLCA3KSkKKysKKysgIHVuc2lnbmVkIHZhbHVlID0gMDsKKysKKysgIGZvciAoOyAqc3RyaW5nOyBzdHJpbmcrKykKKysgICAgdmFsdWUgPSBIQVNIX09ORV9DSEFSICh2YWx1ZSwgKihjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cmluZyk7CisrICByZXR1cm4gdmFsdWUgJSBuX2J1Y2tldHM7CisrCisrIyB1bmRlZiBST1RBVEVfTEVGVAorKyMgdW5kZWYgSEFTSF9PTkVfQ0hBUgorK30KKysKKysjZWxzZSAvKiBub3QgVVNFX0RJRkZfSEFTSCAqLworKworKy8qIFRoaXMgb25lIGNvbWVzIGZyb20gYHJlY29kZScsIGFuZCBwZXJmb3JtcyBhIGJpdCBiZXR0ZXIgdGhhbiB0aGUgYWJvdmUgYXMKKysgICBwZXIgYSBmZXcgZXhwZXJpbWVudHMuICBJdCBpcyBpbnNwaXJlZCBmcm9tIGEgaGFzaGluZyByb3V0aW5lIGZvdW5kIGluIHRoZQorKyAgIHZlcnkgb2xkIEN5YmVyIGBzbm9vcCcsIGl0c2VsZiB3cml0dGVuIGluIHR5cGljYWwgR3JlZyBNYW5zZmllbGQgc3R5bGUuCisrICAgKEJ5IHRoZSB3YXksIHdoYXQgaGFwcGVuZWQgdG8gdGhpcyBleGNlbGxlbnQgbWFuPyAgSXMgaGUgc3RpbGwgYWxpdmU/KSAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfc3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIG5fYnVja2V0cykKKyt7CisrICB1bnNpZ25lZCB2YWx1ZSA9IDA7CisrCisrICB3aGlsZSAoKnN0cmluZykKKysgICAgdmFsdWUgPSAoKHZhbHVlICogMzEgKyAoaW50KSAqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyaW5nKyspCisrCSAgICAgJSBuX2J1Y2tldHMpOworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKysjZW5kaWYgLyogbm90IFVTRV9ESUZGX0hBU0ggKi8KKysKKysvKiBSZXR1cm4gdHJ1ZSBpZiBDQU5ESURBVEUgaXMgYSBwcmltZSBudW1iZXIuICBDQU5ESURBVEUgc2hvdWxkIGJlIGFuIG9kZAorKyAgIG51bWJlciBhdCBsZWFzdCBlcXVhbCB0byAxMS4gICovCisrCisrc3RhdGljIGJvb2wKKytpc19wcmltZSAodW5zaWduZWQgbG9uZyBjYW5kaWRhdGUpCisreworKyAgdW5zaWduZWQgbG9uZyBkaXZpc29yID0gMzsKKysgIHVuc2lnbmVkIGxvbmcgc3F1YXJlID0gZGl2aXNvciAqIGRpdmlzb3I7CisrCisrICB3aGlsZSAoc3F1YXJlIDwgY2FuZGlkYXRlICYmIChjYW5kaWRhdGUgJSBkaXZpc29yKSkKKysgICAgeworKyAgICAgIGRpdmlzb3IrKzsKKysgICAgICBzcXVhcmUgKz0gNCAqIGRpdmlzb3I7CisrICAgICAgZGl2aXNvcisrOworKyAgICB9CisrCisrICByZXR1cm4gKGNhbmRpZGF0ZSAlIGRpdmlzb3IgPyB0cnVlIDogZmFsc2UpOworK30KKysKKysvKiBSb3VuZCBhIGdpdmVuIENBTkRJREFURSBudW1iZXIgdXAgdG8gdGhlIG5lYXJlc3QgcHJpbWUsIGFuZCByZXR1cm4gdGhhdAorKyAgIHByaW1lLiAgUHJpbWVzIGxvd2VyIHRoYW4gMTAgYXJlIG1lcmVseSBza2lwcGVkLiAgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgbG9uZworK25leHRfcHJpbWUgKHVuc2lnbmVkIGxvbmcgY2FuZGlkYXRlKQorK3sKKysgIC8qIFNraXAgc21hbGwgcHJpbWVzLiAgKi8KKysgIGlmIChjYW5kaWRhdGUgPCAxMCkKKysgICAgY2FuZGlkYXRlID0gMTA7CisrCisrICAvKiBNYWtlIGl0IGRlZmluaXRlbHkgb2RkLiAgKi8KKysgIGNhbmRpZGF0ZSB8PSAxOworKworKyAgd2hpbGUgKCFpc19wcmltZSAoY2FuZGlkYXRlKSkKKysgICAgY2FuZGlkYXRlICs9IDI7CisrCisrICByZXR1cm4gY2FuZGlkYXRlOworK30KKysKKyt2b2lkCisraGFzaF9yZXNldF90dW5pbmcgKEhhc2hfdHVuaW5nICp0dW5pbmcpCisreworKyAgKnR1bmluZyA9IGRlZmF1bHRfdHVuaW5nOworK30KKysKKysvKiBGb3IgdGhlIGdpdmVuIGhhc2ggVEFCTEUsIGNoZWNrIHRoZSB1c2VyIHN1cHBsaWVkIHR1bmluZyBzdHJ1Y3R1cmUgZm9yCisrICAgcmVhc29uYWJsZSB2YWx1ZXMsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBubyBncm9zcyBlcnJvciB3aXRoIGl0LgorKyAgIE90aGVyd2lzZSwgZGVmaW5pdGl2ZWx5IHJlc2V0IHRoZSBUVU5JTkcgZmllbGQgdG8gc29tZSBhY2NlcHRhYmxlIGRlZmF1bHQKKysgICBpbiB0aGUgaGFzaCB0YWJsZSAodGhhdCBpcywgdGhlIHVzZXIgbG9zZXMgdGhlIHJpZ2h0IG9mIGZ1cnRoZXIgbW9kaWZ5aW5nCisrICAgdHVuaW5nIGFyZ3VtZW50cyksIGFuZCByZXR1cm4gZmFsc2UuICAqLworKworK3N0YXRpYyBib29sCisrY2hlY2tfdHVuaW5nIChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKKysKKysgIGlmICh0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPiAwLjAKKysgICAgICAmJiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPCAxLjAKKysgICAgICAmJiB0dW5pbmctPmdyb3d0aF9mYWN0b3IgPiAxLjAKKysgICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQgPj0gMC4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkIDwgMS4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfZmFjdG9yID4gdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfZmFjdG9yIDw9IDEuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCA8IHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkKKysgICAgcmV0dXJuIHRydWU7CisrCisrICB0YWJsZS0+dHVuaW5nID0gJmRlZmF1bHRfdHVuaW5nOworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKysvKiBBbGxvY2F0ZSBhbmQgcmV0dXJuIGEgbmV3IGhhc2ggdGFibGUsIG9yIE5VTEwgdXBvbiBmYWlsdXJlLiAgVGhlIGluaXRpYWwKKysgICBudW1iZXIgb2YgYnVja2V0cyBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHNvIGFzIHRvIF9ndWFyYW50ZWVfIHRoYXQgeW91CisrICAgbWF5IGluc2VydCBhdCBsZWFzdCBDQU5ESURBVEUgZGlmZmVyZW50IHVzZXIgZW50cmllcyBiZWZvcmUgYW55IGdyb3d0aCBvZgorKyAgIHRoZSBoYXNoIHRhYmxlIHNpemUgb2NjdXJzLiAgU28sIGlmIGhhdmUgYSByZWFzb25hYmx5IHRpZ2h0IGEtcHJpb3JpIHVwcGVyCisrICAgYm91bmQgb24gdGhlIG51bWJlciBvZiBlbnRyaWVzIHlvdSBpbnRlbmQgdG8gaW5zZXJ0IGluIHRoZSBoYXNoIHRhYmxlLCB5b3UKKysgICBtYXkgc2F2ZSBzb21lIHRhYmxlIG1lbW9yeSBhbmQgaW5zZXJ0aW9uIHRpbWUsIGJ5IHNwZWNpZnlpbmcgaXQgaGVyZS4gIElmCisrICAgdGhlIElTX05fQlVDS0VUUyBmaWVsZCBvZiB0aGUgVFVOSU5HIHN0cnVjdHVyZSBpcyB0cnVlLCB0aGUgQ0FORElEQVRFCisrICAgYXJndW1lbnQgaGFzIGl0cyBtZWFuaW5nIGNoYW5nZWQgdG8gdGhlIHdhbnRlZCBudW1iZXIgb2YgYnVja2V0cy4KKysKKysgICBUVU5JTkcgcG9pbnRzIHRvIGEgc3RydWN0dXJlIG9mIHVzZXItc3VwcGxpZWQgdmFsdWVzLCBpbiBjYXNlIHNvbWUgZmluZQorKyAgIHR1bmluZyBpcyB3YW50ZWQgb3ZlciB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgaGFzaGVyLiAgSWYgVFVOSU5HIGlzCisrICAgTlVMTCwgdGhlIGRlZmF1bHQgdHVuaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQgaW5zdGVhZC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBIQVNIRVIgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3ZpZGVkLiAgSXQgYWNjZXB0cyB0d28KKysgICBhcmd1bWVudHMgRU5UUlkgYW5kIFRBQkxFX1NJWkUuICBJdCBjb21wdXRlcywgYnkgaGFzaGluZyBFTlRSWSBjb250ZW50cywgYQorKyAgIHNsb3QgbnVtYmVyIGZvciB0aGF0IGVudHJ5IHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgMC4uVEFCTEVfU0laRS0xLgorKyAgIFRoaXMgc2xvdCBudW1iZXIgaXMgdGhlbiByZXR1cm5lZC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBDT01QQVJBVE9SIGZ1bmN0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gIEl0IGFjY2VwdHMgdHdvCisrICAgYXJndW1lbnRzIHBvaW50aW5nIHRvIHVzZXIgZGF0YSwgaXQgdGhlbiByZXR1cm5zIHRydWUgZm9yIGEgcGFpciBvZiBlbnRyaWVzCisrICAgdGhhdCBjb21wYXJlIGVxdWFsLCBvciBmYWxzZSBvdGhlcndpc2UuICBUaGlzIGZ1bmN0aW9uIGlzIGludGVybmFsbHkgY2FsbGVkCisrICAgb24gZW50cmllcyB3aGljaCBhcmUgYWxyZWFkeSBrbm93biB0byBoYXNoIHRvIHRoZSBzYW1lIGJ1Y2tldCBpbmRleC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBEQVRBX0ZSRUVSIGZ1bmN0aW9uLCB3aGVuIG5vdCBOVUxMLCBtYXkgYmUgbGF0ZXIgY2FsbGVkCisrICAgd2l0aCB0aGUgdXNlciBkYXRhIGFzIGFuIGFyZ3VtZW50LCBqdXN0IGJlZm9yZSB0aGUgZW50cnkgY29udGFpbmluZyB0aGUKKysgICBkYXRhIGdldHMgZnJlZWQuICBUaGlzIGhhcHBlbnMgZnJvbSB3aXRoaW4gYGhhc2hfZnJlZScgb3IgYGhhc2hfY2xlYXInLgorKyAgIFlvdSBzaG91bGQgc3BlY2lmeSB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZyZWUKKysgICBhbGwgb2YgeW91ciBgZGF0YScgZGF0YS4gIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBjYXNlIHdoZW4geW91ciBkYXRhIGlzCisrICAgc2ltcGx5IGFuIGF1eGlsaWFyeSBzdHJ1Y3QgdGhhdCB5b3UgaGF2ZSBtYWxsb2MnZCB0byBhZ2dyZWdhdGUgc2V2ZXJhbAorKyAgIHZhbHVlcy4gICovCisrCisrSGFzaF90YWJsZSAqCisraGFzaF9pbml0aWFsaXplICh1bnNpZ25lZCBjYW5kaWRhdGUsIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcsCisrCQkgSGFzaF9oYXNoZXIgaGFzaGVyLCBIYXNoX2NvbXBhcmF0b3IgY29tcGFyYXRvciwKKysJCSBIYXNoX2RhdGFfZnJlZXIgZGF0YV9mcmVlcikKKyt7CisrICBIYXNoX3RhYmxlICp0YWJsZTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBpZiAoaGFzaGVyID09IE5VTEwgfHwgY29tcGFyYXRvciA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIHRhYmxlID0gKEhhc2hfdGFibGUgKikgbWFsbG9jIChzaXplb2YgKEhhc2hfdGFibGUpKTsKKysgIGlmICh0YWJsZSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGlmICghdHVuaW5nKQorKyAgICB0dW5pbmcgPSAmZGVmYXVsdF90dW5pbmc7CisrICB0YWJsZS0+dHVuaW5nID0gdHVuaW5nOworKyAgaWYgKCFjaGVja190dW5pbmcgKHRhYmxlKSkKKysgICAgeworKyAgICAgIC8qIEZhaWwgaWYgdGhlIHR1bmluZyBvcHRpb25zIGFyZSBpbnZhbGlkLiAgVGhpcyBpcyB0aGUgb25seSBvY2Nhc2lvbgorKwkgd2hlbiB0aGUgdXNlciBnZXRzIHNvbWUgZmVlZGJhY2sgYWJvdXQgaXQuICBPbmNlIHRoZSB0YWJsZSBpcyBjcmVhdGVkLAorKwkgaWYgdGhlIHVzZXIgcHJvdmlkZXMgaW52YWxpZCB0dW5pbmcgb3B0aW9ucywgd2Ugc2lsZW50bHkgcmV2ZXJ0IHRvCisrCSB1c2luZyB0aGUgZGVmYXVsdHMsIGFuZCBpZ25vcmUgZnVydGhlciByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgdHVuaW5nCisrCSBvcHRpb25zLiAgKi8KKysgICAgICBmcmVlICh0YWJsZSk7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgIHRhYmxlLT5uX2J1Y2tldHMKKysgICAgPSBuZXh0X3ByaW1lICh0dW5pbmctPmlzX25fYnVja2V0cyA/IGNhbmRpZGF0ZQorKwkJICA6ICh1bnNpZ25lZCkgKGNhbmRpZGF0ZSAvIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkpOworKworKyAgdGFibGUtPmJ1Y2tldCA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKQorKyAgICBtYWxsb2MgKHRhYmxlLT5uX2J1Y2tldHMgKiBzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrICBpZiAodGFibGUtPmJ1Y2tldCA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZnJlZSAodGFibGUpOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrICB0YWJsZS0+YnVja2V0X2xpbWl0ID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5uX2J1Y2tldHM7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysgICAgICBidWNrZXQtPm5leHQgPSBOVUxMOworKyAgICB9CisrICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSAwOworKyAgdGFibGUtPm5fZW50cmllcyA9IDA7CisrCisrICB0YWJsZS0+aGFzaGVyID0gaGFzaGVyOworKyAgdGFibGUtPmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yOworKyAgdGFibGUtPmRhdGFfZnJlZXIgPSBkYXRhX2ZyZWVyOworKworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IE5VTEw7CisrI2lmIFVTRV9PQlNUQUNLCisrICBvYnN0YWNrX2luaXQgKCZ0YWJsZS0+ZW50cnlfc3RhY2spOworKyNlbmRpZgorKyAgcmV0dXJuIHRhYmxlOworK30KKysKKysvKiBNYWtlIGFsbCBidWNrZXRzIGVtcHR5LCBwbGFjaW5nIGFueSBjaGFpbmVkIGVudHJpZXMgb24gdGhlIGZyZWUgbGlzdC4KKysgICBBcHBseSB0aGUgdXNlci1zcGVjaWZpZWQgZnVuY3Rpb24gZGF0YV9mcmVlciAoaWYgYW55KSB0byB0aGUgZGF0YXMgb2YgYW55CisrICAgYWZmZWN0ZWQgZW50cmllcy4gICovCisrCisrdm9pZAorK2hhc2hfY2xlYXIgKEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisrCisrCSAgLyogRnJlZSB0aGUgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJICBmb3IgKGN1cnNvciA9IGJ1Y2tldC0+bmV4dDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKwkgICAgeworKwkgICAgICBpZiAodGFibGUtPmRhdGFfZnJlZXIpCisrCQkoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoY3Vyc29yLT5kYXRhKTsKKysJICAgICAgY3Vyc29yLT5kYXRhID0gTlVMTDsKKysKKysJICAgICAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKysJICAgICAgLyogUmVsaW5raW5nIGlzIGRvbmUgb25lIGVudHJ5IGF0IGEgdGltZSwgYXMgaXQgaXMgdG8gYmUgZXhwZWN0ZWQKKysJCSB0aGF0IG92ZXJmbG93cyBhcmUgZWl0aGVyIHJhcmUgb3Igc2hvcnQuICAqLworKwkgICAgICBjdXJzb3ItPm5leHQgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKwkgICAgICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gY3Vyc29yOworKwkgICAgfQorKworKwkgIC8qIEZyZWUgdGhlIGJ1Y2tldCBoZWFkLiAgKi8KKysJICBpZiAodGFibGUtPmRhdGFfZnJlZXIpCisrCSAgICAoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoYnVja2V0LT5kYXRhKTsKKysJICBidWNrZXQtPmRhdGEgPSBOVUxMOworKwkgIGJ1Y2tldC0+bmV4dCA9IE5VTEw7CisrCX0KKysgICAgfQorKworKyAgdGFibGUtPm5fYnVja2V0c191c2VkID0gMDsKKysgIHRhYmxlLT5uX2VudHJpZXMgPSAwOworK30KKysKKysvKiBSZWNsYWltIGFsbCBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBhIGhhc2ggdGFibGUuICBJZiBhIGRhdGFfZnJlZXIKKysgICBmdW5jdGlvbiBoYXMgYmVlbiBzdXBwbGllZCBieSB0aGUgdXNlciB3aGVuIHRoZSBoYXNoIHRhYmxlIHdhcyBjcmVhdGVkLAorKyAgIHRoaXMgZnVuY3Rpb24gYXBwbGllcyBpdCB0byB0aGUgZGF0YSBvZiBlYWNoIGVudHJ5IGJlZm9yZSBmcmVlaW5nIHRoYXQKKysgICBlbnRyeS4gICovCisrCisrdm9pZAorK2hhc2hfZnJlZSAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysKKysgIC8qIENhbGwgdGhlIHVzZXIgZGF0YV9mcmVlciBmdW5jdGlvbi4gICovCisrICBpZiAodGFibGUtPmRhdGFfZnJlZXIgJiYgdGFibGUtPm5fZW50cmllcykKKysgICAgeworKyAgICAgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrCXsKKysJICBpZiAoYnVja2V0LT5kYXRhKQorKwkgICAgeworKwkgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCQl7CisrCQkgICgqdGFibGUtPmRhdGFfZnJlZXIpIChjdXJzb3ItPmRhdGEpOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKysjaWYgVVNFX09CU1RBQ0sKKysKKysgIG9ic3RhY2tfZnJlZSAoJnRhYmxlLT5lbnRyeV9zdGFjaywgTlVMTCk7CisrCisrI2Vsc2UKKysKKysgIC8qIEZyZWUgYWxsIGJ1Y2tldCBvdmVyZmxvd2VkIGVudHJpZXMuICAqLworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0LT5uZXh0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrCXsKKysJICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKwkgIGZyZWUgKGN1cnNvcik7CisrCX0KKysgICAgfQorKworKyAgLyogQWxzbyByZWNsYWltIHRoZSBpbnRlcm5hbCBsaXN0IG9mIHByZXZpb3VzbHkgZnJlZWQgZW50cmllcy4gICovCisrICBmb3IgKGN1cnNvciA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKKysgICAgeworKyAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrICAgICAgZnJlZSAoY3Vyc29yKTsKKysgICAgfQorKworKyNlbmRpZgorKworKyAgLyogRnJlZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZS4gICovCisrICBmcmVlICh0YWJsZS0+YnVja2V0KTsKKysgIGZyZWUgKHRhYmxlKTsKKyt9CisrCisrLyogSW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4gICovCisrCisrLyogR2V0IGEgbmV3IGhhc2ggZW50cnkgZm9yIGEgYnVja2V0IG92ZXJmbG93LCBwb3NzaWJseSBieSByZWNseWluZyBhCisrICAgcHJldmlvdXNseSBmcmVlZCBvbmUuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYWxsb2NhdGUgYSBuZXcgb25lLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IGhhc2hfZW50cnkgKgorK2FsbG9jYXRlX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3OworKworKyAgaWYgKHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QpCisrICAgIHsKKysgICAgICBuZXcgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgICAgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBuZXctPm5leHQ7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyNpZiBVU0VfT0JTVEFDSworKyAgICAgIG5ldyA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKQorKwlvYnN0YWNrX2FsbG9jICgmdGFibGUtPmVudHJ5X3N0YWNrLCBzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrI2Vsc2UKKysgICAgICBuZXcgPSAoc3RydWN0IGhhc2hfZW50cnkgKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrI2VuZGlmCisrICAgIH0KKysKKysgIHJldHVybiBuZXc7CisrfQorKworKy8qIEZyZWUgYSBoYXNoIGVudHJ5IHdoaWNoIHdhcyBwYXJ0IG9mIHNvbWUgYnVja2V0IG92ZXJmbG93LAorKyAgIHNhdmluZyBpdCBmb3IgbGF0ZXIgcmVjeWNsaW5nLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK2ZyZWVfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgaGFzaF9lbnRyeSAqZW50cnkpCisreworKyAgZW50cnktPmRhdGEgPSBOVUxMOworKyAgZW50cnktPm5leHQgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IGVudHJ5OworK30KKysKKysvKiBUaGlzIHByaXZhdGUgZnVuY3Rpb24gaXMgdXNlZCB0byBoZWxwIHdpdGggaW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4gIFdoZW4KKysgICBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGluIHRoZSB0YWJsZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZworKyAgIHVzZXIgZGF0YSBhbmQgc2V0ICpCVUNLRVRfSEVBRCB0byB0aGUgaGVhZCBvZiB0aGUgc2VsZWN0ZWQgYnVja2V0LgorKyAgIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuICBXaGVuIERFTEVURSBpcyB0cnVlIGFuZCBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGluCisrICAgdGhlIHRhYmxlLCB1bmxpbmsgdGhlIG1hdGNoaW5nIGVudHJ5LiAgKi8KKysKKytzdGF0aWMgdm9pZCAqCisraGFzaF9maW5kX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnksCisrCQkgc3RydWN0IGhhc2hfZW50cnkgKipidWNrZXRfaGVhZCwgYm9vbCBkZWxldGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgICpidWNrZXRfaGVhZCA9IGJ1Y2tldDsKKysKKysgIC8qIFRlc3QgZm9yIGVtcHR5IGJ1Y2tldC4gICovCisrICBpZiAoYnVja2V0LT5kYXRhID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogU2VlIGlmIHRoZSBlbnRyeSBpcyB0aGUgZmlyc3QgaW4gdGhlIGJ1Y2tldC4gICovCisrICBpZiAoKCp0YWJsZS0+Y29tcGFyYXRvcikgKGVudHJ5LCBidWNrZXQtPmRhdGEpKQorKyAgICB7CisrICAgICAgdm9pZCAqZGF0YSA9IGJ1Y2tldC0+ZGF0YTsKKysKKysgICAgICBpZiAoZGVsZXRlKQorKwl7CisrCSAgaWYgKGJ1Y2tldC0+bmV4dCkKKysJICAgIHsKKysJICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBidWNrZXQtPm5leHQ7CisrCisrCSAgICAgIC8qIEJ1bXAgdGhlIGZpcnN0IG92ZXJmbG93IGVudHJ5IGludG8gdGhlIGJ1Y2tldCBoZWFkLCB0aGVuIHNhdmUKKysJCSB0aGUgcHJldmlvdXMgZmlyc3Qgb3ZlcmZsb3cgZW50cnkgZm9yIGxhdGVyIHJlY3ljbGluZy4gICovCisrCSAgICAgICpidWNrZXQgPSAqbmV4dDsKKysJICAgICAgZnJlZV9lbnRyeSAodGFibGUsIG5leHQpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysJICAgIH0KKysJfQorKworKyAgICAgIHJldHVybiBkYXRhOworKyAgICB9CisrCisrICAvKiBTY2FuIHRoZSBidWNrZXQgb3ZlcmZsb3cuICAqLworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvci0+bmV4dDsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICB7CisrICAgICAgaWYgKCgqdGFibGUtPmNvbXBhcmF0b3IpIChlbnRyeSwgY3Vyc29yLT5uZXh0LT5kYXRhKSkKKysJeworKwkgIHZvaWQgKmRhdGEgPSBjdXJzb3ItPm5leHQtPmRhdGE7CisrCisrCSAgaWYgKGRlbGV0ZSkKKysJICAgIHsKKysJICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBjdXJzb3ItPm5leHQ7CisrCisrCSAgICAgIC8qIFVubGluayB0aGUgZW50cnkgdG8gZGVsZXRlLCB0aGVuIHNhdmUgdGhlIGZyZWVkIGVudHJ5IGZvciBsYXRlcgorKwkJIHJlY3ljbGluZy4gICovCisrCSAgICAgIGN1cnNvci0+bmV4dCA9IG5leHQtPm5leHQ7CisrCSAgICAgIGZyZWVfZW50cnkgKHRhYmxlLCBuZXh0KTsKKysJICAgIH0KKysKKysJICByZXR1cm4gZGF0YTsKKysJfQorKyAgICB9CisrCisrICAvKiBObyBlbnRyeSBmb3VuZC4gICovCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogRm9yIGFuIGFscmVhZHkgZXhpc3RpbmcgaGFzaCB0YWJsZSwgY2hhbmdlIHRoZSBudW1iZXIgb2YgYnVja2V0cyB0aHJvdWdoCisrICAgc3BlY2lmeWluZyBDQU5ESURBVEUuICBUaGUgY29udGVudHMgb2YgdGhlIGhhc2ggdGFibGUgYXJlIHByZXNlcnZlZC4gIFRoZQorKyAgIG5ldyBudW1iZXIgb2YgYnVja2V0cyBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHNvIGFzIHRvIF9ndWFyYW50ZWVfIHRoYXQKKysgICB0aGUgdGFibGUgbWF5IHJlY2VpdmUgYXQgbGVhc3QgQ0FORElEQVRFIGRpZmZlcmVudCB1c2VyIGVudHJpZXMsIGluY2x1ZGluZworKyAgIHRob3NlIGFscmVhZHkgaW4gdGhlIHRhYmxlLCBiZWZvcmUgYW55IG90aGVyIGdyb3d0aCBvZiB0aGUgaGFzaCB0YWJsZSBzaXplCisrICAgb2NjdXJzLiAgSWYgVFVOSU5HLT5JU19OX0JVQ0tFVFMgaXMgdHJ1ZSwgdGhlbiBDQU5ESURBVEUgc3BlY2lmaWVzIHRoZQorKyAgIGV4YWN0IG51bWJlciBvZiBidWNrZXRzIGRlc2lyZWQuICAqLworKworK2Jvb2wKKytoYXNoX3JlaGFzaCAoSGFzaF90YWJsZSAqdGFibGUsIHVuc2lnbmVkIGNhbmRpZGF0ZSkKKyt7CisrICBIYXNoX3RhYmxlICpuZXdfdGFibGU7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKworKyAgbmV3X3RhYmxlID0gaGFzaF9pbml0aWFsaXplIChjYW5kaWRhdGUsIHRhYmxlLT50dW5pbmcsIHRhYmxlLT5oYXNoZXIsCisrCQkJICAgICAgIHRhYmxlLT5jb21wYXJhdG9yLCB0YWJsZS0+ZGF0YV9mcmVlcik7CisrICBpZiAobmV3X3RhYmxlID09IE5VTEwpCisrICAgIHJldHVybiBmYWxzZTsKKysKKysgIC8qIE1lcmVseSByZXVzZSB0aGUgZXh0cmEgb2xkIHNwYWNlIGludG8gdGhlIG5ldyB0YWJsZS4gICovCisrI2lmIFVTRV9PQlNUQUNLCisrICBvYnN0YWNrX2ZyZWUgKCZuZXdfdGFibGUtPmVudHJ5X3N0YWNrLCBOVUxMKTsKKysgIG5ld190YWJsZS0+ZW50cnlfc3RhY2sgPSB0YWJsZS0+ZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICBuZXdfdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICBpZiAoYnVja2V0LT5kYXRhKQorKyAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrCXsKKysJICB2b2lkICpkYXRhID0gY3Vyc29yLT5kYXRhOworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfYnVja2V0CisrCSAgICA9IChuZXdfdGFibGUtPmJ1Y2tldAorKwkgICAgICAgKyBuZXdfdGFibGUtPmhhc2hlciAoZGF0YSwgbmV3X3RhYmxlLT5uX2J1Y2tldHMpKTsKKysKKysJICBpZiAoISAobmV3X2J1Y2tldCA8IG5ld190YWJsZS0+YnVja2V0X2xpbWl0KSkKKysJICAgIGFib3J0ICgpOworKworKwkgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrCisrCSAgaWYgKG5ld19idWNrZXQtPmRhdGEpCisrCSAgICB7CisrCSAgICAgIGlmIChjdXJzb3IgPT0gYnVja2V0KQorKwkJeworKwkJICAvKiBBbGxvY2F0ZSBvciByZWN5Y2xlIGFuIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEgYnVja2V0CisrCQkgICAgIGhlYWRlciBpbnRvIGEgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJCSAgc3RydWN0IGhhc2hfZW50cnkgKm5ld19lbnRyeSA9IGFsbG9jYXRlX2VudHJ5IChuZXdfdGFibGUpOworKworKwkJICBpZiAobmV3X2VudHJ5ID09IE5VTEwpCisrCQkgICAgcmV0dXJuIGZhbHNlOworKworKwkJICBuZXdfZW50cnktPmRhdGEgPSBkYXRhOworKwkJICBuZXdfZW50cnktPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OworKwkJICBuZXdfYnVja2V0LT5uZXh0ID0gbmV3X2VudHJ5OworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIE1lcmVseSByZWxpbmsgYW4gZXhpc3RpbmcgZW50cnksIHdoZW4gbW92aW5nIGZyb20gYQorKwkJICAgICBidWNrZXQgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCQkgIGN1cnNvci0+bmV4dCA9IG5ld19idWNrZXQtPm5leHQ7CisrCQkgIG5ld19idWNrZXQtPm5leHQgPSBjdXJzb3I7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBGcmVlIGFuIGV4aXN0aW5nIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEgYnVja2V0CisrCQkgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBoZWFkZXIuICBBbHNvIHRha2UgY2FyZSBvZiB0aGUKKysJCSBzaW1wbGUgY2FzZSBvZiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldCBoZWFkZXIgaW50byBhIGJ1Y2tldAorKwkJIGhlYWRlci4gICovCisrCSAgICAgIG5ld19idWNrZXQtPmRhdGEgPSBkYXRhOworKwkgICAgICBuZXdfdGFibGUtPm5fYnVja2V0c191c2VkKys7CisrCSAgICAgIGlmIChjdXJzb3IgIT0gYnVja2V0KQorKwkJZnJlZV9lbnRyeSAobmV3X3RhYmxlLCBjdXJzb3IpOworKwkgICAgfQorKwl9CisrCisrICBmcmVlICh0YWJsZS0+YnVja2V0KTsKKysgIHRhYmxlLT5idWNrZXQgPSBuZXdfdGFibGUtPmJ1Y2tldDsKKysgIHRhYmxlLT5idWNrZXRfbGltaXQgPSBuZXdfdGFibGUtPmJ1Y2tldF9saW1pdDsKKysgIHRhYmxlLT5uX2J1Y2tldHMgPSBuZXdfdGFibGUtPm5fYnVja2V0czsKKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCA9IG5ld190YWJsZS0+bl9idWNrZXRzX3VzZWQ7CisrICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gbmV3X3RhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrICAvKiB0YWJsZS0+bl9lbnRyaWVzIGFscmVhZHkgaG9sZHMgaXRzIHZhbHVlLiAgKi8KKysjaWYgVVNFX09CU1RBQ0sKKysgIHRhYmxlLT5lbnRyeV9zdGFjayA9IG5ld190YWJsZS0+ZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICBmcmVlIChuZXdfdGFibGUpOworKworKyAgcmV0dXJuIHRydWU7CisrfQorKworKy8qIElmIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSwgcmV0dXJuIHRoZSBwb2ludGVyCisrICAgdG8gdGhlIGVudHJ5IGZyb20gdGhlIHRhYmxlLiAgT3RoZXJ3aXNlLCBpbnNlcnQgRU5UUlkgYW5kIHJldHVybiBFTlRSWS4KKysgICBSZXR1cm4gTlVMTCBpZiB0aGUgc3RvcmFnZSByZXF1aXJlZCBmb3IgaW5zZXJ0aW9uIGNhbm5vdCBiZSBhbGxvY2F0ZWQuICAqLworKworK3ZvaWQgKgorK2hhc2hfaW5zZXJ0IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgdm9pZCAqZGF0YTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICAvKiBUaGUgY2FsbGVyIGNhbm5vdCBpbnNlcnQgYSBOVUxMIGVudHJ5LiAgKi8KKysgIGlmICghIGVudHJ5KQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIElmIHRoZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBhbHJlYWR5IGluIHRoZSB0YWJsZSwgcmV0dXJuIHRoYXQuICAqLworKyAgaWYgKChkYXRhID0gaGFzaF9maW5kX2VudHJ5ICh0YWJsZSwgZW50cnksICZidWNrZXQsIGZhbHNlKSkgIT0gTlVMTCkKKysgICAgcmV0dXJuIGRhdGE7CisrCisrICAvKiBFTlRSWSBpcyBub3QgbWF0Y2hlZCwgaXQgc2hvdWxkIGJlIGluc2VydGVkLiAgKi8KKysKKysgIGlmIChidWNrZXQtPmRhdGEpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2VudHJ5ID0gYWxsb2NhdGVfZW50cnkgKHRhYmxlKTsKKysKKysgICAgICBpZiAobmV3X2VudHJ5ID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKworKyAgICAgIC8qIEFkZCBFTlRSWSBpbiB0aGUgb3ZlcmZsb3cgb2YgdGhlIGJ1Y2tldC4gICovCisrCisrICAgICAgbmV3X2VudHJ5LT5kYXRhID0gKHZvaWQgKikgZW50cnk7CisrICAgICAgbmV3X2VudHJ5LT5uZXh0ID0gYnVja2V0LT5uZXh0OworKyAgICAgIGJ1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKKysgICAgICB0YWJsZS0+bl9lbnRyaWVzKys7CisrICAgICAgcmV0dXJuICh2b2lkICopIGVudHJ5OworKyAgICB9CisrCisrICAvKiBBZGQgRU5UUlkgcmlnaHQgaW4gdGhlIGJ1Y2tldCBoZWFkLiAgKi8KKysKKysgIGJ1Y2tldC0+ZGF0YSA9ICh2b2lkICopIGVudHJ5OworKyAgdGFibGUtPm5fZW50cmllcysrOworKyAgdGFibGUtPm5fYnVja2V0c191c2VkKys7CisrCisrICAvKiBJZiB0aGUgZ3Jvd3RoIHRocmVzaG9sZCBvZiB0aGUgYnVja2V0cyBpbiB1c2UgaGFzIGJlZW4gcmVhY2hlZCwgaW5jcmVhc2UKKysgICAgIHRoZSB0YWJsZSBzaXplIGFuZCByZWhhc2guICBUaGVyZSdzIG5vIHBvaW50IGluIGNoZWNraW5nIHRoZSBudW1iZXIgb2YKKysgICAgIGVudHJpZXM6ICBpZiB0aGUgaGFzaGluZyBmdW5jdGlvbiBpcyBpbGwtY29uZGl0aW9uZWQsIHJlaGFzaGluZyBpcyBub3QKKysgICAgIGxpa2VseSB0byBpbXByb3ZlIGl0LiAgKi8KKysKKysgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysgICAgICA+IHRhYmxlLT50dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKyAgICB7CisrICAgICAgLyogQ2hlY2sgbW9yZSBmdWxseSwgYmVmb3JlIHN0YXJ0aW5nIHJlYWwgd29yay4gIElmIHR1bmluZyBhcmd1bWVudHMKKysJIGJlY2FtZSBpbnZhbGlkLCB0aGUgc2Vjb25kIGNoZWNrIHdpbGwgcmVseSBvbiBwcm9wZXIgZGVmYXVsdHMuICAqLworKyAgICAgIGNoZWNrX3R1bmluZyAodGFibGUpOworKyAgICAgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysJICA+IHRhYmxlLT50dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKwl7CisrCSAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisrCSAgdW5zaWduZWQgY2FuZGlkYXRlCisrCSAgICA9ICh1bnNpZ25lZCkgKHR1bmluZy0+aXNfbl9idWNrZXRzCisrCQkJICA/ICh0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5ncm93dGhfZmFjdG9yKQorKwkJCSAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvcgorKwkJCSAgICAgKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysJICAvKiBJZiB0aGUgcmVoYXNoIGZhaWxzLCBhcnJhbmdlIHRvIHJldHVybiBOVUxMLiAgKi8KKysJICBpZiAoIWhhc2hfcmVoYXNoICh0YWJsZSwgY2FuZGlkYXRlKSkKKysJICAgIGVudHJ5ID0gTlVMTDsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gKHZvaWQgKikgZW50cnk7CisrfQorKworKy8qIElmIEVOVFJZIGlzIGFscmVhZHkgaW4gdGhlIHRhYmxlLCByZW1vdmUgaXQgYW5kIHJldHVybiB0aGUganVzdC1kZWxldGVkCisrICAgZGF0YSAodGhlIHVzZXIgbWF5IHdhbnQgdG8gZGVhbGxvY2F0ZSBpdHMgc3RvcmFnZSkuICBJZiBFTlRSWSBpcyBub3QgaW4gdGhlCisrICAgdGFibGUsIGRvbid0IG1vZGlmeSB0aGUgdGFibGUgYW5kIHJldHVybiBOVUxMLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2RlbGV0ZSAoSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHZvaWQgKmRhdGE7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZGF0YSA9IGhhc2hfZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCB0cnVlKTsKKysgIGlmICghZGF0YSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICB0YWJsZS0+bl9lbnRyaWVzLS07CisrICBpZiAoIWJ1Y2tldC0+ZGF0YSkKKysgICAgeworKyAgICAgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZC0tOworKworKyAgICAgIC8qIElmIHRoZSBzaHJpbmsgdGhyZXNob2xkIG9mIHRoZSBidWNrZXRzIGluIHVzZSBoYXMgYmVlbiByZWFjaGVkLAorKwkgcmVoYXNoIGludG8gYSBzbWFsbGVyIHRhYmxlLiAgKi8KKysKKysgICAgICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrCSAgPCB0YWJsZS0+dHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysJeworKwkgIC8qIENoZWNrIG1vcmUgZnVsbHksIGJlZm9yZSBzdGFydGluZyByZWFsIHdvcmsuICBJZiB0dW5pbmcgYXJndW1lbnRzCisrCSAgICAgYmVjYW1lIGludmFsaWQsIHRoZSBzZWNvbmQgY2hlY2sgd2lsbCByZWx5IG9uIHByb3BlciBkZWZhdWx0cy4gICovCisrCSAgY2hlY2tfdHVuaW5nICh0YWJsZSk7CisrCSAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAorKwkgICAgICA8IHRhYmxlLT50dW5pbmctPnNocmlua190aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKwkgICAgeworKwkgICAgICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKKysJICAgICAgdW5zaWduZWQgY2FuZGlkYXRlCisrCQk9ICh1bnNpZ25lZCkgKHR1bmluZy0+aXNfbl9idWNrZXRzCisrCQkJICAgICAgPyB0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5zaHJpbmtfZmFjdG9yCisrCQkJICAgICAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+c2hyaW5rX2ZhY3RvcgorKwkJCQkgKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysJICAgICAgaGFzaF9yZWhhc2ggKHRhYmxlLCBjYW5kaWRhdGUpOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBkYXRhOworK30KKysKKysvKiBUZXN0aW5nLiAgKi8KKysKKysjaWYgVEVTVElORworKworK3ZvaWQKKytoYXNoX3ByaW50IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICAgICAgaWYgKGJ1Y2tldCkKKysJcHJpbnRmICgiJWQ6XG4iLCBidWNrZXQgLSB0YWJsZS0+YnVja2V0KTsKKysKKysgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCXsKKysJICBjaGFyICpzID0gKGNoYXIgKikgY3Vyc29yLT5kYXRhOworKwkgIC8qIEZJWE1FICovCisrCSAgaWYgKHMpCisrCSAgICBwcmludGYgKCIgICVzXG4iLCBzKTsKKysJfQorKyAgICB9CisrfQorKworKyNlbmRpZiAvKiBURVNUSU5HICovCistLS0gcGF0Y2gtMi41Ljkub3JpZy9oYXNoLmgKKysrKyBwYXRjaC0yLjUuOS9oYXNoLmgKK0BAIC0wLDAgKzEsOTMgQEAKKysvKiBoYXNoIC0gaGFzaGluZyB0YWJsZSBwcm9jZXNzaW5nLgorKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZyA8bWV5ZXJpbmdAYXNjZW5kLmNvbT4sIDE5OTguCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysvKiBBIGdlbmVyaWMgaGFzaCB0YWJsZSBwYWNrYWdlLiAgKi8KKysKKysvKiBNYWtlIHN1cmUgVVNFX09CU1RBQ0sgaXMgZGVmaW5lZCB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlCisrICAgb2JzdGFja3MgaW5zdGVhZCBvZiBtYWxsb2MsIGFuZCByZWNvbXBpbGUgYGhhc2guYycgd2l0aCBzYW1lIHNldHRpbmcuICAqLworKworKyNpZm5kZWYgSEFTSF9IXworKyMgZGVmaW5lIEhBU0hfSF8KKysKKysjIGlmbmRlZiBQQVJBTVMKKysjICBpZiBQUk9UT1RZUEVTIHx8IF9fU1REQ19fCisrIyAgIGRlZmluZSBQQVJBTVMoQXJncykgQXJncworKyMgIGVsc2UKKysjICAgZGVmaW5lIFBBUkFNUyhBcmdzKSAoKQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworK3R5cGVkZWYgdW5zaWduZWQgKCpIYXNoX2hhc2hlcikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCkpOworK3R5cGVkZWYgYm9vbCAoKkhhc2hfY29tcGFyYXRvcikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKyt0eXBlZGVmIHZvaWQgKCpIYXNoX2RhdGFfZnJlZXIpIFBBUkFNUyAoKHZvaWQgKikpOworK3R5cGVkZWYgYm9vbCAoKkhhc2hfcHJvY2Vzc29yKSBQQVJBTVMgKCh2b2lkICosIHZvaWQgKikpOworKworK3N0cnVjdCBoYXNoX2VudHJ5CisrICB7CisrICAgIHZvaWQgKmRhdGE7CisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKyAgfTsKKysKKytzdHJ1Y3QgaGFzaF90dW5pbmcKKysgIHsKKysgICAgLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbWFpbmx5IHVzZWQgZm9yIGBoYXNoX2luaXRpYWxpemUnLCBzZWUgdGhlIGJsb2NrCisrICAgICAgIGRvY3VtZW50YXRpb24gb2YgYGhhc2hfcmVzZXRfdHVuaW5nJyBmb3IgbW9yZSBjb21wbGV0ZSBjb21tZW50cy4gICovCisrCisrICAgIGZsb2F0IHNocmlua190aHJlc2hvbGQ7CS8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgc2hyaW5rICovCisrICAgIGZsb2F0IHNocmlua19mYWN0b3I7CS8qIHJhdGlvIG9mIG5ldyBzbWFsbGVyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworKyAgICBmbG9hdCBncm93dGhfdGhyZXNob2xkOwkvKiByYXRpbyBvZiB1c2VkIGJ1Y2tldHMgdG8gdHJpZ2dlciBhIGdyb3d0aCAqLworKyAgICBmbG9hdCBncm93dGhfZmFjdG9yOwkvKiByYXRpbyBvZiBuZXcgYmlnZ2VyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworKyAgICBib29sIGlzX25fYnVja2V0czsJCS8qIGlmIENBTkRJREFURSByZWFsbHkgbWVhbnMgdGFibGUgc2l6ZSAqLworKyAgfTsKKysKKyt0eXBlZGVmIHN0cnVjdCBoYXNoX3R1bmluZyBIYXNoX3R1bmluZzsKKysKKytzdHJ1Y3QgaGFzaF90YWJsZTsKKysKKyt0eXBlZGVmIHN0cnVjdCBoYXNoX3RhYmxlIEhhc2hfdGFibGU7CisrCisrLyogSW5mb3JtYXRpb24gYW5kIGxvb2t1cC4gICovCisrdW5zaWduZWQgaGFzaF9nZXRfbl9idWNrZXRzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fYnVja2V0c191c2VkIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fZW50cmllcyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKytib29sIGhhc2hfdGFibGVfb2sgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7Cisrdm9pZCBoYXNoX3ByaW50X3N0YXRpc3RpY3MgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBGSUxFICopKTsKKyt2b2lkICpoYXNoX2xvb2t1cCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikpOworKworKy8qIFdhbGtpbmcuICAqLworK3ZvaWQgKmhhc2hfZ2V0X2ZpcnN0IFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3ZvaWQgKmhhc2hfZ2V0X25leHQgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9lbnRyaWVzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgdm9pZCAqKiwgdW5zaWduZWQpKTsKKyt1bnNpZ25lZCBoYXNoX2RvX2Zvcl9lYWNoIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgSGFzaF9wcm9jZXNzb3IsIHZvaWQgKikpOworKworKy8qIEFsbG9jYXRpb24gYW5kIGNsZWFuLXVwLiAgKi8KKyt1bnNpZ25lZCBoYXNoX3N0cmluZyBQQVJBTVMgKChjb25zdCBjaGFyICosIHVuc2lnbmVkKSk7Cisrdm9pZCBoYXNoX3Jlc2V0X3R1bmluZyBQQVJBTVMgKChIYXNoX3R1bmluZyAqKSk7CisrSGFzaF90YWJsZSAqaGFzaF9pbml0aWFsaXplIFBBUkFNUyAoKHVuc2lnbmVkLCBjb25zdCBIYXNoX3R1bmluZyAqLAorKwkJCQkgICAgIEhhc2hfaGFzaGVyLCBIYXNoX2NvbXBhcmF0b3IsCisrCQkJCSAgICAgSGFzaF9kYXRhX2ZyZWVyKSk7Cisrdm9pZCBoYXNoX2NsZWFyIFBBUkFNUyAoKEhhc2hfdGFibGUgKikpOworK3ZvaWQgaGFzaF9mcmVlIFBBUkFNUyAoKEhhc2hfdGFibGUgKikpOworKworKy8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLworK2Jvb2wgaGFzaF9yZWhhc2ggUEFSQU1TICgoSGFzaF90YWJsZSAqLCB1bnNpZ25lZCkpOworK3ZvaWQgKmhhc2hfaW5zZXJ0IFBBUkFNUyAoKEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7Cisrdm9pZCAqaGFzaF9kZWxldGUgUEFSQU1TICgoSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKysKKysjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2dsb2JhbC1yZWplY3QtZmlsZS5kaWZmCkBAIC0wLDAgKzEsMjAzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLm1hbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2gubWFuCisrKysgcGF0Y2gtMi41LjkvcGF0Y2gubWFuCitAQCAtNTIwLDYgKzUyMCwxNSBAQCBmaWxlLgorIFxmQlwqPXJlamVjdFwtdW5pZmllZFxmUAorIFByb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMuIFRoZSBkZWZhdWx0IGlzIHRvIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcy4KKyAuVFAKKysuQkkgXCo9Z2xvYmFsXC1yZWplY3RcLWZpbGU9IHJlamVjdGZpbGUKKytQdXQgYWxsIHJlamVjdHMgaW50bworKy5JIHJlamVjdGZpbGUKKytpbnN0ZWFkIG9mIGNyZWF0aW5nIHNlcGFyYXRlIHJlamVjdCBmaWxlcyBmb3IgYWxsIGZpbGVzIHRoYXQgaGF2ZSByZWplY3RzLiBUaGUKKysuSSByZWplY3RmaWxlCisrd2lsbCBjb250YWluIGhlYWRlcnMgdGhhdCBpZGVudGlmeSB3aGljaCBmaWxlIGVhY2ggcmVqZWN0IHJlZmVycyB0by4gTm90ZSB0aGF0CisrdGhlIGdsb2JhbCByZWplY3QgZmlsZSBpcyBjcmVhdGVkIGV2ZW4gaWYgXC1cLWRyeVwtcnVuIGlzIHNwZWNpZmllZCAod2hpbGUKKytub24tZ2xvYmFsIHJlamVjdCBmaWxlcyB3aWxsIG9ubHkgYmUgY3JlYXRlZCB3aXRob3V0IFwtXC1kcnlcLXJ1bikuCisrLlRQCisgXGZCXC1SXGZQICBvciAgXGZCXCo9cmV2ZXJzZVxmUAorIEFzc3VtZSB0aGF0IHRoaXMgcGF0Y2ggd2FzIGNyZWF0ZWQgd2l0aCB0aGUgb2xkIGFuZCBuZXcgZmlsZXMgc3dhcHBlZC4KKyAoWWVzLCBJJ20gYWZyYWlkIHRoYXQgZG9lcyBoYXBwZW4gb2NjYXNpb25hbGx5LCBodW1hbiBuYXR1cmUgYmVpbmcgd2hhdCBpdAorSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5jCitAQCAtNjcsNiArNjcsNyBAQCBzdGF0aWMgYm9vbCBzaW1pbGFyIChjaGFyIGNvbnN0ICosIHNpemVfCisgc3RhdGljIGJvb2wgc3Bld19vdXRwdXQgKHN0cnVjdCBvdXRzdGF0ZSAqKTsKKyBzdGF0aWMgY2hhciBjb25zdCAqbWFrZV90ZW1wIChjaGFyKTsKKyBzdGF0aWMgaW50IG51bWVyaWNfc3RyaW5nIChjaGFyIGNvbnN0ICosIGJvb2wsIGNoYXIgY29uc3QgKik7Cisrc3RhdGljIHZvaWQgcmVqZWN0X2hlYWRlciAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworIHN0YXRpYyB2b2lkIGFib3J0X2h1bmsgKHZvaWQpOworIHN0YXRpYyB2b2lkIGNsZWFudXAgKHZvaWQpOworIHN0YXRpYyB2b2lkIGdldF9zb21lX3N3aXRjaGVzICh2b2lkKTsKK0BAIC05OCw2ICs5OSw3IEBAIHN0YXRpYyBpbnQgQXJnYzsKKyBzdGF0aWMgY2hhciAqIGNvbnN0ICpBcmd2OworIAorIHN0YXRpYyBGSUxFICpyZWpmcDsgIC8qIHJlamVjdCBmaWxlIHBvaW50ZXIgKi8KKytzdGF0aWMgY2hhciAqZ2xvYmFsX3JlamVjdDsKKyAKKyBzdGF0aWMgY2hhciBjb25zdCAqcGF0Y2huYW1lOworIHN0YXRpYyBjaGFyICpyZWpuYW1lOworQEAgLTE3Miw2ICsxNzQsMTAgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAvKiBNYWtlIHN1cmUgd2UgY2xlYW4gdXAgaW4gY2FzZSBvZiBkaXNhc3Rlci4gICovCisgICAgIHNldF9zaWduYWxzIChmYWxzZSk7CisgCisrICAgIC8qIGluaXRpYWxpemUgZ2xvYmFsIHJlamVjdCBmaWxlICovCisrICAgIGlmIChnbG9iYWxfcmVqZWN0KQorKyAgICAgIGluaXRfcmVqZWN0ICgpOworKworICAgICBmb3IgKAorIAlvcGVuX3BhdGNoX2ZpbGUgKHBhdGNobmFtZSk7CisgCXRoZXJlX2lzX2Fub3RoZXJfcGF0Y2goKTsKK0BAIC0yMDgsOCArMjE0LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgaW5pdF9vdXRwdXQgKFRNUE9VVE5BTUUsIGV4Y2x1c2l2ZSwgJm91dHN0YXRlKTsKKyAJICB9CisgCistCS8qIGluaXRpYWxpemUgcmVqZWN0IGZpbGUgKi8KKy0JaW5pdF9yZWplY3QgKCk7CisrCS8qIGluaXRpYWxpemUgcGVyLXBhdGNoIHJlamVjdCBmaWxlICovCisrCWlmICghZ2xvYmFsX3JlamVjdCkKKysJICBpbml0X3JlamVjdCAoKTsKKyAKKyAJLyogZmluZCBvdXQgd2hlcmUgYWxsIHRoZSBsaW5lcyBhcmUgKi8KKyAJaWYgKCFza2lwX3Jlc3Rfb2ZfcGF0Y2gpCitAQCAtMjc4LDYgKzI4NSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJICAgIG5ld3doZXJlID0gcGNoX25ld2ZpcnN0KCkgKyBsYXN0X29mZnNldDsKKyAJICAgIGlmIChza2lwX3Jlc3Rfb2ZfcGF0Y2gpIHsKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuaygpOworIAkJZmFpbGVkKys7CisgCQlpZiAodmVyYm9zaXR5ID09IFZFUkJPU0UpCitAQCAtMjkyLDYgKzMwMSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgc2F5ICgiUGF0Y2ggYXR0ZW1wdGVkIHRvIGNyZWF0ZSBmaWxlICVzLCB3aGljaCBhbHJlYWR5IGV4aXN0cy5cbiIsCisgCQkgICAgICAgcXVvdGVhcmcgKGlubmFtZSkpOworIAorKwkJaWYgKCFmYWlsZWQpCisrCQkgIHJlamVjdF9oZWFkZXIob3V0bmFtZSk7CisgCQlhYm9ydF9odW5rKCk7CisgCQlmYWlsZWQrKzsKKyAJCWlmICh2ZXJib3NpdHkgIT0gU0lMRU5UKQorQEAgLTI5OSw2ICszMTAsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgICAgZm9ybWF0X2xpbmVudW0gKG51bWJ1ZiwgbmV3d2hlcmUpKTsKKyAJICAgIH0KKyAJICAgIGVsc2UgaWYgKCEgYXBwbHlfaHVuayAoJm91dHN0YXRlLCB3aGVyZSkpIHsKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuayAoKTsKKyAJCWZhaWxlZCsrOworIAkJaWYgKHZlcmJvc2l0eSAhPSBTSUxFTlQpCitAQCAtMzMyLDcgKzM0NSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICBmY2xvc2UgKG91dHN0YXRlLm9mcCk7CisgCQkgICAgb3V0c3RhdGUub2ZwID0gMDsKKyAJCSAgfQorLQkJZmNsb3NlIChyZWpmcCk7CisrCQlpZiAoIWdsb2JhbF9yZWplY3QpCisrCQkgIGZjbG9zZSAocmVqZnApOworIAkJY29udGludWU7CisgCSAgICAgIH0KKyAKK0BAIC00MTIsMTMgKzQyNiwxMyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICB9CisgICAgICAgfQorICAgICAgIGlmIChkaWZmX3R5cGUgIT0gRURfRElGRikgeworLQlpZiAoZmNsb3NlIChyZWpmcCkgIT0gMCkKKysJaWYgKCFnbG9iYWxfcmVqZWN0ICYmIGZjbG9zZSAocmVqZnApICE9IDApCisgCSAgICB3cml0ZV9mYXRhbCAoKTsKKyAJaWYgKGZhaWxlZCkgeworIAkgICAgc29tZWZhaWxlZCA9IHRydWU7CisgCSAgICBzYXkgKCIlZCBvdXQgb2YgJWQgaHVuayVzICVzIiwgZmFpbGVkLCBodW5rLCAicyIgKyAoaHVuayA9PSAxKSwKKyAJCSBza2lwX3Jlc3Rfb2ZfcGF0Y2ggPyAiaWdub3JlZCIgOiAiRkFJTEVEIik7CistCSAgICBpZiAob3V0bmFtZSkgeworKwkgICAgaWYgKCFnbG9iYWxfcmVqZWN0ICYmIG91dG5hbWUpIHsKKyAJCWNoYXIgKnJlaiA9IHJlam5hbWU7CisgCQlpZiAoIXJlam5hbWUpIHsKKyAJCSAgICByZWogPSB4bWFsbG9jIChzdHJsZW4gKG91dG5hbWUpICsgNSk7CitAQCAtNDQ1LDYgKzQ1OSwyMCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgfQorICAgICAgIHNldF9zaWduYWxzICh0cnVlKTsKKyAgICAgfQorKyAgICBpZiAoZ2xvYmFsX3JlamVjdCkKKysgICAgICB7CisrCWlmIChmY2xvc2UgKHJlamZwKSAhPSAwKQorKwkgIHdyaXRlX2ZhdGFsICgpOworKwlpZiAoc29tZWZhaWxlZCkKKysJICB7CisrCSAgc2F5ICgiIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgJXNcbiIsIHF1b3RlYXJnIChnbG9iYWxfcmVqZWN0KSk7CisrCSAgLyppZiAoISBkcnlfcnVuKQorKwkgICAgeyovCisrCSAgICAgIG1vdmVfZmlsZSAoVE1QUkVKTkFNRSwgJlRNUFJFSk5BTUVfbmVlZHNfcmVtb3ZhbCwKKysJCQkgZ2xvYmFsX3JlamVjdCwgMDY0NCwgZmFsc2UpOworKwkgICAgLyp9Ki8KKysJICB9CisrICAgICAgfQorICAgICBpZiAob3V0c3RhdGUub2ZwICYmIChmZXJyb3IgKG91dHN0YXRlLm9mcCkgfHwgZmNsb3NlIChvdXRzdGF0ZS5vZnApICE9IDApKQorICAgICAgIHdyaXRlX2ZhdGFsICgpOworICAgICBjbGVhbnVwICgpOworQEAgLTUyMyw2ICs1NTEsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyAgIHsicG9zaXgiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA3fSwKKyAgIHsicXVvdGluZy1zdHlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDh9LAorICAgeyJ1bmlmaWVkLXJlamVjdC1maWxlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDl9LAorKyAgeyJnbG9iYWwtcmVqZWN0LWZpbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyAxMH0sCisgICB7TlVMTCwgbm9fYXJndW1lbnQsIE5VTEwsIDB9CisgfTsKKyAKK0BAIC01ODIsNiArNjExLDcgQEAgc3RhdGljIGNoYXIgY29uc3QgKmNvbnN0IG9wdGlvbl9oZWxwW10gPQorICIgIC0tZHJ5LXJ1biAgRG8gbm90IGFjdHVhbGx5IGNoYW5nZSBhbnkgZmlsZXM7IGp1c3QgcHJpbnQgd2hhdCB3b3VsZCBoYXBwZW4uIiwKKyAiICAtLXBvc2l4ICBDb25mb3JtIHRvIHRoZSBQT1NJWCBzdGFuZGFyZC4iLAorICIgIC0tdW5pZmllZC1yZWplY3QtZmlsZXMgIENyZWF0ZSB1bmlmaWVkIHJlamVjdCBmaWxlcy4iLAorKyIgIC0tZ2xvYmFsLXJlamVjdC1maWxlPWZpbGUgIFB1dCBhbGwgcmVqZWN0cyBpbnRvIG9uZSBmaWxlLiIsCisgIiIsCisgIiAgLWQgRElSICAtLWRpcmVjdG9yeT1ESVIgIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gRElSIGZpcnN0LiIsCisgI2lmIEhBVkVfU0VUTU9ERV9ET1MKK0BAIC03ODQsNiArODE0LDkgQEAgZ2V0X3NvbWVfc3dpdGNoZXMgKHZvaWQpCisgCSAgICBjYXNlIENIQVJfTUFYICsgOToKKyAJCXVuaWZpZWRfcmVqZWN0X2ZpbGVzID0gdHJ1ZTsKKyAJCWJyZWFrOworKwkgICAgY2FzZSBDSEFSX01BWCArIDEwOgorKwkJZ2xvYmFsX3JlamVjdCA9IHNhdmVzdHIgKG9wdGFyZyk7CisrCQlicmVhazsKKyAJICAgIGRlZmF1bHQ6CisgCQl1c2FnZSAoc3RkZXJyLCAyKTsKKyAJfQorQEAgLTkzMyw2ICs5NjYsMzcgQEAgbG9jYXRlX2h1bmsgKExJTkVOVU0gZnV6eikKKyB9CisgCisgc3RhdGljIGNoYXIgKgorK2Zvcm1hdF90aW1lc3RhbXAgKGNoYXIgdGltZWJ1ZlszN10sIGJvb2wgd2hpY2gpCisreworKyAgdGltZV90IHRzID0gcGNoX3RpbWVzdGFtcCh3aGljaCk7CisrICBpZiAodHMgIT0gLTEpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgdG0gKnRtID0gbG9jYWx0aW1lKCZ0cyk7CisrICAgICAgc3RyZnRpbWUodGltZWJ1ZiwgMzcsICJcdCVZLSVtLSVkICVIOiVNOiVTLjAwMDAwMDAwMCAleiIsIHRtKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB0aW1lYnVmWzBdID0gMDsKKysgIHJldHVybiB0aW1lYnVmOworK30KKysKKysvKiBXcml0ZSBhIGhlYWRlciBpbiBhIHJlamVjdCBmaWxlIHRoYXQgY29tYmluZXMgbXVsdGlwbGUgaHVua3MuICovCisrc3RhdGljIHZvaWQKKytyZWplY3RfaGVhZGVyIChjb25zdCBjaGFyICpvdXRuYW1lKQorK3sKKysgICAgY2hhciB0aW1lYnVmMFszN10sIHRpbWVidWYxWzM3XTsKKysgICAgaWYgKCFnbG9iYWxfcmVqZWN0KQorKyAgICAgIHJldHVybjsKKysgICAgaWYgKGRpZmZfdHlwZSA9PSBVTklfRElGRikKKysJZnByaW50ZihyZWpmcCwgIi0tLSAlcy5vcmlnJXNcbisrKyAlcyVzXG4iLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMCwgcmV2ZXJzZSksCisrCQlvdXRuYW1lLCBmb3JtYXRfdGltZXN0YW1wKHRpbWVidWYxLCAhcmV2ZXJzZSkpOworKyAgICBlbHNlCisrCWZwcmludGYocmVqZnAsICIqKiogJXMub3JpZyVzXG4tLS0gJXMlc1xuIiwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjAsIHJldmVyc2UpLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMSwgIXJldmVyc2UpKTsKKyt9CisrCisrc3RhdGljIGNoYXIgKgorIGZvcm1hdF9saW5lcmFuZ2UgKGNoYXIgcmFuZ2VidWZbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdLAorIAkJICBMSU5FTlVNIGZpcnN0LCBMSU5FTlVNIGxpbmVzKQorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NGVjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwYXRjaC0yLjUuNC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS40Lm9yaWcvTWFrZWZpbGUuaW4JMjAwNS0wMy0wOSAwNzoyMzo1NC43NzkzMTE4MjQgLTA1MDAKKysrKyBwYXRjaC0yLjUuNC9NYWtlZmlsZS5pbgkyMDA1LTAzLTA5IDA3OjI2OjA5LjYxNjgxMzQwOCAtMDUwMAorQEAgLTQzLDEwICs0MywxMSBAQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKKyAKKytERVNURElSID0KKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorIAorLWJpbmRpciA9ICQoZXhlY19wcmVmaXgpL2JpbgorK2JpbmRpciA9IEBiaW5kaXJACisgCisgIyBXaGVyZSB0byBwdXQgdGhlIG1hbnVhbCBwYWdlcy4KKyBtYW5kaXIgPSBAbWFuZGlyQAorQEAgLTExMiwxOCArMTEzLDE4IEBACisgCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoT0JKUykgJChMSUJTKQorIAorIGluc3RhbGw6OiBhbGwgaW5zdGFsbGRpcnMKKy0JJChJTlNUQUxMX1BST0dSQU0pIHBhdGNoJChFWEVFWFQpICQoYmluZGlyKS8kKHBhdGNoX25hbWUpJChFWEVFWFQpCistCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BhdGNoLm1hbiAkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBwYXRjaCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKysJLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGF0Y2gubWFuICQoREVTVERJUikkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisgCisgaW5zdGFsbGRpcnM6OgorLQkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikgJChtYW4xZGlyKQorKwkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpICQoREVTVERJUikkKG1hbjFkaXIpCisgCisgaW5zdGFsbC1zdHJpcDo6CisgCSQoTUFLRSkgSU5TVEFMTF9QUk9HUkFNPSckKElOU1RBTExfUFJPR1JBTSkgLXMnIGluc3RhbGwKKyAKKyB1bmluc3RhbGw6OgorLQlybSAtZiAkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorLQlybSAtZiAkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisrCXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorKwlybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorIAorIE1ha2VmaWxlOiBNYWtlZmlsZS5pbiAkKENPTkZJR19TVEFUVVMpCisgCSQoU0hFTEwpICQoQ09ORklHX1NUQVRVUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1OTIxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmCkBAIC0wLDAgKzEsMzA3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworR2VuZXJhdGUgdW5pZmllZCBkaWZmIHN0eWxlIHJlamVjdCBmaWxlcy4gQWxzbyBpbmNsdWRlIHRoZSBDIGZ1bmN0aW9uIG5hbWVzCitpbiByZWplY3QgZmlsZXMgd2hlbmV2ZXIgcG9zc2libGUuCisKKwkkIGNhdCA+IGYub3JpZworCTwgYSgpIHsKKwk8IDIKKwk8IDMKKwk8CisJPCA1CisJPCA2CisJPCB9CisKKwkkIHNlZCAtZSAncy81LzVhLycgZi5vcmlnID4gZgorCSQgZGlmZiAtVTIgLXAgZi5vcmlnIGYgPiBmLmRpZmYKKwkkIHNlZCAtZSAncy81LzVhLycgLWUgJ3MvNi82eC8nIGYub3JpZyA+IGYKKwkkIC4vcGF0Y2ggLUYwIC1zIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIGYgLS1yZWplY3QtdW5pZmllZCA8IGYuZGlmZgorCT4gMSBvdXQgb2YgMSBodW5rIEZBSUxFRCAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlIGYucmVqCisKKwkkIGNhdCBmLnJlagorCT4gQEAgLTMsNSArMyw1IEBAIGEoKSB7CisJPiAgMworCT4gIAorCT4gLTUKKwk+ICs1YQorCT4gIDYKKwk+ICB9CisKKwkkIC4vcGF0Y2ggLUYwIC1zIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIGYgPCBmLmRpZmYKKwk+IDEgb3V0IG9mIDEgaHVuayBGQUlMRUQgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSBmLnJlagorCisJJCBjYXQgZi5yZWoKKwk+ICoqKioqKioqKioqKioqKiBhKCkgeworCT4gKioqIDMsNyAqKioqCisJPiAgIDMKKwk+ICAgCisJPiAtIDUKKwk+ICAgNgorCT4gICB9CisJPiAtLS0gMyw3IC0tLS0KKwk+ICAgMworCT4gICAKKwk+ICsgNWEKKwk+ICAgNgorCT4gICB9CisKKwkkIGRpZmYgLU51IC1wIC9kZXYvbnVsbCBmLm9yaWcgPiBmMi5kaWZmCisJJCAuL3BhdGNoIC1GMCAtcyAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCBmIC0tcmVqZWN0LXVuaWZpZWQgPCBmMi5kaWZmCisJPiBQYXRjaCBhdHRlbXB0ZWQgdG8gY3JlYXRlIGZpbGUgZiwgd2hpY2ggYWxyZWFkeSBleGlzdHMuCisJPiAxIG91dCBvZiAxIGh1bmsgRkFJTEVEIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgZi5yZWoKKworCSQgY2F0IGYucmVqCisJPiBAQCAtMCwwICsxLDcgQEAKKwk+ICthKCkgeworCT4gKzIKKwk+ICszCisJPiArCisJPiArNQorCT4gKzYKKwk+ICt9CisKKwkkIHJtIC1mIGYgZi5vcmlnIGYucmVqIGYuZGlmZiBmMi5kaWZmCisKK0luZGV4OiBwYXRjaC0yLjUuOS9wY2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wY2guYworQEAgLTY4LDYgKzY4LDcgQEAgc3RhdGljIExJTkVOVU0gcF9zbGluZTsJCQkvKiBhbmQgdGhlIGxpbgorIHN0YXRpYyBMSU5FTlVNIHBfaHVua19iZWc7CQkvKiBsaW5lIG51bWJlciBvZiBjdXJyZW50IGh1bmsgKi8KKyBzdGF0aWMgTElORU5VTSBwX2VmYWtlID0gLTE7CQkvKiBlbmQgb2YgZmFrZWQgdXAgbGluZXMtLWRvbid0IGZyZWUgKi8KKyBzdGF0aWMgTElORU5VTSBwX2JmYWtlID0gLTE7CQkvKiBiZWcgb2YgZmFrZWQgdXAgbGluZXMgKi8KKytzdGF0aWMgY2hhciAqcF9jX2Z1bmN0aW9uOwkJLyogdGhlIEMgZnVuY3Rpb24gYSBodW5rIGlzIGluICovCisgCisgZW51bSBuYW1ldHlwZSB7IE9MRCwgTkVXLCBJTkRFWCwgTk9ORSB9OworIAorQEAgLTg4OCw2ICs4ODksMTkgQEAgYW5vdGhlcl9odW5rIChlbnVtIGRpZmYgZGlmZnR5cGUsIGJvb2wgcgorIAkgICAgbmV4dF9pbnR1aXRfYXQobGluZV9iZWdpbm5pbmcscF9pbnB1dF9saW5lKTsKKyAJICAgIHJldHVybiBjaGFyc19yZWFkID09IChzaXplX3QpIC0xID8gLTEgOiAwOworIAl9CisrCXMgPSBidWY7CisrCXdoaWxlICgqcyA9PSAnKicpCisrCSAgICBzKys7CisrCWlmICgqcyA9PSAnICcpCisrCSAgeworKwkgICAgcF9jX2Z1bmN0aW9uID0gczsKKysJICAgIHdoaWxlICgqcyAhPSAnXG4nKQorKwkJcysrOworKwkgICAgKnMgPSAnXDAnOworKwkgICAgcF9jX2Z1bmN0aW9uID0gc2F2ZXN0ciAocF9jX2Z1bmN0aW9uKTsKKysJICB9CisrCWVsc2UKKysJICAgIHBfY19mdW5jdGlvbiA9IE5VTEw7CisgCXBfaHVua19iZWcgPSBwX2lucHV0X2xpbmUgKyAxOworIAl3aGlsZSAocF9lbmQgPCBwX21heCkgeworIAkgICAgY2hhcnNfcmVhZCA9IGdldF9saW5lICgpOworQEAgLTEyNzcsOCArMTI5MSwxOCBAQCBhbm90aGVyX2h1bmsgKGVudW0gZGlmZiBkaWZmdHlwZSwgYm9vbCByCisgCWVsc2UKKyAJICAgIHBfcmVwbF9saW5lcyA9IDE7CisgCWlmICgqcyA9PSAnICcpIHMrKzsKKy0JaWYgKCpzICE9ICdAJykKKysJaWYgKCpzKysgIT0gJ0AnKQorIAkgICAgbWFsZm9ybWVkICgpOworKwlpZiAoKnMrKyA9PSAnQCcgJiYgKnMgPT0gJyAnICYmICpzICE9ICdcMCcpCisrCSAgeworKwkgICAgcF9jX2Z1bmN0aW9uID0gczsKKysJICAgIHdoaWxlICgqcyAhPSAnXG4nKQorKwkJcysrOworKwkgICAgKnMgPSAnXDAnOworKwkgICAgcF9jX2Z1bmN0aW9uID0gc2F2ZXN0ciAocF9jX2Z1bmN0aW9uKTsKKysJICB9CisrCWVsc2UKKysJICAgIHBfY19mdW5jdGlvbiA9IE5VTEw7CisgCWlmICghcF9wdHJuX2xpbmVzKQorIAkgICAgcF9maXJzdCsrOwkJCS8qIGRvIGFwcGVuZCByYXRoZXIgdGhhbiBpbnNlcnQgKi8KKyAJaWYgKCFwX3JlcGxfbGluZXMpCitAQCAtMTg4NCw2ICsxOTA4LDEyIEBAIHBjaF9odW5rX2JlZyAodm9pZCkKKyAgICAgcmV0dXJuIHBfaHVua19iZWc7CisgfQorIAorK2NoYXIgY29uc3QgKgorK3BjaF9jX2Z1bmN0aW9uICh2b2lkKQorK3sKKysgICAgcmV0dXJuIHBfY19mdW5jdGlvbjsKKyt9CisrCisgLyogSXMgdGhlIG5ld2xpbmUtdGVybWluYXRlZCBsaW5lIGEgdmFsaWQgYGVkJyBjb21tYW5kIGZvciBwYXRjaAorICAgIGlucHV0PyAgSWYgc28sIHJldHVybiB0aGUgY29tbWFuZCBjaGFyYWN0ZXI7IGlmIG5vdCwgcmV0dXJuIDAuCisgICAgVGhpcyBhY2NlcHRzIGFjY2VwdHMganVzdCBhIHN1YnNldCBvZiB0aGUgdmFsaWQgY29tbWFuZHMsIGJ1dCBpdCdzCitJbmRleDogcGF0Y2gtMi41LjkvcGNoLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BjaC5oCisrKysgcGF0Y2gtMi41LjkvcGNoLmgKK0BAIC0yNSw2ICsyNSw3IEBACisgTElORU5VTSBwY2hfZW5kICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9maXJzdCAodm9pZCk7CisgTElORU5VTSBwY2hfaHVua19iZWcgKHZvaWQpOworK2NoYXIgY29uc3QgKnBjaF9jX2Z1bmN0aW9uICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9uZXdmaXJzdCAodm9pZCk7CisgTElORU5VTSBwY2hfcHJlZml4X2NvbnRleHQgKHZvaWQpOworIExJTkVOVU0gcGNoX3B0cm5fbGluZXMgKHZvaWQpOworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLm1hbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2gubWFuCisrKysgcGF0Y2gtMi41LjkvcGF0Y2gubWFuCitAQCAtNTE3LDYgKzUxNyw5IEBAIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKyAuQiBcJi5yZWoKKyBmaWxlLgorIC5UUAorK1xmQlwqPXJlamVjdFwtdW5pZmllZFxmUAorK1Byb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMuIFRoZSBkZWZhdWx0IGlzIHRvIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcy4KKysuVFAKKyBcZkJcLVJcZlAgIG9yICBcZkJcKj1yZXZlcnNlXGZQCisgQXNzdW1lIHRoYXQgdGhpcyBwYXRjaCB3YXMgY3JlYXRlZCB3aXRoIHRoZSBvbGQgYW5kIG5ldyBmaWxlcyBzd2FwcGVkLgorIChZZXMsIEknbSBhZnJhaWQgdGhhdCBkb2VzIGhhcHBlbiBvY2Nhc2lvbmFsbHksIGh1bWFuIG5hdHVyZSBiZWluZyB3aGF0IGl0CitJbmRleDogcGF0Y2gtMi41LjkvY29tbW9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbW1vbi5oCisrKysgcGF0Y2gtMi41LjkvY29tbW9uLmgKK0BAIC0xNDYsNiArMTQ2LDcgQEAgWFRFUk4gaW50IGludmM7CisgWFRFUk4gc3RydWN0IHN0YXQgaW5zdGF0OworIFhURVJOIGJvb2wgZHJ5X3J1bjsKKyBYVEVSTiBib29sIHBvc2l4bHlfY29ycmVjdDsKKytYVEVSTiBib29sIHVuaWZpZWRfcmVqZWN0X2ZpbGVzOworIAorIFhURVJOIGNoYXIgY29uc3QgKm9yaWdwcmFlOworIFhURVJOIGNoYXIgY29uc3QgKm9yaWdiYXNlOworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5jCitAQCAtNTIyLDYgKzUyMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorICAgeyJuby1iYWNrdXAtaWYtbWlzbWF0Y2giLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA2fSwKKyAgIHsicG9zaXgiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA3fSwKKyAgIHsicXVvdGluZy1zdHlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDh9LAorKyAgeyJ1bmlmaWVkLXJlamVjdC1maWxlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDl9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorIH07CisgCitAQCAtNTgwLDYgKzU4MSw3IEBAIHN0YXRpYyBjaGFyIGNvbnN0ICpjb25zdCBvcHRpb25faGVscFtdID0KKyAiICAtLXZlcmJvc2UgIE91dHB1dCBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29yayBiZWluZyBkb25lLiIsCisgIiAgLS1kcnktcnVuICBEbyBub3QgYWN0dWFsbHkgY2hhbmdlIGFueSBmaWxlczsganVzdCBwcmludCB3aGF0IHdvdWxkIGhhcHBlbi4iLAorICIgIC0tcG9zaXggIENvbmZvcm0gdG8gdGhlIFBPU0lYIHN0YW5kYXJkLiIsCisrIiAgLS11bmlmaWVkLXJlamVjdC1maWxlcyAgQ3JlYXRlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiIsCisgIiIsCisgIiAgLWQgRElSICAtLWRpcmVjdG9yeT1ESVIgIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gRElSIGZpcnN0LiIsCisgI2lmIEhBVkVfU0VUTU9ERV9ET1MKK0BAIC03NzksNiArNzgxLDkgQEAgZ2V0X3NvbWVfc3dpdGNoZXMgKHZvaWQpCisgCQkJCSAgICAgKGVudW0gcXVvdGluZ19zdHlsZSkgaSk7CisgCQl9CisgCQlicmVhazsKKysJICAgIGNhc2UgQ0hBUl9NQVggKyA5OgorKwkJdW5pZmllZF9yZWplY3RfZmlsZXMgPSB0cnVlOworKwkJYnJlYWs7CisgCSAgICBkZWZhdWx0OgorIAkJdXNhZ2UgKHN0ZGVyciwgMik7CisgCX0KK0BAIC05MjcsNiArOTMyLDI0IEBAIGxvY2F0ZV9odW5rIChMSU5FTlVNIGZ1enopCisgICAgIHJldHVybiAwOworIH0KKyAKKytzdGF0aWMgY2hhciAqCisrZm9ybWF0X2xpbmVyYW5nZSAoY2hhciByYW5nZWJ1ZltMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl0sCisrCQkgIExJTkVOVU0gZmlyc3QsIExJTkVOVU0gbGluZXMpCisreworKyAgICBpZiAobGluZXMgPT0gMSkKKysgICAgICByYW5nZWJ1ZiA9IGZvcm1hdF9saW5lbnVtIChyYW5nZWJ1ZiwgZmlyc3QpOworKyAgICBlbHNlCisrICAgICAgeworKwljaGFyICpyYjsKKysJcmFuZ2VidWYgPSBmb3JtYXRfbGluZW51bSAocmFuZ2VidWYgKyBMSU5FTlVNX0xFTkdUSF9CT1VORCArIDEsIGxpbmVzKTsKKysJcmIgPSByYW5nZWJ1Zi0xOworKwlyYW5nZWJ1ZiA9IGZvcm1hdF9saW5lbnVtIChyYW5nZWJ1ZiAtIExJTkVOVU1fTEVOR1RIX0JPVU5EIC0gMSwKKysJCQkJICAgKGxpbmVzID4gMCkgPyBmaXJzdCA6IDApOworKwkqcmIgPSAnLCc7CisrICAgICAgfQorKyAgICByZXR1cm4gcmFuZ2VidWY7CisrfQorKworIC8qIFdlIGRpZCBub3QgZmluZCB0aGUgcGF0dGVybiwgZHVtcCBvdXQgdGhlIGh1bmsgc28gdGhleSBjYW4gaGFuZGxlIGl0LiAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtOTQzLDggKzk2Niw4MyBAQCBhYm9ydF9odW5rICh2b2lkKQorICAgICAgIChpbnQpIE5FV19DT05URVhUX0RJRkYgPD0gKGludCkgZGlmZl90eXBlID8gIiAqKioqIiA6ICIiOworICAgICBjaGFyIGNvbnN0ICptaW51c2VzID0KKyAgICAgICAoaW50KSBORVdfQ09OVEVYVF9ESUZGIDw9IChpbnQpIGRpZmZfdHlwZSA/ICIgLS0tLSIgOiAiIC0tLS0tIjsKKysgICAgY2hhciBjb25zdCAqZnVuY3Rpb24gPSBwY2hfY19mdW5jdGlvbigpOworKyAgICBpZiAoZnVuY3Rpb24gPT0gTlVMTCkKKysJZnVuY3Rpb24gPSAiIjsKKysKKysgICAgaWYgKHVuaWZpZWRfcmVqZWN0X2ZpbGVzKQorKyAgICAgIHsKKysJLyogcHJvZHVjZSB1bmlmaWVkIHJlamVjdCBmaWxlcyAqLworKwljaGFyIHJhbmdlYnVmMFtMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl07CisrCWNoYXIgcmFuZ2VidWYxW0xJTkVOVU1fTEVOR1RIX0JPVU5EKjIgKyAyXTsKKysJTElORU5VTSBqOworKworKwkvKiBGaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbW92ZSBhbmQgaW5zZXJ0IHNlY3Rpb24uICovCisrCWZvciAoaiA9IDA7IGogPD0gcGF0X2VuZDsgaisrKQorKwkgIGlmIChwY2hfY2hhciAoaikgPT0gJz0nKQorKwkgICAgYnJlYWs7CisrCWZvciAoaSA9IGorMTsgaSA8PSBwYXRfZW5kOyBpKyspCisrCSAgaWYgKHBjaF9jaGFyIChpKSA9PSAnXicpCisrCSAgICBicmVhazsKKysJaWYgKHBjaF9jaGFyICgwKSAhPSAnKicgfHwgaiA+IHBhdF9lbmQgfHwgaSA+IHBhdF9lbmQrMSkKKysJICBmYXRhbCAoImludGVybmFsIGVycm9yIGluIGFib3J0X2h1bmsiKTsKKysJaSA9IDE7IGorKzsKKysKKysJLyogQEAgLWZyb20sbGluZXMgK3RvLGxpbmVzIEBAICovCisrCWZwcmludGYgKHJlamZwLCAiQEAgLSVzICslcyBAQCVzXG4iLAorKwkJIGZvcm1hdF9saW5lcmFuZ2UgKHJhbmdlYnVmMCwgb2xkZmlyc3QsIHBjaF9wdHJuX2xpbmVzKCkpLAorKwkJIGZvcm1hdF9saW5lcmFuZ2UgKHJhbmdlYnVmMSwgbmV3Zmlyc3QsIHBjaF9yZXBsX2xpbmVzKCkpLAorKwkJIGZ1bmN0aW9uKTsKKysKKysJd2hpbGUgKCAgIChpIDw9IHBhdF9lbmQgJiYgcGNoX2NoYXIgKGkpICE9ICc9JykKKysJICAgICAgIHx8IChqIDw9IHBhdF9lbmQgJiYgcGNoX2NoYXIgKGopICE9ICdeJykpCisrCSAgeworKwkgICAgaWYgKGkgPD0gcGF0X2VuZAorKwkJJiYgKHBjaF9jaGFyIChpKSA9PSAnLScgfHwgcGNoX2NoYXIgKGkpID09ICchJykpCisrCSAgICAgIHsKKysJCWZwdXRjKCctJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGkrKywgcmVqZnApOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmIChqIDw9IHBhdF9lbmQKKysJCSAgICAgJiYgKHBjaF9jaGFyIChqKSA9PSAnKycgfHwgcGNoX2NoYXIgKGopID09ICchJykpCisrCSAgICAgIHsKKysJCWZwdXRjKCcrJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGorKywgcmVqZnApOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmICgoaSA8PSBwYXRfZW5kCisrCQkgICAgICAmJiAocGNoX2NoYXIgKGkpID09ICcgJyB8fCBwY2hfY2hhciAoaSkgPT0gJ1xuJykpICYmCisrCQkgICAgIChqID4gcGF0X2VuZAorKwkJICAgICAgfHwgKHBjaF9jaGFyIChqKSA9PSAnICcgfHwgcGNoX2NoYXIgKGopID09ICdcbicpKSkKKysJICAgICAgeworKwkJLyogVW5sZXNzIGogaXMgYWxyZWFkeSBwYXN0IHRoZSBlbmQsIGxpbmVzIGkgYW5kIGoKKysJCSAgIG11c3QgYmUgZXF1YWwgaGVyZS4gICovCisrCisrCQlpZiAocGNoX2NoYXIgKGkpID09ICcgJykKKysJCSAgZnB1dGMoJyAnLCByZWpmcCk7CisrCQlwY2hfd3JpdGVfbGluZSAoaSsrLCByZWpmcCk7CisrCQlpZiAoaiA8PSBwYXRfZW5kKQorKwkJICBqKys7CisrCSAgICAgIH0KKysJICAgIGVsc2UgaWYgKChqIDw9IHBhdF9lbmQgJiYKKysJCSAgICAgKHBjaF9jaGFyIChqKSA9PSAnICcgfHwgcGNoX2NoYXIgKGopID09ICdcbicpKSAmJgorKwkJICAgICAocGNoX2NoYXIgKGkpID09ICc9JykpCisrCSAgICAgIHsKKysJCWlmIChwY2hfY2hhciAoaikgPT0gJyAnKQorKwkJICBmcHV0YygnICcsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChqKyssIHJlamZwKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBmYXRhbCAoImludGVybmFsIGVycm9yIGluIGFib3J0X2h1bmsiKTsKKysJICB9CisrCisrCWlmIChmZXJyb3IgKHJlamZwKSkKKysJICB3cml0ZV9mYXRhbCAoKTsKKysJcmV0dXJuOworKyAgICAgIH0KKyAKKy0gICAgZnByaW50ZihyZWpmcCwgIioqKioqKioqKioqKioqKlxuIik7CisrICAgIC8qIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcyAqLworKyAgIAorKyAgICBmcHJpbnRmKHJlamZwLCAiKioqKioqKioqKioqKioqJXNcbiIsIGZ1bmN0aW9uKTsKKyAgICAgZm9yIChpPTA7IGk8PXBhdF9lbmQ7IGkrKykgeworIAljaGFyIG51bWJ1ZjBbTElORU5VTV9MRU5HVEhfQk9VTkQgKyAxXTsKKyAJY2hhciBudW1idWYxW0xJTkVOVU1fTEVOR1RIX0JPVU5EICsgMV07CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5YjI0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjUuOS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHBhdGNoLmluYworTElDRU5TRSA9ICJHUEx2MiIKKworU1JDX1VSSSArPSAiIGZpbGU6Ly9kZWJpYW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYgIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorU1JDX1VSSVttZDVzdW1dID0gImRhY2ZiNjE4MDgyZjhkM2EyMTk0NjAxMTkzY2Y4NzE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVjYjVjNjQ2OWQ3MzJiY2YwMWQ2ZWMxYWZlOWU2NGYxNjY4Y2FiYTViZmRiMTAzYzI4ZDdmNTM3YmEzY2RiOGEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmY2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjcuNS5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHBhdGNoLmluYworTElDRU5TRSA9ICJHUEx2MyIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZDRkNTY3NGVmNDU0M2I0ZWI0NjNkYjE2ODg4NmRjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NDM2ZjVhMTlmOTNjM2NhODMxNTNjZTljNWNiZTQ4NDdlOTdjNWQ5NTZlNTdhMjIwMTIxZTc0MWY2ZTc5NjhmIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworYWNwYXRocyA9ICItSSAke1N9L200ICIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjg3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NSQ19VUkkgPSAiaHR0cDovL25peG9zLm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIgorTElDRU5TRSA9ICJHUEx2MyIKK1NVTU1BUlkgPSAiVG9vbCB0byBhbGxvdyBlZGl0aW5nIG9mIFJQQVRIIGFuZCBpbnRlcnByZXRlciBmaWVsZHMgaW4gRUxGIGJpbmFyaWVzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWIxNTFlM2M4M2IzMWY1OTMxYjRhOWZjMDE2MzViZmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk5Zjg0ZDEyNDM0NzM0MGMzNjcwNzA4OWVjOGY3MDUzMGFiZDU2ZTc4MjdjNTRkNTA2ZWI0Y2MwOTdhMTdlNyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxNmEwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiU2VjdXJpdHktZm9jdXNlZCBFTEYgZmlsZXMgY2hlY2tpbmcgdG9vbCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgYSBzbWFsbCBzZXQgb2YgdmFyaW91cyBQYVggYXdhcmUgYW5kIHJlbGF0ZWQgXAordXRpbGl0aWVzIGZvciBFTEYgYmluYXJpZXMuIEl0IGNhbiBjaGVjayBFTEYgYmluYXJ5IGZpbGVzIGFuZCBydW5uaW5nIFwKK3Byb2Nlc3NlcyBmb3IgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgd2hlbiB1c2luZyBFTEYgYmluYXJpZXMgXAorYWxvbmcgd2l0aCBQYVgsIHN1Y2ggYXMgbm9uLVBJQyBjb2RlIG9yIGV4ZWN1dGFibGUgc3RhY2sgYW5kIGhlYXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nZW50b28ub3JnL3Byb2ovZW4vaGFyZGVuZWQvcGF4LXV0aWxzLnhtbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dlbnRvby5vc3Vvc2wub3JnL2Rpc3RmaWxlcy9wYXgtdXRpbHMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDczMWY1Mzg1NjgyYTdhNjJlZTJlN2I3ZGFjYzEzYTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjY5YTk5MzhlNGFmNzkxMmQyNmQ1ODUwOTRiYzAyMDNlNDM1NzFhOTkwZmRkMDQ4MzE5MDg4YThiOGFkOTA2ZiIKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2ggcHl0aG9uIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0ke3ByZWZpeH0gREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMGU3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYmVycm9yLXBlcmxfMC4xNzAyNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkVycm9yIC0gRXJyb3IvZXhjZXB0aW9uIGhhbmRsaW5nIGluIGFuIE9PLWlzaCB3YXkiCitERVNDUklQVElPTiA9ICJUaGUgRXJyb3IgcGFja2FnZSBwcm92aWRlcyB0d28gaW50ZXJmYWNlcy4gRmlyc3RseSBcCitFcnJvciBwcm92aWRlcyBhIHByb2NlZHVyYWwgaW50ZXJmYWNlIHRvIGV4Y2VwdGlvbiBoYW5kbGluZy4gXAorU2Vjb25kbHkgRXJyb3IgaXMgYSBiYXNlIGNsYXNzIGZvciBlcnJvcnMvZXhjZXB0aW9ucyB0aGF0IGNhbiBcCitlaXRoZXIgYmUgdGhyb3duLCBmb3Igc3Vic2VxdWVudCBjYXRjaCwgb3IgY2FuIHNpbXBseSBiZSByZWNvcmRlZC4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThmMzQ5OWQwOWVlNzRhMDUwYzAzMTkzOTFmZjlkMTAwIgorCitERVBFTkRTICs9ICJwZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly9jcGFuLm1ldGFjcGFuLm9yZy9hdXRob3JzL2lkL1MvU0gvU0hMT01JRi9FcnJvci0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZTM2NzZhN2ZiMTRmNjVmNTY4ZjEyZDRiNDBhMmE3MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzRkYjdjNzgzYTY3YjA2NjdlY2E2NGE0ZjZhMGMzZGU5NDk5OGFmYzkyYzAxZDY0NTMxNjNlYjA0YjkxNTBkIgorCitTID0gIiR7V09SS0RJUn0vRXJyb3ItJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS42MC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwOWE0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSB0byBtYW5pcHVsYXRlIGFuZCBhY2Nlc3MgVVJJIHN0cmluZ3MiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFVSSS5wbSBtb2R1bGUgd2l0aCBmcmllbmRzLiBcCitUaGUgbW9kdWxlIGltcGxlbWVudHMgdGhlIFVSSSBjbGFzcy4gVVJJIG9iamVjdHMgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIFwKK2FuZCBtYW5pcHVsYXRlIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgdGhhdCBtYWtlIHVwIHRoZXNlIHN0cmluZ3MuIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTI2O2VuZGxpbmU9MzA7bWQ1PTZjMzNhZTVjODdmZDFjNDg5NzcxNGUxMjJkZDljMjNkIgorCitERVBFTkRTICs9ICJwZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvYXV0aG9ycy9pZC9HL0dBL0dBQVMvVVJJLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwZjczOWJlOGNlMjhiOGJhYmE3YzU5MjBmZmVlNGRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmOTJkM2RjNjRhY2I4ODQ1ZTk5MTdjOTQ1ZTIyYjlhNTI3NWFlYjlmZjkyNGViNzg3M2MzYjdhNWMwZDIzNzciCisKK1MgPSAiJHtXT1JLRElSfS9VUkktJHtQVn0iCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjZDQxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiWE1MOjpQYXJzZXIgLSBBIHBlcmwgbW9kdWxlIGZvciBwYXJzaW5nIFhNTCBkb2N1bWVudHMiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yO2VuZGxpbmU9NjttZDU9Yzg3NjdkNzUxNjIyOWYwN2IyNmU0MmQxY2Y4YjUxZjEiCisKK0RFUEVORFMgKz0gImV4cGF0IGV4cGF0LW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC9YTUwtUGFyc2VyLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZjQ4MTNmZTM5NTIzNjI0NTEyMDFjZWQ2ZmJjZTM3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYWU5ZDA3ZWU5YzM1MzI2YjNkOWFhZDU2ZWFlNzFhNjczMGE3M2ExMTZiOWZlOWU4YTQ3NThiN2NjMDMzMjE2IgorCitTID0gIiR7V09SS0RJUn0vWE1MLVBhcnNlci0ke1BWfSIKKworRVhUUkFfQ1BBTkZMQUdTID0gIkVYUEFUTElCUEFUSD0ke1NUQUdJTkdfTElCRElSfSBFWFBBVElOQ1BBVEg9JHtTVEFHSU5HX0lOQ0RJUn0gQ0M9JyR7Q0N9JyBMRD0nJHtDQ0xEfScgRlVMTF9BUj0nJHtBUn0nIgorCitpbmhlcml0IGNwYW4KKworIyBmaXggdXAgc3ViIE1ha2VNYWtlciBwcm9qZWN0IGFzIGFyZ3VtZW50cyBkb24ndCBnZXQgcHJvcGFnYXRlZCB0aG91Z2gKKyMgc2VlIGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Mjg2MzIKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkICdzOi0tc3lzcm9vdD0uKlwoXHNcfCRcKTotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IDpnJyAtaSBNYWtlZmlsZSBFeHBhdC9NYWtlZmlsZQorCXNlZCAnczpeRlVMTF9BUiA9IC4qOkZVTExfQVIgPSAke0FSfTpnJyAtaSBFeHBhdC9NYWtlZmlsZQorfQorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKK2RvX2NvbXBpbGVfY2xhc3MtbmF0aXZlKCkgeworCWNwYW5fZG9fY29tcGlsZQorfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wZXJsL3ZlbmRvcl9wZXJsLyovYXV0by9YTUwvUGFyc2VyL0V4cGF0Ly5kZWJ1Zy8iCisKK0JCQ0xBU1NFWFRFTkQ9Im5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBlcmxfMC4wOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwMTk3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKQEAgLTAsMCArMSwyNyBAQAorREVTQ1JJUFRJT04gPSAibGlieG1sLXBlcmwgaXMgYSBjb2xsZWN0aW9uIG9mIHNtYWxsZXIgUGVybCBtb2R1bGVzLCBzY3JpcHRzLCBhbmQgXAorZG9jdW1lbnRzIGZvciB3b3JraW5nIHdpdGggWE1MIGluIFBlcmwuICBsaWJ4bWwtcGVybCBzb2Z0d2FyZSBcCit3b3JrcyBpbiBjb21iaW5hdGlvbiB3aXRoIFhNTDo6UGFyc2VyLCBQZXJsU0FYLCBYTUw6OkRPTSwgXAorWE1MOjpHcm92ZSBhbmQgb3RoZXJzLiIKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBQZXJsIG1vZHVsZXMgZm9yIHdvcmtpbmcgd2l0aCBYTUwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MzM7ZW5kbGluZT0zNTttZDU9MTcwNTU0OWVlZjc1NzdhM2Q2YmE3MTEyM2ExZjBjZTgiCisKK0RFUEVORFMgKz0gImxpYnhtbC1wYXJzZXItcGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGVkNWZiZGRhNTNkMTMwMWRkYWVkODhkYjEwNTAzYmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDU3MTA1OWI3YjVkNDhiN2NlNTJiMDEzODllOTVkNzk4YmY1Y2YyMDIwNTIzYzE1M2ZmMjdiNDk4MTUzYzljYiIKKworRVhUUkFfQ1BBTkZMQUdTID0gIkVYUEFUTElCUEFUSD0ke1NUQUdJTkdfTElCRElSfSBFWFBBVElOQ1BBVEg9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2luaGVyaXQgY3BhbgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXNpbXBsZS1wZXJsXzIuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMWI0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgWE1MIgorREVTQ1JJUFRJT04gPSAiVGhlIFhNTDo6U2ltcGxlIFBlcmwgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIEFQSSBsYXllciBcCitvbiB0b3Agb2YgYW4gdW5kZXJseWluZyBYTUwgcGFyc2luZyBtb2R1bGUgdG8gbWFpbnRhaW4gWE1MIGZpbGVzIFwKKyhlc3BlY2lhbGx5IGNvbmZpZ3VyYXRpb24gZmlsZXMpLiBJdCBpcyBhIGJsdW50IHJld3JpdGUgb2YgWE1MOjpTaW1wbGUgXAorKGJ5IEdyYW50IE1jTGVhbikgdG8gdXNlIHRoZSBYTUw6OkxpYlhNTCBwYXJzZXIgZm9yIFhNTCBzdHJ1Y3R1cmVzLCBcCit3aGVyZSB0aGUgb3JpZ2luYWwgdXNlcyBwbGFpbiBQZXJsIG9yIFNBWCBwYXJzZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfm1hcmtvdi9YTUwtTGliWE1MLVNpbXBsZS0wLjkzL2xpYi9YTUwvTGliWE1ML1NpbXBsZS5wb2QiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTdkYmIzZTIyNDFmYWM4NDU3OTY3MDUzZmMxYTFkZGIiCitERVBFTkRTICs9ICJsaWJ4bWwtcGFyc2VyLXBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvWE1MLVNpbXBsZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZDEwOTY0ZTEyM2I3NmVjYTM2Njc4NDY0ZGFhNjNjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1Y2ZmMTNkMDgwMjc5MmRhMWViNDU4OTVjZTFiZTQ2MTkwM2Q5OGVjOTdjOWM5NTNiYzg0MDZhZjcyOTQ0MzRhIgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNpbXBsZS0ke1BWfSIKKworRVhUUkFfUEVSTEZMQUdTID0gIi1JICR7UEVSTEhPU1RMSUJ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMWNhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjIuMC5iYgpAQCAtMCwwICsxLDEyMyBAQAorcmVxdWlyZSBwZXJsLmluYworCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgIGZpbGU6Ly9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmF0aXZlLW5vcGFja2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmF0aXZlLXBlcmxpbmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTU1fVW5peC5wbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZXJybm9fdmVyLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vZHluYWxvYWRlcmhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZjBmMDliMTdkZTQyNmVmZjMyMzQyNmNiMTQwZWU3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZTgzZWFkMGM1YzI2Y2JiZTYyNmZhNGJhYzFhNGJlYWJlMjNhOWVlYmMxNWQzNWJhNDljY2RlMTE4NzhlMTk2IgorCitpbmhlcml0IG5hdGl2ZQorCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK2V4cG9ydCBMRD0iJHtDQ0xEfSIKKworZG9fY29uZmlndXJlICgpIHsKKwkuL0NvbmZpZ3VyZSBcCisJCS1EY2M9IiR7Q0N9IiBcCisJCS1EY2ZsYWdzPSIke0NGTEFHU30iIFwKKwkJLURsZGZsYWdzPSIke0xERkxBR1N9IiBcCisJCS1EY2ZfYnk9Ik9wZW4gRW1iZWRkZWQiIFwKKwkJLURwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLUR2ZW5kb3JwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLUR2ZW5kb3JwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLURzaXRlcHJlZml4PSR7cHJlZml4fSBcCisJCVwKKwkJLURiaW49JHtTVEFHSU5HX0JJTkRJUn0vJHtQTn0gXAorCQktRHByaXZsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EYXJjaGxpYj0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLUR2ZW5kb3JsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EdmVuZG9yYXJjaD0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLURzaXRlbGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRHNpdGVhcmNoPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQlcCisJCS1EdXNlc2hycGxpYiBcCisJCS1EdXNldGhyZWFkcyBcCisJCS1EdXNlaXRocmVhZHMgXAorCQktRHVzZWxhcmdlZmlsZXMgXAorCQktRG5vZXh0ZW5zaW9ucz1PREJNX0ZpbGUgXAorCQktVWRfZG9zdWlkIFwKKwkJLVVpX2RiIFwKKwkJLVVpX25kYm0gXAorCQktVWlfZ2RibSBcCisJCS1VaV9nZGJtX25kYm0gXAorCQktVWlfZ2RibW5kYm0gXAorCQktRGlfc2hhZG93IFwKKwkJLURpX3N5c2xvZyBcCisJCS1EdXNlcGVybGlvIFwKKwkJLURtYW4zZXh0PTNwbSBcCisJCS1Ec2VkPS9iaW4vc2VkIFwKKwkJLVVhZnMgXAorCQktVWRfY3NoIFwKKwkJLVV1c2VzZmlvIFwKKwkJLVV1c2VubSAtZGVzCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisJIyBXZSBuZWVkIGEgaG9zdHBlcmwgbGluayBmb3IgYnVpbGRpbmcgcGVybAorCWxuIC1zZiBwZXJsJHtQVn0gJHtEfSR7YmluZGlyfS9ob3N0cGVybAorCisgICAgICAgIGxuIC1zZiBwZXJsICR7RH0ke2xpYmRpcn0vcGVybDUKKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUgXAorCSAgICAgICAgICAgJHtEfSR7ZGF0YWRpcn0vcGVybC8ke1BWfS9FeHRVdGlscworCisJIyBTYXZlIG5hdGl2ZSBjb25maWcgCisJaW5zdGFsbCBjb25maWcuc2ggJHtEfSR7bGliZGlyfS9wZXJsCisJaW5zdGFsbCBsaWIvQ29uZmlnLnBtICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS8KKwlpbnN0YWxsIGxpYi9FeHRVdGlscy90eXBlbWFwICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy8KKworCSMgcGVybCBzaGFyZWQgbGlicmFyeSBoZWFkZXJzCisJIyByZWZlcmVuY2UgcGVybCA1LjIwLjAtMSBpbiBkZWJpYW46CisJIyBodHRwczovL3BhY2thZ2VzLmRlYmlhbi5vcmcvZXhwZXJpbWVudGFsL2kzODYvcGVybC9maWxlbGlzdAorCWZvciBpIGluIGF2LmggYml0Y291bnQuaCBjaGFyY2xhc3NfaW52bGlzdHMuaCBjb25maWcuaCBjb3AuaCBjdi5oIGRvc2lzaC5oIFwKKwkJZW1iZWQuaCBlbWJlZHZhci5oIEVYVEVSTi5oIGZha2VzZGlvLmggZmVhdHVyZS5oIGZvcm0uaCBnaXRfdmVyc2lvbi5oIFwKKwkJZ3YuaCBoYW5keS5oIGh2X2Z1bmMuaCBodi5oIGlubGluZS5oIElOVEVSTi5oIGludHJwdmFyLmggaXBlcmxzeXMuaCBcCisJCWtleXdvcmRzLmggbDFfY2hhcl9jbGFzc190YWIuaCBtYWxsb2NfY3RsLmggbWV0YWNvbmZpZy5oIG1nX2RhdGEuaCBcCisJCW1nLmggbWdfcmF3LmggbWdfdnRhYmxlLmggbXlkdHJhY2UuaCBub3N0ZGlvLmggb3Bjb2RlLmggb3AuaCBcCisJCW9wbmFtZXMuaCBvcF9yZWdfY29tbW9uLmggb3ZlcmxvYWQuaCBwYWQuaCBwYXJzZXIuaCBwYXRjaGxldmVsLmggXAorCQlwZXJsYXBpLmggcGVybC5oIHBlcmxpby5oIHBlcmxpb2wuaCBwZXJsc2Rpby5oIHBlcmx2YXJzLmggcGVybHkuaCBcCisJCXBwLmggcHBfcHJvdG8uaCBwcm90by5oIHJlZW50ci5oIHJlZ2NoYXJjbGFzcy5oIHJlZ2NvbXAuaCByZWdleHAuaCBcCisJCXJlZ25vZGVzLmggc2NvcGUuaCBzdi5oIHRocmVhZC5oIHRpbWU2NF9jb25maWcuaCB0aW1lNjQuaCB1Y29uZmlnLmggXAorCQl1bmljb2RlX2NvbnN0YW50cy5oIHVuaXhpc2guaCB1dGY4LmggdXRmZWJjZGljLmggdXRpbC5oIHV1ZG1hcC5oIFwKKwkJdnV0aWwuaCB3YXJuaW5ncy5oIFhTVUIuaAorCWRvCisJCWluc3RhbGwgJGkgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUKKwlkb25lCisKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3BlcmwgUEVSTDVMSUI9JyRQRVJMNUxJQjoke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3Blcmw6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC9zaXRlX3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybC92ZW5kb3JfcGVybC8ke1BWfScKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3Blcmwke1BWfSBQRVJMNUxJQj0nJFBFUkw1TElCOiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybCR7U1RBR0lOR19MSUJESVJ9L3Blcmw6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC9zaXRlX3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybC92ZW5kb3JfcGVybC8ke1BWfScKKworCSMgVXNlIC91c3IvYmluL2VudiBuYXRpdmVwZXJsIGZvciB0aGUgcGVybCBzY3JpcHQuCisJZm9yIGYgaW4gYGdyZXAgLUlsICcjISAqJHtiaW5kaXJ9L3BlcmwnICR7RH0vJHtiaW5kaXJ9LypgOyBkbworCQlzZWQgLWkgLWUgJ3N8JHtiaW5kaXJ9L3Blcmx8L3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAkZgorCWRvbmUKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJwZXJsX3N5c3Jvb3RfY3JlYXRlX3dyYXBwZXIiCisKK3Blcmxfc3lzcm9vdF9jcmVhdGVfd3JhcHBlciAoKSB7CisJbWtkaXIgLXAgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9CisJIyBDcmVhdGUgYSB3cmFwcGVyIHRoYXQgL3Vzci9iaW4vZW52IHBlcmwgd2lsbCB1c2UgdG8gZ2V0IHBlcmwtbmF0aXZlLgorCSMgVGhpcyBNVVNUIGxpdmUgaW4gdGhlIG5vcm1hbCBiaW5kaXIuCisJY2F0ID4gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ly4uL25hdGl2ZXBlcmwgPDwgRU9GCisjIS9iaW4vc2gKK3JlYWxwYXRoPVxgcmVhZGxpbmsgLWZuIFwkMFxgCitleGVjIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvcGVybC1uYXRpdmUvcGVybCAiXCRAIgorRU9GCisJY2htb2QgMDc1NSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vLi4vbmF0aXZlcGVybAorCWNhdCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vLi4vbmF0aXZlcGVybAorfQorCisjIEZpeCB0aGUgcGF0aCBpbiBzc3RhdGUKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqLnBtICoucG9kICouaCAqLnBsICouc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGVhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYwpAQCAtMCwwICsxLDM3IEBACitpbmhlcml0IHB0ZXN0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lICJzOlwvb3B0OlwvdXNyOiIgLWkgUG9ydGluZy9hZGQtcGFja2FnZS5wbAorCXNlZCAtZSAiczpcL2xvY2FsXC9nbnVcLzpcLzoiIC1pIGhpbnRzL2N4dXguc2gKKwl0YXIgLWNmIC0gKiAtLWV4Y2x1ZGUgXCoubyAtLWV4Y2x1ZGUgbGlicGVybC5zbyAtLWV4Y2x1ZGUgTWFrZWZpbGUgLS1leGNsdWRlIG1ha2VmaWxlIC0tZXhjbHVkZSBob3N0cGVybCBcCisJCS0tZXhjbHVkZSBtaW5pcGVybCAtLWV4Y2x1ZGUgZ2VuZXJhdGVfdXVkbWFwIC0tZXhjbHVkZSBwYXRjaGVzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCisJc2VkIC1pIC1lICJzLCR7RH0sLGciIFwKKwkgICAgICAgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0sLGciIFwKKwkgICAgICAgLWUgInMsLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSAsLGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUn0sJHtiaW5kaXJ9LGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0lOQ0RJUn0sJHtpbmNsdWRlZGlyfSxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8sJHtiaW5kaXJ9LyxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8sLGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LyR7VEFSR0VUX1BSRUZJWH0sJHtiaW5kaXJ9LGciIFwKKwkgICAgJHtEfSR7UFRFU1RfUEFUSH0vbGliL0NvbmZpZy5wbQorCisJbG4gLXNmICR7YmluZGlyfS9wZXJsICR7RH0ke1BURVNUX1BBVEh9L3QvcGVybAorCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICMgUHV0IGFsbCAqLnQgZmlsZXMgZnJvbSB0aGUgbGliIGRpciBpbiB0aGUgcHRlc3QgcGFja2FnZQorICAgICMgZG9fc3BsaXRfcGFja2FnZXMgcmVxdWlyZXMgYSBwYWlyIG9mICgpIGluIHRoZSByZWdleCwgYnV0IHdlIGhhdmUgbm90aGluZworICAgICMgdG8gbWF0Y2gsIHNvIHVzZSBhbiBlbXB0eSBwYWlyLgorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGQuZXhwYW5kKCcke2xpYmRpcn0vcGVybC8ke1BWfScpLCAnLipcLnQoKScsCisgICAgICAgICAgICAnJHtQTn0tcHRlc3QlcycsICclcycsIHJlY3Vyc2l2ZT1UcnVlLCBtYXRjaF9wYXRoPVRydWUpCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1tb2R1bGVzICR7UE59LWRvYyAke1BOfS1taXNjIHNlZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Zjg4NmYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1yZGVwZW5kc181LjIyLjAuaW5jCkBAIC0wLDAgKzEsMjU2NyBAQAorIyBUbyBjcmVhdGUvdXBkYXRlIHRoZSBwZXJsLXJkZXBlbmRzXyR7UFZ9LmluYyB1c2UgdGhpcyBwaWVjZSBvZiB1Z2x5IHNjcmlwdCAobW9kaWZpZWQgZm9yIHlvdXIgYXJjaC9wYXRocyBldGMpOgorCisjamlhaG9uZ3h1OjUuMjAuMC1yMSQgcHdkCisjL2hvbWUvamlhaG9uZ3h1L3lvY3RvL2J1aWxkLTIwMTQwNjE4LXBlcmwvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3BlcmwvNS4yMC4wLXIxCisKKyMxIGNwIC1yIHBhY2thZ2VzLXNwbGl0IHBhY2thZ2VzLXNwbGl0Lm5ldyAmJiBjZCBwYWNrYWdlcy1zcGxpdC5uZXcKKyMyIGZpbmQgLiAtbmFtZSBcKi5wbSB8IHhhcmdzIHNlZCAtaSAnL149aGVhZC8sL149Y3V0L2QnCisjMyBlZ3JlcCAtciAiXlxzKihcPHVzZSAuKnxcPHJlcXVpcmUgLiopOz8iIHBlcmwtbW9kdWxlLSogLS1pbmNsdWRlPSIqLnBtIiAKKyN8IHNlZCAicy9cLy4qXC5wbTogKi8gKz0gL2c7cy9bXCJcJ10vL2c7cy87LiovXCIvZztzLys9IC4qXChyZXF1aXJlXHx1c2VcKVw+ICovKz0gXCJwZXJsLW1vZHVsZS0vZztzL0NQQU5QTFVTOjouKi9jcGFucGx1cy9nO3MvQ1BBTjo6LiovY3Bhbi9nO3MvOjovLS9nO3MvIFteK1wiXS4qLy9nO3MvXy8tL2c7cy9cLnBsXCIkL1wiLztzL1wiXD9cJC9cIi87cy8oLy87IiB8IHRyIFs6dXBwZXI6XSBbOmxvd2VyOl0gCisjfCBncmVwIC12IC1lICJcLXZtc1wtIiAtZSBtb2R1bGUtNSAtZSAiXiQiIC1lICJcXCQiIC1lIHlvdXIgLWUgdGsgLWUgYXV0b3BlcmwgLWUgaHRtbCAtZSBodHRwIC1lIHBhcnNlLWNwYW4gLWUgcGVybC1vc3R5cGUgLWUgbmRibS1maWxlIC1lIG1vZHVsZS1tYWMgLWUgZmNnaSAtZSBsd3AgLWUgZGJkIC1lIGRiaXggCisjfCBzb3J0IC11IAorI3wgc2VkICdzL14vUkRFUEVORFNfLztzL3BlcmwtbW9kdWxlLS8ke1BOfS1tb2R1bGUtL2c7cy9tb2R1bGUtXChtb2R1bGUtXCkvXDEvZztzL1wobW9kdWxlLWxvYWRcKS1jb25kaXRpb25hbC9cMS9nO3MvZW5jb2RlLWNvbmZpZ2xvY2FsLyYtcG0vOycgCisjfCBlZ3JlcCAtd3YgJz0+fG1vZHVsZS1hfG1vZHVsZS1hcGFjaGUuP3xtb2R1bGUtYXByfG1vZHVsZS1hdXRoZW4tc2FzbHxtb2R1bGUtYi1hc21kYXRhfG1vZHVsZS1jb252ZXJ0LWViY2RpY3xtb2R1bGUtZGV2ZWwtc2l6ZXxtb2R1bGUtZGlnZXN0LXBlcmwtbWQ1fG1vZHVsZS1kdW1wdmFsdWV8bW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWFhYXJnaDU2aGFzaHxtb2R1bGUtZXh0dXRpbHMteHNzeW1zZXR8bW9kdWxlLWZpbGUtYnNkZ2xvYnxtb2R1bGUtZm9yfG1vZHVsZS1pdHxtb2R1bGUtaW8tc3RyaW5nfG1vZHVsZS1pcGMtc3lzdGVtLXNpbXBsZXxtb2R1bGUtbGV4aWNhbHxtb2R1bGUtbG9jYWwtbGlifG1ldGFkYXRhfG1vZHVsZS1tb2RwZXJsLXV0aWx8bW9kdWxlLXBsdWdnYWJsZS1vYmplY3R8bW9kdWxlLXRlc3QtYnVpbGRlci1pby1zY2FsYXJ8bW9kdWxlLXRleHQtdW5pZGVjb2RlfG1vZHVsZS13aW4zMnxvYmplY3RzXHNsb2FkfHN5c2NhbGwucGh8c3lzdGVtaW5mby5waHwlcycgPiAvdG1wL3BlcmwtcmRlcGVuZHMKKworUkRFUEVORFNfcGVybC1taXNjICs9ICJwZXJsIgorUkRFUEVORFNfJHtQTn0tcG9kICs9ICJwZXJsIgorCisjIFNvbWUgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCB0aGUgYWJvdmUgZG9lc24ndCBtYW5hZ2UgdG8gZmlndXJlIG91dAorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMiCisKKworIyBEZXBlbmRzIGxpc3QKKyMgY29weSBjb250ZW50cyBvZiAvdG1wL3BlcmwtcmRlcGVuZHMgaW4gdGhpcyBmaWxlCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNwYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWlmIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtbmV0LXBpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS11c2VyLXB3ZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWlvLXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyeWJhc2UgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1mYXRhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2sgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2siCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2tpcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNraXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG91c2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1iLW9wLXByaXZhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVidWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmVuY2htYXJrICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iZW5jaG1hcmsgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iZW5jaG1hcmsgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ibGliICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJsaWIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmxpYiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtYi1jb25jaXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWItdGVyc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1iLWNvbmNpc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIteHJlZiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYnl0ZXMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcy1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ieXRlcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycC1oZWF2eSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1jb3JlbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3BhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZGlyaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1uZXQtcGluZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zYWZlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRlcm0tcmVhZGxpbmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWItZGVwYXJzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItaW50MzIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1pbnQzMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItbnVsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLW51bGwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItdXRmOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRlcHJlY2F0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wZWVrICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcGVlayArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBwcG9ydCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1zZWxmc3R1YmJlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1zZWxmc3R1YmJlciArPSAiJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLXRleHQtdGFicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtZGlnZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlyaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaXJoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZHluYWxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZHluYWxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWJ5dGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY24taHoiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZWJjZGljICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnoiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1uYW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLW5hbWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWdsb2NhbC1wbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdHcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2Rpbmctd2FybmluZ3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nLXdhcm5pbmdzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuZ2xpc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmdsaXNoICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW52ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVudiArPSAiJHtQTn0tbW9kdWxlLXRpZS1hcnJheSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lcnJubyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXJybm8gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lcnJubyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlci1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pcGMtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kZWMtb3NmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtYXV0b3NwbGl0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbXkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXJlZ2V4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXVuaXZlcnNhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1pbmlwZXJsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1haXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1haXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtYXV0b3NwbGl0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtY3BhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZG9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZG9zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW1hY29zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tcW54ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1xbnggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZGlyaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11d2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11d2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12b3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW45NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luOTUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW45NSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1teSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW15ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvdW50bGluZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1ldmFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvdW50bGluZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1saWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtaW5wdXRtYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1vdXRwdXRtYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy10eXBlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtZmF0YWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZjbnRsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmNudGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmNudGwgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mZWF0dXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtaGFzaC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlY2FjaGUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWRvc2dsb2IgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWlwYy1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1nbG9iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2IgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9iICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtY3lnd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1lcG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWVwb2MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWVwb2MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1tYWMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtbWFjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1tYWMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1vczIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1vczIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS1jd2QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maW5kYmluICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXBvZC11c2FnZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1kZXRlY3QgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWxpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1saXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1wb2xsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcG9sbCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1wb2xsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtdW5peCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtdGllLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtbG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS10aW1lLWhpcmVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLWlwYy1zeXN2IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4yICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4yICs9ICIke1BOfS1tb2R1bGUtaXBjLW9wZW4zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWlvLXBpcGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1pcGMtc3lzdiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLWlwYy1zeXN2IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwLWJvb2xlYW4gKz0gIiR7UE59LW1vZHVsZS1qc29uLXBwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAtYm9vbGVhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGliICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsLXhzICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbC14cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWRlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb3JlbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtbG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LWd1dHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LWd1dHMgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsY2VtdSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjZW11ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtdHJpZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtdHJpZyArPSAiJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLXRyaWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1hbnlkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1leHBpcmVmaWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLWV4cGlyZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtc3RvcmFibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWV0YS1ub3RhdGlvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZXRhLW5vdGF0aW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbXJvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jb25maWcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1lICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1pIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1pICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtbCArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LW5ldHJjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0cmMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtdGltZS1oaXJlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wcm90b2VudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV4dCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5leHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9rICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9rICs9ICIke1BOfS1tb2R1bGUtdGVzdC1tb3JlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLXN1YnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGVuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW8gKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wcyArPSAiJHtQTn0tbW9kdWxlLW9wY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZGluZyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkLW51bWJlcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLW1ybyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxmYXEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGZhcSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1tbWFwICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXNjYWxhciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby12aWEgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXBhcnNlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtaW5wdXRvYmplY3RzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1pbnB1dG9iamVjdHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZWxpbmsgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VsaW5rICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZWxpbmsgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLWlucHV0b2JqZWN0cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNldXRpbHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWdldG9wdHNvbyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1tYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS1wb2QtbWFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZGVidWcgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzdGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN0ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3RleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzeG1sICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHJvZ3Jlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcmVuZHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zaW1wbGV0cmVlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHRjb250ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRpZWRvdXRmaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlZHVtYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZWR1bWIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVzbWFydCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUteG1sb3V0c3RyZWFtICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1vdmVyc3RyaWtlICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtb3ZlcnN0cmlrZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1vdmVyc3RyaWtlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtdGVybS1jYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXRlcm0tY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtY2FycC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtb3Bjb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlYXJjaC1kaWN0ICs9ICIke1BOfS1tb2R1bGUtZmVhdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxlY3RzYXZlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxmbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zaWd0cmFwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zaWd0cmFwICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvcnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLWJlbmNobWFyayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWNvbW1lbnQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcGxhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcHJhZ21hICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdW5rbm93biArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQteWFtbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItam9iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jYXAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNvbXBsZXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jb21wbGV0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLXJlYWRsaW5lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tcmVhZGxpbmUgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1wZXJsaW8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3Rlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1kZWxlZ2F0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1hYmJyZXYgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1zZWxmbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC10YWJzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC10YWJzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtdGFicyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXRleHQtdGFicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFzaC1uYW1lZGNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2gtbmFtZWRjYXB0dXJlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc2NhbGFyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc2NhbGFyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGllLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3Vic3RyaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN1YnN0cmhhc2ggKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS10aW1lLXRtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtdGltZS10bSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXRtICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtdG0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1iaWc1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstYmlnNSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstZ2IyMzEyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstZ2IyMzEyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1qaXN4MDIwOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWppc3gwMjA4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXBpbnlpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXBpbnlpbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstc3Ryb2tlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstc3Ryb2tlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay16aHV5aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay16aHV5aW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtY2hhcm5hbWVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtaWYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS11bmljb3JlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdXRmOC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvcmUgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaXZlcnNhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXV0ZjggKz0gIiR7UE59LW1vZHVsZS11dGY4LWhlYXZ5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXJlZ2V4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1pZiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS11bml2ZXJzYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS14c2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUteHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk3MTZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMKQEAgLTAsMCArMSw4IEBACitTVU1NQVJZID0gIlBlcmwgc2NyaXB0aW5nIGxhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wZXJsLm9yZy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlpbmc7bWQ1PTViMTIyYTM2ZDBmNmRjNTUyNzlhMGViYzY5ZjNjNjBiIFwKKwkJICAgIGZpbGU6Ly9BcnRpc3RpYzttZDU9MmU2ZmQyNDc1MzM1YWY4OTI0OTRmZTFmNzMyN2JhZjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9zcmMvNS4wLyR7QlB9LnRhci54eiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNWIwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK0luZGV4OiBwZXJsLTUuMTIuMy9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL0NvbmZpZ3VyZQorKysrIHBlcmwtNS4xMi4zL0NvbmZpZ3VyZQorQEAgLTEzMTYsOCArMTMxNiw5IEBAIGxvY2xpYnB0aD0iL3Vzci9sb2NhbC9saWIgL29wdC9sb2NhbC9saWIKKyBsb2NsaWJwdGg9IiRsb2NsaWJwdGggL29wdC9nbnUvbGliIC91c3IvR05VL2xpYiAvb3B0L0dOVS9saWIiCisgCisgOiBnZW5lcmFsIGxvb2tpbmcgcGF0aCBmb3IgbG9jYXRpbmcgbGlicmFyaWVzCistZ2xpYnB0aD0iL2xpYiAvdXNyL2xpYiAkeGxpYnB0aCIKKytnbGlicHRoPSIvbGliIC91c3IvbGliIC9saWI2NCAvdXNyL2xpYjY0ICR4bGlicHRoIgorIGdsaWJwdGg9IiRnbGlicHRoIC91c3IvY2NzL2xpYiAvdXNyL3VjYmxpYiAvdXNyL2xvY2FsL2xpYiIKKyt0ZXN0IC1mIC91c3IvbGliLyotbGludXgtZ251L2xpYmMuc28gJiYgZ2xpYnB0aD0iL3Vzci9saWIvKi1saW51eC1nbnUgJGdsaWJwdGgiCisgdGVzdCAtZiAvdXNyL3NobGliL2xpYmMuc28gJiYgZ2xpYnB0aD0iL3Vzci9zaGxpYiAkZ2xpYnB0aCIKKyB0ZXN0IC1mIC9zaGxpYi9saWJjLnNvICAgICAmJiBnbGlicHRoPSIvc2hsaWIgJGdsaWJwdGgiCisgdGVzdCAtZCAvdXNyL2xpYjY0ICAgICAgICAgJiYgZ2xpYnB0aD0iJGdsaWJwdGggL2xpYjY0IC91c3IvbGliNjQgL3Vzci9sb2NhbC9saWI2NCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjkyY2NiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NTV9Vbml4LnBtLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK1RoZSBwZXJsLW5hdGl2ZSBzaG91bGQgYmUgcmVsb2NhdGFibGUgd2hpbGUgcmUtdXNlIHNzdGF0ZS1jYWNoZSBmcm9tCithbm90aGVyIGJ1aWxkLCBlc3BlY2lhbGx5IHRoZSBvcmlnaW5hbCBidWlsZCB3YXMgcmVuYW1lZC9yZW1vdmVkLgorCitUbyBnZXQgdGhlIE1ha2VNYWtlci5wbSB3b3JrcyBpbiB0aGlzIGNhc2UsIHdlIG5lZWQgcGVybCB3cmFwcGVyIGhlcmUKK2luc3RlYWQgb2YgcmVhbCBwZXJsIGJpbmFyeS4KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0ub3JpZwkyMDExLTA4LTEyIDE2OjA3OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIHBlcmwtNS4xMi4zL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCTIwMTEtMDgtMTIgMTY6MDg6NTYuMDAwMDAwMDAwICswODAwCitAQCAtMTAxOSw2ICsxMDE5LDkgQEAKKyAgICAgfQorIAorICAgICBmb3JlYWNoIG15ICRuYW1lIChAJG5hbWVzKXsKKysgICAgICAgICMgR2V0dGluZyBNYWtlTWFrZXIucG0gdXNlIHBlcmwgd3JhcHBlciBpbnN0ZWFkIG9mICdwZXJsLnJlYWwnIGRpcmVjdGx5CisrICAgICAgICAkbmFtZSA9fiBzL3BlcmxcLnJlYWwvcGVybC8gaWYgKCRuYW1lID1+IC9wZXJsXC5yZWFsLyk7CisrCisgICAgICAgICBmb3JlYWNoIG15ICRkaXIgKEAkZGlycyl7CisgICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCAkZGlyOyAjICRzZWxmLT57UEVSTF9TUkN9IG1heSBiZSB1bmRlZmluZWQKKyAgICAgICAgICAgICBteSAoJGFicywgJHZhbCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLlNILnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGUyMzMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaApAQCAtMCwwICsxLDM3NCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5TSCB8ICAxNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5TSCBiL01ha2VmaWxlLlNICitpbmRleCAwMzRkODEyLi42N2UwOGZkIDEwMDc1NQorLS0tIGEvTWFrZWZpbGUuU0gKKysrKyBiL01ha2VmaWxlLlNICitAQCAtMzksMTAgKzM5LDEwIEBAIGNhc2UgIiR1c2VzaHJwbGliIiBpbgorIHRydWUpCisgCSMgUHJlZml4IGFsbCBydW5zIG9mICdtaW5pcGVybCcgYW5kICdwZXJsJyB3aXRoCisgCSMgJGxkbGlicHRoIHNvIHRoYXQgLi9wZXJsIGZpbmRzICp0aGlzKiBzaGFyZWQgbGlicGVybC4KKy0JY2FzZSAiJExEX0xJQlJBUllfUEFUSCIgaW4KKy0JJycpICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiIDs7CistCSopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CistCWVzYWMKKysJI2Nhc2UgIiRMRF9MSUJSQVJZX1BBVEgiIGluCisrCSMnJykgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKysJIyopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CisrCSNlc2FjCisgCisgCXBsZGxmbGFncz0iJGNjY2RsZmxhZ3MiCisgCXN0YXRpY19sZGZsYWdzPScnCitAQCAtMTIyLDEwICsxMjIsMTEgQEAgdHJ1ZSkKKyAJICAgICopCisgCQlldmFsICJsZGxpYnB0aHZhbD1cIlwkJGxkbGlicHRobmFtZVwiIgorIAorLQkJY2FzZSAiJGxkbGlicHRodmFsIiBpbgorLQkJJycpICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgIiA7OworLQkJKikgICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRsZGxpYnB0aHZhbCIgYCIgOzsKKy0JCWVzYWMKKysjIFdlIGNvbXBpbGUgaW4gdGhlIGxpYnJhcnkgcGF0aCBpbiBPRSBmcm9tIGNyb3NzLWNvbXBpbGUsIHNvIGxldHMgbm90IGRvIHRoaXMKKysjCQljYXNlICIkbGRsaWJwdGh2YWwiIGluCisrIwkJJycpICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgIiA7OworKyMJCSopICAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkbGRsaWJwdGh2YWwiIGAiIDs7CisrIwkJZXNhYworIAorIAkJOzsKKyAJICAgIGVzYWMKK0BAIC0xNDEsMTggKzE0Miw3IEBAIHRydWUpCisgCSAgICAjIElOU1RBTEwgZmlsZSwgdW5kZXIgIkJ1aWxkaW5nIGEgc2hhcmVkIHBlcmwgbGlicmFyeSIuCisgCSAgICAjIElmIHRoZXJlIGlzIG5vIHByZS1leGlzdGluZyAkbGlicGVybCwgd2UgZG9uJ3QgbmVlZAorIAkgICAgIyB0byBkbyBhbnl0aGluZyBmdXJ0aGVyLgorLQkgICAgaWYgdGVzdCAtZiAkYXJjaGxpYi9DT1JFLyRsaWJwZXJsOyB0aGVuCistCQlybSAtZiBwcmVsb2FkCistCQljYXQgPDwnRU9UJyA+IHByZWxvYWQKKy0jISAvYmluL3NoCistbGliPSQxCistc2hpZnQKKy10ZXN0IC1yICRsaWIgJiYgZXhwb3J0IExEX1BSRUxPQUQ9IiRsaWIgJExEX1BSRUxPQUQiCistZXhlYyAiJEAiCistRU9UCistCQljaG1vZCA3NTUgcHJlbG9hZAorLQkJbGRsaWJwdGg9IiRsZGxpYnB0aCBgcHdkYC9wcmVsb2FkIGBwd2RgLyRsaWJwZXJsIgorLQkgICAgZmkKKysJICAgIGVjaG8gbGludXggbGlicmFyaWVzIG92ZXJ3cml0dGVuIGJ5IGNyb3NzLWNvbXBpbGUgcGF0Y2hlcworIAkgICAgOzsKKyAJb3MzOTApCXRlc3QgLWYgL2Jpbi9lbnYgJiYgbGRsaWJwdGg9Ii9iaW4vZW52ICRsZGxpYnB0aCIKKyAJCTs7CitAQCAtNTY2LDEzICs1NTYsMjMgQEAgc3BsaW50ZmlsZXMgPSAkKGMxKQorIAlAZWNobyBgJChDQ0NNRFNSQylgIC1TICQqLmMKKyAJQGAkKENDQ01EU1JDKWAgLVMgJCouYworIAorLWFsbDogJChGSVJTVE1BS0VGSUxFKSAkKE1JTklQRVJMX0VYRSkgJChnZW5lcmF0ZWRfcG9kcykgJChwcml2YXRlKSAkKHVuaWRhdGFmaWxlcykgJChwdWJsaWMpICQoZHluYW1pY19leHQpICQobm9ueHNfZXh0KSBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKy0JQGVjaG8gIiAiOworLQlAZWNobyAiCUV2ZXJ5dGhpbmcgaXMgdXAgdG8gZGF0ZS4gVHlwZSAnJChNQUtFKSB0ZXN0JyB0byBydW4gdGVzdCBzdWl0ZS4iCisrI2FsbDogJChGSVJTVE1BS0VGSUxFKSAkKE1JTklQRVJMX0VYRSkgJChnZW5lcmF0ZWRfcG9kcykgJChwcml2YXRlKSAkKHVuaWRhdGFmaWxlcykgJChwdWJsaWMpICQoZHluYW1pY19leHQpICQobm9ueHNfZXh0KSBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKysjCUBlY2hvICIgIjsKKysjCUBlY2hvICIJRXZlcnl0aGluZyBpcyB1cCB0byBkYXRlLiBUeXBlICckKE1BS0UpIHRlc3QnIHRvIHJ1biB0ZXN0IHN1aXRlLiIKKysKKythbGw6ICQoRklSU1RNQUtFRklMRSkgJChNSU5JUEVSTF9FWEUpIG1pbmlwZXJsICQodW5pZGF0YWZpbGVzKQorKworK21vcmU6ICQoZ2VuZXJhdGVkX3BvZHMpICQocHJpdmF0ZSkgJChwdWJsaWMpCisrCisrbW9yZTI6ICQoZHluYW1pY19leHQpCisgCistJChNQU5JRkVTVF9TUlQpOglNQU5JRkVTVCAkKFBFUkxfRVhFKQorLQlAJChSVU5fUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSB8fCAoZWNobyAiV0FSTklORzogcmUtc29ydGluZyBNQU5JRkVTVCI7IFwKKy0JICAgICQoUlVOX1BFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgLW8gTUFOSUZFU1Q7IHNoIC1jIHRydWUpCisrbW9yZTM6ICQobm9ueHNfZXh0KQorKworK21vcmU0OiBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKysKKyskKE1BTklGRVNUX1NSVCk6CU1BTklGRVNUCisrCUAkKE1JTklQRVJMKSBQb3J0aW5nL21hbmlzb3J0IC1xIHx8IChlY2hvICJXQVJOSU5HOiByZS1zb3J0aW5nIE1BTklGRVNUIjsgXAorKwkgICAgJChNSU5JUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSAtbyBNQU5JRkVTVDsgc2ggLWMgdHJ1ZSkKKyAJQHRvdWNoICQoTUFOSUZFU1RfU1JUKQorIAorIC5QSE9OWTogYWxsIHV0aWxpdGllcworQEAgLTU4MSw3ICs1ODEsNyBAQCAkKE1BTklGRVNUX1NSVCk6CU1BTklGRVNUICQoUEVSTF9FWEUpCisgIyBieSBtYWtlX3BhdGNobnVtLnBsLgorIGdpdF92ZXJzaW9uLmg6IGxpYi9Db25maWdfZ2l0LnBsCisgCistbGliL0NvbmZpZ19naXQucGw6ICQoTUlOSVBFUkxfRVhFKSBtYWtlX3BhdGNobnVtLnBsCisrbGliL0NvbmZpZ19naXQucGw6IG1ha2VfcGF0Y2hudW0ucGwKKyAJJChNSU5JUEVSTCkgbWFrZV9wYXRjaG51bS5wbAorIAorICMgbWFrZSBzdXJlIHRoYXQgd2UgcmVjb21waWxlIHBlcmwuYyBpZiB0aGUgZ2l0IHZlcnNpb24gY2hhbmdlcworQEAgLTU5NCw3ICs1OTQsNyBAQCBwZXJsJChPQkpfRVhUKTogZ2l0X3ZlcnNpb24uaAorICMgbG9hZGluZywgd2UgbmVlZCB0byBidWlsZCBwZXJsIGZpcnN0LgorIGNhc2UgIiR1c2VkbCRzdGF0aWNfY3dkIiBpbgorIGRlZmluZXVuZGVmKQorLSAgICB1dGlsX2RlcHM9JyQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSBsaWIvYXV0by9Dd2QvQ3dkJChETFNVRkZJWCkgRk9SQ0UnCisrICAgIHV0aWxfZGVwcz0nJChDT05GSUdQTSkgbGliL2F1dG8vQ3dkL0N3ZCQoRExTVUZGSVgpIEZPUkNFJworICAgICA7OworIGRlZmluZWRlZmluZSkKKyAgICAgdXRpbF9kZXBzPSckKFBFUkxfRVhFKSAkKENPTkZJR1BNKSBGT1JDRScKK0BAIC02MDQsNyArNjA0LDcgQEAgZGVmaW5lZGVmaW5lKQorIGVzYWMKKyAKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8IUdST0shVEhJUyEKKy11dGlscy9NYWtlZmlsZTogXCQoTUlOSVBFUkxfRVhFKSBcJChDT05GSUdQTSkgdXRpbHMvTWFrZWZpbGUuUEwKKyt1dGlscy9NYWtlZmlsZTogXCQoQ09ORklHUE0pIHV0aWxzL01ha2VmaWxlLlBMCisgCVwkKE1JTklQRVJMKSAtSWxpYiB1dGlscy9NYWtlZmlsZS5QTAorIAorIHV0aWxpdGllczoJdXRpbHMvTWFrZWZpbGUgJHV0aWxfZGVwcworQEAgLTY5OSw3ICs2OTksNyBAQCBlc2FjCisgCisgCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistcGVybG1haW4uYzogJChNSU5JUEVSTF9FWEUpIGV4dC9FeHRVdGlscy1NaW5pcGVybC9wbV90b19ibGliCisrcGVybG1haW4uYzogZXh0L0V4dFV0aWxzLU1pbmlwZXJsL2xpYi9FeHRVdGlscy9NaW5pcGVybC5wbQorIAkkKE1JTklQRVJMKSAtSWxpYiAtTUV4dFV0aWxzOjpNaW5pcGVybCAtZSAnd3JpdGVtYWluKFwicGVybG1haW4uYyIsIEBBUkdWKScgRHluYUxvYWRlciAkKHN0YXRpY19leHQpCisgCisgIyBUaGUgZmlsZSBleHQubGlicyBpcyBhIGxpc3Qgb2YgbGlicmFyaWVzIHRoYXQgbXVzdCBiZSBsaW5rZWQgaW4KK0BAIC03NjAsNyArNzYwLDcgQEAgUEVSTEVYUE9SVAkJPSBwZXJsLmV4cAorIAk7OworIAllc2FjCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworLXBlcmwuZXhwOiAkKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpCisrcGVybC5leHA6IG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkKKyAJLi8kKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsIC0tc29ydC1mb2xkIFBMQVRGT1JNPWFpeCBDQ19GTEFHUz0iJChPUFRJTUlaRSkiID4gcGVybC5leHAKKyAKKyAhTk8hU1VCUyEKK0BAIC03NjksNyArNzY5LDcgQEAgb3MyKQorIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBNSU5JUEVSTEVYUAkJPSBtaW5pcGVybAorIAorLXBlcmw1LmRlZjogJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCAkKENPTkZJR1BNKSAkKFNZTSkgJChTWU1IKSBtaW5pcGVybC5tYXAKKytwZXJsNS5kZWY6IG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkgbWluaXBlcmwubWFwCisgCS4vJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCBQTEFURk9STT1vczIgLURQRVJMX0RMTD0kKFBFUkxfRExMKSBDQ19GTEFHUz0iJChPUFRJTUlaRSkiID4gcGVybDUuZGVmCisgCisgIU5PIVNVQlMhCitAQCAtODI5LDcgKzgyOSw3IEBAICQoTElCUEVSTCk6ICQmICQob2JqKSAkKERZTkFMT0FERVIpICQoTElCUEVSTEVYUE9SVCkKKyAJdHJ1ZSkKKyAJCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIAlybSAtZiAkQAorLQkkKExEKSAtbyAkQCAkKFNIUlBMREZMQUdTKSAkKG9iaikgJChEWU5BTE9BREVSKSAkKGxpYnMpCisrCSQoTEQpIC1vICRAICQoU0hSUExERkxBR1MpICQob2JqKSAkKERZTkFMT0FERVIpICQobGlicykgLVdsLC1zb25hbWUsbGlicGVybC5zby41CisgIU5PIVNVQlMhCisgCQljYXNlICIkb3NuYW1lIiBpbgorIAkJYWl4KQorQEAgLTg3Nyw3ICs4NzcsOSBAQCAkKE1JTklQRVJMX0VYRSk6IGxpYi9idWlsZGN1c3RvbWl6ZS5wbAorIAkJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKQorIAkkKENDKSAtbyAkKE1JTklQRVJMX0VYRSkgJChDTERGTEFHUykgJChtaW5pX29iaikgJChsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorICFOTyFTVUJTIQorIAkJOzsKK0BAIC04ODUsNyArODg3LDkgQEAgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKQorIAkJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKSB3cml0ZSAgICBsZGN1c3RvbWl6ZS5wbAorIAkkKENDKSAtbyAkKE1JTklQRVJMX0VYRSkgJChtaW5pX29iaiAgICBsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUICAgIF9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVCAgICBfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbCAgICAKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtOTA3LDcgKzkxMSw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAJLUBybSAtZiBtaW5pcGVybC54b2sKKyAJJChDQykgJChDTERGTEFHUykgJChOQU1FU1BBQ0VGTEFHUykgLW8gJChNSU5JUEVSTF9FWEUpIFwKKyAJICAgICQobWluaV9vYmopICQobGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtOTE4LDcgKzkyNCw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogXCQmIFwkKG1pbmlfb2JqKSB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorIAktQHJtIC1mIG1pbmlwZXJsLnhvaworIAktQHJtIFwkKE1JTklQRVJMX0VYRSkKKyAJXCQoTE5TKSBcJChIT1NUX1BFUkwpIFwkKE1JTklQRVJMX0VYRSkKKy0JXCQoTERMSUJQVEgpIC4vbWluaXBlcmxcJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjXCQoTERMSUJQVEgpIC4vbWluaXBlcmxcJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCVwkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbCAnb3NuYW1lJyAiJG9zbmFtZSIKKyAhR1JPSyFUSElTIQorIAkJZWxzZQorQEAgLTkyNyw3ICs5MzUsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgCS1Acm0gLWYgbWluaXBlcmwueG9rCisgCSQoQ0MpICQoQ0xERkxBR1MpIC1vICQoTUlOSVBFUkxfRVhFKSBcCisgCSAgICAkKG1pbmlfb2JqKSAkKGxpYnMpCistCSQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSMkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCSQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgIU5PIVNVQlMhCisgCQlmaQorQEAgLTk3MSw3ICs5ODEsNyBAQCBjYXNlICIke29zbmFtZX0iIGluCisgY2F0YW1vdW50KQorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwhR1JPSyFUSElTIQorIC5QSE9OWTogbWFrZXBwcG9ydAorLW1ha2VwcHBvcnQ6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pCisrbWFrZXBwcG9ydDogXCQoQ09ORklHUE0pCisgCS1AZm9yIGYgaW4gTWFrZWZpbGUuUEwgUFBQb3J0X3BtLlBMIFBQUG9ydF94cy5QTCBwcHBvcnRfaC5QTDsgZG8gXAorIAkoY2QgZXh0L0RldmVsLVBQUG9ydCAmJiBgcHdkYC9ydW4uc2ggLi4vLi4vJChNSU5JUEVSTF9FWEUpIC1JLi4vLi4vbGliIFwkXCRmKTsgXAorIAlkb25lCitAQCAtOTgxLDcgKzk5MSw3IEBAIG1ha2VwcHBvcnQ6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pCisgKikKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAuUEhPTlk6IG1ha2VwcHBvcnQKKy1tYWtlcHBwb3J0OiAkKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgJChub254c19leHQpCisrbWFrZXBwcG9ydDogJChDT05GSUdQTSkgJChub254c19leHQpCisgCSQoTUlOSVBFUkwpIG1rcHBwb3J0CisgCisgIU5PIVNVQlMhCitAQCAtOTkxLDE2ICsxMDAxLDE2IEBAIGVzYWMKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAKKyAuUEhPTlk6IHByZXBsaWJyYXJ5CistcHJlcGxpYnJhcnk6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSAkKFBSRVBMSUJSQVJZX0xJQlBFUkwpCisrcHJlcGxpYnJhcnk6ICQoQ09ORklHUE0pICQoUFJFUExJQlJBUllfTElCUEVSTCkKKyAKKyAkKENPTkZJR1BNX0ZST01fQ09ORklHX1NIKTogJChDT05GSUdQT0QpCisgCistJChDT05GSUdQT0QpOiBjb25maWcuc2ggJChNSU5JUEVSTF9FWEUpIGNvbmZpZ3BtIFBvcnRpbmcvR2xvc3NhcnkgbGliL0NvbmZpZ19naXQucGwKKyskKENPTkZJR1BPRCk6IGNvbmZpZy5zaCBjb25maWdwbSBQb3J0aW5nL0dsb3NzYXJ5IGxpYi9Db25maWdfZ2l0LnBsCisgCSQoTUlOSVBFUkwpIGNvbmZpZ3BtCisgCisgdW5pZGF0YWZpbGVzICQodW5pZGF0YWZpbGVzKSBwb2QvcGVybHVuaXByb3BzLnBvZDogdW5pLmRhdGEKKyAKKy11bmkuZGF0YTogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pIGxpYi91bmljb3JlL21rdGFibGVzICQobm9ueHNfZXh0KQorK3VuaS5kYXRhOiAkKENPTkZJR1BNKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAkKG5vbnhzX2V4dCkKKyAJJChNSU5JUEVSTCkgbGliL3VuaWNvcmUvbWt0YWJsZXMgLUMgbGliL3VuaWNvcmUgLVAgcG9kIC1tYWtldGVzdCAtbWFrZWxpc3QgLXAKKyAjCUNvbW1lbnRlZCBvdXQgc28gYWx3YXlzIHJ1bnMsIG1rdGFibGVzIGxvb2tzIGF0IGZhciBtb3JlIGZpbGVzIHRoYW4gd2UKKyAjCWNhbiBpbiB0aGlzIG1ha2VmaWxlIHRvIGRlY2lkZSBpZiBuZWVkcyB0byBydW4gb3Igbm90CitAQCAtMTAwOSwxMiArMTAxOSwxMiBAQCB1bmkuZGF0YTogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pIGxpYi91bmljb3JlL21rdGFibGVzICQobm9ueHNfZXh0KQorICMgJChQRVJMX0VYRSkgYW5kIGV4dCBiZWNhdXNlIHBvZF9saWIucGwgbmVlZHMgRGlnZXN0OjpNRDUKKyAjIEJ1dCBhbHNvIHRoaXMgZW5zdXJlcyB0aGF0IGFsbCBleHRlbnNpb25zIGFyZSBidWlsdCBiZWZvcmUgd2UgdHJ5IHRvIHNjYW4KKyAjIHRoZW0sIHdoaWNoIHBpY2tzIHVwIERldmVsOjpQUFBvcnQncyBkb2N1bWVudGF0aW9uLgorLXBvZC9wZXJsdG9jLnBvZDogJChwZXJsdG9jX3BvZF9wcmVyZXFzKSAgJChQRVJMX0VYRSkgJChleHQpIHBvZC9idWlsZHRvYworLQkkKFJVTl9QRVJMKSAtZiBwb2QvYnVpbGR0b2MgLXEKKytwb2QvcGVybHRvYy5wb2Q6ICQocGVybHRvY19wb2RfcHJlcmVxcykgJChleHQpIHBvZC9idWlsZHRvYworKwkkKE1JTklQRVJMKSAtZiBwb2QvYnVpbGR0b2MgLXEKKyAKKyBwb2QvcGVybGFwaS5wb2Q6IHBvZC9wZXJsaW50ZXJuLnBvZAorIAorLXBvZC9wZXJsaW50ZXJuLnBvZDogJChNSU5JUEVSTF9FWEUpIGF1dG9kb2MucGwgZW1iZWQuZm5jCisrcG9kL3BlcmxpbnRlcm4ucG9kOiBhdXRvZG9jLnBsIGVtYmVkLmZuYworIAkkKE1JTklQRVJMKSBhdXRvZG9jLnBsCisgCisgcG9kL3Blcmxtb2RsaWIucG9kOiAkKE1JTklQRVJMX0VYRSkgcG9kL3Blcmxtb2RsaWIuUEwgTUFOSUZFU1QKK0BAIC0xMDI0LDcgKzEwMzQsNyBAQCBwb2QvcGVybDUyMjBkZWx0YS5wb2Q6IHBvZC9wZXJsZGVsdGEucG9kCisgCSQoUk1TKSBwb2QvcGVybDUyMjBkZWx0YS5wb2QKKyAJJChMTlMpIHBlcmxkZWx0YS5wb2QgcG9kL3Blcmw1MjIwZGVsdGEucG9kCisgCistZXh0cmEucG9kczogJChNSU5JUEVSTF9FWEUpCisrZXh0cmEucG9kczoKKyAJLUB0ZXN0ICEgLWYgZXh0cmEucG9kcyB8fCBybSAtZiBgY2F0IGV4dHJhLnBvZHNgCisgCS1Acm0gLWYgZXh0cmEucG9kcworIAktQGZvciB4IGluIGBncmVwIC1sICdePVthLXpdJyBSRUFETUUuKiB8IGdyZXAgLXYgUkVBRE1FLnZtc2AgOyBkbyBcCitAQCAtMTA2OCw4ICsxMDc4LDcgQEAgRU9UCisgICAgICAgICAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8RU9UCisgCisgaW5zdGFsbF8kbmFtZSBpbnN0YWxsLSRuYW1lOiBcJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsIGFsbCBpbnN0YWxsbWFuCistCVwkKFJVTl9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9XCQoREVTVERJUikgJGZsYWdzIFwkKElOU1RBTExGTEFHUykgXCQoU1RSSVBGTEFHUykKKy0JXCQoUlVOX1BFUkwpIGluc3RhbGxtYW4gLS1kZXN0ZGlyPVwkKERFU1RESVIpICRmbGFncworKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9XCQoREVTVERJUikgJGZsYWdzICBcJChJTlNUQUxMRkxBR1MpIFwkKFNUUklQRkxBR1MpCisgRU9UCisgICAgIGZpCisgCitAQCAtMTA3OSwxMSArMTA4OCw3IEBAIGRvbmUKKyBpZiB0ZXN0ICJYJGhvc3RwZXJsIiAhPSBYOyB0aGVuCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGluc3RhbGwucGVybDoJJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsCistCSQoSE9TVF9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorLQktQHRlc3QgISAtcyBleHRyYXMubHN0IHx8ICQoTUFLRSkgZXh0cmFzLmluc3RhbGwKKy0KKy1pbnN0YWxsLm1hbjoJYWxsIGluc3RhbGxtYW4KKy0JJChIT1NUX1BFUkwpIGluc3RhbGxtYW4gLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpCisrCS4vaG9zdHBlcmwgLUlmYWtlX2NvbmZpZ19saWJyYXJ5IC1JbGliIC1NQ29uZmlnIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCisgCisgIyBYWFggRXhwZXJpbWVudGFsLiBIYXJkd2lyZWQgdmFsdWVzLCBidXQgdXNlZnVsIGZvciB0ZXN0aW5nLgorICMgRXZlbnR1YWxseSBDb25maWd1cmUgY291bGQgYXNrIGZvciBzb21lIG9mIHRoZXNlIHZhbHVlcy4KK0BAIC0xMTAxLDI0ICsxMTA2LDggQEAgaW5zdGFsbC5odG1sOiBhbGwgaW5zdGFsbGh0bWwKKyBlbHNlCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGluc3RhbGwucGVybDoJJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsCistCSQoUlVOX1BFUkwpIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCistCS1AdGVzdCAhIC1zIGV4dHJhcy5sc3QgfHwgUEFUSD0iYHB3ZGA6XCR7UEFUSH0iIFBFUkw1TElCPSJgcHdkYC9saWIiIFwkKFJVTl9QRVJMKSAtSWxpYiAtTUNQQU4gLWUgJ0BBUkdWJiZpbnN0YWxsKEBBUkdWKScgYGNhdCBleHRyYXMubHN0YAorKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorIAorLWluc3RhbGwubWFuOglhbGwgaW5zdGFsbG1hbgorLQkkKFJVTl9QRVJMKSBpbnN0YWxsbWFuIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKQorLQorLSMgWFhYIEV4cGVyaW1lbnRhbC4gSGFyZHdpcmVkIHZhbHVlcywgYnV0IHVzZWZ1bCBmb3IgdGVzdGluZy4KKy0jIEV2ZW50dWFsbHkgQ29uZmlndXJlIGNvdWxkIGFzayBmb3Igc29tZSBvZiB0aGVzZSB2YWx1ZXMuCistaW5zdGFsbC5odG1sOiBhbGwgaW5zdGFsbGh0bWwKKy0JLUB0ZXN0IC1mIFJFQURNRS52bXMgJiYgY2Qgdm1zICYmICQoTE5TKSAuLi9SRUFETUUudm1zIFJFQURNRV92bXMucG9kICYmIGNkIC4uCistCSQoUlVOX1BFUkwpIGluc3RhbGxodG1sICAgXAorLSAgICAgIC0tcG9kcm9vdD0uIC0tcG9kcGF0aD0uIC0tcmVjdXJzZSAgXAorLSAgICAgIC0taHRtbGRpcj0kKHByaXZsaWIpL2h0bWwgICBcCistICAgICAgLS1odG1scm9vdD0kKHByaXZsaWIpL2h0bWwgIFwKKy0gICAgICAtLXNwbGl0aGVhZD1wb2QvcGVybGlwYyAgICAgXAorLSAgICAgIC0tc3BsaXRpdGVtPXBvZC9wZXJsZnVuYyAgICBcCistICAgICAgLS1pZ25vcmU9UG9ydGluZy9NYWludGFpbmVycy5wbSxQb3J0aW5nL3B1bXBraW4ucG9kLFBvcnRpbmcvcmVwb3NpdG9yeS5wb2QgXAorLSAgICAgIC0tdmVyYm9zZQorICFOTyFTVUJTIQorIGZpCisgCitAQCAtMTIxMCwxMyArMTE5OSwxMyBAQCBtYW5pY2hlY2s6CUZPUkNFCisgIworICMgRHluYUxvYWRlciBtYXkgYmUgbmVlZGVkIGZvciBleHRlbnNpb25zIHRoYXQgdXNlIE1ha2VmaWxlLlBMLgorIAorLSQoRFlOQUxPQURFUik6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgRk9SQ0UgJChub254c19leHQpCisrJChEWU5BTE9BREVSKTogbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IEZPUkNFICQobm9ueHNfZXh0KQorIAkkKE1JTklQRVJMKSBtYWtlX2V4dC5wbCAkQCAkKE1BS0VfRVhUX0FSR1MpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPXN0YXRpYyAkKFNUQVRJQ19MREZMQUdTKQorIAorLWRfZHVtbXkgJChkeW5hbWljX2V4dCk6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFICQoUEVSTEVYUE9SVCkgJChMSUJQRVJMKQorK2RfZHVtbXkgJChkeW5hbWljX2V4dCk6CWxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UgJChQRVJMRVhQT1JUKSAkKExJQlBFUkwpCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICRAICQoTUFLRV9FWFRfQVJHUykgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9ZHluYW1pYworIAorLXNfZHVtbXkgJChzdGF0aWNfZXh0KToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UKKytzX2R1bW15ICQoc3RhdGljX2V4dCk6CWxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJEAgJChNQUtFX0VYVF9BUkdTKSBNQUtFPSIkKE1BS0UpIiBMSUJQRVJMX0E9JChMSUJQRVJMKSBMSU5LVFlQRT1zdGF0aWMgJChTVEFUSUNfTERGTEFHUykKKyAKKyBuX2R1bW15ICQobm9ueHNfZXh0KToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBGT1JDRQorQEAgLTE0MDUsMTQgKzEzOTQsMTQgQEAgdGVzdF9wcmVwX3ByZTogcHJlcGxpYnJhcnkgdXRpbGl0aWVzICQobm9ueHNfZXh0KQorIAorIGNhc2UgIiR0YXJnZXRob3N0IiBpbgorICcnKSAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy10ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlICQoTUlOSVBFUkxfRVhFKSAkKHVuaWRhdGFmaWxlcykgJChQRVJMX0VYRSkgXAorK3Rlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgJCh1bmlkYXRhZmlsZXMpICQoUEVSTF9FWEUpIFwKKyAJJChkeW5hbWljX2V4dCkgJChURVNUX1BFUkxfRExMKSBydW50ZXN0cyAkKGdlbmVyYXRlZF9wb2RzKQorIAljZCB0ICYmIChybSAtZiAkKFBFUkxfRVhFKTsgJChMTlMpIC4uLyQoUEVSTF9FWEUpICQoUEVSTF9FWEUpKQorIAorICFOTyFTVUJTIQorIDs7CisgKikgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCFHUk9LIVRISVMhCistdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSBcJChNSU5JUEVSTF9FWEUpIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUpIFwKKyt0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUpIFwKKyAJXCQoZHluYW1pY19leHQpIFwkKFRFU1RfUEVSTF9ETEwpIHJ1bnRlc3RzIFwKKyAJXCQoZ2VuZXJhdGVkX3BvZHMpCisgCSR0byBsaWJwZXJsLioKK0BAIC0xNDY1LDcgKzE0NTQsNyBAQCB0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlIFwkKE1JTklQRVJMX0VYRSkgXCQodW5pZGF0YWZpbGVzKSBcJChQRVJMX0VYRQorIGVzYWMKKyAKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy10ZXN0X3ByZXBfcmVvbmx5OiAkKE1JTklQRVJMX0VYRSkgJChQRVJMX0VYRSkgJChkeW5hbWljX2V4dF9yZSkgJChURVNUX1BFUkxfRExMKQorK3Rlc3RfcHJlcF9yZW9ubHk6ICQoUEVSTF9FWEUpICQoZHluYW1pY19leHRfcmUpICQoVEVTVF9QRVJMX0RMTCkKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJChkeW5hbWljX2V4dF9yZSkgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9ZHluYW1pYworIAljZCB0ICYmIChybSAtZiAkKFBFUkxfRVhFKTsgJChMTlMpIC4uLyQoUEVSTF9FWEUpICQoUEVSTF9FWEUpKQorICFOTyFTVUJTIQorQEAgLTE1MTYsNyArMTUwNSw3IEBAICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIAorICMgQ2FuJ3QgZGVwZW5kIG9uIGxpYi9Db25maWcucG0gYmVjYXVzZSB0aGF0IG1pZ2h0IGJlIHdoZXJlIG1pbmlwZXJsCisgIyBpcyBjcmFzaGluZy4KKy1taW5pdGVzdDogJChNSU5JUEVSTF9FWEUpCisrbWluaXRlc3Q6CisgCS1AdGVzdCAtZiBsaWIvQ29uZmlnLnBtIHx8ICQoTUFLRSkgbGliL0NvbmZpZy5wbSAkKHVuaWRhdGFmaWxlcykKKyAJQGVjaG8gIiAiCisgCUBlY2hvICJZb3UgbWF5IHNlZSBzb21lIGlycmVsZXZhbnQgdGVzdCBmYWlsdXJlcyBpZiB5b3UgaGF2ZSBiZWVuIHVuYWJsZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGUyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xNC4yL0Nyb3NzL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9Dcm9zcy9NYWtlZmlsZQorKysrIHBlcmwtNS4xNC4yL0Nyb3NzL01ha2VmaWxlCitAQCAtMSw2ICsxLDcgQEAKKyAjIyBUb3BsZXZlbCBNYWtlZmlsZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24gb2YgcGVybAorIAorLWV4cG9ydCBUT1BESVI9JHtzaGVsbCBwd2R9Cisrb3ZlcnJpZGUgVE9QRElSPSR7c2hlbGwgcHdkfQorK2V4cG9ydCBUT1BESVIKKyBpbmNsdWRlICQoVE9QRElSKS9jb25maWcKKyBleHBvcnQgQ0ZMQUdTCisgZXhwb3J0IFNZUz0kKEFSQ0gpLSQoT1MpCitAQCAtMTAsNyArMTEsNyBAQCBleHBvcnQgT1BUSU1JWkFUSU9OID0gLU8yCisgCisgZXhwb3J0IENDID0gJChDUk9TUylnY2MKKyBleHBvcnQgQ1hYID0gJChDUk9TUylnKysKKy1leHBvcnQgTEQgPSAkKENST1NTKWxkCisrZXhwb3J0IExEID0gJChDQykKKyBleHBvcnQgU1RSSVAgPSAkKENST1NTKXN0cmlwCisgZXhwb3J0IEFSID0gJChDUk9TUylhcgorIGV4cG9ydCBSQU5MSUIgPSAkKENST1NTKXJhbmxpYgorQEAgLTMyLDE3ICszMyw2IEBAIENGTEFHUys9JChGVUxMX09QVElNSVpBVElPTikKKyBhbGw6CisgCUBlY2hvIFBsZWFzZSByZWFkIHRoZSBSRUFETUUgZmlsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyAKKy1nZW5fcGF0Y2g6CistCWRpZmYgLUJidXIgLi4vTWFrZWZpbGUuU0ggTWFrZWZpbGUuU0ggPiBNYWtlZmlsZS5TSC5wYXRjaAorLQlkaWZmIC1CYnVyIC4uL2luc3RhbGxwZXJsIGluc3RhbGxwZXJsID4gaW5zdGFsbHBlcmwucGF0Y2gKKy0KKy1wYXRjaDoKKy0JY2QgLi4gOyBpZiBbICEgLWUgLi9DUk9TU19QQVRDSEVEIF0gOyB0aGVuIFwKKy0JCXBhdGNoIC1wMSA8IENyb3NzL01ha2VmaWxlLlNILnBhdGNoOyBcCistCQlwYXRjaCAtcDEgPCBDcm9zcy9pbnN0YWxscGVybC5wYXRjaCA7IG12IGluc3RhbGxwZXJsIGluc3RhbGxwZXJsLXBhdGNoZWQ7IFwKKy0JCXNlZCAtZSAncy9YWFNUUklQWFgvJChTWVMpLycgaW5zdGFsbHBlcmwtcGF0Y2hlZCA+IGluc3RhbGxwZXJsOyBcCistCQl0b3VjaCBDUk9TU19QQVRDSEVEIDsgZmkKKy0KKyBwZXJsOgorIAlAZWNobyBQZXJsIGNyb3NzLWJ1aWxkIGRpcmVjdG9yeSBpcyAkKFRPUERJUikKKyAJQGVjaG8gVGFyZ2V0IGFyY2ggaXMgJChTWVMpCitAQCAtNTIsMTEgKzQyLDExIEBAIHBlcmw6CisgCSQoVE9QRElSKS9nZW5lcmF0ZV9jb25maWdfc2ggY29uZmlnLnNoLSQoU1lTKSA+ICQoVE9QRElSKS8uLi9jb25maWcuc2gKKyAJY2QgJChUT1BESVIpLy4uIDsgLi9Db25maWd1cmUgLVMgOyBtYWtlIGRlcGVuZCA7IG1ha2UgOyBtYWtlIG1vcmUKKyAJY2QgJChUT1BESVIpLy4uIDsgbWtkaXIgLXAgZmFrZV9jb25maWdfbGlicmFyeSA7IGNwIGxpYi9Db25maWcucG0gbGliL0NvbmZpZ19oZWF2eS5wbCBmYWtlX2NvbmZpZ19saWJyYXJ5CistCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTIgIlBFUkxSVU49L3Vzci9iaW4vcGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorLQljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUzICJQRVJMUlVOPS91c3IvYmluL3BlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKy0JY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlNCAiUEVSTFJVTj0vdXNyL2Jpbi9wZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisrCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTIgIlBFUkxSVU49aG9zdHBlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKysJY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlMyAiUEVSTFJVTj1ob3N0cGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorKwljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmU0ICJQRVJMUlVOPWhvc3RwZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisgCWNkICQoVE9QRElSKS8uLiA7IHJtIC1yZiBpbnN0YWxsX21lX2hlcmUKKy0JY2QgJChUT1BESVIpLy4uIDsgbWFrZSBpbnN0YWxsLXN0cmlwCisrIwljZCAkKFRPUERJUikvLi4gOyBtYWtlIGluc3RhbGwtc3RyaXAKKyAJY2QgJChUT1BESVIpLy4uIDsgc2ggLXggQ3Jvc3Mvd2FycAorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI1MDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gKQEAgLTAsMCArMSwxMjIxIEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBydW5uaW5nIHRoZSBDb25maWd1cmUgc2NyaXB0LiBJdCBob2xkcyBhbGwgdGhlCisjIGRlZmluaXRpb25zIGZpZ3VyZWQgb3V0IGJ5IENvbmZpZ3VyZS4gU2hvdWxkIHlvdSBtb2RpZnkgb25lIG9mIHRoZXNlIHZhbHVlcywKKyMgZG8gbm90IGZvcmdldCB0byBwcm9wYWdhdGUgeW91ciBjaGFuZ2VzIGJ5IHJ1bm5pbmcgIkNvbmZpZ3VyZSAtZGVyIi4gWW91IG1heQorIyBpbnN0ZWFkIGNob29zZSB0byBydW4gZWFjaCBvZiB0aGUgLlNIIGZpbGVzIGJ5IHlvdXJzZWxmLCBvciAiQ29uZmlndXJlIC1TIi4KKyMKKworIyBQYWNrYWdlIG5hbWUgICAgICA6IHBlcmw1CisjIFNvdXJjZSBkaXJlY3RvcnkgIDogLgorIyBDb25maWd1cmF0aW9uIHRpbWU6IFRodSBKdW4gMTggMDU6Mzc6MjcgVVRDIDIwMTUKKyMgQ29uZmlndXJlZCBieSAgICAgOiBPcGVuIEVtYmVkZGVkCisjIFRhcmdldCBzeXN0ZW0gICAgIDogbGludXggcWVtdXg4Ni02NCAzLjE5LjUteW9jdG8tc3RhbmRhcmQgIzEgc21wIHByZWVtcHQgdHVlIGp1biAxNiAwMDoyODoxNyBwZHQgMjAxNSB4ODZfNjQgZ251bGludXgKKworOiBDb25maWd1cmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK2NvbmZpZ19hcmcwPSdDb25maWd1cmUnCitjb25maWdfYXJncz0nLWRlcyAtRG9wdGltaXplPS1PMiAtRG15aG9zdG5hbWU9bG9jYWxob3N0IC1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0IC1EY2M9Z2NjIC1EY2ZfYnk9T3BlbiBFbWJlZGRlZCAtRGluc3RhbGxwcmVmaXg9QEVYRUNQUkVGSVhAIC1EcHJlZml4PUBFWEVDUFJFRklYQCAtRHZlbmRvcnByZWZpeD1ARVhFQ1BSRUZJWEAgLURzaXRlcHJlZml4PUBFWEVDUFJFRklYQCAtRG90aGVybGliZGlycz1ATElCRElSQC9wZXJsLzUuMjIuMCAtRHVzZXNocnBsaWIgLUR1c2V0aHJlYWRzIC1EdXNlaXRocmVhZHMgLUR1c2VsYXJnZWZpbGVzIC1VZF9kb3N1aWQgLURkX3NlbWN0bF9zZW11biAtVWlfZGIgLVVpX25kYm0gLVVpX2dkYm0gLURpX3NoYWRvdyAtRGlfc3lzbG9nIC1EbWFuM2V4dD0zcG0gLUR1c2VwZXJsaW8gLURpbnN0YWxsdXNyYmlucGVybCAtVWJpbmNvbXBhdDUwMDUgLVV2ZXJzaW9ub25seSAtRHBhZ2VyPUBVU1JCSU5AL2xlc3MgLWlzcicKK2NvbmZpZ19hcmdjPTI4Citjb25maWdfYXJnMT0nLWRlcycKK2NvbmZpZ19hcmcyPSctRG9wdGltaXplPS1PMicKK2NvbmZpZ19hcmczPSctRG15aG9zdG5hbWU9bG9jYWxob3N0JworY29uZmlnX2FyZzQ9Jy1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0JworY29uZmlnX2FyZzU9Jy1EY2M9Z2NjJworY29uZmlnX2FyZzY9Jy1EY2ZfYnk9T3BlbiBFbWJlZGRlZCcKK2NvbmZpZ19hcmc3PSctRGluc3RhbGxwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzg9Jy1EcHJlZml4PUBFWEVDUFJFRklYQCcKK2NvbmZpZ19hcmc5PSctRHZlbmRvcnByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnMTA9Jy1Ec2l0ZXByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnMTE9Jy1Eb3RoZXJsaWJkaXJzPUBMSUJESVJAL3BlcmwvNS4yMi4wJworY29uZmlnX2FyZzEyPSctRHVzZXNocnBsaWInCitjb25maWdfYXJnMTM9Jy1EdXNldGhyZWFkcycKK2NvbmZpZ19hcmcxND0nLUR1c2VpdGhyZWFkcycKK2NvbmZpZ19hcmcxNT0nLUR1c2VsYXJnZWZpbGVzJworY29uZmlnX2FyZzE2PSctVWRfZG9zdWlkJworY29uZmlnX2FyZzE3PSctRGRfc2VtY3RsX3NlbXVuJworY29uZmlnX2FyZzE4PSctVWlfZGInCitjb25maWdfYXJnMTk9Jy1VaV9uZGJtJworY29uZmlnX2FyZzIwPSctVWlfZ2RibScKK2NvbmZpZ19hcmcyMT0nLURpX3NoYWRvdycKK2NvbmZpZ19hcmcyMj0nLURpX3N5c2xvZycKK2NvbmZpZ19hcmcyMz0nLURtYW4zZXh0PTNwbScKK2NvbmZpZ19hcmcyND0nLUR1c2VwZXJsaW8nCitjb25maWdfYXJnMjU9Jy1EaW5zdGFsbHVzcmJpbnBlcmwnCitjb25maWdfYXJnMjY9Jy1VYmluY29tcGF0NTAwNScKK2NvbmZpZ19hcmcyNz0nLVV2ZXJzaW9ub25seScKK2NvbmZpZ19hcmcyOD0nLURwYWdlcj1AVVNSQklOQC9sZXNzIC1pc3InCisKK0F1dGhvcj0nJworRGF0ZT0nJworSGVhZGVyPScnCitJZD0nJworTG9ja2VyPScnCitMb2c9JycKK1JDU2ZpbGU9JycKK1JldmlzaW9uPScnCitTb3VyY2U9JycKK1N0YXRlPScnCitfYT0nLmEnCitfZXhlPScnCitfbz0nLm8nCithZnM9J2ZhbHNlJworYWZzcm9vdD0nL2FmcycKK2FsaWduYnl0ZXM9JzgnCithbnNpMmtucj0nJworYXBob3N0bmFtZT0nJworYXBpX3JldmlzaW9uPSc1JworYXBpX3N1YnZlcnNpb249JzAnCithcGlfdmVyc2lvbj0nMjInCithcGlfdmVyc2lvbnN0cmluZz0nNS4yMi4wJworYXI9J2FyJworYXJjaGxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2hsaWJleHA9J0BTVEFHSU5HRElSQEBMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNobGliX2V4cD0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2huYW1lNjQ9JycKK2FyY2huYW1lPSdAQVJDSEAtdGhyZWFkLW11bHRpJworYXJjaG9ianM9JycKK2FzY3RpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfU0InCithd2s9J2F3aycKK2Jhc2VyZXY9JzUuMCcKK2Jhc2g9JycKK2Jpbj0nQFVTUkJJTkAnCitiaW5fRUxGPSdkZWZpbmUnCitiaW5leHA9J0BVU1JCSU5AJworYmlzb249J2Jpc29uJworYnlhY2M9J2J5YWNjJworYz0nJworY2FzdGZsYWdzPScwJworY2F0PSdjYXQnCitjYz0nZ2NjJworY2NjZGxmbGFncz0nLWZQSUMnCitjY2RsZmxhZ3M9Jy1XbCwtRSAtV2wsLXJwYXRoLEBMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGkvQ09SRScKK2NjZmxhZ3M9Jy1EX1JFRU5UUkFOVCAtRF9HTlVfU09VUkNFIC1md3JhcHYgLWZuby1zdHJpY3QtYWxpYXNpbmcgLXBpcGUgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EX0ZPUlRJRllfU09VUkNFPTInCitjY2ZsYWdzX3VzZWxhcmdlZmlsZXM9Jy1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCcKK2NjbmFtZT0nZ2NjJworY2NzeW1ib2xzPScnCitjY3ZlcnNpb249JycKK2NmX2J5PSdPcGVuIEVtYmVkZGVkJworY2ZfZW1haWw9J09wZW4gRW1iZWRkZWRAbG9jYWxob3N0LmxvY2FsZG9tYWluJworY2ZfdGltZT0nVGh1IEp1biAxOCAwNTozNzoyNyBVVEMgMjAxNScKK2NoYXJiaXRzPSc4JworY2hhcnNpemU9JzEnCitjaGdycD0nJworY2htb2Q9J2NobW9kJworY2hvd249JycKK2Nsb2NrdHlwZT0nY2xvY2tfdCcKK2NvbW09J2NvbW0nCitjb21wcmVzcz0nJworY29udGFpbnM9J2dyZXAnCitjcD0nY3AnCitjcGlvPScnCitjcHA9J2NwcCcKK2NwcF9zdHVmZj0nNDInCitjcHBjY3N5bWJvbHM9JycKK2NwcGZsYWdzPSctRF9SRUVOVFJBTlQgLURfR05VX1NPVVJDRSAtZndyYXB2IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlJworY3BwbGFzdD0nLScKK2NwcG1pbnVzPSctJworY3BwcnVuPSdnY2MgIC1FJworY3Bwc3RkaW49J2djYyAgLUUnCitjcnlwdF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9DQ1MnCitjcnlwdGxpYj0nJworY3NoPSdjc2gnCitjdGVybWlkX3JfcHJvdG89JzAnCitjdGltZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9TQicKK2RfR2NvbnZlcnQ9J2djdnQoKHgpLChuKSwoYikpJworZF9QUklFVWxkYmw9J2RlZmluZScKK2RfUFJJRlVsZGJsPSdkZWZpbmUnCitkX1BSSUdVbGRibD0nZGVmaW5lJworZF9QUklYVTY0PSdkZWZpbmUnCitkX1BSSWQ2ND0nZGVmaW5lJworZF9QUkllbGRibD0nZGVmaW5lJworZF9QUklmbGRibD0nZGVmaW5lJworZF9QUklnbGRibD0nZGVmaW5lJworZF9QUklpNjQ9J2RlZmluZScKK2RfUFJJbzY0PSdkZWZpbmUnCitkX1BSSXU2ND0nZGVmaW5lJworZF9QUkl4NjQ9J2RlZmluZScKK2RfU0NOZmxkYmw9J2RlZmluZScKK2RfX2Z3YWxrPSd1bmRlZicKK2RfYWNjZXNzPSdkZWZpbmUnCitkX2FjY2Vzc3g9J3VuZGVmJworZF9hY29zaD0nZGVmaW5lJworZF9haW50bD0ndW5kZWYnCitkX2FsYXJtPSdkZWZpbmUnCitkX2FyY2hsaWI9J2RlZmluZScKK2RfYXNjdGltZTY0PSd1bmRlZicKK2RfYXNjdGltZV9yPSdkZWZpbmUnCitkX2FzaW5oPSdkZWZpbmUnCitkX2F0YW5oPSdkZWZpbmUnCitkX2F0b2xmPSd1bmRlZicKK2RfYXRvbGw9J2RlZmluZScKK2RfYXR0cmlidXRlX2RlcHJlY2F0ZWQ9J2RlZmluZScKK2RfYXR0cmlidXRlX2Zvcm1hdD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfbWFsbG9jPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9ub25udWxsPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9ub3JldHVybj0nZGVmaW5lJworZF9hdHRyaWJ1dGVfcHVyZT0nZGVmaW5lJworZF9hdHRyaWJ1dGVfdW51c2VkPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHQ9J2RlZmluZScKK2RfYmFja3RyYWNlPSdkZWZpbmUnCitkX2JjbXA9J2RlZmluZScKK2RfYmNvcHk9J2RlZmluZScKK2RfYnNkPSd1bmRlZicKK2RfYnNkZ2V0cGdycD0ndW5kZWYnCitkX2JzZHNldHBncnA9J3VuZGVmJworZF9idWlsdGluX2Nob29zZV9leHByPSdkZWZpbmUnCitkX2J1aWx0aW5fZXhwZWN0PSdkZWZpbmUnCitkX2J6ZXJvPSdkZWZpbmUnCitkX2M5OV92YXJpYWRpY19tYWNyb3M9J2RlZmluZScKK2RfY2FzdGkzMj0nZGVmaW5lJworZF9jYXN0bmVnPSdkZWZpbmUnCitkX2NicnQ9J2RlZmluZScKK2RfY2hhcnZzcHI9J3VuZGVmJworZF9jaG93bj0nZGVmaW5lJworZF9jaHJvb3Q9J2RlZmluZScKK2RfY2hzaXplPSd1bmRlZicKK2RfY2xhc3M9J3VuZGVmJworZF9jbGVhcmVudj0nZGVmaW5lJworZF9jbG9zZWRpcj0nZGVmaW5lJworZF9jbXNnaGRyX3M9J2RlZmluZScKK2RfY29uc3Q9J2RlZmluZScKK2RfY29weXNpZ249J2RlZmluZScKK2RfY29weXNpZ25sPSdkZWZpbmUnCitkX2NwbHVzcGx1cz0ndW5kZWYnCitkX2NyeXB0PSdkZWZpbmUnCitkX2NyeXB0X3I9J2RlZmluZScKK2RfY3NoPSd1bmRlZicKK2RfY3Rlcm1pZD0nZGVmaW5lJworZF9jdGVybWlkX3I9J3VuZGVmJworZF9jdGltZTY0PSd1bmRlZicKK2RfY3RpbWVfcj0nZGVmaW5lJworZF9jdXNlcmlkPSdkZWZpbmUnCitkX2RibF9kaWc9J2RlZmluZScKK2RfZGJtaW5pdHByb3RvPSdkZWZpbmUnCitkX2RpZmZ0aW1lNjQ9J3VuZGVmJworZF9kaWZmdGltZT0nZGVmaW5lJworZF9kaXJfZGRfZmQ9J3VuZGVmJworZF9kaXJmZD0nZGVmaW5lJworZF9kaXJuYW1sZW49J3VuZGVmJworZF9kbGFkZHI9J2RlZmluZScKK2RfZGxlcnJvcj0nZGVmaW5lJworZF9kbG9wZW49J2RlZmluZScKK2RfZGxzeW11bj0ndW5kZWYnCitkX2Rvc3VpZD0ndW5kZWYnCitkX2RyYW5kNDhfcj0nZGVmaW5lJworZF9kcmFuZDQ4cHJvdG89J2RlZmluZScKK2RfZHVwMj0nZGVmaW5lJworZF9lYWNjZXNzPSdkZWZpbmUnCitkX2VuZGdyZW50PSdkZWZpbmUnCitkX2VuZGdyZW50X3I9J3VuZGVmJworZF9lbmRoZW50PSdkZWZpbmUnCitkX2VuZGhvc3RlbnRfcj0ndW5kZWYnCitkX2VuZG5lbnQ9J2RlZmluZScKK2RfZW5kbmV0ZW50X3I9J3VuZGVmJworZF9lbmRwZW50PSdkZWZpbmUnCitkX2VuZHByb3RvZW50X3I9J3VuZGVmJworZF9lbmRwd2VudD0nZGVmaW5lJworZF9lbmRwd2VudF9yPSd1bmRlZicKK2RfZW5kc2VudD0nZGVmaW5lJworZF9lbmRzZXJ2ZW50X3I9J3VuZGVmJworZF9lb2ZuYmxrPSdkZWZpbmUnCitkX2VyZj0nZGVmaW5lJworZF9lcmZjPSdkZWZpbmUnCitkX2V1bmljZT0ndW5kZWYnCitkX2V4cDI9J2RlZmluZScKK2RfZXhwbTE9J2RlZmluZScKK2RfZmFzdHN0ZGlvPSd1bmRlZicKK2RfZmNoZGlyPSdkZWZpbmUnCitkX2ZjaG1vZD0nZGVmaW5lJworZF9mY2hvd249J2RlZmluZScKK2RfZmNudGw9J2RlZmluZScKK2RfZmNudGxfY2FuX2xvY2s9J2RlZmluZScKK2RfZmRfbWFjcm9zPSdkZWZpbmUnCitkX2ZkX3NldD0nZGVmaW5lJworZF9mZGltPSdkZWZpbmUnCitkX2Zkc19iaXRzPSdkZWZpbmUnCitkX2ZlZ2V0cm91bmQ9J2RlZmluZScKK2RfZmdldHBvcz0nZGVmaW5lJworZF9maW5pdGU9J2RlZmluZScKK2RfZmluaXRlbD0nZGVmaW5lJworZF9mbGV4Zm5hbT0nZGVmaW5lJworZF9mbG9jaz0nZGVmaW5lJworZF9mbG9ja3Byb3RvPSdkZWZpbmUnCitkX2ZtYT0nZGVmaW5lJworZF9mbWF4PSdkZWZpbmUnCitkX2ZtaW49J2RlZmluZScKK2RfZm9yaz0nZGVmaW5lJworZF9mcF9jbGFzcz0ndW5kZWYnCitkX2ZwX2NsYXNzaWZ5PSd1bmRlZicKK2RfZnBfY2xhc3NsPSd1bmRlZicKK2RfZnBhdGhjb25mPSdkZWZpbmUnCitkX2ZwY2xhc3M9J3VuZGVmJworZF9mcGNsYXNzaWZ5PSdkZWZpbmUnCitkX2ZwY2xhc3NsPSd1bmRlZicKK2RfZnBnZXRyb3VuZD0ndW5kZWYnCitkX2Zwb3M2NF90PSd1bmRlZicKK2RfZnJleHBsPSdkZWZpbmUnCitkX2ZzX2RhdGFfcz0ndW5kZWYnCitkX2ZzZWVrbz0nZGVmaW5lJworZF9mc2V0cG9zPSdkZWZpbmUnCitkX2ZzdGF0ZnM9J2RlZmluZScKK2RfZnN0YXR2ZnM9J2RlZmluZScKK2RfZnN5bmM9J2RlZmluZScKK2RfZnRlbGxvPSdkZWZpbmUnCitkX2Z0aW1lPSd1bmRlZicKK2RfZnV0aW1lcz0nZGVmaW5lJworZF9nZGJtX25kYm1faF91c2VzX3Byb3RvdHlwZXM9J3VuZGVmJworZF9nZGJtbmRibV9oX3VzZXNfcHJvdG90eXBlcz0nZGVmaW5lJworZF9nZXRhZGRyaW5mbz0nZGVmaW5lJworZF9nZXRjd2Q9J2RlZmluZScKK2RfZ2V0ZXNwd25hbT0ndW5kZWYnCitkX2dldGZzc3RhdD0ndW5kZWYnCitkX2dldGdyZW50PSdkZWZpbmUnCitkX2dldGdyZW50X3I9J2RlZmluZScKK2RfZ2V0Z3JnaWRfcj0nZGVmaW5lJworZF9nZXRncm5hbV9yPSdkZWZpbmUnCitkX2dldGdycHM9J2RlZmluZScKK2RfZ2V0aGJ5YWRkcj0nZGVmaW5lJworZF9nZXRoYnluYW1lPSdkZWZpbmUnCitkX2dldGhlbnQ9J2RlZmluZScKK2RfZ2V0aG5hbWU9J2RlZmluZScKK2RfZ2V0aG9zdGJ5YWRkcl9yPSdkZWZpbmUnCitkX2dldGhvc3RieW5hbWVfcj0nZGVmaW5lJworZF9nZXRob3N0ZW50X3I9J2RlZmluZScKK2RfZ2V0aG9zdHByb3Rvcz0nZGVmaW5lJworZF9nZXRpdGltZXI9J2RlZmluZScKK2RfZ2V0bG9naW49J2RlZmluZScKK2RfZ2V0bG9naW5fcj0nZGVmaW5lJworZF9nZXRtbnQ9J3VuZGVmJworZF9nZXRtbnRlbnQ9J2RlZmluZScKK2RfZ2V0bmFtZWluZm89J2RlZmluZScKK2RfZ2V0bmJ5YWRkcj0nZGVmaW5lJworZF9nZXRuYnluYW1lPSdkZWZpbmUnCitkX2dldG5lbnQ9J2RlZmluZScKK2RfZ2V0bmV0YnlhZGRyX3I9J2RlZmluZScKK2RfZ2V0bmV0YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0bmV0ZW50X3I9J2RlZmluZScKK2RfZ2V0bmV0cHJvdG9zPSdkZWZpbmUnCitkX2dldHBhZ3N6PSdkZWZpbmUnCitkX2dldHBieW5hbWU9J2RlZmluZScKK2RfZ2V0cGJ5bnVtYmVyPSdkZWZpbmUnCitkX2dldHBlbnQ9J2RlZmluZScKK2RfZ2V0cGdpZD0nZGVmaW5lJworZF9nZXRwZ3JwMj0ndW5kZWYnCitkX2dldHBncnA9J2RlZmluZScKK2RfZ2V0cHBpZD0nZGVmaW5lJworZF9nZXRwcmlvcj0nZGVmaW5lJworZF9nZXRwcm90b2J5bmFtZV9yPSdkZWZpbmUnCitkX2dldHByb3RvYnludW1iZXJfcj0nZGVmaW5lJworZF9nZXRwcm90b2VudF9yPSdkZWZpbmUnCitkX2dldHByb3RvcHJvdG9zPSdkZWZpbmUnCitkX2dldHBycHduYW09J3VuZGVmJworZF9nZXRwd2VudD0nZGVmaW5lJworZF9nZXRwd2VudF9yPSdkZWZpbmUnCitkX2dldHB3bmFtX3I9J2RlZmluZScKK2RfZ2V0cHd1aWRfcj0nZGVmaW5lJworZF9nZXRzYnluYW1lPSdkZWZpbmUnCitkX2dldHNieXBvcnQ9J2RlZmluZScKK2RfZ2V0c2VudD0nZGVmaW5lJworZF9nZXRzZXJ2YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0c2VydmJ5cG9ydF9yPSdkZWZpbmUnCitkX2dldHNlcnZlbnRfcj0nZGVmaW5lJworZF9nZXRzZXJ2cHJvdG9zPSdkZWZpbmUnCitkX2dldHNwbmFtPSdkZWZpbmUnCitkX2dldHNwbmFtX3I9J2RlZmluZScKK2RfZ2V0dGltZW9kPSdkZWZpbmUnCitkX2dtdGltZTY0PSd1bmRlZicKK2RfZ210aW1lX3I9J2RlZmluZScKK2RfZ251bGliYz0nZGVmaW5lJworZF9ncnBhc3N3ZD0nZGVmaW5lJworZF9oYXNtbnRvcHQ9J2RlZmluZScKK2RfaHRvbmw9J2RlZmluZScKK2RfaHlwb3Q9J2RlZmluZScKK2RfaWxvZ2I9J2RlZmluZScKK2RfaWxvZ2JsPSdkZWZpbmUnCitkX2luY192ZXJzaW9uX2xpc3Q9J3VuZGVmJworZF9pbmRleD0ndW5kZWYnCitkX2luZXRhdG9uPSdkZWZpbmUnCitkX2luZXRudG9wPSdkZWZpbmUnCitkX2luZXRwdG9uPSdkZWZpbmUnCitkX2ludDY0X3Q9J2RlZmluZScKK2RfaXBfbXJlcT0nZGVmaW5lJworZF9pcF9tcmVxX3NvdXJjZT0nZGVmaW5lJworZF9pcHY2X21yZXE9J2RlZmluZScKK2RfaXB2Nl9tcmVxX3NvdXJjZT0ndW5kZWYnCitkX2lzYXNjaWk9J2RlZmluZScKK2RfaXNibGFuaz0nZGVmaW5lJworZF9pc2Zpbml0ZT0nZGVmaW5lJworZF9pc2Zpbml0ZWw9J3VuZGVmJworZF9pc2luZj0nZGVmaW5lJworZF9pc2luZmw9J2RlZmluZScKK2RfaXNsZXNzPSd1bmRlZicKK2RfaXNuYW49J2RlZmluZScKK2RfaXNuYW5sPSdkZWZpbmUnCitkX2lzbm9ybWFsPSdkZWZpbmUnCitkX2owPSdkZWZpbmUnCitkX2owbD0nZGVmaW5lJworZF9raWxscGc9J2RlZmluZScKK2RfbGNfbW9uZXRhcnlfMjAwOD0nZGVmaW5lJworZF9sY2hvd249J2RlZmluZScKK2RfbGRibF9kaWc9J2RlZmluZScKK2RfbGRleHBsPSdkZWZpbmUnCitkX2xnYW1tYT0nZGVmaW5lJworZF9sZ2FtbWFfcj0nZGVmaW5lJworZF9saWJtX2xpYl92ZXJzaW9uPSdkZWZpbmUnCitkX2xpYm5hbWVfdW5pcXVlPSd1bmRlZicKK2RfbGluaz0nZGVmaW5lJworZF9sbHJpbnQ9J2RlZmluZScKK2RfbGxyaW50bD0nZGVmaW5lJworZF9sbHJvdW5kPSdkZWZpbmUnCitkX2xscm91bmRsPSdkZWZpbmUnCitkX2xvY2FsdGltZTY0PSd1bmRlZicKK2RfbG9jYWx0aW1lX3I9J2RlZmluZScKK2RfbG9jYWx0aW1lX3JfbmVlZHNfdHpzZXQ9J2RlZmluZScKK2RfbG9jY29udj0nZGVmaW5lJworZF9sb2NrZj0nZGVmaW5lJworZF9sb2cxcD0nZGVmaW5lJworZF9sb2cyPSdkZWZpbmUnCitkX2xvZ2I9J2RlZmluZScKK2RfbG9uZ2RibD0nZGVmaW5lJworZF9sb25nbG9uZz0nZGVmaW5lJworZF9scmludD0nZGVmaW5lJworZF9scmludGw9J2RlZmluZScKK2RfbHJvdW5kPSdkZWZpbmUnCitkX2xyb3VuZGw9J2RlZmluZScKK2RfbHNlZWtwcm90bz0nZGVmaW5lJworZF9sc3RhdD0nZGVmaW5lJworZF9tYWR2aXNlPSdkZWZpbmUnCitkX21hbGxvY19nb29kX3NpemU9J3VuZGVmJworZF9tYWxsb2Nfc2l6ZT0ndW5kZWYnCitkX21ibGVuPSdkZWZpbmUnCitkX21ic3Rvd2NzPSdkZWZpbmUnCitkX21idG93Yz0nZGVmaW5lJworZF9tZW1jaHI9J2RlZmluZScKK2RfbWVtY21wPSdkZWZpbmUnCitkX21lbWNweT0nZGVmaW5lJworZF9tZW1tb3ZlPSdkZWZpbmUnCitkX21lbXNldD0nZGVmaW5lJworZF9ta2Rpcj0nZGVmaW5lJworZF9ta2R0ZW1wPSdkZWZpbmUnCitkX21rZmlmbz0nZGVmaW5lJworZF9ta3N0ZW1wPSdkZWZpbmUnCitkX21rc3RlbXBzPSdkZWZpbmUnCitkX21rdGltZTY0PSd1bmRlZicKK2RfbWt0aW1lPSdkZWZpbmUnCitkX21tYXA9J2RlZmluZScKK2RfbW9kZmw9J2RlZmluZScKK2RfbW9kZmxfcG93MzJfYnVnPSd1bmRlZicKK2RfbW9kZmxwcm90bz0nZGVmaW5lJworZF9tcHJvdGVjdD0nZGVmaW5lJworZF9tc2c9J2RlZmluZScKK2RfbXNnX2N0cnVuYz0nZGVmaW5lJworZF9tc2dfZG9udHJvdXRlPSdkZWZpbmUnCitkX21zZ19vb2I9J2RlZmluZScKK2RfbXNnX3BlZWs9J2RlZmluZScKK2RfbXNnX3Byb3h5PSdkZWZpbmUnCitkX21zZ2N0bD0nZGVmaW5lJworZF9tc2dnZXQ9J2RlZmluZScKK2RfbXNnaGRyX3M9J2RlZmluZScKK2RfbXNncmN2PSdkZWZpbmUnCitkX21zZ3NuZD0nZGVmaW5lJworZF9tc3luYz0nZGVmaW5lJworZF9tdW5tYXA9J2RlZmluZScKK2RfbXltYWxsb2M9J3VuZGVmJworZF9uYW49J2RlZmluZScKK2RfbmRibT0nZGVmaW5lJworZF9uZGJtX2hfdXNlc19wcm90b3R5cGVzPSd1bmRlZicKK2RfbmVhcmJ5aW50PSdkZWZpbmUnCitkX25leHRhZnRlcj0nZGVmaW5lJworZF9uZXh0dG93YXJkPSdkZWZpbmUnCitkX25pY2U9J2RlZmluZScKK2RfbmxfbGFuZ2luZm89J2RlZmluZScKK2RfbnZfcHJlc2VydmVzX3V2PSd1bmRlZicKK2RfbnZfemVyb19pc19hbGxiaXRzX3plcm89J2RlZmluZScKK2Rfb2ZmNjRfdD0nZGVmaW5lJworZF9vbGRfcHRocmVhZF9jcmVhdGVfam9pbmFibGU9J3VuZGVmJworZF9vbGRwdGhyZWFkcz0ndW5kZWYnCitkX29sZHNvY2s9J3VuZGVmJworZF9vcGVuMz0nZGVmaW5lJworZF9wYXRoY29uZj0nZGVmaW5lJworZF9wYXVzZT0nZGVmaW5lJworZF9wZXJsX290aGVybGliZGlycz0nZGVmaW5lJworZF9waG9zdG5hbWU9J3VuZGVmJworZF9waXBlPSdkZWZpbmUnCitkX3BvbGw9J2RlZmluZScKK2RfcG9ydGFibGU9J2RlZmluZScKK2RfcHJjdGw9J2RlZmluZScKK2RfcHJjdGxfc2V0X25hbWU9J2RlZmluZScKK2RfcHJpbnRmX2Zvcm1hdF9udWxsPSd1bmRlZicKK2RfcHJvY3NlbGZleGU9J2RlZmluZScKK2RfcHNldWRvZm9yaz0ndW5kZWYnCitkX3B0aHJlYWRfYXRmb3JrPSdkZWZpbmUnCitkX3B0aHJlYWRfYXR0cl9zZXRzY29wZT0nZGVmaW5lJworZF9wdGhyZWFkX3lpZWxkPSdkZWZpbmUnCitkX3B0cmRpZmZfdD0nZGVmaW5lJworZF9wd2FnZT0ndW5kZWYnCitkX3B3Y2hhbmdlPSd1bmRlZicKK2RfcHdjbGFzcz0ndW5kZWYnCitkX3B3Y29tbWVudD0ndW5kZWYnCitkX3B3ZXhwaXJlPSd1bmRlZicKK2RfcHdnZWNvcz0nZGVmaW5lJworZF9wd3Bhc3N3ZD0nZGVmaW5lJworZF9wd3F1b3RhPSd1bmRlZicKK2RfcWdjdnQ9J2RlZmluZScKK2RfcXVhZD0nZGVmaW5lJworZF9yYW5kb21fcj0nZGVmaW5lJworZF9yZV9jb21wPSd1bmRlZicKK2RfcmVhZGRpcjY0X3I9J2RlZmluZScKK2RfcmVhZGRpcj0nZGVmaW5lJworZF9yZWFkZGlyX3I9J2RlZmluZScKK2RfcmVhZGxpbms9J2RlZmluZScKK2RfcmVhZHY9J2RlZmluZScKK2RfcmVjdm1zZz0nZGVmaW5lJworZF9yZWdjbXA9J3VuZGVmJworZF9yZWdjb21wPSdkZWZpbmUnCitkX3JlbWFpbmRlcj0nZGVmaW5lJworZF9yZW1xdW89J2RlZmluZScKK2RfcmVuYW1lPSdkZWZpbmUnCitkX3Jld2luZGRpcj0nZGVmaW5lJworZF9yaW50PSdkZWZpbmUnCitkX3JtZGlyPSdkZWZpbmUnCitkX3JvdW5kPSdkZWZpbmUnCitkX3NhZmViY3B5PSd1bmRlZicKK2Rfc2FmZW1jcHk9J3VuZGVmJworZF9zYW5lbWNtcD0nZGVmaW5lJworZF9zYnJrcHJvdG89J2RlZmluZScKK2Rfc2NhbGJuPSdkZWZpbmUnCitkX3NjYWxibmw9J2RlZmluZScKK2Rfc2NoZWRfeWllbGQ9J2RlZmluZScKK2Rfc2NtX3JpZ2h0cz0nZGVmaW5lJworZF9zZWVrZGlyPSdkZWZpbmUnCitkX3NlbGVjdD0nZGVmaW5lJworZF9zZW09J2RlZmluZScKK2Rfc2VtY3RsPSdkZWZpbmUnCitkX3NlbWN0bF9zZW1pZF9kcz0nZGVmaW5lJworZF9zZW1jdGxfc2VtdW49J2RlZmluZScKK2Rfc2VtZ2V0PSdkZWZpbmUnCitkX3NlbW9wPSdkZWZpbmUnCitkX3NlbmRtc2c9J2RlZmluZScKK2Rfc2V0ZWdpZD0nZGVmaW5lJworZF9zZXRldWlkPSdkZWZpbmUnCitkX3NldGdyZW50PSdkZWZpbmUnCitkX3NldGdyZW50X3I9J3VuZGVmJworZF9zZXRncnBzPSdkZWZpbmUnCitkX3NldGhlbnQ9J2RlZmluZScKK2Rfc2V0aG9zdGVudF9yPSd1bmRlZicKK2Rfc2V0aXRpbWVyPSdkZWZpbmUnCitkX3NldGxpbmVidWY9J2RlZmluZScKK2Rfc2V0bG9jYWxlPSdkZWZpbmUnCitkX3NldGxvY2FsZV9yPSd1bmRlZicKK2Rfc2V0bmVudD0nZGVmaW5lJworZF9zZXRuZXRlbnRfcj0ndW5kZWYnCitkX3NldHBlbnQ9J2RlZmluZScKK2Rfc2V0cGdpZD0nZGVmaW5lJworZF9zZXRwZ3JwMj0ndW5kZWYnCitkX3NldHBncnA9J2RlZmluZScKK2Rfc2V0cHJpb3I9J2RlZmluZScKK2Rfc2V0cHJvY3RpdGxlPSd1bmRlZicKK2Rfc2V0cHJvdG9lbnRfcj0ndW5kZWYnCitkX3NldHB3ZW50PSdkZWZpbmUnCitkX3NldHB3ZW50X3I9J3VuZGVmJworZF9zZXRyZWdpZD0nZGVmaW5lJworZF9zZXRyZXNnaWQ9J2RlZmluZScKK2Rfc2V0cmVzdWlkPSdkZWZpbmUnCitkX3NldHJldWlkPSdkZWZpbmUnCitkX3NldHJnaWQ9J3VuZGVmJworZF9zZXRydWlkPSd1bmRlZicKK2Rfc2V0c2VudD0nZGVmaW5lJworZF9zZXRzZXJ2ZW50X3I9J3VuZGVmJworZF9zZXRzaWQ9J2RlZmluZScKK2Rfc2V0dmJ1Zj0nZGVmaW5lJworZF9zaG09J2RlZmluZScKK2Rfc2htYXQ9J2RlZmluZScKK2Rfc2htYXRwcm90b3R5cGU9J2RlZmluZScKK2Rfc2htY3RsPSdkZWZpbmUnCitkX3NobWR0PSdkZWZpbmUnCitkX3NobWdldD0nZGVmaW5lJworZF9zaWdhY3Rpb249J2RlZmluZScKK2Rfc2lnbmJpdD0nZGVmaW5lJworZF9zaWdwcm9jbWFzaz0nZGVmaW5lJworZF9zaWdzZXRqbXA9J2RlZmluZScKK2Rfc2luNl9zY29wZV9pZD0nZGVmaW5lJworZF9zaXRlYXJjaD0nZGVmaW5lJworZF9zbnByaW50Zj0nZGVmaW5lJworZF9zb2NrYWRkcl9pbjY9J2RlZmluZScKK2Rfc29ja2FkZHJfc2FfbGVuPSd1bmRlZicKK2Rfc29ja2F0bWFyaz0nZGVmaW5lJworZF9zb2NrYXRtYXJrcHJvdG89J2RlZmluZScKK2Rfc29ja2V0PSdkZWZpbmUnCitkX3NvY2tsZW5fdD0nZGVmaW5lJworZF9zb2NrcGFpcj0nZGVmaW5lJworZF9zb2NrczVfaW5pdD0ndW5kZWYnCitkX3NwcmludGZfcmV0dXJuc19zdHJsZW49J2RlZmluZScKK2Rfc3FydGw9J2RlZmluZScKK2Rfc3JhbmQ0OF9yPSdkZWZpbmUnCitkX3NyYW5kb21fcj0nZGVmaW5lJworZF9zcmVzZ3Byb3RvPSdkZWZpbmUnCitkX3NyZXN1cHJvdG89J2RlZmluZScKK2Rfc3RhdD0nZGVmaW5lJworZF9zdGF0Ymxrcz0nZGVmaW5lJworZF9zdGF0ZnNfZl9mbGFncz0nZGVmaW5lJworZF9zdGF0ZnNfcz0nZGVmaW5lJworZF9zdGF0aWNfaW5saW5lPSdkZWZpbmUnCitkX3N0YXR2ZnM9J2RlZmluZScKK2Rfc3RkaW9fY250X2x2YWw9J3VuZGVmJworZF9zdGRpb19wdHJfbHZhbD0ndW5kZWYnCitkX3N0ZGlvX3B0cl9sdmFsX25vY2hhbmdlX2NudD0ndW5kZWYnCitkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PSd1bmRlZicKK2Rfc3RkaW9fc3RyZWFtX2FycmF5PSd1bmRlZicKK2Rfc3RkaW9iYXNlPSd1bmRlZicKK2Rfc3Rkc3RkaW89J3VuZGVmJworZF9zdHJjaHI9J2RlZmluZScKK2Rfc3RyY29sbD0nZGVmaW5lJworZF9zdHJjdGNweT0nZGVmaW5lJworZF9zdHJlcnJtPSdzdHJlcnJvcihlKScKK2Rfc3RyZXJyb3I9J2RlZmluZScKK2Rfc3RyZXJyb3Jfcj0nZGVmaW5lJworZF9zdHJmdGltZT0nZGVmaW5lJworZF9zdHJsY2F0PSd1bmRlZicKK2Rfc3RybGNweT0ndW5kZWYnCitkX3N0cnRvZD0nZGVmaW5lJworZF9zdHJ0b2w9J2RlZmluZScKK2Rfc3RydG9sZD0nZGVmaW5lJworZF9zdHJ0b2xsPSdkZWZpbmUnCitkX3N0cnRvcT0nZGVmaW5lJworZF9zdHJ0b3VsPSdkZWZpbmUnCitkX3N0cnRvdWxsPSdkZWZpbmUnCitkX3N0cnRvdXE9J2RlZmluZScKK2Rfc3RyeGZybT0nZGVmaW5lJworZF9zdWlkc2FmZT0ndW5kZWYnCitkX3N5bWxpbms9J2RlZmluZScKK2Rfc3lzY2FsbD0nZGVmaW5lJworZF9zeXNjYWxscHJvdG89J2RlZmluZScKK2Rfc3lzY29uZj0nZGVmaW5lJworZF9zeXNlcm5sc3Q9JycKK2Rfc3lzZXJybHN0PSdkZWZpbmUnCitkX3N5c3RlbT0nZGVmaW5lJworZF90Y2dldHBncnA9J2RlZmluZScKK2RfdGNzZXRwZ3JwPSdkZWZpbmUnCitkX3RlbGxkaXI9J2RlZmluZScKK2RfdGVsbGRpcnByb3RvPSdkZWZpbmUnCitkX3RnYW1tYT0nZGVmaW5lJworZF90aW1lPSdkZWZpbmUnCitkX3RpbWVnbT0nZGVmaW5lJworZF90aW1lcz0nZGVmaW5lJworZF90bV90bV9nbXRvZmY9J2RlZmluZScKK2RfdG1fdG1fem9uZT0nZGVmaW5lJworZF90bXBuYW1fcj0nZGVmaW5lJworZF90cnVuYz0nZGVmaW5lJworZF90cnVuY2F0ZT0nZGVmaW5lJworZF90cnVuY2w9J2RlZmluZScKK2RfdHR5bmFtZV9yPSdkZWZpbmUnCitkX3R6bmFtZT0nZGVmaW5lJworZF91MzJhbGlnbj0nZGVmaW5lJworZF91YWxhcm09J2RlZmluZScKK2RfdW1hc2s9J2RlZmluZScKK2RfdW5hbWU9J2RlZmluZScKK2RfdW5pb25fc2VtdW49J3VuZGVmJworZF91bm9yZGVyZWQ9J3VuZGVmJworZF91bnNldGVudj0nZGVmaW5lJworZF91c2xlZXA9J2RlZmluZScKK2RfdXNsZWVwcHJvdG89J2RlZmluZScKK2RfdXN0YXQ9J2RlZmluZScKK2RfdmVuZG9yYXJjaD0nZGVmaW5lJworZF92ZW5kb3JiaW49J2RlZmluZScKK2RfdmVuZG9ybGliPSdkZWZpbmUnCitkX3ZlbmRvcnNjcmlwdD0nZGVmaW5lJworZF92Zm9yaz0ndW5kZWYnCitkX3ZvaWRfY2xvc2VkaXI9J3VuZGVmJworZF92b2lkc2lnPSdkZWZpbmUnCitkX3ZvaWR0dHk9JycKK2Rfdm9sYXRpbGU9J2RlZmluZScKK2RfdnByaW50Zj0nZGVmaW5lJworZF92c25wcmludGY9J2RlZmluZScKK2Rfd2FpdDQ9J2RlZmluZScKK2Rfd2FpdHBpZD0nZGVmaW5lJworZF93Y3NjbXA9J2RlZmluZScKK2Rfd2NzdG9tYnM9J2RlZmluZScKK2Rfd2NzeGZybT0nZGVmaW5lJworZF93Y3RvbWI9J2RlZmluZScKK2Rfd3JpdGV2PSdkZWZpbmUnCitkX3hlbml4PSd1bmRlZicKK2RhdGU9J2RhdGUnCitkYl9oYXNodHlwZT0ndV9pbnQzMl90JworZGJfcHJlZml4dHlwZT0nc2l6ZV90JworZGJfdmVyc2lvbl9tYWpvcj0nJworZGJfdmVyc2lvbl9taW5vcj0nJworZGJfdmVyc2lvbl9wYXRjaD0nJworZGlyZW50cnl0eXBlPSdzdHJ1Y3QgZGlyZW50JworZGxleHQ9J3NvJworZGxzcmM9J2RsX2Rsb3Blbi54cycKK2RvdWJsZWtpbmQ9JzMnCitkb3VibGVzaXplPSc4JworZHJhbmQwMT0nUGVybF9kcmFuZDQ4KCknCitkcmFuZDQ4X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NUJworZHRyYWNlPScnCitkeW5hbWljX2V4dD0nQiBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ3dkIERhdGEvRHVtcGVyIERldmVsL1BQUG9ydCBEZXZlbC9QZWVrIERpZ2VzdC9NRDUgRGlnZXN0L1NIQSBFbmNvZGUgRmNudGwgRmlsZS9Eb3NHbG9iIEZpbGUvR2xvYiBGaWx0ZXIvVXRpbC9DYWxsIEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vTGFuZ2luZm8gSU8gSVBDL1N5c1YgTGlzdC9VdGlsIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE5EQk1fRmlsZSBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBlcmxJTy9lbmNvZGluZyBQZXJsSU8vbW1hcCBQZXJsSU8vc2NhbGFyIFBlcmxJTy92aWEgU0RCTV9GaWxlIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUaWUvSGFzaC9OYW1lZENhcHR1cmUgVGltZS9IaVJlcyBUaW1lL1BpZWNlIFVuaWNvZGUvQ29sbGF0ZSBYUy9BUEl0ZXN0IFhTL1R5cGVtYXAgYXJ5YmFzZSBhdHRyaWJ1dGVzIG1ybyByZSB0aHJlYWRzIHRocmVhZHMvc2hhcmVkJworZWFnYWluPSdFQUdBSU4nCitlYmNkaWM9J3VuZGVmJworZWNobz0nZWNobycKK2VncmVwPSdlZ3JlcCcKK2VtYWNzPScnCitlbmRncmVudF9yX3Byb3RvPScwJworZW5kaG9zdGVudF9yX3Byb3RvPScwJworZW5kbmV0ZW50X3JfcHJvdG89JzAnCitlbmRwcm90b2VudF9yX3Byb3RvPScwJworZW5kcHdlbnRfcl9wcm90bz0nMCcKK2VuZHNlcnZlbnRfcl9wcm90bz0nMCcKK2V1bmljZWZpeD0nOicKK2V4ZV9leHQ9JycKK2V4cHI9J2V4cHInCitleHRlbnNpb25zPSdCIENvbXByZXNzL1Jhdy9CemlwMiBDb21wcmVzcy9SYXcvWmxpYiBDd2QgRGF0YS9EdW1wZXIgRGV2ZWwvUFBQb3J0IERldmVsL1BlZWsgRGlnZXN0L01ENSBEaWdlc3QvU0hBIEVuY29kZSBGY250bCBGaWxlL0Rvc0dsb2IgRmlsZS9HbG9iIEZpbHRlci9VdGlsL0NhbGwgSGFzaC9VdGlsIEhhc2gvVXRpbC9GaWVsZEhhc2ggSTE4Ti9MYW5naW5mbyBJTyBJUEMvU3lzViBMaXN0L1V0aWwgTUlNRS9CYXNlNjQgTWF0aC9CaWdJbnQvRmFzdENhbGMgTkRCTV9GaWxlIE9EQk1fRmlsZSBPcGNvZGUgUE9TSVggUGVybElPL2VuY29kaW5nIFBlcmxJTy9tbWFwIFBlcmxJTy9zY2FsYXIgUGVybElPL3ZpYSBTREJNX0ZpbGUgU29ja2V0IFN0b3JhYmxlIFN5cy9Ib3N0bmFtZSBTeXMvU3lzbG9nIFRpZS9IYXNoL05hbWVkQ2FwdHVyZSBUaW1lL0hpUmVzIFRpbWUvUGllY2UgVW5pY29kZS9Db2xsYXRlIFhTL0FQSXRlc3QgWFMvVHlwZW1hcCBhcnliYXNlIGF0dHJpYnV0ZXMgbXJvIHJlIHRocmVhZHMgdGhyZWFkcy9zaGFyZWQgQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29uZmlnL1BlcmwvViBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRHVtcHZhbHVlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9QYXRoIEZpbGUvVGVtcCBGaWxlQ2FjaGUgRmlsdGVyL1NpbXBsZSBHZXRvcHQvTG9uZyBIVFRQL1RpbnkgSTE4Ti9Db2xsYXRlIEkxOE4vTGFuZ1RhZ3MgSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSlNPTi9QUCBMb2NhbGUvQ29kZXMgTG9jYWxlL01ha2V0ZXh0IExvY2FsZS9NYWtldGV4dC9TaW1wbGUgTWF0aC9CaWdJbnQgTWF0aC9CaWdSYXQgTWF0aC9Db21wbGV4IE1lbW9pemUgTW9kdWxlL0NvcmVMaXN0IE1vZHVsZS9Mb2FkIE1vZHVsZS9Mb2FkL0NvbmRpdGlvbmFsIE1vZHVsZS9Mb2FkZWQgTW9kdWxlL01ldGFkYXRhIE5FWFQgTmV0L1BpbmcgUGFyYW1zL0NoZWNrIFBhcnNlL0NQQU4vTWV0YSBQZXJsL09TVHlwZSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTYWZlIFNlYXJjaC9EaWN0IFNlbGZMb2FkZXIgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0xvY2FsIFVuaWNvZGUvTm9ybWFsaXplIFhTTG9hZGVyIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgdmVyc2lvbicKK2V4dGVybl9DPSdleHRlcm4nCitleHRyYXM9JycKK2ZmbHVzaE5VTEw9J2RlZmluZScKK2ZmbHVzaGFsbD0ndW5kZWYnCitmaW5kPScnCitmaXJzdG1ha2VmaWxlPSdtYWtlZmlsZScKK2ZsZXg9JycKK2Zwb3NzaXplPScxNicKK2Zwb3N0eXBlPSdmcG9zX3QnCitmcmVldHlwZT0ndm9pZCcKK2Zyb209JzonCitmdWxsX2FyPSdhcicKK2Z1bGxfY3NoPSdjc2gnCitmdWxsX3NlZD0nc2VkJworZ2NjYW5zaXBlZGFudGljPScnCitnY2Nvc2FuZHZlcnM9JycKK2djY3ZlcnNpb249JzQuOS4yJworZ2V0Z3JlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldGdyZ2lkX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTQldSJworZ2V0Z3JuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnZXRob3N0YnlhZGRyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RzSVNCV1JFJworZ2V0aG9zdGJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUkUnCitnZXRob3N0ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1JFJworZ2V0bG9naW5fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQlcnCitnZXRuZXRieWFkZHJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfdUlTQldSRScKK2dldG5ldGJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUkUnCitnZXRuZXRlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUkUnCitnZXRwcm90b2J5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUicKK2dldHByb3RvYnludW1iZXJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfSVNCV1InCitnZXRwcm90b2VudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0cHdlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldHB3bmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2V0cHd1aWRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNCV1InCitnZXRzZXJ2YnluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NDU0JXUicKK2dldHNlcnZieXBvcnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfSUNTQldSJworZ2V0c2VydmVudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0c3BuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnaWRmb3JtYXQ9JyJ1IicKK2dpZHNpZ249JzEnCitnaWRzaXplPSc0JworZ2lkdHlwZT0nZ2lkX3QnCitnbGlicHRoPSdARVhFQ1BSRUZJWEAvc2hsaWIgIEBCQVNFTElCRElSQCBATElCRElSQCBATElCRElSQC8zODYgQEJBU0VMSUJESVJAMzg2IEBFWEVDUFJFRklYQC9jY3NAQkFTRUxJQkRJUkAgQEVYRUNQUkVGSVhAL3VjYmxpYiBARVhFQ1BSRUZJWEAvbG9jYWxAQkFTRUxJQkRJUkAgQEJBU0VMSUJESVJAIEBMSUJESVJAIEBFWEVDUFJFRklYQC9sb2NhbEBCQVNFTElCRElSQCAnCitnbWFrZT0nZ21ha2UnCitnbXRpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX1NfVFMnCitnbnVsaWJjX3ZlcnNpb249JzIuMjEnCitncmVwPSdncmVwJworZ3JvdXBjYXQ9J2NhdCAvZXRjL2dyb3VwJworZ3JvdXBzdHlwZT0nZ2lkX3QnCitnemlwPSdnemlwJworaF9mY250bD0nZmFsc2UnCitoX3N5c2ZpbGU9J3RydWUnCitoaW50PSdyZWNvbW1lbmRlZCcKK2hvc3RjYXQ9J2NhdCAvZXRjL2hvc3RzJworaG9zdGdlbmVyYXRlPScnCitob3N0b3NuYW1lPScnCitob3N0cGVybD0nJworaHRtbDFkaXI9JyAnCitodG1sMWRpcmV4cD0nJworaHRtbDNkaXI9JyAnCitodG1sM2RpcmV4cD0nJworaTE2c2l6ZT0nMicKK2kxNnR5cGU9J3Nob3J0JworaTMyc2l6ZT0nNCcKK2kzMnR5cGU9J2ludCcKK2k2NHNpemU9JzgnCitpNjR0eXBlPSdsb25nJworaThzaXplPScxJworaTh0eXBlPSdzaWduZWQgY2hhcicKK2lfYXJwYWluZXQ9J2RlZmluZScKK2lfYXNzZXJ0PSdkZWZpbmUnCitpX2JmZD0nZGVmaW5lJworaV9ic2Rpb2N0bD0nJworaV9jcnlwdD0nZGVmaW5lJworaV9kYj0ndW5kZWYnCitpX2RibT0nZGVmaW5lJworaV9kaXJlbnQ9J2RlZmluZScKK2lfZGxmY249J2RlZmluZScKK2lfZXhlY2luZm89J2RlZmluZScKK2lfZmNudGw9J3VuZGVmJworaV9mZW52PSdkZWZpbmUnCitpX2Zsb2F0PSdkZWZpbmUnCitpX2ZwPSd1bmRlZicKK2lfZnBfY2xhc3M9J3VuZGVmJworaV9nZGJtPSd1bmRlZicKK2lfZ2RibV9uZGJtPSd1bmRlZicKK2lfZ2RibW5kYm09J2RlZmluZScKK2lfZ3JwPSdkZWZpbmUnCitpX2llZWVmcD0ndW5kZWYnCitpX2ludHR5cGVzPSdkZWZpbmUnCitpX2xhbmdpbmZvPSdkZWZpbmUnCitpX2xpYnV0aWw9J3VuZGVmJworaV9saW1pdHM9J2RlZmluZScKK2lfbG9jYWxlPSdkZWZpbmUnCitpX21hY2hjdGhyPSd1bmRlZicKK2lfbWFsbG9jPSdkZWZpbmUnCitpX21hbGxvY21hbGxvYz0ndW5kZWYnCitpX21hdGg9J2RlZmluZScKK2lfbWVtb3J5PSd1bmRlZicKK2lfbW50ZW50PSdkZWZpbmUnCitpX25kYm09J3VuZGVmJworaV9uZXRkYj0nZGVmaW5lJworaV9uZXRlcnJubz0ndW5kZWYnCitpX25ldGluZXR0Y3A9J2RlZmluZScKK2lfbmlpbj0nZGVmaW5lJworaV9wb2xsPSdkZWZpbmUnCitpX3Byb3Q9J3VuZGVmJworaV9wdGhyZWFkPSdkZWZpbmUnCitpX3B3ZD0nZGVmaW5lJworaV9xdWFkbWF0aD0ndW5kZWYnCitpX3JwY3N2Y2RibT0ndW5kZWYnCitpX3NndHR5PSd1bmRlZicKK2lfc2hhZG93PSdkZWZpbmUnCitpX3NvY2tzPSd1bmRlZicKK2lfc3RkYXJnPSdkZWZpbmUnCitpX3N0ZGJvb2w9J2RlZmluZScKK2lfc3RkZGVmPSdkZWZpbmUnCitpX3N0ZGludD0nZGVmaW5lJworaV9zdGRsaWI9J2RlZmluZScKK2lfc3RyaW5nPSdkZWZpbmUnCitpX3N1bm1hdGg9J3VuZGVmJworaV9zeXNhY2Nlc3M9J3VuZGVmJworaV9zeXNkaXI9J2RlZmluZScKK2lfc3lzZmlsZT0nZGVmaW5lJworaV9zeXNmaWxpbz0ndW5kZWYnCitpX3N5c2luPSd1bmRlZicKK2lfc3lzaW9jdGw9J2RlZmluZScKK2lfc3lzbG9nPSdkZWZpbmUnCitpX3N5c21tYW49J2RlZmluZScKK2lfc3lzbW9kZT0ndW5kZWYnCitpX3N5c21vdW50PSdkZWZpbmUnCitpX3N5c25kaXI9J3VuZGVmJworaV9zeXNwYXJhbT0nZGVmaW5lJworaV9zeXNwb2xsPSdkZWZpbmUnCitpX3N5c3Jlc3JjPSdkZWZpbmUnCitpX3N5c3NlY3J0PSd1bmRlZicKK2lfc3lzc2VsY3Q9J2RlZmluZScKK2lfc3lzc29ja2lvPSd1bmRlZicKK2lfc3lzc3RhdD0nZGVmaW5lJworaV9zeXNzdGF0ZnM9J2RlZmluZScKK2lfc3lzc3RhdHZmcz0nZGVmaW5lJworaV9zeXN0aW1lPSdkZWZpbmUnCitpX3N5c3RpbWVrPSd1bmRlZicKK2lfc3lzdGltZXM9J2RlZmluZScKK2lfc3lzdHlwZXM9J2RlZmluZScKK2lfc3lzdWlvPSdkZWZpbmUnCitpX3N5c3VuPSdkZWZpbmUnCitpX3N5c3V0c25hbWU9J2RlZmluZScKK2lfc3lzdmZzPSdkZWZpbmUnCitpX3N5c3dhaXQ9J2RlZmluZScKK2lfdGVybWlvPSd1bmRlZicKK2lfdGVybWlvcz0nZGVmaW5lJworaV90aW1lPSdkZWZpbmUnCitpX3VuaXN0ZD0nZGVmaW5lJworaV91c3RhdD0nZGVmaW5lJworaV91dGltZT0nZGVmaW5lJworaV92YWx1ZXM9J2RlZmluZScKK2lfdmFyYXJncz0ndW5kZWYnCitpX3Zhcmhkcj0nc3RkYXJnLmgnCitpX3Zmb3JrPSd1bmRlZicKK2lnbm9yZV92ZXJzaW9uZWRfc29saWJzPSd5JworaW5jX3ZlcnNpb25fbGlzdD0nICcKK2luY192ZXJzaW9uX2xpc3RfaW5pdD0nMCcKK2luY3BhdGg9JycKK2luZXdzPScnCitpbml0aWFsaW5zdGFsbGxvY2F0aW9uPSdAVVNSQklOQCcKK2luc3RhbGxhcmNobGliPSdATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworaW5zdGFsbGJpbj0nQFVTUkJJTkAnCitpbnN0YWxsaHRtbDFkaXI9JycKK2luc3RhbGxodG1sM2Rpcj0nJworaW5zdGFsbG1hbjFkaXI9JycKK2luc3RhbGxtYW4zZGlyPScnCitpbnN0YWxscHJlZml4PSdARVhFQ1BSRUZJWEAnCitpbnN0YWxscHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitpbnN0YWxscHJpdmxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAnCitpbnN0YWxsc2NyaXB0PSdAVVNSQklOQCcKK2luc3RhbGxzaXRlYXJjaD0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitpbnN0YWxsc2l0ZWJpbj0nQFVTUkJJTkAnCitpbnN0YWxsc2l0ZWh0bWwxZGlyPScnCitpbnN0YWxsc2l0ZWh0bWwzZGlyPScnCitpbnN0YWxsc2l0ZWxpYj0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wJworaW5zdGFsbHNpdGVtYW4xZGlyPScnCitpbnN0YWxsc2l0ZW1hbjNkaXI9JycKK2luc3RhbGxzaXRlc2NyaXB0PSdAVVNSQklOQCcKK2luc3RhbGxzdHlsZT0nbGliL3BlcmwnCitpbnN0YWxsdXNyYmlucGVybD0nZGVmaW5lJworaW5zdGFsbHZlbmRvcmFyY2g9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitpbnN0YWxsdmVuZG9yYmluPSdAVVNSQklOQCcKK2luc3RhbGx2ZW5kb3JodG1sMWRpcj0nJworaW5zdGFsbHZlbmRvcmh0bWwzZGlyPScnCitpbnN0YWxsdmVuZG9ybGliPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMCcKK2luc3RhbGx2ZW5kb3JtYW4xZGlyPScnCitpbnN0YWxsdmVuZG9ybWFuM2Rpcj0nJworaW5zdGFsbHZlbmRvcnNjcmlwdD0nQFVTUkJJTkAnCitpbnRzaXplPSc0JworaXNzeW1saW5rPSd0ZXN0IC1oJworaXZkZm9ybWF0PScibGQiJworaXZzaXplPSc4JworaXZ0eXBlPSdsb25nJwora25vd25fZXh0ZW5zaW9ucz0nQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQiBCL0RlYnVnIENQQU4gQ1BBTi9NZXRhIENQQU4vTWV0YS9SZXF1aXJlbWVudHMgQ1BBTi9NZXRhL1lBTUwgQ2FycCBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ29uZmlnL1BlcmwvViBDd2QgREJfRmlsZSBEYXRhL0R1bXBlciBEZXZlbC9QUFBvcnQgRGV2ZWwvUGVlayBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRGlnZXN0L01ENSBEaWdlc3QvU0hBIER1bXB2YWx1ZSBFbmNvZGUgRW52IEVycm5vIEV4cG9ydGVyIEV4dFV0aWxzL0NCdWlsZGVyIEV4dFV0aWxzL0NvbW1hbmQgRXh0VXRpbHMvQ29uc3RhbnQgRXh0VXRpbHMvSW5zdGFsbCBFeHRVdGlscy9NYWtlTWFrZXIgRXh0VXRpbHMvTWFuaWZlc3QgRXh0VXRpbHMvTWluaXBlcmwgRXh0VXRpbHMvUGFyc2VYUyBGY250bCBGaWxlL0Rvc0dsb2IgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9HbG9iIEZpbGUvUGF0aCBGaWxlL1RlbXAgRmlsZUNhY2hlIEZpbHRlci9TaW1wbGUgRmlsdGVyL1V0aWwvQ2FsbCBHREJNX0ZpbGUgR2V0b3B0L0xvbmcgSFRUUC9UaW55IEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vQ29sbGF0ZSBJMThOL0xhbmdUYWdzIEkxOE4vTGFuZ2luZm8gSU8gSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSVBDL1N5c1YgSlNPTi9QUCBMaXN0L1V0aWwgTG9jYWxlL0NvZGVzIExvY2FsZS9NYWtldGV4dCBMb2NhbGUvTWFrZXRleHQvU2ltcGxlIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE1hdGgvQmlnUmF0IE1hdGgvQ29tcGxleCBNZW1vaXplIE1vZHVsZS9Db3JlTGlzdCBNb2R1bGUvTG9hZCBNb2R1bGUvTG9hZC9Db25kaXRpb25hbCBNb2R1bGUvTG9hZGVkIE1vZHVsZS9NZXRhZGF0YSBOREJNX0ZpbGUgTkVYVCBOZXQvUGluZyBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBhcmFtcy9DaGVjayBQYXJzZS9DUEFOL01ldGEgUGVybC9PU1R5cGUgUGVybElPL2VuY29kaW5nIFBlcmxJTy9tbWFwIFBlcmxJTy9zY2FsYXIgUGVybElPL3ZpYSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTREJNX0ZpbGUgU2FmZSBTZWFyY2gvRGljdCBTZWxmTG9hZGVyIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUZXJtL0FOU0lDb2xvciBUZXJtL0NhcCBUZXJtL0NvbXBsZXRlIFRlcm0vUmVhZExpbmUgVGVzdCBUZXN0L0hhcm5lc3MgVGVzdC9TaW1wbGUgVGV4dC9BYmJyZXYgVGV4dC9CYWxhbmNlZCBUZXh0L1BhcnNlV29yZHMgVGV4dC9UYWJzIFRocmVhZC9RdWV1ZSBUaHJlYWQvU2VtYXBob3JlIFRpZS9GaWxlIFRpZS9IYXNoL05hbWVkQ2FwdHVyZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0hpUmVzIFRpbWUvTG9jYWwgVGltZS9QaWVjZSBVbmljb2RlL0NvbGxhdGUgVW5pY29kZS9Ob3JtYWxpemUgVk1TL0RDTHN5bSBWTVMvRmlsZXNwZWMgVk1TL1N0ZGlvIFdpbjMyIFdpbjMyQVBJL0ZpbGUgV2luMzJDT1JFIFhTL0FQSXRlc3QgWFMvVHlwZW1hcCBYU0xvYWRlciBhcnliYXNlIGF0dHJpYnV0ZXMgYXV0b2RpZSBhdXRvdXNlIGJhc2UgYmlnbnVtIGNvbnN0YW50IGVuY29kaW5nL3dhcm5pbmdzIGV4cGVyaW1lbnRhbCBpZiBsaWIgbGlibmV0IG1ybyBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgcmUgdGhyZWFkcyB0aHJlYWRzL3NoYXJlZCB2ZXJzaW9uICcKK2tzaD0nJworbGQ9J2djYycKK2xkX2Nhbl9zY3JpcHQ9J2RlZmluZScKK2xkZGxmbGFncz0nLXNoYXJlZCAtTzInCitsZGZsYWdzPScnCitsZGZsYWdzX3VzZWxhcmdlZmlsZXM9JycKK2xkbGlicHRobmFtZT0nTERfTElCUkFSWV9QQVRIJworbGVzcz0nbGVzcycKK2xpYl9leHQ9Jy5hJworbGliYz0nbGliYy0yLjIxLnNvJworbGlicGVybD0nbGlicGVybC5zbycKK2xpYnB0aD0nQExJQkRJUkAgQEJBU0VMSUJESVJAJworbGlicz0nLWxwdGhyZWFkIC1sbnNsIC1sZ2RibSAtbGRiIC1sZGwgLWxtIC1sY3J5cHQgLWx1dGlsIC1sYyAtbGdkYm1fY29tcGF0JworbGlic2RpcnM9JyBATElCRElSQCcKK2xpYnNmaWxlcz0nIGxpYnB0aHJlYWQuc28gbGlibnNsLnNvIGxpYmdkYm0uc28gbGliZGIuc28gbGliZGwuc28gbGlibS5zbyBsaWJjcnlwdC5zbyBsaWJ1dGlsLnNvIGxpYmMuc28gbGliZ2RibV9jb21wYXQuc28nCitsaWJzZm91bmQ9JyBATElCRElSQC9saWJwdGhyZWFkLnNvIEBMSUJESVJAL2xpYm5zbC5zbyBATElCRElSQC9saWJnZGJtLnNvIEBMSUJESVJAL2xpYmRiLnNvIEBMSUJESVJAL2xpYmRsLnNvIEBMSUJESVJAL2xpYm0uc28gQExJQkRJUkAvbGliY3J5cHQuc28gQExJQkRJUkAvbGlidXRpbC5zbyBATElCRElSQC9saWJjLnNvIEBMSUJESVJAL2xpYmdkYm1fY29tcGF0LnNvJworbGlic3BhdGg9JyBATElCRElSQCBAQkFTRUxJQkRJUkAnCitsaWJzd2FudGVkPSdjbCBwdGhyZWFkIHNvY2tldCBpbmV0IG5zbCBubSBnZGJtIGRibSBkYiBtYWxsb2MgZGwgbGQgc3VuIG0gY3J5cHQgc2VjIHV0aWwgYyBjcG9zaXggcG9zaXggdWNiIEJTRCBnZGJtX2NvbXBhdCcKK2xpYnN3YW50ZWRfdXNlbGFyZ2VmaWxlcz0nJworbGluZT0nJworbGludD0nJworbGtmbGFncz0nJworbG49J2xuJworbG5zPScvYmluL2xuIC1zJworbG9jYWx0aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19TX1RTJworbG9jaW5jcHRoPSdARVhFQ1BSRUZJWEAvbG9jYWwvaW5jbHVkZSAvb3B0L2xvY2FsL2luY2x1ZGUgQEVYRUNQUkVGSVhAL2dudS9pbmNsdWRlIC9vcHQvZ251L2luY2x1ZGUgQEVYRUNQUkVGSVhAL0dOVS9pbmNsdWRlIC9vcHQvR05VL2luY2x1ZGUnCitsb2NsaWJwdGg9J0BFWEVDUFJFRklYQC9sb2NhbEBCQVNFTElCRElSQCAvb3B0L2xvY2FsQEJBU0VMSUJESVJAIEBFWEVDUFJFRklYQC9nbnVAQkFTRUxJQkRJUkAgL29wdC9nbnVAQkFTRUxJQkRJUkAgQEVYRUNQUkVGSVhAL0dOVUBCQVNFTElCRElSQCAvb3B0L0dOVUBCQVNFTElCRElSQCcKK2xvbmdkYmxraW5kPSczJworbG9uZ2RibHNpemU9JzE2JworbG9uZ2xvbmdzaXplPSc4JworbG9uZ3NpemU9JzgnCitscD0nJworbHByPScnCitscz0nbHMnCitsc2Vla3NpemU9JzgnCitsc2Vla3R5cGU9J29mZl90JworbWFpbD0nJworbWFpbHg9JycKK21ha2U9J21ha2UnCittYWtlX3NldF9tYWtlPScjJworbWFsbG9jb2JqPScnCittYWxsb2NzcmM9JycKK21hbGxvY3R5cGU9J3ZvaWQgKicKK21hbjFkaXI9JyAnCittYW4xZGlyZXhwPScnCittYW4xZXh0PScwJworbWFuM2Rpcj0nICcKK21hbjNkaXJleHA9JycKK21hbjNleHQ9JzAnCittaXBzX3R5cGU9JycKK21pc3RydXN0bm09JycKK21rZGlyPSdta2RpcicKK21tYXB0eXBlPSd2b2lkIConCittb2RldHlwZT0nbW9kZV90JworbW9yZT0nbW9yZScKK211bHRpYXJjaD0ndW5kZWYnCittdj0nJworbXlhcmNobmFtZT0nQEFSQ0hAJworbXlkb21haW49Jy5sb2NhbGRvbWFpbicKK215aG9zdG5hbWU9J2xvY2FsaG9zdCcKK215dW5hbWU9J2xpbnV4IHFlbXV4ODYtNjQgMy4xOS41LXlvY3RvLXN0YW5kYXJkICMxIHNtcCBwcmVlbXB0IHR1ZSBqdW4gMTYgMDA6Mjg6MTcgcGR0IDIwMTUgeDg2XzY0IGdudWxpbnV4ICcKK249Jy1uJworbmVlZF92YV9jb3B5PSdkZWZpbmUnCituZXRkYl9obGVuX3R5cGU9J3NpemVfdCcKK25ldGRiX2hvc3RfdHlwZT0nY2hhciAqJworbmV0ZGJfbmFtZV90eXBlPSdjb25zdCBjaGFyIConCituZXRkYl9uZXRfdHlwZT0naW5fYWRkcl90Jworbm09J25tJworbm1fb3B0PScnCitubV9zb19vcHQ9Jy0tZHluYW1pYycKK25vbnhzX2V4dD0nQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29uZmlnL1BlcmwvViBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRHVtcHZhbHVlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9QYXRoIEZpbGUvVGVtcCBGaWxlQ2FjaGUgRmlsdGVyL1NpbXBsZSBHZXRvcHQvTG9uZyBIVFRQL1RpbnkgSTE4Ti9Db2xsYXRlIEkxOE4vTGFuZ1RhZ3MgSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSlNPTi9QUCBMb2NhbGUvQ29kZXMgTG9jYWxlL01ha2V0ZXh0IExvY2FsZS9NYWtldGV4dC9TaW1wbGUgTWF0aC9CaWdJbnQgTWF0aC9CaWdSYXQgTWF0aC9Db21wbGV4IE1lbW9pemUgTW9kdWxlL0NvcmVMaXN0IE1vZHVsZS9Mb2FkIE1vZHVsZS9Mb2FkL0NvbmRpdGlvbmFsIE1vZHVsZS9Mb2FkZWQgTW9kdWxlL01ldGFkYXRhIE5FWFQgTmV0L1BpbmcgUGFyYW1zL0NoZWNrIFBhcnNlL0NQQU4vTWV0YSBQZXJsL09TVHlwZSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTYWZlIFNlYXJjaC9EaWN0IFNlbGZMb2FkZXIgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0xvY2FsIFVuaWNvZGUvTm9ybWFsaXplIFhTTG9hZGVyIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgdmVyc2lvbicKK25yb2ZmPSducm9mZicKK252RVVmb3JtYXQ9JyJFIicKK252RlVmb3JtYXQ9JyJGIicKK252R1Vmb3JtYXQ9JyJHIicKK252X292ZXJmbG93c19pbnRlZ2Vyc19hdD0nMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMi4wKjIuMCoyLjAqMi4wKjIuMCcKK252X3ByZXNlcnZlc191dl9iaXRzPSc1MycKK252ZWZvcm1hdD0nImUiJworbnZmZm9ybWF0PSciZiInCitudmdmb3JtYXQ9JyJnIicKK252c2l6ZT0nOCcKK252dHlwZT0nZG91YmxlJworb19ub25ibG9jaz0nT19OT05CTE9DSycKK29ial9leHQ9Jy5vJworb2xkX3B0aHJlYWRfY3JlYXRlX2pvaW5hYmxlPScnCitvcHRpbWl6ZT0nLU8yJworb3JkZXJsaWI9J2ZhbHNlJworb3NuYW1lPSdsaW51eCcKK29zdmVycz0nMy4xOS41LXlvY3RvLXN0YW5kYXJkJworb3RoZXJsaWJkaXJzPSdATElCRElSQC9wZXJsLzUuMjIuMCcKK3BhY2thZ2U9J3BlcmwnCitwYWdlcj0nL3Vzci9iaW4vbGVzcyAtaXNyJworcGFzc2NhdD0nY2F0IC9ldGMvcGFzc3dkJworcGF0Y2hsZXZlbD0nMjInCitwYXRoX3NlcD0nOicKK3Blcmw1PSdAVVNSQklOQC9wZXJsJworcGVybD0ncGVybCcKK3BlcmxfcGF0Y2hsZXZlbD0nJworcGVybF9zdGF0aWNfaW5saW5lPSdzdGF0aWMgX19pbmxpbmVfXycKK3BlcmxhZG1pbj0ncm9vdEBsb2NhbGhvc3QnCitwZXJsbGlicz0nLWxwdGhyZWFkIC1sbnNsIC1sZGwgLWxtIC1sY3J5cHQgLWx1dGlsIC1sYycKK3BlcmxwYXRoPSdAVVNSQklOQC9wZXJsJworcGc9J3BnJworcGhvc3RuYW1lPScnCitwaWR0eXBlPSdwaWRfdCcKK3BsaWJwdGg9J0BMSUJESVJAIEBCQVNFTElCRElSQCcKK3BtYWtlPScnCitwcj0nJworcHJlZml4PSdARVhFQ1BSRUZJWEAnCitwcmVmaXhleHA9J0BFWEVDUFJFRklYQCcKK3ByaXZsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworcHJpdmxpYmV4cD0nQExJQkRJUkAvcGVybC81LjIyLjAnCitwcm9jc2VsZmV4ZT0nIi9wcm9jL3NlbGYvZXhlIicKK3Byb3RvdHlwZT0nZGVmaW5lJworcHRyc2l6ZT0nOCcKK3F1YWRraW5kPScyJworcXVhZHR5cGU9J2xvbmcnCityYW5kYml0cz0nNDgnCityYW5kZnVuYz0nUGVybF9kcmFuZDQ4JworcmFuZG9tX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1N0JworcmFuZHNlZWR0eXBlPSdVMzInCityYW5saWI9JzonCityZF9ub2RhdGE9Jy0xJworcmVhZGRpcjY0X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTUicKK3JlYWRkaXJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNSJworcmV2aXNpb249JzUnCitybT0ncm0nCitybV90cnk9Jy9iaW4vcm0gLWYgdHJ5IHRyeSBhLm91dCAub3V0IHRyeS5bY2hvXSB0cnkuLm8gY29yZSBjb3JlLnRyeSogdHJ5LmNvcmUqJworcm1haWw9JycKK3J1bj0nJworcnVubm09J2ZhbHNlJworc0dNVElNRV9tYXg9JzY3NzY4MDM2MTkxNjc2Nzk5Jworc0dNVElNRV9taW49Jy02MjE2NzIxOTIwMCcKK3NMT0NBTFRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NMT0NBTFRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzUFJJRVVsZGJsPSciTEUiJworc1BSSUZVbGRibD0nIkxGIicKK3NQUklHVWxkYmw9JyJMRyInCitzUFJJWFU2ND0nImxYIicKK3NQUklkNjQ9JyJsZCInCitzUFJJZWxkYmw9JyJMZSInCitzUFJJZmxkYmw9JyJMZiInCitzUFJJZ2xkYmw9JyJMZyInCitzUFJJaTY0PScibGkiJworc1BSSW82ND0nImxvIicKK3NQUkl1NjQ9JyJsdSInCitzUFJJeDY0PScibHgiJworc1NDTmZsZGJsPSciTGYiJworc2NoZWRfeWllbGQ9J3NjaGVkX3lpZWxkKCknCitzY3JpcHRkaXI9J0BVU1JCSU5AJworc2NyaXB0ZGlyZXhwPSdAVVNSQklOQCcKK3NlZD0nc2VkJworc2VlZGZ1bmM9J1BlcmxfZHJhbmQ0OF9pbml0Jworc2VsZWN0bWluYml0cz0nNjQnCitzZWxlY3R0eXBlPSdmZF9zZXQgKicKK3NlbmRtYWlsPScnCitzZXRncmVudF9yX3Byb3RvPScwJworc2V0aG9zdGVudF9yX3Byb3RvPScwJworc2V0bG9jYWxlX3JfcHJvdG89JzAnCitzZXRuZXRlbnRfcl9wcm90bz0nMCcKK3NldHByb3RvZW50X3JfcHJvdG89JzAnCitzZXRwd2VudF9yX3Byb3RvPScwJworc2V0c2VydmVudF9yX3Byb3RvPScwJworc2g9Jy9iaW4vc2gnCitzaGFyPScnCitzaGFycGJhbmc9JyMhJworc2htYXR0eXBlPSd2b2lkIConCitzaG9ydHNpemU9JzInCitzaHJwZW52PScnCitzaHNoYXJwPSd0cnVlJworc2lnX2NvdW50PSc2NScKK3NpZ19uYW1lPSdaRVJPIEhVUCBJTlQgUVVJVCBJTEwgVFJBUCBBQlJUIEJVUyBGUEUgS0lMTCBVU1IxIFNFR1YgVVNSMiBQSVBFIEFMUk0gVEVSTSBTVEtGTFQgQ0hMRCBDT05UIFNUT1AgVFNUUCBUVElOIFRUT1UgVVJHIFhDUFUgWEZTWiBWVEFMUk0gUFJPRiBXSU5DSCBJTyBQV1IgU1lTIE5VTTMyIE5VTTMzIFJUTUlOIE5VTTM1IE5VTTM2IE5VTTM3IE5VTTM4IE5VTTM5IE5VTTQwIE5VTTQxIE5VTTQyIE5VTTQzIE5VTTQ0IE5VTTQ1IE5VTTQ2IE5VTTQ3IE5VTTQ4IE5VTTQ5IE5VTTUwIE5VTTUxIE5VTTUyIE5VTTUzIE5VTTU0IE5VTTU1IE5VTTU2IE5VTTU3IE5VTTU4IE5VTTU5IE5VTTYwIE5VTTYxIE5VTTYyIE5VTTYzIFJUTUFYIElPVCBDTEQgUE9MTCBVTlVTRUQgJworc2lnX25hbWVfaW5pdD0nIlpFUk8iLCAiSFVQIiwgIklOVCIsICJRVUlUIiwgIklMTCIsICJUUkFQIiwgIkFCUlQiLCAiQlVTIiwgIkZQRSIsICJLSUxMIiwgIlVTUjEiLCAiU0VHViIsICJVU1IyIiwgIlBJUEUiLCAiQUxSTSIsICJURVJNIiwgIlNUS0ZMVCIsICJDSExEIiwgIkNPTlQiLCAiU1RPUCIsICJUU1RQIiwgIlRUSU4iLCAiVFRPVSIsICJVUkciLCAiWENQVSIsICJYRlNaIiwgIlZUQUxSTSIsICJQUk9GIiwgIldJTkNIIiwgIklPIiwgIlBXUiIsICJTWVMiLCAiTlVNMzIiLCAiTlVNMzMiLCAiUlRNSU4iLCAiTlVNMzUiLCAiTlVNMzYiLCAiTlVNMzciLCAiTlVNMzgiLCAiTlVNMzkiLCAiTlVNNDAiLCAiTlVNNDEiLCAiTlVNNDIiLCAiTlVNNDMiLCAiTlVNNDQiLCAiTlVNNDUiLCAiTlVNNDYiLCAiTlVNNDciLCAiTlVNNDgiLCAiTlVNNDkiLCAiTlVNNTAiLCAiTlVNNTEiLCAiTlVNNTIiLCAiTlVNNTMiLCAiTlVNNTQiLCAiTlVNNTUiLCAiTlVNNTYiLCAiTlVNNTciLCAiTlVNNTgiLCAiTlVNNTkiLCAiTlVNNjAiLCAiTlVNNjEiLCAiTlVNNjIiLCAiTlVNNjMiLCAiUlRNQVgiLCAiSU9UIiwgIkNMRCIsICJQT0xMIiwgIlVOVVNFRCIsIDAnCitzaWdfbnVtPScwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDM4IDM5IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDQ4IDQ5IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzIDY0IDYgMTcgMjkgMzEgJworc2lnX251bV9pbml0PScwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNiwgMTcsIDI5LCAzMSwgMCcKK3NpZ19zaXplPSc2OScKK3NpZ25hbF90PSd2b2lkJworc2l0ZWFyY2g9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworc2l0ZWFyY2hleHA9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworc2l0ZWJpbj0nQFVTUkJJTkAnCitzaXRlYmluZXhwPSdAVVNSQklOQCcKK3NpdGVodG1sMWRpcj0nJworc2l0ZWh0bWwxZGlyZXhwPScnCitzaXRlaHRtbDNkaXI9JycKK3NpdGVodG1sM2RpcmV4cD0nJworc2l0ZWxpYj0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wJworc2l0ZWxpYl9zdGVtPSdATElCRElSQC9wZXJsL3NpdGVfcGVybCcKK3NpdGVsaWJleHA9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMCcKK3NpdGVtYW4xZGlyPScnCitzaXRlbWFuMWRpcmV4cD0nJworc2l0ZW1hbjNkaXI9JycKK3NpdGVtYW4zZGlyZXhwPScnCitzaXRlcHJlZml4PSdARVhFQ1BSRUZJWEAnCitzaXRlcHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitzaXRlc2NyaXB0PSdAVVNSQklOQCcKK3NpdGVzY3JpcHRleHA9J0BVU1JCSU5AJworc2l6ZXNpemU9JzgnCitzaXpldHlwZT0nc2l6ZV90Jworc2xlZXA9JycKK3NtYWlsPScnCitzbz0nc28nCitzb2NrZXRoZHI9JycKK3NvY2tldGxpYj0nJworc29ja3NpemV0eXBlPSdzb2NrbGVuX3QnCitzb3J0PSdzb3J0Jworc3BhY2thZ2U9J1Blcmw1Jworc3BpdHNoZWxsPSdjYXQnCitzcmFuZDQ4X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0xTJworc3JhbmRvbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UUycKK3NyYz0nLicKK3NzaXpldHlwZT0nc3NpemVfdCcKK3N0X2lub19zaWduPScxJworc3RfaW5vX3NpemU9JzgnCitzdGFydHBlcmw9JyMhQFVTUkJJTkAvcGVybCcKK3N0YXJ0c2g9JyMhL2Jpbi9zaCcKK3N0YXRpY19leHQ9JyAnCitzdGRjaGFyPSdjaGFyJworc3RkaW9fYmFzZT0nKChmcCktPl9JT19yZWFkX2Jhc2UpJworc3RkaW9fYnVmc2l6PScoKGZwKS0+X0lPX3JlYWRfZW5kIC0gKGZwKS0+X0lPX3JlYWRfYmFzZSknCitzdGRpb19jbnQ9JygoZnApLT5fSU9fcmVhZF9lbmQgLSAoZnApLT5fSU9fcmVhZF9wdHIpJworc3RkaW9fZmlsYnVmPScnCitzdGRpb19wdHI9JygoZnApLT5fSU9fcmVhZF9wdHIpJworc3RkaW9fc3RyZWFtX2FycmF5PScnCitzdHJlcnJvcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9JQlcnCitzdHJpbmdzPSdASU5DTFVERURJUkAvc3RyaW5nLmgnCitzdWJtaXQ9JycKK3N1YnZlcnNpb249JzAnCitzeXNtYW49J0BFWEVDUFJFRklYQC9zaGFyZS9tYW4vbWFuMScKK3N5c3Jvb3Q9JycKK3RhaWw9JycKK3Rhcj0nJwordGFyZ2V0YXJjaD0nJwordGFyZ2V0ZGlyPScnCit0YXJnZXRlbnY9JycKK3RhcmdldGhvc3Q9JycKK3RhcmdldG1rZGlyPScnCit0YXJnZXRwb3J0PScnCit0YXJnZXRzaD0nL2Jpbi9zaCcKK3RibD0nJwordGVlPScnCit0ZXN0PSd0ZXN0JwordGltZWluY2w9J0BJTkNMVURFRElSQC9zeXMvdGltZS5oIEBJTkNMVURFRElSQC90aW1lLmggJwordGltZXR5cGU9J3RpbWVfdCcKK3RtcG5hbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9CJwordG89JzonCit0b3VjaD0ndG91Y2gnCit0cj0ndHInCit0cm5sPSdcbicKK3Ryb2ZmPScnCit0dHluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0lCVycKK3UxNnNpemU9JzInCit1MTZ0eXBlPSd1bnNpZ25lZCBzaG9ydCcKK3UzMnNpemU9JzQnCit1MzJ0eXBlPSd1bnNpZ25lZCBpbnQnCit1NjRzaXplPSc4JwordTY0dHlwZT0ndW5zaWduZWQgbG9uZycKK3U4c2l6ZT0nMScKK3U4dHlwZT0ndW5zaWduZWQgY2hhcicKK3VpZGZvcm1hdD0nInUiJwordWlkc2lnbj0nMScKK3VpZHNpemU9JzQnCit1aWR0eXBlPSd1aWRfdCcKK3VuYW1lPSd1bmFtZScKK3VuaXE9J3VuaXEnCit1cXVhZHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1c2U1MDA1dGhyZWFkcz0ndW5kZWYnCit1c2U2NGJpdGFsbD0nZGVmaW5lJwordXNlNjRiaXRpbnQ9J2RlZmluZScKK3VzZWNiYWNrdHJhY2U9J3VuZGVmJwordXNlY3Jvc3Njb21waWxlPSdkZWZpbmUnCit1c2VkZXZlbD0ndW5kZWYnCit1c2VkbD0nZGVmaW5lJwordXNlZHRyYWNlPSd1bmRlZicKK3VzZWZhc3RzdGRpbz0ndW5kZWYnCit1c2VpdGhyZWFkcz0nZGVmaW5lJwordXNla2VybnByb2NwYXRobmFtZT0ndW5kZWYnCit1c2VsYXJnZWZpbGVzPSdkZWZpbmUnCit1c2Vsb25nZG91YmxlPSd1bmRlZicKK3VzZW1hbGxvY3dyYXA9J2RlZmluZScKK3VzZW1vcmViaXRzPSd1bmRlZicKK3VzZW11bHRpcGxpY2l0eT0nZGVmaW5lJwordXNlbXltYWxsb2M9J24nCit1c2VubT0nZmFsc2UnCit1c2Vuc2dldGV4ZWN1dGFibGVwYXRoPSd1bmRlZicKK3VzZW9wY29kZT0ndHJ1ZScKK3VzZXBlcmxpbz0nZGVmaW5lJwordXNlcG9zaXg9J3RydWUnCit1c2VxdWFkbWF0aD0ndW5kZWYnCit1c2VyZWVudHJhbnQ9J3VuZGVmJwordXNlcmVsb2NhdGFibGVpbmM9J3VuZGVmJwordXNlc2hycGxpYj0ndHJ1ZScKK3VzZXNpdGVjdXN0b21pemU9J3VuZGVmJwordXNlc29ja3M9J3VuZGVmJwordXNldGhyZWFkcz0nZGVmaW5lJwordXNldmVuZG9ycHJlZml4PSdkZWZpbmUnCit1c2V2ZXJzaW9uZWRhcmNobmFtZT0ndW5kZWYnCit1c2V2Zm9yaz0nZmFsc2UnCit1c3JpbmM9J0BJTkNMVURFRElSQCcKK3V1bmFtZT0nJwordXZYVWZvcm1hdD0nImxYIicKK3V2b2Zvcm1hdD0nImxvIicKK3V2c2l6ZT0nOCcKK3V2dHlwZT0ndW5zaWduZWQgbG9uZycKK3V2dWZvcm1hdD0nImx1IicKK3V2eGZvcm1hdD0nImx4IicKK3ZhcHJvdG89J2RlZmluZScKK3ZlbmRvcmFyY2g9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCit2ZW5kb3JhcmNoZXhwPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJwordmVuZG9yYmluPSdAVVNSQklOQCcKK3ZlbmRvcmJpbmV4cD0nQFVTUkJJTkAnCit2ZW5kb3JodG1sMWRpcj0nICcKK3ZlbmRvcmh0bWwxZGlyZXhwPScnCit2ZW5kb3JodG1sM2Rpcj0nICcKK3ZlbmRvcmh0bWwzZGlyZXhwPScnCit2ZW5kb3JsaWI9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wJwordmVuZG9ybGliX3N0ZW09J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwnCit2ZW5kb3JsaWJleHA9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wJwordmVuZG9ybWFuMWRpcj0nICcKK3ZlbmRvcm1hbjFkaXJleHA9JycKK3ZlbmRvcm1hbjNkaXI9JyAnCit2ZW5kb3JtYW4zZGlyZXhwPScnCit2ZW5kb3JwcmVmaXg9J0BFWEVDUFJFRklYQCcKK3ZlbmRvcnByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJwordmVuZG9yc2NyaXB0PSdAVVNSQklOQCcKK3ZlbmRvcnNjcmlwdGV4cD0nQFVTUkJJTkAnCit2ZXJzaW9uPSc1LjIyLjAnCit2ZXJzaW9uX3BhdGNobGV2ZWxfc3RyaW5nPSd2ZXJzaW9uIDIyIHN1YnZlcnNpb24gMCcKK3ZlcnNpb25vbmx5PSd1bmRlZicKK3ZpPScnCit4bGlicHRoPSdATElCRElSQC8zODYgQEJBU0VMSUJESVJAMzg2JworeWFjYz0neWFjYycKK3lhY2NmbGFncz0nJworemNhdD0nJworemlwPSd6aXAnCitQRVJMX1JFVklTSU9OPTUKK1BFUkxfVkVSU0lPTj0yMgorUEVSTF9TVUJWRVJTSU9OPTAKK1BFUkxfQVBJX1JFVklTSU9OPTUKK1BFUkxfQVBJX1ZFUlNJT049MjIKK1BFUkxfQVBJX1NVQlZFUlNJT049MAorUEVSTF9QQVRDSExFVkVMPScnCitQRVJMX0NPTkZJR19TSD10cnVlCis6IFZhcmlhYmxlcyBwcm9wYWdhdGVkIGZyb20gcHJldmlvdXMgY29uZmlnLnNoIGZpbGUuCitsaWJkYl9uZWVkc19wdGhyZWFkPSdOJworCisjIGZvciBUaW1lLUhpUmVzCitkX2Nsb2NrX25hbm9zbGVlcD0nZGVmaW5lJworZF9jbG9ja19nZXR0aW1lPSdkZWZpbmUnCitkX2Nsb2NrX2dldHJlcz0nZGVmaW5lJworZF9jbG9jaz0nZGVmaW5lJworZF9uYW5vc2xlZXA9J2RlZmluZScKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1OWEwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyCkBAIC0wLDAgKzEsMzggQEAKK2FsaWduYnl0ZXM9JzQnCitjZl90aW1lPSdUaHUgRGVjIDIzIDAzOjU3OjUxIFVUQyAyMDEwJworY3Bwc3ltYm9scz0nX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgX0dOVV9TT1VSQ0U9MSBfTEFSR0VGSUxFNjRfU09VUkNFPTEgX0xBUkdFRklMRV9TT1VSQ0U9MSBfUE9TSVhfQ19TT1VSQ0U9MjAwODA5TCBfUE9TSVhfU09VUkNFPTEgX1JFRU5UUkFOVD0xIF9YT1BFTl9TT1VSQ0U9NzAwIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSBfX0JJR0dFU1RfQUxJR05NRU5UX189MTYgX19DSEFSMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fQ0hBUjMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fQ0hBUl9CSVRfXz04IF9fREJMX0RFTk9STV9NSU5fXz0oKGRvdWJsZSk0Ljk0MDY1NjQ1ODQxMjQ2NTQ0MTc3ZS0zMjRMKSBfX0RCTF9ESUdfXz0xNSBfX0RCTF9FUFNJTE9OX189KChkb3VibGUpMi4yMjA0NDYwNDkyNTAzMTMwODA4NWUtMTZMKSBfX0RCTF9IQVNfREVOT1JNX189MSBfX0RCTF9IQVNfSU5GSU5JVFlfXz0xIF9fREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fREJMX01BTlRfRElHX189NTMgX19EQkxfTUFYXzEwX0VYUF9fPTMwOCBfX0RCTF9NQVhfRVhQX189MTAyNCBfX0RCTF9NQVhfXz0oKGRvdWJsZSkxLjc5NzY5MzEzNDg2MjMxNTcwODE1ZSszMDhMKSBfX0RCTF9NSU5fMTBfRVhQX189KC0zMDcpIF9fREJMX01JTl9FWFBfXz0oLTEwMjEpIF9fREJMX01JTl9fPSgoZG91YmxlKTIuMjI1MDczODU4NTA3MjAxMzgzMDllLTMwOEwpIF9fREVDMTI4X0VQU0lMT05fXz0xRS0zM0RMIF9fREVDMTI4X01BTlRfRElHX189MzQgX19ERUMxMjhfTUFYX0VYUF9fPTYxNDUgX19ERUMxMjhfTUFYX189OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFNjE0NERMIF9fREVDMTI4X01JTl9FWFBfXz0oLTYxNDIpIF9fREVDMTI4X01JTl9fPTFFLTYxNDNETCBfX0RFQzEyOF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDNETCBfX0RFQzMyX0VQU0lMT05fXz0xRS02REYgX19ERUMzMl9NQU5UX0RJR19fPTcgX19ERUMzMl9NQVhfRVhQX189OTcgX19ERUMzMl9NQVhfXz05Ljk5OTk5OUU5NkRGIF9fREVDMzJfTUlOX0VYUF9fPSgtOTQpIF9fREVDMzJfTUlOX189MUUtOTVERiBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMUUtOTVERiBfX0RFQzY0X0VQU0lMT05fXz0xRS0xNUREIF9fREVDNjRfTUFOVF9ESUdfXz0xNiBfX0RFQzY0X01BWF9FWFBfXz0zODUgX19ERUM2NF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OUUzODRERCBfX0RFQzY0X01JTl9FWFBfXz0oLTM4MikgX19ERUM2NF9NSU5fXz0xRS0zODNERCBfX0RFQzY0X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzREQgX19ERUNJTUFMX0JJRF9GT1JNQVRfXz0xIF9fREVDSU1BTF9ESUdfXz0yMSBfX0RFQ19FVkFMX01FVEhPRF9fPTIgX19FTEZfXz0xIF9fRklOSVRFX01BVEhfT05MWV9fPTAgX19GTFRfREVOT1JNX01JTl9fPTEuNDAxMjk4NDY0MzI0ODE3MDcwOTJlLTQ1RiBfX0ZMVF9ESUdfXz02IF9fRkxUX0VQU0lMT05fXz0xLjE5MjA5Mjg5NTUwNzgxMjUwMDAwZS03RiBfX0ZMVF9FVkFMX01FVEhPRF9fPTIgX19GTFRfSEFTX0RFTk9STV9fPTEgX19GTFRfSEFTX0lORklOSVRZX189MSBfX0ZMVF9IQVNfUVVJRVRfTkFOX189MSBfX0ZMVF9NQU5UX0RJR19fPTI0IF9fRkxUX01BWF8xMF9FWFBfXz0zOCBfX0ZMVF9NQVhfRVhQX189MTI4IF9fRkxUX01BWF9fPTMuNDAyODIzNDY2Mzg1Mjg4NTk4MTJlKzM4RiBfX0ZMVF9NSU5fMTBfRVhQX189KC0zNykgX19GTFRfTUlOX0VYUF9fPSgtMTI1KSBfX0ZMVF9NSU5fXz0xLjE3NTQ5NDM1MDgyMjI4NzUwNzk3ZS0zOEYgX19GTFRfUkFESVhfXz0yIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzE9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8yPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfND0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzg9MSBfX0dMSUJDX01JTk9SX189MTIgX19HTElCQ19fPTIgX19HTlVDX0dOVV9JTkxJTkVfXz0xIF9fR05VQ19NSU5PUl9fPTUgX19HTlVDX1BBVENITEVWRUxfXz0xIF9fR05VQ19fPTQgX19HTlVfTElCUkFSWV9fPTYgX19HWFhfQUJJX1ZFUlNJT049MTAwMiBfX0lOVDE2X0MoYyk9YyBfX0lOVDE2X01BWF9fPTMyNzY3IF9fSU5UMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlQzMl9DKGMpPWMgX19JTlQzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UMzJfVFlQRV9fPWludCBfX0lOVDY0X0MoYyk9Y0xMIF9fSU5UNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UNjRfVFlQRV9fPWxvbmdcIGxvbmdcIGludCBfX0lOVDhfQyhjKT1jIF9fSU5UOF9NQVhfXz0xMjcgX19JTlQ4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRNQVhfQyhjKT1jTEwgX19JTlRNQVhfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UTUFYX1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlRQVFJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVFBUUl9UWVBFX189aW50IF9fSU5UX0ZBU1QxNl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0ZBU1QxNl9UWVBFX189aW50IF9fSU5UX0ZBU1QzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0ZBU1QzMl9UWVBFX189aW50IF9fSU5UX0ZBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlRfRkFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlRfRkFTVDhfTUFYX189MTI3IF9fSU5UX0ZBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTEVBU1QxNl9NQVhfXz0zMjc2NyBfX0lOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UX0xFQVNUMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9MRUFTVDMyX1RZUEVfXz1pbnQgX19JTlRfTEVBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlRfTEVBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UX0xFQVNUOF9NQVhfXz0xMjcgX19JTlRfTEVBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTUFYX189MjE0NzQ4MzY0NyBfX0xEQkxfREVOT1JNX01JTl9fPTMuNjQ1MTk5NTMxODgyNDc0NjAyNTNlLTQ5NTFMIF9fTERCTF9ESUdfXz0xOCBfX0xEQkxfRVBTSUxPTl9fPTEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TCBfX0xEQkxfSEFTX0RFTk9STV9fPTEgX19MREJMX0hBU19JTkZJTklUWV9fPTEgX19MREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fTERCTF9NQU5UX0RJR19fPTY0IF9fTERCTF9NQVhfMTBfRVhQX189NDkzMiBfX0xEQkxfTUFYX0VYUF9fPTE2Mzg0IF9fTERCTF9NQVhfXz0xLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTCBfX0xEQkxfTUlOXzEwX0VYUF9fPSgtNDkzMSkgX19MREJMX01JTl9FWFBfXz0oLTE2MzgxKSBfX0xEQkxfTUlOX189My4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkwgX19MT05HX0xPTkdfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fTE9OR19NQVhfXz0yMTQ3NDgzNjQ3TCBfX1BSQUdNQV9SRURFRklORV9FWFROQU1FPTEgX19QVFJESUZGX01BWF9fPTIxNDc0ODM2NDcgX19QVFJESUZGX1RZUEVfXz1pbnQgX19SRUdJU1RFUl9QUkVGSVhfXz0gX19TQ0hBUl9NQVhfXz0xMjcgX19TSFJUX01BWF9fPTMyNzY3IF9fU0lHX0FUT01JQ19NQVhfXz0yMTQ3NDgzNjQ3IF9fU0lHX0FUT01JQ19NSU5fXz0oLTIxNDc0ODM2NDdcIC1cIDEpIF9fU0lHX0FUT01JQ19UWVBFX189aW50IF9fU0laRU9GX0RPVUJMRV9fPTggX19TSVpFT0ZfRkxPQVRfXz00IF9fU0laRU9GX0lOVF9fPTQgX19TSVpFT0ZfTE9OR19ET1VCTEVfXz0xMiBfX1NJWkVPRl9MT05HX0xPTkdfXz04IF9fU0laRU9GX0xPTkdfXz00IF9fU0laRU9GX1BPSU5URVJfXz00IF9fU0laRU9GX1BUUkRJRkZfVF9fPTQgX19TSVpFT0ZfU0hPUlRfXz0yIF9fU0laRU9GX1NJWkVfVF9fPTQgX19TSVpFT0ZfV0NIQVJfVF9fPTQgX19TSVpFT0ZfV0lOVF9UX189NCBfX1NJWkVfTUFYX189NDI5NDk2NzI5NVUgX19TSVpFX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fU1REQ19IT1NURURfXz0xIF9fU1REQ19fPTEgX19VSU5UMTZfQyhjKT1jIF9fVUlOVDE2X01BWF9fPTY1NTM1IF9fVUlOVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlQzMl9DKGMpPWNVIF9fVUlOVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVDY0X0MoYyk9Y1VMTCBfX1VJTlQ2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlQ2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlQ4X0MoYyk9YyBfX1VJTlQ4X01BWF9fPTI1NSBfX1VJTlQ4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRNQVhfQyhjKT1jVUxMIF9fVUlOVE1BWF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlRNQVhfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UUFRSX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVFBUUl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDE2X01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9GQVNUMTZfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfRkFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDhfTUFYX189MjU1IF9fVUlOVF9GQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UX0xFQVNUMTZfTUFYX189NjU1MzUgX19VSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9MRUFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIF9fVUlOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDhfTUFYX189MjU1IF9fVUlOVF9MRUFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVVNFUl9MQUJFTF9QUkVGSVhfXz0gX19VU0VfQlNEPTEgX19VU0VfRklMRV9PRkZTRVQ2ND0xIF9fVVNFX0dOVT0xIF9fVVNFX0xBUkdFRklMRTY0PTEgX19VU0VfTEFSR0VGSUxFPTEgX19VU0VfTUlTQz0xIF9fVVNFX1BPU0lYMTk5MzA5PTEgX19VU0VfUE9TSVgxOTk1MDY9MSBfX1VTRV9QT1NJWDI9MSBfX1VTRV9QT1NJWD0xIF9fVVNFX1JFRU5UUkFOVD0xIF9fVVNFX1NWSUQ9MSBfX1VTRV9VTklYOTg9MSBfX1VTRV9YT1BFTj0xIF9fVVNFX1hPUEVOX0VYVEVOREVEPTEgX19WRVJTSU9OX189IjQuNS4xIiBfX1dDSEFSX01BWF9fPTIxNDc0ODM2NDdMIF9fV0NIQVJfTUlOX189KC0yMTQ3NDgzNjQ3TFwgLVwgMSkgX19XQ0hBUl9UWVBFX189bG9uZ1wgaW50IF9fV0lOVF9NQVhfXz00Mjk0OTY3Mjk1VSBfX1dJTlRfTUlOX189MFUgX19XSU5UX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fZ251X2xpbnV4X189MSBfX2kzODY9MSBfX2kzODZfXz0xIF9faTU4Nj0xIF9faTU4Nl9fPTEgX19saW51eD0xIF9fbGludXhfXz0xIF9fcGVudGl1bT0xIF9fcGVudGl1bV9fPTEgX190dW5lX2k1ODZfXz0xIF9fdHVuZV9wZW50aXVtX189MSBfX3VuaXg9MSBfX3VuaXhfXz0xIGkzODY9MSBsaW51eD0xIHVuaXg9MScKK2RfbnZfcHJlc2VydmVzX3V2PSdkZWZpbmUnCitkX3ByaW50Zl9mb3JtYXRfbnVsbD0nZGVmaW5lJworZF91MzJhbGlnbj0ndW5kZWYnCitnaWRmb3JtYXQ9JyJsdSInCitpMzJ0eXBlPSdsb25nJworaTY0dHlwZT0nbG9uZyBsb25nJworaXZzaXplPSc0JworbG9uZ2RibHNpemU9JzEyJworbG9uZ3NpemU9JzQnCitteXVuYW1lPSdsaW51eCBxZW11eDg2IDIuNi4zNy1yYzUteW9jdG8tc3RhbmRhcmQrICMxIHByZWVtcHQgbW9uIGRlYyAyMCAxNDoyMToyNyBwc3QgMjAxMCBpNjg2IGdudWxpbnV4ICcKK25lZWRfdmFfY29weT0ndW5kZWYnCituZXRkYl9ob3N0X3R5cGU9J2NvbnN0IHZvaWQgKicKK252X3ByZXNlcnZlc191dl9iaXRzPSczMicKK3B0cnNpemU9JzQnCitxdWFka2luZD0nMycKK3F1YWR0eXBlPSdsb25nIGxvbmcnCitzR01USU1FX21heD0nMjE0NzQ4MzY0NycKK3NHTVRJTUVfbWluPSctMjE0NzQ4MzY0OCcKK3NMT0NBTFRJTUVfbWF4PScyMTQ3NDgzNjQ3Jworc0xPQ0FMVElNRV9taW49Jy0yMTQ3NDgzNjQ4Jworc1BSSVhVNjQ9JyJMWCInCitzUFJJZDY0PSciTGQiJworc1BSSWk2ND0nIkxpIicKK3NQUklvNjQ9JyJMbyInCitzUFJJdTY0PSciTHUiJworc1BSSXg2ND0nIkx4IicKK3NlbGVjdG1pbmJpdHM9JzMyJworc2l6ZXNpemU9JzQnCit1MzJ0eXBlPSd1bnNpZ25lZCBsb25nJwordTY0dHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJwordWlkZm9ybWF0PScibHUiJwordXF1YWR0eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnCit1c2U2NGJpdGFsbD0ndW5kZWYnCit1c2U2NGJpdGludD0ndW5kZWYnCit1dnNpemU9JzQnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OWE5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzQzMjEnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzEyMzQnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjlkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NApAQCAtMCwwICsxLDM4IEBACithbGlnbmJ5dGVzPSc4JworY2ZfdGltZT0nVGh1IERlYyAyMyAwMjowNjo0MiBVVEMgMjAxMCcKK2NwcHN5bWJvbHM9J19GSUxFX09GRlNFVF9CSVRTPTY0IF9HTlVfU09VUkNFPTEgX0xBUkdFRklMRTY0X1NPVVJDRT0xIF9MQVJHRUZJTEVfU09VUkNFPTEgX0xQNjQ9MSBfUE9TSVhfQ19TT1VSQ0U9MjAwODA5TCBfUE9TSVhfU09VUkNFPTEgX1JFRU5UUkFOVD0xIF9YT1BFTl9TT1VSQ0U9NzAwIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSBfX0JJR0dFU1RfQUxJR05NRU5UX189MTYgX19DSEFSMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fQ0hBUjMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fQ0hBUl9CSVRfXz04IF9fREJMX0RFTk9STV9NSU5fXz0oKGRvdWJsZSk0Ljk0MDY1NjQ1ODQxMjQ2NTQ0MTc3ZS0zMjRMKSBfX0RCTF9ESUdfXz0xNSBfX0RCTF9FUFNJTE9OX189KChkb3VibGUpMi4yMjA0NDYwNDkyNTAzMTMwODA4NWUtMTZMKSBfX0RCTF9IQVNfREVOT1JNX189MSBfX0RCTF9IQVNfSU5GSU5JVFlfXz0xIF9fREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fREJMX01BTlRfRElHX189NTMgX19EQkxfTUFYXzEwX0VYUF9fPTMwOCBfX0RCTF9NQVhfRVhQX189MTAyNCBfX0RCTF9NQVhfXz0oKGRvdWJsZSkxLjc5NzY5MzEzNDg2MjMxNTcwODE1ZSszMDhMKSBfX0RCTF9NSU5fMTBfRVhQX189KC0zMDcpIF9fREJMX01JTl9FWFBfXz0oLTEwMjEpIF9fREJMX01JTl9fPSgoZG91YmxlKTIuMjI1MDczODU4NTA3MjAxMzgzMDllLTMwOEwpIF9fREVDMTI4X0VQU0lMT05fXz0xRS0zM0RMIF9fREVDMTI4X01BTlRfRElHX189MzQgX19ERUMxMjhfTUFYX0VYUF9fPTYxNDUgX19ERUMxMjhfTUFYX189OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFNjE0NERMIF9fREVDMTI4X01JTl9FWFBfXz0oLTYxNDIpIF9fREVDMTI4X01JTl9fPTFFLTYxNDNETCBfX0RFQzEyOF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDNETCBfX0RFQzMyX0VQU0lMT05fXz0xRS02REYgX19ERUMzMl9NQU5UX0RJR19fPTcgX19ERUMzMl9NQVhfRVhQX189OTcgX19ERUMzMl9NQVhfXz05Ljk5OTk5OUU5NkRGIF9fREVDMzJfTUlOX0VYUF9fPSgtOTQpIF9fREVDMzJfTUlOX189MUUtOTVERiBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMUUtOTVERiBfX0RFQzY0X0VQU0lMT05fXz0xRS0xNUREIF9fREVDNjRfTUFOVF9ESUdfXz0xNiBfX0RFQzY0X01BWF9FWFBfXz0zODUgX19ERUM2NF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OUUzODRERCBfX0RFQzY0X01JTl9FWFBfXz0oLTM4MikgX19ERUM2NF9NSU5fXz0xRS0zODNERCBfX0RFQzY0X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzREQgX19ERUNJTUFMX0JJRF9GT1JNQVRfXz0xIF9fREVDSU1BTF9ESUdfXz0yMSBfX0RFQ19FVkFMX01FVEhPRF9fPTIgX19FTEZfXz0xIF9fRklOSVRFX01BVEhfT05MWV9fPTAgX19GTFRfREVOT1JNX01JTl9fPTEuNDAxMjk4NDY0MzI0ODE3MDcwOTJlLTQ1RiBfX0ZMVF9ESUdfXz02IF9fRkxUX0VQU0lMT05fXz0xLjE5MjA5Mjg5NTUwNzgxMjUwMDAwZS03RiBfX0ZMVF9FVkFMX01FVEhPRF9fPTAgX19GTFRfSEFTX0RFTk9STV9fPTEgX19GTFRfSEFTX0lORklOSVRZX189MSBfX0ZMVF9IQVNfUVVJRVRfTkFOX189MSBfX0ZMVF9NQU5UX0RJR19fPTI0IF9fRkxUX01BWF8xMF9FWFBfXz0zOCBfX0ZMVF9NQVhfRVhQX189MTI4IF9fRkxUX01BWF9fPTMuNDAyODIzNDY2Mzg1Mjg4NTk4MTJlKzM4RiBfX0ZMVF9NSU5fMTBfRVhQX189KC0zNykgX19GTFRfTUlOX0VYUF9fPSgtMTI1KSBfX0ZMVF9NSU5fXz0xLjE3NTQ5NDM1MDgyMjI4NzUwNzk3ZS0zOEYgX19GTFRfUkFESVhfXz0yIF9fR0NDX0hBVkVfRFdBUkYyX0NGSV9BU009MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8xPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMj0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzQ9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF84PTEgX19HTElCQ19NSU5PUl9fPTEyIF9fR0xJQkNfXz0yIF9fR05VQ19HTlVfSU5MSU5FX189MSBfX0dOVUNfTUlOT1JfXz01IF9fR05VQ19QQVRDSExFVkVMX189MSBfX0dOVUNfXz00IF9fR05VX0xJQlJBUllfXz02IF9fR1hYX0FCSV9WRVJTSU9OPTEwMDIgX19JTlQxNl9DKGMpPWMgX19JTlQxNl9NQVhfXz0zMjc2NyBfX0lOVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UMzJfQyhjKT1jIF9fSU5UMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVDMyX1RZUEVfXz1pbnQgX19JTlQ2NF9DKGMpPWNMIF9fSU5UNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlQ2NF9UWVBFX189bG9uZ1wgaW50IF9fSU5UOF9DKGMpPWMgX19JTlQ4X01BWF9fPTEyNyBfX0lOVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVE1BWF9DKGMpPWNMIF9fSU5UTUFYX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UTUFYX1RZUEVfXz1sb25nXCBpbnQgX19JTlRQVFJfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRQVFJfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUMTZfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRfRkFTVDE2X1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDMyX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0ZBU1QzMl9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0ZBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUOF9NQVhfXz0xMjcgX19JTlRfRkFTVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVF9MRUFTVDE2X01BWF9fPTMyNzY3IF9fSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlRfTEVBU1QzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0xFQVNUMzJfVFlQRV9fPWludCBfX0lOVF9MRUFTVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9MRUFTVDhfTUFYX189MTI3IF9fSU5UX0xFQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX01BWF9fPTIxNDc0ODM2NDcgX19MREJMX0RFTk9STV9NSU5fXz0zLjY0NTE5OTUzMTg4MjQ3NDYwMjUzZS00OTUxTCBfX0xEQkxfRElHX189MTggX19MREJMX0VQU0lMT05fXz0xLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUwgX19MREJMX0hBU19ERU5PUk1fXz0xIF9fTERCTF9IQVNfSU5GSU5JVFlfXz0xIF9fTERCTF9IQVNfUVVJRVRfTkFOX189MSBfX0xEQkxfTUFOVF9ESUdfXz02NCBfX0xEQkxfTUFYXzEwX0VYUF9fPTQ5MzIgX19MREJMX01BWF9FWFBfXz0xNjM4NCBfX0xEQkxfTUFYX189MS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkwgX19MREJMX01JTl8xMF9FWFBfXz0oLTQ5MzEpIF9fTERCTF9NSU5fRVhQX189KC0xNjM4MSkgX19MREJMX01JTl9fPTMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMIF9fTE9OR19MT05HX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0xPTkdfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19MUDY0X189MSBfX01NWF9fPTEgX19QUkFHTUFfUkVERUZJTkVfRVhUTkFNRT0xIF9fUFRSRElGRl9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX1BUUkRJRkZfVFlQRV9fPWxvbmdcIGludCBfX1JFR0lTVEVSX1BSRUZJWF9fPSBfX1NDSEFSX01BWF9fPTEyNyBfX1NIUlRfTUFYX189MzI3NjcgX19TSUdfQVRPTUlDX01BWF9fPTIxNDc0ODM2NDcgX19TSUdfQVRPTUlDX01JTl9fPSgtMjE0NzQ4MzY0N1wgLVwgMSkgX19TSUdfQVRPTUlDX1RZUEVfXz1pbnQgX19TSVpFT0ZfRE9VQkxFX189OCBfX1NJWkVPRl9GTE9BVF9fPTQgX19TSVpFT0ZfSU5UX189NCBfX1NJWkVPRl9MT05HX0RPVUJMRV9fPTE2IF9fU0laRU9GX0xPTkdfTE9OR19fPTggX19TSVpFT0ZfTE9OR19fPTggX19TSVpFT0ZfUE9JTlRFUl9fPTggX19TSVpFT0ZfUFRSRElGRl9UX189OCBfX1NJWkVPRl9TSE9SVF9fPTIgX19TSVpFT0ZfU0laRV9UX189OCBfX1NJWkVPRl9XQ0hBUl9UX189NCBfX1NJWkVPRl9XSU5UX1RfXz00IF9fU0laRV9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fU0laRV9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1NTRTJfTUFUSF9fPTEgX19TU0UyX189MSBfX1NTRV9NQVRIX189MSBfX1NTRV9fPTEgX19TVERDX0hPU1RFRF9fPTEgX19TVERDX189MSBfX1VJTlQxNl9DKGMpPWMgX19VSU5UMTZfTUFYX189NjU1MzUgX19VSU5UMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVDMyX0MoYyk9Y1UgX19VSU5UMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UNjRfQyhjKT1jVUwgX19VSU5UNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlQ2NF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlQ4X0MoYyk9YyBfX1VJTlQ4X01BWF9fPTI1NSBfX1VJTlQ4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRNQVhfQyhjKT1jVUwgX19VSU5UTUFYX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UTUFYX1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVFBUUl9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVFBUUl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDE2X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1QxNl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDMyX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1QzMl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDhfTUFYX189MjU1IF9fVUlOVF9GQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UX0xFQVNUMTZfTUFYX189NjU1MzUgX19VSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9MRUFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUOF9NQVhfXz0yNTUgX19VSU5UX0xFQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VU0VSX0xBQkVMX1BSRUZJWF9fPSBfX1VTRV9CU0Q9MSBfX1VTRV9GSUxFX09GRlNFVDY0PTEgX19VU0VfR05VPTEgX19VU0VfTEFSR0VGSUxFNjQ9MSBfX1VTRV9MQVJHRUZJTEU9MSBfX1VTRV9NSVNDPTEgX19VU0VfUE9TSVgxOTkzMDk9MSBfX1VTRV9QT1NJWDE5OTUwNj0xIF9fVVNFX1BPU0lYMj0xIF9fVVNFX1BPU0lYPTEgX19VU0VfUkVFTlRSQU5UPTEgX19VU0VfU1ZJRD0xIF9fVVNFX1VOSVg5OD0xIF9fVVNFX1hPUEVOPTEgX19VU0VfWE9QRU5fRVhURU5ERUQ9MSBfX1ZFUlNJT05fXz0iNC41LjEiIF9fV0NIQVJfTUFYX189MjE0NzQ4MzY0NyBfX1dDSEFSX01JTl9fPSgtMjE0NzQ4MzY0N1wgLVwgMSkgX19XQ0hBUl9UWVBFX189aW50IF9fV0lOVF9NQVhfXz00Mjk0OTY3Mjk1VSBfX1dJTlRfTUlOX189MFUgX19XSU5UX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fYW1kNjQ9MSBfX2FtZDY0X189MSBfX2dudV9saW51eF9fPTEgX19rOD0xIF9fazhfXz0xIF9fbGludXg9MSBfX2xpbnV4X189MSBfX3VuaXg9MSBfX3VuaXhfXz0xIF9feDg2XzY0PTEgX194ODZfNjRfXz0xIGxpbnV4PTEgdW5peD0xJworZF9udl9wcmVzZXJ2ZXNfdXY9J3VuZGVmJworZF9wcmludGZfZm9ybWF0X251bGw9J3VuZGVmJworZF91MzJhbGlnbj0nZGVmaW5lJworZ2lkZm9ybWF0PScidSInCitpMzJ0eXBlPSdpbnQnCitpNjR0eXBlPSdsb25nJworaXZzaXplPSc4JworbG9uZ2RibHNpemU9JzE2JworbG9uZ3NpemU9JzgnCitteXVuYW1lPSdsaW51eCBxZW11eDg2LTY0IDIuNi4zNy1yYzUteW9jdG8tc3RhbmRhcmQrICMxIHNtcCBwcmVlbXB0IG1vbiBkZWMgMjAgMTc6MTk6NTAgcHN0IDIwMTAgeDg2XzY0IGdudWxpbnV4ICcKK25lZWRfdmFfY29weT0nZGVmaW5lJworbmV0ZGJfaG9zdF90eXBlPSdjaGFyIConCitudl9wcmVzZXJ2ZXNfdXZfYml0cz0nNTMnCitwdHJzaXplPSc4JworcXVhZGtpbmQ9JzInCitxdWFkdHlwZT0nbG9uZycKK3NHTVRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NHTVRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzTE9DQUxUSU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzTE9DQUxUSU1FX21pbj0nLTYyMTY3MjE5MjAwJworc1BSSVhVNjQ9JyJsWCInCitzUFJJZDY0PScibGQiJworc1BSSWk2ND0nImxpIicKK3NQUklvNjQ9JyJsbyInCitzUFJJdTY0PScibHUiJworc1BSSXg2ND0nImx4IicKK3NlbGVjdG1pbmJpdHM9JzY0Jworc2l6ZXNpemU9JzgnCit1MzJ0eXBlPSd1bnNpZ25lZCBpbnQnCit1NjR0eXBlPSd1bnNpZ25lZCBsb25nJwordWlkZm9ybWF0PScidSInCit1cXVhZHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1c2U2NGJpdGFsbD0nZGVmaW5lJwordXNlNjRiaXRpbnQ9J2RlZmluZScKK3V2c2l6ZT0nOCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtYmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4Y2UzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlCkBAIC0wLDAgKzEgQEAKK2J5dGVvcmRlcj0nODc2NTQzMjEnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2QyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzEyMzQ1Njc4JwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2Nyb3NzLWdlbmVyYXRlX3V1ZG1hcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBhZDYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjE0LjIvTWFrZWZpbGUuU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL01ha2VmaWxlLlNICisrKysgcGVybC01LjE0LjIvTWFrZWZpbGUuU0gKK0BAIC02MjIsNyArNjIyLDcgQEAgYml0Y291bnQuaDogZ2VuZXJhdGVfdXVkbWFwJChIT1NUX0VYRV9FWAorIAkkKFJVTikgLi9nZW5lcmF0ZV91dWRtYXAkKEhPU1RfRVhFX0VYVCkgdXVkbWFwLmggYml0Y291bnQuaAorIAorIGdlbmVyYXRlX3V1ZG1hcCQoSE9TVF9FWEVfRVhUKTogZ2VuZXJhdGVfdXVkbWFwJChPQkpfRVhUKQorLQkkKENDKSAtbyBnZW5lcmF0ZV91dWRtYXAkKEVYRV9FWFQpICQoTERGTEFHUykgZ2VuZXJhdGVfdXVkbWFwJChPQkpfRVhUKSAkKGxpYnMpCisrCSQoQlVJTERfQ0MpIC1vIGdlbmVyYXRlX3V1ZG1hcCQoRVhFX0VYVCkgZ2VuZXJhdGVfdXVkbWFwLmMKKyAKKyBtaW5pcGVybG1haW4kKE9CSl9FWFQpOiBtaW5pcGVybG1haW4uYyBwYXRjaGxldmVsLmgKKyAJJChDQ0NNRCkgJChQTERMRkxBR1MpICQqLmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNiOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZDMzZDQ2OTYzMDM1ZWY3MjYxNDRkYzY2YmUyYWU5YzAwYWVjMDMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgMTYgT2N0IDIwMTIgMjM6MDc6NTYgKzAzMDAKK1N1YmplY3Q6IEZpeCBDUEFOOjpGaXJzdFRpbWUgZGVmYXVsdHMgd2l0aCBub25leGlzdGluZyBzaXRlIGRpcnMgaWYgYSBwYXJlbnQKKyBpcyB3cml0YWJsZQorCitUaGUgc2l0ZSBkaXJlY3RvcmllcyBkbyBub3QgZXhpc3Qgb24gYSB0eXBpY2FsIERlYmlhbiBzeXN0ZW0uICBUaGUgYnVpbGQKK3N5c3RlbXMgd2lsbCBjcmVhdGUgdGhlbSB3aGVuIG5lY2Vzc2FyeSwgc28gdGhlcmUncyBubyBuZWVkIGZvciBhIHByb21wdAorc3VnZ2VzdGluZyBsb2NhbDo6bGliIGlmIHRoZSBmaXJzdCBleGlzdGluZyBwYXJlbnQgZGlyZWN0b3J5IGlzIHdyaXRhYmxlLgorCitBbHNvLCB3cml0YWJpbGl0eSBvZiB0aGUgY29yZSBkaXJlY3RvcmllcyBpcyBub3QgaW50ZXJlc3RpbmcgYXMgd2UKK2V4cGxpY2l0bHkgdGVsbCBDUEFOIG5vdCB0byB0b3VjaCB0aG9zZSB3aXRoIElOU1RBTExESVJTPXNpdGUuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjg4ODQyCitQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KK2luZGV4IDMzMDU0Y2QuLjdiMGJlY2YgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCisrKysgYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitAQCAtMjA1NywxMSArMjA1NywzNCBAQCBzdWIgX3ByaW50X3VybGxpc3QgeworICAgICB9OworIH0KKyAKKysjIERlYmlhbiBtb2RpZmljYXRpb246IHJldHVybiB0cnVlIGlmIHRoaXMgZGlyZWN0b3J5CisrIyBvciB0aGUgZmlyc3QgZXhpc3Rpbmcgb25lIHVwd2FyZHMgaXMgd3JpdGFibGUKKytzdWIgX2Nhbl93cml0ZV90b190aGlzX29yX3BhcmVudCB7CisrICAgIG15ICgkZGlyKSA9IEBfOworKyAgICBteSBAcGFydHMgPSBGaWxlOjpTcGVjLT5zcGxpdGRpcigkZGlyKTsKKysgICAgd2hpbGUgKEBwYXJ0cykgeworKyAgICAgICAgbXkgJGN1ciA9IEZpbGU6OlNwZWMtPmNhdGRpcihAcGFydHMpOworKyAgICAgICAgcmV0dXJuIDEgaWYgLXcgJGN1cjsKKysgICAgICAgIHJldHVybiAwIGlmIC1lIF87CisrICAgICAgICBwb3AgQHBhcnRzOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKysjIERlYmlhbiBzcGVjaWZpYyBtb2RpZmljYXRpb246IHRoZSBzaXRlIGRpcmVjdG9yaWVzIGRvbid0IG5lY2Vzc2FyaWx5CisrIyBleGlzdCBvbiB0aGUgc3lzdGVtLCBidXQgdGhlIGJ1aWxkIHN5c3RlbXMgY3JlYXRlIHRoZW0gd2hlbiBuZWNlc3NhcnksCisrIyBzbyByZXR1cm4gdHJ1ZSBpZiB0aGUgZmlyc3QgZXhpc3RpbmcgZGlyZWN0b3J5IHVwd2FyZHMgaXMgd3JpdGFibGUKKysjCisrIyBGdXJ0aGVybW9yZSwgb24gRGViaWFuLCBvbmx5IHRlc3QgdGhlIHNpdGUgZGlyZWN0b3JpZXMKKysjIChpbnN0YWxsc2l0ZSosIGV4cGFuZGVkIHRvIC91c3IvbG9jYWwve3NoYXJlLGxpYn0vcGVybCksCisrIyBub3QgdGhlIGNvcmUgb25lcyAKKysjIChpbnN0YWxsKmxpYiwgZXhwYW5kZWQgdG8gL3Vzci97c2hhcmUsbGlifS9wZXJsKS4KKysjIFdlIHBhc3MgSU5TVEFMTERJUlM9c2l0ZSBieSBkZWZhdWx0IHRvIGtlZXAgQ1BBTiBmcm9tIHRvdWNoaW5nCisrIyB0aGUgY29yZSBkaXJlY3Rvcmllcy4KKysKKyBzdWIgX2Nhbl93cml0ZV90b19saWJkaXJzIHsKKy0gICAgcmV0dXJuIC13ICRDb25maWd7aW5zdGFsbHByaXZsaWJ9CistICAgICAgICAmJiAtdyAkQ29uZmlne2luc3RhbGxhcmNobGlifQorLSAgICAgICAgJiYgLXcgJENvbmZpZ3tpbnN0YWxsc2l0ZWxpYn0KKy0gICAgICAgICYmIC13ICRDb25maWd7aW5zdGFsbHNpdGVhcmNofQorKyAgICByZXR1cm4gX2Nhbl93cml0ZV90b190aGlzX29yX3BhcmVudCgkQ29uZmlne2luc3RhbGxzaXRlbGlifSkKKysgICAgICAgICYmIF9jYW5fd3JpdGVfdG9fdGhpc19vcl9wYXJlbnQoJENvbmZpZ3tpbnN0YWxsc2l0ZWFyY2h9KQorIH0KKyAKKyBzdWIgX3VzaW5nX2luc3RhbGxiYXNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjUyOTUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNWZmMWYyMTQ4NGFhYjY4ZWZlMzIxZmY0YmE1ZDM1OTI4ZjcyYWY5NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBQcm92aWRlIGEgc2Vuc2libGUgSU5TVEFMTERJUlMgZGVmYXVsdCBmb3IgbW9kdWxlcyBpbnN0YWxsZWQgZnJvbQorIENQQU4uCisKK1NvbWUgbW9kdWxlcyB3aGljaCBhcmUgaW5jbHVkZWQgaW4gY29yZSBzZXQgSU5TVEFMTERJUlMgPT4gJ3BlcmwnCitleHBsaWNpdGx5IGluIE1ha2VmaWxlLlBMIG9yIEJ1aWxkLlBMLiAgVGhpcyBtYWtlcyBzZW5zZSBmb3IgdGhlIG5vcm1hbCBASU5DCitvcmRlcmluZywgYnV0IG5vdCBvdXJzLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitpbmRleCA5MThlMDA5Li4zMzA1NGNkIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorKysrIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorQEAgLTEwMjQsNyArMTAyNCw3IEBAIHN1YiBpbml0IHsKKyAgICAgbXlfcHJvbXB0X2xvb3AocHJlZmVyX2luc3RhbGxlciA9PiAnTUInLCAkbWF0Y2hlciwgJ01CfEVVTU18UkFORCcpOworIAorICAgICBpZiAoISRtYXRjaGVyIG9yICdtYWtlcGxfYXJnIG1ha2VfYXJnJyA9fiAvJG1hdGNoZXIvKSB7CistICAgICAgICBteV9kZmx0X3Byb21wdChtYWtlcGxfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisrICAgICAgICBteV9kZmx0X3Byb21wdChtYWtlcGxfYXJnID0+ICJJTlNUQUxMRElSUz1zaXRlIiwgJG1hdGNoZXIpOworICAgICAgICAgbXlfZGZsdF9wcm9tcHQobWFrZV9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKyAgICAgICAgIGlmICggJENQQU46OkNvbmZpZy0+e21ha2VwbF9hcmd9ID1+IC9MSUJTPXxJTkM9LyApIHsKKyAgICAgICAgICAgICAkQ1BBTjo6RnJvbnRlbmQtPm15d2FybigKK0BAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdWIgaW5pdCB7CisgICAgIG15X2RmbHRfcHJvbXB0KG1ha2VfaW5zdGFsbF9hcmcgPT4gJENQQU46OkNvbmZpZy0+e21ha2VfYXJnfSB8fCAiIiwKKyAgICAgICAgICAgICAgICAgICAgJG1hdGNoZXIpOworIAorLSAgICBteV9kZmx0X3Byb21wdChtYnVpbGRwbF9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKysgICAgbXlfZGZsdF9wcm9tcHQobWJ1aWxkcGxfYXJnID0+ICItLWluc3RhbGxkaXJzIHNpdGUiLCAkbWF0Y2hlcik7CisgICAgIG15X2RmbHRfcHJvbXB0KG1idWlsZF9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKyAKKyAgICAgaWYgKGV4aXN0cyAkQ1BBTjo6SGFuZGxlQ29uZmlnOjprZXlze21idWlsZF9pbnN0YWxsX2J1aWxkX2NvbW1hbmR9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODBiZjExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgpAQCAtMCwwICsxLDM0IEBACitGcm9tIDAxNDIxZjhhODBkNWM2MjM5NTk2OTViYTJiODE2N2YzMDExMmQzMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTYgRGVjIDIwMDUgMDE6MzI6MTQgKzExMDAKK1N1YmplY3Q6IFJlbW92ZSBvdmVybHkgcmVzdHJpY3RpdmUgREJfRmlsZSB2ZXJzaW9uIGNoZWNrLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzM0MDA0NworCitQYWNrYWdlIGRlcGVuZGVuY2llcyBlbnN1cmUgdGhlIGNvcnJlY3QgbGlicmFyeSBpcyBsaW5rZWQgYXQgcnVuLXRpbWUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9kYl9maWxlX3Zlci5kaWZmCistLS0KKyBjcGFuL0RCX0ZpbGUvdmVyc2lvbi5jIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMgYi9jcGFuL0RCX0ZpbGUvdmVyc2lvbi5jCitpbmRleCBlMDFmNmY2Li41NDRlNmVlIDEwMDY0NAorLS0tIGEvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworKysrIGIvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworQEAgLTQ4LDYgKzQ4LDcgQEAgX19nZXRCZXJrZWxleURCSW5mbygpCisgCisgICAgICh2b2lkKWRiX3ZlcnNpb24oJk1ham9yLCAmTWlub3IsICZQYXRjaCkgOworIAorKyNpZm5kZWYgREVCSUFOCisgICAgIC8qIENoZWNrIHRoYXQgdGhlIHZlcnNpb25zIG9mIGRiLmggYW5kIGxpYmRiLmEgYXJlIHRoZSBzYW1lICovCisgICAgIGlmIChNYWpvciAhPSBEQl9WRVJTSU9OX01BSk9SIHx8IE1pbm9yICE9IERCX1ZFUlNJT05fTUlOT1IgKQorIAkJLyogfHwgUGF0Y2ggIT0gREJfVkVSU0lPTl9QQVRDSCkgKi8KK0BAIC01NSw2ICs1Niw3IEBAIF9fZ2V0QmVya2VsZXlEQkluZm8oKQorIAljcm9haygiXG5EQl9GaWxlIHdhcyBidWlsZCB3aXRoIGxpYmRiIHZlcnNpb24gJWQuJWQuJWQsXG5idXQgeW91IGFyZSBhdHRlbXB0aW5nIHRvIHJ1biBpdCB3aXRoIGxpYmRiIHZlcnNpb24gJWQuJWQuJWRcbiIsCisgCQlEQl9WRVJTSU9OX01BSk9SLCBEQl9WRVJTSU9OX01JTk9SLCBEQl9WRVJTSU9OX1BBVENILCAKKyAJCU1ham9yLCBNaW5vciwgUGF0Y2gpIDsKKysjZW5kaWYgLyogREVCSUFOICovCisgICAgIAorICAgICAvKiBjaGVjayB0aGF0IGxpYmRiIGlzIHJlY2VudCBlbm91Z2ggIC0tIHdlIG5lZWQgMi4zLjQgb3IgZ3JlYXRlciAqLworICAgICBpZiAoTWFqb3IgPT0gMiAmJiAoTWlub3IgPCAzIHx8IChNaW5vciA9PSAgMyAmJiBQYXRjaCA8IDQpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZWU0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gZGVmNGFhMzgxN2Y5OGFhZTYyNWU2MDFiNzkxZWYwNjgyNzZmMDVkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaWMgSGFyZ3JlYXZlcyA8ZG9tQGVhcnRoLmxpPgorRGF0ZTogTW9uLCAxNyBNYXkgMjAxMCAxMzoyMzowNyArMDMwMAorU3ViamVjdDogUG9pbnQgdXNlcnMgdG8gRGViaWFuIHBhY2thZ2VzIG9mIGRlcHJlY2F0ZWQgY29yZSBtb2R1bGVzCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzQ3NjI4CisKK1NldmVyYWwgbW9kdWxlcyBhcmUgYmVpbmcgZGVwcmVjYXRlZCB3aXRoIHBlcmwgNS4yMC4KK1RvIGdldCBhIGNsZWFuIHRyYW5zaXRpb24sIHBlcmwvcGVybC1tb2R1bGVzIGlzIGdvaW5nIHRvIHJlY29tbWVuZCB0aGUKK3NlcGFyYXRlIERlYmlhbiBwYWNrYWdlcyBvZiB0aGVzZSBmb3Igb25lIHJlbGVhc2UgY3ljbGUgc28gdGhhdCB0aGV5IHdpbGwgYmUKK3B1bGxlZCBpbiBieSBkZWZhdWx0IG9uIHVwZ3JhZGVzLiBUaGlzIGlzIHRha2luZyBwbGFjZSBmb3IgcGVybCA1LjIwL2plc3NpZS4KKworSG93ZXZlciwgb24gc3lzdGVtcyBjb25maWd1cmVkIHRvIGlnbm9yZSByZWNvbW1lbmRhdGlvbnMgdGhlIGRlcHJlY2F0aW9uCit3YXJuaW5ncyB3aWxsIHN0aWxsIGJlIHVzZWZ1bCwgc28gbW9kaWZ5IHRoZW0gc2xpZ2h0bHkgdG8gcG9pbnQgdG8gdGhlCitzZXBhcmF0ZSBwYWNrYWdlcyBpbnN0ZWFkLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKKy0tLQorIGxpYi9kZXByZWNhdGUucG0gfCAxNSArKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2RlcHJlY2F0ZS5wbSBiL2xpYi9kZXByZWNhdGUucG0KK2luZGV4IDQ3YmMxMTIuLmIwYzYxZGYgMTAwNjQ0CistLS0gYS9saWIvZGVwcmVjYXRlLnBtCisrKysgYi9saWIvZGVwcmVjYXRlLnBtCitAQCAtNyw2ICs3LDEzIEBAIG91ciAkVkVSU0lPTiA9IDAuMDM7Cisgb3VyICVDb25maWc7CisgdW5sZXNzICglQ29uZmlnKSB7IHJlcXVpcmUgQ29uZmlnOyAqQ29uZmlnID0gXCVDb25maWc6OkNvbmZpZzsgfQorIAorKyMgRGViaWFuLXNwZWNpZmljIGNoYW5nZTogcmVjb21tZW5kIHRoZSBzZXBhcmF0ZSBEZWJpYW4gcGFja2FnZXMgb2YKKysjIGRlcHJlY2F0ZWQgbW9kdWxlcyB3aGVyZSBhdmFpbGFibGUKKysKKytvdXIgJURFQklBTl9QQUNLQUdFUyA9ICgKKysgICAgIyBOb25lIGZvciB0aGUgcGVybCA1LjIyIGN5Y2xlCisrKTsKKysKKyAjIFRoaXMgaXNuJ3QgYSBwdWJsaWMgQVBJLiBJdCdzIGludGVybmFsIHRvIGNvZGUgbWFpbnRhaW5lZCBieSB0aGUgcGVybC1wb3J0ZXJzCisgIyBJZiB5b3Ugd291bGQgbGlrZSBpdCB0byBiZSBhIHB1YmxpYyBBUEksIHBsZWFzZSBzZW5kIGEgcGF0Y2ggd2l0aAorICMgZG9jdW1lbnRhdGlvbiBhbmQgdGVzdHMuIFVudGlsIHRoZW4sIGl0IG1heSBjaGFuZ2Ugd2l0aG91dCB3YXJuaW5nLgorQEAgLTU4LDkgKzY1LDE1IEBAIEVPTQorIAlpZiAoZGVmaW5lZCAkY2FsbGVyc19iaXRtYXNrCisgCSAgICAmJiAodmVjKCRjYWxsZXJzX2JpdG1hc2ssICR3YXJuaW5nczo6T2Zmc2V0c3tkZXByZWNhdGVkfSwgMSkKKyAJCXx8IHZlYygkY2FsbGVyc19iaXRtYXNrLCAkd2FybmluZ3M6Ok9mZnNldHN7YWxsfSwgMSkpKSB7CistCSAgICB3YXJuIDw8IkVPTSI7CisrCQlpZiAobXkgJGRlYiA9ICRERUJJQU5fUEFDS0FHRVN7JHBhY2thZ2V9KSB7CisrCQkgICAgd2FybiA8PCJFT00iOworKyRwYWNrYWdlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBQZXJsIGNvcmUgZGlzdHJpYnV0aW9uIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSBpbnN0YWxsIHRoZSBzZXBhcmF0ZSAkZGViIHBhY2thZ2UuIEl0IGlzIGJlaW5nIHVzZWQgYXQgJGNhbGxfZmlsZSwgbGluZSAkY2FsbF9saW5lLgorK0VPTQorKwkJfSBlbHNlIHsKKysJCSAgICB3YXJuIDw8IkVPTSI7CisgJHBhY2thZ2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSBDUEFOLiBJdCBpcyBiZWluZyB1c2VkIGF0ICRjYWxsX2ZpbGUsIGxpbmUgJGNhbGxfbGluZS4KKyBFT00KKysJCX0KKyAJfQorICAgICB9CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYTJlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBlMThmODFlNjljNTVkNjk4YWJkMjkzZTcxMDYzZDZiNmIyNzVjYzA3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBSZXBsYWNlIGdlbmVyaWMgbWFuKDEpIGluc3RydWN0aW9ucyB3aXRoIERlYmlhbi1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworSW5kaWNhdGUgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBpbnN0YWxsIHRoZSBwZXJsLWRvYyBwYWNrYWdlLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZG9jX2luZm8uZGlmZgorLS0tCisgcG9kL3BlcmwucG9kIHwgMTIgKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wb2QvcGVybC5wb2QgYi9wb2QvcGVybC5wb2QKK2luZGV4IDM2NGU5NTcuLmY5N2UxMDMgMTAwNjQ0CistLS0gYS9wb2QvcGVybC5wb2QKKysrKyBiL3BvZC9wZXJsLnBvZAorQEAgLTI5MSw4ICsyOTEsMTYgQEAgYXV4IGMycGggaDJwaCBoMnhzIHBlcmxidWcgcGwycG0gcG9kMmh0bWwgcG9kMm1hbiBzcGxhaW4geHN1YnBwCisgCisgPWZvciBidWlsZHRvYyBfX0VORF9fCisgCistT24gYSBVbml4LWxpa2Ugc3lzdGVtLCB0aGVzZSBkb2N1bWVudGF0aW9uIGZpbGVzIHdpbGwgdXN1YWxseSBhbHNvIGJlCistYXZhaWxhYmxlIGFzIG1hbnBhZ2VzIGZvciB1c2Ugd2l0aCB0aGUgRjxtYW4+IHByb2dyYW0uCisrT24gRGViaWFuIHN5c3RlbXMsIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIEI8cGVybC1kb2M+IHBhY2thZ2Ugd2hpY2gKKytjb250YWlucyB0aGUgbWFqb3JpdHkgb2YgdGhlIHN0YW5kYXJkIFBlcmwgZG9jdW1lbnRhdGlvbiBhbmQgdGhlCisrRjxwZXJsZG9jPiBwcm9ncmFtLgorKworK0V4dGVuc2l2ZSBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gZm9yIFBlcmwgbW9kdWxlcyBpcyBhdmFpbGFibGUsIGJvdGgKKyt0aG9zZSBkaXN0cmlidXRlZCB3aXRoIFBlcmwgYW5kIHRoaXJkLXBhcnR5IG1vZHVsZXMgd2hpY2ggYXJlIHBhY2thZ2VkCisrb3IgbG9jYWxseSBpbnN0YWxsZWQuCisrCisrWW91IHNob3VsZCBiZSBhYmxlIHRvIHZpZXcgUGVybCdzIGRvY3VtZW50YXRpb24gd2l0aCB5b3VyIG1hbigxKQorK3Byb2dyYW0gb3IgcGVybGRvYygxKS4KKyAKKyBTb21lIGRvY3VtZW50YXRpb24gaXMgbm90IGF2YWlsYWJsZSBhcyBtYW4gcGFnZXMsIHNvIGlmIGEKKyBjcm9zcy1yZWZlcmVuY2UgaXMgbm90IGZvdW5kIGJ5IG1hbiwgdHJ5IGl0IHdpdGggTDxwZXJsZG9jPi4gIFBlcmxkb2MgY2FuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NGIyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2VuYzJ4c19pbmMuZGlmZgpAQCAtMCwwICsxLDcwIEBACitGcm9tIDdmZTU5YTNkMDYwMWM2ZDg2MzRlYWU0Zjk5ZGFlMzAyNGNkMDJhOTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogVHdlYWsgZW5jMnhzIHRvIGZvbGxvdyBzeW1saW5rcyBhbmQgaWdub3JlIG1pc3NpbmcgQElOQyBkaXJlY3Rvcmllcy4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8yOTAzMzYKKworLSBpZ25vcmUgbWlzc2luZyBkaXJlY3RvcmllcywKKy0gZm9sbG93IHN5bWxpbmtzICgvdXNyL3NoYXJlL3BlcmwvNS44IC0+IDUuOC40KS4KKy0gZmlsdGVyICIuIiBvdXQgd2hlbiBydW5uaW5nICJlbmMyeHMgLUMiLCBpdCdzIHVubmVjZXNzYXJ5IGFuZCBjYXVzZXMKKyAgaXNzdWVzIHdpdGggZm9sbG93ID0+IDEgKHNlZSAjNjAzNjg2IGFuZCBbcnQuY3Bhbi5vcmcgIzY0NTg1XSkKKworUGF0Y2gtTmFtZTogZGViaWFuL2VuYzJ4c19pbmMuZGlmZgorLS0tCisgY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cyB8IDggKysrKy0tLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC50IHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMgYi9jcGFuL0VuY29kZS9iaW4vZW5jMnhzCitpbmRleCAxOWYyYjJiLi40ZDY0ZTM4IDEwMDY0NAorLS0tIGEvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworKysrIGIvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworQEAgLTk0NCwxMSArOTQ0LDExIEBAIHVzZSB2YXJzIHF3KAorIHN1YiBmaW5kX2UyeHsKKyAgICAgZXZhbCB7IHJlcXVpcmUgRmlsZTo6RmluZDsgfTsKKyAgICAgbXkgKEBpbmMsICVlMnhfZGlyKTsKKy0gICAgZm9yIG15ICRpbmMgKEBJTkMpeworKyAgICBmb3IgbXkgJGluYyAoZ3JlcCAtZCwgQElOQyl7CisgICAgIHB1c2ggQGluYywgJGluYyB1bmxlc3MgJGluYyBlcSAnLic7ICNza2lwIGN1cnJlbnQgZGlyCisgICAgIH0KKyAgICAgRmlsZTo6RmluZDo6ZmluZCgKKy0gICAgICAgICBzdWIgeworKyAgICAgICAgIHsgd2FudGVkID0+IHN1YiB7CisgICAgICAgICAgbXkgKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkLCRyZGV2LCRzaXplLAorICAgICAgICAgICAgICAkYXRpbWUsJG10aW1lLCRjdGltZSwkYmxrc2l6ZSwkYmxvY2tzKQorICAgICAgICAgICAgICA9IGxzdGF0KCRfKSBvciByZXR1cm47CitAQCAtOTU4LDcgKzk1OCw3IEBAIHN1YiBmaW5kX2UyeHsKKyAgICAgICAgICAgICAgJGUyeF9kaXJ7JEZpbGU6OkZpbmQ6OmRpcn0gfHw9ICRtdGltZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuOworLSAgICAgICAgIH0sIEBpbmMpOworKyAgICAgICAgIH0sIGZvbGxvdyA9PiAxfSwgQGluYyk7CisgICAgIHdhcm4gam9pbigiXG4iLCBrZXlzICVlMnhfZGlyKSwgIlxuIjsKKyAgICAgZm9yIG15ICRkIChzb3J0IHskZTJ4X2RpcnskYX0gPD0+ICRlMnhfZGlyeyRifX0ga2V5cyAlZTJ4X2Rpcil7CisgICAgICRfRTJYID0gJGQ7CitAQCAtMTAyNSw3ICsxMDI1LDcgQEAgc3ViIG1ha2VfY29uZmlnbG9jYWxfcG0geworIAkgICAgJExvY2FsTW9keyRlbmN9IHx8PSAkbW9kOworIAl9CisgICAgIH07CistICAgIEZpbGU6OkZpbmQ6OmZpbmQoe3dhbnRlZCA9PiAkd2FudGVkfSwgQElOQyk7CisrICAgIEZpbGU6OkZpbmQ6OmZpbmQoe3dhbnRlZCA9PiAkd2FudGVkLCBmb2xsb3cgPT4gMX0sIGdyZXAgLWQgJiYgIS9eXC4vLCBASU5DKTsKKyAgICAgJF9Nb2RMaW5lcyA9ICIiOworICAgICBmb3IgbXkgJGVuYyAoIHNvcnQga2V5cyAlTG9jYWxNb2QgKSB7CisgICAgICAgICAkX01vZExpbmVzIC49CitkaWZmIC0tZ2l0IGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudCBiL3QvcG9ydGluZy9jdXN0b21pemVkLnQKK2luZGV4IDQ1ZmNhZmIuLjNiZDZhZGIgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC50CisrKysgYi90L3BvcnRpbmcvY3VzdG9taXplZC50CitAQCAtMTAxLDggKzEwMSwxMSBAQCBmb3JlYWNoIG15ICRtb2R1bGUgKCBzb3J0IGtleXMgJU1vZHVsZXMgKSB7CisgICAgICAgcHJpbnQgJGRhdGFfZmggam9pbignICcsICRtb2R1bGUsICRmaWxlLCAkaWQpLCAiXG4iOworICAgICAgIG5leHQ7CisgICAgIH0KKytTS0lQOiB7CisrICAgIHNraXAoIiRmaWxlIG1vZGlmaWVkIGZvciBEZWJpYW4iLCAxKSBpZiAkZmlsZSBlcSAnY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cyc7CisgICAgIG15ICRzaG91bGRfYmUgPSAkY3VzdG9taXNlZHsgJG1vZHVsZSB9LT57ICRmaWxlIH07CisgICAgIGlzKCAkaWQsICRzaG91bGRfYmUsICJTSEEgZm9yICRmaWxlIG1hdGNoZXMgc3Rhc2hlZCBTSEEiICk7CisrfQorICAgfQorIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXJybm9fdmVyLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNTljNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gODI3ZWVlMjI1ODk3YzM1ZWM5NzE5NGE1OTcxYmY0YmZjZjI1MDc0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxNiBEZWMgMjAwNSAwMTozMjoxNCArMTEwMAorU3ViamVjdDogUmVtb3ZlIEVycm5vIHZlcnNpb24gY2hlY2sgZHVlIHRvIHVwZ3JhZGUgcHJvYmxlbXMgd2l0aCBsb25nLXJ1bm5pbmcKKyBwcm9jZXNzZXMuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMzQzMzUxCisKK1JlbW92ZSB2ZXJzaW9uIGNoZWNrIHdoaWNoIGNhbiBjYXVzZSBwcm9ibGVtcyBmb3IgbG9uZyBydW5uaW5nCitwcm9jZXNzZXMgZW1iZWRkaW5nIHBlcmwgd2hlbiB1cGdyYWRpbmcgdG8gYSBuZXdlciB2ZXJzaW9uLAorY29tcGF0aWJsZSwgYnV0IGJ1aWx0IG9uIGEgZGlmZmVyZW50IG1hY2hpbmUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9lcnJub192ZXIuZGlmZgorLS0tCisgZXh0L0Vycm5vL0Vycm5vX3BtLlBMIHwgNSAtLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0L0Vycm5vL0Vycm5vX3BtLlBMIGIvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCitpbmRleCBjNmJmYTA2Li41MTllNWM3IDEwMDY0NAorLS0tIGEvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCisrKysgYi9leHQvRXJybm8vRXJybm9fcG0uUEwKK0BAIC0yNzgsMTMgKzI3OCw4IEBAIHN1YiB3cml0ZV9lcnJub19wbSB7CisgCisgcGFja2FnZSBFcnJubzsKKyByZXF1aXJlIEV4cG9ydGVyOworLXVzZSBDb25maWc7CisgdXNlIHN0cmljdDsKKyAKKy0iXCRDb25maWd7J2FyY2huYW1lJ30tXCRDb25maWd7J29zdmVycyd9IiBlcQorLSIkYXJjaG5hbWUtJENvbmZpZ3snb3N2ZXJzJ30iIG9yCistCWRpZSAiRXJybm8gYXJjaGl0ZWN0dXJlICgkYXJjaG5hbWUtJENvbmZpZ3snb3N2ZXJzJ30pIGRvZXMgbm90IG1hdGNoIGV4ZWN1dGFibGUgYXJjaGl0ZWN0dXJlIChcJENvbmZpZ3snYXJjaG5hbWUnfS1cJENvbmZpZ3snb3N2ZXJzJ30pIjsKKy0KKyBvdXIgXCRWRVJTSU9OID0gIiRWRVJTSU9OIjsKKyBcJFZFUlNJT04gPSBldmFsIFwkVkVSU0lPTjsKKyBvdXIgXEBJU0EgPSAnRXhwb3J0ZXInOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA0MzEyNzUwNzhiMDQ5MGQyZTA5MjQ0MmQ5NTgyYmUwNmJiOTViMzU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAxMCBNYXkgMjAxNCAyMzozNDoxNCArMDMwMAorU3ViamVjdDogRVU6TU06IHNldCBsb2NhdGlvbiBvZiBsaWJwZXJsLmEgdW5kZXIgL3Vzci9saWIKKworVGhlIERlYmlhbiBwYWNrYWdpbmcgbW92ZXMgbGlicGVybC5hIGEgY291cGxlIG9mIGxldmVscyB1cCBmcm9tIHRoZQorQ09SRSBkaXJlY3RvcnkgdG8gbWF0Y2ggb3RoZXIgc3RhdGljIGxpYnJhcmllcy4KKworUGF0Y2gtTmFtZTogZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAyICstCisgcHAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCA1ZjFiODdmLi41NzBhNjMxIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjUwNSw3ICsyNTA1LDcgQEAgTUFQX1BSRUxJQlMgICA9ICRDb25maWd7cGVybGxpYnN9ICRDb25maWd7Y3J5cHRsaWJ9CisgCSgkbHBlcmwgPSAkbGlicGVybCkgPX4gcy9cJFwoQVwpLyRzZWxmLT57TElCX0VYVH0vOworICAgICB9CisgICAgIHVubGVzcyAoJGxpYnBlcmwgJiYgLWYgJGxwZXJsKSB7ICMgSWx5YSdzIGNvZGUuLi4KKy0JbXkgJGRpciA9ICRzZWxmLT57UEVSTF9TUkN9IHx8ICIkc2VsZi0+e1BFUkxfQVJDSExJQn0vQ09SRSI7CisrCW15ICRkaXIgPSAkc2VsZi0+e1BFUkxfU1JDfSB8fCAiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9Ly4uLy4uIjsKKyAJJGRpciA9ICIkc2VsZi0+e1BFUkxfQVJDSExJQn0vLi4iIGlmICRzZWxmLT57VU5JTlNUQUxMRURfUEVSTH07CisgCSRsaWJwZXJsIHx8PSAibGlicGVybCRzZWxmLT57TElCX0VYVH0iOworIAkkbGlicGVybCAgID0gIiRkaXIvJGxpYnBlcmwiOworZGlmZiAtLWdpdCBhL3BwLmMgYi9wcC5jCitpbmRleCA0MmYxNTZhLi43N2MxMjc5IDEwMDY0NAorLS0tIGEvcHAuYworKysrIGIvcHAuYworQEAgLTEsNCArMSw0IEBACistLyogICAgcHAuYworKyAvKiAgICBwcC5jCisgICoKKyAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisgICogICAgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBieSBMYXJyeSBXYWxsIGFuZCBvdGhlcnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Zha2Vyb290LmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDYxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMjdhZTdiMTgwNzhkODAxYTJjOTQzYWE2ZGUyZjdlOTgwODE3NzI1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUG9zdHBvbmUgTERfTElCUkFSWV9QQVRIIGV2YWx1YXRpb24gdG8gdGhlIGJpbmFyeSB0YXJnZXRzLgorCitNb2RpZnkgdGhlIHNldHRpbmcgb2YgTERfTElCUkFSWV9QQVRIIHRvIGFwcGVuZCBwcmUtZXhpc3RpbmcgdmFsdWVzIGF0IHRoZQordGltZSB0aGUgcnVsZSBpcyBldmFsdWF0ZWQgcmF0aGVyIHRoYW4gd2hlbiB0aGUgTWFrZWZpbGUgaXMgY3JlYXRlZC4KKworVGhpcyBpcyByZXF1aXJlZCB3aGVuIGJ1aWxkaW5nIHBhY2thZ2VzIHdpdGggZHBrZy1idWlsZHBhY2thZ2UgYW5kIGZha2Vyb290LAorc2luY2UgZmFrZXJvb3QgKHdoaWNoIG5vdyBzZXRzIExEX0xJQlJBUllfUEFUSCkgaXMgbm90IHVzZWQgZm9yIHRoZSAiYnVpbGQiCitydWxlIHdoZXJlIHRoZSBNYWtlZmlsZSBpcyBjcmVhdGVkLCBidXQgaXMgZm9yIHRoZSBjbGVhbi9iaW5hcnkqIHRhcmdldHMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9mYWtlcm9vdC5kaWZmCistLS0KKyBNYWtlZmlsZS5TSCB8IDcgKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5TSCBiL01ha2VmaWxlLlNICitpbmRleCAwMzRkODEyLi4wNGRkN2Q1IDEwMDc1NQorLS0tIGEvTWFrZWZpbGUuU0gKKysrKyBiL01ha2VmaWxlLlNICitAQCAtMzksMTAgKzM5LDcgQEAgY2FzZSAiJHVzZXNocnBsaWIiIGluCisgdHJ1ZSkKKyAJIyBQcmVmaXggYWxsIHJ1bnMgb2YgJ21pbmlwZXJsJyBhbmQgJ3BlcmwnIHdpdGgKKyAJIyAkbGRsaWJwdGggc28gdGhhdCAuL3BlcmwgZmluZHMgKnRoaXMqIHNoYXJlZCBsaWJwZXJsLgorLQljYXNlICIkTERfTElCUkFSWV9QQVRIIiBpbgorLQknJykgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKy0JKikgICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJExEX0xJQlJBUllfUEFUSCIgYCIgOzsKKy0JZXNhYworKwlsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiJyQke0xEX0xJQlJBUllfUEFUSDorOn0kJExEX0xJQlJBUllfUEFUSCcKKyAKKyAJcGxkbGZsYWdzPSIkY2NjZGxmbGFncyIKKyAJc3RhdGljX2xkZmxhZ3M9JycKK0BAIC0xMTMsNyArMTEwLDcgQEAgdHJ1ZSkKKyAJICAgIDs7CisgCWVzYWMKKyAJY2FzZSAiJGxkbGlicHRobmFtZSIgaW4KKy0JJycpIDs7CisrCScnfExEX0xJQlJBUllfUEFUSCkgOzsKKyAJKikKKyAJICAgIGNhc2UgIiRvc25hbWUiIGluCisgCSAgICBvczIpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE5ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgpAQCAtMCwwICsxLDM1IEBACitGcm9tIGM4MWRiZGVkZmY5ZTliNGZiNzVhYzAyOGFhNzE4ODM4YzAyOTJkMmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWFzIE1hcnNjaGtlIDxhbmRyZWFzLm1hcnNjaGtlQGdvb2dsZW1haWwuY29tPgorRGF0ZTogU2F0LCAxNyBTZXAgMjAxMSAxMTozODo0MiArMDEwMAorU3ViamVjdDogQ29uZmlndXJlIENQQU46OkRpc3RyaWJ1dGlvbiB3aXRoIGNvcnJlY3QgbmFtZSBvZiBodG1sMnRleHQKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82NDA0NzkKK1BhdGNoLU5hbWU6IGRlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCisKK0lmIHlvdSB1c2UgY3BhbiBmcm9tIERlYmlhbiB5b3UgdXN1YWxseSB3aW5kIHVwIHRyeWluZyB0byByZWFkIG9ubGluZQorZG9jdW1lbnRhdGlvbiB0aHJvdWdoIGl0LiBVbmZvcnR1bmF0ZWx5IGNwYW4gY2FuJ3QgZmluZCB0aGUKK2h0bWwydGV4dC5wbCBzY3JpcHQgZXZlbiB0aG91Z2ggaXQgaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBEZWJpYW4KK3BhY2thZ2UgJ2h0bWwydGV4dCcuCisKK1BsZWFzZSBzZWUgdGhlIGF0dGFjaGVkIHBhdGNoIGZvciBhIHF1aWNrIGZpeCBvZiB0aGlzIGlzc3VlLgorCitbTWFpbnRhaW5lcidzIG5vdGU6IGh0bWwydGV4dCBpbiBEZWJpYW4gaXMgbm90IHRoZSBzYW1lIGltcGxlbWVudGF0aW9uCithcyB0aGUgaHRtbDJ0ZXh0LnBsIHdoaWNoIGlzIGV4cGVjdGVkLCBidXQgc2hvdWxkIHByb3ZpZGUgc2ltaWxhcgorZnVuY3Rpb25hbGl0eV0uCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbSBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0KK2luZGV4IDA5MmI3ODEuLjVjMmJhZTEgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCisrKysgYi9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCitAQCAtNDA5OSw3ICs0MDk5LDcgQEAgc3ViIF9kaXNwbGF5X3VybCB7CisgICAgICAgaWYgJENQQU46OkRFQlVHOworIAorICAgICAjIHNob3VsZCB3ZSBkZWZpbmUgaXQgaW4gdGhlIGNvbmZpZyBpbnN0ZWFkPworLSAgICBteSAkaHRtbF9jb252ZXJ0ZXIgPSAiaHRtbDJ0ZXh0LnBsIjsKKysgICAgbXkgJGh0bWxfY29udmVydGVyID0gImh0bWwydGV4dCI7CisgCisgICAgIG15ICR3ZWJfYnJvd3NlciA9ICRDUEFOOjpDb25maWctPnsnbHlueCd9IHx8IHVuZGVmOworICAgICBteSAkd2ViX2Jyb3dzZXJfb3V0ID0gJHdlYl9icm93c2VyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE5MjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgpAQCAtMCwwICsxLDMxIEBACitGcm9tIDlmYWY2ZGNjM2E1YzQxNTQ0ODRkODEyZWIzY2MzZGQ3OGIzNTU2M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBNb24sIDMwIE1heSAyMDExIDIyOjU0OjI0ICswMzAwCitTdWJqZWN0OiBEb2N1bWVudCB0aGF0IENDRkxBR1Mgc2hvdWxkIGluY2x1ZGUgJENvbmZpZ3tjY2ZsYWdzfQorCitCdWc6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Njg2MTMKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjI4NTIyCisKK0NvbXBpbGluZyBYUyBleHRlbnNpb25zIHdpdGhvdXQgJENvbmZpZ3tjY2ZsYWdzfSBjYW4gYnJlYWsgdGhlCitiaW5hcnkgaW50ZXJmYWNlIG9uIHNvbWUgcGxhdGZvcm1zLgorCitQYXRjaC1OYW1lOiBmaXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0KK2luZGV4IGZlOTViMjcuLjkwNDAzZTggMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCitAQCAtMTc3NCw2ICsxNzc0LDEwIEBAIGN1cnJlbnRseSB1c2VkIGJ5IE1ha2VNYWtlciBidXQgbWF5IGJlIGhhbmR5IGluIE1ha2VmaWxlLlBMcy4KKyBTdHJpbmcgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBjb21waWxlciBjYWxsIGNvbW1hbmQgbGluZSBiZXR3ZWVuCisgdGhlIGFyZ3VtZW50cyBJTkMgYW5kIE9QVElNSVpFLgorIAorK1RoZSBkZWZhdWx0IHZhbHVlIGlzIHRha2VuIGZyb20gJENvbmZpZ3tjY2ZsYWdzfS4gV2hlbiBvdmVycmlkaW5nCisrQ0NGTEFHUywgbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlICRDb25maWd7Y2NmbGFnc30gc2V0dGluZ3MgdG8gYXZvaWQKKytiaW5hcnkgaW5jb21wYXRpYmlsaXRpZXMuCisrCisgPWl0ZW0gQ09ORklHCisgCisgQXJyYXlyZWYuIEUuZy4gW3F3KGFyY2huYW1lIG1hbmV4dCldIGRlZmluZXMgQVJDSE5BTUUgJiBNQU5FWFQgZnJvbQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1Zjk2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKQEAgLTAsMCArMSwxMTAgQEAKK0Zyb20gNTVkNDMwZWIwMmZjMTE2NTgxODQ3MzA0Y2EyMDMyMTY4Nzk3ODI2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIE5pZWRlciA8anJuaWVkZXJAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNyBKdWwgMjAxMiAxMDozNTowNyAtMDUwMAorU3ViamVjdDogTWVtb2l6ZTo6U3RvcmFibGU6IHJlc3BlY3QgJ25zdG9yZScgb3B0aW9uIG5vdCByZXNwZWN0ZWQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworTWVtb2l6ZSgzcGVybCkgc2F5czoKKworICAgICAgICAgICAgICAgIHRpZSBteSAlY2FjaGUgPT4gJ01lbW9pemU6OlN0b3JhYmxlJywgJGZpbGVuYW1lLCAnbnN0b3JlJzsKKyAgICAgICAgICAgICAgICBtZW1vaXplICdmdW5jdGlvbicsIFNDQUxBUl9DQUNIRSA9PiBbSEFTSCA9PiBcJWNhY2hlXTsKKworICAgICAgICBJbmNsdWRlIHRoZSDigJhuc3RvcmXigJkgb3B0aW9uIHRvIGhhdmUgdGhlICJTdG9yYWJsZSIgZGF0YWJhc2UKKyAgICAgICAgd3JpdHRlbiBpbiDigJhuZXR3b3JrIG9yZGVy4oCZLiAgKFNlZSBTdG9yYWJsZSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIGFib3V0IHRoaXMuKQorCitJbiBmYWN0IHRoZSAibnN0b3JlIiBvcHRpb24gZG9lcyBubyBzdWNoIHRoaW5nLiAgT3B0aW9uIHBhcnNpbmcgbG9va3MKK2xpa2UgdGhpczoKKworICAgICAgICBAb3B0aW9uc3tAX30gPSAoKTsKKworJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30gaXMgYWNjb3JkaW5nbHkgc2V0IHRvIHVuZGVmLiAgTGF0ZXIKK01lbW9pemU6OlN0b3JhYmxlIGNoZWNrcyBpZiB0aGUgb3B0aW9uIGlzIHRydWUsIGFuZCBzaW5jZSB1bmRlZiBpcworbm90IHRydWUsIHRoZSAiZWxzZSIgYnJhbmNoIGlzIGFsd2F5cyB0YWtlbi4KKworICAgICAgICBpZiAoJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKyAgICAgICAgICAgICAgICBTdG9yYWJsZTo6bnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdG9yYWJsZTo6c3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworICAgICAgICB9CisKK0NvcnJlY3RpbmcgdGhlIGNvbmRpdGlvbiB0byAoZXhpc3RzICRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSBmaXhlcworaXQuCisKK05vdGljZWQgYmVjYXVzZSBnaXQtc3ZuLCB3aGljaCB1c2VzIHRoZSAnbnN0b3JlJyBvcHRpb24gZm9yIGl0cworb24tZGlzayBjYWNoZXMsIHdhcyBwcm9kdWNpbmcKKworICAgICAgICBCeXRlIG9yZGVyIGlzIG5vdCBjb21wYXRpYmxlIGF0IC4uLy4uL2xpYi9TdG9yYWJsZS5wbQorCit3aGVuIHJ1biB1c2luZyBhIHBlcmwgd2l0aCBhIGRpZmZlcmVudCBpbnRlZ2VyIHNpemUgKGFuZCBoZW5jZQorYnl0ZW9yZGVyKS4KKworUmVwb3J0ZWQgYnkgVGltIFJldG91dCAoUlQjNzc3OTApCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTg3NjUwCitCdWc6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Nzc3OTAKK0ZvcndhcmRlZDogaHR0cHM6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD03Nzc5MAorUGF0Y2gtTmFtZTogZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZgorLS0tCisgY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0gfCAgMiArLQorIGNwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50ICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0gYi9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQoraW5kZXggMTMxNDc5Ny4uODc4NzZmMiAxMDA2NDQKKy0tLSBhL2NwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtCisrKysgYi9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQorQEAgLTU1LDcgKzU1LDcgQEAgc3ViIERFU1RST1kgeworICAgcmVxdWlyZSBDYXJwIGlmICRWZXJib3NlOworICAgbXkgJHNlbGY9IHNoaWZ0OworICAgcHJpbnQgU1RERVJSICJNZW1vaXplOjpTdG9yYWJsZTo6REVTVFJPWShAXylcbiIgaWYgJFZlcmJvc2U7CistICBpZiAoJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKysgIGlmIChleGlzdHMgJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKyAgICAgU3RvcmFibGU6Om5zdG9yZSgkc2VsZi0+e0h9LCAkc2VsZi0+e0ZJTEVOQU1FfSk7CisgICB9IGVsc2UgeworICAgICBTdG9yYWJsZTo6c3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworZGlmZiAtLWdpdCBhL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50IGIvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKK2luZGV4IGRlM2I4ZGMuLmE2MjQyMzggMTAwNjQ0CistLS0gYS9jcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudAorKysrIGIvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKK0BAIC0zMSwxOCArMzEsMzQgQEAgaWYgKCRAKSB7CisgICBleGl0IDA7CisgfQorIAorLXByaW50ICIxLi40XG4iOworK3ByaW50ICIxLi45XG4iOworIAorICRmaWxlID0gInN0b3JhYmxlJCQiOworIDEgd2hpbGUgdW5saW5rICRmaWxlOworIHRyeW91dCgnTWVtb2l6ZTo6U3RvcmFibGUnLCAkZmlsZSwgMSk7ICAjIFRlc3QgMS4uNAorIDEgd2hpbGUgdW5saW5rICRmaWxlOworK3RyeW91dCgnTWVtb2l6ZTo6U3RvcmFibGUnLCAkZmlsZSwgNSwgJ25zdG9yZScpOyAgIyBUZXN0IDUuLjgKKythc3NlcnRfbmV0b3JkZXIoJGZpbGUsIDkpOyAgIyBUZXN0IDkKKysxIHdoaWxlIHVubGluayAkZmlsZTsKKysKKysKKytzdWIgYXNzZXJ0X25ldG9yZGVyIHsKKysgIG15ICgkZmlsZSwgJHRlc3RubykgPSBAXzsKKysKKysgIG15ICRuZXRvcmRlciA9IFN0b3JhYmxlOjpmaWxlX21hZ2ljKCRmaWxlKS0+eyduZXRvcmRlcid9OworKyAgcHJpbnQgKCRuZXRvcmRlciA/ICJvayAkdGVzdG5vXG4iIDogIm5vdCBvayAkdGVzdG5vXG4iKTsKKyt9CisgCisgc3ViIHRyeW91dCB7CistICBteSAoJHRpZXBhY2ssICRmaWxlLCAkdGVzdG5vKSA9IEBfOworKyAgbXkgKCR0aWVwYWNrLCAkZmlsZSwgJHRlc3RubywgJG9wdGlvbikgPSBAXzsKKyAKKy0gIHRpZSBteSAlY2FjaGUgPT4gJHRpZXBhY2ssICRmaWxlCistICAgIG9yIGRpZSAkITsKKysgIGlmIChkZWZpbmVkICRvcHRpb24pIHsKKysgICAgdGllIG15ICVjYWNoZSA9PiAkdGllcGFjaywgJGZpbGUsICRvcHRpb24KKysgICAgICBvciBkaWUgJCE7CisrICB9IGVsc2UgeworKyAgICB0aWUgbXkgJWNhY2hlID0+ICR0aWVwYWNrLCAkZmlsZQorKyAgICAgIG9yIGRpZSAkITsKKysgIH0KKyAKKyAgIG1lbW9pemUgJ2M1JywgCisgICBTQ0FMQVJfQ0FDSEUgPT4gW0hBU0ggPT4gXCVjYWNoZV0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzMTk3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgpAQCAtMCwwICsxLDI1IEBACitGcm9tIGZhMDg1ZmVkZDljNDA2ZWRjZDRhMWEyNTZjMDI1ZDVmZjdmNmM2ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFRodSwgMjAgU2VwIDIwMDcgMTk6NDc6MTQgKzEwMDAKK1N1YmplY3Q6IERvY3VtZW50IHRoZSBOZXQ6OlNNVFAgJ1BvcnQnIG9wdGlvbgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzEwMDE5NQorQnVnOiBodHRwOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9MzYwMzgKKworUGF0Y2gtTmFtZTogZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmCistLS0KKyBjcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbSBiL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQoraW5kZXggYWZkMDE3YS4uNmFlN2Q5ZSAxMDA2NDQKKy0tLSBhL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQorKysrIGIvY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtCitAQCAtNzM4LDYgKzczOCw3IEBAIE5ldDo6U01UUCB3aWxsIGF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgYWRkcmVzcyBmcm9tIHRoZSB2YWx1ZSBwYXNzZWQuCisgCisgQjxEZWJ1Zz4gLSBFbmFibGUgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgCisrQjxQb3J0PiAtIFNlbGVjdCBhIHBvcnQgb24gdGhlIHJlbW90ZSBob3N0IHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQgaXMgMjUpCisgCisgRXhhbXBsZToKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTY0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gMGVjZjgzZjI1OWRiMDljYjM4Y2IzN2M5YjIyZTcyYmUxODVhZmE4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEh1Z28gdmFuIGRlciBTYW5kZW4gPGh2QGNyeXB0Lm9yZz4KK0RhdGU6IFRodSwgMTEgSnVuIDIwMTUgMTI6MjU6NDAgKzAxMDAKK1N1YmplY3Q6IGZpeCAtQ25uIHBhcnNpbmcKKworQ29tbWl0IDIyZmYzMTMwNjggZm9yIFtwZXJsICMxMjM4MTRdIGluYWR2ZXJ0ZW50bHkgY2hhbmdlZCB0aGUgbG9naWMgd2hlbgorcGFyc2luZyBhIG51bWVyaWMgcGFyYW1ldGVyIHRvIHRoZSAtQyBvcHRpb24sIHN1Y2ggdGhhdCB0aGUgc3VjY2Vzc2Z1bGx5CitwYXJzZWQgbnVtYmVyIHdhcyBub3Qgc2F2ZWQgYXMgdGhlIG9wdGlvbiB2YWx1ZSBpZiBpdCBwYXJzZWQgdG8gdGhlIGVuZAorb2YgdGhlIGFyZ3VtZW50LgorCitCdWc6IGh0dHBzOi8vcnQucGVybC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0xMjUzODEKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4ODYzNgorT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3Blcmw1LmdpdC5wZXJsLm9yZy9wZXJsLmdpdC9jb21taXQvODlkODRmZjk2NQorUGF0Y2gtTmFtZTogZml4ZXMvcGVybC1Dbm4uZGlmZgorLS0tCisgdC9ydW4vc3dpdGNoQy50IHwgIDcgKysrKysrLQorIHV0aWwuYyAgICAgICAgICB8IDE3ICsrKysrKysrLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcnVuL3N3aXRjaEMudCBiL3QvcnVuL3N3aXRjaEMudAoraW5kZXggZjZhYTg2OC4uNGY2M2MzYiAxMDA2NDQKKy0tLSBhL3QvcnVuL3N3aXRjaEMudAorKysrIGIvdC9ydW4vc3dpdGNoQy50CitAQCAtMTEsNyArMTEsNyBAQCBCRUdJTiB7CisgICAgIHNraXBfYWxsX2lmX21pbmlwZXJsKCctQyBhbmQgJEVOVntQRVJMX1VOSUNPREV9IGFyZSBkaXNhYmxlZCBvbiBtaW5pcGVybCcpOworIH0KKyAKKy1wbGFuKHRlc3RzID0+IDEzKTsKKytwbGFuKHRlc3RzID0+IDE0KTsKKyAKKyBteSAkcjsKKyAKK0BAIC0yNSw2ICsyNSwxMSBAQCAkciA9IHJ1bnBlcmwoIHN3aXRjaGVzID0+IFsgJy1DTycsICctdycgXSwKKyAgICAgICAgICAgICAgIHN0ZGVyciAgID0+IDEgKTsKKyBsaWtlKCAkciwgcXIvXiRiKD86XHI/XG4pPyQvcywgJy1DTzogbm8gd2FybmluZyBvbiBVVEYtOCBvdXRwdXQnICk7CisgCisrJHIgPSBydW5wZXJsKCBzd2l0Y2hlcyA9PiBbICctQzInLCAnLXcnIF0sCisrCSAgICAgIHByb2cgICAgID0+ICdwcmludCBjaHIoMjU2KScsCisrICAgICAgICAgICAgICBzdGRlcnIgICA9PiAxICk7CisrbGlrZSggJHIsIHFyL14kYig/OlxyP1xuKT8kL3MsICctQzI6IG5vIHdhcm5pbmcgb24gVVRGLTggb3V0cHV0JyApOworKworIFNLSVA6IHsKKyAgICAgaWYgKGV4aXN0cyAkRU5We1BFUkxfVU5JQ09ERX0gJiYKKyAJKCRFTlZ7UEVSTF9VTklDT0RFfSBlcSAiIiB8fCAkRU5We1BFUkxfVU5JQ09ERX0gPX4gL1tTT10vKSkgeworZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwuYworaW5kZXggOGNmNjJmNS4uZWUyMzMxNCAxMDA2NDQKKy0tLSBhL3V0aWwuYworKysrIGIvdXRpbC5jCitAQCAtNDQyMCwxNiArNDQyMCwxNSBAQCBQZXJsX3BhcnNlX3VuaWNvZGVfb3B0cyhwVEhYXyBjb25zdCBjaGFyICoqcG9wdCkKKyAgICAgICAgaWYgKGlzRElHSVQoKnApKSB7CisgICAgICAgICAgICAgY29uc3QgY2hhciogZW5kcHRyOworICAgICAgICAgICAgIFVWIHV2OworLSAgICAgICAgICAgIGlmIChncm9rX2F0b1VWKHAsICZ1diwgJmVuZHB0cikKKy0gICAgICAgICAgICAgICAgJiYgdXYgPD0gVTMyX01BWAorLSAgICAgICAgICAgICAgICAmJiAocCA9IGVuZHB0cikKKy0gICAgICAgICAgICAgICAgJiYgKnAgJiYgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInCistICAgICAgICAgICAgKSB7CisrICAgICAgICAgICAgaWYgKGdyb2tfYXRvVVYocCwgJnV2LCAmZW5kcHRyKSAmJiB1diA8PSBVMzJfTUFYKSB7CisgICAgICAgICAgICAgICAgIG9wdCA9IChVMzIpdXY7CistICAgICAgICAgICAgICAgIGlmIChpc1NQQUNFKCpwKSkKKy0gICAgICAgICAgICAgICAgICAgIGdvdG8gdGhlX2VuZF9vZl90aGVfb3B0c19wYXJzZXI7CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIFBlcmxfY3JvYWsoYVRIWF8gIlVua25vd24gVW5pY29kZSBvcHRpb24gbGV0dGVyICclYyciLCAqcCk7CisrICAgICAgICAgICAgICAgIHAgPSBlbmRwdHI7CisrICAgICAgICAgICAgICAgIGlmIChwICYmICpwICYmICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJykgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU1BBQ0UoKnApKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdGhlX2VuZF9vZl90aGVfb3B0c19wYXJzZXI7CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgUGVybF9jcm9hayhhVEhYXyAiVW5rbm93biBVbmljb2RlIG9wdGlvbiBsZXR0ZXIgJyVjJyIsICpwKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWNhODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYKQEAgLTAsMCArMSwxNzAgQEAKK0Zyb20gOTA1N2FkYzEwNmQ2YmJlZjUzYzllNzA2NTIzY2Q5NGYxYTdhMDhkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDMwIEF1ZyAyMDE0IDE1OjEwOjQxIC0wNzAwCitTdWJqZWN0OiBTdXBwb3J0IFBPRF9NQU5fREFURSBpbiBQb2Q6Ok1hbiBmb3IgdGhlIGxlZnQtaGFuZCBmb290ZXIKKworSG9ub3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBPRF9NQU5fREFURSBhbmQgdXNlIGl0cyBjb250ZW50cywgaWYKK3NldCwgYXMgdGhlIHZhbHVlIG9mIHRoZSBsZWZ0LWhhbmQgZm9vdGVyIGlmIHRoZSBkYXRlIG9wdGlvbiBpcyBub3QKK3NldCwgb3ZlcnJpZGluZyB0aGUgdGltZXN0YW1wIG9mIHRoZSBpbnB1dCBmaWxlLiAgVGhpcyBpcyBwcmltYXJpbHkKK3VzZWZ1bCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlIGJ1aWxkcyBvZiB0aGUgc2FtZSBvdXRwdXQgZmlsZSBnaXZlbiB0aGUKK3NhbWUgc291Y2UgYW5kIFBvZDo6TWFuIHZlcnNpb24sIGV2ZW4gd2hlbiBmaWxlIHRpbWVzdGFtcHMgbWF5IG5vdCBiZQorY29uc2lzdGVudC4gIFRoYW5rcywgTmlrbyBUeW5pLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc1OTQwNQorT3JpZ2luOiB1cHN0cmVhbQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgfCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgfCAyOSArKysrKysrKysrKysrLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggNzJjYTlmZi4uMDUzNjY2MiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTg3NiwyNSArODc2LDQyIEBAIHN1YiBkZXZpc2VfdGl0bGUgeworIH0KKyAKKyAjIERldGVybWluZSB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgYW5kIHJldHVybiB0aGF0LCBwcm9wZXJseSBmb3JtYXR0ZWQgaW4gSVNPCistIyBmb3JtYXQuICBJZiB3ZSBjYW4ndCBnZXQgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCwgaW5zdGVhZCB1c2UgdGhlCistIyBjdXJyZW50IHRpbWUuICBQb2Q6OlNpbXBsZSByZXR1cm5zIGEgY29tcGxldGVseSB1bnVzZWZ1bCBzdHJpbmdpZmllZCBmaWxlCistIyBoYW5kbGUgYXMgdGhlIHNvdXJjZV9maWxlbmFtZSBmb3IgaW5wdXQgZnJvbSBhIGZpbGUgaGFuZGxlLCBzbyB3ZSBoYXZlIHRvCistIyBkZWFsIHdpdGggdGhhdCBhcyB3ZWxsLgorKyMgZm9ybWF0LgorKyMKKysjIElmIFBPRF9NQU5fREFURSBpcyBzZXQsIHRoYXQgb3ZlcnJpZGVzIGFueXRoaW5nIGVsc2UuICBUaGlzIGNhbiBiZSB1c2VkIGZvcgorKyMgcmVwcm9kdWNpYmxlIGdlbmVyYXRpb24gb2YgdGhlIHNhbWUgZmlsZSBldmVuIGlmIHRoZSBpbnB1dCBmaWxlIHRpbWVzdGFtcHMKKysjIGFyZSB1bnByZWRpY3RhYmxlIG9yIHRoZSBQT0QgY29tcyBmcm9tIHN0YW5kYXJkIGlucHV0LgorKyMKKysjIE90aGVyd2lzZSwgdXNlIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgaWYgd2UgY2FuIHN0YXQgaXQuICBCZQorKyMgYXdhcmUgdGhhdCBQb2Q6OlNpbXBsZSByZXR1cm5zIHRoZSBzdHJpbmdpZmljYXRpb24gb2YgdGhlIGZpbGUgaGFuZGxlIGFzCisrIyBzb3VyY2VfZmlsZW5hbWUgZm9yIGlucHV0IGZyb20gYSBmaWxlIGhhbmRsZSwgc28gd2UnbGwgc3RhdCBzb21lIHJhbmRvbSByZWYKKysjIHN0cmluZyBpbiB0aGF0IGNhc2UuICBJZiB0aGF0IGZhaWxzLCBpbnN0ZWFkIHVzZSB0aGUgY3VycmVudCB0aW1lLgorKyMKKysjICRzZWxmIC0gUG9kOjpNYW4gb2JqZWN0LCB1c2VkIHRvIGdldCB0aGUgc291cmNlIGZpbGUKKysjCisrIyBSZXR1cm5zOiBZWVlZLU1NLUREIGRhdGUgc3VpdGFibGUgZm9yIHRoZSBsZWZ0LWhhbmQgZm9vdGVyCisgc3ViIGRldmlzZV9kYXRlIHsKKyAgICAgbXkgKCRzZWxmKSA9IEBfOworKworKyAgICAjIElmIFBPRF9NQU5fREFURSBpcyBzZXQsIGFsd2F5cyB1c2UgaXQuCisrICAgIGlmICgkRU5We1BPRF9NQU5fREFURX0pIHsKKysgICAgICAgIHJldHVybiAkRU5We1BPRF9NQU5fREFURX07CisrICAgIH0KKysKKysgICAgIyBPdGhlcndpc2UsIGdldCB0aGUgaW5wdXQgZmlsZW5hbWUgYW5kIHRyeSB0byBzdGF0IGl0LiAgSWYgdGhhdCBmYWlscywKKysgICAgIyB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKyAgICAgbXkgJGlucHV0ID0gJHNlbGYtPnNvdXJjZV9maWxlbmFtZTsKKyAgICAgbXkgJHRpbWU7CisgICAgIGlmICgkaW5wdXQpIHsKKy0gICAgICAgICR0aW1lID0gKHN0YXQgJGlucHV0KVs5XSB8fCB0aW1lOworKyAgICAgICAgJHRpbWUgPSAoc3RhdCgkaW5wdXQpKVs5XSB8fCB0aW1lKCk7CisgICAgIH0gZWxzZSB7CistICAgICAgICAkdGltZSA9IHRpbWU7CisrICAgICAgICAkdGltZSA9IHRpbWUoKTsKKyAgICAgfQorIAorLSAgICAjIENhbid0IHVzZSBQT1NJWDo6c3RyZnRpbWUoKSwgd2hpY2ggdXNlcyBGY250bCwgYmVjYXVzZSBNYWtlTWFrZXIKKy0gICAgIyB1c2VzIHRoaXMgYW5kIGl0IGhhcyB0byB3b3JrIGluIHRoZSBjb3JlIHdoaWNoIGNhbid0IGxvYWQgZHluYW1pYworLSAgICAjIGxpYnJhcmllcy4KKy0gICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGxvY2FsdGltZSAkdGltZSlbNSw0LDNdOworLSAgICByZXR1cm4gc3ByaW50ZiAoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKysgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKysgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorKyAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAobG9jYWx0aW1lKCR0aW1lKSlbNSw0LDNdOworKyAgICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworIH0KKyAKKyAjIFByaW50IG91dCB0aGUgcHJlYW1ibGUgYW5kIHRoZSB0aXRsZS4gIFRoZSBtZWFuaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gLlRICitAQCAtMTYzMiw2ICsxNjQ5LDE1IEBAIGFyZ3VtZW50LgorIFNldHMgdGhlIGNlbnRlcmVkIHBhZ2UgaGVhZGVyIHRvIHVzZSBpbnN0ZWFkIG9mICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwKKyBEb2N1bWVudGF0aW9uIi4KKyAKKys9aXRlbSBkYXRlCisrCisrU2V0cyB0aGUgbGVmdC1oYW5kIGZvb3Rlci4gIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIHRoZSBjb250ZW50cyBvZiB0aGUKKytlbnZpcm9ubWVudCB2YXJpYWJsZSBQT0RfTUFOX0RBVEUsIGlmIHNldCwgd2lsbCBiZSB1c2VkLiAgRmFpbGluZyB0aGF0LAorK3RoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IHRpbWUKKytpZiBzdGF0KCkgY2FuJ3QgZmluZCB0aGF0IGZpbGUgKHdoaWNoIHdpbGwgYmUgdGhlIGNhc2UgaWYgdGhlIGlucHV0IGlzCisrZnJvbSBDPFNURElOPikuICBJZiBvYnRhaW5lZCBmcm9tIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiBkYXRlIG9yIHRoZQorK2N1cnJlbnQgdGltZSwgaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcyBDPFlZWVktTU0tREQ+LgorKworID1pdGVtIGVycm9ycworIAorIEhvdyB0byByZXBvcnQgZXJyb3JzLiAgQzxkaWU+IHNheXMgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIG9uIGFueSBQT0QKK0BAIC0xNjQyLDEzICsxNjY4LDYgQEAgUE9EIGVycm9ycyBlbnRpcmVseSwgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAKKyBUaGUgZGVmYXVsdCBpcyBDPHBvZD4uCisgCistPWl0ZW0gZGF0ZQorLQorLVNldHMgdGhlIGxlZnQtaGFuZCBmb290ZXIuICBCeSBkZWZhdWx0LCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0CistZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh0aGUKKy1jYXNlIGlmIHRoZSBpbnB1dCBpcyBmcm9tIEM8U1RESU4+KSwgYW5kIHRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzCistQzxZWVlZLU1NLUREPi4KKy0KKyA9aXRlbSBmaXhlZAorIAorIFRoZSBmaXhlZC13aWR0aCBmb250IHRvIHVzZSBmb3IgdmVyYmF0aW0gdGV4dCBhbmQgY29kZS4gIERlZmF1bHRzIHRvCitAQCAtMTgxMCw2ICsxODI5LDIwIEBAIG9wdGlvbiB3YXMgc2V0IHRvIEM8ZGllPi4KKyAKKyA9YmFjaworIAorKz1oZWFkMSBFTlZJUk9OTUVOVAorKworKz1vdmVyIDQKKysKKys9aXRlbSBQT0RfTUFOX0RBVEUKKysKKytJZiBzZXQsIHRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC1oYW5kIGZvb3RlciB1bmxlc3MgdGhlCisrQzxkYXRlPiBvcHRpb24gaXMgZXhwbGljaXRseSBzZXQsIG92ZXJyaWRpbmcgdGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5wdXQKKytmaWxlIG9yIHRoZSBjdXJyZW50IHRpbWUuICBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgdG8gZW5zdXJlIHJlcHJvZHVjaWJsZQorK2J1aWxkcyBvZiB0aGUgc2FtZSBvdXRwdXQgZmlsZSBnaXZlbiB0aGUgc2FtZSBzb3VjZSBhbmQgUG9kOjpNYW4gdmVyc2lvbiwKKytldmVuIHdoZW4gZmlsZSB0aW1lc3RhbXBzIG1heSBub3QgYmUgY29uc2lzdGVudC4KKysKKys9YmFjaworKworID1oZWFkMSBCVUdTCisgCisgRW5jb2RpbmcgaGFuZGxpbmcgYXNzdW1lcyB0aGF0IFBlcmxJTyBpcyBhdmFpbGFibGUgYW5kIGRvZXMgbm90IHdvcmsKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK2luZGV4IDNjY2U5ZjUuLmM2MTBkZDkgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorQEAgLTEsMTUgKzEsMjggQEAKKy0jIS91c3IvYmluL3BlcmwgLXcKKy0KKy0jIEluIG9yZGVyIGZvciBNYWtlTWFrZXIgdG8gYnVpbGQgaW4gdGhlIGNvcmUsIG5vdGhpbmcgY2FuIHVzZQorLSMgRmNudGwgd2hpY2ggaW5jbHVkZXMgUE9TSVguICBkZXZpc2VfZGF0ZSgpJ3MgdXNlIG9mIHN0cmZ0aW1lKCkKKy0jIHdhcyByZXBsYWNlZC4gIFRoaXMgdGVzdHMgdGhhdCBpdCdzIGlkZW50aWNhbC4KKysjIS91c3IvYmluL3BlcmwKKysjCisrIyBJbiBvcmRlciBmb3IgTWFrZU1ha2VyIHRvIGJ1aWxkIGluIHRoZSBjb3JlLCBub3RoaW5nIGNhbiB1c2UgRmNudGwgd2hpY2gKKysjIGluY2x1ZGVzIFBPU0lYLiAgZGV2aXNlX2RhdGUoKSdzIHVzZSBvZiBzdHJmdGltZSgpIHdhcyByZXBsYWNlZC4gIFRoaXMgdGVzdHMKKysjIHRoYXQgaXQncyBpZGVudGljYWwuICBJdCBhbHNvIHRlc3RzIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGhlIFBPRF9NQU5fREFURQorKyMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgCisrdXNlIDUuMDA2OworIHVzZSBzdHJpY3Q7CistCistdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTsKKyt1c2Ugd2FybmluZ3M7CisgCisgdXNlIFBvZDo6TWFuOworIHVzZSBQT1NJWCBxdyhzdHJmdGltZSk7CisgCisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjsKKysKKysjIENoZWNrIHRoYXQgdGhlIHJlc3VsdHMgb2YgZGV2aWNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZS4gIFRoZXJlIGlzIG5vIGlucHV0CisrIyBmaWxlIG5hbWUsIHNvIHRoaXMgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKyBteSAkcGFyc2VyID0gUG9kOjpNYW4tPm5ldzsKKy1pcyAkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgc3RyZnRpbWUoIiVZLSVtLSVkIiwgbG9jYWx0aW1lKTsKKytpcygKKysgICAgJHBhcnNlci0+ZGV2aXNlX2RhdGUsCisrICAgIHN0cmZ0aW1lKCclWS0lbS0lZCcsIGxvY2FsdGltZSgpKSwKKysgICAgJ2RldmlzZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUnCisrKTsKKysKKysjIFNldCB0aGUgb3ZlcnJpZGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGVuc3VyZSB0aGF0IGl0J3MgaG9ub3JlZC4KKytsb2NhbCAkRU5We1BPRF9NQU5fREFURX0gPSAnMjAxNC0wMS0wMSc7CisraXMoJHBhcnNlci0+ZGV2aXNlX2RhdGUsICcyMDE0LTAxLTAxJywgJ2RldmlzZV9kYXRlIGhvbm9ycyBQT0RfTUFOX0RBVEUnKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYmJmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gMTgzYmI0YWY3YWQ4NjJhMmNmMzFkMGRjYjNkZDQ1YzEwMGY3Njc3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAyMjoyMToyNSAtMDcwMAorU3ViamVjdDogU3VwcG9ydCBhbiBlbXB0eSBQT0RfTUFOX0RBVEUgZW52aXJvbm1lbnQgdmFyaWFibGUKKworT25lIG1heSB3YW50IHRvIHNldCB0aGlzIHRvIGFuIGVtcHR5IHN0cmluZy4gIEhhbmRsZSB0aGF0IGNvcnJlY3RseS4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPWUwZTlmY2I1M2U4ZmM5NTRiMmIxOTU1Mzg1ZWVhMThjMjdmODY5YWYKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gIHwgMiArLQorIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCB8IDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCAzNjU4OTJlLi44OTk3YTE1IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtODk0LDcgKzg5NCw3IEBAIHN1YiBkZXZpc2VfZGF0ZSB7CisgICAgIG15ICgkc2VsZikgPSBAXzsKKyAKKyAgICAgIyBJZiBQT0RfTUFOX0RBVEUgaXMgc2V0LCBhbHdheXMgdXNlIGl0LgorLSAgICBpZiAoJEVOVntQT0RfTUFOX0RBVEV9KSB7CisrICAgIGlmIChkZWZpbmVkKCRFTlZ7UE9EX01BTl9EQVRFfSkpIHsKKyAgICAgICAgIHJldHVybiAkRU5We1BPRF9NQU5fREFURX07CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK2luZGV4IDlkYTlkMWIuLjI3MjcxZDkgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorQEAgLTEyLDcgKzEyLDcgQEAgdXNlIHdhcm5pbmdzOworIHVzZSBQb2Q6Ok1hbjsKKyB1c2UgUE9TSVggcXcoc3RyZnRpbWUpOworIAorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMzsKKyAKKyAjIENoZWNrIHRoYXQgdGhlIHJlc3VsdHMgb2YgZGV2aWNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZS4gIFRoZXJlIGlzIG5vIGlucHV0CisgIyBmaWxlIG5hbWUsIHNvIHRoaXMgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KK0BAIC0yNiwzICsyNiw3IEBAIGlzKAorICMgU2V0IHRoZSBvdmVycmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBob25vcmVkLgorIGxvY2FsICRFTlZ7UE9EX01BTl9EQVRFfSA9ICcyMDE0LTAxLTAxJzsKKyBpcygkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgJzIwMTQtMDEtMDEnLCAnZGV2aXNlX2RhdGUgaG9ub3JzIFBPRF9NQU5fREFURScpOworKworKyMgQ2hlY2sgdGhhdCBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBob25vcmVkLgorK2xvY2FsICRFTlZ7UE9EX01BTl9EQVRFfSA9IHF7fTsKKytpcygkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgcXt9LCAnZGV2aXNlX2RhdGUgaG9ub3JzIGVtcHR5IFBPRF9NQU5fREFURScpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXBpcGUuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2MDM2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYKQEAgLTAsMCArMSwxMDkgQEAKK0Zyb20gNzY3MWQxMDFiYWE3NWQ3YTc5YmZiZDhjNzVjMTU5NWZiYjNmNTNiYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPgorRGF0ZTogU2F0LCA3IEZlYiAyMDE1IDE5OjAzOjM0IC0wODAwCitTdWJqZWN0OiBCZXR0ZXIgZXJyb3JzIGZvciBtYW4gcGFnZXMgZnJvbSBzdGFuZGFyZCBpbnB1dAorCitbUG9kOjpNYW5dIEF0dGVtcHQgdG8gZGV0ZWN0IGlmIHRoZSBpbnB1dCBjYW1lIGZyb20gYSBwaXBlIGFuZAordGhlcmVmb3JlIGhhcyBhIGNvbXBsZXRlbHkgdW5oZWxwZnVsIChhbmQgbm9ucmVwcm9kdWNpYmxlKSBzb3VyY2UgZmlsZQorbmFtZSwgYW5kIGRpYWdub3NlIHRoaXMgYXMgYW4gZXJyb3IuICBEb2N1bWVudCB0aGF0IHRoZSBuYW1lIG9wdGlvbgorKC0tbmFtZSB0byBwb2QybWFuKSBpcyByZXF1aXJlZCB3aGVuIHByb2Nlc3NpbmcgUE9EIHNvdXJjZSBmcm9tCitzdGFuZGFyZCBpbnB1dC4gIChEZWJpYW4gQnVnIzc3NzQwNSkKKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPWQ5ODg3MmU0NmM5Mzg2MWI3YWJhMTQ5NDllMTI1ODcxMjA4N2RjNTUKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc3NzQwNQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXBpcGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gICAgIHwgMTUgKysrKysrKysrKysrKysrCisgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIHwgIDQgKysrKworIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQgICB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNzU1IGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDg5OTdhMTUuLjk2OWVhZmYgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC04MjgsNiArODI4LDE3IEBAIHN1YiBkZXZpc2VfdGl0bGUgeworICAgICAkc2VjdGlvbiA9IDMgaWYgKCEkJHNlbGZ7c2VjdGlvbn0gJiYgJG5hbWUgPX4gL1wucG1cei9pKTsKKyAgICAgJG5hbWUgPX4gcy9cLnAob2R8W2xtXSlcei8vaTsKKyAKKysgICAgIyBJZiBQb2Q6OlBhcnNlciBnYXZlIHVzIGFuIElPOjpGaWxlIHJlZmVyZW5jZSBhcyB0aGUgc291cmNlIGZpbGUgbmFtZSwKKysgICAgIyBjb252ZXJ0IHRoYXQgdG8gdGhlIGVtcHR5IHN0cmluZyBhcyB3ZWxsLiAgVGhlbiwgaWYgd2UgZG9uJ3QgaGF2ZSBhCisrICAgICMgdmFsaWQgbmFtZSwgZW1pdCBhIHdhcm5pbmcgYW5kIGNvbnZlcnQgaXQgdG8gU1RESU4uCisrICAgIGlmICgkbmFtZSA9fiAvXklPOjpGaWxlKD86PVx3KylcKDB4W1xkYS1mXStcKSQvaSkgeworKyAgICAgICAgJG5hbWUgPSAnJzsKKysgICAgfQorKyAgICBpZiAoJG5hbWUgZXEgJycpIHsKKysgICAgICAgICRzZWxmLT53aGluZSAoMSwgJ05vIG5hbWUgZ2l2ZW4gZm9yIGRvY3VtZW50Jyk7CisrICAgICAgICAkbmFtZSA9ICdTVERJTic7CisrICAgIH0KKysKKyAgICAgIyBJZiB0aGUgc2VjdGlvbiBpc24ndCAzLCB0aGVuIHRoZSBuYW1lIGRlZmF1bHRzIHRvIGp1c3QgdGhlIGJhc2VuYW1lIG9mCisgICAgICMgdGhlIGZpbGUuICBPdGhlcndpc2UsIGFzc3VtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtb2R1bGUuICBXZSB3YW50IHRvCisgICAgICMgZmlndXJlIG91dCB0aGUgZnVsbCBtb2R1bGUgbmFtZSBmcm9tIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBidXQgd2UgZG9uJ3QKK0BAIC0xNzA1LDYgKzE3MTYsMTAgQEAgbW9kdWxlIHBhdGguICBJZiBpdCBpcywgYSBwYXRoIGxpa2UgQzwuLi4vbGliL1BvZC9NYW4ucG0+IGlzIGNvbnZlcnRlZCBpbnRvCisgYSBuYW1lIGxpa2UgQzxQb2Q6Ok1hbj4uICBUaGlzIG9wdGlvbiwgaWYgZ2l2ZW4sIG92ZXJyaWRlcyBhbnkgYXV0b21hdGljCisgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbmFtZS4KKyAKKytJZiBnZW5lcmF0aW5nIGEgbWFudWFsIHBhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dCwgdGhpcyBvcHRpb24gaXMgcmVxdWlyZWQsCisrc2luY2UgdGhlcmUncyBvdGhlcndpc2Ugbm8gd2F5IGZvciBQb2Q6Ok1hbiB0byBrbm93IHdoYXQgdG8gdXNlIGZvciB0aGUKKyttYW51YWwgcGFnZSBuYW1lLgorKworID1pdGVtIG5vdXJscworIAorIE5vcm1hbGx5LCBMWjw+PD4gZm9ybWF0dGluZyBjb2RlcyB3aXRoIGEgVVJMIGJ1dCBhbmNob3IgdGV4dCBhcmUgZm9ybWF0dGVkCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitpbmRleCAzODY5NWY4Li40M2UzNWRmIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCisrKysgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK0BAIC0yMzYsNiArMjM2LDEwIEBAIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBwcm9iYWJseSBub3QgdXNlZnVsIHdoZW4gY29udmVydGluZyBtdWx0aXBsZSBQT0QKKyBmaWxlcyBhdCBvbmNlLiAgVGhlIGNvbnZlbnRpb24gZm9yIFVuaXggbWFuIHBhZ2VzIGZvciBjb21tYW5kcyBpcyBmb3IgdGhlCisgbWFuIHBhZ2UgdGl0bGUgdG8gYmUgaW4gYWxsLXVwcGVyY2FzZSBldmVuIGlmIHRoZSBjb21tYW5kIGlzbid0LgorIAorK1doZW4gY29udmVydGluZyBQT0Qgc291cmNlIGZyb20gc3RhbmRhcmQgaW5wdXQsIHRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLAorK3NpbmNlIHRoZXJlJ3Mgb3RoZXJ3aXNlIG5vIHdheSB0byBrbm93IHdoYXQgdG8gdXNlIGFzIHRoZSBuYW1lIG9mIHRoZQorK21hbnVhbCBwYWdlLgorKworID1pdGVtIEI8LS1ub3VybHM+CisgCisgTm9ybWFsbHksIExaPD48PiBmb3JtYXR0aW5nIGNvZGVzIHdpdGggYSBVUkwgYnV0IGFuY2hvciB0ZXh0IGFyZSBmb3JtYXR0ZWQKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjg2Mzk0NDEKKy0tLSAvZGV2L251bGwKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIS91c3IvYmluL3BlcmwKKysjCisrIyBUZXN0cyBmb3IgdGhlIGF1dG9tYXRpYyBkZXRlcm1pbmF0aW9uIG9mIHRoZSBtYW51YWwgcGFnZSB0aXRsZSBpZiBub3QKKysjIHNwZWNpZmllZCB2aWEgb3B0aW9ucyB0byBwb2QybWFuIG9yIHRoZSBQb2Q6Ok1hbiBjb25zdHJ1Y3Rvci4KKysKKyt1c2UgNS4wMDY7CisrdXNlIHN0cmljdDsKKyt1c2Ugd2FybmluZ3M7CisrCisrdXNlIEZpbGU6OlNwZWM7CisrdXNlIElPOjpGaWxlOworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDM7CisrCisrQkVHSU4geworKyAgICB1c2Vfb2soJ1BvZDo6TWFuJyk7CisrfQorKworKyMgQ3JlYXRlIGEgcGFyc2VyIGFuZCBzZXQgaXQgdXAgd2l0aCBhbiBpbnB1dCBzb3VyY2UuICBUaGVyZSBpc24ndCBhIHdheSB0byBkbworKyMgdGhpcyBpbiBQb2Q6OlNpbXBsZSB3aXRob3V0IGFjdHVhbGx5IHBhcnNpbmcgdGhlIGRvY3VtZW50LCBzbyBzZW5kIHRoZQorKyMgb3V0cHV0IHRvIGEgc3RyaW5nIHRoYXQgd2UnbGwgaWdub3JlLgorK215ICRwYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCd0JywgJ2RhdGEnLCAnYmFzaWMucG9kJyk7CisrbXkgJGhhbmRsZSA9IElPOjpGaWxlLT5uZXcoJHBhdGgsICdyJyk7CisrbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXcoZXJyb3JzID0+ICdwb2QnKTsKKytteSAkb3V0cHV0OworKyRwYXJzZXItPm91dHB1dF9zdHJpbmcoXCRvdXRwdXQpOworKyRwYXJzZXItPnBhcnNlX2ZpbGUoJGhhbmRsZSk7CisrCisrIyBDaGVjayB0aGUgcmVzdWx0cyBvZiBkZXZpc2VfdGl0bGUgZm9yIHRoaXMuICBXZSBzaG91bGQgZ2V0IGJhY2sgU1RESU4sIGFuZAorKyMgd2Ugc2hvdWxkIGhhdmUgcmVwb3J0ZWQgYW4gZXJyb3IuCisrbXkgKCRuYW1lLCAkc2VjdGlvbikgPSAkcGFyc2VyLT5kZXZpc2VfdGl0bGU7CisraXMoJG5hbWUsICdTVERJTicsICdkZXZpc2VfdGl0bGUgdXNlcyBTVERJTiBmb3IgZmlsZSBoYW5kbGUgaW5wdXQnKTsKKytvaygkcGFyc2VyLT5lcnJvcnNfc2VlbiwgJy4uLmFuZCBlcnJvcnMgd2VyZSBzZWVuJyk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMtZG9jcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZGZlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgpAQCAtMCwwICsxLDg2IEBACitGcm9tIDYxOTg4NTZiNTMyM2Q2MjA0MDk0MjkzZjAxYjg5MDQ3MjYxOGYxODIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMjA6NDk6MDcgLTA3MDAKK1N1YmplY3Q6IERvY3VtZW50YXRpb24gYW5kIHRlc3Qgc3VpdGUgdXBkYXRlcyBmb3IgVVRDIGZpeAorCitVcGRhdGUgdGhlIFBvZDo6TWFuIGFuZCBwb2QybWFuIGRvY3VtZW50YXRpb24gYW5kIHRoZSB0ZXN0IHN1aXRlCitmb3IgdGhlIG5ldyBVVEMtYmFzZWQgZGVmYXVsdCBwYWdlIGZvb3RlciwgYW5kIGFkZCBhIENoYW5nZXMKK2VudHJ5LgorCisoYmFja3BvcnRlZCB0byBQZXJsIDUuMjAuMiBieSBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+KQorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9NTJkYjkzYmY4MGU0YTA2Zjg0OTdlNGViYWRlMDUwNmI2ZWUwZTcwZAorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgwMjU5CitQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gICAgIHwgIDYgKysrKystCisgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIHwgMTEgKysrKysrLS0tLS0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgICAgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IGMzYmEyMDEuLjM2NTg5MmUgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC05MTAsNiArOTEwLDggQEAgc3ViIGRldmlzZV9kYXRlIHsKKyAKKyAgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKyAgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorKyAgICAjIFVzZSBnbXRpbWUgaW5zdGVhZCBvZiBsb2NhbHRpbWUgc28gdGhhdCB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlIGRvZXMgbm90CisrICAgICMgZGVwZW5kIG9uIHRoZSBsb2NhbCB0aW1lIHpvbmUgc2V0dGluZyBhbmQgaXMgbW9yZSByZXByb2R1Y2libGUKKyAgICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGdtdGltZSgkdGltZSkpWzUsNCwzXTsKKyAgICAgcmV0dXJuIHNwcmludGYoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKyB9CitAQCAtMTY1Niw3ICsxNjU4LDkgQEAgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9EX01BTl9EQVRFLCBpZiBzZXQsIHdpbGwgYmUgdXNlZC4gIEZhaWxpbmcgdGhhdCwKKyB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCB0aW1lCisgaWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh3aGljaCB3aWxsIGJlIHRoZSBjYXNlIGlmIHRoZSBpbnB1dCBpcworIGZyb20gQzxTVERJTj4pLiAgSWYgb2J0YWluZWQgZnJvbSB0aGUgZmlsZSBtb2RpZmljYXRpb24gZGF0ZSBvciB0aGUKKy1jdXJyZW50IHRpbWUsIGhlIGRhdGUgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgQzxZWVlZLU1NLUREPi4KKytjdXJyZW50IHRpbWUsIHRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEM8WVlZWS1NTS1ERD4gYW5kIHdpbGwgYmUgYmFzZWQKKytvbiBVVEMgKHNvIHRoYXQgdGhlIG91dHB1dCB3aWxsIGJlIHJlcHJvZHVjaWJsZSByZWdhcmRsZXNzIG9mIGxvY2FsIHRpbWUKKyt6b25lKS4KKyAKKyA9aXRlbSBlcnJvcnMKKyAKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK2luZGV4IDZhZjM0NzQuLjM4Njk1ZjggMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAorQEAgLTE3NCw5ICsxNzQsMTAgQEAgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIiwgYnV0IGFsc28gc2VlIEI8LS1vZmZpY2lhbD4gYmVsb3cuCisgCisgPWl0ZW0gQjwtZD4gSTxzdHJpbmc+LCBCPC0tZGF0ZT49STxzdHJpbmc+CisgCistU2V0IHRoZSBsZWZ0LWhhbmQgZm9vdGVyIHN0cmluZyB0byB0aGlzIHZhbHVlLiAgQnkgZGVmYXVsdCwgdGhlIG1vZGlmaWNhdGlvbgorLWRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCBkYXRlIGlmIGlucHV0IGNvbWVzIGZyb20KKy1DPFNURElOPi4KKytTZXQgdGhlIGxlZnQtaGFuZCBmb290ZXIgc3RyaW5nIHRvIHRoaXMgdmFsdWUuICBCeSBkZWZhdWx0LCB0aGUKKyttb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYKKytpbnB1dCBjb21lcyBmcm9tIEM8U1RESU4+LCBhbmQgd2lsbCBiZSBiYXNlZCBvbiBVVEMgKHNvIHRoYXQgdGhlIG91dHB1dAorK3dpbGwgYmUgcmVwcm9kdWNpYmxlIHJlZ2FyZGxlc3Mgb2YgbG9jYWwgdGltZSB6b25lKS4KKyAKKyA9aXRlbSBCPC1lcnJvcnM+PUk8c3R5bGU+CisgCitAQCAtMzgzLDggKzM4NCw4IEBAIEI8cG9kMm1hbj4gYnkgTGFycnkgV2FsbCBhbmQgVG9tIENocmlzdGlhbnNlbi4KKyAKKyA9aGVhZDEgQ09QWVJJR0hUIEFORCBMSUNFTlNFCisgCistQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTMgUnVzcworLUFsbGJlcnkgPHJyYUBzdGFuZm9yZC5lZHU+LgorK0NvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0LAorKzIwMTUgUnVzcyBBbGxiZXJ5IDxycmFAY3Bhbi5vcmc+LgorIAorIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitpbmRleCBjNjEwZGQ5Li45ZGE5ZDFiIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK0BAIC0xOSw3ICsxOSw3IEBAIHVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisgbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXc7CisgaXMoCisgICAgICRwYXJzZXItPmRldmlzZV9kYXRlLAorLSAgICBzdHJmdGltZSgnJVktJW0tJWQnLCBsb2NhbHRpbWUoKSksCisrICAgIHN0cmZ0aW1lKCclWS0lbS0lZCcsIGdtdGltZSgpKSwKKyAgICAgJ2RldmlzZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUnCisgKTsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ3YjlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYzc5Njc3NWNkYmQyY2NlMDZhY2JiN2FjMzU1MTg3ZDQwNjMwMTdhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzIExhbWIgPGxhbWJ5QGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDIwOjQyOjUzIC0wNzAwCitTdWJqZWN0OiBNYWtlIHRoZSBlbWJlZGRlZCBkYXRlIGZyb20gUG9kOjpNYW4gcmVwcm9kdWNpYmxlCisKK1doaWxlIHdvcmtpbmcgb24gdGhlICJyZXByb2R1Y2libGUgYnVpbGRzIiBlZmZvcnQsIHdlIGhhdmUgbm90aWNlZAordGhhdCBQb2Q6Ok1hbiBnZW5lcmF0ZXMgb3V0cHV0IHRoYXQgdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAordGltZXpvbmUuCisKK1RoZSBhdHRhY2hlZCBwYXRjaCBmaXhlcyB0aGlzIGJ5IHVzaW5nIEdNVCAoflVUQykgZGF0ZXMgaW5zdGVhZC4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPTkxM2ZiYjJiZDJjZTA3MWUyMDEyODYyOTMwMmFlMjg1MjU1NGNhZDQKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDA1MzY2NjIuLmMzYmEyMDEgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC05MTAsNyArOTEwLDcgQEAgc3ViIGRldmlzZV9kYXRlIHsKKyAKKyAgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKyAgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorLSAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAobG9jYWx0aW1lKCR0aW1lKSlbNSw0LDNdOworKyAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAoZ210aW1lKCR0aW1lKSlbNSw0LDNdOworICAgICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI0OThiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmCkBAIC0wLDAgKzEsMTUzIEBACitGcm9tIGQ5ZDUzNWVmOTdmNTdhZjZlOTcyODA3NTk0NGMzM2YzYjBiNTM3MmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogUmVzcGVjdCB1bWFzayBkdXJpbmcgaW5zdGFsbGF0aW9uCisKK1RoaXMgaXMgbmVlZGVkIHRvIHNhdGlzZnkgRGViaWFuIHBvbGljeSByZWdhcmRpbmcgZ3JvdXAtd3JpdGFibGUKK3NpdGUgZGlyZWN0b3JpZXMuCisKK1BhdGNoLU5hbWU6IGZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0gYi9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KK2luZGV4IDFlOGFjNGMuLjNlNzkxMjEgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbQorQEAgLTQ1MSw3ICs0NTEsNyBAQCBzdWIgX2Nhbl93cml0ZV9kaXIgeworIAorID1wb2QKKyAKKy09aXRlbSBfbWtwYXRoKCRkaXIsJHNob3csJG1vZGUsJHZlcmJvc2UsJGRyeV9ydW4pCisrPWl0ZW0gX21rcGF0aCgkZGlyLCRzaG93LCR2ZXJib3NlLCRkcnlfcnVuKQorIAorIFdyYXBwZXIgYXJvdW5kIEZpbGU6OlBhdGg6Om1rcGF0aCgpIHRvIGhhbmRsZSBlcnJvcnMuCisgCitAQCAtNDY4LDEzICs0NjgsMTMgQEAgd3JpdGFibGUuCisgPWN1dAorIAorIHN1YiBfbWtwYXRoIHsKKy0gICAgbXkgKCRkaXIsJHNob3csJG1vZGUsJHZlcmJvc2UsJGRyeV9ydW4pPUBfOworKyAgICBteSAoJGRpciwkc2hvdywkdmVyYm9zZSwkZHJ5X3J1bik9QF87CisgICAgIGlmICggJHZlcmJvc2UgJiYgJHZlcmJvc2UgPiAxICYmICEgLWQgJGRpcikgeworICAgICAgICAgJHNob3c9IDE7CistICAgICAgICBwcmludGYgIm1rcGF0aCglcywlZCwlI28pXG4iLCAkZGlyLCAkc2hvdywgJG1vZGU7CisrICAgICAgICBwcmludGYgIm1rcGF0aCglcywlZClcbiIsICRkaXIsICRzaG93OworICAgICB9CisgICAgIGlmICghJGRyeV9ydW4pIHsKKy0gICAgICAgIGlmICggISBldmFsIHsgRmlsZTo6UGF0aDo6bWtwYXRoKCRkaXIsJHNob3csJG1vZGUpOyAxIH0gKSB7CisrICAgICAgICBpZiAoICEgZXZhbCB7IEZpbGU6OlBhdGg6Om1rcGF0aCgkZGlyLCRzaG93KTsgMSB9ICkgeworICAgICAgICAgICAgIF9jaG9rZSgiQ2FuJ3QgY3JlYXRlICckZGlyJyIsIiRAIik7CisgICAgICAgICB9CisgCitAQCAtNzgzLDcgKzc4Myw3IEBAIHN1YiBpbnN0YWxsIHsgI1hYWCBPUy1TUEVDSUZJQworICAgICAgICAgX2NoZGlyKCRjd2QpOworICAgICB9CisgICAgIGZvcmVhY2ggbXkgJHRhcmdldGRpciAoc29ydCBrZXlzICVjaGVja19kaXJzKSB7CistICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICB9CisgICAgIGZvcmVhY2ggbXkgJGZvdW5kIChAZm91bmRfZmlsZXMpIHsKKyAgICAgICAgIG15ICgkZGlmZiwgJGZmZCwgJG9yaWdmaWxlLCAkbW9kZSwgJHNpemUsICRhdGltZSwgJG10aW1lLAorQEAgLTc5Nyw3ICs3OTcsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRmaWxlPSBfdW5saW5rX29yX3JlbmFtZSggJHRhcmdldGZpbGUsICd0cnloYXJkJywgJ2luc3RhbGwnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgJGRyeV9ydW47CisgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCAhIC1kICR0YXJnZXRkaXIgKSB7CistICAgICAgICAgICAgICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgICAgICAgICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHByaW50ICJJbnN0YWxsaW5nICR0YXJnZXRmaWxlXG4iOworIAorQEAgLTgzNyw3ICs4MzcsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAKKyAgICAgaWYgKCRwYWNreyd3cml0ZSd9KSB7CisgICAgICAgICAkZGlyID0gaW5zdGFsbF9yb290ZWRfZGlyKGRpcm5hbWUoJHBhY2t7J3dyaXRlJ30pKTsKKy0gICAgICAgIF9ta3BhdGgoICRkaXIsIDAsIDA3NTUsICR2ZXJib3NlLCAkZHJ5X3J1biApOworKyAgICAgICAgX21rcGF0aCggJGRpciwgMCwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisgICAgICAgICBwcmludCAiV3JpdGluZyAkcGFja3snd3JpdGUnfVxuIiBpZiAkdmVyYm9zZTsKKyAgICAgICAgICRwYWNrbGlzdC0+d3JpdGUoaW5zdGFsbF9yb290ZWRfZmlsZSgkcGFja3snd3JpdGUnfSkpIHVubGVzcyAkZHJ5X3J1bjsKKyAgICAgfQorQEAgLTExODAsNyArMTE4MCw3IEBAIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgc2lsZW5jZSB0aGlzIG91dHB1dC4KKyBzdWIgcG1fdG9fYmxpYiB7CisgICAgIG15KCRmcm9tdG8sJGF1dG9kaXIsJHBtX2ZpbHRlcikgPSBAXzsKKyAKKy0gICAgX21rcGF0aCgkYXV0b2RpciwwLDA3NTUpOworKyAgICBfbWtwYXRoKCRhdXRvZGlyLDApOworICAgICB3aGlsZShteSgkZnJvbSwgJHRvKSA9IGVhY2ggJSRmcm9tdG8pIHsKKyAgICAgICAgIGlmKCAtZiAkdG8gJiYgLXMgJGZyb20gPT0gLXMgJHRvICYmIC1NICR0byA8IC1NICRmcm9tICkgeworICAgICAgICAgICAgIHByaW50ICJTa2lwICR0byAodW5jaGFuZ2VkKVxuIiB1bmxlc3MgJElOU1RBTExfUVVJRVQ7CitAQCAtMTIwMyw3ICsxMjAzLDcgQEAgc3ViIHBtX3RvX2JsaWIgeworICAgICAgICAgICAgICMgd2Ugd29udCB0cnkgaGFyZCBoZXJlLiBpdHMgdG9vIGxpa2VseSB0byBtZXNzIHRoaW5ncyB1cC4KKyAgICAgICAgICAgICBmb3JjZXVubGluaygkdG8pOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBfbWtwYXRoKGRpcm5hbWUoJHRvKSwwLDA3NTUpOworKyAgICAgICAgICAgIF9ta3BhdGgoZGlybmFtZSgkdG8pLDApOworICAgICAgICAgfQorICAgICAgICAgaWYgKCRuZWVkX2ZpbHRlcmluZykgeworICAgICAgICAgICAgIHJ1bl9maWx0ZXIoJHBtX2ZpbHRlciwgJGZyb20sICR0byk7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggZjYzMTQ1Yy4uMTk3ZjEwMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMTgsNyArMjExOCw3IEBAIGRvY19faW5zdGFsbCA6IGRvY19zaXRlX2luc3RhbGwKKyAJJChOT0VDSE8pICQoRUNITykgSU5TVEFMTERJUlMgbm90IGRlZmluZWQsIGRlZmF1bHRpbmcgdG8gSU5TVEFMTERJUlM9c2l0ZQorIAorIHB1cmVfcGVybF9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKK0BAIC0yMTM4LDcgKzIxMzgsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCisgCisgcHVyZV9zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTU2LDcgKzIxNTYsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgCQkifS4kc2VsZi0+Y2F0ZGlyKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScpLnF7IgorIAorIHB1cmVfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorQEAgLTIxODgsOCArMjE4OCw4IEBAIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAgICAgcHVzaCBAbSwgcXsKKyBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMUFJJVkxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCitAQCAtMjE5OSw4ICsyMTk5LDggQEAgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCitAQCAtMjIxMCw4ICsyMjEwLDggQEAgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExWRU5ET1JMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MmM3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKQEAgLTAsMCArMSwyNyBAQAorRnJvbSAyNjIwOWI1NTIwMWExYjJkMjUyNTJhYzNiNDI1YmM0OTA4MTI5OWRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IERlYmlhbiBwb2xpY3kgZG9lc24ndCBpbnN0YWxsIC5wYWNrbGlzdCBmaWxlcyBmb3IgY29yZSBvciB2ZW5kb3IuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2ggfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaAoraW5kZXggOGI5YWE5NS4uZTU1MTQzNCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKK0BAIC0xOCw5ICsxOCwxMSBAQCBpbnN0bW9kc2ggLSBBIHNoZWxsIHRvIGV4YW1pbmUgaW5zdGFsbGVkIG1vZHVsZXMKKyAKKyA9aGVhZDEgREVTQ1JJUFRJT04KKyAKKy1BIGxpdHRsZSBpbnRlcmZhY2UgdG8gRXh0VXRpbHM6Okluc3RhbGxlZCB0byBleGFtaW5lIGluc3RhbGxlZCBtb2R1bGVzLAorK0EgbGl0dGxlIGludGVyZmFjZSB0byBFeHRVdGlsczo6SW5zdGFsbGVkIHRvIGV4YW1pbmUgbG9jYWxseSogaW5zdGFsbGVkIG1vZHVsZXMsCisgdmFsaWRhdGUgeW91ciBwYWNrbGlzdHMgYW5kIGV2ZW4gY3JlYXRlIGEgdGFyYmFsbCBmcm9tIGFuIGluc3RhbGxlZCBtb2R1bGUuCisgCisrKk9uIERlYmlhbiBzeXN0ZW0sIEI8Y29yZT4gYW5kIEI8dmVuZG9yPiBtb2R1bGVzIGFyZSBtYW5hZ2VkIGJ5IEM8ZHBrZz4uCisrCisgPWhlYWQxIFNFRSBBTFNPCisgCisgRXh0VXRpbHM6Okluc3RhbGxlZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwZjg2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKQEAgLTAsMCArMSwyNCBAQAorRnJvbSA1M2NlNjkwODU5MTgyMzJhMWI3ZTI2ZTc3NjJjMWIyZjcwYjFlYjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBSZW1vdmUgc3RhbmRhcmQgbGlicyBmcm9tIExEX1JVTl9QQVRIIGFzIHBlciBEZWJpYW4gcG9saWN5LgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbGRfcnVuX3BhdGguZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KK2luZGV4IDM3YmNmZDQuLmJkNjZlNjUgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorQEAgLTU2LDYgKzU2LDkgQEAgc3ViIF91bml4X29zMl9leHQgeworICAgICBteSAoICRwd2QgKSAgID0gY3dkKCk7ICAgICMgZnJvbSBDd2QucG0KKyAgICAgbXkgKCAkZm91bmQgKSA9IDA7CisgCisrICAgICMgRGViaWFuLXNwZWNpZmljOiBkb24ndCB1c2UgTERfUlVOX1BBVEggZm9yIHN0YW5kYXJkIGRpcnMKKysgICAgJGxkX3J1bl9wYXRoX3NlZW57JF99KysgZm9yIEBsaWJwYXRoOworKworICAgICBmb3JlYWNoIG15ICR0aGlzbGliICggc3BsaXQgJyAnLCAkcG90ZW50aWFsX2xpYnMgKSB7CisgICAgICAgICBteSAoICRjdXN0b21fbmFtZSApID0gJyc7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZWY5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgpAQCAtMCwwICsxLDM3IEBACitGcm9tIGE3ZjZkNDUzZTYwMjU2ZDMyOTQ2OWE3NWI2NDJjY2E4NTRjZWJlYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogU2V0IGxvY2F0aW9uIG9mIGxpYm5ldC5jZmcgdG8gL2V0Yy9wZXJsL05ldCBhcyAvdXNyIG1heSBub3QgYmUKKyB3cml0YWJsZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCistLS0KKyBjcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbSB8IDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbSBiL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCitpbmRleCA5NTNhODI2Li42MWJhMTJhIDEwMDY0NAorLS0tIGEvY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0KKysrKyBiL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCitAQCAtNjgsOSArNjgsOCBAQCBteSAlbmMgPSAoCisgVFJZX0lOVEVSTkVUX0NPTkZJRworIH0KKyAKKy1teSAkZmlsZSA9IF9fRklMRV9fOworK215ICRmaWxlID0gJy9ldGMvcGVybC9OZXQvbGlibmV0LmNmZyc7CisgbXkgJHJlZjsKKy0kZmlsZSA9fiBzL0NvbmZpZy5wbS9saWJuZXQuY2ZnLzsKKyBpZiAoLWYgJGZpbGUpIHsKKyAgICRyZWYgPSBldmFsIHsgbG9jYWwgJFNJR3tfX0RJRV9ffTsgZG8gJGZpbGUgfTsKKyAgIGlmIChyZWYoJHJlZikgZXEgJ0hBU0gnKSB7CitAQCAtMTQyLDggKzE0MSw4IEBAIE5ldDo6Q29uZmlnIC0gTG9jYWwgY29uZmlndXJhdGlvbiBkYXRhIGZvciBsaWJuZXQKKyBDPE5ldDo6Q29uZmlnPiBob2xkcyBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBtb2R1bGVzIGluIHRoZSBsaWJuZXQKKyBkaXN0cmlidXRpb24uIER1cmluZyBpbnN0YWxsYXRpb24geW91IHdpbGwgYmUgYXNrZWQgZm9yIHRoZXNlIHZhbHVlcy4KKyAKKy1UaGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGhlbGQgZ2xvYmFsbHkgaW4gYSBmaWxlIGluIHRoZSBwZXJsIGluc3RhbGxhdGlvbgorLXRyZWUsIGJ1dCBhIHVzZXIgbWF5IG92ZXJyaWRlIGFueSBvZiB0aGVzZSB2YWx1ZXMgYnkgcHJvdmlkaW5nIHRoZWlyIG93bi4gVGhpcworK1RoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgaGVsZCBnbG9iYWxseSBpbiBDPC9ldGMvcGVybC9OZXQvbGlibmV0LmNmZz4sCisrYnV0IGEgdXNlciBtYXkgb3ZlcnJpZGUgYW55IG9mIHRoZXNlIHZhbHVlcyBieSBwcm92aWRpbmcgdGhlaXIgb3duLiBUaGlzCisgY2FuIGJlIGRvbmUgYnkgaGF2aW5nIGEgQzwubGlibmV0cmM+IGZpbGUgaW4gdGhlaXIgaG9tZSBkaXJlY3RvcnkuIFRoaXMgZmlsZQorIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gYSBIQVNIIGNvbnRhaW5pbmcgdGhlIGtleXMgZGVzY3JpYmVkIGJlbG93LgorIEZvciBleGFtcGxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI4MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZgpAQCAtMCwwICsxLDI2IEBACitGcm9tIGZiOGJkYmI0YmY1NjM4MmRlMDk5ZTYyYzI1NjQyODZiOWRmZGE0NmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogTm90ZSB0aGF0IGxpYnBlcmwtZGV2IHBhY2thZ2UgaXMgcmVxdWlyZWQgZm9yIGVtYmVkZGVkIGxpbmtpbmcKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xODY3NzgKKworUGF0Y2gtTmFtZTogZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKKy0tLQorIGxpYi9FeHRVdGlscy9FbWJlZC5wbSB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL0V4dFV0aWxzL0VtYmVkLnBtIGIvbGliL0V4dFV0aWxzL0VtYmVkLnBtCitpbmRleCAzZjk4M2MxLi4wZWM4YTY3IDEwMDY0NAorLS0tIGEvbGliL0V4dFV0aWxzL0VtYmVkLnBtCisrKysgYi9saWIvRXh0VXRpbHMvRW1iZWQucG0KK0BAIC0yOTYsNiArMjk2LDkgQEAgYW5kIGV4dGVuc2lvbnMgaW4geW91ciBDL0MrKyBhcHBsaWNhdGlvbnMuCisgVHlwaWNhbGx5LCBhbiBhcHBsaWNhdGlvbiBGPE1ha2VmaWxlPiB3aWxsIGludm9rZSBDPEV4dFV0aWxzOjpFbWJlZD4KKyBmdW5jdGlvbnMgd2hpbGUgYnVpbGRpbmcgeW91ciBhcHBsaWNhdGlvbi4gIAorIAorK05vdGUgdGhhdCBvbiBEZWJpYW4gc3lzdGVtcyB0aGUgQjxsaWJwZXJsLWRldj4gcGFja2FnZSBpcyByZXF1aXJlZCBmb3IKKytjb21waWxpbmcgYXBwbGljYXRpb25zIHdoaWNoIGVtYmVkIGFuIGludGVycHJldGVyLgorKworID1oZWFkMSBARVhQT1JUCisgCisgQzxFeHRVdGlsczo6RW1iZWQ+IGV4cG9ydHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQ3MWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgpAQCAtMCwwICsxLDUyIEBACitGcm9tIDI4OWVhZjg3ZjhkZTRkOWViZmQ2NjFkNGU0Mjk5YzI5NTI0MzUyNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDEwIEFwciAyMDE1IDEwOjE5OjUxICswMzAwCitTdWJqZWN0OiBNYWtlIHQvcnVuL2xvY2FsZS50IHN1cnZpdmUgbWlzc2luZyBsb2NhbGVzIG1hc2tlZCBieSBMQ19BTEwKKworSWYgTENfQUxMIGlzIHNldCB0byBhIHZhbGlkIGxvY2FsZSBidXQgYW5vdGhlciBMQ18qIHNldHRpbmcgbGlrZSBMQ19DVFlQRQoraXNuJ3QsIHQvcnVuL2xvY2FsZS50IHdvdWxkIGZhaWwgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHVuc2V0cyBMQ19BTEwsCit1bm1hc2tpbmcgdGhlIHByb2JsZW0gdW5kZXJuZWF0aC4gQWxsIHRoZSBvdGhlciB0ZXN0cyBzdXJ2aXZlIHN1Y2gKK2Egc2NlbmFyaW8uCisKK1doaWxlIHRoaXMgaXMgY2xlYXJseSBhbiBlcnJvciBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIGl0J3MgZWFzeSB0byBtYWtlCit0aGUgdGVzdCBtb3JlIHJvYnVzdCBieSBmaXJzdCBjbGVhcmluZyBhbGwgdGhlIGxvY2FsZSByZWxldmFudCB2YXJpYWJsZXMuCisKK0J1ZzogaHR0cHM6Ly9ydC5wZXJsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTEyNDMxMAorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgyMDY4CitQYXRjaC1OYW1lOiBkZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgorLS0tCisgdC9ydW4vbG9jYWxlLnQgfCA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdC9ydW4vbG9jYWxlLnQgYi90L3J1bi9sb2NhbGUudAoraW5kZXggYmQxYTAzNC4uMjEwNTMzOSAxMDA2NDQKKy0tLSBhL3QvcnVuL2xvY2FsZS50CisrKysgYi90L3J1bi9sb2NhbGUudAorQEAgLTI3LDYgKzI3LDkgQEAgbXkgQGxvY2FsZXMgPSBldmFsIHsgZmluZF9sb2NhbGVzKCBbICZMQ19BTEwsICZMQ19DVFlQRSwgJkxDX05VTUVSSUMgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIH07Cisgc2tpcF9hbGwoIm5vIGxvY2FsZXMgYXZhaWxhYmxlIikgdW5sZXNzIEBsb2NhbGVzOworIAorKyMgcmVzZXQgdGhlIGxvY2FsZSBlbnZpcm9ubWVudAorK2xvY2FsIEBFTlZ7J0xBTkcnLCAoZ3JlcCAvXkxDXy8sIGtleXMgJUVOVil9OworKworIHBsYW4gdGVzdHMgPT4gJmxhc3Q7CisgCisgbXkgJG5vbl9DX2xvY2FsZTsKK0BAIC01OCw5ICs2MSw2IEBAIEVPRgorIFNLSVA6IHsKKyAgICAgc2tpcCgiV2luZG93cyBzdG9yZXMgbG9jYWxlIGRlZmF1bHRzIGluIHRoZSByZWdpc3RyeSIsIDEgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICReTyBlcSAnTVNXaW4zMic7CistICAgIGxvY2FsICRFTlZ7TENfTlVNRVJJQ307ICMgU28gbm90IHRha2VuIGFzIGEgZGVmYXVsdAorLSAgICBsb2NhbCAkRU5We0xDX0FMTH07ICMgc28gaXQgbmV2ZXIgb3ZlcnJpZGVzIExDX05VTUVSSUMKKy0gICAgbG9jYWwgJEVOVntMQU5HfTsgICAjIFNvIG5vdCB0YWtlbiBhcyBhIGRlZmF1bHQKKyAgICAgZnJlc2hfcGVybF9pcygiZm9yIChxdyhAbG9jYWxlcykpIHtcbiIgLiA8PCdFT0YnLAorICAgICAgICAgdXNlIFBPU0lYIHF3KGxvY2FsZV9oKTsKKyAgICAgICAgIHVzZSBsb2NhbGU7CitAQCAtMzQ4LDcgKzM0OCw2IEBAIEVPRgorIAorICAgICB7CisgCWxvY2FsICRFTlZ7TENfTlVNRVJJQ30gPSAkZGlmZmVyZW50OworLQlsb2NhbCAkRU5We0xDX0FMTH07ICMgc28gaXQgbmV2ZXIgb3ZlcnJpZGVzIExDX05VTUVSSUMKKyAJZnJlc2hfcGVybF9pcyg8PCJFT0YiLAorIAkgICAgdXNlIFBPU0lYIHF3KGxvY2FsZV9oKTsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNTkzZGQ1MmY1MzViMWY0MzlkZmQwYWZlNTIyMTFhZTg5NjBlOTgwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMjQgQXVnIDIwMTQgMTI6NTY6MTEgLTA3MDAKK1N1YmplY3Q6IFBhc3MgTEQgc2V0dGluZ3MgdGhyb3VnaCB0byBzdWJkaXJlY3RvcmllcworCitbcnQuY3Bhbi5vcmcgIzI4NjMyXSBmaXhlZCBtb3N0IGlzc3VlcyB3aXRoIHBhc3NpbmcgTEQgZG93biB0bworc3ViZGlyZWN0b3J5IE1ha2VmaWxlLlBMIGZpbGVzLiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBkaXN0cmlidXRpb25zCisoaW5jbHVkaW5nIFd4LCBQYXI6OlBhY2tlciwgYW5kIFZlcmlsb2ctUGVybCkgdGhhdCBleHBsaWNpdGx5IHNldAorTEQuIFRob3NlIHN0aWxsIGNhbid0IGJlIG92ZXJyaWRkZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBBZGRpbmcgTEQgdG8KK3RoZSBQQVNUSFJVIGxpc3QgZml4ZXMgdGhpcy4KKworQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzU4NDcxCitQYXRjaC1OYW1lOiBkZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCA0YThlMTRjLi41NDhkOThlIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjc5Myw3ICsyNzkzLDcgQEAgc3ViIHBhc3RocnUgeworICAgICBteSgkc2VwKSA9ICRJc3tWTVN9ID8gJywnIDogJyc7CisgICAgICRzZXAgLj0gIlxcXG5cdCI7CisgCistICAgIGZvcmVhY2ggbXkgJGtleSAocXcoTElCIExJQlBFUkxfQSBMSU5LVFlQRSBPUFRJTUlaRQorKyAgICBmb3JlYWNoIG15ICRrZXkgKHF3KExJQiBMSUJQRVJMX0EgTElOS1RZUEUgT1BUSU1JWkUgTEQKKyAgICAgICAgICAgICAgICAgICAgICBQUkVGSVggSU5TVEFMTF9CQVNFKQorICAgICAgICAgICAgICAgICAgKQorICAgICB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI0Y2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgpAQCAtMCwwICsxLDQyIEBACitGcm9tIDYzNDQ0OTA2NmE5YzgxMGU4MTUwNjQyNWQyY2E5MjViMmZkNzJhYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEb21pbmljIEhhcmdyZWF2ZXMgPGRvbUBlYXJ0aC5saT4KK0RhdGU6IFNhdCwgMjMgTWF5IDIwMTUgMjE6MTU6MDYgKzAyMDAKK1N1YmplY3Q6IFVwZGF0ZSB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgZm9yIGZpbGVzIHBhdGNoZWQgaW4gRGViaWFuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmCistLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdCBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAoraW5kZXggN2RmMzk4ZC4uZjg1N2JkMiAxMDA2NDQKKy0tLSBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorKysrIGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CitAQCAtMSw3ICsxLDcgQEAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Db21tYW5kL01NLnBtIDdmNGRmZDBmZTg4NGJkNDI0MTJiY2YwNGNhODBlZjk3YjM5YzFkNTQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0LnBtIGJlZjA5OTk4OGIxNWZiMGIyYTFmNWFjNDhjMDFhZjFmN2YzNmQzMjkKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSA4MTY4ZTE4ZjBlM2NlM2VjZTRiYjdlN2M3MmQ1N2VjMDdjNjdjNDAyCistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDcxMTVlOTdhNTM1NTljYjNlYzA2MWRkNmY3ZjM0NGU1MjI3MjRjNGEKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSAzNDkzYWU2ZjkzMjY0ZTk2N2Y1OGRlZGFhM2RiZjNkYmNiMjQ5ODUzCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDNkN2FiZDY3NGIxNWVkMzIzZjc0MzU5NGVmMGJkMDlkYjc2YjFhZWUKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvQ29uZmlnLnBtIGY4ZGI4ZDQyNDViZjA2ODRiODIxMGM4MTFmNTBkN2NmYjFhMjdkNzgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvRkFRLnBvZCA3NTdiZmZiNDc4NTc1MjEzMTFmOGYzYmRlNDNlYmUxNjVmOGQ1MTkxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0xvY2FsZS5wbSA4MmJlMDY4NTFkZWI4NGM2NDE5YWQwMDNjZTliNmQxOTU3ZjM5NWYzCitAQCAtMTMsNyArMTMsNyBAQCBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Na2Jvb3RzdHJhcC5wbSA1ODg3MmQ2NgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01rc3ltbGlzdHMucG0gYWI4MDAyOWFiMTZkMzhkNGYyZTQxZGM4OGQyY2ViOWYzNzkwZTQ3NworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NLnBtIDQ1M2UwYWJiYzRiYjM4ZGI0YzA4MjBhZDVjNDg0NmYzMTNiNjYyOTEKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BSVgucG0gYzFiMWJhYmRhOGY0M2FlN2EyY2FiYTFjYjRmNzBmOTJhZjVhMGUzNAorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSA2ZjkwZDk0YWQzZTdhYTAwNDVhM2IxYTEwYTFiYjE4MzkxZjg5ZjU3CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtIDIxYmRlNTMyOTBiZjFhNGRhNDQ1NzI5MGI2NWJkMWIwY2E2ZjFkMTYKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9CZU9TLnBtIGNhYjJiM2NlMDhiNzFhNGNlODlhYTYzMGYyMzZlYjA4Yjg1MjQzOWQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9DeWd3aW4ucG0gNjFmY2VkMGZhZjUxOGJmODdjMjY1ZmNiNTFlZDMzMGJhMzU0NjIzZgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0Rhcndpbi5wbSBhZTBlZjUxYTdiNmRkMGIwNWFhNjFjNzc5ZGY3MTY3ZGRhNWY1MTE5CitAQCAtMjIsNyArMjIsNyBAQCBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9NYWNPUy5wbSAwNTQ0MzAxZjcxMgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX05XNS5wbSA0MzMxMzVlZWNiODViNGIxZDkwZDMwMjc0MzJmMzI5NDM2Yzc4NDQ3CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fT1MyLnBtIDFmYmI1NjA1YmZiNDdmZWVlNDA4M2ZlYmE4YWE4NWU2NTk2MjhmNzAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9RTlgucG0gNWI2NmQxZjQ4NWE2MDM0ZDk2ZmMyNGJhMTY2NWIxYmFkOWU0NDdmMQorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gOGNlZjk5YTliZDM3MGVjZmQwN2RkYjBlZmJkY2JiNDEwMTI1NWU0NQorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYzQ1NWM5MTVmYjdkYzNlZWIxMjAwZWQxY2QxOTA0OGU2ZjIxZTZiMQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VXSU4ucG0gOTM5NTcyZmRlM2Q1OWJhNzdjMmU2NzdmZTJkZjJiZWQ0YmVkNTg5OAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1ZNUy5wbSAwOWMyMDQ5YmZkMjViNzM1ZTJhNWJjZjU2YTZjZmY3YjQ4MjdmOWM4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVk9TLnBtIGQ2NWQ2M2Y4MjE3YTU1YzM2ZjYyZTI0OTgxNDk4ODk3NGY1OTNjNzkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbW9kX3BhdGhzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxNTkwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmCkBAIC0wLDAgKzEsOTkgQEAKK0Zyb20gNmM2Y2YxNGUyMDRmM2MwMzEzNzJiZmQ5NjA0YWQ1MjRkNTY5MTE4NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogVHdlYWsgQElOQyBvcmRlcmluZyBmb3IgRGViaWFuCisKK091ciBvcmRlciBpczoKKworICAgIGV0YyAoZm9yIGNvbmZpZyBmaWxlcykKKyAgICBzaXRlICg1LjguMSkKKyAgICB2ZW5kb3IgKGFsbCkKKyAgICBjb3JlICg1LjguMSkKKyAgICBzaXRlICh2ZXJzaW9uLWluZGVwKQorICAgIHNpdGUgKHByZS01LjguMSkKKworVGhlIHJhdGlvbmFsZSBiZWluZyB0aGF0IGFuIGFkbWluICh2aWEgc2l0ZSksIG9yIG1vZHVsZSBwYWNrYWdlcgorKHZlbmRvcikgY2FuIGNob3NlIHRvIHNoYWRvdyBjb3JlIG1vZHVsZXMgd2hlbiB0aGVyZSBpcyBhIG5ld2VyCit2ZXJzaW9uIHRoYW4gaXMgaW5jbHVkZWQgaW4gY29yZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL21vZF9wYXRocy5kaWZmCistLS0KKyBwZXJsLmMgfCA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3BlcmwuYyBiL3BlcmwuYworaW5kZXggMDg2NjQ1Yi4uZTY0ZjFmNCAxMDA2NDQKKy0tLSBhL3BlcmwuYworKysrIGIvcGVybC5jCitAQCAtNDM3Myw2ICs0MzczLDExIEBAIFNfaW5pdF9wZXJsbGliKHBUSFgpCisgCQkgICAgICBJTkNQVVNIX0FERF9TVUJfRElSU3xJTkNQVVNIX0NBTl9SRUxPQ0FURSk7CisgI2VuZGlmCisgCisrI2lmZGVmIERFQklBTgorKyAgICAvKiBmb3IgY29uZmlndXJhdGlvbiB3aGVyZSAvdXNyIGlzIG1vdW50ZWQgcm8gKENQQU46OkNvbmZpZywgTmV0OjpDb25maWcpICovCisrICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIFNUUl9XSVRIX0xFTigiL2V0Yy9wZXJsIiksIDB4MCk7CisrI2VuZGlmCisrCisgI2lmZGVmIFNJVEVBUkNIX0VYUAorICAgICAvKiBzaXRlYXJjaCBpcyBhbHdheXMgcmVsYXRpdmUgdG8gc2l0ZWxpYiBvbiBXaW5kb3dzIGZvcgorICAgICAgKiBETEwtYmFzZWQgcGF0aCBpbnR1aXRpb24gdG8gd29yayBjb3JyZWN0bHkgKi8KK0BAIC00NDkwLDYgKzQ0OTUsNTkgQEAgU19pbml0X3BlcmxsaWIocFRIWCkKKyAJCSAgICAgIElOQ1BVU0hfQUREX09MRF9WRVJTfElOQ1BVU0hfQ0FOX1JFTE9DQVRFKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgREVCSUFOCisrICAgIC8qIE5vbi12ZXJzaW9uZWQgc2l0ZSBkaXJlY3RvcnkgZm9yIGxvY2FsIG1vZHVsZXMgYW5kIGZvcgorKyAgICAgICBjb21wYXRhYmlsaXR5IHdpdGggdGhlIHByZXZpb3VzIHBhY2thZ2VzJyBzaXRlIGRpcnMgKi8KKysgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gU1RSX1dJVEhfTEVOKCIvdXNyL2xvY2FsL2xpYi9zaXRlX3BlcmwiKSwKKysJCSAgICAgIElOQ1BVU0hfQUREX1NVQl9ESVJTKTsKKysKKysjaWZkZWYgUEVSTF9JTkNfVkVSU0lPTl9MSVNUCisrICAgIHsKKysJc3RydWN0IHN0YXQgczsKKysKKysJLyogYWRkIHNtYWxsIGJ1ZmZlciBpbiBjYXNlIG9sZCB2ZXJzaW9ucyBhcmUgbG9uZ2VyIHRoYW4gdGhlCisrCSAgIGN1cnJlbnQgdmVyc2lvbiAqLworKwljaGFyIHNpdGVhcmNoW3NpemVvZihTSVRFQVJDSF9FWFApKzE2XSA9IFNJVEVBUkNIX0VYUDsKKysJY2hhciBzaXRlbGliW3NpemVvZihTSVRFTElCX0VYUCkrMTZdID0gU0lURUxJQl9FWFA7CisrCWNoYXIgY29uc3QgKnZlcnNbXSA9IHsgUEVSTF9JTkNfVkVSU0lPTl9MSVNUIH07CisrCWNoYXIgY29uc3QgKipwOworKworKwljaGFyICphcmNoX3ZlcnMgPSBzdHJyY2hyKHNpdGVhcmNoLCAnLycpOworKwljaGFyICpsaWJfdmVycyA9IHN0cnJjaHIoc2l0ZWxpYiwgJy8nKTsKKysKKysJaWYgKGFyY2hfdmVycyAmJiBpc2RpZ2l0KCorK2FyY2hfdmVycykpCisrCSAgICAqYXJjaF92ZXJzID0gMDsKKysJZWxzZQorKwkgICAgYXJjaF92ZXJzID0gMDsKKysKKysJaWYgKGxpYl92ZXJzICYmIGlzZGlnaXQoKisrbGliX3ZlcnMpKQorKwkgICAgKmxpYl92ZXJzID0gMDsKKysJZWxzZQorKwkgICAgbGliX3ZlcnMgPSAwOworKworKwkvKiB0aGVyZSBpcyBzb21lIGR1cGxpY2F0aW9uIGhlcmUgYXMgaW5jcHVzaCBkb2VzIHNvbWV0aGluZworKwkgICBzaW1pbGFyIGludGVybmFsbHksIGJ1dCByZXF1aXJlZCBhcyBzaXRlYXJjaCBpcyBub3QgYQorKwkgICBzdWJkaXJlY3Rvcnkgb2Ygc2l0ZWxpYiAqLworKwlmb3IgKHAgPSB2ZXJzOyAqcDsgcCsrKQorKwl7CisrCSAgICBpZiAoYXJjaF92ZXJzKQorKwkgICAgeworKwkJc3RyY3B5KGFyY2hfdmVycywgKnApOworKwkJaWYgKFBlcmxMSU9fc3RhdChzaXRlYXJjaCwgJnMpID49IDAgJiYgU19JU0RJUihzLnN0X21vZGUpKQorKwkJICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIHNpdGVhcmNoLCBzdHJsZW4oc2l0ZWFyY2gpLCAweDApOworKwkgICAgfQorKworKwkgICAgaWYgKGxpYl92ZXJzKQorKwkgICAgeworKwkJc3RyY3B5KGxpYl92ZXJzLCAqcCk7CisrCQlpZiAoUGVybExJT19zdGF0KHNpdGVsaWIsICZzKSA+PSAwICYmIFNfSVNESVIocy5zdF9tb2RlKSkKKysJCSAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBzaXRlbGliLCBzdHJsZW4oc2l0ZWxpYiksIDB4MCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyNlbmRpZgorKyNlbmRpZgorKworICNpZmRlZiBQRVJMX09USEVSTElCRElSUworICAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBTVFJfV0lUSF9MRU4oUEVSTF9PVEhFUkxJQkRJUlMpLAorIAkJICAgICAgSU5DUFVTSF9BRERfT0xEX1ZFUlN8SU5DUFVTSF9BRERfQVJDSE9OTFlfU1VCX0RJUlMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxMWZkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCkBAIC0wLDAgKzEsOTIgQEAKK0Zyb20gMjQwZjJmNGFlYjM4NTBiYzBjNTM3MGI5ZmJjMzkwOTU3M2JlZDliMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBEb24ndCBpbnN0YWxsIC5wYWNrbGlzdCBvciBwZXJsbG9jYWwucG9kIGZvciBwZXJsIG9yIHZlbmRvcgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMzUgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggNTcwYTYzMS4uMzkxZGMyMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMjIsMTEgKzIxMjIsNiBAQCBwdXJlX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyB9OworIAorICAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistCQl3cml0ZSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLX0gdW5sZXNzICRzZWxmLT57Tk9fUEFDS0xJU1R9OworLQorLSAgICBwdXNoIEBtLAorIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAJCSIkKElOU1RfQVJDSExJQikiICIkKERFU1RJTlNUQUxMQVJDSExJQikiIFwKKyAJCSIkKElOU1RfQklOKSIgIiQoREVTVElOU1RBTExCSU4pIiBcCitAQCAtMjE1OCwxMCArMjE1Myw2IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMU0lURUxJQikiIFwKKyBwdXJlX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKy0gICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMVkVORE9SQVJDSCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CisgCisgICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExWRU5ET1JMSUIpIiBcCitAQCAtMjE4NywzNyArMjE3OCwxOSBAQCBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCisgICAgIHB1c2ggQG0sIHF7CisgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMUFJJVkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpL3Blcmxsb2NhbC5wb2QiCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTFNJVEVBUkNIKSIKKyAJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCisgCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCisgCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKysJCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMU0lURUFSQ0gpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIH0gdW5sZXNzICRzZWxmLT57Tk9fUEVSTExPQ0FMfTsKKyAKK0BAIC0yMjI2LDEzICsyMTk5LDExIEBAIHVuaW5zdGFsbCA6OiB1bmluc3RhbGxfZnJvbV8kKElOU1RBTExESVJTKWRpcnMKKyAJJChOT0VDSE8pICQoTk9PUCkKKyAKKyB1bmluc3RhbGxfZnJvbV9wZXJsZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3NpdGVkaXJzIDo6CisgCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV92ZW5kb3JkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIH07CisgCisgICAgIGpvaW4oIiIsQG0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTZiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wYXRjaGxldmVsLmRpZmYKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiNTE3YzVlMTVkMDg3MWUzNmQwZjExODc2NjFmZTFkZDI4ZGRmODIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAxNSBNYXkgMjAxMSAxOTozNTo1OCArMDMwMAorU3ViamVjdDogTGlzdCBwYWNrYWdlZCBwYXRjaGVzIGluIHBhdGNobGV2ZWwuaAorCitPcmlnaW46IHZlbmRvcgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81Njc0ODkKKworVGhlIGxpc3Qgb2YgcGFja2FnZWQgcGF0Y2hlcyBpcyBpbiBwYXRjaGxldmVsLWRlYmlhbi5oLCB3aGljaCBpcyBnZW5lcmF0ZWQKK2Zyb20gdGhlIGRlYmlhbi9wYXRjaGVzLyBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyB0aGUgcGFja2FnZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3BhdGNobGV2ZWwuZGlmZgorLS0tCisgcGF0Y2hsZXZlbC5oIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9wYXRjaGxldmVsLmggYi9wYXRjaGxldmVsLmgKK2luZGV4IGEwYWQ3OGIuLjAxMzY3YjcgMTAwNjQ0CistLS0gYS9wYXRjaGxldmVsLmgKKysrKyBiL3BhdGNobGV2ZWwuaAorQEAgLTEzNyw2ICsxMzcsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxvY2FsX3BhdGNoZXNbXSA9IHsKKyAJLCJ1bmNvbW1pdHRlZC1jaGFuZ2VzIgorICNlbmRpZgorIAlQRVJMX0dJVF9VTlBVU0hFRF9DT01NSVRTICAgIAkvKiBkbyBub3QgcmVtb3ZlIHRoaXMgbGluZSAqLworKyNpZmRlZiBERUJJQU4KKysjaW5jbHVkZSAicGF0Y2hsZXZlbC1kZWJpYW4uaCIKKysjZW5kaWYKKyAJLE5VTEwKKyB9OworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzk1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBjOTljNjFlOGY4NjNhNTA4YTA3OTMxNjgwMTFjOThkYzc0YWJiZDA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pYyBIYXJncmVhdmVzIDxkb21AZWFydGgubGk+CitEYXRlOiBTYXQsIDE0IEFwciAyMDEyIDExOjM0OjA1ICswMTAwCitTdWJqZWN0OiBJbnZva2UgeC10ZXJtaW5hbC1lbXVsYXRvciByYXRoZXIgdGhhbiB4dGVybSBpbiBwZXJsNWRiLnBsCisKK0luIERlYmlhbiBzeXN0ZW1zLCB4dGVybSBtaWdodCBub3QgZXhpc3Qgb3IgbWlnaHQgbm90IGJlIHRoZSBwcmVmZXJyZWQKK3Rlcm1pbmFsIGVtdWxhdG9yLiBVc2UgeC10ZXJtaW5hbC1lbXVsYXRvciBpbnN0ZWFkCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjY4NDkwCitGb3J3YXJkZWQ6IG5vdC1uZWVkZWQKKworUGF0Y2gtTmFtZTogZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaAorLS0tCisgbGliL3Blcmw1ZGIucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcGVybDVkYi5wbCBiL2xpYi9wZXJsNWRiLnBsCitpbmRleCA3ZTcxOTRlLi5jNDY2YmYzIDEwMDY0NAorLS0tIGEvbGliL3Blcmw1ZGIucGwKKysrKyBiL2xpYi9wZXJsNWRiLnBsCitAQCAtNjk2MCw3ICs2OTYwLDcgQEAgcHJvcGVybHkgc2V0IHVwLgorIHN1YiB4dGVybV9nZXRfZm9ya19UVFkgeworICAgICAoIG15ICRuYW1lID0gJDAgKSA9fiBzLF4uKlsvXFxdLCxzOworICAgICBvcGVuIFhULAorLXFxWzM+JjEgeHRlcm0gLXRpdGxlICJEYXVnaHRlciBQZXJsIGRlYnVnZ2VyICRwaWRzICRuYW1lIiAtZSBzaCAtYyAndHR5IDE+JjM7XAorK3FxWzM+JjEgeC10ZXJtaW5hbC1lbXVsYXRvciAtVCAiRGF1Z2h0ZXIgUGVybCBkZWJ1Z2dlciAkcGlkcyAkbmFtZSIgLWUgc2ggLWMgJ3R0eSAxPiYzO1wKKyAgc2xlZXAgMTAwMDAwMDAnIHxdOworIAorICAgICAjIEdldCB0aGUgb3V0cHV0IGZyb20gJ3R0eScgYW5kIGNsZWFuIGl0IHVwIGEgbGl0dGxlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMWVhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsaXZwLmRpZmYKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBmYmZiZWI3YTY5MGQ3MDNhM2NkYzU2ZjkyM2U4OWViN2I3OTk3ZDMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCA5IEphbiAyMDA5IDE4OjU0OjQ3ICswMjAwCitTdWJqZWN0OiBNYWtlIHBlcmxpdnAgc2tpcCBpbmNsdWRlIGRpcmVjdG9yaWVzIGluIC91c3IvbG9jYWwKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81MTA4OTUKKworT24gU2F0LCBKYW4gMTAsIDIwMDkgYXQgMTI6Mzc6MThBTSArMTEwMCwgQnJlbmRhbiBPJ0RlYSB3cm90ZToKKz4gT24gV2VkLCBKYW4gNywgMjAwOSBhdCAxMjoyMSBBTSwgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPiB3cm90ZToKKworPiA+IFdlIGNvdWxkIGNyZWF0ZSB0aGUgZGlyZWN0b3JpZXMgaW4gYSBwb3N0aW5zdCBzY3JpcHQsIGJ1dCBJJ20gbm90IHN1cmUKKz4gPiBJIHNlZSB0aGUgcG9pbnQuIFRoZXkgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpbnN0YWxsaW5nCis+ID4gQ1BBTiBtb2R1bGVzLgorPgorPiBUaGUgZGlyZWN0b3JpZXMgYXJlIGludGVudGlvbmFsbHkgbm90IGNyZWF0ZWQsIGFzIHRoaXMgd2F5IHRoZXkgYXJlCis+IGV4Y2x1ZGVkIGZyb20gdGhlIHNlYXJjaCBwYXRoIGF0IHN0YXJ0LXVwLCBzYXZpbmcgYSBidW5jaCBvZiB3YXN0ZWQKKz4gc3RhdHMgYXQgdXNlL3JlcXVpcmUgdGltZSBpbiB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGUgdXNlciBoYXMgbm90Cis+IGluc3RhbGxlZCBhbnkgbG9jYWwgcGFja2FnZXMuICBBcyBOaWtvIHBvaW50cyBvdXQsIHRoZXkgd2lsbCBiZQorPiBjcmVhdGVkIGFzIHJlcXVpcmVkLgorCitTaWduZWQtb2ZmLWJ5OiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wZXJsaXZwLmRpZmYKKy0tLQorIHV0aWxzL3BlcmxpdnAuUEwgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3V0aWxzL3BlcmxpdnAuUEwgYi91dGlscy9wZXJsaXZwLlBMCitpbmRleCBjMmYwYTExLi5jYzQ5Zjk2IDEwMDY0NAorLS0tIGEvdXRpbHMvcGVybGl2cC5QTAorKysrIGIvdXRpbHMvcGVybGl2cC5QTAorQEAgLTE1Myw2ICsxNTMsNyBAQCBteSAkSU5DX3RvdGFsID0gMDsKKyBteSAkSU5DX3RoZXJlID0gMDsKKyBmb3JlYWNoIChASU5DKSB7CisgICAgIG5leHQgaWYgJF8gZXEgJy4nOyAjIHNraXAgLWQgdGVzdCBoZXJlCisrICAgIG5leHQgaWYgbXwvdXNyL2xvY2FsfDsgIyBub3Qgc2hpcHBlZCBvbiBEZWJpYW4KKyAgICAgaWYgKC1kICRfKSB7CisgICAgICAgICBwcmludCAiIyMgUGVybCBcQElOQyBkaXJlY3RvcnkgJyRfJyBleGlzdHMuXG4iIGlmICRvcHR7J3YnfTsKKyAgICAgICAgICRJTkNfdGhlcmUrKzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3MGI4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCkBAIC0wLDAgKzEsMjMgQEAKK0Zyb20gMjdhNDk1MmMyZTUzMTk0N2RjOWYyZjAyZTIwNjNkMTE3ZTJlNjk5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTggQXByIDIwMTUgMTc6Mzk6MzIgKzAzMDAKK1N1YmplY3Q6IFVwZGF0ZSBwb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGZvciBwb2QybWFuIG1vZGlmaWNhdGlvbnMKKworUGF0Y2gtTmFtZTogZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCistLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK2luZGV4IDBlZWQ5ZjcuLjdkZjM5OGQgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKKysrKyBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorQEAgLTQyLDcgKzQyLDcgQEAgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL01ha2VmaWxlLlBMIDYwNWQwYWVlMzFhZWJlODRhOTk0MDhmOWFiNWY2NDRkYjUKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdC9maWxlLnQgMTI0ZTY0YWE3N2U3NTUyMzVlYjI5NzY0NGE4N2ZhYzUzODhkM2Q3OAorIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS90L3RpZS50IDcxMmVhN2VkZDBjYzgwNWNlMWMwYjgxNzJjMDFiMDNkZDE5YjU4M2QKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdHlwZW1hcCAyNGJmZjA4OGJhYmVhZGFjMDg3M2U4ZGYzOTBkMTY2NmQ5ZDlkYjRhCistcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCBmODFhY2Y1M2YzZmY0NmNkY2M1ZWJkZDY2MWM1ZDEzZWIzNWQyMGQ2CisrcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCA3NjFmMzVkM2ZjZjkxYzFiYzJmOWUwMjRhOWZhNWM2MmZkM2ZjMzM4CisgcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMnRleHQuUEwgYjQ2OTNmY2ZlNGEwYTFiMzhhMjE1Y2ZiODk4NWE2NWQ1ZDAyNWQ2OQorIHZlcnNpb24gY3Bhbi92ZXJzaW9uL2xpYi92ZXJzaW9uLnBtIGQwOTIzYjg5NWQ1N2YxZDY2OWFlMzZmY2Y4NWM4N2IxNmRiMzQxZDEKKyB2ZXJzaW9uIHZ1dGlsLmMgNjY4ZjE3Y2E0M2UyNTI3NjQ1Njc0ZDI5YmE3NzJiODYzMzBkNTY2MwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxZWZiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKQEAgLTAsMCArMSwxMTggQEAKK0Zyb20gOTE0OTQ4ZjAyNmVmY2UwMmNmMGFiZmY4YjAzMTJhYWFkOTY1OTJlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBGaWRkbGUgd2l0aCAqUFJFRklYIGFuZCB2YXJpYWJsZXMgd3JpdHRlbiB0byB0aGUgbWFrZWZpbGUKKworRmlkZGxlIHdpdGggKlBSRUZJWCBhbmQgdmFyaWFibGVzIHdyaXR0ZW4gdG8gdGhlIG1ha2VmaWxlIHNvIHRoYXQKK2luc3RhbGwgZGlyZWN0b3JpZXMgbWF5IGJlIGNoYW5nZWQgd2hlbiBtYWtlIGlzIHJ1biBieSBwYXNzaW5nCitQUkVGSVg9IHRvIHRoZSAibWFrZSBpbnN0YWxsIiBjb21tYW5kICh1c2VkIHdoZW4gcGFja2FnaW5nCittb2R1bGVzKS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gIHwgMTIgKysrKysrLS0tLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAgMyArLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudCAgICAgICAgICAgICAgICB8ICA0ICstLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQgICAgICAgICB8IDEwICsrKysrLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0KK2luZGV4IDRjMDAxMjkuLjFlYTIwMzUgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCitAQCAtOTAyLDggKzkwMiw2IEBAIGFsbCBQT0QgZmlsZXMgaW4gTUFOMVBPRFMgYW5kIE1BTjNQT0RTLgorIHN1YiBtYW5pZnlwb2RzX3RhcmdldCB7CisgICAgIG15KCRzZWxmKSA9IHNoaWZ0OworIAorLSAgICBteSAkbWFuMXBvZHMgICAgICA9ICcnOworLSAgICBteSAkbWFuM3BvZHMgICAgICA9ICcnOworICAgICBteSAkZGVwZW5kZW5jaWVzICA9ICcnOworIAorICAgICAjIHBvcHVsYXRlIG1hblhwb2RzICYgZGVwZW5kZW5jaWVzOgorQEAgLTkxOSw3ICs5MTcsNyBAQCBFTkQKKyAgICAgZm9yZWFjaCBteSAkc2VjdGlvbiAocXcoMSAzKSkgeworICAgICAgICAgbXkgJHBvZHMgPSAkc2VsZi0+eyJNQU4ke3NlY3Rpb259UE9EUyJ9OworICAgICAgICAgbXkgJHAybSA9IHNwcmludGYgPDxDTUQsICRdID4gNS4wMDggPyAiIC11IiA6ICIiOworLQlcJChOT0VDSE8pIFwkKFBPRDJNQU4pIC0tc2VjdGlvbj0kc2VjdGlvbiAtLXBlcm1fcnc9XCQoUEVSTV9SVyklcworKwlcJChOT0VDSE8pIFwkKFBPRDJNQU4pIC0tc2VjdGlvbj1cJChNQU4ke3NlY3Rpb259RVhUKSAtLXBlcm1fcnc9XCQoUEVSTV9SVyklcworIENNRAorICAgICAgICAgcHVzaCBAbWFuX2NtZHMsICRzZWxmLT5zcGxpdF9jb21tYW5kKCRwMm0sIG1hcCB7KCRfLCRwb2RzLT57JF99KX0gc29ydCBrZXlzICUkcG9kcyk7CisgICAgIH0KK0BAIC0xODc1LDkgKzE4NzMsMTEgQEAgc3ViIGluaXRfSU5TVEFMTF9mcm9tX1BSRUZJWCB7CisgICAgICAgICAkc2VsZi0+e1NJVEVQUkVGSVh9ICAgfHw9ICRzcHJlZml4OworICAgICAgICAgJHNlbGYtPntWRU5ET1JQUkVGSVh9IHx8PSAkdnByZWZpeDsKKyAKKy0gICAgICAgICMgTG90cyBvZiBNTSBleHRlbnNpb24gYXV0aG9ycyBsaWtlIHRvIHVzZSAkKFBSRUZJWCkgc28gd2UKKy0gICAgICAgICMgcHV0IHNvbWV0aGluZyBzZW5zaWJsZSBpbiB0aGVyZSBubyBtYXR0ZXIgd2hhdC4KKy0gICAgICAgICRzZWxmLT57UFJFRklYfSA9ICckKCcudWMgJHNlbGYtPntJTlNUQUxMRElSU30uJ1BSRUZJWCknOworKwlteSAkcCA9ICRzZWxmLT57UFJFRklYfSA9ICRzZWxmLT57UEVSTFBSRUZJWH07CisrCWZvciBteSAkdCAocXcvUEVSTCBTSVRFIFZFTkRPUi8pCisrCXsKKysJICAgICRzZWxmLT57IiR7dH1QUkVGSVgifSA9fiBzIV5cUSRwXEUoPz0vfCQpIVwkKFBSRUZJWCkhOworKwl9CisgICAgIH0KKyAKKyAgICAgbXkgJGFyY2ggICAgPSAkQ29uZmlne2FyY2huYW1lfTsKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCAzOTFkYzIyLi40YThlMTRjIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMzA3Nyw4ICszMDc3LDcgQEAgc3ViIHByZWZpeGlmeSB7CisgICAgIHdhcm4gIiAgcHJlZml4aWZ5ICR2YXIgPT4gJHBhdGhcbiIgaWYgJFZlcmJvc2UgPj0gMjsKKyAgICAgd2FybiAiICAgIGZyb20gJHNwcmVmaXggdG8gJHJwcmVmaXhcbiIgaWYgJFZlcmJvc2UgPj0gMjsKKyAKKy0gICAgaWYoICRzZWxmLT57QVJHU317UFJFRklYfSAmJgorLSAgICAgICAgJHBhdGggIX4gc3teXFEkc3ByZWZpeFxFXGJ9eyRycHJlZml4fXMgKQorKyAgICBpZiggJHBhdGggIX4gc3teXFEkc3ByZWZpeFxFXGJ9eyRycHJlZml4fXMgJiYgJHNlbGYtPntBUkdTfXtQUkVGSVh9ICkKKyAgICAgeworIAorICAgICAgICAgd2FybiAiICAgIGNhbm5vdCBwcmVmaXgsIHVzaW5nIGRlZmF1bHQuXG4iIGlmICRWZXJib3NlID49IDI7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAoraW5kZXggOTEwNThiYi4uZTM5OWNlZCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAorQEAgLTY1LDkgKzY1LDcgQEAgaXNhX29rKCAkbW0sICdFeHRVdGlsczo6TWFrZU1ha2VyJyApOworIGlzKCAkbW0tPntOQU1FfSwgJ0JpZzo6RHVtbXknLCAgJ05BTUUnICk7CisgaXMoICRtbS0+e1ZFUlNJT059LCAwLjAxLCAgICAgICAgICAgICdWRVJTSU9OJyApOworIAorLW15ICRjb25maWdfcHJlZml4ID0gJENvbmZpZ3tpbnN0YWxscHJlZml4ZXhwfSB8fCAkQ29uZmlne2luc3RhbGxwcmVmaXh9IHx8CistICAgICAgICAgICAgICAgICAgICAkQ29uZmlne3ByZWZpeGV4cH0gICAgICAgIHx8ICRDb25maWd7cHJlZml4fTsKKy1pcyggJG1tLT57UEVSTFBSRUZJWH0sICRjb25maWdfcHJlZml4LCAgICdQRVJMUFJFRklYJyApOworK2lzKCAkbW0tPntQRVJMUFJFRklYfSwgJyQoUFJFRklYKScsICAgJ1BFUkxQUkVGSVgnICk7CisgCisgaXMoICEhJG1tLT57UEVSTF9DT1JFfSwgISEkRU5We1BFUkxfQ09SRX0sICdQRVJMX0NPUkUnICk7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CitpbmRleCBlOGRlN2M2Li4zZmIzZjEyIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQKK0BAIC0xMCw3ICsxMCw3IEBAIEJFR0lOIHsKKyB9CisgCisgdXNlIHN0cmljdDsKKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA1MjsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA0NzsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6QkZEOworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworQEAgLTYyLDE2ICs2MiwxNiBAQCBsaWtlKCAkc3Rkb3V0LT5yZWFkLCBxcnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAoPzpXcml0aW5nXCBNWU1FVEEueW1sXCBhbmRcIE1ZTUVUQS5qc29uXG4pPworIH14ICk7CisgCistaXMoICRtbS0+e1BSRUZJWH0sICckKFNJVEVQUkVGSVgpJywgJ1BSRUZJWCBzZXQgYmFzZWQgb24gSU5TVEFMTERJUlMnICk7CisrI2lzKCAkbW0tPntQUkVGSVh9LCAnJChTSVRFUFJFRklYKScsICdQUkVGSVggc2V0IGJhc2VkIG9uIElOU1RBTExESVJTJyApOworIAorIGlzYV9vayggJG1tLCAnRXh0VXRpbHM6Ok1ha2VNYWtlcicgKTsKKyAKKyBpcyggJG1tLT57TkFNRX0sICdCaWc6OkR1bW15JywgICdOQU1FJyApOworIGlzKCAkbW0tPntWRVJTSU9OfSwgMC4wMSwgICAgICAgICAgICAnVkVSU0lPTicgKTsKKyAKKy1mb3JlYWNoIG15ICRwcmVmaXggKHF3KFBSRUZJWCBQRVJMUFJFRklYIFNJVEVQUkVGSVggVkVORE9SUFJFRklYKSkgeworLSAgICB1bmxpa2UoICRtbS0+eyRwcmVmaXh9LCBxci9cJFwoUFJFRklYXCkvICk7CistfQorKyNmb3JlYWNoIG15ICRwcmVmaXggKHF3KFBSRUZJWCBQRVJMUFJFRklYIFNJVEVQUkVGSVggVkVORE9SUFJFRklYKSkgeworKyMgICAgdW5saWtlKCAkbW0tPnskcHJlZml4fSwgcXIvXCRcKFBSRUZJWFwpLyApOworKyN9CisgCisgCisgbXkgJFBSRUZJWCA9IEZpbGU6OlNwZWMtPmNhdGRpcignZm9vJywgJ2JhcicpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAyMWJjMDMzNzU1ZjBiNjA5ZjliYjJhYTllOThiMTBkNTg0MjQ0MDZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBQcnVuZSB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgd2FudGVkIHRvIHdoYXQgd2UgYWN0dWFsbHkgbmVlZC4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xMjgzNTUKKworV2Ugd2FudCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgb24gcGVybC1iYXNlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLAorYW5kIHNvbWUgb2YgdGhlIG9yaWdpbmFsIGxpc3QgbWF5IGJlIHByZXNlbnQgb24gYnVpbGRkcyAoc2VlIEJ1ZyMxMjgzNTUpLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcHJ1bmVfbGlicy5kaWZmCistLS0KKyBDb25maWd1cmUgfCA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NvbmZpZ3VyZSBiL0NvbmZpZ3VyZQoraW5kZXggMGE0MDVkMy4uNmZjYzNiYyAxMDA3NTUKKy0tLSBhL0NvbmZpZ3VyZQorKysrIGIvQ29uZmlndXJlCitAQCAtMTQ1NCw4ICsxNDU0LDcgQEAgbGlic3dhbnRlZF91c2VsYXJnZWZpbGVzPScnCisgOiBzZXQgdXNlc29ja3Mgb24gdGhlIENvbmZpZ3VyZSBjb21tYW5kIGxpbmUgdG8gZW5hYmxlIHNvY2tzLgorIDogTGlzdCBvZiBsaWJyYXJpZXMgd2Ugd2FudC4KKyA6IElmIGFueW9uZSBuZWVkcyBleHRyYSAtbHh4eCwgcHV0IHRob3NlIGluIGEgaGludCBmaWxlLgorLWxpYnN3YW50ZWQ9ImNsIHB0aHJlYWQgc29ja2V0IGJpbmQgaW5ldCBuc2wgbm0gbmRibSBnZGJtIGRibSBkYiBtYWxsb2MgZGwgbGQiCistbGlic3dhbnRlZD0iJGxpYnN3YW50ZWQgc3VuIG0gY3J5cHQgc2VjIHV0aWwgYyBjcG9zaXggcG9zaXggdWNiIGJzZCBCU0QiCisrbGlic3dhbnRlZD0nZ2RibSBnZGJtX2NvbXBhdCBkYiBkbCBtIGMgY3J5cHQnCisgOiBXZSBwcm9iYWJseSB3YW50IHRvIHNlYXJjaCAvdXNyL3NobGliIGJlZm9yZSBtb3N0IG90aGVyIGxpYnJhcmllcy4KKyA6IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBsaWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIHJvdXRpbmUgZXh0bGlibGlzdC4KKyBnbGlicHRoPWBlY2hvICIgJGdsaWJwdGggIiB8IHNlZCAtZSAncyEgL3Vzci9zaGxpYiAhICEnYAorQEAgLTIzNTkzLDcgKzIzNTkyLDcgQEAgc3Vub3MqWDQqKQorICAgICA7OworICopIGNhc2UgIiR1c2VkbCIgaW4KKyAgICAgJGRlZmluZXx0cnVlfFt5WV0qKQorLQkgICAgc2V0IFggYGVjaG8gIiAkbGlicyAiIHwgc2VkIC1lICdzQCAtbG5kYm0gQCBAJyAtZSAnc0AgLWxnZGJtIEAgQCcgLWUgJ3NAIC1sZ2RibV9jb21wYXQgQCBAJyAtZSAnc0AgLWxkYm0gQCBAJyAtZSAnc0AgLWxkYiBAIEAnYAorKwkgICAgc2V0IFggYGVjaG8gIiAkbGlicyAiIHwgc2VkIC1lICdzQCAtbGdkYm0gQCBAJyAtZSAnc0AgLWxnZGJtX2NvbXBhdCBAIEAnIC1lICdzQCAtbGRiIEAgQCdgCisgCSAgICBzaGlmdAorIAkgICAgcGVybGxpYnM9IiQqIgorIAkgICAgOzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTNmYzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gY2IzZTk4ZTE3YTY2Njg5NjE1MGIxMDk2OTRlOWViOTI3ODYyMDg0NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTcgTWF5IDIwMTQgMTQ6NTc6MDEgKzAzMDAKK1N1YmplY3Q6IFNraXAgYSByZWdlbmVyYXRpb24gY2hlY2sgaW4gdW5yZWxhdGVkIGdpdCByZXBvc2l0b3JpZXMKKworSWYgdGhlIHRlc3QgaXMgcnVuIGluIGEgZ2l0IHJlcG9zaXRvcnkgd2l0aG91dCBsaWIvLmdpdGlnbm9yZSwKK2ZvciBpbnN0YW5jZSBiZWNhdXNlIHRoZSByZXBvc2l0b3J5IG9ubHkgaW1wb3J0ZWQgdGhlIFBlcmwgdGFyYmFsbCwKK3RoZSByZWdlbmVyYXRpb24gY2hlY2sgaXMgYnJva2VuIGJlY2F1c2UgbGliLy5naXRpZ25vcmUgaXMgbWlzc2luZy4KKworUGF0Y2gtTmFtZTogZGViaWFuL3JlZ2VuLXNraXAuZGlmZgorLS0tCisgcmVnZW4vbGliX2NsZWFudXAucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9yZWdlbi9saWJfY2xlYW51cC5wbCBiL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCitpbmRleCBjOWQ2ZTQzLi5mZWNlMWVkIDEwMDY0NAorLS0tIGEvcmVnZW4vbGliX2NsZWFudXAucGwKKysrKyBiL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCitAQCAtMTU5LDcgKzE1OSw3IEBAIGZvcmVhY2ggKCd3aW4zMi9NYWtlZmlsZScsICd3aW4zMi9tYWtlZmlsZS5taycpIHsKKyB9CisgCisgIyBUaGlzIG11c3QgY29tZSBsYXN0IGFzIGl0IGNhbiBleGl0IGVhcmx5OgorLWlmICgkVEFQICYmICEtZCAnLmdpdCcgJiYgIS1mICdsaWIvLmdpdGlnbm9yZScpIHsKKytpZiAoJFRBUCAmJiAhLWQgJy5naXQnIHx8ICEtZiAnbGliLy5naXRpZ25vcmUnKSB7CisgICAgIHByaW50ICJvayAjIHNraXAgbm90IGJlaW5nIHJ1biBmcm9tIGEgZ2l0IGNoZWNrb3V0LCBoZW5jZSBubyBsaWIvLmdpdGlnbm9yZVxuIjsKKyAgICAgZXhpdCAwOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZjMGJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gNDI4NTNhZjY1YTI4MDY2YjExOWQyM2Q5NmU5NjRlOTRiNTVhODU0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgNSBBdWcgMjAxMSAxMDo1MDoxOCArMDMwMAorU3ViamVjdDogU2tpcCBhIGNyYXNoaW5nIHRlc3QgY2FzZSBpbiB0L29wL3RocmVhZHMudCBvbiBHTlUva0ZyZWVCU0QKKworQnVnOiBodHRwOi8vcnQucGVybC5vcmcvcnQzL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9OTYyNzIKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjI4NDkzCisKK1RoZSBjcmFzaCBpcyBub3QgYSByZWdyZXNzaW9uIGluIDUuMTQsIGl0IGp1c3QgZ2V0cyB0cmlnZ2VyZWQgdGhlcmUgYnkKK2EgbmV3IHVucmVsYXRlZCB0ZXN0IGNhc2UuCisKK1NraXAgdGhlIHRlc3QgdW50aWwgdGhlIGN1bHByaXQgaXMgZm91bmQuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYKKy0tLQorIHQvb3AvdGhyZWFkcy50IHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdC9vcC90aHJlYWRzLnQgYi90L29wL3RocmVhZHMudAoraW5kZXggZTc2Yzk1Ni4uYmVjMjEwYiAxMDA2NDQKKy0tLSBhL3Qvb3AvdGhyZWFkcy50CisrKysgYi90L29wL3RocmVhZHMudAorQEAgLTM3Niw2ICszNzYsOSBAQCBFT0YKKyB9CisgCisgCisrU0tJUDogeworKyAgICBza2lwICJbcGVybCAjOTYyNzJdIGF2b2lkIGNyYXNoIG9uIEdOVS9rRnJlZUJTRCIsIDEKKysgICAgICAgIGlmICReTyBlcSAnZ251a2ZyZWVic2QnOworICMgW3BlcmwgIzc4NDk0XSBQaXBlcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIGJsb2NrIHdoZW4gY2xvc2VkCisgeworICAgbXkgJHBlcmwgPSB3aGljaF9wZXJsOworQEAgLTM4NCw2ICszODcsNyBAQCBFT0YKKyAgIHRocmVhZHMtPmNyZWF0ZShzdWIgeyB9KS0+am9pbjsKKyAgIG9rKDEsICJQaXBlcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIGRvIG5vdCBibG9jayB3aGVuIGNsb3NlZCIpOworIH0KKyt9CisgCisgIyBbcGVybCAjMTA1MjA4XSBUeXBlZ2xvYiBjbG9uZXMgc2hvdWxkIG5vdCBiZSBjbG9uZWQgYWdhaW4gZHVyaW5nIGEgam9pbgorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODcxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYWU5YjY0NWQ2ZGEyOTkwZmQwNTUzNjhlY2EyYzY3YzQ0OTQ3NGUzOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMjIgQXByIDIwMTEgMTE6MTU6MzIgKzAzMDAKK1N1YmplY3Q6IFNraXAgdGVzdHMgc3BlY2lmaWMgdG8gdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5CisKK1RoZXNlIHRlc3RzIGZhaWwgaWYgcnVuIGZyb20gYSBkaWZmZXJlbnQgZ2l0IHJlcG9zaXRvcnkgdGhhbgordXBzdHJlYW0uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIG5lZWRsZXNzbHkgZm9yIGRvd25zdHJlYW0gcGFja2FnZXJzLgorCitTa2lwIHRoZSB0ZXN0cyBhbHRvZ2V0aGVyIGV2ZW4gaWYgdGhlIC5naXQgZGlyZWN0b3J5IGV4aXN0cy4KKworUGF0Y2gtTmFtZTogZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYKKy0tLQorIHQvdGVzdC5wbCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3QvdGVzdC5wbCBiL3QvdGVzdC5wbAoraW5kZXggY2RhMzg0MC4uYWY1NzlhMiAxMDA2NDQKKy0tLSBhL3QvdGVzdC5wbAorKysrIGIvdC90ZXN0LnBsCitAQCAtMTc0LDcgKzE3NCw3IEBAIHN1YiBza2lwX2FsbF93aXRob3V0X3VuaWNvZGVfdGFibGVzIHsgIyAoYnV0IG9ubHkgdW5kZXIgbWluaXBlcmwpCisgCisgc3ViIGZpbmRfZ2l0X29yX3NraXAgeworICAgICBteSAoJHNvdXJjZV9kaXIsICRyZWFzb24pOworLSAgICBpZiAoLWQgJy5naXQnKSB7CisrICAgIGlmICgtZCAnLmdpdCcgJiYgISAtZCAnZGViaWFuJykgeworIAkkc291cmNlX2RpciA9ICcuJzsKKyAgICAgfSBlbHNpZiAoLWwgJ01BTklGRVNUJyAmJiAtbCAnQVVUSE9SUycpIHsKKyAJbXkgJHdoZXJlID0gcmVhZGxpbmsgJ01BTklGRVNUJzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzE0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNDg3YTZkNmFkYTBiMDhlNmE3Mjc2NTIwZWJjNjFjZDg1MTAwNWU3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMyBPY3QgMjAxMCAyMTozNjoxNyArMDMwMAorU3ViamVjdDogU3F1ZWxjaCBsb2NhbGUgd2FybmluZ3MgaW4gRGViaWFuIHBhY2thZ2UgbWFpbnRhaW5lciBzY3JpcHRzCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTA4NzY0CisKK1RoZSBzeXN0ZW0gbG9jYWxlcyBhcmUgcmF0aGVyIGZyZXF1ZW50bHkgb3V0IG9mIHN5bmMgd2l0aCB0aGUgQyBsaWJyYXJ5CitkdXJpbmcgcGFja2FnZSB1cGdyYWRlcywgY2F1c2luZyBhIGh1Z2UgYW1vdW50IG9mIHVzZWxlc3MgUGVybCBsb2NhbGUKK3dhcm5pbmdzLiBTcXVlbGNoIHRoZW0gd2hlbiBydW5uaW5nIHBhY2thZ2UgbWFpbnRhaW5lciBzY3JpcHRzLCBkZXRlY3RlZAorYnkgdGhlIERQS0dfUlVOTklOR19WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitBbnkgcmVhbCBsb2NhbGUgcHJvYmxlbSB3aWxsIHNob3cgdXAgYWZ0ZXIgdGhlIHN5c3RlbSB1cGdyYWRlIHRvbywgYW5kCit0aGUgd2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBub3JtYWxseSBhZ2FpbiBhdCB0aGF0IHBvaW50LgorCitQYXRjaC1OYW1lOiBkZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgorLS0tCisgbG9jYWxlLmMgICAgICAgICAgIHwgNSArKysrLQorIHBvZC9wZXJsbG9jYWxlLnBvZCB8IDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xvY2FsZS5jIGIvbG9jYWxlLmMKK2luZGV4IDdhNGE0MTguLmZkZjkxMWQgMTAwNjQ0CistLS0gYS9sb2NhbGUuYworKysrIGIvbG9jYWxlLmMKK0BAIC02NzQsNyArNjc0LDEwIEBAIFBlcmxfaW5pdF9pMThubDEwbihwVEhYXyBpbnQgcHJpbnR3YXJuKQorIAorICAgICBjb25zdCBib29sIGxvY3dhcm4gPSAocHJpbnR3YXJuID4gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByaW50d2FybgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICghIGJhZF9sYW5nX3VzZV9vbmNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWJpYW4gc3BlY2lmaWMgY2hhbmdlIC0gc2VlIGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTA4NzY0ICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFQZXJsRW52X2dldGVudigiRFBLR19SVU5OSU5HX1ZFUlNJT04iKSkgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoISBiYWRfbGFuZ191c2Vfb25jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzYWxsb3cgd2l0aCAiIiBvciAiMCIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmFkX2xhbmdfdXNlX29uY2UKK2RpZmYgLS1naXQgYS9wb2QvcGVybGxvY2FsZS5wb2QgYi9wb2QvcGVybGxvY2FsZS5wb2QKK2luZGV4IDcwMWI0MjIuLjU4Y2FiYWYgMTAwNjQ0CistLS0gYS9wb2QvcGVybGxvY2FsZS5wb2QKKysrKyBiL3BvZC9wZXJsbG9jYWxlLnBvZAorQEAgLTEyMTcsNiArMTIxNywxNCBAQCBCPE5PVEU+OiBDPFBFUkxfQkFETEFORz4gb25seSBnaXZlcyB5b3UgYSB3YXkgdG8gaGlkZSB0aGUgd2FybmluZyBtZXNzYWdlLgorIFRoZSBtZXNzYWdlIHRlbGxzIGFib3V0IHNvbWUgcHJvYmxlbSBpbiB5b3VyIHN5c3RlbSdzIGxvY2FsZSBzdXBwb3J0LAorIGFuZCB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHdoYXQgdGhlIHByb2JsZW0gaXMuCisgCisrPWl0ZW0gRFBLR19SVU5OSU5HX1ZFUlNJT04KKysKKytPbiBEZWJpYW4gc3lzdGVtcywgaWYgdGhlIERQS0dfUlVOTklOR19WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIGlzCisrc2V0ICh0byBhbnkgdmFsdWUpLCB0aGUgbG9jYWxlIGZhaWx1cmUgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIGp1c3QKKytsaWtlIHdpdGggYSB6ZXJvIFBFUkxfQkFETEFORyBzZXR0aW5nLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgZmxvb2RzCisrb2Ygc3B1cmlvdXMgd2FybmluZ3MgZHVyaW5nIHN5c3RlbSB1cGdyYWRlcy4KKytTZWUgTDxodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUwODc2ND4uCisrCisgPWJhY2sKKyAKKyBUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNwZWNpZmljIHRvIFBlcmw6IFRoZXkgYXJlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWRjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZgpAQCAtMCwwICsxLDM2IEBACitGcm9tIDU5MWMxZjliN2Q0NzU1YmZjNTlkOTY2NWJhYjFmMmNhNDEwZGU3NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogU2V0IHVtYXNrIGFwcHJvcHJvYXRlbHkgZm9yIHNpdGUgaW5zdGFsbCBkaXJlY3RvcmllcworCitQb2xpY3kgcmVxdWlyZXMgZ3JvdXAgd3JpdGFibGUgc2l0ZSBkaXJlY3RvcmllcworCitQYXRjaC1OYW1lOiBkZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggMTk3ZjEwMi4uNWYxYjg3ZiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMzgsNyArMjEzOCw3IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAKKyAKKyBwdXJlX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTk5LDggKzIxOTksOCBAQCBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorIAorIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9keW5hbG9hZGVyaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmNTkzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorSGFjayB0aGUgZHluYW1pYyBtb2R1bGUgbG9hZGVyIHNvIHRoYXQgd2UgdXNlIG5hdGl2ZSBtb2R1bGVzIHNpbmNlIHdlIGNhbid0IGxvYWQKK3RoZSB0YXJnZXQgb25lcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQCisyMDEzLzAxLzEzCisKK0luZGV4OiBwZXJsLTUuMTQuMi9leHQvRHluYUxvYWRlci9EeW5hTG9hZGVyX3BtLlBMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9leHQvRHluYUxvYWRlci9EeW5hTG9hZGVyX3BtLlBMCTIwMTEtMDktMTkgMTM6MTg6MjIuMDAwMDAwMDAwICswMDAwCisrKysgcGVybC01LjE0LjIvZXh0L0R5bmFMb2FkZXIvRHluYUxvYWRlcl9wbS5QTAkyMDEzLTAxLTE5IDE2OjA5OjUxLjAyMDU4NDk0NSArMDAwMAorQEAgLTMxMCw2ICszMTAsMTAgQEAKKyAgICAgZm9yZWFjaCAoQElOQykgeworIAk8PCReTy1lcS1WTVM+PmNob3AoJF8gPSBWTVM6OkZpbGVzcGVjOjp1bml4cGF0aCgkXykpOzw8LyReTy1lcS1WTVM+PgorIAkgICAgbXkgJGRpciA9ICIkXy9hdXRvLyRtb2RwbmFtZSI7CisrCisrCWlmIChkZWZpbmVkICRFTlZ7UEVSTF9MSUJ9IGFuZCBkZWZpbmVkICRFTlZ7UEVSTEhPU1RMSUJ9KSB7CisrCSAgICAkZGlyID1+IHMvJEVOVntQRVJMX0xJQn0vJEVOVntQRVJMSE9TVExJQn0vZzsKKysJfQorIAkKKyAJbmV4dCB1bmxlc3MgLWQgJGRpcjsgIyBza2lwIG92ZXIgdW5pbnRlcmVzdGluZyBkaXJlY3RvcmllcworIAkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLWhpbnRzLWxpbnV4LnBsLWxpbmstbGliZ2RibV9jb21wYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0ZWY3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYmE0ZWQwYjViN2JhYWQ1MzUzYzFlNjViNjU1ZjQxZDQ1ZTAxYzk5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMiBKdW4gMjAxNSAyMDowMDoxMSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBleHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsOiBsaW5rIGxpYmdkYm1fY29tcGF0CisKK0ZpeGVkIGZvciB0ZXN0IGNhc2UgLi4vZXh0L09EQk1fRmlsZS90L29kYm0udDoKK29rIDEgLSB1c2UgT0RCTV9GaWxlOworb2sgMiAtIHVzZSBGY250bDsKKy4vcGVybDogc3ltYm9sIGxvb2t1cCBlcnJvcjogL3Vzci9saWIvcGVybC81LjIyLjAvYXV0by9PREJNX0ZpbGUvT0RCTV9GaWxlLnNvOiB1bmRlZmluZWQgc3ltYm9sOiBkYm1pbml0CisKK1RoZSBjaGVja2luZyAiaWYgLWUgJF8uJy9saWJnZGJtX2NvbXBhdC5zbyciIGRvZXNuJ3Qgd29yayB3aGVuIGNyb3NzCitidWlsZCwgc28gYWx3YXlzIGxpbmsgbGliZ2RibV9jb21wYXQsIHNpbmNlIHBlcmwgZGVwZW5kcyBvbiBnZGJtIGFuZCB3ZQorYWx3YXlzIGhhdmUgbGliZ2RibV9jb21wYXQuCisKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsIHwgICAgNiAtLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwgYi9leHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsCitpbmRleCAyMDRiYmEwLi45MjcxYjQ1IDEwMDY0NAorLS0tIGEvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAorKysrIGIvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAorQEAgLTEsOCArMSwyIEBACisgIyB1c2VzIEdEQk0gZGJtIGNvbXBhdGliaWxpdHkgZmVhdHVyZSAtIGF0IGxlYXN0IG9uIFN1U0UgOC4wCistJHNlbGYtPntMSUJTfSA9IFsnLWxnZGJtJ107CistCistIyBEZWJpYW4vVWJ1bnR1IGhhdmUgbGliZ2RibV9jb21wYXQuc28gYnV0IG5vdCB0aGlzIGZpbGUsCistIyBzbyBsaW5raW5nIG1heSBmYWlsCistZm9yZWFjaCAoc3BsaXQgLyAvLCAkQ29uZmlne2xpYnB0aH0pIHsKKy0gICAgJHNlbGYtPntMSUJTfS0+WzBdIC49ICcgLWxnZGJtX2NvbXBhdCcgaWYgLWUgJF8uJy9saWJnZGJtX2NvbXBhdC5zbyc7CistfQorKyRzZWxmLT57TElCU30gPSBbJy1sZ2RibSAtbGdkYm1fY29tcGF0J107CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwNWI4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGI4NDJlMWRlNzc5OGExZjdkZjc3MGJiM2YxODVhZDMzNTZlNDkwZTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjIgSnVuIDIwMTUgMjA6MDY6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZXh0L09EQk1fRmlsZS90L29kYm0udDogZml4IHRoZSAgcGF0aCBvZiBkYm10X2NvbW1vbi5wbAorCitJdCBzaG91bGQgYmUgbGliL2RibXRfY29tbW9uLnBsIHdoZW4gcnVuIGJ5IHJ1bi1wdGVzdC4KKworRml4ZWQ6CitDYW4ndCBsb2NhdGUgLi4vLi4vdC9saWIvZGJtdF9jb21tb24ucGwgaW4gQElOQworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGV4dC9PREJNX0ZpbGUvdC9vZGJtLnQgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leHQvT0RCTV9GaWxlL3Qvb2RibS50IGIvZXh0L09EQk1fRmlsZS90L29kYm0udAoraW5kZXggMDc5YjlmMS4uMjUwYjk5MSAxMDA2NDQKKy0tLSBhL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKKysrKyBiL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKK0BAIC0yLDcgKzIsNyBAQAorIAorIG91ciAkREJNX0NsYXNzID0gJ09EQk1fRmlsZSc7CisgCistcmVxdWlyZSAnLi4vLi4vdC9saWIvZGJtdF9jb21tb24ucGwnOworK3JlcXVpcmUgJ2xpYi9kYm10X2NvbW1vbi5wbCc7CisgCisgaWYgKCReTyBlcSAnaHB1eCcpIHsKKyAgICAgcHJpbnQgPDxFT007CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWM0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDcvMDEKKworRml4IHRoZXNlIFBhY2thZ2UgUUEgd2FybmluZ3MgYmVmb3JlIHRoZXkgYXJlIGNvbnZlcnRlZCBpbnRvIGZldGFsIGVycm9yczoKKworV0FSTklORzogUUEgSXNzdWU6IHBhY2thZ2UgcGVybC1tb2R1bGUtY29tcHJlc3MgY29udGFpbnMgYmFkIFJQQVRIIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9saWIgaW4gZmlsZSAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMC90bXAvd29yay9pNTg2LXBva3ktbGludXgvcGVybC01LjEyLjMtcjEvcGFja2FnZXMtc3BsaXQvcGVybC1tb2R1bGUtY29tcHJlc3MvdXNyL2xpYi9wZXJsLzUuMTIuMy9hdXRvL0NvbXByZXNzL1Jhdy9abGliL1psaWIuc28KKworVGhpcyBmaXhlcyB0aGlzIHdhcm5pbmcgZm9yIHBlcmwgcmVjaXBlIGFzIHdlbGwgYXMgbGlieG1sLXBhcnNlci1wZXJsIHJlY2lwZS4gCitJdCBpcyBhIGZpeCB0byBNYWtlTWFrZXIgd2l0aGluIHBlcmwsIHNvIGFsbCBzdWNoIHBlcmwgcmVjaXBlcyB3aWxsIGdldCAKK2ZpeGVkIHdpdGggdGhpcyBwZXJsIGZpeC4KKworSW5kZXg6IHBlcmwtNS4xNC4yL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCisrKysgcGVybC01LjE0LjIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCitAQCAtNTUsNiArNTUsNyBAQCBzdWIgX3VuaXhfb3MyX2V4dCB7CisgICAgIG15KCRmb3VuZCkgPSAwOworIAorICAgICAjIERlYmlhbi1zcGVjaWZpYzogZG9uJ3QgdXNlIExEX1JVTl9QQVRIIGZvciBzdGFuZGFyZCBkaXJzCisrICAgIHB1c2goQGxpYnBhdGgsICJTWVNST09UTElCIik7CisgICAgICRsZF9ydW5fcGF0aF9zZWVueyRffSsrIGZvciBAbGlicGF0aDsKKyAKKyAgICAgZm9yZWFjaCBteSAkdGhpc2xpYiAoc3BsaXQgJyAnLCAkcG90ZW50aWFsX2xpYnMpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZ2VuZXJhdGUtc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjZlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVXNlIHRoZSBsZCBmbGFncyBmcm9tIHRoZSBzdXBwbGllZCBjb25maWd1cmF0aW9uIGZpbGUuIEZvciBzaCB3ZSBuZWVkIHRoZQorZmxhZ3MgdGhhdCBzcGVjaWZ5IHRvIGJ1aWxkIFBJQyBjb2RlIHNvIHRoYXQgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd29yay4KKworSW5kZXg6IHBlcmwtNS4xNC4yL0Nyb3NzL2dlbmVyYXRlX2NvbmZpZ19zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvQ3Jvc3MvZ2VuZXJhdGVfY29uZmlnX3NoCTIwMTAtMTItMzAgMDQ6MDc6MTQuMDAwMDAwMDAwICswMjAwCisrKysgcGVybC01LjE0LjIvQ3Jvc3MvZ2VuZXJhdGVfY29uZmlnX3NoCTIwMTItMTEtMjIgMTU6NTg6NDkuODUyODUyODA1ICswMjAwCitAQCAtMTksMTAgKzE5LDEwIEBACisgJGNhbGxiYWNrcy0+eydhcid9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQVIiLCAiYXJtLWxpbnV4LWFyIl1dOworICRjYWxsYmFja3MtPnsnYXJjaG5hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIlNZUyIsICJhcm12NGwtbGludXgiXV07CisgJGNhbGxiYWNrcy0+eydjYyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0MiLCAiYXJtLWxpbnV4LWdjYyJdXTsKKy0kY2FsbGJhY2tzLT57J2NjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CistJGNhbGxiYWNrcy0+eydjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CistJGNhbGxiYWNrcy0+eydjY2ZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworLSRjYWxsYmFja3MtPnsnY2NmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworKyMkY2FsbGJhY2tzLT57J2NjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CisrIyRjYWxsYmFja3MtPnsnY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworKyRjYWxsYmFja3MtPnsnY2NmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3NfaW5zZXJ0LCBbIkNGTEFHUyIsICItZm5vLXN0cmljdC1hbGlhc2luZyAtRF9HTlVfU09VUkNFIC1EVEhSRUFEU19IQVZFX1BJRFMgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworKyRjYWxsYmFja3MtPnsnY2NmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2Vzc19pbnNlcnQsIFsiQ0ZMQUdTIiwgIi1EX0dOVV9TT1VSQ0UgLURUSFJFQURTX0hBVkVfUElEUyAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiXV07CisgJGNhbGxiYWNrcy0+eydjY25hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDIiwgImFybS1saW51eC1nY2MiXV07CisgJGNhbGxiYWNrcy0+eydjcHAnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDUCIsICJhcm0tbGludXgtY3BwIl1dOworICRjYWxsYmFja3MtPnsnY3BwZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDUEZMQUdTIiwgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIl1dOworQEAgLTMwLDYgKzMwLDcgQEAKKyAkY2FsbGJhY2tzLT57J2NwcHN0ZGluJ30gPSBbXCZzaW1wbGVfcHJvY2Vzc19hcHBlbmQsIFsiQ0MiLCAiYXJtLWxpbnV4LWdjYyAtRSIsICItRSJdXTsKKyAkY2FsbGJhY2tzLT57J2Z1bGxfYXInfSA9IFtcJmJhY2t0aWNrLCBbIkFSIiwgIndoaWNoICRFTlZ7QVJ9IiwgIi91c3IvbG9jYWwvYXJtLzIuOTUuMy9iaW4vYXJtLWxpbnV4LWFyIl1dOworICRjYWxsYmFja3MtPnsnbGQnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxEIiwgImFybS1saW51eC1sZCJdXTsKKyskY2FsbGJhY2tzLT57J2xkZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiTERETEZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J2xkZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxERkxBR1MiLCAiIl1dOworICRjYWxsYmFja3MtPnsnbGRmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMREZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J215YXJjaG5hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIlNZUyIsICJhcm12NGwtbGludXgiXV07CitAQCAtMTA1LDYgKzEwNiwyMyBAQAorIAorIH0KKyAKKysjIEluc2VydCBlbnYgdmFyIGludG8gdGhlIHZhcmlhYmxlcyB2YWx1ZQorK3N1YiBzaW1wbGVfcHJvY2Vzc19pbnNlcnQgeworKwlteSAka2V5ID0gc2hpZnQ7CisrCW15ICR2YWx1ZSA9IHNoaWZ0OworKwlteSAkZW52dmFyID0gJGNhbGxiYWNrcy0+eyRrZXl9LT5bMV1bMF07CisrCisrCWlmICgkRU5WeyRlbnZ2YXJ9KSB7CisrCQkjIFN0cmlwIHF1b3RlcyBmcm9tIHZhbHVlCisrCQkkdmFsdWUgPX4gcy9eXCcvLzsKKysJCSR2YWx1ZSA9fiBzL1wnJC8vOworKwkJIyBSZW1vdmUgLUkvdXNyL2xvY2FsLy4uLiBmcm9tIHRoZSB2YWx1ZQorKwkJJHZhbHVlID1+IHMjXFctSS91c3IvbG9jYWwvXHcrXFcjICNnOworKwkJIyBQcmVwZW5kIGVudiB2YXIgKE9FIHNldHRpbmcpIHRvIHZhbHVlCisrCQlwcmludCgiJGtleT1cJyRFTlZ7JGVudnZhcn0gJHZhbHVlXCdcbiIpOworKwl9CisrfQorKworIHN1YiBsaWJyYXJ5X211bmdlIHsKKyAJbXkgJGtleSA9IHNoaWZ0OworIAlteSAkdmFsdWUgPSBzaGlmdDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvaW5zdGFsbHBlcmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjAxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xMi4zL2luc3RhbGxwZXJsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9pbnN0YWxscGVybAorKysrIHBlcmwtNS4xMi4zL2luc3RhbGxwZXJsCitAQCAtMyw4ICszLDggQEAKKyBCRUdJTiB7CisgICAgIHJlcXVpcmUgNS4wMDQ7CisgICAgIGNoZGlyICcuLicgaWYgIS1kICdsaWInIGFuZCAtZCAnLi4vbGliJzsKKy0gICAgQElOQyA9ICdsaWInOworLSAgICAkRU5We1BFUkw1TElCfSA9ICdsaWInOworKyMgICAgQElOQyA9ICdsaWInOworKyMgICAgJEVOVntQRVJMNUxJQn0gPSAnbGliJzsKKyAKKyAgICAgIyBUaGlzIG5lZWRzIHRvIGJlIGF0IEJFR0lOIHRpbWUsIGJlZm9yZSBhbnkgdXNlIG9mIENvbmZpZworICAgICByZXF1aXJlICcuL2luc3RhbGxfbGliLnBsJzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbGV0Z2NjLWZpbmQtZXJybm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjFlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyByZW1vdmVzIGFsbCB0aGUgbG9naWMgdGhhdCBwZXJsIHVzZXMgdG8gbG9jYXRlIGFuIGFwcHJvcHJpYXRlCitlcnJuby5oIGZvciB0aGUgdGFyZ2V0LiBJbnN0ZWFkIHdlIHNpbXBsZSBjcmVhdGUgYSBmaWxlIHRoYXQgZG9lcworCisgICNpbmNsdWRlICJlcnJuby5oIgorCithbmQgdXNlIHRoYXQgYXMgdGhlIGZpbGUgdG8gcGFyc2UuIFRoaXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcgYW4KK2V4dGVybmFsIHRvb2xjaGFpbiBzaW5jZSBwZXJsIHdpbGwgc2VhcmNoIGluICR7U1RBR0lOR19JTkNESVJ9IGZvcgorZXJybm8uaCAod2hlbiB1c2luZyBnY2MpIGFuZCB0aGF0IGlzbid0IHdoZXJlIGl0J3MgbG9jYXRlZCAtIGl0cword2hlcmV2ZXIgdGhlIGV4dGVybmFsIHRvb2xjaGFpbiBrZWVwcyBpdCdzIGhlYWRlcnMuCisKK0luZGV4OiBwZXJsLTUuMTIuMy9leHQvRXJybm8vRXJybm9fcG0uUEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL2V4dC9FcnJuby9FcnJub19wbS5QTAorKysrIHBlcmwtNS4xMi4zL2V4dC9FcnJuby9FcnJub19wbS5QTAorQEAgLTE3LDggKzE3LDE4IEBAIHVubGluayAiRXJybm8udG1wIiBpZiAtZiAiRXJybm8udG1wIjsKKyBvcGVuIE9VVCwgIj5FcnJuby50bXAiIG9yIGRpZSAiQ2Fubm90IG9wZW4gRXJybm8udG1wOiAkISI7Cisgc2VsZWN0IE9VVDsKKyBteSAkZmlsZTsKKy1teSBAZmlsZXMgPSBnZXRfZmlsZXMoKTsKKy1pZiAoJENvbmZpZ3tnY2N2ZXJzaW9ufSBuZSAnJyAmJiAkXk8gZXEgJ01TV2luMzInKSB7CisrI215IEBmaWxlcyA9IGdldF9maWxlcygpOworK215IEBmaWxlcyA9ICgiZXJybm8uaCIpOworKworK2lmICgxKSB7CisrICAgIG9wZW4gSU5DUywgJz5pbmNsdWRlcy5jJyBvcgorKwlkaWUgIkNhbm5vdCBvcGVuIGluY2x1ZGVzLmMiOworKyAgICBwcmludCBJTkNTIHFxWyNpbmNsdWRlICJlcnJuby5oIlxuXTsKKysgICAgY2xvc2UgSU5DUzsKKysgICAgcHJvY2Vzc19maWxlKCdpbmNsdWRlcy5jJyk7CisrICAgIHVubGluayAnaW5jbHVkZXMuYyc7CisrfQorK2Vsc2lmICgkQ29uZmlne2djY3ZlcnNpb259IG5lICcnICYmICReTyBlcSAnTVNXaW4zMicpIHsKKyAgICAgIyBNaW5HVyBjb21wbGFpbnMgIndhcm5pbmc6ICNwcmFnbWEgc3lzdGVtX2hlYWRlciBpZ25vcmVkIG91dHNpZGUgaW5jbHVkZQorICAgICAjIGZpbGUiIGlmIHRoZSBoZWFkZXIgZmlsZXMgYXJlIHByb2Nlc3NlZCBpbmRpdmlkdWFsbHksIHNvIGluY2x1ZGUgdGhlbQorICAgICAjIGFsbCBpbiAuYyBmaWxlIGFuZCBwcm9jZXNzIHRoYXQgaW5zdGVhZC4KK0BAIC01Myw3ICs2Myw3IEBAIHN1YiBwcm9jZXNzX2ZpbGUgeworICAgICAgICAgY2hvbXAoJGZpbGUgPSBgY3lncGF0aCAtdyAiJGZpbGUiYCk7CisgICAgIH0KKyAKKy0gICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRmaWxlIGFuZCAtZiAkZmlsZTsKKysjICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkZmlsZSBhbmQgLWYgJGZpbGU7CisgIyAgICB3YXJuICJQcm9jZXNzaW5nICRmaWxlXG4iOworIAorICAgICBsb2NhbCAqRkg7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ZjY1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaApAQCAtMCwwICsxLDMwIEBACittYWtlX2V4dC5wbDogZml4IHJlZ2VuZXJhdGUgbWFrZWZpbGUgZmFpbGVkIHdoaWxlICRjYyBjaGFuZ2VkCisKK1doaWxlICRjYyBjaGFuZ2VkLCB0aGUgZXhpc3RhbmNlIG9mICd4ZGVmaW5lJyBjYXVzZWQgbWFrZWZpbGUKK3JlZ2VuZXJhdGlvbiBmYWlsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBtYWtlX2V4dC5wbCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21ha2VfZXh0LnBsIGIvbWFrZV9leHQucGwKK2luZGV4IGI0MzM3NjIuLjlmYzFhMzYgMTAwNjQ0CistLS0gYS9tYWtlX2V4dC5wbAorKysrIGIvbWFrZV9leHQucGwKK0BAIC0zMzUsNiArMzM1LDEwIEBAIHN1YiBidWlsZF9leHRlbnNpb24geworICAgICAgICAgICAgICAgICBwcmludCAiRGVsZXRpbmcgbm9uLUNyb3NzIG1ha2VmaWxlXG4iOworICAgICAgICAgICAgICAgICBjbG9zZSAkbWZoIG9yIGRpZSAiY2xvc2UgJG1ha2VmaWxlOiAkISI7CisgICAgICAgICAgICAgICAgIF91bmxpbmsoJG1ha2VmaWxlKTsKKysgICAgICAgICAgICAgICAgaWYoLWUgJ3hkZWZpbmUnKSB7CisrICAgICAgICAgICAgICAgICAgICBwcmludCAiRGVsZXRpbmcgeGRlZmluZSBmb3IgcmVnZW5lcmF0ZSBtYWtlZmlsZVxuIjsKKysgICAgICAgICAgICAgICAgICAgIF91bmxpbmsoJ3hkZWZpbmUnKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLW5vcGFja2xpc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODJkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1BhcnQgb2YgNTJfZGViaWFuX2V4dHV0aWxzX2hhY2tzLnBhdGNoIGp1c3QgdG8gZXhjbHVkZSB0aGUgaW5zdGFsbGF0aW9uIG9mIC5wYWNrbGlzdCBmaWxlcworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8ICAgMzUgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IGY2MzE0NWMuLmE1ODk3MTAgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTIyLDExICsyMTIyLDYgQEAgcHVyZV9wZXJsX2luc3RhbGwgOjogYWxsCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKy0KKy0gICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCQkiJChJTlNUX0FSQ0hMSUIpIiAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIiBcCisgCQkiJChJTlNUX0JJTikiICIkKERFU1RJTlNUQUxMQklOKSIgXAorQEAgLTIxNTgsMTAgKzIxNTMsNiBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgcHVyZV92ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoTU9EX0lOU1RBTEwpIFwKKyB9OworLSAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExWRU5ET1JBUkNIKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKyAKKyAgICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFZFTkRPUkxJQikiIFwKK0BAIC0yMTg3LDM3ICsyMTc4LDE5IEBAIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAKKyAgICAgcHVzaCBAbSwgcXsKKyBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFBSSVZMSUIpIFwKKy0JCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorLQkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorLQkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpL3Blcmxsb2NhbC5wb2QiCisrCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpIgorIAktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorIAkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorIAkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisrCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFNJVEVBUkNIKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIH0gdW5sZXNzICRzZWxmLT57Tk9fUEVSTExPQ0FMfTsKKyAKK0BAIC0yMjI2LDEzICsyMTk5LDExIEBAIHVuaW5zdGFsbCA6OiB1bmluc3RhbGxfZnJvbV8kKElOU1RBTExESVJTKWRpcnMKKyAJJChOT0VDSE8pICQoTk9PUCkKKyAKKyB1bmluc3RhbGxfZnJvbV9wZXJsZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3NpdGVkaXJzIDo6CisgCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV92ZW5kb3JkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIH07CisgCisgICAgIGpvaW4oIiIsQG0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtcGVybGluYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiYjFmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjguOC9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zLm9yaWcvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0JMjAwOC0xMC0zMSAyMjowMTozNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBwZXJsLTUuMTIuMy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQkyMDA4LTEwLTMxIDIyOjAxOjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1OTcsNiArMTU5NywxOSBAQAorIAkkc2VsZi0+e1BFUkxfTElCfSAgICAgfHw9ICRDb25maWd7cHJpdmxpYmV4cH07CisgCSRzZWxmLT57UEVSTF9BUkNITElCfSB8fD0gJENvbmZpZ3thcmNobGliZXhwfTsKKyAJJHNlbGYtPntQRVJMX0lOQ30gICAgID0gJHNlbGYtPmNhdGRpcigiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9IiwiQ09SRSIpOyAjIHdpbGQgZ3Vlc3MgZm9yIG5vdworKwkjIENoZWNrIGZvciBlbnZpcm9ubWVudCBvdmVycmlkZSBzbyB3ZSdsbCBmaW5kIHRoZSBoZWFkZXJzIGluIHRoZSBjb3JyZWN0IHBsYWNlCisrICAgICAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfTElCfSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAkc2VsZi0+e1BFUkxfTElCfSA9ICRFTlZ7UEVSTF9MSUJ9OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0FSQ0hMSUJ9KQorKyAgICAgICAgeworKyAgICAgICAgICAgICRzZWxmLT57UEVSTF9BUkNITElCfSA9ICRFTlZ7UEVSTF9BUkNITElCfTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTF9JTkN9KQorKyAgICAgICAgeworKyAgICAgICAgICAgICRzZWxmLT57UEVSTF9JTkN9ID0gJEVOVntQRVJMX0lOQ307CisrICAgICAgICB9CisgCW15ICRwZXJsX2g7CisgCisgCWlmIChub3QgLWYgKCRwZXJsX2ggPSAkc2VsZi0+Y2F0ZmlsZSgkc2VsZi0+e1BFUkxfSU5DfSwicGVybC5oIikpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDkwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDkwYzI1MmNlY2MzOGFlZDVkNWZhZWRiMzA0ODVkZDZlZWUyZTU0ZWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTEgRmViIDIwMTUgMTU6MTQ6NDAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGVybCAvIFBhdGhUb29sczogZG9uJ3QgZmlsdGVyIG91dCBibGliIGZyb20gQElOQworCitJZiAkVE9QRElSIGluY2x1ZGVzIHRoZSBzdHJpbmcgImJsaWIiLCBmaWx0ZXIgaXQgb3V0IGZyb20gQElOQyBtYXkgZW1wdHkKK3RoZSBASU5DIGFuZCBjYXVzZSBidWlsZCBlcnJvcnMgbGlrZToKKworICBDYW4ndCBsb2NhdGUgRXh0VXRpbHMvTWFrZU1ha2VyLnBtIGluIEBJTkMgXAorICAoeW91IG1heSBuZWVkIHRvIGluc3RhbGwgdGhlIEV4dFV0aWxzOjpNYWtlTWFrZXIgbW9kdWxlKSBcCisgIChASU5DIGNvbnRhaW5zOiAuKSBhdCBNYWtlZmlsZS5QTAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBkaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTCB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTCBiL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCitpbmRleCAxYjIxZGU0Li5mNTYyY2IyIDEwMDY0NAorLS0tIGEvZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwKKysrKyBiL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCitAQCAtMSw2ICsxLDMgQEAKKy0KKy1CRUdJTiB7IEBJTkMgPSBncmVwIHshL2JsaWIvfSBASU5DIH0KKy0KKyByZXF1aXJlIDUuMDA1OworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworIFdyaXRlTWFrZWZpbGUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTJkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtYXJjaGxpYi1leHAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorcGVybDogYWRkIGFyY2hsaWJfZXhwIHZhcmlhYmxlIHVzZWQgdG8gZ2VuZXJhdGUgQVJDSExJQl9FWFAgaW4gY29uZmlnLmgKKyAgICAKK3BlcmwuYyB1c2VzIGFuIEFSQ0hMSUJfRVhQIGRlZmluZSB0byBnZW5lcmF0ZSBjb21waWxlLXRpbWUgY29kZSB0aGF0CithZGRzIHRoZSBhcmNobGliZXhwIHBhdGggdG8gQElOQyBkdXJpbmcgcnVuLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgYQorbmV3IHBlcmwgaW50ZXJwcmV0ZXIuCisgICAgCitCZWNhdXNlIHdlJ3ZlIGNoYW5nZWQgdGhpcyB2YWx1ZSBpbiBhIHRlbXBvcmFyeSB3YXkgdG8gbWFrZSBpdAorcG9zc2libGUgdG8gdXNlIEV4dFV0aWxzOjpFbWJlZCBpbiB0aGUgdGFyZ2V0IGJ1aWxkICh0aGUgdGVtcG9yYXJ5Cit2YWx1ZSBpbiBjb25maWcuc2ggZ2V0cyByZS1zdHJpcHBlZCBvdXQgZHVyaW5nIHBhY2thZ2luZyksIHRoZQorQVJDSExJQl9FWFAgdmFsdWUgdGhhdCBnZXRzIGdlbmVyYXRlZCBzdGlsbCB1c2VzIHRoZSB0ZW1wb3JhcnkgdmVyc2lvbgoraW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgZXhwZWN0ZWQgdmVyc2lvbiAoaS5lLiBiZWNhdXNlcyBpdCdzIGluIHRoZQorZ2VuZXJhdGVkIGNvbmZpZy5oLCBpdCBkb2Vzbid0IGdldCBzdHJpcHBlZCBvdXQgZHVyaW5nIHBhY2thZ2luZyBsaWtlCit0aGUgb3RoZXJzIGluIGNvbmZpZy5zaCkuCisKK1RoaXMgY3JlYXRlcyBhbiB1bm1vZGlmaWVkIHZlcnNpb24gY2FsbGVkIGFyY2hsaWJfZXhwIHRoYXQgZ2V0cyB1c2VkCitieSBhIG1vZGlmaWVkIGNvbmZpZ19oLlNIIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBpbnRvIGNvbmZpZy5oCisgICAgCitUaGlzIHBhdGNoIHVzZXMgYW4gdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGFyY2hsaWJleHAgY2FsbGVkCithcmNobGliX2V4cCwgaW50cm9kdWNlZCB0byBjb25maWcuc2gsIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCitjb3JyZWN0IHZhbHVlIG9mIEFSQ0hMSUJfRVhQIGludG8gY29uZmlnLmgKKyAgCitTZWUgWU9DVE8gIzMwOTkgZm9yIG1vcmUgaW5mby4KKworVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogcGVybC01LjE0LjIvY29uZmlnX2guU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NvbmZpZ19oLlNICisrKysgcGVybC01LjE0LjIvY29uZmlnX2guU0gKK0BAIC05OTYsNyArOTk2LDcgQEAgc2VkIDw8IUdST0shVEhJUyEgPiRDT05GSUdfSCAtZSAncyFeI3VuZAorICAqCWluIHByb2dyYW1zIHRoYXQgYXJlIG5vdCBwcmVwYXJlZCB0byBkZWFsIHdpdGggfiBleHBhbnNpb24gYXQgcnVuLXRpbWUuCisgICovCisgIyRkX2FyY2hsaWIgQVJDSExJQiAiJGFyY2hsaWIiCQkvKiovCistIyRkX2FyY2hsaWIgQVJDSExJQl9FWFAgIiRhcmNobGliZXhwIgkJLyoqLworKyMkZF9hcmNobGliIEFSQ0hMSUJfRVhQICIkYXJjaGxpYl9leHAiCQkvKiovCisgCisgLyogQVJDSE5BTUU6CisgICoJVGhpcyBzeW1ib2wgaG9sZHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhcmNoaXRlY3R1cmUgbmFtZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2MxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtuYXRpdmVdCisKK1RoaXMgcGF0Y2ggaXMgdXNlZCBmb3IgcGVybC1uYXRpdmUgb25seS4gSXQgZW5hYmxlcyB0aGUgc3dpdGNoaW5nIG9mCitjb25maWd1cmF0aW9uIGZpbGVzIGJldHdlZW4gQ29uZmlnX2hlYXZ5LnBsIGFuZAorQ29uZmlnX2hlYXZ5LXRhcmdldC5wbCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK1BFUkxDT05GSUdUQVJHRVQgLSB0aGUgbGF0ZXIgY29udGFpbmluZyBzZXR0aW5ncyBmb3IgdGhlIHRhcmdldCB3aGlsZQordGhlIGZvcm1lciBjb250YWlucyB0aG9zZSBmb3IgdGhlIGhvc3QuIFRoaXMgd2lsbCBhbGxvdyBjcGFuLmJiY2xhc3MKK3RvIHVzZSB0aGUgc2V0dGluZ3MgYXBwcm9wcmlhdGUgZm9yIHRoZSBuYXRpdmUgYW5kL29yIHRhcmdldCBidWlsZHMKK2FzIHJlcXVpcmVkLiBUaGlzIGFsc28gZGlzYWJsZXMgdGhlIHVzZSBvZiB0aGUgY2FjaGUgc2luY2UgdGhlIGNhY2hlZAordmFsdWVzIHdvdWxkIGJlIHZhbGlkIGZvciB0aGUgaG9zdCBvbmx5LgorCitJbmRleDogcGVybC01LjE0LjIvY29uZmlncG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NvbmZpZ3BtCisrKysgcGVybC01LjE0LjIvY29uZmlncG0KK0BAIC02NTgsNyArNjU4LDcgQEAgc3ViIEZFVENIIHsKKyAgICAgbXkoJHNlbGYsICRrZXkpID0gQF87CisgCisgICAgICMgY2hlY2sgZm9yIGNhY2hlZCB2YWx1ZSAod2hpY2ggbWF5IGJlIHVuZGVmIHNvIHdlIHVzZSBleGlzdHMgbm90IGRlZmluZWQpCistICAgIHJldHVybiBleGlzdHMgJHNlbGYtPnska2V5fSA/ICRzZWxmLT57JGtleX0gOiAkc2VsZi0+ZmV0Y2hfc3RyaW5nKCRrZXkpOworKyAgICByZXR1cm4gJHNlbGYtPmZldGNoX3N0cmluZygka2V5KTsKKyB9CisgCisgRU5ET0ZFTkQKK0BAIC04MTYsNyArODE2LDIxIEBAICRjb25maWdfdHh0IC49IHNwcmludGYgPDwnRU5ET0ZUSUUnLCAkZmEKKyBzdWIgREVTVFJPWSB7IH0KKyAKKyBzdWIgQVVUT0xPQUQgeworLSAgICByZXF1aXJlICdDb25maWdfaGVhdnkucGwnOworKyAgICBteSAkY2ZnZmlsZSA9ICdDb25maWdfaGVhdnkucGwnOworKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxDT05GSUdUQVJHRVR9IGFuZCAkRU5We1BFUkxDT05GSUdUQVJHRVR9IGVxICJ5ZXMiKQorKyAgICB7CisrICAgICAgICAkY2ZnZmlsZSA9ICdDb25maWdfaGVhdnktdGFyZ2V0LnBsJzsKKysgICAgfQorKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfQVJDSExJQn0pCisrICAgIHsKKysgICAgICAgIHB1c2ggQElOQywgJEVOVntQRVJMX0FSQ0hMSUJ9OworKyAgICAgICAgcmVxdWlyZSAkY2ZnZmlsZTsKKysgICAgICAgIHBvcCBASU5DOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmVxdWlyZSAkY2ZnZmlsZTsKKysgICAgfQorICAgICBnb3RvIFwmbGF1bmNoZXIgdW5sZXNzICRDb25maWc6OkFVVE9MT0FEID1+IC9sYXVuY2hlciQvOworICAgICBkaWUgIiZDb25maWc6OkFVVE9MT0FEIGZhaWxlZCBvbiAkQ29uZmlnOjpBVVRPTE9BRCI7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcyY2U0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEgL2Jpbi9zaAorCisjCisjIEdlbmVyYXRlIHRoZSBjb21tb24gcGVybCBjb25maWd1cmF0aW9uCisjIE5lZWRzIHRvIGJlIHJ1biBvbiBhIGhvc3QgdGhhdCBtYXRjaGVzIHRoZSBiaXRzaXplIG9mIHRoZSB0YXJnZXQgcGxhdGZvcm0KKyMKKworZWNobyBzaCBDb25maWd1cmUgLWRlcyBcCisgICAgICAgIC1Eb3B0aW1pemU9LU8yIFwKKyAgICAgICAgLURteWhvc3RuYW1lPWxvY2FsaG9zdCBcCisgICAgICAgIC1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0IFwKKyAgICAgICAgLURjYz1nY2MgXAorICAgICAgICAtRGNmX2J5PSdPcGVuIEVtYmVkZGVkJyBcCisgICAgICAgIC1EaW5zdGFsbHByZWZpeD1AREVTVERJUkAgXAorICAgICAgICAtRHByZWZpeD0vdXNyIFwKKyAgICAgICAgLUR2ZW5kb3JwcmVmaXg9L3VzciBcCisgICAgICAgIC1Ec2l0ZXByZWZpeD0vdXNyIFwKKyAgICAgICAgLURvdGhlcmxpYmRpcnM9L3Vzci9saWIvcGVybDUvNS4xMi4zIFwKKyAgICAgICAgLUR1c2VzaHJwbGliIFwKKyAgICAgICAgLUR1c2V0aHJlYWRzIFwKKyAgICAgICAgLUR1c2VpdGhyZWFkcyBcCisgICAgICAgIC1EdXNlbGFyZ2VmaWxlcyBcCisgICAgICAgIC1VZF9kb3N1aWQgXAorICAgICAgICAtRGRfc2VtY3RsX3NlbXVuIFwKKyAgICAgICAgLVVpX2RiIFwKKyAgICAgICAgLVVpX25kYm0gXAorICAgICAgICAtVWlfZ2RibSBcCisgICAgICAgIC1EaV9zaGFkb3cgXAorICAgICAgICAtRGlfc3lzbG9nIFwKKyAgICAgICAgLURtYW4zZXh0PTNwbSBcCisgICAgICAgIC1EdXNlcGVybGlvIFwKKyAgICAgICAgLURpbnN0YWxsdXNyYmlucGVybCBcCisgICAgICAgIC1VYmluY29tcGF0NTAwNSBcCisgICAgICAgIC1VdmVyc2lvbm9ubHkgXAorICAgICAgICAtRHBhZ2VyPScvdXNyL2Jpbi9sZXNzIC1pc3InCisKK2NwIC1mIGNvbmZpZy5zaCBjb25maWcuc2guQ09NTU9OCisKK1RBUkdFVE9TPSQoZ3JlcCBteWFyY2huYW1lIGNvbmZpZy5zaC5DT01NT04gfCBzZWQgInMjLionXCguKlwpJy4qI1wxIyIpCisKK3NlZCAtciAtaSBjb25maWcuc2guQ09NTU9OIFwKKwktZSAicyMoaW5zdGFsbC4qPScpKC91c3IpL2xvY2FsKC4qJykjXDFAREVTVERJUkBcMlwzI2ciIFwKKwktZSAncyMnJFRBUkdFVE9TJyNAQVJDSEAjZycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1keW5sb2FkZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNWJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQWxsb3cgdGhlIGxvY2F0aW9uIHRoYXQgLnNvIGZpbGVzIGFyZSBzZWFyY2hlZCBmb3IgZm9yIGR5bmFtaWMKK2xvYWRpbmcgdG8gYmUgY2hhbmdlZCB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIFRoaXMgaXMgdG8gYWxsb3cKK3VzIHRvIGxvYWQgLnNvJ3MgZnJvbSB0aGUgaG9zdCBzeXN0ZW0gd2hpbGUgYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKK3N5c3RlbS4KKworVXBkYXRlIGJ5IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjEKKworSW5kZXg6IHBlcmwtNS4xNC4yL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKKysrKyBwZXJsLTUuMTQuMi9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCitAQCAtMjgsNiArMjgsMjAgQEAgc3ViIGxvYWQgeworIAorICAgICBteSAoJG1vZHVsZSwgJG1vZGxpYm5hbWUpID0gY2FsbGVyKCk7CisgCisrICAgICMgT0U6IEFsbG93IGVudiB0byBmb3JtIGR5bmFtaWMgbG9hZGVyIHRvIGxvb2sgaW4gYSBkaWZmZXJlbnQgcGxhY2UKKysgICAgIyBUaGlzIGlzIHNvIGl0IGZpbmRzIHRoZSBob3N0IC5zbyBmaWxlcywgbm90IHRoZSB0YXJnZXRzCisrICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTEhPU1RMSUJ9KQorKyAgICB7CisrICAgICAgICBteSAkaG9zdGxpYiA9ICRFTlZ7UEVSTEhPU1RMSUJ9OworKyAgICAgICAgcHJpbnQgU1RERVJSICIqKiogTW9kdWxlIG5hbWUgSU46ICRtb2RsaWJuYW1lXG4iOworKyAgICAgICAgKCRwMSwgJHAyLCAkcDMsICRwNCwgJHA1KSA9ICRtb2RsaWJuYW1lID1+IG0vKF4oLipsaWJcdypcLyk/KSgocGVybFwvWzAtOVwuXSpcLyk/KSguKikkLzsKKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIHAxOiAkcDEgIHAzOiAkcDMgIHA1OiAkcDVcbiI7CisrICAgICAgICBpZiAoICRwMSBuZSAiIiApIHsKKysgICAgICAgICAgICAkbW9kbGlibmFtZSA9ICRob3N0bGliLiRwNTsKKysgICAgICAgIH0KKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIE1vZHVsZSBuYW1lIE9VVDogJG1vZGxpYm5hbWVcbiI7CisrICAgIH0KKysKKyAgICAgaWYgKEBfKSB7CisgCSRtb2R1bGUgPSAkX1swXTsKKyAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgzZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWVuYWJsZS1nZGJtLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS44LjgvY29uZmlnX2guU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuOC44Lm9yaWcvY29uZmlnX2guU0gJMjAwNS0xMS0wMSAwMjoxMzowNS4wMDAwMDAwMDAgKzA4MDAKKysrKyBwZXJsLTUuOC44L2NvbmZpZ19oLlNICTIwMTAtMTEtMDEgMTc6MDY6MDcuMjE1MjE5NzM4ICswODAwCitAQCAtNzA5LDYgKzcwOSwxMiBAQAorICAqLworICMkaV9mbG9hdCBJX0ZMT0FUCQkvKiovCisgCisrLyogSV9HREJNOgorKyAqICAgICAgVGhpcyBzeW1ib2wsIGlmIGRlZmluZWQsIGluZGljYXRlcyB0aGF0IDxnZGJtLmg+IGV4aXN0cyBhbmQgc2hvdWxkCisrICogICAgICBiZSBpbmNsdWRlZC4KKysgKi8KKysjJGlfZ2RibSBJX0dEQk0gLyoqLworKworIC8qIElfTElNSVRTOgorICAqCVRoaXMgc3ltYm9sLCBpZiBkZWZpbmVkLCBpbmRpY2F0ZXMgdG8gdGhlIEMgcHJvZ3JhbSB0aGF0IGl0IHNob3VsZAorICAqCWluY2x1ZGUgPGxpbWl0cy5oPiB0byBnZXQgZGVmaW5pdGlvbiBvZiBzeW1ib2xzIGxpa2UgV09SRF9CSVQgb3IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLW1vcmVjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZTg1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgbmVlZCBsZCBpbiB0aGUgZmFrZSBjb25maWcgbGlicmFyeSwgYnV0IGl0J3Mgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQuIFNvCitleHBhbmQgdGhlIG51bWJlciBvZiBpdGVtcyBpbmNsdWRlZC4gV2hpbGUgdGhpcyB3b3JrcyBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUKK3Jlc3Qgb2YgdGhlIGNvbmZpZyBpdGVtcyBhcmUgbm90IGJlaW5nIHBpY2tlZCB1cCBhbmQvb3IgYXJlIGJlaW5nIHBpY2tlZCB1cAorZnJvbSB0aGUgaG9zdC4gTW9yZSBpbnZlc3RpZ2F0aW9uIG5lZWRlZC4KKworLS0tIHBlcmwtNS44LjgvY29uZmlncG0JMjAwNy8wNC8yMCAwOTo0ODowNQkxLjEKKysrKyBwZXJsLTUuOC44L2NvbmZpZ3BtCTIwMDcvMDQvMjAgMDk6NTc6MTIKK0BAIC0yLDcgKzIsNyBAQAorIHVzZSBzdHJpY3Q7CisgdXNlIHZhcnMgcXcoJUNvbmZpZyAkQ29uZmlnX1NIX2V4cGFuZGVkKTsKKyAKKy1teSAkaG93X21hbnlfY29tbW9uID0gMjI7CisrbXkgJGhvd19tYW55X2NvbW1vbiA9IDUwOworIAorICMgY29tbW9ubHkgdXNlZCBuYW1lcyB0byBwcmVjYWNoZSAoYW5kIGhlbmNlIGxvb2t1cCBmYXN0ZXN0KQorIG15ICVDb21tb247CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmRkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorY2QgdCAmJiAuL1RFU1QgfCBzZWQgLXUgLWUgJ3N8XCguKlwpIC4qIG9rJHxQQVNTOiBcMXwnIC1lICdzfFwoLipcKSAuKiBza2lwcGVkfFNLSVA6IFwxfCcgLWUgJ3N8XCguKlwpIFwuXCguKlwpfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmZGY0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMTU2MTU0OWVhMzZlMzdjYzI1NzA2ZjA5NGExOTVkZTQ5MjhmNDIxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxOSBKdW4gMjAxNSAwMToyMzo0NiAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0L3J1bi9zd2l0Y2hlcy50OiBwZXJsNSAtPiBwZXJsCisKK1dlIGNhbGwgaXQgcGVybCByYXRoZXIgdGhhbiBwZXJsNSBpbiBvZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB0L3J1bi9zd2l0Y2hlcy50IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdC9ydW4vc3dpdGNoZXMudCBiL3QvcnVuL3N3aXRjaGVzLnQKK2luZGV4IDc4OTE1ZTAuLmU5ZTRiNDUgMTAwNjQ0CistLS0gYS90L3J1bi9zd2l0Y2hlcy50CisrKysgYi90L3J1bi9zd2l0Y2hlcy50CitAQCAtMjY5LDcgKzI2OSw3IEBAIGlzIHJ1bnBlcmwoc3RkZXJyID0+IDEsIHByb2cgPT4gJyMhcGVybCAtTScpLAorICAgICAgICAgICAnLVYgZ2VuZXJhdGVzIDIwKyBsaW5lcycgKTsKKyAKKyAgICAgbGlrZSggcnVucGVybCggc3dpdGNoZXMgPT4gWyctViddICksCistCSAgcXIvXEFTdW1tYXJ5IG9mIG15IHBlcmw1IC4qY29uZmlndXJhdGlvbjovLAorKwkgIHFyL1xBU3VtbWFyeSBvZiBteSBwZXJsIC4qY29uZmlndXJhdGlvbjovLAorICAgICAgICAgICAnLVYgbG9va3Mgb2theScgKTsKKyAKKyAgICAgIyBsb29rdXAgYSBrbm93biBjb25maWcgdmFyCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjkzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZGlzdC10aHJlYWRzLXQtam9pbi50LWFkanVzdC1wcy1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorZGlzdC90aHJlYWRzL3Qvam9pbi50OiBhZGp1c3QgcHMgb3B0aW9uCisKK1RoZSBwcydzIG9wdGlvbiAnLWYnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYnVzeWJveCBpbiBvZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBkaXN0L3RocmVhZHMvdC9qb2luLnQgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L3RocmVhZHMvdC9qb2luLnQgYi9kaXN0L3RocmVhZHMvdC9qb2luLnQKKy0tLSBhL2Rpc3QvdGhyZWFkcy90L2pvaW4udAorKysrIGIvZGlzdC90aHJlYWRzL3Qvam9pbi50CitAQCAtMTE4LDcgKzExOCw3IEBAIGlmICgkXk8gZXEgJ2xpbnV4JykgeworICAgICAgICAgICAgICAgICAgfSktPmpvaW47CisgICAgICNwcmludCAiIyBtYWludGhyZWFkOiBcJDAgPSAkMFxuIjsKKyAgICAgI3ByaW50ICIjIHBpZCA9ICQkXG4iOworLSAgICBpZiAob3BlbiBQUywgInBzIC1mIHwiKSB7ICMgTm90ZTogbXVzdCB3b3JrIGluIChhbGwpIHN5c3RlbXMuCisrICAgIGlmIChvcGVuIFBTLCAicHMgfCIpIHsgIyBOb3RlOiBtdXN0IHdvcmsgaW4gKGFsbCkgc3lzdGVtcy4KKyAgICAgICAgIG15ICgkc2F3cGlkLCAkc2F3ZXhlKTsKKyAgICAgICAgIHdoaWxlICg8UFM+KSB7CisgICAgICAgICAgICAgY2hvbXA7CitAQCAtMTM1LDEwICsxMzUsMTAgQEAgaWYgKCReTyBlcSAnbGludXgnKSB7CisgICAgICAgICBpZiAoJHNhd3BpZCkgeworICAgICAgICAgICAgIG9rKCRzYXdwaWQgJiYgJHNhd2V4ZSwgJ2FsdGVyaW5nICQwIGlzIGVmZmVjdGl2ZScpOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBza2lwKCJcJDAgY2hlY2s6IGRpZCBub3Qgc2VlIHBpZCAkJCBpbiAncHMgLWYgfCciKTsKKysgICAgICAgICAgICBza2lwKCJcJDAgY2hlY2s6IGRpZCBub3Qgc2VlIHBpZCAkJCBpbiAncHMgfCciKTsKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIHNraXAoIlwkMCBjaGVjazogb3BlbmluZyAncHMgLWYgfCcgZmFpbGVkOiAkISIpOworKyAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBvcGVuaW5nICdwcyB8JyBmYWlsZWQ6ICQhIik7CisgICAgIH0KKyB9IGVsc2UgeworICAgICBza2lwKCJcJDAgY2hlY2s6IG9ubHkgb24gTGludXgiKTsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTc3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitleHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudDogZml4IGNhbGxpbmcgZGxfZmluZGZpbGUoKSBmYWlsZWQKKworVXNlICckQ29uZmlne2xpYmN9JyBhcyB0aGUgbGliYyBmaWxlIG5hbWUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50IGIvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKK2luZGV4IGFkZTFmOGUuLjM1NjdhZmUgMTAwNjQ0CistLS0gYS9leHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudAorKysrIGIvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKK0BAIC0xMDYsNyArMTA2LDcgQEAgb2soIGRlZmluZWQgJGRsZXJyLCAiZGxfZXJyb3IoKSByZXR1cm5pbmcgYW4gZXJyb3IgbWVzc2FnZTogJyRkbGVyciciICk7CisgIyAuLi4gZGxfZmluZGZpbGUoKQorIFNLSVA6IHsKKyAgICAgbXkgQGZpbGVzID0gKCk7CistICAgIGV2YWwgeyBAZmlsZXMgPSBEeW5hTG9hZGVyOjpkbF9maW5kZmlsZSgiYyIpIH07CisrICAgIGV2YWwgeyBAZmlsZXMgPSBEeW5hTG9hZGVyOjpkbF9maW5kZmlsZSgkQ29uZmlne2xpYmN9KSB9OworICAgICBpcyggJEAsICcnLCAiY2FsbGluZyBkbF9maW5kZmlsZSgpIiApOworICAgICAjIFNvbWUgcGxhdGZvcm1zIGFyZSBrbm93biB0byBub3QgaGF2ZSBhICJsaWJjIgorICAgICAjIChub3QgYXQgbGVhc3QgYnkgdGhhdCBuYW1lKSB0aGF0IHRoZSBkbF9maW5kZmlsZSgpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U3ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIKQEAgLTAsMCArMSwzNzEgQEAKK3JlcXVpcmUgcGVybC5pbmMKKworIyBXZSBuZWVkIGdudWdyZXAgKGZvciAtSSkKK0RFUEVORFMgPSAidmlydHVhbC9kYiBncmVwLW5hdGl2ZSIKK0RFUEVORFMgKz0gImdkYm0gemxpYiIKKworIyBQaWNrIHVwIHBhdGNoZXMgZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vcC9wZXJsL3BlcmxfNS4yMi4wLTEuZGViaWFuLnRhci54egorU1JDX1VSSSArPSAiIFwKKwlmaWxlOi8vZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2RvY19pbmZvLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZW5jMnhzX2luYy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2Vycm5vX3Zlci5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZiBcCisJZmlsZTovL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL21vZF9wYXRocy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3BydW5lX2xpYnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcGVybGl2cC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaCBcCisJZmlsZTovL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYgXAorIgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUuU0gucGF0Y2ggXAorICAgICAgICBmaWxlOi8vaW5zdGFsbHBlcmwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1keW5sb2FkZXIucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1tb3JlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2xldGdjYy1maW5kLWVycm5vLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2dlbmVyYXRlLXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL25hdGl2ZS1wZXJsaW5jLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeF9iYWRfcnBhdGgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1hcmNobGliLWV4cC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9keW5hbG9hZGVyaGFjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2ggXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTMyIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC0zMi1sZSBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtMzItYmUgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTY0IFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC02NC1sZSBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtNjQtYmUgXAorICAgICAgICBmaWxlOi8vbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIFwKKyIKKworIyBGaXggdGVzdCBjYXNlIGlzc3VlcworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgICBmaWxlOi8vdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmYwZjA5YjE3ZGU0MjZlZmYzMjM0MjZjYjE0MGVlNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmU4M2VhZDBjNWMyNmNiYmU2MjZmYTRiYWMxYTRiZWFiZTIzYTllZWJjMTVkMzViYTQ5Y2NkZTExODc4ZTE5NiIKKworaW5oZXJpdCBwZXJsbmF0aXZlIHNpdGVpbmZvCisKKyMgV2hlcmUgdG8gZmluZCB0aGUgbmF0aXZlIHBlcmwKK0hPU1RQRVJMID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsJHtQVn0iCisKKyMgV2hlcmUgdG8gZmluZCAuc28gZmlsZXMgLSB1c2UgdGhlIC1uYXRpdmUgdmVyc2lvbnMgbm90IHRob3NlIGZyb20gdGhlIHRhcmdldCBidWlsZAorZXhwb3J0IFBFUkxIT1NUTElCID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsLyR7UFZ9LyIKKworIyBXaGVyZSB0byBmaW5kIHBlcmwgQElOQy8jaW5jbHVkZSBmaWxlcworIyAtIHVzZSB0aGUgLW5hdGl2ZSB2ZXJzaW9ucyBub3QgdGhvc2UgZnJvbSB0aGUgdGFyZ2V0IGJ1aWxkCitleHBvcnQgUEVSTF9MSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtQVn0vIgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke1BWfS8iCisKKyMgTERGTEFHUyBmb3Igc2hhcmVkIGxpYnJhcmllcworZXhwb3J0IExERExGTEFHUyA9ICIke0xERkxBR1N9IC1zaGFyZWQiCisKK0xERkxBR1NfYXBwZW5kID0gIiAtZnN0YWNrLXByb3RlY3RvciIKKworIyBXZSdyZSBhbG1vc3QgRGViaWFuLCBhcmVuJ3Qgd2U/CitDRkxBR1MgKz0gIi1EREVCSUFOIgorCitkb19ub2xhcmdlZmlsZSgpIHsKKwlzZWQgLWkgLWUgInMsXCh1c2VsYXJnZWZpbGVzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKwkJLWUgInMsXChkX3JlYWRkaXI2NF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKwkJLWUgInMsXChyZWFkZGlyNjRfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKwkJLWUgIi9jY2ZsYWdzX3VzZWxhcmdlZmlsZXMvZCIgXAorCQktZSAicy8tRHVzZWxhcmdlZmlsZXMvLyIgXAorCQktZSAicy8tRF9GSUxFX09GRlNFVF9CSVRTPTY0Ly8iIFwKKwkJLWUgInMvLURfTEFSR0VGSUxFX1NPVVJDRS8vIiBcCisJCSR7U30vQ3Jvc3MvY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorfQorCitkb19jb25maWd1cmUoKSB7CisgICAgICAgICMgTWFrZSBob3N0cGVybCBpbiBidWlsZCBkaXJlY3RvcnkgYmUgdGhlIG5hdGl2ZSBwZXJsCisgICAgICAgIGxuIC1zZiAke0hPU1RQRVJMfSBob3N0cGVybAorCisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiAtYSAtZSAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWlmIFsgImBjYXQgJHtDT05GSUdVUkVTVEFNUEZJTEV9YCIgIT0gIiR7QkJfVEFTS0hBU0h9IiAtYSAtZSBNYWtlZmlsZSBdOyB0aGVuCisJCQkke01BS0V9IGNsZWFuCisJCWZpCisJCWZpbmQgJHtTfSAtbmFtZSAqLnNvIC1kZWxldGUKKwlmaQorCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKKworICAgICAgICAjIERvIG91ciB3b3JrIGluIHRoZSBjcm9zcyBzdWJkaXIKKyAgICAgICAgY2QgQ3Jvc3MKKworICAgICAgICAjIEdlbmVyYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgcm0gLWYgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBmb3IgaSBpbiAke1dPUktESVJ9L2NvbmZpZy5zaCBcCisgICAgICAgICAgICAgICAgICR7V09SS0RJUn0vY29uZmlnLnNoLSR7U0lURUlORk9fQklUU30gXAorICAgICAgICAgICAgICAgICAke1dPUktESVJ9L2NvbmZpZy5zaC0ke1NJVEVJTkZPX0JJVFN9LSR7U0lURUlORk9fRU5ESUFOTkVTU307IGRvCisgICAgICAgICAgICBjYXQgJGkgPj4gY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBkb25lCisKKyAgICAgICAgIyBGaXh1cHMgZm9yIHVjbGliYworICAgICAgICBpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LXVjbGliYyIgLW8gIiR7VEFSR0VUX09TfSIgPSAibGludXgtdWNsaWJjZWFiaSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAicyxcKGRfY3J5cHRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9mdXRpbWVzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Zpbml0ZWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGNyeXB0X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieW5hbWVfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnluYW1lX3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieWFkZHJfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnlhZGRyX3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0ZW50X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zb2NrYXRtYXJrPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3NvY2thdG1hcmtwcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2VhY2Nlc3M9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWxfc2V0c19jbnQ9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9iYXNlPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZHN0ZGlvPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsLWZzdGFjay1wcm90ZWN0b3IsLWZuby1zdGFjay1wcm90ZWN0b3IsZyIgXAorICAgICAgICAgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisgICAgICAgIGZpCisgICAgICAgICMgRml4dXBzIGZvciBtdXNsCisgICAgICAgIGlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtbXVzbCIgLW8gIiR7VEFSR0VUX09TfSIgPSAibGludXgtbXVzbGVhYmkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInMsXChkX2xpYm1fbGliX3ZlcnNpb249XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWxfc2V0c19jbnQ9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9iYXNlPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZHN0ZGlvPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGJ5bmFtZV9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Zpbml0ZWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvYnluYW1lX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHB3ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHNlcnZlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0aG9zdGVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnlhZGRyX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvYnludW1iZXJfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0Z3JlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoaV9mY250bD1cKSd1bmRlZicsXDEnZGVmaW5lJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoaF9mY250bD1cKSdmYWxzZScsXDEndHJ1ZScsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicywtZnN0YWNrLXByb3RlY3RvciwtZm5vLXN0YWNrLXByb3RlY3RvcixnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLC1sbnNsLCxnIiBcCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZmkKKworCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJycsICdkb19ub2xhcmdlZmlsZScsIGQpfQorCisgICAgICAgICMgVXBkYXRlIHNvbWUgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VkIC1pIC1lICdzLEBBUkNIQC10aHJlYWQtbXVsdGksLGcnIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBBUkNIQCwke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30sZycgXAorICAgICAgICAgICAgICAgLWUgJ3MsQFNUQUdJTkdESVJALCR7U1RBR0lOR19ESVJfSE9TVH0sZycgXAorICAgICAgICAgICAgICAgLWUgInMsQElOQ0xVREVESVJALCR7U1RBR0lOR19JTkNESVJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBMSUJESVJALCR7bGliZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicyxAQkFTRUxJQkRJUkAsJHtiYXNlX2xpYmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsQEVYRUNQUkVGSVhALCR7ZXhlY19wcmVmaXh9LGciIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBVU1JCSU5ALCR7YmluZGlyfSxnJyBcCisgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisKKwljYXNlICIke1RBUkdFVF9BUkNIfSIgaW4KKwkJeDg2XzY0IHwgcG93ZXJwYyB8IHMzOTApCisJCQlzZWQgLWkgLWUgInMsXChuZWVkX3ZhX2NvcHk9XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorCQkJCWNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKwkJCTs7CisJCWFybSkKKwkJCXNlZCAtaSAtZSAicyxcKGRfdTMyYWxpZ249XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorCQkJCWNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKwkJCTs7CisJZXNhYworICAgICAgICAjIFRoZXNlIGFyZSBzdHJld24gYWxsIG92ZXIgdGhlIHNvdXJjZSB0cmVlCisgICAgICAgIGZvciBmb28gaW4gYGdyZXAgLUkgLS1leGNsdWRlPSIqLnBhdGNoIiAtLWV4Y2x1ZGU9IiouZGlmZiIgLS1leGNsdWRlPSIqLnBvZCIgLS1leGNsdWRlPSJSRUFETUUqIiAtbTEgIi91c3IvaW5jbHVkZS8uKlwuaCIgJHtTfS8qIC1yIC1sYCAke1N9L3V0aWxzL2gyeHMuUEwgOyBkbworICAgICAgICAgICAgZWNobyBGaXhpbmc6ICRmb28KKyAgICAgICAgICAgIHNlZCAtZSAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAkZm9vCisgICAgICAgIGRvbmUKKworICAgICAgICBybSAtZiBjb25maWcKKyAgICAgICAgZWNobyAiQVJDSCA9ICR7VEFSR0VUX0FSQ0h9IiA+IGNvbmZpZworICAgICAgICBlY2hvICJPUyA9ICR7VEFSR0VUX09TfSIgPj4gY29uZmlnCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgRml4IHRvIGF2b2lkIHJlY3Vyc2l2ZSBzdWJzdGl0dXRpb24gb2YgcGF0aAorICAgICAgICBzZWQgLWkgLWUgJ3N8KEBsaWJwYXRoLCAiLioifChAbGlicGF0aCwgIiR7U1RBR0lOR19MSUJESVJ9InxnJyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKworICAgICAgICBjZCBDcm9zcworICAgICAgICBvZV9ydW5tYWtlIHBlcmwgTEQ9IiR7Q0NMRH0iCit9CisKK2RvX2luc3RhbGwoKSB7CisJI2V4cG9ydCBob3N0cGVybD0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3Blcmwke1BWfSIKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9CisgICAgICAgICMgQWRkIHBlcmwgcG9pbnRpbmcgYXQgY3VycmVudCB2ZXJzaW9uCisgICAgICAgIGxuIC1zZiBwZXJsJHtQVn0gJHtEfSR7YmluZGlyfS9wZXJsCisKKyAgICAgICAgbG4gLXNmIHBlcmwgJHtEfS8ke2xpYmRpcn0vcGVybDUKKworICAgICAgICAjIFJlbW92ZSB1bndhbnRlZCBmaWxlIGFuZCBlbXB0eSBkaXJlY3RvcmllcworICAgICAgICBybSAtZiAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9Ly5wYWNrbGlzdAorCXJtZGlyICR7RH0vJHtsaWJkaXJ9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0vcGVybC9zaXRlX3BlcmwKKworICAgICAgICAjIEZpeCB1cCBzaGFyZWQgbGlicmFyeQorICAgICAgICBtdiAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvbGlicGVybC5zbyAke0R9LyR7bGliZGlyfS9saWJwZXJsLnNvLiR7UFZ9CisgICAgICAgIGxuIC1zZiBsaWJwZXJsLnNvLiR7UFZ9ICR7RH0vJHtsaWJkaXJ9L2xpYnBlcmwuc28uNQorICAgICAgICBsbiAtc2YgLi4vLi4vLi4vbGlicGVybC5zby4ke1BWfSAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvbGlicGVybC5zbworCisgICAgICAgICMgdGFyZ2V0IGNvbmZpZywgdXNlZCBieSBjcGFuLmJiY2xhc3MgdG8gZXh0cmFjdCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAgICAgIGluc3RhbGwgY29uZmlnLnNoICR7RH0ke2xpYmRpcn0vcGVybAorCisgICAgICAgIGxuIC1zIENvbmZpZ19oZWF2eS5wbCAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LXRhcmdldC5wbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3BlcmwgXAorICAgICAgICAgICAgUEVSTDVMSUI9JyRQRVJMNUxJQjokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybDokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybC8ke1BWfTokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybC9zaXRlX3BlcmwvJHtQVn06JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3BlcmwvdmVuZG9yX3BlcmwvJHtQVn0nCit9CisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicGVybF9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3BlcmxfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKyAgICAgICAgIyBGaXggdXAgaW5zdGFsbGVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VkIC1pIC1lICJzLCR7RH0sLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9LCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywtaXN5c3RlbSR7U1RBR0lOR19JTkNESVJ9ICwsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJ9LCR7YmluZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfSU5DRElSfSwke2luY2x1ZGVkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8sJHtiaW5kaXJ9LyxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vLCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtUQVJHRVRfUFJFRklYfSwke2JpbmRpcn0sZyIgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9oMnhzIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vaDJwaCBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZDJtYW4gXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2QydGV4dCBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZDJ1c2FnZSBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZGNoZWNrZXIgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2RzZWxlY3QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvY29uZmlnLmggXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvcGVybC5oIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL3BwLmggXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnLnBvZCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LnBsIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vRmlsZUNhY2hlLnBtIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9wb2QvKi5wb2QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsL2NvbmZpZy5zaAorfQorCitQQUNLQUdFUyA9ICJwZXJsLWRiZyBwZXJsIHBlcmwtbWlzYyBwZXJsLWRldiBwZXJsLXBvZCBwZXJsLWRvYyBwZXJsLWxpYiBcCisgICAgICAgICAgICBwZXJsLW1vZHVsZS1jcGFuIHBlcmwtbW9kdWxlLWNwYW5wbHVzIHBlcmwtbW9kdWxlLXVuaWNvcmUiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vcGVybCAke2JpbmRpcn0vcGVybCR7UFZ9IFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wbSBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9zdHJpY3QucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vd2FybmluZ3MucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vd2FybmluZ3MgXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdmFycy5wbSBcCisgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7YmluZGlyfS9wZXJsLnJlYWwiCitSUFJPVklERVNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLXN0cmljdCBwZXJsLW1vZHVsZS12YXJzIHBlcmwtbW9kdWxlLWNvbmZpZyBwZXJsLW1vZHVsZS13YXJuaW5ncyBcCisgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUiCitGSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYnBlcmwuc28qIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybDUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsL2NvbmZpZy5zaCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LnBsIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWdfaGVhdnktdGFyZ2V0LnBsIgorRklMRVNfJHtQTn0tcG9kID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L3BvZCBcCisJCSAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyoucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyoucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyovKi5wb2QgIgorRklMRVNfcGVybC1taXNjID0gIiR7YmluZGlyfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8qLy5kZWJ1ZyAiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLnR4dCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLyoudHh0IFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvL1hTL1R5cGVtYXAgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvYXNzZW1ibGUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvY2NfaGFybmVzcyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9kaXNhc3NlbWJsZSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9tYWtlbGlibGlua3MgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NHSS9lZyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTi9QQVVTRTIwMDMucHViIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOL1NJR05BVFVSRSBcCisJCSAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU5QTFVTL1NoZWxsL0RlZmF1bHQvUGx1Z2lucy9IT1dUTy5wb2QgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0VuY29kZS9lbmNvZGUuaCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTUFOSUZFU1QuU0tJUCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTk9URVMgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL1BBVENISU5HIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy90eXBlbWFwIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy94c3VicHAgXAorCQkgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9DaGFuZ2VzX0VVLUluc3RhbGwgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L05ldC8qLmVnIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlL21rdGFibGVzIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlL21rdGFibGVzLmxzdCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZS92ZXJzaW9uICIKKworRklMRVNfcGVybC1tb2R1bGUtY3BhbiArPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOLnBtIgorRklMRVNfcGVybC1tb2R1bGUtY3BhbnBsdXMgKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU5QTFVTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOUExVUy5wbSIKK0ZJTEVTX3BlcmwtbW9kdWxlLXVuaWNvcmUgKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L3VuaWNvcmUiCisKKyMgQ3JlYXRlIGEgcGVybC1tb2R1bGVzIHBhY2thZ2UgcmVjb21tZW5kaW5nIGFsbCB0aGUgb3RoZXIgcGVybAorIyBwYWNrYWdlcyAoYWN0dWFsbHkgdGhlIG5vbiBtb2R1bGVzIHBhY2thZ2VzIGFuZCBub3QgY3JlYXRlZCB0b28pCitBTExPV19FTVBUWV9wZXJsLW1vZHVsZXMgPSAiMSIKK1BBQ0tBR0VTX2FwcGVuZCA9ICIgcGVybC1tb2R1bGVzICIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGVybC8ke1BWfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnYXV0by8oW14uXSopL1teL10qXC4oc298bGR8aXh8YWwpJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdNb2R1bGUvKFteXC9dKilcLnBtJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIGFsbG93X2RpcnM9RmFsc2UsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdNb2R1bGUvKFteXC9dKikvLionLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgYWxsb3dfZGlycz1GYWxzZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJyheKD8hKENQQU5cL3xDUEFOUExVU1wvfE1vZHVsZVwvfHVuaWNvcmVcL3xhdXRvXC8pW15cL10pLiopXC4ocG18cGx8ZTJ4KScsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBhbGxvd19kaXJzPUZhbHNlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisKKyAgICAjIHBlcmwtbW9kdWxlcyBzaG91bGQgcmVjb21tZW5kIGV2ZXJ5IHBlcmwgbW9kdWxlLCBhbmQgb25seSB0aGUKKyAgICAjIG1vZHVsZXMuIERvbid0IGF0dGVtcHQgdG8gdXNlIHRoZSByZXN1bHQgb2YgZG9fc3BsaXRfcGFja2FnZXMoKSBhcyBzb21lCisgICAgIyBtb2R1bGVzIGFyZSBtYW51YWxseSBzcGxpdCAoZWcuIHBlcmwtbW9kdWxlLXVuaWNvcmUpLgorICAgIHBhY2thZ2VzID0gZmlsdGVyKGxhbWJkYSBwOiAncGVybC1tb2R1bGUtJyBpbiBwLCBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpKQorICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU18ke1BOfS1tb2R1bGVzIiwgJyAnLmpvaW4ocGFja2FnZXMpKQorfQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecGVybC1tb2R1bGUtLioiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZXNkayArPSAiXm5hdGl2ZXNkay1wZXJsLW1vZHVsZS0uKiIKKworUlBST1ZJREVTX3BlcmwtbGliID0gInBlcmwtbGliIgorCityZXF1aXJlIHBlcmwtcmRlcGVuZHNfJHtQVn0uaW5jCityZXF1aXJlIHBlcmwtcHRlc3QuaW5jCisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqLnBtICoucG9kICouaCAqLnBsICouc2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YWI1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy5pbmMKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJIZWxwZXIgdG9vbCB1c2VkIHdoZW4gY29tcGlsaW5nIgorREVTQ1JJUFRJT04gPSAicGtnLWNvbmZpZyBpcyBhIGhlbHBlciB0b29sIHVzZWQgd2hlbiBjb21waWxpbmcgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMuIEl0IGhlbHBzIGRldGVybWluZWQgXAordGhlIGNvcnJlY3QgY29tcGlsZXIvbGluayBvcHRpb25zLiAgSXQgaXMgYWxzbyBsYW5ndWFnZS1hZ25vc3RpYy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PXBrZy1jb25maWciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1NSQ1JFViA9ICI0MDM0MmRkMGVhZDA1ZDQ1N2EyYTRlNjkyY2Y4NjVmNTAwMzNhNzA5IgorUFYgPSAiMC4yOCtnaXQke1NSQ1BWfSIKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvcGtnLWNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1pbnRlcm5hbC1nbGliIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGgtaW50ZXJuYWwtZ2xpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRoLWludGVybmFsLWdsaWIiCisKK2FjcGF0aHMgPSAiLUkgLiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFNldCBhbiBlbXB0eSBkZXYgcGFja2FnZSB0byBlbnN1cmUgdGhlIGJhc2UgUE4gcGFja2FnZSBnZXRzCisjIHRoZSBwa2cubTQgbWFjcm9zLCBwa2djb25maWcgZG9lcyBub3QgZGVsaXZlciBhbnkgb3RoZXIgLWRldgorIyBmaWxlcy4KK0ZJTEVTXyR7UE59LWRldiA9ICIiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsL3BrZy5tNCIKKworIyBXaGVuIHVzaW5nIHRoZSBSUE0gZ2VuZXJhdGVkIGF1dG9tYXRpYyBwYWNrYWdlIGRlcGVuZGVuY2llcywgc29tZSBwYWNrYWdlcworIyB3aWxsIGVuZCB1cCByZXF1aXJpbmcgJ3BrZ2NvbmZpZyhwa2ctY29uZmlnKScuICBBbGxvdyB0aGlzIGJlaGF2aW9yIGJ5CisjIHNwZWNpZnlpbmcgYW4gYXBwcm9wcmlhdGUgcHJvdmlkZS4KK1JQUk9WSURFU18ke1BOfSArPSAicGtnY29uZmlnKHBrZy1jb25maWcpIgorCisjIEluc3RhbGwgYSBwa2ctY29uZmlnLW5hdGl2ZSB3cmFwcGVyIHRoYXQgd2lsbCB1c2UgdGhlIG5hdGl2ZSBzeXNyb290IGluc3RlYWQKKyMgb2YgdGhlIE1BQ0hJTkUgc3lzcm9vdCwgZm9yIHVzaW5nIHBrZy1jb25maWcgd2hlbiBidWlsZGluZyBuYXRpdmUgdG9vbHMuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIHNlZCAtZSAic3xAUEFUSF9OQVRJVkVAfCR7UEtHX0NPTkZJR19QQVRIfXwiIFwKKyAgICAgICAgLWUgInN8QExJQkRJUl9OQVRJVkVAfCR7UEtHX0NPTkZJR19MSUJESVJ9fCIgXAorICAgICAgICA8ICR7V09SS0RJUn0vcGtnLWNvbmZpZy1uYXRpdmUuaW4gPiAke0J9L3BrZy1jb25maWctbmF0aXZlCisgICAgaW5zdGFsbCAtbTc1NSAke0J9L3BrZy1jb25maWctbmF0aXZlICR7RH0ke2JpbmRpcn0vcGtnLWNvbmZpZy1uYXRpdmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjNjI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBwa2ctY29uZmlnLTAuMjgvZ2xpYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwa2ctY29uZmlnLTAuMjgub3JpZy9nbGliL2NvbmZpZ3VyZS5hYworKysrIHBrZy1jb25maWctMC4yOC9nbGliL2NvbmZpZ3VyZS5hYworQEAgLTE0MzgsNyArMTQzOCw3IEBAIGlmIHRlc3QgeCIkZ2xpYl9uYXRpdmVfd2luMzIiID0geHllczsgdGgKKyAgIEdfTU9EVUxFX0xERkxBR1M9CisgZWxzZQorICAgZXhwb3J0IFNFRAorLSAgR19NT0RVTEVfTERGTEFHUz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorKyAgR19NT0RVTEVfTERGTEFHUz1gKC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgZmkKKyBkbmwgR19NT0RVTEVfSU1QTD0gZG9uJ3QgcmVzZXQsIHNvIGNtZC1saW5lIGNhbiBvdmVycmlkZQorIEdfTU9EVUxFX05FRURfVVNDT1JFPTAKK0BAIC0xNTAzLDEzICsxNTAzLDEzIEBAIGlmIHRlc3QgIiRHX01PRFVMRV9JTVBMIiA9ICJHX01PRFVMRV9JTVAKKyAJTERGTEFHUz0iJExERkxBR1MgJEdfTU9EVUxFX0xERkxBR1MiCisgZG5sICoqKiBjaGVjayBmb3IgT1NGMS81LjAgUlRMRF9HTE9CQUwgYnJva2VubmVzcworIAllY2hvICJ2b2lkIGdsaWJfcGx1Z2luX3Rlc3Qodm9pZCkgeyB9IiA+IHBsdWdpbi5jCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtDUFBGTEFHU30gLWMgLW8gcGx1Z2luLmxvIHBsdWdpbi5jID4vZGV2L251bGwgMj4mMQorLQkke1NIRUxMfSAuL2xpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKysJJHtTSEVMTH0gLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7TERGTEFHU30gLW1vZHVsZSAtbyBwbHVnaW4ubGEgLWV4cG9ydC1keW5hbWljIFwKKyAJCS1zaHJleHQgIi5vIiAtYXZvaWQtdmVyc2lvbiBwbHVnaW4ubG8gXAorIAkJLXJwYXRoIC9kb250L2NhcmUgPi9kZXYvbnVsbCAyPiYxCistCWV2YWwgYC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgXm9iamRpcmAKKysJZXZhbCBgLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1jb25maWcgfCBncmVwIF5vYmpkaXJgCisgCUFDX0NBQ0hFX0NIRUNLKFtmb3IgUlRMRF9HTE9CQUwgYnJva2VubmVzc10sCisgCQlnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuLFsKKyAJCUFDX1RSWV9SVU4oWworQEAgLTE1ODIsNyArMTU4Miw3IEBAIGZpCisgCisgQUNfTVNHX0NIRUNLSU5HKGZvciB0aGUgc3VmZml4IG9mIG1vZHVsZSBzaGFyZWQgbGlicmFyaWVzKQorIGV4cG9ydCBTRUQKKy1zaHJleHRfY21kcz1gLi9saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisrc2hyZXh0X2NtZHM9YC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisgZXZhbCAkc2hyZXh0X2NtZHMKKyBtb2R1bGU9eWVzIGV2YWwgc3RkX3NocmV4dD0kc2hyZXh0X2NtZHMKKyAjIGNob3AgdGhlIGluaXRpYWwgZG90CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL3BrZy1jb25maWctbmF0aXZlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDRiYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbgpAQCAtMCwwICsxLDcgQEAKKyMhIC9iaW4vc2gKKworUEtHX0NPTkZJR19QQVRIPSJAUEFUSF9OQVRJVkVAIgorUEtHX0NPTkZJR19MSUJESVI9IkBMSUJESVJfTkFUSVZFQCIKK3Vuc2V0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIKKworcGtnLWNvbmZpZyAiJEAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhNTExYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgcGtnY29uZmlnLmluYworCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICAgZmlsZTovL3BrZy1jb25maWctbmF0aXZlLmluIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaCBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wb3N0aW5zdC1pbnRlcmNlcHQvbmF0aXZlc2RrLXBvc3RpbnN0LWludGVyY2VwdF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzQ1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiUG9zdGluc3RhbGwgc2NyaXB0bGV0cyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0ZJTEVTXyR7UE59X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLyoiCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMKKwlpbnN0YWxsIC1tIDc1NSAke0NPUkVCQVNFfS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvcG9zdGluc3RfaW50ZXJjZXB0ICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9pY29uX2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUgJHtEfSR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8KK30KKworaW5oZXJpdCBuYXRpdmVzZGsKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL21hY3Jvcy5wcmVsaW5rIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE2Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluawpAQCAtMCwwICsxLDUgQEAKKyMgcnBtLTQuMSB2ZXJpZmllcyBwcmVsaW5rZWQgbGlicmFyaWVzIHVzaW5nIGEgcHJlbGluayB1bmRvIGhlbHBlci4KKyMgICAgICAgTm90ZTogVGhlIDJuZCB0b2tlbiBpcyB1c2VkIGFzIGFyZ3ZbMF0gYW5kICJsaWJyYXJ5IiBpcyBhCisjICAgICAgIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBiZSBkZWxldGVkIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorIyAgICAgICBsaWJyYXJ5IGZpbGUgcGF0aC4KKyVfX3ByZWxpbmtfdW5kb19jbWQgICAgIC91c3Ivc2Jpbi9wcmVsaW5rIHByZWxpbmsgLXkgbGlicmFyeQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJmMjNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYKQEAgLTAsMCArMSwxOCBAQAorIyBUaGlzIGNvbmZpZyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBib3RoIHdpdGggYmluYXJpZXMKKyMgYW5kIGxpYnJhcmllcyBwcmVsaW5rIHNob3VsZCBjb25zaWRlciBieSBkZWZhdWx0LgorIyBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIHByZWZpeGVkIHdpdGggYC1sICcsIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIHdpbGwgYmUgd2Fsa2VkIGFzIGxvbmcgYXMgZmlsZXN5c3RlbSBib3VuZGFyaWVzIGFyZSBub3QgY3Jvc3NlZC4KKyMgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBwcmVmaXhlZCB3aXRoIGAtaCAnLCBzeW1ib2xpYyBsaW5rcyBpbiBhCisjIGRpcmVjdG9yeSBoaWVyYXJjaHkgYXJlIGZvbGxvd2VkLgorLWwgL3Vzci9sb2NhbC9zYmluCistbCAvc2JpbgorLWwgL3Vzci9zYmluCistbCAvdXNyL2xvY2FsL2JpbgorLWwgL2JpbgorLWwgL3Vzci9iaW4KKy1sIC91c3IvWDExUjYvYmluCistbCAvdXNyL2dhbWVzCistbCAvdXNyL2xvY2FsL2xpYnssMzIsNjQseDMyfQorLWwgL2xpYnssMzIsNjQseDMyfQorLWwgL3Vzci9saWJ7LDMyLDY0LHgzMn0KKy1sIC91c3IvWDExUjYvbGlieywzMiw2NCx4MzJ9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jcm9uLmRhaWx5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2MwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseQpAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2RlZmF1bHQvcHJlbGluaworCityZW5pY2UgKzE5IC1wICQkID4vZGV2L251bGwgMj4mMQorCitpZiBbICIkUFJFTElOS0lORyIgIT0geWVzIF07IHRoZW4KKyAgaWYgWyAtZiAvZXRjL3ByZWxpbmsuY2FjaGUgXTsgdGhlbgorICAgIGVjaG8gL3Vzci9zYmluL3ByZWxpbmsgLXVhdiA+IC92YXIvbG9nL3ByZWxpbmsubG9nCisgICAgL3Vzci9zYmluL3ByZWxpbmsgLXVhdiA+PiAvdmFyL2xvZy9wcmVsaW5rLmxvZyAyPiYxCisgICAgcm0gLWYgL2V0Yy9wcmVsaW5rLmNhY2hlCisgICAgIyBSZXN0YXJ0IGluaXQgaWYgbmVlZGVkCisgICAgWyAtbiAiJChmaW5kIGBsZGQgL3NiaW4vaW5pdCB8IGF3ayAneyBwcmludCAkMyB9J2AgL3NiaW4vaW5pdCAtY3RpbWUgLTEgMj4vZGV2L251bGwgKSIgXSAmJiAvc2Jpbi90ZWxpbml0IHUKKyAgZmkKKyAgZXhpdCAwCitmaQorCitpZiBbICEgLWYgL2V0Yy9wcmVsaW5rLmNhY2hlIC1vIC1mIC92YXIvbGliL21pc2MvcHJlbGluay5mb3JjZSBdIFwKKyAgIHx8IGdyZXAgLXEgJ15wcmVsaW5rLUVMRjAuWzAtMl0nIC9ldGMvcHJlbGluay5jYWNoZTsgdGhlbgorICAjIElmIGNhY2hlIGRvZXMgbm90IGV4aXN0IG9yIGlzIGZyb20gb2xkZXIgcHJlbGluayB2ZXJzaW9ucyBvcgorICAjIGlmIHdlIHdlcmUgYXNrZWQgdG8gZXhwbGljaXRlbHksIGZvcmNlIGZ1bGwgcHJlbGlua2luZworICBybSAtZiAvZXRjL3ByZWxpbmsuY2FjaGUgL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZvcmNlCisgIFBSRUxJTktfT1BUUz0iJFBSRUxJTktfT1BUUyAtZiIKKyAgZGF0ZSA+IC92YXIvbGliL21pc2MvcHJlbGluay5mdWxsCitlbGlmIFsgLW4gIiRQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCIgXAorICAgICAgIC1hICJgZmluZCAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbCAtbXRpbWUgLSR7UFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUx9IDI+L2Rldi9udWxsYCIgXAorCSAgPSAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbCBdOyB0aGVuCisgICMgSWYgcHJlbGluayB3aXRob3V0IC1xIGhhcyBiZWVuIHJ1biBpbiB0aGUgbGFzdAorICAjIFBSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMIGRheXMsIGp1c3QgdXNlIHF1aWNrIG1vZGUKKyAgUFJFTElOS19PUFRTPSIkUFJFTElOS19PUFRTIC1xIgorZWxzZQorICBkYXRlID4gL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwKK2ZpCisKK2VjaG8gL3Vzci9zYmluL3ByZWxpbmsgLWF2ICRQUkVMSU5LX09QVFMgPiAvdmFyL2xvZy9wcmVsaW5rLmxvZworL3Vzci9zYmluL3ByZWxpbmsgLWF2ICRQUkVMSU5LX09QVFMgPj4gL3Zhci9sb2cvcHJlbGluay5sb2cgMj4mMQorIyBSZXN0YXJ0IGluaXQgaWYgbmVlZGVkCitbIC1uICIkKGZpbmQgYGxkZCAvc2Jpbi9pbml0IHwgYXdrICd7IHByaW50ICQzIH0nYCAvc2Jpbi9pbml0IC1jdGltZSAtMSAyPi9kZXYvbnVsbCApIiBdICYmIC9zYmluL3RlbGluaXQgdQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4MDJmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0CkBAIC0wLDAgKzEsMjIgQEAKKyMgU2V0IHRoaXMgdG8gbm8gdG8gZGlzYWJsZSBwcmVsaW5raW5nIGFsdG9nZXRoZXIKKyMgb3IgdG8geWVzIHRvIGVuYWJsZSBpdC4KKyMgKGlmIHlvdSBjaGFuZ2UgdGhpcyBmcm9tIHllcyB0byBubyBwcmVsaW5rIC11YQorIyB3aWxsIGJlIHJ1biBuZXh0IG5pZ2h0IHRvIHVuZG8gcHJlbGlua2luZykKK1BSRUxJTktJTkc9eWVzCisKKyMgT3B0aW9ucyB0byBwYXNzIHRvIHByZWxpbmsKKyMgLW0JVHJ5IHRvIGNvbnNlcnZlIHZpcnR1YWwgbWVtb3J5IGJ5IGFsbG93aW5nIG92ZXJsYXBwaW5nCisjCWFzc2lnbmVkIHZpcnR1YWwgbWVtb3J5IHNsb3RzIGZvciBsaWJyYXJpZXMgd2hpY2gKKyMJbmV2ZXIgYXBwZWFyIHRvZ2V0aGVyIGluIG9uZSBiaW5hcnkKKyMgLVIJUmFuZG9taXplIHZpcnR1YWwgbWVtb3J5IHNsb3QgYXNzaWdubWVudHMgZm9yIGxpYnJhcmllcy4KKyMJVGhpcyBtYWtlcyBpdCBzbGlnaHRseSBoYXJkZXIgZm9yIHZhcmlvdXMgYnVmZmVyIG92ZXJmbG93CisjCWF0dGFja3MsIHNpbmNlIGxpYnJhcnkgYWRkcmVzc2VzIHdpbGwgYmUgZGlmZmVyZW50IG9uIGVhY2gKKyMJaG9zdCB1c2luZyAtUi4KK1BSRUxJTktfT1BUUz0tbVIKKworIyBIb3cgb2Z0ZW4gc2hvdWxkIGZ1bGwgcHJlbGluayBiZSBydW4gKGluIGRheXMpCisjIE5vcm1hbGx5LCBwcmVsaW5rIHdpbGwgYmUgcnVuIGluIHF1aWNrIG1vZGUsIGV2ZXJ5CisjICRQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCBkYXlzIGl0IHdpbGwgYmUgcnVuCisjIGluIG5vcm1hbCBtb2RlLiAgQ29tbWVudCB0aGlzIGxpbmUgb3V0IGlmIHByZWxpbmsgCisjIHNob3VsZCBiZSBydW4gaW4gbm9ybWFsIG1vZGUgYWx3YXlzLgorUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUw9MTQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmNjkxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCkBAIC0wLDAgKzEsODEgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCisjIE5lZWQgYmludXRpbHMgZm9yIGxpYmliZXJ0eS5hCisjIFdvdWxkIG5lZWQgdHJhbnNmaWctbmF0aXZlIGZvciBkb2N1bWVudGF0aW9uIGlmIGl0IHdhc24ndCBkaXNhYmxlZAorREVQRU5EUyA9ICJlbGZ1dGlscyBiaW51dGlscyIKK1NVTU1BUlkgPSAiQW4gRUxGIHByZWxpbmtpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBwcmVsaW5rIHBhY2thZ2UgY29udGFpbnMgYSB1dGlsaXR5IHdoaWNoIG1vZGlmaWVzIEVMRiBzaGFyZWQgbGlicmFyaWVzIFwKK2FuZCBleGVjdXRhYmxlcywgc28gdGhhdCBmYXIgZmV3ZXIgcmVsb2NhdGlvbnMgbmVlZCB0byBiZSByZXNvbHZlZCBhdCBcCitydW50aW1lIGFuZCB0aHVzIHByb2dyYW1zIGNvbWUgdXAgZmFzdGVyLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiIKK1NSQ1JFViA9ICI0MDMyN2ZiOTk2NTRlOTZkYjZlZjE1ZTJmMmQ1ZWYxNDBhYzNlOTk4IgorUFYgPSAiMS4wK2dpdCR7U1JDUFZ9IgorCisjCisjIFRoZSBjcm9uIHNjcmlwdCBhdHRlbXB0cyB0byByZS1wcmVsaW5rIHRoZSBzeXN0ZW0gZGFpbHkgLS0gb24KKyMgc3lzdGVtcyB3aGVyZSB1c2VycyBhcmUgYWRkaW5nIGFwcGxpY2F0aW9ucywgdGhpcyBtaWdodCBiZSByZWFzb25hYmxlCisjIGJ1dCBmb3IgZW1iZWRkZWQsIHdlIHNob3VsZCBiZSByZS1ydW5uaW5nIHByZWxpbmsgLWEgYWZ0ZXIgYW4gdXBkYXRlLgorIworIyBEZWZhdWx0IGlzIHByZWxpbmtpbmcgaXMgZW5hYmxlZC4KKyMKK1NVTU1BUllfJHtQTn0tY3JvbiA9ICJDcm9uIHNjcmlwdHMgdG8gY29udHJvbCBhdXRvbWF0aWMgcHJlbGlua2luZyIKK0RFU0NSSVBUSU9OXyR7UE59LWNyb24gPSAiQ3JvbiBzY3JpcHRzIHRvIGNvbnRyb2wgYXV0b21hdGljIHByZWxpbmtpbmcuICBcCitTZWU6ICR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseS9wcmVsaW5rIGZvciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIKKworRklMRVNfJHtQTn0tY3JvbiA9ICIke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3JvbiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wcmVsaW5rLWNyb3NzLmdpdDticmFuY2g9Y3Jvc3NfcHJlbGluayBcCisgICAgICAgICAgIGZpbGU6Ly9wcmVsaW5rLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcHJlbGluay5jcm9uLmRhaWx5IFwKKyAgICAgICAgICAgZmlsZTovL3ByZWxpbmsuZGVmYXVsdCBcCisJICAgZmlsZTovL21hY3Jvcy5wcmVsaW5rIgorCitUQVJHRVRfT1NfT1JJRyA6PSAiJHtUQVJHRVRfT1N9IgorT1ZFUlJJREVTX2FwcGVuZCA9ICI6JHtUQVJHRVRfT1NfT1JJR30iCisKK1MgPSAiJHtXT1JLRElSfS9naXQvdHJ1bmsiCisKK2luaGVyaXQgYXV0b3Rvb2xzIAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zZWxpbnV4IC0td2l0aC1wa2d2ZXJzaW9uPSR7UFZ9LSR7UFJ9IFwKKwktLXdpdGgtYnVndXJsPWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICAjIERpc2FibGUgZG9jdW1lbnRhdGlvbiEKKyAgICAgICAgZWNobyAiYWxsOiIgPiAke1N9L2RvYy9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vcnBtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJlbGluay5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ByZWxpbmsuY3Jvbi5kYWlseSAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L3ByZWxpbmsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcmVsaW5rLmRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9wcmVsaW5rCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbWFjcm9zLnByZWxpbmsgJHtEfSR7c3lzY29uZmRpcn0vcnBtL21hY3Jvcy5wcmVsaW5rCit9CisKKyMgSWYgd2UncmUgdXNpbmcgaW1hZ2UtcHJlbGluaywgd2Ugd2FudCB0byBza2lwIHRoaXMgb24gdGhlIGhvc3Qgc2lkZQorIyBidXQgc3RpbGwgZG8gaXQgaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQuLi4KK3BrZ19wb3N0aW5zdF9wcmVsaW5rKCkgeworIyEvYmluL3NoCisKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRVJfQ0xBU1NFUycsICdpbWFnZS1wcmVsaW5rJywgJ2V4aXQgMCcsICdleGl0IDEnLCBkKX0KK2ZpCisKK3ByZWxpbmsgLWEKK30KKworcGtnX3ByZXJtX3ByZWxpbmsoKSB7CisjIS9iaW4vc2gKKworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICBleGl0IDEKK2ZpCisKK3ByZWxpbmsgLWF1Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYmY3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwCkBAIC0wLDAgKzEsMiBAQAorcm9vdDoqOjA6CittYWlsOio6ODoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0NThkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkCkBAIC0wLDAgKzEgQEAKK3Jvb3Q6OjA6MDpyb290Oi9ob21lL3Jvb3Q6L2Jpbi9zaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTIyNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMKQEAgLTAsMCArMSwxMzUgQEAKKyMgTm90ZTogRHVlIHRvIHRoZSBiaXRiYWtlIHdyYXBwZXIgc2NyaXB0LCBtYWtpbmcgY2hhbmdlcyB0byBwc2V1ZG8gY2FuIGJlCisjIGRpZmZpY3VsdC4gIFRvIHdvcmsgYXJvdW5kIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHdyYXBwZXIgdXNlOgorIyBCQkZFVENIMj1UcnVlIFBTRVVET19CVUlMRD0xIC4uL2JpdGJha2UvYmluL2JpdGJha2UgcHNldWRvLW5hdGl2ZSBbLWMgQ01EXQorCitTVU1NQVJZID0gIlBzZXVkbyBnaXZlcyBmYWtlIHJvb3QgY2FwYWJpbGl0aWVzIHRvIGEgbm9ybWFsIHVzZXIiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wc2V1ZG8iCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiTEdQTDIuMSIKK0RFUEVORFMgPSAic3FsaXRlMyBhdHRyIgorCitGSUxFU18ke1BOfSA9ICIke3ByZWZpeH0vbGliL3BzZXVkby9saWIqL2xpYnBzZXVkby5zbyAke2JpbmRpcn0vKiAke2xvY2Fsc3RhdGVkaXJ9L3BzZXVkbyAke3ByZWZpeH0vdmFyL3BzZXVkbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliKi8uZGVidWciCitJTlNBTkVfU0tJUF8ke1BOfSArPSAibGliZGlyIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnICs9ICJsaWJkaXIiCisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2Zha2Vyb290IgorCitNQUtFT1BUUyA9ICIiCisKK2luaGVyaXQgc2l0ZWluZm8KKworZG9fY29uZmlndXJlICgpIHsKKwk6Cit9CisKK05PMzJMSUJTID8/PSAiMSIKK05PMzJMSUJTX2NsYXNzLW5hdGl2ZXNkayA9ICIxIgorCisjIENvbXBpbGUgZm9yIHRoZSBsb2NhbCBtYWNoaW5lIGFyY2guLi4KK2RvX2NvbXBpbGUgKCkgeworCWlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisJICAke1N9L2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliJHtTSVRFSU5GT19CSVRTfSAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1jZmxhZ3M9IiR7Q0ZMQUdTfSIgLS1iaXRzPSR7U0lURUlORk9fQklUU30gLS1lbmFibGUtc3RhdGljLXNxbGl0ZSAtLXdpdGhvdXQtcnBhdGgKKwllbHNlCisJICAke1N9L2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliIC0td2l0aC1zcWxpdGUtbGliPSR7YmFzZWxpYn0gLS13aXRoLXNxbGl0ZT0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2V4ZWNfcHJlZml4fSAtLWNmbGFncz0iJHtDRkxBR1N9IiAtLWJpdHM9JHtTSVRFSU5GT19CSVRTfSAtLWVuYWJsZS1zdGF0aWMtc3FsaXRlIC0td2l0aG91dC1ycGF0aAorCWZpCisJb2VfcnVubWFrZSAke01BS0VPUFRTfQorfQorZG9fY29tcGlsZVt2YXJkZXBzZXhjbHVkZV0gPSAiU0lURUlORk9fQklUUyIKKworbWF5YmVfbWFrZTMyKCkgeworCSMgV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBidWlsZCAzMi1iaXQgYmluYXJpZXMuCisJbWFrZTMyPWZhbHNlCisJaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKwkJY2FzZSAiJHtOTzMyTElCU30iIGluCisJCTApCW1ha2UzMj10cnVlCisJCQk7OworCQkxKQltYWtlMzI9ZmFsc2UKKwkJCTs7CisJCSopCSMgSWYgdW5zZXQsIGJ1aWxkIDMyLWJpdCBpZiB3ZSB0aGluayB3ZSBjYW4uCisJCQlpZiBbIC1lICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgiIF07IHRoZW4KKwkJCQltYWtlMzI9dHJ1ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwlmaQorCWlmICRtYWtlMzI7IHRoZW4KKwkJaWYgISBbIC1lICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgiIF07IHRoZW4KKwkJCXdhcm5fMzJiaXRfbWlzc2luZworCQllbHNlCisJCQliYm5vdGUgIkF0dGVtcHRpbmcgdG8gYnVpbGQgMzItYml0IGxpYnBzZXVkby5zbyBmb3IgJHtQTn0uIgorCQlmaQorCWVsc2UKKwkJYmJub3RlICJCdWlsZGluZy9pbnN0YWxsaW5nIG9ubHkgNjQtYml0IGxpYnBzZXVkby5zbyBmb3IgJHtQTn0uIgorCQliYm5vdGUgIklmIHlvdSBuZWVkIHRvIHJ1biAzMi1iaXQgZXhlY3V0YWJsZXMsIGVuc3VyZSB0aGF0IE5PMzJMSUJTIGlzIHNldCB0byAwLiIKKwlmaQorfQorbWF5YmVfbWFrZTMyW3ZhcmRlcHNleGNsdWRlXSA9ICJTSVRFSU5GT19CSVRTIgorCit3YXJuXzMyYml0X21pc3NpbmcoKSB7CisJYmJ3YXJuICJDYW4ndCBmaW5kIHN0dWJzLTMyLmgsIGJ1dCB1c3VhbGx5IG5lZWQgaXQgdG8gYnVpbGQgMzItYml0IGxpYnBzZXVkby4iCisJYmJ3YXJuICJJZiB0aGUgYnVpbGQgZmFpbHMsIGluc3RhbGwgMzItYml0IGRldmVsb3BlciBwYWNrYWdlcy4iCisJYmJ3YXJuICJJZiB5b3UgYXJlIHVzaW5nIDMyLWJpdCBiaW5hcmllcywgdGhlIDMyLWJpdCBsaWJwc2V1ZG8gaXMgTk9UIG9wdGlvbmFsLiIKK30KKworIyBUd28gYmVsb3cgYXJlIHRoZSBzYW1lCisjIElmIG5lY2Vzc2FyeSBjb21waWxlIGZvciB0aGUgYWx0ZXJuYXRpdmUgbWFjaGluZSBhcmNoLiAgVGhpcyBpcyBvbmx5IAorIyBuZWNlc3NhcnkgaW4gYSBuYXRpdmUgYnVpbGQuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCSMgV2UgbmVlZCB0aGUgMzItYml0IGxpYnBzZXVkbyBvbiBhIDY0LWJpdCBtYWNoaW5lLi4uCisJCSMgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHdlbGwtdGVzdGVkIG91dHNpZGUgb2YgeDg2L3g4Nl82NC4KKworCQkjIGlmIHdlJ3JlIGJlaW5nIHJlYnVpbHQgZHVlIHRvIGEgZGVwZW5kZW5jeSBjaGFuZ2UsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCisJCSMgZXZlcnl0aGluZyBpcyBjbGVhbiBiZWZvcmUgd2UgY29uZmlndXJlIGFuZCBidWlsZCAtLSBpZiB3ZSBoYXZlbid0IHByZXZpb3VzbHkKKwkJIyBidWlsdCB0aGlzIHdpbGwgZmFpbCBhbmQgYmUgaWdub3JlZC4KKwkJbWFrZSAke01BS0VPUFRTfSBkaXN0Y2xlYW4gfHwgOgorCisJCS4vY29uZmlndXJlICR7UFNFVURPX0VYVFJBX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSAtLWxpYmRpcj0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIgLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tYml0cz0zMiAtLXdpdGhvdXQtcnBhdGgKKwkJc2F2ZV90cmFwcz0kKHRyYXApCisJCXRyYXAgJ3dhcm5fMzJiaXRfbWlzc2luZycgMAorCQlvZV9ydW5tYWtlICR7TUFLRU9QVFN9IGxpYnBzZXVkbworCQlldmFsICIkc2F2ZV90cmFwcyIKKwkJIyBwcmV2ZW50IGl0IGZyb20gcmVtb3ZpbmcgdGhlIGxpYiwgYnV0IHJlbW92ZSBldmVyeXRoaW5nIGVsc2UKKwkJbWFrZSAnTElCPWZvbycgJHtNQUtFT1BUU30gZGlzdGNsZWFuIAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCW1heWJlX21ha2UzMgorCWlmICRtYWtlMzI7IHRoZW4KKwkJIyBXZSBuZWVkIHRoZSAzMi1iaXQgbGlicHNldWRvIG9uIGEgNjQtYml0IG1hY2hpbmUuCisJCSMgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHdlbGwtdGVzdGVkIG91dHNpZGUgb2YgeDg2L3g4Nl82NC4KKwkJLi9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1iaXRzPTMyIC0td2l0aG91dC1ycGF0aAorCQlvZV9ydW5tYWtlICR7TUFLRU9QVFN9IGxpYnBzZXVkbworCQkjIHByZXZlbnQgaXQgZnJvbSByZW1vdmluZyB0aGUgbGliLCBidXQgcmVtb3ZlIGV2ZXJ5dGhpbmcgZWxzZQorCQltYWtlICdMSUI9Zm9vJyAke01BS0VPUFRTfSBkaXN0Y2xlYW4gCisJZmkKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAke01BS0VPUFRTfSAnTElCPWxpYi9wc2V1ZG8vbGliJChNQVJLNjQpJyBpbnN0YWxsCit9CisKKyMgVHdvIGJlbG93IGFyZSB0aGUgc2FtZQorIyBJZiBuZWNlc3NhcnkgaW5zdGFsbCBmb3IgdGhlIGFsdGVybmF0aXZlIG1hY2hpbmUgYXJjaC4gIFRoaXMgaXMgb25seSAKKyMgbmVjZXNzYXJ5IGluIGEgbmF0aXZlIGJ1aWxkLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCW1rZGlyIC1wICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIKKwkJY3AgbGliL3BzZXVkby9saWIvbGlicHNldWRvLnNvICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIvLgorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQlta2RpciAtcCAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliCisJCWNwIGxpYi9wc2V1ZG8vbGliL2xpYnBzZXVkby5zbyAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliLy4KKwlmaQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzIwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHBzZXVkby5pbmMKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9wc2V1ZG8vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1wYXNzd2QgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1ncm91cCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0Y2QzOTUwMmY5YmQwZTczNGRlZTgwZTA4YjI4YTVmMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZjJjYWNhNWYxNTc5YTM3NmE1MDljZDgxYTgxMTU2ZmMyMDg2NTBhZGQ5ZjBhZjI3NWRhOWU5MTFmMThmMjkxIgorCitQU0VVRE9fRVhUUkFfT1BUUyA/PSAiLS1lbmFibGUtZm9yY2UtYXN5bmMgLS13aXRob3V0LXBhc3N3ZC1mYWxsYmFjayIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJIyBUaGUgZmFsbGJhY2sgZmlsZXMgc2hvdWxkIG5ldmVyIGJlIG1vZGlmaWVkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1wYXNzd2QgJHtEfSR7c3lzY29uZmRpcn0vcGFzc3dkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1ncm91cCAke0R9JHtzeXNjb25mZGlyfS9ncm91cAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjcuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTllZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBwc2V1ZG8uaW5jCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvcHNldWRvLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stZ3JvdXAgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmJkMGE0NGVhZGQ0NzEzZTkwYWQ4YzE1MmVlYTc3YWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTlmYzM5MjJmOGZlYjk3ODM5YjUwZDE0ZWIxOTg3YWZkYzhmMjJjZGNhYzkzMTE5MzIzY2NjZDVmODQ0NDY1MiIKKworUFNFVURPX0VYVFJBX09QVFMgPz0gIi0tZW5hYmxlLWZvcmNlLWFzeW5jIC0td2l0aG91dC1wYXNzd2QtZmFsbGJhY2siCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWUxMjIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgcHNldWRvLmluYworCitTUkNSRVYgPSAiZTc5NWRmNDRhOTBhNDI2YTc2Yjc5MGYxYjI3NzRmMzA0NmE4ZmMzMSIKK1BWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcHNldWRvIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0yLjctbWFuaWZlc3QuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhkODI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwpAQCAtMCwwICsxLDI4OCBAQAorCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weScgVmVyc2lvbiAyMDExMDIyMi4yIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIFZpc2l0IHRoZSBQeXRob24gZm9yIEVtYmVkZGVkIFN5c3RlbXMgU2l0ZSA9PiBodHRwOi8vd3d3LlZhbmlsbGUuZGUvcHJvamVjdHMvcHl0aG9uLnNweQorCisgCisKK1BST1ZJREVTKz0iJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICIKKworUEFDS0FHRVM9IiR7UE59LWRiZyAke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWF1ZGlvICR7UE59LWJzZGRiICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXBpbGVyICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvbnRleHRsaWIgJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1ob3RzaG90ICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlc291cmNlICR7UE59LXJvYm90cGFyc2VyICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LXpsaWIgJHtQTn0tbW9kdWxlcyIKKworU1VNTUFSWV8ke1BOfS0ydG8zPSJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIgorUkRFUEVORFNfJHtQTn0tMnRvMz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LTJ0bzM9IiR7YmluZGlyfS8ydG8zICR7bGliZGlyfS9weXRob24yLjcvbGliMnRvMyAiCisKK1NVTU1BUllfJHtQTn0tYXJncGFyc2U9IlB5dGhvbiBjb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2VyIgorUkRFUEVORFNfJHtQTn0tYXJncGFyc2U9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LWFyZ3BhcnNlPSIke2xpYmRpcn0vcHl0aG9uMi43L2FyZ3BhcnNlLiogIgorCitTVU1NQVJZXyR7UE59LWF1ZGlvPSJQeXRob24gQXVkaW8gSGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1hdWRpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWF1ZGlvPSIke2xpYmRpcn0vcHl0aG9uMi43L3dhdmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NodW5rLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zbmRoZHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL29zc2F1ZGlvZGV2LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYXVkaW9vcC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2F1ZGlvZGV2LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdW5hdWRpby4qICR7bGliZGlyfS9weXRob24yLjcvc3VuYXUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RvYWlmZi4qICIKKworU1VNTUFSWV8ke1BOfS1ic2RkYj0iUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQmVya2VsZXkgRGF0YWJhc2UiCitSREVQRU5EU18ke1BOfS1ic2RkYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWJzZGRiPSIke2xpYmRpcn0vcHl0aG9uMi43L2JzZGRiICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2JzZGRiLnNvICIKKworU1VNTUFSWV8ke1BOfS1jb2RlY3M9IlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvZGVjcz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tY29kZWNzPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvZGVjcy4qICR7bGliZGlyfS9weXRob24yLjcvZW5jb2RpbmdzICR7bGliZGlyfS9weXRob24yLjcvZ2V0dGV4dC4qICR7bGliZGlyfS9weXRob24yLjcvbG9jYWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbG9jYWxlLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2NvZGVjcyogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbXVsdGlieXRlY29kZWMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC91bmljb2RlZGF0YS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3N0cmluZ3ByZXAuKiAke2xpYmRpcn0vcHl0aG9uMi43L3hkcmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb21waWxlPSJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlPSIke2xpYmRpcn0vcHl0aG9uMi43L3B5X2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbXBpbGVhbGwuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcGlsZXI9IlB5dGhvbiBjb21waWxlciBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcGlsZXI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb21waWxlciAiCisKK1NVTU1BUllfJHtQTn0tY29tcHJlc3Npb249IlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21wcmVzc2lvbj0iJHtQTn0tY29yZSAke1BOfS16bGliIgorRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24yLjcvZ3ppcC4qICR7bGliZGlyfS9weXRob24yLjcvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYnoyLnNvICIKKworU1VNTUFSWV8ke1BOfS1jb250ZXh0bGliPSJQeXRob24gdXRpbGl0aWVzIGZvciB3aXRoLXN0YXRlbWVudGNvbnRleHRzLiIKK1JERVBFTkRTXyR7UE59LWNvbnRleHRsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb250ZXh0bGliPSIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb250ZXh0bGliLiogIgorCitTVU1NQVJZXyR7UE59LWNvcmU9IlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tY29yZT0iJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWNvcmU9IiR7bGliZGlyfS9weXRob24yLjcvX19mdXR1cmVfXy4qICR7bGliZGlyfS9weXRob24yLjcvX2FiY29sbC4qICR7bGliZGlyfS9weXRob24yLjcvYWJjLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb3B5LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb3B5X3JlZy4qICR7bGliZGlyfS9weXRob24yLjcvQ29uZmlnUGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24yLjcvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L25ldy4qICR7bGliZGlyfS9weXRob24yLjcvb3MuKiAke2xpYmRpcn0vcHl0aG9uMi43L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24yLjcvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24yLjcvc2l0ZS4qICR7bGliZGlyfS9weXRob24yLjcvc3RhdC4qICR7bGliZGlyfS9weXRob24yLjcvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9iaW5hc2NpaS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zdHJ1Y3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC90aW1lLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQveHJlYWRsaW5lcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3R5cGVzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wbGF0Zm9ybS4qICR7YmluZGlyfS9weXRob24qICR7bGliZGlyfS9weXRob24yLjcvX3dlYWtyZWZzZXQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N5c2NvbmZpZy4qICR7bGliZGlyfS9weXRob24yLjcvX3N5c2NvbmZpZ2RhdGEuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbmZpZy9NYWtlZmlsZSAke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vcHljb25maWcqLmggJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiCisKK1NVTU1BUllfJHtQTn0tY3J5cHQ9IlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jcnlwdD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNyeXB0PSIke2xpYmRpcn0vcHl0aG9uMi43L2hhc2hsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21kNS4qICR7bGliZGlyfS9weXRob24yLjcvc2hhLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jcnlwdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19oYXNobGliLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NoYTI1Ni5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zaGE1MTIuc28gIgorCitTVU1NQVJZXyR7UE59LWN0eXBlcz0iUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN0eXBlcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jdHlwZXMgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3R5cGVzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0LnNvICIKKworU1VNTUFSWV8ke1BOfS1jdXJzZXM9IlB5dGhvbiBjdXJzZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN1cnNlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN1cnNlcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jdXJzZXMgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3Vyc2VzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGF0ZXRpbWU9IlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGF0ZXRpbWU9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tZGF0ZXRpbWU9IiR7bGliZGlyfS9weXRob24yLjcvX3N0cnB0aW1lLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jYWxlbmRhci4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZGF0ZXRpbWUuc28gIgorCitTVU1NQVJZXyR7UE59LWRiPSJQeXRob24gZmlsZS1iYXNlZCBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9hbnlkYm0uKiAke2xpYmRpcn0vcHl0aG9uMi43L2R1bWJkYm0uKiAke2xpYmRpcn0vcHl0aG9uMi43L3doaWNoZGIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGVidWdnZXI9IlB5dGhvbiBkZWJ1Z2dlciIKK1JERVBFTkRTXyR7UE59LWRlYnVnZ2VyPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LXNoZWxsICR7UE59LXBwcmludCIKK0ZJTEVTXyR7UE59LWRlYnVnZ2VyPSIke2xpYmRpcn0vcHl0aG9uMi43L2JkYi4qICR7bGliZGlyfS9weXRob24yLjcvcGRiLiogIgorCitTVU1NQVJZXyR7UE59LWRldj0iUHl0aG9uIGRldmVsb3BtZW50IHBhY2thZ2UiCitSREVQRU5EU18ke1BOfS1kZXY9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kZXY9IiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyoubGEgJHtsaWJkaXJ9LyouYSAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtiYXNlX2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyoubyAke2RhdGFkaXJ9L2FjbG9jYWwgJHtkYXRhZGlyfS9wa2djb25maWcgIgorCitTVU1NQVJZXyR7UE59LWRpZmZsaWI9IlB5dGhvbiBoZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzIGJldHdlZW4gb2JqZWN0cyIKK1JERVBFTkRTXyR7UE59LWRpZmZsaWI9IiR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1kaWZmbGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2RpZmZsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGlzdHV0aWxzPSJQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb25maWcgJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXN0dXRpbHMgIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IlB5dGhvbiBkaXN0cmlidXRpb24gdXRpbGl0aWVzIChzdGF0aWMgbGlicmFyaWVzKSIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7UE59LWRpc3R1dGlscyIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7bGliZGlyfS9weXRob24yLjcvY29uZmlnL2xpYiouYSAiCisKK1NVTU1BUllfJHtQTn0tZG9jdGVzdD0iUHl0aG9uIGZyYW1ld29yayBmb3IgcnVubmluZyBleGFtcGxlcyBpbiBkb2NzdHJpbmdzIgorUkRFUEVORFNfJHtQTn0tZG9jdGVzdD0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LXJlICR7UE59LXVuaXR0ZXN0ICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIiCitGSUxFU18ke1BOfS1kb2N0ZXN0PSIke2xpYmRpcn0vcHl0aG9uMi43L2RvY3Rlc3QuKiAiCisKK1NVTU1BUllfJHtQTn0tZWxlbWVudHRyZWU9IlB5dGhvbiBlbGVtZW50cmVlIgorUkRFUEVORFNfJHtQTn0tZWxlbWVudHRyZWU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1lbGVtZW50dHJlZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fZWxlbWVudHRyZWUuc28gIgorCitTVU1NQVJZXyR7UE59LWVtYWlsPSJQeXRob24gZW1haWwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWVtYWlsPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IgorRklMRVNfJHtQTn0tZW1haWw9IiR7bGliZGlyfS9weXRob24yLjcvaW1hcGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZW1haWwgIgorCitTVU1NQVJZXyR7UE59LWZjbnRsPSJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1mY250bD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWZjbnRsPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2ZjbnRsLnNvICIKKworU1VNTUFSWV8ke1BOfS1nZGJtPSJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1nZGJtPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZ2RibT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9nZGJtLnNvICIKKworU1VNTUFSWV8ke1BOfS1ob3RzaG90PSJQeXRob24gaG90c2hvdCBwZXJmb3JtYW5jZSBwcm9maWxlciIKK1JERVBFTkRTXyR7UE59LWhvdHNob3Q9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1ob3RzaG90PSIke2xpYmRpcn0vcHl0aG9uMi43L2hvdHNob3QgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faG90c2hvdC5zbyAiCisKK1NVTU1BUllfJHtQTn0taHRtbD0iUHl0aG9uIEhUTUwgcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0taHRtbD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWh0bWw9IiR7bGliZGlyfS9weXRob24yLjcvZm9ybWF0dGVyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9odG1sZW50aXR5ZGVmcy4qICR7bGliZGlyfS9weXRob24yLjcvaHRtbGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvbWFya3VwYmFzZS4qICR7bGliZGlyfS9weXRob24yLjcvc2dtbGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvSFRNTFBhcnNlci4qICIKKworU1VNTUFSWV8ke1BOfS1pZGxlPSJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIKK1JERVBFTkRTXyR7UE59LWlkbGU9IiR7UE59LWNvcmUgJHtQTn0tdGtpbnRlciIKK0ZJTEVTXyR7UE59LWlkbGU9IiR7YmluZGlyfS9pZGxlICR7bGliZGlyfS9weXRob24yLjcvaWRsZWxpYiAiCisKK1NVTU1BUllfJHtQTn0taW1hZ2U9IlB5dGhvbiBncmFwaGljYWwgaW1hZ2UgaGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1pbWFnZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWltYWdlPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvbG9yc3lzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9pbWdoZHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2ltYWdlb3Auc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9yZ2JpbWcuc28gIgorCitTVU1NQVJZXyR7UE59LWltcG9ydGxpYj0iUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IgorUkRFUEVORFNfJHtQTn0taW1wb3J0bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1wb3J0bGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2ltcG9ydGxpYiAiCisKK1NVTU1BUllfJHtQTn0taW89IlB5dGhvbiBsb3ctbGV2ZWwgSS9PIgorUkRFUEVORFNfJHtQTn0taW89IiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS10ZXh0dXRpbHMgJHtQTn0tbmV0Y2xpZW50ICR7UE59LWNvbnRleHRsaWIiCitGSUxFU18ke1BOfS1pbz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc29ja2V0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2lvLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NzbC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3NlbGVjdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3Rlcm1pb3Muc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jU3RyaW5nSU8uc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9waXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvc29ja2V0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zc2wuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RlbXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9TdHJpbmdJTy4qICR7bGliZGlyfS9weXRob24yLjcvaW8uKiAke2xpYmRpcn0vcHl0aG9uMi43L19weWlvLiogIgorCitTVU1NQVJZXyR7UE59LWpzb249IlB5dGhvbiBKU09OIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1qc29uPSIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tanNvbj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9qc29uICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2pzb24uc28gIgorCitTVU1NQVJZXyR7UE59LWxhbmc9IlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxhbmc9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1sYW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19iaXNlY3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY29sbGVjdGlvbnMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faGVhcHEuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fd2Vha3JlZi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19mdW5jdG9vbHMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9hcnJheS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2l0ZXJ0b29scy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL29wZXJhdG9yLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcGFyc2VyLnNvICR7bGliZGlyfS9weXRob24yLjcvYXRleGl0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9iaXNlY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvZGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvZGVvcC4qICR7bGliZGlyfS9weXRob24yLjcvY29sbGVjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Rpcy4qICR7bGliZGlyfS9weXRob24yLjcvZnVuY3Rvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9oZWFwcS4qICR7bGliZGlyfS9weXRob24yLjcvaW5zcGVjdC4qICR7bGliZGlyfS9weXRob24yLjcva2V5d29yZC4qICR7bGliZGlyfS9weXRob24yLjcvb3Bjb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zeW1ib2wuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JlcHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3Rva2VuLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90b2tlbml6ZS4qICR7bGliZGlyfS9weXRob24yLjcvdHJhY2ViYWNrLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93ZWFrcmVmLiogIgorCitTVU1NQVJZXyR7UE59LWxvZ2dpbmc9IlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sb2dnaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LWxvZ2dpbmc9IiR7bGliZGlyfS9weXRob24yLjcvbG9nZ2luZyAiCisKK1NVTU1BUllfJHtQTn0tbWFpbGJveD0iUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYWlsYm94PSIke1BOfS1jb3JlICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1tYWlsYm94PSIke2xpYmRpcn0vcHl0aG9uMi43L21haWxib3guKiAiCisKK1NVTU1BUllfJHtQTn0tbWF0aD0iUHl0aG9uIG1hdGggc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1hdGg9IiR7UE59LWNvcmUgJHtQTn0tY3J5cHQiCitGSUxFU18ke1BOfS1tYXRoPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2NtYXRoLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvbWF0aC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19yYW5kb20uc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9yYW5kb20uKiAke2xpYmRpcn0vcHl0aG9uMi43L3NldHMuKiAiCisKK1NVTU1BUllfJHtQTn0tbWltZT0iUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIKK1JERVBFTkRTXyR7UE59LW1pbWU9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1taW1lPSIke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0b29scy4qICR7bGliZGlyfS9weXRob24yLjcvdXUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3F1b3ByaS4qICR7bGliZGlyfS9weXRob24yLjcvcmZjODIyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9NaW1lV3JpdGVyLiogIgorCitTVU1NQVJZXyR7UE59LW1tYXA9IlB5dGhvbiBtZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1tYXA9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1tbWFwPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL21tYXAuc28gIgorCitTVU1NQVJZXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iUHl0aG9uIG11bHRpcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1jdHlwZXMgJHtQTn0tbW1hcCIKK0ZJTEVTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbXVsdGlwcm9jZXNzaW5nLnNvICR7bGliZGlyfS9weXRob24yLjcvbXVsdGlwcm9jZXNzaW5nICIKKworU1VNTUFSWV8ke1BOfS1uZXRjbGllbnQ9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIgorUkRFUEVORFNfJHtQTn0tbmV0Y2xpZW50PSIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbmV0Y2xpZW50PSIke2xpYmRpcn0vcHl0aG9uMi43LypDb29raWUqLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9iYXNlNjQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Nvb2tpZWxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nb3BoZXJsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2htYWMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2h0dHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0eXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvbm50cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvcG9wbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zbXRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZWxuZXRsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3VybGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvdXJsbGliMi4qICR7bGliZGlyfS9weXRob24yLjcvdXJscGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3V1aWQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24yLjcvbWltZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LW5ldHNlcnZlcj0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiCitSREVQRU5EU18ke1BOfS1uZXRzZXJ2ZXI9IiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIKK0ZJTEVTXyR7UE59LW5ldHNlcnZlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jZ2kuKiAke2xpYmRpcn0vcHl0aG9uMi43LypIVFRQU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Tb2NrZXRTZXJ2ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbnVtYmVycz0iUHl0aG9uIG51bWJlciBBUElzIgorUkRFUEVORFNfJHtQTn0tbnVtYmVycz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tbnVtYmVycz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9kZWNpbWFsLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9mcmFjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L251bWJlcnMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGlja2xlPSJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGlja2xlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXBpY2tsZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9waWNrbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NoZWx2ZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY1BpY2tsZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3BpY2tsZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LXBrZ3V0aWw9IlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wa2d1dGlsPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcGtndXRpbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wa2d1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXBwcmludD0iUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHByaW50PSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tcHByaW50PSIke2xpYmRpcn0vcHl0aG9uMi43L3BwcmludC4qICIKKworU1VNTUFSWV8ke1BOfS1wcm9maWxlPSJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcm9maWxlPSIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LXByb2ZpbGU9IiR7bGliZGlyfS9weXRob24yLjcvcHJvZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvcHN0YXRzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jUHJvZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2xzcHJvZi5zbyAiCisKK1NVTU1BUllfJHtQTn0tcHlkb2M9IlB5dGhvbiBpbnRlcmFjdGl2ZSBoZWxwIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1weWRvYz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXN0cmluZ29sZCAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXB5ZG9jPSIke2JpbmRpcn0vcHlkb2MgJHtsaWJkaXJ9L3B5dGhvbjIuNy9weWRvYy4qICR7bGliZGlyfS9weXRob24yLjcvcHlkb2NfZGF0YSAiCisKK1NVTU1BUllfJHtQTn0tcmU9IlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIKK1JERVBFTkRTXyR7UE59LXJlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmU9IiR7bGliZGlyfS9weXRob24yLjcvcmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZS4qICR7bGliZGlyfS9weXRob24yLjcvc3JlX2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZV9jb25zdGFudHMqICR7bGliZGlyfS9weXRob24yLjcvc3JlX3BhcnNlLiogIgorCitTVU1NQVJZXyR7UE59LXJlYWRsaW5lPSJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXJlYWRsaW5lPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVhZGxpbmU9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcmVhZGxpbmUuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9ybGNvbXBsZXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1yZXNvdXJjZT0iUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tcmVzb3VyY2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXNvdXJjZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9yZXNvdXJjZS5zbyAiCisKK1NVTU1BUllfJHtQTn0tcm9ib3RwYXJzZXI9IlB5dGhvbiByb2JvdHMudHh0IHBhcnNlciIKK1JERVBFTkRTXyR7UE59LXJvYm90cGFyc2VyPSIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCIKK0ZJTEVTXyR7UE59LXJvYm90cGFyc2VyPSIke2xpYmRpcn0vcHl0aG9uMi43L3JvYm90cGFyc2VyLiogIgorCitTVU1NQVJZXyR7UE59LXNoZWxsPSJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IgorUkRFUEVORFNfJHtQTn0tc2hlbGw9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zaGVsbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jbWQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbW1hbmRzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXJjYWNoZS4qICR7bGliZGlyfS9weXRob24yLjcvZm5tYXRjaC4qICR7bGliZGlyfS9weXRob24yLjcvZ2xvYi4qICR7bGliZGlyfS9weXRob24yLjcvcG9wZW4yLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaGxleC4qICR7bGliZGlyfS9weXRob24yLjcvc2h1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXNtdHBkPSJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIKK1JERVBFTkRTXyR7UE59LXNtdHBkPSIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tc210cGQ9IiR7YmluZGlyfS9zbXRwZC4qICR7bGliZGlyfS9weXRob24yLjcvc210cGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTM9IiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmcgJHtQTn0temxpYiIKK0ZJTEVTXyR7UE59LXNxbGl0ZTM9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NxbGl0ZTMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcWxpdGUzL2RiYXBpMi4qICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9fX2luaXRfXy4qICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9kdW1wLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTMtdGVzdHM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiCitGSUxFU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tc3RyaW5nb2xkPSJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIgorUkRFUEVORFNfJHtQTn0tc3RyaW5nb2xkPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc3RyaW5nb2xkPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3N0cm9wLnNvICR7bGliZGlyfS9weXRob24yLjcvc3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdHJpbmdvbGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3VicHJvY2Vzcz0iUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXN1YnByb2Nlc3M9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIgorRklMRVNfJHtQTn0tc3VicHJvY2Vzcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdWJwcm9jZXNzLiogIgorCitTVU1NQVJZXyR7UE59LXN5c2xvZz0iUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1zeXNsb2c9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1zeXNsb2c9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvc3lzbG9nLnNvICIKKworU1VNTUFSWV8ke1BOfS10ZXJtaW5hbD0iUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXJtaW5hbD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LXRlcm1pbmFsPSIke2xpYmRpcn0vcHl0aG9uMi43L3B0eS4qICR7bGliZGlyfS9weXRob24yLjcvdHR5LiogIgorCitTVU1NQVJZXyR7UE59LXRlc3RzPSJQeXRob24gdGVzdHMiCitSREVQRU5EU18ke1BOfS10ZXN0cz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMi43L3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXRleHR1dGlscz0iUHl0aG9uIG9wdGlvbiBwYXJzaW5nLCB0ZXh0IHdyYXBwaW5nIGFuZCBDU1Ygc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRleHR1dGlscz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQiCitGSUxFU18ke1BOfS10ZXh0dXRpbHM9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2Nzdi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2Nzdi4qICR7bGliZGlyfS9weXRob24yLjcvb3B0cGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RleHR3cmFwLiogIgorCitTVU1NQVJZXyR7UE59LXRocmVhZGluZz0iUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGhyZWFkaW5nPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS10aHJlYWRpbmc9IiR7bGliZGlyfS9weXRob24yLjcvX3RocmVhZGluZ19sb2NhbC4qICR7bGliZGlyfS9weXRob24yLjcvZHVtbXlfdGhyZWFkLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kdW1teV90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L211dGV4LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L1F1ZXVlLiogIgorCitTVU1NQVJZXyR7UE59LXRraW50ZXI9IlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiCitSREVQRU5EU18ke1BOfS10a2ludGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGtpbnRlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fdGtpbnRlci5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi10ayAiCisKK1NVTU1BUllfJHtQTn0tdW5pdHRlc3Q9IlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIgorUkRFUEVORFNfJHtQTn0tdW5pdHRlc3Q9IiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiCitGSUxFU18ke1BOfS11bml0dGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy91bml0dGVzdC8gIgorCitTVU1NQVJZXyR7UE59LXVuaXhhZG1pbj0iUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXVuaXhhZG1pbj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXVuaXhhZG1pbj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9uaXMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9ncnAuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9wd2Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZXRwYXNzLiogIgorCitTVU1NQVJZXyR7UE59LXhtbD0iUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1sPSIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIgorRklMRVNfJHtQTn0teG1sPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3B5ZXhwYXQuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWwgJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWxsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0teG1scnBjPSJQeXRob24gWE1MLVJQQyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1scnBjPSIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LXhtbHJwYz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWxycGNsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L1NpbXBsZVhNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24yLjcvRG9jWE1MUlBDU2VydmVyLiogIgorCitTVU1NQVJZXyR7UE59LXpsaWI9IlB5dGhvbiB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS16bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0temxpYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC96bGliLnNvICIKKworU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGVzPSIke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWF1ZGlvICR7UE59LWJzZGRiICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXBpbGVyICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvbnRleHRsaWIgJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1ob3RzaG90ICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlc291cmNlICR7UE59LXJvYm90cGFyc2VyICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LXpsaWIgICIKK0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0zLjQtbWFuaWZlc3QuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2UxNDkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYwpAQCAtMCwwICsxLDI2OCBAQAorCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNC5weScgVmVyc2lvbiAyMDE0MDEzMSAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKworIAorCitQUk9WSURFUys9IiR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgIgorCitQQUNLQUdFUz0iJHtQTn0tZGJnICR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0tbW9kdWxlcyIKKworU1VNTUFSWV8ke1BOfS0ydG8zPSJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIgorUkRFUEVORFNfJHtQTn0tMnRvMz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LTJ0bzM9IiR7bGliZGlyfS9weXRob24zLjQvbGliMnRvMyAiCisKK1NVTU1BUllfJHtQTn0tYXN5bmNpbz0iUHl0aG9uIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzIgorUkRFUEVORFNfJHtQTn0tYXN5bmNpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWFzeW5jaW89IiR7bGliZGlyfS9weXRob24zLjQvYXN5bmNpbyAiCisKK1NVTU1BUllfJHtQTn0tYXVkaW89IlB5dGhvbiBBdWRpbyBIYW5kbGluZyIKK1JERVBFTkRTXyR7UE59LWF1ZGlvPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tYXVkaW89IiR7bGliZGlyfS9weXRob24zLjQvd2F2ZS4qICR7bGliZGlyfS9weXRob24zLjQvY2h1bmsuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NuZGhkci4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2F1ZGlvb3AuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2F1ZGlvZGV2LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdW5hdWRpby4qICR7bGliZGlyfS9weXRob24zLjQvc3VuYXUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RvYWlmZi4qICIKKworU1VNTUFSWV8ke1BOfS1jb2RlY3M9IlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvZGVjcz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tY29kZWNzPSIke2xpYmRpcn0vcHl0aG9uMy40L2NvZGVjcy4qICR7bGliZGlyfS9weXRob24zLjQvZW5jb2RpbmdzICR7bGliZGlyfS9weXRob24zLjQvZ2V0dGV4dC4qICR7bGliZGlyfS9weXRob24zLjQvbG9jYWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbG9jYWxlLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY29kZWNzKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvdW5pY29kZWRhdGEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3N0cmluZ3ByZXAuKiAke2xpYmRpcn0vcHl0aG9uMy40L3hkcmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb21waWxlPSJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlPSIke2xpYmRpcn0vcHl0aG9uMy40L3B5X2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbXBpbGVhbGwuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcHJlc3Npb249IlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21wcmVzc2lvbj0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1jb21wcmVzc2lvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9nemlwLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC96aXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90YXJmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9iejIuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY29yZT0iUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1jb3JlPSIke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXJlcHJsaWIgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LW1hdGgiCitGSUxFU18ke1BOfS1jb3JlPSIke2xpYmRpcn0vcHl0aG9uMy40L19fZnV0dXJlX18uKiAke2xpYmRpcn0vcHl0aG9uMy40L19hYmNvbGwuKiAke2xpYmRpcn0vcHl0aG9uMy40L2FiYy4qICR7bGliZGlyfS9weXRob24zLjQvY29weS4qICR7bGliZGlyfS9weXRob24zLjQvY29weXJlZy4qICR7bGliZGlyfS9weXRob24zLjQvQ29uZmlnUGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24zLjQvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L25ldy4qICR7bGliZGlyfS9weXRob24zLjQvb3MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24zLjQvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24zLjQvc2l0ZS4qICR7bGliZGlyfS9weXRob24zLjQvc3RhdC4qICR7bGliZGlyfS9weXRob24zLjQvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9iaW5hc2NpaS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3N0cnVjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvdGltZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQveHJlYWRsaW5lcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvdHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fd2Vha3JlZnNldC4qICR7bGliZGlyfS9weXRob24zLjQvc3lzY29uZmlnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fc3lzY29uZmlnZGF0YS4qICR7bGliZGlyfS9weXRob24zLjQvY29uZmlnL01ha2VmaWxlICR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZyouaCAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb2xsZWN0aW9ucyAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fY29sbGVjdGlvbnNfYWJjLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3NpdGVidWlsdGlucy4qICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIgorCitTVU1NQVJZXyR7UE59LWNyeXB0PSJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3J5cHQ9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jcnlwdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9oYXNobGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9tZDUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NoYS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY3J5cHQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19oYXNobGliLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc2hhMjU2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc2hhNTEyLiouc28gIgorCitTVU1NQVJZXyR7UE59LWN0eXBlcz0iUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN0eXBlcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jdHlwZXMgJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3R5cGVzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3R5cGVzX3Rlc3QuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY3Vyc2VzPSJQeXRob24gY3Vyc2VzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdXJzZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdXJzZXM9IiR7bGliZGlyfS9weXRob24zLjQvY3Vyc2VzICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N1cnNlcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYXRldGltZT0iUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1kYXRldGltZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1kYXRldGltZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9fc3RycHRpbWUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NhbGVuZGFyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9kYXRldGltZS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYj0iUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRiPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGI9IiR7bGliZGlyfS9weXRob24zLjQvYW55ZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kdW1iZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93aGljaGRiLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kYm0gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZGJtLiouc28gIgorCitTVU1NQVJZXyR7UE59LWRlYnVnZ2VyPSJQeXRob24gZGVidWdnZXIiCitSREVQRU5EU18ke1BOfS1kZWJ1Z2dlcj0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXN0cmluZ29sZCAke1BOfS1zaGVsbCAke1BOfS1wcHJpbnQiCitGSUxFU18ke1BOfS1kZWJ1Z2dlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9iZGIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BkYi4qICIKKworU1VNTUFSWV8ke1BOfS1kZXY9IlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIgorUkRFUEVORFNfJHtQTn0tZGV2PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGV2PSIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLmEgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7YmFzZV9saWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsICR7ZGF0YWRpcn0vcGtnY29uZmlnICIKKworU1VNTUFSWV8ke1BOfS1kaWZmbGliPSJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiCitSREVQRU5EU18ke1BOfS1kaWZmbGliPSIke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tZGlmZmxpYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaWZmbGliLiogIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscz0iUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kaXN0dXRpbHM9IiR7bGliZGlyfS9weXRob24zLjQvY29uZmlnICR7bGliZGlyfS9weXRob24zLjQvZGlzdHV0aWxzICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSJQeXRob24gZGlzdHJpYnV0aW9uIHV0aWxpdGllcyAoc3RhdGljIGxpYnJhcmllcykiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke1BOfS1kaXN0dXRpbHMiCitGSUxFU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke2xpYmRpcn0vcHl0aG9uMy40L2NvbmZpZy9saWIqLmEgIgorCitTVU1NQVJZXyR7UE59LWRvY3Rlc3Q9IlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIKK1JERVBFTkRTXyR7UE59LWRvY3Rlc3Q9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1yZSAke1BOfS11bml0dGVzdCAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliIgorRklMRVNfJHtQTn0tZG9jdGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kb2N0ZXN0LiogIgorCitTVU1NQVJZXyR7UE59LWVsZW1lbnR0cmVlPSJQeXRob24gZWxlbWVudHJlZSIKK1JERVBFTkRTXyR7UE59LWVsZW1lbnR0cmVlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZWxlbWVudHRyZWU9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLiouc28gIgorCitTVU1NQVJZXyR7UE59LWVtYWlsPSJQeXRob24gZW1haWwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWVtYWlsPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IgorRklMRVNfJHtQTn0tZW1haWw9IiR7bGliZGlyfS9weXRob24zLjQvaW1hcGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZW1haWwgIgorCitTVU1NQVJZXyR7UE59LWZjbnRsPSJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1mY250bD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWZjbnRsPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2ZjbnRsLiouc28gIgorCitTVU1NQVJZXyR7UE59LWdkYm09IlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWdkYm09IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1nZGJtPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19nZGJtLiouc28gIgorCitTVU1NQVJZXyR7UE59LWh0bWw9IlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWh0bWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1odG1sPSIke2xpYmRpcn0vcHl0aG9uMy40L2Zvcm1hdHRlci4qICR7bGliZGlyfS9weXRob24zLjQvaHRtbGVudGl0eWRlZnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0bWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21hcmt1cGJhc2UuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NnbWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L0hUTUxQYXJzZXIuKiAiCisKK1NVTU1BUllfJHtQTn0taWRsZT0iUHl0aG9uIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiCitSREVQRU5EU18ke1BOfS1pZGxlPSIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiCitGSUxFU18ke1BOfS1pZGxlPSIke2JpbmRpcn0vaWRsZSAke2xpYmRpcn0vcHl0aG9uMy40L2lkbGVsaWIgIgorCitTVU1NQVJZXyR7UE59LWltYWdlPSJQeXRob24gZ3JhcGhpY2FsIGltYWdlIGhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0taW1hZ2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbWFnZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2xvcnN5cy4qICR7bGliZGlyfS9weXRob24zLjQvaW1naGRyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9pbWFnZW9wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9yZ2JpbWcuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0taW1wb3J0bGliPSJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1pbXBvcnRsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbXBvcnRsaWI9IiR7bGliZGlyfS9weXRob24zLjQvaW1wb3J0bGliICIKKworU1VNTUFSWV8ke1BOfS1pbz0iUHl0aG9uIGxvdy1sZXZlbCBJL08iCitSREVQRU5EU18ke1BOfS1pbz0iJHtQTn0tY29yZSAke1BOfS1tYXRoIgorRklMRVNfJHtQTn0taW89IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NvY2tldC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2lvLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc3NsLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zZWxlY3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3Rlcm1pb3MuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NTdHJpbmdJTy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcGlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NvY2tldC4qICR7bGliZGlyfS9weXRob24zLjQvc3NsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZW1wZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvU3RyaW5nSU8uKiAke2xpYmRpcn0vcHl0aG9uMy40L2lvLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fcHlpby4qICIKKworU1VNTUFSWV8ke1BOfS1qc29uPSJQeXRob24gSlNPTiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tanNvbj0iJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXJlIgorRklMRVNfJHtQTn0tanNvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9qc29uICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2pzb24uKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbGFuZz0iUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbGFuZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWxhbmc9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9faGVhcHEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL193ZWFrcmVmLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZnVuY3Rvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9hcnJheS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvaXRlcnRvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9vcGVyYXRvci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcGFyc2VyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9hdGV4aXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Jpc2VjdC4qICR7bGliZGlyfS9weXRob24zLjQvY29kZS4qICR7bGliZGlyfS9weXRob24zLjQvY29kZW9wLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2xsZWN0aW9ucy4qICR7bGliZGlyfS9weXRob24zLjQvX2NvbGxlY3Rpb25zX2FiYy4qICR7bGliZGlyfS9weXRob24zLjQvZGlzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mdW5jdG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2hlYXBxLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9pbnNwZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9rZXl3b3JkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9vcGNvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N5bWJvbC4qICR7bGliZGlyfS9weXRob24zLjQvcmVwci4qICR7bGliZGlyfS9weXRob24zLjQvdG9rZW4uKiAke2xpYmRpcn0vcHl0aG9uMy40L3Rva2VuaXplLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90cmFjZWJhY2suKiAke2xpYmRpcn0vcHl0aG9uMy40L3dlYWtyZWYuKiAiCisKK1NVTU1BUllfJHtQTn0tbG9nZ2luZz0iUHl0aG9uIGxvZ2dpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxvZ2dpbmc9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tbG9nZ2luZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9sb2dnaW5nICIKKworU1VNTUFSWV8ke1BOfS1tYWlsYm94PSJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1haWxib3g9IiR7UE59LWNvcmUgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW1haWxib3g9IiR7bGliZGlyfS9weXRob24zLjQvbWFpbGJveC4qICIKKworU1VNTUFSWV8ke1BOfS1tYXRoPSJQeXRob24gbWF0aCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbWF0aD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LW1hdGg9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19yYW5kb20uKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3JhbmRvbS4qICR7bGliZGlyfS9weXRob24zLjQvc2V0cy4qICIKKworU1VNTUFSWV8ke1BOfS1taW1lPSJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIgorUkRFUEVORFNfJHtQTn0tbWltZT0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1pbWU9IiR7bGliZGlyfS9weXRob24zLjQvbWltZXRvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC91dS4qICR7bGliZGlyfS9weXRob24zLjQvcXVvcHJpLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMy40L01pbWVXcml0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbW1hcD0iUHl0aG9uIG1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbW1hcD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1tYXA9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvbW1hcC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiCitGSUxFU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX211bHRpcHJvY2Vzc2luZy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbXVsdGlwcm9jZXNzaW5nICIKKworU1VNTUFSWV8ke1BOfS1uZXRjbGllbnQ9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIgorUkRFUEVORFNfJHtQTn0tbmV0Y2xpZW50PSIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbmV0Y2xpZW50PSIke2xpYmRpcn0vcHl0aG9uMy40LypDb29raWUqLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9iYXNlNjQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Nvb2tpZWxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nb3BoZXJsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2htYWMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0dHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21pbWV0eXBlcy4qICR7bGliZGlyfS9weXRob24zLjQvbm50cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvcG9wbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zbXRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZWxuZXRsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3VybGxpYiAke2xpYmRpcn0vcHl0aG9uMy40L3V1aWQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24zLjQvbWltZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LW5ldHNlcnZlcj0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiCitSREVQRU5EU18ke1BOfS1uZXRzZXJ2ZXI9IiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIKK0ZJTEVTXyR7UE59LW5ldHNlcnZlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jZ2kuKiAke2xpYmRpcn0vcHl0aG9uMy40LypIVFRQU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Tb2NrZXRTZXJ2ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbnVtYmVycz0iUHl0aG9uIG51bWJlciBBUElzIgorUkRFUEVORFNfJHtQTn0tbnVtYmVycz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tbnVtYmVycz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kZWNpbWFsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mcmFjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L251bWJlcnMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGlja2xlPSJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGlja2xlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXBpY2tsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9waWNrbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NoZWx2ZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY1BpY2tsZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcGlja2xldG9vbHMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGtndXRpbD0iUHl0aG9uIHBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHkgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBrZ3V0aWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1wa2d1dGlsPSIke2xpYmRpcn0vcHl0aG9uMy40L3BrZ3V0aWwuKiAiCisKK1NVTU1BUllfJHtQTn0tcHByaW50PSJQeXRob24gcHJldHR5LXByaW50IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcHJpbnQ9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1wcHJpbnQ9IiR7bGliZGlyfS9weXRob24zLjQvcHByaW50LiogIgorCitTVU1NQVJZXyR7UE59LXByb2ZpbGU9IlB5dGhvbiBiYXNpYyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXByb2ZpbGU9IiR7UE59LWNvcmUgJHtQTn0tdGV4dHV0aWxzIgorRklMRVNfJHtQTn0tcHJvZmlsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wc3RhdHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NQcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbHNwcm9mLiouc28gIgorCitTVU1NQVJZXyR7UE59LXB5ZG9jPSJQeXRob24gaW50ZXJhY3RpdmUgaGVscCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHlkb2M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1weWRvYz0iJHtiaW5kaXJ9L3B5ZG9jICR7bGliZGlyfS9weXRob24zLjQvcHlkb2MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3B5ZG9jX2RhdGEgIgorCitTVU1NQVJZXyR7UE59LXJlPSJQeXRob24gUmVndWxhciBFeHByZXNzaW9uIEFQSXMiCitSREVQRU5EU18ke1BOfS1yZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlPSIke2xpYmRpcn0vcHl0aG9uMy40L3JlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmVfY29uc3RhbnRzKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZV9wYXJzZS4qICIKKworU1VNTUFSWV8ke1BOfS1yZWFkbGluZT0iUHl0aG9uIHJlYWRsaW5lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1yZWFkbGluZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlYWRsaW5lPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3JlYWRsaW5lLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9ybGNvbXBsZXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1yZXBybGliPSJQeXRob24gYWx0ZXJuYXRlIHJlcHIoKSBpbXBsZW1lbnRhdGlvbiIKK1JERVBFTkRTXyR7UE59LXJlcHJsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXBybGliPSIke2xpYmRpcn0vcHl0aG9uMy40L3JlcHJsaWIucHkgIgorCitTVU1NQVJZXyR7UE59LXJlc291cmNlPSJQeXRob24gcmVzb3VyY2UgY29udHJvbCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1yZXNvdXJjZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlc291cmNlPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3Jlc291cmNlLiouc28gIgorCitTVU1NQVJZXyR7UE59LXNoZWxsPSJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IgorUkRFUEVORFNfJHtQTn0tc2hlbGw9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zaGVsbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jbWQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbW1hbmRzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaXJjYWNoZS4qICR7bGliZGlyfS9weXRob24zLjQvZm5tYXRjaC4qICR7bGliZGlyfS9weXRob24zLjQvZ2xvYi4qICR7bGliZGlyfS9weXRob24zLjQvcG9wZW4yLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaGxleC4qICR7bGliZGlyfS9weXRob24zLjQvc2h1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXNtdHBkPSJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIKK1JERVBFTkRTXyR7UE59LXNtdHBkPSIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tc210cGQ9IiR7YmluZGlyfS9zbXRwZC4qICR7bGliZGlyfS9weXRob24zLjQvc210cGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTM9IiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmciCitGSUxFU18ke1BOfS1zcWxpdGUzPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zcWxpdGUzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcWxpdGUzL2RiYXBpMi4qICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9fX2luaXRfXy4qICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9kdW1wLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTMtdGVzdHM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiCitGSUxFU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tc3RyaW5nb2xkPSJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIgorUkRFUEVORFNfJHtQTn0tc3RyaW5nb2xkPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc3RyaW5nb2xkPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3N0cm9wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N0cmluZ29sZC4qICIKKworU1VNTUFSWV8ke1BOfS1zdWJwcm9jZXNzPSJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tc3VicHJvY2Vzcz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUiCitGSUxFU18ke1BOfS1zdWJwcm9jZXNzPSIke2xpYmRpcn0vcHl0aG9uMy40L3N1YnByb2Nlc3MuKiAiCisKK1NVTU1BUllfJHtQTn0tc3lzbG9nPSJQeXRob24gc3lzbG9nIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LXN5c2xvZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXN5c2xvZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zeXNsb2cuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tdGVybWluYWw9IlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGVybWluYWw9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS10ZXJtaW5hbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wdHkuKiAke2xpYmRpcn0vcHl0aG9uMy40L3R0eS4qICIKKworU1VNTUFSWV8ke1BOfS10ZXN0cz0iUHl0aG9uIHRlc3RzIgorUkRFUEVORFNfJHtQTn0tdGVzdHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZXN0ICIKKworU1VNTUFSWV8ke1BOfS10ZXh0dXRpbHM9IlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXh0dXRpbHM9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tdGV4dHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jc3YuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2Nzdi4qICR7bGliZGlyfS9weXRob24zLjQvb3B0cGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RleHR3cmFwLiogIgorCitTVU1NQVJZXyR7UE59LXRocmVhZGluZz0iUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGhyZWFkaW5nPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS10aHJlYWRpbmc9IiR7bGliZGlyfS9weXRob24zLjQvX3RocmVhZGluZ19sb2NhbC4qICR7bGliZGlyfS9weXRob24zLjQvZHVtbXlfdGhyZWFkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kdW1teV90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L211dGV4LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L1F1ZXVlLiogIgorCitTVU1NQVJZXyR7UE59LXRraW50ZXI9IlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiCitSREVQRU5EU18ke1BOfS10a2ludGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGtpbnRlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fdGtpbnRlci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLXRrICR7bGliZGlyfS9weXRob24zLjQvdGtpbnRlciAiCisKK1NVTU1BUllfJHtQTn0tdW5pdHRlc3Q9IlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIgorUkRFUEVORFNfJHtQTn0tdW5pdHRlc3Q9IiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiCitGSUxFU18ke1BOfS11bml0dGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC91bml0dGVzdC8gIgorCitTVU1NQVJZXyR7UE59LXVuaXhhZG1pbj0iUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXVuaXhhZG1pbj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXVuaXhhZG1pbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9uaXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2dycC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcHdkLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZXRwYXNzLiogIgorCitTVU1NQVJZXyR7UE59LXhtbD0iUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1sPSIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIgorRklMRVNfJHtQTn0teG1sPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3B5ZXhwYXQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3htbCAke2xpYmRpcn0vcHl0aG9uMy40L3htbGxpYi4qICIKKworU1VNTUFSWV8ke1BOfS14bWxycGM9IlB5dGhvbiBYTUwtUlBDIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS14bWxycGM9IiR7UE59LWNvcmUgJHtQTn0teG1sICR7UE59LW5ldHNlcnZlciAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0teG1scnBjPSIke2xpYmRpcn0vcHl0aG9uMy40L3htbHJwY2xpYi4qICR7bGliZGlyfS9weXRob24zLjQvU2ltcGxlWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Eb2NYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3htbHJwYyAiCisKK1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAgIgorQUxMT1dfRU1QVFlfJHtQTn0tbW9kdWxlcyA9ICIxIgorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkMGIwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGZyYW1ld29yayB0byBwcm9jZXNzIGludGVyZGVwZW5kZW50IHRhc2tzIGluIGEgcG9vbCBvZiB3b3JrZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvYXN5bmMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUEtHLUlORk87YmVnaW5saW5lPTg7ZW5kbGluZT04O21kNT04OGRmOGU3OGI5ZWRmZDc0NDk1Mzg2MjE3OWYyZDE0ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9hL2FzeW5jL2FzeW5jLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YjA2YjU5OTdkZTIxNTRmM2JjMDI3M2Y4MGJjZWY2YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzY4OTRkODc2ZTQ1ODc4ZmFhZTQ5M2IwY2Y2MWQwZTI4ZWM0MTczMzQ0NDhhYzBhNmVhMjIyOWQ4MzQzMDUxIgorCitTID0gIiR7V09SS0RJUn0vYXN5bmMtJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tdGhyZWFkaW5nIHB5dGhvbi1sYW5nIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTRkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgREJ1cyBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gc3lzdGVtIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9Tb2Z0d2FyZS9kYnVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wYjgzMDQ3Y2U5ZTk0OGI2N2MwZmFjYzVmMjMzNDc2YSIKK0RFUEVORFMgPSAiZXhwYXQgZGJ1cyBkYnVzLWdsaWIgdmlydHVhbC9saWJpbnRsIHB5dGhvbi1weXJleC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMtcHl0aG9uL2RidXMtcHl0aG9uLSR7UFZ9LnRhci5neiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDljZDJkMWEwNTdjYzQzMmNlOTQ0ZGUzZmMwNmJmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMTJjNmM4YjJiZjNhOTMwMmY3NTE2Njk1MmNiZTQxZDZiMzhjMzQ0MWJiYzY3NjdkYmQ0OTg5NDIzMTZjNmRmIgorUyA9ICIke1dPUktESVJ9L2RidXMtcHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscy1iYXNlIGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/PSAiIgorUEFDS0FHRUNPTkZJR1tkb2NzXSA9ICItLWVuYWJsZS1odG1sLWRvY3MsLS1kaXNhYmxlLWh0bWwtZG9jcyxweXRob24tZG9jdXRpbHMtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1thcGktZG9jc10gPSAiLS1lbmFibGUtYXBpLWRvY3MsLS1kaXNhYmxlLWFwaS1kb2NzLHB5dGhvbi1kb2N1dGlscy1uYXRpdmUgcHl0aG9uLWVweWRvYy1uYXRpdmUiCisKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorCitSREVQRU5EU18ke1BOfSA9ICJweXRob24taW8gcHl0aG9uLWxvZ2dpbmcgcHl0aG9uLXN0cmluZ29sZCBweXRob24tdGhyZWFkaW5nIHB5dGhvbi14bWwiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRvY3V0aWxzXzAuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZGE4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiVGV4dCBwcm9jZXNzaW5nIHN5c3RlbSBmb3IgZG9jdW1lbnRhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGICYgQlNELTItQ2xhdXNlICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9YTcyMmZiZGMyMDM0N2RiN2I2OTIyMzU5NGRkNTQ1NzQiCisKK0RFUEVORFMgPSAicHl0aG9uIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2N1dGlscy9kb2N1dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNDYyMjI2M2I2MmM1Yzc3MWMwMzUwMmFmYTMxNTc3NjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzdkYjcxNzgxMGFiNjk2NWY2NmM4Y2YwMzk4YTk4YzlkOGRmOTgyZGEzOWI0Y2Q3ZjE2MjkxMWViODk1OTZmYSIKKworUyA9ICIke1dPUktESVJ9L2RvY3V0aWxzLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OGQ3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMS4wLjEuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJQeXRob24gbGlicmFyeSB1c2VkIHRvIGludGVyYWN0IHdpdGggR2l0IHJlcG9zaXRvcmllcyIKK0RFU0NSSVBUSU9OID0gIkdpdFB5dGhvbiBwcm92aWRlcyBvYmplY3QgbW9kZWwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIFwKK2EgZ2l0IHJlcG9zaXRvcnkuIEFjY2VzcyByZXBvc2l0b3J5IGluZm9ybWF0aW9uIGNvbnZlbmllbnRseSwgYWx0ZXIgdGhlIFwKK2luZGV4IGRpcmVjdGx5LCBoYW5kbGUgcmVtb3Rlcywgb3IgZ28gZG93biB0byBsb3ctbGV2ZWwgb2JqZWN0IGRhdGFiYXNlIFwKK2FjY2VzcyB3aXRoIGJpZy1maWxlcyBzdXBwb3J0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04YjhkMjZjMzdjMWQ1YTA0ZjliMDE4NmVkYmViYzE4MyIKK0RFUEVORFMgPSAicHl0aG9uLWdpdGRiIgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL0cvR2l0UHl0aG9uL0dpdFB5dGhvbi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjU5NjQ0YjQyYzQxZTVlNTE3MGMwY2Q4M2VkNjQyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Yzg4YzE3YmJjYWUyYTQ0NWZmNjQwMjRlZjEzNTI2MjI0ZjcwZTM1ZTM4YzMzNDE2YmU1Y2ViNTZjYTdmNzYwIgorCitTID0gIiR7V09SS0RJUn0vR2l0UHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1naXRkYiBweXRob24tbGFuZyBweXRob24taW8gcHl0aG9uLXNoZWxsIHB5dGhvbi1tYXRoIHB5dGhvbi1yZSBweXRob24tc3VicHJvY2VzcyBweXRob24tc3RyaW5nb2xkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwODNiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQSBwdXJlLVB5dGhvbiBnaXQgb2JqZWN0IGRhdGFiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvZ2l0ZGIiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTllNWVjYjEzMzM5YTkzNmVlZGY4MzI4MmVhZjQ1MjgiCitERVBFTkRTID0gInB5dGhvbi1hc3luYyBweXRob24tc21tYXAiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL2cvZ2l0ZGIvZ2l0ZGItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDRlNDM2NmI4YmRmZDMwNmIwNzVjM2E1MmM5NmFlMWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTNlYmJjMjdiZTAzNWEyZTg3NGVkOTA0ZGY1MTZlMzVmNGEyOWE3NzhhNzY0Mzg1ZGUwOWRlOWUwZjEzOTY1OCIKKworUyA9ICIke1dPUktESVJ9L2dpdGRiLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNtbWFwIHB5dGhvbi1hc3luYyBweXRob24tbW1hcCBweXRob24tbGFuZyBweXRob24temxpYiBweXRob24taW8gcHl0aG9uLXNoZWxsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3NTMwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gMDdkNGYwOTVhOWUyMmFlNjc2YThkNjgwNzMxMDExMzFlNjUwMTJkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUdWUsIDE1IE5vdiAyMDExIDEzOjE2OjU0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHB5dGhvbiBpbWFnaW5nIHNldHVwLnB5OiBmb3JjZSBwYXRocyBmb3IgemxpYiwgZnJlZXR5cGUgYW5kIGpwZWcgYW5kIGRvbid0IGFkZCBob3N0IHBhdGhzCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBzZXR1cC5weSB8ICAgMTQgKysrLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA1ZDRkNTNhLi5iMWEyMmVjIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMzQsMTAgKzM0LDEwIEBAIGRlZiBsaWJpbmNsdWRlKHJvb3QpOgorICMgVElGRl9ST09UID0gbGliaW5jbHVkZSgiL29wdC90aWZmIikKKyAKKyBUQ0xfUk9PVCA9IE5vbmUKKy1KUEVHX1JPT1QgPSBOb25lCistWkxJQl9ST09UID0gTm9uZQorK0pQRUdfUk9PVCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10KKytaTElCX1JPT1QgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddCisgVElGRl9ST09UID0gTm9uZQorLUZSRUVUWVBFX1JPT1QgPSBOb25lCisrRlJFRVRZUEVfUk9PVCA9ICBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddCisgTENNU19ST09UID0gTm9uZQorIAorICMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKK0BAIC0xNDcsNyArMTQ3LDYgQEAgY2xhc3MgcGlsX2J1aWxkX2V4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL29wdC9sb2NhbC9saWIiKQorICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL29wdC9sb2NhbC9pbmNsdWRlIikKKyAKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9sb2NhbC9saWIiKQorICAgICAgICAgIyBGSVhNRTogY2hlY2sgL29wdC9zdHVmZiBkaXJlY3RvcmllcyBoZXJlPworIAorICAgICAgICAgcHJlZml4ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJwcmVmaXgiKQorQEAgLTIwNywxMyArMjA2LDYgQEAgY2xhc3MgcGlsX2J1aWxkX2V4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih0Y2xfZGlyLCAidGsuaCIpKToKKyAgICAgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsIHRjbF9kaXIpCisgCistICAgICAgICAjIHN0YW5kYXJkIGxvY2F0aW9ucworLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xvY2FsL2xpYiIpCistICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi91c3IvbG9jYWwvaW5jbHVkZSIpCistCistICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbGliIikKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL3Vzci9pbmNsdWRlIikKKy0KKyAgICAgICAgICMKKyAgICAgICAgICMgaW5zZXJ0IG5ldyBkaXJzICpiZWZvcmUqIGRlZmF1bHQgbGlicywgdG8gYXZvaWQgY29uZmxpY3RzCisgICAgICAgICAjIGJldHdlZW4gUHl0aG9uIFBZRCBzdHViIGxpYnMgYW5kIHJlYWwgbGlicmFyaWVzCistLSAKKzEuNy4yLjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorQXQgbGVhc3QgbGNtcyB3YXNuJ3QgZGV0ZXJtaW5pc3RpY2x5IGRldGVjdGVkIGZyb20gc3lzcm9vdC4KKworVGhpcyB3aWxsIGFsbG93IHRvIGV4cG9ydCBMQ01TX0VOQUJMRUQ9RmFsc2Ugd2hlbiBsY21zIGlzbid0IGluIFBBQ0tBR0VDT05GSUcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitkaWZmIC11TnIgSW1hZ2luZy0xLjEuNy5vcmlnL3NldHVwLnB5IEltYWdpbmctMS4xLjcvc2V0dXAucHkKKy0tLSBJbWFnaW5nLTEuMS43Lm9yaWcvc2V0dXAucHkJMjAxMy0wNy0yMiAxMDoxNzowMi4wODE0NTcwNzUgKzAyMDAKKysrKyBJbWFnaW5nLTEuMS43L3NldHVwLnB5CTIwMTMtMDctMjIgMTM6MTA6MDkuMDI5NzA3NDkyICswMjAwCitAQCAtMzksNiArMzksMTIgQEAKKyBUSUZGX1JPT1QgPSBOb25lCisgRlJFRVRZUEVfUk9PVCA9ICBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddCisgTENNU19ST09UID0gTm9uZQorK1RDTF9FTkFCTEVEID0gb3MuZ2V0ZW52KCdUQ0xfRU5BQkxFRCcsICJUcnVlIikKKytKUEVHX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0pQRUdfRU5BQkxFRCcsICJUcnVlIikKKytaTElCX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1pMSUJfRU5BQkxFRCcsICJUcnVlIikKKytUSUZGX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1RJRkZfRU5BQkxFRCcsICJUcnVlIikKKytGUkVFVFlQRV9FTkFCTEVEID0gb3MuZ2V0ZW52KCdGUkVFVFlQRV9FTkFCTEVEJywgIlRydWUiKQorK0xDTVNfRU5BQkxFRCA9IG9zLmdldGVudignTENNU19FTkFCTEVEJywgIlRydWUiKQorIAorICMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKKyAKK0BAIC0yMjAsMjIgKzIyNiwyMiBAQAorICAgICAgICAgICAgIHpsaWIgPSBqcGVnID0gdGlmZiA9IGZyZWV0eXBlID0gdGNsID0gdGsgPSBsY21zID0gTm9uZQorICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmUoKQorIAorLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgorKyAgICAgICAgaWYgWkxJQl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6Iik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6IgorICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6bGliIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6bGliIiAjIGFsdGVybmF0aXZlIG5hbWUKKyAKKy0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKKysgICAgICAgIGlmIEpQRUdfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAianBlZyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAianBlZyIKKyAgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAibGlianBlZyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAibGlianBlZyIgIyBhbHRlcm5hdGl2ZSBuYW1lCisgCistICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGlmZiIpOgorKyAgICAgICAgaWYgVElGRl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRpZmYiKToKKyAgICAgICAgICAgICBmZWF0dXJlLnRpZmYgPSAidGlmZiIKKyAKKy0gICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgorKyAgICAgICAgaWYgRlJFRVRZUEVfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgorICAgICAgICAgICAgICMgbG9vayBmb3IgZnJlZXR5cGUyIGluY2x1ZGUgZmlsZXMKKyAgICAgICAgICAgICBmcmVldHlwZV92ZXJzaW9uID0gMAorICAgICAgICAgICAgIGZvciBkaXIgaW4gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnM6CitAQCAtMjU2LDExICsyNjIsMTEgQEAKKyAgICAgICAgICAgICAgICAgaWYgZGlyOgorICAgICAgICAgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgZGlyLCAwKQorIAorLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgorKyAgICAgICAgaWYgTENNU19FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJsY21zIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUubGNtcyA9ICJsY21zIgorIAorLSAgICAgICAgaWYgX3RraW50ZXIgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ0ay5oIik6CisrICAgICAgICBpZiBUQ0xfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIF90a2ludGVyIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAidGsuaCIpOgorICAgICAgICAgICAgICMgdGhlIGxpYnJhcnkgbmFtZXMgbWF5IHZhcnkgc29tZXdoYXQgKGUuZy4gdGNsODQgb3IgdGNsOC40KQorICAgICAgICAgICAgIHZlcnNpb24gPSBUQ0xfVkVSU0lPTlswXSArIFRDTF9WRVJTSU9OWzJdCisgICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRjbCIgKyB2ZXJzaW9uKToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjYzYzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gYzYwNDBmNjE4ZDhmMjcwNmE3YjQ2ZDFjZGYzN2QxYTU4N2Y5NzAxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJldyBTdHJvbW5vdiA8c3Ryb21ub3ZAZ21haWwuY29tPgorRGF0ZTogVGh1LCAyOCBOb3YgMjAxMyAxNjo1ODo0MyArMDQwMAorU3ViamVjdDogW1BBVENIXSBmaXggY29tcGlsaW5nIHdpdGggRnJlZVR5cGUgMi41LjEKKworLS0tCisgX2ltYWdpbmdmdC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvX2ltYWdpbmdmdC5jIGIvX2ltYWdpbmdmdC5jCitpbmRleCA0N2Q1MGJkLi5mMTk1NTViIDEwMDY0NAorLS0tIGEvX2ltYWdpbmdmdC5jCisrKysgYi9faW1hZ2luZ2Z0LmMKK0BAIC01OSw3ICs1OSwxMSBAQCBzdHJ1Y3QgeworICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOworIH0gZnRfZXJyb3JzW10gPQorIAorKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRV8yXzEpCisrI2luY2x1ZGUgRlRfRVJST1JTX0gKKysjZWxzZQorICNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgorKyNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogZm9udCBvYmplY3RzICovCistLSAKKzEuOC41LjEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmdfMS4xLjcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzgzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIEltYWdpbmcgTGlicmFyeSAoUElMKSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTkyO2VuZGxpbmU9MTIwO21kNT1jNDM3MWFmNDU3OWYxZTQ4OWNmODgxYzE0NDNkZDRlYyIKK0RFUEVORFMgPSAiZnJlZXR5cGUganBlZyB0aWZmIgorU1JDTkFNRSA9ICJJbWFnaW5nIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2VmZmJvdC5vcmcvZG93bmxvYWRzL0ltYWdpbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmMxNGE1NGUxY2UwMmEwMjI1YmU4ODU0YmZiYTQ3OGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk1YmM3YzI0OThjOGUxZjliOTk5MzhmMWE0MGRjODZiM2YxNDk3NDFmMTA1Y2Y3YzdiZDJlMDcyNTQwNTIxMSIKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCisjIFRoZXJlIGlzbid0IGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwgYW5kIGxjbXMgaXMgaW4gbWV0YS1vZSwgYXQgbGVhc3QgbWFrZSBpdCBleHBsaWNpdCB3aGVuIGVuYWJsZWQKKyMgc2V0dXAucHkgYWxyZWFkeSBoYXMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xjbXNdID0gIiwsbGNtcyIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworZG9fY29tcGlsZSgpIHsKKyAgICBleHBvcnQgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0KKyAgICBleHBvcnQgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0KKyAgICBleHBvcnQgTENNU19FTkFCTEVEPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2xjbXMnLCAnVHJ1ZScsICdGYWxzZScsIGQpfQorICAgIGRpc3R1dGlsc19kb19jb21waWxlCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9CisgICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9CisgICAgZXhwb3J0IExDTVNfRU5BQkxFRD0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdsY21zJywgJ1RydWUnLCAnRmFsc2UnLCBkKX0KKyAgICBkaXN0dXRpbHNfZG9faW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS9odG1sLworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L1JFQURNRSAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59LworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L0RvY3MvKiAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59L2h0bWwvCisKKyAgICAjIGdldCByaWQgb2YgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24KKyAgICBzZWQgLWkgLWUgJ3M6L3Vzci9sb2NhbC9iaW4vOiR7YmluZGlyfS9lbnYgOmcnICR7RH0ke2JpbmRpcn0vKgorfQorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWxhbmcgcHl0aG9uLXN0cmluZ29sZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha29fMS4wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiVGVtcGxhdGluZyBsaWJyYXJ5IGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGViM2ZmOGU0YzE3YWFmN2I4MDg4OWI2YjJiZjRjODMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL00vTWFrby9NYWtvLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjlmMGFhZmQxNzdiMDM5ZWY2N2I5MGVhMzUwNDk3YTU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1ZjA4NjlmZWJlYTU5ZGFiN2VmZDI1NmZiNDUxYzM3N2NiYjc5NDdiZWYzODZmZjBiYjQ0NjI3YzMxYThkMWMiCisKK1MgPSAiJHtXT1JLRElSfS9NYWtvLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXRocmVhZGluZyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1odG1sIFwKKyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5MjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIFNvbWUgdmVyc2lvbnMgb2YgU1dJRyBkbyBub3QgdXNlIHRoZSBleHRlbnNpb24gcGFyYW1ldGVyLgorIyBNYWtlIGl0IG9wdGlvbmFsLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KK0luZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorQEAgLTU2Niw3ICs1NjYsNyBAQCBjbGFzcyBidWlsZF9leHQgKENvbW1hbmQpOgorICAgICAgICAgICAgIHRhcmdldF9sYW5nPWxhbmd1YWdlKQorIAorIAorLSAgICBkZWYgc3dpZ19zb3VyY2VzIChzZWxmLCBzb3VyY2VzLCBleHRlbnNpb24pOgorKyAgICBkZWYgc3dpZ19zb3VyY2VzIChzZWxmLCBzb3VyY2VzLCBleHRlbnNpb249Tm9uZSk6CisgCisgICAgICAgICAiIiJXYWxrIHRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyBpbiAnc291cmNlcycsIGxvb2tpbmcgZm9yIFNXSUcKKyAgICAgICAgIGludGVyZmFjZSAoLmkpIGZpbGVzLiAgUnVuIFNXSUcgb24gYWxsIHRoYXQgYXJlIGZvdW5kLCBhbmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI0NjliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIERvbid0IG1vZGlmeSB0aGUgc2hlLWJhbmcgbGluZSBmb3IgYSBjcm9zcy1idWlsZC4KKyMgT3RoZXJ3aXNlIGl0IHBvaW50cyB0byBvdXIgaG9zdHB5dGhvbiAod2hpY2ggd2UgZG8gbm90IHdhbnQpCisjCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorCitJbmRleDogUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNi4xLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKK0BAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIGJ1aWxkX3NjcmlwdHMgKENvbW1hbmQpOgorICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlLm1hdGNoKGZpcnN0X2xpbmUpCistICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorKyAgICAgICAgICAgICAgICBpZiBGYWxzZTogI21hdGNoOgorICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ID0gMQorICAgICAgICAgICAgICAgICAgICAgcG9zdF9pbnRlcnAgPSBtYXRjaC5ncm91cCgxKSBvciAnJworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5YWFmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyBUaGUgcHJvcGVyIHByZWZpeCBpcyBpbnNpZGUgb3VyIHN0YWdpbmcgYXJlYS4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisjIFNpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisKKy0tLSBQeXRob24tMi42LjYvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkub3JpZwkyMDEyLTAxLTAzIDE0OjAyOjAzLjAyNzAwNTI5NiArMDAwMAorKysrIFB5dGhvbi0yLjYuNi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQkyMDEyLTAxLTAzIDE0OjAyOjMxLjUxNzYwMTA4MSArMDAwMAorQEAgLTE5LDggKzE5LDggQEAKKyBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKKyAKKyAjIFRoZXNlIGFyZSBuZWVkZWQgaW4gYSBjb3VwbGUgb2Ygc3BvdHMsIHNvIGp1c3QgY29tcHV0ZSB0aGVtIG9uY2UuCistUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorLUVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCisrUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQorICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAorQEAgLTcwLDcgKzcwLDcgQEAKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorICAgICBpZiBwcmVmaXggaXMgTm9uZToKKy0gICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXS5yc3RyaXAoJ2luY2x1ZGUnKQorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBpZiBweXRob25fYnVpbGQ6CitAQCAtMTE1LDEyICsxMTUsMTYgQEAKKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5wcmVmaXggb3IKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorKyAgICBsaWJfYmFzZW5hbWUgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnNwbGl0KCcvJylbLTFdCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisrICAgICAgICBpZiBwbGF0X3NwZWNpZmljOgorKyAgICAgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10ucnN0cmlwKGxpYl9iYXNlbmFtZSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgcHJlZml4ID0gUFJFRklYCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Jhc2VuYW1lLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CitAQCAtMjE2LDcgKzIyMCw3IEBACisgICAgIGVsc2U6CisgICAgICAgICAjIFRoZSBuYW1lIG9mIHRoZSBjb25maWcuaCBmaWxlIGNoYW5nZWQgaW4gMi4yCisgICAgICAgICBjb25maWdfaCA9ICdweWNvbmZpZy5oJworLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorIAorIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKK0BAIC0yMjUsNyArMjI5LDcgQEAKKyAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2VmaWxlIikKKyAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgCisgZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCBnPU5vbmUpOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3OWU3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F2b2lkcyBwYXJhbGxlbCBtYWtlIHJhY2VzIGxpbmtpbmcgZXJyb3JzIHdoZW4gbWFraW5nIFBhcnNlci9QR0VOCisKKy0gSW1wbGVtZW50cyBSaWNoYXJkIFB1cmRpZSdzIGlkZWEKKworU2lnbmVkLU9mZi1CeTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtNjEwLDEyICs2MTAsMTAgQEAgTW9kdWxlcy9ncnBtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvZworIAorIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B3ZG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKKyAKKy0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykgJChQR0VOKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorLQkJJChNQUtFKSAkKFBHRU4pCisgCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKy0JCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKKyAKKyAkKFBHRU4pOgkkKFBHRU5PQkpTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzEwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNi4xLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMDktMTEtMTMgMTY6MDQ6NTQuMDAwMDAwMDAwICswMDAwCisrKysgUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDA5LTExLTEzIDE2OjA2OjI3LjAwMDAwMDAwMCArMDAwMAorQEAgLTMwMCw2ICszMDAsOCBAQAorICAgICAgICAgZHlsaWJfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSdkeWxpYicpCisgICAgICAgICBzdGF0aWNfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSdzdGF0aWMnKQorIAorKyAgICAgICAgcHJpbnQgIkxvb2tpbmcgaW4gJXMgZm9yICVzIiAlIChsaWIsIGRpcnMpCisrCisgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgc2hhcmVkID0gb3MucGF0aC5qb2luKGRpciwgc2hhcmVkX2YpCisgICAgICAgICAgICAgZHlsaWIgPSBvcy5wYXRoLmpvaW4oZGlyLCBkeWxpYl9mKQorQEAgLTMwOSwxMCArMzExLDEzIEBACisgICAgICAgICAgICAgIyBhc3N1bWluZyB0aGF0ICphbGwqIFVuaXggQyBjb21waWxlcnMgZG8uICBBbmQgb2YgY291cnNlIEknbQorICAgICAgICAgICAgICMgaWdub3JpbmcgZXZlbiBHQ0MncyAiLXN0YXRpYyIgb3B0aW9uLiAgU28gc3VlIG1lLgorICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGR5bGliKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChkeWxpYikKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGR5bGliCisgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzaGFyZWQpOgorKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKHNoYXJlZCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlZAorICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc3RhdGljKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChzdGF0aWMpCisgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWMKKyAKKyAgICAgICAgICMgT29wcywgZGlkbid0IGZpbmQgaXQgaW4gKmFueSogb2YgJ2RpcnMnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhODllNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDIzNSBAQAorUmViYXNlZCBmb3IgUHl0aG9uIDIuNy45CisKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCisyMDExLzA5LzI5CitUaGUgcHl0aG9uIHJlY2lwZSBidWlsZGluZyB3YXMgZmFpbGluZyBiZWNhdXNlIHB5dGhvbi1uYXRpdmUgCitjb3VsZCBub3QgaGFuZGxlIHN5cy5saWIgdmFyLiBzeXMubGliIHZhciBpcyBkZWZpbmVkIGluIHRoZSAKK211bHRpbGliIHBhdGNoIGhlbmNlIGFkZGVkIHRoaXMgbXVsdGlsaWIucGF0Y2ggZm9yIHB5dGhvbi1uYXRpdmUgCityZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorQEAgLTEwOCw2ICsxMDgsNyBAQCBQeUFQSV9GVU5DKGNoYXIgKikgUHlfR2V0UGF0aCh2b2lkKTsKKyAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0UGxhdGZvcm0odm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldExpYih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitAQCAtMjIsNiArMjIsOCBAQCBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCisgCisgCisrbGlibmFtZSA9IHN5cy5saWIKKysKKyBpZiBzeXMudmVyc2lvbiA8ICIyLjIiOgorICAgICBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlJywKK0BAIC00Miw3ICs0NCw3IEBAIGVsc2U6CisgSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAndW5peF9wcmVmaXgnOiB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlLycrbGlibmFtZSsnL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKKyAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKK0BAIC0zODMsNyArMzgzLDcgQEAgY2xhc3MgRG9jOgorIAorICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeSIpCistICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIrc3lzLnZlcnNpb25bMDozXSkKKyAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAorICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMi43LjkvTGliL3NpdGUucHkKK0BAIC0yODgsMTMgKzI4OCwxOSBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQorICAgICAgICAgICAgICMgbG9jYXRpb25zLgorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9kbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5CitAQCAtNCwxMCArNCwxMSBAQAorIGltcG9ydCB1bml0dGVzdAorIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKyBkbCA9IGltcG9ydF9tb2R1bGUoJ2RsJywgZGVwcmVjYXRlZD1UcnVlKQorK2ltcG9ydCBzeXMKKyAKKyBzaGFyZWRsaWJzID0gWworLSAgICAoJy91c3IvbGliL2xpYmMuc28nLCAnZ2V0cGlkJyksCistICAgICgnL2xpYi9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisrICAgICgnL3Vzci8nK3N5cy5saWIrJy9saWJjLnNvJywgJ2dldHBpZCcpLAorKyAgICAoJy8nK3N5cy5saWIrJy9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9saWIvbGliYy5keWxpYicsICdnZXRwaWQnKSwKKyAgICAgXQorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5CitAQCAtNzU0LDEwICs3NTQsMTAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAgICAgICAgICAgICAgIyBzaG91bGQgSSBhbHNvIGNhbGwgZXhwYW5kdXNlcj8gKGFmdGVyIGFsbCwgY291bGQgdXNlICRIT01FKQorIAorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJGV4ZWNfcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCisgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtODcsNiArODcsNyBAQCBQWV9DRkxBR1M9CSQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKENGTEFHCisgCisgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcworIE1BQ0hERVA9CUBNQUNIREVQQAorK0xJQj0JCUBMSUJACisgCisgIyBNdWx0aWFyY2ggZGlyZWN0b3J5IChtYXkgYmUgZW1wdHkpCisgTVVMVElBUkNIPQlATVVMVElBUkNIQAorQEAgLTEwNiw3ICsxMDcsNyBAQCBMSUJESVI9CQlAbGliZGlyQAorIE1BTkRJUj0JCUBtYW5kaXJACisgSU5DTFVERURJUj0JQGluY2x1ZGVkaXJACisgQ09ORklOQ0xVREVESVI9CSQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKy1TQ1JJUFRESVI9CSQocHJlZml4KS9saWIKKytTQ1JJUFRESVI9CSQocHJlZml4KS9ATElCQAorIAorICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKKyBCSU5MSUJERVNUPQkkKExJQkRJUikvcHl0aG9uJChWRVJTSU9OKQorQEAgLTU5Nyw2ICs1OTgsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CisgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCisgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAorIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAorKwkJLURMSUI9JyIkKExJQikiJyBcCisgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKKyAKKyBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworQEAgLTYzOSw3ICs2NDEsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQorIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKKyAKKyBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1ETElCPSciJChMSUIpIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisgCisgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworIAkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1JJChETElOQ0xESVIpIC1vICRAICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworSW5kZXg6IFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTE2LDkgKzExNiwxMSBAQAorICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCisgI2VuZGlmCisgCisrI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgorKworICNpZm5kZWYgUFlUSE9OUEFUSAorLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCistICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCisrICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorICNlbmRpZgorIAorICNpZm5kZWYgTEFORE1BUksKK0BAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworLXN0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9ICJsaWIvcHl0aG9uIiBWRVJTSU9OOworK3N0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9IExJQl9QWVRIT047CisgCisgc3RhdGljIHZvaWQKKyByZWR1Y2UoY2hhciAqZGlyKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitAQCAtMTAsMyArMTAsMTMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKKyB7CisgCXJldHVybiBQTEFURk9STTsKKyB9CisrCisrI2lmbmRlZiBMSUIKKysjZGVmaW5lIExJQiAibGliIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldExpYih2b2lkKQorK3sKKysJcmV0dXJuIExJQjsKKyt9CitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNDM3LDYgKzE0MzcsOCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsaWIiLAorKyAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldExpYigpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicHJlZml4IiwKK0luZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworQEAgLTczNiw2ICs3MzYsMTEgQEAgU3VuT1MqKQorICAgICA7OworIGVzYWMKKyAKKytBQ19TVUJTVChMSUIpCisrQUNfTVNHX0NIRUNLSU5HKExJQikKKytMSUI9YGJhc2VuYW1lICR7bGliZGlyfWAKKytBQ19NU0dfUkVTVUxUKCRMSUIpCisrCisgCisgQUNfU1VCU1QoTElCUkFSWSkKKyBBQ19NU0dfQ0hFQ0tJTkcoTElCUkFSWSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0NTJlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKzIwMTQvMTIvMTUKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKK0BAIC00MzksOSArNDM5LDkgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICBkZWYgZGV0ZWN0X21vZHVsZXMoc2VsZik6CisgICAgICAgICAjIEVuc3VyZSB0aGF0IC91c3IvbG9jYWwgaXMgYWx3YXlzIHVzZWQKKy0gICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCisrICAgICAgICAjIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgIyBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsICcvdXNyL2xvY2FsL2xpYicpCisrICAgICAgICAgICAgIyBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX2djY19wYXRocygpCisgICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorQEAgLTQ4MCwxNSArNDgwLDE1IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKy0gICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorKyAgICAgICAgI2lmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKysgICAgICAgICAgICAgICAgI2FuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKysgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisrICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorIAorICAgICAgICAgdHJ5OgorQEAgLTc2MSw4ICs3NjEsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgIHBhc3MgIyBJc3N1ZSA3Mzg0OiBBbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcyBvciB0aW5mby4KKyAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKKy0gICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJhYWYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitPbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHN5c2NvbmZpZyByZWFkIHRoZSBkYXRhIGZyb20gYm90aCB0aGUgTWFrZWZpbGUgYW5kCit0aGUgUHl0aG9uLmggZmlsZSBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSwgY3JlYXRlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGVpciB2YXJpYWJsZXMKK2FuZCB1c2VkIHRob3NlIHdoZW4gdXNpbmcgZ2V0X2NvbmZpZ192YXIoKSwgbm93IGl0IHVzZXMgX3N5c2NvbmZpZ2RhdGEuYnVpbGRfdGltZV92YXJzW10KK3doaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIEhPU1QsIGVycm9uZW91cyBpbiBvdXIgY2FzZSwgdGhpcyBwYXRjaCByZXZlcnRzIHRoaXMKK2JlaGF2aW9yIGFuZCB1c2VzIFB5dGhvbi5oIGFuZCBNYWtlZmlsZSB0byBnZXQgaW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC00MDEsMTIgKzQwMSw2NiBAQCBfY29uZmlnX3ZhcnMgPSBOb25lCisgCisgZGVmIF9pbml0X3Bvc2l4KCk6CisgICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgUE9TSVggc3lzdGVtcy4iIiIKKy0gICAgIyBfc3lzY29uZmlnZGF0YSBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSwgc2VlIHRoZSBzeXNjb25maWcgbW9kdWxlCistICAgIGZyb20gX3N5c2NvbmZpZ2RhdGEgaW1wb3J0IGJ1aWxkX3RpbWVfdmFycworLSAgICBnbG9iYWwgX2NvbmZpZ192YXJzCistICAgIF9jb25maWdfdmFycyA9IHt9CistICAgIF9jb25maWdfdmFycy51cGRhdGUoYnVpbGRfdGltZV92YXJzKQorKyAgICBnID0ge30KKysgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgTWFrZWZpbGU6CisrICAgIHRyeToKKysgICAgICAgIGZpbGVuYW1lID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKKysgICAgICAgIHBhcnNlX21ha2VmaWxlKGZpbGVuYW1lLCBnKQorKyAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorKyAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKKysgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKKysgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCisrCisrICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKG15X21zZykKKysKKysgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgcHljb25maWcuaDoKKysgICAgdHJ5OgorKyAgICAgICAgZmlsZW5hbWUgPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorKyAgICAgICAgcGFyc2VfY29uZmlnX2goZmlsZShmaWxlbmFtZSksIGcpCisrICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisrICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQorKyAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgorKyAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKKysKKysgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IobXlfbXNnKQorKworKyAgICAjIE9uIEFJWCwgdGhlcmUgYXJlIHdyb25nIHBhdGhzIHRvIHRoZSBsaW5rZXIgc2NyaXB0cyBpbiB0aGUgTWFrZWZpbGUKKysgICAgIyAtLSB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIFB5dGhvbiBzb3VyY2UsIGJ1dCB3aGVuIGluc3RhbGxlZAorKyAgICAjIHRoZSBzY3JpcHRzIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeS4KKysgICAgaWYgcHl0aG9uX2J1aWxkOgorKyAgICAgICAgZ1snTERTSEFSRUQnXSA9IGdbJ0JMRFNIQVJFRCddCisgCisrICAgIGVsaWYgZ2V0X3B5dGhvbl92ZXJzaW9uKCkgPCAnMi4xJzoKKysgICAgICAgICMgVGhlIGZvbGxvd2luZyB0d28gYnJhbmNoZXMgYXJlIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5LgorKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdhaXg0JzogICAgICAgICAgIyB3aGF0IGFib3V0IEFJWCAzLnggPworKyAgICAgICAgICAgICMgTGlua2VyIHNjcmlwdCBpcyBpbiB0aGUgY29uZmlnIGRpcmVjdG9yeSwgbm90IGluIE1vZHVsZXMgYXMgdGhlCisrICAgICAgICAgICAgIyBNYWtlZmlsZSBzYXlzLgorKyAgICAgICAgICAgIHB5dGhvbl9saWIgPSBnZXRfcHl0aG9uX2xpYihzdGFuZGFyZF9saWI9MSkKKysgICAgICAgICAgICBsZF9zb19haXggPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsICdsZF9zb19haXgnKQorKyAgICAgICAgICAgIHB5dGhvbl9leHAgPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsICdweXRob24uZXhwJykKKysKKysgICAgICAgICAgICBnWydMRFNIQVJFRCddID0gIiVzICVzIC1iSTolcyIgJSAobGRfc29fYWl4LCBnWydDQyddLCBweXRob25fZXhwKQorKworKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Jlb3MnOgorKyAgICAgICAgICAgICMgTGlua2VyIHNjcmlwdCBpcyBpbiB0aGUgY29uZmlnIGRpcmVjdG9yeS4gIEluIHRoZSBNYWtlZmlsZSBpdCBpcworKyAgICAgICAgICAgICMgcmVsYXRpdmUgdG8gdGhlIHNyY2Rpciwgd2hpY2ggYWZ0ZXIgaW5zdGFsbGF0aW9uIG5vIGxvbmdlciBtYWtlcworKyAgICAgICAgICAgICMgc2Vuc2UuCisrICAgICAgICAgICAgcHl0aG9uX2xpYiA9IGdldF9weXRob25fbGliKHN0YW5kYXJkX2xpYj0xKQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdF9wYXRoID0gc3RyaW5nLnNwbGl0KGdbJ0xEU0hBUkVEJ10pWzBdCisrICAgICAgICAgICAgbGlua2Vyc2NyaXB0X25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxpbmtlcnNjcmlwdF9wYXRoKQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdCA9IG9zLnBhdGguam9pbihweXRob25fbGliLCAnY29uZmlnJywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2Vyc2NyaXB0X25hbWUpCisrCisrICAgICAgICAgICAgIyBYWFggdGhpcyBpc24ndCB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpczogYWRkaW5nIHRoZSBQeXRob24KKysgICAgICAgICAgICAjIGxpYnJhcnkgdG8gdGhlIGxpbmssIGlmIG5lZWRlZCwgc2hvdWxkIGJlIGluIHRoZSAiYnVpbGRfZXh0IgorKyAgICAgICAgICAgICMgY29tbWFuZC4gIChJdCdzIGFsc28gbmVlZGVkIGZvciBub24tTVMgY29tcGlsZXJzIG9uIFdpbmRvd3MsIGFuZAorKyAgICAgICAgICAgICMgaXQncyB0YWtlbiBjYXJlIG9mIGZvciB0aGVtIGJ5IHRoZSAnYnVpbGRfZXh0LmdldF9saWJyYXJpZXMoKScKKysgICAgICAgICAgICAjIG1ldGhvZC4pCisrICAgICAgICAgICAgZ1snTERTSEFSRUQnXSA9ICgiJXMgLUwlcy9saWIgLWxweXRob24lcyIgJQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmtlcnNjcmlwdCwgUFJFRklYLCBnZXRfcHl0aG9uX3ZlcnNpb24oKSkpCisrCisrICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKKysgICAgX2NvbmZpZ192YXJzID0gZworIAorIGRlZiBfaW5pdF9udCgpOgorICAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIE5UIiIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS91bml4Y2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDI4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIENDIHZhcmlhYmxlLHNvbWV0aW1lcyBsaWtlOiJ4ODZfNjQtcG9reS1saW51eC1nY2MgICAtbTY0IC0tc3lzcm9vdD0vJHtUTVBESVJ9L3N5c3Jvb3RzL3FlbXV4ODYtNjQiLCBjb250YWlucyBvcHRpb24gaW5mb3JtYXRpb24uIAorVGhpcyB3aWxsIGxlYWQgdG8gd3JvbmcgY29tcGlsZXIgbmFtZSAicWVtdXg4Ni02NCIgcmF0aGVyIHRoYW4gIng4Nl82NC1wb2t5LWxpbnV4LWdjYyIgd2hlbiBweXRob24gZmluZGluZyB0aGUgY29tcGlsZXIgbmFtZS4KKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IFB5dGhvbi0yLjcuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMS0xMS0yNCAxMzo1MToxMC41Mzk5OTg3MjIgLTA4MDAKKysrKyBQeXRob24tMi43LjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTEtMTEtMjQgMTU6NTQ6MzYuODcyMTM3NzY2IC0wODAwCitAQCAtMjgyLDcgKzI4Miw3IEBACisgICAgICAgICAjIHRoaXMgdGltZSwgdGhlcmUncyBubyB3YXkgdG8gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgIyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiwgc28KKyAgICAgICAgICMgd2UgdXNlIHRoaXMgaGFjay4KKy0gICAgICAgIGNvbXBpbGVyID0gb3MucGF0aC5iYXNlbmFtZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikpCisrICAgICAgICBjb21waWxlciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIE1hY09TWCdzIGxpbmtlciBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC1SIGZsYWcgYXQgYWxsCisgICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGY1YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy45LmJiCkBAIC0wLDAgKzEsNjMgQEAKK3JlcXVpcmUgcHl0aG9uLmluYworCitFWFRSQU5BVElWRVBBVEggKz0gImJ6aXAyLW5hdGl2ZSIKK0RFUEVORFMgPSAib3BlbnNzbC1uYXRpdmUgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSIKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGVidWcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL25vaG9zdGxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL211bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2J1aWxkZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBcCisgICAgICAgICAgICIKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiIKKworaW5oZXJpdCBuYXRpdmUKKworUlBST1ZJREVTICs9ICJweXRob24tZGlzdHV0aWxzLW5hdGl2ZSBweXRob24tY29tcHJlc3Npb24tbmF0aXZlIHB5dGhvbi10ZXh0dXRpbHMtbmF0aXZlIHB5dGhvbi1jb2RlY3MtbmF0aXZlIHB5dGhvbi1jb3JlLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IgorCitFWFRSQV9PRU1BS0UgPSAnXAorICBCVUlMRF9TWVM9IiIgXAorICBIT1NUX1NZUz0iIiBcCisgIExJQkM9IiIgXAorICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorJworCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJFBZVEhTQ1JJUFQKKwlkb25lCisKKwkjIEFkZCBhIHN5bWxpbmsgdG8gdGhlIG5hdGl2ZSBQeXRob24gc28gdGhhdCBzY3JpcHRzIGNhbiBqdXN0IGludm9rZQorCSMgIm5hdGl2ZXB5dGhvbiIgYW5kIGdldCB0aGUgcmlnaHQgb25lIHdpdGhvdXQgbmVlZGluZyBhYnNvbHV0ZSBwYXRocworCSMgKHRoZXNlIG9mdGVuIGVuZCB1cCB0b28gbG9uZyBmb3IgdGhlICMhIHBhcnNlciBpbiB0aGUga2VybmVsIGFzIHRoZQorCSMgYnVmZmVyIGlzIDEyOCBieXRlcyBsb25nKS4KKwlsbiAtcyBweXRob24tbmF0aXZlL3B5dGhvbiAke0R9JHtiaW5kaXJ9L25hdGl2ZXB5dGhvbgorCisJIyBXZSBkb24ndCB3YW50IG1vZHVsZXMgaW4gfi8ubG9jYWwgYmVpbmcgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlCisJIyBpbnN0YWxsZWQgaW4gdGhlIG5hdGl2ZSBzeXNyb290LCBzbyBkaXNhYmxlIHVzZXIgc2l0ZSBzdXBwb3J0LgorCXNlZCAtaSAtZSAncyxeXChFTkFCTEVfVVNFUl9TSVRFID0gXCkuKixcMUZhbHNlLCcgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGUucHkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZThmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiCkBAIC0wLDAgKzEsMTYgQEAKK0RFU0NSSVBUSU9OID0gIm5vc2UgZXh0ZW5kcyB0aGUgdGVzdCBsb2FkaW5nIGFuZCBydW5uaW5nIGZlYXR1cmVzIG9mIHVuaXR0ZXN0LCBcCittYWtpbmcgaXQgZWFzaWVyIHRvIHdyaXRlLCBmaW5kIGFuZCBydW4gdGVzdHMuIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGdwbC50eHQ7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL24vbm9zZS9ub3NlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBjYTU0NmQ4MWNhODMwOTA4MGZjODBjYjM4OWU3YTE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2MWUwOTA5YTc0M2VlZDM3YjEyMDdlMzhhOGU3YjRhMmZlMGE4MjE4NWUzNmYyYmUyNTJlZjFiM2Y5MDE3NTgiCisKK1MgPSAiJHtXT1JLRElSfS9ub3NlLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9jb25maWcuaCAqLworLyogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMiAqLworLyogI2RlZmluZSBTSVpFT0ZfSU5UIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkcgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRkxPQVQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRE9VQkxFIDggKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDEyCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9GTE9BVF9GVU5DUworI2RlZmluZSBIQVZFX0xPRzFQCisjZGVmaW5lIEhBVkVfRVhQTTEKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUMKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUNfRkxPQVQKKyNkZWZpbmUgSEFWRV9JU05BTgorI2RlZmluZSBIQVZFX0lTSU5GCisjZGVmaW5lIEhBVkVfUklOVAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmY2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9jb25maWcuaCAqLworLyogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMiAqLworLyogI2RlZmluZSBTSVpFT0ZfSU5UIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkcgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRkxPQVQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRE9VQkxFIDggKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDEyCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9GTE9BVF9GVU5DUworI2RlZmluZSBIQVZFX0xPRzFQCisjZGVmaW5lIEhBVkVfRVhQTTEKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUMKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUNfRkxPQVQKKyNkZWZpbmUgSEFWRV9JU05BTgorI2RlZmluZSBIQVZFX0lTSU5GCisjZGVmaW5lIEhBVkVfUklOVAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvX251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzQyODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjYxMzVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX0RPVUJMRV9CRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisvKiAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvY29uZmlnLmggKi8KKy8qICNkZWZpbmUgU0laRU9GX1NIT1JUIDIgKi8KKy8qICNkZWZpbmUgU0laRU9GX0lOVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0ZMT0FUIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0RPVUJMRSA4ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxMgorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfRkxPQVRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9MT0cxUAorI2RlZmluZSBIQVZFX0VYUE0xCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDX0ZMT0FUCisjZGVmaW5lIEhBVkVfSVNOQU4KKyNkZWZpbmUgSEFWRV9JU0lORgorI2RlZmluZSBIQVZFX1JJTlQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9uby1ob3N0LXBhdGhzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ1MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitEb24ndCBzZWFyY2ggL3VzciBhbmQgc28gb24gZm9yIGxpYnJhcmllcyBieSBkZWZhdWx0IHRvIGF2b2lkIGhvc3QgY29udGFtaW5hdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChBcyB0aGUgY29kZSBzdGFuZHMsIHRoaXMgaXMgYSBoYWNrKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weSBiL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQoraW5kZXggYmFjOTBmYi4uYTYzZDc5NiAxMDA2NDQKKy0tLSBhL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQorKysrIGIvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5CitAQCAtMTkxLDQxICsxOTEsMTIgQEAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gW10KKyAgICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gW10KKyBlbHNlOgorLSAgICBkZWZhdWx0X2xpYl9kaXJzID0gbGlicGF0aHMoWycvdXNyL2xvY2FsL2xpYicsICcvb3B0L2xpYicsICcvdXNyL2xpYicsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvbG9jYWwvbGliJywgJy9zdy9saWInXSwgcGxhdGZvcm1fYml0cykKKy0gICAgZGVmYXVsdF9pbmNsdWRlX2RpcnMgPSBbJy91c3IvbG9jYWwvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2luY2x1ZGUnLCAnL3Vzci9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXRoIG9mIHVtZnBhY2sgdW5kZXIgbWFjcG9ydHMKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvbG9jYWwvaW5jbHVkZS91ZnNwYXJzZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2luY2x1ZGUnLCAnL3N3L2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9pbmNsdWRlL3N1aXRlc3BhcnNlJ10KKy0gICAgZGVmYXVsdF9zcmNfZGlycyA9IFsnLicsICcvdXNyL2xvY2FsL3NyYycsICcvb3B0L3NyYycsICcvc3cvc3JjJ10KKy0KKy0gICAgZGVmYXVsdF94MTFfbGliX2RpcnMgPSBsaWJwYXRocyhbJy91c3IvWDExUjYvbGliJywgJy91c3IvWDExL2xpYicsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorLSAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMgPSBbJy91c3IvWDExUjYvaW5jbHVkZScsICcvdXNyL1gxMS9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2luY2x1ZGUnXQorLQorLSAgICBpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9saWIvWDExJyk6CistICAgICAgICBnbG9iYmVkX3gxMV9kaXIgPSBnbG9iKCcvdXNyL2xpYi8qL2xpYlgxMS5zbycpCistICAgICAgICBpZiBnbG9iYmVkX3gxMV9kaXI6CistICAgICAgICAgICAgeDExX3NvX2RpciA9IG9zLnBhdGguc3BsaXQoZ2xvYmJlZF94MTFfZGlyWzBdKVswXQorLSAgICAgICAgICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzLmV4dGVuZChbeDExX3NvX2RpciwgJy91c3IvbGliL1gxMSddKQorLSAgICAgICAgICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycy5leHRlbmQoWycvdXNyL2xpYi9YMTEvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvaW5jbHVkZS9YMTEnXSkKKy0KKy0gICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3AKKy0gICAgdHJ5OgorLSAgICAgICAgcCA9IHNwLlBvcGVuKFsiZ2NjIiwgIi1wcmludC1tdWx0aWFyY2giXSwgc3Rkb3V0PXNwLlBJUEUsCistICAgICAgICAgICAgICAgIHN0ZGVycj1vcGVuKG9zLmRldm51bGwsICd3JykpCistICAgIGV4Y2VwdCBPU0Vycm9yOgorLSAgICAgICAgcGFzcyAjIGdjYyBpcyBub3QgaW5zdGFsbGVkCistICAgIGVsc2U6CistICAgICAgICB0cmlwbGV0ID0gc3RyKHAuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoKS5zdHJpcCgpKQorLSAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6CistICAgICAgICAgICAgIyBnY2Mgc3VwcG9ydHMgdGhlICItcHJpbnQtbXVsdGlhcmNoIiBvcHRpb24KKy0gICAgICAgICAgICBkZWZhdWx0X3gxMV9saWJfZGlycyArPSBbb3MucGF0aC5qb2luKCIvdXNyL2xpYi8iLCB0cmlwbGV0KV0KKy0gICAgICAgICAgICBkZWZhdWx0X2xpYl9kaXJzICs9IFtvcy5wYXRoLmpvaW4oIi91c3IvbGliLyIsIHRyaXBsZXQpXQorKyAgICBkZWZhdWx0X2xpYl9kaXJzID0gbGlicGF0aHMoWycvZGVhZGlyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorKyAgICBkZWZhdWx0X2luY2x1ZGVfZGlycyA9IFsnL2RlYWRkaXIvaW5jbHVkZSddCisrICAgIGRlZmF1bHRfc3JjX2RpcnMgPSBbJy4nLCAnL2RlYWRkaXIvc3JjJ10KKysKKysgICAgZGVmYXVsdF94MTFfbGliX2RpcnMgPSBsaWJwYXRocyhbJy9kZWFkZGlyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorKyAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMgPSBbJy9kZWFkZGlyL2luY2x1ZGUnXQorIAorIGlmIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnbGliJykgbm90IGluIGRlZmF1bHRfbGliX2RpcnM6CisgICAgIGRlZmF1bHRfbGliX2RpcnMuaW5zZXJ0KDAsIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnbGliJykpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL19udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NiZmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWQzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0RPVUJMRV9ET1VCTEVfQkUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U2M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lOVEVMX0VYVEVOREVEXzE2X0JZVEVTX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlNDFlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9jb25maWcuaApAQCAtMCwwICsxLDEwOCBAQAorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOCisjZGVmaW5lIEhBVkVfQ09TCisjZGVmaW5lIEhBVkVfVEFOCisjZGVmaW5lIEhBVkVfU0lOSAorI2RlZmluZSBIQVZFX0NPU0gKKyNkZWZpbmUgSEFWRV9UQU5ICisjZGVmaW5lIEhBVkVfRkFCUworI2RlZmluZSBIQVZFX0ZMT09SCisjZGVmaW5lIEhBVkVfQ0VJTAorI2RlZmluZSBIQVZFX1NRUlQKKyNkZWZpbmUgSEFWRV9MT0cxMAorI2RlZmluZSBIQVZFX0xPRworI2RlZmluZSBIQVZFX0VYUAorI2RlZmluZSBIQVZFX0FTSU4KKyNkZWZpbmUgSEFWRV9BQ09TCisjZGVmaW5lIEhBVkVfQVRBTgorI2RlZmluZSBIQVZFX0ZNT0QKKyNkZWZpbmUgSEFWRV9NT0RGCisjZGVmaW5lIEhBVkVfRlJFWFAKKyNkZWZpbmUgSEFWRV9MREVYUAorI2RlZmluZSBIQVZFX1JJTlQKKyNkZWZpbmUgSEFWRV9UUlVOQworI2RlZmluZSBIQVZFX0VYUDIKKyNkZWZpbmUgSEFWRV9MT0cyCisjZGVmaW5lIEhBVkVfQVRBTjIKKyNkZWZpbmUgSEFWRV9QT1cKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIKKyNkZWZpbmUgSEFWRV9TSU5GCisjZGVmaW5lIEhBVkVfQ09TRgorI2RlZmluZSBIQVZFX1RBTkYKKyNkZWZpbmUgSEFWRV9TSU5IRgorI2RlZmluZSBIQVZFX0NPU0hGCisjZGVmaW5lIEhBVkVfVEFOSEYKKyNkZWZpbmUgSEFWRV9GQUJTRgorI2RlZmluZSBIQVZFX0ZMT09SRgorI2RlZmluZSBIQVZFX0NFSUxGCisjZGVmaW5lIEhBVkVfUklOVEYKKyNkZWZpbmUgSEFWRV9UUlVOQ0YKKyNkZWZpbmUgSEFWRV9TUVJURgorI2RlZmluZSBIQVZFX0xPRzEwRgorI2RlZmluZSBIQVZFX0xPR0YKKyNkZWZpbmUgSEFWRV9MT0cxUEYKKyNkZWZpbmUgSEFWRV9FWFBGCisjZGVmaW5lIEhBVkVfRVhQTTFGCisjZGVmaW5lIEhBVkVfQVNJTkYKKyNkZWZpbmUgSEFWRV9BQ09TRgorI2RlZmluZSBIQVZFX0FUQU5GCisjZGVmaW5lIEhBVkVfQVNJTkhGCisjZGVmaW5lIEhBVkVfQUNPU0hGCisjZGVmaW5lIEhBVkVfQVRBTkhGCisjZGVmaW5lIEhBVkVfSFlQT1RGCisjZGVmaW5lIEhBVkVfQVRBTjJGCisjZGVmaW5lIEhBVkVfUE9XRgorI2RlZmluZSBIQVZFX0ZNT0RGCisjZGVmaW5lIEhBVkVfTU9ERkYKKyNkZWZpbmUgSEFWRV9GUkVYUEYKKyNkZWZpbmUgSEFWRV9MREVYUEYKKyNkZWZpbmUgSEFWRV9FWFAyRgorI2RlZmluZSBIQVZFX0xPRzJGCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRgorI2RlZmluZSBIQVZFX1NJTkwKKyNkZWZpbmUgSEFWRV9DT1NMCisjZGVmaW5lIEhBVkVfVEFOTAorI2RlZmluZSBIQVZFX1NJTkhMCisjZGVmaW5lIEhBVkVfQ09TSEwKKyNkZWZpbmUgSEFWRV9UQU5ITAorI2RlZmluZSBIQVZFX0ZBQlNMCisjZGVmaW5lIEhBVkVfRkxPT1JMCisjZGVmaW5lIEhBVkVfQ0VJTEwKKyNkZWZpbmUgSEFWRV9SSU5UTAorI2RlZmluZSBIQVZFX1RSVU5DTAorI2RlZmluZSBIQVZFX1NRUlRMCisjZGVmaW5lIEhBVkVfTE9HMTBMCisjZGVmaW5lIEhBVkVfTE9HTAorI2RlZmluZSBIQVZFX0xPRzFQTAorI2RlZmluZSBIQVZFX0VYUEwKKyNkZWZpbmUgSEFWRV9FWFBNMUwKKyNkZWZpbmUgSEFWRV9BU0lOTAorI2RlZmluZSBIQVZFX0FDT1NMCisjZGVmaW5lIEhBVkVfQVRBTkwKKyNkZWZpbmUgSEFWRV9BU0lOSEwKKyNkZWZpbmUgSEFWRV9BQ09TSEwKKyNkZWZpbmUgSEFWRV9BVEFOSEwKKyNkZWZpbmUgSEFWRV9IWVBPVEwKKyNkZWZpbmUgSEFWRV9BVEFOMkwKKyNkZWZpbmUgSEFWRV9QT1dMCisjZGVmaW5lIEhBVkVfRk1PREwKKyNkZWZpbmUgSEFWRV9NT0RGTAorI2RlZmluZSBIQVZFX0ZSRVhQTAorI2RlZmluZSBIQVZFX0xERVhQTAorI2RlZmluZSBIQVZFX0VYUDJMCisjZGVmaW5lIEhBVkVfTE9HMkwKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9ICisjZGVmaW5lIEhBVkVfTERPVUJMRV9JTlRFTF9FWFRFTkRFRF8xMl9CWVRFU19MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc5MzhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfTlBZX05VTVBZQ09ORklHX0hfCisjZGVmaW5lIF9OUFlfTlVNUFlDT05GSUdfSF8KKworI2luY2x1ZGUgIl9udW1weWNvbmZpZy5oIgorCisvKiAKKyAqIE9uIE1hYyBPUyBYLCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgb25lIGNvbmZpZ3VyYXRpb24gc3RhZ2UgZm9yIGFsbCB0aGUgYXJjaHMKKyAqIGluIHVuaXZlcnNhbCBidWlsZHMsIGFueSBtYWNybyB3aGljaCBkZXBlbmRzIG9uIHRoZSBhcmNoIG5lZWRzIHRvIGJlCisgKiBoYXJjb2RlZAorICovCisjaWZkZWYgX19BUFBMRV9fCisJI3VuZGVmIE5QWV9TSVpFT0ZfTE9ORworCSN1bmRlZiBOUFlfU0laRU9GX1BZX0lOVFBUUl9UCisKKwkjaWZkZWYgX19MUDY0X18KKwkJI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgCQk4CisJCSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCAJOAorCSNlbHNlCisJCSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIAkJNAorCQkjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgCTQKKwkjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjZGZkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiCkBAIC0wLDAgKzEsOTkgQEAKK1NVTU1BUlkgPSAiQSBzb3BoaXN0aWNhdGVkIE51bWVyaWMgUHJvY2Vzc2luZyBQYWNrYWdlIGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PWY4NzgzMmQ4NTRhY2JhZGU2ZTlmNWM2MDFjOGIzMGIxIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L251bXB5L251bXB5LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ob3N0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgJHtDT05GSUdGSUxFU1VSSX0gIgorCitDT05GSUdGSUxFU1VSSSA/PSAiIgorCitDT05GSUdGSUxFU1VSSV9hYXJjaDY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm1lYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2VsID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3g4Ni02NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHMgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9wb3dlcnBjID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYzY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0bjMyID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorCitTID0gIiR7V09SS0RJUn0vbnVtcHktJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKKyMgTWFrZSB0aGUgYnVpbGQgZmFpbCBhbmQgcmVwbGFjZSAqY29uZmlnLmggd2l0aCBwcm9wZXIgb25lCisjIFRoaXMgaXMgYSB1Z2x5LCB1Z2x5IGhhY2sgLSBLb2VuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgdHJ1ZQorICAgIGNwICR7V09SS0RJUn0vKmNvbmZpZy5oICR7U30vYnVpbGQvJChscyAke1N9L2J1aWxkIHwgZ3JlcCBzcmMpL251bXB5L2NvcmUvaW5jbHVkZS9udW1weS8KK30KKworRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9udW1weS9jb3JlL2xpYi8qLmEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZmE1NGU0MGI2YTI0MzQxNmYwMjQ4MTIzYjZlYzMzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNGZhNzBiN2VkYmFiNjVlZTY0MzJlYjYzNzQzZjU0ODlmMTkxOWM2MTQ2MzJiMjBiMmZiNDVhYTdlNjgyYWM2IgorCisjIGluc3RhbGwgd2hhdCBpcyBuZWVkZWQgZm9yIG51bXB5LnRlc3QoKQorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXVuaXR0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaWZmbGliIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1wcHJpbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBpY2tsZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tc2hlbGwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5vc2UgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRvY3Rlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRhdGV0aW1lIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaXN0dXRpbHMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW1pc2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW1tYXAgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbnVtYmVycyBcCisgICAgICAgICAgICAgICAgICBweXRob24tcHlkb2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBrZ3V0aWwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWVtYWlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1zdWJwcm9jZXNzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF8zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4MGFlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQSBQdXJlIFB5dGhvbiBFeHBlY3QgbGlrZSBNb2R1bGUgZm9yIFB5dGhvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZXhwZWN0LnJlYWR0aGVkb2NzLm9yZy8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiSVNDIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzI1ZDlhMDc3MGJhNjlhOTk2NWFjYzg5NGU5ZjM2NDQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGV4cGVjdC9wZXhwZWN0LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZGU3MjU0MWQzZjEzNzRiNzk1NDcyZmVkODQxZGNlOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkZmVhNjE4ZDQzZTgzY2ZmZjIxNTA0ZjE4Zjk4MDE5YmE1MjBmMzMwZTQxNDJlNTE4NWVmN2M3MzUyN2RlNWJhIgorCitTID0gIiR7V09SS0RJUn0vcGV4cGVjdC0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIHB5dGhvbi1jb3JlIFwKKyAgICBweXRob24taW8gXAorICAgIHB5dGhvbi10ZXJtaW5hbCBcCisgICAgcHl0aG9uLXJlc291cmNlIFwKKyAgICBweXRob24tZmNudGwgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmZTI1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQ2Fpcm8gY2FudmFzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcHljYWlybyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJweXRob24tZGV2ZWwiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgTVBMLTEuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyZTA3MWFiNzI5Nzg0MzFiMjk0YTBkNjk2MzI3NDIxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTEdQTC0yLjE7bWQ1PWZhZDliMzMzMmJlODk0YmFiOWJjNTAxNTcyODY0YjI5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTVBMLTEuMTttZDU9YmZlMWY3NWQ2MDY5MTJhNDExMWM5MDc0M2Q2YzczMjUiCisKKyMgY2Fpcm8gPj0gMS44LjgKK0RFUEVORFMgPSAiY2Fpcm8iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcmVsZWFzZXMvcHkyY2Fpcm8tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjIwMzM3MTMyYzRhYjA2YzExNDZhZDM4NGQ1NTM3MmM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQzMDQzOWYwNmMyZWMxYTM5ZTI3NDY0YzZjODI4YjZlZmFjZTNiMjJlZTE3YjJkZTA1ZGM0MDllNDI5YTc0MzEiCisKK1MgPSAiJHtXT1JLRElSfS9weTJjYWlyby0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb25maWd1cmUoKSB7CisJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSAuL3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtEfSR7cHJlZml4fSAtLWxpYmRpcj0ke0R9JHtsaWJkaXJ9Cit9CisKK2RvX2NvbXBpbGUoKSB7CisJLi93YWYgYnVpbGQgJHtQQVJBTExFTF9NQUtFfQorfQorCitkb19pbnN0YWxsKCkgeworCS4vd2FmIGluc3RhbGwKKwlzZWQgXAorCQktZSAnczpAcHJlZml4QDoke3ByZWZpeH06JyBcCisJCS1lICdzOkBWRVJTSU9OQDoke1BWfTonIFwKKwkJLWUgJ3M6QGluY2x1ZGVkaXJAOiR7aW5jbHVkZWRpcn06JyBcCisJCXB5Y2Fpcm8ucGMuaW4gPiBweWNhaXJvLnBjCisJaW5zdGFsbCAtbSAwNjQ0IHB5Y2Fpcm8ucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNDllZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybC9uby1zdGF0aWMtbGluay5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogcHljdXJsLTcuMTkuMy4xL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHljdXJsLTcuMTkuMy4xLm9yaWcvc2V0dXAucHkJMjAxNC0wNy0xNiAxMjo1NzoyNC4wNjUzNDY4ODcgKzAwMDAKKysrKyBweWN1cmwtNy4xOS4zLjEvc2V0dXAucHkJMjAxNC0wNy0xNiAxMjo1Nzo1My4wNTczNDc2NzggKzAwMDAKK0BAIC0xNDcsNyArMTQ3LDcgQEAKKyAgICAgICAgIG9wdGJ1ZiA9ICcnCisgICAgICAgICBzc2xoaW50YnVmID0gJycKKyAgICAgICAgIGVycnRleHQgPSAnJworLSAgICAgICAgZm9yIG9wdGlvbiBpbiBbIi0tbGlicyIsICItLXN0YXRpYy1saWJzIl06CisrICAgICAgICBmb3Igb3B0aW9uIGluIFsiLS1saWJzIl06CisgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oKENVUkxfQ09ORklHLCBvcHRpb24pLAorICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybF83LjE5LjUuMS5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgbGliY3VybCIKK0hPTUVQQUdFID0gImh0dHA6Ly9weWN1cmwuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSsgfCBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUucnN0O2JlZ2lubGluZT0xNjY7ZW5kbGluZT0xODE7bWQ1PTU3ZTVhYjBjMGY5NjQ1MzNmYzU5ZDkzZGVjNTY5NWJiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTEdQTDttZDU9MzU3OWE5ZmQwMjIxZDQ5YTIzN2FhYTMzNDkyZjk4OGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1NSVQ7bWQ1PWU4MjAwOTU1Yzc3M2IyYTBmZDZjZWEzNmVhNWU4N2JlIgorCitERVBFTkRTID0gImN1cmwgcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWNvcmUgY3VybCIKK1NSQ05BTUUgPSAicHljdXJsIgorCitTUkNfVVJJID0gIlwKKyAgaHR0cDovLyR7U1JDTkFNRX0uc291cmNlZm9yZ2UubmV0L2Rvd25sb2FkLyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6O25hbWU9YXJjaGl2ZSBcCisgIGZpbGU6Ly9uby1zdGF0aWMtbGluay5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY0NGNkNTQyNTZkN2E2NDNhYjdiMTZlM2Y0MDliMjZiIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNmU5NzcwZjgwNDU5NzU3ZjczYmQ3MWFmODJmYmIyOWNkMzk4YjM4Mzg4Y2RmMWJlYWIzMWVhOTFhMzMxYmM2YyIKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCisjIG5lZWQgdG8gZXhwb3J0IHRoZXNlIHZhcmlhYmxlcyBmb3IgcHl0aG9uLWNvbmZpZyB0byB3b3JrCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIEVuc3VyZSB0aGUgZG9jc3RyaW5ncyBhcmUgZ2VuZXJhdGVkIGFzIG1ha2UgY2xlYW4gd2lsbCByZW1vdmUgdGhlbQorZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBkb2NzdHJpbmdzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9zaGFyZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1OTExMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTEwMV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcHlnb2JqZWN0LTIuMjcuOTEvY29uZmlndXJlLmFjIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYworLS0tIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYwkyMDExLTAyLTIzIDIyOjE0OjM3LjAwMDAwMDAwMCArMDIwMAorKysrIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTAzIDA1OjEzOjQ0LjAzNDk0OTk1NCArMDIwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyBBQ19ERUZJTkUoUFlHT0JKRUNUX01JQ1JPX1ZFUlNJT04sIHB5Z29iamVjdF9taWNyb192ZXJzaW9uLCBbcHlnb2JqZWN0IG1pY3JvIHZlcnNpb25dKQorIEFDX1NVQlNUKFBZR09CSkVDVF9NSUNST19WRVJTSU9OLCBweWdvYmplY3RfbWljcm9fdmVyc2lvbikKKworLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisgbTRfaWZkZWYoW0FNX1NJTEVOVF9SVUxFU10sIFtBTV9TSUxFTlRfUlVMRVMoeWVzKV0pCisgQU1fSU5JVF9BVVRPTUFLRShmb3JlaWduKQorIEFNX01BSU5UQUlORVJfTU9ERQorQEAgLTgyLDcgKzgyLDYgQEAKKyBtNF9pZmRlZihbTFRfT1VUUFVUXSwgW0xUX09VVFBVVF0pCisgQUNfSVNDX1BPU0lYCisgQUNfUFJPR19DQworLUFNX1BST0dfQ0NfU1REQworIEFNX1BST0dfQ0NfQ19PCisKKyAjIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIHB5dGhvbiBuZWNpc2FyeSB0byBidWlsZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0XzIuMjguMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkMzdiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJQeXRob24gR09iamVjdCBiaW5kaW5ncyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiTmV3ZXIgdmVyc2lvbnMgb2YgcHl0aG9uLXB5Z29iamVjdCBkZXBlbmQgb24gZ29iamVjdC1pbnRyb3NwZWN0aW9uIHdoaWNoIGRvZXNuJ3QgY3Jvc3MtY29tcGlsZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzciCitERVBFTkRTID0gInB5dGhvbiBweXRob24tcHlnb2JqZWN0LW5hdGl2ZSBsaWJmZmkgZ2xpYi0yLjAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJweXRob24tbmF0aXZlIGxpYmZmaS1uYXRpdmUgZ2xpYi0yLjAtbmF0aXZlIgorUkRFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworTUFKX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L3B5Z29iamVjdC8ke01BSl9WRVJ9L3B5Z29iamVjdC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKKyMgbGlidG9vbC1uYXRpdmUgZG9lc24ndCBoYXZlIGZpeGluc3RhbGwucGF0Y2ggYXBwbGllZCB3aGljaCBtZWFucworIyB0aGF0IGxpYnMgZ2V0IHJlbGlua2VkIGF0IGluc3RhbGxhdGlvbiB0aW1lLiBUaGlzIHRyaWdnZXJzIGEgCisjIHJlbGlua2luZyBhbG9uZyB0aGUgbGluZXMgb2Y6CisjIGdjYyAtTC90bXAvZm9vL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYiAtbHB5Z2xpYi0yLjAtcHl0aG9uIC1vIC5saWJzL19nbGliLnNvCisjIHdoZXJlIC90bXAvZm9vIGlzIERFU1RESVIgYW5kIHB5Z2xpYi0yLjAtcHl0aG9uIG1heSBiZSBpbnN0YWxsZWQvcmVpbnN0YWxsZWQKKyMgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgZ2NjIGNvbW1hbmQgcnVucy4KKyMgSWYgdGhpcyBoYXBwZW5zIGJldHdlZW4gdGhlIGhhbmRvZmYgYmV0d2VlbiBnY2MgYW5kIGxkLCB5b3UgY2FuIHNlZToKKyMgL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxweWdsaWItMi4wLXB5dGhvbgorIyBBZGRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgbGlrZSAgaW5zdGFsbC1weWdsaWJMVExJQlJBUklFUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworIyB3b3VsZCBiZSBpZGVhbCBidXQgYXV0b21ha2UgY2FuJ3QgY29wZSB3aXRoIHRoYXQgd2l0aG91dCBtYW51YWxseSAKKyMgZGVmaW5pbmcgdGhlIHdob2xlIGZ1bmN0aW9uLiBHaXZlIHVwIGFuZCBkaXNhYmxlIHBhcmFsbGVsIG1ha2UgaW4gbmF0aXZlIGJ1aWxkcy4KK1BBUkFMTEVMX01BS0VJTlNUX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYTY0OTAwYjI3NGM0NjYxYTVjMzJlNTI5MjI5NzdmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZGE4OGMxNjlhNTZlZmNjYzUxNmNlYmQ5MjM3ZGEzZmU1MThhMzQzMDk1YTY2NDYwN2IzNjhmZTIxZGY5NWI2IgorUyA9ICIke1dPUktESVJ9L3B5Z29iamVjdC0ke1BWfSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHV0aWxzLWJhc2UgcGtnY29uZmlnCisKKyMgbmVjZXNzYXJ5IHRvIGxldCB0aGUgY2FsbCBmb3IgcHl0aG9uLWNvbmZpZyBzdWNjZWVkCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK1BBQ0tBR0VTICs9ICIke1BOfS1saWIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tdGV4dHV0aWxzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vcHl0aG9uKiIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0gJHtkYXRhZGlyfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MThmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDkwIEBACisjIyB0aGlzIG9uZSBpcyBjb21tb25seSB1c2VkIHdpdGggQU1fUEFUSF9QWVRIT05ESVIgLi4uCitkbmwgQU1fQ0hFQ0tfUFlNT0QoTU9ETkFNRSBbLFNZTUJPTCBbLEFDVElPTi1JRi1GT1VORCBbLEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCitkbmwgQ2hlY2sgaWYgYSBtb2R1bGUgY29udGFpbmluZyBhIGdpdmVuIHN5bWJvbCBpcyB2aXNpYmxlIHRvIHB5dGhvbi4KK0FDX0RFRlVOKEFNX0NIRUNLX1BZTU9ELAorW0FDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSkKK3B5X21vZF92YXI9YGVjaG8gJDFbJ18nXSQyIHwgc2VkICd5JS4vKy0lX19wXyUnYAorQUNfTVNHX0NIRUNLSU5HKGZvciBpZmVsc2UoWyQyXSxbXSwsWyQyIGluIF0pcHl0aG9uIG1vZHVsZSAkMSkKK0FDX0NBQ0hFX1ZBTChweV9jdl9tb2RfJHB5X21vZF92YXIsIFsKK2lmZWxzZShbJDJdLFtdLCBbcHJvZz0iCitpbXBvcnQgc3lzCit0cnk6CisgICAgICAgIGltcG9ydCAkMQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiXSwgW3Byb2c9IgoraW1wb3J0ICQxCiskMS4kMiJdKQoraWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JkFDX0ZEX0NDIDI+JkFDX0ZEX0NDCisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorXSkKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKyAgaWZlbHNlKFskM10sIFtdLCwgWyQzCitdKWRubAorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorICBpZmVsc2UoWyQ0XSwgW10sLCBbJDQKK10pZG5sCitmaQorXSkKKworZG5sIGEgbWFjcm8gdG8gY2hlY2sgZm9yIGFiaWxpdHkgdG8gY3JlYXRlIHB5dGhvbiBleHRlbnNpb25zCitkbmwgIEFNX0NIRUNLX1BZVEhPTl9IRUFERVJTKFtBQ1RJT04tSUYtUE9TU0lCTEVdLCBbQUNUSU9OLUlGLU5PVC1QT1NTSUJMRV0pCitkbmwgZnVuY3Rpb24gYWxzbyBkZWZpbmVzIFBZVEhPTl9JTkNMVURFUworQUNfREVGVU4oW0FNX0NIRUNLX1BZVEhPTl9IRUFERVJTXSwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGhlYWRlcnMgcmVxdWlyZWQgdG8gY29tcGlsZSBweXRob24gZXh0ZW5zaW9ucykKK2RubCBkZWR1Y2UgUFlUSE9OX0lOQ0xVREVTCitBQ19BUkdfV0lUSChweXRob24taW5jbHVkZXMsCisJWyAgLS13aXRoLXB5dGhvbi1pbmNsdWRlcz1ESVIgIHBhdGggdG8gUHl0aG9uIGluY2x1ZGVzXSwgcHlfZXhlY19wcmVmaXg9JHdpdGh2YWwpCitpZiB0ZXN0IHgkcHlfZXhlY19wcmVmaXggIT0geDsgdGhlbgorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitlbHNlCitweV9wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5wcmVmaXgiYAorcHlfZXhlY19wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5leGVjX3ByZWZpeCJgCitQWVRIT05fSU5DTFVERVM9Ii1JJHtweV9wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitpZiB0ZXN0ICIkcHlfcHJlZml4IiAhPSAiJHB5X2V4ZWNfcHJlZml4IjsgdGhlbgorICBQWVRIT05fSU5DTFVERVM9IiRQWVRIT05fSU5DTFVERVMgLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZmkKK2ZpCitBQ19TVUJTVChQWVRIT05fSU5DTFVERVMpCitkbmwgY2hlY2sgaWYgdGhlIGhlYWRlcnMgZXhpc3Q6CitzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCitDUFBGTEFHUz0iJENQUEZMQUdTICRQWVRIT05fSU5DTFVERVMiCitBQ19UUllfQ1BQKFsjaW5jbHVkZSA8UHl0aG9uLmg+XSxkbmwKK1tBQ19NU0dfUkVTVUxUKGZvdW5kKQorJDFdLGRubAorW0FDX01TR19SRVNVTFQobm90IGZvdW5kKQorJDJdKQorQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorXSkKKworZG5sCitkbmwgSkhfQUREX0NGTEFHKEZMQUcpCitkbmwgY2hlY2tzIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgdGhlIGdpdmVuIGZsYWcsIGFuZCBpZiBzbywgYWRkcworZG5sIGl0IHRvICRDRkxBR1MuICBJZiB0aGUgZmxhZyBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGxpc3QsIHRoZW4gdGhlCitkbmwgY2hlY2sgaXMgbm90IHBlcmZvcm1lZC4KK0FDX0RFRlVOKFtKSF9BRERfQ0ZMQUddLAorWworY2FzZSAiICRDRkxBR1MgIiBpbgorKkA8OkBcCVwgQDo+QCQxQDw6QFwJXCBAOj5AKikKKyAgOzsKKyopCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgJDEiCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBbJF1DQyB1bmRlcnN0YW5kcyAkMV0pCisgIEFDX1RSWV9DT01QSUxFKFtdLCBbXSwgW2poX2hhc19vcHRpb249eWVzXSwgW2poX2hhc19vcHRpb249bm9dKQorICBBQ19NU0dfUkVTVUxUKCRqaF9oYXNfb3B0aW9uKQorICBpZiB0ZXN0ICRqaF9oYXNfb3B0aW9uID0gbm87IHRoZW4KKyAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgZmkKKyAgOzsKK2VzYWNdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWRkLWd0ay10eXBlcy5kZWZzLWludG8tZ2RrLmMtZGVwZW5kZW5jZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwZjljZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworYWRkIGd0ay10eXBlcy5kZWZzIGludG8gZ2RrLmMgZGVwZW5kZW5jZQorCitnZGsuYyBkZXBlbmRzIG9uIGd0ay10eXBlcy5kZWZzIGJ1dAorZ2RrL01ha2VmaWxlLmFtIG1pc3MgdGhpcy4gVGhpcyB3aWxsIGNhdXNlCitidWlsZCBlcnJvciBzb21ldGltZXMgd2hlbiBidWlsdAord2l0aCBtdWx0aS1qb2JiaW5nLCBzbyBhZGQgZ3RrLXR5cGVzLmRlZnMgaW50bworZ2RrLmMgZGVwZW5kZW5jZS4KKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGd0ay9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9NYWtlZmlsZS5hbSBiL2d0ay9NYWtlZmlsZS5hbQoraW5kZXggN2JiNWQwYy4uNGE4ODM1MSAxMDA2NDQKKy0tLSBhL2d0ay9NYWtlZmlsZS5hbQorKysrIGIvZ3RrL01ha2VmaWxlLmFtCitAQCAtMjE0LDcgKzIxNCw3IEBAIGd0a3VuaXhwcmludC5kZWZzOiAkKEdUS1VOSVhQUklOVF9ERUZTKSBNYWtlZmlsZQorIGd0a3VuaXhwcmludC10eXBlcy5kZWZzOiAkKEdUS1VOSVhQUklOVF9UWVBFU19ERUZTKSBNYWtlZmlsZQorIAkkKENSRUFURURFRlMpICRAICQoR1RLVU5JWFBSSU5UX1RZUEVTX0RFRlMpCisgCistZ2RrLmM6IGdkay10eXBlcy5kZWZzIGdkay5kZWZzICQoR0RLX09WRVJSSURFUykKKytnZGsuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMgZ2RrLmRlZnMgJChHREtfT1ZFUlJJREVTKQorIGd0ay5jOiBnZGstdHlwZXMuZGVmcyBndGstdHlwZXMuZGVmcyBndGsuZGVmcyBnZGstdHlwZXMuZGVmcyAkKEdUS19PVkVSUklERVMpCisgX2d0a19sYV9DRkxBR1MgPSAkKFBZQ0FJUk9fQ0ZMQUdTKSAkKEdUS19DRkxBR1MpCisgX2d0a19sYV9MREZMQUdTID0gJChjb21tb25fbGRmbGFncykgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IGluaXRfZ3RrCistLSAKKzEuNy40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1ndGt1bml4cHJpbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzBlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcHlndGstMi4yNC4wL2d0ay9ndGt1bml4cHJpbnQub3ZlcnJpZGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjI0LjAub3JpZy9ndGsvZ3RrdW5peHByaW50Lm92ZXJyaWRlCisrKysgcHlndGstMi4yNC4wL2d0ay9ndGt1bml4cHJpbnQub3ZlcnJpZGUKK0BAIC0xMDIsMTEgKzEwMiw2IEBAIF93cmFwX2d0a19wcmludF9qb2JfZ2V0X3N1cmZhY2UoUHlHT2JqZWMKKyAgICAgaWYgKHB5Z19lcnJvcl9jaGVjaygmZXJyb3IpKQorICAgICAgICAgcmV0dXJuIE5VTEw7CisgCistI2lmIFBZQ0FJUk9fVkVSU0lPTl9IRVggPj0gMHgxMDEwNjAwCistICAgIHJldHVybiBQeWNhaXJvU3VyZmFjZV9Gcm9tU3VyZmFjZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKSwgTlVMTCk7CistI2Vsc2UKKy0gICAgcmV0dXJuIFB5Y2Fpcm9TdXJmYWNlX0Zyb21TdXJmYWNlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpLCBOVUxMLCBOVUxMKTsKKy0jZW5kaWYKKyB9CisgJSUKKyBvdmVycmlkZSBndGtfcHJpbnRfam9iX3NlbmQga3dhcmdzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtcHlndGstMi4wLnBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE1NjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBweWd0ay0yLjI0LjAvcHlndGstMi4wLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4yNC4wLm9yaWcvcHlndGstMi4wLnBjLmluCisrKysgcHlndGstMi4yNC4wL3B5Z3RrLTIuMC5wYy5pbgorQEAgLTEsNSArMSw2IEBACisgcHJlZml4PUBwcmVmaXhACisgZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorIGluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisgZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorIGRhdGFkaXI9QGRhdGFkaXJACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3MzA5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL25vZG9jcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBweWd0ay0yLjE3LjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjE3LjAub3JpZy9NYWtlZmlsZS5hbQorKysrIHB5Z3RrLTIuMTcuMC9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBAIGlmIEJVSUxEX0dUSworICAgR1RLX1NVQkRJUiA9IGd0aworIGVuZGlmCisgCistU1VCRElSUyA9IC4gJChHVEtfU1VCRElSKSBleGFtcGxlcyB0ZXN0cyBkb2NzCisrU1VCRElSUyA9IC4gJChHVEtfU1VCRElSKSBleGFtcGxlcyB0ZXN0cworIAorIFBMQVRGT1JNX1ZFUlNJT04gPSAyLjAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMwMzhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHJldmVudF90b19nZXRfZGlzcGxheV9kdXJpbmdfaW1wb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcHlndGstMi4xMC40L2d0ay9fX2luaXRfXy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Z3RrLTIuMTAuNC5vcmlnL2d0ay9fX2luaXRfXy5weQkyMDA3LTExLTI3IDE5OjI3OjA1LjAwMDAwMDAwMCAtMDMwMAorKysrIHB5Z3RrLTIuMTAuNC9ndGsvX19pbml0X18ucHkJMjAwNy0xMS0yNyAxOToyODoyMi4wMDAwMDAwMDAgLTAzMDAKK0BAIC03OCw3ICs3OCw4IEBACisgCisga2V5c3ltcyA9IExhenlNb2R1bGUoJ2tleXN5bXMnLCBsb2NhbHMoKSkKKyAKKy1faW5pdCgpCisraWYgbm90IGhhc2F0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdweXRob25fbGF1bmNoZXJfZW5hYmxlZCcpOgorKyAgICBfaW5pdCgpCisgCisgIyBDQVBJCisgX1B5R3RrX0FQSSA9IF9ndGsuX1B5R3RrX0FQSQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9weXRob24tcHlndGsyL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUxOGZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw5MCBAQAorIyMgdGhpcyBvbmUgaXMgY29tbW9ubHkgdXNlZCB3aXRoIEFNX1BBVEhfUFlUSE9ORElSIC4uLgorZG5sIEFNX0NIRUNLX1BZTU9EKE1PRE5BTUUgWyxTWU1CT0wgWyxBQ1RJT04tSUYtRk9VTkQgWyxBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQorZG5sIENoZWNrIGlmIGEgbW9kdWxlIGNvbnRhaW5pbmcgYSBnaXZlbiBzeW1ib2wgaXMgdmlzaWJsZSB0byBweXRob24uCitBQ19ERUZVTihBTV9DSEVDS19QWU1PRCwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitweV9tb2RfdmFyPWBlY2hvICQxWydfJ10kMiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK0FDX01TR19DSEVDS0lORyhmb3IgaWZlbHNlKFskMl0sW10sLFskMiBpbiBdKXB5dGhvbiBtb2R1bGUgJDEpCitBQ19DQUNIRV9WQUwocHlfY3ZfbW9kXyRweV9tb2RfdmFyLCBbCitpZmVsc2UoWyQyXSxbXSwgW3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgJDEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIl0sIFtwcm9nPSIKK2ltcG9ydCAkMQorJDEuJDIiXSkKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiZBQ19GRF9DQyAyPiZBQ19GRF9DQworICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKK10pCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGlmZWxzZShbJDNdLCBbXSwsIFskMworXSlkbmwKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaWZlbHNlKFskNF0sIFtdLCwgWyQ0CitdKWRubAorZmkKK10pCisKK2RubCBhIG1hY3JvIHRvIGNoZWNrIGZvciBhYmlsaXR5IHRvIGNyZWF0ZSBweXRob24gZXh0ZW5zaW9ucworZG5sICBBTV9DSEVDS19QWVRIT05fSEVBREVSUyhbQUNUSU9OLUlGLVBPU1NJQkxFXSwgW0FDVElPTi1JRi1OT1QtUE9TU0lCTEVdKQorZG5sIGZ1bmN0aW9uIGFsc28gZGVmaW5lcyBQWVRIT05fSU5DTFVERVMKK0FDX0RFRlVOKFtBTV9DSEVDS19QWVRIT05fSEVBREVSU10sCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorQUNfTVNHX0NIRUNLSU5HKGZvciBoZWFkZXJzIHJlcXVpcmVkIHRvIGNvbXBpbGUgcHl0aG9uIGV4dGVuc2lvbnMpCitkbmwgZGVkdWNlIFBZVEhPTl9JTkNMVURFUworQUNfQVJHX1dJVEgocHl0aG9uLWluY2x1ZGVzLAorCVsgIC0td2l0aC1weXRob24taW5jbHVkZXM9RElSICBwYXRoIHRvIFB5dGhvbiBpbmNsdWRlc10sIHB5X2V4ZWNfcHJlZml4PSR3aXRodmFsKQoraWYgdGVzdCB4JHB5X2V4ZWNfcHJlZml4ICE9IHg7IHRoZW4KK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZWxzZQorcHlfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucHJlZml4ImAKK3B5X2V4ZWNfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMuZXhlY19wcmVmaXgiYAorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgoraWYgdGVzdCAiJHB5X3ByZWZpeCIgIT0gIiRweV9leGVjX3ByZWZpeCI7IHRoZW4KKyAgUFlUSE9OX0lOQ0xVREVTPSIkUFlUSE9OX0lOQ0xVREVTIC1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2ZpCitmaQorQUNfU1VCU1QoUFlUSE9OX0lOQ0xVREVTKQorZG5sIGNoZWNrIGlmIHRoZSBoZWFkZXJzIGV4aXN0Ogorc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUFlUSE9OX0lOQ0xVREVTIgorQUNfVFJZX0NQUChbI2luY2x1ZGUgPFB5dGhvbi5oPl0sZG5sCitbQUNfTVNHX1JFU1VMVChmb3VuZCkKKyQxXSxkbmwKK1tBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKyQyXSkKK0NQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKK10pCisKK2RubAorZG5sIEpIX0FERF9DRkxBRyhGTEFHKQorZG5sIGNoZWNrcyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBnaXZlbiBmbGFnLCBhbmQgaWYgc28sIGFkZHMKK2RubCBpdCB0byAkQ0ZMQUdTLiAgSWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBsaXN0LCB0aGVuIHRoZQorZG5sIGNoZWNrIGlzIG5vdCBwZXJmb3JtZWQuCitBQ19ERUZVTihbSkhfQUREX0NGTEFHXSwKK1sKK2Nhc2UgIiAkQ0ZMQUdTICIgaW4KKypAPDpAXAlcIEA6PkAkMUA8OkBcCVwgQDo+QCopCisgIDs7CisqKQorICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICQxIgorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgWyRdQ0MgdW5kZXJzdGFuZHMgJDFdKQorICBBQ19UUllfQ09NUElMRShbXSwgW10sIFtqaF9oYXNfb3B0aW9uPXllc10sIFtqaF9oYXNfb3B0aW9uPW5vXSkKKyAgQUNfTVNHX1JFU1VMVCgkamhfaGFzX29wdGlvbikKKyAgaWYgdGVzdCAkamhfaGFzX29wdGlvbiA9IG5vOyB0aGVuCisgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIGZpCisgIDs7Citlc2FjXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3VwZGF0ZS1kZXBlbmRlbmNlcy1vZi1kZWZzLmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDk1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gZGMwMjRlOTA3OWJiZmZiYjQ0NDM2YmEzZTcwYTc1OGViYWQ1NTIwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJTb25nLkxpIiA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCA1IEphbiAyMDEzIDE0OjU1OjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZSBkZXBlbmRlbmNlcyBvZiBkZWZzLmMgaW4gTWFrZWZpbGUuYW0KKworSW4gZ3RrL01ha2VmaWxlLmFtLCBkZWZzLmMgc2hvdWxkIGRlcGVuZGVzIG9uIGdkay10eXBlcy5kZWZzIGFuZAorZ3RrLXR5cGVzLmRlZnMsIG90aGVyd2lzZSBpdCBmYWlscyBvY2Nhc2lvbmFsbHkgd2hlbiBwYXJhbGxlbCBjb21waWxlLgorVGhlIGVycm9yIG1lc3NhZ2U6CisiSU9FcnJvcjogW0Vycm5vIDJdIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICdndGstdHlwZXMuZGVmcyciCisKK0FkZCB0aGVtIHRvIGRlcGVuZGVuY2VzIG9mIGRlZnMuYyB0byBmaXggdGhpcyBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI3MDYKKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGd0ay9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2d0ay9NYWtlZmlsZS5hbSBiL2d0ay9NYWtlZmlsZS5hbQoraW5kZXggN2JiNWQwYy4uOTE4MjZjYiAxMDA2NDQKKy0tLSBhL2d0ay9NYWtlZmlsZS5hbQorKysrIGIvZ3RrL01ha2VmaWxlLmFtCitAQCAtMjg5LDcgKzI4OSw3IEBAIGlmIEhBVkVfR0lPX1RZUEVTX0RFRlMKKyBleHRyYV9jb2RlZ2VuX2FyZ3MgKz0gLS1yZWdpc3RlciAkKFBZR09CSkVDVF9ERUZTRElSKS9naW8tdHlwZXMuZGVmcworIGVuZGlmCisgCistLmRlZnMuYzogCisrLmRlZnMuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMKKyAJKCQoUFlUSE9OKSAkKENPREVHRU5ESVIpL2NvZGVnZW4ucHkgXAorIAkgICAkKFBZR1RLX0NPREVHRU5fREVGSU5FUykgXAorIAkgICAgLUkgJChzcmNkaXIpIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjMzNhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrXzIuMjQuMC5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIEdUSysgVUkgdG9vbGtpdCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorIyBuZWVkcyBndGsrIDIuMTcueAorREVQRU5EUyA9ICJndGsrIGxpYmdsYWRlIHB5dGhvbi1weWNhaXJvIHB5dGhvbi1weWdvYmplY3QiCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tc2hlbGwgcHl0aG9uLXB5Y2Fpcm8gcHl0aG9uLXB5Z29iamVjdCIKK1BST1ZJREVTID0gInB5dGhvbi1weWd0azIiCitTUkNOQU1FID0gInB5Z3RrIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL3B5Z3RrLzIuMjQvJHtTUkNOQU1FfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWd0a3VuaXhwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2NzLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LXB5Z3RrLTIuMC5wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8vdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImExMDUxZDU3OTRmZDc2OTZkM2MxYWY2NDIyZDE3YTQ5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNkMWMxZWEyNjViZDYzZmY2NjllOTJhMmQzYzJhODhlYjI2YmNkOWU1MzYzZTBmODJjODk2ZTY0OWYyMDY5MTIiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3MgLS13aXRoLXB5dGhvbi1pbmNsdWRlcz0ke1NUQUdJTkdfSU5DRElSfS8uLi8iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0dXRpbHMtYmFzZQorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KKwlzZWQgLWkgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZSBkZWZzZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfS9weWdvYmplY3QvMi4wL2RlZnNcIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHlndGtpbmNsdWRlZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19JTkNESVJ9L3B5Z3RrLTIuMFwiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZT1kYXRhZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfVwiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZSBjb2RlZ2VuZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfS9weWdvYmplY3QvMi4wL2NvZGVnZW5cIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Zml4eHJlZiBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn0vcHlnb2JqZWN0L3hzbC9maXh4cmVmLnB5XCI6ZyBcCisJCSR7U30vY29uZmlndXJlLmFjCit9CisKKyMgZGlydHkgZml4ICMyOiBmaXggYnVpbGQgc3lzdGVtIHBhdGhzIGxlYWtpbmcgaW4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAnMXN8XiMhLipweXRob258IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJHtEfSR7YmluZGlyfS9weWd0ay1kZW1vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1kZW1vIgorRklMRVNfJHtQTn0tZGVtbyA9ICIgJHtiaW5kaXJ9L3B5Z3RrLWRlbW8gJHtsaWJkaXJ9L3B5Z3RrICIKK1JERVBFTkRTXyR7UE59LWRlbW8gPSAicHl0aG9uLXB5Z3RrIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLWxhbmciCisKKyMgdG9kbzogcmV2YW1wIHBhY2thZ2luZywgcGFja2FnZSBkZW1vIHNlcGVyYXRseQorRklMRVNfJHtQTn0tZGV2ICs9ICIgJHtsaWJkaXJ9L3B5Z3RrLzIuMCAke2JpbmRpcn0vcHlndGstKiAke2RhdGFkaXJ9L3B5Z3RrLzIuMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZWYxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIHB5dGhvbi1weXJleF8ke1BWfS5iYgoraW5oZXJpdCBuYXRpdmUgcHl0aG9ubmF0aXZlCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCitQUiA9ICJyMyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNThjMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgvcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHlyZXgtMC45LjguNC9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHlyZXgtMC45LjguNC5vcmlnL1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKKysrKyBQeXJleC0wLjkuOC40L1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKK0BAIC0xNSw3ICsxNSw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgd2FybmluZ3MgPSBOb25lCisgCisgY2xhc3MgRXh0ZW5zaW9uKF9FeHRlbnNpb24uRXh0ZW5zaW9uKToKKy0gICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyArIFwKKysgICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyBvciAiIiArIFwKKyAgICAgIiIicHlyZXhfaW5jbHVkZV9kaXJzIDogW3N0cmluZ10KKyAgICAgICAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBQeXJleCBoZWFkZXIgZmlsZXMgKC5weGQpIChpbgorICAgICAgICAgVW5peCBmb3JtIGZvciBwb3J0YWJpbGl0eSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXhfMC45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkZDJlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTGFuZ3VhZ2UgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzIgorREVTQ1JJUFRJT04gPSAiUHlyZXggaXMgYSBsYW5ndWFnZSBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzLiBcCitJdCdzIGRlc2lnbmVkIHRvIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIG5pY2UsIGhpZ2gtbGV2ZWwsIGVhc3ktdG8tdXNlIHdvcmxkIG9mIFB5dGhvbiBcCithbmQgdGhlIG1lc3N5LCBsb3ctbGV2ZWwgd29ybGQgb2YgQy4iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT03NzFkNDcyZjUzZjkzMzAzM2Y1N2VlZWU3ODA4ZTViZCIKK1NSQ05BTUUgPSAiUHlyZXgiCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorICBmaWxlOi8vcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxNWRlZTY3ZDE1ZDQzOTM4NDFlMmQ2MGU4MzQxOTQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmODdkZjA2ODMxZDBiMzQxMmViNGJjOWQzZmMyZWU3YmZhZTFiOTEzZDdkYThjMjNhYjJiZjU2OTlmYjZiNTAiCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0ke2Jhc2VfbGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvUHlyZXgvQ29tcGlsZXIvTGV4aWNvbi5waWNrbGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlODlhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjMuNi5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcHl0aG9uLXNjb25zXyR7UFZ9LmJiCitpbmhlcml0IG5hdGl2ZSBweXRob25uYXRpdmUKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9zY29ucyBTQ09OU19MSUJfRElSPScke1NUQUdJTkdfRElSX0hPU1R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9JworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjMuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGFkN2QzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSBDb25zdHJ1Y3Rpb24gdG9vbCAobWFrZS9hdXRvdG9vbHMgcmVwbGFjZW1lbnQpIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0yM2JjMTUzMGM1NWU5ZjBkMWI3MDkwNTZiY2VhMjM3ZCIKK1NSQ05BTUUgPSAic2NvbnMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Njb25zL3Njb25zLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjljNmExYzNjNzE2Y2JlNWYxNjUxNWYxNjNjOTFkOTI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4YWRhYTM1MWQ4ZjRlNDA2OGE1YmYxODk0YmRkN2Y4NWIzOTBjOGMzZjgwZDQzN2NmOGJiMjY2MDEyNDA0ZGYiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTJiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzE4LjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJEb3dubG9hZHMsIGJ1aWxkcywgaW5zdGFsbHMsIHVwZ3JhZGVzLCBhbmQgdW5pbnN0YWxscyBQeXRob24gcGFja2FnZXMiCitIT01FUEFHRSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NldHVwdG9vbHMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUHl0aG9uLTIuMCB8IFpQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXR1cC5weTtiZWdpbmxpbmU9Nzg7ZW5kbGluZT03ODttZDU9OGEzMTQyNzBkZDdhOGRiY2E3NDE3NzU0MTVmMTcxNmUiCisKK1NSQ05BTUUgPSAic2V0dXB0b29scyIKKworUFJPVklERVMgPSAicHl0aG9uLWRpc3RyaWJ1dGUiCisKK0RFUEVORFMgKz0gInB5dGhvbiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24tbmF0aXZlIgorCitpbmhlcml0IGRpc3R1dGlscworCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NldHVwdG9vbHMvc2V0dXB0b29scy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNTJiNGU0ODkzOWVmMzExZDcyMDRmOGZlOTQwNzY0ZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDk5NGE1OGRmMjdlYTVkYzUyMzc4MmE2MDEzNTdhMjE5OGI3NDkzZGNjOTlhMzBkNTE4MjdhMjM1ODViNWIxZCIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzCit9CisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uLXN0cmluZ29sZCBcCisgIHB5dGhvbi1lbWFpbCBcCisgIHB5dGhvbi1zaGVsbCBcCisgIHB5dGhvbi1kaXN0dXRpbHMgXAorICBweXRob24tY29tcHJlc3Npb24gXAorIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyIKKworUlJFUExBQ0VTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUlBST1ZJREVTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjdmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1mb3ItcnBtLWlnbm9yZXNpemUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorcHl0aG9uLXNtYXJ0cG06IEFkZCBjaGVja2luZyBmb3IgInJwbS1pZ25vcmVzaXplIiBvcHRpb24KKworVGhlIGRvX3Jvb3RmcyB0YWtlcyBhIHZlcnkgbG9uZyB0aW1lIHdoZW4gYnVpbGQgaG9zdCBoYXMgbW91bnRlZCBtYW55IE5GUworZGV2aWNlcy4gc3lzY2FsbCBsc3RhdCgpIHdhcyBiZWluZyBjYWxsZWQgb24gZXZlcnkgZmlsZXN5c3RlbSBtb3VudGVkIG9uIHRoZQorYnVpbGQgaG9zdCBkdXJpbmcgYnVpbGRpbmcuCitUaGUgcmVhc29uIGZvciB0aGUgbHN0YXQoKSBpcyB0aGF0IHJwbSBpcyB2ZXJpZnlpbmcgdGhhdCBlbm91Z2ggZnJlZSBkaXNrIHNwYWNlCitpcyBhdmFpbGFibGUgdG8gZG8gdGhlIGluc3RhbGwuIEhvd2V2ZXIsIHNpbmNlIHRoZSBpbnN0YWxsIGlzIGludG8gdGhlIHRhcmdldAorcm9vdGZzIGl0IHNob3VsZCBub3QgbWF0dGVyIGhvdyBtdWNoIGZyZWUgc3BhY2UgdGhlcmUgaXMgaW4gdGhlIGhvc3QgbW91bnRzLgorQWRkIGNoZWNraW5nIGZvciAicnBtLWlnbm9yZXNpemUiLCBieSBpdCwgc21hcnQgY2FuIG1ha2Ugd2hldGhlciBSUE0gc2tpcAorY2hlY2tpbmcgZm9yIGRpc2tzcGFjZSB3aGVuIGluc3RhbGwgYSBycG0gcGFja2FnZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IHdlbmxpbi5rYW5nIDx3ZW5saW4ua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBzbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK2luZGV4IDVkYTllZTYuLmYwNDg4ZWMgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTI0MSw2ICsyNDEsMTAgQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX0lHTk9SRUFSQ0gKKyAKKysgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0taWdub3Jlc2l6ZSIsIEZhbHNlKToKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9ESVNLTk9ERVMKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9ESVNLU1BBQ0UKKysKKyAgICAgICAgIGlmIGZvcmNlIG9yIHJlaW5zdGFsbDoKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9SRVBMQUNFUEtHCisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRU9MREZJTEVTCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU1NTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hbHJlYWR5LWluc3RhbGxlZC1tZXNzYWdlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYTc0YTlhOWViOWQ3NTk2NGEwZTk3ODk1MGU4YjE5MWQ3YTE4ZDc2MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogRnJpLCA1IEp1biAyMDE1IDE3OjA3OjE2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNtYXJ0OiBjaGFuZ2UgImlzIGFscmVhZHkgaW5zdGFsbGVkIiBtZXNzYWdlIGZyb20gd2FybmluZyB0bworIGluZm8KKworVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgYSB3YXJuaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBzbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5ICAgICAgICAgICAgfCA0ICsrLS0KKyBzbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5IGIvc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weQoraW5kZXggNmVmOTY4Mi4uODBkNDU2YiAxMDA2NDQKKy0tLSBhL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKKysrKyBiL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKK0BAIC0xNTIsNyArMTUyLDcgQEAgZGVmIG1haW4oY3RybCwgb3B0cyk6CisgICAgICAgICAgICAgZm9yIG9iaiBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG9iai5wYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgIGlmIHBrZy5pbnN0YWxsZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyAoZm9yICVzKSBpcyBhbHJlYWR5IGluc3RhbGxlZCIpCisrICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuaW5mbyhfKCIlcyAoZm9yICVzKSBpcyBhbHJlYWR5IGluc3RhbGxlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGFyZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCitAQCAtMTg0LDcgKzE4NCw3IEBAIGRlZiBtYWluKGN0cmwsIG9wdHMpOgorICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgcGtnID0gbmFtZXNbbmFtZV1bMF0KKyAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIiVzIGlzIGFscmVhZHkgaW5zdGFsbGVkIikgJSBwa2cpCisrICAgICAgICAgICAgICAgIGlmYWNlLmluZm8oXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICB0cmFucy5lbnF1ZXVlKHBrZywgSU5TVEFMTCkKKyAKK2RpZmYgLS1naXQgYS9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkgYi9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKK2luZGV4IDk4NjU1ODQuLjE5MDg2N2IgMTAwNjQ0CistLS0gYS9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKKysrKyBiL3NtYXJ0L2ludGVyZmFjZXMvdGV4dC9pbnRlcmFjdGl2ZS5weQorQEAgLTI3OCw3ICsyNzgsNyBAQCBjbGFzcyBJbnRlcnByZXRlcihDbWQpOgorICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICBwa2cgPSBuYW1lc1tuYW1lXVswXQorICAgICAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorKyAgICAgICAgICAgICAgICAgICAgaWZhY2UuaW5mbyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5lbnF1ZXVlKHBrZywgSU5TVEFMTCkKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2NzJiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK1NhZGx5LCBzbWFydCBpcyBub3QgZGV0ZXJtaW5pc3RpYyBzbyB0aGUgc2FtZSBidWlsZCBjYW4gZ28gZG93biBtdWx0aXBsZSBkaWZmZXJlbnQKK3BhdGh3YXlzLiBXZSdkIGV4cGVjdCB0byBzZWUgdGhlIHNhbWUgd2FybmluZ3MgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlIHBhdGh3YXkKK3Rha2VuLCBpdCBtYXkgb3IgbWF5IG5vdCB3YXJuLCBwYXJ0aWN1bGFybHkgd2l0aCBSZWNvbW1lbmRzIHNpbmNlIHRoZXkncmUgb3B0aW9uYWwuCisKK0ZvciBleGFtcGxlLCB3aGVyZSBhIFJlY29tbWVuZGVkIHBhY2thZ2UgaXMgYXZhaWxhYmxlIGJ1dCBoYXMgQ29uZmxpY3RzLCB3ZSdkIGV4cGVjdAordG8gc2VlIGFuIHdhcm5pbmcgdGhhdCB3ZSBjb3VsZG4ndCBpbnN0YWxsIGl0LiBTb21lIGNvZGUgcGF0aHMgc2lsZW50bHkgaGlkZSB0aGlzCisoaXRzIGEgTE9DS0VEX0NPTkZMSUNUKS4gV2UgYWRkIHByaW50aW5nIG9mIHdhcm5pbmdzIGZvciB0aGlzIGNhc2UuCisKK0Fsc28sIGlmIHRoZXJlIGFyZSB0d28gY29tcGF0aWJsZSBmZWVkcyBhdmFpbGFibGUgKGUuZy4gaTU4NiBhbmQgY29yZTJfMzIpLCB0aGlzIAorY2hhbmdlcyB0aGUgY29kZSBwYXRoIGZyb20gZGlyZWN0IF9pbnN0YWxsKCkgdG8gX3BlbmRpbmcoKSBzaW5jZSB0aGVyZSBhcmUgbXVsdGlwbGUKK3Byb3ZpZGVycy4gVGhpcyBwYXRjaCBhZGRzIHdhcm5pbmcgaGFuZGxpbmcgdG8gX3BlbmRpbmcoKSBzbyB3ZSBkb24ndCBoaXQgaGFyZCAKK2ZhaWx1cmVzIHRoZXJlLiBUaGlzIGlzIGFzIHNlZW4gd2l0aCB0aGUgbXlzdGVyaW91cyBsaWJzcGVleGRzcCBmYWlsdXJlcyBmb3IgeDg2LWxzYgorb24gdGhlIGF1dG9idWlsZGVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQCisyMDE1LzcvMTYKKworSW5kZXg6IGdpdC9zbWFydC90cmFuc2FjdGlvbi5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CisrKysgZ2l0L3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitAQCAtNjUxLDEzICs2NTEsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgICAgICBpZiBub3QgcHJ2cGtnczoKKyAgICAgICAgICAgICAgICAgIyBObyBwYWNrYWdlcyBwcm92aWRlIGl0IGF0IGFsbC4gR2l2ZSB1cC4KKysKKysgICAgICAgICAgICAgICAgcmVhc29ucyA9IFtdCisrICAgICAgICAgICAgICAgIGZvciBwcnYgaW4gcmVxLnByb3ZpZGVkYnk6CisrICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2cGtnIGluIHBydi5wYWNrYWdlczoKKysgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRyZXMgPSBsb2NrZWRwa2dzLmdldChwcnZwa2csIE5vbmUpCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9ja2VkcmVzOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLmFwcGVuZChsb2NrX3JlYXNvbihwcnZwa2csIGxvY2tlZHJlcykpCisgICAgICAgICAgICAgICAgIGlmIHJlcXJlcXVpcmVkOgorLSAgICAgICAgICAgICAgICAgICAgcmVhc29ucyA9IFtdCistICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2IGluIHJlcS5wcm92aWRlZGJ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcnZwa2cgaW4gcHJ2LnBhY2thZ2VzOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRyZXMgPSBsb2NrZWRwa2dzLmdldChwcnZwa2csIE5vbmUpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2tlZHJlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKGxvY2tfcmVhc29uKHBydnBrZywgbG9ja2VkcmVzKSkKKyAgICAgICAgICAgICAgICAgICAgIGlmIHJlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiB1bmFibGUgdG8gaW5zdGFsbCBwcm92aWRlciBmb3IgJXM6XG4gICAgJXMiKSAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcSwgJ1xuICAgICcuam9pbihyZWFzb25zKSkKK0BAIC02NjUsNyArNjY2LDExIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBubyBwYWNrYWdlIHByb3ZpZGVzICVzIikgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEpCisgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBpZiByZWFzb25zOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiQ2FuJ3QgaW5zdGFsbCAlczogdW5hYmxlIHRvIGluc3RhbGwgcHJvdmlkZXIgZm9yICVzOlxuICAgICVzIikgJSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEsICdcbiAgICAnLmpvaW4ocmVhc29ucykpKQorKworICAgICAgICAgICAgICAgICAgICAgIyBJdCdzIG9ubHkgYSByZWNvbW1lbmQsIHNraXAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgCisgICAgICAgICAgICAgaWYgbGVuKHBydnBrZ3MpID09IDE6CitAQCAtODQ2LDYgKzg1MiwxNCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgaXNpbnN0ID0gY2hhbmdlc2V0Lmluc3RhbGxlZAorICAgICAgICAgZ2V0d2VpZ2h0ID0gc2VsZi5fcG9saWN5LmdldFdlaWdodAorIAorKyAgICAgICAgYXR0ZW1wdCA9IHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpCisrCisrICAgICAgICBkZWYgaGFuZGxlX2ZhaWx1cmUobXNnKToKKysgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKG1zZykKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIG1zZworKworICAgICAgICAgdXBkb3duID0gW10KKyAgICAgICAgIHdoaWxlIHBlbmRpbmc6CisgICAgICAgICAgICAgaXRlbSA9IHBlbmRpbmcucG9wKDApCitAQCAtODcwLDggKzg4NCw5IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgCisgICAgICAgICAgICAgICAgIGlmIG5vdCBwcnZwa2dzOgorICAgICAgICAgICAgICAgICAgICAgIyBObyBwYWNrYWdlcyBwcm92aWRlIGl0IGF0IGFsbC4gR2l2ZSB1cC4KKy0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogbm8gcGFja2FnZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVzICVzIikgJSAocGtnLCByZXEpCisrICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCBpbnN0YWxsICVzOiBubyBwYWNrYWdlICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXMgJXMiKSAlIChwa2csIHJlcSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgICAgICBpZiBsZW4ocHJ2cGtncykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgIyBNb3JlIHRoYW4gb25lIHBhY2thZ2UgcHJvdmlkZSBpdC4gV2UgdXNlIF9wZW5kaW5nIGhlcmUsCitAQCAtODk0LDkgKzkwOSwxMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwb3JkZXIsIGNzLCBsaykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBvcmRlciArPSAwLjAwMDAwMQorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFsdGVybmF0aXZlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgaW5zdGFsbCAlczogYWxsIHBhY2thZ2VzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGluZyAlcyBmYWlsZWQgdG8gaW5zdGFsbDpcbiVzIilcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHJlcSwgICJcbiIuam9pbihmYWlsdXJlcykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHJlcSwgICJcbiIuam9pbihmYWlsdXJlcykpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuc29ydCgpCisgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0U3RhdGUoYWx0ZXJuYXRpdmVzWzBdWzFdKQorICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGFsdGVybmF0aXZlcykgPT0gMToKK0BAIC05NTQsMTggKzk3MCwyMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQgYW5kIGlzaW5zdChyZXFwa2cpOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgcmVtb3ZlICVzOiByZXF1aXJpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgJXMgaXMgbG9ja2VkIikgJSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBmb3IgcmVxcGtnIGluIHJlcXBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBjaGVjayBhZ2Fpbiwgc2luY2Ugb3RoZXIgYWN0aW9ucyBtYXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlZCB0aGVpciBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KHJlcXBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxcGtnIGluIGxvY2tlZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICVzIGlzIGxvY2tlZCIpICUgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShyZXFwa2csIGNoYW5nZXNldCwgbG9ja2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLCBkZXB0aCkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCitAQCAtOTc4LDEyICs5OTYsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQgYW5kIGlzaW5zdChyZXFwa2cpOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjcy5pbnN0YWxsZWQocmVxcGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbGs6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHJlcXBrZywgY3MsIGxrLCBOb25lLCBkZXB0aCkKKyAgICAgICAgICAgICAgICAgZXhjZXB0IEZhaWxlZCwgZToKKyAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh1bmljb2RlKGUpKQorQEAgLTk5MSw5ICsxMDExLDEwIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKChnZXR3ZWlnaHQoY3MpLCBjcywgbGspKQorIAorICAgICAgICAgICAgICAgICBpZiBub3QgYWx0ZXJuYXRpdmVzOgorLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgcHJvdmlkaW5nICIKKysgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyBwcm92aWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBmYWlsZWQgdG8gaW5zdGFsbDpcbiVzIikgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHBydiwgICJcbiIuam9pbihmYWlsdXJlcykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgcHJ2LCAgIlxuIi5qb2luKGZhaWx1cmVzKSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuc29ydCgpCisgICAgICAgICAgICAgICAgIGNoYW5nZXNldC5zZXRTdGF0ZShhbHRlcm5hdGl2ZXNbMF1bMV0pCitAQCAtMTI0Niw2ICsxMjY3LDcgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldFJlcXVlc3RlZChwa2csIFRydWUpCisgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRmFpbGVkLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIkNhbid0IGluc3RhbGwgJXM6ICVzIikgJSAocGtnLCBzdHIoZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2cgaW4gY2hhbmdlc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5OGUwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaApAQCAtMCwwICsxLDE3NyBAQAorRnJvbSBiMTA1ZTdmZTgxMmRhM2NjYWY3MTU1YzBmZTE0Yzg3MjhiMGQzOWE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMCBKYW4gMjAxNCAxNDozMDo1MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBBZGQgbWVjaGFuaXNtIHRvIGF0dGVtcHQgaW5zdGFsbCB3aXRob3V0IGZhaWxpbmcKKworSW4gT3BlbkVtYmVkZGVkLCBmb3IgY29tcGxlbWVudGFyeSBhbmQgJ2F0dGVtcHRvbmx5JyBwYWNrYWdlIHByb2Nlc3NpbmcsCit3ZSBuZWVkIGEgd2F5IHRvIGluc3RydWN0IHNtYXJ0IHRvIHRyeSB0byBpbnN0YWxsLCBidXQgaWdub3JlIGFueQorZmFpbHVyZXMgKHVzdWFsbHkgY29uZmxpY3RzKS4KKworVGhpcyBvcHRpb24gb25seSB3b3JrcyBmb3IgdGhlIGluc3RhbGwgb3BlcmF0aW9uLgorCitJZiBhIGNvbXBsZW1lbnRhcnkgaW5zdGFsbCBmYWlscywgYW4gYWN0dWFsIGVycm9yIG9jY3VycmVkLCBvbmUgdGhhdAord2UgY2FuJ3QgaWdub3JlIHdpdGhvdXQgbG9zaW5nIHRoZSBlbnRpcmUgYXR0ZW1wdGVkIHRyYW5zYWN0aW9uLiAgS2VlcAordGhpcyBhcyBhbiBlcnJvciBzbyB0aGF0IHdlIGNhbiBjYXRjaCB0aGVzZSBjYXNlcyBpbiB0aGUgZnV0cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGJhY2tlbmRzL3JwbS9wbS5weSB8ICAgMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyB0cmFuc2FjdGlvbi5weSAgICAgfCAgIDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3MSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQoraW5kZXggOWJiZDk1Mi4uYmE2NDA1YSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitAQCAtMjQxLDE1ICsyNDEsNDggQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgY2IgPSBSUE1DYWxsYmFjayhwcm9nLCB1cGdyYWRlZG5hbWVzKQorICAgICAgICAgY2IuZ3JhYk91dHB1dChUcnVlKQorICAgICAgICAgcHJvYnMgPSBOb25lCisrICAgICAgICByZXRyeSA9IDAKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBwcm9icyA9IHRzLnJ1bihjYiwgTm9uZSkKKyAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgZGVsIGdldFRTLnRzCisgICAgICAgICAgICAgY2IuZ3JhYk91dHB1dChGYWxzZSkKKysgICAgICAgICAgICBpZiBwcm9icyBhbmQgc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSk6CisrICAgICAgICAgICAgICAgIGRlZiByZW1vdmVfY29uZmxpY3QocGtnTkVWUik6CisrICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGNoYW5nZXNldC5rZXlzKCk6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnTkVWUiA9PSBzdHIoa2V5KToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtrZXldCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBwa2dwYXRoc1trZXldCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoIlJlbW92aW5nICVzIGR1ZSB0byBmaWxlICVzIGNvbmZsaWN0aW5nIHdpdGggJXMiICUgKHBrZ05FVlIsIGZuYW1lLCBhbHRORVZSKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysKKysgICAgICAgICAgICAgICAgcmV0cnkgPSAxCisrICAgICAgICAgICAgICAgIGZvciBwcm9iIGluIHByb2JzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvYlsxXVswXSA9PSBycG0uUlBNUFJPQl9ORVdfRklMRV9DT05GTElDVDoKKysgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBwcm9iWzBdLnNwbGl0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IG1zZ1sxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBtc2dbN10KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gbXNnWzldCisrICAgICAgICAgICAgICAgICAgICAgICAgcGtnTkVWUiA9IHBrZ05FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IGFsdE5FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX2NvbmZsaWN0KHBrZ05FVlIpCisrICAgICAgICAgICAgICAgICAgICBlbGlmIHByb2JbMV1bMF0gPT0gcnBtLlJQTVBST0JfRklMRV9DT05GTElDVDoKKysgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBwcm9iWzBdLnNwbGl0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IG1zZ1sxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBtc2dbNV0KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gbXNnWzExXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5FVlIgPSBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jb25mbGljdChwa2dORVZSKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICByZXRyeSA9IDAKKysKKyAgICAgICAgICAgICBwcm9nLnNldERvbmUoKQorLSAgICAgICAgICAgIGlmIHByb2JzOgorKyAgICAgICAgICAgIGlmIHByb2JzIGFuZCAobm90IHJldHJ5KToKKyAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsICJcbiIuam9pbihbeFswXSBmb3IgeCBpbiBwcm9ic10pCisgICAgICAgICAgICAgcHJvZy5zdG9wKCkKKysgICAgICAgICAgICBpZiByZXRyeSBhbmQgbGVuKGNoYW5nZXNldCk6CisrICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGNoYW5nZXNldCwgcGtncGF0aHMpCisgCisgY2xhc3MgUlBNQ2FsbGJhY2s6CisgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9nLCB1cGdyYWRlZG5hbWVzKToKK2RpZmYgLS1naXQgYS9zbWFydC90cmFuc2FjdGlvbi5weSBiL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitpbmRleCA0YjkwY2I3Li4zZTA0M2U5IDEwMDY0NAorLS0tIGEvc21hcnQvdHJhbnNhY3Rpb24ucHkKKysrKyBiL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitAQCAtNTU1LDYgKzU1NSw4IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICBjaGFuZ2VzZXQuc2V0KHBrZywgSU5TVEFMTCkKKyAgICAgICAgIGlzaW5zdCA9IGNoYW5nZXNldC5pbnN0YWxsZWQKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworICAgICAgICAgIyBSZW1vdmUgcGFja2FnZXMgY29uZmxpY3RlZCBieSB0aGlzIG9uZS4KKyAgICAgICAgIGZvciBjbmYgaW4gcGtnLmNvbmZsaWN0czoKKyAgICAgICAgICAgICBmb3IgcHJ2IGluIGNuZi5wcm92aWRlZGJ5OgorQEAgLTU2NCwxMSArNTY2LDE2IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KHBydnBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW3BydnBrZ10gPSAoTE9DS0VEX0NPTkZMSUNUX0JZLCBwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKy0gICAgICAgICAgICAgICAgICAgIGlmIHBydnBrZyBpbiBsb2NrZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBjb25mbGljdGVkIHBhY2thZ2UgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbG9ja2VkIikgJSAocGtnLCBwcnZwa2cpCistICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUocHJ2cGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCistICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIHBydnBrZykpCisrICAgICAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQgY29uZmxpY3RzIHdpdGggcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIpICUgKHBrZywgcHJ2cGtnKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcnZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGNvbmZsaWN0ZWQgcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbG9ja2VkIikgJSAocGtnLCBwcnZwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHBydnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgcHJ2cGtnKSkKKyAKKyAgICAgICAgICMgUmVtb3ZlIHBhY2thZ2VzIGNvbmZsaWN0aW5nIHdpdGggdGhpcyBvbmUuCisgICAgICAgICBmb3IgcHJ2IGluIHBrZy5wcm92aWRlczoKK0BAIC01NzksMTIgKzU4NiwxOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChjbmZwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtjbmZwa2ddID0gKExPQ0tFRF9DT05GTElDVCwgcGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgICAgICBpZiBjbmZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgY29uZmxpY3RlZCBieSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbG9ja2VkIHBhY2thZ2UgJXMiKSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKy0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShjbmZwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKy0gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgY25mcGtnKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBwYWNrYWdlICVzIikgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgY25mcGtnKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbmZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgY29uZmxpY3RlZCBieSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxvY2tlZCBwYWNrYWdlICVzIikgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUoY25mcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCisrICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQoKFBFTkRJTkdfVVBET1dOLCBjbmZwa2cpKQorIAorICAgICAgICAgIyBSZW1vdmUgcGFja2FnZXMgd2l0aCB0aGUgc2FtZSBuYW1lIHRoYXQgY2FuJ3QKKyAgICAgICAgICMgY29leGlzdCB3aXRoIHRoaXMgb25lLgorQEAgLTU5NCwxMCArNjA3LDE1IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QobmFtZXBrZyk6CisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbbmFtZXBrZ10gPSAoTE9DS0VEX05PX0NPRVhJU1QsIHBrZykKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgIGlmIG5hbWVwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0IGNhbid0IGNvZXhpc3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICVzIikgJSAocGtnLCBuYW1lcGtnKQorLSAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUobmFtZXBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZXBrZyBpbiBsb2NrZWQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCBjYW4ndCBjb2V4aXN0ICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggJXMiKSAlIChwa2csIG5hbWVwa2cpCisrICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUobmFtZXBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorIAorICAgICAgICAgIyBJbnN0YWxsIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMgb25lLgorICAgICAgICAgZm9yIHJlcSBpbiBwa2cucmVxdWlyZXMgKyBwa2cucmVjb21tZW5kczoKK0BAIC0xMTc2LDYgKzExOTQsOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgc2VsZi5fcG9saWN5LnJ1blN0YXJ0aW5nKCkKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGNoYW5nZXNldCA9IHNlbGYuX2NoYW5nZXNldC5jb3B5KCkKKyAgICAgICAgICAgICBpc2luc3QgPSBjaGFuZ2VzZXQuaW5zdGFsbGVkCitAQCAtMTE5MCw3ICsxMjEwLDExIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbcGtnXSA9IChMT0NLRURfS0VFUCwgTm9uZSkKKyAgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBJTlNUQUxMOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChwa2cpIGFuZCBwa2cgaW4gbG9ja2VkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGxvY2tlZCIpICUgcGtnCisgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0KHBrZywgSU5TVEFMTCkKKyAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtwa2ddID0gKExPQ0tFRF9JTlNUQUxMLCBOb25lKQorICAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJFTU9WRToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjFiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK01ha2UgQ0hBTk5FTFNESVIgaW4gc21hcnQgZW1wdHksIHNpbmNlIHRoaXMgY2F1c2VzIGhvc3QgY29udGFtaW5hdGlvbiBpc3N1ZXMKK29uIHNvbWUgUlBNLWJhc2VkIGhvc3RzIG9uIHdoaWNoIHNtYXJ0IGlzIGFscmVhZHkgaW5zdGFsbGVkLgorCitbWU9DVE8gIzM4ODFdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2RpZmYgLS1naXQgYS9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5IGIvc21hcnQvcGx1Z2lucy9jaGFubmVsc3luYy5weQoraW5kZXggM2JhOTVmZi4uNjQ2ZDY5NiAxMDA2NDQKKy0tLSBhL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKKysrKyBiL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKK0BAIC0yMyw3ICsyMywxMSBAQCBmcm9tIHNtYXJ0LmNoYW5uZWwgaW1wb3J0ICoKKyBmcm9tIHNtYXJ0IGltcG9ydCAqCisgaW1wb3J0IG9zCisgCistQ0hBTk5FTFNESVIgPSAiL2V0Yy9zbWFydC9jaGFubmVscy8iCisrIyBGb3Igbm93LCB3ZSBsZWF2ZSB0aGUgZGVmaW5pdGlvbiBvZiBDSEFOTkVMU0RJUiBlbXB0eS4gVGhpcyBwcmV2ZW50cyBzbWFydAorKyMgZnJvbSBlcnJvbmVvdXNseSBjb25zaWRlciB0aGUgIGJ1aWxkIGhvc3QncyBjaGFubmVscyB3aGlsZSBzZXR0aW5nIHVwIGl0cworKyMgY2hhbm5lbHMgW1lPQ1RPICMzODgxXS4gSWYgdGhpcyBmZWF0dXJlIHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlLCBDSEFOTkVMU0RJUgorKyMgc2hvdWxkIGJlIHNldCB0byBhIHByb3BlciB2YWx1ZS4KKytDSEFOTkVMU0RJUiA9ICIiCisgCisgZGVmIHN5bmNDaGFubmVscyhjaGFubmVsc2RpciwgZm9yY2U9Tm9uZSk6CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODIyNjViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaApAQCAtMCwwICsxLDkxIEBACitJbXByb3ZlIGVycm9yIHJlcG9ydGluZyBpbiBzbWFydAorCitBZGQgY29kZSB0byBjaGVjayBwcm9wZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgdmFyaW91cworc21hcnQgY29tbWFuZHMuIEV4aXQgd2l0aCBlcnJvciBpZiBlcnJvbmVvdXMvYWRkaXRpb25hbCBhcmd1bWVudHMKK2FyZSBnaXZlbiBpbiB0aGUgY29tbWFuZCBsaW5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQm9nZGFuIE1hcmluZXNjdSA8Ym9nZGFuLmEubWFyaW5lc2N1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkgYi9zbWFydC91dGlsL29wdHBhcnNlLnB5CitpbmRleCA2ZmZmMWJjLi5mNDQ1YTNiIDEwMDY0NAorLS0tIGEvc21hcnQvdXRpbC9vcHRwYXJzZS5weQorKysrIGIvc21hcnQvdXRpbC9vcHRwYXJzZS5weQorQEAgLTcwLDYgKzcwLDggQEAgaW1wb3J0IHN5cywgb3MKKyBpbXBvcnQgdHlwZXMKKyBpbXBvcnQgdGV4dHdyYXAKKyBmcm9tIGdldHRleHQgaW1wb3J0IGdldHRleHQgYXMgXworK2Zyb20gc21hcnQgaW1wb3J0IEVycm9yCisraW1wb3J0IHJlCisgCisgZGVmIF9yZXByKHNlbGYpOgorICAgICByZXR1cm4gIjwlcyBhdCAweCV4OiAlcz4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBpZChzZWxmKSwgc2VsZikKK0BAIC03MTAsNiArNzEyLDEyIEBAIGNsYXNzIE9wdGlvbjoKKyAgICAgICAgICAgICBzZWxmLmFjdGlvbiwgc2VsZi5kZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcikKKyAKKyAgICAgZGVmIHRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpOgorKyAgICAgICAgIyBLZWVwIGFsbCB0aGUgb3B0aW9ucyBpbiB0aGUgY29tbWFuZCBsaW5lIGluIHRoZSAnX2dpdmVuX29wdHMnIGFycmF5CisrICAgICAgICAjIFRoaXMgd2lsbCBiZSB1c2VkIGxhdGVyIHRvIHZhbGlkYXRlIHRoZSBjb21tYW5kIGxpbmUKKysgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHBhcnNlci52YWx1ZXMsICJfZ2l2ZW5fb3B0cyIsIFtdKQorKyAgICAgICAgdXNlcl9vcHQgPSByZS5zdWIociJeXC0qIiwgIiIsIG9wdCkucmVwbGFjZSgiLSIsICJfIikKKysgICAgICAgIGdpdmVuX29wdHMuYXBwZW5kKHVzZXJfb3B0KQorKyAgICAgICAgc2V0YXR0cihwYXJzZXIudmFsdWVzLCAiX2dpdmVuX29wdHMiLCBnaXZlbl9vcHRzKQorICAgICAgICAgaWYgYWN0aW9uID09ICJzdG9yZSI6CisgICAgICAgICAgICAgc2V0YXR0cih2YWx1ZXMsIGRlc3QsIHZhbHVlKQorICAgICAgICAgZWxpZiBhY3Rpb24gPT0gInN0b3JlX2NvbnN0IjoKK0BAIC04MjEsNiArODI5LDU0IEBAIGNsYXNzIFZhbHVlczoKKyAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGF0dHIsIHZhbHVlKQorICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cikKKyAKKysgICAgIyBDaGVjayBpZiB0aGUgZ2l2ZW4gb3B0aW9uIGhhcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBhcmd1bWVudHMKKysgICAgIyBSYWlzZSBhbiBlcnJvciBpZiB0aGUgb3B0aW9uIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMKKysgICAgIyBBIG5lZ2F0aXZlIG51bWJlciBmb3IgJ25hcmdzJyBtZWFucyAiYXQgbGVhc3QgfG5hcmdzfCBhcmd1bWVudHMgYXJlIG5lZWRlZCIKKysgICAgZGVmIGNoZWNrX2FyZ3Nfb2Zfb3B0aW9uKHNlbGYsIG9wdCwgbmFyZ3MsIGVycj1Ob25lKToKKysgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHNlbGYsICJfZ2l2ZW5fb3B0cyIsIFtdKQorKyAgICAgICAgaWYgbm90IG9wdCBpbiBnaXZlbl9vcHRzOgorKyAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgdmFsdWVzID0gZ2V0YXR0cihzZWxmLCBvcHQsIFtdKQorKyAgICAgICAgaWYgdHlwZSh2YWx1ZXMpICE9IHR5cGUoW10pOgorKyAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgaWYgbmFyZ3MgPCAwOgorKyAgICAgICAgICAgIG5hcmdzID0gLW5hcmdzCisrICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPj0gbmFyZ3M6CisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIGlmIG5vdCBlcnI6CisrICAgICAgICAgICAgICAgIGlmIG5hcmdzID09IDE6CisrICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKSAlIG9wdAorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgYXQgbGVhc3QgJWQgYXJndW1lbnRzIikgJSAob3B0LCBuYXJncykKKysgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCisrICAgICAgICBlbGlmIG5hcmdzID09IDA6CisrICAgICAgICAgICAgaWYgbGVuKCB2YWx1ZXMgKSA9PSAwOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID09IG5hcmdzOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICBpZiBub3QgZXJyOgorKyAgICAgICAgICAgICAgICBpZiBuYXJncyA9PSAxOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgb25lIGFyZ3VtZW50IikgJSBvcHQKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzICVkIGFyZ3VtZW50cyIpICUgKG9wdCwgbmFyZ3MpCisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgorKworKyAgICAjIENoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcHRpb25zIGluICdhY3RsaXN0JyB3YXMgZ2l2ZW4gYXMgYW4gYXJndW1lbnQKKysgICAgIyB0byB0aGUgY29tbWFuZCAnY21kbmFtZScKKysgICAgZGVmIGVuc3VyZV9hY3Rpb24oc2VsZiwgY21kbmFtZSwgYWN0bGlzdCk6CisrICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihzZWxmLCAiX2dpdmVuX29wdHMiLCBbXSkKKysgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0bGlzdDoKKysgICAgICAgICAgICBpZiBhY3Rpb24gaW4gZ2l2ZW5fb3B0czoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICByYWlzZSBFcnJvciwgXygiTm8gYWN0aW9uIHNwZWNpZmllZCBmb3IgY29tbWFuZCAnJXMnIikgJSBjbWRuYW1lCisrCisrICAgICMgQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBhcmd1bWVudHMgbGVmdCBhZnRlciBwYXJzaW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kCisrICAgICMgcmFpc2UgYW4gZXJyb3IgaWYgc3VjaCBhcmd1bWVudHMgYXJlIGZvdW5kCisrICAgIGRlZiBjaGVja19yZW1haW5pbmdfYXJncyhzZWxmKToKKysgICAgICAgIGlmIHNlbGYuYXJnczoKKysgICAgICAgICAgICByYWlzZSBFcnJvciwgXygiSW52YWxpZCBhcmd1bWVudChzKSAnJXMnIiAlIHN0cihzZWxmLmFyZ3MpKQorIAorIGNsYXNzIE9wdGlvbkNvbnRhaW5lcjoKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA3ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1yZWNvbW1lbmRzLnBhdGNoCkBAIC0wLDAgKzEsMzgxIEBACitIYW5kbGUgcmVjb21tZW5kZWQgcGFja2FnZXMgaW4gY29yZSBhbmQgcnBtIGJhY2tlbmRzCisKK0lkZW50aWZ5IGFuZCBzdG9yZSByZWNvbW1lbmRlZCBwYWNrYWdlcyBpbiB0aGUgY2FjaGUsIGFkZCBhIHF1ZXJ5IG9wdGlvbgordG8gcmVhZCB0aGVtIGFuZCBpZ25vcmUgdGhlbSBpZiB0aGV5IGFyZSBub3QgcHJlc2VudCB3aGVuIGluc3RhbGxpbmcuCisKK0luaXRpYWwgaWRlbnRpZmljYXRpb24gY29kZSBmcm9tIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK2luZGV4IDkzMzJlYTAuLjRmY2ZiZWUgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC0yMjUsNiArMjI1LDUyIEBAIGNsYXNzIFJQTVBhY2thZ2UoUGFja2FnZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgc3JlY3MgPSBmayhzZWxmLnJlY29tbWVuZHMpCisrICAgICAgICBvcmVjcyA9IGZrKG90aGVyLnJlY29tbWVuZHMpCisrICAgICAgICBpZiBzcmVjcyAhPSBvcmVjczoKKysgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgaWYgc3JlYy5uYW1lWzBdID09ICIvIiBvciBzcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIG9yZWMubmFtZVswXSA9PSAiLyIgb3Igb3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgc3JlY3MgPSBmayhzZWxmLnJlY29tbWVuZHMpCisrICAgICAgICBvcmVjcyA9IGZrKG90aGVyLnJlY29tbWVuZHMpCisrICAgICAgICBpZiBzcmVjcyAhPSBvcmVjczoKKysgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgaWYgc3JlYy5uYW1lWzBdID09ICIvIiBvciBzcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIG9yZWMubmFtZVswXSA9PSAiLyIgb3Igb3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgcmV0dXJuIFRydWUKKyAKKyAgICAgZGVmIGNvZXhpc3RzKHNlbGYsIG90aGVyKToKK2RpZmYgLS1naXQgYS9zbWFydC9jY2FjaGUuYyBiL3NtYXJ0L2NjYWNoZS5jCitpbmRleCA3MTkzMTg1Li44YjY2NTE1IDEwMDY0NAorLS0tIGEvc21hcnQvY2NhY2hlLmMKKysrKyBiL3NtYXJ0L2NjYWNoZS5jCitAQCAtNTAwLDYgKzUwMCw0NiBAQCBQYWNrYWdlX2VxdWFscyhQYWNrYWdlT2JqZWN0ICpzZWxmLCBQYWNrYWdlT2JqZWN0ICpvdGhlcikKKyAgICAgICAgIH0KKyAgICAgfQorIAorKyAgICBpbGVuID0gMDsKKysgICAgamxlbiA9IDA7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPnJlY29tbWVuZHMpOyBpKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKHNlbGYtPnJlY29tbWVuZHMsIGkpOworKyAgICAgICAgaWYgKCFQeU9iamVjdF9Jc0luc3RhbmNlKGl0ZW0sIChQeU9iamVjdCAqKSZEZXBlbmRzX1R5cGUpKSB7CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIkRlcGVuZHMgaW5zdGFuY2UgZXhwZWN0ZWQiKTsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChTVFIoKChEZXBlbmRzT2JqZWN0ICopaXRlbSktPm5hbWUpWzBdICE9ICcvJykKKysgICAgICAgICAgICBpbGVuICs9IDE7CisrICAgIH0KKysgICAgZm9yIChqID0gMDsgaiAhPSBQeUxpc3RfR0VUX1NJWkUob3RoZXItPnJlY29tbWVuZHMpOyBqKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKG90aGVyLT5yZWNvbW1lbmRzLCBqKTsKKysgICAgICAgIGlmICghUHlPYmplY3RfSXNJbnN0YW5jZShpdGVtLCAoUHlPYmplY3QgKikmRGVwZW5kc19UeXBlKSkgeworKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJEZXBlbmRzIGluc3RhbmNlIGV4cGVjdGVkIik7CisrICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpCisrICAgICAgICAgICAgamxlbiArPSAxOworKyAgICB9CisrICAgIGlmIChpbGVuICE9IGpsZW4pIHsKKysgICAgICAgIHJldCA9IFB5X0ZhbHNlOworKyAgICAgICAgZ290byBleGl0OworKyAgICB9CisrCisrICAgIGlsZW4gPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+cmVjb21tZW5kcyk7CisrICAgIGpsZW4gPSBQeUxpc3RfR0VUX1NJWkUob3RoZXItPnJlY29tbWVuZHMpOworKyAgICBmb3IgKGkgPSAwOyBpICE9IGlsZW47IGkrKykgeworKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+cmVjb21tZW5kcywgaSk7CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpIHsKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqICE9IGpsZW47IGorKykKKysgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gUHlMaXN0X0dFVF9JVEVNKG90aGVyLT5yZWNvbW1lbmRzLCBqKSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGlmIChqID09IGpsZW4pIHsKKysgICAgICAgICAgICAgICAgcmV0ID0gUHlfRmFsc2U7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKyBleGl0OgorICAgICBQeV9JTkNSRUYocmV0KTsKKyAgICAgcmV0dXJuIHJldDsKK0BAIC0xODEzLDYgKzE4NTMsNTkgQEAgTG9hZGVyX2J1aWxkUGFja2FnZShMb2FkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgfQorICAgICB9CisgCisrICAgIC8qIGlmIHJlY2FyZ3M6ICovCisrICAgIGlmIChyZWNhcmdzKSB7CisrICAgICAgICBpbnQgaSA9IDA7CisrICAgICAgICBpbnQgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHJlY2FyZ3MpOworKyAgICAgICAgLyogcGtnLnJlY29tbWVuZHMgPSBbXSAqLworKyAgICAgICAgUHlfREVDUkVGKHBrZ29iai0+cmVjb21tZW5kcyk7CisrICAgICAgICBwa2dvYmotPnJlY29tbWVuZHMgPSBQeUxpc3RfTmV3KGxlbik7CisrICAgICAgICAvKiBmb3IgYXJncyBpbiByZWNhcmdzOiAqLworKyAgICAgICAgZm9yICg7IGkgIT0gbGVuOyBpKyspIHsKKysgICAgICAgICAgICBQeU9iamVjdCAqYXJncyA9IFB5TGlzdF9HRVRfSVRFTShyZWNhcmdzLCBpKTsKKysgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWNvYmo7CisrICAgICAgICAgICAgUHlPYmplY3QgKnJlYzsKKysgICAgICAgICAgICAKKysgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKKysgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJdGVtIGluIHJlY2FyZ3MgaXMgbm90IGEgdHVwbGUiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIHJlYyA9IGNhY2hlLl9vYmptYXAuZ2V0KGFyZ3MpICovCisrICAgICAgICAgICAgcmVjID0gUHlEaWN0X0dldEl0ZW0oY2FjaGUtPl9vYmptYXAsIGFyZ3MpOworKyAgICAgICAgICAgIHJlY29iaiA9IChEZXBlbmRzT2JqZWN0ICopcmVjOworKworKyAgICAgICAgICAgIC8qIGlmIG5vdCByZWM6ICovCisrICAgICAgICAgICAgaWYgKCFyZWMpIHsKKysgICAgICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpIHx8IFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPCAyKSB7CisrICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgcmVjYXJncyB0dXBsZSIpOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgLyogcmVjID0gYXJnc1swXSgqYXJnc1sxOl0pICovCisrICAgICAgICAgICAgICAgIGNhbGxhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKTsKKysgICAgICAgICAgICAgICAgcmVjID0gUHlPYmplY3RfQ2FsbE9iamVjdChQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApLCBjYWxsYXJncyk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjYWxsYXJncyk7CisrICAgICAgICAgICAgICAgIGlmICghcmVjKSByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgcmVjb2JqID0gKERlcGVuZHNPYmplY3QgKilyZWM7CisrCisrICAgICAgICAgICAgICAgIC8qIGNhY2hlLl9vYmptYXBbYXJnc10gPSByZWMgKi8KKysgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0oY2FjaGUtPl9vYmptYXAsIGFyZ3MsIHJlYyk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWMpOworKworKyAgICAgICAgICAgICAgICAvKiBjYWNoZS5fcmVjb21tZW5kcy5hcHBlbmQocmVjKSAqLworKyAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGNhY2hlLT5fcmVjb21tZW5kcywgcmVjKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogcmVscGtncy5hcHBlbmQocmVjLnBhY2thZ2VzKSAqLworKyAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocmVscGtncywgcmVjb2JqLT5wYWNrYWdlcyk7CisrCisrICAgICAgICAgICAgLyogcGtnLnJlY29tbWVuZHMuYXBwZW5kKHJlYykgKi8KKysgICAgICAgICAgICBQeV9JTkNSRUYocmVjKTsKKysgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocGtnb2JqLT5yZWNvbW1lbmRzLCBpLCByZWMpOworKyAgICAgICAgfQorKyAgICB9CisrCisgICAgIC8qIGlmIHVwZ2FyZ3M6ICovCisgICAgIGlmICh1cGdhcmdzKSB7CisgICAgICAgICBpbnQgaSA9IDA7CitAQCAtMjU5Miw2ICsyNjg1LDE2IEBAIENhY2hlX3Jlc2V0KENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socmVxb2JqLT5wcm92aWRlZGJ5KSkKKyAgICAgICAgICAgICBMSVNUX0NMRUFSKHJlcW9iai0+cHJvdmlkZWRieSk7CisgICAgIH0KKysgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPl9yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworKyAgICAgICAgRGVwZW5kc09iamVjdCAqcmVxb2JqOworKyAgICAgICAgUHlPYmplY3QgKnJlcTsKKysgICAgICAgIHJlcSA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5fcmVjb21tZW5kcywgaSk7CisrICAgICAgICByZXFvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlcTsKKysgICAgICAgIExJU1RfQ0xFQVIocmVxb2JqLT5wYWNrYWdlcyk7CisrICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlcW9iai0+cHJvdmlkZWRieSkpCisrICAgICAgICAgICAgTElTVF9DTEVBUihyZXFvYmotPnByb3ZpZGVkYnkpOworKyAgICB9CisgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5fdXBncmFkZXMpOworICAgICBmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisgICAgICAgICBEZXBlbmRzT2JqZWN0ICp1cGdvYmo7CitAQCAtMjgzNCw2ICsyOTM3LDMwIEBAIENhY2hlX19yZWxvYWQoQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgIGZvciByZWMgaW4gcGtnLnJlY29tbWVuZHM6CisrICAgICAgICAgICAgICAgICAgICAgICByZWMucGFja2FnZXMuYXBwZW5kKHBrZykKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYyBub3QgaW4gcmVjb21tZW5kczoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRzW3JlY10gPSBUcnVlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqbWFwW3JlYy5nZXRJbml0QXJncygpXSA9IHJlYworKyAgICAgICAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBrZy0+cmVjb21tZW5kcykpIHsKKysgICAgICAgICAgICAgICAgICAgIGtsZW4gPSBQeUxpc3RfR0VUX1NJWkUocGtnLT5yZWNvbW1lbmRzKTsKKysgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgIT0ga2xlbjsgaysrKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShwa2ctPnJlY29tbWVuZHMsIGspOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQoKChEZXBlbmRzT2JqZWN0ICopcmVjKS0+cGFja2FnZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilwa2cpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUHlEaWN0X0dldEl0ZW0ocmVjb21tZW5kcywgcmVjKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNvbW1lbmRzLCByZWMsIFB5X1RydWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZWMsICJnZXRJbml0QXJncyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3MpIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShvYmptYXAsIGFyZ3MsIHJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHVwZyBpbiBwa2cudXBncmFkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB1cGcucGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHVwZyBub3QgaW4gdXBncmFkZXM6CitAQCAtMzA5Nyw2ICszMjI0LDQ3IEBAIENhY2hlX2xpbmtEZXBzKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICB9CisgCisrICAgIC8qIHJlY25hbWVzID0ge30gKi8KKysgICAgcmVjbmFtZXMgPSBQeURpY3RfTmV3KCk7CisrICAgIC8qIGZvciByZWMgaW4gc2VsZi5fcmVjb21tZW5kczogKi8KKysgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPl9yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworKyAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5fcmVjb21tZW5kcywgaSk7CisrCisrICAgICAgICAvKiBmb3IgbmFtZSBpbiByZWMuZ2V0TWF0Y2hOYW1lcygpOiAqLworKyAgICAgICAgUHlPYmplY3QgKm5hbWVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZWMsICJnZXRNYXRjaE5hbWVzIiwgTlVMTCk7CisrICAgICAgICBQeU9iamVjdCAqc2VxID0gUHlTZXF1ZW5jZV9GYXN0KG5hbWVzLCAiZ2V0TWF0Y2hOYW1lcygpIHJldHVybmVkICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24tc2VxdWVuY2Ugb2JqZWN0Iik7CisrICAgICAgICBpbnQgbmFtZXNsZW47CisrICAgICAgICBpZiAoIXNlcSkgcmV0dXJuIE5VTEw7CisrICAgICAgICBuYW1lc2xlbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOworKyAgICAgICAgZm9yIChqID0gMDsgaiAhPSBuYW1lc2xlbjsgaisrKSB7CisrICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBqKTsKKysgICAgICAgICAgICAKKysgICAgICAgICAgICAvKiBsc3QgPSByZWNuYW1lcy5nZXQobmFtZSkgKi8KKysgICAgICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbShyZWNuYW1lcywgbmFtZSk7CisrCisrICAgICAgICAgICAgLyogCisrICAgICAgICAgICAgICAgaWYgbHN0OgorKyAgICAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKHJlYykKKysgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICByZWNuYW1lc1tuYW1lXSA9IFtyZWNdCisrICAgICAgICAgICAgKi8KKysgICAgICAgICAgICBpZiAobHN0KSB7CisrICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQobHN0LCByZWMpOworKyAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgIGxzdCA9IFB5TGlzdF9OZXcoMSk7CisrICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihyZWMpOworKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obHN0LCAwLCByZWMpOworKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNuYW1lcywgbmFtZSwgbHN0KTsKKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxzdCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKKysgICAgICAgIFB5X0RFQ1JFRihzZXEpOworKyAgICB9CisrCisgICAgIC8qIHVwZ25hbWVzID0ge30gKi8KKyAgICAgdXBnbmFtZXMgPSBQeURpY3RfTmV3KCk7CisgICAgIC8qIGZvciB1cGcgaW4gc2VsZi5fdXBncmFkZXM6ICovCitAQCAtMzI4Niw2ICszNDU0LDU2IEBAIENhY2hlX2xpbmtEZXBzKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgCisrICAgICAgICAvKiBsc3QgPSByZWNuYW1lcy5nZXQocHJ2Lm5hbWUpICovCisrICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbShyZWNuYW1lcywgcHJ2LT5uYW1lKTsKKysKKysgICAgICAgIC8qIGlmIGxzdDogKi8KKysgICAgICAgIGlmIChsc3QpIHsKKysgICAgICAgICAgICAvKiBmb3IgcmVjIGluIGxzdDogKi8KKysgICAgICAgICAgICBpbnQgcmVjbGVuID0gUHlMaXN0X0dFVF9TSVpFKGxzdCk7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSByZWNsZW47IGorKykgeworKyAgICAgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWMgPSAoRGVwZW5kc09iamVjdCAqKVB5TGlzdF9HRVRfSVRFTShsc3QsIGopOworKyAgICAgICAgICAgICAgICAvKiBpZiByZWMubWF0Y2hlcyhwcnYpOiAqLworKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKilyZWMsICJtYXRjaGVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk8iLCAoUHlPYmplY3QgKilwcnYpOworKyAgICAgICAgICAgICAgICBpZiAoIXJldCkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9Jc1RydWUocmV0KSkgeworKyAgICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYy5wcm92aWRlZGJ5OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5wcm92aWRlZGJ5LmFwcGVuZChwcnYpCisrICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5wcm92aWRlZGJ5ID0gW3Bydl0KKysgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlYy0+cHJvdmlkZWRieSkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJlYy0+cHJvdmlkZWRieSwgKFB5T2JqZWN0ICopcHJ2KTsKKysgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKl9sc3QgPSBQeUxpc3RfTmV3KDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihwcnYpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShfbHN0LCAwLCAoUHlPYmplY3QgKilwcnYpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWMtPnByb3ZpZGVkYnkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYy0+cHJvdmlkZWRieSA9IF9sc3Q7CisrICAgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJ2LnJlY29tbWVuZGVkYnk6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LnJlY29tbWVuZGVkYnkuYXBwZW5kKHBydikKKysgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LnJlY29tbWVuZGVkYnkgPSBbcHJ2XQorKyAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socHJ2LT5yZWNvbW1lbmRlZGJ5KSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocHJ2LT5yZWNvbW1lbmRlZGJ5LCAoUHlPYmplY3QgKilyZWMpOworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqX2xzdCA9IFB5TGlzdF9OZXcoMSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKF9sc3QsIDAsIChQeU9iamVjdCAqKXJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHBydi0+cmVjb21tZW5kZWRieSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LT5yZWNvbW1lbmRlZGJ5ID0gX2xzdDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmV0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisgICAgICAgICAvKiBsc3QgPSB1cGduYW1lcy5nZXQocHJ2Lm5hbWUpICovCisgICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbSh1cGduYW1lcywgcHJ2LT5uYW1lKTsKKyAKK0BAIC0zODIxLDYgKzQwOTQsMjEgQEAgQ2FjaGVfX3NldHN0YXRlX18oQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIC8qCisrICAgICAgICAgICBmb3IgcmVjIGluIHBrZy5yZWNvbW1lbmRzOgorKyAgICAgICAgICAgICAgIHJlYy5wYWNrYWdlcy5hcHBlbmQocGtnKQorKyAgICAgICAgICAgICAgIHJlY29tbWVuZHNbcmVjXSA9IFRydWUKKysgICAgICAgICovCisrICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBrZ29iai0+cmVjb21tZW5kcykpIHsKKysgICAgICAgICAgICBqbGVuID0gUHlMaXN0X0dFVF9TSVpFKHBrZ29iai0+cmVjb21tZW5kcyk7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSBqbGVuOyBqKyspIHsKKysgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShwa2dvYmotPnJlY29tbWVuZHMsIGopOworKyAgICAgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWNvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlYzsKKysgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChyZWNvYmotPnBhY2thZ2VzLCBwa2cpOworKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNvbW1lbmRzLCByZWMsIFB5X1RydWUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIC8qCisgICAgICAgICAgICBmb3IgdXBnIGluIHBrZy51cGdyYWRlczoKKyAgICAgICAgICAgICAgICB1cGcucGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICB1cGdyYWRlc1t1cGddID0gVHJ1ZQorZGlmZiAtLWdpdCBhL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5IGIvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKK2luZGV4IDkyNjVjZDkuLmI2ZjU2OTcgMTAwNjQ0CistLS0gYS9zbWFydC9jb21tYW5kcy9xdWVyeS5weQorKysrIGIvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKK0BAIC03NTAsNiArNzUwLDIyIEBAIGNsYXNzIFRleHRPdXRwdXQoTnVsbE91dHB1dCk6CisgICAgICAgICAgICAgbmFtZSA9IHN0cihwcnZwa2cpCisgICAgICAgICBwcmludCAiICAgICAgICIsICIlcyAoJXMpIiAlIChuYW1lLCBwcnYpCisgCisrICAgIGRlZiBzaG93UmVjb21tZW5kcyhzZWxmLCBwa2csIHJlYyk6CisrICAgICAgICBpZiBzZWxmLl9maXJzdHJlY29tbWVuZHM6CisrICAgICAgICAgICAgc2VsZi5fZmlyc3RyZWNvbW1lbmRzID0gRmFsc2UKKysgICAgICAgICAgICBwcmludCAiICIsIF8oIlJlY29tbWVuZHM6IikKKysgICAgICAgIHByaW50ICIgICAiLCByZWMKKysKKysgICAgZGVmIHNob3dSZWNvbW1lbmRzUHJvdmlkZWRCeShzZWxmLCBwa2csIHJlcSwgcHJ2LCBwcnZwa2cpOgorKyAgICAgICAgaWYgc2VsZi5fZmlyc3RyZWNvbW1lbmRzcHJvdmlkZWRieToKKysgICAgICAgICAgICBzZWxmLl9maXJzdHJlY29tbWVuZHNwcm92aWRlZGJ5ID0gRmFsc2UKKysgICAgICAgICAgICBwcmludCAiICAgICAiLCBfKCJQcm92aWRlZCBCeToiKQorKyAgICAgICAgaWYgc2VsZi5vcHRzLmhpZGVfdmVyc2lvbjoKKysgICAgICAgICAgICBuYW1lID0gcHJ2cGtnLm5hbWUKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgbmFtZSA9IHN0cihwcnZwa2cpCisrICAgICAgICBwcmludCAiICAgICAgICIsICIlcyAoJXMpIiAlIChuYW1lLCBwcnYpCisrCisgICAgIGRlZiBzaG93VXBncmFkZXMoc2VsZiwgcGtnLCB1cGcpOgorICAgICAgICAgaWYgc2VsZi5fZmlyc3R1cGdyYWRlczoKKyAgICAgICAgICAgICBzZWxmLl9maXJzdHVwZ3JhZGVzID0gRmFsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhmZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1ycG00LWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKKworVGhpcyBwYXRjaCBjaGVja3MgZm9yIHJwbTUgcmVsYXRlZCBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gYWxsb3cgcnBtNCAKK3RvIHdvcmsgY29ycmVjdGx5LiBDdXJyZW50bHkgdGhlIHJwbTQgYXJjaHNjb3JlIGFuZCBmaWx0ZXIgd29yaworZGlmZmVyZW50bHkgZW5vdWdoIHRoYXQgdGhleSBuZWVkIHRvIGJlIGNoYW5nZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzbWFydC0xLjQuMS5vcmlnL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CisrKysgc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC0zMzgsMTAgKzMzOCwxNCBAQCBjbGFzcyBSUE1PYnNvbGV0ZXMoRGVwZW5kcyk6CisgCisgX1NDT1JFTUFQID0ge30KKyBkZWYgZ2V0QXJjaFNjb3JlKGFyY2gsIF9zbT1fU0NPUkVNQVApOgorLSAgICBpZiBhcmNoIG5vdCBpbiBfc206CistICAgICAgICBzY29yZSA9IHJwbS5hcmNoc2NvcmUoYXJjaCkKKy0gICAgICAgIF9zbVthcmNoXSA9IHNjb3JlCistICAgIHJldHVybiBfc20uZ2V0KGFyY2gsIDApCisrICAgIHRyeToKKysgICAgICAgIHJwbS5wbGF0Zm9ybXNjb3JlKGFyY2gpCisrICAgICAgICBpZiBhcmNoIG5vdCBpbiBfc206CisrICAgICAgICAgICAgc2NvcmUgPSBycG0uYXJjaHNjb3JlKGFyY2gpCisrICAgICAgICAgICAgX3NtW2FyY2hdID0gc2NvcmUKKysgICAgICAgIHJldHVybiBfc20uZ2V0KGFyY2gsIDApCisrICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysgICAgICAgIHJldHVybiAxCisgCisgIyBUT0RPOiBFbWJlZCBjb2xvciBpbnRvIG5hbWVwcm92aWRlcyBhbmQgb2Jzb2xldGVzIHJlbGF0aW9ucy4KKyBfQ09MT1JNQVAgPSB7Im5vYXJjaCI6IDAsICJ4ODZfNjQiOiAyLCAicHBjNjQiOiAyLCAiczM5MHgiOiAyLCAic3BhcmM2NCI6IDJ9CitJbmRleDogc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc21hcnQtMS40LjEub3JpZy9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBzbWFydC0xLjQuMS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0yMzUsNiArMjM1LDEyIEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tb3JkZXIiKToKKyAgICAgICAgICAgICB0cy5vcmRlcigpCisgICAgICAgICBwcm9iZmlsdGVyID0gcnBtLlJQTVBST0JfRklMVEVSX09MRFBBQ0tBR0UKKysgICAgICAgIHRyeToKKysgICAgICAgICAgICAjIFRlc3QgZm9yIFJQTTUgZnVuY3Rpb24KKysgICAgICAgICAgICBycG0ucGxhdGZvcm1zY29yZSgiIikKKysgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9JR05PUkVBUkNICisrCisgICAgICAgICBpZiBmb3JjZSBvciByZWluc3RhbGw6CisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRVBLRworICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VPTERGSUxFUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODU5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorU2V0IE5PUFJPR1JFU1MgZm9yIHB5Y3VybCBqdXN0IGFzIHNhbWUgYXMgZGVmYXVsdCBvcGVyYXRpb24gaW4gcHljdXJsIG1vZHVsZSBpdHNlbGYuCitJZiBzZXQgTk9QUk9HUkVTUyB3aXRoIDAgZm9yIHB5Y3VybCwgaXQgY2F1c2VzIGRlYWQgbG9jayBpc3N1ZSBvZiBQeXRob24gR0lMIHdoZW4KK2NhbGwgc21hcnQgbGlicmFyeSBieSBweXRob24gZ3VpIGp1c3QgbGlrZSBweWd0ay4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC11IHNtYXJ0LTEuNC4xL3NtYXJ0Lm9yaWcvZmV0Y2hlci5weSBzbWFydC0xLjQuMS9zbWFydC9mZXRjaGVyLnB5CistLS0gc21hcnQtMS40LjEvc21hcnQub3JpZy9mZXRjaGVyLnB5CTIwMTQtMDctMTUgMTY6NDI6MTkuMjQwNDM3MDgwICswODAwCisrKysgc21hcnQtMS40LjEvc21hcnQvZmV0Y2hlci5weQkyMDE0LTA3LTE1IDE3OjAyOjM3LjgxMjQ3MDI4OSArMDgwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuT1BUX0ZJTEVUSU1FLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLkxPV19TUEVFRF9MSU1JVCwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5MT1dfU1BFRURfVElNRSwgU09DS0VUVElNRU9VVCkKKy0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5OT1BST0dSRVNTLCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLk5PUFJPR1JFU1MsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuUFJPR1JFU1NGVU5DVElPTiwgcHJvZ3Jlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuV1JJVEVEQVRBLCBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5GT0xMT1dMT0NBVElPTiwgMSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmYjI5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1JQTTUgaGFzIHJlbW92ZWQgc3VwcG9ydCBmb3IgUlBNVlNGX05PU0lHTkFUVVJFUworCitQYXRjaCBzbWFydCB0byBubyBsb25nZXIgdXNlIHRoaXMgZmxhZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitAQCAtNjMsMTEgKzYzLDExIEBAIGRlZiBnZXRUUyhuZXc9RmFsc2UpOgorICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKToKKyAgICAgICAgICAgICBycG0uYWRkTWFjcm8oJ19kYnBhdGgnLCAiLyIgKyBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpKQorICAgICAgICAgZ2V0VFMudHMgPSBycG0udHMoZ2V0VFMucm9vdCkKKy0gICAgICAgIGlmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CistICAgICAgICAgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgorLSAgICAgICAgICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQorKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CisrICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKysgICAgICAgICMgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorKyAgICAgICAgIyAgICBlbHNlOgorKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKyAgICAgICAgIHJwbV9kYnBhdGggPSBzeXNjb25mLmdldCgicnBtLWRicGF0aCIsICJ2YXIvbGliL3JwbSIpCisgICAgICAgICBkYmRpciA9IHJwbV9qb2luX2RicGF0aChnZXRUUy5yb290LCBycG1fZGJwYXRoKQorICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGJkaXIpOgorQEAgLTg5LDExICs4OSwxMSBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6CisgICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKKyAgICAgICAgIHRzID0gcnBtLnRzKGdldFRTLnJvb3QpCistICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKy0gICAgICAgICAgICAgICAgdHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CisrICAgICAgICAjICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKysgICAgICAgICMgICAgZWxzZToKKysgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisgICAgICAgICByZXR1cm4gdHMKKyAgICAgZWxzZToKKyAgICAgICAgIHJldHVybiBnZXRUUy50cworZGlmZiAtLWdpdCBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CistLS0gYS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CisrKysgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CitAQCAtNTYsOCArNTYsOCBAQCBkZWYgX2dldHJlbGVhc2V2ZXIoKToKKyAKKyAgICAgcnBtcm9vdCA9IHN5c2NvbmYuZ2V0KCJycG0tcm9vdCIsICIvIikKKyAgICAgdHMgPSBycG1VdGlscy50cmFuc2FjdGlvbi5pbml0UmVhZE9ubHlUcmFuc2FjdGlvbihyb290PXJwbXJvb3QpCistICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgorLSAgICAgICAgdHMucHVzaFZTRmxhZ3MofihycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLl9SUE1WU0ZfTk9ESUdFU1RTKSkKKysgICAgI2lmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgorKyAgICAjICAgIHRzLnB1c2hWU0ZsYWdzKH4ocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5fUlBNVlNGX05PRElHRVNUUykpCisgICAgIHJlbGVhc2V2ZXIgPSBOb25lCisgICAgICMgSEFDSzogd2UncmUgaGFyZC1jb2RpbmcgdGhlIG1vc3QgdXNlZCBkaXN0cm9zLCB3aWxsIGFkZCBtb3JlIGlmIG5lZWRlZAorICAgICBpZHggPSB0cy5kYk1hdGNoKCdwcm92aWRlcycsICdmZWRvcmEtcmVsZWFzZScpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTc0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYgpAQCAtMCwwICsxLDEzOSBAQAorU1VNTUFSWSA9ICJUaGUgU21hcnQgUGFja2FnZSBNYW5hZ2VyIgorREVTQ1JJUFRJT04gPSAiVGhlIFNtYXJ0IFBhY2thZ2UgTWFuYWdlciBwcm9qZWN0IGhhcyB0aGUgYW1iaXRpb3VzIG9iamVjdGl2ZSBvZiBjcmVhdGluZyBcCitzbWFydCBhbmQgcG9ydGFibGUgYWxnb3JpdGhtcyBmb3Igc29sdmluZyBhZGVxdWF0ZWx5IHRoZSBwcm9ibGVtIG9mIG1hbmFnaW5nIHNvZnR3YXJlIFwKK3VwZ3JhZGVzIGFuZCBpbnN0YWxsYXRpb24uIgorCitIT01FUEFHRSA9ICJodHRwOi8vbGFiaXgub3JnL3NtYXJ0LyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitERVBFTkRTID0gInB5dGhvbiBycG0gZ2V0dGV4dC1uYXRpdmUgcHl0aG9uLXJwbSIKK1NSQ05BTUUgPSAic21hcnQiCisKK1NSQ19VUkkgPSAiXAorICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20vc21hcnRwbS9zbWFydC5naXQgXAorICAgICAgICAgIGZpbGU6Ly9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1yZWNvbW1lbmRzLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1jaGFubmVsc2Rpci5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWF0dGVtcHQucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2ggXAorICAgICAgICAgIgorCitTUkNSRVYgPSAiNDA3YTdlY2E3NjY0MzEyNTdkY2QxZGExNTE3NWNjMzZhMWJiMjJkMCIKK1BWID0gIjEuNStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBPcHRpb25zIC0gcnBtLCBxdDQsIGd0aworUEFDS0FHRUNPTkZJRyA/Pz0gInJwbSIKKworUlBNX1JERVAgPSAiJHtQTn0tYmFja2VuZC1ycG0iCitRVF9SREVQID0gIiR7UE59LWludGVyZmFjZS1xdDQiCitHVEtfUkRFUCA9ICIke1BOfS1pbnRlcmZhY2UtZ3RrIgorCitSUE1fUkRFUF9jbGFzcy1uYXRpdmUgPSAiIgorUVRfUkRFUF9jbGFzcy1uYXRpdmUgPSAiIgorR1RLX1JERVBfY2xhc3MtbmF0aXZlID0gIiIKKworUlBNX1JERVBfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1FUX1JERVBfY2xhc3MtbmF0aXZlc2RrID0gIiIKK0dUS19SREVQX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1BBQ0tBR0VDT05GSUdbcnBtXSA9ICIsLHJwbSwke1JQTV9SREVQfSIKK1BBQ0tBR0VDT05GSUdbcXQ0XSA9ICIsLHF0NC14MTEsJHtRVF9SREVQfSIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICIsLGd0ayssJHtHVEtfUkRFUH0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIyBXZSBkb24ndCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgaXRlbXMKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9zbGFjaworICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL2FyY2gKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL3F0CisKKyAgICMgVGVtcG9yYXJ5LCBkZWJpYW4gc3VwcG9ydCBpbiBPRSBpcyBtaXNzaW5nIHRoZSBweXRob24gbW9kdWxlCisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2FwdGNoYW5uZWxzeW5jLnB5KgorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9kZWJkaXIucHkqCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvZGViCisKKyAgICMgRGlzYWJsZSBhdXRvbWF0aWMgY2hhbm5lbCBkZXRlY3Rpb24KKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvZGV0ZWN0c3lzLnB5KgorCisgICAjIERpc2FibGUgbGFuZHNjYXBlIHN1cHBvcnQKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvbGFuZHNjYXBlLnB5KgorCisgICAjIERpc2FibGUgdXJwbWkgY2hhbm5lbCBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3VycG1pY2hhbm5lbHN5bmMucHkqCisKKyAgICMgRGlzYWJsZSB5dW0gY2hhbm5lbCBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5KgorCisgICAjIERpc2FibGUgenlwcGVyIGNoYW5uZWwgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy96eXBwY2hhbm5lbHN5bmMucHkqCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JwbScsICdycG0nLCAnJywgZCl9IiBdOyB0aGVuCisgICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3JwbWRpci5weSoKKyAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0KKyAgIGZpCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3F0NCcsICdxdDQnLCAnJywgZCl9IiBdOyB0aGVuCisgICAgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQKKyAgIGZpCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2d0aysnLCAnZ3RrJywgJycsIGQpfSIgXTsgdGhlbgorICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvZ3RrCisgICBmaQorfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3NtYXJ0IFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICAgICAgc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vZW52IHB5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJHtEfSR7YmluZGlyfS9zbWFydAorICAgICAgICBhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgICAgICBhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tZGV2ICR7UE59LWRiZyAke1BOfS1kb2Mgc21hcnRwbSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdycG0nLCAnJHtQTn0tYmFja2VuZC1ycG0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3F0NCcsICcke1BOfS1pbnRlcmZhY2UtcXQ0JywgJycsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdndGsnLCAnJHtQTn0taW50ZXJmYWNlLWd0aycsICcnLCBkKX0gXAorICAgICAgICAgICAgJHtQTn0taW50ZXJmYWNlLWltYWdlcyAke1BOfSIKKworUkRFUEVORFNfc21hcnRwbSA9ICIke1BOfSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWJhY2tlbmQtcnBtIHB5dGhvbi1jb2RlY3MgcHl0aG9uLXRleHR1dGlscyBweXRob24teG1sIHB5dGhvbi1mY250bCBcCisgICAgICAgICAgICAgICAgICAgcHl0aG9uLXBpY2tsZSBweXRob24tY3J5cHQgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1zaGVsbCBcCisgICAgICAgICAgICAgICAgICAgcHl0aG9uLXJlc291cmNlIHB5dGhvbi1uZXRjbGllbnQgcHl0aG9uLXRocmVhZGluZyBweXRob24tdW5peGFkbWluIHB5dGhvbi1wcHJpbnQiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitSREVQRU5EU18ke1BOfS1iYWNrZW5kLXJwbSA9ICJweXRob24tcnBtIgorCitSREVQRU5EU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gInF0NC14MTEgJHtQTn0taW50ZXJmYWNlLWltYWdlcyIKK1JERVBFTkRTXyR7UE59LWludGVyZmFjZS1ndGsgPSAiZ3RrKyAke1BOfS1pbnRlcmZhY2UtaW1hZ2VzIgorCitGSUxFU19zbWFydHBtID0gIiR7YmluZGlyfS9zbWFydCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3JwbS8uZGVidWciCisKK0ZJTEVTXyR7UE59LWJhY2tlbmQtcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvcnBtIgorCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtZ3RrID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9ndGsiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtaW1hZ2VzID0gIiR7ZGF0YWRpcn0vJHtiYXNlbGlifS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9pbWFnZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjU4YmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJQeXRob24gaW1wbGVtZW50YXRpb24gb2YgYSBzbGlkaW5nIHdpbmRvdyBtZW1vcnkgbWFwIG1hbmFnZXIiCitERVNDUklQVElPTiA9ICJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyBtZW1vcnkgbWFwIHRvIFwKK2hlbHAgdW5pZnlpbmcgbWVtb3J5IG1hcHBlZCBhY2Nlc3Mgb24gMzIgYW5kIDY0IGJpdCBzeXN0ZW1zIGFuZCB0byBoZWxwIFwKK21hbmFnaW5nIHJlc291cmNlcyBtb3JlIGVmZmljaWVudGx5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PWU5MTBiMzViMGVmNGUxZjY2NWI5YTc1ZDZhZmI3NzA5IgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3Mvc21tYXAvc21tYXAtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImQ3OTMyZDVhY2UyMDZiZjRhZTE1MTk4Y2YzNmZiNmFiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMmI2MmI0OTdiZDVmMGFmZWJjMDAyZWRhNGQ5MGRmOWQyMDljMzBlZjI1N2U4NjczYzkwYTZiNWMxMTlkNjIiCisKK1MgPSAiJHtXT1JLRElSfS9zbW1hcC0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tY29kZWNzIHB5dGhvbi1tbWFwIHB5dGhvbi1sYW5nIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMThhYjhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiVGhlIFB5dGhvbiBQcm9ncmFtbWluZyBMYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKK0xJQ0VOU0UgPSAiUFNGdjIiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKKyMgYnVtcCB0aGlzIG9uIGV2ZXJ5IGNoYW5nZSBpbiBjb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKK0lOQ19QUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGZmM2QwMGYwNDk1NDU4NjI5OTJkMmQwOTc4MzFhMTMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4ZDUzMGY3ZWZjMzczZDY0YThmYjE2MzdlM2JhYWE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwZDI3ZTE0ZWE3ZTAzNTcwMDI2ODUwZTJlNTBiYTcxYWQyMGI3ZWIzMTAzNWFhZGExY2YzZGVmOGY4ZDQ5MTYiCisKK1BZVEhPTl9NQUpNSU4gPSAiMi43IgorCitpbmhlcml0IGF1dG90b29scworCitQWVRIT05MU0JPUFRTID0gIi0td2l0aC13Y3R5cGUtZnVuY3Rpb25zIgorUFlUSE9OTFNCT1BUU19saW51eHN0ZGJhc2UgPSAiYWNfY3Zfc2l6ZW9mX29mZl90PTgiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgIC0td2l0aC10aHJlYWRzIFwKKyAgLS13aXRoLXB5bWFsbG9jIFwKKyAgLS13aXRob3V0LWN4eC1tYWluIFwKKyAgLS13aXRoLXNpZ25hbC1tb2R1bGUgXAorICAtLWVuYWJsZS1zaGFyZWQgXAorICAtLWVuYWJsZS1pcHY2PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICd5ZXMnLCAnbm8nLCBkKX0gXAorICBhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPW5vIGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfaD1ubyBcCisgICR7UFlUSE9OTFNCT1BUU30gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjU3Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorV2UgbmVlZCB0byBlbnN1cmUgb3VyIGhvc3QgdG9vbHMgZ2V0IHJ1biBkdXJpbmcgYnVpbGQsIG5vdCB0aGUgZnJlc2hseQorYnVpbHQgY3Jvc3MtdG9vbHMgKHRoaXMgd2lsbCBub3Qgd29yayksIHNvIHdlIGludHJvZHVjZSBIT1NUUFlUSE9OIGFuZCBIT1NUUEdFTi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtMjM0LDYgKzIzNCw3IEBAIExJQkZGSV9JTkNMVURFRElSPQlATElCRkZJX0lOQ0xVREVESVJACisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFBhcnNlcgorIFBHRU49CQlQYXJzZXIvcGdlbiQoRVhFKQorK0hPU1RQR0VOPQkkKFBHRU4pJChFWEUpCisgCisgUFNSQ1M9CQlcCisgCQlQYXJzZXIvYWNjZWxlci5jIFwKK0BAIC00NDUsNyArNDQ2LDcgQEAgJChCVUlMRFBZVEhPTik6CU1vZHVsZXMvcHl0aG9uLm8gJChMSUJSQQorIAkJCSQoQkxETElCUkFSWSkgJChMSUJTKSAkKE1PRExJQlMpICQoU1lTTElCUykgJChMRExBU1QpCisgCisgcGxhdGZvcm06ICQoQlVJTERQWVRIT04pIHB5YnVpbGRkaXIudHh0CistCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9wbGF0Zm9ybSA7IHByaW50IGdldF9wbGF0Zm9ybSgpKyItIitzeXMudmVyc2lvblswOjNdJyA+cGxhdGZvcm0KKysJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLWMgJ2ltcG9ydCBzeXMgOyBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0gOyBwcmludCBnZXRfcGxhdGZvcm0oKSsiLSIrc3lzLnZlcnNpb25bMDozXScgPnBsYXRmb3JtCisgCisgIyBDcmVhdGUgYnVpbGQgZGlyZWN0b3J5IGFuZCBnZW5lcmF0ZSB0aGUgc3lzY29uZmlnIGJ1aWxkLXRpbWUgZGF0YSB0aGVyZS4KKyAjIHB5YnVpbGRkaXIudHh0IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBidWlsZCBkaXIgYW5kIGlzIHVzZWQgZm9yCitAQCAtNjExLDcgKzYxMiw3IEBAIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3AKKyAkKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKyAJCSQoTUFLRSkgJChQR0VOKQorLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKysJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKK0BAIC0xMDQzLDI3ICsxMDQ0LDI3IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCisgCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKyAJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXR0IC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10IC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKysJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorKwkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorIAorICMgQ3JlYXRlIHRoZSBQTEFURElSIHNvdXJjZSBkaXJlY3RvcnksIGlmIG9uZSB3YXNuJ3QgZGlzdHJpYnV0ZWQuLgorICQoc3JjZGlyKS9MaWIvJChQTEFURElSKToKK0luZGV4OiBQeXRob24tMi43Ljkvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0yLjcuOS9zZXR1cC5weQorQEAgLTMzNCw2ICszMzQsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgc2VsZi5mYWlsZWQuYXBwZW5kKGV4dC5uYW1lKQorICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyoqKiBXQVJOSU5HOiByZW5hbWluZyAiJXMiIHNpbmNlIGltcG9ydGluZyBpdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAlcycgJSAoZXh0Lm5hbWUsIHdoeSksIGxldmVsPTMpCisrICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmlucGxhY2UKKyAgICAgICAgICAgICBiYXNlbmFtZSwgdGFpbCA9IG9zLnBhdGguc3BsaXRleHQoZXh0X2ZpbGVuYW1lKQorICAgICAgICAgICAgIG5ld25hbWUgPSBiYXNlbmFtZSArICJfZmFpbGVkIiArIHRhaWwKK0BAIC01NTgsNiArNTU5LDkgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICAgICAgIyBYWFggT21pdHRlZCBtb2R1bGVzOiBnbCwgcHVyZSwgZGwsIFNHSS1zcGVjaWZpYyBtb2R1bGVzCisgCisrICAgICAgICBsaWJfZGlycyA9IFsgb3MuZ2V0ZW52KCJTVEFHSU5HX0xJQkRJUiIpLCAgb3MuZ2V0ZW52KCJTVEFHSU5HX0JBU0VMSUJESVIiKSBdCisrICAgICAgICBpbmNfZGlycyA9IFsgb3MuZ2V0ZW52KCJTVEFHSU5HX0lOQ0RJUiIpIF0KKysKKyAgICAgICAgICMKKyAgICAgICAgICMgVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGNvbXBpbGUKKyAgICAgICAgICMgb24gcHJldHR5IG11Y2ggYW55IFBPU0lYaXNoIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGNlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgbmVlZCB0byBzdXBwbHkgU1RBR0lOR19JTkNESVIgaGVyZSwgb3RoZXJ3aXNlIHRoZSBUayBoZWFkZXJzCit3aWxsIG5vdCBiZSBmb3VuZC4KKworU2lnbmVkLW9mZi1ieTogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUuZGU+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA4ZmUxZmI4Li42N2VkYTc0IDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMTg5Miw3ICsxODkyLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICBkb3R2ZXJzaW9uID0gZG90dmVyc2lvbls6LTFdICsgJy4nICsgZG90dmVyc2lvblstMV0KKyAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgPSBbXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViID0gW10KKy0gICAgICAgICAgICBmb3IgZGlyIGluIGluY19kaXJzOgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gW29zLmdldGVudigiU1RBR0lOR19JTkNESVIiKV06CisgICAgICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRjbCIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRrIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gdGNsX2luY2x1ZGVfc3ViCitAQCAtMTkxMSwyMiArMTkxMSw2IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBpZiBkaXIgbm90IGluIGluY2x1ZGVfZGlyczoKKyAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZChkaXIpCisgCistICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdG9yaWVzCistICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdzdW5vczUnOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNi9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliNjQnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNS9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvbGliJykKKy0gICAgICAgIGVsc2U6CistICAgICAgICAgICAgIyBBc3N1bWUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgWDExCistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9saWInKQorLQorICAgICAgICAgIyBJZiBDeWd3aW4sIHRoZW4gdmVyaWZ5IHRoYXQgWCBpcyBpbnN0YWxsZWQgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgICAgICAgeDExX2luYyA9IGZpbmRfZmlsZSgnWDExL1hsaWIuaCcsIFtdLCBpbmNsdWRlX2RpcnMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M4NzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitSZWJhc2VkIGZvciBweXRob24gMi43LjkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyBDVHlwZXMgbmVlZCB0byBrbm93IHRoZSBhY3R1YWwgaG9zdCB3ZSBhcmUgYnVpbGRpbmcgb24uCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgRGlldHJpY2ggPG1kdEBlbWRldGUuZGU+CisKK0luZGV4OiBQeXRob24tMi43Ljkvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0yLjcuOS9zZXR1cC5weQorQEAgLTIwMjgsMTIgKzIwMjgsMTIgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICAgICAgICAgICAgICAjIFBhc3MgZW1wdHkgQ0ZMQUdTIGJlY2F1c2Ugd2UnbGwganVzdCBhcHBlbmQgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAjIENGTEFHUyB0byBQeXRob24nczsgLWcgb3IgLU8yIGlzIHRvIGJlIGF2b2lkZWQuCistICAgICAgICAgICAgICAgIGNtZCA9ICJjZCAlcyAmJiBlbnYgQ0ZMQUdTPScnICclcy9jb25maWd1cmUnICVzIiBcCistICAgICAgICAgICAgICAgICAgICAgICUgKGZmaV9idWlsZGRpciwgZmZpX3NyY2RpciwgIiAiLmpvaW4oY29uZmlnX2FyZ3MpKQorKyAgICAgICAgICAgICAgICBjbWQgPSAiKGNkICVzICYmIGF1dG9jb25mIC1XIGNyb3NzKSAmJiAoY2QgJXMgJiYgZW52IENGTEFHUz0nJyAnJXMvY29uZmlndXJlJyAlcykiIFwKKysgICAgICAgICAgICAgICAgICAgICUgKGZmaV9zcmNkaXIsIGZmaV9idWlsZGRpciwgZmZpX3NyY2RpciwgIiAiLmpvaW4oY29uZmlnX2FyZ3MpKQorIAorICAgICAgICAgICAgICAgICByZXMgPSBvcy5zeXN0ZW0oY21kKQorICAgICAgICAgICAgICAgICBpZiByZXMgb3Igbm90IG9zLnBhdGguZXhpc3RzKGZmaV9jb25maWdmaWxlKToKKy0gICAgICAgICAgICAgICAgICAgIHByaW50ICJGYWlsZWQgdG8gY29uZmlndXJlIF9jdHlwZXMgbW9kdWxlIgorKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBjb25maWd1cmUgX2N0eXBlcyBtb2R1bGUgKHJlcz0lZCkgb3IgbWlzc2luZyBjb25mZmlsZT0lcyIgJSAoIHJlcywgZmZpX2NvbmZpZ2ZpbGUgKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgICAgICAgICAgICAgZmZpY29uZmlnID0ge30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTJjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgcG9pc29uIGRpcmVjdG9yaWVzIHBhdGNoIGhhcyBkZXRlY3RlZCBsaWJyYXJ5IHBhdGggaXNzdWUgd2hpbGUgCitjb21waWxpbmcgdGhlIHB5dGhvbiBpbiBjcm9zcyBlbnZpcm9ubWVudCwgYXMgc2VlbiBiZWxsb3cuCisKK3dhcm5pbmc6IGxpYnJhcnkgc2VhcmNoIHBhdGggIi91c3IvbGliL3Rlcm1jYXAiIGlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24KKworVGhpcyBQYXRjaCBmaXhlcyB0aGlzIGlzc3VlIGluIHRoZSBweXRob24gYnVpbGQgZW52aXJvbm1lbnQuCisxMSBPY3QgMjAxMAorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworMjAxMS8wOS8yOQorUmViYXNlZCBmb3IgcHl0aG9uIDIuNy4yCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IDY3ZWRhNzQuLjU5YzUzN2UgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC03NjEsMTIgKzc2MSwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgIHBhc3MgIyBJc3N1ZSA3Mzg0OiBBbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcyBvciB0aW5mby4KKyAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKKy0gICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyL2xpYi90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9saW5rX2FyZ3M9cmVhZGxpbmVfZXh0cmFfbGlua19hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPXJlYWRsaW5lX2xpYnMpICkKKyAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZWE3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE4IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy4yL01vZHVsZXMvU2V0dXAuZGlzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL01vZHVsZXMvU2V0dXAuZGlzdAkyMDExLTA2LTExIDA4OjQ2OjI2LjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0yLjcuMi9Nb2R1bGVzL1NldHVwLmRpc3QJMjAxMS0xMi0yNyAxNTo1MTo0MS4yNDQ2MjMyMTkgLTA4MDAKK0BAIC0yNDgsNyArMjQ4LDcgQEAKKyAjIE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSwgZGVzY3JpYmVkIGluIFJGQyAxMzIxLiAgVGhlIG5lY2Vzc2FyeSBmaWxlcworICMgbWQ1LmMgYW5kIG1kNS5oIGFyZSBpbmNsdWRlZCBoZXJlLgorIAorLSNfbWQ1IG1kNW1vZHVsZS5jIG1kNS5jCisrX21kNSBtZDVtb2R1bGUuYyBtZDUuYworIAorIAorICMgVGhlIF9zaGEgbW9kdWxlIGltcGxlbWVudHMgdGhlIFNIQSBjaGVja3N1bSBhbGdvcml0aG1zLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmFlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F2b2lkcyBwYXJhbGxlbCBtYWtlIHJhY2VzIGxpbmtpbmcgZXJyb3JzIHdoZW4gbWFraW5nIFBhcnNlci9QR0VOCisKKy0gSW1wbGVtZW50cyBSaWNoYXJkIFB1cmRpZSdzIGlkZWEKKworU2lnbmVkLU9mZi1CeTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtNjExLDEyICs2MTEsMTAgQEAgTW9kdWxlcy9ncnBtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvZworIAorIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B3ZG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKKyAKKy0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykgJChQR0VOKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorLQkJJChNQUtFKSAkKFBHRU4pCisgCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCistCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCisgCisgJChQR0VOKToJJChQR0VOT0JKUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK190a2ludGVyIG1vZHVsZSBuZWVkcyB0ayBtb2R1bGUgYWxvbmcgd2l0aCB0Y2wuIHRrIGlzIG5vdCB5ZXQgaW50ZWdyYXRlZAoraW4geW9jdG8gc28gd2Ugc2tpcCB0aGUgY2hlY2sgZm9yIHRoaXMgbW9kdWxlLgorQXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCBhZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTg6MzguNTAwMTM2NjQ3ICswMzAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTk6MzUuODg4MTM0OTY5ICswMzAwCitAQCAtMTYzNCw4ICsxNjM0LDEwIEBACisgICAgICAgICAjIENhbGwgdGhlIG1ldGhvZCBmb3IgZGV0ZWN0aW5nIHdoZXRoZXIgX3RraW50ZXIgY2FuIGJlIGNvbXBpbGVkCisgICAgICAgICBzZWxmLmRldGVjdF90a2ludGVyKGluY19kaXJzLCBsaWJfZGlycykKKyAKKy0gICAgICAgIGlmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKy0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorKyAgICAgICAgIyB0a2ludGVyIG1vZHVsZSB3aWxsIG5vdCBiZSBhdmFsYWlibGUgYXMgeW9jdG8KKysgICAgICAgICMgZG9lc24ndCBoYXZlIHRrIGludGVncmF0ZWQgKHlldCkKKysgICAgICAgICNpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CisrICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisgCisgICAgICAgICByZXR1cm4gbWlzc2luZworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzN2UwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Zvcl9zdW5vc19zcGVjaWZpY19tb2R1bGUucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorc3VuYXVkaW9kZXYgbW9kdWxlIGlzIHN1bm9zIHNwZWNpZmljIHNvIHdlIGF2b2lkIGEgd2FybmluZyBieSBub3QgCithZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMDUgMjI6Mjk6MTguMDQ5MTk2NjA4ICswMzAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMDUgMjI6Mjk6NTcuNTA1MTk1NDUzICswMzAwCitAQCAtMTUyMiw4ICsxNTIyLDkgQEAKKyAgICAgICAgIGlmIHBsYXRmb3JtID09ICdzdW5vczUnOgorICAgICAgICAgICAgICMgU3VuT1Mgc3BlY2lmaWMgbW9kdWxlcworICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3N1bmF1ZGlvZGV2JywgWydzdW5hdWRpb2Rldi5jJ10pICkKKy0gICAgICAgIGVsc2U6CistICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3N1bmF1ZGlvZGV2JykKKysgICAgICAgICMgSWYgcGxhdGZvcm0gaXMgbm90IHN1bm9zIHdhcm5pbmcgaXMgdXNlbGVzcworKyAgICAgICAgI2Vsc2U6CisrICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdzdW5hdWRpb2RldicpCisgCisgICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAjIF9zY3Byb3h5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9idWlsZGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2J1aWxkZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjI5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9idWlsZGRpci5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitXaGVuIGNyb3NzIGNvbXBpbGluZyBweXRob24sIHdlIHVzZWQgdG8gbmVlZCB0byBpbnN0YWxsIHRoZSBNYWtlZmlsZSwgcHljb25maWcuaCAKK2FuZCB0aGUgcHl0aG9uIGxpYnJhcnkgdG8gdGhlaXIgZmluYWwgbG9jYXRpb24gYmVmb3JlIGJlaW5nIGFibGUgdG8gY29tcGlsZSB0aGUgCityZXN0IG9mIHB5dGhvbi4gVGhpcyBjaGFuZ2UgYWxsb3dzIHVzIHRvIHBvaW50IHB5dGhvbiBhdCBpdHMgb3duIHNvdXJjZSB3aGVuCitidWlsZGluZywgYXZvaWRpbmcgYSB2YXJpZXR5IG9mIHN5c3Jvb3Qgc3RhZ2luZyBpc3N1ZXMgYW5kIHNpbXBsaWZ5aW5nIHRoZSBtYWluCitweXRob24gcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTIvMTEvMTMKKworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CitAQCAtOTMsNiArOTMsNyBAQCBfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorIF9FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KQorIF9DT05GSUdfVkFSUyA9IE5vbmUKKyBfVVNFUl9CQVNFID0gTm9uZQorK19QWVRIT05CVUlMRERJUiA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05CVUlMRERJUiIsIE5vbmUpCisgCisgZGVmIF9zYWZlX3JlYWxwYXRoKHBhdGgpOgorICAgICB0cnk6CitAQCAtMTAwLDcgKzEwMSw5IEBAIGRlZiBfc2FmZV9yZWFscGF0aChwYXRoKToKKyAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICByZXR1cm4gcGF0aAorIAorLWlmIHN5cy5leGVjdXRhYmxlOgorK2lmIF9QWVRIT05CVUlMRERJUjoKKysgICAgX1BST0pFQ1RfQkFTRSA9IF9QWVRIT05CVUlMRERJUgorK2VsaWYgc3lzLmV4ZWN1dGFibGU6CisgICAgIF9QUk9KRUNUX0JBU0UgPSBvcy5wYXRoLmRpcm5hbWUoX3NhZmVfcmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKQorIGVsc2U6CisgICAgICMgc3lzLmV4ZWN1dGFibGUgY2FuIGJlIGVtcHR5IGlmIGFyZ3ZbMF0gaGFzIGJlZW4gY2hhbmdlZCBhbmQgUHl0aG9uIGlzCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC0yNiw2ICsyNiw5IEBAIEVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY18KKyAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKKyAjIGl0J2xsIGxpdmUgaW4gcHJvamVjdC9QQ2J1aWxkL2FtZDY0LgorIHByb2plY3RfYmFzZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpKQorK19QWVRIT05CVUlMRERJUiA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05CVUlMRERJUiIsIE5vbmUpCisraWYgX1BZVEhPTkJVSUxERElSOgorKyAgICBwcm9qZWN0X2Jhc2UgPSBfUFlUSE9OQlVJTERESVIKKyBpZiBvcy5uYW1lID09ICJudCIgYW5kICJwY2J1aWxkIiBpbiBwcm9qZWN0X2Jhc2VbLTg6XS5sb3dlcigpOgorICAgICBwcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHByb2plY3RfYmFzZSwgb3MucGF0aC5wYXJkaXIpKQorICMgUEMvVlM3LjEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUwNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2dpX3B5LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0xpYi9jZ2kucHk6IFVwZGF0ZSB0aGUgc2NyaXB0IGFzIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkub3JpZwkyMDEwLTA4LTAxIDIyOjE0OjI3LjAwMDAwMDAwMCAtMDUwMAorKysrIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5CTIwMTEtMDktMjEgMTU6Mjg6NDAuNDc4MjA4NjMxIC0wNTAwCitAQCAtMSwxMyArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcHl0aG9uCistCistIyBOT1RFOiB0aGUgYWJvdmUgIi91c3IvbG9jYWwvYmluL3B5dGhvbiIgaXMgTk9UIGEgbWlzdGFrZS4gIEl0IGlzCistIyBpbnRlbnRpb25hbGx5IE5PVCAiL3Vzci9iaW4vZW52IHB5dGhvbiIuICBPbiBtYW55IHN5c3RlbXMKKy0jIChlLmcuIFNvbGFyaXMpLCAvdXNyL2xvY2FsL2JpbiBpcyBub3QgaW4gJFBBVEggYXMgcGFzc2VkIHRvIENHSQorLSMgc2NyaXB0cywgYW5kIC91c3IvbG9jYWwvYmluIGlzIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSB3aGVyZSBQeXRob24gaXMKKy0jIGluc3RhbGxlZCwgc28gL3Vzci9iaW4vZW52IHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHB5dGhvbi4gIEdyYW50ZWQsCistIyBiaW5hcnkgaW5zdGFsbGF0aW9ucyBieSBMaW51eCB2ZW5kb3JzIG9mdGVuIGluc3RhbGwgUHl0aG9uIGluCistIyAvdXNyL2Jpbi4gIFNvIGxldCB0aG9zZSB2ZW5kb3JzIHBhdGNoIGNnaS5weSB0byBtYXRjaCB0aGVpciBjaG9pY2UKKy0jIG9mIGluc3RhbGxhdGlvbi4KKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgCisgIiIiU3VwcG9ydCBtb2R1bGUgZm9yIENHSSAoQ29tbW9uIEdhdGV3YXkgSW50ZXJmYWNlKSBzY3JpcHRzLgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2MmRiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorQXV0aG9yOiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitEYXRlOiAgIFN1biBNYXIgMjUgMDI6MDI6MjcgMjAxMiArMDIwMAorCitUaGlzIHBhdGNoIHdhcyBhZGRlZCBmb3IgNjRiaXQgaG9zdCBtYWNoaW5lcy4gSW4gdGhlIGNvbXBpbGUgcHJvY2VzcyBweXRob24KK2lzIGNoZWNraW5nIGlmIHBsYXRmb3JtIGlzIGEgNjRiaXQgcGxhdGZvcm0gdXNpbmcgc3lzLm1heGludCB3aGljaCBpcyB0aGUgaG9zdCdzCit2YWx1ZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgaXNzdWUgc28gdGhhdCBweXRob24gd291bGQgY2hlY2sgaWYgVEFSR0VUIG1hY2hpbmUKK2lzIDY0Yml0IG5vdCB0aGUgSE9TVCBtYWNoaW5lLiBJbiB0aGlzIHdheSB3aWxsIGhhdmUgImRsIiBhbmQgImltYWdlb3AiIG1vZHVsZXMKK2J1aWx0IGlmIEhPU1QgbWFjaGluZSBpcyA2NGJpdCBidXQgdGhlIHRhcmdldCBtYWNoaW5lIGlzIDMyYml0LgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wMy0yNSAwMToxMDo0MS41NDAxNjMxODcgKzAyMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wMy0yNSAwMToyNjowNi4wOTI1Mzk5OTAgKzAyMDAKK0BAIC0yMyw2ICsyMywyMSBAQAorICMgVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCB0byBob2xkIHRoZSBsaXN0IG9mIG1vZHVsZXMgdG8gYmUgZGlzYWJsZWQuCisgZGlzYWJsZWRfbW9kdWxlX2xpc3QgPSBbXQorIAorK2RlZiB0YXJnZXRfaXNfNjRiaXRfcGxhdGZvcm0gKCk6CisrICAgICIiIgorKyAgICBJbiBjYXNlIG9mIGNyb3NzLWNvbXBpbGUsIHNvbWUgbW9kdWxlcyBhcmUgbm90IGJ1aWxkIGFzIHNldHVwIGNoZWNrcyBpZiBIT1NUCisrICAgIGlzIDY0Yml0IGFuZCBub3QgVEFSR0VULgorKyAgICBBcyBweXRob24gd2FzIGJ1aWx0IGZvciBUQVJHRVQgd2UgY2FuIGNoZWNrIHRoaXMgaW4gcHljb25maWcuaCBpbiB0aGlzIHdheToKKysJU2l6ZW9mIExPTkcgb24gYSAzMiBiaXQgcGxhdGZvcm0gaXMgNCBieXRlcworKwlTaXplb2YgTE9ORyBvbiBhIDY0IGJpdCBwbGF0Zm9ybSBpcyA4IGJ5dGVzCisrICAgICIiIgorKyAgICBweWNvbmYgPSBvcGVuKCJweWNvbmZpZy5oIikucmVhZCgpCisrICAgIGF1eCA9IHJlLnNlYXJjaChyIiNzKmRlZmluZVxzK1NJWkVPRl9MT05HXHMrOFxzKiIsIHB5Y29uZikKKysgICAgaWYgYXV4IGlzIG5vdCBOb25lOgorKwlyZXR1cm4gVHJ1ZQorKyAgICBlbHNlOgorKwlyZXR1cm4gRmFsc2UKKysKKyBkZWYgYWRkX2Rpcl90b19saXN0KGRpcmxpc3QsIGRpcik6CisgICAgICIiIkFkZCB0aGUgZGlyZWN0b3J5ICdkaXInIHRvIHRoZSBsaXN0ICdkaXJsaXN0JyAoYXQgdGhlIGZyb250KSBpZgorICAgICAxKSAnZGlyJyBpcyBub3QgYWxyZWFkeSBpbiAnZGlybGlzdCcKK0BAIC02MjgsNyArNjQzLDcgQEAKKyAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2F1ZGlvb3AnLCBbJ2F1ZGlvb3AuYyddKSApCisgCisgICAgICAgICAjIERpc2FibGVkIG9uIDY0LWJpdCBwbGF0Zm9ybXMKKy0gICAgICAgIGlmIHN5cy5tYXhpbnQgIT0gOTIyMzM3MjAzNjg1NDc3NTgwN0w6CisrICAgICAgICBpZiBub3QgdGFyZ2V0X2lzXzY0Yml0X3BsYXRmb3JtKCk6CisgICAgICAgICAgICAgIyBPcGVyYXRpb25zIG9uIGltYWdlcworICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2ltYWdlb3AnLCBbJ2ltYWdlb3AuYyddKSApCisgICAgICAgICBlbHNlOgorQEAgLTE0MTgsNyArMTQzMyw3IEBACisgICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfY29kZWNzXyVzJyAlIGxvYykKKyAKKyAgICAgICAgICMgRHluYW1pYyBsb2FkaW5nIG1vZHVsZQorLSAgICAgICAgaWYgc3lzLm1heGludCA9PSAweDdmZmZmZmZmOgorKyAgICAgICAgaWYgbm90IHRhcmdldF9pc182NGJpdF9wbGF0Zm9ybSgpOgorICAgICAgICAgICAgICMgVGhpcyByZXF1aXJlcyBzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZykgPT0gc2l6ZW9mKGNoYXIqKQorICAgICAgICAgICAgIGRsX2luYyA9IGZpbmRfZmlsZSgnZGxmY24uaCcsIFtdLCBpbmNfZGlycykKKyAgICAgICAgICAgICBpZiAoZGxfaW5jIGlzIG5vdCBOb25lKSBhbmQgKHBsYXRmb3JtIG5vdCBpbiBbJ2F0aGVvcyddKToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTExMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCAnYnVpbGQtdGVzdCcgYW5kICdydW50ZXN0LVRFU1RTJyB0YXJnZXRzIHRvIE1ha2VmaWxlLCB0byBidWlsZCBhbmQgcnVuIHRlc3RzCitjcm9zcy1jb21waWxlZC4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtcnVOIGEvTWFrZWZpbGUucHJlLmluIGIvTWFrZWZpbGUucHJlLmluCistLS0gYS9NYWtlZmlsZS5wcmUuaW4JMjAxMy0wNi0yNyAxMDo0NDoxMS4wMzM4NDA1MzIgKzAyMDAKKysrKyBiL01ha2VmaWxlLnByZS5pbgkyMDEzLTA2LTI3IDEwOjQ0OjM5LjU3MjYzNTI3MyArMDIwMAorQEAgLTcwOSwxNCArNzA5LDE5IEBACisgIyBnZW5lcmF0ZWQgYnl0ZWNvZGUuICBUaGlzIGlzIHNvbWV0aW1lcyBhIHZlcnkgc2h5IGJ1ZyBuZWVkaW5nIGEgbG90IG9mCisgIyBzYW1wbGUgZGF0YS4KKyAKKy1URVNUT1BUUz0JLWwgJChFWFRSQVRFU1RPUFRTKQorK1RFU1RPUFRTPQktbCAtdiAkKEVYVFJBVEVTVE9QVFMpCisgVEVTVFBST0c9CSQoc3JjZGlyKS9MaWIvdGVzdC9yZWdydGVzdC5weQorLVRFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1XZCAtMyAtRSAtdHQgJChURVNUUFlUSE9OT1BUUykKKy10ZXN0OgkJYWxsIHBsYXRmb3JtCistCQktZmluZCAkKHNyY2RpcikvTGliIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKKytURVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgJChCVUlMRFBZVEhPTikgLVdkIC0zIC1FIC10dCAkKFRFU1RQWVRIT05PUFRTKQorK3Rlc3Q6CQlidWlsZC10ZXN0CisrCQkkKE1BS0UpIHJ1bnRlc3QtVEVTVFMKKysKKytydW50ZXN0LVRFU1RTOgorKwkJLWZpbmQgJChzcmNkaXIpIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKKyAJCS0kKFRFU1RQWVRIT04pICQoVEVTVFBST0cpICQoVEVTVE9QVFMpCisgCQkkKFRFU1RQWVRIT04pICQoVEVTVFBST0cpICQoVEVTVE9QVFMpCisgCisrYnVpbGQtdGVzdDoJYWxsIHBsYXRmb3JtCisrCisgdGVzdGFsbDoJYWxsIHBsYXRmb3JtCisgCQktZmluZCAkKHNyY2RpcikvTGliIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKKyAJCSQoVEVTVFBZVEhPTikgJChzcmNkaXIpL0xpYi9jb21waWxlYWxsLnB5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyNjJkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaApAQCAtMCwwICsxLDc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIHNwZWNpZmljXQorCitUaGlzIHBhdGNoIGZpeGVzIGlzc3Vpbmcgd2l0aCBkaWZmZXJlbnQgbGliZGlyIGxpa2UgbGliNjQuCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBuYXRpdmUgcHl0aG9uIGJpbmFyeSBtb2R1bGVzIGZpbmRhYmxlCitpbiB0aGUgaW5zdGFsbCBwcm9jZXNzIG9mIHRoZSBob3N0IHB5dGhvbi4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDMvMTQKKworVXBkYXRlZCBmb3IgcHl0aG9uIDIuNy4zCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wNS8wMQorCitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorQEAgLTksNyArOSw3IEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CisgICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3twbGF0YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorQEAgLTY3LDcgKzY3LDcgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CisgICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTEwNDYsMjcgKzEwNDYsMjcgQEAgbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTAorIAkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9Nb2R1bGVzL3h4bW9kdWxlLmMgXAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKy0JUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKysJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorLQlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9JChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisgCisgIyBDcmVhdGUgdGhlIFBMQVRESVIgc291cmNlIGRpcmVjdG9yeSwgaWYgb25lIHdhc24ndCBkaXN0cmlidXRlZC4uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWFmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApAQCAtMCwwICsxLDI4IEBACit3aGVuIGJ1aWxkaW5nIHB5dGhvbiBmb3IgcWVtdXg4Ni02NCBvbiB1YnVudHUgMTEuMTAvNjRiaXQKK2l0IGdyb3BlcyBpbnRvIGhvc3QgaW5jbHVkZXMgYW5kIHRoZW4gbWl4ZXMgdGhlbSB3aXRoIGNyb3NzCitpbmNsdWRlcyBhbmQgYXMgYSByZXN1bHQgc29tZSBtb2R1bGVzIGZhaWwgdG8gY29tcGlsZSBhbmQgbGluaworb25lIG9mIHRoZSBtb2R1bGVzIGlzIHB5dGhvbi1lbGVtZW50dHJlZSB3aGljaCBpcyB0aGVuIG5vdAorZm91bmQgZHVyaW5nIGltYWdlIGNyZWF0aW9uCisKK1Byb2JsZSBpcyB0aGF0IHNldHVwLnB5IHRyaWVzIHRvIGFkZCBuYXRpdmUgaW5jbHVkZXMgdGhhdCBuZXdlcgordWJ1bnR1IGhhcyBpbnRyb2R1Y2VkIGZvciBtdWx0aWFyY2ggc3VwcG9ydC4gQnV0IHRoYXQgc2hvdWxkCitvbmx5IGhhcHBlbiBmb3IgbmF0aXZlIGJ1aWxkcyBhbmQgbm90IGNyb3NzIGJ1aWxkaW5nIHB5dGhvbgorc28gd2UgYWRkIGEgY2hlY2sgaGVyZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBiYTJkMjQyLi5iZjg1OWJlIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMzkzLDYgKzM5Myw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgICAgIGlmIG5vdCBmaW5kX2V4ZWN1dGFibGUoJ2Rwa2ctYXJjaGl0ZWN0dXJlJyk6CisgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgnQ1JPU1NfQ09NUElMRScpIGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgb3B0ID0gJycKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBvcHQgPSAnLXQnICsgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdIT1NUX0dOVV9UWVBFJykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmYTBkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMjk2IEBACitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0BAIC03MzYsNiArNzM2LDEwIEBAIFN1bk9TKikKKyAgICAgOzsKKyBlc2FjCisgCisrQUNfU1VCU1QoTElCKQorK0FDX01TR19DSEVDS0lORyhMSUIpCisrTElCPWBiYXNlbmFtZSAke2xpYmRpcn1gCisrQUNfTVNHX1JFU1VMVCgkTElCKQorIAorIEFDX1NVQlNUKExJQlJBUlkpCisgQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCitJbmRleDogUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKysgUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKK0BAIC0xMDgsNiArMTA4LDcgQEAgUHlBUElfRlVOQyhjaGFyICopIFB5X0dldFBhdGgodm9pZCk7CisgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFBsYXRmb3JtKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRMaWIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29tcGlsZXIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEJ1aWxkSW5mbyh2b2lkKTsKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorQEAgLTIyLDYgKzIyLDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKKyBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorIAorIAorK2xpYm5hbWUgPSBzeXMubGliCisrCisgaWYgc3lzLnZlcnNpb24gPCAiMi4yIjoKKyAgICAgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZScsCitAQCAtNDIsNyArNDQsNyBAQCBlbHNlOgorIElOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3VuaXhfcHJlZml4JzogeworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS8nK2xpYm5hbWUrJy9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdoZWFkZXJzJzogJyRiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCisgICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtMTE5LDggKzExOSwxMSBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuCisgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorLSAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKysgICAgICAgIGlmIHBsYXRfc3BlY2lmaWMgb3Igc3RhbmRhcmRfbGliOgorKyAgICAgICAgICAgIGxpYiA9IHN5cy5saWIKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgbGliID0gImxpYiIKKysgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsIGxpYiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICByZXR1cm4gbGlicHl0aG9uCisgICAgICAgICBlbHNlOgorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvcHlkb2MucHkKKysrKyBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5CitAQCAtMzgzLDcgKzM4Myw3IEBAIGNsYXNzIERvYzoKKyAKKyAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkiKQorLSAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iK3N5cy52ZXJzaW9uWzA6M10pCisgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKKyAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zaXRlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5CitAQCAtMjg4LDEzICsyODgsMTggQEAgZGVmIGdldHNpdGVwYWNrYWdlcygpOgorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQocHJlZml4KQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKKyAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorQEAgLTcsMTAgKzcsMTAgQEAgZnJvbSBvcy5wYXRoIGltcG9ydCBwYXJkaXIsIHJlYWxwYXRoCisgCisgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7cGxhdGJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9iaW4nLAorQEAgLTY1LDEwICs2NSwxMCBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCisgICAgICAgICB9LAorICAgICAncG9zaXhfdXNlcic6IHsKKy0gICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3RfZGwucHkKKysrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorQEAgLTQsMTAgKzQsMTEgQEAKKyBpbXBvcnQgdW5pdHRlc3QKKyBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCisgZGwgPSBpbXBvcnRfbW9kdWxlKCdkbCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKytpbXBvcnQgc3lzCisgCisgc2hhcmVkbGlicyA9IFsKKy0gICAgKCcvdXNyL2xpYi9saWJjLnNvJywgJ2dldHBpZCcpLAorLSAgICAoJy9saWIvbGliYy5zby42JywgJ2dldHBpZCcpLAorKyAgICAoJy91c3IvJytzeXMubGliKycvbGliYy5zbycsICdnZXRwaWQnKSwKKysgICAgKCcvJytzeXMubGliKycvbGliYy5zby42JywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvYmluL2N5Z3dpbjEuZGxsJywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvbGliL2xpYmMuZHlsaWInLCAnZ2V0cGlkJyksCisgICAgIF0KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorQEAgLTI0MSwxMiArMjQxLDE2IEBAIGNsYXNzIEhlbHBlckZ1bmN0aW9uc1Rlc3RzKHVuaXR0ZXN0LlRlc3QKKyAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMl0sIHdhbnRlZCkKKyAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKyAgICAgICAgICAgICAjIE9TIFggbm9uLWZyYW13ZXdvcmsgYnVpbGRzLCBMaW51eCwgRnJlZUJTRCwgZXRjCistICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ2xpYicsICdweXRob24nICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCistICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorICAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAnc2l0ZS1weXRob24nKQorLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1sxXSwgd2FudGVkKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKysgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCBzeXMubGliLCAncHl0aG9uJyArIHN5cy52ZXJzaW9uWzozXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKysgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCBzeXMubGliLCAnc2l0ZS1weXRob24nKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgIyBvdGhlciBwbGF0Zm9ybXMKKyAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMikKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorQEAgLTc1NCwxMCArNzU0LDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKKyAKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJHByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMucHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRleGVjX3ByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gb3MucGF0aC5ub3JtcGF0aChzKQorICAgICAgICAgICAgICAgICBpZ25vcmVfZGlycy5hcHBlbmQocykKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTg3LDYgKzg3LDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRworIAorICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKKyBNQUNIREVQPQlATUFDSERFUEAKKytMSUI9CQlATElCQAorIAorICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQorIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKK0BAIC0xMDYsNyArMTA3LDcgQEAgTElCRElSPQkJQGxpYmRpckAKKyBNQU5ESVI9CQlAbWFuZGlyQAorIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAorIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCistU0NSSVBURElSPQkkKHByZWZpeCkvbGliCisrU0NSSVBURElSPQkkKHByZWZpeCkvQExJQkAKKyAKKyAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCisgQklOTElCREVTVD0JJChMSUJESVIpL3B5dGhvbiQoVkVSU0lPTikKK0BAIC01OTgsNiArNTk5LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAorIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKKyAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKKysJCS1ETElCPSciJChMSUIpIicgXAorIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCisgCisgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKK0BAIC02NDAsNyArNjQyLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKKyBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCisgCisgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworLQkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtRExJQj0nIiQoTElCKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworIAorIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKKyAJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKK0luZGV4OiBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9Nb2R1bGVzL2dldHBhdGguYworKysrIFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworQEAgLTExNiw5ICsxMTYsMTEgQEAKKyAjZGVmaW5lIEVYRUNfUFJFRklYIFBSRUZJWAorICNlbmRpZgorIAorKyNkZWZpbmUgTElCX1BZVEhPTiBMSUIgIi9weXRob24iIFZFUlNJT04KKysKKyAjaWZuZGVmIFBZVEhPTlBBVEgKKy0jZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiOiIgXAorLSAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICIvbGliLWR5bmxvYWQiCisrI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiLyIgTElCX1BZVEhPTiAiOiIgXAorKyAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIExBTkRNQVJLCitAQCAtMTI5LDcgKzEzMSw3IEBAIHN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKKy1zdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSAibGliL3B5dGhvbiIgVkVSU0lPTjsKKytzdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSBMSUJfUFlUSE9OOworIAorIHN0YXRpYyB2b2lkCisgcmVkdWNlKGNoYXIgKmRpcikKK0luZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworQEAgLTEwLDMgKzEwLDEzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCisgeworIAlyZXR1cm4gUExBVEZPUk07CisgfQorKworKyNpZm5kZWYgTElCCisrI2RlZmluZSBMSUIgImxpYiIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRMaWIodm9pZCkKKyt7CisrCXJldHVybiBMSUI7CisrfQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKKysrKyBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCitAQCAtMTQzNyw2ICsxNDM3LDggQEAgX1B5U3lzX0luaXQodm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFBsYXRmb3JtKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldExpYigpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicHJlZml4IiwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWNiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gdXNpbmcgbWFrZSAtaiB3aXRoIHRoZSAnaW5zdGFsbCcgdGFyZ2V0LCBpdCdzIHBvc3NpYmxlIGZvciBhbHRiaW5pbnN0YWxsCisod2hpY2ggbm9ybWFsbHkgY3JlYXRlcyBCSU5ESVIpIGFuZCBsaWJhaW5zdGFsbCAod2hpY2ggZG9lc24ndCwgdGhvdWdoIGl0CitpbnN0YWxscyBweXRob24tY29uZmlnIHRoZXJlKSB0byByYWNlLCByZXN1bHRpbmcgaW4gYSBmYWlsdXJlIGR1ZSB0bworYXR0ZW1wdGluZyB0byBpbnN0YWxsIHB5dGhvbi1jb25maWcgaW50byBhIG5vbmV4aXN0ZW50IEJJTkRJUi4gRW5zdXJlIGl0IGFsc28KK2V4aXN0cyBpbiB0aGUgbGliYWluc3RhbGwgdGFyZ2V0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIFB5dGhvbi0yLjcuMy5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuMy9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDA4LDcgKzEwMDgsNyBAQCBMSUJQTD0JCSQoTElCUCkvY29uZmlnCisgTElCUEM9CQkkKExJQkRJUikvcGtnY29uZmlnCisKKyBsaWJhaW5zdGFsbDoJYWxsIHB5dGhvbi1jb25maWcKKy0JQGZvciBpIGluICQoTElCRElSKSAkKExJQlApICQoTElCUEwpICQoTElCUEMpOyBcCisrCUBmb3IgaSBpbiAkKExJQkRJUikgJChMSUJQKSAkKExJQlBMKSAkKExJQlBDKSAkKEJJTkRJUik7IFwKKwlkbyBcCisJCWlmIHRlc3QgISAtZCAkKERFU1RESVIpJCRpOyB0aGVuIFwKKwkJCWVjaG8gIkNyZWF0aW5nIGRpcmVjdG9yeSAkJGkiOyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YmUwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3B5dGhvbi0yLjcuMy1yZW1vdmUtYnNkYi1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitSZW1vdmUgdGhlIFJQQVRIIHRvIGF2b2lkIFFBIGlzc3VlIHdhcm5pbmcuCisKK1JQOiBBZGRlZCBzZWNvbmRhcnkgdW5uZWNlc3NhcnkgcnBhdGggdG8gdGhlIGxpc3QgMjAxMi84LzcKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CisKKworSW5kZXg6IFB5dGhvbi0yLjcuMy9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMy5vcmlnL3NldHVwLnB5CTIwMTItMDgtMDcgMTA6NDE6NTguNTYwMTMyNTI5ICswMDAwCisrKysgUHl0aG9uLTIuNy4zL3NldHVwLnB5CTIwMTItMDgtMDcgMTE6MDk6NDcuODUyMDk0NTE1ICswMDAwCitAQCAtMTA0Miw3ICsxMDQyLDYgQEAKKyAgICAgICAgICAgICBleHRzLmFwcGVuZChFeHRlbnNpb24oJ19ic2RkYicsIFsnX2JzZGRiLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9IFsnYnNkZGIuaCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1kYmxpYl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1kYl9pbmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9ZGJsaWJzKSkKKyAgICAgICAgIGVsc2U6CitAQCAtMTI1Miw3ICsxMjUxLDYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnVpbGRpbmcgZGJtIHVzaW5nIGJkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYm1leHQgPSBFeHRlbnNpb24oJ2RibScsIFsnZGJtbW9kdWxlLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPWRibGliX2RpciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9ZGJfaW5jcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0hBVkVfQkVSS0RCX0gnLCBOb25lKSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY5ZWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisjCisjVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gcHl0aG9uIHRlc3Qgc3VpdGVzCisKK21ha2UgLWYgTElCRElSL3B5dGhvbi9wdGVzdC9NYWtlZmlsZSAtayBydW50ZXN0LVRFU1RTIHNyY2Rpcj1MSUJESVIvcHl0aG9uMi43IFRFU1RQUk9HPUxJQkRJUi9weXRob24yLjcvdGVzdC9yZWdydGVzdC5weSB8IHNlZCAtZSAnL1wuXC5cLiBvay8gcy9eL1BBU1M6IC9nJyAtZSAnL1wuXC5cLiBbRVJST1J8RkFJTF0vIHMvXi9GQUlMOiAvZycgLWUgJy9cLlwuXC4gc2tpcHBlZC8gcy9eL1NLSVA6IC9nJyAtZSAncy8gXC5cLlwuIG9rLy9nJyAtZSAncy8gXC5cLlwuIEVSUk9SLy9nJyAtZSAncy8gXC5cLlwuIEZBSUwvL2cnIC1lICdzLyBcLlwuXC4gc2tpcHBlZC8vZycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjYjU1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK3B5dGhvbiBzaG91bGQgc2VhcmNoIGZvciBkYi5oIGluIGluY19kaXJzIGFuZCBub3QgaW4gYSBoYXJkY29kZWQgcGF0aC4KK0lmIGRiLmggaXMgZm91bmQgYnV0IEhBU0hWRVJTSU9OIGlzIG5vdCAyIHdlIGF2b2lkIGEgd2FybmluZyBieSBub3QgCithZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggYjg4NzgwOC4uYWU1MTYwNyAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTEyMzcsNiArMTIzNyw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgdGhlIG1vcmUgcmVjZW50IGJlcmtlbGV5ZGIncyBkYi5oIGZpbGUgZmlyc3QgaW4gdGhlIGluY2x1ZGUgcGF0aAorICAgICAgICAgIyB3aGVuIGF0dGVtcHRpbmcgdG8gY29tcGlsZSBhbmQgaXQgd2lsbCBmYWlsLgorICAgICAgICAgZiA9ICIvdXNyL2luY2x1ZGUvZGIuaCIKKysgICAgICAgIGlmIGxlbihpbmNfZGlycykgIT0gMDoKKysgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGluY19kaXJzWzBdLCAiZGIuaCIpCisgCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIGlmIGlzX21hY29zeF9zZGtfcGF0aChmKToKK0BAIC0xMjU3LDggKzEyNTksMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1saWJyYXJpZXMpKQorICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCdic2RkYjE4NScsIFsnYnNkZGJtb2R1bGUuYyddKSkKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnYnNkZGIxODUnKQorKyAgICAgICAgICAgICMgSWYgYSBuZXdlciB2ZXJzaW9uIGlzIGRldGVjdGVkIGRvbid0IHJlcG9ydCBhbiB1c2VsZXNzCisrICAgICAgICAgICAgIyB3YXJuaW5nCisrICAgICAgICAgICAgI2Vsc2U6CisrICAgICAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnYnNkZGIxODUnKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnYnNkZGIxODUnKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NkYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVGhpcyBwYXRjaCBza2lwcyBvdmVyIHRoZSAnaW1wb3J0IGNoZWNrJyBzZXR1cC5weSBkb2VzIHdoZW4gYnVpbGRpbmcKK2V4dGVuc2lvbnMuICBUaGlzIGdlbmVyYWxseSB3b24ndCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkLXNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMS0xMS0wNCAxNjo0NjozNC41NTM3OTY0MTAgLTA1MDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMS0xMS0wNCAxNjo1OTo0OS42OTI4MDIzMTMgLTA1MDAKK0BAIC0yODcsNiArMjg3LDE1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXh0Lm5hbWUsIHN5cy5leGNfaW5mbygpWzFdKSkKKyAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCisgICAgICAgICAgICAgcmV0dXJuCisrCisrICAgICAgICAjIElmIHdlJ3JlIGNyb3NzLWNvbXBpbGluZywgd2Ugd2FudCB0byBza2lwIHRoZSBpbXBvcnQgY2hlY2sKKysgICAgICAgICMgaS5lLiB3ZSBzaG91bGRuJ3QgYmUgZHluYW1pY2FsbHkgbG9hZGluZyB0YXJnZXQgc2hhcmVkIGxpYnMKKysgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdDUk9TU19DT01QSUxFJykgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgKKysgICAgICAgICAgICAgICAgJ1dBUk5JTkc6IHNraXBwaW5nIGltcG9ydCBjaGVjayBmb3IgY3Jvc3MtY29tcGlsZWQgIiVzIicgJQorKyAgICAgICAgICAgICAgICBleHQubmFtZSkKKysgICAgICAgICAgICByZXR1cm4KKysKKyAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgTWFjIE9TIFg6IFRoZSBDYXJib24tYmFzZWQgbW9kdWxlcyBjYW5ub3QgYmUKKyAgICAgICAgICMgcmVsaWFibHkgaW1wb3J0ZWQgaW50byBhIGNvbW1hbmQtbGluZSBQeXRob24KKyAgICAgICAgIGlmICdDYXJib24nIGluIGV4dC5leHRyYV9saW5rX2FyZ3M6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cHR3ZWFrcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cHR3ZWFrcy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitUaGlzIHBhdGNoIHJlbW92ZXMgdmFyaW91cyB3YXlzIG5hdGl2ZSBzeXN0ZW0gb3B0aW9ucyBjYW4gcGFzcyBpbnRvIHRoZSBweXRob24gCitjb21waWxhdGlvbiBhbmQgc29tZWhvdyBicmVhayBDIG1vZHVsZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTIvMDQvMjMKKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6NDcuMjk1NTgyNTUzICswMDAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6MTUuMDAwMDAwMDAwICswMDAwCitAQCAtMjMxLDcgKzIzMSwxMyBAQAorICAgICAgICAgIyBjb21waWxlcnMKKyAgICAgICAgIGlmIGNvbXBpbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorLSAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgY2ZsYWdzCisrICAgICAgICAgICAgIyBOZWVkIHRvIGZpbHRlciBvdXQgLWlzeXNyb290IGZyb20gdGhlIGZsYWdzLiBJZGVhbGx5IHNob3VsZCAKKysgICAgICAgICAgICAjIGZpZ3VyZSBvdXQgdGFyZ2V0IGZsYWdzIGhlcmUuCisrICAgICAgICAgICAgZmxhZ3MgPSBbXQorKyAgICAgICAgICAgIGZvciBmIGluIGNmbGFncy5zcGxpdCgpOgorKyAgICAgICAgICAgICAgICBpZiBub3QgZi5zdGFydHN3aXRoKCItaXN5c3RlbSIpOgorKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKGYpCisrICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyAnICcuam9pbihmbGFncykKKyAgICAgICAgIHNlbGYuY29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzKCoqYXJncykKKyAKKyAgICAgICAgIGJ1aWxkX2V4dC5idWlsZF9leHRlbnNpb25zKHNlbGYpCitAQCAtMzkzLDcgKzM5OSw2IEBACisgICAgICAgICAjIGludG8gY29uZmlndXJlIGFuZCBzdG9yZWQgaW4gdGhlIE1ha2VmaWxlIChpc3N1ZSBmb3VuZCBvbiBPUyBYIDEwLjMpLgorICAgICAgICAgZm9yIGVudl92YXIsIGFyZ19uYW1lLCBkaXJfbGlzdCBpbiAoCisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctUicsIHNlbGYuY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2RpcnMpLAorLSAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLUwnLCBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnQ1BQRkxBR1MnLCAnLUknLCBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycykpOgorICAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKyAgICAgICAgICAgICBpZiBlbnZfdmFsOgorQEAgLTQxOSwxNiArNDI0LDE2IEBACisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCistICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKysjICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCisrIyAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCisgICAgICAgICAgICAgIyBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHRoYW4KKyAgICAgICAgICAgICAjIHRoZSBvbmUgdGhhdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkIChpc3N1ZSAjNzQ3MykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisgCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgaGF2ZV91bmljb2RlID0gdW5pY29kZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2l0ZWN1c3RvbWl6ZS5weSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczOTAxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkKQEAgLTAsMCArMSw0NSBAQAorIyBPcGVuRW1iZWRkZWQgc2l0ZWN1c3RvbWl6ZS5weSAoQykgMjAwMi0yMDA4IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBHUEx2MiBvciBsYXRlcgorIyBWZXJzaW9uOiAyMDA4MTEyMworIyBGZWF0dXJlczoKKyMgKiBzZXQgcHJvcGVyIGRlZmF1bHQgZW5jb2RpbmcKKyMgKiBlbmFibGUgcmVhZGxpbmUgY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKKyMgKiBsb2FkIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIHN0YXJ0dXAKKyMgKiBzYXZlIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIGV4aXQgCisKK2ltcG9ydCBvcworCitkZWYgX19leGl0aGFuZGxlcigpOgorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworZGVmIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpOgorICAgIGltcG9ydCBhdGV4aXQKKyAgICBhdGV4aXQucmVnaXN0ZXIoIF9fZXhpdGhhbmRsZXIgKQorCitkZWYgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKToKKyAgICByZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGgoIDEwMDAgKQorICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCAidGFiOiBjb21wbGV0ZSIgKQorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgX19lbmFibGVEZWZhdWx0RW5jb2RpbmcoKToKKyAgICBpbXBvcnQgc3lzCisgICAgdHJ5OgorICAgICAgICBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCAidXRmOCIgKQorICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKKyAgICAgICAgcGFzcworCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgX19lbmFibGVEZWZhdWx0RW5jb2RpbmcoKQorICAgIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpCisgICAgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzY1Nzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorUHl0aG9uIHRyaWVzIHRvIHVzZSBuY3Vyc2VzdyBmcm9tIHRoZSBob3N0LAoraWYgaXQgaXMgbm90IGZvdW5kIGNhdXNlcyBhbiBlcnJvciBvbiBjb25maWd1cmUsCit3ZSBzaG91bGQgdXNlIG5jdXJzZXN3IGZyb20gc3lzcm9vdCBpbnN0ZWFkCisKKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworQEAgLTQzMTEsNyArNDMxMSw3IEBAIGZpCisgCisgIyBmaXJzdCBjdXJzZXMgY29uZmlndXJlIGNoZWNrCisgYWNfc2F2ZV9jcHBmbGFncz0iJENQUEZMQUdTIgorLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAtST0vdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhjdXJzZXMuaCBuY3Vyc2VzLmgpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNC4zLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRmZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYgpAQCAtMCwwICsxLDc2IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKworUFIgPSAiJHtJTkNfUFJ9LjAiCitQWVRIT05fTUFKTUlOID0gIjMuNCIKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHogXAorZmlsZTovLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBcCitmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCitmaWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAorZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKK2ZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAorZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAorZmlsZTovLzExMC1lbmFibGUtemxpYi5wYXRjaCBcCitmaWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKK2ZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCitmaWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCitmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKK2ZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorZmlsZTovL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2ggXAorZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCitmaWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAorZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorZmlsZTovL21ha2VyYWNlLnBhdGNoIFwKKyR7RElTVFJPX1NSQ19VUkl9IFwKK2ZpbGU6Ly9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2ggXAorZmlsZTovL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiN2QwOTJkMWJiYTZlMTdmMGQ5YmQyMWI0OWU0NDFkZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjViMzk2MzUzMzc2OGQ1ZmMzMjVhNGQ3YTZiZDZmNjY2NzI2MDAyZDY5NmYxZDM5OWVjMDZiMDQzZWE5OTZiOCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGQ5OGQwMWQ0NzFmYWM4ZDhkYmRkOTc1MjI5ZGJhMDMiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK0VYVFJBTkFUSVZFUEFUSCArPSAiYnppcDItbmF0aXZlIgorREVQRU5EUyA9ICJvcGVuc3NsLW5hdGl2ZSBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIgorCitpbmhlcml0IG5hdGl2ZQorCitSUFJPVklERVMgKz0gInB5dGhvbjMtZGlzdHV0aWxzLW5hdGl2ZSBweXRob24zLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24zLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uMy1jb3JlLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IC0td2l0aG91dC1lbnN1cmVwaXAiCisKK0VYVFJBX09FTUFLRSA9ICdcCisgIEJVSUxEX1NZUz0iIiBcCisgIEhPU1RfU1lTPSIiIFwKKyAgTElCQz0iIiBcCisgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCisgIExJQj0ke2Jhc2VsaWJ9IFwKKyAgQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisnCisKKyMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKK1BZVEhPTkxTQk9QVFMgPSAiIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8ke1BOfQorCWluc3RhbGwgLW0gMDc1NSBQYXJzZXIvcGdlbiAke0R9JHtiaW5kaXJ9LyR7UE59CisKKwkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHB5dGhvbgorCWZvciBQWVRIU0NSSVBUIGluIGBncmVwIC1ySWwgJHtiaW5kaXJ9LyR7UE59L3B5dGhvbiAke0R9JHtiaW5kaXJ9LyR7UE59YDsgZG8KKwkJc2VkIC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob24zfCcgJFBZVEhTQ1JJUFQKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzYuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZjMzBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlRoZSBQeVBBIHJlY29tbWVuZGVkIHRvb2wgZm9yIGluc3RhbGxpbmcgUHl0aG9uIHBhY2thZ2VzIgorc0hPTUVQQUdFc3NzID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGlwIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT00NTY2NWI1MzAzMmMwMmIzNWUyOWRkYWI4ZTYxZmE5MSIKKworU1JDTkFNRSA9ICJwaXAiCitERVBFTkRTICs9ICJweXRob24zIHB5dGhvbjMtc2V0dXB0b29scy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiIFwKKyAgaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YjE5ZTBhOTM0ZDk4MmE1YTRiNzk4ZTk1N2NiNmQ0NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OWYzYjYyNmQyMjVlMDhlN2YyMGQ4NTA0NGFmYTQwZjYxMmViMzI4NDQ4NDE2OTgxM2RjMmQwNjMxZjJhNTU2IgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMzCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcworfQorCisjIFVzZSBzZXR1cHRvb2xzIHNpdGUucHkgaW5zdGVhZCwgYXZvaWQgc2hhcmVkIHN0YXRlIGlzc3VlCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvc2l0ZS5weQorICAgIHJtICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcy9fX3B5Y2FjaGVfXy9zaXRlLmNweXRob24tMzQucHljCit9CisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uMy1jb21waWxlIFwKKyAgcHl0aG9uMy1pbyBcCisgIHB5dGhvbjMtanNvbiBcCisgIHB5dGhvbjMtbmV0c2VydmVyIFwKKyAgcHl0aG9uMy1zZXR1cHRvb2xzIFwKKyAgcHl0aG9uMy11bml4YWRtaW4gXAorICBweXRob24zLXhtbHJwYyBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18xOC4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBhYzgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkRvd25sb2FkLCBidWlsZCwgaW5zdGFsbCwgdXBncmFkZSwgYW5kIHVuaW5zdGFsbCBQeXRob24gcGFja2FnZXMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMucHl0aG9uLm9yZy9zZXR1cHRvb2xzIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NldHVwLnB5O2JlZ2lubGluZT03ODtlbmRsaW5lPTc4O21kNT04YTMxNDI3MGRkN2E4ZGJjYTc0MTc3NTQxNWYxNzE2ZSIKKworU1JDTkFNRSA9ICJzZXR1cHRvb2xzIgorREVQRU5EUyArPSAicHl0aG9uMyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24zLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIgXAorICBodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjUyYjRlNDg5MzllZjMxMWQ3MjA0ZjhmZTk0MDc2NGY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA5OTRhNThkZjI3ZWE1ZGM1MjM3ODJhNjAxMzU3YTIxOThiNzQ5M2RjYzk5YTMwZDUxODI3YTIzNTg1YjViMWQiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzCit9CisjCisjICBUaGUgaW5zdGFsbGVyIHB1dHMgdGhlIHdyb25nIHBhdGggaW4gdGhlIHNldHVwdG9vbHMucHRoIGZpbGUuICBDb3JyZWN0IGl0LgorIworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NldHVwdG9vbHMucHRoCisgICAgbXYgJHtEfSR7YmluZGlyfS9lYXN5X2luc3RhbGwgJHtEfSR7YmluZGlyfS9lYXN5M19pbnN0YWxsCisgICAgZWNobyAiLi8ke1NSQ05BTUV9LSR7UFZ9LXB5JHtQWVRIT05fQkFTRVZFUlNJT059LmVnZyIgPiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24zLWRpc3R1dGlscyBcCisgIHB5dGhvbjMtY29tcHJlc3Npb24gXAorIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gIlwKKyAgcHl0aG9uMy1jdHlwZXMgXAorICBweXRob24zLWRpc3R1dGlscyBcCisgIHB5dGhvbjMtZW1haWwgXAorICBweXRob24zLWltcG9ydGxpYiBcCisgIHB5dGhvbjMtbnVtYmVycyBcCisgIHB5dGhvbjMtY29tcHJlc3Npb24gXAorICBweXRob24zLXNoZWxsIFwKKyAgcHl0aG9uMy1zdWJwcm9jZXNzIFwKKyAgcHl0aG9uMy10ZXh0dXRpbHMgXAorICBweXRob24zLXBrZ3V0aWwgXAorICBweXRob24zLXRocmVhZGluZyBcCisgIHB5dGhvbjMtbWlzYyBcCisgIHB5dGhvbjMtdW5pdHRlc3QgXAorICBweXRob24zLXhtbCBcCisiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTA2YTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK1dlIGNyb3NzIGNvbXBpbGUgcHl0aG9uLiBUaGlzIHBhdGNoIHVzZXMgdG9vbHMgZnJvbSBob3N0L25hdGl2ZQorcHl0aG9uIGluc3RlYWQgb2YgaW4tdHJlZSB0b29scworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbQ29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworLS0tCisgTWFrZWZpbGUucHJlLmluIHwgICAyNSArKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCistLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrKyBiL01ha2VmaWxlLnByZS5pbgorQEAgLTE5Myw2ICsxOTMsNyBAQCBMSUJPQkpTPQlATElCT0JKU0AKKyAKKyBQWVRIT049CQlweXRob24kKEVYRSkKKyBCVUlMRFBZVEhPTj0JcHl0aG9uJChCVUlMREVYRSkKKytIT1NUUFlUSE9OPQkkKEJVSUxEUFlUSE9OKQorIAorIFBZVEhPTl9GT1JfQlVJTEQ9QFBZVEhPTl9GT1JfQlVJTERACisgX1BZVEhPTl9IT1NUX1BMQVRGT1JNPUBfUFlUSE9OX0hPU1RfUExBVEZPUk1ACitAQCAtMjM5LDYgKzI0MCw3IEBAIExJQkZGSV9JTkNMVURFRElSPQlATElCRkZJX0lOQ0xVREVESVJACisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFBhcnNlcgorIFBHRU49CQlQYXJzZXIvcGdlbiQoRVhFKQorK0hPU1RQR0VOPQkkKFBHRU4pJChFWEUpCisgCisgUFNSQ1M9CQlcCisgCQlQYXJzZXIvYWNjZWxlci5jIFwKK0BAIC00NTEsNyArNDUzLDcgQEAgYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGU6CisgCisgcnVuX3Byb2ZpbGVfdGFzazoKKyAJOiAjIEZJWE1FOiBjYW4ndCBydW4gZm9yIGEgY3Jvc3MgYnVpbGQKKy0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChQUk9GSUxFX1RBU0spCisrCSQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pICQoUFJPRklMRV9UQVNLKQorIAorIGJ1aWxkX2FsbF91c2VfcHJvZmlsZToKKyAJJChNQUtFKSBhbGwgQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKK0BAIC02NDAsNyArNjQyLDcgQEAgJChJT19PQkpTKTogJChJT19IKQorICQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkJJChNQUtFKSAkKFBHRU4pCistCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorKwkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisgJChHUkFNTUFSX0MpOiAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJJChNQUtFKSAkKEdSQU1NQVJfSCkKKyAJCXRvdWNoICQoR1JBTU1BUl9DKQorQEAgLTgyMCw3ICs4MjIsNyBAQCAkKExJQlJBUllfT0JKUykgJChNT0RPQkpTKSBNb2R1bGVzL3B5dGhvCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIAorIFRFU1RPUFRTPQkkKEVYVFJBVEVTVE9QVFMpCistVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChURVNUUFlUSE9OT1BUUykKKytURVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAkKFRFU1RQWVRIT05PUFRTKQorIFRFU1RSVU5ORVI9CSQoVEVTVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcnVuX3Rlc3RzLnB5CisgVEVTVFRJTUVPVVQ9CTM2MDAKKyAKK0BAIC0xMjI5LDcgKzEyMzEsNyBAQCBmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlOgkkKExETElCUkFSWSkKKyAJCWZpOyBcCisgCWRvbmUKKyAJJChMTikgLWZzbiBpbmNsdWRlL3B5dGhvbiQoTERWRVJTSU9OKSAkKERFU1RESVIpJChwcmVmaXgpL0hlYWRlcnMKKy0Jc2VkICdzLyVWRVJTSU9OJS8nImAkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAtYyAnaW1wb3J0IHBsYXRmb3JtOyBwcmludChwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpKSdgIicvZycgPCAkKFJFU1NSQ0RJUikvSW5mby5wbGlzdCA+ICQoREVTVERJUikkKHByZWZpeCkvUmVzb3VyY2VzL0luZm8ucGxpc3QKKysJc2VkICdzLyVWRVJTSU9OJS8nImAkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAtYyAnaW1wb3J0IHBsYXRmb3JtOyBwcmludChwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpKSdgIicvZycgPCAkKFJFU1NSQ0RJUikvSW5mby5wbGlzdCA+ICQoREVTVERJUikkKHByZWZpeCkvUmVzb3VyY2VzL0luZm8ucGxpc3QKKyAJJChMTikgLWZzbiAkKFZFUlNJT04pICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL1ZlcnNpb25zL0N1cnJlbnQKKyAJJChMTikgLWZzbiBWZXJzaW9ucy9DdXJyZW50LyQoUFlUSE9ORlJBTUVXT1JLKSAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS8kKFBZVEhPTkZSQU1FV09SSykKKyAJJChMTikgLWZzbiBWZXJzaW9ucy9DdXJyZW50L0hlYWRlcnMgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvSGVhZGVycworQEAgLTEyODgsNyArMTI5MCw3IEBAIGNvbmZpZy5zdGF0dXM6CSQoc3JjZGlyKS9jb25maWd1cmUKKyAKKyAjIFJ1biByZWluZGVudCBvbiB0aGUgbGlicmFyeQorIHJlaW5kZW50OgorLQkuLyQoQlVJTERQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IC1yICQoc3JjZGlyKS9MaWIKKysJJChIT1NUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSAtciAkKHNyY2RpcikvTGliCisgCisgIyBSZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIGl0IHdhcyBydW4gbGFzdCB0aW1lLAorICMgcHJvdmlkZWQgdGhlIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGV4aXN0cworQEAgLTE0MTQsNyArMTQxNiw3IEBAIGZ1bm55OgorIAorICMgUGVyZm9ybSBzb21lIHZlcmlmaWNhdGlvbiBjaGVja3Mgb24gYW55IG1vZGlmaWVkIGZpbGVzLgorIHBhdGNoY2hlY2s6CistCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKKysJJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQorIAorICMgRGVwZW5kZW5jaWVzCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZiMjRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDJmNWE0YzcwOGQ5MGZhOGRiMjFmNDQ2YWU4NzljZmY3OTM4NzQ0OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyMCBNYXkgMjAxMyAyMTowMzoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBoMnB5OiBGaXggaXNzdWUgMTMwMzIgd2hlcmUgaXQgZmFpbHMgd2l0aCBVbmljb2RlRGVjb2RlRXJyb3IKKwordXNlIHV0Zi04IHRvIG9wZW4gdGhlIGZpbGVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgVG9vbHMvc2NyaXB0cy9oMnB5LnB5IHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weSBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQoraW5kZXggNGY4NzFkOS4uYTUzZmJlMCAxMDA3NTUKKy0tLSBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weQorKysrIGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CitAQCAtNjksMTMgKzY5LDEzIEBAIGRlZiBtYWluKCk6CisgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIyBHZW5lcmF0ZWQgYnkgaDJweSBmcm9tIHN0ZGluXG4nKQorICAgICAgICAgICAgIHByb2Nlc3Moc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQorICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJykKKysgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgICBpID0gb3V0ZmlsZS5yZmluZCgnLicpCisgICAgICAgICAgICAgaWYgaSA+IDA6IG91dGZpbGUgPSBvdXRmaWxlWzppXQorICAgICAgICAgICAgIG1vZG5hbWUgPSBvdXRmaWxlLnVwcGVyKCkKKyAgICAgICAgICAgICBvdXRmaWxlID0gbW9kbmFtZSArICcucHknCistICAgICAgICAgICAgb3V0ZnAgPSBvcGVuKG91dGZpbGUsICd3JykKKysgICAgICAgICAgICBvdXRmcCA9IG9wZW4ob3V0ZmlsZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICAgICAgIG91dGZwLndyaXRlKCcjIEdlbmVyYXRlZCBieSBoMnB5IGZyb20gJXNcbicgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgICBmaWxlZGljdCA9IHt9CisgICAgICAgICAgICAgZm9yIGRpciBpbiBzZWFyY2hkaXJzOgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2VmMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0RvbnQgY3Jvc3MgY29tcGlsZSBzaXRlIHBhY2thZ2VzCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtFbWJlZGRlZC1TcGVjaWZpY10KKworLS0tCisgTWFrZWZpbGUucHJlLmluIHwgICAxNiAtLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGRlbGV0aW9ucygtKQorCistLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrKyBiL01ha2VmaWxlLnByZS5pbgorQEAgLTEwNzgsMjQgKzEwNzgsNiBAQCBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMCisgCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL01vZHVsZXMveHhtb2R1bGUuYyBcCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKSAtZiBcCistCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKy0JCSQoREVTVERJUikkKExJQkRFU1QpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkgLWYgXAorLQkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCistCQkkKERFU1RESVIpJChMSUJERVNUKQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKy0JCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCistCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorIAkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjIFdlIG5lZWQgdG8gc3VwcGx5IFNUQUdJTkdfSU5DRElSIGhlcmUsIG90aGVyd2lzZSB0aGUgVGsgaGVhZGVycworIyB3aWxsIG5vdCBiZSBmb3VuZC4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUuZGU+CisKK0luZGV4OiBQeXRob24tMy4zLjByYzIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9zZXR1cC5weQkyMDEyLTA5LTIwIDE1OjI0OjE0LjAwOTEyNDAwMyAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQkyMDEyLTA5LTIwIDE1OjI1OjA4LjQ0OTEyNDk2MyAtMDcwMAorQEAgLTE2MjAsNyArMTYyMCw3IEBACisgICAgICAgICAgICAgICAgIGRvdHZlcnNpb24gPSBkb3R2ZXJzaW9uWzotMV0gKyAnLicgKyBkb3R2ZXJzaW9uWy0xXQorICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiA9IFtdCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgPSBbXQorLSAgICAgICAgICAgIGZvciBkaXIgaW4gaW5jX2RpcnM6CisrICAgICAgICAgICAgZm9yIGRpciBpbiBbb3MuZ2V0ZW52KCJTVEFHSU5HX0lOQ0RJUiIpXToKKyAgICAgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGNsIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGsiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSB0Y2xfaW5jbHVkZV9zdWIKK0BAIC0xNjM5LDIyICsxNjM5LDYgQEAKKyAgICAgICAgICAgICBpZiBkaXIgbm90IGluIGluY2x1ZGVfZGlyczoKKyAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZChkaXIpCisgCistICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdG9yaWVzCistICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdzdW5vczUnOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNi9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliNjQnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNS9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvbGliJykKKy0gICAgICAgIGVsc2U6CistICAgICAgICAgICAgIyBBc3N1bWUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgWDExCistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9saWInKQorLQorICAgICAgICAgIyBJZiBDeWd3aW4sIHRoZW4gdmVyaWZ5IHRoYXQgWCBpcyBpbnN0YWxsZWQgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgICAgICAgeDExX2luYyA9IGZpbmRfZmlsZSgnWDExL1hsaWIuaCcsIFtdLCBpbmNsdWRlX2RpcnMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZWFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitEbyBub3QgaGFyZGNvZGUgL3VzciBpbnRvIGluY2x1ZGUgcGF0aHMgd2hlbiBjcm9zcyBjb21waWxpbmcKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisgCistLS0KKyBzZXR1cC5weSB8ICAgMTUgKystLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBQeXRob24tMy4zLjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjIub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0zLjMuMi9zZXR1cC5weQorQEAgLTQ0NCw3ICs0NDQsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIG9ubHkgY2hhbmdlIHRoaXMgZm9yIGNyb3NzIGJ1aWxkcyBmb3IgMy4zLCBpc3N1ZXMgb24gTWFnZWlhCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgc2VsZi5hZGRfZ2NjX3BhdGhzKCkKKy0gICAgICAgIHNlbGYuYWRkX211bHRpYXJjaF9wYXRocygpCisrICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgIHNlbGYuYWRkX211bHRpYXJjaF9wYXRocygpCisgCisgICAgICAgICAjIEFkZCBwYXRocyBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBMREZMQUdTIGFuZAorICAgICAgICAgIyBDUFBGTEFHUyBmb3IgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzLgorQEAgLTQ4MCw3ICs0ODEsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkgIT0gJy91c3InIFwKKysgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmcgYW5kIG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KSAhPSAnL3VzcicgXAorICAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZjI2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNC1kZWZhdWx0LWlzLW9wdGltaXplZC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjIHdoZW4gY29tcGlsaW5nIGZvciBhbiBlbWJlZGRlZCBzeXN0ZW0sIHdlIG5lZWQgZXZlcnkgYml0IG9mCisjIHBlcmZvcm1hbmNlIHdlIGNhbiBnZXQuIGRlZmF1bHQgdG8gb3B0aW1pemVkIHdpdGggdGhlIG9wdGlvbgorIyBvZiBvcHQtb3V0LgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KKworCisyMDEyLzA1LzAxCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitSZWJhc2VkIGZvciAzLjQuMiAwMi8yMDE1CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9QeXRob24vY29tcGlsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvUHl0aG9uL2NvbXBpbGUuYworKysrIFB5dGhvbi0zLjQuMi9QeXRob24vY29tcGlsZS5jCitAQCAtMzAsNyArMzAsNyBAQAorICNpbmNsdWRlICJzeW10YWJsZS5oIgorICNpbmNsdWRlICJvcGNvZGUuaCIKKyAKKy1pbnQgUHlfT3B0aW1pemVGbGFnID0gMDsKKytpbnQgUHlfT3B0aW1pemVGbGFnID0gMTsKKyAKKyAjZGVmaW5lIERFRkFVTFRfQkxPQ0tfU0laRSAxNgorICNkZWZpbmUgREVGQVVMVF9CTE9DS1MgOAorSW5kZXg6IFB5dGhvbi0zLjQuMi9Nb2R1bGVzL21haW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL01vZHVsZXMvbWFpbi5jCisrKysgUHl0aG9uLTMuNC4yL01vZHVsZXMvbWFpbi5jCitAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgd2NoYXJfdCAqKm9yaWdfYXJndjsKKyBzdGF0aWMgaW50ICBvcmlnX2FyZ2M7CisgCisgLyogY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KKy0jZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSUptOk9xUnNTdHV2Vlc6eFg6PyIKKysjZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSUptOk5PcVJzU3R1dlZXOnhYOj8iCisgCisgI2RlZmluZSBQUk9HUkFNX09QVFMgQkFTRV9PUFRTCisgCitAQCAtNjQsNiArNjQsNyBAQCBzdGF0aWMgY2hhciAqdXNhZ2VfMiA9ICJcCisgLW0gbW9kIDogcnVuIGxpYnJhcnkgbW9kdWxlIGFzIGEgc2NyaXB0ICh0ZXJtaW5hdGVzIG9wdGlvbiBsaXN0KVxuXAorIC1PICAgICA6IG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZSBzbGlnaHRseTsgYWxzbyBQWVRIT05PUFRJTUlaRT14XG5cCisgLU9PICAgIDogcmVtb3ZlIGRvYy1zdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSAtTyBvcHRpbWl6YXRpb25zXG5cCisrLU4gICAgIDogZG8gTk9UIG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZVxuXAorIC1xICAgICA6IGRvbid0IHByaW50IHZlcnNpb24gYW5kIGNvcHlyaWdodCBtZXNzYWdlcyBvbiBpbnRlcmFjdGl2ZSBzdGFydHVwXG5cCisgLXMgICAgIDogZG9uJ3QgYWRkIHVzZXIgc2l0ZSBkaXJlY3RvcnkgdG8gc3lzLnBhdGg7IGFsc28gUFlUSE9OTk9VU0VSU0lURVxuXAorIC1TICAgICA6IGRvbid0IGltcGx5ICdpbXBvcnQgc2l0ZScgb24gaW5pdGlhbGl6YXRpb25cblwKK0BAIC00MTgsOCArNDE5LDggQEAgUHlfTWFpbihpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YpCisgCisgICAgICAgICAvKiBjYXNlICdKJzogcmVzZXJ2ZWQgZm9yIEp5dGhvbiAqLworIAorLSAgICAgICAgY2FzZSAnTyc6CistICAgICAgICAgICAgUHlfT3B0aW1pemVGbGFnKys7CisrICAgICAgICBjYXNlICdOJzoKKysgICAgICAgICAgICBQeV9PcHRpbWl6ZUZsYWc9MDsKKyAgICAgICAgICAgICBicmVhazsKKyAKKyAgICAgICAgIGNhc2UgJ0InOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5OTI5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorY29uc2lkZXIgb3BrZyBkaXJlY3RvcmllcyB3aGVuIGNsZWFuaW5nIHVwCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKKy0tLQorIE1ha2VmaWxlLnByZS5pbiB8ICAgIDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKysgYi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMzA2LDggKzEzMDYsOCBAQCB0b3VjaDoKKyAjIFNhbml0YXRpb24gdGFyZ2V0cyAtLSBjbGVhbiBsZWF2ZXMgbGlicmFyaWVzLCBleGVjdXRhYmxlcyBhbmQgdGFncworICMgZmlsZXMsIHdoaWNoIGNsb2JiZXIgcmVtb3ZlcyBhcyB3ZWxsCisgcHljcmVtb3ZhbDoKKy0JLWZpbmQgJChzcmNkaXIpIC1kZXB0aCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fSAnOycKKy0JLWZpbmQgJChzcmNkaXIpIC1uYW1lICcqLnB5W2NvXScgLWV4ZWMgcm0gLWYge30gJzsnCisrCS1maW5kICQoc3JjZGlyKSAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtZGVwdGggLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30gJzsnCisrCS1maW5kICQoc3JjZGlyKSAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5weVtjb10nIC1leGVjIHJtIC1mIHt9ICc7JworIAorIHJtdGVzdHR1cmRzOgorIAktcm0gLWYgKkJBRCAqR09PRCAqU0tJUFBFRAorQEAgLTEzMjEsOSArMTMyMSw5IEBAIGRvY2NsZWFuOgorIAktcm0gLXJmIERvYy90b29scy9zcGhpbnggRG9jL3Rvb2xzL3B5Z21lbnRzIERvYy90b29scy9kb2N1dGlscworIAorIGNsZWFuOiBweWNyZW1vdmFsCistCWZpbmQgLiAtbmFtZSAnKi5bb2FdJyAtZXhlYyBybSAtZiB7fSAnOycKKy0JZmluZCAuIC1uYW1lICcqLnNbb2xdJyAtZXhlYyBybSAtZiB7fSAnOycKKy0JZmluZCAuIC1uYW1lICcqLnNvLlswLTldKi5bMC05XSonIC1leGVjIHJtIC1mIHt9ICc7JworKwlmaW5kIC4gISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyouW29hXScgLWV4ZWMgcm0gLWYge30gJzsnCisrCWZpbmQgLiAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5zW29sXScgLWV4ZWMgcm0gLWYge30gJzsnCisrCWZpbmQgLiAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5zby5bMC05XSouWzAtOV0qJyAtZXhlYyBybSAtZiB7fSAnOycKKyAJZmluZCBidWlsZCAtbmFtZSAnZmZpY29uZmlnLmgnIC1leGVjIHJtIC1mIHt9ICc7JyB8fCB0cnVlCisgCWZpbmQgYnVpbGQgLW5hbWUgJ2ZmaWNvbmZpZy5weScgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKKyAJLXJtIC1mIExpYi9saWIydG8zLypHcmFtbWFyKi5waWNrbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2NDE5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK2RvIG5vdCAiYWRqdXN0IiBweXRob24gZmlsZXMgYmVmb3JlIGNvcHlpbmcKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZC1TcGVjaWZpY10KKworLS0tCisgTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkgfCAgIDQzICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQorCistLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKK0BAIC01MSwxMCArNTEsNyBAQCBjbGFzcyBidWlsZF9zY3JpcHRzKENvbW1hbmQpOgorIAorIAorICAgICBkZWYgY29weV9zY3JpcHRzKHNlbGYpOgorLSAgICAgICAgIiIiQ29weSBlYWNoIHNjcmlwdCBsaXN0ZWQgaW4gJ3NlbGYuc2NyaXB0cyc7IGlmIGl0J3MgbWFya2VkIGFzIGEKKy0gICAgICAgIFB5dGhvbiBzY3JpcHQgaW4gdGhlIFVuaXggd2F5IChmaXJzdCBsaW5lIG1hdGNoZXMgJ2ZpcnN0X2xpbmVfcmUnLAorLSAgICAgICAgaWUuIHN0YXJ0cyB3aXRoICJcIyEiIGFuZCBjb250YWlucyAicHl0aG9uIiksIHRoZW4gYWRqdXN0IHRoZSBmaXJzdAorLSAgICAgICAgbGluZSB0byByZWZlciB0byB0aGUgY3VycmVudCBQeXRob24gaW50ZXJwcmV0ZXIgYXMgd2UgY29weS4KKysgICAgICAgICIiIkNvcHkgZWFjaCBzY3JpcHQgbGlzdGVkIGluICdzZWxmLnNjcmlwdHMnCisgICAgICAgICAiIiIKKyAgICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfZGlyKQorICAgICAgICAgb3V0ZmlsZXMgPSBbXQorQEAgLTc4LDY0ICs3NSwxMCBAQCBjbGFzcyBidWlsZF9zY3JpcHRzKENvbW1hbmQpOgorICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgZiA9IE5vbmUKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICBlbmNvZGluZywgbGluZXMgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoZi5yZWFkbGluZSkKKy0gICAgICAgICAgICAgICAgZi5zZWVrKDApCistICAgICAgICAgICAgICAgIGZpcnN0X2xpbmUgPSBmLnJlYWRsaW5lKCkKKy0gICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0X2xpbmU6CistICAgICAgICAgICAgICAgICAgICBzZWxmLndhcm4oIiVzIGlzIGFuIGVtcHR5IGZpbGUgKHNraXBwaW5nKSIgJSBzY3JpcHQpCistICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorLQorLSAgICAgICAgICAgICAgICBtYXRjaCA9IGZpcnN0X2xpbmVfcmUubWF0Y2goZmlyc3RfbGluZSkKKy0gICAgICAgICAgICAgICAgaWYgbWF0Y2g6CistICAgICAgICAgICAgICAgICAgICBhZGp1c3QgPSBUcnVlCistICAgICAgICAgICAgICAgICAgICBwb3N0X2ludGVycCA9IG1hdGNoLmdyb3VwKDEpIG9yIGInJworLQorLSAgICAgICAgICAgIGlmIGFkanVzdDoKKy0gICAgICAgICAgICAgICAgbG9nLmluZm8oImNvcHlpbmcgYW5kIGFkanVzdGluZyAlcyAtPiAlcyIsIHNjcmlwdCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZF9kaXIpCistICAgICAgICAgICAgICAgIHVwZGF0ZWRfZmlsZXMuYXBwZW5kKG91dGZpbGUpCistICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CistICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3lzY29uZmlnLnB5dGhvbl9idWlsZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5leGVjdXRhYmxlCistICAgICAgICAgICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBvcy5wYXRoLmpvaW4oCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQklORElSIiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVzJXMiICUgKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiVkVSU0lPTiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkVYRSIpKSkKKy0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBvcy5mc2VuY29kZShleGVjdXRhYmxlKQorLSAgICAgICAgICAgICAgICAgICAgc2hlYmFuZyA9IGIiIyEiICsgZXhlY3V0YWJsZSArIHBvc3RfaW50ZXJwICsgYiJcbiIKKy0gICAgICAgICAgICAgICAgICAgICMgUHl0aG9uIHBhcnNlciBzdGFydHMgdG8gcmVhZCBhIHNjcmlwdCB1c2luZyBVVEYtOCB1bnRpbAorLSAgICAgICAgICAgICAgICAgICAgIyBpdCBnZXRzIGEgI2NvZGluZzp4eHggY29va2llLiBUaGUgc2hlYmFuZyBoYXMgdG8gYmUgdGhlCistICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IGxpbmUgb2YgYSBmaWxlLCB0aGUgI2NvZGluZzp4eHggY29va2llIGNhbm5vdCBiZQorLSAgICAgICAgICAgICAgICAgICAgIyB3cml0dGVuIGJlZm9yZS4gU28gdGhlIHNoZWJhbmcgaGFzIHRvIGJlIGRlY29kYWJsZSBmcm9tCistICAgICAgICAgICAgICAgICAgICAjIFVURi04LgorLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgIHNoZWJhbmcuZGVjb2RlKCd1dGYtOCcpCistICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc2hlYmFuZyAoeyFyfSkgaXMgbm90IGRlY29kYWJsZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHV0Zi04Ii5mb3JtYXQoc2hlYmFuZykpCistICAgICAgICAgICAgICAgICAgICAjIElmIHRoZSBzY3JpcHQgaXMgZW5jb2RlZCB0byBhIGN1c3RvbSBlbmNvZGluZyAodXNlIGEKKy0gICAgICAgICAgICAgICAgICAgICMgI2NvZGluZzp4eHggY29va2llKSwgdGhlIHNoZWJhbmcgaGFzIHRvIGJlIGRlY29kYWJsZSBmcm9tCistICAgICAgICAgICAgICAgICAgICAjIHRoZSBzY3JpcHQgZW5jb2RpbmcgdG9vLgorLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgIHNoZWJhbmcuZGVjb2RlKGVuY29kaW5nKQorLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHNoZWJhbmcgKHshcn0pIGlzIG5vdCBkZWNvZGFibGUgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB0aGUgc2NyaXB0IGVuY29kaW5nICh7fSkiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2hlYmFuZywgZW5jb2RpbmcpKQorLSAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICJ3YiIpIGFzIG91dGY6CistICAgICAgICAgICAgICAgICAgICAgICAgb3V0Zi53cml0ZShzaGViYW5nKQorLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGYud3JpdGVsaW5lcyhmLnJlYWRsaW5lcygpKQorLSAgICAgICAgICAgICAgICBpZiBmOgorLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgaWYgZjoKKysgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCistICAgICAgICAgICAgICAgIHVwZGF0ZWRfZmlsZXMuYXBwZW5kKG91dGZpbGUpCistICAgICAgICAgICAgICAgIHNlbGYuY29weV9maWxlKHNjcmlwdCwgb3V0ZmlsZSkKKysgICAgICAgICAgICB1cGRhdGVkX2ZpbGVzLmFwcGVuZChvdXRmaWxlKQorKyAgICAgICAgICAgIHNlbGYuY29weV9maWxlKHNjcmlwdCwgb3V0ZmlsZSkKKyAKKyAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgICBmb3IgZmlsZSBpbiBvdXRmaWxlczoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTJhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK0VuYWJsZSB6bGliIGluIHB5dGhvbgorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorCistLS0KKyBNb2R1bGVzL1NldHVwLmRpc3QgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysrIGIvTW9kdWxlcy9TZXR1cC5kaXN0CitAQCAtMzU0LDcgKzM1NCw3IEBAIF9zeW10YWJsZSBzeW10YWJsZW1vZHVsZS5jCisgIyBBbmRyZXcgS3VjaGxpbmcncyB6bGliIG1vZHVsZS4KKyAjIFRoaXMgcmVxdWlyZSB6bGliIDEuMS4zIChvciBsYXRlcikuCisgIyBTZWUgaHR0cDovL3d3dy5nemlwLm9yZy96bGliLworLSN6bGliIHpsaWJtb2R1bGUuYyAtSSQocHJlZml4KS9pbmNsdWRlIC1MJChleGVjX3ByZWZpeCkvbGliIC1segorK3psaWIgemxpYm1vZHVsZS5jIC1segorIAorICMgSW50ZXJmYWNlIHRvIHRoZSBFeHBhdCBYTUwgcGFyc2VyCisgIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMmRmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworMDIvMjAxNSBSZWJhc2VkIGZvciBQeXRob24gMy40LjIKKworIyBUaGUgcHJvcGVyIHByZWZpeCBpcyBpbnNpZGUgb3VyIHN0YWdpbmcgYXJlYS4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisjIFNpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisjIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFNpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC0xNiwxMCArMTYsMTEgQEAgaW1wb3J0IHN5cworIGZyb20gLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgorIAorICMgVGhlc2UgYXJlIG5lZWRlZCBpbiBhIGNvdXBsZSBvZiBzcG90cywgc28ganVzdCBjb21wdXRlIHRoZW0gb25jZS4KKy1QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCistRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKKy1CQVNFX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KQorLUJBU0VfRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX2V4ZWNfcHJlZml4KQorK1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytFWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0JBU0VfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrQkFTRV9FWEVDX1BSRUZJWD0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9leGVjX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKysKKyAKKyAjIFBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LiBPbiBXaW5kb3dzIHRoZSBiaW5hcnkgbWF5CisgIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCitAQCAtOTMsNyArOTQsOSBAQCBkZWYgZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wLCBwcmVmCisgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMuYmFzZV9wcmVmaXggb3IKKyAgICAgc3lzLmJhc2VfZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCistICAgIGlmIHByZWZpeCBpcyBOb25lOgorKyAgICBpZiBwcmVmaXggaXMgTm9uZSBhbmQgb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXSAhPSAiIjoKKysgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10ucnN0cmlwKCdpbmNsdWRlJykKKysgICAgZWxpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEJBU0VfRVhFQ19QUkVGSVggb3IgQkFTRV9QUkVGSVgKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgorQEAgLTEzNCw2ICsxMzcsMTIgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbgorICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLmJhc2VfcHJlZml4IG9yCisgICAgIHN5cy5iYXNlX2V4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorKyAgICBpZiBwcmVmaXggaXMgTm9uZSBhbmQgb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXSAhPSAiIjoKKysgICAgICAgIGxpYl9iYXNlbmFtZSA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10uc3BsaXQoJy8nKVstMV0KKysgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10ucnN0cmlwKGxpYl9iYXNlbmFtZSkKKysgICAgZWxzZToKKysgICAgICAgIGxpYl9iYXNlbmFtZSA9IHN5cy5saWIKKysKKyAgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgQkFTRV9FWEVDX1BSRUZJWCBvciBCQVNFX1BSRUZJWAorQEAgLTE0Miw3ICsxNTEsNyBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Jhc2VuYW1lLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CitAQCAtMjQyLDcgKzI1MSw3IEBAIGRlZiBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKToKKyAgICAgZWxzZToKKyAgICAgICAgIGluY19kaXIgPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTEpCisgCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsICdweWNvbmZpZy5oJy5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKSkKKyAKKyAKKyBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CitAQCAtMjUxLDcgKzI2MCw3IEBAIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKKyAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oX3N5c19ob21lIG9yIHByb2plY3RfYmFzZSwgIk1ha2VmaWxlIikKKyAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCisgICAgIGNvbmZpZ19maWxlID0gJ2NvbmZpZy17fXt9Jy5mb3JtYXQoZ2V0X3B5dGhvbl92ZXJzaW9uKCksIGJ1aWxkX2ZsYWdzKQorLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsIGNvbmZpZ19maWxlLCAnTWFrZWZpbGUnKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsIGNvbmZpZ19maWxlLCAnTWFrZWZpbGUnKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorIAorIGRlZiBwYXJzZV9jb25maWdfaChmcCwgZz1Ob25lKToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDU2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2UgcHl0aG9uLXJlYWRsaW5lCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgU3BlY2lmaWNdCisKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTY2Niw0NSArNjY2LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyByZWFkbGluZQorICAgICAgICAgZG9fcmVhZGxpbmUgPSBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAncmVhZGxpbmUnKQorICAgICAgICAgcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5ID0gIiIKKy0gICAgICAgIGN1cnNlc19saWJyYXJ5ID0gIiIKKy0gICAgICAgICMgQ2Fubm90IHVzZSBvcy5wb3BlbiBoZXJlIGluIHB5M2suCistICAgICAgICB0bXBmaWxlID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfdGVtcCwgJ3JlYWRsaW5lX3Rlcm1jYXBfbGliJykKKy0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX3RlbXApOgorLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuYnVpbGRfdGVtcCkKKy0gICAgICAgICMgRGV0ZXJtaW5lIGlmIHJlYWRsaW5lIGlzIGFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzIG9yIHRpbmZvLgorLSAgICAgICAgaWYgZG9fcmVhZGxpbmU6CistICAgICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorLSAgICAgICAgICAgICAgICByZXQgPSBvcy5zeXN0ZW0oIiVzIC1kICVzIHwgZ3JlcCAnKE5FRURFRCknID4gJXMiIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUkVBREVMRicpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fcmVhZGxpbmUsIHRtcGZpbGUpKQorLSAgICAgICAgICAgIGVsaWYgZmluZF9leGVjdXRhYmxlKCdsZGQnKToKKy0gICAgICAgICAgICAgICAgcmV0ID0gb3Muc3lzdGVtKCJsZGQgJXMgPiAlcyIgJSAoZG9fcmVhZGxpbmUsIHRtcGZpbGUpKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJldCA9IDI1NgorLSAgICAgICAgICAgIGlmIHJldCA+PiA4ID09IDA6CistICAgICAgICAgICAgICAgIHdpdGggb3Blbih0bXBmaWxlKSBhcyBmcDoKKy0gICAgICAgICAgICAgICAgICAgIGZvciBsbiBpbiBmcDoKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAnY3Vyc2VzJyBpbiBsbjoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5ID0gcmUuc3ViKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicuKmxpYihuP2N1cnNlc3c/KVwuc28uKicsIHInXDEnLCBsbgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnJzdHJpcCgpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXJtY2FwIGludGVyZmFjZSBzcGxpdCBvdXQgZnJvbSBuY3Vyc2VzCistICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3RpbmZvJyBpbiBsbjoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5ID0gJ3RpbmZvJworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRtcGZpbGUpOgorLSAgICAgICAgICAgICAgICBvcy51bmxpbmsodG1wZmlsZSkKKy0gICAgICAgICMgSXNzdWUgNzM4NDogSWYgcmVhZGxpbmUgaXMgYWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMsCistICAgICAgICAjIHVzZSB0aGUgc2FtZSBsaWJyYXJ5IGZvciB0aGUgcmVhZGxpbmUgYW5kIGN1cnNlcyBtb2R1bGVzLgorLSAgICAgICAgaWYgJ2N1cnNlcycgaW4gcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5OgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5CistICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ25jdXJzZXN3JworLSAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmN1cnNlcycpOgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ25jdXJzZXMnCistICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdjdXJzZXMnKToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICdjdXJzZXMnCisrICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICJuY3Vyc2VzIgorIAorICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICBvc19yZWxlYXNlID0gaW50KG9zLnVuYW1lKClbMl0uc3BsaXQoJy4nKVswXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQ3Yzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK0ZpeCB3YXJuaW5nIHdpdGggbmV3ZXIgY29tcGlsZXIKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworQEAgLTExNiw3ICsxMTYsNyBAQCBjaGFyICpQeUN1cnNlc1ZlcnNpb24gPSAiMi4yIjsKKyAgICAgI2RlZmluZXMgbWFueSBjb21tb24gc3ltYm9scyAoc3VjaCBhcyAibGluZXMiKSB3aGljaCBicmVha3MgdGhlCisgICAgIGN1cnNlcyBtb2R1bGUgaW4gb3RoZXIgd2F5cy4gIFNvIHRoZSBjb2RlIHdpbGwganVzdCBzcGVjaWZ5CisgICAgIGV4cGxpY2l0IHByb3RvdHlwZXMgaGVyZS4gKi8KKy1leHRlcm4gaW50IHNldHVwdGVybShjaGFyICosaW50LGludCAqKTsKKysvL2V4dGVybiBpbnQgc2V0dXB0ZXJtKGNoYXIgKixpbnQsaW50ICopOworICNpZmRlZiBfX3NnaQorICNpbmNsdWRlIDx0ZXJtLmg+CisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjlhZTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHN5c3Jvb3QgaXMgdXNlZCBieSBnY2MgaW5zdGVhZCBvZiBhc3N1bWluZworaGFyZGNvZGVkIGxvY2F0aW9ucyBmb3IgaW5jbHVkZSBwYXRocworCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworQEAgLTQ0MzQsNyArNDQzNCw3IEBAIGZpCisgCisgIyBmaXJzdCBjdXJzZXMgaGVhZGVyIGNoZWNrCisgYWNfc2F2ZV9jcHBmbGFncz0iJENQUEZMQUdTIgorLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAtST0vdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhjdXJzZXMuaCBuY3Vyc2VzLmgpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApAQCAtMCwwICsxLDI1IEBACitfdGtpbnRlciBtb2R1bGUgbmVlZHMgdGsgbW9kdWxlIGFsb25nIHdpdGggdGNsLiB0ayBpcyBub3QgeWV0IGludGVncmF0ZWQKK2luIHlvY3RvIHNvIHdlIHNraXAgdGhlIGNoZWNrIGZvciB0aGlzIG1vZHVsZS4KK0F2b2lkIGEgd2FybmluZyBieSBub3QgYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE4OjM4LjUwMDEzNjY0NyArMDMwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE5OjM1Ljg4ODEzNDk2OSArMDMwMAorQEAgLTE2MzQsOCArMTYzNCwxMCBAQAorICAgICAgICAgIyBDYWxsIHRoZSBtZXRob2QgZm9yIGRldGVjdGluZyB3aGV0aGVyIF90a2ludGVyIGNhbiBiZSBjb21waWxlZAorICAgICAgICAgc2VsZi5kZXRlY3RfdGtpbnRlcihpbmNfZGlycywgbGliX2RpcnMpCisgCistICAgICAgICBpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CistICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKysgICAgICAgICMgdGtpbnRlciBtb2R1bGUgd2lsbCBub3QgYmUgYXZhbGFpYmxlIGFzIHlvY3RvCisrICAgICAgICAjIGRvZXNuJ3QgaGF2ZSB0ayBpbnRlZ3JhdGVkICh5ZXQpCisrICAgICAgICAjaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorKyAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorIAorICAgICAgICAgcmV0dXJuIG1pc3NpbmcKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9jZ2lfcHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTA0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0xpYi9jZ2kucHk6IFVwZGF0ZSB0aGUgc2NyaXB0IGFzIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkub3JpZwkyMDEwLTA4LTAxIDIyOjE0OjI3LjAwMDAwMDAwMCAtMDUwMAorKysrIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5CTIwMTEtMDktMjEgMTU6Mjg6NDAuNDc4MjA4NjMxIC0wNTAwCitAQCAtMSwxMyArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcHl0aG9uCistCistIyBOT1RFOiB0aGUgYWJvdmUgIi91c3IvbG9jYWwvYmluL3B5dGhvbiIgaXMgTk9UIGEgbWlzdGFrZS4gIEl0IGlzCistIyBpbnRlbnRpb25hbGx5IE5PVCAiL3Vzci9iaW4vZW52IHB5dGhvbiIuICBPbiBtYW55IHN5c3RlbXMKKy0jIChlLmcuIFNvbGFyaXMpLCAvdXNyL2xvY2FsL2JpbiBpcyBub3QgaW4gJFBBVEggYXMgcGFzc2VkIHRvIENHSQorLSMgc2NyaXB0cywgYW5kIC91c3IvbG9jYWwvYmluIGlzIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSB3aGVyZSBQeXRob24gaXMKKy0jIGluc3RhbGxlZCwgc28gL3Vzci9iaW4vZW52IHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHB5dGhvbi4gIEdyYW50ZWQsCistIyBiaW5hcnkgaW5zdGFsbGF0aW9ucyBieSBMaW51eCB2ZW5kb3JzIG9mdGVuIGluc3RhbGwgUHl0aG9uIGluCistIyAvdXNyL2Jpbi4gIFNvIGxldCB0aG9zZSB2ZW5kb3JzIHBhdGNoIGNnaS5weSB0byBtYXRjaCB0aGVpciBjaG9pY2UKKy0jIG9mIGluc3RhbGxhdGlvbi4KKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgCisgIiIiU3VwcG9ydCBtb2R1bGUgZm9yIENHSSAoQ29tbW9uIEdhdGV3YXkgSW50ZXJmYWNlKSBzY3JpcHRzLgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxYTk3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyBwYXRjaCBmaXhlcyBpc3N1aW5nIHdpdGggZGlmZmVyZW50IGxpYmRpciBsaWtlIGxpYjY0LgorVGhpcyBwYXRjaCBtYWtlcyB0aGUgbmF0aXZlIHB5dGhvbiBiaW5hcnkgbW9kdWxlcyBmaW5kYWJsZQoraW4gdGhlIGluc3RhbGwgcHJvY2VzcyBvZiB0aGUgaG9zdCBweXRob24uCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzAzLzE0CisKK1VwZGF0ZWQgZm9yIHB5dGhvbiAyLjcuMworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDUvMDEKKworSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvTGliL3N5c2NvbmZpZy5weQkyMDEyLTA5LTIwIDIyOjUwOjExLjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9MaWIvc3lzY29uZmlnLnB5CTIwMTItMDktMjAgMjI6NTM6MDEuNTYxMTIzMzk2IC0wNzAwCitAQCAtMjEsOSArMjEsOSBAQAorIAorIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzoKKyAgICAgICAgICAgICAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fXthYmlmbGFnc30nLAorQEAgLTgzLDcgKzgzLDcgQEAKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CisgICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKK0luZGV4OiBQeXRob24tMy4zLjByYzIvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvTWFrZWZpbGUucHJlLmluCTIwMTItMDktMjAgMjI6NTA6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL01ha2VmaWxlLnByZS5pbgkyMDEyLTA5LTIwIDIyOjUwOjU0LjI0NTEyMzk5NyAtMDcwMAorQEAgLTEwODAsOSArMTA4MCw5IEBACisgCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL01vZHVsZXMveHhtb2R1bGUuYyBcCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKyAKKyAjIENyZWF0ZSB0aGUgUExBVERJUiBzb3VyY2UgZGlyZWN0b3J5LCBpZiBvbmUgd2Fzbid0IGRpc3RyaWJ1dGVkLi4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwNTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK3doZW4gYnVpbGRpbmcgcHl0aG9uIGZvciBxZW11eDg2LTY0IG9uIHVidW50dSAxMS4xMC82NGJpdAoraXQgZ3JvcGVzIGludG8gaG9zdCBpbmNsdWRlcyBhbmQgdGhlbiBtaXhlcyB0aGVtIHdpdGggY3Jvc3MKK2luY2x1ZGVzIGFuZCBhcyBhIHJlc3VsdCBzb21lIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIGFuZCBsaW5rCitvbmUgb2YgdGhlIG1vZHVsZXMgaXMgcHl0aG9uLWVsZW1lbnR0cmVlIHdoaWNoIGlzIHRoZW4gbm90Citmb3VuZCBkdXJpbmcgaW1hZ2UgY3JlYXRpb24KKworUHJvYmxlIGlzIHRoYXQgc2V0dXAucHkgdHJpZXMgdG8gYWRkIG5hdGl2ZSBpbmNsdWRlcyB0aGF0IG5ld2VyCit1YnVudHUgaGFzIGludHJvZHVjZWQgZm9yIG11bHRpYXJjaCBzdXBwb3J0LiBCdXQgdGhhdCBzaG91bGQKK29ubHkgaGFwcGVuIGZvciBuYXRpdmUgYnVpbGRzIGFuZCBub3QgY3Jvc3MgYnVpbGRpbmcgcHl0aG9uCitzbyB3ZSBhZGQgYSBjaGVjayBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMy4zLjByYzIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9zZXR1cC5weQkyMDEyLTA5LTIwIDIxOjU0OjUwLjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQkyMDEyLTA5LTIwIDIxOjU3OjM1LjAyOTEyMzg1OCAtMDcwMAorQEAgLTQwMiw2ICs0MDIsOSBAQAorIAorICAgICAgICAgaWYgbm90IGZpbmRfZXhlY3V0YWJsZSgnZHBrZy1hcmNoaXRlY3R1cmUnKToKKyAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICByZXR1cm4KKysKKyAgICAgICAgIG9wdCA9ICcnCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgb3B0ID0gJy10JyArIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSE9TVF9HTlVfVFlQRScpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNjg5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9tYWtlcmFjZS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitUaGVyZSBpcyBhIHJhY2UgZHVlIHRvIHRoZSBleGVjdXRpb24gb2YgbWFrZSBpbnNpZGUgdGhlIG1ha2VmaWxlOgorCit8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBPYmplY3RzL29ibWFsbG9jLm8gT2JqZWN0cy9vYm1hbGxvYy5jCit8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBQYXJzZXIvcGdlbi5vIFBhcnNlci9wZ2VuLmN8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBPYmplY3RzL29ibWFsbG9jLm8gT2JqZWN0cy9vYm1hbGxvYy5jCit8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBPYmplY3RzL29ibWFsbG9jLm8gT2JqZWN0cy9vYm1hbGxvYy5jCit8IE9iamVjdHMvb2JtYWxsb2MubzogZmlsZSBub3QgcmVjb2duaXplZDogRmlsZSB0cnVuY2F0ZWQKK3wgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCit8IG1ha2VbMV06ICoqKiBbUGFyc2VyL3BnZW5dIEVycm9yIDEKKworVGhlIGVhc2llc3Qgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbGlzdCB0aGUgZGVwZW5kZW5jaWVzIGV4cGxpY3RseS4KKworUlAgMjgvMi8yMDE0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTMuMy4zL01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMy5vcmlnL01ha2VmaWxlLnByZS5pbgkyMDE0LTAyLTI3IDE0OjA0OjM4LjI2ODMzOTUzMyArMDAwMAorKysrIFB5dGhvbi0zLjMuMy9NYWtlZmlsZS5wcmUuaW4JMjAxNC0wMi0yOCAxMDo0MDo1OS4xNjYzNjExMjUgKzAwMDAKK0BAIC02NzYsNyArNjc2LDcgQEAKKyAKKyAkKElPX09CSlMpOiAkKElPX0gpCisgCistJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisrJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpICQoUEdFTikKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKyAJCSQoTUFLRSkgJChQR0VOKQorIAkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTk4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDMzOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2dldCB0aGUgc3lzLmxpYiBmcm9tIHB5dGhvbiBpdHNlbGYgYW5kIGRvIG5vdCB1c2UgaGFyZGNvZGVkIHZhbHVlIG9mICdsaWInCisKKzAyLzIwMTUgUmViYXNlZCBmb3IgMy40LjIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL0luY2x1ZGUvcHl0aG9ucnVuLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKysgUHl0aG9uLTMuNC4yL0luY2x1ZGUvcHl0aG9ucnVuLmgKK0BAIC0yMjAsNiArMjIwLDggQEAgaW50IF9QeV9DaGVja1B5dGhvbjMoKTsKKyAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0UGxhdGZvcm0odm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEFyY2godm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldExpYih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOworSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitAQCAtMTksNiArMTksOCBAQCBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCisgSEFTX1VTRVJfU0lURSA9IFRydWUKKyAKKytsaWJuYW1lID0gc3lzLmxpYgorKworIFdJTkRPV1NfU0NIRU1FID0geworICAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKK0BAIC0zMCw3ICszMiw3IEBAIFdJTkRPV1NfU0NIRU1FID0geworIElOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3VuaXhfcHJlZml4JzogeworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS8nK2xpYm5hbWUrJy9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdoZWFkZXJzJzogJyRiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQkYWJpZmxhZ3MvJGRpc3RfbmFtZScsCisgICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvcHlkb2MucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvcHlkb2MucHkKKysrKyBQeXRob24tMy40LjIvTGliL3B5ZG9jLnB5CitAQCAtMzk0LDcgKzM5NCw3IEBAIGNsYXNzIERvYzoKKyAKKyAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwgc2VsZi5QWVRIT05ET0NTKQorIAorLSAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJWQuJWQiICUgIHN5cy52ZXJzaW9uX2luZm9bOjJdKQorICAgICAgICAgaWYgKGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlKG9zKSkgYW5kCisgICAgICAgICAgICAgKG9iamVjdC5fX25hbWVfXyBpbiAoJ2Vycm5vJywgJ2V4Y2VwdGlvbnMnLCAnZ2MnLCAnaW1wJywKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3RyYWNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi90cmFjZS5weQorQEAgLTc1MSwxMCArNzUxLDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKKyAKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJHByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkZXhlY19wcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCisgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQorSW5kZXg6IFB5dGhvbi0zLjQuMi9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMy40LjIvTWFrZWZpbGUucHJlLmluCitAQCAtMTAxLDYgKzEwMSw4IEBAIFBZX0NPUkVfQ0ZMQUdTPQkkKFBZX0NGTEFHUykgJChQWV9DRkxBR1MKKyAKKyAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCisgTUFDSERFUD0JQE1BQ0hERVBACisrTElCPQkJQExJQkAKKytBUkNIPQkJQEFSQ0hACisgCisgIyBNdWx0aWFyY2ggZGlyZWN0b3J5IChtYXkgYmUgZW1wdHkpCisgTVVMVElBUkNIPQlATVVMVElBUkNIQAorQEAgLTEyMCw3ICsxMjIsNyBAQCBMSUJESVI9CQlAbGliZGlyQAorIE1BTkRJUj0JCUBtYW5kaXJACisgSU5DTFVERURJUj0JQGluY2x1ZGVkaXJACisgQ09ORklOQ0xVREVESVI9CSQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKy1TQ1JJUFRESVI9CSQocHJlZml4KS9saWIKKytTQ1JJUFRESVI9CUBsaWJkaXJACisgQUJJRkxBR1M9CUBBQklGTEFHU0AKKyAKKyAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCitAQCAtNzEyLDYgKzcxNCw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKKyAJCS1ERVhFQ19QUkVGSVg9JyIkKGV4ZWNfcHJlZml4KSInIFwKKyAJCS1EVkVSU0lPTj0nIiQoVkVSU0lPTikiJyBcCisgCQktRFZQQVRIPSciJChWUEFUSCkiJyBcCisrCQktREFSQ0g9JyIkKEFSQ0gpIicgLURMSUI9JyIkKExJQikiJyBcCisgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKKyAKKyBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworQEAgLTc4MCw3ICs3ODMsNyBAQCAkKEFTVF9DKTogJChBU1RfSCkgJChBU1RfQVNETCkgJChBU0RMR0VOCisgUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQorIAorIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKy0JCSQoQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1EQVJDSD0nIiQoQVJDSCkiJyAtRExJQj0nIiQoTElCKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworIAorIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKKyAJCSQoQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1JJChETElOQ0xESVIpIC1vICRAICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworSW5kZXg6IFB5dGhvbi0zLjQuMi9Nb2R1bGVzL2dldHBhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTMuNC4yL01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTE3LDkgKzExNywxMSBAQAorICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCisgI2VuZGlmCisgCisrI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgorKworICNpZm5kZWYgUFlUSE9OUEFUSAorLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCistICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCisrICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorICNlbmRpZgorIAorICNpZm5kZWYgTEFORE1BUksKK0BAIC0xMzAsNiArMTMyLDcgQEAgc3RhdGljIHdjaGFyX3QgcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIHdjaGFyX3QgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgd2NoYXJfdCBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyB3Y2hhcl90ICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworK3N0YXRpYyB3Y2hhcl90ICpsaWJfcHl0aG9uID0gTCIiIExJQl9QWVRIT047CisgCisgc3RhdGljIHZvaWQKKyByZWR1Y2Uod2NoYXJfdCAqZGlyKQorSW5kZXg6IFB5dGhvbi0zLjQuMi9QeXRob24vZ2V0cGxhdGZvcm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTMuNC4yL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitAQCAtMTAsMyArMTAsMjMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKKyB7CisgCXJldHVybiBQTEFURk9STTsKKyB9CisrCisrI2lmbmRlZiBBUkNICisrI2RlZmluZSBBUkNIICJ1bmtub3duIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldEFyY2godm9pZCkKKyt7CisrCXJldHVybiBBUkNIOworK30KKysKKysjaWZuZGVmIExJQgorKyNkZWZpbmUgTElCICJsaWIiCisrI2VuZGlmCisrCisrY29uc3QgY2hhciAqCisrUHlfR2V0TGliKHZvaWQpCisreworKwlyZXR1cm4gTElCOworK30KK0luZGV4OiBQeXRob24tMy40LjIvUHl0aG9uL3N5c21vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTMuNC4yL1B5dGhvbi9zeXNtb2R1bGUuYworQEAgLTE2OTcsNiArMTY5NywxMCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRQbGF0Zm9ybSgpKSk7CisrICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImFyY2giLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldEFyY2goKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldExpYigpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1GdWxsUGF0aCgpLCAtMSkpOworSW5kZXg6IFB5dGhvbi0zLjQuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTMuNC4yL3NldHVwLnB5CitAQCAtNDU0LDcgKzQ1NCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgZGlyZWN0b3JpZXMgKGkuZS4gJy4nIGFuZCAnSW5jbHVkZScpIG11c3QgYmUgZmlyc3QuICBTZWUgaXNzdWUKKyAgICAgICAgICMgMTA1MjAuCisgICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgJy91c3IvbG9jYWwvbGliJykKKysgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsIG9zLnBhdGguam9pbignL3Vzci9sb2NhbCcsIHN5cy5saWIpKQorICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCisgICAgICAgICAjIG9ubHkgY2hhbmdlIHRoaXMgZm9yIGNyb3NzIGJ1aWxkcyBmb3IgMy4zLCBpc3N1ZXMgb24gTWFnZWlhCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CitAQCAtNTEyLDggKzUxMiw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgYmUgYXNzdW1lZCB0aGF0IG5vIGFkZGl0aW9uYWwgLUksLUwgZGlyZWN0aXZlcyBhcmUgbmVlZGVkLgorICAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBsaWJfZGlycyA9IHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzICsgWworLSAgICAgICAgICAgICAgICAnL2xpYjY0JywgJy91c3IvbGliNjQnLAorLSAgICAgICAgICAgICAgICAnL2xpYicsICcvdXNyL2xpYicsCisrICAgICAgICAgICAgICAgICcvJyArIHN5cy5saWIsICcvdXNyLycgKyBzeXMubGliLAorICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgaW5jX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycyArIFsnL3Vzci9pbmNsdWRlJ10KKyAgICAgICAgIGVsc2U6CitAQCAtNjk2LDExICs2OTUsMTEgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKGN1cnNlc19saWJyYXJ5KQorICAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliL3Rlcm1jYXAnXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci8nK3N5cy5saWIrJy90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVybWNhcCcpOgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZCgndGVybWNhcCcpCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncmVhZGxpbmUnLCBbJ3JlYWRsaW5lLmMnXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvbGliL3Rlcm1jYXAnXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvJytzeXMubGliKycvdGVybWNhcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPXJlYWRsaW5lX2V4dHJhX2xpbmtfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1yZWFkbGluZV9saWJzKSApCisgICAgICAgICBlbHNlOgorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvc3lzY29uZmlnLnB5CitAQCAtMjAsMTAgKzIwLDEwIEBAIF9fYWxsX18gPSBbCisgCisgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6CisgICAgICAgICAgICAgJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH17YWJpZmxhZ3N9JywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6CitAQCAtMzIsMTAgKzMyLDEwIEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICAgICAnZGF0YSc6ICd7YmFzZX0nLAorICAgICAgICAgfSwKKyAgICAgJ3Bvc2l4X2hvbWUnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vbGliL3B5dGhvbicsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisrICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vJytzeXMubGliKycvcHl0aG9uJywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob24nLAorICAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorLSAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorKyAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbicsCisgICAgICAgICAnaW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9uJywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9uJywKKyAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9iaW4nLAorQEAgLTYxLDEwICs2MSwxMCBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCisgICAgICAgICB9LAorICAgICAncG9zaXhfdXNlcic6IHsKKy0gICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCisgICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKK0luZGV4OiBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworQEAgLTc5MSw2ICs3OTEsNDEgQEAgZXNhYworIE1VTFRJQVJDSD0kKCRDQyAtLXByaW50LW11bHRpYXJjaCAyPi9kZXYvbnVsbCkKKyBBQ19TVUJTVChNVUxUSUFSQ0gpCisgCisrQUNfU1VCU1QoQVJDSCkKKytBQ19NU0dfQ0hFQ0tJTkcoQVJDSCkKKytBUkNIPWB1bmFtZSAtbWAKKytjYXNlICRBUkNIIGluCisraT84NikgQVJDSD1pMzg2OzsKKytlc2FjCisrQUNfTVNHX1JFU1VMVCgkQVJDSCkKKysKKytBQ19TVUJTVChMSUIpCisrQUNfTVNHX0NIRUNLSU5HKExJQikKKytjYXNlICRhY19zeXNfc3lzdGVtIGluCisrTGludXgqKQorKyAgIyBUZXN0IGlmIHRoZSBjb21waWxlciBpcyA2NGJpdAorKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKysgIHB5dGhvbl9jdl9jY182NGJpdF9vdXRwdXQ9bm8KKysgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisrICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKysgICAgKiJFTEYgNjQiKikKKysgICAgICBweXRob25fY3ZfY2NfNjRiaXRfb3V0cHV0PXllcworKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGZpCisrICBybSAtcmYgY29uZnRlc3QqCisrICA7OworK2VzYWMKKysKKytjYXNlICRBUkNIOiRweXRob25fY3ZfY2NfNjRiaXRfb3V0cHV0IGluCisrcHBjNjQ6eWVzIHwgcG93ZXJwYzY0OnllcyB8IHMzOTB4OnllcyB8IHNwYXJjNjQ6eWVzIHwgeDg2XzY0OnllcykKKysgIExJQj0ibGliNjQiCisrICA7OworKyo6KikKKysgIExJQj0ibGliIgorKyAgOzsKKytlc2FjCisrQUNfTVNHX1JFU1VMVCgkTElCKQorIAorIEFDX1NVQlNUKExJQlJBUlkpCisgQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMy40LjIvTGliL3NpdGUucHkKK0BAIC0zMDQsMTMgKzMwNCwxOSBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKHByZWZpeGVzPU5vbmUpOgorICAgICAgICAgc2Vlbi5hZGQocHJlZml4KQorIAorICAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXB5dGhvbiIpKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKHByZWZpeCkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIGZvciBmcmFtZXdvcmsgYnVpbGRzICpvbmx5KiB3ZSBhZGQgdGhlIHN0YW5kYXJkIEFwcGxlCisgICAgICAgICAgICAgIyBsb2NhdGlvbnMuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyM2I4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitweXRob24tY29uZmlnOiBSZXZlcnQgdG8gdXNpbmcgZGlzdHV0aWxzLnN5c2NvbmZpZworCitUaGUgbmV3ZXIgc3lzY29uZmlnIG1vZHVsZSBzaGFyZXMgc29tZSBjb2RlIHdpdGggZGlzdHV0aWxzLnN5c2NvbmZpZywgYnV0IHRoZSBzYW1lIG1vZGlmaWNhdGlvbnMgYXMgaW4KKworMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIG1ha2VzIGRpc3R1dGlscy5zeXNjb25maWcKKworYWZmZWN0IHRoZSBuYXRpdmUgcnVudGltZSBhcyB3ZWxsIGFzIGNyb3NzIGJ1aWxkaW5nLiBVc2UgdGhlIG9sZCwgcGF0Y2hlZAoraW1wbGVtZW50YXRpb24gd2hpY2ggcmV0dXJucyBwYXRocyBpbiB0aGUgc3RhZ2luZyBkaXJlY3RvcnkgYW5kIGZvciB0aGUgdGFyZ2V0LAorYXMgYXBwcm9wcmlhdGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFR5bGVyIEhhbGwgPHR5bGVyd2hhbGxAZ21haWwuY29tPgorOgorSW5kZXg6IFB5dGhvbi0zLjMuMy9NaXNjL3B5dGhvbi1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjMub3JpZy9NaXNjL3B5dGhvbi1jb25maWcuaW4KKysrKyBQeXRob24tMy4zLjMvTWlzYy9weXRob24tY29uZmlnLmluCitAQCAtNCw3ICs0LDcgQEAKKyBpbXBvcnQgZ2V0b3B0CisgaW1wb3J0IG9zCisgaW1wb3J0IHN5cworLWltcG9ydCBzeXNjb25maWcKKytmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisgCisgdmFsaWRfb3B0cyA9IFsncHJlZml4JywgJ2V4ZWMtcHJlZml4JywgJ2luY2x1ZGVzJywgJ2xpYnMnLCAnY2ZsYWdzJywKKyAgICAgICAgICAgICAgICdsZGZsYWdzJywgJ2V4dGVuc2lvbi1zdWZmaXgnLCAnaGVscCcsICdhYmlmbGFncycsICdjb25maWdkaXInXQorQEAgLTMyLDE0ICszMiwxNCBAQCBpZiAnLS1oZWxwJyBpbiBvcHRfZmxhZ3M6CisgCisgZm9yIG9wdCBpbiBvcHRfZmxhZ3M6CisgICAgIGlmIG9wdCA9PSAnLS1wcmVmaXgnOgorLSAgICAgICAgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdwcmVmaXgnKSkKKysgICAgICAgIHByaW50KHN5c2NvbmZpZy5QUkVGSVgpCisgCisgICAgIGVsaWYgb3B0ID09ICctLWV4ZWMtcHJlZml4JzoKKy0gICAgICAgIHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignZXhlY19wcmVmaXgnKSkKKysgICAgICAgIHByaW50KHN5c2NvbmZpZy5FWEVDX1BSRUZJWCkKKyAKKyAgICAgZWxpZiBvcHQgaW4gKCctLWluY2x1ZGVzJywgJy0tY2ZsYWdzJyk6CistICAgICAgICBmbGFncyA9IFsnLUknICsgc3lzY29uZmlnLmdldF9wYXRoKCdpbmNsdWRlJyksCistICAgICAgICAgICAgICAgICAnLUknICsgc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0aW5jbHVkZScpXQorKyAgICAgICAgZmxhZ3MgPSBbJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYygpLAorKyAgICAgICAgICAgICAgICAgJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPVRydWUpXQorICAgICAgICAgaWYgb3B0ID09ICctLWNmbGFncyc6CisgICAgICAgICAgICAgZmxhZ3MuZXh0ZW5kKGdldHZhcignQ0ZMQUdTJykuc3BsaXQoKSkKKyAgICAgICAgIHByaW50KCcgJy5qb2luKGZsYWdzKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjOGI4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNDMyMzhlMWFjMTNlMzI5ODRkMDE1YzkyYTU4NDFmM2RlMWZlMWQxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE4IE5vdiAyMDE0IDAwOjA3OjA3IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNldHVwLnB5OiBubyBob3N0IGhlYWRlcnMgbGlicworCitXaGVuIHdlIGFyZSBjcm9zcy1jb21waWxpbmcsIHNldHVwLnB5IHNob3VsZCBuZXZlciBsb29rIGluIC91c3IKK29yIC91c3IvbG9jYWwgdG8gZmluZCBoZWFkZXJzIG9yIGxpYnJhcmllcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDcm9zcyBjb21waWxlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc2V0dXAucHkgfCAzIC0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggZjAyMGIyOC4uZTgzMzljZCAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTQ0NCwxMCArNDQ0LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsIG9zLnBhdGguam9pbignL3Vzci9sb2NhbCcsIHN5cy5saWIpKQorICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCistICAgICAgICAjIG9ubHkgY2hhbmdlIHRoaXMgZm9yIGNyb3NzIGJ1aWxkcyBmb3IgMy4zLCBpc3N1ZXMgb24gTWFnZWlhCistICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgc2VsZi5hZGRfZ2NjX3BhdGhzKCkKKy0gICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKKyAKKyAgICAgICAgICMgQWRkIHBhdGhzIHNwZWNpZmllZCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIExERkxBR1MgYW5kCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDkwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNTNlZDIxNmQ3YmY3MGRkMmE5MjU0MzJiNjgwNWE3MDFlNWZjM2UwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDA2OjQ0OjQ3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHB5dGhvbjMgdXNlIENST1NTUFlUSE9OUEFUSCBmb3IgUFlUSE9OX0ZPUl9CVUlMRAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0Nyb3NzIGNvbXBpbGUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDk4OWJhZjkuLjI4OTBjOTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY3LDcgKzY3LDcgQEAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAJICAgIEFDX01TR19FUlJPUihbcHl0aG9uJFBBQ0tBR0VfVkVSU0lPTiBpbnRlcnByZXRlciBub3QgZm91bmRdKQorIAlmaQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaW50ZXJwKQorLQlQWVRIT05fRk9SX0JVSUxEPSdfUFlUSE9OX1BST0pFQ1RfQkFTRT0kKGFic19idWlsZGRpcikgX1BZVEhPTl9IT1NUX1BMQVRGT1JNPSQoX1BZVEhPTl9IT1NUX1BMQVRGT1JNKSBQWVRIT05QQVRIPSQoc2hlbGwgdGVzdCAtZiBweWJ1aWxkZGlyLnR4dCAmJiBlY2hvICQoYWJzX2J1aWxkZGlyKS9gY2F0IHB5YnVpbGRkaXIudHh0YDopJChzcmNkaXIpL0xpYjokKHNyY2RpcikvTGliLyQoUExBVERJUikgJyRpbnRlcnAKKysJUFlUSE9OX0ZPUl9CVUlMRD0nX1BZVEhPTl9QUk9KRUNUX0JBU0U9JChhYnNfYnVpbGRkaXIpIF9QWVRIT05fSE9TVF9QTEFURk9STT0kKF9QWVRIT05fSE9TVF9QTEFURk9STSkgUFlUSE9OUEFUSD0kKENST1NTUFlUSE9OUEFUSCkgJyRpbnRlcnAKKyAgICAgZmkKKyBlbGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKyAgICAgQUNfTVNHX0VSUk9SKFtDcm9zcyBjb21waWxpbmcgcmVxdWlyZWQgLS1ob3N0PUhPU1QtVFVQTEUgYW5kIC0tYnVpbGQ9QVJDSF0pCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmUxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gOGRhZDgxMGYzYTNkMDczZjA5YWQ3MmUxYTNlZTBhODk1ZWFiMmNhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCAxOCBKYW4gMjAxNSAxOTowNTozNiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBzZXR1cC5weTpjaGVjayBjcm9zc19jb21waWxpbmcgd2hlbiBnZXQgRkxBR1MKKworRml4ZWQgd2hlbiBjb21waWxlIHRhcmdldCBweXRobm9uMzoKK2djYyAtaXN5c3RlbS9wYXRoL3RvL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSBcCisgICAgLUw9L3BhdGgvdG8vc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWIKKworVGhpcyBpcyBpbmNvcnJlY3QsIHRoZSBuYXRpdmUgc3lzcm9vdCBzaG91bGQgbm90IGJlIHVzZWQgYnkgdGFyZ2V0CitweXRob24zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzZXR1cC5weSB8ICAgMTAgKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBlODMzOWNkLi44M2ZkMzFmIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMjM4LDcgKzIzOCwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIGRpc3R1dGlscyBkb2Vzbid0IGxldCB1cyBwcm92aWRlIHNlcGFyYXRlIEMgYW5kIEMrKworICAgICAgICAgIyBjb21waWxlcnMKKyAgICAgICAgIGlmIGNvbXBpbGVyIGlzIG5vdCBOb25lOgorLSAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorKyAgICAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSAob3MuZW52aXJvbi5nZXQoJ0NDU0hBUkVEJykgb3IgJycsIG9zLmVudmlyb24uZ2V0KCdDRkxBR1MnKSBvciAnJykKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKyAgICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArIGNmbGFncworICAgICAgICAgc2VsZi5jb21waWxlci5zZXRfZXhlY3V0YWJsZXMoKiphcmdzKQorIAorQEAgLTQ1Nyw3ICs0NjAsMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLVInLCBzZWxmLmNvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1MJywgc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0NQUEZMQUdTJywgJy1JJywgc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMpKToKKy0gICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisrICAgICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgICAgICBlbnZfdmFsID0gb3MuZW52aXJvbi5nZXQoZW52X3ZhcikKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisgICAgICAgICAgICAgaWYgZW52X3ZhbDoKKyAgICAgICAgICAgICAgICAgIyBUbyBwcmV2ZW50IG9wdHBhcnNlIGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gYWJvdXQgYW55CisgICAgICAgICAgICAgICAgICMgb3B0aW9ucyBpbiBlbnZfdmFsIHRoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0IHdlIHN0cmlwIG91dAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmJkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1BhdGNoIHNldHVwLnB5IHNvIHRoYXQgdGhlIGRldGVjdF9tb2R1bGVzKCkgZnVuY3Rpb24gbG9va3MgZm9yIHJlcXVpcmVkCitsaWJyYXJpZXMgYW5kIGhlYWRlcnMgaW4gU1RBR0lOR19MSUJESVIgLyBTVEFHSU5HX0lOQ0RJUi4KKworV2l0aG91dCB0aGlzIHBhdGNoLCBzZXZlcmFsIGV4dGVuc2lvbiBtb2R1bGVzIGFyZSBub3QgYnVpbHQsIGV2ZW4gdGhvdWdoCit0aGVpciBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQgaW4gdGhlIGNvbXBpbGVyJ3Mgc2VhcmNoIHBhdGhzLgorVGhlIHJlc3VsdCBpcyB0aGUgZm9sbG93aW5nIHdhcm5pbmcsIGFuZCB1bHRpbWF0ZWx5IGluY29tcGxldGUgcGFja2FnZXM6CisKK3wgVGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkIHRoZXNlIG9wdGlvbmFsIG1vZHVsZXMgd2VyZSBub3QgZm91bmQ6Cit8IF9iejIgICAgICAgICAgICAgICAgICBfY3Vyc2VzX3BhbmVsICAgICAgICAgX2RibQorfCBfZ2RibSAgICAgICAgICAgICAgICAgX2x6bWEgICAgICAgICAgICAgICAgIF9zcWxpdGUzCit8IG5pcyAgICAgICAgICAgICAgICAgICByZWFkbGluZSAgICAgICAgICAgICAgemxpYgorfCBUbyBmaW5kIHRoZSBuZWNlc3NhcnkgYml0cywgbG9vayBpbiBzZXR1cC5weSBpbiBkZXRlY3RfbW9kdWxlcygpIGZvciB0aGUgbW9kdWxlJ3MgbmFtZS4KKworVXBzdHJlYW0tU3RhdHVzOiAgSW5hcHByb3ByaWF0ZSBbQ3Jvc3MgY29tcGlsZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogRG9taW5pYyBTYWNyw6kgPGRvbWluaWMuc2FjcmVAZ214LmRlPgorCitJbmRleDogUHl0aG9uLTMuNC4zL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4zLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMy40LjMvc2V0dXAucHkKK0BAIC01MjEsNiArNTIxLDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBsaWJfZGlycyA9IHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzWzpdCisgICAgICAgICAgICAgaW5jX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlyc1s6XQorKyAgICAgICAgICAgIGxpYl9kaXJzLmFwcGVuZChvcy5lbnZpcm9uLmdldCgnU1RBR0lOR19MSUJESVInKSkKKysgICAgICAgICAgICBpbmNfZGlycy5hcHBlbmQob3MuZW52aXJvbi5nZXQoJ1NUQUdJTkdfSU5DRElSJykpCisgICAgICAgICBleHRzID0gW10KKyAgICAgICAgIG1pc3NpbmcgPSBbXQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXB0d2Vha3MucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorVGhpcyBwYXRjaCByZW1vdmVzIHZhcmlvdXMgd2F5cyBuYXRpdmUgc3lzdGVtIG9wdGlvbnMgY2FuIHBhc3MgaW50byB0aGUgcHl0aG9uIAorY29tcGlsYXRpb24gYW5kIHNvbWVob3cgYnJlYWsgQyBtb2R1bGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDEyLzA0LzIzCisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjQ3LjI5NTU4MjU1MyArMDAwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjE1LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzMSw3ICsyMzEsMTMgQEAKKyAgICAgICAgICMgY29tcGlsZXJzCisgICAgICAgICBpZiBjb21waWxlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKy0gICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArIGNmbGFncworKyAgICAgICAgICAgICMgTmVlZCB0byBmaWx0ZXIgb3V0IC1pc3lzcm9vdCBmcm9tIHRoZSBmbGFncy4gSWRlYWxseSBzaG91bGQgCisrICAgICAgICAgICAgIyBmaWd1cmUgb3V0IHRhcmdldCBmbGFncyBoZXJlLgorKyAgICAgICAgICAgIGZsYWdzID0gW10KKysgICAgICAgICAgICBmb3IgZiBpbiBjZmxhZ3Muc3BsaXQoKToKKysgICAgICAgICAgICAgICAgaWYgbm90IGYuc3RhcnRzd2l0aCgiLWlzeXN0ZW0iKToKKysgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZChmKQorKyAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgJyAnLmpvaW4oZmxhZ3MpCisgICAgICAgICBzZWxmLmNvbXBpbGVyLnNldF9leGVjdXRhYmxlcygqKmFyZ3MpCisgCisgICAgICAgICBidWlsZF9leHQuYnVpbGRfZXh0ZW5zaW9ucyhzZWxmKQorQEAgLTM5Myw3ICszOTksNiBAQAorICAgICAgICAgIyBpbnRvIGNvbmZpZ3VyZSBhbmQgc3RvcmVkIGluIHRoZSBNYWtlZmlsZSAoaXNzdWUgZm91bmQgb24gT1MgWCAxMC4zKS4KKyAgICAgICAgIGZvciBlbnZfdmFyLCBhcmdfbmFtZSwgZGlyX2xpc3QgaW4gKAorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLVInLCBzZWxmLmNvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJzKSwKKy0gICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1MJywgc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0NQUEZMQUdTJywgJy1JJywgc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMpKToKKyAgICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisgICAgICAgICAgICAgaWYgZW52X3ZhbDoKK0BAIC00MTksMTYgKzQyNCwxNiBAQAorICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChkaXJfbGlzdCwgZGlyZWN0b3J5KQorIAorLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorLSAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisrIyAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorKyMgICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorICAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgorICAgICAgICAgICAgICMgYnVpbGRpbmcgYSBmcmFtZXdvcmsgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB0aGFuCisgICAgICAgICAgICAgIyB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZCAoaXNzdWUgIzc0NzMpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorIAorICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGhhdmVfdW5pY29kZSA9IHVuaWNvZGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYjFjNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK3NodXRpbHMgc2hvdWxkIGNvbnNpZGVyIHN5bWxpbmtzCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9MaWIvc2h1dGlsLnB5CTIwMTMtMDEtMjkgMTI6MzE6MDYuOTI2NTU1Nzc5IC0wODAwCisrKysgYi9MaWIvc2h1dGlsLnB5CTIwMTMtMDEtMjkgMTY6MzE6MzkuMDk3NTU0MTgyIC0wODAwCitAQCAtMTMyLDcgKzEzMiw3IEBAIGRlZiBjb3B5bW9kZShzcmMsIGRzdCwgKiwgZm9sbG93X3N5bWxpbmsKKyAgICAgc3QgPSBzdGF0X2Z1bmMoc3JjKQorICAgICBjaG1vZF9mdW5jKGRzdCwgc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpKQorIAorLWlmIGhhc2F0dHIob3MsICdsaXN0eGF0dHInKToKKytpZiBoYXNhdHRyKG9zLCAnbGlzdHhhdHRyJykgYW5kIG9zLmxpc3R4YXR0ciBpbiBvcy5zdXBwb3J0c19mb2xsb3dfc3ltbGlua3M6CisgICAgIGRlZiBfY29weXhhdHRyKHNyYywgZHN0LCAqLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSk6CisgICAgICAgICAiIiJDb3B5IGV4dGVuZGVkIGZpbGVzeXN0ZW0gYXR0cmlidXRlcyBmcm9tIGBzcmNgIHRvIGBkc3RgLgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NpdGVjdXN0b21pemUucHkgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2l0ZWN1c3RvbWl6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhiNWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NpdGVjdXN0b21pemUucHkKQEAgLTAsMCArMSwzNyBAQAorIyBPcGVuRW1iZWRkZWQgc2l0ZWN1c3RvbWl6ZS5weSAoQykgMjAwMi0yMDA4IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBHUEx2MiBvciBsYXRlcgorIyBWZXJzaW9uOiAyMDA4MTEyMworIyBGZWF0dXJlczoKKyMgKiBzZXQgcHJvcGVyIGRlZmF1bHQgZW5jb2RpbmcKKyMgKiBlbmFibGUgcmVhZGxpbmUgY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKKyMgKiBsb2FkIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIHN0YXJ0dXAKKyMgKiBzYXZlIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIGV4aXQgCisKK2ltcG9ydCBvcworCitkZWYgX19leGl0aGFuZGxlcigpOgorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworZGVmIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpOgorICAgIGltcG9ydCBhdGV4aXQKKyAgICBhdGV4aXQucmVnaXN0ZXIoIF9fZXhpdGhhbmRsZXIgKQorCitkZWYgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKToKKyAgICByZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGgoIDEwMDAgKQorICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCAidGFiOiBjb21wbGV0ZSIgKQorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgX19yZWdpc3RlckV4aXRIYW5kbGVyKCkKKyAgICBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA3NjQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGZjOTNiM2NjMjNiNGY5Njk4YWU5MmE0Mjk4NmRiYjAyYjZmMTk1ODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgMTggSmFuIDIwMTUgMDY6Mjk6NTAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3lzY29uZmlnLnB5OiBhZGQgX1BZVEhPTl9QUk9KRUNUX1NSQworCitweXRob24zIGhhcyBpbnRyb2R1Y2VkIF9QWVRIT05fUFJPSkVDVF9CQVNFIHdoaWNoIGlzIHVzZWQgZm9yIHNlcGFyYXRlIEIKK2FuZCBTLCBidXQgaXQgZG9lc24ndCB3b3JrIHdoZW4gY29tcGlsZSBNb2R1bGVzLCB0aGUgdGFyZ2V0IHB5dGhvbjMgcnVucworcHl0aG9uMy1uYXRpdmUncyBzeXNjb25maWcgdG8gZ2V0IHNyY2RpciB3aGljaCBpcyB0aGUgbmF0aXZlJ3MsIHRoZXJlCit3b3VsZCBiZSBlcnJvcnMgd2hlbiBuYXRpdmUncyBzcmNkaXIgaGFzIGJlZW4gcmVtb3ZlZCwgYWRkCitfUFlUSE9OX1BST0pFQ1RfU1JDIHRvIGZpeCB0aGUgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgfCAgICA1ICsrKystCisgTGliL3N5c2NvbmZpZy5weSAgICAgICAgICAgfCAgICA1ICsrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitpbmRleCBhNTQ1YWI5Li43NDMxN2QxIDEwMDY0NAorLS0tIGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtNTU0LDcgKzU1NCwxMCBAQCBkZWYgZ2V0X2NvbmZpZ192YXJzKCphcmdzKToKKyAgICAgICAgIF9jb25maWdfdmFyc1snZXhlY19wcmVmaXgnXSA9IEVYRUNfUFJFRklYCisgCisgICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCistICAgICAgICBzcmNkaXIgPSBfY29uZmlnX3ZhcnMuZ2V0KCdzcmNkaXInLCBwcm9qZWN0X2Jhc2UpCisrICAgICAgICBpZiAiX1BZVEhPTl9QUk9KRUNUX1NSQyIgaW4gb3MuZW52aXJvbjoKKysgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuZW52aXJvblsiX1BZVEhPTl9QUk9KRUNUX1NSQyJdKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBzcmNkaXIgPSBfY29uZmlnX3ZhcnMuZ2V0KCdzcmNkaXInLCBwcm9qZWN0X2Jhc2UpCisgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgorICAgICAgICAgICAgICAgICAjIElmIHNyY2RpciBpcyBhIHJlbGF0aXZlIHBhdGggKHR5cGljYWxseSAnLicgb3IgJy4uJykKK2RpZmYgLS1naXQgYS9MaWIvc3lzY29uZmlnLnB5IGIvTGliL3N5c2NvbmZpZy5weQoraW5kZXggNzI4N2YxMS4uY2M5Mjk5OCAxMDA2NDQKKy0tLSBhL0xpYi9zeXNjb25maWcucHkKKysrKyBiL0xpYi9zeXNjb25maWcucHkKK0BAIC01NjIsNyArNTYyLDEwIEBAIGRlZiBnZXRfY29uZmlnX3ZhcnMoKmFyZ3MpOgorICAgICAgICAgX0NPTkZJR19WQVJTWyd1c2VyYmFzZSddID0gX2dldHVzZXJiYXNlKCkKKyAKKyAgICAgICAgICMgQWx3YXlzIGNvbnZlcnQgc3JjZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKKy0gICAgICAgIHNyY2RpciA9IF9DT05GSUdfVkFSUy5nZXQoJ3NyY2RpcicsIF9QUk9KRUNUX0JBU0UpCisrICAgICAgICBpZiAiX1BZVEhPTl9QUk9KRUNUX1NSQyIgaW4gb3MuZW52aXJvbjoKKysgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuZW52aXJvblsiX1BZVEhPTl9QUk9KRUNUX1NSQyJdKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBzcmNkaXIgPSBfQ09ORklHX1ZBUlMuZ2V0KCdzcmNkaXInLCBfUFJPSkVDVF9CQVNFKQorICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgIGlmIF9QWVRIT05fQlVJTEQ6CisgICAgICAgICAgICAgICAgICMgSWYgc3JjZGlyIGlzIGEgcmVsYXRpdmUgcGF0aCAodHlwaWNhbGx5ICcuJyBvciAnLi4nKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODViNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0RvbnQgc2VhcmNoIGhhcmRjb2RlZCBwYXRocywgd2UgbWlnaHQgYmUgZG9pbmcgYSBjcm9zcy1idWlsZAorVXNlICc9JyBpbi1mcm9udCB0byBsZXQgY29tcGlsZXIgYXBwZW5kIHN5c3Jvb3QsIGlmIGl0IGNhbgorCitTaG91bGQgZml4IHRoaW5ncyBsaWtlCisKK2NvbmZpZ3VyZTo2OTcyOiBhcm0tYW5nc3Ryb20tbGludXgtZ251ZWFiaS1nY2MgIC1tYXJjaD1hcm12Ny1hIC1tdGh1bWItaW50ZXJ3b3JrIC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9bmVvbiAtbXR1bmU9Y29ydGV4LWE4IC1ETkRFQlVHIC1mbm8taW5saW5lIC1EX19TT0ZURlBfXyAtLXN5c3Jvb3Q9L2J1aWxkL3YyMDEzLjA2L2J1aWxkL3RtcC1hbmdzdHJvbV92MjAxM18wNi1lZ2xpYmMvc3lzcm9vdHMvYmVhZ2xlYm9uZSAtYyAtTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyBjb25mdGVzdC5jID4mNQorY2MxOiB3YXJuaW5nOiBpbmNsdWRlIGxvY2F0aW9uICIvdXNyL2luY2x1ZGUvbmN1cnNlc3ciIGlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24gWy1XcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10KKworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhagorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworSW5kZXg6IFB5dGhvbi0zLjMuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMi5vcmlnL3NldHVwLnB5CTIwMTMtMDctMzAgMDE6MzA6NDguMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4yL3NldHVwLnB5CTIwMTMtMDctMzAgMDE6NDE6MTEuNjk3ODYyNzIzIC0wNzAwCitAQCAtMTIxMCw3ICsxMjEwLDcgQEAKKyAgICAgICAgIHBhbmVsX2xpYnJhcnkgPSAncGFuZWwnCisgICAgICAgICBpZiBjdXJzZXNfbGlicmFyeSA9PSAnbmN1cnNlc3cnOgorICAgICAgICAgICAgIGN1cnNlc19kZWZpbmVzLmFwcGVuZCgoJ0hBVkVfTkNVUlNFU1cnLCAnMScpKQorLSAgICAgICAgICAgIGN1cnNlc19pbmNsdWRlcy5hcHBlbmQoJy91c3IvaW5jbHVkZS9uY3Vyc2VzdycpCisrICAgICAgICAgICAgY3Vyc2VzX2luY2x1ZGVzLmFwcGVuZCgnPS91c3IvaW5jbHVkZS9uY3Vyc2VzdycpCisgICAgICAgICAgICAgIyBCdWcgMTQ2NDA1NjogSWYgX2N1cnNlcy5zbyBsaW5rcyB3aXRoIG5jdXJzZXN3LAorICAgICAgICAgICAgICMgX2N1cnNlc19wYW5lbC5zbyBtdXN0IGxpbmsgd2l0aCBwYW5lbHcuCisgICAgICAgICAgICAgcGFuZWxfbGlicmFyeSA9ICdwYW5lbHcnCitAQCAtMTgxOSw3ICsxODE5LDcgQEAKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgIyBPUyBYIDEwLjUgY29tZXMgd2l0aCBsaWJmZmkuZHlsaWI7IHRoZSBpbmNsdWRlIGZpbGVzIGFyZQorICAgICAgICAgICAgICMgaW4gL3Vzci9pbmNsdWRlL2ZmaQorLSAgICAgICAgICAgIGluY19kaXJzLmFwcGVuZCgnL3Vzci9pbmNsdWRlL2ZmaScpCisrICAgICAgICAgICAgaW5jX2RpcnMuYXBwZW5kKCc9L3Vzci9pbmNsdWRlL2ZmaScpCisgCisgICAgICAgICBmZmlfaW5jID0gW3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRkZJX0lOQ0xVREVESVIiKV0KKyAgICAgICAgIGlmIG5vdCBmZmlfaW5jIG9yIGZmaV9pbmNbMF0gPT0gJyc6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTBmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIENDIHZhcmlhYmxlLHNvbWV0aW1lcyBsaWtlOiJ4ODZfNjQtcG9reS1saW51eC1nY2MgICAtbTY0IC0tc3lzcm9vdD0vJHtUTVBESVJ9L3N5c3Jvb3RzL3FlbXV4ODYtNjQiLCBjb250YWlucyBvcHRpb24gaW5mb3JtYXRpb24uIAorVGhpcyB3aWxsIGxlYWQgdG8gd3JvbmcgY29tcGlsZXIgbmFtZSAicWVtdXg4Ni02NCIgcmF0aGVyIHRoYW4gIng4Nl82NC1wb2t5LWxpbnV4LWdjYyIgd2hlbiBweXRob24gZmluZGluZyB0aGUgY29tcGlsZXIgbmFtZS4KKworU2Vjb25kbHkgYWRkIC1MPTxwYXRoPiB0aGlzIHdheSBsaW5rZXIgd2lsbCBiZSBhYmxlIHRvIHJlc29sdmUgL3Vzci9saWIgdy5yLnQgc3lzcm9vdCBhbmQgbm90Cit1c2UgaGFyZGNvZGVkIC91c3IvbGliIHRvIGxvb2sgZm9yIGxpYnMgd2hpY2ggaXMgd3JvbmcgaW4gY3Jvc3MgY29tcGlsZSBlbnZpcm9ubWVudCBhbmQgdGhpcyB3aWxsIHdvcmsKK29rIG9uIG5hdGl2ZSBzeXN0ZW1zIHRvbyBzaW5jZSBzeXNyb290IGZvciBuYXRpdmUgY29tcGlsZXJzIGlzIC8KKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IFB5dGhvbi0zLjMuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjIub3JpZy9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMy0wNS0xNSAwOTozMjo1NC4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTMtMDgtMDEgMDA6NTg6MTguNjI5MDU2Mjg2IC0wNzAwCitAQCAtMjAyLDcgKzIwMiw5IEBACisgICAgICMgY2NvbXBpbGVyLnB5LgorIAorICAgICBkZWYgbGlicmFyeV9kaXJfb3B0aW9uKHNlbGYsIGRpcik6CistICAgICAgICByZXR1cm4gIi1MIiArIGRpcgorKyAgICAgICAgaWYgZGlyLnN0YXJ0c3dpdGgoIi4iKToKKysgICAgICAgICAgICByZXR1cm4gIi1MIiArIGRpcgorKyAgICAgICAgcmV0dXJuICItTD0iICsgZGlyCisgCisgICAgIGRlZiBfaXNfZ2NjKHNlbGYsIGNvbXBpbGVyX25hbWUpOgorICAgICAgICAgcmV0dXJuICJnY2MiIGluIGNvbXBpbGVyX25hbWUgb3IgImcrKyIgaW4gY29tcGlsZXJfbmFtZQorQEAgLTIyMSw3ICsyMjEsNyBAQAorICAgICAgICAgIyB0aGlzIHRpbWUsIHRoZXJlJ3Mgbm8gd2F5IHRvIGRldGVybWluZSB0aGlzIGluZm9ybWF0aW9uIGZyb20KKyAgICAgICAgICMgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZWQgaW4gdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24sIHNvCisgICAgICAgICAjIHdlIHVzZSB0aGlzIGhhY2suCistICAgICAgICBjb21waWxlciA9IG9zLnBhdGguYmFzZW5hbWUoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDQyIpKQorKyAgICAgICAgY29tcGlsZXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBNYWNPU1gncyBsaW5rZXIgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAtUiBmbGFnIGF0IGFsbAorICAgICAgICAgICAgIHJldHVybiAiLUwiICsgZGlyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZDI3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjQuMy5iYgpAQCAtMCwwICsxLDIyNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCisKK0RFUEVORFMgPSAicHl0aG9uMy1uYXRpdmUgbGliZmZpIGJ6aXAyIGRiIGdkYm0gb3BlbnNzbCByZWFkbGluZSBzcWxpdGUzIHpsaWIgdmlydHVhbC9saWJpbnRsIHh6IgorUFIgPSAiJHtJTkNfUFJ9LjAiCitQWVRIT05fTUFKTUlOID0gIjMuNCIKK1BZVEhPTl9CSU5BQkk9ICIke1BZVEhPTl9NQUpNSU59bSIKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHogXAorZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAorZmlsZTovLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoIFwKK2ZpbGU6Ly8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBcCitmaWxlOi8vMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBcCitmaWxlOi8vMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoIFwKK2ZpbGU6Ly8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggXAorZmlsZTovLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaCBcCitmaWxlOi8vMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggXAorZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCitmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAorJHtESVNUUk9fU1JDX1VSSX0gXAorIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wNC1kZWZhdWx0LWlzLW9wdGltaXplZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiN2QwOTJkMWJiYTZlMTdmMGQ5YmQyMWI0OWU0NDFkZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjViMzk2MzUzMzc2OGQ1ZmMzMjVhNGQ3YTZiZDZmNjY2NzI2MDAyZDY5NmYxZDM5OWVjMDZiMDQzZWE5OTZiOCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGQ5OGQwMWQ0NzFmYWM4ZDhkYmRkOTc1MjI5ZGJhMDMiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBweXRob24zbmF0aXZlIHBrZ2NvbmZpZworCitDT05GSUdVUkVPUFRTICs9ICIgLS13aXRoLXN5c3RlbS1mZmkgIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJhY19jdl9oYXZlX2NoZmxhZ3M9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD15ZXMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRteD15ZXMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8gXAorIgorIyBUaGUgMyBsaW5lcyBiZWxvdyBhcmUgY29waWVkIGZyb20gdGhlIGxpYmZmaSByZWNpcGUsIGN0eXBlcyBzaGlwcyBpdHMgb3duIGNvcHkgb2YgdGhlIGxpYmZmaSBzb3VyY2VzCisjU29tZWhvdyBnY2MgZG9lc24ndCBzZXQgX19TT0ZURlBfXyB3aGVuIHBhc3NpbmcgLW1mbG9hdGFiaT1zb2Z0cCA6KAorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY2ID0gIiAtRF9fU09GVEZQX18iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjdhID0gIiAtRF9fU09GVEZQX18iCitUQVJHRVRfQ0NfQVJDSCArPSAiLUROREVCVUcgLWZuby1pbmxpbmUiCitFWFRSQV9PRU1BS0UgKz0gIkNST1NTX0NPTVBJTEU9eWVzIgorRVhUUkFfT0VDT05GICs9ICJDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIC0td2l0aG91dC1lbnN1cmVwaXAiCisKK2V4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCitleHBvcnQgX1BZVEhPTl9QUk9KRUNUX0JBU0UgPSAiJHtCfSIKK2V4cG9ydCBfUFlUSE9OX1BST0pFQ1RfU1JDID0gIiR7U30iCitleHBvcnQgQ0NTSEFSRUQgPSAiLWZQSUMiCisKKyMgRml4IGN0eXBlcyBjcm9zcyBjb21waWxhdGlvbgorZXhwb3J0IENST1NTUFlUSE9OUEFUSCA9ICIke0J9L2J1aWxkL2xpYi5saW51eC0ke1RBUkdFVF9BUkNIfS0ke1BZVEhPTl9NQUpNSU59OiR7U30vTGliOiR7U30vTGliL3BsYXQtbGludXgiCisKKyMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKK1BZVEhPTkxTQk9QVFMgPSAiIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXJtIC1mICR7U30vTWFrZWZpbGUub3JpZworCWF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKKyAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eCoKKyAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisgICAgICAgICAgICAgICAgJHtTfS9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vZGxmY24uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXgvY2Ryb20uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbmV0aW5ldC9pbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9zeXMvdHlwZXMuaAorICAgICAgICBzZWQgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgLWkgKi5weQorICAgICAgICBjZCAtCisKKworCSMgcmVtb3ZlIGFueSBib2d1cyBMRF9MSUJSQVJZX1BBVEgKKwlzZWQgLWkgLWUgcyxSVU5TSEFSRUQ9LiosUlVOU0hBUkVEPSwgTWFrZWZpbGUKKworCWlmIFsgISAtZiBNYWtlZmlsZS5vcmlnIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLm9yaWcKKwlmaQorCXNlZCAtaSAtZSAncyxeQ09ORklHVVJFX0xERkxBR1M9LiosQ09ORklHVVJFX0xERkxBR1M9LUwuIC1MJHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxsaWJkaXI9JHtsaWJkaXJ9LGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSxsaWJleGVjZGlyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9LGcnIFwKKwkJLWUgJ3MsXkxJQkRJUj0uKixMSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0saW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5JTkNMVURFRElSPS4qLElOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeQ09ORklOQ0xVREVESVI9LiosQ09ORklOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQlNYWtlZmlsZQorCSMgc2F2ZSBjb3B5IG9mIGl0IG5vdywgYmVjYXVzZSBpZiB3ZSBkbyBpdCBpbiBkb19pbnN0YWxsIGFuZCAKKwkjIHRoZW4gY2FsbCBkb19pbnN0YWxsIHR3aWNlIHdlIGdldCBNYWtlZmlsZS5vcmlnID09IE1ha2VmaWxlLnN5c3Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUuc3lzcm9vdAorCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIgbGlicHl0aG9uMy5zbworCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIG1ha2UgaW5zdGFsbCBuZWVkcyB0aGUgb3JpZ2luYWwgTWFrZWZpbGUsIG9yIG90aGVyd2lzZSB0aGUgaW5jbHVlcyB3b3VsZAorCSMgZ28gdG8gJHtEfSR7U1RBR0lORy4uLn0vLi4uCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLm9yaWcgTWFrZWZpbGUKKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcKKworCSMgcmVydW4gdGhlIGJ1aWxkIG9uY2UgYWdhaW4gd2l0aCBvcmlnaW5hbCBtYWtlZmlsZSB0aGlzIHRpbWUKKwkjIHJ1biBpbnN0YWxsIGluIGEgc2VwYXJhdGUgc3RlcCB0byBhdm9pZCBjb21waWxlL2luc3RhbGwgcmFjZQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KKwkKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IGluc3RhbGwKKworCSMgYXZvaWQgY29uZmxpY3Qgd2l0aCAydG8zIGZyb20gUHl0aG9uIDIKKwlybSAtZiAke0R9LyR7YmluZGlyfS8ydG8zCisKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgorUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3B5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisJIyBSZW1vdmUgcmVmZXJlbmNlcyB0byBidWlsZG1hY2hpbmUgcGF0aHMgaW4gdGFyZ2V0IE1ha2VmaWxlIGFuZCBfc3lzY29uZmlnZGF0YQorCXNlZCAtaSAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAtZSBzOictLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZSBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKK30KKworcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKK1JQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdF9jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLW9wZW5zc2wiCisKK0ZJTEVTXyR7UE59LTJ0bzMgKz0gIiR7YmluZGlyfS8ydG8zLSR7UFlUSE9OX01BSk1JTn0iCitGSUxFU18ke1BOfS1weWRvYyArPSAiJHtiaW5kaXJ9L3B5ZG9jJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHlkb2MzIgorRklMRVNfJHtQTn0taWRsZSArPSAiJHtiaW5kaXJ9L2lkbGUzICR7YmluZGlyfS9pZGxlJHtQWVRIT05fTUFKTUlOfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXB5dmVudiIKK0ZJTEVTXyR7UE59LXB5dmVudiArPSAiJHtiaW5kaXJ9L3B5dmVudi0ke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weXZlbnYiCisKKyMgcGFja2FnZSBsaWJweXRob24zCitQQUNLQUdFUyA9KyAibGlicHl0aG9uMyBsaWJweXRob24zLXN0YXRpY2RldiIKK0ZJTEVTX2xpYnB5dGhvbjMgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKK0ZJTEVTX2xpYnB5dGhvbjMtc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fQklOQUJJfS9saWJweXRob24ke1BZVEhPTl9CSU5BQkl9LmEiCisKKyMgY2F0Y2ggZGVidWcgZXh0ZW5zaW9ucyAoaXNuJ3QgdGhhdCBhbHJlYWR5IGluIHB5dGhvbi1jb3JlLWRiZz8pCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLy5kZWJ1ZyIKKworIyBjYXRjaCBhbGwgdGhlIHJlc3QgKHVuc29ydGVkKQorUEFDS0FHRVMgKz0gIiR7UE59LW1pc2MiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSIKKworIyBjYXRjaCBtYW5wYWdlCitQQUNLQUdFUyArPSAiJHtQTn0tbWFuIgorRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NTU3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy45LmJiCkBAIC0wLDAgKzEsMTgwIEBACityZXF1aXJlIHB5dGhvbi5pbmMKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiIKK1BSID0gIiR7SU5DX1BSfSIKKworRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgKz0gIlwKKyAgZmlsZTovLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoIFwKKyAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCisgIGZpbGU6Ly8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoIFwKKyAgJHtESVNUUk9fU1JDX1VSSX0gXAorICBmaWxlOi8vbXVsdGlsaWIucGF0Y2ggXAorICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKKyAgZmlsZTovL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoIFwKKyAgZmlsZTovL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaCBcCisgIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCisgIGZpbGU6Ly9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggXAorICBmaWxlOi8vc2V0dXB0d2Vha3MucGF0Y2ggXAorICBmaWxlOi8vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaCBcCisgIGZpbGU6Ly9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaCBcCisgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoIFwKKyAgZmlsZTovL3B5dGhvbi0yLjcuMy1yZW1vdmUtYnNkYi1ycGF0aC5wYXRjaCBcCisgIGZpbGU6Ly9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoIFwKKyAgZmlsZTovL3J1bi1wdGVzdCBcCisgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIFwKKyAgZmlsZTovL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoIFwKKyAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBweXRob24tZGlyIHB5dGhvbm5hdGl2ZQorCitDT05GSUdVUkVPUFRTICs9ICIgLS13aXRoLXN5c3RlbS1mZmkgIgorCisjIFRoZSAzIGxpbmVzIGJlbG93IGFyZSBjb3BpZWQgZnJvbSB0aGUgbGliZmZpIHJlY2lwZSwgY3R5cGVzIHNoaXBzIGl0cyBvd24gY29weSBvZiB0aGUgbGliZmZpIHNvdXJjZXMKKyNTb21laG93IGdjYyBkb2Vzbid0IHNldCBfX1NPRlRGUF9fIHdoZW4gcGFzc2luZyAtbWZsb2F0YWJpPXNvZnRwIDooCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjYgPSAiIC1EX19TT0ZURlBfXyIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12N2EgPSAiIC1EX19TT0ZURlBfXyIKKworIyBUaGUgZm9sbG93aW5nIGlzIGEgaGFjayB1bnRpbCB3ZSBkcm9wIGFjX2N2X3NpemVvZl9vZmZfdCBmcm9tIHNpdGUgZmlsZXMKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnYWNfY3Zfc2l6ZW9mX29mZl90PTgnLCAnJywgZCl9IGFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBhY19jdl9maWxlX19kZXZfcHRjPW5vIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXJtIC1mICR7U30vTWFrZWZpbGUub3JpZworICAgICAgICBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIyByZWdlbmVyYXRlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIHN5c3RlbSBoZWFkZXJzCisgICAgICAgIGNkICR7U30vTGliL3BsYXQtbGludXgyCisgICAgICAgIGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAke1N9L1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9kbGZjbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9saW51eC9jZHJvbS5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9uZXRpbmV0L2luLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L3N5cy90eXBlcy5oCisgICAgICAgIHNlZCAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAtaSAqLnB5CisgICAgICAgIGNkIC0KKworCSMgcmVtb3ZlIGFueSBib2d1cyBMRF9MSUJSQVJZX1BBVEgKKwlzZWQgLWkgLWUgcyxSVU5TSEFSRUQ9LiosUlVOU0hBUkVEPSwgTWFrZWZpbGUKKworCWlmIFsgISAtZiBNYWtlZmlsZS5vcmlnIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLm9yaWcKKwlmaQorCXNlZCAtaSAtZSAncyNeTERGTEFHUz0uKiNMREZMQUdTPSR7TERGTEFHU30gLUwuIC1MJHtTVEFHSU5HX0xJQkRJUn0jZycgXAorCQktZSAncyxsaWJkaXI9JHtsaWJkaXJ9LGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSxsaWJleGVjZGlyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9LGcnIFwKKwkJLWUgJ3MsXkxJQkRJUj0uKixMSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0saW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5JTkNMVURFRElSPS4qLElOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeQ09ORklOQ0xVREVESVI9LiosQ09ORklOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQlNYWtlZmlsZQorCSMgc2F2ZSBjb3B5IG9mIGl0IG5vdywgYmVjYXVzZSBpZiB3ZSBkbyBpdCBpbiBkb19pbnN0YWxsIGFuZCAKKwkjIHRoZW4gY2FsbCBkb19pbnN0YWxsIHR3aWNlIHdlIGdldCBNYWtlZmlsZS5vcmlnID09IE1ha2VmaWxlLnN5c3Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUuc3lzcm9vdAorCisJZXhwb3J0IENST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iCisJZXhwb3J0IFBZVEhPTkJVSUxERElSPSIke0J9IgorCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIG1ha2UgaW5zdGFsbCBuZWVkcyB0aGUgb3JpZ2luYWwgTWFrZWZpbGUsIG9yIG90aGVyd2lzZSB0aGUgaW5jbHVlcyB3b3VsZAorCSMgZ28gdG8gJHtEfSR7U1RBR0lORy4uLn0vLi4uCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLm9yaWcgTWFrZWZpbGUKKworCWV4cG9ydCBDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IgorCWV4cG9ydCBQWVRIT05CVUlMRERJUj0iJHtCfSIKKworCSMgQWZ0ZXIgc3dpenpsaW5nIHRoZSBtYWtlZmlsZSwgd2UgbmVlZCB0byBydW4gdGhlIGJ1aWxkIGFnYWluLgorCSMgaW5zdGFsbCBjYW4gcmFjZSB3aXRoIHRoZSBidWlsZCBzbyB3ZSBoYXZlIHRvIHJ1biB0aGlzIGZpcnN0LCB0aGVuIGluc3RhbGwKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCUNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfQorCQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IGluc3RhbGwKKworCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5zeXNyb290ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9weWNvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9weXRob24yLjcgVEVSTUlORk9fRElSUz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8nCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJNYWtlZmlsZSIKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicHlfcGFja2FnZV9wcmVwcm9jZXNzIgorCitweV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCSMgY29weSBiYWNrIHRoZSBvbGQgTWFrZWZpbGUgdG8gZml4IHRhcmdldCBwYWNrYWdlCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCisJIyBSZW1vdmUgcmVmZXJlbmNlcyB0byBidWlsZG1hY2hpbmUgcGF0aHMgaW4gdGFyZ2V0IE1ha2VmaWxlIGFuZCBfc3lzY29uZmlnZGF0YQorCXNlZCAtaSAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAtZSBzOictLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZSBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKK30KKworcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKK1JQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmVfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHQgPSAib3BlbnNzbCIKKworIyBwYWNrYWdlIGxpYnB5dGhvbjIKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0yIgorRklMRVNfbGliJHtCUE59MiA9ICIke2xpYmRpcn0vbGlicHl0aG9uKi5zby4qIgorCisjIGNhdGNoIGRlYnVnIGV4dGVuc2lvbnMgKGlzbid0IHRoYXQgYWxyZWFkeSBpbiBweXRob24tY29yZS1kYmc/KQorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8uZGVidWciCisKKyMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKK1BBQ0tBR0VTICs9ICIke1BOfS1taXNjIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gIiR7UE59LW1vZHVsZXMgJHtQTn0tbWlzYyIKKyNpbmhlcml0IHB0ZXN0IGFmdGVyICJyZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYyIgc28gUEFDS0FHRVMgZG9lc24ndCBnZXQgb3ZlcndyaXR0ZW4KK2luaGVyaXQgcHRlc3QKKworIyBUaGlzIG11c3QgY29tZSBhZnRlciBpbmhlcml0IHB0ZXN0IGZvciB0aGUgb3ZlcnJpZGUgdG8gdGFrZSBlZmZlY3QKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfQorCXNlZCAtZSBzOkxJQkRJUi9weXRob24vcHRlc3Q6JHtQVEVTVF9QQVRIfTpnIFwKKwkgLWUgczpMSUJESVI6JHtsaWJkaXJ9OmcgXAorCSAtaSAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKK30KKworIyBjYXRjaCBtYW5wYWdlCitQQUNLQUdFUyArPSAiJHtQTn0tbWFuIgorRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZDFjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiUWVtdSBoZWxwZXIgc2NyaXB0cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitSREVQRU5EU18ke1BOfSA9ICJuYXRpdmVzZGstcWVtdSIKK1BSID0gInI5IgorCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vdHVuY3RsLmM7ZW5kbGluZT00O21kNT1mZjNhMDk5OTZiYzVmZmY2YmM1ZDRlMGI0YzI4Zjk5OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXU7ZW5kbGluZT0xODttZDU9NzdmYmU0NDJhODhiMWJjZGMyOWMzYmE2NzczM2IyMWIiCisKKworU1JDX1VSSSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11IFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbCBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtYWRkcHRhYmxlMmltYWdlIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaWZ1cCBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaWZkb3duIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvb2UtZmluZC1uYXRpdmUtc3lzcm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZXh0cmFjdC1zZGsgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMgXAorICAgICAgICAgICBmaWxlOi8vdHVuY3RsLmMgXAorICAgICAgICAgICBmaWxlOi8vcmF3MmZsYXNoLmMgXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IG5hdGl2ZXNkaworCitkb19jb21waWxlKCkgeworCSR7Q0N9IHR1bmN0bC5jIC1vIHR1bmN0bAorCSR7Q0N9IHJhdzJmbGFzaC5jIC1vIHJhdzJmbGFzaC5zcGl0egorCSR7Q0N9IHJhdzJmbGFzaC5jIC1vIGZsYXNoMnJhdy5zcGl0eiAtRGZsYXNoMnJhdworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9JHtDT1JFQkFTRX0vc2NyaXB0cy9vZS0qICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUqICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCB0dW5jdGwgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vCisJbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC5ha2l0YQorCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2guYm9yem9pCisJbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC50ZXJyaWVyCisJbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy5ha2l0YQorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcuYm9yem9pCisJbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy50ZXJyaWVyCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXItbmF0aXZlXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI3YzRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXItbmF0aXZlXzEuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkhlbHBlciB1dGlsaXRpZXMgbmVlZGVkIGJ5IHRoZSBydW5xZW11IHNjcmlwdCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitSREVQRU5EU18ke1BOfSA9ICJxZW11LW5hdGl2ZSIKK1BSID0gInIxIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L3R1bmN0bC5jO2VuZGxpbmU9NDttZDU9ZmYzYTA5OTk2YmM1ZmZmNmJjNWQ0ZTBiNGMyOGY5OTkiCisKK1NSQ19VUkkgPSAiZmlsZTovL3R1bmN0bC5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gdHVuY3RsLmMgLW8gdHVuY3RsCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCB0dW5jdGwgJHtEfSR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvcmF3MmZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmYWY2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW5lZEhhbmQgTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHTlUgR1BMIHYyLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBURlIoXykJCV8KKyNkZWZpbmUgVkVSQk9TRQorI2RlZmluZSBQQkFSX0xFTgk0MAorCisjZGVmaW5lIFBBUlRJVElPTl9TVEFSVAkweDAwNzAwMDAwCisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczhbXSA9IHsKKwkweDAsIDB4MSwgMHgyLAorfTsKKworc3RhdGljIGNvbnN0IGludCBlY2NfcG9zMTZbXSA9IHsKKwkweDAsIDB4MSwgMHgyLCAweDMsIDB4NiwgMHg3LAorfTsKKworc3RhdGljIGNvbnN0IGludCBlY2NfcG9zNjRbXSA9IHsKKwkweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorCTB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCisJMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX2FraXRhW10gPSB7CisJMHgwNSwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgxNSwgMHgxMSwKKwkweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAorCTB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4MzcsCit9OworCitzdHJ1Y3QgamZmc19tYXJrZXJfcyB7CisJaW50IHBvczsKKwl1aW50OF90IHZhbHVlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfcG9zOFtdID0geworCXsgMHgwMywgMHhmZiB9LCB7IDB4MDQsIDB4ZmYgfSwgeyAweDA2LCAweDg1IH0sIHsgMHgwNywgMHgxOSB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczE2W10gPSB7CisJeyAweDA4LCAweDg1IH0sIHsgMHgwOSwgMHgxOSB9LCB7IDB4MGEsIDB4MDMgfSwgeyAweDBiLCAweDIwIH0sCisJeyAweDBjLCAweDA4IH0sIHsgMHgwZCwgMHgwMCB9LCB7IDB4MGUsIDB4MDAgfSwgeyAweDBmLCAweDAwIH0sCisJeyAtMSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfcG9zNjRbXSA9IHsKKwl7IDB4MDIsIDB4ZmYgfSwgeyAweDAzLCAweGZmIH0sIHsgMHgwNCwgMHhmZiB9LCB7IDB4MDUsIDB4ZmYgfSwKKwl7IDB4MDYsIDB4ZmYgfSwgeyAweDA3LCAweGZmIH0sIHsgMHgwOCwgMHhmZiB9LCB7IDB4MDksIDB4ZmYgfSwKKwl7IDB4MGEsIDB4ZmYgfSwgeyAweDBiLCAweGZmIH0sIHsgMHgwYywgMHhmZiB9LCB7IDB4MGQsIDB4ZmYgfSwKKwl7IDB4MGUsIDB4ZmYgfSwgeyAweDBmLCAweGZmIH0sIHsgMHgxMCwgMHg4NSB9LCB7IDB4MTEsIDB4MTkgfSwKKwl7IDB4MTIsIDB4MDMgfSwgeyAweDEzLCAweDIwIH0sIHsgMHgxNCwgMHgwOCB9LCB7IDB4MTUsIDB4MDAgfSwKKwl7IDB4MTYsIDB4MDAgfSwgeyAweDE3LCAweDAwIH0sIHsgMHgxOCwgMHhmZiB9LCB7IDB4MTksIDB4ZmYgfSwKKwl7IDB4MWEsIDB4ZmYgfSwgeyAweDFiLCAweGZmIH0sIHsgMHgxYywgMHhmZiB9LCB7IDB4MWQsIDB4ZmYgfSwKKwl7IDB4MWUsIDB4ZmYgfSwgeyAweDFmLCAweGZmIH0sIHsgMHgyMCwgMHhmZiB9LCB7IDB4MjEsIDB4ZmYgfSwKKwl7IDB4MjIsIDB4ZmYgfSwgeyAweDIzLCAweGZmIH0sIHsgMHgyNCwgMHhmZiB9LCB7IDB4MjUsIDB4ZmYgfSwKKwl7IDB4MjYsIDB4ZmYgfSwgeyAweDI3LCAweGZmIH0sCisJeyAtMSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfYWtpdGFbXSA9IHsKKwl7IDB4MDgsIDB4ODUgfSwgeyAweDA5LCAweDE5IH0sIHsgMHgwYSwgMHgwMyB9LCB7IDB4MGIsIDB4MjAgfSwKKwl7IDB4MGMsIDB4MDggfSwgeyAweDBkLCAweDAwIH0sIHsgMHgwZSwgMHgwMCB9LCB7IDB4MGYsIDB4MDAgfSwKKwl7IDB4MTAsIDB4ZmYgfSwKKwl7IC0xIH0sCit9OworCisjZGVmaW5lIExFTihhcnJheSkJKHNpemVvZihhcnJheSkgLyBzaXplb2YoKmFycmF5KSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlY2Nfc3R5bGVfcyB7CisJaW50IHBhZ2Vfc2l6ZTsKKwlpbnQgb29iX3NpemU7CisJaW50IGVjY2J5dGVzOworCWludCBlY2NzaXplOworCWNvbnN0IGludCAqZWNjcG9zOworCWludCByb21zaXplOworCWNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zICpmcmVlcG9zOworfSBzcGl0eiA9IHsKKwkweDIwMCwgMHgxMCwgMHgxMDAsIExFTihlY2NfcG9zMTYpLCBlY2NfcG9zMTYsIDB4MDEwMDAwMDAsIGZyZWVfcG9zMTYKK30sIGFraXRhID0geworCTB4ODAwLCAweDQwLCAweDEwMCwgTEVOKGVjY19ha2l0YSksIGVjY19ha2l0YSwgMHgwODAwMDAwMCwgZnJlZV9ha2l0YQorfSwgYm9yem9pID0geworCTB4ODAwLCAweDQwLCAweDEwMCwgTEVOKGVjY19ha2l0YSksIGVjY19ha2l0YSwgMHgwODAwMDAwMCwgZnJlZV9ha2l0YQorfSwgdGVycmllciA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK307CisKK3N0cnVjdCBlY2Nfc3RhdGVfcyB7CisJaW50IGNvdW50OworCXVpbnQ4X3QgY3A7CisJdWludDhfdCBscFsyXTsKKwljb25zdCBzdHJ1Y3QgZWNjX3N0eWxlX3MgKnN0eWxlOworfTsKKworI2lmbmRlZiBmbGFzaDJyYXcKKy8qCisgKiBQcmUtY2FsY3VsYXRlZCAyNTYtd2F5IDEgYnl0ZSBjb2x1bW4gcGFyaXR5LiAgVGFibGUgYm9ycm93ZWQgZnJvbSBMaW51eC4KKyAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3QgZWNjX3ByZWNhbGNfdGFibGVbXSA9IHsKKwkweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBjLCAweDBmLCAweDVhLAorCTB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsCisJMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwKKwkweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAorCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsCisJMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKKwkweDAzLCAweDU2LCAweDU1LCAweDAwLCAweDVhLCAweDBmLCAweDBjLCAweDU5LAorCTB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCisJMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywKKwkweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAorCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsCisJMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKKwkweDBmLCAweDVhLCAweDU5LCAweDBjLCAweDU2LCAweDAzLCAweDAwLCAweDU1LAorCTB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCisJMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwKKwkweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAorCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsCisJMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKKwkweDBmLCAweDVhLCAweDU5LCAweDBjLCAweDU2LCAweDAzLCAweDAwLCAweDU1LAorCTB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCisJMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwKKwkweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAorCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsCisJMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKKwkweDAzLCAweDU2LCAweDU1LCAweDAwLCAweDVhLCAweDBmLCAweDBjLCAweDU5LAorCTB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCisJMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywKKwkweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAorCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsCisJMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKKwkweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBjLCAweDBmLCAweDVhLAorCTB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsCit9OworCisvKiBVcGRhdGUgRUNDIHBhcml0eSBjb3VudCAqLworc3RhdGljIGlubGluZSB1aW50OF90IGVjY19kaWdlc3Qoc3RydWN0IGVjY19zdGF0ZV9zICpzLCB1aW50OF90IHNhbXBsZSkgeworCXVpbnQ4X3QgaWR4ID0gZWNjX3ByZWNhbGNfdGFibGVbc2FtcGxlXTsKKworCXMtPmNwIF49IGlkeCAmIDB4M2Y7CisJaWYgKGlkeCAmIDB4NDApIHsKKwkJcy0+bHBbMF0gXj0gfihzLT5jb3VudCAmIDB4ZmYpOworCQlzLT5scFsxXSBePSBzLT5jb3VudCAmIDB4ZmY7CisJfQorCXMtPmNvdW50ICsrOworCisJcmV0dXJuIHNhbXBsZTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2RpZ2VzdChzdHJ1Y3QgZWNjX3N0YXRlX3MgKmVjYywKKwkJY29uc3QgdWludDhfdCAqYnVmLCB1aW50OF90ICpvdXQpIHsKKwlpbnQgaSwgbHBfYVsyXTsKKworCWVjYy0+bHBbMF0gPSAweDAwOworCWVjYy0+bHBbMV0gPSAweDAwOworCWVjYy0+Y3AgPSAweDAwOworCWVjYy0+Y291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0eWxlLT5lY2NieXRlczsgaSArKykKKwkJZWNjX2RpZ2VzdChlY2MsIGJ1ZltpXSk7CisKKyMgZGVmaW5lIEJTSFIoYnl0ZSwgZnJvbSwgdG8pCSgoZWNjLT5scFtieXRlXSA+PiAoZnJvbSAtIHRvKSkgJiAoMSA8PCB0bykpCisJbHBfYVswXSA9CisJCUJTSFIoMCwgNCwgMCkgfCBCU0hSKDAsIDUsIDIpIHwKKwkJQlNIUigwLCA2LCA0KSB8IEJTSFIoMCwgNywgNikgfAorCQlCU0hSKDEsIDQsIDEpIHwgQlNIUigxLCA1LCAzKSB8CisJCUJTSFIoMSwgNiwgNSkgfCBCU0hSKDEsIDcsIDcpOworCisjIGRlZmluZSBCU0hMKGJ5dGUsIGZyb20sIHRvKQkoKGVjYy0+bHBbYnl0ZV0gPDwgKHRvIC0gZnJvbSkpICYgKDEgPDwgdG8pKQorCWxwX2FbMV0gPQorCQlCU0hMKDAsIDAsIDApIHwgQlNITCgwLCAxLCAyKSB8CisJCUJTSEwoMCwgMiwgNCkgfCBCU0hMKDAsIDMsIDYpIHwKKwkJQlNITCgxLCAwLCAxKSB8IEJTSEwoMSwgMSwgMykgfAorCQlCU0hMKDEsIDIsIDUpIHwgQlNITCgxLCAzLCA3KTsKKworCW91dFswXSA9IH5scF9hWzFdOworCW91dFsxXSA9IH5scF9hWzBdOworCW91dFsyXSA9ICh+ZWNjLT5jcCA8PCAyKSB8IDB4MDM7Cit9CisKK3N0YXRpYyB2b2lkIGpmZnMyX2Zvcm1hdChjb25zdCBzdHJ1Y3QgZWNjX3N0YXRlX3MgKmVjYywgdWludDhfdCBvb2JbXSkgeworCWNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zICpieXRlOworCWZvciAoYnl0ZSA9IGVjYy0+c3R5bGUtPmZyZWVwb3M7IGJ5dGUtPnBvcyA+PSAwOyBieXRlICsrKQorCQlvb2JbYnl0ZS0+cG9zXSA9IGJ5dGUtPnZhbHVlOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfZmlsbChjb25zdCBzdHJ1Y3QgZWNjX3N0YXRlX3MgKmVjYywgdWludDhfdCBidWZmZXJbXSwKKwkJaW50ICpsZW4sIGludCAqcGFydGl0aW9uLCBpbnQgY291bnQsIHVpbnQ4X3QgamZmc19idWZmZXJbXSkgeworCWludCByZXQ7CisKKwlzd2l0Y2ggKCpwYXJ0aXRpb24pIHsKKwljYXNlIDA6CisJCWlmIChjb3VudCA8IFBBUlRJVElPTl9TVEFSVCkgeworCQkJbWVtY3B5KGJ1ZmZlciwgamZmc19idWZmZXIgKyBjb3VudCwKKwkJCQkJZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpOworCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQkJYnJlYWs7CisJCX0KKwkJKnBhcnRpdGlvbiA9IDE7CisJY2FzZSAxOgorCQlpZiAoY291bnQgLSBQQVJUSVRJT05fU1RBUlQgPCBQQVJUSVRJT05fU1RBUlQpIHsKKwkJCW1lbWNweShidWZmZXIsIGpmZnNfYnVmZmVyICsgY291bnQgLSBQQVJUSVRJT05fU1RBUlQsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJCWJyZWFrOworCQl9CisKKwkJd2hpbGUgKCpsZW4gPCBlY2MtPnN0eWxlLT5lY2NieXRlcykgeworCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyICsgKmxlbiwgMHg4MDAgLSAqbGVuKSk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisJCQkqbGVuICs9IHJldDsKKwkJfQorCisJCWlmICgqbGVuID09IDApCisJCQkqcGFydGl0aW9uID0gMjsKKwkJZWxzZSBpZiAoKmxlbiA8IGVjYy0+c3R5bGUtPmVjY2J5dGVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuV2FybmluZzogJWkgc3RyYXkgYnl0ZXNcbiIsICpsZW4pOworCQkJbWVtc2V0KGJ1ZmZlciArICpsZW4sIDB4ZmYsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzIC0gKmxlbik7CisJCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlicmVhazsKKwljYXNlIDI6CisJCW1lbXNldChidWZmZXIsIDB4ZmYsIGVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQlicmVhazsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmVudnBbXSkgeworCXN0cnVjdCBlY2Nfc3RhdGVfcyBlY2M7CisJdWludDhfdCBidWZmZXJbMHgxMDAwXSwgZWNjX3BheWxvYWRbMHg0MF0sIHJlZ3NbM10sICpqZmZzOworCWludCByZXQsIGxlbiwgZWNjYnl0ZSwgY291bnQsIHBhcnRpdGlvbjsKKworCS8qIENoZWNrIGlmIHdlJ3JlIGNhbGxlZCBieSAicmF3MmZsYXNoLnNwaXR6IiBvciBzaW1pbGFyICovCisJbGVuID0gc3RybGVuKGFyZ3ZbMF0pOworCWlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNSwgImFraXRhIikpCisJCWVjYy5zdHlsZSA9ICZha2l0YTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNiwgImJvcnpvaSIpKQorCQllY2Muc3R5bGUgPSAmYm9yem9pOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA3LCAidGVycmllciIpKQorCQllY2Muc3R5bGUgPSAmdGVycmllcjsKKwllbHNlCisJCWVjYy5zdHlsZSA9ICZzcGl0ejsKKworIyBpZmRlZiBWRVJCT1NFCisJZnByaW50ZihzdGRlcnIsICJbIik7CisjIGVuZGlmCisKKwkvKiBTa2lwIGZpcnN0IDEwIGJ5dGVzICovCisJVEZSKHJlYWQoMCwgYnVmZmVyLCAweDEwKSk7CisKKwlsZW4gPSAwOworCWpmZnMgPSAodWludDhfdCAqKSBtYWxsb2MoUEFSVElUSU9OX1NUQVJUKTsKKwl3aGlsZSAobGVuIDwgUEFSVElUSU9OX1NUQVJUKSB7CisJCXJldCA9IFRGUihyZWFkKDAsIGpmZnMgKyBsZW4sIFBBUlRJVElPTl9TVEFSVCAtIGxlbikpOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKwkJbGVuICs9IHJldDsKKwl9CisKKwkvKiBDb252ZXJ0IGRhdGEgZnJvbSBzdGRpbiAqLworCXBhcnRpdGlvbiA9IGxlbiA9IGVjY2J5dGUgPSBjb3VudCA9IDA7CisJbWVtc2V0KGVjY19wYXlsb2FkLCAweGZmLCBlY2Muc3R5bGUtPm9vYl9zaXplKTsKKwlqZmZzMl9mb3JtYXQoJmVjYywgZWNjX3BheWxvYWQpOworCXdoaWxlIChjb3VudCA8IGVjYy5zdHlsZS0+cm9tc2l6ZSkgeworCQlidWZmZXJfZmlsbCgmZWNjLCBidWZmZXIsICZsZW4sICZwYXJ0aXRpb24sIGNvdW50LCBqZmZzKTsKKwkJYnVmZmVyX2RpZ2VzdCgmZWNjLCBidWZmZXIsIHJlZ3MpOworCisJCWVjY19wYXlsb2FkW2VjYy5zdHlsZS0+ZWNjcG9zW2VjY2J5dGUgKytdXSA9IHJlZ3NbMF07CisJCWVjY19wYXlsb2FkW2VjYy5zdHlsZS0+ZWNjcG9zW2VjY2J5dGUgKytdXSA9IHJlZ3NbMV07CisJCWVjY19wYXlsb2FkW2VjYy5zdHlsZS0+ZWNjcG9zW2VjY2J5dGUgKytdXSA9IHJlZ3NbMl07CisKKwkJVEZSKHdyaXRlKDEsIGJ1ZmZlciwgZWNjLnN0eWxlLT5lY2NieXRlcykpOworCQljb3VudCArPSBlY2Muc3R5bGUtPmVjY2J5dGVzOworCQlsZW4gLT0gZWNjLnN0eWxlLT5lY2NieXRlczsKKwkJbWVtbW92ZShidWZmZXIsIGJ1ZmZlciArIGVjYy5zdHlsZS0+ZWNjYnl0ZXMsIGxlbik7CisKKwkJaWYgKGVjY2J5dGUgPj0gZWNjLnN0eWxlLT5lY2NzaXplKSB7CisJCQlURlIod3JpdGUoMSwgZWNjX3BheWxvYWQsIGVjYy5zdHlsZS0+b29iX3NpemUpKTsKKwkJCWVjY2J5dGUgPSAwOworCQkJbWVtc2V0KGVjY19wYXlsb2FkLCAweGZmLCBlY2Muc3R5bGUtPm9vYl9zaXplKTsKKwkJCWlmIChwYXJ0aXRpb24gPCAyKQorCQkJCWpmZnMyX2Zvcm1hdCgmZWNjLCBlY2NfcGF5bG9hZCk7CisJCX0KKworIyBpZmRlZiBWRVJCT1NFCisJCWlmIChjb3VudCAqIFBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplID4KKwkJCQkoY291bnQgLSBlY2Muc3R5bGUtPmVjY2J5dGVzKSAqCisJCQkJUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiMiKTsKKyMgZW5kaWYKKwl9CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiXVxuIik7CisjIGVuZGlmCisJZnJlZShqZmZzKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10pIHsKKwlzdHJ1Y3QgZWNjX3N0YXRlX3MgZWNjOworCXVpbnQ4X3QgYnVmZmVyWzB4MTAwMF07CisJaW50IHJldCwgbGVuLCBjb3VudDsKKworCS8qIENoZWNrIGlmIHdlJ3JlIGNhbGxlZCBieSAiZmxhc2gycmF3LnNwaXR6IiBvciBzaW1pbGFyICovCisJbGVuID0gc3RybGVuKGFyZ3ZbMF0pOworCWlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNSwgImFraXRhIikpCisJCWVjYy5zdHlsZSA9ICZha2l0YTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNiwgImJvcnpvaSIpKQorCQllY2Muc3R5bGUgPSAmYm9yem9pOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA3LCAidGVycmllciIpKQorCQllY2Muc3R5bGUgPSAmdGVycmllcjsKKwllbHNlCisJCWVjYy5zdHlsZSA9ICZzcGl0ejsKKworIyBpZmRlZiBWRVJCT1NFCisJZnByaW50ZihzdGRlcnIsICJbIik7CisjIGVuZGlmCisKKwkvKiBDb252ZXJ0IGRhdGEgZnJvbSBzdGRpbiAqLworCWNvdW50ID0gMDsKKwl3aGlsZSAoY291bnQgPCBlY2Muc3R5bGUtPnJvbXNpemUpIHsKKwkJbGVuID0gMDsKKwkJd2hpbGUgKGxlbiA8IGVjYy5zdHlsZS0+cGFnZV9zaXplKSB7CisJCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIgKyBsZW4sCisJCQkJCQllY2Muc3R5bGUtPnBhZ2Vfc2l6ZSAtIGxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJbGVuICs9IHJldDsKKwkJfQorCQlpZiAobGVuID09IDApCisJCQlicmVhazsKKwkJaWYgKGxlbiA8IGVjYy5zdHlsZS0+cGFnZV9zaXplKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuV2FybmluZzogJWkgc3RyYXkgYnl0ZXNcbiIsIGxlbik7CisJCX0KKworCQlURlIod3JpdGUoMSwgYnVmZmVyLCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkpOworCisJCWNvdW50ICs9IGxlbjsKKwkJbGVuID0gMDsKKwkJd2hpbGUgKGxlbiA8IGVjYy5zdHlsZS0+b29iX3NpemUpIHsKKwkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSAtIGxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJbGVuICs9IHJldDsKKwkJfQorCisjIGlmZGVmIFZFUkJPU0UKKwkJaWYgKGNvdW50ICogUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUgPgorCQkJCShjb3VudCAtIGVjYy5zdHlsZS0+cGFnZV9zaXplKSAqCisJCQkJUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiMiKTsKKyMgZW5kaWYKKwl9CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiXVxuIik7CisjIGVuZGlmCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3R1bmN0bC5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvdHVuY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMjRhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3R1bmN0bC5jCkBAIC0wLDAgKzEsMTU2IEBACisvKiBDb3B5cmlnaHQgMjAwMiBKZWZmIERpa2UKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdHVuLmg+CisKKy8qIFRVTlNFVEdST1VQIGFwcGVhcmVkIGluIDIuNi4yMyAqLworI2lmbmRlZiBUVU5TRVRHUk9VUAorI2RlZmluZSBUVU5TRVRHUk9VUCAgIF9JT1coJ1QnLCAyMDYsIGludCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBVc2FnZShjaGFyICpuYW1lKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0ZTogJXMgWy1iXSBbLXUgb3duZXJdIFstZyBncm91cF0gWy10IGRldmljZS1uYW1lXSAiCisJICAiWy1mIHR1bi1jbG9uZS1kZXZpY2VdXG4iLCBuYW1lKTsKKyAgZnByaW50ZihzdGRlcnIsICJEZWxldGU6ICVzIC1kIGRldmljZS1uYW1lIFstZiB0dW4tY2xvbmUtZGV2aWNlXVxuXG4iLAorCSAgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAiVGhlIGRlZmF1bHQgdHVuIGNsb25lIGRldmljZSBpcyAvZGV2L25ldC90dW4gLSBzb21lIHN5c3RlbXMiCisJICAiIHVzZVxuL2Rldi9taXNjL25ldC90dW4gaW5zdGVhZFxuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICItYiB3aWxsIHJlc3VsdCBpbiBicmllZiBvdXRwdXQgKGp1c3QgdGhlIGRldmljZSBuYW1lKVxuIik7CisgIGV4aXQoMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IHBhc3N3ZCAqcHc7CisgIHN0cnVjdCBncm91cCAqZ3I7CisgIHVpZF90IG93bmVyID0gLTE7CisgIGdpZF90IGdyb3VwID0gLTE7CisgIGludCB0YXBfZmQsIG9wdCwgZGVsZXRlID0gMCwgYnJpZWYgPSAwOworICBjaGFyICp0dW4gPSAiIiwgKmZpbGUgPSAiL2Rldi9uZXQvdHVuIiwgKm5hbWUgPSBhcmd2WzBdLCAqZW5kOworCisgIHdoaWxlKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgImJkOmY6dDp1Omc6IikpID4gMCl7CisgICAgc3dpdGNoKG9wdCkgeworICAgICAgY2FzZSAnYic6CisgICAgICAgIGJyaWVmID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdkJzoKKyAgICAgICAgZGVsZXRlID0gMTsKKwl0dW4gPSBvcHRhcmc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZic6CisJZmlsZSA9IG9wdGFyZzsKKwlicmVhazsKKyAgICAgIGNhc2UgJ3UnOgorCXB3ID0gZ2V0cHduYW0ob3B0YXJnKTsKKwlpZihwdyAhPSBOVUxMKXsKKwkgIG93bmVyID0gcHctPnB3X3VpZDsKKwkgIGJyZWFrOworCX0KKyAgICAgICAgb3duZXIgPSBzdHJ0b2wob3B0YXJnLCAmZW5kLCAwKTsKKwlpZigqZW5kICE9ICdcMCcpeworCSAgZnByaW50ZihzdGRlcnIsICInJXMnIGlzIG5laXRoZXIgYSB1c2VybmFtZSBub3IgYSBudW1lcmljIHVpZC5cbiIsCisJCSAgb3B0YXJnKTsKKwkgIFVzYWdlKG5hbWUpOworCX0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdnJzoKKwlnciA9IGdldGdybmFtKG9wdGFyZyk7CisJaWYoZ3IgIT0gTlVMTCl7CisJICBncm91cCA9IGdyLT5ncl9naWQ7CisJICBicmVhazsKKwl9CisgICAgICAgIGdyb3VwID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMCk7CisJaWYoKmVuZCAhPSAnXDAnKXsKKwkgIGZwcmludGYoc3RkZXJyLCAiJyVzJyBpcyBuZWl0aGVyIGEgZ3JvdXBuYW1lIG5vciBhIG51bWVyaWMgZ3JvdXAuXG4iLAorCQkgIG9wdGFyZyk7CisJICBVc2FnZShuYW1lKTsKKwl9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICd0JzoKKyAgICAgICAgdHVuID0gb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2gnOgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgVXNhZ2UobmFtZSk7CisgICAgfQorICB9CisKKyAgYXJndiArPSBvcHRpbmQ7CisgIGFyZ2MgLT0gb3B0aW5kOworCisgIGlmKGFyZ2MgPiAwKQorICAgIFVzYWdlKG5hbWUpOworCisgIGlmKCh0YXBfZmQgPSBvcGVuKGZpbGUsIE9fUkRXUikpIDwgMCl7CisgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiAnJXMnIDogIiwgZmlsZSk7CisgICAgcGVycm9yKCIiKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKworICBpZnIuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSTsKKyAgc3RybmNweShpZnIuaWZyX25hbWUsIHR1biwgc2l6ZW9mKGlmci5pZnJfbmFtZSkgLSAxKTsKKyAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRJRkYsICh2b2lkICopICZpZnIpIDwgMCl7CisgICAgcGVycm9yKCJUVU5TRVRJRkYiKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYoZGVsZXRlKXsKKyAgICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVFBFUlNJU1QsIDApIDwgMCl7CisgICAgICBwZXJyb3IoImRpc2FibGluZyBUVU5TRVRQRVJTSVNUIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBwcmludGYoIlNldCAnJXMnIG5vbnBlcnNpc3RlbnRcbiIsIGlmci5pZnJfbmFtZSk7CisgIH0KKyAgZWxzZSB7CisgICAgLyogZW11bGF0ZSBiZWhhdmlvdXIgcHJpb3IgdG8gVFVOU0VUR1JPVVAgKi8KKyAgICBpZihvd25lciA9PSAtMSAmJiBncm91cCA9PSAtMSkgeworICAgICAgb3duZXIgPSBnZXRldWlkKCk7CisgICAgfQorCisgICAgaWYob3duZXIgIT0gLTEpIHsKKyAgICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUT1dORVIsIG93bmVyKSA8IDApeworICAgICAgCXBlcnJvcigiVFVOU0VUT1dORVIiKTsKKyAgICAgIAlleGl0KDEpOworICAgICAgfQorICAgIH0KKyAgICBpZihncm91cCAhPSAtMSkgeworICAgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRHUk9VUCwgZ3JvdXApIDwgMCl7CisgICAgICAJcGVycm9yKCJUVU5TRVRHUk9VUCIpOworICAgICAgCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRQRVJTSVNULCAxKSA8IDApeworICAgICAgcGVycm9yKCJlbmFibGluZyBUVU5TRVRQRVJTSVNUIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmKGJyaWVmKQorICAgICAgcHJpbnRmKCIlc1xuIiwgaWZyLmlmcl9uYW1lKTsKKyAgICBlbHNlIHsKKyAgICAgIHByaW50ZigiU2V0ICclcycgcGVyc2lzdGVudCBhbmQgb3duZWQgYnkiLCBpZnIuaWZyX25hbWUpOworICAgICAgaWYob3duZXIgIT0gLTEpCisgICAgICAgICAgcHJpbnRmKCIgdWlkICVkIiwgb3duZXIpOworICAgICAgaWYoZ3JvdXAgIT0gLTEpCisgICAgICAgICAgcHJpbnRmKCIgZ2lkICVkIiwgZ3JvdXApOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyAgfQorICByZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LXRhcmdldHMuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS10YXJnZXRzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM1NjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS10YXJnZXRzLmluYwpAQCAtMCwwICsxLDIyIEBACisjIHBvc3NpYmxlIGFyY2ggdmFsdWVzIGFyZSBhcm0gYWFyY2g2NCBtaXBzIG1pcHNlbCBtaXBzNjQgbWlwczY0ZWwgcHBjIHBwYzY0IHBwYzY0YWJpMzIKKyMgcHBjZW1iIGFybWViIGFscGhhIHNwYXJjMzJwbHVzIGkzODYgeDg2XzY0IGNyaXMgbTY4ayBtaWNyb2JsYXplIHNwYXJjIHNwYXJjMzIKKyMgc3BhcmMzMnBsdXMKKworZGVmIGdldF9xZW11X3RhcmdldF9saXN0KGQpOgorICAgIGltcG9ydCBiYgorICAgIGFyY2hzID0gZC5nZXRWYXIoJ1FFTVVfVEFSR0VUUycsIFRydWUpLnNwbGl0KCkKKyAgICB0b3MgPSBkLmdldFZhcignSE9TVF9PUycsIFRydWUpCisgICAgc29mdG1tdW9ubHkgPSAiIgorICAgIGZvciBhcmNoIGluIFsnbWlwczY0JywgJ21pcHM2NGVsJywgJ3BwY2VtYiddOgorICAgICAgICBpZiBhcmNoIGluIGFyY2hzOgorICAgICAgICAgICAgc29mdG1tdW9ubHkgKz0gYXJjaCArICItc29mdG1tdSwiCisgICAgICAgICAgICBhcmNocy5yZW1vdmUoYXJjaCkKKyAgICBsaW51eHVzZXJvbmx5ID0gIiIKKyAgICBmb3IgYXJjaCBpbiBbJ2FybWViJywgJ2FscGhhJywgJ3BwYzY0YWJpMzInLCAnc3BhcmMzMnBsdXMnXToKKyAgICAgICAgaWYgYXJjaCBpbiBhcmNoczoKKyAgICAgICAgICAgIGxpbnV4dXNlcm9ubHkgKz0gYXJjaCArICItbGludXgtdXNlciwiCisgICAgICAgICAgICBhcmNocy5yZW1vdmUoYXJjaCkKKyAgICBpZiAnbGludXgnIG5vdCBpbiB0b3M6CisgICAgICAgIHJldHVybiBzb2Z0bW11b25seSArICcnLmpvaW4oW2FyY2ggKyAiLXNvZnRtbXUiICsgIiwiIGZvciBhcmNoIGluIGFyY2hzXSkucnN0cmlwKCcsJykKKyAgICByZXR1cm4gc29mdG1tdW9ubHkgKyBsaW51eHVzZXJvbmx5ICsgJycuam9pbihbYXJjaCArICItbGludXgtdXNlciIgKyAiLCIgKyBhcmNoICsgIi1zb2Z0bW11IiArICIsIiBmb3IgYXJjaCBpbiBhcmNoc10pLnJzdHJpcCgnLCcpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM4YmYyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jCkBAIC0wLDAgKzEsMTM3IEBACitTVU1NQVJZID0gIkZhc3Qgb3BlbiBzb3VyY2UgcHJvY2Vzc29yIGVtdWxhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3FlbXUub3JnIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorREVQRU5EUyA9ICJnbGliLTIuMCB6bGliIHBpeG1hbiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAiYmFzaCBweXRob24iCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJiYXNoIG1ha2UiCisKK3JlcXVpcmUgcWVtdS10YXJnZXRzLmluYworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUFIgPSAicjEiCisKKyMgUUVNVV9UQVJHRVRTIGlzIG92ZXJyaWRhYmxlIHZhcmlhYmxlCitRRU1VX1RBUkdFVFMgPz0gImFybSBhYXJjaDY0IGkzODYgbWlwcyBtaXBzZWwgbWlwczY0IG1pcHM2NGVsIHBwYyBzaDQgeDg2XzY0IgorCitTUkNfVVJJID0gIlwKKyAgICBmaWxlOi8vcG93ZXJwY19yb20uYmluIFwKKyAgICBmaWxlOi8vZGlzYWJsZS1ncmFicy5wYXRjaCBcCisgICAgZmlsZTovL2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaCBcCisgICAgZmlsZTovL3dhY29tLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoIFwKKyAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICBmaWxlOi8vY3B1cy5jLXFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZC1maXgtcmFjZS1jb25kaXRpb24tYS5wYXRjaCBcCisgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiXAorICAgIGZpbGU6Ly9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaCBcCisgICAgZmlsZTovL2NwdXMuYy1xZW11X2NwdV9raWNrX3RocmVhZF9kZWJ1Z2dpbmcucGF0Y2ggXAorICAgICIKKworRVhUUkFfT0VDT05GICs9ICItLXRhcmdldC1saXN0PSR7QGdldF9xZW11X3RhcmdldF9saXN0KGQpfSAtLWRpc2FibGUtd2Vycm9yICAtLWRpc2FibGUtYmx1ZXogLS1kaXNhYmxlLWxpYmlzY3NpIC0td2l0aC1zeXN0ZW0tcGl4bWFuIC0tZXh0cmEtY2ZsYWdzPScke0NGTEFHU30nIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS1lbmFibGUtZGVidWcgLS1lbmFibGUtZGVidWctaW5mbyIKK0lOSElCSVRfU1lTUk9PVF9TVFJJUCA9ICIxIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0tdGFyZ2V0LWxpc3Q9JHtAZ2V0X3FlbXVfdGFyZ2V0X2xpc3QoZCl9IC0tZGlzYWJsZS13ZXJyb3IgXAorCQkJCSIKK2V4cG9ydCBMSUJUT09MPSIke0hPU1RfU1lTfS1saWJ0b29sIgorCitkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJIyBBcHBlbmQgYnVpbGQgaG9zdCBwa2ctY29uZmlnIHBhdGhzIGZvciBuYXRpdmUgdGFyZ2V0IHNpbmNlIHRoZSBob3N0IG1heSBwcm92aWRlIHNkbAorCUJIT1NUX1BLR0NPTkZJR19QQVRIPSQoUEFUSD0vdXNyL2JpbjovYmluIHBrZy1jb25maWcgLS12YXJpYWJsZSBwY19wYXRoIHBrZy1jb25maWcgfHwgZWNobyAiIikKKwlpZiBbICEgLXogIiRCSE9TVF9QS0dDT05GSUdfUEFUSCIgXTsgdGhlbgorCQlleHBvcnQgUEtHX0NPTkZJR19QQVRIPSRQS0dfQ09ORklHX1BBVEg6JEJIT1NUX1BLR0NPTkZJR19QQVRICisJZmkKK30KKworS1ZNRU5BQkxFID0gIi0tZW5hYmxlLWt2bSIKK0tWTUVOQUJMRV9kYXJ3aW4gPSAiLS1kaXNhYmxlLWt2bSIKK0tWTUVOQUJMRV9taW5ndzMyID0gIi0tZGlzYWJsZS1rdm0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAjIEhhbmRsZSBkaXN0cm9zIHN1Y2ggYXMgQ2VudE9TIDUgMzItYml0IHRoYXQgZG8gbm90IGhhdmUga3ZtIHN1cHBvcnQKKyAgICBLVk1PUFRTPSItLWRpc2FibGUta3ZtIgorICAgIGlmIFsgIiR7UE59IiAhPSAicWVtdS1uYXRpdmUiIC1hICIke1BOfSIgIT0gIm5hdGl2ZXNkay1xZW11IiBdIFwKKyAgICAgICB8fCBbIC1mIC91c3IvaW5jbHVkZS9saW51eC9rdm0uaCBdIDsgdGhlbgorICAgICAgIEtWTU9QVFM9IiR7S1ZNRU5BQkxFfSIKKyAgICBmaQorCisgICAgJHtTfS9jb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9IC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IC0tbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9IC0tZGlzYWJsZS1zdHJpcCAke0VYVFJBX09FQ09ORn0gJEtWTU9QVFMKKyAgICB0ZXN0ICEgLWUgJHtTfS90YXJnZXQtaTM4Ni9iZWdpbmVuZF9mdW5jcy5zaCB8fCBjaG1vZCBhK3ggJHtTfS90YXJnZXQtaTM4Ni9iZWdpbmVuZF9mdW5jcy5zaAorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW1ha2UgYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgLXJMICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0KKwlmaW5kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzIC10eXBlIGYgLW5hbWUgIiouW1NzaGNvZF0iIHwgeGFyZ3MgLWkgcm0gLXJmIHt9CisKKwljcCAke1N9L3Rlc3RzL01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCit9CisKK2RvX2luc3RhbGwgKCkgeworCWV4cG9ydCBTVFJJUD0idHJ1ZSIKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vcWVtdQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Bvd2VycGNfcm9tLmJpbiAke0R9JHtkYXRhZGlyfS9xZW11Cit9CisKKyMgVGhlIGZvbGxvd2luZyBmcmFnbWVudCB3aWxsIGNyZWF0ZSBhIHdyYXBwZXIgZm9yIHFlbXUtbWlwcyB1c2VyIGVtdWxhdGlvbgorIyBiaW5hcnkgaW4gb3JkZXIgdG8gd29yayBhcm91bmQgYSBzZWdtZW50YXRpb24gZmF1bHQgaXNzdWUuIEJhc2ljYWxseSwgYnkKKyMgZGVmYXVsdCwgdGhlIHJlc2VydmVkIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBmb3IgMzItb24tNjQgYml0IGlzIHNldCB0byA0R0IuCisjIFRoaXMgd2lsbCB0cmlnZ2VyIGEgTU1VIGFjY2VzcyBmYXVsdCBpbiB0aGUgdmlydHVhbCBDUFUuIFdpdGggdGhpcyBjaGFuZ2UsCisjIHRoZSBxZW11LW1pcHMgd29ya3MgZmluZS4KKyMgSU1QT1JUQU5UOiBUaGlzIHBpZWNlIG5lZWRzIHRvIGJlIHJlbW92ZWQgb25jZSB0aGUgcm9vdCBjYXVzZSBpcyBmaXhlZCEKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIFsgLWUgIiR7RH0vJHtiaW5kaXJ9L3FlbXUtbWlwcyIgXTsgdGhlbgorCQljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9xZW11LW1pcHMgXAorCQkJUUVNVV9SRVNFUlZFRF9WQT0weDAKKwlmaQorfQorIyBFTkQgb2YgcWVtdS1taXBzIHdvcmthcm91bmQKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisJZmR0IHNkbCBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hlbicsICd4ZW4nLCAnJywgZCl9IFwKKwkiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gImZkdCBhbHNhIHV1aWQiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA/Pz0gImZkdCBzZGwiCitOQVRJVkVERVBTID0gIiIKK05BVElWRURFUFNfY2xhc3MtbmF0aXZlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2xpYnhleHQtbmF0aXZlJywgJycsZCl9IgorUEFDS0FHRUNPTkZJR1tzZGxdID0gIi0tZW5hYmxlLXNkbCwtLWRpc2FibGUtc2RsLGxpYnNkbCAke05BVElWRURFUFN9LCIKK1BBQ0tBR0VDT05GSUdbdmlydGZzXSA9ICItLWVuYWJsZS12aXJ0ZnMgLS1lbmFibGUtYXR0ciwtLWRpc2FibGUtdmlydGZzLGxpYmNhcCBhdHRyLCIKK1BBQ0tBR0VDT05GSUdbYWlvXSA9ICItLWVuYWJsZS1saW51eC1haW8sLS1kaXNhYmxlLWxpbnV4LWFpbyxsaWJhaW8sIgorUEFDS0FHRUNPTkZJR1t4ZnNdID0gIi0tZW5hYmxlLXhmc2N0bCwtLWRpc2FibGUteGZzY3RsLHhmc3Byb2dzLCIKK1BBQ0tBR0VDT05GSUdbeGVuXSA9ICItLWVuYWJsZS14ZW4sLS1kaXNhYmxlLXhlbix4ZW4seGVuLWxpYnhlbnN0b3JlIHhlbi1saWJ4ZW5jdHJsIHhlbi1saWJ4ZW5ndWVzdCIKK1BBQ0tBR0VDT05GSUdbdm5jLXRsc10gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy10bHMsLS1kaXNhYmxlLXZuYy10bHMsIGdudXRscywiCitQQUNLQUdFQ09ORklHW3ZuYy1zYXNsXSA9ICItLWVuYWJsZS12bmMgLS1lbmFibGUtdm5jLXNhc2wsLS1kaXNhYmxlLXZuYy1zYXNsLGN5cnVzLXNhc2wsIgorUEFDS0FHRUNPTkZJR1t2bmMtanBlZ10gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy1qcGVnLC0tZGlzYWJsZS12bmMtanBlZyxqcGVnLCIKK1BBQ0tBR0VDT05GSUdbdm5jLXBuZ10gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy1wbmcsLS1kaXNhYmxlLXZuYy1wbmcsbGlicG5nLCIKK1BBQ0tBR0VDT05GSUdbbGliY3VybF0gPSAiLS1lbmFibGUtY3VybCwtLWRpc2FibGUtY3VybCxsaWJjdXJsLCIKK1BBQ0tBR0VDT05GSUdbbnNzXSA9ICItLWVuYWJsZS1zbWFydGNhcmQtbnNzLC0tZGlzYWJsZS1zbWFydGNhcmQtbnNzLG5zcywiCitQQUNLQUdFQ09ORklHW3V1aWRdID0gIi0tZW5hYmxlLXV1aWQsLS1kaXNhYmxlLXV1aWQsdXRpbC1saW51eCwiCitQQUNLQUdFQ09ORklHW2N1cnNlc10gPSAiLS1lbmFibGUtY3Vyc2VzLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcywiCitQQUNLQUdFQ09ORklHW2d0aytdID0gIi0tZW5hYmxlLWd0ayAtLWVuYWJsZS12dGUsLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtdnRlLGd0aysgbGlidnRlLCIKK1BBQ0tBR0VDT05GSUdbbGliY2FwLW5nXSA9ICItLWVuYWJsZS1jYXAtbmcsLS1kaXNhYmxlLWNhcC1uZyxsaWJjYXAtbmcsIgorUEFDS0FHRUNPTkZJR1tzc2gyXSA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIsIgorUEFDS0FHRUNPTkZJR1tsaWJ1c2JdID0gIi0tZW5hYmxlLWxpYnVzYiwtLWRpc2FibGUtbGlidXNiLGxpYnVzYjEiCitQQUNLQUdFQ09ORklHW2ZkdF0gPSAiLS1lbmFibGUtZmR0LC0tZGlzYWJsZS1mZHQsZHRjIgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICIsLGFsc2EtbGliIgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLW9wZW5nbCwtLWRpc2FibGUtb3BlbmdsLG1lc2EiCitQQUNLQUdFQ09ORklHW2x6b10gPSAiLS1lbmFibGUtbHpvLC0tZGlzYWJsZS1sem8sbHpvIgorUEFDS0FHRUNPTkZJR1tudW1hXSA9ICItLWVuYWJsZS1udW1hLC0tZGlzYWJsZS1udW1hLG51bWFjdGwiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS1lbmFibGUtZ251dGxzLC0tZGlzYWJsZS1nbnV0bHMsZ251dGxzIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2Fsc2EnLCAnLS1hdWRpby1kcnYtbGlzdD1vc3MsYWxzYScsICcnLCBkKX0iCisKKyMgUWVtdSB0YXJnZXQgd2lsbCBub3QgYnVpbGQgaW4gd29ybGQgYnVpbGQgZm9yIEFSTSBvciBNaXBzCitCUk9LRU5fcWVtdWFybSA9ICIxIgorQlJPS0VOX3FlbXVtaXBzNjQgPSAiMSIKK0JST0tFTl9xZW11bWlwcyA9ICIxIgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L1FlbXUtQXJtLXZlcnNhdGlsZXBiLUFkZC1tZW1vcnktc2l6ZS1jaGVja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZjZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA4OTZmYTAyYzI0MzQ3ZTZlOTI1OTgxMmNmZGExODdiMWQ2Y2E2MTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlhbmcgTHUgPGx1LmppYW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDEzIE5vdiAyMDEzIDEwOjM4OjA4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFFlbXU6QXJtOnZlcnNhdGlsZXBiOiBBZGQgbWVtb3J5IHNpemUgY2hlY2tpbmcKKworVGhlIG1hY2hpbmUgY2FuIG5vdCB3b3JrIHdpdGggbWVtb3J5IG92ZXIgMjU2TSwgc28gYWRkIGEgY2hlY2tpbmcKK2F0IHN0YXJ0dXAuIElmIHRoZSBtZW1vcnkgc2l6ZSBleGNlZWQgMjU2TSwganVzdCBzdG9wIGVtdWxhdGlvbiB0aGVuCit0aHJvdyBvdXQgd2FybmluZyBhYm91dCBtZW1vcnkgbGltaXRhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEppYW5nIEx1IDxsdS5qaWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIGl0IG9uIDIwMTQtMDEtMTUgZm9yIHJlYmFzaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGUgaXQgd2hlbiB1cGdyYWRlIHFlbXUgdG8gMi4yLjAKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgaHcvYXJtL3ZlcnNhdGlsZXBiLmMgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ody9hcm0vdmVyc2F0aWxlcGIuYyBiL2h3L2FybS92ZXJzYXRpbGVwYi5jCitpbmRleCA2YzY5ZjRlLi45Mjc4ZDkwIDEwMDY0NAorLS0tIGEvaHcvYXJtL3ZlcnNhdGlsZXBiLmMKKysrKyBiL2h3L2FybS92ZXJzYXRpbGVwYi5jCitAQCAtMjA0LDYgKzIwNCwxMyBAQCBzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUsIGludCBib2FyZF9pZCkKKyAgICAgICAgIGV4aXQoMSk7CisgICAgIH0KKworKyAgICBpZiAobWFjaGluZS0+cmFtX3NpemUgPiAoMjU2IDw8IDIwKSkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisrICAgICAgICAgICAgICAgICJxZW11OiBUb28gbXVjaCBtZW1vcnkgZm9yIHRoaXMgbWFjaGluZTogJWQgTUIsIG1heGltdW0gMjU2IE1CXG4iLAorKyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludClyYW1fc2l6ZSAvICgxIDw8IDIwKSkpOworKyAgICAgICAgZXhpdCgxKTsKKysgICAgfQorKworICAgICBjcHVvYmogPSBvYmplY3RfbmV3KG9iamVjdF9jbGFzc19nZXRfbmFtZShjcHVfb2MpKTsKKworICAgICAvKiBCeSBkZWZhdWx0IEFSTTExNzYgQ1BVcyBoYXZlIEVMMyBlbmFibGVkLiAgVGhpcyBib2FyZCBkb2VzIG5vdAorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OWY3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIHN1YnBhY2thZ2UgLXB0ZXN0IHdoaWNoIHJ1bnMgYWxsIHVuaXQgdGVzdCBjYXNlcyBmb3IgcWVtdS4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9NYWtlZmlsZSB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZSBiL3Rlc3RzL01ha2VmaWxlCitpbmRleCA4OGY3MTA1Li4zZjQwYjRiIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUKKysrKyBiL3Rlc3RzL01ha2VmaWxlCitAQCAtNDA1LDMgKzQwNSwxMiBAQCBhbGw6ICQoUUVNVV9JT1RFU1RTX0hFTFBFUlMteSkKKyAKKyAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzLyouZCkKKyAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzL2xpYnFvcy8qLmQpCisrCisrYnVpbGR0ZXN0LVRFU1RTOiAkKGNoZWNrLXVuaXQteSkKKysKKytydW50ZXN0LVRFU1RTOgorKwlmb3IgZiBpbiAkKGNoZWNrLXVuaXQteSk7IGRvIFwKKysJCW5mPSQkKGVjaG8gJCRmIHwgc2VkICdzL3Rlc3RzXC8vXC5cLy9nJyk7IFwKKysJCSQkbmY7IFwKKysJZG9uZQorKworLS0KKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2RjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorCitGcm9tIDlhYzA5NmQ4ZWNjZjJkNTZlY2U2NDYzMjBjMjgyYzgzNjlmODMzN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyOSBKdWwgMjAxNCAxODozNTo1OSArMDMwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IGZpeCBEYXJ3aW4gdGFyZ2V0IGRldGVjdGlvbgorCitmaXggRGFyd2luIHRhcmdldCBkZXRlY3Rpb24gZm9yIHFlbXUKK2Nyb3NzLWNvbXBpbGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMjgzYzcxYy4uMWM2NmExMSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDQ0LDYgKzQ0NCw4IEBAIGVsaWYgY2hlY2tfZGVmaW5lIF9fc3VuX18gOyB0aGVuCisgICB0YXJnZXRvcz0nU3VuT1MnCisgZWxpZiBjaGVja19kZWZpbmUgX19IQUlLVV9fIDsgdGhlbgorICAgdGFyZ2V0b3M9J0hhaWt1JworK2VsaWYgY2hlY2tfZGVmaW5lIF9fQVBQTEVfXyA7IHRoZW4KKysgIHRhcmdldG9zPSdEYXJ3aW4nCisgZWxzZQorICAgdGFyZ2V0b3M9YHVuYW1lIC1zYAorIGZpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODIyMTMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK0Zyb20gNjk3YTgzNGMzNWQxOTQ0N2I3ZGNkYjllMWQ5NDM0YmM2Y2UxN2MyMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTIgQXVnIDIwMTUgMTU6MTE6MzAgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3B1cy5jOiBBZGQgZXJyb3IgbWVzc2FnZXMgd2hlbiBxZW1pX2NwdV9raWNrX3RocmVhZCBmYWlscy4KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworQWRkIGN1c3RvbV9kZWJ1Zy5oIHdpdGggZnVuY3Rpb24gZm9yIHByaW50IGJhY2t0cmFjZSBpbmZvcm1hdGlvbi4KK1doZW4gcHRocmVhZF9raWxsIGZhaWxzIGluIHFlbXVfY3B1X2tpY2tfdGhyZWFkIGRpc3BsYXkgYmFja3RyYWNlIGFuZAorY3VycmVudCBjcHUgaW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjcHVzLmMgICAgICAgICB8ICA1ICsrKysrCisgY3VzdG9tX2RlYnVnLmggfCAyNCArKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY3VzdG9tX2RlYnVnLmgKKworZGlmZiAtLWdpdCBhL2NwdXMuYyBiL2NwdXMuYworaW5kZXggYTgyMmNlMy4uN2U0Nzg2ZSAxMDA2NDQKKy0tLSBhL2NwdXMuYworKysrIGIvY3B1cy5jCitAQCAtMTA4MCw2ICsxMDgwLDggQEAgc3RhdGljIHZvaWQgKnFlbXVfdGNnX2NwdV90aHJlYWRfZm4odm9pZCAqYXJnKQorICAgICByZXR1cm4gTlVMTDsKKyB9CisgCisrI2luY2x1ZGUgImN1c3RvbV9kZWJ1Zy5oIgorKworIHN0YXRpYyB2b2lkIHFlbXVfY3B1X2tpY2tfdGhyZWFkKENQVVN0YXRlICpjcHUpCisgeworICNpZm5kZWYgX1dJTjMyCitAQCAtMTA4OCw2ICsxMDkwLDkgQEAgc3RhdGljIHZvaWQgcWVtdV9jcHVfa2lja190aHJlYWQoQ1BVU3RhdGUgKmNwdSkKKyAgICAgZXJyID0gcHRocmVhZF9raWxsKGNwdS0+dGhyZWFkLT50aHJlYWQsIFNJR19JUEkpOworICAgICBpZiAoZXJyKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6JXM6ICVzIiwgX19mdW5jX18sIHN0cmVycm9yKGVycikpOworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDUFUgIyVkOlxuIiwgY3B1LT5jcHVfaW5kZXgpOworKyAgICAgICAgY3B1X2R1bXBfc3RhdGUoY3B1LCBzdGRlcnIsIGZwcmludGYsIDApOworKyAgICAgICAgYmFja3RyYWNlX3ByaW50KCk7CisgICAgICAgICBleGl0KDEpOworICAgICB9CisgI2Vsc2UgLyogX1dJTjMyICovCitkaWZmIC0tZ2l0IGEvY3VzdG9tX2RlYnVnLmggYi9jdXN0b21fZGVidWcuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYwMjllNDUKKy0tLSAvZGV2L251bGwKKysrKyBiL2N1c3RvbV9kZWJ1Zy5oCitAQCAtMCwwICsxLDI0IEBACisrI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2RlZmluZSBCQUNLVFJBQ0VfTUFYIDEyOAorK3N0YXRpYyB2b2lkIGJhY2t0cmFjZV9wcmludCh2b2lkKQorK3sKKysJaW50IG5mdW5jcyA9IDA7CisrCXZvaWQgKmJ1ZltCQUNLVFJBQ0VfTUFYXTsKKysJY2hhciAqKnN5bWJvbHM7CisrCWludCBpOworKworKwluZnVuY3MgPSBiYWNrdHJhY2UoYnVmLCBCQUNLVFJBQ0VfTUFYKTsKKysKKysJc3ltYm9scyA9IGJhY2t0cmFjZV9zeW1ib2xzKGJ1ZiwgbmZ1bmNzKTsKKysJaWYgKHN5bWJvbHMgPT0gTlVMTCkgeworKwkJZnByaW50ZihzdGRlcnIsICJiYWNrdHJhY2VfcHJpbnQgZmFpbGVkIHRvIGdldCBzeW1ib2xzIik7CisrCQlyZXR1cm47CisrCX0KKysKKysJZnByaW50ZihzdGRlcnIsICJCYWNrdHJhY2UgLi4uXG4iKTsKKysJZm9yIChpID0gMDsgaSA8IG5mdW5jczsgaSsrKQorKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgc3ltYm9sc1tpXSk7CisrCisrCWZyZWUoc3ltYm9scyk7CisrfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkZmZhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZC1maXgtcmFjZS1jb25kaXRpb24tYS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitGcm9tIGYzNTRiOTMzMzQwOGQ0MTE4NTRhZjA1OGNjNDRjY2VkYTYwYjQ0NzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDMgU2VwIDIwMTUgMTQ6MDc6MzQgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3B1cy5jOiBxZW11X211dGV4X2xvY2tfaW90aHJlYWQgZml4IHJhY2UgY29uZGl0aW9uIGF0IGNwdQorIHRocmVhZCBpbml0CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1doZW4gUUVNVSBzdGFydHMgdGhlIFJDVSB0aHJlYWQgZXhlY3V0ZXMgcWVtdV9tdXRleF9sb2NrX3RocmVhZAorY2F1c2luZyBlcnJvciAicWVtdTpxZW11X2NwdV9raWNrX3RocmVhZDogTm8gc3VjaCBwcm9jZXNzIiBhbmQgZXhpdHMuCisKK1RoaXMgaXNuJ3Qgb2NjdXIgZnJlcXVlbnRseSBidXQgaW4gZ2xpYmMgdGhlIHRocmVhZCBpZCBjYW4gZXhpc3QgYW5kCit0aGlzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdGhyZWFkIGlzIG9uIGFjdGl2ZS9ydW5uaW5nIHN0YXRlLiBJZiBpcworaW5zZXJ0ZWQgYSBzbGVlcCgxKSBhZnRlciBuZXd0aHJlYWQgYXNzaWdubWVudCBbMV0gdGhlIGlzc3VlIGFwcGVhcnMuCisKK1NvIG5vdCBtYWtlIGFzc3VtcHRpb24gdGhhdCB0aHJlYWQgZXhpc3QgaWYgZmlyc3RfY3B1LT50aHJlYWQgaXMgc2V0Cit0aGVuIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiBvZiBjcHUgdG8gY3JlYXRlZCB0aGF0IGlzIHNldCBpbnRvIGNwdQordGhyZWFkcyAoa3ZtLCB0Y2csIGR1bW15KS4KKworWzFdIGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0Lz9wPWdsaWJjLmdpdDthPWJsb2I7Zj1ucHRsL3B0aHJlYWRfY3JlYXRlLmM7aD1kMTBmNGVhODAwNGUxZDhmM2EyNjhiOTVjYzBmOGQ5M2I4ZDg5ODY3O2hiPUhFQUQjbDYyMQorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGNwdXMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwdXMuYyBiL2NwdXMuYworaW5kZXggN2U0Nzg2ZS4uMDVlNTQwMCAxMDA2NDQKKy0tLSBhL2NwdXMuYworKysrIGIvY3B1cy5jCitAQCAtMTE3MSw3ICsxMTcxLDcgQEAgdm9pZCBxZW11X211dGV4X2xvY2tfaW90aHJlYWQodm9pZCkKKyAgICAgICogVENHIGNvZGUgZXhlY3V0aW9uLgorICAgICAgKi8KKyAgICAgaWYgKCF0Y2dfZW5hYmxlZCgpIHx8IHFlbXVfaW5fdmNwdV90aHJlYWQoKSB8fAorLSAgICAgICAgIWZpcnN0X2NwdSB8fCAhZmlyc3RfY3B1LT50aHJlYWQpIHsKKysgICAgICAgICFmaXJzdF9jcHUgfHwgIWZpcnN0X2NwdS0+Y3JlYXRlZCkgeworICAgICAgICAgcWVtdV9tdXRleF9sb2NrKCZxZW11X2dsb2JhbF9tdXRleCk7CisgICAgICAgICBhdG9taWNfZGVjKCZpb3RocmVhZF9yZXF1ZXN0aW5nX211dGV4KTsKKyAgICAgfSBlbHNlIHsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzI2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2Rpc2FibGUtZ3JhYnMucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorV2hlbiB0aGUgcG9pbnRlciBlbnRlcnMgdGhlIFFlbXUgd2luZG93IGl0IGNhbGxzIFNETF9XTV9HcmFiSW5wdXQsIHdoaWNoIGNhbGxzCitYR3JhYlBvaW50ZXIgaW4gYSBidXN5bG9vcCB1bnRpbCBpdCByZXR1cm5zIEdyYWJTdWNjZXNzLiBIb3dldmVyIGlmIHRoZXJlJ3MgYWxyZWFkeQorYSBwb2ludGVyIGdyYWIgKHNjcmVlbiBpcyBsb2NrZWQsIGEgbWVudSBpcyBvcGVuKSB0aGVuIHFlbXUgd2lsbCBoYW5nIHVudGlsIHRoZQorZ3JhYiBjYW4gYmUgdGFrZW4uICBJbiB0aGUgc3BlY2lmaWMgY2FzZSBvZiBhIGhlYWRsZXNzIFggc2VydmVyIG9uIGFuIGF1dG9idWlsZGVyLCBvbmNlCit0aGUgc2NyZWVuc2F2ZXIgaGFzIGtpY2tlZCBpbiBhbnkgcWVtdSBpbnN0YW5jZSB0aGF0IGFwcGVhcnMgdW5kZXJuZWF0aCB0aGUKK3BvaW50ZXIgd2lsbCBoYW5nLgorCitJJ20gbm90IGVudGlyZWx5IHN1cmUgd2h5IHBvaW50ZXIgZ3JhYnMgYXJlIHJlcXVpcmVkICh0aGUgZG9jdW1lbnRhdGlvbgorZXhwbGljaXRseSBzYXlzIGl0IGRvZXNuJ3QgZG8gZ3JhYnMgd2hlbiB1c2luZyBhIHRhYmxldCwgd2hpY2ggd2UgYXJlKSBzbyB3cmFwCit0aGVtIGluIGEgY29uZGl0aW9uYWwgdGhhdCBjYW4gYmUgc2V0IGJ5IHRoZSBhdXRvYnVpbGRlciBlbnZpcm9ubWVudCwgcHJlc2VydmluZwordGhlIGN1cnJlbnQgZ3JhYmJpbmcgYmVoYXZpb3VyIGZvciBldmVyeW9uZSBlbHNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gNGIxOTg4ZWNiMDFhMTc4MjY5ZWMwNTEzYTc1ZjJlYzYyMGM3ZWY2YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDE4IFNlcCAyMDEzIDE0OjA0OjU0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNkbC5jOiBhbGxvdyB1c2VyIHRvIGRpc2FibGUgcG9pbnRlciBncmFicworCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogRXJpYyBCw6luYXJkIDxlcmljQGV1a3JlYS5jb20+CistLS0KKyB1aS9zZGwuYyB8IDEyICsrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdWkvc2RsLmMgYi91aS9zZGwuYworaW5kZXggMzlhNDJkNi4uOWI4YWJlNSAxMDA2NDQKKy0tLSBhL3VpL3NkbC5jCisrKysgYi91aS9zZGwuYworQEAgLTU5LDYgKzU5LDEwIEBAIHN0YXRpYyBTRExfQ3Vyc29yICpndWVzdF9zcHJpdGUgPSBOVUxMOworIHN0YXRpYyBTRExfUGl4ZWxGb3JtYXQgaG9zdF9mb3JtYXQ7Cisgc3RhdGljIGludCBzY2FsaW5nX2FjdGl2ZSA9IDA7Cisgc3RhdGljIE5vdGlmaWVyIG1vdXNlX21vZGVfbm90aWZpZXI7CisrI2lmbmRlZiBUcnVlCisrI2RlZmluZSBUcnVlIDEKKysjZW5kaWYKKytzdGF0aWMgZG9pbmdfZ3JhYnMgPSBUcnVlOworIAorIHN0YXRpYyB2b2lkIHNkbF91cGRhdGUoRGlzcGxheUNoYW5nZUxpc3RlbmVyICpkY2wsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK0BAIC0zODQsMTQgKzM4OCwxNiBAQCBzdGF0aWMgdm9pZCBzZGxfZ3JhYl9zdGFydCh2b2lkKQorICAgICAgICAgICAgIFNETF9XYXJwTW91c2UoZ3Vlc3RfeCwgZ3Vlc3RfeSk7CisgICAgIH0gZWxzZQorICAgICAgICAgc2RsX2hpZGVfY3Vyc29yKCk7CistICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT04pOworKyAgICBpZiAoZG9pbmdfZ3JhYnMpCisrICAgICAgU0RMX1dNX0dyYWJJbnB1dChTRExfR1JBQl9PTik7CisgICAgIGd1aV9ncmFiID0gMTsKKyAgICAgc2RsX3VwZGF0ZV9jYXB0aW9uKCk7CisgfQorIAorIHN0YXRpYyB2b2lkIHNkbF9ncmFiX2VuZCh2b2lkKQorIHsKKy0gICAgU0RMX1dNX0dyYWJJbnB1dChTRExfR1JBQl9PRkYpOworKyAgICBpZiAoZG9pbmdfZ3JhYnMpCisrICAgICAgU0RMX1dNX0dyYWJJbnB1dChTRExfR1JBQl9PRkYpOworICAgICBndWlfZ3JhYiA9IDA7CisgICAgIHNkbF9zaG93X2N1cnNvcigpOworICAgICBzZGxfdXBkYXRlX2NhcHRpb24oKTsKK0BAIC05MDksNiArOTE1LDggQEAgdm9pZCBzZGxfZGlzcGxheV9pbml0KERpc3BsYXlTdGF0ZSAqZHMsIGludCBmdWxsX3NjcmVlbiwgaW50IG5vX2ZyYW1lKQorICAgICAgKiBUaGlzIHJlcXVpcmVzIFNETCA+PSAxLjIuMTQuICovCisgICAgIHNldGVudigiU0RMX0RJU0FCTEVfTE9DS19LRVlTIiwgIjEiLCAxKTsKKyAKKysgICAgZG9pbmdfZ3JhYnMgPSAoZ2V0ZW52KCJRRU1VX0RPTlRfR1JBQiIpID09IE5VTEwpOworKworICAgICBmbGFncyA9IFNETF9JTklUX1ZJREVPIHwgU0RMX0lOSVRfTk9QQVJBQ0hVVEU7CisgICAgIGlmIChTRExfSW5pdCAoZmxhZ3MpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBpbml0aWFsaXplIFNETCglcykgLSBleGl0aW5nXG4iLAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9leGNsdWRlLXNvbWUtYXJtLUVBQkktb2Jzb2xldGUtc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxYmRhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsOTMgQEAKK1tQQVRDSF0gZXhjbHVkZSBzb21lIGFybSBFQUJJIG9ic29sZXRlIHN5c2NhbGxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitzb21lIHN5c2NhbGxzIGFyZSBvYnNvbGV0ZSBhbmQgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgRUFCSSwgZXhjbHVkZSB0aGVtIHRvCitmaXggdGhlIGJlbG93IGVycm9yOgorCUluIGZpbGUgaW5jbHVkZWQgZnJvbSBxZW11LXNlY2NvbXAuYzoxNjowOgorCXFlbXUtc2VjY29tcC5jOjI4Ojc6IGVycm9yOiAnX19OUl9zZWxlY3QnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhzZWxlY3QpLCAyNTIgfSwKKwkgICAgICAgIF4KKwlxZW11LXNlY2NvbXAuYzozNjo3OiBlcnJvcjogJ19fTlJfbW1hcCcgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKG1tYXApLCAyNDcgfSwKKwkgICAgICAgIF4KKwlxZW11LXNlY2NvbXAuYzo1Nzo3OiBlcnJvcjogJ19fTlJfZ2V0cmxpbWl0JyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVMoZ2V0cmxpbWl0KSwgMjQ1IH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6OTY6NzogZXJyb3I6ICdfX05SX3RpbWUnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6MTg1Ojc6IGVycm9yOiAnX19OUl9hbGFybScgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKGFsYXJtKSwgMjQxIH0sCisKK3BsZWFzZSByZWZlciBzb3VyY2UgZmlsZXM6CisJYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorb3Iga2VybmVsIGhlYWRlcjoKKwkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHFlbXUtc2VjY29tcC5jIHwgMTQgKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcWVtdS1zZWNjb21wLmMgYi9xZW11LXNlY2NvbXAuYworaW5kZXggY2FhOTI2ZS4uNWE3ODUwMiAxMDA2NDQKKy0tLSBhL3FlbXUtc2VjY29tcC5jCisrKysgYi9xZW11LXNlY2NvbXAuYworQEAgLTI1LDE1ICsyNSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKHRpbWVyX3NldHRpbWUpLCAyNTUgfSwKKyAgICAgeyBTQ01QX1NZUyh0aW1lcl9nZXR0aW1lKSwgMjU0IH0sCisgICAgIHsgU0NNUF9TWVMoZnV0ZXgpLCAyNTMgfSwKKysjaWYgIWRlZmluZWQoX19BUk1fRUFCSV9fKQorICAgICB7IFNDTVBfU1lTKHNlbGVjdCksIDI1MiB9LAorKyAgICB7IFNDTVBfU1lTKHRpbWUpLCAyNDUgfSwKKysgICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorKyAgICB7IFNDTVBfU1lTKGdldHJsaW1pdCksIDI0NSB9LAorKyAgICB7IFNDTVBfU1lTKG1tYXApLCAyNDcgfSwKKysgICAgeyBTQ01QX1NZUyhzb2NrZXRjYWxsKSwgMjUwIH0sCisrICAgIHsgU0NNUF9TWVMoaXBjKSwgMjQ1IH0sCisrI2VuZGlmCisgICAgIHsgU0NNUF9TWVMocmVjdmZyb20pLCAyNTEgfSwKKyAgICAgeyBTQ01QX1NZUyhzZW5kdG8pLCAyNTAgfSwKKy0gICAgeyBTQ01QX1NZUyhzb2NrZXRjYWxsKSwgMjUwIH0sCisgICAgIHsgU0NNUF9TWVMocmVhZCksIDI0OSB9LAorICAgICB7IFNDTVBfU1lTKGlvX3N1Ym1pdCksIDI0OSB9LAorICAgICB7IFNDTVBfU1lTKGJyayksIDI0OCB9LAorICAgICB7IFNDTVBfU1lTKGNsb25lKSwgMjQ3IH0sCistICAgIHsgU0NNUF9TWVMobW1hcCksIDI0NyB9LAorICAgICB7IFNDTVBfU1lTKG1wcm90ZWN0KSwgMjQ2IH0sCisgICAgIHsgU0NNUF9TWVMoZXhlY3ZlKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMob3BlbiksIDI0NSB9LAorQEAgLTQ4LDEzICs1NCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKGJpbmQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhsaXN0ZW4pLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhzZW1nZXQpLCAyNDUgfSwKKy0gICAgeyBTQ01QX1NZUyhpcGMpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhnZXR0aW1lb2ZkYXkpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhyZWFkbGluayksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGFjY2VzcyksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHByY3RsKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2lnbmFsZmQpLCAyNDUgfSwKKy0gICAgeyBTQ01QX1NZUyhnZXRybGltaXQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhzZXRfdGlkX2FkZHJlc3MpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhzdGF0ZnMpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyh1bmxpbmspLCAyNDUgfSwKK0BAIC05Myw3ICs5Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWVtdVNlY2NvbXBTeXNjYWxsIHNlY2NvbXBfd2hpdGVsaXN0W10gPSB7CisgICAgIHsgU0NNUF9TWVModGltZXMpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhleGl0KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoY2xvY2tfZ2V0dGltZSksIDI0NSB9LAorLSAgICB7IFNDTVBfU1lTKHRpbWUpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhyZXN0YXJ0X3N5c2NhbGwpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhwd3JpdGU2NCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKG5hbm9zbGVlcCksIDI0NSB9LAorQEAgLTE4Miw3ICsxODUsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKGxzdGF0NjQpLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhzZW5kZmlsZTY0KSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVModWdldHJsaW1pdCksIDI0MSB9LAorLSAgICB7IFNDTVBfU1lTKGFsYXJtKSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVMocnRfc2lnc3VzcGVuZCksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHJ0X3NpZ3F1ZXVlaW5mbyksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHJ0X3Rnc2lncXVldWVpbmZvKSwgMjQxIH0sCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYTZlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK2ZpeCBsaWJjYXAgaGVhZGVyIGlzc3VlIG9uIHNvbWUgZGlzdHJvCisKKzEsIFdoZW4gYnVpbGQgcWVtdS1uYXRpdmUgb24gU0xFRCAxMS4yLCB0aGVyZSBpcyBhbiBlcnJvcjoKKy4uLgorfCBJbiBmaWxlIGluY2x1ZGVkIGZyb20gL3Vzci9pbmNsdWRlL2JpdHMvc2lnY29udGV4dC5oOjI4LAorfCAgZnJvbSAvdXNyL2luY2x1ZGUvc2lnbmFsLmg6MzM5LAorfCAgZnJvbSAvYnVpbGRhcmVhMi90bXAvd29yay9pNjg2LWxpbnV4L3FlbXUtbmF0aXZlLzEuNC4wLXIwLworcWVtdS0xLjQuMC9pbmNsdWRlL3FlbXUtY29tbW9uLmg6NDIsCit8ICBmcm9tIGZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYzoyMzoKK3wgIC91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oOjI4OiBlcnJvcjogZXhwZWN0ZWQgc3BlY2lmaWVyLQorcXVhbGlmaWVyLWxpc3QgYmVmb3JlICdfX3U2NCcKK3wgIC91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oOjE5MTogZXJyb3I6IGV4cGVjdGVkIHNwZWNpZmllci0KK3F1YWxpZmllci1saXN0IGJlZm9yZSAnX191NjQnCisuLi4KKworMiwgVGhlIHZpcnRmcy1wcm94eS1oZWxwZXIuYyBpbmNsdWRlcyA8c3lzL2NhcGFiaWxpdHkuaD4gYW5kCitxZW11LWNvbW1vbi5oIGluIHNlcXVlbmNlLiBUaGUgaGVhZGVyIGluY2x1ZGUgbWFwIGlzOgorKGAtLT4nIHByZXNlbnRzIGBpbmNsdWRlJykKKy4uLgorInZpcnRmcy1wcm94eS1oZWxwZXIuYyIgLS0+IDxzeXMvY2FwYWJpbGl0eS5oPgorLi4uCisidmlydGZzLXByb3h5LWhlbHBlci5jIiAtLT4gInFlbXUtY29tbW9uLmgiIC0tPiA8c2lnbmFsLmg+IC0tPgorPGJpdHMvc2lnY29udGV4dC5oPiAtLT4gPGFzbS9zaWdjb250ZXh0Lmg+IC0tPiA8bGludXgvdHlwZXMuaD4gLS0+Cis8YXNtL3R5cGVzLmg+IC0tPiA8YXNtLWdlbmVyaWMvdHlwZXMuaD4gLS0+IDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgorLi4uCisKKzMsIFRoZSBidWcgaXMgZm91bmQgb24gU0xFRCAxMS4yIHg4Ni4gSW4gbGliY2FwIGhlYWRlciBmaWxlCisvdXNyL2luY2x1ZGUvc3lzL2NhcGFiaWxpdHkuaCwgaXQgZG9lcyBldmlsIHN0dWZmIGxpa2UgdGhpczoKKy4uLgorICAyNSAvKgorICAyNiAgKiBNYWtlIHN1cmUgd2UgY2FuIGJlIGluY2x1ZGVkIGZyb20gdXNlcmxhbmQgYnkgcHJldmVudGluZworICAyNyAgKiBjYXBhYmlsaXR5LmggZnJvbSBpbmNsdWRpbmcgb3RoZXIga2VybmVsIGhlYWRlcnMKKyAgMjggICovCisgIDI5ICNkZWZpbmUgX0xJTlVYX1RZUEVTX0gKKyAgMzAgI2RlZmluZSBfTElOVVhfRlNfSAorICAzMSAjZGVmaW5lIF9fTElOVVhfQ09NUElMRVJfSAorICAzMiAjZGVmaW5lIF9fdXNlcgorICAzMworICAzNCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKyAgMzUgdHlwZWRlZiBfX3UzMiBfX2xlMzI7CisuLi4KK1RoaXMgY29tcGxldGVseSBwcmV2ZW50cyBpbmNsdWRpbmcgL3Vzci9pbmNsdWRlL2xpbnV4L3R5cGVzLmguCitUaGUgYWJvdmUgYDxhc20vc2lnY29udGV4dC5oPiAtLT4gPGxpbnV4L3R5cGVzLmg+JyBpcyBwcmV2ZW50ZWQsCithbmQgJ19fdTY0JyBpcyBkZWZpbmVkIGluIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPi4KKworNCwgTW9kaWZ5IHZpcnRmcy1wcm94eS1oZWxwZXIuYyB0byBpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorbGFzdCB0byB3b3JrYXJvdW5kIHRoZSBpc3N1ZS4KKworaHR0cDovL3d3dy5saW51eHR2Lm9yZy9waXBlcm1haWwvdmRyLzIwMDktQXVndXN0LzAyMTE5NC5odG1sCitodHRwOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3BhdGNoLzEyNzQ4LworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYyB8ICAgIDcgKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMgYi9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMKKy0tLSBhL2ZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYworKysrIGIvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jCitAQCAtMTIsNyArMTIsNiBAQAorICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5c2xvZy5oPgorLSNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorICNpbmNsdWRlIDxzeXMvZnN1aWQuaD4KKyAjaW5jbHVkZSA8c3lzL3Zmcy5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KK0BAIC0yNiw3ICsyNSwxMSBAQAorICNpbmNsdWRlICJ2aXJ0aW8tOXAtbWFyc2hhbC5oIgorICNpbmNsdWRlICJody85cGZzL3ZpcnRpby05cC1wcm94eS5oIgorICNpbmNsdWRlICJmc2Rldi92aXJ0aW8tOXAtbWFyc2hhbC5oIgorLQorKy8qCisrICogSW5jbHVkZSB0aGlzIG9uZSBsYXN0IGR1ZSB0byBzb21lIHZlcnNpb25zIG9mIGl0IGJlaW5nIGJ1Z2d5OgorKyAqIGh0dHA6Ly93d3cubGludXh0di5vcmcvcGlwZXJtYWlsL3Zkci8yMDA5LUF1Z3VzdC8wMjExOTQuaHRtbAorKyAqLworKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorICNkZWZpbmUgUFJPR05BTUUgInZpcnRmcy1wcm94eS1oZWxwZXIiCisgCisgI2lmbmRlZiBYRlNfU1VQRVJfTUFHSUMKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wb3dlcnBjX3JvbS5iaW4gYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3Bvd2VycGNfcm9tLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDA0NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wb3dlcnBjX3JvbS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQyNWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorcWVtdTogQWRkIGFkZGl0aW9uIGVudmlyb25tZW50IHNwYWNlIHRvIGJvb3QgbG9hZGVyIHFlbXUtc3lzdGVtLW1pcHMgCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAtIE9FIHVzZXMgZGVlcCBwYXRocworCitJZiB5b3UgY3JlYXRlIGEgcHJvamVjdCB3aXRoIHZlcnkgbG9uZyBkaXJlY3RvcnkgbmFtZXMgbGlrZSAxMjggY2hhcmFjdGVycworZGVlcCBhbmQgdXNlIE5GUywgdGhlIGtlcm5lbCBhcmd1bWVudHMgd2lsbCBiZSB0cnVuY2F0ZWQuIFRoZSBrZXJuZWwgd2lsbAorYWNjZXB0IGxvbmdlciBzdHJpbmdzIHN1Y2ggYXMgMTAyNCBieXRlcywgYnV0IHRoZSBxZW11IGJvb3QgbG9hZGVyIGRlZmF1bHRlZAordG8gb25seSAyNTYgYnl0ZXMuIFRoaXMgcGF0Y2ggZXhwYW5kcyB0aGUgbGltaXQuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBody9taXBzL21pcHNfbWFsdGEuYyAgICB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2h3L21pcHMvbWlwc19tYWx0YS5jIGIvaHcvbWlwcy9taXBzX21hbHRhLmMKK2luZGV4IDlkNTIxY2MuLjE3YzAzOTEgMTAwNjQ0CistLS0gYS9ody9taXBzL21pcHNfbWFsdGEuYworKysrIGIvaHcvbWlwcy9taXBzX21hbHRhLmMKK0BAIC01Myw3ICs1Myw3IEBACisgCisgI2RlZmluZSBFTlZQX0FERFIJCTB4ODAwMDIwMDBsCisgI2RlZmluZSBFTlZQX05CX0VOVFJJRVMJIAkxNgorLSNkZWZpbmUgRU5WUF9FTlRSWV9TSVpFCSAJMjU2CisrI2RlZmluZSBFTlZQX0VOVFJZX1NJWkUJIAkxMDI0CisgCisgLyogSGFyZHdhcmUgYWRkcmVzc2VzICovCisgI2RlZmluZSBGTEFTSF9BRERSRVNTIDB4MWUwMDAwMDBVTEwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI4ZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9ydW4tcHRlc3QKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKyMKKyNUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biBxZW11IHRlc3Qgc3VpdGVzCitwdGVzdGRpcj0kKHB3ZCkKK2NkIHRlc3RzCisKK2V4cG9ydCBTUkNfUEFUSD0kcHRlc3RkaXIKK21ha2UgLWsgcnVudGVzdC1URVNUUyB8IHNlZCAnLzogT0svIHMvXi9QQVNTOiAvZycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzdlNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4LnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK1RoZSBzbWM5MWMxMTEuYyBkcml2ZXIgYXBwZWFycyB0byBoYXZlIHNldmVyYWwgaXNzdWVzLiBUaGUgY2FuX3JlY2VpdmUoKQorZnVuY3Rpb24gY2FuIHJldHVybiB0aGF0IHRoZSBkcml2ZXIgaXMgcmVhZHkgd2hlbiByeF9maWZvIGhhcyBub3QgYmVlbiAKK2ZyZWVkIHlldC4gVGhlcmUgaXMgYWxzbyBubyBzYW5pdHkgY2hlY2sgb2YgcnhfZmlmbygpIGluIF9yZWNlaXZlKCkgd2hpY2gKK2NhbiBsZWFkIHRvIGNvcnJ1cHRpb24gb2YgdGhlIHJ4X2ZpZm8gYXJyYXkuCisKK3JlbGVhc2VfcGFja2V0KCkgY2FuIGFsc28gY2FsbCBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKCkgYmVmb3JlIHJ4X2ZpZm8gCitoYXMgYmVlbiBjbGVhbmVkIHVwLCByZXN1bHRpbmcgaW4gY2FzZXMgd2hlcmUgcGFja2V0cyBhcmUgc3VibWl0dGVkCitmb3Igd2hpY2ggdGhlcmUgaXMgbm90IHlldCBhbnkgc3BhY2UuCisKK1RoaXMgcGF0Y2ggdGhlcmVmb3JlOgorCisqIGZpeGVzIHRoZSBsb2dpYyBpbiBjYW5fcmVjZWl2ZSgpCisqIGFkZHMgbG9naWMgdG8gcmVjZWl2ZSgpIGFzIGEgc2FuaXR5IGNoZWNrCisqIG1vdmVzIHRoZSBmbHVzaCgpIGNhbGxzIHRvIHRoZSBjb3JyZWN0IHBsYWNlcyB3aGVyZSBkYXRhIGlzIHJlYWR5CisgIHRvIGJlIHJlY2VpdmVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZGlzY3Vzc2lvbiBpbiBwcm9ncmVzcyBvbiBtYWlsaW5nIGxpc3RdCitSUCAyMDE1LzkvNworCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0xODUsNyArMTg1LDYgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHNtYworICAgICBzLT5hbGxvY2F0ZWQgJj0gfigxIDw8IHBhY2tldCk7CisgICAgIGlmIChzLT50eF9hbGxvYyA9PSAweDgwKQorICAgICAgICAgc21jOTFjMTExX3R4X2FsbG9jKHMpOworLSAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworIH0KKyAKKyAvKiBGbHVzaCB0aGUgVFggRklGTy4gICovCitAQCAtMjM3LDkgKzIzNiwxMSBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfZG9fdHgoc21jOTFjMTExX3N0CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICNlbmRpZgorLSAgICAgICAgaWYgKHMtPmN0ciAmIENUUl9BVVRPX1JFTEVBU0UpCisrICAgICAgICBpZiAocy0+Y3RyICYgQ1RSX0FVVE9fUkVMRUFTRSkgeworICAgICAgICAgICAgIC8qIFJhY2U/ICAqLworICAgICAgICAgICAgIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzLCBwYWNrZXRudW0pOworKyAgICAgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChzLT50eF9maWZvX2RvbmVfbGVuIDwgTlVNX1BBQ0tFVFMpCisgICAgICAgICAgICAgcy0+dHhfZmlmb19kb25lW3MtPnR4X2ZpZm9fZG9uZV9sZW4rK10gPSBwYWNrZXRudW07CisgICAgICAgICBxZW11X3NlbmRfcGFja2V0KHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYyksIHAsIGxlbik7CitAQCAtMzc5LDkgKzM4MCwxMSBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfd3JpdGViKHZvaWQgKm9wYXF1CisgICAgICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQocywgcy0+cnhfZmlmb1swXSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3BvcF9yeF9maWZvKHMpOworKyAgICAgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIDU6IC8qIFJlbGVhc2UuICAqLworICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQocywgcy0+cGFja2V0X251bSk7CisrICAgICAgICAgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgNjogLyogQWRkIHRvIFRYIEZJRk8uICAqLworICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcXVldWVfdHgocywgcy0+cGFja2V0X251bSk7CitAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlKE5ldENsaWUKKyAKKyAgICAgaWYgKChzLT5yY3IgJiBSQ1JfUlhFTikgPT0gMCB8fCAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSkKKyAgICAgICAgIHJldHVybiAxOworLSAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpCisrICAgIGlmICgocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpIHx8IChzLT5yeF9maWZvX2xlbiA9PSBOVU1fUEFDS0VUUykpCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgcmV0dXJuIDE7CisgfQorQEAgLTY3MSw2ICs2NzEsOCBAQCBzdGF0aWMgc3NpemVfdCBzbWM5MWMxMTFfcmVjZWl2ZShOZXRDbGllCisgICAgIC8qIFRPRE86IEZsYWcgb3ZlcnJ1biBhbmQgcmVjZWl2ZSBlcnJvcnMuICAqLworICAgICBpZiAocGFja2V0c2l6ZSA+IDIwNDgpCisgICAgICAgICByZXR1cm4gLTE7CisrICAgIGlmICAocy0+cnhfZmlmb19sZW4gPT0gTlVNX1BBQ0tFVFMpCisrICAgICAgICByZXR1cm4gLTE7ICAgIAorICAgICBwYWNrZXRudW0gPSBzbWM5MWMxMTFfYWxsb2NhdGVfcGFja2V0KHMpOworICAgICBpZiAocGFja2V0bnVtID09IDB4ODApCisgICAgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEyMjNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4MS5wYXRjaApAQCAtMCwwICsxLDg1IEBACitGcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGVwZXRlckBnbWFpbC5jb20+CitTdWJqZWN0OiBbUkZUIFBBVENIIHYxIDEvM10gbmV0OiBzbWM5MWMxMTE6IGd1YXJkIGZsdXNoX3F1ZXVlZF9wYWNrZXRzKCkgb24KKyBjYW5fcngoKQorRGF0ZTogVGh1LCAxMCBTZXAgMjAxNSAyMToyMzo0MyAtMDcwMAorCitDaGVjayB0aGF0IHRoZSBjb3JlIGNhbiBvbmNlIGFnYWluIHJlY2VpdmUgcGFja2V0cyBiZWZvcmUgYXNraW5nIHRoZQorbmV0IGxheWVyIHRvIGRvIGEgZmx1c2guIFRoaXMgd2lsbCBtYWtlIGl0IG1vcmUgY29udmVuaWVudCB0byBmbHVzaAorcGFja2V0cyB3aGVuIGFkZGluZyBuZXcgY29uZGl0aW9ucyB0byBjYW5fcmVjZWl2ZS4KKworQWRkIG1pc3NpbmcgaWYgYnJhY2VzIHdoaWxlIG1vdmluZyB0aGUgY2FuX3JlY2VpdmUoKSBjb3JlIGNvZGUuCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZS5wZXRlckBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKy0tLQorCisgaHcvbmV0L3NtYzkxYzExMS5jIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK0luZGV4OiBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi40LjAub3JpZy9ody9uZXQvc21jOTFjMTExLmMKKysrKyBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworQEAgLTEyNCw2ICsxMjQsMjQgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3VwZGF0ZShzbWM5MWMxMTFfcworICAgICBxZW11X3NldF9pcnEocy0+aXJxLCBsZXZlbCk7CisgfQorIAorK3N0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlKHNtYzkxYzExMV9zdGF0ZSAqcykKKyt7CisrICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpIHsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWM5MWMxMTFfZmx1c2hfcXVldWVkX3BhY2tldHMoc21jOTFjMTExX3N0YXRlICpzKQorK3sKKysgICAgaWYgKHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzKSkgeworKyAgICAgICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKysgICAgfQorK30KKysKKyAvKiBUcnkgdG8gYWxsb2NhdGUgYSBwYWNrZXQuICBSZXR1cm5zIDB4ODAgb24gZmFpbHVyZS4gICovCisgc3RhdGljIGludCBzbWM5MWMxMTFfYWxsb2NhdGVfcGFja2V0KHNtYzkxYzExMV9zdGF0ZSAqcykKKyB7CitAQCAtMTg1LDcgKzIwMyw3IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzbWMKKyAgICAgcy0+YWxsb2NhdGVkICY9IH4oMSA8PCBwYWNrZXQpOworICAgICBpZiAocy0+dHhfYWxsb2MgPT0gMHg4MCkKKyAgICAgICAgIHNtYzkxYzExMV90eF9hbGxvYyhzKTsKKy0gICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKysgICAgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHMpOworIH0KKyAKKyAvKiBGbHVzaCB0aGUgVFggRklGTy4gICovCitAQCAtNjM2LDE1ICs2NTQsMTEgQEAgc3RhdGljIHVpbnQzMl90IHNtYzkxYzExMV9yZWFkbCh2b2lkICpvcAorICAgICByZXR1cm4gdmFsOworIH0KKyAKKy1zdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShOZXRDbGllbnRTdGF0ZSAqbmMpCisrc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmVfbmMoTmV0Q2xpZW50U3RhdGUgKm5jKQorIHsKKyAgICAgc21jOTFjMTExX3N0YXRlICpzID0gcWVtdV9nZXRfbmljX29wYXF1ZShuYyk7CisgCistICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpCistICAgICAgICByZXR1cm4gMTsKKy0gICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKQorLSAgICAgICAgcmV0dXJuIDA7CistICAgIHJldHVybiAxOworKyAgICByZXR1cm4gc21jOTFjMTExX2Nhbl9yZWNlaXZlKHMpOworIH0KKyAKKyBzdGF0aWMgc3NpemVfdCBzbWM5MWMxMTFfcmVjZWl2ZShOZXRDbGllbnRTdGF0ZSAqbmMsIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCitAQCAtNzM5LDcgKzc1Myw3IEBAIHN0YXRpYyBjb25zdCBNZW1vcnlSZWdpb25PcHMgc21jOTFjMTExX20KKyBzdGF0aWMgTmV0Q2xpZW50SW5mbyBuZXRfc21jOTFjMTExX2luZm8gPSB7CisgICAgIC50eXBlID0gTkVUX0NMSUVOVF9PUFRJT05TX0tJTkRfTklDLAorICAgICAuc2l6ZSA9IHNpemVvZihOSUNTdGF0ZSksCistICAgIC5jYW5fcmVjZWl2ZSA9IHNtYzkxYzExMV9jYW5fcmVjZWl2ZSwKKysgICAgLmNhbl9yZWNlaXZlID0gc21jOTFjMTExX2Nhbl9yZWNlaXZlX25jLAorICAgICAucmVjZWl2ZSA9IHNtYzkxYzExMV9yZWNlaXZlLAorIH07CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMThhZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4Mi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGVwZXRlckBnbWFpbC5jb20+CitYLUdvb2dsZS1PcmlnaW5hbC1Gcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorVG86IHFlbXUtZGV2ZWxAbm9uZ251Lm9yZworQ2M6IHBldGVyLm1heWRlbGxAbGluYXJvLm9yZywgcmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZworU3ViamVjdDogW1JGVCBQQVRDSCB2MSAyLzNdIG5ldDogc21jOTFjMTExOiBnYXRlIGNhbl9yZWNlaXZlKCkgb24gcnggRklGTworIGhhdmluZyBhIHNsb3QKK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMjE6MjM6NTcgLTA3MDAKKworUmV0dXJuIGZhbHNlIGZyb20gY2FuX3JlY2VpdmUoKSB3aGVuIHRoZSBGSUZPIGRvZXNuJ3QgaGF2ZSBhIGZyZWUgUlgKK3Nsb3QuIFRoaXMgZml4ZXMgYSBidWcgaW4gdGhlIGN1cnJlbnQgY29kZSB3aGVyZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlcgoraXMgZnJlZWQgYmVmb3JlIHRoZSBmaWZvIHBvcCwgdHJpZ2dlcmluZyBhIHByZW1hdHVyZSBmbHVzaCBvZiBxdWV1ZWQgUlgKK3BhY2tldHMuIEl0IGFsc28gd2lsbCBoYW5kbGUgYSBjb3JuZXIgY2FzZSwgd2hlcmUgdGhlIGd1ZXN0IG1hbnVhbGx5CitmcmVlcyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBiZWZvcmUgcG9wcGluZyB0aGUgcnggRklGTyAoaGVuY2UgaXQgaXMgbm90Citlbm91Z2ggdG8ganVzdCBkZWxheSB0aGUgZmx1c2hfcXVldWVkX3BhY2tldHMoKSkuCisKK1JlcG9ydGVkLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK1NpZ25lZC1vZmYtYnk6IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZS5wZXRlckBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCistLS0KKworIGh3L25ldC9zbWM5MWMxMTEuYyB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMTI5LDcgKzEyOSw4IEBAIHN0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlKHNtYzkxYzEKKyAgICAgaWYgKChzLT5yY3IgJiBSQ1JfUlhFTikgPT0gMCB8fCAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSkgeworICAgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKy0gICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKSB7CisrICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSB8fAorKyAgICAgICAgcy0+cnhfZmlmb19sZW4gPT0gTlVNX1BBQ0tFVFMpIHsKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgICAgIHJldHVybiAxOworQEAgLTE4Miw2ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfcG9wX3J4X2ZpZm8oc21jOTFjCisgICAgIH0gZWxzZSB7CisgICAgICAgICBzLT5pbnRfbGV2ZWwgJj0gfklOVF9SQ1Y7CisgICAgIH0KKysgICAgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHMpOworICAgICBzbWM5MWMxMTFfdXBkYXRlKHMpOworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODY1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb206IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZXBldGVyQGdtYWlsLmNvbT4KK1RvOiBxZW11LWRldmVsQG5vbmdudS5vcmcKK0NjOiBwZXRlci5tYXlkZWxsQGxpbmFyby5vcmcsIHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmcKK1N1YmplY3Q6IFtSRlQgUEFUQ0ggdjEgMy8zXSBuZXQ6IHNtYzkxYzExMTogZmx1c2ggcGFja2V0cyBvbiBSQ1IgcmVnaXN0ZXIKKyBjaGFuZ2VzCitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDIxOjI0OjEyIC0wNzAwCisKK1RoZSBTT0ZUX1JTVCBvciBSWEVOIGluIHRoZSBjb250cm9sIHJlZ2lzdGVyIGNhbiBiZSB1c2VkIGFzIGEgY29uZGl0aW9uCit0byB1bmJsb2NrIHRoZSBuZXQgbGF5ZXIgdmlhIGNhbl9yZWNlaXZlKCkuIFNvIGNoZWNrIGZvciBwb3NzaWJsZQorZmx1c2hlcyBvbiBSQ1IgY2hhbmdlcy4gVGhpcyB3aWxsIGRyb3AgYWxsIHBlbmRpbmcgcGFja2V0cyBvbiBzb2Z0CityZXNldCBvciBkaXNhYmxlIHdoaWNoIGlzIHRoZSBmdW5jdGlvbmFsIGludGVudCBvZiB0aGUgY2FuX3JlY2VpdmUoKQorbG9naWMuCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZS5wZXRlckBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCistLS0KKworIGh3L25ldC9zbWM5MWMxMTEuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0zMzEsNiArMzMxLDcgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3dyaXRlYih2b2lkICpvcGFxdQorICAgICAgICAgICAgIGlmIChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpIHsKKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3Jlc2V0KERFVklDRShzKSk7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICBjYXNlIDEwOiBjYXNlIDExOiAvKiBSUENSICovCisgICAgICAgICAgICAgLyogSWdub3JlZCAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS93YWNvbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvd2Fjb20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwNmFhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvd2Fjb20ucGF0Y2gKQEAgLTAsMCArMSwxMzAgQEAKK1RoZSBVU0Igd2Fjb20gZGV2aWNlIGlzIG1pc3NpbmcgYSBISUQgZGVzY3JpcHRvciB3aGljaCBjYXVzZXMgaXQKK3RvIGZhaWwgdG8gb3BlcmF0ZSB3aXRoIHJlY2VudCBrZXJuZWxzIChlLmcuIDMuMTcpLgorCitUaGlzIHBhdGNoIGFkZHMgYSBISUQgZGVzcmlwdG9yIHRvIHRoZSBkZXZpY2UsIGJhc2VkIHVwb24gb25lIGZyb20gCityZWFsIHdjb20gZGV2aWNlLgorCitTaWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKzIwMTQvMTEvMjcKKworSW5kZXg6IHFlbXUtMi4xLjAvaHcvdXNiL2Rldi13YWNvbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjEuMC5vcmlnL2h3L3VzYi9kZXYtd2Fjb20uYwkyMDE0LTA4LTAxIDE1OjEyOjE3LjAwMDAwMDAwMCArMDEwMAorKysrIHFlbXUtMi4xLjAvaHcvdXNiL2Rldi13YWNvbS5jCTIwMTQtMTAtMTIgMTI6MTM6MzAuNTQwMzA2MDQyICswMTAwCitAQCAtNjgsNiArNjgsODkgQEAKKyAgICAgW1NUUl9TRVJJQUxOVU1CRVJdICAgICA9ICIxIiwKKyB9OworIAorK3N0YXRpYyBjb25zdCB1aW50OF90IHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvcltdID0geworKyAgICAweDA1LCAweDAxLAkJLyogVXNhZ2UgUGFnZSAoR2VuZXJpYyBEZXNrdG9wKSAqLworKyAgICAweDA5LCAweDAyLAkJLyogVXNhZ2UgKE1vdXNlKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDEsCQkvKiAgIFJlcG9ydCBJRCAoMSkgKi8gCisrICAgIDB4MDksIDB4MDEsCQkvKiAgIFVzYWdlIChQb2ludGVyKSAqLworKyAgICAweGExLCAweDAwLAkJLyogICBDb2xsZWN0aW9uIChQaHlzaWNhbCkgKi8KKysgICAgMHgwNSwgMHgwOSwJCS8qICAgICBVc2FnZSBQYWdlIChCdXR0b24pICovCisrICAgIDB4MTksIDB4MDEsCQkvKiAgICAgVXNhZ2UgTWluaW11bSAoMSkgKi8KKysgICAgMHgyOSwgMHgwNSwJCS8qICAgICBVc2FnZSBNYXhpbXVtICg1KSAqLworKyAgICAweDE1LCAweDAwLAkJLyogICAgIExvZ2ljYWwgTWluaW11bSAoMCkgKi8KKysgICAgMHgyNSwgMHgwMSwJCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDEpICovCisrICAgIDB4OTUsIDB4MDUsCQkvKiAgICAgUmVwb3J0IENvdW50ICg1KSAqLworKyAgICAweDc1LCAweDAxLAkJLyogICAgIFJlcG9ydCBTaXplICgxKSAqLworKyAgICAweDgxLCAweDAyLAkJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4OTUsIDB4MDEsCQkvKiAgICAgUmVwb3J0IENvdW50ICgxKSAqLworKyAgICAweDc1LCAweDAzLAkJLyogICAgIFJlcG9ydCBTaXplICgzKSAqLworKyAgICAweDgxLCAweDAxLAkJLyogICAgIElucHV0IChDb25zdGFudCkgKi8KKysgICAgMHgwNSwgMHgwMSwJCS8qICAgICBVc2FnZSBQYWdlIChHZW5lcmljIERlc2t0b3ApICovCisrICAgIDB4MDksIDB4MzAsCQkvKiAgICAgVXNhZ2UgKFgpICovCisrICAgIDB4MDksIDB4MzEsCQkvKiAgICAgVXNhZ2UgKFkpICovCisrICAgIDB4MTUsIDB4ODEsCQkvKiAgICAgTG9naWNhbCBNaW5pbXVtICgtMTI3KSAqLworKyAgICAweDI1LCAweDdmLAkJLyogICAgIExvZ2ljYWwgTWF4aW11bSAoMTI3KSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDAyLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMikgKi8KKysgICAgMHg4MSwgMHgwNiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIFJlbGF0aXZlKSAqLworKyAgICAweGMwLAkJLyogICBFbmQgQ29sbGVjdGlvbiAqLworKyAgICAweGMwLAkJLyogRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHgwNSwgMHgwZCwJCS8qIFVzYWdlIFBhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4YTEsIDB4MDEsCQkvKiBDb2xsZWN0aW9uIChBcHBsaWNhdGlvbikgKi8KKysgICAgMHg4NSwgMHgwMiwJCS8qICAgUmVwb3J0IElEICgyKSAqLyAKKysgICAgMHhhMSwgMHgwMCwJCS8qICAgQ29sbGVjdGlvbiAoUGh5c2ljYWwpICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsICAgLyogICBVc2FnZSBQYWdlIChWZW5kb3IgMHhmZjAwKSAqLworKyAgICAweDA5LCAweDAxLCAJLyogICBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDE1LCAweDAwLCAJLyogICAgIExvZ2ljYWwgTWluaW11bSAoMCkgKi8KKysgICAgMHgyNiwgMHhmZiwgMHgwMCwJLyogICAgIExvZ2ljYWwgTWF4aW11bSAoMjU1KSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDA4LAkJLyogICAgIFJlcG9ydCBDb3VudCAoOCkgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweGMwLCAJCS8qICAgRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHg4NSwgMHgwMiwgCS8qICAgUmVwb3J0IElEICgyKSAqLyAKKysgICAgMHg5NSwgMHgwMSwJCS8qICAgUmVwb3J0IENvdW50ICgxKSAqLworKyAgICAweGIxLCAweDAyLAkJLyogICBGRUFUVVJFICgyKSAqLworKyAgICAweGMwLAkJLyogRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHgwNiwgMHgwMCwgMHhmZiwJLyogVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4YTEsIDB4MDEsCQkvKiBDb2xsZWN0aW9uIChBcHBsaWNhdGlvbikgKi8KKysgICAgMHg4NSwgMHgwMiwgICAJLyogICBSZXBvcnQgSUQgKDIpICovIAorKyAgICAweDA1LCAweDBkLAkJLyogICBVc2FnZSBQYWdlIChEaWdpdGl6ZXIpICAqLworKyAgICAweDA5LCAweDIyLCAJLyogICBVc2FnZSAoRmluZ2VyKSAqLworKyAgICAweGExLCAweDAwLCAgCS8qICAgQ29sbGVjdGlvbiAoUGh5c2ljYWwpICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsCS8qICAgVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qICAgICBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDE1LCAweDAwLCAJLyogICAgIExvZ2ljYWwgTWluaW11bSAoMCkgKi8KKysgICAgMHgyNiwgMHhmZiwgMHgwMCwgIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4NzUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IFNpemUgKDgpICovCisrICAgIDB4OTUsIDB4MDIsCQkvKiAgICAgUmVwb3J0IENvdW50ICgyKSAqLworKyAgICAweDgxLCAweDAyLCAJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4MDUsIDB4MDEsCQkvKiAgICAgVXNhZ2UgUGFnZSAoR2VuZXJpYyBEZXNrdG9wKSAqLworKyAgICAweDA5LCAweDMwLAkJLyogICAgIFVzYWdlIChYKSAqLworKyAgICAweDM1LCAweDAwLCAJLyogICAgIFBoeXNpY2FsIE1pbmltdW0gKi8KKysgICAgMHg0NiwgMHhlMCwgMHgyZSwJLyogICAgIFBoeXNpY2FsIE1heGltdW0gKi8KKysgICAgMHgyNiwgMHhlMCwgMHgwMSwgICAvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4NzUsIDB4MTAsCQkvKiAgICAgUmVwb3J0IFNpemUgKDE2KSAqLworKyAgICAweDk1LCAweDAxLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDA5LCAweDMxLAkJLyogICAgIFVzYWdlIChZKSAqLworKyAgICAweDQ2LCAweDQwLCAweDFmLCAJLyogICAgIFBoeXNpY2FsIE1heGltdW0gKi8KKysgICAgMHgyNiwgMHg0MCwgMHgwMSwgCS8qICAgICBMb2dpY2FsIE1heGltdW0gKi8KKysgICAgMHg4MSwgMHgwMiwgCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLAkvKiAgICAgVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwgCS8qICAgICBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDI2LCAweGZmLCAweDAwLCAgCS8qICAgICBMb2dpY2FsIE1heGltdW0gKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwZCwJCS8qICAgICBSZXBvcnQgQ291bnQgKDEzKSAqLworKyAgICAweDgxLCAweDAyLAkJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4YzAsCQkvKiAgIEVuZCBDb2xsZWN0aW9uICovIAorKyAgICAweGMwLAkJLyogRW5kIENvbGxlY3Rpb24gKi8KKyt9OworKworKworIHN0YXRpYyBjb25zdCBVU0JEZXNjSWZhY2UgZGVzY19pZmFjZV93YWNvbSA9IHsKKyAgICAgLmJJbnRlcmZhY2VOdW1iZXIgICAgICAgICAgICAgID0gMCwKKyAgICAgLmJOdW1FbmRwb2ludHMgICAgICAgICAgICAgICAgID0gMSwKK0BAIC04NSw3ICsxNjgsNyBAQAorICAgICAgICAgICAgICAgICAweDAwLCAgICAgICAgICAvKiAgdTggIGNvdW50cnlfY29kZSAqLworICAgICAgICAgICAgICAgICAweDAxLCAgICAgICAgICAvKiAgdTggIG51bV9kZXNjcmlwdG9ycyAqLworICAgICAgICAgICAgICAgICAweDIyLCAgICAgICAgICAvKiAgdTggIHR5cGU6IFJlcG9ydCAqLworLSAgICAgICAgICAgICAgICAweDZlLCAwLCAgICAgICAvKiAgdTE2IGxlbiAqLworKyAgICAgICAgICAgICAgICBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKSwgMCwgLyogIHUxNiBsZW4gKi8KKyAgICAgICAgICAgICB9LAorICAgICAgICAgfSwKKyAgICAgfSwKK0BAIC0yNjUsNiArMzUwLDE1IEBACisgICAgIH0KKyAKKyAgICAgc3dpdGNoIChyZXF1ZXN0KSB7CisrICAgIGNhc2UgSW50ZXJmYWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisrICAgICAgICBzd2l0Y2ggKHZhbHVlID4+IDgpIHsKKysgICAgICAgIGNhc2UgMHgyMjoKKysgICAgICAgICAgICAgICAgbWVtY3B5KGRhdGEsIHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvciwKKysgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IpKTsKKysgICAgICAgICAgICAgICAgcC0+YWN0dWFsX2xlbmd0aCA9IHNpemVvZihxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgV0FDT01fU0VUX1JFUE9SVDoKKyAgICAgICAgIGlmIChzLT5tb3VzZV9ncmFiYmVkKSB7CisgICAgICAgICAgICAgcWVtdV9yZW1vdmVfbW91c2VfZXZlbnRfaGFuZGxlcihzLT5laF9lbnRyeSk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWIxNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjQuMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHFlbXUuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ0MWMyOGQyY2Y4NmUxNWEzN2ZhNDdlMTVhNzJmYmFjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO2VuZGxpbmU9MjQ7bWQ1PWMwNGRlZjdhZTM4ODUwZTdkM2VmNTQ4NTg4MTU5OTEzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NtYzkxYzExMV9maXgxLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbWM5MWMxMTFfZml4Mi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc21jOTFjMTExX2ZpeDMucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJX3ByZXBlbmQgPSAiaHR0cDovL3dpa2kucWVtdS1wcm9qZWN0Lm9yZy9kb3dubG9hZC8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjE4NmVlODE5NDE0MGE0ODRhNDU1ZjhlM2M3NDU4OWY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyYjBiOTkxYmJjYzU0MDY2M2EwMTllMWU4YzRmNzE0MDUzYjY5MWRkYTMyYzliOWVlODBiMjVmMzY3ZTY2MjAiCisKK0NPTVBBVElCTEVfSE9TVF9jbGFzcy10YXJnZXRfbWlwczY0ID0gIm51bGwiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgUHJldmVudCBRQSB3YXJuaW5ncyBhYm91dCBpbnN0YWxsZWQgJHtsb2NhbHN0YXRlZGlyfS9ydW4KKyAgICBpZiBbIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biBdOyB0aGVuIHJtZGlyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bjsgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRjNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiUUVNVSB3cmFwcGVyIHNjcmlwdCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBxZW11CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisKKwllY2hvICIjIS9iaW4vc2giID4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKKwlxZW11X2JpbmFyeT0ke0BxZW11X3RhcmdldF9iaW5hcnkoZCl9CisJcWVtdV9vcHRpb25zPScke1FFTVVfT1BUSU9OU30nCisJZWNobyAiJHFlbXVfYmluYXJ5ICRxZW11X29wdGlvbnMgXCJcJEBcIiIgPj4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKKwlmYWxsYmFja19xZW11X2Jpbj0KKwljYXNlICRxZW11X2JpbmFyeSBpbgorCQkicWVtdS1pMzg2IikKKwkJCWZhbGxiYWNrX3FlbXVfYmluPXFlbXUteDg2XzY0CisJCQk7OworCQkicWVtdS14ODZfNjQiKQorCQkJZmFsbGJhY2tfcWVtdV9iaW49cWVtdS1pMzg2CisJCQk7OworCQkqKQorCQkJOzsKKwllc2FjCisKKwlpZiBbIC1uICIkZmFsbGJhY2tfcWVtdV9iaW4iIF07IHRoZW4KKworCQljYXQgPj4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIgPDwgRU9GCityYz1cJD8KK2lmIFsgXCRyYyA9IDI1NSBdOyB0aGVuCisJJGZhbGxiYWNrX3FlbXVfYmluICJcJEAiCisJcmM9XCQ/CitmaQorZXhpdCBcJHJjCitFT0YKKworCWZpCisKKwljaG1vZCAreCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9xZW11d3JhcHBlcgorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInFlbXV3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworcWVtdXdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNGIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlLmluYwpAQCAtMCwwICsxLDE4IEBACitSREVQRU5EU18ke1BOfSA9ICJkaWZmc3RhdC1uYXRpdmUgcGF0Y2gtbmF0aXZlIGJ6aXAyLW5hdGl2ZSB1dGlsLWxpbnV4LW5hdGl2ZSIKKworSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorCitpbmhlcml0IG5hdGl2ZQorCitQQVRDSFRPT0wgPSAicGF0Y2giCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW5scyIKKworZG9fY29uZmlndXJlICgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIER1bW15IHF1aWx0cmMgZmlsZSBmb3IgcGF0Y2guYmJjbGFzcworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vcXVpbHRyYworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzdkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjQuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHF1aWx0LmluYworcmVxdWlyZSBxdWlsdC1uYXRpdmUuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdiMzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYwpAQCAtMCwwICsxLDYyIEBACitTVU1NQVJZID0gIlRvb2wgZm9yIHdvcmtpbmcgd2l0aCBzZXJpZXMgb2YgcGF0Y2hlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0LyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9xdWlsdC9xdWlsdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICBmaWxlOi8vaW5zdGFsbC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmMwMzEwZGI1ODY4YTA4NzNkNjAyZDQzMzJhNzZkNDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzRiZmQzMjgyMjE0YTI4OGU4ZDNlOTIxYWU0ZDUyZTczZTI0YzRmZWFkNzJiNTQ0Njc1MmFkZWU5OWE3YWZmZCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0CisKK0VYVFJBX09FQ09ORl9kYXJ3aW4gKz0gIi0td2l0aG91dC1kYXRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1nZXRvcHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitQQUNLQUdFUyArPSAiZ3VhcmRzIGd1YXJkcy1kb2MiCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9ICR7ZGF0YWRpcn0vcXVpbHQgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3F1aWx0ICR7bGliZGlyfS9xdWlsdCIKK0ZJTEVTX2d1YXJkcyA9ICIke2JpbmRpcn0vZ3VhcmRzIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfS9tYW4xL3F1aWx0LjEgJHtkb2NkaXJ9LyR7QlBOfSIKK0ZJTEVTX2d1YXJkcy1kb2MgPSAiJHttYW5kaXJ9L21hbjEvZ3VhcmRzLjEiCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCisKK0VYVFJBX09FX01BS0VfQVJHU19kYXJ3aW4gPz0gIiIKK0VYVFJBX09FX01BS0VfQVJHUyA/PSAiQlVJTERfUk9PVD0ke0R9IgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9CQVNIPS9iaW4vYmFzaCIKKworIyBxdWlsdCBpZ25vcmVzIERFU1RESVIKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJHtFWFRSQV9PRV9NQUtFX0FSR1N9IGluc3RhbGwKKwkjIGNsZWFudXAgdW5wYWNrYWdlZCBmaWxlcworCXJtIC1yZiAke0R9LyR7ZGF0YWRpcn0vZW1hY3MKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIGJpbi9wYXRjaC13cmFwcGVyIHRlc3QvLmRlcGVuZAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXRhciAtY2YgLSBiaW4vIC0tZXhjbHVkZSBcKi5pbiB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWNmIC0gY29tcGF0LyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jZiAtIHF1aWx0LyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jZiAtIHRlc3QvIC0tZXhjbHVkZSBtYWlsLnRlc3QgLS1leGNsdWRlIGRlbGV0ZS50ZXN0IHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAibWFrZSBmaWxlIHNlZCBnYXdrIGRpZmZ1dGlscyBmaW5kdXRpbHMgZWQgcGVybCBcCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgXAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybC1tb2R1bGUtcG9zaXggcGVybC1tb2R1bGUtZmlsZS10ZW1wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXRleHQtcGFyc2V3b3JkcyBwZXJsLW1vZHVsZS1vdmVybG9hZGluZyBcCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNoIHV0aWwtbGludXgtZ2V0b3B0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiM2FjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorUEFUSCA6PSAgICAgICAgICQoQ1VSRElSKS9iaW46JChDVVJESVIpL2NvbXBhdDokKFBBVEgpCitRVUlMVF9ESVIgOj0gICAgJChDVVJESVIpL3F1aWx0CitRVUlMVFJDIDo9ICAgICAgJChDVVJESVIpL3Rlc3QvdGVzdC5xdWlsdHJjCitleHBvcnQgUVVJTFRfRElSIFFVSUxUUkMKK0NIRUNLX0VOViA6PSBQPXBhdGNoZXMvOyBfUD0uLi9wYXRjaGVzLzsgZXhwb3J0IFAgX1AKKy1pbmNsdWRlIHRlc3QvLmRlcGVuZAorCitjaGVjay0lIDogdGVzdC8lLnRlc3QKKwlATEFORz1DOyBMQ19BTEw9QzsgXAorCWV4cG9ydCBMQU5HIExDX0FMTDsgXAorCSQoQ0hFQ0tfRU5WKTsgXAorCWNkICQoPEQpOyBcCisJLi9ydW4gLXEgJCg8RikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9hY2xvY2FsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2FjbG9jYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNDQyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9hY2xvY2FsLnBhdGNoCkBAIC0wLDAgKzEsMTI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIHRoZSBhY2xvY2FsLm00IGFzIGFjaW5jbHVkZS5tNAorCitJbmRleDogcXVpbHQtMC40Ny9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBxdWlsdC0wLjQ3L2FjaW5jbHVkZS5tNAkyMDA2LTEwLTEwIDE3OjA1OjU2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMTkgQEAKKytkbmwgQWxsb3cgY29uZmlndXJlIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyBiaW5hcnkKKytkbmwgMTogRW52aXJvbm1lbnQgdmFyaWFibGUKKytkbmwgMjogYmluYXJ5IG5hbWUKKytkbmwgMzogb3B0aW9uYWwgbGlzdCBvZiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtZXMKKytkbmwgNDogb3B0aW9uYWwgbGlzdCBvZiBhZGRpdGlvbmFsIHNlYXJjaCBkaXJlY3RvcmllcworK0FDX0RFRlVOKFtRVUlMVF9DT01QQVRfUFJPR19QQVRIXSxbCisrICBtNF9kZWZpbmUoW2ludGVybmFsXyQyX2NtZF0sW2VzeXNjbWQobHMgY29tcGF0LyQyLmluIDI+L2Rldi9udWxsKV0pCisrCisrICBBQ19BUkdfV0lUSCgkMiwgQUNfSEVMUF9TVFJJTkcoCisrICAgIFstLXdpdGgtJDJdLCBbbmFtZSBvZiB0aGUgJDIgZXhlY3V0YWJsZSB0byB1c2VdCisrICAgICAgICAgICAgICAgICBtNF9pZihpbnRlcm5hbF8kMl9jbWQsW10sW10sWyAodXNlIC0td2l0aG91dC0kMgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdXNlIGFuIGludGVybmFsIG1lY2hhbmlzbSldKSksCisrICBbCisrICAgIGlmIHRlc3QgeCIkd2l0aHZhbCIgPSB4bm9uZTsgdGhlbgorKyAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCBjb25maWd1cmUgYXJndW1lbnQuICB1c2UgLS13aXRob3V0LSQyXSkKKysgICAgZmkKKysgICAgaWYgdGVzdCB4IiR3aXRodmFsIiAhPSB4bm87IHRoZW4KKysgICAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yICQyKQorKyAgICAgICQxPSIkd2l0aHZhbCIKKysgICAgICBpZiB0ZXN0IC1lICIkJDEiOyB0aGVuCisrCWlmIHRlc3QgISAtZiAiJCQxIiAtYSAhIC1oICIkJDEiIHx8IHRlc3QgISAteCAiJCQxIjsgdGhlbgorKwkgIEFDX01TR19FUlJPUihbJCQxIGlzIG5vdCBhbiBleGVjdXRhYmxlIGZpbGVdKQorKwlmaQorKyAgICAgIGZpCisrICAgICAgQUNfTVNHX1JFU1VMVChbJCQxXSkKKysgICAgICBpZiB0ZXN0ICEgLWUgIiQkMSI7IHRoZW4KKysgICAgICAgIEFDX01TR19XQVJOKFskJDEgZG9lcyBub3QgZXhpc3RdKQorKyAgICAgIGZpCisrICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKyAgICBmaQorKyAgXSxbCisrICAgIG00X2lmKFskM10sW10sWworKyAgICAgIEFDX1BBVEhfUFJPRygkMSwkMiwsJFBBVEg6JDQpCisrICAgIF0sWworKyAgICAgIEFDX1BBVEhfUFJPR1MoJDEsJDMsLCRQQVRIOiQ0KQorKyAgICAgIGlmIHRlc3QgLW4gIiQkMSIgLWEgImBleHByICIkJDEiIDogJy4qL1woW1teL11dKlwpJCdgIiAhPSAiJDIiOyB0aGVuCisrCUNPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgICBmaQorKyAgICBdKQorKyAgICBtNF9pZihbJDRdLFtdLFtdLFsKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisrCWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKysgICAgICAgIGZvciBkaXIgaW4gIiQ0IjsgZG8KKysgICAgICAgICAgaWYgdGVzdCAiYGRpcm5hbWUgJCQxYCIgPSAiJGRpciI7IHRoZW4KKysgICAgICAgICAgICBDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrCSAgICBicmVhaworKwkgIGZpCisrICAgICAgICBkb25lCisrCUlGUz0iJGFzX3NhdmVfSUZTIgorKyAgICAgIGZpCisrICAgIF0pCisrICBdKQorKyAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICBtNF9pZihpbnRlcm5hbF8kMl9jbWQsW10sWworKyAgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mICQyIHdpdGggdGhlIG9wdGlvbiAnLS13aXRoLSQyJ10pCisrICAgIF0sWworKyAgICAgIEFDX01TR19XQVJOKFtVc2luZyBpbnRlcm5hbCAkMiBtZWNoYW5pc20uICBVc2Ugb3B0aW9uICctLXdpdGgtJDInIHRvIG92ZXJyaWRlXSkKKysgICAgICBDT01QQVRfUFJPR1JBTVM9IiRDT01QQVRfUFJPR1JBTVMgJDIiCisrICAgICAgJDE9JDIKKysgICAgICBJTlRFUk5BTF8kMT0xCisrICAgIF0pCisrICBmaQorKyAgQUNfU1VCU1QoJDEpCisrXSkKKysKKytkbmwgQWxsb3cgY29uZmlndXJlIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyBiaW5hcnkKKytkbmwgVGhpcyB2YXJpYW50IGlzIGZvciBvcHRpb25hbCBiaW5hcmllcy4KKytkbmwgMTogRW52aXJvbm1lbnQgdmFyaWFibGUKKytkbmwgMjogYmluYXJ5IG5hbWUKKytkbmwgMzogb3B0aW9uYWwgbGlzdCBvZiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtZXMKKytkbmwgNDogb3B0aW9uYWwgbGlzdCBvZiBhZGRpdGlvbmFsIHNlYXJjaCBkaXJlY3RvcmllcworK0FDX0RFRlVOKFtRVUlMVF9DT01QQVRfUFJPR19QQVRIX09QVF0sWworKyAgQUNfQVJHX1dJVEgoJDIsIEFDX0hFTFBfU1RSSU5HKAorKyAgICBbLS13aXRoLSQyXSwgW25hbWUgb2YgdGhlICQyIGV4ZWN1dGFibGUgdG8gdXNlXSksCisrICBbCisrICAgIGlmIHRlc3QgeCIkd2l0aHZhbCIgIT0geG5vOyB0aGVuCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciAkMikKKysgICAgICAkMT0iJHdpdGh2YWwiCisrICAgICAgaWYgdGVzdCAtZSAiJCQxIjsgdGhlbgorKwlpZiB0ZXN0ICEgLWYgIiQkMSIgLWEgISAtaCAiJCQxIiB8fCB0ZXN0ICEgLXggIiQkMSI7IHRoZW4KKysJICBBQ19NU0dfRVJST1IoWyQkMSBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlXSkKKysJZmkKKysgICAgICBmaQorKyAgICAgIEFDX01TR19SRVNVTFQoWyQkMV0pCisrICAgICAgaWYgdGVzdCAhIC1lICIkJDEiOyB0aGVuCisrICAgICAgICBBQ19NU0dfV0FSTihbJCQxIGRvZXMgbm90IGV4aXN0XSkKKysgICAgICBmaQorKyAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgZmkKKysgIF0sWworKyAgICBtNF9pZihbJDNdLFtdLFsKKysgICAgICBBQ19QQVRIX1BST0coJDEsJDIsLCRQQVRIOiQ0KQorKyAgICBdLFsKKysgICAgICBBQ19QQVRIX1BST0dTKCQxLCQzLCwkUEFUSDokNCkKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiIC1hICJgZXhwciAiJCQxIiA6ICcuKi9cKFtbXi9dXSpcKSQnYCIgIT0gIiQyIjsgdGhlbgorKwlDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgbTRfaWYoWyQ0XSxbXSxbXSxbCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorKwlhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICAgICAgICBmb3IgZGlyIGluICIkNCI7IGRvCisrICAgICAgICAgIGlmIHRlc3QgImBkaXJuYW1lICQkMWAiID0gIiRkaXIiOyB0aGVuCisrICAgICAgICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKwkgICAgYnJlYWsKKysJICBmaQorKyAgICAgICAgZG9uZQorKwlJRlM9IiRhc19zYXZlX0lGUyIKKysgICAgICBmaQorKyAgICBdKQorKyAgICBpZiB0ZXN0IC16ICIkJDEiOyB0aGVuCisrICAgICAgQUNfTVNHX1dBUk4oWyQyIG5vdCBmb3VuZCwgc29tZSBvcHRpb25hbCBmdW5jdGlvbmFsaXRpZXMgd2lsbCBiZSBtaXNzaW5nXSkKKysgICAgZmkKKysgIF0pCisrICBpZiB0ZXN0IC16ICIkJDEiOyB0aGVuCisrICAgICQxPSQyCisrICBmaQorKyAgQUNfU1VCU1QoJDEpCisrXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2dudV9wYXRjaF90ZXN0X2ZpeF90YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyMTU1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit0aGUgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgY3Jvc3MgY29tcGlsaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMDI2YTM2Yy4uOGFmNTkxYiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjQ1LDYgKzI0NSw3IEBAIGZpCisgUVVJTFRfQ09NUEFUX1BST0dfUEFUSChESUZGLCBkaWZmKQorIFFVSUxUX0NPTVBBVF9QUk9HX1BBVEgoUEFUQ0gsIHBhdGNoKQorIAorK2lmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyI7IHRoZW4KKyAjIFN1biBkaWZmIGFuZCBvdGhlcnMgd2lsbCBub3Qgd29yayBiZWNhdXNlIEdOVSBwYXRjaCBvcHRpb25zIGFyZSB1c2VkLgorIEFDX01TR19DSEVDS0lORyhbdGhlIHZlcnNpb24gb2YgJERJRkZdKQorIGlmICRESUZGIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IGdyZXAgR05VID4vZGV2L251bGw7IHRoZW4KK0BAIC0yOTMsNiArMjk0LDcgQEAgY3VycmVudCB2ZXJzaW9uIG9mIHBhdGNoIGZyb20gZnRwLmdudS5vcmcsIG9yIGlmIHlvdSBhbHJlYWR5IGhhdmUgR05VIHBhdGNoCisgdGhlbiB5b3UgY2FuIHN1cHBseSBpdHMgcGF0aCB3aXRoIHRoZSAnLS13aXRoLXBhdGNoPScgb3B0aW9uLgorIF0pCisgZmkKKytmaQorIAorIFFVSUxUX0NPTVBBVF9QUk9HX1BBVEgoRklORCwgZmluZCkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhN2FmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gcXVpbHQtMC40Ny9NYWtlZmlsZS5pbgkyMDA4LTEyLTMxIDE5OjA5OjEzLjAwMDAwMDAwMCArMDAwMAorKysrIHF1aWx0LTAuNDcvTWFrZWZpbGUuaW4ub3JpZwkyMDA4LTA4LTIxIDEzOjIxOjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDcgKzEzLDcgQEAKKyBtYW5kaXIgOj0JQG1hbmRpckAKKyBsb2NhbGVkaXIgOj0JJChkYXRhZGlyKS9sb2NhbGUKKyBlbWFjc2RpciA6PQkkKGRhdGFkaXIpL2VtYWNzL3NpdGUtbGlzcAorLWV0Y2RpciA6PQkkKHN1YnN0IC91c3IvZXRjLC9ldGMsJChwcmVmaXgpL2V0YykKKytldGNkaXIgOj0JQHN5c2NvbmZkaXJACisgCisgSU5TVEFMTCA6PQlASU5TVEFMTEAKKyBQT0QyTUFOIDo9CUBQT0QyTUFOQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTU4YTlkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworbG4gLXNmIC9iaW4vZWQgL3Vzci9iaW4vZWQKK2ZvciBpIGluIGBscyB0ZXN0LyoudGVzdCB8YXdrIC1GLiAne3ByaW50ICQxfScgfGF3ayAtRi8gJ3twcmludCAkMn0nYDsgZG8gbWFrZSBjaGVjay0kaTsgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gUEFTUzogJGkudGVzdDsgZWxzZSBlY2hvIEZBSUw6ICRpLnRlc3Q7IGZpOyBkb25lCitybSAtZiAvdXNyL2Jpbi9lZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0XzAuNjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHRfMC42NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY5MDBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0XzAuNjQuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSBxdWlsdC5pbmMKK2luaGVyaXQgZ2V0dGV4dAorUkRFUEVORFNfJHtQTn0gKz0gInBhdGNoIGRpZmZzdGF0IGJ6aXAyIHV0aWwtbGludXgiCitTUkNfVVJJICs9ICJmaWxlOi8vYWNsb2NhbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaCBcCisgICAgICAgICAgICIKKworIyBmaXggYnVpbGQtZGlzdHJvIHNwZWNpZmljIHBlcmwgcGF0aCBpbiB0aGUgdGFyZ2V0IHBlcmwgc2NyaXB0cworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZm9yIHBlcmxzY3JpcHQgaW4gJHtEfSR7ZGF0YWRpcn0vcXVpbHQvc2NyaXB0cy9yZW1vdmUtdHJhaWxpbmctd3MgJHtEfSR7ZGF0YWRpcn0vcXVpbHQvc2NyaXB0cy9kZXBlbmRlbmN5LWdyYXBoICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvZWRtYWlsICR7RH0ke2JpbmRpcn0vZ3VhcmRzCisJZG8KKwkJaWYgWyAtZiAkcGVybHNjcmlwdCBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAkcGVybHNjcmlwdAorCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjg4OWZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTWFrZWZpbGUgZGVidWdnZXIgd2hpY2ggaXMgZ251bWFrZSBjb21wYXRpYmxlIgorREVTQ1JJUFRJT04gPSAicmVtYWtlIGlzIGEgcGF0Y2hlZCBhbmQgbW9kZXJuaXplZCB2ZXJzaW9uIG9mIEdOVSBtYWtlIFwKK3V0aWxpdHkgdGhhdCBhZGRzIGltcHJvdmVkIGVycm9yIHJlcG9ydGluZywgdGhlIGFiaWxpdHkgdG8gdHJhY2UgXAorZXhlY3V0aW9uIGluIGEgY29tcHJlaGVuc2libGUgd2F5LCBhbmQgYSBkZWJ1Z2dlci4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9iYXNoZGIuc291cmNlZm9yZ2UubmV0L3JlbWFrZS8iCitTRUNUSU9OID0gImRldmVsIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcm9ja3kvcmVtYWtlLmdpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJtYWtlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21ha2VdID0gIiR7YmluZGlyfS9tYWtlIgorQUxURVJOQVRJVkVfVEFSR0VUW21ha2VdID0gIiR7YmluZGlyfS9yZW1ha2UiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTYzMjllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordmVyc2lvbi1yZW1ha2UudGV4aSBpcyBub3QgdGhlcmUgYnV0IGl0IGlzIHJlcXVpcmVkIGJ5IHJlbWFrZS50ZXhpLAoranVzdCBhZGQgaXQgZm9yIGdldHRpbmcgdGhlICdtYWtlIHJlbWFrZS5pbmZvJyB3b3Jrcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLS1naXQgYS9kb2MvdmVyc2lvbi1yZW1ha2UudGV4aSBiL2RvYy92ZXJzaW9uLXJlbWFrZS50ZXhpCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmEzYjcyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZG9jL3ZlcnNpb24tcmVtYWtlLnRleGkKK0BAIC0wLDAgKzEsNCBAQAorK0BzZXQgVVBEQVRFRCAxMCBKdW5lIDIwMTIKKytAc2V0IFVQREFURUQtTU9OVEggSnVuZSAyMDEyCisrQHNldCBFRElUSU9OIDMuODIrZGJnLTAuOWdpdAorK0BzZXQgVkVSU0lPTiAzLjgyK2RiZy0wLjlnaXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2VfNC4xK2RiZy0xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxOTEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiCkBAIC0wLDAgKzEsMjcgQEAKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbG9iL0NPUFlJTkcuTElCO21kNT00YTc3MGI2N2U2YmUwZjYwZGEyNDRiZWIyZGUwZmNlNCIKK3JlcXVpcmUgcmVtYWtlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ1JFViA9ICJjZjU0NjQxZDUwYTAxNjViYjE3NjIyYjNlOTc3MGY0MjZjY2JjNTYxIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyArPSAicmVhZGxpbmUgZ3VpbGUiCisjIE5lZWQgdG8gYWRkICJnZXR0ZXh0LW5hdGl2ZSIgZGVwZW5kZW5jeSB0byByZW1ha2UtbmF0aXZlLgorIyBCeSBkZWZhdWx0IG9ubHkgImdldHRleHQtbWluaW1hbC1uYXRpdmUiIGlzIGFkZGVkCisjIHdoZW4gaW5oZXJpdCBnZXR0ZXh0LgorREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gImdldHRleHQtbmF0aXZlIgorUFJPVklERVMgKz0gIm1ha2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgcmVtb3ZlIHRoZSBkZWZhdWx0IExJTkdVQVMgc2luY2Ugd2UgYXJlIG5vdCBnb2luZyB0byBnZW5lcmF0ZSBsYW5ndWFnZXMKKyAgICBybSAke1N9L3BvL0xJTkdVQVMKKyAgICB0b3VjaCAke1N9L3BvL0xJTkdVQVMKKyAgICAjIGNyZWF0ZSBjb25maWcucnBhdGggd2hpY2ggcmVxdWlyZWQgYnkgY29uZmlndXJlLmFjCisgICAgKCBjZCAke1N9OyBhdXRvcG9pbnQgfHwgdG91Y2ggY29uZmlnLnJwYXRoICkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3Nzg3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9hZGRfUlBNU0VOU0VfTUlTU0lOR09LX3RvX3JwbW1vZHVsZS5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4gCisKK2RpZmYgLS1naXQgYS9weXRob24vcnBtbW9kdWxlLmMgYi9weXRob24vcnBtbW9kdWxlLmMKK2luZGV4IGE0ZmUyMTcuLjcyOGM2NmMgMTAwNjQ0CistLS0gYS9weXRob24vcnBtbW9kdWxlLmMKKysrKyBiL3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTM5Niw2ICszOTYsMTAgQEAgc3RhdGljIGludCBpbml0TW9kdWxlKFB5T2JqZWN0ICptKQorICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NUUk9ORyk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfQ09ORklHKTsKKyAKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX01JU1NJTkdPSyk7CisrI2VuZGlmCisrCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19URVNUKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1UUkFOU19GTEFHX0JVSUxEX1BST0JTKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1UUkFOU19GTEFHX05PU0NSSVBUUyk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9kaXNhYmxlX3Nob3J0Y2lyY3VpdGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjQ2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKKworSW5kZXg6IHJwbS00LjExLjIvYnVpbGQvcGFjay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2J1aWxkL3BhY2suYworKysrIHJwbS00LjExLjIvYnVpbGQvcGFjay5jCitAQCAtNTcxLDkgKzU3MSw5IEBAIHJwbVJDIHBhY2thZ2VCaW5hcmllcyhycG1TcGVjIHNwZWMsIGNvbnMKKyAJICAgIGhlYWRlclB1dEJpbihwa2ctPmhlYWRlciwgUlBNVEFHX1NPVVJDRVBLR0lELCBzcGVjLT5zb3VyY2VQa2dJZCwxNik7CisgCX0KKyAKKy0JaWYgKGNoZWF0aW5nKSB7CistCSAgICAodm9pZCkgcnBtbGliTmVlZHNGZWF0dXJlKHBrZywgIlNob3J0Q2lyY3VpdGVkIiwgIjQuOS4wLTEiKTsKKy0JfQorKy8vCWlmIChjaGVhdGluZykgeworKy8vCSAgICAodm9pZCkgcnBtbGliTmVlZHNGZWF0dXJlKHBrZywgIlNob3J0Q2lyY3VpdGVkIiwgIjQuOS4wLTEiKTsKKysvLwl9CisgCQorIAl7ICAgY2hhciAqYmluRm9ybWF0ID0gcnBtR2V0UGF0aCgiJXtfcnBtZmlsZW5hbWV9IiwgTlVMTCk7CisgCSAgICBjaGFyICpiaW5ScG0sICpiaW5EaXI7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZml4X2xpYmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9maXhfbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDYyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZml4X2xpYmRpci5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK2RpZmYgLS1naXQgYS9pbnN0YWxscGxhdGZvcm0gYi9pbnN0YWxscGxhdGZvcm0KK2luZGV4IDhjM2ViYTAuLmZhMTVlOTEgMTAwNzU1CistLS0gYS9pbnN0YWxscGxhdGZvcm0KKysrKyBiL2luc3RhbGxwbGF0Zm9ybQorQEAgLTExMiw3ICsxMTIsNyBAQCBmb3IgQVJDSCBpbiBub2FyY2ggYGdyZXAgXmFyY2hfY2Fub24gJFJQTVJDIHwgY3V0IC1kOiAtZjJgOyBkbworICAgWyAteiAiJENBTk9OQVJDSCIgXSAmJiBjb250aW51ZQorIAorICAgaWYgWyAiJE9TIiA9ICJsaW51eCIgXSAmJiBbICIkQ0FOT05DT0xPUiIgPSAzIF07IHRoZW4KKy0gICAgICBMSUI9JHtMSUJ9NjQKKysgICAgICBMSUI9JHtMSUJ9CisgICBmaQorIAorICAgUFBEPSIke0RFU1RESVJ9LyR7cGxhdGZvcm1kaXJ9LyR7QVJDSH0tJHtPU30iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcHl0aG9uZGVwcy5zaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9weXRob25kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4M2IxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcHl0aG9uZGVwcy5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworWyAkIyAtZ2UgMSBdIHx8IHsKKyAgICBjYXQgPiAvZGV2L251bGwKKyAgICBleGl0IDAKK30KKworY2FzZSAkMSBpbgorLVJ8LS1yZXF1aXJlcykKKyAgICBzaGlmdAorICAgIGdyZXAgIi91c3IvXChsaWJbXi9dKlx8c2hhcmVcKS9weXRob25bXi9dKi8iID4vZGV2L251bGwgJiYgZWNobyAicHl0aG9uIgorICAgIGV4aXQgMAorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRiMy1mcm9tLWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQwZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorCitEaXNhYmxlIGNvbmZpZ3VyaW5nIHRoZSBkYjMgZGlyZWN0b3J5IHNpbmNlIHdlIHdpbGwgYmUgdXNpbmcgdGhlCitleHRlcm5hbCBEQiBwcm92aWRlZCBhcyBwYXJ0IG9mIE9FLUNvcmUgYWxyZWFkeSwgbm8gbmVlZCB0byBoYXZlCitkdXBsaWNhdGUgZGF0YWJhc2UgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBycG0tNC4xMS4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNC4xMS4yL2NvbmZpZ3VyZS5hYworQEAgLTgyNSw5ICs4MjUsOSBAQCBBQ19TVUJTVChSUE1DT05GSUdESVIpCisgCisgQUNfU1VCU1QoT0JKRFVNUCkKKyAKKy1pZiB0ZXN0ICIkd2l0aF9leHRlcm5hbF9kYiIgPSBubzsgdGhlbgorLSAgICBBQ19DT05GSUdfU1VCRElSUyhkYjMpCistZmkKKysjaWYgdGVzdCAiJHdpdGhfZXh0ZXJuYWxfZGIiID0gbm87IHRoZW4KKysjICAgIEFDX0NPTkZJR19TVUJESVJTKGRiMykKKysjZmkKKyAKKyBBTV9DT05ESVRJT05BTChbV0lUSF9JTlRFUk5BTF9EQl0sW3Rlc3QgIiR3aXRoX2V4dGVybmFsX2RiIiA9IG5vXSkKKyBBTV9DT05ESVRJT05BTChbRE9YWUdFTl0sW3Rlc3QgIiRET1hZR0VOIiAhPSBub10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRpci1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGlyLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZWNhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRpci1jaGVjay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKKworSW5kZXg6IHJwbS00LjExLjIvYnVpbGQvZmlsZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9idWlsZC9maWxlcy5jCisrKysgcnBtLTQuMTEuMi9idWlsZC9maWxlcy5jCitAQCAtMTMyMSwxMiArMTMyMSw2IEBAIHN0YXRpYyBycG1SQyBhZGRGaWxlKEZpbGVMaXN0IGZsLCBjb25zdAorIAl9CisgICAgIH0KKyAKKy0gICAgLyogRXJyb3Igb3V0IHdoZW4gYSBub24tZGlyZWN0b3J5IGlzIHNwZWNpZmllZCBhcyBvbmUgaW4gc3BlYyAqLworLSAgICBpZiAoZmwtPmN1ci5pc0RpciAmJiAoc3RhdHAgPT0gJnN0YXRidWYpICYmICFTX0lTRElSKHN0YXRwLT5zdF9tb2RlKSkgeworLQlycG1sb2coUlBNTE9HX0VSUiwgXygiTm90IGEgZGlyZWN0b3J5OiAlc1xuIiksIGRpc2tQYXRoKTsKKy0JZ290byBleGl0OworLSAgICB9CistCisgICAgIC8qIERvbid0IHJlY3Vyc2UgaW50byBleHBsaWNpdCAlZGlyLCBkb24ndCBkb3VibGUtcmVjdXJzZSBmcm9tIGZ0cyAqLworICAgICBpZiAoKGZsLT5jdXIuaXNEaXIgIT0gMSkgJiYgKHN0YXRwID09ICZzdGF0YnVmKSAmJiBTX0lTRElSKHN0YXRwLT5zdF9tb2RlKSkgeworIAlyZXR1cm4gcmVjdXJzZURpcihmbCwgZGlza1BhdGgpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzNkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcnBtLXNjcmlwdGV0ZXhlY2hlbHAucGF0Y2gKQEAgLTAsMCArMSwxOTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZV0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKKworSW5kZXg6IHJwbS00LjExLjIvbGliL3BzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2xpYi9wc20uYworKysrIHJwbS00LjExLjIvbGliL3BzbS5jCitAQCAtNDIxLDcgKzQyMSw4IEBAIHN0YXRpYyBycG1SQyBydW5TY3JpcHQocnBtcHNtIHBzbSwgQVJHVl8KKyAKKyAgICAgcnBtc3dFbnRlcihycG10c09wKHBzbS0+dHMsIFJQTVRTX09QX1NDUklQVExFVFMpLCAwKTsKKyAgICAgcmMgPSBycG1TY3JpcHRSdW4oc2NyaXB0LCBhcmcxLCBhcmcyLCBzZmQsCistCQkgICAgICBwcmVmaXhlcywgd2Fybl9vbmx5LCBzZWxpbnV4KTsKKysJCSAgICAgIHByZWZpeGVzLCB3YXJuX29ubHksIHNlbGludXgsIHJwbXRzUm9vdERpcihwc20tPnRzKSApOworKworICAgICBycG1zd0V4aXQocnBtdHNPcChwc20tPnRzLCBSUE1UU19PUF9TQ1JJUFRMRVRTKSwgMCk7CisgCisgICAgIC8qIE1hcCB3YXJuLW9ubHkgZXJyb3JzIHRvICJub3Rmb3VuZCIgZm9yIHNjcmlwdCBzdG9wIGNhbGxiYWNrICovCitAQCAtOTU4LDE1ICs5NTksNDkgQEAgc3RhdGljIHJwbVJDIHJwbXBzbVN0YWdlKHJwbXBzbSBwc20sIHBrZworICAgICBjYXNlIFBTTV9ERVNUUk9ZOgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fU0NSSVBUOgkvKiBSdW4gY3VycmVudCBwYWNrYWdlIHNjcmlwdGxldHMuICovCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIHsKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RPdXQoKTsKKysjZW5kaWYKKysKKyAJcmMgPSBydW5JbnN0U2NyaXB0KHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdEluKCk7CisrICAgICAgICB9CisrI2VuZGlmCisgCWJyZWFrOworICAgICBjYXNlIFBTTV9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIG90aGVyIHBhY2thZ2UocykgdGhpcyBwYWNrYWdlIHNldHMgb2ZmLiAqLworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICB7CisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisgCXJjID0gcnVuVHJpZ2dlcnMocHNtKTsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290SW4oKTsKKysgICAgICAgIH0KKysjZW5kaWYKKyAJYnJlYWs7CisgICAgIGNhc2UgUFNNX0lNTUVEX1RSSUdHRVJTOgorIAkvKiBSdW4gdHJpZ2dlcnMgaW4gdGhpcyBwYWNrYWdlIG90aGVyIHBhY2thZ2Uocykgc2V0IG9mZi4gKi8KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwl7CisrICAgICAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RPdXQoKTsKKysjZW5kaWYKKyAJcmMgPSBydW5JbW1lZFRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RJbigpOworKwl9CisrI2VuZGlmCisgCWJyZWFrOworIAorICAgICBjYXNlIFBTTV9SUE1EQl9BREQ6IHsKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcnBtc2NyaXB0LmMKKysrKyBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuYworQEAgLTkyLDcgKzkyLDcgQEAgc3RhdGljIHJwbVJDIHJ1bkx1YVNjcmlwdChpbnQgc2VsaW51eCwgQQorIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgU0NSSVBUX1BBVEggPSAiUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbjovdXNyL1gxMVI2L2JpbiI7CisgCisgc3RhdGljIHZvaWQgZG9TY3JpcHRFeGVjKGludCBzZWxpbnV4LCBBUkdWX2NvbnN0X3QgYXJndiwgQVJHVl9jb25zdF90IHByZWZpeGVzLAorLQkJCUZEX3Qgc2NyaXB0RmQsIEZEX3Qgb3V0KQorKwkJCUZEX3Qgc2NyaXB0RmQsIEZEX3Qgb3V0LCBjaGFyICogcm9vdERpciApCisgeworICAgICBpbnQgcGlwZXNbMl07CisgICAgIGludCBmbGFnOworQEAgLTE1OCwxMyArMTU4LDEyIEBAIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVIKKyAJICAgIHNldGVudigiUlBNX0lOU1RBTExfUFJFRklYIiwgKnBmLCAxKTsKKyAJfQorICAgICB9CistCQorLSAgICBpZiAoY2hkaXIoIi8iKSA9PSAwKSB7CisrICAgIGlmIChjaGRpcihyb290RGlyKSA9PSAwKSB7CisgCS8qIFhYWCBEb24ndCBtdHJhY2UgaW50byBjaGlsZHJlbi4gKi8KKyAJdW5zZXRlbnYoIk1BTExPQ19DSEVDS18iKTsKKyAKKyAJLyogUGVybWl0IGxpYnNlbGludXggdG8gZG8gdGhlIHNjcmlwdGxldCBleGVjLiAqLworLQlpZiAoc2VsaW51eCA9PSAxKSB7CQorKwlpZiAoc2VsaW51eCA9PSAxKSB7CisgCSAgICB4eCA9IHJwbV9leGVjY29uKDAsIGFyZ3ZbMF0sIGFyZ3YsIGVudmlyb24pOworIAl9CisgCitAQCAtMTc1LDEyICsxNzQsMTIgQEAgc3RhdGljIHZvaWQgZG9TY3JpcHRFeGVjKGludCBzZWxpbnV4LCBBUgorICAgICBfZXhpdCgxMjcpOyAvKiBleGl0IDEyNyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJhc2goMSkgKi8KKyB9CisgCistc3RhdGljIGNoYXIgKiB3cml0ZVNjcmlwdChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnNjcmlwdCkKKytzdGF0aWMgY2hhciAqIHdyaXRlU2NyaXB0KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc2NyaXB0LCBjaGFyICogcm9vdERpcikKKyB7CisgICAgIGNoYXIgKmZuID0gTlVMTDsKKyAgICAgc2l6ZV90IHNsZW4gPSBzdHJsZW4oc2NyaXB0KTsKKyAgICAgaW50IG9rID0gMDsKKy0gICAgRkRfdCBmZCA9IHJwbU1rVGVtcEZpbGUoIi8iLCAmZm4pOworKyAgICBGRF90IGZkID0gcnBtTWtUZW1wRmlsZShyb290RGlyLCAmZm4pOworIAorICAgICBpZiAoRmVycm9yKGZkKSkKKyAJZ290byBleGl0OworQEAgLTIwNCw3ICsyMDMsNyBAQCBleGl0OgorICAqLworIHN0YXRpYyBycG1SQyBydW5FeHRTY3JpcHQoaW50IHNlbGludXgsIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywKKyAJCSAgIGNvbnN0IGNoYXIgKnNuYW1lLCBycG1sb2dMdmwgbHZsLCBGRF90IHNjcmlwdEZkLAorLQkJICAgQVJHVl90ICogYXJndnAsIGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyKQorKwkJICAgQVJHVl90ICogYXJndnAsIGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyLGNoYXIgKiByb290RGlyKQorIHsKKyAgICAgRkRfdCBvdXQgPSBOVUxMOworICAgICBjaGFyICogZm4gPSBOVUxMOworQEAgLTIxNSw3ICsyMTQsNyBAQCBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBCisgICAgIHJwbWxvZyhSUE1MT0dfREVCVUcsICIlczogc2NyaXB0bGV0IHN0YXJ0XG4iLCBzbmFtZSk7CisgCisgICAgIGlmIChzY3JpcHQpIHsKKy0JZm4gPSB3cml0ZVNjcmlwdCgqYXJndnBbMF0sIHNjcmlwdCk7CisrCWZuID0gd3JpdGVTY3JpcHQoKmFyZ3ZwWzBdLCBzY3JpcHQsIHJvb3REaXIpOworIAlpZiAoZm4gPT0gTlVMTCkgeworIAkgICAgcnBtbG9nKFJQTUxPR19FUlIsCisgCQkgICBfKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgZm9yICVzOiAlc1xuIiksCitAQCAtMjU4LDcgKzI1Nyw3IEBAIHN0YXRpYyBycG1SQyBydW5FeHRTY3JpcHQoaW50IHNlbGludXgsIEEKKyAgICAgfSBlbHNlIGlmIChwaWQgPT0gMCkgey8qIENoaWxkICovCisgCXJwbWxvZyhSUE1MT0dfREVCVUcsICIlczogZXhlY3YoJXMpIHBpZCAlZFxuIiwKKyAJICAgICAgIHNuYW1lLCAqYXJndnBbMF0sICh1bnNpZ25lZClnZXRwaWQoKSk7CistCWRvU2NyaXB0RXhlYyhzZWxpbnV4LCAqYXJndnAsIHByZWZpeGVzLCBzY3JpcHRGZCwgb3V0KTsKKysJZG9TY3JpcHRFeGVjKHNlbGludXgsICphcmd2cCwgcHJlZml4ZXMsIHNjcmlwdEZkLCBvdXQsIHJvb3REaXIpOworICAgICB9CisgCisgICAgIGRvIHsKK0BAIC0yOTcsMTMgKzI5NiwyNyBAQCBleGl0OgorIH0KKyAKKyBycG1SQyBycG1TY3JpcHRSdW4ocnBtU2NyaXB0IHNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyLCBGRF90IHNjcmlwdEZkLAorLQkJICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCkKKysJCSAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgsIGNoYXIgKiByb290RGlyKQorIHsKKyAgICAgQVJHVl90IGFyZ3MgPSBOVUxMOworICAgICBycG1sb2dMdmwgbHZsID0gd2Fybl9vbmx5ID8gUlBNTE9HX1dBUk5JTkcgOiBSUE1MT0dfRVJSOworICAgICBycG1SQyByYzsKKy0KKy0gICAgaWYgKHNjcmlwdCA9PSBOVUxMKSByZXR1cm4gUlBNUkNfT0s7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysjZW5kaWYKKysgCisrICAgICBpZiAoc2NyaXB0ID09IE5VTEwpIHJldHVybiBSUE1SQ19PSzsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgeworKyAgICAgICBhcmd2QWRkKCZhcmdzLCBzY3JpcHRsZXRXcmFwcGVyKTsKKysKKysgICAgICAgaWYgKCByb290RGlyICkgeworKyAgICAgICAgIGFyZ3ZBZGQoJmFyZ3MsIHJvb3REaXIpOworKyAgICAgICB9IGVsc2UgeworKyAgICAgICAgIGFyZ3ZBZGQoJmFyZ3MsICIvIik7CisrICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIAorICAgICAvKiBjb25zdHJ1Y3QgYSBuZXcgYXJndiBhcyB3ZSBjYW4ndCBtb2RpZnkgdGhlIG9uZSBmcm9tIGhlYWRlciAqLworICAgICBpZiAoc2NyaXB0LT5hcmdzKSB7CitAQCAtMzE1LDcgKzMyOCw3IEBAIHJwbVJDIHJwbVNjcmlwdFJ1bihycG1TY3JpcHQgc2NyaXB0LCBpbnQKKyAgICAgaWYgKHJzdHJlcShhcmdzWzBdLCAiPGx1YT4iKSkgeworIAlyYyA9IHJ1bkx1YVNjcmlwdChzZWxpbnV4LCBwcmVmaXhlcywgc2NyaXB0LT5kZXNjciwgbHZsLCBzY3JpcHRGZCwgJmFyZ3MsIHNjcmlwdC0+Ym9keSwgYXJnMSwgYXJnMik7CisgICAgIH0gZWxzZSB7CistCXJjID0gcnVuRXh0U2NyaXB0KHNlbGludXgsIHByZWZpeGVzLCBzY3JpcHQtPmRlc2NyLCBsdmwsIHNjcmlwdEZkLCAmYXJncywgc2NyaXB0LT5ib2R5LCBhcmcxLCBhcmcyKTsKKysJcmMgPSBydW5FeHRTY3JpcHQoc2VsaW51eCwgcHJlZml4ZXMsIHNjcmlwdC0+ZGVzY3IsIGx2bCwgc2NyaXB0RmQsICZhcmdzLCBzY3JpcHQtPmJvZHksIGFyZzEsIGFyZzIsIHJvb3REaXIpOworICAgICB9CisgICAgIGFyZ3ZGcmVlKGFyZ3MpOworIAorSW5kZXg6IHJwbS00LjExLjIvbGliL3JwbXNjcmlwdC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2xpYi9ycG1zY3JpcHQuaAorKysrIHJwbS00LjExLjIvbGliL3JwbXNjcmlwdC5oCitAQCAtMjksNyArMjksNyBAQCBycG1TY3JpcHQgcnBtU2NyaXB0RnJlZShycG1TY3JpcHQgc2NyaXB0CisgCisgUlBNX0dOVUNfSU5URVJOQUwKKyBycG1SQyBycG1TY3JpcHRSdW4ocnBtU2NyaXB0IHNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyLCBGRF90IHNjcmlwdEZkLAorLSAgICAgICAgICAgICAgICAgICBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsIGludCB3YXJuX29ubHksIGludCBzZWxpbnV4KTsKKysgICAgICAgICAgICAgICAgICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCwgY2hhciAqIHJvb3REaXIpOworIAorIFJQTV9HTlVDX0lOVEVSTkFMCisgcnBtVGFnVmFsIHJwbVNjcmlwdFRhZyhycG1TY3JpcHQgc2NyaXB0KTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE2MDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3N1cHBvcnQtc3VnZ2VzdHMtdGFnLnBhdGNoCkBAIC0wLDAgKzEsMzg0IEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworZGlmZiAtLWdpdCBhL2J1aWxkL3BhY2suYyBiL2J1aWxkL3BhY2suYworaW5kZXggYjZiMmJlYS4uNWMzZDhkZiAxMDA2NDQKKy0tLSBhL2J1aWxkL3BhY2suYworKysrIGIvYnVpbGQvcGFjay5jCitAQCAtMjczLDggKzI3MywxMCBAQCBzdGF0aWMgcnBtVGFnVmFsIGRlcGV2cnRhZ3NbXSA9IHsKKyAgICAgUlBNVEFHX0NPTkZMSUNUVkVSU0lPTiwKKyAgICAgUlBNVEFHX09SREVSVkVSU0lPTiwKKyAgICAgUlBNVEFHX1RSSUdHRVJWRVJTSU9OLAorLSAgICBSUE1UQUdfU1VHR0VTVFNWRVJTSU9OLAorLSAgICBSUE1UQUdfRU5IQU5DRVNWRVJTSU9OLAorKyAgICBSUE1UQUdfU1VHR0VTVFZFUlNJT04sCisrICAgIFJQTVRBR19FTkhBTkNFVkVSU0lPTiwKKysgICAgUlBNVEFHX1JFQ09NTUVORFZFUlNJT04sCisrICAgIFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTiwKKyAgICAgMAorIH07CisgCitkaWZmIC0tZ2l0IGEvYnVpbGQvcGFyc2VQcmVhbWJsZS5jIGIvYnVpbGQvcGFyc2VQcmVhbWJsZS5jCitpbmRleCA1NzcyYmVmLi5jYmJiZWUzIDEwMDY0NAorLS0tIGEvYnVpbGQvcGFyc2VQcmVhbWJsZS5jCisrKysgYi9idWlsZC9wYXJzZVByZWFtYmxlLmMKK0BAIC04MjEsNiArODIxLDEwIEBAIHN0YXRpYyBycG1SQyBoYW5kbGVQcmVhbWJsZVRhZyhycG1TcGVjIHNwZWMsIFBhY2thZ2UgcGtnLCBycG1UYWdWYWwgdGFnLAorIAl9CisgCS8qIGZhbGx0aHJvdWdoICovCisgICAgIGNhc2UgUlBNVEFHX1BSRVJFUToKKysgICAgY2FzZSBSUE1UQUdfUkVDT01NRU5ERkxBR1M6CisrICAgIGNhc2UgUlBNVEFHX1NVR0dFU1RGTEFHUzoKKysgICAgY2FzZSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOgorKyAgICBjYXNlIFJQTVRBR19FTkhBTkNFRkxBR1M6CisgICAgIGNhc2UgUlBNVEFHX0NPTkZMSUNURkxBR1M6CisgICAgIGNhc2UgUlBNVEFHX09CU09MRVRFRkxBR1M6CisgICAgIGNhc2UgUlBNVEFHX1BST1ZJREVGTEFHUzoKK0BAIC05MjIsNiArOTI2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgUHJlYW1ibGVSZWNfcyBjb25zdCBwcmVhbWJsZUxpc3RbXSA9IHsKKyAgICAge1JQTVRBR19JQ09OLAkJMCwgMCwgTEVOX0FORF9TVFIoImljb24iKX0sCisgICAgIHtSUE1UQUdfUFJPVklERUZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigicHJvdmlkZXMiKX0sCisgICAgIHtSUE1UQUdfUkVRVUlSRUZMQUdTLAkyLCAwLCBMRU5fQU5EX1NUUigicmVxdWlyZXMiKX0sCisrICAgIHtSUE1UQUdfUkVDT01NRU5ERkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJyZWNvbW1lbmRzIil9LAorKyAgICB7UlBNVEFHX1NVR0dFU1RGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInN1Z2dlc3RzIil9LAorKyAgICB7UlBNVEFHX1NVUFBMRU1FTlRGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInN1cHBsZW1lbnRzIil9LAorKyAgICB7UlBNVEFHX0VOSEFOQ0VGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoImVuaGFuY2VzIil9LAorICAgICB7UlBNVEFHX1BSRVJFUSwJCTIsIDEsIExFTl9BTkRfU1RSKCJwcmVyZXEiKX0sCisgICAgIHtSUE1UQUdfQ09ORkxJQ1RGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoImNvbmZsaWN0cyIpfSwKKyAgICAge1JQTVRBR19PQlNPTEVURUZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigib2Jzb2xldGVzIil9LAorZGlmZiAtLWdpdCBhL2J1aWxkL3BhcnNlUmVxcy5jIGIvYnVpbGQvcGFyc2VSZXFzLmMKK2luZGV4IGJhMDgwYTEuLjE0MjcxMTEgMTAwNjQ0CistLS0gYS9idWlsZC9wYXJzZVJlcXMuYworKysrIGIvYnVpbGQvcGFyc2VSZXFzLmMKK0BAIC02MSw2ICs2MSwxOCBAQCBycG1SQyBwYXJzZVJDUE9UKHJwbVNwZWMgc3BlYywgUGFja2FnZSBwa2csIGNvbnN0IGNoYXIgKmZpZWxkLCBycG1UYWdWYWwgdGFnTiwKKyAJbmFtZXRhZyA9IFJQTVRBR19SRVFVSVJFTkFNRTsKKyAJdGFnZmxhZ3MgfD0gUlBNU0VOU0VfQU5ZOworIAlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfUkVDT01NRU5ERkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfUkVDT01NRU5ETkFNRTsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1NVR0dFU1RGTEFHUzoKKysJbmFtZXRhZyA9IFJQTVRBR19TVUdHRVNUTkFNRTsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzoKKysJbmFtZXRhZyA9IFJQTVRBR19TVVBQTEVNRU5UTkFNRTsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX0VOSEFOQ0VGTEFHUzoKKysJbmFtZXRhZyA9IFJQTVRBR19FTkhBTkNFTkFNRTsKKysJYnJlYWs7CisgICAgIGNhc2UgUlBNVEFHX1BST1ZJREVGTEFHUzoKKyAJbmFtZXRhZyA9IFJQTVRBR19QUk9WSURFTkFNRTsKKyAJYnJlYWs7CitkaWZmIC0tZ2l0IGEvYnVpbGQvcmVxcHJvdi5jIGIvYnVpbGQvcmVxcHJvdi5jCitpbmRleCBhMzY4ZjQyLi5jMjcwYWY2IDEwMDY0NAorLS0tIGEvYnVpbGQvcmVxcHJvdi5jCisrKysgYi9idWlsZC9yZXFwcm92LmMKK0BAIC04MSw2ICs4MSwzMCBAQCBpbnQgYWRkUmVxUHJvdihQYWNrYWdlIHBrZywgcnBtVGFnVmFsIHRhZ04sCisgCWV4dHJhID0gRmxhZ3MgJiBSUE1TRU5TRV9UUklHR0VSOworIAlkc3AgPSAmcGtnLT50cmlnZ2VyczsKKyAJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVORE5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfUkVDT01NRU5EVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19SRUNPTU1FTkRGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+cmVjb21tZW5kczsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1NVR0dFU1ROQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX1NVR0dFU1RWRVJTSU9OOworKwlmbGFndGFnID0gUlBNVEFHX1NVR0dFU1RGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+c3VnZ2VzdHM7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVVBQTEVNRU5UTkFNRToKKysJdmVyc2lvbnRhZyA9IFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19TVVBQTEVNRU5URkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnN1cHBsZW1lbnRzOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfRU5IQU5DRU5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfRU5IQU5DRVZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfRU5IQU5DRUZMQUdTOworKwlleHRyYSA9IEZsYWdzICYgX0FMTF9SRVFVSVJFU19NQVNLOworKwlkc3AgPSAmcGtnLT5lbmhhbmNlczsKKysJYnJlYWs7CisgICAgIGNhc2UgUlBNVEFHX1JFUVVJUkVOQU1FOgorICAgICBkZWZhdWx0OgorIAl0YWdOID0gUlBNVEFHX1JFUVVJUkVOQU1FOworZGlmZiAtLWdpdCBhL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmggYi9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oCitpbmRleCBhOWU0YzdjLi4wYTE5NzdmIDEwMDY0NAorLS0tIGEvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAorKysrIGIvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAorQEAgLTkzLDYgKzkzLDEwIEBAIHN0cnVjdCBQYWNrYWdlX3MgeworICAgICBycG1kcyBkczsJCQkvKiE8IFJlcXVpcmVzOiBOID0gRVZSICovCisgICAgIHJwbWRzIHJlcXVpcmVzOworICAgICBycG1kcyBwcm92aWRlczsKKysgICAgcnBtZHMgcmVjb21tZW5kczsKKysgICAgcnBtZHMgc3VnZ2VzdHM7CisrICAgIHJwbWRzIHN1cHBsZW1lbnRzOworKyAgICBycG1kcyBlbmhhbmNlczsKKyAgICAgcnBtZHMgY29uZmxpY3RzOworICAgICBycG1kcyBvYnNvbGV0ZXM7CisgICAgIHJwbWRzIHRyaWdnZXJzOworZGlmZiAtLWdpdCBhL2J1aWxkL3NwZWMuYyBiL2J1aWxkL3NwZWMuYworaW5kZXggNzAzZWM3OC4uN2FlMjEyMCAxMDA2NDQKKy0tLSBhL2J1aWxkL3NwZWMuYworKysrIGIvYnVpbGQvc3BlYy5jCitAQCAtMTM5LDYgKzEzOSwxMSBAQCBzdGF0aWMgUGFja2FnZSBmcmVlUGFja2FnZShQYWNrYWdlIHBrZykKKyAgICAgcGtnLT5kcyA9IHJwbWRzRnJlZShwa2ctPmRzKTsKKyAgICAgcGtnLT5yZXF1aXJlcyA9IHJwbWRzRnJlZShwa2ctPnJlcXVpcmVzKTsKKyAgICAgcGtnLT5wcm92aWRlcyA9IHJwbWRzRnJlZShwa2ctPnByb3ZpZGVzKTsKKysgICAgcGtnLT5yZWNvbW1lbmRzID0gcnBtZHNGcmVlKHBrZy0+cmVjb21tZW5kcyk7CisrICAgIHBrZy0+c3VnZ2VzdHMgPSBycG1kc0ZyZWUocGtnLT5zdWdnZXN0cyk7CisrICAgIHBrZy0+c3VwcGxlbWVudHMgPSBycG1kc0ZyZWUocGtnLT5zdXBwbGVtZW50cyk7CisrICAgIHBrZy0+ZW5oYW5jZXMgPSBycG1kc0ZyZWUocGtnLT5lbmhhbmNlcyk7CisrCisgICAgIHBrZy0+Y29uZmxpY3RzID0gcnBtZHNGcmVlKHBrZy0+Y29uZmxpY3RzKTsKKyAgICAgcGtnLT5vYnNvbGV0ZXMgPSBycG1kc0ZyZWUocGtnLT5vYnNvbGV0ZXMpOworICAgICBwa2ctPnRyaWdnZXJzID0gcnBtZHNGcmVlKHBrZy0+dHJpZ2dlcnMpOworZGlmZiAtLWdpdCBhL2xpYi9ycG1kcy5jIGIvbGliL3JwbWRzLmMKK2luZGV4IDdhNTExNjcuLjFlNWRkYTAgMTAwNjQ0CistLS0gYS9saWIvcnBtZHMuYworKysrIGIvbGliL3JwbWRzLmMKK0BAIC01Miw2ICs1MiwyMiBAQCBzdGF0aWMgaW50IGRzVHlwZShycG1UYWdWYWwgdGFnLAorIAl0ID0gIlJlcXVpcmVzIjsKKyAJZXZyID0gUlBNVEFHX1JFUVVJUkVWRVJTSU9OOworIAlmID0gUlBNVEFHX1JFUVVJUkVGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX1NVUFBMRU1FTlROQU1FKSB7CisrCXQgPSAiU3VwcGxlbWVudHMiOworKwlldnIgPSBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT047CisrCWYgPSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfRU5IQU5DRU5BTUUpIHsKKysJdCA9ICJFbmhhbmNlcyI7CisrCWV2ciA9IFJQTVRBR19FTkhBTkNFVkVSU0lPTjsKKysJZiA9IFJQTVRBR19FTkhBTkNFRkxBR1M7CisrICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19SRUNPTU1FTkROQU1FKSB7CisrCXQgPSAiUmVjb21tZW5kcyI7CisrCWV2ciA9IFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OOworKwlmID0gUlBNVEFHX1JFQ09NTUVOREZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfU1VHR0VTVE5BTUUpIHsKKysJdCA9ICJTdWdnZXN0cyI7CisrCWV2ciA9IFJQTVRBR19TVUdHRVNUVkVSU0lPTjsKKysJZiA9IFJQTVRBR19TVUdHRVNURkxBR1M7CisgICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19DT05GTElDVE5BTUUpIHsKKyAJdCA9ICJDb25mbGljdHMiOworIAlldnIgPSBSUE1UQUdfQ09ORkxJQ1RWRVJTSU9OOworZGlmZiAtLWdpdCBhL2xpYi9ycG10YWcuaCBiL2xpYi9ycG10YWcuaAoraW5kZXggNjRiMDNmMS4uYjk0MzIyOSAxMDA2NDQKKy0tLSBhL2xpYi9ycG10YWcuaAorKysrIGIvbGliL3JwbXRhZy5oCitAQCAtMjE3LDE0ICsyMTcsMTQgQEAgdHlwZWRlZiBlbnVtIHJwbVRhZ19lIHsKKyAgICAgUlBNVEFHX1BSRVRSQU5TUFJPRwkJPSAxMTUzLAkvKiBzW10gKi8KKyAgICAgUlBNVEFHX1BPU1RUUkFOU1BST0cJPSAxMTU0LAkvKiBzW10gKi8KKyAgICAgUlBNVEFHX0RJU1RUQUcJCT0gMTE1NSwJLyogcyAqLworLSAgICBSUE1UQUdfU1VHR0VTVFNOQU1FCQk9IDExNTYsCS8qIHNbXSBleHRlbnNpb24gKHVuaW1wbGVtZW50ZWQpICovCistI2RlZmluZQlSUE1UQUdfU1VHR0VTVFMgUlBNVEFHX1NVR0dFU1RTTkFNRQkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19TVUdHRVNUU1ZFUlNJT04JPSAxMTU3LAkvKiBzW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfU1VHR0VTVFNGTEFHUwk9IDExNTgsCS8qIGlbXSBleHRlbnNpb24gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19FTkhBTkNFU05BTUUJCT0gMTE1OSwJLyogc1tdIGV4dGVuc2lvbiBwbGFjZWhvbGRlciAodW5pbXBsZW1lbnRlZCkgKi8KKy0jZGVmaW5lCVJQTVRBR19FTkhBTkNFUyBSUE1UQUdfRU5IQU5DRVNOQU1FCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX0VOSEFOQ0VTVkVSU0lPTgk9IDExNjAsCS8qIHNbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19FTkhBTkNFU0ZMQUdTCT0gMTE2MSwJLyogaVtdIGV4dGVuc2lvbiBwbGFjZWhvbGRlciAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MRFNVR0dFU1RTTkFNRQk9IDExNTYsCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysjZGVmaW5lCVJQTVRBR19PTERTVUdHRVNUUyBSUE1UQUdfT0xEU1VHR0VTVFNOQU1FIC8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MRFNVR0dFU1RTVkVSU0lPTgk9IDExNTcsCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MRFNVR0dFU1RTRkxBR1MJPSAxMTU4LAkvKiBpW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERFTkhBTkNFU05BTUUJCT0gMTE1OSwJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyNkZWZpbmUJUlBNVEFHX09MREVOSEFOQ0VTIFJQTVRBR19PTERFTkhBTkNFU05BTUUgLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xERU5IQU5DRVNWRVJTSU9OCT0gMTE2MCwJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xERU5IQU5DRVNGTEFHUwk9IDExNjEsCS8qIGlbXSAodW5pbXBsZW1lbnRlZCkgKi8KKyAgICAgUlBNVEFHX1BSSU9SSVRZCQk9IDExNjIsIC8qIGlbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19DVlNJRAkJPSAxMTYzLCAvKiBzICh1bmltcGxlbWVudGVkKSAqLworICNkZWZpbmUJUlBNVEFHX1NWTklECVJQTVRBR19DVlNJRAkvKiBzICh1bmltcGxlbWVudGVkKSAqLworQEAgLTI2MSw2ICsyNjEsNyBAQCB0eXBlZGVmIGVudW0gcnBtVGFnX2UgeworICAgICBSUE1UQUdfQlVJTERPQlNPTEVURVMJPSAxMTk0LCAvKiBpbnRlcm5hbCAodW5pbXBsZW1lbnRlZCkgKi8KKyAgICAgUlBNVEFHX0RCSU5TVEFOQ0UJCT0gMTE5NSwgLyogaSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX05WUkEJCQk9IDExOTYsIC8qIHMgZXh0ZW5zaW9uICovCisrCisgICAgIC8qIHRhZ3MgMTk5Ny00OTk5IHJlc2VydmVkICovCisgICAgIFJQTVRBR19GSUxFTkFNRVMJCT0gNTAwMCwgLyogc1tdIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfRklMRVBST1ZJREUJCT0gNTAwMSwgLyogc1tdIGV4dGVuc2lvbiAqLworQEAgLTMwNyw2ICszMDgsMjYgQEAgdHlwZWRlZiBlbnVtIHJwbVRhZ19lIHsKKyAgICAgUlBNVEFHX09CU09MRVRFTkVWUlMJPSA1MDQzLCAvKiBzW10gZXh0ZW5zaW9uICovCisgICAgIFJQTVRBR19DT05GTElDVE5FVlJTCT0gNTA0NCwgLyogc1tdIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfRklMRU5MSU5LUwkJPSA1MDQ1LAkvKiBpW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19SRUNPTU1FTkROQU1FCT0gNTA0NiwJLyogc1tdICovCisrI2RlZmluZQlSUE1UQUdfUkVDT01NRU5EUyBSUE1UQUdfUkVDT01NRU5ETkFNRQkvKiBzW10gKi8KKysgICAgUlBNVEFHX1JFQ09NTUVORFZFUlNJT04JPSA1MDQ3LAkvKiBzW10gKi8KKysgICAgUlBNVEFHX1JFQ09NTUVOREZMQUdTCT0gNTA0OCwJLyogaVtdICovCisrICAgIFJQTVRBR19TVUdHRVNUTkFNRQkJPSA1MDQ5LAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19TVUdHRVNUUyBSUE1UQUdfU1VHR0VTVE5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19TVUdHRVNUVkVSU0lPTgk9IDUwNTAsCS8qIHNbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX1NVR0dFU1RGTEFHUwkJPSA1MDUxLAkvKiBpW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5UTkFNRQk9IDUwNTIsCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX1NVUFBMRU1FTlRTIFJQTVRBR19TVVBQTEVNRU5UTkFNRSAvKiBzW10gKi8KKysgICAgUlBNVEFHX1NVUFBMRU1FTlRWRVJTSU9OCT0gNTA1MywJLyogc1tdICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5URkxBR1MJPSA1MDU0LAkvKiBpW10gKi8KKysgICAgUlBNVEFHX0VOSEFOQ0VOQU1FCQk9IDUwNTUsCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX0VOSEFOQ0VTIFJQTVRBR19FTkhBTkNFTkFNRQkvKiBzW10gKi8KKysgICAgUlBNVEFHX0VOSEFOQ0VWRVJTSU9OCT0gNTA1NiwJLyogc1tdICovCisrICAgIFJQTVRBR19FTkhBTkNFRkxBR1MJCT0gNTA1NywJLyogaVtdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRORVZSUwk9IDUwNTgsIC8qIHNbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX1NVR0dFU1RORVZSUwkJPSA1MDU5LCAvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5UTkVWUlMJPSA1MDYwLCAvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19FTkhBTkNFTkVWUlMJCT0gNTA2MSwgLyogc1tdIGV4dGVuc2lvbiAqLworIAorICAgICBSUE1UQUdfRklSU1RGUkVFX1RBRwkvKiE8IGludGVybmFsICovCisgfSBycG1UYWc7CitkaWZmIC0tZ2l0IGEvbGliL3RhZ2V4dHMuYyBiL2xpYi90YWdleHRzLmMKK2luZGV4IDI5YjJiYWUuLmU5NDAzMTAgMTAwNjQ0CistLS0gYS9saWIvdGFnZXh0cy5jCisrKysgYi9saWIvdGFnZXh0cy5jCitAQCAtNzYxLDYgKzc2MSwyNiBAQCBzdGF0aWMgaW50IHJlcXVpcmVuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisgICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1JFUVVJUkVOQU1FKTsKKyB9CisgCisrc3RhdGljIGludCByZWNvbW1lbmRuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19SRUNPTU1FTkROQU1FKTsKKyt9CisrCisrc3RhdGljIGludCBzdWdnZXN0bmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfU1VHR0VTVE5BTUUpOworK30KKysKKytzdGF0aWMgaW50IHN1cHBsZW1lbnRuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19TVVBQTEVNRU5UTkFNRSk7CisrfQorKworK3N0YXRpYyBpbnQgZW5oYW5jZW5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyt7CisrICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX0VOSEFOQ0VOQU1FKTsKKyt9CisrCisgc3RhdGljIGludCBwcm92aWRlbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorIHsKKyAgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfUFJPVklERU5BTUUpOworQEAgLTgyMyw2ICs4NDMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJUYWdGdW5jX3MgcnBtSGVhZGVyVGFnRXh0ZW5zaW9uc1tdID0geworICAgICB7IFJQTVRBR19FUE9DSE5VTSwJCWVwb2NobnVtVGFnIH0sCisgICAgIHsgUlBNVEFHX0lOU1RGSUxFTkFNRVMsCWluc3RmaWxlbmFtZXNUYWcgfSwKKyAgICAgeyBSUE1UQUdfUkVRVUlSRU5FVlJTLAlyZXF1aXJlbmV2cnNUYWcgfSwKKysgICAgeyBSUE1UQUdfUkVDT01NRU5ETkVWUlMsCXJlY29tbWVuZG5ldnJzVGFnfSwKKysgICAgeyBSUE1UQUdfU1VHR0VTVE5FVlJTLAlzdWdnZXN0bmV2cnNUYWd9LAorKyAgICB7IFJQTVRBR19TVVBQTEVNRU5UTkVWUlMsCXN1cHBsZW1lbnRuZXZyc1RhZ30sCisrICAgIHsgUlBNVEFHX0VOSEFOQ0VORVZSUywJZW5oYW5jZW5ldnJzVGFnfSwKKyAgICAgeyBSUE1UQUdfUFJPVklERU5FVlJTLAlwcm92aWRlbmV2cnNUYWcgfSwKKyAgICAgeyBSUE1UQUdfT0JTT0xFVEVORVZSUywJb2Jzb2xldGVuZXZyc1RhZyB9LAorICAgICB7IFJQTVRBR19DT05GTElDVE5FVlJTLAljb25mbGljdG5ldnJzVGFnIH0sCitkaWZmIC0tZ2l0IGEvcnBtcG9wdC5pbiBiL3JwbXBvcHQuaW4KK2luZGV4IDgwNTU5OWUuLjAzNmFiNGUgMTAwNjQ0CistLS0gYS9ycG1wb3B0LmluCisrKysgYi9ycG1wb3B0LmluCitAQCAtNjcsNiArNjcsMTkgQEAgcnBtCWFsaWFzIC0tcmVxdWlyZXMJLS1xZiBcCisgCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyByZXF1aXJlZCBieSBwYWNrYWdlKHMpIgorIHJwbQlhbGlhcyAtUiAtLXJlcXVpcmVzCisgCisrcnBtCWFsaWFzIC0tcmVjb21tZW5kcwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle1JFQ09NTUVOREZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7UkVDT01NRU5ETkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyByZWNvbW1lbmRlZCBieSBwYWNrYWdlKHMpIgorK3JwbQlhbGlhcyAtLXN1Z2dlc3RzCS0tcWYgXAorKyAgIlslfFZFUkJPU0U/eyV7U1VHR0VTVEZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7U1VHR0VTVE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgc3VnZ2VzdGVkIGJ5IHBhY2thZ2UocykiCisrcnBtCWFsaWFzIC0tc3VwcGxlbWVudHMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtTVVBQTEVNRU5URkxBR1M6ZGVwdHlwZX06IH06e318JXtTVVBQTEVNRU5UTkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyBzdXBwbGVtZW50ZWQgYnkgcGFja2FnZShzKSIKKytycG0JYWxpYXMgLS1lbmhhbmNlcwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle0VOSEFOQ0VGTEFHUzpkZXB0eXBlfTogfTp7fXwle0VOSEFOQ0VORVZSU31cbl0iIFwKKysJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIGVuaGFuY2VkIGJ5IHBhY2thZ2UocykiCisrCisgcnBtCWFsaWFzIC0taW5mbyAtLXFmICdcCisgTmFtZSAgICAgICAgOiAle05BTUV9XG5cCisgJXxFUE9DSD97RXBvY2ggICAgICAgOiAle0VQT0NIfVxufXxcCitkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMgYi90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworaW5kZXggY2I0Y2JiZC4uN2M0N2Y2ZCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjCisrKysgYi90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworQEAgLTEwLDYgKzEwLDEwIEBAIEJ1aWxkQXJjaDoJbm9hcmNoCisgJXs/cHJvdnM6UHJvdmlkZXM6ICV7cHJvdnN9fQorICV7P2NmbHM6Q29uZmxpY3RzOiAle2NmbHN9fQorICV7P29iczpPYnNvbGV0ZXM6ICV7b2JzfX0KKyslez9yZWNzOlJlY29tbWVuZHM6ICV7cmVjc319CisrJXs/c3VnczpTdWdnZXN0czogJXtzdWdzfX0KKyslez9zdXBzOlN1cHBsZW1lbnRzOiAle3N1cHN9fQorKyV7P2VuczpFbmhhbmNlczogJXtlbnN9fQorIAorICVkZXNjcmlwdGlvbgorICV7c3VtbWFyeX0KK2RpZmYgLS1naXQgYS90ZXN0cy9ycG1idWlsZC5hdCBiL3Rlc3RzL3JwbWJ1aWxkLmF0CitpbmRleCA2MjMwOTAzLi5jNGM5NTRjIDEwMDY0NAorLS0tIGEvdGVzdHMvcnBtYnVpbGQuYXQKKysrKyBiL3Rlc3RzL3JwbWJ1aWxkLmF0CitAQCAtMTg1LDMgKzE4NSwyNSBAQCBscnd4cnd4cnd4IC9vcHQvZ2xvYnRlc3QvbGlua2dvb2QKKyBdLAorIFtdKQorIEFUX0NMRUFOVVAKKysKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2sgaWYgd2VhayBhbmQgcmV2ZXJzZSByZXF1aXJlcyBjYW4gYmUgYnVpbHQKKytBVF9TRVRVUChbV2VhayBhbmQgcmV2ZXJzZSByZXF1aXJlc10pCisrQVRfS0VZV09SRFMoW2J1aWxkXSkKKytBVF9DSEVDSyhbCisrCisrcnVucm9vdCBycG1idWlsZCAtYmIgLS1xdWlldCBcCisrCS0tZGVmaW5lICJwa2cgd2Vha2RlcHMiIFwKKysJLS1kZWZpbmUgInJlY3MgZm9vID4gMS4yLjMiIFwKKysJLS1kZWZpbmUgInN1Z3MgYmFyID49IDAuMS4yIiBcCisrCS0tZGVmaW5lICJzdXBzIGJheiIgXAorKwktLWRlZmluZSAiZW5zIHphcCA9IDMiIFwKKysJICAvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKKysKKytydW5yb290IHJwbSAtcXAgLS1xZiAiWyV7c3VwcGxlbWVudG5hbWV9XG5dIiAvYnVpbGQvUlBNUy9ub2FyY2gvZGVwdGVzdC13ZWFrZGVwcy0xLjAtMS5ub2FyY2gucnBtCisrXSwKKytbMF0sCisrW2JhegorK10sCisrW2lnbm9yZV0pCisrQVRfQ0xFQU5VUAorZGlmZiAtLWdpdCBhL3Rlc3RzL3JwbWdlbmVyYWwuYXQgYi90ZXN0cy9ycG1nZW5lcmFsLmF0CitpbmRleCAxMzEzMWUyLi44MGNjYTYzIDEwMDY0NAorLS0tIGEvdGVzdHMvcnBtZ2VuZXJhbC5hdAorKysrIGIvdGVzdHMvcnBtZ2VuZXJhbC5hdAorQEAgLTc5LDYgKzc5LDExIEBAIERJU1RUQUcKKyBESVNUVVJMCisgRFNBSEVBREVSCisgRQorK0VOSEFOQ0VGTEFHUworK0VOSEFOQ0VOQU1FCisrRU5IQU5DRU5FVlJTCisrRU5IQU5DRVMKKytFTkhBTkNFVkVSU0lPTgorIEVQT0NICisgRVBPQ0hOVU0KKyBFVlIKK0BAIC0xOTksNiArMjA0LDExIEBAIFBST1ZJREVTCisgUFJPVklERVZFUlNJT04KKyBQVUJLRVlTCisgUgorK1JFQ09NTUVOREZMQUdTCisrUkVDT01NRU5ETkFNRQorK1JFQ09NTUVORE5FVlJTCisrUkVDT01NRU5EUworK1JFQ09NTUVORFZFUlNJT04KKyBSRUNPTlRFWFRTCisgUkVMRUFTRQorIFJFTU9WRVRJRAorQEAgLTIxOSw3ICsyMjksMTcgQEAgU09VUkNFCisgU09VUkNFUEFDS0FHRQorIFNPVVJDRVBLR0lECisgU09VUkNFUlBNCisrU1VHR0VTVEZMQUdTCisrU1VHR0VTVE5BTUUKKytTVUdHRVNUTkVWUlMKKytTVUdHRVNUUworK1NVR0dFU1RWRVJTSU9OCisgU1VNTUFSWQorK1NVUFBMRU1FTlRGTEFHUworK1NVUFBMRU1FTlROQU1FCisrU1VQUExFTUVOVE5FVlJTCisrU1VQUExFTUVOVFMKKytTVVBQTEVNRU5UVkVSU0lPTgorIFRSSUdHRVJDT05EUworIFRSSUdHRVJGTEFHUworIFRSSUdHRVJJTkRFWApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4NGNmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorCitVc2UgcGtnY29uZmlnIHRvIGdldCB0aGUgY29ycmVjdCBpbmNsdWRlIHBhdGhzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTk3ZjcyNy4uODE3OWY0NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTQwLDEwICs1NDAsMTAgQEAgZXNhY10sCisgCisgQVNfSUYoW3Rlc3QgIiRlbmFibGVfcHl0aG9uIiA9IHllc10sWworICAgQU1fUEFUSF9QWVRIT04oWzIuNl0sWworLSAgICBXSVRIX1BZVEhPTl9JTkNMVURFPWAke1BZVEhPTn0gLWMgJ2Zyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgKjsgaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShnZXRfcHl0aG9uX2luYygpKSdgCisrICAgIFdJVEhfUFlUSE9OX0lOQ0xVREU9JCgke1BLR19DT05GSUd9IC0tY2ZsYWdzLW9ubHktSSAgcHl0aG9uKQorICAgICBXSVRIX1BZVEhPTl9TVUJQQUNLQUdFPTEKKyAgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorLSAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJFdJVEhfUFlUSE9OX0lOQ0xVREUiCisrICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFdJVEhfUFlUSE9OX0lOQ0xVREUiCisgICAgIEFDX0NIRUNLX0hFQURFUihbUHl0aG9uLmhdLFtdLAorICAgICAgIFtBQ19NU0dfRVJST1IoW21pc3NpbmcgUHl0aG9uLmhdKQorICAgICAgIF0pCitkaWZmIC0tZ2l0IGEvcHl0aG9uL01ha2VmaWxlLmFtIGIvcHl0aG9uL01ha2VmaWxlLmFtCitpbmRleCBmZmY1MWFlLi5mMzdjYjlkIDEwMDY0NAorLS0tIGEvcHl0aG9uL01ha2VmaWxlLmFtCisrKysgYi9weXRob24vTWFrZWZpbGUuYW0KK0BAIC00LDcgKzQsNyBAQCBFWFRSQV9ESVNUID0gcnBtL19faW5pdF9fLnB5IHJwbS90cmFuc2FjdGlvbi5weQorIAorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS8KKyBBTV9DUFBGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvcHl0aG9uCistQU1fQ1BQRkxBR1MgKz0gLUlAV0lUSF9QWVRIT05fSU5DTFVERUAKKytBTV9DUFBGTEFHUyArPSBAV0lUSF9QWVRIT05fSU5DTFVERUAKKyAKKyBwa2dweWV4ZWNfTFRMSUJSQVJJRVMgPSBfcnBtbW9kdWxlLmxhIF9ycG1ibW9kdWxlLmxhIF9ycG1zbW9kdWxlLmxhCisgcGtncHlleGVjX0RBVEEgPSBycG0vX19pbml0X18ucHkgcnBtL3RyYW5zYWN0aW9uLnB5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiYzMzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLzAwMDEtdXNpbmctcG9wdFBhcnNlQXJndlN0cmluZy10by1wYXJzZS10aGUtX2dwZ19jaGVja19wYS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDY0ODUxYzY2MjJhZmY2NDc4N2E5ZmNlYTI2Y2NjZGUxODNiN2M3NDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiUm95LkxpIiA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTEgTm92IDIwMTQgMTY6Mjg6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNpbmcgcG9wdFBhcnNlQXJndlN0cmluZyB0byBwYXJzZSB0aGUKKyBfZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQm90aCBfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgYW5kIF9fZ3BnX3NpZ25fY21kIGluY2x1ZGUgIiV7X2dwZ19uYW1lfSIsIGJ1dAorc3RyYWNlIHNob3dzIHRoYXQgZ3BnX25hbWUgaGFzIGEgcXVvdGUgd2hlbiBydW4gX2dwZ19jaGVja19wYXNzd29yZCwKK2J1dCBub3Qgd2hlbiBydW4gX19ncGdfc2lnbl9jbWQ7IGZvciBleGFtcGxlLCBpZiBncGdfbmFtZSBpcyAidGVzdGVyIgorCisgICAgZXhlY3ZlKCIvdXNyL2Jpbi9ncGciLCBbImdwZyIsICItLWJhdGNoIiwgIi0tbm8tdmVyYm9zZSIsCisgICAgIi0tcGFzc3BocmFzZS1mZCIsICIzIiwgIi11IiwgIlwidGVzdGVyXCIiLCAiLXNvIiwgIi0iXSwgWy8qIDIwIHZhcnMgKi9dKSA9IDAKKworICAgIGV4ZWN2ZSgiL3Vzci9iaW4vZ3BnIiwgWyJncGciLCAiLS1iYXRjaCIsICItLW5vLXZlcmJvc2UiLCAiLS1uby1hcm1vciIsCisgICAgIi0tcGFzc3BocmFzZS1mZCIsICIzIiwgIi0tbm8tc2VjbWVtLXdhcm5pbmciLCAiLXUiLCAidGVzdGVyIiwgIi1zYm8iLi4sKSA9IDAKKworaXQgY2FuIGJlIGZpeGVkIGJ5IHJlbW92aW5nIHRoZSBxdW90ZSBhcm91bmQgJXtncGdfbmFtZX0gd2hlbiBkZWZpbmUKK19fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZCBpbiBtYWNyb3MvbWFjcm9zLCBsaWtlIGJlbG93LCBidXQgaWYgZ3BnX25hbWUgaW5jbHVkZXMKK3NwYWNlLCBpdCB3aWxsIG5vdCB3b3JrLgorCisgICAgICVfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgICAgICAgJXtfX2dwZ30gXAorICAgICAgICBncGcgLS1iYXRjaCAtLW5vLXZlcmJvc2UgLS1wYXNzcGhyYXNlLWZkIDMgLXUgJXtfZ3BnX25hbWV9IC1zbyAtCisKK1RoZSBwb3B0UGFyc2VBcmd2U3RyaW5nIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgX2dwZ19zaWduX2NtZCwgc28gdXNpbmcKK3BvcHRQYXJzZUFyZ3ZTdHJpbmcgdG8gcGFyc2UgX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kIHRvIGZpeCB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBycG1kYi9zaWduYXR1cmUuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JwbWRiL3NpZ25hdHVyZS5jIGIvcnBtZGIvc2lnbmF0dXJlLmMKK2luZGV4IGMzNWUwYWIuLjAxNmU4ZDEgMTAwNjQ0CistLS0gYS9ycG1kYi9zaWduYXR1cmUuYworKysrIGIvcnBtZGIvc2lnbmF0dXJlLmMKK0BAIC01MjksNyArNTI5LDcgQEAgaW50IHJwbUNoZWNrUGFzc1BocmFzZShjb25zdCBjaGFyICogcGFzc1BocmFzZSkKKyAgIAkJKHZvaWQpIHNldGVudigiR05VUEdIT01FIiwgZ3BnX3BhdGgsIDEpOworIAorIAkgICAgY21kID0gcnBtRXhwYW5kKCIlez9fX2dwZ19jaGVja19wYXNzd29yZF9jbWR9IiwgTlVMTCk7CistCSAgICByYyA9IGFyZ3ZTcGxpdCgmYXYsIGNtZCwgTlVMTCk7CisrCSAgICByYyA9IHBvcHRQYXJzZUFyZ3ZTdHJpbmcoY21kLCBOVUxMLCAoY29uc3QgY2hhciAqKiopJmF2KTsKKyAJICAgIGlmICghcmMpCisgCQlyYyA9IGV4ZWN2ZShhdlswXSwgKGNoYXIgKmNvbnN0ICopYXYrMSwgZW52aXJvbik7CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRiZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGJjb252ZXJ0LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitIYWNrIHRvIHByZXZlbnQgdW5uZWVkZWQgZGVtbyBhcHAgZnJvbSBidWlsZGluZyBvbiBvbGRlciBsaWJjCit3aGVyZSBpdCB3aWxsIGJyZWFrIHRoZSBidWlsZAorCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0yOSw3ICsyOSw3IEBAIEVYVFJBX1BST0dSQU1TID0gbml4LWNvcHktY2xvc3VyZSBuaXgtZW4KKyAJeGl1LWluc3RhbnRpYXRlIHhpdS1zdG9yZQorIG5vaW5zdF9QUk9HUkFNUyA9CisgCistRVhUUkFfUFJPR1JBTVMgKz0gYXVndG9vbCBjdWRmdG9vbCBkYmNvbnZlcnQgZGVidWdlZGl0IFwKKytFWFRSQV9QUk9HUkFNUyArPSBhdWd0b29sIGN1ZGZ0b29sIGRlYnVnZWRpdCBcCisgCW5peC1idWlsZCBuaXgtY2hhbm5lbCBuaXgtY29sbGVjdC1nYXJiYWdlIFwKKyAJbml4LWxvZzJ4bWwgbml4LXByZWZldGNoLXVybCBuaXgtcHVsbCBuaXgtcHVzaCBcCisgCXhpdS1lY2hvIHhpdS1oYXNoIFwKK0BAIC02NCw3ICs2NCw3IEBAIHBrZ2Jpbl9QUk9HUkFNUyA9CVwKKyAJcnBtY2FjaGUgcnBtZGlnZXN0IHJwbXJlcG8gcnBtc3BlY2R1bXAgXAorIAlycG1jbXAgcnBtZGVwcyBycG1kZXBzLW9lY29yZSBzcWxpdGUzIEBXSVRIX0tFWVVUSUxTX1JQTUtFWUAgQFdJVEhfTElCRUxGX0RFQlVHRURJVEAKKyBpZiBXSVRIX0RCCistcGtnYmluX1BST0dSQU1TICs9CWRiY29udmVydAorK3BrZ2Jpbl9QUk9HUkFNUyArPQkKKyBlbmRpZgorIGRpc3RfbWFuX01BTlMgPQkJcnBtZ3JlcC4xCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtc2Vndi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC1zZWd2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWY1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtc2Vndi5wYXRjaApAQCAtMCwwICsxLDk4IEBACitEdXJpbmcgdGhlIHJlY2FsY3VsYXRpb24gb2YgdGhlIGJ1aWxkaWQsIGl0J3MgbmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGUgd29yZAorYmFjayB0byB0aGUgb3JpZ2luYWwgZW5kaWFuLiAgSG93ZXZlciwgaWYgd2UgZG8gdGhpcyBpbi1wbGFjZSwgd2UndmUgYWxzbworYWZmZWN0ZWQgdGhlIGhlYWRlcnMgdGhhdCB3ZSdyZSBhbHNvIHdvcmtpbmcgb24uICBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhpcyBpcword2UgY2FuIG5vIGxvbmdlciByZWx5IG9uICdzaF90eXBlJyBhcyBpdCBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IGFueSB0aW1lIHdlIHRyYW5zbGF0ZSB0aGUgbG9hZGVkIGRhdGEgdG8gdGhlIG1hY2hpbmUKK2Zvcm1hdCwgd2Ugb25seSBkbyBpdCBpbiBhIGJhY2t1cCBjb3B5IGFuZCBuZXZlciB0aGUgb3JpZ2luYWwgY29weS4KKworTm90ZTogaW4gYWxsIG90aGVyIHBsYWNlcyBhIGJhY2t1cCBjb3B5IHdhcyB1c2VkLCBqdXN0IG5vdCBidWlsZGlkIHByb2Nlc3NpbmcuCisKK0Fsc28gdGhlIHByb2Nlc3MgKC4uLikgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIHZlcmlmeSB0aGUgZGF0YSBpcyBub3QKK05VTEwgYXMgd2VsbC4gIFRoaXMgaXMgYW4gZXh0cmEgY2hlY2sgYW5kIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL2RlYnVnZWRpdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL2RlYnVnZWRpdC5jCisrKysgcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworQEAgLTE0NDUsMjEgKzE0NDUsMjQgQEAgaGFuZGxlX2J1aWxkX2lkIChEU08gKmRzbywgRWxmX0RhdGEgKmJ1aQorICAgICBhdXRvIGlubGluZSB2b2lkIHByb2Nlc3MgKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQorICAgICB7CisgICAgICAgbWVtY2h1bmsgY2h1bmsgPSB7IC5kYXRhID0gKHZvaWQgKikgZGF0YSwgLnNpemUgPSBzaXplIH07CistICAgICAgaGFzaEZ1bmN0aW9uQ29udGV4dFVwZGF0ZU1DICgmY3R4LCAmY2h1bmspOworKyAgICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSAhPSAwKQorKyAgICAgICAgaGFzaEZ1bmN0aW9uQ29udGV4dFVwZGF0ZU1DICgmY3R4LCAmY2h1bmspOworICAgICB9CisgICAgIHVuaW9uCisgICAgIHsKKyAgICAgICBHRWxmX0VoZHIgZWhkcjsKKyAgICAgICBHRWxmX1BoZHIgcGhkcjsKKyAgICAgICBHRWxmX1NoZHIgc2hkcjsKKy0gICAgfSB1OworLSAgICBFbGZfRGF0YSB4ID0geyAuZF92ZXJzaW9uID0gRVZfQ1VSUkVOVCwgLmRfYnVmID0gJnUgfTsKKysgICAgfSB1MSwgdTI7CisrICAgIEVsZl9EYXRhIHNyYyAgPSB7IC5kX3ZlcnNpb24gPSBFVl9DVVJSRU5ULCAuZF9idWYgPSAmdTEgfTsKKysgICAgRWxmX0RhdGEgZGVzdCA9IHsgLmRfdmVyc2lvbiA9IEVWX0NVUlJFTlQsIC5kX2J1ZiA9ICZ1MiB9OworIAorLSAgICB4LmRfdHlwZSA9IEVMRl9UX0VIRFI7CistICAgIHguZF9zaXplID0gc2l6ZW9mIHUuZWhkcjsKKy0gICAgdS5laGRyID0gZHNvLT5laGRyOworLSAgICB1LmVoZHIuZV9waG9mZiA9IHUuZWhkci5lX3Nob2ZmID0gMDsKKy0gICAgaWYgKGVsZjY0X3hsYXRldG9tICgmeCwgJngsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorKyAgICBzcmMuZF90eXBlID0gRUxGX1RfRUhEUjsKKysgICAgc3JjLmRfc2l6ZSA9IHNpemVvZiB1MS5laGRyOworKyAgICBkZXN0LmRfc2l6ZSA9IHNpemVvZiB1Mi5laGRyOworKyAgICB1MS5laGRyID0gZHNvLT5laGRyOworKyAgICB1MS5laGRyLmVfcGhvZmYgPSB1MS5laGRyLmVfc2hvZmYgPSAwOworKyAgICBpZiAoZWxmNjRfeGxhdGV0b20gKCZkZXN0LCAmc3JjLCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKyAgICAgICB7CisgICAgICAgYmFkOgorIAlmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gY29tcHV0ZSBoZWFkZXIgY2hlY2tzdW06ICVzXG4iLAorQEAgLTE0NjcsMjkgKzE0NzAsMzEgQEAgaGFuZGxlX2J1aWxkX2lkIChEU08gKmRzbywgRWxmX0RhdGEgKmJ1aQorIAlleGl0ICgxKTsKKyAgICAgICB9CisgCistICAgIHguZF90eXBlID0gRUxGX1RfUEhEUjsKKy0gICAgeC5kX3NpemUgPSBzaXplb2YgdS5waGRyOworKyAgICBzcmMuZF90eXBlID0gRUxGX1RfUEhEUjsKKysgICAgc3JjLmRfc2l6ZSA9IHNpemVvZiB1MS5waGRyOworKyAgICBkZXN0LmRfc2l6ZSA9IHNpemVvZiB1Mi5waGRyOworICAgICBmb3IgKGkgPSAwOyBpIDwgZHNvLT5laGRyLmVfcGhudW07ICsraSkKKyAgICAgICB7CistCWlmIChnZWxmX2dldHBoZHIgKGRzby0+ZWxmLCBpLCAmdS5waGRyKSA9PSBOVUxMKQorKwlpZiAoZ2VsZl9nZXRwaGRyIChkc28tPmVsZiwgaSwgJnUxLnBoZHIpID09IE5VTEwpCisgCSAgZ290byBiYWQ7CistCWlmIChlbGY2NF94bGF0ZXRvbSAoJngsICZ4LCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKysJaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgCSAgZ290byBiYWQ7CistCXByb2Nlc3MgKHguZF9idWYsIHguZF9zaXplKTsKKysJcHJvY2VzcyAoZGVzdC5kX2J1ZiwgZGVzdC5kX3NpemUpOworICAgICAgIH0KKyAKKy0gICAgeC5kX3R5cGUgPSBFTEZfVF9TSERSOworLSAgICB4LmRfc2l6ZSA9IHNpemVvZiB1LnNoZHI7CisrICAgIHNyYy5kX3R5cGUgPSBFTEZfVF9TSERSOworKyAgICBzcmMuZF9zaXplID0gc2l6ZW9mIHUxLnNoZHI7CisrICAgIGRlc3QuZF9zaXplID0gc2l6ZW9mIHUyLnNoZHI7CisgICAgIGZvciAoaSA9IDA7IGkgPCBkc28tPmVoZHIuZV9zaG51bTsgKytpKQorICAgICAgIGlmIChkc28tPnNjbltpXSAhPSBOVUxMKQorIAl7CistCSAgdS5zaGRyID0gZHNvLT5zaGRyW2ldOworLQkgIHUuc2hkci5zaF9vZmZzZXQgPSAwOworLQkgIGlmIChlbGY2NF94bGF0ZXRvbSAoJngsICZ4LCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKysJICB1MS5zaGRyID0gZHNvLT5zaGRyW2ldOworKwkgIHUxLnNoZHIuc2hfb2Zmc2V0ID0gMDsKKysJICBpZiAoZWxmNjRfeGxhdGV0b20gKCZkZXN0LCAmc3JjLCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKyAJICAgIGdvdG8gYmFkOworLQkgIHByb2Nlc3MgKHguZF9idWYsIHguZF9zaXplKTsKKysJICBwcm9jZXNzIChkZXN0LmRfYnVmLCBkZXN0LmRfc2l6ZSk7CisgCistCSAgaWYgKHUuc2hkci5zaF90eXBlICE9IFNIVF9OT0JJVFMpCisrCSAgaWYgKHUxLnNoZHIuc2hfdHlwZSAhPSBTSFRfTk9CSVRTKQorIAkgICAgeworIAkgICAgICBFbGZfRGF0YSAqZCA9IGVsZl9yYXdkYXRhIChkc28tPnNjbltpXSwgTlVMTCk7CisgCSAgICAgIGlmIChkID09IE5VTEwpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC12YWxpZC1maWxlLXRvLWZpeC1zZWdtZW50LWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YzMxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaApAQCAtMCwwICsxLDY1IEBACitkZWJ1Z2VkaXQ6IGZpeCBzZWdtZW50IGZhdWx0IHdoaWxlIGZpbGUncyBic3Mgb2Zmc2V0IGhhdmUgYSBsYXJnZSBudW1iZXIKKworV2hpbGUgRUxGX0NfUkRXUl9NTUFQIHdhcyB1c2VkLCBlbGZfYmVnaW4gaW52b2tlZCBtbWFwKCkgdG8gbWFwIGZpbGUKK2ludG8gbWVtb3J5LiBXaGlsZSB0aGUgZmlsZSdzIGJzcyBPZmZzZXQgaGFzIGEgbGFyZ2UgbnVtYmVyLCBlbGZfdXBkYXRlCitjYWN1bGF0ZWQgZmlsZSBzaXplIGJ5IF9fZWxmNjRfdXBkYXRlbnVsbF93cmxvY2sgYW5kIHRoZSBzaXplIHdhcworZW5sYXJnZWQuCisKK0luIHRoaXMgc2l0dWF0aW9uLCBlbGZfdXBkYXRlIGludm9rZWQgZnRydW5jYXRlIHRvIGVubGFyZ2UgdGhlIGZpbGUsCithbmQgbWVtb3J5IHNpemUgKGVsZi0+bWF4aW11bV9zaXplKSBhbHNvIHdhcyBpbmNvcnJlY3RseSB1cGRhdGVkLgorVGhlcmUgd2FzIHNlZ21lbnQgZmF1bHQgaW4gZWxmX2VuZCB3aGljaCBpbnZva2VkIG11bm1hcCB3aXRoIHRoZQorbGVuZ3RoIGlzIHRoZSBlbmxhcmdlZCBmaWxlIHNpemUsIG5vdCB0aGUgbW1hcCdzIGxlbmd0aC4KKworQmVmb3JlIHRoZSBhYm92ZSBvcGVyYXRpb25zLCBpbnZva2UgZWxmX2JlZ2luL2VsZl91cGRhdGUvZWxmX2VuZAord2l0aCBFTEZfQ19SRFdSIGFuZCBFTEZfRl9MQVlPVVQgc2V0IHRvIGVubGFyZ2UgdGhlIGFib3ZlIGZpbGUsIGl0Citjb3VsZCBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgc2FmZSBmb3IgdGhlIGZvbGxvd2luZyBlbGYgb3BlcmF0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyB0b29scy9kZWJ1Z2VkaXQuYyB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9kZWJ1Z2VkaXQuYworKysrIHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKK0BAIC0xNTI1LDYgKzE1MjUsMjggQEAgaGFuZGxlX2J1aWxkX2lkIChEU08gKmRzbywgRWxmX0RhdGEgKmJ1aQorICAgfQorIH0KKyAKKysvKiBJdCBhdm9pZGVkIHRoZSBzZWdtZW50IGZhdWx0IHdoaWxlIGZpbGUncyBic3Mgb2Zmc2V0IGhhdmUgYSBsYXJnZSBudW1iZXIuCisrICAgU2VlIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTAxOTcwNworKyAgICAgICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTEwMjA4NDIgZm9yIGRldGFpbC4gKi8KKyt2b2lkIHZhbGlkX2ZpbGUoaW50IGZkKQorK3sKKysgIEVsZiAqZWxmID0gZWxmX2JlZ2luIChmZCwgRUxGX0NfUkRXUiwgTlVMTCk7CisrICBpZiAoZWxmID09IE5VTEwpCisrICB7CisrICAgIGVycm9yICgxLCAwLCAiZWxmX2JlZ2luOiAlcyIsIGVsZl9lcnJtc2cgKC0xKSk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGVsZl9mbGFnZWxmIChlbGYsIEVMRl9DX1NFVCwgRUxGX0ZfTEFZT1VUKTsKKysKKysgIGlmIChlbGZfdXBkYXRlIChlbGYsIEVMRl9DX1dSSVRFKSA8IDApCisrICAgIGVycm9yICgxLCAwLCAiZWxmX3VwZGF0ZTogJXMiLCBlbGZfZXJybXNnICgtMSkpOworKworKyAgZWxmX2VuZCAoZWxmKTsKKysKKysgIHJldHVybjsKKyt9CisrCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CitAQCAtMTYyMSw2ICsxNjQzLDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBleGl0ICgxKTsKKyAgICAgfQorIAorKyAgLyogTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHZhbGlkLiAqLworKyAgdmFsaWRfZmlsZShmZCk7CisrCisgICBkc28gPSBmZG9wZW5fZHNvIChmZCwgZmlsZSk7CisgICBpZiAoZHNvID09IE5VTEwpCisgICAgIGV4aXQgKDEpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzZhZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorU29tZSBvcHRpb25zIGNoZWNrZWQgaW4gdGhpcyBsb29wIGFyZSBuZWVkaW5nIGxpbmtpbmcgdG8gZmluZCBvdXQKK2lmIHRoZSBvcHRpb24gY2FuIGJlIHVzZWQgb3Igbm90IGUuZy4gLWZzdGFjay1wcm90ZWN0b3Igd2hpY2ggbmVlZHMKK2xpYnNzcCB0byBiZSBzdGFnZWQgYW5kIGF2YWlsYWJsZSBmb3IgY29tcGlsZXIgdG8gbGluayBhZ2FpbnN0CitUaGVyZWZvcmUgd2UgY2hhbmdlIHRoZSBjb21waWxlIG9ubHkgY2hlY2sgdG8gY29tcGlsZSBhbmQgbGluayBjaGVjaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTIwMSw3ICsyMDEsNyBAQCBkbmwgIyBHTlUgR0NDICh1c3VhbGx5ICJnY2MiKQorICBteV9zYXZlX2NmbGFncz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSRjCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBHQ0Mgc3VwcG9ydHMgJGNdKQorLSBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdKV0sCisrIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10pXSwKKyAgICAgW0FDX01TR19SRVNVTFQoW3llc10pXQorICAgICBbbXlfY2ZsYWdzPSRjXSwKKyAgICAgW0FDX01TR19SRVNVTFQoW25vXSldCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmYjE4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9ycG1kYi5oCisrKysgcnBtLTUuNC4xNC9ycG1kYi9ycG1kYi5oCitAQCAtOSw2ICs5LDcgQEAKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPG1pcmUuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKyAKKyAjaW5jbHVkZSA8cnBtdHlwZXMuaD4KKyAjaW5jbHVkZSA8cnBtdGFnLmg+CS8qIFhYWCBIZWFkZXIgdHlwZWRlZiAqLworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvcnBtdGFnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtdGFnLmgKKysrKyBycG0tNS40LjE0L3JwbWRiL3JwbXRhZy5oCitAQCAtNyw2ICs3LDcgQEAKKyAKKyAjaW5jbHVkZSA8cnBtaW90eXBlcy5oPgorICNpbmNsdWRlIDxycG1zdy5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFiOWViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK3JwbTogUmVzb2x2ZSBwYXJhbGxlbCBpbnN0YWxsIGlzc3VlIHdoZW4gaW5zdGFsbGluZyBsdWEKKworV2hlbiBsdWEgaXMgYmVpbmcgaW5zdGFsbGVkIG9uIHNvbWUgc3lzdGVtcyB0aGF0IGFyZSBiZWluZyBydW4gd2l0aCBoaWdoIGxldmVscworb2YgcGFyYWxsZWxpemF0aW9uIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBpbnN0YWxsLWRhdGEtYW0gYW5kIGluc3RhbGwtZXhlYy1ob29rCithcmUgcHJvY2Vzc2VkIGF0IHRoZSBzYW1lIG9yIGEgdmVyeSBzaG9ydCB0aW1lIGFwYXJ0LiBUaGlzIGNhdXNlcworaW5zdGFsbC1wa2diaW5QUk9HUkFNUywgd2hpY2ggaXMgYSBkZXBlbmRlbmN5IG9mIGJvdGgsIHRvIGJlIHJ1biBhdCBhcm91bmQgdGhlCitzYW1lIHRpbWUgVGhpcyBzb21ldGltZXMgY2F1c2VzIGZpbGUgY29udGVudGlvbiBhbmQgd2lsbCBzb21ldGltZXMgYmUgaW4gYSBzdGF0ZQord2hlcmUgaW5zdGFsbC1leGVjLWhvb2sgaXMgbG9va2luZyBmb3IgYSBmaWxlIHRoYXQgaXMgYmVpbmcgaW5zdGFsbGVkIG9yIGJvdGgKK2luc3RhbGwtcGtnYmluUFJPR1JBTVMgYmVpbmcgcnVuIGFyZSBpbnN0YWxsaW5nIHRoZSBzYW1lIGZpbGUgYW5kIGZhaWwgYmVjYXVzZQoraXQgY2Fubm9uIGNyZWF0ZSBhIG5ldyBmaWxlLgorCitUaGlzIHBhdGNoIGFsbG93cyBpbnN0YWxsLWV4ZWMtaG9vayB0byBiZSBjYWxsZWQgYnkgaW5zdGFsbC1kYXRhLWFtIGluc3RlYWQgb2YKK2luc3RhbGwtZXhlYy1hbS4gSXQgYWxzbyByZW1vdmVkIHRoZSBkZXBlbmRlbmN5IGluIGluc3RhbGwtZGF0YS1ob29rIG9uCitpbnN0YWxsLXBrZ2JpblBST0dSQU1TLiBUaGlzIG1lYW5zIGluc3RhbGwtcGtnYmluUFJPR1JBTVMgd2lsbCBvbmx5IGJlIHJ1biBvbmNlCitzbyB0aGVyZSB3aG91bGQgYmUgYW55IGZpbGUgY29udGVudGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1vcmdhbiBMaXR0bGUgPG1vcmdhbi5saXR0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2x1YS9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCitAQCAtMzI2LDcgKzMyNiw3IEBAIGNsZWFuLWxvY2FsOgorICMgWFhYIEJ1aWxkICYgaW5zdGFsbCBhcyBycG1sdWEvcnBtbHVhYyB3aXRoIGhhcmRsaW5rcyB0byBsdWEvbHVhYyBwb3N0IGluc3RhbGwuCisgIyBYWFggQ1ZTIGhhcyBsdWEvbHVhYyBzdWItZGlyZWN0b3JpZXMgaW4gdGhlIEF0dGljIHRoYXQgY29sbGlkZSB3aXRoIHRoZQorICMgWFhYIGx1YS9sdWFjIGV4ZWN1dGFibGUgbmFtZXMgd2hlbiB1c2luZyBjdnMgdXBkYXRlLgorLWluc3RhbGwtZXhlYy1ob29rOglpbnN0YWxsLXBrZ2JpblBST0dSQU1TCisraW5zdGFsbC1kYXRhLWhvb2s6CQorIAlta2RpciAtcCAkKERFU1RESVIpJChwa2diaW5kaXIpCisgCSQoX19STSkgLWYgJChERVNURElSKSQocGtnYmluZGlyKS9sdWEKKyAJJChfX0xOKSAkKERFU1RESVIpJChwa2diaW5kaXIpL3JwbWx1YSAkKERFU1RESVIpJChwa2diaW5kaXIpL2x1YQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9uby1sZGZsYWdzLWluLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA2MjNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorRG9uJ3QgcHV0IExERkxBR1MgaW50byB0aGUgTGlicy5wcml2YXRlLCBhbGwgaXQgZ2VuZXJhbGx5IGNvbnRhaW5zIGlzIGEgbGlua2VyCitoYXNoIHNlbGVjdGlvbiAoaGFybWxlc3MpIGFuZCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGliZGlyIGluIHRoZSBzeXNyb290CisoYWN0aXZlbHkgaGFybWZ1bCkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NjcmlwdHMvcnBtLnBjLmluIGIvc2NyaXB0cy9ycG0ucGMuaW4KK2luZGV4IDgyOTM0NzEuLjJlYTQ2OWMgMTAwNjQ0CistLS0gYS9zY3JpcHRzL3JwbS5wYy5pbgorKysrIGIvc2NyaXB0cy9ycG0ucGMuaW4KK0BAIC0xNyArMTcgQEAgTGliczogLUwke2xpYmRpcn0gLWxycG1idWlsZCR7c3VmZml4fSAtbHJwbSR7c3VmZml4fSAtbHJwbWRiJHtzdWZmaXh9IC1scnBtaW8ke3MKKy1MaWJzLnByaXZhdGU6IEBMREZMQUdTQCBATElCU0AKKytMaWJzLnByaXZhdGU6IEBMSUJTQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3MmM5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL2Jhc2gKKworOiAke1JQTURFUFM6PXJwbWRlcHN9CisKK3Byb2Nlc3MoKSB7CisJd2hpbGUgcmVhZCBmaWxlX25hbWUgOyBkbworCQlwcmludGYgIiVzXHQiICR7ZmlsZV9uYW1lfQorCQlpZiBbICEgLWQgJGZpbGVfbmFtZSBdOyB0aGVuCisJCQlwcmludGYgIiVzICIgJCgkUlBNREVQUyAkMSAkZmlsZV9uYW1lIHwgc2VkIC1lICdzLHJwbWxpYiguKiwsJyAtZSAncyxcKFs8Plw9XVwrIFwrW14gXSpcKSwoXDEpLGcnKQorCQlmaQorCQlwcmludGYgIlxuIgorCWRvbmUKK30KKwordXNhZ2UoKSB7CisJZWNobyAiJDAgey1QfC0tcHJvdmlkZXN9IHstUnwtLXJlcXVpcmVzfSBGSUxFIC4uLiIKK30KKword2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworICAgY2FzZSAiJDEiIGluCisJLS1ycG1kZXBzKQorCQlSUE1ERVBTPSQyCisJCXNoaWZ0CisJCXNoaWZ0CisJCTs7CisJLVJ8LS1yZXF1aXJlcykKKwkJcHJvY2Vzc190eXBlPS0tcmVxdWlyZXMKKwkJc2hpZnQKKwkJOzsKKwktUHwtLXByb3ZpZGVzKQorCQlwcm9jZXNzX3R5cGU9LS1wcm92aWRlcworCQlzaGlmdAorCQk7OworCSopCisJCWJyZWFrOworCQk7OworICAgZXNhYworZG9uZQorCitpZiBbIC16ICIkcHJvY2Vzc190eXBlIiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgJCMgLWd0IDAgXTsgdGhlbgorCWZpbmQgIiRAIiB8IHByb2Nlc3MgJHByb2Nlc3NfdHlwZQorCWV4aXQgJD8KK2ZpCisKK3Byb2Nlc3MgJHByb2Nlc3NfdHlwZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzOGE2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorcnBtbW9kdWxlLmM6IEV4cG9ydCBhIGZldyBhZGRpdGlvbmFsIFJQTVNFTlNFIHZhbHVlcworCitXZSB3YW50IHRvIHNlZSB0aGUgUlBNU0VOU0VfU0NSSVBUIHZhbHVlcyBmb3IgdXNlIHdpdGggU01BUlQuICBXZSBhbHNvCit3YW50IHRvIHNlZSB0aGUgTUlTU0lOR09LIHZhbHVlIHNvIHdlIGNhbiBhdm9pZCByZWNvbW1lbmRlZCBwYWNrYWdlcyBjYXVzaW5nCitmYWlsdXJlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3B5dGhvbi9ycG1tb2R1bGUuYworKysrIHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCitAQCAtNDk0LDEyICs0OTQsMTYgQEAgdm9pZCBpbml0X3JwbSh2b2lkKQorICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0VRVUFMKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9OT1RFUVVBTCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfRklORF9SRVFVSVJFUyk7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfUFJFUkVRKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUFJFKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUE9TVCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BSRVVOKTsKKy0gICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUE9TVFVOKQorKyAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QT1NUVU4pOworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisrICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfTUlTU0lOR09LKTsKKyAjZW5kaWYKKyAKKyAgICAgUkVHSVNURVJfRU5VTShSUE1ERVBTX0ZMQUdfTk9VUEdSQURFKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbmRlcHMuc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob25kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4M2IxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob25kZXBzLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitbICQjIC1nZSAxIF0gfHwgeworICAgIGNhdCA+IC9kZXYvbnVsbAorICAgIGV4aXQgMAorfQorCitjYXNlICQxIGluCistUnwtLXJlcXVpcmVzKQorICAgIHNoaWZ0CisgICAgZ3JlcCAiL3Vzci9cKGxpYlteL10qXHxzaGFyZVwpL3B5dGhvblteL10qLyIgPi9kZXYvbnVsbCAmJiBlY2hvICJweXRob24iCisgICAgZXhpdCAwCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxMy02NDM1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDdlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaApAQCAtMCwwICsxLDEwOSBAQAorRnJvbSAwODEwNWFjZGExZGE2M2QzMmZiYjE4NTk2YTNkNmMzZTBhYTEwNmQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTAgSnVuIDIwMTUgMTQ6MzY6NTYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHJwbTogQ1ZFLTIwMTMtNjQzNQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JlZmVyZW5jZToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9Q1ZFLTIwMTMtNjQzNQorCitEZXNjcmlwdGlvbjoKK0l0IHdhcyBmb3VuZCB0aGF0IFJQTSB3cm90ZSBmaWxlIGNvbnRlbnRzIHRvIHRoZSB0YXJnZXQgaW5zdGFsbGF0aW9uCitkaXJlY3RvcnkgdW5kZXIgYSB0ZW1wb3JhcnkgbmFtZSwgYW5kIHZlcmlmaWVkIGl0cyBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZQorb25seSBhZnRlciB0aGUgdGVtcG9yYXJ5IGZpbGUgaGFzIGJlZW4gd3JpdHRlbiBjb21wbGV0ZWx5LiBVbmRlciBjZXJ0YWluCitjb25kaXRpb25zLCB0aGUgc3lzdGVtIGludGVycHJldHMgdGhlIHVudmVyaWZpZWQgdGVtcG9yYXJ5IGZpbGUgY29udGVudHMKK2FuZCBleHRyYWN0cyBjb21tYW5kcyBmcm9tIGl0LiBUaGlzIGNvdWxkIGFsbG93IGFuIGF0dGFja2VyIHRvIG1vZGlmeQorc2lnbmVkIFJQTSBmaWxlcyBpbiBzdWNoIGEgd2F5IHRoYXQgdGhleSB3b3VsZCBleGVjdXRlIGNvZGUgY2hvc2VuCitieSB0aGUgYXR0YWNrZXIgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uLgorCitPcmlnaW5hbCBQYXRjaDoKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD05NTYyMDcKKworU2lnbmVkLW9mZi1ieTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGxpYi9mc20uYyAgICAgfCAgMiArLQorIHJwbWlvL3JwbWlvLmMgfCAxOCArKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZnNtLmMgYi9saWIvZnNtLmMKK2luZGV4IDFlZTdlNjcuLjA5NGViMWQgMTAwNjQ0CistLS0gYS9saWIvZnNtLmMKKysrKyBiL2xpYi9mc20uYworQEAgLTcyNiw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IGV4cGFuZFJlZ3VsYXIoRlNNX3QgZnNtLCBycG1wc20gcHNtLCBycG1jcGlvX3QgYXJjaGl2ZSwgaW50IG5vZGlnZXN0KQorIHsKKyAgICAgRkRfdCB3ZmQgPSBOVUxMOworICAgICBjb25zdCBzdHJ1Y3Qgc3RhdCAqIHN0ID0gJmZzbS0+c2I7CistICAgIHJwbV9sb2ZmX3QgbGVmdCA9IHN0LT5zdF9zaXplOworKyAgICBycG1fbG9mZl90IGxlZnQgPSBycG1maUZTaXplSW5kZXgoZnNtR2V0RmkoZnNtKSwgZnNtLT5peCk7CisgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBmaWRpZ2VzdCA9IE5VTEw7CisgICAgIHBncEhhc2hBbGdvIGRpZ2VzdGFsZ28gPSAwOworICAgICBpbnQgcmMgPSAwOworZGlmZiAtLWdpdCBhL3JwbWlvL3JwbWlvLmMgYi9ycG1pby9ycG1pby5jCitpbmRleCBjZDIyM2U4Li4wYjEyZTMxIDEwMDY0NAorLS0tIGEvcnBtaW8vcnBtaW8uYworKysrIGIvcnBtaW8vcnBtaW8uYworQEAgLTEzMDksMTUgKzEzMDksMTkgQEAgaW50IEZjbG9zZShGRF90IGZkKQorICAqIC0gYnpvcGVuOglbMS05XSBpcyBibG9jayBzaXplIChtb2R1bG8gMTAwSykKKyAgKiAtIGJ6b3BlbjoJJ3MnIGlzIHNtYWxsbW9kZQorICAqIC0gSEFDSzoJJy4nIHRlcm1pbmF0ZXMsIHJlc3QgaXMgdHlwZSBvZiBJL08KKysgKiAtICAgICAgICAgICAgJ1UnIHNldHMgKm1vZGUgdG8gemVybyAobm8gcGVybWlzc2lvbnMpIGluc3RlYWQgb2YgMDY2NgorICAqLworIHN0YXRpYyB2b2lkIGN2dGZtb2RlIChjb25zdCBjaGFyICptLAorIAkJCQljaGFyICpzdGRpbywgc2l6ZV90IG5zdGRpbywKKyAJCQkJY2hhciAqb3RoZXIsIHNpemVfdCBub3RoZXIsCistCQkJCWNvbnN0IGNoYXIgKiplbmQsIGludCAqIGYpCisrCQkJCWNvbnN0IGNoYXIgKiplbmQsIGludCAqZiwgbW9kZV90ICptb2RlKQorIHsKKyAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgY2hhciBjOworIAorKyAgICBpZiAobW9kZSkKKysgICAgKm1vZGUgPSAwNjY2OworKworICAgICBzd2l0Y2ggKCptKSB7CisgICAgIGNhc2UgJ2EnOgorIAlmbGFncyB8PSBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0FQUEVORDsKK0BAIC0xMzU3LDYgKzEzNjEsMTAgQEAgc3RhdGljIHZvaWQgY3Z0Zm1vZGUgKGNvbnN0IGNoYXIgKm0sCisgCSAgICBpZiAoLS1uc3RkaW8gPiAwKSAqc3RkaW8rKyA9IGM7CisgCSAgICBjb250aW51ZTsKKyAJICAgIGJyZWFrOworKwljYXNlICdVJzoKKysJICAgIGlmIChtb2RlKQorKwkJKm1vZGUgPSAwOworKwkgICAgYnJlYWs7CisgCWRlZmF1bHQ6CisgCSAgICBpZiAoLS1ub3RoZXIgPiAwKSAqb3RoZXIrKyA9IGM7CisgCSAgICBjb250aW51ZTsKK0BAIC0xMzg1LDcgKzEzOTMsOCBAQCBmcHJpbnRmKHN0ZGVyciwgIioqKiBGZG9wZW4oJXAsJXMpICVzXG4iLCBmZCwgZm1vZGUsIGZkYmcoZmQpKTsKKyAgICAgaWYgKGZkID09IE5VTEwgfHwgZm1vZGUgPT0gTlVMTCkKKyAJcmV0dXJuIE5VTEw7CisgCistICAgIGN2dGZtb2RlKGZtb2RlLCBzdGRpbywgc2l6ZW9mKHN0ZGlvKSwgb3RoZXIsIHNpemVvZihvdGhlciksICZlbmQsIE5VTEwpOworKyAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCBOVUxMLAorKyAgICAgICAgTlVMTCk7CisgICAgIGlmIChzdGRpb1swXSA9PSAnXDAnKQorIAlyZXR1cm4gTlVMTDsKKyAgICAgenN0ZGlvWzBdID0gJ1wwJzsKK0BAIC0xNDM2LDcgKzE0NDUsNyBAQCBGRF90IEZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtb2RlKQorIHsKKyAgICAgY2hhciBzdGRpb1syMF0sIG90aGVyWzIwXTsKKyAgICAgY29uc3QgY2hhciAqZW5kID0gTlVMTDsKKy0gICAgbW9kZV90IHBlcm1zID0gMDY2NjsKKysgICAgbW9kZV90IHBlcm1zOworICAgICBpbnQgZmxhZ3MgPSAwOworICAgICBGRF90IGZkOworIAorQEAgLTE0NDQsNyArMTQ1Myw4IEBAIEZEX3QgRm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm1vZGUpCisgCXJldHVybiBOVUxMOworIAorICAgICBzdGRpb1swXSA9ICdcMCc7CistICAgIGN2dGZtb2RlKGZtb2RlLCBzdGRpbywgc2l6ZW9mKHN0ZGlvKSwgb3RoZXIsIHNpemVvZihvdGhlciksICZlbmQsICZmbGFncyk7CisrICAgIGN2dGZtb2RlKGZtb2RlLCBzdGRpbywgc2l6ZW9mKHN0ZGlvKSwgb3RoZXIsIHNpemVvZihvdGhlciksICZlbmQsICZmbGFncywKKysgICAgICAgICZwZXJtcyk7CisgICAgIGlmIChzdGRpb1swXSA9PSAnXDAnKQorIAlyZXR1cm4gTlVMTDsKKyAKKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxNC04MTE4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTc5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDcxYzgxMmVkZjE0MzFhOTk2N2JkOTliYTZmZmE2YWI4OWViN2VjN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMCBKdW4gMjAxNSAxMjo1Njo1NSArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gcnBtOiBDVkUtMjAxNC04MTE4CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUmVmZXJlbmNlOgoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMTY4NzE1CisKK0Rlc2NyaXB0aW9uOgorSXQgd2FzIGZvdW5kIHRoYXQgUlBNIGNvdWxkIGVuY291bnRlciBhbiBpbnRlZ2VyIG92ZXJmbG93LAorbGVhZGluZyB0byBhIHN0YWNrLWJhc2VkIG92ZXJmbG93LCB3aGlsZSBwYXJzaW5nIGEgY3JhZnRlZAorQ1BJTyBoZWFkZXIgaW4gdGhlIHBheWxvYWQgc2VjdGlvbiBvZiBhbiBSUE0gZmlsZS4gIFRoaXMgY291bGQKK2FsbG93IGFuIGF0dGFja2VyIHRvIG1vZGlmeSBzaWduZWQgUlBNIGZpbGVzIGluIHN1Y2ggYSB3YXkgdGhhdAordGhleSB3b3VsZCBleGVjdXRlIGNvZGUgY2hvc2VuIGJ5IHRoZSBhdHRhY2tlciBkdXJpbmcgcGFja2FnZQoraW5zdGFsbGF0aW9uLgorCitPcmlnaW5hbCBQYXRjaDoKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD05NjIxNTkKKworU2lnbmVkLW9mZi1ieTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGxpYi9jcGlvLmMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYi9jcGlvLmMgYi9saWIvY3Bpby5jCitpbmRleCAzODJlZWI2Li43NGRkZDljIDEwMDY0NAorLS0tIGEvbGliL2NwaW8uYworKysrIGIvbGliL2NwaW8uYworQEAgLTI5Niw2ICsyOTYsOSBAQCBpbnQgcnBtY3Bpb0hlYWRlclJlYWQocnBtY3Bpb190IGNwaW8sIGNoYXIgKiogcGF0aCwgc3RydWN0IHN0YXQgKiBzdCkKKyAgICAgc3QtPnN0X3JkZXYgPSBtYWtlZGV2KG1ham9yLCBtaW5vcik7CisgCisgICAgIEdFVF9OVU1fRklFTEQoaGRyLm5hbWVzaXplLCBuYW1lU2l6ZSk7CisrICAgIGlmIChuYW1lU2l6ZSA8PSAwIHx8IG5hbWVTaXplID4gNDA5NikgeworKyAgICAgICAgcmV0dXJuIENQSU9FUlJfQkFEX0hFQURFUjsKKysgICAgfQorIAorICAgICAqcGF0aCA9IHhtYWxsb2MobmFtZVNpemUgKyAxKTsKKyAgICAgcmVhZCA9IEZyZWFkKCpwYXRoLCBuYW1lU2l6ZSwgMSwgY3Bpby0+ZmQpOworLS0gCisxLjguNC41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1hdXRvZ2VuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWF1dG9nZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MTIzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1hdXRvZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1JlbW92ZSB0aGUgc2FuaXR5IGNoZWNraW5nIGZyb20gdGhlIHJwbSBhdXRvZ2VuLnNoLiAgVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlCit3ZSBtYXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQsIGJ1dCB5ZXQgY29tcGF0aWJsZSB2ZXJzaW9ucy4gIElmIHdlIGRvIGVuZAordXAgYnJlYWtpbmcgdGhpbmdzLCB3ZSdsbCBkZWFsIHdpdGggaXQgYXQgdGhhdCB0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvc3ljay9hdXRvZ2VuLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5Y2svYXV0b2dlbi5zaAorKysrIHJwbS01LjQuMTQvc3ljay9hdXRvZ2VuLnNoCitAQCAtMzQsMTIgKzM0LDYgQEAgbGlidG9vbGl6ZSAoKSB7CisgICAgIGV2YWwgJF9saWJ0b29saXplICRfbGlidG9vbGl6ZV9hcmdzCisgfQorIAorLSMgICByZXF1aXJlbWVudHMgc2FuaXR5IGNoZWNrCistWyAiYGF1dG9tYWtlICAgLS12ZXJzaW9uIHwgaGVhZCAtMWAiICE9ICIkQU1WIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy1bICJgYXV0b2NvbmYgICAtLXZlcnNpb24gfCBoZWFkIC0xYCIgIT0gIiRBQ1YiIF0gJiYgZWNobyAiJFVTQUdFIiAjICYmIGV4aXQgMQorLVsgImBsaWJ0b29saXplIC0tdmVyc2lvbiB8IGhlYWQgLTFgIiAhPSAiJExUViIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistWyAiYGdldHRleHRpemUgLS12ZXJzaW9uIHwgaGVhZCAtMSB8IHNlZCAtZSAnczteLiovXFwoZ2V0dGV4dGl6ZVxcKTtcXDE7J2AiICE9ICIkR1RUIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy0KKyBlY2hvICItLS0+IGdlbmVyYXRlIGZpbGVzIHZpYSBHTlUgbGlidG9vbCAobGlidG9vbGl6ZSkiCisgbGlidG9vbGl6ZSAtLXF1aWV0IC0tY29weSAtLWZvcmNlIC0taW5zdGFsbAorIGVjaG8gIi0tLT4gZ2VuZXJhdGUgZmlsZXMgdmlhIEdOVSBhdXRvY29uZiAoYWNsb2NhbCwgYXV0b2hlYWRlcikiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2Fub25hcmNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNhbm9uYXJjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFiNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNhbm9uYXJjaC5wYXRjaApAQCAtMCwwICsxLDEzNiBAQAorbGliL3JwbXJjLmM6IFVwZGF0ZSAtLXRhcmdldCBwcm9jZXNzaW5nIHRvIHN1cHBvcnQgZnVsbCBHTlUgY2Fub25pY2FsIGFyY2gKKworUHJpb3IgdG8gdGhpcyBwYXRjaCwgd2hlbiB1c2luZyAtLXRhcmdldCwgUlBNIHN1cHBvcnRlZCB0aGUgZm9ybWF0OgorICA8YXJjaD4KKyAgPGFyY2g+LTxvcz4KKyAgPGFyY2g+LTxvcz4tZ251CisgIDxhcmNoPi08YXJiaXRyYXJ5IGl0ZW1zPi08b3M+CisgIDxhcmNoPi08YXJiaXRyYXJ5IGl0ZW1zPi08b3M+LWdudQorCitUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGl0ZW1zIHRvOgorICA8YXJjaD4KKyAgPGFyY2g+LTxvcz4KKyAgPGFyY2g+LTxvcz4tZ251CisgIDxhcmNoPi08dmVuZG9yPi08b3M+CisgIDxhcmNoPi08dmVuZG9yPi08b3M+LTxleHRlbnNpb24+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTkyNSw4ICs5MjUsOCBAQCBzdGF0aWMgdm9pZCBnZXRNYWNoaW5lSW5mbyhpbnQgdHlwZSwgLypACisgCisgc3RhdGljIHZvaWQgcnBtUmVidWlsZFRhcmdldFZhcnMoY29uc3QgY2hhciAqKiB0YXJnZXQsIGNvbnN0IGNoYXIgKiogY2Fub250YXJnZXQpCisgeworLQorLSAgICBjaGFyICpjYSA9IE5VTEwsICpjbyA9IE5VTEwsICpjdCA9IE5VTEw7CisrICAgIC8qIGNhID0gYXJjaCwgY3YgPSB2ZW5kb3IsIGNvID0gb3MsIGNlID0gZXh0ZW5zaW9uLCBjdCA9IGNhbm9uIHRhcmdldCAqLworKyAgICBjaGFyICpjYSA9IE5VTEwsICpjdiA9IE5VTEwsICpjbyA9IE5VTEwsICpjZSA9IE5VTEwsICpjdCA9IE5VTEw7CisgICAgIGludCB4OworIAorICAgICAvKiBSZWJ1aWxkIHRoZSBjb21wYXQgdGFibGUgdG8gcmVjYWxjdWxhdGUgdGhlIGN1cnJlbnQgdGFyZ2V0IGFyY2guICAqLworQEAgLTkzNiwyMyArOTM2LDYwIEBAIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGMKKyAgICAgcnBtU2V0VGFibGVzKFJQTV9NQUNIVEFCTEVfQlVJTERBUkNILCBSUE1fTUFDSFRBQkxFX0JVSUxET1MpOworIAorICAgICBpZiAodGFyZ2V0ICYmICp0YXJnZXQpIHsKKysJLyogR05VIGNhbm9uaWNhbCBmb3JtYXQgaXM6CisrCSAqICA8YXJjaD4tPHZlbmRvcj4tPG9zPlstZXh0ZW5zaW9uXQorKwkgKgorKwkgKiBXZSBzdXBwb3J0IHRoZSBib3RoIHRoZSBHTlUgY2Fub25pY2FsIGZvcm1hdAorKwkgKiBhcyB3ZWxsIGFzIHRoZSB0cmFkaXRpb25hbCBSUE0gZm9ybWF0czogCisrCSAqICA8YXJjaD4KKysJICogIDxhcmNoPi08b3M+Wy1nbnVdCisrCSAqLworIAljaGFyICpjOworIAkvKiBTZXQgYXJjaCBhbmQgb3MgZnJvbSBzcGVjaWZpZWQgYnVpbGQgdGFyZ2V0ICovCisgCWNhID0geHN0cmR1cCgqdGFyZ2V0KTsKKy0JaWYgKChjID0gc3RyY2hyKGNhLCAnLScpKSAhPSBOVUxMKSB7CisrCWlmICgoYyA9IHN0cmNocihjYSwgJy0nKSkgPT0gTlVMTCkgeworKwkgICAgLyogRm9ybWF0IGlzIDxhcmNoPiAqLworKwkgICAgOworKwl9IGVsc2UgeworIAkgICAgKmMrKyA9ICdcMCc7CistCSAgICAKKy0JICAgIGlmICgoY28gPSBzdHJyY2hyKGMsICctJykpID09IE5VTEwpIHsKKy0JCWNvID0gYzsKKysJICAgIGN2ID0gYzsKKysKKysJICAgIGlmICgoYyA9IHN0cmNocihjLCAnLScpKSA9PSBOVUxMKSB7CisrCQkvKiBGb3JtYXQgaXMgPGFyY2g+LTxvcz4gKi8KKysJCWNvID0gY3Y7CisrCQljdiA9IE5VTEw7CisgCSAgICB9IGVsc2UgeworLQkJaWYgKCF4c3RyY2FzZWNtcChjbywgIi1nbnUiKSkKKy0JCSAgICAqY28gPSAnXDAnOworLQkJaWYgKChjbyA9IHN0cnJjaHIoYywgJy0nKSkgPT0gTlVMTCkKKy0JCSAgICBjbyA9IGM7CistCQllbHNlCistCQkgICAgY28rKzsKKysJCSpjKysgPSAnXDAnOworKwkJY28gPSBjOworKworKwkJaWYgKChjID0gc3RyY2hyKGMsICctJykpID09IE5VTEwpIHsKKysJCSAgICAvKiBNaWdodCBiZToKKysJCSAgICAgKiAgPGFyY2g+LTx2ZW5kb3I+LTxvcz4KKysJCSAgICAgKiAgPGFyY2g+LTxvcz4tZ251CisrCQkgICAgICovCisrCQkgICAgaWYgKCF4c3RyY2FzZWNtcChjbywgImdudSIpKSB7CisrCQkJLyogRm9ybWF0IHdhcyA8YXJjaD4tPG9zPi1nbnUgKi8KKysJCQljZSA9IGNvOworKwkJCWNvID0gY3Y7CisrCQkJY3YgPSBOVUxMOworKwkJICAgIH0KKysJCX0gZWxzZSB7CisrCQkgICAgLyogRm9ybWF0IHdhcyA8YXJjaD4tPHZlbmRvcj4tPG9zPi08ZXh0ZW5zaW9uPiAqLworKwkJICAgICpjKysgPSAnXDAnOworKwkJICAgIGNlID0gYzsKKysJCX0KKyAJICAgIH0KKysJICAgIGlmIChjdiAhPSBOVUxMKSBjdiA9IHhzdHJkdXAoY3YpOworIAkgICAgaWYgKGNvICE9IE5VTEwpIGNvID0geHN0cmR1cChjbyk7CisrCSAgICBpZiAoY2UgIT0gTlVMTCkgeworKwkJLyogV2UgbmVlZCB0byBwcmVmaXggaXQgd2l0aCBhICItIiAqLworKwkJY2hhciAqIGxjZSA9IE5VTEw7CisrCisrCQlsY2UgPSB4bWFsbG9jKHN0cmxlbihjZSkgKyBzaXplb2YoIi0iKSk7CisrCQlzcHJpbnRmKGxjZSwgIi0lcyIsIGNlKTsKKysKKysJCWNlID0gbGNlOworKwkgICAgfQorIAl9CisgICAgIH0gZWxzZSB7CisgCWNvbnN0IGNoYXIgKmEgPSBOVUxMOworQEAgLTk5NSw4ICsxMDMyLDE2IEBAIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGMKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl90YXJnZXQiLCBOVUxMLCBjdCwgUk1JTF9SUE1SQyk7CisgICAgIGRlbE1hY3JvKE5VTEwsICJfdGFyZ2V0X2NwdSIpOworICAgICBhZGRNYWNybyhOVUxMLCAiX3RhcmdldF9jcHUiLCBOVUxMLCBjYSwgUk1JTF9SUE1SQyk7CisrICAgIGlmIChjdikgeworKwlkZWxNYWNybyhOVUxMLCAiX3RhcmdldF92ZW5kb3IiKTsKKysJYWRkTWFjcm8oTlVMTCwgIl90YXJnZXRfdmVuZG9yIiwgTlVMTCwgY3YsIFJNSUxfUlBNUkMpOworKyAgICB9CisgICAgIGRlbE1hY3JvKE5VTEwsICJfdGFyZ2V0X29zIik7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0X29zIiwgTlVMTCwgY28sIFJNSUxfUlBNUkMpOworKyAgICBpZiAoY2UpIHsKKysJZGVsTWFjcm8oTlVMTCwgIl9nbnUiKTsKKysJYWRkTWFjcm8oTlVMTCwgIl9nbnUiLCBOVUxMLCBjZSwgUk1JTF9SUE1SQyk7CisrICAgIH0KKyAKKyAgICAgaWYgKGNhbm9udGFyZ2V0KQorIAkqY2Fub250YXJnZXQgPSBjdDsKK0BAIC0xMDA0LDggKzEwNDksMTIgQEAgc3RhdGljIHZvaWQgcnBtUmVidWlsZFRhcmdldFZhcnMoY29uc3QgYworIAljdCA9IF9mcmVlKGN0KTsKKyAgICAgY2EgPSBfZnJlZShjYSk7CisgICAgIC8qQC11c2VyZWxlYXNlZEAqLworKyAgICBjdiA9IF9mcmVlKGN2KTsKKysgICAgLypALXVzZXJlbGVhc2VkQCovCisgICAgIGNvID0gX2ZyZWUoY28pOworICAgICAvKkA9dXNlcmVsZWFzZWRAKi8KKysgICAgY2UgPSBfZnJlZShjZSk7CisrICAgIC8qQC11c2VyZWxlYXNlZEAqLworIH0KKyAKKyB2b2lkIHJwbUZyZWVScG1yYyh2b2lkKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODYwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2hlY2stcm9vdHBhdGgtcmVhc29uYWJsZW5lc3MucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorcnBtOiBjaGVjayBpZiB0aGUgYXJndW1lbnQocm9vdHBhdGgpIGV4aXN0cyBvciBiZSB3cml0YWJsZQorCitXaGVuIHVzZXIgZXhlY3V0ZSB0aGUgY29tbWFuZCAicnBtIC1xYWkgLS1yb290PSRkaXIiLGlmICRkaXIgZG9lc24ndAorZXhpc3Qgb3IgaXMgdW53cml0YWJsZSBhcyByZXN1bHQgb2YgbWFraW5nIGEgdHlwbyBpbiByb290cGF0aCx0aGVuCitpdCB3aWxsIGNyZWF0ZSBkaXJlbnQgJGRpciBhbmQgc3ViZGlyZWN0b3J5LgorU28gd2Ugc2hvdWxkIGFkZCB0aGUgY2hlY2sgZnVuY3Rpb24gdG8gZml4IGl0IGJlZm9yZSBjcmVhdGluZyByZWxhdGlvbmFsCitzdWJkaXJlY3RvcnksYW5kIHdhcm4gdGhlIGluY29ycmVjdCByb290cGF0aCB0byB1c2VyLiBJdCBqdXN0IGNoZWNrcyB0aGUKK3Jvb3RwYXRoIHJlYXNvbmFibGVuZXNzIHdoZW4gdGhlIHVzZXIgaW5wdXQgdGhlIGFyZ3VtZW50KC0tcm9vdD0vLXI9KS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8emNoaUB3aW5kcml2ZXIuY29tPgorLS0tCisgcnBtcXYuYyB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ycG1xdi5jIGIvcnBtcXYuYworaW5kZXggNDBjNDJiZC4uODhkODVhYiAxMDA2NDQKKy0tLSBhL3JwbXF2LmMKKysrKyBiL3JwbXF2LmMKK0BAIC0yMDYsNiArMjA2LDggQEAgc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNUYWJsZVtdID0geworICAgIFBPUFRfVEFCTEVFTkQKKyB9OworIAorK3N0YXRpYyBpbnQgX3JwbXF2X3Jvb3RwYXRoX3N0YXRlID0gMDsKKysKKyAjaWZkZWYgX19NSU5UX18KKyAvKiBNaU5UIGNhbm5vdCBkeW5hbWljYWxseSBpbmNyZWFzZSB0aGUgc3RhY2suICAqLworIGxvbmcgX3N0a3NpemUgPSA2NCAqIDEwMjRMOworQEAgLTQyNyw2ICs0MjksNDEgQEAgc3RhdGljIHZvaWQgaW50ZWdyaXR5X2NoZWNrKGNvbnN0IGNoYXIgKnByb2duYW1lLCBlbnVtIG1vZGVzIHByb2dtb2RlX251bSkKKyB9CisgI2VuZGlmCisgCisrLypjaGVjayBpZiB0aGUgcm9vdGRpciBpcyB3cml0YWJsZSBvciBleGlzdHMgKi8KKytpbnQgYWNjZXNzX2ZpbGUoY29uc3QgY2hhciAqcm9vdGRpcikKKyt7CisrICAgIGludCByZXQscm9vdGRpcl9sZW47CisrCisrICAgIGlmKHJvb3RkaXIgPT0gTlVMTCkgeworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAgIHJvb3RkaXJfbGVuID0gc3RybGVuKHJvb3RkaXIpOworKyAgICAvKm1ha2Ugc3VyZSB0aGF0IGRpcmVudCBhcmd1bWVudCB0cmFpbGluZyBpcyAiLyIgKi8KKysgICAgaWYoIShyb290ZGlyX2xlbiAmJiByb290ZGlyW3Jvb3RkaXJfbGVuIC0gMV0gPT0gJy8nKSl7CisrICAgICAgICBjaGFyICp0ID0gKGNoYXIgKiltYWxsb2Mocm9vdGRpcl9sZW4gKyAyKTsKKysgICAgICAgICp0ID0gJ1wwJzsKKysgICAgICAgICh2b2lkKXN0cGNweShzdHBjcHkodCxyb290ZGlyKSwiLyIpOworKyAgICAgICAgcmV0ID0gYWNjZXNzKHQsRl9PS3xXX09LKTsKKysgICAgICAgIGZyZWUodCk7CisrICAgIH1lbHNleworKyAgICAgICAgcmV0ID0gYWNjZXNzKHJvb3RkaXIsRl9PS3xXX09LKTsKKysgICAgfQorKyAgICByZXR1cm4gcmV0OworK30KKysKKysvKmNoZWNrIGlmIGlucHV0IHRoZSBhcmd1bWVudCAiLS1yb290Ly1yIiAgKi8KKyt2b2lkIGNoZWNrX2FyZ3VtZW50X3Jvb3QoaW50IGFyZ2MsY2hhciAqIGNvbnN0IGFyZ3ZbXSkKKyt7CisrICAgIGludCBpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisrICAgICAgICBpZihzdHJuY21wKGFyZ3ZbaV0sIi0tcm9vdD0iLDcpID09IDAgfHwgc3RybmNtcChhcmd2W2ldLCItcj0iLDMpID09IDApIHsKKysgICAgICAgICAgICBfcnBtcXZfcm9vdHBhdGhfc3RhdGUgPSAxOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworIC8qQC1ib3VuZHNAKi8gLyogTENMOiBzZWdmYXVsdCAqLworIC8qQC1tb2RzQCovIC8qIEZJWDogc2hydWcgKi8KKyAjaWYgIWRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorQEAgLTQ3Niw2ICs1MTMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQorICAgICBpbnQgeHg7CisgI2VuZGlmCisgCQorKyAgICBjaGVja19hcmd1bWVudF9yb290KGFyZ2MsKGNoYXIgKmNvbnN0ICopYXJndik7CisrCisgI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKKyAgICAgZW52aXJvbiA9IGVudnA7CisgI2Vsc2UKK0BAIC03MTUsNiArNzU0LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqIGFyZ3YpCisgCQlhcmdlcnJvcihfKCJhcmd1bWVudHMgdG8gLS1yb290ICgtcikgbXVzdCBiZWdpbiB3aXRoIGEgLyIpKTsKKyAJICAgIGJyZWFrOworIAl9CisrICAgICAgICBpZiAoX3JwbXF2X3Jvb3RwYXRoX3N0YXRlKSB7CisrICAgICAgICAgICAgaWYgKGFjY2Vzc19maWxlKHJwbWlvUm9vdERpcikpIHsKKysgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkludmFsaWQgZGlyZWN0b3J5OiVzLCBlbnN1cmUgaXQgZXhpc3RzIG9yIGJlIHdyaXRhYmxlXG4iKSxycG1pb1Jvb3REaXIpOworKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICB9CisgCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBpbnRlZ3JpdHktY2hlY2tpbmcgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiLXJlZHVjZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYi1yZWR1Y2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2OTM3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYi1yZWR1Y2UucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitDaGFuZ2UgY2FjaGUgc2l6ZSB0byByZWR1Y2UgdGhlIHVzYWdlIG9mIGRpc2sgc3BhY2UgZnJvbSA2Mk1CIHRvIDI2TUIuIAorCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL0RCX0NPTkZJRy5pbgorKysrIHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCitAQCAtMjksNyArMjksNyBAQCBzZXRfdGhyZWFkX2NvdW50IDY0CisgCisgIyA9PT09PT09PT09PT09PT09IE1lbW9yeSBQb29sCisgI1hYWCBpbml0aWFsaXppbmcgZGJlbnYgd2l0aCBzZXRfY2FjaGVzaXplIGhhcyB1bmltcGxlbWVudGVkIHByZXJlcXVzaXRlcworLSNzZXRfY2FjaGVzaXplIDAgMTA0ODU3NiAwIAorK3NldF9jYWNoZXNpemUgMCAxMDQ4NTc2IDAgCisgc2V0X21wX21tYXBzaXplIDI2ODQzNTQ1NgorIAorICMgPT09PT09PT09PT09PT09PSBMb2NraW5nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGI1LW9yLWRiNi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYjUtb3ItZGI2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGI1LW9yLWRiNi5wYXRjaApAQCAtMCwwICsxLDE2MiBAQAorU3VwcG9ydCBib3RoIGRiNSBhbmQgZGI2LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0ub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0vY29uZmlndXJlLmFjCitAQCAtNTQ3LDggKzU0Nyw2IEBAIGVsc2UKKyAgICAgTVlQQVRIPSRQQVRICisgZmkKKyAKKy1EQlhZPWRiNjAKKy0KKyBBQ19QQVRIX1BST0coX19CQVNILCBiYXNoLCAle19iaW5kaXJ9L2Jhc2gsICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fQlpJUDIsIGJ6aXAyLCAle19iaW5kaXJ9L2J6aXAyLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0NBVCwgY2F0LCAvYmluL2NhdCwgJE1ZUEFUSCkKK0BAIC01NjAsMjIgKzU1OCw2IEBAIEFDX1BBVEhfUFJPRyhfX0NNQUtFLCBjbWFrZSwgJXtfYmluZGlyfS8KKyBBQ19QQVRIX1BST0coX19DUElPLCBjcGlvLCAvYmluL2NwaW8sICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fQ1VSTCwgY3VybCwgJXtfYmluZGlyfS9jdXJsLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0NWUywgY3ZzLCAle19iaW5kaXJ9L2N2cywgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9BUkNISVZFLCAke0RCWFl9X2FyY2hpdmUsICV7X2JpbmRpcn0vJHtEQlhZfV9hcmNoaXZlLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0NIRUNLUE9JTlQsICR7REJYWX1fY2hlY2twb2ludCwgJXtfYmluZGlyfS8ke0RCWFl9X2NoZWNrcG9pbnQsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfREVBRExPQ0ssICR7REJYWX1fZGVhZGxvY2ssICV7X2JpbmRpcn0vJHtEQlhZfV9kZWFkbG9jaywgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9EVU1QLCAke0RCWFl9X2R1bXAsICV7X2JpbmRpcn0vJHtEQlhZfV9kdW1wLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0hPVEJBQ0tVUCwgJHtEQlhZfV9ob3RiYWNrdXAsICV7X2JpbmRpcn0vJHtEQlhZfV9ob3RiYWNrdXAsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfTE9BRCwgJHtEQlhZfV9sb2FkLCAle19iaW5kaXJ9LyR7REJYWX1fbG9hZCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9MT0dfVkVSSUZZLCAke0RCWFl9X2xvZ192ZXJpZnksICV7X2JpbmRpcn0vJHtEQlhZfV9sb2dfdmVyaWZ5LCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1BSSU5UTE9HLCAke0RCWFl9X3ByaW50bG9nLCAle19iaW5kaXJ9LyR7REJYWX1fcHJpbnRsb2csICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfUkVDT1ZFUiwgJHtEQlhZfV9yZWNvdmVyLCAle19iaW5kaXJ9LyR7REJYWX1fcmVjb3ZlciwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9SRVBMSUNBVEUsICR7REJYWX1fcmVwbGljYXRlLCAle19iaW5kaXJ9LyR7REJYWX1fcmVwbGljYXRlLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCU1FMLCAke0RCWFl9c3FsLCAle19iaW5kaXJ9LyR7REJYWX1zcWwsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfU1FMX0NPREVHRU4sICR7REJYWX1fc3FsX2NvZGVnZW4sICV7X2JpbmRpcn0vJHtEQlhZfV9zcWxfY29kZWdlbiwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9TVEFULCAke0RCWFl9X3N0YXQsICV7X2JpbmRpcn0vJHtEQlhZfV9zdGF0LCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1RVTkVSLCAke0RCWFl9X3R1bmVyLCAle19iaW5kaXJ9LyR7REJYWX1fdHVuZXIsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfVVBHUkFERSwgJHtEQlhZfV91cGdyYWRlLCAle19iaW5kaXJ9LyR7REJYWX1fdXBncmFkZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9WRVJJRlksICR7REJYWX1fdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fdmVyaWZ5LCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0RJRkYsIGRpZmYsIC9iaW4vZGlmZiwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19ESVRUTywgZGl0dG8sICV7X2JpbmRpcn0vZGl0dG8sICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fRklMRSwgZmlsZSwgJXtfYmluZGlyfS9maWxlLCAkTVlQQVRIKQorQEAgLTE2MDQsMTMgKzE1ODYsMTggQEAgUlBNX0NIRUNLX0xJQigKKyAKKyBkbmwgIyBCZXJrZWxleS1EQiAmIFNRTGl0ZQorIERCTElCU1JDUz0iIgorK0RCWFk9ZGIKKysKKyAjIFhYWCB3b24ndCBoYW5kbGUgLS1pbmNsdWRlZGlyIG92ZXJyaWRlCistQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHtwcmVmaXh9L2luY2x1ZGUvJHtEQlhZfSIKKytDUFBGTEFHU19zYXZlPSIke0NQUEZMQUdTfSIKKytDUFBGTEFHUz0iJHtDUFBGTEFHU19zYXZlfSAtSSR7cHJlZml4fS9pbmNsdWRlL2RiLTYuMCIKKyt3aXRoX2RiX3NhdmU9IiR7d2l0aF9kYn0iCisgUlBNX0NIRUNLX0xJQigKKyAgICAgW0JlcmtlbGV5LURCXSwgW2RiXSwKKyAgICAgW2RiLTYuMF0sIFtkYl9jcmVhdGVdLCBbZGIuaF0sCistICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGIzXSwKKysgICAgW3llcyxleHRlcm5hbF0sIFtkYjZdLAorICAgICBbIERCTElCU1JDUz0iJERCTElCU1JDUyBkYjMuYyIKKysgICAgICBEQlhZPWRiNjAKKyAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCLCBbIHRydWUgXSkKKyAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWwgXSkKKyAgICAgICBpZiB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsOyB0aGVuCitAQCAtMTYxOSwxMCArMTYwNiwzMiBAQCBSUE1fQ0hFQ0tfTElCKAorICAgICAgICAgICBXSVRIX0RCX1NVQkRJUj0iIgorICAgICAgIGZpCisgICAgIF0sCistICAgIFsgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyBmYWxzZSBdKQorLSAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgZmFsc2UgXSkKKysgICAgWyAjIFJlc2V0IGEgZmV3IHZhcmlhYmxlcyB0byBmcmVzaAorKyAgICAgIHdpdGhfZGI9IiR7d2l0aF9kYl9zYXZlfSIKKysgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU19zYXZlfSAtSSR7cHJlZml4fS9pbmNsdWRlL2RiLTUuMyIKKysgICAgICBSUE1fQ0hFQ0tfTElCKAorKyAgICAgICAgW0JlcmtlbGV5LURCXSwgW2RiXSwKKysgICAgICAgIFtkYi01LjNdLCBbZGJfY3JlYXRlXSwgW2RiLmhdLAorKyAgICAgICAgW3llcyxleHRlcm5hbF0sIFtkYjUzXSwKKysgICAgICAgIFsgREJMSUJTUkNTPSIkREJMSUJTUkNTIGRiMy5jIgorKyAgICAgICAgICBEQlhZPWRiNTMKKysgICAgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyB0cnVlIF0pCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbCBdKQorKyAgICAgICAgICBpZiB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsOyB0aGVuCisrICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9EQl9ILCAxLCBbSGF2ZSA8ZGIuaD4gaGVhZGVyXSkKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgV0lUSF9EQl9TVUJESVI9IiIKKysgICAgICAgICAgZmkKKysgICAgICAgIF0sCisrICAgICAgICBbIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgZmFsc2UgXSkKKysgICAgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQl9JTlRFUk5BTCwgWyBmYWxzZSBdKQorKyAgICAgICAgXSkKKyAgICAgXSkKKyAKKytpZiB0ZXN0ICIuJGFjX2N2X2xpYl9kYl82XzBfZGJfY3JlYXRlIiAhPSAueWVzIC1hICIuJGFjX2N2X2xpYl9kYl81XzNfZGJfY3JlYXRlIiAhPSAueWVzOyB0aGVuCisrICAgIENQUEZMQUdTPSIke0NQUEZMQUdTX3NhdmV9IgorK2ZpCisrCisgZG5sICMgU3FsaXRlIGV4dGVybmFsCisgUlBNX0NIRUNLX0xJQigKKyAgICAgW1NRTGl0ZV0sIFtzcWxpdGVdLAorQEAgLTE2MzMsMTAgKzE2NDIsMTEgQEAgUlBNX0NIRUNLX0xJQigKKyAKKyBkbmwgIyBTcWxpdGUgMy43LjAuMSBmcm9tIGRiLTUuMS4xOQorIGRubCBYWFggZXJyb3I6IGBkYjMnIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIEFDX0NPTkZJR19TVUJESVJTLgorK2lmIHRlc3QgIi4kYWNfY3ZfbGliX2RiXzZfMF9kYl9jcmVhdGUiID0gLnllczsgdGhlbgorIFJQTV9DSEVDS19MSUIoCisgICAgIFtCZXJrZWxleS1EQiAoK1NRTGl0ZTMpXSwgW2Ric3FsXSwKKyAgICAgW2RiX3NxbC02LjBdLCBbc3FsaXRlM19vcGVuXSwgW2Ric3FsLmhdLAorLSAgICBbeWVzLGV4dGVybmFsXSwgW2RiMy9zcWxdLAorKyAgICBbeWVzLGV4dGVybmFsXSwgW2RiNi9zcWxdLAorICAgICBbCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyB0cnVlIF0pCisgICAgICAgQUNfREVGSU5FKFdJVEhfU1FMSVRFLCAxLCBbRGVmaW5lIGFzIDEgaWYgYnVpbGRpbmcgd2l0aCBTUUxpdGUgbGlicmFyeV0pCitAQCAtMTY1MCwxMiArMTY2MCw1MCBAQCBSUE1fQ0hFQ0tfTElCKAorICAgICBdLCBbCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyBmYWxzZSBdKQorICAgICBdKQorK2VsaWYgdGVzdCAiLiRhY19jdl9saWJfZGJfNV8zX2RiX2NyZWF0ZSIgPSAueWVzOyB0aGVuCisrUlBNX0NIRUNLX0xJQigKKysgICAgW0JlcmtlbGV5LURCICgrU1FMaXRlMyldLCBbZGJzcWxdLAorKyAgICBbZGJfc3FsLTUuM10sIFtzcWxpdGUzX29wZW5dLCBbZGJzcWwuaF0sCisrICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI1My9zcWxdLAorKyAgICBbCisrICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyB0cnVlIF0pCisrICAgICAgQUNfREVGSU5FKFdJVEhfU1FMSVRFLCAxLCBbRGVmaW5lIGFzIDEgaWYgYnVpbGRpbmcgd2l0aCBTUUxpdGUgbGlicmFyeV0pCisrICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorKyAgICAgICAgV0lUSF9EQl9DUFBGTEFHUz0iJHtXSVRIX0RCX0NQUEZMQUdTfSAtSVwkKHRvcF9zcmNkaXIpL2RiL3NxbC9nZW5lcmF0ZWQiCisrICAgICAgICBXSVRIX0RCX0xJQlM9IiR7V0lUSF9EQlNRTF9MSUJTfSIKKysgICAgICAgIERCTElCU1JDUz0iJERCTElCU1JDUyBzcWxpdGUuYyIKKysgICAgICBlbHNlCisrICAgICAgICBXSVRIX0RCU1FMX1NVQkRJUj0iIgorKyAgICAgIGZpCisrICAgIF0sIFsKKysgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIGZhbHNlIF0pCisrICAgIF0pCisrZWxzZQorK0FNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgZmFsc2UgXSkKKytmaQorIAorIERCTElCT0JKUz1gZWNobyAkREJMSUJTUkNTIHwgc2VkIC1lICJzL1wuYy9cLmxvL2ciYAorIAorIEFDX1NVQlNUKERCTElCU1JDUykKKyBBQ19TVUJTVChEQkxJQk9CSlMpCisgCisrQUNfUEFUSF9QUk9HKF9fREJfQVJDSElWRSwgJHtEQlhZfV9hcmNoaXZlLCAle19iaW5kaXJ9LyR7REJYWX1fYXJjaGl2ZSwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9DSEVDS1BPSU5ULCAke0RCWFl9X2NoZWNrcG9pbnQsICV7X2JpbmRpcn0vJHtEQlhZfV9jaGVja3BvaW50LCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0RFQURMT0NLLCAke0RCWFl9X2RlYWRsb2NrLCAle19iaW5kaXJ9LyR7REJYWX1fZGVhZGxvY2ssICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfRFVNUCwgJHtEQlhZfV9kdW1wLCAle19iaW5kaXJ9LyR7REJYWX1fZHVtcCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9IT1RCQUNLVVAsICR7REJYWX1faG90YmFja3VwLCAle19iaW5kaXJ9LyR7REJYWX1faG90YmFja3VwLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0xPQUQsICR7REJYWX1fbG9hZCwgJXtfYmluZGlyfS8ke0RCWFl9X2xvYWQsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfTE9HX1ZFUklGWSwgJHtEQlhZfV9sb2dfdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fbG9nX3ZlcmlmeSwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9QUklOVExPRywgJHtEQlhZfV9wcmludGxvZywgJXtfYmluZGlyfS8ke0RCWFl9X3ByaW50bG9nLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1JFQ09WRVIsICR7REJYWX1fcmVjb3ZlciwgJXtfYmluZGlyfS8ke0RCWFl9X3JlY292ZXIsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfUkVQTElDQVRFLCAke0RCWFl9X3JlcGxpY2F0ZSwgJXtfYmluZGlyfS8ke0RCWFl9X3JlcGxpY2F0ZSwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQlNRTCwgJHtEQlhZfXNxbCwgJXtfYmluZGlyfS8ke0RCWFl9c3FsLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1NRTF9DT0RFR0VOLCAke0RCWFl9X3NxbF9jb2RlZ2VuLCAle19iaW5kaXJ9LyR7REJYWX1fc3FsX2NvZGVnZW4sICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfU1RBVCwgJHtEQlhZfV9zdGF0LCAle19iaW5kaXJ9LyR7REJYWX1fc3RhdCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9UVU5FUiwgJHtEQlhZfV90dW5lciwgJXtfYmluZGlyfS8ke0RCWFl9X3R1bmVyLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1VQR1JBREUsICR7REJYWX1fdXBncmFkZSwgJXtfYmluZGlyfS8ke0RCWFl9X3VwZ3JhZGUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfVkVSSUZZLCAke0RCWFl9X3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X3ZlcmlmeSwgJE1ZUEFUSCkKKysKKyBBQ19BUkdfV0lUSChkYi1sYXJnZWZpbGUsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZGItbGFyZ2VmaWxlXSwgW2J1aWxkIEJlcmtlbGV5LURCIHdpdGggTEFSR0VGSUxFIHN1cHBvcnRdKSkKKyBBQ19BUkdfV0lUSChkYi1tdXRleCwgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZGItbXV0ZXg9QVJHXSwgW2J1aWxkIEJlcmtlbGV5LURCIHdpdGggTVVURVggdHlwZSBBUkddKSkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjhlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK0luIGNlcnRhaW4gY2FzZXMgd2l0aCBCZXJrbGV5REIgNS4zLnggd2UgYXJlIGdldHRpbmcgdGhlIGVycm9yOgorCitkYjMuYzoxNDQzOiBkYmN1cnNvci0+cGdldCgtMzA5OTkpOiBCREIwMDYzIERCX0JVRkZFUl9TTUFMTDogVXNlciBtZW1vcnkgdG9vIHNtYWxsIGZvciByZXR1cm4gdmFsdWUKKworU2VlIGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L3JwbS8rYnVnLzkzNDQyMCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworSXQgYXBwZWFycyB0byBiZSBzb21lIHR5cGUgb2YgYSBidWcgaW4gdGhlIEJlcmtsZXlEQiA1LjMueC4gIEluIGFuIGF0dGVtcHQKK3RvIHdvcmthcm91bmQgdGhlIHByb2JsZW0sIHdoZW4gd2UgZW5jb3VudGVyIHRoaXMgc2l0dWF0aW9uIHdlIGF0dGVtcHQKK3RvIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgbW1hcCBidWZmZXIgdW50aWwgdGhlIGNhbGwgd29ya3MsIG9yIHdlCitlbmQgdXAgdHJ5aW5nIDEwIHRpbWVzLiAgVGhlIG5ldyBzaXplIGlzIGVpdGhlciB0aGUgdXBkYXRlZCB2cC0+c2l6ZQorZnJvbSB0aGUgZmFpbGVkIHBnZXQgY2FsbCwgb3IgdGhlIHByZXZpb3VzIHNpemUgKyAxMDI0LgorCitJZiBEQkkgZGVidWdnaW5nIGlzIGVuYWJsZWQsIGFkZGl0aW9uYWwgZGlhZ25vc3RpY3MgYXJlIHByaW50ZWQsIG90aGVyd2lzZQorYSBiYXNpYyByZXRyeSBhbmQgc3VjY2VzcyBtZXNzYWdlIGlzIGFkZGVkIHRvIHNob3cgdGhhdCB0aGUgZmFpbHVyZSB3YXMKK3Jlc29sdmVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKHdvcmthcm91bmQpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9ycG1kYi5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi9ycG1kYi5jCitAQCAtMjIxMiw4ICsyMjEyLDEyIEBAIHN0YXRpYyBpbnQgcnBtbWlHZXQoZGJpSW5kZXggZGJpLCBEQkMgKgorIAl2cC0+ZmxhZ3MgfD0gREJfREJUX1VTRVJNRU07CisgCXJjID0gZGJpR2V0KGRiaSwgZGJjdXJzb3IsIGtwLCB2cCwgZmxhZ3MpOworIAlpZiAocmMgPT0gREJfQlVGRkVSX1NNQUxMKSB7CisrCSAgICBpbnQgcmV0cnkgPSAwOworKwkgICAgc2l6ZV90IG9yaWdsZW4gPSB2cC0+c2l6ZTsKKyAJICAgIHNpemVfdCB1aGxlbiA9IHZwLT5zaXplOworLQkgICAgdm9pZCAqIHVoID0gbW1hcChOVUxMLCB1aGxlbiwgX3Byb3QsIF9mbGFncywgX2Zkbm8sIF9vZmYpOworKwkgICAgdm9pZCAqIHVoOworK3JldHJ5X2dldDoKKysJICAgIHVoID0gbW1hcChOVUxMLCB1aGxlbiwgX3Byb3QsIF9mbGFncywgX2Zkbm8sIF9vZmYpOworIAkgICAgaWYgKHVoID09IE5VTEwgfHwgdWggPT0gKHZvaWQgKiktMSkKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJICAgICI9PT4gbW1hcCglcFsldV0sIDB4JXgsIDB4JXgsICVkLCAweCV4KSBlcnJvciglZCk6ICVzXG4iLAorQEAgLTIyMzUsNiArMjIzOSwyNSBAQCBzdGF0aWMgaW50IHJwbW1pR2V0KGRiaUluZGV4IGRiaSwgREJDICoKKyAJCWlmIChtdW5tYXAodWgsIHVobGVuKSAhPSAwKQorIAkJICAgIGZwcmludGYoc3RkZXJyLCAiPT0+IG11bm1hcCglcFsldV0pIGVycm9yKCVkKTogJXNcbiIsCisgICAgICAgICAgICAgICAgIAl1aCwgKHVuc2lnbmVkKXVobGVuLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKysJICAgICAgICAvKiBXZSB3YW50IHRvIGJlIHN1cmUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyB0byBhdm9pZCBhIGxvb3AhICovCisrCSAgICAgICAgaWYgKHJjID09IERCX0JVRkZFUl9TTUFMTCAmJiByZXRyeSA8IDEwKSB7CisrCQkgICAvKiBJZiB3ZSBnb3QgYSBsYXJnciB2cC1zaXplIGJhY2ssIHVzZSB0aGF0LCBvdGhlcndpc2UgaW5jcmVtZW50IHRoZSBzaXplIGJ5IDFrICovCisrCSAgICAgICAgICAgdWhsZW4gPSB2cC0+c2l6ZSA+IHVobGVuID8gdnAtPnNpemUgOiB1aGxlbiArIDEwMjQ7CisrCQkgICByZXRyeSsrOworKwkgICAgICAgICAgIGlmICgoZGJpKS0+ZGJpX2RlYnVnKQorKwkgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBEQl9CVUZGRVJfU01BTEwgb3JpZyByZXF1ZXN0ZWQgKCVkKSwgY29uZmlndXJlZCAoJWQpLCBmb3JjaW5nIGxhcmdlciBidWZmZXIgKCVkKSwgbmV3IHNpemUgKCVkKVxuIiwKKysJICAgICAgICAgICAgICAgICAgICBvcmlnbGVuLCB2cC0+dWxlbiwgdWhsZW4sIHZwLT5zaXplKTsKKysJICAgICAgICAgICBlbHNlCisrCSAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT0+IHJldHJ5ICglZCkgZGIzY3BnZXQgKCVkKVxuIiwgcmV0cnksIHVobGVuKTsKKysJICAgICAgICAgICBnb3RvIHJldHJ5X2dldDsKKysJICAgICAgICB9CisrCSAgICB9CisrCSAgICBpZiAocmV0cnkpIHsKKysJICAgICAgICBpZiAoKGRiaSktPmRiaV9kZWJ1ZykKKysJICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBzdWNjZXNzIG9yaWcgcmVxdWVzdGVkICglZCksIGNvbmZpZ3VyZWQgYnVmZmVyICglZCksIGJ1ZmZlciAoJWQpLCBzaXplIGFmdGVyIGRiaUdldCAoJWQpXG4iLAorKwkJCW9yaWdsZW4sIHZwLT51bGVuLCB1aGxlbiwgdnAtPnNpemUpOworKwkgICAgICAgIGVsc2UKKysJICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBzdWNjZXNzXG4iKTsKKyAJICAgIH0KKyAJfQorICAgICB9IGVsc2UKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL2RiMy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL2RiMy5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi9kYjMuYworQEAgLTE1MDksNyArMTUwOSw3IEBAIGFzc2VydChkYiAhPSBOVUxMKTsKKyAjZW5kaWYKKyAgICAgfQorIAorLURCSURFQlVHKGRiaSwgKHN0ZGVyciwgIjwtLSAlcyglcCwlcCwlcCwlcCwlcCwweCV4KSByYyAlZCAlcyVzXG4iLCBfX0ZVTkNUSU9OX18sIGRiaSwgZGJjdXJzb3IsIGtleSwgcGtleSwgZGF0YSwgZmxhZ3MsIHJjLCBfREJDRkxBR1MoZmxhZ3MpLCBfS0VZREFUQShrZXksIHBrZXksIGRhdGEsIE5VTEwpKSk7CisrREJJREVCVUcoZGJpLCAoc3RkZXJyLCAiPC0tICVzKCVwLCVwLCVwLCVwLCVwLDB4JXgpIHJjICVkICVzJXNcbiIsIF9fRlVOQ1RJT05fXywgZGJpLCBkYmN1cnNvciwga2V5LCBwa2V5LCBkYXRhLCBmbGFncywgcmMsIF9EQkNGTEFHUyhmbGFncyksIF9LRVlEQVRBKGtleSwgcGtleSwgcmMgPT0gREJfQlVGRkVSX1NNQUxMID8gTlVMTCA6IGRhdGEsIE5VTEwpKSk7CisgICAgIHJldHVybiByYzsKKyB9CisgLypAPW11c3Rtb2RAKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI2ZTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0RlYnVnIHRoZSBwbGF0Zm9ybSBzY29yZSBnZW5lcmF0aW9uLi4uCisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTQ2NSw2ICs0NjUsOCBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCisgICAgIHJjID0gKHJwbVJDKSBycG1pb2JTbHVycChwbGF0Zm9ybSwgJmlvYik7CisgCisrICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gZmlsZSAlc1xuIiwgcGxhdGZvcm0pOworKworICAgICBpZiAocmMgfHwgaW9iID09IE5VTEwpIHsKKyAJcmMgPSBSUE1SQ19GQUlMOworIAlnb3RvIGV4aXQ7CitAQCAtNDg2LDYgKzQ4OCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJICAgIHdoaWxlICgtLXQgPiBwICYmIHhpc3NwYWNlKCp0KSkKKyAJCSp0ID0gJ1wwJzsKKyAJICAgIGlmICh0ID4gcCkgeworKwkJZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBtaXJlQXBwZW5kIFJFR0VYICVzXG4iLCBwKTsKKyAJCXh4ID0gbWlyZUFwcGVuZChSUE1NSVJFX1JFR0VYLCAwLCBwLCBOVUxMLCAmbWlfcmUsICZtaV9ucmUpOworIAkgICAgfQorIAkgICAgY29udGludWU7CitAQCAtNTAzLDYgKzUwNiwxMSBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCQlfZ251ID0gcnBtRXhwYW5kKCItIiwgY3ZvZy0+Z251LCBOVUxMKTsKKyAKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fZ251IiwgTlVMTCwgKF9nbnUgPyBfZ251IDogIiIpLCAtMSk7CisrCSAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtIGFkZE1hY3JvICVzLSVzLSVzKCVzKVxuIiwKKysJICAgIAlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX2NwdX0iLCBOVUxMKSwKKysJCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fdmVuZG9yfSIsIE5VTEwpLAorKwkJcnBtRXhwYW5kKCIle19wbGF0Zm9ybV9vc30iLCBOVUxMKSwKKysJCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fZ251fSIsIE5VTEwpKTsKKyAjZWxzZQorIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X2NwdSIsIE5VTEwsIGN2b2ctPmNwdSwgLTEpOworIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X3ZlbmRvciIsIE5VTEwsIGN2b2ctPnZlbmRvciwgLTEpOworQEAgLTUxMCw2ICs1MTgsNyBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgI2VuZGlmCisgCX0KKyAKKysJZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBtaXJlQXBwZW5kIFNUUkNNUCAlcyAtLSAiLCBwKTsKKyAjaWYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkgLyogU2tpcCB0aGUgZXhwbGljaXQtcGxhdGZvcm0gKi8KKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGV4cGxpY2l0LXBsYXRmb3JtICovCisgCS8qIGRvIG5vdCB1c2UgdmVuZG9yIGFuZCBHTlUgYXR0cmlidXRpb24gKi8KK0BAIC01MTksNiArNTI4LDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAkJKGN2b2cgJiYgKmN2b2ctPmdudSA/ICItIiA6IE5VTEwpLAorIAkJKGN2b2cgPyBjdm9nLT5nbnUgOiBOVUxMKSwgTlVMTCk7CisgI2VuZGlmCisrCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHApOworIAl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9TVFJDTVAsIDAsIHAsIE5VTEwsICZtaV9yZSwgJm1pX25yZSk7CisgCXAgPSBfZnJlZShwKTsKKyAjZW5kaWYKK0BAIC02ODgsOSArNjk4LDEyIEBAIGludCBycG1QbGF0Zm9ybVNjb3JlKGNvbnN0IGNoYXIgKiBwbGF0Zm8KKyAKKyAgICAgaWYgKChtaXJlID0gKG1pUkUpIG1pX3JlKSAhPSBOVUxMKQorICAgICBmb3IgKGkgPSAwOyBpIDwgbWlfbnJlOyBpKyspIHsKKy0JaWYgKG1pcmVSZWdleGVjKG1pcmUgKyBpLCBwbGF0Zm9ybSwgMCkgPj0gMCkKKysJaWYgKG1pcmVSZWdleGVjKG1pcmUgKyBpLCBwbGF0Zm9ybSwgMCkgPj0gMCkgeworKwkgICAgZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybVNjb3JlICVzICglZClcbiIsIHBsYXRmb3JtLCBpICsgMSk7CisgCSAgICByZXR1cm4gKGkgKyAxKTsKKysJfQorICAgICB9CisrICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm1TY29yZSAlcyAoJWQpXG4iLCBwbGF0Zm9ybSwgMCk7CisgICAgIHJldHVybiAwOworIH0KKyAvKkA9b25seXRyYW5zQCovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWY4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDcwZDg4MTg3M2I0NDNjOWJhZDUwMmRiOTY2NTU5NTQ1NWQ0ZjBhYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgOCBKdWwgMjAxNCAwNzo0MToxMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGRpc2FibGUgLVduby1vdmVycmlkZS1pbml0CisKK0ZpeGVkIHJwbS1uYXRpdmUuZG9fY29uZmlndXJlIGVycm9yIG9uIENlbnRPUyA1Lng6CisKK2NjMTogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICItV25vLW92ZXJyaWRlLWluaXQiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYWRlZmZlMC4uNjc0NmI0YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTYzLDcgKzE2Myw3IEBAIEFDX0FSR19FTkFCTEUoYnVpbGQtd2FybmluZ3MsCisgIyBYWFggZ2NjLTQuMiBvbiBNYWMgT1MgWCBoYXNuJ3QKKyAjICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xbm8tdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUiCisgIyBYWFggcnBtaW8vc2V0LmMgbmVlZHMgdGhpcworLSAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLW92ZXJyaWRlLWluaXQiCisrIyAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLW92ZXJyaWRlLWluaXQiCisgICAgICAgICBlbGlmIHRlc3QgIi5gJENDIC1WIDI+JjEgfCBncmVwICdTdW4gQydgIiAhPSAuOyB0aGVuCisgICAgICAgICAgICAgZG5sICMgU3VuIFN0dWRpbyAodXN1YWxseSAiY2MiKQorICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtdiIKKy0tCisxLjguMi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maWxlY2xhc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZmlsZWNsYXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZGI2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZmlsZWNsYXNzLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK3JwbWZjLmM6ICBBbHdheXMgZ2VuZXJhdGUgcGVyLWZpbGUgaW5mb3JtYXRpb24KKworRXZlbiB3aGVuIHRoZSBwZXItZmlsZSBkZXBlbmRlbmN5IGdlbmVyYXRlIGlzIGRpc2FibGVkLCB3ZSB3YW50IHRvIGdlbmVyYXRlCitwZXIgZmlsZSBjbGFzc2lmaWNhdGlvbiBhbmQgb3RoZXIgYXNzb2NpYXRlZCBkYXRhLgorCitOb3RlOiB0aGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuICBFdmVudHVhbGx5IHdlIHdpbGwgd2FudCB0byBoYXZlIGEgd2F5Cit0byBzZWVkIHBlci1maWxlIGRlcGVuZGVuY3kgYW5kIG90aGVyIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEKK3BhY2thZ2UgZnJvbSBwcmV2aW91c2x5IGRldGVybWluZWQgaW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1mYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1mYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtZmMuYworQEAgLTE3MzQsNyArMTczNCw2IEBAIHJwbVJDIHJwbWZjR2VuZXJhdGVEZXBlbmRzKHZvaWQgKiBfc3BlYywKKyAJLyogLi4uIHRoZW4gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIHVzaW5nICV7X19maW5kX3JlcXVpcmVzfSBldCBhbC4gKi8KKyAJcmMgPSBycG1mY0dlbmVyYXRlRGVwZW5kc0hlbHBlcihzcGVjLCBwa2csIGZpKTsKKyAJcHJpbnREZXBzKHBrZy0+aGVhZGVyKTsKKy0JcmV0dXJuIHJjOworICAgICB9CisgCisgICAgIC8qIEdlbmVyYXRlIHNjcmlwdGxldCBEZXBlbmRlbmNpZXMuICovCitAQCAtMTc2Miw4ICsxNzYxLDggQEAgcnBtUkMgcnBtZmNHZW5lcmF0ZURlcGVuZHModm9pZCAqIF9zcGVjLAorICAgICBhdlthY10gPSBOVUxMOworIAorICAgICBmYyA9IHJwbWZjTmV3KCk7CistICAgIGZjLT5za2lwUHJvdiA9ICFwa2ctPmF1dG9Qcm92OworLSAgICBmYy0+c2tpcFJlcSA9ICFwa2ctPmF1dG9SZXE7CisrICAgIGZjLT5za2lwUHJvdiA9ICFwa2ctPmF1dG9Qcm92IHx8ICFpbnRlcm5hbGRlcHM7CisrICAgIGZjLT5za2lwUmVxID0gIXBrZy0+YXV0b1JlcSB8fCAhaW50ZXJuYWxkZXBzOworICAgICBmYy0+dHJhY2tlZCA9IDA7CisgCisgICAgIHsJY29uc3QgY2hhciAqIGJ1aWxkUm9vdFVSTDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YTBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK09jY2FzaW9uYWxseSB0aGUgY3AgLXAgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIHJldHVybiBjb2RlLiAgVGhpcyB3aWxsIGNhdXNlCit0aGUgc3lzdGVtIGFib3J0IHRoZSBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS9ycG1kYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS5vcmlnL3JwbWRiL01ha2VmaWxlLmFtCisrKysgcnBtL3JwbWRiL01ha2VmaWxlLmFtCitAQCAtMjM0LDExICsyMzQsMTQgQEAgbGNvdi1yZXBvcnQ6CisgI2xjb3YtdXBsb2FkOiBsY292CisgIwlyc3luYyAtcnZ6IC1lIHNzaCAtLWRlbGV0ZSBsY292LyogPz8/CisgCisrJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZTogJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKysJQGlmIHRlc3QgIi4kKGJ1aWxkZGlyKSIgIT0gIi4kKHNyY2RpcikiOyB0aGVuIFwKKysJCWNwIC1mcCAkKHNyY2RpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSBcCisrCQkgICAgICAkKGJ1aWxkZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlIDsgXAorKwkgZmkKKysKKyBsb2dpb19CVUlMVCA9IGxvZ2lvX2F1dG8uYyBsb2dpb19hdXRvcC5jIGxvZ2lvX2F1dG8uaCBsb2dpb190ZW1wbGF0ZQorLSQobG9naW9fQlVJTFQpOglsb2dpby5hd2sgbG9naW8uc3JjIGxvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKy0JQHRlc3QgLWUgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSB8fCBcCistCQljcCAtcCAkKHNyY2RpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSBcCistCQkgICAgICAkKGJ1aWxkZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlCisrJChsb2dpb19CVUlMVCk6CWxvZ2lvLmF3ayBsb2dpby5zcmMgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZQorIAlAcm0gLWYgJChsb2dpb19CVUlMVCkKKyAJQCQoQVdLKSAtZiAkKHNyY2RpcikvbG9naW8uYXdrIFwKKyAJCS12IGhlYWRlcl9maWxlPWxvZ2lvX2F1dG8uaCBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGViMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitXZSBuZWVkIHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBubGluayBzaXplIGFuZCBvdXIgbGlua3NMZWZ0IGNvdW50ZXIKK2RvIG1hdGNoLiBJZiBhbiBycG0gaXMgYmFkbHkgY29uc3RydWN0ZWQgd2l0aCBpZGVudGljYWwgaW5vZGUgdmFsdWVzCitmb3IgbXVsdGlwbGUgaGFyZGxpbmtlZCBmaWxlcywgc3VjaCBhbiBycG0gd2lsbCBvdGhlcndpc2UgYWNjZXNzIG1lbW9yeQorb3V0IG9mIGFycmF5IGJvdW5kcyBhbmQgY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNyYXNoZXMuCisKK1RoZSBmaXggaXMgdG8gYWRkIGluIHRoZSBzYW5pdHkgY2hlY2sgYW5kIGV4aXQgaWYgYmFkIGNpcmN1bXN0YW5jZXMKK2FyZSBmb3VuZC4gV2UgbmVlZCB0byBmaXggdGhlIGNhbGxlciB0byBjaGVjayB0aGUgcmV0dXJuIGNvZGUgdG9vLgorCitSUCAyMDE0LzYvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9mc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZnNtLmMKKysrKyBycG0tNS40LjE0L2xpYi9mc20uYworQEAgLTQ5NSw2ICs0OTUsMTEgQEAgc3RhdGljIGludCBzYXZlSGFyZExpbmsoLypAc3BlY2lhbEAqLyAvKgorICAgICB9CisgCisgICAgIGlmIChmc20tPmdvYWwgPT0gSU9TTV9QS0dCVUlMRCkgLS1mc20tPmxpLT5saW5rc0xlZnQ7CisrICAgIGlmIChmc20tPmxpLT5saW5rc0xlZnQgPiBzdC0+c3RfbmxpbmspIHsKKysJcnBtbG9nKFJQTUxPR19FUlIsIF8oIkNvcnJ1cHRlZCBoYXJkbGlua3MgZm91bmQgKGNvdW50ICVkIGRvZXMgbm90IG1hdGNoICVkKSwgZXhpdGluZy5cbiIpLCBmc20tPmxpLT5saW5rc0xlZnQsIHN0LT5zdF9ubGluayk7CisrCXJldHVybiAtMTsKKysgICAgfQorKworICAgICBmc20tPmxpLT5maWxleFtmc20tPmxpLT5saW5rc0xlZnRdID0gZnNtLT5peDsKKyAgICAgLypALW9ic2VydmVydHJhbnMgLWRlcGVuZGVudHRyYW5zQCovCisgICAgIGZzbS0+bGktPm5zdWZmaXhbZnNtLT5saS0+bGlua3NMZWZ0XSA9IGZzbS0+bnN1ZmZpeDsKK0BAIC0xODc4LDggKzE4ODMsMTMgQEAgaWYgKCEoZnNtR2V0RmkoZnNtKS0+bWFwZmxhZ3MgJiBJT1NNX1BBWQorIAlmc20tPnBvc3Rwb25lID0gaW9zbUZpbGVBY3Rpb25Ta2lwcGVkKGZzbS0+YWN0aW9uKTsKKyAJaWYgKGZzbS0+Z29hbCA9PSBJT1NNX1BLR0lOU1RBTEwgfHwgZnNtLT5nb2FsID09IElPU01fUEtHQlVJTEQpIHsKKyAJICAgIC8qQC1ldmFsb3JkZXJAKi8gLyogRklYOiBzYXZlSGFyZExpbmsgY2FuIG1vZGlmeSBmc20gKi8KKy0JICAgIGlmIChTX0lTUkVHKHN0LT5zdF9tb2RlKSAmJiBzdC0+c3RfbmxpbmsgPiAxKQorKwkgICAgaWYgKFNfSVNSRUcoc3QtPnN0X21vZGUpICYmIHN0LT5zdF9ubGluayA+IDEpIHsKKyAJCWZzbS0+cG9zdHBvbmUgPSBzYXZlSGFyZExpbmsoZnNtKTsKKysJCWlmIChmc20tPnBvc3Rwb25lIDwgMCkgeworKwkJICAgIHJjID0gUlBNUkNfRkFJTDsKKysJCSAgICBicmVhazsKKysJCX0KKysJICAgIH0KKyAJICAgIC8qQD1ldmFsb3JkZXJAKi8KKyAJfQorIGlmIChmc21HZXRGaShmc20pLT5tYXBmbGFncyAmIElPU01fUEFZTE9BRF9MSVNUKSBmc20tPnBvc3Rwb25lID0gMTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1saWJzcWwtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxpYnNxbC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyZTQxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1saWJzcWwtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0R1cmluZyBpbnN0YWxsYXRpb24sIHRoZSBsaWJ0b29sIHJlbGluayBhdHRlbXB0cyB0byBsaW5rIHRvIC1scnBtLi4uCitUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGhhc24ndCBiZWVuIGluc3RhbGxlZCB5ZXQhICBTbyBzbWFsbCBjaGFuZ2UgY2F1c2VzCit0aGUgbGlidG9vbCB0byBpbnN0ZWFkIHVzZSB0aGUgYnVpbGQgdmVyc2lvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvbGliL01ha2VmaWxlLmFtCitAQCAtMTIwLDYgKzEyMCw5IEBAIGxpYnJwbS5sYTogJChsaWJycG1fbGFfT0JKRUNUUykgJChsaWJycG0KKyAjbGlic3FsX2xhX1NPVVJDRVMJPSBsaWJzcWwuYworICNsaWJzcWxfbGFfTElCQURECT0gbGlicnBtLmxhICQoUlBNREJfTERBRERfQ09NTU9OKQorIAorKyMgcGtnbGliIGxpYnJhcmllcyBuZWVkcyB0byBoYXZlIHVzcmxpYiBsaWJyYXJpZXMgYWxyZWFkeSBpbnN0YWxsZWQhCisraW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUzogaW5zdGFsbC11c3JsaWJMVExJQlJBUklFUworKworIGluc3RhbGwtZGF0YS1ob29rOgorIGlmICFFTkFCTEVfQlVJTERfTEFGSUxFUworIAktZm9yIGwgaW4gJCh1c3JsaWJfTFRMSUJSQVJJRVMpOyBkbyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1M2Y3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sb2ctYXV0by1ybS5wYXRjaApAQCAtMCwwICsxLDE1IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL0RCX0NPTkZJRy5pbgorKysrIHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCitAQCAtNCw2ICs0LDcgQEAgc2V0X2RhdGFfZGlyIC4KKyBzZXRfY3JlYXRlX2RpciAuCisgc2V0X2xnX2RpciAuL2xvZworIHNldF90bXBfZGlyIC4vdG1wCisrc2V0X2ZsYWdzIGRiX2xvZ19hdXRvcmVtb3ZlIG9uCisgCisgIyAtLSB0aHJlYWRfY291bnQgbXVzdCBiZSA+PSA4Cisgc2V0X3RocmVhZF9jb3VudCA2NApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGE2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRW5hYmxlIHBsYXRmb3JtIHRhZyBtYXRjaGluZyB3b3JrYXJvdW5kIGluIE9FLgorCitXaGVuIGluc3RhbGxpbmcgc29tZSBMU0IgcGFja2FnZXMgdGhlICdwbGF0Zm9ybScgZmllbGQgaW4gdGhlIHBhY2thZ2UKK2FwcGVhcnMgdG8gYmUgaW52YWxpZC4gIEluc3RlYWQgb2YgcmVseWluZyBzb2xlbHkgb24gdGhlIHBsYXRmb3JtIGNvbXBhcmlzb24KK3dlIGFsc28gd2FudCB0byBnZW5lcmF0ZSBhIHBlcmNlaXZlZCBwbGF0Zm9ybSBiYXNlZCBvbiB0aGUgdmFsaWQgcnBtIGNvbnRlbnRzCitvZiBhcmNoIGFuZCBvcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZGVwZW5kcy5jCisrKysgcnBtLTUuNC4xNC9saWIvZGVwZW5kcy5jCitAQCAtNTk1LDcgKzU5NSw3IEBAIGludCBycG10c0FkZEluc3RhbGxFbGVtZW50KHJwbXRzIHRzLCBIZWEKKyAJICAgIHBsYXRmb3JtID0gcnBtRXhwYW5kKGFyY2gsICItdW5rbm93bi0iLCBvcywgTlVMTCk7CisgCisgCXJjID0gcnBtUGxhdGZvcm1TY29yZShwbGF0Zm9ybSwgcGxhdHBhdCwgbnBsYXRwYXQpOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorIAkvKgorIAkgKiBJZiBubyBtYXRjaCBvbiBwbGF0Zm9ybSB0YWcsIHdlJ2xsIHRyeSBhZ2FpbiB3aXRoIGFyY2ggdGFnCisgCSAqIGluIGNhc2UgcGxhdGZvcm0gdGFnIGlzIGluY29uc2lzdGVudCB3aXRoIGl0LCB3aGljaCBpcyB0aGUgY2FzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLWZpeC1wcmludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWI0OWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2gKQEAgLTAsMCArMSwxMDQgQEAKK0x1YSAncHJpbnQnIHN0YXRlbWVudCBpcyBub3Qgd29ya2luZyBwcm9wZXJseSBpbnNpZGUgb2YgUlBNIDUKKworVGhlIHByaW50IHN0YXRlbWVudCBzaG91bGQgY2FwdHVyZSB0aGUgb3V0cHV0IGFuZCBzZW5kIGl0IHRvIHRoZSBzY3JpcHQKK3Byb2Nlc3NpbmcgZW5naW5lLCBhbmQgbm90IGRpc3BsYXkgaXQgZGlyZWN0bHkgdG8gdGhlIHNjcmVlbi4KKworVGhpcyBwYXRjaCBpcyBmcm9tOiBodHRwOi8vcnBtNS5vcmcvY3ZzL3BhdGNoc2V0P2NuPTE3NjcxCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQgKHBhdGNoc2V0IDE3NjcxIGZyb20gcnBtNS5vcmcpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvQ0hBTkdFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9DSEFOR0VTCisrKysgcnBtLTUuNC4xNC9DSEFOR0VTCitAQCAtMSwzICsxLDQgQEAKKysgICAgLSBqYmo6IGx1YTogZml4OiByZXN1cnJlY3Qgb3V0cHV0IGNhcHR1cmUgd2l0aCBsdWEtNS4yLgorICAgICAtIGpiajogdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyayBIYXRsZSkuCisgCisgNS40LjEzIC0+IDUuNC4xNDoKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL3JwbWx1YS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWlvL3JwbWx1YS5jCisrKysgcnBtLTUuNC4xNC9ycG1pby9ycG1sdWEuYworQEAgLTE3NSw3ICsxNzUsNyBAQCBycG1sdWEgcnBtbHVhTmV3KHZvaWQpCisgICAgIH07CisgICAgIC8qQD1yZWFkb25seXRyYW5zID1udWxsYXNzaWduIEAqLworICAgICAvKkBvYnNlcnZlckAqLyAvKkB1bmNoZWNrZWRAKi8KKy0gICAgY29uc3QgbHVhTF9SZWcgKmxpYiA9IGx1YWxpYnM7CisrICAgIGNvbnN0IGx1YUxfUmVnICpsaWI7CisgICAgIGNoYXIgKnBhdGhfYnVmOworICAgICBjaGFyICpwYXRoX25leHQ7CisgICAgIGNoYXIgKnBhdGg7CitAQCAtMTkwLDMxICsxOTAsMzQgQEAgcnBtbHVhIHJwbWx1YU5ldyh2b2lkKQorIAorICAgICBsdWFMX29wZW5saWJzKEwpOworIAorLSAgICBmb3IgKDsgbGliLT5uYW1lOyBsaWIrKykgeworKyAgICBmb3IgKGxpYiA9IGx1YWxpYnM7IGxpYi0+bmFtZTsgbGliKyspIHsKKyAJbHVhTF9yZXF1aXJlZihMLCBsaWItPm5hbWUsIGxpYi0+ZnVuYywgMSk7CisrCWx1YV9wb3AoTCwgMSk7CisgICAgIH0KKyAKKyAgICAgewljb25zdCBjaGFyICogX2x1YV9wYXRoID0gcnBtR2V0UGF0aChycG1sdWFQYXRoLCBOVUxMKTsKKyAgCWlmIChfbHVhX3BhdGggIT0gTlVMTCkgeworKyNpZiBkZWZpbmVkKExVQV9HTE9CQUxTSU5ERVgpCisgCSAgICBsdWFfcHVzaGxpdGVyYWwoTCwgIkxVQV9QQVRIIik7CisgCSAgICBsdWFfcHVzaHN0cmluZyhMLCBfbHVhX3BhdGgpOworKwkgICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKysjZWxzZQorKwkgICAgbHVhX3B1c2hzdHJpbmcoTCwgX2x1YV9wYXRoKTsKKysJICAgIGx1YV9zZXRnbG9iYWwoTCwgIkxVQV9QQVRIIik7CisrI2VuZGlmCisgCSAgICBfbHVhX3BhdGggPSBfZnJlZShfbHVhX3BhdGgpOworIAl9CisgICAgIH0KKyAKKyAjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorLSAgICBsdWFfcmF3c2V0KEwsIExVQV9HTE9CQUxTSU5ERVgpOworLSNlbHNlCistICAgIGx1YV9wdXNoZ2xvYmFsdGFibGUoTCk7CistI2VuZGlmCisgICAgIGx1YV9wdXNobGl0ZXJhbChMLCAicHJpbnQiKTsKKyAgICAgbHVhX3B1c2hjZnVuY3Rpb24oTCwgcnBtX3ByaW50KTsKKy0KKy0jaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorICAgICBsdWFfcmF3c2V0KEwsIExVQV9HTE9CQUxTSU5ERVgpOworICNlbHNlCistICAgIGx1YV9wdXNoZ2xvYmFsdGFibGUoTCk7CisrICAgIGx1YV9wdXNoY2Z1bmN0aW9uKEwsIHJwbV9wcmludCk7CisrICAgIGx1YV9zZXRnbG9iYWwoTCwgInByaW50Iik7CisgI2VuZGlmCisrCisgICAgIHJwbWx1YVNldERhdGEobHVhLCAibHVhIiwgbHVhKTsKKyAKKyAgICAgLyogbG9hZCBhbGwgc3RhbmRhcmQgUlBNIEx1YSBzY3JpcHQgZmlsZXMgKi8KK0BAIC0zNTEsNiArMzU0LDkgQEAgdm9pZCBycG1sdWFTZXRWYXIocnBtbHVhIF9sdWEsIHJwbWx1YXYgdgorICNpZiBkZWZpbmVkKExVQV9HTE9CQUxTSU5ERVgpCisgCWlmIChsdWEtPnB1c2hzaXplID09IDApCisgCSAgICBsdWFfcHVzaHZhbHVlKEwsIExVQV9HTE9CQUxTSU5ERVgpOworKyNlbHNlCisrCWlmIChsdWEtPnB1c2hzaXplID09IDApCisrCSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworICNlbmRpZgorIAlpZiAocHVzaHZhcihMLCB2YXItPmtleVR5cGUsICZ2YXItPmtleSkgIT0gLTEpIHsKKyAJICAgIGlmIChwdXNodmFyKEwsIHZhci0+dmFsdWVUeXBlLCAmdmFyLT52YWx1ZSkgIT0gLTEpCitAQCAtMTAzOSwxNCArMTA0NSwxNSBAQCBzdGF0aWMgaW50IHJwbV9wcmludCAobHVhX1N0YXRlICpMKQorICAgICBsdWFfZ2V0Z2xvYmFsKEwsICJ0b3N0cmluZyIpOworICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworIAljb25zdCBjaGFyICpzOworKwlzaXplX3QgbDsKKyAJbHVhX3B1c2h2YWx1ZShMLCAtMSk7ICAvKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgKi8KKyAJbHVhX3B1c2h2YWx1ZShMLCBpKTsgICAvKiB2YWx1ZSB0byBwcmludCAqLworIAlsdWFfY2FsbChMLCAxLCAxKTsKKy0JcyA9IGx1YV90b3N0cmluZyhMLCAtMSk7ICAvKiBnZXQgcmVzdWx0ICovCisrCXMgPSBsdWFfdG9sc3RyaW5nKEwsIC0xLCAmbCk7ICAvKiBnZXQgcmVzdWx0ICovCisgCWlmIChzID09IE5VTEwpCisgCSAgICByZXR1cm4gbHVhTF9lcnJvcihMLCAiYHRvc3RyaW5nJyBtdXN0IHJldHVybiBhIHN0cmluZyB0byBgcHJpbnQnIik7CisgCWlmIChsdWEtPnN0b3JlcHJpbnQpIHsKKy0JICAgIHNpemVfdCBzbCA9IGx1YV9yYXdsZW4oTCwgLTEpOworKwkgICAgc2l6ZV90IHNsID0gbDsKKyAJICAgIGlmICgoc2l6ZV90KShsdWEtPnByaW50YnVmdXNlZCtzbCsxKSA+IGx1YS0+cHJpbnRidWZzaXplKSB7CisgCQlsdWEtPnByaW50YnVmc2l6ZSArPSBzbCs1MTI7CisgCQlsdWEtPnByaW50YnVmID0gKGNoYXIgKikgeHJlYWxsb2MobHVhLT5wcmludGJ1ZiwgbHVhLT5wcmludGJ1ZnNpemUpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5MzBkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkIHN1cHBvcnQgZm9yIGNyb3NzIGNvbXBpbGluZyBsdWEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTIxLDYgKzEyMSw5IEBAIEFDX1BST0dfWUFDQworIAorIEFDX1BBVEhfUFJPRyhBUywgYXMsIGFzKQorIAorK0NDX0ZPUl9CVUlMRD0ke0NDX0ZPUl9CVUlMRC1cJChDQyl9CisrQUNfU1VCU1QoQ0NfRk9SX0JVSUxEKQorKworIGRubCAjIEdDQyBzcGVjaWZpY3MKKyBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIEFDX0FSR19FTkFCTEUoYnVpbGQtcGljLAorSW5kZXg6IHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2x1YS9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCitAQCAtNDEsNyArNDEsNyBAQCBycG1sdWFjX0xEQUREID0gbGlibHVhLmxhCisgCisgIyAtLS0gYmluMmMgZG9lc24ndCBuZWVkIGFueXRoaW5nIGJ1dCBhIGNvbXBpbGVyCisgYmluMmMkKEVYRUVYVCk6ICBiaW4yYy5jCistCSQoQ0MpIC1vICRAICQ8CisrCSQoQ0NfRk9SX0JVSUxEKSAtbyAkQCAkPAorIAorIGxpYmx1YV9sYV9TT1VSQ0VTID0KKyBsaWJsdWFfbGFfQ0ZMQUdTID0gQFdJVEhfTFVBX1NVQkRJUl9ERUZACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTBjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaXNhYmxlIGV4dGVybmFsIGtleSBzZXJ2ZXIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1doZW4gUlBNIGV4cGVyaWVuY2VzIGEgc2lnbmVkIHBhY2thZ2UsIHdpdGggYSBzaWduYXR1cmUgdGhhdCBpdCBkb2VzIE5PVCBrbm93LgorQnkgZGVmYXVsdCBpdCB3aWxsIHNlbmQgdGhlIC1maW5nZXJwcmludC0gKGFuZCBvbmx5IHRoZSAxNiBkaWdpdCBmaW5nZXJwcmludCkgdG8KK2FuIGV4dGVybmFsIEhLUCBzZXJ2ZXIsIHRyeWluZyB0byBnZXQgdGhlIGtleSBkb3duLgorCitUaGlzIGlzIHByb2JhYmx5IG5vdCBhIHJlYXNvbmFibGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIHN5c3RlbSB0byBkbywgaW5zdGVhZAoraXQgc2hvdWxkIHNpbXBseSBmYWlsIHRoZSBrZXkgbG9va3VwLiAgSWYgc29tZW9uZSB3YW50cyB0byBlbmFibGUgdGhlIEhLUCBzZXJ2ZXIKK2l0J3MgZWFzeSBlbm91Z2ggdG8gZG8gYnkgZW5hYmxpbmcgdGhlIG5lY2Vzc2FyeSBtYWNyb3MuCisKK1NpZ25lZC1vZmYtYnk6IHl6aHUxIDx5YW5qdW4uemh1QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CistLS0gYS9tYWNyb3MvbWFjcm9zLmluCisrKysgYi9tYWNyb3MvbWFjcm9zLmluCitAQCAtNTQ2LDggKzU0Niw4IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICMgSG9yb3dpdHogS2V5IFByb3RvY29sIHNlcnZlciBjb25maWd1cmF0aW9uCisgIworICMlX2hrcF9rZXlzZXJ2ZXIgICAgICAgICBoa3A6Ly9rZXlzLm4zbnBxLm5ldAorLSVfaGtwX2tleXNlcnZlciAgICAgICAgIGhrcDovL3Bvb2wuc2tzLWtleXNlcnZlcnMubmV0CistJV9oa3Bfa2V5c2VydmVyX3F1ZXJ5ICAgJXtfaGtwX2tleXNlcnZlcn0vcGtzL2xvb2t1cD9vcD1nZXQmc2VhcmNoPQorKyMlX2hrcF9rZXlzZXJ2ZXIgICAgICAgICBoa3A6Ly9wb29sLnNrcy1rZXlzZXJ2ZXJzLm5ldAorKyMlX2hrcF9rZXlzZXJ2ZXJfcXVlcnkgICAle19oa3Bfa2V5c2VydmVyfS9wa3MvbG9va3VwP29wPWdldCZzZWFyY2g9CisgCisgCisgJV9uc3NkYl9wYXRoCS9ldGMvcGtpL25zc2RiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FiMmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACittYWNyb3MvbWFjcm9zLmluOiBSZXZlcnQgc2V0dGluZ3MgdG8gdGhlIHNhbWUgYXMgUlBNIDUuNC4wCisKK0VuYWJsZSBhIHJlYXNvbmFibGUgc2V0IG9mIHJwbWRlcHMgZGVwZW5kZW5jeSBoZWxwZXIgbWFjcm9zLiAgVGhlc2Ugc2V0cword2VyZSB1c2VkIGJ5IFJQTSA1LjQuMC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbWFjcm9zL21hY3Jvcy5pbgorKysrIHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTEwMjIsNyArMTAyMiw3IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorIAorICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIC0tLS0gcnBtYnVpbGQgbWFjcm9zLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLnJwbWJ1aWxkfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5ycG1idWlsZH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBjbWFrZSguLi4pIGNvbmZpZ3VyYXRpb24KK0BAIC0xMDM4LDE1ICsxMDM4LDE1IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHBlcmwoLi4uKSBjb25maWd1cmF0aW9uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wZXJsfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3Blcmx9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcHl0aG9uKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3B5dGhvbn0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9weXRob259CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcGhwKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BocH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9waHB9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgamF2YSguLi4pIGNvbmZpZ3VyYXRpb24uCitAQCAtMTA1NCwxMSArMTA1NCwxMSBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBsaWJ0b29sKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL2xpYnRvb2x9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvbGlidG9vbH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBwa2djb25maWcoLi4uKSBjb25maWd1cmF0aW9uLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGtnY29uZmlnfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BrZ2NvbmZpZ30KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBtb25vKC4uLikgY29uZmlndXJhdGlvbi4KK0BAIC0xMDcwLDcgKzEwNzAsNyBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0Y2woLi4uKSBjb25maWd1cmF0aW9uLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvdGNsfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3RjbH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0eXBlbGliKC4uLikgY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1sb29wbXNnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLWxvb3Btc2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2ZWQyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1sb29wbXNnLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2xpYi9vcmRlci5jOiBNYWtlIHRoZSBkZXBlbmRlbmN5IGxvb3AgbWVzc2FnZXMgaW50byBkZWJ1ZyBtc2dzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9vcmRlci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9vcmRlci5jCisrKysgcnBtLTUuNC4xNC9saWIvb3JkZXIuYworQEAgLTIxNzUsNyArMjE3NSw3IEBAIHJlc2NhbjoKKyAJCWNvbnN0IGNoYXIgKiBkcDsKKyAJCXJwbWxvZ0x2bCBtc2dsdmwgPSAoYW5hY29uZGEgfHwgKHJwbXRzREZsYWdzKHRzKSAmIFJQTURFUFNfRkxBR19ERVBMT09QUykpCisgCQkJPyBSUE1MT0dfV0FSTklORyA6IFJQTUxPR19FUlI7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgLyogbG9vcC1kZXRlY3Rpb24tb3B0aW9uYWwtbG9nbGV2ZWwgKi8KKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpIC8qIGxvb3AtZGV0ZWN0aW9uLW9wdGlvbmFsLWxvZ2xldmVsICovCisgCQkvLyBSZXBvcnQgbG9vcHMgYXMgZGVidWctbGV2ZWwgbWVzc2FnZSBieSBkZWZhdWx0ICg3ID0gUlBNTE9HX0RFQlVHKSwgb3ZlcnJpZGFibGUKKyAJCW1zZ2x2bCA9IHJwbUV4cGFuZE51bWVyaWMoIiV7P19sb29wX2RldGVjdGlvbl9sb2dsZXZlbH0lez8hX2xvb3BfZGV0ZWN0aW9uX2xvZ2xldmVsOjd9Iik7CisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tcGVybC11cnBtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE4MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitEaXNhYmxlIHBlcmwtVVJQTSBzdXBwb3J0CisKK1RoaXMgY2F1c2VzIGEgY29uZmlndXJlIGZhaWx1cmUgd2hlbiBwZXJsLVVSUE0gaXMgbm90IHVzZWQuCisKK3wgY29uZmlndXJlLmFjOjExNTk6IHJlcXVpcmVkIGZpbGUgYHBlcmwtVVJQTS9NYWtlZmlsZS5QTC5pbicgbm90IGZvdW5kCit8IGNvbmZpZ3VyZS5hYzoxMTU5OiByZXF1aXJlZCBmaWxlIGBwZXJsLVVSUE0vTWFrZWZpbGUuaW4nIG5vdCBmb3VuZAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0xMTg2LDMwICsxMTg2LDEwIEBAIEFDX1NVQlNUKFdJVEhfUEVSTF9TVUJESVIpCisgQUNfU1VCU1QoV0lUSF9QRVJMX1NVQlBBQ0tBR0UpCisgQUNfU1VCU1QoV0lUSF9QRVJMX0xJQlMpCisgCistZG5sICMgb3B0aW9uYWwgUGVybC1VUlBNIGxhbmd1YWdlIGJpbmRpbmdzCisrZG5sICMgZGlzYWJsZSBQZXJsLVVSUE0gbGFuZ3VhZ2UgYmluZGluZ3MKKyBXSVRIX1BFUkxfVVJQTV9TVUJESVI9IiIKKyBXSVRIX1BFUkxfVVJQTV9TVUJQQUNLQUdFPTAKKyBXSVRIX1BFUkxfVVJQTV9MSUJTPSIiCistaWYgdGVzdCAiLiRXSVRIX1BUSFJFQURTIiA9IC55ZXM7IHRoZW4KKy0gICAgV0lUSF9QRVJMX1VSUE1fTElCUz0iJExJQlMiCistZmkKKy1BQ19BUkdfV0lUSChwZXJsLXVycG0sIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGVybC11cnBtXSwgW2J1aWxkIHdpdGggUGVybCBVUlBNIGxhbmd1YWdlIGJpbmRpbmdzXSksIFsKKy0gICAgaWYgdGVzdCAiLiR3aXRodmFsIiAhPSAubm87IHRoZW4KKy0JUEVSTF9VUlBNX0lOU1RBTExESVJTPSIiCistCSAgIGlmIHRlc3QgIiR3aXRodmFsIiA9PSAidmVuZG9yIjsgdGhlbgorLQkJICAgIFBFUkxfVVJQTV9JTlNUQUxMRElSUz0iJ0lOU1RBTExESVJTJwk9PiAndmVuZG9yJywiCistCSAgICBmaQorLQkgICAgaWYgdGVzdCAiJHdpdGh2YWwiID09ICJzaXRlIjsgdGhlbgorLQkJICAgIFBFUkxfVVJQTV9JTlNUQUxMRElSUz0iJ0lOU1RBTExESVJTJyAgICAgPT4gJ3NpdGUnLCIKKy0JICAgIGZpCistCSAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1BFUkxfVVJQTV9JTlNUQUxMRElSU10sIFskUEVSTF9VUlBNX0lOU1RBTExESVJTXSwgW1BlcmwgaW5zdGFsbCBkaXJlY3RvcnkgKHZlbmRvci9zaXRlKV0pCistCSAgICBBQ19TVUJTVChQRVJMX1VSUE1fSU5TVEFMTERJUlMpCistICAgICAgICBXSVRIX1BFUkxfVVJQTV9TVUJESVI9cGVybC1VUlBNCistICAgICAgICBXSVRIX1BFUkxfVVJQTV9TVUJQQUNLQUdFPTEKKy0gICAgICAgIEFDX0NPTkZJR19GSUxFUyhbcGVybC1VUlBNL01ha2VmaWxlLlBMXSkKKy0gICAgICAgIEFDX0NPTkZJR19GSUxFUyhbcGVybC1VUlBNL01ha2VmaWxlXSkKKy0gICAgZmkKKy1dKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9VUlBNX1NVQkRJUikKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9TVUJQQUNLQUdFKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9VUlBNX0xJQlMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vcGVuZGItYmVmb3JlLXZlcmlmeXNjcmlwdC10by1hdm9pZC1udWxsLXBvaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDU4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitycG06IG9wZW5kYiBiZWZvcmUgcnBtdmVyaWZ5c2NyaXB0IHRvIGF2b2lkIG51bGwgcG9pbnQgaW5wdXQKKworSWYgdGhlIGNvbW1hbmQgaXMgInJwbSAtViIgYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgKGhlYWRlcklzRW50cnkoaCwgUlBNVEFHX1ZFUklGWVNDUklQVCkgCit8fCBoZWFkZXJJc0VudHJ5KGgsIFJQTVRBR19TQU5JVFlDSEVDSykpIGxvY2F0ZWQgaW4gL2xpYi92ZXJpZnkuYyBpcyB0cnVlLCBpdCB3aWxsIGNhbGwKK3JwbXBzbVN0YWdlIGZ1bmN0aW9uKHJwbVZlcmlmeVNjcmlwdC0+cnBtcHNtU2NyaXB0U3RhZ2UtPnJwbXBzbVN0YWdlKSBhbmQgb2NjdXIgc2VnbWVudAorZmF1bHQgYmVjYXVzZSBvZiBudWxsIHBvaW50KHJwbXRzR2V0UmRiKHRzKSA9PSBOVUxMIGFuZCBycG10c0dldFJkYih0cyktPmRiX3R4bikuCitTbyB3ZSBvcGVuIHJwbWRiIHRvIGF2b2lkIGJhZCBpbnB1dCB3aGVuIGZpbmQgaGVhZGVySXNFbnRyeSB0cnVlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDx6aGl4aW9uZy5jaGlAd2luZHJpdmVyLmNvbT4KK0luZGV4OiBycG0tNS40LjE0L2xpYi92ZXJpZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvdmVyaWZ5LmMJMjAxNS0wNy0yMiAyMjowOTo1OS45OTI4OTUzNTUgKzA4MDAKKysrKyBycG0tNS40LjE0L2xpYi92ZXJpZnkuYwkyMDE1LTA4LTEzIDEwOjIwOjMzLjc1MjE3NzkwNiArMDgwMAorQEAgLTYxMyw2ICs2MTMsOCBAQAorIAl7CisgCSAgICBGRF90IGZkbyA9IGZkRHVwKFNURE9VVF9GSUxFTk8pOworIAorKwkgICAgcnBtdHNPcGVuREIodHMsIE9fUkRPTkxZKTsgICAgICAgICAgICAvKk9wZW4gdGhlIERCIHRvIGF2b2lkIG51bGwgcG9pbnQgaW5wdXQgaW4gZnVuY3Rpb24gcnBtcHNtU3RhZ2UoKSovCisrCisgCSAgICByYyA9IHJwbWZpU2V0SGVhZGVyKGZpLCBoKTsKKyAJICAgIGlmICgocmMgPSBycG1WZXJpZnlTY3JpcHQocXZhLCB0cywgZmksIGZkbykpICE9IDApCisgCQllYyArPSByYzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vc3NwLXV1aWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3NzcC11dWlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWFiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3NzcC11dWlkLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0ZpeCBpbnRlZ3JhdGlvbiBvZiBvc3NwLXV1aWQKKworV2UgbmVlZCB0byBhdm9pZCBpbmNsdWRpbmcgdGhlIHV0aWwtbGludXggdXVpZCBsaWJyYXJ5LCBpbnN0ZWFkCit3ZSBuZWVkIG9zc3AtdXVpZC4gIFRoZXJlIGlzIGEgcmVsYXRlZCBoYWNrIGluIGRvX2NvbmZpZ3VyZSB0bworbWFrZSBzdXJlIHRoYXQgd2UgdXNlIHRoZSByaWdodCAucGMgZmlsZSBhcyB3ZWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0xOTUxLDcgKzE5NTEsNyBAQCBncmVwIC12ICdkZWZpbmUgSEFWRV9VTklTVERfSCcgY29uZmRlZnMuCisgZXNhYworIFJQTV9DSEVDS19MSUIoCisgICAgIFtPU1NQIHV1aWRdLCBbdXVpZF0sCistICAgIFtvc3NwLXV1aWQgdXVpZF0sIFt1dWlkX2ltcG9ydF0sIFt1dWlkLmhdLAorKyAgICBbb3NzcC11dWlkXSwgW3V1aWRfaW1wb3J0XSwgW3V1aWQuaF0sCisgICAgIFtubyxleHRlcm5hbDpub25lXSwgW10sCisgICAgIFsgZG5sICMgZW5hYmxlIE9TU1AgdXVpZCBuYXRpdmUgQVBJIHN1cHBvcnQgZm9yIGVtYmVkZGVkIEx1YQorICAgICAgIGlmIHRlc3QgIi4kV0lUSF9MVUEiID0gLnllczsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVlMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIHRoZSBhYmlsaXR5IHRvIHF1ZXJ5IHRoZSBwYWNrYWdlb3JpZ2luCisKK1dyaXR0ZW4gYnkgamJqIGF0IHJwbTUub3JnCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9oZHJmbXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9oZHJmbXQuYworKysrIHJwbS01LjQuMTQvcnBtZGIvaGRyZm10LmMKK0BAIC0yNDA5LDggKzI0MDksMTAgQEAgc3RhdGljIGludCBwa2dvcmlnaW5UYWcoSGVhZGVyIGgsIEhFX3QgaAorICAgICBpbnQgcmMgPSAxOworIAorICAgICBoZS0+dGFnID0gUlBNVEFHX1BBQ0tBR0VPUklHSU47CistICAgIGlmICghaGVhZGVyR2V0KGgsIGhlLCBIRUFERVJHRVRfTk9FWFRFTlNJT04pCistICAgICAmJiAob3JpZ2luID0gaGVhZGVyR2V0T3JpZ2luKGgpKSAhPSBOVUxMKQorKyAgICAvKiBYWFggdHdvIHNvdXJjZXMgZm9yIHRhZyBkYXRhOiB3aGF0IHNlYXJjaCBwcmVjZWRlbmNlPyAqLworKyAgICBpZiAoaGVhZGVyR2V0KGgsIGhlLCBIRUFERVJHRVRfTk9FWFRFTlNJT04pKQorKwlyYyA9IDA7CisrICAgIGVsc2UgaWYgKChvcmlnaW4gPSBoZWFkZXJHZXRPcmlnaW4oaCkpICE9IE5VTEwpCisgICAgIHsKKyAJaGUtPnQgPSBSUE1fU1RSSU5HX1RZUEU7CisgCWhlLT5wLnN0ciA9IHhzdHJkdXAob3JpZ2luKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZDAyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoCkBAIC0wLDAgKzEsMTQ2IEBACitJZiB3ZSBydW4gYnVpbGRzIG9uIGEgZmlsZXN5c3RlbSB3aXRoIDY0IGJpdCBpbm9kZXMgbGlrZSBYRlMsIHdlIG5lZWQgdG8KK21hcCB0aGUgaW5vZGUgbnVtYmVycyB0byBzb21ldGhpbmcgMzIgYml0IHNpbmNlIHRoZSBjcGlvIGhlYWRlciBvbmx5IGFsbG93cworZm9yIDMyIGJpdCBpbm9kZSB2YWx1ZXMuIElmIHdlIGRvbid0IGRvIHRoaXM6CisKKyNkZWZpbmUgU0VUX05VTV9GSUVMRChwaHlzLCB2YWwsIHNwYWNlKSBcCisgICAgICAgIHNwcmludGYoc3BhY2UsICIlOC44bHgiLCAodW5zaWduZWQgbG9uZykgKHZhbCkpOyBcCisgICAgICAgIG1lbWNweShwaHlzLCBzcGFjZSwgOCkKKworZnJvbSBjcGlvLmMgd2lsbCBwcmludCBsYXJnZXIgdGhhdCA4IGNoYXJhY3RlciB2YWx1ZXMgYW5kIHRoZW4gdHJ1bmNhdGUgdGhlIAorTFNCcy4gVGhpcyBnZW5lcmF0ZXMgY3BpbyBmaWxlcyB3aGVyZSBoYXJkbGlua2VkIGZpbGVzIG1heSBoYXZlIHRoZSBzYW1lCitpbm9kZSBudW1iZXIuIFRoZSByZXN1bHRpbmcgcnBtcyBhcmUgdGhlbiBjb3JydXB0ZWQuCisKK1RoZXJlIGlzIGEgc2VwYXJhdGUgcGF0Y2ggZm9yIHRoZSBjcmFzaCB0aGUgaWRlbnRpY2FsIGlub2RlIG51bWJlcnMgY2F1c2VzCit3aGVuIGV4dHJhY3RpbmcgdGhlIHJwbS4KKworUGF0Y2ggdGFrZW4gZnJvbSBodHRwOi8vZ2l0LnBsZC1saW51eC5vcmcvP3A9cGFja2FnZXMvcnBtLmdpdDthPWNvbW1pdGRpZmY7aD0xMDUyNmMyM2FhYzYwYjdiNjM2ZTRjOTM4NjI4ODdkYmVmOGU4ZjE1CisKK1JQIDIwMTQvNi8xMAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHJwbS01LjQuMTQvYnVpbGQvZmlsZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9idWlsZC9maWxlcy5jCisrKysgcnBtLTUuNC4xNC9idWlsZC9maWxlcy5jCitAQCAtMTMyOCw2ICsxMzI4LDI2IEBAIHN0YXRpYyBycG11aW50MzJfdCBnZXREaWdlc3RBbGdvKEhlYWRlcgorICAgICByZXR1cm4gZGFsZ287CisgfQorIAorK3N0YXRpYyBpbnQgaXNIYXJkTGluayhGaWxlTGlzdFJlYyBmbHAsIEZpbGVMaXN0UmVjIHRscCkKKyt7CisrICAgIHJldHVybiAoKFNfSVNSRUcoZmxwLT5mbF9tb2RlKSAmJiBTX0lTUkVHKHRscC0+ZmxfbW9kZSkpICYmCisrICAgICAgICAgICAgKChmbHAtPmZsX25saW5rID4gMSkgJiYgKGZscC0+ZmxfbmxpbmsgPT0gdGxwLT5mbF9ubGluaykpICYmCisrICAgICAgICAgICAgKGZscC0+ZmxfaW5vID09IHRscC0+ZmxfaW5vKSAmJgorKyAgICAgICAgICAgIChmbHAtPmZsX2RldiA9PSB0bHAtPmZsX2RldikpOworK30KKysKKytzdGF0aWMgaW50IHNlZW5IYXJkTGluayhGaWxlTGlzdCBmbCwgRmlsZUxpc3RSZWMgZmxwLCBpbm9fdCAqZmlsZWlkKQorK3sKKysgICAgRmlsZUxpc3RSZWMgaWxwOworKyAgICBmb3IgKGlscCA9IGZsLT5maWxlTGlzdDsgaWxwIDwgZmxwOyBpbHArKykgeworKyAgICAgICAgaWYgKGlzSGFyZExpbmsoZmxwLCBpbHApKSB7CisrICAgICAgICAgICAgKmZpbGVpZCA9IGlscCAtIGZsLT5maWxlTGlzdDsKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisgLyoqCisgICogQWRkIGZpbGUgZW50cmllcyB0byBoZWFkZXIuCisgICogQHRvZG8gU2hvdWxkIGRpcmVjdG9yaWVzIGhhdmUgJWRvYy8lY29uZmlnIGF0dHJpYnV0ZXM/ICgjMTQ1MzEpCitAQCAtMTM3NCw2ICsxMzk0LDcgQEAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwkvKiBYWFggdmFsZworIAorICAgICBmb3IgKGkgPSAwLCBmbHAgPSBmbC0+ZmlsZUxpc3Q7IGkgPCBmbC0+ZmlsZUxpc3RSZWNzVXNlZDsgaSsrLCBmbHArKykgeworIAljb25zdCBjaGFyICpzOworKwlpbm9fdCBmaWxlaWQgPSBmbHAgLSBmbC0+ZmlsZUxpc3Q7CisgCisgIAkvKiBNZXJnZSBkdXBsaWNhdGUgZW50cmllcy4gKi8KKyAJd2hpbGUgKGkgPCAoZmwtPmZpbGVMaXN0UmVjc1VzZWQgLSAxKSAmJgorQEAgLTE0MzYsNiArMTQ1NywxMyBAQCBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CS8qIFhYWCB2YWxnCisgCS8qIExlYXZlIHJvb20gZm9yIGJvdGggZGlybmFtZSBhbmQgYmFzZW5hbWUgTlVMJ3MgKi8KKyAJZHBhdGhsZW4gKz0gKHN0cmxlbihmbHAtPmRpc2tVUkwpICsgMik7CisgCisrCS8qIEV4Y2x1ZGVzIGFuZCBkdXBlcyBoYXZlIGJlZW4gZmlsdGVyZWQgb3V0IGJ5IG5vdy4gKi8KKysJaWYgKFNfSVNSRUcoZmxwLT5mbF9tb2RlKSkgeworKwkgICAgaWYgKGZscC0+ZmxfbmxpbmsgPT0gMSB8fCAhc2VlbkhhcmRMaW5rKGZsLCBmbHAsICZmaWxlaWQpKSB7CisrCQlmbC0+dG90YWxGaWxlU2l6ZSArPSBmbHAtPmZsX3NpemU7CisrCSAgICB9CisrCX0KKysKKyAJLyoKKyAJICogTWFrZSB0aGUgaGVhZGVyLCB0aGUgT0xERklMRU5BTUVTIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBhIAorIAkgKiBjb21wcmVzc2VkIGZpbGUgbGlzdCB3cml0ZSBiZWZvcmUgd2Ugd3JpdGUgdGhlIGFjdHVhbCBwYWNrYWdlIHRvCitAQCAtMTUxOCw3ICsxNTQ2LDExIEBAIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsJLyogWFhYIHZhbGcKKyAKKyAJLyogWFhYIEhhc2ggaW5zdGVhZCBvZiA2NGItPjMyYiB0cnVuY2F0ZSB0byBwcmV2ZW50IGFsaWFzaW5nLiAqLworIAl7ICAgaW5vX3QgX2lubyA9IGZscC0+ZmxfaW5vOworKwkvKiBkb24ndCB1c2UgaGFzaCBoZXJlLCBhcyBoYXNoIGNvbGxpc2lvbnMgd2hpY2ggaGFwcGVuIG9uIGxhcmdlIHBhY2thZ2VzCisrCSAgIGNhdXNlIGJ1cyBlcnJvcnMgaW4gcnBtYnVpbGQKKyAJICAgIHVpMzIgPSBoYXNoRnVuY3Rpb25TdHJpbmcoMCwgJl9pbm8sIHNpemVvZihfaW5vKSk7CisrCSovCisrCSAgICB1aTMyID0gZmlsZWlkICsgMTsKKyAJfQorIAloZS0+dGFnID0gUlBNVEFHX0ZJTEVJTk9ERVM7CisgCWhlLT50ID0gUlBNX1VJTlQzMl9UWVBFOworQEAgLTE3NTEsMzkgKzE3ODMsNiBAQCBpZiAoX3JwbWJ1aWxkRmxhZ3MgJiA0KSB7CisgCQlJT1NNX01BUF9UWVBFIHwgSU9TTV9NQVBfTU9ERSB8IElPU01fTUFQX1VJRCB8IElPU01fTUFQX0dJRDsKKyAJaWYgKGlzU3JjKQorIAkgICAgZmktPmZtYXBmbGFnc1tpXSB8PSBJT1NNX0ZPTExPV19TWU1MSU5LUzsKKy0KKy0JaWYgKFNfSVNSRUcoZmxwLT5mbF9tb2RlKSkgeworLQkgICAgaW50IGJpbmdvID0gMTsKKy0JICAgIC8qIEhhcmQgbGlua3MgbmVlZCBiZSB0YWxsaWVkIG9ubHkgb25jZS4gKi8KKy0JICAgIGlmIChmbHAtPmZsX25saW5rID4gMSkgeworLQkJRmlsZUxpc3RSZWMgamxwID0gZmxwICsgMTsKKy0JCWludCBqID0gaSArIDE7CistCQlmb3IgKDsgKHVuc2lnbmVkKWogPCBmaS0+ZmM7IGorKywgamxwKyspIHsKKy0JCSAgICAvKiBmb2xsb3cgb3V0ZXIgbG9vcCBsb2dpYyAqLworLQkJICAgIHdoaWxlICgoKGpscCAtIGZsLT5maWxlTGlzdCkgPCAoZmwtPmZpbGVMaXN0UmVjc1VzZWQgLSAxKSkgJiYKKy0JCQkgICAgIXN0cmNtcChqbHAtPmZpbGVVUkwsIGpscFsxXS5maWxlVVJMKSkKKy0JCQlqbHArKzsKKy0JCSAgICBpZiAoamxwLT5mbGFncyAmIFJQTUZJTEVfRVhDTFVERSkgeworLQkJCWotLTsKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIH0KKy0JCSAgICBpZiAoamxwLT5mbGFncyAmIFJQTUZJTEVfR0hPU1QpCistCQkgICAgICAgIC8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKCFTX0lTUkVHKGpscC0+ZmxfbW9kZSkpCistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICBpZiAoZmxwLT5mbF9ubGluayAhPSBqbHAtPmZsX25saW5rKQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKGZscC0+ZmxfaW5vICE9IGpscC0+ZmxfaW5vKQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKGZscC0+ZmxfZGV2ICE9IGpscC0+ZmxfZGV2KQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgYmluZ28gPSAwOwkvKiBkb24ndCB0YWxseSBoYXJkbGluayB5ZXQuICovCistCQkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKy0JCX0KKy0JICAgIH0KKy0JICAgIGlmIChiaW5nbykKKy0JCWZsLT50b3RhbEZpbGVTaXplICs9IGZscC0+Zmxfc2l6ZTsKKy0JfQorICAgICB9CisgCisgICAgIHVpMzIgPSBmbC0+dG90YWxGaWxlU2l6ZTsKK0luZGV4OiBycG0tNS40LjE0L2xpYi9mc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZnNtLmMKKysrKyBycG0tNS40LjE0L2xpYi9mc20uYworQEAgLTkwNCw2ICs5MDQsNyBAQCBpbnQgZnNtTWFwQXR0cnMoSU9TTV90IGZzbSkKKyAKKyAgICAgaWYgKGZpICYmIGkgPj0gMCAmJiBpIDwgKGludCkgZmktPmZjKSB7CisgCW1vZGVfdCBwZXJtcyA9IChTX0lTRElSKHN0LT5zdF9tb2RlKSA/IGZpLT5kcGVybXMgOiBmaS0+ZnBlcm1zKTsKKysJaW5vX3QgZmluYWxJbm9kZSA9IChmaS0+Zmlub2RlcyA/IChpbm9fdClmaS0+Zmlub2Rlc1tpXSA6IDApOworIAltb2RlX3QgZmluYWxNb2RlID0gKGZpLT5mbW9kZXMgPyAobW9kZV90KWZpLT5mbW9kZXNbaV0gOiBwZXJtcyk7CisgCWRldl90IGZpbmFsUmRldiA9IChkZXZfdCkoZmktPmZyZGV2cyA/IGZpLT5mcmRldnNbaV0gOiAwKTsKKyAJcnBtdWludDMyX3QgZmluYWxNdGltZSA9IChmaS0+Zm10aW1lcyA/IGZpLT5mbXRpbWVzW2ldIDogMCk7CitAQCAtOTQzLDYgKzk0NCw3IEBAIGludCBmc21NYXBBdHRycyhJT1NNX3QgZnNtKQorIAkgICAgaWYgKChTX0lTQ0hSKHN0LT5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0LT5zdF9tb2RlKSkKKyAJICAgICYmIHN0LT5zdF9ubGluayA9PSAwKQorIAkJc3QtPnN0X25saW5rID0gMTsKKysJICAgIHN0LT5zdF9pbm8gPSBmaW5hbElub2RlOworIAkgICAgc3QtPnN0X3JkZXYgPSBmaW5hbFJkZXY7CisgCSAgICBzdC0+c3RfbXRpbWUgPSBmaW5hbE10aW1lOworIAl9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wa2djb25maWdkZXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTgyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitwa2djb25maWdkZXBzLnNoOiBDaGFuZ2UgdG8gcmVzdHJpY3RpbmcgcGtnY29uZmlnIHRvIHRoZSBsb2NhbCBkaXJlY3RvcnkKKworVXNpbmcgUEtHX0NPTkZJR19QQVRIIHdpbGwgYWxsb3cgcGtnLWNvbmZpZyB0byBmYWxsIGJhY2sgdG8gdGhlIHN5c3RlbSBwYXRocywKK3dlIGRvbid0IHdhbnQgdGhpcyBhcyBpdCBtYXkgbGVhZCB0byBpbmFjY3VyYXRlIHJlc3VsdHMgaW4gc29tZSBjb3JuZXIgY2FzZXMuCisKK1BLR19DT05GSUdfTElCRElSIHdpbGwgZW5zdXJlIHBrZy1jb25maWcgc3RheXMgd2l0aGluIHRoZSBpbnN0YWxsIGRpcmVjdG9yeS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3NjcmlwdHMvcGtnY29uZmlnZGVwcy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKKysrKyBycG0tNS40LjE0L3NjcmlwdHMvcGtnY29uZmlnZGVwcy5zaAorQEAgLTE4LDggKzE4LDggQEAgY2FzZSAkMSBpbgorICAgICAqLnBjKQorIAkjIFF1ZXJ5IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHBhY2thZ2UuCisgCURJUj1gZGlybmFtZSAke2ZpbGVuYW1lfWAKKy0JUEtHX0NPTkZJR19QQVRIPSIkRElSOiRESVIvLi4vLi4vc2hhcmUvcGtnY29uZmlnIgorLQlleHBvcnQgUEtHX0NPTkZJR19QQVRICisrCVBLR19DT05GSUdfTElCRElSPSIkRElSOiRESVIvLi4vLi4vc2hhcmUvcGtnY29uZmlnIgorKwlleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAJJHBrZ2NvbmZpZyAtLXByaW50LXByb3ZpZGVzICIkZmlsZW5hbWUiIDI+IC9kZXYvbnVsbCB8IHdoaWxlIHJlYWQgbiByIHYgOyBkbworIAkgICAgWyAtbiAiJG4iIF0gfHwgY29udGludWUKKyAJICAgICMgV2UgaGF2ZSBhIGRlcGVuZGVuY3kuICBNYWtlIGEgbm90ZSB0aGF0IHdlIG5lZWQgdGhlIHBrZ2NvbmZpZworQEAgLTQyLDggKzQyLDggQEAgY2FzZSAkMSBpbgorIAlbIC1uICIkb25lc2hvdCIgXSAmJiBlY2hvICIkb25lc2hvdCI7IG9uZXNob3Q9IiIKKyAJIyBRdWVyeSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlLgorIAlESVI9YGRpcm5hbWUgJHtmaWxlbmFtZX1gCistCVBLR19DT05GSUdfUEFUSD0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKy0JZXhwb3J0IFBLR19DT05GSUdfUEFUSAorKwlQS0dfQ09ORklHX0xJQkRJUj0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKysJZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgCSRwa2djb25maWcgLS1wcmludC1yZXF1aXJlcyAiJGZpbGVuYW1lIiAyPiAvZGV2L251bGwgfCB3aGlsZSByZWFkIG4gciB2IDsgZG8KKyAJICAgIFsgLW4gIiRuIiBdIHx8IGNvbnRpbnVlCisgCSAgICBpZiAgWyAtbiAiJHIiIF0gJiYgWyAtbiAiJHYiIF07IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZhNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLWZpbGUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Rvbid0IGFkZCB0aGUgZmlyc3QgbGluZSBvZiAvZXRjL3JwbS9wbGF0Zm9ybSB0byB0aGUgbGlzdCBvZiBwYXR0ZXJucwordG8gbWF0Y2ggd2hlbiBjb21wdXRpbmcgYW4gYXJjaCBzY29yZSwgdXNlIGl0IGp1c3QgZm9yIGdldHRpbmcKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBwbGF0Zm9ybSAoY3B1L3ZlbmRvci9vcykuIEZpeGVzICMzODY0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC01MTAsNiArNTEwLDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl9CisgCisrI2lmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpIC8qIFNraXAgdGhlIGV4cGxpY2l0LXBsYXRmb3JtICovCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworIAkvKiBkbyBub3QgdXNlIHZlbmRvciBhbmQgR05VIGF0dHJpYnV0aW9uICovCisgCXAgPSBycG1FeHBhbmQoIiV7X2hvc3RfY3B1fS0le19ob3N0X29zfSIsIE5VTEwpOworQEAgLTUyMCw3ICs1MjEsOCBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgI2VuZGlmCisgCXh4ID0gbWlyZUFwcGVuZChSUE1NSVJFX1NUUkNNUCwgMCwgcCwgTlVMTCwgJm1pX3JlLCAmbWlfbnJlKTsKKyAJcCA9IF9mcmVlKHApOworLQkKKysjZW5kaWYKKysKKyAJaW5pdF9wbGF0Zm9ybSsrOworICAgICB9CisgICAgIHJjID0gKGluaXRfcGxhdGZvcm0gPyBSUE1SQ19PSyA6IFJQTVJDX0ZBSUwpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZmQwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0ucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK0ZpeCB1cCBwbGF0Zm9ybSBhbmQgcmVsYXRlZCBzeXNpbmZvIGZpbGUgbG9hZGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgZW5zdXJlcyB0aGF0IFJQTSBrbm93cyB0aGUgY29tcGF0aWJsZSBzZXQgb2YgcGFja2FnZSB0eXBlcyBhdCBhbGwgdGltZXMuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZGVwZW5kcy5jCisrKysgcnBtLTUuNC4xNC9saWIvZGVwZW5kcy5jCitAQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgcnBtdHNBZGRVcGdyYWRlcyhycG10cyB0cywgcnAKKyAJICAgIGhlLT5wLnB0ciA9IF9mcmVlKGhlLT5wLnB0cik7CisgCX0KKyAKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgJiYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAJLyoKKyAJICogSWYgd2UncmUgY2FwYWJsZSBvZiBpbnN0YWxsaW5nIG11bHRpcGxlIGNvbG9ycworIAkgKiBidXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBwYWNrYWdlcyBhcmUgd2hpdGUgKDApLCB3ZQorQEAgLTUwNyw3ICs1MDcsNyBAQCBhc3NlcnQobGFzdHggPj0gMCAmJiBsYXN0eCA8IHRzLT5vcmRlckNvCisgICAgIHJldHVybiAwOworIH0KKyAKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgJiYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAvKiBJcyAiY29tcGF0IiBjb21wYXRpYmxlIHcvIGFyY2g/ICovCisgaW50IF9pc0NvbXBhdGlibGVBcmNoKGNvbnN0IGNoYXIgKiBhcmNoLCBjb25zdCBjaGFyICogY29tcGF0KQorIHsKK0BAIC02NjMsNyArNjYzLDcgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAKKyAJICAgIGlmIChhcmNoID09IE5VTEwgfHwgKHBhcmNoID0gcnBtdGVBKHApKSA9PSBOVUxMKQorIAkJY29udGludWU7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgCSAgICAvKiBYWFggaGFja2VyeSBmb3IgYWxpYXMgbWF0Y2hpbmcuICovCisgCSAgICBpZiAoIV9pc0NvbXBhdGlibGVBcmNoKGFyY2gsIHBhcmNoKSkKKyAJCWNvbnRpbnVlOworQEAgLTgyOSw2ICs4MjksMTIgQEAgaW50IHJwbXRzQWRkRXJhc2VFbGVtZW50KHJwbXRzIHRzLCBIZWFkZQorICAgICByZXR1cm4gcmM7CisgfQorIAorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisrI2RlZmluZSBfRVRDX1JQTV9TWVNJTkZPICAgICAgICAiJXtfZXRjcnBtfS9zeXNpbmZvIgorKyNlbHNlCisrI2RlZmluZSBfRVRDX1JQTV9TWVNJTkZPICAgICAgICBTWVNDT05GSUdESVIgIi9zeXNpbmZvIgorKyNlbmRpZgorKworIC8qQG9ubHlAKi8gLypAbnVsbEAqLyAvKkB1bmNoZWNrZWRAKi8KKyBzdGF0aWMgY2hhciAqc3lzaW5mb19wYXRoID0gTlVMTDsKKyAKK0BAIC0xMzExLDcgKzEzMTcsNyBAQCByZXRyeToKKyAJc3lzaW5mb19wYXRoID0gcnBtRXhwYW5kKCIlez9fcnBtZHNfc3lzaW5mb19wYXRofSIsIE5VTEwpOworIAlpZiAoIShzeXNpbmZvX3BhdGggIT0gTlVMTCAmJiAqc3lzaW5mb19wYXRoID09ICcvJykpIHsKKyAJICAgIHN5c2luZm9fcGF0aCA9IF9mcmVlKHN5c2luZm9fcGF0aCk7CistCSAgICBzeXNpbmZvX3BhdGggPSB4c3RyZHVwKFNZU0NPTkZJR0RJUiAiL3N5c2luZm8iKTsKKysJICAgIHN5c2luZm9fcGF0aCA9IHJwbUV4cGFuZChfRVRDX1JQTV9TWVNJTkZPLCBOVUxMKTsKKyAJfQorICAgICB9CisgCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtZHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtZHMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbWRzLmMKK0BAIC0xNzU5LDcgKzE3NTksNyBAQCBpbnQgcnBtZHNTeXNpbmZvKHJwbVBSQ08gUFJDTywgY29uc3QgY2hhCisgLypALW9ic2VydmVydHJhbnMgQCovCisgCSAgICBfc3lzaW5mb19wYXRoID0gX2ZyZWUoX3N5c2luZm9fcGF0aCk7CisgLypAPW9ic2VydmVydHJhbnMgQCovCistCSAgICBfc3lzaW5mb19wYXRoID0geHN0cmR1cChfRVRDX1JQTV9TWVNJTkZPKTsKKysJICAgIF9zeXNpbmZvX3BhdGggPSBycG1FeHBhbmQoX0VUQ19SUE1fU1lTSU5GTywgTlVMTCk7CisgCX0KKyAgICAgfQorIC8qQD1tb2RvYnNlcnZlckAqLworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtMzgsNyArMzgsMTMgQEAKKyBzdGF0aWMgY29uc3QgY2hhciAqIGNvbmZpZ1RhcmdldCA9IE5VTEw7CisgCisgLypAb2JzZXJ2ZXJAKi8gLypAdW5jaGVja2VkQCovCistc3RhdGljIGNvbnN0IGNoYXIgKiBwbGF0Zm9ybSA9IFNZU0NPTkZJR0RJUiAiL3BsYXRmb3JtIjsKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjZGVmaW5lIF9FVENfUlBNX1BMQVRGT1JNICAgICAgICAiJXtfZXRjcnBtfS9wbGF0Zm9ybSIKKysjZWxzZQorKyNkZWZpbmUgX0VUQ19SUE1fUExBVEZPUk0gICAgICAgIFNZU0NPTkZJR0RJUiAiL3BsYXRmb3JtIgorKyNlbmRpZgorKworK3N0YXRpYyBjb25zdCBjaGFyICogX3BsYXRmb3JtID0gTlVMTDsKKyAKKyAvKkBvbmx5QCovIC8qQHJlbG51bGxAKi8gLypAdW5jaGVja2VkQCovCisgdm9pZCAqIHBsYXRwYXQgPSBOVUxMOworQEAgLTY5NCwxNiArNzAwLDE3IEBAIHN0YXRpYyB2b2lkIGRlZmF1bHRNYWNoaW5lKC8qQG91dEAqLyBjb24KKyAgICAgaW50IHJjOworIAorICAgICB3aGlsZSAoIWdvdERlZmF1bHRzKSB7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCistCWNvbnN0IGNoYXIgKiBfcGxhdGZvcm0gPSBycG1HZXRQYXRoKF9fZXRjcnBtLCAiL3BsYXRmb3JtIiwgTlVMTCk7CistI2Vsc2UKKy0JY29uc3QgY2hhciAqIF9wbGF0Zm9ybSA9IHBsYXRmb3JtOworLSNlbmRpZgorKwlpZiAoX3BsYXRmb3JtID09IE5VTEwpIHsKKysJICAgIF9wbGF0Zm9ybSA9IHJwbUV4cGFuZCgiJXs/X3JwbXJjX3BsYXRmb3JtX3BhdGh9IiwgTlVMTCk7CisrCSAgICAvKiBYWFggbWF5IG5lZWQgdG8gdmFsaWRhdGUgcGF0aCBleGlzdGVuY2Ugc29tZXdoZW4uICovCisrCSAgICBpZiAoIShfcGxhdGZvcm0gIT0gTlVMTCAmJiAqX3BsYXRmb3JtID09ICcvJykpIHsKKysJCV9wbGF0Zm9ybSA9IF9mcmVlKF9wbGF0Zm9ybSk7CisrCQlfcGxhdGZvcm0gPSBycG1FeHBhbmQoX0VUQ19SUE1fUExBVEZPUk0sIE5VTEwpOworKwkgICAgfQorKwl9CisgCUNWT0dfdCBjdm9nID0gTlVMTDsKKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGxhcmdlci11dHNuYW1lICovCisgCWNvbnN0IGNoYXIgKmNwOworLSNlbmRpZgorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogbGFyZ2VyLXV0c25hbWUgKi8KKyAJLyogdXRzbmFtZSBmaWVsZHMgb24gc29tZSBwbGF0Zm9ybXMgKGxpa2UgSFAtVVgpIGFyZSB2ZXJ5IHNtYWxsCisgCSAgIChqdXN0IGFib3V0IDggY2hhcmFjdGVycykuIFRoaXMgaXMgdG9vIHNtYWxsIGZvciBPcGVuUEtHLCBzbyBjaGVhdCEgKi8KKyAJcmMgPSB1bmFtZSgmdW5fcmVhbCk7CitAQCAtNzgwLDkgKzc4Nyw3IEBAIHN0YXRpYyB2b2lkIGRlZmF1bHRNYWNoaW5lKC8qQG91dEAqLyBjb24KKyAJaWYgKGNwICE9IE5VTEwgJiYgY3AgIT0gX3BsYXRmb3JtKQorIAkgICAgY3AgPSBfZnJlZShjcCk7CisgI2VuZGlmCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisgCV9wbGF0Zm9ybSA9IF9mcmVlKF9wbGF0Zm9ybSk7CistI2VuZGlmCisgCisgCWlmIChjb25maWdUYXJnZXQgJiYgIXBhcnNlQ1ZPRyhjb25maWdUYXJnZXQsICZjdm9nKSAmJiBjdm9nICE9IE5VTEwpIHsKKyAJICAgIGdvdERlZmF1bHRzID0gMTsKK0BAIC0xMTAxLDYgKzExMDYsOCBAQCBpbnQgcnBtUmVhZENvbmZpZ0ZpbGVzKC8qQHVudXNlZEAqLyBjb25zCisgCisgI2lmZGVmIFBSRU1BQ1JPRklMRVMKKyAgICAgaWYgKHJwbVJlYWRSQyhQUkVNQUNST0ZJTEVTKSkgcmV0dXJuIC0xOworKyNlbHNlCisrICAgIGlmIChycG1SZWFkUkMoTlVMTCkpIHJldHVybiAtMTsKKyAjZW5kaWYKKyAKKyAgICAgLyogUmVzZXQgdW1hc2sgdG8gaXRzIGRlZmF1bHQgdW1hc2soMikgdmFsdWUuICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ1NGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtMi5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorRml4IHVwIHBsYXRmb3JtIGFuZCByZWxhdGVkIHN5c2luZm8gZmlsZSBsb2FkaW5nIChwYXJ0IDIpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzZXQgdGhlIF9nbnUgZmxhZyBzb21laG93LiAgV2UgZG8gdGhpcyBieSByZWFkaW5nCitmcm9tIHRoZSBwbGF0Zm9ybSBmaWxlLCBhbmQgc2V0dGluZyBhIG5ldyBfcGxhdGZvcm1fZ251IGFuZCByZWxhdGVkIHZhcnMuCisKK1RoZSBkZWZhdWx0IHZhbHVlcyBvZiBfaG9zdF9jcHUsIF9ob3N0X3ZlbmRvciBhbmQgX2hvc3Rfb3MgYXJlIGNoYW5nZWQgdG8KK3JlZmVyZW5jZSBlaXRoZXIgdGhlIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCBfdGFyZ2V0Xy4uLiBvciBfcGxhdGZvcm1fLi4uCit2YWx1ZXMuICBUaGUgbWFjcm9zIGZpbGUgdXNlcyB0aGUgY29uZmlndXJlIHRpbWUgZGVmYXVsdHMgaW4gX3BsYXRmb3JtXy4uLgordmVyc2lvbnMgaGF2ZSBub3QgYmVlbiBkZWZpbmVkLiAgVGhpcyBwcmVzZXJ2ZXMgZXhpc3RpbmcgYmVoYXZpb3IsIGJ1dAorZW5zdXJlcyByZWFzb25hYmxlIGRlZmF1bHRzIGFyZSBhbHdheXMgYXZhaWxhYmxlLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTMyOCwxMCArMzI4LDE1IEBAIHN0YXRpYyB2b2lkIHNldERlZmF1bHRzKHZvaWQpCisgCS8qQG1vZGlmaWVzIHJwbUdsb2JhbE1hY3JvQ29udGV4dCwgaW50ZXJuYWxTdGF0ZSBAKi8KKyB7CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl91c3JsaWJycG0iLCBOVUxMLCBfX3VzcmxpYnJwbSwgUk1JTF9ERUZBVUxUKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl9ldGNycG0iLCBOVUxMLCBfX2V0Y3JwbSwgUk1JTF9ERUZBVUxUKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl92ZW5kb3IiLCBOVUxMLCAiJXs/X2hvc3RfdmVuZG9yfSV7IT9faG9zdF92ZW5kb3I6d3JzfSIsIFJNSUxfREVGQVVMVCk7CisrCisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9jcHUiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX2NwdX0leyE/X3BsYXRmb3JtX2NwdTolez9fdGFyZ2V0X2NwdX19IiwgUk1JTF9ERUZBVUxUKTsKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X3ZlbmRvciIsIE5VTEwsICIlez9fcGxhdGZvcm1fdmVuZG9yfSV7IT9fcGxhdGZvcm1fY3B1OiV7P190YXJnZXRfdmVuZG9yfX0iLCBSTUlMX0RFRkFVTFQpOworKyAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3Rfb3MiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX29zfSV7IT9fcGxhdGZvcm1fb3M6JXs/X3RhcmdldF9vc319IiwgUk1JTF9ERUZBVUxUKTsKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X2dudSIsIE5VTEwsICIlez9fcGxhdGZvcm1fZ251fSV7IT9fcGxhdGZvcm1fZ251OiV7P19nbnV9fSIsIFJNSUxfREVGQVVMVCk7CisgI2VuZGlmCisgCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdXNyIiwgTlVMTCwgVVNSUFJFRklYLCBSTUlMX0RFRkFVTFQpOworQEAgLTQ4Nyw5ICs0OTIsMjIgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAl9CisgCisgCWlmICghcGFyc2VDVk9HKHAsICZjdm9nKSAmJiBjdm9nICE9IE5VTEwpIHsKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKwkgICAgY2hhciAqIF9nbnUgPSBOVUxMOworKworKwkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV9jcHUiLCBOVUxMLCBjdm9nLT5jcHUsIC0xKTsKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fdmVuZG9yIiwgTlVMTCwgY3ZvZy0+dmVuZG9yLCAtMSk7CisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX29zIiwgTlVMTCwgY3ZvZy0+b3MsIC0xKTsKKysKKysJICAgIGlmIChjdm9nLT5nbnUgJiYgY3ZvZy0+Z251WzBdICE9ICdcMCcpCisrCQlfZ251ID0gcnBtRXhwYW5kKCItIiwgY3ZvZy0+Z251LCBOVUxMKTsKKysKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fZ251IiwgTlVMTCwgKF9nbnUgPyBfZ251IDogIiIpLCAtMSk7CisrI2Vsc2UKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9jcHUiLCBOVUxMLCBjdm9nLT5jcHUsIC0xKTsKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCBjdm9nLT52ZW5kb3IsIC0xKTsKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9vcyIsIE5VTEwsIGN2b2ctPm9zLCAtMSk7CisrI2VuZGlmCisgCX0KKyAKKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGV4cGxpY2l0LXBsYXRmb3JtICovCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC05MDAsOSArOTAwLDkgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgJV9vcwkJCUBSUE1DQU5PTk9TQAorICVfZ251CQkJQFJQTUNBTk9OR05VQAorIAorLSVfaG9zdF9wbGF0Zm9ybQkJJXtfaG9zdF9jcHV9LSV7X2hvc3RfdmVuZG9yfS0le19ob3N0X29zfSV7P19nbnV9CistJV9idWlsZF9wbGF0Zm9ybQkle19idWlsZF9jcHV9LSV7X2J1aWxkX3ZlbmRvcn0tJXtfYnVpbGRfb3N9JXs/X2dudX0KKy0lX3RhcmdldF9wbGF0Zm9ybQkle190YXJnZXRfY3B1fS0le190YXJnZXRfdmVuZG9yfS0le190YXJnZXRfb3N9JXs/X2dudX0KKyslX2hvc3RfcGxhdGZvcm0JCSV7X2hvc3RfY3B1fS0le19ob3N0X3ZlbmRvcn0tJXtfaG9zdF9vc30lez9faG9zdF9nbnV9JXshP19ob3N0X2dudTolez9fZ251fX0KKyslX2J1aWxkX3BsYXRmb3JtCSV7X2J1aWxkX2NwdX0tJXtfYnVpbGRfdmVuZG9yfS0le19idWlsZF9vc30lez9faG9zdF9nbnV9JXshP19ob3N0X2dudTolez9fZ251fX0KKyslX3RhcmdldF9wbGF0Zm9ybQkle190YXJnZXRfY3B1fS0le190YXJnZXRfdmVuZG9yfS0le190YXJnZXRfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisgCisgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICMgLS0tLSBjb25maWd1cmUgbWFjcm9zLgorQEAgLTk0NSw5ICs5NDUsMTAgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgJV9idWlsZF9vcwkJJXtfaG9zdF9vc30KKyAlX2hvc3QJCQlAaG9zdEAKKyAlX2hvc3RfYWxpYXMJCUBob3N0X2FsaWFzQCV7bmlsfQorLSVfaG9zdF9jcHUJCUBob3N0X2NwdUAKKy0lX2hvc3RfdmVuZG9yCQlAaG9zdF92ZW5kb3JACistJV9ob3N0X29zCQlAaG9zdF9vc0AKKyslX2hvc3RfY3B1CQklez9fcGxhdGZvcm1fY3B1fSV7IT9fcGxhdGZvcm1fY3B1OiV7X2FyY2h9fQorKyVfaG9zdF92ZW5kb3IJCSV7P19wbGF0Zm9ybV92ZW5kb3J9JXshP19wbGF0Zm9ybV92ZW5kb3I6JXtfdmVuZG9yfX0KKyslX2hvc3Rfb3MJCSV7P19wbGF0Zm9ybV9vc30leyE/X3BsYXRmb3JtX29zOiV7X29zfX0KKyslX2hvc3RfZ251CQklez9fcGxhdGZvcm1fZ251fSV7IT9fcGxhdGZvcm1fZ251OiV7X2dudX19CisgJV90YXJnZXQJCSV7X2hvc3R9CisgJV90YXJnZXRfYWxpYXMJCSV7X2hvc3RfYWxpYXN9CisgJV90YXJnZXRfY3B1CQkle19ob3N0X2NwdX0KK0luZGV4OiBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9weXRob24vcnBtbW9kdWxlLmMKKysrKyBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTY1LDggKzY1LDggQEAgc3RhdGljIFB5T2JqZWN0ICogYXJjaFNjb3JlKFB5T2JqZWN0ICogcworICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAicyIsIGt3bGlzdCwgJmFyY2gpKQorIAlyZXR1cm4gTlVMTDsKKyAKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKy0gICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0le19ob3N0X3ZlbmRvcn0iLCAiLSV7X2hvc3Rfb3N9JXs/X2dudX0iLCBOVUxMKTsKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLSV7X2hvc3RfdmVuZG9yfSIsICItJXtfaG9zdF9vc30lez9faG9zdF9nbnV9JXshP19ob3N0X2dudTolez9fZ251fX0iLCBOVUxMKTsKKyAjZWxzZQorICAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLSIsICIle192ZW5kb3J9IiwgIi0iLCAiJXtfb3N9IiwgTlVMTCk7CisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcHktaW5pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1weS1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDQwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcHktaW5pdC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitweXRob24vcnBtbW9kdWxlcy5jOiBDaGFuZ2UgdGhlIHdheSB0aGUgcHl0aG9uIG1vZHVsZSBsb2FkcyB0aGUgUlBNIGNvbmZpZworCitJbiBvcmRlciB0byBzdXBwb3J0IHRoZSBSUE1fVkVORE9SX1dJTkRSSVZFUiBlbmhhbmNlbWVudCBvZiBkeW5hbWljCitydW50aW1lIHJlbG9jYXRpb24gcGF0aHMsIHdlIG5lZWQgdG8gY2FsbCBycG1jbGlJbml0IGluc3RlYWQgb2YgCitycG1SZWFkQ29uZmlnRmlsZXMuICBUaGUgcnBtY2xpSW5pdCB3aWxsIGVuZCB1cCBjYWxsaW5nIHJwbVJlYWRDb25maWdGaWxlcworYWZ0ZXIgdGhlIG5lY2Vzc2FyeSByZWxvY2F0aW9uIHByb2Nlc3NpbmcgKGlmIGVuYWJsZWQpLgorCitDb2RlIGRlcml2ZWQgZnJvbSBjaGFuZ2VzIHN1Z2dlc3RlZCBieSBQYXVsIEVnZ2xldG9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKK0BAIC0zOTIsNyArMzkyLDggQEAgdm9pZCBpbml0X3JwbSh2b2lkKQorICAgICBpZiAoUHlfQXRFeGl0KHJwbV9leGl0aG9vaykgPT0gLTEpCisgCXJldHVybjsKKyAKKy0gICAgcnBtUmVhZENvbmZpZ0ZpbGVzKE5VTEwsIE5VTEwpOworKyAgICBjb25zdCBjaGFyICphcmd2WzFdID0geyJycG1tb2R1bGUiLCAwfTsKKysgICAgcnBtY2xpSW5pdCgxLCBhcmd2LCBOVUxMKTsKKyAKKyAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxMDEyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWFscGF0aC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitjaHJvb3Q6IHJlYWxwYXRoIGlzIHJlcXVpcmVkIGJlZm9yZSBleHBhbmRpbmcgX2RicGF0aAorCitfdXNyIHR1cm5lZCBvdXQgdG8gYmUgYSByZWxhdGl2ZSBwYXRoIHRvIHN1cHBvcnQgZHlhbm1pYyBjb25maWcsIGJ1dCBpdCdzCitiZWluZyB1c2VkIHNvbWV3aGVyZSBhcyBhIGluZGljYXRvciB0byBsb2NhdGUgc3Vic3RyaW5ncywgc28gd2UgbXVzdCBnZXQKK3RoZSByZWFsIHBhdGggb2YgaXQgaW4gYWR2YW5jZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChPcGVuRW1iZWRkZWQgc3BlY2lmaWMpCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11cnBOIGEvcnBtaW8vcnBtcnBjLmMgYi9ycG1pby9ycG1ycGMuYworLS0tIGEvcnBtaW8vcnBtcnBjLmMKKysrKyBiL3JwbWlvL3JwbXJwYy5jCitAQCAtMjU3LDcgKzI1Nyw5IEBAIGludCBPcGVuKGNvbnN0IGNoYXIgKiBwYXRoLCBpbnQgZmxhZ3MsIG0KKyAgICAgLyogWFhYIGlmIHRoZSBvcGVuKDIpIGZhaWxzLCB0cnkgdG8gc3RyaXAgYSBwb3NzaWJsZSBjaHJvb3QoMikgcHJlZml4LiAqLworICAgICBpZiAoZmRubyA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKSB7CisgCWNvbnN0IGNoYXIgKmRicGF0aCA9IHJwbUV4cGFuZCgiJXs/X2RicGF0aH0vIiwgTlVMTCk7CistCWNvbnN0IGNoYXIgKiBmbiA9IHN0cnN0cihwYXRoICsgMSwgZGJwYXRoKTsKKysJY2hhciByZXNvbHZlZF9kYnBhdGhbUEFUSF9NQVhdOworKwlyZWFscGF0aChkYnBhdGgsIHJlc29sdmVkX2RicGF0aCk7CisrCWNvbnN0IGNoYXIgKiBmbiA9IHN0cnN0cihwYXRoICsgMSwgcmVzb2x2ZWRfZGJwYXRoKTsKKyAJaWYgKGZuKQorIAkgICAgZmRubyA9IG9wZW4oZm4sIGZsYWdzLCBtb2RlKTsKKyAJZGJwYXRoID0gX2ZyZWUoZGJwYXRoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK21hY3JvczogVXNlIGR5YW5taWMgY29uZmlnIHZzIGhhcmQgY29kZWQgc2V0dGluZ3MKKworV2hlbiB0aGUgZHluYW1pYywgcnVudGltZSByZWxvY2F0aW9uIGlzIGVuYWJsZXMgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgCitSUE0gbWFjcm8gZmlsZSBkb2VzIG5vdCBvdmVycmlkZSB0aGUgZHluYW1pYyBzZXR0aW5ncy4gIEZpeCB0aGlzIGJ5IGZvcmNpbmcgdGhlCitkeW5hbWljIHZlcnNpb24gdG8gYmUgdXNlZCBpbiBhbGwgY2FzZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoT3BlbkVtYmVkZGVkIHNwZWNpZmljKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbWFjcm9zL21hY3Jvcy5pbgorKysrIHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTI3LDExICsyNywxMiBAQAorICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIC0tLS0gZmlsZXN5c3RlbSBtYWNyb3MuCisgIworLSVfdXNyCQkJQHVzcnByZWZpeEAKKyslX3VzcgkJCSV7X3VzcmxpYnJwbX0vLi4vLi4KKyAlX3VzcnNyYwkJJXtfdXNyfS9zcmMKKy0lX3ZhcgkJCUB2YXJwcmVmaXhACistJV91c3JsaWJycG0JCUBVU1JMSUJSUE1ACistJV9ldGNycG0JCUBTWVNDT05GSUdESVJACisrJV92YXIJCQkle191c3J9Ly4uL3ZhcgorKyMgVGhlIGR5bmFtaWMgcmVsb2NhdGlvbiBjb2RlIHNldHMgdGhlIGZvbGxvd2luZyB0d28gaXRlbXMKKysjJV91c3JsaWJycG0JCUBVU1JMSUJSUE1ACisrIyVfZXRjcnBtCQlAU1lTQ09ORklHRElSQAorIAorICVfX29iamV4dAkJQG9iamV4dEAKKyAlX19saWJleHQJCUBsaWJleHRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkwMTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitJbmRleDogcnBtLTUuNC4xNC9zeWNrL2xpYi9zeWNrLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3ljay9saWIvc3ljay5oCisrKysgcnBtLTUuNC4xNC9zeWNrL2xpYi9zeWNrLmgKK0BAIC02MjEsOSArNjIxLDYgQEAgbG9uZyBzeWNrX3NlcV9jb3VudCggU3lja05vZGUgKnNlcSApCisgICovCisgdm9pZCBzeWNrZXJyb3IoIGNoYXIgKm1zZyApCisgCS8qQCovOworLWludCBzeWNrcGFyc2UoIHZvaWQgKiApCistCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKy0JLypAbW9kaWZpZXMgZmlsZVN5c3RlbSBAKi87CisgLyogWFhYIHVuaW9uIFlZU1RZUEUgKnN5Y2tsdmFsIGhhcyBpc3N1ZXMgb24gTWFjIE9TIFguICovCisgaW50IHN5Y2tsZXgoIHZvaWQgKl9zeWNrbHZhbCwgU3lja1BhcnNlciAqcGFyc2VyICkKKyAJLypAbW9kaWZpZXMgX3N5Y2tsdmFsLCBwYXJzZXIgQCovOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlc29sdmVkZXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVzb2x2ZWRlcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmEyNDNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlc29sdmVkZXAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorbGliL3JwbXRzLmM6IEVuc3VyZSB0aGF0IHdlIGNoZWNrIGJvdGggcHJvdmlkZW5hbWUgYW5kIGZpbGVwYXRocworCitXaGVuIGxvb2tpbmcgdXAgYSBtaXNzaW5nIGRlcGVuZGVuY2llcywgc3VjaCBhcyAvYmluL3NoLCB3ZSBuZWVkIHRvIGxvb2t1cAoraW4gYm90aCB0aGUgcHJvdmlkZW5hbWUgYW5kIGZpbGVwYXRocyBEQiwgbm90IGp1c3QgdGhlIGZpbGVwYXRocyBEQi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXRzLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG10cy5jCitAQCAtNDEwLDggKzQxMCw4IEBAIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzKCVwLCVwLCVwKVxuIiwgX18KKyAJaWYgKHNkYiA9PSBOVUxMKQorIAkgICAgY29udGludWU7CisgCistCS8qIExvb2sgZm9yIGEgbWF0Y2hpbmcgUHJvdmlkZXM6IGluIHN1Z2dlc3RlZCB1bml2ZXJzZS4gKi8KKy0JcnBtdGFnID0gKCprZXlwID09ICcvJyA/IFJQTVRBR19GSUxFUEFUSFMgOiBSUE1UQUdfUFJPVklERU5BTUUpOworKwlycG10YWcgPSBSUE1UQUdfUFJPVklERU5BTUU7CisrICAgICAgIGRvIHsKKyAJbWkgPSBycG1taUluaXQoc2RiLCBycG10YWcsIGtleXAsIGtleWxlbik7CisgCXdoaWxlICgoaCA9IHJwbW1pTmV4dChtaSkpICE9IE5VTEwpIHsKKyAJICAgIHNpemVfdCBobmFtZWxlbjsKK0BAIC00NDYsNiArNDQ2LDE1IEBAIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzKCVwLCVwLCVwKVxuIiwgX18KKyAJICAgIGJobmFtZWxlbiA9IGhuYW1lbGVuOworIAl9CisgCW1pID0gcnBtbWlGcmVlKG1pKTsKKysKKysJaWYgKGJoID09IE5VTEwgJiYgKmtleXAgPT0gJy8nICYmIHJwbXRhZyA9PSBSUE1UQUdfUFJPVklERU5BTUUpIHsKKysJICAgcnBtdGFnID0gUlBNVEFHX0ZJTEVQQVRIUzsKKysJICAgY29udGludWU7CisrICAgICAgICB9CisrCisrICAgICAgICBicmVhazsKKysgICAgICB9IHdoaWxlICgxKTsKKysKKyAgICAgfQorIAorICAgICAvKiBJcyB0aGVyZSBhIHN1Z2dlc3RlZCByZXNvbHV0aW9uPyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJwbXBncC1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcnBtcGdwLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGZlZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJwbXBncC1maXgucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorcnBtcGdwLmM6IEFkZCBtaXNzaW5nIGlmIGRlZnMgYXJvdW5kIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMKKworV2l0aG91dCB0aGVzZSwgdGhlIHN5c3RlbSB3aWxsIGVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBjb3JyZWN0IGNyeXB0byAKK2xpYnJhcnkgdG8gdXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtL3JwbWlvL3JwbXBncC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLm9yaWcvcnBtaW8vcnBtcGdwLmMKKysrKyBycG0vcnBtaW8vcnBtcGdwLmMKK0BAIC0xMzM5LDE2ICsxMzM5LDI2IEBAIGludCBwZ3BFeHBvcnRQdWJrZXkocGdwRGlnIGRpZykKKyB7CisgICAgIGludCByYyA9IDA7CQkvKiBhc3N1bWUgZmFpbHVyZSAqLworIAorKyNpZiBkZWZpbmVkKFdJVEhfQkVFQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtYmNJbXBsVmVjcykKKyAJcmMgPSBycG1iY0V4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfU1NMKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbXNzbEltcGxWZWNzKQorIAlyYyA9IHJwbXNzbEV4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfTlNTKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbW5zc0ltcGxWZWNzKQorIAlyYyA9IHJwbW5zc0V4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfR0NSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWdjSW1wbFZlY3MpCisgCXJjID0gcnBtZ2NFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1RPTUNSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWx0Y0ltcGxWZWNzKQorIAlyYyA9IHJwbWx0Y0V4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorICAgICByZXR1cm4gcmM7CisgfQorIAorQEAgLTEzNTYsMTYgKzEzNjYsMjYgQEAgaW50IHBncEV4cG9ydFNpZ25hdHVyZShwZ3BEaWcgZGlnLCBESUdFUworIHsKKyAgICAgaW50IHJjID0gMDsJCS8qIGFzc3VtZSBmYWlsdXJlICovCisgCisrI2lmIGRlZmluZWQoV0lUSF9CRUVDUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1iY0ltcGxWZWNzKQorIAlyYyA9IHJwbWJjRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1NTTCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1zc2xJbXBsVmVjcykKKyAJcmMgPSBycG1zc2xFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfTlNTKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbW5zc0ltcGxWZWNzKQorIAlyYyA9IHJwbW5zc0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9HQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtZ2NJbXBsVmVjcykKKyAJcmMgPSBycG1nY0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9UT01DUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1sdGNJbXBsVmVjcykKKyAJcmMgPSBycG1sdGNFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorICAgICByZXR1cm4gcmM7CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODI1MzcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK0VuYWJsZSBhIGNyb3NzLWluc3RhbGwgc2NyaXB0bGV0IGhlbHBlci4KKworVGhlIGhlbHBlciBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZSBjaHJvb3Qgd2l0aCB0aGUgYXJndW1lbnRzOgorCis8cm9vdD4gPHByb2c+IDxzY3JpcHQ+IDxhcmcxPiBbPGFyZzI+IC4uLiA8YXJnTj5dCisKK1RoZSBoZWxwZXIgc2NyaXB0IGlzIHVzZWQgYnkgb2UtY29yZSB0byBmYWNpbGl0YXRlIHNoZWxsIHNjcmlwdCBhY3Rpb25zIHRoYXQKK2NhbiBub3QgYmUgcnVuIGZyb20gd2l0aGluIGEgY2hyb290IG9uIGEgZm9yZWlnbiB0YXJnZXQgc3lzdGVtIGR1cmluZyBhCitjcm9zcyBpbnN0YWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcHNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3BzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvcHNtLmMKK0BAIC04MDYsNiArODA2LDEwIEBAIHN0YXRpYyBycG1SQyBydW5TY3JpcHQocnBtcHNtIHBzbSwgSGVhZGUKKyAgICAgaW50IHh4OworICAgICBpbnQgaTsKKyAKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKyNlbmRpZgorKyAgICAKKyAgICAgaWYgKHBzbS0+c3N0YXRlcyAhPSBOVUxMICYmIGl4ID49IDAgJiYgaXggPCBSUE1TQ1JJUFRfTUFYKQorIAlzc3AgPSBwc20tPnNzdGF0ZXMgKyBpeDsKKyAgICAgaWYgKHNzcCAhPSBOVUxMKQorQEAgLTg3MiwxNCArODc2LDI5IEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCQkoRl9JU1NFVChwc20sIFVOT1JERVJFRCkgPyAiYSIgOiAiIikpOworIAorICAgICBpZiAoUGhlLT5wLmFyZ3YgPT0gTlVMTCkgeworLQlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSg1ICogc2l6ZW9mKCphcmd2KSk7CistCWFyZ3ZbMF0gPSAiL2Jpbi9zaCI7CistCWFyZ2MgPSAxOworKwlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSg3ICogc2l6ZW9mKCphcmd2KSk7CisrCWFyZ2MgPSAwOworKyAgICB9IGVsc2UgeworKwlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSgoUGhlLT5jICsgNikgKiBzaXplb2YoKmFyZ3YpKTsKKysJYXJnYyA9IDA7CisrICAgIH0KKysKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgeworKwlhcmd2W2FyZ2MrK10gPSBzY3JpcHRsZXRXcmFwcGVyOworKwlhcmd2W2FyZ2NdID0gcnBtdHNSb290RGlyKHRzKTsKKysJaWYgKCFhcmd2W2FyZ2NdIHx8ICEqYXJndlthcmdjXSkKKysJICAgYXJndlthcmdjXSA9ICIvIjsKKysJYXJnYysrOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIGlmIChQaGUtPnAuYXJndiA9PSBOVUxMKSB7CisrCWFyZ3ZbYXJnYysrXSA9ICIvYmluL3NoIjsKKyAJbGRjb25maWdfZG9uZSA9IDA7CisgICAgIH0gZWxzZSB7CistCWFyZ3YgPSAoY29uc3QgY2hhciAqKikgYWxsb2NhKChQaGUtPmMgKyA0KSAqIHNpemVvZigqYXJndikpOworLQltZW1jcHkoYXJndiwgUGhlLT5wLmFyZ3YsIFBoZS0+YyAqIHNpemVvZigqYXJndikpOworLQlhcmdjID0gUGhlLT5jOworKwltZW1jcHkoKGFyZ3YgKyBhcmdjKSwgUGhlLT5wLmFyZ3YsIFBoZS0+YyAqIHNpemVvZigqYXJndikpOworKwlhcmdjICs9IFBoZS0+YzsKKyAJbGRjb25maWdfZG9uZSA9IChsZGNvbmZpZ19wYXRoICYmICFzdHJjbXAoYXJndlswXSwgbGRjb25maWdfcGF0aCkKKyAJCT8gMSA6IDApOworICAgICB9CitAQCAtOTMwLDcgKzk0OSwxMiBAQCBhc3NlcnQoaGUtPnAuc3RyICE9IE5VTEwpOworIAkgICAgZ290byBleGl0OworIAorIAlpZiAocnBtSXNEZWJ1ZygpICYmCistCSAgICAoIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9zaCIpIHx8ICFzdHJjbXAoYXJndlswXSwgIi9iaW4vYmFzaCIpKSkKKysJICAgICghc3RyY21wKGFyZ3ZbMF0sICIvYmluL3NoIikgfHwgIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9iYXNoIikpCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIHx8IChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyICYmICFzdHJjbXAoYXJndlsxXSwgIi9iaW4vc2giKSkKKysJICAgIHx8IChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyICYmICFzdHJjbXAoYXJndlsxXSwgIi9iaW4vYmFzaCIpKQorKyNlbmRpZgorKwkgICApCisgCXsKKyAJICAgIHN0YXRpYyBjb25zdCBjaGFyIHNldF94W10gPSAic2V0IC14XG4iOworIAkgICAgbncgPSBGd3JpdGUoc2V0X3gsIHNpemVvZihzZXRfeFswXSksIHNpemVvZihzZXRfeCktMSwgZmQpOworQEAgLTEwNjUsMTIgKzEwODksMjIgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAKKyAJeyAgIGNvbnN0IGNoYXIgKiByb290RGlyID0gcnBtdHNSb290RGlyKHRzKTsKKyAJICAgIGlmICghcnBtdHNDaHJvb3REb25lKHRzKSAmJiByb290RGlyICE9IE5VTEwgJiYKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkJIShzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKSAmJgorKyNlbmRpZgorIAkJIShyb290RGlyWzBdID09ICcvJyAmJiByb290RGlyWzFdID09ICdcMCcpKQorIAkgICAgeworIAkJLypALW1vZG9ic2VydmVyQCovCisgCQl4eCA9IENocm9vdChyb290RGlyKTsKKyAJCS8qQD1tb2RvYnNlcnZlckAqLworIAkgICAgfQorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICBpZiAoIXJwbXRzQ2hyb290RG9uZSh0cykgJiYgcm9vdERpciAhPSBOVUxMICYmCisrCQkoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgJiYKKysJCSEocm9vdERpclswXSA9PSAnLycgJiYgcm9vdERpclsxXSA9PSAnXDAnKSkKKysJCXh4ID0gQ2hkaXIocm9vdERpcik7CisrCSAgICBlbHNlIAorKyNlbmRpZgorIAkgICAgeHggPSBDaGRpcigiLyIpOworIAkgICAgcnBtbG9nKFJQTUxPR19ERUJVRywgRF8oIiVzOiAlcyglcylcdGV4ZWN2KCVzKSBwaWQgJWRcbiIpLAorIAkJCXBzbS0+c3RlcE5hbWUsIHNsbiwgTlZSQSwKK0BAIC0yOTg1LDYgKzMwMTksMTMgQEAgYXNzZXJ0KHBzbS0+dGUgIT0gTlVMTCk7CisgICAgIGNhc2UgUFNNX1NDUklQVDoJLyogUnVuIGN1cnJlbnQgcGFja2FnZSBzY3JpcHRsZXRzLiAqLworIAkvKiBYWFggcnVubmluZyAldmVyaWZ5c2NyaXB0LyVzYW5pdHljaGVjayBkb2Vzbid0IGhhdmUgcHNtLT50ZSAqLworICAgICB7CXJwbXR4biBfcGFyZW50ID0gKHBzbSAmJiBwc20tPnRlID8gcHNtLT50ZS0+dHhuIDogTlVMTCk7CisrCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfT1VUKTsKKysjZW5kaWYKKysKKyAJeHggPSBycG10eG5CZWdpbihycG10c0dldFJkYih0cyksIF9wYXJlbnQsIE5VTEwpOworIAlyYyA9IHJ1bkluc3RTY3JpcHQocHNtKTsKKyAJaWYgKHJjKQorQEAgLTI5OTIsMTEgKzMwMzMsMjQgQEAgYXNzZXJ0KHBzbS0+dGUgIT0gTlVMTCk7CisgCWVsc2UKKyAJICAgICB4eCA9IHJwbXR4bkNvbW1pdChycG10c0dldFJkYih0cyktPmRiX3R4bik7CisgCXJwbXRzR2V0UmRiKHRzKS0+ZGJfdHhuID0gTlVMTDsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX0lOKTsKKysjZW5kaWYKKyAgICAgfQlicmVhazsKKyAgICAgY2FzZSBQU01fVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiBvdGhlciBwYWNrYWdlKHMpIHRoaXMgcGFja2FnZSBzZXRzIG9mZi4gKi8KKyAJaWYgKHJwbXRzRmxhZ3ModHMpICYgUlBNVFJBTlNfRkxBR19URVNUKQlicmVhazsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9PVVQpOworKyNlbmRpZgorIAlyYyA9IHJ1blRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9JTik7CisrI2VuZGlmCisgCWJyZWFrOworICAgICBjYXNlIFBTTV9JTU1FRF9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIHRoaXMgcGFja2FnZSBvdGhlciBwYWNrYWdlKHMpIHNldCBvZmYuICovCitAQCAtMzAwNiw3ICszMDYwLDE4IEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworIAkgICAgRl9TRVQocHNtLCBHT1RUUklHR0VSUyk7CisgCX0KKyAJaWYgKHBzbS0+dHJpZ2dlcnMgIT0gTlVMTCkKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwl7CisrICAgICAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX09VVCk7CisrI2VuZGlmCisgCSAgICByYyA9IHJ1bkltbWVkVHJpZ2dlcnMocHNtKTsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfSU4pOworKwl9CisrI2VuZGlmCisgCWJyZWFrOworIAorICAgICBjYXNlIFBTTV9SUE1JT19GTEFHUzoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zaG93cmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2hvd3JjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzhiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2hvd3JjLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1dvcmthcm91bmQgZm9yIGEgbWVtb3J5IGxlYWsgaW4gLS1zaG93cmMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTEyMjgsMTEgKzEyMjgsMTUgQEAgaW50IHJwbVNob3dSQyhGSUxFICogZnApCisgCQlpZiAoRE5FVlIgIT0gTlVMTCkKKyAJCSAgICBmcHJpbnRmKGZwLCAiICAgICVzXG4iLCBETkVWUisyKTsKKyAJICAgIH0KKysjaWYgMAorIAkgICAgKHZvaWQpcnBtZHNGcmVlKGRzKTsKKyAJICAgIGRzID0gTlVMTDsKKysjZW5kaWYKKyAJICAgIGZwcmludGYoZnAsICJcbiIpOworIAl9CisrI2lmIDAKKyAJUFJDTyA9IHJwbWRzRnJlZVBSQ08oUFJDTyk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgICAgaWYgKHJwbUlzVmVyYm9zZSgpKSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzI3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitmaXggYSBlbmRpYW4gaW5jb21wYXRpYmxlIGVycm9yIGluIGdlbmVyYXRpbmcgcnBtIHRhZworCitBIGZsYXcgd2FzIGZvdW5kIGluIHRoZSB3YXkgcnBtIGdlbmVyYXRpbmcgYXJiaXRyYXJ5IHRhZ3MsIHdoaWNoIGxlYWRzIHRvIGEKK2luY29ycmVjdCBxdWVyeSByZXN1bHQsIHRoaXMgaXNzdWUgaXMgaW50cm9kdWNlZCBieSBhIGluY29tcGF0aWJsZSBlbmRpYW5lc3MKK3doZW4gdGhlIGdlbmVyYXRpbmcgcHJvY2VzcyBpcyBleGVjdXRlZCBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4KKworVGhpcyBwYXRjaCByZXNvbHZlcyBpdCBieSB0YWtpbmcgdGhlIGJ5dGUgb3JkZXIgdGhhdCBob3N0IHVzZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRhZ25hbWUuYyB8ICAgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3RhZ25hbWUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi90YWduYW1lLmMKKysrKyBycG0tNS40LjE0L3JwbWRiL3RhZ25hbWUuYworQEAgLTMsNiArMywxOSBAQAorICAqLworIAorICNpbmNsdWRlICJzeXN0ZW0uaCIKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrCisrLyogRG9uJ3QgcmVkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBhbHJlYWR5IGV4aXN0cyAqLworKyNpZm5kZWYgbGUzMnRvaAorKyNpZmRlZiBfX1VTRV9CU0QKKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorKyNkZWZpbmUgbGUzMnRvaCh4KSAoeCkKKysjZWxzZQorKyNkZWZpbmUgbGUzMnRvaCh4KSBfX2Jzd2FwXzMyKHgpCisrI2VuZGlmCisrI2VuZGlmIC8qIF9fVVNFX0JTRCAqLworKyNlbmRpZiAvKiBsZTMydG9oICovCisgCisgI2luY2x1ZGUgPHJwbWlvX2ludGVybmFsLmg+CS8qIFhYWCBESUdFU1RfQ1RYLCB4dG9sb3dlciwgeHN0cmNhc2VjbXAgKi8KKyAjaW5jbHVkZSA8cnBtbWFjcm8uaD4KK0BAIC0xNTIsNyArMTY1LDEwIEBAIHN0YXRpYyBycG1UYWcgX3RhZ0dlbmVyYXRlKGNvbnN0IGNoYXIgKnMKKyAgICAgeHggPSBycG1EaWdlc3RVcGRhdGUoY3R4LCBzLCBuYik7CisgICAgIHh4ID0gcnBtRGlnZXN0RmluYWwoY3R4LCAmZGlnZXN0LCAmZGlnZXN0bGVuLCAwKTsKKyAgICAgaWYgKGRpZ2VzdCAmJiBkaWdlc3RsZW4gPiA0KSB7CisrCS8qIFRoZSB0YWcgaXMgc3RvcmVkIGluIGEgdW5pZm9ybSBieXRlIG9yZGVyIGZvciBjcm9zcy1lbmRpYW4gY29tcGF0aWJpbGl0eS4KKysJICAgU3dhcCB0byB0aGUgaG9zdCB1c2VzLiAqLworIAltZW1jcHkoJnRhZywgZGlnZXN0ICsgKGRpZ2VzdGxlbiAtIDQpLCA0KTsKKysJdGFnID0gbGUzMnRvaCh0YWcpOworIAl0YWcgPSAocnBtVGFnKSAodGFnICYgMHgzZmZmZmZmZik7CisgCXRhZyA9IChycG1UYWcpICh0YWcgfCAweDQwMDAwMDAwKTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg1YmViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorU291cmNlOiBOb25lCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0F1dGhvcjogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IDIwMTEtMDMtMDMKK0Rlc2NyaXB0aW9uOgorVGhpcyBwYXRjaCBmaXhlcyBidWlsZCBpc3N1ZSBmb3VuZCB3aGVuIGNvbXBpbGluZyBycG0tbmF0aXZlIG9uIHVidW50dQorMTEuMDQtYWxwaGEuIFByb2JsZW0gaXMgdGhhdCBsaW5rZXIgZG9lcyBub3QgZ2V0IGNvcnJlY3Qgc2V0IG9mIGRlcGVuZGVudAorbGlicmFyaWVzIHdoZW4gbGlua2luZyBtdHJlZSBiaW5hcnkgd2hpY2ggcmVzdWx0cyBpbiB1bmRlZmluZWQgc3ltYm9scworaW4gbGlicnBtaW8uc28uIFRoaXMgcGF0Y2ggYWRkcyBjb3JyZWN0IGZsYWdzIHRvIG10cmVlX0xEQUREIHRvIGFjY291bnQKK2ZvciBycG1pbyBkZXBzCisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorQEAgLTE4Niw3ICsxODYsNyBAQCBncmVwX0xEQUREID0JCSQoUlBNSU9fTERBRERfQ09NTU9OKQorIAorIG10cmVlX1NPVVJDRVMgPQkJcnBtbXRyZWUuYworIG10cmVlX0xERkxBR1MgPQkJQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCistbXRyZWVfTERBREQgPQkJJChSUE1fTERBRERfQ09NTU9OKQorK210cmVlX0xEQUREID0JCSQoUlBNSU9fTERBRERfQ09NTU9OKQorIAorIHJwbXJlcG9fU09VUkNFUyA9CXJwbXJlcG8uYworIHJwbXJlcG9fQ1BQRkxBR1MgPQkkKEFNX0NQUEZMQUdTKSAtSSQodG9wX3NyY2Rpcikvc2NyaXB0cyAtSSQodG9wX2J1aWxkZGlyKS9zY3JpcHRzICQoQ1BQRkxBR1MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNmODRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitBIHBhdGNoIHRvIGZpeCBhIHByb2JsZW0gd2hlbiBjb21waWxpbmcgd2l0aCB1dWlkLgorCitXaGVuIGF0dGVtcHRpbmcgdG8gYnVpbGQgd2l0aCB1dWlkIGFuZCBhbGwgdGVzdHMgY29tcGlsaW5nIHdpbGwgZXJyb3IgYmVjYXVzZQordXVpZC5oIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHJwbSB0YXJiYWxsLiBGaXggdGhpcyBieSBjaGFuZ2luZyB0aGUgaW5jbHVkZSB0bwordXNlIHRoZSBvbmUgaW4gb3NzcCB3aGljaCBzb2x2ZXMgdGhlIGlzc3VlLiAKKworVGhlIHJlY2lwZSBhbHJlYWR5IGRlcGVuZHMgb24gb3NzcCBzbyBvc3NwL3V1aWQuaCB3aWxsIGJlIHRoZXJlIHdoZW4gcnBtLW5hdGl2ZQoraXMgYnVpbHQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNb3JnYW4gTGl0dGxlIDxtb3JnYW4ubGl0dGxlQHdpbmRyaXZlci5jb20+CisKKworSW5kZXg6IHJwbS01LjQuMTQvbHVhL2xvY2FsL2x1dWlkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbHVhL2xvY2FsL2x1dWlkLmMKKysrKyBycG0tNS40LjE0L2x1YS9sb2NhbC9sdXVpZC5jCitAQCAtMjEsNyArMjEsNyBAQAorIAorICNpZmRlZiBMVUFfVVNFX1VVSUQKKyAKKy0jaW5jbHVkZSAidXVpZC5oIgorKyNpbmNsdWRlIDxvc3NwL3V1aWQuaD4KKyAKKyAvKiAgTHVhIG1ldGhvZDogPHV1aWQ+ID0gdXVpZC5nZW5lcmF0ZSg8dmVyc2lvbj5bLCA8dXVpZC1uYW1lc3BhY2U+LCA8ZGF0YT5dKSAgKi8KKyBzdGF0aWMgaW50IGx1dWlkX2dlbmVyYXRlKGx1YV9TdGF0ZSAqTCkKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL3JwbXV1aWQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9ycG11dWlkLmMKKysrKyBycG0tNS40LjE0L3JwbWlvL3JwbXV1aWQuYworQEAgLTE2LDcgKzE2LDcgQEAKKyAjaW5jbHVkZSAicnBtbG9nLmgiCisgI2luY2x1ZGUgInJwbXV1aWQuaCIKKyAjaWZkZWYgV0lUSF9VVUlECistI2luY2x1ZGUgInV1aWQuaCIKKysjaW5jbHVkZSA8b3NzcC91dWlkLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgImRlYnVnLmgiCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0yY3BpbyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbTJjcGlvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiY2VmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0yY3BpbwpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKworIyBQcmV2ZW50IGdhd2sgPj0gNC4wLnggZnJvbSBnZXR0aW5nIGZ1bm55IGlkZWFzIHdydCBVVEYgaW4gcHJpbnRmKCkKK0xBTkc9QworCitwa2c9JDEKK2lmIFsgIiRwa2ciID0gIiIgLW8gISAtZSAiJHBrZyIgXTsgdGhlbgorICAgIGVjaG8gIm5vIHBhY2thZ2Ugc3VwcGxpZWQiIDE+JjIKKyAgIGV4aXQgMQorZmkKKworbGVhZHNpemU9OTYKK289YGV4cHIgJGxlYWRzaXplICsgOGAKK3NldCBgb2QgLWogJG8gLU4gOCAtdCB1MSAkcGtnYAoraWw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDIgKyAkMyBcKSArICQ0IFwpICsgJDVgCitkbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkNiArICQ3IFwpICsgJDggXCkgKyAkOWAKKyMgZWNobyAic2lnIGlsOiAkaWwgZGw6ICRkbCIKKworc2lnc2l6ZT1gZXhwciA4ICsgMTYgXCogJGlsICsgJGRsYAorbz1gZXhwciAkbyArICRzaWdzaXplICsgXCggOCAtIFwoICRzaWdzaXplIFwlIDggXCkgXCkgXCUgOCArIDhgCitzZXQgYG9kIC1qICRvIC1OIDggLXQgdTEgJHBrZ2AKK2lsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQyICsgJDMgXCkgKyAkNCBcKSArICQ1YAorZGw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDYgKyAkNyBcKSArICQ4IFwpICsgJDlgCisjIGVjaG8gImhkciBpbDogJGlsIGRsOiAkZGwiCisKK2hkcnNpemU9YGV4cHIgOCArIDE2IFwqICRpbCArICRkbGAKK289YGV4cHIgJG8gKyAkaGRyc2l6ZWAKK2NvbXA9YGRkIGlmPSRwa2cgaWJzPSRvIHNraXA9MSBjb3VudD0xIDI+L2Rldi9udWxsIHwgZGQgYnM9MyBjb3VudD0xIDI+IC9kZXYvbnVsbGAKKworZ3o9ImBlY2hvIC4gfCBhd2sgJ3sgcHJpbnRmKCIlYyVjIiwgMHgxZiwgMHg4Yik7IH0nYCIKK2x6bWE9ImBlY2hvIC4gfCBhd2sgJ3sgcHJpbnRmKCIlY0xaIiwgMHhmZik7IH0nYCIKK3h6PSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWM3eiIsIDB4ZmQpOyB9J2AiCitjYXNlICIkY29tcCIgaW4KKyAgICBCWmgpICAgICAgZGQgaWY9IiRwa2ciIGlicz0kbyBza2lwPTEgMj4vZGV2L251bGwgfCBidW56aXAyIDs7CisgICAgIiRneiIqKSAgIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgZ3VuemlwIDs7CisgICAgIiR4eiIqKSAgIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgeHpjYXQgOzsKKyAgICAiJGx6bWEiKikgZGQgaWY9IiRwa2ciIGlicz0kbyBza2lwPTEgMj4vZGV2L251bGwgfCB1bmx6bWEgOzsKKyAgICAqKSAgICAgICAgZWNobyAiVW5yZWNvZ25pemVkIHJwbSBmaWxlOiAkcGtnIjsgZXhpdCAxIDs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1hdGNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQxM2FhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtYXRjaC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitBZGQgY29uZmlndXJlIGNoZWNrIGZvciBycG1hdGNoKCkgYW5kIAorY3JlYXRlcyBhIGNvbXBhdGFibGUgbWFjcm8gaWYgaXQgaXMgbm90IHByb3ZpZGVkIGJ5IHRoZSBDIGxpYnJhcnkuCisKK1RoaXMgaXMgbmVlZGVkIGZvciB1Y2xpYmMgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSB0aGUgYWJvdmUgZnVuY3Rpb24KK2ltcGxlbWVudGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtOTQzLDcgKzk0Myw3IEBAIEFDX0NIRUNLX0ZVTkNTKFtkbmwKKyAgICAgZnRvayBnZXRhZGRyaW5mbyBnZXRhdHRybGlzdCBnZXRjd2QgZ2V0ZGVsaW0gZ2V0bGluZSBnZXRtb2RlIGdldG5hbWVpbmZvIGRubAorICAgICBnZXRwYXNzcGhyYXNlIGdldHhhdHRyIGdldHdkIGljb252IGluZXRfYXRvbiBsY2hmbGFncyBsY2htb2QgbGNob3duIGRubAorICAgICBsZ2V0eGF0dHIgbHNldHhhdHRyIGx1dGltZXMgbWFkdmlzZSBtZW1wY3B5IG1rZHRlbXAgbWtzdGVtcCBtdHJhY2UgZG5sCistICAgIHBvc2l4X2ZhZHZpc2UgcG9zaXhfZmFsbG9jYXRlIHB1dGVudiByZWFscGF0aCByZWdjb21wIHNlY3VyZV9nZXRlbnYgX19zZWN1cmVfZ2V0ZW52IGRubAorKyAgICBwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhbGxvY2F0ZSBwdXRlbnYgcmVhbHBhdGggcmVnY29tcCBycG1hdGNoIHNlY3VyZV9nZXRlbnYgX19zZWN1cmVfZ2V0ZW52IGRubAorICAgICBzZXRhdHRybGlzdCBzZXRlbnYgc2V0bG9jYWxlIHNldG1vZGUgc2V0eGF0dHIgZG5sCisgICAgIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnaG9sZCBzaWdyZWxzZSBzaWdwYXVzZSBkbmwKKyAgICAgc2lncHJvY21hc2sgc2lnc3VzcGVuZCBzaWdhY3Rpb24gZG5sCitJbmRleDogcnBtLTUuNC4xNC9zeXN0ZW0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zeXN0ZW0uaAorKysrIHJwbS01LjQuMTQvc3lzdGVtLmgKK0BAIC0zNTMsNiArMzUzLDE0IEBAIGV4dGVybiBpbnQgX3RvbG93ZXIoaW50KSBfX1RIUk9XCS8qQCovOworICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAjZW5kaWYKKyAKKysjaWZuZGVmIEhBVkVfUlBNQVRDSAorKyNkZWZpbmUgcnBtYXRjaChsaW5lKSBcCisrCSggKGxpbmUgPT0gTlVMTCk/IC0xIDogXAorKwkgICgqbGluZSA9PSAneScgfHwgKmxpbmUgPT0gJ1knKT8gMSA6IFwKKysJICAoKmxpbmUgPT0gJ24nIHx8ICpsaW5lID09ICdOJyk/IDAgOiBcCisrCSAgLTEgKQorKyNlbmRpZgorKworIC8qIC0tIFJldHJvZml0IGdsaWJjIF9fcHJvZ25hbWUgKi8KKyAjaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgX19HTElCQ19fID49IDIKKyAjaWYgX19HTElCQ19NSU5PUl9fID49IDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRlcHMtb2Vjb3JlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGVwcy1vZWNvcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkZDFkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRlcHMtb2Vjb3JlLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitBZGQgYW4gInJwbWRlcHMtb2Vjb3JlIiBiaW5hcnkgd2hpY2ggYWxsb3dzIGJhdGNoIHByb2Nlc3Npbmcgb2YgaW5kaXZpZHVhbCBmaWxlCitkZXBlbmRlbmNpZXMgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBycG1kZXBzIC0tcHJvdmlkZXMgLS1yZXF1aXJlcyAtdiwgcHJlZml4aW5nCitlYWNoIGxpbmUgb2Ygb3V0cHV0IHdpdGggdGhlIGZpbGVuYW1lIHRoYXQgaGFzIHRoZSBkZXBlbmRlbmN5LgorCitUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gaW5kaXZpZHVhbGx5IGNhbGxpbmcgcnBtZGVwcyBvbiBlYWNoIGZpbGUuCisKK1RoaXMgYmluYXJ5IGlzIHVzZWQgYnkgcGFja2FnZS5iYmNsYXNzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDEyLzIvNworCistLS0KKyB0b29scy9NYWtlZmlsZS5hbSAgICAgIHwgICAgNiArKy0KKyB0b29scy9ycG1kZXBzLW9lY29yZS5jIHwgIDE0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9ycG1kZXBzLW9lY29yZS5jCisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorQEAgLTYyLDcgKzYyLDcgQEAgcGtnYmluX1BST0dSQU1TID0JXAorIAlAV0lUSF9BVUdFQVNfQVVHVE9PTEAgY2hyb290IGNwIEBXSVRIX0NVREZfQ1VERlRPT0xAIGZpbmQgbXRyZWUgXAorIAlAV0lUSF9TRU1BTkFHRV9TRU1PRFVMRUAgd2dldCBcCisgCXJwbWNhY2hlIHJwbWRpZ2VzdCBycG1yZXBvIHJwbXNwZWNkdW1wIFwKKy0JcnBtY21wIHJwbWRlcHMgc3FsaXRlMyBAV0lUSF9LRVlVVElMU19SUE1LRVlAIEBXSVRIX0xJQkVMRl9ERUJVR0VESVRACisrCXJwbWNtcCBycG1kZXBzIHJwbWRlcHMtb2Vjb3JlIHNxbGl0ZTMgQFdJVEhfS0VZVVRJTFNfUlBNS0VZQCBAV0lUSF9MSUJFTEZfREVCVUdFRElUQAorIGlmIFdJVEhfREIKKyBwa2diaW5fUFJPR1JBTVMgKz0JZGJjb252ZXJ0CisgZW5kaWYKK0BAIC0xNzIsNiArMTcyLDEwIEBAIHJwbWRlcHNfU09VUkNFUyA9CXJwbWRlcHMuYworIHJwbWRlcHNfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWRlcHNfTERBREQgPQkJJChSUE1fTERBRERfQ09NTU9OKQorIAorK3JwbWRlcHNfb2Vjb3JlX1NPVVJDRVMgPSAgcnBtZGVwcy1vZWNvcmUuYworK3JwbWRlcHNfb2Vjb3JlX0xERkxBR1MgPSAgQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisrcnBtZGVwc19vZWNvcmVfTERBREQgPSAgICAkKFJQTV9MREFERF9DT01NT04pCisrCisgcnBtZGlnZXN0X1NPVVJDRVMgPQlycG1kaWdlc3QuYworIHJwbWRpZ2VzdF9MREZMQUdTID0JQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtZGlnZXN0X0xEQUREID0JJChSUE1JT19MREFERF9DT01NT04pCitJbmRleDogcnBtLTUuNC4xNC90b29scy9ycG1kZXBzLW9lY29yZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgcnBtLTUuNC4xNC90b29scy9ycG1kZXBzLW9lY29yZS5jCitAQCAtMCwwICsxLDE0NyBAQAorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKytjb25zdCBjaGFyICpfX3Byb2duYW1lOworKworKyNpbmNsdWRlIDxycG1pby5oPgorKyNpbmNsdWRlIDxycG1pb3R5cGVzLmg+CisrI2luY2x1ZGUgPHJwbWNiLmg+CisrI2luY2x1ZGUgPGFyZ3YuaD4KKysjaW5jbHVkZSA8cnBtdHlwZXMuaD4KKysjaW5jbHVkZSA8cnBtdGFnLmg+CisrCisrI2luY2x1ZGUgPHJwbWRzLmg+CisrI2RlZmluZSAgIF9SUE1GQ19JTlRFUk5BTCAgICAgLyogWFhYIGZvciBkZWJ1Z2dpbmcgKi8KKysjaW5jbHVkZSA8cnBtZmMuaD4KKysKKysjaW5jbHVkZSA8cnBtY2xpLmg+CisrCisrI2luY2x1ZGUgImRlYnVnLmgiCisrCisrLypAdW5jaGVja2VkQCovCisrY2hhciAqcHJvZ25hbWU7CisrCisrI2RlZmluZSAgIFJQTURFUF9SUE1GQyAgICAgICAgMQorKworK3N0YXRpYyBpbnQgcnBtZGVwUHJpbnQoY2hhciAqZmlsZW5hbWUsIHJwbWRzIGRzLCBGSUxFICogZnApCisreworKyAgICBpZiAoZnAgPT0gTlVMTCkgZnAgPSBzdGRlcnI7CisrCisrICAgIGRzID0gcnBtZHNJbml0KGRzKTsKKysgICAgd2hpbGUgKHJwbWRzTmV4dChkcykgPj0gMCkgeworKyAgZnByaW50ZihmcCwgIiVzICVzOiAlc1xuIiwgZmlsZW5hbWUsIHJwbWRzVHlwZShkcyksIHJwbWRzRE5FVlIoZHMpKzIpOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9uc1RhYmxlW10gPSB7CisrCisrIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfSU5DTFVERV9UQUJMRSwgcnBtY2xpQWxsUG9wdFRhYmxlLCAwLAorKyAgTl8oIkNvbW1vbiBvcHRpb25zOiIpLAorKyAgTlVMTCB9LCAKKysKKysgICBQT1BUX0FVVE9BTElBUworKyAgIFBPUFRfQVVUT0hFTFAKKysgICBQT1BUX1RBQkxFRU5ECisrfTsKKysKKysKKytpbnQKKyttYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwb3B0Q29udGV4dCBvcHRDb247CisrICAgIEFSR1ZfdCBhdiA9IE5VTEw7CisrICAgIHJwbWZjIGZjID0gTlVMTDsKKysgICAgRklMRSAqIGZwID0gTlVMTDsKKysgICAgaW50IGZsYWdzID0gMDsKKysgICAgaW50IGFjID0gMDsKKysgICAgaW50IGVjID0gMTsKKysgICAgaW50IHh4OworKyAgICBpbnQgaTsKKysgICAgY2hhciBidWZbQlVGU0laXTsKKysgICAgaW50IG5kZGljdDsKKysgICAgY29uc3QgY2hhciAqIHM7CisrICAgIGNoYXIgKiBzZTsKKysgICAgY29uc3QgY2hhciAqIGZuOworKyAgICBjb25zdCBjaGFyICogTjsKKysgICAgY29uc3QgY2hhciAqIEVWUjsKKysgICAgZXZyRmxhZ3MgRmxhZ3M7CisrICAgIHVuc2lnbmVkIGNoYXIgZGVwdHlwZTsKKysgICAgaW50IGl4OworKyAgICBycG1kcyBkczsKKysKKysvKkAtbW9kb2JzZXJ2ZXJAKi8KKysgICAgaWYgKChwcm9nbmFtZSA9IHN0cnJjaHIoYXJndlswXSwgJy8nKSkgIT0gTlVMTCkKKysgIHByb2duYW1lKys7CisrICAgIGVsc2UKKysgIHByb2duYW1lID0gYXJndlswXTsKKysvKkA9bW9kb2JzZXJ2ZXJAKi8KKysKKysgICAgb3B0Q29uID0gcnBtY2xpSW5pdChhcmdjLCBhcmd2LCBvcHRpb25zVGFibGUpOworKyAgICBpZiAob3B0Q29uID09IE5VTEwpCisrICBnb3RvIGV4aXQ7CisrCisrICAgIGF2ID0gcG9wdEdldEFyZ3Mob3B0Q29uKTsKKysgICAgYWMgPSBhcmd2Q291bnQoYXYpOworKworKyAgICBpZiAoYWMgPT0gMCkgeworKyAgYXYgPSBOVUxMOworKyAgeHggPSBhcmd2RmdldHMoJmF2LCBOVUxMKTsKKysgIGFjID0gYXJndkNvdW50KGF2KTsKKysgICAgfQorKworKyAgICAvKiBNYWtlIHN1cmUgZmlsZSBuYW1lcyBhcmUgc29ydGVkLiAqLworKyAgICB4eCA9IGFyZ3ZTb3J0KGF2LCBOVUxMKTsKKysKKysgICAgLyogQnVpbGQgZmlsZSBjbGFzcyBkaWN0aW9uYXJ5LiAqLworKyAgICBmYyA9IHJwbWZjTmV3KCk7CisrICAgIHh4ID0gcnBtZmNDbGFzc2lmeShmYywgYXYsIE5VTEwpOworKworKyAgICAvKiBCdWlsZCBmaWxlL3BhY2thZ2UgZGVwZW5kZW5jeSBkaWN0aW9uYXJ5LiAqLworKyAgICB4eCA9IHJwbWZjQXBwbHkoZmMpOworKworKyAgICAvKiBHZW5lcmF0ZSBwZXItZmlsZSBpbmRpY2VzIGludG8gcGFja2FnZSBkZXBlbmRlbmNpZXMuICovCisrICAgIG5kZGljdCA9IGFyZ3ZDb3VudChmYy0+ZGRpY3QpOworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgbmRkaWN0OyBpKyspIHsKKysgIHMgPSBmYy0+ZGRpY3RbaV07CisrCisrICAvKiBQYXJzZSBvdXQgKGZpbGUjLGRlcHR5cGUsTixFVlIsRmxhZ3MpICovCisrICBpeCA9IHN0cnRvbChzLCAmc2UsIDEwKTsKKysgIGFzc2VydChzZSAhPSBOVUxMKTsKKysgIGRlcHR5cGUgPSAqc2UrKzsKKysgIHNlKys7CisrICBOID0gc2U7CisrICB3aGlsZSAoKnNlICYmICpzZSAhPSAnICcpCisrICAgICAgc2UrKzsKKysgICpzZSsrID0gJ1wwJzsKKysgIEVWUiA9IHNlOworKyAgd2hpbGUgKCpzZSAmJiAqc2UgIT0gJyAnKQorKyAgICAgIHNlKys7CisrICAqc2UrKyA9ICdcMCc7CisrICBGbGFncyA9IHN0cnRvbChzZSwgTlVMTCwgMTYpOworKworKyAgc3dpdGNoIChkZXB0eXBlKSB7CisrICBkZWZhdWx0OgorKyAgICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworKyAgY2FzZSAnUCc6ICAgCisrICAgICAgZHMgPSBycG1kc1NpbmdsZShSUE1UQUdfUFJPVklERU5BTUUsIE4sIEVWUiwgRmxhZ3MpOworKyAgICAgIHJwbWRlcFByaW50KChjaGFyICopZmMtPmZuW2l4XSwgZHMsIHN0ZG91dCk7CisrICAgICAgKHZvaWQpcnBtZHNGcmVlKGRzKTsKKysgICAgICBkcyA9IE5VTEw7CisrICAgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisrICBjYXNlICdSJzoKKysgICAgICBkcyA9IHJwbWRzU2luZ2xlKFJQTVRBR19SRVFVSVJFTkFNRSwgTiwgRVZSLCBGbGFncyk7CisrICAgICAgcnBtZGVwUHJpbnQoKGNoYXIgKilmYy0+Zm5baXhdLCBkcywgc3Rkb3V0KTsKKysgICAgICAodm9pZClycG1kc0ZyZWUoZHMpOworKyAgICAgIGRzID0gTlVMTDsKKysgICAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKysgIH0KKysgICAgfQorKworKyAgICBmYyA9IHJwbWZjRnJlZShmYyk7CisrCisrICAgIGVjID0gMDsKKysKKytleGl0OgorKyAgICBvcHRDb24gPSBycG1jbGlGaW5pKG9wdENvbik7CisrICAgIHJldHVybiBlYzsKKyt9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4YmQ2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbXF2X2NjX2JfZ29uZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitycG06IGNvbXBpbGUgcnBtcXYuYyBpbnN0ZWFkIG9mIHJwbXF2LmNjCisKK1NvbWUgdmVyc2lvbnMgb2YgZ2NjLCA0LjQuNSBmb3IgZXhhbXBsZSwgd2lsbCBwdXQgYSByZWZlcmVuY2UgdG8gX19neHhfcGVyc29uYWxpdHlfdjAKK2ludG8gcnBtLm8gYW5kIHJwbWJ1aWxkLm8uICBUaGlzIG1lYW5zIHdlIG11c3QgbGluayB3aXRoIGcrKywgYW5kIHRoZSBNYWtlZmlsZSB3ZQorZ2VuZXJhdGUgZG9lcyBub3QuCisKK1NvLCBnbyBiYWNrIHRvIHVzaW5nIHJwbXF2LmMgKHdoaWNoIGlzIGN1cnJlbnRseSBpZGVudGljYWwgdG8gcnBtcXYuY2MpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCisgICBXaGVuIGxpbmtpbmcgd2l0aCBnKysgaXMgcmVhbGx5IG5lY2Vzc2FyeSwgdGhlIHVwc3RyZWFtIHBhY2thZ2Ugd2lsbCBkbyB0aGF0LgorCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEyNywxMyArMTI3LDEzIEBAIHJwbV9TT1VSQ0VTID0JCWJ1aWxkLmMKKyBycG1fTERGTEFHUyA9CQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKyBycG1fTERBREQgPQkJcnBtLm8gJChteUxEQUREKQorIHJwbS5vOgkkKHRvcF9zcmNkaXIpL3JwbXF2LmMKKy0JJChDT01QSUxFKSAtRElBTV9SUE1CVCAtRElBTV9SUE1EQiAtRElBTV9SUE1FSVUgLURJQU1fUlBNSyAtRElBTV9SUE1RViAtbyAkQCAtYyAkKHRvcF9zcmNkaXIpL3JwbXF2LmNjCisrCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLURJQU1fUlBNREIgLURJQU1fUlBNRUlVIC1ESUFNX1JQTUsgLURJQU1fUlBNUVYgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCisgCisgcnBtYnVpbGRfU09VUkNFUyA9CWJ1aWxkLmMKKyBycG1idWlsZF9MREZMQUdTID0JQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtYnVpbGRfTERBREQgPQlycG1idWlsZC5vICQobXlMREFERCkKKyBycG1idWlsZC5vOiAkKHRvcF9zcmNkaXIpL3JwbXF2LmMKKy0JJChDT01QSUxFKSAtRElBTV9SUE1CVCAtbyAkQCAtYyAkKHRvcF9zcmNkaXIpL3JwbXF2LmNjCisrCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCisgCisgLlBIT05ZOglzcGxpbnQKKyBzcGxpbnQ6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS91Y2xpYmMtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3VjbGliYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzBhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS91Y2xpYmMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDYzIEBACitEZWZpbmUgdGhlIHgqIHdyYXBwZXJzIGZvciB1Y2xpYmMgYXMgd2VsbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtaW8vcnBtaW8uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9ycG1pby5oCisrKysgcnBtLTUuNC4xNC9ycG1pby9ycG1pby5oCitAQCAtMjMsNyArMjMsOCBAQAorICAqLworIC8qQHsqLworICNpZiAhZGVmaW5lZChfX0xDTElOVF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgXAorLQkoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDIpKQorKwkoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDIpKSAmJiBcCisrCSFkZWZpbmVkKF9fVUNMSUJDX18pCisgI2RlZmluZSBVU0VfQ09PS0lFX1NFRUtfUE9JTlRFUiAxCisgdHlwZWRlZiBfSU9fb2ZmNjRfdCAJX2xpYmlvX29mZl90OworIHR5cGVkZWYgX2xpYmlvX29mZl90ICoJX2xpYmlvX3Bvc190OworSW5kZXg6IHJwbS01LjQuMTQvc3lzdGVtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3lzdGVtLmgKKysrKyBycG0tNS40LjE0L3N5c3RlbS5oCitAQCAtNDgxLDcgKzQ4MSw3IEBAIGV4dGVybiB2b2lkIG11bnRyYWNlICh2b2lkKQorICNlbmRpZiAvKiBkZWZpbmVkKF9fTENMSU5UX18pICovCisgCisgLyogTWVtb3J5IGFsbG9jYXRpb24gdmlhIG1hY3JvIGRlZnMgdG8gZ2V0IG1lYW5pbmdmdWwgbG9jYXRpb25zIGZyb20gbXRyYWNlKCkgKi8KKy0jaWYgZGVmaW5lZChfX0dOVUNfXykKKysjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorICNkZWZpbmUJeG1hbGxvYyhfc2l6ZSkgCQkobWFsbG9jKF9zaXplKSA/IDogdm1lZmFpbChfc2l6ZSkpCisgI2RlZmluZQl4Y2FsbG9jKF9ubWVtYiwgX3NpemUpCShjYWxsb2MoKF9ubWVtYiksIChfc2l6ZSkpID8gOiB2bWVmYWlsKF9zaXplKSkKKyAjZGVmaW5lCXhyZWFsbG9jKF9wdHIsIF9zaXplKQkocmVhbGxvYygoX3B0ciksIChfc2l6ZSkpID8gOiB2bWVmYWlsKF9zaXplKSkKK0luZGV4OiBycG0tNS40LjE0L2xpYi9saWJycG0udmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvbGlicnBtLnZlcnMKKysrKyBycG0tNS40LjE0L2xpYi9saWJycG0udmVycworQEAgLTQwNSw2ICs0MDUsMTAgQEAgTElCUlBNXzAKKyAgICAgc3BlY2VkaXQ7CisgICAgIHN0cmljdF9lcmFzdXJlczsKKyAgICAgWHJwbXRzaUluaXQ7CisrICAgIHhtYWxsb2M7CisrICAgIHhyZWFsbG9jOworKyAgICB4Y2FsbG9jOworKyAgICB4c3RyZHVwOworICAgbG9jYWw6CisgICAgICo7CisgfTsKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL2xpYnJwbWlvLnZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vbGlicnBtaW8udmVycworKysrIHJwbS01LjQuMTQvcnBtaW8vbGlicnBtaW8udmVycworQEAgLTEwNTYsNiArMTA1NiwxMCBAQCBMSUJSUE1JT18wCisgICAgIG1vbmdvX3dyaXRlX2NvbmNlcm5fc2V0X21vZGU7CisgICAgIG1vbmdvX3dyaXRlX2NvbmNlcm5fc2V0X3c7CisgICAgIG1vbmdvX3dyaXRlX2NvbmNlcm5fc2V0X3d0aW1lb3V0OworKyAgICB4bWFsbG9jOworKyAgICB4cmVhbGxvYzsKKysgICAgeGNhbGxvYzsKKysgICAgeHN0cmR1cDsKKyAgIGxvY2FsOgorICAgICAqOworIH07CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTA0NWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDllN2I3MmVlMGM5OTQ2MDk5NzU5ODFlMTM1ZmMxOGQwMzg3YWVmYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBqYmogPGpiaj4KK0RhdGU6IFdlZCwgMTQgTWF5IDIwMTQgMjE6MTk6NDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gLSB2ZXJpZnk6IGZpeDogYnJva2VuIGxvZ2ljIGZvciAlZ2hvc3QgYXZvaWRhbmNlIChNYXJrCisgSGF0bGUpLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIENIQU5HRVMgICAgICB8IDEgKworIGxpYi92ZXJpZnkuYyB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBycG0tNS40LjE0L0NIQU5HRVMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvQ0hBTkdFUworKysrIHJwbS01LjQuMTQvQ0hBTkdFUworQEAgLTEsMyArMSw1IEBACisrICAgIC0gamJqOiB2ZXJpZnk6IGZpeDogYnJva2VuIGxvZ2ljIGZvciAlZ2hvc3QgYXZvaWRhbmNlIChNYXJrIEhhdGxlKS4KKysKKyA1LjQuMTMgLT4gNS40LjE0OgorICAgICAtIG1vb25leTogdXNlIF9fc3VuIGluc3RlYWQgb2YgX19zdW5fXyBpbiAjZGVmaW5lIChscCMxMjQzNDcyKS4KKyAgICAgLSBtb29uZXk6IHJwbWNvbnN0YW50OiBlbnN1cmUgbGlua2FnZSB3IE9yYWNsZSBTdHVkaW8gMTIuMyAobHAjMTI0MzQ2OSkuCitJbmRleDogcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3ZlcmlmeS5jCisrKysgcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMKK0BAIC01ODgsOCArNTg4LDcgQEAgdWludDMyX3QgZmMgPSBycG1maUZDKGZpKTsKKyAJICAgIGNvbnRpbnVlOworIAorIAkvKiBJZiBub3QgdmVyaWZ5aW5nICVnaG9zdCwgc2tpcCBnaG9zdCBmaWxlcy4gKi8KKy0JLyogWFhYIHRoZSBicm9rZW4hISEgbG9naWMgZGlzYWJsZXMgJWdob3N0IHF1ZXJpZXMgYWx3YXlzLiAqLworLQlpZiAoIShGRl9JU1NFVChxdmEtPnF2YV9mZmxhZ3MsIEdIT1NUKSAmJiBGRl9JU1NFVChmZmxhZ3MsIEdIT1NUKSkpCisrCWlmICghRkZfSVNTRVQocXZhLT5xdmFfZmZsYWdzLCBHSE9TVCkgJiYgRkZfSVNTRVQoZmZsYWdzLCBHSE9TVCkpCisgCSAgICBjb250aW51ZTsKKyAKKyAJLyogR2F0aGVyIHBlci1maWxlIGRhdGEgaW50byBhIGNhcnJpZXIuICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwYzk0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzQuMTEuMi5iYgpAQCAtMCwwICsxLDEzNyBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1NVTU1BUllfJHtQTn0tZGV2ID0gIkRldmVsb3BtZW50IGZpbGVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLiBUaGVzZSBcCitkZXZlbG9wbWVudCBmaWxlcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgcHJvZ3JhbXMgdGhhdCBcCittYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyBhbmQgZGF0YWJhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW50ZW5kZWQgdG8gXAorc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgZ3JhcGhpY2FsIHBhY2thZ2UgbWFuYWdlcnMgb3IgYW55IFwKK290aGVyIHRvb2xzIHRoYXQgbmVlZCBhbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgUlBNIHBhY2thZ2VzIGluIG9yZGVyIFwKK3RvIGZ1bmN0aW9uLiIKKworU1VNTUFSWV9weXRob24tcnBtID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbnVwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcHl0aG9uLXJwbSA9ICJUaGUgcnBtLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucnBtLm9yZyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID8/PSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworREVQRU5EUyA9ICJkYiBsaWJ4bWwyIHh6IGZpbmR1dGlscyBmaWxlIHBvcHQgbnNzIGJ6aXAyIGVsZnV0aWxzIHBhdGNoIGF0dHIgemxpYiBhY2wgZ3ppcCBtYWtlIGJpbnV0aWxzIHB5dGhvbiIKKworU1JDX1VSSSArPSAiaHR0cDovL3JwbS5vcmcvcmVsZWFzZXMvcnBtLTQuMTEueC8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF9SUE1TRU5TRV9NSVNTSU5HT0tfdG9fcnBtbW9kdWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWRpci1jaGVjay5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4X2xpYmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnBtLXNjcmlwdGV0ZXhlY2hlbHAucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbmRlcHMuc2ggXAorICAgICAgICAgICAgZmlsZTovL3JwbS1DVkUtMjAxNC04MTE4LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3NmFjOTk0OGE4ODM2NzA1NGY4ZGRiNWMwZTg3MTczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwM2Y4ZGU2MzJiMzM4NDZjZTU3NDZmNDI5YzIxYTYwZjQwZGZmOWRjYjU2ZjFiNDExOGYzN2EwNjUyYTQ4ZDQiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworaW5oZXJpdCBweXRob25uYXRpdmUKK2luaGVyaXQgcGtnY29uZmlnCitpbmhlcml0IGdldHRleHQKKworRVhUUkFfT0VDT05GICs9ICItLWhvc3Q9JHtIT1NUX1NZU30gXAorICAgICAgICAgICAgICAgICAtLXByb2dyYW0tcHJlZml4PSBcCisgICAgICAgICAgICAgICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgIC0tZXhlYy1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAgLS1iaW5kaXI9JHtwcmVmaXh9L2JpbiBcCisgICAgICAgICAgICAgICAgIC0tc2JpbmRpcj0ke3ByZWZpeH0vc2JpbiBcCisgICAgICAgICAgICAgICAgIC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS1kYXRhZGlyPSR7cHJlZml4fS9zaGFyZSBcCisgICAgICAgICAgICAgICAgIC0taW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7cHJlZml4fS9saWIgXAorICAgICAgICAgICAgICAgICAtLWxpYmV4ZWNkaXI9JHtwcmVmaXh9L2xpYmV4ZWMgXAorICAgICAgICAgICAgICAgICAtLWxvY2Fsc3RhdGVkaXI9JHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tc2hhcmVkc3RhdGVkaXI9JHtwcmVmaXh9L2NvbSBcCisgICAgICAgICAgICAgICAgIC0tbWFuZGlyPSR7bWFuZGlyfSBcCisgICAgICAgICAgICAgICAgIC0taW5mb2Rpcj0ke2luZm9kaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtYWNsIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWx1YSBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1jYXAgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1weXRob24gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXh0ZXJuYWwtZGIgXAorICAgICAgICAgICAgICAgICIKKworQ1BQRkxBR1NfYXBwZW5kID0gIiBgcGtnLWNvbmZpZyAtLWNmbGFncyBuc3NgIgorTERGTEFHU19hcHBlbmQgPSAiIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIgorQ0NGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKK0NYWEZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBybSAtcmYgc3FsaXRlCisgICAgcm0gLWYgbTQvbGlidG9vbC5tNAorICAgIHJtIC1mIG00L2x0Ki5tNAorICAgIHJtIC1yZiBkYjMvY29uZmlndXJlKgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBtdiAke0R9LyR7YmFzZV9iaW5kaXJ9L3JwbSAke0R9LyR7YmluZGlyfS8KKyAgICBybWRpciAke0R9LyR7YmFzZV9iaW5kaXJ9CisgICAgcm0gLWYgJHtEfSR7cHJlZml4fS9saWIvKi5sYQorICAgIHJtIC1mICR7RH0ke3ByZWZpeH0vbGliL3JwbS1wbHVnaW5zLyoubGEKKyAgICBybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi57YSxsYX0KKyAgICBybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoue2EsbGF9CisgICAgcm0gLWZyICR7RH0vdmFyCisgICAgaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L2xpYi9ycG0vYmluCisgICAgbG4gLXMgLi4vZGVidWdlZGl0ICR7RH0ke3ByZWZpeH0vbGliL3JwbS9iaW4vZGVidWdlZGl0CisgICAgbG4gLXMgLi4vcnBtZGVwcyAke0R9JHtwcmVmaXh9L2xpYi9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisKKyAgICBbICJ4XCREIiA9PSAieCIgXSAmJiBsZGNvbmZpZworICAgIHRlc3QgLWYgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL1BhY2thZ2VzIHx8IHJwbSAtLWluaXRkYgorICAgIHJtIC1mICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9GaWxlbWQ1cyBcCisgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL0ZpbGVkaWdlc3RzIFwKKyAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vUmVxdWlyZXZlcnNpb24gXAorICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9Qcm92aWRldmVyc2lvbgorCit9CisKK3BrZ19wb3N0cm1fJHtQTn0oKSB7CisgICAgWyAieFwkRCIgPT0gIngiIF0gJiYgbGRjb25maWcKKworfQorCitQQUNLQUdFUyArPSAicHl0aG9uLSR7UE59IgorUFJPVklERVMgKz0gInB5dGhvbi1ycG0iCisKK0ZJTEVTXyR7UE59ICs9ICAiJHtsaWJkaXJ9L3JwbSBcCisgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ycG0tcGx1Z2lucy9leGVjLnNvIFwKKyAgICAgICAgICAgICAgICAiCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIHJ1bi1wb3N0aW5zdHMiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnBtLXBsdWdpbnMvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvcnBtLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS8qLmxhIgorCitGSUxFU19weXRob24tJHtQTn0gPSAiJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS8qIgorUkRFUEVORFNfcHl0aG9uLSR7UE59ID0gIiR7UE59IHB5dGhvbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTAzZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgpAQCAtMCwwICsxLDUyOCBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1NVTU1BUllfJHtQTn0tbGlicyA9ICJMaWJyYXJpZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1saWJzID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIHNoYXJlZCBsaWJyYXJpZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfJHtQTn0tY29tbW9uID0gIkNvbW1vbiBSUE0gcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24iCitERVNDUklQVElPTl8ke1BOfS1jb21tb24gPSAiVGhlIHJwbS1jb21tb24gcGFja2FnZSBjb250YWlucyBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBcCithbmQgY29uZmlndXJhdGlvbiBjb21tb24gYmV0d2VlbiBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV8ke1BOfS1idWlsZCA9ICJTY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1idWlsZCA9ICJUaGUgcnBtLWJ1aWxkIHBhY2thZ2VjIG9udGFpbnMgdGhlIHNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgXAordGhhdCBhcmUgdXNlZCB0byBidWlsZCBwYWNrYWdlcyB1c2luZyB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitTVU1NQVJZX3BlcmwtbW9kdWxlLXJwbSA9ICJQZXJsIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtID0gIlRoZSBwZXJsLW1vZHVsZXMtcnBtIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK1NVTU1BUllfcGVybC1tb2R1bGUtcnBtLWRldiA9ICJEZXZlbG9wbWVudCBjb21wb25lbnRzIGZvciBwZXJsIGJpbmRpbmdzIgorREVTQ1JJUFRJT05fcGVybC1tb2R1bGVzLXJwbS1kZXYgPSAiRGV2ZWxvcG1lbnQgaXRlbXMgc3VjaCBhcyBtYW4gcGFnZXMgZm9yIHVzZSB3aXRoIHRoZSBQZXJsIFwKK2xhbmd1YWdlIGJpbmRpbmdzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3JwbTUub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK0RFUEVORFMgPSAibGlicGNyZSBhdHRyIGFjbCBwb3B0IG9zc3AtdXVpZCBmaWxlIGJ5YWNjLW5hdGl2ZSIKKworUyA9ICIke1dPUktESVJ9L3JwbSIKKworIyBBcHBseSB2YXJpb3VzIGZpeHVwcyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhlIENWUyBlbnZpcm9ubWVudAorZG9fZml4dXBfdW5wYWNrICgpIHsKKwlsbiAtc2YgLi4vc3ljayAke1N9L3N5Y2sgfHwgOgorCWxuIC1zZiAuLi9sdWEgJHtTfS9sdWEgfHwgOgorCWxuICR7U30vcnBtcXYuYyAke1N9L3JwbXF2LmNjIHx8IDoKK30KKworYWRkdGFzayBmaXh1cF91bnBhY2sgYWZ0ZXIgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAorCisjIFRoaXMgcmVjaXBlIGlzIHJlYWxseSBkZXNpZ25lZCBmb3IgZGV2ZWxvcG1lbnQuLi4gdG8gVHJ5IG91dCB0aGUgbGF0ZXN0CisjIGNvbW11bml0eSB3b3JrIGluIHByb2dyZXNzLgorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCisjIHJwbTJjcGlvIGlzIGEgc2hlbGwgc2NyaXB0LCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBycG0gc3JjLnJwbS4gIEl0IGlzIG5lZWRlZAorIyBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBkaXN0cmlidXRpb24gU1JQTSBpbnRvIGEgZm9ybWF0IHdlIGNhbiBleHRyYWN0Li4uCitTUkNfVVJJID0gImN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPXJwbSBcCisJICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9c3ljayBcCisJICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9bHVhIFwKKwkgICBmaWxlOi8vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiLXJlZHVjZS5wYXRjaCBcCisJICAgZmlsZTovL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbS1hdXRvZ2VuLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxpYnNxbC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2hvd3JjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZmlsZWNsYXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNhbm9uYXJjaC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1sb29wbXNnLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtZGVwcy1vZWNvcmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVzb2x2ZWRlcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1wZXJsLXVycG0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWx1YS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1vc3NwLXV1aWQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wa2djb25maWdkZXBzLnBhdGNoIFwKKwkgICBmaWxlOi8vdWNsaWJjLXN1cHBvcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1hdGNoLnBhdGNoIFwKKwkgICBmaWxlOi8vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9kYmNvbnZlcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1weS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0yLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC1zZWd2LnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWZpeC1sb2dpby1jcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYjUtb3ItZGI2LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJwbXBncC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWFscGF0aC5wYXRjaCBcCisJICAiCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUgcGxhdGZvcm0gc2NvcmUgZGVidWdnaW5nCisjIFRoaXMgaXMgdXNlZnVsIHdoZW4gaWRlbnRpZnlpbmcgaXNzdWVzIHdpdGggU21hcnQgYmVpbmcgdW5hYmxlCisjIHRvIHByb2Nlc3MgY2VydGFpbiBwYWNrYWdlIGZlZWRzLgorI1NSQ19VUkkgKz0gImZpbGU6Ly9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworYWNwYXRocyA9ICItSSAke1N9L2RiL2Rpc3QvYWNsb2NhbCAtSSAke1N9L2RiL2Rpc3QvYWNsb2NhbF9qYXZhIgorCisjIFNwZWNpZnkgdGhlIGRlZmF1bHQgcnBtIG1hY3JvcyBpbiB0ZXJtcyBvZiBhZGp1c3RhYmxlIHZhcmlhYmxlcworcnBtX21hY3JvcyA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19L3Bva3kvbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS8le190YXJnZXR9L21hY3Jvczole19ldGNycG19L21hY3Jvcy4qOiV7X2V0Y3JwbX0vbWFjcm9zOiV7X2V0Y3JwbX0vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZSA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19L3Bva3kvbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlc2RrID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorCisjIHNxbGl0ZSBsdWEgdGNsIGF1Z2VhcyBuc3MgZ2NyeXB0IG5lb24geHogeGFyIGtleXV0aWxzIHBlcmwgc2VsaW51eAorCisjIE5vdGU6IHBlcmwgYW5kIHNxbGl0ZSB3L28gZGIgc3BlY2lmaWVkIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrLgorIyAgICAgICB0Y2wsIGF1Z2VhcywgbnNzLCBnY3J5cHQsIHhhciBhbmQga2V5dXRpbHMgc3VwcG9ydCBpcyB1bnRlc3RlZC4KK1BBQ0tBR0VDT05GSUcgPz89ICJkYiBiemlwMiB6bGliIGJlZWNyeXB0IG9wZW5zc2wgbGliZWxmIHB5dGhvbiIKKworUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS13aXRoLWJ6aXAyLC0td2l0aG91dC1iemlwMixiemlwMiwiCitQQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgteHosLS13aXRob3V0LXh6LHh6LCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW3hhcl0gPSAiLS13aXRoLXhhciwtLXdpdGhvdXQteGFyLHhhciwiCisKK1dJVEhfUFlUSE9OID0gIiAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24taW5jLWRpcj0ke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorCQktLXdpdGgtcHl0aG9uLWxpYi1kaXI9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzIFwKKwkJLS13aXRob3V0LXB5dGhvbmVtYmVkIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiR7V0lUSF9QWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uLCIKKworIyBQZXJsIG1vZHVsZXMgYXJlIG5vdCBidWlsdCwgYnV0IHRoZXkgY291bGQgYmUgZW5hYmxlZCBmYWlybHkgZWFzaWx5CisjIHRoZSBwZXJsIG1vZHVsZSBjcmVhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgcGF0Y2hlZC4KKyMgKGN1cnJlbnRseSBoYXMgaG9zdCBwZXJsIGNvbnRhbWluYXRpb24gaXNzdWVzKQorV0lUSF9QRVJMID0gIi0td2l0aC1wZXJsIC0td2l0aG91dC1wZXJsZW1iZWQgLS13aXRob3V0LXBlcmwtdXJwbSIKK1dJVEhPVVRfUEVSTCA9ICItLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC11cnBtIgorUEFDS0FHRUNPTkZJR1twZXJsXSA9ICIke1dJVEhfUEVSTH0sJHtXSVRIT1VUX1BFUkx9LHBlcmwsIgorCisjIFRoZSAtLXdpdGgtZGJzcWwgd2lsbCBvbmx5IHRlbGwgUlBNIHRvIGNoZWNrIGZvciBzdXBwb3J0LCBkYgorIyBtYXkgb3IgbWF5IG5vdCBiZSBidWlsdCB3LyB0aGUgZGJzcWwgc3VwcG9ydC4KK1dJVEhfREIgPSAiLS13aXRoLWRiIC0td2l0aC1kYnNxbCAtLXdpdGhvdXQtZGItdG9vbHMtaW50ZWdyYXRlZCIKK1BBQ0tBR0VDT05GSUdbZGJdID0gIiR7V0lUSF9EQn0sLS13aXRob3V0LWRiLGRiLCIKKworUEFDS0FHRUNPTkZJR1tzcWxpdGVdID0gIi0td2l0aC1zcWxpdGUsLS13aXRob3V0LXNxbGl0ZSxzcWxpdGUzLCIKKworUEFDS0FHRUNPTkZJR1tiZWVjcnlwdF0gPSAiLS13aXRoLWJlZWNyeXB0PWV4dGVybmFsLC0td2l0aG91dC1iZWVjcnlwdCxiZWVjcnlwdCwiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgorUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0td2l0aC1uc3MsLS13aXRob3V0LW5zcyxuc3MsIgorUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0td2l0aC1nY3J5cHQsLS13aXRob3V0LWdjcnlwdCxnY3J5cHQsIgorUEFDS0FHRUNPTkZJR1trZXl1dGlsc10gPSAiLS13aXRoLWtleXV0aWxzLC0td2l0aG91dC1rZXl1dGlscyxrZXl1dGlscywiCitQQUNLQUdFQ09ORklHW2xpYmVsZl0gPSAiLS13aXRoLWxpYmVsZiwtLXdpdGhvdXQtbGliZWxmLGVsZnV0aWxzLCIKKworV0lUSF9TRUxJTlVYID0gIi0td2l0aC1zZWxpbnV4IC0td2l0aC1zZXBvbCAtLXdpdGgtc2VtYW5hZ2UiCitXSVRIT1VUX1NFTElOVVggPSAiLS13aXRob3V0LXNlbGludXggLS13aXRob3V0LXNlcG9sIC0td2l0aG91dC1zZW1hbmFnZSIKK1BBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiJHtXSVRIX1NFTElOVVh9LCR7V0lUSE9VVF9TRUxJTlVYfSxsaWJzZWxpbnV4LCIKKworV0lUSF9ORU9OID0gIi0td2l0aC1uZW9uIC0td2l0aC1saWJwcm94eSAtLXdpdGgtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1dJVEhPVVRfTkVPTiA9ICItLXdpdGhvdXQtbmVvbiAtLXdpdGhvdXQtbGlicHJveHkgLS13aXRob3V0LWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCitQQUNLQUdFQ09ORklHW25lb25dID0gIiR7V0lUSF9ORU9OfSwke1dJVEhPVVRfTkVPTn0sbmVvbiBleHBhdCwiCisKK1BBQ0tBR0VDT05GSUdbbHVhXSA9ICItLXdpdGgtbHVhLC0td2l0aG91dC1sdWEsZXhwYXQsIgorUEFDS0FHRUNPTkZJR1t0Y2xdID0gIi0td2l0aC10Y2wsLS13aXRob3V0LXRjbCx0Y2wsIgorCitQQUNLQUdFQ09ORklHW2F1Z2Vhc10gPSAiLS13aXRoLWF1Z2VhcywtLXdpdGhvdXQtYXVnZWFzLGF1Z2VhcywiCisKK0VYVFJBX09FQ09ORiArPSAiLS12ZXJib3NlIFwKKwkJLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQktLXdpdGgtZmlsZSBcCisJCS0td2l0aC1wYXRoLW1hZ2ljPSV7X3VzcmxpYnJwbX0vLi4vLi4vc2hhcmUvbWlzYy9tYWdpYy5tZ2MgXAorCQktLXdpdGgtc3ljaz1pbnRlcm5hbCBcCisJCS0td2l0aG91dC1yZWFkbGluZSBcCisJCS0td2l0aG91dC1saWJ0YXNuMSBcCisJCS0td2l0aG91dC1wYWtjaG9pcyBcCisJCS0td2l0aG91dC1nbnV0bHMgXAorCQktLXdpdGgtcGNyZSBcCisJCS0tZW5hYmxlLXV0ZjggXAorCQktLXdpdGgtdXVpZCBcCisJCS0td2l0aC1hdHRyIFwKKwkJLS13aXRoLWFjbCBcCisJCS0td2l0aC1wb3B0PWV4dGVybmFsIFwKKwkJLS13aXRoLXB0aHJlYWRzIFwKKwkJLS13aXRob3V0LWN1ZGYgXAorCQktLXdpdGhvdXQtZmljbCBcCisJCS0td2l0aG91dC1hdGVybSBcCisJCS0td2l0aG91dC1uaXggXAorCQktLXdpdGhvdXQtYmFzaCBcCisJCS0td2l0aG91dC1yYyBcCisJCS0td2l0aG91dC1qcyBcCisJCS0td2l0aG91dC1ncHNlZSBcCisJCS0td2l0aG91dC1ydWJ5IFwKKwkJLS13aXRob3V0LXNxdWlycmVsIFwKKwkJLS13aXRoLWJ1aWxkLWV4dGxpYmRlcCBcCisJCS0td2l0aC1idWlsZC1tYXhleHRsaWJkZXAgXAorCQktLXdpdGhvdXQtdmFsZ3JpbmQgXAorCQktLWRpc2FibGUtb3Blbm1wIFwKKwkJLS1lbmFibGUtYnVpbGQtcGljIFwKKwkJLS1lbmFibGUtYnVpbGQtdmVyc2lvbnNjcmlwdCBcCisJCS0tZW5hYmxlLWJ1aWxkLXdhcm5pbmdzIFwKKwkJLS1lbmFibGUtYnVpbGQtZGVidWcgXAorCQktLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgXAorCQktLXdpdGgtcGF0aC1tYWNyb3M9JHtycG1fbWFjcm9zfSBcCisJCS0td2l0aC1wYXRoLWxpYj0ke2xpYmRpcn0vcnBtIFwKKwkJLS13aXRoLWJ1Z3JlcG9ydD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyBcCisJCS0tcHJvZ3JhbS1wcmVmaXg9IFwKKwkJWUFDQz1ieWFjYyIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIi1scnQgLWxwdGhyZWFkIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0gJHtQTn0tZG9jICR7UE59LWxpYnMgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1jb21tb24gJHtQTn0tYnVpbGQgcHl0aG9uLXJwbS1kYmcgcHl0aG9uLXJwbS1zdGF0aWNkZXYgcHl0aG9uLXJwbS1kZXYgcHl0aG9uLXJwbSBwZXJsLW1vZHVsZS1ycG0gcGVybC1tb2R1bGUtcnBtLWRldiAke1BOfS1sb2NhbGUiCisKK1NPTElCUyA9ICI1LjQuc28iCisKKyMgQmFzZWQgb24gJWZpbGVzIHNlY3Rpb24gaW4gdGhlIHJwbS5zcGVjCisKK0ZJTEVTXyR7UE59ID0gICIke2JpbmRpcn0vcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0uKiBcCisJCSR7bGliZGlyfS9ycG0vdGdwZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1wb3B0IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0yY3BpbyBcCisJCSR7bGliZGlyfS9ycG0vdmNoZWNrIFwKKwkJJHtsaWJkaXJ9L3JwbS9oZWxwZXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9xZiBcCisJCSR7bGliZGlyfS9ycG0vY3B1aW5mby55YW1sIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbXRyZWUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1rZXkgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwby5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vd2dldCBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvd2RqIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi93ZGogXAorCQkke2JpbmRpcn0vcnBtLnJlYWwgXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQucmVhbCBcCisJCSR7YmluZGlyfS9ycG0yY3Bpby5yZWFsIFwKKwkJIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vLmRlYnVnIFwKKwkJIgorCitGSUxFU18ke1BOfS1jb21tb24gPSAiJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJJHtiaW5kaXJ9L2dlbmRpZmYgXAorCQkke3N5c2NvbmZkaXJ9L3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvcmVwYWNrYWdlIFwKKwkJIgorCitGSUxFU18ke1BOfS1saWJzID0gIiR7bGliZGlyfS9saWJycG0tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQtKi5zbyBcCisJCSIKKworRklMRVNfJHtQTn0tYnVpbGQgPSAiJHtwcmVmaXh9L3NyYy9ycG0gXAorCQkke2JpbmRpcn0vcnBtYnVpbGQgXAorCQkke2JpbmRpcn0vcnBtYnVpbGQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYnJwLSogXAorCQkke2xpYmRpcn0vcnBtL2NoZWNrLWZpbGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcm9zcy1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1kZWJ1Z2luZm8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtbGFuZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3ZpZGVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcXVpcmVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2dldHBvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9odHRwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vamF2YWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1wcm92aWRlcyBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXJlcXVpcmVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9leGVjdXRhYmxlZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbGlidG9vbGRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL29zZ2lkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BocC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BrZ2NvbmZpZ2RlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktYXV0b3Rlc3QucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jaHJvb3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Ric3FsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZmluZCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2luc3RhbGwtc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbWtpbnN0YWxsZGlycyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9zcWxpdGUzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9jbWFrZSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvamF2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbGlidG9vbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbWFuZHJpdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21vbm8gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BlcmwgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BocCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGtnY29uZmlnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9weXRob24gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3J1YnkgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3NlbGludXggXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3RjbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLnJwbWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS91X3BrZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlczIuc2ggXAorCQkke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJCSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tYnVpbGQgPSAiZmlsZSBiYXNoIHBlcmwiCisKK1JERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0iCisKK0ZJTEVTX3B5dGhvbi1ycG0tZGJnID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLy5kZWJ1Zy9fKiIKK0ZJTEVTX3B5dGhvbi1ycG0tZGV2ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLyoubGEiCitGSUxFU19weXRob24tcnBtLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8qLmEiCitGSUxFU19weXRob24tcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0gPSAiJHtsaWJkaXJ9L3BlcmwvKi8qIFwKKwkJIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0tZGV2ID0gIiR7cHJlZml4fS9zaGFyZS9tYW4vbWFuMy9SUE0qIFwKKwkJIgorCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9L3JwbSBcCisJCSR7bGliZGlyfS9saWJycG0ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MubGEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5zbyBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5sYSBcCisJCSR7bGliZGlyfS9wa2djb25maWcvcnBtLnBjIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1kYl9sb2FkY3Z0IFwKKwkJIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MuYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5hIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmEgXAorCQkiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIERpc2FibGUgdGVzdHMhCisJZWNobyAiYWxsOiIgPiAke1N9L3Rlc3RzL01ha2VmaWxlLmFtCisJc2VkIC1lICdzL0BfX01LRElSX1BALyV7X19ta2Rpcn0gLXAvJyAtaSAke1N9L21hY3Jvcy9tYWNyb3MuaW4KKworCSggY2QgJHtTfTsgJHtTfS9hdXRvZ2VuLnNoICkKKworCSMgTkFTVFkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIGZpbGVzIHRoZSByaWdodCBwa2ctY29uZmlnIGZpbGUuLi4KKwlzZWQgLWUgJ3MvcGtnLWNvbmZpZyAtLWV4aXN0cyB1dWlkL3BrZy1jb25maWcgLS1leGlzdHMgb3NzcC11dWlkL2cnIFwKKwkgICAgLWUgJ3MvcGtnLWNvbmZpZyB1dWlkL3BrZy1jb25maWcgb3NzcC11dWlkL2cnIC1pICR7U30vY29uZmlndXJlCisKKwkoIGNkICR7U30vc3ljayA7IHNldCArZSA7IHJtIC0tIC1sKiA7IG1ha2UgZGlzdGNsZWFuICkgfHwgOgorCisJZXhwb3J0IHZhcnByZWZpeD0ke2xvY2Fsc3RhdGVkaXJ9CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MsJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCMlJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncywlX19wZXJsX3Byb3ZpZGVzLCMlJV9fcGVybF9wcm92aWRlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9yZXF1aXJlcywjJSVfX3BlcmxfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlc1teX10uKiwlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXMgMCwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsXiMlX29wZW5hbGxfYmVmb3JlX2Nocm9vdC4qLCVfb3BlbmFsbF9iZWZvcmVfY2hyb290XHQxLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJIyBFbmFibGUgRGViaWFuIHN0eWxlIGFyYml0cmFyeSB0YWdzLi4uCisJc2VkIC1pIC1lICdzLCVfYXJiaXRyYXJ5X3RhZ3NbXl9dLiosJV9hcmJpdHJhcnlfdGFncyAle19hcmJpdHJhcnlfdGFnc19kZWJpYW59LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BlcmZpbGVfcnBtZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCisKKwkjIFJlbW92ZSB1bnBhY2thZ2VkIGZpbGVzIChiYXNlZCBvbiBsaXN0IGluIHJwbS5zcGVjKQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS97U3BlY2ZpbGUucG0sY3BhbmZsdXRlLGNwYW5mbHV0ZTIscnBtZGlmZixycG1kaWZmLmNnaSxzcWwucHJvdixzcWwucmVxLHRjbC5yZXEsdHJwbX0KKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWdyYXBoLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWdyYXBoLjgqCisJcm0gLXJmICR7RH0vJHttYW5kaXJ9L3tmcixrb30KKworCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9wb3B0LmgKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJwb3B0LioKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvcG9wdC5wYworCXJtIC1mICR7RH0vJHtkYXRhZGlyfS9sb2NhbGUvKi9MQ19NRVNTQUdFUy9wb3B0Lm1vCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMy9wb3B0LjMKKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEveGFyLjEqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veGFyCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS94YXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJ4YXIqCisKKwlybSAtZiAke0R9LyR7YmluZGlyfS9seioKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bmx6bWEKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bnh6CisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veHoqCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS9sem1hKgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEvbHoqLjEKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlibHptYSoKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLnthLGxhfQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi57YSxsYX0KKworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGYgLWEgXCggLW5hbWUgcGVybGxvY2FsLnBvZCAtbyAtbmFtZSAucGFja2xpc3QgXAorCSMJLW8gXCggLW5hbWUgJyouYnMnIC1hIC1lbXB0eSBcKSBcKSAtZXhlYyBybSAtZiB7fSAnOycKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBkIC1kZXB0aCAtZXhlYyBybWRpciB7fSAyPi9kZXYvbnVsbCAnOycKKworCSMgV2UgZG9uJ3Qgd2FudCB0aGUgZGVmYXVsdCBtYWNybyBzZXQKKwlybSAtcmYgJHtEfS8ke2xpYmRpcn0vcnBtL3tpWzM0NTZdODYqLGF0aGxvbioscGVudGl1bSoseDg2XzY0KixhbHBoYSosc3BhcmMqLGlhNjQqLHBwYyosczM5MCosYXJtdlszNF1bbGJdKixhcm12WzM0NV0qLG1pcHMqLG5vYXJjaCp9CisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZGJjb252ZXJ0LnNoCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbGlic3FsZGIuKgorCisJIyBXZSBkb24ndCB3YW50LCBub3IgbmVlZCB0aGUgTWFuZHJpdmEgbXVsdGlhcmNoIGl0ZW1zCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLXBsYXRmb3JtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2NoZWNrLW11bHRpYXJjaC1maWxlcworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ta211bHRpYXJjaAorCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2guaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dzdHJlYW1lci5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nZW1faGVscGVyLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3J1YnlnZW1zLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2ttb2QtZGVwcy5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25lZ2dzLnB5CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2tlcm5lbAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9nc3RyZWFtZXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL21nbworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGJjb252ZXJ0CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9wb20yc3BlYworCisJcm0gLXJmICR7RH0vdmFyL2xpYi93ZGogJHtEfS92YXIvY2FjaGUvd2RqCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWNoZWNrZXIucGwKKworfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbSBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtYnVpbGQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1jb25zdGFudCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisJZm9yIHJwbV9iaW5hcnkgaW4gJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9ycG0qICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0OyBkbworICAgICAgICAJY3JlYXRlX3dyYXBwZXIgJHJwbV9iaW5hcnkgXAorCQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKwlkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5YTRiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNC5iYgpAQCAtMCwwICsxLDUxNiBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIjUuNC4xNSBoYXMgYSBwYWNrYWdlIGRhdGFiYXNlIGlzc3VlOiBodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNS1BdWd1c3QvMTA5MTg3Lmh0bWwiCisKK1NVTU1BUllfJHtQTn0tbGlicyA9ICJMaWJyYXJpZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1saWJzID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIHNoYXJlZCBsaWJyYXJpZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfJHtQTn0tY29tbW9uID0gIkNvbW1vbiBSUE0gcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24iCitERVNDUklQVElPTl8ke1BOfS1jb21tb24gPSAiVGhlIHJwbS1jb21tb24gcGFja2FnZSBjb250YWlucyBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBcCithbmQgY29uZmlndXJhdGlvbiBjb21tb24gYmV0d2VlbiBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV8ke1BOfS1idWlsZCA9ICJTY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1idWlsZCA9ICJUaGUgcnBtLWJ1aWxkIHBhY2thZ2VjIG9udGFpbnMgdGhlIHNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgXAordGhhdCBhcmUgdXNlZCB0byBidWlsZCBwYWNrYWdlcyB1c2luZyB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitTVU1NQVJZX3BlcmwtbW9kdWxlLXJwbSA9ICJQZXJsIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtID0gIlRoZSBwZXJsLW1vZHVsZXMtcnBtIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9ycG01Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImxpYnBjcmUgYXR0ciBhY2wgcG9wdCBvc3NwLXV1aWQgZmlsZSBieWFjYy1uYXRpdmUiCisKKyMgcnBtMmNwaW8gaXMgYSBzaGVsbCBzY3JpcHQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJwbSBzcmMucnBtLiAgSXQgaXMgbmVlZGVkCisjIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIGRpc3RyaWJ1dGlvbiBTUlBNIGludG8gYSBmb3JtYXQgd2UgY2FuIGV4dHJhY3QuLi4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ycG01Lm9yZy9maWxlcy9ycG0vcnBtLTUuNC9ycG0tNS40LjE0LTAuMjAxMzEwMjQuc3JjLnJwbTtleHRyYWN0PXJwbS01LjQuMTQudGFyLmd6IFwKKwkgICBmaWxlOi8vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiLXJlZHVjZS5wYXRjaCBcCisJICAgZmlsZTovL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbS1hdXRvZ2VuLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxpYnNxbC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2hvd3JjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZmlsZWNsYXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNhbm9uYXJjaC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1sb29wbXNnLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtZGVwcy1vZWNvcmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVzb2x2ZWRlcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1wZXJsLXVycG0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWx1YS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1vc3NwLXV1aWQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wa2djb25maWdkZXBzLnBhdGNoIFwKKwkgICBmaWxlOi8vdWNsaWJjLXN1cHBvcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1hdGNoLnBhdGNoIFwKKwkgICBmaWxlOi8vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9kYmNvbnZlcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1weS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0yLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC1zZWd2LnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3ZlcmlmeS1maXgtYnJva2VuLWxvZ2ljLWZvci1naG9zdC1hdm9pZGFuY2UtTWFyay1IYXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGI1LW9yLWRiNi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtcXZfY2NfYl9nb25lLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlYWxwYXRoLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoIFwKKwkgICBmaWxlOi8vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHVhLWZpeC1wcmludC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2ggXAorCSAgIgorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIHBsYXRmb3JtIHNjb3JlIGRlYnVnZ2luZworIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGlkZW50aWZ5aW5nIGlzc3VlcyB3aXRoIFNtYXJ0IGJlaW5nIHVuYWJsZQorIyB0byBwcm9jZXNzIGNlcnRhaW4gcGFja2FnZSBmZWVkcy4KKyNTUkNfVVJJICs9ICJmaWxlOi8vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjUwOTNkMzk5YTBiNWQxMzQyZDI0OTAwYTkxYjM0N2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjc2ZTNhYjQxZjcyZTNiNTA0ZTA0MTA5Y2ZiNTY1YTMwMDc0MmY1NmE3ZGEwODRmMjAyMDEzYjMwZWVhZTQ2NyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vZGIvZGlzdC9hY2xvY2FsIC1JICR7U30vZGIvZGlzdC9hY2xvY2FsX2phdmEiCisKKyMgU3BlY2lmeSB0aGUgZGVmYXVsdCBycG0gbWFjcm9zIGluIHRlcm1zIG9mIGFkanVzdGFibGUgdmFyaWFibGVzCitycG1fbWFjcm9zID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczole19ldGNycG19L21hY3Jvcy4qOiV7X2V0Y3JwbX0vbWFjcm9zOiV7X2V0Y3JwbX0vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZSA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZXNkayA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCisKKyMgc3FsaXRlIGx1YSB0Y2wgYXVnZWFzIG5zcyBnY3J5cHQgbmVvbiB4eiB4YXIga2V5dXRpbHMgcGVybCBzZWxpbnV4CisKKyMgTm90ZTogcGVybCBhbmQgc3FsaXRlIHcvbyBkYiBzcGVjaWZpZWQgZG9lcyBub3QgY3VycmVudGx5IHdvcmsuCisjICAgICAgIHRjbCwgYXVnZWFzLCBuc3MsIGdjcnlwdCwgeGFyIGFuZCBrZXl1dGlscyBzdXBwb3J0IGlzIHVudGVzdGVkLgorUEFDS0FHRUNPTkZJRyA/Pz0gImRiIGJ6aXAyIHpsaWIgYmVlY3J5cHQgb3BlbnNzbCBsaWJlbGYgcHl0aG9uIgorCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC14eiwtLXdpdGhvdXQteHoseHosIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbeGFyXSA9ICItLXdpdGgteGFyLC0td2l0aG91dC14YXIseGFyLCIKKworV0lUSF9QWVRIT04gPSAiIC0td2l0aC1weXRob249JHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1pbmMtZGlyPSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24tbGliLWRpcj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMgXAorCQktLXdpdGhvdXQtcHl0aG9uZW1iZWQiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiJHtXSVRIX1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24sIgorCisjIFBlcmwgbW9kdWxlcyBhcmUgbm90IGJ1aWx0LCBidXQgdGhleSBjb3VsZCBiZSBlbmFibGVkIGZhaXJseSBlYXNpbHkKKyMgdGhlIHBlcmwgbW9kdWxlIGNyZWF0aW9uIGFuZCBpbnN0YWxsYXRpb24gd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLgorIyAoY3VycmVudGx5IGhhcyBob3N0IHBlcmwgY29udGFtaW5hdGlvbiBpc3N1ZXMpCitXSVRIX1BFUkwgPSAiLS13aXRoLXBlcmwgLS13aXRob3V0LXBlcmxlbWJlZCAtLXdpdGhvdXQtcGVybC11cnBtIgorV0lUSE9VVF9QRVJMID0gIi0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLXVycG0iCitQQUNLQUdFQ09ORklHW3BlcmxdID0gIiR7V0lUSF9QRVJMfSwke1dJVEhPVVRfUEVSTH0scGVybCwiCisKKyMgVGhlIC0td2l0aC1kYnNxbCB3aWxsIG9ubHkgdGVsbCBSUE0gdG8gY2hlY2sgZm9yIHN1cHBvcnQsIGRiCisjIG1heSBvciBtYXkgbm90IGJlIGJ1aWx0IHcvIHRoZSBkYnNxbCBzdXBwb3J0LgorV0lUSF9EQiA9ICItLXdpdGgtZGIgLS13aXRoLWRic3FsIC0td2l0aG91dC1kYi10b29scy1pbnRlZ3JhdGVkIgorUEFDS0FHRUNPTkZJR1tkYl0gPSAiJHtXSVRIX0RCfSwtLXdpdGhvdXQtZGIsZGIsIgorCitQQUNLQUdFQ09ORklHW3NxbGl0ZV0gPSAiLS13aXRoLXNxbGl0ZSwtLXdpdGhvdXQtc3FsaXRlLHNxbGl0ZTMsIgorCitQQUNLQUdFQ09ORklHW2JlZWNyeXB0XSA9ICItLXdpdGgtYmVlY3J5cHQ9ZXh0ZXJuYWwsLS13aXRob3V0LWJlZWNyeXB0LGJlZWNyeXB0LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS13aXRoLW5zcywtLXdpdGhvdXQtbnNzLG5zcywiCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS13aXRoLWdjcnlwdCwtLXdpdGhvdXQtZ2NyeXB0LGdjcnlwdCwiCitQQUNLQUdFQ09ORklHW2tleXV0aWxzXSA9ICItLXdpdGgta2V5dXRpbHMsLS13aXRob3V0LWtleXV0aWxzLGtleXV0aWxzLCIKK1BBQ0tBR0VDT05GSUdbbGliZWxmXSA9ICItLXdpdGgtbGliZWxmLC0td2l0aG91dC1saWJlbGYsZWxmdXRpbHMsIgorCitXSVRIX1NFTElOVVggPSAiLS13aXRoLXNlbGludXggLS13aXRoLXNlcG9sIC0td2l0aC1zZW1hbmFnZSIKK1dJVEhPVVRfU0VMSU5VWCA9ICItLXdpdGhvdXQtc2VsaW51eCAtLXdpdGhvdXQtc2Vwb2wgLS13aXRob3V0LXNlbWFuYWdlIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIke1dJVEhfU0VMSU5VWH0sJHtXSVRIT1VUX1NFTElOVVh9LGxpYnNlbGludXgsIgorCitXSVRIX05FT04gPSAiLS13aXRoLW5lb24gLS13aXRoLWxpYnByb3h5IC0td2l0aC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorV0lUSE9VVF9ORU9OID0gIi0td2l0aG91dC1uZW9uIC0td2l0aG91dC1saWJwcm94eSAtLXdpdGhvdXQtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1BBQ0tBR0VDT05GSUdbbmVvbl0gPSAiJHtXSVRIX05FT059LCR7V0lUSE9VVF9ORU9OfSxuZW9uIGV4cGF0LCIKKworUEFDS0FHRUNPTkZJR1tsdWFdID0gIi0td2l0aC1sdWEsLS13aXRob3V0LWx1YSxleHBhdCwiCitQQUNLQUdFQ09ORklHW3RjbF0gPSAiLS13aXRoLXRjbCwtLXdpdGhvdXQtdGNsLHRjbCwiCisKK1BBQ0tBR0VDT05GSUdbYXVnZWFzXSA9ICItLXdpdGgtYXVnZWFzLC0td2l0aG91dC1hdWdlYXMsYXVnZWFzLCIKKworRVhUUkFfT0VDT05GICs9ICItLXZlcmJvc2UgXAorCQktLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisJCS0td2l0aC1maWxlIFwKKwkJLS13aXRoLXBhdGgtbWFnaWM9JXtfdXNybGlicnBtfS8uLi8uLi9zaGFyZS9taXNjL21hZ2ljLm1nYyBcCisJCS0td2l0aC1zeWNrPWludGVybmFsIFwKKwkJLS13aXRob3V0LXJlYWRsaW5lIFwKKwkJLS13aXRob3V0LWxpYnRhc24xIFwKKwkJLS13aXRob3V0LXBha2Nob2lzIFwKKwkJLS13aXRob3V0LWdudXRscyBcCisJCS0td2l0aC1wY3JlIFwKKwkJLS1lbmFibGUtdXRmOCBcCisJCS0td2l0aC11dWlkIFwKKwkJLS13aXRoLWF0dHIgXAorCQktLXdpdGgtYWNsIFwKKwkJLS13aXRoLXBvcHQ9ZXh0ZXJuYWwgXAorCQktLXdpdGgtcHRocmVhZHMgXAorCQktLXdpdGhvdXQtY3VkZiBcCisJCS0td2l0aG91dC1maWNsIFwKKwkJLS13aXRob3V0LWF0ZXJtIFwKKwkJLS13aXRob3V0LW5peCBcCisJCS0td2l0aG91dC1iYXNoIFwKKwkJLS13aXRob3V0LXJjIFwKKwkJLS13aXRob3V0LWpzIFwKKwkJLS13aXRob3V0LWdwc2VlIFwKKwkJLS13aXRob3V0LXJ1YnkgXAorCQktLXdpdGhvdXQtc3F1aXJyZWwgXAorCQktLXdpdGgtYnVpbGQtZXh0bGliZGVwIFwKKwkJLS13aXRoLWJ1aWxkLW1heGV4dGxpYmRlcCBcCisJCS0td2l0aG91dC12YWxncmluZCBcCisJCS0tZGlzYWJsZS1vcGVubXAgXAorCQktLWVuYWJsZS1idWlsZC1waWMgXAorCQktLWVuYWJsZS1idWlsZC12ZXJzaW9uc2NyaXB0IFwKKwkJLS1lbmFibGUtYnVpbGQtd2FybmluZ3MgXAorCQktLWVuYWJsZS1idWlsZC1kZWJ1ZyBcCisJCS0tZW5hYmxlLW1haW50YWluZXItbW9kZSBcCisJCS0td2l0aC1wYXRoLW1hY3Jvcz0ke3JwbV9tYWNyb3N9IFwKKwkJLS13aXRoLXBhdGgtbGliPSR7bGliZGlyfS9ycG0gXAorCQktLXdpdGgtYnVncmVwb3J0PWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIFwKKwkJLS1wcm9ncmFtLXByZWZpeD0gXAorCQlZQUNDPWJ5YWNjIgorCitDRkxBR1NfYXBwZW5kID0gIiAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiLWxydCAtbHB0aHJlYWQiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MgJHtQTn0tbGlicyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWNvbW1vbiAke1BOfS1idWlsZCBweXRob24tcnBtIHBlcmwtbW9kdWxlLXJwbSAke1BOfS1sb2NhbGUiCisKK1NPTElCUyA9ICI1LjQuc28iCisKKyMgQmFzZWQgb24gJWZpbGVzIHNlY3Rpb24gaW4gdGhlIHJwbS5zcGVjCisKK0ZJTEVTXyR7UE59ID0gICIke2JpbmRpcn0vcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0uKiBcCisJCSR7bGliZGlyfS9ycG0vdGdwZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1wb3B0IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0yY3BpbyBcCisJCSR7bGliZGlyfS9ycG0vdmNoZWNrIFwKKwkJJHtsaWJkaXJ9L3JwbS9oZWxwZXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9xZiBcCisJCSR7bGliZGlyfS9ycG0vY3B1aW5mby55YW1sIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbXRyZWUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1rZXkgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwby5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vd2dldCBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvd2RqIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi93ZGogXAorCQkke2JpbmRpcn0vcnBtLnJlYWwgXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQucmVhbCBcCisJCSR7YmluZGlyfS9ycG0yY3Bpby5yZWFsIFwKKwkJIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vLmRlYnVnL18qIFwKKwkJIgorCitGSUxFU18ke1BOfS1jb21tb24gPSAiJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJJHtiaW5kaXJ9L2dlbmRpZmYgXAorCQkke3N5c2NvbmZkaXJ9L3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvcmVwYWNrYWdlIFwKKwkJIgorCitGSUxFU18ke1BOfS1saWJzID0gIiR7bGliZGlyfS9saWJycG0tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQtKi5zbyBcCisJCSIKKworRklMRVNfJHtQTn0tYnVpbGQgPSAiJHtwcmVmaXh9L3NyYy9ycG0gXAorCQkke2JpbmRpcn0vcnBtYnVpbGQgXAorCQkke2JpbmRpcn0vcnBtYnVpbGQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYnJwLSogXAorCQkke2xpYmRpcn0vcnBtL2NoZWNrLWZpbGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcm9zcy1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1kZWJ1Z2luZm8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtbGFuZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3ZpZGVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcXVpcmVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2dldHBvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9odHRwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vamF2YWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1wcm92aWRlcyBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXJlcXVpcmVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9leGVjdXRhYmxlZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbGlidG9vbGRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL29zZ2lkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BocC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BrZ2NvbmZpZ2RlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktYXV0b3Rlc3QucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jaHJvb3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Ric3FsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZmluZCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2luc3RhbGwtc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbWtpbnN0YWxsZGlycyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9zcWxpdGUzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9jbWFrZSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvamF2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbGlidG9vbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbWFuZHJpdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21vbm8gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BlcmwgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BocCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGtnY29uZmlnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9weXRob24gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3J1YnkgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3NlbGludXggXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3RjbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLnJwbWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS91X3BrZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlczIuc2ggXAorCQkke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJCSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tYnVpbGQgPSAiZmlsZSBiYXNoIHBlcmwiCisKK1JERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0iCisKK0ZJTEVTX3B5dGhvbi1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0iCitQUk9WSURFUyArPSAicHl0aG9uLXJwbSIKKworRklMRVNfcGVybC1tb2R1bGUtcnBtID0gIiR7bGliZGlyfS9wZXJsLyovKiBcCisJCSIKKworUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJiYXNoIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9ycG0gXAorCQkke2xpYmRpcn0vbGlicnBtLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5zbyBcCisJCSR7bGliZGlyfS9saWJycG1kYi5sYSBcCisJCSR7bGliZGlyfS9saWJycG1kYi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby5sYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2Muc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQubGEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuc28gXAorCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEubGEgXAorCQkke2xpYmRpcn0vcGtnY29uZmlnL3JwbS5wYyBcCisJCSR7bGliZGlyfS9ycG0vcnBtZGJfbG9hZGN2dCBcCisJCSIKKworRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiBcCisJCSR7bGliZGlyfS9saWJycG0uYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmEgXAorCQkke2xpYmRpcn0vbGlicnBtaW8uYSBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuYSBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5hIFwKKwkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5hIFwKKwkJIgorCitkb19jb25maWd1cmUoKSB7CisJIyBEaXNhYmxlIHRlc3RzIQorCWVjaG8gImFsbDoiID4gJHtTfS90ZXN0cy9NYWtlZmlsZS5hbQorCXNlZCAtZSAncy9AX19NS0RJUl9QQC8le19fbWtkaXJ9IC1wLycgLWkgJHtTfS9tYWNyb3MvbWFjcm9zLmluCisKKwkoIGNkICR7U307ICR7U30vYXV0b2dlbi5zaCApCisKKwkjIE5BU1RZIGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSBmaWxlcyB0aGUgcmlnaHQgcGtnLWNvbmZpZyBmaWxlLi4uCisJc2VkIC1lICdzL3BrZy1jb25maWcgLS1leGlzdHMgdXVpZC9wa2ctY29uZmlnIC0tZXhpc3RzIG9zc3AtdXVpZC9nJyBcCisJICAgIC1lICdzL3BrZy1jb25maWcgdXVpZC9wa2ctY29uZmlnIG9zc3AtdXVpZC9nJyAtaSAke1N9L2NvbmZpZ3VyZQorCisJKCBjZCAke1N9L3N5Y2sgOyBzZXQgK2UgOyBybSAtLSAtbCogOyBtYWtlIGRpc3RjbGVhbiApIHx8IDoKKworCWV4cG9ydCB2YXJwcmVmaXg9JHtsb2NhbHN0YXRlZGlyfQorCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc2VkIC1pIC1lICdzLCVfX3NjcmlwdGxldF9yZXF1aXJlcywjJSVfX3NjcmlwdGxldF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9wcm92aWRlcywjJSVfX3BlcmxfcHJvdmlkZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfX3BlcmxfcmVxdWlyZXMsIyUlX19wZXJsX3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgorCXNlZCAtaSAtZSAncywlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXNbXl9dLiosJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzIDAsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisJc2VkIC1pIC1lICdzLF4jJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3QuKiwlX29wZW5hbGxfYmVmb3JlX2Nocm9vdFx0MSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCSMgRW5hYmxlIERlYmlhbiBzdHlsZSBhcmJpdHJhcnkgdGFncy4uLgorCXNlZCAtaSAtZSAncywlX2FyYml0cmFyeV90YWdzW15fXS4qLCVfYXJiaXRyYXJ5X3RhZ3MgJXtfYXJiaXRyYXJ5X3RhZ3NfZGViaWFufSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wZXJmaWxlX3JwbWRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaAorCisJIyBSZW1vdmUgdW5wYWNrYWdlZCBmaWxlcyAoYmFzZWQgb24gbGlzdCBpbiBycG0uc3BlYykKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0ve1NwZWNmaWxlLnBtLGNwYW5mbHV0ZSxjcGFuZmx1dGUyLHJwbWRpZmYscnBtZGlmZi5jZ2ksc3FsLnByb3Ysc3FsLnJlcSx0Y2wucmVxLHRycG19CisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1ncmFwaC44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1jYWNoZS44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1ncmFwaC44KgorCXJtIC1yZiAke0R9LyR7bWFuZGlyfS97ZnIsa299CisKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vcG9wdC5oCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlicG9wdC4qCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL3BvcHQucGMKKwlybSAtZiAke0R9LyR7ZGF0YWRpcn0vbG9jYWxlLyovTENfTUVTU0FHRVMvcG9wdC5tbworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjMvcG9wdC4zCisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL3hhci4xKgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3hhcgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0veGFyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlieGFyKgorCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbHoqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW5sem1hCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW54egorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3h6KgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0vbHptYSoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL2x6Ki4xCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmx6bWEqCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi57YSxsYX0KKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoue2EsbGF9CisKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBmIC1hIFwoIC1uYW1lIHBlcmxsb2NhbC5wb2QgLW8gLW5hbWUgLnBhY2tsaXN0IFwKKwkjCS1vIFwoIC1uYW1lICcqLmJzJyAtYSAtZW1wdHkgXCkgXCkgLWV4ZWMgcm0gLWYge30gJzsnCisJI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZCAtZGVwdGggLWV4ZWMgcm1kaXIge30gMj4vZGV2L251bGwgJzsnCisKKwkjIFdlIGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgbWFjcm8gc2V0CisJcm0gLXJmICR7RH0vJHtsaWJkaXJ9L3JwbS97aVszNDU2XTg2KixhdGhsb24qLHBlbnRpdW0qLHg4Nl82NCosYWxwaGEqLHNwYXJjKixpYTY0KixwcGMqLHMzOTAqLGFybXZbMzRdW2xiXSosYXJtdlszNDVdKixtaXBzKixub2FyY2gqfQorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2RiY29udmVydC5zaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2xpYnNxbGRiLioKKworCSMgV2UgZG9uJ3Qgd2FudCwgbm9yIG5lZWQgdGhlIE1hbmRyaXZhIG11bHRpYXJjaCBpdGVtcworCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1kaXNwYXRjaAorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1wbGF0Zm9ybQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9jaGVjay1tdWx0aWFyY2gtZmlsZXMKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWttdWx0aWFyY2gKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoLmgKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nc3RyZWFtZXIuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ2VtX2hlbHBlci5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ydWJ5Z2Vtcy5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9rbW9kLWRlcHMuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZWdncy5weQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9rZXJuZWwKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvZ3N0cmVhbWVyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9tZ28KKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RiY29udmVydAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcG9tMnNwZWMKKworCXJtIC1yZiAke0R9L3Zhci9saWIvd2RqICR7RH0vdmFyL2NhY2hlL3dkagorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1jaGVja2VyLnBsCisKK30KKworYWRkX25hdGl2ZV93cmFwcGVyKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0gXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0yY3BpbyBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworCWZvciBycG1fYmluYXJ5IGluICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcnBtKiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdDsgZG8KKyAgICAgICAgCWNyZWF0ZV93cmFwcGVyICRycG1fYmluYXJ5IFwKKwkJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisJZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlL3JwbXJlc29sdmUuYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZS9ycG1yZXNvbHZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0Y2FmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZS9ycG1yZXNvbHZlLmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qIE9wZW5FbWJlZGRlZCBSUE0gcmVzb2x2ZXIgdXRpbGl0eQorCisgIFdyaXR0ZW4gYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCisgIENvcHlyaWdodCAyMDEyIEludGVsIENvcnBvcmF0aW9uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPHJwbWRiLmg+CisjaW5jbHVkZSA8cnBtdHlwZXMuaD4KKyNpbmNsdWRlIDxycG10YWcuaD4KKyNpbmNsdWRlIDxycG10cy5oPgorI2luY2x1ZGUgPHJwbW1hY3JvLmg+CisjaW5jbHVkZSA8cnBtY2IuaD4KKyNpbmNsdWRlIDxycG1sb2cuaD4KKyNpbmNsdWRlIDxhcmd2Lmg+CisjaW5jbHVkZSA8bWlyZS5oPgorCitpbnQgZGVidWdtb2RlOworRklMRSAqb3V0ZjsKKworaW50IGdldFBhY2thZ2VTdHIocnBtdHMgdHMsIGNvbnN0IGNoYXIgKk5WUkEsIHJwbVRhZyB0YWcsIGNoYXIgKip2YWx1ZSkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBycG1taSBtaSA9IHJwbXRzSW5pdEl0ZXJhdG9yKHRzLCBSUE1UQUdfTlZSQSwgTlZSQSwgMCk7CisgICAgSGVhZGVyIGg7CisgICAgaWYgKChoID0gcnBtbWlOZXh0KG1pKSkgIT0gTlVMTCkgeworICAgICAgICBIRV90IGhlID0gKEhFX3QpIG1lbXNldChhbGxvY2Eoc2l6ZW9mKCpoZSkpLCAwLCBzaXplb2YoKmhlKSk7CisgICAgICAgIGhlLT50YWcgPSB0YWc7CisgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgIGlmKHJjPT0wKQorICAgICAgICAgICAgKnZhbHVlID0gc3RyZHVwKChjaGFyICopaGUtPnAucHRyKTsKKyAgICB9CisgICAgKHZvaWQpcnBtbWlGcmVlKG1pKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsb2FkVHMocnBtdHMgKip0cywgaW50ICp0c2N0LCBjb25zdCBjaGFyICpkYmxpc3RmbikKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCBzeiA9IDU7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgbGlzdGZpbGUgPSAxOworICAgIHN0cnVjdCBzdGF0IHN0X2J1ZjsKKworICAgIHJjID0gc3RhdChkYmxpc3RmbiwgJnN0X2J1Zik7CisgICAgaWYocmMgIT0gMCkgeworICAgICAgICBwZXJyb3IoInN0YXQiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmKFNfSVNESVIoc3RfYnVmLnN0X21vZGUpKQorICAgICAgICBsaXN0ZmlsZSA9IDA7CisKKyAgICBpZihsaXN0ZmlsZSkgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiByZWFkaW5nIGRhdGFiYXNlIGxpc3QgZmlsZSAnJXMnXG4iLCBkYmxpc3Rmbik7CisgICAgICAgICp0cyA9IG1hbGxvYyhzeiAqIHNpemVvZihycG10cykpOworICAgICAgICBGSUxFICpmID0gZm9wZW4oZGJsaXN0Zm4sICJyIiApOworICAgICAgICBpZihmKSB7CisgICAgICAgICAgICBjaGFyIGxpbmVbMjA0OF07CisgICAgICAgICAgICB3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihsaW5lKSAtIDE7CisgICAgICAgICAgICAgICAgaWYobGVuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgIHdoaWxlKGxlbiA+IDAgJiYgaXNzcGFjZShsaW5lW2xlbl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVtsZW4tLV0gPSAnXDAnOworCisgICAgICAgICAgICAgICAgaWYobGVuID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgYXJyYXkgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50ID09IHN6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiArPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgKnRzID0gKHJwbXRzICopcmVhbGxvYygqdHMsIHN6KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiREVCVUc6IG9wZW5pbmcgZGF0YWJhc2UgJyVzJ1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRicGF0aG0gPSBtYWxsb2Moc3RybGVuKGxpbmUpICsgMTApOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGRicGF0aG0sICJfZGJwYXRoICVzIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIHJwbURlZmluZU1hY3JvKE5VTEwsIGRicGF0aG0sIFJNSUxfQ01ETElORSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUoZGJwYXRobSk7CisKKyAgICAgICAgICAgICAgICAgICAgcnBtdHMgdHNpID0gcnBtdHNDcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgKCp0cylbY291bnRdID0gdHNpOworICAgICAgICAgICAgICAgICAgICByYyA9IHJwbXRzT3BlbkRCKHRzaSwgT19SRE9OTFkpOworICAgICAgICAgICAgICAgICAgICBpZiggcmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmNsb3NlKGYpOworICAgICAgICAgICAgKnRzY3QgPSBjb3VudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBlcnJvcihkYmxpc3Rmbik7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiBvcGVuaW5nIGRhdGFiYXNlICclcydcbiIsIGRibGlzdGZuKTsKKyAgICAgICAgLy8gTG9hZCBmcm9tIHNpbmdsZSBkYXRhYmFzZQorICAgICAgICAqdHMgPSBtYWxsb2Moc2l6ZW9mKHJwbXRzKSk7CisgICAgICAgIGNoYXIgKmRicGF0aG0gPSBtYWxsb2Moc3RybGVuKGRibGlzdGZuKSArIDEwKTsKKyAgICAgICAgc3ByaW50ZihkYnBhdGhtLCAiX2RicGF0aCAlcyIsIGRibGlzdGZuKTsKKyAgICAgICAgcnBtRGVmaW5lTWFjcm8oTlVMTCwgZGJwYXRobSwgUk1JTF9DTURMSU5FKTsKKyAgICAgICAgZnJlZShkYnBhdGhtKTsKKworICAgICAgICBycG10cyB0c2kgPSBycG10c0NyZWF0ZSgpOworICAgICAgICAoKnRzKVswXSA9IHRzaTsKKyAgICAgICAgcmMgPSBycG10c09wZW5EQih0c2ksIE9fUkRPTkxZKTsKKyAgICAgICAgaWYoIHJjICkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSAlc1xuIiwgZGJsaXN0Zm4pOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgfQorICAgICAgICAqdHNjdCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitpbnQgcHJvY2Vzc1BhY2thZ2VzKHJwbXRzICp0cywgaW50IHRzY291bnQsIGNvbnN0IGNoYXIgKnBhY2thZ2VsaXN0Zm4sIGludCBpZ25vcmVtaXNzaW5nKQoreworICAgIGludCByYyA9IDA7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgc3ogPSAxMDA7CisgICAgaW50IGkgPSAwOworICAgIGludCBtaXNzaW5nID0gMDsKKworICAgIEZJTEUgKmYgPSBmb3BlbihwYWNrYWdlbGlzdGZuLCAiciIgKTsKKyAgICBpZihmKSB7CisgICAgICAgIGNoYXIgbGluZVsyNTVdOworICAgICAgICB3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGxpbmUpIC0gMTsKKyAgICAgICAgICAgIGlmKGxlbiA+IDApCisgICAgICAgICAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgd2hpbGUobGVuID4gMCAmJiBpc3NwYWNlKGxpbmVbbGVuXSkpCisgICAgICAgICAgICAgICAgICAgIGxpbmVbbGVuLS1dID0gJ1wwJzsKKworICAgICAgICAgICAgaWYobGVuID4gMCkgeworICAgICAgICAgICAgICAgIGludCBmb3VuZCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGk9MDsgaTx0c2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQVJHVl90IGtleXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBycG1kYiBkYiA9IHJwbXRzR2V0UmRiKHRzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBycG1kYk1pcmVBcHBseShkYiwgUlBNVEFHX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBsaW5lLCAma2V5cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmtleXMgPSBhcmd2Q291bnQoa2V5cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggbmtleXMgPT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBnZXRQYWNrYWdlU3RyKHRzW2ldLCBrZXlzWzBdLCBSUE1UQUdfUEFDS0FHRU9SSUdJTiwgJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyYyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc1xuIiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugb3JpZ2luIGZvciAlc1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggbmtleXMgPiAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlpbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJNdWx0aXBsZSBtYXRjaGVzIGZvciAlczpcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcigga2V5aW5kZXg9MDsga2V5aW5kZXg8bmtleXM7IGtleWluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IGdldFBhY2thZ2VTdHIodHNbaV0sIGtleXNba2V5aW5kZXhdLCBSUE1UQUdfUEFDS0FHRU9SSUdJTiwgJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgKCVzKVxuIiwga2V5c1trZXlpbmRleF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCAhZm91bmQgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKCBpZ25vcmVtaXNzaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlICVzIC0gaWdub3JpbmdcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZik7CisKKyAgICAgICAgaWYoIG1pc3NpbmcgKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBzb21lIHBhY2thZ2VzIHdlcmUgbWlzc2luZ1xuIik7CisgICAgICAgICAgICByYyA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHBlcnJvcihwYWNrYWdlbGlzdGZuKTsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsb29rdXBQcm92aWRlcihycG10cyB0cywgY29uc3QgY2hhciAqcmVxLCBjaGFyICoqcHJvdmlkZXIpCit7CisgICAgaW50IHJjID0gMDsKKyAgICBycG1taSBwcm92bWkgPSBycG10c0luaXRJdGVyYXRvcih0cywgUlBNVEFHX1BST1ZJREVOQU1FLCByZXEsIDApOworICAgIGlmKHByb3ZtaSkgeworICAgICAgICBIZWFkZXIgaDsKKyAgICAgICAgaWYgKChoID0gcnBtbWlOZXh0KHByb3ZtaSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgICAgIGhlLT50YWcgPSBSUE1UQUdfTkFNRTsKKyAgICAgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgICAgICBpZihyYz09MCkKKyAgICAgICAgICAgICAgICAqcHJvdmlkZXIgPSBzdHJkdXAoKGNoYXIgKiloZS0+cC5wdHIpOworICAgICAgICB9CisgICAgICAgICh2b2lkKXJwbW1pRnJlZShwcm92bWkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgcHJpbnREZXBMaXN0KHJwbXRzICp0cywgaW50IHRzY291bnQpCit7CisgICAgaW50IHJjID0gMDsKKworICAgIGlmKCB0c2NvdW50ID4gMSApCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPjEgZGF0YWJhc2Ugc3BlY2lmaWVkIHdpdGggZGVwZW5kZW5jeSBsaXN0LCB1c2luZyBmaXJzdCBvbmx5XG4iKTsKKworICAgIC8qIEdldCBsaXN0IG9mIG5hbWVzICovCisgICAgcnBtZGIgZGIgPSBycG10c0dldFJkYih0c1swXSk7CisgICAgQVJHVl90IG5hbWVzID0gTlVMTDsKKyAgICByYyA9IHJwbWRiTWlyZUFwcGx5KGRiLCBSUE1UQUdfTkFNRSwKKyAgICAgICAgICAgICAgICBSUE1NSVJFX1NUUkNNUCwgTlVMTCwgJm5hbWVzKTsKKyAgICBpbnQgbm5hbWVzID0gYXJndkNvdW50KG5hbWVzKTsKKworICAgIC8qIEdldCBsaXN0IG9mIE5WUkFzICovCisgICAgQVJHVl90IGtleXMgPSBOVUxMOworICAgIHJjID0gcnBtZGJNaXJlQXBwbHkoZGIsIFJQTVRBR19OVlJBLAorICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBOVUxMLCAma2V5cyk7CisgICAgaWYgKGtleXMpIHsKKyAgICAgICAgaW50IGksIGo7CisgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgaW50IG5rZXlzID0gYXJndkNvdW50KGtleXMpOworICAgICAgICBmb3IoaT0wOyBpPG5rZXlzOyBpKyspIHsKKyAgICAgICAgICAgIHJwbW1pIG1pID0gcnBtdHNJbml0SXRlcmF0b3IodHNbMF0sIFJQTVRBR19OVlJBLCBrZXlzW2ldLCAwKTsKKyAgICAgICAgICAgIEhlYWRlciBoOworICAgICAgICAgICAgaWYgKChoID0gcnBtbWlOZXh0KG1pKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qIEdldCBuYW1lIG9mIHBhY2thZ2UgKi8KKyAgICAgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX05BTUU7CisgICAgICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgICAgICBjaGFyICpuYW1lID0gc3RyZHVwKChjaGFyICopaGUtPnAucHRyKTsKKyAgICAgICAgICAgICAgICAvKiBHZXQgaXRzIHJlcXVpcmVzICovCisgICAgICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19SRVFVSVJFTkFNRTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWdtb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkRFQlVHOiAlcyByZXF1aXJlcyBudWxsXG4iLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBUkdWX3QgcmVxcyA9IChBUkdWX3QpaGUtPnAucHRyOworICAgICAgICAgICAgICAgIC8qIEdldCBpdHMgcmVxdWlyZWZsYWdzICovCisgICAgICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19SRVFVSVJFRkxBR1M7CisgICAgICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgICAgICBycG11aW50MzJfdCAqcmVxZmxhZ3MgPSAocnBtdWludDMyX3QgKiloZS0+cC51aTMycDsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPGhlLT5jOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKnByb3YgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBmb3Ioaz0wOyBrPG5uYW1lczsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJjbXAobmFtZXNba10sIHJlcXNbal0pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92ID0gbmFtZXNba107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYocHJvdikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKGludClyZXFmbGFnc1tqXSAmIDB4ODAwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXMgW1JFQ11cbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzfCVzXG4iLCBuYW1lLCBwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gbG9va3VwUHJvdmlkZXIodHNbMF0sIHJlcXNbal0sICZwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJjPT0wICYmIHByb3YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoaW50KXJlcWZsYWdzW2pdICYgMHg4MDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXMgW1JFQ11cbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXNcbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUocHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh2b2lkKXJwbW1pRnJlZShtaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgdXNhZ2UoKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiT3BlbkVtYmVkZGVkIHJwbSByZXNvbHZlciB1dGlsaXR5XG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5bnRheDogcnBtcmVzb2x2ZSBbLWldIFstZF0gWy10XSA8ZGJsaXN0ZmlsZT4gPHBhY2thZ2VsaXN0ZmlsZT5cbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgcnBtdHMgKnRzID0gTlVMTDsKKyAgICBpbnQgdHNjb3VudCA9IDA7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgaTsKKyAgICBpbnQgYzsKKyAgICBpbnQgaWdub3JlbWlzc2luZyA9IDA7CisgICAgaW50IGRlcGxpc3Rtb2RlID0gMDsKKyAgICBjaGFyICpvdXRmaWxlID0gTlVMTDsKKworICAgIGRlYnVnbW9kZSA9IDA7CisgICAgb3V0ZiA9IHN0ZG91dDsKKworICAgIG9wdGVyciA9IDA7CisgICAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaXRkbzoiKSkgIT0gLTEpIHsKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBpZ25vcmVtaXNzaW5nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgIGRlcGxpc3Rtb2RlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGRlYnVnbW9kZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBvdXRmaWxlID0gc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICBpZihpc3ByaW50KG9wdG9wdCkpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gYC0lYycuXG4iLCBvcHRvcHQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiBjaGFyYWN0ZXIgYFxceCV4Jy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRvcHQpOworICAgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggYXJnYyAtIG9wdGluZCA8IDEgKSB7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKCBvdXRmaWxlICkgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiBVc2luZyBvdXRwdXQgZmlsZSAlc1xuIiwgb3V0ZmlsZSk7CisgICAgICAgIG91dGYgPSBmb3BlbihvdXRmaWxlLCAidyIpOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgKmRibGlzdGZuID0gYXJndltvcHRpbmRdOworCisgICAgcnBtY2xpSW5pdChhcmdjLCBhcmd2LCBOVUxMKTsKKworICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgcnBtU2V0VmVyYm9zaXR5KFJQTUxPR19ERUJVRyk7CisKKyAgICBycG1EZWZpbmVNYWNybyhOVUxMLCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIiwgUk1JTF9DTURMSU5FKTsKKworICAgIHJjID0gbG9hZFRzKCZ0cywgJnRzY291bnQsIGRibGlzdGZuKTsKKyAgICBpZiggcmMgKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiggdHNjb3VudCA9PSAwICkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBzcGVjaWZ5IGRhdGFiYXNlIGxpc3QgZmlsZSBvciBkYXRhYmFzZSBsb2NhdGlvblxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKGRlcGxpc3Rtb2RlKSB7CisgICAgICAgIHJjID0gcHJpbnREZXBMaXN0KHRzLCB0c2NvdW50KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmKCBhcmdjIC0gb3B0aW5kIDwgMiApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgcGFja2FnZSBsaXN0IGZpbGVcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcGtnbGlzdGZuID0gYXJndltvcHRpbmQrMV07CisgICAgICAgICAgICByYyA9IHByb2Nlc3NQYWNrYWdlcyh0cywgdHNjb3VudCwgcGtnbGlzdGZuLCBpZ25vcmVtaXNzaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvcihpPTA7IGk8dHNjb3VudDsgaSsrKQorICAgICAgICAodm9pZCkgcnBtdHNDbG9zZURCKHRzW2ldKTsKKyAgICBmcmVlKHRzKTsKKworICAgIGlmKCBvdXRmaWxlICkgeworICAgICAgICBmY2xvc2Uob3V0Zik7CisgICAgICAgIGZyZWUob3V0ZmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNTVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJPcGVuRW1iZWRkZWQgUlBNIHJlc29sdmVyIHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJPcGVuRW1iZWRkZWQgUlBNIHJlc29sdmVyIC0gcGVyZm9ybXMgUlBNIGRhdGFiYXNlIGxvb2t1cHMgaW4gYmF0Y2hlcyB0byBhdm9pZCBcCisgcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2YgcnBtIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorREVQRU5EUyA9ICJycG0iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZmlsZTovL3JwbXJlc29sdmUuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeworCSR7Q0N9ICR7Q0ZMQUdTfSAtZ2dkYiAtSSR7U1RBR0lOR19JTkNESVJ9L3JwbSAke0xERkxBR1N9IHJwbXJlc29sdmUuYyAtbyBycG1yZXNvbHZlIC1scnBtYnVpbGQgLWxycG0gLWxycG1pbyAtbHJwbWRiIC1scG9wdAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBycG1yZXNvbHZlICR7RH0ke2JpbmRpcn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbXJlc29sdmUgXAorCQkJUlBNX1VTUkxJQlJQTT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vbG9jYWxlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNWI0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsOTUgQEAKK2RubCB2ZXJiYXRpbSByZW5hbWVkIGZyb20gYWNsb2NhbC5tNCBpbiByc3luY18zLjAuNworZG5sIDA3LzA2LzIwMTAgLSBxaGUKKworZG5sIEFDX1ZBTElEQVRFX0NBQ0hFX1NZU1RFTV9UWVBFWyhjbWQpXQorZG5sIGlmIHRoZSBjYWNoZSBmaWxlIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBjdXJyZW50IGhvc3QsCitkbmwgdGFyZ2V0IGFuZCBidWlsZCBzeXN0ZW0gdHlwZXMsIGV4ZWN1dGUgQ01EIG9yIHByaW50IGEgZGVmYXVsdAorZG5sIGVycm9yIG1lc3NhZ2UuCitBQ19ERUZVTihBQ19WQUxJREFURV9DQUNIRV9TWVNURU1fVFlQRSwgWworICAgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9TWVNURU1dKQorICAgIEFDX01TR19DSEVDS0lORyhbY29uZmlnLmNhY2hlIHN5c3RlbSB0eXBlXSkKKyAgICBpZiB7IHRlc3QgeCIke2FjX2N2X2hvc3Rfc3lzdGVtX3R5cGUrc2V0fSIgPSB4InNldCIgJiYKKyAgICAgICAgIHRlc3QgeCIkYWNfY3ZfaG9zdF9zeXN0ZW1fdHlwZSIgIT0geCIkaG9zdCI7IH0gfHwKKyAgICAgICB7IHRlc3QgeCIke2FjX2N2X2J1aWxkX3N5c3RlbV90eXBlK3NldH0iID0geCJzZXQiICYmCisgICAgICAgICB0ZXN0IHgiJGFjX2N2X2J1aWxkX3N5c3RlbV90eXBlIiAhPSB4IiRidWlsZCI7IH0gfHwKKyAgICAgICB7IHRlc3QgeCIke2FjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZStzZXR9IiA9IHgic2V0IiAmJgorICAgICAgICAgdGVzdCB4IiRhY19jdl90YXJnZXRfc3lzdGVtX3R5cGUiICE9IHgiJHRhcmdldCI7IH07IHRoZW4KKwlBQ19NU0dfUkVTVUxUKFtkaWZmZXJlbnRdKQorCWlmZWxzZSgkIywgMSwgWyQxXSwKKwkJW0FDX01TR19FUlJPUihbInlvdSBtdXN0IHJlbW92ZSBjb25maWcuY2FjaGUgYW5kIHJlc3RhcnQgY29uZmlndXJlIl0pXSkKKyAgICBlbHNlCisJQUNfTVNHX1JFU1VMVChbc2FtZV0pCisgICAgZmkKKyAgICBhY19jdl9ob3N0X3N5c3RlbV90eXBlPSIkaG9zdCIKKyAgICBhY19jdl9idWlsZF9zeXN0ZW1fdHlwZT0iJGJ1aWxkIgorICAgIGFjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZT0iJHRhcmdldCIKK10pCisKK2RubCBDaGVjayBmb3Igc29ja2xlbl90OiBoaXN0b3JpY2FsbHkgb24gQlNEIGl0IGlzIGFuIGludCwgYW5kIGluCitkbmwgUE9TSVggMWcgaXQgaXMgYSB0eXBlIG9mIGl0cyBvd24sIGJ1dCBzb21lIHBsYXRmb3JtcyB1c2UgZGlmZmVyZW50CitkbmwgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB0byBnZXRzb2Nrb3B0LCBnZXRwZWVybmFtZSwgZXRjLiAgU28gd2UKK2RubCBoYXZlIHRvIHRlc3QgdG8gZmluZCBzb21ldGhpbmcgdGhhdCB3aWxsIHdvcmsuCisKK2RubCBUaGlzIGlzIG5vIGdvb2QsIGJlY2F1c2UgcGFzc2luZyB0aGUgd3JvbmcgcG9pbnRlciBvbiBDIGNvbXBpbGVycyBpcworZG5sIGxpa2VseSB0byBvbmx5IGdlbmVyYXRlIGEgd2FybmluZywgbm90IGFuIGVycm9yLiAgV2UgZG9uJ3QgY2FsbCB0aGlzIGF0CitkbmwgdGhlIG1vbWVudC4KKworQUNfREVGVU4oW1RZUEVfU09DS0xFTl9UXSwKK1sKKyAgIEFDX0NIRUNLX1RZUEUoW3NvY2tsZW5fdF0sICxbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisgICAgICBBQ19DQUNIRV9WQUwoW3JzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdl0sCisgICAgICBbCisgICAgICAgICAjIFN5c3RlbXMgaGF2ZSBlaXRoZXIgInN0cnVjdCBzb2NrYWRkciAqIiBvcgorICAgICAgICAgIyAidm9pZCAqIiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGdldHBlZXJuYW1lCisgICAgICAgICByc3luY19jdl9zb2NrbGVuX3RfZXF1aXY9CisgICAgICAgICBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworICAgICAgICAgICAgZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIjsgZG8KKyAgICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyAgICAgICAgICAgICAgICAgIGludCBnZXRwZWVybmFtZSAoaW50LCAkYXJnMiAqLCAkdCAqKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgJHQgbGVuOworICAgICAgICAgICAgICAgICAgZ2V0cGVlcm5hbWUoMCwwLCZsZW4pOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICByc3luY19jdl9zb2NrbGVuX3RfZXF1aXY9IiR0IgorICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBkb25lCisgICAgICAgICBkb25lCisKKyAgICAgICAgIGlmIHRlc3QgIngkcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2IiA9IHg7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3RdKQorICAgICAgICAgZmkKKyAgICAgIF0pCisgICAgICBBQ19NU0dfUkVTVUxUKCRyc3luY19jdl9zb2NrbGVuX3RfZXF1aXYpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoc29ja2xlbl90LCAkcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2LAorCQkJW3R5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZF0pXSwKKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitdKQorCitkbmwgQUNfSEFWRV9UWVBFKFRZUEUsSU5DTFVERVMpCitBQ19ERUZVTihbQUNfSEFWRV9UWVBFXSwgWworQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorY3Y9YGVjaG8gIiQxIiB8IHNlZCAneSUuLystICVfX3BfXyUnYAorQUNfTVNHX0NIRUNLSU5HKGZvciAkMSkKK0FDX0NBQ0hFX1ZBTChbYWNfY3ZfdHlwZV8kY3ZdLAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworQUNfSU5DTFVERVNfREVGQVVMVAorJDJdXSwKK1tbJDEgZm9vO11dKV0sCitbZXZhbCAiYWNfY3ZfdHlwZV8kY3Y9eWVzIl0sCitbZXZhbCAiYWNfY3ZfdHlwZV8kY3Y9bm8iXSkpZG5sCithY19mb289YGV2YWwgZWNobyBcXCRhY19jdl90eXBlXyRjdmAKK0FDX01TR19SRVNVTFQoJGFjX2ZvbykKK2lmIHRlc3QgIiRhY19mb28iID0geWVzOyB0aGVuCisgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICQxIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tICVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX18lJ2AKK2lmIGZhbHNlOyB0aGVuCisJQUNfQ0hFQ0tfVFlQRVMoJDEpCitmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoJGFjX3RyX2hkciwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGAkMSddKQorZmkKK10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvcnN5bmNkLmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvcnN5bmNkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ZjViMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9yc3luY2QuY29uZgpAQCAtMCwwICsxLDE1IEBACisjIC9ldGMvcnN5bmNkLmNvbmYKKworIyBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgcnN5bmMgZGFlbW9uCisjIFNlZSByc3luYygxKSBhbmQgcnN5bmNkLmNvbmYoNSkgbWFuIHBhZ2VzIGZvciBoZWxwCisKKyMgVGhpcyBmaWxlIGlzIHJlcXVpcmVkIGJ5IHJzeW5jIC0tZGFlbW9uCitwaWQgZmlsZSA9IC92YXIvcnVuL3JzeW5jZC5waWQKK3VzZSBjaHJvb3QgPSB5ZXMKK3JlYWQgb25seSA9IHllcworCisjIFNpbXBsZSBleGFtcGxlIGZvciBlbmFibGluZyB5b3VyIG93biBsb2NhbCByc3luYyBzZXJ2ZXIKKyNbZXZlcnl0aGluZ10KKyMJcGF0aCA9IC8KKyMJY29tbWVudCA9IEV2ZXJ5dGhpbmcgZXhjZXB0IC9ldGMgZXhwb3NlZAorIwlleGNsdWRlID0gL2V0YwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1NDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbIFRoZSBwYXRjaCBpcyByc3luYy0yLjYuOSBzcGVjaWZpYyBdCisKK1RoZSBwYXRjaCBpcyBmcm9tIGh0dHBzOi8vaXNzdWVzLnJwYXRoLmNvbS9icm93c2UvUlBMLTE2NDcgYW5kIGlzIHVzZWQgdG8KK2FkZHJlc3MgaHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMDctNDA5MQorCitEYXRlOiAgIFR1ZSBNYXkgMTAgMTA6MDc6MzYgMjAxMSArMDgwMAorRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zZW5kZXIuYyBiL3NlbmRlci5jCitpbmRleCA2ZmNhYTY1Li4wNTNhOGYxIDEwMDY0NAorLS0tIGEvc2VuZGVyLmMKKysrKyBiL3NlbmRlci5jCitAQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgc3VjY2Vzc2Z1bF9zZW5kKGludCBuZHgpCisgCWNoYXIgZm5hbWVbTUFYUEFUSExFTl07CisgCXN0cnVjdCBmaWxlX3N0cnVjdCAqZmlsZTsKKyAJdW5zaWduZWQgaW50IG9mZnNldDsKKysJc2l6ZV90IGwgPSAwOworIAorIAlpZiAobmR4IDwgMCB8fCBuZHggPj0gdGhlX2ZpbGVfbGlzdC0+Y291bnQpCisgCQlyZXR1cm47CitAQCAtMTMzLDYgKzEzNCwyMCBAQCB2b2lkIHN1Y2Nlc3NmdWxfc2VuZChpbnQgbmR4KQorIAkJCQkgICAgZmlsZS0+ZGlyLnJvb3QsICIvIiwgTlVMTCk7CisgCX0gZWxzZQorIAkJb2Zmc2V0ID0gMDsKKysKKysJbCA9IG9mZnNldCArIDE7CisrCWlmIChmaWxlKSB7CisrCQlpZiAoZmlsZS0+ZGlybmFtZSkKKysJCQlsICs9IHN0cmxlbihmaWxlLT5kaXJuYW1lKTsKKysJCWlmIChmaWxlLT5iYXNlbmFtZSkKKysJCQlsICs9IHN0cmxlbihmaWxlLT5iYXNlbmFtZSk7CisrCX0KKysKKysJaWYgKGwgPj0gc2l6ZW9mKGZuYW1lKSkgeworKwkJcnByaW50ZihGRVJST1IsICJPdmVybG9uZyBwYXRobmFtZVxuIik7CisrCQlleGl0X2NsZWFudXAoUkVSUl9GSUxFU0VMRUNUKTsKKysJfQorKworIAlmX25hbWUoZmlsZSwgZm5hbWUgKyBvZmZzZXQpOworIAlpZiAocmVtb3ZlX3NvdXJjZV9maWxlcykgeworIAkJaWYgKGRvX3VubGluayhmbmFtZSkgPT0gMCkgeworQEAgLTIyNCw2ICsyMzksNyBAQCB2b2lkIHNlbmRfZmlsZXMoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIGludCBmX291dCwgaW50IGZfaW4pCisgCWVudW0gbG9nY29kZSBsb2dfY29kZSA9IGxvZ19iZWZvcmVfdHJhbnNmZXIgPyBGTE9HIDogRklORk87CisgCWludCBmX3hmZXIgPSB3cml0ZV9iYXRjaCA8IDAgPyBiYXRjaF9mZCA6IGZfb3V0OworIAlpbnQgaSwgajsKKysJc2l6ZV90IGwgPSAwOworIAorIAlpZiAodmVyYm9zZSA+IDIpCisgCQlycHJpbnRmKEZJTkZPLCAic2VuZF9maWxlcyBzdGFydGluZ1xuIik7CitAQCAtMjU5LDYgKzI3NSwyMCBAQCB2b2lkIHNlbmRfZmlsZXMoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIGludCBmX291dCwgaW50IGZfaW4pCisgCQkJCWZuYW1lW29mZnNldCsrXSA9ICcvJzsKKyAJCX0gZWxzZQorIAkJCW9mZnNldCA9IDA7CisrCisrCQlsID0gb2Zmc2V0ICsgMTsKKysJCWlmIChmaWxlKSB7CisrCQkJaWYgKGZpbGUtPmRpcm5hbWUpCisrCQkJCWwgKz0gc3RybGVuKGZpbGUtPmRpcm5hbWUpOworKwkJCWlmIChmaWxlLT5iYXNlbmFtZSkKKysJCQkJbCArPSBzdHJsZW4oZmlsZS0+YmFzZW5hbWUpOworKwkJfQorKworKwkJaWYgKGwgPj0gc2l6ZW9mKGZuYW1lKSkgeworKwkJCXJwcmludGYoRkVSUk9SLCAiT3ZlcmxvbmcgcGF0aG5hbWVcbiIpOworKwkJCWV4aXRfY2xlYW51cChSRVJSX0ZJTEVTRUxFQ1QpOworKwkJfQorKworIAkJZm5hbWUyID0gZl9uYW1lKGZpbGUsIGZuYW1lICsgb2Zmc2V0KTsKKyAKKyAJCWlmICh2ZXJib3NlID4gMikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luY2QuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luY2QuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVmNWIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jZC5jb25mCkBAIC0wLDAgKzEsMTUgQEAKKyMgL2V0Yy9yc3luY2QuY29uZgorCisjIE1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciByc3luYyBkYWVtb24KKyMgU2VlIHJzeW5jKDEpIGFuZCByc3luY2QuY29uZig1KSBtYW4gcGFnZXMgZm9yIGhlbHAKKworIyBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgYnkgcnN5bmMgLS1kYWVtb24KK3BpZCBmaWxlID0gL3Zhci9ydW4vcnN5bmNkLnBpZAordXNlIGNocm9vdCA9IHllcworcmVhZCBvbmx5ID0geWVzCisKKyMgU2ltcGxlIGV4YW1wbGUgZm9yIGVuYWJsaW5nIHlvdXIgb3duIGxvY2FsIHJzeW5jIHNlcnZlcgorI1tldmVyeXRoaW5nXQorIwlwYXRoID0gLworIwljb21tZW50ID0gRXZlcnl0aGluZyBleGNlcHQgL2V0YyBleHBvc2VkCisjCWV4Y2x1ZGUgPSAvZXRjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWNlNTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSA5NjJmOGI5MDA0NWFiMzMxZmMwNGM5ZTY1ZjgwZjFhNTNlNjgyNDNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHNhbWJhLm9yZz4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTI6NDE6MDMgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQ29tcGxhaW4gaWYgYW4gaW5jLXJlY3Vyc2l2ZSBwYXRoIGlzIG5vdCByaWdodCBmb3IgaXRzIGRpci4KKyBUaGlzIGVuc3VyZXMgdGhhdCBhIG1hbGljaW91cyBzZW5kZXIgY2FuJ3QgdXNlIGEganVzdC1zZW50IHN5bWxpbmsgYXMgYQorIHRyYXNuZmVyIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja1BvcnQKKworRml4IHRoZSBDVkUtMjAxNC05NTEyLCByc3luYyAzLjEuMSBhbGxvd3MgcmVtb3RlIGF0dGFja2VycyB0byB3cml0ZSB0byBhcmJpdHJhcnkKK2ZpbGVzIHZpYSBhIHN5bWxpbmsgYXR0YWNrIG9uIGEgZmlsZSBpbiB0aGUgc3luY2hyb25pemF0aW9uIHBhdGguCisKK0JhY2tQb3J0IGFuZCBmaXggdGhpcyBwYXRjaCB0byBtYWtlIGl0IGFibGUgdG8gYXBwbHkgdG8gc291cmNlIGNvZGUKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgZmxpc3QuYyB8IDIyICsrKysrKysrKysrKysrKysrKysrLS0KKyBpby5jICAgIHwgIDIgKy0KKyBtYWluLmMgIHwgIDQgKystLQorIHJzeW5jLmMgfCAgMiArLQorIHByb3RvLmggfCAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZmxpc3QuYyBiL2ZsaXN0LmMKK2luZGV4IGMyNDY3MmUuLjkyZTRiNjUgMTAwNjQ0CistLS0gYS9mbGlzdC5jCisrKysgYi9mbGlzdC5jCitAQCAtMjQzNSw4ICsyNDM1LDkgQEAgc3RydWN0IGZpbGVfbGlzdCAqc2VuZF9maWxlX2xpc3QoaW50IGYsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCXJldHVybiBmbGlzdDsKKyB9CisgCistc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYpCisrc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYsIGludCBkaXJfbmR4KQorIHsKKysJY29uc3QgY2hhciAqZ29vZF9kaXJuYW1lID0gTlVMTDsKKyAJc3RydWN0IGZpbGVfbGlzdCAqZmxpc3Q7CisgCWludCBkc3RhcnQsIGZsYWdzOworIAlpbnQ2NCBzdGFydF9yZWFkOworQEAgLTI0OTIsNiArMjQ5MywyMyBAQCBzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZikKKyAJCWZsaXN0X2V4cGFuZChmbGlzdCwgMSk7CisgCQlmaWxlID0gcmVjdl9maWxlX2VudHJ5KGYsIGZsaXN0LCBmbGFncyk7CisgCisrCQlpZiAoaW5jX3JlY3Vyc2UpIHsKKysJCQlzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9kaXJbXSA9ICJcMCI7CisrCQkJY29uc3QgY2hhciAqY3VyX2RpciA9IGZpbGUtPmRpcm5hbWUgPyBmaWxlLT5kaXJuYW1lIDogZW1wdHlfZGlyOworKwkJCWlmIChyZWxhdGl2ZV9wYXRocyAmJiAqY3VyX2RpciA9PSAnLycpCisrCQkJCWN1cl9kaXIrKzsKKysJCQlpZiAoY3VyX2RpciAhPSBnb29kX2Rpcm5hbWUpIHsKKysJCQkJY29uc3QgY2hhciAqZCA9IGRpcl9uZHggPj0gMCA/IGZfbmFtZShkaXJfZmxpc3QtPmZpbGVzW2Rpcl9uZHhdLCBOVUxMKSA6IGVtcHR5X2RpcjsKKysJCQkJaWYgKHN0cmNtcChjdXJfZGlyLCBkKSAhPSAwKSB7CisrCQkJCQlycHJpbnRmKEZFUlJPUiwKKysJCQkJCQkiQUJPUlRJTkcgZHVlIHRvIGludmFsaWQgZGlyIHByZWZpeCBmcm9tIHNlbmRlcjogJXMgKHNob3VsZCBiZTogJXMpXG4iLAorKwkJCQkJCWN1cl9kaXIsIGQpOworKwkJCQkJZXhpdF9jbGVhbnVwKFJFUlJfUFJPVE9DT0wpOworKwkJCQl9CisrCQkJCWdvb2RfZGlybmFtZSA9IGN1cl9kaXI7CisrCQkJfQorKwkJfQorKworIAkJaWYgKFNfSVNSRUcoZmlsZS0+bW9kZSkpIHsKKyAJCQkvKiBBbHJlYWR5IGNvdW50ZWQgKi8KKyAJCX0gZWxzZSBpZiAoU19JU0RJUihmaWxlLT5tb2RlKSkgeworQEAgLTI2MTUsNyArMjYzMyw3IEBAIHZvaWQgcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChpbnQgZikKKyAJCQlycHJpbnRmKEZJTkZPLCAiWyVzXSByZWNlaXZpbmcgZmxpc3QgZm9yIGRpciAlZFxuIiwKKyAJCQkJd2hvX2FtX2koKSwgbmR4KTsKKyAJCX0KKy0JCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZik7CisrCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGYsIG5keCk7CisgCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAJfQorIH0KK2RpZmYgLS1naXQgYS9pby5jIGIvaW8uYworaW5kZXggYjlhOWJkMC4uYTg2OGZhOSAxMDA2NDQKKy0tLSBhL2lvLmMKKysrKyBiL2lvLmMKK0BAIC0xNjg1LDcgKzE2ODUsNyBAQCB2b2lkIHdhaXRfZm9yX3JlY2VpdmVyKHZvaWQpCisgCQkJCXJwcmludGYoRklORk8sICJbJXNdIHJlY2VpdmluZyBmbGlzdCBmb3IgZGlyICVkXG4iLAorIAkJCQkJd2hvX2FtX2koKSwgbmR4KTsKKyAJCQl9CistCQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChpb2J1Zi5pbl9mZCk7CisrCQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChpb2J1Zi5pbl9mZCwgbmR4KTsKKyAJCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAjaWZkZWYgU1VQUE9SVF9IQVJEX0xJTktTCisgCQkJaWYgKHByZXNlcnZlX2hhcmRfbGlua3MpCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCitpbmRleCBlN2ExM2Y3Li43MTNiODE4IDEwMDY0NAorLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xMDA5LDcgKzEwMDksNyBAQCBzdGF0aWMgdm9pZCBkb19zZXJ2ZXJfcmVjdihpbnQgZl9pbiwgaW50IGZfb3V0LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJZmlsZXNmcm9tX2ZkID0gLTE7CisgCX0KKyAKKy0JZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luKTsKKysJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luLCAtMSk7CisgCWlmICghZmxpc3QpIHsKKyAJCXJwcmludGYoRkVSUk9SLCJzZXJ2ZXJfcmVjdjogcmVjdl9maWxlX2xpc3QgZXJyb3JcbiIpOworIAkJZXhpdF9jbGVhbnVwKFJFUlJfRklMRVNFTEVDVCk7CitAQCAtMTE4Myw3ICsxMTgzLDcgQEAgaW50IGNsaWVudF9ydW4oaW50IGZfaW4sIGludCBmX291dCwgcGlkX3QgcGlkLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAlpZiAod3JpdGVfYmF0Y2ggJiYgIWFtX3NlcnZlcikKKyAJCXN0YXJ0X3dyaXRlX2JhdGNoKGZfaW4pOworLQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4pOworKwlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIC0xKTsKKyAJaWYgKGluY19yZWN1cnNlICYmIGZpbGVfdG90YWwgPT0gMSkKKyAJCXJlY3ZfYWRkaXRpb25hbF9maWxlX2xpc3QoZl9pbik7CisgCitkaWZmIC0tZ2l0IGEvcnN5bmMuYyBiL3JzeW5jLmMKK2luZGV4IDY4ZmY2YjEuLmMzZWNjNTEgMTAwNjQ0CistLS0gYS9yc3luYy5jCisrKysgYi9yc3luYy5jCitAQCAtMzY0LDcgKzM2NCw3IEBAIGludCByZWFkX25keF9hbmRfYXR0cnMoaW50IGZfaW4sIGludCBmX291dCwgaW50ICppZmxhZ19wdHIsIHVjaGFyICp0eXBlX3B0ciwKKyAJCX0KKyAJCS8qIFNlbmQgYWxsIHRoZSBkYXRhIHdlIHJlYWQgZm9yIHRoaXMgZmxpc3QgdG8gdGhlIGdlbmVyYXRvci4gKi8KKyAJCXN0YXJ0X2ZsaXN0X2ZvcndhcmQobmR4KTsKKy0JCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbik7CisrCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIG5keCk7CisgCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAJCXN0b3BfZmxpc3RfZm9yd2FyZCgpOworIAl9CitkaWZmIC0tZ2l0IGEvcHJvdG8uaCBiL3Byb3RvLmgKK2luZGV4IDIyZmM1MzkuLjI0N2M1NTggMTAwNjQ0CistLS0gYS9wcm90by5oCisrKysgYi9wcm90by5oCitAQCAtODksNyArODksNyBAQCBzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKm1ha2VfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsCisgdm9pZCB1bm1ha2VfZmlsZShzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKmZpbGUpOworIHZvaWQgc2VuZF9leHRyYV9maWxlX2xpc3QoaW50IGYsIGludCBhdF9sZWFzdCk7Cisgc3RydWN0IGZpbGVfbGlzdCAqc2VuZF9maWxlX2xpc3QoaW50IGYsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworLXN0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmKTsKKytzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZiwgaW50IGRpcl9uZHgpOworIHZvaWQgcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChpbnQgZik7CisgaW50IGZsaXN0X2ZpbmQoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIHN0cnVjdCBmaWxlX3N0cnVjdCAqZik7CisgaW50IGZsaXN0X2ZpbmRfaWdub3JlX2Rpcm5lc3Moc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIHN0cnVjdCBmaWxlX3N0cnVjdCAqZik7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjYWM0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitGcm9tIGVhYzg1ODA4NWUzYWM5NGVjMGFiNTA2MWQxMWY1MjY1MmM5MGE4NjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXYXluZSBEYXZpc29uIDx3YXluZWRAc2FtYmEub3JnPgorRGF0ZTogTW9uLCAxMSBNYXkgMjAxNSAxMjozNjoyMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvMV0gQWRkIGNvbXBhdCBmbGFnIHRvIGFsbG93IHByb3BlciBzZWVkIGNoZWNrc3VtIG9yZGVyLgorIEZpeGVzIHRoZSBlcXVpdmFsZW50IG9mIGxpYnJzeW5jJ3MgQ1ZFLTIwMTQtODI0MiBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjaGVja3N1bS5jIHwgMTcgKysrKysrKysrKysrKy0tLS0KKyBjb21wYXQuYyAgIHwgIDUgKysrKysKKyBvcHRpb25zLmMgIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NoZWNrc3VtLmMgYi9jaGVja3N1bS5jCitpbmRleCBhMWMyYWEyLi45MzNiNTE0IDEwMDY0NAorLS0tIGEvY2hlY2tzdW0uYworKysrIGIvY2hlY2tzdW0uYworQEAgLTIzLDYgKzIzLDcgQEAKKyAKKyBleHRlcm4gaW50IGNoZWNrc3VtX3NlZWQ7CisgZXh0ZXJuIGludCBwcm90b2NvbF92ZXJzaW9uOworK2V4dGVybiBpbnQgcHJvcGVyX3NlZWRfb3JkZXI7CisgCisgLyoKKyAgIGEgc2ltcGxlIDMyIGJpdCBjaGVja3N1bSB0aGF0IGNhbiBiZSB1cGFkdGVkIGZyb20gZWl0aGVyIGVuZAorQEAgLTU0LDEwICs1NSwxOCBAQCB2b2lkIGdldF9jaGVja3N1bTIoY2hhciAqYnVmLCBpbnQzMiBsZW4sIGNoYXIgKnN1bSkKKyAJaWYgKHByb3RvY29sX3ZlcnNpb24gPj0gMzApIHsKKyAJCXVjaGFyIHNlZWRidWZbNF07CisgCQltZDVfYmVnaW4oJm0pOworLQkJbWQ1X3VwZGF0ZSgmbSwgKHVjaGFyICopYnVmLCBsZW4pOworLQkJaWYgKGNoZWNrc3VtX3NlZWQpIHsKKy0JCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CistCQkJbWQ1X3VwZGF0ZSgmbSwgc2VlZGJ1ZiwgNCk7CisrCQlpZiAocHJvcGVyX3NlZWRfb3JkZXIpIHsKKysJCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworKwkJCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CisrCQkJCW1kNV91cGRhdGUoJm0sIHNlZWRidWYsIDQpOworKwkJCX0KKysJCQltZDVfdXBkYXRlKCZtLCAodWNoYXIgKilidWYsIGxlbik7CisrCQl9IGVsc2UgeworKwkJCW1kNV91cGRhdGUoJm0sICh1Y2hhciAqKWJ1ZiwgbGVuKTsKKysJCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworKwkJCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CisrCQkJCW1kNV91cGRhdGUoJm0sIHNlZWRidWYsIDQpOworKwkJCX0KKyAJCX0KKyAJCW1kNV9yZXN1bHQoJm0sICh1Y2hhciAqKXN1bSk7CisgCX0gZWxzZSB7CitkaWZmIC0tZ2l0IGEvY29tcGF0LmMgYi9jb21wYXQuYworaW5kZXggMjQ1NDkzNy4uZjg5ZDQ2NiAxMDA2NDQKKy0tLSBhL2NvbXBhdC5jCisrKysgYi9jb21wYXQuYworQEAgLTI3LDYgKzI3LDcgQEAgaW50IGluY19yZWN1cnNlID0gMDsKKyBpbnQgY29tcGF0X2ZsYWdzID0gMDsKKyBpbnQgdXNlX3NhZmVfaW5jX2ZsaXN0ID0gMDsKKyBpbnQgd2FudF94YXR0cl9vcHRpbSA9IDA7CisraW50IHByb3Blcl9zZWVkX29yZGVyID0gMDsKKyAKKyBleHRlcm4gaW50IGFtX3NlcnZlcjsKKyBleHRlcm4gaW50IGFtX3NlbmRlcjsKK0BAIC03OCw2ICs3OSw3IEBAIGludCBmaWxlc2Zyb21fY29udmVydCA9IDA7CisgI2RlZmluZSBDRl9TWU1MSU5LX0lDT05WICgxPDwyKQorICNkZWZpbmUgQ0ZfU0FGRV9GTElTVAkgKDE8PDMpCisgI2RlZmluZSBDRl9BVk9JRF9YQVRUUl9PUFRJTSAoMTw8NCkKKysjZGVmaW5lIENGX0NIS1NVTV9TRUVEX0ZJWCAoMTw8NSkKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqY2xpZW50X2luZm87CisgCitAQCAtMjcxLDEyICsyNzMsMTUgQEAgdm9pZCBzZXR1cF9wcm90b2NvbChpbnQgZl9vdXQsaW50IGZfaW4pCisgCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9TQUZFX0ZMSVNUOworIAkJCWlmIChsb2NhbF9zZXJ2ZXIgfHwgc3RyY2hyKGNsaWVudF9pbmZvLCAneCcpICE9IE5VTEwpCisgCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9BVk9JRF9YQVRUUl9PUFRJTTsKKysJCQlpZiAobG9jYWxfc2VydmVyIHx8IHN0cmNocihjbGllbnRfaW5mbywgJ0MnKSAhPSBOVUxMKQorKwkJCQljb21wYXRfZmxhZ3MgfD0gQ0ZfQ0hLU1VNX1NFRURfRklYOworIAkJCXdyaXRlX2J5dGUoZl9vdXQsIGNvbXBhdF9mbGFncyk7CisgCQl9IGVsc2UKKyAJCQljb21wYXRfZmxhZ3MgPSByZWFkX2J5dGUoZl9pbik7CisgCQkvKiBUaGUgaW5jX3JlY3Vyc2UgdmFyIE1VU1QgYmUgc2V0IHRvIDAgb3IgMS4gKi8KKyAJCWluY19yZWN1cnNlID0gY29tcGF0X2ZsYWdzICYgQ0ZfSU5DX1JFQ1VSU0UgPyAxIDogMDsKKyAJCXdhbnRfeGF0dHJfb3B0aW0gPSBwcm90b2NvbF92ZXJzaW9uID49IDMxICYmICEoY29tcGF0X2ZsYWdzICYgQ0ZfQVZPSURfWEFUVFJfT1BUSU0pOworKwkJcHJvcGVyX3NlZWRfb3JkZXIgPSBjb21wYXRfZmxhZ3MgJiBDRl9DSEtTVU1fU0VFRF9GSVggPyAxIDogMDsKKyAJCWlmIChhbV9zZW5kZXIpIHsKKyAJCQlyZWNlaXZlcl9zeW1saW5rX3RpbWVzID0gYW1fc2VydmVyCisgCQkJICAgID8gc3RyY2hyKGNsaWVudF9pbmZvLCAnTCcpICE9IE5VTEwKK2RpZmYgLS1naXQgYS9vcHRpb25zLmMgYi9vcHRpb25zLmMKK2luZGV4IDE5YzJiN2QuLjQxMjhiNTkgMTAwNjQ0CistLS0gYS9vcHRpb25zLmMKKysrKyBiL29wdGlvbnMuYworQEAgLTI1MDMsNiArMjUwMyw3IEBAIHZvaWQgc2VydmVyX29wdGlvbnMoY2hhciAqKmFyZ3MsIGludCAqYXJnY19wKQorICNlbmRpZgorIAkJYXJnc3RyW3grK10gPSAnZic7IC8qIGZsaXN0IEkvTy1lcnJvciBzYWZldHkgc3VwcG9ydCAqLworIAkJYXJnc3RyW3grK10gPSAneCc7IC8qIHhhdHRyIGhhcmRsaW5rIG9wdGltaXphdGlvbiBub3QgZGVzaXJlZCAqLworKwkJYXJnc3RyW3grK10gPSAnQyc7IC8qIHN1cHBvcnQgY2hlY2tzdW0gc2VlZCBvcmRlciBmaXggKi8KKyAJfQorIAorIAlpZiAoeCA+PSAoaW50KXNpemVvZiBhcmdzdHIpIHsgLyogTm90IHBvc3NpYmxlLi4uICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWYyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiRmlsZSBzeW5jaHJvbml6YXRpb24gdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2J1Z3ppbGxhLmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworIyBHUEx2MisgKDw8IDMuMC4wKSwgR1BMdjMrICg+PSAzLjAuMCkKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKKyMgbmVlZHMgdG8gYWRkIGFjbCBhbmQgYXR0cgorREVQRU5EUyA9ICJwb3B0IgorCitTUkNfVVJJID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvZnRwL3JzeW5jL3NyYy9yc3luYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnN5bmNkLmNvbmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yc3luY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfQorfQorCitFWFRSQV9PRU1BS0U9J1NUUklQPSIiJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTRjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJGaWxlIHN5bmNocm9uaXphdGlvbiB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvYnVnemlsbGEuaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCisjIG5lZWRzIHRvIGFkZCBhY2wgYW5kIGF0dHIKK0RFUEVORFMgPSAicG9wdCIKKworU1JDX1VSSSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2Z0cC9yc3luYy9zcmMvcnN5bmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yc3luY2QuY29uZiIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5NmQ4ZDg4MzFkYmNhMTc5MTAwOTRlNTZkY2I1OTQyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhNDM3MzAxYmVjZDg5MGU3MzMwMGJjNjlhMzkxODlmZjE1NjRiYWE3NjE5NDhmZjE0OWIzZGQ3YmRlNjMzZjkiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yc3luY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfQorfQorCitFWFRSQV9PRU1BS0U9J1NUUklQPSIiJworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZkNWE5ZDRjNGQzYWYyNWNkNjhmZDgzZThhOGNiMDljIgorCitQUiA9ICJyNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzRjZGRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKK3JlcXVpcmUgcnN5bmMuaW5jCisKKworU1JDX1VSSSArPSAiZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzYmQ2Njc2ZjBiNDA0MzI2ZWVlMmQ2M2JlM2NkY2ZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkZTQzNjRmY2Y1ZmU0MmYzYmRiNTE0NDE3ZjFjNDBkMTBiYmNhODk2YWJlN2U3ZjJjNTgxYzZlYTA4YTI2MjEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJhY2wgYXR0ciIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wtc3VwcG9ydCwtLWRpc2FibGUtYWNsLXN1cHBvcnQsYWNsLCIKK1BBQ0tBR0VDT05GSUdbYXR0cl0gPSAiLS1lbmFibGUteGF0dHItc3VwcG9ydCwtLWRpc2FibGUteGF0dHItc3VwcG9ydCxhdHRyLCIKKworIyByc3luYyAzLjAgdXNlcyBjb25maWd1cmUuc2ggaW5zdGVhZCBvZiBjb25maWd1cmUsIGFuZAorIyBtYWtlZmlsZSBjaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBjb25maWd1cmUuc2gKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2NvbmZpZ3VyZSAke1N9L2NvbmZpZ3VyZS5zaAorCWNwIC1mICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCisKKwkjIEJ5IGRlZmF1bHQsIGlmIGNyb3NzY29tcGlsaW5nLCByc3luYyBkaXNhYmxlcyBhIG51bWJlciBvZgorCSMgY2FwYWJpbGl0aWVzLCBoYXJkbGlua2luZyBzeW1saW5rcyBhbmQgc3BlY2lhbCBmaWxlcyAoaS5lLiBkZXZpY2VzKQorCWV4cG9ydCByc3luY19jdl9jYW5faGFyZGxpbmtfc3BlY2lhbD15ZXMKKwlleHBvcnQgcnN5bmNfY3ZfY2FuX2hhcmRsaW5rX3N5bWxpbms9eWVzCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCWNwIC1mICR7U30vY29uZmlndXJlICR7U30vY29uZmlndXJlLnNoCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWE3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYwpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkFuIGludGVycHJldGVyIG9mIG9iamVjdC1vcmllbnRlZCBzY3JpcHRpbmcgbGFuZ3VhZ2UiCitERVNDUklQVElPTiA9ICJSdWJ5IGlzIGFuIGludGVycHJldGVkIHNjcmlwdGluZyBsYW5ndWFnZSBmb3IgcXVpY2sgXAorYW5kIGVhc3kgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nLiBJdCBoYXMgbWFueSBmZWF0dXJlcyB0byBwcm9jZXNzIFwKK3RleHQgZmlsZXMgYW5kIHRvIGRvIHN5c3RlbSBtYW5hZ2VtZW50IHRhc2tzIChhcyBpbiBQZXJsKS4gXAorSXQgaXMgc2ltcGxlLCBzdHJhaWdodC1mb3J3YXJkLCBhbmQgZXh0ZW5zaWJsZS4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ydWJ5LWxhbmcub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwvcnVieSIKK0xJQ0VOU0UgPSAiUnVieSB8IEJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTgzN2IzMjU5MzUxN2FlNDhiOWMzYjVjODdhNWQyODhjIFwKKyAgICBmaWxlOi8vQlNETDttZDU9MTlhYWY2NWM4OGE0MGI1MDhkMTdhZTRiZTUzOWM0YjVcCisgICAgZmlsZTovL0dQTDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjNcCisgICAgZmlsZTovL0xFR0FMO21kNT1jNDQwYWRiNTc1YmE0ZTZlMjM0NGMyNjMwYjZhNTU4NFwKKyIKKworREVQRU5EUyA9ICJydWJ5LW5hdGl2ZSB6bGliIG9wZW5zc2wgdGNsIGxpYnlhbWwgZGIgZ2RibSByZWFkbGluZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnlhbWwtbmF0aXZlIgorCitTSFJUX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorU1JDX1VSSSA9ICJodHRwOi8vY2FjaGUucnVieS1sYW5nLm9yZy9wdWIvcnVieS8ke1NIUlRfVkVSfS9ydWJ5LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9leHRtay5wYXRjaCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKworIyBUaGlzIHNuaXBwZXQgbGV0cyBjb21waWxlZCBleHRlbnNpb25zIHdoaWNoIHJlbHkgb24gZXh0ZXJuYWwgbGlicmFyaWVzLAorIyBzdWNoIGFzIHpsaWIsIGNvbXBpbGUgcHJvcGVybHkuICBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHdoZW4gZXh0bWsucmIKKyMgcnVucywgaXQgdXNlcyB0aGUgbmF0aXZlIGxpYnJhcmllcyBpbnN0ZWFkIG9mIHRoZSB0YXJnZXQgbGlicmFyaWVzLCBhbmQgc28KKyMgbm9uZSBvZiB0aGUgbGlua2luZyBvcGVyYXRpb25zIHN1Y2NlZWQgLS0gd2hpY2ggbWFrZXMgZXh0Y29uZi5yYiB0aGluaworIyB0aGF0IHRoZSBsaWJyYXJpZXMgYXJlbid0IGF2YWlsYWJsZSBhbmQgaGVuY2UgdGhhdCB0aGUgZXh0ZW5zaW9uIGNhbid0IGJlCisjIGJ1aWx0LgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgInMjJSVUQVJHRVRfQ0ZMQUdTJSUjJFRBUkdFVF9DRkxBR1MjOyBzIyUlVEFSR0VUX0xERkxBR1MlJSMkVEFSR0VUX0xERkxBR1MjIiAke1N9L2NvbW1vbi5taworICAgIHJtIC1yZiAke1N9L3J1YnkvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjY4NDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC1ydSBydWJ5LTEuOC43LXAyNDgub3JpZy9leHQvZXh0bWsucmIgcnVieS0xLjguNy1wMjQ4L2V4dC9leHRtay5yYgorLS0tIHJ1YnktMS44LjctcDI0OC5vcmlnL2V4dC9leHRtay5yYgkyMDA5LTEyLTI0IDAzOjAxOjU4LjAwMDAwMDAwMCAtMDYwMAorKysrIHJ1YnktMS44LjctcDI0OC9leHQvZXh0bWsucmIJMjAxMC0wMi0xMiAxNTo1NToyNy4zNzAwNjE1NTggLTA2MDAKK0BAIC0zNTQsOCArMzU0LDggQEAKKyAgICRydWJ5ID0gJyQodG9wZGlyKS9taW5pcnVieScgKyBFWEVFWFQKKyBlbmQKKyAkcnVieSA8PCAiIC1JJyQodG9wZGlyKSciCisrJHJ1YnkgPDwgIiAtSSckKHRvcF9zcmNkaXIpL2xpYiciCisgdW5sZXNzIENST1NTX0NPTVBJTElORworLSAgJHJ1YnkgPDwgIiAtSSckKHRvcF9zcmNkaXIpL2xpYiciCisgICAkcnVieSA8PCAiIC1JJyQoZXh0b3V0KS8kKGFyY2gpJyAtSSckKGV4dG91dCkvY29tbW9uJyIgaWYgJGV4dG91dAorICAgJHJ1YnkgPDwgIiAtSS4vLSAtSSckKHRvcF9zcmNkaXIpL2V4dCcgLXJwdXJlbGliLnJiIgorICAgRU5WWyJSVUJZTElCIl0gPSAiLSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Yzk0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCkBAIC0wLDAgKzEsNDIgQEAKK3JlcXVpcmUgcnVieS5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjMyNmU5OWRkYzc1MzgxYzdiNTBjODVmNzA4OWYzMjYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmZmMwZjMxN2U0MjllNmIyOWQ0YTk4YWM1MjFjM2NlNjU0ODFiZmQyMmE4Y2Y4NDVmYTAyYTdiMTEzZDliNDQiCisKKyMgaXQncyB1bmtub3duIHRvIGNvbmZpZ3VyZSBzY3JpcHQsIGJ1dCB0aGVuIHBhc3NlZCB0byBleHRjb25mLnJiCisjIG1heWJlIGl0J3Mgbm90IHJlYWxseSBuZWVkZWQgYXMgd2UncmUgaGFyZGNvZGluZyB0aGUgcmVzdWx0IHdpdGgKKyMgMDAwMS1zb2NrZXQtZXh0Y29uZi1oYXJkY29kZS13aWRlLWdldGFkZHItaW5mby10ZXN0LW91dGNvLnBhdGNoCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gIi0td2l0aC12YWxncmluZD15ZXMsIC0td2l0aC12YWxncmluZD1ubywgdmFsZ3JpbmQiCitQQUNLQUdFQ09ORklHW2dwbV0gPSAiLS13aXRoLWdtcD15ZXMsIC0td2l0aC1nbXA9bm8sIGdtcCIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLC0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8sIgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0tZGlzYWJsZS12ZXJzaW9uZWQtcGF0aHMgXAorICAgIC0tZGlzYWJsZS1ycGF0aCBcCisgICAgLS1kaXNhYmxlLWR0cmFjZSBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1sb2FkLXJlbGF0aXZlIFwKKyIKKworRVhUUkFfT0VNQUtFID0gIiBcCisgICAgTElCUlVCWUFSRz0nLWxydWJ5LXN0YXRpYycgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9ydWJ5Z2VtcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9yaSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnVieS8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ydWJ5LyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnVieS8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnVieS8qLyovKi8qLy5kZWJ1ZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNhOGUxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cwpAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IDIwMDcgT3BlbmVkaGFuZCBMdGQuCisjCisjIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisjCisKKyMgVGhlIGZvbGxvd2luZyBzY3JpcHQgd2lsbCBydW4gYWxsIHRoZSBzY3JpcHRsZXRzIGZvdW5kIGluICNTWVNDT05GRElSIy9kZWItcG9zdGluc3RzLAorIyAjU1lTQ09ORkRJUiMvaXBrLXBvc3RpbnN0cyBvciAjU1lTQ09ORkRJUiMvcnBtLXBvc2luc3RzLgorCisjIHRoZSBvcmRlciBvZiB0aGlzIGxpc3QgaXMgaW1wb3J0YW50LCBkbyBub3QgY2hhbmdlIQorYmFja2VuZF9saXN0PSJycG0gZGViIGlwayIKKworcG1faW5zdGFsbGVkPWZhbHNlCisKK2ZvciBwbSBpbiAkYmFja2VuZF9saXN0OyBkbworCXBpX2Rpcj0iI1NZU0NPTkZESVIjLyRwbS1wb3N0aW5zdHMiCisKKwlbIC1kICRwaV9kaXIgXSAmJiBicmVhaworCisJY2FzZSAkcG0gaW4KKwkJImRlYiIpCisJCQlpZiBbIC1zICIjTE9DQUxTVEFURURJUiMvbGliL2Rwa2cvc3RhdHVzIiBdOyB0aGVuCisJCQkJcG1faW5zdGFsbGVkPXRydWUKKwkJCQlicmVhaworCQkJZmkKKwkJCTs7CisKKwkJImlwayIpCisJCQlpZiBbIC1zICIvdmFyL2xpYi9vcGtnL3N0YXR1cyIgXTsgdGhlbgorCQkJCXBtX2luc3RhbGxlZD10cnVlCisJCQkJYnJlYWsKKwkJCWZpCisJCQk7OworCWVzYWMKK2RvbmUKKworcmVtb3ZlX3Jjc2RfbGluayAoKSB7CisJaWYgWyAtbiAiYHdoaWNoIHVwZGF0ZS1yYy5kYCIgXTsgdGhlbgorCQl1cGRhdGUtcmMuZCAtZiBydW4tcG9zdGluc3RzIHJlbW92ZQorCWZpCit9CisKK2lmIFsgLXogIiRwaV9kaXIiIF07IHRoZW4KKwlyZW1vdmVfcmNzZF9saW5rCisJZXhpdCAwCitmaQorCitbIC1lICNTWVNDT05GRElSIy9kZWZhdWx0L3Bvc3RpbnN0IF0gJiYgLiAjU1lTQ09ORkRJUiMvZGVmYXVsdC9wb3N0aW5zdAorCitpZiBbICIkUE9TVElOU1RfTE9HR0lORyIgPSAiMSIgXTsgdGhlbgorCXJtIC1mICRMT0dGSUxFCisJYXBwZW5kX2xvZz0iPj4kTE9HRklMRSAyPiYxIgorZmkKKworZXhlY19wb3N0aW5zdF9zY3JpcHRsZXRzKCkgeworCWZvciBpIGluIGBscyAkcGlfZGlyYDsgZG8KKwkJaT0kcGlfZGlyLyRpCisJCWVjaG8gIlJ1bm5pbmcgcG9zdGluc3QgJGkuLi4iCisJCVsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdICYmIGV2YWwgZWNobyAiUnVubmluZyBwb3N0aW5zdCAkaS4uLiIgJGFwcGVuZF9sb2cKKwkJaWYgWyAteCAkaSBdOyB0aGVuCisJCQlldmFsIHNoIC1jICRpICRhcHBlbmRfbG9nCisJCQlybSAkaQorCQllbHNlCisJCQllY2hvICJFUlJPUjogcG9zdGluc3QgJGkgZmFpbGVkLiIKKwkJCVsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdICYmIGV2YWwgZWNobyAiRVJST1I6IHBvc3RpbnN0ICRpIGZhaWxlZC4iICRhcHBlbmRfbG9nCisJCQlyZW1vdmVfcGlfZGlyPTAKKwkJZmkKKwlkb25lCit9CisKK3JlbW92ZV9waV9kaXI9MQoraWYgJHBtX2luc3RhbGxlZDsgdGhlbgorCWNhc2UgJHBtIGluCisJCSJpcGsiKQorCQkJZXZhbCBvcGtnIGNvbmZpZ3VyZSAkYXBwZW5kX2xvZworCQkJOzsKKworCQkiZGViIikKKwkJCWV2YWwgZHBrZyAtLWNvbmZpZ3VyZSAtYSAkYXBwZW5kX2xvZworCQkJOzsKKwllc2FjCitlbHNlCisJZXhlY19wb3N0aW5zdF9zY3JpcHRsZXRzCitmaQorCisjIHNpbmNlIGFsbCBwb3N0aW5zdGFsbHMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCByZW1vdmUgdGhlIHBvc3RpbnN0YWxscyBkaXJlY3RvcnkKKyMgYW5kIHRoZSByY1MuZCBsaW5rCitpZiBbICRyZW1vdmVfcGlfZGlyID0gMSBdOyB0aGVuCisJcm0gLXJmICRwaV9kaXIKKwlyZW1vdmVfcmNzZF9saW5rCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLmluaXQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNhMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLmluaXQKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworcnVuLXBvc3RpbnN0cwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWEwNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UKQEAgLTAsMCArMSwxNiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SdW4gcGVuZGluZyBwb3N0aW5zdHMKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorQ29uZGl0aW9uUGF0aEV4aXN0c0dsb2I9I1NZU0NPTkZESVIjLyotcG9zdGluc3RzCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFeGVjU3RhcnQ9I1NCSU5ESVIjL3J1bi1wb3N0aW5zdHMKK0V4ZWNTdGFydFBvc3Q9I0JBU0VfQklORElSIy9zeXN0ZW1jdGwgZGlzYWJsZSBydW4tcG9zdGluc3RzLnNlcnZpY2UKK1JlbWFpbkFmdGVyRXhpdD1ObworVGltZW91dFNlYz0wCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0c18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjOTRlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHNfMS4wLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUnVucyBwb3N0aW5zdGFsbCBzY3JpcHRzIG9uIGZpcnN0IGJvb3Qgb2YgdGhlIHRhcmdldCBkZXZpY2UiCitTRUNUSU9OID0gImRldmVsIgorUFIgPSAicjkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9ydW4tcG9zdGluc3RzIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wb3N0aW5zdHMuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcG9zdGluc3RzLnNlcnZpY2UiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoIHN5c3RlbWQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gInJ1bi1wb3N0aW5zdHMiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSBTIC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJydW4tcG9zdGluc3RzLnNlcnZpY2UiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnVuLXBvc3RpbnN0cyAke0R9JHtzYmluZGlyfS8KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3J1bi1wb3N0aW5zdHMuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcnVuLXBvc3RpbnN0cworCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ydW4tcG9zdGluc3RzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisKKwlzZWQgLWkgLWUgJ3M6I1NZU0NPTkZESVIjOiR7c3lzY29uZmRpcn06ZycgXAorICAgICAgICAgICAgICAgLWUgJ3M6I1NCSU5ESVIjOiR7c2JpbmRpcn06ZycgXAorICAgICAgICAgICAgICAgLWUgJ3M6I0JBU0VfQklORElSIzoke2Jhc2VfYmluZGlyfTpnJyBcCisgICAgICAgICAgICAgICAtZSAnczojTE9DQUxTVEFURURJUiM6JHtsb2NhbHN0YXRlZGlyfTpnJyBcCisgICAgICAgICAgICAgICAke0R9JHtzYmluZGlyfS9ydW4tcG9zdGluc3RzIFwKKyAgICAgICAgICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3J1bi1wb3N0aW5zdHMuc2VydmljZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2F1dG9oZWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2F1dG9oZWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzliMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvYXV0b2hlbGwucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorUGF0Y2ggb2J0YWluZWQgZnJvbSBPcGVuRW1iZWRkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9NYWtlZmlsZS5hbX5hdXRvaGVsbC5wYXRjaAkyMDAxLTAxLTMwIDE1OjQyOjIxLjAwMDAwMDAwMCArMDEwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9NYWtlZmlsZS5hbQkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNiArMSw1IEBACisgcHJpbWl0aXZlX3NjcmlwdHMgPSBzZ21sd2hpY2gKKyAKKy1iaW5kaXIgPSAkKHByZWZpeCkvYmluCisgYmluX1NDUklQVFMgPSBpbnN0YWxsLWNhdGFsb2cgJChwcmltaXRpdmVfc2NyaXB0cykKKyAKKyBFWFRSQV9ESVNUID0gIGluc3RhbGwtY2F0YWxvZy5pbiAkKHByaW1pdGl2ZV9zY3JpcHRzKQorLS0tIC9kZXYvbnVsbAkyMDAzLTA5LTIzIDE5OjU5OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9zZ21sd2hpY2guaW4JMjAwNC0wNi0xNyAxMTo1MToxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNyBAQAorKyMhL2Jpbi9zaAorKyMgTG9jYXRpb24gb2YgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlIGZvciBjb25zaXN0ZW5jeSB3aXRoIG5vbi1MU0IgcGxhdGZvcm1zCisrIyBTZW5kIGFueSBjb21tZW50cyB0byBFcmljIEJpc2Nob2ZmIDxlcmljQGNhbGRlcmEuZGU+CisrIyBUaGlzIHByb2dyYW0gaXMgdW5kZXIgR1BMIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCisrCisrZWNobyAiQHN5c2NvbmZkaXJAL3NnbWwvc2dtbC5jb25mIgorKyMgU2ltcGxlLCBpc24ndCBpdD8gOy0pCistLS0gL2Rldi9udWxsCTIwMDMtMDktMjMgMTk6NTk6MjIuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvY29uZmlnL3NnbWwuY29uZi5pbgkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyIEBACisrU0dNTF9CQVNFX0RJUj1AZGF0YWRpckAvc2dtbAorK1NHTUxfQ0FUQUxPR1NfRElSPUBzeXNjb25mZGlyQC9zZ21sCistLS0gc2dtbC1jb21tb24tMC42LjMvY29uZmlndXJlLmlufmF1dG9oZWxsLnBhdGNoCTIwMDEtMDUtMjUgMTg6NDA6NTQuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvY29uZmlndXJlLmluCTIwMDQtMDYtMTcgMTE6NTM6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMywxMSArMyw2IEBACisgCisgQU1fSU5JVF9BVVRPTUFLRShzZ21sLWNvbW1vbiwgMC42LjMpCisgCistZG9jZGlyPSckKHByZWZpeCkvZG9jJworLUFDX1NVQlNUKGRvY2RpcikKKy0KKy1kbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKy0KKyBkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCisgCisgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQEAgLTE4LDYgKzEzLDUgQEAKKyAKKyBBQ19PVVRQVVQoTWFrZWZpbGUgXAorICAgICAgICAgICBiaW4vTWFrZWZpbGUgYmluL2luc3RhbGwtY2F0YWxvZyBcCistICAgICAgICAgIGNvbmZpZy9NYWtlZmlsZSBcCistICAgICAgICAgIGRvYy9NYWtlZmlsZSBkb2MvSFRNTC9NYWtlZmlsZSBkb2MvbWFuL01ha2VmaWxlIGRvYy9yZWZlbnRyeS9NYWtlZmlsZSBcCisrICAgICAgICAgIGNvbmZpZy9NYWtlZmlsZSBjb25maWcvc2dtbC5jb25mIGJpbi9zZ21sd2hpY2ggXAorICAgICAgICAgICBzZ21sLWlzby1lbnRpdGllcy9NYWtlZmlsZSB4bWwtaXNvLWVudGl0aWVzL01ha2VmaWxlKQorCistLS0gc2dtbC1jb21tb24tMC42LjMvTWFrZWZpbGUuYW1+bm8tZG9jcwkyMDAxLTA1LTI1IDE4OjIyOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL01ha2VmaWxlLmFtCTIwMDQtMDYtMTcgMTE6NDk6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gYmluIGNvbmZpZyBkb2Mgc2dtbC1pc28tZW50aXRpZXMgeG1sLWlzby1lbnRpdGllcworK1NVQkRJUlMgPSBiaW4gY29uZmlnIHNnbWwtaXNvLWVudGl0aWVzIHhtbC1pc28tZW50aXRpZXMKKyAKKyBzZ21sY29kaXIgPSAkKHByZWZpeCkvc2hhcmUvc2dtbAorIHNnbWxjb19EQVRBID0geG1sLmRjbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2xpY2Vuc2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGIzZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2xpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVGhlIENPUFlJTkcgZmlsZSBzZ21sLWNvbW1vbiBzaGlwcyB3aXRoIGlzIGp1c3QgYSBzeW1saW5rIHRvCisvdXNyL3NoYXJlL2F1dG9tYWtlL0NPUFlJTkcsIHdoaWNoIG1lYW5zIHdlIGNhbid0IHZlcmlmeSBpdAordXNpbmcgb3VyIG5vcm1hbCBtZWFucy4gV2Ugd29ya2Fyb3VuZCB0aGlzIGJ5IHVzaW5nIHRoaXMgcGF0Y2gKK3RvIGNyZWF0ZSBvdXIgb3duIGxpY2Vuc2UgZmlsZS4gCisKK1Vwc3RyZWFtIHdhcyBub3RpZmllZCBhYm91dCB0aGlzIG9uIDIwMTEtMDEtMjQuIFdoZW4gdXBncmFkaW5nCit0aGlzIHJlY2lwZSwgdGhpcyBzaG91bGQgYmUgZml4ZWQgYW5kIHlvdSBzaG91bGQgcmVtb3ZlIHRoaXMKK3BhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBzZ21sLWNvbW1vbi0wLjYuMy5vcmlnL0xJQ0VOU0UtR1BMdjIgc2dtbC1jb21tb24tMC42LjMvTElDRU5TRS1HUEx2MgorLS0tIHNnbWwtY29tbW9uLTAuNi4zLm9yaWcvTElDRU5TRS1HUEx2MgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL0xJQ0VOU0UtR1BMdjIJMjAxMS0wMS0yOCAxNzowNToxNy4yOTk1MjgwMDEgLTA4MDAKK0BAIC0wLDAgKzEsMTIgQEAKKytDb3B5cmlnaHQgKEMpIDE5OTcgQ2hyaXN0aWFuIFNjaHdhcnogPHNjaHdhcnpAZGViaWFuLm9yZz4uCisrQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgQXJkbyB2YW4gUmFuZ2Vscm9vaWogPGFyZG9AZGViaWFuLm9yZz4KKysKKytUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyt0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisrdmVyc2lvbi4KKysKKytUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCB3aXRob3V0CisrYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgbWVyY2hhbnRhYmlsaXR5IG9yCisrZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NzUzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiQmFzZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBTR01MIGFuZCBYTUwiCitERVNDUklQVElPTiA9ICJUaGUgc2dtbC1jb21tb24gcGFja2FnZSBnYXRoZXJzIHZlcnkgYmFzaWMgXAorc3R1ZmYgbmVjZXNzYXJ5IHRvIHdvcmsgd2l0aCBTR01MIGFuZCBYTUwsIHN1Y2ggYXMgeG1sLmRjbCwgXAorYSBTR01MIGRlY2xhcmF0aW9uIG9mIFhNTDsgaXNvLWVudGl0aWVzLCBhIGxpc3Qgb2YgdGhlIGJhc2ljIFwKK1NHTUwgSVNPIGVudGl0aWVzOyBhbmQgaW5zdGFsbC1jYXRhbG9nLCBhIHNjcmlwdCB1c2VkIHRvIFwKK2FkZCBlbnRyaWVzIHRvIChvciByZW1vdmUgZW50cmllcyBmcm9tKSBjZW50cmFsaXplZCBjYXRhbG9ncyBcCit3aG9zZSBlbnRyaWVzIGFyZSBwb2ludGVycyB0byBTR01MIG9wZW4gY2F0YWxvZ3MsIFwKK2FzIGRlZmluZWQgYnkgT0FTSVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9kb2Nib29rLXRvb2xzLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorIyBTZWUgdGhlIGNvbW1lbnRzIGluIGxpY2Vuc2UucGF0Y2ggd2hlbiB1cGdyYWRpbmcgdGhpcyByZWNpcGUuCisjIFRoaXMgaXMgaW50ZWRlZCB0byBiZSBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1HUEx2MjttZDU9YWI4YTUwYWJlODZkZmM4NTllMTQ4YmFhZTA0M2M4OWIiCitTRUNUSU9OID0gImJhc2UiCisKK1BSID0gInIxIgorCityZXF1aXJlIHNnbWwtY29tbW9uXyR7UFZ9LmJiCitpbmhlcml0IG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vc2dtbC1jb21tb24tJHtQVn0iCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAic2dtbF9jb21tb25fbmF0aXZlX21hbmdsZSIKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gInNnbWxfY29tbW9uX3NzdGF0ZV9wb3N0aW5zdCIKK0NMRUFORlVOQ1MgKz0gInNnbWxfY29tbW9uX3NzdGF0ZV9jbGVhbiIKKworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIGluc3RhbGwtY2F0YWxvZyBzY3JpcHQgY29udGFpbnMgaGFyZC1jb2RlZCByZWZlcmVuY2VzIHRvCisJIyB7c3lzY29uZmRpcn0uIENoYW5nZSBpdCB0byAke0R9JHtzeXNjb25mZGlyfS4KKwlzZWQgLWkgLWUgInN8JHtzeXNjb25mZGlyfS9zZ21sfCR7RH0ke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtEfSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cKKworCSR7RH0ke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1hZGQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke0R9JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nCisKKwkjIFRoZSBzZ21sLWRvY2Jvb2suY2F0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgYnkgc3N0YXRlX3Bvc3RpbnN0CisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0Cit9CisKK3NnbWxfY29tbW9uX25hdGl2ZV9tYW5nbGUgKCkgeworCSMgUmV2ZXJ0IGJhY2sgdG8gJHtzeXNjb25mZGlyfSBwYXRoIGluIGluc3RhbGwtY2F0YWxvZworCXNlZCAtaSAtZSAic3wke0R9JHtzeXNjb25mZGlyfS9zZ21sfCR7c3lzY29uZmRpcn0vc2dtbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSfS9pbnN0YWxsLWNhdGFsb2cKKwkjIENoYW5nZSBwYXRoIGZyb20gJHtEfSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyB0byAke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cgaW4gc2dtbC1lbnQuY2F0CisJc2VkIC1pIC1lICJzfCR7RH0ke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2d8JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwkjIFJlbW92ZSAke0R9IHBhdGggZnJvbSBjYXRhbG9nIGZpbGUgY3JlYXRlZCBieSBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0CisJc2VkIC1pIC1lICJzfCR7RH18fGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nCit9CisKK3NnbWxfY29tbW9uX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nIC0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0ICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwkJaWYgWyAtZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBdOyB0aGVuCisJCQlmb3IgY2F0YWxvZyBpbiBgYXdrICd7cHJpbnQgJDJ9JyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJha2A7IGRvCisJCQkJaWYgWyAhIGBncmVwICRjYXRhbG9nICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IDE+IC9kZXYvbnVsbCAyPiYxYCBdOyB0aGVuCisJCQkJCSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cgXAorCQkJCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgJGNhdGFsb2cKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCWZpCit9CisKK3NnbWxfY29tbW9uX3NzdGF0ZV9jbGVhbiAoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorCWlmIFsgLWYgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXTsgdGhlbgorCQlzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZW50LmNhdC9kJyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb25fMC42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb25fMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5ODY3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbl8wLjYuMy5iYgpAQCAtMCwwICsxLDY4IEBACitTVU1NQVJZID0gIkJhc2UgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggU0dNTCBhbmQgWE1MIgorREVTQ1JJUFRJT04gPSAiVGhlIHNnbWwtY29tbW9uIHBhY2thZ2UgZ2F0aGVycyB2ZXJ5IGJhc2ljIFwKK3N0dWZmIG5lY2Vzc2FyeSB0byB3b3JrIHdpdGggU0dNTCBhbmQgWE1MLCBzdWNoIGFzIHhtbC5kY2wsIFwKK2EgU0dNTCBkZWNsYXJhdGlvbiBvZiBYTUw7IGlzby1lbnRpdGllcywgYSBsaXN0IG9mIHRoZSBiYXNpYyBcCitTR01MIElTTyBlbnRpdGllczsgYW5kIGluc3RhbGwtY2F0YWxvZywgYSBzY3JpcHQgdXNlZCB0byBcCithZGQgZW50cmllcyB0byAob3IgcmVtb3ZlIGVudHJpZXMgZnJvbSkgY2VudHJhbGl6ZWQgY2F0YWxvZ3MgXAord2hvc2UgZW50cmllcyBhcmUgcG9pbnRlcnMgdG8gU0dNTCBvcGVuIGNhdGFsb2dzLCBcCithcyBkZWZpbmVkIGJ5IE9BU0lTLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG9jYm9vay10b29scy8iCitMSUNFTlNFID0gIkdQTHYyKyIKKyMgU2VlIHRoZSBjb21tZW50cyBpbiBsaWNlbnNlLnBhdGNoIHdoZW4gdXBncmFkaW5nIHRoaXMgcmVjaXBlLgorIyBUaGlzIGlzIGludGVkZWQgdG8gYmUgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC4KK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtR1BMdjI7bWQ1PWFiOGE1MGFiZTg2ZGZjODU5ZTE0OGJhYWUwNDNjODliIgorU0VDVElPTiA9ICJiYXNlIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmdHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vcHViL2RvY2Jvb2stdG9vbHMvbmV3LXRyaWFscy9TT1VSQ0VTL3NnbWwtY29tbW9uLSR7UFZ9LnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvaGVsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWNlbnNlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTAzYzk4MjhmMjQ4MjBkZjg2ZTU1ZTc4NjJlMjg5NzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RjNDE4YzFkMzYxMTIzZmZjNWU0NWQ2MWYxYjk3MjU3OTQwYThlYjM1ZDBiZmJiYzQ5MzM4MWNjNWIxZjk1OSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJIyBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0IGNvbnRhaW5zIGhhcmRjb2RlZCByZWZlcmVuY2VzIHRvIC9ldGMvc2dtbAorCXNlZCAtaSAtZSAnc3xcKFsgIl1cK1wpL2V0Yy9zZ21sfFwxJHtzeXNjb25mZGlyfS9zZ21sfGcnIGJpbi9pbnN0YWxsLWNhdGFsb2cKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vc2dtbCIKKworcGtnX3Bvc3RpbnN0XyR7UE59KCkgeworICAgIGlmIFsgIngkRCIgPSAieCIgXTsgdGhlbgorCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cKKworCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorICAgIGVsc2UKKwlpZiAhIGdyZXAgLXEgJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nICREJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdDsgdGhlbgorCSAgICBlY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0CisJZmkKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nOyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZworCWZpCisKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0OyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorCWZpCisJaWYgISBncmVwIC1xICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0ICREJHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2c7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZworCWZpCisgICAgZmkKK30KKworcGtnX3Bvc3RybV8ke1BOfSgpIHsKKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLXJlbW92ZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IFwKKwkJJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nCisKKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLXJlbW92ZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sc3BsL3NnbWxzcGwtbmF0aXZlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sc3BsL3NnbWxzcGwtbmF0aXZlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM0NjBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWxzcGwvc2dtbHNwbC1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgcG9zdC1wcm9jZXNzb3IgZm9yIFNHTUxTIGFuZCBOU0dNTFMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZ2l0cGFuL1NHTUxTcG0iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZ2l0cGFuL1NHTUxTcG0gXAorICAgICAgICAgICIKKworU1JDUkVWID0gIjcxNTk1YjliNWUzNmJmYzAwMDQ2OTk1ZTA1ODkyNmJkMjc3OTNmZWYiCisKK1BWID0gIjEuMStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBuYXRpdmUgY3BhbgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBsbiAtcyBzZ21sc3BsLnBsICR7RH0ke2JpbmRpcn0vc2dtbHNwbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3YjI4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIKQEAgLTAsMCArMSwzNyBAQAorIyBOb3RlLCB3ZSBjYW4gcHJvYmFibHkgcmVtb3ZlIHRoZSBsem1hIG9wdGlvbiBhcyBpdCBoYXMgYmUgcmVwbGFjZWQgd2l0aCB4eiwKKyMgYW5kIEkgZG9uJ3QgdGhpbmsgdGhlIGtlcm5lbCBzdXBwb3J0cyBpdCBhbnkgbW9yZS4KK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmlwdWxhdGluZyBTcXVhc2hGUyBmaWxlc3lzdGVtcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMLTIgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLy4uLy4uLzd6Qy50eHQ7YmVnaW5saW5lPTEyO2VuZGxpbmU9MTY7bWQ1PTIwNTZjZDZkOTE5ZWJjMzgwNzYwMjE0M2M3NDQ5YTdjIFwKKyIKK0RFUEVORFMgPSAiYXR0ciB6bGliIHh6IGx6byBsejQiCisKK1BWID0gIjQuMytnaXRyJHtTUkNQVn0iCitTUkNSRVYgPSAiOWMxZGI2ZDEzYTUxYTJlMDA5ZjAwMjdlZjMzNmNlMDM2MjRlYWMwZCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9wbG91Z2hlci9zcXVhc2hmcy10b29scy5naXQ7cHJvdG9jb2w9aHR0cHMgXAorICAgICAgICAgICBodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9zZXZlbnppcC9sem1hNDY1LnRhci5iejI7bmFtZT1sem1hIFwKKyIKK1NSQ19VUklbbHptYS5tZDVzdW1dID0gIjI5ZDVmZmQwM2E1YTNlNTFhZWY2YTc0ZTllYWZiNzU5IgorU1JDX1VSSVtsem1hLnNoYTI1NnN1bV0gPSAiYzkzNWZkMDRkZDhlMGU4YzY4OGEzMDc4ZjM2NzVkNjk5Njc5YTkwYmU4MWMxMjY4NjgzN2UwODgwYWEwZmExZSIKKworUyA9ICIke1dPUktESVJ9L2dpdC9zcXVhc2hmcy10b29scyIKKworIyBFWFRSQV9PRU1BS0UgaXMgdHlwaWNhbGx5OiAtZSBNQUtFRkxBR1M9CisjIHRoZSAtZSBjYXVzZXMgcHJvYmxlbXMgYXMgQ0ZMQUdTIGlzIG1vZGlmaWVkIGluIHRoZSBNYWtlZmlsZSwgc28KKyMgd2UgcmVkZWZpbmUgRVhUUkFfT0VNQUtFIGhlcmUKK0VYVFJBX09FTUFLRSA9ICJNQUtFRkxBR1M9IExaTUFfU1VQUE9SVD0xIExaTUFfRElSPS4uLy4uIFhaX1NVUFBPUlQ9MSBMWk9fU1VQUE9SVD0xIExaNF9TVVBQT1JUPTEiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBta3NxdWFzaGZzIHVuc3F1YXNoZnMKK30KK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgbWtzcXVhc2hmcyAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgdW5zcXVhc2hmcyAke0R9JHtzYmluZGlyfS8KK30KKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTM5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb20gZjg1ODU0MTMxYzgyNjVmMmViNTljNzE0ZGNlYTVjNGIzZGMwOWJlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDE0OjI5OjM3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCisKK0l0IGlzIG1pc3NpbmcgZnJvbSB0aGUgdGFyYmFsbCwgYnV0IGl0IGlzIHByZXNlbnQgaW4gZ2l0IGZvciB2NC4xMAorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW4ua29vaUBsaW5hcm8ub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaAorCitkaWZmIC0tZ2l0IGEvbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaCBiL2xpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45YTVlMzNlCistLS0gL2Rldi9udWxsCisrKysgYi9saW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCitAQCAtMCwwICsxLDIgQEAKKytleHRlcm4gdWludDY0X3QgKmNvbnN0IGFhcmNoNjRfc3BfcHRyOworK2V4dGVybiB1aW50MzJfdCAqY29uc3QgYXJtX3NwX3B0cjsKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTM0NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdHJhY2UvY29kZS9jaS8zNDYwZGM0ODZkMzMzMjMxOTk4ZGUwZjE5OTE4MjA0YWFjZWU5YWUzCisKK0V4cGVjdGVkIHRvIGJlIHJlbGVhc2VkIG9mZmljaWFsbHkgYXMgcGFydCBvZiBzdHJhY2UgNC4xMQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorCitGcm9tIDM0NjBkYzQ4NmQzMzMyMzE5OThkZTBmMTk5MTgyMDRhYWNlZTlhZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogU2F0LCAyOCBNYXIgMjAxNSAxODo0MDoxMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIDxsaW51eC9pb2N0bC5oPiBmb3IgX0lPQ18qIG1hY3JvcworCitGaXggYSBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggbXVzbCBsaWJjLgorCisqIGV2ZGV2LmM6IEluY2x1ZGUgPGxpbnV4L2lvY3RsLmg+LgorKiBpb2N0bC5jOiBJbmNsdWRlIDxsaW51eC9pb2N0bC5oPiBpbnN0ZWFkIG9mIDxhc20vaW9jdGwuaD4uCisqIGlvY3Rsc29ydC5jOiBMaWtld2lzZS4KKworUmVwb3J0ZWQtYnk6IERpbWEgS3Jhc25lciA8ZGltYUBkaW1ha3Jhc25lci5jb20+CitBY2tlZC1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorLS0tCisgZXZkZXYuYyAgICAgfCAyICsrCisgaW9jdGwuYyAgICAgfCAyICstCisgaW9jdGxzb3J0LmMgfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ldmRldi5jIGIvZXZkZXYuYworaW5kZXggOWE3NDMwZC4uZTA2ZjljMSAxMDA2NDQKKy0tLSBhL2V2ZGV2LmMKKysrKyBiL2V2ZGV2LmMKK0BAIC0yOCw2ICsyOCw4IEBACisgCisgI2luY2x1ZGUgImRlZnMuaCIKKyAKKysjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKysKKyAjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisgI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisgI2luY2x1ZGUgInhsYXQvZXZkZXZfYWJzLmgiCitkaWZmIC0tZ2l0IGEvaW9jdGwuYyBiL2lvY3RsLmMKK2luZGV4IDQ2ZjgzMzQuLmM2N2QwNDggMTAwNjQ0CistLS0gYS9pb2N0bC5jCisrKysgYi9pb2N0bC5jCitAQCAtMjksNyArMjksNyBAQAorICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCistI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorICNpbmNsdWRlICJ4bGF0L2lvY3RsX2RpcnMuaCIKKyAKKyAjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICitkaWZmIC0tZ2l0IGEvaW9jdGxzb3J0LmMgYi9pb2N0bHNvcnQuYworaW5kZXggMzMzNTU2Yy4uOWMzMTY5MSAxMDA2NDQKKy0tLSBhL2lvY3Rsc29ydC5jCisrKysgYi9pb2N0bHNvcnQuYworQEAgLTMzLDcgKzMzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKysjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyAKKyBzdHJ1Y3QgaW9jdGxlbnQgeworIAljb25zdCBjaGFyICppbmZvOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwNzJmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0cmFjZS9jb2RlL2NpL2QzNGUwMGIyOTM5NDJiMTAxMmRkYzQ5ZWQzYWIzNzlhMzIzMzc2MTEKKworRXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQgb2ZmaWNpYWxseSBhcyBwYXJ0IG9mIHN0cmFjZSA0LjExCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CisKK0Zyb20gZDM0ZTAwYjI5Mzk0MmIxMDEyZGRjNDllZDNhYjM3OWEzMjMzNzYxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitEYXRlOiBTYXQsIDI4IE1hciAyMDE1IDE4OjIxOjA5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgPHN5cy9zdGF0Lmg+IGZvciBTX0kqIG1hY3JvcworCitGaXggYSBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggbXVzbCBsaWJjLgorCisqIG1rbm9kLmM6IEluY2x1ZGUgPHN5cy9zdGF0Lmg+LgorKiBwcmludG1vZGUuYzogTGlrZXdpc2UuCisKK1JlcG9ydGVkLWJ5OiBEaW1hIEtyYXNuZXIgPGRpbWFAZGltYWtyYXNuZXIuY29tPgorQWNrZWQtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KKy0tLQorIG1rbm9kLmMgICAgIHwgMSArCisgcHJpbnRtb2RlLmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWtub2QuYyBiL21rbm9kLmMKK2luZGV4IDA3ZTlhNDUuLjE0NjMyMzIgMTAwNjQ0CistLS0gYS9ta25vZC5jCisrKysgYi9ta25vZC5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpZmRlZiBNQUpPUl9JTl9TWVNNQUNST1MKKyAjIGluY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KK2RpZmYgLS1naXQgYS9wcmludG1vZGUuYyBiL3ByaW50bW9kZS5jCitpbmRleCA0ZGYxYjlmLi5hNzIxOTM2IDEwMDY0NAorLS0tIGEvcHJpbnRtb2RlLmMKKysrKyBiL3ByaW50bW9kZS5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpbmNsdWRlICJ4bGF0L21vZGV0eXBlcy5oIgorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjAzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitzdHJhY2U6IEFkZCBwdGVzdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogR2FicmllbCBCYXJidSA8Z2FicmllbC5iYXJidUBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgfCAgMiArLQorIHRlc3RzL01ha2VmaWxlLmFtIHwgMTggKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU3Mzk1OGMuLjVmMGRmZWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYsNyArNiw3IEBAIEFDX0lOSVQoW3N0cmFjZV0sCisgQUNfQ09ORklHX1NSQ0RJUihbc3RyYWNlLmNdKQorIEFDX0NPTkZJR19BVVhfRElSKFsuXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorLUFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC14eiBuby1kaXN0LWd6aXAgc2lsZW50LXJ1bGVzIHBhcmFsbGVsLXRlc3RzXSkKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QteHogbm8tZGlzdC1nemlwIHNpbGVudC1ydWxlcyBzZXJpYWwtdGVzdHNdKQorIEFNX01BSU5UQUlORVJfTU9ERQorIEFDX0NBTk9OSUNBTF9IT1NUCisgCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZmY1ZTEzNi4uOTg0YmRiNiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEwMSwzICsxMDEsMjEgQEAgRVhUUkFfRElTVCA9IGluaXQuc2ggcnVuLnNoIFwKKyAJICAgICAkKFRFU1RTKQorIAorIENMRUFORklMRVMgPSAkKFRFU1RTOj0udG1wKQorKworK2J1aWxkdGVzdC1URVNUUzogJChjaGVja19QUk9HUkFNUykgJChURVNUUykKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlpbnN0YWxsICQoQlVJTERESVIpL3N0cmFjZSAkKERFU1RESVIpCisrCWluc3RhbGwgIiQoc3JjZGlyKS8uLiIvc3RyYWNlLWxvZy1tZXJnZSAkKERFU1RESVIpCisrCWluc3RhbGwgLWQgJChERVNURElSKS8kKFRFU1RESVIpCisrCWNwICQoQlVJTERESVIpLyQoVEVTVERJUikvTWFrZWZpbGUgJChERVNURElSKS8kKFRFU1RESVIpCisrCXNlZCAtaSAtZSAncy9eTWFrZWZpbGU6L19NYWtlZmlsZTovJyAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJc2VkIC1pIC1lICdzL2Jhc2gvc2gvJyAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJZm9yIGZpbGUgaW4gJChjaGVja19QUk9HUkFNUyk7IGRvIFwKKysJCWluc3RhbGwgJChCVUlMRERJUikvJChURVNURElSKS8kJGZpbGUgJChERVNURElSKS8kKFRFU1RESVIpOyBcCisrCWRvbmUKKysJZm9yIGZpbGUgaW4gJChFWFRSQV9ESVNUKTsgZG8gXAorKwkJaW5zdGFsbCAkKHNyY2RpcikvJCRmaWxlICQoREVTVERJUikvJChURVNURElSKTsgXAorKwkJc2VkIC1pIC1lICdzLyQke3NyY2Rpcj0ufS8uL2cnICQoREVTVERJUikvJChURVNURElSKS8kJGZpbGU7IFwKKysJZG9uZQorKwlmb3IgaSBpbiBuZXQgbmV0LWZkIHNjbV9yaWdodHMtZmQgc2lnYWN0aW9uOyBkbyBzZWQgLWkgLWUgJ3MvJCRzcmNkaXIvLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRpLnRlc3Q7IGRvbmUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvZ2l0LXZlcnNpb24tZ2VuIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvZ2l0LXZlcnNpb24tZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmZWU3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9naXQtdmVyc2lvbi1nZW4KQEAgLTAsMCArMSwyMjUgQEAKKyMhL2Jpbi9zaAorIyBQcmludCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0yMDEyLTEyLTMxLjIzOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIHNjcmlwdCBpcyBkZXJpdmVkIGZyb20gR0lULVZFUlNJT04tR0VOIGZyb20gR0lUOiBodHRwOi8vZ2l0Lm9yLmN6Ly4KKyMgSXQgbWF5IGJlIHJ1biB0d28gd2F5czoKKyMgLSBmcm9tIGEgZ2l0IHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhlICJnaXQgZGVzY3JpYmUiIGNvbW1hbmQgYmVsb3cKKyMgICBwcm9kdWNlcyB1c2VmdWwgb3V0cHV0ICh0aHVzIHJlcXVpcmluZyBhdCBsZWFzdCBvbmUgc2lnbmVkIHRhZykKKyMgLSBmcm9tIGEgbm9uLWdpdC1yZXBvIGRpcmVjdG9yeSBjb250YWluaW5nIGEgLnRhcmJhbGwtdmVyc2lvbiBmaWxlLCB3aGljaAorIyAgIHByZXN1bWVzIHRoaXMgc2NyaXB0IGlzIGludm9rZWQgbGlrZSAiLi9naXQtdmVyc2lvbi1nZW4gLnRhcmJhbGwtdmVyc2lvbiIuCisKKyMgSW4gb3JkZXIgdG8gdXNlIGludHJhLXZlcnNpb24gc3RyaW5ncyBpbiB5b3VyIHByb2plY3QsIHlvdSB3aWxsIG5lZWQgdHdvCisjIHNlcGFyYXRlIGdlbmVyYXRlZCB2ZXJzaW9uIHN0cmluZyBmaWxlczoKKyMKKyMgLnRhcmJhbGwtdmVyc2lvbiAtIHByZXNlbnQgb25seSBpbiBhIGRpc3RyaWJ1dGlvbiB0YXJiYWxsLCBhbmQgbm90IGluCisjICAgYSBjaGVja2VkLW91dCByZXBvc2l0b3J5LiAgQ3JlYXRlZCB3aXRoIGNvbnRlbnRzIHRoYXQgd2VyZSBsZWFybmVkIGF0CisjICAgdGhlIGxhc3QgdGltZSBhdXRvY29uZiB3YXMgcnVuLCBhbmQgdXNlZCBieSBnaXQtdmVyc2lvbi1nZW4uICBNdXN0IG5vdAorIyAgIGJlIHByZXNlbnQgaW4gZWl0aGVyICQoc3JjZGlyKSBvciAkKGJ1aWxkZGlyKSBmb3IgZ2l0LXZlcnNpb24tZ2VuIHRvCisjICAgZ2l2ZSBhY2N1cmF0ZSBhbnN3ZXJzIGR1cmluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBhIGNoZWNrZWQgb3V0IHRyZWUsCisjICAgYnV0IG11c3QgYmUgcHJlc2VudCBpbiBhIHRhcmJhbGwgd2hlbiB0aGVyZSBpcyBubyB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorIyAgIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHVzZWQgaW4gYW55IGRlcGVuZGVuY2llcy4gIEdOVW1ha2VmaWxlIGhhcworIyAgIGhvb2tzIHRvIGZvcmNlIGEgcmVjb25maWd1cmUgYXQgZGlzdHJpYnV0aW9uIHRpbWUgdG8gZ2V0IHRoZSB2YWx1ZQorIyAgIGNvcnJlY3QsIHdpdGhvdXQgcGVuYWxpemluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBleHRyYSByZWNvbmZpZ3VyZXMuCisjCisjIC52ZXJzaW9uIC0gcHJlc2VudCBpbiBhIGNoZWNrZWQtb3V0IHJlcG9zaXRvcnkgYW5kIGluIGEgZGlzdHJpYnV0aW9uCisjICAgdGFyYmFsbC4gIFVzYWJsZSBpbiBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBmb3IgZmlsZXMgdGhhdCBkb24ndAorIyAgIHdhbnQgdG8gZGVwZW5kIG9uIGNvbmZpZy5oIGJ1dCBkbyB3YW50IHRvIHRyYWNrIHZlcnNpb24gY2hhbmdlcy4KKyMgICBEZWxldGUgdGhpcyBmaWxlIHByaW9yIHRvIGFueSBhdXRvY29uZiBydW4gd2hlcmUgeW91IHdhbnQgdG8gcmVidWlsZAorIyAgIGZpbGVzIHRvIHBpY2sgdXAgYSB2ZXJzaW9uIHN0cmluZyBjaGFuZ2U7IGFuZCBsZWF2ZSBpdCBzdGFsZSB0bworIyAgIG1pbmltaXplIHJlYnVpbGQgdGltZSBhZnRlciB1bnJlbGF0ZWQgY2hhbmdlcyB0byBjb25maWd1cmUgc291cmNlcy4KKyMKKyMgQXMgd2l0aCBhbnkgZ2VuZXJhdGVkIGZpbGUgaW4gYSBWQydkIGRpcmVjdG9yeSwgeW91IHNob3VsZCBhZGQKKyMgLy52ZXJzaW9uIHRvIC5naXRpZ25vcmUsIHNvIHRoYXQgeW91IGRvbid0IGFjY2lkZW50YWxseSBjb21taXQgaXQuCisjIC50YXJiYWxsLXZlcnNpb24gaXMgbmV2ZXIgZ2VuZXJhdGVkIGluIGEgVkMnZCBkaXJlY3RvcnksIHNvIG5lZWRuJ3QKKyMgYmUgbGlzdGVkIHRoZXJlLgorIworIyBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIgY29uZmlndXJlLmFjLCBzbyB0aGF0ICQoVkVSU0lPTikgd2lsbAorIyBhdXRvbWF0aWNhbGx5IGJlIHVwLXRvLWRhdGUgZWFjaCB0aW1lIGNvbmZpZ3VyZSBpcyBydW4gKGFuZCBub3RlIHRoYXQKKyMgc2luY2UgY29uZmlndXJlLmFjIG5vIGxvbmdlciBpbmNsdWRlcyBhIHZlcnNpb24gc3RyaW5nLCBNYWtlZmlsZSBydWxlcworIyBzaG91bGQgbm90IGRlcGVuZCBvbiBjb25maWd1cmUuYWMgZm9yIHZlcnNpb24gdXBkYXRlcykuCisjCisjIEFDX0lOSVQoW0dOVSBwcm9qZWN0XSwKKyMgICAgICAgICBtNF9lc3lzY21kKFtidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIC50YXJiYWxsLXZlcnNpb25dKSwKKyMgICAgICAgICBbYnVnLXByb2plY3RAZXhhbXBsZV0pCisjCisjIFRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4geW91ciBNYWtlZmlsZS5hbSwgc28gdGhhdCAudmVyc2lvbgorIyB3aWxsIGJlIHByZXNlbnQgZm9yIGRlcGVuZGVuY2llcywgYW5kIHNvIHRoYXQgLnZlcnNpb24gYW5kCisjIC50YXJiYWxsLXZlcnNpb24gd2lsbCBleGlzdCBpbiBkaXN0cmlidXRpb24gdGFyYmFsbHMuCisjCisjIEVYVFJBX0RJU1QgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjIEJVSUxUX1NPVVJDRVMgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjICQodG9wX3NyY2RpcikvLnZlcnNpb246CisjCWVjaG8gJChWRVJTSU9OKSA+ICRALXQgJiYgbXYgJEAtdCAkQAorIyBkaXN0LWhvb2s6CisjCWVjaG8gJChWRVJTSU9OKSA+ICQoZGlzdGRpcikvLnRhcmJhbGwtdmVyc2lvbgorCisKK21lPSQwCisKK3ZlcnNpb249ImdpdC12ZXJzaW9uLWdlbiAkc2NyaXB0dmVyc2lvbgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoZXJlIGlzIE5PIHdhcnJhbnR5LiAgWW91IG1heSByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG1hdHRlcnMsIHNlZSB0aGUgZmlsZXMgbmFtZWQgQ09QWUlORy4iCisKK3VzYWdlPSJcCitVc2FnZTogJG1lIFtPUFRJT05dLi4uIFwkc3JjZGlyLy50YXJiYWxsLXZlcnNpb24gW1RBRy1OT1JNQUxJWkFUSU9OLVNFRC1TQ1JJUFRdCitQcmludCBhIHZlcnNpb24gc3RyaW5nLgorCitPcHRpb25zOgorCisgICAtLXByZWZpeCAgICAgICAgICAgcHJlZml4IG9mIGdpdCB0YWdzIChkZWZhdWx0ICd2JykKKyAgIC0tZmFsbGJhY2sgICAgICAgICBmYWxsYmFjayB2ZXJzaW9uIHRvIHVzZSBpZiBcImdpdCAtLXZlcnNpb25cIiBmYWlscworCisgICAtLWhlbHAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgIC0tdmVyc2lvbiAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorCitSdW5uaW5nIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgc3VmZmljZSBpbiBtb3N0IGNhc2VzLiIKKworcHJlZml4PXYKK2ZhbGxiYWNrPQorCit3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICBjYXNlICQxIGluCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0IDA7OworICAgIC0tdmVyc2lvbikgZWNobyAiJHZlcnNpb24iOyBleGl0IDA7OworICAgIC0tcHJlZml4KSBzaGlmdDsgcHJlZml4PSIkMSI7OworICAgIC0tZmFsbGJhY2spIHNoaWZ0OyBmYWxsYmFjaz0iJDEiOzsKKyAgICAtKikKKyAgICAgIGVjaG8gIiQwOiBVbmtub3duIG9wdGlvbiAnJDEnLiIgPiYyCisgICAgICBlY2hvICIkMDogVHJ5ICctLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisgICAgICBleGl0IDE7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JHRhcmJhbGxfdmVyc2lvbl9maWxlIiA9IHg7IHRoZW4KKyAgICAgICAgdGFyYmFsbF92ZXJzaW9uX2ZpbGU9IiQxIgorICAgICAgZWxpZiB0ZXN0ICJ4JHRhZ19zZWRfc2NyaXB0IiA9IHg7IHRoZW4KKyAgICAgICAgdGFnX3NlZF9zY3JpcHQ9IiQxIgorICAgICAgZWxzZQorICAgICAgICBlY2hvICIkMDogZXh0cmEgbm9uLW9wdGlvbiBhcmd1bWVudCAnJDEnLiIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmk7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgIngkdGFyYmFsbF92ZXJzaW9uX2ZpbGUiID0geDsgdGhlbgorICAgIGVjaG8gIiR1c2FnZSIKKyAgICBleGl0IDEKK2ZpCisKK3RhZ19zZWRfc2NyaXB0PSIke3RhZ19zZWRfc2NyaXB0Oi1zL3gveC99IgorCitubD0nCisnCisKKyMgQXZvaWQgbWVkZGxpbmcgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgb2YgdGhlIHNhbWUgbmFtZS4KK3Y9Cit2X2Zyb21fZ2l0PQorCisjIEZpcnN0IHNlZSBpZiB0aGVyZSBpcyBhIHRhcmJhbGwtb25seSB2ZXJzaW9uIGZpbGUuCisjIHRoZW4gdHJ5ICJnaXQgZGVzY3JpYmUiLCB0aGVuIGRlZmF1bHQuCitpZiB0ZXN0IC1mICR0YXJiYWxsX3ZlcnNpb25fZmlsZQordGhlbgorICAgIHY9YGNhdCAkdGFyYmFsbF92ZXJzaW9uX2ZpbGVgIHx8IHY9CisgICAgY2FzZSAkdiBpbgorICAgICAgICAqJG5sKikgdj0gOzsgIyByZWplY3QgbXVsdGktbGluZSBvdXRwdXQKKyAgICAgICAgWzAtOV0qKSA7OworICAgICAgICAqKSB2PSA7OworICAgIGVzYWMKKyAgICB0ZXN0ICJ4JHYiID0geCBcCisgICAgICAgICYmIGVjaG8gIiQwOiBXQVJOSU5HOiAkdGFyYmFsbF92ZXJzaW9uX2ZpbGUgaXMgbWlzc2luZyBvciBkYW1hZ2VkIiAxPiYyCitmaQorCitpZiB0ZXN0ICJ4JHYiICE9IHgKK3RoZW4KKyAgICA6ICMgdXNlICR2CisjIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdpdCBjb21taXQgaW52b2x2aW5nIHRoZSB3b3JraW5nCisjIGRpcmVjdG9yeSwgYW5kICJnaXQgZGVzY3JpYmUiIG91dHB1dCBsb29rcyBzZW5zaWJsZSwgdXNlIHRoYXQgdG8KKyMgZGVyaXZlIGEgdmVyc2lvbiBzdHJpbmcuCitlbGlmIHRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDp4IC4gMj4mMWAiID0geCBcCisgICAgJiYgdj1gZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgLS1tYXRjaD0iJHByZWZpeCoiIEhFQUQgMj4vZGV2L251bGwgXAorICAgICAgICAgIHx8IGdpdCBkZXNjcmliZSAtLWFiYnJldj00IEhFQUQgMj4vZGV2L251bGxgIFwKKyAgICAmJiB2PWBwcmludGYgJyVzXG4nICIkdiIgfCBzZWQgIiR0YWdfc2VkX3NjcmlwdCJgIFwKKyAgICAmJiBjYXNlICR2IGluCisgICAgICAgICAkcHJlZml4WzAtOV0qKSA7OworICAgICAgICAgKikgKGV4aXQgMSkgOzsKKyAgICAgICBlc2FjCit0aGVuCisgICAgIyBJcyB0aGlzIGEgbmV3IGdpdCB0aGF0IGxpc3RzIG51bWJlciBvZiBjb21taXRzIHNpbmNlIHRoZSBsYXN0CisgICAgIyB0YWcgb3IgdGhlIHByZXZpb3VzIG9sZGVyIHZlcnNpb24gdGhhdCBkaWQgbm90PworICAgICMgICBOZXdlcjogdjYuMTAtNzctZzBmOGZhZWIKKyAgICAjICAgT2xkZXI6IHY2LjEwLWcwZjhmYWViCisgICAgY2FzZSAkdiBpbgorICAgICAgICAqLSotKikgOiBnaXQgZGVzY3JpYmUgaXMgb2theSB0aHJlZSBwYXJ0IGZsYXZvciA7OworICAgICAgICAqLSopCisgICAgICAgICAgICA6IGdpdCBkZXNjcmliZSBpcyBvbGRlciB0d28gcGFydCBmbGF2b3IKKyAgICAgICAgICAgICMgUmVjcmVhdGUgdGhlIG51bWJlciBvZiBjb21taXRzIGFuZCByZXdyaXRlIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICMgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGlmIHdlIHdlcmUgdXNpbmcgdGhlIG5ld2VyIHZlcnNpb24KKyAgICAgICAgICAgICMgb2YgZ2l0IGRlc2NyaWJlLgorICAgICAgICAgICAgdnRhZz1gZWNobyAiJHYiIHwgc2VkICdzLy0uKi8vJ2AKKyAgICAgICAgICAgIGNvbW1pdF9saXN0PWBnaXQgcmV2LWxpc3QgIiR2dGFnIi4uSEVBRCAyPi9kZXYvbnVsbGAgXAorICAgICAgICAgICAgICAgIHx8IHsgY29tbWl0X2xpc3Q9ZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgZWNobyAiJDA6IFdBUk5JTkc6IGdpdCByZXYtbGlzdCBmYWlsZWQiIDE+JjI7IH0KKyAgICAgICAgICAgIG51bWNvbW1pdHM9YGVjaG8gIiRjb21taXRfbGlzdCIgfCB3YyAtbGAKKyAgICAgICAgICAgIHY9YGVjaG8gIiR2IiB8IHNlZCAicy9cKC4qXCktXCguKlwpL1wxLSRudW1jb21taXRzLVwyLyJgOworICAgICAgICAgICAgdGVzdCAiJGNvbW1pdF9saXN0IiA9IGZhaWxlZCAmJiB2PVVOS05PV04KKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBDaGFuZ2UgdGhlIGZpcnN0ICctJyB0byBhICcuJywgc28gdmVyc2lvbi1jb21wYXJpbmcgdG9vbHMgd29yayBwcm9wZXJseS4KKyAgICAjIFJlbW92ZSB0aGUgImciIGluIGdpdCBkZXNjcmliZSdzIG91dHB1dCBzdHJpbmcsIHRvIHNhdmUgYSBieXRlLgorICAgIHY9YGVjaG8gIiR2IiB8IHNlZCAncy8tLy4wLi87cy9cKC4qXCktZy9cMS0vJ2A7CisgICAgdl9mcm9tX2dpdD0xCitlbGlmIHRlc3QgIngkZmFsbGJhY2siID0geCB8fCBnaXQgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIHY9VU5LTk9XTgorZWxzZQorICAgIHY9JGZhbGxiYWNrCitmaQorCit2PWBlY2hvICIkdiIgfHNlZCAicy9eJHByZWZpeC8vImAKKworIyBUZXN0IHdoZXRoZXIgdG8gYXBwZW5kIHRoZSAiLWRpcnR5IiBzdWZmaXggb25seSBpZiB0aGUgdmVyc2lvbgorIyBzdHJpbmcgd2UncmUgdXNpbmcgY2FtZSBmcm9tIGdpdC4gIEkuZS4sIHNraXAgdGhlIHRlc3QgaWYgaXQncyAiVU5LTk9XTiIKKyMgb3IgaWYgaXQgY2FtZSBmcm9tIC50YXJiYWxsLXZlcnNpb24uCitpZiB0ZXN0ICJ4JHZfZnJvbV9naXQiICE9IHg7IHRoZW4KKyAgIyBEb24ndCBkZWNsYXJlIGEgdmVyc2lvbiAiZGlydHkiIG1lcmVseSBiZWNhdXNlIGEgdGltZSBzdGFtcCBoYXMgY2hhbmdlZC4KKyAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggPiAvZGV2L251bGwgMj4mMQorCisgIGRpcnR5PWBleGVjIDI+L2Rldi9udWxsO2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQURgIHx8IGRpcnR5PQorICBjYXNlICIkZGlydHkiIGluCisgICAgICAnJykgOzsKKyAgICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKyAgICAgICAgICBjYXNlICR2IGluCisgICAgICAgICAgICAqLWRpcnR5KSA7OworICAgICAgICAgICAgKikgdj0iJHYtZGlydHkiIDs7CisgICAgICAgICAgZXNhYyA7OworICBlc2FjCitmaQorCisjIE9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUsIHNvIHRoYXQgbTRfZXN5c2NtZCBjYW4gdXNlIHRoZSByZXN1bHQgZGlyZWN0bHkuCitlY2hvICIkdiIgfCB0ciAtZCAiJG5sIgorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTMzY2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtQyB0ZXN0cyAtayBydW50ZXN0LVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2Uvc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhlNGIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2Uvc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitBZGQgb3B0aW9ucyAiYWlvIiBhbmQgImFjbCIgdG8gZW5hYmxlL2Rpc2FibGUgbGliYWlvIGFuZCBhY2wgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTczOTU4Yy4uOTA5OTM3MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjcwLDYgKzI3MCwxOCBAQCBBQ19DSEVDS19IRUFERVJTKG00X25vcm1hbGl6ZShbCisgCXN5cy92ZnMuaAorIAlzeXMveGF0dHIuaAorIF0pKQorKworK0FDX0FSR19FTkFCTEUoW2FjbF0sCisrCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYWNsXSwgW3R1cm4gb24gYWNsIHN1cHBvcnRdKV0sCisrCVtjYXNlICRlbmFibGV2YWwgaW4KKysJeWVzKQorKwkJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL2FjbC5oXSkKKysJCTs7CisrCW5vKSAgOzsKKysJKikgICBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAkZW5hYmxldmFsIGZvciBhaW8gb3B0aW9uXSkgOzsKKysJZXNhY10KKyspCisrCisgQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvaWNtcC5oIGxpbnV4L2luNi5oIGxpbnV4L25ldGxpbmsuaCBsaW51eC9pZl9wYWNrZXQuaF0sCisgICAgICAgICAgICAgICAgICBbXSwgW10sIFsjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KK0BAIC03NDUsNiArNzU3LDIwIEBAIGlmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2RsYWRkciIgPSB4eWVzOyB0aGVuCisgZmkKKyBBQ19TVUJTVChkbF9MSUJTKQorIAorK0FDX0FSR19FTkFCTEUoW2Fpb10sCisrCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYWlvXSwgW3R1cm4gb24gbGliYWlvIHN1cHBvcnRdKV0sCisrCVtjYXNlICRlbmFibGV2YWwgaW4KKysJeWVzKQorKwlBQ19DSEVDS19IRUFERVJTKFtsaWJhaW8uaF0sIFsKKysJCUFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpb2NiLnUuYy5mbGFnc10sLCwgWyNpbmNsdWRlIDxsaWJhaW8uaD5dKQorKwkJQUNfQ0hFQ0tfREVDTFMoW0lPX0NNRF9QV1JJVEUsIElPX0NNRF9QV1JJVEVWXSwsLCBbI2luY2x1ZGUgPGxpYmFpby5oPl0pCisrCV0pCisrCTs7CisrCW5vKSAgOzsKKysJKikgICBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAkZW5hYmxldmFsIGZvciBhaW8gb3B0aW9uXSkgOzsKKysJZXNhY10KKyspCisrCisgQUNfUEFUSF9QUk9HKFtQRVJMXSwgW3BlcmxdKQorIAorIGRubCBzdGFjayB0cmFjZSB3aXRoIGxpYnVud2luZAorLS0KKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjdlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEwLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGNhbGwgdHJhY2luZyB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3N0cmFjZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyNDUwMGMyMWU4NTZmMDkxMmRmMjkyOTViYTEwNGM3IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zdHJhY2Uvc3RyYWNlLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dpdC12ZXJzaW9uLWdlbiBcCisgICAgICAgICAgIGZpbGU6Ly9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjEwN2E1YmU0NTU0OTM4NjExODllOWI1N2EzYTUxOTEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2MTgwZDg2NmVmOWU3NjU4NmI5NmUyZWNlMmJmZWViM2FhMjNmNWNjODgxNTNmNzZlOWNhZWRkNjVlNDBlZTIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJsdWV0b290aAorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgY29yZXV0aWxzIGdyZXAgZ2F3ayIKKworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICJcCisgICAgbGliYWlvICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsJywgJ2FjbCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdbbGliYWlvXSA9ICItLWVuYWJsZS1haW8sLS1kaXNhYmxlLWFpbyxsaWJhaW8iCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsIC0td2l0aG91dC1saWJ1bndpbmQsIGxpYnVud2luZCIKK1BBQ0tBR0VDT05GSUdbYmx1ZXpdID0gImFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9eWVzLGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9bm8sJHtCTFVFWn0iCisKK1RFU1RESVIgPSAidGVzdHMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNwICR7V09SS0RJUn0vZ2l0LXZlcnNpb24tZ2VuICR7U30KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBXZSBkb24ndCBzaGlwIHN0cmFjZS1ncmFwaCBoZXJlIGJlY2F1c2UgaXQgbmVlZHMgcGVybAorCXJtICR7RH0ke2JpbmRpcn0vc3RyYWNlLWdyYXBoCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGJ1aWxkdGVzdC1URVNUUyBPUz1saW51eCBBUkNIPSIke1RBUkdFVF9BUkNIfSIKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvZGlzYWJsZV9tYWNvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2Rpc2FibGVfbWFjb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzYmU0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2Rpc2FibGVfbWFjb3MucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVGhlc2UgdGVzdHMgZG9uJ3Qgd29yayBpbiBjcm9zcyBjb21waWxpbmcsIGp1c3QgZGlzYWJsZSB0aGVtIGZvciBub3csIHdlIGRvbid0CitidWlsZCBzdWJ2ZXJzaW9uIG9uIE9TLVggYXQgdGhpcyB0aW1lLgorCitSUCAxMDE0LzcvMTYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtuZWVkcyBhIHJld3JpdGUgdG8gc3VwcG9ydCBhIGNhY2hlIHZhbHVlXQorCitJbmRleDogc3VidmVyc2lvbi0xLjguOS9idWlsZC9hYy1tYWNyb3MvbWFjb3N4Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3VidmVyc2lvbi0xLjguOS5vcmlnL2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQJMjAxMi0xMS0yNiAwMzowNDoyNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBzdWJ2ZXJzaW9uLTEuOC45L2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQJMjAxNC0wNy0xNiAxMjoyODo1OC4zNTczMDA0MDMgKzAwMDAKK0BAIC0yNCwyMSArMjQsNyBAQAorIEFDX0RFRlVOKFNWTl9MSUJfTUFDSE9fSVRFUkFURSwKKyBbCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBNYWNoLU8gZHluYW1pYyBtb2R1bGUgaXRlcmF0aW9uIGZ1bmN0aW9uc10pCistICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0gICAgI2luY2x1ZGUgPG1hY2gtby9keWxkLmg+CistICAgICNpbmNsdWRlIDxtYWNoLW8vbG9hZGVyLmg+CistICBdXSxbWworLSAgICBjb25zdCBzdHJ1Y3QgbWFjaF9oZWFkZXIgKmhlYWRlciA9IF9keWxkX2dldF9pbWFnZV9oZWFkZXIoMCk7CistICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBfZHlsZF9nZXRfaW1hZ2VfbmFtZSgwKTsKKy0gICAgaWYgKG5hbWUgJiYgaGVhZGVyKSByZXR1cm4gMDsKKy0gICAgcmV0dXJuIDE7CistICBdXSldLFsKKy0gICAgQUNfREVGSU5FKFtTVk5fSEFWRV9NQUNIT19JVEVSQVRFXSwgWzFdLAorLSAgICAgICAgICAgICAgW0lzIE1hY2gtTyBsb3ctbGV2ZWwgX2R5bGQgQVBJIGF2YWlsYWJsZT9dKQorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgXSxbCisgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKy0gIF0pCisgXSkKKyAKKyBkbmwgU1ZOX0xJQl9NQUNPU19QTElTVAorQEAgLTQ2LDM0ICszMiw3IEBACisgQUNfREVGVU4oU1ZOX0xJQl9NQUNPU19QTElTVCwKKyBbCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBNYWMgT1MgcHJvcGVydHkgbGlzdCB1dGlsaXRpZXNdKQorLQorLSAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLSAgICAjaW5jbHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+CistICAgICNpZiAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSBcCistICAgICB8fCAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzApIFwKKy0gICAgIHx8IChNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDw9IE1BQ19PU19YX1ZFUlNJT05fMTBfMCkKKy0gICAgI2Vycm9yIFByb3BlcnlMaXN0IEFQSSB1bmF2YWlsYWJsZS4KKy0gICAgI2VuZGlmCistICBdXSxbW11dKV0sWworLSAgICBkbmwgIyMjIEhhY2suICBXZSBzaG91bGQgb25seSBuZWVkIHRvIHBhc3MgdGhlIC1mcmFtZXdvcmsgb3B0aW9ucyB3aGVuCistICAgIGRubCBsaW5raW5nIGxpYnN2bl9zdWJyLCBzaW5jZSBpdCBpcyB0aGUgb25seSBsaWJyYXJ5IHRoYXQgdXNlcyBLZXljaGFpbi4KKy0gICAgZG5sCistICAgIGRubCBVbmZvcnR1bmF0ZWx5LCBsaWJ0b29sIDEuNS54IGRvZXNuJ3QgdHJhY2sgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgZm9yCistICAgIGRubCBPUyBYIGZyYW1ld29ya3MgbGlrZSBpdCBkb2VzIGZvciBub3JtYWwgbGlicmFyaWVzLCBzbyB3ZSBuZWVkIHRvCistICAgIGRubCBleHBsaWNpdGx5IHBhc3MgdGhlIG9wdGlvbiB0byBhbGwgdGhlIHVzZXJzIG9mIGxpYnN2bl9zdWJyIHRvIGFsbG93CistICAgIGRubCBzdGF0aWMgYnVpbGRzIHRvIGxpbmsgc3VjY2Vzc2Z1bGx5LgorLSAgICBkbmwKKy0gICAgZG5sIFRoaXMgZG9lcyBtZWFuIHRoYXQgYWxsIGV4ZWN1dGFibGVzIHdlIGxpbmsgd2lsbCBiZSBsaW5rZWQgZGlyZWN0bHkKKy0gICAgZG5sIHRvIHRoZXNlIGZyYW1ld29ya3MgLSBldmVuIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcyAtIGJ1dCB0aGF0CistICAgIGRubCBzaG91bGRuJ3QgY2F1c2UgYW55IHByb2JsZW1zLgorLQorLSAgICBMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorLSAgICBBQ19ERUZJTkUoW1NWTl9IQVZFX01BQ09TX1BMSVNUXSwgWzFdLAorLSAgICAgICAgICAgICAgW0lzIE1hYyBPUyBwcm9wZXJ0eSBsaXN0IEFQSSBhdmFpbGFibGU/XSkKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKy0gIF0sWworICAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICBdKQorIF0pCisgCisgZG5sIFNWTl9MSUJfTUFDT1NfS0VZQ0hBSU4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2xpYnRvb2wyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvbGlidG9vbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkNTcyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2xpYnRvb2wyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDExLTEwLTIwIDIxOjU2OjAyLjIzMDY2Mzk4NyArMDIwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTEtMDgtMTcgMTU6MDE6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtMjI3LDggKzIyNyw4IEBACisgICBMSUJUT09MPSIkc2hfbGlidG9vbCIKKyAgIFNWTl9MSUJUT09MPSIkc2hfbGlidG9vbCIKKyBlbHNlCistICBzaF9saWJ0b29sPSIkYWJzX2J1aWxkZGlyL2xpYnRvb2wiCistICBTVk5fTElCVE9PTD0iXCQoU0hFTEwpICRzaF9saWJ0b29sIgorKyAgc2hfbGlidG9vbD0iJGFic19idWlsZGRpci8kaG9zdF9hbGlhcy1saWJ0b29sIgorKyAgU1ZOX0xJQlRPT0w9IlwkKFNIRUxMKSBcJChhYnNfYnVpbGRkaXIpLyRob3N0X2FsaWFzLWxpYnRvb2wiCisgZmkKKyBBQ19TVUJTVChTVk5fTElCVE9PTCkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDBlNTIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZjFiNmU0OWYxMmExOGVhYmU4OGViNzMyYjU3OGExNjI4MWQwOTQ5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMiBKdWwgMjAxNSAxMTozNzo0MyArMDAwMAorU3ViamVjdDogW1BBVENIXSBzZXJmLm00OiBSZWdleCBtb2RpZmllZCB0byBhbGxvdyAnLUQnIGluIHBhdGhzCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKKworVGhlIHBhdGNoIGlzIG1lcmdlZCBieSBzdWJ2ZXJzaW9uIHVwc3RyZWFtIHdpdGggcmVwbGFjaW5nICdbWzpzcGFjZTpdXScgd2l0aCAnICcuCisKK2h0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvc3VidmVyc2lvbi90cnVuay9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tND9yMT0xNTk0MTU2JnIyPTE2ODk4MjQgIAorCitTaWduZWQtb2ZmLWJ5OiBKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBidWlsZC9hYy1tYWNyb3Mvc2VyZi5tNCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00IGIvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQKK2luZGV4IGFlMTFlNzUuLmZmOGNiYWUgMTAwNjQ0CistLS0gYS9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNAorKysrIGIvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQKK0BAIC0xNDMsNyArMTQzLDcgQEAgQUNfREVGVU4oU1ZOX1NFUkZfUEtHX0NPTkZJRywKKyAgICAgICAgIGlmICRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tYXRsZWFzdC12ZXJzaW9uPSRzZXJmX2NoZWNrX3ZlcnNpb247IHRoZW4KKyAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgICAgc2VyZl9mb3VuZD15ZXMKKy0gICAgICAgICAgU1ZOX1NFUkZfSU5DTFVERVM9W2AkUEtHX0NPTkZJRyAkc2VyZl9tYWpvciAtLWNmbGFncyB8ICRTRUQgLWUgJ3MvLURbXiBdKi8vZydgXQorKyAgICAgICAgICBTVk5fU0VSRl9JTkNMVURFUz1bYCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tY2ZsYWdzIHwgJFNFRCAtZSAncy9bWzpzcGFjZTpdXS1EW14gXSovL2cnIC1lICdzL14tRFteIF0qLy9nJ2BdCisgICAgICAgICAgIFNWTl9TRVJGX0xJQlM9YCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tbGlic2AgCisgICAgICAgICAgIGJyZWFrCisgICAgICAgICBlbHNlCistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjguMTMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOC4xMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQzYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjguMTMuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJTdWJ2ZXJzaW9uIChzdm4pIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gY2xpZW50IgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gImFwci11dGlsIHNlcmYgc3FsaXRlMyBmaWxlIgorUkRFUEVORFNfJHtQTn0gPSAic2VyZiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIiCitIT01FUEFHRSA9ICJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBnZXR0ZXh0IHB5dGhvbm5hdGl2ZQorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfbWFjb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NDEzNDE3YjUyOWQ3YmRmODJmNzRlNTBkZjAyZTg4YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMDk5Y2M2ODg0MDc1M2I0OGFlZGIzYTI3ZWJkMWUyYWZiY2M4NGRkYjg3MTQxMmU1ZDUwMGU4NDNkNjA3NTc5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYzJmMDExOWU0Nzg3MDBiNTQyOGUyNjM4NmNmZjkyMyIKKworUEFDS0FHRUNPTkZJR1tzYXNsXSA9ICItLXdpdGgtc2FzbCwtLXdpdGhvdXQtc2FzbCxjeXJ1cy1zYXNsIgorUEFDS0FHRUNPTkZJR1tnbm9tZS1rZXlyaW5nXSA9ICItLXdpdGgtZ25vbWUta2V5cmluZywtLXdpdGhvdXQtZ25vbWUta2V5cmluZyxnbGliLTIuMCBnbm9tZS1rZXlyaW5nIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtYmVya2VsZXktZGIgLS13aXRob3V0LWFweHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zd2lnIC0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gXAorICAgICAgICAgICAgICAgIC0td2l0aC1hcHItdXRpbD0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWtleWNoYWluIFwKKyAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1JVQlk9bm9uZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZXhwb3J0IExERkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9ICIKK0NQUEZMQUdTICs9ICItUCIKK0JVSUxEX0NQUEZMQUdTICs9ICItUCIKKworYWNwYXRocyA9ICItSSBidWlsZC8gLUkgYnVpbGQvYWMtbWFjcm9zLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbGlidG9vbAorCXJtIC1mICR7U30vYnVpbGQvbGlidG9vbC5tNCAke1N9L2J1aWxkL2x0bWFpbi5zaCAke1N9L2J1aWxkL2x0b3B0aW9ucy5tNCAke1N9L2J1aWxkL2x0c3VnYXIubTQgJHtTfS9idWlsZC9sdHZlcnNpb24ubTQgJHtTfS9idWlsZC9sdH5vYnNvbGV0ZS5tNAorCXJtIC1mICR7U30vYWNsb2NhbC5tNAorCXNlZCAtaSAtZSAnczp3aXRoX3Nhc2w9Ii91c3IvbG9jYWwiOndpdGhfc2FzbD0iJHtTVEFHSU5HX0RJUn0iOicgJHtTfS9idWlsZC9hYy1tYWNyb3Mvc2FzbC5tNAorfQorCisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX2xvY2FsL2xpYnN2bl9yYV9sb2NhbC0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sc3ZuX2RlbHRhLTF8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9saWJzdm5fcmFfc3ZuLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zZXJmL2xpYnN2bl9yYV9zZXJmLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IGVycm9yOiByZWxpbmsgYGxpYnN2bl9yYV9zZXJmLTEubGEnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgLi4vLi4vc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvc3VidmVyc2lvbi0xLjguOS9idWlsZC1vdXRwdXRzLm1rOjEwOTA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdpbnN0YWxsLXNlcmYtbGliJyBmYWlsZWQKKyN8IG1ha2U6ICoqKiBbaW5zdGFsbC1zZXJmLWxpYl0gRXJyb3IgMQorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzEzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJUb29sIHRvIG1vbml0b3IgYW5kIHJlcG9ydCBvbiBob3N0IHN5c3RlbSBmaWxlIHVzYWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvc3dhYmJlciIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDUkVWID0gIjJkMWZlMzZmYjBhNGZkYWFlODgyM2E5ODE4YTY3ODUxODJkNzVlNjYiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvc3dhYmJlciIKKworaW5oZXJpdCBuYXRpdmUKKworZG9fY29uZmlndXJlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODIxZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMKQEAgLTAsMCArMSw2MyBAQAorREVTQ1JJUFRJT04gPSAiU1dJRyAtIFNpbXBsaWZpZWQgV3JhcHBlciBhbmQgSW50ZXJmYWNlIEdlbmVyYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly9zd2lnLnNvdXJjZWZvcmdlLm5ldC8iCitMSUNFTlNFID0gIkJTRCAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTc4MDdhNjI4Mjc4NGE3ZGRlNGM4NDY2MjZiMDhmYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1HUEw7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtVU5JVkVSU0lUSUVTO21kNT04Y2U5ZGNjOGY3Yzk5NGRlNGE0MDhiMjA1YzcyYmEwOCIKKworU0VDVElPTiA9ICJkZXZlbCIKKworREVQRU5EUyA9ICJsaWJwY3JlIHB5dGhvbiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB5dGhvbm5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OfSBcCisgICAgLS13aXRob3V0LWFsbGVncm9jbCBcCisgICAgLS13aXRob3V0LWFuZHJvaWQgXAorICAgIC0td2l0aG91dC1ib29zdCBcCisgICAgLS13aXRob3V0LWNoaWNrZW4gXAorICAgIC0td2l0aG91dC1jbGlzcCBcCisgICAgLS13aXRob3V0LWNzaGFycCBcCisgICAgLS13aXRob3V0LWQgXAorICAgIC0td2l0aG91dC1nY2ogXAorICAgIC0td2l0aG91dC1nbyBcCisgICAgLS13aXRob3V0LWd1aWxlIFwKKyAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgLS13aXRob3V0LWx1YSBcCisgICAgLS13aXRob3V0LW16c2NoZW1lIFwKKyAgICAtLXdpdGhvdXQtb2NhbWwgXAorICAgIC0td2l0aG91dC1vY3RhdmUgXAorICAgIC0td2l0aG91dC1wZXJsNSBcCisgICAgLS13aXRob3V0LXBpa2UgXAorICAgIC0td2l0aG91dC1waHAgXAorICAgIC0td2l0aG91dC1weXRob24zIFwKKyAgICAtLXdpdGhvdXQtciBcCisgICAgLS13aXRob3V0LXJ1YnkgXAorICAgIC0td2l0aG91dC10Y2wgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5ndWVzcyAke1N9L1Rvb2xzL2NvbmZpZworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9L1Rvb2xzL2NvbmZpZworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzICR7U30KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgJHtTfQorICAgIG9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGNkICR7RH0ke2JpbmRpcn0KKyAgICBsbiAtcyBzd2lnIHN3aWcyLjAKK30KKworZGVmIHN3aWdsaWJfcmVscGF0aChkKToKKyAgICBzd2lnbGliID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSArICIvIiArIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSArICIvIiArIGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChzd2lnbGliLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3N3aWcgU1dJR19MSUI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAc3dpZ2xpYl9yZWxwYXRoKGQpfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRmM2UyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSBhNGEwNDQwYTY0NGM2YzVlNWRhMDk2ZWZlM2NmMDViYTMwOWEyODRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk5PREEsIEthaSIgPG5vZGFrYWlAZ21haWwuY29tPgorRGF0ZTogU3VuLCAyMiBBcHIgMjAxMiAxNzowMTowMiArMDkwMAorU3ViamVjdDogW1BBVENIXSBVc2UgL3Byb2Mvc2VsZi9leGUgZm9yICJzd2lnIC1zd2lnbGliIiBvbiBub24tV2luMzIKKyBwbGF0Zm9ybXMuCisKK0lmIGl0IHdhc24ndCBmb3VuZCwgdGhlbiBmYWxsIGJhY2sgdG8gYSBmaXhlZCBzdHJpbmcganVzdCBhcyBiZWZvcmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL21lc3NhZ2UucGhwP21zZ19pZD0yOTE3OTczMworCistLS0KKyBTb3VyY2UvTW9kdWxlcy9tYWluLmN4eCB8ICAgMjQgKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Tb3VyY2UvTW9kdWxlcy9tYWluLmN4eCBiL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4CitpbmRleCBkMmY1ZDNiLi5jYmIwYTEyIDEwMDY0NAorLS0tIGEvU291cmNlL01vZHVsZXMvbWFpbi5jeHgKKysrKyBiL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4CitAQCAtMjYsNiArMjYsMTEgQEAgY2hhciBjdnNyb290X21haW5fY3h4W10gPSAiJElkJCI7CisgI2luY2x1ZGUgImNwYXJzZS5oIgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4JCS8vIGZvciBJTlRfTUFYCisrI2lmbmRlZiBfV0lOMzIKKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CQkvLyBmb3IgcmVhZGxpbmsKKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4JCS8vIGZvciBzdGF0CisrI2VuZGlmCisgCisgLy8gR2xvYmFsIHZhcmlhYmxlcworIAorQEAgLTkwMiw5ICs5MDcsOSBAQCBpbnQgU1dJR19tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIExhbmd1YWdlICpsKSB7CisgCisgICAvLyBDaGVjayBmb3IgU1dJR19MSUIgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIGlmICgoYyA9IGdldGVudigiU1dJR19MSUIiKSkgPT0gKGNoYXIgKikgMCkgeworKyAgICBjaGFyICpwOworICNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgY2hhciBidWZbTUFYX1BBVEhdOworLSAgICBjaGFyICpwOworICAgICBpZiAoIShHZXRNb2R1bGVGaWxlTmFtZSgwLCBidWYsIE1BWF9QQVRIKSA9PSAwIHx8IChwID0gc3RycmNocihidWYsICdcXCcpKSA9PSAwKSkgeworICAgICAgICoocCArIDEpID0gJ1wwJzsKKyAgICAgICBTd2lnTGliID0gTmV3U3RyaW5nZigiJXNMaWIiLCBidWYpOyAvLyBOYXRpdmUgd2luZG93cyBpbnN0YWxsYXRpb24gcGF0aAorQEAgLTkxNCw3ICs5MTksMjIgQEAgaW50IFNXSUdfbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBMYW5ndWFnZSAqbCkgeworICAgICBpZiAoTGVuKFNXSUdfTElCX1dJTl9VTklYKSA+IDApCisgICAgICAgU3dpZ0xpYldpblVuaXggPSBOZXdTdHJpbmcoU1dJR19MSUJfV0lOX1VOSVgpOyAvLyBVbml4IGluc3RhbGxhdGlvbiBwYXRoIHVzaW5nIGEgZHJpdmUgbGV0dGVyIChmb3IgbXN5cy9taW5ndykKKyAjZWxzZQorLSAgICBTd2lnTGliID0gTmV3U3RyaW5nKFNXSUdfTElCKTsKKysgICAgY2hhciBidWZbUEFUSF9NQVhdOworKyAgICBpZiAoMCA8IDo6cmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgYnVmLCBzaXplb2YoYnVmKSkgJiYKKysgICAgICAgIChwID0gOjpzdHJzdHIoYnVmLCAiL2Jpbi9zd2lnIikpKSB7CisrICAgICAgICBpbnQgbWFqb3IsIG1pbm9yLCBwYXRjaDsKKysgICAgICAgIGNvbnN0IGludCByZXQgPSA6OnNzY2FuZihWRVJTSU9OLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJnBhdGNoKTsKKysgICAgICAgIGlmICgzID09IHJldCkgeworKyAgICAgICAgICAgIGNvbnN0IDo6cHRyZGlmZl90IGRpcl9wYXJ0X2xlbiA9IHAgLSBidWY7CisrICAgICAgICAgICAgOjpzbnByaW50ZihwLCBQQVRIX01BWCAtIGRpcl9wYXJ0X2xlbiwgIi9zaGFyZS9zd2lnLyVkLiVkLiVkIiwgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CisrICAgICAgICAgICAgc3RydWN0IDo6c3RhdCBzdGF0X3JlczsKKysgICAgICAgICAgICBpZiAoMCA9PSA6OnN0YXQoYnVmLCAmc3RhdF9yZXMpICYmIFNfSVNESVIoc3RhdF9yZXMuc3RfbW9kZSkpIHsKKysgICAgICAgICAgICAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhidWYpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICBpZiAoTlVMTCA9PSBTd2lnTGliKQorKyAgICAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhTV0lHX0xJQik7CisgI2VuZGlmCisgICB9IGVsc2UgeworICAgICBTd2lnTGliID0gTmV3U3RyaW5nKGMpOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxMTI4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gNWM0ZDZkODUzODk5NGQ1ZmU5YjNiNDZiZmFmYWYwYTYwNWUzYmRhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitEYXRlOiBUdWUsIDE3IEp1biAyMDE0IDA4OjE4OjE3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogdXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGV0ZWN0aW9uCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDM4ICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDBjOTg0YjcuLjZlZGNlYzEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDM4ICs3MCwxNCBAQCBBQ19NU0dfUkVTVUxUKFskd2l0aF9wY3JlXSkKKyAKKyBkbmwgVG8gbWFrZSBjb25maWd1cmluZyBlYXNpZXIsIGNoZWNrIGZvciBhIGxvY2FsbHkgYnVpbHQgUENSRSB1c2luZyB0aGUgVG9vbHMvcGNyZS1idWlsZC5zaCBzY3JpcHQKKyBpZiB0ZXN0IHgiJHt3aXRoX3BjcmV9IiA9IHh5ZXMgOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIGxvY2FsIFBDUkVdKQorLSAgbG9jYWxfcGNyZV9jb25maWc9bm8KKy0gIGlmIHRlc3QgLXogJFBDUkVfQ09ORklHOyB0aGVuCistICAgIGlmIHRlc3QgLWYgYHB3ZGAvcGNyZS9wY3JlLXN3aWctaW5zdGFsbC9iaW4vcGNyZS1jb25maWc7IHRoZW4KKy0gICAgICBQQ1JFX0NPTkZJRz1gcHdkYC9wY3JlL3BjcmUtc3dpZy1pbnN0YWxsL2Jpbi9wY3JlLWNvbmZpZworLSAgICAgIGxvY2FsX3BjcmVfY29uZmlnPSRQQ1JFX0NPTkZJRworLSAgICBmaQorLSAgZmkKKy0gIEFDX01TR19SRVNVTFQoWyRsb2NhbF9wY3JlX2NvbmZpZ10pCistZmkKKy1BU19JRihbdGVzdCAieCR3aXRoX3BjcmUiICE9IHhub10sCistICBbQVhfUEFUSF9HRU5FUklDKFtwY3JlXSwKKy0gICAgW10sIGRubCBNaW5pbWFsIHZlcnNpb24gb2YgUENSRSB3ZSBuZWVkIC0tIGFjY2VwdCBhbnkKKy0gICAgW10sIGRubCBjdXN0b20gc2VkIHNjcmlwdCBmb3IgdmVyc2lvbiBwYXJzaW5nIGlzIG5vdCBuZWVkZWQKKy0gICAgW0FDX0RFRklORShbSEFWRV9QQ1JFXSwgWzFdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIFBDUkUgbGlicmFyeV0pCistICAgICBMSUJTPSIkTElCUyAkUENSRV9MSUJTIgorLSAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUENSRV9DRkxBR1MiCistICAgIF0sCistICAgIFtBQ19NU0dfRkFJTFVSRShbCistICAgICAgICBDYW5ub3QgZmluZCBwY3JlLWNvbmZpZyBzY3JpcHQgZnJvbSBQQ1JFIChQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucykKKy0gICAgICAgIGxpYnJhcnkgcGFja2FnZS4gVGhpcyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgY29uZmlndXJlIHRvIGNvbXBsZXRlLAorLSAgICAgICAgRWl0aGVyOgorLSAgICAgICAgLSBJbnN0YWxsIHRoZSBQQ1JFIGRldmVsb3BlciBwYWNrYWdlIG9uIHlvdXIgc3lzdGVtIChwcmVmZXJyZWQgYXBwcm9hY2gpLgorLSAgICAgICAgLSBEb3dubG9hZCB0aGUgUENSRSBzb3VyY2UgdGFyYmFsbCwgYnVpbGQgYW5kIGluc3RhbGwgb24geW91ciBzeXN0ZW0KKy0gICAgICAgICAgYXMgeW91IHdvdWxkIGZvciBhbnkgcGFja2FnZSBidWlsdCBmcm9tIHNvdXJjZSBkaXN0cmlidXRpb24uCistICAgICAgICAtIFVzZSB0aGUgVG9vbHMvcGNyZS1idWlsZC5zaCBzY3JpcHQgdG8gYnVpbGQgUENSRSBqdXN0IGZvciBTV0lHIHRvIHN0YXRpY2FsbHkKKy0gICAgICAgICAgbGluayBhZ2FpbnN0LiBSdW4gJ1Rvb2xzL3BjcmUtYnVpbGQuc2ggLS1oZWxwJyBmb3IgaW5zdHJ1Y3Rpb25zLgorLSAgICAgICAgICAocXVpdGUgZWFzeSBhbmQgZG9lcyBub3QgcmVxdWlyZSBwcml2aWxlZ2VzIHRvIGluc3RhbGwgUENSRSBvbiB5b3VyIHN5c3RlbSkKKy0gICAgICAgIC0gVXNlIGNvbmZpZ3VyZSAtLXdpdGhvdXQtcGNyZSB0byBkaXNhYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydCBpbiBTV0lHCistICAgICAgICAgIChub3QgcmVjb21tZW5kZWQpLl0pCistICAgIF0pCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbUENSRV0sIFtsaWJwY3JlXSwgWworKyAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV0sIFsxXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBQQ1JFIGxpYnJhcnldKQorKyAgICBMSUJTPSIkTElCUyAkUENSRV9MSUJTIgorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRQQ1JFX0NGTEFHUyIKKysgIF0sIFsKKysgICAgQUNfTVNHX1dBUk4oWyRQQ1JFX1BLR19FUlJPUlNdKQorICAgXSkKKytmaQorIAorIAorIGRubCBDQ2FjaGUKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZ18zLjAuNi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWdfMy4wLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwOTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWdfMy4wLjYuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImRmNDNhZTI3MTY0MmJjZmE2MWMxZTU5Zjk3MGY5OTYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2N2Y2M2VhMTE5NTYxMDZlNGNkYTY2NDE2ZDUwMjAzMzBkYzRjZTJlZTQ1MDU3ZDM5YTk0OTRjZTMzZWNhMDUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiNzg3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK0Zyb20gNjBmMzgzM2FiMmI1ODk5NzcxYjRlYWI2NTRlODhmOTg4OGI5OTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjowMTo1NSArMDgwMAorU3ViamVjdDogW1BBVENIIDEvOV0gbGludXgvc3lzbGludXg6IHN1cHBvcnQgZXh0Mi8zLzQgZGV2aWNlCisKKyogU3VwcG9ydCBleHQyLzMvNCBkZWl2Y2UuCisqIFRoZSBvcGVuX2V4dDJfZnMoKSBjaGVja3Mgd2hldGhlciBpdCBpcyBhbiBleHQyLzMvNCBkZXZpY2UsCisgIGRvIHRoZSBleHQyLzMvNCBpbnN0YWxsYXRpb24gKGluc3RhbGxfdG9fZXh0MigpKSBpZiB5ZXMsIG90aGVyd2lzZSBnbworICBvbiB0byB0aGUgZmF0L250ZnMuCisqIFRoZSBleHQyLzMvNCBzdXBwb3J0IGRvZXNuJ3QgcmVxdWlyZSByb290IHByaXZpbGVnZXMgc2luY2UgaXQgZG9lc24ndCBuZWVkCisgIG1vdW50IChidXQgd3JpdGUgcGVybWlzc2lvbiBpcyByZXF1aXJlZCkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCAzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDkxMmRlNzEuLjM2ZmMyMDIgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtMjU2LDYgKzI1NiwyMyBAQCBpbnQgZG9fb3Blbl9maWxlKGNoYXIgKm5hbWUpCisgICAgIHJldHVybiBmZDsKKyB9CisgCisrLyoKKysgKiBDaGVjayB3aGV0aGVyIHRoZSBkZXZpY2UgY29udGFpbnMgYW4gZXh0MiwgZXh0MyBvciBleHQ0IGZzIGFuZCBvcGVuIGl0IGlmCisrICogdHJ1ZS4KKysgKiByZXR1cm4gdmFsdWU6CisrICogMDogRXZlcnl0aGluZyBpcyBPSworKyAqIDE6IE5vdCBhbiBleHQyLCBleHQzIG9yIGV4dDQKKysgKiAtMTogdW5leHBlY3RlZCBlcnJvcgorKyAqLworK3N0YXRpYyBpbnQgb3Blbl9leHQyX2ZzKGNvbnN0IGNoYXIgKmRldmljZSwgY29uc3QgY2hhciAqc3ViZGlyKQorK3sKKyt9CisrCisrLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworK3N0YXRpYyBpbnQgaW5zdGFsbF90b19leHQyKGNvbnN0IGNoYXIgKmRldmljZSwgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorK3sKKyt9CisrCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlY3RidWZbU0VDVE9SX1NJWkVdOworQEAgLTMxMyw2ICszMzAsMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJZGllKCJjYW4ndCBjb21iaW5lIGFuIG9mZnNldCB3aXRoIGEgYmxvY2sgZGV2aWNlIik7CisgICAgIH0KKyAKKysgICAgLyoKKysgICAgICogQ2hlY2sgaWYgaXQgaXMgYW4gZXh0MiwgZXh0MyBvciBleHQ0CisrICAgICAqLworKyAgICBydiA9IG9wZW5fZXh0Ml9mcyhvcHQuZGV2aWNlLCBzdWJkaXIpOworKyAgICBpZiAocnYgPT0gMCkgeworKyAgICAgICAgaWYgKGluc3RhbGxfdG9fZXh0MihvcHQuZGV2aWNlLCBkZXZfZmQsIHN1YmRpcikpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnN0YWxsYXRpb24gZmFpbGVkXG4iLCBvcHQuZGV2aWNlKTsKKysgICAgICAgICAgICBleGl0KDEpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIC8qIFVuZXhwZWN0ZWQgZXJyb3JzICovCisrICAgIH0gZWxzZSBpZiAocnYgPT0gLTEpIHsKKysgICAgICAgIGV4aXQoMSk7CisrICAgIH0KKysKKysgICAgLyogUmVzZXQgcnYgKi8KKysgICAgcnYgPSAwOworKworICAgICB4cHJlYWQoZGV2X2ZkLCBzZWN0YnVmLCBTRUNUT1JfU0laRSwgb3B0Lm9mZnNldCk7CisgICAgIGZzeW5jKGRldl9mZCk7CisgCitAQCAtMzIyLDYgKzM1Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAqLworICAgICBpZiAoKGVycm1zZyA9IHN5c2xpbnV4X2NoZWNrX2Jvb3RzZWN0KHNlY3RidWYsICZmc190eXBlKSkpIHsKKyAJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIG9wdC5kZXZpY2UsIGVycm1zZyk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6IHN1cHBvcnRlZCBmczogZmF0L250ZnMvZXh0Mi9leDMvZXh0NFxuIiwgcHJvZ3JhbSk7CisgCWV4aXQoMSk7CisgICAgIH0KKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjZjA2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2gKQEAgLTAsMCArMSwxNDEgQEAKK0Zyb20gMDdmYjczN2ZiNjBjMDhlYWFhNDE5ODlkNTMxZmMyMzAwOTUyMzU0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjowOToxOCArMDgwMAorU3ViamVjdDogW1BBVENIIDIvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBvcGVuX2V4dDJfZnMoKQorCitUaGUgb3Blbl9leHQyX2ZzKCkgY2hlY2tzIHdoZXRoZXIgaXQgaXMgYW4gZXh0Mi9leHQzL2V4dDQgZGV2aWNlLCBhbmQKK3JldHVybjoKKzA6IEl0IGlzIGFuIGV4dDIsIGV4dDMgb3IgZXh0NC4KKzE6IE5vdCBhbiBleHQyLCBleHQzIG9yIGV4dDQuCistMTogdW5leHBlY3RlZCBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvTWFrZWZpbGUgICB8ICAyICstCisgbGludXgvc3lzbGludXguYyB8IDgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA4MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saW51eC9NYWtlZmlsZSBiL2xpbnV4L01ha2VmaWxlCitpbmRleCAxMTY2N2UxLi5hYzFhYzU4IDEwMDY0NAorLS0tIGEvbGludXgvTWFrZWZpbGUKKysrKyBiL2xpbnV4L01ha2VmaWxlCitAQCAtNTEsNyArNTEsNyBAQCBzcG90bGVzczogY2xlYW4KKyBpbnN0YWxsZXI6IHN5c2xpbnV4IHN5c2xpbnV4LW5vbXRvb2xzCisgCisgc3lzbGludXg6ICQoT0JKUykKKy0JJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReIC1sZXh0MmZzCisgCisgc3lzbGludXgtbm9tdG9vbHM6IHN5c2xpbnV4CisgCWxuIC1mICQ8ICRACitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDM2ZmMyMDIuLmNjNGU3ZGEgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNzIsNiArNzIsNyBAQAorICNpbmNsdWRlICJzeXNseGZzLmgiCisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKysjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorIAorIGV4dGVybiBjb25zdCBjaGFyICpwcm9ncmFtOwkvKiBOYW1lIG9mIHByb2dyYW0gKi8KKyAKK0BAIC04Miw2ICs4Myw5IEBAIGNoYXIgKm1udHBhdGggPSBOVUxMOwkJLyogUGF0aCBvbiB3aGljaCB0byBtb3VudCAqLworIGludCBsb29wX2ZkID0gLTE7CQkvKiBMb29wIGRldmljZSAqLworICNlbmRpZgorIAorK2V4dDJfZmlsc3lzICAgICBlMmZzID0gTlVMTDsgICAgLyogRXh0Mi8zLzQgZmlsZXN5c3RlbSAqLworK2V4dDJfaW5vX3QgICAgICByb290LCBjd2Q7ICAgICAgLyogVGhlIHJvb3QgYW5kIGN3ZCBvZiBlMmZzICovCisrCisgdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKSBkaWUoY29uc3QgY2hhciAqbXNnKQorIHsKKyAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHByb2dyYW0sIG1zZyk7CitAQCAtMjY2LDYgKzI3MCw4MiBAQCBpbnQgZG9fb3Blbl9maWxlKGNoYXIgKm5hbWUpCisgICovCisgc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBpbnQgICAgICAgICByZXR2YWw7CisrICAgIGludCAgICAgICAgIG9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVywgbW91bnRfZmxhZ3M7CisrICAgIGV4dDJfaW5vX3QgIGRpcmlubzsKKysgICAgY2hhciAgICAgICAgb3B0X3N0cmluZ1s0MF07CisrCisrICAgIGlmIChvcHQub2Zmc2V0KSB7CisrICAgICAgICBzcHJpbnRmKG9wdF9zdHJpbmcsICJvZmZzZXQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpb3B0Lm9mZnNldCk7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfb3BlbjIoZGV2aWNlLCBvcHRfc3RyaW5nLCBvcGVuX2ZsYWcsIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmUyZnMpOworKyAgICB9IGVsc2UKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19vcGVuKGRldmljZSwgb3Blbl9mbGFnLCAwLCAwLCB1bml4X2lvX21hbmFnZXIsICZlMmZzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgLyogSXQgbWlnaHQgbm90IGJlIGFuIGV4dE4gZnMsIHNvIHdlIG5lZWQgY2hlY2sgbWFnaWMgZmlyc3RseSAqLworKyAgICAgICAgaWYgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9NQUdJQykgeworKyAgICAgICAgICAgIC8qIERvIG5vdGhpbmcsIHJldHVybiBzaWxlbnRseSAqLworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gb3BlbjogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8qIFN0b3AgaWYgaXQgaXMgbW91bnRlZCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2UsICZtb3VudF9mbGFncyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19jaGVja19pZl9tb3VudCgpIGVycm9yIG9uICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIGlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXMgaXMgbW91bnRlZFxuIiwgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICBlMmZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisrCisrICAgIC8qIFJlYWQgdGhlIGlub2RlIG1hcCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXAoZTJmcyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdoaWxlIHJlYWRpbmcgaW5vZGUgYml0bWFwOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBSZWFkIHRoZSBibG9jayBtYXAgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGUyZnMpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3aGlsZSByZWFkaW5nIGJsb2NrIGJpdG1hcDogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgcm9vdCA9IGN3ZCA9IEVYVDJfUk9PVF9JTk87CisrICAgIC8qIENoZWNrIHRoZSBzdWJkaXIgKi8KKysgICAgaWYgKHN0cmNtcChzdWJkaXIsICIvIikpIHsKKysJcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgc3ViZGlyLCAmZGlyaW5vKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gZmluZCBkaXIgJXMgb24gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIHN1YmRpciwgZGV2aWNlKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KGUyZnMsIGRpcmlubyk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIGNkIHRvOiAlc1xuIiwgcHJvZ3JhbSwgc3ViZGlyKTsKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICAgICAgY3dkID0gZGlyaW5vOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworKworK2ZhaWw6CisrICAgICh2b2lkKSBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIHJldHVybiAtMTsKKyB9CisgCisgLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGJhMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaApAQCAtMCwwICsxLDExNiBAQAorRnJvbSA2NGQ4NTZiMjQzODEyOTA3MDY4Nzc2YjIwNGEwMDNhM2E4ZmExMjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjE3OjQyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMy85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGluc3RhbGxfdG9fZXh0MigpCisKKyogVGhlIGhhbmRsZV9hZHZfb25fZXh0KCkgY2hlY2tzIHdoZXRoZXIgd2Ugb25seSBuZWVkIHVwZGF0ZSBhZHYuCisqIFRoZSB3cml0ZV90b19leHQoKSBpbnN0YWxscyBmaWxlcyAobGRsaW51eC5zeXMgb3IgbGRsaW51eC5jMzIpIHRvIHRoZQorICBkZXZpY2UuCisqIFRoZSBpbnN0YWxsX2Jvb3RibG9jaygpIGluc3RhbGxzIHRoZSBib290IGJsb2NrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGNjNGU3ZGEuLjQ1ZjA4MGQgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtMzQ2LDExICszNDYsOTAgQEAgc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisgZmFpbDoKKyAgICAgKHZvaWQpIGV4dDJmc19jbG9zZShlMmZzKTsKKyAgICAgcmV0dXJuIC0xOworKworK30KKysKKysvKgorKyAqIEluc3RhbGwgdGhlIGJvb3QgYmxvY2sgb24gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisrICogTXVzdCBiZSBydW4gQUZURVIgZmlsZSBpbnN0YWxsZWQuCisrICovCisraW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorK3sKKyt9CisrCisrc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorK3sKKyt9CisrCisrLyogV3JpdGUgZmlsZXMsIGFkdiwgYm9vdCBzZWN0b3IgKi8KKytzdGF0aWMgaW50IHdyaXRlX3RvX2V4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuZ3RoLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpX2ZsYWdzLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisreworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCisgc3RhdGljIGludCBpbnN0YWxsX3RvX2V4dDIoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBpbnQgICAgICAgICByZXR2YWw7CisrICAgIGV4dDJfaW5vX3QgIG9sZGlubzsKKysKKysgICAgY29uc3QgY2hhciAqZmlsZSA9ICJsZGxpbnV4LnN5cyI7CisrICAgIGNvbnN0IGNoYXIgKm9sZGZpbGUgPSAiZXh0bGludXguc3lzIjsKKysgICAgY29uc3QgY2hhciAqYzMyZmlsZSA9ICJsZGxpbnV4LmMzMiI7CisrCisrICAgIC8qIEhhbmRsZSB0aGUgYWR2ICovCisrICAgIGlmIChoYW5kbGVfYWR2X29uX2V4dCgpIDwgMCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgaGFuZGxpbmcgQURWIG9uICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgcmV0dmFsID0gMTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBSZXR1cm4gaWYgb25seSBuZWVkIHVwZGF0ZSB0aGUgYWR2ICovCisrICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgIHJldHVybiBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgbGRsaW51eC5zeXMsIGFkdiwgYm9vdCBzZWN0b3IgKi8KKysgICAgcmV0dmFsID0gd3JpdGVfdG9fZXh0KGZpbGUsIChjb25zdCBjaGFyIF9mb3JjZSAqKWJvb3RfaW1hZ2UsCisrICAgICAgICAgICAgICAgIGJvb3RfaW1hZ2VfbGVuLCBFWFQyX0lNTVVUQUJMRV9GTCwgZGV2X2ZkLCBzdWJkaXIpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogd2hpbGUgd3JpdGluZzogJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSBsZGxpbnV4LmMzMiAqLworKyAgICByZXR2YWwgPSB3cml0ZV90b19leHQoYzMyZmlsZSwKKysgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgX2ZvcmNlICopc3lzbGludXhfbGRsaW51eGMzMiwKKysgICAgICAgICAgICAgICAgc3lzbGludXhfbGRsaW51eGMzMl9sZW4sIDAsIGRldl9mZCwgc3ViZGlyKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IHdoaWxlIHdyaXRpbmc6ICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgYzMyZmlsZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogTG9vayBpZiB3ZSBoYXZlIHRoZSBleHRsaW51eC5zeXMgYW5kIHJlbW92ZSBpdCovCisrICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIG9sZGZpbGUsICZvbGRpbm8pOworKyAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc191bmxpbmsoZTJmcywgY3dkLCBvbGRmaWxlLCBvbGRpbm8sIDApOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gdW5saW5rOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgb2xkZmlsZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgICAgcmV0dmFsID0gMDsKKysgICAgfQorKworKyAgICBzeW5jKCk7CisrICAgIHJldHZhbCA9IGluc3RhbGxfYm9vdGJsb2NrKGRldl9mZCwgZGV2aWNlKTsKKysgICAgY2xvc2UoZGV2X2ZkKTsKKysgICAgc3luYygpOworKworK2ZhaWw6CisrICAgICh2b2lkKSBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIHJldHVybiByZXR2YWw7CisgfQorIAorIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI1NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK0Zyb20gMzVkMzg0MmNjNGI5MzBjNTEwMmVlZDI5MjFlMDE4OWI3ZjRmZDA2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjo0MzozNyArMDgwMAorU3ViamVjdDogW1BBVENIIDQvOV0gbGludXgvc3lzbGludXg6IGFkZCBleHRfZmlsZV9yZWFkKCkgYW5kIGV4dF9maWxlX3dyaXRlKCkKKworV2lsbCB1c2UgdGhlbSB0byByZWFkIGFuZCB3cml0ZSBvbiB0aGUgZXh0WCBkZXZpY2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggNDVmMDgwZC4uMjQ3Yzg2YSAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC0zNDksNiArMzQ5LDY4IEBAIGZhaWw6CisgCisgfQorIAorKy8qIFJlYWQgZnJvbSBhbiBleHQyX2ZpbGUgKi8KKytzdGF0aWMgaW50IGV4dF9maWxlX3JlYWQoZXh0Ml9maWxlX3QgZTJfZmlsZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICptc2cpCisreworKyAgICBpbnQgICAgICAgICAgICAgICAgIHJldHZhbDsKKysgICAgY2hhciAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKikgYnVmOworKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIGdvdCA9IDA7CisrICAgIHNpemVfdCAgICAgICAgICAgICAgZG9uZSA9IDA7CisrCisrICAgIC8qIEFsd2F5cyBsc2VlayBzaW5jZSBlMl9maWxlIGlzIHVuY29udHJvbGxlZCBieSB0aGlzIGZ1bmMgKi8KKysgICAgaWYgKGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCkpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19maWxlX2xzZWVrKCkgZmFpbGVkLlxuIiwKKysgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2ZpbGVfcmVhZChlMl9maWxlLCBwdHIsIGNvdW50LCAmZ290KTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSByZWFkaW5nICVzXG4iLAorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSwgbXNnKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBjb3VudCAtPSBnb3Q7CisrICAgICAgICBwdHIgKz0gZ290OworKyAgICAgICAgZG9uZSArPSBnb3Q7CisrICAgICAgICBpZiAoZ290ID09IDAgfHwgY291bnQgPT0gMCkKKysgICAgICAgICAgICBicmVhazsKKysgICAgfQorKworKyAgICByZXR1cm4gZG9uZTsKKyt9CisrCisrLyogV3JpdGUgdG8gYW4gZXh0Ml9maWxlICovCisrc3RhdGljIGludCBleHRfZmlsZV93cml0ZShleHQyX2ZpbGVfdCBlMl9maWxlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQpCisreworKyAgICBjb25zdCBjaGFyICAgICAgICAgICpwdHIgPSAoY29uc3QgY2hhciAqKSBidWY7CisrICAgIHVuc2lnbmVkIGludCAgICAgICAgd3JpdHRlbiA9IDA7CisrICAgIHNpemVfdCAgICAgICAgICAgICAgZG9uZSA9IDA7CisrCisrICAgIC8qIEFsd2F5cyBsc2VlayBzaW5jZSBlMl9maWxlIGlzIHVuY29udHJvbGxlZCBieSB0aGlzIGZ1bmMgKi8KKysgICAgaWYgKGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCkpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHQyZnNfZmlsZV9sc2VlaygpIGZhaWxlZC5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAoY291bnQgPiAwKSB7CisrICAgICAgICBpZiAoZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLCBjb3VudCwgJndyaXR0ZW4pKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHdyaXRlIHN5c2xpbnV4IGFkdi5cbiIsCisrICAgICAgICAgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBjb3VudCAtPSB3cml0dGVuOworKyAgICAgICAgcHRyICs9IHdyaXR0ZW47CisrICAgICAgICBkb25lICs9IHdyaXR0ZW47CisrICAgIH0KKysKKysgICAgcmV0dXJuIGRvbmU7CisrfQorKworIC8qCisgICogSW5zdGFsbCB0aGUgYm9vdCBibG9jayBvbiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAgKiBNdXN0IGJlIHJ1biBBRlRFUiBmaWxlIGluc3RhbGxlZC4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOWU3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2gKQEAgLTAsMCArMSwxMjcgQEAKK0Zyb20gY2RiOTgwYjM3ZjQwZGMyYzQxODkxNDM0Yzc3MzZlNDlkYTUzNzU2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjo0Nzo1MiArMDgwMAorU3ViamVjdDogW1BBVENIIDUvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBoYW5kbGVfYWR2X29uX2V4dCgpCisKK0l0IHJlYWRzIGFkdiBpZiBmb3VuZCBvbiB0aGUgZGV2aWNlLCBvciByZXNldHMgc3lzbGludXhfYWR2LCBvciB1cGRhdGUKK3RoZSBhZHYgaWYgdXBkYXRlIGFkdiBvbmx5LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgOTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDI0N2M4NmEuLmRlNWQyNzIgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDIxLDYgKzQyMSwxMDMgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIAorIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKyB7CisrICAgIGludCAgICAgICAgICAgICAgICAgaSwgcmV0dmFsLCBmb3VuZF9maWxlOworKyAgICBpbnQgICAgICAgICAgICAgICAgIG5lZWRfY2xvc2UgPSAyOyAvKiAyIG1lYW5zIG5vIG5lZWQgZXh0cmEgY2xvc2UgKi8KKysgICAgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWVzWzJdID0geyJsZGxpbnV4LnN5cyIsICJleHRsaW51eC5zeXMifTsKKysgICAgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWU7CisrICAgIGV4dDJfaW5vX3QgICAgICAgICAgbmV3aW5vOworKyAgICBleHQyX2ZpbGVfdCAgICAgICAgIGUyX2ZpbGU7CisrICAgIHN0cnVjdCBleHQyX2lub2RlICAgaW5vZGU7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVzW2ldOworKyAgICAgICAgZm91bmRfZmlsZSA9IDA7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfbmFtZWkoZTJmcywgcm9vdCwgY3dkLCBmaWxlbmFtZSwgJm5ld2lubyk7CisrICAgICAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgICAgICBmb3VuZF9maWxlID0gMTsKKysgICAgICAgIH0gZWxzZQorKyAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgbmVlZF9jbG9zZSA9IGk7CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGUyZnMsIG5ld2lubywgRVhUMl9GTEFHX1JXLCAmZTJfZmlsZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIG9wZW4gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShlMmZzLCBuZXdpbm8sICZpbm9kZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgcmVhZGluZyBpbm9kZTogJXUsIGZpbGU6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBuZXdpbm8sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBDaGVjayB0aGUgc2l6ZSB0byBzZWUgaWYgdG9vIHNtYWxsIHRvIHJlYWQgKi8KKysgICAgICAgIGlmIChpbm9kZS5pX3NpemUgPCAyICogQURWX1NJWkUpIHsKKysgICAgICAgICAgICBpZiAob3B0LnVwZGF0ZV9vbmx5ID09IC0xKSB7CisrICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byB3cml0ZSBhdXhpbGxpYXJ5IGRhdGFcblwKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiAlcyBpcyB0b28gc21hbGwgKG5lZWQgLS11cGRhdGUpP1xuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgICAgIHJldHZhbCA9IC0xOworKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHN5c2xpbnV4X3Jlc2V0X2FkdihzeXNsaW51eF9hZHYpOworKyAgICAgICAgICAgIGZvdW5kX2ZpbGUgPSAwOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogUmVhZCB0aGUgYWR2ICovCisrICAgICAgICByZXR2YWwgPSBleHRfZmlsZV9yZWFkKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RlLmlfc2l6ZSAtIDIgKiBBRFZfU0laRSwgIkFEViIpOworKyAgICAgICAgaWYgKHJldHZhbCA9PSAtMSkKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgaWYgKHJldHZhbCA9PSAyICogQURWX1NJWkUpIHsKKysgICAgICAgICAgICByZXR2YWwgPSBzeXNsaW51eF92YWxpZGF0ZV9hZHYoc3lzbGludXhfYWR2KTsKKysgICAgICAgICAgICAvKiBSZWFkIHRoZSBhZHYgc3VjY2Vzc2Z1bGx5ICovCisrICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKQorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIENsb3NlIHRoZSBmaWxlIGlmIHJlYWNoZXMgaGVyZSwgb3RoZXJ3aXNlIHdlIGxlYXZlIHRoZSBmaWxlCisrICAgICAgICAgKiBvcGVuIGluIGNhc2Ugd2UgbmVlZCB3cml0ZSBpdCAqLworKyAgICAgICAgbmVlZF9jbG9zZSA9IDI7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSBjbG9zaW5nICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoIWZvdW5kX2ZpbGUpIHsKKysgICAgICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBubyBsZGxpbnV4LnN5cyBvciBleHRsaW51eC5zeXMgZm91bmQgb24gdGhlIGRldmljZVxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICAgICAgc3lzbGludXhfcmVzZXRfYWR2KHN5c2xpbnV4X2Fkdik7CisrICAgIH0KKysKKysgICAgLyogVGhlIG1vZGlmeV9hZHYgd2lsbCByZXNldCB0aGUgYWR2IGlmIG9wdC5yZXNldF9hZHYgKi8KKysgICAgaWYgKG1vZGlmeV9hZHYoKSA8IDApIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIG1vZGlmeWluZyBhZHZcbiIsIHByb2dyYW0pOworKyAgICAgICAgcmV0dmFsID0gLTE7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgYWR2IGlmIHVwZGF0ZV9vbmx5ID09IC0xIGFuZCBmb3VuZCBmaWxlICovCisrICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEgJiYgZm91bmRfZmlsZSkgeworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFICwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZS5pX3NpemUgLSAyICogQURWX1NJWkUpID09IC0xKQorKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKytmYWlsOgorKyAgICBpZiAobmVlZF9jbG9zZSAhPSAyKQorKyAgICAgICAgKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBXcml0ZSBmaWxlcywgYWR2LCBib290IHNlY3RvciAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE4NzI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaApAQCAtMCwwICsxLDIxNSBAQAorRnJvbSA5MjJlNTZjMTBlMzZkODc2Nzc3NTgwYzg0ZGFlZjlhNjZiZWE2NTI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE3OjIwOjQzICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNi85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IHdyaXRlX3RvX2V4dCgpIGFuZCBhZGQKKyBzeXNsaW51eGV4dC5jCisKKyogVGhlIHdyaXRlX3RvX2V4dCgpIHdyaXRlIGZpbGUgdG8gdGhlIGV4dFggZGV2aWNlLCBhbmQgaGFuZGxlIHRoZSBib290CisgIHNlY3Rvci4KKyogVGhlIHN5c2xpbnV4ZXh0LmMgaXMgdXNlZCBmb3IgcGxhY2luZyB0aGUgY29kZSB3aGljaCBhcmUgdXNlZCBieQorICBleHRsaW51eCBhbmQgc3lzbGludXggKHdoaWNoIGlzIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KCkpLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyB8ICAgNyArKysKKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuaCB8ICAgNSArKworIGxpbnV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCisgbGludXgvc3lzbGludXguYyAgICAgICAgICAgfCAxMTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuaAorCitkaWZmIC0tZ2l0IGEvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJiNTRjZWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCitAQCAtMCwwICsxLDcgQEAKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKyt2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpCisreworK30KKysKK2RpZmYgLS1naXQgYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuaCBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOGFiZDhiOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmgKK0BAIC0wLDAgKzEsNSBAQAorKyNpZm5kZWYgRVhUMl9TVVBFUl9PRkZTRVQKKysjZGVmaW5lIEVYVDJfU1VQRVJfT0ZGU0VUIDEwMjQKKysjZW5kaWYKKysKKyt2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpOworZGlmZiAtLWdpdCBhL2xpbnV4L01ha2VmaWxlIGIvbGludXgvTWFrZWZpbGUKK2luZGV4IGFjMWFjNTguLjNiMjM4NjcgMTAwNjQ0CistLS0gYS9saW51eC9NYWtlZmlsZQorKysrIGIvbGludXgvTWFrZWZpbGUKK0BAIC0zMCw3ICszMCw4IEBAIFNSQ1MgICAgID0gc3lzbGludXguYyBcCisgICAgICAgICAgICAuLi9saWJpbnN0YWxsZXIvc3lzbHhtb2QuYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9ib290c2VjdF9iaW4uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4YzMyX2Jpbi5jIFwKKy0JICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMKKysJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMgXAorKwkgICAuLi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworIE9CSlMJID0gJChwYXRzdWJzdCAlLmMsJS5vLCQobm90ZGlyICQoU1JDUykpKQorIAorIC5TVUZGSVhFUzogLmMgLm8gLmkgLnMgLlMKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggZGU1ZDI3Mi4uZjBjOTdhOCAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00Niw2ICs0Niw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorIAorICNpbmNsdWRlICJsaW51eGlvY3RsLmgiCisgCitAQCAtNzIsNiArNzMsNyBAQAorICNpbmNsdWRlICJzeXNseGZzLmgiCisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKysjaW5jbHVkZSAic3lzbGludXhleHQuaCIKKyAjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorIAorIGV4dGVybiBjb25zdCBjaGFyICpwcm9ncmFtOwkvKiBOYW1lIG9mIHByb2dyYW0gKi8KK0BAIC00MTksNiArNDIxLDEyIEBAIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyB7CisgfQorIAorKy8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworK2ludCBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgbmV3aW5vLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgKnNlY3RvcnMsIGludCBuc2VjdCkKKyt7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKyB7CisgICAgIGludCAgICAgICAgICAgICAgICAgaSwgcmV0dmFsLCBmb3VuZF9maWxlOworQEAgLTUyNCw2ICs1MzIsMTE2IEBAIGZhaWw6Cisgc3RhdGljIGludCB3cml0ZV90b19leHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaV9mbGFncywgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorIHsKKysgICAgZXh0Ml9pbm9fdCAgICAgICAgICBuZXdpbm87CisrICAgIHN0cnVjdCBleHQyX2lub2RlICAgaW5vZGU7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsLCBpLCBtb2RieXRlcywgbnNlY3Q7CisrICAgIGV4dDJfZmlsZV90ICAgICAgICAgZTJfZmlsZTsKKysgICAgc2VjdG9yX3QgICAgICAgICAgICAqc2VjdG9yczsKKysKKysgICAgLyogUmVtb3ZlIGl0IGlmIGl0IGlzIGFscmVhZHkgZXhpc3RzICovCisrICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIGZpbGVuYW1lLCAmbmV3aW5vKTsKKysgICAgaWYgKHJldHZhbCA9PSAwKSB7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfdW5saW5rKGUyZnMsIGN3ZCwgZmlsZW5hbWUsIG5ld2lubywgMCk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHVubGluazogJXNcbiIsIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8qIENyZWF0ZSBuZXcgaW5vZGUgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShlMmZzLCBjd2QsIDAxMDc1NSwgMCwgJm5ld2lubyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gY3JlYXRlIGlub2RlIGZvcjogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKysKKysgICAgLyogTGluayB0aGUgaW5vZGUgYW5kIHRoZSBmaWxlbmFtZSAqLworKyAgICByZXR2YWwgPSBleHQyZnNfbGluayhlMmZzLCBjd2QsIGZpbGVuYW1lLCBuZXdpbm8sIEVYVDJfRlRfUkVHX0ZJTEUpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIGxpbmsgaW5vZGUgZm9yOiAlcy5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKysKKysgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoZTJmcy0+aW5vZGVfbWFwLCBuZXdpbm8pKQorKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3YXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCAlcy5cbiIsCisrICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKworKyAgICAgICAgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihlMmZzLCBuZXdpbm8sICsxLCAwKTsKKysgICAgICAgIG1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgTElOVVhfU19JUlVTUiB8IExJTlVYX1NfSVJHUlAKKysgICAgICAgICAgICAgICAgICAgICAgICB8IExJTlVYX1NfSVJPVEg7CisrCWlub2RlLmlfZmxhZ3MgfD0gaV9mbGFnczsKKysgICAgICAgIGlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisrICAgICAgICAgICAgZTJmcy0+bm93ID8gZTJmcy0+bm93IDogdGltZSgwKTsKKysgICAgICAgIGlub2RlLmlfbGlua3NfY291bnQgPSAxOworKyAgICAgICAgaWYgKGUyZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorKyAgICAgICAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisrICAgICAgICAgICAgc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CisrCisrICAgICAgICAgICAgZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSAmaW5vZGUuaV9ibG9ja1swXTsKKysgICAgICAgICAgICBlaC0+ZWhfZGVwdGggPSAwOworKyAgICAgICAgICAgIGVoLT5laF9lbnRyaWVzID0gMDsKKysgICAgICAgICAgICBlaC0+ZWhfbWFnaWMgPSBleHQyZnNfY3B1X3RvX2xlMTYoRVhUM19FWFRfTUFHSUMpOworKyAgICAgICAgICAgIGkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKysgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CisrICAgICAgICAgICAgZWgtPmVoX21heCA9IGV4dDJmc19jcHVfdG9fbGUxNihpKTsKKysgICAgICAgICAgICBpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKysgICAgfQorKworKyAgICByZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGUyZnMsIG5ld2lubywgJmlub2RlKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IHdoaWxlIHdyaXR0aW5nIGlub2RlICVkLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgbmV3aW5vKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIHJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oZTJmcywgbmV3aW5vLCBFWFQyX0ZJTEVfV1JJVEUsICZlMl9maWxlKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBvcGVuICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgdG8gZmlsZSAqLworKyAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3RyLCBsZW5ndGgsIDApID09IC0xKQorKyAgICAgICAgZ290byBmYWlsOworKworKyAgICBpZiAoc3RyY21wKGZpbGVuYW1lLCAibGRsaW51eC5zeXMiKSA9PSAwKSB7CisrICAgICAgICAvKiBXcml0ZSBBRFYgKi8KKysgICAgICAgIGlmIChleHRfZmlsZV93cml0ZShlMl9maWxlLCBzeXNsaW51eF9hZHYsIDIgKiBBRFZfU0laRSwKKysgICAgICAgICAgICAgICAgYm9vdF9pbWFnZV9sZW4pID09IC0xKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisrICAgICAgICBzeXNsaW51eF9wYXRjaF9ib290c2VjdChkZXZfZmQpOworKworKyAgICAgICAgLyogUGF0Y2ggbGRsaW51eC5zeXMgKi8KKysgICAgICAgIG5zZWN0ID0gKGJvb3RfaW1hZ2VfbGVuICsgU0VDVE9SX1NJWkUgLSAxKSA+PiBTRUNUT1JfU0hJRlQ7CisrICAgICAgICBuc2VjdCArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR3byBzZWN0b3JzIGZvciB0aGUgQURWICovCisrICAgICAgICBzZWN0b3JzID0gYWxsb2NhKHNpemVvZihzZWN0b3JfdCkgKiBuc2VjdCk7CisrICAgICAgICBtZW1zZXQoc2VjdG9ycywgMCwgbnNlY3QgKiBzaXplb2YgKnNlY3RvcnMpOworKyAgICAgICAgLyogVGhlIHNlY3RvcnMgd2lsbCBiZSBtb2RpZmllZCBhbmQgdXNlZCBieSBzeXNsaW51eF9wYXRjaCgpICovCisrICAgICAgICByZXR2YWwgPSBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZTJmcywgbmV3aW5vLCBzZWN0b3JzLCBuc2VjdCk7CisrICAgICAgICBpZiAocmV0dmFsKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgIC8qIENyZWF0ZSB0aGUgbW9kaWZpZWQgaW1hZ2UgaW4gbWVtb3J5ICovCisrICAgICAgICBtb2RieXRlcyA9IHN5c2xpbnV4X3BhdGNoKHNlY3RvcnMsIG5zZWN0LCBvcHQuc3R1cGlkX21vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5yYWlkX21vZGUsIHN1YmRpciwgTlVMTCk7CisrCisrICAgICAgICAvKiBSZXdyaXRlIHRoZSBmaXJzdCBtb2RieXRlcyBvZiBsZGxpbnV4LnN5cyAqLworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN0ciwgbW9kYnl0ZXMsIDApID09IC0xKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBwYXRjaCAlcy5cbiIsIHByb2dyYW0sCisrICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICB9CisrCisrZmFpbDoKKysgICAgKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTM4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK0Zyb20gYTk1YjgzMWUxOGRkMTIzZjg1OWJjNWU2YzRjZWNkY2MwMTg0ZWUzNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyIEphbiAyMDE1IDEyOjE4OjAyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNy85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcygpCisKK1RoZSBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoKSBjb25zdHVjdHMgdGhlIHNlY3RvciBhY2NvcmRpbmcgdG8gdGhlCitibWFwLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGYwYzk3YTguLmM3NDE3NTAgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDIxLDEwICs0MjEsNjAgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIHsKKyB9CisgCisrLyogVGhlIGZpbGUncyBibG9jayBjb3VudCAqLworK2ludCBibG9ja19jb3VudCA9IDA7Cisrc3RhdGljIGludCBnZXRfYmxvY2tfY291bnQoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorKwkJCSAgICAgYmxrNjRfdCAqYmxvY2tuciBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICB2b2lkICpwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKKyt7CisrICAgIGJsb2NrX2NvdW50Kys7CisrICAgIHJldHVybiAwOworK30KKysKKyAvKiBDb25zdHJ1Y3QgdGhlIGJvb3QgZmlsZSBtYXAgKi8KKyBpbnQgZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IG5ld2lubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90ICpzZWN0b3JzLCBpbnQgbnNlY3QpCisgeworKyAgICBibGs2NF90ICAgICAgICAgICAgIHBibGssIGJsa3NpemUsIGJsayA9IDA7CisrICAgIHNlY3Rvcl90ICAgICAgICAgICAgc2VjOworKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIGk7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsOworKworKyAgICBibGtzaXplID0gZnMtPmJsb2Nrc2l6ZTsKKysgICAgYmxrc2l6ZSA+Pj0gU0VDVE9SX1NISUZUOworKworKyAgICAvKiBHZXQgdGhlIHRvdGFsIGJsb2NrcyBuby4gKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBuZXdpbm8sIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLAorKyAgICAgICAgICAgIE5VTEwsIGdldF9ibG9ja19jb3VudCwgTlVMTCk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoKSBmYWlsZWQuXG4iLCBwcm9ncmFtKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAobnNlY3QpIHsKKysgICAgICAgIGlmIChibG9ja19jb3VudC0tID09IDApCisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvKiBHZXQgdGhlIHBoeXNpY2FsIGJsb2NrIG5vLiAoYm1hcCkgKi8KKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19ibWFwMihmcywgbmV3aW5vLCAwLCAwLCAwLCBibGssIDAsICZwYmxrKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZXh0MmZzX2JtYXAyKCkgZmFpbGVkLlxuIiwgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKworKyAgICAgICAgYmxrKys7CisrICAgICAgICBzZWMgPSAoc2VjdG9yX3QpcGJsayAqIGJsa3NpemU7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmxrc2l6ZTsgaSsrKSB7CisrICAgICAgICAgICAgKnNlY3RvcnMrKyA9IHNlYysrOworKyAgICAgICAgICAgIGlmICghIC0tbnNlY3QpCisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiAwOworIH0KKyAKKyBzdGF0aWMgaW50IGhhbmRsZV9hZHZfb25fZXh0KHZvaWQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDBjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoCkBAIC0wLDAgKzEsNDI3IEBACitGcm9tIDc4ZDc2Yjg3YTRiODU1ZTZiNjYxYWU0NTcyODNhNjNmMzg1YzA0YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMiBKYW4gMjAxNSAxMjoyNjo0NiArMDgwMAorU3ViamVjdDogW1BBVENIIDgvOV0gbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0OiBpbXBsZW1lbnQKKyBzeXNsaW51eF9wYXRjaF9ib290c2VjdCgpCisKK01vdmUgdGhlIHJlbGF0ZWQgZnJvbSBleHRsaW51eC9tYWluLmMgdG8gbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMsIHRoZQorc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoKSBhcmUgdXNlZCBieSBib3RoIGV4dGxpbnV4L21haW4uYyBhbmQKK2xpbnV4L3N5c2xpbnV4LmMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGV4dGxpbnV4L01ha2VmaWxlICAgICAgICAgIHwgICAzICstCisgZXh0bGludXgvbWFpbi5jICAgICAgICAgICAgfCAxNjcgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyB8IDE3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE3NSBpbnNlcnRpb25zKCspLCAxNjUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHRsaW51eC9NYWtlZmlsZSBiL2V4dGxpbnV4L01ha2VmaWxlCitpbmRleCAwMmQxZGI1Li45MGRkOTJmIDEwMDY0NAorLS0tIGEvZXh0bGludXgvTWFrZWZpbGUKKysrKyBiL2V4dGxpbnV4L01ha2VmaWxlCitAQCAtMzEsNyArMzEsOCBAQCBTUkNTICAgICA9IG1haW4uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9hZHZpby5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2Jvb3RzZWN0X2Jpbi5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhjMzJfYmluLmMgXAorLQkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYworKwkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYyBcCisrCSAgIC4uL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisgT0JKUwkgPSAkKHBhdHN1YnN0ICUuYywlLm8sJChub3RkaXIgJChTUkNTKSkpCisgCisgLlNVRkZJWEVTOiAuYyAubyAuaSAucyAuUworZGlmZiAtLWdpdCBhL2V4dGxpbnV4L21haW4uYyBiL2V4dGxpbnV4L21haW4uYworaW5kZXggMDk3NDBiZC4uNmZlMDI2ZSAxMDA2NDQKKy0tLSBhL2V4dGxpbnV4L21haW4uYworKysrIGIvZXh0bGludXgvbWFpbi5jCitAQCAtNjAsNiArNjAsNyBAQAorICNpbmNsdWRlICJzZXRhZHYuaCIKKyAjaW5jbHVkZSAic3lzbHhvcHQuaCIgLyogdW5pZmllZCBvcHRpb25zICovCisgI2luY2x1ZGUgIm1vdW50aW5mby5oIgorKyNpbmNsdWRlICJzeXNsaW51eGV4dC5oIgorIAorICNpZmRlZiBERUJVRworICMgZGVmaW5lIGRwcmludGYgcHJpbnRmCitAQCAtNjcsMTAgKzY4LDYgQEAKKyAjIGRlZmluZSBkcHJpbnRmKC4uLikgKCh2b2lkKTApCisgI2VuZGlmCisgCistI2lmbmRlZiBFWFQyX1NVUEVSX09GRlNFVAorLSNkZWZpbmUgRVhUMl9TVVBFUl9PRkZTRVQgMTAyNAorLSNlbmRpZgorLQorIC8qIFNpbmNlIHdlIGhhdmUgdW51c2VkIDIwNDggYnl0ZXMgaW4gdGhlIHByaW1hcnkgQUcgb2YgYW4gWEZTIHBhcnRpdGlvbiwKKyAgKiB3ZSB3aWxsIHVzZSB0aGUgZmlyc3QgMH41MTIgYnl0ZXMgc3RhcnRpbmcgZnJvbSAyMDQ4IGZvciB0aGUgU3lzbGludXgKKyAgKiBib290IHNlY3Rvci4KK0BAIC05MiwxMzYgKzg5LDYgQEAgc3RhdGljIGNoYXIgc3Vidm9sW0JUUkZTX1NVQlZPTF9NQVhdOworIAkJCSAgLSAyKkFEVl9TSVpFKQorIAorIC8qCistICogR2V0IHRoZSBzaXplIG9mIGEgYmxvY2sgZGV2aWNlCistICovCistc3RhdGljIHVpbnQ2NF90IGdldF9zaXplKGludCBkZXZmZCkKKy17CistICAgIHVpbnQ2NF90IGJ5dGVzOworLSAgICB1aW50MzJfdCBzZWN0czsKKy0gICAgc3RydWN0IHN0YXQgc3Q7CistCistI2lmZGVmIEJMS0dFVFNJWkU2NAorLSAgICBpZiAoIWlvY3RsKGRldmZkLCBCTEtHRVRTSVpFNjQsICZieXRlcykpCistCXJldHVybiBieXRlczsKKy0jZW5kaWYKKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgQkxLR0VUU0laRSwgJnNlY3RzKSkKKy0JcmV0dXJuICh1aW50NjRfdCkgc2VjdHMgPDwgOTsKKy0gICAgZWxzZSBpZiAoIWZzdGF0KGRldmZkLCAmc3QpICYmIHN0LnN0X3NpemUpCistCXJldHVybiBzdC5zdF9zaXplOworLSAgICBlbHNlCistCXJldHVybiAwOworLX0KKy0KKy0vKgorLSAqIEdldCBkZXZpY2UgZ2VvbWV0cnkgYW5kIHBhcnRpdGlvbiBvZmZzZXQKKy0gKi8KKy1zdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgeworLSAgICB1aW50NjRfdCBieXRlczsKKy0gICAgc3RydWN0IGhkX2dlb21ldHJ5IGc7CistfTsKKy0KKy1zdGF0aWMgaW50IHN5c2ZzX2dldF9vZmZzZXQoaW50IGRldmZkLCB1bnNpZ25lZCBsb25nICpzdGFydCkKKy17CistICAgIHN0cnVjdCBzdGF0IHN0OworLSAgICBjaGFyIHN5c2ZzX25hbWVbMTI4XTsKKy0gICAgRklMRSAqZjsKKy0gICAgaW50IHJ2OworLQorLSAgICBpZiAoZnN0YXQoZGV2ZmQsICZzdCkpCistCXJldHVybiAtMTsKKy0KKy0gICAgaWYgKChzaXplX3Qpc25wcmludGYoc3lzZnNfbmFtZSwgc2l6ZW9mIHN5c2ZzX25hbWUsCistCQkJICIvc3lzL2Rldi9ibG9jay8ldToldS9zdGFydCIsCistCQkJIG1ham9yKHN0LnN0X3JkZXYpLCBtaW5vcihzdC5zdF9yZGV2KSkKKy0JPj0gc2l6ZW9mIHN5c2ZzX25hbWUpCistCXJldHVybiAtMTsKKy0KKy0gICAgZiA9IGZvcGVuKHN5c2ZzX25hbWUsICJyIik7CistICAgIGlmICghZikKKy0JcmV0dXJuIC0xOworLQorLSAgICBydiA9IGZzY2FuZihmLCAiJWx1Iiwgc3RhcnQpOworLSAgICBmY2xvc2UoZik7CistCistICAgIHJldHVybiAocnYgPT0gMSkgPyAwIDogLTE7CistfQorLQorLS8qIFN0YW5kYXJkIGZsb3BweSBkaXNrIGdlb21ldHJpZXMsIHBsdXMgTFMtMTIwLiAgWmlwZGlzayBnZW9tZXRyeQorLSAgICh4LzY0LzMyKSBpcyB0aGUgZmluYWwgZmFsbGJhY2suICBJIGRvbid0IGtub3cgd2hhdCBMUy0yNDAgaGFzCistICAgYXMgaXRzIGdlb21ldHJ5LCBzaW5jZSBJIGRvbid0IGhhdmUgb25lIGFuZCBkb24ndCBrbm93IGFueW9uZSB0aGF0IGRvZXMsCistICAgYW5kIEdvb2dsZSB3YXNuJ3QgaGVscGZ1bC4uLiAqLworLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgc3RhbmRhcmRfZ2VvbWV0cmllc1tdID0geworLSAgICB7MzYwICogMTAyNCwgezIsIDksIDQwLCAwfX0sCistICAgIHs3MjAgKiAxMDI0LCB7MiwgOSwgODAsIDB9fSwKKy0gICAgezEyMDAgKiAxMDI0LCB7MiwgMTUsIDgwLCAwfX0sCistICAgIHsxNDQwICogMTAyNCwgezIsIDE4LCA4MCwgMH19LAorLSAgICB7MTY4MCAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKy0gICAgezE3MjIgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCistICAgIHsyODgwICogMTAyNCwgezIsIDM2LCA4MCwgMH19LAorLSAgICB7Mzg0MCAqIDEwMjQsIHsyLCA0OCwgODAsIDB9fSwKKy0gICAgezEyMzI2NCAqIDEwMjQsIHs4LCAzMiwgOTYzLCAwfX0sCS8qIExTMTIwICovCistICAgIHswLCB7MCwgMCwgMCwgMH19CistfTsKKy0KKy1pbnQgZ2V0X2dlb21ldHJ5KGludCBkZXZmZCwgdWludDY0X3QgdG90YWxieXRlcywgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCisteworLSAgICBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmZF9zdHI7CistICAgIHN0cnVjdCBsb29wX2luZm8gbGk7CistICAgIHN0cnVjdCBsb29wX2luZm82NCBsaTY0OworLSAgICBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgKmdwOworLSAgICBpbnQgcnYgPSAwOworLQorLSAgICBtZW1zZXQoZ2VvLCAwLCBzaXplb2YgKmdlbyk7CistCistICAgIGlmICghaW9jdGwoZGV2ZmQsIEhESU9fR0VUR0VPLCBnZW8pKSB7CistCWdvdG8gb2s7CistICAgIH0gZWxzZSBpZiAoIWlvY3RsKGRldmZkLCBGREdFVFBSTSwgJmZkX3N0cikpIHsKKy0JZ2VvLT5oZWFkcyA9IGZkX3N0ci5oZWFkOworLQlnZW8tPnNlY3RvcnMgPSBmZF9zdHIuc2VjdDsKKy0JZ2VvLT5jeWxpbmRlcnMgPSBmZF9zdHIudHJhY2s7CistCWdlby0+c3RhcnQgPSAwOworLQlnb3RvIG9rOworLSAgICB9CistCistICAgIC8qIERpZG4ndCB3b3JrLiAgTGV0J3Mgc2VlIGlmIHRoaXMgaXMgb25lIG9mIHRoZSBzdGFuZGFyZCBnZW9tZXRyaWVzICovCistICAgIGZvciAoZ3AgPSBzdGFuZGFyZF9nZW9tZXRyaWVzOyBncC0+Ynl0ZXM7IGdwKyspIHsKKy0JaWYgKGdwLT5ieXRlcyA9PSB0b3RhbGJ5dGVzKSB7CistCSAgICBtZW1jcHkoZ2VvLCAmZ3AtPmcsIHNpemVvZiAqZ2VvKTsKKy0JICAgIGdvdG8gb2s7CistCX0KKy0gICAgfQorLQorLSAgICAvKiBEaWRuJ3Qgd29yayBlaXRoZXIuLi4gYXNzaWduIGEgZ2VvbWV0cnkgb2YgNjQgaGVhZHMsIDMyIHNlY3RvcnM7IHRoaXMgaXMKKy0gICAgICAgd2hhdCB6aXBkaXNrcyB1c2UsIHNvIHRoaXMgd291bGQgaGVscCBpZiBzb21lb25lIGhhcyBhIFVTQiBrZXkgdGhhdAorLSAgICAgICB0aGV5J3JlIGJvb3RpbmcgaW4gVVNCLVpJUCBtb2RlLiAqLworLQorLSAgICBnZW8tPmhlYWRzID0gb3B0LmhlYWRzID8gOiA2NDsKKy0gICAgZ2VvLT5zZWN0b3JzID0gb3B0LnNlY3RvcnMgPyA6IDMyOworLSAgICBnZW8tPmN5bGluZGVycyA9IHRvdGFsYnl0ZXMgLyAoZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyA8PCBTRUNUT1JfU0hJRlQpOworLSAgICBnZW8tPnN0YXJ0ID0gMDsKKy0KKy0gICAgaWYgKCFvcHQuc2VjdG9ycyAmJiAhb3B0LmhlYWRzKSB7CistCWZwcmludGYoc3RkZXJyLAorLQkJIldhcm5pbmc6IHVuYWJsZSB0byBvYnRhaW4gZGV2aWNlIGdlb21ldHJ5IChkZWZhdWx0aW5nIHRvICVkIGhlYWRzLCAlZCBzZWN0b3JzKVxuIgorLQkJIiAgICAgICAgIChvbiBoYXJkIGRpc2tzLCB0aGlzIGlzIHVzdWFsbHkgaGFybWxlc3MuKVxuIiwKKy0JCWdlby0+aGVhZHMsIGdlby0+c2VjdG9ycyk7CistCXJ2ID0gMTsJCQkvKiBTdWJvcHRpbWFsIHJlc3VsdCAqLworLSAgICB9CistCistb2s6CistICAgIC8qIElmIHRoaXMgaXMgYSBsb29wYmFjayBkZXZpY2UsIHRyeSB0byBzZXQgdGhlIHN0YXJ0ICovCistICAgIGlmICghaW9jdGwoZGV2ZmQsIExPT1BfR0VUX1NUQVRVUzY0LCAmbGk2NCkpCistCWdlby0+c3RhcnQgPSBsaTY0LmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGVsc2UgaWYgKCFpb2N0bChkZXZmZCwgTE9PUF9HRVRfU1RBVFVTLCAmbGkpKQorLQlnZW8tPnN0YXJ0ID0gKHVuc2lnbmVkIGludClsaS5sb19vZmZzZXQgPj4gU0VDVE9SX1NISUZUOworLSAgICBlbHNlIGlmICghc3lzZnNfZ2V0X29mZnNldChkZXZmZCwgJmdlby0+c3RhcnQpKSB7CistCS8qIE9LICovCistICAgIH0KKy0KKy0gICAgcmV0dXJuIHJ2OworLX0KKy0KKy0vKgorICAqIFF1ZXJ5IHRoZSBkZXZpY2UgZ2VvbWV0cnkgYW5kIHB1dCBpdCBpbnRvIHRoZSBib290IHNlY3Rvci4KKyAgKiBNYXAgdGhlIGZpbGUgYW5kIHB1dCB0aGUgbWFwIGluIHRoZSBib290IHNlY3RvciBhbmQgZmlsZS4KKyAgKiBTdGljayB0aGUgImN1cnJlbnQgZGlyZWN0b3J5IiBpbm9kZSBudW1iZXIgaW50byB0aGUgZmlsZS4KK0BAIC0yMzEsMTEgKzk4LDggQEAgb2s6Cisgc3RhdGljIGludCBwYXRjaF9maWxlX2FuZF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkaXIsIGludCBkZXZmZCkKKyB7CisgICAgIHN0cnVjdCBzdGF0IGRpcnN0LCB4ZHN0OworLSAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZ2VvOworICAgICBzZWN0b3JfdCAqc2VjdHA7CistICAgIHVpbnQ2NF90IHRvdGFsYnl0ZXMsIHRvdGFsc2VjdG9yczsKKyAgICAgaW50IG5zZWN0OworLSAgICBzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICpzYnM7CisgICAgIGNoYXIgKmRpcnBhdGgsICpzdWJwYXRoLCAqeGRpcnBhdGg7CisgICAgIGludCBydjsKKyAKK0BAIC0yNzksMzMgKzE0Myw4IEBAIHN0YXRpYyBpbnQgcGF0Y2hfZmlsZV9hbmRfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGlyLCBpbnQgZGV2ZmQpCisgICAgIC8qIE5vdyBzdWJwYXRoIHNob3VsZCBjb250YWluIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBmcyBiYXNlICovCisgICAgIGRwcmludGYoInN1YnBhdGggPSAlc1xuIiwgc3VicGF0aCk7CisgCistICAgIHRvdGFsYnl0ZXMgPSBnZXRfc2l6ZShkZXZmZCk7CistICAgIGdldF9nZW9tZXRyeShkZXZmZCwgdG90YWxieXRlcywgJmdlbyk7CistCistICAgIGlmIChvcHQuaGVhZHMpCistCWdlby5oZWFkcyA9IG9wdC5oZWFkczsKKy0gICAgaWYgKG9wdC5zZWN0b3JzKQorLQlnZW8uc2VjdG9ycyA9IG9wdC5zZWN0b3JzOworLQorLSAgICAvKiBQYXRjaCB0aGlzIGludG8gYSBmYWtlIEZBVCBzdXBlcmJsb2NrLiAgVGhpcyBpc24ndCBiZWNhdXNlCistICAgICAgIEZBVCBpcyBhIGdvb2QgZm9ybWF0IGluIGFueSB3YXksIGl0J3MgYmVjYXVzZSBpdCBsZXRzIHRoZQorLSAgICAgICBlYXJseSBib290c3RyYXAgc2hhcmUgY29kZSB3aXRoIHRoZSBGQVQgdmVyc2lvbi4gKi8KKy0gICAgZHByaW50ZigiaGVhZHMgPSAldSwgc2VjdCA9ICV1XG4iLCBnZW8uaGVhZHMsIGdlby5zZWN0b3JzKTsKKy0KKy0gICAgc2JzID0gKHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKilzeXNsaW51eF9ib290c2VjdDsKKy0KKy0gICAgdG90YWxzZWN0b3JzID0gdG90YWxieXRlcyA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGlmICh0b3RhbHNlY3RvcnMgPj0gNjU1MzYpIHsKKy0Jc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgMCk7CistICAgIH0gZWxzZSB7CistCXNldF8xNigmc2JzLT5ic1NlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CistICAgIH0KKy0gICAgc2V0XzMyKCZzYnMtPmJzSHVnZVNlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CistCistICAgIHNldF8xNigmc2JzLT5ic0J5dGVzUGVyU2VjLCBTRUNUT1JfU0laRSk7CistICAgIHNldF8xNigmc2JzLT5ic1NlY1BlclRyYWNrLCBnZW8uc2VjdG9ycyk7CistICAgIHNldF8xNigmc2JzLT5ic0hlYWRzLCBnZW8uaGVhZHMpOworLSAgICBzZXRfMzIoJnNicy0+YnNIaWRkZW5TZWNzLCBnZW8uc3RhcnQpOworKyAgICAvKiBQYXRjaCBzeXNsaW51eF9ib290c2VjdCAqLworKyAgICBzeXNsaW51eF9wYXRjaF9ib290c2VjdChkZXZmZCk7CisgCisgICAgIC8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworIAorZGlmZiAtLWdpdCBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK2luZGV4IGJiNTRjZWYuLjVhNDQyM2IgMTAwNjQ0CistLS0gYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK0BAIC0xLDcgKzEsMTc3IEBACisgI2RlZmluZSBfR05VX1NPVVJDRQorIAorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4KKysKKysjaW5jbHVkZSAibGludXhpb2N0bC5oIgorKyNpbmNsdWRlICJzeXNsaW51eC5oIgorKyNpbmNsdWRlICJzeXNseGludC5oIgorKyNpbmNsdWRlICJzeXNseG9wdC5oIgorKworKy8qCisrICogR2V0IHRoZSBzaXplIG9mIGEgYmxvY2sgZGV2aWNlCisrICovCisrc3RhdGljIHVpbnQ2NF90IGdldF9zaXplKGludCBkZXZfZmQpCisreworKyAgICB1aW50NjRfdCBieXRlczsKKysgICAgdWludDMyX3Qgc2VjdHM7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKworKyNpZmRlZiBCTEtHRVRTSVpFNjQKKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIEJMS0dFVFNJWkU2NCwgJmJ5dGVzKSkKKysJcmV0dXJuIGJ5dGVzOworKyNlbmRpZgorKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgQkxLR0VUU0laRSwgJnNlY3RzKSkKKysJcmV0dXJuICh1aW50NjRfdCkgc2VjdHMgPDwgOTsKKysgICAgZWxzZSBpZiAoIWZzdGF0KGRldl9mZCwgJnN0KSAmJiBzdC5zdF9zaXplKQorKwlyZXR1cm4gc3Quc3Rfc2l6ZTsKKysgICAgZWxzZQorKwlyZXR1cm4gMDsKKyt9CisrCisrLyoKKysgKiBHZXQgZGV2aWNlIGdlb21ldHJ5IGFuZCBwYXJ0aXRpb24gb2Zmc2V0CisrICovCisrc3RhdGljIHN0cnVjdCBnZW9tZXRyeV90YWJsZSB7CisrICAgIHVpbnQ2NF90IGJ5dGVzOworKyAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZzsKKyt9OworKworK3N0YXRpYyBpbnQgc3lzZnNfZ2V0X29mZnNldChpbnQgZGV2X2ZkLCB1bnNpZ25lZCBsb25nICpzdGFydCkKKyt7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKyAgICBjaGFyIHN5c2ZzX25hbWVbMTI4XTsKKysgICAgRklMRSAqZjsKKysgICAgaW50IHJ2OworKworKyAgICBpZiAoZnN0YXQoZGV2X2ZkLCAmc3QpKQorKwlyZXR1cm4gLTE7CisrCisrICAgIGlmICgoc2l6ZV90KXNucHJpbnRmKHN5c2ZzX25hbWUsIHNpemVvZiBzeXNmc19uYW1lLAorKwkJCSAiL3N5cy9kZXYvYmxvY2svJXU6JXUvc3RhcnQiLAorKwkJCSBtYWpvcihzdC5zdF9yZGV2KSwgbWlub3Ioc3Quc3RfcmRldikpCisrCT49IHNpemVvZiBzeXNmc19uYW1lKQorKwlyZXR1cm4gLTE7CisrCisrICAgIGYgPSBmb3BlbihzeXNmc19uYW1lLCAiciIpOworKyAgICBpZiAoIWYpCisrCXJldHVybiAtMTsKKysKKysgICAgcnYgPSBmc2NhbmYoZiwgIiVsdSIsIHN0YXJ0KTsKKysgICAgZmNsb3NlKGYpOworKworKyAgICByZXR1cm4gKHJ2ID09IDEpID8gMCA6IC0xOworK30KKysKKysvKiBTdGFuZGFyZCBmbG9wcHkgZGlzayBnZW9tZXRyaWVzLCBwbHVzIExTLTEyMC4gIFppcGRpc2sgZ2VvbWV0cnkKKysgICAoeC82NC8zMikgaXMgdGhlIGZpbmFsIGZhbGxiYWNrLiAgSSBkb24ndCBrbm93IHdoYXQgTFMtMjQwIGhhcworKyAgIGFzIGl0cyBnZW9tZXRyeSwgc2luY2UgSSBkb24ndCBoYXZlIG9uZSBhbmQgZG9uJ3Qga25vdyBhbnlvbmUgdGhhdCBkb2VzLAorKyAgIGFuZCBHb29nbGUgd2Fzbid0IGhlbHBmdWwuLi4gKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IGdlb21ldHJ5X3RhYmxlIHN0YW5kYXJkX2dlb21ldHJpZXNbXSA9IHsKKysgICAgezM2MCAqIDEwMjQsIHsyLCA5LCA0MCwgMH19LAorKyAgICB7NzIwICogMTAyNCwgezIsIDksIDgwLCAwfX0sCisrICAgIHsxMjAwICogMTAyNCwgezIsIDE1LCA4MCwgMH19LAorKyAgICB7MTQ0MCAqIDEwMjQsIHsyLCAxOCwgODAsIDB9fSwKKysgICAgezE2ODAgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCisrICAgIHsxNzIyICogMTAyNCwgezIsIDIxLCA4MCwgMH19LAorKyAgICB7Mjg4MCAqIDEwMjQsIHsyLCAzNiwgODAsIDB9fSwKKysgICAgezM4NDAgKiAxMDI0LCB7MiwgNDgsIDgwLCAwfX0sCisrICAgIHsxMjMyNjQgKiAxMDI0LCB7OCwgMzIsIDk2MywgMH19LAkvKiBMUzEyMCAqLworKyAgICB7MCwgezAsIDAsIDAsIDB9fQorK307CisrCisrc3RhdGljIGludCBnZXRfZ2VvbWV0cnkoaW50IGRldl9mZCwgdWludDY0X3QgdG90YWxieXRlcywgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCisreworKyAgICBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmZF9zdHI7CisrICAgIHN0cnVjdCBsb29wX2luZm8gbGk7CisrICAgIHN0cnVjdCBsb29wX2luZm82NCBsaTY0OworKyAgICBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgKmdwOworKyAgICBpbnQgcnYgPSAwOworKworKyAgICBtZW1zZXQoZ2VvLCAwLCBzaXplb2YgKmdlbyk7CisrCisrICAgIGlmICghaW9jdGwoZGV2X2ZkLCBIRElPX0dFVEdFTywgZ2VvKSkgeworKwlnb3RvIG9rOworKyAgICB9IGVsc2UgaWYgKCFpb2N0bChkZXZfZmQsIEZER0VUUFJNLCAmZmRfc3RyKSkgeworKwlnZW8tPmhlYWRzID0gZmRfc3RyLmhlYWQ7CisrCWdlby0+c2VjdG9ycyA9IGZkX3N0ci5zZWN0OworKwlnZW8tPmN5bGluZGVycyA9IGZkX3N0ci50cmFjazsKKysJZ2VvLT5zdGFydCA9IDA7CisrCWdvdG8gb2s7CisrICAgIH0KKysKKysgICAgLyogRGlkbid0IHdvcmsuICBMZXQncyBzZWUgaWYgdGhpcyBpcyBvbmUgb2YgdGhlIHN0YW5kYXJkIGdlb21ldHJpZXMgKi8KKysgICAgZm9yIChncCA9IHN0YW5kYXJkX2dlb21ldHJpZXM7IGdwLT5ieXRlczsgZ3ArKykgeworKwlpZiAoZ3AtPmJ5dGVzID09IHRvdGFsYnl0ZXMpIHsKKysJICAgIG1lbWNweShnZW8sICZncC0+Zywgc2l6ZW9mICpnZW8pOworKwkgICAgZ290byBvazsKKysJfQorKyAgICB9CisrCisrICAgIC8qIERpZG4ndCB3b3JrIGVpdGhlci4uLiBhc3NpZ24gYSBnZW9tZXRyeSBvZiA2NCBoZWFkcywgMzIgc2VjdG9yczsgdGhpcyBpcworKyAgICAgICB3aGF0IHppcGRpc2tzIHVzZSwgc28gdGhpcyB3b3VsZCBoZWxwIGlmIHNvbWVvbmUgaGFzIGEgVVNCIGtleSB0aGF0CisrICAgICAgIHRoZXkncmUgYm9vdGluZyBpbiBVU0ItWklQIG1vZGUuICovCisrCisrICAgIGdlby0+aGVhZHMgPSBvcHQuaGVhZHMgPyA6IDY0OworKyAgICBnZW8tPnNlY3RvcnMgPSBvcHQuc2VjdG9ycyA/IDogMzI7CisrICAgIGdlby0+Y3lsaW5kZXJzID0gdG90YWxieXRlcyAvIChnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCk7CisrICAgIGdlby0+c3RhcnQgPSAwOworKworKyAgICBpZiAoIW9wdC5zZWN0b3JzICYmICFvcHQuaGVhZHMpIHsKKysJZnByaW50ZihzdGRlcnIsCisrCQkiV2FybmluZzogdW5hYmxlIHRvIG9idGFpbiBkZXZpY2UgZ2VvbWV0cnkgKGRlZmF1bHRpbmcgdG8gJWQgaGVhZHMsICVkIHNlY3RvcnMpXG4iCisrCQkiICAgICAgICAgKG9uIGhhcmQgZGlza3MsIHRoaXMgaXMgdXN1YWxseSBoYXJtbGVzcy4pXG4iLAorKwkJZ2VvLT5oZWFkcywgZ2VvLT5zZWN0b3JzKTsKKysJcnYgPSAxOwkJCS8qIFN1Ym9wdGltYWwgcmVzdWx0ICovCisrICAgIH0KKysKKytvazoKKysgICAgLyogSWYgdGhpcyBpcyBhIGxvb3BiYWNrIGRldmljZSwgdHJ5IHRvIHNldCB0aGUgc3RhcnQgKi8KKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIExPT1BfR0VUX1NUQVRVUzY0LCAmbGk2NCkpCisrCWdlby0+c3RhcnQgPSBsaTY0LmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CisrICAgIGVsc2UgaWYgKCFpb2N0bChkZXZfZmQsIExPT1BfR0VUX1NUQVRVUywgJmxpKSkKKysJZ2VvLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpbGkubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKysgICAgZWxzZSBpZiAoIXN5c2ZzX2dldF9vZmZzZXQoZGV2X2ZkLCAmZ2VvLT5zdGFydCkpIHsKKysJLyogT0sgKi8KKysgICAgfQorKworKyAgICByZXR1cm4gcnY7CisrfQorKworKworIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisgdm9pZCBzeXNsaW51eF9wYXRjaF9ib290c2VjdChpbnQgZGV2X2ZkKQorIHsKKysgICAgdWludDY0X3QgdG90YWxieXRlcywgdG90YWxzZWN0b3JzOworKyAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZ2VvOworKyAgICBzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICpzYnM7CisrCisrICAgIHRvdGFsYnl0ZXMgPSBnZXRfc2l6ZShkZXZfZmQpOworKyAgICBnZXRfZ2VvbWV0cnkoZGV2X2ZkLCB0b3RhbGJ5dGVzLCAmZ2VvKTsKKysKKysgICAgaWYgKG9wdC5oZWFkcykKKysJZ2VvLmhlYWRzID0gb3B0LmhlYWRzOworKyAgICBpZiAob3B0LnNlY3RvcnMpCisrCWdlby5zZWN0b3JzID0gb3B0LnNlY3RvcnM7CisrCisrICAgIC8qIFBhdGNoIHRoaXMgaW50byBhIGZha2UgRkFUIHN1cGVyYmxvY2suICBUaGlzIGlzbid0IGJlY2F1c2UKKysgICAgICAgRkFUIGlzIGEgZ29vZCBmb3JtYXQgaW4gYW55IHdheSwgaXQncyBiZWNhdXNlIGl0IGxldHMgdGhlCisrICAgICAgIGVhcmx5IGJvb3RzdHJhcCBzaGFyZSBjb2RlIHdpdGggdGhlIEZBVCB2ZXJzaW9uLiAqLworKyAgICBzYnMgPSAoc3RydWN0IGZhdF9ib290X3NlY3RvciAqKXN5c2xpbnV4X2Jvb3RzZWN0OworKworKyAgICB0b3RhbHNlY3RvcnMgPSB0b3RhbGJ5dGVzID4+IFNFQ1RPUl9TSElGVDsKKysgICAgaWYgKHRvdGFsc2VjdG9ycyA+PSA2NTUzNikgeworKwlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCAwKTsKKysgICAgfSBlbHNlIHsKKysJc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKysgICAgfQorKyAgICBzZXRfMzIoJnNicy0+YnNIdWdlU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKysKKysgICAgc2V0XzE2KCZzYnMtPmJzQnl0ZXNQZXJTZWMsIFNFQ1RPUl9TSVpFKTsKKysgICAgc2V0XzE2KCZzYnMtPmJzU2VjUGVyVHJhY2ssIGdlby5zZWN0b3JzKTsKKysgICAgc2V0XzE2KCZzYnMtPmJzSGVhZHMsIGdlby5oZWFkcyk7CisrICAgIHNldF8zMigmc2JzLT5ic0hpZGRlblNlY3MsIGdlby5zdGFydCk7CisgfQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4OWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDc2YzQ2NWU4NzMxMmRiYzZjZmZkMDU0MjdmMWY0ZDJlYmRlZTRmMTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMiBKYW4gMjAxNSAxMjoyODozNSArMDgwMAorU3ViamVjdDogW1BBVENIIDkvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBpbnN0YWxsX2Jvb3RibG9jaygpCisKK1JlZmVyIHRvIHRoZSBpbnN0YWxsX2Jvb3RibG9jaygpIGluIGV4dGxpbnV4L21haW4uYyB0byBtYWtlCitsaW51eC9zeXNsaW51eC5jJ3MgaW5zdGFsbF9ib290YmxvY2soKSB3aGljaCBvbmx5IHN1cHBvcnRzIGV4dDIvMy80LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGM3NDE3NTAuLjkxN2Y4M2EgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDE5LDYgKzQxOSwyNiBAQCBzdGF0aWMgaW50IGV4dF9maWxlX3dyaXRlKGV4dDJfZmlsZV90IGUyX2ZpbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAorICAqLworIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyB7CisrICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNiOworKworKyAgICBpZiAoeHByZWFkKGZkLCAmc2IsIHNpemVvZiBzYiwgRVhUMl9TVVBFUl9PRkZTRVQgKyBvcHQub2Zmc2V0KSAhPSBzaXplb2Ygc2IpIHsKKysgICAgICAgIHBlcnJvcigicmVhZGluZyBzdXBlcmJsb2NrIik7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICBpZiAoc2Iuc19tYWdpYyAhPSBFWFQyX1NVUEVSX01BR0lDKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKysgICAgICAgICAgICAgICAgIm5vIGV4dDIvMy80IHN1cGVyYmxvY2sgZm91bmQgb24gJXNcbiIsIGRldmljZSk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICBpZiAoeHB3cml0ZShmZCwgc3lzbGludXhfYm9vdHNlY3QsIHN5c2xpbnV4X2Jvb3RzZWN0X2xlbiwgMCkKKysgICAgICAgICE9IChzaWduZWQpc3lzbGludXhfYm9vdHNlY3RfbGVuKSB7CisrICAgICAgICBwZXJyb3IoIndyaXRpbmcgYm9vdGJsb2NrIik7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyB9CisgCisgLyogVGhlIGZpbGUncyBibG9jayBjb3VudCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJiMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitzeXNsaW51eC1uYXRpdmU6IGZpeCBwYXJhbGxlbCBidWlsZGluZyBpc3N1ZQorCitUaGVyZSBtaWdodCBiZSBhbiBlcnJvciB3aGVuIHBhcmFsbGVsIGJ1aWxkOgorCitbc25pcF0KK2NwOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBgdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvCitzeXNsaW51eC9jb20zMi9pbmNsdWRlL2dwbGluY2x1ZGUnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CittYWtlWzRdOiAqKiogW2luc3RhbGxdIEVycm9yIDEKK21ha2VbM106ICoqKiBbZ3BsbGliXSBFcnJvciAyCitbc25pcF0KKworVGhpcyBpcyBhIHBvdGVudGlhbCBpc3N1ZS4gSW4gJHtTfS9jb20zMi9ncGxsaWIvTWFrZWZpbGUgZmlsZSwKK2luc3RhbGwgdGFyZ2V0IHdhbnRzIHRvIGNvcHkgJChTUkMpLy4uL2dwbGluY2x1ZGUgdG8KKyQoSU5TVEFMTFJPT1QpJChDT00zMkRJUikvaW5jbHVkZS8gZGlyZWN0b3J5LCBidXQgaW4gJHtTfS9jb20zMi9saWIvTWFrZWZpbGUKK2ZpbGUsIHRoZSBpbnN0YWxsIHRhcmdldCB3aWxsIHJlbW92ZSAkKElOU1RBTExST09UKSQoQ09NMzJESVIpL2luY2x1ZGUKK2RpcmVjdG9yeS4gV2UgbmVlZCB0byBkbyBjb20zMi9saWIgZmlyc3QuCisKK1RoZSBwYXRjaCBtYWtlIGNvbTMyL2dwbGxpYiBkZXBlbmRzIG9uIGNvbTMyL2xpYiB0byBmaXggdGhpcyBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29tMzIvTWFrZWZpbGUgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworSW5kZXg6IHN5c2xpbnV4LTYuMDMvY29tMzIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNsaW51eC02LjAzLm9yaWcvY29tMzIvTWFrZWZpbGUKKysrKyBzeXNsaW51eC02LjAzL2NvbTMyL01ha2VmaWxlCitAQCAtMjEsMyArMjEsNCBAQCByb3NoOiBsaWIgbGlidXRpbAorIHNhbXBsZXM6IGxpYnV0aWwgZWxmbGluay9sZGxpbnV4Cisgc3lzZHVtcDogbGliIGxpYnV0aWwgbGlidXBsb2FkIGdwbGxpYgorIGx1YS9zcmM6IGNtZW51IG1vZHVsZXMKKytncGxsaWI6IGxpYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzE0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSA0OTBmYzNiYmQ2NWMyYzI1MmMxZmRmM2RhMGZhYzk4OThhYTllZWE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE1IEF1ZyAyMDE0IDIxOjA5OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbTMyL01ha2VmaWxlOiBmaXggcGFyYWxsZWwgaXNzdWUKKworRml4ZWQ6CitjcCAtciBzeXNsaW51eC02LjAxL2NvbTMyL2xpYnVwbG9hZC8qLmggaW1hZ2UvdXNyL3NoYXJlL3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUvCitbc25pcF0KK3JtIC1yZiBpbWFnZS91c3Ivc2hhcmUvc3lzbGludXgvY29tMzIvaW5jbHVkZQorW3NuaXBdCitjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgYGltYWdlL3Vzci9zaGFyZS9zeXNsaW51eC9jb20zMi9pbmNsdWRlL3NlcmlhbC5oJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitUaGUgY3AgaXMgaGFwcGVuZWQgaW4gdGhlICJsaWJ1cGxvYWQiIGRpciwgd2hpbGUgInJtIC1mciIgaXMgaGFwcGVuZCBpbgorImxpYiIgZGlyLCBsZXQgImxpYnVwbG9hZCIgZGVwZW5kICJsaWIiIHdpbGwgZml4IHRoZSBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb20zMi9NYWtlZmlsZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY29tMzIvTWFrZWZpbGUgYi9jb20zMi9NYWtlZmlsZQoraW5kZXggOWExNzIxYi4uZjE3MmRiMiAxMDA2NDQKKy0tLSBhL2NvbTMyL01ha2VmaWxlCisrKysgYi9jb20zMi9NYWtlZmlsZQorQEAgLTIxLDMgKzIxLDQgQEAgcm9zaDogbGliIGxpYnV0aWwKKyBzYW1wbGVzOiBsaWJ1dGlsIGVsZmxpbmsvbGRsaW51eAorIHN5c2R1bXA6IGxpYnVwbG9hZCBncGxsaWIKKyBncGxsaWI6IGxpYgorK2xpYnVwbG9hZDogbGliCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzAwM2UxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVGhpcyBzY3JpcHQgdHJ5IHRvIGNhbGwgZ2l0IHN1Ym1vZHVsZSwgc2luY2Ugd2UgYXJlIGRvd25sb2FkaW5nCit0aGUgdGFyYmFsbCBpdCBzZWVtcyBpbi1jb3JyZWN0IHRvIGRvIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogc3lzbGludXgtNi4wMy9lZmkvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNsaW51eC02LjAzLm9yaWcvZWZpL01ha2VmaWxlCisrKysgc3lzbGludXgtNi4wMy9lZmkvTWFrZWZpbGUKK0BAIC0xMDEsNyArMTAxLDYgQEAgdGlkeSBkaXN0OgorIAlybSAtZiAqLnNvICoubyB3cmFwcGVyCisgCWZpbmQgLiBcKCAtbmFtZSBcKi5vIC1vIC1uYW1lIFwqLmEgLW8gLW5hbWUgLlwqLmQgLW8gLW5hbWUgXCoudG1wIFwpIC1wcmludDAgfCBcCisgCQl4YXJncyAtMHIgcm0gLWYKKy0JJCh0b3BkaXIpL2VmaS9jbGVhbi1nbnUtZWZpLnNoICQoRUZJX1NVQkFSQ0gpICQob2JqZGlyKQorIAorIGNsZWFuOiB0aWR5CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOWFlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYgpAQCAtMCwwICsxLDg5IEBACitTVU1NQVJZID0gIk11bHRpLXB1cnBvc2UgbGludXggYm9vdGxvYWRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9zeXNsaW51eC56eXRvci5jb20vIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTM1O2VuZGxpbmU9NDE7bWQ1PTU1OGYyYzcxY2IxZmI5YmE1MTFjY2Q0ODU4ZTQ4ZThhIgorCisjIElmIHlvdSByZWFsbHkgd2FudCB0byBydW4gc3lzbGludXgsIHlvdSBuZWVkIG10b29scy4gIFdlIGp1c3Qgd2FudCB0aGUKKyMgbGRsaW51eC4qIHN0dWZmIGZvciBub3csIHNvIHNraXAgbXRvb2xzLW5hdGl2ZQorREVQRU5EUyA9ICJuYXNtLW5hdGl2ZSB1dGlsLWxpbnV4IGUyZnNwcm9ncyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2Jvb3Qvc3lzbGludXgvc3lzbGludXgtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsaW51eC1saWJ1cGxvYWQtZGVwZW5kLWxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsaW51eC1yZW1vdmUtY2xlYW4tc2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtb3Blbl9leHQyX2ZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1oYW5kbGVfYWR2X29uX2V4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC13cml0ZV90b19leHQtYW5kLWFkZC1zeXNsaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtbGliaW5zdGFsbGVyLXN5c2xpbnV4ZXh0LWltcGxlbWVudC1zeXNsaW51eF9wYXRjaF9iby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjkyYTI1M2RmOTIxMWU5YzIwMTcyNzk2ZWNmMzg4ZjEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ZDM5ODZkMmJlYTEwOWQ1ZGMwZTRmOGM0ODIyYTQ1OTI3NmNmMDIxMTI1ZThjOWYyM2MzY2NhNWQ4Yzg1MGUiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisjIERvbid0IGxldCB0aGUgc2FuaXR5IGNoZWNrZXIgdHJpcCBvbiB0aGUgMzIgYml0IHJlYWwgbW9kZSBCSU9TIGJpbmFyaWVzCitJTlNBTkVfU0tJUF8ke1BOfS1taXNjID0gImFyY2giCitJTlNBTkVfU0tJUF8ke1BOfS1jaGFpbiA9ICJhcmNoIgorCitFWFRSQV9PRU1BS0UgPSAiIFwKKwlCSU5ESVI9JHtiaW5kaXJ9IFNCSU5ESVI9JHtzYmluZGlyfSBMSUJESVI9JHtsaWJkaXJ9IFwKKwlEQVRBRElSPSR7ZGF0YWRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNESVI9JHtpbmNsdWRlZGlyfSBcCisiCisjIHN5c2xpbnV4IHVzZXMgJExEIGZvciBsaW5raW5nLCBzdHJpcCBgLVdsLCcgc28gaXQgY2FuIHdvcmsKK2V4cG9ydCBMREZMQUdTID0gImBlY2hvICRMREZMQUdTIHwgc2VkICdzLy1XbCwvL2cnYCIKKworZG9fY29uZmlndXJlKCkgeworCSMgZHJvcCB3aW4zMiB0YXJnZXRzIG9yIGJ1aWxkIGZhaWxzCisJc2VkIC1lICdzLHdpbjMyL1xTKiwsZycgLWkgTWFrZWZpbGUKKworCSMgY2xlYW4gaW5zdGFsbGVyIGV4ZWN1dGFibGVzIGluY2x1ZGVkIGluIHNvdXJjZSB0YXJiYWxsCisJb2VfcnVubWFrZSBjbGVhbiBmaXJtd2FyZT0iZWZpMzIiIEVGSUlOQz0iJHtpbmNsdWRlZGlyfSIKKwkjIE5PVEU6IFRoZXJlIGlzIGEgdGVtcG9yYXJ5IHdvcmsgYXJvdW5kIGFib3ZlIHRvIHNwZWNpZnkKKwkjCXRoZSBlZmkzMiBhcyB0aGUgZmlybXdhcmUgZWxzZSB0aGUgcHJlLWJ1aWx0IGJpb3MKKwkjCWZpbGVzIGdldCBlcmFzZWQgY29udHJhcnkgdG8gdGhlIGRvYy9kaXN0aWIudHh0CisJIwlJbiB0aGUgZnV0dXJlIHRoaXMgc2hvdWxkIGJlICJiaW9zIiBhbmQgbm90ICJlZmkzMiIuCit9CisKK2RvX2NvbXBpbGUoKSB7CisJIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSy4KKwkjIFRob3VnaCB0aGUgJHtCfSBzaG91bGQgYWx3YXlzIGV4aXN0LCBzdGlsbCBjaGVjayBpdCBiZWZvcmUgZmluZCBhbmQgcm0uCisJWyAtZCAiJHtCfSIgXSAmJiBmaW5kICR7Qn0gLW5hbWUgJy4qLmQnIC10eXBlIGYgLWV4ZWMgcm0gLWYge30gXDsKKworCSMgUmVidWlsZCBvbmx5IHRoZSBpbnN0YWxsZXI7IGtlZXAgcHJlY29tcGlsZWQgYm9vdGxvYWRlcnMKKwkjIGFzIHBlciBhdXRob3IncyByZXF1ZXN0IChkb2MvZGlzdHJpYi50eHQpCisJb2VfcnVubWFrZSBDQz0iJHtDQ30gJHtDRkxBR1N9IiBMREZMQUdTPSIke0xERkxBR1N9IiBmaXJtd2FyZT0iYmlvcyIgaW5zdGFsbGVyCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBDQz0iJHtDQ30gJHtDRkxBR1N9IiBpbnN0YWxsIElOU1RBTExST09UPSIke0R9IiBmaXJtd2FyZT0iYmlvcyIKKworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9iaW9zL2NvcmUvbGRsaW51eC5zeXMgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9iaW9zL2NvcmUvbGRsaW51eC5ic3MgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA3NTUgJHtTfS9iaW9zL2xpbnV4L3N5c2xpbnV4LW5vbXRvb2xzICR7RH0ke2JpbmRpcn0vCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1ub210b29scyAke1BOfS1leHRsaW51eCAke1BOfS1tYnIgJHtQTn0tY2hhaW4gJHtQTn0tcHhlbGludXggJHtQTn0taXNvbGludXggJHtQTn0tbWlzYyIKKworUkRFUEVORFNfJHtQTn0gKz0gIm10b29scyIKK1JERVBFTkRTXyR7UE59LW5vbXRvb2xzICs9ICJsaWJleHQyZnMiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICJwZXJsIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vc3lzbGludXgiCitGSUxFU18ke1BOfS1ub210b29scyA9ICIke2JpbmRpcn0vc3lzbGludXgtbm9tdG9vbHMiCitGSUxFU18ke1BOfS1leHRsaW51eCA9ICIke3NiaW5kaXJ9L2V4dGxpbnV4IgorRklMRVNfJHtQTn0tbWJyID0gIiR7ZGF0YWRpcn0vJHtCUE59L21ici5iaW4iCitGSUxFU18ke1BOfS1jaGFpbiA9ICIke2RhdGFkaXJ9LyR7QlBOfS9jaGFpbi5jMzIiCitGSUxFU18ke1BOfS1pc29saW51eCA9ICIke2RhdGFkaXJ9LyR7QlBOfS9pc29saW51eC5iaW4iCitGSUxFU18ke1BOfS1weGVsaW51eCA9ICIke2RhdGFkaXJ9LyR7QlBOfS9weGVsaW51eC4wIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyR7QlBOfS9jb20zMi9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2luY2x1ZGUgJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvY29tMzIubGQiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2xpYiouYSAke2xpYmRpcn0vJHtCUE59L2NvbTMyL2xpYiouYSIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtkYXRhZGlyfS8ke0JQTn0vKiAke2xpYmRpcn0vJHtCUE59LyogJHtiaW5kaXJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L2ZpeF9yYW5saWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC9maXhfcmFubGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzA0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC9maXhfcmFubGliLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcG9reS1zcGVjaWZpYyBmaXhdCisKKy0tLSBhL01ha2VmaWxlLmluYworKysrIGIvTWFrZWZpbGUuaW5jCitAQCAtNTcsNiArNTcsOSBAQAorICAgaWZlcSAoJChOT19VVUlEKSwpCisgICAgIExJQlMgKz0gLWx1dWlkCisgICBlbmRpZgorKyAgaWZuZXEgKCQoUkFOTElCKSwpCisrICAgIFJBTkxJQiArPSAkQAorKyAgZW5kaWYKKyBlbmRpZgorIAorIGlmbmVxICgkKE9QU1lTKSxXaW5kb3dzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LmluaXQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzAzMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LmluaXQKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB0Y2YtYWdlbnQKKyMgRGVmYXVsdC1TdGFydDogICAgIDMgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDIgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIGFnZW50CisjIyMgRU5EIElOSVQgSU5GTworCitEQUVNT05fUEFUSD0vdXNyL3NiaW4vdGNmLWFnZW50CitEQUVNT05fTkFNRT1gYmFzZW5hbWUgJERBRU1PTl9QQVRIYAorCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14ICREQUVNT05fUEFUSCB8fCBleGl0IDAKKworUEFUSD0vc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbgorZXhwb3J0IFBBVEgKKworUkVUVkFMPTAKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gIlN0YXJ0aW5nICREQUVNT05fTkFNRTogIgorICAgICAgICAkREFFTU9OX1BBVEggLWQgLUwtIC1sMAorICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJPSyIKKyAgICAgICAgICAgIHRvdWNoIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIkZBSUwiCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJTdG9wcGluZyAkREFFTU9OX05BTUU6ICIKKyAgICAgICAgY291bnQ9MAorICAgICAgICB3aGlsZSBbIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiAtYSAkY291bnQgLWx0IDEwIF0gOyBkbworICAgICAgICAgICAga2lsbHByb2MgJERBRU1PTl9QQVRIID4mIC9kZXYvbnVsbAorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgICAgICBpZiBbICRSRVRWQUwgIT0gMCAtbyAtbiAiYC9iaW4vcGlkb2YgJERBRU1PTl9QQVRIYCIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBzbGVlcCAzCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKyAgICAgICAgZG9uZQorICAgICAgICBybSAtZiAvdmFyL2xvY2svc3Vic3lzLyREQUVNT05fTkFNRQorICAgICAgICBpZiBbIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiRkFJTCIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiT0siCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICByZXN0YXJ0KQorICAgICAgICAkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgICAgICAgOzsKKworICAgIHN0YXR1cykKKyAgICAgICAgc3RhdHVzICREQUVNT05fTkFNRQorICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgOzsKKworICAgIGNvbmRyZXN0YXJ0KQorICAgICAgICBbIC1mIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FIF0gJiYgJDAgcmVzdGFydAorICAgICAgICA7OworCisgICAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgc3RhdHVzIHwgcmVzdGFydCB8IGNvbmRyZXN0YXJ0IHwgc3RhdHVzIH0iCisgICAgICAgIDs7Citlc2FjCisKK2V4aXQgJFJFVFZBTAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWE2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBhZ2VudAorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AU0JJTkRJUkAvdGNmLWFnZW50IC1kIC1MLSAtbDAKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZmQzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgZm9yIHRoZSBFY2xpcHNlIElERSIKK0hPTUVQQUdFID0gImh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1RDRiIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvIgorCitMSUNFTlNFID0gIkVQTC0xLjAgfCBFREwtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZWRsLXYxMC5odG1sO21kNT01MjJhMzkwYTgzZGMxODY1MTNmMDUwMDU0M2FkMzY3OSIKKworU1JDUkVWID0gImI5YTczNWU5YzdjZjgyZjgwZDQxMmI3YWIxNWQwOGI4OWQ1YTRjY2MiCitQViA9ICIxLjMuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZWNsaXBzZS5vcmcvZ2l0cm9vdC90Y2Yvb3JnLmVjbGlwc2UudGNmLmFnZW50LmdpdDticmFuY2g9MS4zX21hcnNfYnVnZml4IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9yYW5saWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNmLWFnZW50LmluaXQgXAorICAgICAgICAgICBmaWxlOi8vdGNmLWFnZW50LnNlcnZpY2UgXAorICAgICAgICAgICIKKworREVQRU5EUyA9ICJ1dGlsLWxpbnV4IG9wZW5zc2wiCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L2FnZW50IgorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInRjZi1hZ2VudC5zZXJ2aWNlIgorCitJTklUU0NSSVBUX05BTUUgPSAidGNmLWFnZW50IgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgMyA1IC4gc3RvcCAyMCAwIDEgMiA2IC4iCisKKyMgbWFuZ2xpbmcgbmVlZGVkIGZvciBtYWtlCitNQUtFX0FSQ0ggPSAiYGVjaG8gJHtUQVJHRVRfQVJDSH0gfCBzZWQgcyxpLjg2LGk2ODYsYCIKK01BS0VfT1MgPSAiYGVjaG8gJHtUQVJHRVRfT1N9IHwgc2VkIHMsXmxpbnV4LiosR05VL0xpbnV4LGAiCisKK0VYVFJBX09FTUFLRSA9ICJNQUNISU5FPSR7TUFLRV9BUkNIfSBPUFNZUz0ke01BS0VfT1N9ICdDQz0ke0NDfScgJ0FSPSR7QVJ9JyIKKworIyBUaGV5IGRvbid0IGJ1aWxkIG9uIEFSTSBhbmQgd2UgZG9uJ3QgbmVlZCB0aGVtIGFjdHVhbGx5LgorQ0ZMQUdTICs9ICItRFNFUlZJQ0VfUnVuQ29udHJvbD0wIC1EU0VSVklDRV9CcmVha3BvaW50cz0wIFwKKyAgICAtRFNFUlZJQ0VfTWVtb3J5PTAgLURTRVJWSUNFX1JlZ2lzdGVycz0wIC1EU0VSVklDRV9NZW1vcnlNYXA9MCBcCisgICAgLURTRVJWSUNFX1N0YWNrVHJhY2U9MCAtRFNFUlZJQ0VfU3ltYm9scz0wIC1EU0VSVklDRV9MaW5lTnVtYmVycz0wIFwKKyAgICAtRFNFUlZJQ0VfRXhwcmVzc2lvbnM9MCIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTFJPT1Q9JHtEfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3RjZi1hZ2VudC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC90Y2YtYWdlbnQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGNmLWFnZW50LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vdGNmLWFnZW50LnNlcnZpY2UKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9hbHRlci1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9hbHRlci1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTMwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw3NiBAQAorTGV0cyBpbnN0YWxsIHRoZSBpbmNsdWRlIGhlYWRlciBhbmQgcHJpdmF0ZSBoZWFkZXIgZmlsZXMgaW50byAKK3Vzci9pbmNsdWRlL3RjbDguNiB3aGVuIHZlcnNpb24gb2YgdGNsIGlzIDguNi54CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWkuY29tPgorCitGaXhlZCB0aGUgVENMX0lOQ0xVREVfU1BFQworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICB8ICAgIDIgKy0KKyBjb25maWd1cmUgICAgfCAgICA0ICsrLS0KKyBjb25maWd1cmUuaW4gfCAgICA0ICsrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDk3Yjk4M2IuLmRjMmE0ZGYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC01Myw3ICs1Myw3IEBAIERMTF9JTlNUQUxMX0RJUgkJPSBARExMX0lOU1RBTExfRElSQAorIFNDUklQVF9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoVENMX0xJQlJBUlkpCisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgaW5jbHVkZSBmaWxlIHRjbC5oOgorLUlOQ0xVREVfSU5TVEFMTF9ESVIJPSAkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpCisrSU5DTFVERV9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikvdGNsJChWRVJTSU9OKQorIAorICMgUGF0aCB0byB0aGUgcHJpdmF0ZSB0Y2wgaGVhZGVyIGRpcjoKKyBQUklWQVRFX0lOQ0xVREVfRElSCT0gQFBSSVZBVEVfSU5DTFVERV9ESVJACitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAzZTc4YjQ5Li4yNGIzZjkyIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xOTEzNCw3ICsxOTEzNCw3IEBAIGV2YWwgIlRDTF9MSUJfRklMRT1saWJ0Y2wke0xJQl9TVUZGSVh9IgorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCisgVENMX0xJQlJBUlk9JyQobGliZGlyKS90Y2wkKFZFUlNJT04pJworLVBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCisrUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKS90Y2wkKFZFUlNJT04pJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCisgIyBOb3RlOiAgaW4gdGhlIGZvbGxvd2luZyB2YXJpYWJsZSwgaXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBhYnNvbHV0ZQorQEAgLTE5MjkzLDcgKzE5MjkzLDcgQEAgVENMX0JVSUxEX1NUVUJfTElCX1BBVEg9ImBwd2RgLyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9TVFVCX0xJQl9ESVJ9LyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIAorICMgSW5zdGFsbCB0aW1lIGhlYWRlciBkaXIgY2FuIGJlIHNldCB2aWEgLS1pbmNsdWRlZGlyCistZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfVwiIgorK2V2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn0vdGNsJHtWRVJTSU9OfVwiIgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHRjbENvbmZpZy5zaCByZWZlcnMgdG8gdGhpcyBieSBhIGRpZmZlcmVudCBuYW1lCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCAwZTI4YjE0Li42MmQ5YjQxIDEwMDc1NQorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC03OTEsNyArNzkxLDcgQEAgZXZhbCAiVENMX0xJQl9GSUxFPWxpYnRjbCR7TElCX1NVRkZJWH0iCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKyBUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCistUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKytQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpL3RjbCQoVkVSU0lPTiknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKKyAjIE5vdGU6ICBpbiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlLCBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGFic29sdXRlCitAQCAtOTEyLDcgKzkxMiw3IEBAIFRDTF9CVUlMRF9TVFVCX0xJQl9QQVRIPSJgcHdkYC8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyBUQ0xfU1RVQl9MSUJfUEFUSD0iJHtUQ0xfU1RVQl9MSUJfRElSfS8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyAKKyAjIEluc3RhbGwgdGltZSBoZWFkZXIgZGlyIGNhbiBiZSBzZXQgdmlhIC0taW5jbHVkZWRpcgorLWV2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn1cIiIKKytldmFsICJUQ0xfSU5DTFVERV9TUEVDPVwiLUkke2luY2x1ZGVkaXJ9L3RjbCR7VkVSU0lPTn1cIiIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0Y2xDb25maWcuc2ggcmVmZXJzIHRvIHRoaXMgYnkgYSBkaWZmZXJlbnQgbmFtZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeC1jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeC1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5MmEwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4LWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHVuaXgvdGNsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNsOC40LjExL3VuaXgub3JpZy90Y2wubTQKKysrKyB0Y2w4LjQuMTEvdW5peC90Y2wubTQKK0BAIC04NDUsNyArODQ1LDcgQEAgQUNfREVGVU4oU0NfQ09ORklHX0NGTEFHUywgWworIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCitAQCAtMjI1MCw3ICsyMjUwLDcgQEAgQUNfREVGVU4oU0NfQkxPQ0tJTkdfU1RZTEUsIFsKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgJDN9JyAvZXRjLy5yZWxpZCdgCisrCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYAorSW5kZXg6IHVuaXgvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNsOC40LjExL3VuaXgub3JpZy9jb25maWd1cmUKKysrKyB0Y2w4LjQuMTEvdW5peC9jb25maWd1cmUKK0BAIC0yMTMwLDcgKzIxMzAsNyBAQCBlY2hvICJjb25maWd1cmU6MjEyMTogY2hlY2tpbmcgc3lzdGVtIHZlCisgCSAgICAjIHJlc3VsdHMsIGFuZCB0aGUgdmVyc2lvbiBpcyBrZXB0IGluIHNwZWNpYWwgZmlsZSkuCisgCQorIAkgICAgaWYgdGVzdCAtciAvZXRjLy5yZWxpZCAtYSAiWGB1bmFtZSAtbmAiID0gIlhgdW5hbWUgLXNgIiA7IHRoZW4KKy0JCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYAorQEAgLTc2MDgsNyArNzYwOCw3IEBAIGVjaG8gImNvbmZpZ3VyZTo3NjAwOiBjaGVja2luZyBGSU9OQklPIHYKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNzM0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXhlcyB0Y2wgdGFyZ2V0IHJlY2lwZSBidWlsZCBvbiBvbGQgZGlzdHJvcyB3aGljaCBoYXZlIGdsaWJjIG9sZGVyIHRoYW4gMi4xNAorCit8ICsgZWNobyAnTk9URTogbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbCcKK3wgTk9URTogbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbAorfCArIG1ha2UgIERFU1RESVI9L3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlIGluc3RhbGwKK3wgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL2xpYgorfCBJbnN0YWxsaW5nIG1lc3NhZ2UgY2F0YWxvZ3MKK3wgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL3NoYXJlL21hbgorfCB0Y2xzaDogL2xpYjY0L2xpYmMuc28uNjogdmVyc2lvbiBgR0xJQkNfMi4xNCcgbm90IGZvdW5kIChyZXF1aXJlZCBieSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvdGNsOC41LjExL3VuaXgvbGlidGNsOC41LnNvKQorfCBNYWtpbmcgZGlyZWN0b3J5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZS91c3IvYmluCit8IG1ha2U6ICoqKiBbaW5zdGFsbC1tc2dzXSBFcnJvciAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA0LzI2CisKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MDEuNzg3NDI1NjI4IC0wODAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjU5LjgwNzQyNTU3OCAtMDgwMAorQEAgLTY4Niw3ICs2ODYsNyBAQAorICMgdGNsdGVzdCBleGVjdXRhYmxlIGdldHMgdGhlIGJ1aWxkIGRpcmVjdG9yeSBidXJuZWQgaW50byBpdHMgbGQgc2VhcmNoIHBhdGguCisgIyBUaGlzIGtlZXBzIHRjbHRlc3QgZnJvbSBwaWNraW5nIHVwIGFuIGFscmVhZHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIFRjbAorICMgbGlicmFyeS4KKy1TSEVMTF9FTlYgPQlATERfTElCUkFSWV9QQVRIX1ZBUkA9YHB3ZGA6JHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IFwKKytTSEVMTF9FTlYgPQlATERfTElCUkFSWV9QQVRIX1ZBUkA9JHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IFwKKyAJCVRDTExJQlBBVEg9IkBhYnNfYnVpbGRkaXJAL3BrZ3MiIFwKKyAJCVRDTF9MSUJSQVJZPSIke1RDTF9CVUlMRFRJTUVfTElCUkFSWX0iCisgCitAQCAtNzEyLDcgKzcxMiw3IEBACisgCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCisgCisgZ2RiLXRlc3Q6ICR7VENMVEVTVF9FWEV9CistCUBlY2hvICJzZXQgZW52IEBMRF9MSUJSQVJZX1BBVEhfVkFSQD1gcHdkYDokJHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IiA+IGdkYi5ydW4KKysJQGVjaG8gInNldCBlbnYgQExEX0xJQlJBUllfUEFUSF9WQVJAPSQke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0iID4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGVudiBUQ0xfTElCUkFSWT0ke1RDTF9CVUlMRFRJTUVfTElCUkFSWX0iID4+IGdkYi5ydW4KKyAJQGVjaG8gInNldCBhcmdzICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykgLXNpbmdsZXByb2MgMSIgPj4gZ2RiLnJ1bgorIAkkKEdEQikgJHtUQ0xURVNUX0VYRX0gLS1jb21tYW5kPWdkYi5ydW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjM0LjI0MzQyNDkzNCAtMDgwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozNzozNC4yNDM0MjQ5MzQgLTA4MDAKK0BAIC03MDksMjMgKzcwOSwyMyBAQAorIHRlc3Q6IHRlc3QtdGNsIHRlc3QtcGFja2FnZXMKKyAKKyB0ZXN0LXRjbDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorKwkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorIAorIGdkYi10ZXN0OiAke1RDTFRFU1RfRVhFfQorIAlAZWNobyAic2V0IGVudiBATERfTElCUkFSWV9QQVRIX1ZBUkA9YHB3ZGA6JCR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSIgPiBnZGIucnVuCisgCUBlY2hvICJzZXQgZW52IFRDTF9MSUJSQVJZPSR7VENMX0JVSUxEVElNRV9MSUJSQVJZfSIgPj4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGFyZ3MgJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKSAtc2luZ2xlcHJvYyAxIiA+PiBnZGIucnVuCistCSQoR0RCKSAuLyR7VENMVEVTVF9FWEV9IC0tY29tbWFuZD1nZGIucnVuCisrCSQoR0RCKSAke1RDTFRFU1RfRVhFfSAtLWNvbW1hbmQ9Z2RiLnJ1bgorIAlybSBnZGIucnVuCisgCisgIyBVc2VmdWwgdGFyZ2V0IHRvIGxhdW5jaCBhIGJ1aWx0IHRjbHRlc3Qgd2l0aCB0aGUgcHJvcGVyIHBhdGgsLi4uCisgcnVudGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0KKysJJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9CisgCisgIyBVc2VmdWwgdGFyZ2V0IGZvciBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlIHdpdGggYW4gdW53cml0YWJsZSBjdXJyZW50CisgIyBkaXJlY3RvcnkuLi4KKyByby10ZXN0OiAke1RDTFRFU1RfRVhFfQorLQllY2hvICdleGVjIGNobW9kIC13IC47cGFja2FnZSByZXF1aXJlIHRjbHRlc3Q7dGNsdGVzdDo6dGVtcG9yYXJ5RGlyZWN0b3J5IC90bXA7c291cmNlIC4uL3Rlc3RzL2FsbC50Y2w7ZXhlYyBjaG1vZCArdyAuJyB8ICQoU0hFTExfRU5WKSAuLyR7VENMVEVTVF9FWEV9CisrCWVjaG8gJ2V4ZWMgY2htb2QgLXcgLjtwYWNrYWdlIHJlcXVpcmUgdGNsdGVzdDt0Y2x0ZXN0Ojp0ZW1wb3JhcnlEaXJlY3RvcnkgL3RtcDtzb3VyY2UgLi4vdGVzdHMvYWxsLnRjbDtleGVjIGNobW9kICt3IC4nIHwgJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9CisgCisgIyBUaGUgZm9sbG93aW5nIHRhcmdldCBnZW5lcmF0ZXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW4gZGx0ZXN0LyB0aGF0IGFyZSB1c2VkCisgIyBmb3IgdGVzdGluZzsgdGhleSBhcmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgInRjbHRlc3QiIHRhcmdldCAodmlhIHRoZQorQEAgLTc0MywyMyArNzQzLDIzIEBACisgIyBUaGlzIHRhcmdldCBjYW4gYmUgdXNlZCB0byBydW4gdGNsc2ggZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisgIyB2aWEgYG1ha2Ugc2hlbGwgU0NSSVBUPS90bXAvZm9vLnRjbGAKKyBzaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgLi8ke1RDTF9FWEV9ICQoU0NSSVBUKQorKwkkKFNIRUxMX0VOVikgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyAjIFRoaXMgdGFyZ2V0IGNhbiBiZSB1c2VkIHRvIHJ1biB0Y2xzaCBpbnNpZGUgZWl0aGVyIGdkYiBvciBpbnNpZ2h0CisgZ2RiOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAkKEdEQikgLi8ke1RDTF9FWEV9CisrCSQoU0hFTExfRU5WKSAkKEdEQikgJHtUQ0xfRVhFfQorIAorIHZhbGdyaW5kOiAke1RDTF9FWEV9ICR7VENMVEVTVF9FWEV9CistCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAtY29uc3RyYWludHMgdmFsZ3JpbmQgJChURVNURkxBR1MpCisrCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgLWNvbnN0cmFpbnRzIHZhbGdyaW5kICQoVEVTVEZMQUdTKQorIAorIHZhbGdyaW5kc2hlbGw6ICR7VENMX0VYRX0KKy0JJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyB0cmFjZS1zaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAke1RSQUNFfSAkKFRSQUNFX09QVFMpICR7VENMX0VYRX0gJChTQ1JJUFQpCisgCisgdHJhY2UtdGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAkKFRFU1RGTEFHUykKKysJJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgJChURVNURkxBR1MpCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBJbnN0YWxsYXRpb24gcnVsZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmNjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK3RjbCA4LjYuMCBidWlsZHMgYnkgZGVmYXVsdCBhIG51bWJlciBvZiBwYWNrYWdlcyB0aGF0IGFyZSBub3QgbmVlZGVkIGluIFlvY3RvLgorVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBtYWtlZmlsZSBzbyB0aGF0IHRoZXNlIHBhY2thZ2VzIGFyZSBub3QgYnVpbHQgYnkgZGVmYXVsdC4KKworVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBCb2dkYW4gTWFyaW5lc2N1IDxib2dkYW4uYS5tYXJpbmVzY3VAaW50ZWwuY29tPgorCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM4OjEyLjIzNTQyNTg5MSAtMDgwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozODoxMi4yMzE0MjU4OTEgLTA4MDAKK0BAIC02MTEsNyArNjExLDcgQEAKKyAjIFN0YXJ0IG9mIHJ1bGVzCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCistYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jIHBhY2thZ2VzCisrYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jCisgCisgYmluYXJpZXM6ICR7TElCX0ZJTEV9ICQoU1RVQl9MSUJfRklMRSkgJHtUQ0xfRVhFfQorIAorQEAgLTY1MywxMiArNjUzLDEyIEBACisgI3RjbENvbmZpZy5oOiAkKFVOSVhfRElSKS90Y2xDb25maWcuaC5pbgorICMJJChTSEVMTCkgY29uZmlnLnN0YXR1cworIAorLWNsZWFuOiBjbGVhbi1wYWNrYWdlcworK2NsZWFuOgorIAlybSAtZiAqLmEgKi5vIGxpYnRjbCogY29yZSBlcnJzICp+IFwjKiBUQUdTICouRSBhLm91dCBcCisgCQllcnJvcnMgJHtUQ0xfRVhFfSAke1RDTFRFU1RfRVhFfSBsaWIuZXhwIFRjbCBARFRSQUNFX0hEUkAKKyAJY2QgZGx0ZXN0IDsgJChNQUtFKSBjbGVhbgorIAorLWRpc3RjbGVhbjogZGlzdGNsZWFuLXBhY2thZ2VzIGNsZWFuCisrZGlzdGNsZWFuOiBjbGVhbgorIAlybSAtcmYgTWFrZWZpbGUgY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyB0Y2xDb25maWcuc2ggXAorIAkJdGNsQ29uZmlnLmggKi5wbGlzdCBUY2wuZnJhbWV3b3JrIHRjbC5wYworIAljZCBkbHRlc3QgOyAkKE1BS0UpIGRpc3RjbGVhbgorQEAgLTcwNiw3ICs3MDYsNyBAQAorICMgdGNsdGVzdCwgaWU6CisgIwklIG1ha2UgdGVzdCBURVNURkxBR1M9Ii12ZXJib3NlIGJwcyAtZmlsZSBmaWxlTmFtZS50ZXN0IgorIAorLXRlc3Q6IHRlc3QtdGNsIHRlc3QtcGFja2FnZXMKKyt0ZXN0OiB0ZXN0LXRjbAorIAorIHRlc3QtdGNsOiAke1RDTFRFU1RfRVhFfQorIAkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorQEAgLTc3MSw3ICs3NzEsNyBAQAorIElOU1RBTExfREVWX1RBUkdFVFMgPSBpbnN0YWxsLWhlYWRlcnMKKyBJTlNUQUxMX0VYVFJBX1RBUkdFVFMgPSBARVhUUkFfSU5TVEFMTEAKKyBJTlNUQUxMX1RBUkdFVFMgPSAkKElOU1RBTExfQkFTRV9UQVJHRVRTKSAkKElOU1RBTExfRE9DX1RBUkdFVFMpICQoSU5TVEFMTF9ERVZfVEFSR0VUUykgXAorLQkJICAkKElOU1RBTExfUEFDS0FHRV9UQVJHRVRTKSAkKElOU1RBTExfRVhUUkFfVEFSR0VUUykKKysJCSAgJChJTlNUQUxMX0VYVFJBX1RBUkdFVFMpCisgCisgaW5zdGFsbDogJChJTlNUQUxMX1RBUkdFVFMpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZGJhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3J1bi1wdGVzdApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorCitmb3IgaSBpbiBgbHMgdGVzdHMvKi50ZXN0IHxhd2sgLUYvICd7cHJpbnQgJDJ9J2A7IFwKKyAgICBkbyBUQ0xfTElCUkFSWT1saWJyYXJ5IC4vdGNsdGVzdCB0ZXN0cy9hbGwudGNsIC1maWxlICRpID4kaS50bXAgMj4mMTsgXAorICAgIGdyZXAgLXEgIl5GaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IiAkaS50bXA7IFwKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4gZWNobyAiRkFJTDogJGkiOyBcCisgICAgZWxzZSBlY2hvICJQQVNTOiAkaSI7IHJtIC1mICRpLnRtcDsgZmk7IFwKK2RvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLWFkZC1zb25hbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1hZGQtc29uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Mjc2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1hZGQtc29uYW1lLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvY29uZmlndXJlCTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC9jb25maWd1cmUJMjAxMy0xMS0xMSAwMDoyMDo1MS41MTk0OTAzNDIgLTA4MDAKK0BAIC03NTk5LDYgKzc1OTksOSBAQAorIAkgICAgIyBnZXQgcmlkIG9mIHRoZSB3YXJuaW5ncy4KKyAJICAgICNDRkxBR1NfT1BUSU1JWkU9IiR7Q0ZMQUdTX09QVElNSVpFfSAtRF9fTk9fU1RSSU5HX0lOTElORVMgLURfX05PX01BVEhfSU5MSU5FUyIKKyAKKysJICAgICMgZm9sbG93aW5nIGxpbmUgYWRkZWQgYnkgQ1cgZm9yIERlYmlhbiBHTlUvTGludXgKKysJICAgIFRDTF9TSExJQl9MRF9FWFRSQVM9Ii1XbCwtc29uYW1lLFwke1RDTF9MSUJfRklMRX0uMCIKKysKKyAJICAgIFNITElCX0xEPScke0NDfSAtc2hhcmVkICR7Q0ZMQUdTfSAke0xERkxBR1N9JworIAkgICAgRExfT0JKUz0idGNsTG9hZERsLm8iCisgCSAgICBETF9MSUJTPSItbGRsIgorSW5kZXg6IHVuaXgvdGNsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL3RjbC5tNAkyMDEzLTA5LTE5IDEzOjE3OjEzLjAwMDAwMDAwMCAtMDcwMAorKysrIHVuaXgvdGNsLm00CTIwMTMtMTEtMTEgMDA6MTc6MjQuMjYzNDg1MTIzIC0wODAwCitAQCAtMTQxNSw2ICsxNDE1LDkgQEAKKyAJICAgICMgZ2V0IHJpZCBvZiB0aGUgd2FybmluZ3MuCisgCSAgICAjQ0ZMQUdTX09QVElNSVpFPSIke0NGTEFHU19PUFRJTUlaRX0gLURfX05PX1NUUklOR19JTkxJTkVTIC1EX19OT19NQVRIX0lOTElORVMiCisgCisrCSAgICAjIGZvbGxvd2luZyBsaW5lIGFkZGVkIGJ5IENXIGZvciBEZWJpYW4gR05VL0xpbnV4CisrCSAgICBUQ0xfU0hMSUJfTERfRVhUUkFTPSItV2wsLXNvbmFtZSxcJHtUQ0xfTElCX0ZJTEV9LjAiCisrCisgCSAgICBTSExJQl9MRD0nJHtDQ30gLXNoYXJlZCAke0NGTEFHU30gJHtMREZMQUdTfScKKyAJICAgIERMX09CSlM9InRjbExvYWREbC5vIgorIAkgICAgRExfTElCUz0iLWxkbCIKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTExIDAwOjIwOjMyLjQyMzQ4OTg2MSAtMDgwMAorQEAgLTc5Niw3ICs3OTYsMTAgQEAKKyAJICAgIGRvbmU7CisgCUBlY2hvICJJbnN0YWxsaW5nICQoTElCX0ZJTEUpIHRvICQoRExMX0lOU1RBTExfRElSKS8iCisgCUBASU5TVEFMTF9MSUJACistCUBjaG1vZCA1NTUgIiQoRExMX0lOU1RBTExfRElSKS8kKExJQl9GSUxFKSIKKysJbXYgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMAorKwlsbiAtc2YgJChMSUJfRklMRSkuMCAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKQorKwlsbiAtc2YgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMCAuLworKwlAY2htb2QgNTU1ICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpLjAKKyAJQGVjaG8gIkluc3RhbGxpbmcgJHtUQ0xfRVhFfSBhcyAkKEJJTl9JTlNUQUxMX0RJUikvdGNsc2gkKFZFUlNJT04pJHtFWEVfU1VGRklYfSIKKyAJQCQoSU5TVEFMTF9QUk9HUkFNKSAke1RDTF9FWEV9ICIkKEJJTl9JTlNUQUxMX0RJUikvdGNsc2gkKFZFUlNJT04pJHtFWEVfU1VGRklYfSIKKyAJQGVjaG8gIkluc3RhbGxpbmcgdGNsQ29uZmlnLnNoIHRvICQoQ09ORklHX0lOU1RBTExfRElSKS8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjdjODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDZlZmM5ODc3NDY4MTc5NTcxMjA3M2MyYjkxZTVlOWQxNzYzMjM5YjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiU29uZy5MaSIgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMSBBdWcgMjAxMiAxOTowNTo1MSArMDgwMAorU3ViamVjdDogW1BBVENIXSB0Y2w6aW5zdGFsbCB0Y2wgdG8gbGliNjQgaW5zdGVhZCBvZiBsaWIgb24gNjRiaXQgdGFyZ2V0CisKK1JlbW92ZSBoYXJkY29kZWQgbGlicmFyeSBpbnN0YWxsIHBhdGguIENoYW5nZSAkKHByZWZpeCkvbGliLyB0byAke2xpYmRpcn0uCisKK1tZT0NUTyAjMjg3Nl0KKworVGhpcyBpcyBub3QgYSBidWcsIGJ1dCBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZCBpbnRvIGRpcmVjdG9yeSAuLi4vbGliLy4KK09uIDY0Yml0IHRhcmdldCB0aGF0IHNob3VsZCBiZSBsaWI2NC8uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGNvbmZpZ3VyZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHVuaXgvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL2NvbmZpZ3VyZQkyMDEzLTExLTEwIDIzOjM4OjMzLjY0MzQyNjQzMCAtMDgwMAorKysrIHVuaXgvY29uZmlndXJlCTIwMTMtMTEtMTAgMjM6Mzk6NTEuMzQ3NDI4Mzg3IC0wODAwCitAQCAtMTkxMzQsNyArMTkxMzQsNyBAQAorIAorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCistVENMX0xJQlJBUlk9JyQocHJlZml4KS9saWIvdGNsJChWRVJTSU9OKScKKytUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCisgUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKyBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJworIAorSW5kZXg6IHVuaXgvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEzLTExLTEwIDIzOjIwOjUwLjAwMDAwMDAwMCAtMDgwMAorKysrIHVuaXgvY29uZmlndXJlLmluCTIwMTMtMTEtMTAgMjM6Mzk6NDEuMTk5NDI4MTMxIC0wODAwCitAQCAtNzkwLDcgKzc5MCw3IEBACisgCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKy1UQ0xfTElCUkFSWT0nJChwcmVmaXgpL2xpYi90Y2wkKFZFUlNJT04pJworK1RDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKyBQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTkyYjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJUb29sIENvbW1hbmQgTGFuZ3VhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vdGNsLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiZGV2ZWwvdGNsdGsiCisKKyMgaHR0cDovL3d3dy50Y2wudGsvc29mdHdhcmUvdGNsdGsvbGljZW5zZS5odG1sCitMSUNFTlNFID0gInRjbCAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vY29tcGF0L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vbGlicmFyeS9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL21hY29zeC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL3Rlc3RzL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vd2luL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyIKKworREVQRU5EUyA9ICJ0Y2wtbmF0aXZlIHpsaWIiCisKK0JBU0VfU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vdGNsLyR7QlBOfSR7UFZ9LXNyYy50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly90Y2wtYWRkLXNvbmFtZS5wYXRjaCIKK1NSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9fcGFja2FnZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkN2NiYjkxZjFkZWQxOTE5MzcwYTMwZWRkMTUzNDMwNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZTZlZDk0Yzk4MWMxZDBjNWY1ZmVmYjgxMTJkMDZjNmJmNGQwNTBhNzMyN2U5NWU3MWQ0MTdjNDE2NTE5YzhkIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke0JBU0VfU1JDX1VSSX0iCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfS91bml4IgorCitWRVIgPSAiJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJpbmNvbmZpZworCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRocmVhZHMgLS1kaXNhYmxlLXJwYXRoIC0tbGliZGlyPSR7bGliZGlyfSIKKworZG9fY29uZmlndXJlKCkgeworCWNkICR7U30KKwlnbnUtY29uZmlnaXplCisJY2QgJHtCfQorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWVjaG8gPiAke1N9Ly4uL2NvbXBhdC9maXhzdHJ0b2QuYworfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsIGluc3RhbGwtcHJpdmF0ZS1oZWFkZXJzCisJbG4gLXNmIC4vdGNsc2gke1ZFUn0gJHtEfSR7YmluZGlyfS90Y2xzaAorCWxuIC1zZiB0Y2xzaDguNiAke0R9JHtiaW5kaXJ9L3RjbHNoJHtWRVJ9CisJc2VkIC1pICJzKy1MJHtCfSstTCR7U1RBR0lOR19MSUJESVJ9K2ciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicyske1dPUktESVJ9KyR7U1RBR0lOR19JTkNESVJ9K2ciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicywtTCR7bGliZGlyfSwtTD0ke2xpYmRpcn0sZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzLC1JJHtpbmNsdWRlZGlyfSwtST0ke2luY2x1ZGVkaXJ9LGciIHRjbENvbmZpZy5zaAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtsaWJkaXJ9CisJY2QgLi4KKwlmb3IgZGlyIGluIGNvbXBhdCBnZW5lcmljIHVuaXg7IGRvCisJCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vLi4vJGRpci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIvCisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInRjbF9zeXNyb290X3ByZXByb2Nlc3MiCit0Y2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CisKK1BBQ0tBR0VTID0rICJ0Y2wtbGliIgorRklMRVNfdGNsLWxpYiA9ICIke2xpYmRpcn0vbGlidGNsOC42LnNvLioiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3RjbCR7VkVSfSAke2xpYmRpcn0vdGNsOC42ICR7bGliZGlyfS90Y2w4IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vdGNsQ29uZmlnLnNoICR7bGliZGlyfS90Y2xvb0NvbmZpZy5zaCIKKworIyBpc24ndCBnZXR0aW5nIHBpY2tlZCB1cCBieSBzaGxpYnMgY29kZQorUkRFUEVORFNfJHtQTn0gKz0gInRjbC1saWIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYmdjYyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSB0Y2x0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS90Y2x0ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi9saWJyYXJ5ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQorfQorCisjIEZpeCBzb21lIHBhdGhzIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBUY2wgZXh0ZW5zaW9ucworQklOQ09ORklHX0dMT0IgPSAiKkNvbmZpZy5zaCIKKworIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKkNvbmZpZy5zaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3NDVkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitBZGQgYWJpbGl0eSB0byBzcGVjaWZ5IHJjcCBwb3J0IG51bWJlcnMKKworSW4gb3JkZXIgdG8gcnVuIG1vcmUgdGhhbiBvbmUgdW5mcyBzZXJ2ZXIgb24gYSBob3N0IHN5c3RlbSwgeW91IG11c3QKK2JlIGFibGUgdG8gc3BlY2lmeSBhbHRlcm5hdGUgcnBjIHBvcnQgbnVtYmVycy4KKworSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgIDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgbW91bnQuYyAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC03OCw2ICs3OCw4IEBAIGludCBvcHRfdGVzdGNvbmZpZyA9IEZBTFNFOworIHN0cnVjdCBpbl9hZGRyIG9wdF9iaW5kX2FkZHI7CisgaW50IG9wdF9yZWFkYWJsZV9leGVjdXRhYmxlcyA9IEZBTFNFOworIGNoYXIgKm9wdF9waWRfZmlsZSA9IE5VTEw7CisraW50IG5mc19wcm9nID0gTkZTM19QUk9HUkFNOworK2ludCBtb3VudF9wcm9nID0gTU9VTlRQUk9HOworIAorIC8qIFJlZ2lzdGVyIHdpdGggcG9ydG1hcHBlcj8gKi8KKyBpbnQgb3B0X3BvcnRtYXBwZXIgPSBUUlVFOworQEAgLTIwNiw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgeworIAorICAgICBpbnQgb3B0ID0gMDsKKy0gICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6IjsKKysgICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6eDp5OiI7CisgCisgICAgIHdoaWxlIChvcHQgIT0gLTEpIHsKKyAJb3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIG9wdHN0cmluZyk7CitAQCAtMjYxLDggKzI2MywyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgCQlwcmludGYKKyAJCSAgICAoIlx0LXIgICAgICAgICAgcmVwb3J0IHVucmVhZGFibGUgZXhlY3V0YWJsZXMgYXMgcmVhZGFibGVcbiIpOworIAkJcHJpbnRmKCJcdC1UICAgICAgICAgIHRlc3QgZXhwb3J0cyBmaWxlIGFuZCBleGl0XG4iKTsKKysJCXByaW50ZigiXHQteCA8cG9ydD4gICBhbHRlcm5hdGUgTkZTIFJQQyBwb3J0XG4iKTsKKysJCXByaW50ZigiXHQteSA8cG9ydD4gICBhbHRlcm5hdGUgTU9VTlREIFJQQyBwb3J0XG4iKTsKKyAJCWV4aXQoMCk7CisgCQlicmVhazsKKysJICAgIGNhc2UgJ3gnOgorKwkJbmZzX3Byb2cgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisrCQlpZiAobmZzX3Byb2cgPT0gMCkgeworKwkJICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBORlMgUlBDIHBvcnRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrCQlicmVhazsKKysJICAgIGNhc2UgJ3knOgorKwkJbW91bnRfcHJvZyA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKysJCWlmIChtb3VudF9wcm9nID09IDApIHsKKysJCSAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTU9VTlREIFJQQyBwb3J0XG4iKTsKKysJCSAgICBleGl0KDEpOworKwkJfQorKwkJYnJlYWs7CisgCSAgICBjYXNlICdsJzoKKyAJCW9wdF9iaW5kX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKG9wdGFyZyk7CisgCQlpZiAob3B0X2JpbmRfYWRkci5zX2FkZHIgPT0gKHVuc2lnbmVkKSAtMSkgeworQEAgLTM0NywxMiArMzY1LDEyIEBAIHZvaWQgZGFlbW9uX2V4aXQoaW50IGVycm9yKQorICNlbmRpZgkJCQkgICAgICAgLyogV0lOMzIgKi8KKyAKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXN2Y191bnJlZ2lzdGVyKE1PVU5UUFJPRywgTU9VTlRWRVJTMSk7CistCXN2Y191bnJlZ2lzdGVyKE1PVU5UUFJPRywgTU9VTlRWRVJTMyk7CisrCXN2Y191bnJlZ2lzdGVyKG1vdW50X3Byb2csIE1PVU5UVkVSUzEpOworKwlzdmNfdW5yZWdpc3Rlcihtb3VudF9wcm9nLCBNT1VOVFZFUlMzKTsKKyAgICAgfQorIAorICAgICBpZiAob3B0X3BvcnRtYXBwZXIpIHsKKy0Jc3ZjX3VucmVnaXN0ZXIoTkZTM19QUk9HUkFNLCBORlNfVjMpOworKwlzdmNfdW5yZWdpc3RlcihuZnNfcHJvZywgTkZTX1YzKTsKKyAgICAgfQorIAorICAgICBpZiAoZXJyb3IgPT0gU0lHU0VHVikKK0BAIC02NTcsMTMgKzY3NSwxMyBAQCBzdGF0aWMgdm9pZCBtb3VudHByb2dfMyhzdHJ1Y3Qgc3ZjX3JlcSAqCisgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbmZzX3NlcnZpY2UoU1ZDWFBSVCAqIHVkcHRyYW5zcCwgU1ZDWFBSVCAqIHRjcHRyYW5zcCkKKyB7CisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlwbWFwX3Vuc2V0KE5GUzNfUFJPR1JBTSwgTkZTX1YzKTsKKysJcG1hcF91bnNldChuZnNfcHJvZywgTkZTX1YzKTsKKyAgICAgfQorIAorICAgICBpZiAodWRwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTkZTIHNlcnZpY2UgZm9yIFVEUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHVkcHRyYW5zcCwgTkZTM19QUk9HUkFNLCBORlNfVjMsIG5mczNfcHJvZ3JhbV8zLAorKwkgICAgKHVkcHRyYW5zcCwgbmZzX3Byb2csIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1VEUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE5GUzNfUFJPR1JBTSwgTkZTX1YzLCB1ZHApLiIpOworQEAgLTY3NCw3ICs2OTIsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9uZnNfc2VydmljZShTVkNYUFJUCisgICAgIGlmICh0Y3B0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBORlMgc2VydmljZSBmb3IgVENQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodGNwdHJhbnNwLCBORlMzX1BST0dSQU0sIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisrCSAgICAodGNwdHJhbnNwLCBuZnNfcHJvZywgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTkZTM19QUk9HUkFNLCBORlNfVjMsIHRjcCkuIik7CitAQCAtNjg2LDE0ICs3MDQsMTQgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbmZzX3NlcnZpY2UoU1ZDWFBSVAorIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFBSVCAqIHVkcHRyYW5zcCwgU1ZDWFBSVCAqIHRjcHRyYW5zcCkKKyB7CisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlwbWFwX3Vuc2V0KE1PVU5UUFJPRywgTU9VTlRWRVJTMSk7CistCXBtYXBfdW5zZXQoTU9VTlRQUk9HLCBNT1VOVFZFUlMzKTsKKysJcG1hcF91bnNldChtb3VudF9wcm9nLCBNT1VOVFZFUlMxKTsKKysJcG1hcF91bnNldChtb3VudF9wcm9nLCBNT1VOVFZFUlMzKTsKKyAgICAgfQorIAorICAgICBpZiAodWRwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjEpIGZvciBVRFAgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh1ZHB0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisrCSAgICAodWRwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVURQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCB1ZHApLiIpOworQEAgLTcwMiw3ICs3MjAsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgCisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYzKSBmb3IgVURQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodWRwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorKwkgICAgKHVkcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1VEUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMywgdWRwKS4iKTsKK0BAIC03MTMsNyArNzMxLDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbW91bnRfc2VydmljZShTVkNYUAorICAgICBpZiAodGNwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjEpIGZvciBUQ1AgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh0Y3B0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisrCSAgICAodGNwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCB0Y3ApLiIpOworQEAgLTcyMiw3ICs3NDAsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgCisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYzKSBmb3IgVENQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodGNwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorKwkgICAgKHRjcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1RDUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMywgdGNwKS4iKTsKKy0tLSBhL21vdW50LmMKKysrKyBiL21vdW50LmMKK0BAIC0xNTUsOCArMTU1LDggQEAgbW91bnRyZXMzICptb3VudHByb2NfbW50XzNfc3ZjKGRpcnBhdGggKgorICAgICAvKiBlcnJvciBvdXQgaWYgbm90IHZlcnNpb24gMyAqLworICAgICBpZiAocnFzdHAtPnJxX3ZlcnMgIT0gMykgeworIAlsb2dtc2coTE9HX0lORk8sCistCSAgICAgICAiJXMgYXR0ZW1wdGVkIG1vdW50IHdpdGggdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiIsCistCSAgICAgICBpbmV0X250b2EoZ2V0X3JlbW90ZShycXN0cCkpKTsKKysJICAgICAgICIlcyBhdHRlbXB0ZWQgbW91bnQgd2l0aCB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uOiAlaSIsCisrCSAgICAgICBpbmV0X250b2EoZ2V0X3JlbW90ZShycXN0cCkpLCBycXN0cC0+cnFfdmVycyk7CisgCXJlc3VsdC5maHNfc3RhdHVzID0gTU5UM0VSUl9JTlZBTDsKKyAJcmV0dXJuICZyZXN1bHQ7CisgICAgIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkYTAxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK2RhZW1vbi5jOiBDaGVjayBleGl0IGNvZGUgb2YgY2hkaXIoKQorCitTdG9wIHRoZSBjb21waWxlIHdhcm5pbmcgYW5kIGZpeCB0aGUgY29kZSB0byBhY3Qgb24gYSBjaGRpcigpIGZhaWx1cmUuCitJZiB0aGlzIG9uZSBkb2VzIGZhaWwgc29tZXRoaW5nIGlzIHZlcnksIHZlcnkgd3JvbmcuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGRhZW1vbi5jIHwgICAgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTk2NCw3ICs5NjQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0LCBOVUxMKTsKKyAKKyAJLyogZG9uJ3QgbWFrZSBkaXJlY3Rvcnkgd2Ugc3RhcnRlZCBpbiBidXN5ICovCistCWNoZGlyKCIvIik7CisrCWlmKGNoZGlyKCIvIikgPCAwKQorKwkgICAgZGFlbW9uX2V4aXQoMCk7CisgCisgCS8qIGRldGFjaCBmcm9tIHRlcm1pbmFsICovCisgCWlmIChvcHRfZGV0YWNoKSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmIxODdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitkYWVtb24uYzogRml4IHJhY2Ugd2luZG93IGZvciB3cml0aW5nIG9mIHRoZSBwaWQgZmlsZQorCitUaGUgcGFyZW50IHByb2Nlc3Mgc2hvdWxkIHdyaXRlIHRoZSBwaWQgZmlsZSBzdWNoIHRoYXQgdGhlIHBpZCBmaWxlCit3aWxsIGNhbiBiZSBjaGVja2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBleGl0IG9mIHRoZSBmb3JrIGZyb20gdGhlCitwYXJlbnQuCisKK1RoaXMgYWxsb3dzIGV4dGVybmFsIG1vbml0b3JpbmcgYXBwbGljYXRpb25zIHRvIHdhdGNoIHRoZSBkYWVtb24KK3dpdGhvdXQgaGF2aW5nIHRvIGFkZCBzbGVlcCBjYWxscyB0byB3YWl0IGZvciB0aGUgcGlkIGZpbGUgYmUgd3JpdHRlbgorb24gYSBidXN5IHN5c3RlbS4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgIDEyICsrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQgZ2V0X3NvY2tldF90eXBlKHN0cnVjdCBzdmNfcmVxICpycXN0CisgLyoKKyAgKiB3cml0ZSBjdXJyZW50IHBpZCB0byBhIGZpbGUKKyAgKi8KKy1zdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUodm9pZCkKKytzdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUoaW50IHBpZCkKKyB7CisgICAgIGNoYXIgYnVmWzE2XTsKKyAgICAgaW50IGZkLCByZXMsIGxlbjsKK0BAIC0xNzUsNyArMTc1LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3BpZF9maWxlKHZvaWQpCisgICAgIH0KKyAjZW5kaWYKKyAKKy0gICAgc3ByaW50ZihidWYsICIlaVxuIiwgYmFja2VuZF9nZXRwaWQoKSk7CisrICAgIHNwcmludGYoYnVmLCAiJWlcbiIsIHBpZCk7CisgICAgIGxlbiA9IHN0cmxlbihidWYpOworIAorICAgICByZXMgPSBiYWNrZW5kX3B3cml0ZShmZCwgYnVmLCBsZW4sIDApOworQEAgLTk3MCw2ICs5NzAsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgZm9yayBpbnRvIGJhY2tncm91bmRcbiIpOworIAkgICAgZGFlbW9uX2V4aXQoMCk7CisgCX0KKysJaWYgKHBpZCkKKysJICAgIGNyZWF0ZV9waWRfZmlsZShwaWQpOworKyAgICB9IGVsc2UgeworKwljcmVhdGVfcGlkX2ZpbGUoYmFja2VuZF9nZXRwaWQoKSk7CisgICAgIH0KKyAjZW5kaWYJCQkJICAgICAgIC8qIFdJTjMyICovCisgCitAQCAtMTAwNiw4ICsxMDEwLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJLyogbm8gdW1hc2sgdG8gbm90IHNjcmV3IHVwIGNyZWF0ZSBtb2RlcyAqLworIAl1bWFzaygwKTsKKyAKKysjaWZkZWYgV0lOMzIKKyAJLyogY3JlYXRlIHBpZCBmaWxlIGlmIHdhbnRlZCAqLworLQljcmVhdGVfcGlkX2ZpbGUoKTsKKysJY3JlYXRlX3BpZF9maWxlKGJhY2tlbmRfZ2V0cGlkKCkpOworKyNlbmRpZgorIAorIAkvKiBpbml0aWFsaXplIGludGVybmFsIHN0dWZmICovCisgCWZoX2NhY2hlX2luaXQoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfd2FybmluZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3dhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTg2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3dhcm5pbmdzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2V4cG9ydHMuKjogZml4IHdhcm5pbmdzLgorCitGaXggdGhlc2Ugd2FybmluZ3M6CitsZXgueXkuYzoxMjA3OiB3YXJuaW5nOiAneXl1bnB1dCcgZGVmaW5lZCBidXQgbm90IHVzZWQKK2xleC55eS5jOjEyNDg6IHdhcm5pbmc6ICdpbnB1dCcgZGVmaW5lZCBidXQgbm90IHVzZWQKK2V4cG9ydHMueTogSW4gZnVuY3Rpb24gJ3NldF9ob3N0bmFtZSc6CitleHBvcnRzLnk6MzM0OiB3YXJuaW5nOiBsYXJnZSBpbnRlZ2VyIGltcGxpY2l0bHkgdHJ1bmNhdGVkIHRvIHVuc2lnbmVkIHR5cGUKK2V4cG9ydHMueTogSW4gZnVuY3Rpb24gJ3NldF9pcGFkZHInOgorZXhwb3J0cy55OjM1MDogd2FybmluZzogbGFyZ2UgaW50ZWdlciBpbXBsaWNpdGx5IHRydW5jYXRlZCB0byB1bnNpZ25lZCB0eXBlCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIENvbmZpZy9leHBvcnRzLmwgfCAgICAzICsrKworIENvbmZpZy9leHBvcnRzLnkgfCAgICA2ICsrKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9Db25maWcvZXhwb3J0cy5sCisrKysgYi9Db25maWcvZXhwb3J0cy5sCitAQCAtNDgsNiArNDgsOSBAQCBORVRDT01QIFswLTldezEsMn0KKyBORVQge0lQfSIvIntORVRDT01QfQorIE9MRE5FVCB7SVB9Ii8ie0lQfQorIAorKyVvcHRpb24gbm91bnB1dAorKyVvcHRpb24gbm9pbnB1dAorKworICUlCisgCisgXntXSElURX0qXG4JCXsgLyogZWF0IGVtcHR5IGxpbmUgKi8gfQorLS0tIGEvQ29uZmlnL2V4cG9ydHMueQorKysrIGIvQ29uZmlnL2V4cG9ydHMueQorQEAgLTMzMSw3ICszMzEsOCBAQCBzdGF0aWMgdm9pZCBzZXRfaG9zdG5hbWUoY29uc3QgY2hhciAqbmFtCisgCWlmIChlbnQpIHsKKyAJCW1lbWNweSgmY3VyX2hvc3QuYWRkciwgZW50LT5oX2FkZHJfbGlzdFswXSwKKyAJCSAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKy0JCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfjBVTDsKKysJCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gMDsKKysJCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfmN1cl9ob3N0Lm1hc2suc19hZGRyOworIAl9IGVsc2UgeworIAkJbG9nbXNnKExPR19DUklULCAiY291bGQgbm90IHJlc29sdmUgaG9zdG5hbWUgJyVzJyIsIG5hbWUpOworIAkJZV9lcnJvciA9IFRSVUU7CitAQCAtMzQ3LDcgKzM0OCw4IEBAIHN0YXRpYyB2b2lkIHNldF9pcGFkZHIoY29uc3QgY2hhciAqYWRkcikKKyAJCisgCWlmICghaW5ldF9hdG9uKGFkZHIsICZjdXJfaG9zdC5hZGRyKSkKKyAJCWVfZXJyb3IgPSBUUlVFOworLQljdXJfaG9zdC5tYXNrLnNfYWRkciA9IH4wVUw7CisrCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gMDsKKysJY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+Y3VyX2hvc3QubWFzay5zX2FkZHI7CisgfQorIAorIC8qCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaApAQCAtMCwwICsxLDc0IEBACituZnMuYzogQWxsb3cgbWF4IHNhLnN1bl9wYXRoIGZvciBhIGxvY2FsZG9tYWluIHNvY2tldCB3aXRoIHRoZSB1c2VyIG5mcy1zZXJ2ZXIKKworVGhlcmUgaXMgYSBoYXJkIGxpbWl0IGZvciB0aGUga2VybmVsIG9mIDEwOCBjaGFyYWN0ZXJzIGZvciBhCitsb2NhbGRvbWFpbiBzb2NrZXQgbmFtZS4gIFRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGhlIHVzZXIgbmZzCitzZXJ2ZXIgaXQgc2hvdWxkIG1heGltaXplIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBieSB1c2luZworYSByZWxhdGl2ZSBwYXRoIG9uIHRoZSBzZXJ2ZXIgc2lkZS4KKworUHJldmlvdXNseSB0aGUgbmZzLXNlcnZlciB1c2VkIHRoZSBhYnNvbHV0ZSBwYXRoIG5hbWUgcGFzc2VkIHRvCit0aGUgc2Euc3VucGF0aCBhcmcgZm9yIGJpbmRpbmcgdGhlIHNvY2tldCBhbmQgdGhpcyBoYXMgY2F1c2VkCitwcm9ibGVtcyBmb3IgYm90aCB0aGUgWCBzZXJ2ZXIgYW5kIFVTVCBiaW5hcmllcyB3aGljaCBtYWtlCitoZWF2eSB1c2Ugb2YgbmFtZWQgc29ja2V0cyB3aXRoIGxvbmcgbmFtZXMuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIG5mcy5jIHwgICAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9uZnMuYworKysrIGIvbmZzLmMKK0BAIC02NzIsNiArNjcyLDcgQEAgU1lNTElOSzNyZXMgKm5mc3Byb2MzX3N5bWxpbmtfM19zdmMoU1lNTAorIH0KKyAKKyAjaWZuZGVmIFdJTjMyCisrc3RhdGljIGNoYXIgcGF0aGJ1Zl90bXBbTkZTX01BWFBBVEhMRU4gKyBORlNfTUFYTkFNTEVOICsgMV07CisgCisgLyoKKyAgKiBjcmVhdGUgVW5peCBzb2NrZXQKK0BAIC02ODAsMTcgKzY4MSw0MSBAQCBzdGF0aWMgaW50IG1rc29ja2V0KGNvbnN0IGNoYXIgKnBhdGgsIG1vCisgeworICAgICBpbnQgcmVzLCBzb2NrOworICAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKysgICAgdW5zaWduZWQgaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKyAKKyAgICAgc29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7CistICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CistICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBwYXRoKTsKKyAgICAgcmVzID0gc29jazsKKyAgICAgaWYgKHJlcyAhPSAtMSkgeworKwlhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworKwlpZiAobGVuIDwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpIC0xKSB7CisrCSAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgcGF0aCk7CisrCX0gZWxzZSB7CisrCSAgICBjaGFyICpwdHI7CisrCSAgICByZXMgPSAtMTsKKysJICAgIGlmIChsZW4gPj0gc2l6ZW9mKHBhdGgpKQorKwkJZ290byBvdXQ7CisrCSAgICBzdHJjcHkocGF0aGJ1Zl90bXAsIHBhdGgpOworKwkgICAgcHRyID0gc3RycmNocihwYXRoYnVmX3RtcCwnLycpOworKwkgICAgaWYgKHB0cikgeworKwkJKnB0ciA9ICdcMCc7CisrCQlwdHIrKzsKKysJCWlmIChjaGRpcihwYXRoYnVmX3RtcCkpCisrCQkgICAgZ290byBvdXQ7CisrCSAgICB9IGVsc2UgeworKwkJcHRyID0gcGF0aGJ1Zl90bXA7CisrCSAgICB9CisrCSAgICBpZiAoc3RybGVuKHB0cikgPj0gc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKQorKwkJZ290byBvdXQ7CisrCSAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgcHRyKTsKKysJfQorIAl1bWFzayh+bW9kZSk7CisgCXJlcyA9CisgCSAgICBiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsCisgCQkgc2l6ZW9mKGFkZHIuc3VuX2ZhbWlseSkgKyBzdHJsZW4oYWRkci5zdW5fcGF0aCkpOworIAl1bWFzaygwKTsKKytvdXQ6CisrCWlmIChjaGRpcigiLyIpKQorKwkgICAgZnByaW50ZihzdGRlcnIsICJJbnRlcm5hbCBmYWlsdXJlIHRvIGNoZGlyIC9cbiIpOworIAljbG9zZShzb2NrKTsKKyAgICAgfQorICAgICByZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbmFtZV9maF9jYWNoZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZW5hbWVfZmhfY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkODk1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZW5hbWVfZmhfY2FjaGUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjMgRmViIDIwMTMgMDg6NDk6MDggLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gZmhfY2FjaGU6IGZpeCBzdGF0bGUgbmZzIGhhbmRsZSBvbiByZW5hbWUgcHJvYmxlbQorCitUaGUgZm9sbG93aW5nIHRlc3QgY2FzZSBmYWlscyB3aXRoIG1vZGVybiBsaW51bngga2VybmVscyB3aGljaCBjYWNoZQordGhlIHJlbmFtZWQgaW5vZGUuCisKKyAgJSBta2RpciBhO21rZGlyIGI7bXYgYiBhLztscyAtbCBhCisgIGxzOiBhL2I6IFN0YWxlIE5GUyBmaWxlIGhhbmRsZQorCitUaGUgaXNzdWUgaXMgdGhhdCBuZnNlcnZlciB3YXMgbm90IHVwZGF0aW5nIHRoZSBmaF9jYWNoZSB3aXRoIHRoZSBuZXcKK2xvY2F0aW9uIG9mIHRoZSBpbm9kZSwgd2hlbiBpdCBtb3ZlcyBkaXJlY3Rvcmllcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZmhfY2FjaGUuYyB8ICAgMTIgKysrKysrKysrKysrCisgZmhfY2FjaGUuaCB8ICAgIDEgKworIG5mcy5jICAgICAgfCAgICAyICsrCisgMyBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2ZoX2NhY2hlLmMKKysrKyBiL2ZoX2NhY2hlLmMKK0BAIC0xOTksNiArMTk5LDE4IEBAIHN0YXRpYyBjaGFyICpmaF9jYWNoZV9sb29rdXAodWludDMyIGRldiwKKyB9CisgCisgLyoKKysgKiB1cGRhdGUgYSBmaCBpbm9kZSBjYWNoZSBmb3IgYW4gb3BlcmF0aW9uIGxpa2UgcmVuYW1lCisrICovCisrdm9pZCBmaF9jYWNoZV91cGRhdGUobmZzX2ZoMyBmaCwgY2hhciAqcGF0aCkKKyt7CisrICAgIHVuZnMzX2ZoX3QgKm9iaiA9ICh2b2lkICopIGZoLmRhdGEuZGF0YV92YWw7CisrICAgIGJhY2tlbmRfc3RhdHN0cnVjdCBidWY7CisrCisrICAgIGlmIChiYWNrZW5kX2xzdGF0KHBhdGgsICZidWYpICE9IC0xKSB7CisrCWZoX2NhY2hlX2FkZChvYmotPmRldiwgYnVmLnN0X2lubywgcGF0aCk7CisrICAgIH0KKyt9CisrLyoKKyAgKiByZXNvbHZlIGEgZmlsZW5hbWUgaW50byBhIHBhdGgKKyAgKiBjYWNoZS11c2luZyB3cmFwcGVyIGZvciBmaF9kZWNvbXBfcmF3CisgICovCistLS0gYS9maF9jYWNoZS5oCisrKysgYi9maF9jYWNoZS5oCitAQCAtMTksNSArMTksNiBAQCB1bmZzM19maF90IGZoX2NvbXAoY29uc3QgY2hhciAqcGF0aCwgc3RyCisgdW5mczNfZmhfdCAqZmhfY29tcF9wdHIoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN2Y19yZXEgKnJxc3RwLCBpbnQgbmVlZF9kaXIpOworIAorIGNoYXIgKmZoX2NhY2hlX2FkZCh1aW50MzIgZGV2LCB1aW50NjQgaW5vLCBjb25zdCBjaGFyICpwYXRoKTsKKyt2b2lkIGZoX2NhY2hlX3VwZGF0ZShuZnNfZmgzIGZoLCBjaGFyICpwYXRoKTsKKyAKKyAjZW5kaWYKKy0tLSBhL25mcy5jCisrKysgYi9uZnMuYworQEAgLTg3Niw2ICs4NzYsOCBAQCBSRU5BTUUzcmVzICpuZnNwcm9jM19yZW5hbWVfM19zdmMoUkVOQU1FCisgCSAgICByZXMgPSBiYWNrZW5kX3JlbmFtZShmcm9tX29iaiwgdG9fb2JqKTsKKyAJICAgIGlmIChyZXMgPT0gLTEpCisgCQlyZXN1bHQuc3RhdHVzID0gcmVuYW1lX2VycigpOworKwkgICAgLyogVXBkYXRlIHRoZSBmaF9jYWNoZSB3aXRoIG1vdmVkIGlub2RlIHZhbHVlICovCisrCSAgICBmaF9jYWNoZV91cGRhdGUoYXJncC0+dG8uZGlyLCB0b19vYmopOworIAl9CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy90Y3Bfbm9fZGVsYXkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdGNwX25vX2RlbGF5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTIxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdGNwX25vX2RlbGF5LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK2RhZW1vbi5jOiBBZGQgb3B0aW9uIGZvciB0Y3Agbm8gZGVsYXkKKworQWxsb3cgdGhlIE5GUyB0Y3Agc29ja2V0cyB0byBjb25kaXRpb25hbGx5IHVzZSBUQ1BfTk9ERUxBWQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgIDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC0xNyw2ICsxNyw3IEBACisgI2lmbmRlZiBXSU4zMgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgI2luY2x1ZGUgPHN5c2xvZy5oPgorICNlbHNlCQkJCSAgICAgICAvKiBXSU4zMiAqLworQEAgLTc1LDYgKzc2LDcgQEAgdW5zaWduZWQgaW50IG9wdF9tb3VudF9wb3J0ID0gTkZTX1BPUlQ7CisgaW50IG9wdF9zaW5nbGV1c2VyID0gRkFMU0U7CisgaW50IG9wdF9icnV0ZV9mb3JjZSA9IEZBTFNFOworIGludCBvcHRfdGVzdGNvbmZpZyA9IEZBTFNFOworK2ludCBvcHRfdGNwX25vZGVsYXkgPSBGQUxTRTsKKyBzdHJ1Y3QgaW5fYWRkciBvcHRfYmluZF9hZGRyOworIGludCBvcHRfcmVhZGFibGVfZXhlY3V0YWJsZXMgPSBGQUxTRTsKKyBjaGFyICpvcHRfcGlkX2ZpbGUgPSBOVUxMOworQEAgLTIwOCw3ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgeworIAorICAgICBpbnQgb3B0ID0gMDsKKy0gICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6eDp5OiI7CisrICAgIGNoYXIgKm9wdHN0cmluZyA9ICJiY0M6ZGU6aGw6bTpObjpwcnN0VHV3aTp4Onk6IjsKKyAKKyAgICAgd2hpbGUgKG9wdCAhPSAtMSkgeworIAlvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgb3B0c3RyaW5nKTsKK0BAIC0yOTUsNiArMjk3LDkgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhcgorIAkJICAgIGV4aXQoMSk7CisgCQl9CisgCQlicmVhazsKKysJICAgIGNhc2UgJ04nOgorKwkJb3B0X3RjcF9ub2RlbGF5ID0gVFJVRTsKKysJCWJyZWFrOworIAkgICAgY2FzZSAnbic6CisgCQlvcHRfbmZzX3BvcnQgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisgCQlpZiAob3B0X25mc19wb3J0ID09IDApIHsKK0BAIC04MDIsNiArODA3LDggQEAgc3RhdGljIFNWQ1hQUlQgKmNyZWF0ZV90Y3BfdHJhbnNwb3J0KHVucworIAlzaW4uc2luX2FkZHIuc19hZGRyID0gb3B0X2JpbmRfYWRkci5zX2FkZHI7CisgCXNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworIAlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNvbnN0IGNoYXIgKikgJm9uLCBzaXplb2Yob24pKTsKKysJaWYgKG9wdF90Y3Bfbm9kZWxheSkKKysJICAgIHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmb24sIHNpemVvZihvbikpOworIAlpZiAoYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSkgeworIAkgICAgcGVycm9yKCJiaW5kIik7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGJpbmQgdG8gdGNwIHBvcnQgJWRcbiIsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjRkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRml4IHBhcmFsbGVsIGJ1aWxkIGRlcGVuZGVuY3kgaXNzdWUKKworSWYgYnVpbGRpbmcgd2l0aCBtYWtlIC1qMiB0aGUgbGliLmEgd2lsbCBub3QgZ2V0IGJ1aWx0IGluIHRpbWUuCisKK0phc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIENvbmZpZy9NYWtlZmlsZS5pbiB8ICAgIDMgKysrCisgTWFrZWZpbGUuaW4gICAgICAgIHwgICAgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yOSw3ICsyOSw4IEBAIERFU1RESVIgPQorIAorIFZQQVRIID0gJChzcmNkaXIpCisgCistYWxsOiBzdWJkaXJzIHVuZnNkJChFWEVFWFQpCisrYWxsOiBzdWJkaXJzCisrCSQoTUFLRSkgdW5mc2QkKEVYRUVYVCkKKyAKKyB1bmZzZCQoRVhFRVhUKTogJChPQkpTKSAkKENPTkZPQkopICQoRVhUUkFPQkopCisgCSQoQ0MpIC1vICRAICQoT0JKUykgJChDT05GT0JKKSAkKEVYVFJBT0JKKSAkKExERkxBR1MpCistLS0gYS9Db25maWcvTWFrZWZpbGUuaW4KKysrKyBiL0NvbmZpZy9NYWtlZmlsZS5pbgorQEAgLTE2LDYgKzE2LDkgQEAgbGliLmE6ICQoT0JKUykKKyAJJChBUikgY3JzIGxpYi5hICQoT0JKUykKKyAKKyB5LnRhYi5oIHkudGFiLmM6ICQoc3JjZGlyKS9leHBvcnRzLnkKKyt5LnRhYi5oOiB5LnRhYi5jCisrCisreS50YWIuYzogJChzcmNkaXIpL2V4cG9ydHMueQorIAkkKFlBQ0MpIC1kICQoc3JjZGlyKS9leHBvcnRzLnkKKyAKKyB5LnRhYi5vOiB5LnRhYi5jICQoc3JjZGlyKS9leHBvcnRzLmggJCh0b3Bfc3JjZGlyKS9uZnMuaCAkKHRvcF9zcmNkaXIpL21vdW50LmggJCh0b3Bfc3JjZGlyKS9kYWVtb24uaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDkwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDkwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2Y1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTAuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgTkZTIHNlcnZlciB2MyBwcm90b2NvbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJ1bmZzMyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTk0NzU4ODUyOTRlMTdjMGNjMDA2NzgyMGQwNDI3OTJlIgorCisjIFNWTiBzdXBwb3J0IGZvciB1cHN0cmVhbSB2ZXJzaW9uIGNoZWNrIGlzbid0IGltcGxlbWVudGVkIHlldAorUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04gPSAiMC45LjIyLnI0OTUiCitSRUNJUEVfVVBTVFJFQU1fREFURSA9ICJGZWIgMDUsIDIwMTUiCitDSEVDS19EQVRFID0gIkp1biAxMCwgMjAxNSIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgZmxleCIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayArPSAiZmxleC1uYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNjg3YWNjNGVlOTkyZTUzNjQ3MjM2NWRkOTk3MTJhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNzRiNDNhZGE5YzZlZWExZGEyNmViNzAxMGQ3Mjg4OWM1Mjc4OTg0YmEwYjUwZGZmNGUwOTMwNTdkNGQ2NGY4IgorCitNT0RfUFYgPSAiNDkwIgorUyA9ICIke1dPUktESVJ9L3RydW5rIgorU1JDX1VSSSA9ICJzdm46Ly9zdm4uY29kZS5zZi5uZXQvcC91bmZzMy9jb2RlO21vZHVsZT10cnVuaztyZXY9JHtNT0RfUFZ9IFwKKyAgICAgICAgICAgZmlsZTovL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lX2ZoX2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbGF0aXZlX21heF9zb2NrZXRfcGF0aF9sZW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3dhcm5pbmdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjcF9ub19kZWxheS5wYXRjaCBcCisgICAgICAgICAgIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitpbmhlcml0IGF1dG90b29scworCisjIFR1cm4gb2ZmIHRoZXNlIGhlYWRlciBkZXRlY3RzIGVsc2UgdGhlIGlub2RlIHNlYXJjaAorIyB3aWxsIHdhbGsgZW50aXJlIGZpbGUgc3lzdGVtcyBhbmQgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbQorIyBpZiB5b3UgaGF2ZSAyIFRCIG9mIGZpbGVzIHRvIHdhbGsgaW4geW91ciBmaWxlIHN5c3RlbQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfaGVhZGVyX21udGVudF9oPW5vIGFjX2N2X2hlYWRlcl9zeXNfbW50dGFiX2g9bm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5pZmRlZi91bmlmZGVmXzIuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5pZmRlZi91bmlmZGVmXzIuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhMDA3OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmlmZGVmL3VuaWZkZWZfMi4xMC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlNlbGVjdGl2ZWx5IHJlbW92ZSAjaWZkZWYgc3RhdGVtZW50cyBmcm9tIHNvdXJjZXMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3VuaWZkZWYuYztlbmRsaW5lPTMyO21kNT0yY2MyM2YwMzgyYTZmNTYwZjZhOWVjZjRlMDQwYzBkYSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG90YXQuYXQvcHJvZy8ke0JQTn0vJHtCUH0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gImJiNWQ4OTVlNWViYmJhNWM1Y2MwYzI3NzFjZjk3ZWJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNiOWIyYjZiMTk1MmU5YjljMWI5ZjczNGVkZWMyNzA2ODlhMzViZGJmMzNhZTY2YjUwZTE5YjJlZDBkMmRmMDYiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBwcmVmaXg9JHtwcmVmaXh9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA1NmZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJDIy1saWtlIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciBlYXNpbmcgR09iamVjdCBwcm9ncmFtbWluZyIKK0RFU0NSSVBUSU9OID0gIlZhbGEgaXMgYSBDIy1saWtlIGxhbmd1YWdlIGRlZGljYXRlZCB0byBlYXNlIEdPYmplY3QgcHJvZ3JhbW1pbmcuIFwKK1ZhbGEgY29tcGlsZXMgdG8gcGxhaW4gQyBhbmQgaGFzIG5vIHJ1bnRpbWUgZW52aXJvbm1lbnQgbm9yIHBlbmFsaXRpZXMgd2hhdHNvZXZlci4iCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgbGlieHNsdC1uYXRpdmUgZ2xpYi0yLjAiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0hPTUVQQUdFID0gImh0dHA6Ly92YWxhLXByb2plY3Qub3JnIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitTSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvJHtCUE59LyR7U0hSVF9WRVJ9LyR7QlB9LnRhci54eiIKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS8ke0JQTn0tJHtTSFJUX1ZFUn0vdmFwaSAke2xpYmRpcn0vJHtCUE59LSR7U0hSVF9WRVJ9LyIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LSR7U0hSVF9WRVJ9Ly5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEvMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5ZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEvMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gMjQ2MGQ3Yjc5ZjdlOTBkY2ZlZWJkZTVlOWM1M2Q5YjY3OThhMWYzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgRmViIDIwMTIgMTc6MTI6NTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2l0LXZlcnNpb24tZ2VuOiBkb24ndCBhcHBlbmQgLWRpcnR5IGlmIHdlJ3JlIG5vdCBpbiBnaXQKKyByZXBvCisKKyogZm9yIGV4YW1wbGUgaWYgd2UgaGF2ZSBzb21lIGRpcnR5IGRpcmVjdG9yeSBhbmQgd2UgdW5wYWNrIGNsZWFuIHZhbGEgdGFyYmFsbCBpbiBpdCwgdGhlbiBpdCB3aWxsIGFwcGVuZCAtZGlydHkKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorLS0tCisgYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbiB8ICAgMjUgKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIGIvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgoraW5kZXggMGZhNmZhYS4uMWQxZjlkMiAxMDA3NTUKKy0tLSBhL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKysrKyBiL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KK0BAIC0xMjYsMTggKzEyNiwyMSBAQCBmaQorIAorIHY9YGVjaG8gIiR2IiB8c2VkICdzL152Ly8nYAorIAorLSMgRG9uJ3QgZGVjbGFyZSBhIHZlcnNpb24gImRpcnR5IiBtZXJlbHkgYmVjYXVzZSBhIHRpbWUgc3RhbXAgaGFzIGNoYW5nZWQuCistZ2l0IHN0YXR1cyA+IC9kZXYvbnVsbCAyPiYxCisraWYgdGVzdCAtZCAuZ2l0CisrdGhlbgorKwkjIERvbid0IGRlY2xhcmUgYSB2ZXJzaW9uICJkaXJ0eSIgbWVyZWx5IGJlY2F1c2UgYSB0aW1lIHN0YW1wIGhhcyBjaGFuZ2VkLgorKwlnaXQgc3RhdHVzID4gL2Rldi9udWxsIDI+JjEKKyAKKy1kaXJ0eT1gc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsYCB8fCBkaXJ0eT0KKy1jYXNlICIkZGlydHkiIGluCistICAgICcnKSA7OworLSAgICAqKSAjIEFwcGVuZCB0aGUgc3VmZml4IG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuCistCWNhc2UgJHYgaW4KKy0JICAqLWRpcnR5KSA7OworLQkgICopIHY9IiR2LWRpcnR5IiA7OworLQllc2FjIDs7CistZXNhYworKwlkaXJ0eT1gc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsYCB8fCBkaXJ0eT0KKysJY2FzZSAiJGRpcnR5IiBpbgorKwkgICAgJycpIDs7CisrCSAgICAqKSAjIEFwcGVuZCB0aGUgc3VmZml4IG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuCisrCQljYXNlICR2IGluCisrCQkgICotZGlydHkpIDs7CisrCQkgICopIHY9IiR2LWRpcnR5IiA7OworKwkJZXNhYyA7OworKwllc2FjCisrZmkKKyAKKyAjIE9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUsIHNvIHRoYXQgbTRfZXN5c2NtZCBjYW4gdXNlIHRoZSByZXN1bHQgZGlyZWN0bHkuCisgZWNobyAiJHYiIHwgdHIgLWQgJ1wwMTInCistLSAKKzEuNy44LjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjI4LjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMjguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA5MDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjI4LjAuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSArPSAiIGZpbGU6Ly8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZDRjZWFjMzQ1MWEwZDU0OTdlN2JlMzhlNWU0YzJhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZDllM2JkM2Y4MjE0NTY2NDg3NWY3YzI5YjJmNTQ0YmE5MmQyODE0Zjc1NDEyOTQ4Zjc3NGMwNzI3ZmM5NzdmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiYjVmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxYTgwMDZmNTYzNDJkYWU5ZjcxMDBhM2MzM2Q4MDg3MzY3NmUwNDA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNCBBdWcgMjAxNSAwMzo1NToxOCAtMDQwMAorU3ViamVjdDogW1BBVENIXSB2YWxncmluZDogRW5hYmxlIHJ0X3NpZ3BlbmRpbmcgc3lzY2FsbCBvbiBwcGM2NCBsaW51eAorCitOZXcgUmV2aXNpb246IDE1MTMzCitFbmFibGUgcnRfc2lncGVuZGluZyBzeXNjYWxsIG9uIHBwYzY0IGxpbnV4LgorUGF0Y2ggZnJvbSBUaG9tYXMgSHV0aCA8dGh1dGhAcmVkaGF0LmNvbT4KKworR2V0IHRoZSBwYXRjaCBmcm9tIHZhbGdyaW5kIHVwc3RyZWFtOgoraHR0cDovL3ZhbGdyaW5kLjEwOTA4Lm43Lm5hYmJsZS5jb20vVmFsZ3JpbmQtcjE1MTMzLWluLXRydW5rLU5FV1MtY29yZWdyaW5kLW0tc3lzd3JhcC1zeXN3cmFwLXBwYzY0LWxpbnV4LWMtdGQ1NDU4OS5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jCitpbmRleCA1OTQ2ZWUxLi44YWFhMWQ3IDEwMDY0NAorLS0tIGEvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMKKysrKyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jCitAQCAtODg3LDcgKzg4Nyw3IEBAIHN0YXRpYyBTeXNjYWxsVGFibGVFbnRyeSBzeXNjYWxsX3RhYmxlW10gPSB7CisgICAgTElOWFkoX19OUl9ydF9zaWdhY3Rpb24sICAgICAgc3lzX3J0X3NpZ2FjdGlvbiksICAgICAgIC8vIDE3MworICAgIExJTlhZKF9fTlJfcnRfc2lncHJvY21hc2ssICAgIHN5c19ydF9zaWdwcm9jbWFzayksICAgICAvLyAxNzQKKyAKKy0vLyBfX19fXyhfX05SX3J0X3NpZ3BlbmRpbmcsICAgICBzeXNfcnRfc2lncGVuZGluZyksICAgICAgLy8gMTc1CisrICAgTElOWFkoX19OUl9ydF9zaWdwZW5kaW5nLCAgICAgc3lzX3J0X3NpZ3BlbmRpbmcpLCAgICAgIC8vIDE3NQorICAgIExJTlhZKF9fTlJfcnRfc2lndGltZWR3YWl0LCAgIHN5c19ydF9zaWd0aW1lZHdhaXQpLCAgICAvLyAxNzYKKyAgICBMSU5YWShfX05SX3J0X3NpZ3F1ZXVlaW5mbywgICBzeXNfcnRfc2lncXVldWVpbmZvKSwgICAgLy8gMTc3CisgICAgTElOWF8oX19OUl9ydF9zaWdzdXNwZW5kLCAgICAgc3lzX3J0X3NpZ3N1c3BlbmQpLCAgICAgIC8vIDE3OAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc3NGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIDBiZjRiMGFjMThkMWVhNDFiMzJhZDc4MWQyMTRiMjk1Y2ExOTk4ZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CitEYXRlOiBNb24sIDIxIE5vdiAyMDExIDE3OjMxOjM5ICswNTMwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZGVkIHN1cHBvcnQgZm9yIFBQQyBpbnN0cnVjdGlvbnMgbWZhdGJ1LCBtZmF0YmwuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CistLS0KK0N1cnJlbnRseSBWYWxncmluZCAzLjcuMCBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIFBQQyBpbnN0cnVjdGlvbnMgbWZhdGJ1IGFuZCBtZmF0YmwuIFdoZW4gd2UgcnVuIGEgVVNEUEFBIGFwcGxpY2F0aW9uIHdpdGggVkFMR1JJTkQsIHRoZSBmb2xsb3dpbmcgZXJyb3IgaXMgZ2l2ZW4gYnkgdmFsZ3JpbmQgOgorZGlzX3Byb2NfY3RsKHBwYykobWZzcHIsU1BSKSgweDIwRikKK2Rpc0luc3RyKHBwYyk6IHVuaGFuZGxlZCBpbnN0cnVjdGlvbjogMHg3QzBGODJBNgorCisKKyBWRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oICAgIHwgICAgMiArKworIFZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMgfCAgIDE4ICsrKysrKysrKysrKysrKysrKworIFZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9WRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaAoraW5kZXggZGQzYzYyZS4uMTFhMzRhYSAxMDA2NDQKKy0tLSBhL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmgKKysrKyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmgKK0BAIC0xNDYsNiArMTQ2LDggQEAgZXh0ZXJuIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI2OF8yNjkgKCBVSW50ICk7CisgCisgZXh0ZXJuIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI4NyAoIHZvaWQgKTsKKyAKKytleHRlcm4gVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyAoIFVJbnQgKTsKKysKKyBleHRlcm4gdm9pZCBwcGMzMmdfZGlydHloZWxwZXJfTFZTICggVmV4R3Vlc3RQUEMzMlN0YXRlKiBnc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQgdkRfaWR4LCBVSW50IHNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50IHNoaWZ0X3JpZ2h0ICk7CitkaWZmIC0tZ2l0IGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMKK2luZGV4IDExYWE0MjguLmI0OWVhM2YgMTAwNjQ0CistLS0gYS9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jCisrKysgYi9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jCitAQCAtMTE5LDYgKzExOSwyNCBAQCBVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl8yODcgKCB2b2lkICkKKyAjICBlbmRpZgorIH0KKyAKKysvKiBDQUxMRUQgRlJPTSBHRU5FUkFURUQgQ09ERSAqLworKy8qIERJUlRZIEhFTFBFUiAobm9uLXJlZmVyZW50aWFsbHkgdHJhbnNwYXJlbnQpICovCisrVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyAoIFVJbnQgcjUyNyApCisreworKyMgIGlmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX0FJWCkKKysgICBVSW50IHNwcjsKKysgICBpZiAocjUyNykgeworKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtZnNwciAlMCw1MjciIDogIj1iIihzcHIpKTsKKysgICB9IGVsc2UgeworKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtZnNwciAlMCw1MjYiIDogIj1iIihzcHIpKTsKKysgICB9CisrICAgcmV0dXJuIHNwcjsKKysjICBlbHNlCisrICAgcmV0dXJuIDA7CisrIyAgZW5kaWYKKyt9CisrCisrCisgCisgLyogQ0FMTEVEIEZST00gR0VORVJBVEVEIENPREUgKi8KKyAvKiBESVJUWSBIRUxQRVIgKHJlYWRzIGd1ZXN0IHN0YXRlLCB3cml0ZXMgZ3Vlc3QgbWVtKSAqLworZGlmZiAtLWdpdCBhL1ZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMgYi9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jCitpbmRleCBmOGQyMjBkLi4zN2M4OTc0IDEwMDY0NAorLS0tIGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYworKysrIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYworQEAgLTU2NTcsNiArNTY1NywyOCBAQCBzdGF0aWMgQm9vbCBkaXNfcHJvY19jdGwgKCBWZXhBYmlJbmZvKiB2YmksIFVJbnQgdGhlSW5zdHIgKQorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAKKysKKysgICAgICBjYXNlIDUyNiAvKiAweDIwRSAqLzoKKysgICAgICBjYXNlIDUyNyAvKiAweDIwRiAqLzogeworKyAgICAgICAgIFVJbnQgICAgIGFyZyAgPSBTUFI9PTUyNiA/IDAgOiAxOworKyAgICAgICAgIElSVGVtcCAgIHZhbCAgPSBuZXdUZW1wKEl0eV9JMzIpOworKyAgICAgICAgIElSRXhwcioqIGFyZ3MgPSBta0lSRXhwclZlY18xKCBta1UzMihhcmcpICk7CisrICAgICAgICAgSVJEaXJ0eSogZCAgICA9IHVuc2FmZUlSRGlydHlfMV9OKAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAvKnJlZ3Bhcm1zKi8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZucHRyX3RvX2ZuZW50cnkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZiaSwgJnBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncworKyAgICAgICAgICAgICAgICAgICAgICAgICApOworKyAgICAgICAgIC8qIGV4ZWN1dGUgdGhlIGRpcnR5IGNhbGwsIGR1bXBpbmcgdGhlIHJlc3VsdCBpbiB2YWwuICovCisrICAgICAgICAgc3RtdCggSVJTdG10X0RpcnR5KGQpICk7CisrICAgICAgICAgcHV0SVJlZyggckRfYWRkciwKKysgICAgICAgICAgICAgICAgICBta1dpZGVuRnJvbTMyKHR5LCBta2V4cHIodmFsKSwgRmFsc2UvKnVuc2lnbmVkKi8pICk7CisrICAgICAgICAgRElQKCJtZnNwciByJXUsJXUiLCByRF9hZGRyLCAoVUludClTUFIpOworKyAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysKKyAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHZleF9wcmludGYoImRpc19wcm9jX2N0bChwcGMpKG1mc3ByLFNQUikoMHgleClcbiIsIFNQUik7CisgICAgICAgICAgcmV0dXJuIEZhbHNlOworLS0gCisxLjcuMC40CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvYWRkLXB0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2FkZC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVmODQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2FkZC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDI0MyBAQAorTW9kaWZ5IHZnX3Rlc3Qgd3JhcHBlciB0byBzdXBwb3J0IFBURVNUIGZvcm1hdHMKKworQ2hhbmdlIHRoZSB2YWxncmluZCByZWdyZXNzaW9uIHRlc3Qgc2NyaXB0IHZnX3JlZ3Rlc3QgdG8KK3N1cHBvcnQgdGhlIHlvY3RvIHB0ZXN0IHN0ZG91dCByZXBvcnRpbmcgZm9ybWF0LiAgVGhlIGNvbW1pdCBhZGRzCisnLS15b2N0by1wdGVzdCcgYXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gdmdfcmVndGVzdCwgd2hpY2ggYWx0ZXJzCit0aGUgb3V0cHV0IHRvIHVzZSB0aGUgcHRlc3QgaW5mcmFzdHJ1Y3R1cmUgcmVwb3J0aW5nIGZvcm1hdDoKKyAgICAiW1BBU1N8U0tJUHxGQUlMXTogdGVzdG5hbWUiCitpbnN0ZWFkIG9mIHZhbGdyaW5kJ3MgaW50ZXJuYWwgdGVzdCByZXBvcnRpbmcgZm9ybWF0LiAgV2l0aG91dCB0aGUgYWRkZWQKK29wdGlvbiwgLS15b2N0by1wdGVzdCwgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaXMgdW5jaGFuZ2VkLgorCitFbmZvcmNlIDMwIHNlY29uZHMgbGltaXQgZm9yIHRoZSB0ZXN0LgorVGhpcyByZXN1bWUgZXhlY3V0aW9uIG9mIHRoZSByZW1haW5pbmcgdGVzdHMgd2hlbiB2YWxncmluZCBoYW5ncy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy92Z19yZWd0ZXN0LmluIGIvdGVzdHMvdmdfcmVndGVzdC5pbgoraW5kZXggMjI0Mzg1Zi4uM2UwMzgzYiAxMDA3NTUKKy0tLSBhL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4KKysrKyBiL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4KK0BAIC0zOSwxMSArMzksMTEgQEAKKyAjICAgICAgICAgICAgICAgLS12YWxncmluZC4pCisgIyAgIC0ta2VlcC11bmZpbHRlcmVkOiBrZWVwIGEgY29weSBvZiB0aGUgdW5maWx0ZXJlZCBvdXRwdXQvZXJyb3Igb3V0cHV0CisgIyAgICAgb2YgZWFjaCB0ZXN0IGJ5IGFkZGluZyBhbiBleHRlbnNpb24gLnVuZmlsdGVyZWQub3V0CistIworICMgICAtLW91dGVyLXZhbGdyaW5kOiBydW4gdGhpcyB2YWxncmluZCB1bmRlciB0aGUgZ2l2ZW4gb3V0ZXIgdmFsZ3JpbmQuCisgIyAgICAgVGhpcyB2YWxncmluZCBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1pbm5lci4KKyAjICAgLS1vdXRlci10b29sOiB0b29sIHRvIHVzZSBieSB0aGUgb3V0ZXIgdmFsZ3JpbmQgKGRlZmF1bHQgbWVtY2hlY2spLgorICMgICAtLW91dGVyLWFyZ3M6IHVzZSB0aGlzIGFzIG91dGVyIHRvb2wgYXJncy4KKysjICAgLS15b2N0by1wdGVzdDogb3V0cHV0IGluIHlvY3RvIHB0ZXN0IGZvcm1hdAorICMKKyAjIFRoZSBlYXNpZXN0IHdheSBpcyB0byBydW4gYWxsIHRlc3RzIGluIHZhbGdyaW5kLyB3aXRoIChhc3N1bWluZyB5b3UgaW5zdGFsbGVkCisgIyBpbiAkUFJFRklYKToKK0BAIC0xMjYsNyArMTI2LDcgQEAgdXNlIHN0cmljdDsKKyBteSAkdXNhZ2U9IlxuIgorICAgICAgLiAiVXNhZ2U6XG4iCisgICAgICAuICIgICB2Z19yZWd0ZXN0IFstLWFsbCwgLS12YWxncmluZCwgLS12YWxncmluZC1saWIsIC0ta2VlcC11bmZpbHRlcmVkXG4iCistICAgICAuICIgICAgICAgICAgICAgICAgIC0tb3V0ZXItdmFsZ3JpbmQsIC0tb3V0ZXItdG9vbCwgLS1vdXRlci1hcmdzXVxuIgorKyAgICAgLiAiICAgICAgICAgICAgICAgICAtLW91dGVyLXZhbGdyaW5kLCAtLW91dGVyLXRvb2wsIC0tb3V0ZXItYXJncywgLS15b2N0by1wdGVzdF1cbiIKKyAgICAgIC4gIiAgIFVzZSBFWFRSQV9SRUdURVNUX09QVFMgdG8gc3VwcGx5IGV4dHJhIGFyZ3MgZm9yIGFsbCB0ZXN0c1xuIgorICAgICAgLiAiXG4iOworIAorQEAgLTE3MCw2ICsxNzAsNyBAQCBteSAkb3V0ZXJfYXJnczsKKyAKKyBteSAkdmFsZ3JpbmRfbGliID0gIiR0ZXN0c19kaXIvLmluX3BsYWNlIjsKKyBteSAka2VlcHVuZmlsdGVyZWQgPSAwOworK215ICR5b2N0b3B0ZXN0ID0gMDsKKyAKKyAjIGRlZmF1bHQgZmlsdGVyIGlzIHRoZSBvbmUgbmFtZWQgImZpbHRlcl9zdGRlcnIiIGluIHRoZSB0ZXN0J3MgZGlyZWN0b3J5CisgbXkgJGRlZmF1bHRfc3RkZXJyX2ZpbHRlciA9ICJmaWx0ZXJfc3RkZXJyIjsKK0BAIC0yMjYsNiArMjI3LDggQEAgc3ViIHByb2Nlc3NfY29tbWFuZF9saW5lKCkKKyAgICAgICAgICAgICAgICAgJHZhbGdyaW5kX2xpYiA9ICQxOworICAgICAgICAgICAgIH0gZWxzaWYgKCRhcmcgPX4gL14tLWtlZXAtdW5maWx0ZXJlZCQvKSB7CisgICAgICAgICAgICAgICAgICRrZWVwdW5maWx0ZXJlZCA9IDE7CisrICAgICAgICAgICAgfSBlbHNpZiAoJGFyZyA9fiAvXi0teW9jdG8tcHRlc3QkLykgeworKyAgICAgICAgICAgICAgICAkeW9jdG9wdGVzdCA9IDE7CisgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgZGllICR1c2FnZTsKKyAgICAgICAgICAgICB9CitAQCAtMzQwLDEzICszNDMsMjggQEAgc3ViIHJlYWRfdmd0ZXN0X2ZpbGUoJCkKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgU2luY2UgbW9zdCBvZiB0aGUgcHJvZ3JhbSB0aW1lIGlzIHNwZW50IGluIHN5c3RlbSgpIGNhbGxzLCBuZWVkIHRoaXMgdG8KKyAjIHByb3BhZ2F0ZSBhIEN0cmwtQyBlbmFibGluZyB1cyB0byBxdWl0LgorLXN1YiBteXN5c3RlbSgkKSAKKysjIEVuZm9yY2UgMzAgc2Vjb25kcyBsaW1pdCBmb3IgdGhlIHRlc3QuCisrIyBUaGlzIHJlc3VtZSBleGVjdXRpb24gb2YgdGhlIHJlbWFpbmluZyB0ZXN0cyBpZiB2YWxncmluZCBoYW5ncy4KKytzdWIgbXlzeXN0ZW0oJCkKKyB7CistICAgIG15ICRleGl0X2NvZGUgPSBzeXN0ZW0oJF9bMF0pOworLSAgICAoJGV4aXRfY29kZSA9PSAyKSBhbmQgZXhpdCAxOyAgICAgICMgMiBpcyBTSUdJTlQKKy0gICAgcmV0dXJuICRleGl0X2NvZGU7CisrICAgIG15ICRleGl0X2NvZGU9MDsKKysgICAgZXZhbCB7CisrICAgICAgICBsb2NhbCAkU0lHeydBTFJNJ30gPSBzdWIgeyBkaWUgInRpbWVkIG91dFxuIiB9OworKyAgICAgICAgYWxhcm0oMzApOworKyAgICAgICAgJGV4aXRfY29kZSA9IHN5c3RlbSgkX1swXSk7CisrICAgICAgICBhbGFybSAoMCk7CisrICAgICAgICAoJGV4aXRfY29kZSA9PSAyKSBhbmQgZGllICJTSUdJTlRcbiI7ICAgIyAyIGlzIFNJR0lOVAorKyAgICB9OworKyAgICBpZiAoJEApIHsKKysgICAgICAgIGlmICgkQCBlcSAidGltZWQgb3V0XG4iKSB7CisrICAgICAgICAgICAgcHJpbnQgInRpbWVkIG91dFxuIjsKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICgkQCBlcSAiU0lHSU5UXG4iKSB7CisrICAgICAgICAgICAgZXhpdCAxOworKyAgICAgICAgfQorKyAgICB9CisgfQorLQorICMgaWYgJGtlZXB1bmZpbHRlcmVkLCBjb3BpZXMgJDEgdG8gJDEudW5maWx0ZXJlZC5vdXQKKyAjIHJlbmFtZXMgJDAgdHAgJDEKKyBzdWIgZmlsdGVyZWRfcmVuYW1lKCQkKSAKK0BAIC0zOTQsMTkgKzQxMiwyMSBAQCBzdWIgZG9fZGlmZnMoJCQkJCkKKyAgICAgICAgICAgICAgICAgIyBBIG1hdGNoOyAgcmVtb3ZlIC5vdXQgYW5kIGFueSBwcmV2aW91c2x5IGNyZWF0ZWQgLmRpZmYgZmlsZXMuCisgICAgICAgICAgICAgICAgIHVubGluaygiJG5hbWUuJG1pZC5vdXQiKTsKKyAgICAgICAgICAgICAgICAgdW5saW5rKDwkbmFtZS4kbWlkLmRpZmYqPik7CistICAgICAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisgICAgICMgSWYgd2UgcmVhY2ggaGVyZSwgbm9uZSBvZiB0aGUgLmV4cCBmaWxlcyBtYXRjaGVkLgorLSAgICBwcmludCAiKioqICRuYW1lIGZhaWxlZCAoJG1pZCkgKioqXG4iOworKyAgICBwcmludCAiKioqICRuYW1lIGZhaWxlZCAoJG1pZCkgKioqXG4iIGlmICgkeW9jdG9wdGVzdCA9PSAwKSA7CisgICAgIHB1c2goQGZhaWx1cmVzLCBzcHJpbnRmKCIlLTQwcyAoJG1pZCkiLCAiJGZ1bGxuYW1lIikpOworICAgICAkbnVtX2ZhaWx1cmVzeyRtaWR9Kys7CisrICAgIHJldHVybiAxOworIH0KKyAKKyBzdWIgZG9fb25lX3Rlc3QoJCQpIAorIHsKKyAgICAgbXkgKCRkaXIsICR2Z3Rlc3QpID0gQF87CisrICAgIG15ICRkaWZmU3RhdHVzID0gMDsKKyAgICAgJHZndGVzdCA9fiAvXiguKilcLnZndGVzdC87CisgICAgIG15ICRuYW1lID0gJDE7CisgICAgIG15ICRmdWxsbmFtZSA9ICIkZGlyLyRuYW1lIjsgCitAQCAtNDI1LDcgKzQ0NSwxMSBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICB9IGVsc2lmICgyNTYgPT0gJHByZXJlcV9yZXMpIHsKKyAgICAgICAgICAgICAjIE5iOiB3ZWlyZCBQZXJsLWlzbSAtLSBleGl0IGNvZGUgb2YgJzEnIGlzIHNlZW4gYnkgUGVybCBhcyAyNTYuLi4KKyAgICAgICAgICAgICAjIFByZXJlcSBmYWlsZWQsIHNraXAuCistICAgICAgICAgICAgcHJpbnRmKCIlLTE2cyAoc2tpcHBpbmcsIHByZXJlcSBmYWlsZWQ6ICRwcmVyZXEpXG4iLCAiJG5hbWU6Iik7CisrICAgICAgICAgICAgaWYgKCR5b2N0b3B0ZXN0ID09IDApIHsKKysgICAgICAgICAgICAgICAgcHJpbnRmKCIlLTE2cyAoc2tpcHBpbmcsIHByZXJlcSBmYWlsZWQ6ICRwcmVyZXEpXG4iLCAiJG5hbWU6Iik7CisrICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgcHJpbnRmKCJTS0lQOiAkZnVsbG5hbWVcbiIpOworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICMgQmFkIHByZXJlcTsgYWJvcnQuCitAQCAtNDM4LDcgKzQ2Miw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgaWYgKGRlZmluZWQgJHByb2dCKSB7CisgICAgICAgICAjIElmIHRoZXJlIGlzIGEgcHJvZ0IsIGxldCdzIHN0YXJ0IGl0IGluIGJhY2tncm91bmQ6CisgICAgICAgICBwcmludGYoIiUtMTZzIHZhbGdyaW5kICRleHRyYW9wdHMgJHZnb3B0cyAkcHJvZyAkYXJncyAocHJvZ0I6ICRwcm9nQiAkYXJnc0IpXG4iLAorLSAgICAgICAgICAgICAgICIkbmFtZToiKTsKKysgICAgICAgICAgICAgICAiJG5hbWU6IikgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICAgICAgIyBwcm9nQi5kb25lIHVzZWQgdG8gZGV0ZWN0IGNoaWxkIGhhcyBmaW5pc2hlZC4gU2VlIGJlbG93LgorICAgICAgICAgIyBOb3RlOiByZWRpcmVjdGlvbiBvZiBzdGRvdXQgYW5kIHN0ZGVyciBpcyBiZWZvcmUgJHByb2dCIHRvIGFsbG93IGFyZ3NCCisgICAgICAgICAjIHRvIGUuZy4gcmVkaXJlY3Qgc3Rkb3V0QiB0byBzdGRlcnJCCitAQCAtNDUyLDcgKzQ3Niw4IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICAgICAgICAgICAgICAuICJ0b3VjaCBwcm9nQi5kb25lKSAgJiIpOworICAgICAgICAgfQorICAgICB9IGVsc2UgeworLSAgICAgICAgcHJpbnRmKCIlLTE2cyB2YWxncmluZCAkZXh0cmFvcHRzICR2Z29wdHMgJHByb2cgJGFyZ3NcbiIsICIkbmFtZToiKTsKKysgICAgICAgIHByaW50ZigiJS0xNnMgdmFsZ3JpbmQgJGV4dHJhb3B0cyAkdmdvcHRzICRwcm9nICRhcmdzXG4iLCAiJG5hbWU6IikKKysgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgCisgICAgICMgUGFzcyB0aGUgYXBwcm9wcmlhdGUgLS10b29sIG9wdGlvbiBmb3IgdGhlIGRpcmVjdG9yeSAoY2FuIGJlIG92ZXJyaWRkZW4KK0BAIC00ODcsNyArNTEyLDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAjIEZpbmQgYWxsIHRoZSAuc3Rkb3V0LmV4cCBmaWxlcy4gIElmIG5vbmUsIHVzZSAvZGV2L251bGwuCisgICAgIG15IEBzdGRvdXRfZXhwcyA9IDwkbmFtZS5zdGRvdXQuZXhwKj47CisgICAgIEBzdGRvdXRfZXhwcyA9ICggIi9kZXYvbnVsbCIgKSBpZiAoMCA9PSBzY2FsYXIgQHN0ZG91dF9leHBzKTsKKy0gICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dCIsIFxAc3Rkb3V0X2V4cHMpOyAKKysgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dCIsIFxAc3Rkb3V0X2V4cHMpOworIAorICAgICAjIEZpbHRlciBzdGRlcnIKKyAgICAgJHN0ZGVycl9maWx0ZXJfYXJncyA9ICRuYW1lIGlmICghIGRlZmluZWQgJHN0ZGVycl9maWx0ZXJfYXJncyk7CitAQCAtNDk2LDcgKzUyMSw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZGVyci5leHAgZmlsZXMuICBBdCBsZWFzdCBvbmUgbXVzdCBleGlzdC4KKyAgICAgbXkgQHN0ZGVycl9leHBzID0gPCRuYW1lLnN0ZGVyci5leHAqPjsKKyAgICAgKDAgIT0gc2NhbGFyIEBzdGRlcnJfZXhwcykgb3IgZGllICJDb3VsZCBub3QgZmluZCBgJG5hbWUuc3RkZXJyLmV4cConXG4iOworLSAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyIiwgXEBzdGRlcnJfZXhwcyk7IAorKyAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyIiwgXEBzdGRlcnJfZXhwcyk7CisgCisgICAgIGlmIChkZWZpbmVkICRwcm9nQikgeworICAgICAgICAgIyB3YWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgZmluaXNoZWQKK0BAIC01MjAsNyArNTQ1LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZG91dEIuZXhwIGZpbGVzLiAgSWYgbm9uZSwgdXNlIC9kZXYvbnVsbC4KKyAgICAgICAgIG15IEBzdGRvdXRCX2V4cHMgPSA8JG5hbWUuc3Rkb3V0Qi5leHAqPjsKKyAgICAgICAgIEBzdGRvdXRCX2V4cHMgPSAoICIvZGV2L251bGwiICkgaWYgKDAgPT0gc2NhbGFyIEBzdGRvdXRCX2V4cHMpOworLSAgICAgICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dEIiLCBcQHN0ZG91dEJfZXhwcyk7IAorKyAgICAgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dEIiLCBcQHN0ZG91dEJfZXhwcyk7CisgICAgICAgICAKKyAgICAgICAgICMgRmlsdGVyIHN0ZGVycgorICAgICAgICAgJHN0ZGVyckJfZmlsdGVyX2FyZ3MgPSAkbmFtZSBpZiAoISBkZWZpbmVkICRzdGRlcnJCX2ZpbHRlcl9hcmdzKTsKK0BAIC01MjksNyArNTU0LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZGVyckIuZXhwIGZpbGVzLiAgQXQgbGVhc3Qgb25lIG11c3QgZXhpc3QuCisgICAgICAgICBteSBAc3RkZXJyQl9leHBzID0gPCRuYW1lLnN0ZGVyckIuZXhwKj47CisgICAgICAgICAoMCAhPSBzY2FsYXIgQHN0ZGVyckJfZXhwcykgb3IgZGllICJDb3VsZCBub3QgZmluZCBgJG5hbWUuc3RkZXJyQi5leHAqJ1xuIjsKKy0gICAgICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnJCIiwgXEBzdGRlcnJCX2V4cHMpOyAKKysgICAgICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnJCIiwgXEBzdGRlcnJCX2V4cHMpOworICAgICB9CisgCisgICAgICMgTWF5YmUgZG8gcG9zdC10ZXN0IGNoZWNrCitAQCAtNTQxLDcgKzU2Niw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAJICAgICMgRmluZCBhbGwgdGhlIC5wb3N0LmV4cCBmaWxlcy4gIElmIG5vbmUsIHVzZSAvZGV2L251bGwuCisgCSAgICBteSBAcG9zdF9leHBzID0gPCRuYW1lLnBvc3QuZXhwKj47CisgCSAgICBAcG9zdF9leHBzID0gKCAiL2Rldi9udWxsIiApIGlmICgwID09IHNjYWxhciBAcG9zdF9leHBzKTsKKy0JICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJwb3N0IiwgXEBwb3N0X2V4cHMpOworKwkgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInBvc3QiLCBcQHBvc3RfZXhwcyk7CisgCX0KKyAgICAgfQorICAKK0BAIC01NTAsNiArNTc1LDEzIEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICAgICBwcmludCgiKGNsZWFudXAgb3BlcmF0aW9uIGZhaWxlZDogJGNsZWFudXApXG4iKTsKKyAgICAgfQorIAorKyAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMSkgeworKyAgICAgICAgaWYgKCRkaWZmU3RhdHVzID09IDApIHsKKysgICAgICAgICAgICBwcmludCgiUEFTUzogJGZ1bGxuYW1lXG4iKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICRmdWxsbmFtZVxuIik7CisrICAgICAgICB9CisrICAgIH0KKyAgICAgJG51bV90ZXN0c19kb25lKys7CisgfQorIAorQEAgLTU4OSw3ICs2MjEsNyBAQCBzdWIgdGVzdF9vbmVfZGlyKCQkKQorICAgICBteSAkZm91bmRfdGVzdHMgPSAoMCAhPSAoZ3JlcCB7ICRfID1+IC9cLnZndGVzdCQvIH0gQGZzKSk7CisgCisgICAgIGlmICgkZm91bmRfdGVzdHMpIHsKKy0gICAgICAgIHByaW50ICItLSBSdW5uaW5nICB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIjsKKysgICAgICAgIHByaW50ICItLSBSdW5uaW5nICB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIiBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgICAgZm9yZWFjaCBteSAkZiAoQGZzKSB7CisgICAgICAgICBpZiAoLWQgJGYpIHsKK0BAIC01OTksNyArNjMxLDcgQEAgc3ViIHRlc3Rfb25lX2RpcigkJCkKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBpZiAoJGZvdW5kX3Rlc3RzKSB7CistICAgICAgICBwcmludCAiLS0gRmluaXNoZWQgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiI7CisrICAgICAgICBwcmludCAiLS0gRmluaXNoZWQgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiIgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICB9CisgCisgICAgIGNoZGlyKCIuLiIpOworQEAgLTYyNSwxMCArNjU3LDEyIEBAIHN1YiBzdW1tYXJpc2VfcmVzdWx0cworICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3Rkb3V0In0sICAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZG91dCJ9KSwKKyAgICAgICAgICAgICRudW1fZmFpbHVyZXN7InN0ZGVyckIifSwgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJzdGRlcnJCIn0pLAorICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3Rkb3V0QiJ9LCAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZG91dEIifSksCistICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJwb3N0In0sICAgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sicG9zdCJ9KSk7CisrICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJwb3N0In0sICAgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sicG9zdCJ9KSkKKysgICAgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgCisgICAgIGZvcmVhY2ggbXkgJGZhaWx1cmUgKEBmYWlsdXJlcykgeworLSAgICAgICAgcHJpbnQgIiRmYWlsdXJlXG4iOworKyAgICAgICAgcHJpbnQgIiRmYWlsdXJlXG4iCisrICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgICAgcHJpbnQgIlxuIjsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwZjJmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitFbmFibGUgYnVpbGRpbmcgdmFsZ3JpbmQgb24gaG9zdCB3aXRoIDQueCBrZXJuZWwuCisKK0ZvciBPcGVuRW1iZWRkZWQgYnVpbGRzIHdlIHNob3VsZCBiZSBjaGVja2luZyBzb21ldGhpbmcgbGlrZQorT0xERVNUX0tFUk5FTCBpbnN0ZWFkIG9mIGB1bmFtZSAtcmAsIGJ1dCB0aGlzIGlzIGdvb2QgZW5vdWdoIGZvciBub3cuCisKK0J1aWxkaW5nIG9uIDQueCogY3VycmVudGx5IGZhaWxzIHdpdGg6CisgIGNvbmZpZ3VyZTo1NTU2OiBjaGVja2luZyBmb3IgdGhlIGtlcm5lbCB2ZXJzaW9uCisgIGNvbmZpZ3VyZTo1NTc5OiByZXN1bHQ6IHVuc3VwcG9ydGVkICg0LjAuMC1yYzMtMDAxMTEtZ2FmZmI4MTcpCisgIGNvbmZpZ3VyZTo1NTgxOiBlcnJvcjogVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYy5vcmlnCTIwMTUtMDMtMTMgMTk6MTc6MDEuMjQ3MzEwODY4ICswMTAwCisrKysgdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjCTIwMTUtMDMtMTMgMTk6MTk6MjcuMzg4MzE2MTA4ICswMTAwCitAQCAtMjc2LDkgKzI3Niw5IEBACisgICAgICAgICBrZXJuZWw9YHVuYW1lIC1yYAorIAorICAgICAgICAgY2FzZSAiJHtrZXJuZWx9IiBpbgorLSAgICAgICAgICAgICAyLjYuKnwzLiopIAorLSAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFsyLjYueC8zLnggZmFtaWx5ICgke2tlcm5lbH0pXSkKKy0gICAgICAgIAkgICAgQUNfREVGSU5FKFtLRVJORUxfMl82XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBMaW51eCAyLjYueCBvciBMaW51eCAzLnhdKQorKyAgICAgICAgICAgICAyLjYuKnwzLip8NC4qKSAKKysgICAgICAgIAkgICAgQUNfTVNHX1JFU1VMVChbMi42LngvMy54LzQueCBmYW1pbHkgKCR7a2VybmVsfSldKQorKyAgICAgICAgCSAgICBBQ19ERUZJTkUoW0tFUk5FTF8yXzZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIExpbnV4IDIuNi54IG9yIExpbnV4IDMueCBvciBMaW51eCA0LnhdKQorICAgICAgICAgCSAgICA7OworIAorICAgICAgICAgICAgICAyLjQuKikgCitAQCAtMjg4LDcgKzI4OCw3IEBACisgCisgICAgICAgICAgICAgICopIAorICAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFt1bnN1cHBvcnRlZCAoJHtrZXJuZWx9KV0pCistICAgICAgICAJICAgIEFDX01TR19FUlJPUihbVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNl0pCisrICAgICAgICAJICAgIEFDX01TR19FUlJPUihbVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNiwgMy54LCA0LnhdKQorICAgICAgICAgCSAgICA7OworICAgICAgICAgZXNhYworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9maXhlZC1wZXJsLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1NGQwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9maXhlZC1wZXJsLXBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAordGhpcyBpcyBhIHRlbXBvcmFyeSBwYXRjaCB0byB3b3JrYXJvdW5kIGNyb3NzIGNvbXBpbGF0aW9uLgorb3RoZXJ3aXNlIEBQRVJMQCB3aWxsIGJlIHJlcGxhY2VkIHRvIHBlcmwtbmF0aXZlIGJpbmFyeSwKK3RoaXMgY3JlYXRlcyB1bnVzYWJsZSBzY3JpcHRzIGFuZCBmYWlscyBGSUxFUkRFUEVORFMgbWVjaGFuaXNtCisoZXNwLiBycG0pCisKK2EgYmV0dGVyIGZpeCB3b3VsZCBuZWVkOgorIDEuIGNvbmZpZ3VyZS5hYyBzaG91bGQgZGlmZmVyZW50aWF0ZSBQRVJMIGFuZCBIT1NUUEVSTAorIDIuIG9wdGlvbmFsbHkgcmVtb3ZlICR7U1RBR0lOR19ESVJ9IGluICMhIGxpbmUgYmVmb3JlIGRvX2luc3RhbGwKKworOC8zMS8yMDEwIC0gY3JlYXRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC0tZ2l0IGEvY2FjaGVncmluZC9jZ19hbm5vdGF0ZS5pbiBiL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4KK2luZGV4IDlkYzk1NjUuLmNjNGVmMDUgMTAwNjQ0CistLS0gYS9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluCisrKysgYi9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gQ2FjaGVncmluZCdzIGFubm90YXRvci4gICAgICAgICAgICAgICAgICAgICAgIGNnX2Fubm90YXRlLmluIC0tLSMjCitkaWZmIC0tZ2l0IGEvY2FjaGVncmluZC9jZ19kaWZmLmluIGIvY2FjaGVncmluZC9jZ19kaWZmLmluCitpbmRleCA5NTEwNjZlLi44NGMyZGRlIDEwMDY0NAorLS0tIGEvY2FjaGVncmluZC9jZ19kaWZmLmluCisrKysgYi9jYWNoZWdyaW5kL2NnX2RpZmYuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBDYWNoZWdyaW5kJ3MgZGlmZmVyZW5jZXIuICAgICAgICAgICAgICAgICAgICAgICAgIGNnX2RpZmYuaW4gLS0tIyMKK2RpZmYgLS1naXQgYS9tYXNzaWYvbXNfcHJpbnQuaW4gYi9tYXNzaWYvbXNfcHJpbnQuaW4KK2luZGV4IGU2ZmZkYmYuLmZiNDU5MDYgMTAwNzU1CistLS0gYS9tYXNzaWYvbXNfcHJpbnQuaW4KKysrKyBiL21hc3NpZi9tc19wcmludC5pbgorQEAgLTEsNCArMSw0IEBACistIyEgQFBFUkxACisrIyEgL3Vzci9iaW4vcGVybAorIAorICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworICMjLS0tIE1hc3NpZidzIHJlc3VsdHMgcHJpbnRlciAgICAgICAgICAgICAgICAgICAgICAgICBtc19wcmludC5pbiAtLS0jIworZGlmZiAtLWdpdCBhL3BlcmYvdmdfcGVyZi5pbiBiL3BlcmYvdmdfcGVyZi5pbgoraW5kZXggMjE4OGEzMS4uODNhZDAyNCAxMDA2NDQKKy0tLSBhL3BlcmYvdmdfcGVyZi5pbgorKysrIGIvcGVyZi92Z19wZXJmLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gVmFsZ3JpbmQgcGVyZm9ybWFuY2UgdGVzdGluZyBzY3JpcHQgICAgICAgICAgICAgICAgICB2Z19wZXJmIC0tLSMjCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZm9yY2Utbm9zdGFicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9mb3JjZS1ub3N0YWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OWRmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZm9yY2Utbm9zdGFicy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitTdXBwcmVzcyBidWlsZGluZyBwdGVzdCBhcHBzIHdpdGggdGhlIC1nc3RhYnMgb3B0aW9uCisKK0ZvcmNlIHRoZSBjb25maWd1cmUgdGVzdHMgZm9yIC1nc3RhYnMgY29tcGlsZXIgc3VwcG9ydCB0byBmYWlsIHNvIHRoYXQKK3RoZSByZWdyZXNzaW9uIHRlc3RzIGRvbid0IHRyeSB0byBidWlsZCB3aXRoIHRoZSAtZ3N0YWJzIG9wdGlvbi4KK090aGVyd2lzZSwgdGhlIHZhbGdyaW5kIGJ1aWxkIHdoZW4gcHRlc3QgaXMgZW5hYmxlZCBmYWlscyB3aXRoIHRoZQorZXJyb3I6CisgICAgU3RhYnMgZGVidWdpbmZvIG5vdCBzdXBwb3J0ZWQ6CisgICAgLi4vcGFja2FnZS91c3IvbGliL3ZhbGdyaW5kL3B0ZXN0L21lbWNoZWNrL3Rlc3RzL2RlZXBfdGVtcGxhdGVzCisgICAgRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogc3BsaXRfYW5kX3N0cmlwX2ZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZ3N0YWJzIHN1cHBvcnQgaXMgYXBwcm9wcmlhdGUgdXBzdHJlYW0sCisgICAgICAgIGJ1dCBub3QgZm9yIHRoaXMgZGlzdHJvXQorCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNzU1ZGZiOS4uY2M4YjVlMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc0MywyMiArMTc0Myw3IEBAIEFNX0NPTkRJVElPTkFMKERXQVJGNCwgdGVzdCB4JGFjX2hhdmVfZHdhcmY0ID0geHllcykKKyBDRkxBR1M9JHNhZmVfQ0ZMQUdTCisgCisgCistIyBkb2VzIHRoaXMgY29tcGlsZXIgc3VwcG9ydCAtZ3N0YWJzID8KKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW2lmIGdjYyBhY2NlcHRzIC1nc3RhYnNdKQorLQorLXNhZmVfQ0ZMQUdTPSRDRkxBR1MKKy1DRkxBR1M9Ii1nc3RhYnMiCistQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworLSAgcmV0dXJuIDA7CistXV0pXSwgWworLWFjX2hhdmVfZ3N0YWJzPXllcworLUFDX01TR19SRVNVTFQoW3llc10pCistXSwgWworIGFjX2hhdmVfZ3N0YWJzPW5vCistQUNfTVNHX1JFU1VMVChbbm9dKQorLV0pCistQ0ZMQUdTPSRzYWZlX0NGTEFHUworIEFNX0NPTkRJVElPTkFMKFtIQVZFX0dTVEFCU10sIFt0ZXN0IHgkYWNfaGF2ZV9nc3RhYnMgPSB4eWVzXSkKKyAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM0OTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2dsaWJjLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0JhY2twb3J0IG9mIGdsaWJjIDIuMTkgYW5kIDIuMjAgYW5kIDIuMjEgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyB2YWxncmluZC0zLjEwLjEvY29uZmlndXJlLmFjCitAQCAtMTAxOCw2ICsxMDE4LDM0IEBAIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisrICAgICAyLjE5KQorKwlBQ19NU0dfUkVTVUxUKDIuMTkgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMTldLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTkueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKysgICAgIDIuMjApCisrCUFDX01TR19SRVNVTFQoMi4yMCBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8yMF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yMC54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworKyAgICAgMi4yMSkKKysJQUNfTVNHX1JFU1VMVCgyLjIxIGZhbWlseSkKKysJQUNfREVGSU5FKFtHTElCQ18yXzIxXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIxLnhdKQorKwlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCTs7CisrICAgICAyLjIyKQorKwlBQ19NU0dfUkVTVUxUKDIuMjIgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMjJdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMjIueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKyAgICAgIGRhcndpbikKKyAJQUNfTVNHX1JFU1VMVChEYXJ3aW4pCisgCUFDX0RFRklORShbREFSV0lOX0xJQkNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIERhcndpbl0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTY3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK3IxNDU2NiB8IGZsb3JpYW4gfCAyMDE0LTA5LTI0IDE3OjAyOjU0IC0wNTAwIChXZWQsIDI0IFNlcCAyMDE0KSB8IDQgbGluZXMKKworVGhlIHRlc3RidWNrZXRzIG5vbmUvdGVzdHMvcHBjezMyLDY0fSBkaWQgbm90IGJ1aWxkIGluIGNhc2UgdGhlCit0b29sY2hhaW4gZGlkIG5vdCBzdXBwb3J0IC1tYWx0aXZlYyAtbWFiaT1hbHRpdmVjLgorVGhpcyBzaG91bGQgd29yayBub3cuIEZpeGVzIEJaICMzMzg3MzEKKworSW5kZXg6IG5vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY1KQorKysrIGIvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjYpCitAQCAtNzIsOCArNzIsMTIgQEAKKyBhbGxleGVjX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgQEZMQUdfV19OT19OT05OVUxMQAorIAorIGlmIEhBU19BTFRJVkVDCisrQlVJTERfRkxBR19BTFRJVkVDID0gLW1hbHRpdmVjCisrQlVJTERfRkxBR19BQklfQUxUSVZFQyA9IC1tYWJpPWFsdGl2ZWMKKyBBTFRJVkVDX0ZMQUcgPSAtREhBU19BTFRJVkVDCisgZWxzZQorK0JVSUxEX0ZMQUdfQUxUSVZFQyA9CisrQlVJTERfRkxBR19BQklfQUxUSVZFQyA9CisgQUxUSVZFQ19GTEFHID0KKyBlbmRpZgorIAorQEAgLTEwMSwxMSArMTA1LDEyIEBACisgSVNBXzJfMDdfRkxBRyA9CisgZW5kaWYKKyAKKy1qbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAtbWFsdGl2ZWMgXAorLQkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpCisram1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgXAorKwkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19BTFRJVkVDKQorIAorLXRlc3RWTVhfQ0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtTyAtZyAtV2FsbCAtbWFsdGl2ZWMgLW1hYmk9YWx0aXZlYyAtREFMVElWRUMgXAorLQkJCS1ER0NDX0NPTVBJTEVSIEBGTEFHX00zMkAKKyt0ZXN0Vk1YX0NGTEFHUyAgPSAkKEFNX0NGTEFHUykgLU8gLWcgLVdhbGwgLURBTFRJVkVDIFwKKysJCQktREdDQ19DT01QSUxFUiBARkxBR19NMzJAICAkKEJVSUxEX0ZMQUdfQUxUSVZFQykgXAorKwkJCSQoQlVJTERfRkxBR19BQklfQUxUSVZFQykKKyAKKyB0ZXN0X2lzYV8yXzA2X3BhcnQxX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzICQoVlNYX0ZMQUcpIFwKKyAJCQlARkxBR19NMzJAICQoQUxUSVZFQ19GTEFHKSAkKEJVSUxEX0ZMQUdfVlNYKQorSW5kZXg6IG5vbmUvdGVzdHMvcHBjNjQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL25vbmUvdGVzdHMvcHBjNjQvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY1KQorKysrIGIvbm9uZS90ZXN0cy9wcGM2NC9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjYpCitAQCAtNTAsOCArNTAsMTAgQEAKKyBhbGxleGVjX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgQEZMQUdfV19OT19OT05OVUxMQAorIAorIGlmIEhBU19BTFRJVkVDCisrQlVJTERfRkxBR19BTFRJVkVDID0gLW1hbHRpdmVjCisgQUxUSVZFQ19GTEFHID0gLURIQVNfQUxUSVZFQworIGVsc2UKKytCVUlMRF9GTEFHX0FMVElWRUMgPQorIEFMVElWRUNfRkxBRyA9CisgZW5kaWYKKyAKK0BAIC04OCw4ICs5MCw4IEBACisgdGVzdF9pc2FfMl8wNl9wYXJ0M19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAkKFZTWF9GTEFHKSBcCisgCQkJQEZMQUdfTTY0QCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX1ZTWCkKKyAKKy1qbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAtbWFsdGl2ZWMgXAorLQkJCUBGTEFHX002NEAgJChBTFRJVkVDX0ZMQUcpCisram1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgXAorKwkJCUBGTEFHX002NEAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19BTFRJVkVDKQorIAorIHRlc3RfZGZwMV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAkKERGUF9GTEFHKSBcCisgCQkJQEZMQUdfTTY0QCAkKEJVSUxEX0ZMQUdTX0RGUCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTlhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK1JlbW92ZSBhcm0gdGVzdHMgdGhhdCBkb24ndCBjb21waWxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDb3JyZWN0cyB0aGUgb3JpZ2luYWwgY29tbWl0IGZvciB0aGUgcGF0Y2ggdGhhdCByZW1vdmVkIEFSTSBwdGVzdCBDRkxBR1MKK3NldHRpbmdzLiBTaW5jZSB0aGUgZmxhZ3MgY291bGQgYmUgc2V0IGJ5IGEgdXNlciwgdGhlIGZsYWdzIHNob3VsZAorYmUga2VwdCBpbiBwbGFjZSBkdXJpbmcgY29tcGlsYXRpb24uICBCeSBrZWVwaW5nIHRoZSBvcmlnaW5hbCB1cC1zdHJlYW0KK0NGTEFHUyBmb3IgdGhlIHRlc3RzLCB0aGVuIGFkZGl0aW9uYWwgdGVzdHMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGUKK2ZvciBhbGwgdGVzdGVkIEFSTSB0dW5pbmdzLgorCitIb3dldmVyLCB0aGVyZSB3ZXJlIHN0aWxsIHR3byB0ZXN0cyBsaXN0ZWQgYmVsb3cgdGhhdCBkaWQgbm90IGNvbXBpbGUKK2ZvciBhbnkgYmVhZ2xlYm9uZSB0dW5pbmcgdGhhdCBpcyB2YWxpZCBmb3IgdmFsZ3JpbmQuIFdpdGggdGhlIHVwZGF0ZWQKK3BhdGNoLCB0aGUgc2V0IG9mIGV4Y2x1ZGVkIEFSTSBwdGVzdHMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgYnVpbGQKK2ZhaWx1cmVzIGFyZToKKyAgaW50ZGl2IC0gZmFpbHMgZm9yIGFsbCBiZWFnbGVib25lIHR1bmluZ3Mgd2l0aCAyIGVycm9yczoKKyAge3N0YW5kYXJkIGlucHV0fTooNDAgb3IgNDEpOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90CisgICAgICAgc3VwcG9ydCBUaHVtYiBtb2RlIGB1ZGl2IHIzLHI5LHIxMCcKKyAge3N0YW5kYXJkIGlucHV0fTooNzIgb3IgNzMpOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90CisgICAgICAgc3VwcG9ydCBUaHVtYiBtb2RlIGBzZGl2IHIzLHI5LHIxMCcKKworICB2Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUCAtIGZhaWxzIGZvciBhbGwgYmVhZ2xlYm9uZSB0dW5pbmdzIGluIG9uZSBvZgorICB0d28gd2F5czoKKyAgICB3aXRoIG5lb24gdHVuaW5nICgtbWZwdT1uZW9uKSBmYWlscyB3aXRoIEludGVybmFsIENvbXBpbGVyIEVycm9yCisgICAgd2l0aG91dCBuZW9uIHR1bmluZyBmYWlscyB3aXRoIDMgZXJyb3JzOgorICAgIHtzdGFuZGFyZCBpbnB1dH06MzM6IEVycm9yOiBzZWxlY3RlZCBGUFUgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgaW5zdHJ1Y3Rpb24gLS0gYHZjdnQuZjMyLnMzMiBzMTUsczE1LCMxJworICAgIHtzdGFuZGFyZCBpbnB1dH06NTg6IEVycm9yOiBzZWxlY3RlZCBGUFUgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgaW5zdHJ1Y3Rpb24gLS0gYHZjdnQuZjMyLnMzMiBzMTUsczE1LCMzMicKKyAgICB7c3RhbmRhcmQgaW5wdXR9OjEzNjogRXJyb3I6IHNlbGVjdGVkIEZQVSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBpbnN0cnVjdGlvbiAtLSBgdmN2dC5mMzIudTMyIHMxNSxzMTUsIzEnCisKK0FmdGVyIGFwcGx5aW5nIHRoaXMgY29tbWl0LCB0aGUgdmFsZ3JpbmQgQVJNIHB0ZXN0cyBjb21waWxlIHdpdGhvdXQKK2Vycm9ycyBmb3IgdHVuaW5nczoKKyAgYXJtdjdbdF1baGZdW2JdWy1uZW9uXSBjb3J0ZXhhOFt0XVtoZl1bLW5lb25dCit3aGVyZSB0aGUgdHVuaW5nIFtvcHRpb25dIHdhcyBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIGJvdGggd2l0aAorYW5kIHdpdGhvdXQgdGhlICdvcHRpb24nLCBhbmQgaW4gY29tYmluYXRpb24gd2l0aCBhbGwgb3RoZXIgb3B0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiB2YWxncmluZC0zLjEwLjEvbm9uZS90ZXN0cy9hcm0vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjEub3JpZy9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQkyMDE1LTA1LTE5IDE1OjExOjU5LjIyNDg0MjkyNyAtMDUwMAorKysrIHZhbGdyaW5kLTMuMTAuMS9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQkyMDE1LTA1LTE5IDE1OjE0OjIwLjgwODg0NzAyOCAtMDUwMAorQEAgLTE3LDkgKzE3LDEzIEBACisgCXZmcC5zdGRvdXQuZXhwIHZmcC5zdGRlcnIuZXhwIHZmcC52Z3Rlc3QgXAorIAl2ZnB2NF9mbWEuc3Rkb3V0LmV4cCB2ZnB2NF9mbWEuc3RkZXJyLmV4cCB2ZnB2NF9mbWEudmd0ZXN0CisgCisrIyBSZW1vdmUgdGhlIGZvbGxvd2luZyB0ZXN0cyB3aGljaCBjYXVzZSBjb21waWxlciBlcnJvcnMgZm9yIGFsbCB0dW5pbmdzCisrIyAgYXZhaWxhYmxlIGZvciBiZWFnbGUgYm9uZSAoc2VlIHJlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaCk6CisrIwlpbnRkaXYKKysjCXZjdnRfZml4ZWRfZmxvYXRfVkZQCisrCisgY2hlY2tfUFJPR1JBTVMgPSBcCisgCWFsbGV4ZWMgXAorLQlpbnRkaXYgXAorIAlsZHJ0IFwKKyAJbGRydF9hcm0gXAorIAluZW9uMTI4IFwKK0BAIC0yNyw3ICszMSw2IEBACisgCXY2aW50QVJNIFwKKyAJdjZpbnRUaHVtYiBcCisgCXY2bWVkaWEgXAorLQl2Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUCBcCisgCXZmcCBcCisgCXZmcHY0X2ZtYQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2NDBmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorUmVtb3ZlIHRlc3QgYXBwcyBub3QgYnVpbGRpbmcgd2l0aCBwcGMgYW5kIFBURVNUCisKK0ZvciBtcGM4MzE2LXJkYiBpbiBub25lL3Rlc3RzL3BwYzMyLCB0aGUgb2UgY29tcGlsZXIgb3B0aW9ucyBhcmUKK2luY29uc2lzdGVudCB3aXRoIHRoZSBpbXBvc2VkIHRlc3QgY29tcGlsZXIgb3B0aW9ucyBnZW5lcmF0aW5nIGVycm9ycworYXMgZm9sbG93czoKK3Rlc3RfaXNhXzJfMDdfcGFydDEKK3Rlc3RfaXNhXzJfMDdfcGFydDIKK3Rlc3RfdG0KK3Rlc3RfdG91Y2hfdG0KKyAgICA6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICctbWh0bScKKworam0taW5zbnMKK3Rlc3RWTVgKKyAgICA6IEFsdGlWZWMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHRhcmdldAorCitGb3IgdGhlIGZvbGxvd2luZyB0ZXN0cywgdGhlaXIgaW5saW5lIGFzc2VtYmxlciBpcyBpbmNvbnNpc3RlbnQgd2l0aAordGhlIHBwY2UzMDBjMyB2YXJpYW50Ogorcm91bmQuYzozOTMKK3Bvd2VyNStfcm91bmQuYzo5OAorICAgIDogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisKK0ZvciB0aGUgZm9sbG93aW5nIHRlc3RzLCB3aXRoIGJvdGggbXBjODMxNi1yZGIgYW5kIHdpdGggcWVtdXBwYyBic3AsCit0aGUgaW5saW5lIGFzc2VtYmVyIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBvZSBjb21waWxlciBtYWNoaW5lCit0dW5pbmc6CitJbiBtZW1jaGVjay90ZXN0cy9wcGMzMgorIHBvd2VyX0lTQTJfMDUuYzo1NgorSW4gbm9uZS90ZXN0cy9wcGMzMgorIHRlc3RfZGZwMS5jOjg1CisgdGVzdF9kZnAyLmM6MTYwCisgdGVzdF9kZnAzLmM6MTU3CisgdGVzdF9kZnA0LmM6NzMKKyB0ZXN0X2RmcDUuYzo3MworICAgIDogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMC9tZW1jaGVjay90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCisrKysgdmFsZ3JpbmQtMy4xMC4wL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCitAQCAtNyw4ICs3LDcgQEAgRVhUUkFfRElTVCA9ICQobm9pbnN0X1NDUklQVFMpIFwKKyAJcG93ZXJfSVNBMl8wNS5zdGRlcnIuZXhwIHBvd2VyX0lTQTJfMDUuc3Rkb3V0LmV4cCBwb3dlcl9JU0EyXzA1LnZndGVzdCBcCisgCXBvd2VyX0lTQTJfMDUuc3Rkb3V0LmV4cF9XaXRob3V0X0ZQUE8KKyAKKy1jaGVja19QUk9HUkFNUyA9IFwKKy0JcG93ZXJfSVNBMl8wNQorK2NoZWNrX1BST0dSQU1TID0gCisgCisgcG93ZXJfSVNBMl8wNV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChXRVJST1IpIC1XaW5saW5lIC1XYWxsIC1Xc2hhZG93IC1nIFwKKyAJCS1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIEBGTEFHX00zMkAKK0luZGV4OiB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKysrKyB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorQEAgLTUyLDE2ICs1Miw4IEBAIGNoZWNrX1BST0dSQU1TID0gXAorIAlhbGxleGVjIFwKKyAJYnVnMTI5MzkwLXBwYzMyIFwKKyAJYnVnMTM5MDUwLXBwYzMyIFwKKy0JbGRzdHJldiBsc3cgam0taW5zbnMgbWZ0b2NyZiBtY3JmcyByb3VuZCB0ZXN0X2Z4IHRlc3RfZ3ggXAorLQl0ZXN0Vk1YIHR3aSB0dyB4bGNfZGJsX3UzMiBwb3dlcjUrX3JvdW5kIHBvd2VyNl9iY21wIFwKKy0JdGVzdF9pc2FfMl8wNl9wYXJ0MSBcCistCXRlc3RfaXNhXzJfMDZfcGFydDIgXAorLQl0ZXN0X2lzYV8yXzA2X3BhcnQzIFwKKy0JdGVzdF9kZnAxIHRlc3RfZGZwMiB0ZXN0X2RmcDMgdGVzdF9kZnA0IHRlc3RfZGZwNSBcCistCXRlc3RfaXNhXzJfMDdfcGFydDEgXAorLQl0ZXN0X2lzYV8yXzA3X3BhcnQyIFwKKy0JdGVzdF90bSBcCistCXRlc3RfdG91Y2hfdG0gXAorKwlsZHN0cmV2IGxzdyBtZnRvY3JmIG1jcmZzIHRlc3RfZnggdGVzdF9neCBcCisrCXR3aSB0dyB4bGNfZGJsX3UzMiBwb3dlcjZfYmNtcCBcCisgCWxkc3RfbXVsdGlwbGUgXAorIAlkYXRhLWNhY2hlLWluc3RydWN0aW9ucworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlhNzJlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKKyMgcnVuLXB0ZXN0IC0gJ3B0ZXN0JyB0ZXN0IGluZnJhc3RydWN0dXJlIHNoZWxsIHNjcmlwdCB0aGF0CisjICAgd3JhcHMgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gc2NyaXB0IHZnX3JlZ3Rlc3QuIAorIyAgIE11c3QgYmUgcnVuIGluIHRoZSAvdXNyL2xpYi92YWxncmluZC9wdGVzdCBkaXJlY3RvcnkuIAorIworIyBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworVkFMR1JJTkRMSUI9QGxpYmRpckAvdmFsZ3JpbmQKK3Rlc3RzL3ZnX3JlZ3Rlc3QgLS1hbGwgXAorICAgIC0tdmFsZ3JpbmQ9L3Vzci9iaW4vdmFsZ3JpbmQgLS12YWxncmluZC1saWI9JFZBTEdSSU5ETElCIFwKKwktLXlvY3RvLXB0ZXN0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvc2VwYnVpbGRmaXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiMGVmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9zZXBidWlsZGZpeC5wYXRjaApAQCAtMCwwICsxLDIzNSBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkcy4gVGhlIHBhdGhzIHRvIHRoZXNlIGZpbGVzIG5lZWQgdG8gYmUgZnVsbHkgc3BlY2lmaWVkIGluCit0aGUgb3V0IG9mIHRyZWUgYnVpbGQgY2FzZS4gZ2xpYmMtMi5YLnN1cHAgaXMgYSBnZW5lcmF0ZWQgZmlsZSBzbyB0aGUgZnVsbCBwYXRoCitpcyBkZWxpYmVyYXRlbHkgbm90IHNwZWNpZmllZCBpbiB0aGF0IGNhc2UuCisKK1JQIDIwMTMvMDMvMjMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB2YWxncmluZC0zLjkuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjkuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYworQEAgLTMyNSwyNiArMzI1LDI2IEBAIGNhc2UgIiR7aG9zdF9vc30iIGluCisgCSAgICAgOS4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gOS54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuNSBMZW9wYXJkXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF81LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luOS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW45LWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2Rhcndpbjkuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW45LWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMC4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTAueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF82LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCQkgIDs7CisgCSAgICAgMTEuKikKKyAJCSAgQUNfTVNHX1JFU1VMVChbRGFyd2luIDExLnggKCR7a2VybmVsfSkgLyBNYWMgT1MgWCAxMC43IExpb25dKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzcsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMi4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTIueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjggTW91bnRhaW4gTGlvbl0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfOCwgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEyLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEyLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworICAgICAgICAgICAgICAqKSAKKyAJCSAgQUNfTVNHX1JFU1VMVChbdW5zdXBwb3J0ZWQgKCR7a2VybmVsfSldKQorQEAgLTc5OSwxMjQgKzc5OSwxMjQgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAgICAgIDIuMikKKyAJQUNfTVNHX1JFU1VMVCgyLjIgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yLnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjItTGludXhUaHJlYWRzLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjItTGludXhUaHJlYWRzLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAKKyAgICAgIDIuMykKKyAJQUNfTVNHX1JFU1VMVCgyLjMgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfM10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4zLnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAyLjQpCisgCUFDX01TR19SRVNVTFQoMi40IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzRdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNC54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgMi41KQorIAlBQ19NU0dfUkVTVUxUKDIuNSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl81XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjUueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi41LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi41LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuNikKKyAJQUNfTVNHX1JFU1VMVCgyLjYgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfNl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi42LnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjcpCisgCUFDX01TR19SRVNVTFQoMi43IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzddLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNy54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi44KQorIAlBQ19NU0dfUkVTVUxUKDIuOCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl84XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjgueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuOSkKKyAJQUNfTVNHX1JFU1VMVCgyLjkgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfOV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi45LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjEwKQorIAlBQ19NU0dfUkVTVUxUKDIuMTAgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTBdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTAueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTEpCisgCUFDX01TR19SRVNVTFQoMi4xMSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMS54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorICAgICAgICAgOzsKKyAgICAgIDIuMTIpCisgCUFDX01TR19SRVNVTFQoMi4xMiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMi54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xMykKKyAJQUNfTVNHX1JFU1VMVCgyLjEzIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzEzXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjEzLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE0KQorIAlBQ19NU0dfUkVTVUxUKDIuMTQgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTRdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTQueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTUpCisgCUFDX01TR19SRVNVTFQoMi4xNSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xNV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNS54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xNikKKyAJQUNfTVNHX1JFU1VMVCgyLjE2IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE2XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE2LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE3KQorIAlBQ19NU0dfUkVTVUxUKDIuMTcgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTddLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTcueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTgpCisgCUFDX01TR19SRVNVTFQoMi4xOCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xOF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xOC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgZGFyd2luKQorIAlBQ19NU0dfUkVTVUxUKERhcndpbikKK0BAIC05MjYsNyArOTI2LDcgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAgICAgIGJpb25pYykKKyAJQUNfTVNHX1JFU1VMVChCaW9uaWMpCisgCUFDX0RFRklORShbQklPTklDX0xJQkNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIEJpb25pY10pCistCURFRkFVTFRfU1VQUD0iYmlvbmljLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvYmlvbmljLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgKikKK0BAIC05NDMsMTEgKzk0MywxMSBAQCBBQ19TVUJTVChHTElCQ19WRVJTSU9OKQorICMgYXR0ZW1wdCB0byBkZXRlY3Qgd2hldGhlciBzdWNoIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIG9uIHRoZQorICMgYnVpbGQgbWFjaGluZSAob3IgZXZlbiBpZiBhbnkgWCBmYWNpbGl0aWVzIGFyZSBwcmVzZW50KTsganVzdAorICMgYWRkIHRoZSBzdXBwcmVzc2lvbnMgYW50aWRpc2lycmVnYXJkbGVzcy4KKy1ERUZBVUxUX1NVUFA9InhmcmVlLTQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistREVGQVVMVF9TVVBQPSJ4ZnJlZS0zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorK0RFRkFVTFRfU1VQUD0iJHNyY2Rpci94ZnJlZS00LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorK0RFRkFVTFRfU1VQUD0iJHNyY2Rpci94ZnJlZS0zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAorICMgQWRkIGdsaWJjIGFuZCBYMTEgc3VwcHJlc3Npb25zIGZvciBleHAtc2djaGVjaworLURFRkFVTFRfU1VQUD0iZXhwLXNnY2hlY2suc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrREVGQVVMVF9TVVBQPSIkc3JjZGlyL2V4cC1zZ2NoZWNrLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJlOWNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDI1IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgY29uZmlnXQorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjAub3JpZy9ub25lL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yODAsNyArMjgwLDYgQEAgdGhyZWFkZWRfZm9ya19MREFERAk9IC1scHRocmVhZAorIHRocmVhZGVkZXJybm9fTERBREQJPSAtbHB0aHJlYWQKKyB0bHNfU09VUkNFUwkJPSB0bHMuYyB0bHMyLmMKKyB0bHNfREVQRU5ERU5DSUVTCT0gdGxzLnNvIHRsczIuc28KKy10bHNfTERGTEFHUwkJPSAtV2wsLXJwYXRoLCQoYWJzX3RvcF9idWlsZGRpcikvbm9uZS90ZXN0cworIHRsc19MREFERAkJPSB0bHMuc28gdGxzMi5zbyAtbHB0aHJlYWQKKyB0bHNfc29fU09VUkNFUwkJPSB0bHNfc28uYworIHRsc19zb19ERVBFTkRFTkNJRVMJPSB0bHMyLnNvCitAQCAtMjg4LDcgKzI4Nyw3IEBAIGlmIFZHQ09ORl9PU19JU19EQVJXSU4KKyAgdGxzX3NvX0xERkxBR1MJCT0gLWR5bmFtaWMgLWR5bmFtaWNsaWIgLWFsbF9sb2FkIC1mcGljCisgIHRsc19zb19MREFERAkJPSBgcHdkYC90bHMyLnNvCisgZWxzZQorLSB0bHNfc29fTERGTEFHUwkJPSAtV2wsLXJwYXRoLCQoYWJzX3RvcF9idWlsZGRpcikvbm9uZS90ZXN0cyAtc2hhcmVkIC1mUElDCisrIHRsc19zb19MREZMQUdTCQk9IC1zaGFyZWQgLWZQSUMKKyAgdGxzX3NvX0xEQURECQk9IHRsczIuc28KKyBlbmRpZgorIHRsc19zb19DRkxBR1MJCT0gJChBTV9DRkxBR1MpIC1mUElDCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmJhOTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTAuMS5iYgpAQCAtMCwwICsxLDEwNSBAQAorU1VNTUFSWSA9ICJWYWxncmluZCBtZW1vcnkgZGVidWdnZXIgYW5kIGluc3RydW1lbnRhdGlvbiBmcmFtZXdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vdmFsZ3JpbmQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3ZhbGdyaW5kLm9yZy9zdXBwb3J0L2J1Z19yZXBvcnRzLmh0bWwiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ2MDgyMTY3YTMxNGQ3ODVkMDEyYTI0NDc0OGQ4MDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9wdWJfdG9vbF9iYXNpY3MuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI5O21kNT1lNzA3MTkyOWE1MGQ0YjBmYzI3YTMwMTRiMzE1YjBmNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3ZhbGdyaW5kLmg7YmVnaW5saW5lPTE7ZW5kbGluZT01NjttZDU9OTJkZjhhMWJkZTU2ZmUyYWY3MDkzMWZmNTVmNjYyMmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5ET0NTO21kNT04ZmRlYjVhYmRiMjM1YTA4ZTc2ODM1ZjhmMzI2MDIxNSIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSIKK0RFUEVORFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJHtYMTFERVBFTkRTfScsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ2Jvb3N0JywgJycsIGQpfSBcCisgICAgICAgICIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnZhbGdyaW5kLm9yZy9kb3dubG9hZHMvdmFsZ3JpbmQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhlZC1wZXJsLXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGJ1aWxkZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsaWJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZvcmNlLW5vc3RhYnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly92YWxncmluZC1yZW1vdmUtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Bhc3MtbWFsdGl2ZWMtb25seS1pZi1pdC1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjBkZGFlOTYyYmM3OWU3Yzk1Y2ZjNDY2NzI0NTcwN2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmEyNTNkYzI2ZGRiNjYxYjYyNjlkZjU4MTQ0ZWZmNjA3ZWEzZjc2YTliY2ZlNTc0YjBjNzcyNmUxZGZjYjk5NyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NHxtaXBzfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4JworQ09NUEFUSUJMRV9IT1NUX2FybXY3YSA9ICdhcm0uKi1saW51eCcKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10bHMgLS13aXRob3V0LW1waWNjIgorRVhUUkFfT0VDT05GX2FybXY3YSA9ICItLWVuYWJsZS10bHMgLWhvc3Q9YXJtdjctbm9uZS1saW51eC1nbnVlYWJpIC0td2l0aG91dC1tcGljYyIKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLWVuYWJsZS1vbmx5MzJiaXQnLCctLWVuYWJsZS1vbmx5NjRiaXQnXVtkLmdldFZhcignU0lURUlORk9fQklUUycsIFRydWUpICE9ICczMiddfSIKK0VYVFJBX09FTUFLRSA9ICItdyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLW0gNjQ0ICR7Qn0vZGVmYXVsdC5zdXBwICR7RH0vJHtsaWJkaXJ9L3ZhbGdyaW5kLworfQorCitSREVQRU5EU18ke1BOfSArPSAicGVybCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtQTn0vKi8uZGVidWcvKiIKKworIyB2YWxncmluZCBuZWVkcyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgbGQuc28gYXQgcnVudGltZSBpbiBvcmRlciB0bworIyByZWRpcmVjdCBmdW5jdGlvbnMgbGlrZSBzdHJsZW4uCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtUQ0xJQkN9LWRiZyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiBzZWQgcGVybCBnbGliYy11dGlscyBwZXJsLW1vZHVsZS1maWxlLWdsb2IiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgb2VfcnVubWFrZSBjaGVjayBDRkxBR1M9IiR7Q0ZMQUdTfSAtTzAiIENYWEZMQUdTPSIke0NYWEZMQUdTfSAtTzAiCit9CisKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICBjaG1vZCAreCAke0J9L3Rlc3RzL3ZnX3JlZ3Rlc3QKKworICAgICMgVGhlIHRlc3QgYXBwbGljYXRpb24gYmluYXJpZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4KKyAgICAjIEdyYWIgdGhlbSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgIworICAgICMgVGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZSBzY3JpcHRzIGFuZCBkYXRhIGZpbGVzIHRoYXQgYXJlIG5vdAorICAgICMgY29waWVkIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuICBUaGV5IG11c3QgYmUgY29waWVkIGZyb20gdGhlCisgICAgIyBzb3VyY2UgZGlyZWN0b3J5LiAKKyAgICBzYXZlZF9kaXI9JFBXRAorICAgIGZvciBwYXJlbnRfZGlyIGluICR7U30gJHtCfSA7IGRvCisgICAgICAgIGNkICRwYXJlbnRfZGlyCisKKyAgICAgICAgIyBleGNsdWRlIHNoZWxsIG9yIHRoZSBwYWNrYWdlIHdvbid0IGluc3RhbGwKKyAgICAgICAgcm0gLXJmIG5vbmUvdGVzdHMvc2hlbGwqIDI+L2Rldi9udWxsCisKKyAgICAgICAgc3ViZGlycz0idGVzdHMgY2FjaGVncmluZC90ZXN0cyBjYWxsZ3JpbmQvdGVzdHMgZHJkL3Rlc3RzIGhlbGdyaW5kL3Rlc3RzIG1hc3NpZi90ZXN0cyBtZW1jaGVjay90ZXN0cyBub25lL3Rlc3RzIgorCisgICAgICAgICMgR2V0IHRoZSB2ZyB0ZXN0IHNjcmlwdHMsIGZpbHRlcnMsIGFuZCBleHBlY3RlZCBmaWxlcworICAgICAgICBmb3IgZGlyIGluICRzdWJkaXJzIDsgZG8KKyAgICAgICAgICAgIGZpbmQgJGRpciB8IGNwaW8gLXB2ZHUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgZG9uZQorICAgICAgICBjZCAkc2F2ZWRfZGlyCisgICAgZG9uZQorCisgICAgIyBjbGVhbiBvdXQgYnVpbGQgYXJ0aWZhY3RzIGJlZm9yZSBidWlsZGluZyB0aGUgcnBtCisgICAgZmluZCAke0R9JHtQVEVTVF9QQVRIfSBcCisgICAgICAgICBcKCAtbmFtZSAiTWFrZWZpbGUqIiBcCisgICAgICAgIC1vIC1uYW1lICIqLm8iIFwKKyAgICAgICAgLW8gLW5hbWUgIiouYyIgXAorICAgICAgICAtbyAtbmFtZSAiKi5TIiBcCisgICAgICAgIC1vIC1uYW1lICIqLmgiIFwpIFwKKyAgICAgICAgLWV4ZWMgcm0ge30gXDsKKworICAgICMgbmVlZGVkIGJ5IG1hc3NpZiB0ZXN0cworICAgIGNwICR7Qn0vbWFzc2lmL21zX3ByaW50ICR7RH0ke1BURVNUX1BBVEh9L21hc3NpZi9tc19wcmludAorCisgICAgIyBoYW5kbGUgbXVsdGlsaWIKKyAgICBzZWQgLWkgczpAbGliZGlyQDoke2xpYmRpcn06ZyAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL2ZpbGVzL2NhdGFsb2cueG1sIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL2ZpbGVzL2NhdGFsb2cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODgzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8vZmlsZXMvY2F0YWxvZy54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLyIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1IiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIENBTFMgVGFibGUgTW9kZWwgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0JrIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYWwgV2Fsc2gvL0V4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSIuL2RvY2Jvb2steHNsLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14c2wueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG8tMC4wLjI2L2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvLTAuMC4yNi9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU0N2E2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvLTAuMC4yNi9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitjb25maWd1cmUuaW46IGRyb3AgdGhlIHRlc3Qgb2YgeG1sbGludCBhbmQgeHNsdHByb2MKKworVGhlIHRlc3QgaXMgdW5uZWNlc3NhcnksIHRoZSB4bWxsaW50IGFuZCB4c2x0cHJvYyB3ZXJlIGV4cGxpY2l0bHkKK2FkZGVkIHRvIFJERVBFTkRTLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNDIsMTAgKzQyLDEwIEBAIEFDX0FSR19WQVIoW0xPQ0FMRV0sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgbG9jYWxlJyBwcm9ncmFtLl0pCisgQUNfUEFUSF9QUk9HKFtMT0NBTEVdLCBbbG9jYWxlXSwgW2xvY2FsZV0pCisgCisgQUNfQVJHX1ZBUihbWE1MTElOVF0sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgeG1sbGludCcgcHJvZ3JhbS5dKQorLUFDX1BBVEhfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorK2RubCBBQ19QQVRIX1BST0coW1hNTExJTlRdLCBbeG1sbGludF0sIFt4bWxsaW50XSkKKyAKKyBBQ19BUkdfVkFSKFtYU0xUUFJPQ10sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgeHNsdHByb2MnIHByb2dyYW0uXSkKKy1BQ19QQVRIX1BST0coW1hTTFRQUk9DXSwgW3hzbHRwcm9jXSwgW3hzbHRwcm9jXSkKKytkbmwgQUNfUEFUSF9QUk9HKFtYU0xUUFJPQ10sIFt4c2x0cHJvY10sIFt4c2x0cHJvY10pCisgCisgZG5sCisgZG5sIHRvb2xjaGFpbnMKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI2LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2EwMTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yNi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkEgc2hlbGwtc2NyaXB0IHRvb2wgZm9yIGNvbnZlcnRpbmcgWE1MIGZpbGVzIHRvIHZhcmlvdXMgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy94bWx0by8iCitTRUNUSU9OID0gImRvY3MveG1sdG8iCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMveC9tL3htbHRvL3htbHRvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jYXRhbG9nLnhtbCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiMGNjYThiZTc4N2JhMDFlMDBjNjE4Y2IzOTBjOTg4YjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZkOGQyYTI2MDc3YmUxZDU1NjZkZmUyMmRkNjYwOTlhZTRmNDYwMGRlYTk3ZDZlMTEzYTJjYzViODcwODk3NyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyB4bWx0byBuZWVkcyBnZXRvcHQveG1sbGludC94c2x0cHJvYy9iYXNoIGF0IHJ1bnRpbWUKK1JERVBFTkRTXyR7UE59ID0gImRvY2Jvb2steG1sLWR0ZDQgXAorICAgICAgICAgICAgICAgICAgZG9jYm9vay14c2wtc3R5bGVzaGVldHMgXAorICAgICAgICAgICAgICAgICAgdXRpbC1saW51eCBcCisgICAgICAgICAgICAgICAgICBsaWJ4bWwyIFwKKyAgICAgICAgICAgICAgICAgIGJhc2ggXAorIgorUkRFUEVORFNfJHtQTn1fYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAorICAgICAgICAgICAgICAgICAgbGlieHNsdC1iaW4gXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgWE1MTElOVD14bWxsaW50IFhTTFRQUk9DPXhzbHRwcm9jIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKyAgICBpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9jYXRhbG9nLnhtbCAke0R9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS94bWx0byBYTUxfQ0FUQUxPR19GSUxFUz0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3JkZXB0YXNrXSA9ICJkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3lhc20veWFzbV8xLjMuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy95YXNtL3lhc21fMS4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3MDJlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy95YXNtL3lhc21fMS4zLjAuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJ4ODYgKFNTRSkgYXNzZW1ibGVyIHN1cHBvcnRpbmcgTkFTTSBhbmQgR0FTLXN5bnRheGVzIgorTElDRU5TRSA9ICJCU0QiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnRvcnRhbGwubmV0L3Byb2plY3RzL3lhc20vIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMTJkODkwMzUwOGZiNmJmZDQ5ZDhkODJjNjE3MGRkOSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnRvcnRhbGwubmV0L3Byb2plY3RzL3lhc20vcmVsZWFzZXMvJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM5ZTU4Njc1MWZmNzg5YjM0YjFmMjFkNTcyZDk2YWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2RjZTY2MDFiNDk1ZjViM2Q0NWI1OWY3ZDI0OTJhMzQwZWU3ZTg0YjViZWNhMTdlNDhmODYyNTAyYmQ1NjAzZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLW5hdGl2ZV8xLjAuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLW5hdGl2ZV8xLjAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFjMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtbmF0aXZlXzEuMC44LmJiCkBAIC0wLDAgKzEsMjAgQEAKKyMgemlzb2ZzLXRvb2xzLW5hdGl2ZSBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBjcmVhdGluZyBjb21wcmVzc2VkIENELVJPTSBmaWxlc3lzdGVtcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvemlzb2ZzLXRvb2xzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInpsaWItbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLSR7UFZ9LnRhci5iejIvMmQwZWQ4YzlhMWY2MGI0NWY5NDliMTM2ZjliZTFmNmMvemlzb2ZzLXRvb2xzLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZDBlZDhjOWExZjYwYjQ1Zjk0OWIxMzZmOWJlMWY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZTRlNTNlNDkxNDkzNGQ0MTY2MDI0OGZiNTlkM2M4NzYxZjFmMWZkMTgwZDVlYzk5M2MxN2RkYjNhZmQwNGYzIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0ke0R9IGJpbmRpcj0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhZTI4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gN2Y4MTFkOWM0ZWJjOTQ0NGU2MTNlMjUxYzMxZDZiZjUzN2EyNGRjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE2OjM1OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSBnbGliYyBhc3N1bXB0aW9uCisKK2dsaWJjIHRpbWUuaCBoZWFkZXIgaGFzIGFuIHVuZG9jdW1lbnRlZCBfX2lzbGVhcCBtYWNybwordGhhdCB3ZSBhcmUgdXNpbmcgYW5mIG11c2wgaXMgbWlzc2luZyBpdC4KK1NpbmNlIGl0IGlzIHVuZG9jdW1lbnRlZCAmIGRvZXMgbm90IGFwcGVhcgorb24gYW55IG90aGVyIGxpYmMsIHN0b3AgdXNpbmcgaXQgYW5kIGp1c3QgZGVmaW5lIHRoZSBtYWNybyBpbgorbG9jYWxseSAgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBwYXJzZXRpbWUueSB8IDExICsrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BhcnNldGltZS55IGIvcGFyc2V0aW1lLnkKK2luZGV4IDcwMDVlODguLjMyNGU2ZDMgMTAwNjQ0CistLS0gYS9wYXJzZXRpbWUueQorKysrIGIvcGFyc2V0aW1lLnkKK0BAIC04LDYgKzgsOSBAQAorIAorICNkZWZpbmUgWVlERUJVRyAxCisgCisrI2RlZmluZSBpc19sZWFwX3llYXIoeSkgXAorKyAgICAoKHkpICUgNCA9PSAwICYmICgoeSkgJSAxMDAgIT0gMCB8fCAoeSkgJSA0MDAgPT0gMCkpCisrCisgc3RydWN0IHRtIGV4ZWN0bTsKKyBzdGF0aWMgaW50IGlzZ210OworIHN0YXRpYyBpbnQgeWVhcnNwZWM7CitAQCAtMjE3LDggKzIyMCw4IEBAIGRhdGUgICAgICAgICAgICA6IG1vbnRoX25hbWUgZGF5X251bWJlcgorIAkJCQkgbW51bSA9PSAxMikgJiYgZG51bSA+IDMxKQorIAkJCSAgICB8fCAoKG1udW0gPT0gIDQgfHwgbW51bSA9PSAgNiB8fCBtbnVtID09ICA5IHx8CisgCQkJICAgICAgICAgbW51bSA9PSAxMSkgJiYgZG51bSA+IDMwKQorLQkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIF9faXNsZWFwKHludW0rMTkwMCkpCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOCAmJiAhX19pc2xlYXAoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI5ICYmICBpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKyAJCQkgICApCisgCQkJeworIAkJCSAgICB5eWVycm9yKCJFcnJvciBpbiBkYXkgb2YgbW9udGgiKTsKK0BAIC0yNjEsOCArMjY0LDggQEAgZGF0ZSAgICAgICAgICAgIDogbW9udGhfbmFtZSBkYXlfbnVtYmVyCisgCQkJCSBtbnVtID09IDEyKSAmJiBkbnVtID4gMzEpCisgCQkJICAgIHx8ICgobW51bSA9PSAgNCB8fCBtbnVtID09ICA2IHx8IG1udW0gPT0gIDkgfHwKKyAJCQkgICAgICAgICBtbnVtID09IDExKSAmJiBkbnVtID4gMzApCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgX19pc2xlYXAoeW51bSsxOTAwKSkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFfX2lzbGVhcCh5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIGlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIWlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorIAkJCSAgICkKKyAJCQl7CisgCQkJICAgIHl5ZXJyb3IoIkVycm9yIGluIGRheSBvZiBtb250aCIpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLmluaXQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhMzc5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuaW5pdApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMKKyMgU3RhcnRzIGF0IGRhZW1vbgorIworCit1bWFzayAwNzcKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3N0YXJ0KCkgeworCWVjaG8gLW4gIlN0YXJ0aW5nIGF0ZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vYXRkLnBpZCAtLWJhY2tncm91bmQgLS1leGVjIC91c3Ivc2Jpbi9hdGQgLS0gLWYKKwllY2hvICJPSyIKK30KK3N0b3AoKSB7CisJZWNobyAtbiAiU3RvcHBpbmcgYXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuL2F0ZC5waWQKKwllY2hvICJPSyIKK30KK3Jlc3RhcnQoKSB7CisJc3RvcAorCXN0YXJ0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydAorCTs7CisgIHN0b3ApCisJc3RvcAorCTs7CisgIHJlc3RhcnR8cmVsb2FkKQorCXJlc3RhcnQKKwk7OworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9hdGQKKwk7OworICAqKQorCWVjaG8gJCJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxzdGF0dXN9IgorCWV4aXQgMQorZXNhYworCitleGl0ICQ/CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGM4NDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1Kb2Igc3Bvb2xpbmcgdG9vbHMKK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2F0ZCAtZgorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTVlZmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGF0LTMuMS4xMi9jb25maWd1cmUuYWMJMjAxMS0wNi0yMyAxNDo1MTowMy42NTM1NzI5NDUgKzA4MDAKKysrKyBhdC0zLjEuMTIvY29uZmlndXJlLmFjLm5ldwkyMDExLTA2LTI3IDE2OjEyOjE0LjkwMzU3Mjk0NSArMDgwMAorQEAgLTgxLDEwICs4MSwxOCBAQAorIEFDX0ZVTkNfVlBSSU5URgorIEFDX0ZVTkNfR0VUTE9BREFWRworIEFDX0NIRUNLX0ZVTkNTKGdldGN3ZCBta3RpbWUgc3RyZnRpbWUgc2V0cmV1aWQgc2V0cmVzdWlkIHNpZ2FjdGlvbiB3YWl0cGlkKQorKworK0FDX0FSR19XSVRIKFtwYW1dLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtcGFtXSwgW3dpdGhvdXQgUEFNIHN1cHBvcnRdKV0pCisrCisraWYgdGVzdCAieCR3aXRoX3BhbSIgIT0geG5vOyB0aGVuCisgQUNfQ0hFQ0tfSEVBREVSUyhzZWN1cml0eS9wYW1fYXBwbC5oLCBbCisgICBQQU1MSUI9Ii1scGFtIgorLSAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSkKKy1dKQorKyAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSldLAorKyAgIFtpZiB0ZXN0ICJ4JHdpdGhfcGFtIiA9IHh5ZXM7IHRoZW4KKysgICBBQ19NU0dfRVJST1IoW1BBTSBzZWxlY3RlZCBidXQgc2VjdXJpdHkvcGFtX21pc2MuaCBub3QgZm91bmRdKQorKyAgIGZpXSkKKytmaQorCisgZG5sIENoZWNraW5nIGZvciBwcm9ncmFtcworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWVmMDAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworcG9zaXh0bS5bY2hdIGZpbGVzIGFyZSByZXBsYWNlZCB3aXRoIGdwbHYyIHZlcnNpb24gZnJvbSB0aGVzZSBsb2NhdGlvbnM6CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5jO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5oO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEgCisKK3VwZGF0ZSB0aGUgQ29weXJpZ2h0IGZpbGUgaW5mb3JtYXRpb24gdG8gcmVmbGVjdCB0aGUgcmVwbGFjZWQgZmlsZXMuCisKK0RhdGU6IDIwMTAvMDgvMzEKK05pdGluIEEgS2FtYmxlIG5pdGluLmEua2FtYmxlQGludGVsLmNvbQorCitJbmRleDogYXQtMy4xLjEyL0NvcHlyaWdodAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL0NvcHlyaWdodAorKysrIGF0LTMuMS4xMi9Db3B5cmlnaHQKK0BAIC0zMSwxMCArMzEsMTAgQEAgVGhlIGZpbGVzIHBvc2l4dG0uYyBhbmQgcG9zaXh0bS5oIGhhdmUgdAorICAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyAgICAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmZjNlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorbWFrZSAtaiB3YXMgZmFpbGluZyBzb21ldGltZXNhIGxpa2UgdGhpcworfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUvbml0aW4vYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggLUkuIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLW8gYXRkIGF0ZC5vIGRhZW1vbi5vICAtbGZsICAtbHBhbSAtV2wsLU8xIC1XbCwtLWFzLW5lZWRlZAorfCBwYXJzZXRpbWUubDo1OjE5OiBmYXRhbCBlcnJvcjogeS50YWIuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorfCBtYWtlOiAqKiogW2xleC55eS5vXSBFcnJvciAxCit8IG1ha2U6ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCisKK0ZpeGVkIHRoZSBpc3N1ZSBieSBhZGRpbmcgYSBkZXBlbmRlbmN5IGluIHRoZSBtYWtlZmlsZS4KK05pdGluIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEwLzA5LzAyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGF0LTMuMS4xMi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL01ha2VmaWxlLmluCisrKysgYXQtMy4xLjEyL01ha2VmaWxlLmluCitAQCAtODMsNiArODMsOCBAQCB5LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisgbGV4Lnl5LmM6IHBhcnNldGltZS5sCisgCSQoTEVYKSAtaSBwYXJzZXRpbWUubAorIAorK3BhcnNldGltZS5sOiB5LnRhYi5oCisrCisgYXRydW46IGF0cnVuLmluCisgCWNvbmZpZ3VyZQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyYTRjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxNTBiNjNhOTM2YWY3MWI5OTJhM2E3YjBmYzJkMjQ5N2U1MWZjODAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI4IEphbiAyMDE1IDIzOjUyOjAwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgoreS50YWIuYzoxMDAxOjA6IGVycm9yOiB1bnRlcm1pbmF0ZWQgI2lmCisKK0xldCAiJChZQUNDKSAtZCBwYXJzZXRpbWUueSIgb25seSBydW4gb25jZSB3aWxsIGZpeCB0aGUgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAyYTliOTE4Li5hYTdjMDRhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzUsNyArNzUsOSBAQCBhdDogJChBVE9CSkVDVFMpCisgYXRkOiAkKFJVTk9CSkVDVFMpCisgCSQoQ0MpICQoTERGTEFHUykgLW8gYXRkICQoUlVOT0JKRUNUUykgJChMSUJTKSAkKFBBTUxJQikKKyAKKy15LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisreS50YWIuaDogeS50YWIuYworKworK3kudGFiLmM6IHBhcnNldGltZS55CisgCSQoWUFDQykgLWQgcGFyc2V0aW1lLnkKKyAKKyBsZXgueXkuYzogcGFyc2V0aW1lLmwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjZWI5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wYW0uY29uZi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitvZSBkb2Vzbid0IHN1cHBvcnQgIkBpbmNsdWRlIiwgdXNlIHRoZSBjb25jcmV0ZSBkaXJlY3RpdmUgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorSW5kZXg6IGF0LTMuMS4xNS9wYW0uY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xNS5vcmlnL3BhbS5jb25mCisrKysgYXQtMy4xLjE1L3BhbS5jb25mCitAQCAtMSwxMCArMSwxMSBAQAorICMKKyAjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgYXQgZGFlbW9uCisgIworKyAKKythdXRoICAgIHJlcXVpcmVkICAgIHBhbV9lbnYuc28KKythdXRoICAgIGluY2x1ZGUgICAgIGNvbW1vbi1hdXRoCisrYWNjb3VudCBpbmNsdWRlICAgICBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gaW5jbHVkZSAgICAgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9saW1pdHMuc28KKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9sb2dpbnVpZC5zbworIAorLWF1dGgJcmVxdWlyZWQJcGFtX2Vudi5zbworLUBpbmNsdWRlIGNvbW1vbi1hdXRoCistQGluY2x1ZGUgY29tbW9uLWFjY291bnQKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xvZ2ludWlkLnNvCistQGluY2x1ZGUgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNGJhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qIFBhcnNlIGRhdGVzIGZvciB0b3VjaCBhbmQgZGF0ZS4KKworICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkwLCAxOTkxLCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorICAgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJwb3NpeHRtLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgVVNFX1VOTE9DS0VEX0lPCisjIGluY2x1ZGUgInVubG9ja2VkLWlvLmgiCisjZW5kaWYKKworLyogSVNESUdJVCBkaWZmZXJzIGZyb20gaXNkaWdpdCwgYXMgZm9sbG93czoKKyAgIC0gSXRzIGFyZyBtYXkgYmUgYW55IGludCBvciB1bnNpZ25lZCBpbnQ7IGl0IG5lZWQgbm90IGJlIGFuIHVuc2lnbmVkIGNoYXIKKyAgICAgb3IgRU9GLgorICAgLSBJdCdzIHR5cGljYWxseSBmYXN0ZXIuCisgICBQT1NJWCBzYXlzIHRoYXQgb25seSAnMCcgdGhyb3VnaCAnOScgYXJlIGRpZ2l0cy4gIFByZWZlciBJU0RJR0lUIHRvCisgICBpc2RpZ2l0IHVubGVzcyBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGxvY2FsZSdzIGRlZmluaXRpb24KKyAgIG9mIGBkaWdpdCcgZXZlbiB3aGVuIHRoZSBob3N0IGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVguICAqLworI2RlZmluZSBJU0RJR0lUKGMpICgodW5zaWduZWQgaW50KSAoYykgLSAnMCcgPD0gOSkKKwordGltZV90IG1rdGltZSAoKTsKKworLyoKKyAgUE9TSVggcmVxdWlyZXM6CisKKyAgdG91Y2ggLXQgW1tDQ11ZWV1tbWRkaGhtbVsuc3NdIEZJTEUuLi4KKyAgICA4LCAxMCwgb3IgMTIgZGlnaXRzLCBmb2xsb3dlZCBieSBvcHRpb25hbCAuc3MKKyAgICAoUERTX0xFQURJTkdfWUVBUiB8IFBEU19DRU5UVVJZIHwgUERTX1NFQ09ORFMpCisKKyAgdG91Y2ggbW1kZGhobW1bWVldIEZJTEUuLi4gKG9ic29sZXRlZCBieSBQT1NJWCAxMDAzLjEtMjAwMSkKKyAgICA4IG9yIDEwIGRpZ2l0cywgWVkgKGlmIHByZXNlbnQpIG11c3QgYmUgaW4gdGhlIHJhbmdlIDY5LTk5CisgICAgKFBEU19UUkFJTElOR19ZRUFSIHwgUERTX1BSRV8yMDAwKQorCisgIGRhdGUgbW1kZGhobW1bW0NDXVlZXQorICAgIDgsIDEwLCBvciAxMiBkaWdpdHMKKyAgICAoUERTX1RSQUlMSU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSkKKworKi8KKworc3RhdGljIGludAoreWVhciAoc3RydWN0IHRtICp0bSwgY29uc3QgaW50ICpkaWdpdF9wYWlyLCBzaXplX3QgbiwgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKQoreworICBzd2l0Y2ggKG4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIHRtLT50bV95ZWFyID0gKmRpZ2l0X3BhaXI7CisgICAgICAvKiBEZWR1Y2UgdGhlIGNlbnR1cnkgYmFzZWQgb24gdGhlIHllYXIuCisJIFBPU0lYIHJlcXVpcmVzIHRoYXQgMDAtNjggYmUgaW50ZXJwcmV0ZWQgYXMgMjAwMC0yMDY4LAorCSBhbmQgdGhhdCA2OS05OSBiZSBpbnRlcnByZXRlZCBhcyAxOTY5LTE5OTkuICAqLworICAgICAgaWYgKGRpZ2l0X3BhaXJbMF0gPD0gNjgpCisJeworCSAgaWYgKHN5bnRheF9iaXRzICYgUERTX1BSRV8yMDAwKQorCSAgICByZXR1cm4gMTsKKwkgIHRtLT50bV95ZWFyICs9IDEwMDsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIGlmICghIChzeW50YXhfYml0cyAmIFBEU19DRU5UVVJZKSkKKwlyZXR1cm4gMTsKKyAgICAgIHRtLT50bV95ZWFyID0gZGlnaXRfcGFpclswXSAqIDEwMCArIGRpZ2l0X3BhaXJbMV0gLSAxOTAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDA6CisgICAgICB7CisJdGltZV90IG5vdzsKKwlzdHJ1Y3QgdG0gKnRtcDsKKworCS8qIFVzZSBjdXJyZW50IHllYXIuICAqLworCXRpbWUgKCZub3cpOworCXRtcCA9IGxvY2FsdGltZSAoJm5vdyk7CisJaWYgKCEgdG1wKQorCSAgcmV0dXJuIDE7CisJdG0tPnRtX3llYXIgPSB0bXAtPnRtX3llYXI7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Bvc2l4X3RpbWVfcGFyc2UgKHN0cnVjdCB0bSAqdG0sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgY29uc3QgY2hhciAqZG90ID0gTlVMTDsKKyAgaW50IHBhaXJbNl07CisgIGludCAqcDsKKyAgc2l6ZV90IGk7CisKKyAgc2l6ZV90IHNfbGVuID0gc3RybGVuIChzKTsKKyAgc2l6ZV90IGxlbiA9ICgoKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpICYmIChkb3QgPSBzdHJjaHIgKHMsICcuJykpKQorCQk/IChzaXplX3QpIChkb3QgLSBzKQorCQk6IHNfbGVuKTsKKworICBpZiAobGVuICE9IDggJiYgbGVuICE9IDEwICYmIGxlbiAhPSAxMikKKyAgICByZXR1cm4gMTsKKworICBpZiAoZG90KQorICAgIHsKKyAgICAgIGlmICghKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpKQorCXJldHVybiAxOworCisgICAgICBpZiAoc19sZW4gLSBsZW4gIT0gMykKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIGlmICghSVNESUdJVCAoc1tpXSkpCisgICAgICByZXR1cm4gMTsKKworICBsZW4gLz0gMjsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIHBhaXJbaV0gPSAxMCAqIChzWzIqaV0gLSAnMCcpICsgc1syKmkgKyAxXSAtICcwJzsKKworICBwID0gcGFpcjsKKyAgaWYgKHN5bnRheF9iaXRzICYgUERTX0xFQURJTkdfWUVBUikKKyAgICB7CisgICAgICBpZiAoeWVhciAodG0sIHAsIGxlbiAtIDQsIHN5bnRheF9iaXRzKSkKKwlyZXR1cm4gMTsKKyAgICAgIHAgKz0gbGVuIC0gNDsKKyAgICAgIGxlbiA9IDQ7CisgICAgfQorCisgIC8qIEhhbmRsZSA4IGRpZ2l0cyB3b3J0aCBvZiBgTU1ERGhobW0nLiAgKi8KKyAgdG0tPnRtX21vbiA9ICpwKysgLSAxOworICB0bS0+dG1fbWRheSA9ICpwKys7CisgIHRtLT50bV9ob3VyID0gKnArKzsKKyAgdG0tPnRtX21pbiA9ICpwKys7CisgIGxlbiAtPSA0OworCisgIC8qIEhhbmRsZSBhbnkgdHJhaWxpbmcgeWVhci4gICovCisgIGlmIChzeW50YXhfYml0cyAmIFBEU19UUkFJTElOR19ZRUFSKQorICAgIHsKKyAgICAgIGlmICh5ZWFyICh0bSwgcCwgbGVuLCBzeW50YXhfYml0cykpCisJcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEhhbmRsZSBzZWNvbmRzLiAgKi8KKyAgaWYgKCFkb3QpCisgICAgeworICAgICAgdG0tPnRtX3NlYyA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IHNlY29uZHM7CisKKyAgICAgICsrZG90OworICAgICAgaWYgKCFJU0RJR0lUIChkb3RbMF0pIHx8ICFJU0RJR0lUIChkb3RbMV0pKQorCXJldHVybiAxOworICAgICAgc2Vjb25kcyA9IDEwICogKGRvdFswXSAtICcwJykgKyBkb3RbMV0gLSAnMCc7CisKKyAgICAgIHRtLT50bV9zZWMgPSBzZWNvbmRzOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogUGFyc2UgYSBQT1NJWC1zdHlsZSBkYXRlLCByZXR1cm5pbmcgdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKworYm9vbAorcG9zaXh0aW1lICh0aW1lX3QgKnAsIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgc3RydWN0IHRtIHRtMAorI2lmZGVmIGxpbnQKKyAgLyogUGxhY2F0ZSBnY2MtNCdzIC1XdW5pbml0aWFsaXplZC4KKyAgICAgcG9zaXhfdGltZV9wYXJzZSBmYWlscyB0byBzZXQgYWxsIG9mIHRtMCBvbmx5IHdoZW4gaXQgcmV0dXJucworICAgICBub256ZXJvIChkdWUgdG8geWVhcigpIHJldHVybmluZyBub256ZXJvKSwgYW5kIGluIHRoYXQgY2FzZSwKKyAgICAgdGhpcyBjb2RlIGRvZXNuJ3QgdXNlIHRoZSB0bTAgYXQgYWxsLiAgKi8KKyAgICA9IHsgMCwgfQorI2VuZGlmCisgICAgOworICBzdHJ1Y3QgdG0gdG0xOworICBzdHJ1Y3QgdG0gY29uc3QgKnRtOworICB0aW1lX3QgdDsKKworICBpZiAocG9zaXhfdGltZV9wYXJzZSAoJnRtMCwgcywgc3ludGF4X2JpdHMpKQorICAgIHJldHVybiBmYWxzZTsKKworICB0bTEgPSB0bTA7CisgIHRtMS50bV9pc2RzdCA9IC0xOworICB0ID0gbWt0aW1lICgmdG0xKTsKKworICBpZiAodCAhPSAodGltZV90KSAtMSkKKyAgICB0bSA9ICZ0bTE7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBta3RpbWUgcmV0dXJucyAtMSBmb3IgZXJyb3JzLCBidXQgLTEgaXMgYWxzbyBhIHZhbGlkIHRpbWVfdAorCSB2YWx1ZS4gIENoZWNrIHdoZXRoZXIgYW4gZXJyb3IgcmVhbGx5IG9jY3VycmVkLiAgKi8KKyAgICAgIHRtID0gbG9jYWx0aW1lICgmdCk7CisgICAgICBpZiAoISB0bSkKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgIC8qIFJlamVjdCBkYXRlcyBsaWtlICJTZXB0ZW1iZXIgMzEiIGFuZCB0aW1lcyBsaWtlICIyNTo2MSIuICAqLworICBpZiAoKHRtMC50bV95ZWFyIF4gdG0tPnRtX3llYXIpCisgICAgICB8ICh0bTAudG1fbW9uIF4gdG0tPnRtX21vbikKKyAgICAgIHwgKHRtMC50bV9tZGF5IF4gdG0tPnRtX21kYXkpCisgICAgICB8ICh0bTAudG1faG91ciBeIHRtLT50bV9ob3VyKQorICAgICAgfCAodG0wLnRtX21pbiBeIHRtLT50bV9taW4pCisgICAgICB8ICh0bTAudG1fc2VjIF4gdG0tPnRtX3NlYykpCisgICAgcmV0dXJuIGZhbHNlOworCisgICpwID0gdDsKKyAgcmV0dXJuIHRydWU7Cit9CisKKyNpZmRlZiBURVNUX1BPU0lYVElNRQorLyoKKyAgICBUZXN0IG1haW5seSB3aXRoIHN5bnRheF9iaXRzID09IDEzCisgICAgKGFrYTogKFBEU19MRUFESU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSB8IFBEU19TRUNPTkRTKSkKKworICAgIFRoaXMgdGVzdCBkYXRhIGFzc3VtZXMgVW5pdmVyc2FsIFRpbWUsIGUuZy4sIFRaPSJVVEMwIi4KKworICAgIFRoaXMgdGVzdCBkYXRhIGFsc28gYXNzdW1lcyB0aGF0IHRpbWVfdCBpcyBzaWduZWQgYW5kIGlzIGF0IGxlYXN0CisgICAgMzkgYml0cyB3aWRlLCBzbyB0aGF0IGl0IGNhbiByZXByZXNlbnQgYWxsIHllYXJzIGZyb20gMDAwMCB0aHJvdWdoCisgICAgOTk5OS4gIEEgaG9zdCB3aXRoIDMyLWJpdCBzaWduZWQgdGltZV90IGNhbiByZXByZXNlbnQgb25seSB0aW1lCisgICAgc3RhbXBzIGluIHRoZSByYW5nZSAxOTAxLTEyLTEzIDIwOjQ1OjUyIHRocm91Z2ggMjAzOC0wMS0xOAorICAgIDAzOjE0OjA3IFVUQywgYXNzdW1pbmcgUE9TSVggdGltZV90IHdpdGggbm8gbGVhcCBzZWNvbmRzLCBzbyB0ZXN0CisgICAgY2FzZXMgb3V0c2lkZSB0aGlzIHJhbmdlIHdpbGwgbm90IHdvcmsgb24gc3VjaCBhIGhvc3QuCisKKyAgICBBbHNvLCB0aGUgZmlyc3QgdHdvIGxpbmVzIG9mIHRlc3QgZGF0YSBhc3N1bWUgdGhhdCB0aGUgY3VycmVudAorICAgIHllYXIgaXMgMjAwMi4KKworQkVHSU4tREFUQQorMTIxMzE0MTUuMTYgICAgIDEzICAgMTAzOTc4ODkxNiBGcmkgRGVjIDEzIDE0OjE1OjE2IDIwMDIKKzEyMTMxNDE1LjE2ICAgICAxMyAgIDEwMzk3ODg5MTYgRnJpIERlYyAxMyAxNDoxNToxNiAyMDAyCiswMDAwMDEwMTAwMDAuMDAgMTMgLTYyMTY3MTMyODAwIFN1biBKYW4gIDEgMDA6MDA6MDAgMDAwMAorMTkwMTEyMTMyMDQ1LjUyIDEzICAtMjE0NzQ4MzY0OCBGcmkgRGVjIDEzIDIwOjQ1OjUyIDE5MDEKKzE5MDExMjEzMjA0NS41MyAxMyAgLTIxNDc0ODM2NDcgRnJpIERlYyAxMyAyMDo0NTo1MyAxOTAxCisxOTAxMTIxMzIwNDYuNTIgMTMgIC0yMTQ3NDgzNTg4IEZyaSBEZWMgMTMgMjA6NDY6NTIgMTkwMQorMTkwMTEyMTMyMTQ1LjUyIDEzICAtMjE0NzQ4MDA0OCBGcmkgRGVjIDEzIDIxOjQ1OjUyIDE5MDEKKzE5MDExMjE0MjA0NS41MiAxMyAgLTIxNDczOTcyNDggU2F0IERlYyAxNCAyMDo0NTo1MiAxOTAxCisxOTAyMDExMzIwNDUuNTIgMTMgIC0yMTQ0ODA1MjQ4IE1vbiBKYW4gMTMgMjA6NDU6NTIgMTkwMgorMTk2OTEyMzEyMzU5LjU5IDEzICAgICAgICAgICAtMSBXZWQgRGVjIDMxIDIzOjU5OjU5IDE5NjkKKzE5NzAwMTAxMDAwMC4wMCAxMyAgICAgICAgICAgIDAgVGh1IEphbiAgMSAwMDowMDowMCAxOTcwCisxOTcwMDEwMTAwMDAuMDEgMTMgICAgICAgICAgICAxIFRodSBKYW4gIDEgMDA6MDA6MDEgMTk3MAorMTk3MDAxMDEwMDAxLjAwIDEzICAgICAgICAgICA2MCBUaHUgSmFuICAxIDAwOjAxOjAwIDE5NzAKKzE5NzAwMTAxMDEwMC4wMCAxMyAgICAgICAgIDM2MDAgVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisxOTcwMDEwMjAwMDAuMDAgMTMgICAgICAgIDg2NDAwIEZyaSBKYW4gIDIgMDA6MDA6MDAgMTk3MAorMTk3MDAyMDEwMDAwLjAwIDEzICAgICAgMjY3ODQwMCBTdW4gRmViICAxIDAwOjAwOjAwIDE5NzAKKzE5NzEwMTAxMDAwMC4wMCAxMyAgICAgMzE1MzYwMDAgRnJpIEphbiAgMSAwMDowMDowMCAxOTcxCisxOTcwMDEwMDAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMDAxMDAwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMDEwMDAwLjYwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDEwMTAwNjAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTAxMjQwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMzIwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMTMwMTAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzIwMzgwMTE5MDMxNC4wNiAxMyAgIDIxNDc0ODM2NDYgVHVlIEphbiAxOSAwMzoxNDowNiAyMDM4CisyMDM4MDExOTAzMTQuMDcgMTMgICAyMTQ3NDgzNjQ3IFR1ZSBKYW4gMTkgMDM6MTQ6MDcgMjAzOAorMjAzODAxMTkwMzE0LjA4IDEzICAgMjE0NzQ4MzY0OCBUdWUgSmFuIDE5IDAzOjE0OjA4IDIwMzgKKzk5OTkxMjMxMjM1OS41OSAxMyAyNTM0MDIzMDA3OTkgRnJpIERlYyAzMSAyMzo1OTo1OSA5OTk5CisxMTEyMTMxNDE1ICAgICAgMTMgICAxMzIzNzg1NzAwIFR1ZSBEZWMgMTMgMTQ6MTU6MDAgMjAxMQorMTExMjEzMTQxNS4xNiAgIDEzICAgMTMyMzc4NTcxNiBUdWUgRGVjIDEzIDE0OjE1OjE2IDIwMTEKKzIwMTExMjEzMTQxNS4xNiAxMyAgIDEzMjM3ODU3MTYgVHVlIERlYyAxMyAxNDoxNToxNiAyMDExCisxOTExMTIxMzE0MTUuMTYgMTMgIC0xODMxOTc0Mjg0IFdlZCBEZWMgMTMgMTQ6MTU6MTYgMTkxMQorMjAzNzEyMTMxNDE1LjE2IDEzICAgMjE0NDMyNjUxNiBTdW4gRGVjIDEzIDE0OjE1OjE2IDIwMzcKKzM3MTIxMzE0MTUuMTYgICAxMyAgIDIxNDQzMjY1MTYgU3VuIERlYyAxMyAxNDoxNToxNiAyMDM3Cis2ODEyMTMxNDE1LjE2ICAgMTMgICAzMTIyNjMzNzE2IFRodSBEZWMgMTMgMTQ6MTU6MTYgMjA2OAorNjkxMjEzMTQxNS4xNiAgIDEzICAgICAtMTU5MDI4NCBTYXQgRGVjIDEzIDE0OjE1OjE2IDE5NjkKKzcwMTIxMzE0MTUuMTYgICAxMyAgICAgMjk5NDU3MTYgU3VuIERlYyAxMyAxNDoxNToxNiAxOTcwCisxMjEzMTQxNTk5ICAgICAgIDIgICAgOTQ1MDk0NTAwIE1vbiBEZWMgMTMgMTQ6MTU6MDAgMTk5OQorMTIxMzE0MTUwMCAgICAgICAyICAgIDk3NjcxNjkwMCBXZWQgRGVjIDEzIDE0OjE1OjAwIDIwMDAKK0VORC1EQVRBCisKKyovCisKKyMgZGVmaW5lIE1BWF9CVUZGX0xFTiAxMDI0CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgY2hhciBidWZmW01BWF9CVUZGX0xFTiArIDFdOworCisgIGJ1ZmZbTUFYX0JVRkZfTEVOXSA9IDA7CisgIHdoaWxlIChmZ2V0cyAoYnVmZiwgTUFYX0JVRkZfTEVOLCBzdGRpbikgJiYgYnVmZlswXSkKKyAgICB7CisgICAgICBjaGFyIHRpbWVfc3RyW01BWF9CVUZGX0xFTl07CisgICAgICB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHM7CisgICAgICB0aW1lX3QgdDsKKyAgICAgIGlmIChzc2NhbmYgKGJ1ZmYsICIlcyAldSIsIHRpbWVfc3RyLCAmc3ludGF4X2JpdHMpICE9IDIpCisJcHJpbnRmICgiKlxuIik7CisgICAgICBlbHNlCisJeworCSAgcHJpbnRmICgiJS0xNXMgJTJ1ICIsIHRpbWVfc3RyLCBzeW50YXhfYml0cyk7CisJICBpZiAocG9zaXh0aW1lICgmdCwgdGltZV9zdHIsIHN5bnRheF9iaXRzKSkKKwkgICAgcHJpbnRmICgiJTEybGQgJXMiLCAobG9uZyBpbnQpIHQsIGN0aW1lICgmdCkpOworCSAgZWxzZQorCSAgICBwcmludGYgKCIlMTJzICVzIiwgIioiLCAiKlxuIik7CisJfQorICAgIH0KKyAgZXhpdCAoMCk7CisKK30KKyNlbmRpZgorDAorLyoKK0xvY2FsIFZhcmlhYmxlczoKK2NvbXBpbGUtY29tbWFuZDogImdjYyAtRFRFU1RfUE9TSVhUSU1FIC1nIC1PIC1XYWxsIC1XIHBvc2l4dG0uYyIKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE3NDlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uaApAQCAtMCwwICsxLDM3IEBACisvKiBQYXJzZSBkYXRlcyBmb3IgdG91Y2ggYW5kIGRhdGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMywgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaWZuZGVmIFBPU0lYVE1fSF8KKyMgZGVmaW5lIFBPU0lYVE1fSF8KKworIyBpbmNsdWRlIDxzdGRib29sLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKworLyogUE9TSVggRGF0ZSBTeW50YXggZmxhZ3MuICAqLworIyBkZWZpbmUgUERTX0xFQURJTkdfWUVBUiAxCisjIGRlZmluZSBQRFNfVFJBSUxJTkdfWUVBUiAyCisjIGRlZmluZSBQRFNfQ0VOVFVSWSA0CisjIGRlZmluZSBQRFNfU0VDT05EUyA4CisjIGRlZmluZSBQRFNfUFJFXzIwMDAgMTYKKworYm9vbCBwb3NpeHRpbWUgKHRpbWVfdCAqcCwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE2LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEyYmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xNi5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gIkRlbGF5ZWQgam9iIGV4ZWN1dGlvbiBhbmQgYmF0Y2ggcHJvY2Vzc2luZyIKK0RFU0NSSVBUSU9OID0gIkF0IGFsbG93cyBmb3IgY29tbWFuZHMgdG8gYmUgcnVuIGF0IGEgcGFydGljdWxhciB0aW1lLiAgQmF0Y2ggd2lsbCBleGVjdXRlIGNvbW1hbmRzIHdoZW4gXAordGhlIHN5c3RlbSBsb2FkIGxldmVscyBkcm9wIHRvIGEgcGFydGljdWxhciBsZXZlbC4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IgorREVQRU5EUyA9ICJmbGV4IGZsZXgtbmF0aXZlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fREVQU30nLCAnJywgZCl9IFwKKyIKKworUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tZW52IHBhbS1wbHVnaW4tbGltaXRzIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImF0ZCIKK1JSRVBMQUNFU18ke1BOfSA9ICJhdGQiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXQvYXRfJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgIGZpbGU6Ly9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly9wb3NpeHRtLmMgXAorICAgIGZpbGU6Ly9wb3NpeHRtLmggXAorICAgIGZpbGU6Ly9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2ggXAorICAgIGZpbGU6Ly9hdGQuaW5pdCBcCisgICAgZmlsZTovL2F0ZC5zZXJ2aWNlIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgIGZpbGU6Ly9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIFwKKyAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uY29uZi5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDA1ZGE3NWQ5Yjc1ZDkzOTE3ZmZiMTZhYjQ4YjFlMTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2I5YWY1OWM2YTU0ZWRjZTk1MzZiYTYyOTg0MTA1NTQwOWQxZjg5ZDhhZTI2NDk0NzI3YTk3MTQxZmI0ZDVjMSIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NFTkRNQUlMPS9iaW4vdHJ1ZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fdXNlcm5hbWU9cm9vdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fZ3JvdXBuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtam9iZGlyPS92YXIvc3Bvb2wvYXQvam9icyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1hdHNwb29sPS92YXIvc3Bvb2wvYXQvc3Bvb2wgXAorICAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfc2VjdXJpdHlfcGFtX2FwcGxfaD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd5ZXMnLCAnbm8nLCBkKX0gIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgc3lzdGVtZCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXRkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhdGQuc2VydmljZSIKKworCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWNwIC1mICR7V09SS0RJUn0vcG9zaXh0bS5bY2hdICR7U30KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAtZSAiSVJPT1Q9JHtEfSIgaW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9hdGQuaW5pdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2F0ZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hdGQuc2VydmljZQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gMDY0NCAke1dPUktESVJ9LyR7QlB9L3BhbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2F0ZAorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkMTJjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkF1Z2VhcyBjb25maWd1cmF0aW9uIEFQSSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hdWdlYXMubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2F1Z2Vhcy9yZXBvcnQvMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuYXVnZWFzLm5ldC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgPSAicmVhZGxpbmUgbGlieG1sMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VTID0rICIke1BOfS1sZW5zZXMgbGliJHtCUE59IgorCitGSUxFU18ke1BOfS1sZW5zZXMgPSAiJHtkYXRhZGlyfS9hdWdlYXMvbGVuc2VzIgorRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitSREVQRU5EU19saWIke0JQTn0gKz0gIiR7UE59LWxlbnNlcyIKK1JSRUNPTU1FTkRTX2xpYiR7QlBOfSArPSAiJHtQTn0iCisKK0xFQURfU09OQU1FID0gImxpYmF1Z2Vhcy5zbyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLWZyICR7RH0ke2RhdGFkaXJ9L3ZpbQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExOTg3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4yLjAub3JpZy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC00NjMsNyArNDYzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmRiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0FkZCBtaXNzaW5nIEdMX0dFTkVSQVRFX0FSR1pfSCBjb25kaXRpb25hbAorCistIEdMX0dFTkVSQVRFX0FSR1pfSCBpcyB1c2VkIGluIGdudWxpYi9saWIvTWFrZWZpbGUuYW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMC4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYworQEAgLTU1LDYgKzU1LDggQEAgQUNfQVJHX1dJVEgoW2ZhaWxtYWxsb2NdLAorIAorIEFNX0NPTkRJVElPTkFMKFtXSVRIX0ZBSUxNQUxMT0NdLCBbdGVzdCB4JHdpdGhfZmFpbG1hbGxvYyAhPSB4bm9dKQorIAorK0FNX0NPTkRJVElPTkFMKFtHTF9HRU5FUkFURV9BUkdaX0hdLCBbdGVzdCAtbiAiJEFSR1pfSCJdKQorKworIGRubCAtLWVuYWJsZS1kZWJ1Zz0oeWVzfG5vKQorIEFDX0FSR19FTkFCTEUoW2RlYnVnXSwKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVidWc9bm8veWVzXSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyYTNlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0Vuc3VyZSB0aGF0IGJ1aWxkcyBpbiBzZXBhcmF0ZSBidWlsZGRpcnMgKCR7Qn0gIT0gJHtTfSkgY29ycmVjdGx5IGluc3RhbGwgdGhlIAorbGVuc2VzIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy80LzE3CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4wLjAub3JpZy9NYWtlZmlsZS5hbQkyMDEyLTExLTAyIDE1OjIwOjExLjAwMDAwMDAwMCArMDAwMAorKysrIGF1Z2Vhcy0xLjAuMC9NYWtlZmlsZS5hbQkyMDEzLTA0LTE3IDEwOjM2OjI0LjAzMzQwMDEyNSArMDAwMAorQEAgLTUsOCArNSw4IEBACisgbGVuc2Rpcj0kKGRhdGFkaXIpL2F1Z2Vhcy9sZW5zZXMvZGlzdAorIGxlbnN0ZXN0ZGlyPSQoZGF0YWRpcikvYXVnZWFzL2xlbnNlcy9kaXN0L3Rlc3RzCisgCistZGlzdF9sZW5zX0RBVEE9JCh3aWxkY2FyZCBsZW5zZXMvKi5hdWcpCistZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgbGVuc2VzL3Rlc3RzLyouYXVnKQorK2Rpc3RfbGVuc19EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9sZW5zZXMvKi5hdWcpCisrZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKWxlbnNlcy90ZXN0cy8qLmF1ZykKKyAKKyBFWFRSQV9ESVNUPWF1Z2Vhcy5zcGVjIGJ1aWxkL2F1eC9tb3ZlLWlmLWNoYW5nZSBNYWtlZmlsZS5hbSBIQUNLSU5HCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzXzEuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjRhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgYXVnZWFzLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYTI1MzZhOWMzZDc0NGRjMDlkMjM0MjI4ZmU0YjBjOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU5ZmFlN2FjMjI5MDI5ZTYwYTg2OWEzYjg4YzYxNmNmZDUxY2YyZmJhMjg2Y2RmZTNhZjNhMDUyY2IzNWIzMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvYnVpbGQtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzNDFlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLWROYXVyIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluLm9yaWcgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4KKy0tLSBiYXNoLTMuMi40OC9NYWtlZmlsZS5pbi5vcmlnCTIwMDYtMDgtMTcgMjM6MDM6MzUuMDAwMDAwMDAwICswNTAwCisrKysgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4JMjAxMy0wNy0wMiAyMDoyMDowNy41MTI3MDkzMjcgKzA1MDAKK0BAIC04MDMsMTcgKzgwMywzMSBAQAorIAlmaQorIAorIHJlY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQylyZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylyZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCisgemVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXplY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKFNVUFBPUlRfU1JDKXplY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCistdGVzdCB0ZXN0cyBjaGVjazoJZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrdGVzdCB0ZXN0cyBjaGVjazoKKysJQCQoTUFLRSkgaW5zdGFsbC10ZXN0CisrCUAkKE1BS0UpIHJ1bnRlc3QKKysKKytpbnN0YWxsLXRlc3Q6IGJ1aWxkdGVzdAorK2lmZXEgKCQob3JpZ2luIElOU1RBTExfVEVTVF9ESVIpLCB1bmRlZmluZWQpCisgCUAtdGVzdCAtZCB0ZXN0cyB8fCBta2RpciB0ZXN0cworIAlAY3AgJChURVNUU19TVVBQT1JUKSB0ZXN0cworK2Vsc2UKKysJQC10ZXN0IC1kICQoSU5TVEFMTF9URVNUX0RJUikgfHwgbWtkaXIgLXAgJChJTlNUQUxMX1RFU1RfRElSKQorKwlAY3AgLXIgJChzcmNkaXIpL3Rlc3RzLyogJChJTlNUQUxMX1RFU1RfRElSKS8KKysJQGNwICQoVEVTVFNfU1VQUE9SVCkgJChJTlNUQUxMX1RFU1RfRElSKQorK2VuZGlmCisrCisrYnVpbGR0ZXN0OiBmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKysKKytydW50ZXN0OgorIAlAKCBjZCAkKHNyY2RpcikvdGVzdHMgJiYgXAorIAkJUEFUSD0kKEJVSUxEX0RJUikvdGVzdHM6JCRQQVRIIFRISVNfU0g9JChUSElTX1NIKSAkKFNIRUxMKSAke1RFU1RTQ1JJUFR9ICkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTc1NmRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gOTMzYmQ4ODZhZjQ5NjY3ZTg4ZTIzODU0MDk0NDlhYjU5ODgxM2RhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE1IEp1bCAyMDE1IDAwOjU0OjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvbnQgaW5jbHVkZSB0YXJnZXQgQ0ZMQUdTIGluIGhvc3QgTERGTEFHUworCitCdWlsZGluZyB0aGUgaG9zdCB0b29sICdta2J1aWx0aW5zJyB3aWxsIGZhaWwgaWYgdGhlIHRhcmdldCBDRkxBR1MKK2NvbnRhaW5zIGFuIG9wdGlvbiB3aGljaCBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QncyBnY2MuIFRvIHByZXZlbnQKK3RoZSBpc3N1ZSwgZGVmaW5lIExERkxBR1NfRk9SX0JVSUxEIGJhc2VkIG9uIENGTEFHU19GT1JfQlVJTEQgaW5zdGVhZAorb2YgQ0ZMQUdTLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3JlcXVpcmVkIGZvciBiYXNoIDMuMi41NyAoR1BMdjIpIHJlY2lwZSBvbmx5XQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorLS0tCisgYnVpbHRpbnMvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGlucy9NYWtlZmlsZS5pbiBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitpbmRleCBlMDI3ZjdhLi5lYmZkZGYzIDEwMDY0NAorLS0tIGEvYnVpbHRpbnMvTWFrZWZpbGUuaW4KKysrKyBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitAQCAtNjMsNyArNjMsNyBAQCBMT0NBTF9ERUZTID0gQExPQ0FMX0RFRlNACisgCisgTElCUyA9IEBMSUJTQAorIExERkxBR1MgPSBATERGTEFHU0AgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHUykKKy1MREZMQUdTX0ZPUl9CVUlMRCA9ICQoTERGTEFHUykKKytMREZMQUdTX0ZPUl9CVUlMRCA9IEBMREZMQUdTX0ZPUl9CVUlMREAgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpCisgTE9DQUxfTERGTEFHUyA9IEBMT0NBTF9MREZMQUdTQAorICNMSUJTX0ZPUl9CVUlMRCA9IEBMSUJTX0ZPUl9CVUlMREAKKyBMSUJTX0ZPUl9CVUlMRCA9ICQoTElCUykKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyMjlhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorT24gaG9zdHMgd2l0aCBGT1JUSUZZX1NPVVJDRVMsIHN0cmluZ2l6ZSBzdXBwb3J0IGlzIHJlcXVpcmVkLCBhcyBpdCdzIHVzZWQgYnkKK3RoZSBtYWNyb3MgdG8gd3JhcCBmdW5jdGlvbnMgKGUuZy4gcmVhZCBhbmQgb3BlbiBpbiB1bmlzdGQuaCkuIFRob3NlIHdyYXBwZXJzCit1c2UgdGhlIFNUUklORygpIG1hY3JvIGZyb20gdW5pc3RkLmguIEEgaGVhZGVyIGluIHRoZSBiYXNoIHNvdXJjZXMgb3ZlcnJpZGVzCit0aGUgdW5pc3RkLmggbWFjcm8gdG8gJ3gnIHdoZW4gSEFWRV9TVFJJTkdJWkUgaXMgbm90IGRlZmluZWQsIGNhdXNpbmcgdGhlCit3cmFwcGVycyB0byBnZW5lcmF0ZSBjYWxscyB0byAneHJlYWQnIGFuZCAneG9wZW4nLCB3aGljaCBkbyBub3QgZXhpc3QsCityZXN1bHRpbmcgaW4gYSBmYWlsdXJlIHRvIGxpbmsuCisKK0Fzc3VtZSB3ZSBoYXZlIHN0cmluZ2l6ZSBzdXBwb3J0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLCB3aGljaCB3b3JrcyBhcm91bmQgdGhlCitpc3N1ZS4KKworSXQgbWF5IGJlIGJlc3QgZm9yIHVwc3RyZWFtIHRvIGVpdGhlciBnaXZlIHVwIG9uIHN1cHBvcnRpbmcgY29tcGlsZXJzIHdpdGhvdXQKK3N0cmluZ2l6ZSBzdXBwb3J0LCBvciB0byBub3QgZGVmaW5lIFNUUklORygpIGF0IGFsbCB3aGVuIEZPUlRJRllfU09VUkNFUyBpcworZGVmaW5lZCwgbGV0dGluZyB0aGUgdW5pc3RkLmggb25lIGJlIHVzZWQsIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCistLS0gYmFzaC00LjIub3JpZy9idWlsdGlucy9ta2J1aWx0aW5zLmMKKysrKyBiYXNoLTQuMi9idWlsdGlucy9ta2J1aWx0aW5zLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgIyAgZGVmaW5lIEhBVkVfU1RETElCX0gKKworICMgIGRlZmluZSBIQVZFX1JFTkFNRQorKyMgIGRlZmluZSBIQVZFX1NUUklOR0laRQorICNlbmRpZiAvKiBDUk9TU19DT01QSUxJTkcgKi8KKworICNpZiBkZWZpbmVkIChIQVZFX1VOSVNURF9IKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDNiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgVEhJU19TSD0vYmluL2Jhc2ggQlVJTERfRElSPS4gcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC90ZXN0LW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA5YjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2ZjE1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiQW4gc2gtY29tcGF0aWJsZSBjb21tYW5kIGxhbmd1YWdlIGludGVycHJldGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9iYXNoL2Jhc2h0b3AuaHRtbCIKK1NFQ1RJT04gPSAiYmFzZS9zaGVsbCIKKworREVQRU5EUyA9ICJuY3Vyc2VzIGJpc29uLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtam9iLWNvbnRyb2wiCisKKyMgSWYgTk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyBpcyBkZWZpbmVkLCBhbGwgbG9naW4gc2hlbGxzIHJlYWQgdGhlCisjIHN0YXJ0dXAgZmlsZXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGludGVyYWN0aXZlLgorIyBUaGlzIGlzIHdoYXQgb3RoZXIgbWFqb3IgZGlzdHJvcyBkby4gQW5kIHRoaXMgaXMgd2hhdCB3ZSB3YW50ZWQuIFNlZSBidWcjNTM1OSBhbmQgYnVnIzcxMzcuCitDRkxBR1MgKz0gIi1ETk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2giCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2hdID0gIiR7YmFzZV9iaW5kaXJ9L3NoIgorQUxURVJOQVRJVkVfVEFSR0VUW3NoXSA9ICIke2Jhc2VfYmluZGlyfS9iYXNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitSREVQRU5EU18ke1BOfSArPSAiYmFzZS1maWxlcyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCWNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QgKCkgeworCW9lX3J1bm1ha2UgYnVpbGR0ZXN0Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1vdmUgL3Vzci9iaW4vYmFzaCB0byAvYmluL2Jhc2gsIGlmIG5lZWQKKwlpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorCQlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJbXYgJHtEfSR7YmluZGlyfS9iYXNoICR7RH0ke2Jhc2VfYmluZGlyfQorCWZpCit9Citkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGJhc2hidWcKKwlzZWQgLWkgLWUgInMsJHtTVEFHSU5HX0RJUl9UQVJHRVR9LCxnIiAke0R9JHtiaW5kaXJ9L2Jhc2hidWcKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWFrZSBJTlNUQUxMX1RFU1RfRElSPSR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzIGluc3RhbGwtdGVzdAorCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2Jhc2VfYmluZGlyfS9iYXNoJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmFzZV9iaW5kaXJ9L2Jhc2ggPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmFzZV9iaW5kaXJ9L2Jhc2gkIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvYnVpbGQtdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2J1aWxkLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTgxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDI0ICsrKysrKysrKysrKysrKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtODQ4LDIwICs4NDgsMzQgQEAgbWF5YmUtY2xlYW46CisgCWZpCisgCisgcmVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXJlY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAke0xERkxBR1NfRk9SX0JVSUxEfSAtbyAkQCAkKFNVUFBPUlRfU1JDKXJlY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgJHtMREZMQUdTfSAtbyAkQCAkPAorIAorIHplY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQyl6ZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl6ZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyB4Y2FzZSQoRVhFRVhUKToJJChTVVBQT1JUX1NSQyl4Y2FzZS5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl4Y2FzZS5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKy10ZXN0IHRlc3RzIGNoZWNrOglmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKyt0ZXN0IHRlc3RzIGNoZWNrOgorKwlAJChNQUtFKSBpbnN0YWxsLXRlc3QKKysJQCQoTUFLRSkgcnVudGVzdAorKworK2luc3RhbGwtdGVzdDogYnVpbGR0ZXN0CisraWZlcSAoJChvcmlnaW4gSU5TVEFMTF9URVNUX0RJUiksIHVuZGVmaW5lZCkKKyAJQC10ZXN0IC1kIHRlc3RzIHx8IG1rZGlyIHRlc3RzCisgCUBjcCAkKFRFU1RTX1NVUFBPUlQpIHRlc3RzCisrZWxzZQorKwlALXRlc3QgLWQgJChJTlNUQUxMX1RFU1RfRElSKSB8fCBta2RpciAtcCAkKElOU1RBTExfVEVTVF9ESVIpCisrCUBjcCAtciAkKHNyY2RpcikvdGVzdHMvKiAkKElOU1RBTExfVEVTVF9ESVIpLworKwlAY3AgJChURVNUU19TVVBQT1JUKSAkKElOU1RBTExfVEVTVF9ESVIpCisrZW5kaWYKKysKKytidWlsZHRlc3Q6IGZvcmNlICQoUHJvZ3JhbSkgJChURVNUU19TVVBQT1JUKQorKworK3J1bnRlc3Q6CisgCUAoIGNkICQoc3JjZGlyKS90ZXN0cyAmJiBcCisgCQlQQVRIPSQoQlVJTERfRElSKS90ZXN0czokJFBBVEggVEhJU19TSD0kKFRISVNfU0gpICQoU0hFTEwpICR7VEVTVFNDUklQVH0gKQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZXhlY3V0ZV9jbWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2V4ZWN1dGVfY21kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjhmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2V4ZWN1dGVfY21kLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKy0tLSBleGVjdXRlX2NtZC5jLm9yaWcJRnJpIEp1biAgMyAxMzozNDo0MiAyMDExCisrKysgZXhlY3V0ZV9jbWQuYwlGcmkgSnVuICAzIDEzOjM2OjQxIDIwMTEKK0BAIC0yMjAyLDcgKzIyMDIsMTEgQEAKKyAgIC8qIElmIHRoZSBgbGFzdHBpcGUnIG9wdGlvbiBpcyBzZXQgd2l0aCBzaG9wdCwgYW5kIGpvYiBjb250cm9sIGlzIG5vdAorICAgICAgZW5hYmxlZCwgZXhlY3V0ZSB0aGUgbGFzdCBlbGVtZW50IG9mIG5vbi1hc3luYyBwaXBlbGluZXMgaW4gdGhlCisgICAgICBjdXJyZW50IHNoZWxsIGVudmlyb25tZW50LiAqLworLSAgaWYgKGxhc3RwaXBlX29wdCAmJiBqb2JfY29udHJvbCA9PSAwICYmIGFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisrICBpZiAobGFzdHBpcGVfb3B0ICYmIAorKyNpZiBkZWZpbmVkKEpPQl9DT05UUk9MKQorKwkJam9iX2NvbnRyb2wgPT0gMCAmJiAKKysjZW5kaWYKKysJCWFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisgICAgIHsKKyAgICAgICBsc3RkaW4gPSBtb3ZlX3RvX2hpZ2hfZmQgKDAsIDAsIDI1NSk7CisgICAgICAgaWYgKGxzdGRpbiA+IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzOTFkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPbiBob3N0cyB3aXRoIEZPUlRJRllfU09VUkNFUywgc3RyaW5naXplIHN1cHBvcnQgaXMgcmVxdWlyZWQsIGFzIGl0J3MgdXNlZCBieQordGhlIG1hY3JvcyB0byB3cmFwIGZ1bmN0aW9ucyAoZS5nLiByZWFkIGFuZCBvcGVuIGluIHVuaXN0ZC5oKS4gVGhvc2Ugd3JhcHBlcnMKK3VzZSB0aGUgU1RSSU5HKCkgbWFjcm8gZnJvbSB1bmlzdGQuaC4gQSBoZWFkZXIgaW4gdGhlIGJhc2ggc291cmNlcyBvdmVycmlkZXMKK3RoZSB1bmlzdGQuaCBtYWNybyB0byAneCcgd2hlbiBIQVZFX1NUUklOR0laRSBpcyBub3QgZGVmaW5lZCwgY2F1c2luZyB0aGUKK3dyYXBwZXJzIHRvIGdlbmVyYXRlIGNhbGxzIHRvICd4cmVhZCcgYW5kICd4b3BlbicsIHdoaWNoIGRvIG5vdCBleGlzdCwKK3Jlc3VsdGluZyBpbiBhIGZhaWx1cmUgdG8gbGluay4KKworQXNzdW1lIHdlIGhhdmUgc3RyaW5naXplIHN1cHBvcnQgd2hlbiBjcm9zcy1jb21waWxpbmcsIHdoaWNoIHdvcmtzIGFyb3VuZCB0aGUKK2lzc3VlLgorCitJdCBtYXkgYmUgYmVzdCBmb3IgdXBzdHJlYW0gdG8gZWl0aGVyIGdpdmUgdXAgb24gc3VwcG9ydGluZyBjb21waWxlcnMgd2l0aG91dAorc3RyaW5naXplIHN1cHBvcnQsIG9yIHRvIG5vdCBkZWZpbmUgU1RSSU5HKCkgYXQgYWxsIHdoZW4gRk9SVElGWV9TT1VSQ0VTIGlzCitkZWZpbmVkLCBsZXR0aW5nIHRoZSB1bmlzdGQuaCBvbmUgYmUgdXNlZCwgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBiYXNoLTQuMi5vcmlnL2J1aWx0aW5zL21rYnVpbHRpbnMuYworKysrIGJhc2gtNC4yL2J1aWx0aW5zL21rYnVpbHRpbnMuYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjICBkZWZpbmUgSEFWRV9TVERMSUJfSAorCisgIyAgZGVmaW5lIEhBVkVfUkVOQU1FCisrIyAgZGVmaW5lIEhBVkVfU1RSSU5HSVpFCisgI2VuZGlmIC8qIENST1NTX0NPTVBJTElORyAqLworCisgI2lmIGRlZmluZWQgKEhBVkVfVU5JU1REX0gpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjgxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBUSElTX1NIPS9iaW4vYmFzaCBCVUlMRF9ESVI9LiBzcmNkaXI9LiAgcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvdGVzdC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwOWI3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF8zLjIuNDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyYjI5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiCkBAIC0wLDAgKzEsNDYgQEAKK3JlcXVpcmUgYmFzaC5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDVkOWJjYWJkOGVkNWE1NGEwMWNlOGQxODNkNTkyYSIKKworUFIgPSAicjExIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmFzaC9iYXNoLSR7UFZ9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDQ5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0OSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTA7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUwIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1MTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTEgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUyO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTM7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUzIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NDthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTQgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDU1O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1NSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTY7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU2IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTcgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjMzOGRjZjk3NWE5MzY0MGJiM2VhYTg0M2NhNDJlM2Y4IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMTI4ZDI4MWJkNTY4MmJhNWY2OTUzMTIyOTE1ZGE3MTk3NjM1N2Q3YTc2NDkwZDI2NmM5MTczYjFkMDQyNjM0OCIKK1NSQ19VUklbcGF0Y2gwNDkubWQ1c3VtXSA9ICJhZjU3MWEyZDE2NGQ1YWJkY2FlNDQ5OWU5NGU4ODkyYyIKK1NSQ19VUklbcGF0Y2gwNDkuc2hhMjU2c3VtXSA9ICJiMTIxN2VkOTRiZGI5NWRjODc4ZmE1Y2FiYmY4YTE2NDQzNWViMGQ5ZGEyM2EzOTIxOThmNDg1NjZlZTM0YTJmIgorU1JDX1VSSVtwYXRjaDA1MC5tZDVzdW1dID0gIjg0NDNkNDM4NWQ3M2VjODM1YWJlNDAxZDkwNTkxMzc3IgorU1JDX1VSSVtwYXRjaDA1MC5zaGEyNTZzdW1dID0gIjA4MWJiMDNjNTgwZWNlZTYzYmEwM2I0MGJlYjNjYWY1MDllY2EyOTUxNWIyZThkZDNjMDc4NTAzNjA5YTE2NDIiCitTUkNfVVJJW3BhdGNoMDUxLm1kNXN1bV0gPSAiMTVjNjY1MzA0MmU5ODE0YWE4NzEyMDA5OGZjN2E4NDkiCitTUkNfVVJJW3BhdGNoMDUxLnNoYTI1NnN1bV0gPSAiMzU0ODg2MDk3Y2Q5NWI0ZGVmNzcwMjhmMzJlZTAxZTJlMDg4ZDU4YTk4MTg0ZmVkZTlkM2NlOTMyMGUyMThlZiIKK1NSQ19VUklbcGF0Y2gwNTIubWQ1c3VtXSA9ICI2OTEwMjNhOTQ0YmJiOTAwM2NjOTJhZDQ2MmQ5MWZhMSIKK1NSQ19VUklbcGF0Y2gwNTIuc2hhMjU2c3VtXSA9ICJhMGVjY2Y5Y2VkYTUwODcxZGIxMGQyMWVmZGQ3NGI5OWUzNWVmYmQ1NWM5NzBjNDAwZWVhZGUwMTI4MTZiYjYxIgorU1JDX1VSSVtwYXRjaDA1My5tZDVzdW1dID0gImViOTdkMWM5MjMwYTU1MjgzZDlkYWM2OWQzZGUyZTQ2IgorU1JDX1VSSVtwYXRjaDA1My5zaGEyNTZzdW1dID0gImZlNmYwZTk2ZTBiOTY2ZWFlZDlmYjVlOTMwY2ExMjg5MWY0MzgwZjMwZjllMGE3NzNkMjAwZmYyMDYzYTg2NGUiCitTUkNfVVJJW3BhdGNoMDU0Lm1kNXN1bV0gPSAiMTEwNzc0NDA1OGM0M2IyNDdmNTk3NTg0Yjg4YmEwYTYiCitTUkNfVVJJW3BhdGNoMDU0LnNoYTI1NnN1bV0gPSAiYzZkYWI5MTFlODU2ODhjNTQyY2U3NWFmYzE3NWRiYjRlNTAxMWRlNTEwMjc1OGUxOWE0YTgwZGFjMWU3OTM1OSIKK1NSQ19VUklbcGF0Y2gwNTUubWQ1c3VtXSA9ICIwNWQyMDExNzZkMzQ5OWUyZGZhNGE3M2QwOWQ0MmYwNSIKK1NSQ19VUklbcGF0Y2gwNTUuc2hhMjU2c3VtXSA9ICJjMGU4MTY3MDA4Mzc5NDJlZDU0OGRhNzRlNTkxN2Y3NGI3MGNiYmJiMTBjOWYyY2FmNzNlOGUwNmEwNzEzZDBhIgorU1JDX1VSSVtwYXRjaDA1Ni5tZDVzdW1dID0gIjIyMmVhYTNhMmMyNmY1NGExNWFhNWUwODgxN2E1MzRhIgorU1JDX1VSSVtwYXRjaDA1Ni5zaGEyNTZzdW1dID0gIjA2M2E4ZDhkNzRlNDQwN2JmMDdhMzJiOTY1YjhlZjZkMjEzYTY2YWJkYjZhZjI2Y2MzNTg0YTQzN2E1NmJiYjQiCitTUkNfVVJJW3BhdGNoMDU3Lm1kNXN1bV0gPSAiNDdkOThlM2UwNDI4OTI0OTVjNWVmZTU0ZWM2ZTU5MTMiCitTUkNfVVJJW3BhdGNoMDU3LnNoYTI1NnN1bV0gPSAiNWZjNjg5Mzk0ZDUxNTk5MGY1ZWE3NGUyZGY3NjVmYzZlNWU0MmNhNDRiNDU5MWIyYzZmOWJlNGIwY2FkZjBmMCIKKworUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfNC4zLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWU2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgpAQCAtMCwwICsxLDQ2IEBACityZXF1aXJlIGJhc2guaW5jCisKKyMgR1BMdjIrICg8IDQuMCksIEdQTHYzKyAoPj0gNC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvJHtCUH0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDMxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDMzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzMyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM3IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzODthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzggXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzOSBcCisgICAgICAgICAgIGZpbGU6Ly9leGVjdXRlX2NtZC5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImEyN2IzZWU5YmU4M2JkM2JhNDQ4YzBmZjUyYjI4NDQ3IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMzE3ODgxMDE5YmJmMjI2MmZiODE0YjdkZDhlNDA2MzJkMTNjMzYwOGQyZjIzNzgwMGE4ODI4ZmJiOGE2NDBkZCIKKworU1JDX1VSSVtwYXRjaDAzMS5tZDVzdW1dID0gIjIzNmRmMWFjMTEzMGEwMzNlZDBkYmUyZDIxMTVmMjhmIgorU1JDX1VSSVtwYXRjaDAzMS5zaGEyNTZzdW1dID0gImNkNTI5ZjU5ZGQwZjJmZGQ0OWQ2MTlmZTM0NjkxZGE2ZjBhZmZlZGY4N2NjMzdjZDQ2MGE5ZjNmZTgxMmE2MWQiCitTUkNfVVJJW3BhdGNoMDMyLm1kNXN1bV0gPSAiMjM2MGY3ZTc5Y2ZiMjg1MjZmODAwMjEwMjVlYTU5MDkiCitTUkNfVVJJW3BhdGNoMDMyLnNoYTI1NnN1bV0gPSAiODg5MzU3ZDI5YTYwMDViMmMzMzA4Y2E1YjYyODZjYjIyM2I1ZTljMDgzMjE5ZTVkYjMxNTYyODJkZDU1NGY0YSIKK1NSQ19VUklbcGF0Y2gwMzMubWQ1c3VtXSA9ICJiNTUxYzRlZTdiODcxMzc1OWU0MTQzNDk5ZDBiYmQ0OCIKK1NSQ19VUklbcGF0Y2gwMzMuc2hhMjU2c3VtXSA9ICJmYjJhNzc4N2ExM2ZiZTAyN2E3MzM1YWNhNmViM2MyMWNkYmQ4MTNlOWVkYzIyMTI3NGI2YTlkODY5MmVhYTE2IgorU1JDX1VSSVtwYXRjaDAzNC5tZDVzdW1dID0gImM5YTU2ZmJlMDM0OGUwNWE4ODZkZmY5N2YyODcyYjc0IgorU1JDX1VSSVtwYXRjaDAzNC5zaGEyNTZzdW1dID0gImYxNjk0ZjA0ZjExMGRlZmUxMzMwYTg1MWNjMjc2OGU3ZTU3ZGRkMmRmZGIwZTNlMzUwY2EwZTNjMjE0ZmY4ODkiCitTUkNfVVJJW3BhdGNoMDM1Lm1kNXN1bV0gPSAiZTU2NGU4YWI0NGVkMWNhM2E0ZTMxNWE5ZjZjYWJkYzkiCitTUkNfVVJJW3BhdGNoMDM1LnNoYTI1NnN1bV0gPSAiMzcwZDg1ZTUxNzgwMDM2ZjIzODZkYzE4YzVlZmU5OTZlYmE4ZTY1MmZjMTk3M2YwZjRmMmFiNTVhOTkzYzFlMyIKK1NSQ19VUklbcGF0Y2gwMzYubWQ1c3VtXSA9ICJiMDBmZjY2YzQxYTdjMGYwNmUxOTEyMDA5ODE5ODBiMCIKK1NSQ19VUklbcGF0Y2gwMzYuc2hhMjU2c3VtXSA9ICJhYzVmODI0NDViMzZlZmRiNTQzZGJmYWU2NGFmZWQ2M2Y1ODZkNzU3NGI4MzNlOWFhOWNkNTE3MGJjNWZkMjdjIgorU1JDX1VSSVtwYXRjaDAzNy5tZDVzdW1dID0gImJlMmE3YjA1ZjZhZTU2MDMxM2YzYzlkNWY3MTI3YmRhIgorU1JDX1VSSVtwYXRjaDAzNy5zaGEyNTZzdW1dID0gIjMzZjE3MGRkNzQwMGFiMzQxOGQ3NDljNTVjNjM5MWIxZDE2MWVmMmRlN2FjZWQxODczNDUxYjNhM2ZjYTU4MTMiCitTUkNfVVJJW3BhdGNoMDM4Lm1kNXN1bV0gPSAiNjFlMDUyMjgzMGIyNGZiZThjMGQxYjAxMGYxMzI0NzAiCitTUkNfVVJJW3BhdGNoMDM4LnNoYTI1NnN1bV0gPSAiYWRiZWFhNTAwY2E3YTgyNTM1ZjBlODhkNjczNjYxOTYzZjhhNWZjZGM3YWQ2MzQ0NWU2OGJmNWI0OTc4NjM2NyIKK1NSQ19VUklbcGF0Y2gwMzkubWQ1c3VtXSA9ICJhNDc3NTQ4N2FiZTk1ODUzNjc1MWM4Y2U1M2NkZjZmOSIKK1NSQ19VUklbcGF0Y2gwMzkuc2hhMjU2c3VtXSA9ICJhYjk0ZGNlZDIyMTU1NDEwOTc2OTFmNjBjM2ViMzIzY2MyOGVmMjU0OTQ2M2U2YTUzMzRiYmNjMWU2MWU3NGVjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2JjL2JjXzEuMDYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjOGE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQXJiaXRyYXJ5IHByZWNpc2lvbiBjYWxjdWxhdG9yIGxhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JjL2JjLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmMvYmNkZWZzLmg7ZW5kbGluZT0zMTttZDU9NDZkZmZkYWYxMGE5OTcyOGRkOGNlMzU4ZTQ1ZDQ2ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGMvZGMuaDtlbmRsaW5lPTI1O21kNT0yZjljNTU4Y2RkODBlMzFiNGQ5MDRlNDhjMjM3NDMyOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvbnVtYmVyLmM7ZW5kbGluZT0zMTttZDU9OTk0MzRhMDg5OGFiY2E3Nzg0YWNmZDM2YjgxOTExOTkiCisKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiZmxleCIKK1BSID0gInIzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmMvYmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWdtZW50LWZhdWx0LnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0NGI1ZGRkZWJkOGE3YTczMDlhZWE2YzM2ZmRhMTE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlZjZkOWYxN2MzYzBkOTJkODc5OGUzNTY2NjE3NWVjZDNkOGVmYWM0MDA5ZDY0NTdiNWM5OWNlYTcyYzBlMzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJkYyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjMGRhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9maWxlcy9maXgtc2VnbWVudC1mYXVsdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKword2hlbiBydW4gY29tbWFuZCBzdWNoIGFzICdlY2hvICJhID0gMTMiIHwgYmMgLWwnLCBpdCBzZWdtZW50YXRpb24gZmF1bHRzLgorVGhpcyBwYXRjaCBpcyBmcm9tIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9ibGZzLXN1cHBvcnRAbGludXhmcm9tc2NyYXRjaC5vcmcvbXNnMDQ2MDIuaHRtbC4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBiYy0xLjA2L2xpYi9udW1iZXIuYy5vcmlnCTIwMDMtMDktMjYgMjE6MTQ6MDIuMDAwMDAwMDAwICswMDAwCisrKysgYmMtMS4wNi9saWIvbnVtYmVyLmMJMjAwMy0wOS0yNiAyMToxNDoyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zNCw2ICszNCw3IEBACisgI2luY2x1ZGUgPG51bWJlci5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxjdHlwZS5oPi8qIFByb3RvdHlwZXMgbmVlZGVkIGZvciBleHRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLiAqLworIAorICNkZWZpbmUgYmNfcnRfd2FybiBydF93YXJuCistLS0gYmMtMS4wNi9iYy9sb2FkLmMub3JpZwkyMDAzLTA5LTI2IDIxOjE0OjE0LjAwMDAwMDAwMCArMDAwMAorKysrIGJjLTEuMDYvYmMvbG9hZC5jCTIwMDMtMDktMjYgMjE6MTQ6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtMTU2LDcgKzE1Niw3IEBACisgICBsb25nICBsYWJlbF9ubzsKKyAgIGxvbmcgIHZhZl9uYW1lOwkvKiB2YXJpYWJsZSwgYXJyYXkgb3IgZnVuY3Rpb24gbnVtYmVyLiAqLworICAgbG9uZyAgZnVuYzsKKy0gIHByb2dyYW1fY291bnRlciBzYXZlX2FkcjsKKysgIHN0YXRpYyBwcm9ncmFtX2NvdW50ZXIgc2F2ZV9hZHI7CisgCisgICAvKiBJbml0aWFsaXplLiAqLworICAgc3RyID0gY29kZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWUzNjhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOWNiMTY2N2Y5ZDNhOWJjZmMzYjgzNDY2Y2Q4ZDNiNzlmMDU1NGZmMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgOCBKdWwgMjAxNSAwMTozNzowOSArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gZml4IHR5cG9zIGluIG1hbnBhZ2UKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQtNy5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGJsa3Rvb2wuOCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLjggYi9ibGt0b29sLjgKK2luZGV4IGExZjVjOTYuLjQ1Yjc3MjQgMTAwNjQ0CistLS0gYS9ibGt0b29sLjgKKysrKyBiL2Jsa3Rvb2wuOAorQEAgLTE5MSw3ICsxOTEsNyBAQCBRdWVyeSBvciBzZXQgZGV2aWNlIGJ1cyBzdGF0ZSAoMCBvZmYsIDEgb24sIDIgdHJpc3RhdGUpCisgUXVlcnkgdGhlIGRldGVjdGVkIChvciBvdmVycmlkZGVuLCB2aWEgLXQpIGRldmljZSBjbGFzcy4KKyBUeXBpY2FsbHkgdGhpcyB3aWxsIHJlc3VsdCBpbiAnQVRBJyBvciAnU0NTSScgZm9yIG1vc3QgZGV2aWNlcy4KKyBEZXRlY3Rpb24gaXMgYmFzZWQgb24gZGV2aWNlIG1ham9yOyB0aHVzIHlvdXIgU0FUQSBkZXZpY2UgbWF5IGFwcGVhciBhcworLSdTQ1NJJy4KKytcJidTQ1NJJy4KKyAKKyAuVFAKKyAuQiBjZC1zcGVlZAorQEAgLTIzNyw3ICsyMzcsNyBAQCBPbWl0dGluZyB0aGUgb24vb2ZmIGFyZ3VtZW50IHdpbGwgcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUuCisgCisgLlRQCisgLkIgbWVkaWEKKy1Mb2NrIGluIChvciB1bmxvY2spIGEgcmVtb3ZlYWJsZSBkZXZpY2UuCisrTG9jayBpbiAob3IgdW5sb2NrKSBhIHJlbW92YWJsZSBkZXZpY2UuCisgCisgLlRQCisgLkIgbXVsdGlwbGUtY291bnQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sLzAwMDItZml4LXN0cmluZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhhYmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBkZGIxMDcxZGEyYzc4ZDgxNTVhYWI2MmU5ZjBkNDZmNjk1MDAyMDBmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXphdCBLaHV6aGluIDxhM2F0Lm1haWxAZ21haWwuY29tPgorRGF0ZTogV2VkLCA4IEp1bCAyMDE1IDAxOjQyOjI0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBmaXggc3RyaW5nIGVycm9yCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyB1dGlsLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMKK2luZGV4IDFmM2E5Y2EuLjJjY2Y1NmEgMTAwNjQ0CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTI4LDcgKzI4LDcgQEAgdm9pZCBwZGllKGNvbnN0IGNoYXIgKm1zZywgaW50IHBlcnIpCisgCWlmIChwZXJyKQorIAkJcGVycm9yKG1zZyk7CisgCWVsc2UKKy0JCWZwcmludGYoc3RkZXJyLCBtc2cpOworKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIG1zZyk7CisgCWlmIChibGtkZXYgPj0gMCkKKyAJCWNsb3NlKGJsa2Rldik7CisgCWV4aXQoMSk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2VkMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoCkBAIC0wLDAgKzEsNzggQEAKK0Zyb20gNjhmYWE2M2FhYWQ4MWY0YTI4OWU0YTAzMTczYWI0Y2Y3OThkZWI1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMSBOb3YgMjAxNCAyMjoyNDozMiArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gRml4IDMtZCBhcmd1bWVudCBmb3IgQkxLUk9TRVQgaXQgbXVzdCBiZSAnY29uc3QgaW50IConCisKK01vc3Qgb2YgKlNFVCBpb2N0bHMgaGF2ZSBpbnQgdHlwZSBmb3IgMy1kIGFyZ3VtZW50LCBleGNlcHQgQkxLUk9TRVQuCitTbyBhZGQgYmNfYXJnX3R5cGUgZW51bSwgYnVpbGQgaXQgaW50byBib29sX2NvbWFuZCBhbmQgaW5zdGFsbCBhcmdfdHlwZQordG8gYmNfYXJnX2ludF9wdHIgZm9yIEJMS1JPU0VUIG9ubHkuCisKK0RlYmlhbi1idWctaWQ6IDY0MTE2NAorTGluazogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNjQxMTY0CisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyBibGt0b29sLmMgfCAxMSArKysrKysrKystLQorIGJsa3Rvb2wuaCB8ICA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLmMgYi9ibGt0b29sLmMKK2luZGV4IGZiZWZlY2QuLjIyMWExOTUgMTAwNjQ0CistLS0gYS9ibGt0b29sLmMKKysrKyBiL2Jsa3Rvb2wuYworQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHN0cnVjdCBib29sX2NvbW1hbmQgYm9vbF9jbWRfdGJsW10gPSB7CisgCXsgeyBERUZfQk9PTCgicGlvLWRhdGEiKSwgZGNfYXRhLCBERUZfSERJTygzMkJJVCkgfSwKKyAJICAiMTYtYml0IiwgIjMyLWJpdCIgfSwKKyAJeyB7IERFRl9CT09MKCJyZWFkb25seSIpLCBkY19hbnksIElPQ05BTUUoQkxLUk9HRVQpLCBJT0NOQU1FKEJMS1JPU0VUKSB9LAorLQkgIERFRl9CT09MU1RSIH0sCisrCSAgREVGX0JPT0xTVFIsIGJjX2FyZ19pbnRfcHRyIH0sCisgCXsgeyBERUZfQk9PTCgidW5tYXNrLWlycSIpLCBkY19hdGEsIERFRl9IRElPKFVOTUFTS0lOVFIpIH0sCisgCSAgREVGX0JPT0xTVFIgfSwKKyAJeyB7ICJ3Y2FjaGUiLCBjdF9ib29sLCBoYW5kbGVfd2NhY2hlLCBkY19hbnksCitAQCAtMTcxLDcgKzE3MSwxNCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYm9vbChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBjb21tYW5kICpjbWQpCisgCisgCX0gZWxzZSBpZiAoKGFyZ2MgPT0gNCkgJiYgKGNtZC0+d3JpdGVfaW9jdGxfbmFtZSAhPSBOVUxMKSkgeworIAkJZG9fMzIgPSBwYXJzZV9ib29sKGFyZ2MsIGFyZ3YsIGJjbSk7CistCQlpZiAoaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMikpCisrCQkKKysJCWludCByZXQ7CisrCQlpZiAoYmNtLT5hcmdfdHlwZSA9PSBiY19hcmdfaW50X3B0cikgeworKwkJCXJldCA9IGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgJmRvXzMyKTsKKysJCX0gZWxzZSB7CisrCQkJcmV0ID0gaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMik7CisrCQl9CisrCQlpZiAocmV0KQorIAkJCXBkaWUoY21kLT53cml0ZV9pb2N0bF9uYW1lLCAxKTsKKyAJfQorIAllbHNlIHsKK2RpZmYgLS1naXQgYS9ibGt0b29sLmggYi9ibGt0b29sLmgKK2luZGV4IGZjZTQzODcuLjg1YWRkODMgMTAwNjQ0CistLS0gYS9ibGt0b29sLmgKKysrKyBiL2Jsa3Rvb2wuaAorQEAgLTg1LDExICs4NSwxOCBAQCBzdHJ1Y3QgY29tbWFuZCB7CisgCWNvbnN0IGNoYXIJCSp3cml0ZV9pb2N0bF9uYW1lOworIH07CisgCisrZW51bSBiY19hcmdfdHlwZSB7CisrCWJjX2FyZ19pbnQsCisrCWJjX2FyZ19pbnRfcHRyLAorK307CisrCisgc3RydWN0IGJvb2xfY29tbWFuZCB7CisgCXN0cnVjdCBjb21tYW5kCQljbWQ7CisgCisgCWNvbnN0IGNoYXIJCSpzdHJfZmFsc2U7CisgCWNvbnN0IGNoYXIJCSpzdHJfdHJ1ZTsKKysKKysJZW51bSBiY19hcmdfdHlwZSBhcmdfdHlwZTsKKyB9OworIAorIHN0cnVjdCBjbGFzc19vcGVyYXRpb25zIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sXzQtNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzkxOTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJUdW5lIGxvdy1sZXZlbCBibG9jayBkZXZpY2UgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImJsa3Rvb2wgaXMgdXNlZCBmb3IgcXVlcnlpbmcgYW5kL29yIGNoYW5naW5nIHNldHRpbmdzIFwKK29mIGEgYmxvY2sgZGV2aWNlLiBJdCBpcyBsaWtlIGhkcGFybSBidXQgYSBtb3JlIGdlbmVyYWwgdG9vbCwgYXMgaXQgXAord29ya3Mgb24gU0NTSSwgSURFIGFuZCBTQVRBIGRldmljZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvdW5zdGFibGUvYWRtaW4vYmxrdG9vbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmxrdG9vbC5jO2JlZ2lubGluZT03O2VuZGxpbmU9ODttZDU9YTVlNzk4ZWE5OGZkNTA5NzIwODg5NjhhMTVlNWYzNzMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LXR5cG9zLWluLW1hbnBhZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRml4LTMtZC1hcmd1bWVudC1mb3ItQkxLUk9TRVQtaXQtbXVzdC1iZS1jb25zdC1pbnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNjJlZGMwOWM5OTA4MTA3ZTY5MzkxYzg3ZjRmM2ZkNDAiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJiMWU2ZDU5MTI1NDZkMmE0YjcwNGVjNjVjMmI5NjY0YWEzYjQ2NjNlN2Q4MDBlMDY4MDMzMzAzMzVhMmNiNzY0IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LTQub3JpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY4ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkJlcmtlbGV5IExBTFIgWWFjYyBwYXJzZXIgZ2VuZXJhdG9yIgorREVTQ1JJUFRJT04gPSAiQSBwYXJzZXIgZ2VuZXJhdG9yIHV0aWxpdHkgdGhhdCByZWFkcyBhIGdyYW1tYXIgc3BlY2lmaWNhdGlvbiBmcm9tIGEgZmlsZSBhbmQgZ2VuZXJhdGVzIGFuIExSKDEpIFwKK3BhcnNlciBmb3IgaXQuICBUaGUgcGFyc2VycyBjb25zaXN0IG9mIGEgc2V0IG9mIExBTFIoMSkgcGFyc2luZyB0YWJsZXMgYW5kIGEgZHJpdmVyIHJvdXRpbmUgd3JpdHRlbiBpbiB0aGUgQyBcCitwcm9ncmFtbWluZyBsYW5ndWFnZS4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJQRCIKKworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9ieWFjYy9ieWFjYy0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYnlhY2Mtb3Blbi5wYXRjaCIKKworRVhUUkFfT0VDT05GICs9ICItLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9J3MsXixiLCciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmUoKSB7CisJaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfQorCWluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9CisJb2VfcnVuY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MvYnlhY2Mtb3Blbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYwNTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworaW5kZXggNjIwY2UzZi4uODIwNzFhNCAxMDA2NDQKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtNTI2LDcgKzUyNiw3IEBAIG15X21rc3RlbXAoY2hhciAqdGVtcCkKKyAgICAgfQorICAgICBpZiAoKG5hbWUgPSB0ZW1wbmFtKGRuYW1lLCBmbmFtZSkpICE9IDApCisgICAgIHsKKy0JZmQgPSBvcGVuKG5hbWUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IpOworKyAgICAgIGZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSLCAwNjY2KTsKKyAJc3RyY3B5KHRlbXAsIG5hbWUpOworICAgICB9CisgICAgIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI1NDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiCkBAIC0wLDAgKzEsMTEgQEAKKyMgU2lnaC4gVGhpcyBpcyBvbmUgb2YgdGhvc2UgcGxhY2VzIHdoZXJlIGV2ZXJ5b25lIGxpY2Vuc2VzIGl0IGRpZmZlcmVudGx5LiBTb21lb25lCisjIGV2ZW4gYXBwbHkgVUNCIHRvIGl0IChGcmVlL05ldC9PcGVuQlNEKS4gVGhlIG1haW50YWluZXIgc3RhdGVzIHRoYXQ6CisjICJJJ3ZlIGZvdW5kIG5vIHJlbGlhYmxlIHNvdXJjZSB3aGljaCBzdGF0ZXMgdGhhdCBieWFjYyBtdXN0IGJlYXIgYSBVQ0IgY29weXJpZ2h0LiIKKyMgU2V0dGluZyB0byBQRCBhcyB0aGlzIGlzIHdoYXQgdGhlIHVwc3RyZWFtIGhhcyBpdCBhcy4KKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BhY2thZ2UvZGViaWFuL2NvcHlyaWdodDttZDU9YzUyZmIyZDFiM2Y3NWIzYjc1MzQ5Mjc4MDdhMWI3MTQiCityZXF1aXJlIGJ5YWNjLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiMjcwMDQwMTAzMDU4M2M0ZTkxNjlhYzdlYTdkMDhkZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzM1NGU0ZWUxNGM0YTFiZjExZTU1ZGRlOTI3NTAxMWQxNDg4N2VmMDY2NDA2YTA4OGI2ZmE1NmNhZjAzOTI0OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE2M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNzEgQEAKKworbGliX0xUTElCUkFSSUVTID0gbGliYnoyLmxhCisKK2xpYmJ6Ml9sYV9TT1VSQ0VTID0gYmxvY2tzb3J0LmMgIFwKKyAgICAgICAgICAgICAgICAgICAgaHVmZm1hbi5jICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY3JjdGFibGUuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgcmFuZHRhYmxlLmMgIFwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3MuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzcy5jIFwKKyAgICAgICAgICAgICAgICAgICAgYnpsaWIuYworCitiaW5fUFJPR1JBTVMgPSBiemlwMiBiemlwMnJlY292ZXIKKworYnppcDJfU09VUkNFUyA9IGJ6aXAyLmMKK2J6aXAyX0xEQUREID0gbGliYnoyLmxhCitiemlwMl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworaW5jbHVkZV9IRUFERVJTID0gYnpsaWIuaAorCitiemlwMnJlY292ZXJfU09VUkNFUyA9IGJ6aXAycmVjb3Zlci5jCitiemlwMnJlY292ZXJfTERBREQgPSBsaWJiejIubGEKK2J6aXAycmVjb3Zlcl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworYmluX1NDUklQVFMgPSBiemdyZXAgYnptb3JlIGJ6ZGlmZgorCittYW5fTUFOUyA9IGJ6aXAyLjEgYnpncmVwLjEgYnptb3JlLjEgYnpkaWZmLjEKK0VYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorCitydW50ZXN0OgorCS4vYnppcDIgLTEgIDwgc2FtcGxlMS5yZWYgPiBzYW1wbGUxLnJiMgorCS4vYnppcDIgLTIgIDwgc2FtcGxlMi5yZWYgPiBzYW1wbGUyLnJiMgorCS4vYnppcDIgLTMgIDwgc2FtcGxlMy5yZWYgPiBzYW1wbGUzLnJiMgorCS4vYnppcDIgLWQgIDwgc2FtcGxlMS5iejIgPiBzYW1wbGUxLnRzdAorCS4vYnppcDIgLWQgIDwgc2FtcGxlMi5iejIgPiBzYW1wbGUyLnRzdAorCS4vYnppcDIgLWRzIDwgc2FtcGxlMy5iejIgPiBzYW1wbGUzLnRzdAorCUBpZiBjbXAgc2FtcGxlMS5iejIgc2FtcGxlMS5yYjI7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMSBjb21wcmVzcyI7IGZpCisJQGlmIGNtcCBzYW1wbGUyLmJ6MiBzYW1wbGUyLnJiMjsgdGhlbiBlY2hvICJQQVNTOiBzYW1wbGUyIGNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTMuYnoyIHNhbXBsZTMucmIyOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTMgY29tcHJlc3MiO1wKKwllbHNlIGVjaG8gIkZBSUw6IHNhbXBsZTMgY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMS50c3Qgc2FtcGxlMS5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUxIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMi50c3Qgc2FtcGxlMi5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMiBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMy50c3Qgc2FtcGxlMy5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMyBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUzIGRlY29tcHJlc3MiOyBmaQorCitpbnN0YWxsLXB0ZXN0OgorCWNwICQoc3JjZGlyKS9NYWtlZmlsZQkJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5iejIJJChERVNURElSKS8KKwlsbiAtcyAkKGJpbmRpcikvYnppcDIJCSQoREVTVERJUikvYnppcDIKKworaW5zdGFsbC1leGVjLWhvb2s6CisJbG4gLXMgJChiaW5kaXIpL2J6aXAyJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnVuemlwMiQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iemlwMiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6Y2F0JChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6Z3JlcCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6ZWdyZXAkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpncmVwJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpmZ3JlcCQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iem1vcmUkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemxlc3MkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpkaWZmJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpjbXAkKEVYRUVYVCkKKworaW5zdGFsbC1kYXRhLWhvb2s6CisJZWNobyAiLnNvIG1hbjEvYnpncmVwLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6ZWdyZXAuMQorCWVjaG8gIi5zbyBtYW4xL2J6Z3JlcC4xIiA+ICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9iemZncmVwLjEKKwllY2hvICIuc28gbWFuMS9iem1vcmUuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpsZXNzLjEKKwllY2hvICIuc28gbWFuMS9iemRpZmYuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpjbXAuMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L2NvbmZpZ3VyZS5hYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZTU3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxNCBAQAorQUNfUFJFUkVRKFsyLjU3XSkKKworQUNfSU5JVChiemlwMiwgMi4wLjUsICwgbGliWHJlbmRlcikKK0FNX0lOSVRfQVVUT01BS0UoZm9yZWlnbikKK0FNX01BSU5UQUlORVJfTU9ERQorCisjQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKworIyBDaGVjayBmb3IgcHJvZ3MKK0FDX1BST0dfQ0MKK0FDX1BST0dfTElCVE9PTAorCitBQ19PVVRQVVQoW01ha2VmaWxlXSkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyMGZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2ZlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJWZXJ5IGhpZ2gtcXVhbGl0eSBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJiemlwMiBjb21wcmVzc2VzIGZpbGVzIHVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2stc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYW5kIFwKK0h1ZmZtYW4gY29kaW5nLiBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkgY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwgXAorTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5iemlwLm9yZy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gImJ6aXAyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTtiZWdpbmxpbmU9ODtlbmRsaW5lPTM3O21kNT00MGQ5ZDFlYjA1NzM2ZDFiZmM4NmNmZGQ5MTA2ZTZiMiIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYnppcC5vcmcvJHtQVn0vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYztzdWJkaXI9JHtCUH0gXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW07c3ViZGlyPSR7QlB9IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwYjUxNmY0NzA0ZDRhN2NiNTBhMWQ5N2U2ZThlMTViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyODQ4ZjM0ZmNkNWQ2Y2Y0N2RlZjAwNDYxZmNiNTI4YTA0ODRkOGVkZWY4MjA4ZDZkMmUyOTA5ZGM2MWQ5Y2QiCisKK1BBQ0tBR0VTID0rICJsaWJiejIiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDIC1mcGljIC1XaW5saW5lIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYnVuemlwMiBiemNhdCIKKworI2luc3RhbGwgYmluYXJpZXMgdG8gYnppcDItbmF0aXZlIHVuZGVyIHN5c3Jvb3QgZm9yIHJlcGxhY2VtZW50LW5hdGl2ZQorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tYmluZGlyPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BOfSIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLWYgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorCXNlZCAtaSAtZSAic3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8IiAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitGSUxFU19saWJiejIgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30iCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlXzEuMy41OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQzNGFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSByZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCisKK1NVTU1BUlkgPSAiJHtTVU1NQVJZX2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXN9IgorREVTQ1JJUFRJT04gPSAiJHtERVNDUklQVElPTl9jaGtjb25maWctYWx0ZXJuYXRpdmVzfSIKK0RFUEVORFMgPSAiIgorUFJPVklERVMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworIyBUaGUgc3lzcm9vdCBicmFuY2ggaXMgMS4zLjU5ICsgc29tZSBnaXQgY29tbWl0cyBmcm9tIG1hc3RlciArIC0tc3lzcm9vdAorIyBzdXBwb3J0IGZvciBhbHRlcm5hdGl2ZXMuCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20va2VyZ290aC9jaGtjb25maWc7YnJhbmNoPXN5c3Jvb3QiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiY2Q0MzdlY2JkODk4NmM4OTQ0NDJmOGZjZTFlMDA2MWUyMGYwNGRlZSIKK1BWID0gIjEuMy41OSske1NSQ1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworIyBXZSB3YW50IG91ciBuYXRpdmUgcmVjaXBlcyB0byBidWlsZCB1c2luZyB0aGUgdGFyZ2V0IHBhdGhzIHJhdGhlciB0aGFuIHBhdGhzCisjIGludG8gdGhlIHN5c3Jvb3QsIGFzIHdlIG1heSB1c2UgdGhlbSB0byBjb25zdHJ1Y3QgdGhlIHJvb3Rmcy4gQXMgc3VjaCwgd2UKKyMgb25seSBhZGp1c3QgdGhlIHBhdGhzIHRvIG1hdGNoIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHRhcmdldCwgbm90IG5hdGl2ZS4KK29iZXlfdmFyaWFibGVzICgpIHsKKwlzZWQgLWkgJ3MsQUxURVJOQVRJVkVTX1JPT1QsT1BLR19PRkZMSU5FX1JPT1QsJyBhbHRlcm5hdGl2ZXMuYworfQorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsdGVybmF0aXZlcworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcyBcCisJICAgICAgICAgICAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzCisKKwlpbnN0YWxsIC1EIC1tIDA3NTUgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vYWx0ZXJuYXRpdmVzCisJaW5zdGFsbCAtRCAtbSAwNjQ0IGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOAorCisJbG4gLXMgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcworCWxuIC1zIGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC91cGRhdGUtYWx0ZXJuYXRpdmVzLjgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2xzYgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODg0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZ18xLjMuNTguYmIKQEAgLTAsMCArMSw2NSBAQAorU1VNTUFSWSA9ICJBIHN5c3RlbSB0b29sIGZvciBtYWludGFpbmluZyB0aGUgL2V0Yy9yYyouZCBoaWVyYXJjaHkiCitERVNDUklQVElPTiA9ICJDaGtjb25maWcgaXMgYSBiYXNpYyBzeXN0ZW0gdXRpbGl0eS4gIEl0IHVwZGF0ZXMgYW5kIHF1ZXJpZXMgcnVubGV2ZWwgXAoraW5mb3JtYXRpb24gZm9yIHN5c3RlbSBzZXJ2aWNlcy4gIENoa2NvbmZpZyBtYW5pcHVsYXRlcyB0aGUgbnVtZXJvdXMgXAorc3ltYm9saWMgbGlua3MgaW4gL2V0Yy9yYy5kLCB0byByZWxpZXZlIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBvZiBzb21lIFwKK29mIHRoZSBkcnVkZ2VyeSBvZiBtYW51YWxseSBlZGl0aW5nIHRoZSBzeW1ib2xpYyBsaW5rcy4iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMS41IHJlcXVpcmVzIHNlbGludXgiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2MvaC9jaGtjb25maWciCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NTc0YzY5NjVhZTVmNTgzZTU1ODgwZTM5N2ZiYjAxOCIKKworREVQRU5EUyA9ICJsaWJuZXd0IHBvcHQiCitQUk9WSURFUyArPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJodHRwOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL2gvY2hrY29uZmlnLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzIwMzljYTY3ZjI3NDlmZTBjMDZlZjdjNmY4ZWUyNDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMThiNDk3ZDI1YjJjYWRhOTU1YzcyODEwZTQ1ZmNhZDgyODBkMTA1ZjE3Y2Y0NWUyOTcwZjE4MjcxMjExZGU2OCIKKworaW5oZXJpdCBnZXR0ZXh0CisKKyMgTWFrZWZpbGUgdXNlcyBSUE1fT1BUX0ZMQUdTIHRvIGNvbnN0cnVjdCBDRkxBR1MKKyMKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ1JQTV9PUFRfRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdCSU5ESVI9JHtiYXNlX3NiaW5kaXJ9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisgICAgJ0FMVERJUj0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMnIFwKKyAgICAnQUxUREFUQURJUj0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcycgXAorIgorCitkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAib2JleV92YXJpYWJsZXMiCitkb191bnBhY2tbdmFyZGVwc10gKz0gIm9iZXlfdmFyaWFibGVzIgorb2JleV92YXJpYWJsZXMgKCkgeworCXNlZCAtaSAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sOyBzLC9saWIvc3lzdGVtZCwke2Jhc2VfbGliZGlyfS9zeXN0ZW1kLCcgJHtTfS9sZXZlbGRiLmgKKwlzZWQgLWkgLWUgJ3MsL2V0Yy9hbHRlcm5hdGl2ZXMsJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC92YXIvbGliL2FsdGVybmF0aXZlcywke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC91c3Ivc2hhcmUvbG9jYWxlLCR7ZGF0YWRpcn0vbG9jYWxlLCcgJHtTfS9hbHRlcm5hdGl2ZXMuYworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ0lOU1RBTExOTFNESVI9JHtEfSR7ZGF0YWRpcn0vbG9jYWxlJyBcCisJCSdCSU5ESVI9JHtzYmluZGlyfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY2hrY29uZmlnLmQKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWFsdGVybmF0aXZlcyAke1BOfS1hbHRlcm5hdGl2ZXMtZG9jIgorU1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXMgPSAiTWFpbnRhaW4gc3ltYm9saWMgbGlua3MgZGV0ZXJtaW5pbmcgZGVmYXVsdCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlcyA9ICJhbHRlcm5hdGl2ZXMgY3JlYXRlcywgcmVtb3ZlcywgbWFpbnRhaW5zIGFuZCBkaXNwbGF5cyBcCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ltYm9saWMgbGlua3MgY29tcHJpc2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbS4iCitTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHtTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlc30gLSBEb2N1bWVudGF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlc30gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKK1JQUk9WSURFU18ke1BOfS1hbHRlcm5hdGl2ZXMgKz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMiCitSQ09ORkxJQ1RTXyR7UE59LWFsdGVybmF0aXZlcyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzID0gIiR7c2JpbmRpcn0vYWx0ZXJuYXRpdmVzICR7c2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyBcCisJCQkgICAgJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW44L3VwZGF0ZS1hbHRlcm5hdGl2ZXMuOCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMjEzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGNwaW8tMi4xMS9nbnUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcGlvLTIuMTEub3JpZy9nbnUvTWFrZWZpbGUuYW0KKysrKyBjcGlvLTIuMTEvZ251L01ha2VmaWxlLmFtCitAQCAtNzM0LDcgKzczNCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRhZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorRGVzY3JpcHRpb246IENWRS0yMDE1LTExOTcKKyBBcHBseSBwYXRjaCBieSBWaXRlenNsYXYgQ2l6ZWsgb2YgU3VTRSB0byBmaXggQ1ZFLTIwMTUtMTE5Ny4KKyBVcHN0cmVhbSBpcyBkb3JtYW50IG9yIG5vIGxvbmdlciBleGlzdGluZy4gVG8gcmVzdG9yZSB0aGUgb2xkCisgYmVoYXZpb3VyIHVzZSAtLWV4dHJhY3Qtb3Zlci1zeW1saW5rcyAoQ2xvc2VzOiAjNzc0NjY5KQorIFRoaXMgaXNzdWUgaGFzIGJlZW4gZGlzY292ZXJlZCBieSBBbGV4YW5kZXIgQ2hlcmVwYW5vdi4KK0F1dGhvcjogVml0ZXpzbGF2IENpemVrIDx2Y2l6ZWtAc3VzZS5jej4KK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc3NDY2OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9kb2MvY3Bpby4xCisrKysgY3Bpby0yLjExK2Rmc2cvZG9jL2NwaW8uMQorQEAgLTIyLDYgKzIyLDcgQEAgY3BpbyBcLSBjb3B5IGZpbGVzIHRvIGFuZCBmcm9tIGFyY2hpdmVzCisgW1wtXC1vd25lcj1bdXNlcl1bOi5dW2dyb3VwXV0gW1wtXC1uby1wcmVzZXJ2ZS1vd25lcl0gW1wtXC1tZXNzYWdlPW1lc3NhZ2VdCisgW1wtXC1mb3JjZVwtbG9jYWxdIFtcLVwtbm9cLWFic29sdXRlXC1maWxlbmFtZXNdIFtcLVwtc3BhcnNlXQorIFtcLVwtb25seVwtdmVyaWZ5XC1jcmNdIFtcLVwtdG9cLXN0ZG91dF0gW1wtXC1xdWlldF0gW1wtXC1yc2gtY29tbWFuZD1jb21tYW5kXQorK1tcLVwtZXh0cmFjdFwtb3Zlclwtc3ltbGlua3NdCisgW1wtXC1oZWxwXSBbXC1cLXZlcnNpb25dIFtwYXR0ZXJuLi4uXSBbPCBhcmNoaXZlXQorIAorIC5CIGNwaW8KKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9jb3B5aW4uYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9jb3B5aW4uYworQEAgLTcwMCw2ICs3MDAsNTEgQEAgY29weWluX2xpbmsgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZQorICAgZnJlZSAobGlua19uYW1lKTsKKyB9CisgDAorKworK3N0YXRpYyBpbnQKKytwYXRoX2NvbnRhaW5zX3N5bWxpbmsoY2hhciAqcGF0aCkKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdDsKKysgIGNoYXIgKnNsYXNoOworKyAgY2hhciAqbmV4dHNsYXNoOworKworKyAgLyogd2UgZ290IE5VTEwgcG9pbnRlciBvciBlbXB0eSBzdHJpbmcgKi8KKysgIGlmICghcGF0aCB8fCAhKnBhdGgpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyAgc2xhc2ggPSBwYXRoOworKworKyAgd2hpbGUgKChuZXh0c2xhc2ggPSBzdHJjaHIoc2xhc2ggKyAxLCAnLycpKSAhPSBOVUxMKSB7CisrICAgIHNsYXNoID0gbmV4dHNsYXNoOworKyAgICAqc2xhc2ggPSAnXDAnOworKworKyAgICBpZiAobHN0YXQocGF0aCwgJnN0KSAhPSAwKSB7CisrICAgICAgaWYgKGVycm5vID09IEVMT09QKSB7CisrICAgICAgICAvKiBFTE9PUCAtIHRvbyBtYW55IHN5bWxpbmtzICovCisrICAgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICB9IGVsc2UgaWYgKGVycm5vID09IEVOT01FTSkgeworKyAgICAgICAgLyogTm8gbWVtb3J5IGZvciBsc3RhdCAtIHRlcm1pbmF0ZSAqLworKyAgICAgICAgeGFsbG9jX2RpZSgpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAvKiBjYW5ub3QgbHN0YXQgcGF0aCAtIGdpdmUgdXAgKi8KKysgICAgICAgICpzbGFzaCA9ICcvJzsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKysgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysKKysgICAgKnNsYXNoID0gJy8nOworKyAgfQorKworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNvcHlpbl9maWxlIChzdHJ1Y3QgY3Bpb19maWxlX3N0YXQgKmZpbGVfaGRyLCBpbnQgaW5fZmlsZV9kZXMpCisgeworQEAgLTE0NzEsNiArMTUxNiwyMyBAQCBwcm9jZXNzX2NvcHlfaW4gKCkKKyAJeworIAkgIC8qIENvcHkgdGhlIGlucHV0IGZpbGUgaW50byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS4gICovCisgCisrICAgICAgICAgIC8qIENhbiB3ZSB3cml0ZSBmaWxlcyBvdmVyIHN5bWxpbmtzPyAqLworKyAgICAgICAgICBpZiAoIWV4dHJhY3Rfb3Zlcl9zeW1saW5rcykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAocGF0aF9jb250YWluc19zeW1saW5rKGZpbGVfaGRyLmNfbmFtZSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSBmaWxlICovCisrICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHdyaXRlIG92ZXIgc3ltbGlua3MuIFNraXBwaW5nICVzXG4iLCBmaWxlX2hkci5jX25hbWUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfdG9zc19pbnB1dCAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLmNfZmlsZXNpemUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHIuY19maWxlc2l6ZSk7CisrICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KKysJICAgICAgICAgIGVycm9yICgxLCAwLCBfKCJDYW4ndCB3cml0ZSBvdmVyIHN5bWxpbmtzOiAlc1xuIiksIGZpbGVfaGRyLmNfbmFtZSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisgCSAgLyogRG8gd2UgbmVlZCB0byByZW5hbWUgdGhlIGZpbGU/ICovCisgCSAgaWYgKHJlbmFtZV9mbGFnIHx8IHJlbmFtZV9iYXRjaF9maWxlKQorIAkgICAgeworLS0tIGNwaW8tMi4xMStkZnNnLm9yaWcvc3JjL2V4dGVybi5oCisrKysgY3Bpby0yLjExK2Rmc2cvc3JjL2V4dGVybi5oCitAQCAtOTUsNiArOTUsNyBAQCBleHRlcm4gY2hhciBpbnB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIGlucHV0X2lzX3NlZWthYmxlOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zZWVrYWJsZTsKKytleHRlcm4gYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisgZXh0ZXJuIGludCAoKnhzdGF0KSAoKTsKKyBleHRlcm4gdm9pZCAoKmNvcHlfZnVuY3Rpb24pICgpOworIAwKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9nbG9iYWwuYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9nbG9iYWwuYworQEAgLTE4Nyw2ICsxODcsOSBAQCBib29sIHRvX3N0ZG91dF9vcHRpb24gPSBmYWxzZTsKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAgKi8KKyBjaGFyICpwcm9ncmFtX25hbWU7CisgCisrLyogRXh0cmFjdCBmaWxlcyBvdmVyIHN5bWJvbGljIGxpbmtzICovCisrYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisrCisgLyogQSBwb2ludGVyIHRvIGVpdGhlciBsc3RhdCBvciBzdGF0LCBkZXBlbmRpbmcgb24gd2hldGhlcgorICAgIGRlcmVmZXJlbmNpbmcgb2Ygc3ltbGlua3MgaXMgZG9uZSBmb3IgaW5wdXQgZmlsZXMuICAqLworIGludCAoKnhzdGF0KSAoKTsKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9tYWluLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvbWFpbi5jCitAQCAtNTcsNyArNTcsOCBAQCBlbnVtIGNwaW9fb3B0aW9ucyB7CisgICBGT1JDRV9MT0NBTF9PUFRJT04sICAgICAgICAgICAgCisgICBERUJVR19PUFRJT04sICAgICAgICAgICAgICAgICAgCisgICBCTE9DS19TSVpFX09QVElPTiwgICAgICAgICAgICAgCistICBUT19TVERPVVRfT1BUSU9OCisrICBUT19TVERPVVRfT1BUSU9OLAorKyAgRVhUUkFDVF9PVkVSX1NZTUxJTktTCisgfTsKKyAKKyBjb25zdCBjaGFyICpwcm9ncmFtX2F1dGhvcnNbXSA9CitAQCAtMjIyLDYgKzIyMyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworICAgIE5fKCJDcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyB3aGVyZSBuZWVkZWQiKSwgR1JJRCsxIH0sCisgICB7Im5vLXByZXNlcnZlLW93bmVyIiwgTk9fUFJFU0VSVkVfT1dORVJfT1BUSU9OLCAwLCAwLAorICAgIE5fKCJEbyBub3QgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGVzIiksIEdSSUQrMSB9LAorKyAgeyJleHRyYWN0LW92ZXItc3ltbGlua3MiLCBFWFRSQUNUX09WRVJfU1lNTElOS1MsIDAsIDAsCisrICAgTl8oIkZvcmNlIHdyaXRpbmcgb3ZlciBzeW1ib2xpYyBsaW5rcyIpLCBHUklEKzEgfSwKKyAgIHsidW5jb25kaXRpb25hbCIsICd1JywgTlVMTCwgMCwKKyAgICBOXygiUmVwbGFjZSBhbGwgZmlsZXMgdW5jb25kaXRpb25hbGx5IiksIEdSSUQrMSB9LAorICAgeyJzcGFyc2UiLCBTUEFSU0VfT1BUSU9OLCBOVUxMLCAwLAorQEAgLTQxMiw2ICs0MTUsMTAgQEAgY3JjIG5ld2Mgb2RjIGJpbiB1c3RhciB0YXIgKGFsbC1jYXBzIGFscworICAgICAgIG5vX2Nob3duX2ZsYWcgPSB0cnVlOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIEVYVFJBQ1RfT1ZFUl9TWU1MSU5LUzoJCSAgICAgICAgLyogLS1leHRyYWN0LW92ZXItc3ltbGlua3MgKi8KKysgICAgICBleHRyYWN0X292ZXJfc3ltbGlua3MgPSB0cnVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlICdvJzoJCS8qIENvcHktb3V0IG1vZGUuICAqLworICAgICAgIGlmIChjb3B5X2Z1bmN0aW9uICE9IDApCisgCWVycm9yIChQQVhFWElUX0ZBSUxVUkUsIDAsIF8oIk1vZGUgYWxyZWFkeSBkZWZpbmVkIikpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZDNjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKQEAgLTAsMCArMSwyMjAgQEAKK2NwaW86IEZpeCBtZW1vcnkgb3ZlcnJ1biBvbiByZWFkaW5nIGltcHJvcGVybHkgY3JlYXRlZCBsaW5rIHJlY29yZHMKKworU2lnbmVkLW9mZi1ieTogQmlhbiBOYWltZW5nIDxiaWFubm1AY24uZnVqaXRzdS5jb20+CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NwaW8uZ2l0L2NvbW1pdC8/aWQ9NzQ2ZjNmZjY3MGRjZmNkZDI4ZmNjOTkwZTc5Y2Q2ZmNjYzdhZTQ4ZAorCisgICogc3JjL2NvcHlpbi5jIChnZXRfbGlua19uYW1lKTogTmV3IGZ1bmN0aW9uLgorICAobGlzdF9maWxlLCBjb3B5aW5fbGluayk6IHVzZSBnZXRfbGlua19uYW1lCisKKyAgKiB0ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL3N5bWxpbmstbG9uZy5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCisgICogdGVzdHMvdGVzdHN1aXRlLmF0OiBMaWtld2lzZS4KKworICBTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNlcmdleSBQb3pueWFrb2ZmIDxncmF5QGdudS5vcmcudWE+CisKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvc3JjL2NvcHlpbi5jIGNwaW8tMi4xMS9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuMTEub3JpZy9zcmMvY29weWluLmMJMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvc3JjL2NvcHlpbi5jCTIwMTQtMTItMDggMTM6MTQ6MDQuMzU1NTQ3NTA4ICswODAwCitAQCAtMTI2LDYgKzEyNiwyOCBAQCB0YXBlX3NraXBfcGFkZGluZyAoaW50IGluX2ZpbGVfZGVzLCBvZmZfCisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTY1MCwxMCArNjY3LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0gY3Bpby0yLjExL3Rlc3RzL01ha2VmaWxlLmFtCistLS0gY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvTWFrZWZpbGUuYW0JMjAxNC0xMi0wOCAxMzoxNDo0OS45MzE1NDU3MjcgKzA4MDAKK0BAIC01Miw2ICs1Miw4IEBAIFRFU1RTVUlURV9BVCA9IFwKKyAgc2V0c3RhdDA0LmF0XAorICBzZXRzdGF0MDUuYXRcCisgIHN5bWxpbmsuYXRcCisrIHN5bWxpbmstYmFkLWxlbmd0aC5hdFwKKysgc3ltbGluay1sb25nLmF0XAorICB2ZXJzaW9uLmF0CisgCisgVEVTVFNVSVRFID0gJChzcmNkaXIpL3Rlc3RzdWl0ZQorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMzoxNzo0NS45Nzk1Mzg4NDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMjAxNC0xMi0wOCAxMzoxNzo1Ny4yMTk1Mzg0MDggKzA4MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEuOTAgY2hhbmdlZCB0aGUgd2F5IHN5bWxpbmsgbmFtZSBpcyByZWFkIGZyb20gYXJjaGl2ZS4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstbG9uZ10pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9DSEVDSyhbCisrCisrIyBsZW4oZGlybmFtZSkgPiBSRUFEQlVGU0laRQorK2Rpcm5hbWU9CisrZm9yIGkgaW4gezEuLjUyfTsgZG8KKysgICAgZGlybmFtZT0ieHh4eHh4eHh4LyRkaXJuYW1lIgorKyAgICBta2RpciAiJGRpcm5hbWUiCisrZG9uZQorK2xuIC1zICIkZGlybmFtZSIgeCB8fCBBVF9TS0lQX1RFU1QKKysKKytlY2hvIHggfCBjcGlvIC1vID4gYXIKKytsaXN0PWBjcGlvIC10diA8IGFyIHwgc2VkICdzfC4qLT4gfHwnYAorK3Rlc3QgIiRsaXN0IiA9ICIkZGlybmFtZSIgJiYgZWNobyBzdWNjZXNzIHx8IGVjaG8gZmFpbAorK10sCisrWzBdLAorK1tzdWNjZXNzCisrXSxbMiBibG9ja3MKKysyIGJsb2NrcworK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy90ZXN0c3VpdGUuYXQgY3Bpby0yLjExL3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDEwLTAyLTE1IDE4OjAyOjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy90ZXN0c3VpdGUuYXQJMjAxNC0xMi0wOCAxMzoxNToxMy41MTU1NDQ4MDUgKzA4MDAKK0BAIC0zMSw2ICszMSw4IEBAIG00X2luY2x1ZGUoW3ZlcnNpb24uYXRdKQorIAorIG00X2luY2x1ZGUoW2lub3V0LmF0XSkKKyBtNF9pbmNsdWRlKFtzeW1saW5rLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWJhZC1sZW5ndGguYXRdKQorK200X2luY2x1ZGUoW3N5bWxpbmstbG9uZy5hdF0pCisgbTRfaW5jbHVkZShbaW50ZXJkaXIuYXRdKQorIAorIG00X2luY2x1ZGUoW3NldHN0YXQwMS5hdF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMTEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGNwaW8tMi4xMS9nbnUvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNwaW8tMi4xMS5vcmlnL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTM6NDMuMTMzMDY2MjQ3IC0wNzAwCisrKysgY3Bpby0yLjExL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTQ6MTAuMTg5MDY3NTY0IC0wNzAwCitAQCAtMTM4LDggKzEzOCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9zdGF0ZGVmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjhlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBdm9pZCBtdWx0aXBsZSBzdGF0IGRlZmluaXRpb25zCitQYXRjaCB0YWtlbiBmcm9tIGNwaW8gbWFpbGluZyBsaXN0IHBvc3RpbmcgMjAxMC0wMy0xOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmggY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAorLS0tIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaAkyMDEwLTAyLTEyIDAyOjE5OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wNy0yMyAxMzoxNzoyNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC04Miw0ICs4Miw2IEBACisgI2RlZmluZSBsc3RhdCBzdGF0CisgI2VuZGlmCisgaW50IGxzdGF0ICgpOworKyNpZm5kZWYgc3RhdAorIGludCBzdGF0ICgpOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhN2NmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWdmaXg6IGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjRdCisKK1RoaXMgcGF0Y2ggYXZvaWRzIGhlYXAgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgOgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNAorCitUaGlzIGlzIGEgY2xlYW4gcGF0Y2ggZm9yIHRoZSBHUEx2MiB0YXIgcmVjaXBlLgorCit0aGUgR1BMdjIgdGFyIHJlY2lwZSBwYXRjaCBpcyBhbHNvIGFwcGxpY2FibGUgdG8gdGhpcyBHUEx2MiBjcGlvIAorcmVjaXBlLCBhcyB0aGV5IHNoYXJlIGNvZGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjUKKworSW5kZXg6IHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGFyLTEuMTcub3JpZy9saWIvcnRhcGVsaWIuYworKysrIHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCitAQCAtNTcwLDcgKzU3MCw3IEBAIHJtdF9yZWFkX18gKGludCBoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2kKKyAKKyAgIHNwcmludGYgKGNvbW1hbmRfYnVmZmVyLCAiUiVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCk7CisgICBpZiAoZG9fY29tbWFuZCAoaGFuZGxlLCBjb21tYW5kX2J1ZmZlcikgPT0gLTEKKy0gICAgICB8fCAoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKQorKyAgICAgIHx8ICgoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKSB8fCAoc3RhdHVzID4gbGVuZ3RoKSkKKyAgICAgcmV0dXJuIFNBRkVfUkVBRF9FUlJPUjsKKyAKKyAgIGZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBzdGF0dXM7IGNvdW50ZXIgKz0gcmxlbiwgYnVmZmVyICs9IHJsZW4pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0OGU3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApAQCAtMCwwICsxLDIxNyBAQAorY3BpbzogRml4IG1lbW9yeSBvdmVycnVuIG9uIHJlYWRpbmcgaW1wcm9wZXJseSBjcmVhdGVkIGxpbmsgcmVjb3JkcworCitTaWduZWQtb2ZmLWJ5OiBCaWFuIE5haW1lbmcgPGJpYW5ubUBjbi5mdWppdHN1LmNvbT4KKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY3Bpby5naXQvY29tbWl0Lz9pZD03NDZmM2ZmNjcwZGNmY2RkMjhmY2M5OTBlNzljZDZmY2NjN2FlNDhkCisKKyAgKiBzcmMvY29weWluLmMgKGdldF9saW5rX25hbWUpOiBOZXcgZnVuY3Rpb24uCisgIChsaXN0X2ZpbGUsIGNvcHlpbl9saW5rKTogdXNlIGdldF9saW5rX25hbWUKKworICAqIHRlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvc3ltbGluay1sb25nLmF0OiBOZXcgZmlsZS4KKyAgKiB0ZXN0cy9NYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcy4KKyAgKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IExpa2V3aXNlLgorCisgIFNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2VyZ2V5IFBvem55YWtvZmYgPGdyYXlAZ251Lm9yZy51YT4KKworZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYyBjcGlvLTIuOC9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYwkyMDA3LTA2LTA3IDE5OjU4OjAzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3NyYy9jb3B5aW4uYwkyMDE0LTEyLTA4IDExOjMwOjAxLjE1OTc5MTQ4NCArMDgwMAorQEAgLTEyNiw2ICsxMjYsMjggQEAgdGFwZV9za2lwX3BhZGRpbmcgKGludCBpbl9maWxlX2RlcywgaW50CisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTczMiwxMCArNzQ5LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9NYWtlZmlsZS5hbSBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAwNi0xMC0yNCAxODozMjoxMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQkyMDE0LTEyLTA4IDExOjMwOjUyLjM4Nzc4OTQ4MiArMDgwMAorQEAgLTQ1LDYgKzQ1LDggQEAgVEVTVFNVSVRFX0FUID0gXAorICB0ZXN0c3VpdGUuYXRcCisgIGlub3V0LmF0XAorICBzeW1saW5rLmF0XAorKyBzeW1saW5rLWJhZC1sZW5ndGguYXRcCisrIHN5bWxpbmstbG9uZy5hdFwKKyAgdmVyc2lvbi5hdAorIAorIFRFU1RTVUlURSA9ICQoc3JjZGlyKS90ZXN0c3VpdGUKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CistLS0gY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMTozMzoyNS4yODM3ODM1MDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdCBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWxvbmcuYXQKKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkyMDE0LTEyLTA4IDExOjM0OjI4LjgwNzc4MTAyNCArMDgwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbTR0ZSB0byBjcmVhdGUgdGVzdHN1aXRlLiAgLSotIEF1dG90ZXN0IC0qLQorKyMgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEgVVNBLgorKworKyMgQ3BpbyB2Mi4xMS45MCBjaGFuZ2VkIHRoZSB3YXkgc3ltbGluayBuYW1lIGlzIHJlYWQgZnJvbSBhcmNoaXZlLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1sb25nXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0NIRUNLKFsKKysKKysjIGxlbihkaXJuYW1lKSA+IFJFQURCVUZTSVpFCisrZGlybmFtZT0KKytmb3IgaSBpbiB7MS4uNTJ9OyBkbworKyAgICBkaXJuYW1lPSJ4eHh4eHh4eHgvJGRpcm5hbWUiCisrICAgIG1rZGlyICIkZGlybmFtZSIKKytkb25lCisrbG4gLXMgIiRkaXJuYW1lIiB4IHx8IEFUX1NLSVBfVEVTVAorKworK2VjaG8geCB8IGNwaW8gLW8gPiBhcgorK2xpc3Q9YGNwaW8gLXR2IDwgYXIgfCBzZWQgJ3N8LiotPiB8fCdgCisrdGVzdCAiJGxpc3QiID0gIiRkaXJuYW1lIiAmJiBlY2hvIHN1Y2Nlc3MgfHwgZWNobyBmYWlsCisrXSwKKytbMF0sCisrW3N1Y2Nlc3MKKytdLFsyIGJsb2NrcworKzIgYmxvY2tzCisrXSkKKysKKytBVF9DTEVBTlVQCitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0IGNwaW8tMi44L3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMDYtMTAtMjQgMTg6MzI6MTMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMTQtMTItMDggMTE6MzQ6NTYuNTE1Nzc5OTQyICswODAwCitAQCAtMzEsMyArMzEsNSBAQCBtNF9pbmNsdWRlKFt2ZXJzaW9uLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtpbm91dC5hdF0pCisgbTRfaW5jbHVkZShbc3ltbGluay5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1iYWQtbGVuZ3RoLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWxvbmcuYXRdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjU4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9tNGV4dGVuc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRGVmaW5lIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBvbmx5IGlmIGl0IHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZC4KKyMgVGhpcyBpcyBuZWVkZWQgdG8gY29uZmlndXJlIGNvcnJlY3RseSB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mLgorCitkaWZmIC11ck4gY3Bpby0yLjgub3JpZy9tNC9leHRlbnNpb25zLm00IGNwaW8tMi44L200L2V4dGVuc2lvbnMubTQKKy0tLSBjcGlvLTIuOC5vcmlnL200L2V4dGVuc2lvbnMubTQJMjAwNi0xMC0xMiAwNDozNDo0NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBjcGlvLTIuOC9tNC9leHRlbnNpb25zLm00CTIwMTAtMDctMjMgMTQ6Mzc6MzYuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA0ICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgNSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC0xNiw2ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisrbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFtdLCBbCisgQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCitAQCAtNDgsNyArNDksNyBAQAorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrXSldKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L3N0YXRkZWYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9zdGF0ZGVmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDc5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9zdGF0ZGVmLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEF2b2lkIG11bHRpcGxlIHN0YXQgZGVmaW5pdGlvbnMKKyMgUGF0Y2ggdGFrZW4gZnJvbSBjcGlvIG1haWxpbmcgbGlzdCBwb3N0aW5nIDIwMTAtMDMtMTkKKworZGlmZiAtdXJOIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaCBjcGlvLTIuMTEvc3JjL2ZpbGV0eXBlcy5oCistLS0gY3Bpby0yLjExLm9yaWcvc3JjL2ZpbGV0eXBlcy5oCTIwMTAtMDItMTIgMDI6MTk6MjMuMDAwMDAwMDAwIC0wODAwCisrKysgY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAkyMDEwLTA3LTIzIDEzOjE3OjI1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTgyLDQgKzgyLDYgQEAKKyAjZGVmaW5lIGxzdGF0IHN0YXQKKyAjZW5kaWYKKyBpbnQgbHN0YXQgKCk7CisrI2lmbmRlZiBzdGF0CisgaW50IHN0YXQgKCk7CisrI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkOTJiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi4xMS5iYgpAQCAtMCwwICsxLDE1IEBACitpbmNsdWRlIGNwaW9fdjIuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSIKKworUFIgPSAicjUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMTEyYmI2YzQ1ODYzNDY4YjU0OTZiYTEyODc5MmY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDFiMWQ3NzRjZDZlNGNkMzk0MTYyMDNjOTFlYzU5ZGJkNjVkZDI3ZDc5ZDc1ZTFhOWI4OTQ5N2VhNjQzOTc4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk3ZGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBjcGlvX3YyLmluYworCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjdmNzcyZWEzYTI0ODkyMzFjYjQ4NzI2NTZjYWMzNGIiCisKK1BSID0gInI0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbTRleHRlbnNpb25zLnBhdGNoIFwKKwkgICAgZmlsZTovL2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggXAorCSAgICBmaWxlOi8vZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoIFwKKwkgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2FhMzU2ZTY5ZTE0OWZiNDliNzZiYWNjNjQ2MTVhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYjIwMzI0ODg3NGMzYjVhNzI4YjM1MWYwNjUxM2U1MjgyZjczZTAxNzBiN2YyMDdmYmY4YzM5ZjI4ZjZiNGFkIgorCisjIFJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggZ2NjIDQuMyBhbmQgbGF0ZXI6CitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvX3YyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2RlNGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJHTlUgY3BpbyBpcyBhIHByb2dyYW0gdG8gbWFuYWdlIGFyY2hpdmVzIG9mIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiR05VIGNwaW8gaXMgYSB0b29sIGZvciBjcmVhdGluZyBhbmQgZXh0cmFjdGluZyBhcmNoaXZlcywgb3IgY29weWluZyBmaWxlcyBmcm9tIG9uZSBwbGFjZSB0byBcCithbm90aGVyLiBJdCBoYW5kbGVzIGEgbnVtYmVyIG9mIGNwaW8gZm9ybWF0cyBhcyB3ZWxsIGFzIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jcGlvLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJ0ZXhpbmZvLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NwaW8vY3Bpby0ke1BWfS50YXIuZ3ogXAorICAgIGZpbGU6Ly9zdGF0ZGVmLnBhdGNoIFwKKyAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitTID0gIiR7V09SS0RJUn0vY3Bpby0ke1BWfSIKKworRVhUUkFfT0VDT05GICs9ICJERUZBVUxUX1JNVF9ESVI9JHtiYXNlX3NiaW5kaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9LworICAgIG12ICIke0R9JHtiaW5kaXJ9L2NwaW8iICIke0R9JHtiYXNlX2JpbmRpcn0vY3BpbyIKKyAgICBybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcm10IgorCitGSUxFU18ke1BOfS1ybXQgPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCoiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNwaW8iCitBTFRFUk5BVElWRV8ke1BOfS1ybXQgPSAicm10IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY3Bpb10gPSAiJHtiYXNlX2JpbmRpcn0vY3BpbyIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbcm10XSA9ICI1MCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtybXRdID0gIiR7YmFzZV9zYmluZGlyfS9ybXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1wYWNrbGliLmMtc3VwcG9ydC1kaWN0aW9uYXJ5LWJ5dGUtb3JkZXItZGVwZW5kZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGJlN2RmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaApAQCAtMCwwICsxLDMzOSBAQAorRnJvbSA4YTZlNDM3MjZhZDBhZTQxYmQxY2MyYzI0OGQ5MWRlYjMxNDU5MzU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjExOjQ4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhY2tsaWIuYzogc3VwcG9ydCBkaWN0aW9uYXJ5IGJ5dGUgb3JkZXIgZGVwZW5kZW50CisKK1RoZSBwcmV2aW91cyBkaWN0IGZpbGVzIGFyZSBOT1QgYnl0ZS1vcmRlciBpbmRlcGVuZGVudCwgaW4gZmFjdCB0aGV5IGFyZQorcHJvYmFibHkgQVJDSElURUNUVVJFIFNQRUNJRklDLgorQ3JlYXRlIHRoZSBkaWN0IGZpbGVzIGluIGJpZyBlbmRpYW4sIGFuZCBjb252ZXJ0IHRvIGhvc3QgZW5kaWFuIHdoaWxlCitsb2FkIHRoZW0uIFRoaXMgY291bGQgZml4IHRoZSBlbmRpYW4gaXNzdWUgb24gbXVsdGlwbGUgcGxhdGZvcm0uCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBjYW4ndCB1c2UgdGhlIGVuZGlhbi5oLCBodG9iZSogYW5kIGJlKnRvaCBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IGFyZQorbm90IGF2YWlsYWJsZSBvbiBvbGRlciB2ZXJzaW9ucyBvZiBnbGliYywgc3VjaCBhcyB0aGF0IGZvdW5kIGluIFJIRUwKKzUuOS4KKworQ2hhbmdlIHRvIGNoZWNraW5nIGVuZGlhbiBhbmQgZGlyZWN0bHkgY2FsbGluZyBic3dhcF8qIGFzIGRlZmluZWQgaW4KK2J5dGVzd2FwLmguCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworU2lnbmVkLW9mZi1ieTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorLS0tCisgbGliL3BhY2tsaWIuYyB8IDIxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3BhY2tsaWIuYyBiL2xpYi9wYWNrbGliLmMKK2luZGV4IGY4NTE0MjQuLjNhYWM4MDUgMTAwNjQ0CistLS0gYS9saWIvcGFja2xpYi5jCisrKysgYi9saWIvcGFja2xpYi5jCitAQCAtMTYsNiArMTYsMTIgQEAKKyAjaWZkZWYgSEFWRV9TVERJTlRfSAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjZW5kaWYKKysKKysjaWZuZGVmIF9CU0RfU09VUkNFCisrI2RlZmluZSBfQlNEX1NPVVJDRSAgICAgICAgICAgICAvKiBTZWUgZmVhdHVyZV90ZXN0X21hY3Jvcyg3KSAqLworKyNlbmRpZgorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyAjaW5jbHVkZSAicGFja2VyLmgiCisgCisgc3RhdGljIGNvbnN0IGNoYXIgdmVyc19pZFtdID0gInBhY2tsaWIuYyA6IHYyLjNwMiBBbGVjIE11ZmZldHQgMTggTWF5IDE5OTMiOworQEAgLTQ1LDYgKzUxLDE4NSBAQCB0eXBlZGVmIHN0cnVjdAorICAgICBjaGFyIGRhdGFfZ2V0W05VTVdPUkRTXVtNQVhXT1JETEVOXTsKKyB9IFBXRElDVDY0OworIAorK2VudW17CisrICAgIGVuX2lzMzIsCisrICAgIGVuX2lzNjQKKyt9OworKworK3N0YXRpYyBpbnQKKytJaGVhZGVySG9zdFRvQmlnRW5kaWFuKGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljLCBwSGVhZGVyMzItPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4sIHBIZWFkZXIzMi0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgICAgcEhlYWRlcjMyLT5waWhfbWFnaWMsIHBIZWFkZXIzMi0+cGloX251bXdvcmRzLAorKyAgICAgICAgICAgIHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyMzItPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVpdGhlciAzMiBvciA2NDogJWRcbiIsIG5CaXRUeXBlKTsKKysgICAgICAgIHJldHVybiAoLTEpOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSHdtc0hvc3RUb0JpZ0VuZGlhbihjaGFyICpwSHdtcywgaW50IG5MZW4saW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCA9IGJzd2FwXzY0KCpwSHdtczY0KTsKKysgICAgICAgICAgICAqcEh3bXM2NCsrOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytId21zQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBId21zLCBpbnQgbkxlbiwgaW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCsrID0gYnN3YXBfNjQoKnBId21zNjQpOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorIAorIHN0YXRpYyBpbnQKKyBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKK0BAIC01Nyw2ICsyNDIsNyBAQCBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKKysgICAgSWhlYWRlckJpZ0VuZGlhblRvSG9zdCgoY2hhciAqKSAmcGRlc2M2NC5oZWFkZXIsIGVuX2lzNjQpOworICAgICByZXR1cm4gKHBkZXNjNjQuaGVhZGVyLnBpaF9tYWdpYyA9PSBQSUhfTUFHSUMpOworIH0KKyAKK0BAIC0xNDksNyArMzM1LDExIEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCXBkZXNjLmhlYWRlci5waWhfYmxvY2tsZW4gPSBOVU1XT1JEUzsKKyAJcGRlc2MuaGVhZGVyLnBpaF9udW13b3JkcyA9IDA7CisgCistCWZ3cml0ZSgoY2hhciAqKSAmcGRlc2MuaGVhZGVyLCBzaXplb2YocGRlc2MuaGVhZGVyKSwgMSwgaWZwKTsKKysJc3RydWN0IHBpX2hlYWRlciB0bXBoZWFkZXIzMjsKKysKKysJbWVtY3B5KCZ0bXBoZWFkZXIzMiwgICZwZGVzYy5oZWFkZXIsIHNpemVvZihwZGVzYy5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlmd3JpdGUoKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBzaXplb2YodG1waGVhZGVyMzIpLCAxLCBpZnApOworICAgICB9IGVsc2UKKyAgICAgeworIAlwZGVzYy5mbGFncyAmPSB+UEZPUl9XUklURTsKK0BAIC0xNzMsNiArMzYzLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJICAgIHJldHVybiBOVUxMOworIAl9CisgCisrICAgICAgICBJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KChjaGFyICopICZwZGVzYy5oZWFkZXIsIGVuX2lzMzIpOworICAgICAgICAgaWYgKChwZGVzYy5oZWFkZXIucGloX21hZ2ljID09IDApIHx8IChwZGVzYy5oZWFkZXIucGloX251bXdvcmRzID09IDApKQorICAgICAgICAgeworICAgICAgICAgICAgIC8qIHVoLW9oLiBlaXRoZXIgYSBicm9rZW4gIjY0LWJpdCIgZmlsZSBvciBhIGdhcmJhZ2UgZmlsZS4gKi8KK0BAIC0xOTUsNiArMzg2LDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJCX0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEloZWFkZXJCaWdFbmRpYW5Ub0hvc3QoKGNoYXIgKikgJnBkZXNjNjQuaGVhZGVyLCBlbl9pczY0KTsKKyAgICAgICAgICAgICBpZiAocGRlc2M2NC5oZWFkZXIucGloX21hZ2ljICE9IFBJSF9NQUdJQykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIC8qIG5vcGUsIG5vdCAiNjQtYml0IiBhZnRlciBhbGwgKi8KK0BAIC0yOTAsNiArNDgyLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBId21zQmlnRW5kaWFuVG9Ib3N0KChjaGFyKilwZGVzYzY0Lmh3bXMsIHNpemVvZihwZGVzYzY0Lmh3bXMpLCBlbl9pczY0KTsKKyAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihwZGVzYy5od21zKSAvIHNpemVvZihwZGVzYy5od21zWzBdKTsgaSsrKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBwZGVzYy5od21zW2ldID0gcGRlc2M2NC5od21zW2ldOworQEAgLTI5OSw2ICs0OTIsNyBAQCBQV09wZW4ocHJlZml4LCBtb2RlKQorIAkgICAgeworIAkJcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAJICAgIH0KKysJICAgIEh3bXNCaWdFbmRpYW5Ub0hvc3QoKGNoYXIqKXBkZXNjLmh3bXMsIHNpemVvZihwZGVzYy5od21zKSwgZW5faXMzMik7CisgI2lmIERFQlVHCisgICAgICAgICAgICAgZm9yIChpPTE7IGk8PTB4ZmY7IGkrKykKKyAgICAgICAgICAgICB7CitAQCAtMzMyLDcgKzUyNiwxMSBAQCBQV0Nsb3NlKHB3cCkKKyAJICAgIHJldHVybiAoLTEpOworIAl9CisgCistCWlmICghZndyaXRlKChjaGFyICopICZwd3AtPmhlYWRlciwgc2l6ZW9mKHB3cC0+aGVhZGVyKSwgMSwgcHdwLT5pZnApKQorKwlzdHJ1Y3QgcGlfaGVhZGVyIHRtcGhlYWRlcjMyOworKworKwltZW1jcHkoJnRtcGhlYWRlcjMyLCAgJnB3cC0+aGVhZGVyLCBzaXplb2YocHdwLT5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlpZiAoIWZ3cml0ZSgoY2hhciAqKSAmdG1waGVhZGVyMzIsIHNpemVvZih0bXBoZWFkZXIzMiksIDEsIHB3cC0+aWZwKSkKKyAJeworIAkgICAgZnByaW50ZihzdGRlcnIsICJpbmRleCBtYWdpYyBmd3JpdGUgZmFpbGVkXG4iKTsKKyAJICAgIHJldHVybiAoLTEpOworQEAgLTM1MSw3ICs1NDksMTIgQEAgUFdDbG9zZShwd3ApCisgCSAgICAJcHJpbnRmKCJod21bJTAyeF0gPSAlZFxuIiwgaSwgcHdwLT5od21zW2ldKTsKKyAjZW5kaWYKKyAJICAgIH0KKy0JICAgIGZ3cml0ZShwd3AtPmh3bXMsIDEsIHNpemVvZihwd3AtPmh3bXMpLCBwd3AtPndmcCk7CisrCisrCSAgICBQV0RJQ1QgdG1wX3B3cDsKKysKKysJICAgIG1lbWNweSgmdG1wX3B3cCwgcHdwLCBzaXplb2YoUFdESUNUKSk7CisrCSAgICBId21zSG9zdFRvQmlnRW5kaWFuKHRtcF9wd3AuaHdtcywgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIGVuX2lzMzIpOworKwkgICAgZndyaXRlKHRtcF9wd3AuaHdtcywgMSwgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIHB3cC0+d2ZwKTsKKyAJfQorICAgICB9CisgCitAQCAtNDA1LDcgKzYwOCw4IEBAIFB1dFBXKHB3cCwgc3RyaW5nKQorIAorIAlkYXR1bSA9ICh1aW50MzJfdCkgZnRlbGwocHdwLT5kZnApOworIAorLQlmd3JpdGUoKGNoYXIgKikgJmRhdHVtLCBzaXplb2YoZGF0dW0pLCAxLCBwd3AtPmlmcCk7CisrCXVpbnQzMl90IHRtcGRhdHVtID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfMzIoZGF0dW0pIDogZGF0dW07CisrCWZ3cml0ZSgoY2hhciAqKSAmdG1wZGF0dW0sIHNpemVvZih0bXBkYXR1bSksIDEsIHB3cC0+aWZwKTsKKyAKKyAJZnB1dHMocHdwLT5kYXRhX3B1dFswXSwgcHdwLT5kZnApOworIAlwdXRjKDAsIHB3cC0+ZGZwKTsKK0BAIC00NjQsNiArNjY4LDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bTY0ID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfNjQoZGF0dW02NCkgOiBkYXR1bTY0OworICAgICAgICBkYXR1bSA9IGRhdHVtNjQ7CisgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmc2Vlayhwd3AtPmlmcCwgc2l6ZW9mKHN0cnVjdCBwaV9oZWFkZXIpICsgKHRoaXNibG9jayAqIHNpemVvZih1aW50MzJfdCkpLCAwKSkKK0BAIC00NzcsNiArNjgyLDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bSA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzMyKGRhdHVtKSA6IGRhdHVtOworICAgICB9CisgCisgCWludCByID0gMTsKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTBlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDA2ZjlhODhiNWRkNTU5N2Y5MTk4ZWEwY2IzNGY1ZTk2ZjE4MGU2ZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDI3IEFwciAyMDEzIDE2OjAyOjMwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyYWtsaWI6Zml4IHRlc3RudW0gYW5kIHRlc3RzdHIgZmFpbGVkCisKK0Vycm9yIGxvZzoKKy4uLgorJCAuL3Rlc3RudW0KKyhudWxsKS5wd2QuZ3o6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK1BXT3BlbjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCiskIC4vdXRpbC90ZXN0c3RyCisobnVsbCkucHdkLmd6OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQV09wZW46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy4uLgorU2V0IERFRkFVTFRfQ1JBQ0tMSUJfRElDVCBhcyB0aGUgcGF0aCBvZiAgUFdPcGVuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdXRpbC90ZXN0bnVtLmMgfCAgICAyICstCisgdXRpbC90ZXN0c3RyLmMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RudW0uYyBiL3V0aWwvdGVzdG51bS5jCitpbmRleCBhZTIyNDZkLi5jYTIxMGZmIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0bnVtLmMKKysrKyBiL3V0aWwvdGVzdG51bS5jCitAQCAtMjAsNyArMjAsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RzdHIuYyBiL3V0aWwvdGVzdHN0ci5jCitpbmRleCAyYTMxZmE0Li45ZmI5Y2RhIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0c3RyLmMKKysrKyBiL3V0aWwvdGVzdHN0ci5jCitAQCAtMTUsNyArMTUsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZmZlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJQYXNzd29yZCBzdHJlbmd0aCBjaGVja2VyIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NyYWNrbGliIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1lM2VkYTAxZDk4MTVmOGQyNGFhZTJkYmQ4OWI2OGIwNiIKKworREVQRU5EUyA9ICJjcmFja2xpYi1uYXRpdmUgemxpYiBweXRob24iCitSREVQRU5EXyR7UE59LXB5dGhvbiArPSAicHl0aG9uIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXB5dGhvbiAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vY3JhY2tsaWIvY3JhY2tsaWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzc2NzkwYTk1YzFmYjY0NWU1OWU2ZTk4MDNjNzg1ODIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTlhYjAxMzhiYzhjZjkwY2NjYjg1MDliNjk2OWEwMjRkNWU1OGQyZDAyYmNiZGNjYmI5YmE5Yjg4YmUzZmEzMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBweXRob25uYXRpdmUgcHl0aG9uLWRpcgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJY3JlYXRlLWNyYWNrbGliLWRpY3QgLW8gJHtEfSR7ZGF0YWRpcn0vY3JhY2tsaWIvcHdfZGljdCAke0R9JHtkYXRhZGlyfS9jcmFja2xpYi9jcmFja2xpYi1zbWFsbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzcmNfZGlyPSIke0R9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCXJtIC1mICRzcmNfZGlyLyoucHlvCisJcm0gLWYgJHNyY19kaXIvdGVzdF9jcmFja2xpYi5weQorCSMgTW92ZSBweXRob24gZmlsZXMgZnJvbSAke2Jhc2VfbGliZGlyfSB0byAke2xpYmRpcn0gc2luY2UgdXNlZCAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfQorCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJbXYgJHNyY19kaXIvKiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKwlybSAtZnIgJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vY3JhY2tsaWIucHkgXAorCSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcvX2NyYWNrbGliLnNvIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9fY3JhY2tsaWIuYSBcCisJJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLmxhIFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5pbml0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2I4NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuaW5pdApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGNyb25kIGNyb250YWIKKyMgRGVmYXVsdC1TdGFydDogIDIzNDUKKyMgRGVmYXVsdC1TdG9wOiAgIDAxNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogcnVuIGNyb24gZGFlbW9uCisjIERlc2NyaXB0aW9uOiBjcm9uIGlzIGEgc3RhbmRhcmQgVU5JWCBwcm9ncmFtIHRoYXQgcnVucyB1c2VyLXNwZWNpZmllZAorIyAgICAgICAgICAgICAgcHJvZ3JhbXMgYXQgcGVyaW9kaWMgc2NoZWR1bGVkIHRpbWVzLiB2aXhpZSBjcm9uIGFkZHMgYQorIyAgICAgICAgICAgICAgbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHRoZSBiYXNpYyBVTklYIGNyb24sIGluY2x1ZGluZyBiZXR0ZXIKKyMgICAgICAgICAgICAgIHNlY3VyaXR5IGFuZCBtb3JlIHBvd2VyZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0NST05EPS91c3Ivc2Jpbi9jcm9uZAorQ09ORklHPS9ldGMvc3lzY29uZmlnL2Nyb25kCisKK1sgLWYgJENPTkZJRyBdIHx8IGV4aXQgMQorWyAteCAkQ1JPTkQgXSB8fCBleGl0IDEKKworLiAkQ09ORklHCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZWNobyAtbiAiU3RhcnRpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjICRDUk9ORCAtLSAkQ1JPTkRBUkdTCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAtbiAiU3RvcHBpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vY3JvbmQucGlkCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgY3JvbmQKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICAkMCBzdG9wICYmIHNsZWVwIDEgJiYgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9jcm9uZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDM1YTZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBlcmlvZGljIENvbW1hbmQgU2NoZWR1bGVyCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Nyb25kCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2Nyb25kIC1uICRDUk9OREFSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1Jlc3RhcnQ9YWx3YXlzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTg3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3Bhc3N3b3JkLWF1dGggaXMgdGhlIEZlZG9yYSdzIGNvbW1vbiBwYW0gY29uZmlndXJlIGZpbGUsIHVzZSBvZSBjb21tb24gcGFtCitjb25maWd1cmUgZmlsZXMgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQub3JpZwkyMDEwLTEyLTE2IDE2OjU5OjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQJMjAxMS0wNy0yMCAwOTo0NzoxNi4wODA4MTkyMDMgKzA4MDAKK0BAIC00LDcgKzQsNyBAQAorICMKKyAjIE5vIFBBTSBhdXRoZW50aWNhdGlvbiBjYWxsZWQsIGF1dGggbW9kdWxlcyBub3QgbmVlZGVkCisgYWNjb3VudCAgICByZXF1aXJlZCAgIHBhbV9hY2Nlc3Muc28KKy1hY2NvdW50ICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorK2FjY291bnQgICAgaW5jbHVkZSAgICBjb21tb24tYWNjb3VudAorIHNlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbG9naW51aWQuc28KKy1zZXNzaW9uICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorLWF1dGggICAgICAgaW5jbHVkZSAgICBwYXNzd29yZC1hdXRoCisrc2Vzc2lvbiAgICBpbmNsdWRlICAgIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCisrYXV0aCAgICAgICBpbmNsdWRlICAgIGNvbW1vbi1hdXRoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9udGFiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbnRhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM0ZmViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbnRhYgpAQCAtMCwwICsxLDE0IEBACisjIC9ldGMvY3JvbnRhYjogc3lzdGVtLXdpZGUgY3JvbnRhYgorIyBVbmxpa2UgYW55IG90aGVyIGNyb250YWIgeW91IGRvbid0IGhhdmUgdG8gcnVuIHRoZSBgY3JvbnRhYicKKyMgY29tbWFuZCB0byBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiB3aGVuIHlvdSBlZGl0IHRoaXMgZmlsZQorIyBhbmQgZmlsZXMgaW4gL2V0Yy9jcm9uLmQuIFRoZXNlIGZpbGVzIGFsc28gaGF2ZSB1c2VybmFtZSBmaWVsZHMsCisjIHRoYXQgbm9uZSBvZiB0aGUgb3RoZXIgY3JvbnRhYnMgZG8uCisKK1NIRUxMPS9iaW4vc2gKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgIG0gIGggIGRvbSBtb24gZG93IHVzZXIJY29tbWFuZAorIyAgMSAgKiAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmhvdXJseQorIyAzMCAgNyAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmRhaWx5CisjIDQyICA3ICAgICAqICogNyAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ud2Vla2x5CisjIDU1ICA3ICAgICAxICogKiAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ubW9udGhseQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJkNTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIKQEAgLTAsMCArMSw4MSBAQAorU1VNTUFSWSA9ICJDcm9uIGRhZW1vbiBmb3IgZXhlY3V0aW5nIHByb2dyYW1zIGF0IHNldCB0aW1lcyIKK0RFU0NSSVBUSU9OID0gIkNyb25pZSBjb250YWlucyB0aGUgc3RhbmRhcmQgVU5JWCBkYWVtb24gY3JvbmQgdGhhdCBydW5zIFwKK3NwZWNpZmllZCBwcm9ncmFtcyBhdCBzY2hlZHVsZWQgdGltZXMgYW5kIHJlbGF0ZWQgdG9vbHMuIEl0IGlzIGJhc2VkIG9uIHRoZSBcCitvcmlnaW5hbCBjcm9uIGFuZCBoYXMgc2VjdXJpdHkgYW5kIGNvbmZpZ3VyYXRpb24gZW5oYW5jZW1lbnRzIGxpa2UgdGhlIFwKK2FiaWxpdHkgdG8gdXNlIHBhbSBhbmQgU0VMaW51eC4iCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvY3JvbmllLyIKK0JVR1RSQUNLRVIgPSAibW1hc2xhbm9AcmVkaGF0LmNvbSIKKworIyBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0gTGljZW5zZQorTElDRU5TRSA9ICJJU0MgJiBCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZDJhNTkyMTcwNzYwZTEzODZjNzY5ZTEwNDNiMzcyMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3Jvbi5jO2VuZGxpbmU9MjA7bWQ1PWI0MjVjMzM0MjY1MDI2MTc3MTI4MzUzYTE0MjYzM2I0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wb3Blbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MzE7bWQ1PWVkZDUwNzQyZDhkZWY3MTJlOTQ3MmRiYTM1MzY2OGE5IgorCitTRUNUSU9OID0gInV0aWxzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL3IvY3JvbmllL2Nyb25pZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY3JvbmQuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9udGFiIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLnNlcnZpY2UgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0iCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9jcm9uZF9wYW1fY29uZmlnLnBhdGNoIgorUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tYWNjZXNzIHBhbS1wbHVnaW4tbG9naW51aWQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZGI3NWUxODg0ZDgzYTQ1ZTAwMmQxNDVjNmM1NGQ0NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Y2YwZTNmNGY1MDQyYTljMDk0MTNkNjJjOGUwYzA1NWUxMjQwMWY3MGIxMTI0NjVmMGY4MWYyYzg0ZWJmYjNmIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS13aXRoLWF1ZGl0LC0td2l0aG91dC1hdWRpdCxhdWRpdCwiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLXBhbSwtLXdpdGhvdXQtcGFtLGxpYnBhbSwke1BBTV9ERVBTfSIKKworSU5JVFNDUklQVF9OQU1FID0gImNyb25kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTAgMiAzIDQgNSAuIHN0b3AgNjAgMCAxIDYgLiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGNyb250YWIiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjcm9uZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vY3JvbmQuc3lzY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9jcm9uZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Nyb25kLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nyb25kCisKKwkjIGluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Nyb25kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY3JvbmQuc2VydmljZQorCisJIyBiZWxvdyBhcmUgbmVjZXNzYXJ5IGZvciBhIGNvbXBsZXRlIGNyb24gZW52aXJvbm1lbnQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9udGFiICR7RH0ke3N5c2NvbmZkaXJ9LworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZAorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uaG91cmx5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ud2Vla2x5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5tb250aGx5CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kZW55CisKKwkjIGJlbG93IHNldHRpbmcgaXMgbmVjZXNzYXJ5IHRvIGFsbG93IG5vcm1hbCB1c2VyIHVzaW5nIGNyb250YWIKKworCSMgc2V0Z2lkIGZvciBjcm9udGFiIGJpbmFyeQorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKwljaG1vZCAyNzU1ICR7RH0ke2JpbmRpcn0vY3JvbnRhYgorCisJIyBhbGxvdyAnY3JvbnRhYicgZ3JvdXAgd3JpdGUgdG8gL3Zhci9zcG9vbC9jcm9uCisJY2hvd24gcm9vdDpjcm9udGFiICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwljaG1vZCA3NzAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvY3JvbgorCisJY2htb2QgNjAwICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb250YWIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbioiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbnRhYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjZGYyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCkBAIC0wLDAgKzEsMTIzIEBACitTVU1NQVJZID0gIkFuIEludGVybmV0IHByaW50aW5nIHN5c3RlbSBmb3IgVW5peCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitERVBFTkRTID0gImdudXRscyBsaWJwbmcganBlZyBkYnVzIGRidXMtZ2xpYiB6bGliIGxpYnVzYiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLyR7UFZ9LyR7QlB9LXNvdXJjZS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRvbi10LXRyeS10by1ydW4tZ2VuZXJhdGVkLWJpbmFyaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHNfc2VydmVyYmluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMucGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnNlcnZpY2UgXAorCSAgIgorCitMRUFEX1NPTkFNRSA9ICJsaWJjdXBzZHJpdmVyLnNvIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgYmluY29uZmlnIHVzZXJhZGQgc3lzdGVtZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gbHBhZG1pbiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImN1cHMuc29ja2V0IGN1cHMucGF0aCBjdXBzLnNlcnZpY2UiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0tZW5hYmxlLWF2YWhpLC0tZGlzYWJsZS1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLCAtLWRpc2FibGUtcGFtLCBsaWJwYW0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtZ251dGxzIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWRidXMgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtYnJvd3NpbmcgXAorICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzc2FwaSBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1kZWJ1ZyBcCisgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVscm8gXAorICAgICAgICAgICAgICAgLS1lbmFibGUtbGlidXNiIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1waHAgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXBlcmwgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXB5dGhvbiBcCisgICAgICAgICAgICAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgICAgICAgICAgICAiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb21waWxlICgpIHsKKwllY2hvICJhbGw6IiAgICA+ICBtYW4vTWFrZWZpbGUKKwllY2hvICJsaWJzOiIgPj4gbWFuL01ha2VmaWxlCisJZWNobyAiaW5zdGFsbDoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZGF0YToiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZXhlYzoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtaGVhZGVyczoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtbGliczoiID4+IG1hbi9NYWtlZmlsZQorCisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJEU1RST09UPSR7RH0iIGluc3RhbGwKKworCSMgUmVtb3ZlIC92YXIvcnVuIGZyb20gcGFja2FnZSBhcyBjdXBzZCB3aWxsIHBvcHVsYXRlIGl0IG9uIHN0YXJ0dXAKKwlybSAtZnIgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9LyR7QlBOfS9kcml2ZXIKKworCSMgUmVtb3ZlIHN5c2luaXQgc2NyaXB0IGFuZCBzeW1saW5rcyBpZiBzeXN2aW5pdCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnZmFsc2UnLCd0cnVlJyxkKX07IHRoZW4KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L3JjKgorCWZpCisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5wYXRoICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2N1cHMuc2VydmljZQorfQorCitweXRob24gZG9fcGFja2FnZV9hcHBlbmQoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAjIENoYW5nZSBwZXJtaXNzaW9ucyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJlLCB0aGV5IHByb2JhYmx5IGhhZCBhIHJlYXNvbi4uLgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgc3VicHJvY2Vzcy5jYWxsKCdjaG1vZCAwNTExICVzL2luc3RhbGwvY3Vwcy92YXIvcnVuL2N1cHMvY2VydHMnICUgd29ya2Rpciwgc2hlbGw9VHJ1ZSkKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWxpYiAke1BOfS1saWJpbWFnZSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAncHJvY3BzJywgJycsIGQpfSIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kIFwKKwkJJHtsaWJkaXJ9L2N1cHMvY2dpLWJpbiBcCisJCSR7bGliZGlyfS9jdXBzL2ZpbHRlciBcCisJCSR7bGliZGlyfS9jdXBzL21vbml0b3IgXAorCQkke2xpYmRpcn0vY3Vwcy9ub3RpZmllciBcCisJCSR7bGliZGlyfS9jdXBzL2RhZW1vbiBcCisJICAgICAgICIKKworRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWJjdXBzLnNvLioiCisKK0ZJTEVTXyR7UE59LWxpYmltYWdlID0gIiR7bGliZGlyfS9saWJjdXBzaW1hZ2Uuc28uKiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2NnaS1iaW4vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZmlsdGVyLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL21vbml0b3IvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvbm90aWZpZXIvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZGFlbW9uLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorCisjcGFja2FnZSB0aGUgaHRtbCBmb3IgdGhlIHdlYmd1aSBpbnNpZGUgdGhlIG1haW4gcGFja2FnZXMgKH4xTUIgdW5jb21wcmVzc2VkKQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kb2MvY3Vwcy9pbWFnZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKmh0bWwgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKi5jc3MgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvIFwKKyAgICAgICAgICAgICAgICIKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9jdXBzL2N1cHNkLmNvbmYiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiY3Vwc19zeXNyb290X3ByZXByb2Nlc3MiCitjdXBzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc2VkIC1pICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vY3Vwcy1jb25maWcgLWUgJ3M6Y3Vwc19kYXRhZGlyPS4qOmN1cHNfZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHM6JyAtZSAnczpjdXBzX3NlcnZlcmJpbj0uKjpjdXBzX3NlcnZlcmJpbj0ke2xpYmRpcn0vY3VwczonCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3OWViNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGcm9tIDkwMDY5NTg2MTY3YjkzMGJlZmNlNzMwM2FlYTU3MDc4ZjA0YjRlZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogU3VuLCAzMCBKYW4gMjAxMSAxNjozNzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBkb24ndCB0cnkgdG8gcnVuIGdlbmVyYXRlZCBiaW5hcmllcworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorLS0tCisgcHBkYy9NYWtlZmlsZSB8ICAgMzAgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGN1cHMtMi4wLjAvcHBkYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMi4wLjAub3JpZy9wcGRjL01ha2VmaWxlCisrKysgY3Vwcy0yLjAuMC9wcGRjL01ha2VmaWxlCitAQCAtMjQyLDggKzI0Miw4IEBAIGdlbnN0cmluZ3M6CQlnZW5zdHJpbmdzLm8gbGliY3Vwc3BwZGMuYQorIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gZ2Vuc3RyaW5ncyBnZW5zdHJpbmdzLm8gXAorIAkJbGliY3Vwc3BwZGMuYSAuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgXAorIAkJJChETlNTRExJQlMpICQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIEdlbmVyYXRpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MuLi4KKy0JLi9nZW5zdHJpbmdzID5zYW1wbGUuYworKyMJZWNobyBHZW5lcmF0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzLi4uCisrIwkuL2dlbnN0cmluZ3MgPnNhbXBsZS5jCisgCisgCisgIworQEAgLTI2MCw5ICsyNjAsOSBAQCBwcGRjLXN0YXRpYzoJCXBwZGMubyBsaWJjdXBzcHBkYy5hIC4uL2N1CisgCSQoQ1hYKSAkKEFSQ0hGTEFHUykgJChMREZMQUdTKSAtbyBwcGRjLXN0YXRpYyBwcGRjLm8gbGliY3Vwc3BwZGMuYSBcCisgCQkuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgJChETlNTRExJQlMpIFwKKyAJCSQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLUkgLi4vZGF0YSBmb28uZHJ2CistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLXogLUkgLi4vZGF0YSBmb28uZHJ2CisrIwllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCisrIwkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC1JIC4uL2RhdGEgZm9vLmRydgorKyMJLi9wcGRjLXN0YXRpYyAtbCBlbixmciAteiAtSSAuLi9kYXRhIGZvby5kcnYKKyAKKyAKKyAjCitAQCAtMjg4LDE3ICsyODgsMTcgQEAgcHBkaS1zdGF0aWM6CQlwcGRjLXN0YXRpYyBwcGRpLm8gbGliY3VwcworIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gcHBkaS1zdGF0aWMgcHBkaS5vIGxpYmN1cHNwcGRjLmEgXAorIAkJLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpICQoRE5TU0RMSUJTKSBcCisgCQkkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorLQkkKFJNKSAtciBwcGQgcHBkMiBzYW1wbGUtaW1wb3J0LmRydgorLQkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgc2FtcGxlLmRydgorLQkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKy0JLi9wcGRjLXN0YXRpYyAtbCBlbiAtSSAuLi9kYXRhIC1kIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKy0JaWYgZGlmZiAtciBwcGQgcHBkMiA+L2Rldi9udWxsOyB0aGVuIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorLQllbHNlIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBGQUlMRUQ7IFwKKy0JCWV4aXQgMTsgXAorLQlmaQorKyMJZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorKyMJJChSTSkgLXIgcHBkIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSBzYW1wbGUuZHJ2CisrIwkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSAtZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CisrIwlpZiBkaWZmIC1yIHBwZCBwcGQyID4vZGV2L251bGw7IHRoZW4gXAorKyMJCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorKyMJZWxzZSBcCisrIwkJZWNobyBQUEQgaW1wb3J0IEZBSUxFRDsgXAorKyMJCWV4aXQgMTsgXAorKyMJZmkKKyAKKyAKKyAjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5wYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOGNjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGVyIFNlcnZpY2UgU3Bvb2wKKworW1BhdGhdCitQYXRoRXhpc3RzR2xvYj0vdmFyL3Nwb29sL2N1cHMvZCoKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDNlODM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2N1cHNkIC1mCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitBbHNvPWN1cHMuc29ja2V0IGN1cHMucGF0aAorV2FudGVkQnk9cHJpbnRlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zb2NrZXQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTQ4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc29ja2V0CkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UgU29ja2V0cworCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPS92YXIvcnVuL2N1cHMvY3Vwcy5zb2NrCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwc19zZXJ2ZXJiaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHNfc2VydmVyYmluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YjQ0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHNfc2VydmVyYmluLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK01ha2UgQ1VQU19TRVJWRVJCSU4gcmVsYXRpdmUgdG8gbGliZGlyIG90aGVyd2lzZSBvbiA2NGJpdCBhcmNoZXMKK2UuZy4gcHBjNjQgd2hlcmUgYmFzZSBsaWJkaXIgaXMgbGliNjQgdGhpcyBkb2VzIG5vdCBnbyB3ZWxsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS40LjYvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMDktMDQtMTIgMTY6MDQ6NTEuMDAwMDAwMDAwIC0wNzAwCisrKysgY3Vwcy0xLjQuNi9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMTItMDctMjEgMTI6MTI6MDUuODk2NDA1OTIzIC0wNzAwCitAQCAtMzk3LDcgKzM5Nyw3IEBACisgCSopCisgCQkjIEFsbCBvdGhlcnMKKyAJCUlOU1RBTExfU1lTVj0iaW5zdGFsbC1zeXN2IgorLQkJQ1VQU19TRVJWRVJCSU49IiRleGVjX3ByZWZpeC9saWIvY3VwcyIKKysJCUNVUFNfU0VSVkVSQklOPSIkbGliZGlyL2N1cHMiCisgCQk7OworIGVzYWMKKyAKK0luZGV4OiBjdXBzLTEuNC42L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWd1cmUJMjAxMi0wNy0yMSAxMjoxMzozNC41MTI0MDU5NTAgLTA3MDAKKysrKyBjdXBzLTEuNC42L2NvbmZpZ3VyZQkyMDEyLTA3LTIxIDEyOjE0OjA1LjcyNDQwNjAxNyAtMDcwMAorQEAgLTExMTgxLDcgKzExMTgxLDcgQEAKKyAJKikKKyAJCSMgQWxsIG90aGVycworIAkJSU5TVEFMTF9TWVNWPSJpbnN0YWxsLXN5c3YiCistCQlDVVBTX1NFUlZFUkJJTj0iJGV4ZWNfcHJlZml4L2xpYi9jdXBzIgorKwkJQ1VQU19TRVJWRVJCSU49IiRsaWJkaXIvY3VwcyIKKyAJCTs7CisgZXNhYworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZmMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS42LjEvc2NoZWR1bGVyL2N1cHMuc2guaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNi4xLm9yaWcvc2NoZWR1bGVyL2N1cHMuc2guaW4KKysrKyBjdXBzLTEuNi4xL3NjaGVkdWxlci9jdXBzLnNoLmluCitAQCAtNjcsNyArNjcsNyBAQCBjYXNlICJgdW5hbWVgIiBpbgorIAkJRUNIT19FUlJPUj06CisgCQk7OworIAorLQlMaW51eCopCisrCURpc2FibGVMaW51eCopCisgCQlJU19PTj0vYmluL3RydWUKKyAJCWlmIHRlc3QgLWYgL2V0Yy9pbml0LmQvZnVuY3Rpb25zOyB0aGVuCisgCQkJLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDczYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMC40LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBjdXBzLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NmM1YTM1MDU5NmZiYTAyNzU0YmQ5NmViNmRmM2FmZDAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNWM4NDdkOWE0ZmFjNmM0YzY2ZmIwNTI2YTdhZmFhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMWQ1ZTY4ZDlmMjRmYWNhMzE3YWVhZWJjMTY0YzM0MTAyODEzYmMwZjFkNjljMDBiM2E1OWI0OWM0OWY0YWJkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3dhdXRvbWFjcm9zL2N3YXV0b21hY3Jvc18yMDExMDIwMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VhM2NlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIGF1dG9jb25mIG00IG1hY3JvcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3dhdXRvbWFjcm9zLmJlcmxpb3MvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0uYmVybGlvcy8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjA3NGFmY2I1MGQwYThiZmYxMDc4NmEyOTU0YjJiMDJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMxMTU2MDNiODkxZjNhMTYzYzBiYmI1ZmVhMmYzNzQyMTEzYTE4M2ZhNjc0NWVlNWU4OWU1ZjZkMGU5ZjYxMjEiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBDV0FVVE9NQUNST1NQUkVGSVg9JHtEfSR7cHJlZml4fSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwNWQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmFjOjkwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYWNsb2NhbC0xLjEyL3Byb3Rvcy5tNDoxMjogQU1fQ19QUk9UT1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay9pNTg2LXBva3ktbGludXgvZGlmZnV0aWxzLTIuOC4xLXI0L2RpZmZ1dGlscy0yLjguMS9tNC9wcmVyZXEubTQ6MTEwOiBqbV9QUkVSRVFfUVVPVEVBUkcgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6OTA6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBkaWZmdXRpbHMtMi44LjEvbTQvcHJlcmVxLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGlmZnV0aWxzLTIuOC4xLm9yaWcvbTQvcHJlcmVxLm00CisrKysgZGlmZnV0aWxzLTIuOC4xL200L3ByZXJlcS5tNAorQEAgLTExNSw3ICsxMTUsNiBAQCBBQ19ERUZVTihbam1fUFJFUkVRX1FVT1RFQVJHXSwKKyAgIEFDX0hFQURFUl9TVERDCisgICBBQ19DX0JBQ0tTTEFTSF9BCisgICBBQ19NQlNUQVRFX1QKKy0gIEFNX0NfUFJPVE9UWVBFUworIF0pCisgCisgQUNfREVGVU4oW2ptX1BSRVJFUV9SRUdFWF0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVjNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzIGNoZWNrLVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzMzQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkRpZmZ1dGlscyBjb250YWlucyB0b29scyB1c2VkIGZvciBmaW5kaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gZmlsZXMiCitERVNDUklQVElPTiA9ICJEaWZmdXRpbHMgY29udGFpbnMgdGhlIEdOVSBkaWZmLCBkaWZmMywgXAorc2RpZmYsIGFuZCBjbXAgdXRpbGl0aWVzLiBUaGVzZSBwcm9ncmFtcyBhcmUgdXN1YWxseSBcCit1c2VkIGZvciBjcmVhdGluZyBwYXRjaCBmaWxlcy4iCitTRUNUSU9OID0gImJhc2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0CisKKyMgZGlmZnV0aWxzIGFzc3VtZXMgbm9uLWdsaWJjIGNvbXBpbGF0aW9uIHdpdGggdWNsaWJjIGFuZAorIyB0aGlzIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBpdHMgb3duIGltcGxlbWVudGF0aW9ucyBvZgorIyBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LiAgcmVnZXguYyBhY3R1YWxseSBicmVha3MgY29tcGlsYXRpb24KKyMgYmVjYXVzZSBpdCB1c2VzIF9fbWVtcGNweSwgdGhlcmUgYXJlIG90aGVyIHRoaW5ncyAoVEJEOgorIyBzZWUgZGlmZnV0aWxzLm1rIGluIGJ1aWxkcm9vdCkKK0VYVFJBX09FQ09ORl9saWJjLXVjbGliYyA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImRpZmYgY21wIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzIuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYgpAQCAtMCwwICsxLDE2IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCityZXF1aXJlIGRpZmZ1dGlscy5pbmMKKworUFIgPSAicjcuMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MWY5YzVhZTE5YjYwNjA4ZjZjN2YxNjJkYTg2YTQyOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNTAwMTc0OGIwNjkyMjRkZDk4YmYxYmI5ZWU4NzczMjFjN2RlOGIzMzJjOGFhZDVhZjNlMmE3MzcyZDIzZjVhIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY2htb2QgdSt3ICR7U30vcG8vTWFrZWZpbGUuaW4uaW4KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDA4NjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiCkBAIC0wLDAgKzEsMzcgQEAKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK3JlcXVpcmUgZGlmZnV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgTmVlZCB0byByZW1vdmUgZ2V0dGV4dCBtYWNyb3Mgd2l0aCB3ZWlyZCBtaXggb2YgdmVyc2lvbnMKKwlmb3IgaSBpbiBjb2Rlc2V0Lm00IGdldHRleHRfZ2wubTQgaW50bG1hY29zeC5tNCBpbnR0eXBlcy1wcmkubTQgbGliLWxkX2dsLm00IGxpYi1wcmVmaXhfZ2wubTQgcG9fZ2wubTQgc3NpemVfdC5tNCB3Y2hhcl90Lm00IHdpbnRfdC5tNDsgZG8KKwkJcm0gLWYgJHtTfS9tNC8kaQorCWRvbmUKK30KKworU1JDX1VSSVttZDVzdW1dID0gIjk5MTgwMjA4ZWMyYTgyY2U3MWY1NWIwZDczODlmMWIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyNWU4OWE4YWI2NWZkZWQxNzMxZTQxODZiZTFiYjI1Y2RhOTY3ODM0YjZkZjk3MzU5OWNkY2Q1YWJkZmMxOWMiCisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAtRCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAkdC9idWlsZC1hdXgvdGVzdC1kcml2ZXIKKwljcCAtciAke1N9L3Rlc3RzICR0LworCWluc3RhbGwgJHtCfS90ZXN0cy9NYWtlZmlsZSAkdC90ZXN0cy8KKwlzZWQgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgXAorCSAgICAtZSAnc3xiYXNofHNofCcgXAorCSAgICAtZSAnc3xedG9wX3NyY2RpciA9IFwoLipcKXx0b3Bfc3JjZGlyID0gLi5cL3wnIFwKKwkgICAgLWUgJ3N8XnNyY2RpciA9IFwoLipcKXxzcmNkaXIgPSAufCcgXAorCSAgICAtZSAnc3wiYCQoYnVpbHRfcHJvZ3JhbXMpYCJ8ZGlmZnwnIFwKKwkgICAgLWUgJ3N8Z2F3a3xhd2t8ZycgXAorCSAgICAtaSAkdC90ZXN0cy9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzAuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzZTYzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8wLjUuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmRkZDUzMzVlZjk2ZmI4NThhMTM4MjMwYWY3NzM3MTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTM2ZDRiODVlNWFlOTAyOGU5MThkMWNjNzc1YzI0NzVlIgorCitQUiA9ICJyMiIKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9lZC9lZC0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGVlMjFlOWRjYzliNWI2MDEyYzIzMDM4NzM0ZTE2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRlZjJiYmRlMGZiZjBkODgyMzI3ODJhMGVkZWQzMjNmNDgzYTA1MTlkNmZkZTlhM2IxODA5MDU2ZmQzNWYzZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiJ0NDPSR7Q0N9JyAnQ1hYPSR7Q1hYfScgJ0NGTEFHUz0ke0NGTEFHU30nICdDWFhGTEFHUz0ke0NYWEZMQUdTfScgJ0NQUEZMQUdTPSR7Q1BQRkxBR1N9JyAnTERGTEFHUz0ke0xERkxBR1N9JyIKKworQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZycsICcgJyl9IgorQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtc2lsZW50LXJ1bGVzJywgJyAnKX0iCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuOS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5NGVlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjkuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9lZC5oO2VuZGxpbmU9MjA7bWQ1PTM3NWEyMGNjMjU0NWFjMTExNWVlYjdiMzIzYzYwYWUzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTE3O21kNT0xNGRiYjMyNWMxZjJkNGRhZjUwZTBhYTVjNTAzOGU5NiIKKworU0VDVElPTiA9ICJiYXNlIgorCisjIExTQiBzdGF0ZXMgdGhhdCBlZCBzaG91bGQgYmUgaW4gL2Jpbi8KK2JpbmRpciA9ICIke2Jhc2VfYmluZGlyfSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2VkL2VkLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU2NWI2ZDFkNWE5YTg4MTZiOWIzMDRmYzRlZDk0MDVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ1YjM3MmNmYWRmMDczMDAxODIzNzcyMjcyZmNlYWMyY2ZhODc1NTJjNWNkNWE4ZWZjMWM4YWFlNjFmNDVhODgiCisKK2luaGVyaXQgdGV4aW5mbworCitkb19jb25maWd1cmUoKSB7CisJJHtTfS9jb25maWd1cmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2NjI2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorcHRlc3QgbmVlZHMgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMuCitzZXJpYWwtdGVzdHMgaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhvc2UgdGFyZ2V0cy4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKyhkZWZhdWx0IGF1dG9tYWtlIGJlaGF2aW9yIGluY29tcGF0aWJsZSB3aXRoIHB0ZXN0KQorCitkaWZmIC1ydU4gYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTI4IDE4OjE5OjEzLjUxMzk4MDk3NyArMDIwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTQtMDUtMjggMTg6MTk6MjEuMTI5NjYwMjE1ICswMjAwCitAQCAtMiw3ICsyLDcgQEAKKyBBQ19JTklUKGV0aHRvb2wsIDMuMTQsIG5ldGRldkB2Z2VyLmtlcm5lbC5vcmcpCisgQUNfUFJFUkVRKDIuNTIpCisgQUNfQ09ORklHX1NSQ0RJUihbZXRodG9vbC5jXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtnbnVdKQorK0FNX0lOSVRfQVVUT01BS0UoW2dudSBzZXJpYWwtdGVzdHNdKQorIEFDX0NPTkZJR19IRUFERVJTKFtldGh0b29sLWNvbmZpZy5oXSkKKyAKKyBBTV9NQUlOVEFJTkVSX01PREUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyNDVkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmMmIxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiRGlzcGxheSBvciBjaGFuZ2UgZXRoZXJuZXQgY2FyZCBzZXR0aW5ncyIKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgdXRpbGl0eSBmb3IgZXhhbWluaW5nIGFuZCB0dW5pbmcgdGhlIHNldHRpbmdzIG9mIHlvdXIgZXRoZXJuZXQtYmFzZWQgbmV0d29yayBpbnRlcmZhY2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ldGh0b29sLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YzE5YjMwNTQ4YzU4MjU3N2ZjNmI0NDM2MjZmYzEyMTYiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvZXRodG9vbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGExYzc4Nzg3YzdkY2YwNzcwMTZlZDg2MzcyYTQ3MmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTIwMDUxNjcyN2NjOTU4M2U4YjYzZmQ2ZTcyZjY2N2Y5ZWQ0MWJiNGYwNTc3ZmY0ODAzYjYwYzY0Y2ZkMWRiYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICBjcCAke0J9L01ha2VmaWxlICAgICAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L3Rlc3QtY21kbGluZSAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS90ZXN0LWZlYXR1cmVzICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vZXRodG9vbCAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9ldGh0b29sCisgICBzZWQgLWkgJ3MvXk1ha2VmaWxlL19NYWtlZmlsZS8nICAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNzZlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAzM2NiYTI0Y2JhN2IwOTczYTcwMmU5NjI3YmQ1YjkzOTYyOTQ4YWU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTY6MTE6MTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZmluZHV0aWxzOiBmaXggZG9jIGJ1aWxkIGVycm9yCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9maW5kLnRleGkgfCAgICA2ICsrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2ZpbmQudGV4aSBiL2RvYy9maW5kLnRleGkKK2luZGV4IDViNWYwY2YuLmIzZDljNmIgMTAwNjQ0CistLS0gYS9kb2MvZmluZC50ZXhpCisrKysgYi9kb2MvZmluZC50ZXhpCitAQCAtNjMsNyArNjMsNyBAQCB0cmFuc2xhdGlvbiBhcHByb3ZlZCBieSB0aGUgRm91bmRhdGlvbi4KKworIEBwYWdlCisgQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorLUBpbnNlcnRjb3B5aW5ne30KKytAaW5zZXJ0Y29weWluZworIEBlbmQgdGl0bGVwYWdlCisKKyBAY29udGVudHMKK0BAIC0xNDY2LDYgKzE0NjYsNyBAQCBubyBvdXRwdXQgaXMgZXZlciBzZW50IHRvIGl0LgorICogRXNjYXBlczo6CisgKiBGb3JtYXQgRGlyZWN0aXZlczo6CisgKiBUaW1lIEZvcm1hdHM6OgorKyogRm9ybWF0dGluZyBGbGFnczo6CisgQGVuZCBtZW51CisKKyBAbm9kZSBFc2NhcGVzCitAQCAtMTUzNCw3ICsxNTM1LDYgQEAgZnJvbSB0aGUgbm92ZWwgeW91IGFyZSByZWFkaW5nLgorICogU2l6ZSBEaXJlY3RpdmVzOjoKKyAqIExvY2F0aW9uIERpcmVjdGl2ZXM6OgorICogVGltZSBEaXJlY3RpdmVzOjoKKy0qIEZvcm1hdHRpbmcgRmxhZ3M6OgorIEBlbmQgbWVudQorCisgQG5vZGUgTmFtZSBEaXJlY3RpdmVzCitAQCAtMTc4MCw3ICsxNzgwLDcgQEAgc2V0dGluZyB0aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUpLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb24uCisgQGVuZCB0YWJsZQorCisgQG5vZGUgRm9ybWF0dGluZyBGbGFncworLUBzdWJzdWJzZWN0aW9uIEZvcm1hdHRpbmcgRmxhZ3MKKytAc3Vic2VjdGlvbiBGb3JtYXR0aW5nIEZsYWdzCisKKyBUaGUgQHNhbXB7JW19IGFuZCBAc2FtcHslZH0gZGlyZWN0aXZlcyBzdXBwb3J0IHRoZSBAc2FtcHsjfSwgQHNhbXB7MH0KKyBhbmQgQHNhbXB7K30gZmxhZ3MsIGJ1dCB0aGUgb3RoZXIgZGlyZWN0aXZlcyBkbyBub3QsIGV2ZW4gaWYgdGhleQorLS0KKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDBkZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmluOjc1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjIuMzEub3JpZy9jb25maWd1cmUuaW4KKysrKyBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorQEAgLTcyLDcgKzcyLDYgQEAgZG5sIGdsX0VBUkxZIGNhbGxzIEFDX0dOVV9TT1VSQ0UgYW55d2F5LgorIAorIAorIEFDX0lTQ19QT1NJWAorLUFNX0NfUFJPVE9UWVBFUworIAorIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfUkFOTElCCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YmQ2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaApAQCAtMCwwICsxLDU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCit0aGUgb2xkIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB3b24ndCB3b3JrIHdpdGggQUNfR05VX1NPVVJDRQorCithZ2FpbnN0IDQuMi4zMQorMDcvMDgvMjAxMCAtIHFoZQorCitkaWZmIC0tZ2l0IGEvZ251bGliL200L2V4dGVuc2lvbnMubTQgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAoraW5kZXggMTQzYTllNS4uMGYyN2NlYiAxMDA2NDQKKy0tLSBhL2dudWxpYi9tNC9leHRlbnNpb25zLm00CisrKysgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M4NGNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiZmluZCwgbG9jYXRlLCBhbmQgeGFyZ3MgYmluYXJpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIEZpbmQgVXRpbGl0aWVzIGFyZSB0aGUgYmFzaWMgZGlyZWN0b3J5IHNlYXJjaGluZyB1dGlsaXRpZXMgb2YgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLiBcCitUaGVzZSBwcm9ncmFtcyBhcmUgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBwcm9ncmFtcyB0byBwcm92aWRlIG1vZHVsYXIgYW5kIHBvd2VyZnVsIGRpcmVjdG9yeSBcCitzZWFyY2ggYW5kIGZpbGUgbG9jYXRpbmcgY2FwYWJpbGl0aWVzIHRvIG90aGVyIGNvbW1hbmRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9maW5kdXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9ncm91cD1maW5kdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKworU1JDX1VSSSA9ICJmdHA6Ly9hbHBoYS5nbnUub3JnL2dudS8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmaW5kIHhhcmdzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCisjIGRpZmZ1dGlscyBhc3N1bWVzIG5vbi1nbGliYyBjb21waWxhdGlvbiB3aXRoIHVjbGliYyBhbmQKKyMgdGhpcyBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgaXRzIG93biBpbXBsZW1lbnRhdGlvbnMgb2YKKyMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eS4gIHJlZ2V4LmMgYWN0dWFsbHkgYnJlYWtzIGNvbXBpbGF0aW9uCisjIGJlY2F1c2UgaXQgdXNlcyBfX21lbXBjcHksIHRoZXJlIGFyZSBvdGhlciB0aGluZ3MgKFRCRDoKKyMgc2VlIGRpZmZ1dGlscy5tayBpbiBidWlsZHJvb3QpCitFWFRSQV9PRUNPTkZfbGliYy11Y2xpYmMgPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI5ZTFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjUuMTQub3JpZy9nbC9saWIvTWFrZWZpbGUuYW0KKysrKyBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorQEAgLTEyMjAsNyArMTIyMCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZTAxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuMi4zMS5iYgpAQCAtMCwwICsxLDE0IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorUFIgPSAicjQiCisKK3JlcXVpcmUgZmluZHV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMGUzMWEwZjE4YTQ5NzA5YmY1YTQ0OTg2N2M4MDQ5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMGQzNGI4ZmFjYTBiM2NjYTA3MDNmNmM2YjQ5OGFmYmU3MmYwYmExNmMzNTk4MGMxMGVjOWVmNzcyNGQ2MjA0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGE4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjUuMTQuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBmaW5kdXRpbHMuaW5jCisKKyMgR1BMdjIrICg8PCA0LjIuMzIpLCBHUEx2MysgKD49IDQuMi4zMikKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkiCisgCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOGE4MTc2MjgyZmQyOGU4ZDEyMzRjODRkODQ3ZmE2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZGUzY2Y2MjVhNWM5ZjE1NGVlZTMxNzFlMDcyNTE1ZmZkZGU0MDUyNDRkZDAwNTAyYWY2MTdhYzU3YjczYWUyIgorCisjIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzI3Mjk5CitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgJ2dsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz15ZXMnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfU09SVD0ke2JpbmRpcn0vc29ydCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTBjOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiT3BlblByaW50aW5nIHByaW50ZXIgc3VwcG9ydCAtIGZpbHRlcnMiCitERVNDUklQVElPTiA9ICJGb29tYXRpYyBpcyBhIHByaW50ZXIgZGF0YWJhc2UgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2V0IHVwIFwKK2NvbW1vbiBwcmludGVycyBmb3IgdXNlIHdpdGggVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLlwKK0l0IHByb3ZpZGVzIHRoZSAiZ2x1ZSIgYmV0d2VlbiBhIHByaW50IHNwb29sZXIgKGxpa2UgQ1VQUyBvciBscHIpIGFuZCBcCit0aGUgcHJpbnRlciwgYnkgcHJvY2Vzc2luZyBmaWxlcyBzZW50IHRvIHRoZSBwcmludGVyLiBcCisgXAorVGhpcyBwYWNrYWdlIGNvbnNpc3RzIG9mIGZpbHRlcnMgdXNlZCBieSB0aGUgcHJpbnRlciBzcG9vbGVycyBcCit0byBjb252ZXJ0IHRoZSBpbmNvbWluZyBQb3N0U2NyaXB0IGRhdGEgaW50byB0aGUgcHJpbnRlcidzIG5hdGl2ZSBcCitmb3JtYXQgdXNpbmcgYSBwcmludGVyLXNwZWNpZmljLCBidXQgc3Bvb2xlci1pbmRlcGVuZGVudCBQUEQgZmlsZS4gXAorIgorCitERVBFTkRTICs9ICJjdXBzIHBlcmwgbGlieG1sMiIKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vZm9vbWF0aWMtZmlsdGVycy0ke1BWfS9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5wcmludGluZy5vcmcvZG93bmxvYWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDVmNWRjYmZlMzU5ZjE5OGVlZjNkZjViMjgzZDg5NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMmUyZTUzZTUwMjU3MWU4OGVlYjkwMTBjNDVhMGQ1NDY3MWYxNTcwN2VlMTA0ZjVjOWMyMmI1OWVhN2EzM2UzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZmlsZS1jb252ZXJ0ZXItY2hlY2sgLS13aXRoLWZpbGUtY29udmVydGVyPXRleHR0b3BzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBleHBvcnQgUEVSTD0iJHtiaW5kaXJ9L2VudiBwZXJsIgorICAgIGV4cG9ydCBDVVBTX1NFUlZFUkJJTj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyAgICAgICAjIC91c3IvbGliIE5PVCBsaWJkaXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzL2ZpbHRlcgorICAgIGxuIC1zZiAke2JpbmRpcn0vZm9vbWF0aWMtcmlwICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy9maWx0ZXIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzLyAke2V4ZWNfcHJlZml4fS9saWIvcHByLyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTc5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5hYzoxMjc6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6MTI3OiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorLi4uCit8IE1ha2VmaWxlLmFtOjI3OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9jb25maWd1cmUuYWMKKysrKyBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworQEAgLTEyNCw3ICsxMjQsNiBAQCBmaQorIAorIGRubCBjaGVjayBmb3IgQyBjb21waWxlciBmb3IgYXV0b21ha2UKKyBBTV9QUk9HX0NDX1NUREMKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBkbmwgQ3lnd2luIGRvZXNuJ3QgbGlrZSB0byBnZXQgbGlicyB3aXRoIGZ1bGwgcGF0aHMKKyBkbmwgc2luY2UgdGhhdCBvdmVycmlkZXMgbGlua2luZyBhZ2FpbnN0IERMTHMuCitJbmRleDogZ2F3ay0zLjEuNS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9NYWtlZmlsZS5hbQorKysrIGdhd2stMy4xLjUvTWFrZWZpbGUuYW0KK0BAIC0yNCw3ICsyNCw3IEBACisgIyMgcHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBBdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBpZiBuZWVkZWQsIG1ha2UgLmJ6MiBmaWxlcyBhbHNvLgorLUFVVE9NQUtFX09QVElPTlMgPSBhbnNpMmtuciBkaXN0LWJ6aXAyCisrQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIKKyAKKyAjIFRoaXMgdW5kb2N1bWVudGVkIHZhcmlhYmxlIGluc3VyZXMgdGhhdCBhY2xvY2FsIHJ1bnMKKyAjIGNvcnJlY3RseSBhZnRlciBjaGFuZ2luZyBjb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay00LjEuMy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzZjBiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0Citmb3IgaSBpbiBgZ3JlcCAtdkUgIkB8XiR8I3xHdC1kdW1teSIgTWFrZXRlc3RzIHxhd2sgLUY6ICd7cHJpbnQgJDF9J2A7IFwKKyAgZG8gTENfQUxMPSR7R0FXS0xPQ0FMRTotQ30gTEFORz0ke0dBV0tMT0NBTEU6LUN9IHNyY2Rpcj1gcHdkYCBBV0s9Z2F3ayBDTVA9Y21wIFwKKyAgbWFrZSAtZiBNYWtldGVzdHMgJGkgPiRpLnRtcCAyPiYxOyBcCisgIGdyZXAgLXEgIkVycm9yIiAkaS50bXA7IFwKKyAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gIkZBSUw6ICRpIjsgXAorICBlbHNlIGVjaG8gIlBBU1M6ICRpIjsgcm0gLWYgJGkudG1wOyBmaTsgXAorZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhZjRhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgYXdrIHRleHQgcHJvY2Vzc2luZyB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSB2ZXJzaW9uIG9mIGF3aywgYSB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eS4gXAorQXdrIGludGVycHJldHMgYSBzcGVjaWFsLXB1cnBvc2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gZG8gXAorcXVpY2sgYW5kIGVhc3kgdGV4dCBwYXR0ZXJuIG1hdGNoaW5nIGFuZCByZWZvcm1hdHRpbmcgam9icy4iCitIT01FUEFHRSA9ICJ3d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrIgorQlVHVFJBQ0tFUiAgPSAiYnVnLWdhd2tAZ251Lm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyBnYXdrIDw9IDMuMS41OiBHUEx2MgorIyBnYXdrID49IDMuMS42OiBHUEx2MworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitSREVQRU5EU19nYXdrICs9ICJnYXdrLWNvbW1vbiIKK1JERVBFTkRTX3BnYXdrICs9ICJnYXdrLWNvbW1vbiIKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2F3ay9nYXdrLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDc2MDMyNTQ4OTQ3OWNhYzE3ZmUwMTE0YjhmNjJmMzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYzZGNiOWQwY2EzOThiMWQ0ZjVhMzMyZjZjZDljZWM1NjQ0MTI2NWZjYTYxNmYyZWExYjQ0ZDQ1OWU5ZjBmOCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUEFDS0FHRVMgKz0gImdhd2stY29tbW9uIHBnYXdrIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ2F3ayogJHtiaW5kaXJ9L2lnYXdrIgorRklMRVNfZ2F3ay1jb21tb24gKz0gIiR7ZGF0YWRpcn0vYXdrLyogJHtsaWJkaXJ9L2dhd2svYXdrLyoiCitGSUxFU19wZ2F3ayA9ICIke2JpbmRpcn0vcGdhd2sqIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2F3ay9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQ0ZMQUdTICs9ICItRCBQUk9UT1RZUEVTIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHJlbW92ZSB0aGUgbGluayBzaW5jZSB3ZSBkb24ndCBwYWNrYWdlIGl0CisJcm0gJHtEfSR7YmluZGlyfS9hd2sKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfNC4xLjMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTg4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS4zLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiR05VIGF3ayB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgdmVyc2lvbiBvZiBhd2ssIGEgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkuIFwKK0F3ayBpbnRlcnByZXRzIGEgc3BlY2lhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGRvIFwKK3F1aWNrIGFuZCBlYXN5IHRleHQgcGF0dGVybiBtYXRjaGluZyBhbmQgcmVmb3JtYXR0aW5nIGpvYnMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrLyIKK0JVR1RSQUNLRVIgID0gImJ1Zy1nYXdrQGdudS5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgZ2F3ayA8PSAzLjEuNTogR1BMdjIKKyMgZ2F3ayA+PSAzLjEuNjogR1BMdjMKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworREVQRU5EUyArPSAicmVhZGxpbmUiCisKK1BBQ0tBR0VDT05GSUdbbXBmcl0gPSAiLS13aXRoLW1wZnIsLS13aXRob3V0LW1wZnIsIG1wZnIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nYXdrL2dhd2stJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NWQzN2Y0MDY5NTAyNjc3ZjI1ZDEzNDBkZjhlZWM5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MjRlZmZhNWI5ZWNkNGVkOTQwZjI1ODFjNWQzYzFkZjRlNGJkN2U2Zjc2OGFhMDMzYzE5MTZmNDdkZmM2ZTI5IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hd2siCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyByZW1vdmUgdGhlIGxpbmsgc2luY2Ugd2UgZG9uJ3QgcGFja2FnZSBpdAorCXJtICR7RH0ke2JpbmRpcn0vYXdrCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZm9yIGkgaW4gYGdyZXAgLXZFICJAfF4kfCN8R3QtZHVtbXkiICR7U30vdGVzdC9NYWtldGVzdHMgfGF3ayAtRjogJ3twcmludCAkMX0nYCBNYWtldGVzdHM7IFwKKwkgIGRvIGNwICR7U30vdGVzdC8kaSogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FhcmNoNjQvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAzCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgOAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybS9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3NzJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm1lYi9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtZWIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTA5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtZWIvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAxCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3ZDRlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2Jhc2UvZ2VuaHQuYzogYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSB0byBhbGxvdyBmb3BlbiBjYWxsaW5nCisKK1RoZSBjb21taXQgaW4gdXBzdHJlYW06CitodHRwOi8vZ2l0Lmdob3N0c2NyaXB0LmNvbS8/cD1naG9zdHBkbC5naXQ7YT1jb21taXRkaWZmO2g9NzczYzY5ZTQ2ZTcwYmRkNTQ4MjY3NjQzN2RhZmQyY2E4MzM5NzY0MworCitSZXBsYWNlIGFsbCBmb3BlbiBjYWxscyB3aXRoIGdwX2ZvcGVuIGFuZCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHNvCit0aGF0IGFueSB1bmludGVudGlhbCBjYWxscyBkaXJlY3RseSB0byBmb3BlbiB3aWxsIGNhdXNlIGFuIGVycm9yLgorCitPbmx5IGV4Y2VwdGlvbnMgYXJlIHRob3NlIGluIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLCBhbmQgbWtyb21mcy5jLgorVGhpcyBwYXRjaCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHRvIGFsbG93IGZvcGVuIGNhbGxpbmcgaW4gYmFzZS9nZW5odC5jLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFzZS9nZW5odC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYmFzZS9nZW5odC5jIGIvYmFzZS9nZW5odC5jCitpbmRleCA0YjA0MDg1Li5jYzgyZmZmIDEwMDY0NAorLS0tIGEvYmFzZS9nZW5odC5jCisrKysgYi9iYXNlL2dlbmh0LmMKK0BAIC0xNiw2ICsxNiwxMCBAQAorIAorIC8qIEdlbmVyYXRlIEMgY29kZSBmb3IgY29tcGlsaW5nIGhhbGZ0b25lcyBpbnRvIFJPTS4gKi8KKyAjaW5jbHVkZSAibWFsbG9jXy5oIgorKworKy8qIHByZXZlbnQgZ3AuaCBmcm9tIGRlZmluaW5nIGZvcGVuICovCisrI2RlZmluZSBmb3BlbiBmb3BlbgorKworICNpbmNsdWRlICJzdGRpb18uaCIKKyAjaW5jbHVkZSAic3RyaW5nXy5oIgorICNpbmNsdWRlICJnc2NkZWZzLmgiCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzkzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvY3Vwcy1uby1nY3J5cHQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorU3ViamVjdDogW1BBVENIXSBEb24ndCBidWlsZC1kZXBlbmQgb24gbGliZ2NyeXB0LCBhcyBub3RoaW5nIGlzIHVzZWQgZnJvbSBpdAorCitCYWNrcG9ydGVkIGZyb20gaHR0cDovL3d3dy5jdXBzLm9yZy9zdHJmaWxlcy5waHAvMzMwOC9jdXBzLW5vLWdjcnlwdC5wYXRjaAorCitUaGlzIGFkZHJlc3NlcyB0aGUgY3J5dG8gZGVwZW5kZW5jeSBzZWVuIGR1cmluZyBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorCitSZWJhc2UgdGhlIHBhdGNoIHRvIGdob3N0c2NyaXB0LTkuMTUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGN1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK2luZGV4IDk5YTg1YzMuLmE2NzQ4NTIgMTAwNjQ0CistLS0gYS9jdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaAorKysrIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK0BAIC04MCw3ICs4MCw2IEBAIHR5cGVkZWYgaW50IHNvY2tsZW5fdDsKKyAjICBlbGlmIGRlZmluZWQgSEFWRV9HTlVUTFMKKyAjICAgIGluY2x1ZGUgPGdudXRscy9nbnV0bHMuaD4KKyAjICAgIGluY2x1ZGUgPGdudXRscy94NTA5Lmg+CistIyAgICBpbmNsdWRlIDxnY3J5cHQuaD4KKyAjICBlbGlmIGRlZmluZWQoSEFWRV9DRFNBU1NMKQorICMgICAgaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyAjICAgIGluY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGE5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ltcG9ydCBwYXRjaCBmcm9tIHdpbmRyaXZlciBsaW51eCBmb3IgY3Jvc3MgY29tcGlsYXRpb24sIGFuZCBzcGxpdCBwYXRjaGVzCitpbnRvIG9lIHdheSB1bmRlciBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgc3VjaCBhcyBpNTg2LCBwb3dlcnBjIGV0YyBhY2NvcmRpbmcgCit0byBSaWNoYXJkJ3Mgb3Bpbmlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CisKKyMgQXV0aG9yOiBDaGkgWHUgPGNoaS54dUB3aW5kcml2ZXIuY29tPgorIyBEYXRlOiBGZWIgMjYgMjAxMAorIyBTdW1tYXJ5OiBHZW5lcmF0ZSBhcmNoLmggZm9yIHBwYzMyCisjCisKK2RpZmYgLU5ydSBnaG9zdHNjcmlwdC04LjY0Lm9yaWcvYmFzZS9saWIubWFrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCistLS0gZ2hvc3RzY3JpcHQtOC42NC5vcmlnL2Jhc2UvbGliLm1hawkyMDEwLTAyLTEwIDEwOjMwOjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCTIwMTAtMDItMTAgMTA6NTY6MjEuMDAwMDAwMDAwICswODAwCitAQCAtNjcsOCArNjcsOCBAQAorIHN0ZHByZV9oPSQoR0xTUkMpc3RkcHJlLmggJChzdGRwbl9oKQorIHN0ZGludF9faD0kKEdMU1JDKXN0ZGludF8uaCAkKHN0ZF9oKQorIAorLSQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorLQkkKEVYUCkkKEdFTkFSQ0hfWEUpICQoR0xHRU4pYXJjaC5oICQoVEFSR0VUX0FSQ0hfRklMRSkKKysjIyQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorKyMjCSQoRVhQKSQoR0VOQVJDSF9YRSkgJChHTEdFTilhcmNoLmggJChUQVJHRVRfQVJDSF9GSUxFKQorIAorICMgUGxhdGZvcm0gaW50ZXJmYWNlcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyOWJlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK3VzdCB1c2UgY29tbWFuZHMgcHJvdmlkZWQgYnkgZ2hvc3RzY3JpcHQtbmF0aXZlLCBwcmV2ZW50aW5nIHJlY29tcGlsZSB0aGVtIHdoZW4KK2NvbXBpbGUgZ2hvc3RzY3JpcHQuCitXYXkgdG8gZW5hYmxlIGNyb3NzIGNvbXBpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYmFzZS91bml4LWF1eC5tYWsgYi9iYXNlL3VuaXgtYXV4Lm1haworaW5kZXggYTkxZmIyNi4uYzk5MWQxMSAxMDA2NDQKKy0tLSBhL2Jhc2UvdW5peC1hdXgubWFrCisrKysgYi9iYXNlL3VuaXgtYXV4Lm1haworQEAgLTY5LDQ2ICs2OSw0NiBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuYyAkKHN0ZGlvX19oKSAkKHRpbWVfX2gpICQoQUspXAorICAkKE1BS0VESVJTKQorIAkkKEdMQ0MpICQoR0xPXylncF9zeXN2LiQoT0JKKSAkKENfKSAkKEdMU1JDKWdwX3N5c3YuYworIAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCistCistJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIE9uIHRoZSBSUy82MDAwIChhdCBsZWFzdCksIGNvbXBpbGluZyBnZW5hcmNoLmMgd2l0aCBnY2Mgd2l0aCAtTworLSMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgorLSQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkRFVl9YRSkgJChHTFNSQylnZW5kZXYuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CistIyB3aGljaCBtZWFucyB0aGF0IHRoZSBta3JvbWZzIGJ1aWxkIGNhbid0IGZpbmQgdGhlIHpsaWIgc291cmNlIGl0IG5lZWRzLgorLSMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKy1NS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQorLQorLSMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCistTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAorLSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQorLQorLSQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1BS0VESVJTKQorLQkkKENQXykgJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUtST01GU19YRSkKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgcHJvZ3JhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKysjCisrIyQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoRUNIT0dTX1hFKSAkKEdMU1JDKWVjaG9ncy5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KKysjIyBwcm9kdWNlcyBhIGJ1Z2d5IGV4ZWN1dGFibGUuCisrIyQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CisrIyMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KKysjIyBTbyBpdCdzIHNwbGl0IGludG8gdHdvIHRhcmdldHMsIG9uZSB1c2luZyB0aGUgemxpYiBzb3VyY2UgZGlyZWN0bHkuLi4uLgorKyNNS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopICQoQVVYKW1lbWVudG8uJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIC4uLi4gYW5kIG9uZSB1c2luZyB0aGUgemxpYiBsaWJyYXJ5IGxpbmtlZCB2aWEgdGhlIGNvbW1hbmQgbGluZQorKyNNS1JPTUZTX09CSlNfMT0kKEFVWClnc2NkZWZzLiQoT0JKKSBcCisrIyAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzEgJChNS1JPTUZTX09CSlNfMSkgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKysjCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQorIAorICMgUXVlcnkgdGhlIGVudmlyb25tZW50IHRvIGNvbnN0cnVjdCBnY29uZmlnXy5oLgorICMgVGhlc2UgYXJlIGFsbCBkZWZpbmVkIGNvbmRpdGlvbmFsbHkgKGV4Y2VwdCB0aGUgSmFzUEVSIG9uZSksIHNvIHRoYXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2I4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYmUxZTFiMzMxOTFhZmRjZmUzYzJlY2M0ZmYzZTM2MWE1ODU5ZTljNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAzMCBKYW4gMjAxNSAwMDo0MDoyMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjb250cmliLm1hazogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3JtOiBjYW5ub3QgcmVtb3ZlIGAvdXNyL3NoYXJlL2dob3N0c2NyaXB0LzkuMTUvbGliJzogSXMgYSBkaXJlY3RvcnkKKworQ3JlYXRlIGxpYiBiZWZvcmUgaW5zdGFsbCB0byBmaXggdGhlIHJhY2UgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbnRyaWIvY29udHJpYi5tYWsgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250cmliLm1hayBiL2NvbnRyaWIvY29udHJpYi5tYWsKK2luZGV4IDA4YTgwZDEuLmRlMmUyMGQgMTAwNjQ0CistLS0gYS9jb250cmliL2NvbnRyaWIubWFrCisrKysgYi9jb250cmliL2NvbnRyaWIubWFrCitAQCAtOTQ3LDYgKzk0Nyw3IEBAICQoREVWT0JKKWR2aXBybGliLiQoT0JKKSA6ICQoSkFQU1JDKWR2aXBybGliLmMgJChKQVBTUkMpZHZpcHJsaWIuaAorIAkkKERFVkNDKSAkKE9fKSRAICQoQ18pICQoSkFQU1JDKWR2aXBybGliLmMKKyAKKyBleHRyYS1kbXBydC1pbnN0YWxsOgorKwlta2RpciAtcCAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYgorIAkkKElOU1RBTExfREFUQSkgJChKQVBTUkMpZG1wX2luaXQucHMgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxCisgCSQoSU5TVEFMTF9EQVRBKSAkKEpBUFNSQylkbXBfc2l0ZS5wcyAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDEKKyAJJChJTlNUQUxMX0RBVEEpICQoSkFQU1JDKWVzY3BfMjQuc3JjICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliIHx8IGV4aXQgMQorQEAgLTEwODgsNiArMTA4OSw3IEBAICQoREVWT0JKKWdkZXZhbHBzLiQoT0JKKSA6ICQoSkFQU1JDKWdkZXZhbHBzLmMgJChQREVWSCkKKyAjIyMgLS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpb25hbCAudXBwIGZpbGVzIC0tLS0tLS0tLS0tLS0tLS0gIyMjCisgCisgZXh0cmEtdXBwLWluc3RhbGw6CisrCW1rZGlyIC1wICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliCisgCWZvciBmIGluICQoQ09OVFJJQlNSQyl1bmlwcmludCQoRCkqLnVwcDsgZG8gXAorIAkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDE7IFwKKyAJZG9uZQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzg2NDgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNWQ1YzgzYzg5YmUwY2ZmMjlkZGUyMjY3ZmExNjhlNmY3MTQ2YmU4YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCA0IE1heSAyMDE1IDIyOjMxOjQ4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJhc2UvZ2VuZGV2LmM6IGZpeCBmb3IgLVdlcnJvcj1yZXR1cm4tdHlwZQorCitGaXhlZDoKK2Jhc2UvZ2VuZGV2LmM6ODA6MTogZXJyb3I6IHJldHVybiB0eXBlIGRlZmF1bHRzIHRvICdpbnQnIFstV2Vycm9yPXJldHVybi10eXBlXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBiYXNlL2dlbmRldi5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9iYXNlL2dlbmRldi5jIGIvYmFzZS9nZW5kZXYuYworaW5kZXggNjhhNzQ1Zi4uODA1OGI1YSAxMDA2NDQKKy0tLSBhL2Jhc2UvZ2VuZGV2LmMKKysrKyBiL2Jhc2UvZ2VuZGV2LmMKK0BAIC03Nyw2ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICppbmRlbnRfaXRlbSA9ICIiOworIC8qIEZvcndhcmQgZGVmaW5pdGlvbnMgKi8KKyB2b2lkIGFkZF9lbnRyeShjb25maWcgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGJvb2wpOworIAorK2ludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIGNvbmZpZyBjb25mOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTgxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2dob3N0c2NyaXB0LW5hdGl2ZTpmaXggZGlzYWJsZS1zeXN0ZW0tbGlidGlmZgorCitNb2RpZnkgY29uZmlndXJlIHRvIGFkZCB0aGUgY2hlY2sgdG8gbWFrZSBzdXJlCitnaG9zdHNjcmlwIGNvdWxkIHdvcmsgd2hpbGUgc3lzdGVtLWxpYnRpZmYgaXMKK2Rpc2FibGVkLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA1NSw2ICsxMDU1LDcgQEAgRGlzYWJsaW5nIHRpZmYgb3V0cHV0IGRldmljZXMuXSkKKyBlc2FjCisgCisgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorKyAgICBpZiB0ZXN0IC1lICRMSUJUSUZGRElSL2NvbmZpZ3VyZTsgdGhlbgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJSdW5uaW5nIGxpYnRpZmYgY29uZmlndXJlIHNjcmlwdC4uLiIKKyAgICAgICBvbGRkaXI9YHB3ZGAKK0BAIC0xMDY5LDYgKzEwNzAsMTAgQEAgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorICAgICAgIGNkICIkb2xkZGlyIgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJDb250aW51aW5nIHdpdGggR2hvc3RzY3JpcHQgY29uZmlndXJhdGlvbi4uLiIKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19OT1RJQ0UoW0NvdWxkIG5vdCBmaW5kIGxvY2FsIGNvcHkgb2YgbGlidGlmZi4KKytEaXNhYmxpbmcgdGlmZiBvdXRwdXQgZGV2aWNlcy5dKQorKyAgICBmaQorIGZpCisgCisgQUNfU1VCU1QoU0hBUkVfTElCVElGRikKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxN2I3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNTg2L29iamFyY2guaApAQCAtMCwwICsxLDQxIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2k2ODYKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uODdhYWNhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2CkBAIC0wLDAgKzEgQEAKK2k1ODYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzgxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiNjM3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWwvb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWxuMzIvb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsbjMyL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsbjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRuMzIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjkwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC94ODYtNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGFjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYgpAQCAtMCwwICsxLDEwMyBAQAorU1VNTUFSWSA9ICJUaGUgR1BMIEdob3N0c2NyaXB0IFBvc3RTY3JpcHQvUERGIGludGVycHJldGVyIgorREVTQ1JJUFRJT04gPSAiR2hvc3RzY3JpcHQgaXMgdXNlZCBmb3IgUG9zdFNjcmlwdC9QREYgcHJldmlldyBhbmQgcHJpbnRpbmcuICBVc3VhbGx5IGFzIFwKK2EgYmFjay1lbmQgdG8gYSBwcm9ncmFtIHN1Y2ggYXMgZ2hvc3R2aWV3LCBpdCBjYW4gZGlzcGxheSBQb3N0U2NyaXB0IGFuZCBQREYgXAorZG9jdW1lbnRzIGluIGFuIFgxMSBlbnZpcm9ubWVudC4gXAorXAorRnVydGhlcm1vcmUsIGl0IGNhbiByZW5kZXIgUG9zdFNjcmlwdCBhbmQgUERGIGZpbGVzIGFzIGdyYXBoaWNzIHRvIGJlIHByaW50ZWQgXAorb24gbm9uLVBvc3RTY3JpcHQgcHJpbnRlcnMuIFN1cHBvcnRlZCBwcmludGVycyBpbmNsdWRlIGNvbW1vbiBcCitkb3QtbWF0cml4LCBpbmtqZXQgYW5kIGxhc2VyIG1vZGVscy4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMTdjZWE1NDc0MzQzNWFiMmE1ODFjMjM3YmVhMjk0YSIKKworREVQRU5EUyA9ICJnaG9zdHNjcmlwdC1uYXRpdmUgdGlmZiBqcGVnIGZvbnRjb25maWcgY3VwcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSV9CQVNFID0gImh0dHA6Ly9kb3dubG9hZHMuZ2hvc3RzY3JpcHQuY29tL3B1YmxpYy9naG9zdHNjcmlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBcCisiCisKK1NSQ19VUkkgPSAiJHtTUkNfVVJJX0JBU0V9IFwKKyAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqYXJjaC5oIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMtbm8tZ2NyeXB0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke1NSQ19VUklfQkFTRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MjkzMTkzMjViYmRiODNmNWM4MTM3OWE4Zjg2ZjM4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NDZkNzcyODBjY2E4YWZkZDNkNGMyYzEzODllMzMyZWQ5YjA2MDViZDEwN2JjYWFlMWQ3NjFiMDYxZDFhNjhkIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXggLS13aXRoLXN5c3RlbS1saWJ0aWZmIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRwYXRoPSR7ZGF0YWRpcn0vZm9udHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS13aXRoLWN1cHMtc2VydmVyYmluPSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vwcy1kYXRhZGlyPSR7ZGF0YWRpcn0vY3VwcyBcCisgICAgICAgICAgICAgICAgJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctLWVuYWJsZS1saXR0bGUtZW5kaWFuJywgJy0tZW5hYmxlLWJpZy1lbmRpYW4nLCBkKX0gXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwc2VsID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKKworIyBFeHBsaWNpdHkgZGlzYWJsZSBsaWJ0aWZmLCBmb250Y29uZmlnLAorIyBmcmVldHlwZSwgY3VwcyBmb3IgZ2hvc3RzY3JpcHQtbmF0aXZlCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZj1ubyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmlkbiAtLWRpc2FibGUtZm9udGNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mcmVldHlwZSAtLWRpc2FibGUtY3VwcyIKKworIyBUaGlzIGhhcyBiZWVuIGZpeGVkIHVwc3RyZWFtIGJ1dCBmb3Igbm93IHdlIG5lZWQgdG8gc3VidmVydCB0aGUgY2hlY2sgZm9yIHRpbWUuaAorIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQ0MworIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQyNgorQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorQlVJTERfQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgb2JqCisJbWtkaXIgLXAgc29vYmoKKwlpZiBbIC1lICR7V09SS0RJUn0vb2JqYXJjaC5oIF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9vYmphcmNoLmggb2JqL2FyY2guaAorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCSMgY29weSB0b29scyBmcm9tIHRoZSBuYXRpdmUgZ2hvc3RzY3JpcHQgYnVpbGQKKwlpZiBbICIke1BOfSIgIT0gImdob3N0c2NyaXB0LW5hdGl2ZSIgXTsgdGhlbgorCQlta2RpciAtcCBvYmovYXV4IHNvb2JqCisJCWZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisJCQljcCAke1NUQUdJTkdfQklORElSX05BVElWRX0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkgb2JqL2F1eC8kaQorCQlkb25lCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vUmVzb3VyY2UgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCisgICAgY3AgLXIgJHtTfS9pY2Nwcm9maWxlcyAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KK30KKworZG9fY29tcGlsZV9jbGFzcy1uYXRpdmUgKCkgeworICAgIG1rZGlyIC1wIG9iagorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIG9lX3J1bm1ha2Ugb2JqL2F1eC8kaQorICAgIGRvbmUKK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfQorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IG9iai9hdXgvJGkgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfS8kaQorICAgIGRvbmUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmYuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGNlMjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmLmluYwpAQCAtMCwwICsxLDIyIEBACitERVNDUklQVElPTiA9ICJHTlUgZ3BlcmYgaXMgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZ2VuZXJhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dwZXJmIgorU1VNTUFSWSAgPSAiR2VuZXJhdGUgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZnJvbSBhIHNldCBvZiBrZXl3b3JkcyIKK0xJQ0VOU0UgID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmNjO2JlZ2lubGluZT04O2VuZGxpbmU9MTk7bWQ1PWRlYzhmNjExODQ1ZDA0NzM4N2VkNTZiNWI4NWZhOTliIgorCitTUkNfVVJJICA9ICIke0dOVV9NSVJST1J9L2dwZXJmL2dwZXJmLSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBhdXRvcmVjb25mIGNvdWxkbid0IGZpbmQgYWNpbmNsdWRlLm00IHdoZW4gc3RlcHBpbmcgaW50byBzdWJkaXJlY3RvcnkuIEluc3RlYWQgb2YKKyMgZHVwbGljYXRpbmcgYWNpbmNsdWRlLm00IGluIGV2ZXJ5IHN1YmRpcmVjdG9yeSwgdXNlIGFic29sdXRlIGluY2x1ZGUgcGF0aCB0byBhY2xvY2FsCitFWFRSQV9BVVRPUkVDT05GICs9ICIgLUkgJHtTfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisgICAgICAgICAgICAgICAgY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisgICAgICAgIGZpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Mjg4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjMuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworTElDRU5TRSAgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTVmODRhYmIwMDcwYWRmOGEwOTI1ZDdkNTM0YjZlMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uY2M7YmVnaW5saW5lPTg7ZW5kbGluZT0xOTttZDU9NzJhMzAzNGExOWU3MmYwOGVlNDhlZjgyNDRhMTIxZmQiCisKK1BSID0gInIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2MyMGU1ODk3NWEzODA3NTQ0MDQyM2M4ZmI4NWZkMDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMyODc1MjdjOGQ5ZTI3ZTgwMWNmMDgwNDQzNmYzNDk0YmQ1NjlkYjA1ZDQ5ZGNkZDJhOTQyYWU3MmZhOTA1NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYzFmMWRiMzJmYjY1OThkNmE5M2U2ZTg4Nzk2YTg2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzY3MTEyYTIwNDQwN2U2MmRiYzMxMDY2NDdjZjgzOWVkNTQ0ZjNjZjVkMGYwNTIzYWFhMjUwODYyM2FhZDYzZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwOWY1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzCkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQxNDljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Bva3kgU3BlY2lmaWMgdGhpcyBpcyBncGx2MiB2ZXJzaW9uXQorCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdyZXAtMi41LjFhL2RvYy9ncmVwLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2RvYy9ncmVwLnRleGkKKysrKyBncmVwLTIuNS4xYS9kb2MvZ3JlcC50ZXhpCitAQCAtMjg4LDcgKzI4OCw3IEBAIFRoaXMgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGkKKyBQcmludCBhIHVzYWdlIG1lc3NhZ2UgYnJpZWZseSBzdW1tYXJpemluZyB0aGVzZSBjb21tYW5kLWxpbmUgb3B0aW9ucworIGFuZCB0aGUgYnVnLXJlcG9ydGluZyBhZGRyZXNzLCB0aGVuIGV4aXQuCisgCistQGl0ZW14IC0tYmluYXJ5LWZpbGVzPUB2YXJ7dHlwZX0KKytAaXRlbSAtLWJpbmFyeS1maWxlcz1AdmFye3R5cGV9CisgQG9waW5kZXggLS1iaW5hcnktZmlsZXMKKyBAY2luZGV4IGJpbmFyeSBmaWxlcworIElmIHRoZSBmaXJzdCBmZXcgYnl0ZXMgb2YgYSBmaWxlIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgYmluYXJ5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOTE1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBbHdheXMgdXNlIGxvY2FsZS5oIGFzIEhBVkVfTE9DQUxFX0ggaXMgbm8gbG9uZ2VyIGhhbmRsZWQgYnkgLi9jb25maWd1cmUKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIG9sZCB2ZXJzaW9uIHRoYXQgd2lsbCBub3QgYmUgbWFpbnRhaW5lZCBdCitTaWduZWQtb2ZmLWJ5OiBBbGV4IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CisKK2RpZmYgLS1yZWN1cnNpdmUgLS11bmlmaWVkIGdyZXAtMi41LjFhLW9yaWcvbGliL2hhcmQtbG9jYWxlLmMgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMKKy0tLSBncmVwLTIuNS4xYS1vcmlnL2xpYi9oYXJkLWxvY2FsZS5jCTIwMDEtMDMtMDQgMDc6MzM6MTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMJMjAxMy0wMy0xMSAxNzowNTo1Mi4wODY0NDQ4OTEgKzAyMDAKK0BAIC0zOCw5ICszOCw3IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBIQVZFX0xPQ0FMRV9ICisgIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKyAKKyAjaWYgSEFWRV9TVFJJTkdfSAorICMgaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9nZXR0ZXh0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ2V0dGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ2MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ2V0dGV4dC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitFbmFibGUgb3BlcmF0aW9uIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgZ2V0dGV4dC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDEyLzEwLzE5CisKK0luZGV4OiBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU3OjUxLjY0Njk3MDIwNCArMDAwMAorKysrIGdyZXAtMi41LjFhL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU5OjQ5Ljk0Njk2ODgwMyArMDAwMAorQEAgLTE0MCw0ICsxNDAsNCBAQAorIAlBQ19DSEVDS19MSUIocGNyZSwgcGNyZV9leGVjKQorIGZpCisgCistQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaF0pCisrQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWQwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVGhlIHBhdGNoIHRvIGZpeCBDVkUtMjAxMi01NjY3CitSZWZlcmVuY2U6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD02ODY2MDUmYWN0aW9uPWRpZmYKKworTXVsdGlwbGUgaW50ZWdlciBvdmVyZmxvd3MgaW4gR05VIEdyZXAgYmVmb3JlIDIuMTEgbWlnaHQgYWxsb3cKK2NvbnRleHQtZGVwZW5kZW50IGF0dGFja2VycyB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHZpYSB2ZWN0b3JzCitpbnZvbHZpbmcgYSBsb25nIGlucHV0IGxpbmUgdGhhdCB0cmlnZ2VycyBhIGhlYXAtYmFzZWQgYnVmZmVyIG92ZXJmbG93LgorCitodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMi01NjY3CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCitUaGlzIHZlcnNpb24gb2YgR05VIEdyZXAgaGFzIGJlZW4gYWJhbmRvbmVkIHVwc3RyZWFtIGFuZCB0aGV5IGFyZSBubyBsb25nZXIKK2FjY2VwdGluZyBwYXRjaGVzLiAgVGhpcyBpcyBub3QgYSBiYWNrcG9ydC4KKworU2lnbmVkLW9mZi1ieSBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdyZXAuYyB8ICAgIDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzozOTozMy4zNTkxOTE3NjkgKzA4MDAKKysrKyBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzo1MDoyMi42MDkxOTE4ODIgKzA4MDAKK0BAIC0zMDYsNiArMzA2LDExIEBAIGZpbGxidWYgKHNpemVfdCBzYXZlLCBzdHJ1Y3Qgc3RhdHMgY29uc3QKKyAgIGludCBjYyA9IDE7CisgICBjaGFyICpyZWFkYnVmOworICAgc2l6ZV90IHJlYWRzaXplOworKyAgY29uc3Qgc2l6ZV90IG1heF9zYXZlID0gSU5UX01BWCAvIDI7CisrCisrICAvKiBMaW1pdCB0aGUgYW1vdW50IG9mIHNhdmVkIGRhdGEgdG8gSU5UX01BWCB0byBmaXggQ1ZFLTIwMTItNTY2NyAqLworKyAgaWYgKHNhdmUgPiBtYXhfc2F2ZSkKKysgICAgIGVycm9yICgyLCAwLCBfKCJsaW5lIHRvbyBsb25nIikpOworIAorICAgLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgYnVmZmVyIHRvIHN0YXJ0IG9mIG9sZCBzdHVmZgorICAgICAgdGhhdCB3ZSB3YW50IHRvIHNhdmUuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyN2VlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2gKQEAgLTAsMCArMSwxMzQyIEBACitGcm9tIGM4ODRkZDEyZWMwNjI1NjkzMzU3MDI4NDhmYzVmMjlmNDM2YzI4ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBNb24sIDI1IE1heSAyMDE1IDEwOjE1OjU3ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdyZXAgZWdyZXAgZmdyZXA6IEZpeCBMU0IgTkcgY2FzZXMuCisKK1RoZSBMU0IgY29yZSB0ZXN0IHJlcXVpcmVzIGdyZXAgZWdyZXAgYW5kIGZncmVwIGNhbgorcGVyZm9ybSBwYXR0ZXJuIG1hdGNoaW5nIGluIHNlYXJjaGVzIHdpdGhvdXQgcmVnYXJkCit0byBjYXNlIGlmIC1pIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQuCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGxpYi9wb3NpeC9yZWdleC5oIHwgICA0ICsKKyBzcmMvZGZhLmMgICAgICAgICB8ICAyMiArLQorIHNyYy9ncmVwLmMgICAgICAgIHwgIDk2ICsrKystLS0KKyBzcmMvc2VhcmNoLmMgICAgICB8IDgzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDc2OCBpbnNlcnRpb25zKCspLCAxODcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcG9zaXgvcmVnZXguaCBiL2xpYi9wb3NpeC9yZWdleC5oCitpbmRleCA2M2MyZmVmLi43YmIyYjBlIDEwMDY0NAorLS0tIGEvbGliL3Bvc2l4L3JlZ2V4LmgKKysrKyBiL2xpYi9wb3NpeC9yZWdleC5oCitAQCAtMTA5LDYgKzEwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAgICBJZiBub3Qgc2V0LCBceywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCisgI2RlZmluZSBSRV9JTlRFUlZBTFMgKFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSA8PCAxKQorIAorKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisrI2RlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKKysKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICssID8gYW5kIHwgYXJlbid0IHJlY29nbml6ZWQgYXMgb3BlcmF0b3JzLgorICAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KKyAjZGVmaW5lIFJFX0xJTUlURURfT1BTIChSRV9JTlRFUlZBTFMgPDwgMSkKK2RpZmYgLS1naXQgYS9zcmMvZGZhLmMgYi9zcmMvZGZhLmMKK2luZGV4IDU5MGJmYTcuLjI3Yzg3NmEgMTAwNjQ0CistLS0gYS9zcmMvZGZhLmMKKysrKyBiL3NyYy9kZmEuYworQEAgLTQxNCw3ICs0MTQsNyBAQCB1cGRhdGVfbWJfbGVuX2luZGV4ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBpbnQgbGVuKQorIAorIC8qIFRoaXMgZnVuY3Rpb24gZmV0Y2ggYSB3aWRlIGNoYXJhY3RlciwgYW5kIHVwZGF0ZSBjdXJfbWJfbGVuLAorICAgIHVzZWQgb25seSBpZiB0aGUgY3VycmVudCBsb2NhbGUgaXMgYSBtdWx0aWJ5dGUgZW52aXJvbm1lbnQuICAqLworLXN0YXRpYyB3Y2hhcl90Cisrc3RhdGljIHdpbnRfdAorIGZldGNoX3djIChjaGFyIGNvbnN0ICplb2ZlcnIpCisgeworICAgd2NoYXJfdCB3YzsKK0BAIC00MjMsNyArNDIzLDcgQEAgZmV0Y2hfd2MgKGNoYXIgY29uc3QgKmVvZmVycikKKyAgICAgICBpZiAoZW9mZXJyICE9IDApCisgCWRmYWVycm9yIChlb2ZlcnIpOworICAgICAgIGVsc2UKKy0JcmV0dXJuIC0xOworKwlyZXR1cm4gV0VPRjsKKyAgICAgfQorIAorICAgY3VyX21iX2xlbiA9IG1icnRvd2MoJndjLCBsZXhwdHIsIGxleGxlZnQsICZtYnMpOworQEAgLTQ1OSw3ICs0NTksNyBAQCBmZXRjaF93YyAoY2hhciBjb25zdCAqZW9mZXJyKQorIHN0YXRpYyB2b2lkCisgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyB7CistICB3Y2hhcl90IHdjLCB3YzEsIHdjMjsKKysgIHdpbnRfdCB3Yywgd2MxLCB3YzI7CisgCisgICAvKiBXb3JrIGFyZWEgdG8gYnVpbGQgYSBtYl9jaGFyX2NsYXNzZXMuICAqLworICAgc3RydWN0IG1iX2NoYXJfY2xhc3NlcyAqd29ya19tYmM7CitAQCAtNDk2LDcgKzQ5Niw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgICAgIHdvcmtfbWJjLT5pbnZlcnQgPSAwOworICAgZG8KKyAgICAgeworLSAgICAgIHdjMSA9IC0xOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKysgICAgICB3YzEgPSBXRU9GOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKyAKKyAgICAgICAvKiBOb3RlIHRoYXQgaWYgd2UncmUgbG9va2luZyBhdCBzb21lIG90aGVyIFs6Li4uOl0gY29uc3RydWN0LAorIAkgd2UganVzdCB0cmVhdCBpdCBhcyBhIGJ1bmNoIG9mIG9yZGluYXJ5IGNoYXJhY3RlcnMuICBXZSBjYW4gZG8KK0BAIC01ODYsNyArNTg2LDcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJCSAgICAgIHdvcmtfbWJjLT5jb2xsX2VsZW1zW3dvcmtfbWJjLT5uY29sbF9lbGVtcysrXSA9IGVsZW07CisgCQkgICAgfQorICAJCX0KKy0JICAgICAgd2MgPSAtMTsKKysJICAgICAgd2MxID0gd2MgPSBXRU9GOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIC8qIFdlIHRyZWF0ICdbJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIgaGVyZS4gICovCitAQCAtNjAwLDcgKzYwMCw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCSAgICB3YyA9IGZldGNoX3djKCgiVW5iYWxhbmNlZCBbIikpOworIAl9CisgCistICAgICAgaWYgKHdjMSA9PSAtMSkKKysgICAgICBpZiAod2MxID09IFdFT0YpCisgCXdjMSA9IGZldGNoX3djKF8oIlVuYmFsYW5jZWQgWyIpKTsKKyAKKyAgICAgICBpZiAod2MxID09IEwnLScpCitAQCAtNjMwLDE3ICs2MzAsMTcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJICAgIH0KKyAJICBSRUFMTE9DX0lGX05FQ0VTU0FSWSh3b3JrX21iYy0+cmFuZ2Vfc3RzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9zdHNfYWwsIHdvcmtfbWJjLT5ucmFuZ2VzICsgMSk7CistCSAgd29ya19tYmMtPnJhbmdlX3N0c1t3b3JrX21iYy0+bnJhbmdlc10gPSB3YzsKKysJICB3b3JrX21iYy0+cmFuZ2Vfc3RzW3dvcmtfbWJjLT5ucmFuZ2VzXSA9ICh3Y2hhcl90KXdjOworIAkgIFJFQUxMT0NfSUZfTkVDRVNTQVJZKHdvcmtfbWJjLT5yYW5nZV9lbmRzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9lbmRzX2FsLCB3b3JrX21iYy0+bnJhbmdlcyArIDEpOworLQkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gd2MyOworKwkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gKHdjaGFyX3Qpd2MyOworIAl9CistICAgICAgZWxzZSBpZiAod2MgIT0gLTEpCisrICAgICAgZWxzZSBpZiAod2MgIT0gV0VPRikKKyAJLyogYnVpbGQgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworIAl7CisgCSAgUkVBTExPQ19JRl9ORUNFU1NBUlkod29ya19tYmMtPmNoYXJzLCB3Y2hhcl90LCBjaGFyc19hbCwKKyAJCQkgICAgICAgd29ya19tYmMtPm5jaGFycyArIDEpOworLQkgIHdvcmtfbWJjLT5jaGFyc1t3b3JrX21iYy0+bmNoYXJzKytdID0gd2M7CisrCSAgd29ya19tYmMtPmNoYXJzW3dvcmtfbWJjLT5uY2hhcnMrK10gPSAod2NoYXJfdCl3YzsKKyAJfQorICAgICB9CisgICB3aGlsZSAoKHdjID0gd2MxKSAhPSBMJ10nKTsKK0BAIC0yNTUyLDYgKzI1NTIsOCBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBpbnQgcywgcG9zaXRpb24gcG9zLCBpbnQgaW5kZXgpCisgICAgIH0KKyAKKyAgIC8qIG1hdGNoIHdpdGggYSBjaGFyYWN0ZXI/ICAqLworKyAgaWYgKGNhc2VfZm9sZCkKKysgICAgd2MgPSB0b3dsb3dlciAod2MpOworICAgZm9yIChpID0gMDsgaTx3b3JrX21iYy0+bmNoYXJzOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAod2MgPT0gd29ya19tYmMtPmNoYXJzW2ldKQorZGlmZiAtLWdpdCBhL3NyYy9ncmVwLmMgYi9zcmMvZ3JlcC5jCitpbmRleCAyZmIyZmFjLi4zZmQ0YjQ3IDEwMDY0NAorLS0tIGEvc3JjL2dyZXAuYworKysrIGIvc3JjL2dyZXAuYworQEAgLTMwLDYgKzMwLDEyIEBACisgIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorICMgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgI2VuZGlmCisrI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworKy8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCisrIyBkZWZpbmUgTUJTX1NVUFBPUlQKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImdldG9wdC5oIgorQEAgLTI1NSwxOSArMjYxLDYgQEAgcmVzZXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHN0YXRzICpzdGF0cykKKyAgIGJ1ZmJlZ1stMV0gPSBlb2xieXRlOworICAgYnVmZGVzYyA9IGZkOworIAorLSAgaWYgKGZzdGF0IChmZCwgJnN0YXRzLT5zdGF0KSAhPSAwKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiZnN0YXQiKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLSAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCistICAgIHJldHVybiAwOworLSNpZm5kZWYgREpHUFAKKy0gIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKy0jZWxzZQorLSAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorLSNlbmRpZgorLSAgICByZXR1cm4gMDsKKyAgIGlmIChTX0lTUkVHIChzdGF0cy0+c3RhdC5zdF9tb2RlKSkKKyAgICAgeworICAgICAgIGlmIChmaWxlKQorQEAgLTU1OCwzMyArNTUxLDYgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAgICAgeworICAgICAgIHNpemVfdCBtYXRjaF9zaXplOworICAgICAgIHNpemVfdCBtYXRjaF9vZmZzZXQ7CistICAgICAgaWYobWF0Y2hfaWNhc2UpCistICAgICAgICB7CistCSAgLyogWXVjaywgdGhpcyBpcyB0cmlja3kgKi8KKy0gICAgICAgICAgY2hhciAqYnVmID0gKGNoYXIqKSB4bWFsbG9jIChsaW0gLSBiZWcpOworLQkgIGNoYXIgKmliZWcgPSBidWY7CistCSAgY2hhciAqaWxpbSA9IGliZWcgKyAobGltIC0gYmVnKTsKKy0JICBpbnQgaTsKKy0JICBmb3IgKGkgPSAwOyBpIDwgbGltIC0gYmVnOyBpKyspCistCSAgICBpYmVnW2ldID0gdG9sb3dlciAoYmVnW2ldKTsKKy0JICB3aGlsZSAoKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGliZWcsIGlsaW0taWJlZywgJm1hdGNoX3NpemUsIDEpKQorLQkJICE9IChzaXplX3QpIC0xKQorLQkgICAgeworLQkgICAgICBjaGFyIGNvbnN0ICpiID0gYmVnICsgbWF0Y2hfb2Zmc2V0OworLQkgICAgICBpZiAoYiA9PSBsaW0pCistCQlicmVhazsKKy0JICAgICAgZndyaXRlIChiZWcsIHNpemVvZiAoY2hhciksIG1hdGNoX29mZnNldCwgc3Rkb3V0KTsKKy0JICAgICAgcHJpbnRmICgiXDMzWyVzbSIsIGdyZXBfY29sb3IpOworLQkgICAgICBmd3JpdGUgKGIsIHNpemVvZiAoY2hhciksIG1hdGNoX3NpemUsIHN0ZG91dCk7CistCSAgICAgIGZwdXRzICgiXDMzWzAwbSIsIHN0ZG91dCk7CistCSAgICAgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworLQkgICAgICBpYmVnID0gaWJlZyArIG1hdGNoX29mZnNldCArIG1hdGNoX3NpemU7CistCSAgICB9CistCSAgZndyaXRlIChiZWcsIDEsIGxpbSAtIGJlZywgc3Rkb3V0KTsKKy0JICBmcmVlIChidWYpOworLQkgIGxhc3RvdXQgPSBsaW07CistCSAgcmV0dXJuOworLQl9CisgICAgICAgd2hpbGUgKGxpbS1iZWcgJiYgKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGJlZywgbGltIC0gYmVnLCAmbWF0Y2hfc2l6ZSwgMSkpCisgCSAgICAgIT0gKHNpemVfdCkgLTEpCisgCXsKK0BAIC02MDEsNiArNTY3LDcgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAJICBmcHV0cyAoIlwzM1swMG0iLCBzdGRvdXQpOworIAkgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworIAl9CisrICAgICAgZnB1dHMgKCJcMzNbSyIsIHN0ZG91dCk7CisgICAgIH0KKyAgIGZ3cml0ZSAoYmVnLCAxLCBsaW0gLSBiZWcsIHN0ZG91dCk7CisgICBpZiAoZmVycm9yIChzdGRvdXQpKQorQEAgLTYyMyw3ICs1OTAsNyBAQCBwcnBlbmRpbmcgKGNoYXIgY29uc3QgKmxpbSkKKyAgICAgICBzaXplX3QgbWF0Y2hfc2l6ZTsKKyAgICAgICAtLXBlbmRpbmc7CisgICAgICAgaWYgKG91dGxlZnQKKy0JICB8fCAoKCgqZXhlY3V0ZSkgKGxhc3RvdXQsIG5sIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorKwkgIHx8ICgoKCpleGVjdXRlKSAobGFzdG91dCwgbmwgKyAxIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorIAkgICAgICA9PSAhb3V0X2ludmVydCkpCisgCXBybGluZSAobGFzdG91dCwgbmwgKyAxLCAnLScpOworICAgICAgIGVsc2UKK0BAIC04OTUsNiArODYyLDE5IEBAIGdyZXBmaWxlIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3Qgc3RhdHMgKnN0YXRzKQorICAgICB9CisgICBlbHNlCisgICAgIHsKKysgICAgICBpZiAoc3RhdCAoZmlsZSwgJnN0YXRzLT5zdGF0KSAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAgICBzdXBwcmVzc2libGVfZXJyb3IgKGZpbGUsIGVycm5vKTsKKysgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgICAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCisrICAgICAgICByZXR1cm4gMTsKKysjaWZuZGVmIERKR1BQCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU1NPQ0soc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU0ZJRk8oc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbHNlCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbmRpZgorKyAgICAgICAgcmV0dXJuIDE7CisgICAgICAgd2hpbGUgKChkZXNjID0gb3BlbiAoZmlsZSwgT19SRE9OTFkpKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisgCWNvbnRpbnVlOworIAorQEAgLTE2ODEsOSArMTY2MSw2IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIikpCisgCSAgb3V0X2ludmVydCBePSAxOworIAkgIG1hdGNoX2xpbmVzID0gbWF0Y2hfd29yZHMgPSAwOworIAl9CistICAgICAgZWxzZQorLQkvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworLSAgICAgICAgLS1rZXljYzsKKyAgICAgfQorICAgZWxzZQorICAgICBpZiAob3B0aW5kIDwgYXJnYykKK0BAIC0xNjk3LDYgKzE2NzQsMzcgQEAgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iKSkKKyAgIGlmICghaW5zdGFsbF9tYXRjaGVyIChtYXRjaGVyKSAmJiAhaW5zdGFsbF9tYXRjaGVyICgiZGVmYXVsdCIpKQorICAgICBhYm9ydCAoKTsKKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEgJiYgbWF0Y2hfaWNhc2UpCisrICAgIHsKKysgICAgICB3Y2hhcl90IHdjOworKyAgICAgIG1ic3RhdGVfdCBjdXJfc3RhdGUsIHByZXZfc3RhdGU7CisrICAgICAgaW50IGksIGxlbiA9IHN0cmxlbihrZXlzKTsKKysKKysgICAgICBtZW1zZXQoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuIDspCisrCXsKKysJICBzaXplX3QgbWJjbGVuOworKwkgIG1iY2xlbiA9IG1icnRvd2MoJndjLCBrZXlzICsgaSwgbGVuIC0gaSwgJmN1cl9zdGF0ZSk7CisrCSAgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IDApCisrCSAgICB7CisrCSAgICAgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisrCQkgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisrCSAgICAgIG1iY2xlbiA9IDE7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoaXN3dXBwZXIoKHdpbnRfdCl3YykpCisrCQl7CisrCQkgIHdjID0gdG93bG93ZXIoKHdpbnRfdCl3Yyk7CisrCQkgIHdjcnRvbWIoa2V5cyArIGksIHdjLCAmY3VyX3N0YXRlKTsKKysJCX0KKysJICAgIH0KKysJICBpICs9IG1iY2xlbjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisgICAoKmNvbXBpbGUpKGtleXMsIGtleWNjKTsKKyAKKyAgIGlmICgoYXJnYyAtIG9wdGluZCA+IDEgJiYgIW5vX2ZpbGVuYW1lcykgfHwgd2l0aF9maWxlbmFtZXMpCitkaWZmIC0tZ2l0IGEvc3JjL3NlYXJjaC5jIGIvc3JjL3NlYXJjaC5jCitpbmRleCA3YmQyMzNmLi4zYzZhNDg1IDEwMDY0NAorLS0tIGEvc3JjL3NlYXJjaC5jCisrKysgYi9zcmMvc2VhcmNoLmMKK0BAIC0xOCw5ICsxOCwxMyBAQAorIAorIC8qIFdyaXR0ZW4gQXVndXN0IDE5OTIgYnkgTWlrZSBIYWVydGVsLiAqLworIAorKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAxCisrI2VuZGlmCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworIC8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCitAQCAtMzEsNyArMzUsNyBAQAorIAorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZ3JlcC5oIgorLSNpbmNsdWRlICJyZWdleC5oIgorKyNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlICJkZmEuaCIKKyAjaW5jbHVkZSAia3dzZXQuaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zOSw2ICs0Myw5IEBACisgI2lmZGVmIEhBVkVfTElCUENSRQorICMgaW5jbHVkZSA8cGNyZS5oPgorICNlbmRpZgorKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2VuZGlmCisgCisgI2RlZmluZSBOQ0hBUiAoVUNIQVJfTUFYICsgMSkKKyAKK0BAIC03MCw5ICs3NywxMCBAQCBzdGF0aWMga3dzZXRfdCBrd3NldDsKKyAgICBjYWxsIHRoZSByZWdleHAgbWF0Y2hlciBhdCBhbGwuICovCisgc3RhdGljIGludCBrd3NldF9leGFjdF9tYXRjaGVzOworIAorLSNpZiBkZWZpbmVkKE1CU19TVVBQT1JUKQorLXN0YXRpYyBjaGFyKiBjaGVja19tdWx0aWJ5dGVfc3RyaW5nIFBBUkFNUyAoKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKy0jZW5kaWYKKysvKiBVVEYtOCBlbmNvZGluZyBhbGxvd3Mgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgd2UgY2FuJ3Qgb3RoZXJ3aXNlCisrICAgYXNzdW1lIGluIGEgbXVsdGlieXRlIGVuY29kaW5nLiAqLworK3N0YXRpYyBpbnQgdXNpbmdfdXRmODsKKysKKyBzdGF0aWMgdm9pZCBrd3Npbml0IFBBUkFNUyAoKHZvaWQpKTsKKyBzdGF0aWMgdm9pZCBrd3NtdXN0cyBQQVJBTVMgKCh2b2lkKSk7Cisgc3RhdGljIHZvaWQgR2NvbXBpbGUgUEFSQU1TICgoY2hhciBjb25zdCAqLCBzaXplX3QpKTsKK0BAIC04NCw2ICs5MiwxNSBAQCBzdGF0aWMgdm9pZCBQY29tcGlsZSBQQVJBTVMgKChjaGFyIGNvbnN0ICosIHNpemVfdCApKTsKKyBzdGF0aWMgc2l6ZV90IFBleGVjdXRlIFBBUkFNUyAoKGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzaXplX3QgKiwgaW50KSk7CisgCisgdm9pZAorK2NoZWNrX3V0ZjggKHZvaWQpCisreworKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysgIGlmIChzdHJjbXAgKG5sX2xhbmdpbmZvIChDT0RFU0VUKSwgIlVURi04IikgPT0gMCkKKysgICAgdXNpbmdfdXRmOCA9IDE7CisrI2VuZGlmCisrfQorKworK3ZvaWQKKyBkZmFlcnJvciAoY2hhciBjb25zdCAqbWVzZykKKyB7CisgICBlcnJvciAoMiwgMCwgbWVzZyk7CitAQCAtMTQxLDM4ICsxNTgsNiBAQCBrd3NtdXN0cyAodm9pZCkKKyAgICAgfQorIH0KKyAKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0vKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlIHRoZSBhcnJheSB3aGljaCBjb3JyZXNwb25kIHRvICJidWYiLgorLSAgIFRoZW4gdGhpcyBjaGVjayBtdWx0aWJ5dGUgc3RyaW5nIGFuZCBtYXJrIG9uIHRoZSBwb3NpdGlvbnMgd2hpY2gKKy0gICBhcmUgbm90IHNpbmdsZWJ5dGUgY2hhcmFjdGVyIG5vciB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZQorLSAgIGNoYXJhY3Rlci4gIENhbGxlciBtdXN0IGZyZWUgdGhlIGFycmF5LiAgKi8KKy1zdGF0aWMgY2hhcioKKy1jaGVja19tdWx0aWJ5dGVfc3RyaW5nKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpCisteworLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IG1hbGxvYyhzaXplKTsKKy0gIG1ic3RhdGVfdCBjdXJfc3RhdGU7CistICBpbnQgaTsKKy0gIG1lbXNldCgmY3VyX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CistICBtZW1zZXQobWJfcHJvcGVydGllcywgMCwgc2l6ZW9mKGNoYXIpKnNpemUpOworLSAgZm9yIChpID0gMDsgaSA8IHNpemUgOykKKy0gICAgeworLSAgICAgIHNpemVfdCBtYmNsZW47CistICAgICAgbWJjbGVuID0gbWJybGVuKGJ1ZiArIGksIHNpemUgLSBpLCAmY3VyX3N0YXRlKTsKKy0KKy0gICAgICBpZiAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAoc2l6ZV90KSAtMiB8fCBtYmNsZW4gPT0gMCkKKy0JeworLQkgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCistCSAgICAgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCistCSAgbWJjbGVuID0gMTsKKy0JfQorLSAgICAgIG1iX3Byb3BlcnRpZXNbaV0gPSBtYmNsZW47CistICAgICAgaSArPSBtYmNsZW47CistICAgIH0KKy0KKy0gIHJldHVybiBtYl9wcm9wZXJ0aWVzOworLX0KKy0jZW5kaWYKKy0KKyBzdGF0aWMgdm9pZAorIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CitAQCAtMTgxLDcgKzE2Niw4IEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCistICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSk7CisrICBjaGVja191dGY4ICgpOworKyAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgfCAobWF0Y2hfaWNhc2UgPyBSRV9JQ0FTRSA6IDApKTsKKyAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAKKyAgIC8qIEZvciBHTlUgcmVnZXggY29tcGlsZXIgd2UgaGF2ZSB0byBwYXNzIHRoZSBwYXR0ZXJucyBzZXBhcmF0ZWx5IHRvIGRldGVjdAorQEAgLTIxOCw2ICsyMDQsMTAgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0yMzMsNyArMjIzLDcgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiXFwpJCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9iZWdbXSA9ICJcXCheXFx8W15bOmFsbnVtOl1fXVxcKVxcKCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9lbmRbXSA9ICJcXClcXChbXls6YWxudW06XV9dXFx8JFxcKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4gKG4pOworQEAgLTI1NywxNCArMjQ3LDE1IEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCisrICBjaGVja191dGY4ICgpOworICAgaWYgKHN0cmNtcCAobWF0Y2hlciwgImF3ayIpID09IDApCisgICAgIHsKKy0gICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLKTsKKysgICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfQVdLLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCk7CisrICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAgICAgfQorIAorQEAgLTMwMSw2ICsyOTIsMTAgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0zMTYsNyArMzExLDcgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiKSQiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfYmVnW10gPSAiKF58W15bOmFsbnVtOl1fXSkoIjsKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCB3b3JkX2VuZFtdID0gIikoW15bOmFsbnVtOl1fXXwkKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4obik7CitAQCAtMzM5LDE1ICszMzQsMzQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgIGludCBiYWNrcmVmLCBzdGFydCwgbGVuOworICAgc3RydWN0IGt3c21hdGNoIGt3c207CistICBzaXplX3QgaTsKKysgIHNpemVfdCBpLCByZXRfdmFsOworKyAgc3RhdGljIGludCB1c2VfZGZhOworKyAgc3RhdGljIGludCB1c2VfZGZhX2NoZWNrZWQgPSAwOworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IE5VTEw7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisrICBtYnN0YXRlX3QgbWJzOworKyAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorKyAgaWYgKCF1c2VfZGZhX2NoZWNrZWQpCisrICAgIHsKKysgICAgICBjaGFyICpncmVwX3VzZV9kZmEgPSBnZXRlbnYgKCJHUkVQX1VTRV9ERkEiKTsKKysgICAgICBpZiAoIWdyZXBfdXNlX2RmYSkKKysJeworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIGt3c2V0KQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyhidWYsIHNpemUpOworKwkgIC8qIFR1cm4gb2ZmIERGQSB3aGVuIHByb2Nlc3NpbmcgbXVsdGlieXRlIGlucHV0LiAqLworKwkgIHVzZV9kZmEgPSAoTUJfQ1VSX01BWCA9PSAxKTsKKysjZWxzZQorKwkgIHVzZV9kZmEgPSAxOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgdXNlX2RmYSA9IGF0b2kgKGdyZXBfdXNlX2RmYSk7CisrCX0KKysKKysgICAgICB1c2VfZGZhX2NoZWNrZWQgPSAxOworKyAgICB9CisgCisgICBidWZsaW0gPSBidWYgKyBzaXplOworIAorQEAgLTM1OCw0NyArMzcyLDEyMCBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkgIGlmIChrd3NldCkKKyAJICAgIHsKKyAJICAgICAgLyogRmluZCBhIHBvc3NpYmxlIG1hdGNoIHVzaW5nIHRoZSBLV3NldCBtYXRjaGVyLiAqLworLQkgICAgICBzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmbGltIC0gYmVnLCAma3dzbSk7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldDsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgLyoga3dzZXhlYyBkb2Vzbid0IHdvcmsgd2l0aCBtYXRjaF9pY2FzZSBhbmQgbXVsdGlieXRlIGlucHV0LiAqLworKwkgICAgICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrCQkvKiBBdm9pZCBrd3NldCAqLworKwkJb2Zmc2V0ID0gMDsKKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkgICAgICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWZsaW0gLSBiZWcsICZrd3NtKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKy0JCXsKKysJICAgICAgICBnb3RvIGZhaWx1cmU7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCQkgIGlmIChNQl9DVVJfTUFYID4gMSkKKy0JCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZgorLQkJICByZXR1cm4gKHNpemVfdCktMTsKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKyAJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSBjb250YWluaW5nIHRoZSBjYW5kaWRhdGUsIGFuZAorIAkJIHJ1biBpdCB0aHJvdWdoIERGQS4gKi8KKyAJICAgICAgZW5kID0gbWVtY2hyKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbYmVnIC0gYnVmXSA9PSAwKQorKwkgICAgICBpZiAobWJfY3VyX21heCA+IDEgJiYgYnl0ZXNfbGVmdCkKKyAJCWNvbnRpbnVlOworLSNlbmRpZgorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICB3aGlsZSAoYmVnID4gYnVmICYmIGJlZ1stMV0gIT0gZW9sKQorIAkJLS1iZWc7CistCSAgICAgIGlmIChrd3NtLmluZGV4IDwga3dzZXRfZXhhY3RfbWF0Y2hlcykKKy0JCWdvdG8gc3VjY2VzczsKKy0JICAgICAgaWYgKGRmYWV4ZWMgKCZkZmEsIGJlZywgZW5kIC0gYmVnLCAmYmFja3JlZikgPT0gKHNpemVfdCkgLTEpCisrCSAgICAgIGlmICgKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgIShtYXRjaF9pY2FzZSAmJiBtYl9jdXJfbWF4ID4gMSkgJiYKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCSAgKGt3c20uaW5kZXggPCBrd3NldF9leGFjdF9tYXRjaGVzKSkKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKysJICAgICAgaWYgKHVzZV9kZmEgJiYKKysJCSAgZGZhZXhlYyAoJmRmYSwgYmVnLCBlbmQgLSBiZWcsICZiYWNrcmVmKSA9PSAoc2l6ZV90KSAtMSkKKyAJCWNvbnRpbnVlOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIHsKKyAJICAgICAgLyogTm8gZ29vZCBmaXhlZCBzdHJpbmdzOyBzdGFydCB3aXRoIERGQS4gKi8KKy0JICAgICAgc2l6ZV90IG9mZnNldCA9IGRmYWV4ZWMgKCZkZmEsIGJlZywgYnVmbGltIC0gYmVnLCAmYmFja3JlZik7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisrCSAgICAgIGlmICh1c2VfZGZhKQorKwkJb2Zmc2V0ID0gZGZhZXhlYyAoJmRmYSwgYmVnLCBidWZsaW0gLSBiZWcsICZiYWNrcmVmKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKyAJCWJyZWFrOworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSB3ZSd2ZSBmb3VuZC4gKi8KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICBlbmQgPSBtZW1jaHIgKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmIGJ5dGVzX2xlZnQpCisrCQljb250aW51ZTsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgd2hpbGUgKGJlZyA+IGJ1ZiAmJiBiZWdbLTFdICE9IGVvbCkKKyAJCS0tYmVnOworIAkgICAgfQorIAkgIC8qIFN1Y2Nlc3NmdWwsIG5vIGJhY2tyZWZlcmVuY2VzIGVuY291bnRlcmVkISAqLworLQkgIGlmICghYmFja3JlZikKKy0JICAgIGdvdG8gc3VjY2VzczsKKysJICBpZiAodXNlX2RmYSAmJiAhYmFja3JlZikKKysJICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJfQorICAgICAgIGVsc2UKKyAJZW5kID0gYmVnICsgc2l6ZTsKK0BAIC00MTMsMTQgKzUwMCwxMSBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkJCQkgICAgICAgZW5kIC0gYmVnIC0gMSwgJihwYXR0ZXJuc1tpXS5yZWdzKSkpKQorIAkgICAgeworIAkgICAgICBsZW4gPSBwYXR0ZXJuc1tpXS5yZWdzLmVuZFswXSAtIHN0YXJ0OworLQkgICAgICBpZiAoZXhhY3QpCistCQl7CistCQkgICptYXRjaF9zaXplID0gbGVuOworLQkJICByZXR1cm4gc3RhcnQ7CistCQl9CisrCSAgICAgIGlmIChleGFjdCAmJiAhbWF0Y2hfd29yZHMpCisrCSAgICAgICAgZ290byBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW47CisgCSAgICAgIGlmICgoIW1hdGNoX2xpbmVzICYmICFtYXRjaF93b3JkcykKKyAJCSAgfHwgKG1hdGNoX2xpbmVzICYmIGxlbiA9PSBlbmQgLSBiZWcgLSAxKSkKKy0JCWdvdG8gc3VjY2VzczsKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJICAgICAgLyogSWYgLXcsIGNoZWNrIGlmIHRoZSBtYXRjaCBhbGlnbnMgd2l0aCB3b3JkIGJvdW5kYXJpZXMuCisgCQkgV2UgZG8gdGhpcyBpdGVyYXRpdmVseSBiZWNhdXNlOgorIAkJIChhKSB0aGUgbGluZSBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIG9jY3VyZW5jZSBvZiB0aGUKK0BAIC00MzEsMTAgKzUxNSwxMTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgICAgaWYgKG1hdGNoX3dvcmRzKQorIAkJd2hpbGUgKHN0YXJ0ID49IDApCisgCQkgIHsKKy0JCSAgICBpZiAoKHN0YXJ0ID09IDAgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0IC0gMV0pKQorLQkJCSYmIChsZW4gPT0gZW5kIC0gYmVnIC0gMQorLQkJCSAgICB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkpCistCQkgICAgICBnb3RvIHN1Y2Nlc3M7CisrCQkgICAgaW50IGx3b3JkX21hdGNoID0gMDsKKysJCSAgICBpZiAoc3RhcnQgPT0gMCkKKysJCSAgICAgIGx3b3JkX21hdGNoID0gMTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJYXNzZXJ0IChzdGFydCA+IDApOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCWlmIChtYl9jdXJfbWF4ID4gMSkKKysJCQkgIHsKKysJCQkgICAgY29uc3QgY2hhciAqczsKKysJCQkgICAgc2l6ZV90IG1yOworKwkJCSAgICB3Y2hhcl90IHB3YzsKKysKKysJCQkgICAgLyogTG9jYXRlIHRoZSBzdGFydCBvZiB0aGUgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCSAgICAgICBiZWZvcmUgdGhlIG1hdGNoIHBvc2l0aW9uICg9PSBiZWcgKyBzdGFydCkuICovCisrCQkJICAgIGlmICh1c2luZ191dGY4KQorKwkJCSAgICAgIHsKKysJCQkJLyogVVRGLTggaXMgYSBzcGVjaWFsIGNhc2U6IHNjYW4gYmFja3dhcmRzCisrCQkJCSAgIHVudGlsIHdlIGZpbmQgYSA3LWJpdCBjaGFyYWN0ZXIgb3IgYQorKwkJCQkgICBsZWFkIGJ5dGUuICovCisrCQkJCXMgPSBiZWcgKyBzdGFydCAtIDE7CisrCQkJCXdoaWxlIChzID4gYnVmCisrCQkJCSAgICAgICAmJiAodW5zaWduZWQgY2hhcikgKnMgPj0gMHg4MAorKwkJCQkgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIpICpzIDw9IDB4YmYpCisrCQkJCSAgLS1zOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZQorKwkJCSAgICAgIHsKKysJCQkJLyogU2NhbiBmb3J3YXJkcyB0byBmaW5kIHRoZSBzdGFydCBvZiB0aGUKKysJCQkJICAgbGFzdCBjb21wbGV0ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZQorKwkJCQkgICBtYXRjaCBwb3NpdGlvbi4gICovCisrCQkJCXNpemVfdCBieXRlc19sZWZ0ID0gc3RhcnQgLSAxOworKwkJCQlzID0gYmVnOworKwkJCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApCisrCQkJCSAgeworKwkJCQkgICAgbXIgPSBtYnJsZW4gKHMsIGJ5dGVzX2xlZnQsICZtYnMpOworKwkJCQkgICAgaWYgKG1yID09IChzaXplX3QpIC0xIHx8IG1yID09IDApCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCXMrKzsKKysJCQkJCWJ5dGVzX2xlZnQtLTsKKysJCQkJCWNvbnRpbnVlOworKwkJCQkgICAgICB9CisrCQkJCSAgICBpZiAobXIgPT0gKHNpemVfdCkgLTIpCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCWJyZWFrOworKwkJCQkgICAgICB9CisrCQkJCSAgICBzICs9IG1yOworKwkJCQkgICAgYnl0ZXNfbGVmdCAtPSBtcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKwkJCSAgICBtciA9IG1icnRvd2MgKCZwd2MsIHMsIGJlZyArIHN0YXJ0IC0gcywgJm1icyk7CisrCQkJICAgIGlmIChtciA9PSAoc2l6ZV90KSAtMiB8fCBtciA9PSAoc2l6ZV90KSAtMSB8fAorKwkJCQltciA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCQlsd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlIGlmICghKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCQkgICAgICYmIG1yID09IGJlZyArIHN0YXJ0IC0gcykKKysJCQkgICAgICBsd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCQkJZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJCWlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgLSAxXSkpCisrCQkJICBsd29yZF9tYXRjaCA9IDE7CisrCQkgICAgICB9CisrCisrCQkgICAgaWYgKGx3b3JkX21hdGNoKQorKwkJICAgICAgeworKwkJCWludCByd29yZF9tYXRjaCA9IDA7CisrCQkJaWYgKHN0YXJ0ICsgbGVuID09IGVuZCAtIGJlZyAtIDEpCisrCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJZWxzZQorKwkJCSAgeworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCSAgICBpZiAobWJfY3VyX21heCA+IDEpCisrCQkJICAgICAgeworKwkJCQl3Y2hhcl90IG53YzsKKysJCQkJaW50IG1yOworKworKwkJCQltciA9IG1idG93YyAoJm53YywgYmVnICsgc3RhcnQgKyBsZW4sCisrCQkJCQkgICAgIGVuZCAtIGJlZyAtIHN0YXJ0IC0gbGVuIC0gMSk7CisrCQkJCWlmIChtciA8PSAwKQorKwkJCQkgIHsKKysJCQkJICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkJICAgIHJ3b3JkX21hdGNoID0gMTsKKysJCQkJICB9CisrCQkJCWVsc2UgaWYgKCFpc3dhbG51bSAobndjKSAmJiBud2MgIT0gTCdfJykKKysJCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkJICAgIGlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkKKysJCQkgICAgICByd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCisrCQkJaWYgKHJ3b3JkX21hdGNoKQorKwkJCSAgeworKwkJCSAgICBpZiAoIWV4YWN0KQorKwkJCSAgICAgIC8qIFJldHVybnMgdGhlIHdob2xlIGxpbmUuICovCisrCQkJICAgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOworKwkJCSAgICBlbHNlCisrCQkJICAgICAgLyogUmV0dXJucyBqdXN0IHRoaXMgd29yZCBtYXRjaC4gKi8KKysJCQkgICAgICBnb3RvIHN1Y2Nlc3NfaW5fc3RhcnRfYW5kX2xlbjsKKysJCQkgIH0KKysJCSAgICAgIH0KKyAJCSAgICBpZiAobGVuID4gMCkKKyAJCSAgICAgIHsKKyAJCQkvKiBUcnkgYSBzaG9ydGVyIGxlbmd0aCBhbmNob3JlZCBhdCB0aGUgc2FtZSBwbGFjZS4gKi8KK0BAIC00NjEsMjYgKzY0OSwxNTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgIH0KKyAJfSAvKiBmb3IgUmVnZXggcGF0dGVybnMuICAqLworICAgICB9IC8qIGZvciAoYmVnID0gZW5kIC4uKSAqLworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKyBmYWlsdXJlOgorICAgcmV0dXJuIChzaXplX3QpIC0xOworIAorLSBzdWNjZXNzOgorLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLSAgKm1hdGNoX3NpemUgPSBlbmQgLSBiZWc7CistICByZXR1cm4gYmVnIC0gYnVmOworKyBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOgorKyAgbGVuID0gZW5kIC0gYmVnOworKyAgc3RhcnQgPSBiZWcgLSBidWY7CisrICAvKiBGQUxMVEhST1VHSCAqLworKworKyBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKysgIHJldHVybiBzdGFydDsKKyB9CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIGludCBmX2lfbXVsdGlieXRlOyAvKiB3aGV0aGVyIHdlJ3JlIHVzaW5nIHRoZSBuZXcgLUZpIE1CIG1ldGhvZCAqLworK3N0YXRpYyBzdHJ1Y3QKKyt7CisrICB3Y2hhcl90ICoqcGF0dGVybnM7CisrICBzaXplX3QgY291bnQsIG1heGxlbjsKKysgIHVuc2lnbmVkIGNoYXIgKm1hdGNoOworK30gRmltYjsKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIEZjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisgICBjaGFyIGNvbnN0ICpiZWcsICpsaW0sICplcnI7CisgCisrICBjaGVja191dGY4ICgpOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKyAgLyogU3VwcG9ydCAtRiAtaSBmb3IgVVRGLTggaW5wdXQuICovCisrICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrICAgIHsKKysgICAgICBtYnN0YXRlX3QgbWJzOworKyAgICAgIHdjaGFyX3QgKndjcGF0dGVybiA9IHhtYWxsb2MgKChzaXplICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuZW5kID0gcGF0dGVybjsKKysgICAgICBzaXplX3Qgd2NzaXplOworKyAgICAgIGt3c2V0X3QgZmltYl9rd3NldCA9IE5VTEw7CisrICAgICAgY2hhciAqc3RhcnRzID0gTlVMTDsKKysgICAgICB3Y2hhcl90ICp3Y2JlZywgKndjbGltOworKyAgICAgIHNpemVfdCBhbGxvY2F0ZWQgPSAwOworKworKyAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysjIGlmZGVmIF9fR05VX0xJQlJBUllfXworKyAgICAgIHdjc2l6ZSA9IG1ic25ydG93Y3MgKHdjcGF0dGVybiwgJnBhdHRlcm5lbmQsIHNpemUsIHNpemUsICZtYnMpOworKyAgICAgIGlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm4gKyBzaXplKQorKwl3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysjIGVsc2UKKysgICAgICB7CisrCWNoYXIgKnBhdHRlcm5jb3B5ID0geG1hbGxvYyAoc2l6ZSArIDEpOworKworKwltZW1jcHkgKHBhdHRlcm5jb3B5LCBwYXR0ZXJuLCBzaXplKTsKKysJcGF0dGVybmNvcHlbc2l6ZV0gPSAnXDAnOworKwlwYXR0ZXJuZW5kID0gcGF0dGVybmNvcHk7CisrCXdjc2l6ZSA9IG1ic3J0b3djcyAod2NwYXR0ZXJuLCAmcGF0dGVybmVuZCwgc2l6ZSwgJm1icyk7CisrCWlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm5jb3B5ICsgc2l6ZSkKKysJICB3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysJZnJlZSAocGF0dGVybmNvcHkpOworKyAgICAgIH0KKysjIGVuZGlmCisrICAgICAgaWYgKHdjc2l6ZSArIDIgPD0gMikKKysJeworK2ZpbWJfZmFpbDoKKysJICBmcmVlICh3Y3BhdHRlcm4pOworKwkgIGZyZWUgKHN0YXJ0cyk7CisrCSAgaWYgKGZpbWJfa3dzZXQpCisrCSAgICBrd3NmcmVlIChmaW1iX2t3c2V0KTsKKysJICBmcmVlIChGaW1iLnBhdHRlcm5zKTsKKysJICBGaW1iLnBhdHRlcm5zID0gTlVMTDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmICghKGZpbWJfa3dzZXQgPSBrd3NhbGxvYyAoTlVMTCkpKQorKwkgICAgZXJyb3IgKDIsIDAsIF8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisrCisrCSAgc3RhcnRzID0geG1hbGxvYyAobWJfY3VyX21heCAqIDMpOworKwkgIHdjYmVnID0gd2NwYXR0ZXJuOworKwkgIGRvCisrCSAgICB7CisrCSAgICAgIGludCBpOworKwkgICAgICBzaXplX3Qgd2NsZW47CisrCisrCSAgICAgIGlmIChGaW1iLmNvdW50ID49IGFsbG9jYXRlZCkKKysJCXsKKysJCSAgaWYgKGFsbG9jYXRlZCA9PSAwKQorKwkJICAgIGFsbG9jYXRlZCA9IDEyODsKKysJCSAgZWxzZQorKwkJICAgIGFsbG9jYXRlZCAqPSAyOworKwkJICBGaW1iLnBhdHRlcm5zID0geHJlYWxsb2MgKEZpbWIucGF0dGVybnMsCisrCQkJCQkgICAgc2l6ZW9mICh3Y2hhcl90ICopICogYWxsb2NhdGVkKTsKKysJCX0KKysJICAgICAgRmltYi5wYXR0ZXJuc1tGaW1iLmNvdW50KytdID0gd2NiZWc7CisrCSAgICAgIGZvciAod2NsaW0gPSB3Y2JlZzsKKysJCSAgIHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplICYmICp3Y2xpbSAhPSBMJ1xuJzsgKyt3Y2xpbSkKKysJCSp3Y2xpbSA9IHRvd2xvd2VyICgqd2NsaW0pOworKwkgICAgICAqd2NsaW0gPSBMJ1wwJzsKKysJICAgICAgd2NsZW4gPSB3Y2xpbSAtIHdjYmVnOworKwkgICAgICBpZiAod2NsZW4gPiBGaW1iLm1heGxlbikKKysJCUZpbWIubWF4bGVuID0gd2NsZW47CisrCSAgICAgIGlmICh3Y2xlbiA+IDMpCisrCQl3Y2xlbiA9IDM7CisrCSAgICAgIGlmICh3Y2xlbiA9PSAwKQorKwkJeworKwkJICBpZiAoKGVyciA9IGt3c2luY3IgKGZpbWJfa3dzZXQsICIiLCAwKSkgIT0gMCkKKysJCSAgICBlcnJvciAoMiwgMCwgZXJyKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJZm9yIChpID0gMDsgaSA8ICgxIDw8IHdjbGVuKTsgaSsrKQorKwkJICB7CisrCQkgICAgY2hhciAqcCA9IHN0YXJ0czsKKysJCSAgICBpbnQgaiwgazsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgd2NsZW47ICsraikKKysJCSAgICAgIHsKKysJCQl3Y2hhcl90IHdjID0gd2NiZWdbal07CisrCQkJaWYgKGkgJiAoMSA8PCBqKSkKKysJCQkgIHsKKysJCQkgICAgd2MgPSB0b3d1cHBlciAod2MpOworKwkJCSAgICBpZiAod2MgPT0gd2NiZWdbal0pCisrCQkJICAgICAgY29udGludWU7CisrCQkJICB9CisrCQkJayA9IHdjdG9tYiAocCwgd2MpOworKwkJCWlmIChrIDw9IDApCisrCQkJICBnb3RvIGZpbWJfZmFpbDsKKysJCQlwICs9IGs7CisrCQkgICAgICB9CisrCQkgICAgaWYgKChlcnIgPSBrd3NpbmNyIChmaW1iX2t3c2V0LCBzdGFydHMsIHAgLSBzdGFydHMpKSAhPSAwKQorKwkJICAgICAgZXJyb3IgKDIsIDAsIGVycik7CisrCQkgIH0KKysJICAgICAgaWYgKHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplKQorKwkJKyt3Y2xpbTsKKysJICAgICAgd2NiZWcgPSB3Y2xpbTsKKysJICAgIH0KKysJICB3aGlsZSAod2NiZWcgPCB3Y3BhdHRlcm4gKyB3Y3NpemUpOworKwkgIGZfaV9tdWx0aWJ5dGUgPSAxOworKwkgIGt3c2V0ID0gZmltYl9rd3NldDsKKysJICBmcmVlIChzdGFydHMpOworKwkgIEZpbWIubWF0Y2ggPSB4bWFsbG9jIChGaW1iLmNvdW50KTsKKysJICBpZiAoKGVyciA9IGt3c3ByZXAgKGt3c2V0KSkgIT0gMCkKKysJICAgIGVycm9yICgyLCAwLCBlcnIpOworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisrCisgICBrd3Npbml0ICgpOworICAgYmVnID0gcGF0dGVybjsKKyAgIGRvCitAQCAtNDk5LDYgKzgxNSw3NiBAQCBGY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICAgIGVycm9yICgyLCAwLCBlcnIpOworIH0KKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKytzdGF0aWMgaW50CisrRmltYmV4ZWMgKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqcGxlbiwgaW50IGV4YWN0KQorK3sKKysgIHNpemVfdCBsZW4sIGxldHRlciwgaTsKKysgIGludCByZXQgPSAtMTsKKysgIG1ic3RhdGVfdCBtYnM7CisrICB3Y2hhcl90IHdjOworKyAgaW50IHBhdHRlcm5zX2xlZnQ7CisrCisrICBhc3NlcnQgKG1hdGNoX2ljYXNlICYmIGZfaV9tdWx0aWJ5dGUgPT0gMSk7CisrICBhc3NlcnQgKE1CX0NVUl9NQVggPiAxKTsKKysKKysgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysgIG1lbXNldCAoRmltYi5tYXRjaCwgJ1wxJywgRmltYi5jb3VudCk7CisrICBsZXR0ZXIgPSBsZW4gPSAwOworKyAgcGF0dGVybnNfbGVmdCA9IDE7CisrICB3aGlsZSAocGF0dGVybnNfbGVmdCAmJiBsZW4gPD0gc2l6ZSkKKysgICAgeworKyAgICAgIHNpemVfdCBjOworKworKyAgICAgIHBhdHRlcm5zX2xlZnQgPSAwOworKyAgICAgIGlmIChsZW4gPCBzaXplKQorKwl7CisrCSAgYyA9IG1icnRvd2MgKCZ3YywgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmbWJzKTsKKysJICBpZiAoYyArIDIgPD0gMikKKysJICAgIHJldHVybiByZXQ7CisrCisrCSAgd2MgPSB0b3dsb3dlciAod2MpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgYyA9IDE7CisrCSAgd2MgPSBMJ1wwJzsKKysJfQorKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBGaW1iLmNvdW50OyBpKyspCisrCXsKKysJICBpZiAoRmltYi5tYXRjaFtpXSkKKysJICAgIHsKKysJICAgICAgaWYgKEZpbWIucGF0dGVybnNbaV1bbGV0dGVyXSA9PSBMJ1wwJykKKysJCXsKKysJCSAgLyogRm91bmQgYSBtYXRjaC4gKi8KKysJCSAgKnBsZW4gPSBsZW47CisrCQkgIGlmICghZXhhY3QgJiYgIW1hdGNoX3dvcmRzKQorKwkJICAgIHJldHVybiAwOworKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgLyogRm9yIC13IG9yIGV4YWN0IGxvb2sgZm9yIGxvbmdlc3QgbWF0Y2guICAqLworKwkJICAgICAgcmV0ID0gMDsKKysJCSAgICAgIEZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkJICAgICAgY29udGludWU7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAoRmltYi5wYXR0ZXJuc1tpXVtsZXR0ZXJdID09IHdjKQorKwkJcGF0dGVybnNfbGVmdCA9IDE7CisrCSAgICAgIGVsc2UKKysJCUZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkgICAgfQorKwl9CisrCisrICAgICAgbGVuICs9IGM7CisrICAgICAgbGV0dGVyKys7CisrICAgIH0KKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworIHN0YXRpYyBzaXplX3QKKyBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgeworQEAgLTUwNiw4OCArODkyLDI2OCBAQCBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgICByZWdpc3RlciBzaXplX3QgbGVuOworICAgY2hhciBlb2wgPSBlb2xieXRlOworICAgc3RydWN0IGt3c21hdGNoIGt3c21hdGNoOworKyAgc2l6ZV90IHJldF92YWw7CisgI2lmZGVmIE1CU19TVVBQT1JUCistICBjaGFyICptYl9wcm9wZXJ0aWVzOworLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyAoYnVmLCBzaXplKTsKKysgIGludCBtYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKysgIG1ic3RhdGVfdCBtYnM7CisrICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrICBjb25zdCBjaGFyICpsYXN0X2NoYXIgPSBOVUxMOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorLSAgZm9yIChiZWcgPSBidWY7IGJlZyA8PSBidWYgKyBzaXplOyArK2JlZykKKysgIGZvciAoYmVnID0gYnVmOyBiZWcgPCBidWYgKyBzaXplOyArK2JlZykKKyAgICAgeworLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWYgKyBzaXplIC0gYmVnLCAma3dzbWF0Y2gpOworKyAgICAgIHNpemVfdCBvZmZzZXQ7CisrICAgICAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoKTsKKysKKyAgICAgICBpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQorLQl7CisrCWdvdG8gZmFpbHVyZTsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkgIHJldHVybiBvZmZzZXQ7CisrICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwl7CisrCSAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBvZmZzZXQ7CisrCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkgICAgICBsYXN0X2NoYXIgPSBiZWc7CisrCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCXsKKysJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkgIGJlZysrOworKwkJICBieXRlc19sZWZ0LS07CisrCQkgIGNvbnRpbnVlOworKwkJfQorKworKwkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6IG5vIGdvb2QuICovCisrCQlicmVhazsKKysKKysJICAgICAgYmVnICs9IG1sZW47CisrCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJICAgIH0KKysKKysJICBpZiAoYnl0ZXNfbGVmdCkKKysJICAgIGNvbnRpbnVlOworIAl9CistI2lmZGVmIE1CU19TVVBQT1JUCistICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbb2Zmc2V0K2JlZy1idWZdID09IDApCistCWNvbnRpbnVlOyAvKiBJdCBpcyBhIHBhcnQgb2YgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisrICAgICAgZWxzZQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgICAgIGJlZyArPSBvZmZzZXQ7CistICAgICAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0gICAgICBpZiAoZXhhY3QpCistCXsKKy0JICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBGb3IgZl9pX211bHRpYnl0ZSwgdGhlIHN0cmluZyBhdCBiZWcgbm93IG1hdGNoZXMgZmlyc3QgMyBjaGFycyBvZgorKwkgb25lIG9mIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2ggc3RyaW5ncykuCisrCSBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKyAgICAgIGlmIChmX2lfbXVsdGlieXRlCisrCSAgJiYgRmltYmV4ZWMgKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoLnNpemVbMF0sIGV4YWN0KSkKKysJZ290byBuZXh0X2NoYXI7CisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCSAgcmV0dXJuIGJlZyAtIGJ1ZjsKKy0JfQorKyAgICAgIGxlbiA9IGt3c21hdGNoLnNpemVbMF07CisrICAgICAgaWYgKGV4YWN0ICYmICFtYXRjaF93b3JkcykKKysJZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworICAgICAgIGlmIChtYXRjaF9saW5lcykKKyAJeworIAkgIGlmIChiZWcgPiBidWYgJiYgYmVnWy0xXSAhPSBlb2wpCistCSAgICBjb250aW51ZTsKKysJICAgIGdvdG8gbmV4dF9jaGFyOworIAkgIGlmIChiZWcgKyBsZW4gPCBidWYgKyBzaXplICYmIGJlZ1tsZW5dICE9IGVvbCkKKy0JICAgIGNvbnRpbnVlOworKwkgICAgZ290byBuZXh0X2NoYXI7CisgCSAgZ290byBzdWNjZXNzOworIAl9CisgICAgICAgZWxzZSBpZiAobWF0Y2hfd29yZHMpCistCWZvciAodHJ5ID0gYmVnOyBsZW47ICkKKy0JICB7CistCSAgICBpZiAodHJ5ID4gYnVmICYmIFdDSEFSKCh1bnNpZ25lZCBjaGFyKSB0cnlbLTFdKSkKKy0JICAgICAgYnJlYWs7CistCSAgICBpZiAodHJ5ICsgbGVuIDwgYnVmICsgc2l6ZSAmJiBXQ0hBUigodW5zaWduZWQgY2hhcikgdHJ5W2xlbl0pKQorLQkgICAgICB7CistCQlvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoKTsKKy0JCWlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCistCQkgIHsKKysJeworKwkgIHdoaWxlIChsZW4pCisrCSAgICB7CisrCSAgICAgIGludCB3b3JkX21hdGNoID0gMDsKKysJICAgICAgaWYgKGJlZyA+IGJ1ZikKKysJCXsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JCSAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCQkgICAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysJCSAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJICAgIHsKKysJCSAgICAgIGNvbnN0IGNoYXIgKnM7CisrCQkgICAgICBpbnQgbXI7CisrCQkgICAgICB3Y2hhcl90IHB3YzsKKysKKysJCSAgICAgIGlmICh1c2luZ191dGY4KQorKwkJCXsKKysJCQkgIHMgPSBiZWcgLSAxOworKwkJCSAgd2hpbGUgKHMgPiBidWYKKysJCQkJICYmICh1bnNpZ25lZCBjaGFyKSAqcyA+PSAweDgwCisrCQkJCSAmJiAodW5zaWduZWQgY2hhcikgKnMgPD0gMHhiZikKKysJCQkgICAgLS1zOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQlzID0gbGFzdF9jaGFyOworKwkJICAgICAgbXIgPSBtYnRvd2MgKCZwd2MsIHMsIGJlZyAtIHMpOworKwkJICAgICAgaWYgKG1yIDw9IDApCisrCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgZWxzZSBpZiAoKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCSAgICAgICAmJiBtciA9PSAoaW50KSAoYmVnIC0gcykpCisrCQkJZ290byBuZXh0X2NoYXI7CisrCQkgICAgfQorKwkJICBlbHNlCisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCQkgICAgcmV0dXJuIG9mZnNldDsKKy0JCSAgfQorLQkJdHJ5ID0gYmVnICsgb2Zmc2V0OworLQkJbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0JICAgICAgfQorLQkgICAgZWxzZQorLQkgICAgICBnb3RvIHN1Y2Nlc3M7CistCSAgfQorKwkJICBpZiAoV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbLTFdKSkKKysJCSAgICBnb3RvIG5leHRfY2hhcjsKKysJCX0KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJeworKwkJICB3Y2hhcl90IG53YzsKKysJCSAgaW50IG1yOworKworKwkJICBtciA9IG1idG93YyAoJm53YywgYmVnICsgbGVuLCBidWYgKyBzaXplIC0gYmVnIC0gbGVuKTsKKysJCSAgaWYgKG1yIDw9IDApCisrCQkgICAgeworKwkJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgd29yZF9tYXRjaCA9IDE7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICghaXN3YWxudW0gKG53YykgJiYgbndjICE9IEwnXycpCisrCQkgICAgd29yZF9tYXRjaCA9IDE7CisrCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCWlmIChiZWcgKyBsZW4gPj0gYnVmICsgc2l6ZSB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbbGVuXSkpCisrCQkgIHdvcmRfbWF0Y2ggPSAxOworKwkgICAgICBpZiAod29yZF9tYXRjaCkKKysJCXsKKysJCSAgaWYgKCFleGFjdCkKKysJCSAgICAvKiBSZXR1cm5zIHRoZSB3aG9sZSBsaW5lIG5vdyB3ZSBrbm93IHRoZXJlJ3MgYSB3b3JkIG1hdGNoLiAqLworKwkJICAgIGdvdG8gc3VjY2VzczsKKysJCSAgZWxzZQorKwkJICAgIC8qIFJldHVybnMganVzdCB0aGlzIHdvcmQgbWF0Y2guICovCisrCQkgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworKwkJfQorKwkgICAgICBpZiAobGVuID4gMCkKKysJCXsKKysJCSAgLyogVHJ5IGEgc2hvcnRlciBsZW5ndGggYW5jaG9yZWQgYXQgdGhlIHNhbWUgcGxhY2UuICovCisrCQkgIC0tbGVuOworKwkJICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBsZW4sICZrd3NtYXRjaCk7CisrCisrCQkgIGlmIChvZmZzZXQgPT0gLTEpCisrCQkgICAgZ290byBuZXh0X2NoYXI7IC8qIFRyeSBhIGRpZmZlcmVudCBhbmNob3IuICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgICAgIHdoaWxlIChieXRlc19sZWZ0KQorKwkJCXsKKysJCQkgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkJCSAgbGFzdF9jaGFyID0gYmVnOworKwkJCSAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTEgfHwgbWxlbiA9PSAwKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkgICAgICBiZWcrKzsKKysJCQkgICAgICBieXRlc19sZWZ0LS07CisrCQkJICAgICAgY29udGludWU7CisrCQkJICAgIH0KKysKKysJCQkgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogT2Zmc2V0IHBvaW50cyBpbnNpZGUgbXVsdGlieXRlIGNoYXJhY3RlcjoKKysJCQkgICAgICAgKiBubyBnb29kLiAqLworKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICB9CisrCisrCQkJICBiZWcgKz0gbWxlbjsKKysJCQkgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCQl9CisrCisrCQkgICAgICBpZiAoYnl0ZXNfbGVmdCkKKysJCQl7CisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBnb3RvIG5leHRfY2hhcjsgLyogVHJ5IGEgZGlmZmVyZW50IGFuY2hvci4gKi8KKysJCQl9CisrCQkgICAgfQorKwkJICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkgIGJlZyArPSBvZmZzZXQ7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIC8qIFRoZSBzdHJpbmcgYXQgYmVnIG5vdyBtYXRjaGVzIGZpcnN0IDMgY2hhcnMgb2Ygb25lIG9mCisrCQkgICAgIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2gKKysJCSAgICAgc3RyaW5ncykuICBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKwkJICBpZiAoZl9pX211bHRpYnl0ZQorKwkJICAgICAgJiYgRmltYmV4ZWMgKGJlZywgbGVuIC0gb2Zmc2V0LCAma3dzbWF0Y2guc2l6ZVswXSwKKysJCQkJICAgZXhhY3QpKQorKwkJICAgIGdvdG8gbmV4dF9jaGFyOworKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJICBsZW4gPSBrd3NtYXRjaC5zaXplWzBdOworKwkJfQorKwkgICAgfQorKwl9CisgICAgICAgZWxzZQorIAlnb3RvIHN1Y2Nlc3M7CistICAgIH0KKy0KKytuZXh0X2NoYXI6OworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBBZHZhbmNlIHRvIG5leHQgY2hhcmFjdGVyLiAgRm9yIE1CX0NVUl9NQVggPT0gMSBjYXNlIHRoaXMgaXMgaGFuZGxlZAorKwkgYnkgKytiZWcgYWJvdmUuICAqLworKyAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJeworKwkgIGlmICh1c2luZ191dGY4KQorKwkgICAgeworKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnOworKwkgICAgICBpZiAoYyA+PSAweGMyKQorKwkJeworKwkJICBpZiAoYyA8IDB4ZTApCisrCQkgICAgKytiZWc7CisrCQkgIGVsc2UgaWYgKGMgPCAweGYwKQorKwkJICAgIGJlZyArPSAyOworKwkJICBlbHNlIGlmIChjIDwgMHhmOCkKKysJCSAgICBiZWcgKz0gMzsKKysJCSAgZWxzZSBpZiAoYyA8IDB4ZmMpCisrCQkgICAgYmVnICs9IDQ7CisrCQkgIGVsc2UgaWYgKGMgPCAweGZlKQorKwkJICAgIGJlZyArPSA1OworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgc2l6ZV90IGwgPSBtYnJsZW4gKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJm1icyk7CisrCisrCSAgICAgIGxhc3RfY2hhciA9IGJlZzsKKysJICAgICAgaWYgKGwgKyAyID49IDIpCisrCQliZWcgKz0gbCAtIDE7CisrCSAgICAgIGVsc2UKKysJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJICAgIH0KKysJfQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKyAgICB9CisrCisrIGZhaWx1cmU6CisgICByZXR1cm4gLTE7CisgCisgIHN1Y2Nlc3M6CisrI2lmZGVmIE1CU19TVVBQT1JUCisrICBpZiAobWJfY3VyX21heCA+IDEgJiYgIXVzaW5nX3V0ZjgpCisrICAgIHsKKysgICAgICBlbmQgPSBiZWcgKyBsZW47CisrICAgICAgd2hpbGUgKGVuZCA8IGJ1ZiArIHNpemUpCisrCXsKKysJICBzaXplX3QgbWxlbiA9IG1icmxlbiAoZW5kLCBidWYgKyBzaXplIC0gZW5kLCAmbWJzKTsKKysJICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IChzaXplX3QpIC0yIHx8IG1sZW4gPT0gMCkKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkgICAgICBtbGVuID0gMTsKKysJICAgIH0KKysJICBpZiAobWxlbiA9PSAxICYmICplbmQgPT0gZW9sKQorKwkgICAgYnJlYWs7CisrCisrCSAgZW5kICs9IG1sZW47CisrCX0KKysgICAgfQorKyAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgZW5kID0gbWVtY2hyIChiZWcgKyBsZW4sIGVvbCwgKGJ1ZiArIHNpemUpIC0gKGJlZyArIGxlbikpOworKworICAgZW5kKys7CisgICB3aGlsZSAoYnVmIDwgYmVnICYmIGJlZ1stMV0gIT0gZW9sKQorICAgICAtLWJlZzsKKy0gICptYXRjaF9zaXplID0gZW5kIC0gYmVnOworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysgIGxlbiA9IGVuZCAtIGJlZzsKKysgIC8qIEZBTExUSFJPVUdIICovCisrCisrIHN1Y2Nlc3NfaW5fYmVnX2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAgIHJldHVybiBiZWcgLSBidWY7CisgfQorIAorQEAgLTcwMSw4ICsxMjY3LDkgQEAgUGV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorICAgICAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgICAgICBpZiAoIWV4YWN0KQorIAl7CistCSAgZW5kID0gbWVtY2hyIChlbmQsIGVvbCwgYnVmbGltIC0gZW5kKTsKKy0JICBlbmQrKzsKKysJICB3aGlsZSAoZW5kIDwgYnVmbGltKQorKwkgICAgaWYgKCplbmQrKyA9PSBlb2wpCisrCSAgICAgIGJyZWFrOworIAkgIHdoaWxlIChidWYgPCBiZWcgJiYgYmVnWy0xXSAhPSBlb2wpCisgCSAgICAtLWJlZzsKKyAJfQorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjY2U1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjozMzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2FjbG9jYWwtMS4xMi9wcm90b3MubTQ6MTI6IEFNX0NfUFJPVE9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IGNvbmZpZ3VyZS5pbjozMzogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKy4uLgorfCBsaWIvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBzcmMvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9jb25maWd1cmUuaW4KKysrKyBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KK0BAIC0zMCw3ICszMCw2IEBAIEFDX1BST0dfUkFOTElCCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfU1lTX0xBUkdFRklMRQorLUFNX0NfUFJPVE9UWVBFUworIEFDX1RZUEVfU0laRV9UCisgQUNfQ0hFQ0tfVFlQRShzc2l6ZV90LCBpbnQpCisgQUNfQ19DT05TVAorSW5kZXg6IGdyZXAtMi41LjFhL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjFhLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgZ3JlcC0yLjUuMWEvbGliL01ha2VmaWxlLmFtCitAQCAtMSw1ICsxLDUgQEAKKyAjCistQVVUT01BS0VfT1BUSU9OUyA9IC4uL3NyYy9hbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAKKyAKKyBTVUJESVJTID0gcG9zaXgKKyAKK0luZGV4OiBncmVwLTIuNS4xYS9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGdyZXAtMi41LjFhL3NyYy9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSw1IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKy1BVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIgbm8tZGVwZW5kZW5jaWVzCisrQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcworIAorIExOID0gbG4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL3VjbGliYy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS91Y2xpYmMtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDU0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS91Y2xpYmMtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEZpeCB0byB1c2UgbWVtcGNweSBpbnN0ZWFkIG9mIF9fbWVtcGNweS4gVGhpcyBpcyBuZWVkZWQgZm9yIHVjbGliYyB3aGljaAorIyBkb2Vzbid0IGRlZmluZSBfX21lbXBjcHksIG9ubHkgbWVtcGNweS4gU2luY2UgYm90aCB1Y2xpYmMgYW5kIGdsaWJjIGhhdmUKKyMgbWVtcGNweSwgd2UnbGwganVzdCB1c2UgdGhhdCBpbnN0ZWFkLgorIyBQYXRjaCBzb3VyY2U6IE9wZW5FbWJlZGRlZAorCitJbmRleDogZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDItMDMtMTQgMDA6Mzk6MDYuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMJMjAwNy0wNS0xNyAxMzo1Mzo1OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC02NSw3ICs2NSw3IEBACisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKyAKKyAjIGlmbmRlZiBtZW1wY3B5CistIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyAgZXJyb3IgIm1lbXBjcHkgbm90IGRldGVjdGVkIgorICMgZW5kaWYKKyAjIGRlZmluZSBIQVZFX01FTVBDUFkJMQorICMgZGVmaW5lIEhBVkVfX19GU0VUTE9DS0lORwkxCitJbmRleDogZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvbGliL2dldG9wdC5jCTIwMDEtMDMtMDQgMTY6MzM6MTIuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMJMjAwNy0wNS0xNyAxMzo1MTo0NC4wMDAwMDAwMDAgKzEwMDAKK0BAIC0zMjYsNyArMzI2LDcgQEAKKyAJbm9ub3B0aW9uX2ZsYWdzX2xlbiA9IG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gMDsKKyAgICAgICBlbHNlCisgCXsKKy0JICBtZW1zZXQgKF9fbWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorKwkgIG1lbXNldCAobWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorIAkJCSAgICAgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pLAorIAkJICAnXDAnLCB0b3AgKyAxIC0gbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pOworIAkgIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gdG9wICsgMTsKK0BAIC00MzcsNyArNDM3LDcgQEAKKyAJICAgICAgaWYgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9PSBOVUxMKQorIAkJbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSAtMTsKKyAJICAgICAgZWxzZQorLQkJbWVtc2V0IChfX21lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisrCQltZW1zZXQgKG1lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisgCQkJJ1wwJywgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gLSBsZW4pOworIAkgICAgfQorIAl9CitJbmRleDogZ3JlcC0yLjUuMS9saWIvcmVnZXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjEub3JpZy9saWIvcmVnZXguYwkyMDAxLTA0LTAzIDA0OjA0OjQ1LjAwMDAwMDAwMCArMTAwMAorKysrIGdyZXAtMi41LjEvbGliL3JlZ2V4LmMJMjAwNy0wNS0xNyAxMzo1MTo0OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC03ODQyLDcgKzc4NDIsNyBAQAorICAgICAgIGlmIChtc2dfc2l6ZSA+IGVycmJ1Zl9zaXplKQorICAgICAgICAgeworICNpZiBkZWZpbmVkIEhBVkVfTUVNUENQWSB8fCBkZWZpbmVkIF9MSUJDCistCSAgKigoY2hhciAqKSBfX21lbXBjcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpKSA9ICdcMCc7CisrCSAgKigoY2hhciAqKSBtZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworICNlbHNlCisgICAgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisgICAgICAgICAgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhhOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC9ncmVwLWZpeC1DVkUtMjAxNS0xMzQ1LnBhdGNoCkBAIC0wLDAgKzEsMTU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBDVkUtMjAxNS0xMzQ1LgoraHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZ3JlcC5naXQvY29tbWl0Lz9pZD04M2E5NWJkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDgzYTk1YmQ4Yzg1NjE4NzViOTQ4Y2FkZDQxN2M2NTNkYmU3ZWYyZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdWxpeSBQaXNldHNreSA8eXBpc2V0c2t5QGZiLmNvbT4KK0RhdGU6IFRodSwgMSBKYW4gMjAxNSAxNTozNjo1NSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBncmVwIC1GOiBmaXggYSBoZWFwIGJ1ZmZlciAocmVhZCkgb3ZlcnJ1bgorCitncmVwJ3MgcmVhZCBidWZmZXIgaXMgb2Z0ZW4gZmlsbGVkIHRvIGl0cyBmdWxsIHNpemUsIGV4Y2VwdCB3aGVuCityZWFkaW5nIHRoZSBmaW5hbCBidWZmZXIgb2YgYSBmaWxlLiAgSW4gdGhhdCBjYXNlLCB0aGUgbnVtYmVyIG9mCitieXRlcyByZWFkIG1heSBiZSBmYXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBIb3dldmVyLCBmb3IKK2NlcnRhaW4gdW51c3VhbCBwYXR0ZXJuL3RleHQgY29tYmluYXRpb25zLCBncmVwIC1GIHdvdWxkIG1pc3Rha2VubHkKK2V4YW1pbmUgYnl0ZXMgaW4gdGhhdCB1bmluaXRpYWxpemVkIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiBzZWFyY2hpbmcKK2ZvciBhIG1hdGNoLiAgV2l0aCBjYXJlZnVsbHkgY2hvc2VuIGlucHV0cywgb25lIGNhbiBjYXVzZSBncmVwIC1GIHRvCityZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoYXQgYnVmZmVyIGFsdG9nZXRoZXIuICBUaGlzIHByb2JsZW0gYXJvc2UgdmlhCitjb21taXQgdjIuMTgtOTAtZzczODkzZmYgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbW9yZSBlZmZpY2llbnQKK2hldXJpc3RpYyB1c2luZyB3aGF0IGlzIG5vdyB0aGUgbWVtY2hyX2t3c2V0IGZ1bmN0aW9uLiBUaGUgdXNlIG9mCit0aGF0IGZ1bmN0aW9uIGluIGJtZXhlY190cmFucyBjb3VsZCBsZWF2ZSBUUCBtdWNoIGxhcmdlciB0aGFuIEVQLAorYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYm1fZGVsdGEyX3NlYXJjaCB3b3VsZCBtaXN0YWtlbmx5IGFjY2VzcworYmV5b25kIGVuZCBvZiB0aGUgbWFpbiBpbnB1dCByZWFkIGJ1ZmZlci4KKworKiBzcmMva3dzZXQuYyAoYm1leGVjX3RyYW5zKTogV2hlbiBUUCByZWFjaGVzIG9yIGV4Y2VlZHMgRVAsCitkbyBub3QgY2FsbCBibV9kZWx0YTJfc2VhcmNoLgorKiB0ZXN0cy9rd3NldC1hYnVzZTogTmV3IGZpbGUuCisqIHRlc3RzL01ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBpdC4KKyogVEhBTktTLmluOiBVcGRhdGUuCisqIE5FV1MgKEJ1ZyBmaXhlcyk6IE1lbnRpb24gaXQuCisKK1ByaW9yIHRvIHRoaXMgcGF0Y2gsIHRoaXMgY29tbWFuZCB3b3VsZCB0cmlnZ2VyIGEgVU1SOgorCisgIHByaW50ZiAlMDM2MGRiIDAgfCB2YWxncmluZCBzcmMvZ3JlcCAtRiAkKHByaW50ZiAlMDE5ZFhiIDApCisKKyAgVXNlIG9mIHVuaW5pdGlhbGlzZWQgdmFsdWUgb2Ygc2l6ZSA4CisgICAgIGF0IDB4NDE0MkJFOiBibWV4ZWNfdHJhbnMgKGt3c2V0LmM6NjU3KQorICAgICBieSAweDQxNDNDQTogYm1leGVjIChrd3NldC5jOjY3OCkKKyAgICAgYnkgMHg0MTQ5NzM6IGt3c2V4ZWMgKGt3c2V0LmM6ODQ4KQorICAgICBieSAweDQxNERDNDogRmV4ZWN1dGUgKGt3c2VhcmNoLmM6MTI4KQorICAgICBieSAweDQwNEUyRTogZ3JlcGJ1ZiAoZ3JlcC5jOjEyMzgpCisgICAgIGJ5IDB4NDA1NEJGOiBncmVwIChncmVwLmM6MTQxNykKKyAgICAgYnkgMHg0MDVDRUI6IGdyZXBkZXNjIChncmVwLmM6MTY0NSkKKyAgICAgYnkgMHg0MDVFQzE6IGdyZXBfY29tbWFuZF9saW5lX2FyZyAoZ3JlcC5jOjE2OTIpCisgICAgIGJ5IDB4NDA3N0Q0OiBtYWluIChncmVwLmM6MjU3MCkKKworU2VlIHRoZSBhY2NvbXBhbnlpbmcgdGVzdCBmb3IgaG93IHRvIHRyaWdnZXIgdGhlIGhlYXAgYnVmZmVyIG92ZXJydW4uCisKK1RoYW5rcyB0byBOaW1hIEFnaGRhaWkgZm9yIHRlc3RpbmcgYW5kIGZpbmRpbmcgbnVtZXJvdXMKK3dheXMgdG8gYnJlYWsgZWFybHkgaXRlcmF0aW9ucyBvZiB0aGlzIHBhdGNoLgorLS0tCisgTkVXUyAgICAgICAgICAgICAgfCAgNSArKysrKworIFRIQU5LUy5pbiAgICAgICAgIHwgIDEgKworIHNyYy9rd3NldC5jICAgICAgIHwgIDIgKysKKyB0ZXN0cy9NYWtlZmlsZS5hbSB8ICAxICsKKyB0ZXN0cy9rd3NldC1hYnVzZSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNSBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RzL2t3c2V0LWFidXNlCisKK2RpZmYgLS1naXQgYS9ORVdTIGIvTkVXUworaW5kZXggOTc1NDQwZC4uMzgzNWQ4ZCAxMDA2NDQKKy0tLSBhL05FV1MKKysrKyBiL05FV1MKK0BAIC0yLDYgKzIsMTEgQEAgR05VIGdyZXAgTkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvdXRsaW5lIC0qLQorIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgPy4/ICg/Pz8/LT8/LT8/KSBbP10KKyAKKysqKiBCdWcgZml4ZXMKKysKKysgIGdyZXAgbm8gbG9uZ2VyIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZnJvbSBiZXlvbmQgdGhlIGVuZAorKyAgb2YgdGhlIGhlYXAtYWxsb2NhdGVkIGlucHV0IGJ1ZmZlci4KKysKKyAKKyAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDIuMjEgKDIwMTQtMTEtMjMpIFtzdGFibGVdCisgCitkaWZmIC0tZ2l0IGEvVEhBTktTLmluIGIvVEhBTktTLmluCitpbmRleCBhZWFmNTE2Li42MjQ0NzhkIDEwMDY0NAorLS0tIGEvVEhBTktTLmluCisrKysgYi9USEFOS1MuaW4KK0BAIC02Miw2ICs2Miw3IEBAIE1pY2hhZWwgQWljaGxtYXlyICAgICAgICAgICAgICAgICAgIG1pa2xhQG54LmNvbQorIE1pbGVzIEJhZGVyICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzQGNjcy5tdC5uZWMuY28uanAKKyBNaXJyYXogTWlycmF6ICAgICAgICAgICAgICAgICAgICAgICBtaXJyYXoxQHJhbWJsZXIucnUKKyBOZWxzb24gSC4gRi4gQmVlYmUgICAgICAgICAgICAgICAgICBiZWViZUBtYXRoLnV0YWguZWR1CisrTmltYSBBZ2hkYWlpICAgICAgICAgICAgICAgICAgICAgICAgbmFnaGRhaWlAZmIuY29tCisgT2xhZiBLaXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgb2tpckBucy5sc3QuZGUKKyBQYXVsIEtpbW90byAgICAgICAgICAgICAgICAgICAgICAgICBraW1vdG9Ac3BhY2VuZXQudG4uY29ybmVsbC5lZHUKKyBQw6l0ZXIgUmFkaWNzICAgICAgICAgICAgICAgICAgICAgICAgbWl0Y2hudWxsQGdtYWlsLmNvbQorZGlmZiAtLWdpdCBhL3NyYy9rd3NldC5jIGIvc3JjL2t3c2V0LmMKK2luZGV4IDQwMDNjOGQuLjM3NmY3YzMgMTAwNjQ0CistLS0gYS9zcmMva3dzZXQuYworKysrIGIvc3JjL2t3c2V0LmMKK0BAIC02NDMsNiArNjQzLDggQEAgYm1leGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgIGlmICghIHRwKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICB0cCsrOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGVwIDw9IHRwKQorKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAyY2JhMmNkLi4wNTA4Y2QyIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtNzUsNiArNzUsNyBAQCBURVNUUyA9CQkJCQkJXAorICAgaW5jb25zaXN0ZW50LXJhbmdlCQkJCVwKKyAgIGludmFsaWQtbXVsdGlieXRlLWluZmxvb3AJCQlcCisgICBraGFkYWZ5CQkJCQlcCisrICBrd3NldC1hYnVzZQkJCQkJXAorICAgbG9uZy1saW5lLXZzLTJHaUItcmVhZAkJCVwKKyAgIG1hdGNoLWxpbmVzCQkJCQlcCisgICBtYXgtY291bnQtb3ZlcnJlYWQJCQkJXAorZGlmZiAtLWdpdCBhL3Rlc3RzL2t3c2V0LWFidXNlIGIvdGVzdHMva3dzZXQtYWJ1c2UKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi42ZDhlYzBjCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0cy9rd3NldC1hYnVzZQorQEAgLTAsMCArMSwzMiBAQAorKyMhIC9iaW4vc2gKKysjIEV2b2tlIGEgc2VnZmF1bHQgaW4gYSBoYXJkLXRvLXJlYWNoIGNvZGUgcGF0aCBvZiBrd3NldC5jLgorKyMgVGhpcyBidWcgYWZmZWN0ZWQgZ3JlcCB2ZXJzaW9ucyAyLjE5IHRocm91Z2ggMi4yMS4KKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrLiAiJHtzcmNkaXI9Ln0vaW5pdC5zaCI7IHBhdGhfcHJlcGVuZF8gLi4vc3JjCisrCisrZmFpbD0wCisrCisrIyBUaGlzIHRlc3QgY2FzZSBjaG9vc2VzIGEgaGF5c3RhY2sgb2Ygc2l6ZSAyNjAsMDAwLCBzaW5jZSBwcm9kZGluZworKyMgd2l0aCBnZGIgc2hvd2VkIGEgcmVhbGxvY2F0aW9uIHNsaWdodGx5IGxhcmdlciB0aGFuIHRoYXQgaW4gZmlsbGJ1Zi4KKysjIFRvIHJlYWNoIHRoZSBidWdneSBjb2RlLCB0aGUgbmVlZGxlIG11c3QgaGF2ZSBsZW5ndGggPCAxLzExIHRoYXQgb2YKKysjIHRoZSBoYXlzdGFjaywgYW5kIDEwLDAwMCBpcyBhIG5pY2Ugcm91bmQgbnVtYmVyIHRoYXQgZml0cyB0aGUgYmlsbC4KKytwcmludGYgJyUwMjYwMDAwZFh5XG4nIDAgfCBncmVwIC1GICQocHJpbnRmICUwMTAwMDBkeSAwKQorKworK3Rlc3QgJD8gPSAxIHx8IGZhaWw9MQorKworK0V4aXQgJGZhaWwKKy0tIAorMi40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NjEwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjEuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDNjNDgwNjRkNjQwOTg2MmI4YTg1MGRiODNjODAzOGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTI0NGExMWMwMGRlZThlN2U1ZTcxNGI5YWFhMDUzYWM2Y2JmYTI3ZTEwNGFiZWUyMGQzYzc3OGU0YmIwZTVkZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcGVybC1yZWdleHAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2luaXQubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCisJbXYgJHtEfSR7YmluZGlyfS9mZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZmdyZXAKKwlybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJncmVwIGVncmVwIGZncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2dyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2VncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9mZ3JlcCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjUuMWEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyZGEyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiUGF0dGVybiBtYXRjaGluZyB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIHZlcnNpb25zIG9mIGNvbW1vbmx5IHVzZWQgZ3JlcCB1dGlsaXRpZXMuICBUaGUgZ3JlcCBjb21tYW5kIHNlYXJjaGVzIG9uZSBvciBtb3JlIGlucHV0IFwKK2ZpbGVzIGZvciBsaW5lcyBjb250YWluaW5nIGEgbWF0Y2ggdG8gYSBzcGVjaWZpZWQgcGF0dGVybi4iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JlcC9ncmVwLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2V2YXJzIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtZWdyZXAtZmdyZXAtRml4LUxTQi1ORy1jYXNlcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTIyMDJmZTQ2Mjc3MGZhNmJlMWJiNjY3YmQ2Y2YzMGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzhjOGEyYmI5MjIzZDFmYjFiMTBiZGQ2MDdjZjQ0ODMwYWZjOTJmZDQ1MWFjNGNkMDc2MTliZjkyYmRkMzEzMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORl9JTkNMVURFRF9SRUdFWCA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCitFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVhfbGliYy1tdXNsID0gIi0td2l0aC1pbmNsdWRlZC1yZWdleCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1wZXJsLXJlZ2V4cCBcCisgICAgICAgICAgICAgICAgJHtFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVh9IgorCitDRkxBR1MgKz0gIi1EIFBST1RPVFlQRVMiCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9pbml0Lm00CisJY3AgLWYgJHtXT1JLRElSfS9NYWtldmFycyAke1N9L3BvLworfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9ncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9ncmVwCisJbXYgJHtEfSR7YmluZGlyfS9lZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZWdyZXAKKwltdiAke0R9JHtiaW5kaXJ9L2ZncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9mZ3JlcAorCXJtZGlyICR7RH0ke2JpbmRpcn0vCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImdyZXAgZWdyZXAgZmdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtlZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZWdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2ZncmVwIgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtZml4LWJpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTlhZTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5zdWIgfCAgIDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCistLS0gYS9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCisrKysgYi9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCitAQCAtMzgsMTYgKzM4LDE2IEBAIGdyb2ZmZXI6IGdyb2ZmZXIuc2ggZ3JvZmZlcjIuc2ggdmVyc2lvbi4KKyAJJChSTSkgJEA7CisgCXNlZCBcCisgICAgICAgICAgICAgLWUgInN8QGdAfCQoZyl8ZyIgXAorLQkgICAgLWUgInN8QEJJTkRJUkB8JChERVNURElSKSQoYmluZGlyKXxnIiBcCisrCSAgICAtZSAic3xAQklORElSQHwkKGJpbmRpcil8ZyIgXAorIAkgICAgLWUgInN8QGxpYmRpckB8JChERVNURElSKSQobGliZGlyKXxnIiBcCisgCSAgICAtZSAic3xAVkVSU0lPTkB8JCh2ZXJzaW9uKSQocmV2aXNpb24pfGciIFwKKyAJICAgICQoc3JjZGlyKS9ncm9mZmVyLnNoID4kQDsKKyAJY2htb2QgK3ggJEAKKyAKKyBpbnN0YWxsX2RhdGE6IGdyb2ZmZXIKKy0JLXRlc3QgLWQgJChERVNURElSKSQoYmluZGlyKSB8fCAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGJpbmRpcikKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorLQkkKElOU1RBTExfU0NSSVBUKSBncm9mZmVyICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktdGVzdCAtZCAkKGJpbmRpcikgfHwgJChta2luc3RhbGxkaXJzKSAkKGJpbmRpcikKKysJLSQoUk0pICQoYmluZGlyKS9ncm9mZmVyCisrCSQoSU5TVEFMTF9TQ1JJUFQpIGdyb2ZmZXIgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLXRlc3QgLWQgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyIHx8IFwKKyAgICAgICAgICAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorQEAgLTU4LDcgKzU4LDcgQEAgaW5zdGFsbF9kYXRhOiBncm9mZmVyCisgCSQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci92ZXJzaW9uLnNoCisgCisgdW5pbnN0YWxsX3N1YjoKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktJChSTSkgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorIAktJChSTSkgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyL3ZlcnNpb24uc2gKKyAJLXJtZGlyICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtcmVtb3ZlLW1vbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjRlZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBncm9mZi0xLjE4LjEuNC9NYWtlZmlsZS5pbiB8ICAgIDcgKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDYwLDI3ICs0NjAsMjIgQEAgT1RIRVJESVJTPVwKKyAgIHNyYy9yb2ZmL2dyb2cgXAorICAgc3JjL3JvZmYvbnJvZmYgXAorICAgY29udHJpYi9tbSBcCisgICBjb250cmliL3BpYzJncmFwaCBcCisgICBjb250cmliL2VxbjJncmFwaCBcCistICBjb250cmliL2dyb2ZmZXIgXAorLSAgY29udHJpYi9tb20gXAorLSAgZG9jCisrICBjb250cmliL2dyb2ZmZXIKKyBBTExESVJTPSQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSBcCisgICAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSAkKFRUWURFVkRJUlMpICQoT1RIRVJESVJTKQorIEVYVFJBRElSUz1cCisgICBmb250L2RldnBzL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2ZHZpL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2bGo0L2dlbmVyYXRlIFwKKy0gIHNyYy94ZGl0dmlldyBcCisgICBkb2MKKyBOT01BS0VESVJTPVwKKyAgIGFyY2gvZGpncHAgXAorICAgY29udHJpYi9tbS9leGFtcGxlcyBcCisgICBjb250cmliL21tL21tIFwKKy0gIGNvbnRyaWIvbW9tL2V4YW1wbGVzIFwKKy0gIGNvbnRyaWIvbW9tL21vbWRvYyBcCisgICBzcmMvbGlicy9zbnByaW50ZgorIERJU1RESVJTPVwKKyAgICQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSBcCisgICAkKEFMTFRUWURFVkRJUlMpICQoT1RIRVJESVJTKSAkKEVYVFJBRElSUykgJChOT01BS0VESVJTKQorIFRBUkdFVFM9YWxsIGluc3RhbGwgaW5zdGFsbF9iaW4gaW5zdGFsbF9kYXRhIGNsZWFuIGRpc3RjbGVhbiBtb3N0bHljbGVhbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWFuLWxvY2FsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21hbi1sb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2YxYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21hbi1sb2NhbC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyb2ZmLTEuMTguMS40Lm9yaWcvdG1hYy9tYW4ubG9jYWwJMjAwMC0xMC0yNiAyMjoxNToxNy4wMDAwMDAwMDAgKzA4MDAKKysrKyBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAkyMDEwLTA4LTI0IDE0OjE3OjUyLjA3MDAwNjY2NCArMDgwMAorQEAgLTEsMiArMSwyNyBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGFuLW9sZC50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gYW4tb2xkLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWRvYy1sb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDljMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21kb2MubG9jYWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjE4LjEuNC5vcmlnL3RtYWMvbWRvYy5sb2NhbAkyMDAxLTAzLTIzIDA4OjE3OjUxLjAwMDAwMDAwMCArMDgwMAorKysrIGdyb2ZmLTEuMTguMS40L3RtYWMvbWRvYy5sb2NhbAkyMDEwLTA4LTI0IDE0OjIwOjIyLjAxNDAwNjg0NiArMDgwMAorQEAgLTEsMiArMSwyNiBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGRvYy50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gZG9jLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWI0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjIyLjMub3JpZy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC0xMTMsNyArMTEzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzMzMjhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy9ncm9mZi0xLjIyLjItY29ycmVjdC1tYW4ubG9jYWwtaW5zdGFsbC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0NvcnJlY3QgdGhlIGluc3RhbGwgcGF0aCBvZiBtYW4ubG9jYWwgdG8gZml4IGZvbGxvd2luZyBlcnJvcjoKKyAgICAveW9jdG8vYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvZ3JvZmYvMS4yMi4yL3RtYWMvYW4tb2xkLnRtYWM6NjkwOiB3YXJuaW5nOiBjYW4ndCBmaW5kIG1hY3JvIGZpbGUgYG1hbi5sb2NhbCcKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL3RtYWMvTWFrZWZpbGUuc3ViIGIvdG1hYy9NYWtlZmlsZS5zdWIKK2luZGV4IDE1MDYyMzIuLmYxNDY4YzUgMTAwNjQ0CistLS0gYS90bWFjL01ha2VmaWxlLnN1YgorKysrIGIvdG1hYy9NYWtlZmlsZS5zdWIKK0BAIC0xMjEsOSArMTIxLDkgQEAgaW5zdGFsbF9kYXRhOiAkKE5PUk1BTEZJTEVTKSAkKFNQRUNJQUxGSUxFUykgbWFuLmxvY2FsIFwKKyAJICAkKFJNKSAkKERFU1RESVIpJChtZG9jZGlyKS8kJGY7IFwKKyAJICAkKElOU1RBTExfREFUQSkgJCRmLXMgJChERVNURElSKSQobWRvY2RpcikvJCRmOyBcCisgCWRvbmUKKy0JLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tYW4ubG9jYWwgXAorKwktdGVzdCAtZiAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgIHx8ICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbWFuLmxvY2FsIFwKKy0JICAgICAgICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsCisrCSAgICAgICAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwKKyAJLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICB8fCAkKElOU1RBTExfREFUQSkgbWRvYy5sb2NhbC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbAorIAorQEAgLTE2NCw5ICsxNjQsOSBAQCB1bmluc3RhbGxfc3ViOgorIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS8kKHRtYWNfc19wcmVmaXgpcy50bWFjCisgCSQoUk0pICQoREVTVERJUikkKHRtYWNkaXIpLyQodG1hY19hbl9wcmVmaXgpYW4udG1hYworIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS93d3cudG1hYworLQktaWYgY21wIC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsIFwKKysJLWlmIGNtcCAtcyAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgICAgICAgICAgICQoc3JjZGlyKS9tYW4ubG9jYWw7IHRoZW4gXAorLQkgICQoUk0pICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsOyBcCisrCSAgJChSTSkgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsOyBcCisgCWZpCisgCS1pZiBjbXAgLXMgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICAgICAgICAgICAkKHNyY2RpcikvbWRvYy5sb2NhbDsgdGhlbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3ODZhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitQUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTQzZmMxNmZjY2Q4NTE5ZmJhNDA1ZjBhMGZmNmU4YTMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vb2xkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICBmaWxlOi8vbWFuLWxvY2FsLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vbWRvYy1sb2NhbC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggXAorIiAKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkY9Ii0td2l0aG91dC14IC0tcHJlZml4PSR7RH0gLS1leGVjLXByZWZpeD0ke0R9IC0tYmluZGlyPSR7RH0ke2JpbmRpcn0gLS1kYXRhZGlyPSR7RH0ke2RhdGFkaXJ9IC0tbWFuZGlyPSR7RH0ke2RhdGFkaXJ9L21hbiAtLWluZm9kaXI9JHtEfSR7ZGF0YWRpcn1pbmZvIC0td2l0aC1hcHByZXNkaXI9JHtEfSR7ZGF0YWRpcn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZWVjYjgxNTMzOTM2ZDI1MWVkMDE1ZjQwZTVmNzI4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjNjN2MzYjZjYWU1ZThjYzUwNjJhMTQ0ZGU1ZWZmMDAyMmU4ZTk3MGUxNzc0NTI5Y2MyZDVkZGU0NmNlNTBkIgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKyAgICBvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgU29tZSBkaXN0cm9zIGhhdmUgYm90aCAvYmluL3BlcmwgYW5kIC91c3IvYmluL3BlcmwsIGJ1dCB3ZSBzZXQgcGVybCBsb2NhdGlvbgorCSMgZm9yIHRhcmdldCBhcyAvdXNyL2Jpbi9wZXJsLCBzbyBmaXggaXQgdG8gL3Vzci9iaW4vcGVybC4KKwlmb3IgaSBpbiBhZm10b2RpdCBtbXJvZmY7IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9LyRpCisJCWZpCisJZG9uZQorCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYKKwljcCAtcmYgJHtEfSR7ZGF0YWRpcn0vZ3JvZmYvc2l0ZS10bWFjLyogJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYvCisJY3AgLXJmICR7RH0ke2RhdGFkaXJ9L2dyb2ZmL3NpdGUtdG1hYy8qICR7RH0ke2RhdGFkaXJ9L2dyb2ZmLyR7UFZ9L3RtYWMvCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSgpIHsKKwlsbiAtcyB0YmwgJEQke2JpbmRpcn0vZ3RibAorCWVjaG8gImV4cG9ydCBHUk9GRl9GT05UX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS9mb250IiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWVjaG8gImV4cG9ydCBHUk9GRl9UTUFDX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS90bWFjIiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZmYTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYgpAQCAtMCwwICsxLDcwIEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JvZmYvZ3JvZmYtJHtQVn0udGFyLmd6IFwKKwlmaWxlOi8vZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBcCisJZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2M4MjVmYTY0YmM3MzA2YTg4NWYyZmIyMjY4ZDNlYzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2E0OGE5ZDZjOTc3NTBiZmJkNTM1ZmVlYjViZTAxMTFkYjY0MDZkZGI3YmI3OWZjNjgwODA5Y2RhNmQ4MjhhNSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfSArPSAicGVybCBzZWQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgIiR7QlVJTERfU1lTfSIgIT0gIiR7SE9TVF9TWVN9IiBdOyB0aGVuCisJCXNlZCAtaSBcCisJCSAgICAtZSAnL15HUk9GRkJJTj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm9mZjonIFwKKwkJICAgIC1lICcvXlRST0ZGQklOPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Ryb2ZmOicgXAorCQkgICAgLWUgJy9eR1JPRkZfQklOX1BBVEg9L3M6PS4qOj0ke1NUQUdJTkdfQklORElSX05BVElWRX06JyBcCisJCSAgICAtZSAnL15HUk9GRl9CSU5fRElSPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OicgXAorCQkgICAgJHtTfS9jb250cmliLyovTWFrZWZpbGUuc3ViIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLmluIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLnN1YgorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisgICAgIyBnZW5lcmF0ZSBnbnVsaWIgY29uZmlndXJlIHNjcmlwdAorICAgIG9sZGRpcj1gcHdkYAorICAgIGNkICR7U30vc3JjL2xpYnMvZ251bGliLworICAgIEFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorICAgIGNkICR7b2xkZGlyfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJZm9yIGkgaW4gYWZtdG9kaXQgbW1yb2ZmIGdyb3BkZiBwZGZtb20gZ3JvZzsgZG8KKwkJaWYgWyAtZiAke0R9JHtiaW5kaXJ9LyRpIF07IHRoZW4KKwkJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vJGkKKwkJZmkKKwlkb25lCisJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMgXTsgdGhlbgorCQlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3JvZmYgXAorCQktRiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L2ZvbnQgXAorCQktTSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L3RtYWMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc2l0ZS10bWFjIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59L2dyb2ZmZXIvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvZHVwLWRlZi1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllOGQyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2d6aXAgdXNlcyBnbnVsaWIsIHdob3NlIGhlYWRlciBjb25mbGljdCB3aXRoIGdsaWJjLiBUaGlzIHBhdGNoIHJlbmFtZSBzb21lIGZ1bmN0aW9uIHRvIGF2b2lkIGNvbmZsaWN0LgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9nemlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjM4LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjQ0LjAwMDAwMDAwMCArMDgwMAorQEAgLTE2MzcsNyArMTYzNyw3IEBACisgCX0KKyAgICAgICB9CisgCistICAgIGlmIChmdXRpbWVucyAob2ZkLCBvZm5hbWUsIHRpbWVzcGVjKSAhPSAwKQorKyAgICBpZiAoZnV0aW1lbnNfZ251bGliIChvZmQsIG9mbmFtZSwgdGltZXNwZWMpICE9IDApCisgICAgICAgeworIAlpbnQgZSA9IGVycm5vOworIAlXQVJOICgoc3RkZXJyLCAiJXM6ICIsIHByb2dyYW1fbmFtZSkpOworSW5kZXg6IGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2xpYi91dGltZW5zLmMJMjAxMC0wOC0xMyAxMDozMzo0Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5jCTIwMTAtMDgtMTMgMTA6MzQ6MDIuMDAwMDAwMDAwICswODAwCitAQCAtNzUsNyArNzUsNyBAQAorICAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIChzZXR0aW5nIGVycm5vKSBvbiBmYWlsdXJlLiAgKi8KKyAKKyBpbnQKKy1mdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisrZnV0aW1lbnNfZ251bGliIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKyAJICBjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworICAgLyogU29tZSBMaW51eC1iYXNlZCBORlMgY2xpZW50cyBhcmUgYnVnZ3ksIGFuZCBtaXNoYW5kbGUgdGltZSBzdGFtcHMKK0BAIC0xODUsNSArMTg1LDUgQEAKKyBpbnQKKyB1dGltZW5zIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworLSAgcmV0dXJuIGZ1dGltZW5zICgtMSwgZmlsZSwgdGltZXNwZWMpOworKyAgcmV0dXJuIGZ1dGltZW5zX2dudWxpYiAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKyB9CitJbmRleDogZ3ppcC0xLjMuMTIvbGliL3V0aW1lbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd6aXAtMS4zLjEyLm9yaWcvbGliL3V0aW1lbnMuaAkyMDEwLTA4LTEzIDEwOjE0OjU3LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmgJMjAxMC0wOC0xMyAxMDoyMTo0NS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDMgKzEsMyBAQAorICNpbmNsdWRlIDx0aW1lLmg+CistaW50IGZ1dGltZW5zIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisraW50IGZ1dGltZW5zX2dudWxpYiAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworIGludCB1dGltZW5zIChjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9tNC1leHRlbnNpb25zLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJmNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorcmVtb3ZlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB0byBmaXggdGhlIGF1dG9jb25mIGVycm9yICJBQ19SRVFVSVJFOiBjaXJjdWxhcgorZGVwZW5kZW5jeSBvZiBBQ19HTlVfU09VUkNFIgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9tNC9leHRlbnNpb25zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9tNC9leHRlbnNpb25zLm00CTIwMTAtMDgtMTYgMTQ6MTg6MTYuMDAwMDAwMDAwICswODAwCisrKysgZ3ppcC0xLjMuMTIvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA4LTE2IDE0OjIxOjU0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjYvd3JvbmctcGF0aC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4NjNkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2ZpeCBNYWtlTWFrZXIgaXNzdWVzIHdpdGggdXNpbmcgd3JvbmcgU0hFTEwvR1JFUAorCitBIHNldCBvZiBzdWJzdGl0dXRpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbCB0YXJnZXQgc2NyaXB0cyB3aXRoIHNlZCBieQorcmVwbGFjaW5nIHNvbWUga2V5IHdvcmRzIHdpdGggdGhlIGRldGVjdGVkIHZhbHVlcyBhdCBjb25maWd1cmUgdGltZSwgdGhpcworaXMgZXhhY3RseSBub3QgY29tcGxpYW50IHdpdGggY3Jvc3MgY29tcGxpbmcsIGFuZCB3aWxsIGNhdXNlIG1pc3NpbmcgcGF0aAorZXJyb3JzIGF0IHJ1biB0aW1lIGxpa2U6CisiL3Vzci9iaW4vemdyZXA6IGxpbmUgMjMwOiAvdXNyL2Jpbi9ncmVwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorCitGaXhlZCBieSByZW1vdmluZyB1bm5lZWRlZCBzdWJzdGl0dXRpb24gYW5kIHVzaW5nIHJlYWwgcnVudGltZSBwYXRocworaW5zdGVhZC4KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3ppcC0xLjMuMTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLXVycE4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDEzLTExLTMwIDEwOjA2OjA5LjQwMjIzNDg3MSArMDgwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0xMS0zMCAxMDoxMzo0Mi45NTIyMzYwMjUgKzA4MDAKK0BAIC04MSw5ICs4MSw4IEBAIGd6aXAuZG9jLmd6OiBnemlwLmRvYyAkKGJpbl9QUk9HUkFNUykKKyBTVUZGSVhFUyA9IC5pbgorIC5pbjoKKyAJJChBTV9WX0dFTilzZWQgXAorLQkJLWUgJ3N8L2Jpbi9zaHwkKFNIRUxMKXxnJyBcCisgCQktZSAnc3xbQF1iaW5kaXJAfCdcJyckKGJpbmRpciknXCcnfGcnIFwKKy0JCS1lICdzfFtAXUdSRVBAfCQoR1JFUCl8ZycgXAorKwkJLWUgJ3N8W0BdR1JFUEB8JChiYXNlX2JpbmRpcikvZ3JlcHxnJyBcCisgCQktZSAnc3xbQF1WRVJTSU9OQHwkKFZFUlNJT04pfGcnIFwKKyAJCSQoc3JjZGlyKS8kQC5pbiA+JEAtdCBcCisgCSAgJiYgY2htb2QgYSt4ICRALXQgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQ4MGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJTdGFuZGFyZCBHTlUgY29tcHJlc3NvciIKK0RFU0NSSVBUSU9OID0gIkdOVSBHemlwIGlzIGEgcG9wdWxhciBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0gb3JpZ2luYWxseSB3cml0dGVuIGJ5IEplYW4tbG91cCBHYWlsbHkgZm9yIHRoZSBHTlUgXAorcHJvamVjdC4gTWFyayBBZGxlciB3cm90ZSB0aGUgZGVjb21wcmVzc2lvbiBwYXJ0IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d6aXAvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorIyBjaGFuZ2UgdG8gR1BMdjMrIGluIDIwMDcvMDcuIFByZXZpb3VzIEdQTHYyIHZlcnNpb24gaXMgMS4zLjEyCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJHUkVQPSR7YmFzZV9iaW5kaXJ9L2dyZXAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIFJlbmFtZSBhbmQgbW92ZSBmaWxlcyBpbnRvIC9iaW4gKEZIUyksIHdoaWNoIGlzIHR5cGljYWwgcGxhY2UgZm9yIGd6aXAKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3VuemlwICR7RH0ke2Jhc2VfYmluZGlyfS9ndW56aXAKKwltdiAke0R9JHtiaW5kaXJ9L2d6aXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2d6aXAKKwltdiAke0R9JHtiaW5kaXJ9L3pjYXQgJHtEfSR7YmFzZV9iaW5kaXJ9L3pjYXQKKwltdiAke0R9JHtiaW5kaXJ9L3VuY29tcHJlc3MgJHtEfSR7YmFzZV9iaW5kaXJ9L3VuY29tcHJlc3MKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd1bnppcCBnemlwIHpjYXQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3VuemlwXSA9ICIke2Jhc2VfYmluZGlyfS9ndW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3ppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3ppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt6Y2F0XSA9ICIke2Jhc2VfYmluZGlyfS96Y2F0IgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuMy4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA2MjgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBnemlwLmluYworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtlbmRsaW5lPTIyO21kNT1jMDkzNGFkMTkwMGQ5MjdmODY1NTYxNTNkNGM3NmQyMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sencuaDtlbmRsaW5lPTE5O21kNT1jMjczZTA5YTAyZWRkOTgwMWNjNzRkMzk2ODMwNDllOSAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nemlwL2d6aXAtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL200LWV4dGVuc2lvbnMtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R1cC1kZWYtZml4LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjViYWMyZDIxODQwYWUwNzdlMDIxN2JjNWU0ODQ1YjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2Y1NjViZTA1ZjdmM2QxYWZmMTE3YzAzMGViN2M3MzgzMDA1MTBiN2QwOThjZWRlYTc5NmNhOGU0Y2Q1ODdhZiIKKworUFIgPSAicjIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDdmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIGd6aXAuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3ppcC8ke0JQfS50YXIuZ3oiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGZpbGU6Ly93cm9uZy1wYXRoLWZpeC5wYXRjaCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3ppcC5oO2JlZ2lubGluZT04O2VuZGxpbmU9MjA7bWQ1PTZlNDdjYWFhNjMwZTBjOGJmOWYxYmM4ZDk0YThlZDBlIgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnemlwLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzODYwM2NiMjg0M2JmNTY4MWZmNDFhYWIzYmNkNmEyMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5N2ViODNiNzYzZDllNWFkMzVmMzUxZmU1NTE3ZTZiNzE1MjFkN2FhYzdhY2YzZTNjYWNkYjZiMTQ5NmQ4ZjdlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2N2ZkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciB2aWV3aW5nL21hbmlwdWxhdGluZyBJREUgZGlzayBkcml2ZS9kcml2ZXIgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImhkcGFybSBpcyBhIExpbnV4IHNoZWxsIHV0aWxpdHkgZm9yIHZpZXdpbmcgXAorYW5kIG1hbmlwdWxhdGluZyB2YXJpb3VzIElERSBkcml2ZSBhbmQgZHJpdmVyIHBhcmFtZXRlcnMuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNFTlNFX3dpcGVyID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5UWFQ7bWQ1PTkxMGE4YTQyYzk2MmQyMzg2MTljNzVmZGI3OGJkYjI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWE4MmQ3YmEzYWRlOWU4ZWM5MDI3NDlkYjk4YzU5MmYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL0dQTHYyLnR4dDttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lwZXIvd2lwZXIuc2g7YmVnaW5saW5lPTc7ZW5kbGluZT0zMTttZDU9YjdiYzY0MmFkZGMxNTJlYTMwNzUwNWJmMWEyOTZmMDkiCisKKworUEFDS0FHRVMgPSsgIndpcGVyIgorCitGSUxFU193aXBlciA9ICIke2JpbmRpcn0vd2lwZXIuc2giCisKK1JERVBFTkRTX3dpcGVyID0gImJhc2ggZ2F3ayBzdGF0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9oZHBhcm0vJHtCUH0udGFyLmd6ICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIxM2VmZGJlNzQ3MWZhZDM0MDgxOTg5MThlMTY0MzU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlOTdiNGE3MWNiMDQxNDZmNTRjZjZmNjk3ODdlN2Y5N2RkZmRhOTgzNmRjODAzYjQ1OWQzYjNkZjNhNGZiZWUiCisKK0VYVFJBX09FTUFLRSArPSAnU1RSSVA9ImVjaG8iJworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaGRwYXJtIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2hkcGFybV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hkcGFybSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfSAke0R9LyR7bWFuZGlyfS9tYW44ICR7RH0vJHtiaW5kaXJ9CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAnc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0nIGluc3RhbGwKKwljcCAke1N9L3dpcGVyL3dpcGVyLnNoICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWZ1bGwtY21kbGluZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY5MDczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWZ1bGwtY21kbGluZS5iYgpAQCAtMCwwICsxLDEyIEBACitERVNDUklQVElPTiA9ICJBIGNvbnNvbGUtb25seSBpbWFnZSB3aXRoIG1vcmUgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0gXAorZnVuY3Rpb25hbGl0eSBpbnN0YWxsZWQuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHNzaC1zZXJ2ZXItb3BlbnNzaCIKKworSU1BR0VfSU5TVEFMTCA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICAke0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTH0gXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1rZXJuZWwtZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjM2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYgpAQCAtMCwwICsxLDIwIEBACitERVNDUklQVElPTiA9ICJBIGRldmVsb3BtZW50IGltYWdlIHRoYXQgYnVpbGRzIHRoZSBrZXJuZWwgYW5kIHBhY2thZ2VzIHRoYXQgYXJlIFwKK3NlbnNpdGl2ZSB0byBrZXJuZWwgdXBkYXRlcyBhbmQgdmVyc2lvbiBjaGFuZ2VzIgorCisjIENvdWxkIGFsc28gYmUgY29yZS1pbWFnZS1iYXNpYywgYnV0IHdlJ2xsIGtlZXAgdGhpcyBzbWFsbCBmb3Igbm93CityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0tFUk5FTF9ERVZfVVRJTFMgPz0gImRyb3BiZWFyIGNvbm5tYW4iCitLRVJORUxfREVWX1RPT0xTID89ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIHBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsIGtlcm5lbC1kZXZzcmMiCitLRVJORUxfREVWX01PRFVMRSA/PSAia2VybmVsLW1vZHVsZXMiCisKK0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAiJHtLRVJORUxfREVWX01PRFVMRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0tFUk5FTF9ERVZfVVRJTFN9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtLRVJORUxfREVWX1RPT0xTfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisjIFdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIHRoaW5ncyBsaWtlIGtlcm5lbCBidWlsZHMsIGV0Yy4KK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRV9hcHBlbmQgKz0gIisgMzAwMDAwMCIKKworIyBMZXQncyBkZWZpbmUgb3VyIG93biBzdWJzZXQgdG8gdGVzdCwgd2UgY2FuIGxhdGVyIGFkZCBhIG9uLXRhcmdldCBrZXJuZWwgYnVpbGQgZXZlbiEKK0RFRkFVTFRfVEVTVF9TVUlURVMgPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgc2NwIGRhdGUgZG1lc2cgcGFyc2Vsb2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmRjOWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrLiBJdCBcCitjYW4gYmUgdXNlZCBmb3IgY3VzdG9taXphdGlvbiBhbmQgaW1wbGVtZW50YXRpb25zIHRoYXQgY29uZm9ybSB0byBMaW51eCBcCitTdGFuZGFyZCBCYXNlIChMU0IpLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2I2ZTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBMaW51eCBTdGFuZGFyZCBCYXNlIFwKKyhMU0IpIGltcGxlbWVudGF0aW9ucy4gSXQgaW5jbHVkZXMgdGhlIGZ1bGwgbWV0YS10b29sY2hhaW4sIHBsdXMgZGV2ZWxvcG1lbnQgXAoraGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBzdGFuZGFsb25lIFNESy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJ0b29scy1zZGsgZGV2LXBrZ3MgdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyIKKworSU1BR0VfSU5TVEFMTCArPSAia2VybmVsLWRldnNyYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2IuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjFjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLmJiCkBAIC0wLDAgKzEsMTQgQEAKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgcGFja2FnZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gY29uZm9ybSBcCit0byB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSBzcGVjaWZpY2F0aW9uLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBzc2gtc2VydmVyLW9wZW5zc2ggaHdjb2RlY3MgcGFja2FnZS1tYW5hZ2VtZW50IgorCitJTUFHRV9JTlNUQUxMID0gIlwKKyAgICAke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2IgXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAicGFtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzI2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKQEAgLTAsMCArMSwxOSBAQAorREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlIHdpdGggY3VzdG9tIGluc3RhbGwgc2NyaXB0cywgXAorYWRkaW5nIGEgc2Vjb25kIHJvb3RmcywgdXNlZCBmb3IgdGVzdGluZy4iCisKKyMgdXNlIC10ZXN0ZnMgbGl2ZS1pbnN0YWxsIHNjcmlwdHMKK1BBQ0tBR0VfSU5TVEFMTCA9ICJpbml0cmFtZnMtbGl2ZS1ib290IGluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzIGluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyBidXN5Ym94IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorCisjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKworZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMiCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKK0JBRF9SRUNPTU1FTkRBVElPTlMgKz0gImJ1c3lib3gtc3lzbG9nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODI5NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIKQEAgLTAsMCArMSwxOCBAQAorREVTQ1JJUFRJT04gPSAiQSBtYXN0ZXIgaW1hZ2UgdG8gYmUgZGVwbG95ZWQgb24gYSB0YXJnZXQgdXNlZnVsIGZvciB0ZXN0aW5nIG90aGVyIGltYWdlcyIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCBwYWNrYWdlLW1hbmFnZW1lbnQiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCisjIHRoZSBkZXBsb3kgY29kZSByZXF1aXJlcyBiYXNoIGFuZAorIyBub3JtYWwgbGludXggdXRpbGl0aWVzIG5vdCBidXN5Ym94IG9uZXMKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKyAgICBiYXNoIGNvcmV1dGlscyB1dGlsLWxpbnV4IHRhciBnemlwIGJ6aXAyIGttb2QgXAorICAgIHB5dGhvbi1tb2R1bGVzIHB5dGhvbi1taXNjIFwKKyAgICBlMmZzcHJvZ3MgZTJmc3Byb2dzLW1rZTJmcyBwYXJ0ZWQgXAorICAgICIKKyMgd2UgbmVlZCBhIHBhcnRpY3VsYXIgaW5pdHJhbWZzIGZvciBsaXZlIGltYWdlcworIyB0aGF0IHB1bGxzIGN1c3RvbSBpbnN0YWxsIHNjcmlwdHMgd2hpY2ggdGFrZQorIyBjYXJlIG9mIHBhcnRpdGlvbmluZyBmb3IgdXMKK0lOSVRSRF9JTUFHRSA9ICJjb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNjNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkFuIGV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2UuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iCisKK0lNQUdFX0ZTVFlQRVMgPSAid2ljLmJ6MiIKK1JNX09MRF9JTUFHRSA9ICIxIgorCisjIGNvcmUtaW1hZ2UtbWluaW1hbCBpcyByZWZlcmVuY2VkIGluIC53a3MsIHNvIHdlIG5lZWQgaXRzIHJvb3RmcworIyB0byBiZSByZWFkeSBiZWZvcmUgb3VyIHJvb3RmcworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJjb3JlLWltYWdlLW1pbmltYWw6ZG9fcm9vdGZzIgorCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiMjAwMCIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWNkOGYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogRXhhbXBsZSBvZiBwYXJ0aXRpb25lZCBpbWFnZSB3aXRoIGNvbXBsZXggbGF5b3V0CisjIGxvbmctZGVzY3JpcHRpb246IFRoaXMgaW1hZ2UgY29udGFpbnMgYm9vdCBwYXJ0aXRpb24gYW5kIDMgcm9vdGZzIHBhcnRpdGlvbnMKKyMgY3JlYXRlZCBmcm9tIGNvcmUtaW1hZ2UtbWluaW1hbCBhbmQgd2ljLWltYWdlLW1pbmltYWwgaW1hZ2UgcmVjaXBlcy4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorcGFydCAvY29yZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPWNvcmUtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGNvcmUgLS1hbGlnbiAxMDI0CitwYXJ0IC9iYWNrdXAgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj13aWMtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGJhY2t1cCAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2MDllMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDVjNDdjZjUwNjFiODUyYzAyMTc4ZjAxZTIzNjkwYmZlMzhhOTlkOTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNyBNYXIgMjAxMyAxMToyMTozNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFkZCBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgbGlibmZuZXRsaW5rCisKK1RoaXMgY2hhbmdlcyB0aGUgY29uZmlndXJlIGJlaGF2aW91ciBmcm9tIGF1dG9kZXRlY3RpbmcKK2ZvciBsaWJuZm5ldGxpbmsgdG8gaGF2aW5nIGFuIG9wdGlvbiB0byBkaXNhYmxlIGl0IGV4cGxpY2l0bHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgfCAgIDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmE2MTZhYi4uY2UyZDMxNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTMsNiArNTMsOSBAQCBBQ19BUkdfRU5BQkxFKFtsaWJpcHFdLAorIEFDX0FSR19XSVRIKFtwa2djb25maWdkaXJdLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXBrZ2NvbmZpZ2Rpcj1QQVRIXSwKKyAJW1BhdGggdG8gdGhlIHBrZ2NvbmZpZyBkaXJlY3RvcnkgW1tMSUJESVIvcGtnY29uZmlnXV1dKSwKKyAJW3BrZ2NvbmZpZ2Rpcj0iJHdpdGh2YWwiXSwgW3BrZ2NvbmZpZ2Rpcj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKQorK0FDX0FSR19FTkFCTEUoW2xpYm5mbmV0bGlua10sCisrCUFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlibmZuZXRsaW5rXSwgW0RvIG5vdCB1c2UgbmV0ZmlsdGVyIG5ldGxpbmsgbGlicmFyeV0pLAorKwlbZW5hYmxlX2xpYm5mbmV0bGluaz0iJGVuYWJsZXZhbCJdLCBbZW5hYmxlX2xpYm5mbmV0bGluaz0ieWVzIl0pCisgCisgbGliaXB0Y19MREZMQUdTMj0iIjsKKyBBWF9DSEVDS19MSU5LRVJfRkxBR1MoWy1XbCwtLW5vLWFzLW5lZWRlZF0sCitAQCAtODksOSArOTIsMTEgQEAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MQVJHRUZJTEVdLCBbdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiID0gInllcyJdKQorIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREVWRUxdLCBbdGVzdCAiJGVuYWJsZV9kZXZlbCIgPSAieWVzIl0pCisgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MSUJJUFFdLCBbdGVzdCAiJGVuYWJsZV9saWJpcHEiID0gInllcyJdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKFtsaWJuZm5ldGxpbmtdLCBbbGlibmZuZXRsaW5rID49IDEuMF0sCistCVtuZm5ldGxpbms9MV0sIFtuZm5ldGxpbms9MF0pCistQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCTkZORVRMSU5LXSwgW3Rlc3QgIiRuZm5ldGxpbmsiID0gMV0pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2xpYm5mbmV0bGluayIgPSAieHllcyJdLCBbCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbbGlibmZuZXRsaW5rXSwgW2xpYm5mbmV0bGluayA+PSAxLjBdKQorKyAgXSkKKysKKytBTV9DT05ESVRJT05BTChbSEFWRV9MSUJORk5FVExJTktdLCBbdGVzdCAieCRlbmFibGVfbGlibmZuZXRsaW5rIiA9ICJ4eWVzIl0pCisgCisgcmVndWxhcl9DRkxBR1M9Ii1XYWxsIC1XYWdncmVnYXRlLXJldHVybiAtV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKyAJLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdyZWR1bmRhbnQtZGVjbHMgLVdzaGFkb3cgLVdzdHJpY3QtcHJvdG90eXBlcyBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwMDNkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSA3YzA3YjdmZDRmZGQ3ODQ0ZGQwMzJhZjgyMjMwNmYwOGU0NDIyYzM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMDo0NzoyOSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBmaXggYnVpbGQgd2l0aCBtdXNsCisKK0FkZCBuZWVkZWQgaGVhZGVycyB0aGV5IGFyZSBqdXN0IG5vdCBuZWVkZWQgZm9yIGdsaWJjNisgYnV0IGFsc28KK2ZvciBtdXNsCitEZWZpbmUgYWRkaXRpb25hbCBUQ09QVFMgaWYgbm90IHRoZXJlCisKK3VfaW5pdFggdHlwZXMgYXJlIGluIHN5cy90eXBlcy5oIGJlIGV4cGxpY2l0IGFib3V0IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jICAgICAgICAgICB8IDE1ICsrKysrKysrKysrKysrKworIGluY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCAgICAgfCAxMiAtLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMgYi9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKK2luZGV4IDY4OTc4NTcuLjhhMTcwYjIgMTAwNjQ0CistLS0gYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKKysrKyBiL2V4dGVuc2lvbnMvbGlieHRfVENQT1BUU1RSSVAuYworQEAgLTEyLDYgKzEyLDIxIEBACisgI2lmbmRlZiBUQ1BPUFRfTUQ1U0lHCisgIwlkZWZpbmUgVENQT1BUX01ENVNJRyAxOQorICNlbmRpZgorKyNpZm5kZWYgVENQT1BUX01BWFNFRworKyMJZGVmaW5lIFRDUE9QVF9NQVhTRUcgMgorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1dJTkRPVworKyMJZGVmaW5lIFRDUE9QVF9XSU5ET1cgMworKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1NBQ0tfUEVSTUlUVEVECisrIwlkZWZpbmUgVENQT1BUX1NBQ0tfUEVSTUlUVEVEIDQKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9TQUNLCisrIwlkZWZpbmUgVENQT1BUX1NBQ0sgNQorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1RJTUVTVEFNUAorKyMJZGVmaW5lIFRDUE9QVF9USU1FU1RBTVAgOAorKyNlbmRpZgorIAorIGVudW0geworIAlPX1NUUklQX09QVElPTiA9IDAsCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oIGIvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCitpbmRleCAxODg2MWZlLi5hNTk2M2U5IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCisrKysgYi9pbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmgKK0BAIC01LDcgKzUsNiBAQAorIAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKy0jaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA9PSAyCisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KK0BAIC0xMywxNSArMTIsNCBAQAorICNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2Vsc2UgLyogbGliYzUgKi8KKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSNpbmNsdWRlIDxsaW51eC9pcC5oPgorLSNpbmNsdWRlIDxsaW51eC9pbi5oPgorLSNpbmNsdWRlIDxsaW51eC9pZi5oPgorLSNpbmNsdWRlIDxsaW51eC9pY21wLmg+CistI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorLSNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKy0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy0jaW5jbHVkZSA8bGludXgvaW42Lmg+CistI2VuZGlmCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKK2luZGV4IDU3ZmQ4MmEuLjQ4MDcyNDYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCitAQCAtMTUsNiArMTUsNyBAQAorICNpZm5kZWYgX0lQVEFCTEVTX0gKKyAjZGVmaW5lIF9JUFRBQkxFU19ICisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorIAorICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvdHlwZXMuaC1hZGQtZGVmaW5lcy10aGF0LWFyZS1yZXF1aXJlZC1mb3ItaWZfcGFja2V0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVlMjllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDE5NTkzNDkxZjQzYjcwYzFhNzFjM2I5YjhmNGZmNGZkMTQ1MDAwMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjMgTWFyIDIwMTIgMTQ6Mjc6MjAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gdHlwZXMuaDogYWRkIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIGlmX3BhY2tldC5oCisKK1RoZSBpcHRhYmxlcyBsb2NhbCBsaW51eC90eXBlcy5oIG92ZXJyaWRlcyB0aGUga2VybmVsL3N5c3Jvb3QKK3R5cGVzLmguIEFzIHN1Y2gsIHdlIG5lZWQgdG8gcHJvdmlkZSBzb21lIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQKK3RvIGJ1aWxkIGFnYWluc3QgMy4yKyBrZXJuZWwgaGVhZGVycy4KKworaWZuZGVmIHByb3RlY3Rpb24gaXMgcHJvdmlkZWQgZm9yIHRoZSBkZWZpbmVzIHRvIGVuc3VyZSB0aGF0Citjb25maWd1cmF0aW9uIHRoYXQgYWxyZWFkeSBoYXZlIHRoZXNlIGRlZmluZXMgYXJlIHN0aWxsIGJ1aWxkYWJsZS4KKworVGhpcyBjb21taXQgaXMgdGVtcG9yYXJ5IHVudGlsIGEgbmV3IHZlcnNpb24gb2YgaXB0YWJsZXMgY2FuIGJlCit1c2VkIHRoYXQgY29udGFpbnMgdGhlIGRlZmluZXMuCisKK1RoaXMgaXMgc2ltaWxhciB0byB0aGUgY29tbWl0IGluIHRoZSBpcHRhYmxlcyBnaXQgcmVwb3NpdG9yeToKKworICBodHRwczovL2dpdC5uZXRmaWx0ZXIub3JnL2NnaS1iaW4vZ2l0d2ViLmNnaT9wPWlwdGFibGVzLmdpdDthPWNvbW1pdDtoPWRiZTc3Y2M5NzRjZWU2NTZlYWUzN2U3NTAzOWRkMWE0MTBhNDUzNWIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGUvbGludXgvdHlwZXMuaCB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAoraW5kZXggOGI0ODNjOC4uZWJmNjQzMiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCitAQCAtMzQsNSArMzQsMTUgQEAgdHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19iZTY0OworIHR5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fc3VtMTY7CisgdHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX193c3VtOworIAorKyNpZm5kZWYgX19hbGlnbmVkX3U2NAorKyNkZWZpbmUgX19hbGlnbmVkX3U2NCBfX3U2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKysjZW5kaWYKKysjaWZuZGVmIF9fYWxpZ25lZF9iZTY0CisrI2RlZmluZSBfX2FsaWduZWRfYmU2NCBfX2JlNjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisrI2VuZGlmCisrI2lmbmRlZiBfX2FsaWduZWRfbGU2NAorKyNkZWZpbmUgX19hbGlnbmVkX2xlNjQgX19sZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorKyNlbmRpZgorKworICNlbmRpZiAvKiAgX19BU1NFTUJMWV9fICovCisgI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCistLSAKKzEuNy4wLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzXzEuNC4yMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlc18xLjQuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjMDE3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlc18xLjQuMjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcga2VybmVsIHBhY2tldCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiaXB0YWJsZXMgaXMgdGhlIHVzZXJzcGFjZSBjb21tYW5kIGxpbmUgcHJvZ3JhbSB1c2VkIHRvIGNvbmZpZ3VyZSBhbmQgY29udHJvbCBuZXR3b3JrIHBhY2tldCBcCitmaWx0ZXJpbmcgY29kZSBpbiBMaW51eC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5ldGZpbHRlci5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubmV0ZmlsdGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaXB0YWJsZXMvaXB0YWJsZXMuYztiZWdpbmxpbmU9MTM7ZW5kbGluZT0yNTttZDU9YzVjZmZkMDk5NzQ1NThjZjI3ZDBmNzYzZGYyYTEyZGMiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUteC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtbmF0IFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtZGVmcmFnLWlwdjQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2sgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2staXB2NCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLW5mLW5hdCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdC1tYXNxdWVyYWRlIgorRklMRVNfJHtQTn0gPSsgIiR7bGliZGlyfS94dGFibGVzLyAke2RhdGFkaXJ9L3h0YWJsZXMiCitGSUxFU18ke1BOfS1kYmcgPSsgIiR7bGliZGlyfS94dGFibGVzLy5kZWJ1ZyIKKworU1JDX1VSSSA9ICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUzNmQwNDhjOGU4ZWVlYmNkOTc1N2QwODYzZWJiMGMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyMDA0YzY4MDIxZGE5YTU5OWZlZWQyN2Y2NWRlZmNmYjIyMTI4ZjdkYTJjMDUzMWMwZjc1ZGUwZjQ3OWQzZTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWtlcm5lbD0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAiCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKKyMgbGlibmZuZXRsaW5rIHJlY2lwZSBpcyBpbiBtZXRhLW5ldHdvcmtpbmcgbGF5ZXIKK1BBQ0tBR0VDT05GSUdbbGlibmZuZXRsaW5rXSA9ICItLWVuYWJsZS1saWJuZm5ldGxpbmssLS1kaXNhYmxlLWxpYm5mbmV0bGluayxsaWJuZm5ldGxpbmsiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgUmVtb3ZlIHNvbWUgbGlidG9vbCBtNCBmaWxlcworCSMgS2VlcCBheF9jaGVja19saW5rZXJfZmxhZ3MubTQgd2hpY2ggYmVsb25ncyB0byBhdXRvY29uZi1hcmNoaXZlLgorCXJtIC1mIGxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdGFyZ2V0cy5kaWZmIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3RhcmdldHMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2I1NTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3RhcmdldHMuZGlmZgpAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9NYWtlZmlsZQorKysrIGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCitAQCAtMTA2LDcgKzEwNiw3IEBAIGVuZGlmCisgZW5kaWYKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1JUFY0X1RBUkdFVFM9dHJhY2VwYXRoIHBpbmcgY2xvY2tkaWZmIHJkaXNjIGFycGluZyB0ZnRwZCByYXJwZAorK0lQVjRfVEFSR0VUUz10cmFjZXBhdGggcGluZyBjbG9ja2RpZmYgYXJwaW5nCisgSVBWNl9UQVJHRVRTPXRyYWNlcGF0aDYgdHJhY2Vyb3V0ZTYgcGluZzYKKyBUQVJHRVRTPSQoSVBWNF9UQVJHRVRTKSAkKElQVjZfVEFSR0VUUykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2IxODg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEyMTIyMS5vcmlnL3RyYWNlcGF0aC5jCisrKysgaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKK0BAIC0zNzAsOSArMzcwLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCX0KKyAjZW5kaWYKKyAKKy0JaGUgPSBnZXRob3N0YnluYW1lKHApOworKwloZSA9IGdldGhvc3RieW5hbWUyKGFyZ3ZbMF0sIEFGX0lORVQpOworIAlpZiAoaGUgPT0gTlVMTCkgeworLQkJaGVycm9yKCJnZXRob3N0YnluYW1lIik7CisrCQloZXJyb3IoImdldGhvc3RieW5hbWUyIik7CisgCQlleGl0KDEpOworIAl9CisgCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvcGluZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9waW5nLmMKKysrKyBpcHV0aWxzLXMyMDEyMTIyMS9waW5nLmMKK0BAIC0yNzksNyArMjc5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2Vsc2UKKyAJCQlpZG4gPSB0YXJnZXQ7CisgI2VuZGlmCistCQkJaHAgPSBnZXRob3N0YnluYW1lKGlkbik7CisrCQkJaHAgPSBnZXRob3N0YnluYW1lMihpZG4sIEFGX0lORVQpOworIAkJCWlmICghaHApIHsKKyAJCQkJZnByaW50ZihzdGRlcnIsICJwaW5nOiB1bmtub3duIGhvc3QgJXNcbiIsIHRhcmdldCk7CisgCQkJCWV4aXQoMik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZml4LWJ1aWxkLWNvbW1hbmQtbGluZS1hcmd1bWVudC13aXRoLWdudXRscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNkODJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZml4LWJ1aWxkLWNvbW1hbmQtbGluZS1hcmd1bWVudC13aXRoLWdudXRscy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb20gNTY4ZTk5MGQzMGZjN2U5NDE2ZTBhNmY4Yzc0ZWE1MDEzOTIxZWFlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudmFuZGV2ZW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxNiBKYW4gMjAxMyAwMzoxMjoxNSArMDkwMAorU3ViamVjdDogW1BBVENIXSBwaW5nNjogRml4IGJ1aWxkIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3aXRoIGdudXRscy4KKworVGhlIHBpbmc2IGNvbW1hbmQgY2FuIHVzZSBlaXRoZXIgb3BlbnNzbCBvciBnbnV0bHMuLi4KK2FuZCB0aGUgTWFrZWZpbGUgaGFzIGEgYnVuY2ggb2Ygc2V0dXAgZm9yIGRlZmluaW5nIHdoaWNoIG9mIHRoZSB0d28gdG8gdXNlLgorCitVbmZvcnR1bmF0ZWx5LCB0aGUgZmluYWwgLUQgZGVmaW5lIG9uIHRoZSBjb21tYW5kbGluZSB0byBlbmFibGUgZ251dGxzCitpbnNpZGUgdGhlIHBpbmc2LmMgZmlsZSBkaWRuJ3QgYWN0dWFsbHkgbWFrZSBpdCBvbnRvIHRoZSBnY2MKK2NvbW1hbmRsaW5lLgorVGhpcyBwYXRjaCBhZGRzIHRoZSAkKERFRl9DUllQVE8pIE1ha2VmaWxlIHZhcmlhYmxlIHRvIGZpeCB0aGlzIGdhcC4KKworU2lnbmVkLW9mZi1ieTogQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW52YW5kZXZlbkBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CistLS0KKyBNYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGM2MmQ5ZGYuLjg5MjQ5ZjUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xNDksNyArMTQ5LDcgQEAgTElCX2Nsb2NrZGlmZiA9ICQoTElCX0NBUCkKKyBERUZfcGluZ19jb21tb24gPSAkKERFRl9DQVApICQoREVGX0lETikKKyBERUZfcGluZyAgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKQorIExJQl9waW5nICA9ICQoTElCX0NBUCkgJChMSUJfSUROKQorLURFRl9waW5nNiA9ICQoREVGX0NBUCkgJChERUZfSUROKSAkKERFRl9XSVRIT1VUX0lGQUREUlMpICQoREVGX0VOQUJMRV9QSU5HNl9SVEhEUikKKytERUZfcGluZzYgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKSAkKERFRl9FTkFCTEVfUElORzZfUlRIRFIpICQoREVGX0NSWVBUTykKKyBMSUJfcGluZzYgPSAkKExJQl9DQVApICQoTElCX0lETikgJChMSUJfUkVTT0xWKSAkKExJQl9DUllQVE8pCisgCisgcGluZzogcGluZ19jb21tb24ubworLS0gCisxLjcuMi41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmJmOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvbnNnbWxzLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZpeCBuc2dtbHMgcGF0aCBpc3N1ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK0luZGV4OiBpcHV0aWxzLXMyMDEwMTAwNi9kb2MvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEwMTAwNi5vcmlnL2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIwOjQyOjI3LjAwMDAwMDAwMCArMDgwMAorKysrIGlwdXRpbHMtczIwMTAxMDA2L2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIxOjAxOjUyLjAwMDAwMDAwMCArMDgwMAorQEAgLTI3LDEwICsyNywxNSBAQAorICMgZG9jYm9vazJtYW4gcHJvZHVjZXMgdXR0ZXJseSB1Z2x5IG91dHB1dCBhbmQgSSBkaWQgbm90IGZpbmQKKyAjIGFueSB3YXkgdG8gY3VzdG9taXplIHRoaXMgYnV0IGhhY2tpbmcgYmFja2VuZCBwZXJsIHNjcmlwdCBhIGxpdHRsZS4KKyAjIFdlbGwsIGhlbmNlLi4uCisrIyBuc2dtbHMgc2VlbXMgYXBwZW5kIHBhdGggdG8gc2VhcmNoIGRpcmVjdG9yeSBhY2NvcmRpbmcgdG8gdGhlIHN5c2lkIHBhdGguCisrIyBlLmcuIGlmIGlucHV0IC4uL2luZGV4LmRiLCBpdCB3b3VsZCBzZWFyY2ggJHNlYXJjaF9kaXJlY3RvcnkvLi4vIHJhdGhlciB0aGFuCisrIyAkc2VhcmNoX2RpcmVjdG9yeSwgd2hpY2ggbGVhZHMgc2VhcmNoaW5nIGZhaWx1cmUuIEZpeGluZyBuc2dtbHMgcHJvYmFibHkKKysjIGludHJvZHVjZSBzb21lIHNpZGUgZWZmZWN0cywgc28gdXNlIHRoaXMgdWdseSBoYWNrOiBydW5uaW5nIG5zZ21scyBpbiBjdXJyZW50CisrIyBkaXJlY3RvcnksIGFuZCBydW5uaW5nIGRvY2Jvb2sybWFuIGluIHRtcCBkaXJlY3RvcnkuCisgCisgJChNQU5GSUxFUyk6IGluZGV4LmRiCisgCUAtbWtkaXIgdG1wLmRiMm1hbgorLQlAc2V0IC1lOyBjZCB0bXAuZGIybWFuOyBuc2dtbHMgLi4vJDwgfCBzZ21sc3BsIC4uL2RvY2Jvb2sybWFuLXNwZWMucGwgOwltdiAkQCAuLgorKwlAc2V0IC1lOyBuc2dtbHMgJDwgPnRtcC5kYjJtYW4vb3V0cHV0OyBjZCB0bXAuZGIybWFuOyBjYXQgb3V0cHV0IHwgc2dtbHNwbCAuLi9kb2Nib29rMm1hbi1zcGVjLnBsIDsJbXYgJEAgLi4KKyAJQC1ybSAtcmYgdG1wLmRiMm1hbgorIAorIGNsZWFuOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9pcHV0aWxzX3MyMDEyMTIyMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdhMzJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJOZXR3b3JrIG1vbml0b3JpbmcgdG9vbHMiCitERVNDUklQVElPTiA9ICJVdGlsaXRpZXMgZm9yIHRoZSBJUCBwcm90b2NvbCwgaW5jbHVkaW5nIHRyYWNlcm91dGU2LCBcCit0cmFjZXBhdGgsIHRyYWNlcGF0aDYsIHBpbmcsIHBpbmc2IGFuZCBhcnBpbmcuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJCU0QgJiBHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTM1O21kNT1mOWNlYjIwMTczM2U5YTZjZjhmMDA3NjZkZDI3OGQ4MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZXBhdGguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0wZWNlYTJiZjYwYmZmMmYzZDg0MDA5NmQ4NzY0N2YzZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcnBpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1mZTg0MzAxYjVjMjY1NWM5NTBmOGI5MmEwNTdmYWZhNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZnRwZC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzI7bWQ1PTI4ODM0YmY4YTkxYTViOGE5Mjc1NWRiZWU3MDllZjk2ICIKKworREVQRU5EUyA9ICJnbnV0bHMgZG9jYm9vay11dGlscy1uYXRpdmUgc2dtbHNwbC1uYXRpdmUgbGliY2FwIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi90YXJnZXRzLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vbnNnbWxzLXBhdGgtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYwNzJhZWY2NDIwNTcyMGRkMTg5M2IzNzVlMTg0MTcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1MGY1NDlmYzViNjIwYzIzYzU5MjlhYTZkNTRiN2RkZmM3ZWUxY2IxZThlZmRjNWU4YmIyMWQ4ZDBjNTMxOWYiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9IC1EX0dOVV9TT1VSQ0UnIFZQQVRIPSIke1NUQUdJTkdfTElCRElSfToke1NUQUdJTkdfRElSX0hPU1R9LyR7YmFzZV9saWJkaXJ9IiBhbGwgbWFuCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtiYXNlX2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJIyBTVUlEIHJvb3QgcHJvZ3JhbXMKKwlpbnN0YWxsIC1tIDQ1NTUgcGluZyAke0R9JHtiYXNlX2JpbmRpcn0vcGluZworCWluc3RhbGwgLW0gNDU1NSBwaW5nNiAke0R9JHtiYXNlX2JpbmRpcn0vcGluZzYKKwlpbnN0YWxsIC1tIDQ1NTUgdHJhY2Vyb3V0ZTYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCWluc3RhbGwgLW0gNDU1NSBjbG9ja2RpZmYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCSMgT3RoZXIgcHJvZ3JhbWdzCisJZm9yIGkgaW4gYXJwaW5nIHRyYWNlcGF0aCB0cmFjZXBhdGg2OyBkbworCSAgaW5zdGFsbCAtbSAwNzU1ICRpICR7RH0ke2Jhc2VfYmluZGlyfS8KKwlkb25lCisJIyBNYW51YWwgcGFnZXMgZm9yIHRoaW5ncyB3ZSBidWlsZCBwYWNrYWdlcyBmb3IKKwlmb3IgaSBpbiB0cmFjZXBhdGguOCB0cmFjZXJvdXRlNi44IHBpbmcuOCBhcnBpbmcuODsgZG8KKwkgIGluc3RhbGwgLW0gMDY0NCBkb2MvJGkgJHtEfSR7bWFuZGlyfS9tYW44LyB8fCB0cnVlCisJZG9uZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfS1waW5nID0gInBpbmciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZ10gPSAiJHtiYXNlX2JpbmRpcn0vcGluZyIKKworQUxURVJOQVRJVkVfJHtQTn0tcGluZzYgPSAicGluZzYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZzZdID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcGluZyAke1BOfS1waW5nNiAke1BOfS1hcnBpbmcgJHtQTn0tdHJhY2VwYXRoICR7UE59LXRyYWNlcGF0aDYgJHtQTn0tdHJhY2Vyb3V0ZTYgJHtQTn0tY2xvY2tkaWZmIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXBpbmcgJHtQTn0tcGluZzYgJHtQTn0tYXJwaW5nICR7UE59LXRyYWNlcGF0aCAke1BOfS10cmFjZXBhdGg2ICR7UE59LXRyYWNlcm91dGU2ICR7UE59LWNsb2NrZGlmZiIKKworRklMRVNfJHtQTn0JPSAiIgorRklMRVNfJHtQTn0tcGluZyA9ICIke2Jhc2VfYmluZGlyfS9waW5nLiR7QlBOfSIKK0ZJTEVTXyR7UE59LXBpbmc2ID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2LiR7QlBOfSIKK0ZJTEVTXyR7UE59LWFycGluZyA9ICIke2Jhc2VfYmluZGlyfS9hcnBpbmciCitGSUxFU18ke1BOfS10cmFjZXBhdGggPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2VwYXRoIgorRklMRVNfJHtQTn0tdHJhY2VwYXRoNiA9ICIke2Jhc2VfYmluZGlyfS90cmFjZXBhdGg2IgorRklMRVNfJHtQTn0tdHJhY2Vyb3V0ZTYJPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2Vyb3V0ZTYiCitGSUxFU18ke1BOfS1jbG9ja2RpZmYgPSAiJHtiYXNlX2JpbmRpcn0vY2xvY2tkaWZmIgorRklMRVNfJHtQTn0tZG9jCT0gIiR7bWFuZGlyfS9tYW44IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGVzcy9sZXNzXzQ3OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTg5NTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJUZXh0IGZpbGUgdmlld2VyIHNpbWlsYXIgdG8gbW9yZSIKK0RFU0NSSVBUSU9OID0gIkxlc3MgaXMgYSBwcm9ncmFtIHNpbWlsYXIgdG8gbW9yZSwgaS5lLiBhIHRlcm1pbmFsIFwKK2Jhc2VkIHByb2dyYW0gZm9yIHZpZXdpbmcgdGV4dCBmaWxlcyBhbmQgdGhlIG91dHB1dCBmcm9tIG90aGVyIFwKK3Byb2dyYW1zLiBMZXNzIG9mZmVycyBtYW55IGZlYXR1cmVzIGJleW9uZCB0aG9zZSB0aGF0IG1vcmUgZG9lcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdyZWVud29vZHNvZnR3YXJlLmNvbS8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgKEdQTHYyKyAoPDwgNDE4KSwgR1BMdjMrICg+PSA0MTgpKSB8IGxlc3MKKyMgSW5jbHVkaW5nIGVtYWlsIGF1dGhvciBnaXZpbmcgcGVybWlzc2luZyB0byB1c2UgQlNECisjCisjIEZyb206IE1hcmsgTnVkZWxtYW4gPG1hcmtuQGdyZWVud29vZHNvZnR3YXJlLmNvbT4KKyMgVG86IEVsaXphYmV0aCBGbGFuYWdhbiA8ZWxpemFiZXRoLmZsYW5hZ2FuQGludGVsLmNvbQorIyBEYXRlOiAxMi8xOS8xMQorIworIyBIaSBFbGl6YWJldGgsCisjIFVzaW5nIGEgZ2VuZXJpYyBCU0QgbGljZW5zZSBmb3IgbGVzcyBpcyBmaW5lIHdpdGggbWUuCisjIFRoYW5rcywKKyMKKyMgLS1NYXJrCisjCisKK0xJQ0VOU0UgPSAiR1BMdjMrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRTttZDU9NDhjMjZhMzA3ZjkxYWY3MDBlMWYwMDU4NWYyMTVhYWYiCitERVBFTkRTID0gIm5jdXJzZXMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDQ5ZjUxY2NmZTI2ODYwMDljNmNlOTQzZWViNGJiYWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWJmMDZjYjMwZWUyYTJiZDFmNzlmMzlhYTkxZTQ2NDQ0ZTdjYjE5YjQ4Yzk1YzQ5OTJmYTYzY2ZlNDUyN2E4MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAnYmluZGlyPSR7RH0ke2JpbmRpcn0nICdtYW5kaXI9JHtEfSR7bWFuZGlyfScgaW5zdGFsbAorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsZXNzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjQ0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby8wMF9hcmNoZXMucGF0Y2gKQEAgLTAsMCArMSw2MDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorQEAgLTAsMCArMSw3OCBAQAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjQxCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQzCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ0CisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisrCisrI2RlZmluZSBpb19zeXNjYWxsMSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLGJ0eXBlIGIpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYikgXAorKwkJICAgICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKKyt0eXBlIGZuYW1lIChhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytyZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgiJWQ0IikgPSAobG9uZykoZCk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpLCAiZCIgKF9fZCkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUgKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjLGR0eXBlIGQsZXR5cGUgZSkgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpKGQpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2UgX19hc21fXyAoIiVkNSIpID0gKGxvbmcpKGUpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSwgImQiIChfX2QpLCAiZCIgKF9fZSkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTEwLm9yaWcvc3JjL3N5c2NhbGwuaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLmgKK0BAIC0yOCw2ICsyOCwxMiBAQAorICNpbmNsdWRlICJzeXNjYWxsLXNwYXJjLmgiCisgI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyAjaW5jbHVkZSAic3lzY2FsbC1hcm02NC5oIgorKyNlbGlmIGRlZmluZWQoX19tNjhrX18pCisrI2luY2x1ZGUgInN5c2NhbGwtbTY4ay5oIgorKyNlbGlmIGRlZmluZWQoX19ocHBhX18pCisrI2luY2x1ZGUgInN5c2NhbGwtcGFyaXNjLmgiCisrI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKysjaW5jbHVkZSAic3lzY2FsbC1taXBzLmgiCisgI2Vsc2UKKyAjd2FybmluZyAidXNpbmcgZ2VuZXJpYyBzeXNjYWxsIG1ldGhvZCIKKyAjaW5jbHVkZSAic3lzY2FsbC1nZW5lcmljLmgiCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtMCwwICsxLDIyMyBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisrICogZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAgYnkgUmFsZiBCYWVjaGxlCisrICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKysgKgorKyAqIENoYW5nZWQgc3lzdGVtIGNhbGxzIG1hY3JvcyBfc3lzY2FsbDUgLSBfc3lzY2FsbDcgdG8gcHVzaCBhcmdzIDUgdG8gNyBvbnRvCisrICogdGhlIHN0YWNrLiBSb2JpbiBGYXJpbmUgZm9yIEFDTiBTLkEsIENvcHlyaWdodCAoQykgMTk5NiBieSBBQ04gUy5BCisrICovCisrCisrI2lmbmRlZiBfTUlQU19TSU1fQUJJMzIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkkzMgkJCTEKKysjZGVmaW5lIF9NSVBTX1NJTV9OQUJJMzIJCTIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkk2NAkJCTMKKysjZW5kaWYKKysKKysjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorKworKy8qCisrICogTGludXggbzMyIHN0eWxlIHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA0MDAwIHRvIDQ5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNDAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjQxKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyNDIpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyNDMpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjQ0KQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDI0NSkKKysKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLworKworKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CisrCisrLyoKKysgKiBMaW51eCA2NC1iaXQgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDUwMDAgdG8gNTk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk1MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCisrCisrI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCisrCisrLyoKKysgKiBMaW51eCBOMzIgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDYwMDAgdG8gNjk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk2MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLworKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICUzXHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICI9ciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTRcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKTsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikKKysKKysvKgorKyAqIFVzaW5nIHRob3NlIG1lYW5zIHlvdXIgYnJhaW4gbmVlZHMgbW9yZSB0aGFuIGFuIG9pbCBjaGFuZ2UgOy0pCisrICovCisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCwgZXR5cGUgZSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImx3XHQkMiwgJTZcblx0IiBcCisrCSJzdWJ1XHQkMjksIDMyXG5cdCIgXAorKwkic3dcdCQyLCAxNigkMjkpXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSJhZGRpdVx0JDI5LCAzMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiaSIgKF9fTlJfIyNzbmFtZSksIFwKKysJICAibSIgKCh1bnNpZ25lZCBsb25nKWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikgKi8KKysKKysjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkKKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCxldHlwZSxlKSBcCisrdHlwZSBmbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cGUgZCxldHlwZSBlKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTQgYXNtKCIkOCIpID0gKHVuc2lnbmVkIGxvbmcpIGU7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTZcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIityIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJyIiAoX19hNCksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZW5kaWYgLyogKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkgKi8KKysKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLXBhcmlzYy5oCitAQCAtMCwwICsxLDE0NiBAQAorKy8qCisrICogTGludXggc3lzdGVtIGNhbGwgbnVtYmVycy4KKysgKgorKyAqIENhcnkgQ291dGFudCBzYXlzIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIGFub3RoZXIgc3lzY2FsbCBnYXRld2F5CisrICogcGFnZSB0byBhdm9pZCBjbGFzaGluZyB3aXRoIHRoZSBIUFVYIHNwYWNlLCBhbmQgSSB0aGluayBoZSdzIHJpZ2h0OgorKyAqIGl0IHdpbGwgd291bGQga2VlcCBhIGJyYW5jaCBvdXQgb2Ygb3VyIHN5c2NhbGwgZW50cnkgcGF0aCwgYXQgdGhlCisrICogdmVyeSBsZWFzdC4gIElmIHdlIGRlY2lkZSB0byBjaGFuZ2UgaXQgbGF0ZXIsIHdlIGNhbiBgYGp1c3QnJyB0d2VhaworKyAqIHRoZSBMSU5VWF9HQVRFV0FZX0FERFIgZGVmaW5lIGF0IHRoZSBib3R0b20gYW5kIG1ha2UgX19OUl9MaW51eCBiZQorKyAqIDEwMjQgb3Igc29tZXRoaW5nLiAgT2gsIGFuZCByZWNvbXBpbGUgbGliYy4gPSkKKysgKgorKyAqIDY0LWJpdCBIUFVYIGJpbmFyaWVzIGdldCB0aGUgc3lzY2FsbCBnYXRld2F5IGFkZHJlc3MgcGFzc2VkIGluIGEgcmVnaXN0ZXIKKysgKiBmcm9tIHRoZSBrZXJuZWwgYXQgc3RhcnR1cCwgd2hpY2ggc2VlbXMgYSBzYW5lIHN0cmF0ZWd5LgorKyAqLworKworKyNkZWZpbmUgX19OUl9MaW51eCAgICAgICAgICAgICAgICAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwICAgICAgICAgICAoX19OUl9MaW51eCArIDIxNSkKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAgICAgICAgIChfX05SX0xpbnV4ICsgMjE2KQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgICAgICAgKF9fTlJfTGludXggKyAyMTcpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOCkKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE5KQorKworKyNkZWZpbmUgU1lTX2lmeShzeXNjYWxsX25hbWUpICAgX19OUl8jI3N5c2NhbGxfbmFtZQorKworKy8qIEFzc3VtZSBhbGwgc3lzY2FsbHMgYXJlIGRvbmUgZnJvbSBQSUMgY29kZSBqdXN0IHRvIGJlCisrICogc2FmZS4gVGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaXMgdGhhdCB5b3UgbG9zZSBhIHJlZ2lzdGVyCisrICogYW5kIHNhdmUvcmVzdG9yZSByMTkgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKyNkZWZpbmUgUElDCisrCisrLyogRGVmaW5pdGlvbiB0YWtlbiBmcm9tIGdsaWJjIDIuMy4zCisrICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9zeXNkZXAuaAorKyAqLworKworKyNpZmRlZiBQSUMKKysvKiBXQVJOSU5HOiBDQU5OT1QgQkUgVVNFRCBJTiBBIE5PUCEgKi8KKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgICAgICAgY29weSAlJXIxOSwgJSVyNFxuIgorKyMgZGVmaW5lIEtfTERXX0FTTV9QSUMJIiAgICAgICBjb3B5ICUlcjQsICUlcjE5XG4iCisrIyBkZWZpbmUgS19VU0lOR19HUjQJIiVyNCIsCisrI2Vsc2UKKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgXG4iCisrIyBkZWZpbmUgS19MRFdfQVNNX1BJQwkiIFxuIgorKyMgZGVmaW5lIEtfVVNJTkdfR1I0CisrI2VuZGlmCisrCisrLyogR0NDIGhhcyB0byBiZSB3YXJuZWQgdGhhdCBhIHN5c2NhbGwgbWF5IGNsb2JiZXIgYWxsIHRoZSBBQkkKKysgICByZWdpc3RlcnMgbGlzdGVkIGFzICJjYWxsZXItc2F2ZXMiLCBzZWUgcGFnZSA4LCBUYWJsZSAyCisrICAgaW4gc2VjdGlvbiAyLjIuNiBvZiB0aGUgUEEtUklTQyBSVU4tVElNRSBhcmNoaXRlY3R1cmUKKysgICBkb2N1bWVudC4gSG93ZXZlciEgcjI4IGlzIHRoZSByZXN1bHQgYW5kIHdpbGwgY29uZmxpY3Qgd2l0aAorKyAgIHRoZSBjbG9iYmVyIGxpc3Qgc28gaXQgaXMgbGVmdCBvdXQuIEFsc28gdGhlIGlucHV0IGFyZ3VtZW50cworKyAgIHJlZ2lzdGVycyByMjAgLT4gcjI2IHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgbGlzdCBzbyB0aGV5CisrICAgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5LiBBbHRob3VnaCByMTkgaXMgY2xvYmJlcmVkIGJ5IHRoZSBzeXNjYWxsCisrICAgd2UgY2Fubm90IHNheSB0aGlzIGJlY2F1c2UgaXQgd291bGQgdmlvbGF0ZSBBQkksIHRodXMgd2Ugc2F5CisrICAgcjQgaXMgY2xvYmJlcmVkIGFuZCB1c2UgdGhhdCByZWdpc3RlciB0byBzYXZlL3Jlc3RvcmUgcjE5CisrICAgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKworKyNkZWZpbmUgS19DQUxMX0NMT0JfUkVHUyAiJXIxIiwgIiVyMiIsIEtfVVNJTkdfR1I0IFwKKysJCQkgIiVyMjAiLCAiJXIyOSIsICIlcjMxIgorKworKyN1bmRlZiBLX0lOTElORV9TWVNDQUxMCisrI2RlZmluZSBLX0lOTElORV9TWVNDQUxMKG5hbWUsIG5yLCBhcmdzLi4uKQkoewkJCVwKKysJbG9uZyBfX3N5c19yZXM7CQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyBfX2FzbV9fKCJyMjgiKTsJCVwKKysJCUtfTE9BRF9BUkdTXyMjbnIoYXJncykJCQkJCVwKKysJCS8qIEZJWE1FOiBIQUNLIHN0dy9sZHcgcjE5IGFyb3VuZCBzeXNjYWxsICovCQlcCisrCQlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJXAorKwkJCUtfU1RXX0FTTV9QSUMJCQkJCVwKKysJCQkiCWJsZSAgMHgxMDAoJSVzcjIsICUlcjApXG4iCQlcCisrCQkJIglsZGkgJTEsICUlcjIwXG4iCQkJXAorKwkJCUtfTERXX0FTTV9QSUMJCQkJCVwKKysJCQk6ICI9ciIgKF9fcmVzKQkJCQkJXAorKwkJCTogImkiIChTWVNfaWZ5KG5hbWUpKSBLX0FTTV9BUkdTXyMjbnIJCVwKKysJCQk6ICJtZW1vcnkiLCBLX0NBTExfQ0xPQl9SRUdTIEtfQ0xPQl9BUkdTXyMjbnIJXAorKwkJKTsJCQkJCQkJXAorKwkJX19zeXNfcmVzID0gKGxvbmcpX19yZXM7CQkJCVwKKysJfQkJCQkJCQkJXAorKwlfX3N5c19yZXM7CQkJCQkJCVwKKyt9KQorKworKyNkZWZpbmUgS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18xKHIyNikJCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNiBfX2FzbV9fKCJyMjYiKSA9ICh1bnNpZ25lZCBsb25nKShyMjYpOyAgIFwKKysJS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18yKHIyNixyMjUpCQkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjUgX19hc21fXygicjI1IikgPSAodW5zaWduZWQgbG9uZykocjI1KTsgICBcCisrCUtfTE9BRF9BUkdTXzEocjI2KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI0IF9fYXNtX18oInIyNCIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNCk7ICAgXAorKwlLX0xPQURfQVJHU18yKHIyNixyMjUpCisrI2RlZmluZSBLX0xPQURfQVJHU180KHIyNixyMjUscjI0LHIyMykJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjIzIF9fYXNtX18oInIyMyIpID0gKHVuc2lnbmVkIGxvbmcpKHIyMyk7ICAgXAorKwlLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMiBfX2FzbV9fKCJyMjIiKSA9ICh1bnNpZ25lZCBsb25nKShyMjIpOyAgIFwKKysJS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCisrI2RlZmluZSBLX0xPQURfQVJHU182KHIyNixyMjUscjI0LHIyMyxyMjIscjIxKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMSBfX2FzbV9fKCJyMjEiKSA9ICh1bnNpZ25lZCBsb25nKShyMjEpOyAgIFwKKysJS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQorKworKy8qIEV2ZW4gd2l0aCB6ZXJvIGFyZ3Mgd2UgdXNlIHIyMCBmb3IgdGhlIHN5c2NhbGwgbnVtYmVyICovCisrI2RlZmluZSBLX0FTTV9BUkdTXzAKKysjZGVmaW5lIEtfQVNNX0FSR1NfMSBLX0FTTV9BUkdTXzAsICJyIiAoX19yMjYpCisrI2RlZmluZSBLX0FTTV9BUkdTXzIgS19BU01fQVJHU18xLCAiciIgKF9fcjI1KQorKyNkZWZpbmUgS19BU01fQVJHU18zIEtfQVNNX0FSR1NfMiwgInIiIChfX3IyNCkKKysjZGVmaW5lIEtfQVNNX0FSR1NfNCBLX0FTTV9BUkdTXzMsICJyIiAoX19yMjMpCisrI2RlZmluZSBLX0FTTV9BUkdTXzUgS19BU01fQVJHU180LCAiciIgKF9fcjIyKQorKyNkZWZpbmUgS19BU01fQVJHU182IEtfQVNNX0FSR1NfNSwgInIiIChfX3IyMSkKKysKKysvKiBUaGUgcmVnaXN0ZXJzIG5vdCBsaXN0ZWQgYXMgaW5wdXRzIGJ1dCBjbG9iYmVyZWQgKi8KKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzYKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzUgS19DTE9CX0FSR1NfNiwgIiVyMjEiCisrI2RlZmluZSBLX0NMT0JfQVJHU180IEtfQ0xPQl9BUkdTXzUsICIlcjIyIgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMyBLX0NMT0JfQVJHU180LCAiJXIyMyIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzIgS19DTE9CX0FSR1NfMywgIiVyMjQiCisrI2RlZmluZSBLX0NMT0JfQVJHU18xIEtfQ0xPQl9BUkdTXzIsICIlcjI1IgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMCBLX0NMT0JfQVJHU18xLCAiJXIyNiIKKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSkJCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxKQkJCQkJCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDEsIGFyZzEpOwkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyKQkJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAyLCBhcmcxLCBhcmcyKTsJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMykJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAzLCBhcmcxLCBhcmcyLCBhcmczKTsJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KSBcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwlcCisrfQorKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMTAub3JpZy9zcmMvc3lzY2FsbC1hcm0uaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCitAQCAtMTE0LDMgKzExNCwxMTkgQEAgdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMworICAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisgfQorIAorKy8qCisrICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKyAqCisrICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFJ1c3NlbGwgS2luZworKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKyAqCisrICogUGxlYXNlIGZvcndhcmQgX2FsbF8gY2hhbmdlcyB0byB0aGlzIGZpbGUgdG8gcm1rQGFybS5saW51eC5vcmcudWssCisrICogbm8gbWF0dGVyIHdoYXQgdGhlIGNoYW5nZSBpcy4gIFRoYW5rcyEKKysgKi8KKysKKysjZGVmaW5lIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UJMHg5MDAwMDAKKysKKysjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQorKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UJMAorKyNlbHNlCisrI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRQlfX05SX09BQklfU1lTQ0FMTF9CQVNFCisrI2VuZGlmCisrCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MykKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX1NZU0NBTExfQkFTRSsyNDQpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NSkKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NikKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NykKKysKKysjZGVmaW5lIF9fc3lzMih4KSAjeAorKyNkZWZpbmUgX19zeXMxKHgpIF9fc3lzMih4KQorKworKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCisrI2RlZmluZSBfX1NZU19SRUcobmFtZSkgcmVnaXN0ZXIgbG9uZyBfX3N5c3JlZyBfX2FzbV9fKCJyNyIpID0gX19OUl8jI25hbWU7CisrI2RlZmluZSBfX1NZU19SRUdfTElTVChyZWdzLi4uKSAiciIgKF9fc3lzcmVnKSAsICMjcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdDAiCisrI2Vsc2UKKysjZGVmaW5lIF9fU1lTX1JFRyhuYW1lKQorKyNkZWZpbmUgX19TWVNfUkVHX0xJU1QocmVncy4uLikgcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdCIgX19zeXMxKF9fTlJfIyNuYW1lKSAiIgorKyNlbmRpZgorKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxKQkJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEpIHsJCQkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApICkJCQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgewkJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSkgKQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczKQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMykgewkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMikgKQkJXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNClcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSB7CQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMyBfX2FzbV9fKCJyMyIpID0gKGxvbmcpYXJnNDsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLCAiciIgKF9fcjMpICkgXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KSB7XAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjMgX19hc21fXygicjMiKSA9IChsb25nKWFyZzQ7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3I0IF9fYXNtX18oInI0IikgPSAobG9uZylhcmc1OwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMiksCQlcCisrCQkJICAiciIgKF9fcjMpLCAiciIgKF9fcjQpICkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZGVzdGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2Rlc3RkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkOTYwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2Rlc3RkaXIucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMDYub3JpZy9NYWtlZmlsZQkyMDA0LTAyLTI2IDA3OjI1OjEwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCTIwMDYtMTAtMTQgMDk6MTk6MDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNyArMTUsNyBAQAorIAlAJChNQUtFKSAtQyBzcmMKKyAKKyBpbnN0YWxsOgorLQlAJChNQUtFKSAtQyBzcmMgaW5zdGFsbCBwcmVmaXg9JChwcmVmaXgpIGluY2x1ZGVkaXI9JChpbmNsdWRlZGlyKSBsaWJkaXI9JChsaWJkaXIpCisrCUAkKE1BS0UpIC1DIHNyYyBpbnN0YWxsIHByZWZpeD0kKERFU1RESVIpJChwcmVmaXgpIGluY2x1ZGVkaXI9JChERVNURElSKSQoaW5jbHVkZWRpcikgbGliZGlyPSQoREVTVERJUikkKGxpYmRpcikKKyAKKyAKKyBjbGVhbjoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTdlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb206IE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CitEYXRlOiBUdWUsIDI3IEphbiAyMDE1IDE0OjU5OjM1ICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEdlbmVyaWMgYXJjaCBkZWN0ZWN0aW9uIGZvciBwYWRkaW5nIGRlZmluZXMKKworV2hlbiBhdmFpbGFibGUgdXNlIHRoZSBHTlUgQyBkZWZpbmVzIGZvciBlbmRpYW4gYW5kIGJpdHdpZHRoIHRvCitkZXRlcm1pbmUgdGhlIHBhZGRpbmcgcmVxdWlyZWQuIFRoaXMgcmVkdWNlcyB0aGUgbmVlZCB0byBkZWZpbmUgdGhlCitwYWRkaW5nIHNlbGVjdGlvbiBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlLgorCitTaWduZWQtb2ZmLWJ5OiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorU2lnbmVkLW9mZi1ieTogSmVmZiBNb3llciA8am1veWVyQHJlZGhhdC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBzcmMvbGliYWlvLmggfCAxNiArKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGliYWlvLmggYi9zcmMvbGliYWlvLmgKK2luZGV4IDEyMjMxNDYuLjRhNGUwZjUgMTAwNjQ0CistLS0gYS9zcmMvbGliYWlvLmgKKysrKyBiL3NyYy9saWJhaW8uaAorQEAgLTUyLDE0ICs1MiwxOCBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworIC8qIGxpdHRsZSBlbmRpYW4sIDMyIGJpdHMgKi8KKyAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgKGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19BUk1FQl9fKSkgfHwgXAorICAgICBkZWZpbmVkKF9fc2hfXykgfHwgZGVmaW5lZChfX2JmaW5fXykgfHwgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBcCistICAgIGRlZmluZWQoX19jcmlzX18pCisrICAgIGRlZmluZWQoX19jcmlzX18pIHx8IFwKKysgICAgKGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIFwKKysgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl4OyB1bnNpZ25lZCB5CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJeDsgdW5zaWduZWQgeQorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4OyB1bnNpZ25lZCB5CisgCisgLyogbGl0dGxlIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fICYmIF9fU0laRU9GX0xPTkdfXyA9PSA4KQorICNkZWZpbmUgUEFEREVEKHgsIHkpCXgsIHkKKyAjZGVmaW5lIFBBRERFRHB0cih4LCB5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC02Nyw3ICs3MSw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgLyogYmlnIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKyAgICAgICAoZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCx5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC03Niw3ICs4Miw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgI2VsaWYgZGVmaW5lZChfX1BQQ19fKSB8fCBkZWZpbmVkKF9fczM5MF9fKSB8fCBcCisgICAgICAgKGRlZmluZWQoX19hcm1fXykgJiYgZGVmaW5lZChfX0FSTUVCX18pKSB8fCBcCisgICAgICAgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX202OGtfXykgfHwgXAorLSAgICAgIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19mcnZfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pCisrICAgICAgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX2Zydl9fKSB8fCBkZWZpbmVkKF9fYXZyMzJfXykgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgeTsgdW5zaWduZWQgbG9uZyB4CistLSAKKzIuMS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjg1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFBoaWwgU3RhdWIgPFBoaWwuU3RhdWJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLW1pcHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTA5Lm9yaWcvc3JjL3N5c2NhbGwtbWlwcy5oCisrKysgbGliYWlvLTAuMy4xMDkvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtNzYsNyArNzYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCitAQCAtMTAwLDcgKzEwMCw3IEBAIHR5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYykgXAorQEAgLTEyNSw3ICsxMjUsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCkgXAorQEAgLTE1MCw3ICsxNTAsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKQorQEAgLTE4Niw3ICsxODYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKSAqLworQEAgLTIxNiw3ICsyMTYsNyBAQCB0eXBlIGZuYW1lIChhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYyxkdHlwCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ZjVhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDYxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUHJvcGVybHkgbG9hZCBhcmd1bWVudHMgNSBhbiA2IGZvciB4ODYtNjQgc3lzY2FsbAorVXNlIGFzbSAoInIxMCIpIGFuZCBhc20gKCJyOCIpIHRvIGxvYWQgYXJndW1lbnRzIDUgYW4gNiBmb3IgeDg2LTY0CitzeXNjYWxsIHNvIHRoYXQgaXQgd29ya3Mgd2l0aCBib3RoIHgzMiBhbmQgeDg2LTY0LgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMTIvMDIKKworLS0tIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oLngzMgkyMDA5LTEwLTA5IDExOjE3OjAyLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oCTIwMTEtMTItMDIgMDk6MDk6MDcuNTM3NjAzMjI0IC0wODAwCitAQCAtMSw4ICsxLDE4IEBACisrI2lmbmRlZiBfX05SX2lvX3NldHVwCisgI2RlZmluZSBfX05SX2lvX3NldHVwCQkyMDYKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZGVzdHJveQorICNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyMDcKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZ2V0ZXZlbnRzCisgI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyMDgKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fc3VibWl0CisgI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjA5CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2NhbmNlbAorICNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTIxMAorKyNlbmRpZgorIAorICNkZWZpbmUgX19zeXNjYWxsX2Nsb2JiZXIgInIxMSIsInJjeCIsIm1lbW9yeSIgCisgI2RlZmluZSBfX3N5c2NhbGwgInN5c2NhbGwiCitAQCAtNDIsMTAgKzUyLDExIEBAIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB0eXBlIGZuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAorIHsJCQkJCQkJCQlcCisgbG9uZyBfX3JlczsJCQkJCQkJCVwKKy1fX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IiBfX3N5c2NhbGwJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNCBhc20gKCJyMTAiKSA9IChsb25nKSBhcmc0OwkJCQlcCisrX19hc21fXyB2b2xhdGlsZSAoX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpIDogX19zeXNjYWxsX2Nsb2JiZXIsInIxMCIgKTsgXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpKTsgXAorIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB9IAorIAorQEAgLTU0LDEwICs2NSwxMSBAQCByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgdHlwZSBmbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1KQlcCisgewkJCQkJCQkJCVwKKyBsb25nIF9fcmVzOwkJCQkJCQkJXAorLV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZxICU1LCUlcjEwIDsgbW92cSAlNiwlJXI4IDsgIiBfX3N5c2NhbGwJCVwKKytyZWdpc3RlciBsb25nIF9fYTQgYXNtICgicjEwIikgPSAobG9uZykgYXJnNDsJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNSBhc20gKCJyOCIpID0gKGxvbmcpIGFyZzU7CQkJCVwKKytfX2FzbV9fIHZvbGF0aWxlICggX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpLCJnIiAoKGxvbmcpKGFyZzUpKSA6CVwKKy0JX19zeXNjYWxsX2Nsb2JiZXIsInI4IiwicjEwIiApOwkJCQkJXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpLCJyIiAoX19hNSkpOwkJCVwKKyByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMjljZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBc3luY2hyb25vdXMgSS9PIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJBc3luY2hyb25vdXMgaW5wdXQvb3V0cHV0IGxpYnJhcnkgdGhhdCB1c2VzIHRoZSBrZXJuZWxzIG5hdGl2ZSBpbnRlcmZhY2UiCitIT01FUEFHRSA9ICJodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9pby9haW8uaHRtbCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kODA0NWYzYjhmOTI5YzFjYjI5YTFlM2ZkNzM3YjQ5OSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGliYS9saWJhaW8vbGliYWlvXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDBfYXJjaGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliYWlvX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmEzNTYwMmU0Mzc3ODM4M2UyZjQ5MDdhNGNhMzlhYjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTAxOTAyOGU2MzE3MjU3MjkzNzYyNTBlMzJiNDczMDEyZjdjYjY4ZTFmNzI3NWJmYzFiYmNkZDBmODc0NWY3ZSIKKworRVhUUkFfT0VNQUtFID0rICJwcmVmaXg9JHtwcmVmaXh9IGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSBsaWJkaXI9JHtsaWJkaXJ9IgorIyBOZWVkIGxpYmMgZm9yIHN0YWNrLXByb3RlY3RvcidzIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwoKSBib3VuY2UgZnVuY3Rpb24KK0xERkxBR1NfYXBwZW5kX3g4NiA9ICIgLWxjIgorCitkb19jb25maWd1cmUgKCkgeworICAgIHNlZCAtaSAncyNMSU5LX0ZMQUdTPS4qI0xJTktfRkxBR1M9JChMREZMQUdTKSMnIHNyYy9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvMDAwMS1BZGQtQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTc3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDE1MSBAQAorRnJvbSA1OTM1NzE1NzcwNmQ0N2MzNjViMjIyNzczOWUxN2RhYmEzNjA3NTI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxlc3NhbmRybyBHaGVkaW5pIDxhbGVzc2FuZHJvQGdoZWRpbmkubWU+CitEYXRlOiBTdW4sIDEgTWFyIDIwMTUgMTI6MDc6NDUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTIG9wdGlvbgorCitUaGlzIGZpeGVzIGEgZGlyZWN0b3J5IHRyYXZlcnNhbCBpbiB0aGUgY3BpbyB0b29sLgorCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY3Bpby9ic2RjcGlvLjEgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKystCisgY3Bpby9jcGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBsaWJhcmNoaXZlL2FyY2hpdmUuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgICAgICAgICAgfCAgICAzICsrKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgICAgfCAgIDE0ICsrKysrKysrKysrLS0tCisgbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrKysrKysKKyA2IGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGlvL2JzZGNwaW8uMSBiL2NwaW8vYnNkY3Bpby4xCitpbmRleCBmOTY2YWEwLi5lNTI1NDZlIDEwMDY0NAorLS0tIGEvY3Bpby9ic2RjcGlvLjEKKysrKyBiL2NwaW8vYnNkY3Bpby4xCitAQCAtMTU2LDcgKzE1Niw4IEBAIFNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24uCisgLkl0IEZsIEZsIGluc2VjdXJlCisgKGkgYW5kIHAgbW9kZSBvbmx5KQorIERpc2FibGUgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBleHRyYWN0aW9uIG9yIGNvcHlpbmcuCistVGhpcyBhbGxvd3MgZXh0cmFjdGlvbiB2aWEgc3ltYm9saWMgbGlua3MgYW5kIHBhdGggbmFtZXMgY29udGFpbmluZworK1RoaXMgYWxsb3dzIGV4dHJhY3Rpb24gdmlhIHN5bWJvbGljIGxpbmtzLCBhYnNvbHV0ZSBwYXRocywKKythbmQgcGF0aCBuYW1lcyBjb250YWluaW5nCisgLlNxIC4uCisgaW4gdGhlIG5hbWUuCisgLkl0IEZsIEogLCBGbCBGbCB4egorZGlmZiAtLWdpdCBhL2NwaW8vY3Bpby5jIGIvY3Bpby9jcGlvLmMKK2luZGV4IDBhY2RlMTEuLmIyNjdlOWIgMTAwNjQ0CistLS0gYS9jcGlvL2NwaW8uYworKysrIGIvY3Bpby9jcGlvLmMKK0BAIC0xNzEsNiArMTcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9OT19PVkVSV1JJVEVfTkVXRVI7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9QRVJNOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9GRkxBR1M7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX0FDTDsKK0BAIC0yNTYsNiArMjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJY2FzZSBPUFRJT05fSU5TRUNVUkU6CisgCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAkJCWJyZWFrOworIAkJY2FzZSAnTCc6IC8qIEdOVSBjcGlvICovCisgCQkJY3Bpby0+b3B0aW9uX2ZvbGxvd19saW5rcyA9IDE7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlLmggYi9saWJhcmNoaXZlL2FyY2hpdmUuaAoraW5kZXggMWYwZmMzOC4uZWY2MzVhYyAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmUuaAorQEAgLTY0OSw2ICs2NDksOCBAQCBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zZXRfcGFzc3BocmFzZV9jYWxsYmFjayhzdHJ1Y3QgYXJjaGl2ZSAqLAorIC8qIERlZmF1bHQ6IERvIG5vdCB1c2UgSEZTKyBjb21wcmVzc2lvbiBpZiBpdCB3YXMgbm90IGNvbXByZXNzZWQuICovCisgLyogVGhpcyBoYXMgbm8gZWZmZWN0IGV4Y2VwdCBvbiBNYWMgT1MgdjEwLjYgb3IgbGF0ZXIuICovCisgI2RlZmluZQlBUkNISVZFX0VYVFJBQ1RfSEZTX0NPTVBSRVNTSU9OX0ZPUkNFRAkoMHg4MDAwKQorKy8qIERlZmF1bHQ6IERvIG5vdCByZWplY3QgZW50cmllcyB3aXRoIGFic29sdXRlIHBhdGhzICovCisrI2RlZmluZSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyAoMHgxMDAwMCkKKyAKKyBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9leHRyYWN0KHN0cnVjdCBhcmNoaXZlICosIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosCisgCQkgICAgIGludCBmbGFncyk7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKK2luZGV4IGZhOTI1Y2MuLmEyZTdhZmEgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCitAQCAtMTc3LDYgKzE3Nyw5IEBAIFRoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyBOb3RlIHRoYXQgcGF0aHMgZW5kaW5nIGluCisgLlBhIC4uCisgYWx3YXlzIGNhdXNlIGFuIGVycm9yLCByZWdhcmRsZXNzIG9mIHRoaXMgZmxhZy4KKysuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKKytSZWZ1c2UgdG8gZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorK1RoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyAuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NQQVJTRQorIFNjYW4gZGF0YSBmb3IgYmxvY2tzIG9mIE5VTCBieXRlcyBhbmQgdHJ5IHRvIHJlY3JlYXRlIHRoZW0gd2l0aCBob2xlcy4KKyBUaGlzIHJlc3VsdHMgaW4gc3BhcnNlIGZpbGVzLCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBhcmNoaXZlIGZvcm1hdAorZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCitpbmRleCBhYjNiZGFjLi5jMTI5MGViIDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworQEAgLTI1MDksOCArMjUwOSw5IEBAIGNsZWFudXBfcGF0aG5hbWVfd2luKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCisgLyoKKyAgKiBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lLiAgSW4gcGFydGljdWxhciwgdGhpcyBzdHJpcHMgZHVwbGljYXRlCisgICogJy8nIGNoYXJhY3RlcnMsICcuJyBlbGVtZW50cywgYW5kIHRyYWlsaW5nICcvJy4gIEl0IGFsc28gcmFpc2VzIGFuCistICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJyBvciAoaWYgX1NFQ1VSRV9OT0RPVERPVCBpcworLSAqIHNldCkgYW55ICcuLicgaW4gdGhlIHBhdGguCisrICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJywgKGlmIF9TRUNVUkVfTk9ET1RET1QgaXMKKysgKiBzZXQpIGFueSAnLi4nIGluIHRoZSBwYXRoIG9yIChpZiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUworKyAqIGlzIHNldCkgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuCisgICovCisgc3RhdGljIGludAorIGNsZWFudXBfcGF0aG5hbWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKK0BAIC0yNTI5LDggKzI1MzAsMTUgQEAgY2xlYW51cF9wYXRobmFtZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQorIAljbGVhbnVwX3BhdGhuYW1lX3dpbihhKTsKKyAjZW5kaWYKKyAJLyogU2tpcCBsZWFkaW5nICcvJy4gKi8KKy0JaWYgKCpzcmMgPT0gJy8nKQorKwlpZiAoKnNyYyA9PSAnLycpIHsKKysJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTKSB7CisrCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKysJCQkgICAgICAgICAgICAgICAgICAiUGF0aCBpcyBhYnNvbHV0ZSIpOworKwkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworKwkJfQorKworIAkJc2VwYXJhdG9yID0gKnNyYysrOworKwl9CisgCisgCS8qIFNjYW4gdGhlIHBhdGhuYW1lIG9uZSBlbGVtZW50IGF0IGEgdGltZS4gKi8KKyAJZm9yICg7OykgeworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMgYi9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jCitpbmRleCAzMWM1YmZkLi4yYzk0MjA2IDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworKysrIGIvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworQEAgLTE3OCw2ICsxNzgsMjkgQEAgREVGSU5FX1RFU1QodGVzdF93cml0ZV9kaXNrX3NlY3VyZSkKKyAJYXNzZXJ0KFNfSVNESVIoc3Quc3RfbW9kZSkpOworIAlhcmNoaXZlX2VudHJ5X2ZyZWUoYWUpOworIAorKwkvKgorKwkgKiBXaXRob3V0IHNlY3VyaXR5IGNoZWNrcywgd2Ugc2hvdWxkIGJlIGFibGUgdG8KKysJICogZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorKwkgKi8KKysJYXNzZXJ0KChhZSA9IGFyY2hpdmVfZW50cnlfbmV3KCkpICE9IE5VTEwpOworKwlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWUoYWUsICIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFyY2hpdmVfZW50cnlfc2V0X21vZGUoYWUsIFNfSUZSRUcgfCAwNzc3KTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlRXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFzc2VydCgwID09IHVubGluaygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpKTsKKysKKysJLyogQnV0IHdpdGggc2VjdXJpdHkgY2hlY2tzIGVuYWJsZWQsIHRoaXMgc2hvdWxkIGZhaWwuICovCisrCWFzc2VydChhcmNoaXZlX2VudHJ5X2NsZWFyKGFlKSAhPSBOVUxMKTsKKysJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGFlLCAiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGFlLCBTX0lGUkVHIHwgMDc3Nyk7CisrCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfb3B0aW9ucyhhLCBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyk7CisrCWZhaWx1cmUoIkV4dHJhY3RpbmcgYW4gYWJzb2x1dGUgcGF0aCBzaG91bGQgZmFpbCBoZXJlLiIpOworKwlhc3NlcnRFcXVhbEludChBUkNISVZFX0ZBSUxFRCwgYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXJjaGl2ZV9lbnRyeV9mcmVlKGFlKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlTm90RXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCisgCWFzc2VydEVxdWFsSW50KEFSQ0hJVkVfT0ssIGFyY2hpdmVfd3JpdGVfZnJlZShhKSk7CisgCisgCS8qIFRlc3QgdGhlIGVudHJpZXMgb24gZGlzay4gKi8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNmY4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDJmNTVkNmJkMzA4ZWE2MTk3NTU1OGMyNDY5YWUzNDlkYmEyOTdlODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjIgRmViIDIwMTQgMTQ6MzU6NTkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IENWRS0yMDEzLTAyMTEKKworVGhpcyBwYXRjaCBjb21lcyBmcm9tOmh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29tbWl0LzIyNTMxNTQ1NTE0MDQzZTA0NjMzZTFjMDE1Yzc1NDBiOWRlOWRiZTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gc2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGUgdGhlIHBhdGNoIGJlY2F1c2Ugb2YgdXByZXYgb24gMjAxNDAyMjIKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK2luZGV4IGEzZDFhMzMuLmEzMjM1ODggMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK0BAIC02NzEsOCArNjcxLDEyIEBAIHN0YXRpYyBzc2l6ZV90CisgX2FyY2hpdmVfd3JpdGVfZGF0YShzdHJ1Y3QgYXJjaGl2ZSAqX2EsIGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBzKQorIHsKKyAJc3RydWN0IGFyY2hpdmVfd3JpdGUgKmEgPSAoc3RydWN0IGFyY2hpdmVfd3JpdGUgKilfYTsKKysJY29uc3Qgc2l6ZV90IG1heF93cml0ZSA9IElOVF9NQVg7CisgCWFyY2hpdmVfY2hlY2tfbWFnaWMoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfV1JJVEVfTUFHSUMsCisgCSAgICBBUkNISVZFX1NUQVRFX0RBVEEsICJhcmNoaXZlX3dyaXRlX2RhdGEiKTsKKysJLyogSW4gcGFydGljdWxhciwgdGhpcyBjYXRjaGVzIGF0dGVtcHRzIHRvIHBhc3MgbmVnYXRpdmUgdmFsdWVzLiAqLworKwlpZiAocyA+IG1heF93cml0ZSkKKysJCXMgPSBtYXhfd3JpdGU7CisgCWFyY2hpdmVfY2xlYXJfZXJyb3IoJmEtPmFyY2hpdmUpOworIAlyZXR1cm4gKChhLT5mb3JtYXRfd3JpdGVfZGF0YSkoYSwgYnVmZiwgcykpOworIH0KKy0tIAorMS44LjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDlhMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitBZGQgbWlzc2luZyBta2RpciBjYWxscyBzbyB0aGF0IG91dC1vZi10cmVlIGJ1aWxkcyB3b3JrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wdWxsLzUzNCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzZmEyZDIyLi41ZWNjYTUyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNTA4LDYgKzUwOCw3IEBAIGxpYmFyY2hpdmVfdGVzdF9MREFERD0gJChMVExJQklDT05WKQorICMgQnVpbGRpbmcgaXQgYXV0b21hdGljYWxseSBwcm92aWRlcyBhIHNhbml0eS1jaGVjayBvbiBsaWJhcmNoaXZlX3Rlc3RfU09VUkNFUworICMgYWJvdmUuCisgbGliYXJjaGl2ZS90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBsaWJhcmNoaXZlL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvbGliYXJjaGl2ZS90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGxpYmFyY2hpdmUvdGVzdC9saXN0LmgKKyAKKyBsaWJhcmNoaXZlX1RFU1RTX0VOVklST05NRU5UPSBMSUJBUkNISVZFX1RFU1RfRklMRVM9YGNkICQodG9wX3NyY2Rpcik7L2Jpbi9wd2RgL2xpYmFyY2hpdmUvdGVzdCBMUlpJUD1OT0NPTkZJRworQEAgLTgzNSw2ICs4MzYsNyBAQCBic2R0YXJfdGVzdF9DUFBGTEFHUz1cCisgCSQoUExBVEZPUk1DUFBGTEFHUykKKyAKKyB0YXIvdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgdGFyL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvdGFyL3Rlc3QvdGVzdF8qLmMgfCBncmVwIERFRklORV9URVNUID4gdGFyL3Rlc3QvbGlzdC5oCisgCisgaWYgQlVJTERfQlNEVEFSCitAQCAtOTc1LDYgKzk3Nyw3IEBAIGJzZGNwaW9fdGVzdF9DUFBGTEFHUz0gXAorIGJzZGNwaW9fdGVzdF9MREFERD1saWJhcmNoaXZlX2ZlLmxhCisgCisgY3Bpby90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBjcGlvL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvY3Bpby90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGNwaW8vdGVzdC9saXN0LmgKKyAKKyBpZiBCVUlMRF9CU0RDUElPCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAzOGJkMjk5Li43YmRiMDBjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDIsNiArMTAyLDcgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyBBQ19DSEVDS19UT09MKFtTVFJJUF0sW3N0cmlwXSkKKytBQ19QUk9HX01LRElSX1AKKyAKKyAjCisgIyBPcHRpb25zIGZvciBidWlsZGluZyBic2R0YXIuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmFmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVc2UgcGtnLWNvbmZpZyBmb3IgdGhlIGxpYnhtbDIgZGVwZW5kZW5jeSwgbm90IHRoZSAtY29uZmlnIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhcmNoaXZlLTMuMS4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTMtMDItMDkgMTc6MjM6MDMuMDAwMDAwMDAwICswMDAwCisrKysgbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAxNToyNjo0NS40NDY0OTkxMDggKzAwMDAKK0BAIC0zMjksMTAgKzMyOSwxMCBAQAorICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1leHBhdF0sIFtEb24ndCBidWlsZCBzdXBwb3J0IGZvciB4YXIgdGhyb3VnaCBleHBhdF0pKQorIAorIGlmIHRlc3QgIngkd2l0aF94bWwyIiAhPSAieG5vIjsgdGhlbgorLSAgQUNfUEFUSF9QUk9HKFtYTUwyX0NPTkZJR10sIFt4bWwyLWNvbmZpZ10sLCBbJHtQQVRIfV0pCistICBpZiB0ZXN0ICJ4JFhNTDJfQ09ORklHIiAhPSAieCI7IHRoZW4KKy0gICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IGAke1hNTDJfQ09ORklHfSAtLWNmbGFnc2AiCistICAgIExJQlM9IiR7TElCU30gYCR7WE1MMl9DT05GSUd9IC0tbGlic2AiCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhQS0dfWE1MMiwgW2xpYnhtbC0yLjBdLCwpCisrICBpZiB0ZXN0ICJ4JFBLR19YTUwyX0NGTEFHUyIgIT0gIngiOyB0aGVuCisrICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke1BLR19YTUwyX0NGTEFHU30iCisrICAgIExJQlM9IiR7TElCU30gJHtQS0dfWE1MMl9MSUJTfSIKKyAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcixbdHJ1ZV0sQUNfTVNHX0ZBSUxVUkUoTWlzc2luZyB4bWwyIGxpYnJhcnkpKQorICAgZWxzZQorICAgICBBQ19DSEVDS19MSUIoeG1sMix4bWxJbml0UGFyc2VyKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhMzI1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJTdXBwb3J0IGZvciByZWFkaW5nIHZhcmlvdXMgYXJjaGl2ZSBmb3JtYXRzIgorREVTQ1JJUFRJT04gPSAiQyBsaWJyYXJ5IGFuZCBjb21tYW5kLWxpbmUgdG9vbHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyLCBjcGlvLCB6aXAsIElTTywgYW5kIG90aGVyIGFyY2hpdmUgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGliYXJjaGl2ZS5vcmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjRlM2ZmZDYwN2Q2Njg2YzZjYjJmNjMzOTQzNzA4NDEiCisKK0RFUEVORFMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKKworUEFDS0FHRUNPTkZJRyA/PSAibGlieG1sMiB6bGliIGJ6MiIKKworUEFDS0FHRUNPTkZJR19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbGFyZ2VmaWxlIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsLCIKK1BBQ0tBR0VDT05GSUdbeGF0dHJdID0gIi0tZW5hYmxlLXhhdHRyLC0tZGlzYWJsZS14YXR0cixhdHRyLCIKK1BBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbYnoyXSA9ICItLXdpdGgtYnoybGliLC0td2l0aG91dC1iejJsaWIsYnppcDIsIgorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLWx6bWFkZWMgLS13aXRoLWx6bWEsLS13aXRob3V0LWx6bWFkZWMgLS13aXRob3V0LWx6bWEseHosIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKK1BBQ0tBR0VDT05GSUdbbGlieG1sMl0gPSAiLS13aXRoLXhtbDIsLS13aXRob3V0LXhtbDIsbGlieG1sMiwiCitQQUNLQUdFQ09ORklHW2V4cGF0XSA9ICItLXdpdGgtZXhwYXQsLS13aXRob3V0LWV4cGF0LGV4cGF0LCIKK1BBQ0tBR0VDT05GSUdbbHpvXSA9ICItLXdpdGgtbHpvMiwtLXdpdGhvdXQtbHpvMixsem8sIgorUEFDS0FHRUNPTkZJR1tuZXR0bGVdID0gIi0td2l0aC1uZXR0bGUsLS13aXRob3V0LW5ldHRsZSxuZXR0bGUsIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJhcmNoaXZlLm9yZy9kb3dubG9hZHMvbGliYXJjaGl2ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZmFkNWE1MDNmNjYzMjliYjlkMmY0MzA4YjVkZTk4YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlYjg3ZWFjZDhmZTQ5ZThkOTBjOGZkYzE4OTgxMzAyM2NjYzMxOWM1ZTc1MmIwMWZiNmFkMGNjN2IyYzUzZDVlIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworQ1BQRkxBR1MgKz0gIi1JJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcyIKKworZG9fY29uZmlndXJlW2NsZWFuZGlyc10gKz0gIiR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIFdlIGp1c3QgbmVlZCB0aGUgaGVhZGVycyBmb3Igc29tZSB0eXBlIGNvbnN0YW50cywgc28gbm8gbmVlZCB0bworCSMgYnVpbGQgYWxsIG9mIGUyZnNwcm9ncyBmb3IgdGhlIHRhcmdldAorCWNwIC1SICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9leHQyZnMgJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcy8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NzZiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIAorCithdXRvbWFrZSAxLjEyLnggaGFzIGRlcHJlY2F0ZWQgQU1fUFJPR19NS0RJUl9QICwgYW5kIHRocm93cyBhIHdhcm5pbmcgZm9yIHRoYXQsCithbmQgdGhlIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycyBiZWNhdXNlIG9mIHRoZSAtV2Vycm9yIHBhcmFtZXRlci4KKworVGhlc2UgQU1fUFJPR19NS0RJUl9QIGFyZSBjb21pbmcgZnJvbSBnZXR0ZXh0LCBhbmQgdGhlIGxhdGVzdCBnZXR0ZXh0IGNvZGUgaGFzIG5vdCAKK2VsaW1pbmF0ZWQgdGhlc2UgZGVwcmVjYXRlZCBtYWNyb3MgeWV0LiBTbyBkaXNhYmxlIHRoZSB0cmVhdG1lbnQgb2Ygd2FybmluZ3MKK2FzIGVycm9ycyB1bnRpbCBnZXR0ZXh0IGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1hY3Jvcy4KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDcvMTAKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMjMsNyArMjMsNyBAQCBBQ19DT1BZUklHSFQoW0NvcHlyaWdodCAoYykgMjAwMi0yMDExIFNpCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIEFDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorLUFNX0lOSVRfQVVUT01BS0UoWzEuMTAgLVdhbGwgLVdlcnJvciAtV25vLW92ZXJyaWRlXSkKKytBTV9JTklUX0FVVE9NQUtFKFsxLjEwIC1XYWxsIC1Xbm8tb3ZlcnJpZGVdKQorIEFNX1NJTEVOVF9SVUxFUyhbeWVzXSkKKyAKKyAjIExpYnJhcnkgY29kZSBtb2RpZmllZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZJU0lPTisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjM1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmRkIGxpYmlkbi0xLjI2L2RvYy9NYWtlZmlsZS5hbSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0KKy0tLSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wOS0xOCAxMToyNTo0NS4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wMi0wOCAwNzo0MToyNC41OTE0MzE0NjIgKzAyMDAKK0BAIC00OSwxNSArNDksOSBAQAorCisgIyBNYW4gcGFnZXMuCisKKy1kaXN0X21hbl9NQU5TID0gaWRuLjEgJChnZG9jX01BTlMpCisrZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKQorIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChkaXN0X21hbl9NQU5TKQorCistaWRuLjE6ICQodG9wX3NyY2Rpcikvc3JjL2lkbi5jICQodG9wX3NyY2Rpcikvc3JjL2lkbi5nZ28gXAorLQkJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKy0JJChIRUxQMk1BTikgXAorLQkJLS1uYW1lPSJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgY29tbWFuZCBsaW5lIHRvb2wiIFwKKy0JCS0tb3V0cHV0PSRAICQodG9wX2J1aWxkZGlyKS9zcmMvaWRuJChFWEVFWFQpCistCisgIyBHRE9DCisKKyBHRE9DX0JJTiA9ICQoc3JjZGlyKS9nZG9jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGFmZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgYXV0b21ha2U6IHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycworfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiB3YXJuaW5nOiAnbGliaWRuLmxhJzogbGlua2luZyBsaWJ0b29sIGxpYnJhcmllcyB1c2luZyBhIG5vbi1QT1NJWAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiBhcmNoaXZlciByZXF1aXJlcyAnQU1fUFJPR19BUicgaW4gJ2NvbmZpZ3VyZS5hYycKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMzQsNiArMzQsMTAgQEAgQUNfU1VCU1QoTFRfQ1VSUkVOVCwgMTcpCisgQUNfU1VCU1QoTFRfUkVWSVNJT04sIDcpCisgQUNfU1VCU1QoTFRfQUdFLCA2KQorIAorKyMgYXV0b21ha2UgMS4xMiBzZWVtcyB0byByZXF1aXJlIHRoaXMsIGJ1dCBhdXRvbWFrZSAxLjExIGRvZXNuJ3QgcmVjb2duaXplIGl0CisrbTRfcGF0dGVybl9hbGxvdyhbQU1fUFJPR19BUl0pCisrQU1fUFJPR19BUgorKworIEFDX1BST0dfQ0MKKyBnbF9FQVJMWQorIGxnbF9FQVJMWQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjFkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8wLjYuMTQuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9pZG5hLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0xODttZDU9MTMzNmU4NDhjYTdiOGUyNTc2N2MzYzdlOGZhMzhhODkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2lkbi5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTU2Yzg5ZTM1OTY1MmE3MWNkYTEyOGQ3NWYwZmZkYWM0IgorUFIgPSAicjEiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICJodHRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvbGliaWRuLyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNDBmMDEyYTQ1ZmViNTYxNjg4NTM5OThiYjg3YWQ0ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODkxMGMyYWQ2NjRiZGY0ZWVkMmMyZmZmODhlMjRmODg4MjYzNmVjOWQyNjY2OTM2NmZmMDNiNDY5YzA1YWUzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIHRoaXMgdmVyc2lvbiBvZiBsaWJpZG4gY29waWVzIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmcm9tIAorCSMgYXV0b2NvbmYgQ1ZTIGJlY2F1c2UgYXRtIHRoZSBhdXRvY29uZiBpdCB1c2VzIGlzIGEgYml0IG9sZAorCSMgbm93IHdpdGggY3Jvc3MgYXV0b3Rvb2wsIHRoYXQgbWFjcm8gaXMgYWxyZWFkeSB0aGVyZSBhbmQgdGhpcworCSMgbG9jYWwgZGVmaW5pdGlvbiBjYXVzZXMgY2lyY3VsYXIgZGVwZW5kZW5jeS4gQWN0dWFsbHkgQUNfR05VX1NPVVJDRQorCSMgaXMgaWRlbnRpY2FsIHRvIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4gU28gcmVtb3ZlIGFsbCBsb2NhbAorCSMgcmVmZXJlbmNlcyB0byB0aGUgbGF0dGVyIGhlcmUuCisJc2VkIC1pIC1lICIvQUNfUkVRVUlSRShcW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OUy9kIiAke1N9L2xpYi9nbC9tNC9nbnVsaWItY29tcC5tNAorCXJtIC1mICR7U30vbGliL2dsL200L2V4dGVuc2lvbnMubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vTGliaWRuLmRsbAorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNDc0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzAuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiKExHUEx2Mi4xKyB8IExHUEx2MykgJiBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZjRiZTQ3OTQwYTkxZWU2OTU1NmY1ZjcxZWVkNGFlYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYyO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2lkbmEuaDtlbmRsaW5lPTIxO21kNT03YzBiMzgyOGQxYjE1MzY2M2JlOWEwNGFkNGY3OTc1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaWRuLmM7ZW5kbGluZT0yMDttZDU9ZjQyMzVmMmEyY2IyYjY1Nzg2YjI5NzlmYjNjZjdmYmYiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYmlkbi8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImIxN2VkYzg1NTFjZDMxY2M1ZjE0YzgyYTlkYWJmNThlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM5YjlmYzk0ZDc0MDgxYzE4NTc1N2IxMmUwODkxY2U1YTIyZGI1NTI2OGU3ZDFiYjI0NTMzZmY0NDMyZWIwNTMiCisKKyMgY29tbWFuZCB0b29sIGlzIHVuZGVyIEdQTHYzKywgd2hpbGUgbGliaWRuIGl0c2VsZiBpcyB1bmRlciBMR1BMdjIuMSsgb3IgTEdQTHYzCisjIHNvIHBhY2thZ2UgY29tbWFuZCBpbnRvIGEgc2VwYXJhdGUgcGFja2FnZQorUEFDS0FHRVMgPSsgImlkbiIKK0ZJTEVTX2lkbiA9ICIke2JpbmRpcn0vKiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jc2hhcnAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvbGlidGlycGMtMC4yLjEtZm9ydGlmeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc4NWQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRml4IGEgcG9zc2libGUgb3ZlcmZsb3cgKHJlcG9ydGVkIGJ5IF9GT1JUSUZZX1NPVVJDRT0yKQorCitQb3J0ZWQgZnJvbSBHZW50b28KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJ0aXJwYy0wLjIuMS9zcmMvZ2V0cnBjcG9ydC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidGlycGMtMC4yLjEub3JpZy9zcmMvZ2V0cnBjcG9ydC5jCisrKysgbGlidGlycGMtMC4yLjEvc3JjL2dldHJwY3BvcnQuYworQEAgLTU0LDExICs1NCwxMSBAQCBnZXRycGNwb3J0KGhvc3QsIHByb2dudW0sIHZlcnNudW0sIHByb3RvCisgCisgCWlmICgoaHAgPSBnZXRob3N0YnluYW1lKGhvc3QpKSA9PSBOVUxMKQorIAkJcmV0dXJuICgwKTsKKysJaWYgKGhwLT5oX2xlbmd0aCAhPSBzaXplb2YoYWRkci5zaW5fYWRkci5zX2FkZHIpKQorKwkJcmV0dXJuICgwKTsKKyAJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworIAlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworIAlhZGRyLnNpbl9wb3J0ID0gIDA7CistCWlmIChocC0+aF9sZW5ndGggPiBzaXplb2YoYWRkcikpCistCSAgaHAtPmhfbGVuZ3RoID0gc2l6ZW9mKGFkZHIpOworIAltZW1jcHkoJmFkZHIuc2luX2FkZHIuc19hZGRyLCBocC0+aF9hZGRyLCAoc2l6ZV90KWhwLT5oX2xlbmd0aCk7CisgCS8qIEluY29uc2lzdGVudCBpbnRlcmZhY2VzIG5lZWQgY2FzdHMhIDotKCAqLworIAlyZXR1cm4gKHBtYXBfZ2V0cG9ydCgmYWRkciwgKHVfbG9uZylwcm9nbnVtLCAodV9sb25nKXZlcnNudW0sIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDMzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAordWNsaWJjIGRvZXMgbm90IHByb3ZpZGUgZGVzIGZ1bmN0aW9uYWxpdHkgdW5saWtlIGVnbGliYyBzbyBsZXRzIGRpc2FibGUgc3NsIHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGlidGlycGMtMC4yLjMvc3JjL3JwY19zb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL3JwY19zb2MuYwkyMDEzLTAzLTEwIDE2OjAwOjUxLjM1NTI4MjE1MyAtMDcwMAorKysrIGxpYnRpcnBjLTAuMi4zL3NyYy9ycGNfc29jLmMJMjAxMy0wMy0xMCAxNjowMDo1MS43MDMyODIxNDggLTA3MDAKK0BAIC01MjAsNiArNTIwLDcgQEAKKyAJICAgIChyZXN1bHRwcm9jX3QpIHJwY193cmFwX2JjYXN0LCAidWRwIik7CisgfQorIAorKyNpZiAwCisgLyoKKyAgKiBDcmVhdGUgdGhlIGNsaWVudCBkZXMgYXV0aGVudGljYXRpb24gb2JqZWN0LiBPYnNvbGV0ZWQgYnkKKyAgKiBhdXRoZGVzX3NlY2NyZWF0ZSgpLgorQEAgLTU1MSw2ICs1NTIsNyBAQAorIAlkdW1teSA9IGF1dGhkZXNfc2VjY3JlYXRlKHNlcnZlcm5hbWUsIHdpbmRvdywgTlVMTCwgY2tleSk7CisgCXJldHVybiAoZHVtbXkpOworIH0KKysjZW5kaWYKKyAKKyAvKgorICAqIENyZWF0ZSBhIGNsaWVudCBoYW5kbGUgZm9yIGEgdW5peCBjb25uZWN0aW9uLiBPYnNvbGV0ZWQgYnkgY2xudF92Y19jcmVhdGUoKQorSW5kZXg6IGxpYnRpcnBjLTAuMi4zL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuMzU1MjgyMTUzIC0wNzAwCisrKysgbGlidGlycGMtMC4yLjMvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuNzAzMjgyMTQ4IC0wNzAwCitAQCAtNTAsNyArNTAsNyBAQAorICAgICAgICAgcnBjX2NhbGxtc2cuYyBycGNfZ2VuZXJpYy5jIHJwY19zb2MuYyBycGNiX2NsbnQuYyBycGNiX3Byb3QuYyBcCisgICAgICAgICBycGNiX3N0X3hkci5jIHN2Yy5jIHN2Y19hdXRoLmMgc3ZjX2RnLmMgc3ZjX2F1dGhfdW5peC5jIHN2Y19hdXRoX25vbmUuYyBcCisgICAgICAgICBzdmNfZ2VuZXJpYy5jIHN2Y19yYXcuYyBzdmNfcnVuLmMgc3ZjX3NpbXBsZS5jIHN2Y192Yy5jIGdldHBlZXJlaWQuYyBcCistICAgICAgICBhdXRoX3RpbWUuYyBhdXRoX2Rlcy5jIGF1dGhkZXNfcHJvdC5jCisrICAgICAgICBhdXRoX3RpbWUuYworIAorICMjIFhEUgorIGxpYnRpcnBjX2xhX1NPVVJDRVMgKz0geGRyLmMgeGRyX3JlYy5jIHhkcl9hcnJheS5jIHhkcl9mbG9hdC5jIHhkcl9tZW0uYyB4ZHJfcmVmZXJlbmNlLmMgeGRyX3N0ZGlvLmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWRmMDAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzAuMi41LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiTGlidGlycGMgaXMgYSBwb3J0IG9mIFN1bnMgVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IHRvIExpbnV4IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnRpcnBjLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xODMwNzUmYXRpZD05MDM3ODQiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWY4MzVjY2U4ODUyNDgxZTRiMmJiYmRkMjNiNWU0N2YzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9uZXRuYW1lLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ZjhhOGNkMmNiMjVhYzVhYTE2NzY3MzY0ZmIwZTNjMjQiCisKK0RFUEVORFMgKz0gInh6LW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvbGlicnBjIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmJ6MjtuYW1lPWxpYnRpcnBjIFwKKyAgICAgICAgICAgJHtHRU5UT09fTUlSUk9SfS8ke0JQTn0tZ2xpYmMtbmZzLnRhci54ejtuYW1lPWdsaWJjLW5mcyBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2giCisKK1NSQ19VUklbbGlidGlycGMubWQ1c3VtXSA9ICI4Y2Q0MWE1ZWY1YTliNTBkMGZiNmFiYjk4YWYxNTM2OCIKK1NSQ19VUklbbGlidGlycGMuc2hhMjU2c3VtXSA9ICI2MmY5ZGU3YzJjODY4NmM1Njg3NTc3MzBlMWZlZjY2NTAyYTBlMDBkNmNhY2YzMzU0NmQwMjY3OTg0ZTAwMmRiIgorU1JDX1VSSVtnbGliYy1uZnMubWQ1c3VtXSA9ICI1YWU1MDBiOWQwYjZiNzJjYjg3NWJjMDQ5NDRiOTQ0NSIKK1NSQ19VUklbZ2xpYmMtbmZzLnNoYTI1NnN1bV0gPSAiMjY3N2NmZWRmNjI2ZjNmNWE4ZjZlNTA3YWVkNWJiOGY3OWE3NDUzYjU4OWQ2ODRkYmJjMDg2ZTc1NTE3MGQ4MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3NzYXBpIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIGNwIC1yICR7U30vLi4vdGlycGMgJHtTfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgY2hvd24gcm9vdDpyb290ICR7RH0ke3N5c2NvbmZkaXJ9L25ldGNvbmZpZworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZWQ0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJ1c2VyIGFuZCBncm91cCBhY2NvdW50IGFkbWluaXN0cmF0aW9uIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgbGlidXNlciBsaWJyYXJ5IGltcGxlbWVudHMgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBtYW5pcHVsYXRpbmcgYW5kIGFkbWluaXN0ZXJpbmcgdXNlciBcCithbmQgZ3JvdXAgYWNjb3VudHMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGlidXNlci8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saWJ1c2VyL25ld3RpY2tldCIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXNlci5oO2VuZGxpbmU9MTk7bWQ1PTc2YjMwMWY2M2MzOWZhOTkyMDYyMzk1ZWZiZGM5NTU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NhbXBsZXMvdGVzdHVzZXIuYztlbmRsaW5lPTE5O21kNT0zYjg3ZmE2NjBmYTNmNGE2YmIzMWQ2MjRhZmUzMGJhMSIKKworU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL2kvbGlidXNlci9saWJ1c2VyLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYzZTVlNWM1NTFlOTlkYzUzMDJiNDBiODBiZDZkNGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1OGZmNGZhYmIwMWEyNTA0M2IxNDIxODVhMzNlZWVhOTYxMTA5ZGQ2MGQ0YjQwYjZhOWRmNGZhM2NhY2UyMGIiCisKK0RFUEVORFMgPSAicG9wdCBsaWJwYW0gZ2xpYi0yLjAgeHotbmF0aXZlIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGxpbnV4ZG9jLXRvb2xzLW5hdGl2ZSBweXRob24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIgcGtnY29uZmlnCisKK0VYVFJBX09FTUFLRSA9ICJQWVRIT05fQ1BQRkxBR1M9LUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWciCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLW1vZF9jZ2ktYnVmZmVycy1kYXRhLXdpdGhvdXQtYm91bmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGYxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoCkBAIC0wLDAgKzEsMzg3IEBACitGcm9tIGU2Y2NiYWI1ZDQyYjExMGFjNGY2Y2UxZjcyY2IxZTljY2JlNDQwMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBUdWUsIDE2IEp1biAyMDE1IDE5OjAyOjM4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1vZF9jZ2kgYnVmZmVycyBkYXRhIHdpdGhvdXQgYm91bmQgc28gZml4IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvaXNzdWVzLzEyNjRdCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKworVXBkYXRlIGNvbnRleHQgZm9yIDEuNC4zNi4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYgfCAgIDggKysKKyBzcmMvbW9kX2NnaS5jICAgICAgICAgICAgfCAxODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mIGIvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCitpbmRleCA2MGIwYWUxLi45YzEwMWE3IDEwMDY0NAorLS0tIGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCisrKysgYi9kb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYKK0BAIC0zNzUsNiArMzc1LDE0IEBAIHNlcnZlci51cGxvYWQtZGlycyA9ICggIi92YXIvdG1wIiApCisgIyMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyMKKysjIworKyMjIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmhpZ2gtd2F0ZXJsZXZlbCAgICAgICAgPSAxMDI0MAorKyMjIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmxvdy13YXRlcmxldmVsICAgICAgICAgPSA1MTIwCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMjCitkaWZmIC0tZ2l0IGEvc3JjL21vZF9jZ2kuYyBiL3NyYy9tb2RfY2dpLmMKK2luZGV4IDAxYjE4NzcuLjdjNjdlYjUgMTAwNjQ0CistLS0gYS9zcmMvbW9kX2NnaS5jCisrKysgYi9zcmMvbW9kX2NnaS5jCitAQCAtMzgsNiArMzgsMTAgQEAKKyAKKyAjaW5jbHVkZSAidmVyc2lvbi5oIgorIAorKy8qIGZvciBvdXRwdXQgbG9ncyAqLworK2NoYXIgbXNnYnVmWzIwNDhdOworKworKworIGVudW0ge0VPTF9VTlNFVCwgRU9MX04sIEVPTF9STn07CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworQEAgLTUzLDkgKzU3LDE5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJc2l6ZV90IHNpemU7CisgfSBidWZmZXJfcGlkX3Q7CisgCisrc3RydWN0IGhhbmRsZXJfY3R4OworKworK3R5cGVkZWYgc3RydWN0IHsKKysJc3RydWN0IGhhbmRsZXJfY3R4ICoqaGN0eDsKKysJc2l6ZV90IHVzZWQ7CisrCXNpemVfdCBzaXplOworK30gYnVmZmVyX2N0eF90OworKworIHR5cGVkZWYgc3RydWN0IHsKKyAJYXJyYXkgKmNnaTsKKyAJdW5zaWduZWQgc2hvcnQgZXhlY3V0ZV94X29ubHk7CisrCXVuc2lnbmVkIGludCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCXVuc2lnbmVkIGludCBsb3dfd2F0ZXJsZXZlbDsgIC8qIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmICovCisgfSBwbHVnaW5fY29uZmlnOworIAorIHR5cGVkZWYgc3RydWN0IHsKK0BAIC02OCw5ICs4MiwxMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCXBsdWdpbl9jb25maWcgKipjb25maWdfc3RvcmFnZTsKKyAKKyAJcGx1Z2luX2NvbmZpZyBjb25mOworKworKwlidWZmZXJfY3R4X3QgY2dpX2N0eDsKKyB9IHBsdWdpbl9kYXRhOworIAorLXR5cGVkZWYgc3RydWN0IHsKKyt0eXBlZGVmIHN0cnVjdCBoYW5kbGVyX2N0eCB7CisgCXBpZF90IHBpZDsKKyAJaW50IGZkOworIAlpbnQgZmRlX25keDsgLyogaW5kZXggaW50byB0aGUgZmQtZXZlbnQgYnVmZmVyICovCitAQCAtNzgsMTEgKzk0LDE2IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJY29ubmVjdGlvbiAqcmVtb3RlX2Nvbm47ICAvKiBkdW1iIHBvaW50ZXIgKi8KKyAJcGx1Z2luX2RhdGEgKnBsdWdpbl9kYXRhOyAvKiBkdW1iIHBvaW50ZXIgKi8KKyAKKysJaW50IHRocm90dGxpbmc7ICAgICAgICAvKiAxPXdhaXRpbmcgZm9yIHNlbmRfcmF3IGJ1ZmZlciB0byBkcmFpbiAqLworKwlvZmZfdCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCW9mZl90IGxvd193YXRlcmxldmVsOyAgLyogbWluaW11bSBieXRlcyBpbiBzZW5kX3JhdyB0byBkaXNhYmxlIGJhY2tvZmYgKi8KKysJb2ZmX3QgYnl0ZXNfaW5fYnVmZmVyOworKworIAlidWZmZXIgKnJlc3BvbnNlOworIAlidWZmZXIgKnJlc3BvbnNlX2hlYWRlcjsKKyB9IGhhbmRsZXJfY3R4OworIAorLXN0YXRpYyBoYW5kbGVyX2N0eCAqIGNnaV9oYW5kbGVyX2N0eF9pbml0KHZvaWQpIHsKKytzdGF0aWMgaGFuZGxlcl9jdHggKiBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwbHVnaW5fZGF0YSAqcCkgeworIAloYW5kbGVyX2N0eCAqaGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmhjdHgpKTsKKyAKKyAJZm9yY2VfYXNzZXJ0KGhjdHgpOworQEAgLTkwLDEzICsxMTEsMjYgQEAgc3RhdGljIGhhbmRsZXJfY3R4ICogY2dpX2hhbmRsZXJfY3R4X2luaXQodm9pZCkgeworIAloY3R4LT5yZXNwb25zZSA9IGJ1ZmZlcl9pbml0KCk7CisgCWhjdHgtPnJlc3BvbnNlX2hlYWRlciA9IGJ1ZmZlcl9pbml0KCk7CisgCisrCWhjdHgtPnRocm90dGxpbmcgPSAwOworKwloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPSAob2ZmX3QpcC0+Y29uZi5oaWdoX3dhdGVybGV2ZWwgKiAxMDI0OworKwloY3R4LT5sb3dfd2F0ZXJsZXZlbCAgPSAob2ZmX3QpcC0+Y29uZi5sb3dfd2F0ZXJsZXZlbCAgKiAxMDI0OworKwlpZiAoaGN0eC0+bG93X3dhdGVybGV2ZWwgPj0gaGN0eC0+aGlnaF93YXRlcmxldmVsKSB7CisrCSAgICBoY3R4LT5sb3dfd2F0ZXJsZXZlbCA9IGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCAqIDMgLyA0OyAvKiA3NSUgKi8KKysJfQorKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSAwOworKworIAlyZXR1cm4gaGN0eDsKKyB9CisgCistc3RhdGljIHZvaWQgY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGFuZGxlcl9jdHggKmhjdHgpIHsKKytzdGF0aWMgdm9pZCBjZ2lfaGFuZGxlcl9jdHhfZnJlZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJYnVmZmVyX2ZyZWUoaGN0eC0+cmVzcG9uc2UpOworIAlidWZmZXJfZnJlZShoY3R4LT5yZXNwb25zZV9oZWFkZXIpOworIAorKwkvKiB0byBhdm9pZCBjb25mdXNpb24gKi8KKysJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJICAgIGxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCAidW50aHJvdHRsZWQiKTsKKysJfQorKworIAlmcmVlKGhjdHgpOworIH0KKyAKK0BAIC0xNTQsNiArMTg4LDggQEAgU0VUREVGQVVMVFNfRlVOQyhtb2RfZmFzdGNnaV9zZXRfZGVmYXVsdHMpIHsKKyAJY29uZmlnX3ZhbHVlc190IGN2W10gPSB7CisgCQl7ICJjZ2kuYXNzaWduIiwgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19BUlJBWSwgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAwICovCisgCQl7ICJjZ2kuZXhlY3V0ZS14LW9ubHkiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19CT09MRUFOLCBUX0NPTkZJR19TQ09QRV9DT05ORUNUSU9OIH0sICAgICAvKiAxICovCisrCQl7ICJjZ2kuaGlnaC13YXRlcmxldmVsIiwgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAyICovCisrCQl7ICJjZ2kubG93LXdhdGVybGV2ZWwiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAzICovCisgCQl7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19VTlNFVCwgVF9DT05GSUdfU0NPUEVfVU5TRVR9CisgCX07CisgCitAQCAtMTY5LDkgKzIwNSwxMyBAQCBTRVRERUZBVUxUU19GVU5DKG1vZF9mYXN0Y2dpX3NldF9kZWZhdWx0cykgeworIAorIAkJcy0+Y2dpICAgID0gYXJyYXlfaW5pdCgpOworIAkJcy0+ZXhlY3V0ZV94X29ubHkgPSAwOworKwkJcy0+aGlnaF93YXRlcmxldmVsID0gMDsgLyogMCA9PSBkaXNhYmxlZCAqLworKwkJcy0+bG93X3dhdGVybGV2ZWwgID0gMDsKKyAKKyAJCWN2WzBdLmRlc3RpbmF0aW9uID0gcy0+Y2dpOworIAkJY3ZbMV0uZGVzdGluYXRpb24gPSAmKHMtPmV4ZWN1dGVfeF9vbmx5KTsKKysJCWN2WzJdLmRlc3RpbmF0aW9uID0gJihzLT5oaWdoX3dhdGVybGV2ZWwpOworKwkJY3ZbM10uZGVzdGluYXRpb24gPSAmKHMtPmxvd193YXRlcmxldmVsKTsKKyAKKyAJCXAtPmNvbmZpZ19zdG9yYWdlW2ldID0gczsKKyAKK0BAIC0xODQsNiArMjI0LDUxIEBAIFNFVERFRkFVTFRTX0ZVTkMobW9kX2Zhc3RjZ2lfc2V0X2RlZmF1bHRzKSB7CisgfQorIAorIAorK3N0YXRpYyB2b2lkIGNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNodW5rcXVldWUgKmNxID0gaGN0eC0+cmVtb3RlX2Nvbm4tPndyaXRlX3F1ZXVlOworKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSBjaHVua3F1ZXVlX2xlbmd0aChjcSkgLSBjaHVua3F1ZXVlX3dyaXR0ZW4oY3EpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBjZ2lfdGhyb3R0bGluZ19jb250cm9sKHNlcnZlciAqc3J2LCBoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoY3R4KTsKKysKKysjaWZkZWYgREVCVUcKKysJc3ByaW50Zihtc2didWYsICJ0aHJvdHRsaW5nPSVkLCBjaGFycz0lbGx1LCBoaWdoPSVsbHUsIGxvdz0lbGx1IiwKKysJCWhjdHgtPnRocm90dGxpbmcsIGhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCWhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCwgaGN0eC0+bG93X3dhdGVybGV2ZWwpOworKwlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJIihkZWJ1ZykgdGhyb3R0bGluZyBjb250cm9sLCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCisrCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCQlzcHJpbnRmKG1zZ2J1ZiwgInRocm90dGxpbmc7IGNoYXJzIGluIHF1ZXVlPSVsbHUsIgorKwkJCSIgbG93LXdhdGVybGV2ZWw9JWxsdSwgaGlnaC13YXRlcmxldmVsPSVsbHUiLAorKwkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQloY3R4LT5sb3dfd2F0ZXJsZXZlbCwgaGN0eC0+aGlnaF93YXRlcmxldmVsKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCBtc2didWYpOworKwkJaWYgKGhjdHgtPmJ5dGVzX2luX2J1ZmZlciA8PSBoY3R4LT5sb3dfd2F0ZXJsZXZlbCkgeworKwkJCWZkZXZlbnRfZXZlbnRfc2V0KHNydi0+ZXYsICYoaGN0eC0+ZmRlX25keCksIGhjdHgtPmZkLCBGREVWRU5UX0lOKTsKKysJCQloY3R4LT50aHJvdHRsaW5nID0gMDsKKysJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgInVudGhyb3R0bGVkIik7CisrCQl9CisrCX0gZWxzZSB7CisrCQlpZiAoaGN0eC0+aGlnaF93YXRlcmxldmVsICE9IDAgJiYKKysJCQloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPD0gaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKSB7CisrCQkJZmRldmVudF9ldmVudF9kZWwoc3J2LT5ldiwgJihoY3R4LT5mZGVfbmR4KSwgaGN0eC0+ZmQpOworKwkJCWhjdHgtPnRocm90dGxpbmcgPSAxOworKwkJCXNwcmludGYobXNnYnVmLCAidGhyb3R0bGVkOyBjaGFycyBpbiBxdWV1ZT0lbGx1LCIKKysJCQkJIiBsb3ctd2F0ZXJsZXZlbD0lbGx1LCBoaWdoLXdhdGVybGV2ZWw9JWxsdSIsCisrCQkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQkJaGN0eC0+bG93X3dhdGVybGV2ZWwsIGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCk7CisrCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAicyIsIG1zZ2J1Zik7CisrCQl9CisrCX0KKyt9CisrCisrCisgc3RhdGljIGludCBjZ2lfcGlkX2FkZChzZXJ2ZXIgKnNydiwgcGx1Z2luX2RhdGEgKnAsIHBpZF90IHBpZCkgeworIAlpbnQgbSA9IC0xOworIAlzaXplX3QgaTsKK0BAIC0yMzAsNiArMzE1LDM5IEBAIHN0YXRpYyBpbnQgY2dpX3BpZF9kZWwoc2VydmVyICpzcnYsIHBsdWdpbl9kYXRhICpwLCBwaWRfdCBwaWQpIHsKKyAJcmV0dXJuIDA7CisgfQorIAorKworK3N0YXRpYyB2b2lkIGNnaV9jdHhfYWRkKHBsdWdpbl9kYXRhICpwLCBoYW5kbGVyX2N0eCAqaGN0eCkgeworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlpZiAoci0+c2l6ZSA9PSAwKSB7CisrCQlyLT5zaXplID0gMTY7CisrCQlyLT5oY3R4ID0gbWFsbG9jKHNpemVvZigqci0+aGN0eCkgKiByLT5zaXplKTsKKysJfSBlbHNlIGlmIChyLT51c2VkID09IHItPnNpemUpIHsKKysJCXItPnNpemUgKz0gMTY7CisrCQlyLT5oY3R4ID0gcmVhbGxvYyhyLT5oY3R4LCBzaXplb2YoKnItPmhjdHgpICogci0+c2l6ZSk7CisrCX0KKysKKysJci0+aGN0eFtyLT51c2VkKytdID0gaGN0eDsKKyt9CisrCisrc3RhdGljIHZvaWQgY2dpX2N0eF9kZWwocGx1Z2luX2RhdGEgKnAsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisrCXNpemVfdCBpOworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgci0+dXNlZDsgaSsrKSB7CisrCQlpZiAoci0+aGN0eFtpXSA9PSBoY3R4KSBicmVhazsKKysJfQorKworKwlpZiAoaSAhPSByLT51c2VkKSB7CisrCQkvKiBmb3VuZCAqLworKworKwkJaWYgKGkgIT0gci0+dXNlZCAtIDEpIHsKKysJCQlyLT5oY3R4W2ldID0gci0+aGN0eFtyLT51c2VkIC0gMV07CisrCQl9CisrCQlyLT51c2VkLS07CisrCX0KKyt9CisrCisgc3RhdGljIGludCBjZ2lfcmVzcG9uc2VfcGFyc2Uoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqaW4pIHsKKyAJY2hhciAqbnM7CisgCWNvbnN0IGNoYXIgKnM7CitAQCAtMzgwLDYgKzQ5OCwxNCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAKKyAJCWJ1ZmZlcl9jb21taXQoaGN0eC0+cmVzcG9uc2UsIG4pOworIAorKyNpZmRlZiBERUJVRworKwkJc3ByaW50Zihtc2didWYsICJuPSVkLCBieXRlc19vdXQ9JWxsdSwgYnl0ZXNfaW49JWxsdSIsIG4sCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19vdXQsCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbik7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJCSIoZGVidWcpIHJlYWQsIiwgbXNnYnVmKTsKKysjZW5kaWYKKysKKyAJCS8qIHNwbGl0IGhlYWRlciBmcm9tIGJvZHkgKi8KKyAKKyAJCWlmIChjb24tPmZpbGVfc3RhcnRlZCA9PSAwKSB7CitAQCAtNTAzLDcgKzYyOSwyMCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJCQl9CisgCQl9IGVsc2UgeworIAkJCWh0dHBfY2h1bmtfYXBwZW5kX2J1ZmZlcihzcnYsIGNvbiwgaGN0eC0+cmVzcG9uc2UpOworKyNpZmRlZiBERUJVRworKwkJCXNwcmludGYobXNnYnVmLCAibj0lZCwgYnl0ZXNfb3V0PSVsbHUsIGJ5dGVzX2luPSVsbHUsIGxpbWl0PSVsbHUiLCBuLAorKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWNvbi0+d3JpdGVfcXVldWUtPmJ5dGVzX291dCwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbiwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyloY3R4LT5oaWdoX3dhdGVybGV2ZWwpOworKwkJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywKKysJCQkJCSJzcyIsICIoZGVidWcpIGFwcGVuZCwiLCBtc2didWYpOworKyNlbmRpZgorIAkJCWpvYmxpc3RfYXBwZW5kKHNydiwgY29uKTsKKysKKysJCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCQkJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJCQkJcmV0dXJuIEZERVZFTlRfSEFORExFRF9OT1RfRklOSVNIRUQ7CisrCQkJfQorIAkJfQorIAorICNpZiAwCitAQCAtNTUzLDggKzY5Miw5IEBAIHN0YXRpYyBoYW5kbGVyX3QgY2dpX2Nvbm5lY3Rpb25fY2xvc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAorIAkvKiBpcyB0aGlzIGEgZ29vZCBpZGVhID8gKi8KKy0JY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CistCisrCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworKwkKKyAJLyogaWYgd2FpdHBpZCBoYXNuJ3QgYmVlbiBjYWxsZWQgYnkgcmVzcG9uc2UuYyB5ZXQsIGRvIGl0IGhlcmUgKi8KKyAJaWYgKHBpZCkgeworIAkJLyogY2hlY2sgaWYgdGhlIENHSS1zY3JpcHQgaXMgYWxyZWFkeSBnb25lICovCitAQCAtMTEwNSw3ICsxMjQ1LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAJCWNvbi0+bW9kZSA9IHAtPmlkOworIAkJYnVmZmVyX3Jlc2V0KGNvbi0+cGh5c2ljYWwucGF0aCk7CisgCistCQloY3R4ID0gY2dpX2hhbmRsZXJfY3R4X2luaXQoKTsKKysJCWhjdHggPSBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwKTsKKysJCWNnaV9jdHhfYWRkKHAsIGhjdHgpOworIAorIAkJaGN0eC0+cmVtb3RlX2Nvbm4gPSBjb247CisgCQloY3R4LT5wbHVnaW5fZGF0YSA9IHA7CitAQCAtMTExNCw2ICsxMjU1LDExIEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCQloY3R4LT5mZGVfbmR4ID0gLTE7CisgCisgCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gaGN0eDsKKysjaWZkZWYgREVCVUcKKysJCXNwcmludGYobXNnYnVmLCAiaGN0eD0lcCwgY29uPSVwIiwgKHZvaWQqKWhjdHgsICh2b2lkKiljb24pOworKwkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCQkiKGRlYnVnKSBoY3R4IGdlbmVyYXRlZCwgIiwgbXNnYnVmKTsKKysjZW5kaWYKKyAKKyAJCWZkZXZlbnRfcmVnaXN0ZXIoc3J2LT5ldiwgaGN0eC0+ZmQsIGNnaV9oYW5kbGVfZmRldmVudCwgaGN0eCk7CisgCQlmZGV2ZW50X2V2ZW50X3NldChzcnYtPmV2LCAmKGhjdHgtPmZkZV9uZHgpLCBoY3R4LT5mZCwgRkRFVkVOVF9JTik7CitAQCAtMTEyOCw3ICsxMjc0LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAKKyAJCQljbG9zZShoY3R4LT5mZCk7CisgCistCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CisrCQkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gTlVMTDsKKyAKK0BAIC0xMTUzLDYgKzEzMDAsOCBAQCBzdGF0aWMgaW50IG1vZF9jZ2lfcGF0Y2hfY29ubmVjdGlvbihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcAorIAorIAlQQVRDSChjZ2kpOworIAlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCVBBVENIKGhpZ2hfd2F0ZXJsZXZlbCk7CisrCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAKKyAJLyogc2tpcCB0aGUgZmlyc3QsIHRoZSBnbG9iYWwgY29udGV4dCAqLworIAlmb3IgKGkgPSAxOyBpIDwgc3J2LT5jb25maWdfY29udGV4dC0+dXNlZDsgaSsrKSB7CitAQCAtMTE3MCw2ICsxMzE5LDEwIEBAIHN0YXRpYyBpbnQgbW9kX2NnaV9wYXRjaF9jb25uZWN0aW9uKHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwCisgCQkJCVBBVENIKGNnaSk7CisgCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5leGVjdXRlLXgtb25seSIpKSkgeworIAkJCQlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5oaWdoLXdhdGVybGV2ZWwiKSkpIHsKKysJCQkJUEFUQ0goaGlnaF93YXRlcmxldmVsKTsKKysJCQl9IGVsc2UgaWYgKGJ1ZmZlcl9pc19lcXVhbF9zdHJpbmcoZHUtPmtleSwgQ09OU1RfU1RSX0xFTigiY2dpLmxvdy13YXRlcmxldmVsIikpKSB7CisrCQkJCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAJCQl9CisgCQl9CisgCX0KK0BAIC0xMjIyLDYgKzEzNzUsMjEgQEAgVVJJSEFORExFUl9GVU5DKGNnaV9pc19oYW5kbGVkKSB7CisgVFJJR0dFUl9GVU5DKGNnaV90cmlnZ2VyKSB7CisgCXBsdWdpbl9kYXRhICpwID0gcF9kOworIAlzaXplX3QgbmR4OworKworKwlmb3IgKG5keCA9IDA7IG5keCA8IHAtPmNnaV9jdHgudXNlZDsgbmR4KyspIHsKKysJCWhhbmRsZXJfY3R4ICpoY3R4ID0gcC0+Y2dpX2N0eC5oY3R4W25keF07CisrI2lmZGVmIERFQlVHCisrCQljb25uZWN0aW9uICpjb24gPSBoY3R4LT5yZW1vdGVfY29ubjsKKysJCisrCQlzcHJpbnRmKG1zZ2J1ZiwgImhjdHg9JXAsIGNvbj0lcCwgYnl0ZXNfaW5fYnVmZmVyPSVsbHUiLAorKwkJCSh2b2lkKiloY3R4LCAodm9pZCopY29uLAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInNzIiwKKysJCQkJIihkZWJ1ZykgZm91bmQgdXNpbmcgY3R4LCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCX0KKysKKyAJLyogdGhlIHRyaWdnZXIgaGFuZGxlIG9ubHkgY2FyZXMgYWJvdXQgbG9uZWx5IFBJRCB3aGljaCB3ZSBoYXZlIHRvIHdhaXQgZm9yICovCisgI2lmbmRlZiBfX1dJTjMyCisgCitAQCAtMTMzMCw3ICsxNDk4LDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCitAQCAtMTM2Miw3ICsxNTMxLDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCQlyZXR1cm4gSEFORExFUl9GSU5JU0hFRDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2luZGV4Lmh0bWwubGlnaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmMWMzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkCkBAIC0wLDAgKzEgQEAKKzxodG1sPjxib2R5PjxoMT5JdCB3b3JrcyE8L2gxPjwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4OWE2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9saWdodHRwZAorTkFNRT1saWdodHRwZAorREVTQz0iTGlnaHR0cGQgV2ViIFNlcnZlciIKK09QVFM9Ii1mIC9ldGMvbGlnaHR0cGQuY29uZiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwlzbGVlcCAxCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODQwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZgpAQCAtMCwwICsxLDMzMSBAQAorIyBsaWdodHRwZCBjb25maWd1cmF0aW9uIGZpbGUKKyMKKyMgdXNlIGl0IGFzIGEgYmFzZSBmb3IgbGlnaHR0cGQgMS4wLjAgYW5kIGFib3ZlCisjCisjICRJZDogbGlnaHR0cGQuY29uZix2IDEuNyAyMDA0LzExLzAzIDIyOjI2OjA1IHdlaWdvbiBFeHAgJAorCisjIyMjIyMjIyMjIyMgT3B0aW9ucyB5b3UgcmVhbGx5IGhhdmUgdG8gdGFrZSBjYXJlIG9mICMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIG1vZHVsZXMgdG8gbG9hZAorIyBhdCBsZWFzdCBtb2RfYWNjZXNzIGFuZCBtb2RfYWNjZXNzbG9nIHNob3VsZCBiZSBsb2FkZWQKKyMgYWxsIG90aGVyIG1vZHVsZSBzaG91bGQgb25seSBiZSBsb2FkZWQgaWYgcmVhbGx5IG5lY2Nlc2FyeQorIyAtIHNhdmVzIHNvbWUgdGltZQorIyAtIHNhdmVzIG1lbW9yeQorc2VydmVyLm1vZHVsZXMgICAgICAgICAgICAgID0gKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3Jld3JpdGUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3JlZGlyZWN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hbGlhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWNjZXNzIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9jbWwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3RyaWdnZXJfYjRfZGwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2F1dGgiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3N0YXR1cyIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2V0ZW52IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9mYXN0Y2dpIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9wcm94eSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2ltcGxlX3Zob3N0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ldmhvc3QiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3VzZXJkaXIiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NnaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY29tcHJlc3MiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NzaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfdXNlcnRyYWNrIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9leHBpcmUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NlY2Rvd25sb2FkIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ycmR0b29sIiwKKyMJCQkJIm1vZF93ZWJkYXYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2FjY2Vzc2xvZyIgKQorCisjIyBhIHN0YXRpYyBkb2N1bWVudC1yb290LCBmb3IgdmlydHVhbC1ob3N0aW5nIHRha2UgbG9vayBhdCB0aGUKKyMjIHNlcnZlci52aXJ0dWFsLSogb3B0aW9ucworc2VydmVyLmRvY3VtZW50LXJvb3QgICAgICAgID0gIi93d3cvcGFnZXMvIgorCisjIyB3aGVyZSB0byBzZW5kIGVycm9yLW1lc3NhZ2VzIHRvCitzZXJ2ZXIuZXJyb3Jsb2cgICAgICAgICAgICAgPSAiL3d3dy9sb2dzL2xpZ2h0dHBkLmVycm9yLmxvZyIKKworIyBmaWxlcyB0byBjaGVjayBmb3IgaWYgLi4uLyBpcyByZXF1ZXN0ZWQKK2luZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICggImluZGV4LnBocCIsICJpbmRleC5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4Lmh0bSIsICJkZWZhdWx0Lmh0bSIgKQorCisjIyBzZXQgdGhlIGV2ZW50LWhhbmRsZXIgKHJlYWQgdGhlIHBlcmZvcm1hbmNlIHNlY3Rpb24gaW4gdGhlIG1hbnVhbCkKKyMgc2VydmVyLmV2ZW50LWhhbmRsZXIgPSAiZnJlZWJzZC1rcXVldWUiICMgbmVlZGVkIG9uIE9TIFgKKworIyBtaW1ldHlwZSBtYXBwaW5nCittaW1ldHlwZS5hc3NpZ24gICAgICAgICAgICAgPSAoCisgICIucGRmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZGYiLAorICAiLnNpZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZSIsCisgICIuc3BsIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2giLAorICAiLmNsYXNzIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKKyAgIi5wcyIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLAorICAiLnRvcnJlbnQiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iaXR0b3JyZW50IiwKKyAgIi5kdmkiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZHZpIiwKKyAgIi5neiIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZ3ppcCIsCisgICIucGFjIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWciLAorICAiLnN3ZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLAorICAiLnRhci5neiIgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRneiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRhciIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10YXIiLAorICAiLnppcCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vemlwIiwKKyAgIi5tcDMiICAgICAgICAgID0+ICAgICAgImF1ZGlvL21wZWciLAorICAiLm0zdSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcGVndXJsIiwKKyAgIi53bWEiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd21hIiwKKyAgIi53YXgiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd2F4IiwKKyAgIi5vZ2ciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29nZyIsCisgICIud2F2IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LXdhdiIsCisgICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAorICAiLmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIuanBlZyIgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3BuZyIsCisgICIueGJtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhiaXRtYXAiLAorICAiLnhwbSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14cGl4bWFwIiwKKyAgIi54d2QiICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHdpbmRvd2R1bXAiLAorICAiLmNzcyIgICAgICAgICAgPT4gICAgICAidGV4dC9jc3MiLAorICAiLmh0bWwiICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5odG0iICAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuanMiICAgICAgICAgICA9PiAgICAgICJ0ZXh0L2phdmFzY3JpcHQiLAorICAiLmFzYyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuYyIgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jcHAiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY29uZiIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50ZXh0IiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIueG1sIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIubXBlZyIgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKyAgIi5tcGciICAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorICAiLm1vdiIgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgIi5xdCIgICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICIuYXZpIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zdmlkZW8iLAorICAiLmFzZiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLmFzeCIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLndtdiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy13bXYiLAorICAiLmJ6MiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwIiwKKyAgIi50YnoiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisgICIudGFyLmJ6MiIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiCisgKQorCisjIFVzZSB0aGUgIkNvbnRlbnQtVHlwZSIgZXh0ZW5kZWQgYXR0cmlidXRlIHRvIG9idGFpbiBtaW1lIHR5cGUgaWYgcG9zc2libGUKKyNtaW1ldHlwZS51c2UteGF0dHIgICAgICAgID0gImVuYWJsZSIKKworCisjIyBzZW5kIGEgZGlmZmVyZW50IFNlcnZlcjogaGVhZGVyCisjIyBiZSBuaWNlIGFuZCBrZWVwIGl0IGF0IGxpZ2h0dHBkCisjIHNlcnZlci50YWcgICAgICAgICAgICAgICAgID0gImxpZ2h0dHBkIgorCisjIyMjIGFjY2Vzc2xvZyBtb2R1bGUKK2FjY2Vzc2xvZy5maWxlbmFtZSAgICAgICAgICA9ICIvd3d3L2xvZ3MvYWNjZXNzLmxvZyIKK2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKworCisKKworIyMgZGVueSBhY2Nlc3MgdGhlIGZpbGUtZXh0ZW5zaW9ucworIworIyB+ICAgIGlzIGZvciBiYWNrdXBmaWxlcyBmcm9tIHZpLCBlbWFjcywgam9lLCAuLi4KKyMgLmluYyBpcyBvZnRlbiB1c2VkIGZvciBjb2RlIGluY2x1ZGVzIHdoaWNoIHNob3VsZCBpbiBnZW5lcmFsIG5vdCBiZSBwYXJ0CisjICAgICAgb2YgdGhlIGRvY3VtZW50LXJvb3QKK3VybC5hY2Nlc3MtZGVueSAgICAgICAgICAgICA9ICggIn4iLCAiLmluYyIgKQorCiskSFRUUFsidXJsIl0gPX4gIlwucGRmJCIgeworICBzZXJ2ZXIucmFuZ2UtcmVxdWVzdHMgPSAiZGlzYWJsZSIKK30KKworIyMKKyMgd2hpY2ggZXh0ZW5zaW9ucyBzaG91bGQgbm90IGJlIGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKKyMKKyMgLnBocCwgLnBsLCAuZmNnaSBhcmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9yIG1vZF9jZ2kKK3N0YXRpYy1maWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBsIiwgIi5mY2dpIiApCisKKyMjIyMjIyMjIyBPcHRpb25zIHRoYXQgYXJlIGdvb2QgdG8gYmUgYnV0IG5vdCBuZWNjZXNhcnkgdG8gYmUgY2hhbmdlZCAjIyMjIyMjCisKKyMjIGJpbmQgdG8gcG9ydCAoZGVmYXVsdDogODApCisjc2VydmVyLnBvcnQgICAgICAgICAgICAgICAgPSA4MQorCisjIyBiaW5kIHRvIGxvY2FsaG9zdCAoZGVmYXVsdDogYWxsIGludGVyZmFjZXMpCisjc2VydmVyLmJpbmQgICAgICAgICAgICAgICAgPSAiZ3Jpc3UuaG9tZS5rbmVzY2hrZS5kZSIKKworIyMgZXJyb3ItaGFuZGxlciBmb3Igc3RhdHVzIDQwNAorI3NlcnZlci5lcnJvci1oYW5kbGVyLTQwNCAgID0gIi9lcnJvci1oYW5kbGVyLmh0bWwiCisjc2VydmVyLmVycm9yLWhhbmRsZXItNDA0ICAgPSAiL2Vycm9yLWhhbmRsZXIucGhwIgorCisjIyB0byBoZWxwIHRoZSByYy5zY3JpcHRzCisjc2VydmVyLnBpZC1maWxlICAgICAgICAgICAgPSAiL3Zhci9ydW4vbGlnaHR0cGQucGlkIgorCisKKyMjIyMjIyB2aXJ0dWFsIGhvc3RzCisjIworIyMgIElmIHlvdSB3YW50IG5hbWUtYmFzZWQgdmlydHVhbCBob3N0aW5nIGFkZCB0aGUgbmV4dCB0aHJlZSBzZXR0aW5ncyBhbmQgbG9hZAorIyMgIG1vZF9zaW1wbGVfdmhvc3QKKyMjCisjIyBkb2N1bWVudC1yb290ID0KKyMjICAgdmlydHVhbC1zZXJ2ZXItcm9vdCArIHZpcnR1YWwtc2VydmVyLWRlZmF1bHQtaG9zdCArIHZpcnR1YWwtc2VydmVyLWRvY3Jvb3QKKyMjIG9yCisjIyAgIHZpcnR1YWwtc2VydmVyLXJvb3QgKyBodHRwLWhvc3QgKyB2aXJ0dWFsLXNlcnZlci1kb2Nyb290CisjIworI3NpbXBsZS12aG9zdC5zZXJ2ZXItcm9vdCAgID0gIi9ob21lL3dlaWdvbi93d3dyb290L3NlcnZlcnMvIgorI3NpbXBsZS12aG9zdC5kZWZhdWx0LWhvc3QgID0gImdyaXN1LmhvbWUua25lc2Noa2UuZGUiCisjc2ltcGxlLXZob3N0LmRvY3VtZW50LXJvb3QgPSAiL3BhZ2VzLyIKKworCisjIworIyMgRm9ybWF0OiA8ZXJyb3JmaWxlLXByZWZpeD48c3RhdHVzLWNvZGU+Lmh0bWwKKyMjIC0+IC4uLi4vc3RhdHVzLTQwNC5odG1sIGZvciAnRmlsZSBub3QgZm91bmQnCisjc2VydmVyLmVycm9yZmlsZS1wcmVmaXggICAgPSAiL2hvbWUvd2VpZ29uL3Byb2plY3RzL2xpZ2h0dHBkL2RvYy9zdGF0dXMtIgorCisjIyB2aXJ0dWFsIGRpcmVjdG9yeSBsaXN0aW5ncworI2Rpci1saXN0aW5nLmFjdGl2YXRlICAgICAgID0gImVuYWJsZSIKKworIyMgZW5hYmxlIGRlYnVnZ2luZworI2RlYnVnLmxvZy1yZXF1ZXN0LWhlYWRlciAgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVzcG9uc2UtaGVhZGVyICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlcXVlc3QtaGFuZGxpbmcgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1maWxlLW5vdC1mb3VuZCAgID0gImVuYWJsZSIKKworIyMjIG9ubHkgcm9vdCBjYW4gdXNlIHRoZXNlIG9wdGlvbnMKKyMKKyMgY2hyb290KCkgdG8gZGlyZWN0b3J5IChkZWZhdWx0OiBubyBjaHJvb3QoKSApCisjc2VydmVyLmNocm9vdCAgICAgICAgICAgICAgPSAiLyIKKworIyMgY2hhbmdlIHVpZCB0byA8dWlkPiAoZGVmYXVsdDogZG9uJ3QgY2FyZSkKKyNzZXJ2ZXIudXNlcm5hbWUgICAgICAgICAgICA9ICJ3d3dydW4iCisKKyMjIGNoYW5nZSB1aWQgdG8gPHVpZD4gKGRlZmF1bHQ6IGRvbid0IGNhcmUpCisjc2VydmVyLmdyb3VwbmFtZSAgICAgICAgICAgPSAid3d3cnVuIgorCisjIyMjIGNvbXByZXNzIG1vZHVsZQorI2NvbXByZXNzLmNhY2hlLWRpciAgICAgICAgID0gIi90bXAvbGlnaHR0cGQvY2FjaGUvY29tcHJlc3MvIgorI2NvbXByZXNzLmZpbGV0eXBlICAgICAgICAgID0gKCJ0ZXh0L3BsYWluIiwgInRleHQvaHRtbCIpCisKKyMjIyMgcHJveHkgbW9kdWxlCisjIyByZWFkIHByb3h5LnR4dCBmb3IgbW9yZSBpbmZvCisjcHJveHkuc2VydmVyICAgICAgICAgICAgICAgPSAoICIucGhwIiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICJsb2NhbGhvc3QiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3QiID0+ICIxOTIuMTY4LjAuMTAxIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3J0IiA9PiA4MAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisjIyMjIGZhc3RjZ2kgbW9kdWxlCisjIyByZWFkIGZhc3RjZ2kudHh0IGZvciBtb3JlIGluZm8KKyMjIGZvciBQSFAgZG9uJ3QgZm9yZ2V0IHRvIHNldCBjZ2kuZml4X3BhdGhpbmZvID0gMSBpbiB0aGUgcGhwLmluaQorI2Zhc3RjZ2kuc2VydmVyICAgICAgICAgICAgID0gKCAiLnBocCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAibG9jYWxob3N0IiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQiID0+ICIvdG1wL3BocC1mYXN0Y2dpLnNvY2tldCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmluLXBhdGgiID0+ICIvdXNyL2xvY2FsL2Jpbi9waHAiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyMjIyBDR0kgbW9kdWxlCisjY2dpLmFzc2lnbiAgICAgICAgICAgICAgICAgPSAoICIucGwiICA9PiAiL3Vzci9iaW4vcGVybCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuY2dpIiA9PiAiL3Vzci9iaW4vcGVybCIgKQorIworCisjIyMjIFNTTCBlbmdpbmUKKyNzc2wuZW5naW5lICAgICAgICAgICAgICAgICA9ICJlbmFibGUiCisjc3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBlbSIKKworIyMjIyBzdGF0dXMgbW9kdWxlCisjc3RhdHVzLnN0YXR1cy11cmwgICAgICAgICAgPSAiL3NlcnZlci1zdGF0dXMiCisjc3RhdHVzLmNvbmZpZy11cmwgICAgICAgICAgPSAiL3NlcnZlci1jb25maWciCisKKyMjIyMgYXV0aCBtb2R1bGUKKyMjIHJlYWQgYXV0aGVudGljYXRpb24udHh0IGZvciBtb3JlIGluZm8KKyNhdXRoLmJhY2tlbmQgICAgICAgICAgICAgICA9ICJwbGFpbiIKKyNhdXRoLmJhY2tlbmQucGxhaW4udXNlcmZpbGUgPSAibGlnaHR0cGQudXNlciIKKyNhdXRoLmJhY2tlbmQucGxhaW4uZ3JvdXBmaWxlID0gImxpZ2h0dHBkLmdyb3VwIgorCisjYXV0aC5iYWNrZW5kLmxkYXAuaG9zdG5hbWUgPSAibG9jYWxob3N0IgorI2F1dGguYmFja2VuZC5sZGFwLmJhc2UtZG4gID0gImRjPW15LWRvbWFpbixkYz1jb20iCisjYXV0aC5iYWNrZW5kLmxkYXAuZmlsdGVyICAgPSAiKHVpZD0kKSIKKworI2F1dGgucmVxdWlyZSAgICAgICAgICAgICAgID0gKCAiL3NlcnZlci1zdGF0dXMiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIiAgPT4gImRpZ2VzdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxtIiAgID0+ICJkb3dubG9hZCBhcmNoaXYiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlIiA9PiAidXNlcj1qYW4iCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvc2VydmVyLWNvbmZpZyIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRob2QiICA9PiAiZGlnZXN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhbG0iICAgPT4gImRvd25sb2FkIGFyY2hpdiIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmUiID0+ICJ2YWxpZC11c2VyIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyMjIyMgdXJsIGhhbmRsaW5nIG1vZHVsZXMgKHJld3JpdGUsIHJlZGlyZWN0LCBhY2Nlc3MpCisjdXJsLnJld3JpdGUgICAgICAgICAgICAgICAgPSAoICJeLyQiICAgICAgICAgICAgID0+ICIvc2VydmVyLXN0YXR1cyIgKQorI3VybC5yZWRpcmVjdCAgICAgICAgICAgICAgID0gKCAiXi93aXNobGlzdC8oLispIiA9PiAiaHR0cDovL3d3dy4xMjMub3JnLyQxIiApCisKKyMjIyMgYm90aCByZXdyaXRlL3JlZGlyZWN0IHN1cHBvcnQgYmFjayByZWZlcmVuY2UgdG8gcmVnZXggY29uZGl0aW9uYWwgdXNpbmcgJW4KKyMkSFRUUFsiaG9zdCJdID1+ICJed3d3XC4oLiopIiB7CisjICB1cmwucmVkaXJlY3QgICAgICAgICAgICA9ICggIl4vKC4qKSIgPT4gImh0dHA6Ly8lMS8kMSIgKQorI30KKworIworIyBkZWZpbmUgYSBwYXR0ZXJuIGZvciB0aGUgaG9zdCB1cmwgZmluZGluZworIyAlJSA9PiAlIHNpZ24KKyMgJTAgPT4gZG9tYWluIG5hbWUgKyB0bGQKKyMgJTEgPT4gdGxkCisjICUyID0+IGRvbWFpbiBuYW1lIHdpdGhvdXQgdGxkCisjICUzID0+IHN1YmRvbWFpbiAxIG5hbWUKKyMgJTQgPT4gc3ViZG9tYWluIDIgbmFtZQorIworI2V2aG9zdC5wYXRoLXBhdHRlcm4gICAgICAgID0gIi9ob21lL3N0b3JhZ2UvZGV2L3d3dy8lMy9odGRvY3MvIgorCisjIyMjIGV4cGlyZSBtb2R1bGUKKyNleHBpcmUudXJsICAgICAgICAgICAgICAgICA9ICggIi9idWdneS8iID0+ICJhY2Nlc3MgMiBob3VycyIsICIvYXNkaGFzLyIgPT4gImFjY2VzcyBwbHVzIDEgc2Vjb25kcyAyIG1pbnV0ZXMiKQorCisjIyMjIHNzaQorI3NzaS5leHRlbnNpb24gICAgICAgICAgICAgID0gKCAiLnNodG1sIiApCisKKyMjIyMgcnJkdG9vbAorI3JyZHRvb2wuYmluYXJ5ICAgICAgICAgICAgID0gIi91c3IvYmluL3JyZHRvb2wiCisjcnJkdG9vbC5kYi1uYW1lICAgICAgICAgICAgPSAiL3Zhci93d3cvbGlnaHR0cGQucnJkIgorCisjIyMjIHNldGVudgorI3NldGVudi5hZGQtcmVxdWVzdC1oZWFkZXIgID0gKCAiVFJBVl9FTlYiID0+ICJteXNxbDovL3VzZXJAaG9zdC9kYiIgKQorI3NldGVudi5hZGQtcmVzcG9uc2UtaGVhZGVyID0gKCAiWC1TZWNyZXQtTWVzc2FnZSIgPT4gIjQyIiApCisKKyMjIGZvciBtb2RfdHJpZ2dlcl9iNF9kbAorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5nZGJtLWZpbGVuYW1lID0gIi9ob21lL3dlaWdvbi90ZXN0YmFzZS90cmlnZ2VyLmRiIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5tZW1jYWNoZS1ob3N0cyA9ICggIjEyNy4wLjAuMToxMTIxMSIgKQorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC50cmlnZ2VyLXVybCA9ICJeL3RyaWdnZXIvIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5kb3dubG9hZC11cmwgPSAiXi9kb3dubG9hZC8iCisjIHRyaWdnZXItYmVmb3JlLWRvd25sb2FkLmRlbnktdXJsID0gImh0dHA6Ly8xMjcuMC4wLjEvaW5kZXguaHRtbCIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQudHJpZ2dlci10aW1lb3V0ID0gMTAKKworIyMgZm9yIG1vZF9jbWwKKyMjIGRvbid0IGZvcmdldCB0byBhZGQgaW5kZXguY21sIHRvIHNlcnZlci5pbmRleGZpbGVzCisjIGNtbC5leHRlbnNpb24gICAgICAgICAgICAgICA9ICIuY21sIgorIyBjbWwubWVtY2FjaGUtaG9zdHMgICAgICAgICAgPSAoICIxMjcuMC4wLjE6MTEyMTEiICkKKworIyMjIyB2YXJpYWJsZSB1c2FnZToKKyMjIHZhcmlhYmxlIG5hbWUgd2l0aG91dCAiLiIgaXMgYXV0byBwcmVmaXhlZCBieSAidmFyLiIgYW5kIGJlY29tZXMgInZhci5iYXIiCisjYmFyID0gMQorI3Zhci5teXN0cmluZyA9ICJmb28iCisKKyMjIGludGVnZXIgYWRkCisjYmFyICs9IDEKKyMjIHN0cmluZyBjb25jYXQsIHdpdGggaW50ZWdlciBjYXN0IGFzIHN0cmluZywgcmVzdWx0OiAid3d3LmZvbzEuY29tIgorI3NlcnZlci5uYW1lID0gInd3dy4iICsgbXlzdHJpbmcgKyB2YXIuYmFyICsgIi5jb20iCisjIyBhcnJheSBtZXJnZQorI2luZGV4LWZpbGUubmFtZXMgPSAoZm9vICsgIi5waHAiKSArIGluZGV4LWZpbGUubmFtZXMKKyNpbmRleC1maWxlLm5hbWVzICs9IChmb28gKyAiLnBocCIpCisKKyMjIyMgaW5jbHVkZQorI2luY2x1ZGUgL2V0Yy9saWdodHRwZC9saWdodHRwZC1pbmMuY29uZgorIyMgc2FtZSBhcyBhYm92ZSBpZiB5b3UgcnVuOiAibGlnaHR0cGQgLWYgL2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mIgorI2luY2x1ZGUgImxpZ2h0dHBkLWluYy5jb25mIgorCisjIyMjIGluY2x1ZGVfc2hlbGwKKyNpbmNsdWRlX3NoZWxsICJlY2hvIHZhci5hPTEiCisjIyB0aGUgYWJvdmUgaXMgc2FtZSBhczoKKyN2YXIuYT0xCisKKyMgaW5jbHVkZSBvdGhlciBjb25maWcgZmlsZSBmcmFnbWVudHMgZnJvbSBsaWdodHRwZC5kIHN1YmRpcgoraW5jbHVkZV9zaGVsbCAiZmluZCAvZXRjL2xpZ2h0dHBkLmQgLW1heGRlcHRoIDEgLW5hbWUgJyouY29uZicgLWV4ZWMgY2F0IHt9IFw7IiAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhOTA3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TGlnaHRuaW5nIEZhc3QgV2Vic2VydmVyIFdpdGggTGlnaHQgU3lzdGVtIFJlcXVpcmVtZW50cworQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnRQcmU9QFNCSU5ESVJAL2xpZ2h0dHBkIC10IC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2xpZ2h0dHBkIC1EIC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5NWY5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGVwZW5kZW5jeSBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxNC81LzIyCisKKworSW5kZXg6IGxpZ2h0dHBkLTEuNC4zNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWdodHRwZC0xLjQuMzUub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wMy0wNiAxNDowODowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWdodHRwZC0xLjQuMzUvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTY6NTg6MzAuNzU4NDcxMTY5ICswMDAwCitAQCAtMzA5LDE2ICszMDksMTQgQEAKKyBBQ19NU0dfUkVTVUxUKFskV0lUSF9QQ1JFXSkKKyAKKyBpZiB0ZXN0ICIkV0lUSF9QQ1JFIiAhPSAibm8iOyB0aGVuCistICBBQ19QQVRIX1BST0coUENSRUNPTkZJRywgcGNyZS1jb25maWcpCistCistICBpZiB0ZXN0IHgiJFBDUkVDT05GSUciICE9IHg7IHRoZW4KKy0gICAgUENSRV9MSUI9YCRQQ1JFQ09ORklHIC0tbGlic2AKKy0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJFBDUkVDT05GSUcgLS1jZmxhZ3NgIgorKyAgUEtHX0NIRUNLX01PRFVMRVMoUENSRVBLRywgW2xpYnBjcmVdLCBbCisrICAgIFBDUkVfTElCPSR7UENSRVBLR19MSUJTfQorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICR7UENSRVBLR19DRkxBR1N9IgorICAgICBBQ19ERUZJTkUoW0hBVkVfTElCUENSRV0sIFsxXSwgW2xpYnBjcmVdKQorICAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV9IXSwgWzFdLCBbcGNyZS5oXSkKKy0gIGVsc2UKKysgIF0sIFsKKyAgICAgIEFDX01TR19FUlJPUihbcGNyZS1jb25maWcgbm90IGZvdW5kLCBpbnN0YWxsIHRoZSBwY3JlLWRldmVsIHBhY2thZ2Ugb3IgYnVpbGQgd2l0aCAtLXdpdGhvdXQtcGNyZV0pCistICBmaQorKyAgXSkKKyBmaQorIAorIEFDX1NVQlNUKFBDUkVfTElCKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiNmUzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzYuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBoaWdoLXBlcmZvcm1hbmNlIHdlYiBzZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpZ2h0dHBkLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTRkYWM1YzZhYjE2OWFhMjEyZmViNTAyODg1M2E1NzkiCisKK1NFQ1RJT04gPSAibmV0IgorREVQRU5EUyA9ICJ6bGliIGxpYnBjcmUiCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3MgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWFjY2Vzc2xvZyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtaW5kZXhmaWxlIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1kaXJsaXN0aW5nIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1zdGF0aWNmaWxlIFwKKyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQubGlnaHR0cGQubmV0L2xpZ2h0dHBkL3JlbGVhc2VzLTEuNC54L2xpZ2h0dHBkLSR7UFZ9LnRhci54eiBcCisgICAgICAgIGZpbGU6Ly9pbmRleC5odG1sLmxpZ2h0dHBkIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkLmNvbmYgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQuc2VydmljZSBcCisgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTg0M2RhZmZjYjAxOGFhNTI4ZjZkMTVkNDM1NDQ2NTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk3YWI2YjFjYzdiZDUxNjcxZjhhZjc1OWU3ODQ2MjQ1ZmJiY2EwNjg1YzMwMDE3ZTkzYTU4ODJhOWFjMWE1MyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLCAtLXdpdGhvdXQtb3BlbnNzbCwgb3BlbnNzbCIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgICAgICAgICAgLS13aXRob3V0LWJ6aXAyIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtbGRhcCBcCisgICAgICAgICAgICAgLS13aXRob3V0LWx1YSBcCisgICAgICAgICAgICAgLS13aXRob3V0LW1lbWNhY2hlIFwKKyAgICAgICAgICAgICAtLXdpdGgtcGNyZSBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1wcm9wcyBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1sb2NrcyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBnZXR0ZXh0IHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImxpZ2h0dHBkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNzAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJsaWdodHRwZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCAke0R9JHtzeXNjb25mZGlyfS9saWdodHRwZC5kICR7RH0vd3d3L3BhZ2VzL2RhdgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2xpZ2h0dHBkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmRleC5odG1sLmxpZ2h0dHBkICR7RH0vd3d3L3BhZ2VzL2luZGV4Lmh0bWwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbGlnaHR0cGQuc2VydmljZQorCSNGb3IgRkhTIGNvbXBsaWFuY2UsIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyB0byAvdmFyL2xvZyBhbmQgL3Zhci90bXAgZm9yIGxvZ3MgYW5kIHRlbXBvcmFyeSBkYXRhCisJbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vbG9nICR7RH0vd3d3L2xvZ3MKKwlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS90bXAgJHtEfS93d3cvdmFyCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9IC93d3ciCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmNvbmYiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWdodHRwZC1tb2R1bGUtLioiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MzFhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaApAQCAtMCwwICsxLDE0NyBAQAorRnJvbSA2OGYyOWFiNDkwY2Y5ODdhYTM0YjVmNGNhZjE3ODRiNThhMDIxMzA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IEZlYiAyMDE1IDIxOjA4OjA3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEFjdCBhcyB0aGUgIm12IiBjb21tYW5kIHdoZW4gcm90YXRlIGxvZworCitBY3QgYXMgdGhlICJtdiIgY29tbWFuZCB3aGVuIHJvdGF0ZSBsb2csIGZpcnN0IHJlbmFtZSwgaWYgZmFpbGVkLCB0aGVuCityZWFkIGFuZCB3cml0ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLmMgfCAgIDcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLmMgYi9sb2dyb3RhdGUuYworaW5kZXggZDNkZWI2YS4uY2Y4YmYyYyAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS5jCisrKysgYi9sb2dyb3RhdGUuYworQEAgLTExNTcsNiArMTE1Nyw1MyBAQCBpbnQgZmluZE5lZWRSb3RhdGluZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBpbnQgZm9yY2UpCisgICAgIHJldHVybiAwOworIH0KKyAKKysvKiBBY3QgYXMgdGhlICJtdiIgY29tbWFuZCwgaWYgcmVuYW1lIGZhaWxlZCwgdGhlbiByZWFkIHRoZSBvbGQgZmlsZSBhbmQKKysgKiB3cml0ZSB0byBuZXcgZmlsZS4gVGhlIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIG12RmlsZSB3aWxsIHVzZQorKyAqIHRoZSBzdHJlcnJvcihlcnJvcm5vKSB0byBoYW5kbGUgdGhlIGVycm9yIG1lc3NhZ2UsIHNvIHdlIGRvbid0IGhhdmUKKysgKiB0byBwcmludCB0aGUgZXJyb3IgbWVzc2FnZSBoZXJlICovCisrCisraW50IG12RmlsZSAoY2hhciAqb2xkTmFtZSwgY2hhciAqbmV3TmFtZSwgc3RydWN0IGxvZ0luZm8gKmxvZywgYWNsX3R5cGUgYWNsKQorK3sKKysgICAgc3RydWN0IHN0YXQgc2JwcmV2OworKyAgICBpbnQgZmRfb2xkLCBmZF9uZXcsIG47CisrICAgIGNoYXIgYnVmW0JVRlNJWl07CisrCisrICAgIC8qIERvIHRoZSByZW5hbWUgZmlyc3QgKi8KKysgICAgaWYgKCFyZW5hbWUob2xkTmFtZSwgbmV3TmFtZSkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgLyogSWYgdGhlIGVycm5vIGlzIEVYREVWLCB0aGVuIHJlYWQgb2xkIGZpbGUsIHdyaXRlIG5ld2ZpbGUgYW5kCisrICAgICAqIHJlbW92ZSB0aGUgb2xkZmlsZSAqLworKyAgICBpZiAoZXJybm8gPT0gRVhERVYpIHsKKysgICAgICAgIC8qIE9wZW4gdGhlIG9sZCBmaWxlIHRvIHJlYWQgKi8KKysgICAgICAgIGlmICgoZmRfb2xkID0gb3BlbihvbGROYW1lLCBPX1JET05MWSkpIDwgMCkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIC8qIENyZWF0ZSB0aGUgZmlsZSB0byB3cml0ZSwga2VlcCB0aGUgc2FtZSBhdHRyaWJ1dGUgYXMgdGhlIG9sZCBmaWxlICovCisrICAgICAgICBpZiAoc3RhdChvbGROYW1lLCAmc2JwcmV2KSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGlmICgoZmRfbmV3ID0gY3JlYXRlT3V0cHV0RmlsZShuZXdOYW1lLAorKyAgICAgICAgICAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAmc2JwcmV2LCBhY2wsIDApKSA8IDAgKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIFJlYWQgYW5kIHdyaXRlICovCisrICAgICAgICB3aGlsZSAoKG4gPSByZWFkKGZkX29sZCwgYnVmLCBCVUZTSVopKSA+IDApCisrICAgICAgICAgICAgaWYgKHdyaXRlKGZkX25ldywgYnVmLCBuKSAhPSBuKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIGlmICgoY2xvc2UoZmRfb2xkKSA8IDApIHx8CisrICAgICAgICAgICAgcmVtb3ZlTG9nRmlsZShvbGROYW1lLCBsb2cpIHx8CisrICAgICAgICAgICAgKGNsb3NlKGZkX25ldykgPCAwKSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30KKysKKyBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQkgICAgICAgc3RydWN0IGxvZ05hbWVzICpyb3ROYW1lcykKKyB7CitAQCAtMTUyMywxNSArMTU3MCwxNSBAQCBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQl9CisgCisgCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsCistCQkgICAgInJlbmFtaW5nICVzIHRvICVzIChyb3RhdGVjb3VudCAlZCwgbG9nc3RhcnQgJWQsIGkgJWQpLCBcbiIsCisrCQkgICAgIm1vdmluZyAlcyB0byAlcyAocm90YXRlY291bnQgJWQsIGxvZ3N0YXJ0ICVkLCBpICVkKSwgXG4iLAorIAkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHJvdGF0ZUNvdW50LCBsb2dTdGFydCwgaSk7CisgCistCSAgICBpZiAoIWRlYnVnICYmIHJlbmFtZShvbGROYW1lLCBuZXdOYW1lKSkgeworKwkgICAgaWYgKCFkZWJ1ZyAmJiBtdkZpbGUob2xkTmFtZSwgbmV3TmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAJCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsICJvbGQgbG9nICVzIGRvZXMgbm90IGV4aXN0XG4iLAorIAkJCSAgICBvbGROYW1lKTsKKyAJCX0gZWxzZSB7CistCQkgICAgbWVzc2FnZShNRVNTX0VSUk9SLCAiZXJyb3IgcmVuYW1pbmcgJXMgdG8gJXM6ICVzXG4iLAorKwkJICAgIG1lc3NhZ2UoTUVTU19FUlJPUiwgImVycm9yIG1vdmluZyAlcyB0byAlczogJXNcbiIsCisgCQkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgCQkgICAgaGFzRXJyb3JzID0gMTsKKyAJCX0KK0BAIC0xNjY5LDIxICsxNzE2LDIxIEBAIGludCByb3RhdGVTaW5nbGVMb2coc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgc3RydWN0IGxvZ1N0YXRlICpzdGF0ZSwKKyAJCQkJcmV0dXJuIDE7CisgCQkJfQorIAorLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXRtcEZpbGVuYW1lKTsKKy0JCQlpZiAoIWRlYnVnICYmICFoYXNFcnJvcnMgJiYgcmVuYW1lKGxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUpKSB7CistCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIHJlbmFtZSAlcyB0byAlczogJXNcbiIsCisrCQkJaWYgKCFkZWJ1ZyAmJiAhaGFzRXJyb3JzICYmIG12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIG1vdmUgJXMgdG8gJXM6ICVzXG4iLAorIAkJCQlsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lLAorIAkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQloYXNFcnJvcnMgPSAxOworIAkJCX0KKyAJCX0KKyAJCWVsc2UgeworLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXJvdE5hbWVzLT5maW5hbE5hbWUpOworIAkJCWlmICghZGVidWcgJiYgIWhhc0Vycm9ycyAmJgorLQkJCXJlbmFtZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUpKSB7CistCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzXG4iLAorKwkJCW12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byBtb3ZlICVzIHRvICVzOiAlc1xuIiwKKyAJCQkJCWxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUsCisgCQkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQkJaGFzRXJyb3JzID0gMTsKK0BAIC0yMDYzLDcgKzIxMTAsNyBAQCBpbnQgcm90YXRlTG9nU2V0KHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBmb3JjZSkKKyAgICAgcmV0dXJuIGhhc0Vycm9yczsKKyB9CisgCistc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisrc3RhdGljIGludCB3cml0ZVN0YXRlKHN0cnVjdCBsb2dJbmZvICpsb2csIGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgeworIAlzdHJ1Y3QgbG9nU3RhdGUgKnA7CisgCUZJTEUgKmY7CitAQCAtMjIyNyw3ICsyMjc0LDcgQEAgc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgCQlmY2xvc2UoZik7CisgCisgCWlmIChlcnJvciA9PSAwKSB7CistCQlpZiAocmVuYW1lKHRtcEZpbGVuYW1lLCBzdGF0ZUZpbGVuYW1lKSkgeworKwkJaWYgKG12RmlsZSh0bXBGaWxlbmFtZSwgc3RhdGVGaWxlbmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCQl1bmxpbmsodG1wRmlsZW5hbWUpOworIAkJCWVycm9yID0gMTsKKyAJCQltZXNzYWdlKE1FU1NfRVJST1IsICJlcnJvciByZW5hbWluZyB0ZW1wIHN0YXRlIGZpbGUgJXNcbiIsCitAQCAtMjUyNSw3ICsyNTcyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorIAkJcmMgfD0gcm90YXRlTG9nU2V0KGxvZywgZm9yY2UpOworIAorIAlpZiAoIWRlYnVnKQorLQkJcmMgfD0gd3JpdGVTdGF0ZShzdGF0ZUZpbGUpOworKwkJcmMgfD0gd3JpdGVTdGF0ZShsb2csIHN0YXRlRmlsZSk7CisgCisgCXJldHVybiAocmMgIT0gMCk7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9kaXNhYmxlLWNoZWNrLWRpZmZlcmVudC1maWxlc3lzdGVtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTNkNzAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRGlzYWJsZSB0aGUgY2hlY2sgZm9yIGRpZmZlcmVudCBmaWxlc3lzdGVtcworCitUaGUgbG9ncm90YXRlIHN1cHBvcnRzIHJvdGF0ZSBsb2cgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBub3csIHNvCitkaXNhYmxlIHRoZSBjaGVjayBmb3IgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWcuYyB8ICAgIDkgLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCitpbmRleCBkYmJmNTYzLi42NGU2NmY2IDEwMDY0NAorLS0tIGEvY29uZmlnLmMKKysrKyBiL2NvbmZpZy5jCitAQCAtMTQ5MywxNSArMTQ5Myw2IEBAIHN0YXRpYyBpbnQgcmVhZENvbmZpZ0ZpbGUoY29uc3QgY2hhciAqY29uZmlnRmlsZSwgc3RydWN0IGxvZ0luZm8gKmRlZkNvbmZpZykKKyAJCQkJCQkJZ290byBlcnJvcjsKKyAJCQkJCQl9CisgCQkJCQl9CistCistCQkJCQlpZiAoc2Iuc3RfZGV2ICE9IHNiMi5zdF9kZXYKKy0JCQkJCQkmJiAhKG5ld2xvZy0+ZmxhZ3MgJiAoTE9HX0ZMQUdfQ09QWVRSVU5DQVRFIHwgTE9HX0ZMQUdfQ09QWSB8IExPR19GTEFHX1RNUEZJTEVOQU1FKSkpIHsKKy0JCQkJCQltZXNzYWdlKE1FU1NfRVJST1IsCistCQkJCQkJCSIlczolZCBvbGRkaXIgJXMgYW5kIGxvZyBmaWxlICVzICIKKy0JCQkJCQkJImFyZSBvbiBkaWZmZXJlbnQgZGV2aWNlc1xuIiwgY29uZmlnRmlsZSwKKy0JCQkJCQkJbGluZU51bSwgbmV3bG9nLT5vbGREaXIsIG5ld2xvZy0+ZmlsZXNbaV0pOworLQkJCQkJCWdvdG8gZXJyb3I7CistCQkJCQl9CisgCQkJCX0KKyAJCQl9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDAzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGUwYjBmZTMwZTljNDkyMzQ5OTRhMjBhODZhYWNmYWY4MGU2OTAwODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgRmViIDIwMTUgMjE6MTQ6MzcgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIHRoZSBtYW51YWwKKworVXBkYXRlIHRoZSBtYW51YWwgZm9yIHJvdGF0aW5nIG9uIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLjggfCAgIDEwICsrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLjggYi9sb2dyb3RhdGUuOAoraW5kZXggZTRlNWY0OC4uODQ0MDdkMCAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS44CisrKysgYi9sb2dyb3RhdGUuOAorQEAgLTQwNSwxMiArNDA1LDEwIEBAIERvIG5vdCByb3RhdGUgdGhlIGxvZyBpZiBpdCBpcyBlbXB0eSAodGhpcyBvdmVycmlkZXMgdGhlIFxmQmlmZW1wdHlcZlIgb3B0aW9uKS4KKyAKKyAuVFAKKyBcZkJvbGRkaXIgXGZJZGlyZWN0b3J5XGZSCistTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSIG11c3QgYmUKKy1vbiB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UgYXMgdGhlIGxvZyBmaWxlIGJlaW5nIHJvdGF0ZWQsIHVubGVzcyBcZkJjb3B5XGZSLAorLVxmQmNvcHl0cnVuY2F0ZVxmUiBvciBcZkJyZW5hbWVjb3B5XGZSIG9wdGlvbiBpcyB1c2VkLiBUaGUgXGZJZGlyZWN0b3J5XGZSCistaXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlCistdW5sZXNzIGFuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwKKy1vbGQgdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiAgVGhpcyBvcHRpb24gbWF5IGJlCisrTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSCisraXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlIHVubGVzcworK2FuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwgb2xkCisrdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiBUaGlzIG9wdGlvbiBtYXkgYmUKKyBvdmVycmlkZGVuIGJ5IHRoZSBcZkJub29sZGRpclxmUiBvcHRpb24uCisgCisgLlRQCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZV8zLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBhMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJSb3RhdGVzLCBjb21wcmVzc2VzLCByZW1vdmVzIGFuZCBtYWlscyBzeXN0ZW0gbG9nIGZpbGVzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xvZ3JvdGF0ZS8iCitMSUNFTlNFID0gIkdQTHYyIgorCisjIFRPRE86IGxvZ3JvdGF0ZSAzLjguOCBhZGRzIGF1dG90b29scy9hdXRvbWFrZSBzdXBwb3J0LCB1cGRhdGUgcmVjaXBlIHRvIHVzZSBpdC4KKyMgVE9ETzogRG9jdW1lbnQgY29yZXV0aWxzIGRlcGVuZGVuY3kuIFdoeSBub3QgUkRFUEVORFM/IFdoeSBub3QgYnVzeWJveD8KKworREVQRU5EUz0iY29yZXV0aWxzIHBvcHQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWN0LWFzLW12LXdoZW4tcm90YXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0OTJiMTQ1YjZkNTQyZTRhMmY0MWU3N2ZhMTk5YWIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyMjc2OWUzMjg4YzgwOTgxNTU5YTg0MjE3MDNjODhlODQzOGI0NDcyMzVlMzZkZDNjOGU5N2NkOTRjNTI1NDUiCisKK1BBQ0tBR0VDT05GSUcgPz0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAnc2VsaW51eCcsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLCxhY2wiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiwsbGlic2VsaW51eCIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzIFwKKwkJICAgICR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYiCisKKyMgSWYgUlBNX09QVF9GTEFHUyBpcyB1bnNldCwgaXQgYWRkcyAtZyBpdHNlbGYgcmF0aGVyIHRoYW4gb2JleWluZyBvdXIKKyMgb3B0aW1pemF0aW9uIHZhcmlhYmxlcywgc28gdXNlIGl0IHJhdGhlciB0aGFuIEVYVFJBX0NGTEFHUy4KK0VYVFJBX09FTUFLRSA9ICJcCisgICAgTEZTPSBcCisgICAgT1NfTkFNRT0nJHtPU19OQU1FfScgXAorICAgICdDQz0ke0NDfScgXAorICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdFWFRSQV9MREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhY2wnLCAnV0lUSF9BQ0w9eWVzJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VsaW51eCcsICdXSVRIX1NFTElOVVg9eWVzJywgJycsIGQpfSBcCisiCisKKyMgT1NfTkFNRSBpbiB0aGUgbWFrZWZpbGUgZGVmYXVsdHMgdG8gYHVuYW1lIC1zYC4gVGhlIGJlaGF2aW9yIGZvcgorIyBmcmVlYnNkL25ldGJzZCBpcyBxdWVzdGlvbmFibGUsIHNvIGxlYXZlIGl0IGFzIExpbnV4LCB3aGljaCBvbmx5IHNldHMKKyMgSU5TVEFMTD1pbnN0YWxsIGFuZCBCQVNFRElSPS91c3IuCitPU19OQU1FID0gIkxpbnV4IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitkb19pbnN0YWxsKCl7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtEfSBNQU5ESVI9JHttYW5kaXJ9IEJJTkRJUj0ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuZAorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKKyAgICBta2RpciAtcCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIKKyAgICBpbnN0YWxsIC1wIC1tIDY0NCBleGFtcGxlcy9sb2dyb3RhdGUtZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuY29uZgorICAgIGluc3RhbGwgLXAgLW0gNzU1IGV4YW1wbGVzL2xvZ3JvdGF0ZS5jcm9uICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkvbG9ncm90YXRlCisgICAgdG91Y2ggJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2xvZ3JvdGF0ZS5zdGF0dXMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvaW5pdC1mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MxZGNlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCisjIExTQiBpbml0c2NyaXB0IGZ1bmN0aW9ucywgYXMgZGVmaW5lZCBpbiB0aGUgTFNCIFNwZWMgMS4xLjAKKyMKKyMgTGF3cmVuY2UgTGltIDxsbGltQGNvcmUuY29tPiAtIFR1ZSwgMjYgSnVuZSAyMDA3CisjIFVwZGF0ZWQgdG8gdGhlIGxhdGVzdCBMU0IgMy4xIHNwZWMKKyMgaHR0cDovL3JlZnNwZWNzLmZyZWVzdGFuZGFyZHMub3JnL0xTQl8zLjEuMC9MU0ItQ29yZS1nZW5lcmljL0xTQi1Db3JlLWdlbmVyaWNfbGluZXMudHh0CisKK3N0YXJ0X2RhZW1vbiAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2Jfc3RhcnRfZGFlbW9uICIkQCIKK30KKwora2lsbHByb2MgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2tpbGxwcm9jICIkQCIKK30KKworcGlkb2Zwcm9jICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9waWRvZnByb2MgIiRAIgorfQorCitsb2dfc3VjY2Vzc19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHN1Y2Nlc3MgIiRAIgorfQorCitsb2dfZmFpbHVyZV9tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIGZhaWx1cmUgIiRAIgorfQorCitsb2dfd2FybmluZ19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHdhcm5pbmcgIiRAIgorfQorCisjIGludCBsb2dfYmVnaW5fbWVzc2FnZSAoY2hhciAqbWVzc2FnZSkKK2xvZ19iZWdpbl9tc2cgKCkgeworCWlmIFsgLXogIiQxIiBdOyB0aGVuCisJCXJldHVybiAxCisJZmkKKwllY2hvICIgKiAkQCIKK30KKworCitsb2dfZW5kX21zZyAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2JfbG9nX21lc3NhZ2UgZW5kICIkQCIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NjZjMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2tpbGxwcm9jCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK0xTQj1MU0ItMS4xIGtpbGxwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTAzNDNiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9sb2dfbWVzc2FnZQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworQUNUSU9OPSQxCitzaGlmdAorCitjYXNlICIkQUNUSU9OIiBpbgorICBzdWNjZXNzKQorICAJZWNobyAtbiAkKgorCXN1Y2Nlc3MgIiQqIgorCWVjaG8KKwk7OworICBmYWlsdXJlKQorICAJZWNobyAtbiAkKgorCWZhaWx1cmUgIiQqIgorCWVjaG8KKwk7OworICB3YXJuaW5nKQorICAJZWNobyAtbiAkKgorCXdhcm5pbmcgIiQqIgorCWVjaG8KKwk7OworICAqKQorICAJOzsKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3BpZG9mcHJvYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9waWRvZnByb2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQxZmQwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9waWRvZnByb2MKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworcGlkb2Zwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfc3RhcnRfZGFlbW9uIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3N0YXJ0X2RhZW1vbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZTYyYzIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3N0YXJ0X2RhZW1vbgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbmljZT0KK2ZvcmNlPQorcGlkZmlsZT0KK3VzZXI9CitjaGVjaz0KK1JFVFZBTD0KK3doaWxlIFsgIiQxIiAhPSAiJHsxIyNbLStdfSIgXTsgZG8KKwljYXNlICQxIGluCisJICAgICAtZikKKwkgICAgIAlmb3JjZT0iLS1mb3JjZSIKKwkJc2hpZnQKKwkJOzsKKwkgICAgIC1uKQorCSAgICAgCW5pY2U9JDIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXApCisJCXBpZGZpbGU9Ii0tcGlkZmlsZSAkMiIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXUpCisJICAgICAgICB1c2VyPSItLXVzZXIgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC1jKQorCSAgICAgICAgY2hlY2s9Ii0tY2hlY2sgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgICAqKSAgICAgCisgCQllY2hvICJVbmtub3duIE9wdGlvbiAkMSIKKyAJCWVjaG8gIk9wdGlvbnMgYXJlOiIKKyAJCWVjaG8gIi1mIiAKKwkJZWNobyAiLXAge3BpZGZpbGV9IgorCQllY2hvICItbiBbKy8tbmljZWxldmVsXSIKKwkJZWNobyAiLXUge3VzZXJ9IgorCQllY2hvICItYyB7YmFzZX0iCisJICAgICAgICBleGl0IDE7OwkKKwllc2FjCitkb25lCitMU0I9TFNCLTEuMSBkYWVtb24gJHtmb3JjZTotfSAke25pY2U6LX0gJHtwaWRmaWxlOi19ICR7dXNlcjotfSAke2NoZWNrOi19ICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxNWI2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYgpAQCAtMCwwICsxLDEyNyBAQAorU1VNTUFSWSA9ICJMU0Igc3VwcG9ydCBmb3IgT3BlbkVtYmVkZGVkIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9sc2IiCitMSUNFTlNFID0gIkdQTHYyKyIKK1BSID0gInIyIgorCitMU0JfQ09SRSA9ICJsc2ItY29yZS0ke1RBUkdFVF9BUkNIfSIKK0xTQl9DT1JFX3g4NiA9ICJsc2ItY29yZS1pYTMyIgorTFNCX0NPUkVfeDg2LTY0ID0gImxzYi1jb3JlLWFtZDY0IgorUlBST1ZJREVTXyR7UE59ICs9ICIke0xTQl9DT1JFfSIKKworIyBsc2JfcmVsZWFzZSBuZWVkcyBnZXRvcHQKK1JERVBFTkRTXyR7UE59ICs9ICIke1ZJUlRVQUwtUlVOVElNRV9nZXRvcHR9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTEyZGE1NDRiMWEzYTVhMTc5NWEyMTE2MGI0OTQ3MWNmIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xzYi9sc2JfcmVsZWFzZS8xLjQvbHNiLXJlbGVhc2UtMS40LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LWZ1bmN0aW9ucyBcCisgICAgICAgICAgIGZpbGU6Ly9sc2Jfa2lsbHByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX2xvZ19tZXNzYWdlIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9waWRvZnByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX3N0YXJ0X2RhZW1vbiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMwNTM3ZWY1YTAxZTBjYTk0YjdiOGViNmEzNmJiMWU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk5MzIxMjg4ZjhkNjJlN2ExZDQ4NWI3YzZiZGNjZjA2NzY2ZmI4Y2E2MDNjNjE5NTgwNmU0NDU3ZmRmMTcxNzIiCitTID0gIiR7V09SS0RJUn0vbHNiLXJlbGVhc2UtMS40IgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19pbnN0YWxsKCl7CisJb2VfcnVubWFrZSBpbnN0YWxsIHByZWZpeD0ke0R9ICBtYW5kaXI9JHtEfS8ke2RhdGFkaXJ9L21hbi8gREVTVERJUj0ke0R9CisKKwkjIHRoaXMgMiBkaXJzIGFyZSBuZWVkZWQgYnkgcGFja2FnZSBsc2ItZGlzdC1jaGVja2VyCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vb3B0CisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vb3B0CisKKwlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwlta2RpciAtcCAke0R9LyR7YmFzZWxpYn0KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJcHJpbnRmICJMU0JfVkVSU0lPTj1cImNvcmUtNC4xLW5vYXJjaDoiID4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNTg2IiBdIHx8IFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNjg2IiBdO3RoZW4KKwkJcHJpbnRmICJjb3JlLTQuMS1pYTMyIiA+PiAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwllbHNlCisJCXByaW50ZiAiY29yZS00LjEtJHtUQVJHRVRfQVJDSH0iID4+ICAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWZpCisJZWNobyAiXCIiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9JRD0ke0RJU1RST30iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9SRUxFQVNFPSR7RElTVFJPX1ZFUlNJT059IiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWlmIFsgLW4gIiR7RElTVFJPX0NPREVOQU1FfSIgXTsgdGhlbgorCQllY2hvICJESVNUUklCX0NPREVOQU1FPSR7RElTVFJPX0NPREVOQU1FfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlmaQorCWVjaG8gIkRJU1RSSUJfREVTQ1JJUFRJT049XCIke0RJU1RST19OQU1FfSAke0RJU1RST19WRVJTSU9OfVwiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCQlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1pYTMyCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1pYTMyCisJZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1hbWQ2NAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tYW1kNjQKKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1wcGMzMgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tcHBjMzIKKwllbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LW5vYXJjaAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LXBwYzY0CisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1wcGM2NAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGZvciBpIGluIGxzYl9raWxscHJvYyBsc2JfbG9nX21lc3NhZ2UgbHNiX3BpZG9mcHJvYyBsc2Jfc3RhcnRfZGFlbW9uCisgICAgICAgZG8KKyAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJHtpfSAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGRvbmUKKworICAgICAgIGluc3RhbGwgLWQgJHtEfS9saWIvbHNiCisgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1mdW5jdGlvbnMgJHtEfS9saWIvbHNiCisKKyAgICAgICAjIGNyZWF0IGxpbmtzIGZvciBMU0IgdGVzdAorICAgICAgIGluc3RhbGwgLWQgJHtEfS91c3IvbGliL2xzYgorICAgICAgIGxuIC1zZiAke3NiaW5kaXJ9L2Noa2NvbmZpZyAke0R9L3Vzci9saWIvbHNiL2luc3RhbGxfaW5pdGQKKyAgICAgICBsbiAtc2YgJHtzYmluZGlyfS9jaGtjb25maWcgJHtEfS91c3IvbGliL2xzYi9yZW1vdmVfaW5pdGQKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCSAgICAgICBjZCAke0R9CisgICAgICAgICAgICAgICBpZiBbICIke2Jhc2VsaWJ9IiAhPSAibGliNjQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtiYXNlbGlifSBsaWI2NAorICAgICAgICAgICAgICAgZmkKKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4zCisgICAgICAgZmkKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LnNvLjIgbGQtbHNiLnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC1saW51eC5zby4yIGxkLWxzYi5zby4zCisgICAgICAgZmkKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorICAgICAgICAgICAgICAgY2QgJHtEfQorICAgICAgICAgICAgICAgaWYgWyAiJHtiYXNlbGlifSIgIT0gImxpYjY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7YmFzZWxpYn0gbGliNjQKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBjZCAke0R9LyR7YmFzZWxpYn0KKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjMKKyAgICAgICBmaQorICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQuc28uMSBsZC1sc2ItcHBjMzIuc28uMgorICAgICAgICAgICAgICAgbG4gLXNmIGxkLnNvLjEgbGQtbHNiLXBwYzMyLnNvLjMKKyAgICAgICBmaQorfQorRklMRVNfJHtQTn0gKz0gIi9saWI2NCBcCisgICAgICAgICAgICAgICAgL3Vzci9saWIvbHNiIFwKKyAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9sc2IvKiBcCisgICAgICAgICAgICAgICAgL2xpYi9sc2IvKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDljOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZnVuY3Rpb25zOiBhdm9pZCBleGl0IDEgd2hpY2ggY2F1c2VzIGluaXQgc2NyaXB0cyB0byBmYWlsCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHJjLmQvaW5pdC5kL2Z1bmN0aW9ucyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyBiL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworaW5kZXggNjg1MDA0Ni4uMTEyMjNmNyAxMDA2NDQKKy0tLSBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGIvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtNTk3LDUgKzU5Nyw1IEBAIGlmIFsgIiRfdXNlX3N5c3RlbWN0bCIgPSAiMSIgXTsgdGhlbgorIAlmaQorIGZpCisgCistc3Ryc3RyICIkKGNhdCAvcHJvYy9jbWRsaW5lKSIgInJjLmRlYnVnIiAmJiBzZXQgLXgKKytzdHJzdHIgIiQoY2F0IC9wcm9jL2NtZGxpbmUpIiAicmMuZGVidWciICYmIHNldCAteCB8fCB0cnVlCisgCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy9mdW5jdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1NmQwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW5pdHNjcmlwdHMtOS40My5vcmlnL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtMTMsNiArMTMsNyBAQCB1bWFzayAwMjIKKyBQQVRIPSIvc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIKKyBleHBvcnQgUEFUSAorIAorKworIGlmIFsgJFBQSUQgLW5lIDEgLWEgLXogIiRTWVNURU1DVExfU0tJUF9SRURJUkVDVCIgXSAmJiBcCisgCQkoIC9iaW4vbW91bnRwb2ludCAtcSAvY2dyb3VwL3N5c3RlbWQgfHwgL2Jpbi9tb3VudHBvaW50IC1xIC9zeXMvZnMvY2dyb3VwL3N5c3RlbWQgKSA7IHRoZW4KKyAgICAgICAgIGNhc2UgIiQwIiBpbgorQEAgLTU0LDcgKzU1LDcgQEAgc3lzdGVtY3RsX3JlZGlyZWN0ICgpIHsKKyBbIC16ICIke0NPTFVNTlM6LX0iIF0gJiYgQ09MVU1OUz04MAorIAorIGlmIFsgLXogIiR7Q09OU09MRVRZUEU6LX0iIF07IHRoZW4KKy0gIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIF07IHRoZW4KKysgIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIC1hIC1lIC9zYmluL2NvbnNvbGV0eXBlIF07IHRoZW4KKyAgICAgQ09OU09MRVRZUEU9IiQoL3NiaW4vY29uc29sZXR5cGUgPCAvZGV2L3N0ZGVyciAyPi9kZXYvbnVsbCkiCisgICBlbHNlCisgICAgIENPTlNPTEVUWVBFPSJzZXJpYWwiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNjY3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIHdoaWNoIGFyZSBvbmx5IHVzZWQgaW4gYW4gTFNCIGltYWdlIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0RFUEVORFMgPSAicG9wdCBnbGliLTIuMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWJmNGU4YjQ5NzgwYWIxODdkNTFiZDI2YWFhMDIyYzYiCisKK1M9IiR7V09SS0RJUn0vaW5pdHNjcmlwdHMtJHtQVn0iCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyLzljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIiAKKworU1JDX1VSSVttZDVzdW1dID0gIjljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4YjU5Y2U4MTU3Y2ZjNThiYmQ0YjFkZmE1OGFkMTA4NzI0NTc2MWFlMTFjMjAzM2I2NmFlMzg2NGVhN2UxY2YiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmdW5jdGlvbnMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnVuY3Rpb25zXSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMiCisKKyMgU2luY2Ugd2UgYXJlIG9ubHkgdGFraW5nIHRoZSBwYXRjaGVkIHZlcnNpb24gb2YgZnVuY3Rpb25zLCBubyBuZWVkIHRvCisjIGNvbmZpZ3VyZSBvciBjb21waWxlIGFueXRoaW5nIHNvIGRvIG5vdCBleGVjdXRlIHRoZXNlCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIiAKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIiAKKworZG9faW5zdGFsbCgpeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zCisJc2VkIC1pICdzLCR7YmFzZV9iaW5kaXJ9L21vdW50cG9pbnQsJHtiaW5kaXJ9L21vdW50cG9pbnQsZycgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTcxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKQEAgLTAsMCArMSw1MjYgQEAKKyMhL2Jpbi9zaAorCisjIENvcHlyaWdodCAoQykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworCitXT1JLX0RJUj0iL29wdC9sc2ItdGVzdCIKKworaWYgWyBgaWQgLXVgIC1uZSAwIF0KK3RoZW4KKwljYXQgPDwgRU9GCisJSW4gb3JkZXIgdG8gaW5zdGFsbCBhbmQgcnVuIExTQiB0ZXN0c3VpdGUsIHlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcy4KKwlZb3UgYXJlIGN1cnJlbnRseSBydW5uaW5nIHRoaXMgc2NyaXB0IGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLgorCitFT0YKKwlleGl0IDEKK2ZpCisKK0FSQ0g9YHVuYW1lIC1tYAoraWYgWyAke0FSQ0h9ICE9ICJpNjg2IiBdICYmIFsgJHtBUkNIfSAhPSAieDg2XzY0IiBdICYmIFsgJHtBUkNIfSAhPSAicHBjIiBdICYmIFsgJHtBUkNIfSAhPSAicHBjNjQiIF0KK3RoZW4KKwllY2hvICJFcnJvcjogVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIgorCWV4aXQgMQorZmkKKword2hpY2ggcnBtCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwllY2hvICJObyBycG0gY29tbWFuZCBmb3VuZCIKKwlleGl0IDEKK2ZpCisKK1JFVD0wCisKK2NkICR7V09SS19ESVJ9IHx8IGV4aXQgMQorIyBTdGVwIDE6IERvd25sb2FkIHRoZSBMU0IgUGFja2FnZXMKK2VjaG8gIiIKK2VjaG8gIkRvd25sb2FkIExTQiBwYWNrYWdlcy4uLiIKK2VjaG8gIiIKKworaWYgWyAhIC1lIC4vcGFja2FnZXNfbGlzdCBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHBhY2thZ2VzIGxpc3QiID4mMgorCWV4aXQgMQorZmkKKworLiAuL3BhY2thZ2VzX2xpc3QKKworUEFDS0FHRVNfRElSPSIvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3BhY2thZ2VzL2Z0cC5saW51eGZvdW5kYXRpb24ub3JnL3B1Yi9sc2IiCisKK0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYmFzZS8ke0xTQl9SRUxFQVNFfS9iaW5hcnkiCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vdGVzdF9zdWl0ZXMvcmVsZWFzZWQtYWxsL2JpbmFyeS9ydW50aW1lIgorUlVOVElNRV9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK0FQUF9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK0FQUF9URVNURklMRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYXBwLWJhdHRlcnkvdGVzdHMiCitTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L3NuYXBzaG90cy9hcHBiYXQvdGVzdHMiCisKK2lmIFsgISAtZCAke1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0JBU0VfUEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke1JVTlRJTUVfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke0FQUF9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0FQUF9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtBUFBfVEVTVEZJTEVTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7QVBQX1RFU1RGSUxFU19ESVJ9CitmaQorCisjIE9mZmljaWFsIGRvd25sb2FkIHNlcnZlciBsaXN0LiBZb3UgY2FuIHJlcGxhY2UgdGhlbSB3aXRoIHlvdXIgb3duIHNlcnZlci4KK1NFUlZFUl9JUEFERFI9IjE0MC4yMTEuMTY5LjIzIgorU0VSVkVSX05BTUU9ImZ0cC5saW51eGZvdW5kYXRpb24ub3JnIgorCitpZiAhIGBncmVwIC1GIC1xICIke1NFUlZFUl9OQU1FfSIgL2V0Yy9ob3N0c2A7IHRoZW4KKwllY2hvICIke1NFUlZFUl9JUEFERFJ9CSR7U0VSVkVSX05BTUV9CSR7U0VSVkVSX05BTUV9IiA+PiAvZXRjL2hvc3RzCitmaQorCisjcGluZyAtYyA1ICR7U0VSVkVSX05BTUV9CisjaWYgWyAkPyAtbmUgMCBdCisjdGhlbgorIwllY2hvICJUaGUgc2VydmVyOiAke1NFUlZFUl9OQU1FfSBpcyB1bnJlYWNoYWJsZSIKKyMJZXhpdCAxCisjZmkKKworU0VSVkVSMT0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL2Jhc2UvJHtMU0JfUkVMRUFTRX0vYmluYXJ5IgorU0VSVkVSMj0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL3Rlc3Rfc3VpdGVzL3JlbGVhc2VkLWFsbC9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjM9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjQ9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK1NFUlZFUjU9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS90ZXN0cyIKKworIyBXZSB1c2luZyAiY3VybCIgYXMgYSBkb3dubG9hZCB0b29sLCAid2dldCIgaXMgYW4gYWx0ZXJuYXRpdmUuCitDVVJMPWB3aGljaCBjdXJsYAorV0dFVD1gd2hpY2ggd2dldGAKK2lmIFsgISAteiAke0NVUkx9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7Q1VSTH0gLVIgLUwgLWYgLS1yZXRyeSAzIC0tcmV0cnktZGVsYXkgNCAtLWNvbm5lY3QtdGltZW91dCAxODAgLS1jb21wcmVzc2VkIC1DIC0gLW8iCitlbGlmIFsgISAteiAke1dHRVR9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7V0dFVH0gLWMgLXQgNSAtTyIKK2Vsc2UKKwllY2hvICJDYW4gbm90IGZpbmQgYSBkb3dubG9hZCB0b29sLCBwbGVhc2UgaW5zdGFsbCBjdXJsIG9yIHdnZXQuIgorCWV4aXQgMQorZmkKKworY2QgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7QVBQX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfVEVTVEZJTEVTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2lmIFsgJHtSRVR9IC1uZSAwIF0KK3RoZW4KKwllY2hvICJEb3dubG9hZCBzb21lIHBhY2thZ2VzIGZhaWxlZC4gUGxlYXNlIGRvd25sb2FkIHRoZW0gYWdhaW4uIgorCWV4aXQgMQorZmkKKworIyBTdGVwIDI6IEluc3RhbGwgdGhlIExTQiBQYWNrYWdlcworZWNobyAiIgorZWNobyAiSW5zdGFsbCBMU0IgcGFja2FnZXMuLi4iCitlY2hvICIiCisKKyMgS2lsbCBsaWdodHRwZAorcHMgYXV4IHwgZ3JlcCAibGlnaHR0cGQiIHwgZ3JlcCAtdiAtcSAiZ3JlcCIKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWtpbGxhbGwgbGlnaHR0cGQgPi9kZXYvbnVsbCAyPiYxCitmaQorCisjIFN0YXJ0IGF2YWhpLWRhZW1vbgorcHMgYXV4IHwgZ3JlcCAiYXZhaGktZGFlbW9uIiB8IGdyZXAgLXYgLXEgImdyZXAiCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwkvZXRjL2luaXQuZC9hdmFoaS1kYWVtb24gc3RhcnQgPi9kZXYvbnVsbCAyPiYxCitmaQorCitMU0JfU1RBUlRfQ01EPSIvb3B0L2xzYi90ZXN0L21hbmFnZXIvYmluL2Rpc3QtY2hlY2tlci1zdGFydC5wbCIKK0xTQl9TVE9QX0NNRD0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL2Jpbi9kaXN0LWNoZWNrZXItc3RvcC5wbCIKKworUExBVEZPUk1fRklMRT0iL2V0Yy9ycG0vcGxhdGZvcm0iCisKK1JQTV9JTlNUQUxMX0NNRD0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2lnbmF0dXJlIC1pIgorUlBNX0lOU1RBTExfQ01EX05PU0NSSVBUUz0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2NyaXB0cyAtLW5vc2lnbmF0dXJlIC1pIgorCisjIElmIHRoZSBsc2IgaGFzIGJlZW4gc3RhcnRlZCwgc3RvcCBpdCBmaXJzdC4KK2lmIFsgLXggJHtMU0JfU1RPUF9DTUR9IF0KK3RoZW4KKwkke0xTQl9TVE9QX0NNRH0KK2ZpCisKK2lmIFsgISAtZCAvZXRjL3JwbSBdCit0aGVuCisJbWtkaXIgLXAgL2V0Yy9ycG0KK2ZpCisKK2lmIFsgISAtZiAke1BMQVRGT1JNX0ZJTEV9IF0KK3RoZW4KKwl0b3VjaCAke1BMQVRGT1JNX0ZJTEV9CitmaQorCitpZiAhIGBncmVwIC1GIC1xICJub2FyY2gtc3VzZSIgJHtQTEFURk9STV9GSUxFfWA7IHRoZW4KKwlpZiBbICR7QVJDSH0gPSBpNjg2IF07dGhlbgorCQllY2hvICJpNDg2LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWVsaWYgWyAke0FSQ0h9ID0geDg2XzY0IF07IHRoZW4KKwkJZWNobyAiaTQ4Ni1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni0uKi1saW51eC4qIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIm5vYXJjaC1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LW5vYXJjaCIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LXBjIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJZWxzZQorCQllY2hvICIke0FSQ0h9LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWZpCitmaQorCitpZiBbIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke0JBU0VfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCWZpCisJZG9uZQorZmkKKworaWYgWyAtZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19MSVNUfQorCWRvCisJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkkUlBNX0lOU1RBTExfQ01EICR7cGtnfQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgLWQgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfUEFDS0FHRVNfTElTVH0KKwlkbworCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJZmkKKwlkb25lCitmaQorCitpZiBbIC1kICR7QVBQX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7QVBQX1BBQ0tBR0VTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJZWNobyAiJHtwa2d9IiB8IGdyZXAgLXEgImFwYWNoZVx8eHBkZiIKKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCSRSUE1fSU5TVEFMTF9DTURfTk9TQ1JJUFRTICR7cGtnfQorCQkJZmkKKwkJZWxzZQorCQkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJCWZpCisJCWZpCisJZG9uZQorZmkKKworaWYgWyAhIC1kICR7U05BUFNIT1RTX1RFU1RGSUxFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorZmkKKworaWYgWyAtZCAke0FQUF9URVNURklMRVNfRElSfSBdCit0aGVuCisJY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1RFU1RGSUxFU19MSVNUfQorCWRvCisJCWNwIC1mICR7cGtnfSAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorCWRvbmUKK2ZpCisKK2NkICR7V09SS19ESVJ9CisKKyMgU3RlcCAzOiBTZXQgZW52aXJvbm1lbnQKK2VjaG8gIiIKK2VjaG8gIlNldCBlbnZpcm9ubWVudC4uLiIKK2VjaG8gIiIKKworY2hlY2sgKCkKK3sKKwlpZiBbICQ/IC1lcSAwIF0KKwl0aGVuCisJCWVjaG8gIlBBU1MiCisJZWxzZSAKKwkJZWNobyAiRkFJTCIKKwkJZXhpdCAxCisJZmkKK30KKworZWNobyAiIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiQ3JlYXRlIHRoZSBEaXJuYW1lcyBvbiB0YXJnZXQiCisKK2lmIFsgISAtZCAvZXRjL3JwbS9zeXNpbmZvIF0KK3RoZW4KKwlta2RpciAtcCAvZXRjL3JwbS9zeXNpbmZvCitmaQorCitjYXQgPiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIDw8IEVPRgorL2V0Yy9vcHQvbHNiCisvaG9tZS90ZXQvTFNCLnRvb2xzCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL2tzaAorL29wdC9sc2ItdGV0My1saXRlL2xpYi9wZXJsCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3Bvc2l4X3NoCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3RldDMKKy9vcHQvbHNiLXRldDMtbGl0ZS9saWIveHBnM3NoCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsL0RvY3VtZW50VGVtcGxhdGUKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS90ZXN0L2NsYXNzZXMKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdC93ZWIKKy9vcHQvbHNiL3Rlc3QvZG9jCisvb3B0L2xzYi90ZXN0L2xpYgorL29wdC9sc2IvdGVzdC9xbS9kaWFnbm9zdGljcworL29wdC9sc2IvdGVzdC9xbS9kb2MKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jL3Rlc3QvaHRtbAorL29wdC9sc2IvdGVzdC9xbS9kb2MvdGVzdC9wcmludAorL29wdC9sc2IvdGVzdC9xbS9kdG1sCisvb3B0L2xzYi90ZXN0L3FtL2R0bWwvdGVzdAorL29wdC9sc2IvdGVzdC9xbS9tZXNzYWdlcy90ZXN0Cisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiCisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiL1FNVGVzdAorL29wdC9sc2IvdGVzdC9xbS93ZWIKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViL2ltYWdlcworL29wdC9sc2IvdGVzdC9xbS93ZWIvc3R5bGVzaGVldHMKKy9vcHQvbHNiL3Rlc3QvcW0veG1sCisvb3B0L2xzYi90ZXN0L3NoYXJlCisvdXNyL3NoYXJlL2RvYy9sc2ItcnVudGltZS10ZXN0CisvdmFyL29wdC9sc2IKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2ZvbnRjb25maWcKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9mcmVldHlwZQorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2d0a3Z0cworL29wdC9sc2IvdGVzdC9kZXNrdG9wL2xpYnBuZworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3F0MworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hmdAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3htbAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hyZW5kZXIKKworCitFT0YKKworaWYgWyAtZiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIF0KK3RoZW4KKwllY2hvICJTdWNjZXNzIHRvIGNyZWF0IERpcm5hbWVzIGZpbGUiCitlbHNlIAorCWVjaG8gIkZhaWwgdG8gY3JlYXQgRGlybmFtZXMgZmlsZSIKK2ZpCisKK1sgLXggL3NiaW4vbGRjb25maWcgXSAmJiB7CitlY2hvICIiCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitlY2hvICJVcGRhdGUgY2FjaGUiCisvc2Jpbi9sZGNvbmZpZworY2hlY2s7Cit9CisKKyMgQ2hlY2sgbG9vcCBkZXZpY2UKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0KK3RoZW4KKwlpbnNtb2QgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAva2VybmVsL2RyaXZlcnMvYmxvY2svbG9vcC5rbworCWlmIFsgJD8gIT0gMCBdO3RoZW4KKwkJZWNobyAiSW5zbW9kIGxvb3Aua28gZmFpbGVkLiIKKwlmaQorZmkKKworIyBSZXNvbHZlIGxvY2FsaG9zdAorTE9DQUxIT1NUPWBob3N0bmFtZWAKK2lmICEgYGdyZXAgLUYgLXEgIiRMT0NBTEhPU1QiIC9ldGMvaG9zdHNgOyB0aGVuCisJZWNobyAiMTI3LjAuMC4xCSRMT0NBTEhPU1QiID4+IC9ldGMvaG9zdHMKK2ZpCisKKyMgV29ya2Fyb3VuZCB0byBhZGQgcGFydCBvZiBsb2NhbGVzIGZvciBMU0IgdGVzdAorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIElTTy04ODU5LTEgZGVfREUKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBJU08tODg1OS0xNSBkZV9ERS5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIFVURi04IGRlX0RFLlVURi04Citsb2NhbGVkZWYgLWkgZGVfREVAZXVybyAtZiBJU08tODg1OS0xNSBkZV9ERUBldXJvCitsb2NhbGVkZWYgLWkgZW5fSEsgLWYgSVNPLTg4NTktMSBlbl9ISworbG9jYWxlZGVmIC1pIGVuX1BIIC1mIElTTy04ODU5LTEgZW5fUEgKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xNSBlbl9VUy5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPLTg4NTktMQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBVVEYtOCBlbl9VUy5VVEYtOAorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPODg1OS0xCitsb2NhbGVkZWYgLWkgZXNfTVggLWYgSVNPLTg4NTktMSBlc19NWAorbG9jYWxlZGVmIC1pIGZyX0ZSIC1mIElTTy04ODU5LTEgZnJfRlIKK2xvY2FsZWRlZiAtaSBpdF9JVCAtZiBJU08tODg1OS0xIGl0X0lUCitsb2NhbGVkZWYgLWkgamFfSlAgLWYgRVVDLUpQIGphX0pQLmV1Y2pwCitsb2NhbGVkZWYgLWkgc2VfTk8gLWYgVVRGLTggc2VfTk8uVVRGLTgKK2xvY2FsZWRlZiAtaSB0YV9JTiAtZiBVVEYtOCB0YV9JTgorbG9jYWxlZGVmIC1pIGVzX0VTIC1mIElTTy04ODU5LTEgZXNfRVMKK2xvY2FsZWRlZiAtaSBmcl9GUkBldXJvIC1mIElTTy04ODU5LTEgZnJfRlJAZXVybworbG9jYWxlZGVmIC1pIGlzX0lTIC1mIFVURi04IGlzX0lTLlVURi04Citsb2NhbGVkZWYgLWkgemhfVFcgLWYgQklHNSB6aF9UVy5CSUc1Citsb2NhbGVkZWYgLWkgZW5fVVMgLWYgSVNPLTg4NTktMTUgZW5fVVMuSVNPLTg4NTktMTUKKworZWNobyAiIgorZWNobyAiSW5zdGFsbGF0aW9uIGRvbmUhIgorZWNobyAiIgorCisjIFN0ZXAgNDogU3RhcnQgTFNCIHRlc3QKK2lmIFsgLXggJHtMU0JfU1RBUlRfQ01EfSBdCit0aGVuCisJJHtMU0JfU1RBUlRfQ01EfQorZmkKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiUnVuIGFsbCB0aGUgY2VydGlmaWNhdGlvbiB2ZXJzaW9uIG9mIExTQiBUZXN0cyIKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworTFNCX0RJU1RfQ0hFQ0tFUj0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3V0aWxzL2Rpc3QtY2hlY2tlci5wbCIKK1NFU1NJT049IiR7V09SS19ESVJ9L3Nlc3Npb24iCitpZiBbICEgLWUgJHtTRVNTSU9OfSBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHNlc3Npb24gZmlsZS4iCisJZWNobyAiWW91IG11c3QgcnVuIExTQiB0ZXN0IGZyb20gd2ViYnJvd2VyLiIKKwlleGl0IDEKK2ZpCisKK2lmIFsgLXggJHtMU0JfRElTVF9DSEVDS0VSfSBdCit0aGVuCisJJHtMU0JfRElTVF9DSEVDS0VSfSAtdjIgLWYgJHtTRVNTSU9OfQorCWNoZWNrCitmaQorCitlY2hvICIiCitlY2hvICJMU0IgdGVzdCBjb21wbGV0ZS4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgZmlsZSBpbiAvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3Jlc3VsdHMvIgorZWNobyAiIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9wYWNrYWdlc19saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDgzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdApAQCAtMCwwICsxLDUwIEBACitMU0JfUkVMRUFTRT0icmVsZWFzZWQtNC4xLjAiCitMU0JfQVJDSD0ibHNiYXJjaCIKKworQkFTRV9QQUNLQUdFU19MSVNUPSJsc2Itc2V0dXAtNC4xLjAtMS5ub2FyY2gucnBtIgorCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVD0ibHNiLWRpc3QtY2hlY2tlci01LjAuMC4xLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtZGV2ZWwtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14dmZiLTEuMi4wLTIyLnRhcmdldGFyY2gucnBtIFwKKwkiCisKK1JVTlRJTUVfUEFDS0FHRVNfTElTVD0ibHNiLWNtZGNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItbGliY2hrLTQuMS40LTUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1xbS0yLjItMTIubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRhc2stZGlzdC10ZXN0a2l0LTQuMS45LTEubm9hcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS00LjEuMTUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY3BwLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1kZXNrdG9wLTQuMS45LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWRlc2t0b3AtdDJjLTQuMS4zLTMudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWxpYnN0ZGNwcC00LjEuMC0xOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1vbHZlci1jb3JlLTQuMS40LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXBlcmwtNC4xLjgtMS5ub2FyY2gucnBtIFwKKwlsc2ItdGVzdC1wcmludGluZy00LjEuMi0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1weXRob24tNC4xLjUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQzLWF6b3YtNC4xLjEtMy50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQ0LWF6b3YtNC4xLjMtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteHRzNS01LjEuNS00NS5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1hbHNhLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1jb3JlLXQyYy00LjEuMi0zLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC14bWwyLWF6b3YtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfUEFDS0FHRVNfTElTVD0ibHNiLXB5dGhvbi0yLjQuNi03LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1hcGFjaGUtMi4yLjE0LTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRjbC04LjUuNy04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1leHBlY3QtNS40My4wLTEzLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1ncm9mZi0xLjIwLjEtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcmFwdG9yLTEuNC4xOS01LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14cGRmLTEuMDEtMTQubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXNhbWJhLTMuNC4zLTkubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXJzeW5jLTMuMC42LTYubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfVEVTVEZJTEVTX0xJU1Q9ImV4cGVjdC10ZXN0cy50YXIgXAorCXRjbC10ZXN0cy50YXIgXAorCXJhcHRvci10ZXN0cy50YXIgXAorCXRlc3QxLnBkZiBcCisJdGVzdDIucGRmIFwKKwkiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3Nlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjYTJlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uCkBAIC0wLDAgKzEsMTk0IEBACitbR0VORVJBTF0KK1ZFUkJPU0VfTEVWRUw6ICAgMQorQVJDSElURUNUVVJFOiAgICB0YXJnZXRhcmNoCitVU0VfSU5URVJORVQ6ICAgIDEKK1NURF9WRVJTSU9OOiAgICAgTFNCIDQuMQorU1REX1BST0ZJTEU6ICAgICBubworW2NtZGNoa10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbbGliY2hrXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1thbHNhLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbYWxzYS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Fsc2EtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvYWxzYS10MmMvcmVzdWx0cworCitbY29yZV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZXxsb2NhbHwqXQorQVVUT1JFUExZX1BST1ZJREVTX0JBU0g6IG4KK0FVVE9SRVBMWV9URVNUUlVOX1BBVEg6IC9ob21lL3RldC90ZXN0X3NldHMKK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX0tFUk5FTF9OQU1FOiB2bWxpbnV6CitBVVRPUkVQTFlfSU5TVEFMTF9MU0JQQU1fQ09ORjogeQorQVVUT1JFUExZX1BST1ZJREVTX0NfU0hFTEw6IG4KK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX1NFVF9QQVNTX01JTl9EQVlTOiB5CitBVVRPUkVQTFlfUFJPVklERVNfU1lTVl9JTklUOiAKK0FVVE9SRVBMWV9JU05UQUxMX0RFVlM6IHkKK0FVVE9SRVBMWV9TVVBQT1JUU19GSUxFX0NNRDogeQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS90ZXQvdGVzdF9zZXRzCitBVVRPUkVQTFlfU1VQUE9SVFNfTkxTOiBuCitBVVRPUkVQTFlfU1VQUE9SVFNfUFJPQ0VTU19BQ0NPVU5USU5HOiBuCitBVVRPUkVQTFlfUEFUSF9UT19SQy5EOiAKK0FVVE9SRVBMWV9BTExPV1NfTUFLRURFVjogbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUvdGV0L3Rlc3Rfc2V0cy9yZXN1bHRzCisKK1tjb3JlLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS10MmMvcmVzdWx0cworCitbY3BwLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY3BwLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY3BwLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NwcC10MmMvcmVzdWx0cworCitbZGVza3RvcF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZGVza3RvcHxsb2NhbHwqXQorQVVUT1JFUExZX0RFU0tUT1BfRU5WSVJPTk1FTlQ6IFtkZWZhdWx0XQorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcAorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1NIT1dfU1VNTUFSWV9SRVBPUlQ6IAorQVVUT1JFUExZX09SR0FOSVNBVElPTjogTi9BCitBVVRPUkVQTFlfWFZGQl9ESVNQTEFZOiBbZGVmYXVsdF0KKworW2Rlc2t0b3AtdDJjXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tkZXNrdG9wLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcC10MmMKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9kZXNrdG9wLXQyYy9yZXN1bHRzCisKK1tsaWJzdGRjcHBdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2xpYnN0ZGNwcHxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9saWJzdGRjcHBfNC4xLjAKK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX0dOVV9UUklQTEVUOiAKKworW29sdmVyXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tvbHZlcnxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3Qvb2x2ZXItY29yZQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvdmFyL29wdC9sc2IvdGVzdC9vbHZlci1jb3JlCisKK1twZXJsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1twZXJsfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9wZXJsCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcGVybC9yZXN1bHRzCisKK1twcmludGluZ10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcHJpbnRpbmd8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3ByaW50aW5nCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcHJpbnRpbmcvcmVzdWx0cworCitbcHl0aG9uXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tweXRob258bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbi9yZXN1bHRzCisKK1txdDMtYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcXQzLWF6b3Z8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3F0My1hem92CitBVVRPUkVQTFlfWDExX0ZPTlRfUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcXQzLWF6b3YvcmVzdWx0cworCitbcXQ0LWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3F0NC1hem92fGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9xdDQtYXpvdgorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3F0NC1hem92L3Jlc3VsdHMKKworW3htbDItYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNXxsb2NhbHwqXQorQVVUT1JFUExZX1hUX0ZPTlRQQVRIX0dPT0Q6IFtkZWZhdWx0XQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNQorQVVUT1JFUExZX1hWRkJfRElTUExBWTogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNS94dHM1L3Jlc3VsdHMKK0FVVE9SRVBMWV9YVF9GT05UUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorCitbYXBhY2hlXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tleHBlY3RdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2dyb2ZmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tyYXB0b3JdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3JzeW5jXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tzYW1iYV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbdGNsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1t4cGRmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3RfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3RfMS4wLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiQXV0b21hdGVzIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgdGVzdHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xTQl9UZXN0LnNoO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PTcwNjNiYjU0YjA0NzE5ZGYwNzE2YjUxMzQ0N2Y0ZmMwIgorCitTUkNfVVJJID0gImZpbGU6Ly9MU0JfVGVzdC5zaCBcCisJCSAgIGZpbGU6Ly9wYWNrYWdlc19saXN0IFwKKwkJICAgZmlsZTovL3Nlc3Npb24gXAorCQkgICAiCitSREVQRU5EU18ke1BOfSA9ICJycG0iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9MU0JfVGVzdC5zaCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAgJHtEfS9vcHQvbHNiLXRlc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9wYWNrYWdlc19saXN0ICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXNzaW9uICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL2lhMzIvZycgLWUgJ3MvdGFyZ2V0YXJjaC9pNDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gveDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9hbWQ2NC9nJyAtZSAncy90YXJnZXRhcmNoL3g4Nl82NC9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL3g4Ni02NC9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL3BwYzMyL2cnIC1lICdzL3RhcmdldGFyY2gvcHBjL2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gvUFBDMzIvZycgJHtEfS9vcHQvbHNiLXRlc3Qvc2Vzc2lvbgorCWZpCisKKwkjIEZvciBhIHBwYzY0IHRhcmdldC4gdGhlIGRlZmF1bHQgdXNlcnNwYWNlIGlzIDMyYi4KKwkjIFRoZXJlZm9yZSwgb25seSBjaGFuZ2UgdGhlIGxzYmFyY2ggYW5kIHRhcmdldGFyY2gKKwkjIGluIHRoZSBwYWNrYWdlX2xpc3Qgd2hlbiBNTElCPWxpYjY0IGlzIGJlaW5nIHVzZWQuCisJIyBPdGhlcndpc2UsIGJ5IGRlZmF1bHQsIHRoZSBwcGMzMiBMU0IgcGFja2FnZXMKKwkjIHdpbGwgYmUgZG93bmxvYWRlZCBieSBMU0JfVGVzdC5zaAorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQlpZiBbICIke1BOfSIgIT0gIiR7QlBOfSIgXTt0aGVuCisJCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9wcGM2NC9nJyAtZSAncy90YXJnZXRhcmNoL3BwYzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL1BQQzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfSArPSAiL29wdC9sc2ItdGVzdC8qIFwKKyAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdkZTlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCkBAIC0wLDAgKzEsNTcgQEAKK1NVTU1BUlkgPSAiTGlTdCBPcGVuIEZpbGVzIHRvb2wiCitERVNDUklQVElPTiA9ICJMc29mIGlzIGEgVW5peC1zcGVjaWZpYyBkaWFnbm9zdGljIHRvb2wuIFwKK0l0cyBuYW1lIHN0YW5kcyBmb3IgTGlTdCBPcGVuIEZpbGVzLCBhbmQgaXQgZG9lcyBqdXN0IHRoYXQuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorCitTUkNfVVJJID0gImZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvbHNvZl8ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI5Y2QzNGYzZmI4Njg1NmExMjVhYmJmMmJlM2EzODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFhYzJmYzVmZGM5NDQ3OTNiYWY0MWExNDAwMmI2ZGViNWEyOTA5NmIzODc3NDRlMjhmOGMzMGEzNjBhMzcxOCIKKworTE9DQUxTUkMgPSAiZmlsZTovLyR7V09SS0RJUn0vbHNvZl8ke1BWfS9sc29mXyR7UFZ9X3NyYy50YXIiCitTID0gIiR7V09SS0RJUn0vbHNvZl8ke1BWfV9zcmMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vMDBSRUFETUU7YmVnaW5saW5lPTY0NTtlbmRsaW5lPTY3OTttZDU9OTY0ZGYyNzVkMjY0MjliYTNiMzlkYmI5ZjIwNTE3MmEiCisKK3B5dGhvbiBkb191bnBhY2sgKCkgeworICAgICMgdGVtcG9yYXJpbHkgY2hhbmdlIFMgZm9yIHVucGFjaworICAgICMgb2YgbHNvZl8ke1BWfQorICAgIHMgPSBkLmdldFZhcignUycsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vbHNvZl8ke1BWfScpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgIyB0ZW1wb3JhcmlseSBjaGFuZ2UgU1JDX1VSSSBmb3IgdW5wYWNrCisgICAgIyBvZiBsc29mXyR7UFZ9X3NyYworICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyR7TE9DQUxTUkN9JykKKyAgICBkLnNldFZhcignUycsIHMpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgZC5zZXRWYXIoJ1NSQ19VUkknLCBzcmNfdXJpKQorfQorCitleHBvcnQgTFNPRl9JTkNMVURFID0gIiR7U1RBR0lOR19JTkNESVJ9IgorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBMU09GX0FSPSIke0FSfSBjciIKKwlleHBvcnQgTFNPRl9SQU5MSUI9IiR7UkFOTElCfSIKKyAgICAgICAgaWYgWyAieCR7R0xJQkNWRVJTSU9OfSIgIT0gIngiIF07dGhlbgorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9YGVjaG8gJHtHTElCQ1ZFUlNJT059IHxzZWQgLWUgJ3MsXC4sLGcnYAorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9Ii1ER0xJQkNWPSR7TElOVVhfQ0xJQn0iCisgICAgICAgICAgICAgICAgZXhwb3J0IExJTlVYX0NMSUIKKyAgICAgICAgZmkKKwl5ZXMgfCAuL0NvbmZpZ3VyZSBsaW51eAorfQorCitleHBvcnQgSSA9ICIke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBMID0gIiR7U1RBR0lOR19JTkNESVJ9IgorZXhwb3J0IEVYVFJBX09FTUFLRSA9ICIiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9JyAnQ0ZHTD0ke0xERkxBR1N9IC1MLi9saWIgLWxsc29mJyAnREVCVUc9JyAnSU5DTD0ke0NGTEFHU30nCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJaW5zdGFsbCAtbSA0NzU1IGxzb2YgJHtEfSR7c2JpbmRpcn0vbHNvZgorCWluc3RhbGwgLW0gMDY0NCBsc29mLjggJHtEfSR7bWFuZGlyfS9tYW44L2xzb2YuOAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLVJlbmFtZS1ydW50ZXN0c19ub2x0cC5zaC1zY3JpcHQtc28taGF2ZS11bmlxdWUtbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjRkMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwyMDIgQEAKK0Zyb20gOTc1MWE2NTI2Y2ZmY2RmNGUzZGMyY2IzMzY0MTI1OWE3YmUwMGUxOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNyBEZWMgMjAxMyAxODoyNDozMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgcnVudGVzdHNfbm9sdHAuc2ggc2NyaXB0IHNvIGhhdmUgdW5pcXVlIG5hbWUKKworKiB0aGV5IGFyZSBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgdGFyZ2V0IHBhdGgKKyAgL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaAorICBhbmQgb3ZlcndyaXRlIGVhY2ggb3RoZXIgaW4gbm9uLWRldGVybWluaXN0aWMgd2F5CisgIHdoZW4gbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB1c2VkIGluICJtYWtlIGluc3RhbGwiCisKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoIHwgMzEgKysrKysrKysrKysrKysrKworIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgMzEgLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgNDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgNzIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODRmMzk4ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVuaXBjdGVzdHNfbm9sdHAuc2gKK0BAIC0wLDAgKzEsMzEgQEAKKysjIS9iaW4vc2gKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCisrIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKysjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworKyMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworKyMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCisrIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKysjIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKysjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworKyMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCisrZXhpdF9jb2RlPTAKKytlY2hvICJzeXN2aXBjIHRlc3RzIgorK2ZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKysgICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCisrICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKysgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysgICAgICAgICAgICAgIGV4aXRfY29kZT0kPworKyAgICAgIGZpCisrZG9uZQorK2V4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggODRmMzk4Zi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDMxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistZXhpdF9jb2RlPTAKKy1lY2hvICJzeXN2aXBjIHRlc3RzIgorLWZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKy0gICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCistICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKy0gICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0gICAgICAgICAgICAgIGV4aXRfY29kZT0kPworLSAgICAgIGZpCistZG9uZQorLWV4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggNDNjYjdlMi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDQxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistb2xkaG9zdG5hbWU9YGhvc3RuYW1lYAorLWV4aXRfY29kZT0wCistZWNobyAidW5zaGFyZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKHVuc2hhcmUpIgorLQkuL3V0c3Rlc3Rfbm9sdHAgdW5zaGFyZSAkaQorLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0JCWV4aXRfY29kZT0kPworLQlmaQorLWRvbmUKKy1lY2hvICJjbG9uZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKGNsb25lKSIKKy0JLi91dHN0ZXN0X25vbHRwIGNsb25lICRpCistCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorLQkJZXhpdF9jb2RlPSQ/CistCWZpCistZG9uZQorLWhvc3RuYW1lICIkb2xkaG9zdG5hbWUiCistZXhpdCAkZXhpdF9jb2RlCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudXRzdGVzdHNfbm9sdHAuc2ggYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjQzY2I3ZTIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCitAQCAtMCwwICsxLDQxIEBACisrIyEvYmluL3NoCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCisrIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKysjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKysjIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworKyMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCisrIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCisrIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKysjIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworK29sZGhvc3RuYW1lPWBob3N0bmFtZWAKKytleGl0X2NvZGU9MAorK2VjaG8gInVuc2hhcmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpICh1bnNoYXJlKSIKKysJLi91dHN0ZXN0X25vbHRwIHVuc2hhcmUgJGkKKysJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrCQlleGl0X2NvZGU9JD8KKysJZmkKKytkb25lCisrZWNobyAiY2xvbmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpIChjbG9uZSkiCisrCS4vdXRzdGVzdF9ub2x0cCBjbG9uZSAkaQorKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysJCWV4aXRfY29kZT0kPworKwlmaQorK2RvbmUKKytob3N0bmFtZSAiJG9sZGhvc3RuYW1lIgorK2V4aXQgJGV4aXRfY29kZQorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDVlYWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjQzODgxZDcxZDJkNDkwMjdjM2RjMTVmZTI3ZWJlN2Y0ZWU2ODcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBKdW4gMjAxNSAwOTo1MTowOSArMDgwMAorU3ViamVjdDogW1BBVENIXSBsdHA6IHZtYTAzIGZpeCB0aGUgYWxnaW5tZW50IG9mIHBhZ2Ugc2l6ZQorCit0aGUgb2Zmc2V0IHRoZSBwYXJhbSBvZiBtbWFwMigpIGRvZXNuJ3QgYWxpZ24gdGhlIHBhZ2Ugc2l6ZSwgYnV0LAordGhpcyBwYXJhbSBhbGxvdyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZSBhcyByZXR1cm5lZAorYnkgc3lzY29uZihfU0NfUEFHRV9TSVpFKS5tZWFud2hpbGUgb2Zmc2V0ICogNDA5NiBtdXN0IGJlIGEKK211bHRpcGxlIG9mIHRoZSBzeXN0ZW0gcGFnZSBzaXplLCBzbyBtb2RpZnkgdGhlIGlucHV0IHBhcmFtIG9mIG9mZnNldAorcGdvZmYgPSAoVUxPTkdfTUFYIC0gMSkmKH4oKHBnc3otMSk+PjEyKSk7CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitpbmRleCA2YWY5OTYwLi5iODZkN2NlIDEwMDY0NAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitAQCAtODksNyArODksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJaWYgKGZkID09IC0xKQorIAkJCXRzdF9icmttKFRCUk9LIHwgVEVSUk5PLCBOVUxMLCAib3BlbiAlcyIsIFRFU1RGSUxFKTsKKyAKKy0JCXBnb2ZmID0gVUxPTkdfTUFYIC0gMTsKKysJCXBnb2ZmID0gKFVMT05HX01BWCAtIDEpJih+KChwZ3N6LTEpPj4xMikpOworIAkJbWFwID0gbW1hcDIoTlVMTCwgcGdzeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCisgCQkJICAgIGZkLCBwZ29mZik7CisgCQlpZiAobWFwID09IE1BUF9GQUlMRUQpCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLW51bWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ZjAwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1tQQVRDSF0gYWRkIGtub2IgdG8gY29udHJvbCB3aGV0aGVyIG51bWEgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworb3RoZXJ3aXNlIHRoZSByYW5kb20gZGVwZW5kZW5jeSB3aWxsIGJlIGdlbmVyYXRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmMzk3ZTcuLjEzNTcyNTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0Miw2ICsxNDIsMTIgQEAgZWxzZQorICAgICBBQ19TVUJTVChbV0lUSF9SRUFMVElNRV9URVNUU1VJVEVdLFsibm8iXSkKKyBmaQorIAorK0FDX0FSR19XSVRIKFtudW1hXSwKKysgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbnVtYV0sCisrICAgIFt3aXRob3V0IHRoZSBudW1hIHN1cHBvcnRdKSwKKysgIFtdLFt3aXRoX251bWE9eWVzXSwKKyspCisrCisgQUNfQ09ORklHX1NVQkRJUlMoW3V0aWxzL2Zmc2ItNi4wLXJjMl0pCisgCisgIyBFTkQgdGVzdHN1aXRlcyBrbm9icworQEAgLTE1OSw3ICsxNjUsOSBAQCBMVFBfQ0hFQ0tfU0lHTkFMCisgTFRQX0NIRUNLX1NZU0NBTExfRVZFTlRGRAorIExUUF9DSEVDS19TWVNDQUxMX0tFWUNUTAorIExUUF9DSEVDS19TWVNDQUxMX01PRElGWV9MRFQKKytpZiB0ZXN0ICJ4JHdpdGhfbnVtYSIgPSB4eWVzOyB0aGVuCisgTFRQX0NIRUNLX1NZU0NBTExfTlVNQQorK2ZpCisgTFRQX0NIRUNLX1NZU0NBTExfUVVPVEFDVEwKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9TSUdOQUxGRAorIExUUF9DSEVDS19TWVNDQUxMX1VOU0hBUkUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZmY0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItdGlycGMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorW1BBVENIXSBhZGQga25vYiB0byBjb250cm9sIHdoZXRoZXIgdGlycGMgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGlycGMgc3VwcG9ydCBpcyBicm9rZW4gdXBzdHJlYW0uIGluIHRoZSBtZWFudGltZSwgYWxsb3cgdG8gZGlzYWJsZSB0aXJwYy4KKworU2lnbmVkLW9mZi1ieTogRmF0aGkgQm91ZHJhIDxmYXRoaS5ib3VkcmFAbGluYXJvLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTk4LDYgKzk4LDEzIEBAIGlmIHRlc3QgIngkd2l0aF9weXRob24iID0geHllczsgdGhlbgorIGVsc2UKKyAgICAgQUNfU1VCU1QoW1dJVEhfUFlUSE9OXSxbIm5vIl0pCisgZmkKKysKKysjIFRJIFJQQworK0FDX0FSR19XSVRIKFt0aXJwY10sCisrICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXRpcnBjXSwKKysgICAgW3dpdGhvdXQgbGlidGlycGMgc3VwcG9ydF0pLAorKyAgW10sW3dpdGhfdGlycGM9eWVzXSwKKyspCisgIyBFTkQgdG9vbHMga25vYnMKKyAKKyAjIFRlc3RzdWl0ZXMga25vYnMKK0BAIC0xODIsNyArMTg5LDkgQEAgTFRQX0NIRUNLX1JFTkFNRUFUCisgTFRQX0NIRUNLX0ZBTExPQ0FURQorIExUUF9DSEVDS19TWVNDQUxMX0ZDTlRMCisgTFRQX0NIRUNLX1NZU0NBTExfUEVSRl9FVkVOVF9PUEVOCisraWYgdGVzdCAieCR3aXRoX3RpcnBjIiA9IHh5ZXM7IHRoZW4KKyBMVFBfQ0hFQ0tfVElSUEMKKytmaQorIExUUF9DSEVDS19URUUKKyBMVFBfQ0hFQ0tfU1BMSUNFCisgTFRQX0NIRUNLX1ZNU1BMSUNFCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2x0cC1Eby1ub3QtbGluay1hZ2FpbnN0LWxpYmZsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmQ0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDViZGE5YzBhZjU2ODY5YzZmZjJjMjVkMzhlYTA4NzE3OWM5NDZiYzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTEgTWFyIDIwMTQgMTQ6NDc6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbHRwOiBEb24ndCBsaW5rIGFnYWluc3QgbGliZmwKKworV2UgaGF2ZSBhbHJlYWR5IGRlZmluZWQgeXl3cmFwIGZ1bmN0aW9uIGluIHNjYW4ubCBmaWxlLiBBZnRlciB0aGlzLCB3ZSBubyBsb25nZXIgbmVlZCB0bworbGluayBhZ2FpbnN0IGxpYmZsIGFuZCBzbyBubyBsb25nZXIgZ2V0IGVycm9ycyBhYm91dCB1bmRlZmluZWQgcmVmZXJlbmNlcyB0byB5eWxleC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcGFuL01ha2VmaWxlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGFuL01ha2VmaWxlIGIvcGFuL01ha2VmaWxlCitpbmRleCA0Y2M2NDY2Li5hNGI1NzViIDEwMDY0NAorLS0tIGEvcGFuL01ha2VmaWxlCisrKysgYi9wYW4vTWFrZWZpbGUKK0BAIC0zMSw3ICszMSw3IEBAIENQUEZMQUdTCQkrPSAtV25vLWVycm9yCisgCisgQ1BQRkxBR1MJCSs9IC1JJChhYnNfc3JjZGlyKQorIAorLUxETElCUwkJCSs9IC1sbSAkKExFWExJQikKKytMRExJQlMJCQkrPSAtbG0KKyAKKyBMRkxBR1MJCQkrPSAtbAorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbWFrZS1zZXRyZWdpZDAyLXdvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzNjAxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1tQQVRDSF0gbWFrZSBzZXRyZWdpZDAyIHdvcmsKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCit0aGVyZSBpcyBubyAibm9ib2R5IiBncm91cCBpbiBvZS1jb3JlLCB0aGUgdXNlciAibm9ib2R5IiBiZWxvbmdzIHRvCisibm9ncm91cCIgZ3JvdXAsIHNvIHJlcGxhY2Ugbm9ib2R5IHdpdGggbm9ncm91cCB0byBtYWtlIHRoZSB0ZXN0IHBhc3MKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMgfCAxNiArKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK2luZGV4IDgwNTg2MjcuLjg2NmJlZTQgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3NldHJlZ2lkL3NldHJlZ2lkMDIuYworKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK0BAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBnaWRfdCBuZWdfb25lID0gLTE7CisgCisgc3RhdGljIHN0cnVjdCBwYXNzd2QgKmx0cHVzZXI7CisgCistc3RhdGljIHN0cnVjdCBncm91cCBub2JvZHksIHJvb3QsIGJpbjsKKytzdGF0aWMgc3RydWN0IGdyb3VwIG5vZ3JvdXAsIHJvb3QsIGJpbjsKKyAKKyAvKgorICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0ZXN0IGRhdGEuICBFYWNoIHN0cnVjdHVyZSBpbiB0aGUgYXJyYXkKK0BAIC01NywxNyArNTcsMTcgQEAgc3RydWN0IHRlc3RfZGF0YV90IHsKKyAJY2hhciAqdGVzdF9tc2c7CisgfSB0ZXN0X2RhdGFbXSA9IHsKKyAJeworLQkmbmVnX29uZSwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJm5lZ19vbmUsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIHJvb3QpLCJ9LCB7CistCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIGJpbikifSwgeworLQkmcm9vdC5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwtMSksIn0sIHsKKy0JJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIC0xKSwifSwgeworLQkmcm9vdC5ncl9naWQsICZiaW4uZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwgYmluKSJ9LCB7CistCSZiaW4uZ3JfZ2lkLCAmcm9vdC5ncl9naWQsIEVQRVJNLCAmbm9ib2R5LCAmbm9ib2R5LAorKwkmYmluLmdyX2dpZCwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIHJvb3QpLCJ9CisgfTsKKyAKK0BAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHZvaWQgc2V0dXAodm9pZCkKKyB9IHdoaWxlICgwKQorIAorIAlHRVRfR0lEKHJvb3QpOworLQlHRVRfR0lEKG5vYm9keSk7CisrCUdFVF9HSUQobm9ncm91cCk7CisgCUdFVF9HSUQoYmluKTsKKyAKKyAJVEVTVF9QQVVTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE1MDQyMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhlYmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIKQEAgLTAsMCArMSw4NiBAQAorU1VNTUFSWSA9ICJMaW51eCBUZXN0IFByb2plY3QiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggVGVzdCBQcm9qZWN0IGlzIGEgam9pbnQgcHJvamVjdCB3aXRoIFNHSSwgSUJNLCBPU0RMLCBhbmQgQnVsbCB3aXRoIGEgZ29hbCB0byBkZWxpdmVyIHRlc3Qgc3VpdGVzIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgdGhhdCB2YWxpZGF0ZSB0aGUgcmVsaWFiaWxpdHksIHJvYnVzdG5lc3MsIGFuZCBzdGFiaWxpdHkgb2YgTGludXguIFRoZSBMaW51eCBUZXN0IFByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIGZvciB0ZXN0aW5nIHRoZSBMaW51eCBrZXJuZWwgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2x0cC5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9ydW5fZnJlZXplci5zaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTE3O21kNT04NmE2MWQyYzA0MmQ1OTgzNmZmYjM1M2EyMTQ1NjQ5OCBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9tZW1vcnlfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9jcHVfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9DT1BZSU5HO21kNT0yMTZlNDNiNzJlZmJlNGVkOTAxN2NjMTljNGM2OGIwMSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9yZWFsdGltZS9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgZmlsZTovL3Rvb2xzL25ldHBpcGUtMi40L0NPUFlJTkc7bWQ1PTllMzc4MWJiNWZlNzg3YWE4MGUxZjUxZjUwMDZiNmZhIFwKKyAgICBmaWxlOi8vdG9vbHMvbmV0cGlwZS0yLjQtaXB2Ni9DT1BZSU5HO21kNT05ZTM3ODFiYjVmZTc4N2FhODBlMWY1MWY1MDA2YjZmYSBcCisgICAgZmlsZTovL3Rvb2xzL3RvcC1MVFAvcHJvYy9DT1BZSU5HO21kNT1hZWZjODhlYjhhNDE2NzJmYmZjZmU2YjY5YWI4YzQ5YyBcCisgICAgZmlsZTovL3Rvb2xzL3BvdW5kZXIyMS9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2JlbmNobWFyay9rZXJuYmVuY2gtMC40Mi9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2Zmc2ItNi4wLXJjMi9DT1BZSU5HO21kNT1jNDYwODIxNjdhMzE0ZDc4NWQwMTJhMjQ0NzQ4ZDgwMyBcCisiCisKK0RFUEVORFMgPSAiYXR0ciBsaWJhaW8gbGliY2FwIGFjbCBvcGVuc3NsIHppcC1uYXRpdmUiCitTUkNSRVYgPSAiNzdkMGI3ZmQwMTQ4Y2U2NTdjNWEyNTA2MDY2N2U5NzhjMDc2NjJhMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xpbnV4LXRlc3QtcHJvamVjdC9sdHAuZ2l0IFwKKyAgICBmaWxlOi8vMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggXAorICAgIGZpbGU6Ly9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBcCisgICAgZmlsZTovL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLWtub2ItZm9yLW51bWEucGF0Y2ggXAorICAgIGZpbGU6Ly9hZGQta25vYi1mb3ItdGlycGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWx0cC12bWEwMy1maXgtdGhlLWFsZ2lubWVudC1vZi1wYWdlLXNpemUucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2V4cG9ydCBwcmVmaXggPSAiL29wdC9sdHAiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL29wdC9sdHAiCisKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS13aXRoLW51bWEsIC0td2l0aG91dC1udW1hLCBudW1hY3RsLCIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi1JICR7U30vdGVzdGNhc2VzL3JlYWx0aW1lL200IgorRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcG93ZXItbWFuYWdlbWVudC10ZXN0c3VpdGUgLS13aXRoLXJlYWx0aW1lLXRlc3RzdWl0ZSAiCisjIGx0cCBuZXR3b3JrL3JwYyB0ZXN0IGNhc2VzIGZ0YmZzIHdoZW4gbGlidGlycGMgaXMgZm91bmQKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC10aXJwYyAiCisKKyMgVGhlIG1ha2VmaWxlcyBtYWtlIGV4Y2Vzc2l2ZSB1c2Ugb2YgbWFrZSAtQyBhbmQgc2V2ZXJhbCBpbmNsdWRlIHRlc3RjYXNlcy5taworIyB3aGljaCB0cmlnZ2VycyBhIGJ1aWxkIG9mIHRoZSBzeXNjYWxsIGhlYWRlci4gVG8gcmVwcm9kdWNlLCBidWlsZCBsdHAsCisjIHRoZW4gZGVsZXRlIHRoZSBoZWFkZXIsIHRoZW4gIm1ha2UgLWogWFgiIGFuZCB3YXRjaCByZWdlbi5zaCBydW4gbXVsdGlwbGUKKyMgdGltZXMuIEl0cyBlYXNpZXIgdG8gZ2VuZXJhdGUgdGhpcyBvbmNlIGhlcmUgaW5zdGVhZC4KK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJKCBtYWtlIC1DICR7Qn0vdGVzdGNhc2VzL2tlcm5lbCBpbmNsdWRlL2xpbnV4X3N5c2NhbGxfbnVtYmVycy5oICkKK30KKworZG9faW5zdGFsbCgpeworICAgIGluc3RhbGwgLWQgJHtEfS9vcHQvbHRwLworICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IFNLSVBfSURDSEVDSz0xIGluc3RhbGwKKworICAgICMgQ29weSBQT1NJWCB0ZXN0IHN1aXRlIGludG8gJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcyBieSBtYW51YWwKKyAgICBjcCAtciB0ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUgJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcworfQorCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIGUyZnNwcm9ncy1ta2UyZnMgcHl0aG9uLWNvcmUgbGliYWlvIGJhc2ggZ2F3ayBleHBlY3QiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgIC9vcHQvbHRwL3J1bnRlc3QvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RjYXNlcy8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC9zY2VuYXJpb19ncm91cHMvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0c2NyaXB0cy8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RzY3JpcHRzL29wZW5fcG9zaXhfdGVzdHN1aXRlLy5kZWJ1ZyBcCisiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiL29wdC9sdHAvbGliL2xpYm1lbS5hIgorCitGSUxFU18ke1BOfSArPSAiL29wdC9sdHAvKiAvb3B0L2x0cC9ydW50ZXN0LyogL29wdC9sdHAvc2NlbmFyaW9fZ3JvdXBzLyogL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vKi9iaW4vKiAvb3B0L2x0cC90ZXN0c2NyaXB0cy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9jb25mb3JtYW5jZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9Eb2N1bWVudGF0aW9uLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2Z1bmN0aW9uYWwvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvaW5jbHVkZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9zY3JpcHRzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3N0cmVzcy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS90b29scy8qIgorCisjIEF2b2lkIGdlbmVyYXRlZCBiaW5hcmllcyBzdHJpcHBpbmcuIE90aGVyd2lzZSBzb21lIG9mIHRoZSBsdHAgdGVzdHMgc3VjaCBhcyBsZGQwMSAmIG5tMDEgZmFpbHMKK0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisjIEhvd2V2ZXIsIHRlc3RfYXJjaF9zdHJpcHBlZCBpcyBhbHJlYWR5IHN0cmlwcGVkLCBzby4uLgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImFscmVhZHktc3RyaXBwZWQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2RhMzMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb206IEx1ayBDbGFlcyA8bHVrQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDQgSnVsIDIwMDkgMTA6NTQ6NTMgKzAyMDAKK1N1YmplY3Q6IERvbid0IHJldXNlIHdlYWsgc3ltYm9sIG9wdG9wdCB0byBmaXggRlRCRlMgb24gbWlwcyoKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tIAorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGdldG9wdC5jIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dldG9wdC5jIGIvZ2V0b3B0LmMKK2luZGV4IDgzY2U2MjguLjgyZTk4M2MgMTAwNjQ0CistLS0gYS9nZXRvcHQuYworKysrIGIvZ2V0b3B0LmMKK0BAIC00Myw3ICs0Myw3IEBAIHR5cGVkZWYJaW50CXNzaXplX3Q7CisgY2hhcgkqb3B0YXJnOworIGludAlvcHRpbmQgPSAxOworIGludAlvcHRlcnIgPSAxOworLWludAlvcHRvcHQ7CisraW50CW9wdG9wdGM7CisgCisgc3RhdGljIHZvaWQKKyBlcnJvcihjb25zdCBjaGFyICpzLCBpbnQgYykKK0BAIC02OSw3ICs2OSw3IEBAIGVycm9yKGNvbnN0IGNoYXIgKnMsIGludCBjKQorIAkJKmJwKysgPSAqcysrOworIAl3aGlsZSAoKm1zZykKKyAJCSpicCsrID0gKm1zZysrOworLQkqYnArKyA9IG9wdG9wdDsKKysJKmJwKysgPSBvcHRvcHRjOworIAkqYnArKyA9ICdcbic7CisgCXdyaXRlKDIsIGJ1ZiwgYnAgLSBidWYpOworIAlhY19mcmVlKGJ1Zik7CitAQCAtMTAxLDEzICsxMDEsMTMgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCX0KKyAJCWN1cnAgPSAmYXJndltvcHRpbmRdWzFdOworIAl9CistCW9wdG9wdCA9IGN1cnBbMF0gJiAwMzc3OworKwlvcHRvcHRjID0gY3VycFswXSAmIDAzNzc7CisgCXdoaWxlIChvcHRzdHJpbmdbMF0pIHsKKyAJCWlmIChvcHRzdHJpbmdbMF0gPT0gJzonKSB7CisgCQkJb3B0c3RyaW5nKys7CisgCQkJY29udGludWU7CisgCQl9CistCQlpZiAoKG9wdHN0cmluZ1swXSAmIDAzNzcpID09IG9wdG9wdCkgeworKwkJaWYgKChvcHRzdHJpbmdbMF0gJiAwMzc3KSA9PSBvcHRvcHRjKSB7CisgCQkJaWYgKG9wdHN0cmluZ1sxXSA9PSAnOicpIHsKKyAJCQkJaWYgKGN1cnBbMV0gIT0gJ1wwJykgeworIAkJCQkJb3B0YXJnID0gKGNoYXIgKikmY3VycFsxXTsKK0BAIC0xMjcsNyArMTI3LDcgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCQkJCW9wdGluZCsrOworIAkJCQlvcHRhcmcgPSAwOworIAkJCX0KKy0JCQlyZXR1cm4gb3B0b3B0OworKwkJCXJldHVybiBvcHRvcHRjOworIAkJfQorIAkJb3B0c3RyaW5nKys7CisgCX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYWQ0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI3IEFwciAyMDExIDAwOjE4OjQyICswMjAwCitTdWJqZWN0OiBQYXRjaGVkIG91dCBTU0wyIHN1cHBvcnQgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBPcGVuU1NMLgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBtYWlseC4xICAgfCAgICAyICstCisgb3BlbnNzbC5jIHwgICAgNCArLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQoraW5kZXggNDE3ZWEwNC4uYTAyZTQzMCAxMDA2NDQKKy0tLSBhL21haWx4LjEKKysrKyBiL21haWx4LjEKK0BAIC0zNTc1LDcgKzM1NzUsNyBAQCBPbmx5IGFwcGxpY2FibGUgaWYgU1NML1RMUyBzdXBwb3J0IGlzIGJ1aWx0IHVzaW5nIE9wZW5TU0wuCisgLlRQCisgLkIgc3NsLW1ldGhvZAorIFNlbGVjdHMgYSBTU0wvVExTIHByb3RvY29sIHZlcnNpb247CistdmFsaWQgdmFsdWVzIGFyZSBgc3NsMicsIGBzc2wzJywgYW5kIGB0bHMxJy4KKyt2YWxpZCB2YWx1ZXMgYXJlIGBzc2wzJywgYW5kIGB0bHMxJy4KKyBJZiB1bnNldCwgdGhlIG1ldGhvZCBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LAorIGlmIHBvc3NpYmxlLgorIC5UUAorZGlmZiAtLWdpdCBhL29wZW5zc2wuYyBiL29wZW5zc2wuYworaW5kZXggYjRlMzNmYy4uNDRmZTRlNSAxMDA2NDQKKy0tLSBhL29wZW5zc2wuYworKysrIGIvb3BlbnNzbC5jCitAQCAtMjE2LDkgKzIxNiw3IEBAIHNzbF9zZWxlY3RfbWV0aG9kKGNvbnN0IGNoYXIgKnVocCkKKyAKKyAJY3AgPSBzc2xfbWV0aG9kX3N0cmluZyh1aHApOworIAlpZiAoY3AgIT0gTlVMTCkgeworLQkJaWYgKGVxdWFsKGNwLCAic3NsMiIpKQorLQkJCW1ldGhvZCA9IFNTTHYyX2NsaWVudF9tZXRob2QoKTsKKy0JCWVsc2UgaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorKwkJaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorIAkJCW1ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAJCWVsc2UgaWYgKGVxdWFsKGNwLCAidGxzMSIpKQorIAkJCW1ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjczYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE0IEFwciAyMDEyIDIwOjIyOjQzICswMjAwCitTdWJqZWN0OiBGaXhlZCBMaW50aWFuIHdhcm5pbmcgKHdhcm5pbmc6IG1hY3JvIGBOJyBub3QgZGVmaW5lZCkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21haWx4LjEgYi9tYWlseC4xCitpbmRleCBhMDJlNDMwLi5iMDcyM2JkIDEwMDY0NAorLS0tIGEvbWFpbHguMQorKysrIGIvbWFpbHguMQorQEAgLTM3ODEsNyArMzc4MSw3IEBAIHlvdSBjb3VsZCBleGFtaW5lIHRoZSBmaXJzdCBtZXNzYWdlIGJ5IGdpdmluZyB0aGUgY29tbWFuZDoKKyAuc3AKKyAuZmkKKyB3aGljaCBtaWdodCBjYXVzZQorLS5OIG1haWx4CisrLkkgbWFpbHgKKyB0byByZXNwb25kIHdpdGgsIGZvciBleGFtcGxlOgorIC5uZgorIC5zcApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2MTY0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA5OTg0YWU1Y2IwZWEwZDYxZGYxNjEyYjA2OTUyYTYxMzIzYzA4M2Q5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTM6MzggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIG91dG9mOiBJbnRyb2R1Y2UgZXhwYW5kYWRkciBmbGFnCisKK0RvY3VtZW50IHRoYXQgYWRkcmVzcyBleHBhbnNpb24gaXMgZGlzYWJsZWQgdW5sZXNzIHRoZSBleHBhbmRhZGRyCitiaW5hcnkgb3B0aW9uIGlzIHNldC4KKworVGhpcyBoYXMgYmVlbiBhc3NpZ25lZCBDVkUtMjAxNC03ODQ0IGZvciBCU0QgbWFpbHgsIGJ1dCBpdCBpcyBub3QKK2EgdnVsbmVyYWJpbGl0eSBpbiBIZWlybG9vbSBtYWlseCBiZWNhdXNlIHRoaXMgZmVhdHVyZSB3YXMgZG9jdW1lbnRlZC4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8IDE0ICsrKysrKysrKysrKysrCisgbmFtZXMuYyB8ICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWFpbHguMSBiL21haWx4LjEKK2luZGV4IDcwYTc4NTkuLjIyYTE3MWIgMTAwNjQ0CistLS0gYS9tYWlseC4xCisrKysgYi9tYWlseC4xCitAQCAtNjU2LDYgKzY1NiwxNCBAQCBidXQgYW55IHJlcGx5IHJldHVybmVkIHRvIHRoZSBtYWNoaW5lCisgd2lsbCBoYXZlIHRoZSBzeXN0ZW0gd2lkZSBhbGlhcyBleHBhbmRlZAorIGFzIGFsbCBtYWlsIGdvZXMgdGhyb3VnaCBzZW5kbWFpbC4KKyAuU1MgIlJlY2lwaWVudCBhZGRyZXNzIHNwZWNpZmljYXRpb25zIgorK0lmIHRoZQorKy5JIGV4cGFuZGFkZHIKKytvcHRpb24gaXMgbm90IHNldCAodGhlIGRlZmF1bHQpLCByZWNpcGllbnQgYWRkcmVzc2VzIG11c3QgYmUgbmFtZXMgb2YKKytsb2NhbCBtYWlsYm94ZXMgb3IgSW50ZXJuZXQgbWFpbCBhZGRyZXNzZXMuCisrLlBQCisrSWYgdGhlCisrLkkgZXhwYW5kYWRkcgorK29wdGlvbiBpcyBzZXQsIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisgV2hlbiBhbiBhZGRyZXNzIGlzIHVzZWQgdG8gbmFtZSBhIHJlY2lwaWVudAorIChpbiBhbnkgb2YgVG8sIENjLCBvciBCY2MpLAorIG5hbWVzIG9mIGxvY2FsIG1haWwgZm9sZGVycworQEAgLTIzOTEsNiArMjM5OSwxMiBAQCBhbmQgZXhpdHMgaW1tZWRpYXRlbHkuCisgSWYgdGhpcyBvcHRpb24gaXMgc2V0LAorIFxmSW1haWx4XGZSIHN0YXJ0cyBldmVuIHdpdGggYW4gZW1wdHkgbWFpbGJveC4KKyAuVFAKKysuQiBleHBhbmRhZGRyCisrQ2F1c2VzCisrLkkgbWFpbHgKKyt0byBleHBhbmQgbWVzc2FnZSByZWNpcGllbnQgYWRkcmVzc2VzLCBhcyBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24sCisrUmVjaXBpZW50IGFkZHJlc3Mgc3BlY2lmaWNhdGlvbnMuCisrLlRQCisgLkIgZmxpcHIKKyBFeGNoYW5nZXMgdGhlCisgLkkgUmVzcG9uZAorZGlmZiAtLWdpdCBhL25hbWVzLmMgYi9uYW1lcy5jCitpbmRleCA2NmU5NzZiLi5jNjk1NjBmIDEwMDY0NAorLS0tIGEvbmFtZXMuYworKysrIGIvbmFtZXMuYworQEAgLTI2OCw2ICsyNjgsOSBAQCBvdXRvZihzdHJ1Y3QgbmFtZSAqbmFtZXMsIEZJTEUgKmZvLCBzdHJ1Y3QgaGVhZGVyICpocCkKKyAJRklMRSAqZm91dCwgKmZpbjsKKyAJaW50IGlzcGlwZTsKKyAKKysJaWYgKHZhbHVlKCJleHBhbmRhZGRyIikgPT0gTlVMTCkKKysJCXJldHVybiBuYW1lczsKKysKKyAJdG9wID0gbmFtZXM7CisgCW5wID0gbmFtZXM7CisgCXRpbWUoJm5vdyk7CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkYmZkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRnJvbSBlMzRlMmFjNjdiODA0OTcwODBlYmVjY2NlYzQwYzNiNjE0NTYxNjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTQ6MDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIHVucGFjazogRGlzYWJsZSBvcHRpb24gcHJvY2Vzc2luZyBmb3IgZW1haWwgYWRkcmVzc2VzCisgd2hlbiBjYWxsaW5nIHNlbmRtYWlsCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGV4dGVybi5oICB8IDIgKy0KKyBuYW1lcy5jICAgfCA4ICsrKysrKy0tCisgc2VuZG91dC5jIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0ZXJuLmggYi9leHRlcm4uaAoraW5kZXggNmI4NWJhMC4uODg3M2ZlOCAxMDA2NDQKKy0tLSBhL2V4dGVybi5oCisrKysgYi9leHRlcm4uaAorQEAgLTM5Niw3ICszOTYsNyBAQCBzdHJ1Y3QgbmFtZSAqb3V0b2Yoc3RydWN0IG5hbWUgKm5hbWVzLCBGSUxFICpmbywgc3RydWN0IGhlYWRlciAqaHApOworIGludCBpc19maWxlYWRkcihjaGFyICpuYW1lKTsKKyBzdHJ1Y3QgbmFtZSAqdXNlcm1hcChzdHJ1Y3QgbmFtZSAqbmFtZXMpOworIHN0cnVjdCBuYW1lICpjYXQoc3RydWN0IG5hbWUgKm4xLCBzdHJ1Y3QgbmFtZSAqbjIpOworLWNoYXIgKip1bnBhY2soc3RydWN0IG5hbWUgKm5wKTsKKytjaGFyICoqdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmVsaWRlKHN0cnVjdCBuYW1lICpuYW1lcyk7CisgaW50IGNvdW50KHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmRlbGV0ZV9hbHRlcm5hdGVzKHN0cnVjdCBuYW1lICpucCk7CitkaWZmIC0tZ2l0IGEvbmFtZXMuYyBiL25hbWVzLmMKK2luZGV4IGM2OTU2MGYuLjQ1YmJhZWQgMTAwNjQ0CistLS0gYS9uYW1lcy5jCisrKysgYi9uYW1lcy5jCitAQCAtNTQ5LDcgKzU0OSw3IEBAIGNhdChzdHJ1Y3QgbmFtZSAqbjEsIHN0cnVjdCBuYW1lICpuMikKKyAgKiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlIG5hbWUgbGlzdCB3b24ndCBmaXQuCisgICovCisgY2hhciAqKgorLXVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisrdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCkKKyB7CisgCWNoYXIgKiphcCwgKip0b3A7CisgCXN0cnVjdCBuYW1lICpuOworQEAgLTU2NCw3ICs1NjQsNyBAQCB1bnBhY2soc3RydWN0IG5hbWUgKm5wKQorIAkgKiB0aGUgdGVybWluYXRpbmcgMCBwb2ludGVyLiAgQWRkaXRpb25hbCBzcG90cyBtYXkgYmUgbmVlZGVkCisgCSAqIHRvIHBhc3MgYWxvbmcgLWYgdG8gdGhlIGhvc3QgbWFpbGVyLgorIAkgKi8KKy0JZXh0cmEgPSAyOworKwlleHRyYSA9IDMgKyBjb3VudChzbW9wdHMpOworIAlleHRyYSsrOworIAltZXRvbyA9IHZhbHVlKCJtZXRvbyIpICE9IE5VTEw7CisgCWlmIChtZXRvbykKK0BAIC01ODEsNiArNTgxLDEwIEBAIHVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisgCQkqYXArKyA9ICItbSI7CisgCWlmICh2ZXJib3NlKQorIAkJKmFwKysgPSAiLXYiOworKwlmb3IgKDsgc21vcHRzICE9IE5VTEw7IHNtb3B0cyA9IHNtb3B0cy0+bl9mbGluaykKKysJCWlmICgoc21vcHRzLT5uX3R5cGUgJiBHREVMKSA9PSAwKQorKwkJCSphcCsrID0gc21vcHRzLT5uX25hbWU7CisrCSphcCsrID0gIi0tIjsKKyAJZm9yICg7IG4gIT0gTlVMTDsgbiA9IG4tPm5fZmxpbmspCisgCQlpZiAoKG4tPm5fdHlwZSAmIEdERUwpID09IDApCisgCQkJKmFwKysgPSBuLT5uX25hbWU7CitkaWZmIC0tZ2l0IGEvc2VuZG91dC5jIGIvc2VuZG91dC5jCitpbmRleCA3YjdmMmViLi5jNTJmMTVkIDEwMDY0NAorLS0tIGEvc2VuZG91dC5jCisrKysgYi9zZW5kb3V0LmMKK0BAIC04MzUsNyArODM1LDcgQEAgc3RhcnRfbXRhKHN0cnVjdCBuYW1lICp0bywgc3RydWN0IG5hbWUgKm1haWxhcmdzLCBGSUxFICppbnB1dCwKKyAjZW5kaWYJLyogSEFWRV9TT0NLRVRTICovCisgCisgCWlmICgoc210cCA9IHZhbHVlKCJzbXRwIikpID09IE5VTEwpIHsKKy0JCWFyZ3MgPSB1bnBhY2soY2F0KG1haWxhcmdzLCB0bykpOworKwkJYXJncyA9IHVucGFjayhtYWlsYXJncywgdG8pOworIAkJaWYgKGRlYnVnIHx8IHZhbHVlKCJkZWJ1ZyIpKSB7CisgCQkJcHJpbnRmKGNhdGdldHMoY2F0ZCwgQ0FUU0VULCAxODEsCisgCQkJCQkiU2VuZG1haWwgYXJndW1lbnRzOiIpKTsKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1OGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSAyYmFlOGVjZjA0ZWMyYmE2YmI5ZjBhZjViODA0ODVkZDBlZGI0MjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTI6NDg6MjUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIGZpby5jOiBVbmNvbmRpdGlvbmFsbHkgcmVxdWlyZSB3b3JkZXhwIHN1cHBvcnQKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCA2NyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCA2NWU4ZjEwLi4xNTI5MjM2IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDMsMTIgKzQzLDE1IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmaW8uYwkyLjc2IChncml0dGVyKSA5LzE2LzA5IjsKKyAjZW5kaWYgLyogbm90IGxpbnQgKi8KKyAKKyAjaW5jbHVkZSAicmN2LmgiCisrCisrI2lmbmRlZiBIQVZFX1dPUkRFWFAKKysjZXJyb3Igd29yZGV4cCBzdXBwb3J0IGlzIHJlcXVpcmVkCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CistI2lmZGVmCUhBVkVfV09SREVYUAorICNpbmNsdWRlIDx3b3JkZXhwLmg+CistI2VuZGlmCS8qIEhBVkVfV09SREVYUCAqLworICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaWYgZGVmaW5lZCAoVVNFX05TUykKK0BAIC00ODEsNyArNDg0LDYgQEAgbmV4dDoKKyBzdGF0aWMgY2hhciAqCisgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyB7CistI2lmZGVmCUhBVkVfV09SREVYUAorIAl3b3JkZXhwX3Qgd2U7CisgCWNoYXIgKmNwOworIAlzaWdzZXRfdCBuc2V0OworQEAgLTUyNyw2NSArNTI5LDYgQEAgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyAJfQorIAl3b3JkZnJlZSgmd2UpOworIAlyZXR1cm4gY3A7CistI2Vsc2UJLyogIUhBVkVfV09SREVYUCAqLworLQljaGFyIHhuYW1lW1BBVEhTSVpFXTsKKy0JY2hhciBjbWRidWZbUEFUSFNJWkVdOwkJLyogYWxzbyB1c2VkIGZvciBmaWxlIG5hbWVzICovCistCWludCBwaWQsIGw7CistCWNoYXIgKmNwLCAqc2hlbGw7CistCWludCBwaXZlY1syXTsKKy0JZXh0ZXJuIGludCB3YWl0X3N0YXR1czsKKy0Jc3RydWN0IHN0YXQgc2J1ZjsKKy0KKy0JaWYgKHBpcGUocGl2ZWMpIDwgMCkgeworLQkJcGVycm9yKCJwaXBlIik7CistCQlyZXR1cm4gbmFtZTsKKy0JfQorLQlzbnByaW50ZihjbWRidWYsIHNpemVvZiBjbWRidWYsICJlY2hvICVzIiwgbmFtZSk7CistCWlmICgoc2hlbGwgPSB2YWx1ZSgiU0hFTEwiKSkgPT0gTlVMTCkKKy0JCXNoZWxsID0gU0hFTEw7CistCXBpZCA9IHN0YXJ0X2NvbW1hbmQoc2hlbGwsIDAsIC0xLCBwaXZlY1sxXSwgIi1jIiwgY21kYnVmLCBOVUxMKTsKKy0JaWYgKHBpZCA8IDApIHsKKy0JCWNsb3NlKHBpdmVjWzBdKTsKKy0JCWNsb3NlKHBpdmVjWzFdKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWNsb3NlKHBpdmVjWzFdKTsKKy1hZ2FpbjoKKy0JbCA9IHJlYWQocGl2ZWNbMF0sIHhuYW1lLCBzaXplb2YgeG5hbWUpOworLQlpZiAobCA8IDApIHsKKy0JCWlmIChlcnJubyA9PSBFSU5UUikKKy0JCQlnb3RvIGFnYWluOworLQkJcGVycm9yKCJyZWFkIik7CistCQljbG9zZShwaXZlY1swXSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQljbG9zZShwaXZlY1swXSk7CistCWlmICh3YWl0X2NoaWxkKHBpZCkgPCAwICYmIFdURVJNU0lHKHdhaXRfc3RhdHVzKSAhPSBTSUdQSVBFKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgxLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gZmFpbGVkLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gMCkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MiwKKy0JCQkJCSJcIiVzXCI6IE5vIG1hdGNoLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gc2l6ZW9mIHhuYW1lKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgzLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gYnVmZmVyIG92ZXJmbG93LlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JeG5hbWVbbF0gPSAwOworLQlmb3IgKGNwID0gJnhuYW1lW2wtMV07ICpjcCA9PSAnXG4nICYmIGNwID4geG5hbWU7IGNwLS0pCistCQk7CistCWNwWzFdID0gJ1wwJzsKKy0JaWYgKHN0cmNocih4bmFtZSwgJyAnKSAmJiBzdGF0KHhuYW1lLCAmc2J1ZikgPCAwKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDg0LAorLQkJCQkiXCIlc1wiOiBBbWJpZ3VvdXMuXG4iKSwgbmFtZSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQlyZXR1cm4gc2F2ZXN0cih4bmFtZSk7CistI2VuZGlmCS8qICFIQVZFX1dPUkRFWFAgKi8KKyB9CisgCisgLyoKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1Y2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDczZmVmYTBjMWFjNzAwNDNlYzg0ZjJkOGI4ZjlmNjgzMjEzZjE2OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGbG9yaWFuIFdlaW1lciA8ZndlaW1lckByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAxMzoxMTozMiArMDEwMAorU3ViamVjdDogW1BBVENIIDQvNF0gZ2xvYm5hbWU6IEludm9rZSB3b3JkZXhwIHdpdGggV1JERV9OT0NNRCAoQ1ZFLTIwMDQtMjc3MSkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCAxNTI5MjM2Li43NzRhMjA0IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDk3LDcgKzQ5Nyw3IEBAIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgCXNpZ2VtcHR5c2V0KCZuc2V0KTsKKyAJc2lnYWRkc2V0KCZuc2V0LCBTSUdDSExEKTsKKyAJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbnNldCwgTlVMTCk7CistCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgMCk7CisrCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgV1JERV9OT0NNRCk7CisgCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbnNldCwgTlVMTCk7CisgCXN3aXRjaCAoaSkgeworIAljYXNlIDA6CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNS11c3Itc2Jpbi1zZW5kbWFpbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU5OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRGVzY3JpcHRpb246IFNlbmRtYWlsIGlzIGF0IC91c3Ivc2Jpbi9zZW5kbWFpbAorIEFzIHBlciBEZWJpYW4gUG9saWN5IMKnMTEuNgorQXV0aG9yOiBSeWFuIEthdmFuYWdoIDxyYWtAZGViaWFuLm9yZz4KK09yaWdpbjogRGViaWFuCitGb3J3YXJkZWQ6IG5vCistLS0KK1RoaXMgcGF0Y2ggaGVhZGVyIGZvbGxvd3MgREVQLTM6IGh0dHA6Ly9kZXAuZGViaWFuLm5ldC9kZXBzL2RlcDMvCitJbmRleDogaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorCistLS0gaGVpcmxvb20tbWFpbHgtMTIuNS5vcmlnL01ha2VmaWxlCTIwMTEtMDQtMjYgMTc6MjM6MjIuMDAwMDAwMDAwIC0wNDAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQkyMDE1LTAxLTI3IDEzOjIwOjA0LjczMzU0MjgwMSAtMDUwMAorQEAgLTEzLDcgKzEzLDcgQEAKKyAKKyBNQUlMUkMJCT0gJChTWVNDT05GRElSKS9uYWlsLnJjCisgTUFJTFNQT09MCT0gL3Zhci9tYWlsCistU0VORE1BSUwJPSAvdXNyL2xpYi9zZW5kbWFpbAorK1NFTkRNQUlMCT0gL3Vzci9zYmluL3NlbmRtYWlsCisgCisgREVTVERJUgkJPQorIAorSW5kZXg6IGhlaXJsb29tLW1haWx4LTEyLjUvbWFpbHguMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGhlaXJsb29tLW1haWx4LTEyLjUub3JpZy9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MTg6NDkuMDAwMDAwMDAwIC0wNTAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MjA6MzIuMzgyMzM2ODY3IC0wNTAwCitAQCAtNDkyMiw3ICs0OTIyLDcgQEAKKyB3aGljaCBqdXN0IGFjdHMgYXMgYSBwcm94eS4KKyAuUFAKKyBcZklNYWlseFxmUiBpbW1lZGlhdGVseSBjb250YWN0cyB0aGUgU01UUCBzZXJ2ZXIgKG9yCistLklSIFwlL3Vzci9saWIvc2VuZG1haWwgKQorKy5JUiBcJS91c3Ivc2Jpbi9zZW5kbWFpbCApCisgZXZlbiB3aGVuIG9wZXJhdGluZyBpbgorIC5JIGRpc2Nvbm5lY3RlZAorIG1vZGUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGZkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitrcmI1IHN1cHBvcnQgaXMgYXV0b2RldGVjdGVkIGZyb20gc3lzcm9vdCBtYWtpbmcgYnVpbGRzIHVuZGV0ZXJtaW5pc3RpYworZmVlbCBmcmVlIHRvIGltcHJvdmUgdGhpcyB0byBzdXBwb3J0IGV4cGxpY2l0bHkgZW5hYmxpbmcvZGlzYWJsaW5nIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBhL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNjoxMS4xNzc3OTIzMzQgKzAyMDAKKysrKyBiL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNzoyMC4wMjg3OTM5OTQgKzAyMDAKK0BAIC00MjQsMzYgKzQyNCw2IEBACisgfQorICEKKyAKKy08JHRtcDIuYyBsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3MnIFwKKy0JCScjZGVmaW5lIFVTRV9HU1NBUEknICctbGdzcycgfHwKKy0JPCR0bXAyLmMgbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzYXBpX2tyYjUnIFwKKy0JCQknI2RlZmluZSBVU0VfR1NTQVBJJyAnLWxnc3NhcGlfa3JiNScgfHwKKy0JCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaV9rcmI1LCBvbGQtc3R5bGUnIFwKKy0JCQkJJyNkZWZpbmUgVVNFX0dTU0FQSQorLSNkZWZpbmUgR1NTQVBJX09MRF9TVFlMRScgJy1sZ3NzYXBpX2tyYjUnIDw8XCEgfHwgXAorLQkJCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaScgXAorLQkJCQknI2RlZmluZSBVU0VfR1NTQVBJCistI2RlZmluZQlHU1NBUElfUkVHX0lOQ0xVREUnICctbGdzc2FwaScgPDxcJQorLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+CistI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgorLQorLWludCBtYWluKHZvaWQpCisteworLQlnc3NfaW1wb3J0X25hbWUoMCwgMCwgZ3NzX250X3NlcnZpY2VfbmFtZSwgMCk7CistCWdzc19pbml0X3NlY19jb250ZXh0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApOworLQlyZXR1cm4gMDsKKy19CistIQorLSNpbmNsdWRlIDxnc3NhcGkuaD4KKy0KKy1pbnQgbWFpbih2b2lkKQorLXsKKy0JZ3NzX2ltcG9ydF9uYW1lKDAsIDAsIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLCAwKTsKKy0JZ3NzX2luaXRfc2VjX2NvbnRleHQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7CistCXJldHVybiAwOworLX0KKy0lCistCisgY2F0ID4kdG1wMi5jIDw8XCEKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2lmZGVmIEhBVkVfTkxfTEFOR0lORk8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTkwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAibWFpbHggaXMgdGhlIHRyYWRpdGlvbmFsIGNvbW1hbmQtbGluZS1tb2RlIG1haWwgdXNlciBhZ2VudCIKKworREVTQ1JJUFRJT04gPSAiTWFpbHggaXMgZGVyaXZlZCBmcm9tIEJlcmtlbGV5IE1haWwgYW5kIGlzIGludGVuZGVkIHByb3ZpZGUgdGhlIFwKK2Z1bmN0aW9uYWxpdHkgb2YgdGhlIFBPU0lYIG1haWx4IGNvbW1hbmQgd2l0aCBhZGRpdGlvbmFsIHN1cHBvcnQgXAorZm9yIE1JTUUsIElNQVAsIFBPUDMsIFNNVFAsIGFuZCBTL01JTUUuIgorCitIT01FUEFHRSA9ICJodHRwOi8vaGVpcmxvb20uc291cmNlZm9yZ2UubmV0L21haWx4Lmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEICYgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjAyYTBhNjI5MTBjZjk0ZjdhZjhhMzQzNmEyYTJkZCIKKworREVQRU5EUyA9ICJvcGVuc3NsIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUub3JpZy50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjlhNjAzM2VmMTQxMjgyNGQwMmViOWQ5MjEzY2IxZjIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwMTViYTQyMDkxMzU4NjdmMzdhMDI0NWQyMjIzNWEzOTJiOGJiZWQ5NTY5MTMyODZiODg3YzJlMmE5YTQyMWFkIgorCitTID0gIiR7V09SS0RJUn0vaGVpcmxvb20tbWFpbHgtMTIuNSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EX0JTRF9TT1VSQ0UgLURERUJJQU4gLUkke1N9L0VYVCIKKworIyAiU1RSSVA9dHJ1ZSIgbWVhbnMgdGhhdCAndHJ1ZScgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gJ3N0cmlwJyBmaWxlcyB3aGljaCB3aWxsIGFjaGlldmUgdGhlIGVmZmVjdCBvZiBub3Qgc3RyaXBwaW5nIHRoZW0KKyMgbWFpbHgncyBNYWtlZmlsZSBkb2Vzbid0IGFsbG93IGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGF2b2lkIHN0cmlwcGluZworRVhUUkFfT0VNQUtFID0gIlNFTkRNQUlMPSR7c2JpbmRpcn0vc2VuZG1haWwgSVB2Nj0tREhBVkVfSVB2Nl9GVU5DUyBQUkVGSVg9L3VzciBVQ0JJTlNUQUxMPS91c3IvYmluL2luc3RhbGwgU1RSSVA9dHJ1ZSIKKworIyBUaGUgbWFrZWNvbmZpZyBjYW4ndCBydW4gcGFyYWxsZWxseSwgb3RoZXJ3aXNlIHRoZSBjaGVja2luZyByZXN1bHRzCisjIG1pZ2h0IGJlIGluY29ycmVjdCBhbmQgbGVhZCB0byBlcnJvcnM6CisjIGZpby5jOjU2OjE3OiBmYXRhbCBlcnJvcjogc3NsLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyMgI2luY2x1ZGUgPHNzbC5oPgorUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjAyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjkwYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wMi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkxpbnV4IG1hbi1wYWdlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCBtYW4tcGFnZXMgcHJvamVjdCBkb2N1bWVudHMgdGhlIExpbnV4IGtlcm5lbCBhbmQgQyBsaWJyYXJ5IGludGVyZmFjZXMgdGhhdCBhcmUgZW1wbG95ZWQgYnkgdXNlciBwcm9ncmFtcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvZG9jcy9tYW4tcGFnZXMiCitMSUNFTlNFID0gIkdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT04ZjJhM2Q0MzA1N2Q0NThlNTA2NjcxNDk4MDU2N2E2MCIKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9kb2NzLyR7QlBOfS9BcmNoaXZlLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzZGYzMjc5Nzk4YTMzNDViYjJjNzA5NTg0YzgzNjM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQyMzI0ZjllZDQ3Yzg5YTQzY2IzN2I2YmIwZDVmYmNhZDQ0ODM4ZWVlNDVjZDM5NGUxODFjOThkMDM4YzQ5ZmYiCisKK1JERVBFTkRTXyR7UE59ID0gIm1hbiIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKKyMgT25seSBkZWxpdmVyZXMgbWFuLXBhZ2VzIHNvIEZJTEVTXyR7UE59IGdldHMgZXZlcnl0aGluZworRklMRVNfJHtQTn0tZG9jID0gIiIKK0ZJTEVTXyR7UE59ID0gIiR7bWFuZGlyfS8qIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwYXNzd2QuNV0gPSAiJHttYW5kaXJ9L21hbjUvcGFzc3dkLjUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0c3BuYW0uM10gPSAiJHttYW5kaXJ9L21hbjMvZ2V0c3BuYW0uMyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL2NvbmZpZ3VyZV9zZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9jb25maWd1cmVfc2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWU2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9jb25maWd1cmVfc2VkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK21hbjogcmVwbGFjZSAnLCcgd2l0aCAnIycKKworU29tZXRpbWVzLCB0aGUgcGFyYW1ldGVycyBvZiBDQy9CVUlMRF9DQyBjb250YWlucyB0aGUgJywnLCB3aGljaAorY2F1c2UgdGhlIHNlZCBjb21tYW5kIGZhaWxlZCwgc28gcmVwbGFjZSB0aGUgJywnIHdpdGggJyMnCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDlmNjJjZjkuLjlhNTY1YWUgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTEzMjEsOSArMTMyMSw5IEBAIGRvCisgICBlY2hvICJDcmVhdGluZyAkaW5maWxlIGZyb20gJGluZmlsZS5pbiIKKyAgIHNlZCAtZSAnCisgcyxAdmVyc2lvbkAsJHZlcnNpb24sCistcyxAQ0NALCRDQywKKytzI0BDQ0AjJENDIworIHMsQEVYRUVYVEAsJEVYRUVYVCwKKy1zLEBCVUlMRF9DQ0AsJEJVSUxEX0NDLAorK3MjQEJVSUxEX0NDQCMkQlVJTERfQ0MjCisgcyxASU5TVEFMTEAsJElOU1RBTEwsCisgcyxAREVGU0AsJERFRlMsCisgcyxATElCU0AsJExJQlMsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjgzNGJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdSAtciBtYW4tMS41Zy5vbGQvY29uZmlndXJlIG1hbi0xLjVnL2NvbmZpZ3VyZQorLS0tIG1hbi0xLjVnLm9sZC9jb25maWd1cmUJV2VkIEFwciAgNyAwNDoxNjowNSAxOTk5CisrKysgbWFuLTEuNWcvY29uZmlndXJlCU1vbiBNYXkgMTUgMTU6MjI6NDQgMjAwMAorQEAgLTc5MSw3ICs3OTEsNyBAQAorICAgICByZWFkIG1vZGUKKyAgICAgaWYgdGVzdCAiJG1vZGUiICE9ICIiOyB0aGVuIG1hbl9tb2RlPSRtb2RlOyBmaQorICAgZmkKKy0gIG1hbl9pbnN0YWxsX2ZsYWdzPSItbSAkbWFuX21vZGUgLW8gJG1hbl91c2VyIC1nICRtYW5fZ3JvdXAiCisrICBtYW5faW5zdGFsbF9mbGFncz0iIgorIGZpCisgCisgIyBXaGF0IHNlY3Rpb25zIGRvIHdlIGFudGljaXBhdGU/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRiMTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBnZW5jYXQvZ2VubGliLmMJMjAwNi0wOC0wMiAyMDoxMTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZW5jYXQvZ2VubGliLmMub2RlbgkyMDA4LTEyLTIxIDE5OjE4OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ3LDYgKzQ3LDcgQEAgdXAtdG8tZGF0ZS4gIE1hbnkgdGhhbmtzLgorIDAxLzE0LzkxICAgNCBuYXpndWwJT2ZmIGJ5IG9uZSBvbiBudW1iZXIgc3BlY2lmaWVkIGVudHJpZXMKKyAqLworIAorKyN1bmRlZiBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaWZkZWYgU1lTVgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMxZWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluLm1pa2UJRnJpIEFwciAgOSAxMzozNTo1NCAxOTk5CisrKysgbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluCUZyaSBBcHIgIDkgMTM6MzY6NDUgMTk5OQorQEAgLTEsOCArMSw4IEBACisgIyBvbmx5IGV4ZWN1dGVkIGZyb20gYSBzdWJkaXIKKyBNQU4xID0gbWFuIHdoYXRpcyBhcHJvcG9zCistTUFONSA9IG1hbi5jb25mCisrTUFONSA9IG1hbi5jb25maWcKKyBNQU44ID0gbWFrZXdoYXRpcworLUFMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZi41CisrQUxMID0gbWFuLjEgd2hhdGlzLjEgYXByb3Bvcy4xIG1hbi5jb25maWcuNQorIE1BWUJFOCA9IG1ha2V3aGF0aXMKKyAKKyAuU1VGRklYRVM6IC5tYW4gLjEgLjUgLjgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLWluaXRpYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1NmMwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaC5pbml0aWFsCVR1ZSBKdWwgIDMgMTU6Mzg6MzkgMjAwMQorKysrIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaAlUdWUgSnVsICAzIDE1OjM5OjM5IDIwMDEKK0BAIC04MSw4ICs4MSwxMCBAQAorIAljb250aW51ZTs7CisgICAgIC1zKSBzZXRzZWN0aW9ucz0xCisgCWNvbnRpbnVlOzsKKy0gICAgLXUpIGZpbmRhcmc9Ii1uZXdlciAvdmFyL2NhY2hlL21hbi93aGF0aXMiCistCXVwZGF0ZT0xCisrICAgIC11KSBpZiBbIC1lIC92YXIvY2FjaGUvbWFuL3doYXRpcyBdOyB0aGVuCisrCSAgZmluZGFyZz0iLW5ld2VyIC92YXIvY2FjaGUvbWFuL3doYXRpcyIKKysJICB1cGRhdGU9MQorKwlmaQorIAljb250aW51ZTs7CisgICAgIC12KSB2ZXJib3NlPTEKKyAJY29udGludWU7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItbmV3bGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTFkZjVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gc3JjL21hbi5jCTIwMDgtMTItMjEgMTk6MTc6MzEuMDAwMDAwMDAwICswMTAwCisrKysgc3JjL21hbi5jLm9kZW4JMjAwOC0xMi0yMSAxOToxNzozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTEsNyArMzkxLDcgQEAgYWdhaW46CisgCSAgYmVnKys7CisgCisgICAgICBlbmQgPSBiZWc7CistICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcpCisrICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcgJiYgKGVuZC1idWYpPEJVRlNJWkUpCisgCSAgZW5kKys7CQkvKiBub3RlIHRoYXQgYnVmIGlzIE5VTC10ZXJtaW5hdGVkICovCisgICAgICAqZW5kID0gJ1wwJzsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQyODgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFuLmMub3ZlcmZsb3cJTW9uIEp1biAyNSAwMDowMTo0NSAyMDAxCisrKysgbWFuLTEuNWkyL3NyYy9tYW4uYwlNb24gSnVuIDI1IDAwOjAxOjQ1IDIwMDEKK0BAIC0zODEsNiArMzgxLDkgQEAKKyAJICBzdHJjYXQobmFtZSwgIi8iKTsKKyAJICBzdHJjYXQobmFtZSwgYmVnKTsKKyAgICAgIH0KKysgICAgIC8qIElmIHRoaXMgaXMgdG9vIGxvbmcsIGJhZCB0aGluZ3MgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLiAqCisrICAgICAgKiB3ZSBzaG91bGQgcXVpdCBJTU1FRElBVEVMWS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgIGlmKHN0cmxlbihuYW1lKT5zaXplb2YodWx0bmFtZSkpIF9leGl0KDEpOworIAorICAgICAgZ290byBhZ2FpbjsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1pMThuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotaTE4bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWUwOWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotaTE4bi5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9tc2dzL2luc3Quc2guaTE4bglXZWQgQXByIDI1IDEwOjQwOjUwIDIwMDEKKysrKyBtYW4tMS41ai9tc2dzL2luc3Quc2gJV2VkIEFwciAyNSAxMDo0MToxNyAyMDAxCitAQCAtMjcsOCArMjcsNyBAQAorIGZvciBqIGluICRNOyBkbworICAgaWYgWyAtZiAkaiBdOyB0aGVuCisgICAgIGk9YGVjaG8gJGogfCBzZWQgLWUgJ3MvbWVzcy4vLzsgcy8uY2F0Ly8nYAorLSAgICBkZXN0PWBlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorLSAgICBkZXN0PSR7UFJFRklYfSRkZXN0CisrICAgIGRlc3Q9JHtQUkVGSVh9L2BlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorICAgICBlY2hvICJta2RpciAtcCBgZGlybmFtZSAkZGVzdGAiCisgICAgIG1rZGlyIC1wIGBkaXJuYW1lICRkZXN0YDsKKyAgICAgZWNobyAiaW5zdGFsbCAtYyAtbSA2NDQgJGogJGRlc3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotbm9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTFkZGRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotbm9jYWNoZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4ubm9jYWNoZQlUaHUgTm92IDIyIDE1OjA3OjEyIDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4JVGh1IE5vdiAyMiAxNTowNzoxMiAyMDAxCitAQCAtODEsNiArODEsOSBAQAorICMgCisgI05PQ0FDSEUKKyAjCisrIyBOT0NBQ0hFIGtlZXBzIG1hbiBmcm9tIGNyZWF0aW5nIGNhY2hlIHBhZ2VzCisrTk9DQUNIRQorKyMKKyAjIFVzZWZ1bCBwYXRocyAtIG5vdGUgdGhhdCBDT0wgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIHdoZW4KKyAjIE5ST0ZGIGlzIGRlZmluZWQgYXMgImdyb2ZmIC1UYXNjaWkiIG9yICJncm9mZiAtVGxhdGluMSI7CisgIyBub3Qgb25seSBpcyBpdCBzdXBlcmZsdW91cywgYnV0IGl0IGFjdHVhbGx5IGRhbWFnZXMgdGhlIG91dHB1dC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLXV0ZjgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai11dGY4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDNlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai11dGY4LnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL2NvbmZpZ3VyZS51dGY4CVRodSBOb3YgMjIgMTU6MDI6MzUgMjAwMQorKysrIG1hbi0xLjVqL2NvbmZpZ3VyZQlUaHUgTm92IDIyIDE1OjAzOjE1IDIwMDEKK0BAIC00MDgsOSArNDA4LDkgQEAKKyAgIEZnYXdrPS9iaW4vZ2F3aworICAgRmF3az0vYmluL2dhd2sKKyAgIEZtYXdrPW1pc3NpbmcKKy0gIHRyb2ZmPSIiCistICBucm9mZj0iIgorLSAgam5yb2ZmPSIiCisrICB0cm9mZj0vdXNyL2Jpbi90cm9mZgorKyAgbnJvZmY9L3Vzci9iaW4vbnJvZmYKKysgIGpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgZXFuPSIiCisgICBuZXFuPSIiCisgICBqbmVxbj0iIgorQEAgLTQ1Myw2ICs0NTMsOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZucm9mZj0vdXNyL2Jpbi9ucm9mZgorKyAgRmpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgRmdlcW49L3Vzci9iaW4vZ2VxbgorICAgRmd0Ymw9L3Vzci9iaW4vZ3RibAorICAgRmNvbD0vdXNyL2Jpbi9jb2wKK0BAIC00ODUsMjUgKzQ4NywyNSBAQAorICAgdGhlbgorICAgICBpZiB0ZXN0ICRGbnJvZmYgPSAibWlzc2luZyIKKyAgICAgdGhlbgorLSAgICAgIG5yb2ZmPSJucm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSJucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZWxzZQorLSAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UbGF0aW4xIC1tYW5kb2MiCisrICAgICAgbnJvZmY9IiRGbnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGZpCisgICAgIHRyb2ZmPSJ0cm9mZiAtbWFuZG9jIgorICAgICBlY2hvICJXYXJuaW5nOiBjb3VsZCBub3QgZmluZCBncm9mZiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAkRm5yb2ZmID0gIm1pc3NpbmciCisgICAgIHRoZW4KKy0gICAgICBucm9mZj0iJEZncm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSIkRmdyb2ZmIC1UdXRmOCAtbWFuZG9jIgorICAgICBlbHNlCistICAgICAgbnJvZmY9IiRGbnJvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0iJEZucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZmkKKyAgICAgdHJvZmY9IiRGZ3JvZmYgLVRwcyAtbWFuZG9jIgorLSAgICBqbnJvZmY9IiRGZ3JvZmYgLVRuaXBwb24gLW1hbmRvY2oiCisrICAgIGpucm9mZj0iJEZqbnJvZmYgLVR1dGY4IC1tYW5kb2NqIgorICAgZmkKKyAgIGVxbj0iJEZnZXFuIC1UcHMiCistICBuZXFuPSIkRmdlcW4gLVRsYXRpbjEiCistICBqbmVxbj0iJEZnZXFuIC1UbmlwcG9uIgorKyAgbmVxbj0iJEZnZXFuIC1UdXRmOCIKKysgIGpuZXFuPSIkRmdlcW4gLVR1dGY4IgorICAgdGJsPSIkRmd0YmwiCisgICBjb2w9IiRGY29sIgorICAgdmdyaW5kPSIkRnZncmluZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstY29uZnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3NDZjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGNvbmZpZ3VyZQkyMDA2LTA1LTAxIDE5OjU2OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIGNvbmZpZ3VyZS5vZGVuCTIwMDgtMTItMjEgMTk6MTY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTk4LDcgKzE5OCw3IEBACisgICAgIGNvbmZkaXI9IiR7Y29uZnByZWZpeH0vc2hhcmUvbWlzYyIKKyAgIGZpCisgZmkKKy1jb25mZmlsZW5hbWU9Im1hbi5jb25mIgorK2NvbmZmaWxlbmFtZT0ibWFuLmNvbmZpZyIKKyAKKyBpZiB0ZXN0ICIkUkFORE9NIiA9ICIkUkFORE9NIjsgdGhlbgorICAgIyBQbGFpbiBvbGQgQm91cm5lIHNoZWxsLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1ub25hc2NpaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYyZDliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gLi9zcmMvYXByb3Bvcy5zaC5ub25hc2NpaQkyMDAxLTExLTIzIDAwOjMwOjQyLjAwMDAwMDAwMCArMDEwMAorKysrIC4vc3JjL2Fwcm9wb3Muc2gJMjAwMi0wOC0xMyAxNTo0NDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw5ICsxOCw5IEBACisgCisgIyBXaGVuIG1hbiBwYWdlcyBpbiB5b3VyIGZhdm9yaXRlIGxvY2FsZSBsb29rIHRvIGdyZXAgbGlrZSBiaW5hcnkgZmlsZXMKKyAjIChhbmQgeW91IHVzZSBHTlUgZ3JlcCkgeW91IG1heSB3YW50IHRvIGFkZCB0aGUgJ2EnIG9wdGlvbiB0byAqZ3JlcG9wdDEuCistYXByb3Bvc2dyZXBvcHQxPSdpJworK2Fwcm9wb3NncmVwb3B0MT0naWEnCisgYXByb3Bvc2dyZXBvcHQyPScnCistd2hhdGlzZ3JlcG9wdDE9J2l3JworK3doYXRpc2dyZXBvcHQxPSdpd2EnCisgd2hhdGlzZ3JlcG9wdDI9J14nCisgZ3JlcG9wdDE9JCVhcHJvcG9zX29yX3doYXRpcyVncmVwb3B0MQorIGdyZXBvcHQyPSQlYXByb3Bvc19vcl93aGF0aXMlZ3JlcG9wdDIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstc29maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiOTI1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL3NyYy9tYW4uYy5zb2ZpeAlUaHUgTm92IDIyIDE0OjUxOjQ0IDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmMJVGh1IE5vdiAyMiAxNDo1Mjo0NCAyMDAxCitAQCAtMzAwLDcgKzMwMCw3IEBACisgCisgICAgICBpZiAoc3RybGVuKG5hbWUwKSA+PSBzaXplb2YodWx0bmFtZSkpCisgCSAgICAgcmV0dXJuIG5hbWUwOworLSAgICAgc3RyY3B5KHVsdG5hbWUsIG5hbWUwKTsKKysgICAgIHN0cm5jcHkodWx0bmFtZSwgbmFtZTAsIEJVRlNJWkUtMzIpOworICAgICAgbmFtZSA9IHVsdG5hbWU7CisgCisgYWdhaW46CitAQCAtMzMyLDcgKzMzMiw3IEBACisgCSAgICogLnNvIGZpbGVzIC0gd2UgY291bGQgZ2xvYiBmb3IgYWxsIHBvc3NpYmxlIGV4dGVuc2lvbnMsCisgCSAgICogZm9yIG5vdzogb25seSB0cnkgLmd6CisgCSAgICovCistCSAgZWxzZSBpZiAoZnAgPT0gTlVMTCAmJiBnZXRfZXhwYW5kZXIoIi5neiIpICYmCisrCSAgaWYgKGZwID09IE5VTEwgJiYgZ2V0X2V4cGFuZGVyKCIuZ3oiKSAmJgorIAkJICAgc3RybGVuKG5hbWUpK3N0cmxlbigiLmd6IikgPCBCVUZTSVpFKSB7CisgCSAgICAgICBzdHJjYXQobmFtZSwgIi5neiIpOworIAkgICAgICAgZnAgPSBmb3BlbiAobmFtZSwgInIiKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEyOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmFkCTIwMDMtMTItMTEgMTk6MTc6MTAuMDAwMDAwMDAwICswMTAwCisrKysgLi9jb25maWd1cmUJMjAwMy0xMi0xMSAxOToxNzoyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNiw3ICsyNiw3IEBACisgIyAoSW5kZWVkLCAtciBtYXkgY2F1c2UgdGhlIHRlcm1pbmFsIHRvIGdldCBpbnRvIGZ1bm55IHN0YXRlcy4KKyAjIFZlcnkgaW5jb252ZW5pZW50LiBGb3Igdmlld2luZyBwYWdlcyBpbiBzdHJhbmdlIGxvY2FsZXMsIHNldCBMQ18qLikKKyAjCistREVGQVVMVExFU1NPUFQ9Ii1pcyIKKytERUZBVUxUTEVTU09QVD0iLWlzciIKKyAjCisgIyBOb3RlIHRoYXQgbm90IGNyZWF0aW5nIGFueSBjYXQgZGlyZWN0b3JpZXMgKC92YXIvY2FjaGUvbWFuIG9yIHNvKQorICMgYW5kIG5vdCBtYWtpbmcgbWFuIHN1aWQgb3Igc2dpZCBpcyByZWNvbW1lbmRlZC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOTdmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmxlc3MJMjAwMy0xMi0xMSAxOToxODoxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyAuL2NvbmZpZ3VyZQkyMDAzLTEyLTExIDE5OjIwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTQwMSwxOCArNDAxLDEzIEBACisgCisgaWYgdGVzdCAiJGFucyIgPSAiZmFsc2UiCisgdGhlbgorLSAgZm9yIGkgaW4gbW9yZSBsZXNzIGNtcCBjYXQgYXdrIGdhd2sgbWF3aworLSAgZG8KKy0gICAgZXZhbCBGJGk9Im1pc3NpbmciCistICAgIGZvciBqIGluICRERUZQQVRICistICAgIGRvCistICAgICAgaWYgdGVzdCAtZiAkai8kaQorLSAgICAgIHRoZW4KKy0JZXZhbCBGJGk9JGovJGkKKy0JYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICBkb25lCisrICBGbW9yZT0vYmluL21vcmUKKysgIEZsZXNzPS91c3IvYmluL2xlc3MKKysgIEZjbXA9L3Vzci9iaW4vY21wCisrICBGY2F0PS9iaW4vY2F0CisrICBGZ2F3az0vYmluL2dhd2sKKysgIEZhd2s9L2Jpbi9nYXdrCisrICBGbWF3az1taXNzaW5nCisgICB0cm9mZj0iIgorICAgbnJvZmY9IiIKKyAgIGpucm9mZj0iIgorQEAgLTQ1Nyw2ICs0NTIsMTkgQEAKKyAgICAgICBmaQorICAgICBkb25lCisgICBkb25lCisrICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZnZXFuPS91c3IvYmluL2dlcW4KKysgIEZndGJsPS91c3IvYmluL2d0YmwKKysgIEZjb2w9L3Vzci9iaW4vY29sCisrICBGZ3JlZmVyPS91c3IvYmluL2dyZWZlcgorKyAgRmdwaWM9L3Vzci9iaW4vZ3BpYworKyAgRm1vcmU9L2Jpbi9tb3JlCisrICBGbGVzcz0vdXNyL2Jpbi9sZXNzCisrICBGY21wPS91c3IvYmluL2NtcAorKyAgRmNhdD0vYmluL2NhdAorKyAgRmdhd2s9L2Jpbi9nYXdrCisrCisrCisgICBmb3IgaSBpbiBlcW4gdGJsIHJlZmVyIHBpYworICAgZG8KKyAgICAgaWYgdGVzdCBgZXZhbCBlY2hvIFxcJEZnJGlgID0gIm1pc3NpbmciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODVmZjFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41bTIvY29uZmlndXJlLmNvbG9yCTIwMDYtMDktMTYgMTg6Mjc6MzcuMDAwMDAwMDAwICswMjAwCisrKysgbWFuLTEuNW0yL2NvbmZpZ3VyZQkyMDA2LTA5LTE2IDE4OjI4OjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTUzOSw2ICs1MzksOCBAQAorICAgICB0cm9mZj0iJHRyb2ZmIC1jIgorICAgICBucm9mZj0iJG5yb2ZmIC1jIgorICAgICBqbnJvZmY9IiRqbnJvZmYgLWMiCisrZWxzZQorKyAgICB0cm9mZj0iJHRyb2ZmIC1jIgorIGZpCisgCisgaWYgWyB4JGRlZmF1bHQgPSB4IF07IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXNpZ3BpcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNzhlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVtMi9zcmMvdXRpbC5jX3NpZ3BpcGUJMjAwNi0xMi0wOSAxMzo0MzoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBtYW4tMS41bTIvc3JjL3V0aWwuYwkyMDA2LTEyLTA5IDEzOjUzOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTExNiwxMSArMTE2LDE0IEBACisgc3RhdGljIGludAorIHN5c3RlbTEgKGNvbnN0IGNoYXIgKmNvbW1hbmQpIHsKKyAJdm9pZCAoKnByZXZfaGFuZGxlcikoaW50KSA9IHNpZ25hbCAoU0lHSU5ULGNhdGNoX2ludCk7CisrCXNpZ25hbCAoU0lHUElQRSxTSUdfSUdOKTsKKyAJaW50IHJldCA9IHN5c3RlbShjb21tYW5kKTsKKyAKKyAJLyogY2hpbGQgdGVybWluYXRlZCB3aXRoIHNpZ25hbD8gKi8KKyAJaWYgKFdJRlNJR05BTEVEKHJldCkgJiYKKy0JICAgIChXVEVSTVNJRyhyZXQpID09IFNJR0lOVCB8fCBXVEVSTVNJRyhyZXQpID09IFNJR1FVSVQpKQorKwkgICAgKFdURVJNU0lHKHJldCkgPT0gU0lHSU5UIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdQSVBFIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdRVUlUKSkKKyAJCWV4aXQoMSk7CisgCisgCS8qIG9yIHdlIGNhdWdodCBhbiBpbnRlcnJ1cHQ/ICovCitAQCAtMTI4LDYgKzEzMSw3IEBACisgCQlleGl0KDEpOworIAorIAlzaWduYWwoU0lHSU5ULHByZXZfaGFuZGxlcik7CisrCXNpZ25hbChTSUdQSVBFLFNJR19ERkwpOworIAlyZXR1cm4gcmV0OworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItdHZfZmhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjZkNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXR2X2Zocy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4vTWFrZWZpbGUuaW4JMjAwOC0xMi0yMSAxOToxOTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBtYW4vTWFrZWZpbGUuaW4ub2RlbgkyMDA4LTEyLTIxIDE5OjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDYgKzM0LDE1IEBACisgCWZvciBpIGluICQoTUFOOCk7IFwKKyAJCWRvIGlmIHRlc3QgLWYgJCRpLjg7IHRoZW4gJChJTlNUQUxMKSAkJGkuOCAkKG1hbmRpcikvbWFuOC8kJGkuQG1hbjhleHRAOyBmaTsgZG9uZQorIAorK2luc3RhbGwtbDEwbjogJChBTEwpCisrCW1rZGlyIC1wICQobWFuZGlyKS8kKFNMQU5HKS9tYW4xICQobWFuZGlyKS8kKFNMQU5HKS9tYW41ICQobWFuZGlyKS8kKFNMQU5HKS9tYW44CisrCWZvciBpIGluICQoTUFOMSk7IFwKKysJCWRvICQoSU5TVEFMTCkgJCRpLjEgJChtYW5kaXIpLyQoU0xBTkcpL21hbjEvJCRpLkBtYW4xZXh0QDsgZG9uZQorKwlmb3IgaSBpbiAkKE1BTjUpOyBcCisrCQlkbyAkKElOU1RBTEwpICQkaS41ICQobWFuZGlyKS8kKFNMQU5HKS9tYW41LyQkaS5AbWFuNWV4dEA7IGRvbmUKKysJZm9yIGkgaW4gJChNQU44KTsgXAorKwkJZG8gaWYgdGVzdCAtZiAkJGkuODsgdGhlbiAkKElOU1RBTEwpICQkaS44ICQobWFuZGlyKS8kKFNMQU5HKS9tYW44LyQkaS5AbWFuOGV4dEA7IGZpOyBkb25lCisrCisgY2xlYW46CisgCXJtIC1mIGNvcmUgKi5pbiAqLkBtYW4xZXh0QCAqLkBtYW41ZXh0QCAqLkBtYW44ZXh0QCAqfgorIAorQEAgLTQ5LDcgKzU4LDcgQEAKKyAJQGZvciBpIGluIEBsYW5ndWFnZXNAOyBkbyBpZiB0ZXN0IC1kICQkaTsgdGhlbiBlY2hvOyBcCisgCQllY2hvICI9PT09IEluc3RhbGxpbmcgdGhlIGBjYXQgJCRpLnR4dGAgbWFuIHBhZ2VzLiA9PT09IjsgXAorIAkJY2QgJCRpOyBTTEFORz0vJCRpOyBpZiB0ZXN0ICQkU0xBTkcgPSAvZW47IHRoZW4gU0xBTkc9IDsgZmk7IFwKKy0JCWV4cG9ydCBTTEFORzsgbWFrZSAtZiAuLi9NYWtlZmlsZSBpbnN0YWxsOyBjZCAuLjsgXAorKwkJZXhwb3J0IFNMQU5HOyBtYWtlIC1mIC4uL01ha2VmaWxlIGluc3RhbGwtbDEwbjsgY2QgLi47IFwKKyAJCWVsc2UgZWNobyAiPT09PSBObyAkJGkgbWFuIHBhZ2VzIGZvdW5kLiA9PT09IjsgZmk7IGRvbmUKKyAKKyBjbGVhbnN1YmRpcnM6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLWkxOG5fd2hhdGlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMjEzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL2Fwcm9wb3Muc2ggbWFuLTEuNmUvc3JjL2Fwcm9wb3Muc2gKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9hcHJvcG9zLnNoCTIwMDctMDUtMTggMTM6NDk6MzEuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL2Fwcm9wb3Muc2gJMjAwNy0wNS0xOCAxNDoyNDozMy4wMDAwMDAwMDAgLTAzMDAKK0BAIC02MCwxNiArNjAsNTYgQEAKKyAgICAgZXNhYworIGRvbmUKKyAKKysjIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGxvb2sgZm9yCisrTEFOR19MSVNUPWBlY2hvICRMQU5HVUFHRTokTENfQUxMOiRMQ19NRVNTQUdFUzokTEFORyB8IHRyICc6JyAnICdgCisrRElSX0xJU1Q9IiIKKytmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAkbWFucGF0aCAvdXNyL2xpYgorK2RvCisrICAgIGZvciBsIGluICRMQU5HX0xJU1QKKysgICAgZG8KKysgICAgICAgIGlmIFsgLWQgJGQvJGwgXQorKyAgICAgICAgdGhlbgorKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdAorKyAgICAgICAgICAgIGlmICEgZWNobyAiJERJUl9MSVNUIiB8IGdyZXAgIiAkZC8kbFxiIiA+IC9kZXYvbnVsbAorKyAgICAgICAgICAgIHRoZW4KKysgICAgICAgICAgICAgICAgRElSX0xJU1Q9IiRESVJfTElTVCAkZC8kbCIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgZG9uZQorKyAgICBESVJfTElTVD0iJERJUl9MSVNUICRkIgorKyAgICAjIGNoZWNrIHRoYXQgdGhlIHBhdGggaXMgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QKKysgICAgaWYgISBlY2hvICIkRElSX0xJU1QiIHwgZ3JlcCAiICRkXGIiID4gL2Rldi9udWxsCisrICAgIHRoZW4KKysgICAgICAgIERJUl9MSVNUPSIkRElSX0xJU1QgJGQvJGwiCisrICAgIGZpCisrZG9uZQorKworIHdoaWxlIFsgIiQxIiAhPSAiIiBdCisgZG8KKyAgICAgZm91bmQ9MAorLSAgICBmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAkbWFucGF0aCAvdXNyL2xpYgorKyAgICAjIGluIG9yZGVyIG5vdCB0byBkaXNwbGF5IGxpbmVzIGluIG1vcmUgdGhhbiBvbmUgbGFuZ3VhZ2UgZm9yCisrICAgICMgYSBzYW1lIG1hbiBwYWdlOyB3ZSBjaGVjayB0aGF0IGEgZ2l2ZW4gbWFuIHBhZ2UgbmFtZQorKyAgICAjIGhhc24ndCBhbHJlYWR5IGJlZW4gZGlzcGxheWVkCisrICAgIEJBWj0iIgorKyAgICBmb3IgZCBpbiAkRElSX0xJU1QKKyAgICAgZG8KKyAgICAgICAgIGlmIFsgLWYgJGQvd2hhdGlzIF0KKyAgICAgICAgIHRoZW4KKy0gICAgICAgICAgICBpZiBncmVwIC0iJGdyZXBvcHQxIiAiJGdyZXBvcHQyIiIkMSIgJGQvd2hhdGlzCisrICAgICAgICAgICAgaWYgRk9PPWBncmVwIC0iJGdyZXBvcHQxIiAiJGdyZXBvcHQyIiIkMSIgJGQvd2hhdGlzYAorICAgICAgICAgICAgIHRoZW4KKy0gICAgICAgICAgICAgICAgZm91bmQ9MQorKyAgICAgICAgICAgICAgICAjIHRoZSBMQ19BTEw9QyBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgdGV4dCBpcworKyAgICAgICAgICAgICAgICAjIGluIGEgZGlmZmVyZW50IGVuY29kaW5nIHRoYW4gdGhlIGxvY2FsZQorKyAgICAgICAgICAgICAgICBCQVI9YGVjaG8gLWUgIiRGT08iIHwgTENfQUxMPUMgc2VkICdzLyAtIC4qJC8vJyB8IHRyICcgW10nICdfJyB8IHNvcnQgLXVgCisrICAgICAgICAgICAgICAgIGZvciBpIGluICRCQVIKKysgICAgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICAgICAgIGlmICEgZWNobyAiJEJBWiIgfCBncmVwICIkaSIgPiAvZGV2L251bGwKKysgICAgICAgICAgICAgICAgICAgIHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBCQVo9IiRCQVogJGkiCisrICAgICAgICAgICAgICAgICAgICAgICAgaT0iXmBlY2hvICRpIHwgc2VkICdzOl9cKzpcXFwoXFtfIFxdXFxcfFxcXFtcXFx8XFxcXVxcXClcXFwrOmcnYCIKKysgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICIkRk9PIiB8IGdyZXAgIiRpIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kPTEKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRvbmUKKyAjIFNvbWUgcGVvcGxlIGFyZSBzYXRpc2ZpZWQgd2l0aCBhIHNpbmdsZSBvY2N1cnJlbmNlCisgIyBCdXQgaXQgaXMgYmV0dGVyIHRvIGdpdmUgYWxsCisgIyAgICAgICAgICAgICAgIGJyZWFrCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21ha2V3aGF0aXMuc2ggbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTM6NDk6MzEuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gJMjAwNy0wNS0xOCAxMzo1MDowNy4wMDAwMDAwMDAgLTAzMDAKK0BAIC00MSwxMiArNDEsMzIgQEAKKyAKKyBwcm9ncmFtPWBiYXNlbmFtZSAkMGAKKyAKKysjIHRoaXMgYWxsb3dzIHRvIGRlZmluZSBsYW5ndWFnZSBzcGVjaWZpYyB2YWx1ZXMgZnJvIE5BTUUsIERFU0NSSVBUSU9OCisrIyBpZiBub3QgZGVmaW5lZCwgdXNpbmcgdGhvc2UgZGVmYXVsdCB2YWx1ZXMKKytpZiBbIC16ICIkTUFOX05BTUUiIF0KKyt0aGVuCisrCU1BTl9OQU1FPSLQmNCc0JV8Tk9NfEpNw4lOT3xOQVZOfM6fzp3On86czpF8Tk9NQlJFfE5JTUV8SVpFTkF8TklNSXxJTUV8XAorK07DiVZ8Tk9NRXzlkI3liY187J2066aEfE5BQU18TkFaV0F8TlVNRXzQmNCc0K98TUVOT3zQndCQ0JfQktCQfOWQjeensHzlkI3nqLEiCisrZmkKKytpZiBbIC16ICIkTUFOX0RFU0NSSVBUSU9OIiBdCisrdGhlbgorKwlNQU5fREVTQ1JJUFRJT049ItCe0J/QmNCh0JDQndCY0JV8REVTQ1JJUENJw5N8UE9QSVN8QkVTS1JJVkVMU0V8QkVTQ0hSRUlCVU5HfFwKKyvOoM6VzqHOmc6TzqHOkc6mzpd8REVTQ1JJUENJw5NOfEtJUkpFTERVU3xBWkFMUEVOQXxLVVZBVVN8T1BJU3xMRcONUsOBU3xERVNDUklaSU9ORXxcCisr6Kqs5piOfOyEpOuqhXxCRVNDSFJJSlZJTkd8REVTQ1JJw4fDg098REVTQ1JJRVJFfNCe0J/QmNChfOaPj+i/sCIKKytmaQorKyMgbWFrZSB0aGVtIGludG8gYXdrIHJlZ2V4cAorK01BTl9OQU1FPSJeKCR7TUFOX05BTUV9KSI7CisrTUFOX0RFU0NSSVBUSU9OPSJeKCR7TUFOX0RFU0NSSVBUSU9OfSkiOworKworICMgSW4gY2FzZSBib3RoIC91c3IvbWFuIGFuZCAvdXNyL3NoYXJlL21hbiBleGlzdCwgdGhlIGZvcm1lciBpcyBsb2NhbAorICMgYW5kIHNob3VsZCBiZSBmaXJzdC4KKyAjIEl0IGlzIGEgYnVnIHRvIGFkZCAvdmFyL2NhY2hlL21hbiB0byBERUZDQVRQQVRILgorIGRtPQorIGZvciBkIGluIC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisgZG8KKysgICAgaWYgWyAtbiAiJExBTkciIC1hIC1kICIkZC8kTEFORyIgXTsgdGhlbgorKwlpZiBbIHgkZG0gPSB4IF07IHRoZW4gZG09IiRkLyRMQU5HIjsgZWxzZSBkbT0kZG06IiRkLyRMQU5HIjsgZmkKKysgICAgZmkKKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkbSA9IHggXTsgdGhlbiBkbT0kZDsgZWxzZSBkbT0kZG06JGQ7IGZpCisgICAgIGZpCitAQCAtNTUsNiArNzUsOSBAQAorIGRjPQorIGZvciBkIGluIC92YXIvY2FjaGUvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4KKyBkbworKyAgICBpZiBbIC1uICIkTEFORyIgLWEgLWQgIiRkLyRMQU5HIiBdOyB0aGVuCisrCWlmIFsgeCRkYyA9IHggXTsgdGhlbiBkbT0iJGQvJExBTkciOyBlbHNlIGRtPSRkYzoiJGQvJExBTkciOyBmaQorKyAgICBmaQorICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRjID0geCBdOyB0aGVuIGRjPSRkOyBlbHNlIGRjPSRkYzokZDsgZmkKKyAgICAgZmkKK0BAIC0xOTQsNyArMjE3LDcgQEAKKyAJICAgIHNlY3Rpb249JGkKKyAJICAgIGN1cmRpcj0kbWFuZGlyLyR7cGFnZXN9JGkKKyAJICAgIGV4cG9ydCBzZWN0aW9uIHZlcmJvc2UgY3VyZGlyCistCSAgICBmaW5kICRtYW5kaXIvJHtwYWdlc30kaS8uIC1uYW1lICcqJyAkZmluZGFyZzAgJGZpbmRhcmcgLXByaW50IHwgJEFXSyAnCisrCSAgICBmaW5kICRtYW5kaXIvJHtwYWdlc30kaS8uIC1uYW1lICcqJyAkZmluZGFyZzAgJGZpbmRhcmcgLXByaW50IHwgTENfQUxMPUMgJEFXSyAtdiBNQU5fTkFNRT0iJE1BTl9OQU1FIiAtdiBNQU5fREVTQ1JJUFRJT049IiRNQU5fREVTQ1JJUFRJT04iICcKKyAKKyAJICAgIGZ1bmN0aW9uIHJlYWRsaW5lKCkgeworIAkgICAgICBpZiAodXNlX3pjYXQgfHwgdXNlX2J6Y2F0KSB7CitAQCAtMjYxLDEzICsyODQsNyBAQAorIAkJZ3N1YigvLlxiLywgIiIpOworIAkJaWYgKCgkMSB+IC9eXC5bU3NdW0hoXS8gJiYKKyAJCSAgKCQyIH4gL1tObl1bQWFdW01tXVtFZV0vIHx8CistCQkgICAkMiB+IC9eSk3JTk8vIHx8ICQyIH4gL15OQVZOLyB8fCAkMiB+IC9eTlVNRS8gfHwKKy0JCSAgICQyIH4gL15CRVpFSUNITlVORy8gfHwgJDIgfiAvXk5PTUJSRS8gfHwKKy0JCSAgICQyIH4gL15OSU1JLyB8fCAkMiB+IC9eTk9NLyB8fCAkMiB+IC9eSU1FLyB8fAorLQkJICAgJDIgfiAvXk5byUVdVi8gfHwgJDIgfiAvXk5BTUEvIHx8ICQyIH4gL17MvsGwLyB8fAorLQkJICAgJDIgfiAvXsy+vs4vIHx8ICQyIH4gL17AzLinLyB8fCAkMiB+IC9eTkFaV0EvIHx8CistCQkgICAkMiB+IC9e7uH69+Hu6eUvIHx8ICQyIH4gL17D+7PGLyB8fCAkMiB+IC9eple62S8gfHwKKy0JCSAgICQyIH4gL15OT01FLyB8fCAkMiB+IC9eTkFBTS8gfHwgJDIgfiAvXsjMxS8pKSB8fAorKwkJICAgJDIgfiBNQU5fTkFNRSApKSB8fAorIAkJICAocGFnZXMgPT0gImNhdCIgJiYgJDEgfiAvXk5BTUUvKSkgeworIAkJICAgIGlmICghaW5zaCkgeworIAkJICAgICAgaW5zaCA9IDE7CitAQCAtMjc4LDYgKzI5NSw3IEBACisgCQkgIGlmICgkMSB+IC9eXC5bU3NdW0hoWVNdLyB8fAorIAkJICAgIChwYWdlcyA9PSAiY2F0IiAmJgorIAkJICAgICgkMSB+IC9eU1t5WWVFXS8gfHwgJDEgfiAvXkRFU0NSSVBUSU9OLyB8fAorKwkJICAgICAkMSB+IE1BTl9ERVNDUklQVElPTiB8fAorIAkJICAgICAkMSB+IC9eQ09NTUFORC8gfHwgJDEgfiAvXk9WRVJWSUVXLyB8fAorIAkJICAgICAkMSB+IC9eU1RSVUNUVVJFUy8gfHwgJDEgfiAvXklOVFJPRFVDVElPTi8gfHwKKyAJCSAgICAgJDAgfiAvXlteIF0vKSkpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1tYW5kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDAwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1tYW5kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jb25mLmluCTIwMDUtMDgtMjAgMjA6MjY6MDYuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21hbi5jb25mLmluCTIwMDctMDUtMTggMTA6MzA6MjkuMDAwMDAwMDAwIC0wMzAwCitAQCAtMzYsMTEgKzM2LDEyIEBACisgIworICMgRXZlcnkgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgTUFOUEFUSCBpbmNsdWRlcyB0aGVzZSBmaWVsZHMKKyAjCistTUFOUEFUSAkvdXNyL21hbgorIE1BTlBBVEgJL3Vzci9zaGFyZS9tYW4KKytNQU5QQVRICS91c3IvWDExUjYvbWFuCisgTUFOUEFUSAkvdXNyL2xvY2FsL21hbgorIE1BTlBBVEgJL3Vzci9sb2NhbC9zaGFyZS9tYW4KKy1NQU5QQVRICS91c3IvWDExUjYvbWFuCisrTUFOUEFUSAkvdXNyL2tlcmJlcm9zL21hbgorK01BTlBBVEgJL3Vzci9tYW4KKyAjCisgIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBvbmUgb2YgdGhlc2UgYnkgZGVmYXVsdAorICMKK0BAIC02Nyw2ICs2OCw5IEBACisgTUFOUEFUSF9NQVAJL3Vzci9YMTFSNi9iaW4JCS91c3IvWDExUjYvbWFuCisgTUFOUEFUSF9NQVAJL3Vzci9iaW4vWDExCQkvdXNyL1gxMVI2L21hbgorIE1BTlBBVEhfTUFQCS91c3IvYmluL21oCQkvdXNyL3NoYXJlL21hbgorK01BTlBBVEhfTUFQCS91c3Iva2VyYmVyb3MvYmluCQkvdXNyL2tlcmJlcm9zL21hbgorK01BTlBBVEhfTUFQCS91c3Iva2VyYmVyb3Mvc2JpbgkJL3Vzci9rZXJiZXJvcy9tYW4KKysKKyAjCisgIyBOT0FVVE9QQVRIIGtlZXBzIG1hbiBmcm9tIGF1dG9tYXRpY2FsbHkgYWRkaW5nIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlCisgIyBtYW51YWwgcGFnZSBkaXJlY3RvcmllcyB0byB0aGUgcGF0aC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjk3NzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjZlLm9yaWcvY29uZmlndXJlCTIwMDYtMDUtMDEgMTQ6NTY6MTQuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvY29uZmlndXJlCTIwMDctMDUtMTggMTQ6MzU6NDMuMDAwMDAwMDAwIC0wMzAwCitAQCAtOTYwLDcgKzk2MCw3IEBACisgCisgIyBXaGF0IHNlY3Rpb25zIGRvIHdlIGFudGljaXBhdGU/CisgCistdG1wc2VjdGlvbnM9IjEgMXAgOCAyIDMgM3AgNCA1IDYgNyA5IDBwIHRjbCBuIGwgcCBvIgorK3RtcHNlY3Rpb25zPSIxIDFwIDggMiAzIDNwIDNwbSA0IDUgNiA3IDkgMHAgdGNsIG4gbCBwIG8iCisgCisgaWYgWyB4JGRlZmF1bHQgPSB4IF07IHRoZW4KKyAgIGVjaG8gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDFjYjBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFuLTEuNmYub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjQyOjM0LjAwMDAwMDAwMCAtMDgwMAorKysrIG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NDI6MzUuNjY3NDI4MzQ3IC0wODAwCitAQCAtMTI0LDcgKzEyNCw3IEBACisgCWNvbnRpbnVlOzsKKyAgICAgLXMpIHNldHNlY3Rpb25zPTEKKyAJY29udGludWU7OworLSAgICAtdSkgZmluZGFyZz0iLWN0aW1lIDAiCisrICAgIC11KSBmaW5kYXJnPSItbmV3ZXIgL3Zhci9jYWNoZS9tYW4vd2hhdGlzIgorIAl1cGRhdGU9MQorIAljb250aW51ZTs7CisgICAgIC12KSB2ZXJib3NlPTEKK0BAIC0xNjUsMTQgKzE2NSw3IEBACisgIyBmaXJzdCB0cnVuY2F0ZSBhbGwgdGhlIHdoYXRpcyBmaWxlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBuZXcsCisgIyB0aGVuIG9ubHkgdXBkYXRlIC0gd2UgbWlnaHQgdmlzaXQgdGhlIHNhbWUgZGlyZWN0b3J5IHR3aWNlCisgaWYgWyB4JHVwZGF0ZSA9IHggXTsgdGhlbgorLSAgIGZvciBwYWdlcyBpbiBtYW4gY2F0CistICAgZG8KKy0gICAgICBldmFsIHBhdGg9IlwkJHBhZ2VzInBhdGgKKy0gICAgICBmb3IgbWFuZGlyIGluICRwYXRoCistICAgICAgZG8KKy0JIGNwIC9kZXYvbnVsbCAkbWFuZGlyL3doYXRpcworLSAgICAgIGRvbmUKKy0gICBkb25lCisrICAgY3AgL2Rldi9udWxsIC92YXIvY2FjaGUvbWFuL3doYXRpcworIGZpCisgCisgZm9yIHBhZ2VzIGluIG1hbiBjYXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtc2VjdXJpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyYTg4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDA2LTA3LTE5IDAxOjU4OjA4LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTA6MTg6MzEuMDAwMDAwMDAwIC0wMzAwCitAQCAtNDUsNyArNDUsNyBAQAorICMgYW5kIHNob3VsZCBiZSBmaXJzdC4KKyAjIEl0IGlzIGEgYnVnIHRvIGFkZCAvdmFyL2NhY2hlL21hbiB0byBERUZDQVRQQVRILgorIGRtPQorLWZvciBkIGluIC91c3IvbWFuIC91c3Ivc2hhcmUvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisrZm9yIGQgaW4gL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4gL3Vzci9YMTFSNi9tYW4gL3Vzci9sb2NhbC9tYW4KKyBkbworICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRtID0geCBdOyB0aGVuIGRtPSRkOyBlbHNlIGRtPSRkbTokZDsgZmkKK0BAIC01Myw3ICs1Myw3IEBACisgZG9uZQorIERFRk1BTlBBVEg9JGRtCisgZGM9CistZm9yIGQgaW4gL3Vzci9tYW4vcHJlZm9ybWF0IC91c3IvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL3NoYXJlL21hbgorK2ZvciBkIGluIC92YXIvY2FjaGUvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4KKyBkbworICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRjID0geCBdOyB0aGVuIGRjPSRkOyBlbHNlIGRjPSRkYzokZDsgZmkKK0BAIC03NiwxMiArNzYsMTIgQEAKKyAjIFdlIHRyeSBoZXJlIHRvIGJlIGNhcmVmdWwgKGFuZCBhdm9pZCBwcmVjb25zdHJ1Y3RlZCBzeW1saW5rcykKKyAjIGluIGNhc2UgbWFrZXdoYXRpcyBpcyBydW4gYXMgcm9vdCwgYnkgY3JlYXRpbmcgYSBzdWJkaXJlY3Rvcnkgb2YgL3RtcC4KKyAKKy1UTVBGSUxFRElSPS90bXAvd2hhdGlzLnRtcC5kaXIuJCQKKy1ybSAtcmYgJFRNUEZJTEVESVIKKy1pZiAhIG1rZGlyIC1tIDA3MDAgJFRNUEZJTEVESVI7IHRoZW4KKy0gICAgZWNobyBDb3VsZCBub3QgY3JlYXRlICRUTVBGSUxFRElSCistICAgIGV4aXQgMTsKKytUTVBGSUxFRElSPWBta3RlbXAgLWQgL3RtcC9tYWtld2hhdGlzWFhYWFhYYAorK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorKyAgIGVjaG8gIiQwOiBDYW4ndCBjcmVhdGUgdGVtcCBmaWxlLCBleGl0aW5nLi4uIgorKyAgIGV4aXQgMQorIGZpCisrY2htb2QgMDcwMCAkVE1QRklMRURJUgorIFRNUEZJTEU9JFRNUEZJTEVESVIvdworIAorICMgbWFrZSBzdXJlIFRNUEZJTEVESVIgaXMgZGVsZXRlZCBpZiBwcm9ncmFtIGlzIGtpbGxlZCBvciB0ZXJtaW5hdGVzCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jIG1hbi0xLjZlL3NyYy9tYW4uYworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jCTIwMDYtMDUtMDEgMTc6MzQ6MjIuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21hbi5jCTIwMDctMDUtMTggMTA6MTE6MzMuMDAwMDAwMDAwIC0wMzAwCitAQCAtMTIzNCw3ICsxMjM0LDYgQEAKKyAjZW5kaWYKKyAKKyAKKy0jaWYgMAorICAgICAgeworIAkvKiBUaGVyZSBhcmUgbm8ga25vd24gY2FzZXMgb2YgYnVmZmVyIG92ZXJmbG93IGNhdXNlZCBieQorIAkgICBleGNlc3NpdmVseSBsb25nIGVudmlyb25tZW50IHZhcmlhYmxlcy4gSW4gY2FzZSB5b3UgZmluZCBvbmUsCitAQCAtMTI1Nyw3ICsxMjU2LDYgQEAKKyAJICAgTUFOX0lDT05WX1BBVEgsIE1BTl9JQ09OVl9PUFQsIE1BTl9JQ09OVl9JTlBVVF9DSEFSU0VULAorIAkgICBNQU5fSUNPTlZfT1VUUFVUX0NIQVJTRVQsIE5MU1BBVEgsIFBBVEggKi8KKyAgICAgIH0KKy0jZW5kaWYKKyAKKyAKKyAjaWZuZGVmIF9fRnJlZUJTRF9fIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS11c2VfaTE4bl92YXJzX2luX2Ffc3RkX3dheS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhmNzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL2NhdG9wZW4vY2F0b3Blbi5jIG1hbi0xLjZlL2NhdG9wZW4vY2F0b3Blbi5jCistLS0gbWFuLTEuNmUub3JpZy9jYXRvcGVuL2NhdG9wZW4uYwkyMDA1LTA4LTIwIDIwOjI2OjA2LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL2NhdG9wZW4vY2F0b3Blbi5jCTIwMDctMDUtMTggMTE6MzE6MDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtOSwyMiArOSw2MyBAQAorIGV4dGVybiBjaGFyICppbmRleCAoY29uc3QgY2hhciAqLCBpbnQpOyAgICAgICAgIC8qIG5vdCBhbHdheXMgaW4gPHN0cmluZy5oPiAqLworIGV4dGVybiBjaGFyICpteV9tYWxsb2MoaW50KTsJLyogaW4gdXRpbC5jICovCisgCisrLyogaWYgdGhlIHByb2dyYW0gaGFzIHNnaWQvc3VpZCBwcml2aWxlZ2VzIHRoZW4gZ2V0ZW52IGRvZXNuJ3QgcmV0dXJuCisrICogTkxTUEFUSDsgc28gd2Ugc2V0IGhlcmUgYSBnb29kIGRlZmF1bHQgdmFsdWUuCisrICovCisgI2lmbmRlZiBERUZBVUxUX05MU1BBVEgKKyAjIGlmIF9fR0xJQkNfXyA+PSAyCistIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9zaGFyZS9sb2NhbGUvJUwvJU4iCisrIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9zaGFyZS9sb2NhbGUvJUwvJU46L3Vzci9zaGFyZS9sb2NhbGUvJWxfJXQvJU46L3Vzci9zaGFyZS9sb2NhbGUvJWwvJU4iCisgIyBlbHNlCisgIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9saWIvbG9jYWxlLyVOLyVMIgorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy1zdGF0aWMgbmxfY2F0ZCBteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpwYXRoKTsKKytzdGF0aWMgbmxfY2F0ZCBteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpwYXRoLCBjaGFyICpsYW5nKTsKKyAKKyBzdGF0aWMJCQkJLyogdGhpcyBzb3VyY2UgaW5jbHVkZWQgaW4gZ3JpcGVzLmMgKi8KKyBubF9jYXRkCisgbXlfY2F0b3BlbihjaGFyICpuYW1lLCBpbnQgb2ZsYWcpIHsKKy0gIG5sX2NhdGQgZmQ7CisrICBubF9jYXRkIGZkID0gKG5sX2NhdGQpIC0xOworKworKyAgLyogdXNpbmcgZmlyc3QgdGhlIG15X2NhdG9wZW5wYXRoLCB3aGljaCBsb29rcyB3aXRoIExBTkdVQUdFCisrICAgKiBhbmQgb25seSBpZiBpdCBmYWlscyByZXNzb3J0IHRvIGNhdG9wZW4sIGl0IGdpdmVzIGJldHRlciBpMThuCisrICAgKi8KKysgIHsKKysgICAgY2hhciAqbmxzcGF0aCwgKmxhbmcsICpzOworIAorLSAgZmQgPSBjYXRvcGVuKG5hbWUsIG9mbGFnKTsKKysgICAgLyoKKysgICAgICogIklmIE5MU1BBVEggZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudmlyb25tZW50LCBvciBpZiBhCisrICAgICAqIG1lc3NhZ2UgY2F0YWxvZyBjYW5ub3QgYmUgb3BlbmVkIGluIGFueSBvZiB0aGUgcGF0aHMgc3BlY2lmaWVkCisrICAgICAqIGJ5IE5MU1BBVEgsIHRoZW4gYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBkZWZhdWx0IHBhdGggaXMgdXNlZCIKKysgICAgICovCisrICAgIG5sc3BhdGggPSBnZXRlbnYoIk5MU1BBVEgiKTsKKysgICAgaWYgKCFubHNwYXRoKQorKyAgICAgIG5sc3BhdGggPSBERUZBVUxUX05MU1BBVEg7CisrIAorKyAgICBsYW5nID0gZ2V0ZW52KCJMQU5HVUFHRSIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTENfQUxMIik7CisrICAgIGlmICghbGFuZykKKysgICAgICBsYW5nID0gZ2V0ZW52KCJMQ19NRVNTQUdFUyIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTEFORyIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9ICIiOworKyAKKysgICAgd2hpbGUoKmxhbmcgJiYgKGZkID09IChubF9jYXRkKSAtMSkpIHsKKysgICAgICBzID0gaW5kZXgobGFuZywgJzonKTsKKysgICAgICBpZiAocykgKnMgPSAwOworKyAgICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoLCBsYW5nKTsKKysgICAgICBpZiAocykgbGFuZz1zKzE7CisrICAgICAgZWxzZSBsYW5nID0gIiI7CisrICAgIH0KKysgICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKysgICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIG5sc3BhdGgsICJlbiIpOworKyAgfQorKworKyAgLyogc3RpbGwgbm90IGZvdW5kLCB1c2UgdGhlIHN5c3RlbSBjYXRvcGVuICovCisrICBpZiAoZmQgPT0gKG5sX2NhdGQpIC0xKQorKyAgICBmZCA9IGNhdG9wZW4obmFtZSwgb2ZsYWcpOworIAorICAgaWYgKGZkID09IChubF9jYXRkKSAtMSAmJiBvZmxhZykgeworICAgICBvZmxhZyA9IDA7CitAQCAtMzIsOCArNzMsNiBAQAorICAgfQorIAorICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkgeworLSAgICBjaGFyICpubHNwYXRoOworLQorICAgICAvKiBUaGUgbGliYyBjYXRvcGVuIGZhaWxzIC0gbGV0IHVzIHNlZSBpZiB3ZSBjYW4gZG8gYmV0dGVyICovCisgICAgIC8qIFRoZSBxdW90ZXMgYmVsb3cgYXJlIGZyb20gWC9PcGVuLCBYUEcgMTk4NywgVm9sLiAzLiAqLworIAorQEAgLTU4LDE3ICs5Nyw2IEBACisgI2VuZGlmCisgICAgIH0KKyAKKy0gICAgLyoKKy0gICAgICogIklmIE5MU1BBVEggZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudmlyb25tZW50LCBvciBpZiBhCistICAgICAqIG1lc3NhZ2UgY2F0YWxvZyBjYW5ub3QgYmUgb3BlbmVkIGluIGFueSBvZiB0aGUgcGF0aHMgc3BlY2lmaWVkCistICAgICAqIGJ5IE5MU1BBVEgsIHRoZW4gYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBkZWZhdWx0IHBhdGggaXMgdXNlZCIKKy0gICAgICovCistCistICAgIG5sc3BhdGggPSBnZXRlbnYoIk5MU1BBVEgiKTsKKy0gICAgaWYgKG5sc3BhdGgpCistICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoKTsKKy0gICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKy0gICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIERFRkFVTFRfTkxTUEFUSCk7CisgICB9CisgICByZXR1cm4gZmQ7CisgfQorQEAgLTkwLDE1ICsxMTgsMTMgQEAKKyAgKgorICAqLworIHN0YXRpYyBubF9jYXRkCistbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqbmxzcGF0aCkgeworLSAgaW50IGZkOworK215X2NhdG9wZW5wYXRoKGNoYXIgKm5hbWUsIGNoYXIgKm5sc3BhdGgsIGNoYXIgKmxhbmcpIHsKKyAgIG5sX2NhdGQgY2ZkID0gKG5sX2NhdGQpIC0xOworLSAgY2hhciAqcGF0aDAsICpwYXRoLCAqcywgKmZpbGUsICpsYW5nLCAqbGFuZ19sLCAqbGFuZ190LCAqbGFuZ19jOworKyAgY2hhciAqcGF0aDAsICpwYXRoLCAqcywgKmZpbGUsICpsYW5nX2wsICpsYW5nX3QsICpsYW5nX2M7CisgICBpbnQgbGFuZ3N6LCBuYW1lc3osIHN6LCBsYW5nX2xfc3osIGxhbmdfdF9zeiwgbGFuZ19jX3N6OworIAorICAgbmFtZXN6ID0gc3RybGVuKG5hbWUpOworIAorLSAgbGFuZyA9IGdldGVudigiTEFORyIpOworICAgaWYgKCFsYW5nKQorICAgICBsYW5nID0gIiI7CisgICBsYW5nc3ogPSBzdHJsZW4obGFuZyk7CitAQCAtMTk0LDE0ICsyMjAsOSBAQAorICAgICAgIHBhdGggPSBzKzE7CisgICAgIH0gZWxzZQorICAgICAgIHBhdGggPSAwOworLSAgICBmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworLSAgICBpZiAoZmQgIT0gLTEpIHsKKy0gICAgICAvKiB3ZSBmb3VuZCB0aGUgcmlnaHQgY2F0YWxvZyAtIGJ1dCB3ZSBkb24ndCBrbm93IHRoZQorLQkgdHlwZSBvZiBubF9jYXRkLCBzbyBjbG9zZSBpdCBhZ2FpbiBhbmQgYXNrIGxpYmMgKi8KKy0gICAgICBjbG9zZShmZCk7CistICAgICAgY2ZkID0gY2F0b3BlbihmaWxlLCAwKTsKKy0gICAgICBicmVhazsKKy0gICAgfQorKwljZmQgPSBjYXRvcGVuKGZpbGUsIDApOworKwlpZiAoY2ZkICE9IChubF9jYXRkKSAtMSkKKysJCQlicmVhazsKKyAgIH0KKyAKKyAgIGZyZWUocGF0aDApOworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYW5wYXRoLmMgbWFuLTEuNmUvc3JjL21hbnBhdGguYworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbnBhdGguYwkyMDA2LTA4LTAzIDE4OjE4OjMzLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYW5wYXRoLmMJMjAwNy0wNS0xOCAxMTowMjo0OC4wMDAwMDAwMDAgLTAzMDAKK0BAIC0yODIsMTMgKzI4MiwxNCBAQAorIAkJLyogV2UgY2Fubm90IHVzZSAibGFuZyA9IHNldGxvY2FsZShMQ19NRVNTQUdFUywgTlVMTCkiIG9yIHNvOgorIAkJICAgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRsb2NhbGUgaXMgYW4gb3BhcXVlIHN0cmluZy4gKi8KKyAJCS8qIFBPU0lYIHByZXNjcmliZXMgdGhlIG9yZGVyOiBMQ19BTEwsIExDX01FU1NBR0VTLCBMQU5HICovCistCQlpZigobGFuZyA9IGdldGVudigiTENfQUxMIikpICE9IE5VTEwpCisrCSAgICAgICAgLyogTEFOR1VBR0UgaXMgR05VL0xpbnV4IGFuZCBvdmVycnVsZXMgYWxsICovCisrCQlpZigobGFuZyA9IGdldGVudigiTEFOR1VBR0UiKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CistCQlpZigobGFuZyA9IGdldGVudigiTENfTUVTU0FHRVMiKSkgIT0gTlVMTCkKKysJCWVsc2UgaWYoKGxhbmcgPSBnZXRlbnYoIkxDX0FMTCIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQU5HIikpICE9IE5VTEwpCisrCQllbHNlIGlmKChsYW5nID0gZ2V0ZW52KCJMQ19NRVNTQUdFUyIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQU5HVUFHRSIpKSAhPSBOVUxMKQorKwkJZWxzZSBpZigobGFuZyA9IGdldGVudigiTEFORyIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKyAJCWFkZF90b19tYW5kaXJsaXN0X3goZGlyLCAwLCBwZXJycyk7CisgCX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS13aGF0aXMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNGVkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS13aGF0aXMyLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFuLTEuNmYub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjUxOjQ1LjAwMDAwMDAwMCAtMDgwMAorKysrIG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NTk6MzUuMzk5Nzk5NDEyIC0wODAwCitAQCAtMTY0LDEwICsxNjQsMTUgQEAKKyBmaQorIGNhdHBhdGg9YGVjaG8gJHtjYXRwYXRofSB8IHRyIDogJyAnYAorIAorKyNXSEFUSVNfRElSPSRERVNURElSL3Zhci9jYWNoZS9tYW4vYGVjaG8gJGhlcmV8c2VkIC1lICdzIS4qL21hbi8hIWcnYAorK1dIQVRJU19ESVI9JERFU1RESVIvdmFyL2NhY2hlL21hbi8kTEFORworK1tbIC1kICRXSEFUSVNfRElSIF1dIHx8IG1rZGlyIC1wICRXSEFUSVNfRElSLworKworICMgZmlyc3QgdHJ1bmNhdGUgYWxsIHRoZSB3aGF0aXMgZmlsZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgbmV3LAorICMgdGhlbiBvbmx5IHVwZGF0ZSAtIHdlIG1pZ2h0IHZpc2l0IHRoZSBzYW1lIGRpcmVjdG9yeSB0d2ljZQorIGlmIFsgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0gICBjcCAvZGV2L251bGwgL3Zhci9jYWNoZS9tYW4vd2hhdGlzCisrICAgbWtkaXIgLXAgJFdIQVRJU19ESVIvCisrICAgL2Jpbi9lY2hvIC1uID4gJFdIQVRJU19ESVIvd2hhdGlzCisgZmkKKyAKKyBmb3IgcGFnZXMgaW4gbWFuIGNhdAorQEAgLTE4MCwxMyArMTg1LDcgQEAKKyAJZWNobyAiYWJvdXQgdG8gZW50ZXIgJG1hbmRpciIgPiAvZGV2L3N0ZGVycgorICAgICAgZmkKKyAKKy0gICAgICMga2x1ZGdlIGZvciBTbGFja3dhcmUncyAvdXNyL21hbi9wcmVmb3JtYXQKKy0gICAgIGlmIFsgJG1hbmRpciA9IC91c3IvbWFuL3ByZWZvcm1hdCBdCistICAgICB0aGVuCistCW1hbmRpcjE9L3Vzci9tYW4KKy0gICAgIGVsc2UKKy0JbWFuZGlyMT0kbWFuZGlyCistICAgICBmaQorKyAgICAgbWFuZGlyMT0kV0hBVElTX0RJUgorIAorICAgICAgIyBpZiAkbWFuZGlyIGlzIG9uIGEgcmVhZG9ubHkgcGFydGl0aW9uLCBhbmQgdGhlIHdoYXRpcyBmaWxlCisgICAgICAjIGlzIG5vdCBhIHN5bWxpbmssIHRoZW4gbGV0J3Mgc2tpcCB0cnlpbmcgdG8gdXBkYXRlIGl0CitAQCAtMjA3LDExICsyMDYsNiBAQAorIAlmaQorICAgICAgZmkKKyAKKy0gICAgIGlmIFsgLXMgJHttYW5kaXJ9L3doYXRpcyAtYSAkcGFnZXMgPSBtYW4gLWEgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0JaWYgWyB4JHZlcmJvc2UgIT0geCBdOyB0aGVuCistCSAgIGVjaG8gc2tpcHBpbmcgJG1hbmRpciAtIHdlIGRpZCBpdCBhbHJlYWR5ID4gL2Rldi9zdGRlcnIKKy0JZmkKKy0gICAgIGVsc2UgICAgICAKKyAgICAgICAgaGVyZT1gcHdkYAorICAgICAgICBjZCAkbWFuZGlyCisgICAgICAgIGZvciBpIGluICRzZWN0aW9ucworQEAgLTQ0Nyw3ICs0NDcsNiBAQAorCisgICAgICAgIGNobW9kIDY0NCAke21hbmRpcjF9L3doYXRpcworICAgICAgICBybSAkVE1QRklMRQorLSAgICAgZmkKKyAgICBkb25lCisgZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZnLXdoYXRpczMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzNDQ1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZnLXdoYXRpczMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRG8gbm90IHVzZSBhYnNvbHV0ZSBwYXRoIGZvciBhd2sgd2hpbGUgZ2V0dGluZyB0aGUgcGF0aCBvZiBhd2sKK3doZW4gcnVubmluZyBtYWtld2hhdGlzLgorVGhpcyBjYW4gYXZvaWQgZXJyb3JzIGlmIHBhdGggb2YgYXdrIGNoYW5nZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFttYW4tMS42Z10KKworU2lnbmVkLW9mZi1ieTogSmlhbiBMaXUgPGppYW4ubGl1QHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51ciBtYW4tMS42Zy5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZnL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmcub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDE1LTAyLTI1IDE2OjEzOjEyLjY1NzYxMTQxOSArMDgwMAorKysrIG1hbi0xLjZnL3NyYy9tYWtld2hhdGlzLnNoCTIwMTUtMDItMjUgMTY6MTQ6NDkuMzM0Njk0ODE1ICswODAwCitAQCAtNjcsNyArNjcsNyBAQAorICMgYnV0IHRoYXQgbGVhZHMgdG8gcHJvYmxlbXMgYW5kIGJ1Z3MuCisKKyAjIEFXSz0vdXNyL2Jpbi9nYXdrCistQVdLPUBhd2tACisrQVdLPWB3aGljaCBhd2tgCisKKyAjIEZpbmQgYSBwbGFjZSBmb3Igb3VyIHRlbXBvcmFyeSBmaWxlcy4gSWYgc2VjdXJpdHkgaXMgbm90IGEgY29uY2VybiwgdXNlCisgIwlUTVBGSUxFPS90bXAvd2hhdGlzJCQ7IFRNUEZJTEVESVI9bm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3ogYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uMS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzY4MDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3ogYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uNy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVhZjgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzEwYmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYKQEAgLTAsMCArMSwxNDEgQEAKKyMKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBtYW4uY29uZi5pbiBieSB0aGUKKyMgY29uZmlndXJlIHNjcmlwdC4KKyMKKyMgbWFuLmNvbmYgZnJvbSBtYW4tMS41cAorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUsIHNlZSB0aGUgbWFuIHBhZ2VzIG1hbigxKQorIyBhbmQgbWFuLmNvbmYoNSkuCisjCisjIFRoaXMgZmlsZSBpcyByZWFkIGJ5IG1hbiB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgbWFucGF0aCAoYWxzbyB1c2VkCisjIHdoZW4gTUFOUEFUSCBjb250YWlucyBhbiBlbXB0eSBzdWJzdHJpbmcpLCB0byBmaW5kIG91dCB3aGVyZSB0aGUgY2F0CisjIHBhZ2VzIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gbWFuIHBhZ2VzIHNob3VsZCBiZSBzdG9yZWQsCisjIGFuZCB0byBtYXAgZWFjaCBQQVRIIGVsZW1lbnQgdG8gYSBtYW5wYXRoIGVsZW1lbnQuCisjIEl0IG1heSBhbHNvIHJlY29yZCB0aGUgcGF0aG5hbWUgb2YgdGhlIG1hbiBiaW5hcnkuIFtUaGlzIGlzIHVudXNlZC5dCisjIFRoZSBmb3JtYXQgaXM6CisjCisjIE1BTkJJTgkJcGF0aG5hbWUKKyMgTUFOUEFUSAkJbWFucGF0aF9lbGVtZW50CVtjb3JyZXNwb25kaW5nX2NhdGRpcl0KKyMgTUFOUEFUSF9NQVAJCXBhdGhfZWxlbWVudAltYW5wYXRoX2VsZW1lbnQKKyMKKyMgSWYgbm8gY2F0ZGlyIGlzIGdpdmVuLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGVxdWFsIHRvIHRoZSBtYW5kaXIKKyMgKHNvIHRoYXQgdGhpcyBkaXIgaGFzIGJvdGggbWFuMSBldGMuIGFuZCBjYXQxIGV0Yy4gc3ViZGlycykuCisjIFRoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIFVuaXggc2V0dXAuCisjIENlcnRhaW4gdmVyc2lvbnMgb2YgdGhlIEZTU1RORCByZWNvbW1lbmQgcHV0dGluZyBmb3JtYXR0ZWQgdmVyc2lvbnMKKyMgb2YgL3Vzci8uLi4vbWFuL21hbngvcGFnZS54IGludG8gL3Zhci9jYXRtYW4vLi4uL2NhdHgvcGFnZS54LgorIyBUaGUga2V5d29yZCBGU1NUTkQgd2lsbCBjYXVzZSB0aGlzIGJlaGF2aW91ci4KKyMgQ2VydGFpbiB2ZXJzaW9ucyBvZiB0aGUgRkhTIHJlY29tbWVuZCBwdXR0aW5nIGZvcm1hdHRlZCB2ZXJzaW9ucyBvZgorIyAvdXNyLy4uLi9zaGFyZS9tYW4vW2xvY2FsZS9dbWFueC9wYWdlLnggaW50bworIyAvdmFyL2NhY2hlL21hbi8uLi4vW2xvY2FsZS9dY2F0eC9wYWdlLnguCisjIFRoZSBrZXl3b3JkIEZIUyB3aWxsIGNhdXNlIHRoaXMgYmVoYXZpb3VyIChhbmQgb3ZlcnJpZGVzIEZTU1RORCkuCisjIEV4cGxpY2l0bHkgZ2l2ZW4gY2F0ZGlycyBvdmVycmlkZS4KKyMKKyMgRlNTVE5ECitGSFMKKyMKKyMgVGhpcyBmaWxlIGlzIGFsc28gcmVhZCBieSBtYW4gaW4gb3JkZXIgdG8gZmluZCBob3cgdG8gY2FsbCBucm9mZiwgbGVzcywgZXRjLiwKKyMgYW5kIHRvIGRldGVybWluZSB0aGUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBleHRlbnNpb25zIGFuZCBkZWNvbXByZXNzb3JzLgorIworIyBNQU5CSU4JCS91c3IvbG9jYWwvYmluL21hbgorIworIyBFdmVyeSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBNQU5QQVRIIGluY2x1ZGVzIHRoZXNlIGZpZWxkcworIworTUFOUEFUSAkvdXNyL21hbgorTUFOUEFUSAkvdXNyL3NoYXJlL21hbgorTUFOUEFUSAkvdXNyL2xvY2FsL21hbgorTUFOUEFUSAkvdXNyL2xvY2FsL3NoYXJlL21hbgorTUFOUEFUSAkvdXNyL1gxMVI2L21hbgorIworIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBvbmUgb2YgdGhlc2UgYnkgZGVmYXVsdAorIworIyBNQU5QQVRICS9vcHQvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL2xpYi8qL21hbgorIyBNQU5QQVRICS91c3Ivc2hhcmUvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL2tlcmJlcm9zL21hbgorIworIyBTZXQgdXAgUEFUSCB0byBNQU5QQVRIIG1hcHBpbmcKKyMKKyMgSWYgcGVvcGxlIGFzayBmb3IgIm1hbiBmb28iIGFuZCBoYXZlICIvZGlyL2Jpbi9mb28iIGluIHRoZWlyIFBBVEgKKyMgYW5kIHRoZSBkb2NzIGFyZSBmb3VuZCBpbiAiL2Rpci9tYW4iLCB0aGVuIG5vIG1hcHBpbmcgaXMgcmVxdWlyZWQuCisjCisjIFRoZSBiZWxvdyBtYXBwaW5ncyBhcmUgc3VwZXJmbHVvdXMgd2hlbiB0aGUgcmlnaHQgaGFuZCBzaWRlIGlzCisjIGluIHRoZSBtYW5kYXRvcnkgbWFucGF0aCBhbHJlYWR5LCBidXQgd2lsbCBrZWVwIG1hbiBmcm9tIHN0YXR0aW5nCisjIGxvdHMgb2Ygb3RoZXIgbmVhcmJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyMKK01BTlBBVEhfTUFQCS9iaW4JCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3NiaW4JCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4JCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL3NiaW4JCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL2xvY2FsL2JpbgkJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvbG9jYWwvc2JpbgkJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvWDExUjYvYmluCQkvdXNyL1gxMVI2L21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4vWDExCQkvdXNyL1gxMVI2L21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4vbWgJCS91c3Ivc2hhcmUvbWFuCisjCisjIE5PQVVUT1BBVEgga2VlcHMgbWFuIGZyb20gYXV0b21hdGljYWxseSBhZGRpbmcgZGlyZWN0b3JpZXMgdGhhdCBsb29rIGxpa2UKKyMgbWFudWFsIHBhZ2UgZGlyZWN0b3JpZXMgdG8gdGhlIHBhdGguCisjCisjTk9BVVRPUEFUSAorIworIyBOT0NBQ0hFIGtlZXBzIG1hbiBmcm9tIGNyZWF0aW5nIGNhY2hlIHBhZ2VzICgiY2F0IHBhZ2VzIikKKyMgKGdlbmVyYWxseSBvbmUgZW5hYmxlcy9kaXNhYmxlIGNhdCBwYWdlIGNyZWF0aW9uIGJ5IGNyZWF0aW5nL2RlbGV0aW5nCisjIHRoZSBkaXJlY3RvcnkgdGhleSB3b3VsZCBsaXZlIGluIC0gbWFuIG5ldmVyIGRvZXMgbWtkaXIpCisjIAorI05PQ0FDSEUKKyMKKyMgVXNlZnVsIHBhdGhzIC0gbm90ZSB0aGF0IENPTCBzaG91bGQgbm90IGJlIGRlZmluZWQgd2hlbgorIyBOUk9GRiBpcyBkZWZpbmVkIGFzICJncm9mZiAtVGFzY2lpIiBvciAiZ3JvZmYgLVRsYXRpbjEiOworIyBub3Qgb25seSBpcyBpdCBzdXBlcmZsdW91cywgYnV0IGl0IGFjdHVhbGx5IGRhbWFnZXMgdGhlIG91dHB1dC4KKyMgRm9yIHVzZSB3aXRoIHV0Zi04LCBOUk9GRiBzaG91bGQgYmUgIm5yb2ZmIC1tYW5kb2MiIHdpdGhvdXQgLVQgb3B0aW9uLgorIyAoTWF5YmUgLSBidXQgdG9kYXkgSSBuZWVkIC1UbGF0aW4xIHRvIHByZXZlbnQgZG91YmxlIGNvbnZlcnNpb24gdG8gdXRmOC4pCisjCisjIElmIHlvdSBoYXZlIGEgbmV3IHRyb2ZmICh2ZXJzaW9uIDEuMTguMT8pIGFuZCBpdHMgY29sb3JlZCBvdXRwdXQKKyMgY2F1c2VzIHByb2JsZW1zLCBhZGQgdGhlIC1jIG9wdGlvbiB0byBUUk9GRiwgTlJPRkYsIEpOUk9GRi4KKyMKK1RST0ZGCQkvdXNyL2Jpbi9ncm9mZiAtVHBzIC1tYW5kb2MKK05ST0ZGCQkvdXNyL2Jpbi9ucm9mZiAtVGxhdGluMSAtbWFuZG9jCitKTlJPRkYJCS91c3IvYmluL2dyb2ZmIC1UbmlwcG9uIC1tYW5kb2NqCitFUU4JCS91c3IvYmluL2VxbiAtVHBzCitORVFOCQkvdXNyL2Jpbi9lcW4gLVRsYXRpbjEKK0pORVFOCQkvdXNyL2Jpbi9lcW4gLVRuaXBwb24KK1RCTAkJL3Vzci9iaW4vdGJsCisjIENPTAkJL3Vzci9iaW4vY29sCitSRUZFUgkJL3Vzci9iaW4vcmVmZXIKK1BJQwkJL3Vzci9iaW4vcGljCitWR1JJTkQJCQorR1JBUAkJCitQQUdFUgkJL3Vzci9iaW4vbGVzcyAtaXNSCitDQVQJCS9iaW4vY2F0CisjCisjIFRoZSBjb21tYW5kICJtYW4gLWEgeHl6enkiIHdpbGwgc2hvdyBhbGwgbWFuIHBhZ2VzIGZvciB4eXp6eS4KKyMgV2hlbiBDTVAgaXMgZGVmaW5lZCBtYW4gd2lsbCB0cnkgdG8gYXZvaWQgc2hvd2luZyB0aGUgc2FtZQorIyB0ZXh0IHR3aWNlLiAoQnV0IGNvbXByZXNzZWQgcGFnZXMgY29tcGFyZSB1bmVxdWFsLikKKyMKK0NNUAkJL3Vzci9iaW4vY21wIC1zCisjCisjIENvbXByZXNzIGNhdCBwYWdlcworIworQ09NUFJFU1MJL2Jpbi9iemlwMgorQ09NUFJFU1NfRVhUCS5iejIKKyMKKyMgRGVmYXVsdCBtYW51YWwgc2VjdGlvbnMgKGFuZCBvcmRlcikgdG8gc2VhcmNoIGlmIC1TIGlzIG5vdCBzcGVjaWZpZWQKKyMgYW5kIHRoZSBNQU5TRUNUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuCisjCitNQU5TRUNUCQkxOjFwOjg6MjozOjNwOjQ6NTo2Ojc6OTowcDp0Y2w6bjpsOnA6bworIworIyBEZWZhdWx0IG9wdGlvbnMgdG8gdXNlIHdoZW4gbWFuIGlzIGludm9rZWQgd2l0aG91dCBvcHRpb25zCisjIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiB0aG9zZSB0aGF0IHRoaW5rIC1hIHNob3VsZCBiZSB0aGUgZGVmYXVsdAorIyBOb3RlIHRoYXQgc29tZSBzeXN0ZW1zIGhhdmUgL3Vzci9tYW4vYWxsbWFuLCBjYXVzaW5nIHBhZ2VzIHRvIGJlIHNob3duIHR3aWNlLgorIworI01BTkRFRk9QVElPTlMJLWEKKyMKKyMgRGVjb21wcmVzcyB3aXRoIGdpdmVuIGRlY29tcHJlc3NvciB3aGVuIGlucHV0IGZpbGUgaGFzIGdpdmVuIGV4dGVuc2lvbgorIyBUaGUgY29tbWFuZCBnaXZlbiBtdXN0IGFjdCBhcyBhIGZpbHRlci4KKyMKKy5negkJL2Jpbi9ndW56aXAgLWMKKy5iejIJCS91c3IvYmluL2J1bnppcDIgLWMKKy54egkJL3Vzci9iaW4vdW54eiAtYworLnoJCQorLloJCS9iaW4vemNhdAorLkYJCQorLlkJCQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTJmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuXzEuNmcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0NzM2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuXzEuNmcuYmIKQEAgLTAsMCArMSw4NCBAQAorU1VNTUFSWSA9ICJPbmxpbmUgZG9jdW1lbnRhdGlvbiB0b29scyIKK0RFU0NSSVBUSU9OID0gIkEgc2V0IG9mIGRvY3VtZW50YXRpb24gdG9vbHM6IG1hbiwgYXByb3BvcyBhbmQgd2hhdGlzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ByaW1hdGVzLnhpbWlhbi5jb20vfmZsdWNpZnJlZGkvbWFuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitQUiA9ICJyMSIKKworREVQRU5EUyA9ICJncm9mZiBsZXNzIgorCitkZWYgY29tcHJlc3NfcGtnKGQpOgorICAgIGlmICJjb21wcmVzc19kb2MiIGluIChkLmdldFZhcigiSU5IRVJJVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgY29tcHJlc3MgPSBkLmdldFZhcigiRE9DX0NPTVBSRVNTIiwgVHJ1ZSkKKyAgICAgICAgIGlmIGNvbXByZXNzID09ICJneiI6CisgICAgICAgICAgICAgcmV0dXJuICJnemlwIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAiYnoyIjoKKyAgICAgICAgICAgICByZXR1cm4gImJ6aXAyIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAieHoiOgorICAgICAgICAgICAgIHJldHVybiAieHoiCisgICAgcmV0dXJuICIiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke0Bjb21wcmVzc19wa2coZCl9IgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL2xvb2thc2lkZS9wa2dzL21hbjJodG1sLyR7QlB9LnRhci5nei9iYTE1NGQ1Nzk2OTI4Yjg0MWM5YzY5ZjBhZTM3NjY2MC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWstY29uZnBhdGgucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVoMS1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLW5vbmFzY2lpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLW1hbmRpcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLXNvZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtcm9fdXNyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1uZXdsaW5lLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai11dGY4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVoMS1nZW5jYXQucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItdHZfZmhzLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai1pMThuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXdoYXRpczIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItc2lncGlwZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1uZXdfc2VjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLjEuZ3o7dW5wYWNrPWZhbHNlIFwKKyAgICAgICAgICAgZmlsZTovL21hbi43Lmd6O3VucGFjaz1mYWxzZSBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4uY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tYW5wYXRoLjUuZ3o7dW5wYWNrPWZhbHNlIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZnLXdoYXRpczMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX3NlZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYTE1NGQ1Nzk2OTI4Yjg0MWM5YzY5ZjBhZTM3NjY2MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjY2RjYjhjM2Y0ZTAwODA5MjNkN2U4MThmMGU0YTIwMmRiMjZjNDY0MTVlYWVmMzYxMzg3YzIwOTk1Yjg5NTlmIgorCitDRkxBR1MgKz0gIi1EU1lTViIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICAgICAgJHtTfS9jb25maWd1cmUgLWRlZmF1bHQgLWNvbmZkaXIgL2V0YyArc2dpZCArZmhzICtsYW5nIGFsbAorfQorCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKXsKKwlta2RpciAtcCAgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjUKKyAgICAgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjcKKwljcCAke1dPUktESVJ9L21hbi5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L21hbi5jb25maWcKKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW4uMS5neiAke0R9JHtkYXRhZGlyfS9tYW4vbWFuMS8KKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW4uNy5neiAke0R9JHtkYXRhZGlyfS9tYW4vbWFuNy8KKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW5wYXRoLjUuZ3ogJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjUvCit9CisKKworUkRFUEVORFNfJHtQTn0gPSAibGVzcyBncm9mZiIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2xvY2FsZSAke3N5c2NvbmZkaXJ9L21hbi5jb25maWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tYy9tYy1DVFJMLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNGJhOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGaXggYnVpbGQgd2l0aCBtdXNsIGJ5IGVuc3VyaW5nIENUUkwgaXMgZGVmaW5lZC4KKworbXVzbCBkb2VzIG5vdCBkZWZpbmUgQ1RSTCBpbiA8dGVybWlvcy5oPiwgd2UgY291bGQgaW5jbHVkZSA8c3lzL3R0eWRlZmF1bHRzLmg+CitleHBsaWNpdGx5IGJ1dCBpdCdzIGVhc2llciBqdXN0IHRvIGVuc3VyZSBDVFJMIGlzIGRlZmluZWQuCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbSBTYWJvdGFnZSBMaW51eCwgdGhlIGxpY2Vuc2Ugc3RhdGVtZW50IGZvciBwYXRjaGVzIGFuZAorYnVpbGQgc2NyaXB0cyBpbiBTYWJvdGFnZSBMaW51eCBzYXlzOgorCisgICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIENocmlzdGlhbiBOZXVraXJjaGVuIGhhcyB3YWl2ZWQKKyAgICBhbGwgY29weXJpZ2h0IGFuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGlzIHdvcmsuCisKKyAgICBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisKK1RoZXJlZm9yZSB0aGlzIHNob3VsZCBiZSBnb29kIHRvIGluY2x1ZGUgaW4gT3BlbkVtYmVkZGVkLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIChzaG91bGQgYmUgaW5jbHVkZWQgaW4gdjQuOC4xNCkKKworZGlmZiAtdSBtYy00LjguMS43Lm9yZy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMgbWMtNC44LjEuNy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKKy0tLSBtYy00LjguMS43Lm9yZy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKKysrKyBtYy00LjguMS43L2xpYi90dHkvdHR5LW5jdXJzZXMuYworQEAgLTY1LDcgKzY1LDcgQEAKKyAKKyAvKioqIGZpbGUgc2NvcGUgbWFjcm8gZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy0jaWYgZGVmaW5lZChfQUlYKSAmJiAhZGVmaW5lZChDVFJMKQorKyNpZiAhZGVmaW5lZChDVFJMKQorICNkZWZpbmUgQ1RSTCh4KSAoKHgpICYgMHgxZikKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuNy41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZWIwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIGlzIGFuIG5jdXJzZXMgYmFzZWQgZmlsZSBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0RFUEVORFMgPSAibmN1cnNlcyBnbGliLTIuMCIKK1JERVBFTkRTXyR7UE59ID0gIm5jdXJzZXMtdGVybWluZm8iCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbWMtQ1RSTC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJkYWU5NjYyNDQ0OTZjZDRmNmQyODJkODBjOWNmM2M2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE2ODMzODg2MmJiMzAwMTdlYjY1ZWQ1NjlhNThlODBhYjY2YWU4Y2VmMTFjODg2NDQwYzllOWY0ZDFlZmM2YWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCAtLXdpdGhvdXQtc2FtYmEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9tYy8uZGVidWcvIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbiwjISR7YmluZGlyfS9lbnYgcHl0aG9uLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCit9CisKK1BBQ0tBR0VTID0rICIke0JQTn0taGVscGVycy1wZXJsICR7QlBOfS1oZWxwZXJzLXB5dGhvbiAke0JQTn0taGVscGVycyAke0JQTn0tZmlzaCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1wZXJsID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQZXJsLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYSsgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2FwdCsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmQgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2Rwa2crIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL21haWxmcyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcGF0Y2hmcyBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcnBtcysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VsaWIgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3V6aXAiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1wZXJsID0gInBlcmwiCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQeXRob24tYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1weXRob24gPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3MzKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWMxNTQxIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gInB5dGhvbiIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycyA9ICJNaWRuaWdodCBDb21tYW5kZXIgc2hlbGwgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycyA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKiAke2xpYmV4ZWNkaXJ9L21jL2V4dC5kLyoiCisKK1NVTU1BUllfJHtCUE59LWZpc2ggPSAiTWlkbmlnaHQgQ29tbWFuZGVyIEZpc2ggc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1maXNoID0gIiR7bGliZXhlY2Rpcn0vbWMvZmlzaCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YzJmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTQuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJNaWRuaWdodCBDb21tYW5kZXIgaXMgYW4gbmN1cnNlcyBiYXNlZCBmaWxlIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MGJiYWZlMzYwZTczZjk4NDBiZDc5ODE2MjFmOWMyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorREVQRU5EUyA9ICJuY3Vyc2VzIGdsaWItMi4wIHV0aWwtbGludXgiCitSREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTFjYjc1NjQzYzJiZDRkZjY0YmJjZjJkYWI3NjkwNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MWZkMGZkMjI4MGMzZDA5ZDdlMGFlYzhhYjAwMWZjODlkYWQ4ZTRmZDk5NDFmMzg2NDE0NjY3YjU1MTUyZWM1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjCisjIEJvdGggU2FtYmEgKHNtYikgYW5kIHNmdHAgcmVxdWlyZSBwYWNrYWdlIGRlbGl2ZXJlZCBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkCisjCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXZmcy1zbWIsLS1kaXNhYmxlLXZmcy1zbWIsc2FtYmEsIgorUEFDS0FHRUNPTkZJR1tzZnRwXSA9ICItLWVuYWJsZS12ZnMtc2Z0cCwtLWRpc2FibGUtdmZzLXNmdHAsbGlic3NoMiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L21jLy5kZWJ1Zy8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhJHtiaW5kaXJ9L2VudiBweXRob24sJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKK30KKworUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMtcHl0aG9uICR7QlBOfS1oZWxwZXJzICR7QlBOfS1maXNoIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFBlcmwtYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1wZXJsID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYXB0KyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWIgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViZCAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZHBrZysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvbWFpbGZzICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9wYXRjaGZzIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9ycG1zKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWxpYiBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdXppcCIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAicGVybCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1weXRob24gPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFB5dGhvbi1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvczMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1weXRob24gPSAicHl0aG9uIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKKworU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgorRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1GaXgtdHlwby1pbi1jb21wYXJpc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcwYjFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorRnJvbSAxOGQzNjBkNzQyNzFhMDY2YTg0OWJjMWZiYTRmMTBkYmIyM2VkMjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgOCBTZXAgMjAxNSAwODoxNzo0MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggdHlwbyBpbiBjb21wYXJpc2lvbgorCitlcnJvcjogY29tcGFyaXNvbiBvZiBhcnJheSAnZGV2bm0nIGVxdWFsIHRvIGEgbnVsbCBwb2ludGVyIGlzIGFsd2F5cyBmYWxzZQorCitVc2VyIGJpdHdpc2UgJyYnIG9wZXJhdG9yIGFzIGl0IGlzIGEgbWFzaworCitGaXhlcworZXJyb3I6IHVzZSBvZiBsb2dpY2FsICcmJicgd2l0aCBjb25zdGFudCBvcGVyYW5kCisKK1JlbW92ZSBleHRyYW5lb3VzIHBhcmVucworCitlcnJvcjogZXF1YWxpdHkgY29tcGFyaXNvbiB3aXRoIGV4dHJhbmVvdXMgcGFyZW50aGVzZXMKKworUmVtb3ZlIGRlYWQgY29kZQorCityZXN0cmlwZS5jOjQ2NToyMTogZXJyb3I6IGV4cGxpY2l0bHkgYXNzaWduaW5nIHZhbHVlIG9mIHZhcmlhYmxlIG9mIHR5cGUgJ2ludCcgdG8gaXRzZWxmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbWRtb24uaCAgICAgICB8IDIgKy0KKyBtZG9wZW4uYyAgICAgIHwgMiArLQorIHJlc3RyaXBlLmMgICAgfCAzIC0tLQorIHN1cGVyLWludGVsLmMgfCAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tZG1vbi5oIGIvbWRtb24uaAoraW5kZXggYWE3NTBjNi4uMGIwOGMzZCAxMDA2NDQKKy0tLSBhL21kbW9uLmgKKysrKyBiL21kbW9uLmgKK0BAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXNfcmVzeW5jX2NvbXBsZXRlKHN0cnVjdCBtZGluZm8gKmFycmF5KQorIAkJYnJlYWs7CisgCWNhc2UgMTA6CisgCQlsID0gYXJyYXktPmFycmF5LmxheW91dDsKKy0JCW5jb3BpZXMgPSAobCAmIDB4ZmYpICogKChsID4+IDgpICYmIDB4ZmYpOworKwkJbmNvcGllcyA9IChsICYgMHhmZikgKiAoKGwgPj4gOCkgJiAweGZmKTsKKyAJCXN5bmNfc2l6ZSA9IGFycmF5LT5jb21wb25lbnRfc2l6ZSAqIGFycmF5LT5hcnJheS5yYWlkX2Rpc2tzOworIAkJc3luY19zaXplIC89IG5jb3BpZXM7CisgCQlicmVhazsKK2RpZmYgLS1naXQgYS9tZG9wZW4uYyBiL21kb3Blbi5jCitpbmRleCAyODQxMGY0Li5jNWVlMmE2IDEwMDY0NAorLS0tIGEvbWRvcGVuLmMKKysrKyBiL21kb3Blbi5jCitAQCAtMzE4LDcgKzMxOCw3IEBAIGludCBjcmVhdGVfbWRkZXYoY2hhciAqZGV2LCBjaGFyICpuYW1lLCBpbnQgYXV0b2YsIGludCB0cnVzdHdvcnRoeSwKKyAJZWxzZSBpZiAobnVtIDwgMCkgeworIAkJLyogbmVlZCB0byBjaG9vc2UgYSBmcmVlIG51bWJlci4gKi8KKyAJCWNoYXIgKl9kZXZubSA9IGZpbmRfZnJlZV9kZXZubSh1c2VfbWRwKTsKKy0JCWlmIChkZXZubSA9PSBOVUxMKSB7CisrCQlpZiAoX2Rldm5tID09IE5VTEwpIHsKKyAJCQlwcl9lcnIoIk5vIGF2YWlsIG1kIGRldmljZXMgLSBhYm9ydGluZ1xuIik7CisgCQkJcmV0dXJuIC0xOworIAkJfQorZGlmZiAtLWdpdCBhL3Jlc3RyaXBlLmMgYi9yZXN0cmlwZS5jCitpbmRleCA0ZDkyMTkwLi5jZmU5NjY2IDEwMDY0NAorLS0tIGEvcmVzdHJpcGUuYworKysrIGIvcmVzdHJpcGUuYworQEAgLTQ2MSw5ICs0NjEsNiBAQCBpbnQgcmFpZDZfY2hlY2tfZGlza3MoaW50IGRhdGFfZGlza3MsIGludCBzdGFydCwgaW50IGNodW5rX3NpemUsCisgCQkJY3Vycl9icm9rZW5fZGlzayA9IGRpc2tEOworIAkJfQorIAorLQkJaWYoKFB4ID09IDApICYmIChReCA9PSAwKSkKKy0JCQljdXJyX2Jyb2tlbl9kaXNrID0gY3Vycl9icm9rZW5fZGlzazsKKy0KKyAJCWlmKGN1cnJfYnJva2VuX2Rpc2sgPj0gZGF0YV9kaXNrcyArIDIpCisgCQkJYnJva2VuX3N0YXR1cyA9IDI7CisgCitkaWZmIC0tZ2l0IGEvc3VwZXItaW50ZWwuYyBiL3N1cGVyLWludGVsLmMKK2luZGV4IDNmODEyZDYuLjE4MzgwMTIgMTAwNjQ0CistLS0gYS9zdXBlci1pbnRlbC5jCisrKysgYi9zdXBlci1pbnRlbC5jCitAQCAtMTAwMjcsNyArMTAwMjcsNyBAQCBlbnVtIGltc21fcmVzaGFwZV90eXBlIGltc21fYW5hbHl6ZV9jaGFuZ2Uoc3RydWN0IHN1cGVydHlwZSAqc3QsCisgCQkJCWdlby0+c2l6ZSA9IG1heF9zaXplOworIAkJfQorIAorLQkJaWYgKChkaXJlY3Rpb24gPT0gUk9MTEJBQ0tfTUVUQURBVEFfQ0hBTkdFUykpIHsKKysJCWlmIChkaXJlY3Rpb24gPT0gUk9MTEJBQ0tfTUVUQURBVEFfQ0hBTkdFUykgeworIAkJCS8qIGFjY2VwdCBzaXplIGZvciByb2xsYmFjayBvbmx5CisgCQkJKi8KKyAJCX0gZWxzZSB7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL2djYy00LjkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiZjFkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK3N1cGVyLWludGVsLmM6NTA2MzoyOiBlcnJvcjogcmlnaHQtaGFuZCBvcGVyYW5kIG9mIGNvbW1hIGV4cHJlc3Npb24gaGFzIG5vIGVmZmVjdCBbLVdlcnJvcj11bnVzZWQtdmFsdWVdCisgIHNucHJpbnRmKChjaGFyICopIHNwYXJlLT5zaWcsIE1BWF9TSUdOQVRVUkVfTEVOR1RILAorICBeCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworbWFrZTogKioqIFtzdXBlci1pbnRlbC5vXSBFcnJvciAxCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG1kYWRtLTMuMy9zdXBlci1pbnRlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLm9yaWcvc3VwZXItaW50ZWwuYwkyMDE0LTA1LTAyIDE1OjA4OjIxLjE1NDMxOTY1MSAtMDcwMAorKysrIG1kYWRtLTMuMy9zdXBlci1pbnRlbC5jCTIwMTQtMDUtMDIgMTU6MDk6MzEuNDcwOTg1Nzk0IC0wNzAwCitAQCAtNTA2MCw3ICs1MDYwLDcgQEAKKyAJc3BhcmUtPmNhY2hlX3NpemUgPSBtcGItPmNhY2hlX3NpemUsCisgCXNwYXJlLT5wd3JfY3ljbGVfY291bnQgPSBfX2NwdV90b19sZTMyKDEpLAorIAorLQlzbnByaW50ZigoY2hhciAqKSBzcGFyZS0+c2lnLCBNQVhfU0lHTkFUVVJFX0xFTkdUSCwKKysJKHZvaWQpc25wcmludGYoKGNoYXIgKikgc3BhcmUtPnNpZywgTUFYX1NJR05BVFVSRV9MRU5HVEgsCisgCQkgTVBCX1NJR05BVFVSRSBNUEJfVkVSU0lPTl9SQUlEMCk7CisgCisgCWZvciAoZCA9IHN1cGVyLT5kaXNrczsgZDsgZCA9IGQtPm5leHQpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjNkYjBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitCeSBoYXJkY29kaW5nIENDJ3MgZGVmaW5pdGlvbiBpbiB0aGUgTWFrZWZpbGUsIGFsbCB0aGUgZ2NjIHBhcmFtZXRlcnMgCitzZXQgYnkgdHVuZSBzZXR0aW5ncyBhcmUgbG9zdC4gQ2F1c2luZyBjb21waWxlIGZhaWx1cmUgd2l0aCB4MzIgdG9vbGNoYWluCisKK0FzIHRoZSBiaXRiYWtlIGRlZmluZWQgQ0MgaXMgZ29vZCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZWRmaW5lIENDIGluIHRoZSAKK21ha2UgZmlsZSwgaGVuY2UgbWFraW5nIHRoZSBDQyBkZWZpbml0aW9uIGluIHRoZSBNYWtlZmlsZSBjb25kaXRpb25hbC4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNworCitJbmRleDogbWRhZG0tMy4zL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLm9yaWcvTWFrZWZpbGUJMjAxMy0wOS0wMyAwNzo0Nzo0Ny4wMDAwMDAwMDAgKzAzMDAKKysrKyBtZGFkbS0zLjMvTWFrZWZpbGUJMjAxMy0xMC0xNiAxNjo0NDoyMy41NDIyOTU0ODcgKzAzMDAKK0BAIC00MSw3ICs0MSw3IEBACisgCisgS0xJQkNfR0NDID0gZ2NjIC1ub3N0ZGluYyAtaXdpdGhwcmVmaXggaW5jbHVkZSAtSSQoS0xJQkMpL2tsaWJjL2luY2x1ZGUgLUkkKEtMSUJDKS9saW51eC9pbmNsdWRlIC1JJChLTElCQykva2xpYmMvYXJjaC9pMzg2L2luY2x1ZGUgLUkkKEtMSUJDKS9rbGliYy9pbmNsdWRlL2JpdHMzMgorIAorLUNDID0gJChDUk9TU19DT01QSUxFKWdjYworK0NDID89ICQoQ1JPU1NfQ09NUElMRSlnY2MKKyBDWEZMQUdTID89IC1nZ2RiCisgQ1dGTEFHUyA9IC1XYWxsIC1XZXJyb3IgLVdzdHJpY3QtcHJvdG90eXBlcyAtV2V4dHJhIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgorIGlmZGVmIFdBUk5fVU5VU0VECmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1NmQwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXaGVuIHRyeSB0byBwcmludCB0aW1lX3QgdmFsdWVzIGFzIGEgbG9uZyBpbnQgaXQgY2F1c2VzIGFuIGVycm9yIGJlY2F1c2UgdGltZV90CitkYXRhIHR5cGUgaW4geDMyIEFCSSBpcyBsb25nIGxvbmcgaW50LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBtZGFkbS0zLjMuNC9tb25pdG9yLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtZGFkbS0zLjMuNC5vcmlnL21vbml0b3IuYworKysrIG1kYWRtLTMuMy40L21vbml0b3IuYworQEAgLTI1Nyw5ICsyNTcsMTIgQEAgc3RhdGljIGludCByZWFkX2FuZF9hY3Qoc3RydWN0IGFjdGl2ZV9hcgorIAkJCW1kaS0+Y3Vycl9zdGF0ZSA9IHJlYWRfZGV2X3N0YXRlKG1kaS0+c3RhdGVfZmQpOworIAkJfQorIAl9CistCisgCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19JTFAzMl9fKQorKwlkcHJpbnRmKCIoJWQpOiAlbGxkLiUwNmxsZCBzdGF0ZTolcyBwcmV2OiVzIGFjdGlvbjolcyBwcmV2OiAlcyBzdGFydDolbGx1XG4iLAorKyNlbHNlCisgCWRwcmludGYoIiglZCk6ICVsZC4lMDZsZCBzdGF0ZTolcyBwcmV2OiVzIGFjdGlvbjolcyBwcmV2OiAlcyBzdGFydDolbGx1XG4iLAorKyNlbmRpZgorIAkJYS0+aW5mby5jb250YWluZXJfbWVtYmVyLAorIAkJdHYudHZfc2VjLCB0di50dl91c2VjLAorIAkJYXJyYXlfc3RhdGVzW2EtPmN1cnJfc3RhdGVdLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyNzYwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKKy4vdGVzdCAmPi4vdGVzdC5sb2cKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWVjaG8gIlBBU1M6IG1kYWRtIgorCXJtIHRlc3QubG9nCitlbHNlCisJZWNobyAiRkFJTDogbWRhZG0iCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOTgxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBtYW5hZ2luZyBzb2Z0d2FyZSBSQUlEIHVuZGVyIExpbnV4IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9yYWlkL21kYWRtLyIKKworIyBTb21lIGZpbGVzIGFyZSBHUEx2Misgd2hpbGUgb3RoZXJzIGFyZSBHUEx2Mi4KK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tZG1vbi5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTg7bWQ1PWFmN2Q4NDQ0ZDljNGQzZTVjN2NhYWMwZDlkMzQwMzlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21kYWRtLmg7YmVnbGlubG5lPTQ7ZW5kbGluZT0yMjttZDU9NDYyYmM5OTM2YWMwZDNkYTExMDE5MWEzZjk5OTQxNjEiCisKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3JhaWQvbWRhZG0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nY2MtNC45LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21kYWRtLTMuMy4yX3gzMl9hYmlfdGltZV90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKwkgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3Y2E4YjExNDcxMGY5OGY1M2YyMGM1Nzg3YjY3NGEwOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YWU1ZjQ1MzA2Yjg3MzE5MGU5MWY0MTA3MDliMDBlNTE5OTdiNjMzYzA3MmIzM2Y4ZWZkOWY3ZGYwMjJjYTY4IgorCitDRkxBR1MgKz0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworRVhUUkFfT0VNQUtFID0gIkNIRUNLX1JVTl9ESVI9MCIKKyMgUFBDNjQgYW5kIE1JUFM2NCB1c2VzIGxvbmcgbG9uZyBmb3IgdTY0IGluIHRoZSBrZXJuZWwsIGJ1dCBwb3dlcnBjJ3MgYXNtL3R5cGVzLmgKKyMgcHJldmVudHMgNjQtYml0IHVzZXJsYW5kIGZyb20gc2VlaW5nIHRoaXMgZGVmaW5pdGlvbiwgaW5zdGVhZCBkZWZhdWx0aW5nCisjIHRvIHU2NCA9PSBsb25nIGluIHVzZXJzcGFjZS4gRGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyB0byBnZXQKKyMgaW50LWxsNjQuaCBpbmNsdWRlZAorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAnIENGTEFHUz0tRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXycKK0VYVFJBX09FTUFLRV9hcHBlbmRfbWlwczY0ID0gJyBDRkxBR1M9LURfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18nCitFWFRSQV9PRU1BS0VfYXBwZW5kX21pcHM2NG4zMiA9ICcgQ0ZMQUdTPS1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fJworCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlleHBvcnQgU1RSSVA9IiIKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMiCisKK2luaGVyaXQgcHRlc3QKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtYSAke1N9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCisJY3AgJHtTfS90ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lICdzIXNsZWVwIDAuKiFzbGVlcCAxIWc7IHMhL3Zhci90bXAhLyFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbG4gLXMgL3NiaW4vbWRhZG0gJHtEfSR7UFRFU1RfUEFUSH0vbWRhZG0KKwlmb3IgcHJnIGluIHRlc3Rfc3RyaXBlIHN3YXBfc3VwZXIgcmFpZDZjaGVjaworCWRvCisJCWluc3RhbGwgLUQgLW0gNzU1ICRwcmcgJHtEfSR7UFRFU1RfUEFUSH0vCisJZG9uZQorfQorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImJhc2giCitSUkVDT01NRU5EU18ke1BOfS1wdGVzdCArPSAiIFwKKyAgICBjb3JldXRpbHMgXAorICAgIHV0aWwtbGludXggXAorICAgIGtlcm5lbC1tb2R1bGUtbG9vcCBcCisgICAga2VybmVsLW1vZHVsZS1saW5lYXIgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDAgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDEgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDEwIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQ0NTYgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluZ2V0dHkvbWluZ2V0dHlfMS4wOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzE2MjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJDb21wYWN0IGdldHR5IHRlcm1pbmFsIGhhbmRsZXIgZm9yIHZpcnR1YWwgY29uc29sZXMgb25seSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWluZ2V0dHkvIgorTElDRU5TRSA9ICJHUEx2MiIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wYzU2ZGIwMTQzZjRmODBjMzY5ZWUzYWY3NDI1YWY2ZSIKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYTc1YWQ2NDg3ZmYyNzE0MjRmZmMwMGE2NDQyMDk5MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZjU1YzkwYmE0ZmFhOTEzZDkxZWY5OWNiZjVjYjJlYjRkYmUyNzgwMzE0YzNiYjE3OTUzZjg0OWM4Y2RkZDE3IgorCisjIHN1YnN0aXR1dGUgb3VyIENGTEFHUyBmb3IgIi1PMiAtV2FsbCAtVyAtcGlwZSIKKyMKK0VYVFJBX09FTUFLRSA9ICJDQz0nJHtDQ30nIFwKKyAgICAgICAgICAgICAgICBDRkxBR1M9JyR7Q0ZMQUdTfSAtRF9HTlVfU09VUkNFJyIKKworZG9faW5zdGFsbCgpeworICAgIGluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44ICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ2V0dHkiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9nZXR0eSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L21pbmdldHR5IgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWM2N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIGQ2MmE1ODYyZTI2ZWQzZmM1OGQ3ODllZmU5YzQwY2E2YzkxMWQzNmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAyMjozNTozMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgaXNzdXMgc3VyZmFjZWQgZHVlIHRvIG11c2wKKworc3JjL2dldHNkaXIuaDoyODoxNDogZXJyb3I6ICdNQVhOQU1MRU4nIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisgICBjaGFyIGZuYW1lW01BWE5BTUxFTiArIDFdOyAgLyogZmlsZW5hbWUgKyB0ZXJtaW5hdGluZyBudWxsICovCisKK3NyYy9kaWFsLmM6MzUyOjIyOiBlcnJvcjogJ0tJT0NTT1VORCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8ICAgICAgaW9jdGwoY29uc29sZWZkLCBLSU9DU09VTkQsIGspOworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9kaWFsLmMgICAgfCAyICstCisgc3JjL2dldHNkaXIuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGlhbC5jIGIvc3JjL2RpYWwuYworaW5kZXggYTkwYzFkMi4uYmYwMjU3NCAxMDA2NDQKKy0tLSBhL3NyYy9kaWFsLmMKKysrKyBiL3NyYy9kaWFsLmMKK0BAIC0zOSw3ICszOSw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAKKyAjaWZkZWYgVkNfTVVTSUMKKy0jICBpZiBkZWZpbmVkKF9fR0xJQkNfXykKKysjICBpZiBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCisgIyAgICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjICAgIGluY2x1ZGUgPHN5cy9rZC5oPgorICMgICAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KK2RpZmYgLS1naXQgYS9zcmMvZ2V0c2Rpci5jIGIvc3JjL2dldHNkaXIuYworaW5kZXggMjE5NWIyNy4uYjYxYTM2MSAxMDA2NDQKKy0tLSBhL3NyYy9nZXRzZGlyLmMKKysrKyBiL3NyYy9nZXRzZGlyLmMKK0BAIC0zMCw2ICszMCw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgCisgI2luY2x1ZGUgImdldHNkaXIuaCIKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDgyNjFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorU3ViamVjdDogW1BBVENIXSBmaXggbWluaWNvbSAtaC8tdiByZXR1cm4gdmFsdWUgaXMgbm90IDAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvbWluaWNvbS5jIHwgICAgNiArKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21pbmljb20uYyBiL3NyYy9taW5pY29tLmMKK2luZGV4IGUxYTU1N2IuLjczMGRhN2MgMTAwNjQ0CistLS0gYS9zcmMvbWluaWNvbS5jCisrKysgYi9zcmMvbWluaWNvbS5jCitAQCAtMTE2NiwxNSArMTE2NiwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgICAgICJtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuIgorICAgICAgICAgICAgICAgICAgImFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvblxuIgorICAgICAgICAgICAgICAgICAgIjIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiIpOworLSAgICAgICAgICBleGl0KDEpOworLSAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGNhc2UgJ3MnOiAvKiBzZXR1cCBtb2RlICovCisgICAgICAgICAgIGRvc2V0dXAgPSAxOworICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICBoZWxwdGhlbSgpOworLSAgICAgICAgICBleGl0KDEpOworLSAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGNhc2UgJ3AnOiAvKiBQc2V1ZG8gdGVybWluYWwgdG8gdXNlLiAqLworICAgICAgICAgICBpZiAoc3RybmNtcChvcHRhcmcsICIvZGV2LyIsIDUpID09IDApCisgICAgICAgICAgICAgb3B0YXJnICs9IDU7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tL2FsbG93LnRvLmRpc2FibGUubG9ja2Rldi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWMwODg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIGEvY29uZmlndXJlLmluCTIwMTMtMDItMDYgMTg6MTg6MTMuMDAwMDAwMDAwICswMTAwCisrKysgYi9jb25maWd1cmUuaW4JMjAxMy0wNy0yMSAxNTozMToyNy42MTQ4Mjg4OTQgKzAyMDAKK0BAIC00MCw3ICs0MCwxMyBAQAorIGZpCisgCisgUEtHX1BST0dfUEtHX0NPTkZJRworLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorKworK0FDX0FSR19FTkFCTEUoW2xvY2tkZXZdLAorKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxvY2tkZXZdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW0VuYWJsZSBsb2NrZGV2IHN1cHBvcnQgKGRlZjogZW5hYmxlZCldKSwKKysgICAgICAgIFtdLCBbZW5hYmxlX2xvY2tkZXY9InllcyJdKQorKworK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiB0ZXN0ICJ4JGVuYWJsZV9sb2NrZGV2IiA9IHh5ZXM7IHRoZW4KKyAJUEtHX0NIRUNLX01PRFVMRVMoW0xPQ0tERVZdLCBbbG9ja2Rldl0sIEFDX0RFRklORShbSEFWRV9MT0NLREVWXSxbMV0sW0RlZmluZSBpZiB5b3UgaGF2ZSBsb2NrZGV2XSksWzpdKQorIGZpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzVjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlRleHQtYmFzZWQgbW9kZW0gY29udHJvbCBhbmQgdGVybWluYWwgZW11bGF0aW9uIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJNaW5pY29tIGlzIGEgdGV4dC1iYXNlZCBtb2RlbSBjb250cm9sIGFuZCB0ZXJtaW5hbCBlbXVsYXRpb24gcHJvZ3JhbSBmb3IgVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpY29udiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDIwNDc3YWJjNTY3NDA0ZGViY2EwYTJhMWNiNmI2NDUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21pbmljb20uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT1hNTg4MzhjYjcwOWYwZGI1MTdmNGU0MjczMGM0OWU4MSIKKworU1JDX1VSSSA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy9kb3dubG9hZC5waHAvbGF0ZXN0ZmlsZS8zLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MDQ0Y2EzZTI5MTI2OGMzMzI5NGYxNzFkNDI2ZGMyZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YWMzYTY2M2I4MmY0ZjVkZjY0MTE0YjQ3OTJiOTkyNmI1MzZjODVmNTlkZTBmMmQyYjMyMWM3NjI2YTkwNGY0IgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsb2NrZGV2XSA9ICItLWVuYWJsZS1sb2NrZGV2LC0tZGlzYWJsZS1sb2NrZGV2LGxvY2tkZXYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK2RvX2luc3RhbGwoKSB7CisJZm9yIGQgaW4gZG9jIGV4dHJhcyBtYW4gbGliIHNyYzsgZG8gbWFrZSAtQyAkZCBERVNURElSPSR7RH0gaW5zdGFsbDsgZG9uZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2ODY5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzN2IzY2M5Li5mMTAyNmYzIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtOTUsNyArOTUsNyBAQCBpbnN0YWxsLWRpcnM6CisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAKKyBpbnN0YWxsLWJpbmFyaWVzOiAkKFBST0cpCistCSQoSU5TVEFMTCkgLW0gMDU1NSAtcyAkKFBST0cpICQoREVTVERJUikkKGJpbmRpcikvJChQUk9HKQorKwkkKElOU1RBTEwpIC1tIDA1NTUgJChQUk9HKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPRykKKyAKKyBpbnN0YWxsLW1hbjoKKyAJJChJTlNUQUxMKSAtbSAwNDQ0ICQoc3JjZGlyKS9ta3RlbXAuJChtYW50eXBlKSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9maWxlcy9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2I2ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9maWxlcy9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDI0IEBACitUaGlzIGZpeGVzIHRoZSBwYXJhbGxlbCBtYWtlIGluc3RhbGwgZmFpbHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCitodHRwOi8vd3d3LmdyYXRpc29mdC51cy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTI4CisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG1rdGVtcC0xLjcvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta3RlbXAtMS43Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBta3RlbXAtMS43L01ha2VmaWxlLmluCitAQCAtOTQsMTAgKzk0LDEwIEBAIGluc3RhbGwtZGlyczoKKyAJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKSBcCisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAKKy1pbnN0YWxsLWJpbmFyaWVzOiAkKFBST0cpCisraW5zdGFsbC1iaW5hcmllczogaW5zdGFsbC1kaXJzICQoUFJPRykKKyAJJChJTlNUQUxMKSAtbSAwNTU1ICQoUFJPRykgJChERVNURElSKSQoYmluZGlyKS8kKFBST0cpCisgCistaW5zdGFsbC1tYW46CisraW5zdGFsbC1tYW46IGluc3RhbGwtZGlycworIAkkKElOU1RBTEwpIC1tIDA0NDQgJChzcmNkaXIpL21rdGVtcC4kKG1hbnR5cGUpIFwKKyAJICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9ta3RlbXAuMQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjM4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIHNhZmUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRpb24gZnJvbSBzaGVsbCBzY3JpcHRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ta3RlbXAub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5ta3RlbXAub3JnL2J1Z3MiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTQzMDY4MGY2MzIyYTFlYjg3MTk5YjVlMDFhODJjMGQ0IgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWt0ZW1wLm9yZy9wdWIvbWt0ZW1wLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICBmaWxlOi8vZGlzYWJsZS1zdHJpcC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4N2JiZWQ5ZmEyZWU4ZTc2NDU3MzNjMGU4ZTY1MTcyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlOTRiOWUxZWRmODY2YjI2MDk1NDVkYTY1YjYyNzk5NmFjNWQxNThmZGEwNzFlNDkyYmRkYjJmNGE0ODI2NzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1saWJjIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L21rdGVtcCAke0R9JHtiYXNlX2JpbmRpcn0vbWt0ZW1wCisJcm1kaXIgJHtEfSR7YmluZGlyfQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJta3RlbXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wXSA9ICIke2Jhc2VfYmluZGlyfS9ta3RlbXAiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJta3RlbXAuMSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZXyR7UE59LWRvYyA9ICIzMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YmY1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJtc210cCBpcyBhbiBTTVRQIGNsaWVudCIKK0RFU0NSSVBUSU9OID0gIkEgc2VuZG1haWwgcmVwbGFjZW1lbnQgZm9yIHVzZSBpbiBNVEFzIGxpa2UgbXV0dCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tc210cC5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitERVBFTkRTID0gInpsaWIgZ251dGxzIgorCisjQ09QWUlORyBvciBMaWNlbmNlCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21zbXRwL2ZpbGVzL21zbXRwLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjNiYWNhOTNjN2U1ZjFhYTlkMzZhMmU1YjM4NzM5YWI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmNmVjZDdjYmZhZGY1NDhmZDU1MjA1YmQyNGNiNjNiODRiY2JiMTE4NWVmZWQ5MTdkZDc4MDA1OTVhNDg3ODkiCisKK2luaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2VjcmV0IC0td2l0aG91dC1saWJnc2FzbCAtLXdpdGhvdXQtbGliaWRuIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZW5kbWFpbCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzZW5kbWFpbF0gPSAiJHtiaW5kaXJ9L21zbXRwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NlbmRtYWlsXSA9ICIke3NiaW5kaXJ9L3NlbmRtYWlsIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitwa2dfcG9zdGluc3RfJHtQTn1fbGludXhzdGRiYXNlICgpIHsKKwkjIC91c3IvbGliL3NlbmRtaWFsIGlzIHJlcXVpcmVkIGJ5IExTQiBjb3JlIHRlc3QKKwlbICEgLUwgJEQvdXNyL2xpYi9zZW5kbWFpbCBdICYmIGxuIC1zZiAke3NiaW5kaXJ9L3NlbmRtYWlsICREL3Vzci9saWIvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvaWZjb25maWctaW50ZXJmYWNlLTAtZGVsLUlQLXdpbGwtcmVtb3ZlLXRoZS1hbGlhc2VkLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmY4MTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvaWZjb25maWctaW50ZXJmYWNlLTAtZGVsLUlQLXdpbGwtcmVtb3ZlLXRoZS1hbGlhc2VkLS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDgxODE0ZGMyYjE0ODQzMDA5MTkzZWZkMzA3ZDgxNGMyNmJhYTYxZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaXJpIFBvcGVsa2EgPGpwb3BlbGthQHJlZGhhdC5jb20+CitEYXRlOiBXZWQsIDcgRGVjIDIwMTEgMTk6MTQ6MDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaWZjb25maWcgaW50ZXJmYWNlOjAgZGVsIDxJUD4gd2lsbCByZW1vdmUgdGhlIGFsaWFzZWQgSVAgb24gSUE2NAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2NvbW1pdCA4MTgxNGRjMmIxNDg0MzAwOTE5M2VmZDMwN2Q4MTRjMjZiYWE2MWYwIGZyb20KK2dpdDovL2dpdC5jb2RlLnNmLm5ldC9wL25ldC10b29scy9jb2RlCisKKy0tLQorIGlmY29uZmlnLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pZmNvbmZpZy5jIGIvaWZjb25maWcuYworaW5kZXggYmM0MDVjNi4uZGFlODkyMiAxMDA2NDQKKy0tLSBhL2lmY29uZmlnLmMKKysrKyBiL2lmY29uZmlnLmMKK0BAIC04OTAsNyArODkwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgIGNvbnRpbnVlOworIAkJfQorIAkJCistCQltZW1jcHkoJmlwLCAmc2luLnNpbl9hZGRyLnNfYWRkciwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKysJCS8qIENsZWFyICJpcCIgaW4gY2FzZSBzaXplb2YodW5zaWduZWQgbG9uZykgPiBzaXplb2Yoc2luLnNpbl9hZGRyLnNfYWRkcikgKi8KKysJCWlwID0gMDsKKysJCW1lbWNweSgmaXAsICZzaW4uc2luX2FkZHIuc19hZGRyLCBzaXplb2Yoc2luLnNpbl9hZGRyLnNfYWRkcikpOworIAkJCisgCQlpZiAoZ2V0X25tYmNfcGFyZW50KGlmci5pZnJfbmFtZSwgJm5tLCAmYmMpIDwgMCkgeworIAkJICAgIGZwcmludGYoc3RkZXJyLCBfKCJJbnRlcmZhY2UgJXMgbm90IGluaXRpYWxpemVkXG4iKSwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzOWMyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaApAQCAtMCwwICsxLDc1IEBACisvKgorKiBjb25maWcuaAlBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIGluY2x1ZGVmaWxlCisqCisqIE5FVC1UT09MUwlBIGNvbGxlY3Rpb24gb2YgcHJvZ3JhbXMgdGhhdCBmb3JtIHRoZSBiYXNlIHNldCBvZiB0aGUKKyoJCU5FVC0zIE5ldHdvcmtpbmcgRGlzdHJpYnV0aW9uIGZvciB0aGUgTElOVVggb3BlcmF0aW5nCisqCQlzeXN0ZW0uCisqCisqCQlETyAgTk9UICBFRElUICBESVJFQ1RMWQorKgorKi8KKworLyogCisgKiAKKyAqIEludGVybmF0aW9uYWxpemF0aW9uCisgKiAKKyAqIFRoZSBuZXQtdG9vbHMgcGFja2FnZSBoYXMgY3VycmVudGx5IGJlZW4gdHJhbnNsYXRlZCB0byBGcmVuY2gsCisgKiBHZXJtYW4gYW5kIEJyYXppbGlhbiBQb3J0dWdlc2UuICBPdGhlciB0cmFuc2xhdGlvbnMgYXJlLCBvZgorICogY291cnNlLCB3ZWxjb21lLiAgQW5zd2VyIGBuJyBoZXJlIGlmIHlvdSBoYXZlIG5vIHN1cHBvcnQgZm9yCisgKiBpbnRlcm5hdGlvbmFsaXphdGlvbiBvbiB5b3VyIHN5c3RlbS4KKyAqIAorICovCisjZGVmaW5lIEkxOE4gMQorCisvKiAKKyAqIAorICogUHJvdG9jb2wgRmFtaWxpZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0FGVU5JWCAxCisjZGVmaW5lIEhBVkVfQUZJTkVUIDEKKyNkZWZpbmUgSEFWRV9BRklORVQ2IDEKKyNkZWZpbmUgSEFWRV9BRklQWCAwCisjZGVmaW5lIEhBVkVfQUZBVEFMSyAwCisjZGVmaW5lIEhBVkVfQUZBWDI1IDAKKyNkZWZpbmUgSEFWRV9BRk5FVFJPTSAxCisjZGVmaW5lIEhBVkVfQUZST1NFIDAKKyNkZWZpbmUgSEFWRV9BRlgyNSAwCisjZGVmaW5lIEhBVkVfQUZFQ09ORVQgMAorI2RlZmluZSBIQVZFX0FGREVDbmV0IDAKKyNkZWZpbmUgSEFWRV9BRkFTSCAwCisKKy8qIAorICogCisgKiBEZXZpY2UgSGFyZHdhcmUgdHlwZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0hXRVRIRVIgMQorI2RlZmluZSBIQVZFX0hXQVJDIDEKKyNkZWZpbmUgSEFWRV9IV1NMSVAgMQorI2RlZmluZSBIQVZFX0hXUFBQIDEKKyNkZWZpbmUgSEFWRV9IV1RVTk5FTCAxCisjZGVmaW5lIEhBVkVfSFdTVFJJUCAwCisjZGVmaW5lIEhBVkVfSFdUUiAwCisjZGVmaW5lIEhBVkVfSFdBWDI1IDAKKyNkZWZpbmUgSEFWRV9IV1JPU0UgMAorI2RlZmluZSBIQVZFX0hXTkVUUk9NIDEKKyNkZWZpbmUgSEFWRV9IV1gyNSAwCisjZGVmaW5lIEhBVkVfSFdGUiAxCisjZGVmaW5lIEhBVkVfSFdTSVQgMAorI2RlZmluZSBIQVZFX0hXRkRESSAwCisjZGVmaW5lIEhBVkVfSFdISVBQSSAwCisjZGVmaW5lIEhBVkVfSFdBU0ggMAorI2RlZmluZSBIQVZFX0hXSERMQ0xBUEIgMAorI2RlZmluZSBIQVZFX0hXSVJEQSAxCisjZGVmaW5lIEhBVkVfSFdFQyAwCisjZGVmaW5lIEhBVkVfSFdJQiAwCisKKy8qIAorICogCisgKiBPdGhlciBGZWF0dXJlcy4KKyAqIAorICovCisjZGVmaW5lIEhBVkVfRldfTUFTUVVFUkFERSAxCisjZGVmaW5lIEhBVkVfSVBfVE9PTFMgMQorI2RlZmluZSBIQVZFX01JSSAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1MTZmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZQpAQCAtMCwwICsxLDM2IEBACitJMThOPTEKK0hBVkVfQUZVTklYPTEKK0hBVkVfQUZJTkVUPTEKK0hBVkVfQUZJTkVUNj0xCisjIEhBVkVfQUZJUFg9MAorIyBIQVZFX0FGQVRBTEs9MAorIyBIQVZFX0FGQVgyNT0wCitIQVZFX0FGTkVUUk9NPTEKKyMgSEFWRV9BRlJPU0U9MAorIyBIQVZFX0FGWDI1PTAKKyMgSEFWRV9BRkVDT05FVD0wCisjIEhBVkVfQUZERUNuZXQ9MAorIyBIQVZFX0FGQVNIPTAKK0hBVkVfSFdFVEhFUj0xCitIQVZFX0hXQVJDPTEKK0hBVkVfSFdTTElQPTEKK0hBVkVfSFdQUFA9MQorSEFWRV9IV1RVTk5FTD0xCitIQVZFX0hXU1RSSVA9MQorSEFWRV9IV1RSPTEKKyMgSEFWRV9IV0FYMjU9MAorIyBIQVZFX0hXUk9TRT0wCitIQVZFX0hXTkVUUk9NPTEKKyMgSEFWRV9IV1gyNT0wCitIQVZFX0hXRlI9MQorIyBIQVZFX0hXU0lUPTAKKyMgSEFWRV9IV0ZEREk9MAorIyBIQVZFX0hXSElQUEk9MAorIyBIQVZFX0hXQVNIPTAKKyMgSEFWRV9IV0hETENMQVBCPTAKK0hBVkVfSFdJUkRBPTEKKyMgSEFWRV9IV0VDPTAKKyMgSEFWRV9IV0lCPTAKK0hBVkVfRldfTUFTUVVFUkFERT0xCitIQVZFX0lQX1RPT0xTPTEKK0hBVkVfTUlJPTEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmMxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCkBAIC0wLDAgKzEsODkgQEAKK1NVTU1BUlkgPSAiQmFzaWMgbmV0d29ya2luZyB0b29scyIKK0RFU0NSSVBUSU9OID0gIkEgY29sbGVjdGlvbiBvZiBwcm9ncmFtcyB0aGF0IGZvcm0gdGhlIGJhc2Ugc2V0IG9mIHRoZSBORVQtMyBuZXR3b3JraW5nIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vbmV0LXRvb2xzLmJlcmxpb3MuZGUvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5kZWJpYW4ub3JnL25ldC10b29scyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaWZjb25maWcuYztiZWdpbmxpbmU9MTE7ZW5kbGluZT0xNTttZDU9ZDFjYTM3MjA4MGFkNTQwMWUyM2NhMGFmYzM1Y2Y5YmEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAwNTAzMTJUMDAwMDAwWi9wb29sL21haW4vbi8ke0JQTn0vJHtCUE59XzEuNjAub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vLzIwMTUwODMxVDA5MzM0MlovcG9vbC9tYWluL24vJHtCUE59LyR7QlBOfV8ke1BWfS5kaWZmLmd6O2FwcGx5PW5vO25hbWU9cGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmV0LXRvb2xzLWNvbmZpZy5oIFwKKyAgICAgICAgICAgZmlsZTovL25ldC10b29scy1jb25maWcubWFrZSBcCisgICAgICAgICAgIGZpbGU6Ly9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoIFwKKwkgICAiCisKK1MgPSAiJHtXT1JLRElSfS9uZXQtdG9vbHMtMS42MCIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiZWNhZjM3YWNiNWI1ZGFmZjRiZGRhNzc3ODVmZDkxNmQiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJlYzY3OTY3Y2Y3YjFhM2EzODI4YTg0NzYyZmJjMDEzYWM1MGVlNWRjOWFhMzA5NWQ1YzU5MWYzMDJjMmRlMGY1IgorCitTUkNfVVJJW3BhdGNoLm1kNXN1bV0gPSAiZWEzNTkyZjQ5YWM4MzgwOTYyYmM0ZDliNjZjN2U3ZTkiCitTUkNfVVJJW3BhdGNoLnNoYTI1NnN1bV0gPSAiYWVlZWFmYWZmNjg4NjZhNDQ2ZjAxYmI2MzlkNGUwMTQ2YTYwYWYzNGRjZDIwZTMxYTNlNDY1ODUwMjJmYzc2YyIKKworaW5oZXJpdCBnZXR0ZXh0CisKKyMgVGhlIE1ha2VmaWxlIGlzIGxhbWUsIG5vIHBhcmFsbGVsIGJ1aWxkCitQQVJBTExFTF9NQUtFID0gIiIKKworIyBVbmxpa2Ugb3RoZXIgRGViaWFuIHBhY2thZ2VzLCBuZXQtdG9vbHMgKi5kaWZmLmd6IGNvbnRhaW5zIGFub3RoZXIgc2VyaWVzIG9mCisjIHBhdGNoZXMgbWFpbnRhaW5lZCBieSBxdWlsdC4gU28gbWFudWFsbHkgYXBwbHkgdGhlbSBiZWZvcmUgYXBwbHlpbmcgb3RoZXIgbG9jYWwKKyMgcGF0Y2hlcy4gQWxzbyByZW1vdmUgYWxsIHRlbXAgZmlsZXMgYmVmb3JlIGxlYXZpbmcsIGJlY2F1c2UgZG9fcGF0Y2goKSB3aWxsIHBvcCAKKyMgdXAgYWxsIHByZXZpb3VzbHkgYXBwbGllZCBwYXRjaGVzIGluIHRoZSBzdGFydAorbmV0dG9vbHNfZG9fcGF0Y2goKSB7CisJY2QgJHtTfQorCXF1aWx0IHBvcCAtYSB8fCB0cnVlCisJaWYgWyAtZCAke1N9Ly5wYy1uZXR0b29scyBdOyB0aGVuCisJCXJtIC1yZiAke1N9Ly5wYworCQltdiAke1N9Ly5wYy1uZXR0b29scyAke1N9Ly5wYworCQlRVUlMVF9QQVRDSEVTPSR7U30vZGViaWFuL3BhdGNoZXMgcXVpbHQgcG9wIC1hCisJCXJtIC1yZiAke1N9Ly5wYyAke1N9L2RlYmlhbgorCWZpCisJcGF0Y2ggLXAxIDwgJHtXT1JLRElSfS8ke0JQTn1fJHtQVn0uZGlmZgkKKwlRVUlMVF9QQVRDSEVTPSR7U30vZGViaWFuL3BhdGNoZXMgcXVpbHQgcHVzaCAtYQorCW12ICR7U30vLnBjICR7U30vLnBjLW5ldHRvb2xzCit9CisKK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIke1N9IgorCisjIFdlIGludm9rZSBiYXNlIGRvX3BhdGNoIGF0IGVuZCwgdG8gaW5jb3Jwb3JhdGUgYW55IGxvY2FsIHBhdGNoCitweXRob24gZG9fcGF0Y2goKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCduZXR0b29sc19kb19wYXRjaCcsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdwYXRjaF9kb19wYXRjaCcsIGQpCit9CisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIG5ldC10b29scyBoYXMgaXRzIG93biBjb25maWcgbWVjaGFuaXNtIHJlcXVpcmluZyAibWFrZSBjb25maWciCisJIyB3ZSBwcmUtZ2VuZXJhdGUgZGVzaXJlZCBvcHRpb25zIGFuZCBjb3B5IHRvIHNvdXJjZSBkaXJlY3RvcnkgaW5zdGVhZAorCWNwICR7V09SS0RJUn0vbmV0LXRvb2xzLWNvbmZpZy5oICAgICR7U30vY29uZmlnLmgKKwljcCAke1dPUktESVJ9L25ldC10b29scy1jb25maWcubWFrZSAke1N9L2NvbmZpZy5tYWtlCit9CisKK2RvX2NvbXBpbGUoKSB7CisJIyBuZXQtdG9vbHMgdXNlIENPUFRTL0xPUFRTIHRvIGFsbG93IGFkZGluZyBjdXN0b20gb3B0aW9ucworCWV4cG9ydCBDT1BUUz0iJENGTEFHUyIKKwlleHBvcnQgTE9QVFM9IiRMREZMQUdTIgorCXVuc2V0IENGTEFHUworCXVuc2V0IExERkxBR1MKKworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdCQVNFRElSPSR7RH0nIGluc3RhbGwKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2Jhc2Vfc2JpbmRpcl9wcm9ncyA9ICJhcnAgaWZjb25maWcgaXBtYWRkciBpcHR1bm5lbCBtaWktdG9vbCBuYW1laWYgcGxpcGNvbmZpZyByYXJwIHJvdXRlIHNsYXR0YWNoIgorYmFzZV9iaW5kaXJfcHJvZ3MgID0gImRuc2RvbWFpbm5hbWUgZG9tYWlubmFtZSBob3N0bmFtZSBuZXRzdGF0IG5pc2RvbWFpbm5hbWUgeXBkb21haW5uYW1lIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2Jhc2Vfc2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30iCitweXRob24gX19hbm9ueW1vdXMoKSB7CisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvY3Jvc3NfYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMDdhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0ZpeCBjcm9zcyBsaW5rIHVzaW5nIGF1dG9jb25mIGRldGVjdGVkIEFSCisKK0lmIGJ1aWxkaW5nIG9uIDMyYml0IGhvc3QgYW5kIGNyZWF0aW5nIDY0Yml0IGxpYnJhcmllcywgdGhlIHRhcmdldAorcGFja2FnZSBidWlsZHMgc2hvdWxkIG5vdCBpbnZva2UgdGhlIDMyYml0IGhvc3RzJ3MgYXIuICBTcGVjaWZpY2FsbHkKK3lvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlIGxpa2U6CisKK3g4Nl82NC1saW51eC1nY2MgICAgLW02NCAtLXN5c3Jvb3Q9L29wdC9xZW11eDg2LTY0L3RtcC9zeXNyb290cy9xZW11eDg2LTY0IC1nIC1vIHRlc3QgdGVzdC5vIGxpYm5ld3QuYSAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbHNsYW5nCitsaWJuZXd0LmE6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEFyY2hpdmUgaGFzIG5vIGluZGV4OyBydW4gcmFubGliIHRvIGFkZCBvbmUKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gIHwgMyArKy0KKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNyw2ICs3LDcgQEAgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACisgQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIEBDUFBGTEFHU0AgCisgR05VX0xEID0gQEdOVV9MREAKKytBUiA9IEBBUkAKKyAKKyBWRVJTSU9OID0gQFZFUlNJT05ACisgVEFHID0gciQoc3Vic3QgLiwtLCQoVkVSU0lPTikpCitAQCAtMTA5LDcgKzExMCw3IEBAIHdoaXB0Y2wuJChTT0VYVCk6ICQoV0hJUFRDTE9CSlMpICQoTElCTkVXVFNIKQorIAkkKENDKSAtc2hhcmVkICQoU0hDRkxBR1MpICQoTERGTEFHUykgLW8gd2hpcHRjbC4kKFNPRVhUKSAkKFdISVBUQ0xPQkpTKSAtTC4gLWxuZXd0ICAkKExJQlRDTCkgLWxwb3B0ICQoTElCUykKKyAKKyAkKExJQk5FV1QpOiAkKExJQk9CSlMpCistCWFyIHJ2ICRAICReCisrCSQoQVIpIHJ2ICRAICReCisgCisgbmV3dC5vICQoU0hBUkVERElSKS9uZXd0Lm86IG5ld3QuYyBNYWtlZmlsZQorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTJlNmRhOC4uY2Q4M2Q1NyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTUsNiArMTUsMTAgQEAgQUNfUFJPR19JTlNUQUxMCisgQUNfUFJPR19MTl9TCisgQUNfUFJPR19HUkVQCisgQUNfU1lTX0xBUkdFRklMRQorK0FOX01BS0VWQVIoW0FSXSwgW0FDX1BST0dfQVJdKQorK0FOX1BST0dSQU0oW2FyXSwgW0FDX1BST0dfQVJdKQorK0FDX0RFRlVOKFtBQ19QUk9HX0FSXSwgW0FDX0NIRUNLX1RPT0woQVIsIGFyLCA6KV0pCisrQUNfUFJPR19BUgorIAorICMgQXJlIHdlIHVzaW5nIEdOVSBsZD8KKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9maXhfU0hBUkVERElSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTFlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9maXhfU0hBUkVERElSLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdXRob3I6IGRleHVhbi5jdWlAaW50ZWwuY29tCitEYXRlOiBGcmkgQXByIDE1IDE2OjE3OjM5IENTVCAyMDExCisKK1RoZSBwYXRjaCBmaXhlcyBhIHBhcmFsbGVsLW1ha2UgaXNzdWU6IHdoZW4gZ2VuZXJhdGluZyAkKFNIQVJFRERJUikvJS5vLCB3ZSBzaG91bGQKK2Vuc3VyZSB0aGUgZGlyZWN0b3J5ICR7U0hBUkVERElSfSBleGlzdHMuCisKK1dlIG5lZWQgdG8gcHVzaCB0aGUgcGF0Y2ggdG8gdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IERleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTI4LDEyICsxMjgsMTIgQEAgJChTSEFSRURESVIpOgorIAorIHNoYXJlZGxpYjogJChMSUJORVdUU0gpCisgCistJChMSUJORVdUU0gpOiAkKFNIQVJFRERJUikgJChTSEFSRURPQkpTKQorKyQoTElCTkVXVFNIKTogJChTSEFSRURPQkpTKQorIAkkKENDKSAtc2hhcmVkIC1vICQoTElCTkVXVFNIKSAkKFNITElCRkxBR1MpICQoU0hBUkVET0JKUykgJChMREZMQUdTKSAkKExJQlMpCisgCWxuIC1mcyAkKExJQk5FV1RTT05BTUUpIGxpYm5ld3QuJChTT0VYVCkKKyAJbG4gLWZzICQoTElCTkVXVFNIKSAkKExJQk5FV1RTT05BTUUpCisgCistJChTSEFSRURESVIpLyUubyA6ICUuYworKyQoU0hBUkVERElSKS8lLm8gOiAlLmMgJChTSEFSRURESVIpCisgCSQoQ0MpICQoU0hDRkxBR1MpIC1jICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAtbyAkQCAkPAorIAorIGluc3RhbGw6ICQoTElCTkVXVCkgaW5zdGFsbC1zaCB3aGlwdGFpbAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2MzRlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5pbgorKysrIGdpdC9NYWtlZmlsZS5pbgorQEAgLTUsNyArNSw3IEBAIENDID0gQENDQAorIENQUCA9IEBDUFBACisgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACistQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL3NsYW5nIEBDUFBGTEFHU0AgCisrQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIEBDUFBGTEFHU0AgCisgR05VX0xEID0gQEdOVV9MREAKKyAKKyBWRVJTSU9OID0gQFZFUlNJT05ACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGE0MWEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOC5iYgpAQCAtMCwwICsxLDI5IEBACityZXF1aXJlIHJlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XyR7UFZ9LmJiCisKK1NVTU1BUlkgLj0gIiAtIHB5dGhvbiIKK0RFUEVORFMgPSAibGlibmV3dCBweXRob24iCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWNvcmUiCisKK2luaGVyaXQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uIgorRVhUUkFfT0VNQUtFICs9ICJQWVRIT05WRVJTPSR7UFlUSE9OX0RJUn0iCisKKworZG9fY29tcGlsZSAoKSB7CisJVkVSU0lPTj0iJChzZWQgLW4gJ3MvXlZFUlNJT04gPSAvL3AnIE1ha2VmaWxlKSIKKwlvZV9ydW5tYWtlIF9zbmFjay5zbworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorCWluc3RhbGwgLW0gMDc1NSAke1BZVEhPTl9ESVJ9L19zbmFjay5zbyAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJaW5zdGFsbCAtbSAwNjQ0IHNuYWNrLnB5ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KK30KKworUEFDS0FHRVNfcmVtb3ZlID0gIndoaXB0YWlsIgorCitGSUxFU18ke1BOfSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDJlNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzIgorCitERVNDUklQVElPTiA9ICJOZXd0IGlzIGEgcHJvZ3JhbW1pbmcgbGlicmFyeSBmb3IgY29sb3IgdGV4dCBtb2RlLCB3aWRnZXQgYmFzZWQgdXNlciBcCitpbnRlcmZhY2VzLiAgTmV3dCBjYW4gYmUgdXNlZCB0byBhZGQgc3RhY2tlZCB3aW5kb3dzLCBlbnRyeSB3aWRnZXRzLCBcCitjaGVja2JveGVzLCByYWRpbyBidXR0b25zLCBsYWJlbHMsIHBsYWluIHRleHQgZmllbGRzLCBzY3JvbGxiYXJzLCBcCitldGMuLCB0byB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzLiAgVGhpcyBwYWNrYWdlIGFsc28gY29udGFpbnMgdGhlIFwKK3NoYXJlZCBsaWJyYXJ5IG5lZWRlZCBieSBwcm9ncmFtcyBidWlsdCB3aXRoIG5ld3QsIGFzIHdlbGwgYXMgYSBcCisvdXNyL2Jpbi9kaWFsb2cgcmVwbGFjZW1lbnQgY2FsbGVkIHdoaXB0YWlsLiAgTmV3dCBpcyBiYXNlZCBvbiB0aGUgXAorc2xhbmcgbGlicmFyeS4iCisKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9uZXd0LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworIyBzbGFuZyBuZWVkcyB0byBiZSA+PSAyLjIKK0RFUEVORFMgPSAic2xhbmcgcG9wdCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbi9lL25ld3QvbmV3dC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X1NIQVJFRERJUi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9zc19hci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ODU3MjFiZWUxYTMxODU3MDcwNGIxOWRjZjMxZDI2OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NzFiMGU2MzRlZGU1NmFlNmE2YWNkOTEwNzI4YmI1ODMyYWMxM2RkYjBkMWQyNzkxOWQyNDk4ZGFiNzBjOTFlIgorCitTID0gIiR7V09SS0RJUn0vbmV3dC0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10Y2wgLS13aXRob3V0LXB5dGhvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworCitQQUNLQUdFU19wcmVwZW5kID0gIndoaXB0YWlsICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2ggYXV0b2dlbi5zaAorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitGSUxFU193aGlwdGFpbCA9ICIke2JpbmRpcn0vd2hpcHRhaWwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkN2U2MDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKQEAgLTAsMCArMSwxNjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uCisjCisKK1NVTU1BUlkgPSAiU3RhbmRhcmQgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJQYWNrYWdlIGdyb3VwIGJyaW5naW5nIGluIHBhY2thZ2VzIG5lZWRlZCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIgorUFIgPSAicjYiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMgXAorICAgICIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhZnRlciByZW5hbWUKKyAgICBuYW1lbWFwID0ge30KKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1iYXNpYyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljLWxpYnMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMtdXRpbHMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMtZXh0ZW5kZWQiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWRldi11dGlscyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtbXVsdGl1c2VyIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWluaXRzY3JpcHRzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zeXMtc2VydmljZXMiCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJy1kZXYnKToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZ1s6LTRdLCBOb25lKQorICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIG1hcHBlZCArPSAnLWRldicKKyAgICAgICAgZWxpZiBwa2cuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZ1s6LTRdLCBOb25lKQorICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIG1hcHBlZCArPSAnLWRiZycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZywgTm9uZSkKKworICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICBvbGR0YXNrbmFtZSA9IG1hcHBlZC5yZXBsYWNlKCJwYWNrYWdlZ3JvdXAtY29yZSIsICJ0YXNrLWNvcmUiKQorICAgICAgICAgICAgbWFwc3RyID0gIiAlcyAlcyIgJSAobWFwcGVkLCBvbGR0YXNrbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBtYXBzdHIpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyVzIiAlIHBrZywgbWFwc3RyKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJDT05GTElDVFNfJXMiICUgcGtnLCBtYXBzdHIpCit9CisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1tdWx0aXVzZXIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyA9ICJcCisgICAgZ2xpYi0yLjAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzID0gIlwKKyAgICBiYXNoIFwKKyAgICBhY2wgXAorICAgIGF0dHIgXAorICAgIGJjIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwaW8gXAorICAgIGUyZnNwcm9ncyBcCisgICAgZWQgXAorICAgIGZpbGUgXAorICAgIGZpbmR1dGlscyBcCisgICAgZ2F3ayBcCisgICAgZ21wIFwKKyAgICBncmVwIFwKKyAgICBtYWtlZGV2cyBcCisgICAgbWMgXAorICAgIG1jLWZpc2ggXAorICAgIG1jLWhlbHBlcnMgXAorICAgIG1jLWhlbHBlcnMtcGVybCBcCisgICAgbWMtaGVscGVycy1weXRob24gXAorICAgIG1rdGVtcCBcCisgICAgbmN1cnNlcyBcCisgICAgbmV0LXRvb2xzIFwKKyAgICBwYXggXAorICAgIHBvcHQgXAorICAgIHByb2NwcyBcCisgICAgcHNtaXNjIFwKKyAgICBzZWQgXAorICAgIHRhciBcCisgICAgdGltZSBcCisgICAgdXRpbC1saW51eCBcCisgICAgemxpYiBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQgPSAiXAorICAgIGlwcm91dGUyIFwKKyAgICBpcHV0aWxzIFwKKyAgICBpcHRhYmxlcyBcCisgICAgbW9kdWxlLWluaXQtdG9vbHMgXAorICAgIG9wZW5zc2wgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyA9ICJcCisgICAgYnlhY2MgXAorICAgIGRpZmZ1dGlscyBcCisgICAgbTQgXAorICAgIG1ha2UgXAorICAgIHBhdGNoIFwKKyAgICAiCisKK1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0cyA/PSAiaW5pdHNjcmlwdHMiCitWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID89ICJzeXN2aW5pdCIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID89ICJidXN5Ym94IgorVklSVFVBTC1SVU5USU1FX3N5c2xvZyA/PSAic3lza2xvZ2QiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzfSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyfSBcCisgICAgZXRodG9vbCBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX3N5c2xvZ30gXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciA9ICJcCisgICAgY3JhY2tsaWIgXAorICAgIGd6aXAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnVzZXInLCAnJywgZCl9IFwKKyAgICBzaGFkb3cgXAorICAgIHN1ZG8gXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyA9ICJcCisgICAgYXQgXAorICAgIGJ6aXAyIFwKKyAgICBjcm9uaWUgXAorICAgIGRidXMgXAorICAgIGRidXMtZ2xpYiBcCisgICAgcHl0aG9uLWRidXMgXAorICAgIGVsZnV0aWxzIFwKKyAgICBnemlwIFwKKyAgICBsZXNzIFwKKyAgICBsaWJjYXAgXAorICAgIGxpYmV2ZW50IFwKKyAgICBsb2dyb3RhdGUgXAorICAgIG5mcy11dGlscyBcCisgICAgcGNpdXRpbHMgXAorICAgIGxpYnBjcmUgXAorICAgIHJwY2JpbmQgXAorICAgIHN5c2ZzdXRpbHMgXAorICAgIHRjcC13cmFwcGVycyBcCisgICAgdHpkYXRhIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTgyMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCkBAIC0wLDAgKzEsMjc4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIkxpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikiCitERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzYXRpc2Z5IHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHNwZWNpZmljYXRpb24iCitQUiA9ICJyMTAiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh0LCBsaWJ4dHN0IGFuZCBvdGhlcnMgcmVxdWlyZSB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjCisjIFdlIHdpbGwgc2tpcCBwYXJzaW5nIHRoaXMgcGFja2FnZWdlb3VwIGZvciBub24tZ2xpYmMgc3lzdGVtcworIworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpZiBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkgIT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoICVzIEMgbGlicmFyeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkpCit9CisKK1BBQ0tBR0VTID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2IgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXN5cy1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZGIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXBlcmwgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtdGNsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItbWlzYyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkIFwKKyAgICAiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1zeXMtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWRiIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXRjbCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLW1pc2MgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXN5cy1leHRlbmRlZCA9ICJcCisgICAgY3VybCBcCisgICAgZGhjcC1jbGllbnQgXAorICAgIGhkcGFybSBcCisgICAgbGlnaHR0cGQgXAorICAgIGxpYmFpbyBcCisgICAgbHJ6c3ogXAorICAgIGx6byBcCisgICAgbWMgXAorICAgIG1jLWZpc2ggXAorICAgIG1jLWhlbHBlcnMgXAorICAgIG1jLWhlbHBlcnMtcGVybCBcCisgICAgbWMtaGVscGVycy1weXRob24gXAorICAgIG1kYWRtIFwKKyAgICBtaW5pY29tIFwKKyAgICBuZW9uIFwKKyAgICBwYXJ0ZWQgXAorICAgICR7UFRIfSBcCisgICAgcXVvdGEgXAorICAgIHNjcmVlbiBcCisgICAgc2V0c2VyaWFsIFwKKyAgICBzeXNzdGF0IFwKKyAgICB1ZGV2LWV4dHJhY29uZiBcCisgICAgdW56aXAgXAorICAgIHdhdGNoZG9nIFwKKyAgICB3Z2V0IFwKKyAgICB3aGljaCBcCisgICAgeGluZXRkIFwKKyAgICB6aXAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZGIgPSAiXAorICAgIGRiIFwKKyAgICBzcWxpdGUzIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXBlcmwgPSAiXAorICAgIGdkYm0gXAorICAgIHBlcmwgXAorICAgIHpsaWIgXAorICAgICIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1weXRob24gPSAiXAorICAgIGV4cGF0IFwKKyAgICBnZGJtIFwKKyAgICBnbXAgXAorICAgIG5jdXJzZXMgXAorICAgIG9wZW5zc2wgXAorICAgIHB5dGhvbiBcCisgICAgcmVhZGxpbmUgXAorICAgIHppcCBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS10Y2wgPSAiXAorICAgIHRjbCBcCisgICAgIgorCisjIE1pc2NlbGxhbmVvdXMgcGFja2FnZXMgcmVxdWlyZWQgYnkgTFNCIChvciBMU0IgdGVzdHMpCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItbWlzYyA9ICJcCisgICAgY2hrY29uZmlnIFwKKyAgICBnZXR0ZXh0IFwKKyAgICBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgIGdyb2ZmIFwKKyAgICBsc2Jpbml0c2NyaXB0cyBcCisgICAgbHNidGVzdCBcCisgICAgbHNvZiBcCisgICAgc3RyYWNlIFwKKyAgICBsaWJ1c2IxIFwKKyAgICB1c2J1dGlscyBcCisgICAgcnBtIFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiTFNCIENvcmUiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGNvbW1hbmRzL2xpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgQ29yZSBzcGVjaWZpY2F0aW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiXAorICAgIGF0IFwKKyAgICBiYXNoIFwKKyAgICBiYyBcCisgICAgYmludXRpbHMgXAorICAgIGJpbnV0aWxzLXN5bWxpbmtzIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwaW8gXAorICAgIGNyb25pZSBcCisgICAgY3VwcyBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBlZCBcCisgICAgZ2xpYmMtdXRpbHMgXAorICAgIGVsZnV0aWxzIFwKKyAgICBmaWxlIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIGZvbnRjb25maWctdXRpbHMgXAorICAgIGZvb21hdGljLWZpbHRlcnMgXAorICAgIGdhd2sgXAorICAgIGdob3N0c2NyaXB0IFwKKyAgICBncmVwIFwKKyAgICBnemlwIFwKKyAgICBsb2NhbGVkZWYgXAorICAgIGxzYiBcCisgICAgbTQgXAorICAgIG1haWx4IFwKKyAgICBtYWtlIFwKKyAgICBtYW4gXAorICAgIG1hbi1wYWdlcyBcCisgICAgbWt0ZW1wIFwKKyAgICBtc210cCBcCisgICAgcGF0Y2ggXAorICAgIHBheCBcCisgICAgcHJvY3BzIFwKKyAgICBwc21pc2MgXAorICAgIHNlZCBcCisgICAgc2hhZG93IFwKKyAgICB0YXIgXAorICAgIHRpbWUgXAorICAgIHV0aWwtbGludXggXAorICAgIHhkZy11dGlscyBcCisgICAgXAorICAgIGdsaWJjIFwKKyAgICBsaWJnY2MgXAorICAgIGxpYnBhbSBcCisgICAgbGlieG1sMiBcCisgICAgbmN1cnNlcyBcCisgICAgemxpYiBcCisgICAgbnNwciBcCisgICAgbGlicG5nMTIgXAorICAgIG5zcyBcCisiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgPSAiTFNCIFJ1bnRpbWUgTGFuZ3VhZ2VzIChQZXJsKSIKK0RFU0NSSVBUSU9OX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBSdW50aW1lIGxhbmd1YWdlcyBzcGVjaWZpY2F0aW9uIChQZXJsIHBhcnRzKSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIlwKKyAgICBwZXJsIFwKKyAgICBwZXJsLW1vZHVsZXMgXAorICAgIHBlcmwtbWlzYyBcCisgICAgcGVybC1wb2QgXAorICAgIHBlcmwtZGV2IFwKKyAgICBwZXJsLWRvYyBcCisiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJMU0IgUnVudGltZSBMYW5ndWFnZXMgKFB5dGhvbikiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBSdW50aW1lIGxhbmd1YWdlcyBzcGVjaWZpY2F0aW9uIChQeXRob24gcGFydHMpIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJcCisgICAgcHl0aG9uIFwKKyAgICBweXRob24tbW9kdWxlcyBcCisgICAgcHl0aG9uLW1pc2MgXAorIgorCitkZWYgZ2V0X2xpYnF0MyhkKToKKyAgICBpZiAnbGludXhzdGRiYXNlJyBpbiBkLmdldFZhcignRElTVFJPT1ZFUlJJREVTJywgRmFsc2UpIG9yICIiOgorICAgICAgICBpZiAncXQzJyBpbiBkLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJywgRmFsc2UpIG9yICIiOgorICAgICAgICAgICAgcmV0dXJuICdsaWJxdC1tdDMnCisKKyAgICAgICAgYmIud2FybignVGhlIG1ldGEtcXQzIGxheWVyIHNob3VsZCBiZSBhZGRlZCwgdGhpcyBsYXllciBwcm92aWRlcyBRdCAzLngnIFwKKyAgICAgICAgICAgICAgICAnbGlicmFyaWVzLiBJdHMgaW50ZW5kZWQgdXNlIGlzIGZvciBwYXNzaW5nIExTQiB0ZXN0cyBhcyBRdDMgaXMnIFwKKyAgICAgICAgICAgICAgICAnYSByZXF1aXJlbWVudCBmb3IgTFNCLicpCisgICAgcmV0dXJuICcnCisKK1FUNFBLR1MgPSAiIFwKKyAgICBsaWJxdGNvcmU0IFwKKyAgICBsaWJxdGd1aTQgXAorICAgIGxpYnF0c3FsNCBcCisgICAgbGlicXRzdmc0IFwKKyAgICBsaWJxdHhtbDQgXAorICAgIGxpYnF0bmV0d29yazQgXAorICAgIHF0NC1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJvcGVuZ2wiLCAibGlicXRvcGVuZ2w0IiwgIiIsIGQpfSBcCisgICAgIgorUVQ0UEtHU19taXBzNjQgPSAiIgorUVQ0UEtHU19taXBzNjRuMzIgPSAiIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIkxTQiBEZXNrdG9wIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBsaWJyYXJpZXMgXAorICAgIHNwZWNpZmllZCBpbiB0aGUgTFNCIERlc2t0b3Agc3BlY2lmaWNhdGlvbiIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIlwKKyAgICBsaWJ4dCBcCisgICAgbGlieHhmODZ2bSBcCisgICAgbGliZHJtIFwKKyAgICBsaWJnbHUgXAorICAgIGxpYnhpIFwKKyAgICBsaWJ4dHN0IFwKKyAgICBsaWJ4MTEtbG9jYWxlIFwKKyAgICB4b3JnLW1pbmltYWwtZm9udHMgXAorICAgIGdkay1waXhidWYtbG9hZGVyLWljbyBcCisgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItYm1wIFwKKyAgICBnZGstcGl4YnVmLWxvYWRlci1hbmkgXAorICAgIGdkay1waXhidWYteGxpYiBcCisgICAgbGliZXJhdGlvbi1mb250cyBcCisgICAgZ3RrKyBcCisgICAgYXRrIFwKKyAgICBsaWJhc291bmQgXAorICAgICR7UVQ0UEtHU30gXAorICAgICR7QGdldF9saWJxdDMoZCl9IFwKKyIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkID0gIlwKKyAgICBsZGQgXAorICAgIHBhbS1wbHVnaW4td2hlZWwgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMgXAorICAgIG1rZm9udGRpciBcCisgICAgbGlidXJpLXBlcmwgXAorICAgIGxpYnhtbC1wYXJzZXItcGVybCBcCisgICAgbGlieG1sLXBlcmwgXAorICAgIGxpYnhtbC1zYXgtcGVybCBcCisgICAgZ2xpYmMtbG9jYWxlZGF0YXMgXAorICAgIGdsaWJjLWdjb252cyBcCisgICAgZ2xpYmMtY2hhcm1hcHMgXAorICAgIGdsaWJjLWJpbmFyaWVzIFwKKyAgICBnbGliYy1sb2NhbGVkYXRhLXBvc2l4IFwKKyAgICBnbGliYy1leHRyYS1uc3MgXAorICAgIGdsaWJjLXBjcHJvZmlsZSBcCisgICAgbGliY2xhc3MtaXNhLXBlcmwgXAorICAgIGxpYmVudi1wZXJsIFwKKyAgICBsaWJkdW1wdmFsdWUtcGVybCBcCisgICAgbGliZmlsZS1jaGVja3RyZWUtcGVybCBcCisgICAgbGliaTE4bi1jb2xsYXRlLXBlcmwgXAorICAgIGxpYnBvZC1wbGFpbmVyLXBlcmwgXAorIgorCitQVEggPSAicHRoIgorUFRIX2xpYmMtdWNsaWJjID0gIiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTk5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0KQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9zZXBlcm1pdCBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjODJhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitUaGlzIHBhdGNoIGZpeGVzIGEgY2FzZSB3aGVyZSBpdCBmaW5kIGNyeXB0IGRlZmluZWQgaW4gbGliYyAobXVzbCkgYnV0Citub3QgaW4gc3BlY2lmaWVkIGxpYnJhcmllcyB0aGVuIGl0IGVuZHMgdXAgYXNzaWduaW5nCisKK0xJQkNSWVBUPSItbCIgd2hpY2ggdGhlbiBnb2VzIGludG8gbWFrZWZpbGUgY2F1c2UgYWxsIHNvcnQgb2YgcHJvYmxlbXMKK2UuZy4KKworbGQ6IGNhbm5vdCBmaW5kIC1sLW0zMgorfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVGhlIHJlYXNvbiBpcyB0aGF0IC1sIGFwcGVhcnMgb24gY29tbWFuZGxpbmUgd2l0aCBvdXQgYW55IGxpYnJhcnkgYW5kCitjb21waWxlciB0cmVhdHMgdGhlIG5leHQgYXJndW1lbnQgYXMgbGlicmFyeSBuYW1lIHdoYXRldmVyIGl0IGlzLgorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IExpbnV4LVBBTS0xLjEuNi9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjYub3JnL2NvbmZpZ3VyZS5hYworKysrIExpbnV4LVBBTS0xLjEuNi9jb25maWd1cmUuYWMKK0BAIC00MDAsNyArNDAwLDkgQEAgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfaGVhZGVyX3hjcnlwdF9oIiA9CisgICBbY3J5cHRfbGlicz0iY3J5cHQiXSkKKyAKKyBCQUNLVVBfTElCUz0kTElCUworLUFDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwgTElCQ1JZUFQ9Ii1sJGFjX2xpYiIsIExJQkNSWVBUPSIiKQorK0FDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwKKysJICAgICAgIFt0ZXN0ICIkYWNfY3Zfc2VhcmNoX2NyeXB0IiA9ICJub25lIHJlcXVpcmVkIiB8fAorKwkJTElCQ1JZUFQ9IiRhY19jdl9zZWFyY2hfY3J5cHQiXSkKKyBBQ19DSEVDS19GVU5DUyhjcnlwdF9yIGNyeXB0X2dlbnNhbHRfcikKKyBMSUJTPSRCQUNLVVBfTElCUworIEFDX1NVQlNUKExJQkNSWVBUKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9maXhzZXBidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTljM2IyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRml4IHRoZSBidWlsZCBlcnJvciB3aGVuIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGlzIHVzZWQ6CisKK01ha2luZyBpbnN0YWxsIGluIHh0ZXN0c21ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbGlicGFtLzEuMS42LXIyL2J1aWxkL3h0ZXN0cycvdXNyL2Jpbi9pbnN0YWxsIC1jIC1kIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9pbWFnZS91c3Ivc2hhcmUvTGludXgtUEFNL3h0ZXN0c2ZvciBmaWxlIGluIHJ1bi14dGVzdHMuc2ggdHN0LXBhbV9kaXNwYXRjaDEucGFtZCB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kIHRzdC1wYW1fZGlzcGF0Y2gzLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDQucGFtZCB0c3QtcGFtX2Rpc3BhdGNoNS5wYW1kIHRzdC1wYW1fY3JhY2tsaWIxLnBhbWQgdHN0LXBhbV9jcmFja2xpYjIucGFtZCB0c3QtcGFtX3VuaXgxLnBhbWQgdHN0LXBhbV91bml4Mi5wYW1kIHRzdC1wYW1fdW5peDMucGFtZCB0c3QtcGFtX3VuaXg0LnBhbWQgdHN0LXBhbV91bml4MS5zaCB0c3QtcGFtX3VuaXgyLnNoIHRzdC1wYW1fdW5peDMuc2ggdHN0LXBhbV91bml4NC5zaCBhY2Nlc3MuY29uZiB0c3QtcGFtX2FjY2VzczEucGFtZCB0c3QtcGFtX2FjY2VzczEuc2ggdHN0LXBhbV9hY2Nlc3MyLnBhbWQgdHN0LXBhbV9hY2Nlc3MyLnNoIHRzdC1wYW1fYWNjZXNzMy5wYW1kIHRzdC1wYW1fYWNjZXNzMy5zaCB0c3QtcGFtX2FjY2VzczQucGFtZCB0c3QtcGFtX2FjY2VzczQuc2ggbGltaXRzLmNvbmYgdHN0LXBhbV9saW1pdHMxLnBhbWQgdHN0LXBhbV9saW1pdHMxLnNoIHRzdC1wYW1fc3VjY2VlZF9pZjEucGFtZCB0c3QtcGFtX3N1Y2NlZWRfaWYxLnNoIGdyb3VwLmNvbmYgdHN0LXBhbV9ncm91cDEucGFtZCB0c3QtcGFtX2dyb3VwMS5zaCB0c3QtcGFtX2F1dGhmYWlsLnBhbWQgdHN0LXBhbV9hdXRoc3VjY2VlZC5wYW1kIHRzdC1wYW1fc3Vic3RhY2sxLnBhbWQgdHN0LXBhbV9zdWJzdGFjazFhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazEuc2ggdHN0LXBhbV9zdWJzdGFjazIucGFtZCB0c3QtcGFtX3N1YnN0YWNrMmEucGFtZCB0c3QtcGFtX3N1YnN0YWNrMi5zaCB0c3QtcGFtX3N1YnN0YWNrMy5wYW1kIHRzdC1wYW1fc3Vic3RhY2szYS5wYW1kIHRzdC1wYW1fc3Vic3RhY2szLnNoIHRzdC1wYW1fc3Vic3RhY2s0LnBhbWQgdHN0LXBhbV9zdWJzdGFjazRhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazQuc2ggdHN0LXBhbV9zdWJzdGFjazUucGFtZCB0c3QtcGFtX3N1YnN0YWNrNWEucGFtZCB0c3QtcGFtX3N1YnN0YWNrNS5zaCB0c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnBhbWQgdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaCB0c3QtcGFtX3B3aGlzdG9yeTEucGFtZCB0c3QtcGFtX3B3aGlzdG9yeTEuc2ggdHN0LXBhbV90aW1lMS5wYW1kIHRpbWUuY29uZiA7IGRvIFwvdXNyL2Jpbi9pbnN0YWxsIC1jICRmaWxlIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9pbWFnZS91c3Ivc2hhcmUvTGludXgtUEFNL3h0ZXN0cyA7IFwJZG9uZQorL3Vzci9iaW4vaW5zdGFsbDogY2Fubm90IHN0YXQgYHJ1bi14dGVzdHMuc2gnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgdHN0LXBhbV9kaXNwYXRjaDEucGFtZCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitJbmRleDogTGludXgtUEFNLTEuMS42L3h0ZXN0cy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuNi5vcmlnL3h0ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDEyOjI2OjMwLjM2MDI2NjAwMCArMDAwMAorKysrIExpbnV4LVBBTS0xLjEuNi94dGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wMy0yMSAxMTozOTo1OC41NTcxNjY2NTAgKzAwMDAKK0BAIC01OSw3ICs1OSw3IEBACisgaW5zdGFsbF94dGVzdHM6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzCisgCWZvciBmaWxlIGluICQoRVhUUkFfRElTVCkgOyBkbyBcCistCQkkKElOU1RBTEwpICQkZmlsZSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMgOyBcCisrCQkkKElOU1RBTEwpICQoc3JjZGlyKS8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorIAlkb25lCisgCWZvciBmaWxlIGluICQoWFRFU1RTKTsgZG8gXAorIAkJJChJTlNUQUxMKSAubGlicy8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDAyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwyMjYgQEAKK0Zyb20gNTU1NDA3ZmY2ZTJmNzQyZGY2NGFlOTM4NTlmMTRhMGZjMTM5NzgyOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxMiBTZXAgMjAxNCAwNTozNTowNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBsaWJwYW0veHRlc3RzOiByZW1vdmUgYmFzaCBkZXBlbmRlbmN5CisKK1RoZXJlJ3Mgbm90IGJhc2ggc3BlY2lmaWMgc3ludGF4IGluIHRoZSB4dGVzdCBzY3JpcHRzOgorCisgICMgYWZ0ZXIgYmVsb3cgcGF0Y2hlcyBhcHBsaWVkOgorICAkIGNkIExpbnV4LVBBTS0xLjEuNi94dGVzdHMKKyAgJCBjaGVja2Jhc2hpc21zICouc2gKKyAgTm8gb3V0cHV0CisKK0p1c3QgcmVtb3ZlIHRoZSBydW50aW1lIGRlcGVuZGVuY3kgdG8gYmFzaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgeHRlc3RzL3J1bi14dGVzdHMuc2ggICAgICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2ggfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaCAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2ggICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDEuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDIuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDMuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDQuc2ggICAgICAgICAgfCAgICAyICstCisgMTkgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94dGVzdHMvcnVuLXh0ZXN0cy5zaCBiL3h0ZXN0cy9ydW4teHRlc3RzLnNoCitpbmRleCAzYTg5MDU3Li4xY2Y4Njg0IDEwMDc1NQorLS0tIGEveHRlc3RzL3J1bi14dGVzdHMuc2gKKysrKyBiL3h0ZXN0cy9ydW4teHRlc3RzLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIFNSQ0RJUj0kMQorIHNoaWZ0IDEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaAoraW5kZXggMTgwZDI1Ni4uNzA1MjFkMiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL2dyb3VwYWRkIHRzdHBhbWFjY2VzcworIC91c3Ivc2Jpbi91c2VyYWRkIC1HIHRzdHBhbWFjY2VzcyAtcCAnISEnIHRzdHBhbWFjY2VzczEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaAoraW5kZXggMGEzMDI3NS4uN2UzZTYwZiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL2dyb3VwYWRkIHRzdHBhbWFjY2VzcworIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtYWNjZXNzMgorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoCitpbmRleCAzNDhlMGMzLi4zNjMwZTJlIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczMKKyAuL3RzdC1wYW1fYWNjZXNzMworZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoCitpbmRleCA2MWU3YjQ0Li40NTM4ZGY0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczQKKyAuL3RzdC1wYW1fYWNjZXNzNAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoIGIveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKK2luZGV4IDI0OGQ0N2UuLmRjMmE2NzUgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aGZhaWwgdHN0LXBhbV9hc3NlbWJsZV9saW5lMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAoraW5kZXggYjc2Mzc3Zi4uNDRmYWNhOSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi9ncm91cGFkZCB0c3RwYW1ncnBnCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1ncnAKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoIGIveHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaAoraW5kZXggNGZhYTgyMi4uMzJjMDIxZCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1saW1pdHMKKyAuL3RzdC1wYW1fbGltaXRzMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2ggYi94dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoCitpbmRleCBkZGIzYjhiLi4wZjIxMmUyIDEwMDY0NAorLS0tIGEveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCB0c3RwYW1wd2hpc3RvcnkKKyAuL3RzdC1wYW1fcHdoaXN0b3J5MQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAoraW5kZXggNTI2MDE3NS4uZjFiNzJhNyAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhmYWlsIHRzdC1wYW1fc3Vic3RhY2sxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCitpbmRleCBjMDJmNTk3Li4zODA0ZmE3IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazIuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aHN1Y2NlZWQgdHN0LXBhbV9zdWJzdGFjazIKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKK2luZGV4IDBlNTcyYWEuLmFhNDhlOGUgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoc3VjY2VlZCB0c3QtcGFtX3N1YnN0YWNrMworZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAoraW5kZXggYTNlZjA4YS4uOTU4YTA3YSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhzdWNjZWVkIHRzdC1wYW1fc3Vic3RhY2s0CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCitpbmRleCBlMjcxNGZkLi43ZTBkYTc0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazUuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aGZhaWwgdHN0LXBhbV9zdWJzdGFjazUKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCitpbmRleCBhNjQzYjJlLi41OGU1N2I0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtdGVzdAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgcGFtdGVzdAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoIGIveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKK2luZGV4IGY3NWJkODQuLjcyZGVhYzAgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV91bml4MS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW11bml4CisgLi90c3QtcGFtX3VuaXgxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDIuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAoraW5kZXggNzA5MzE1NS4uYzA0ZDZlNiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXgyLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIHBhbXVuaXgwID0gMGFYS1p6dEEuZDFLWQorIC91c3Ivc2Jpbi91c2VyYWRkIC1wIDBhWEtaenRBLmQxS1kgIHRzdHBhbXVuaXgKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4My5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCitpbmRleCBlZjRhMDdjLi5iNTJkYjJiIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgcGFtdW5peDAxID0gMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVIHRzdHBhbXVuaXgKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4NC5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCitpbmRleCA3ODdjMmY5Li5lNzk3NmZkIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDQuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgcGFtdW5peDAxID0gMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVIHRzdHBhbXVuaXgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTY4NzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitUaGlzIHBhdGNoIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IHN1YiBwYWNrYWdlIGxpYnBhbS14dGVzdHMgdG8gZG8gbW9yZSBjaGVja3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLSBMaW51eC1QQU0tMS4xLjQveHRlc3RzL01ha2VmaWxlLmFtLm9yaWcJMjAxMS0wNy0xOSAxNzowMDowOS42MTk5ODAwMDEgKzA4MDAKKysrKyBMaW51eC1QQU0tMS4xLjQveHRlc3RzL01ha2VmaWxlLmFtCTIwMTEtMDctMTkgMTY6NTQ6MDAuMjI5OTc5OTk4ICswODAwCitAQCAtNyw3ICs3LDcgQEAKKyBBTV9MREZMQUdTID0gLUwkKHRvcF9idWlsZGRpcikvbGlicGFtIC1scGFtIFwKKyAJLUwkKHRvcF9idWlsZGRpcikvbGlicGFtX21pc2MgLWxwYW1fbWlzYworIAorLUNMRUFORklMRVMgPSAqfiAkKFhURVNUUykKKytDTEVBTkZJTEVTID0gKn4KKyAKKyBFWFRSQV9ESVNUID0gcnVuLXh0ZXN0cy5zaCB0c3QtcGFtX2Rpc3BhdGNoMS5wYW1kIHRzdC1wYW1fZGlzcGF0Y2gyLnBhbWQgXAorIAl0c3QtcGFtX2Rpc3BhdGNoMy5wYW1kIHRzdC1wYW1fZGlzcGF0Y2g0LnBhbWQgXAorQEAgLTUxLDMgKzUxLDE4IEBACisgCisgeHRlc3RzOiAkKFhURVNUUykgcnVuLXh0ZXN0cy5zaAorIAkiJChzcmNkaXIpIi9ydW4teHRlc3RzLnNoICIkKHNyY2RpcikiICR7WFRFU1RTfSAke05PU1JDVEVTVFN9CisrCisrYWxsOiAkKFhURVNUUykKKysKKytpbnN0YWxsOiBpbnN0YWxsX3h0ZXN0cworKworK2luc3RhbGxfeHRlc3RzOgorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cworKwlmb3IgZmlsZSBpbiAkKEVYVFJBX0RJU1QpIDsgZG8gXAorKwkJJChJTlNUQUxMKSAkJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwlkb25lCisrCWZvciBmaWxlIGluICQoWFRFU1RTKTsgZG8gXAorKwkJJChJTlNUQUxMKSAubGlicy8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwlkb25lCisrCisrLlBIT05ZOiBhbGwgaW5zdGFsbF94dGVzdHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLW5vLWlubmV0Z3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1NTFhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2lubmV0Z3IgbWF5IG5vdCBiZSB0aGVyZSBzbyBtYWtlIHN1cmUgdGhhdCB3aGVuIGlubmV0Z3IgaXMgbm90IHByZXNlbnQKK3RoZW4gd2UgaW5mb3JtIGFib3V0IGl0IGFuZCBub3QgdXNlIGl0LgorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYworKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYworQEAgLTY1OSw3ICs2NTksMTEgQEAgc3RhdGljIGludCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcAorIAl9CisgCS8qIElmIGJ1ZmZlciBzdGFydHMgd2l0aCBALCB3ZSBhcmUgdXNpbmcgbmV0Z3JvdXBzICovCisgCWlmIChidWZmZXJbMF0gPT0gJ0AnKQorLQkgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorKyAgICAgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjZWxzZQorKyAgICAgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9ncm91cCBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKyAJLyogb3RoZXJ3aXNlLCBpZiB0aGUgYnVmZmVyIHN0YXJ0cyB3aXRoICUsIGl0J3MgYSBVTklYIGdyb3VwICovCisgCWVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnJScpCisgICAgICAgICAgIGdvb2QgJj0gcGFtX21vZHV0aWxfdXNlcl9pbl9ncm91cF9uYW1fbmFtKHBhbWgsIHVzZXIsICZidWZmZXJbMV0pOworSW5kZXg6IExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKKysrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCitAQCAtNTU1LDkgKzU1NSwxMyBAQCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QKKyAJICB9CisgCSAgLyogSWYgYnVmZmVyIHN0YXJ0cyB3aXRoIEAsIHdlIGFyZSB1c2luZyBuZXRncm91cHMgKi8KKyAJICBpZiAoYnVmZmVyWzBdID09ICdAJykKKy0JICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorKwkgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjZWxzZQorKwkgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV90aW1lIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOworKyNlbmRpZgorIAkgIGVsc2UKKy0JICAgIGdvb2QgJj0gbG9naWNfZmllbGQocGFtaCwgdXNlciwgYnVmZmVyLCBjb3VudCwgaXNfc2FtZSk7CisrCSAgICAgICBnb29kICY9IGxvZ2ljX2ZpZWxkKHBhbWgsIHVzZXIsIGJ1ZmZlciwgY291bnQsIGlzX3NhbWUpOworIAkgIEQoKCJ3aXRoIHVzZXI6ICVzIiwgZ29vZCA/ICJwYXNzZXMiOiJmYWlscyIgKSk7CisgCisgCSAgLyogaGVyZSB3ZSBnZXQgdGhlIHRpbWUgZmllbGQgKi8KK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCisrKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYworQEAgLTIzMSwxOCArMjMxLDI3IEBAIGV2YWx1YXRlX25vdGluZ3JvdXAocGFtX2hhbmRsZV90ICpwYW1oLAorIH0KKyAvKiBSZXR1cm4gUEFNX1NVQ0NFU1MgaWYgdGhlIChob3N0LHVzZXIpIGlzIGluIHRoZSBuZXRncm91cC4gKi8KKyBzdGF0aWMgaW50CistZXZhbHVhdGVfaW5uZXRncihjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKytldmFsdWF0ZV9pbm5ldGdyKGNvbnN0IHBhbV9oYW5kbGVfdCogcGFtaCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisgeworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKyAJaWYgKGlubmV0Z3IoZ3JvdXAsIGhvc3QsIHVzZXIsIE5VTEwpID09IDEpCisgCQlyZXR1cm4gUEFNX1NVQ0NFU1M7CisrI2Vsc2UKKysgICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fc3VjY2VlZF9pZiBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKysKKyAJcmV0dXJuIFBBTV9BVVRIX0VSUjsKKyB9CisgLyogUmV0dXJuIFBBTV9TVUNDRVNTIGlmIHRoZSAoaG9zdCx1c2VyKSBpcyBOT1QgaW4gdGhlIG5ldGdyb3VwLiAqLworIHN0YXRpYyBpbnQKKy1ldmFsdWF0ZV9ub3Rpbm5ldGdyKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQorK2V2YWx1YXRlX25vdGlubmV0Z3IoY29uc3QgcGFtX2hhbmRsZV90KiBwYW1oLCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKyB7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorIAlpZiAoaW5uZXRncihncm91cCwgaG9zdCwgdXNlciwgTlVMTCkgPT0gMCkKKyAJCXJldHVybiBQQU1fU1VDQ0VTUzsKKysjZWxzZQorKwlwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3N1Y2NlZWRfaWYgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisgCXJldHVybiBQQU1fQVVUSF9FUlI7CisgfQorIAorQEAgLTM2MSwxNCArMzcwLDE0IEBAIGV2YWx1YXRlKHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGRlYnVnLAorIAkJY29uc3Qgdm9pZCAqcmhvc3Q7CisgCQlpZiAocGFtX2dldF9pdGVtKHBhbWgsIFBBTV9SSE9TVCwgJnJob3N0KSAhPSBQQU1fU1VDQ0VTUykKKyAJCQlyaG9zdCA9IE5VTEw7CistCQlyZXR1cm4gZXZhbHVhdGVfaW5uZXRncihyaG9zdCwgdXNlciwgcmlnaHQpOworKwkJcmV0dXJuIGV2YWx1YXRlX2lubmV0Z3IocGFtaCwgcmhvc3QsIHVzZXIsIHJpZ2h0KTsKKyAJfQorIAkvKiAoUmhvc3QsIHVzZXIpIGlzIG5vdCBpbiB0aGlzIGdyb3VwLiAqLworIAlpZiAoc3RyY2FzZWNtcChxdWFsLCAibm90aW5uZXRnciIpID09IDApIHsKKyAJCWNvbnN0IHZvaWQgKnJob3N0OworIAkJaWYgKHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fUkhPU1QsICZyaG9zdCkgIT0gUEFNX1NVQ0NFU1MpCisgCQkJcmhvc3QgPSBOVUxMOworLQkJcmV0dXJuIGV2YWx1YXRlX25vdGlubmV0Z3Iocmhvc3QsIHVzZXIsIHJpZ2h0KTsKKysJCXJldHVybiBldmFsdWF0ZV9ub3Rpbm5ldGdyKHBhbWgsIHJob3N0LCB1c2VyLCByaWdodCk7CisgCX0KKyAJLyogRmFpbCBjbG9zZWQuICovCisgCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgzNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDIwMCBAQAorRGVzY3JpcHRpb246IGV4dHJhY3QgdGhlIHNlY3VyZXR0eSBsb2dpYyBmb3IgdXNlIHdpdGggdGhlICJudWxsb2tfc2VjdXJlIiBvcHRpb24KKyBpbnRyb2R1Y2VkIGluIHRoZSAiMDU1X3BhbV91bml4X251bGxva19zZWN1cmUiIHBhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtCistLS0gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvTWFrZWZpbGUuYW0JMjAxMy0wNy0wNSAxMTowODoyMy4yMjQ0ODMyMzcgKzA4MDAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbQkyMDEzLTA3LTA1IDExOjE1OjIxLjMwNDQ4NjQ1NiArMDgwMAorQEAgLTI0LDYgKzI0LDEwIEBAIGVuZGlmCisgc2VjdXJlbGliX0xUTElCUkFSSUVTID0gcGFtX3NlY3VyZXR0eS5sYQorIHBhbV9zZWN1cmV0dHlfbGFfTElCQUREID0gLUwkKHRvcF9idWlsZGRpcikvbGlicGFtIC1scGFtCisgCisrcGFtX3NlY3VyZXR0eV9sYV9TT1VSQ0VTID0JXAorKwlwYW1fc2VjdXJldHR5LmMJCVwKKysJdHR5X3NlY3VyZS5jCisrCisgaWYgRU5BQkxFX1JFR0VORVJBVEVfTUFOCisgbm9pbnN0X0RBVEEgPSBSRUFETUUKKyBSRUFETUU6IHBhbV9zZWN1cmV0dHkuOC54bWwKK2RpZmYgLXVycE4gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvcGFtX3NlY3VyZXR0eS5jIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYworLS0tIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYwkyMDEzLTA3LTA1IDExOjA3OjUwLjA2NDQ4MzU2OCArMDgwMAorKysrIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYwkyMDEzLTA3LTA1IDExOjEyOjIzLjk5NDQ4MzM0NCArMDgwMAorQEAgLTEsNyArMSw1IEBACisgLyogcGFtX3NlY3VyZXR0eSBtb2R1bGUgKi8KKyAKKy0jZGVmaW5lIFNFQ1VSRVRUWV9GSUxFICIvZXRjL3NlY3VyZXR0eSIKKy0jZGVmaW5lIFRUWV9QUkVGSVggICAgICIvZGV2LyIKKyAjZGVmaW5lIENNRExJTkVfRklMRSAgICIvcHJvYy9jbWRsaW5lIgorICNkZWZpbmUgQ09OU09MRUFDVElWRV9GSUxFCSIvc3lzL2NsYXNzL3R0eS9jb25zb2xlL2FjdGl2ZSIKKyAKK0BAIC00MCw2ICszOCw5IEBACisgI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2R1dGlsLmg+CisgI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9leHQuaD4KKyAKKytleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1dHR5bmFtZSk7CisrCisgI2RlZmluZSBQQU1fREVCVUdfQVJHICAgICAgIDB4MDAwMQorICNkZWZpbmUgUEFNX05PQ09OU09MRV9BUkcgICAweDAwMDIKKyAKK0BAIC03MywxMSArNzQsNyBAQCBzZWN1cmV0dHlfcGVyZm9ybV9jaGVjayAocGFtX2hhbmRsZV90ICpwCisgICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lOworICAgICBjb25zdCBjaGFyICp1dHR5bmFtZTsKKyAgICAgY29uc3Qgdm9pZCAqdm9pZF91dHR5bmFtZTsKKy0gICAgY2hhciB0dHlmaWxlbGluZVsyNTZdOworLSAgICBjaGFyIHB0bmFtZVsyNTZdOworLSAgICBzdHJ1Y3Qgc3RhdCB0dHlmaWxlaW5mbzsKKyAgICAgc3RydWN0IHBhc3N3ZCAqdXNlcl9wd2Q7CistICAgIEZJTEUgKnR0eWZpbGU7CisgCisgICAgIC8qIGxvZyBhIHRyYWlsIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICAgaWYgKGN0cmwgJiBQQU1fREVCVUdfQVJHKSB7CitAQCAtMTA1LDUwICsxMDIsNyBAQCBzZWN1cmV0dHlfcGVyZm9ybV9jaGVjayAocGFtX2hhbmRsZV90ICpwCisgCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CisgICAgIH0KKyAKKy0gICAgLyogVGhlIFBBTV9UVFkgaXRlbSBtYXkgYmUgcHJlZml4ZWQgd2l0aCAiL2Rldi8iIC0gc2tpcCB0aGF0ICovCistICAgIGlmIChzdHJuY21wKFRUWV9QUkVGSVgsIHV0dHluYW1lLCBzaXplb2YoVFRZX1BSRUZJWCktMSkgPT0gMCkgeworLQl1dHR5bmFtZSArPSBzaXplb2YoVFRZX1BSRUZJWCktMTsKKy0gICAgfQorLQorLSAgICBpZiAoc3RhdChTRUNVUkVUVFlfRklMRSwgJnR0eWZpbGVpbmZvKSkgeworLQlwYW1fc3lzbG9nKHBhbWgsIExPR19OT1RJQ0UsICJDb3VsZG4ndCBvcGVuICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKy0JcmV0dXJuIFBBTV9TVUNDRVNTOyAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBzZWN1cmV0dHkgaGFuZGxpbmcsCistCQkJICAgICAgIHRoaXMgbmVlZHMgdG8gc3VjY2VlZC4gIEJ1dCB3ZSBzdGlsbCBsb2cgdGhlCistCQkJICAgICAgIGVycm9yLiAqLworLSAgICB9CistCistICAgIGlmICgodHR5ZmlsZWluZm8uc3RfbW9kZSAmIFNfSVdPVEgpIHx8ICFTX0lTUkVHKHR0eWZpbGVpbmZvLnN0X21vZGUpKSB7CistCS8qIElmIHRoZSBmaWxlIGlzIHdvcmxkIHdyaXRhYmxlIG9yIGlzIG5vdCBhCistCSAgIG5vcm1hbCBmaWxlLCByZXR1cm4gZXJyb3IgKi8KKy0JcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLAorLQkJICAgIiVzIGlzIGVpdGhlciB3b3JsZCB3cml0YWJsZSBvciBub3QgYSBub3JtYWwgZmlsZSIsCistCQkgICBTRUNVUkVUVFlfRklMRSk7CistCXJldHVybiBQQU1fQVVUSF9FUlI7CistICAgIH0KKy0KKy0gICAgdHR5ZmlsZSA9IGZvcGVuKFNFQ1VSRVRUWV9GSUxFLCJyIik7CistICAgIGlmICh0dHlmaWxlID09IE5VTEwpIHsgLyogQ2hlY2sgdGhhdCB3ZSBvcGVuZWQgaXQgc3VjY2Vzc2Z1bGx5ICovCistCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwgIkVycm9yIG9wZW5pbmcgJXM6ICVtIiwgU0VDVVJFVFRZX0ZJTEUpOworLQlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOworLSAgICB9CistCistICAgIGlmIChpc2RpZ2l0KHV0dHluYW1lWzBdKSkgeworLQlzbnByaW50ZihwdG5hbWUsIHNpemVvZihwdG5hbWUpLCAicHRzLyVzIiwgdXR0eW5hbWUpOworLSAgICB9IGVsc2UgeworLQlwdG5hbWVbMF0gPSAnXDAnOworLSAgICB9CistCistICAgIHJldHZhbCA9IDE7CistCistICAgIHdoaWxlICgoZmdldHModHR5ZmlsZWxpbmUsIHNpemVvZih0dHlmaWxlbGluZSktMSwgdHR5ZmlsZSkgIT0gTlVMTCkKKy0JICAgJiYgcmV0dmFsKSB7CistCWlmICh0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPT0gJ1xuJykKKy0JICAgIHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9ICdcMCc7CistCistCXJldHZhbCA9ICggc3RyY21wKHR0eWZpbGVsaW5lLCB1dHR5bmFtZSkKKy0JCSAgICYmICghcHRuYW1lWzBdIHx8IHN0cmNtcChwdG5hbWUsIHV0dHluYW1lKSkgKTsKKy0gICAgfQorLSAgICBmY2xvc2UodHR5ZmlsZSk7CisrICAgIHJldHZhbCA9IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUocGFtaCwgdXR0eW5hbWUpOworIAorICAgICBpZiAocmV0dmFsICYmICEoY3RybCAmIFBBTV9OT0NPTlNPTEVfQVJHKSkgeworICAgICAgICAgRklMRSAqY21kbGluZWZpbGU7CitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUuYyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMKKy0tLSBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMJMTk3MC0wMS0wMSAwODozMDowMC4wMDAwMDAwMDAgKzA4MzAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMJMjAxMy0wNy0wNSAxMToxNDoyMS41MzQ0ODI5MDAgKzA4MDAKK0BAIC0wLDAgKzEsOTAgQEAKKysvKgorKyAqIEEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgcGFydGljdWxhciBsaW5lIGlzIGluIC9ldGMvc2VjdXJldHR5CisrICovCisrCisrCisrI2RlZmluZSBTRUNVUkVUVFlfRklMRSAiL2V0Yy9zZWN1cmV0dHkiCisrI2RlZmluZSBUVFlfUFJFRklYICAgICAiL2Rldi8iCisrCisrLyogVGhpcyBmdW5jdGlvbiB0YWtlbiBvdXQgb2YgcGFtX3NlY3VyZXR0eSBieSBTYW0gSGFydG1hbgorKyAqIDxoYXJ0bWFuc0BkZWJpYW4ub3JnPiovCisrLyoKKysgKiBieSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+LCBSZWQgSGF0IFNvZnR3YXJlLgorKyAqIEp1bHkgMjUsIDE5OTYuCisrICogU2xpZ2h0IG1vZGlmaWNhdGlvbnMgQUdNLiAxOTk2LzEyLzMKKysgKi8KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdWxlcy5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8c3lzbG9nLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdXRpbC5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fZXh0Lmg+CisrCisrZXh0ZXJuIGludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworKworK2ludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqdXR0eW5hbWUpCisreworKyAgICBpbnQgcmV0dmFsID0gUEFNX0FVVEhfRVJSOworKyAgICBjaGFyIHR0eWZpbGVsaW5lWzI1Nl07CisrICAgIGNoYXIgcHRuYW1lWzI1Nl07CisrICAgIHN0cnVjdCBzdGF0IHR0eWZpbGVpbmZvOworKyAgICBGSUxFICp0dHlmaWxlOworKyAgICAvKiBUaGUgUEFNX1RUWSBpdGVtIG1heSBiZSBwcmVmaXhlZCB3aXRoICIvZGV2LyIgLSBza2lwIHRoYXQgKi8KKysgICAgaWYgKHN0cm5jbXAoVFRZX1BSRUZJWCwgdXR0eW5hbWUsIHNpemVvZihUVFlfUFJFRklYKS0xKSA9PSAwKQorKwl1dHR5bmFtZSArPSBzaXplb2YoVFRZX1BSRUZJWCktMTsKKysKKysgICAgaWYgKHN0YXQoU0VDVVJFVFRZX0ZJTEUsICZ0dHlmaWxlaW5mbykpIHsKKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfTk9USUNFLCAiQ291bGRuJ3Qgb3BlbiAlczogJW0iLAorKwkgICAgICAgICAgIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9TVUNDRVNTOyAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBzZWN1cmV0dHkgaGFuZGxpbmcsCisrCQkJICAgICAgIHRoaXMgbmVlZHMgdG8gc3VjY2VlZC4gIEJ1dCB3ZSBzdGlsbCBsb2cgdGhlCisrCQkJICAgICAgIGVycm9yLiAqLworKyAgICB9CisrCisrICAgIGlmICgodHR5ZmlsZWluZm8uc3RfbW9kZSAmIFNfSVdPVEgpIHx8ICFTX0lTUkVHKHR0eWZpbGVpbmZvLnN0X21vZGUpKSB7CisrCS8qIElmIHRoZSBmaWxlIGlzIHdvcmxkIHdyaXRhYmxlIG9yIGlzIG5vdCBhCisrCSAgIG5vcm1hbCBmaWxlLCByZXR1cm4gZXJyb3IgKi8KKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLAorKwkgICAgICAgICAgICIlcyBpcyBlaXRoZXIgd29ybGQgd3JpdGFibGUgb3Igbm90IGEgbm9ybWFsIGZpbGUiLAorKwkgICAgICAgICAgIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9BVVRIX0VSUjsKKysgICAgfQorKworKyAgICB0dHlmaWxlID0gZm9wZW4oU0VDVVJFVFRZX0ZJTEUsInIiKTsKKysgICAgaWYodHR5ZmlsZSA9PSBOVUxMKSB7IC8qIENoZWNrIHRoYXQgd2Ugb3BlbmVkIGl0IHN1Y2Nlc3NmdWxseSAqLworKwlwYW1fc3lzbG9nKHBhbWgsIExPR19FUlIsICJFcnJvciBvcGVuaW5nICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9TRVJWSUNFX0VSUjsKKysgICAgfQorKworKyAgICBpZiAoaXNkaWdpdCh1dHR5bmFtZVswXSkpIHsKKysJc25wcmludGYocHRuYW1lLCBzaXplb2YocHRuYW1lKSwgInB0cy8lcyIsIHV0dHluYW1lKTsKKysgICAgfSBlbHNlIHsKKysJcHRuYW1lWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgICByZXR2YWwgPSAxOworKworKyAgICB3aGlsZSAoKGZnZXRzKHR0eWZpbGVsaW5lLHNpemVvZih0dHlmaWxlbGluZSktMSwgdHR5ZmlsZSkgIT0gTlVMTCkgCisrCSAgICYmIHJldHZhbCkgeworKwlpZih0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPT0gJ1xuJykKKysJICAgIHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9ICdcMCc7CisrCXJldHZhbCA9ICggc3RyY21wKHR0eWZpbGVsaW5lLHV0dHluYW1lKQorKwkgICAgICAgICAgICYmICghcHRuYW1lWzBdIHx8IHN0cmNtcChwdG5hbWUsIHV0dHluYW1lKSkgKTsKKysgICAgfQorKyAgICBmY2xvc2UodHR5ZmlsZSk7CisrCisrICAgIGlmKHJldHZhbCkgeworKwlyZXR2YWwgPSBQQU1fQVVUSF9FUlI7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHJldHZhbDsKKyt9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQxZTgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaApAQCAtMCwwICsxLDI0MCBAQAorRnJvbSA5YmRjMTk3NDc0Nzk1ZjJkMDAwYzJiYzA0ZjU4ZjdjZWY4ODk4ZjIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW1hcm5hdGggVmFsbHVyaSA8YW1hcm5hdGgudmFsbHVyaUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDE1IEp1bCAyMDE1IDEzOjA3OjIwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERlYmlhbiBwYXRjaCB0byBhZGQgYSBuZXcgJ251bGxva19zZWN1cmUnIG9wdGlvbiB0byBwYW1fdW5peCwKKyB3aGljaCBhY2NlcHRzIHVzZXJzIHdpdGggbnVsbCBwYXNzd29yZHMgb25seSB3aGVuIHRoZSBhcHBsaWNhbnQgaXMgY29ubmVjdGVkCisgZnJvbSBhIHR0eSBsaXN0ZWQgaW4gL2V0Yy9zZWN1cmV0dHkuCisKK0F1dGhvcnM6IFNhbSBIYXJ0bWFuIDxoYXJ0bWFuc0BkZWJpYW4ub3JnPiwKKyAgICAgICAgIFN0ZXZlIExhbmdhc2VrIDx2b3Jsb25AZGViaWFuLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCit2MjoKKwktIEZvcndhcmQgcG9ydGVkIGZyb20gdjEuMS42IHRvIHYxLjIuMQorCitTaWduZWQtb2ZmLWJ5OiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4KKy0tLQorIG1vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0gICAgfCAgMyArKy0KKyBtb2R1bGVzL3BhbV91bml4L1JFQURNRSAgICAgICAgIHwgMTEgKysrKysrKysrKy0KKyBtb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjggICAgIHwgIDkgKysrKysrKystCisgbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbCB8IDE5ICsrKysrKysrKysrKysrKysrKy0KKyBtb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYyAgICAgIHwgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQorIG1vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oICAgICAgfCAgOCArKysrKystLQorIDYgZmlsZXMgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtIGIvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbQoraW5kZXggNTZlZDU5MS4uOWEzNzJhYyAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KK0BAIC0zMCw3ICszMCw4IEBAIGlmIEhBVkVfVkVSU0lPTklORworICAgcGFtX3VuaXhfbGFfTERGTEFHUyArPSAtV2wsLS12ZXJzaW9uLXNjcmlwdD0kKHNyY2RpcikvLi4vbW9kdWxlcy5tYXAKKyBlbmRpZgorIHBhbV91bml4X2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJwYW0vbGlicGFtLmxhIFwKKy0JQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykKKysJQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykgXAorKwkuLi9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUubG8KKyAKKyBzZWN1cmVsaWJfTFRMSUJSQVJJRVMgPSBwYW1fdW5peC5sYQorIAorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKK2luZGV4IDM5MzVkYmEuLjc4ODBkOTEgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L1JFQURNRQorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKK0BAIC02Nyw3ICs2NywxNiBAQCBudWxsb2sKKyAKKyAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKKyAgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxvayBhcmd1bWVudCBvdmVycmlkZXMKKy0gICAgdGhpcyBkZWZhdWx0LgorKyAgICB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZQorKyAgICBzZXJ2aWNlLgorKworK251bGxva19zZWN1cmUKKysKKysgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKKysgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxva19zZWN1cmUgYXJndW1lbnQKKysgICAgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MKKysgICAgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mIHRoZSB2YWx1ZXMKKysgICAgZm91bmQgaW4gL2V0Yy9zZWN1cmV0dHkuCisgCisgdHJ5X2ZpcnN0X3Bhc3MKKyAKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjggYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKK2luZGV4IDMzOTE3OGIuLmE0YmQ5MDYgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAorQEAgLTkyLDcgKzkyLDE0IEBAIFR1cm5zIG9mZiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIG5hbWVseSBtZXNzYWdlcyBhYm91dCBzZXNzaW9uIG9wZW4gYW5kIGNsb3NlIHZpCisgLlJTIDQKKyBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rXCYuIFRoZQorIFxmQm51bGxva1xmUgorLWFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHRcJi4KKythcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUgc2VydmljZVwmLgorKy5SRQorKy5QUAorK1xmQm51bGxva19zZWN1cmVcZlIKKysuUlMgNAorK1RoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmtcJi4gVGhlCisrXGZCbnVsbG9rX3NlY3VyZVxmUgorK2FyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlIGFzIGxvbmcgYXMgdGhlIHZhbHVlIG9mIFBBTV9UVFkgaXMgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5XCYuCisgLlJFCisgLlBQCisgXGZCdHJ5X2ZpcnN0X3Bhc3NcZlIKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sIGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbAoraW5kZXggYThiNjRiYi4uMWNlZDZmNCAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKK0BAIC0xNTksNyArMTU5LDI0IEBACisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZQorICAgICAgICAgICAgIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4KKy0gICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2s8L29wdGlvbj4gYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdC4KKysgICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2s8L29wdGlvbj4gYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdAorKyAgICAgICAgICAgIGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUKKysgICAgICAgICAgICBzZXJ2aWNlLgorKyAgICAgICAgICA8L3BhcmE+CisrICAgICAgICA8L2xpc3RpdGVtPgorKyAgICAgIDwvdmFybGlzdGVudHJ5PgorKyAgICAgIDx2YXJsaXN0ZW50cnk+CisrICAgICAgICA8dGVybT4KKysgICAgICAgICAgPG9wdGlvbj5udWxsb2tfc2VjdXJlPC9vcHRpb24+CisrICAgICAgICA8L3Rlcm0+CisrICAgICAgICA8bGlzdGl0ZW0+CisrICAgICAgICAgIDxwYXJhPgorKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZQorKyAgICAgICAgICAgIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4KKysgICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2tfc2VjdXJlPC9vcHRpb24+IGFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzCisrICAgICAgICAgICAgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MKKysgICAgICAgICAgICB0aGUgc2VydmljZSBhcyBsb25nIGFzIHRoZSB2YWx1ZSBvZiBQQU1fVFRZIGlzIHNldCB0byBvbmUgb2YKKysgICAgICAgICAgICB0aGUgdmFsdWVzIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5LgorICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKK2luZGV4IGFiY2NkODIuLjIzNjE5NTcgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYworKysrIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKK0BAIC0xODksMTMgKzE4OSwyMiBAQCBpbnQgX3NldF9jdHJsKHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGZsYWdzLCBpbnQgKnJlbWVtYmVyLCBpbnQgKnJvdW5kcywKKyAJLyogbm93IHBhcnNlIHRoZSBhcmd1bWVudHMgdG8gdGhpcyBtb2R1bGUgKi8KKyAKKyAJZm9yICg7IGFyZ2MtLSA+IDA7ICsrYXJndikgeworKwkJaW50IHNsOworIAorIAkJRCgoInBhbV91bml4IGFyZzogJXMiLCAqYXJndikpOworIAorIAkJZm9yIChqID0gMDsgaiA8IFVOSVhfQ1RSTFNfOyArK2opIHsKKy0JCQlpZiAodW5peF9hcmdzW2pdLnRva2VuCistCQkJICAgICYmICFzdHJuY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4sIHN0cmxlbih1bml4X2FyZ3Nbal0udG9rZW4pKSkgeworLQkJCQlicmVhazsKKysJCQlpZiAodW5peF9hcmdzW2pdLnRva2VuKSB7CisrCQkJCXNsID0gc3RybGVuKHVuaXhfYXJnc1tqXS50b2tlbik7CisrCQkJCWlmICh1bml4X2FyZ3Nbal0udG9rZW5bc2wtMV0gPT0gJz0nKSB7CisrCQkJCQkvKiBleGNsdWRlIGFyZ3VtZW50IGZyb20gY29tcGFyaXNvbiAqLworKwkJCQkJaWYgKCFzdHJuY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4sIHNsKSkKKysJCQkJCQlicmVhazsKKysJCQkJfSBlbHNlIHsKKysJCQkJLyogY29tcGFyZSBmdWxsIHN0cmluZ3MgKi8KKysJCQkJCWlmICghc3RyY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4pKQorKwkJCQkJCWJyZWFrOworKwkJCQl9CisgCQkJfQorIAkJfQorIAorQEAgLTU2Niw2ICs1NzUsNyBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAorICAgICBpZiAoY2hpbGQgPT0gMCkgeworIAlzdGF0aWMgY2hhciAqZW52cFtdID0geyBOVUxMIH07CisgCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworKwlpbnQgbnVsbG9rID0gb2ZmKFVOSVhfX05PTlVMTCwgY3RybCk7CisgCisgCS8qIFhYWCAtIHNob3VsZCByZWFsbHkgdGlkeSB1cCBQQU0gaGVyZSB0b28gKi8KKyAKK0BAIC01OTMsNyArNjAzLDE2IEBAIHN0YXRpYyBpbnQgX3VuaXhfcnVuX2hlbHBlcl9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICpwYXNzd2QsCisgCS8qIGV4ZWMgYmluYXJ5IGhlbHBlciAqLworIAlhcmdzWzBdID0gQ0hLUFdEX0hFTFBFUjsKKyAJYXJnc1sxXSA9IHVzZXI7CistCWlmIChvZmYoVU5JWF9fTk9OVUxMLCBjdHJsKSkgewkvKiB0aGlzIG1lYW5zIHdlJ3ZlIHN1Y2NlZWRlZCAqLworKwlpZiAob24oVU5JWF9OVUxMT0tfU0VDVVJFLCBjdHJsKSkgeworKwkJY29uc3Qgdm9pZCAqdXR0eW5hbWU7CisrCQlyZXR2YWwgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1RUWSwgJnV0dHluYW1lKTsKKysJCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NFU1MgfHwgdXR0eW5hbWUgPT0gTlVMTAorKwkJCXx8IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUocGFtaCwgKGNvbnN0IGNoYXIgKil1dHR5bmFtZSkgIT0gUEFNX1NVQ0NFU1MpIHsKKysJCQludWxsb2sgPSAwOworKwkJfQorKwl9CisrCisrCWlmIChudWxsb2spIHsKKyAJICBhcmdzWzJdPSJudWxsb2siOworIAl9IGVsc2UgeworIAkgIGFyZ3NbMl09Im5vbnVsbCI7CitAQCAtNjc4LDYgKzY5NywxNyBAQCBfdW5peF9ibGFua3Bhc3N3ZCAocGFtX2hhbmRsZV90ICpwYW1oLCB1bnNpZ25lZCBpbnQgY3RybCwgY29uc3QgY2hhciAqbmFtZSkKKyAJaWYgKG9uKFVOSVhfX05PTlVMTCwgY3RybCkpCisgCQlyZXR1cm4gMDsJLyogd2lsbCBmYWlsIGJ1dCBkb24ndCBsZXQgb24geWV0ICovCisgCisrCWlmIChvbihVTklYX05VTExPS19TRUNVUkUsIGN0cmwpKSB7CisrCQlpbnQgcmV0dmFsMjsKKysJCWNvbnN0IHZvaWQgKnV0dHluYW1lOworKwkJcmV0dmFsMiA9IHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fVFRZLCAmdXR0eW5hbWUpOworKwkJaWYgKHJldHZhbDIgIT0gUEFNX1NVQ0NFU1MgfHwgdXR0eW5hbWUgPT0gTlVMTCkKKysJCQlyZXR1cm4gMDsKKysKKysJCWlmIChfcGFtbW9kdXRpbF90dHlfc2VjdXJlKHBhbWgsIChjb25zdCBjaGFyICopdXR0eW5hbWUpICE9IFBBTV9TVUNDRVNTKQorKwkJCXJldHVybiAwOworKwl9CisrCisgCS8qIFVOSVggcGFzc3dvcmRzIGFyZWEgKi8KKyAKKyAJcmV0dmFsID0gZ2V0X3B3ZF9oYXNoKHBhbWgsIG5hbWUsICZwd2QsICZzYWx0KTsKK0BAIC03NjQsNyArNzk0LDcgQEAgaW50IF91bml4X3ZlcmlmeV9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oLCBjb25zdCBjaGFyICpuYW1lCisgCQkJfQorIAkJfQorIAl9IGVsc2UgeworLQkJcmV0dmFsID0gdmVyaWZ5X3B3ZF9oYXNoKHAsIHNhbHQsIG9mZihVTklYX19OT05VTEwsIGN0cmwpKTsKKysJCXJldHZhbCA9IHZlcmlmeV9wd2RfaGFzaChwLCBzYWx0LCBfdW5peF9ibGFua3Bhc3N3ZChwYW1oLCBjdHJsLCBuYW1lKSk7CisgCX0KKyAKKyAJaWYgKHJldHZhbCA9PSBQQU1fU1VDQ0VTUykgeworZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKK2luZGV4IDM3MjljZTAuLjQzY2RiZWEgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaAorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKK0BAIC05OSw4ICs5OSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAjZGVmaW5lIFVOSVhfTUlOX1BBU1NfTEVOICAgICAgICAyNwkvKiBtaW4gbGVuZ3RoIGZvciBwYXNzd29yZCAqLworICNkZWZpbmUgVU5JWF9RVUlFVAkJIDI4CS8qIERvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKi8KKyAjZGVmaW5lIFVOSVhfREVTICAgICAgICAgICAgICAgICAyOSAgICAgLyogREVTLCBkZWZhdWx0ICovCisrI2RlZmluZSBVTklYX05VTExPS19TRUNVUkUgICAgICAgMzAgICAgIC8qIE5VTEwgcGFzc3dvcmRzIGFsbG93ZWQgb25seSBvbiBzZWN1cmUgdHR5cyAqLworIC8qIC0tLS0tLS0tLS0tLS0tICovCistI2RlZmluZSBVTklYX0NUUkxTXyAgICAgICAgICAgICAgMzAJLyogbnVtYmVyIG9mIGN0cmwgYXJndW1lbnRzIGRlZmluZWQgKi8KKysjZGVmaW5lIFVOSVhfQ1RSTFNfICAgICAgICAgICAgICAzMQkvKiBudW1iZXIgb2YgY3RybCBhcmd1bWVudHMgZGVmaW5lZCAqLworIAorICNkZWZpbmUgVU5JWF9ERVNfQ1JZUFQoY3RybCkJKG9mZihVTklYX01ENV9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CSUdDUllQVCxjdHJsKSYmb2ZmKFVOSVhfU0hBMjU2X1BBU1MsY3RybCkmJm9mZihVTklYX1NIQTUxMl9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CTE9XRklTSF9QQVNTLGN0cmwpKQorIAorQEAgLTExOCw3ICsxMTksNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KKyAvKiBVTklYX05PVF9TRVRfUEFTUyAqLyAgICB7Im5vdF9zZXRfcGFzcyIsICAgIF9BTExfT05fLCAgICAgICAgICAgICAgICAwMTAwLCAwfSwKKyAvKiBVTklYX19QUkVMSU0gKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwMjAwLCAwfSwKKyAvKiBVTklYX19VUERBVEUgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwNDAwLCAwfSwKKy0vKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDAxMDAwLCAwfSwKKysvKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwMjAwMDAwMDAwMCksICAgMDEwMDAsIDB9LAorIC8qIFVOSVhfX1FVSUVUICovICAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDIwMDAsIDB9LAorIC8qIFVOSVhfVVNFX0FVVEhUT0sgKi8gICAgIHsidXNlX2F1dGh0b2siLCAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDQwMDAsIDB9LAorIC8qIFVOSVhfU0hBRE9XICovICAgICAgICAgIHsic2hhZG93IiwgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAwMTAwMDAsIDB9LAorQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KKyAvKiBVTklYX01JTl9QQVNTX0xFTiAqLyAgICB7Im1pbmxlbj0iLAkJX0FMTF9PTl8sICAgICAgICAgMDQwMDAwMDAwMCwgMH0sCisgLyogVU5JWF9RVUlFVCAqLyAgICAgICAgICAgeyJxdWlldCIsICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAwMTAwMDAwMDAwMCwgMH0sCisgLyogVU5JWF9ERVMgKi8gICAgICAgICAgICAgeyJkZXMiLCAgICAgICAgICAgICBfQUxMX09OX14oMDI2MDQyMDAwMCksICAgICAgMCwgMX0sCisrLyogVU5JWF9OVUxMT0tfU0VDVVJFICovICAgeyJudWxsb2tfc2VjdXJlIiwgICBfQUxMX09OX14oMDEwMDApLCAgMDIwMDAwMDAwMDAsIDB9LAorIH07CisgCisgI2RlZmluZSBVTklYX0RFRkFVTFRTICAodW5peF9hcmdzW1VOSVhfX05PTlVMTF0uZmxhZykKK0BAIC0xNzEsNiArMTczLDggQEAgZXh0ZXJuIGludCBfdW5peF9yZWFkX3Bhc3N3b3JkKHBhbV9oYW5kbGVfdCAqIHBhbWgKKyAJCQksY29uc3QgY2hhciAqcHJvbXB0MgorIAkJCSxjb25zdCBjaGFyICpkYXRhX25hbWUKKyAJCQksY29uc3Qgdm9pZCAqKnBhc3MpOworK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsCisrICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworIAorIGV4dGVybiBpbnQgX3VuaXhfcnVuX3ZlcmlmeV9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLAorIAkJCXVuc2lnbmVkIGludCBjdHJsLCBjb25zdCBjaGFyICp1c2VyLCBpbnQgKmRheXNsZWZ0KTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYWNjb3VudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZiMTczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQKQEAgLTAsMCArMSwyNSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1hY2NvdW50IC0gYXV0aG9yaXphdGlvbiBzZXR0aW5ncyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiB0aGUgYXV0aG9yaXphdGlvbiBtb2R1bGVzIHRoYXQgZGVmaW5lCisjIHRoZSBjZW50cmFsIGFjY2VzcyBwb2xpY3kgZm9yIHVzZSBvbiB0aGUgc3lzdGVtLiAgVGhlIGRlZmF1bHQgaXMgdG8KKyMgb25seSBkZW55IHNlcnZpY2UgdG8gdXNlcnMgd2hvc2UgYWNjb3VudHMgYXJlIGV4cGlyZWQgaW4gL2V0Yy9zaGFkb3cuCisjCisjIEFzIG9mIHBhbSAxLjAuMS02LCB0aGlzIGZpbGUgaXMgbWFuYWdlZCBieSBwYW0tYXV0aC11cGRhdGUgYnkgZGVmYXVsdC4KKyMgVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29uZmlndXJlIGFueQorIyBsb2NhbCBtb2R1bGVzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGRlZmF1bHQgYmxvY2ssIGFuZCB1c2UKKyMgcGFtLWF1dGgtdXBkYXRlIHRvIG1hbmFnZSBzZWxlY3Rpb24gb2Ygb3RoZXIgbW9kdWxlcy4gIFNlZQorIyBwYW0tYXV0aC11cGRhdGUoOCkgZm9yIGRldGFpbHMuCisjCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCithY2NvdW50CVtzdWNjZXNzPTEgbmV3X2F1dGh0b2tfcmVxZD1kb25lIGRlZmF1bHQ9aWdub3JlXQlwYW1fdW5peC5zbyAKKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK2FjY291bnQJcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCithY2NvdW50CXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorIyBlbmQgb2YgcGFtLWF1dGgtdXBkYXRlIGNvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYXV0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBiNjlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGgKQEAgLTAsMCArMSwxOCBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1hdXRoIC0gYXV0aGVudGljYXRpb24gc2V0dGluZ3MgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMgdGhhdCBkZWZpbmUKKyMgdGhlIGNlbnRyYWwgYXV0aGVudGljYXRpb24gc2NoZW1lIGZvciB1c2Ugb24gdGhlIHN5c3RlbQorIyAoZS5nLiwgL2V0Yy9zaGFkb3csIExEQVAsIEtlcmJlcm9zLCBldGMuKS4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUKKyMgdHJhZGl0aW9uYWwgVW5peCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLgorCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorYXV0aAlbc3VjY2Vzcz0xIGRlZmF1bHQ9aWdub3JlXQlwYW1fdW5peC5zbyBudWxsb2tfc2VjdXJlCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCithdXRoCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorYXV0aAlyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODk2MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tcGFzc3dvcmQgLSBwYXNzd29yZC1yZWxhdGVkIG1vZHVsZXMgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGRlZmluZSB0aGUgc2VydmljZXMgdG8gYmUKKyMgdXNlZCB0byBjaGFuZ2UgdXNlciBwYXNzd29yZHMuICBUaGUgZGVmYXVsdCBpcyBwYW1fdW5peC4KKworIyBFeHBsYW5hdGlvbiBvZiBwYW1fdW5peCBvcHRpb25zOgorIworIyBUaGUgInNoYTUxMiIgb3B0aW9uIGVuYWJsZXMgc2FsdGVkIFNIQTUxMiBwYXNzd29yZHMuICBXaXRob3V0IHRoaXMgb3B0aW9uLAorIyB0aGUgZGVmYXVsdCBpcyBVbml4IGNyeXB0LiAgUHJpb3IgcmVsZWFzZXMgdXNlZCB0aGUgb3B0aW9uICJtZDUiLgorIworIyBUaGUgIm9ic2N1cmUiIG9wdGlvbiByZXBsYWNlcyB0aGUgb2xkIGBPQlNDVVJFX0NIRUNLU19FTkFCJyBvcHRpb24gaW4KKyMgbG9naW4uZGVmcy4KKyMKKyMgU2VlIHRoZSBwYW1fdW5peCBtYW5wYWdlIGZvciBvdGhlciBvcHRpb25zLgorCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorcGFzc3dvcmQJW3N1Y2Nlc3M9MSBkZWZhdWx0PWlnbm9yZV0JcGFtX3VuaXguc28gb2JzY3VyZSBzaGE1MTIKKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Bhc3N3b3JkCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorcGFzc3dvcmQJcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTU1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbgpAQCAtMCwwICsxLDE5IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLXNlc3Npb24gLSBzZXNzaW9uLXJlbGF0ZWQgbW9kdWxlcyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBtb2R1bGVzIHRoYXQgZGVmaW5lIHRhc2tzIHRvIGJlIHBlcmZvcm1lZAorIyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBzZXNzaW9ucyBvZiAqYW55KiBraW5kIChib3RoIGludGVyYWN0aXZlIGFuZAorIyBub24taW50ZXJhY3RpdmUpLgorIworCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorc2Vzc2lvbglbZGVmYXVsdD0xXQkJCXBhbV9wZXJtaXQuc28KKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Nlc3Npb24JcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCitzZXNzaW9uCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorc2Vzc2lvbglyZXF1aXJlZAlwYW1fdW5peC5zbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTEwYmIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKQEAgLTAsMCArMSwxOSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIC0gc2Vzc2lvbi1yZWxhdGVkIG1vZHVsZXMKKyMgY29tbW9uIHRvIGFsbCBub24taW50ZXJhY3RpdmUgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBkZWZpbmUgdGFza3MgdG8gYmUgcGVyZm9ybWVkCisjIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGFsbCBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMuCisjCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCitzZXNzaW9uCVtkZWZhdWx0PTFdCQkJcGFtX3Blcm1pdC5zbworIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworc2Vzc2lvbglyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK3Nlc3Npb24JcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCitzZXNzaW9uCXJlcXVpcmVkCXBhbV91bml4LnNvIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9vdGhlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk3MGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIKQEAgLTAsMCArMSwyNCBAQAorIworIyAvZXRjL3BhbS5kL290aGVyIC0gc3BlY2lmeSB0aGUgUEFNIGZhbGxiYWNrIGJlaGF2aW91cgorIworIyBOb3RlIHRoYXQgdGhpcyBmaWxlIGlzIHVzZWQgZm9yIGFueSB1bnNwZWNpZmllZCBzZXJ2aWNlOyBmb3IgZXhhbXBsZQorI2lmIC9ldGMvcGFtLmQvY3JvbiAgc3BlY2lmaWVzIG5vIHNlc3Npb24gbW9kdWxlcyBidXQgY3JvbiBjYWxscworI3BhbV9vcGVuX3Nlc3Npb24sIHRoZSBzZXNzaW9uIG1vZHVsZSBvdXQgb2YgL2V0Yy9wYW0uZC9vdGhlciBpcworI3VzZWQuICAKKworIyBXZSB1c2UgcGFtX3dhcm4uc28gdG8gZ2VuZXJhdGUgc3lzbG9nIG5vdGVzIHRoYXQgdGhlICdvdGhlcicKKyNmYWxsYmFjayBydWxlcyBhcmUgYmVpbmcgdXNlZCAoYXMgYSBoaW50IHRvIHN1Z2dlc3QgeW91IHNob3VsZCBzZXR1cAorI3NwZWNpZmljIFBBTSBydWxlcyBmb3IgdGhlIHNlcnZpY2UgYW5kIGFpZCB0byBkZWJ1Z2dpbmcpLiBUaGVuIHRvIGJlCisjc2VjdXJlLCBkZW55IGFjY2VzcyB0byBhbGwgc2VydmljZXMgYnkgZGVmYXVsdC4gCisKK2F1dGggICAgICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCithdXRoICAgICAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbworCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworYWNjb3VudCAgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KKworcGFzc3dvcmQgICByZXF1aXJlZCAgICAgcGFtX3dhcm4uc28KK3Bhc3N3b3JkICAgcmVxdWlyZWQgICAgIHBhbV9kZW55LnNvCisKK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzMwOTdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIKQEAgLTAsMCArMSwxNjkgQEAKK1NVTU1BUlkgPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcykiCitERVNDUklQVElPTiA9ICJMaW51eC1QQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzIGZvciBMaW51eCksIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBhdXRoZW50aWNhdGluZyB1c2VycyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saW51eC1wYW0vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtL25ld3RpY2tldCIKK1NFQ1RJT04gPSAiYmFzZSIKKyMgUEFNIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBCU0QuCisjIC9ldGMvcGFtLmQgY29tZXMgZnJvbSBEZWJpYW4gbGlicGFtLXJ1bnRpbWUgaW4gMjAwOS0xMSAoYXQgdGhhdCB0aW1lCisjIGxpYnBhbS1ydW50aW1lLTEuMC4xIGlzIEdQTHYyKyksIGJ5IG9wZW5lbWJlZGRlZAorTElDRU5TRSA9ICJHUEx2MisgfCBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZWI1YzFiZjg1NGU4ODgxMDA1ZDY3MzU5OWVlNzRkMyIKKworU1JDX1VSSSA9ICJodHRwOi8vbGludXgtcGFtLm9yZy9saWJyYXJ5L0xpbnV4LVBBTS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3BhbSBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYWNjb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYXV0aCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tcGFzc3dvcmQgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24gXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvb3RoZXIgXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWRjNTMwNjc1NTZkMmRkNTY3ODA4ZmQ1MDk1MTlkZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzQyYjEyMTFjMGQzYjIwM2E3ZGYyNTQwYTViMDNhNDI4YTA4N2JkOGE0OGMxN2U0OWFlMjY4Zjk5MmIzMzRkOSIKKworU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly9wYW0tbm8taW5uZXRnci5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL3BhbS1uby1pbm5ldGdyLnBhdGNoIgorCitERVBFTkRTID0gImJpc29uIGZsZXggZmxleC1uYXRpdmUgY3JhY2tsaWIiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZGItdW5pcXVlbmFtZT1fcGFtIFwKKyAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9zZWN1cml0eSBcCisgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uaXMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZWdlbmVyYXRlLWRvY3UgXAorCQktLWRpc2FibGUtcHJlbHVkZSIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorCitQUiA9ICJyNSIKKworUyA9ICIke1dPUktESVJ9L0xpbnV4LVBBTS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0LCIKKworUEFDS0FHRVMgKz0gIiR7UE59LXJ1bnRpbWUgJHtQTn0teHRlc3RzIgorRklMRVNfJHtQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlci8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L0xpbnV4LVBBTS94dGVzdHMvLmRlYnVnIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSAke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tcnVudGltZSA9ICIke3N5c2NvbmZkaXJ9IgorRklMRVNfJHtQTn0teHRlc3RzID0gIiR7ZGF0YWRpcn0vTGludXgtUEFNL3h0ZXN0cyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7TUxQUkVGSVh9cGFtLXBsdWdpbi0uKiIKKworZGVmIGdldF9tdWx0aWxpYl9iaXQoZCk6CisgICAgYmFzZWxpYiA9IGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkgb3IgJycKKyAgICByZXR1cm4gYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKworbGlicGFtX3N1ZmZpeCA9ICJzdWZmaXgke0BnZXRfbXVsdGlsaWJfYml0KGQpfSIKKworUlBST1ZJREVTXyR7UE59ICs9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IgorUlBST1ZJREVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7UE59LXJ1bnRpbWUtJHtsaWJwYW1fc3VmZml4fSIKKworUkRFUEVORFNfJHtQTn0tcnVudGltZSA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tZGVueS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcGVybWl0LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi13YXJuLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi11bml4LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICIKK1JERVBFTkRTXyR7UE59LXh0ZXN0cyA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tYWNjZXNzLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZWJ1Zy0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tY3JhY2tsaWItJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXB3aGlzdG9yeS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tc3VjY2VlZC1pZi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tdGltZS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICBjb3JldXRpbHMiCisKKyMgRklYTUU6IE5hdGl2ZSBzdWZmaXggYnJlYWtzIGhlcmUsIGRpc2FibGUgaXQgZm9yIG5vdworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGRlZiBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKHBuLCBkaXIsIGZpbGUpOgorICAgICAgICBuZiA9IG9zLnBhdGguam9pbihkaXIsIGZpbGUpCisgICAgICAgIG9mID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgb2Y6CisgICAgICAgICAgICBuZiA9IG9mICsgIiAiICsgbmYKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwbiwgbmYpCisKKyAgICBkZWYgcGFtX3BsdWdpbl9ob29rKGZpbGUsIHBrZywgcGF0dGVybiwgZm9ybWF0LCBiYXNlbmFtZSk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgbGlicGFtX3N1ZmZpeCA9IGQuZ2V0VmFyKCdsaWJwYW1fc3VmZml4JywgVHJ1ZSkKKworICAgICAgICByZGVwcyA9IGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiByZGVwczoKKyAgICAgICAgICAgIHJkZXBzID0gcmRlcHMgKyAiICIgKyBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJkZXBzID0gcG4gKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCByZGVwcykKKworICAgICAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcHJvdmlkZXM6CisgICAgICAgICAgICBwcm92aWRlcyA9IHByb3ZpZGVzICsgIiAiICsgcGtnICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvdmlkZXMgPSBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgcHJvdmlkZXMpCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgZHZhciA9IGJiLmRhdGEuZXhwYW5kKCcke1dPUktESVJ9L3BhY2thZ2UnLCBkLCBUcnVlKQorICAgIHBhbV9saWJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHknKQorICAgIHBhbV9zYmluZGlyID0gZC5leHBhbmQoJyR7c2JpbmRpcn0nKQorICAgIHBhbV9maWx0ZXJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlcicpCisgICAgcGFtX3BrZ25hbWUgPSBtbHByZWZpeCArICdwYW0tcGx1Z2luJXMnCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwYW1fbGliZGlyLCAnXnBhbSguKilcLnNvJCcsIHBhbV9wa2duYW1lLAorICAgICAgICAgICAgICAgICAgICAgICdQQU0gcGx1Z2luIGZvciAlcycsIGhvb2s9cGFtX3BsdWdpbl9ob29rLCBleHRyYV9kZXBlbmRzPScnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfY2hrcHdkJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdW5peCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICd1bml4X3VwZGF0ZScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5MicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGFsbHkyJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGltZXN0YW1wJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90aW1lc3RhbXBfY2hlY2snKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi1ta2hvbWVkaXInICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAnbWtob21lZGlyX2hlbHBlcicpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLWNvbnNvbGUnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX2NvbnNvbGVfYXBwbHknKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9maWx0ZXJkaXIsICdeKC4qKSQnLCAncGFtLWZpbHRlci0lcycsICdQQU0gZmlsdGVyIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL3J1biB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3BhbSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wYW0uZC8qICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCisJIyBUaGUgbHNiIHJlcXVpcmVzIHVuaXhfY2hrcHdkIGhhcyBzZXR1aWQgcGVybWlzc2lvbgorCWNobW9kIDQ3NTUgJHtEfSR7c2JpbmRpcn0vdW5peF9jaGtwd2QKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJZWNobyAic2Vzc2lvbiBvcHRpb25hbCBwYW1fc3lzdGVtZC5zbyIgPj4gJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24KKwlmaQorfQorCitweXRob24gZG9fcGFtX3Nhbml0eSAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBiYi53YXJuKCJCdWlsZGluZyBsaWJwYW0gYnV0ICdwYW0nIGlzbid0IGluIERJU1RST19GRUFUVVJFUywgUEFNIHdvbid0IHdvcmsgY29ycmVjdGx5IikKK30KK2FkZHRhc2sgcGFtX3Nhbml0eSBiZWZvcmUgZG9fY29uZmlndXJlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIG5hdGl2ZSIKKworQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24iCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYXV0aCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1wYXNzd29yZCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLWFjY291bnQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzc2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGQ3OGRkMDg3YzRlYzQ3MTVhYWI1ZmUxMTU2NjhlNzI2MDQ2ZWNkNzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxODoxNjowNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIGZjbnRsLmggaW4gL3BsYXRmb3JtX2RlZnMuaAorCitleHBvc2VkIHdoZW4gY29tcGlsaW5nIHVzaW5nIG11c2wKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmggYi9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAoraW5kZXggMmI1NTc1Mi4uMzJiZDNkMyAxMDA2NDQKKy0tLSBhL2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oCisrKysgYi9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAorQEAgLTQyLDYgKzQyLDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTkwYmUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDI4NSBAQAorYW1fX3R0eV9jb2xvcnNfZHVtbXkgPSBcCisgIG1nbj0gcmVkPSBncm49IGxnbj0gYmx1PSBicmc9IHN0ZD07IFwKKyAgYW1fX2NvbG9yX3Rlc3RzPW5vCisKK2FtX190dHlfY29sb3JzID0gXAorJChhbV9fdHR5X2NvbG9yc19kdW1teSk7IFwKK3Rlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgIT0gWG5vIFwKKyYmIHRlc3QgIlgkJFRFUk0iICE9IFhkdW1iIFwKKyYmIHsgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhhbHdheXMgfHwgdGVzdCAtdCAxIDI+L2Rldi9udWxsOyB9IFwKKyYmIHsgXAorICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCisgIHJlZD0nG1swOzMxbSc7IFwKKyAgZ3JuPScbWzA7MzJtJzsgXAorICBsZ249JxtbMTszMm0nOyBcCisgIGJsdT0nG1sxOzM0bSc7IFwKKyAgbWduPScbWzA7MzVtJzsgXAorICBicmc9JxtbMW0nOyBcCisgIHN0ZD0nG1ttJzsgXAorfQorCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19yc3RfdGl0bGUgPSB7IHNlZCAncy8uKi8gICAmICAgLztoO3MvLi89L2c7cDt4O3MvICokJC8vO3A7ZycgJiYgZWNobzsgfQorYW1fX3JzdF9zZWN0aW9uID0geyBzZWQgJ3A7cy8uLz0vZzsnICYmIGVjaG87IH0KK2FtX19zaF9lX3NldHVwID0gY2FzZSAkJC0gaW4gKmUqKSBzZXQgK2U7OyBlc2FjCisKK2FtX19jb21tb25fZHJpdmVyX2ZsYWdzID0gXAorICAtLWNvbG9yLXRlc3RzICIkJGFtX19jb2xvcl90ZXN0cyIgXAorICAtLWVuYWJsZS1oYXJkLWVycm9ycyAiJCRhbV9fZW5hYmxlX2hhcmRfZXJyb3JzIiBcCisgIC0tZXhwZWN0LWZhaWx1cmUgIiQkYW1fX2V4cGVjdF9mYWlsdXJlIgorYW1fX2NoZWNrX3ByZSA9IFwKKyQoYW1fX3NoX2Vfc2V0dXApOwkJCQkJXAorJChhbV9fdnBhdGhfYWRqX3NldHVwKSAkKGFtX192cGF0aF9hZGopCQkJXAorJChhbV9fdHR5X2NvbG9ycyk7CQkJCQlcCitzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOwkJCVwKK2FtX19vZGlyPWBlY2hvICIuLyRAIiB8IHNlZCAnc3wvW14vXSokJHx8J2A7CQlcCit0ZXN0ICJ4JCRhbV9fb2RpciIgPSB4LiB8fCAkKE1LRElSX1ApICIkJGFtX19vZGlyIiB8fCBleGl0ICQkPzsJXAoraWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsJCQlcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsJCQkJXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsJCQkJXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgCQkJCVwKK2lmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuCQlcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IAkJCQlcCitlbHNlCQkJCQkJCVwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IAkJCQlcCitmaTsgCQkJCQkJCVwKKyQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpICQoVEVTVFNfRU5WSVJPTk1FTlQpCisKK2FtX19zZXRfVEVTVFNfYmFzZXMgPSBcCisgIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCisgIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICBiYXNlcz1gZWNobyAkJGJhc2VzYAorCitSRUNIRUNLX0xPR1MgPSAkKFRFU1RfTE9HUykKK1RFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKK2FtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKK2FtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMToubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi5zaC5sb2c9LmxvZykKK1NIX0xPR19EUklWRVIgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC90ZXN0LWRyaXZlcgorU0hfTE9HX0NPTVBJTEUgPSAkKFNIX0xPR19DT01QSUxFUikKKworYW1fX3NldF9iID0gXAorICBjYXNlICckQCcgaW4gXAorICAgICovKikgXAorICAgICAgY2FzZSAnJConIGluIFwKKyAgICAgICAgKi8qKSBiPSckKic7OyBcCisgICAgICAgICAgKikgYj1gZWNobyAnJEAnIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCisgICAgICAgZXNhYzs7IFwKKyAgICAqKSBcCisgICAgICBiPSckKic7OyBcCisgIGVzYWMKKworTUtESVJfUCA9IC9iaW4vbWtkaXIgLXAKK1NIRUxMID0gL2Jpbi9iYXNoCitWRVJTSU9OID0gMy4xCitQQUNLQUdFX1NUUklORyA9IEdOVSBwYXJ0ZWQgMy4xCitQQUNLQUdFX0JVR1JFUE9SVCA9IGJ1Zy1wYXJ0ZWRAZ251Lm9yZworYWJzX3NyY2RpciA9ICQoUFdEKQorYWJzX3RvcF9idWlsZGRpciA9ICQoUFdEKS8uLgorYWJzX3RvcF9zcmNkaXIgPSAkKFBXRCkvLi4KK3NyY2RpciA9IC4KK3RvcF9zcmNkaXIgPSAuLgorc3ViZGlyID0gdGVzdHMKK1NIX0xPR19DT01QSUxFUiA9ICQoU0hFTEwpCisKK1RFU1RTID0gXAorICBoZWxwLXZlcnNpb24uc2ggXAorICB0MDAwMC1iYXNpYy5zaCBcCisgIHQwMDAxLXRpbnkuc2ggXAorICB0MDAxMC1zY3JpcHQtbm8tY3RybC1jaGFycy5zaCBcCisgIHQwMTAwLXByaW50LnNoIFwKKyAgdDAxMDEtcHJpbnQtZW1wdHkuc2ggXAorICB0MDIwMC1ncHQuc2ggXAorICB0MDIwMS1ncHQuc2ggXAorICB0MDIwMi1ncHQtcG1ici5zaCBcCisgIHQwMjAzLWdwdC10aW55LWRldmljZS1hYm9ydC5zaCBcCisgIHQwMjAzLWdwdC1zaG9ydGVuZWQtZGV2aWNlLXByaW1hcnktdmFsaWQuc2ggXAorICB0MDIwNS1ncHQtbGlzdC1jbG9iYmVycy1wbWJyLnNoIFwKKyAgdDAyMDYtZ3B0LXByaW50LXdpdGgtY29ycnVwdC1wcmltYXJ5LWNsb2JiZXJzLXBtYnIuc2ggXAorICB0MDIwNy1JRUMtYmluYXJ5LW5vdGF0aW9uLnNoIFwKKyAgdDAyMDgtbWtwYXJ0LWVuZC1pbi1JRUMuc2ggXAorICB0MDIwOS1ncHQtcG1icl9ib290LnNoIFwKKyAgdDAyMTAtZ3B0LXJlc2l6ZWQtcGFydGl0aW9uLWVudHJ5LWFycmF5LnNoIFwKKyAgdDAyMTEtZ3B0LXJld3JpdGUtaGVhZGVyLnNoIFwKKyAgdDAyMTItZ3B0LW1hbnktcGFydGl0aW9ucy5zaCBcCisgIHQwMjIwLWdwdC1tc2Z0cmVzLnNoIFwKKyAgdDAyNTAtZ3B0LnNoIFwKKyAgdDAyODAtZ3B0LWNvcnJ1cHQuc2ggXAorICB0MDMwMC1kb3Mtb24tZ3B0LnNoIFwKKyAgdDA0MDAtbG9vcC1jbG9iYmVyLWluZmxvb3Auc2ggXAorICB0MDUwMC1kdXAtY2xvYmJlci5zaCBcCisgIHQwNTAxLWR1cGxpY2F0ZS5zaCBcCisgIHQxMTAwLWJ1c3ktbGFiZWwuc2ggXAorICB0MTEwMS1idXN5LXBhcnRpdGlvbi5zaCBcCisgIHQxNzAwLXByb2JlLWZzLnNoIFwKKyAgdDIyMDAtZG9zLWxhYmVsLXJlY29nLnNoIFwKKyAgdDIyMDEtcGM5OC1sYWJlbC1yZWNvZy5zaCBcCisgIHQyMzAwLWRvcy1sYWJlbC1leHRlbmRlZC1ib290Y29kZS5zaCBcCisgIHQyMzEwLWRvcy1leHRlbmRlZC0yLXNlY3Rvci1taW4tb2Zmc2V0LnNoIFwKKyAgdDI0MDAtZG9zLWhmcy1wYXJ0aXRpb24tdHlwZS5zaCBcCisgIHQyNTAwLXByb2JlLWNvcnJ1cHQtaGZzLnNoIFwKKyAgdDMwMDAtcmVzaXplLWZzLnNoIFwKKyAgdDMyMDAtdHlwZS1jaGFuZ2Uuc2ggXAorICB0MzMwMC1wYWxvLXByZXAuc2ggXAorICB0MzMxMC1mbGFncy5zaCBcCisgIHQzNDAwLXdob2xlLWRpc2stRkFULXBhcnRpdGlvbi5zaCBcCisgIHQ0MDAwLXN1bi1yYWlkLXR5cGUuc2ggXAorICB0NDAwMS1zdW4tdnRvYy5zaCBcCisgIHQ0MTAwLW1zZG9zLXBhcnRpdGlvbi1saW1pdHMuc2ggXAorICB0NDEwMC1kdmgtcGFydGl0aW9uLWxpbWl0cy5zaCBcCisgIHQ0MTAwLW1zZG9zLXN0YXJ0aW5nLXNlY3Rvci5zaCBcCisgIHQ0MjAwLXBhcnRwcm9iZS5zaCBcCisgIHQ0MzAwLW5pbGZzMi10aW55LnNoIFwKKyAgdDUwMDAtdGFncy5zaCBcCisgIHQ2MDAwLWRtLnNoIFwKKyAgdDYwMDEtcHNlcC5zaCBcCisgIHQ2MTAwLW1kcmFpZC1wYXJ0aXRpb25zLnNoIFwKKyAgdDcwMDAtc2NyaXB0aW5nLnNoIFwKKyAgdDgwMDAtbG9vcC5zaCBcCisgIHQ4MDAxLWxvb3AtYmxrcGcuc2ggXAorICB0OTAxMC1iaWctc2VjdG9yLnNoIFwKKyAgdDkwMjAtYWxpZ25tZW50LnNoIFwKKyAgdDkwMjEtbWF4aW1hLnNoIFwKKyAgdDkwMjItb25lLXVuaXQtc25hcC5zaCBcCisgIHQ5MDIzLXZhbHVlLWx0LW9uZS5zaCBcCisgIHQ5MDMwLWFsaWduLWNoZWNrLnNoIFwKKyAgdDkwNDAtbWFueS1wYXJ0aXRpb25zLnNoIFwKKyAgdDkwNDEtdW5kZXRlY3RlZC1pbi11c2UtMTZ0aC1wYXJ0aXRpb24uc2ggXAorICB0OTA0Mi1kb3MtcGFydGl0aW9uLWxpbWl0LnNoIFwKKyAgdDkwNTAtcGFydGl0aW9uLXRhYmxlLXR5cGVzLnNoCisKK1RFU1RTX0VOVklST05NRU5UID0gXAorICBleHBvcnQJCQkJCVwKKyAgYWJzX3RvcF9idWlsZGRpcj0nJChhYnNfdG9wX2J1aWxkZGlyKScJXAorICBhYnNfdG9wX3NyY2Rpcj0nJChhYnNfdG9wX3NyY2RpciknCQlcCisgIGFic19zcmNkaXI9JyQoYWJzX3NyY2RpciknCQkJXAorICBidWlsdF9wcm9ncmFtcz1wYXJ0ZWQJCQkJXAorICBzcmNkaXI9JyQoc3JjZGlyKScJCQkJXAorICB0b3Bfc3JjZGlyPSckKHRvcF9zcmNkaXIpJwkJCVwKKyAgVkVSU0lPTj0kKFZFUlNJT04pCQkJCVwKKyAgOyA5PiYyCisKKy5TVUZGSVhFUzogLmxvZworCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NoX2Vfc2V0dXApOyAkKGFtX190dHlfY29sb3JzKTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCXdzPSdbIAldJzsgXAorCXJlc3VsdHM9YGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiLnRyczsgZG9uZWA7IFwKKwl0ZXN0IC1uICIkJHJlc3VsdHMiIHx8IHJlc3VsdHM9L2Rldi9udWxsOyBcCisJYWxsPWAgIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDoiICAgICAgICAgICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlwYXNzPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqUEFTUyIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWZhaWw9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypGQUlMIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJc2tpcD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlNLSVAiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4ZmFpbD1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWEZBSUwiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhwYXNzPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYUEFTUyIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZXJyb3I9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkVSUk9SIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlpZiB0ZXN0IGBleHByICQkZmFpbCArICQkeHBhc3MgKyAkJGVycm9yYCAtZXEgMDsgdGhlbiBcCisJICBzdWNjZXNzPXRydWU7IFwKKwllbHNlIFwKKwkgIHN1Y2Nlc3M9ZmFsc2U7IFwKKwlmaTsgXAorCWJyPSc9PT09PT09PT09PT09PT09PT09JzsgYnI9JCRiciQkYnIkJGJyJCRicjsgXAorCXJlc3VsdF9jb3VudCAoKSBcCisJeyBcCisJICAgIGlmIHRlc3QgeCIkJDEiID0geCItLW1heWJlLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9eWVzOyBcCisJICAgIGVsaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbm8tY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT1ubzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICIkQDogaW52YWxpZCAncmVzdWx0X2NvdW50JyB1c2FnZSIgPiYyOyBleGl0IDQ7IFwKKwkgICAgZmk7IFwKKwkgICAgc2hpZnQ7IFwKKwkgICAgZGVzYz0kJDEgY291bnQ9JCQyOyBcCisJICAgIGlmIHRlc3QgJCRtYXliZV9jb2xvcml6ZSA9IHllcyAmJiB0ZXN0ICQkY291bnQgLWd0IDA7IHRoZW4gXAorCSAgICAgIGNvbG9yX3N0YXJ0PSQkMyBjb2xvcl9lbmQ9JCRzdGQ7IFwKKwkgICAgZWxzZSBcCisJICAgICAgY29sb3Jfc3RhcnQ9IGNvbG9yX2VuZD07IFwKKwkgICAgZmk7IFwKKwkgICAgZWNobyAiJCR7Y29sb3Jfc3RhcnR9IyAkJGRlc2MgJCRjb3VudCQke2NvbG9yX2VuZH0iOyBcCisJfTsgXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0ICgpIFwKKwl7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlRPVEFMOiIgJCRhbGwgICAiJCRicmciOyBcCisJICByZXN1bHRfY291bnQgJCQxICJQQVNTOiAiICQkcGFzcyAgIiQkZ3JuIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiU0tJUDogIiAkJHNraXAgICIkJGJsdSI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhGQUlMOiIgJCR4ZmFpbCAiJCRsZ24iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJGQUlMOiAiICQkZmFpbCAgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWFBBU1M6IiAkJHhwYXNzICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkVSUk9SOiIgJCRlcnJvciAiJCRtZ24iOyBcCisJfTsgXAorCXsJCQkJCQkJCVwKKwkgIGVjaG8gIiQoUEFDS0FHRV9TVFJJTkcpOiAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykiIHwJXAorCSAgICAkKGFtX19yc3RfdGl0bGUpOwkJCQkJCVwKKwkgIGNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbm8tY29sb3I7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBlY2hvICIuLiBjb250ZW50czo6IDpkZXB0aDogMiI7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBmb3IgaSBpbiAkJGJhc2VzOyBkbwkJCQkJCVwKKwkgICAgaWYgZ3JlcCAiXiQkd3MqOmNvcHktaW4tZ2xvYmFsLWxvZzokJHdzKm5vJCR3cyokJCIgJCRpLnRycyBcCisJICAgICAgICAgPi9kZXYvbnVsbDsgdGhlbiBjb250aW51ZTsgXAorCSAgICBmaTsgXAorCSAgICBnbG9iX3Jlcz1gc2VkIC1uIC1lICJzLyQkd3MqJCQvLyIgXAorCSAgICAgICAgICAgICAgICAgICAgIC1lICJzL14kJHdzKjpnbG9iYWwtdGVzdC1yZXN1bHQ6JCR3cyovL3AiIFwKKwkJICAgICAgICAkJGkudHJzYDsgXAorCSAgICB0ZXN0IC1uICIkJGdsb2JfcmVzIiB8fCBnbG9iX3Jlcz1SVU47IFwKKwkgICAgZWNobyAiJCRnbG9iX3JlczogJCRpIiB8ICQoYW1fX3JzdF9zZWN0aW9uKTsgXAorCSAgICBpZiB0ZXN0ICEgLXIgJCRpLmxvZzsgdGhlbiBcCisJICAgICAgZWNobyAiZmF0YWw6IG1ha2luZyAkQDogJCRpLmxvZyBpcyB1bnJlYWRhYmxlIiA+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY2F0ICQkaS5sb2c7IGVjaG87IFwKKwkgIGRvbmU7CVwKKwl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXA7CQkJCQlcCisJbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCisJICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAorCSBlbHNlCQkJCQkJCQlcCisJICBjb2w9IiQkcmVkIjsJCQkJCQkJXAorCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKKwlmaTsJCQkJCQkJCVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCisJZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAorCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKKwkgIGlmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbgkJCVwKKwkgICAgZWNobyAiJCR7Y29sfVBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkkJHtzdGR9IjsJXAorCSAgZmk7CQkJCQkJCQlcCisJICBlY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQlcCisJZmk7CQkJCQkJCQlcCisJJCRzdWNjZXNzIHx8IGV4aXQgMQorCitjaGVjay1URVNUUzoKKwlAaWYgdGVzdCAkQCAhPSByZWNoZWNrOyB0aGVuIFwKKwkgICBsaXN0PSckKFJFQ0hFQ0tfTE9HUyknOyBcCisJICAgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3Q7IFwKKwkgZmkKKwlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCisJQHdzPSdbIAldJzsgXAorCWxvZ19saXN0PScnIHRyc19saXN0PScnOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJZm9yIGkgaW4gJCRiYXNlczsgZG8gXAorCSAgaWYgdGVzdCAteiAiJCRsb2dfbGlzdCI7IHRoZW4gXAorCSAgICBsb2dfbGlzdD0iJCRpLmxvZyI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2dfbGlzdD0iJCRsb2dfbGlzdCAkJGkubG9nIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLXogIiQkdHJzX2xpc3QiOyB0aGVuIFwKKwkgICAgdHJzX2xpc3Q9IiQkaS50cnMiOyBcCisJICBlbHNlIFwKKwkgICAgdHJzX2xpc3Q9IiQkdHJzX2xpc3QgJCRpLnRycyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCIKKworLnNoLmxvZzoKKwlAcD0nJDwnOyBcCisJJChhbV9fc2V0X2IpOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKFNIX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAkKFNIX0xPR19DT01QSUxFKSAiJCR0c3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGFiNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDA2MGU3NDM1NDc3NGQzNmQyYzExZWYwOGUzZTdlYTliOWI2ZTIzZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDEzIE5vdiAyMDE0IDExOjI5OjMzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6IGZpeCBjb21waWxlIGZhaWx1cmUgd2hpbGUKKyAtLWRpc2FibGUtZGV2aWNlLW1hcHBlcgorCitXaGlsZSAtLWRpc2FibGUtZGV2aWNlLW1hcHBlciwgdGhlIE1BQ1JPIEVOQUJMRV9ERVZJQ0VfTUFQUEVSIGlzCit1bmRlZiwgYnV0IGl0IG1pc3NlZCB0byBzY29wZSBzb21lIGRldmljZSBtYXBwZXIgZnVuY3Rpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGlicGFydGVkL2FyY2gvbGludXguYyB8IDggKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicGFydGVkL2FyY2gvbGludXguYyBiL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKK2luZGV4IDZmZDczYzUuLjJhZmE0NzkgMTAwNjQ0CistLS0gYS9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCisrKysgYi9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCitAQCAtMjMyMCw2ICsyMzIwLDcgQEAgemFzcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyBzdGF0aWMgY2hhciAqCisgZG1fY2Fub25pY2FsX3BhdGggKFBlZERldmljZSBjb25zdCAqZGV2KQorIHsKKysjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKyAgICAgICAgIExpbnV4U3BlY2lmaWMgY29uc3QgKmFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAKKyAgICAgICAgIC8qIEdldCBtYXAgbmFtZSBmcm9tIGRldmljZW1hcHBlciAqLworQEAgLTIzMzcsNiArMjMzOCw3IEBAIGRtX2Nhbm9uaWNhbF9wYXRoIChQZWREZXZpY2UgY29uc3QgKmRldikKKyAgICAgICAgIGRtX3Rhc2tfZGVzdHJveSAodGFzayk7CisgICAgICAgICByZXR1cm4gZGV2X25hbWU7CisgZXJyOgorKyNlbmRpZgorICAgICAgICAgcmV0dXJuIE5VTEw7CisgfQorIAorQEAgLTI5NTcsMTMgKzI5NTksMTUgQEAgX2Rpc2tfc3luY19wYXJ0X3RhYmxlIChQZWREaXNrKiBkaXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqbGVuZ3RoKTsKKyAKKy0KKysjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKyAgICAgICAgIGlmIChkaXNrLT5kZXYtPnR5cGUgPT0gUEVEX0RFVklDRV9ETSkgeworICAgICAgICAgICAgICAgICBhZGRfcGFydGl0aW9uID0gX2RtX2FkZF9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlbW92ZV9wYXJ0aXRpb24gPSBfZG1fcmVtb3ZlX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgcmVzaXplX3BhcnRpdGlvbiA9IF9kbV9yZXNpemVfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICBnZXRfcGFydGl0aW9uX3N0YXJ0X2FuZF9sZW5ndGggPSBfZG1fZ2V0X3BhcnRpdGlvbl9zdGFydF9hbmRfbGVuZ3RoOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0gZWxzZQorKyNlbmRpZgorKyAgICAgICAgeworICAgICAgICAgICAgICAgICBhZGRfcGFydGl0aW9uID0gX2Jsa3BnX2FkZF9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlbW92ZV9wYXJ0aXRpb24gPSBfYmxrcGdfcmVtb3ZlX3BhcnRpdGlvbjsKKyAjaWZkZWYgQkxLUEdfUkVTSVpFX1BBUlRJVElPTgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtZG9jLW1hbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzExZDRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtZG9jLW1hbmRpci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbYnVnLXBhcnRlZEBnbnUub3JnXQorCit8IGZvciBwbyBpbiBgbHMgLTEgLi8qLnB0X0JSLnBvIDI+L2Rldi9udWxsYDsgZG8gXAorfCAJCW1ha2UgJChiYXNlbmFtZSAke3BvJS5wdF9CUi5wb30pOyBcCit8IAlkb25lCit8IE1ha2VmaWxlOjkwNDogKioqIFJlY3Vyc2l2ZSB2YXJpYWJsZSBgbWFuZGlyJyByZWZlcmVuY2VzIGl0c2VsZiAoZXZlbnR1YWxseSkuICBTdG9wLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorCistLS0gcGFydGVkLTMuMS9kb2MvcG80YS5tay5vcmlnCTIwMTItMDMtMTUgMTQ6MDk6MTEuNTU1ODMxODcyICswMTAwCisrKysgcGFydGVkLTMuMS9kb2MvcG80YS5tawkyMDEyLTAzLTE1IDE0OjEwOjQ0LjI0MzgzMDk4NSArMDEwMAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjIHRocmVzaG9sZCBpcyA4MCUpLCBpdCB3b24ndCBiZSBkaXN0cmlidXRlZCwgYW5kIHRoZSBidWlsZCB3b24ndCBmYWlsLgorICMKKyAKKy1tYW5kaXIgPSAkKG1hbmRpcikvJChsYW5nKQorK21hbmRpciA6PSAkKG1hbmRpcikvJChsYW5nKQorIAorICMgSW5mb3JtIGF1dG9tYWtlIHRoYXQgd2Ugd2FudCB0byBpbnN0YWxsIHNvbWUgbWFuIHBhZ2VzIGluIHNlY3Rpb24gMSwgNQorICMgYW5kIDguCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ub19jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ4ZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ub19jaGVjay5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0lmIGNoZWNrIGlzIGRldGVjdGVkLCBpdCBtYWtlcyB0aGUgYnVpbGRzIG5vbi1kZXRlcm1pbnN0aWMgc28ganVzdCBmb3JjZQoraXQgdG8gYmUgZGlzYWJsZWQuCisKK1JQIC0gNC8xMS8wOAorCitJbmRleDogcGFydGVkLTEuOS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhcnRlZC0xLjkuMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTIzIDE4OjUyOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIHBhcnRlZC0xLjkuMC9jb25maWd1cmUuYWMJMjAxMC0wMi0wMiAxNDoxMzo1Ni4wMTM5MDUwOTMgKzAwMDAKK0BAIC00NzcsNyArNDc3LDcgQEAKKyBBTV9DT05ESVRJT05BTChbQlVJTERfTElOVVhdLCBbdGVzdCAiJE9TIiA9IGxpbnV4XSkKKyAKKyBkbmwgY2hlY2sgZm9yICJjaGVjayIsIHVuaXQgdGVzdGluZyBsaWJyYXJ5L2hlYWRlcgorLVBLR19DSEVDS19NT0RVTEVTKFtDSEVDS10sIFtjaGVjayA+PSAwLjkuM10sIGhhdmVfY2hlY2s9eWVzLCBoYXZlX2NoZWNrPW5vKQorK2hhdmVfY2hlY2s9bm8KKyBpZiB0ZXN0ICIkaGF2ZV9jaGVjayIgIT0gInllcyI7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVChbVW5hYmxlIHRvIGxvY2F0ZSBjaGVjayB2ZXJzaW9uIDAuOS4zIG9yIGhpZ2hlcjogbm90IGJ1aWxkaW5nXSkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVjNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliYmU5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvc3lzY2FsbHMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcGFydGVkLTEuOS4wL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXJ0ZWQtMS45LjAub3JpZy9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCTIwMDktMDctMjMgMTg6NTI6MDguMDAwMDAwMDAwICswMTAwCisrKysgcGFydGVkLTEuOS4wL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMJMjAxMC0wMi0wMiAxNDoxNDoxNi41MjM5MDQ3NjggKzAwMDAKK0BAIC0xNyw2ICsxNyw4IEBACisgCisgI2RlZmluZSBQUk9DX0RFVklDRVNfQlVGU0laIDE2Mzg0CisgCisrI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKysKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPGFyY2gvbGludXguaD4KKyAKK0BAIC0xNDc3LDEyICsxNDc5LDE0IEBACisgCisgI2lmIFNJWkVPRl9PRkZfVCA8IDgKKyAKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQorIHN0YXRpYyBfc3lzY2FsbDUoaW50LF9sbHNlZWssCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIGZkLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LAorICAgICAgICAgICAgICAgICAgbG9mZl90KiwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCBvcmlnaW4pCisrI2VuZGlmCisgCisgbG9mZl90CisgbGxzZWVrICh1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGludCB3aGVuY2UpCitAQCAtMTQ5MCwxMSArMTQ5NCwyMCBAQAorICAgICAgICAgbG9mZl90IHJlc3VsdDsKKyAgICAgICAgIGludCByZXR2YWw7CisgCisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKKyAgICAgICAgIHJldHZhbCA9IF9sbHNlZWsoZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgPj4gMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuY2UpOworKyNlbHNlCisrIAlyZXR2YWwgPSBzeXNjYWxsKF9fTlJfX2xsc2VlaywgZmQsCisrCQkJICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgPj4gMzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKysJCQkgd2hlbmNlKTsKKysjZW5kaWYKKysKKyAgICAgICAgIHJldHVybiAocmV0dmFsPT0tMSA/IChsb2ZmX3QpIHJldHZhbCA6IHJlc3VsdCk7CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGFlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJEaXNrIHBhcnRpdGlvbiBlZGl0aW5nL3Jlc2l6aW5nIHV0aWxpdHkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZjMxYjI2NmQzNDQwZGQ3ZWU1MGY5MmNmNjdkOGU2YyIKK1NFQ1RJT04gPSAiY29uc29sZS90b29scyIKK0RFUEVORFMgPSAibmN1cnNlcyByZWFkbGluZSB1dGlsLWxpbnV4IgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9wYXJ0ZWQvcGFydGVkLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9ub19jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNjYWxscy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZG9jLW1hbmRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDI0N2I2YTdiMzE0ZjhlZGViNjE4MTU5ZmE5NWY5Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODU4YjU4OWMyMjI5N2NhY2RmNDM3ZjNiYWZmNmYwNGIzMzMwODc1MjFhYjI3NGY3YWI2NzdjYjhjNmJiNzhlNCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXZpY2UtbWFwcGVyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB0ZXhpbmZvIHB0ZXN0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgdGVzdHMgcHJpbnQtYWxpZ24gcHJpbnQtbWF4IGR1cC1jbG9iYmVyIGR1cGxpY2F0ZSBmcy1yZXNpemUKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJbWtkaXIgJHQvYnVpbGQtYXV4CisJY3AgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4LworCWNwIC1yICR7U30vdGVzdHMgJHQKKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR0L3Rlc3RzLworCXNlZCAtaSAic3xeVkVSU0lPTi4qfFZFUlNJT04gPSAke1BWfXxnIiAkdC90ZXN0cy9NYWtlZmlsZQorCWZvciBpIGluIHByaW50LWFsaWduIHByaW50LW1heCBkdXAtY2xvYmJlciBkdXBsaWNhdGUgZnMtcmVzaXplOyBcCisJICBkbyBjcCAke0J9L3Rlc3RzLy5saWJzLyRpICR0L3Rlc3RzLzsgXAorCWRvbmUKKwlzZWQgLWUgJ3N8IC4uL3BhcnRlZHx8JyAtaSAkdC90ZXN0cy8qLnNoCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggY29yZXV0aWxzIHBlcmwgdXRpbC1saW51eC1sb3NldHVwIHB5dGhvbiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODc3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHRoaXMgY29tcGlsZXIgZXJyb3Igd2l0aCBnY2MgNC42LjAKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNS8wOAorCit8IGZ0cy5jOiBJbiBmdW5jdGlvbiAncGF4X2Z0c19zZXQnOgorfCBmdHMuYzo0Njk6NzogZXJyb3I6IHBhcmFtZXRlciAnc3AnIHNldCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWJ1dC1zZXQtcGFyYW1ldGVyXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworfCAKK3wgbWFrZVsyXTogKioqIFtmdHMub10gRXJyb3IgMQorCitJbmRleDogcGF4LTMuNC9saWIvZnRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvbGliL2Z0cy5jCisrKysgcGF4LTMuNC9saWIvZnRzLmMKK0BAIC00NjYsNyArNDY2LDcgQEAgbmFtZToJCXQgPSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EKHAtPmZ0cworIC8qIEFSR1NVU0VEICovCisgaW50CisgZnRzX3NldChzcCwgcCwgaW5zdHIpCistCUZUUyAqc3A7CisrCUZUUyBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgKnNwOworIAlGVFNFTlQgKnA7CisgCWludCBpbnN0cjsKKyB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDg3OGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDE4NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F1dGhvcjogSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIERlYyA2IDEwOjM0OjUzIDIwMTEgLTA4MDAKKworICAgIEZpeCBwYXgtMy40IGJ1aWxkIGZvciB4MzIKKyAgICAKKyAgICBvZmZfdCBpcyA4Ynl0ZSBmb3IgeDMyLiAgV2UgbmVlZCB0byBjaGVjayBib3RoIF9GSUxFX09GRlNFVF9CSVRTIGFuZAorICAgIHNpemUgb2Ygb2ZmX3QgdG8gc2VlIGlmIGZpbGUgb2Zmc2V0IGlzIDY0Yml0LiAgVGhpcyBwYXRjaCBhZGRzCisgICAgQUNfQ0hFQ0tfU0laRU9GKG9mZl90KSBhbmQgY2hlY2tzIFNJWkVPRl9PRkZfVCA9PSA4LgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA2CisKK0luZGV4OiBwYXgtMy40L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9jb25maWd1cmUuaW4KKysrKyBwYXgtMy40L2NvbmZpZ3VyZS5pbgorQEAgLTMzLDQgKzMzLDcgQEAgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX0NfQ09OU1QKKyAKKytBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCisrQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisrCisgQUNfT1VUUFVUKFtNYWtlZmlsZSBsaWIvTWFrZWZpbGUgc3JjL01ha2VmaWxlXSkKK0luZGV4OiBwYXgtMy40L3NyYy9hcl9pby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9hcl9pby5jCisrKysgcGF4LTMuNC9zcmMvYXJfaW8uYworQEAgLTM3OCw3ICszNzgsOCBAQCBhcl9jbG9zZSh2b2lkKQorIAkgKiBjb3VsZCBoYXZlIHdyaXR0ZW4gYW55dGhpbmcgeWV0LgorIAkgKi8KKyAJaWYgKGZybXQgPT0gTlVMTCkgeworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLCAiJXM6IHVua25vd24gZm9ybWF0LCAlcXUgYnl0ZXMgc2tpcHBlZC5cbiIsCisgI2Vsc2UKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsICIlczogdW5rbm93biBmb3JtYXQsICVsdSBieXRlcyBza2lwcGVkLlxuIiwKK0BAIC0zOTEsNyArMzkyLDggQEAgYXJfY2xvc2Uodm9pZCkKKyAKKyAJaWYgKHN0cmNtcChOTV9DUElPLCBhcmd2MCkgPT0gMCkKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCSAgICAiJXF1IGJsb2Nrc1xuIiwKKyAjZWxzZQorIAkJICAgICIlbHUgYmxvY2tzXG4iLAorQEAgLTM5OSw3ICs0MDEsOCBAQCBhcl9jbG9zZSh2b2lkKQorIAkJCShyZGNudCA/IHJkY250IDogd3JjbnQpIC8gNTEyMCk7CisgCWVsc2UgaWYgKHN0cmNtcChOTV9UQVIsIGFyZ3YwKSAhPSAwKQorIAkJKHZvaWQpZnByaW50ZihsaXN0ZiwKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIAkJICAgICIlczogJXMgdm9sICVkLCAlbHUgZmlsZXMsICVxdSBieXRlcyByZWFkLCAlcXUgYnl0ZXMgd3JpdHRlbi5cbiIsCisgI2Vsc2UKKyAJCSAgICAiJXM6ICVzIHZvbCAlZCwgJWx1IGZpbGVzLCAlbHUgYnl0ZXMgcmVhZCwgJWx1IGJ5dGVzIHdyaXR0ZW4uXG4iLAorSW5kZXg6IHBheC0zLjQvc3JjL2NwaW8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvY3Bpby5jCisrKysgcGF4LTMuNC9zcmMvY3Bpby5jCitAQCAtMjE4LDcgKzIxOCw4IEBAIHJkX2xuX25tIChBUkNIRCAqYXJjbikKKyAJICovCisgCWlmICgoYXJjbi0+c2Iuc3Rfc2l6ZSA9PSAwKSB8fAorIAkgICAgKGFyY24tPnNiLnN0X3NpemUgPj0gKG9mZl90KSBzaXplb2YoYXJjbi0+bG5fbmFtZSkpKSB7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCXBheHdhcm4gKDEsICJDcGlvIGxpbmsgbmFtZSBsZW5ndGggaXMgaW52YWxpZDogJXF1IiwKKyAJCQkgYXJjbi0+c2Iuc3Rfc2l6ZSk7CisgI2Vsc2UKK0luZGV4OiBwYXgtMy40L3NyYy9nZW5fc3Vicy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9nZW5fc3Vicy5jCisrKysgcGF4LTMuNC9zcmMvZ2VuX3N1YnMuYworQEAgLTEzMyw3ICsxMzMsOCBAQCBsc19saXN0IChBUkNIRCAqYXJjbiwgdGltZV90IG5vdywgRklMRSAqCisgICAgKiBwcmludCBkZXZpY2UgaWQncyBmb3IgZGV2aWNlcywgb3Igc2l6ZXMgZm9yIG90aGVyIG5vZGVzCisgICAgKi8KKyAgIGlmICgoYXJjbi0+dHlwZSA9PSBQQVhfQ0hSKSB8fCAoYXJjbi0+dHlwZSA9PSBQQVhfQkxLKSkKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlNGx1LCU0bHUgIiwgKHVuc2lnbmVkIGxvbmcpIE1BSk9SIChzYnAtPnN0X3JkZXYpLAorIAkJICAgICh1bnNpZ25lZCBsb25nKSBNSU5PUiAoc2JwLT5zdF9yZGV2KSk7CisgI2Vsc2UKK0BAIC0xNDIsNyArMTQzLDggQEAgbHNfbGlzdCAoQVJDSEQgKmFyY24sIHRpbWVfdCBub3csIEZJTEUgKgorICNlbmRpZgorICAgZWxzZQorICAgICB7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlOXF1ICIsIHNicC0+c3Rfc2l6ZSk7CisgI2Vsc2UKKyAgICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlOWx1ICIsIHNicC0+c3Rfc2l6ZSk7CitAQCAtMzM0LDcgKzMzNiw4IEBAIHVsX2FzYyAodV9sb25nIHZhbCwgY2hhciAqc3RyLCBpbnQgbGVuLCAKKyAgIHJldHVybiAoMCk7CisgfQorIAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgLyoKKyAgKiBhc2NfdXFkKCkKKyAgKgljb252ZXJ0IGhleC9vY3RhbCBjaGFyYWN0ZXIgc3RyaW5nIGludG8gYSB1X3F1YWRfdC4gV2UgZG8gbm90IGhhdmUgdG8KK0luZGV4OiBwYXgtMy40L3NyYy9vcHRpb25zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL29wdGlvbnMuYworKysrIHBheC0zLjQvc3JjL29wdGlvbnMuYworQEAgLTE1NDUsNyArMTU0NSw4IEBAIHN0cl9vZmZ0IChjaGFyICp2YWwpCisgICBjaGFyICpleHByOworICAgb2ZmX3QgbnVtLCB0OworIAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBudW0gPSBzdHJ0b3EgKHZhbCwgJmV4cHIsIDApOworICAgaWYgKChudW0gPT0gTE9OR19MT05HX01BWCkgfHwgKG51bSA8PSAwKSB8fCAoZXhwciA9PSB2YWwpKQorICNlbHNlCitJbmRleDogcGF4LTMuNC9zcmMvdGFyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL3Rhci5jCisrKysgcGF4LTMuNC9zcmMvdGFyLmMKK0BAIC01OCw3ICs1OCw4IEBACisgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGFyX2Noa3NtIChjaGFyICosIGludCk7Cisgc3RhdGljIGNoYXIgKm5hbWVfc3BsaXQgKGNoYXIgKiwgaW50KTsKKyBzdGF0aWMgaW50IHVsX29jdCAodV9sb25nLCBjaGFyICosIGludCwgaW50KTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIHN0YXRpYyBpbnQgdXFkX29jdCAodV9xdWFkX3QsIGNoYXIgKiwgaW50LCBpbnQpOworICNlbmRpZgorIAorQEAgLTE5Niw3ICsxOTcsOCBAQCB1bF9vY3QgKHVfbG9uZyB2YWwsIHJlZ2lzdGVyIGNoYXIgKnN0ciwgCisgICByZXR1cm4gKDApOworIH0KKyAKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIC8qCisgICogdXFkX29jdCgpCisgICoJY29udmVydCBhbiB1X3F1YWRfdCB0byBhbiBvY3RhbCBzdHJpbmcuIG9uZSBvZiBtYW55IG9kZGJhbGwgZmllbGQKK0BAIC00MjcsNyArNDI5LDggQEAgdGFyX3JkIChBUkNIRCAqYXJjbiwgY2hhciAqYnVmKQorIAkJCSAgICAgICAweGZmZik7CisgICBhcmNuLT5zYi5zdF91aWQgPSAodWlkX3QpIGFzY191bCAoaGQtPnVpZCwgc2l6ZW9mIChoZC0+dWlkKSwgT0NUKTsKKyAgIGFyY24tPnNiLnN0X2dpZCA9IChnaWRfdCkgYXNjX3VsIChoZC0+Z2lkLCBzaXplb2YgKGhkLT5naWQpLCBPQ1QpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdXFkIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CisgI2Vsc2UKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191bCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworQEAgLTY1OSw3ICs2NjIsOCBAQCB0YXJfd3IgKHJlZ2lzdGVyIEFSQ0hEICogYXJjbikKKyAgICAgICAgKiBkYXRhIGZvbGxvd3MgdGhpcyBmaWxlLCBzbyBzZXQgdGhlIHBhZAorICAgICAgICAqLworICAgICAgIGhkLT5saW5rZmxhZyA9IEFSRUdUWVBFOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICAgaWYgKHVxZF9vY3QgKCh1X3F1YWRfdCkgYXJjbi0+c2Iuc3Rfc2l6ZSwgaGQtPnNpemUsCisgCQkgICBzaXplb2YgKGhkLT5zaXplKSwgMSkpCisgI2Vsc2UKK0BAIC04MzQsNyArODM4LDggQEAgdXN0YXJfcmQgKEFSQ0hEICphcmNuLCBjaGFyICpidWYpCisgICAgKi8KKyAgIGFyY24tPnNiLnN0X21vZGUgPSAobW9kZV90KSAoYXNjX3VsIChoZC0+bW9kZSwgc2l6ZW9mIChoZC0+bW9kZSksIE9DVCkgJgorIAkJCSAgICAgICAweGZmZik7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191cWQgKGhkLT5zaXplLCBzaXplb2YgKGhkLT5zaXplKSwgT0NUKTsKKyAjZWxzZQorICAgYXJjbi0+c2Iuc3Rfc2l6ZSA9IChvZmZfdCkgYXNjX3VsIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CitAQCAtMTA4MSw3ICsxMDg2LDggQEAgdXN0YXJfd3IgKHJlZ2lzdGVyIEFSQ0hEICogYXJjbikKKyAgICAgICBlbHNlCisgCWhkLT50eXBlZmxhZyA9IFJFR1RZUEU7CisgICAgICAgYXJjbi0+cGFkID0gVEFSX1BBRCAoYXJjbi0+c2Iuc3Rfc2l6ZSk7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgICBpZiAodXFkX29jdCAoKHVfcXVhZF90KSBhcmNuLT5zYi5zdF9zaXplLCBoZC0+c2l6ZSwKKyAJCSAgIHNpemVvZiAoaGQtPnNpemUpLCAzKSkKKyAJewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDQ4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJQb3J0YWJsZSBBcmNoaXZlIGVYY2hhbmdlIgorREVTQ1JJUFRJT04gPSAicGF4IChQb3J0YWJsZSBBcmNoaXZlIGVYY2hhbmdlKSBpcyB0aGUgUE9TSVggc3RhbmRhcmQgYXJjaGl2ZSB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL2N2c3dlYi5vcGVuYnNkLm9yZy9jZ2ktYmluL2N2c3dlYi9zcmMvYmluL3BheC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cub3BlbmJzZC5vcmcvcXVlcnktcHIuaHRtbCIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjBiNjc0ZGZkYzU2ZGFhMzgzMmQ0MDY5YjgyMGVhMCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGF4Lmg7ZW5kbGluZT00MDttZDU9MzA5ZDNlMjQxYzFkODIwNjkyMjhlNWE1MWU5YjhkNjAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NwaW8uaDtlbmRsaW5lPTQwO21kNT1jM2I0YmJmZjYxMzNhODMzODc5Njg2MTdiYmFlOGFjNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdmlzLmg7ZW5kbGluZT00MDttZDU9YjI4M2Y3NTlhYmQ0YTVhZDdlMDE0YjgwZjUxZmMwNTMiCisKK1NFQ1RJT04gPSAiYmFzZSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy8ke0JQTn0vJHtCUH0udGFyLmJ6Mi9mYmQ5MDIzYjU5MGI0NWFjM2FkZTk1ODcwNzAyYTBkNi8ke0JQfS50YXIuYnoyIFwKKwlmaWxlOi8vZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoIFwKKwlmaWxlOi8vcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImZiZDkwMjNiNTkwYjQ1YWMzYWRlOTU4NzA3MDJhMGQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjM2MwNjA0OGUwMjgyODA3N2NmNzc1N2QzZDE0MjI0MTQyOTIzODg5M2I5MWQ1MjlhZjI5YTJlOGNjNTYyM2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzMDk4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlBCWklQMiBpcyBhIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGJ6aXAyIgorREVTQ1JJUFRJT04gPSAiUEJaSVAyIGlzIGEgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ6aXAyIGJsb2NrLXNvcnRpbmcgXAorZmlsZSBjb21wcmVzc29yIHRoYXQgdXNlcyBwdGhyZWFkcyBhbmQgYWNoaWV2ZXMgbmVhci1saW5lYXIgc3BlZWR1cCBvbiBTTVAgXAorbWFjaGluZXMuIFRoZSBvdXRwdXQgb2YgdGhpcyB2ZXJzaW9uIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBiemlwMiB2MS4wLjIgb3IgXAorbmV3ZXIgKGllOiBhbnl0aGluZyBjb21wcmVzc2VkIHdpdGggcGJ6aXAyIGNhbiBiZSBkZWNvbXByZXNzZWQgd2l0aCBiemlwMikuIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvbXByZXNzaW9uLmNhL3BiemlwMi8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRjNGYyZWRlYzk2NzlkNWFiZWYzNTE0YTgxNmI1NGE0IgorCitERVBFTkRTID0gImJ6aXAyIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0LyR7QlBOfS8xLjEvJHtQVn0vK2Rvd25sb2FkLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjkxYTQ5MTFiMTMzMDU4NTA0MjM4NDBlYjBmYTZmNGY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU3M2JiMzU4YTVhN2QzYmY1ZjQyZjg4MWFmMzI0Y2VkZjk2MGM3ODZlOGQ2NmRkMDNkNDQ4ZGRkOGEwMTY2ZWUiCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKK0VYVFJBX09FTUFLRSA9ICJDWFg9JyR7Q1hYfSAke0NYWEZMQUdTfScgTERGTEFHUz0nJHtMREZMQUdTfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IHBiemlwMiAke0R9JHtiaW5kaXJ9LworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJjb252ZXJ0LWFzbjEtcGVybF8wLjI3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MGU3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJjb252ZXJ0LWFzbjEtcGVybF8wLjI3LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQ29udmVydDo6QVNOMSAtIFBlcmwgQVNOLjEgRW5jb2RlL0RlY29kZSBsaWJyYXJ5IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5tZDtiZWdpbmxpbmU9OTE7ZW5kbGluZT05NzttZDU9Y2VmZjdmZDI4NmViNmQ4ZThlMGQzZDIzZTA5NmE2M2YiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HQi9HQkFSUi9Db252ZXJ0LUFTTjEtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjg3MjNlOTZiZTBiMjU4YTllMjA0ODAyNzZlOGE2MmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzRhNGE3OGFlMGM1ZTk3MzEwMGFjMGE4ZjIwM2ExMTBmNzZmYjA0N2I3OWRhZTRmYzFmZDdkNjgxNGQzZDU4YSIKKworUyA9ICIke1dPUktESVJ9L0NvbnZlcnQtQVNOMS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0VYVFJBX1BFUkxGTEFHUyA9ICItSSAke1BFUkxIT1NUTElCfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmY2RlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlcyB1c2VmdWwgZm9yIG1hbmlwdWxhdGluZyBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uIgorU0VDVElPTiA9ICJsaWJzIgorIyBZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjE7bWQ1PTU3NmI3Y2I0MWU1ZTgyMTUwMWEwMWVkNjZmMGY5ZDllIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR0IvR0JBUlIvVGltZURhdGUtJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vVGltZURhdGUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1jYXJwIHBlcmwtbW9kdWxlLWV4cG9ydGVyIHBlcmwtbW9kdWxlLXN0cmljdCBwZXJsLW1vZHVsZS10aW1lLWxvY2FsIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjFkOTExNTNhYzk3MTM0N2FlZTg0MjkyZWQ4ODZjMWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzViZDI1NDg3MWNiNTg1M2E2YWEwNDAzYWMwYmUyNzBjZGQ3NWM5ZDFiNjYzOWYxOGVjYmE2M2MxNTI5OGU4NiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTllNzEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHN1cHBvcnRpbmcgc2ltcGxlIGdlbmVyaWMgbmFtZXNwYWNlcyIKK0RFU0NSSVBUSU9OID0gIlhNTDo6TmFtZXNwYWNlU3VwcG9ydCBvZmZlcnMgYSBzaW1wbGUgd2F5IHRvIHByb2Nlc3MgbmFtZXNwYWNlLWJhc2VkIFhNTCBuYW1lcy4gXAorICAgICAgICAgICAgICAgIEl0IGFsc28gaGVscHMgbWFpbnRhaW4gYSBwcmVmaXgtdG8tbmFtZXNwYWNlIFVSSSBtYXAsIGFuZCBwcm92aWRlcyBhIG51bWJlciBvZiBcCisgICAgICAgICAgICAgICAgYmFzaWMgY2hlY2tzLiAiCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTUVUQS55bWw7YmVnaW5saW5lPTIyO2VuZGxpbmU9MjI7bWQ1PTNiMmI1NjRkYWU4YjlhZjllODg5NmU4NWMwN2RjYmU1IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1AvUEUvUEVSSUdSSU4vWE1MLU5hbWVzcGFjZVN1cHBvcnQtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjIyMmNjYTc2MTYxY2Q5NTZkNzI0Mjg2ZDM2YjYwN2RhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZkODE1MWYwYTNmMTAyMzEzZDc2YjY0YmZkMWMyZDllZDQ2YmZlNjNhMTZmMDM4ZTdkODYwZmRhMjg3Yjc0ZWEiCisKKworUyA9ICIke1dPUktESVJ9L1hNTC1OYW1lc3BhY2VTdXBwb3J0LSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORD0ibmF0aXZlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1iYXNlLXBlcmxfMS4wOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGEzMzcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1iYXNlLXBlcmxfMS4wOC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkJhc2UgY2xhc3MgU0FYIERyaXZlcnMgYW5kIEZpbHRlcnMiCitERVNDUklQVElPTiA9ICJUaGlzIG1vZHVsZSBoYXMgYSB2ZXJ5IHNpbXBsZSB0YXNrIC0gdG8gYmUgYSBiYXNlIGNsYXNzIGZvciBcCitQZXJsU0FYIGRyaXZlcnMgYW5kIGZpbHRlcnMuIEl0J3MgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gcGFzcyBcCit0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIG91dHB1dCB1bmNoYW5nZWQuIEl0IGNhbiBiZSB1c2VmdWwgdG8gXAordXNlIHRoaXMgbW9kdWxlIGFzIGEgYmFzZSBjbGFzcyBzbyB5b3UgZG9uJ3QgaGF2ZSB0bywgZm9yIGV4YW1wbGUsIFwKK2ltcGxlbWVudCB0aGUgY2hhcmFjdGVycygpIGNhbGxiYWNrLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2Rpc3QuaW5pO2VuZGxpbmU9NTttZDU9OGY5YzlhNTUzNDBhZWZhZWU2ZTk3MDRjODg0NjY0NDYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HUi9HUkFOVE0vWE1MLVNBWC1CYXNlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4YzhjMzI0N2RmZDA4MDcxMjU5NjExOGQ3MGRiZTMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NjI3MDMxOGIxNWY4OGI4NDI3ZTU4NTE5OGFiYmMxOWJjMmU2Y2NiMzZkYzRjMGE0ZjJkOTgwNzMzMDIxOWUiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtU0FYLUJhc2UtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1wZXJsXzAuOTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkMzk2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHVzaW5nIGFuZCBidWlsZGluZyBQZXJsIFNBWDIgWE1MIHByb2Nlc3NvcnMiCitERVNDUklQVElPTiA9ICJYTUw6OlNBWCBjb25zaXN0cyBvZiBzZXZlcmFsIGZyYW1ld29yayBjbGFzc2VzIGZvciB1c2luZyBhbmQgXAorYnVpbGRpbmcgUGVybCBTQVgyIFhNTCBwYXJzZXJzLCBmaWx0ZXJzLCBhbmQgZHJpdmVycy4gIEl0IGlzIGRlc2lnbmVkIFwgCithcm91bmQgdGhlIG5lZWQgdG8gYmUgYWJsZSB0byAicGx1ZyBpbiIgZGlmZmVyZW50IFNBWCBwYXJzZXJzIHRvIGFuIFwKK2FwcGxpY2F0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHByb2dyYW1tZXIgaW50ZXJ2ZW50aW9uLiAgVGhvc2Ugb2YgeW91IFwKK2ZhbWlsaWFyIHdpdGggdGhlIERCSSB3aWxsIGJlIHJpZ2h0IGF0IGhvbWUuICBTb21lIG9mIHRoZSBkZXNpZ25zIFwKK2NvbWUgZnJvbSB0aGUgSmF2YSBKQVhQIHNwZWNpZmljYXRpb24gKFNBWCBwYXJ0KSwgb25seSB3aXRob3V0IHRoZSBcCitqYXZhbmVzcy4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitERVBFTkRTICs9ICJsaWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ICs9ICJsaWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsIGxpYnhtbC1zYXgtYmFzZS1wZXJsIHBlcmwtbW9kdWxlLWZpbGUtdGVtcCIKK1BSID0gInIyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02NWM0Y2Q4ZjM5YzI0YzcxMzVlZDcwZGFjYmNiMDllMyIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9HL0dSL0dSQU5UTS9YTUwtU0FYLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5MGY1Mzc1YWU4N2ZkZWJmZGI1YmMzODU0MDE5ZjI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMyYjA0YjhlMzZiNmNjNGNmYzQ4NmRlMmQ4NTlkODdhZjUzODZkZDkzMGYyMzgzYzQ5MzQ3MDUwZDZmNWFkODQiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtU0FYLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3ouaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODk5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkEgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgZ3ppcCIKK0RFU0NSSVBUSU9OID0gInBpZ3osIHdoaWNoIHN0YW5kcyBmb3IgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgZ3ppcCwgaXMgYSBcCitmdWxseSBmdW5jdGlvbmFsIHJlcGxhY2VtZW50IGZvciBnemlwIHRoYXQgZXhwbG9pdHMgbXVsdGlwbGUgcHJvY2Vzc29ycyBhbmQgXAorbXVsdGlwbGUgY29yZXMgdG8gdGhlIGhpbHQgd2hlbiBjb21wcmVzc2luZyBkYXRhLiBwaWd6IHdhcyB3cml0dGVuIGJ5IE1hcmsgXAorQWRsZXIsIGFuZCB1c2VzIHRoZSB6bGliIGFuZCBwdGhyZWFkIGxpYnJhcmllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vemxpYi5uZXQvcGlnei8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIlpsaWIgJiBBcGFjaGUtMi4wIgorCitTUkNfVVJJID0gImh0dHA6Ly96bGliLm5ldC8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitQUk9WSURFU19jbGFzcy1uYXRpdmUgKz0gImd6aXAtbmF0aXZlIgorCitERVBFTkRTID0gInpsaWIiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19pbnN0YWxsX2NsYXNzLXRhcmdldCgpIHsKKwkjIEluc3RhbGwgZmlsZXMgaW50byAvYmluIChGSFMpLCB3aGljaCBpcyB0eXBpY2FsIHBsYWNlIGZvciBnemlwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpbnN0YWxsICR7Qn0vcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vcGlnegorCWxuIC1uc2YgcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vdW5waWd6CisJbG4gLW5zZiBwaWd6ICR7RH0ke2Jhc2VfYmluZGlyfS9waWd6Y2F0Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAke0J9L3BpZ3ogJHtEfSR7YmluZGlyfS9nemlwCisJbG4gLW5zZiBnemlwICR7RH0ke2JpbmRpcn0vZ3VuemlwCisJbG4gLW5zZiBnemlwICR7RH0ke2JpbmRpcn0vemNhdAorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI4MCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd1bnppcCBnemlwIHpjYXQiCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d1bnppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3VuemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d6aXBdID0gIiR7YmFzZV9iaW5kaXJ9L2d6aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbemNhdF0gPSAiJHtiYXNlX2JpbmRpcn0vemNhdCIKK0FMVEVSTkFUSVZFX1RBUkdFVCA9ICIke2Jhc2VfYmluZGlyfS9waWd6IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZWNjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVGhpcyBwYXRjaCBhdm9pZHMgdW5kZXJsaW5raW5nIGlzc3VlcyBzaW5jZSB3ZSBwYXNzIC1seiB2aWEgTERGTEFHUyBidXQgaXQgYXBwZWFycworYmVmb3JlIHBpZ3oubyB3aGljaCBuZWVkcyBzeW1ib2xzIGZyb20gbGlieiBob3dldmVyIGR1ZSB0byBvcmRlciBsaW5rZXIgaGFwcGlseSBkaXNjYXJkcyBsaWJ6CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcGlnei0yLjMuMy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBpZ3otMi4zLjMub3JpZy9NYWtlZmlsZQkyMDE1LTAxLTE5IDIwOjEyOjMxLjAwMDAwMDAwMCAtMDgwMAorKysrIHBpZ3otMi4zLjMvTWFrZWZpbGUJMjAxNS0wMS0yOCAwOToxMTo1MC4yNjY2NjkxODQgLTA4MDAKK0BAIC01LDcgKzUsNyBAQAorICMgdXNlIGdjYyBhbmQgZ21ha2Ugb24gU29sYXJpcworIAorIHBpZ3o6IHBpZ3oubyB5YXJuLm8gdHJ5Lm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlneiAkXiAtbHB0aHJlYWQgLWxtCisrCSQoQ0MpIC1vIHBpZ3ogJF4gJChMREZMQUdTKSAtbHogLWxwdGhyZWFkIC1sbQorIAlsbiAtZiBwaWd6IHVucGlnegorIAorIHBpZ3oubzogcGlnei5jIHlhcm4uaCB0cnkuaCAke1pPUEZMSX1kZWZsYXRlLmggJHtaT1BGTEl9dXRpbC5oCitAQCAtMzUsNyArMzUsNyBAQAorIGRldjogcGlneiBwaWd6dCBwaWd6bgorIAorIHBpZ3p0OiBwaWd6dC5vIHlhcm50Lm8gdHJ5Lm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlnenQgJF4gLWxwdGhyZWFkIC1sbQorKwkkKENDKSAtbyBwaWd6dCAkXiAkKExERkxBR1MpIC1seiAtbHB0aHJlYWQgLWxtCisgCisgcGlnenQubzogcGlnei5jIHlhcm4uaCB0cnkuaAorIAkkKENDKSAkKENGTEFHUykgLURERUJVRyAtZyAtYyAtbyBwaWd6dC5vIHBpZ3ouYworQEAgLTQ0LDcgKzQ0LDcgQEAKKyAJJChDQykgJChDRkxBR1MpIC1EREVCVUcgLWcgLWMgLW8geWFybnQubyB5YXJuLmMKKyAKKyBwaWd6bjogcGlnem4ubyB0cnluLm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlnem4gJF4gLWxtCisrCSQoQ0MpIC1vIHBpZ3puICReICQoTERGTEFHUykgLWx6IC1sbQorIAorIHBpZ3puLm86IHBpZ3ouYyB0cnkuaAorIAkkKENDKSAkKENGTEFHUykgLURERUJVRyAtRE5PVEhSRUFEIC1nIC1jIC1vIHBpZ3puLm8gcGlnei5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnel8yLjMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODBiZTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnel8yLjMuMy5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHBpZ3ouaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9waWd6LmM7YmVnaW5saW5lPTc7ZW5kbGluZT0yMTttZDU9YTIxZDQwNzVjYjAwYWI0Y2ExN2ZjZTVlNzUzNGNhOTUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9saW5rLW9yZGVyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDFkN2ExNmNjZTc3OTI5Y2MxYTc4YWExYmRmYjY4Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGU4YjY3YjQzMmNlNzkwNzU3NWE1NDlmM2UxY2FjNDcwOTc4MWJhMGY2YjQ4YWZlYTlmNTkzNjk4NDZiNTA5YyIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9maXgtY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNGFlODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9maXgtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKKworZXhlY19wcmVmaXggaXMgL3VzciBkZWZhdWx0IGluIE9FLUNvcmUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorSW5kZXg6IHByb2Nwcy1uZy0zLjMuMTAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHJvY3BzLW5nLTMuMy4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHByb2Nwcy1uZy0zLjMuMTAvY29uZmlndXJlLmFjCitAQCAtNzAsNyArNzAsNyBAQCBBQ19GVU5DX01NQVAKKyBBQ19GVU5DX1JFQUxMT0MKKyBBQ19GVU5DX1NUUlRPRAorIAorLXVzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS91c3IvYmluJworK3VzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgQUNfU1VCU1QoW3VzcmJpbl9leGVjZGlyXSkKKyAKKyBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE0LjFdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9zeXNjdGwuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGU3NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorIyBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB0YWtlbiBmcm9tIERlYmlhbi4KKyMKKyMgL2V0Yy9zeXNjdGwuY29uZiAtIENvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc2V0dGluZyBzeXN0ZW0gdmFyaWFibGVzCisjIFNlZSBzeXNjdGwuY29uZiAoNSkgZm9yIGluZm9ybWF0aW9uLgorIworCisja2VybmVsLmRvbWFpbm5hbWUgPSBleGFtcGxlLmNvbQorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIHRvIHN0b3AgbG93LWxldmVsIG1lc3NhZ2VzIG9uIGNvbnNvbGUKKyNrZXJuZWwucHJpbnRrID0gNCA0IDEgNworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzMKKyMgRnVuY3Rpb25zIHByZXZpb3VzbHkgZm91bmQgaW4gbmV0YmFzZQorIworCisjIFVuY29tbWVudCB0aGUgbmV4dCB0d28gbGluZXMgdG8gZW5hYmxlIFNwb29mIHByb3RlY3Rpb24gKHJldmVyc2UtcGF0aCBmaWx0ZXIpCisjIFR1cm4gb24gU291cmNlIEFkZHJlc3MgVmVyaWZpY2F0aW9uIGluIGFsbCBpbnRlcmZhY2VzIHRvCisjIHByZXZlbnQgc29tZSBzcG9vZmluZyBhdHRhY2tzCituZXQuaXB2NC5jb25mLmRlZmF1bHQucnBfZmlsdGVyPTEKK25ldC5pcHY0LmNvbmYuYWxsLnJwX2ZpbHRlcj0xCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIFRDUC9JUCBTWU4gY29va2llcworI25ldC5pcHY0LnRjcF9zeW5jb29raWVzPTEKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgcGFja2V0IGZvcndhcmRpbmcgZm9yIElQdjQKKyNuZXQuaXB2NC5pcF9mb3J3YXJkPTEKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgcGFja2V0IGZvcndhcmRpbmcgZm9yIElQdjYKKyNuZXQuaXB2Ni5jb25mLmFsbC5mb3J3YXJkaW5nPTEKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZGl0aW9uYWwgc2V0dGluZ3MgLSB0aGVzZSBzZXR0aW5ncyBjYW4gaW1wcm92ZSB0aGUgbmV0d29yaworIyBzZWN1cml0eSBvZiB0aGUgaG9zdCBhbmQgcHJldmVudCBhZ2FpbnN0IHNvbWUgbmV0d29yayBhdHRhY2tzCisjIGluY2x1ZGluZyBzcG9vZmluZyBhdHRhY2tzIGFuZCBtYW4gaW4gdGhlIG1pZGRsZSBhdHRhY2tzIHRocm91Z2gKKyMgcmVkaXJlY3Rpb24uIFNvbWUgbmV0d29yayBlbnZpcm9ubWVudHMsIGhvd2V2ZXIsIHJlcXVpcmUgdGhhdCB0aGVzZQorIyBzZXR0aW5ncyBhcmUgZGlzYWJsZWQgc28gcmV2aWV3IGFuZCBlbmFibGUgdGhlbSBhcyBuZWVkZWQuCisjCisjIElnbm9yZSBJQ01QIGJyb2FkY2FzdHMKKyNuZXQuaXB2NC5pY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMgPSAxCisjCisjIElnbm9yZSBib2d1cyBJQ01QIGVycm9ycworI25ldC5pcHY0LmljbXBfaWdub3JlX2JvZ3VzX2Vycm9yX3Jlc3BvbnNlcyA9IDEKKyMKKyMgRG8gbm90IGFjY2VwdCBJQ01QIHJlZGlyZWN0cyAocHJldmVudCBNSVRNIGF0dGFja3MpCisjbmV0LmlwdjQuY29uZi5hbGwuYWNjZXB0X3JlZGlyZWN0cyA9IDAKKyNuZXQuaXB2Ni5jb25mLmFsbC5hY2NlcHRfcmVkaXJlY3RzID0gMAorIyBfb3JfCisjIEFjY2VwdCBJQ01QIHJlZGlyZWN0cyBvbmx5IGZvciBnYXRld2F5cyBsaXN0ZWQgaW4gb3VyIGRlZmF1bHQKKyMgZ2F0ZXdheSBsaXN0IChlbmFibGVkIGJ5IGRlZmF1bHQpCisjIG5ldC5pcHY0LmNvbmYuYWxsLnNlY3VyZV9yZWRpcmVjdHMgPSAxCisjCisjIERvIG5vdCBzZW5kIElDTVAgcmVkaXJlY3RzICh3ZSBhcmUgbm90IGEgcm91dGVyKQorI25ldC5pcHY0LmNvbmYuYWxsLnNlbmRfcmVkaXJlY3RzID0gMAorIworIyBEbyBub3QgYWNjZXB0IElQIHNvdXJjZSByb3V0ZSBwYWNrZXRzICh3ZSBhcmUgbm90IGEgcm91dGVyKQorI25ldC5pcHY0LmNvbmYuYWxsLmFjY2VwdF9zb3VyY2Vfcm91dGUgPSAwCisjbmV0LmlwdjYuY29uZi5hbGwuYWNjZXB0X3NvdXJjZV9yb3V0ZSA9IDAKKyMKKyMgTG9nIE1hcnRpYW4gUGFja2V0cworI25ldC5pcHY0LmNvbmYuYWxsLmxvZ19tYXJ0aWFucyA9IDEKKyMKKworI2tlcm5lbC5zaG1tYXggPSAxNDE3NjI1NjAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZhYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGFuZCBwcm9jZXNzIG1vbml0b3JpbmcgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiUHJvY3BzIGNvbnRhaW5zIGEgc2V0IG9mIHN5c3RlbSB1dGlsaXRpZXMgdGhhdCBwcm92aWRlIHN5c3RlbSBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZXMgdXNpbmcgXAordGhlIC9wcm9jIGZpbGVzeXN0ZW0uIFRoZSBwYWNrYWdlIGluY2x1ZGVzIHRoZSBwcm9ncmFtcyBwcywgdG9wLCB2bXN0YXQsIHcsIGtpbGwsIGFuZCBza2lsbC4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdG9yaW91cy5vcmcvcHJvY3BzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTT0iZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGNmNjZhNDk4NDEyMDAwN2M5ODgxY2M4NzFjZjQ5ZGIgXAorICAgICAgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAibmN1cnNlcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBkYXRlLWFsdGVybmF0aXZlcworCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHJvY3BzLW5nL1Byb2R1Y3Rpb24vcHJvY3BzLW5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2N0bC5jb25mIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZmI3ZjNmNmJmOTJjZTZjNWM5ZWQ5OTQ5YWU4NThmZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMDJlNmY5ODk3NGRmY2VhYjc5ODg0ZGY5MDJjYTNkZjMwYjBlOWJhZDZkNzZhZWUwZmI1ZGNlMTdmMjY3ZjA0IgorCitTID0gIiR7V09SS0RJUn0vcHJvY3BzLW5nLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2tpbGwgLS1kaXNhYmxlLW1vZGVybi10b3AiCisKK0NQUEZMQUdTICs9ICItSSR7U30iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCVsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtzYmluZGlyfS8kaSAke0R9JHtiYXNlX3NiaW5kaXJ9LyRpOyBkb25lCisgICAgICAgIGlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybWRpciAke0R9JHtzYmluZGlyfQorICAgICAgICBmaQorCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQKKyAgICAgICAgICAgICAgICBsbiAtc2YgLi4vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQvOTktc3lzY3RsLmNvbmYKKyAgICAgICAgZmkKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYiCisKK2JpbmRpcl9wcm9ncyA9ICJmcmVlIHBraWxsIHBtYXAgcGdyZXAgcHdkeCBza2lsbCBzbmljZSB0b3AgdXB0aW1lIgorYmFzZV9iaW5kaXJfcHJvZ3MgKz0gImtpbGwgcGlkb2YgcHMgd2F0Y2giCitiYXNlX3NiaW5kaXJfcHJvZ3MgKz0gInN5c2N0bCIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAia2lsbC4xIHVwdGltZS4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3VwdGltZS4xXSA9ICIke21hbmRpcn0vbWFuMS91cHRpbWUuMSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKyAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9zYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3ZDYwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gMzYzOGNjNTViNGQwODg1MWZhYmE0NjYzNWQ3MzdiMjRkMDE2NjY1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyYWQgSm9yc2NoIDxhbm9taWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogRnJpLCAyOCBGZWIgMjAxNCAyMTo1NTowMiArMTEwMAorU3ViamVjdDogW1BBVENIXSBUeXBvIGluIGZ1c2VyIG1ha2VzIC1NIG9uIGFsbCB0aGUgdGltZQorCitCcmFkIGZvdW5kIHRoYXQgZnVzZXIgaGFkIHRoZSAtTSBvcHRpb24gb24gYWxsIHRoZSB0aW1lLgorQSBzaW1wbGUgYnV0IHNpZ25pZmljYW50IHR5cG8gY2F1c2VkIHRoaXMsIHRoYW5rcyB0aGUgdGhlIHBhdGNoLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc0MDI3NQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENyYWlnIFNtYWxsIDxjc21hbGxAZW5jLmNvbS5hdT4KKy0tLQorIENoYW5nZUxvZyAgIHwgNCArKysrCisgc3JjL2Z1c2VyLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggZmQxY2NjZi4uZTVmNzg0YyAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDcgQEAKKytDaGFuZ2VzIGluIDIyLjIyCisrPT09PT09PT09PT09PT09PQorKwkqIEZpeGVkIHR5cG8gaW4gZnVzZXIgd2hpY2ggaGFzIC1NIG9uIERlYmlhbiAjNzQwMjc1CisrCisgQ2hhbmdlcyBpbiAyMi4yMQorID09PT09PT09PT09PT09PT0KKyAJKiBNaXNzaW5nIGNvbW1hIGluIGZ1c2VyKDEpIGFkZGVkIERlYmlhbiAjNzAyMzkxCitkaWZmIC0tZ2l0IGEvc3JjL2Z1c2VyLmMgYi9zcmMvZnVzZXIuYworaW5kZXggYjQ4NWY2NS4uMzg5YjMwMiAxMDA2NDQKKy0tLSBhL3NyYy9mdXNlci5jCisrKysgYi9zcmMvZnVzZXIuYworQEAgLTExNzQsNyArMTE3NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQl1c2FnZShfKCJObyBwcm9jZXNzIHNwZWNpZmljYXRpb24gZ2l2ZW4iKSk7CisgCisgCS8qIENoZWNrIGlmIC1NIGZsYWcgd2FzIHVzZWQgYW5kIGlmIHNvIGNoZWNrIG1vdW50cyAqLworLQlpZiAob3B0cyAqIE9QVF9JU01PVU5UUE9JTlQpIHsKKysJaWYgKG9wdHMgJiBPUFRfSVNNT1VOVFBPSU5UKSB7CisgCSAgICBjaGVja19tb3VudHBvaW50cygmbW91bnRzLCAmbmFtZXNfaGVhZCwgJm5hbWVzX3RhaWwpOworIAl9CisgCistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YWZjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBhYTY2YWZlY2Q4YmE5Y2M0MTM5ZjI1YWIxNWVjMzE1MTczNDEzYTdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KK0RhdGU6IFdlZCwgMjAgQXVnIDIwMTQgMTA6MzE6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSA8bGltaXRzLmg+IGZvciBQQVRIX01BWAorCitXaGVuIGJ1aWxkaW5nIGFnYWluc3QgbXVzbCBsaWJjLCBQQVRIX01BWCBpcyBkZWZpbmVkIGluIDxsaW1pdHMuaD4uCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgKFNob3VsZCBiZSBpbiBuZXh0IHJlbGVhc2UgYWZ0ZXIgMjIuMjEpCistLS0KKyBzcmMvcHN0cmVlLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9wc3RyZWUuYyBiL3NyYy9wc3RyZWUuYworaW5kZXggMDcxZTZjNC4uMGQyODI2MCAxMDA2NDQKKy0tLSBhL3NyYy9wc3RyZWUuYworKysrIGIvc3JjL3BzdHJlZS5jCitAQCAtNDEsNiArNDEsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpbmNsdWRlICJpMThuLmgiCisgI2luY2x1ZGUgImNvbW0uaCIKKy0tIAorMi4wLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTA2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIHByb2Nlc3NlcyBvbiB5b3VyIHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBwc21pc2MgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgZm9yIG1hbmFnaW5nIHByb2Nlc3NlcyBvbiB5b3VyIFwKK3N5c3RlbTogcHN0cmVlLCBraWxsYWxsIGFuZCBmdXNlci4gIFRoZSBwc3RyZWUgY29tbWFuZCBkaXNwbGF5cyBhIHRyZWUgXAorc3RydWN0dXJlIG9mIGFsbCBvZiB0aGUgcnVubmluZyBwcm9jZXNzZXMgb24geW91ciBzeXN0ZW0uICBUaGUga2lsbGFsbCBcCitjb21tYW5kIHNlbmRzIGEgc3BlY2lmaWVkIHNpZ25hbCAoU0lHVEVSTSBpZiBub3RoaW5nIGlzIHNwZWNpZmllZCkgdG8gXAorcHJvY2Vzc2VzIGlkZW50aWZpZWQgYnkgbmFtZS4gIFRoZSBmdXNlciBjb21tYW5kIGlkZW50aWZpZXMgdGhlIFBJRHMgXAorb2YgcHJvY2Vzc2VzIHRoYXQgYXJlIHVzaW5nIHNwZWNpZmllZCBmaWxlcyBvciBmaWxlc3lzdGVtcy4iCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpbnRsIgorTElDRU5TRSA9ICJHUEx2MiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHNtaXNjL3BzbWlzYy0ke1BWfS50YXIuZ3oiCisKK1MgPSAiJHtXT1JLRElSfS9wc21pc2MtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgImZ1c2VyIGZ1c2VyLWRvYyBraWxsYWxsIGtpbGxhbGwtZG9jIHBzdHJlZSBwc3RyZWUtZG9jIgorUEFDS0FHRVMgKz0gInBzbWlzYy1leHRyYXMiCisKK0ZJTEVTXyR7UE59ID0gIiIKK1JERVBFTkRTXyR7UE59ID0gImZ1c2VyIGtpbGxhbGwgcHN0cmVlIgorCitGSUxFU19mdXNlciA9ICIke2JpbmRpcn0vZnVzZXIuJHtCUE59IgorRklMRVNfZnVzZXItZG9jID0gIiR7bWFuZGlyfS9tYW4xL2Z1c2VyKiIKKworRklMRVNfa2lsbGFsbCA9ICIke2JpbmRpcn0va2lsbGFsbC4ke0JQTn0iCitGSUxFU19raWxsYWxsLWRvYyA9ICIke21hbmRpcn0vbWFuMS9raWxsYWxsKiIKKworRklMRVNfcHN0cmVlID0gIiR7YmluZGlyfS9wc3RyZWUiCitGSUxFU19wc3RyZWUtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BzdHJlZSoiCisKK0ZJTEVTX3BzbWlzYy1leHRyYXMgPSAiJHtiaW5kaXJ9IgorRklMRVNfcHNtaXNjLWV4dHJhcy1kb2MgPSAiJHttYW5kaXJ9IgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiOTAiCisKK0FMVEVSTkFUSVZFX2tpbGxhbGwgPSAia2lsbGFsbCIKKworQUxURVJOQVRJVkVfZnVzZXIgPSAiZnVzZXIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjXzIyLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YWJhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHBzbWlzYy5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzNWMwZmQ2ZWIyMDgyODgyNjJiMzg1ZmE2NTZmMWJmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3MzIzY2FkNjE5MjEwODQ1YjY5NmQ3ZDcyMmMzODM4NTJiMmFjYjVjNDliNWIwODUyYzRmMjljNzdhODE0NWEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggXAorICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9jb25maWctdGNwd3JhcHBlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0N2ZiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9jb25maWctdGNwd3JhcHBlcnMucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBxdW90YS10b29scy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIHF1b3RhLXRvb2xzL2NvbmZpZ3VyZS5pbgorQEAgLTE1MSwzMyArMTUxLDQ2IEBAIEFDX1NVQlNUKFFVT1RBX05FVExJTktfUFJPRykKKyBBQ19TVUJTVChORVRMSU5LTElCUykKKworIEFDX1NFQVJDSF9MSUJTKGdldGhvc3RieW5hbWUsIG5zbCkKKy1BQ19NU0dfQ0hFQ0tJTkcoZm9yIGhvc3RfYWNjZXNzIGluIC1sd3JhcCkKKy1BQ19DQUNIRV9WQUwoYWNfY3ZfbGliX3dyYXBfbWFpbiwKKy0Jc2F2ZWRfTElCUz0iJExJQlMiCistCUxJQlM9IiRMSUJTIC1sd3JhcCIKKy0JW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0JI2luY2x1ZGUgPHN0ZGlvLmg+CistCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0JI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0JI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKy0JI2luY2x1ZGUgPHRjcGQuaD4KKy0Jc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworLQlpbnQgZGVueV9zZXZlcml0eSwgYWxsb3dfc2V2ZXJpdHk7XV0sW1tob3N0c19hY2Nlc3MoJnJlcXVlc3QpO11dKV0sCistCWRubCBXZSBhbHdheXMgcmVzdG9yZSBMSUJTIGFzIHdlIGFkZCAtbHdyYXAgaW4gdGhlIG5leHQgY2hlY2sKKy0JW2FjX2N2X2xpYl93cmFwX21haW49eWVzOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQoeWVzKV0sCistCVthY19jdl9saWJfd3JhcF9tYWluPW5vOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQobm8pXSkKKy0JXSkKKworLWlmIHRlc3QgJHthY19jdl9saWJfd3JhcF9tYWlufSA9IHllczsgdGhlbgorLQlBQ19DSEVDS19IRUFERVIodGNwZC5oLCwgWworLQkJZWNobyAnRVJST1I6IGNvdWxkIG5vdCBmaW5kIHRjcGQuaCAtIG1pc3NpbmcgVENQIHdyYXBwZXJzIHBhY2thZ2UnCistCQlleGl0IDEKKy0JXSkKKy0JTElCUz0iJExJQlMgLWx3cmFwIgorLQlBQ19ERUZJTkUoW0hPU1RTX0FDQ0VTU10sIDEsIFtVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhZF0pCistCUNPTVBJTEVfT1BUUz0iJENPTVBJTEVfT1BUUyBIT1NUU19BQ0NFU1MiCisrQUNfQVJHX1dJVEgodGNwd3JhcHBlcnMsCisrCVsgIC0td2l0aC10Y3B3cmFwcGVycz1beWVzL25vL3RyeV0gICBVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhIFtkZWZhdWx0PXllcywgaWYgYXZhaWxhYmxlLl1dLAorKwksCisrCXdpdGhfdGNwd3JhcHBlcnM9InRyeSIpCisrCisraWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4bm87IHRoZW4KKysJQUNfTVNHX0NIRUNLSU5HKGZvciBob3N0X2FjY2VzcyBpbiAtbHdyYXApCisrCUFDX0NBQ0hFX1ZBTChhY19jdl9saWJfd3JhcF9tYWluLAorKwkJc2F2ZWRfTElCUz0iJExJQlMiCisrCQlMSUJTPSIkTElCUyAtbHdyYXAiCisrCQlbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworKwkJI2luY2x1ZGUgPHN0ZGlvLmg+CisrCQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCQkjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKwkJI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysJCSNpbmNsdWRlIDx0Y3BkLmg+CisrCQlzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJlcXVlc3Q7CisrCQlpbnQgZGVueV9zZXZlcml0eSwgYWxsb3dfc2V2ZXJpdHk7XV0sW1tob3N0c19hY2Nlc3MoJnJlcXVlc3QpO11dKV0sCisrCQlkbmwgV2UgYWx3YXlzIHJlc3RvcmUgTElCUyBhcyB3ZSBhZGQgLWx3cmFwIGluIHRoZSBuZXh0IHRyeQorKwkJW2FjX2N2X2xpYl93cmFwX21haW49eWVzOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQoeWVzKV0sCisrCQlbYWNfY3ZfbGliX3dyYXBfbWFpbj1ubzsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKG5vKV0pCisrCQldKQorKworKwlpZiB0ZXN0ICJ4JGFjX2N2X2xpYl93cmFwX21haW4iID0geHllczsgdGhlbgorKwkJQUNfQ0hFQ0tfSEVBREVSKHRjcGQuaCwsIFsKKysJCQlpZiB0ZXN0ICJ4JHdpdGhfdGNwd3JhcHBlcnMiICE9IHh0cnk7IHRoZW4KKysJCQkJQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgZmluZCB0Y3BkLmggLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlXSkKKysJCQlmaQorKwkJXSkKKysKKysJCUxJQlM9IiRMSUJTIC1sd3JhcCIKKysJCUFDX0RFRklORShbSE9TVFNfQUNDRVNTXSwgMSwgW1VzZSBob3N0cy5hbGxvdyBhbmQgaG9zdHMuZGVueSBmb3IgYWNjZXNzIGNoZWNraW5nIG9mIHJwYy5ycXVvdGFkXSkKKysJCUNPTVBJTEVfT1BUUz0iJENPTVBJTEVfT1BUUyBIT1NUU19BQ0NFU1MiCisrCWVsaWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4dHJ5OyB0aGVuCisrCQlBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBmaW5kIGxpYndyYXAgLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlXSkKKysJZmkKKyBmaQorCisrCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfQ19DT05TVAorIEFDX0NfSU5MSU5FCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlNjBmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorSW5jbHVkZSBmY250bC5oIHRvIHBhY2lmeSBjb21waWxlciBlcnJvcnMgb24gbXVzbAorbGlrZQorCitlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ2xvZmZfdCcKK0NvdmVyIHJwYyBoZWFkZXJzIHVuZGVyIHByb3BlciBjb25kaXRpb25hbAorRG9udCB1c2UgX19QIGl0cyB1bmRlZmluZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK25kZXg6IHF1b3RhLXRvb2xzL3F1b3RhLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0luZGV4OiBxdW90YS10b29scy9xdW90YS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YS5oCisrKysgcXVvdGEtdG9vbHMvcXVvdGEuaAorQEAgLTE2NSw2ICsxNjUsNiBAQCBlbnVtIHsKKyAJI2VuZGlmCisgI2VuZGlmCisgCistbG9uZyBxdW90YWN0bCBfX1AoKGludCwgY29uc3QgY2hhciAqLCBxaWRfdCwgY2FkZHJfdCkpOworK2xvbmcgcXVvdGFjdGwgKGludCwgY29uc3QgY2hhciAqLCBxaWRfdCwgY2FkZHJfdCk7CisgCisgI2VuZGlmIC8qIF9RVU9UQV8gKi8KK0luZGV4OiBxdW90YS10b29scy9xdW90YWNoZWNrLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3RhY2hlY2suYworKysrIHF1b3RhLXRvb2xzL3F1b3RhY2hlY2suYworQEAgLTE5LDYgKzE5LDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorIAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0luZGV4OiBxdW90YS10b29scy9xdW90YWlvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3RhaW8uYworKysrIHF1b3RhLXRvb2xzL3F1b3RhaW8uYworQEAgLTEyLDYgKzEyLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CitJbmRleDogcXVvdGEtdG9vbHMvZHFibGtfdjIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvZHFibGtfdjIuaAorKysrIHF1b3RhLXRvb2xzL2RxYmxrX3YyLmgKK0BAIC03LDYgKzcsNyBAQAorICNpZm5kZWYgR1VBUkRfRFFCTEtfVjJfSAorICNkZWZpbmUgR1VBUkRfRFFCTEtfVjJfSAorIAorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSAicXVvdGFfdHJlZS5oIgorIAorSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3Rhb3BzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3Rhb3BzLmMKKysrKyBxdW90YS10b29scy9xdW90YW9wcy5jCitAQCAtMzQsNyArMzQsOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CitJbmRleDogcXVvdGEtdG9vbHMvcnF1b3RhX2NsaWVudC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9ycXVvdGFfY2xpZW50LmMKKysrKyBxdW90YS10b29scy9ycXVvdGFfY2xpZW50LmMKK0BAIC0xOSw3ICsxOSw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitAQCAtMzUsNyArMzcsOSBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAibW50b3B0LmgiCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlICJycXVvdGEuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgI2luY2x1ZGUgInF1b3RhaW8uaCIKKyAjaW5jbHVkZSAicXVvdGFzeXMuaCIKK0luZGV4OiBxdW90YS10b29scy9zZXRxdW90YS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9zZXRxdW90YS5jCisrKysgcXVvdGEtdG9vbHMvc2V0cXVvdGEuYworQEAgLTcsNyArNyw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0MmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMTg1IEBACitVc2UgcHJvcGVyIEM5OSBpbnRlZ2VyIHR5cGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcXVvdGEtdG9vbHMvYnlsYWJlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9ieWxhYmVsLmMKKysrKyBxdW90YS10b29scy9ieWxhYmVsLmMKK0BAIC0yMCw2ICsyMCw3IEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAiYnlsYWJlbC5oIgorICNpbmNsdWRlICJjb21tb24uaCIKK0BAIC0zNywzMiArMzgsMzIgQEAgc3RhdGljIHN0cnVjdCB1dWlkQ2FjaGVfcyB7CisgCisgI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDCTB4RUY1MworIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfZHVtbXkxWzU2XTsKKy0JdV9jaGFyIHNfbWFnaWNbMl07CistCXVfY2hhciBzX2R1bW15Mls0Nl07CistCXVfY2hhciBzX3V1aWRbMTZdOworLQl1X2NoYXIgc192b2x1bWVfbmFtZVsxNl07CisrCXVpbnQ4X3Qgc19kdW1teTFbNTZdOworKwl1aW50OF90IHNfbWFnaWNbMl07CisrCXVpbnQ4X3Qgc19kdW1teTJbNDZdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc192b2x1bWVfbmFtZVsxNl07CisgfTsKKyAKKy0jZGVmaW5lIGV4dDJtYWdpYyhzKQkoKHVpbnQpIHMuc19tYWdpY1swXSArICgoKHVpbnQpIHMuc19tYWdpY1sxXSkgPDwgOCkpCisrI2RlZmluZSBleHQybWFnaWMocykJKCh1aW50MzJfdCkgcy5zX21hZ2ljWzBdICsgKCgodWludDMyX3QpIHMuc19tYWdpY1sxXSkgPDwgOCkpCisgCisgI2RlZmluZSBYRlNfU1VQRVJfTUFHSUMgIlhGU0IiCisgI2RlZmluZSBYRlNfU1VQRVJfTUFHSUMyICJCU0ZYIgorIHN0cnVjdCB4ZnNfc3VwZXJfYmxvY2sgeworLQl1X2NoYXIgc19tYWdpY1s0XTsKKy0JdV9jaGFyIHNfZHVtbXlbMjhdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfZHVtbXkyWzYwXTsKKy0JdV9jaGFyIHNfZnNuYW1lWzEyXTsKKysJdWludDhfdCBzX21hZ2ljWzRdOworKwl1aW50OF90IHNfZHVtbXlbMjhdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc19kdW1teTJbNjBdOworKwl1aW50OF90IHNfZnNuYW1lWzEyXTsKKyB9OworIAorICNkZWZpbmUgUkVJU0VSX1NVUEVSX01BR0lDCSJSZUlzRXIyRnMiCisgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfZHVtbXkxWzUyXTsKKy0JdV9jaGFyIHNfbWFnaWNbMTBdOworLQl1X2NoYXIgc19kdW1teTJbMjJdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfdm9sdW1lX25hbWVbMTZdOworKwl1aW50OF90IHNfZHVtbXkxWzUyXTsKKysJdWludDhfdCBzX21hZ2ljWzEwXTsKKysJdWludDhfdCBzX2R1bW15MlsyMl07CisrCXVpbnQ4X3Qgc191dWlkWzE2XTsKKysJdWludDhfdCBzX3ZvbHVtZV9uYW1lWzE2XTsKKyB9OworIAorIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc3dhcHBlZCh1bnNpZ25lZCBzaG9ydCBhKQorQEAgLTIyMiw3ICsyMjMsNyBAQCBzdGF0aWMgY2hhciAqZ2V0X3NwZWNfYnlfeChpbnQgbiwgY29uc3QKKyAJcmV0dXJuIE5VTEw7CisgfQorIAorLXN0YXRpYyB1X2NoYXIgZnJvbWhleChjaGFyIGMpCisrc3RhdGljIHVpbnQ4X3QgZnJvbWhleChjaGFyIGMpCisgeworIAlpZiAoaXNkaWdpdChjKSkKKyAJCXJldHVybiAoYyAtICcwJyk7CitAQCAtMjM0LDcgKzIzNSw3IEBAIHN0YXRpYyB1X2NoYXIgZnJvbWhleChjaGFyIGMpCisgCisgc3RhdGljIGNoYXIgKmdldF9zcGVjX2J5X3V1aWQoY29uc3QgY2hhciAqcykKKyB7CistCXVfY2hhciB1dWlkWzE2XTsKKysJdWludDhfdCB1dWlkWzE2XTsKKyAJaW50IGk7CisgCisgCWlmIChzdHJsZW4ocykgIT0gMzYgfHwgc1s4XSAhPSAnLScgfHwgc1sxM10gIT0gJy0nIHx8IHNbMThdICE9ICctJyB8fCBzWzIzXSAhPSAnLScpCitJbmRleDogcXVvdGEtdG9vbHMvcXVvdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90LmMKKysrKyBxdW90YS10b29scy9xdW90LmMKK0BAIC00Nyw2ICs0Nyw3IEBACisgI2luY2x1ZGUgPHV0bXAuaD4KKyAjaW5jbHVkZSA8cHdkLmg+CisgI2luY2x1ZGUgPGdycC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAicG90LmgiCisgI2luY2x1ZGUgInF1b3QuaCIKK0BAIC01Niw4ICs1Nyw4IEBACisgI2luY2x1ZGUgInF1b3Rhc3lzLmgiCisgCisgI2RlZmluZQlUU0laRQk1MDAKKy1zdGF0aWMgX191aW50NjRfdCBzaXplc1tUU0laRV07Cistc3RhdGljIF9fdWludDY0X3Qgb3ZlcmZsb3c7Cisrc3RhdGljIHVpbnQ2NF90IHNpemVzW1RTSVpFXTsKKytzdGF0aWMgdWludDY0X3Qgb3ZlcmZsb3c7CisgCisgc3RhdGljIGludCBhZmxhZzsKKyBzdGF0aWMgaW50IGNmbGFnOworQEAgLTcyLDcgKzczLDcgQEAgc3RhdGljIHRpbWVfdCBub3c7CisgY2hhciAqcHJvZ25hbWU7CisgCisgc3RhdGljIHZvaWQgbW91bnR0YWJsZSh2b2lkKTsKKy1zdGF0aWMgY2hhciAqaWRuYW1lKF9fdWludDMyX3QsIGludCk7Cisrc3RhdGljIGNoYXIgKmlkbmFtZSh1aW50MzJfdCwgaW50KTsKKyBzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Cisgc3RhdGljIHZvaWQgY3JlcG9ydChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgCitAQCAtMTczLDcgKzE3NCw3IEBAIHN0YXRpYyBpbnQgcWNtcChkdV90ICogcDEsIGR1X3QgKiBwMikKKyBzdGF0aWMgdm9pZCBjcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZzZGlyKQorIHsKKyAJaW50IGk7CistCV9fdWludDY0X3QgdCA9IDA7CisrCXVpbnQ2NF90IHQgPSAwOworIAorIAlwcmludGYoXygiJXMgKCVzKTpcbiIpLCBmaWxlLCBmc2Rpcik7CisgCWZvciAoaSA9IDA7IGkgPCBUU0laRSAtIDE7IGkrKykKK0BAIC0yMTksNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGUsIGNvbgorIAl9CisgfQorIAorLXN0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIF9fdWludDMyX3QgaWQsIGludCBieWlkKQorK3N0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIHVpbnQzMl90IGlkLCBpbnQgYnlpZCkKKyB7CisgCXN0cnVjdCBwYXNzd2QgKnB3OworIAlzdHJ1Y3QgZ3JvdXAgICpncjsKK0BAIC0yNDAsNyArMjQxLDcgQEAgc3RhdGljIGlkY2FjaGVfdCAqZ2V0bmV4dGVudChpbnQgdHlwZSwgXworIAlyZXR1cm4gJmlkYzsKKyB9CisgCistc3RhdGljIGNoYXIgKmlkbmFtZShfX3VpbnQzMl90IGlkLCBpbnQgdHlwZSkKKytzdGF0aWMgY2hhciAqaWRuYW1lKHVpbnQzMl90IGlkLCBpbnQgdHlwZSkKKyB7CisgCWlkY2FjaGVfdCAqbmNwLCAqaWRwOworIAlzdGF0aWMgaWRjYWNoZV90IG5jWzJdW05JRF07CitAQCAtMjg2LDggKzI4Nyw4IEBAIHN0YXRpYyB2b2lkIGFjY3RYRlMoeGZzX2JzdGF0X3QgKnApCisgeworIAlyZWdpc3RlciBkdV90ICpkcDsKKyAJZHVfdCAqKmhwOworLQlfX3VpbnQ2NF90IHNpemU7CistCV9fdWludDMyX3QgaSwgaWQ7CisrCXVpbnQ2NF90IHNpemU7CisrCXVpbnQzMl90IGksIGlkOworIAorIAlpZiAoKHAtPmJzX21vZGUgJiBTX0lGTVQpID09IDApCisgCQlyZXR1cm47CitJbmRleDogcXVvdGEtdG9vbHMvcXVvdC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90LmgKKysrKyBxdW90YS10b29scy9xdW90LmgKK0BAIC0zNSwxOCArMzUsMTggQEAKKyAjZGVmaW5lCVNFQzI0SFIJKDYwKjYwKjI0KQkvKiBzZWNvbmRzIHBlciBkYXkgKi8KKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCV9fdWludDMyX3QgaWQ7CisrCXVpbnQzMl90IGlkOworIAljaGFyIG5hbWVbVVRfTkFNRVNJWkUgKyAxXTsKKyB9IGlkY2FjaGVfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCBkdSB7CisgCXN0cnVjdCBkdSAqbmV4dDsKKy0JX191aW50NjRfdCBibG9ja3M7CistCV9fdWludDY0X3QgYmxvY2tzMzA7CistCV9fdWludDY0X3QgYmxvY2tzNjA7CistCV9fdWludDY0X3QgYmxvY2tzOTA7CistCV9fdWludDY0X3QgbmZpbGVzOworLQlfX3VpbnQzMl90IGlkOworKwl1aW50NjRfdCBibG9ja3M7CisrCXVpbnQ2NF90IGJsb2NrczMwOworKwl1aW50NjRfdCBibG9ja3M2MDsKKysJdWludDY0X3QgYmxvY2tzOTA7CisrCXVpbnQ2NF90IG5maWxlczsKKysJdWludDMyX3QgaWQ7CisgfSBkdV90OworIAorICNkZWZpbmUJTkRVCTYwMDAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2EyZmZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitSZXBsYWNlIGdldHJwY2J5bnVtYmVyX3Igd2l0aCBnZXRycGNieW51bWJlcgorbXVzbCBhbmQgdWNsaWJjIGRvbnQgaW1wbGVtZW50IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IHF1b3RhLXRvb2xzL3N2Y19zb2NrZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvc3ZjX3NvY2tldC5jCisrKysgcXVvdGEtdG9vbHMvc3ZjX3NvY2tldC5jCitAQCAtNTUsNyArNTUsOCBAQCBzdGF0aWMgaW50IHN2Y19zb2NrZXQgKHVfbG9uZyBudW1iZXIsIGluCisgCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgCisgCWlmICghcG9ydCkgeworLQkJcmV0ID0gZ2V0cnBjYnludW1iZXJfcihudW1iZXIsICZycGNidWYsIHJwY2RhdGEsIHNpemVvZihycGNkYXRhKSwgJnJwY3ApOworKwkJcnBjcCA9IGdldHJwY2J5bnVtYmVyKG51bWJlcik7CisrCQlyZXQgPSAwOworIAkJaWYgKHJldCA9PSAwICYmIHJwY3AgIT0gTlVMTCkgeworIAkJCS8qIEZpcnN0IHRyeSBuYW1lICovCisgCQkJcmV0ID0gZ2V0c2VydmJ5bmFtZV9yKHJwY3AtPnJfbmFtZSwgcHJvdG8sICZzZXJ2YnVmLCBzZXJ2ZGF0YSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0YjBhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1vbml0b3JpbmcgJiBsaW1pdGluZyB1c2VyIGRpc2sgdXNhZ2UgcGVyIGZpbGVzeXN0ZW0iCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4cXVvdGEvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE4MTM2JmF0aWQ9MTE4MTM2IgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9xdW90YS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzM7bWQ1PTMzMWM3ZDc3NzQ0YmZlMGFkMjQwMjdmMDY1MTAyOGVjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JxdW90YV9zZXJ2ZXIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mZTdlMGQ3ZTExYzZmODIwZjhmYTYyYTVhZjcxMjMwZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zdmNfc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9MjRkNWE4NzkyZGE0NTkxMDc4NmVlYWM3NTBiZThjZWIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGludXhxdW90YS9xdW90YS10b29scy8ke1BWfS9xdW90YS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZjbnRsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2ggXAorCSAgICIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImE4YTVkZjI2MjI2MWU2NTk3MTZjY2FkMmE1ZDZkZjBkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY0YzJmNDhhYmY5NGJiZGMzOTZkZjMzZDI3NmYyZTlkMTlhZjU4YzIzMmNiODVlZWY5YzE3NGE3NDdjMzM3OTUiCisKK1MgPSAiJHtXT1JLRElSfS9xdW90YS10b29scyIKKworREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSBlMmZzcHJvZ3MiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHBrZ2NvbmZpZworCitDRkxBR1MgKz0gIi1JPSR7aW5jbHVkZWRpcn0vdGlycGMiCitMREZMQUdTICs9ICItbHRpcnBjIgorQVNORUVERUQgPSAiIgorRVhUUkFfT0VNQUtFICs9ICdTVFJJUD0iIicKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyBycGMgYnNkIgorUEFDS0FHRUNPTkZJR19saWJjLW11c2wgPSAidGNwLXdyYXBwZXJzIHJwYyIKKworUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC10Y3B3cmFwcGVycywtLXdpdGhvdXQtdGNwd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1tycGNdID0gIi0tZW5hYmxlLXJwYz15ZXMsLS1lbmFibGUtcnBjPW5vLGxpYnRpcnBjIgorUEFDS0FHRUNPTkZJR1tic2RdID0gIi0tZW5hYmxlLWJzZF9iZWhhdmlvdXI9eWVzLC0tZW5hYmxlLWJzZF9iZWhhdmlvdXI9bm8sIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUk9PVERJUj0ke0R9IGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlZjlmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMjIxIEBACitGcm9tIDJhNDRkODYyMjMzZjIxMjY1ODFlMjkwZDU2OGUxYzhiOGYyZWI5ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsbyBMYW5kbWV0ZXIgPGNsYW5kbWV0ZXJAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAxNToyODo0NSArMDAwMAorU3ViamVjdDogW1BBVENIXSBBdm9pZCB1c2Ugb2YgZ2xpYmMgc3lzL2NkZWZzLmggaGVhZGVyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3JjL2NoZWNrX2JvdW5kLmMgIHwgICAgMiArLQorIHNyYy9wbWFwX3N2Yy5jICAgICB8ICAgMTAgKysrKystLS0tLQorIHNyYy9ycGNiX3N2Yy5jICAgICB8ICAgMTAgKysrKystLS0tLQorIHNyYy9ycGNiX3N2Y180LmMgICB8ICAgMTQgKysrKysrKy0tLS0tLS0KKyBzcmMvcnBjYl9zdmNfY29tLmMgfCAgIDQ2ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvcnBjYmluZC5jICAgICAgfCAgIDEyICsrKysrKy0tLS0tLQorIHNyYy91dGlsLmMgICAgICAgICB8ICAgIDIgKy0KKyBzcmMvd2FybXN0YXJ0LmMgICAgfCAgICA0ICsrLS0KKyA4IGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NoZWNrX2JvdW5kLmMgYi9zcmMvY2hlY2tfYm91bmQuYworaW5kZXggYzcwYjg0NS4uNWQyMTczMCAxMDA2NDQKKy0tLSBhL3NyYy9jaGVja19ib3VuZC5jCisrKysgYi9zcmMvY2hlY2tfYm91bmQuYworQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBmZGxpc3QgKmZkaGVhZDsJLyogTGluayBsaXN0IG9mIHRoZSBjaGVjayBmZCdzICovCisgc3RhdGljIHN0cnVjdCBmZGxpc3QgKmZkdGFpbDsKKyBzdGF0aWMgY2hhciAqbnVsbHN0cmluZyA9ICIiOworIAorLXN0YXRpYyBib29sX3QgY2hlY2tfYm91bmQgX19QKChzdHJ1Y3QgZmRsaXN0ICosIGNoYXIgKnVhZGRyKSk7Cisrc3RhdGljIGJvb2xfdCBjaGVja19ib3VuZCAoc3RydWN0IGZkbGlzdCAqLCBjaGFyICp1YWRkcik7CisgCisgLyoKKyAgKiBSZXR1cm5zIDEgaWYgdGhlIGdpdmVuIGFkZHJlc3MgaXMgYm91bmQgZm9yIHRoZSBnaXZlbiBhZGRyICYgdHJhbnNwb3J0CitkaWZmIC0tZ2l0IGEvc3JjL3BtYXBfc3ZjLmMgYi9zcmMvcG1hcF9zdmMuYworaW5kZXggYWQyOGI5My4uOWM3ZDQwOSAxMDA2NDQKKy0tLSBhL3NyYy9wbWFwX3N2Yy5jCisrKysgYi9zcmMvcG1hcF9zdmMuYworQEAgLTYwLDExICs2MCwxMSBAQCBzdGF0aWMJY2hhciBzY2NzaWRbXSA9ICJAKCMpcG1hcF9zdmMuYyAxLjIzIDg5LzA0LzA1IENvcHlyIDE5ODQgU3VuIE1pY3JvIjsKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorICNpbmNsdWRlICJ4bG9nLmgiCisgI2luY2x1ZGUgPHJwYy9zdmNfc29jLmg+IC8qIHN2Y19nZXRjYWxsZXIgcm91dGluZSBkZWZpbml0aW9uICovCistc3RhdGljIHN0cnVjdCBwbWFwbGlzdCAqZmluZF9zZXJ2aWNlX3BtYXAgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwKKy0JCQkJCSAgICAgICBycGNwcm90X3QpKTsKKy1zdGF0aWMgYm9vbF90IHBtYXBwcm9jX2NoYW5nZSBfX1AoKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgdV9sb25nKSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19nZXRwb3J0IF9fUCgoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19kdW1wIF9fUCgoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKSk7Cisrc3RhdGljIHN0cnVjdCBwbWFwbGlzdCAqZmluZF9zZXJ2aWNlX3BtYXAgKHJwY3Byb2dfdCwgcnBjdmVyc190LAorKwkJCQkJICAgICAgIHJwY3Byb3RfdCk7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19jaGFuZ2UgKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgdV9sb25nKTsKKytzdGF0aWMgYm9vbF90IHBtYXBwcm9jX2dldHBvcnQgKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKik7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19kdW1wIChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICopOworIAorIC8qCisgICogQ2FsbGVkIGZvciBhbGwgdGhlIHZlcnNpb24gMiBpbnF1aXJpZXMuCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjLmMgYi9zcmMvcnBjYl9zdmMuYworaW5kZXggYmQ5MjIwMS4uNmM3ZjdmZSAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiX3N2Yy5jCisrKysgYi9zcmMvcnBjYl9zdmMuYworQEAgLTUzLDEwICs1MywxMCBAQAorICNpbmNsdWRlICJycGNiaW5kLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKKyAKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl8zX2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCQkgICBycGN2ZXJzX3QpKTsKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZHVtcF8zX2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCQlycGN2ZXJzX3QpKTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl8zX2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKysJCQkJCSAgIHJwY3ZlcnNfdCk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfM19sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCQlycGN2ZXJzX3QpOworIAorIC8qCisgICogQ2FsbGVkIGJ5IHN2Y19nZXRyZXFzZXQuIFRoZXJlIGlzIGEgc2VwYXJhdGUgc2VydmVyIGhhbmRsZSBmb3IKK0BAIC03NSw3ICs3NSw3IEBAIHJwY2Jfc2VydmljZV8zKHN0cnVjdCBzdmNfcmVxICpycXN0cCwgU1ZDWFBSVCAqdHJhbnNwKQorIAl9IGFyZ3VtZW50OworIAljaGFyICpyZXN1bHQ7CisgCXhkcnByb2NfdCB4ZHJfYXJndW1lbnQsIHhkcl9yZXN1bHQ7CistCXZvaWQgKigqbG9jYWwpIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworKwl2b2lkICooKmxvY2FsKSAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7CisgCXJwY3Byb2dfdCBzZXRwcm9nID0gMDsKKyAKKyAJcnBjYnNfcHJvY2luZm8oUlBDQlZFUlNfM19TVEFULCBycXN0cC0+cnFfcHJvYyk7CitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjXzQuYyBiL3NyYy9ycGNiX3N2Y180LmMKK2luZGV4IGI2NzM0NTIuLjY3NjRjMGEgMTAwNjQ0CistLS0gYS9zcmMvcnBjYl9zdmNfNC5jCisrKysgYi9zcmMvcnBjYl9zdmNfNC5jCitAQCAtNTQsMTMgKzU0LDEzIEBACisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAjaW5jbHVkZSAieGxvZy5oIgorIAorLXN0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRyXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKy0JCQkJICAgICAgcnBjdmVyc190KSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldHZlcnNhZGRyXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfNF9sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCSAgICAgIHJwY3ZlcnNfdCk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldHZlcnNhZGRyXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIHN0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRybGlzdF80X2xvY2FsCistCV9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworLXN0YXRpYyB2b2lkIGZyZWVfcnBjYl9lbnRyeV9saXN0IF9fUCgocnBjYl9lbnRyeV9saXN0X3B0ciAqKSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfNF9sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKysJKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworK3N0YXRpYyB2b2lkIGZyZWVfcnBjYl9lbnRyeV9saXN0IChycGNiX2VudHJ5X2xpc3RfcHRyICopOworK3N0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIAorIC8qCisgICogQ2FsbGVkIGJ5IHN2Y19nZXRyZXFzZXQuIFRoZXJlIGlzIGEgc2VwYXJhdGUgc2VydmVyIGhhbmRsZSBmb3IKK0BAIC03OCw3ICs3OCw3IEBAIHJwY2Jfc2VydmljZV80KHN0cnVjdCBzdmNfcmVxICpycXN0cCwgU1ZDWFBSVCAqdHJhbnNwKQorIAl9IGFyZ3VtZW50OworIAljaGFyICpyZXN1bHQ7CisgCXhkcnByb2NfdCB4ZHJfYXJndW1lbnQsIHhkcl9yZXN1bHQ7CistCXZvaWQgKigqbG9jYWwpIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworKwl2b2lkICooKmxvY2FsKSAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7CisgCXJwY3Byb2dfdCBzZXRwcm9nID0gMDsKKyAKKyAJcnBjYnNfcHJvY2luZm8oUlBDQlZFUlNfNF9TVEFULCBycXN0cC0+cnFfcHJvYyk7CitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjX2NvbS5jIGIvc3JjL3JwY2Jfc3ZjX2NvbS5jCitpbmRleCBmZjljZTZiLi44YWVmOWU1IDEwMDY0NAorLS0tIGEvc3JjL3JwY2Jfc3ZjX2NvbS5jCisrKysgYi9zcmMvcnBjYl9zdmNfY29tLmMKK0BAIC0xMDAsMjkgKzEwMCwyOSBAQCBzdHJ1Y3QgZmluZm8geworIHN0YXRpYyBzdHJ1Y3QgZmluZm8gICAgIEZJTkZPW05GT1JXQVJEXTsKKyAKKyAKKy1zdGF0aWMgYm9vbF90IHhkcl9lbmNhcF9wYXJtcyBfX1AoKFhEUiAqLCBzdHJ1Y3QgZW5jYXBfcGFybXMgKikpOworLXN0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfYXJncyBfX1AoKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKikpOworLXN0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfcmVzdWx0IF9fUCgoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKSk7Cistc3RhdGljIGJvb2xfdCB4ZHJfb3BhcXVlX3Bhcm1zIF9fUCgoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKSk7Cistc3RhdGljIGludCBmaW5kX3JtdGNhbGxmZF9ieV9uZXRpZCBfX1AoKGNoYXIgKikpOworLXN0YXRpYyBTVkNYUFJUICpmaW5kX3JtdGNhbGx4cHJ0X2J5X2ZkIF9fUCgoaW50KSk7Cistc3RhdGljIGludCBmb3J3YXJkX3JlZ2lzdGVyIF9fUCgodV9pbnQzMl90LCBzdHJ1Y3QgbmV0YnVmICosIGludCwgY2hhciAqLAorLSAgICBycGNwcm9jX3QsIHJwY3ZlcnNfdCwgdV9pbnQzMl90ICopKTsKKy1zdGF0aWMgc3RydWN0IGZpbmZvICpmb3J3YXJkX2ZpbmQgX19QKCh1X2ludDMyX3QpKTsKKy1zdGF0aWMgaW50IGZyZWVfc2xvdF9ieV94aWQgX19QKCh1X2ludDMyX3QpKTsKKy1zdGF0aWMgaW50IGZyZWVfc2xvdF9ieV9pbmRleCBfX1AoKGludCkpOworLXN0YXRpYyBpbnQgbmV0YnVmY21wIF9fUCgoc3RydWN0IG5ldGJ1ZiAqLCBzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgc3RydWN0IG5ldGJ1ZiAqbmV0YnVmZHVwIF9fUCgoc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIHZvaWQgbmV0YnVmZnJlZSBfX1AoKHN0cnVjdCBuZXRidWYgKikpOworLXN0YXRpYyBpbnQgY2hlY2tfcm10Y2FsbHMgX19QKChzdHJ1Y3QgcG9sbGZkICosIGludCkpOworLXN0YXRpYyB2b2lkIHhwcnRfc2V0X2NhbGxlciBfX1AoKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopKTsKKy1zdGF0aWMgdm9pZCBzZW5kX3N2Y3N5c2VyciBfX1AoKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopKTsKKy1zdGF0aWMgdm9pZCBoYW5kbGVfcmVwbHkgX19QKChpbnQsIFNWQ1hQUlQgKikpOworLXN0YXRpYyB2b2lkIGZpbmRfdmVyc2lvbnMgX19QKChycGNwcm9nX3QsIGNoYXIgKiwgcnBjdmVyc190ICosIHJwY3ZlcnNfdCAqKSk7Cistc3RhdGljIHJwY2JsaXN0X3B0ciBmaW5kX3NlcnZpY2UgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgY2hhciAqKSk7Cistc3RhdGljIGNoYXIgKmdldG93bmVyIF9fUCgoU1ZDWFBSVCAqLCBjaGFyICosIHNpemVfdCkpOworLXN0YXRpYyBpbnQgYWRkX3BtYXBsaXN0IF9fUCgoUlBDQiAqKSk7Cistc3RhdGljIGludCBkZWxfcG1hcGxpc3QgX19QKChSUENCICopKTsKKytzdGF0aWMgYm9vbF90IHhkcl9lbmNhcF9wYXJtcyAoWERSICosIHN0cnVjdCBlbmNhcF9wYXJtcyAqKTsKKytzdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX2FyZ3MgKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfcm10Y2FsbF9yZXN1bHQgKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfb3BhcXVlX3Bhcm1zIChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopOworK3N0YXRpYyBpbnQgZmluZF9ybXRjYWxsZmRfYnlfbmV0aWQgKGNoYXIgKik7Cisrc3RhdGljIFNWQ1hQUlQgKmZpbmRfcm10Y2FsbHhwcnRfYnlfZmQgKGludCk7Cisrc3RhdGljIGludCBmb3J3YXJkX3JlZ2lzdGVyICh1X2ludDMyX3QsIHN0cnVjdCBuZXRidWYgKiwgaW50LCBjaGFyICosCisrICAgIHJwY3Byb2NfdCwgcnBjdmVyc190LCB1X2ludDMyX3QgKik7Cisrc3RhdGljIHN0cnVjdCBmaW5mbyAqZm9yd2FyZF9maW5kICh1X2ludDMyX3QpOworK3N0YXRpYyBpbnQgZnJlZV9zbG90X2J5X3hpZCAodV9pbnQzMl90KTsKKytzdGF0aWMgaW50IGZyZWVfc2xvdF9ieV9pbmRleCAoaW50KTsKKytzdGF0aWMgaW50IG5ldGJ1ZmNtcCAoc3RydWN0IG5ldGJ1ZiAqLCBzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyBzdHJ1Y3QgbmV0YnVmICpuZXRidWZkdXAgKHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIHZvaWQgbmV0YnVmZnJlZSAoc3RydWN0IG5ldGJ1ZiAqKTsKKytzdGF0aWMgaW50IGNoZWNrX3JtdGNhbGxzIChzdHJ1Y3QgcG9sbGZkICosIGludCk7Cisrc3RhdGljIHZvaWQgeHBydF9zZXRfY2FsbGVyIChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKTsKKytzdGF0aWMgdm9pZCBzZW5kX3N2Y3N5c2VyciAoU1ZDWFBSVCAqLCBzdHJ1Y3QgZmluZm8gKik7Cisrc3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5IChpbnQsIFNWQ1hQUlQgKik7Cisrc3RhdGljIHZvaWQgZmluZF92ZXJzaW9ucyAocnBjcHJvZ190LCBjaGFyICosIHJwY3ZlcnNfdCAqLCBycGN2ZXJzX3QgKik7Cisrc3RhdGljIHJwY2JsaXN0X3B0ciBmaW5kX3NlcnZpY2UgKHJwY3Byb2dfdCwgcnBjdmVyc190LCBjaGFyICopOworK3N0YXRpYyBjaGFyICpnZXRvd25lciAoU1ZDWFBSVCAqLCBjaGFyICosIHNpemVfdCk7Cisrc3RhdGljIGludCBhZGRfcG1hcGxpc3QgKFJQQ0IgKik7Cisrc3RhdGljIGludCBkZWxfcG1hcGxpc3QgKFJQQ0IgKik7CisgCisgLyoKKyAgKiBTZXQgYSBtYXBwaW5nIG9mIHByb2dyYW0sIHZlcnNpb24sIG5ldGlkCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2JpbmQuYyBiL3NyYy9ycGNiaW5kLmMKK2luZGV4IDA0NWRhYTEuLjEzNzAxMWIgMTAwNjQ0CistLS0gYS9zcmMvcnBjYmluZC5jCisrKysgYi9zcmMvcnBjYmluZC5jCitAQCAtMTM1LDEzICsxMzUsMTMgQEAgY2hhciAqdGNwX3VhZGRyOwkvKiBVbml2ZXJzYWwgVENQIGFkZHJlc3MgKi8KKyBzdGF0aWMgY2hhciBzZXJ2bmFtZVtdID0gInJwY2JpbmQiOworIHN0YXRpYyBjaGFyIHN1cGVydXNlcltdID0gInN1cGVydXNlciI7CisgCistaW50IG1haW4gX19QKChpbnQsIGNoYXIgKltdKSk7CisraW50IG1haW4gKGludCwgY2hhciAqW10pOworIAorLXN0YXRpYyBpbnQgaW5pdF90cmFuc3BvcnQgX19QKChzdHJ1Y3QgbmV0Y29uZmlnICopKTsKKy1zdGF0aWMgdm9pZCByYmxsaXN0X2FkZCBfX1AoKHJwY3Byb2dfdCwgcnBjdmVyc190LCBzdHJ1Y3QgbmV0Y29uZmlnICosCistCQkJICAgICBzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgdm9pZCB0ZXJtaW5hdGUgX19QKChpbnQpKTsKKy1zdGF0aWMgdm9pZCBwYXJzZWFyZ3MgX19QKChpbnQsIGNoYXIgKltdKSk7Cisrc3RhdGljIGludCBpbml0X3RyYW5zcG9ydCAoc3RydWN0IG5ldGNvbmZpZyAqKTsKKytzdGF0aWMgdm9pZCByYmxsaXN0X2FkZCAocnBjcHJvZ190LCBycGN2ZXJzX3QsIHN0cnVjdCBuZXRjb25maWcgKiwKKysJCQkgICAgIHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIHZvaWQgdGVybWluYXRlIChpbnQpOworK3N0YXRpYyB2b2lkIHBhcnNlYXJncyAoaW50LCBjaGFyICpbXSk7CisgCisgaW50CisgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorZGlmZiAtLWdpdCBhL3NyYy91dGlsLmMgYi9zcmMvdXRpbC5jCitpbmRleCBhNmM4MzViLi4zM2I5ZTRmIDEwMDY0NAorLS0tIGEvc3JjL3V0aWwuYworKysrIGIvc3JjL3V0aWwuYworQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW40OworIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpsb2NhbF9pbjY7CisgI2VuZGlmCisgCistc3RhdGljIGludCBiaXRtYXNrY21wIF9fUCgodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50KSk7Cisrc3RhdGljIGludCBiaXRtYXNrY21wICh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCBpbnQpOworIAorIC8qCisgICogRm9yIGFsbCBiaXRzIHNldCBpbiAibWFzayIsIGNvbXBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbgorZGlmZiAtLWdpdCBhL3NyYy93YXJtc3RhcnQuYyBiL3NyYy93YXJtc3RhcnQuYworaW5kZXggYjZlYjczZS4uNDJkZDNhZiAxMDA2NDQKKy0tLSBhL3NyYy93YXJtc3RhcnQuYworKysrIGIvc3JjL3dhcm1zdGFydC5jCitAQCAtNTgsOCArNTgsOCBAQAorICNkZWZpbmUJUE1BUEZJTEUJUlBDQklORF9TVEFURURJUiAiL3BvcnRtYXAueGRyIgorICNlbmRpZgorIAorLXN0YXRpYyBib29sX3Qgd3JpdGVfc3RydWN0IF9fUCgoY2hhciAqLCB4ZHJwcm9jX3QsIHZvaWQgKikpOworLXN0YXRpYyBib29sX3QgcmVhZF9zdHJ1Y3QgX19QKChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKSk7Cisrc3RhdGljIGJvb2xfdCB3cml0ZV9zdHJ1Y3QgKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopOworK3N0YXRpYyBib29sX3QgcmVhZF9zdHJ1Y3QgKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopOworIAorIHN0YXRpYyBib29sX3QKKyB3cml0ZV9zdHJ1Y3QoY2hhciAqZmlsZW5hbWUsIHhkcnByb2NfdCBzdHJ1Y3Rwcm9jLCB2b2lkICpsaXN0KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtdWNsaWJjLW5zcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE1NWYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gYjhmMGQ3YjczMThiYTM0NGMyNTc4NWQ2ZjVjZjNmOGRlOTgwMTJkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4KK0RhdGU6IFR1ZSwgMiBGZWIgMjAxMCAwOTozNjowMyArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gdWNsaWJjLW5zcworCistLS0KKyBzcmMvcnBjYmluZC5jIHwgICAgNCArKysrCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcnBjYmluZC5jIGIvc3JjL3JwY2JpbmQuYworaW5kZXggNTI1ZmZiYS4uMWZlMWE2MCAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiaW5kLmMKKysrKyBiL3NyYy9ycGNiaW5kLmMKK0BAIC02Nyw3ICs2NywxMSBAQAorICNpbmNsdWRlIDxwd2QuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKysjZGVmaW5lIF9fbnNzX2NvbmZpZ3VyZV9sb29rdXAoeCx5KQorKyNlbHNlCisgI2luY2x1ZGUgPG5zcy5oPgorKyNlbmRpZgorICNpbmNsdWRlICJjb25maWcuaCIKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorIAorLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9pbml0LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0OTlhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorIworIyBzdGFydC9zdG9wIHJwY2JpbmQgZGFlbW9uLgorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBycGNiaW5kCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFJQQyBwb3J0bWFwcGVyIHJlcGxhY2VtZW50CisjIERlc2NyaXB0aW9uOiAgICAgICBycGNiaW5kIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKKyMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQorIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KKyMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQorIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCisjIyMgRU5EIElOSVQgSU5GTworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAtZiAvc2Jpbi9ycGNiaW5kIHx8IGV4aXQgMAorCitPUFRJT05TPSIiCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9ycGNiaW5kIF0KK3RoZW4KKyAgICAuIC9ldGMvZGVmYXVsdC9ycGNiaW5kCitlbGlmIFsgLWYgL2V0Yy9ycGNiaW5kLmNvbmYgXQordGhlbgorICAgIC4gL2V0Yy9ycGNiaW5kLmNvbmYKK2ZpCisKK3N0YXJ0ICgpCit7CisgICAgZWNobyAtbiAiU3RhcnRpbmcgcnBjYmluZCBkYWVtb24uLi4iCisgICAgaWYgcGlkb2YgL3NiaW4vcnBjYmluZCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gImFscmVhZHkgcnVubmluZy4iCisgICAgICAgIGV4aXQgMAorICAgIGZpCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9ycGNiaW5kIC0tICIkQCIKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiZG9uZS4iCisgICAgZWxzZQorICAgICAgICBlY2hvICJmYWlsZWQuIgorICAgIGZpCit9CisKK3N0b3AgKCkKK3sKKyAgICBlY2hvICJTdG9wcGluZyBycGNiaW5kIGRhZW1vbi4uLiIKKyAgICBpZiAhIHBpZG9mIC9zYmluL3JwY2JpbmQgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJub3QgcnVubmluZy4iCisgICAgICAgIHJldHVybiAwCisgICAgZmkKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgL3NiaW4vcnBjYmluZAorICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJkb25lLiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gImZhaWxlZC4iCisgICAgZmkKK30KKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIHN0YXJ0ICRPUFRJT05TCisgICAgICAgIDs7CisgICAgc3RvcCkKKyAgICAgICAgc3RvcAorICAgICAgICA7OworICAgIGZvcmNlLXJlbG9hZCkKKyAgICAgICAgc3RvcAorICAgICAgICBzdGFydCAkT1BUSU9OUworICAgICAgICA7OworICAgIHJlc3RhcnQpCisgICAgICAgIHN0b3AKKyAgICAgICAgc3RhcnQgJE9QVElPTlMKKyAgICAgICAgOzsKKyAgICBzdGF0dXMpCisgICAgICAgIHN0YXR1cyAvc2Jpbi9ycGNiaW5kCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3JwY2JpbmQge3N0YXJ0fHN0b3B8Zm9yY2UtcmVsb2FkfHJlc3RhcnR8c3RhdHVzfSIKKyAgICAgICAgZXhpdCAxCisgICAgICAgIDs7Citlc2FjCisKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL211c2wtc3VucnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzJhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL211c2wtc3VucnBjLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1RoZSBtdXNsIGltcGxlbWVudGF0aW9uIG9mIGdldGFkZHJpbmZvIGFuZCBnZXRzZXJ2YnluYW1lIGRvZXMgbm90CithbGlhc2VzLiBBcyBhIHdvcmthcm91bmQgd2UgdXNlICJzdW5wcmMiIGluc3RlYWQgb2YgInBvcnRtYXBwZXIiCisKK3BvcnRlZCBmcm9tIGFscGluZSBsaW51eAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcnBjYmluZC0wLjIuMi9zcmMvcnBjYmluZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBjYmluZC0wLjIuMi5vcmlnL3NyYy9ycGNiaW5kLmMKKysrKyBycGNiaW5kLTAuMi4yL3NyYy9ycGNiaW5kLmMKK0BAIC00OTEsNyArNDkxLDcgQEAgaW5pdF90cmFuc3BvcnQoc3RydWN0IG5ldGNvbmZpZyAqbmNvbmYpCisgCQkJaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhob3N0c1tuaG9zdHNiYWtdLAorIAkJCSAgICBzZXJ2bmFtZSwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgeworIAkJCSAgaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhob3N0c1tuaG9zdHNiYWtdLAorLQkJCQkJCSAgICAicG9ydG1hcHBlciIsICZoaW50cywgJnJlcykpICE9IDApIHsKKysJCQkJCQkgICAgInN1bnJwYyIsICZoaW50cywgJnJlcykpICE9IDApIHsKKyAJCQkJc3lzbG9nKExPR19FUlIsCisgCQkJCSAgICAiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLAorIAkJCQkgICAgbmNvbmYtPm5jX25ldGlkLCBnYWlfc3RyZXJyb3IoYWljb2RlKSk7CitAQCAtNTY0LDcgKzU2NCw3IEBAIGluaXRfdHJhbnNwb3J0KHN0cnVjdCBuZXRjb25maWcgKm5jb25mKQorIAkJaWYgKChzdHJjbXAobmNvbmYtPm5jX25ldGlkLCAibG9jYWwiKSAhPSAwKSAmJgorIAkJICAgIChzdHJjbXAobmNvbmYtPm5jX25ldGlkLCAidW5peCIpICE9IDApKSB7CisgCQkJaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhOVUxMLCBzZXJ2bmFtZSwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CistCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsICJwb3J0bWFwcGVyIiwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CisrCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsICJzdW5ycGMiLCAmaGludHMsICZyZXMpKSE9IDApIHsKKyAJCQkgIHByaW50ZigiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLCAgbmNvbmYtPm5jX25ldGlkLCBnYWlfc3RyZXJyb3IoYWljb2RlKSk7CisgCQkJICBzeXNsb2coTE9HX0VSUiwKKyAJCQkJICAgICJjYW5ub3QgZ2V0IGxvY2FsIGFkZHJlc3MgZm9yICVzOiAlcyIsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmYzk3NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaApAQCAtMCwwICsxLDIyIEBACittdXNsIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBoZWFkZXIgYW5kIGhlcmUgaXMgcmVhc29uaW5nCitodHRwOi8vd2lraS5tdXNsLWxpYmMub3JnL3dpa2kvRkFRI1E6X3doeV9pc19zeXMuMkZxdWV1ZS5oX25vdF9pbmNsdWRlZF8uM0YKKworU28gaW5jbHVkZSBpdCBvbmx5IHdoZW4gX19HTElCQ19fIGlzIGRlZmluZWQgd2hpY2ggaXMgdHJ1ZSBmb3IgdWNsaWJjIGFuZCBnbGliYworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycGNiaW5kLTAuMi4yL3NyYy91dGlsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycGNiaW5kLTAuMi4yLm9yaWcvc3JjL3V0aWwuYworKysrIHJwY2JpbmQtMC4yLjIvc3JjL3V0aWwuYworQEAgLTQxLDcgKzQxLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaWZkZWYgX19HTElCQ19fCisgI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxpZmFkZHJzLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNGRmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZgpAQCAtMCwwICsxLDMgQEAKKyMgT3B0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byBycGNiaW5kLgorIworUlBDQklORF9PUFRTPSIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWUyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJQQyBCaW5kIFNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc29ja2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9ycGNiaW5kLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjYmluZCAtdyAkUlBDQklORF9PUFRTCitTdWNjZXNzRXhpdFN0YXR1cz0yCisKK1tJbnN0YWxsXQorQWxzbz1ycGNiaW5kLnNvY2tldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzYzFkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zb2NrZXQKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJQQ2JpbmQgU2VydmVyIEFjdGl2YXRpb24gU29ja2V0CisKK1tTb2NrZXRdCitMaXN0ZW5TdHJlYW09L3Zhci9ydW4vcnBjYmluZC5zb2NrCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzYwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi4zLmJiCkBAIC0wLDAgKzEsNzMgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsIEFkZHJlc3NlcyB0byBSUEMgUHJvZ3JhbSBOdW1iZXIgTWFwcGVyIgorREVTQ1JJUFRJT04gPSAiVGhlIHJwY2JpbmQgdXRpbGl0eSBpcyBhIHNlcnZlciB0aGF0IGNvbnZlcnRzIFJQQyBcCisgICAgICAgICAgICAgICBwcm9ncmFtIG51bWJlcnMgaW50byB1bml2ZXJzYWwgYWRkcmVzc2VzLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ycGNiaW5kLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0yMDEyMzcmYXRpZD05NzY3NTEiCitERVBFTkRTID0gImxpYnRpcnBjIHF1b3RhIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0NjQ4NmU0YzRhNDE2NjAyNjkzYTcxMWJiNWJmYTM5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ycGNpbmZvLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ZjhhOGNkMmNiMjVhYzVhYTE2NzY3MzY0ZmIwZTNjMjQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3JwY2JpbmQvcnBjYmluZC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQuZCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaCBcCisgICAgICAgICAgICR7VUNMSUJDUEFUQ0hFU30gXAorICAgICAgICAgICAke01VU0xQQVRDSEVTfSBcCisgICAgICAgICAgIGZpbGU6Ly9ycGNiaW5kLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5zb2NrZXQgXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCitNVVNMUEFUQ0hFU19saWJjLW11c2wgPSAiZmlsZTovL211c2wtc3VucnBjLnBhdGNoIgorCitVQ0xJQkNQQVRDSEVTX2xpYmMtdWNsaWJjID0gImZpbGU6Ly8wMDAxLXVjbGliYy1uc3MucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK1VDTElCQ1BBVENIRVMgPz0gIiIKK01VU0xQQVRDSEVTID89ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjODg3NTI0NmIyNjg4YTFhZGZiZDZhZDQzNDgwMjc4ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODk3ODIzYTlkODIwZWEwMTFkOWVhMDIwNTRkNWFiOTk0NjliOWNhNTM0NjI2NWZlZTM4MDcxM2M4ZmVkMjdiIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0tZW5hYmxlLWxpYndyYXAsLS1kaXNhYmxlLWxpYndyYXAsdGNwLXdyYXBwZXJzIgorCitJTklUU0NSSVBUX05BTUUgPSAicnBjYmluZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDEyIDIgMyA0IDUgLiBzdG9wIDYwIDAgMSA2IC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJycGNiaW5kLnNlcnZpY2UiCisKK2luaGVyaXQgdXNlcmFkZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgLyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tc2hlbGwgL2Jpbi9mYWxzZSAtLXVzZXItZ3JvdXAgcnBjIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbWQgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLWVuYWJsZS13YXJtc3RhcnRzIC0td2l0aC1ycGN1c2VyPXJwYyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCW12ICR7RH0ke2JpbmRpcn0gJHtEfSR7c2JpbmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1lICdzLC9ldGMvLCR7c3lzY29uZmRpcn0vLGcnIFwKKwkJLWUgJ3MsL3NiaW4vLCR7c2JpbmRpcn0vLGcnIFwKKwkJJHtXT1JLRElSfS9pbml0LmQgPiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcnBjYmluZAorCWNobW9kIDA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3JwY2JpbmQKKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JwY2JpbmQuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ycGNiaW5kLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JwY2JpbmQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcnBjYmluZC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlY2VmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBwYXJhbGxlbCBidWlsZCBmYWlsdXJlIGFuZCB1cGRhdGUgY29udGV4dCB0byBtYWtlIHBhdGNoCitjb3VsZGUgYmUgYXBwbGllZC4KKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvc2NyZWVuLmdpdC9jb21taXQ/aWQ9YzBkZTZkZAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSBjMGRlNmRkNzk3MGIyYzdiNDI2YTVjMzlkY2JjMzFjMmJlZjg3MjMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FtYWRldXN6PTIwUz1DNT04MmF3aT1DNT04NHNraT89IDxhbWFkZUBhc21ibHIubmV0PgorRGF0ZTogVGh1LCAyIEphbiAyMDE0IDE4OjE4OjA2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBmb3IgbXVsdGlqb2IgYnVpbGQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworbWFrZSBzdXJlIHRoYXQgY29tbS5zaCBzY3JpcHQgZ2VuZXJhdGVzIGNvbW0uaCBoZWFkZXIgYmVmb3JlIGRvaW5nCithbnl0aGluZyBlbHNlCisKK1NpZ25lZC1vZmYtYnk6IEFtYWRldXN6IFPFgmF3acWEc2tpIDxhbWFkZUBhc21ibHIubmV0PgorLS0tCisgTWFrZWZpbGUuaW4gfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGNlODZjYmMuLmRlYTE2ZDggMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yOTgsNyArMjk4LDcgQEAgc2VhcmNoLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggc2VhcmNoLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIG1hcmsuaCBleHRlcm4uaAorIHR0eS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHR0eS5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIGNvbW0uaCBcCisgIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oCistdGVybS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHRlcm0uYyB0ZXJtLmgKKyt0ZXJtLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdGVybS5jIHRlcm0uaCBjb21tLmgKKyB3aW5kb3cubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB3aW5kb3cuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBsb2dmaWxlLmgKKyB1dG1wLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdXRtcC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIFwKK0BAIC0zMjQsNyArMzI0LDcgQEAgY2FudmFzLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggY2FudmFzLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oIFwKKyAgYnJhaWxsZS5oCisgY29tbS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGNvbW0uYyBjb25maWcuaCBhY2xzLmggY29tbS5oCista21hcGRlZi5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGttYXBkZWYuYyBjb25maWcuaAorK2ttYXBkZWYubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBrbWFwZGVmLmMgY29uZmlnLmggY29tbS5oCisgYWNscy5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGFjbHMuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBjb21tLmggXAorICBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaAorIGJyYWlsbGUubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBicmFpbGxlLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorQEAgLTM1MCw3ICszNTAsNyBAQCBsYXlvdXQubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBsYXlvdXQuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYQorIHZpZXdwb3J0Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdmlld3BvcnQuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBcCisgIGJyYWlsbGUuaAorLWxpc3RfZ2VuZXJpYy5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2dlbmVyaWMuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKKy1saXN0X2Rpc3BsYXkubzogbGlzdF9nZW5lcmljLmggbGlzdF9kaXNwbGF5LmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCistbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKKytsaXN0X2dlbmVyaWMubzogbGlzdF9nZW5lcmljLmggbGlzdF9nZW5lcmljLmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorK2xpc3RfZGlzcGxheS5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2Rpc3BsYXkuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisrbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkNzFjYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IGZyb206CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L3NjcmVlbi5naXQvY29tbWl0Lz9pZD0zOWM1ZjFjCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDM5YzVmMWM3NmYxZmNlZjRiNTk1OGJmODI4YTYzZjUzNDI2YjY5ODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWtlIEdlcndpdHogPG1pa2VAbWlrZWdlcndpdHouY29tPgorRGF0ZTogVHVlLCAyNCBEZWMgMjAxMyAyMjoxNjozMSAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjb21tLmggbm93IGRlcGVuZHMgb24gdGVybS5oCisKKy0tLQorIHNyYy9NYWtlZmlsZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgoraW5kZXggZTc5MWU3OS4uZDRmN2MwYiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTExMyw3ICsxMTMsNyBAQCB0ZXJtLmg6IHRlcm0uYyB0ZXJtLnNoCisgCisga21hcGRlZi5jOiB0ZXJtLmgKKyAKKy1jb21tLmg6IGNvbW0uYyBjb21tLnNoIGNvbmZpZy5oCisrY29tbS5oOiBjb21tLmMgY29tbS5zaCBjb25maWcuaCB0ZXJtLmgKKyAJQVdLPSQoQVdLKSBDQz0iJChDQykgJChDRkxBR1MpIiBzcmNkaXI9JHtzcmNkaXJ9IHNoICQoc3JjZGlyKS9jb21tLnNoCisgCisgZG9jczoKKy0tIAorMi40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4NGFhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3OWFmYjY3NjkwNDY1MzQwMzE0NWZkYTllMWE2YTlkM2VhMWNiMjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMToxMDozMiArMDMwMAorU3ViamVjdDogW1BBVENIIDQvNF0gQXZvaWQgbWlzLWlkZW50aWZ5aW5nIHN5c3RlbXMgYXMgU1ZSNAorCitMaW51eCBjYW4gYmUgbWlzZGV0ZWN0ZWQgYXMgU1ZSNCBiZWNhdXNlIGl0IGhhcworbGliZWxmIGluc3RhbGxlZC4gVGhpcyBsZWFkcyB0byBsaW5raW5nIHdpdGggbGliZWxmLCBldmVuIHRob3VnaCBubworc3ltYm9scyBmcm9tIHRoYXQgbGlicmFyeSB3ZXJlIGFjdHVhbGx5IHVzZWQsIGFuZCB0byBhIHdvcmthcm91bmQgZm9yCithIGJ1Z2d5IGdldGxvZ2luKCkgYmVpbmcgZW5hYmxlZC4KKworSXQgaXMgbm90IGRvY3VtZW50ZWQgd2hpY2ggZXhhY3QgU1ZSNCBzeXN0ZW0gaGFkIHRoZSBidWcgdGhhdCB0aGUKK3dvcmthcm91bmQgd2FzIGFkZGVkIGZvciwgc28gYWxsIEkgY291bGQgZG8gaXMgbWFrZSBhbiBlZHVjYXRlZCBndWVzcworYXQgdGhlICNkZWZpbmVzIGl0cyBjb21waWxlciB3b3VsZCBiZSBsaWtlbHkgdG8gc2V0LgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTQgKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZGM5MjhhZS4uNjU0MzljZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc5LDE0ICsxNzksMjQgQEAgQUNfRUdSRVBfQ1BQKHllcywKKyAjZW5kaWYKKyBdLCBMSUJTPSIkTElCUyAtbHNvY2tldCAtbGluZXQiO3NlcXB0eD0xKQorIAorK0FDX0NIRUNLSU5HKFNWUjQpCisrQUNfRUdSRVBfQ1BQKHllcywKKytbbWFpbiAoKSB7CisrI2lmIGRlZmluZWQoU1ZSNCkgfHwgZGVmaW5lZChfX1NWUjQpCisrICB5ZXM7CisrI2VuZGlmCisrXSwgQUNfTk9URSgtIHlvdSBoYXZlIGEgU1ZSNCBzeXN0ZW0pIEFDX0RFRklORShTVlI0KSBzdnI0PTEpCisraWYgdGVzdCAtbiAiJHN2cjQiIDsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sZWxmIgorIEFDX0NIRUNLSU5HKFNWUjQpCisgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDx1dG1weC5oPgorIF0sLAorLVtBQ19DSEVDS19IRUFERVIoZHdhcmYuaCwgQUNfREVGSU5FKFNWUjQpIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSwKKy1bQUNfQ0hFQ0tfSEVBREVSKGVsZi5oLCBBQ19ERUZJTkUoU1ZSNCkgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pKV0pXQorK1tBQ19DSEVDS19IRUFERVIoZHdhcmYuaCwgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pLAorK1tBQ19DSEVDS19IRUFERVIoZWxmLmgsIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSldKV0KKyAsTElCUz0iJG9sZGxpYnMiKQorK2ZpCisrCisgQUNfQ0hFQ0tfSEVBREVSUyhbc3Ryb3B0cy5oIHN0cmluZy5oIHN0cmluZ3MuaF0pCisgCisgQUNfQ0hFQ0tJTkcoZm9yIFNvbGFyaXMgMi54KQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDhiZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSBjZDBmN2YxMGEzZmZmYmM2MGZlNTVlYjIwMDQ3NGQxM2ZlMWRhNjViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMDozNDoyOSArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNF0gUHJvdmlkZSBjcm9zcyBjb21waWxlIGFsdGVybmF0aXZlcyBmb3IgQUNfVFJZX1JVTgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMzIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI3NjkwYTYuLmNlODlmNTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM0OCw3ICszNDgsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIGZpZm9zIGFyZSB1c2FibGUpIGZpZm89MSwKKy1BQ19OT1RFKC0geW91ciBmaWZvcyBhcmUgbm90IHVzYWJsZSkpCisrQUNfTk9URSgtIHlvdXIgZmlmb3MgYXJlIG5vdCB1c2FibGUpLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIGZpZm9zIGFyZSB1c2FibGUpIGZpZm89MSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIAorIGlmIHRlc3QgLW4gIiRmaWZvIjsgdGhlbgorQEAgLTM5Niw3ICszOTcsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIGltcGxlbWVudGF0aW9uIGlzIG9rKSwgCistQUNfTk9URSgtIHlvdSBoYXZlIGEgYnJva2VuIGltcGxlbWVudGF0aW9uKSBBQ19ERUZJTkUoQlJPS0VOX1BJUEUpIGZpZm9icj0xKQorK0FDX05PVEUoLSB5b3UgaGF2ZSBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbikgQUNfREVGSU5FKEJST0tFTl9QSVBFKSBmaWZvYnI9MSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBmaWZvIGltcGxlbWVudGF0aW9uIGlzIG9rKSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIGZpCisgCitAQCAtNDU4LDcgKzQ2MCw4IEBAIG1haW4oKQorICAgZXhpdCgwKTsKKyB9CisgXSwgQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgdXNhYmxlKSBzb2NrPTEsCistQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgbm90IHVzYWJsZSkpCisrQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgbm90IHVzYWJsZSksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc29ja2V0cyBhcmUgdXNhYmxlKSBzb2NrPTEpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyAKKyBpZiB0ZXN0IC1uICIkc29jayI7IHRoZW4KK0BAIC00OTcsNyArNTAwLDggQEAgbWFpbigpCisgfQorIF0sQUNfTk9URSgtIHlvdSBhcmUgbm9ybWFsKSwKKyBBQ19OT1RFKC0gdW5peCBkb21haW4gc29ja2V0cyBhcmUgbm90IGtlcHQgaW4gdGhlIGZpbGVzeXN0ZW0pCistQUNfREVGSU5FKFNPQ0tfTk9UX0lOX0ZTKSBzb2Nrbm9mcz0xKQorK0FDX0RFRklORShTT0NLX05PVF9JTl9GUykgc29ja25vZnM9MSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBzb2NrZXRzIGFyZSBub3JtYWwpKQorIHJtIC1mIC90bXAvY29uZnRlc3QqCisgZmkKKyAKK0BAIC02MjQsNyArNjI4LDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLEFDX05PVEUoLSBzZWxlY3QgaXMgb2spLAorLUFDX05PVEUoLSBzZWxlY3QgY2FuJ3QgY291bnQpIEFDX0RFRklORShTRUxFQ1RfQlJPS0VOKSkKKytBQ19OT1RFKC0gc2VsZWN0IGNhbid0IGNvdW50KSBBQ19ERUZJTkUoU0VMRUNUX0JST0tFTiksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc2VsZWN0IGlzIG9rKSkKKyAKKyBkbmwKKyBkbmwgICAgKioqKiAgdGVybWNhcCBvciB0ZXJtaW5mbyAgKioqKgorQEAgLTY2Niw3ICs2NzEsOCBAQCBtYWluKCkKKyB7CisgIGV4aXQoc3RyY21wKHRnb3RvKCIlcDElZCIsIDAsIDEpLCAiMSIpID8gMCA6IDEpOworIH1dLCBBQ19OT1RFKC0geW91IHVzZSB0aGUgdGVybWNhcCBkYXRhYmFzZSksCistQUNfTk9URSgtIHlvdSB1c2UgdGhlIHRlcm1pbmZvIGRhdGFiYXNlKSBBQ19ERUZJTkUoVEVSTUlORk8pKQorK0FDX05PVEUoLSB5b3UgdXNlIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSkgQUNfREVGSU5FKFRFUk1JTkZPKSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyB0ZXJtaW5mbyBkYXRhYmFzZSBpcyB1c2VkKSBBQ19ERUZJTkUoVEVSTUlORk8pKQorIEFDX0NIRUNLSU5HKG9zcGVlZCkKKyBBQ19UUllfTElOSyhleHRlcm4gc2hvcnQgb3NwZWVkOyxvc3BlZWQ9NTssLEFDX0RFRklORShORUVEX09TUEVFRCkpCisgCitAQCAtODAxLDcgKzgwNyw4IEBAIG1haW4oKQorICAgICBlbHNlCisgICAgICAgQUNfTk9URSgtIGNhbid0IGRldGVybWluZSAtIGFzc3VtZSBwdHlzIGFyZSB3b3JsZCBhY2Nlc3NhYmxlKQorICAgICBmaQorLSAgXQorKyAgXSwKKysgIEFDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHB0eXMgYXJlIHdvcmxkIGFjY2Vzc2FibGUpCisgKQorIHJtIC1mIGNvbmZ0ZXN0X2dycAorIGZpCitAQCAtODg1LDcgKzg5Miw3IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgbG9hZD0xKQorIGZpCistaWYgdGVzdCAteiAiJGxvYWQiIDsgdGhlbgorK2lmIHRlc3QgLXogIiRsb2FkIiAmJiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBrZXJuZWxmaWxlKQorIGZvciBjb3JlIGluIC91bml4IC92bXVuaXggL2R5bml4IC9ocC11eCAveGVsb3MgL2Rldi9rc3ltcyAva2VybmVsL3VuaXggL2tlcm5lbC9nZW51bml4IC91bmljb3MgL21hY2ggL25ldGJzZCAvMzg2YnNkIC9kZ3V4IC9ic2QgL3N0YW5kL3ZtdW5peDsgZG8KKyAgIGlmIHRlc3QgLWYgJGNvcmUgfHwgdGVzdCAtYyAkY29yZTsgdGhlbgorQEAgLTEwNzgsNyArMTA4NSw3IEBAIG1haW4oKQorICNlbmRpZgorICAgZXhpdCgwKTsKKyB9CistXSwsQUNfREVGSU5FKFNZU1ZTSUdTKSkKKytdLCxBQ19ERUZJTkUoU1lTVlNJR1MpLDopCisgCisgZmkKKyAKK0BAIC0xMTU4LDcgKzExNjUsNyBAQCBtYWluKCkgeworICAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgIGV4aXQoMSk7CisgICBleGl0KDApOyAvKiBsaWJjIHZlcnNpb24gd29ya3MgcHJvcGVybHkuICAqLworLX1dLCBBQ19ERUZJTkUoVVNFQkNPUFkpKQorK31dLCBBQ19ERUZJTkUoVVNFQkNPUFkpLCw6KQorIAorIEFDX1RSWV9SVU4oWworICNkZWZpbmUgYmNvcHkocyxkLGwpIG1lbW1vdmUoZCxzLGwpCitAQCAtMTE3Myw3ICsxMTgwLDggQEAgbWFpbigpIHsKKyAgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgICBleGl0KDEpOworICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKy19XSwgQUNfREVGSU5FKFVTRU1FTU1PVkUpKQorK31dLCBBQ19ERUZJTkUoVVNFTUVNTU9WRSksLAorKyAgQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgdXNlIG1lbW1vdmUpIEFDX0RFRklORShVU0VNRU1NT1ZFKSkKKyAKKyAKKyBBQ19UUllfUlVOKFsKK0BAIC0xMTg5LDcgKzExOTcsNyBAQCBtYWluKCkgeworICAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgIGV4aXQoMSk7CisgICBleGl0KDApOyAvKiBsaWJjIHZlcnNpb24gd29ya3MgcHJvcGVybHkuICAqLworLX1dLCBBQ19ERUZJTkUoVVNFTUVNQ1BZKSkKKyt9XSwgQUNfREVGSU5FKFVTRU1FTUNQWSksLDopCisgCisgQUNfU1lTX0xPTkdfRklMRV9OQU1FUworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2MmMxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaApAQCAtMCwwICsxLDY1IEBACitGcm9tIDczYjcyNmMyNWY5NGMxYjE1NTE0ZWQ5MjQ5YjkyN2FmZGZiYmZiOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCA3IEF1ZyAyMDE1IDEwOjMwOjQwICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBSZW1vdmUgcmVkdW5kYW50IGNvbXBpbGVyIHNhbml0eSBjaGVja3MKKworQUNfUFJPR19DQyBhbHJlYWR5IHBlcmZvcm1zIHNhbml0eSBjaGVja3MuIEFuZCB1bmxpa2UgdGhlIHJlbW92ZWQKK2NoZWNrcywgaXQgZG9lcyBzbyBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIGNyb3NzIGNvbXBpbGF0aW9uLgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBmZmUyZTM3Li4yNzY5MGE2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00OCwzMSArNDgsNiBAQCBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIEFDX0lTQ19QT1NJWAorIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIAorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsWworLWlmIHRlc3QgJENDICE9IGNjIDsgdGhlbgorLUFDX05PVEUoWW91ciAkQ0MgZmFpbGVkIC0gcmVzdGFydGluZyB3aXRoIENDPWNjKQorLUFDX05PVEUoKQorLUNDPWNjCistZXhwb3J0IENDCistZXhlYyAkMCAkY29uZmlndXJlX2FyZ3MKKy1maQorLV0pCistCistQUNfVFJZX1JVTihtYWluKCl7ZXhpdCgwKTt9LCwKKy1leGVjIDU+JjIKKy1ldmFsICRhY19saW5rCistQUNfTk9URShDQz0kQ0M7IENGTEFHUz0kQ0ZMQUdTOyBMSUJTPSRMSUJTOykKKy1BQ19OT1RFKCRhY19jb21waWxlKQorLUFDX01TR19FUlJPUihDYW4ndCBydW4gdGhlIGNvbXBpbGVyIC0gc29ycnkpKQorLQorLUFDX1RSWV9SVU4oWworLW1haW4oKQorLXsKKy0gIGludCBfX3NvbWV0aGluZ19zdHJhbmdlXygpOworLSAgX19zb21ldGhpbmdfc3RyYW5nZV8oMCk7CistfQorLV0sQUNfTVNHX0VSUk9SKFlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc2V0IHRoZSBleGl0IHN0YXR1cyAtIHNvcnJ5KSkKKy0KKyBBQ19QUk9HX0FXSworIAorIEFDX1BST0dfSU5TVEFMTAorQEAgLTEzMDAsOCArMTI3NSw2IEBAIGZpCisgZG5sIFB0eCBidWcgd29ya2Fyb3VuZCAtLSBpbnNlcnQgLWxjIGFmdGVyIC1sdGVybWNhcAorIHRlc3QgLW4gIiRzZXFwdHgiICYmIExJQlM9Ii1sdGVybWNhcCAtbGMgLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sc2VjIC1sc2VxIgorIAorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsQUNfTVNHX0VSUk9SKENhbid0IHJ1biB0aGUgY29tcGlsZXIgLSBpbnRlcm5hbCBlcnJvci4gU29ycnkuKSkKKy0KKyBFVENTQ1JFRU5SQz0KKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRoZSBnbG9iYWwgc2NyZWVucmMgZmlsZSkKKyBBQ19BUkdfV0lUSChzeXMtc2NyZWVucmMsIFsgIC0td2l0aC1zeXMtc2NyZWVucmM9cGF0aCB0byB0aGUgZ2xvYmFsIHNjcmVlbnJjIGZpbGVdLCBbIEVUQ1NDUkVFTlJDPSIke3dpdGh2YWx9IiBdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2U1NWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSBkMGIyMGU0Y2FjYzYwYWQ2MmEyMTUwY2UwNzM4OGNiNWEyNWMyMDQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMTowOTowMSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNF0gU2tpcCBob3N0IGZpbGUgc3lzdGVtIGNoZWNrcyB3aGVuIGNyb3NzLWNvbXBpbGluZworCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjMgKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2U4OWY1Ni4uZGM5MjhhZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODUsNyArODUsNyBAQCBBQ19BUkdfRU5BQkxFKHNvY2tldC1kaXIsCisgZG5sCisgZG5sICAgICoqKiogIHNwZWNpYWwgdW5peCB2YXJpYW50cyAgKioqKgorIGRubAorLWlmIHRlc3QgLW4gIiRJU0MiOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1uICIkSVNDIiA7IHRoZW4KKyAgIEFDX0RFRklORShJU0MpIExJQlM9IiRMSUJTIC1saW5ldCIKKyBmaQorIAorQEAgLTk2LDEwICs5NiwxMSBAQCBkbmwgQUNfREVGSU5FKE9TRjEpCSMgdGhpcyBkaXNhYmxlcyBNSVBTIGFnYWluLi4uLgorIGRubCBmaQorIGRubCBmaQorIAorLWlmIHRlc3QgLWYgL3N5c1Y2OCA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3N5c1Y2OCA7IHRoZW4KKyBBQ19ERUZJTkUoc3lzVjY4KQorIGZpCisgCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgTUlQUykKKyBpZiB0ZXN0IC1mIC9saWIvbGlibWxkLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJtbGQuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2NtcGxycy9jYy9saWJtbGQuYTsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorQEAgLTEyMyw2ICsxMjQsNyBAQCBBQ19ERUZJTkUoVVNFX1dBSVQyKSBMSUJTPSIkTElCUyAtbGJzZCIgOyBDQz0iJENDIC1JL3Vzci9pbmNsdWRlL2JzZCIKKyApKQorIGZpCisgZmkKKytmaQorIAorIAorIEFDX0NIRUNLSU5HKGZvciBVbHRyaXgpCitAQCAtMTMyLDcgKzEzNCw3IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgVUxUUklYPTEpCisgCistaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJweXIuYSA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3Vzci9saWIvbGlicHlyLmEgOyB0aGVuCisgb2xkbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxweXIiCisgQUNfQ0hFQ0tJTkcoUHlyYW1pZCBPU1gpCitAQCAtNjc5LDE3ICs2ODEsMjEgQEAgQUNfVFJZX0xJTksoZXh0ZXJuIHNob3J0IG9zcGVlZDssb3NwZWVkPTU7LCxBQ19ERUZJTkUoTkVFRF9PU1BFRUQpKQorIGRubAorIGRubCAgICAqKioqICBQVFkgc3BlY2lmaWMgdGhpbmdzICAqKioqCisgZG5sCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgL2Rldi9wdGMpCisgaWYgdGVzdCAtciAvZGV2L3B0YzsgdGhlbgorIEFDX0RFRklORShIQVZFX0RFVl9QVEMpCisgZmkKKytmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIFNWUjQgcHR5cykKKyBzeXN2cjRwdHlzPQorIGlmIHRlc3QgLWMgL2Rldi9wdG14IDsgdGhlbgorIEFDX1RSWV9MSU5LKFtdLFtwdHNuYW1lKDApO2dyYW50cHQoMCk7dW5sb2NrcHQoMCk7XSxbQUNfREVGSU5FKEhBVkVfU1ZSNF9QVFlTKQorIHN5c3ZyNHB0eXM9MV0pCisgZmkKKytmaQorIAorIEFDX0NIRUNLX0ZVTkNTKGdldHB0KQorIAorQEAgLTY5OSw2ICs3MDUsNyBAQCBBQ19DSEVDS19GVU5DUyhvcGVucHR5LCwKKyBbQUNfQ0hFQ0tfTElCKHV0aWwsb3BlbnB0eSwgW0FDX0RFRklORShIQVZFX09QRU5QVFkpXSBbTElCUz0iJExJQlMgLWx1dGlsIl0pXSkKKyBmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIHB0eXJhbmdlcykKKyBpZiB0ZXN0IC1kIC9kZXYvcHR5bSA7IHRoZW4KKyBwZGlyPScvZGV2L3B0eW0nCitAQCAtNzIyLDYgKzcyOSw3IEBAIHAxPWBlY2hvICRwdHlzIHwgdHIgJyAnICdcMDEyJyB8IHNlZCAtZSAncy9eLipcKC5cKSQvXDEvZycgIHwgc29ydCAtdSB8IHRyIC1kICdcCisgQUNfREVGSU5FX1VOUVVPVEVEKFBUWVJBTkdFMCwiJHAwIikKKyBBQ19ERUZJTkVfVU5RVU9URUQoUFRZUkFOR0UxLCIkcDEiKQorIGZpCisrZmkKKyAKKyBkbmwgICAgKioqKiAgcHR5IG1vZGUvZ3JvdXAgaGFuZGxpbmcgKioqKgorIGRubAorQEAgLTg2OSwxNCArODc3LDE2IEBAIGZpCisgZG5sCisgZG5sICAgICoqKiogIGxvYWRhdiAgKioqKgorIGRubAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIGxpYnV0aWwocykpCisgdGVzdCAtZiAvdXNyL2xpYi9saWJ1dGlscy5hICYmIExJQlM9IiRMSUJTIC1sdXRpbHMiCisgdGVzdCAtZiAvdXNyL2xpYi9saWJ1dGlsLmEgJiYgTElCUz0iJExJQlMgLWx1dGlsIgorK2ZpCisgCisgQUNfQ0hFQ0tJTkcoZ2V0bG9hZGF2ZykKKyBBQ19UUllfTElOSygsW2dldGxvYWRhdmcoKGRvdWJsZSAqKTAsIDApO10sCisgQUNfREVGSU5FKExPQURBVl9HRVRMT0FEQVZHKSBsb2FkPTEsCistaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJrdm0uYSA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3Vzci9saWIvbGlia3ZtLmEgOyB0aGVuCisgb2xpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sa3ZtIgorIEFDX0NIRUNLSU5HKGdldGxvYWRhdmcgd2l0aCAtbGt2bSkKK0BAIC0xMDk0LDEzICsxMTA0LDE4IEBAIGRubCAgICAqKioqICBsaWJyYXJpZXMgICoqKioKKyBkbmwKKyAKKyBBQ19DSEVDS0lORyhmb3IgY3J5cHQgYW5kIHNlYyBsaWJyYXJpZXMpCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyB0ZXN0IC1mIC9saWIvbGliY3J5cHRfZC5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGliY3J5cHRfZC5hICYmIExJQlM9IiRMSUJTIC1sY3J5cHRfZCIKKytmaQorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sY3J5cHQiCisgQUNfQ0hFQ0tJTkcoY3J5cHQpCisgQUNfVFJZX0xJTksoLCwsTElCUz0iJG9sZGxpYnMiKQorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgdGVzdCAtZiAvbGliL2xpYnNlYy5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlic2VjLmEgJiYgTElCUz0iJExJQlMgLWxzZWMiCisgdGVzdCAtZiAvbGliL2xpYnNoYWRvdy5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlic2hhZG93LmEgJiYgTElCUz0iJExJQlMgLWxzaGFkb3ciCisrZmkKKysKKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbHN1biIKKyBBQ19DSEVDS0lORyhJUklYIHN1biBsaWJyYXJ5KQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2FmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitUaGlzIGZpeGVzIHRoZSBwYXJhbGxlbCBtYWtlIGluc3RhbGwgZmFpbHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogc2NyZWVuLTQuMC4zL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2NyZWVuLTQuMC4zLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBzY3JlZW4tNC4wLjMvTWFrZWZpbGUuaW4KK0BAIC03MCw3ICs3MCw3IEBAIHNjcmVlbjogJChPRklMRVMpCisgLmMubzoKKyAJJChDQykgLWMgLUkuIC1JJChzcmNkaXIpICQoTV9DRkxBR1MpICQoREVGUykgJChPUFRJT05TKSAkKENGTEFHUykgJDwKKyAKKy1pbnN0YWxsX2JpbjogLnZlcnNpb24gc2NyZWVuCisraW5zdGFsbF9iaW46IC52ZXJzaW9uIHNjcmVlbiBpbnN0YWxsZGlycworIAktaWYgWyAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKSBdICYmIFsgISAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKS5vbGQgXTsgXAorIAkJdGhlbiBtdiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKSAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKS5vbGQ7IGZpCisgCSQoSU5TVEFMTF9QUk9HUkFNKSBzY3JlZW4gJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0gYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9zY3JlZW4ucGFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjU3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9zY3JlZW4ucGFtCkBAIC0wLDAgKzEsMiBAQAorIyVQQU0tMS4wCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQ1N2FmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJNdWx0aXBsZXhpbmcgdGVybWluYWwgbWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIlNjcmVlbiBpcyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBtYW5hZ2VyIFwKK3RoYXQgbXVsdGlwbGV4ZXMgYSBwaHlzaWNhbCB0ZXJtaW5hbCBiZXR3ZWVuIHNldmVyYWwgXAorcHJvY2Vzc2VzLCB0eXBpY2FsbHkgaW50ZXJhY3RpdmUgc2hlbGxzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zY3JlZW4vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/ZnVuYz1hZGRpdGVtJmdyb3VwPXNjcmVlbiIKKworU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbi5oO2VuZGxpbmU9MjY7bWQ1PTM5NzExNDI5ODkyODlhODE5OGE1NDQyMjA3MDNjMmJmIgorCitERVBFTkRTID0gIm5jdXJzZXMgXAorICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2NyZWVuL3NjcmVlbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdmaWxlOi8vc2NyZWVuLnBhbScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjViYjNiMGZmMjY3NGUyOTM3OGMzMWFkMzQxMTE3MGFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZhNDA0OWY4YWVlMjgzZGU2MmUyODNkNDI3ZjJjZmQzNWQ2YzM2OWI0MGY3ZjQ1Zjk0N2RiZmQ5MTU2OTlkNjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbdXRlbXB0ZXJdID0gImFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPXllcyxhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD1ubyxsaWJ1dGVtcHRlciwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcHR5LW1vZGU9MDYyMCAtLXdpdGgtcHR5LWdyb3VwPTUgXAorICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtJywgJy0tZGlzYWJsZS1wYW0nLCBkKX0iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zY3JlZW4ucGFtICR7RH0vJHtzeXNjb25mZGlyfS9wYW0uZC9zY3JlZW4KKwlmaQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmluZGlyfS9zY3JlZW4gPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwOWY1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzCkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2NTUxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ2hhbmdlIHRoZSBnZXRsaW5lIHJldHVybiB0eXBlIHRvIG1hdGNoIGl0cyBkZWNsYXJhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtdXJOIHNlZC00LjEuMi1vcmlnL2xpYi9nZXRsaW5lLmMgc2VkLTQuMS4yL2xpYi9nZXRsaW5lLmMKKy0tLSBzZWQtNC4xLjItb3JpZy9saWIvZ2V0bGluZS5jCTIwMTAtMDgtMzEgMDg6NDc6NTAuMDcwMDk0MDI0ICswODAwCisrKysgc2VkLTQuMS4yL2xpYi9nZXRsaW5lLmMJMjAxMC0wOC0zMSAwODo0ODo1MC45ODIxNzgxNzIgKzA4MDAKK0BAIC0zMCw3ICszMCw3IEBACisgICAgbmVjZXNzYXJ5LiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCAobm90IGluY2x1ZGluZyB0aGUKKyAgICBudWxsIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuICAqLworIAorLXNpemVfdAorK3NzaXplX3QKKyBnZXRsaW5lIChsaW5lcHRyLCBuLCBzdHJlYW0pCisgICAgICBjaGFyICoqbGluZXB0cjsKKyAgICAgIHNpemVfdCAqbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9zZWQtNC4xLjJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTk0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9zZWQtNC4xLjJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZS0xLjEyLnggaGFzIGRlcHJlY2F0ZWQgdXNlIG9mIEBta2Rpcl9wQCwgZml4IHRoZSBpc3N1ZSBieSB1c2luZyBATUtESVJfUEAgaW5zdGVhZC4KKworQXZvaWQgdGhpcyBidWlsZCBpc3N1ZToKK3wgbWFrZVsxXTogbWtkaXJfcEA6IENvbW1hbmQgbm90IGZvdW5kCit8IG1ha2VbMV06ICoqKiBbaW5zdGFsbC1kYXRhLXllc10gRXJyb3IgMTI3CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzEzCisKK0luZGV4OiBzZWQtNC4xLjIvaW50bC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlZC00LjEuMi5vcmlnL2ludGwvTWFrZWZpbGUuaW4KKysrKyBzZWQtNC4xLjIvaW50bC9NYWtlZmlsZS5pbgorQEAgLTQwLDcgKzQwLDcgQEAgc3ViZGlyID0gaW50bAorIElOU1RBTEwgPSBASU5TVEFMTEAKKyBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorIG1raW5zdGFsbGRpcnMgPSAkKG1rZGlyX3ApCistbWtkaXJfcCA9IEBta2Rpcl9wQAorK21rZGlyX3AgPSBATUtESVJfUEAKKyAKKyBsID0gQElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYQAorIAorSW5kZXg6IHNlZC00LjEuMi9wby9NYWtlZmlsZS5pbi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlZC00LjEuMi5vcmlnL3BvL01ha2VmaWxlLmluLmluCisrKysgc2VkLTQuMS4yL3BvL01ha2VmaWxlLmluLmluCitAQCAtMjksNyArMjksNyBAQCBnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisgSU5TVEFMTCA9IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMyL2J1aWxkMC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vaW5zdGFsbCAtYworIElOU1RBTExfREFUQSA9ICR7SU5TVEFMTH0gLW0gNjQ0CisgbWtpbnN0YWxsZGlycyA9ICQobWtkaXJfcCkKKy1ta2Rpcl9wID0gQG1rZGlyX3BACisrbWtkaXJfcCA9IEBNS0RJUl9QQAorIAorIENDID0gaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vc3J2L2hvbWUvbml0aW4vYnVpbGRzMi9idWlsZDAvdG1wL3N5c3Jvb3RzL3FlbXV4ODYKKyBHTVNHRk1UID0gL3Nydi9ob21lL25pdGluL2J1aWxkczIvYnVpbGQwL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9tc2dmbXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzBmNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdHN1aXRlIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNWU4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK3NlZDogYWRkIHB0ZXN0CisKK3B0ZXN0IG5lZWRzIGJ1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzLgorc2VyaWFsLXRlc3RzIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRob3NlIHRhcmdldHMuCisKK0FuZCBmaXggZm9sbG93aW5nIGVycm9yIGFmdGVyIGFkZCBzZXJpYWwtdGVzdHMuCisKK1tzbmlwXQoraGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gLi4vc2VkL3NlZAorbWFrZVsyXTogKioqIFtzZWQuMV0gRXJyb3IgMgorW3NuaXBdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8ICAgIDIgKy0KKyBkb2MvTWFrZWZpbGUuYW0gICAgICAgfCAgICAyICstCisgdGVzdHN1aXRlL01ha2VmaWxlLmFtIHwgICAgNiArKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWQzM2VjOS4uNGYwYzUzMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNCw3ICs0LDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQtYXV4KQorIEFDX0NPTkZJR19TUkNESVIoW3NlZC9zZWQuY10pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaDpjb25maWdfaC5pbikKKyBBQ19QUkVSRVEoMi42MCkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbc2VyaWFsLXRlc3RzXSkKKyAKKyBTRURfRkVBVFVSRV9WRVJTSU9OPTQuMi4yCisgQUNfREVGSU5FX1VOUVVPVEVEKFNFRF9GRUFUVVJFX1ZFUlNJT04sICIkU0VEX0ZFQVRVUkVfVkVSU0lPTiIsCitkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmFtIGIvZG9jL01ha2VmaWxlLmFtCitpbmRleCBhZjY5NzVjLi42ZmQ4YzlhIDEwMDY0NAorLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKysgYi9kb2MvTWFrZWZpbGUuYW0KK0BAIC0yNSw3ICsyNSw3IEBAICQoc3JjZGlyKS9zLXRleGk6IHNlZC1pbi50ZXhpICQoc3JjZGlyKS9ncm91cGlmeS5zZWQKKyAJZmkKKyAJZWNobyBzdGFtcCA+ICQoc3JjZGlyKS9zLXRleGkKKyAKKy1zZWQuMTogJCh0b3Bfc3JjZGlyKS9zZWQvc2VkLmMgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChzcmNkaXIpL3NlZC54CisrX3NlZC4xOiAkKHRvcF9zcmNkaXIpL3NlZC9zZWQuYyAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYyAkKHNyY2Rpcikvc2VkLngKKyAJJChIRUxQMk1BTikgLS1uYW1lICJzdHJlYW0gZWRpdG9yIGZvciBmaWx0ZXJpbmcgYW5kIHRyYW5zZm9ybWluZyB0ZXh0IiBcCisgCSAgLXAgc2VkIC0taW5jbHVkZSAkKHNyY2Rpcikvc2VkLnggLW8gJChzcmNkaXIpL3NlZC4xICQoU0VEKSAKKyAKK2RpZmYgLS1naXQgYS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gYi90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KK2luZGV4IGQ4MGU3MmMuLmIwNWYwMWUgMTAwNjQ0CistLS0gYS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorQEAgLTk5LDUgKzk5LDExIEBAIEVYVFJBX0RJU1QgPSBcCisgIyBhdXRvbWFrZSBtYWtlcyBgY2hlY2snIGRlcGVuZCBvbiAkKFRFU1RTKS4gIERlY2xhcmUKKyAjIGR1bW15IHRhcmdldHMgZm9yICQoVEVTVFMpIHNvIHRoYXQgbWFrZSBkb2VzIG5vdCBjb21wbGFpbi4KKyAKKytpbnN0YWxsLXB0ZXN0OgorKwljZCAkKEJVSUxERElSKTsgdGFyIC1jZiAtICQoVEVTVERJUikgLS1leGNsdWRlICoubyB8ICggY2QgJChERVNURElSKSAmJiB0YXIgLXhmIC0gKQorKwlmb3IgaSBpbiAkKEVYVFJBX0RJU1QpIHRzdC1yZWdleDIuYzsgZG8gaW5zdGFsbCAkKHNyY2RpcikvJCRpICQoREVTVERJUikvJChURVNURElSKTsgZG9uZQorKwlzZWQgLWUgJ3MvXk1ha2VmaWxlOi9fTWFrZWZpbGU6LycgLWUgJ3MvXnNyY2RpciA9IFwoLipcKS9zcmNkaXIgPSAuLycgLWUgJ3MvYmFzaC9zaC8nIC1pICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQorKwlmb3IgaSBpbiBgZ3JlcCAtcmwgIi4uL3NlZC9zZWQiICQoREVTVERJUikvJChURVNURElSKWA7IGRvIHNlZCAtZSAncy8uLlwvc2VkXC9zZWQvc2VkLycgLWkgJCRpOyBkb25lCisrCisgLlBIT05ZOiAkKFNFRFRFU1RTKQorICQoU0VEVEVTVFMpOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlM2E1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiU3RyZWFtIEVEaXRvciAodGV4dCBmaWx0ZXJpbmcgdXRpbGl0eSkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2VkLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VkL3NlZC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWUwMGZmZDE4MzdmMjk4NDM5YTIxNGZkMTk3ZjZhNDA3IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zZWQvc2VkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcmV0dXJuX3R5cGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyIKKworU1JDX1VSSVttZDVzdW1dID0gIjkyOGYwZTA2NDIyZjQxNDA5MTkxNzQwMWYxYTgzNGQwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzOGU4MzdiYTc2NWQ1ZGEwYTMwYzk4YjU3YzI5NTNjZWNlYTk2ODI3ODgyZjU5NDYxMmFjYWNlOTNjZWVlYWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L01ha2V2YXJzICR7U30vcG8vCit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpZiBbICEgJHtEfSR7YmluZGlyfSAtZWYgJHtEfSR7YmFzZV9iaW5kaXJ9IF07IHRoZW4KKwkgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorCSAgICBybWRpciAke0R9JHtiaW5kaXJ9LworCWZpCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZWRdID0gIiR7YmFzZV9iaW5kaXJ9L3NlZCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE3ZDhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJTdHJlYW0gRURpdG9yICh0ZXh0IGZpbHRlcmluZyB1dGlsaXR5KSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zZWQvIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZWQvc2VkLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9NzY3YWIzYTA2ZDc1ODRmNmZkMDQ2OWFiYWVjNDQxMmYiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zZWQvc2VkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zZWQtYWRkLXB0ZXN0LnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDExMWRlNGZhYTNiOTg0OGEwNjg2YjJmMjYwYzUwNTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmVhMGE5NGQ0YjYwNTg5NGYzZTJkNTU3MmUzZjk2ZTQ0MTNiY2FkM2EwODVhYWU3MzY3YzJjZjA3OTA4YjJmZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGdldHRleHQgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlICR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGxvY2FsZS1iYXNlLXJ1LXJ1IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWFjbCBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICctLWVuYWJsZS1yZWdleC10ZXN0cycsICcnLCBkKX0iCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpZiBbICEgJHtEfSR7YmluZGlyfSAtZWYgJHtEfSR7YmFzZV9iaW5kaXJ9IF07IHRoZW4KKwkgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorCSAgICBybWRpciAke0R9JHtiaW5kaXJ9LworCWZpCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZWRdID0gIiR7YmFzZV9iaW5kaXJ9L3NlZCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworVEVTVERJUiA9ICJ0ZXN0c3VpdGUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBpbnN0YWxsLXB0ZXN0IEJVSUxERElSPSR7Qn0gREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBURVNURElSPSR7VEVTVERJUn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4Yjk1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSAxNzBjMjVjOGUwYjVjM2RjMjYxNWQxZGI5NGM4ZDI0YTEzZmY5OWJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CitEYXRlOiBUaHUsIDExIFNlcCAyMDE0IDE1OjExOjIzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCByZWFkIGxvZ2luLmRlZnMgYmVmb3JlIGRvaW5nIGNocm9vdCgpCisKK0lmICJ1c2VyYWRkIC0tcm9vdCA8cm9vdD4gLi4uIiB3YXMgdXNlZCwgdGhlIGxvZ2luLmRlZnMgZmlsZSB3b3VsZCBzdGlsbAorYmUgcmVhZCBmcm9tIC9ldGMvbG9naW4uZGVmcyBpbnN0ZWFkIG9mIDxyb290Pi9ldGMvbG9naW4uZGVmcy4gVGhpcyB3YXMKK2R1ZSB0byBnZXRkZWZfdWxvbmcoKSBiZWluZyBjYWxsZWQgYmVmb3JlIHByb2Nlc3Nfcm9vdF9mbGFnKCkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmcvcGlwZXJtYWlsL3BrZy1zaGFkb3ctZGV2ZWwvMjAxNC1TZXB0ZW1iZXIvMDEwNDQ2Lmh0bWxdCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGV0ZXIua2plbGxlcnN0ZWR0QGF4aXMuY29tPgorLS0tCisgc3JjL3VzZXJhZGQuYyB8IDggKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJhZGQuYyBiL3NyYy91c2VyYWRkLmMKK2luZGV4IGE4YTFmNzYuLmUxZWJmNTAgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmFkZC5jCisrKysgYi9zcmMvdXNlcmFkZC5jCitAQCAtMTk5Myw5ICsxOTkzLDExIEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2VuZGlmCQkJCS8qIFVTRV9QQU0gKi8KKyAjZW5kaWYJCQkJLyogQUNDVF9UT09MU19TRVRVSUQgKi8KKyAKKysjaWZkZWYgRU5BQkxFX1NVQklEUworIAkvKiBOZWVkZWQgZm9yIHVzZXJucyBjaGVjayAqLworLQl1aWRfdCB1aWRfbWluID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUlOIiwgMTAwMFVMKTsKKy0JdWlkX3QgdWlkX21heCA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01BWCIsIDYwMDAwVUwpOworKwl1aWRfdCB1aWRfbWluOworKwl1aWRfdCB1aWRfbWF4OworKyNlbmRpZgorIAorIAkvKgorIAkgKiBHZXQgbXkgbmFtZSBzbyB0aGF0IEkgY2FuIHVzZSBpdCB0byByZXBvcnQgZXJyb3JzLgorQEAgLTIwMjYsNiArMjAyOCw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWlzX3NoYWRvd19ncnAgPSBzZ3JfZmlsZV9wcmVzZW50ICgpOworICNlbmRpZgorICNpZmRlZiBFTkFCTEVfU1VCSURTCisrCXVpZF9taW4gPSAodWlkX3QpIGdldGRlZl91bG9uZyAoIlVJRF9NSU4iLCAxMDAwVUwpOworKwl1aWRfbWF4ID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUFYIiwgNjAwMDBVTCk7CisgCWlzX3N1Yl91aWQgPSBzdWJfdWlkX2ZpbGVfcHJlc2VudCAoKSAmJiAhcmZsZyAmJgorIAkgICAgKCF1c2VyX2lkIHx8ICh1c2VyX2lkIDw9IHVpZF9tYXggJiYgdXNlcl9pZCA+PSB1aWRfbWluKSk7CisgCWlzX3N1Yl9naWQgPSBzdWJfZ2lkX2ZpbGVfcHJlc2VudCAoKSAmJiAhcmZsZyAmJgorLS0gCisxLjkuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkZGU4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaApAQCAtMCwwICsxLDEwOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU3ViamVjdDogdXNlcmFkZC5jOiBjcmVhdGUgcGFyZW50IGRpcmVjdG9yaWVzIHdoZW4gbmVjZXNzYXJ5CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy91c2VyYWRkLmMgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VyYWRkLmMgYi9zcmMvdXNlcmFkZC5jCitpbmRleCA0YmQ5NjlkLi5jYjVkZDZjIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJhZGQuYworKysrIGIvc3JjL3VzZXJhZGQuYworQEAgLTE4OTMsNiArMTg5MywzNSBAQCBzdGF0aWMgdm9pZCB1c3JfdXBkYXRlICh2b2lkKQorIH0KKyAKKyAvKgorKyAqIG1rZGlyX3AgLSBjcmVhdGUgZGlyZWN0b3JpZXMsIGluY2x1ZGluZyBwYXJlbnQgZGlyZWN0b3JpZXMgd2hlbiBuZWVkZWQKKysgKgorKyAqIHNpbWlsYXIgdG8gYG1rZGlyIC1wJworKyAqLworK3ZvaWQgbWtkaXJfcChjb25zdCBjaGFyICpwYXRoKSB7CisrCWludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisrCWNoYXIgbmV3ZGlyW2xlbiArIDFdOworKwltb2RlX3QgbW9kZSA9IDA3NTU7CisrCWludCBpID0gMDsKKysKKysJaWYgKHBhdGhbaV0gPT0gJ1wwJykgeworKwkJcmV0dXJuOworKwl9CisrCisrCS8qIHNraXAgdGhlIGxlYWRpbmcgJy8nICovCisrCWkrKzsKKysKKysJd2hpbGUocGF0aFtpXSAhPSAnXDAnKSB7CisrCQlpZiAocGF0aFtpXSA9PSAnLycpIHsKKysJCQlzdHJuY3B5KG5ld2RpciwgcGF0aCwgaSk7CisrCQkJbmV3ZGlyW2ldID0gJ1wwJzsKKysJCQlta2RpcihuZXdkaXIsIG1vZGUpOworKwkJfQorKwkJaSsrOworKwl9CisrCW1rZGlyKHBhdGgsIG1vZGUpOworK30KKysKKysvKgorICAqIGNyZWF0ZV9ob21lIC0gY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkKKyAgKgorICAqCWNyZWF0ZV9ob21lKCkgY3JlYXRlcyB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90CitAQCAtMTkwNywzNiArMTkzNiwzMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfaG9tZSAodm9pZCkKKyAJCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisgCQl9CisgI2VuZGlmCistCQkvKiBYWFggLSBjcmVhdGUgbWlzc2luZyBwYXJlbnQgZGlyZWN0b3JpZXMuICAtLW1hcmVrbSAqLworLQkJaWYgKG1rZGlyICh1c2VyX2hvbWUsIDApICE9IDApIHsKKy0JCQlmcHJpbnRmIChzdGRlcnIsCistCQkJICAgICAgICAgXygiJXM6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICVzXG4iKSwKKy0JCQkgICAgICAgICBQcm9nLCB1c2VyX2hvbWUpOworLSNpZmRlZiBXSVRIX0FVRElUCistCQkJYXVkaXRfbG9nZ2VyIChBVURJVF9BRERfVVNFUiwgUHJvZywKKy0JCQkgICAgICAgICAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorLQkJCSAgICAgICAgICAgICAgdXNlcl9uYW1lLCAodW5zaWduZWQgaW50KSB1c2VyX2lkLAorLQkJCSAgICAgICAgICAgICAgU0hBRE9XX0FVRElUX0ZBSUxVUkUpOworLSNlbmRpZgorLQkJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKy0JCX0KKy0JCWNob3duICh1c2VyX2hvbWUsIHVzZXJfaWQsIHVzZXJfZ2lkKTsKKy0JCWNobW9kICh1c2VyX2hvbWUsCistCQkgICAgICAgMDc3NyAmIH5nZXRkZWZfbnVtICgiVU1BU0siLCBHRVRERUZfREVGQVVMVF9VTUFTSykpOworLQkJaG9tZV9hZGRlZCA9IHRydWU7CisrCQlta2Rpcl9wKHVzZXJfaG9tZSk7CisrCX0KKysJaWYgKGFjY2VzcyAodXNlcl9ob21lLCBGX09LKSAhPSAwKSB7CisgI2lmZGVmIFdJVEhfQVVESVQKKyAJCWF1ZGl0X2xvZ2dlciAoQVVESVRfQUREX1VTRVIsIFByb2csCisgCQkgICAgICAgICAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorIAkJICAgICAgICAgICAgICB1c2VyX25hbWUsICh1bnNpZ25lZCBpbnQpIHVzZXJfaWQsCistCQkgICAgICAgICAgICAgIFNIQURPV19BVURJVF9TVUNDRVNTKTsKKysJCSAgICAgICAgICAgICAgU0hBRE9XX0FVRElUX0ZBSUxVUkUpOworICNlbmRpZgorLSNpZmRlZiBXSVRIX1NFTElOVVgKKy0JCS8qIFJlc2V0IFNFTGludXggdG8gY3JlYXRlIGZpbGVzIHdpdGggZGVmYXVsdCBjb250ZXh0cyAqLworLQkJaWYgKHJlc2V0X3NlbGludXhfZmlsZV9jb250ZXh0ICgpICE9IDApIHsKKy0JCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CistCQl9CisrCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisrCX0KKysJY2hvd24gKHVzZXJfaG9tZSwgdXNlcl9pZCwgdXNlcl9naWQpOworKwljaG1vZCAodXNlcl9ob21lLAorKwkgICAgICAgMDc3NyAmIH5nZXRkZWZfbnVtICgiVU1BU0siLCBHRVRERUZfREVGQVVMVF9VTUFTSykpOworKwlob21lX2FkZGVkID0gdHJ1ZTsKKysjaWZkZWYgV0lUSF9BVURJVAorKwlhdWRpdF9sb2dnZXIgKEFVRElUX0FERF9VU0VSLCBQcm9nLAorKwkJICAgICAgImFkZGluZyBob21lIGRpcmVjdG9yeSIsCisrCQkgICAgICB1c2VyX25hbWUsICh1bnNpZ25lZCBpbnQpIHVzZXJfaWQsCisrCQkgICAgICBTSEFET1dfQVVESVRfU1VDQ0VTUyk7CisgI2VuZGlmCisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKwkvKiBSZXNldCBTRUxpbnV4IHRvIGNyZWF0ZSBmaWxlcyB3aXRoIGRlZmF1bHQgY29udGV4dHMgKi8KKysJaWYgKHJlc2V0X3NlbGludXhfZmlsZV9jb250ZXh0ICgpICE9IDApIHsKKysJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKyAJfQorKyNlbmRpZgorIH0KKyAKKyAvKgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRhMjVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMjAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitBbGxvdyBmb3Igc2V0dGluZyBwYXNzd29yZCBpbiBjbGVhciB0ZXh0LgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCAgICA4ICsrKystLS0tCisgc3JjL2dyb3VwYWRkLmMgIHwgICAgOCArKysrKysrLQorIHNyYy9ncm91cG1vZC5jICB8ICAgIDggKysrKysrKy0KKyBzcmMvdXNlcmFkZC5jICAgfCAgICA5ICsrKysrKystLQorIHNyYy91c2VybW9kLmMgICB8ICAgIDggKysrKysrKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDI1ZTI4OGQuLjg1NmIwODcgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTg4LDEwICs4OCwxMCBAQCBjaGdwYXNzd2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgY2hzaF9MREFERCAgICAgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUX05PUEFNKSAkKExJQlNLRVkpICQoTElCTUQpCisgY2hwYXNzd2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdwYXNzd2RfTERBREQgID0gJChMREFERCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorLWdyb3VwYWRkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorK2dyb3VwYWRkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdyb3VwZGVsX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorIGdyb3VwbWVtc19MREFERCA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQlNFTElOVVgpCistZ3JvdXBtb2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpCisrZ3JvdXBtb2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgZ3JwY2tfTERBREQgICAgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCisgZ3JwY29udl9MREFERCAgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCisgZ3JwdW5jb252X0xEQUREID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorQEAgLTExMSw5ICsxMTEsOSBAQCBzdV9TT1VSQ0VTICAgICA9IFwKKyAJc3VhdXRoLmMKKyBzdV9MREFERCAgICAgICA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQkNSWVBUX05PUEFNKSAkKExJQlNLRVkpICQoTElCTUQpCisgc3Vsb2dpbl9MREFERCAgPSAkKExEQUREKSAkKExJQkNSWVBUKQorLXVzZXJhZGRfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKQorK3VzZXJhZGRfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKSAkKExJQkNSWVBUKQorIHVzZXJkZWxfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKQorLXVzZXJtb2RfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKQorK3VzZXJtb2RfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKSAkKExJQkNSWVBUKQorIHZpcHdfTERBREQgICAgID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorIAorIGluc3RhbGwtYW06IGFsbC1hbQorZGlmZiAtLWdpdCBhL3NyYy9ncm91cGFkZC5jIGIvc3JjL2dyb3VwYWRkLmMKK2luZGV4IGY3MTZmNTcuLjRlMjhjMjYgMTAwNjQ0CistLS0gYS9zcmMvZ3JvdXBhZGQuYworKysrIGIvc3JjL2dyb3VwYWRkLmMKK0BAIC0xMjQsNiArMTI0LDcgQEAgc3RhdGljIC8qQG5vcmV0dXJuQCovdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGVcbiIKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub24tdW5pcXVlKSBHSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICB1c2UgdGhpcyBlbmNyeXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXcgZ3JvdXBcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCB1c2UgdGhpcyBjbGVhciBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1yLCAtLXN5c3RlbSAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKCJcbiIsIHVzYWdlb3V0KTsKK0BAIC0zODcsMTIgKzM4OCwxMyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl7ImtleSIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0snfSwKKyAJCXsibm9uLXVuaXF1ZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJeyJwYXNzd29yZCIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQl7InN5c3RlbSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InfSwKKyAJCXsicm9vdCIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAorIAkJe05VTEwsIDAsIE5VTEwsICdcMCd9CisgCX07CisgCistCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZmc6aEs6b3A6clI6IiwKKysJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJmZzpoSzpvcDpQOnJSOiIsCisgCQkgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2YnOgorQEAgLTQ0NCw2ICs0NDYsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXBmbGcgPSB0cnVlOworIAkJCWdyb3VwX3Bhc3N3ZCA9IG9wdGFyZzsKKyAJCQlicmVhazsKKysJCWNhc2UgJ1AnOgorKwkJCXBmbGcgPSB0cnVlOworKwkJCWdyb3VwX3Bhc3N3ZCA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJYnJlYWs7CisgCQljYXNlICdyJzoKKyAJCQlyZmxnID0gdHJ1ZTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvZ3JvdXBtb2QuYyBiL3NyYy9ncm91cG1vZC5jCitpbmRleCBkOWQzODA3Li42OGY0OWQxIDEwMDY0NAorLS0tIGEvc3JjL2dyb3VwbW9kLmMKKysrKyBiL3NyYy9ncm91cG1vZC5jCitAQCAtMTI3LDYgKzEyNyw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdG8gdXNlIGEgZHVwbGljYXRlIChub24tdW5pcXVlKSBHSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICBjaGFuZ2UgdGhlIHBhc3N3b3JkIHRvIHRoaXMgKGVuY3J5cHRlZClcbiIKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NXT1JEXG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgY2hhbmdlIHRoZSBwYXNzd29yZCB0byB0aGlzIGNsZWFyIFBBU1NXT1JEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKCJcbiIsIHVzYWdlb3V0KTsKKyAJZXhpdCAoc3RhdHVzKTsKK0BAIC0zNzUsMTAgKzM3NiwxMSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl7Im5ldy1uYW1lIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ24nfSwKKyAJCXsibm9uLXVuaXF1ZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJeyJwYXNzd29yZCIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQl7InJvb3QiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCXtOVUxMLCAwLCBOVUxMLCAnXDAnfQorIAl9OworLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImc6aG46b3A6UjoiLAorKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImc6aG46b3A6UDpSOiIsCisgCQkgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2cnOgorQEAgLTQwNSw2ICs0MDcsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCWdyb3VwX3Bhc3N3ZCA9IG9wdGFyZzsKKyAJCQlwZmxnID0gdHJ1ZTsKKyAJCQlicmVhazsKKysJCWNhc2UgJ1AnOgorKwkJCWdyb3VwX3Bhc3N3ZCA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJcGZsZyA9IHRydWU7CisrCQkJYnJlYWs7CisgCQljYXNlICdSJzogLyogbm8tb3AsIGhhbmRsZWQgaW4gcHJvY2Vzc19yb290X2ZsYWcgKCkgKi8KKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJhZGQuYyBiL3NyYy91c2VyYWRkLmMKK2luZGV4IGIzYmQ0NTEuLjQ0MTZmOTAgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmFkZC5jCisrKysgYi9zcmMvdXNlcmFkZC5jCitAQCAtNzczLDYgKzc3Myw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdG8gY3JlYXRlIHVzZXJzIHdpdGggZHVwbGljYXRlXG4iCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uLXVuaXF1ZSkgVUlEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgZW5jcnlwdGVkIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKysJKHZvaWQpIGZwdXRzIChfKCIgIC1QLCAtLWNsZWFyLXBhc3N3b3JkIFBBU1NXT1JEIGNsZWFyIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1yLCAtLXN5c3RlbSAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXMsIC0tc2hlbGwgU0hFTEwgICAgICAgICAgICAgbG9naW4gc2hlbGwgb2YgdGhlIG5ldyBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworQEAgLTEwNDcsNiArMTA0OCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQl7Im5vLXVzZXItZ3JvdXAiLCAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdOJ30sCisgCQkJeyJub24tdW5pcXVlIiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJCXsicGFzc3dvcmQiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysJCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQkJeyJzeXN0ZW0iLCAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAncid9LAorIAkJCXsicm9vdCIsICAgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCQl7InNoZWxsIiwgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCitAQCAtMTA1OSw5ICsxMDYxLDkgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJfTsKKyAJCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LAorICNpZmRlZiBXSVRIX1NFTElOVVgKKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYjpjOmQ6RGU6ZjpnOkc6aGs6SzpsbU1Ob3A6clI6czp1OlVaOiIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOlA6clI6czp1OlVaOiIsCisgI2Vsc2UJCQkJLyogIVdJVEhfU0VMSU5VWCAqLworLQkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpyUjpzOnU6VSIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOlA6clI6czp1OlUiLAorICNlbmRpZgkJCQkvKiAhV0lUSF9TRUxJTlVYICovCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHsKKyAJCQlzd2l0Y2ggKGMpIHsKK0BAIC0xMjI3LDYgKzEyMjksOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJCX0KKyAJCQkJdXNlcl9wYXNzID0gb3B0YXJnOworIAkJCQlicmVhazsKKysJCQljYXNlICdQJzogLyogc2V0IGNsZWFyIHRleHQgcGFzc3dvcmQgKi8KKysJCQkJdXNlcl9wYXNzID0gcHdfZW5jcnlwdCAob3B0YXJnLCBjcnlwdF9tYWtlX3NhbHQgKE5VTEwsIE5VTEwpKTsKKysJCQkJYnJlYWs7CisgCQkJY2FzZSAncic6CisgCQkJCXJmbGcgPSB0cnVlOworIAkJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvdXNlcm1vZC5jIGIvc3JjL3VzZXJtb2QuYworaW5kZXggZTdkNDM1MS4uYjc5ZjdhMyAxMDA2NDQKKy0tLSBhL3NyYy91c2VybW9kLmMKKysrKyBiL3NyYy91c2VybW9kLmMKK0BAIC00MTksNiArNDE5LDcgQEAgc3RhdGljIC8qQG5vcmV0dXJuQCovdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBsb2NhdGlvbiAodXNlIG9ubHkgd2l0aCAtZClcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtbywgLS1ub24tdW5pcXVlICAgICAgICAgICAgICBhbGxvdyB1c2luZyBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIFVJRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1wLCAtLXBhc3N3b3JkIFBBU1NXT1JEICAgICAgIHVzZSBlbmNyeXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXcgcGFzc3dvcmRcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCB1c2UgY2xlYXIgcGFzc3dvcmQgZm9yIHRoZSBuZXcgcGFzc3dvcmRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtUiwgLS1yb290IENIUk9PVF9ESVIgICAgICAgICBkaXJlY3RvcnkgdG8gY2hyb290IGludG9cbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcywgLS1zaGVsbCBTSEVMTCAgICAgICAgICAgICBuZXcgbG9naW4gc2hlbGwgZm9yIHRoZSB1c2VyIGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtdSwgLS11aWQgVUlEICAgICAgICAgICAgICAgICBuZXcgVUlEIGZvciB0aGUgdXNlciBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworQEAgLTk5Niw2ICs5OTcsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJeyJtb3ZlLWhvbWUiLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ20nfSwKKyAJCQl7Im5vbi11bmlxdWUiLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJCXsicGFzc3dvcmQiLCAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJCXsicm9vdCIsICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQkJeyJzaGVsbCIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwKKyAJCQl7InVpZCIsICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndSd9LAorQEAgLTEwMTIsNyArMTAxNCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQl7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KKyAJCX07CisgCQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwKKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYWM6ZDplOmY6ZzpHOmhsOkxtb3A6UjpzOnU6VSIKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAiYWM6ZDplOmY6ZzpHOmhsOkxtb3A6UDpSOnM6dTpVIgorICNpZmRlZiBFTkFCTEVfU1VCSURTCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgInY6dzpWOlc6IgorICNlbmRpZgkJCQkvKiBFTkFCTEVfU1VCSURTICovCitAQCAtMTExMiw2ICsxMTE0LDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQkJdXNlcl9wYXNzID0gb3B0YXJnOworIAkJCQlwZmxnID0gdHJ1ZTsKKyAJCQkJYnJlYWs7CisrCQkJY2FzZSAnUCc6CisrCQkJCXVzZXJfcGFzcyA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJCXBmbGcgPSB0cnVlOworKwkJCQlicmVhazsKKyAJCQljYXNlICdSJzogLyogbm8tb3AsIGhhbmRsZWQgaW4gcHJvY2Vzc19yb290X2ZsYWcgKCkgKi8KKyAJCQkJYnJlYWs7CisgCQkJY2FzZSAncyc6CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NoZWNrX3NpemVfb2ZfdWlkX3RfYW5kX2dpZF90X3VzaW5nX0FDX0NIRUNLX1NJWkVPRi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODU1OTBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAyY2I1NDE1OGI4MGNkYmQ5N2NhM2IzNmRmODNmOTI1NWU5MjNhZTNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFtZXMgTGUgQ3Vpcm90IDxjaGV3aUBhdXJhLW9ubGluZS5jby51az4KK0RhdGU6IFNhdCwgMjMgQXVnIDIwMTQgMDk6NDY6MzkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgc2l6ZSBvZiB1aWRfdCBhbmQgZ2lkX3QgdXNpbmcgQUNfQ0hFQ0tfU0laRU9GCisKK1RoaXMgYnVpbHQtaW4gY2hlY2sgaXMgc2ltcGxlciB0aGFuIHRoZSBwcmV2aW91cyBtZXRob2QgYW5kLCBtb3N0CitpbXBvcnRhbnRseSwgd29ya3Mgd2hlbiBjcm9zcy1jb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKK1todHRwczovL2dpdGh1Yi5jb20vc2hhZG93LW1haW50L3NoYWRvdy9jb21taXQvMmNiNTQxNThiODBjZGJkOTdjYTNiMzZkZjgzZjkyNTVlOTIzYWUzZl0KKworU2lnbmVkLW9mZi1ieTogU2VyZ2UgSGFsbHluIDxzZXJnZS5oYWxseW5AdWJ1bnR1LmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDE0ICsrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDFhM2Y4NDEuLjRhNGQ2ZDAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTMzNSwxNiArMzM1LDEwIEBAIGlmIHRlc3QgIiRlbmFibGVfc3ViaWRzIiAhPSAibm8iOyB0aGVuCisgCWRubAorIAlkbmwgRklYTUU6IGNoZWNrIGlmIDMyIGJpdCBVSURzL0dJRHMgYXJlIHN1cHBvcnRlZCBieSBsaWJjCisgCWRubAorLQlBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLWludCBtYWluKHZvaWQpIHsKKy0JdWlkX3QgdTsKKy0JZ2lkX3QgZzsKKy0JcmV0dXJuIChzaXplb2YgdSA8IDQpIHx8IChzaXplb2YgZyA8IDQpOworLX0KKy0JXSldLCBbaWQzMmJpdD0ieWVzIl0sIFtpZDMyYml0PSJubyJdKQorLQorLQlpZiB0ZXN0ICJ4JGlkMzJiaXQiID0gInh5ZXMiOyB0aGVuCisrCUFDX0NIRUNLX1NJWkVPRihbdWlkX3RdLCwgWyNpbmNsdWRlICJzeXMvdHlwZXMuaCJdKQorKwlBQ19DSEVDS19TSVpFT0YoW2dpZF90XSwsIFsjaW5jbHVkZSAic3lzL3R5cGVzLmgiXSkKKysKKysJaWYgdGVzdCAiJGFjX2N2X3NpemVvZl91aWRfdCIgLWdlIDQgJiYgdGVzdCAiJGFjX2N2X3NpemVvZl9naWRfdCIgLWdlIDQ7IHRoZW4KKyAJCUFDX0RFRklORShFTkFCTEVfU1VCSURTLCAxLCBbRGVmaW5lIHRvIHN1cHBvcnQgdGhlIHN1Ym9yZGluYXRlIElEcy5dKQorIAkJZW5hYmxlX3N1Ymlkcz0ieWVzIgorIAllbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhM2QxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitjb21tb25pby5jOiBmaXggdW5leHBlY3RlZCBvcGVuIGZhaWx1cmUgaW4gY2hyb290IGVudmlyb25tZW50CisKK1doZW4gdXNpbmcgY29tbWFuZHMgd2l0aCAnLVIgPG5ld3Jvb3Q+JyBvcHRpb24gaW4gb3VyIHBzZXVkbyBlbnZpcm9ubWVudCwKK3dlIHdvdWxkIHVzdWFsbHkgZ2V0IHRoZSAnUGVtaXNzaW9uIERlbmllZCcgZXJyb3IuIFRoaXMgcGF0Y2ggc2VydmVzIGFzCithIHdvcmthcm91bmQgdG8gdGhpcyBwcm9ibGVtLgorCitOb3RlIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSB0aGUgbG9naWMgaW4gdGhlIGNvZGUsIGl0IGp1c3QgZXhwYW5kcwordGhlIGNvZGVzLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvY29tbW9uaW8uYyB8ICAgMTYgKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2NvbW1vbmlvLmMgYi9saWIvY29tbW9uaW8uYworaW5kZXggY2M1MzZiZi4uNTFjYWZkOSAxMDA2NDQKKy0tLSBhL2xpYi9jb21tb25pby5jCisrKysgYi9saWIvY29tbW9uaW8uYworQEAgLTYxMywxMCArNjEzLDE4IEBAIGludCBjb21tb25pb19vcGVuIChzdHJ1Y3QgY29tbW9uaW9fZGIgKmRiLCBpbnQgbW9kZSkKKyAJZGItPmN1cnNvciA9IE5VTEw7CisgCWRiLT5jaGFuZ2VkID0gZmFsc2U7CisgCistCWZkID0gb3BlbiAoZGItPmZpbGVuYW1lLAorLQkgICAgICAgICAgICAgKGRiLT5yZWFkb25seSA/IE9fUkRPTkxZIDogT19SRFdSKQorLQkgICAgICAgICAgIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLIHwgT19OT0ZPTExPVyk7CistCXNhdmVkX2Vycm5vID0gZXJybm87CisrCWlmIChkYi0+cmVhZG9ubHkpIHsKKysJCWZkID0gb3BlbiAoZGItPmZpbGVuYW1lLAorKwkJCSAgICh0cnVlID8gT19SRE9OTFkgOiBPX1JEV1IpCisrCQkJICAgfCBPX05PQ1RUWSB8IE9fTk9OQkxPQ0sgfCBPX05PRk9MTE9XKTsKKysJCXNhdmVkX2Vycm5vID0gZXJybm87CisrCX0gZWxzZSB7CisrCQlmZCA9IG9wZW4gKGRiLT5maWxlbmFtZSwKKysJCQkgICAoZmFsc2UgPyBPX1JET05MWSA6IE9fUkRXUikKKysJCQkgICB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyB8IE9fTk9GT0xMT1cpOworKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKysJfQorKworIAlkYi0+ZnAgPSBOVUxMOworIAlpZiAoZmQgPj0gMCkgeworICNpZmRlZiBXSVRIX1RDQgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2Rpc2FibGUtc3lzbG9nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDNmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2Rpc2FibGUtc3lzbG9nLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Rpc2FibGUgdXNlIG9mIHN5c2xvZyB0byBwcmV2ZW50IHN5c3Jvb3QgdXNlciBhbmQgZ3JvdXAgYWRkaXRpb25zIGZyb20KK3dyaXRpbmcgZW50cmllcyB0byB0aGUgaG9zdCdzIHN5c2xvZy4gVGhpcyBwYXRjaCBzaG91bGQgb25seSBiZSB1c2VkCit3aXRoIHRoZSBzaGFkb3ctbmF0aXZlIHJlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL2dyb3VwYWRkLmMgc2hhZG93LTQuMS40LjMvc3JjL2dyb3VwYWRkLmMKKy0tLSBzaGFkb3ctNC4xLjQuMy5vcmlnLy9zcmMvZ3JvdXBhZGQuYwkyMDExLTAyLTEzIDA5OjU4OjE2LjAwMDAwMDAwMCAtMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL3NyYy9ncm91cGFkZC5jCTIwMTItMDQtMDUgMTA6MDU6NTkuNDQwMDAxNzU4IC0wNzAwCitAQCAtMzQsNiArMzQsOSBAQAorIAorICNpZGVudCAiJElkOiBncm91cGFkZC5jIDMwMTUgMjAwOS0wNi0wNSAyMjoxNjo1NlogbmVrcmFsLWd1ZXN0ICQiCisgCisrLyogRGlzYWJsZSB1c2Ugb2Ygc3lzbG9nIHNpbmNlIHdlJ3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kIGFnYWluc3QgYSBzeXNyb290ICovCisrI3VuZGVmIFVTRV9TWVNMT0cKKysKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CitkaWZmIC11ck4gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL3VzZXJhZGQuYyBzaGFkb3ctNC4xLjQuMy9zcmMvdXNlcmFkZC5jCistLS0gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL3VzZXJhZGQuYwkyMDExLTAyLTEzIDA5OjU4OjE2LjAwMDAwMDAwMCAtMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL3NyYy91c2VyYWRkLmMJMjAxMi0wNC0wNSAxMDowNjoyNS4wNzYwMDEzMTUgLTA3MDAKK0BAIC0zNCw2ICszNCw5IEBACisgCisgI2lkZW50ICIkSWQ6IHVzZXJhZGQuYyAzMDE1IDIwMDktMDYtMDUgMjI6MTY6NTZaIG5la3JhbC1ndWVzdCAkIgorIAorKy8qIERpc2FibGUgdXNlIG9mIHN5c2xvZyBzaW5jZSB3ZSdyZSBydW5uaW5nIHRoaXMgY29tbWFuZCBhZ2FpbnN0IGEgc3lzcm9vdCAqLworKyN1bmRlZiBVU0VfU1lTTE9HCisrCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmNiOTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1N1YmplY3Q6IGZpeCBpbnN0YWxsYXRpb24gZmFpbHVyZSB3aXRoIHN1YmlkcyBkaXNhYmxlZAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCAgICA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCAyNWUyODhkLi4wNzZmOGVmIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC01Miw3ICs1MiwxMCBAQCB1c2Jpbl9QUk9HUkFNUyA9IFwKKyBub2luc3RfUFJPR1JBTVMgPSBpZCBzdWxvZ2luCisgCisgc3VpZGJpbnMgICAgICAgPSBzdQorLXN1aWR1YmlucyAgICAgID0gY2hhZ2UgY2hmbiBjaHNoIGV4cGlyeSBncGFzc3dkIG5ld2dycCBwYXNzd2QgbmV3dWlkbWFwIG5ld2dpZG1hcAorK3N1aWR1YmlucyAgICAgID0gY2hhZ2UgY2hmbiBjaHNoIGV4cGlyeSBncGFzc3dkIG5ld2dycCBwYXNzd2QKKytpZiBFTkFCTEVfU1VCSURTCisrc3VpZHViaW5zICs9IG5ld2dpZG1hcCBuZXd1aWRtYXAKKytlbmRpZgorIGlmIEFDQ1RfVE9PTFNfU0VUVUlECisgCXN1aWR1YmlucyArPSBjaGFnZSBjaGdwYXNzd2QgY2hwYXNzd2QgZ3JvdXBhZGQgZ3JvdXBkZWwgZ3JvdXBtb2QgbmV3dXNlcnMgdXNlcmFkZCB1c2VyZGVsIHVzZXJtb2QKKyBlbmRpZgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTY4ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290CkBAIC0wLDAgKzEsMzg2IEBACisjCisjIC9ldGMvbG9naW4uZGVmcyAtIENvbmZpZ3VyYXRpb24gY29udHJvbCBkZWZpbml0aW9ucyBmb3IgdGhlIHNoYWRvdyBwYWNrYWdlLgorIworIwkkSWQ6IGxvZ2luLmRlZnMgMzAzOCAyMDA5LTA3LTIzIDIwOjQxOjM1WiBuZWtyYWwtZ3Vlc3QgJAorIworCisjCisjIERlbGF5IGluIHNlY29uZHMgYmVmb3JlIGJlaW5nIGFsbG93ZWQgYW5vdGhlciBhdHRlbXB0IGFmdGVyIGEgbG9naW4gZmFpbHVyZQorIyBOb3RlOiBXaGVuIFBBTSBpcyB1c2VkLCBzb21lIG1vZHVsZXMgbWF5IGVuZm9yZSBhIG1pbmltYWwgZGVsYXkgKGUuZy4KKyMgICAgICAgcGFtX3VuaXggZW5mb3JjZXMgYSAycyBkZWxheSkKKyMKK0ZBSUxfREVMQVkJCTMKKworIworIyBFbmFibGUgbG9nZ2luZyBhbmQgZGlzcGxheSBvZiAvdmFyL2xvZy9mYWlsbG9nIGxvZ2luIGZhaWx1cmUgaW5mby4KKyMKKyNGQUlMTE9HX0VOQUIJCXllcworCisjCisjIEVuYWJsZSBkaXNwbGF5IG9mIHVua25vd24gdXNlcm5hbWVzIHdoZW4gbG9naW4gZmFpbHVyZXMgYXJlIHJlY29yZGVkLgorIworTE9HX1VOS0ZBSUxfRU5BQglubworCisjCisjIEVuYWJsZSBsb2dnaW5nIG9mIHN1Y2Nlc3NmdWwgbG9naW5zCisjCitMT0dfT0tfTE9HSU5TCQlubworCisjCisjIEVuYWJsZSBsb2dnaW5nIGFuZCBkaXNwbGF5IG9mIC92YXIvbG9nL2xhc3Rsb2cgbG9naW4gdGltZSBpbmZvLgorIworI0xBU1RMT0dfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlIGNoZWNraW5nIGFuZCBkaXNwbGF5IG9mIG1haWxib3ggc3RhdHVzIHVwb24gbG9naW4uCisjCisjIERpc2FibGUgaWYgdGhlIHNoZWxsIHN0YXJ0dXAgZmlsZXMgYWxyZWFkeSBjaGVjayBmb3IgbWFpbAorIyAoIm1haWx4IC1lIiBvciBlcXVpdmFsZW50KS4KKyMKKyMjTUFJTF9DSEVDS19FTkFCCQl5ZXMKKworIworIyBFbmFibGUgYWRkaXRpb25hbCBjaGVja3MgdXBvbiBwYXNzd29yZCBjaGFuZ2VzLgorIworI09CU0NVUkVfQ0hFQ0tTX0VOQUIJeWVzCisKKyMKKyMgRW5hYmxlIGNoZWNraW5nIG9mIHRpbWUgcmVzdHJpY3Rpb25zIHNwZWNpZmllZCBpbiAvZXRjL3BvcnR0aW1lLgorIworI1BPUlRUSU1FX0NIRUNLU19FTkFCCXllcworCisjCisjIEVuYWJsZSBzZXR0aW5nIG9mIHVsaW1pdCwgdW1hc2ssIGFuZCBuaWNlbmVzcyBmcm9tIHBhc3N3ZCBnZWNvcyBmaWVsZC4KKyMKKyNRVU9UQVNfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlICJzeXNsb2ciIGxvZ2dpbmcgb2Ygc3UgYWN0aXZpdHkgLSBpbiBhZGRpdGlvbiB0byBzdWxvZyBmaWxlIGxvZ2dpbmcuCisjIFNZU0xPR19TR19FTkFCIGRvZXMgdGhlIHNhbWUgZm9yIG5ld2dycCBhbmQgc2cuCisjCitTWVNMT0dfU1VfRU5BQgkJeWVzCitTWVNMT0dfU0dfRU5BQgkJeWVzCisKKyMKKyMgSWYgZGVmaW5lZCwgZWl0aGVyIGZ1bGwgcGF0aG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgZGV2aWNlIG5hbWVzIG9yCisjIGEgIjoiIGRlbGltaXRlZCBsaXN0IG9mIGRldmljZSBuYW1lcy4gIFJvb3QgbG9naW5zIHdpbGwgYmUgYWxsb3dlZCBvbmx5CisjIHVwb24gdGhlc2UgZGV2aWNlcy4KKyMKK0NPTlNPTEUJCS9ldGMvc2VjdXJldHR5CisjQ09OU09MRQljb25zb2xlOnR0eTAxOnR0eTAyOnR0eTAzOnR0eTA0CisKKyMKKyMgSWYgZGVmaW5lZCwgYWxsIHN1IGFjdGl2aXR5IGlzIGxvZ2dlZCB0byB0aGlzIGZpbGUuCisjCisjU1VMT0dfRklMRQkvdmFyL2xvZy9zdWxvZworCisjCisjIElmIGRlZmluZWQsICI6IiBkZWxpbWl0ZWQgbGlzdCBvZiAibWVzc2FnZSBvZiB0aGUgZGF5IiBmaWxlcyB0bworIyBiZSBkaXNwbGF5ZWQgdXBvbiBsb2dpbi4KKyMKKyNNT1REX0ZJTEUJL2V0Yy9tb3RkCisjTU9URF9GSUxFCS9ldGMvbW90ZDovdXNyL2xpYi9uZXdzL25ld3MtbW90ZAorCisjCisjIElmIGRlZmluZWQsIHRoaXMgZmlsZSB3aWxsIGJlIG91dHB1dCBiZWZvcmUgZWFjaCBsb2dpbiBwcm9tcHQuCisjCisjSVNTVUVfRklMRQkvZXRjL2lzc3VlCisKKyMKKyMgSWYgZGVmaW5lZCwgZmlsZSB3aGljaCBtYXBzIHR0eSBsaW5lIHRvIFRFUk0gZW52aXJvbm1lbnQgcGFyYW1ldGVyLgorIyBFYWNoIGxpbmUgb2YgdGhlIGZpbGUgaXMgaW4gYSBmb3JtYXQgc29tZXRoaW5nIGxpa2UgInZ0MTAwICB0dHkwMSIuCisjCisjVFRZVFlQRV9GSUxFCS9ldGMvdHR5dHlwZQorCisjCisjIElmIGRlZmluZWQsIGxvZ2luIGZhaWx1cmVzIHdpbGwgYmUgbG9nZ2VkIGhlcmUgaW4gYSB1dG1wIGZvcm1hdC4KKyMgbGFzdCwgd2hlbiBpbnZva2VkIGFzIGxhc3RiLCB3aWxsIHJlYWQgL3Zhci9sb2cvYnRtcCwgc28uLi4KKyMKKyNGVE1QX0ZJTEUJL3Zhci9sb2cvYnRtcAorCisjCisjIElmIGRlZmluZWQsIG5hbWUgb2YgZmlsZSB3aG9zZSBwcmVzZW5jZSB3aGljaCB3aWxsIGluaGliaXQgbm9uLXJvb3QKKyMgbG9naW5zLiAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBzaG91bGQgYmUgYSBtZXNzYWdlIGluZGljYXRpbmcKKyMgd2h5IGxvZ2lucyBhcmUgaW5oaWJpdGVkLgorIworI05PTE9HSU5TX0ZJTEUJL2V0Yy9ub2xvZ2luCisKKyMKKyMgSWYgZGVmaW5lZCwgdGhlIGNvbW1hbmQgbmFtZSB0byBkaXNwbGF5IHdoZW4gcnVubmluZyAic3UgLSIuICBGb3IKKyMgZXhhbXBsZSwgaWYgdGhpcyBpcyBkZWZpbmVkIGFzICJzdSIgdGhlbiBhICJwcyIgd2lsbCBkaXNwbGF5IHRoZQorIyBjb21tYW5kIGlzICItc3UiLiAgSWYgbm90IGRlZmluZWQsIHRoZW4gInBzIiB3b3VsZCBkaXNwbGF5IHRoZQorIyBuYW1lIG9mIHRoZSBzaGVsbCBhY3R1YWxseSBiZWluZyBydW4sIGUuZy4gc29tZXRoaW5nIGxpa2UgIi1zaCIuCisjCitTVV9OQU1FCQlzdQorCisjCisjICpSRVFVSVJFRCoKKyMgICBEaXJlY3Rvcnkgd2hlcmUgbWFpbGJveGVzIHJlc2lkZSwgX29yXyBuYW1lIG9mIGZpbGUsIHJlbGF0aXZlIHRvIHRoZQorIyAgIGhvbWUgZGlyZWN0b3J5LiAgSWYgeW91IF9kb18gZGVmaW5lIGJvdGgsICNNQUlMX0RJUiB0YWtlcyBwcmVjZWRlbmNlLgorIworI01BSUxfRElSCS92YXIvc3Bvb2wvbWFpbAorTUFJTF9GSUxFCS5tYWlsCisKKyMKKyMgSWYgZGVmaW5lZCwgZmlsZSB3aGljaCBpbmhpYml0cyBhbGwgdGhlIHVzdWFsIGNoYXR0ZXIgZHVyaW5nIHRoZSBsb2dpbgorIyBzZXF1ZW5jZS4gIElmIGEgZnVsbCBwYXRobmFtZSwgdGhlbiBodXNoZWQgbW9kZSB3aWxsIGJlIGVuYWJsZWQgaWYgdGhlCisjIHVzZXIncyBuYW1lIG9yIHNoZWxsIGFyZSBmb3VuZCBpbiB0aGUgZmlsZS4gIElmIG5vdCBhIGZ1bGwgcGF0aG5hbWUsIHRoZW4KKyMgaHVzaGVkIG1vZGUgd2lsbCBiZSBlbmFibGVkIGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorIworSFVTSExPR0lOX0ZJTEUJLmh1c2hsb2dpbgorI0hVU0hMT0dJTl9GSUxFCS9ldGMvaHVzaGxvZ2lucworCisjCisjIElmIGRlZmluZWQsIGVpdGhlciBhIFRaIGVudmlyb25tZW50IHBhcmFtZXRlciBzcGVjIG9yIHRoZQorIyBmdWxseS1yb290ZWQgcGF0aG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgc3VjaCBhIHNwZWMuCisjCisjRU5WX1RaCQlUWj1DU1Q2Q0RUCisjRU5WX1RaCQkvZXRjL3R6bmFtZQorCisjCisjIElmIGRlZmluZWQsIGFuIEhaIGVudmlyb25tZW50IHBhcmFtZXRlciBzcGVjLgorIworIyBmb3IgTGludXgveDg2CisjRU5WX0haCQlIWj0xMDAKKyMgRm9yIExpbnV4L0FscGhhLi4uCisjRU5WX0haCQlIWj0xMDI0CisKKyMKKyMgKlJFUVVJUkVEKiAgVGhlIGRlZmF1bHQgUEFUSCBzZXR0aW5ncywgZm9yIHN1cGVydXNlciBhbmQgbm9ybWFsIHVzZXJzLgorIworIyAodGhleSBhcmUgbWluaW1hbCwgYWRkIHRoZSByZXN0IGluIHRoZSBzaGVsbCBzdGFydHVwIGZpbGVzKQorRU5WX1NVUEFUSAlQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitFTlZfUEFUSAlQQVRIPS9iaW46L3Vzci9iaW4KKworIworIyBUZXJtaW5hbCBwZXJtaXNzaW9ucworIworIwlUVFlHUk9VUAlMb2dpbiB0dHkgd2lsbCBiZSBhc3NpZ25lZCB0aGlzIGdyb3VwIG93bmVyc2hpcC4KKyMJVFRZUEVSTQkJTG9naW4gdHR5IHdpbGwgYmUgc2V0IHRvIHRoaXMgcGVybWlzc2lvbi4KKyMKKyMgSWYgeW91IGhhdmUgYSAid3JpdGUiIHByb2dyYW0gd2hpY2ggaXMgInNldGdpZCIgdG8gYSBzcGVjaWFsIGdyb3VwCisjIHdoaWNoIG93bnMgdGhlIHRlcm1pbmFscywgZGVmaW5lIFRUWUdST1VQIHRvIHRoZSBncm91cCBudW1iZXIgYW5kCisjIFRUWVBFUk0gdG8gMDYyMC4gIE90aGVyd2lzZSBsZWF2ZSBUVFlHUk9VUCBjb21tZW50ZWQgb3V0IGFuZCBhc3NpZ24KKyMgVFRZUEVSTSB0byBlaXRoZXIgNjIyIG9yIDYwMC4KKyMKK1RUWUdST1VQCXR0eQorVFRZUEVSTQkJMDYwMAorCisjCisjIExvZ2luIGNvbmZpZ3VyYXRpb24gaW5pdGlhbGl6YXRpb25zOgorIworIwlFUkFTRUNIQVIJVGVybWluYWwgRVJBU0UgY2hhcmFjdGVyICgnXDAxMCcgPSBiYWNrc3BhY2UpLgorIwlLSUxMQ0hBUglUZXJtaW5hbCBLSUxMIGNoYXJhY3RlciAoJ1wwMjUnID0gQ1RSTC9VKS4KKyMJVUxJTUlUCQlEZWZhdWx0ICJ1bGltaXQiIHZhbHVlLgorIworIyBUaGUgRVJBU0VDSEFSIGFuZCBLSUxMQ0hBUiBhcmUgdXNlZCBvbmx5IG9uIFN5c3RlbSBWIG1hY2hpbmVzLgorIyBUaGUgVUxJTUlUIGlzIHVzZWQgb25seSBpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGl0LgorIyAobm93IGl0IHdvcmtzIHdpdGggc2V0cmxpbWl0IHRvbzsgdWxpbWl0IGlzIGluIDUxMi1ieXRlIHVuaXRzKQorIworIyBQcmVmaXggdGhlc2UgdmFsdWVzIHdpdGggIjAiIHRvIGdldCBvY3RhbCwgIjB4IiB0byBnZXQgaGV4YWRlY2ltYWwuCisjCitFUkFTRUNIQVIJMDE3NworS0lMTENIQVIJMDI1CisjVUxJTUlUCQkyMDk3MTUyCisKKyMgRGVmYXVsdCBpbml0aWFsICJ1bWFzayIgdmFsdWUgZm9yIG5vbi1QQU0gZW5hYmxlZCBzeXN0ZW1zLgorIyBVTUFTSyBpcyBhbHNvIHVzZWQgYnkgdXNlcmFkZCBhbmQgbmV3dXNlcnMgdG8gc2V0IHRoZSBtb2RlIG9mIG5ldyBob21lCisjIGRpcmVjdG9yaWVzLgorIyAwMjIgaXMgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCAwMjcsIG9yIGV2ZW4gMDc3LCBjb3VsZCBiZSBjb25zaWRlcmVkCisjIGJldHRlciBmb3IgcHJpdmFjeS4gVGhlcmUgaXMgbm8gT25lIFRydWUgQW5zd2VyIGhlcmU6IGVhY2ggc3lzYWRtaW4KKyMgbXVzdCBtYWtlIHVwIGhlciBtaW5kLgorVU1BU0sJCTAyMgorCisjCisjIFBhc3N3b3JkIGFnaW5nIGNvbnRyb2xzOgorIworIwlQQVNTX01BWF9EQVlTCU1heGltdW0gbnVtYmVyIG9mIGRheXMgYSBwYXNzd29yZCBtYXkgYmUgdXNlZC4KKyMJUEFTU19NSU5fREFZUwlNaW5pbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgYmV0d2VlbiBwYXNzd29yZCBjaGFuZ2VzLgorIwlQQVNTX01JTl9MRU4JTWluaW11bSBhY2NlcHRhYmxlIHBhc3N3b3JkIGxlbmd0aC4KKyMJUEFTU19XQVJOX0FHRQlOdW1iZXIgb2YgZGF5cyB3YXJuaW5nIGdpdmVuIGJlZm9yZSBhIHBhc3N3b3JkIGV4cGlyZXMuCisjCitQQVNTX01BWF9EQVlTCTk5OTk5CitQQVNTX01JTl9EQVlTCTAKKyNQQVNTX01JTl9MRU4JNQorUEFTU19XQVJOX0FHRQk3CisKKyMKKyMgSWYgInllcyIsIHRoZSB1c2VyIG11c3QgYmUgbGlzdGVkIGFzIGEgbWVtYmVyIG9mIHRoZSBmaXJzdCBnaWQgMCBncm91cAorIyBpbiAvZXRjL2dyb3VwIChjYWxsZWQgInJvb3QiIG9uIG1vc3QgTGludXggc3lzdGVtcykgdG8gYmUgYWJsZSB0byAic3UiCisjIHRvIHVpZCAwIGFjY291bnRzLiAgSWYgdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgZW1wdHksIG5vIG9uZQorIyB3aWxsIGJlIGFibGUgdG8gInN1IiB0byB1aWQgMC4KKyMKKyNTVV9XSEVFTF9PTkxZCW5vCisKKyMKKyMgSWYgY29tcGlsZWQgd2l0aCBjcmFja2xpYiBzdXBwb3J0LCB3aGVyZSBhcmUgdGhlIGRpY3Rpb25hcmllcworIworI0NSQUNLTElCX0RJQ1RQQVRICS92YXIvY2FjaGUvY3JhY2tsaWIvY3JhY2tsaWJfZGljdAorCisjCisjIE1pbi9tYXggdmFsdWVzIGZvciBhdXRvbWF0aWMgdWlkIHNlbGVjdGlvbiBpbiB1c2VyYWRkCisjCitVSURfTUlOCQkJIDEwMDAKK1VJRF9NQVgJCQk2MDAwMAorIyBTeXN0ZW0gYWNjb3VudHMKK1NZU19VSURfTUlOCQkgIDEwMQorU1lTX1VJRF9NQVgJCSAgOTk5CisKKyMKKyMgTWluL21heCB2YWx1ZXMgZm9yIGF1dG9tYXRpYyBnaWQgc2VsZWN0aW9uIGluIGdyb3VwYWRkCisjCitHSURfTUlOCQkJIDEwMDAKK0dJRF9NQVgJCQk2MDAwMAorIyBTeXN0ZW0gYWNjb3VudHMKK1NZU19HSURfTUlOCQkgIDEwMQorU1lTX0dJRF9NQVgJCSAgOTk5CisKKyMKKyMgTWF4IG51bWJlciBvZiBsb2dpbiByZXRyaWVzIGlmIHBhc3N3b3JkIGlzIGJhZAorIworTE9HSU5fUkVUUklFUwkJNQorCisjCisjIE1heCB0aW1lIGluIHNlY29uZHMgZm9yIGxvZ2luCisjCitMT0dJTl9USU1FT1VUCQk2MAorCisjCisjIE1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGNoYW5nZSBwYXNzd29yZCBpZiByZWplY3RlZCAodG9vIGVhc3kpCisjCisjUEFTU19DSEFOR0VfVFJJRVMJNQorCisjCisjIFdhcm4gYWJvdXQgd2VhayBwYXNzd29yZHMgKGJ1dCBzdGlsbCBhbGxvdyB0aGVtKSBpZiB5b3UgYXJlIHJvb3QuCisjCisjUEFTU19BTFdBWVNfV0FSTgl5ZXMKKworIworIyBOdW1iZXIgb2Ygc2lnbmlmaWNhbnQgY2hhcmFjdGVycyBpbiB0aGUgcGFzc3dvcmQgZm9yIGNyeXB0KCkuCisjIERlZmF1bHQgaXMgOCwgZG9uJ3QgY2hhbmdlIHVubGVzcyB5b3VyIGNyeXB0KCkgaXMgYmV0dGVyLgorIyBJZ25vcmVkIGlmIE1ENV9DUllQVF9FTkFCIHNldCB0byAieWVzIi4KKyMKKyNQQVNTX01BWF9MRU4JCTgKKworIworIyBSZXF1aXJlIHBhc3N3b3JkIGJlZm9yZSBjaGZuL2Noc2ggY2FuIG1ha2UgYW55IGNoYW5nZXMuCisjCisjQ0hGTl9BVVRICQl5ZXMKKworIworIyBXaGljaCBmaWVsZHMgbWF5IGJlIGNoYW5nZWQgYnkgcmVndWxhciB1c2VycyB1c2luZyBjaGZuIC0gdXNlCisjIGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzICJmcndoIiAoZnVsbCBuYW1lLCByb29tIG51bWJlciwgd29yaworIyBwaG9uZSwgaG9tZSBwaG9uZSkuICBJZiBub3QgZGVmaW5lZCwgbm8gY2hhbmdlcyBhcmUgYWxsb3dlZC4KKyMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksICJ5ZXMiID0gInJ3aCIgYW5kICJubyIgPSAiZnJ3aCIuCisjIAorQ0hGTl9SRVNUUklDVAkJcndoCisKKyMKKyMgUGFzc3dvcmQgcHJvbXB0ICglcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHVzZXIgbmFtZSkuCisjCisjIFhYWCAtIGl0IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgeWV0LCBmb3Igbm93IGxlYXZlIGl0IGNvbW1lbnRlZCBvdXQKKyMgdG8gdXNlIHRoZSBkZWZhdWx0IHdoaWNoIGlzIGp1c3QgIlBhc3N3b3JkOiAiLgorI0xPR0lOX1NUUklORwkJIiVzJ3MgUGFzc3dvcmQ6ICIKKworIworIyBPbmx5IHdvcmtzIGlmIGNvbXBpbGVkIHdpdGggTUQ1X0NSWVBUIGRlZmluZWQ6CisjIElmIHNldCB0byAieWVzIiwgbmV3IHBhc3N3b3JkcyB3aWxsIGJlIGVuY3J5cHRlZCB1c2luZyB0aGUgTUQ1LWJhc2VkCisjIGFsZ29yaXRobSBjb21wYXRpYmxlIHdpdGggdGhlIG9uZSB1c2VkIGJ5IHJlY2VudCByZWxlYXNlcyBvZiBGcmVlQlNELgorIyBJdCBzdXBwb3J0cyBwYXNzd29yZHMgb2YgdW5saW1pdGVkIGxlbmd0aCBhbmQgbG9uZ2VyIHNhbHQgc3RyaW5ncy4KKyMgU2V0IHRvICJubyIgaWYgeW91IG5lZWQgdG8gY29weSBlbmNyeXB0ZWQgcGFzc3dvcmRzIHRvIG90aGVyIHN5c3RlbXMKKyMgd2hpY2ggZG9uJ3QgdW5kZXJzdGFuZCB0aGUgbmV3IGFsZ29yaXRobS4gIERlZmF1bHQgaXMgIm5vIi4KKyMKKyMgTm90ZTogSWYgeW91IHVzZSBQQU0sIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhIHZhbHVlIGNvbnNpc3RlbnQgd2l0aAorIyB0aGUgUEFNIG1vZHVsZXMgY29uZmlndXJhdGlvbi4KKyMKKyMgVGhpcyB2YXJpYWJsZSBpcyBkZXByZWNhdGVkLiBZb3Ugc2hvdWxkIHVzZSBFTkNSWVBUX01FVEhPRC4KKyMKKyNNRDVfQ1JZUFRfRU5BQglubworCisjCisjIE9ubHkgd29ya3MgaWYgY29tcGlsZWQgd2l0aCBFTkNSWVBUTUVUSE9EX1NFTEVDVCBkZWZpbmVkOgorIyBJZiBzZXQgdG8gTUQ1ICwgTUQ1LWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIFNIQTI1NiwgU0hBMjU2LWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIFNIQTUxMiwgU0hBNTEyLWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIERFUywgREVTLWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQgKGRlZmF1bHQpCisjIE92ZXJyaWRlcyB0aGUgTUQ1X0NSWVBUX0VOQUIgb3B0aW9uCisjCisjIE5vdGU6IElmIHlvdSB1c2UgUEFNLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSB2YWx1ZSBjb25zaXN0ZW50IHdpdGgKKyMgdGhlIFBBTSBtb2R1bGVzIGNvbmZpZ3VyYXRpb24uCisjCisjRU5DUllQVF9NRVRIT0QgREVTCisKKyMKKyMgT25seSB3b3JrcyBpZiBFTkNSWVBUX01FVEhPRCBpcyBzZXQgdG8gU0hBMjU2IG9yIFNIQTUxMi4KKyMKKyMgRGVmaW5lIHRoZSBudW1iZXIgb2YgU0hBIHJvdW5kcy4KKyMgV2l0aCBhIGxvdCBvZiByb3VuZHMsIGl0IGlzIG1vcmUgZGlmZmljdWx0IHRvIGJydXRlIGZvcmNpbmcgdGhlIHBhc3N3b3JkLgorIyBCdXQgbm90ZSBhbHNvIHRoYXQgaXQgbW9yZSBDUFUgcmVzb3VyY2VzIHdpbGwgYmUgbmVlZGVkIHRvIGF1dGhlbnRpY2F0ZQorIyB1c2Vycy4KKyMKKyMgSWYgbm90IHNwZWNpZmllZCwgdGhlIGxpYmMgd2lsbCBjaG9vc2UgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvdW5kcyAoNTAwMCkuCisjIFRoZSB2YWx1ZXMgbXVzdCBiZSBpbnNpZGUgdGhlIDEwMDAtOTk5OTk5OTk5IHJhbmdlLgorIyBJZiBvbmx5IG9uZSBvZiB0aGUgTUlOIG9yIE1BWCB2YWx1ZXMgaXMgc2V0LCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkLgorIyBJZiBNSU4gPiBNQVgsIHRoZSBoaWdoZXN0IHZhbHVlIHdpbGwgYmUgdXNlZC4KKyMKKyMgU0hBX0NSWVBUX01JTl9ST1VORFMgNTAwMAorIyBTSEFfQ1JZUFRfTUFYX1JPVU5EUyA1MDAwCisKKyMKKyMgTGlzdCBvZiBncm91cHMgdG8gYWRkIHRvIHRoZSB1c2VyJ3Mgc3VwcGxlbWVudGFyeSBncm91cCBzZXQKKyMgd2hlbiBsb2dnaW5nIGluIG9uIHRoZSBjb25zb2xlIChhcyBkZXRlcm1pbmVkIGJ5IHRoZSBDT05TT0xFCisjIHNldHRpbmcpLiAgRGVmYXVsdCBpcyBub25lLgorIworIyBVc2Ugd2l0aCBjYXV0aW9uIC0gaXQgaXMgcG9zc2libGUgZm9yIHVzZXJzIHRvIGdhaW4gcGVybWFuZW50CisjIGFjY2VzcyB0byB0aGVzZSBncm91cHMsIGV2ZW4gd2hlbiBub3QgbG9nZ2VkIGluIG9uIHRoZSBjb25zb2xlLgorIyBIb3cgdG8gZG8gaXQgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4uLgorIworI0NPTlNPTEVfR1JPVVBTCQlmbG9wcHk6YXVkaW86Y2Ryb20KKworIworIyBTaG91bGQgbG9naW4gYmUgYWxsb3dlZCBpZiB3ZSBjYW4ndCBjZCB0byB0aGUgaG9tZSBkaXJlY3Rvcnk/CisjIERlZmF1bHQgaW4gbm8uCisjCitERUZBVUxUX0hPTUUJeWVzCisKKyMKKyMgSWYgdGhpcyBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUsIGxvZ2luIGVudmlyb25tZW50IHdpbGwgYmUKKyMgcmVhZCBmcm9tIGl0LiAgRXZlcnkgbGluZSBzaG91bGQgYmUgaW4gdGhlIGZvcm0gbmFtZT12YWx1ZS4KKyMKKyNFTlZJUk9OX0ZJTEUJL2V0Yy9lbnZpcm9ubWVudAorCisjCisjIElmIGRlZmluZWQsIHRoaXMgY29tbWFuZCBpcyBydW4gd2hlbiByZW1vdmluZyBhIHVzZXIuCisjIEl0IHNob3VsZCByZW1vdmUgYW55IGF0L2Nyb24vcHJpbnQgam9icyBldGMuIG93bmVkIGJ5CisjIHRoZSB1c2VyIHRvIGJlIHJlbW92ZWQgKHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQpLgorIworI1VTRVJERUxfQ01ECS91c3Ivc2Jpbi91c2VyZGVsX2xvY2FsCisKKyMKKyMgRW5hYmxlIHNldHRpbmcgb2YgdGhlIHVtYXNrIGdyb3VwIGJpdHMgdG8gYmUgdGhlIHNhbWUgYXMgb3duZXIgYml0cworIyAoZXhhbXBsZXM6IDAyMiAtPiAwMDIsIDA3NyAtPiAwMDcpIGZvciBub24tcm9vdCB1c2VycywgaWYgdGhlIHVpZCBpcworIyB0aGUgc2FtZSBhcyBnaWQsIGFuZCB1c2VybmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpbWFyeSBncm91cCBuYW1lLgorIworIyBUaGlzIGFsc28gZW5hYmxlcyB1c2VyZGVsIHRvIHJlbW92ZSB1c2VyIGdyb3VwcyBpZiBubyBtZW1iZXJzIGV4aXN0LgorIworVVNFUkdST1VQU19FTkFCIHllcworCisjCisjIElmIHNldCB0byBhIG5vbi1udWwgbnVtYmVyLCB0aGUgc2hhZG93IHV0aWxpdGllcyB3aWxsIG1ha2Ugc3VyZSB0aGF0CisjIGdyb3VwcyBuZXZlciBoYXZlIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiB1c2VycyBvbiBvbmUgbGluZS4KKyMgVGhpcyBwZXJtaXQgdG8gc3VwcG9ydCBzcGxpdCBncm91cHMgKGdyb3VwcyBzcGxpdCBpbnRvIG11bHRpcGxlIGxpbmVzLAorIyB3aXRoIHRoZSBzYW1lIGdyb3VwIElELCB0byBhdm9pZCBsaW1pdGF0aW9uIG9mIHRoZSBsaW5lIGxlbmd0aCBpbiB0aGUKKyMgZ3JvdXAgZmlsZSkuCisjCisjIDAgaXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIGRpc2FibGVzIHRoaXMgZmVhdHVyZS4KKyMKKyNNQVhfTUVNQkVSU19QRVJfR1JPVVAJMAorCisjCisjIElmIHVzZXJhZGQgc2hvdWxkIGNyZWF0ZSBob21lIGRpcmVjdG9yaWVzIGZvciB1c2VycyBieSBkZWZhdWx0IChub24KKyMgc3lzdGVtIHVzZXJzIG9ubHkpCisjIFRoaXMgb3B0aW9uIGlzIG92ZXJyaWRkZW4gd2l0aCB0aGUgLU0gb3IgLW0gZmxhZ3Mgb24gdGhlIHVzZXJhZGQgY29tbWFuZAorIyBsaW5lLgorIworQ1JFQVRFX0hPTUUgICAgIHllcworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW5fZGVmc19wYW0uc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWYzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZApAQCAtMCwwICsxLDMyIEBACisvXkZBSUxMT0dfRU5BQi9iIGNvbW1lbnQKKy9eTEFTVExPR19FTkFCL2IgY29tbWVudAorL15NQUlMX0NIRUNLX0VOQUIvYiBjb21tZW50CisvXk9CU0NVUkVfQ0hFQ0tTX0VOQUIvYiBjb21tZW50CisvXlBPUlRUSU1FX0NIRUNLU19FTkFCL2IgY29tbWVudAorL15RVU9UQVNfRU5BQi9iIGNvbW1lbnQKKy9eTU9URF9GSUxFL2IgY29tbWVudAorL15GVE1QX0ZJTEUvYiBjb21tZW50CisvXk5PTE9HSU5TX0ZJTEUvYiBjb21tZW50CisvXkVOVl9IWi9iIGNvbW1lbnQKKy9eRU5WX1RaL2IgY29tbWVudAorL15QQVNTX01JTl9MRU4vYiBjb21tZW50CisvXlNVX1dIRUVMX09OTFkvYiBjb21tZW50CisvXkNSQUNLTElCX0RJQ1RQQVRIL2IgY29tbWVudAorL15QQVNTX0NIQU5HRV9UUklFUy9iIGNvbW1lbnQKKy9eUEFTU19BTFdBWVNfV0FSTi9iIGNvbW1lbnQKKy9eUEFTU19NQVhfTEVOL2IgY29tbWVudAorL15QQVNTX01JTl9MRU4vYiBjb21tZW50CisvXkNIRk5fQVVUSC9iIGNvbW1lbnQKKy9eQ0hTSF9BVVRIL2IgY29tbWVudAorL15JU1NVRV9GSUxFL2IgY29tbWVudAorL15MT0dJTl9TVFJJTkcvYiBjb21tZW50CisvXlVMSU1JVC9iIGNvbW1lbnQKKy9eRU5WSVJPTl9GSUxFL2IgY29tbWVudAorCitiIGV4aXQKKworOiBjb21tZW50CisgIHM6XjojOgorCis6IGV4aXQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZjc2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4KQEAgLTAsMCArMSwxNCBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgY2hmbicgc2VydmljZQorIworCisjIFRoaXMgYWxsb3dzIHJvb3QgdG8gY2hhbmdlIHVzZXIgaW5mb21hdGlvbiB3aXRob3V0IGJlaW5nCisjIHByb21wdGVkIGZvciBhIHBhc3N3b3JkCithdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hwYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzZWZhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hwYXNzd2QKQEAgLTAsMCArMSw0IEBACisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93ICdjaHBhc3N3ZCcgc2VydmljZQorIworCitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIxNjlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYGNoc2gnIHNlcnZpY2UKKyMKKworIyBUaGlzIHdpbGwgbm90IGFsbG93IGEgdXNlciB0byBjaGFuZ2UgdGhlaXIgc2hlbGwgdW5sZXNzCisjIHRoZWlyIGN1cnJlbnQgb25lIGlzIGxpc3RlZCBpbiAvZXRjL3NoZWxscy4gVGhpcyBrZWVwcworIyBhY2NvdW50cyB3aXRoIHNwZWNpYWwgc2hlbGxzIGZyb20gY2hhbmdpbmcgdGhlbS4KK2F1dGggICAgICAgcmVxdWlyZWQgICBwYW1fc2hlbGxzLnNvCisKKyMgVGhpcyBhbGxvd3Mgcm9vdCB0byBjaGFuZ2UgdXNlciBzaGVsbCB3aXRob3V0IGJlaW5nCisjIHByb21wdGVkIGZvciBhIHBhc3N3b3JkCithdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbG9naW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0MDA1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbG9naW4KQEAgLTAsMCArMSw4MSBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgbG9naW4nIHNlcnZpY2UKKyMKKworIyBFbmZvcmNlIGEgbWluaW1hbCBkZWxheSBpbiBjYXNlIG9mIGZhaWx1cmUgKGluIG1pY3Jvc2Vjb25kcykuCisjIChSZXBsYWNlcyB0aGUgYEZBSUxfREVMQVknIHNldHRpbmcgZnJvbSBsb2dpbi5kZWZzKQorIyBOb3RlIHRoYXQgb3RoZXIgbW9kdWxlcyBtYXkgcmVxdWlyZSBhbm90aGVyIG1pbmltYWwgZGVsYXkuIChmb3IgZXhhbXBsZSwKKyMgdG8gZGlzYWJsZSBhbnkgZGVsYXksIHlvdSBzaG91bGQgYWRkIHRoZSBub2RlbGF5IG9wdGlvbiB0byBwYW1fdW5peCkKK2F1dGggICAgICAgb3B0aW9uYWwgICBwYW1fZmFpbGRlbGF5LnNvICBkZWxheT0zMDAwMDAwCisKKyMgT3V0cHV0cyBhbiBpc3N1ZSBmaWxlIHByaW9yIHRvIGVhY2ggbG9naW4gcHJvbXB0IChSZXBsYWNlcyB0aGUKKyMgSVNTVUVfRklMRSBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKS4gVW5jb21tZW50IGZvciB1c2UKKyMgYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV9pc3N1ZS5zbyBpc3N1ZT0vZXRjL2lzc3VlCisKKyMgRGlzYWxsb3dzIHJvb3QgbG9naW5zIGV4Y2VwdCBvbiB0dHkncyBsaXN0ZWQgaW4gL2V0Yy9zZWN1cmV0dHkKKyMgKFJlcGxhY2VzIHRoZSBgQ09OU09MRScgc2V0dGluZyBmcm9tIGxvZ2luLmRlZnMpCisjIE5vdGUgdGhhdCBpdCBpcyBpbmNsdWRlZCBhcyBhICJyZXF1aXNpdGUiIG1vZHVsZS4gTm8gcGFzc3dvcmQgcHJvbXB0cyB3aWxsCisjIGJlIGRpc3BsYXllZCBpZiB0aGlzIG1vZHVsZSBmYWlscyB0byBhdm9pZCBoYXZpbmcgdGhlIHJvb3QgcGFzc3dvcmQKKyMgdHJhbnNtaXR0ZWQgb24gdW5zZWN1cmUgdHR5cy4KKyMgWW91IGNhbiBjaGFuZ2UgaXQgdG8gYSAicmVxdWlyZWQiIG1vZHVsZSBpZiB5b3UgdGhpbmsgaXQgcGVybWl0cyB0bworIyBndWVzcyB2YWxpZCB1c2VyIG5hbWVzIG9mIHlvdXIgc3lzdGVtIChpbnZhbGlkIHVzZXIgbmFtZXMgYXJlIGNvbnNpZGVyZWQKKyMgYXMgcG9zc2libHkgYmVpbmcgcm9vdCkuCithdXRoICAgICAgIFtzdWNjZXNzPW9rIGlnbm9yZT1pZ25vcmUgdXNlcl91bmtub3duPWlnbm9yZSBkZWZhdWx0PWRpZV0gIHBhbV9zZWN1cmV0dHkuc28KKworIyBEaXNhbGxvd3Mgb3RoZXIgdGhhbiByb290IGxvZ2lucyB3aGVuIC9ldGMvbm9sb2dpbiBleGlzdHMKKyMgKFJlcGxhY2VzIHRoZSBgTk9MT0dJTlNfRklMRScgb3B0aW9uIGZyb20gbG9naW4uZGVmcykKK2F1dGggICAgICAgcmVxdWlzaXRlICBwYW1fbm9sb2dpbi5zbworCisjIFRoaXMgbW9kdWxlIHBhcnNlcyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZpbGUocykKKyMgYW5kIGFsc28gYWxsb3dzIHlvdSB0byB1c2UgYW4gZXh0ZW5kZWQgY29uZmlnCisjIGZpbGUgL2V0Yy9zZWN1cml0eS9wYW1fZW52LmNvbmYuCisjIAorIyBwYXJzaW5nIC9ldGMvZW52aXJvbm1lbnQgbmVlZHMgInJlYWRlbnY9MSIKK3Nlc3Npb24gICAgICAgcmVxdWlyZWQgICBwYW1fZW52LnNvIHJlYWRlbnY9MQorCisjIFN0YW5kYXJkIFVuKnggYXV0aGVudGljYXRpb24uCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorCisjIFRoaXMgYWxsb3dzIGNlcnRhaW4gZXh0cmEgZ3JvdXBzIHRvIGJlIGdyYW50ZWQgdG8gYSB1c2VyCisjIGJhc2VkIG9uIHRoaW5ncyBsaWtlIHRpbWUgb2YgZGF5LCB0dHksIHNlcnZpY2UsIGFuZCB1c2VyLgorIyBQbGVhc2UgZWRpdCAvZXRjL3NlY3VyaXR5L2dyb3VwLmNvbmYgdG8gZml0IHlvdXIgbmVlZHMKKyMgKFJlcGxhY2VzIHRoZSBgQ09OU09MRV9HUk9VUFMnIG9wdGlvbiBpbiBsb2dpbi5kZWZzKQorYXV0aCAgICAgICBvcHRpb25hbCAgIHBhbV9ncm91cC5zbworCisjIFVuY29tbWVudCBhbmQgZWRpdCAvZXRjL3NlY3VyaXR5L3RpbWUuY29uZiBpZiB5b3UgbmVlZCB0byBzZXQKKyMgdGltZSByZXN0cmFpbnN0IG9uIGxvZ2lucy4KKyMgKFJlcGxhY2VzIHRoZSBgUE9SVFRJTUVfQ0hFQ0tTX0VOQUInIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMKKyMgYXMgd2VsbCBhcyAvZXRjL3BvcnR0aW1lKQorIyBhY2NvdW50ICAgIHJlcXVpc2l0ZSAgcGFtX3RpbWUuc28KKworIyBVbmNvbW1lbnQgYW5kIGVkaXQgL2V0Yy9zZWN1cml0eS9hY2Nlc3MuY29uZiBpZiB5b3UgbmVlZCB0bworIyBzZXQgYWNjZXNzIGxpbWl0cy4KKyMgKFJlcGxhY2VzIC9ldGMvbG9naW4uYWNjZXNzIGZpbGUpCisjIGFjY291bnQgIHJlcXVpcmVkICAgICAgIHBhbV9hY2Nlc3Muc28KKworIyBTZXRzIHVwIHVzZXIgbGltaXRzIGFjY29yZGluZyB0byAvZXRjL3NlY3VyaXR5L2xpbWl0cy5jb25mCisjIChSZXBsYWNlcyB0aGUgdXNlIG9mIC9ldGMvbGltaXRzIGluIG9sZCBsb2dpbikKK3Nlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbGltaXRzLnNvCisKKyMgUHJpbnRzIHRoZSBsYXN0IGxvZ2luIGluZm8gdXBvbiBzdWNjZXNmdWwgbG9naW4KKyMgKFJlcGxhY2VzIHRoZSBgTEFTVExPR19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKQorc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9sYXN0bG9nLnNvCisKKyMgUHJpbnRzIHRoZSBtb3RkIHVwb24gc3VjY2VzZnVsIGxvZ2luCisjIChSZXBsYWNlcyB0aGUgYE1PVERfRklMRScgb3B0aW9uIGluIGxvZ2luLmRlZnMpCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21vdGQuc28KKworIyBQcmludHMgdGhlIHN0YXR1cyBvZiB0aGUgdXNlcidzIG1haWxib3ggdXBvbiBzdWNjZXNmdWwgbG9naW4KKyMgKFJlcGxhY2VzIHRoZSBgTUFJTF9DSEVDS19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKS4gCisjCisjIFRoaXMgYWxzbyBkZWZpbmVzIHRoZSBNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlCisjIEhvd2V2ZXIsIHVzZXJkZWwgYWxzbyBuZWVkcyBNQUlMX0RJUiBhbmQgTUFJTF9GSUxFIHZhcmlhYmxlcworIyBpbiAvZXRjL2xvZ2luLmRlZnMgdG8gbWFrZSBzdXJlIHRoYXQgcmVtb3ZpbmcgYSB1c2VyIAorIyBhbHNvIHJlbW92ZXMgdGhlIHVzZXIncyBtYWlsIHNwb29sIGZpbGUuCisjIFNlZSBjb21tZW50cyBpbiAvZXRjL2xvZ2luLmRlZnMKK3Nlc3Npb24gICAgb3B0aW9uYWwgICBwYW1fbWFpbC5zbyBzdGFuZGFyZAorCisjIFN0YW5kYXJkIFVuKnggYWNjb3VudCBhbmQgc2Vzc2lvbgorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL25ld3VzZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTNkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL25ld3VzZXJzCkBAIC0wLDAgKzEsNCBAQAorIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyAnbmV3dXNlcnMnIHNlcnZpY2UKKyMKKworcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvcGFzc3dkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzQ5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZApAQCAtMCwwICsxLDUgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYHBhc3N3ZCcgc2VydmljZQorIworCitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3N1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTkwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3N1CkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYHN1JyBzZXJ2aWNlCisjCisKKyMgVGhpcyBhbGxvd3Mgcm9vdCB0byBzdSB3aXRob3V0IHBhc3N3b3JkcyAobm9ybWFsIG9wZXJhdGlvbikKK2F1dGggICAgICAgc3VmZmljaWVudCBwYW1fcm9vdG9rLnNvCisKKyMgVW5jb21tZW50IHRoaXMgdG8gZm9yY2UgdXNlcnMgdG8gYmUgYSBtZW1iZXIgb2YgZ3JvdXAgcm9vdAorIyBiZWZvcmUgdGhleSBjYW4gdXNlIGBzdScuIFlvdSBjYW4gYWxzbyBhZGQgImdyb3VwPWZvbyIKKyMgdG8gdGhlIGVuZCBvZiB0aGlzIGxpbmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgZ3JvdXAgb3RoZXIKKyMgdGhhbiB0aGUgZGVmYXVsdCAicm9vdCIgKGJ1dCB0aGlzIG1heSBoYXZlIHNpZGUgZWZmZWN0IG9mCisjIGRlbnlpbmcgInJvb3QiIHVzZXIsIHVubGVzcyBzaGUncyBhIG1lbWJlciBvZiAiZm9vIiBvciBleHBsaWNpdGx5CisjIHBlcm1pdHRlZCBlYXJsaWVyIGJ5IGUuZy4gInN1ZmZpY2llbnQgcGFtX3Jvb3Rvay5zbyIpLgorIyAoUmVwbGFjZXMgdGhlIGBTVV9XSEVFTF9PTkxZJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKQorIyBhdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3doZWVsLnNvCisKKyMgVW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgd2hlZWwgbWVtYmVycyB0byBiZSBhYmxlIHRvCisjIHN1IHdpdGhvdXQgYSBwYXNzd29yZC4KKyMgYXV0aCAgICAgICBzdWZmaWNpZW50IHBhbV93aGVlbC5zbyB0cnVzdAorCisjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IG1lbWJlcnMgb2YgYSBzcGVjaWZpYyBncm91cCB0byBub3QKKyMgYmUgYWxsb3dlZCB0byB1c2Ugc3UgYXQgYWxsLgorIyBhdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3doZWVsLnNvIGRlbnkgZ3JvdXA9bm9zdQorCisjIFVuY29tbWVudCBhbmQgZWRpdCAvZXRjL3NlY3VyaXR5L3RpbWUuY29uZiBpZiB5b3UgbmVlZCB0byBzZXQKKyMgdGltZSByZXN0cmFpbnN0IG9uIHN1IHVzYWdlLgorIyAoUmVwbGFjZXMgdGhlIGBQT1JUVElNRV9DSEVDS1NfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcworIyBhcyB3ZWxsIGFzIC9ldGMvcG9ydHRpbWUpCisjIGFjY291bnQgICAgcmVxdWlzaXRlICBwYW1fdGltZS5zbworCisjIFRoaXMgbW9kdWxlIHBhcnNlcyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZpbGUocykKKyMgYW5kIGFsc28gYWxsb3dzIHlvdSB0byB1c2UgYW4gZXh0ZW5kZWQgY29uZmlnCisjIGZpbGUgL2V0Yy9zZWN1cml0eS9wYW1fZW52LmNvbmYuCisjIAorIyBwYXJzaW5nIC9ldGMvZW52aXJvbm1lbnQgbmVlZHMgInJlYWRlbnY9MSIKK3Nlc3Npb24gICAgICAgcmVxdWlyZWQgICBwYW1fZW52LnNvIHJlYWRlbnY9MQorCisjIERlZmluZXMgdGhlIE1BSUwgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgSG93ZXZlciwgdXNlcmRlbCBhbHNvIG5lZWRzIE1BSUxfRElSIGFuZCBNQUlMX0ZJTEUgdmFyaWFibGVzCisjIGluIC9ldGMvbG9naW4uZGVmcyB0byBtYWtlIHN1cmUgdGhhdCByZW1vdmluZyBhIHVzZXIgCisjIGFsc28gcmVtb3ZlcyB0aGUgdXNlcidzIG1haWwgc3Bvb2wgZmlsZS4KKyMgU2VlIGNvbW1lbnRzIGluIC9ldGMvbG9naW4uZGVmcworIworIyAibm9wZW4iIHN0YW5kcyB0byBhdm9pZCByZXBvcnRpbmcgbmV3IG1haWwgd2hlbiBzdSdpbmcgdG8gYW5vdGhlciB1c2VyCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21haWwuc28gbm9wZW4KKworIyBTZXRzIHVwIHVzZXIgbGltaXRzLCBwbGVhc2UgdW5jb21tZW50IGFuZCByZWFkIC9ldGMvc2VjdXJpdHkvbGltaXRzLmNvbmYKKyMgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyMgKFJlcGxhY2VzIHRoZSB1c2Ugb2YgL2V0Yy9saW1pdHMgaW4gb2xkIGxvZ2luKQorIyBzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbworCisjIFRoZSBzdGFuZGFyZCBVbml4IGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMsIHVzZWQgd2l0aAorIyBOSVMgKG1hbiBuc3N3aXRjaCkgYXMgd2VsbCBhcyBub3JtYWwgL2V0Yy9wYXNzd2QgYW5kCisjIC9ldGMvc2hhZG93IGVudHJpZXMuCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2VjdXJldHR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTM0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eQpAQCAtMCwwICsxLDIzOCBAQAorIyAvZXRjL3NlY3VyZXR0eTogbGlzdCBvZiB0ZXJtaW5hbHMgb24gd2hpY2ggcm9vdCBpcyBhbGxvd2VkIHRvIGxvZ2luLgorIyBTZWUgc2VjdXJldHR5KDUpIGFuZCBsb2dpbigxKS4KK2NvbnNvbGUKKworIyBTdGFuZGFyZCBzZXJpYWwgcG9ydHMKK3R0eVMwCit0dHlTMQordHR5UzIKK3R0eVMzCisKKyMgQVJNIEFNQkEgU29DcwordHR5QU0wCit0dHlBTTEKK3R0eUFNMgordHR5QU0zCit0dHlBTUEwCit0dHlBTUExCit0dHlBTUEyCit0dHlBTUEzCisKKyMgUUNPTSBTb2NzCit0dHlIU0wwCit0dHlIU0wxCit0dHlIU0wyCit0dHlIU0wzCit0dHlNU00wCit0dHlNU00xCit0dHlNU00yCisKKyMgU2Ftc3VuZyBBUk0gU29DcwordHR5U0FDMAordHR5U0FDMQordHR5U0FDMgordHR5U0FDMworCisjIFNUTSBTb0NzCit0dHlBUzAKK3R0eUFTMQordHR5QVMyCit0dHlBUzMKKworIyBUSSBPTUFQIFNvQ3MKK3R0eU8wCit0dHlPMQordHR5TzIKK3R0eU8zCisKKyMgWGlsaW54IFp5bnEgU29DCit0dHlQUzAKK3R0eVBTMQorCisjIFVTQiBkb25nbGVzCit0dHlVU0IwCit0dHlVU0IxCit0dHlVU0IyCisKKyMgVVNCIHNlcmlhbCBnYWRnZXQKK3R0eUdTMAorCisjIFBvd2VyTWFjCit0dHlQWjAKK3R0eVBaMQordHR5UFoyCit0dHlQWjMKKworIyBFbWJlZGRlZCBNUEMgcGxhdGZvcm1zCit0dHlQU0MwCit0dHlQU0MxCit0dHlQU0MyCit0dHlQU0MzCit0dHlQU0M0Cit0dHlQU0M1CisKKyMgUEEtUklTQyBtdXggcG9ydHMKK3R0eUIwCit0dHlCMQorCisjIFN0YW5kYXJkIGh5cGVydmlzb3IgdmlydHVhbCBjb25zb2xlCitodmMwCisKKyMgT2xkc3R5bGUgWGVuIGNvbnNvbGUKK3h2YzAKKworIyBTdGFuZGFyZCBjb25zb2xlcwordHR5MQordHR5MgordHR5MwordHR5NAordHR5NQordHR5NgordHR5NwordHR5OAordHR5OQordHR5MTAKK3R0eTExCit0dHkxMgordHR5MTMKK3R0eTE0Cit0dHkxNQordHR5MTYKK3R0eTE3Cit0dHkxOAordHR5MTkKK3R0eTIwCit0dHkyMQordHR5MjIKK3R0eTIzCit0dHkyNAordHR5MjUKK3R0eTI2Cit0dHkyNwordHR5MjgKK3R0eTI5Cit0dHkzMAordHR5MzEKK3R0eTMyCit0dHkzMwordHR5MzQKK3R0eTM1Cit0dHkzNgordHR5MzcKK3R0eTM4Cit0dHkzOQordHR5NDAKK3R0eTQxCit0dHk0MgordHR5NDMKK3R0eTQ0Cit0dHk0NQordHR5NDYKK3R0eTQ3Cit0dHk0OAordHR5NDkKK3R0eTUwCit0dHk1MQordHR5NTIKK3R0eTUzCit0dHk1NAordHR5NTUKK3R0eTU2Cit0dHk1NwordHR5NTgKK3R0eTU5Cit0dHk2MAordHR5NjEKK3R0eTYyCit0dHk2MworCisjIExvY2FsIFggZGlzcGxheXMgKGFsbG93cyBlbXB0eSBwYXNzd29yZHMgd2l0aCBwYW1fdW5peCdzIG51bGxva19zZWN1cmUpCitwdHMvMAorcHRzLzEKK3B0cy8yCitwdHMvMworCisjIEVtYmVkZGVkIEZyZWVzY2FsZSBpLk1YIHBvcnRzCit0dHlteGMwCit0dHlteGMxCit0dHlteGMyCit0dHlteGMzCit0dHlteGM0Cit0dHlteGM1CisKKyMgRnJlZXNjYWxlIGxwdWFydCBwb3J0cwordHR5TFAwCit0dHlMUDEKK3R0eUxQMgordHR5TFAzCit0dHlMUDQKK3R0eUxQNQorCisjIFN0YW5kYXJkIHNlcmlhbCBwb3J0cywgd2l0aCBkZXZmcwordHRzLzAKK3R0cy8xCisKKyMgU3RhbmRhcmQgY29uc29sZXMsIHdpdGggZGV2ZnMKK3ZjLzEKK3ZjLzIKK3ZjLzMKK3ZjLzQKK3ZjLzUKK3ZjLzYKK3ZjLzcKK3ZjLzgKK3ZjLzkKK3ZjLzEwCit2Yy8xMQordmMvMTIKK3ZjLzEzCit2Yy8xNAordmMvMTUKK3ZjLzE2Cit2Yy8xNwordmMvMTgKK3ZjLzE5Cit2Yy8yMAordmMvMjEKK3ZjLzIyCit2Yy8yMwordmMvMjQKK3ZjLzI1Cit2Yy8yNgordmMvMjcKK3ZjLzI4Cit2Yy8yOQordmMvMzAKK3ZjLzMxCit2Yy8zMgordmMvMzMKK3ZjLzM0Cit2Yy8zNQordmMvMzYKK3ZjLzM3Cit2Yy8zOAordmMvMzkKK3ZjLzQwCit2Yy80MQordmMvNDIKK3ZjLzQzCit2Yy80NAordmMvNDUKK3ZjLzQ2Cit2Yy80NwordmMvNDgKK3ZjLzQ5Cit2Yy81MAordmMvNTEKK3ZjLzUyCit2Yy81MwordmMvNTQKK3ZjLzU1Cit2Yy81NgordmMvNTcKK3ZjLzU4Cit2Yy81OQordmMvNjAKK3ZjLzYxCit2Yy82MgordmMvNjMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctNC4xLjMtZG90cy1pbi11c2VybmFtZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiYjBhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKKyMgY29tbWl0IG1lc3NhZ2UgY29waWVkIGZyb20gb3BlbmVtYmVkZGVkOgorIyAgICBjb21taXQgMjQ2YzgwNjM3YjEzNWYzYTExM2QzMTliMTYzNDIyZjk4MTc0ZWU2YworIyAgICBBdXRob3I6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjICAgIERhdGU6ICAgV2VkIEp1biA5IDEzOjM3OjAzIDIwMTAgLTA3MDAKKyMKKyMgICAgc2hhZG93LTQuMS40LjI6IEFkZCBwYXRjaGVzIHRvIHN1cHBvcnQgZG90cyBpbiBsb2dpbiBpZC4KKyMgICAgCisjICAgIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjCisjIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IHNoYWRvdy00LjEuNC4yL2xpYm1pc2MvY2hrbmFtZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2hhZG93LTQuMS40LjIub3JpZy9saWJtaXNjL2Noa25hbWUuYwkyMDA5LTA0LTI4IDEyOjE0OjA0LjAwMDAwMDAwMCAtMDcwMAorKysrIHNoYWRvdy00LjEuNC4yL2xpYm1pc2MvY2hrbmFtZS5jCTIwMTAtMDYtMDMgMTc6NDM6MjAuNjM4OTczODU3IC0wNzAwCitAQCAtNjEsNiArNjEsNyBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9uYW1lIChjb25zdCBjaGFyICpuCisgCQkgICAgICAoICgnMCcgPD0gKm5hbWUpICYmICgnOScgPj0gKm5hbWUpICkgfHwKKyAJCSAgICAgICgnXycgPT0gKm5hbWUpIHx8CisgCQkgICAgICAoJy0nID09ICpuYW1lKSB8fAorKwkJICAgICAgKCcuJyA9PSAqbmFtZSkgfHwKKyAJCSAgICAgICggKCckJyA9PSAqbmFtZSkgJiYgKCdcMCcgPT0gKihuYW1lICsgMSkpICkKKyAJCSAgICAgKSkgeworIAkJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWY4MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK1RoZSBzeXN0ZW0tYXV0aCBpbiB0aGUgY29uZmlndXJlIGZpbGVzIGlzIGZyb20gRmVkb3JhIHdoaWNoIHB1dCBhbGwgdGhlIDQgcGFtIHR5cGUgcnVsZXMKK2luIG9uZSBmaWxlLgorSW4geW9jdG8gaXQgb2JleSB0aGUgd2F5IHdpdGggRGViaWFuL1VidW50dSwgYW5kIHRoZSBuYW1lcyBhcmUgY29tbW9uLWF1dGgsIGNvbW1vbi1hY2NvdW50LAorY29tbW9uLXBhc3N3b3JkIGFuZCBjb21tb24tc2Vzc2lvbi4KK1NvIHVwZGF0ZSB0aGVtIHdpdGggb2Ugd2F5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGFnZSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hhZ2UKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGFnZQkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGFnZQkyMDExLTA3LTIwIDE5OjAzOjA4Ljk2NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hncGFzc3dkIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGdwYXNzd2QKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGdwYXNzd2QJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hncGFzc3dkCTIwMTEtMDctMjAgMTk6MDM6MjYuNTQ0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGFkZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBhZGQKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGFkZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cGFkZAkyMDExLTA3LTIwIDE5OjA0OjA4LjEyNDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBkZWwgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwZGVsCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBkZWwJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBkZWwJMjAxMS0wNy0yMCAxOTowNDoyNi4xMTQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbWVtcyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtZW1zCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtZW1zCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbWVtcwkyMDExLTA3LTIwIDE5OjA0OjM1LjA3NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtb2Qgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbW9kCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtb2QJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtb2QJMjAxMS0wNy0yMCAxOTowNDo0NC44NjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJhZGQgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJhZGQKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyYWRkCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJhZGQJMjAxMS0wNy0yMCAxOTowNzoyNi4yNDQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJkZWwgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJkZWwKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyZGVsCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJkZWwJMjAxMS0wNy0yMCAxOTowNzozNS43MzQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJtb2Qgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJtb2QKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VybW9kCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJtb2QJMjAxMS0wNy0yMCAxOTowNzo0Mi4wMjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGMxNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3VzZXJtb2Q6IGZpeCBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggc3ViaWRzIGRpc2FibGVkCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy91c2VybW9kLmMgfCAgICAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VybW9kLmMgYi9zcmMvdXNlcm1vZC5jCitpbmRleCBlN2Q0MzUxLi42ODViNTBhIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJtb2QuYworKysrIGIvc3JjL3VzZXJtb2QuYworQEAgLTEzNjAsNyArMTM2MCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICAgICAgIFByb2csICh1bnNpZ25lZCBsb25nKSB1c2VyX25ld2lkKTsKKyAJCWV4aXQgKEVfVUlEX0lOX1VTRSk7CisgCX0KKy0KKysjaWZkZWYgRU5BQkxFX1NVQklEUworIAlpZiAoICAgKHZmbGcgfHwgVmZsZykKKyAJICAgICYmICFpc19zdWJfdWlkKSB7CisgCQlmcHJpbnRmIChzdGRlcnIsCitAQCAtMTM3Niw2ICsxMzc2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgICAgICAgUHJvZywgc3ViX2dpZF9kYm5hbWUgKCksICItdyIsICItVyIpOworIAkJZXhpdCAoRV9VU0FHRSk7CisgCX0KKysjZW5kaWYKKyB9CisgCisgLyoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4Zjg4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlByb3ZpZGVyIG9mIHRoZSBtYWNoaW5lIHNwZWNpZmljIHNlY3VyZXR0eSBmaWxlIgorU0VDVElPTiA9ICJiYXNlIHV0aWxzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NlY3VyZXR0eSIKKworUyA9ICIke1dPUktESVJ9IgorCisjIFNpbmNlIFNFUklBTF9DT05TT0xFUyBpcyBsaWtlbHkgdG8gYmUgc2V0IGZyb20gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworZG9faW5zdGFsbCAoKSB7CisJIyBFbnN1cmUgd2UgYWRkIGEgc3VpdGFibGUgc2VjdXJldHR5IGZpbGUgdG8gdGhlIHBhY2thZ2UgdGhhdCBoYXMKKwkjIG1vc3QgY29tbW9uIGVtYmVkZGVkIFRUWXMgZGVmaW5lZC4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNDAwICR7V09SS0RJUn0vc2VjdXJldHR5ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eQorCWlmIFsgISAteiAiJHtTRVJJQUxfQ09OU09MRVN9IiBdOyB0aGVuCisJCSMgT3VyIFNFUklBTF9DT05TT0xFUyBjb250YWlucyBhIGJhdWQgcmF0ZSBhbmQgc29tZXRpbWVzIGV4dHJhCisJCSMgb3B0aW9ucyBhcyB3ZWxsLiBUaGUgZm9sbG93aW5nIHBlYXJsIDopIHRha2VzIHRoYXQgYW5kIGNvbnZlcnRzCisJCSMgaXQgaW50byBuZXdsaW5lLXNlcGFyYXRlZCB0dHkncyBhbmQgYXBwZW5kcyB0aGVtIGludG8KKwkJIyBzZWN1cmV0dHkuIFNvIGlmIGEgbWFjaGluZSBoYXMgYSB3ZWlyZCBsb29raW5nIGNvbnNvbGUgZGV2aWNlCisJCSMgbm9kZSAoZS5nLiB0dHlBTUEwKSB0aGF0IHNlY3VyZXR0eSBkb2VzIG5vdCBrbm93LCBpdCB3aWxsIGdldAorCQkjIGFwcGVuZGVkIHRvIHNlY3VyZXR0eSBhbmQgcm9vdCBsb2dpbnMgd2lsbCBiZSBhbGxvd2VkIG9uIHRoYXQKKwkJIyBjb25zb2xlLgorCQl0bXA9IiR7U0VSSUFMX0NPTlNPTEVTfSIKKwkJZm9yIGVudHJ5IGluICR0bXAgOyBkbworCQkJdHR5ZGV2PWBlY2hvICIkZW50cnkiIHwgc2VkIC1lICdzL15bMC05XSpcOy8vJyAtZSAncy9cOy4qLy8nYAorCQkJaWYgISBncmVwIC1xICR0dHlkZXYgJHtEfSR7c3lzY29uZmRpcn0vc2VjdXJldHR5OyB0aGVuCisJCQkJZWNobyAkdHR5ZGV2ID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eQorCQkJZmkKKwkJZG9uZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTc1NjljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIlNoYWRvdyB1dGlscyByZXF1aXJlbWVudHMgZm9yIHVzZXJhZGQuYmJjbGFzcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wa2ctc2hhZG93LmFsaW90aC5kZWJpYW4ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3RyYWNrZXIvP2dyb3VwX2lkPTMwNTgwIgorU0VDVElPTiA9ICJiYXNlIHV0aWxzIgorTElDRU5TRSA9ICJCU0QgfCBBcnRpc3RpYy0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290O21kNT0yNWUyZjJkZTRkZmM4Zjk2NmFjNWNkZmNlNDVjZDdkNSIKKworREVQRU5EUyA9ICJiYXNlLXBhc3N3ZCIKKworUFIgPSAicjMiCisKKyMgVGhlIHNvbGUgcHVycG9zZSBvZiB0aGlzIHJlY2lwZSBpcyB0byBwcm92aWRlIHRoZSAvZXRjL2xvZ2luLmRlZnMKKyMgZmlsZSBmb3IgdGhlIHRhcmdldCBzeXNyb290IC0gbmVlZGVkIHNvIHRoZSBzaGFkb3ctbmF0aXZlIHV0aWxpdGllcworIyBjYW4gYWRkIGN1c3RvbSB1c2Vycy9ncm91cHMgZm9yIHJlY2lwZXMgdGhhdCB1c2UgaW5oZXJpdCB1c2VyYWRkLgorU1JDX1VSSSA9ICJmaWxlOi8vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCIKKworU1JDX1VSSVttZDVzdW1dID0gImI4NjA4ZDgyOTRhYzg4OTc0ZjI3YjIwZjk5MWMwZTc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzM2Y1YmI0ZWEwYzg4YzU1ZjM2NDJjOTdmOWQyNWNiZWY3NGY4MmUwYjRjZjhkNTRlN2FkNmY5ZjljYWE3NzgiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtcCAtbSA3NTUgJHtTfS9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290ICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKK30KKworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KK30KKworIyBkb24ndCBjcmVhdGUgYW55IHBhY2thZ2VzCisjIG90aGVyd2lzZTogZGJ1cy1kZXYgZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdC1kZXYgd2hpY2ggZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdCAKKyMgYW5kIHRoaXMgaGFzIGFub3RoZXIgY29weSBvZiAvZXRjL2xvZ2luLmRlZnMgYWxyZWFkeSBwcm92aWRlZCBieSBzaGFkb3cKK1BBQ0tBR0VTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzEzZmZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCkBAIC0wLDAgKzEsMTk2IEBACitTVU1NQVJZID0gIlRvb2xzIHRvIGNoYW5nZSBhbmQgYWRtaW5pc3RlciBwYXNzd29yZCBhbmQgZ3JvdXAgZGF0YSIKK0hPTUVQQUdFID0gImh0dHA6Ly9wa2ctc2hhZG93LmFsaW90aC5kZWJpYW4ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3RyYWNrZXIvP2dyb3VwX2lkPTMwNTgwIgorU0VDVElPTiA9ICJiYXNlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QgfCBBcnRpc3RpYy0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZDgwZmYxYzJiNDA4NDNjZjU3NjhlNTIyOWNmMTZlNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGFzc3dkLmM7YmVnaW5saW5lPTg7ZW5kbGluZT0zMDttZDU9ZDgzODg4ZWExNGFlNjE5NTE5ODJkNzcxMjU5NDc2NjEiCisKK0RFUEVORFMgPSAic2hhZG93LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtnLXNoYWRvdy5hbGlvdGguZGViaWFuLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luX2RlZnNfcGFtLnNlZCBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtc3lzbG9nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsbG93LWZvci1zZXR0aW5nLXBhc3N3b3JkLWluLWNsZWFyLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZXJhZGQuYy1jcmVhdGUtcGFyZW50LWRpcmVjdG9yaWVzLXdoZW4tbmVjZXNzYXJ5LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXN5c2xvZy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZmFmZTdkNDk2MjY4MmQzMWI1ZWJhNjVkYmE0ZmM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNiMDg5M2QxNDc2NzY2ODY4Y2Q4ODkyMGY0ZjEyMzFjNDc5NTY1MmFhNDA3NTY5ZmFmZjgwMmJjZGEwZjNkNDEiCisKKyMgQWRkaXRpb25hbCBQb2xpY3kgZmlsZXMgZm9yIFBBTQorUEFNX1NSQ19VUkkgPSAiZmlsZTovL3BhbS5kL2NoZm4gXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL2NocGFzc3dkIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jaHNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9sb2dpbiBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvbmV3dXNlcnMgXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL3Bhc3N3ZCBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvc3UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtYXVkaXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliY3JhY2sgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc2VsaW51eCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1ncm91cC1uYW1lLW1heC1sZW5ndGg9MjQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdWJvcmRpbmF0ZS1pZHM9eWVzIFwKKyAgICAgICAgICAgICAgICAgJHtOU0NET1BUfSIKKworTlNDRE9QVCA9ICIiCitOU0NET1BUX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQtbnNjZCIKK05TQ0RPUFRfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aG91dC1uc2NkIgorTlNDRE9QVF9saWJjLXVjbGliYyA9ICIgLS13aXRob3V0LW5zY2QiCitOU0NET1BUX2xpYmMtZ2xpYmMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXNwYXduJywgJy0td2l0aC1uc2NkJywgJy0td2l0aG91dC1uc2NkJywgZCl9IgorICAgICAgICAgIAorUEFNX1BMVUdJTlMgPSAibGlicGFtLXJ1bnRpbWUgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1mYWlsZGVsYXkgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1zZWN1cmV0dHkgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1ub2xvZ2luIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZW52IFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZ3JvdXAgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1saW1pdHMgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1sYXN0bG9nIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbW90ZCBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLW1haWwgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1zaGVsbHMgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1yb290b2siCisKK1BBQ0tBR0VDT05GSUcgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLXdpdGgtbGlicGFtLC0td2l0aG91dC1saWJwYW0sbGlicGFtLCR7UEFNX1BMVUdJTlN9IgorUEFDS0FHRUNPTkZJR1thdHRyXSA9ICItLXdpdGgtYXR0ciwtLXdpdGhvdXQtYXR0cixhdHRyIgorUEFDS0FHRUNPTkZJR1thY2xdID0gIi0td2l0aC1hY2wsLS13aXRob3V0LWFjbCxhY2wiCisKK1JERVBFTkRTXyR7UE59ID0gInNoYWRvdy1zZWN1cmV0dHkgXAorICAgICAgICAgICAgICAgICAgYmFzZS1wYXNzd2QgXAorICAgICAgICAgICAgICAgICAgdXRpbC1saW51eC1zdWxvZ2luIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBERVNURElSPSIke0R9IiBzYmluZGlyPSIke2Jhc2Vfc2JpbmRpcn0iIHVzYmluZGlyPSIke3NiaW5kaXJ9IiBpbnN0YWxsCisKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorCisJIyBFbmFibGUgQ1JFQVRFX0hPTUUgYnkgZGVmYXVsdC4KKwlzZWQgLWkgJ3MvI0NSRUFURV9IT01FL0NSRUFURV9IT01FL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgQXMgd2UgYXJlIG9uIGFuIGVtYmVkZGVkIHN5c3RlbSwgZW5zdXJlIHRoZSB1c2VycyBtYWlsYm94IGlzIGluCisJIyB+LyBub3QgL3Zhci9zcG9vbC9tYWlsIGJ5IGRlZmF1bHQsIGFzIHdobyBrbm93cyB3aGVyZSBvciBob3cgYmlnCisJIyAvdmFyIGlzLiBUaGUgc3lzdGVtIE1EQSB3aWxsIHNldCB0aGlzIGxhdGVyIGFueXdheS4KKwlzZWQgLWkgJ3MvTUFJTF9ESVIvI01BSUxfRElSL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlzZWQgLWkgJ3MvI01BSUxfRklMRS9NQUlMX0ZJTEUvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBEaXNhYmxlIGNoZWNraW5nIGVtYWlscy4KKwlzZWQgLWkgJ3MvTUFJTF9DSEVDS19FTkFCLyNNQUlMX0NIRUNLX0VOQUIvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBDb21tZW50IG91dCBTVV9OQU1FIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggYnVzeWJveAorCSMgU2VlIEJ1ZyM1MzU5IGFuZCBCdWcjNzE3MworCXNlZCAtaSAnczpeU1VfTkFNRTojU1VfTkFNRTpnJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIFVzZSBwcm9wZXIgZW5jcnlwdGlvbiBmb3IgcGFzc3dvcmRzCisJc2VkIC1pICdzL14jRU5DUllQVF9NRVRIT0QuKiQvRU5DUllQVF9NRVRIT0QgU0hBNTEyLycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBOb3cgd2UgZG9uJ3QgaGF2ZSBhIG1haWwgc3lzdGVtLiBEaXNhYmxlIG1haWwgY3JlYXRpb24gZm9yIG5vdy4KKwlzZWQgLWkgJ3M6L2Jpbi9iYXNoOi9iaW4vc2g6ZycgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2VyYWRkCisJc2VkIC1pICcvXkNSRUFURV9NQUlMX1NQT09MLyBzOl46IzonICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNlcmFkZAorCisJIyBVc2UgdXNlcnMgZ3JvdXAgYnkgZGVmYXVsdAorCXNlZCAtaSAncyxeR1JPVVA9MTAwMCxHUk9VUD0xMDAsZycgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2VyYWRkCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGltYWdlIGhhcyBhcyBhIC92YXIvc3Bvb2wvbWFpbCBkaXIgc28gc2hhZG93IGNhbgorCSMgcHV0IG1haWxib3hlcyB0aGVyZSBpZiB0aGUgdXNlciByZWNvbmZpZ3VyZXMgc2hhZG93IHRvIGl0cworCSMgZGVmYXVsdHMgKHNlZSBzZWQgYmVsb3cpLgorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvbWFpbAorCisJaWYgWyAtZSAke1dPUktESVJ9L3BhbS5kIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcGFtLmQvKiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwkJIyBSZW1vdmUgZGVmYXVsdHMgdGhhdCBhcmUgbm90IHVzZWQgd2hlbiBzdXBwb3J0aW5nIFBBTS4KKwkJc2VkIC1pIC1mICR7V09SS0RJUn0vbG9naW5fZGVmc19wYW0uc2VkICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9ICR7RH0ke2Jhc2VfYmluZGlyfSAKKworCSMgTW92ZSBiaW5hcmllcyB0byB0aGUgbG9jYXRpb25zIHdlIHdhbnQKKwlybSAke0R9JHtzYmluZGlyfS92aWdyCisJbG4gLXNmIHZpcHcuJHtCUE59ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vdmlncgorCWlmIFsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7c2JpbmRpcn0vdmlwdyAke0R9JHtiYXNlX3NiaW5kaXJ9L3ZpcHcKKwlmaQorCWlmIFsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdOyB0aGVuCisJCW12ICR7RH0ke2JpbmRpcn0vbG9naW4gJHtEfSR7YmFzZV9iaW5kaXJ9L2xvZ2luCisJCW12ICR7RH0ke2JpbmRpcn0vc3UgJHtEfSR7YmFzZV9iaW5kaXJ9L3N1CisJZmkKKworCSMgSGFuZGxlIGxpbmsgcHJvcGVybHkgYWZ0ZXIgcmVuYW1lLCBvdGhlcndpc2UgbWlzc2luZyBmaWxlcyB3b3VsZAorCSMgbGVhZCBycG0gZmFpbGVkIGRlcGVuZGVuY2llcy4KKwlsbiAtc2YgbmV3Z3JwLiR7QlBOfSAke0R9JHtiaW5kaXJ9L3NnCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1iYXNlIgorRklMRVNfJHtQTn0tYmFzZSA9ICJcCisgICAgJHtiYXNlX2JpbmRpcn0vbG9naW4uc2hhZG93IFwKKyAgICAke2Jhc2VfYmluZGlyfS9zdS5zaGFkb3cgXAorICAgICR7YmluZGlyfS9zZyBcCisgICAgJHtiaW5kaXJ9L25ld2dycC5zaGFkb3cgXAorICAgICR7YmluZGlyfS9ncm91cHMuc2hhZG93IFwKKyAgICAke3N5c2NvbmZkaXJ9L3BhbS5kL2xvZ2luIFwKKyAgICAke3N5c2NvbmZkaXJ9L3BhbS5kL3N1IFwKKyAgICAke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMgXAorIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWJhc2UiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhc3N3ZCBjaGZuIGNoc2ggY2hwYXNzd2QgdmlwdyB2aWdyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2NocGFzc3dkXSA9ICIke3NiaW5kaXJ9L2NocGFzc3dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3ZpcHddID0gIiR7YmFzZV9zYmluZGlyfS92aXB3IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3ZpZ3JdID0gIiR7YmFzZV9zYmluZGlyfS92aWdyIgorCitBTFRFUk5BVElWRV8ke1BOfS1iYXNlID0gIm5ld2dycCBncm91cHMgbG9naW4gc3UiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbG9naW5dID0gIiR7YmFzZV9iaW5kaXJ9L2xvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1XSA9ICIke2Jhc2VfYmluZGlyfS9zdSIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInBhc3N3ZC41IGdldHNwbmFtLjMgZ3JvdXBzLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JvdXBzLjFdID0gIiR7bWFuZGlyfS9tYW4xL2dyb3Vwcy4xIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkgIHJvb3Rhcmc9Ii0tcm9vdCAkRCIKKwllbHNlCisJICByb290YXJnPSIiCisJZmkKKworCXB3Y29udiAkcm9vdGFyZyB8fCBleGl0IDEKKwlncnBjb252ICRyb290YXJnIHx8IGV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvd180LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc1Y2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBzaGFkb3cuaW5jCisKKyMgQnVpbGQgZmFsc2VseSBhc3N1bWVzIHRoYXQgaWYgLS1lbmFibGUtbGlicGFtIGlzIHNldCwgd2UgZG9uJ3QgbmVlZCB0byBsaW5rIGFnYWluc3QKKyMgbGliY3J5cHQuIFRoaXMgYnJlYWtzIGNoc2guCitCVUlMRF9MREZMQUdTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNyeXB0JywgICctbGNyeXB0JywgJycsIGQpLCAnJywgZCl9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ViZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDk2ZWI3ZTI5ODIyMTUxODIzYTY2YTFlYjU5ZjFmYTRhZWFkNWFlMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAwNjozMzoyMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggIGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ3Bvc2l4X2Nsb3NlJworCitFeHBvc2VkIHdoaWxlIGNvbXBpbGluZyBvbiBtdXNsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL3NscG9zaW8uYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2xwb3Npby5jIGIvc3JjL3NscG9zaW8uYworaW5kZXggOWNlOTY5Ny4uOWZmOWJmZSAxMDA2NDQKKy0tLSBhL3NyYy9zbHBvc2lvLmMKKysrKyBiL3NyYy9zbHBvc2lvLmMKK0BAIC0zNjMsNyArMzYzLDcgQEAgc3RhdGljIGludCBwb3NpeF9jbG9zZV9mZCAoaW50ICpmZCkKKyAgICByZXR1cm4gMDsKKyB9CisgCistc3RhdGljIGludCBwb3NpeF9jbG9zZSAoU0xGaWxlX0ZEX1R5cGUgKmYpCisrc3RhdGljIGludCBwb3NpeF9jbG9zZXggKFNMRmlsZV9GRF9UeXBlICpmKQorIHsKKyAgICBpbnQgc3RhdHVzID0gZG9fY2xvc2UgKGYpOworIAorQEAgLTEwMDEsNyArMTAwMSw3IEBAIHN0YXRpYyBTTGFuZ19JbnRyaW5fRnVuX1R5cGUgRmRfTmFtZV9UYWJsZSBbXSA9CisgICAgTUFLRV9JTlRSSU5TSUNfMigid3JpdGUiLCBwb3NpeF93cml0ZSwgViwgRiwgQiksCisgICAgTUFLRV9JTlRSSU5TSUNfMSgiZHVwX2ZkIiwgcG9zaXhfZHVwLCBWLCBGKSwKKyAgICBNQUtFX0lOVFJJTlNJQ18yKCJkdXAyX2ZkIiwgcG9zaXhfZHVwMiwgSSwgRiwgSSksCistICAgTUFLRV9JTlRSSU5TSUNfMSgiY2xvc2UiLCBwb3NpeF9jbG9zZSwgSSwgRiksCisrICAgTUFLRV9JTlRSSU5TSUNfMSgiY2xvc2UiLCBwb3NpeF9jbG9zZXgsIEksIEYpLAorICAgIE1BS0VfSU5UUklOU0lDXzEoIl9jbG9zZSIsIHBvc2l4X2Nsb3NlX2ZkLCBJLCBJKSwKKyAjaWYgZGVmaW5lZChUVFlOQU1FX1IpCisgICAgTUFLRV9JTlRSSU5TSUNfMCgidHR5bmFtZSIsIHBvc2l4X3R0eW5hbWUsIFYpLAorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhMWZmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDIxOCBAQAorc2xhbmc6IGNoYW5nZSBjaGFyIHR5cGUgdG8gc2lnbmVkIGNoYXIgaW4gbWFjcm9zCisKK0MgbGFuZ3VhZ2UgaGFzIDMgZGlzdGluY3QgY2hhciB0eXBlczoKKyAgICAgICAgIGNoYXIKKyAgICAgICAgIHVuc2lnbmVkIGNoYXIKKyAgICAgICAgIHNpZ25lZCBjaGFyCitBIGNoYXIgaGFzIHRoZSBzYW1lIHJhbmdlIG9mIHZhbHVlcyBhcyBzaWduZWQgY2hhciBvbiBYODYsCitidXQgc2FtZSBhcyB1bnNpZ25lZCBjaGFyIG9uIEFSTSB3aGljaCBtYWRlIFNsYW5nJ3MgdHlwZWNhc3QoKQorYW5kIGFycmF5X3NvcnQoKSB1bmFibGUgdG8gd29yayBmb3IgY2hhciB2YWx1ZSBvbiBBUk0sIHNpbmNlCitTbGFuZyBpcyBhc3N1bWluZyAiY2hhciIgYXMgInNpZ25lZCBjaGFyIi4KKworTm93IHdlIGNoYW5nZSAiY2hhciIgYXMgInNpZ25lZCBjaGFyIiBleHBsaWNpdGx5IGluCit1dGlsL21rc2xhcml0aDIuc2wsIGFuZCB1c2UgaXQgdG8gcmVnZW5lcmF0ZSBzcmMvc2xhcml0aDIuaW5jCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvc2xhcml0aDIuaW5jICAgICAgIHwgICA3MiArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCB8ICAgIDIgLQorIDIgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy91dGlsL21rc2xhcml0aDIuc2wKKysrKyBiL3NyYy91dGlsL21rc2xhcml0aDIuc2wKK0BAIC0xLDcgKzEsNyBAQAorICMhL3Vzci9iaW4vZW52IHNsc2gKKyAKKyBwcml2YXRlIHZhcmlhYmxlIENUeXBlcyA9CistICBbImNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKKysgIFsic2lnbmVkIGNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKKyAgICAibG9uZyIsICJ1bnNpZ25lZCBsb25nIiwgImxvbmcgbG9uZyIsICJ1bnNpZ25lZCBsb25nIGxvbmciLAorICAgICJmbG9hdCIsICJkb3VibGUiLCAibG9uZyBkb3VibGUiXTsKKyBwcml2YXRlIHZhcmlhYmxlIElzX0ludF9UeXBlID0KKy0tLSBhL3NyYy9zbGFyaXRoMi5pbmMKKysrKyBiL3NyYy9zbGFyaXRoMi5pbmMKK0BAIC0xLDQzICsxLDQzIEBACisgLyogRE8gTk9UIEVESVQgLS0gdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCAqLworLS8qIC0tLS0tLS0tLS0tLSBjaGFyIC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfY2hhcl90b19jaGFyLGNoYXIsY2hhcikKKysvKiAtLS0tLS0tLS0tLS0gc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLworK0RFRlVOXzEoY29weV9jaGFyX3RvX2NoYXIsc2lnbmVkIGNoYXIsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBjaGFyX3RvX2NoYXIJTlVMTAorICNkZWZpbmUgY29weV9jaGFyX3RvX3VjaGFyCWNvcHlfY2hhcl90b19jaGFyCisgI2RlZmluZSBjaGFyX3RvX3VjaGFyCU5VTEwKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19zaG9ydCxjaGFyLHNob3J0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3Nob3J0LHNpZ25lZCBjaGFyLHNob3J0KQorICNkZWZpbmUgY2hhcl90b19zaG9ydAlOVUxMCistREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LGNoYXIsdW5zaWduZWQgc2hvcnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LHNpZ25lZCBjaGFyLHVuc2lnbmVkIHNob3J0KQorICNkZWZpbmUgY2hhcl90b191c2hvcnQJTlVMTAorLURFRlVOXzEoY29weV9jaGFyX3RvX2ludCxjaGFyLGludCkKKy1ERUZVTl8yKGNoYXJfdG9faW50LGNoYXIsaW50LGNvcHlfY2hhcl90b19pbnQpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCkKKy1ERUZVTl8yKGNoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCxjb3B5X2NoYXJfdG9fdWludCkKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19sb25nLGNoYXIsbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fbG9uZyxjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsY2hhcix1bnNpZ25lZCBsb25nKQorLURFRlVOXzIoY2hhcl90b191bG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcsY29weV9jaGFyX3RvX3Vsb25nKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQpCisrREVGVU5fMihjaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQsY29weV9jaGFyX3RvX2ludCkKKytERUZVTl8xKGNvcHlfY2hhcl90b191aW50LHNpZ25lZCBjaGFyLHVuc2lnbmVkIGludCkKKytERUZVTl8yKGNoYXJfdG9fdWludCxzaWduZWQgY2hhcix1bnNpZ25lZCBpbnQsY29weV9jaGFyX3RvX3VpbnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fbG9uZyxzaWduZWQgY2hhcixsb25nKQorK0RFRlVOXzIoY2hhcl90b19sb25nLHNpZ25lZCBjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZykKKytERUZVTl8yKGNoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyxjb3B5X2NoYXJfdG9fdWxvbmcpCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fbGxvbmcsY2hhcixsb25nIGxvbmcpCistREVGVU5fMihjaGFyX3RvX2xsb25nLGNoYXIsbG9uZyBsb25nLGNvcHlfY2hhcl90b19sbG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b19sbG9uZyxzaWduZWQgY2hhcixsb25nIGxvbmcpCisrREVGVU5fMihjaGFyX3RvX2xsb25nLHNpZ25lZCBjaGFyLGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fbGxvbmcpCisgI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWxsb25nLGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQorLURFRlVOXzIoY2hhcl90b191bGxvbmcsY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY29weV9jaGFyX3RvX3VsbG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQorK0RFRlVOXzIoY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNvcHlfY2hhcl90b191bGxvbmcpCisgI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQpCistREVGVU5fMihjaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQsY29weV9jaGFyX3RvX2Zsb2F0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LHNpZ25lZCBjaGFyLGZsb2F0KQorK0RFRlVOXzIoY2hhcl90b19mbG9hdCxzaWduZWQgY2hhcixmbG9hdCxjb3B5X2NoYXJfdG9fZmxvYXQpCisgI2VuZGlmIC8qIFNMQU5HX0hBU19GTE9BVCAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19kb3VibGUsY2hhcixkb3VibGUpCistREVGVU5fMihjaGFyX3RvX2RvdWJsZSxjaGFyLGRvdWJsZSxjb3B5X2NoYXJfdG9fZG91YmxlKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUpCisrREVGVU5fMihjaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUsY29weV9jaGFyX3RvX2RvdWJsZSkKKyAjZW5kaWYgLyogU0xBTkdfSEFTX0ZMT0FUICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLGNoYXIsbG9uZyBkb3VibGUpCistREVGVU5fMihjaGFyX3RvX2xkb3VibGUsY2hhcixsb25nIGRvdWJsZSxjb3B5X2NoYXJfdG9fbGRvdWJsZSkKKytERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlKQorK0RFRlVOXzIoY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlLGNvcHlfY2hhcl90b19sZG91YmxlKQorICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLVRPX0RPVUJMRV9GVU4oY2hhcl90b19vbmVfZG91YmxlLGNoYXIpCisrVE9fRE9VQkxFX0ZVTihjaGFyX3RvX29uZV9kb3VibGUsc2lnbmVkIGNoYXIpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLworQEAgLTgyLDcgKzgyLDcgQEAgVE9fRE9VQkxFX0ZVTih1Y2hhcl90b19vbmVfZG91YmxlLHVuc2lnbgorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBzaG9ydCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3Nob3J0X3RvX2NoYXIsc2hvcnQsY2hhcikKKytERUZVTl8xKGNvcHlfc2hvcnRfdG9fY2hhcixzaG9ydCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHNob3J0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9zaG9ydF90b191Y2hhcixzaG9ydCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgc2hvcnRfdG9fdWNoYXIJTlVMTAorQEAgLTEyMyw3ICsxMjMsNyBAQCBUT19ET1VCTEVfRlVOKHNob3J0X3RvX29uZV9kb3VibGUsc2hvcnQpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIHNob3J0IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsY2hhcikKKytERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1c2hvcnRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3VzaG9ydF90b191Y2hhcix1bnNpZ25lZCBzaG9ydCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgdXNob3J0X3RvX3VjaGFyCU5VTEwKK0BAIC0xNjQsNyArMTY0LDcgQEAgVE9fRE9VQkxFX0ZVTih1c2hvcnRfdG9fb25lX2RvdWJsZSx1bnNpZworICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBpbnQgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9pbnRfdG9fY2hhcixpbnQsY2hhcikKKytERUZVTl8xKGNvcHlfaW50X3RvX2NoYXIsaW50LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgaW50X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9pbnRfdG9fdWNoYXIsaW50LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBpbnRfdG9fdWNoYXIJTlVMTAorQEAgLTIwNSw3ICsyMDUsNyBAQCBUT19ET1VCTEVfRlVOKGludF90b19vbmVfZG91YmxlLGludCkKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgaW50IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdWludF90b19jaGFyLHVuc2lnbmVkIGludCxjaGFyKQorK0RFRlVOXzEoY29weV91aW50X3RvX2NoYXIsdW5zaWduZWQgaW50LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWludF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfdWludF90b191Y2hhcix1bnNpZ25lZCBpbnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVpbnRfdG9fdWNoYXIJTlVMTAorQEAgLTI0Niw3ICsyNDYsNyBAQCBUT19ET1VCTEVfRlVOKHVpbnRfdG9fb25lX2RvdWJsZSx1bnNpZ25lCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIGxvbmcgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2xvbmdfdG9fdWNoYXIsbG9uZyx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgbG9uZ190b191Y2hhcglOVUxMCitAQCAtMjg3LDcgKzI4Nyw3IEBAIFRPX0RPVUJMRV9GVU4obG9uZ190b19vbmVfZG91YmxlLGxvbmcpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGxvbmcgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV91bG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfdWxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3Vsb25nX3RvX3VjaGFyLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC0zMjksNyArMzI5LDcgQEAgVE9fRE9VQkxFX0ZVTih1bG9uZ190b19vbmVfZG91YmxlLHVuc2lnbgorIAorIC8qIC0tLS0tLS0tLS0tLSBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9sbG9uZ190b191Y2hhcixsb25nIGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGxsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC0zNzIsNyArMzcyLDcgQEAgVE9fRE9VQkxFX0ZVTihsbG9uZ190b19vbmVfZG91YmxlLGxvbmcgbAorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV91bGxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfdWxsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyBsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91bGxvbmdfdG9fdWNoYXIsdW5zaWduZWQgbG9uZyBsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1bGxvbmdfdG9fdWNoYXIJTlVMTAorQEAgLTQxNSw3ICs0MTUsNyBAQCBUT19ET1VCTEVfRlVOKHVsbG9uZ190b19vbmVfZG91YmxlLHVuc2lnCisgCisgLyogLS0tLS0tLS0tLS0tIGZsb2F0IC0tLS0tLS0tLS0gKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistREVGVU5fMShjb3B5X2Zsb2F0X3RvX2NoYXIsZmxvYXQsY2hhcikKKytERUZVTl8xKGNvcHlfZmxvYXRfdG9fY2hhcixmbG9hdCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGZsb2F0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9mbG9hdF90b191Y2hhcixmbG9hdCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgZmxvYXRfdG9fdWNoYXIJTlVMTAorQEAgLTQ1OCw3ICs0NTgsNyBAQCBUT19ET1VCTEVfRlVOKGZsb2F0X3RvX29uZV9kb3VibGUsZmxvYXQpCisgCisgLyogLS0tLS0tLS0tLS0tIGRvdWJsZSAtLS0tLS0tLS0tICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9kb3VibGVfdG9fY2hhcixkb3VibGUsY2hhcikKKytERUZVTl8xKGNvcHlfZG91YmxlX3RvX2NoYXIsZG91YmxlLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgZG91YmxlX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9kb3VibGVfdG9fdWNoYXIsZG91YmxlLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBkb3VibGVfdG9fdWNoYXIJTlVMTAorQEAgLTUwMSw3ICs1MDEsNyBAQCBUT19ET1VCTEVfRlVOKGRvdWJsZV90b19vbmVfZG91YmxlLGRvdWJsCisgCisgLyogLS0tLS0tLS0tLS0tIGxvbmcgZG91YmxlIC0tLS0tLS0tLS0gKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKQorLURFRlVOXzEoY29weV9sZG91YmxlX3RvX2NoYXIsbG9uZyBkb3VibGUsY2hhcikKKytERUZVTl8xKGNvcHlfbGRvdWJsZV90b19jaGFyLGxvbmcgZG91YmxlLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGRvdWJsZV90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfbGRvdWJsZV90b191Y2hhcixsb25nIGRvdWJsZSx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGRvdWJsZV90b191Y2hhcglOVUxMCitAQCAtNTQ1LDcgKzU0NSw3IEBAIFRPX0RPVUJMRV9GVU4obGRvdWJsZV90b19vbmVfZG91YmxlLGxvbmcKKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCisgc3RhdGljIFRvX0RvdWJsZV9GdW5fVGFibGVfVHlwZSBUb19Eb3VibGVfRnVuX1RhYmxlIFtNQVhfQVJJVEhNRVRJQ19UWVBFU10gPQorIHsKKy0gICB7c2l6ZW9mKGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAorKyAgIHtzaXplb2Yoc2lnbmVkIGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAorICAgIHtzaXplb2YodW5zaWduZWQgY2hhciksIHVjaGFyX3RvX29uZV9kb3VibGV9LAorICAgIHtzaXplb2Yoc2hvcnQpLCBzaG9ydF90b19vbmVfZG91YmxlfSwKKyAgICB7c2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgdXNob3J0X3RvX29uZV9kb3VibGV9LAorQEAgLTU4Myw3ICs1ODMsNyBAQCBzdGF0aWMgVG9fRG91YmxlX0Z1bl9UYWJsZV9UeXBlIFRvX0RvdWJsCisgCisgc3RhdGljIEJpbmFyeV9NYXRyaXhfVHlwZSBCaW5hcnlfTWF0cml4IFtNQVhfQVJJVEhNRVRJQ19UWVBFU11bTUFYX0FSSVRITUVUSUNfVFlQRVNdID0KKyB7CistICAgLyogY2hhciAqLworKyAgIC8qIHNpZ25lZCBjaGFyICovCisgICAgeworICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b19jaGFyLCBjaGFyX3RvX2NoYXJ9LAorICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b191Y2hhciwgY2hhcl90b191Y2hhcn0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxNTUzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorZml4IHRoZSBwY3JlIGV4aXN0ZW5jZSBjaGVja2luZworCit3aGVuIGNoZWNrIGlmIHRoZXJlIGlzIHBjcmUsIHRoZSBjb25maWd1cmUgZmlsZSBhbHdheXMgY2hlY2sKK3RoZSBob3N0IGRpci4gbm93IHdlIG1ha2UgaXQgd29yayBieSBhZGRpbmcgY29ycmVjdCBwcmVmaXggZm9yCitjcm9zcy1jb21waWxlIGVudmlyb25tZW50LgorCitXaGVuIGVuYWJsZSBwY3JlLW1vZHVsZSwgd2Ugc2VlIGEgUUEgd2FybmluZyBiZWNhdXNlIHJwYXRocworaGFyZGNvZGVkIGludG8gdGhlIGJ1aWxkLCBycGF0aHMgYXJlIG5vdCBuZWVkZWQsIHNvIGxldHMgdHVybgordGhpcyBvZmYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgICA2MCArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGYxNTg2YzMuLmQyMjgxNGYgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY5OTEsNiArNjk5MSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgCSAvdXNyL2luY2x1ZGUvcGNyZSwvdXNyL2xpYiBcCisgCSAvdXNyL3BjcmUvaW5jbHVkZSwvdXNyL3BjcmUvbGliIFwKKyAJIC91c3IvaW5jbHVkZSwvdXNyL2xpYiBcCisrCSAvdXNyL2luY2x1ZGUsL3Vzci9saWI2NCBcCisgCSAvb3B0L2luY2x1ZGUvcGNyZSwvb3B0L2xpYiBcCisgCSAvb3B0L3BjcmUvaW5jbHVkZSwvb3B0L3BjcmUvbGliIFwKKyAJIC9vcHQvaW5jbHVkZSwvb3B0L2xpYiIKK0BAIC03MDIxLDE0ICs3MDIyLDE0IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgICAgICAgICB4aW5jZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDF9J2AKKyAJeGxpYmRpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQyfSdgCisgCWZvdW5kPTAKKy0JaWYgdGVzdCAtciAkeGluY2Rpci8keGluY2ZpbGUKKysJaWYgdGVzdCAtciAkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2Rpci8keGluY2ZpbGUKKyAJdGhlbgorIAkgIGZvciBFIGluICRleHRzCisgCSAgZG8KKy0JICAgIGlmIHRlc3QgLXIgIiR4bGliZGlyLyR4bGliZmlsZS4kRSIKKysJICAgIGlmIHRlc3QgLXIgIiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyLyR4bGliZmlsZS4kRSIKKyAJICAgIHRoZW4KKy0JICAgICAgamRfcGNyZV9pbmNsdWRlX2Rpcj0iJHhpbmNkaXIiCistCSAgICAgIGpkX3BjcmVfbGlicmFyeV9kaXI9IiR4bGliZGlyIgorKwkgICAgICBqZF9wY3JlX2luY2x1ZGVfZGlyPSIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2RpciIKKysJICAgICAgamRfcGNyZV9saWJyYXJ5X2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIiCisgCSAgICAgIGpkX3dpdGhfcGNyZV9saWJyYXJ5PSJ5ZXMiCisgCSAgICAgIGZvdW5kPTEKKyAJICAgICAgYnJlYWsKK0BAIC03MDU0LDU2ICs3MDU1LDcgQEAgJGFzX2VjaG8gInllczogJGpkX3BjcmVfbGlicmFyeV9kaXIgYW5kICRqZF9wY3JlX2luY2x1ZGVfZGlyIiA+JjY7IH0KKyAgICAgdGhlbgorICAgICAgIFBDUkVfTElCPSIiCisgICAgIGVsc2UKKy0KKy1pZiB0ZXN0ICJYJGpkX3BjcmVfbGlicmFyeV9kaXIiICE9ICJYIgorLXRoZW4KKy0gIGlmIHRlc3QgIlgkUlBBVEgiID0gIlgiCistICB0aGVuCistCistY2FzZSAiJGhvc3Rfb3MiIGluCistICAqbGludXgqfCpzb2xhcmlzKiApCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiwiCistICAgICAgZWxzZQorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVIgIgorLSAgICAgIGVsc2UKKy0JUlBBVEg9Ii1SIgorLSAgICAgIGZpCistICAgIGZpCistICA7OworLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCistICAgIGVsc2UKKy0gICAgICBSUEFUSD0iLXJwYXRoICIKKy0gICAgZmkKKy0gIDs7CistICAqbmV0YnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgZmkKKy0gIDs7CistZXNhYworLQorLSAgICBpZiB0ZXN0ICJYJFJQQVRIIiAhPSAiWCIKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEgkamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgUlBBVEg9IiRSUEFUSDokamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gIGZpCistZmkKKy0KKysgICAgICBSUEFUSD0iIgorICAgICBmaQorIAorICAgICBQQ1JFX0lOQz0tSSRqZF9wY3JlX2luY2x1ZGVfZGlyCistLSAKKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwY2FjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorV2l0aG91dCB0aGlzIHBhdGNoIHdlIHNlZSBycGF0aHMgaGFyZGNvZGVkIGludG8gdGhlIGJ1aWxkIHdoaWNoIHJlc3VsdHMgaW4gUUEKK3dhcm5pbmdzLiBUaGVzZSBycGF0aHMgYXJlIG5vdCBuZWVkZWQgc28gbGV0cyB0dXJuIHRoaXMgb2ZmLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKyhidXQgY291bGQgYmUgdHVybmVkIGludG8gYSBwcm9wZXIgY29uZmlndXJlIG9wdGlvbikKKworUlAgMjAxMi8wMy8xNAorCitJbmRleDogc2xhbmctMi4yLjQvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2xhbmctMi4yLjQub3JpZy9jb25maWd1cmUJMjAxMi0wMy0xNCAyMzo0MDowMS4yODM1NjA2NzkgKzAwMDAKKysrKyBzbGFuZy0yLjIuNC9jb25maWd1cmUJMjAxMi0wMy0xNCAyMzo0MToxOC4wMjM1NTg5MDAgKzAwMDAKK0BAIC02MDgxLDU2ICs2MDgxLDcgQEAKKyBFTEZfQ0ZMQUdTPSIkRUxGX0NGTEFHUyAkSUVFRV9DRkxBR1MiCisgQ0ZMQUdTPSIkQ0ZMQUdTICRJRUVFX0NGTEFHUyIKKyAKKy0KKy1pZiB0ZXN0ICJYJGxpYmRpciIgIT0gIlgiCistdGhlbgorLSAgaWYgdGVzdCAiWCRSUEFUSCIgPSAiWCIKKy0gIHRoZW4KKy0KKy1jYXNlICIkaG9zdF9vcyIgaW4KKy0gICpsaW51eCp8KnNvbGFyaXMqICkKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVdsLC1SLCIKKy0gICAgICBlbHNlCistICAgICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItUiAiCistICAgICAgZWxzZQorLQlSUEFUSD0iLVIiCistICAgICAgZmkKKy0gICAgZmkKKy0gIDs7CistICAqb3NmKnwqb3BlbmJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKKy0gICAgZWxzZQorLSAgICAgIFJQQVRIPSItcnBhdGggIgorLSAgICBmaQorLSAgOzsKKy0gICpuZXRic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICBmaQorLSAgOzsKKy1lc2FjCistCistICAgIGlmIHRlc3QgIlgkUlBBVEgiICE9ICJYIgorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSCRsaWJkaXIiCistICAgIGZpCistICBlbHNlCistICAgIFJQQVRIPSIkUlBBVEg6JGxpYmRpciIKKy0gIGZpCistZmkKKy0KKytSUEFUSD0iIgorIAorICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGZlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKQEAgLTAsMCArMSwxMTYgQEAKK0Zyb20gNDU4OGY0YTAyODc3ODc3ODhlYjg2ZmIxNmYzMjZjYmFhNzQ1NGUxZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoZW5nIEp1bmxpbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogTW9uLCAxNiBKdW4gMjAxNCAxMjo1MToyNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBzbGFuZzogZml4IHRoZSBpY29udiBleGlzdGVuY2UgY2hlY2tpbmcKKworV2hlbiBjaGVja2luZyB3aGV0aGVyIHRoZXJlIGlzIGljb252LCB0aGUgY29uZmlndXJlIGZpbGUgYWx3YXlzIGNoZWNrIAordGhlIGhvc3QgZW52LgorCitOb3cgd2UgbWFrZSBpdCB3b3JraW5nIHByb3Blcmx5IGJ5IGFkZGluZyBjb3JyZWN0IHByZWZpeCBmb3IgY3Jvc3MtCitjb21waWxpbmcgZW52aXJvbm1lbnQuCisKK1doZW4gZW5hYmxpbmcgaWNvbnYtbW9kdWxlLCB3ZSBzZWUgYSBRQSB3YXJuaW5nIGJlY2F1c2UgcnBhdGhzIGhhcmRjb2RlZAoraW50byB0aGUgYnVpbGQuIEFuZCBycGF0aHMgYXJlIG5vdCBuZWVkZWQsIHNvIGxldCdzIHR1cm4gdGhpcyBvZmYuCisKK1RoaXMgcGF0Y2ggaXMgZ2VuZXJhdGVkIGJ5IHJlZmVyZW5jaW5nIHRoZSBleGlzdGluZyAiZml4LWNoZWNrLXBjcmUiCitwYXRjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5nIEp1bmxpbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorLS0tCisgY29uZmlndXJlIHwgNjAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDdhOTYyNTYuLjkxNjMyZjMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc5MDksNiArNzkwOSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgaWNvbnYgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorIAkgL3Vzci9pbmNsdWRlL2ljb252LC91c3IvbGliIFwKKyAJIC91c3IvaWNvbnYvaW5jbHVkZSwvdXNyL2ljb252L2xpYiBcCisgCSAvdXNyL2luY2x1ZGUsL3Vzci9saWIgXAorKwkgL3Vzci9pbmNsdWRlLC91c3IvbGliNjQgXAorIAkgL29wdC9pbmNsdWRlL2ljb252LC9vcHQvbGliIFwKKyAJIC9vcHQvaWNvbnYvaW5jbHVkZSwvb3B0L2ljb252L2xpYiBcCisgCSAvb3B0L2luY2x1ZGUsL29wdC9saWIiCitAQCAtNzkzOSwxNCArNzk0MCwxNCBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KKyAgICAgICAgIHhpbmNkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMX0nYAorIAl4bGliZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAJZm91bmQ9MAorLQlpZiB0ZXN0IC1yICR4aW5jZGlyLyR4aW5jZmlsZQorKwlpZiB0ZXN0IC1yICRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyLyR4aW5jZmlsZQorIAl0aGVuCisgCSAgZm9yIEUgaW4gJGV4dHMKKyAJICBkbworLQkgICAgaWYgdGVzdCAtciAiJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorKwkgICAgaWYgdGVzdCAtciAiJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorIAkgICAgdGhlbgorLQkgICAgICBqZF9pY29udl9pbmNsdWRlX2Rpcj0iJHhpbmNkaXIiCistCSAgICAgIGpkX2ljb252X2xpYnJhcnlfZGlyPSIkeGxpYmRpciIKKysJICAgICAgamRfaWNvbnZfaW5jbHVkZV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyIgorKwkgICAgICBqZF9pY29udl9saWJyYXJ5X2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIiCisgCSAgICAgIGpkX3dpdGhfaWNvbnZfbGlicmFyeT0ieWVzIgorIAkgICAgICBmb3VuZD0xCisgCSAgICAgIGJyZWFrCitAQCAtNzk3Miw1NiArNzk3Myw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9pY29udl9saWJyYXJ5X2RpciBhbmQgJGpkX2ljb252X2luY2x1ZGVfZGlyIiA+JjY7IH0KKyAgICAgdGhlbgorICAgICAgIElDT05WX0xJQj0iIgorICAgICBlbHNlCistCistaWYgdGVzdCAiWCRqZF9pY29udl9saWJyYXJ5X2RpciIgIT0gIlgiCistdGhlbgorLSAgaWYgdGVzdCAiWCRSUEFUSCIgPSAiWCIKKy0gIHRoZW4KKy0KKy1jYXNlICIkaG9zdF9vcyIgaW4KKy0gICpsaW51eCp8KnNvbGFyaXMqICkKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVdsLC1SLCIKKy0gICAgICBlbHNlCistICAgICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItUiAiCistICAgICAgZWxzZQorLQlSUEFUSD0iLVIiCistICAgICAgZmkKKy0gICAgZmkKKy0gIDs7CistICAqb3NmKnwqb3BlbmJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKKy0gICAgZWxzZQorLSAgICAgIFJQQVRIPSItcnBhdGggIgorLSAgICBmaQorLSAgOzsKKy0gICpuZXRic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICBmaQorLSAgOzsKKy1lc2FjCistCistICAgIGlmIHRlc3QgIlgkUlBBVEgiICE9ICJYIgorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSCRqZF9pY29udl9saWJyYXJ5X2RpciIKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgUlBBVEg9IiRSUEFUSDokamRfaWNvbnZfbGlicmFyeV9kaXIiCistICBmaQorLWZpCistCisrICAgICAgUlBBVEg9IiIKKyAgICAgZmkKKyAKKyAgICAgSUNPTlZfSU5DPS1JJGpkX2ljb252X2luY2x1ZGVfZGlyCistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwMDAxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tIDNhMDVkMWE5MjAxNDBlOWYyYzcyNzkxYzEyZjY2NDIxM2ZlYjQ2ZGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYW5mcmVkIEhhbmtlIDxNYW5mcmVkLkhhbmtlQHRuZ3RlY2guY29tPgorRGF0ZTogVGh1LCAyMCBKdW4gMjAxMyAxMDoyNDoxMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBzcHJpbnRmIGJ1ZyAoY29uY2VybmluZyAlYyBmb3IgOC1iaXQgY2hhcmFjdGVyIGluIG5vbi1VVEY4CisgbW9kZSkgZml4ZWQKKworY2hhciAqc3RyIHBvaW50cyB0byBTTHVjaGFyX1R5cGUgdXRmOF9idWZbXSwgd2hpY2ggaGFkIHRvbyBzbWFsbCBzY29wZQorCitzcmMvdGVzdC9zdHJvcHMuc2wgZmFpbGVkIGluIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQ6CisgLSBjb21waWxlcjogIGdjYyAoRGViaWFuIDQuNy4yLTUpIDQuNy4yCisgLSBDRkxBR1M6ICAgIC1nIC1PMgorIC0gbGliYzogICAgICBHTlUgQyBMaWJyYXJ5IChEZWJpYW4gRUdMSUJDIDIuMTMtMzgpIHN0YWJsZSByZWxlYXNlIHZlcnNpb24gMi4xMworIC0ga2VybmVsOiAgICAzLjIuMC00LTY4Ni1wYWUgIzEgU01QIERlYmlhbiAzLjIuMzktMiBpNjg2IEdOVS9MaW51eAorLS0tCisgc3JjL3Nsc3Ryb3BzLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2xzdHJvcHMuYyBiL3NyYy9zbHN0cm9wcy5jCitpbmRleCBjZTZhY2IwLi5jYmJiYjAxIDEwMDY0NAorLS0tIGEvc3JjL3Nsc3Ryb3BzLmMKKysrKyBiL3NyYy9zbHN0cm9wcy5jCitAQCAtMTg4NCw2ICsxODg0LDcgQEAgc3RhdGljIGNoYXIgKlNMZG9fc3ByaW50ZiAoY2hhciAqZm10KSAvKnt7eyovCisgI2VuZGlmCisgICAgdW5zaWduZWQgY2hhciB1Y2g7CisgICAgaW50IHVzZV9sb25nID0gMCwgdXNlX2FsdF9mb3JtYXQgPSAwOworKyAgIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltTTFVURjhfTUFYX01CTEVOKzFdOworIAorICAgIHdoaWxlICgxKQorICAgICAgeworQEAgLTIwNzEsNyArMjA3Miw2IEBAIHN0YXRpYyBjaGFyICpTTGRvX3NwcmludGYgKGNoYXIgKmZtdCkgLyp7e3sqLworICNlbmRpZgorIAkgICAgICAgeworIAkJICBTTHdjaGFyX1R5cGUgd2M7CistCQkgIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltTTFVURjhfTUFYX01CTEVOKzFdOworIAorIAkJICBpZiAoLTEgPT0gU0xhbmdfcG9wX3djaGFyICgmd2MpKQorIAkJICAgIHJldHVybiBvdXQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjJmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJUaGUgc2hhcmVkIGxpYnJhcnkgZm9yIHRoZSBTLUxhbmcgZXh0ZW5zaW9uIGxhbmd1YWdlIgorCitERVNDUklQVElPTiA9ICJTLUxhbmcgaXMgYW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgYW5kIGEgcHJvZ3JhbW1pbmcgbGlicmFyeS4gIFRoZSBcCitTLUxhbmcgbGFuZ3VhZ2Ugd2FzIGRlc2lnbmVkIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbnRvIFwKK2EgcHJvZ3JhbSB0byBwcm92aWRlIHRoZSBwcm9ncmFtIHdpdGggYSBwb3dlcmZ1bCBleHRlbnNpb24gbGFuZ3VhZ2UuIFwKK1RoZSBTLUxhbmcgbGlicmFyeSwgcHJvdmlkZWQgaW4gdGhpcyBwYWNrYWdlLCBwcm92aWRlcyB0aGUgUy1MYW5nIFwKK2V4dGVuc2lvbiBsYW5ndWFnZS4gIFMtTGFuZydzIHN5bnRheCByZXNlbWJsZXMgQywgd2hpY2ggbWFrZXMgaXQgZWFzeSBcCit0byByZWNvZGUgUy1MYW5nIHByb2NlZHVyZXMgaW4gQyBpZiB5b3UgbmVlZCB0by4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvc2xhbmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJwY3JlIgorUFIgPSAicjEyIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTUyYTE4YTQ3MmQ0ZjdlNDU0NzliMDY1NjM3MTdjMDIiCisKKworU1JDX1VSSSA9ICJmdHA6Ly9zcGFjZS5taXQuZWR1L3B1Yi9kYXZpcy9zbGFuZy92Mi4yL3NsYW5nLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcnBhdGhmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNoZWNrLXBjcmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaCBcCisgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdmY2ZkNDQ3ZTM3OGYwN2RkMGMwYmFlNjcxZmU2NDg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhODI1N2E5YTJhNTUwOTlhZjg1OGIxMzMzOGRjOGYzYTA2ZGQyMDY5ZjQ2ZjBkZjJjOWMzYmI4NGEwMWQ1ZGIiCisKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC16IC0td2l0aG91dC1wbmcgLS13aXRob3V0LW9uaWcgLS14LWluY2x1ZGVzPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2luY2x1ZGUvWDExIC0teC1saWJyYXJpZXM9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvbGliIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIHNsYW5nIGtlZXBzIGNvbmZpZ3VyZS5hYyBhbmQgcmVzdCBvZiBhdXRvY29uZiBmaWxlcyBpbiBhdXRvY29uZi8gZGlyZWN0b3J5CisgICAgIyB3ZSBoYXZlIHRvIGdvIHRoZXJlIHRvIGJlIGFibGUgdG8gcnVuIGdudS1jb25maWdpemUgY2F1c2UgaXQgZXhwZWN0cyBjb25maWd1cmUue2luLGFjfQorICAgICMgdG8gYmUgcHJlc2VudC4gUmVzdWx0aW5nIGZpbGVzIGxhbmQgaW4gYXV0b2NvbmYvYXV0b2NvbmYvIHNvIHdlIG5lZWQgdG8gbW92ZSB0aGVtLgorICAgIGNkICR7U30vYXV0b2NvbmYgJiYgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICYmIG12IGF1dG9jb25mL2NvbmZpZy4qIC4KKyAgICBjZCAke0J9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSAtZSAnSU5TVF9MSUJfRElSPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2xpYicKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vdjIvbW9kdWxlcy8gJHtkYXRhZGlyfS9zbHNoLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS92Mi9tb2R1bGVzLy5kZWJ1ZyIKKworUEFSQUxMRUxfTUFLRSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXQtMy4zL2ZpeC1lcnJvci1yZXR1cm4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyOTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXQtMy4zL2ZpeC1lcnJvci1yZXR1cm4ucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVGhpcyBwYXRjaCBmaXhpZXMgdGhlIHdyb25nIHJldHVybiBjb2RlIG9mIHN0YXQgLWguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogWmhhbmdsZSBZYW5nIDx6aGFuZ2xlLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIHN0YXQtMy4zL3N0YXQuYy5vcmlnCTIwMTMtMDgtMjIgMTA6NDk6NDUuMDAwMDAwMDAwICswODAwCisrKysgc3RhdC0zLjMvc3RhdC5jCTIwMTMtMDgtMjIgMTA6NTA6MzEuMDAwMDAwMDAwICswODAwCitAQCAtODQ1LDcgKzg0NSw3IEBACisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlUyAtIFNlY3VyaXR5IElEIGluIFNFLUxpbnV4XG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsICJcdFx0JSVDIC0gU2VjdXJpdHkgY29udGV4dCBpbiBTRS1MaW51eFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlZCAtIEZyZWUgZmlsZSBub2RlcyBpbiBmaWxlIHN5c3RlbVxuIik7CistICAgIGV4aXQoMSk7CisrICAgIGV4aXQoMCk7CisgfQorICAgCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MTgzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSBmaWxlIHN0YXR1cyBkaXNwbGF5IHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJEaXNwbGF5cyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIHRoYXQgdGhlIHN0YXQoKSBjYWxsIHByb3ZpZGVzIGFuZCBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlc3lzdGVtIHRoYXQgc3RhdGZzKCkgcHJvdmlkZXMuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9Mzk4ODZiMDc3ZmQwNzJlODc2ZTVjNGMxNjMxMGI2MzEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC91dGlscy9maWxlLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZXJyb3ItcmV0dXJuLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzdlMjQ3ZThlNDAwYWQ5MjA1ZjFiMDUwMGI3MjhmZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzA3MWYwMzg0YTQyM2E5MzhkZDU0MmMxZjA4NTQ3YTAyODI0ZjYzNTlhY2QzZWYzZjk0NGIyYzRjMmQxZWUwOSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfSAke0R9JHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC1tIDc1NSBzdGF0ICR7RH0ke2Jhc2VfYmluZGlyfS9zdGF0LnN0YXQKKwlpbnN0YWxsIC1tIDY0NCBzdGF0LjEgJHtEfSR7bWFuZGlyfS9tYW4xCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzdGF0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbc3RhdF0gPSAiMjAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N0YXRdID0gIiR7YmFzZV9iaW5kaXJ9L3N0YXQiCitBTFRFUk5BVElWRV9UQVJHRVRbc3RhdF0gPSAiJHtiYXNlX2JpbmRpcn0vc3RhdC5zdGF0IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAic3RhdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N0YXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvc3RhdC4xIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorLS0tIGEvZG9jL3N0cmVzcy50ZXhpCisrKysgYi9kb2Mvc3RyZXNzLnRleGkKK0BAIC02Miw0NyArNjIsNDcgQEAKKyAKKyBAdGFibGUgQHNhbXAKKyBAaXRlbSAtPworLUBpdGVteCAtLWhlbHAKKytAaXRlbSAtLWhlbHAKKyBTaG93IGhlbHAgaW5mb3JtYXRpb24uCisgCistQGl0ZW14IC0tdmVyc2lvbgorK0BpdGVtIC0tdmVyc2lvbgorIFNob3cgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAKKyBAaXRlbSAtdgorLUBpdGVteCAtLXZlcmJvc2UKKytAaXRlbSAtLXZlcmJvc2UKKyBUdXJuIHVwIHZlcmJvc2l0eS4KKyAKKyBAaXRlbSAtcQorLUBpdGVteCAtLXF1aWV0CisrQGl0ZW0gLS1xdWlldAorIFR1cm4gZG93biB2ZXJib3NpdHkuCisgCisgQGl0ZW0gLW4KKy1AaXRlbXggLS1kcnktcnVuCisrQGl0ZW0gLS1kcnktcnVuCisgU2hvdyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBkb25lLgorIAorIEBpdGVtIC10IEB2YXJ7c2Vjc30KKy1AaXRlbXggLS10aW1lb3V0IEB2YXJ7c2Vjc30KKytAaXRlbSAtLXRpbWVvdXQgQHZhcntzZWNzfQorIFRpbWUgb3V0IGFmdGVyIEB2YXJ7c2Vjc30gc2Vjb25kcy4KKyAKKy1AaXRlbXggLS1iYWNrb2ZmIEB2YXJ7dXNlY3N9CisrQGl0ZW0gLS1iYWNrb2ZmIEB2YXJ7dXNlY3N9CisgV2FpdCBmb3IgZmFjdG9yIG9mIEB2YXJ7dXNlY3N9IG1pY3Jvc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgd29yay4KKyAKKyBAaXRlbSAtYyBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWNwdSBAdmFye2ZvcmtzfQorK0BpdGVtIC0tY3B1IEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7c3FydCgpfS4KKyAKKyBAaXRlbSAtaSBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWlvIEB2YXJ7Zm9ya3N9CisrQGl0ZW0gLS1pbyBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we3N5bmMoKX0uCisgCisgQGl0ZW0gLW0gQHZhcntmb3Jrc30KKy1AaXRlbXggLS12bSBAdmFye2ZvcmtzfQorK0BpdGVtIC0tdm0gQHZhcntmb3Jrc30KKyBTcGF3biBAdmFye2ZvcmtzfSBwcm9jZXNzZXMgZWFjaCBzcGlubmluZyBvbiBAc2FtcHttYWxsb2MoKX0uCisgCistQGl0ZW14IC0tdm0tYnl0ZXMgQHZhcntieXRlc30KKytAaXRlbSAtLXZtLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisgQWxsb2NhdGUgQHZhcntieXRlc30gbnVtYmVyIG9mIGJ5dGVzLiAgVGhlIGRlZmF1bHQgaXMgMS4KKyAKKy1AaXRlbXggLS12bS1oYW5nCisrQGl0ZW0gLS12bS1oYW5nCisgSW5zdHJ1Y3QgZWFjaCB2bSBob2cgcHJvY2VzcyB0byBnbyB0byBzbGVlcCBhZnRlciBhbGxvY2F0aW5nIG1lbW9yeS4gIFRoaXMKKyBjb250cmFzdHMgd2l0aCB0aGVpciBub3JtYWwgYmVoYXZpb3IsIHdoaWNoIGlzIHRvIGZyZWUgdGhlIG1lbW9yeSBhbmQKKyByZWFsbG9jYXRlIEBlbXBoe2FkIGluZmluaXR1bX0uICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2ltdWxhdGluZyBsb3cgbWVtb3J5CitAQCAtMTE0LDEzICsxMTQsMTMgQEAKKyBAZW5kIGV4YW1wbGUKKyAKKyBAaXRlbSAtZCBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWhkZCBAdmFye2ZvcmtzfQorK0BpdGVtIC0taGRkIEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7d3JpdGUoKX0uCisgCistQGl0ZW14IC0taGRkLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisrQGl0ZW0gLS1oZGQtYnl0ZXMgQHZhcntieXRlc30KKyBXcml0ZSBAdmFye2J5dGVzfSBudW1iZXIgb2YgYnl0ZXMuICBUaGUgZGVmYXVsdCBpcyAxR0IuCisgCistQGl0ZW14IC0taGRkLW5vY2xlYW4KKytAaXRlbSAtLWhkZC1ub2NsZWFuCisgRG8gbm90IHVubGluayBmaWxlKHMpIHRvIHdoaWNoIHJhbmRvbSBBU0NJSSBkYXRhIGlzIHdyaXR0ZW4uCisgCisgQGVuZCB0YWJsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL3N0cmVzc18xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjdlNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIKQEAgLTAsMCArMSwxNCBAQAorREVTQ1JJUFRJT04gPSAiRGVsaWJlcmF0ZWx5IHNpbXBsZSB3b3JrbG9hZCBnZW5lcmF0b3IgZm9yIFBPU0lYIHN5c3RlbXMuIEl0IFwKK2ltcG9zZXMgYSBjb25maWd1cmFibGUgYW1vdW50IG9mIENQVSwgbWVtb3J5LCBJL08sIGFuZCBkaXNrIHN0cmVzcyBvbiB0aGUgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZW9wbGUuc2Vhcy5oYXJ2YXJkLmVkdS9+YXB3L3N0cmVzcy8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Blb3BsZS5zZWFzLmhhcnZhcmQuZWR1L35hcHcvJHtCUE59LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90ZXhpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODkwYTQyMzZkZDE2NTY3OTJmM2VmOWExOTBjZjk5ZWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDU3ZTRmYzJhNzcwNjQxMWUxMDE0YmYxNzJlNGY5NGI2M2ExMmYxODQxMjM3OGZjYTg2ODRjYTkyNDA4ODI1YiIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vZmlsZXMvc3Vkby5wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMjZlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtCkBAIC0wLDAgKzEsNiBAQAorIyVQQU0tMS4wCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2tleWluaXQuc28gcmV2b2tlCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fbGltaXRzLnNvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTg3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYwpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlByb3ZpZGUgbGltaXRlZCBzdXBlciB1c2VyIHByaXZpbGVnZXMgdG8gc3BlY2lmaWMgdXNlcnMiCitERVNDUklQVElPTiA9ICJTdWRvIChzdXBlcnVzZXIgZG8pIGFsbG93cyBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIGdpdmUgY2VydGFpbiB1c2VycyAob3IgZ3JvdXBzIG9mIHVzZXJzKSB0aGUgYWJpbGl0eSB0byBydW4gc29tZSAob3IgYWxsKSBjb21tYW5kcyBhcyByb290IHdoaWxlIGxvZ2dpbmcgYWxsIGNvbW1hbmRzIGFuZCBhcmd1bWVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zdWRvLndzIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3LnN1ZG8ud3MvYnVncy8iCitTRUNUSU9OID0gImFkbWluIgorTElDRU5TRSA9ICJJU0MgJiBCU0QgJiBabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0xJQ0VOU0U7bWQ1PWMxNmU1NDI0MDhhYmRhMDEzZDY3MmJlOGViODhkMTc0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BsdWdpbnMvc3Vkb2Vycy9yZWRibGFjay5jO2JlZ2lubGluZT0xO2VuZGxpbmU9NDE7bWQ1PWNmZTQxMTEyZjk2YzE5YTA3NDkzNGQxMjhmNDVjNjkzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL3JlYWxsb2NhcnJheS5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PTg1YjA5MDViNzk1ZDRkNThiZjJlMDA2MzU2NDllZWM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL2ZubWF0Y2guYztiZWdpbmxpbmU9MztlbmRsaW5lPTI3O21kNT02N2Y4M2VlOWJkNDU2NTU3Mzk3MDgyZjhmMWJlMGVmZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9nZXRjd2QuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTI3O21kNT00NDlhZjRjYzU3ZmM3ZDQ2ZjQyMDkwNjA4YmEzZTY4MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9nbG9iLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0zMTttZDU9NTg3MjczMzE0NmI5ZWIwZGViNzllMWY2NjQ4MTViODUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvc25wcmludGYuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTM0O21kNT1jODJjMWIzYTVjMzJlMDg1NDVjOWVjNWQ3MWU0MWU1MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3N1ZG9fcXVldWUuaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTI3O21kNT00NDlhZjRjYzU3ZmM3ZDQ2ZjQyMDkwNjA4YmEzZTY4MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9pbmV0X3B0b24uYztiZWdpbmxpbmU9MztlbmRsaW5lPTE3O21kNT0zOTcwYWIwNTE4YWI3OWNiZDBiYWZiNjk3ZjEwYjMzYSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zdWRvZXJzIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWVkaXRvcj0vYmluL3ZpIC0td2l0aC1lbnYtZWRpdG9yIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLS1kaXNhYmxlLWhhcmRlbmluZyAiCisKKyMgbWtzaWduYW1lL21rc2lnbGlzdCBhcmUgdXNlZCBvbiBidWlsZCBob3N0IHRvIGdlbmVyYXRlIHNvdXJjZSBmaWxlcworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlvZV9ydW5tYWtlIFNTUF9DRkxBR1M9IiIgU1NQX0xERkxBR1M9IiIgQ0M9IiRCVUlMRF9DQyIgQ0ZMQUdTPSIkQlVJTERfQ0ZMQUdTIiBDUFBGTEFHUz0iJEJVSUxEX0NQUEZMQUdTIC1JJHtTfS9pbmNsdWRlIC1JJHtTfSAtSSR7Qn0iICAtQyBsaWIvdXRpbCBta3NpZ25hbWUgbWtzaWdsaXN0Cit9CisKKyMgRXhwbGljaXRseSBjcmVhdGUgJHtsb2NhbHN0YXRlZGlyfS9saWIgYmVmb3JlIGRvX2luc3RhbGwgdG8gZW5zdXJlCisjIHRoZSBkaXJlY3RvcnkgaXMgYWNjZXNzaWJsZSBieSBhbGwgdXNlcnMuIE90aGVyd2lzZSB0aGUgbWtpbnN0YWxsZGlycworIyBzY3JpcHQgKGZyb20gc3Vkbykgd2lsbCByZWN1cnNpdmVseSBjcmVhdGUgJHtsb2NhbHN0YXRlZGlyfS9saWIvc3VkbworIyBhbmQgdGhlbiBjaG1vZCBlYWNoIGRpcmVjdG9yeSB3aXRoIDA3MDAgcGVybWlzc2lvbnMsIHdoaWNoIGlzbid0IHdoYXQKKyMgd2Ugd2FudCAoaS5lLCB1c2VycyB3b3VsZCBub3QgYmUgYWJsZSB0byBhY2Nlc3MgL3Zhci9saWIpLgorZG9faW5zdGFsbF9wcmVwZW5kICgpeworCW1rZGlyIC1wICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9saWIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMzZjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMzg2ZTJjMmZhMmFiMmUwMmVmNzFjMjY4YTU3MjA1MTM5YmUzMjlhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDA3OjA3OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIGlkX3QgZGVmaW5pdGlvbgorCisvc3Vkb191dGlsLmg6MjE5OjE0OiBlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ2lkX3QnCisgX19kc29fcHVibGljIGlkX3Qgc3Vkb19zdHJ0b2lkX3YxKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc2VwLAorIGNoYXIgKiplbmRwLCBjb25zdCBjaGFyICoqZXJyc3RyKTsKKyAgICAgICAgICAgICAgIF4KKwkgICAgICAgbWFrZVsxXTogKioqIFtwcmVzZXJ2ZV9mZHMub10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGluY2x1ZGUvc3Vkb191dGlsLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdWRvX3V0aWwuaCBiL2luY2x1ZGUvc3Vkb191dGlsLmgKK2luZGV4IDg5YzlmODkuLmFjMDg1NWEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3N1ZG9fdXRpbC5oCisrKysgYi9pbmNsdWRlL3N1ZG9fdXRpbC5oCitAQCAtMTcsNiArMTcsOCBAQAorICNpZm5kZWYgU1VET19VVElMX0gKKyAjZGVmaW5lIFNVRE9fVVRJTF9ICisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworICNpZmRlZiBIQVZFX1NUREJPT0xfSAorICMgaW5jbHVkZSA8c3RkYm9vbC5oPgorICNlbHNlCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDE4Njg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1RoZSBtYWtlZmlsZSB1c2VzIHRvcF9zcmNkaXIgdG8gZmluZCBmaWxlcyB0aGF0IHdlcmUgY3JlYXRlZCBieSBjb25maWd1cmUsIHdoZW4KK2l0IHNob3VsZCB1c2UgdG9wX2J1aWxkZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cDovL2J1Z3ppbGxhLnN1ZG8ud3Mvc2hvd19idWcuY2dpP2lkPTcwOCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLQorIHNyYy9NYWtlZmlsZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuaW4gYi9zcmMvTWFrZWZpbGUuaW4KK2luZGV4IGYwMDllMTAuLjdhY2ZiMmQgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuaW4KKysrKyBiL3NyYy9NYWtlZmlsZS5pbgorQEAgLTE2NSwxMSArMTY1LDExIEBAIGluc3RhbGwtZGlyczoKKyAKKyBpbnN0YWxsLXJjOiBpbnN0YWxsLWRpcnMKKyAJaWYgWyAtbiAiJChJTklUX1NDUklQVCkiIF07IHRoZW4gXAorLQkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA3NTUgJCh0b3Bfc3JjZGlyKS9pbml0LmQvJChJTklUX1NDUklQVCkgJChERVNURElSKSQoSU5JVF9ESVIpL3N1ZG87IFwKKysJICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNzU1ICQodG9wX2J1aWxkZGlyKS9pbml0LmQvJChJTklUX1NDUklQVCkgJChERVNURElSKSQoSU5JVF9ESVIpL3N1ZG87IFwKKyAJICAgIHJtIC1mICQoREVTVERJUikkKFJDX0xJTkspOyBcCisgCSAgICBsbiAtcyAkKElOSVRfRElSKS9zdWRvICQoREVTVERJUikkKFJDX0xJTkspOyBcCisgCWVsaWYgdGVzdCAtbiAiJCh0bXBmaWxlc19kKSI7IHRoZW4gXAorLQkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA2NDQgJCh0b3Bfc3JjZGlyKS9pbml0LmQvc3Vkby5jb25mICQoREVTVERJUikkKHRtcGZpbGVzX2QpL3N1ZG8uY29uZjsgXAorKwkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA2NDQgJCh0b3BfYnVpbGRkaXIpL2luaXQuZC9zdWRvLmNvbmYgJChERVNURElSKSQodG1wZmlsZXNfZCkvc3Vkby5jb25mOyBcCisgCWZpCisgCisgaW5zdGFsbC1iaW5hcmllczogaW5zdGFsbC1kaXJzICQoUFJPR1MpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNHAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiM2NkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNHAzLmJiCkBAIC0wLDAgKzEsMzYgQEAKK3JlcXVpcmUgc3Vkby5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLnN1ZG8ud3Mvc3Vkby9kaXN0L3N1ZG8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLWNvcnJlY3QtcGF0aC10by1pbml0LmQtYW5kLXRtcGZpbGVzLmQtZmlsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zdWRvLnBhbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzZGJkMWU0N2MxMzYxNzlmZjFiMDE0OTRjMWMwZTc1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE4YTY5N2NiYjExMzg1OTA1ODk0NDg1MGQwOTg0NjQ2MTgyNTQ4MDRjZjk3OTYxZGVlOTI2NDI5ZjAwYTEyMzciCisKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWxpbWl0cyBwYW0tcGx1Z2luLWtleWluaXQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgICAgICAgICAgYWNfY3ZfdHlwZV9yc2l6ZV90PW5vIFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS10bXBmaWxlcy5kPSR7bGliZGlyfS90bXBmaWxlcy5kJywgJy0tZGlzYWJsZS10bXBmaWxlcy5kJywgZCl9IFwKKyAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NjQgJHtXT1JLRElSfS9zdWRvLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc3VkbworCWZpCisKKwljaG1vZCA0MTExICR7RH0ke2JpbmRpcn0vc3VkbworCWNobW9kIDA0NDAgJHtEfSR7c3lzY29uZmRpcn0vc3Vkb2VycworCisJIyBFeHBsaWNpdGx5IHJlbW92ZSB0aGUgJHtsb2NhbHN0YXRlZGlyfS9ydW4gZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9yCisJcm1kaXIgLXAgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3N1ZG8KK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90bXBmaWxlcy5kIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tc3RyaXAtaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGZiYTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogc3lza2xvZ2QtMS41L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lza2xvZ2QtMS41Lm9yaWcvTWFrZWZpbGUJMjAwOS0wNi0wOSAxMzowMjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzeXNrbG9nZC0xLjUvTWFrZWZpbGUJMjAwOS0wNi0wOSAxMzowMzowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjcsOCArMTI3LDggQEAKKyAJcm0gLWYgc3lzbG9nZCBrbG9nZCBrc3ltIHN5c2xvZ190c3Qgb29wc190ZXN0IFRBR1MgdHN5c2xvZ2QgdGtsb2dkCisgCisgaW5zdGFsbF9leGVjOiBzeXNsb2dkIGtsb2dkCistCSR7SU5TVEFMTH0gLW0gNTAwIC1zIHN5c2xvZ2QgJHtCSU5ESVJ9L3N5c2xvZ2QKKy0JJHtJTlNUQUxMfSAtbSA1MDAgLXMga2xvZ2QgJHtCSU5ESVJ9L2tsb2dkCisrCSR7SU5TVEFMTH0gLW0gNTAwIHN5c2xvZ2QgJHtCSU5ESVJ9L3N5c2xvZ2QKKysJJHtJTlNUQUxMfSAtbSA1MDAga2xvZ2QgJHtCSU5ESVJ9L2tsb2dkCisgCisgaW5zdGFsbF9tYW46CisgCSR7SU5TVEFMTH0gLW0gJHtNQU5fUEVSTVN9IHN5c2tsb2dkLjggJHtNQU5ESVJ9L21hbjgvc3lza2xvZ2QuOApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tdmVjdG9yaXphdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWNjMDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1RoZSBjb21waWxlciBzaG91bGQgbm90IGJlIGdlbmVyYXRpbmcgdmVjdG9yaXplZCBpbnN0cnVjdGlvbnMgb24gdGhpcyB0YXJnZXQuCitUaGlzIGlzIGEgd29yayBhcm91bmQgdW50aWwgSSBjYW4gZGV0ZXJtaW5lIHdoeSB0aGlzIGlzIG9jY3VyaW5nIG9uIHRoaXMKK3BhcnRpY3VsYXIgcmVjaXBlCisKK0luZGV4OiBzeXNrbG9nZC0xLjUvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNrbG9nZC0xLjUub3JpZy9NYWtlZmlsZQorKysrIHN5c2tsb2dkLTEuNS9NYWtlZmlsZQorQEAgLTIwLDcgKzIwLDggQEAKKyBDQz0gZ2NjCisgI1NLRkxBR1M9IC1nIC1EU1lTViAtV2FsbAorICNMREZMQUdTPSAtZworLVNLRkxBR1M9ICQoUlBNX09QVF9GTEFHUykgLU8zIC1EU1lTViAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtZm5vLXN0cmVuZ3RoLXJlZHVjZQorK1NLRkxBR1M9ICQoUlBNX09QVF9GTEFHUykgLU8zIC1EU1lTViAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtZm5vLXN0cmVuZ3RoLXJlZHVjZSBcCisrCS1mbm8tdHJlZS12ZWN0b3JpemUKKyAjIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfTEFSR0VGSUxFX1NPVVJDRQorICMgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyAjICQoc2hlbGwgZ2V0Y29uZiBMRlNfU0tGTEFHUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNThmODgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkCkBAIC0wLDAgKzEsMTUxIEBACisjISAvYmluL3NoCisjIC9ldGMvaW5pdC5kL3N5c2tsb2dkOiBzdGFydCB0aGUgc3lzdGVtIGxvZyBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHN5c2tsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFNob3VsZC1TdGFydDogICAgICAgICAkbmV0d29yaworIyBTaG91bGQtU3RvcDogICAgICAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiAgICBTeXN0ZW0gbG9nZ2VyCisjIyMgRU5EIElOSVQgSU5GTworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbgorCitwaWRmaWxlX3N5c2xvZ2Q9L3Zhci9ydW4vc3lzbG9nZC5waWQKK3BpZGZpbGVfa2xvZ2Q9L3Zhci9ydW4va2xvZ2QucGlkCitiaW5wYXRoX3N5c2xvZ2Q9L3NiaW4vc3lzbG9nZAorYmlucGF0aF9rbG9nZD0vc2Jpbi9rbG9nZAorCit0ZXN0IC14ICRiaW5wYXRoIHx8IGV4aXQgMAorCit0ZXN0ICEgLXIgL2V0Yy9kZWZhdWx0L3N5c2xvZ2QgfHwgLiAvZXRjL2RlZmF1bHQvc3lzbG9nZAorCitjcmVhdGVfeGNvbnNvbGUoKQoreworICAgICMgT25seSBwcm9jZWVkIGlmIC9kZXYveGNvbnNvbGUgaXMgdXNlZCBhdCBhbGwKKyAgICBpZiAhIGdyZXAgLXEgJ15bXiNdLiovZGV2L3hjb25zb2xlJyAvZXRjL3N5c2xvZy5jb25mCisgICAgdGhlbgorCXJldHVybgorICAgIGZpCisKKyAgICBpZiBbICEgLWUgL2Rldi94Y29uc29sZSBdOyB0aGVuCisJbWtub2QgLW0gNjQwIC9kZXYveGNvbnNvbGUgcAorICAgIGVsc2UKKwljaG1vZCAwNjQwIC9kZXYveGNvbnNvbGUKKyAgICBmaQorICAgIGNob3duIHJvb3Q6YWRtIC9kZXYveGNvbnNvbGUKKyAgICB0ZXN0ICEgLXggL3NiaW4vcmVzdG9yZWNvbiB8fCAvc2Jpbi9yZXN0b3JlY29uIC9kZXYveGNvbnNvbGUKK30KKworbG9nX2JlZ2luX21zZyAoKSB7CisgICAgZWNobyAtbiAkMQorfQorCitsb2dfZW5kX21zZyAoKSB7CisgICAgZWNobyAkMQorfQorCitsb2dfc3VjY2Vzc19tc2cgKCkgeworICAgIGVjaG8gJDEKK30KKworcnVubmluZygpCit7CisgICAgIyBObyBwaWRmaWxlLCBwcm9iYWJseSBubyBkYWVtb24gcHJlc2VudAorICAgICMKKyAgICBpZiBbICEgLWYgJHBpZGZpbGUgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICBwaWQ9YGNhdCAkcGlkZmlsZV9zeXNsb2dkYAorCisgICAgIyBObyBwaWQsIHByb2JhYmx5IG5vIGRhZW1vbiBwcmVzZW50CisgICAgIworICAgIGlmIFsgLXogIiRwaWQiIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgaWYgWyAhIC1kIC9wcm9jLyRwaWQgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICBjbWQ9YGNhdCAvcHJvYy8kcGlkL2NtZGxpbmUgfCB0ciAiXDAwMCIgIlxuInxoZWFkIC1uIDFgCisKKyAgICAjIE5vIHN5c2xvZ2Q/CisgICAgIworICAgIGlmIFsgIiRjbWQiICE9ICIkYmlucGF0aCIgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICByZXR1cm4gMAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgbG9nX2JlZ2luX21zZyAiU3RhcnRpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgY3JlYXRlX3hjb25zb2xlCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9zeXNsb2dkIC0tICRTWVNMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJTdGFydGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkIC0tbmFtZSBrbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfa2xvZ2QgLS0gJEtMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICBzdG9wKQorICAgIGxvZ19iZWdpbl9tc2cgIlN0b3BwaW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkCisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJTdG9wcGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMgLS1leGVjICRiaW5wYXRoX2tsb2dkIC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKyAgICBsb2dfYmVnaW5fbXNnICJSZWxvYWRpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMyAtLWV4ZWMgJGJpbnBhdGhfa2xvZ2QgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICBsb2dfYmVnaW5fbXNnICJSZXN0YXJ0aW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXJldHJ5IDUgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfc3lzbG9nZCAtLSAkU1lTTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMyAtLWV4ZWMgJGJpbnBhdGhfa2xvZ2QgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVsb2FkLW9yLXJlc3RhcnQpCisgICAgaWYgcnVubmluZworICAgIHRoZW4KKwkkMCByZWxvYWQKKyAgICBlbHNlCisJJDAgc3RhcnQKKyAgICBmaQorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgc3lzbG9nZAorICAgIFJFVFZBTD0kPworICAgIHN0YXR1cyBrbG9nZAorICAgIHJ2YWw9JD8KKyAgICBbICRSRVRWQUwgLWVxIDAgXSAmJiBleGl0ICRydmFsCisgICAgZXhpdCAkUkVUVkFMCisgICAgOzsKKyAgKikKKyAgICBsb2dfc3VjY2Vzc19tc2cgIlVzYWdlOiAvZXRjL2luaXQuZC9zeXNrbG9nZCB7c3RhcnR8c3RvcHxyZWxvYWR8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkLW9yLXJlc3RhcnR8c3RhdHVzfSIKKyAgICBleGl0IDEKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0OWRlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZgpAQCAtMCwwICsxLDcxIEBACisjICAvZXRjL3N5c2xvZy5jb25mCUNvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc3lzbG9nZC4KKyMKKyMgIFBvcnRlZCBmcm9tIGRlYmlhbiBieSBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorIworCisjCisjIEZpcnN0IHNvbWUgc3RhbmRhcmQgbG9nZmlsZXMuICBMb2cgYnkgZmFjaWxpdHkuCisjCisKK2F1dGgsYXV0aHByaXYuKgkJCS92YXIvbG9nL2F1dGgubG9nCisqLio7YXV0aCxhdXRocHJpdi5ub25lCQktL3Zhci9sb2cvc3lzbG9nCisjY3Jvbi4qCQkJCS92YXIvbG9nL2Nyb24ubG9nCitkYWVtb24uKgkJCS0vdmFyL2xvZy9kYWVtb24ubG9nCitrZXJuLioJCQkJLS92YXIvbG9nL2tlcm4ubG9nCitscHIuKgkJCQktL3Zhci9sb2cvbHByLmxvZworbWFpbC4qCQkJCS0vdmFyL2xvZy9tYWlsLmxvZwordXNlci4qCQkJCS0vdmFyL2xvZy91c2VyLmxvZworCisjCisjIExvZ2dpbmcgZm9yIHRoZSBtYWlsIHN5c3RlbS4gIFNwbGl0IGl0IHVwIHNvIHRoYXQKKyMgaXQgaXMgZWFzeSB0byB3cml0ZSBzY3JpcHRzIHRvIHBhcnNlIHRoZXNlIGZpbGVzLgorIworbWFpbC5pbmZvCQkJLS92YXIvbG9nL21haWwuaW5mbworbWFpbC53YXJuCQkJLS92YXIvbG9nL21haWwud2FybgorbWFpbC5lcnIJCQkvdmFyL2xvZy9tYWlsLmVycgorCisjIExvZ2dpbmcgZm9yIElOTiBuZXdzIHN5c3RlbQorIworbmV3cy5jcml0CQkJL3Zhci9sb2cvbmV3cy5jcml0CituZXdzLmVycgkJCS92YXIvbG9nL25ld3MuZXJyCituZXdzLm5vdGljZQkJCS0vdmFyL2xvZy9uZXdzLm5vdGljZQorCisjCisjIFNvbWUgYGNhdGNoLWFsbCcgbG9nZmlsZXMuCisjCisqLj1kZWJ1ZztcCithdXRoLGF1dGhwcml2Lm5vbmU7XAorbmV3cy5ub25lO21haWwubm9uZQktL3Zhci9sb2cvZGVidWcKKworKi49aW5mbzsqLj1ub3RpY2U7Ki49d2FybjtcCithdXRoLGF1dGhwcml2Lm5vbmU7XAorY3JvbixkYWVtb24ubm9uZTtcCittYWlsLG5ld3Mubm9uZQkJLS92YXIvbG9nL21lc3NhZ2VzCisKKyMKKyMgRW1lcmdlbmNpZXMgYXJlIHNlbnQgdG8gZXZlcnlib2R5IGxvZ2dlZCBpbi4KKyMKKyouZW1lcmcJCQkJKgorCisjCisjIEkgbGlrZSB0byBoYXZlIG1lc3NhZ2VzIGRpc3BsYXllZCBvbiB0aGUgY29uc29sZSwgYnV0IG9ubHkgb24gYSB2aXJ0dWFsCisjIGNvbnNvbGUgSSB1c3VhbGx5IGxlYXZlIGlkbGUuCisjCisjZGFlbW9uLG1haWwuKjtcCisjbmV3cy49Y3JpdDtuZXdzLj1lcnI7bmV3cy49bm90aWNlO1wKKyMqLj1kZWJ1ZzsqLj1pbmZvO1wKKyMqLj1ub3RpY2U7Ki49d2FybgkvZGV2L3R0eTgKKworIyBUaGUgbmFtZWQgcGlwZSAvZGV2L3hjb25zb2xlIGlzIGZvciB0aGUgYHhjb25zb2xlJyB1dGlsaXR5LiAgVG8gdXNlIGl0LAorIyB5b3UgbXVzdCBpbnZva2UgYHhjb25zb2xlJyB3aXRoIHRoZSBgLWZpbGUnIG9wdGlvbjoKKyMKKyMgICAgJCB4Y29uc29sZSAtZmlsZSAvZGV2L3hjb25zb2xlIFsuLi5dCisjCisjIE5PVEU6IGFkanVzdCB0aGUgbGlzdCBiZWxvdywgb3IgeW91J2xsIGdvIGNyYXp5IGlmIHlvdSBoYXZlIGEgcmVhc29uYWJseQorIyAgICAgIGJ1c3kgc2l0ZS4uCisjCitkYWVtb24uKjttYWlsLio7XAorbmV3cy5lcnI7XAorKi49ZGVidWc7Ki49aW5mbztcCisqLj1ub3RpY2U7Ki49d2Fybgl8L2Rldi94Y29uc29sZQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Y4YWE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYwpAQCAtMCwwICsxLDU4IEBACitTVU1NQVJZID0gIlN5c3RlbSBMb2cgRGFlbW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoZSBzeXNrbG9nZCBwYWNrYWdlIGltcGxlbWVudHMgdHdvIHN5c3RlbSBsb2cgZGFlbW9uczogc3lzbG9nZCwga2xvZ2QiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZm9kcm9tLm9yZy9wcm9qZWN0cy9zeXNrbG9nZC8iCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgQlNEIgorTElDRU5TRV9zeXNsb2dkID0gIkJTRCIKK0xJQ0VOU0Vfa2xvZ2QgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3lzbG9nZC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTU7bWQ1PTc3ZmZiMmZlYzQ4YzQ2ZDdjYTBhYmIyZDU4MTNlN2ZkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tsb2dkLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xOTttZDU9N2U4N2VkMGFlNjE0MmRlMDc5YmNlNzM4YzEwYzg5OWQgXAorICAgICAgICAgICAgICAgICAgICIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pbmZvZHJvbS5vcmcvcHJvamVjdHMvc3lza2xvZ2QvZG93bmxvYWQvc3lza2xvZ2QtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLXN0cmlwLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lza2xvZ2QgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2U1MDB2MiA9ICIgZmlsZTovL25vLXZlY3Rvcml6YXRpb24ucGF0Y2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJzeXNsb2ciCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZi4ke0JQTn0iCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EU1lTViIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggXAorCQkJJHtEfSR7bWFuZGlyfS9tYW41IFwKKwkJCSR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlvZV9ydW5tYWtlICdCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfScgXAorCQkJJ01BTkRJUj0ke0R9JHttYW5kaXJ9JyBpbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vc3lza2xvZ2QgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZworfQorCisjIHN5c2tsb2dkIHBhY2thZ2UgaGFzIG5vIGludGVybmFsIHN5c3RlbWQgc3VwcG9ydCwgc28gd2Ugd2VpZ2ggYnVzeWJveCdzCisjIHN5c2tsb2dkIHV0aWxpdHkgb3ZlciBpdCBpbiBjYXNlIG9mIHN5c3RlbWQKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnMTAnLCcxMDAnLGQpfSIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic3lzbG9nZCBrbG9nZCBzeXNsb2ctaW5pdCBzeXNsb2ctY29uZiIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZ2RdID0gIiR7YmFzZV9zYmluZGlyfS9zeXNsb2dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tsb2dkXSA9ICIke2Jhc2Vfc2JpbmRpcn0va2xvZ2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWluaXRdID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2ctY29uZl0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZiIKKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlpZiB0ZXN0ICJ4JEQiID0gIngiOyB0aGVuCisJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgorCQkvZXRjL2luaXQuZC9zeXNsb2cgc3RvcAorCWZpCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzVlY2MyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBzeXNrbG9nZC5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImM3MDU5OWFiMGQwMzdmZGU3MjRmNzIxMGMyYzhkN2Y4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNjZjMTg1YWUyM2M5MmU4YjlmZWVlNjZhNmUzZDBiYzk0NGJmNjczMTEyZjUzZTNlY2Y2MmUwOGNlN2MyMDEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNzYxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYwpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIlN5c3RlbSBwZXJmb3JtYW5jZSB0b29scyIKK0RFU0NSSVBUSU9OID0gIlRoZSBzeXNzdGF0IHV0aWxpdGllcyBhcmUgYSBjb2xsZWN0aW9uIG9mIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdG9vbHMgZm9yIExpbnV4LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWJhc3RpZW4uZ29kYXJkLnBhZ2VzcGVyc28tb3JhbmdlLmZyLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitTUkNfVVJJID0gImh0dHA6Ly9wYWdlc3BlcnNvLW9yYW5nZS5mci9zZWJhc3RpZW4uZ29kYXJkL3N5c3N0YXQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzk5X3N5c3N0YXQgXAorICAgICAgICAgICBmaWxlOi8vc3lzc3RhdC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgKz0gImJhc2UtcGFzc3dkIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCBzeXN0ZW1kCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNlbnNvcnMiCitFWFRSQV9PRU1BS0UgKz0gJ0xGTEFHUz0iIicKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJzeXNzdGF0LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImVuYWJsZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgZXhwb3J0IHNhX2xpYl9kaXI9JHtsaWJkaXJ9L3NhCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL2xvZy9zYSB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisKKwlybSAtcmYgJHtEfS92YXIKKwlpbnN0YWxsIC1kICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfc3lzc3RhdCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c3N0YXQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyNATElCRElSQCMke2xpYmRpcn0jZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzc3RhdC5zZXJ2aWNlCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWUgL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorICAgICAgICAgICAgICAgIC9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorICAgICAgICBmaQorfQorCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vc2EiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9zYS8uZGVidWcvIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbGludGwiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwZWMzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdApAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9nL3NhIG5vbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC9zeXNzdGF0LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMDcxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249UmVzZXRzIFN5c3RlbSBBY3Rpdml0eSBMb2dzCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCitVc2VyPXJvb3QKK0V4ZWNTdGFydD1ATElCRElSQC9zYS9zYTEgLS1ib290CisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQyZWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHN5c3N0YXQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGQ4ZTZlNzJkMDU3MTg5YTE2NjA0NjJhNjc4ZDlhZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmViM2E5MGQ4NmZmZDY5Y2Y1Yjg4MTQ0YTg4NzZhZTA1YmQ0MjM4NGY1NTk2NzZmMDgxMDA2NzE1ODlmYTJiYiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMmFlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWdmaXg6IGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjRdCisKK1RoaXMgcGF0Y2ggYXZvaWRzIGhlYXAgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgOgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNAorCitUaGlzIGlzIGEgY2xlYW4gcGF0Y2ggZm9yIHRoZSBHUEx2MiB0YXIgcmVjaXBlLgorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzI1CisKK0luZGV4OiB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjE3Lm9yaWcvbGliL3J0YXBlbGliLmMKKysrKyB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworQEAgLTU3MCw3ICs1NzAsNyBAQCBybXRfcmVhZF9fIChpbnQgaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpCisgCisgICBzcHJpbnRmIChjb21tYW5kX2J1ZmZlciwgIlIlbHVcbiIsICh1bnNpZ25lZCBsb25nKSBsZW5ndGgpOworICAgaWYgKGRvX2NvbW1hbmQgKGhhbmRsZSwgY29tbWFuZF9idWZmZXIpID09IC0xCistICAgICAgfHwgKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikKKysgICAgICB8fCAoKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikgfHwgKHN0YXR1cyA+IGxlbmd0aCkpCisgICAgIHJldHVybiBTQUZFX1JFQURfRVJST1I7CisgCisgICBmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgc3RhdHVzOyBjb3VudGVyICs9IHJsZW4sIGJ1ZmZlciArPSBybGVuKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDU5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRml4IGVycm9ycyB3aGVuIGJ1aWx0IHdpdGggZ2NjIDQuMworIyBQYXRjaCB0YWtlbiBmcm9tIERlYmlhbiBidWcgIzQ1MjA5NgorCitkaWZmIC11ck4gdGFyLTEuMTcub3JpZy9saWIvYXJncC1mbXRzdHJlYW0uaCB0YXItMS4xNy9saWIvYXJncC1mbXRzdHJlYW0uaAorLS0tIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AtZm10c3RyZWFtLmgJMjAwNi0wMS0xMSAxMjoyNDowNS4wMDAwMDAwMDAgLTA4MDAKKysrKyB0YXItMS4xNy9saWIvYXJncC1mbXRzdHJlYW0uaAkyMDEwLTA3LTIyIDIyOjM2OjEyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTE5OCw3ICsxOTgsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIEFSR1BfRlNfRUkKKy0jZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZQorKyAjaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworKyAgICNkZWZpbmUgQVJHUF9GU19FSSBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fKSkKKysgI2Vsc2UKKysgICAjZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZQorKyAjZW5kaWYKKyAjZW5kaWYKKyAKKyBBUkdQX0ZTX0VJIHNpemVfdAorZGlmZiAtdXJOIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AuaCB0YXItMS4xNy9saWIvYXJncC5oCistLS0gdGFyLTEuMTcub3JpZy9saWIvYXJncC5oCTIwMDctMDMtMzAgMDA6MDk6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgdGFyLTEuMTcvbGliL2FyZ3AuaAkyMDEwLTA3LTIyIDIyOjM4OjQ0LjAwMDAwMDAwMCAtMDcwMAorQEAgLTU4MCw3ICs1ODAsMTEgQEAKKyAjIGVuZGlmCisgCisgIyBpZm5kZWYgQVJHUF9FSQorLSMgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fCisrIyAgaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworKyMgICAgZGVmaW5lIEFSR1BfRUkgZXh0ZXJuIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18pKQorKyMgIGVsc2UKKysjICAgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fCisrIyAgZW5kaWYKKyAjIGVuZGlmCisgCisgQVJHUF9FSSB2b2lkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvbTRleHRlbnNpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTM0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBEZWZpbmUgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIG9ubHkgaWYgaXQgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkLgorIyBUaGlzIGlzIG5lZWRlZCB0byBjb25maWd1cmUgY29ycmVjdGx5IHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYuCisKKy0tLSB0YXItMS4xNy9tNC9leHRlbnNpb25zLm00Lm9yaWcJMjAxMC0wNy0yMiAyMjoyMTozNS4wMDAwMDAwMDAgLTA3MDAKKysrKyB0YXItMS4xNy9tNC9leHRlbnNpb25zLm00CTIwMTAtMDctMjIgMjI6MjM6NDEuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA0ICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgNSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC0xNiw2ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisrbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFtdLCBbCisgQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCitAQCAtNDgsNyArNDksNyBAQAorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrXSldKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM5YzQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiR05VIGZpbGUgYXJjaGl2aW5nIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJHTlUgdGFyIHNhdmVzIG1hbnkgZmlsZXMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0YXBlIFwKK29yIGRpc2sgYXJjaGl2ZSwgYW5kIGNhbiByZXN0b3JlIGluZGl2aWR1YWwgZmlsZXMgZnJvbSB0aGUgYXJjaGl2ZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGFyLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3Rhci90YXItJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiArPSAiREVGQVVMVF9STVRfRElSPSR7YmFzZV9zYmluZGlyfSIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSB0YXIgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAorICAgIGxuIC1zIHRhciAke0R9JHtiaW5kaXJ9L2d0YXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgbXYgJHtEfSR7YmluZGlyfS90YXIgJHtEfSR7YmFzZV9iaW5kaXJ9L3RhcgorICAgIG12ICR7RH0ke2JpbmRpcn0vZ3RhciAke0R9JHtiYXNlX2JpbmRpcn0vZ3RhcgorICAgIHJtZGlyICR7RH0ke2JpbmRpcn0vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1ybXQiCisKK0ZJTEVTXyR7UE59LXJtdCA9ICIke2Jhc2Vfc2JpbmRpcn0vcm10KiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidGFyIgorQUxURVJOQVRJVkVfJHtQTn0tcm10ID0gInJtdCIKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitBTFRFUk5BVElWRV8ke1BOfS1ybXRfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW3Rhcl0gPSAiJHtiYXNlX2JpbmRpcn0vdGFyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JtdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGFyLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhiZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorSVNPIEMxMSByZW1vdmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGdldHMoKSBmcm9tIHRoZSBDIGxhbmd1YWdlLCBlZ2xpYmMgMi4xNisgcmVtb3ZlZCBpdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiB0YXItMS4yNy9nbnUvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjI3Lm9yaWcvZ251L3N0ZGlvLmluLmgJMjAxMy0wNi0yOSAwODo1NDoyNi4wMDAwMDAwMDAgKzAzMDAKKysrKyB0YXItMS4yNy9nbnUvc3RkaW8uaW4uaAkyMDEzLTEwLTE2IDE1OjIyOjQ2Ljk3NzIwNDczNyArMDMwMAorQEAgLTcxMCwxMCArNzEwLDEyIEBACisgLyogSXQgaXMgdmVyeSByYXJlIHRoYXQgdGhlIGRldmVsb3BlciBldmVyIGhhcyBmdWxsIGNvbnRyb2wgb2Ygc3RkaW4sCisgICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZzsgYmVzaWRlcywgQzExCisgICAgcmVtb3ZlZCBpdC4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUUworIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAKKyAjaWYgQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAgfHwgQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2EyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjE3LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgdGFyLmluYworCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1BSID0gInIzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbTRleHRlbnNpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vZ2NjNDNidWlsZC5wYXRjaCBcCisgICAgZmlsZTovL2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggXAorICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM2YzRmMWMwNzVkYmYwZjc1YzI5NzM3ZmFhNThmMjkwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE5ZjkwMjFkZGE1MWExNjI5NWU0NzA2ZTgwODcwZTcxZjg3MTA3Njc1ZTUxYzE3NmE0OTFlYmEwZmM0Y2E0OTIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODE2MDAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHRhci5pbmMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLXdpdGgtcG9zaXgtYWNscywgLS13aXRob3V0LXBvc2l4LWFjbHMsIGFjbCwiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSArPSAiZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjhmMzJiMmJjMWVkN2RkZjRjZjRlNGEzOTcxMTM0MWIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwZTRiZmUwNjAyZmVmMzRjZDkwOGQ5MWNmNjM4ZTE3ZWViMDkzOTRkN2I5OGMyNDg3MjE3ZGM0ZDMxNDc1NjIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMF9tYW5fcXVvdGluZy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDY3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZgpAQCAtMCwwICsxLDc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkxOTk1LTAxLTMwIDE5OjUxOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0wOSAxNjo1OTo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzMsNyArMTczLDcgQEAKKyBQYXR0ZXJucyBsaWtlIHRoZXNlIGNhbiBiZSB1c2VkIHdoZW4gdGhlIG1hY2hpbmUgaGFzIGRpZmZlcmVudCBpbnRlcm5ldAorIGFkZHJlc3NlcyB3aXRoIGRpZmZlcmVudCBpbnRlcm5ldCBob3N0bmFtZXMuICBTZXJ2aWNlIHByb3ZpZGVycyBjYW4gdXNlCisgdGhpcyBmYWNpbGl0eSB0byBvZmZlciBGVFAsIEdPUEhFUiBvciBXV1cgYXJjaGl2ZXMgd2l0aCBpbnRlcm5ldCBuYW1lcworLXRoYXQgbWF5IGV2ZW4gYmVsb25nIHRvIGRpZmZlcmVudCBvcmdhbml6YXRpb25zLiBTZWUgYWxzbyB0aGUgYHR3aXN0JworK3RoYXQgbWF5IGV2ZW4gYmVsb25nIHRvIGRpZmZlcmVudCBvcmdhbml6YXRpb25zLiBTZWUgYWxzbyB0aGUgYHR3aXN0XCcKKyBvcHRpb24gaW4gdGhlIGhvc3RzX29wdGlvbnMoNSkgZG9jdW1lbnQuIFNvbWUgc3lzdGVtcyAoU29sYXJpcywKKyBGcmVlQlNEKSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGludGVybmV0IGFkZHJlc3Mgb24gb25lIHBoeXNpY2FsCisgaW50ZXJmYWNlOyB3aXRoIG90aGVyIHN5c3RlbXMgeW91IG1heSBoYXZlIHRvIHJlc29ydCB0byBTTElQIG9yIFBQUAorQEAgLTIzNiwxMCArMjM2LDEwIEBACisgQmVmb3JlIGFjY2VwdGluZyBhIGNsaWVudCByZXF1ZXN0LCB0aGUgd3JhcHBlcnMgY2FuIHVzZSB0aGUgSURFTlQKKyBzZXJ2aWNlIHRvIGZpbmQgb3V0IHRoYXQgdGhlIGNsaWVudCBkaWQgbm90IHNlbmQgdGhlIHJlcXVlc3QgYXQgYWxsLgorIFdoZW4gdGhlIGNsaWVudCBob3N0IHByb3ZpZGVzIElERU5UIHNlcnZpY2UsIGEgbmVnYXRpdmUgSURFTlQgbG9va3VwCistcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYFVOS05PV05AaG9zdCcpIGlzIHN0cm9uZyBldmlkZW5jZSBvZiBhIGhvc3QKKytyZXN1bHQgKHRoZSBjbGllbnQgbWF0Y2hlcyBgVU5LTk9XTkBob3N0XCcpIGlzIHN0cm9uZyBldmlkZW5jZSBvZiBhIGhvc3QKKyBzcG9vZmluZyBhdHRhY2suCisgLlBQCistQSBwb3NpdGl2ZSBJREVOVCBsb29rdXAgcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYEtOT1dOQGhvc3QnKSBpcworK0EgcG9zaXRpdmUgSURFTlQgbG9va3VwIHJlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBLTk9XTkBob3N0XCcpIGlzCisgbGVzcyB0cnVzdHdvcnRoeS4gSXQgaXMgcG9zc2libGUgZm9yIGFuIGludHJ1ZGVyIHRvIHNwb29mIGJvdGggdGhlCisgY2xpZW50IGNvbm5lY3Rpb24gYW5kIHRoZSBJREVOVCBsb29rdXAsIGFsdGhvdWdoIGRvaW5nIHNvIGlzIG11Y2gKKyBoYXJkZXIgdGhhbiBzcG9vZmluZyBqdXN0IGEgY2xpZW50IGNvbm5lY3Rpb24uIEl0IG1heSBhbHNvIGJlIHRoYXQKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfb3B0aW9ucy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNQkxOTk0LTEyLTI4IDE3OjQyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CTIwMDQtMDQtMDkgMTY6NTk6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMTI0LDcgKzEyNCw3IEBACisgdmFsdWUgaXMgdGFrZW4uCisgLlNIIE1JU0NFTExBTkVPVVMKKyAuSVAgImJhbm5lcnMgL3NvbWUvZGlyZWN0b3J5IgorLUxvb2sgZm9yIGEgZmlsZSBpbiBgL3NvbWUvZGlyZWN0b3J5JyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGRhZW1vbgorK0xvb2sgZm9yIGEgZmlsZSBpbiBgL3NvbWUvZGlyZWN0b3J5XCcgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYWVtb24KKyBwcm9jZXNzIChmb3IgZXhhbXBsZSBpbi50ZWxuZXRkIGZvciB0aGUgdGVsbmV0IHNlcnZpY2UpLCBhbmQgY29weSBpdHMKKyBjb250ZW50cyB0byB0aGUgY2xpZW50LiBOZXdsaW5lIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5CisgY2FycmlhZ2UtcmV0dXJuIG5ld2xpbmUsIGFuZCAlPGxldHRlcj4gc2VxdWVuY2VzIGFyZSBleHBhbmRlZCAoc2VlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44IHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLjgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLjgJMTk5Ni0wMi0xMSAxNzowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CTIwMDQtMDQtMDkgMTc6MDA6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMjYsNyArMjYsNyBAQAorIEEgZGFlbW9uIHByb2Nlc3MgbmFtZS4gVHlwaWNhbGx5LCB0aGUgbGFzdCBjb21wb25lbnQgb2YgYSBkYWVtb24KKyBleGVjdXRhYmxlIHBhdGhuYW1lLgorIC5JUCBjbGllbnQKKy1BIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd24nIG9yIGBwYXJhbm9pZCcKKytBIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd25cJyBvciBgcGFyYW5vaWRcJworIHdpbGRjYXJkIHBhdHRlcm5zLgorIC5zcAorIFdoZW4gYSBjbGllbnQgaG9zdCBuYW1lIGlzIHNwZWNpZmllZCwgXGZJdGNwZG1hdGNoXGZSIGdpdmVzIGEKK0BAIC0zNywxMyArMzcsMTMgQEAKKyAuUFAKKyBPcHRpb25hbCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgd2l0aCB0aGUgXGZJZGFlbW9uQHNlcnZlclxmUiBmb3JtOgorIC5JUCBzZXJ2ZXIKKy1BIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd24nIG9yIGBwYXJhbm9pZCcKKy13aWxkY2FyZCBwYXR0ZXJucy4gVGhlIGRlZmF1bHQgc2VydmVyIG5hbWUgaXMgYHVua25vd24nLgorK0EgaG9zdCBuYW1lIG9yIG5ldHdvcmsgYWRkcmVzcywgb3Igb25lIG9mIHRoZSBgdW5rbm93blwnIG9yIGBwYXJhbm9pZFwnCisrd2lsZGNhcmQgcGF0dGVybnMuIFRoZSBkZWZhdWx0IHNlcnZlciBuYW1lIGlzIGB1bmtub3duXCcuCisgLlBQCisgT3B0aW9uYWwgaW5mb3JtYXRpb24gc3BlY2lmaWVkIHdpdGggdGhlIFxmSXVzZXJAY2xpZW50XGZSIGZvcm06CisgLklQIHVzZXIKKyBBIGNsaWVudCB1c2VyIGlkZW50aWZpZXIuIFR5cGljYWxseSwgYSBsb2dpbiBuYW1lIG9yIGEgbnVtZXJpYyB1c2VyaWQuCistVGhlIGRlZmF1bHQgdXNlciBuYW1lIGlzIGB1bmtub3duJy4KKytUaGUgZGVmYXVsdCB1c2VyIG5hbWUgaXMgYHVua25vd25cJy4KKyAuU0ggT1BUSU9OUworIC5JUCAtZAorIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmRlbnlcZlIgZmlsZXMgaW4gdGhlIGN1cnJlbnQKK0BAIC03MCw3ICs3MCw3IEBACisgLnRpICs1CisgdGNwZG1hdGNoIGluLnRlbG5ldGQgcGFyYW5vaWQKKyAuUFAKKy1PbiBzb21lIHN5c3RlbXMsIGRhZW1vbiBuYW1lcyBoYXZlIG5vIGBpbi4nIHByZWZpeCwgb3IgXGZJdGNwZG1hdGNoXGZSCisrT24gc29tZSBzeXN0ZW1zLCBkYWVtb24gbmFtZXMgaGF2ZSBubyBgaW4uXCcgcHJlZml4LCBvciBcZkl0Y3BkbWF0Y2hcZlIKKyBtYXkgbmVlZCBzb21lIGhlbHAgdG8gbG9jYXRlIHRoZSBpbmV0ZCBjb25maWd1cmF0aW9uIGZpbGUuCisgLlNIIEZJTEVTCisgLlBQCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAxX21hbl9wb3J0YWJpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTczNWJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAxX21hbl9wb3J0YWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI1MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zCTIwMDUtMDMtMDkgMTg6MzA6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMwkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTMsNyArMyw3IEBACisgaG9zdHNfYWNjZXNzLCBob3N0c19jdGwsIHJlcXVlc3RfaW5pdCwgcmVxdWVzdF9zZXQgXC0gYWNjZXNzIGNvbnRyb2wgbGlicmFyeQorIC5TSCBTWU5PUFNJUworIC5uZgorLSNpbmNsdWRlICJ0Y3BkLmgiCisrI2luY2x1ZGUgPHRjcGQuaD4KKyAKKyBleHRlcm4gaW50IGFsbG93X3NldmVyaXR5OworIGV4dGVybiBpbnQgZGVueV9zZXZlcml0eTsKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNS0wMy0wOSAxODozMDoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDUtMDMtMDkgMTg6MzA6MTguMDAwMDAwMDAwICswMTAwCitAQCAtOCw5ICs4LDkgQEAgbmFtZSwgaG9zdCBuYW1lL2FkZHJlc3MpIHBhdHRlcm5zLiAgRXhhbQorIGltcGF0aWVudCByZWFkZXIgaXMgZW5jb3VyYWdlZCB0byBza2lwIHRvIHRoZSBFWEFNUExFUyBzZWN0aW9uIGZvciBhCisgcXVpY2sgaW50cm9kdWN0aW9uLgorIC5QUAorLUFuIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGlzIGRlc2NyaWJlZCBpbiB0aGUKKy1cZklob3N0c19vcHRpb25zXGZSKDUpIGRvY3VtZW50LiBUaGUgZXh0ZW5zaW9ucyBhcmUgdHVybmVkIG9uIGF0CistcHJvZ3JhbSBidWlsZCB0aW1lIGJ5IGJ1aWxkaW5nIHdpdGggLURQUk9DRVNTX09QVElPTlMuCisrVGhlIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGlzIGRlc2NyaWJlZCBpbiB0aGUKKytcZklob3N0c19vcHRpb25zXGZSKDUpIGRvY3VtZW50LiBcZkJOb3RlIHRoYXQgdGhpcyBsYW5ndWFnZSBzdXBlcnNlZGVzCisrdGhlIG1lYW5pbmcgb2YgXGZJc2hlbGxfY29tbWFuZFxmQiBhcyBkb2N1bWVudGVkIGJlbG93LlxmUgorIC5QUAorIEluIHRoZSBmb2xsb3dpbmcgdGV4dCwgXGZJZGFlbW9uXGZSIGlzIHRoZSB0aGUgcHJvY2VzcyBuYW1lIG9mIGEKKyBuZXR3b3JrIGRhZW1vbiBwcm9jZXNzLCBhbmQgXGZJY2xpZW50XGZSIGlzIHRoZSBuYW1lIGFuZC9vciBhZGRyZXNzIG9mCitAQCAtMzQ2LDggKzM0Niw4IEBAIGluLnRmdHBkOiBMT0NBTCwgLm15LmRvbWFpbgorIC9ldGMvaG9zdHMuZGVueToKKyAuaW4gKzMKKyAubmYKKy1pbi50ZnRwZDogQUxMOiAoL3NvbWUvd2hlcmUvc2FmZV9maW5nZXIgLWwgQCVoIHwgXFwKKy0JL3Vzci91Y2IvbWFpbCAtcyAlZC0laCByb290KSAmCisraW4udGZ0cGQ6IEFMTDogKC91c3Ivc2Jpbi9zYWZlX2ZpbmdlciAtbCBAJWggfCBcXAorKwkvdXNyL2Jpbi9tYWlsIC1zICVkLSVoIHJvb3QpICYKKyAuZmkKKyAuUFAKKyBUaGUgc2FmZV9maW5nZXIgY29tbWFuZCBjb21lcyB3aXRoIHRoZSB0Y3BkIHdyYXBwZXIgYW5kIHNob3VsZCBiZQorQEAgLTM4Myw2ICszODMsNyBAQCB0aGF0IHNob3VsZG5cJ3QuICBBbGwgcHJvYmxlbXMgYXJlIHJlcG9yCisgLmZpCisgLlNIIFNFRSBBTFNPCisgLm5mCisraG9zdHNfb3B0aW9ucyg1KSBleHRlbmRlZCBzeW50YXguCisgdGNwZCg4KSB0Y3AvaXAgZGFlbW9uIHdyYXBwZXIgcHJvZ3JhbS4KKyB0Y3BkY2hrKDgpLCB0Y3BkbWF0Y2goOCksIHRlc3QgcHJvZ3JhbXMuCisgLlNIIEJVR1MKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUJMjAwNS0wMy0wOSAxODozMDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIsMTAgKzIsOCBAQAorIC5TSCBOQU1FCisgaG9zdHNfb3B0aW9ucyBcLSBob3N0IGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGV4dGVuc2lvbnMKKyAuU0ggREVTQ1JJUFRJT04KKy1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZSBkZXNjcmliZWQKKy1pbiB0aGUgaG9zdHNfYWNjZXNzKDUpIGRvY3VtZW50LiBUaGUgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBhdCBwcm9ncmFtCistYnVpbGQgdGltZS4gRm9yIGV4YW1wbGUsIGJ5IGVkaXRpbmcgdGhlIE1ha2VmaWxlIGFuZCB0dXJuaW5nIG9uIHRoZSAKKy1QUk9DRVNTX09QVElPTlMgY29tcGlsZS10aW1lIG9wdGlvbi4KKytUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZSBkZXNjcmliZWQKKytpbiB0aGUgaG9zdHNfYWNjZXNzKDUpIGRvY3VtZW50LgorIC5QUAorIFRoZSBleHRlbnNpYmxlIGxhbmd1YWdlIHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgLnNwCitAQCAtNTgsMTIgKzU2LDEyIEBAIE5vdGljZSB0aGUgbGVhZGluZyBkb3Qgb24gdGhlIGRvbWFpbiBuYW0KKyBFeGVjdXRlLCBpbiBhIGNoaWxkIHByb2Nlc3MsIHRoZSBzcGVjaWZpZWQgc2hlbGwgY29tbWFuZCwgYWZ0ZXIKKyBwZXJmb3JtaW5nIHRoZSAlPGxldHRlcj4gZXhwYW5zaW9ucyBkZXNjcmliZWQgaW4gdGhlIGhvc3RzX2FjY2Vzcyg1KQorIG1hbnVhbCBwYWdlLiAgVGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgd2l0aCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIKKy1jb25uZWN0ZWQgdG8gdGhlIG51bGwgZGV2aWNlLCBzbyB0aGF0IGl0IHdvblwndCBtZXNzIHVwIHRoZQorK2Nvbm5lY3RlZCB0byB0aGUgbnVsbCBkZXZpY2UsIHNvIHRoYXQgaXQgd29uJ3QgbWVzcyB1cCB0aGUKKyBjb252ZXJzYXRpb24gd2l0aCB0aGUgY2xpZW50IGhvc3QuIEV4YW1wbGU6CisgLnNwCisgLm5mCisgLnRpICszCistc3Bhd24gKC9zb21lL3doZXJlL3NhZmVfZmluZ2VyIC1sIEAlaCB8IC91c3IvdWNiL21haWwgcm9vdCkgJgorK3NwYXduICgvdXNyL3NiaW4vc2FmZV9maW5nZXIgLWwgQCVoIHwgL3Vzci9iaW4vbWFpbCByb290KSAmCisgLmZpCisgLnNwCisgZXhlY3V0ZXMsIGluIGEgYmFja2dyb3VuZCBjaGlsZCBwcm9jZXNzLCB0aGUgc2hlbGwgY29tbWFuZCAic2FmZV9maW5nZXIKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2luZXRjZi5jIHRjcF93cmFwcGVyc183LjYvaW5ldGNmLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaW5ldGNmLmMJMTk5Ny0wMi0xMiAwMjoxMzoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2luZXRjZi5jCTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjYsMTMgKzI2LDE3IEBAIGV4dGVybiB2b2lkIGV4aXQoKTsKKyAgICogZ3Vlc3Nlcy4gU2hvcnRlciBuYW1lcyBmb2xsb3cgbG9uZ2VyIG9uZXMuCisgICAqLworIGNoYXIgICAqaW5ldF9maWxlc1tdID0geworKyNpZiAwCisgICAgICIvcHJpdmF0ZS9ldGMvaW5ldGQuY29uZiIsCQkvKiBORVhUICovCisgICAgICIvZXRjL2luZXQvaW5ldGQuY29uZiIsCQkvKiBTWVNWNCAqLworICAgICAiL3Vzci9ldGMvaW5ldGQuY29uZiIsCQkvKiBJUklYPz8gKi8KKysjZW5kaWYKKyAgICAgIi9ldGMvaW5ldGQuY29uZiIsCQkJLyogQlNEICovCisrI2lmIDAKKyAgICAgIi9ldGMvbmV0L3RsaWQuY29uZiIsCQkvKiBTWVNWND8/ICovCisgICAgICIvZXRjL3NhZi90bGlkLmNvbmYiLAkJLyogU1lTVjQ/PyAqLworICAgICAiL2V0Yy90bGlkLmNvbmYiLAkJCS8qIFNZU1Y0Pz8gKi8KKysjZW5kaWYKKyAgICAgMCwKKyB9OworIAorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC44IHRjcF93cmFwcGVyc183LjYvdGNwZC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuOAkxOTk2LTAyLTIxIDE2OjM5OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC44CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMTIsNyArMTIsMTEgQEAgVGhlIHByb2dyYW0gc3VwcG9ydHMgYm90aCA0LjNCU0Qtc3R5bGUgcworIFRMSS4gIEZ1bmN0aW9uYWxpdHkgbWF5IGJlIGxpbWl0ZWQgd2hlbiB0aGUgcHJvdG9jb2wgdW5kZXJuZWF0aCBUTEkgaXMKKyBub3QgYW4gaW50ZXJuZXQgcHJvdG9jb2wuCisgLlBQCistT3BlcmF0aW9uIGlzIGFzIGZvbGxvd3M6IHdoZW5ldmVyIGEgcmVxdWVzdCBmb3Igc2VydmljZSBhcnJpdmVzLCB0aGUKKytUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIG1vZGVzIG9mIG9wZXJhdGlvbjogZXhlY3V0aW9uIG9mIFxmSXRjcGRcZlAKKytiZWZvcmUgYSBzZXJ2aWNlIHN0YXJ0ZWQgYnkgXGZJaW5ldGRcZlAsIG9yIGxpbmtpbmcgYSBkYWVtb24gd2l0aAorK3RoZSBcZklsaWJ3cmFwXGZQIHNoYXJlZCBsaWJyYXJ5IGFzIGRvY3VtZW50ZWQgaW4gdGhlIFxmSWhvc3RzX2FjY2Vzc1xmUigzKQorK21hbnVhbCBwYWdlLiBPcGVyYXRpb24gd2hlbiBzdGFydGVkIGJ5IFxmSWluZXRkXGZQCisraXMgYXMgZm9sbG93czogd2hlbmV2ZXIgYSByZXF1ZXN0IGZvciBzZXJ2aWNlIGFycml2ZXMsIHRoZQorIFxmSWluZXRkXGZQIGRhZW1vbiBpcyB0cmlja2VkIGludG8gcnVubmluZyB0aGUgXGZJdGNwZFxmUCBwcm9ncmFtCisgaW5zdGVhZCBvZiB0aGUgZGVzaXJlZCBzZXJ2ZXIuIFxmSXRjcGRcZlAgbG9ncyB0aGUgcmVxdWVzdCBhbmQgZG9lcworIHNvbWUgYWRkaXRpb25hbCBjaGVja3MuIFdoZW4gYWxsIGlzIHdlbGwsIFxmSXRjcGRcZlAgcnVucyB0aGUKK0BAIC04OCwxMSArOTIsMTEgQEAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAuc3AKKyAuaW4gKzUKKyAjIG1rZGlyIC9vdGhlci9wbGFjZQorLSMgbXYgL3Vzci9ldGMvaW4uZmluZ2VyZCAvb3RoZXIvcGxhY2UKKy0jIGNwIHRjcGQgL3Vzci9ldGMvaW4uZmluZ2VyZAorKyMgbXYgL3Vzci9zYmluL2luLmZpbmdlcmQgL290aGVyL3BsYWNlCisrIyBjcCB0Y3BkIC91c3Ivc2Jpbi9pbi5maW5nZXJkCisgLmZpCisgLlBQCistVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL2V0Yy4gT24gc29tZQorK1RoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluLiBPbiBzb21lCisgc3lzdGVtcywgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluIG9yIGluIC91c3IvbGliZXhlYywgb3IgaGF2ZQorIG5vIGBpbi5cJyBwcmVmaXggdG8gdGhlaXIgbmFtZS4KKyAuU0ggRVhBTVBMRSAyCitAQCAtMTAxLDM1ICsxMDUsMzQgQEAgYXJlIGxlZnQgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2UuCisgLlBQCisgSW4gb3JkZXIgdG8gbW9uaXRvciBhY2Nlc3MgdG8gdGhlIFxmSWZpbmdlclxmUiBzZXJ2aWNlLCBwZXJmb3JtIHRoZQorIGZvbGxvd2luZyBlZGl0cyBvbiB0aGUgXGZJaW5ldGRcZlIgY29uZmlndXJhdGlvbiBmaWxlICh1c3VhbGx5IAorLVxmSS9ldGMvaW5ldGQuY29uZlxmUiBvciBcZkkvZXRjL2luZXQvaW5ldGQuY29uZlxmUik6CisrXGZJL2V0Yy9pbmV0ZC5jb25mXGZSKToKKyAubmYKKyAuc3AKKyAudGkgKzUKKy1maW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9ldGMvaW4uZmluZ2VyZCAgaW4uZmluZ2VyZAorK2ZpbmdlciAgc3RyZWFtICB0Y3AgIG5vd2FpdCAgbm9ib2R5ICAvdXNyL3NiaW4vaW4uZmluZ2VyZCAgaW4uZmluZ2VyZAorIC5zcAorIGJlY29tZXM6CisgLnNwCisgLnRpICs1CistZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC9zb21lL3doZXJlL3RjcGQgICAgIGluLmZpbmdlcmQKKytmaW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9zYmluL3RjcGQgICAgIGluLmZpbmdlcmQKKyAuc3AKKyAuZmkKKyAuUFAKKy1UaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3IvZXRjLiBPbiBzb21lCisrVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4uIE9uIHNvbWUKKyBzeXN0ZW1zLCBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4gb3IgaW4gL3Vzci9saWJleGVjLCB0aGUKKyBkYWVtb25zIGhhdmUgbm8gYGluLlwnIHByZWZpeCB0byB0aGVpciBuYW1lLCBvciB0aGVyZSBpcyBubyB1c2VyaWQKKyBmaWVsZCBpbiB0aGUgaW5ldGQgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFNpbWlsYXIgY2hhbmdlcyB3aWxsIGJlIG5lZWRlZCBmb3IgdGhlIG90aGVyIHNlcnZpY2VzIHRoYXQgYXJlIHRvIGJlCisgY292ZXJlZCBieSBcZkl0Y3BkXGZSLiAgU2VuZCBhIGBraWxsIC1IVVBcJyB0byB0aGUgXGZJaW5ldGRcZlIoOCkKKy1wcm9jZXNzIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLiBBSVggdXNlcnMgbWF5IGFsc28gaGF2ZSB0bworLWV4ZWN1dGUgdGhlIGBpbmV0aW1wXCcgY29tbWFuZC4KKytwcm9jZXNzIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLgorIC5TSCBFWEFNUExFIDMKKyBJbiB0aGUgY2FzZSBvZiBkYWVtb25zIHRoYXQgZG8gbm90IGxpdmUgaW4gYSBjb21tb24gZGlyZWN0b3J5ICgic2VjcmV0IgorIG9yIG90aGVyd2lzZSksIGVkaXQgdGhlIFxmSWluZXRkXGZSIGNvbmZpZ3VyYXRpb24gZmlsZSBzbyB0aGF0IGl0Cisgc3BlY2lmaWVzIGFuIGFic29sdXRlIHBhdGggbmFtZSBmb3IgdGhlIHByb2Nlc3MgbmFtZSBmaWVsZC4gRm9yIGV4YW1wbGU6CisgLm5mCisgLnNwCistICAgIG50YWxrICBkZ3JhbSAgdWRwICB3YWl0ICByb290ICAvc29tZS93aGVyZS90Y3BkICAvdXNyL2xvY2FsL2xpYi9udGFsa2QKKysgICAgbnRhbGsgIGRncmFtICB1ZHAgIHdhaXQgIHJvb3QgIC91c3Ivc2Jpbi90Y3BkICAvdXNyL2xvY2FsL2xpYi9udGFsa2QKKyAuc3AKKyAuZmkKKyAuUFAKK0BAIC0xNjQsNiArMTY3LDcgQEAgVGhlIGRlZmF1bHQgbG9jYXRpb25zIG9mIHRoZSBob3N0IGFjY2VzcworIC5TSCBTRUUgQUxTTworIC5uYQorIC5uZgorK2hvc3RzX2FjY2VzcygzKSwgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBsaWJ3cmFwIGxpYnJhcnkuCisgaG9zdHNfYWNjZXNzKDUpLCBmb3JtYXQgb2YgdGhlIHRjcGQgYWNjZXNzIGNvbnRyb2wgdGFibGVzLgorIHN5c2xvZy5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIHN5c2xvZ2QgY29udHJvbCBmaWxlLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay44IHRjcF93cmFwcGVyc183LjYvdGNwZGNoay44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuOAkxOTk1LTAxLTA4IDE3OjAwOjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay44CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtOSw4ICs5LDggQEAgdGNwZGNoayBbLWFdIFstZF0gWy1pIGluZXRfY29uZl0gWy12XQorIHBvdGVudGlhbCBhbmQgcmVhbCBwcm9ibGVtcyBpdCBjYW4gZmluZC4gVGhlIHByb2dyYW0gZXhhbWluZXMgdGhlCisgXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCBmaWxlcyAoYnkgZGVmYXVsdCwgdGhlc2UgYXJlCisgXGZJL2V0Yy9ob3N0cy5hbGxvd1xmUiBhbmQgXGZJL2V0Yy9ob3N0cy5kZW55XGZSKSwgYW5kIGNvbXBhcmVzIHRoZQorLWVudHJpZXMgaW4gdGhlc2UgZmlsZXMgYWdhaW5zdCBlbnRyaWVzIGluIHRoZSBcZklpbmV0ZFxmUiBvciBcZkl0bGlkXGZSCistbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGVzLgorK2VudHJpZXMgaW4gdGhlc2UgZmlsZXMgYWdhaW5zdCBlbnRyaWVzIGluIHRoZSBcZklpbmV0ZFxmUgorK25ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFxmSXRjcGRjaGtcZlIgcmVwb3J0cyBwcm9ibGVtcyBzdWNoIGFzIG5vbi1leGlzdGVudCBwYXRobmFtZXM7IHNlcnZpY2VzCisgdGhhdCBhcHBlYXIgaW4gXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCBydWxlcywgYnV0IGFyZSBub3QgY29udHJvbGxlZAorQEAgLTI2LDE0ICsyNiwxMyBAQCBwcm9ibGVtLgorIC5TSCBPUFRJT05TCisgLklQIC1hCisgUmVwb3J0IGFjY2VzcyBjb250cm9sIHJ1bGVzIHRoYXQgcGVybWl0IGFjY2VzcyB3aXRob3V0IGFuIGV4cGxpY2l0CistQUxMT1cga2V5d29yZC4gVGhpcyBhcHBsaWVzIG9ubHkgd2hlbiB0aGUgZXh0ZW5kZWQgYWNjZXNzIGNvbnRyb2wKKy1sYW5ndWFnZSBpcyBlbmFibGVkIChidWlsZCB3aXRoIC1EUFJPQ0VTU19PUFRJT05TKS4KKytBTExPVyBrZXl3b3JkLgorIC5JUCAtZAorIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmRlbnlcZlIgZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmVzLgorIC5JUCAiLWkgaW5ldF9jb25mIgorIFNwZWNpZnkgdGhpcyBvcHRpb24gd2hlbiBcZkl0Y3BkY2hrXGZSIGlzIHVuYWJsZSB0byBmaW5kIHlvdXIKKy1cZklpbmV0ZC5jb25mXGZSIG9yIFxmSXRsaWQuY29uZlxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3Igd2hlbgorK1xmSWluZXRkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKyB5b3Ugc3VzcGVjdCB0aGF0IHRoZSBwcm9ncmFtIHVzZXMgdGhlIHdyb25nIG9uZS4KKyAuSVAgLXYKKyBEaXNwbGF5IHRoZSBjb250ZW50cyBvZiBlYWNoIGFjY2VzcyBjb250cm9sIHJ1bGUuICBEYWVtb24gbGlzdHMsIGNsaWVudAorQEAgLTU0LDcgKzUzLDYgQEAgdGNwZG1hdGNoKDgpLCBleHBsYWluIHdoYXQgdGNwZCB3b3VsZCBkbworIGhvc3RzX2FjY2Vzcyg1KSwgZm9ybWF0IG9mIHRoZSB0Y3BkIGFjY2VzcyBjb250cm9sIHRhYmxlcy4KKyBob3N0c19vcHRpb25zKDUpLCBmb3JtYXQgb2YgdGhlIGxhbmd1YWdlIGV4dGVuc2lvbnMuCisgaW5ldGQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSBpbmV0ZCBjb250cm9sIGZpbGUuCistdGxpZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIHRsaWQgY29udHJvbCBmaWxlLgorIC5TSCBBVVRIT1JTCisgLm5hCisgLm5mCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44CTIwMDUtMDMtMDkgMTg6MzA6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDcgKzEzLDcgQEAgcmVxdWVzdCBmb3Igc2VydmljZS4gIEV4YW1wbGVzIGFyZSBnaXZlbgorIFRoZSBwcm9ncmFtIGV4YW1pbmVzIHRoZSBcZkl0Y3BkXGZSIGFjY2VzcyBjb250cm9sIHRhYmxlcyAoZGVmYXVsdAorIFxmSS9ldGMvaG9zdHMuYWxsb3dcZlIgYW5kIFxmSS9ldGMvaG9zdHMuZGVueVxmUikgYW5kIHByaW50cyBpdHMKKyBjb25jbHVzaW9uLiAgRm9yIG1heGltYWwgYWNjdXJhY3ksIGl0IGV4dHJhY3RzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKy1mcm9tIHlvdXIgXGZJaW5ldGRcZlIgb3IgXGZJdGxpZFxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZS4KKytmcm9tIHlvdXIgXGZJaW5ldGRcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUuCisgLlBQCisgV2hlbiBcZkl0Y3BkbWF0Y2hcZlIgZmluZHMgYSBtYXRjaCBpbiB0aGUgYWNjZXNzIGNvbnRyb2wgdGFibGVzLCBpdAorIGlkZW50aWZpZXMgdGhlIG1hdGNoZWQgcnVsZS4gSW4gYWRkaXRpb24sIGl0IGRpc3BsYXlzIHRoZSBvcHRpb25hbAorQEAgLTUwLDcgKzUwLDcgQEAgRXhhbWluZSBcZklob3N0cy5hbGxvd1xmUiBhbmQgXGZJaG9zdHMuZAorIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZXMuCisgLklQICItaSBpbmV0X2NvbmYiCisgU3BlY2lmeSB0aGlzIG9wdGlvbiB3aGVuIFxmSXRjcGRtYXRjaFxmUiBpcyB1bmFibGUgdG8gZmluZCB5b3VyCistXGZJaW5ldGQuY29uZlxmUiBvciBcZkl0bGlkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKytcZklpbmV0ZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisgeW91IHN1c3BlY3QgdGhhdCB0aGUgcHJvZ3JhbSB1c2VzIHRoZSB3cm9uZyBvbmUuCisgLlNIIEVYQU1QTEVTCisgVG8gcHJlZGljdCBob3cgXGZJdGNwZFxmUiB3b3VsZCBoYW5kbGUgYSB0ZWxuZXQgcmVxdWVzdCBmcm9tIHRoZSBsb2NhbAorQEAgLTg2LDcgKzg2LDYgQEAgdGNwZGNoayg4KSwgdGNwZCBjb25maWd1cmF0aW9uIGNoZWNrZXIKKyBob3N0c19hY2Nlc3MoNSksIGZvcm1hdCBvZiB0aGUgdGNwZCBhY2Nlc3MgY29udHJvbCB0YWJsZXMuCisgaG9zdHNfb3B0aW9ucyg1KSwgZm9ybWF0IG9mIHRoZSBsYW5ndWFnZSBleHRlbnNpb25zLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorLXRsaWQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSB0bGlkIGNvbnRyb2wgZmlsZS4KKyAuU0ggQVVUSE9SUworIC5uYQorIC5uZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMTg4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2VlIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTc4NDcKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTg6NTQ6MzMuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE4OjU0OjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTg5LDYgKzg5LDEwIEBACisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisrLklQIFwoYnUKKytXaWxkY2FyZHMgYCpcJyBhbmQgYD9cJyBjYW4gYmUgdXNlZCB0byBtYXRjaCBob3N0bmFtZXMgb3IgSVAgYWRkcmVzc2VzLiAgVGhpcworK21ldGhvZCBvZiBtYXRjaGluZyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBuZXQvbWFza1wnIG1hdGNoaW5nLAorK2hvc3RuYW1lIG1hdGNoaW5nIGJlZ2lubmluZyB3aXRoIGAuXCcgb3IgSVAgYWRkcmVzcyBtYXRjaGluZyBlbmRpbmcgd2l0aCBgLlwnLgorIC5TSCBXSUxEQ0FSRFMKKyBUaGUgYWNjZXNzIGNvbnRyb2wgbGFuZ3VhZ2Ugc3VwcG9ydHMgZXhwbGljaXQgd2lsZGNhcmRzOgorIC5JUCBBTEwKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkxOTk3LTAyLTEyIDAyOjEzOjIzLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxODo1MjoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yODksNiArMjg5LDExIEBACisgeworICAgICBpbnQgICAgIG47CisgCisrI2lmbmRlZiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HCisrICAgIGlmIChzdHJjaHIodG9rLCAnKicpIHx8IHN0cmNocih0b2ssJz8nKSkgeyAgLyogY29udGFpbnMgJyonIG9yICc/JyAqLworKyAgICAgICAgcmV0dXJuIChtYXRjaF9wYXR0ZXJuX3lsbyhzdHJpbmcsdG9rKSk7IAkgICAgICAgCisrICAgIH0gZWxzZSAKKysjZW5kaWYgICAgCisgICAgIGlmICh0b2tbMF0gPT0gJy4nKSB7CQkJLyogc3VmZml4ICovCisgCW4gPSBzdHJsZW4oc3RyaW5nKSAtIHN0cmxlbih0b2spOworIAlyZXR1cm4gKG4gPiAwICYmIFNUUl9FUSh0b2ssIHN0cmluZyArIG4pKTsKK0BAIC0zMjksMyArMzM0LDcxIEBACisgICAgIH0KKyAgICAgcmV0dXJuICgoYWRkciAmIG1hc2spID09IG5ldCk7CisgfQorKworKyNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworKy8qIE5vdGU6IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiBhZGFwdGVkIGluIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkKKysgICBmcm9tIFRhdHUgWWxvbmVuJ3MgbGFzdCBTU0ggdmVyc2lvbiB1bmRlciBmcmVlIGxpY2Vuc2UgYnkgCisrICAgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4uCisrCisrICAgQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKKysqLworKworKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoZXMgdGhlIHBhdHRlcm4gKHdoaWNoIG1heSBjb250YWluCisrICAgPyBhbmQgKiBhcyB3aWxkY2FyZHMpLCBhbmQgemVybyBpZiBpdCBkb2VzIG5vdCBtYXRjaC4gKi8KKysJICAKKytpbnQgbWF0Y2hfcGF0dGVybl95bG8oY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqcGF0dGVybikKKyt7CisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBhY2NlcHQgaWYgYWxzbyBhdCBlbmQgb2Ygc3RyaW5nLiAqLworKyAgICAgIGlmICghKnBhdHRlcm4pCisrICAgICAgICByZXR1cm4gISpzOworKworKyAgICAgIC8qIFByb2Nlc3MgJyonLiAqLworKyAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpCisrICAgICAgICB7CisrCSAgLyogU2tpcCB0aGUgYXN0ZXJpc2suICovCisrCSAgcGF0dGVybisrOworKworKwkgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBhY2NlcHQgaW1tZWRpYXRlbHkuICovCisrICAgICAgICAgIGlmICghKnBhdHRlcm4pCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrCSAgLyogSWYgbmV4dCBjaGFyYWN0ZXIgaW4gcGF0dGVybiBpcyBrbm93biwgb3B0aW1pemUuICovCisrICAgICAgICAgIGlmICgqcGF0dGVybiAhPSAnPycgJiYgKnBhdHRlcm4gIT0gJyonKQorKyAgICAgICAgICAgIHsKKysJICAgICAgLyogTG9vayBpbnN0YW5jZXMgb2YgdGhlIG5leHQgY2hhcmFjdGVyIGluIHBhdHRlcm4sIGFuZCB0cnkKKysJCSB0byBtYXRjaCBzdGFydGluZyBmcm9tIHRob3NlLiAqLworKyAgICAgICAgICAgICAgZm9yICg7ICpzOyBzKyspCisrICAgICAgICAgICAgICAgIGlmICgqcyA9PSAqcGF0dGVybiAmJgorKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hfcGF0dGVybl95bG8ocyArIDEsIHBhdHRlcm4gKyAxKSkKKysgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysJICAgICAgLyogRmFpbGVkLiAqLworKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgfQorKworKwkgIC8qIE1vdmUgYWhlYWQgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgYW5kIHRyeSB0byBtYXRjaCBhdCBlYWNoCisrCSAgICAgcG9zaXRpb24uICovCisrICAgICAgICAgIGZvciAoOyAqczsgcysrKQorKyAgICAgICAgICAgIGlmIChtYXRjaF9wYXR0ZXJuX3lsbyhzLCBwYXR0ZXJuKSkKKysgICAgICAgICAgICAgIHJldHVybiAxOworKwkgIC8qIEZhaWxlZC4gKi8KKysgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrCisrICAgICAgLyogVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgbW9yZSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gIElmIHdlIGFyZQorKwkgYXQgdGhlIGVuZCwgZmFpbC4gKi8KKysgICAgICBpZiAoISpzKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgICAgLyogQ2hlY2sgaWYgdGhlIG5leHQgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgYWNjZXB0YWJsZS4gKi8KKysgICAgICBpZiAoKnBhdHRlcm4gIT0gJz8nICYmICpwYXR0ZXJuICE9ICpzKQorKwlyZXR1cm4gMDsKKysgICAgICAKKysgICAgICAvKiBNb3ZlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciwgYm90aCBpbiBzdHJpbmcgYW5kIGluIHBhdHRlcm4uICovCisrICAgICAgcysrOworKyAgICAgIHBhdHRlcm4rKzsKKysgICAgfQorKyAgLypOT1RSRUFDSEVEKi8KKyt9CisrI2VuZGlmIC8qIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcgKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjVmNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworKiBNb24gRmViICA1IDIwMDEgUHJlc3RvbiBCcm93biA8cGJyb3duQHJlZGhhdC5jb20+CistIGZpeCBnZXRob3N0YnluYW1lIHRvIHdvcmsgYmV0dGVyIHdpdGggZG90ICIuIiBub3RhdGlvbiAoIzE2OTQ5KQorCistLS0gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYy5maXhnZXRob3N0YnluYW1lCUZyaSBNYXIgMjEgMTM6Mjc6MjUgMTk5NworKysrIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJTW9uIEZlYiAgNSAxNDowOTo0MCAyMDAxCitAQCAtNTIsNyArNTIsOCBAQAorIGNoYXIgICAqbmFtZTsKKyB7CisgICAgIGNoYXIgICAgZG90X25hbWVbTUFYSE9TVE5BTUVMRU4gKyAxXTsKKy0KKysgICAgc3RydWN0IGhvc3RlbnQgKmhwOworKyAgICAKKyAgICAgLyoKKyAgICAgICogRG9uJ3QgYXBwZW5kIGRvdHMgdG8gdW5xdWFsaWZpZWQgbmFtZXMuIFN1Y2ggbmFtZXMgYXJlIGxpa2VseSB0byBjb21lCisgICAgICAqIGZyb20gbG9jYWwgaG9zdHMgZmlsZXMgb3IgZnJvbSBOSVMuCitAQCAtNjEsOCArNjIsMTIgQEAKKyAgICAgaWYgKHN0cmNocihuYW1lLCAnLicpID09IDAgfHwgc3RybGVuKG5hbWUpID49IE1BWEhPU1ROQU1FTEVOIC0gMSkgeworIAlyZXR1cm4gKGdldGhvc3RieW5hbWUobmFtZSkpOworICAgICB9IGVsc2UgeworLQlzcHJpbnRmKGRvdF9uYW1lLCAiJXMuIiwgbmFtZSk7CistCXJldHVybiAoZ2V0aG9zdGJ5bmFtZShkb3RfbmFtZSkpOworKyAgICAgICAgc3ByaW50Zihkb3RfbmFtZSwgIiVzLiIsIG5hbWUpOworKyAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lKGRvdF9uYW1lKTsKKysJaWYgKGhwKQorKwkgICAgcmV0dXJuIGhwOworKwllbHNlCisrCSAgICByZXR1cm4gKGdldGhvc3RieW5hbWUobmFtZSkpOworICAgICB9CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTBfdXNhZ2ktaXB2Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ0N2MzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2gKQEAgLTAsMCArMSwxMjU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZml4X29wdGlvbnMuYyB0Y3Bfd3JhcHBlcnNfNy42L2ZpeF9vcHRpb25zLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZml4X29wdGlvbnMuYwkxOTk3LTA0LTA4IDAyOjI5OjE5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvZml4X29wdGlvbnMuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTExLDYgKzExLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CitAQCAtNDEsNiArNDQsMjIgQEAKKyAgICAgdW5zaWduZWQgaW50IG9wdDsKKyAgICAgaW50ICAgICBvcHRsZW47CisgICAgIHN0cnVjdCBpbl9hZGRyIGR1bW15OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKKysgICAgaW50IHNzbGVuOworKworKyAgICAvKgorKyAgICAgKiBjaGVjayBpZiB0aGlzIGlzIEFGX0lORVQgc29ja2V0CisrICAgICAqIFhYWCBJUHY2IHN1cHBvcnQ/CisrICAgICAqLworKyAgICBzc2xlbiA9IHNpemVvZihzcyk7CisrICAgIGlmIChnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcywgJnNzbGVuKSA8IDApIHsKKysJc3lzbG9nKExPR19FUlIsICJnZXRwZWVybmFtZTogJW0iKTsKKysJY2xlYW5fZXhpdChyZXF1ZXN0KTsKKysgICAgfQorKyAgICBpZiAoc3Muc3NfZmFtaWx5ICE9IEFGX0lORVQpCisrCXJldHVybjsKKysjZW5kaWYKKyAKKyAgICAgaWYgKChpcCA9IGdldHByb3RvYnluYW1lKCJpcCIpKSAhPSAwKQorIAlpcHByb3RvID0gaXAtPnBfcHJvdG87CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOToyMjo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTEgKzg1LDE4IEBACisgZm9yIGRhZW1vbiBwcm9jZXNzIG5hbWVzIG9yIGZvciBjbGllbnQgdXNlciBuYW1lcy4KKyAuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbS5tLm0ubVwnIGlzIGludGVycHJldGVkIGFzIGEKKy1gbmV0L21hc2tcJyBwYWlyLiBBIGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUKKytgbmV0L21hc2tcJyBwYWlyLiBBbiBJUHY0IGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUKKyBiaXR3aXNlIEFORCBvZiB0aGUgYWRkcmVzcyBhbmQgdGhlIGBtYXNrXCcuIEZvciBleGFtcGxlLCB0aGUgbmV0L21hc2sKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKyAuSVAgXChidQorK0FuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYFtuOm46bjpuOm46bjpuOm5dL21cJyBpcyBpbnRlcnByZXRlZCBhcyBhCisrYFtuZXRdL3ByZWZpeGxlblwnIHBhaXIuIEFuIElQdjYgaG9zdCBhZGRyZXNzIGlzIG1hdGNoZWQgaWYKKytgcHJlZml4bGVuXCcgYml0cyBvZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlIGBwcmVmaXhsZW5cJyBiaXRzIG9mIHRoZQorK2FkZHJlc3MuIEZvciBleGFtcGxlLCB0aGUgW25ldF0vcHJlZml4bGVuIHBhdHRlcm4KKytgWzNmZmU6NTA1OjI6MTo6XS82NFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUgcmFuZ2UKKytgM2ZmZTo1MDU6MjoxOjpcJyB0aHJvdWdoIGAzZmZlOjUwNToyOjE6ZmZmZjpmZmZmOmZmZmY6ZmZmZlwnLgorKy5JUCBcKGJ1CisgV2lsZGNhcmRzIGAqXCcgYW5kIGA/XCcgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggaG9zdG5hbWVzIG9yIElQIGFkZHJlc3Nlcy4gIFRoaXMKKyBtZXRob2Qgb2YgbWF0Y2hpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgbmV0L21hc2tcJyBtYXRjaGluZywKKyBob3N0bmFtZSBtYXRjaGluZyBiZWdpbm5pbmcgd2l0aCBgLlwnIG9yIElQIGFkZHJlc3MgbWF0Y2hpbmcgZW5kaW5nIHdpdGggYC5cJy4KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE5OjIyOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCw3ICsyNCwxMyBAQAorIC8qIFN5c3RlbSBsaWJyYXJpZXMuICovCisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpZmRlZiBJTlQzMl9UCisrICAgIHR5cGVkZWYgdWludDMyX3QgdV9pbnQzMl90OworKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTMzLDYgKzM5LDkgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c2V0am1wLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxuZXRkYi5oPgorKyNlbmRpZgorIAorIGV4dGVybiBjaGFyICpmZ2V0cygpOworIGV4dGVybiBpbnQgZXJybm87CitAQCAtODIsNiArOTEsMTAgQEAKKyBzdGF0aWMgaW50IGhvc3RfbWF0Y2goKTsKKyBzdGF0aWMgaW50IHN0cmluZ19tYXRjaCgpOworIHN0YXRpYyBpbnQgbWFza2VkX21hdGNoKCk7CisrI2lmZGVmIElORVQ2Cisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g0KCk7Cisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g2KCk7CisrI2VuZGlmCisgCisgLyogU2l6ZSBvZiBsb2dpY2FsIGxpbmUgYnVmZmVyLiAqLworIAorQEAgLTI4OSw2ICszMDIsMTMgQEAKKyB7CisgICAgIGludCAgICAgbjsKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgLyogY29udmVydCBJUHY0IG1hcHBlZCBJUHY2IGFkZHJlc3MgdG8gSVB2NCBhZGRyZXNzICovCisrICAgIGlmIChTVFJOX0VRKHN0cmluZywgIjo6ZmZmZjoiLCA3KQorKyAgICAgICYmIGRvdF9xdWFkX2FkZHIoc3RyaW5nICsgNykgIT0gSU5BRERSX05PTkUpIHsKKysgICAgICBzdHJpbmcgKz0gNzsKKysgICAgfQorKyNlbmRpZiAgICAKKyAjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKyAgICAgaWYgKHN0cmNocih0b2ssICcqJykgfHwgc3RyY2hyKHRvaywnPycpKSB7ICAvKiBjb250YWlucyAnKicgb3IgJz8nICovCisgICAgICAgICByZXR1cm4gKG1hdGNoX3BhdHRlcm5feWxvKHN0cmluZyx0b2spKTsgCSAgICAgICAKK0BAIC0zMDQsMjAgKzMyNCw3MiBAQAorICAgICB9IGVsc2UgaWYgKHRva1sobiA9IHN0cmxlbih0b2spKSAtIDFdID09ICcuJykgewkvKiBwcmVmaXggKi8KKyAJcmV0dXJuIChTVFJOX0VRKHRvaywgc3RyaW5nLCBuKSk7CisgICAgIH0gZWxzZSB7CQkJCQkvKiBleGFjdCBtYXRjaCAqLworKyNpZmRlZiBJTkVUNgorKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrCXN0cnVjdCBzb2NrYWRkcl9pbjYgcGF0LCBhZGRyOworKwlpbnQgbGVuLCByZXQ7CisrCWNoYXIgY2g7CisrCisrCWxlbiA9IHN0cmxlbih0b2spOworKwlpZiAoKnRvayA9PSAnWycgJiYgdG9rW2xlbiAtIDFdID09ICddJykgeworKwkgICAgY2ggPSB0b2tbbGVuIC0gMV07CisrCSAgICB0b2tbbGVuIC0gMV0gPSAnXDAnOworKwkgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCSAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysJICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrCSAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysJICAgIGlmICgocmV0ID0gZ2V0YWRkcmluZm8odG9rICsgMSwgTlVMTCwgJmhpbnRzLCAmcmVzKSkgPT0gMCkgeworKwkJbWVtY3B5KCZwYXQsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKHBhdCkpOworKwkJZnJlZWFkZHJpbmZvKHJlcyk7CisrCSAgICB9CisrCSAgICB0b2tbbGVuIC0gMV0gPSBjaDsKKysJICAgIGlmIChyZXQgIT0gMCB8fCBnZXRhZGRyaW5mbyhzdHJpbmcsIE5VTEwsICZoaW50cywgJnJlcykgIT0gMCkKKysJCXJldHVybiBOTzsKKysJICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworKwkgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisrI2lmZGVmIE5JX1dJVEhTQ09QRUlECisrCSAgICBpZiAocGF0LnNpbjZfc2NvcGVfaWQgIT0gMCAmJgorKwkJYWRkci5zaW42X3Njb3BlX2lkICE9IHBhdC5zaW42X3Njb3BlX2lkKQorKwkJcmV0dXJuIE5POworKyNlbmRpZgorKwkgICAgcmV0dXJuICghbWVtY21wKCZwYXQuc2luNl9hZGRyLCAmYWRkci5zaW42X2FkZHIsCisrCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSk7CisrCSAgICByZXR1cm4gKHJldCk7CisrCX0KKysjZW5kaWYKKyAJcmV0dXJuIChTVFJfRVEodG9rLCBzdHJpbmcpKTsKKyAgICAgfQorIH0KKyAKKyAvKiBtYXNrZWRfbWF0Y2ggLSBtYXRjaCBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL25ldG1hc2sgKi8KKyAKKysjaWZkZWYgSU5FVDYKKyBzdGF0aWMgaW50IG1hc2tlZF9tYXRjaChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorIGNoYXIgICAqbmV0X3RvazsKKyBjaGFyICAgKm1hc2tfdG9rOworIGNoYXIgICAqc3RyaW5nOworIHsKKysgICAgcmV0dXJuIChtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpIHx8CisrCSAgICBtYXNrZWRfbWF0Y2g2KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpKTsKKyt9CisrCisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpCisrI2Vsc2UKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorKyNlbmRpZgorK2NoYXIgICAqbmV0X3RvazsKKytjaGFyICAgKm1hc2tfdG9rOworK2NoYXIgICAqc3RyaW5nOworK3sKKysjaWZkZWYgSU5FVDYKKysgICAgdV9pbnQzMl90IG5ldDsKKysgICAgdV9pbnQzMl90IG1hc2s7CisrICAgIHVfaW50MzJfdCBhZGRyOworKyNlbHNlCisgICAgIHVuc2lnbmVkIGxvbmcgbmV0OworICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CisgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogRGlzYWxsb3cgZm9ybXMgb3RoZXIgdGhhbiBkb3R0ZWQgcXVhZDogdGhlIHRyZWF0bWVudCB0aGF0IGluZXRfYWRkcigpCitAQCAtMzI5LDEyICs0MDEsNzggQEAKKyAJcmV0dXJuIChOTyk7CisgICAgIGlmICgobmV0ID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKyAJfHwgKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUpIHsKKysjaWZuZGVmIElORVQ2CisgCXRjcGRfd2FybigiYmFkIG5ldC9tYXNrIGV4cHJlc3Npb246ICVzLyVzIiwgbmV0X3RvaywgbWFza190b2spOworKyNlbmRpZgorIAlyZXR1cm4gKE5PKTsJCQkJLyogbm90IHRjcGRfanVtcCgpICovCisgICAgIH0KKyAgICAgcmV0dXJuICgoYWRkciAmIG1hc2spID09IG5ldCk7CisgfQorIAorKyNpZmRlZiBJTkVUNgorK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNihuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorK2NoYXIgICAqbmV0X3RvazsKKytjaGFyICAgKm1hc2tfdG9rOworK2NoYXIgICAqc3RyaW5nOworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG5ldCwgYWRkcjsKKysgICAgdV9pbnQzMl90IG1hc2s7CisrICAgIGludCBsZW4sIG1hc2tfbGVuLCBpID0gMDsKKysgICAgY2hhciBjaDsKKysKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKGdldGFkZHJpbmZvKHN0cmluZywgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKQorKwlyZXR1cm4gTk87CisrICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworKyAgICBmcmVlYWRkcmluZm8ocmVzKTsKKysKKysgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyLnNpbjZfYWRkcikpIHsKKysJaWYgKCgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKysJIHx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKQorKwkgICAgcmV0dXJuIChOTyk7CisrCXJldHVybiAoKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbMTJdICYgbWFzaykgPT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSk7CisrICAgIH0KKysKKysgICAgLyogbWF0Y2ggSVB2NiBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL3ByZWZpeGxlbiAqLworKyAgICBsZW4gPSBzdHJsZW4obmV0X3Rvayk7CisrICAgIGlmICgqbmV0X3RvayAhPSAnWycgfHwgbmV0X3Rva1tsZW4gLSAxXSAhPSAnXScpCisrCXJldHVybiBOTzsKKysgICAgY2ggPSBuZXRfdG9rW2xlbiAtIDFdOworKyAgICBuZXRfdG9rW2xlbiAtIDFdID0gJ1wwJzsKKysgICAgaWYgKGdldGFkZHJpbmZvKG5ldF90b2sgKyAxLCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApIHsKKysJbmV0X3Rva1tsZW4gLSAxXSA9IGNoOworKwlyZXR1cm4gTk87CisrICAgIH0KKysgICAgbWVtY3B5KCZuZXQsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKG5ldCkpOworKyAgICBmcmVlYWRkcmluZm8ocmVzKTsKKysgICAgbmV0X3Rva1tsZW4gLSAxXSA9IGNoOworKyAgICBpZiAoKG1hc2tfbGVuID0gYXRvaShtYXNrX3RvaykpIDwgMCB8fCBtYXNrX2xlbiA+IDEyOCkKKysJcmV0dXJuIE5POworKworKyNpZmRlZiBOSV9XSVRIU0NPUEVJRAorKyAgICBpZiAobmV0LnNpbjZfc2NvcGVfaWQgIT0gMCAmJiBhZGRyLnNpbjZfc2NvcGVfaWQgIT0gbmV0LnNpbjZfc2NvcGVfaWQpCisrCXJldHVybiBOTzsKKysjZW5kaWYKKysgICAgd2hpbGUgKG1hc2tfbGVuID4gMCkgeworKwlpZiAobWFza19sZW4gPCAzMikgeworKwkgICAgbWFzayA9IGh0b25sKH4oMHhmZmZmZmZmZiA+PiBtYXNrX2xlbikpOworKwkgICAgaWYgKCgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldICYgbWFzaykgIT0gKCoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkcltpXSAmIG1hc2spKQorKwkJcmV0dXJuIE5POworKwkgICAgYnJlYWs7CisrCX0KKysJaWYgKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gIT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyW2ldKQorKwkgICAgcmV0dXJuIE5POworKwlpICs9IDQ7CisrCW1hc2tfbGVuIC09IDMyOworKyAgICB9CisrICAgIHJldHVybiBZRVM7CisrfQorKyNlbmRpZiAvKiBJTkVUNiAqLworKworICNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworIC8qIE5vdGU6IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiBhZGFwdGVkIGluIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkKKyAgICBmcm9tIFRhdHUgWWxvbmVuJ3MgbGFzdCBTU0ggdmVyc2lvbiB1bmRlciBmcmVlIGxpY2Vuc2UgYnkgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMTk5Ny0wMy0yMSAxOToyNzoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDQtMDQtMTAgMTk6MjI6NDQuMDAwMDAwMDAwICswMjAwCitAQCAtMjEsNyArMjEsNyBAQAorIAlAZWNobyAiCWR5bml4IGVwaXggZXNpeCBmcmVlYnNkIGhwdXggaXJpeDQgaXJpeDUgaXJpeDYgaXNjIGl1bml4IgorIAlAZWNobyAiCWxpbnV4IG1hY2h0ZW4gbWlwcyh1bnRlc3RlZCkgbmNyc3ZyNCBuZXRic2QgbmV4dCBvc2YgcG93ZXJfdW5peF8yMTEiCisgCUBlY2hvICIJcHR4LTIueCBwdHgtZ2VuZXJpYyBweXJhbWlkIHNjbyBzY28tbmlzIHNjby1vZDIgc2NvLW9zNSBzaW5peCBzdW5vczQiCistCUBlY2hvICIJc3Vub3M0MCBzdW5vczUgc3lzdjQgdGFuZGVtIHVsdHJpeCB1bmljb3M3IHVuaWNvczggdW5peHdhcmUxIHVuaXh3YXJlMiIKKysJQGVjaG8gIglzdW5vczQwIHN1bm9zNSBzb2xhcmlzOCBzeXN2NCB0YW5kZW0gdWx0cml4IHVuaWNvczcgdW5pY29zOCB1bml4d2FyZTEgdW5peHdhcmUyIgorIAlAZWNobyAiCXV0czIxNSB1eHAiCisgCUBlY2hvCisgCUBlY2hvICJJZiBub25lIG9mIHRoZXNlIG1hdGNoIHlvdXIgZW52aXJvbm1lbnQsIGVkaXQgdGhlIHN5c3RlbSIKK0BAIC0xMzEsMjAgKzEzMSwzNCBAQAorIAlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gU1lTVFlQRT0iLXN5c3R5cGUgYnNkNDMiIGFsbAorIAorICMgRnJlZWJzZCBhbmQgbGludXggYnkgZGVmYXVsdCBoYXZlIG5vIE5JUy4KKy0zODZic2QgbmV0YnNkIGJzZG9zOgorKzM4NmJzZCBic2RvczoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisgCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBORVRHUk9VUD0gVExJPSBcCisgCUVYVFJBX0NGTEFHUz0tRFNZU19FUlJMSVNUX0RFRklORUQgVlNZU0xPRz0gYWxsCisgCisgZnJlZWJzZDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9Ii1ML3Vzci9sb2NhbC92Ni9saWIgLWxpbmV0NiIgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gTkVUR1JPVVA9IFRMST0gXAorLQlFWFRSQV9DRkxBR1M9LURTWVNfRVJSTElTVF9ERUZJTkVEIFZTWVNMT0c9IGFsbAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtRElORVQ2IC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBcCisrCVZTWVNMT0c9IGFsbAorKworK25ldGJzZDoKKysJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBORVRHUk9VUD0gVExJPSBcCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESU5FVDYgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4iIFZTWVNMT0c9IGFsbAorIAorIGxpbnV4OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9c2V0ZW52Lm8gXAorLQlORVRHUk9VUD0gVExJPSBFWFRSQV9DRkxBR1M9Ii1EQlJPS0VOX1NPX0xJTkdFUiIgYWxsCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IFwKKysJTkVUR1JPVVA9Ii1ETkVUR1JPVVAiIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKysKKytnbnU6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCU5FVEdST1VQPS1ETkVUR1JPVVAgVExJPSBWU1lTTE9HPSBCVUdTPSBcCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiIgYWxsCisgCisgIyBUaGlzIGlzIGdvb2QgZm9yIG1hbnkgU1lTVitCU0QgaHlicmlkcyB3aXRoIE5JUywgcHJvYmFibHkgYWxzbyBmb3IgSFAtVVggNy54LgorIGhwdXggaHB1eDggaHB1eDkgaHB1eDEwOgorQEAgLTE5Niw2ICsyMTAsMTMgQEAKKyAJTkVUR1JPVVA9LURORVRHUk9VUCBBVVhfT0JKPXNldGVudi5vIFRMST0tRFRMSSBcCisgCUJVR1M9IiQoQlVHUykgLURTT0xBUklTXzI0X0dFVEhPU1RCWU5BTUVfQlVHIiBhbGwKKyAKKysjIFN1bk9TIDUuOCBpcyBhbm90aGVyIFNZU1Y0IHZhcmlhbnQsIGJ1dCBoYXMgSVB2NiBzdXBwb3J0Cisrc29sYXJpczg6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPSItbHNvY2tldCAtbG5zbCIgUkFOTElCPWVjaG8gQVJGTEFHUz1ydiBWU1lTTE9HPSBcCisrCU5FVEdST1VQPS1ETkVUR1JPVVAgQVVYX09CSj1zZXRlbnYubyBUTEk9LURUTEkgXAorKwlFWFRSQV9DRkxBR1M9Ii1ESU5FVDYgLUROT19DTE9ORV9ERVZJQ0UgLURJTlQzMl9UIiBhbGwKKysKKyAjIEdlbmVyaWMgU1lTVjQwCisgZXNpeCBzeXN2NDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMJMTk5Ni0wMi0xMSAxNzowMTozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU4LDkgKzU4LDMxIEBACisgeworICAgICBjaGFyICAgKmNwOworIAorKyNpZmRlZiBJTkVUNgorKyAgICBpbnQgYnJhY2tldCA9IDA7CisrCisrICAgIGZvciAoY3AgPSBzdHJpbmc7IGNwICYmICpjcDsgY3ArKykgeworKwlzd2l0Y2ggKCpjcCkgeworKwljYXNlICdbJzoKKysJICAgIGJyYWNrZXQrKzsKKysJICAgIGJyZWFrOworKwljYXNlICddJzoKKysJICAgIGJyYWNrZXQtLTsKKysJICAgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgICAgaWYgKGJyYWNrZXQgPT0gMCAmJiAqY3AgPT0gZGVsaW1pdGVyKSB7CisrCQkqY3ArKyA9IDA7CisrCQlyZXR1cm4gY3A7CisrCSAgICB9CisrCSAgICBicmVhazsKKysJfQorKyAgICB9CisrICAgIHJldHVybiAoTlVMTCk7CisrI2Vsc2UKKyAgICAgaWYgKChjcCA9IHN0cmNocihzdHJpbmcsIGRlbGltaXRlcikpICE9IDApCisgCSpjcCsrID0gMDsKKyAgICAgcmV0dXJuIChjcCk7CisrI2VuZGlmCisgfQorIAorIC8qIGRvdF9xdWFkX2FkZHIgLSBjb252ZXJ0IGRvdHRlZCBxdWFkIHRvIGludGVybmFsIGZvcm0gKi8KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmVmdXNlLmMgdGNwX3dyYXBwZXJzXzcuNi9yZWZ1c2UuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZWZ1c2UuYwkxOTk0LTEyLTI4IDE3OjQyOjQwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmVmdXNlLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSwxMiBAQAorIHZvaWQgICAgcmVmdXNlKHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN5c2xvZyhkZW55X3NldmVyaXR5LCAicmVmdXNlZCBjb25uZWN0IGZyb20gJXMgKCVzKSIsCisrCSAgIGV2YWxfY2xpZW50KHJlcXVlc3QpLCBldmFsX2hvc3RhZGRyKHJlcXVlc3QtPmNsaWVudCkpOworKyNlbHNlCisgICAgIHN5c2xvZyhkZW55X3NldmVyaXR5LCAicmVmdXNlZCBjb25uZWN0IGZyb20gJXMiLCBldmFsX2NsaWVudChyZXF1ZXN0KSk7CisrI2VuZGlmCisgICAgIGNsZWFuX2V4aXQocmVxdWVzdCk7CisgICAgIC8qIE5PVFJFQUNIRUQgKi8KKyB9CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMJMTk5NS0wMS0wMiAxNjoxMTozNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsMjAgKzY4LDUwIEBACisgLyogcmZjOTMxIC0gcmV0dXJuIHJlbW90ZSB1c2VyIG5hbWUsIGdpdmVuIHNvY2tldCBzdHJ1Y3R1cmVzICovCisgCisgdm9pZCAgICByZmM5MzEocm10X3Npbiwgb3VyX3NpbiwgZGVzdCkKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3Qgc29ja2FkZHIgKnJtdF9zaW47Cisrc3RydWN0IHNvY2thZGRyICpvdXJfc2luOworKyNlbHNlCisgc3RydWN0IHNvY2thZGRyX2luICpybXRfc2luOworIHN0cnVjdCBzb2NrYWRkcl9pbiAqb3VyX3NpbjsKKysjZW5kaWYKKyBjaGFyICAgKmRlc3Q7CisgeworICAgICB1bnNpZ25lZCBybXRfcG9ydDsKKyAgICAgdW5zaWduZWQgb3VyX3BvcnQ7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHJtdF9xdWVyeV9zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIG91cl9xdWVyeV9zaW47CisrICAgIGludCBhbGVuOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBybXRfcXVlcnlfc2luOworICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gb3VyX3F1ZXJ5X3NpbjsKKysjZW5kaWYKKyAgICAgY2hhciAgICB1c2VyWzI1Nl07CQkJLyogWFhYICovCisgICAgIGNoYXIgICAgYnVmZmVyWzUxMl07CQkvKiBYWFggKi8KKyAgICAgY2hhciAgICpjcDsKKyAgICAgY2hhciAgICpyZXN1bHQgPSB1bmtub3duOworICAgICBGSUxFICAgKmZwOworIAorKyNpZmRlZiBJTkVUNgorKyAgICAvKiBhZGRyZXNzIGZhbWlseSBtdXN0IGJlIHRoZSBzYW1lICovCisrICAgIGlmIChybXRfc2luLT5zYV9mYW1pbHkgIT0gb3VyX3Npbi0+c2FfZmFtaWx5KSB7CisrCVNUUk5fQ1BZKGRlc3QsIHJlc3VsdCwgU1RSSU5HX0xFTkdUSCk7CisrCXJldHVybjsKKysgICAgfQorKyAgICBzd2l0Y2ggKG91cl9zaW4tPnNhX2ZhbWlseSkgeworKyAgICBjYXNlIEFGX0lORVQ6CisrCWFsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKysJYnJlYWs7CisrICAgIGNhc2UgQUZfSU5FVDY6CisrCWFsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrCWJyZWFrOworKyAgICBkZWZhdWx0OgorKwlTVFJOX0NQWShkZXN0LCByZXN1bHQsIFNUUklOR19MRU5HVEgpOworKwlyZXR1cm47CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAgLyoKKyAgICAgICogVXNlIG9uZSB1bmJ1ZmZlcmVkIHN0ZGlvIHN0cmVhbSBmb3Igd3JpdGluZyB0byBhbmQgZm9yIHJlYWRpbmcgZnJvbQorICAgICAgKiB0aGUgUkZDOTMxIGV0Yy4gc2VydmVyLiBUaGlzIGlzIGRvbmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgU3VuT1MKK0BAIC05Miw3ICsxMjIsMTEgQEAKKyAgICAgICogc29ja2V0cy4KKyAgICAgICovCisgCisrI2lmZGVmIElORVQ2CisrICAgIGlmICgoZnAgPSBmc29ja2V0KG91cl9zaW4tPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApKSAhPSAwKSB7CisrI2Vsc2UKKyAgICAgaWYgKChmcCA9IGZzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSAhPSAwKSB7CisrI2VuZGlmCisgCXNldGJ1ZihmcCwgKGNoYXIgKikgMCk7CisgCisgCS8qCitAQCAtMTEyLDYgKzE0NiwyNSBAQAorIAkgICAgICogYWRkcmVzc2VzIGZyb20gdGhlIHF1ZXJ5IHNvY2tldC4KKyAJICAgICAqLworIAorKyNpZmRlZiBJTkVUNgorKwkgICAgbWVtY3B5KCZvdXJfcXVlcnlfc2luLCBvdXJfc2luLCBhbGVuKTsKKysJICAgIG1lbWNweSgmcm10X3F1ZXJ5X3Npbiwgcm10X3NpbiwgYWxlbik7CisrCSAgICBzd2l0Y2ggKG91cl9zaW4tPnNhX2ZhbWlseSkgeworKwkgICAgY2FzZSBBRl9JTkVUOgorKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmb3VyX3F1ZXJ5X3NpbiktPnNpbl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmcm10X3F1ZXJ5X3NpbiktPnNpbl9wb3J0ID0gaHRvbnMoUkZDOTMxX1BPUlQpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIEFGX0lORVQ2OgorKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm91cl9xdWVyeV9zaW4pLT5zaW42X3BvcnQgPSBodG9ucyhBTllfUE9SVCk7CisrCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm10X3F1ZXJ5X3NpbiktPnNpbjZfcG9ydCA9IGh0b25zKFJGQzkzMV9QT1JUKTsKKysJCWJyZWFrOworKwkgICAgfQorKworKwkgICAgaWYgKGJpbmQoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIG91cl9xdWVyeV9zaW4sCisrCQkgICAgIGFsZW4pID49IDAgJiYKKysJCWNvbm5lY3QoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIHJtdF9xdWVyeV9zaW4sCisrCQkJYWxlbikgPj0gMCkgeworKyNlbHNlCisgCSAgICBvdXJfcXVlcnlfc2luID0gKm91cl9zaW47CisgCSAgICBvdXJfcXVlcnlfc2luLnNpbl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworIAkgICAgcm10X3F1ZXJ5X3NpbiA9ICpybXRfc2luOworQEAgLTEyMSw2ICsxNzQsNyBAQAorIAkJICAgICBzaXplb2Yob3VyX3F1ZXJ5X3NpbikpID49IDAgJiYKKyAJCWNvbm5lY3QoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIHJtdF9xdWVyeV9zaW4sCisgCQkJc2l6ZW9mKHJtdF9xdWVyeV9zaW4pKSA+PSAwKSB7CisrI2VuZGlmCisgCisgCQkvKgorIAkJICogU2VuZCBxdWVyeSB0byBzZXJ2ZXIuIE5lZ2xlY3QgdGhlIHJpc2sgdGhhdCBhIDEzLWJ5dGUKK0BAIC0xMjksOCArMTgzLDEzIEBACisgCQkgKi8KKyAKKyAJCWZwcmludGYoZnAsICIldSwldVxyXG4iLAorKyNpZmRlZiBJTkVUNgorKwkJCW50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopcm10X3NpbiktPnNpbl9wb3J0KSwKKysJCQludG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW91cl9zaW4pLT5zaW5fcG9ydCkpOworKyNlbHNlCisgCQkJbnRvaHMocm10X3Npbi0+c2luX3BvcnQpLAorIAkJCW50b2hzKG91cl9zaW4tPnNpbl9wb3J0KSk7CisrI2VuZGlmCisgCQlmZmx1c2goZnApOworIAorIAkJLyoKK0BAIC0xNDQsOCArMjAzLDEzIEBACisgCQkgICAgJiYgZmVycm9yKGZwKSA9PSAwICYmIGZlb2YoZnApID09IDAKKyAJCSAgICAmJiBzc2NhbmYoYnVmZmVyLCAiJXUgLCAldSA6IFVTRVJJRCA6JSpbXjpdOiUyNTVzIiwKKyAJCQkgICAgICAmcm10X3BvcnQsICZvdXJfcG9ydCwgdXNlcikgPT0gMworKyNpZmRlZiBJTkVUNgorKwkJICAgICYmIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopcm10X3NpbiktPnNpbl9wb3J0KSA9PSBybXRfcG9ydAorKwkJICAgICYmIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopb3VyX3NpbiktPnNpbl9wb3J0KSA9PSBvdXJfcG9ydCkgeworKyNlbHNlCisgCQkgICAgJiYgbnRvaHMocm10X3Npbi0+c2luX3BvcnQpID09IHJtdF9wb3J0CisgCQkgICAgJiYgbnRvaHMob3VyX3Npbi0+c2luX3BvcnQpID09IG91cl9wb3J0KSB7CisrI2VuZGlmCisgCisgCQkgICAgLyoKKyAJCSAgICAgKiBTdHJpcCB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4uIEl0IGlzIHBhcnQgb2YgdGhlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMJMTk5Ny0wMy0yMSAxOToyNzoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw5IEBACisgI2RlZmluZQlJTkFERFJfTk9ORQkoLTEpCQkvKiBYWFggc2hvdWxkIGJlIDB4ZmZmZmZmZmYgKi8KKyAjZW5kaWYKKyAKKysjaWZuZGVmIElORVQ2CisgZXh0ZXJuIGNoYXIgKm1hbGxvYygpOworKyNlbmRpZgorIAorIC8qIEFwcGxpY2F0aW9uLXNwZWNpZmljLiAqLworIAorQEAgLTM5LDYgKzQxLDcgQEAKKyBpbnQgICAgIGRlbnlfc2V2ZXJpdHkgPSBMT0dfV0FSTklORzsKKyBpbnQgICAgIHJmYzkzMV90aW1lb3V0ID0gUkZDOTMxX1RJTUVPVVQ7CisgCisrI2lmbmRlZiBJTkVUNgorIC8qIGR1cF9ob3N0ZW50IC0gY3JlYXRlIGhvc3RlbnQgaW4gb25lIG1lbW9yeSBibG9jayAqLworIAorIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZHVwX2hvc3RlbnQoaHApCitAQCAtNzMsOSArNzYsNDYgQEAKKyAgICAgfQorICAgICByZXR1cm4gKCZoYi0+aG9zdCk7CisgfQorKyNlbmRpZgorIAorIC8qIGZpbmRfaW5ldF9hZGRyIC0gZmluZCBhbGwgYWRkcmVzc2VzIGZvciB0aGlzIGhvc3QsIHJlc3VsdCB0byBmcmVlKCkgKi8KKyAKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3QgYWRkcmluZm8gKmZpbmRfaW5ldF9hZGRyKGhvc3QpCisrY2hhciAgICpob3N0OworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsICZoaW50cywgJnJlcykgPT0gMCkKKysJcmV0dXJuIChyZXMpOworKworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUU7CisrICAgIGlmIChnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApIHsKKysJdGNwZF93YXJuKCIlczogaG9zdCBub3QgZm91bmQiLCBob3N0KTsKKysJcmV0dXJuICgwKTsKKysgICAgfQorKyAgICBpZiAocmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYgJiYgcmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVCkgeworKwl0Y3BkX3dhcm4oIiVkOiBub3QgYW4gaW50ZXJuZXQgaG9zdCIsIHJlcy0+YWlfZmFtaWx5KTsKKysJZnJlZWFkZHJpbmZvKHJlcyk7CisrCXJldHVybiAoMCk7CisrICAgIH0KKysgICAgaWYgKCFyZXMtPmFpX2Nhbm9ubmFtZSkgeworKwl0Y3BkX3dhcm4oIiVzOiBob3N0bmFtZSBhbGlhcyIsIGhvc3QpOworKwl0Y3BkX3dhcm4oIihjYW5ub3Qgb2J0YWluIG9mZmljaWFsIG5hbWUpIiwgcmVzLT5haV9jYW5vbm5hbWUpOworKyAgICB9IGVsc2UgaWYgKFNUUl9ORShob3N0LCByZXMtPmFpX2Nhbm9ubmFtZSkpIHsKKysJdGNwZF93YXJuKCIlczogaG9zdG5hbWUgYWxpYXMiLCBob3N0KTsKKysJdGNwZF93YXJuKCIob2ZmaWNpYWwgbmFtZTogJS4qcykiLCBTVFJJTkdfTEVOR1RILCByZXMtPmFpX2Nhbm9ubmFtZSk7CisrICAgIH0KKysgICAgcmV0dXJuIChyZXMpOworK30KKysjZWxzZQorIHN0cnVjdCBob3N0ZW50ICpmaW5kX2luZXRfYWRkcihob3N0KQorIGNoYXIgICAqaG9zdDsKKyB7CitAQCAtMTE4LDYgKzE1OCw3IEBACisgICAgIH0KKyAgICAgcmV0dXJuIChkdXBfaG9zdGVudChocCkpOworIH0KKysjZW5kaWYKKyAKKyAvKiBjaGVja19kbnMgLSBnaXZlIGVhY2ggYWRkcmVzcyB0aG9yb3VnaCB3b3Jrb3V0LCByZXR1cm4gYWRkcmVzcyBjb3VudCAqLworIAorQEAgLTEyNSw4ICsxNjYsMTMgQEAKKyBjaGFyICAgKmhvc3Q7CisgeworICAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJlcXVlc3Q7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNpbjsKKysgICAgc3RydWN0IGFkZHJpbmZvICpocCwgKnJlczsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisrI2VuZGlmCisgICAgIGludCAgICAgY291bnQ7CisgICAgIGNoYXIgICAqYWRkcjsKKyAKK0BAIC0xMzQsMTEgKzE4MCwxOCBAQAorIAlyZXR1cm4gKDApOworICAgICByZXF1ZXN0X2luaXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZzaW4sIDApOworICAgICBzb2NrX21ldGhvZHMoJnJlcXVlc3QpOworKyNpZm5kZWYgSU5FVDYKKyAgICAgbWVtc2V0KChjaGFyICopICZzaW4sIDAsIHNpemVvZihzaW4pKTsKKyAgICAgc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworKyNlbmRpZgorIAorKyNpZmRlZiBJTkVUNgorKyAgICBmb3IgKHJlcyA9IGhwLCBjb3VudCA9IDA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0LCBjb3VudCsrKSB7CisrCW1lbWNweSgmc2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CisrI2Vsc2UKKyAgICAgZm9yIChjb3VudCA9IDA7IChhZGRyID0gaHAtPmhfYWRkcl9saXN0W2NvdW50XSkgIT0gMDsgY291bnQrKykgeworIAltZW1jcHkoKGNoYXIgKikgJnNpbi5zaW5fYWRkciwgYWRkciwgc2l6ZW9mKHNpbi5zaW5fYWRkcikpOworKyNlbmRpZgorIAorIAkvKgorIAkgKiBGb3JjZSBob3N0IG5hbWUgYW5kIGFkZHJlc3MgY29udmVyc2lvbnMuIFVzZSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUKK0BAIC0xNTEsNyArMjA0LDExIEBACisgCSAgICB0Y3BkX3dhcm4oImhvc3QgYWRkcmVzcyAlcy0+bmFtZSBsb29rdXAgZmFpbGVkIiwKKyAJCSAgICAgIGV2YWxfaG9zdGFkZHIocmVxdWVzdC5jbGllbnQpKTsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICBmcmVlYWRkcmluZm8oaHApOworKyNlbHNlCisgICAgIGZyZWUoKGNoYXIgKikgaHApOworKyNlbmRpZgorICAgICByZXR1cm4gKGNvdW50KTsKKyB9CisgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmggdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmgJMTk5NC0xMi0zMSAxODoxOToyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmgJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00LDYgKzQsMTAgQEAKKyAgICogQXV0aG9yOiBXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisgICAqLworIAorKyNpZmRlZiBJTkVUNgorK2V4dGVybiBzdHJ1Y3QgYWRkcmluZm8gKmZpbmRfaW5ldF9hZGRyKCk7CisrI2Vsc2UKKyBleHRlcm4gc3RydWN0IGhvc3RlbnQgKmZpbmRfaW5ldF9hZGRyKCk7CisrI2VuZGlmCisgZXh0ZXJuIGludCBjaGVja19kbnMoKTsKKyBleHRlcm4gaW50IGNoZWNrX3BhdGgoKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc29ja2V0LmMgdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zb2NrZXQuYwkyMDA0LTA0LTEwIDE5OjIyOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCwxMyArMjQsMjIgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2lmZGVmIElOVDMyX1QKKyt0eXBlZGVmIHVpbnQzMl90IHVfaW50MzJfdDsKKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrI2lmZGVmIElORVQ2CisrI2lmbmRlZiBOSV9XSVRIU0NPUEVJRAorKyNkZWZpbmUgTklfV0lUSFNDT1BFSUQJMAorKyNlbmRpZgorKyNlbHNlCisgZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSgpOworKyNlbmRpZgorIAorIC8qIExvY2FsIHN0dWZmLiAqLworIAorQEAgLTc5LDggKzg4LDEzIEBACisgdm9pZCAgICBzb2NrX2hvc3QocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGNsaWVudDsKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNlcnZlcjsKKysjZWxzZQorICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisrI2VuZGlmCisgICAgIGludCAgICAgbGVuOworICAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworICAgICBpbnQgICAgIGZkID0gcmVxdWVzdC0+ZmQ7CitAQCAtMTA5LDcgKzEyMywxMSBAQAorIAltZW1zZXQoYnVmLCAwIHNpemVvZihidWYpKTsKKyAjZW5kaWYKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpZW50OworKyNlbHNlCisgICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gJmNsaWVudDsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogRGV0ZXJtaW5lIHRoZSBzZXJ2ZXIgYmluZGluZy4gVGhpcyBpcyB1c2VkIGZvciBjbGllbnQgdXNlcm5hbWUKK0BAIC0xMjIsNyArMTQwLDExIEBACisgCXRjcGRfd2FybigiZ2V0c29ja25hbWU6ICVtIik7CisgCXJldHVybjsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VydmVyOworKyNlbHNlCisgICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gJnNlcnZlcjsKKysjZW5kaWYKKyB9CisgCisgLyogc29ja19ob3N0YWRkciAtIG1hcCBlbmRwb2ludCBhZGRyZXNzIHRvIHByaW50YWJsZSBmb3JtICovCitAQCAtMTMwLDEwICsxNTIsMjYgQEAKKyB2b2lkICAgIHNvY2tfaG9zdGFkZHIoaG9zdCkKKyBzdHJ1Y3QgaG9zdF9pbmZvICpob3N0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBob3N0LT5zaW47CisrICAgIGludCBzYWxlbjsKKysKKysgICAgaWYgKCFzaW4pCisrCXJldHVybjsKKysjaWZkZWYgU0lONl9MRU4KKysgICAgc2FsZW4gPSBzaW4tPnNhX2xlbjsKKysjZWxzZQorKyAgICBzYWxlbiA9IChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSA/IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pCisrCQkJCQk6IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKysjZW5kaWYKKysgICAgZ2V0bmFtZWluZm8oc2luLCBzYWxlbiwgaG9zdC0+YWRkciwgc2l6ZW9mKGhvc3QtPmFkZHIpLAorKwkJTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QgfCBOSV9XSVRIU0NPUEVJRCk7CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBob3N0LT5zaW47CisgCisgICAgIGlmIChzaW4gIT0gMCkKKyAJU1RSTl9DUFkoaG9zdC0+YWRkciwgaW5ldF9udG9hKHNpbi0+c2luX2FkZHIpLCBzaXplb2YoaG9zdC0+YWRkcikpOworKyNlbmRpZgorIH0KKyAKKyAvKiBzb2NrX2hvc3RuYW1lIC0gbWFwIGVuZHBvaW50IGFkZHJlc3MgdG8gaG9zdCBuYW1lICovCitAQCAtMTQxLDYgKzE3OSwxNjAgQEAKKyB2b2lkICAgIHNvY2tfaG9zdG5hbWUoaG9zdCkKKyBzdHJ1Y3QgaG9zdF9pbmZvICpob3N0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBob3N0LT5zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW40OworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXMsICpyZXMwID0gTlVMTDsKKysgICAgaW50IHNhbGVuLCBhbGVuLCBlcnIgPSAxOworKyAgICBjaGFyICphcCA9IE5VTEwsICpyYXAsIGhuYW1lW05JX01BWEhPU1RdOworKworKyAgICBpZiAoc2luICE9IE5VTEwpIHsKKysJaWYgKHNpbi0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisrCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzaW47CisrCisrCSAgICBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKysJCW1lbXNldCgmc2luNCwgMCwgc2l6ZW9mKHNpbjQpKTsKKysjaWZkZWYgU0lONl9MRU4KKysJCXNpbjQuc2luX2xlbiA9IHNpemVvZihzaW40KTsKKysjZW5kaWYKKysJCXNpbjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisrCQlzaW40LnNpbl9wb3J0ID0gc2luNi0+c2luNl9wb3J0OworKwkJc2luNC5zaW5fYWRkci5zX2FkZHIgPSAqKHVfaW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIuczZfYWRkclsxMl07CisrCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjQ7CisrCSAgICB9CisrCX0KKysJc3dpdGNoIChzaW4tPnNhX2ZhbWlseSkgeworKwljYXNlIEFGX0lORVQ6CisrCSAgICBhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luICopc2luKS0+c2luX2FkZHI7CisrCSAgICBhbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKysJICAgIHNhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisrCSAgICBicmVhazsKKysJY2FzZSBBRl9JTkVUNjoKKysJICAgIGFwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luKS0+c2luNl9hZGRyOworKwkgICAgYWxlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworKwkgICAgc2FsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrCSAgICBicmVhazsKKysJZGVmYXVsdDoKKysJICAgIGJyZWFrOworKwl9CisrCWlmIChhcCkKKysJICAgIGVyciA9IGdldG5hbWVpbmZvKHNpbiwgc2FsZW4sIGhuYW1lLCBzaXplb2YoaG5hbWUpLAorKwkJCSAgICAgIE5VTEwsIDAsIE5JX1dJVEhTQ09QRUlEIHwgTklfTkFNRVJFUUQpOworKyAgICB9CisrICAgIGlmICghZXJyKSB7CisrCisrCVNUUk5fQ1BZKGhvc3QtPm5hbWUsIGhuYW1lLCBzaXplb2YoaG9zdC0+bmFtZSkpOworKworKwkvKiByZWplY3QgbnVtZXJpYyBhZGRyZXNzZXMgKi8KKysJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUUgfCBBSV9OVU1FUklDSE9TVDsKKysJaWYgKChlcnIgPSBnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSA9PSAwKSkgeworKwkgICAgZnJlZWFkZHJpbmZvKHJlczApOworKwkgICAgcmVzMCA9IE5VTEw7CisrCSAgICB0Y3BkX3dhcm4oImhvc3QgbmFtZS9uYW1lIG1pc21hdGNoOiAiCisrCQkgICAgICAicmV2ZXJzZSBsb29rdXAgcmVzdWx0cyBpbiBub24tRlFETiAlcyIsCisrCQkgICAgICBob3N0LT5uYW1lKTsKKysJICAgIHN0cmNweShob3N0LT5uYW1lLCBwYXJhbm9pZCk7CS8qIG5hbWUgaXMgYmFkLCBjbG9iYmVyIGl0ICovCisrCX0KKysJZXJyID0gIWVycjsKKysgICAgfQorKyAgICBpZiAoIWVycikgeworKwkvKiB3ZSBhcmUgbm93IHN1cmUgdGhhdCB0aGlzIGlzIG5vbi1udW1lcmljICovCisrCisrCS8qCisrCSAqIFZlcmlmeSB0aGF0IHRoZSBhZGRyZXNzIGlzIGEgbWVtYmVyIG9mIHRoZSBhZGRyZXNzIGxpc3QgcmV0dXJuZWQKKysJICogYnkgZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSkuCisrCSAqIAorKwkgKiBWZXJpZnkgYWxzbyB0aGF0IGdldGhvc3RieWFkZHIoKSBhbmQgZ2V0aG9zdGJ5bmFtZSgpIHJldHVybiB0aGUgc2FtZQorKwkgKiBob3N0bmFtZSwgb3IgcnNoZCBhbmQgcmxvZ2luZCBtYXkgc3RpbGwgZW5kIHVwIGJlaW5nIHNwb29mZWQuCisrCSAqIAorKwkgKiBPbiBzb21lIHNpdGVzLCBnZXRob3N0YnluYW1lKCJsb2NhbGhvc3QiKSByZXR1cm5zICJsb2NhbGhvc3QuZG9tYWluIi4KKysJICogVGhpcyBpcyBhIEROUyBhcnRlZmFjdC4gV2UgdHJlYXQgaXQgYXMgYSBzcGVjaWFsIGNhc2UuIFdoZW4gd2UKKysJICogY2FuJ3QgYmVsaWV2ZSB0aGUgYWRkcmVzcyBsaXN0IGZyb20gZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0IikKKysJICogd2UncmUgaW4gYmlnIHRyb3VibGUgYW55d2F5LgorKwkgKi8KKysKKysJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUU7CisrCWlmIChnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSAhPSAwKSB7CisrCisrCSAgICAvKgorKwkgICAgICogVW5hYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBob3N0IG5hbWUgbWF0Y2hlcyB0aGUgYWRkcmVzcy4gVGhpcworKwkgICAgICogbWF5IGJlIGEgdHJhbnNpZW50IHByb2JsZW0gb3IgYSBib3RjaGVkIG5hbWUgc2VydmVyIHNldHVwLgorKwkgICAgICovCisrCisrCSAgICB0Y3BkX3dhcm4oImNhbid0IHZlcmlmeSBob3N0bmFtZTogZ2V0YWRkcmluZm8oJXMsICVzKSBmYWlsZWQiLAorKwkJICAgICAgaG9zdC0+bmFtZSwKKysJCSAgICAgIChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSA/ICJBRl9JTkVUIiA6ICJBRl9JTkVUNiIpOworKworKwl9IGVsc2UgaWYgKChyZXMwLT5haV9jYW5vbm5hbWUgPT0gTlVMTAorKwkJICAgIHx8IFNUUl9ORShob3N0LT5uYW1lLCByZXMwLT5haV9jYW5vbm5hbWUpKQorKwkJICAgJiYgU1RSX05FKGhvc3QtPm5hbWUsICJsb2NhbGhvc3QiKSkgeworKworKwkgICAgLyoKKysJICAgICAqIFRoZSBnZXRob3N0YnlhZGRyKCkgYW5kIGdldGhvc3RieW5hbWUoKSBjYWxscyBkaWQgbm90IHJldHVybgorKwkgICAgICogdGhlIHNhbWUgaG9zdG5hbWUuIFRoaXMgY291bGQgYmUgYSBuYW1lc2VydmVyIGNvbmZpZ3VyYXRpb24KKysJICAgICAqIHByb2JsZW0uIEl0IGNvdWxkIGFsc28gYmUgdGhhdCBzb21lb25lIGlzIHRyeWluZyB0byBzcG9vZiB1cy4KKysJICAgICAqLworKworKwkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogJXMgIT0gJS4qcyIsCisrCQkgICAgICBob3N0LT5uYW1lLCBTVFJJTkdfTEVOR1RILAorKwkJICAgICAgKHJlczAtPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKSA/ICIiIDogcmVzMC0+YWlfY2Fub25uYW1lKTsKKysKKysJfSBlbHNlIHsKKysKKysJICAgIC8qCisrCSAgICAgKiBUaGUgYWRkcmVzcyBzaG91bGQgYmUgYSBtZW1iZXIgb2YgdGhlIGFkZHJlc3MgbGlzdCByZXR1cm5lZCBieQorKwkgICAgICogZ2V0aG9zdGJ5bmFtZSgpLiBXZSBzaG91bGQgZmlyc3QgdmVyaWZ5IHRoYXQgdGhlIGhfYWRkcnR5cGUKKysJICAgICAqIGZpZWxkIGlzIEFGX0lORVQsIGJ1dCB0aGlzIHByb2dyYW0gaGFzIGFscmVhZHkgY2F1c2VkIHRvbyBtdWNoCisrCSAgICAgKiBncmllZiBvbiBzeXN0ZW1zIHdpdGggYnJva2VuIGxpYnJhcnkgY29kZS4KKysJICAgICAqLworKworKwkgICAgZm9yIChyZXMgPSByZXMwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCkgeworKwkJaWYgKHJlcy0+YWlfZmFtaWx5ICE9IHNpbi0+c2FfZmFtaWx5KQorKwkJICAgIGNvbnRpbnVlOworKwkJc3dpdGNoIChyZXMtPmFpX2ZhbWlseSkgeworKwkJY2FzZSBBRl9JTkVUOgorKwkJICAgIHJhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luICopcmVzLT5haV9hZGRyKS0+c2luX2FkZHI7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIEFGX0lORVQ2OgorKwkJICAgIC8qIG5lZWQgdG8gY2hlY2sgc2NvcGVfaWQgKi8KKysJCSAgICBpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luKS0+c2luNl9zY29wZV9pZCAhPQorKwkJICAgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHIpLT5zaW42X3Njb3BlX2lkKSB7CisrCQkJY29udGludWU7CisrCQkgICAgfQorKwkJICAgIHJhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlcy0+YWlfYWRkciktPnNpbjZfYWRkcjsKKysJCSAgICBicmVhazsKKysJCWRlZmF1bHQ6CisrCQkgICAgY29udGludWU7CisrCQl9CisrCQlpZiAobWVtY21wKHJhcCwgYXAsIGFsZW4pID09IDApIHsKKysJCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisrCQkgICAgcmV0dXJuOwkJCS8qIG5hbWUgaXMgZ29vZCwga2VlcCBpdCAqLworKwkJfQorKwkgICAgfQorKworKwkgICAgLyoKKysJICAgICAqIFRoZSBob3N0IG5hbWUgZG9lcyBub3QgbWFwIHRvIHRoZSBpbml0aWFsIGFkZHJlc3MuIFBlcmhhcHMKKysJICAgICAqIHNvbWVvbmUgaGFzIG1lc3NlZCB1cC4gUGVyaGFwcyBzb21lb25lIGNvbXByb21pc2VkIGEgbmFtZQorKwkgICAgICogc2VydmVyLgorKwkgICAgICovCisrCisrCSAgICBnZXRuYW1laW5mbyhzaW4sIHNhbGVuLCBobmFtZSwgc2l6ZW9mKGhuYW1lKSwKKysJCQlOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCB8IE5JX1dJVEhTQ09QRUlEKTsKKysJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL2FkZHJlc3MgbWlzbWF0Y2g6ICVzICE9ICUuKnMiLAorKwkJICAgICAgaG5hbWUsIFNUUklOR19MRU5HVEgsCisrCQkgICAgICAocmVzMC0+YWlfY2Fub25uYW1lID09IE5VTEwpID8gIiIgOiByZXMwLT5haV9jYW5vbm5hbWUpOworKwl9CisrCXN0cmNweShob3N0LT5uYW1lLCBwYXJhbm9pZCk7CQkvKiBuYW1lIGlzIGJhZCwgY2xvYmJlciBpdCAqLworKwlpZiAocmVzMCkKKysJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKysgICAgfQorKyNlbHNlIC8qIElORVQ2ICovCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gaG9zdC0+c2luOworICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisgICAgIGludCAgICAgaTsKK0BAIC0yMjAsNiArNDEyLDcgQEAKKyAJfQorIAlzdHJjcHkoaG9zdC0+bmFtZSwgcGFyYW5vaWQpOwkJLyogbmFtZSBpcyBiYWQsIGNsb2JiZXIgaXQgKi8KKyAgICAgfQorKyNlbmRpZiAvKiBJTkVUNiAqLworIH0KKyAKKyAvKiBzb2NrX3NpbmsgLSBhYnNvcmIgdW5yZWNlaXZlZCBJUCBkYXRhZ3JhbSAqLworQEAgLTIyOCw3ICs0MjEsMTEgQEAKKyBpbnQgICAgIGZkOworIHsKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2luOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisrI2VuZGlmCisgICAgIGludCAgICAgc2l6ZSA9IHNpemVvZihzaW4pOworIAorICAgICAvKgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5jCTE5OTYtMDItMTEgMTc6MDE6MzMuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjAsNyArMTIwLDEyIEBACisgCisgICAgIC8qIFJlcG9ydCByZXF1ZXN0IGFuZCBpbnZva2UgdGhlIHJlYWwgZGFlbW9uIHByb2dyYW0uICovCisgCisrI2lmZGVmIElORVQ2CisrICAgIHN5c2xvZyhhbGxvd19zZXZlcml0eSwgImNvbm5lY3QgZnJvbSAlcyAoJXMpIiwKKysJICAgZXZhbF9jbGllbnQoJnJlcXVlc3QpLCBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisrI2Vsc2UKKyAgICAgc3lzbG9nKGFsbG93X3NldmVyaXR5LCAiY29ubmVjdCBmcm9tICVzIiwgZXZhbF9jbGllbnQoJnJlcXVlc3QpKTsKKysjZW5kaWYKKyAgICAgY2xvc2Vsb2coKTsKKyAgICAgKHZvaWQpIGV4ZWN2KHBhdGgsIGFyZ3YpOworICAgICBzeXNsb2coTE9HX0VSUiwgImVycm9yOiBjYW5ub3QgZXhlY3V0ZSAlczogJW0iLCBwYXRoKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkxOTk3LTAyLTEyIDAyOjEzOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjIsNiArMjIsOSBAQAorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTM5Nyw2ICs0MDAsMzEgQEAKKyAgICAgfQorIH0KKyAKKysjaWZkZWYgSU5FVDYKKytzdGF0aWMgaW50IGlzX2luZXQ2X2FkZHIocGF0KQorKyAgICBjaGFyICpwYXQ7CisreworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrICAgIGludCBsZW4sIHJldDsKKysgICAgY2hhciBjaDsKKysKKysgICAgaWYgKCpwYXQgIT0gJ1snKQorKwlyZXR1cm4gKDApOworKyAgICBsZW4gPSBzdHJsZW4ocGF0KTsKKysgICAgaWYgKChjaCA9IHBhdFtsZW4gLSAxXSkgIT0gJ10nKQorKwlyZXR1cm4gKDApOworKyAgICBwYXRbbGVuIC0gMV0gPSAnXDAnOworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKyAgICBpZiAoKHJldCA9IGdldGFkZHJpbmZvKHBhdCArIDEsIE5VTEwsICZoaW50cywgJnJlcykpID09IDApCisrCWZyZWVhZGRyaW5mbyhyZXMpOworKyAgICBwYXRbbGVuIC0gMV0gPSBjaDsKKysgICAgcmV0dXJuIChyZXQgPT0gMCk7CisrfQorKyNlbmRpZgorKworIC8qIGNoZWNrX2hvc3QgLSBjcml0aWNpemUgaG9zdCBwYXR0ZXJuICovCisgCisgc3RhdGljIGludCBjaGVja19ob3N0KHBhdCkKK0BAIC00MjMsMTQgKzQ1MSwyNyBAQAorICNlbmRpZgorICNlbmRpZgorICAgICB9IGVsc2UgaWYgKG1hc2sgPSBzcGxpdF9hdChwYXQsICcvJykpIHsJLyogbmV0d29yay9uZXRtYXNrICovCisrI2lmZGVmIElORVQ2CisrCWludCBtYXNrX2xlbjsKKysKKysJaWYgKChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKysJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrCSAgICAmJiAoIWlzX2luZXQ2X2FkZHIocGF0KQorKwkJfHwgKChtYXNrX2xlbiA9IGF0b2kobWFzaykpIDwgMCB8fCBtYXNrX2xlbiA+IDEyOCkpKQorKyNlbHNlCisgCWlmIChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKyAJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrI2VuZGlmCisgCSAgICB0Y3BkX3dhcm4oIiVzLyVzOiBiYWQgbmV0L21hc2sgcGF0dGVybiIsIHBhdCwgbWFzayk7CisgICAgIH0gZWxzZSBpZiAoU1RSX0VRKHBhdCwgIkZBSUwiKSkgewkJLyogb2Jzb2xldGUgKi8KKyAJdGNwZF93YXJuKCJGQUlMIGlzIG5vIGxvbmdlciByZWNvZ25pemVkIik7CisgCXRjcGRfd2FybigiKHVzZSBFWENFUFQgb3IgREVOWSBpbnN0ZWFkKSIpOworICAgICB9IGVsc2UgaWYgKHJlc2VydmVkX25hbWUocGF0KSkgewkJLyogb3RoZXIgcmVzZXJ2ZWQgKi8KKyAJIC8qIHZvaWQgKi8gOworKyNpZmRlZiBJTkVUNgorKyAgICB9IGVsc2UgaWYgKGlzX2luZXQ2X2FkZHIocGF0KSkgeyAvKiBJUHY2IGFkZHJlc3MgKi8KKysJYWRkcl9jb3VudCA9IDE7CisrI2VuZGlmCisgICAgIH0gZWxzZSBpZiAoTk9UX0lOQUREUihwYXQpKSB7CQkvKiBpbnRlcm5ldCBuYW1lICovCisgCWlmIChwYXRbc3RybGVuKHBhdCkgLSAxXSA9PSAnLicpIHsKKyAJICAgIHRjcGRfd2FybigiJXM6IGRvbWFpbiBvciBob3N0IG5hbWUgZW5kcyBpbiBkb3QiLCBwYXQpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTE5OTYtMDMtMTkgMTY6MjI6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMSw3ICsxMSwxMSBAQAorIHN0cnVjdCBob3N0X2luZm8geworICAgICBjaGFyICAgIG5hbWVbU1RSSU5HX0xFTkdUSF07CS8qIGFjY2VzcyB2aWEgZXZhbF9ob3N0bmFtZShob3N0KSAqLworICAgICBjaGFyICAgIGFkZHJbU1RSSU5HX0xFTkdUSF07CS8qIGFjY2VzcyB2aWEgZXZhbF9ob3N0YWRkcihob3N0KSAqLworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbjsJCS8qIHNvY2tldCBhZGRyZXNzIG9yIDAgKi8KKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsJCS8qIHNvY2tldCBhZGRyZXNzIG9yIDAgKi8KKysjZW5kaWYKKyAgICAgc3RydWN0IHRfdW5pdGRhdGEgKnVuaXQ7CQkvKiBUTEkgdHJhbnNwb3J0IGFkZHJlc3Mgb3IgMCAqLworICAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwkvKiBmb3Igc2hhcmVkIGluZm9ybWF0aW9uICovCisgfTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guYwkxOTk2LTAyLTExIDE3OjAxOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Nyw3ICs1NywxMSBAQAorIGludCAgICAgYXJnYzsKKyBjaGFyICAqKmFyZ3Y7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpocCwgKnJlczsKKysjZWxzZQorICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisrI2VuZGlmCisgICAgIGNoYXIgICAqbXluYW1lID0gYXJndlswXTsKKyAgICAgY2hhciAgICpjbGllbnQ7CisgICAgIGNoYXIgICAqc2VydmVyOworQEAgLTY4LDggKzcyLDEzIEBACisgICAgIGludCAgICAgY2g7CisgICAgIGNoYXIgICAqaW5ldGNmID0gMDsKKyAgICAgaW50ICAgICBjb3VudDsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2VydmVyX3NpbjsKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgY2xpZW50X3NpbjsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyX3NpbjsKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudF9zaW47CisrI2VuZGlmCisgICAgIHN0cnVjdCBzdGF0IHN0OworIAorICAgICAvKgorQEAgLTE3MiwxMyArMTgxLDIwIEBACisgICAgIGlmIChOT1RfSU5BRERSKHNlcnZlcikgPT0gMCB8fCBIT1NUTkFNRV9LTk9XTihzZXJ2ZXIpKSB7CisgCWlmICgoaHAgPSBmaW5kX2luZXRfYWRkcihzZXJ2ZXIpKSA9PSAwKQorIAkgICAgZXhpdCgxKTsKKysjaWZuZGVmIElORVQ2CisgCW1lbXNldCgoY2hhciAqKSAmc2VydmVyX3NpbiwgMCwgc2l6ZW9mKHNlcnZlcl9zaW4pKTsKKyAJc2VydmVyX3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKysjZW5kaWYKKyAJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX1NFUlZFUl9TSU4sICZzZXJ2ZXJfc2luLCAwKTsKKyAKKysjaWZkZWYgSU5FVDYKKysJZm9yIChyZXMgPSBocCwgY291bnQgPSAwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCwgY291bnQrKykgeworKwkgICAgbWVtY3B5KCZzZXJ2ZXJfc2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CisrI2Vsc2UKKyAJZm9yIChjb3VudCA9IDA7IChhZGRyID0gaHAtPmhfYWRkcl9saXN0W2NvdW50XSkgIT0gMDsgY291bnQrKykgeworIAkgICAgbWVtY3B5KChjaGFyICopICZzZXJ2ZXJfc2luLnNpbl9hZGRyLCBhZGRyLAorIAkJICAgc2l6ZW9mKHNlcnZlcl9zaW4uc2luX2FkZHIpKTsKKysjZW5kaWYKKyAKKyAJICAgIC8qCisgCSAgICAgKiBGb3JjZSBldmFsdWF0aW9uIG9mIHNlcnZlciBob3N0IG5hbWUgYW5kIGFkZHJlc3MuIEhvc3QgbmFtZQorQEAgLTE5NCw3ICsyMTAsMTEgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgYW4gYWRkcmVzcyBpbnN0ZWFkXG4iKTsKKyAJICAgIGV4aXQoMSk7CisgCX0KKysjaWZkZWYgSU5FVDYKKysJZnJlZWFkZHJpbmZvKGhwKTsKKysjZWxzZQorIAlmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgfSBlbHNlIHsKKyAJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX1NFUlZFUl9OQU1FLCBzZXJ2ZXIsIDApOworICAgICB9CitAQCAtMjA4LDYgKzIyOCwxOCBAQAorIAl0Y3BkbWF0Y2goJnJlcXVlc3QpOworIAlleGl0KDApOworICAgICB9CisrI2lmZGVmIElORVQ2CisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmIChnZXRhZGRyaW5mbyhjbGllbnQsIE5VTEwsICZoaW50cywgJnJlcykgPT0gMCkgeworKwlmcmVlYWRkcmluZm8ocmVzKTsKKysJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9BRERSLCBjbGllbnQsIDApOworKwl0Y3BkbWF0Y2goJnJlcXVlc3QpOworKwlleGl0KDApOworKyAgICB9CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIFBlcmhhcHMgdGhleSBhcmUgdGVzdGluZyBzcGVjaWFsIGNsaWVudCBob3N0bmFtZSBwYXR0ZXJucyB0aGF0IGFyZW4ndAorQEAgLTIyOSw2ICsyNjEsMzQgQEAKKyAgICAgICovCisgICAgIGlmICgoaHAgPSBmaW5kX2luZXRfYWRkcihjbGllbnQpKSA9PSAwKQorIAlleGl0KDEpOworKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfQ0xJRU5UX1NJTiwgJmNsaWVudF9zaW4sIDApOworKworKyAgICBmb3IgKHJlcyA9IGhwLCBjb3VudCA9IDA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0LCBjb3VudCsrKSB7CisrCW1lbWNweSgmY2xpZW50X3NpbiwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworKworKwkvKgorKwkgKiBnZXRuYW1laW5mbygpIGRvZXNuJ3QgZG8gcmV2ZXJzZSBsb29rdXAgYWdhaW5zdCBsaW5rLWxvY2FsCisrCSAqIGFkZHJlc3MuICBTbywgd2UgcGFzcyB0aHJvdWdoIGhvc3QgbmFtZSBldmFsdWF0aW9uIGFnYWluc3QKKysJICogc3VjaCBhZGRyZXNzZXMuCisrCSAqLworKwlpZiAocmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYgfHwKKysJICAgICFJTjZfSVNfQUREUl9MSU5LTE9DQUwoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlcy0+YWlfYWRkciktPnNpbjZfYWRkcikpIHsKKysJICAgIC8qCisrCSAgICAgKiBGb3JjZSBldmFsdWF0aW9uIG9mIGNsaWVudCBob3N0IG5hbWUgYW5kIGFkZHJlc3MuIEhvc3QgbmFtZQorKwkgICAgICogY29uZmxpY3RzIHdpbGwgYmUgcmVwb3J0ZWQgd2hpbGUgZXZhbF9ob3N0bmFtZSgpIGRvZXMgaXRzIGpvYi4KKysJICAgICAqLworKwkgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9OQU1FLCAiIiwgUlFfQ0xJRU5UX0FERFIsICIiLCAwKTsKKysJICAgIGlmIChTVFJfRVEoZXZhbF9ob3N0bmFtZShyZXF1ZXN0LmNsaWVudCksIHVua25vd24pKQorKwkJdGNwZF93YXJuKCJob3N0IGFkZHJlc3MgJXMtPm5hbWUgbG9va3VwIGZhaWxlZCIsCisrCQkJICBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisrCX0KKysJdGNwZG1hdGNoKCZyZXF1ZXN0KTsKKysJaWYgKHJlcy0+YWlfbmV4dCkKKysJICAgIHByaW50ZigiXG4iKTsKKysgICAgfQorKyAgICBmcmVlYWRkcmluZm8oaHApOworKyNlbHNlCisgICAgIG1lbXNldCgoY2hhciAqKSAmY2xpZW50X3NpbiwgMCwgc2l6ZW9mKGNsaWVudF9zaW4pKTsKKyAgICAgY2xpZW50X3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZjbGllbnRfc2luLCAwKTsKK0BAIC0yNTAsNiArMzEwLDcgQEAKKyAJICAgIHByaW50ZigiXG4iKTsKKyAgICAgfQorICAgICBmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgZXhpdCgwKTsKKyB9CisgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RsaS5jIHRjcF93cmFwcGVyc183LjYvdGxpLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGxpLmMJMTk5Ny0wMy0yMSAxOToyNzoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RsaS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNjUsOCArNjUsMTMgQEAKKyB2b2lkICAgIHRsaV9ob3N0KHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBjbGllbnQ7CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzZXJ2ZXI7CisrI2Vsc2UKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBJZiB3ZSBkaXNjb3ZlciB0aGF0IHdlIGFyZSB1c2luZyBhbiBJUCB0cmFuc3BvcnQsIHByZXRlbmQgd2UgbmV2ZXIKK0BAIC03NiwxNCArODEsMjkgQEAKKyAKKyAgICAgdGxpX2VuZHBvaW50cyhyZXF1ZXN0KTsKKyAgICAgaWYgKChyZXF1ZXN0LT5jb25maWcgPSB0bGlfdHJhbnNwb3J0KHJlcXVlc3QtPmZkKSkgIT0gMAorKyNpZmRlZiBJTkVUNgorKwkmJiAoU1RSX0VRKHJlcXVlc3QtPmNvbmZpZy0+bmNfcHJvdG9mbWx5LCAiaW5ldCIpIHx8CisrCSAgICBTVFJfRVEocmVxdWVzdC0+Y29uZmlnLT5uY19wcm90b2ZtbHksICJpbmV0NiIpKSkgeworKyNlbHNlCisgCSYmIFNUUl9FUShyZXF1ZXN0LT5jb25maWctPm5jX3Byb3RvZm1seSwgImluZXQiKSkgeworKyNlbmRpZgorIAlpZiAocmVxdWVzdC0+Y2xpZW50LT51bml0ICE9IDApIHsKKysjaWZkZWYgSU5FVDYKKysJICAgIGNsaWVudCA9ICooc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgcmVxdWVzdC0+Y2xpZW50LT51bml0LT5hZGRyLmJ1ZjsKKysJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmY2xpZW50OworKyNlbHNlCisgCSAgICBjbGllbnQgPSAqKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSByZXF1ZXN0LT5jbGllbnQtPnVuaXQtPmFkZHIuYnVmOworIAkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSAmY2xpZW50OworKyNlbmRpZgorIAl9CisgCWlmIChyZXF1ZXN0LT5zZXJ2ZXItPnVuaXQgIT0gMCkgeworKyNpZmRlZiBJTkVUNgorKwkgICAgc2VydmVyID0gKihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSByZXF1ZXN0LT5zZXJ2ZXItPnVuaXQtPmFkZHIuYnVmOworKwkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXI7CisrI2Vsc2UKKyAJICAgIHNlcnZlciA9ICooc3RydWN0IHNvY2thZGRyX2luICopIHJlcXVlc3QtPnNlcnZlci0+dW5pdC0+YWRkci5idWY7CisgCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9ICZzZXJ2ZXI7CisrI2VuZGlmCisgCX0KKyAJdGxpX2NsZWFudXAocmVxdWVzdCk7CisgCXNvY2tfbWV0aG9kcyhyZXF1ZXN0KTsKK0BAIC0xODcsNyArMjA3LDE1IEBACisgICAgIH0KKyAgICAgd2hpbGUgKGNvbmZpZyA9IGdldG5ldGNvbmZpZyhoYW5kbGVwKSkgeworIAlpZiAoc3RhdChjb25maWctPm5jX2RldmljZSwgJmZyb21fY29uZmlnKSA9PSAwKSB7CisrI2lmZGVmIE5PX0NMT05FX0RFVklDRQorKwkvKgorKwkgKiBJZiB0aGUgbmV0d29yayBkZXZpY2VzIGFyZSBub3QgY2xvbmVkIChhcyBpcyB0aGUgY2FzZSBmb3IKKysJICogU29sYXJpcyA4IEJldGEpLCB3ZSBtdXN0IGNvbXBhcmUgdGhlIG1ham9yIGRldmljZSBudW1iZXJzLgorKwkgKi8KKysJICAgIGlmIChtYWpvcihmcm9tX2NvbmZpZy5zdF9yZGV2KSA9PSBtYWpvcihmcm9tX2NsaWVudC5zdF9yZGV2KSkKKysjZWxzZQorIAkgICAgaWYgKG1pbm9yKGZyb21fY29uZmlnLnN0X3JkZXYpID09IG1ham9yKGZyb21fY2xpZW50LnN0X3JkZXYpKQorKyNlbmRpZgorIAkJYnJlYWs7CisgCX0KKyAgICAgfQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy91cGRhdGUuYyB0Y3Bfd3JhcHBlcnNfNy42L3VwZGF0ZS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3VwZGF0ZS5jCTE5OTQtMTItMjggMTc6NDI6NTYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi91cGRhdGUuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ2LDEwICs0NiwxOCBAQAorIAkgICAgcmVxdWVzdC0+ZmQgPSB2YV9hcmcoYXAsIGludCk7CisgCSAgICBjb250aW51ZTsKKyAJY2FzZSBSUV9DTElFTlRfU0lOOgorKyNpZmRlZiBJTkVUNgorKwkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkciAqKTsKKysjZWxzZQorIAkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKKysjZW5kaWYKKyAJICAgIGNvbnRpbnVlOworIAljYXNlIFJRX1NFUlZFUl9TSU46CisrI2lmZGVmIElORVQ2CisrCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyICopOworKyNlbHNlCisgCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyX2luICopOworKyNlbmRpZgorIAkgICAgY29udGludWU7CisgCisgCSAgICAvKgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy93b3JrYXJvdW5kcy5jIHRjcF93cmFwcGVyc183LjYvd29ya2Fyb3VuZHMuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy93b3JrYXJvdW5kcy5jCTE5OTYtMDMtMTkgMTY6MjI6MjYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi93b3JrYXJvdW5kcy5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTY2LDExICsxNjYsMjIgQEAKKyBpbnQgICAgKmxlbjsKKyB7CisgICAgIGludCAgICAgcmV0OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IHNhOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzYTsKKysjZW5kaWYKKyAKKyAgICAgaWYgKChyZXQgPSBnZXRwZWVybmFtZShzb2NrLCBzYSwgbGVuKSkgPj0gMAorKyNpZmRlZiBJTkVUNgorKwkmJiAoKHNpbi0+c3Vfc2kuc2lfZmFtaWx5ID09IEFGX0lORVQ2CisrCSAgICAgJiYgSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbi0+c3Vfc2luNi5zaW42X2FkZHIpKQorKwkgICAgfHwgKHNpbi0+c3Vfc2kuc2lfZmFtaWx5ID09IEFGX0lORVQKKysJCSYmIHNpbi0+c3Vfc2luLnNpbl9hZGRyLnNfYWRkciA9PSAwKSkpIHsKKysjZWxzZQorIAkmJiBzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQKKyAJJiYgc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworKyNlbmRpZgorIAllcnJubyA9IEVOT1RDT05OOworIAlyZXR1cm4gKC0xKTsKKyAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjYxMDZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoCkBAIC0wLDAgKzEsMTUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1BhdGg6IG5ld3MucG9yY3VwaW5lLm9yZyFuZXdzLnBvcmN1cGluZS5vcmchbm90LWZvci1tYWlsCitGcm9tOiBXaWV0c2UgVmVuZW1hIDx3aWV0c2VAKChubykoc3BhbSkocGxlYXNlKSl3enYud2luLnR1ZS5ubD4KK05ld3Nncm91cHM6IGNvbXAubWFpbC5zZW5kbWFpbCxjb21wLnNlY3VyaXR5LnVuaXgKK1N1YmplY3Q6IFRDUCBXcmFwcGVyIEJsYWNrbGlzdCBFeHRlbnNpb24KK0ZvbGxvd3VwLVRvOiBwb3N0ZXIKK0RhdGU6IDggU2VwIDE5OTcgMTg6NTM6MTMgLTA0MDAKK09yZ2FuaXphdGlvbjogV2lldHNlJ3MgaGFuZ291dCB3aGlsZSBvbiBzYWJhdHRpY2FsIGluIHRoZSBVU0EKK0xpbmVzOiAxNDcKK1NlbmRlcjogd2lldHNlQHNwaWtlLnBvcmN1cGluZS5vcmcKK01lc3NhZ2UtSUQ6IDw1djF2a3AkaDRmJDFAc3Bpa2UucG9yY3VwaW5lLm9yZz4KK05OVFAtUG9zdGluZy1Ib3N0OiBzcGlrZS5wb3JjdXBpbmUub3JnCitYcmVmOiBuZXdzLnBvcmN1cGluZS5vcmcgY29tcC5tYWlsLnNlbmRtYWlsOjM1NDEgY29tcC5zZWN1cml0eS51bml4OjcxNTgKKworVGhlIHBhdGNoIGJlbG93IGFkZHMgYSBuZXcgaG9zdCBwYXR0ZXJuIHRvIHRoZSBUQ1AgV3JhcHBlciBhY2Nlc3MKK2NvbnRyb2wgbGFuZ3VhZ2UuIEluc3RlYWQgb2YgYSBob3N0IG5hbWUgb3IgYWRkcmVzcyBwYXR0ZXJuLCB5b3UKK2NhbiBzcGVjaWZ5IGFuIGV4dGVybmFsIC9maWxlL25hbWUgd2l0aCBob3N0IG5hbWUgb3IgYWRkcmVzcworcGF0dGVybnMuICAgVGhlIGZlYXR1cmUgY2FuIGJlIHVzZWQgcmVjdXJzaXZlbHkuCisKK1RoZSAvZmlsZS9uYW1lIGV4dGVuc2lvbiBtYWtlcyBpdCBlYXN5IHRvIGJsYWNrbGlzdCBiYWQgc2l0ZXMsIGZvcgorZXhhbXBsZSwgdG8gYmxvY2sgdW53YW50ZWQgZWxlY3Ryb25pYyBtYWlsIHdoZW4gbGlid3JhcCBpcyBsaW5rZWQKK2ludG8gc2VuZG1haWwuICBBZGRpbmcgaG9zdHMgdG8gYSBzaW1wbGUgdGV4dCBmaWxlIGlzIG11Y2ggZWFzaWVyCit0aGFuIGhhdmluZyB0byBlZGl0IGEgbW9yZSBjb21wbGV4IGhvc3RzLmFsbG93L2RlbnkgZmlsZS4KKworSSBkZXZlbG9wZWQgdGhpcyBhIHllYXIgb3Igc28gYWdvIGFzIGEgc3Vic3RpdHV0ZSBmb3IgTklTIG5ldGdyb3Vwcy4KK0F0IHRoYXQgdGltZSwgSSBkaWQgbm90IGNvbnNpZGVyIGl0IG9mIHN1ZmZpY2llbnQgaW50ZXJlc3QgZm9yCitpbmNsdXNpb24gaW4gdGhlIFRDUCBXcmFwcGVyIGRpc3RyaWJ1dGlvbi4gSG93IHRpbWVzIGhhdmUgY2hhbmdlZC4KKworVGhlIHBhdGNoIGlzIHJlbGF0aXZlIHRvIFRDUCBXcmFwcGVycyB2ZXJzaW9uIDcuNi4gVGhlIG1haW4gYXJjaGl2ZQorc2l0ZSBpcyBmdHA6Ly9mdHAud2luLnR1ZS5ubC9wdWIvc2VjdXJpdHkvdGNwX3dyYXBwZXJzXzcuNi50YXIuZ3oKKworVGhhbmtzIHRvIHRoZSBEZWJpYW4gTElOVVggZm9sa3MgZm9yIGV4cHJlc3NpbmcgdGhlaXIgaW50ZXJlc3QgaW4KK3RoaXMgcGF0Y2guCisKKwlXaWV0c2UKKworCitbZGlmZiB1cGRhdGVkIGJ5IE1kXQorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6Mjg6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtOTcsNiArOTcsMTMgQEAKKyBgWzNmZmU6NTA1OjI6MTo6XS82NFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUgcmFuZ2UKKyBgM2ZmZTo1MDU6MjoxOjpcJyB0aHJvdWdoIGAzZmZlOjUwNToyOjE6ZmZmZjpmZmZmOmZmZmY6ZmZmZlwnLgorIC5JUCBcKGJ1CisrQSBzdHJpbmcgdGhhdCBiZWdpbnMgd2l0aCBhIGAvXCcgY2hhcmFjdGVyIGlzIHRyZWF0ZWQgYXMgYSBmaWxlCisrbmFtZS4gQSBob3N0IG5hbWUgb3IgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGl0IG1hdGNoZXMgYW55IGhvc3QgbmFtZQorK29yIGFkZHJlc3MgcGF0dGVybiBsaXN0ZWQgaW4gdGhlIG5hbWVkIGZpbGUuIFRoZSBmaWxlIGZvcm1hdCBpcworK3plcm8gb3IgbW9yZSBsaW5lcyB3aXRoIHplcm8gb3IgbW9yZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBwYXR0ZXJucworK3NlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSBmaWxlIG5hbWUgcGF0dGVybiBjYW4gYmUgdXNlZCBhbnl3aGVyZQorK2EgaG9zdCBuYW1lIG9yIGFkZHJlc3MgcGF0dGVybiBjYW4gYmUgdXNlZC4KKysuSVAgXChidQorIFdpbGRjYXJkcyBgKlwnIGFuZCBgP1wnIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGhvc3RuYW1lcyBvciBJUCBhZGRyZXNzZXMuICBUaGlzCisgbWV0aG9kIG9mIG1hdGNoaW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYG5ldC9tYXNrXCcgbWF0Y2hpbmcsCisgaG9zdG5hbWUgbWF0Y2hpbmcgYmVnaW5uaW5nIHdpdGggYC5cJyBvciBJUCBhZGRyZXNzIG1hdGNoaW5nIGVuZGluZyB3aXRoIGAuXCcuCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6Mjc6MDUuMDAwMDAwMDAwICswMjAwCitAQCAtMjUzLDYgKzI1MywyNiBAQAorICAgICB9CisgfQorIAorKy8qIGhvc3RmaWxlX21hdGNoIC0gbG9vayB1cCBob3N0IHBhdHRlcm5zIGZyb20gZmlsZSAqLworKworK3N0YXRpYyBpbnQgaG9zdGZpbGVfbWF0Y2gocGF0aCwgaG9zdCkKKytjaGFyICAgKnBhdGg7Cisrc3RydWN0IGhvc3RzX2luZm8gKmhvc3Q7CisreworKyAgICBjaGFyICAgIHRva1tCVUZTSVpdOworKyAgICBpbnQgICAgIG1hdGNoID0gTk87CisrICAgIEZJTEUgICAqZnA7CisrCisrICAgIGlmICgoZnAgPSBmb3BlbihwYXRoLCAiciIpKSAhPSAwKSB7CisrCXdoaWxlIChmc2NhbmYoZnAsICIlcyIsIHRvaykgPT0gMSAmJiAhKG1hdGNoID0gaG9zdF9tYXRjaCh0b2ssIGhvc3QpKSkKKysJICAgICAvKiB2b2lkICovIDsKKysJZmNsb3NlKGZwKTsKKysgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpIHsKKysJdGNwZF93YXJuKCJvcGVuICVzOiAlbSIsIHBhdGgpOworKyAgICB9CisrICAgIHJldHVybiAobWF0Y2gpOworK30KKysKKyAvKiBob3N0X21hdGNoIC0gbWF0Y2ggaG9zdCBuYW1lIGFuZC9vciBhZGRyZXNzIGFnYWluc3QgcGF0dGVybiAqLworIAorIHN0YXRpYyBpbnQgaG9zdF9tYXRjaCh0b2ssIGhvc3QpCitAQCAtMjgwLDYgKzMwMCw4IEBACisgCXRjcGRfd2FybigibmV0Z3JvdXAgc3VwcG9ydCBpcyBkaXNhYmxlZCIpOwkvKiBub3QgdGNwZF9qdW1wKCkgKi8KKyAJcmV0dXJuIChOTyk7CisgI2VuZGlmCisrICAgIH0gZWxzZSBpZiAodG9rWzBdID09ICcvJykgewkJCS8qIC9maWxlIGhhY2sgKi8KKysJcmV0dXJuIChob3N0ZmlsZV9tYXRjaCh0b2ssIGhvc3QpKTsKKyAgICAgfSBlbHNlIGlmIChTVFJfRVEodG9rLCAiS05PV04iKSkgewkJLyogY2hlY2sgYWRkcmVzcyBhbmQgbmFtZSAqLworIAljaGFyICAgKm5hbWUgPSBldmFsX2hvc3RuYW1lKGhvc3QpOworIAlyZXR1cm4gKFNUUl9ORShldmFsX2hvc3RhZGRyKGhvc3QpLCB1bmtub3duKSAmJiBIT1NUTkFNRV9LTk9XTihuYW1lKSk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDA0LTA0LTEwIDE5OjI3OjA1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM1Myw2ICszNTMsOCBAQAorIHsKKyAgICAgaWYgKHBhdFswXSA9PSAnQCcpIHsKKyAJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggXCJAXCIiLCBwYXQpOworKyAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLycpIHsKKysJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggXCIvXCIiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLicpIHsKKyAJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggZG90IiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbc3RybGVuKHBhdCkgLSAxXSA9PSAnLicpIHsKK0BAIC0zODUsNiArMzg3LDggQEAKKyB7CisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CQkJLyogQG5ldGdyb3VwICovCisgCXRjcGRfd2FybigiJXM6IHVzZXIgbmFtZSBiZWdpbnMgd2l0aCBcIkBcIiIsIHBhdCk7CisrICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcvJykgeworKwl0Y3BkX3dhcm4oIiVzOiB1c2VyIG5hbWUgYmVnaW5zIHdpdGggXCIvXCIiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLicpIHsKKyAJdGNwZF93YXJuKCIlczogdXNlciBuYW1lIGJlZ2lucyB3aXRoIGRvdCIsIHBhdCk7CisgICAgIH0gZWxzZSBpZiAocGF0W3N0cmxlbihwYXQpIC0gMV0gPT0gJy4nKSB7CitAQCAtNDMwLDggKzQzNCwxMyBAQAorIHN0YXRpYyBpbnQgY2hlY2tfaG9zdChwYXQpCisgY2hhciAgICpwYXQ7CisgeworKyAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworICAgICBjaGFyICAgKm1hc2s7CisgICAgIGludCAgICAgYWRkcl9jb3VudCA9IDE7CisrICAgIEZJTEUgICAqZnA7CisrICAgIHN0cnVjdCB0Y3BkX2NvbnRleHQgc2F2ZWRfY29udGV4dDsKKysgICAgY2hhciAgICpjcDsKKysgICAgY2hhciAgICp3c3AgPSAiIFx0XHJcbiI7CisgCisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CQkJLyogQG5ldGdyb3VwICovCisgI2lmZGVmIE5PX05FVEdSRU5UCitAQCAtNDUwLDYgKzQ1OSwyMSBAQAorIAl0Y3BkX3dhcm4oIm5ldGdyb3VwIHN1cHBvcnQgZGlzYWJsZWQiKTsKKyAjZW5kaWYKKyAjZW5kaWYKKysgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy8nKSB7CQkJLyogL3BhdGgvbmFtZSAqLworKwlpZiAoKGZwID0gZm9wZW4ocGF0LCAiciIpKSAhPSAwKSB7CisrCSAgICBzYXZlZF9jb250ZXh0ID0gdGNwZF9jb250ZXh0OworKwkgICAgdGNwZF9jb250ZXh0LmZpbGUgPSBwYXQ7CisrCSAgICB0Y3BkX2NvbnRleHQubGluZSA9IDA7CisrCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CisrCQl0Y3BkX2NvbnRleHQubGluZSsrOworKwkJZm9yIChjcCA9IHN0cnRvayhidWYsIHdzcCk7IGNwOyBjcCA9IHN0cnRvaygoY2hhciAqKSAwLCB3c3ApKQorKwkJICAgIGNoZWNrX2hvc3QoY3ApOworKwkgICAgfQorKwkgICAgdGNwZF9jb250ZXh0ID0gc2F2ZWRfY29udGV4dDsKKysJICAgIGZjbG9zZShmcCk7CisrCX0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisrCSAgICB0Y3BkX3dhcm4oIm9wZW4gJXM6ICVtIiwgcGF0KTsKKysJfQorICAgICB9IGVsc2UgaWYgKG1hc2sgPSBzcGxpdF9hdChwYXQsICcvJykpIHsJLyogbmV0d29yay9uZXRtYXNrICovCisgI2lmZGVmIElORVQ2CisgCWludCBtYXNrX2xlbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTFfdXNhZ2lfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MGU4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTFfdXNhZ2lfZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtdU4gdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJTW9uIE1heSAyMCAxNDowMDo1NiAyMDAyCisrKysgdGNwX3dyYXBwZXJzXzcuNi5uZXcvaG9zdHNfYWNjZXNzLmMJTW9uIE1heSAyMCAxNDoyNTowNSAyMDAyCitAQCAtNDQ4LDYgKzQ0OCwxNSBAQAorICAgICBpbnQgbGVuLCBtYXNrX2xlbiwgaSA9IDA7CisgICAgIGNoYXIgY2g7CisgCisrICAgIC8qCisrICAgICAqIEJlaGF2aW9yIG9mIGdldGFkZHJpbmZvKCkgYWdhaW5zdCBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3MgaXMKKysgICAgICogZGlmZmVyZW50IGJldHdlZW4gS0FNRSBhbmQgU29sYXJpczguICBXaGlsZSBLQU1FIHJldHVybnMKKysgICAgICogQUZfSU5FVDYsIFNvbGFyaXM4IHJldHVybnMgQUZfSU5FVC4gIFNvLCB3ZSBhdm9pZCB0aGlzIGhlcmUuCisrICAgICAqLworKyAgICBpZiAoU1RSTl9FUShzdHJpbmcsICI6OmZmZmY6IiwgNykKKysJJiYgZG90X3F1YWRfYWRkcihzdHJpbmcgKyA3KSAhPSBJTkFERFJfTk9ORSkKKysJcmV0dXJuIChtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcgKyA3KSk7CisrCisgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKK0BAIC00NTcsMTMgKzQ2Niw2IEBACisgICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworICAgICBmcmVlYWRkcmluZm8ocmVzKTsKKyAKKy0gICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyLnNpbjZfYWRkcikpIHsKKy0JaWYgKCgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKy0JIHx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKQorLQkgICAgcmV0dXJuIChOTyk7CistCXJldHVybiAoKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbMTJdICYgbWFzaykgPT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSk7CistICAgIH0KKy0KKyAgICAgLyogbWF0Y2ggSVB2NiBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL3ByZWZpeGxlbiAqLworICAgICBsZW4gPSBzdHJsZW4obmV0X3Rvayk7CisgICAgIGlmICgqbmV0X3RvayAhPSAnWycgfHwgbmV0X3Rva1tsZW4gLSAxXSAhPSAnXScpCitkaWZmIC11TiB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jIHRjcF93cmFwcGVyc183LjYubmV3L3NvY2tldC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYwlNb24gTWF5IDIwIDEzOjQ4OjM1IDIwMDIKKysrKyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9zb2NrZXQuYwlNb24gTWF5IDIwIDE0OjIyOjI3IDIwMDIKK0BAIC0yMjgsNyArMjI4LDcgQEAKKyAJaGludHMuYWlfZmFtaWx5ID0gc2luLT5zYV9mYW1pbHk7CisgCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRSB8IEFJX05VTUVSSUNIT1NUOworLQlpZiAoKGVyciA9IGdldGFkZHJpbmZvKGhvc3QtPm5hbWUsIE5VTEwsICZoaW50cywgJnJlczApID09IDApKSB7CisrCWlmICgoZXJyID0gZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkpID09IDApIHsKKyAJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKyAJICAgIHJlczAgPSBOVUxMOworIAkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMl9tYWtlZmlsZV9jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyODllNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMl9tYWtlZmlsZV9jb25maWcucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMjAwMy0wOC0yMSAwMTo0MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDMtMDgtMjEgMDE6NDM6MzUuMDAwMDAwMDAwICswMjAwCitAQCAtNDUsNyArNDUsNyBAQAorICMKKyAjIFN5c1YuNCBTb2xhcmlzIDIueCBPU0YgQUlYCisgI1JFQUxfREFFTU9OX0RJUj0vdXNyL3NiaW4KKy0jCisrUkVBTF9EQUVNT05fRElSPS91c3Ivc2JpbgorICMgQlNEIDQuNAorICNSRUFMX0RBRU1PTl9ESVI9L3Vzci9saWJleGVjCisgIworQEAgLTUxMiw2ICs1MTksNyBAQAorICMgKGV4YW1wbGVzOiBhbGxvdywgZGVueSwgYmFubmVycywgdHdpc3QgYW5kIHNwYXduKS4KKyAjIAorICNTVFlMRQk9IC1EUFJPQ0VTU19PUFRJT05TCSMgRW5hYmxlIGxhbmd1YWdlIGV4dGVuc2lvbnMuCisrU1RZTEUgPSAtRFBST0NFU1NfT1BUSU9OUworIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIE9wdGlvbmFsOiBDaGFuZ2luZyB0aGUgZGVmYXVsdCBkaXNwb3NpdGlvbiBvZiBsb2dmaWxlIHJlY29yZHMKK0BAIC01MzUsNiArNTQzLDcgQEAKKyAjIFRoZSBMT0dfWFhYIG5hbWVzIGJlbG93IGFyZSB0YWtlbiBmcm9tIHRoZSAvdXNyL2luY2x1ZGUvc3lzbG9nLmggZmlsZS4KKyAKKyBGQUNJTElUWT0gTE9HX01BSUwJIyBMT0dfTUFJTCBpcyB3aGF0IG1vc3Qgc2VuZG1haWwgZGFlbW9ucyB1c2UKKytGQUNJTElUWT0gTE9HX0RBRU1PTgorIAorICMgVGhlIHN5c2xvZyBwcmlvcml0eSBhdCB3aGljaCBzdWNjZXNzZnVsIGNvbm5lY3Rpb25zIGFyZSBsb2dnZWQuCisgCitAQCAtNjMxLDYgKzY0MCw3IEBACisgIyBsb29rdXBzIGFsdG9nZXRoZXIsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLgorIAorIFBBUkFOT0lEPSAtRFBBUkFOT0lECisrUEFSQU5PSUQ9CisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgT3B0aW9uYWw6IHR1cm5pbmcgb2ZmIGhvc3RuYW1lIGxvb2t1cHMKK0BAIC02NDQsNiArNjU0LDcgQEAKKyAjIG1vZGUgKHNlZSBwcmV2aW91cyBzZWN0aW9uKSBhbmQgY29tbWVudCBvdXQgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uLgorIAorIEhPU1ROQU1FPSAtREFMV0FZU19IT1NUTkFNRQorK0hPU1ROQU1FPQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgT3B0aW9uYWw6IFR1cm5pbmcgb24gaG9zdCBBRERSRVNTIGNoZWNraW5nCitAQCAtNjcwLDYgKzY4MSw3IEBACisgIyBTb2xhcmlzIDIueCwgYW5kIExpbnV4LiBTZWUgeW91ciBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAjCisgIyBLSUxMX09QVD0gLURLSUxMX0lQX09QVElPTlMKKytLSUxMX09QVD0gLURLSUxMX0lQX09QVElPTlMKKyAKKyAjIyBFbmQgY29uZmlndXJhdGlvbiBvcHRpb25zCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTY3Nyw5ICs2ODksMTAgQEAKKyAjIFByb3RlY3Rpb24gYWdhaW5zdCB3ZWlyZCBzaGVsbHMgb3Igd2VpcmQgbWFrZSBwcm9ncmFtcy4KKyAKKyBTSEVMTAk9IC9iaW4vc2gKKy0uYy5vOjsJJChDQykgJChDRkxBR1MpIC1jICQqLmMKKysuYy5vOjsJJChDQykgJChDRkxBR1MpIC1vICQqLm8gLWMgJCouYworIAorLUNGTEFHUwk9IC1PIC1ERkFDSUxJVFk9JChGQUNJTElUWSkgJChBQ0NFU1MpICQoUEFSQU5PSUQpICQoTkVUR1JPVVApIFwKKytDT1BUUwk9IC1PMiAtZworK0NGTEFHUwk9ICQoQ09QVFMpIC1ERkFDSUxJVFk9JChGQUNJTElUWSkgJChBQ0NFU1MpICQoUEFSQU5PSUQpICQoTkVUR1JPVVApIFwKKyAJJChCVUdTKSAkKFNZU1RZUEUpICQoQVVUSCkgJChVTUFTSykgXAorIAktRFJFQUxfREFFTU9OX0RJUj1cIiQoUkVBTF9EQUVNT05fRElSKVwiICQoU1RZTEUpICQoS0lMTF9PUFQpIFwKKyAJLURTRVZFUklUWT0kKFNFVkVSSVRZKSAtRFJGQzkzMV9USU1FT1VUPSQoUkZDOTMxX1RJTUVPVVQpIFwKK0BAIC03MTIsMTAgKzcyNSwxMSBAQAorIAorIGNvbmZpZy1jaGVjazoKKyAJQHNldCArZTsgdGVzdCAtbiAiJChSRUFMX0RBRU1PTl9ESVIpIiB8fCB7IG1ha2U7IGV4aXQgMTsgfQorLQlAc2V0ICtlOyBlY2hvICQoQ0ZMQUdTKSA+L3RtcC9jZmxhZ3MuJCQkJCA7IFwKKy0JaWYgY21wIGNmbGFncyAvdG1wL2NmbGFncy4kJCQkIDsgXAorLQl0aGVuIHJtIC90bXAvY2ZsYWdzLiQkJCQgOyBcCistCWVsc2UgbXYgL3RtcC9jZmxhZ3MuJCQkJCBjZmxhZ3MgOyBcCisrCUBzZXQgK2U7IGVjaG8gJChDRkxBR1MpID5jZmxhZ3MubmV3IDsgXAorKwlpZiBjbXAgY2ZsYWdzIGNmbGFncy5uZXcgOyBcCisrCXRoZW4gcm0gY2ZsYWdzLm5ldyA7IFwKKysJZWxzZSBtdiBjZmxhZ3MubmV3IGNmbGFncyA7IFwKKyAJZmkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorKwlAaWYgWyAhIC1kIHNoYXJlZCBdOyB0aGVuIG1rZGlyIHNoYXJlZDsgZmkKKyAKKyAkKExJQik6CSQoTElCX09CSikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEzX3NobGliX3dlYWtzeW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxMzk2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoCkBAIC0wLDAgKzEsMjU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkyMDA0LTA1LTAyIDE1OjM3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUJMjAwNC0wNS0wMiAxNTozMTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTAsMTUgKzE1MCwxNSBAQAorIAorIGxpbnV4OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPXdlYWtfc3ltYm9scy5vIFwKKyAJTkVUR1JPVVA9Ii1ETkVUR1JPVVAiIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorLQlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKyAKKyBnbnU6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorLQlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9d2Vha19zeW1ib2xzLm8gXAorIAlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorLQlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IiIGFsbAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURIQVZFX1dFQUtTWU1TIC1EX1JFRU5UUkFOVCIgYWxsCisgCisgIyBUaGlzIGlzIGdvb2QgZm9yIG1hbnkgU1lTVitCU0QgaHlicmlkcyB3aXRoIE5JUywgcHJvYmFibHkgYWxzbyBmb3IgSFAtVVggNy54LgorIGhwdXggaHB1eDggaHB1eDkgaHB1eDEwOgorQEAgLTcxMyw3ICs3MTMsMjIgQEAKKyAKKyBMSUIJPSBsaWJ3cmFwLmEKKyAKKy1hbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrCisrc2hhcmVkLyUubzogJS5jCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKFNIQ0ZMQUdTKSAtYyAkPCAtbyAkQAorKworK1NPTUFKT1IgPSAwCisrU09NSU5PUiA9IDcuNgorKworK1NITElCCQk9IHNoYXJlZC9saWJ3cmFwLnNvLiQoU09NQUpPUikuJChTT01JTk9SKQorK1NITElCU09NQUoJPSBzaGFyZWQvbGlid3JhcC5zby4kKFNPTUFKT1IpCisrU0hMSUJTTwkJPSBzaGFyZWQvbGlid3JhcC5zbworK1NITElCRkxBR1MJPSAtTHNoYXJlZCAtbHdyYXAKKysKKytTSExJTktGTEFHUyA9IC1zaGFyZWQgLVhsaW5rZXIgLXNvbmFtZSAtWGxpbmtlciBsaWJ3cmFwLnNvLiQoU09NQUpPUikgLWxjICQoTElCUykKKytTSENGTEFHUyA9IC1mUElDIC1zaGFyZWQgLURfUkVFTlRSQU5UCisrU0hMSUJfT0JKPSAkKGFkZHByZWZpeCBzaGFyZWQvLCAkKExJQl9PQkopKTsKKysKKythbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrICQoTElCKQorIAorICMgSW52YWxpZGF0ZSBhbGwgb2JqZWN0IGZpbGVzIHdoZW4gdGhlIGNvbXBpbGVyIG9wdGlvbnMgKENGTEFHUykgaGF2ZSBjaGFuZ2VkLgorIAorQEAgLTczMSwyNyArNzQ2LDMzIEBACisgCSQoQVIpICQoQVJGTEFHUykgJChMSUIpICQoTElCX09CSikKKyAJLSQoUkFOTElCKSAkKExJQikKKyAKKy10Y3BkOgl0Y3BkLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChMSUIpICQoTElCUykKKyskKFNITElCKTogJChTSExJQl9PQkopCisrCXJtIC1mICQoU0hMSUIpCisrCSQoQ0MpIC1vICQoU0hMSUIpICQoU0hMSU5LRkxBR1MpICQoU0hMSUJfT0JKKQorKwlsbiAtc2YgJChub3RkaXIgJChTSExJQikpICQoU0hMSUJTT01BSikKKysJbG4gLXNmICQobm90ZGlyICQoU0hMSUJTT01BSikpICQoU0hMSUJTTykKKysKKyt0Y3BkOgl0Y3BkLm8gJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIHRjcGQubyAkKFNITElCRkxBR1MpCisgCisgbWlzY2Q6CW1pc2NkLm8gJChMSUIpCisgCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaXNjZC5vICQoTElCKSAkKExJQlMpCisgCistc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoTElCKSAkKExJQlMpCisrc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERNQVRDSF9PQkogPSB0Y3BkbWF0Y2gubyBmYWtlbG9nLm8gaW5ldGNmLm8gc2NhZmZvbGQubworIAorLXRjcGRtYXRjaDogJChUQ1BETUFUQ0hfT0JKKSAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChMSUIpICQoTElCUykKKyt0Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChTSExJQkZMQUdTKQorIAorLXRyeS1mcm9tOiB0cnktZnJvbS5vIGZha2Vsb2cubyAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoTElCKSAkKExJQlMpCisrdHJ5LWZyb206IHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCRkxBR1MpCisgCisgVENQRENIS19PQkogPSB0Y3BkY2hrLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKy10Y3BkY2hrOiAkKFRDUERDSEtfT0JKKSAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoTElCKSAkKExJQlMpCisrdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKyAKKyBzaGFyOgkkKEtJVCkKKyAJQHNoYXIgJChLSVQpCitAQCAtNzY3LDcgKzc4OCw5IEBACisgCisgY2xlYW46CisgCXJtIC1mIHRjcGQgbWlzY2Qgc2FmZV9maW5nZXIgdGNwZG1hdGNoIHRjcGRjaGsgdHJ5LWZyb20gKi5bb2FdIGNvcmUgXAorKwlsaWJ3cmFwKi5zbyogXAorIAljZmxhZ3MKKysJcm0gLXJmIHNoYXJlZC8KKyAKKyB0aWR5OgljbGVhbgorIAljaG1vZCAtUiBhK3IgLgorQEAgLTkxMyw1ICs5MzYsNiBAQAorIHVwZGF0ZS5vOiBteXN0ZGFyZy5oCisgdXBkYXRlLm86IHRjcGQuaAorIHZmcHJpbnRmLm86IGNmbGFncworK3dlYWtfc3ltYm9scy5vOiB0Y3BkLmgKKyB3b3JrYXJvdW5kcy5vOiBjZmxhZ3MKKyB3b3JrYXJvdW5kcy5vOiB0Y3BkLmgKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaAkyMDA0LTA1LTAyIDE1OjM3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCTIwMDQtMDUtMDIgMTU6Mzc6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtNCw2ICs0LDE1IEBACisgICAqIEF1dGhvcjogV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorICAgKi8KKyAKKysjaWZuZGVmIF9UQ1BXUkFQUEVSU19UQ1BEX0gKKysjZGVmaW5lIF9UQ1BXUkFQUEVSU19UQ1BEX0gKKysKKysvKiBOZWVkIGRlZmluaXRpb25zIG9mIHN0cnVjdCBzb2NrYWRkcl9pbiBhbmQgRklMRS4gKi8KKysjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKworK19fQkVHSU5fREVDTFMKKysKKyAvKiBTdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgb25lIGNvbW11bmljYXRpb25zIGVuZHBvaW50LiAqLworIAorICNkZWZpbmUgU1RSSU5HX0xFTkdUSAkxMjgJCS8qIGhvc3RzLCB1c2VycywgcHJvY2Vzc2VzICovCitAQCAtMjksMTAgKzM4LDEwIEBACisgICAgIGNoYXIgICAgcGlkWzEwXTsJCQkvKiBhY2Nlc3MgdmlhIGV2YWxfcGlkKHJlcXVlc3QpICovCisgICAgIHN0cnVjdCBob3N0X2luZm8gY2xpZW50WzFdOwkJLyogY2xpZW50IGVuZHBvaW50IGluZm8gKi8KKyAgICAgc3RydWN0IGhvc3RfaW5mbyBzZXJ2ZXJbMV07CQkvKiBzZXJ2ZXIgZW5kcG9pbnQgaW5mbyAqLworLSAgICB2b2lkICAoKnNpbmspICgpOwkJCS8qIGRhdGFncmFtIHNpbmsgZnVuY3Rpb24gb3IgMCAqLworLSAgICB2b2lkICAoKmhvc3RuYW1lKSAoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGhvc3RuYW1lICovCistICAgIHZvaWQgICgqaG9zdGFkZHIpICgpOwkJLyogYWRkcmVzcyB0byBwcmludGFibGUgYWRkcmVzcyAqLworLSAgICB2b2lkICAoKmNsZWFudXApICgpOwkJLyogY2xlYW51cCBmdW5jdGlvbiBvciAwICovCisrICAgIHZvaWQgICgqc2luaykgKGludCk7CQkvKiBkYXRhZ3JhbSBzaW5rIGZ1bmN0aW9uIG9yIDAgKi8KKysgICAgdm9pZCAgKCpob3N0bmFtZSkgKHN0cnVjdCBob3N0X2luZm8gKik7IC8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGhvc3RuYW1lICovCisrICAgIHZvaWQgICgqaG9zdGFkZHIpIChzdHJ1Y3QgaG9zdF9pbmZvICopOyAvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCisrICAgIHZvaWQgICgqY2xlYW51cCkgKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7IC8qIGNsZWFudXAgZnVuY3Rpb24gb3IgMCAqLworICAgICBzdHJ1Y3QgbmV0Y29uZmlnICpjb25maWc7CQkvKiBuZXRkaXIgaGFuZGxlICovCisgfTsKKyAKK0BAIC03MCwyMCArNzksMjcgQEAKKyAjZGVmaW5lIGZyb21ob3N0IHNvY2tfaG9zdAkJLyogbm8gVExJIHN1cHBvcnQgbmVlZGVkICovCisgI2VuZGlmCisgCistZXh0ZXJuIGludCBob3N0c19hY2Nlc3MoKTsJCS8qIGFjY2VzcyBjb250cm9sICovCistZXh0ZXJuIHZvaWQgc2hlbGxfY21kKCk7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKy1leHRlcm4gY2hhciAqcGVyY2VudF94KCk7CQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworLWV4dGVybiB2b2lkIHJmYzkzMSgpOwkJCS8qIGNsaWVudCBuYW1lIGZyb20gUkZDIDkzMSBkYWVtb24gKi8KKy1leHRlcm4gdm9pZCBjbGVhbl9leGl0KCk7CQkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworLWV4dGVybiB2b2lkIHJlZnVzZSgpOwkJCS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCistZXh0ZXJuIGNoYXIgKnhnZXRzKCk7CQkJLyogZmdldHMoKSBvbiBzdGVyb2lkcyAqLworLWV4dGVybiBjaGFyICpzcGxpdF9hdCgpOwkJLyogc3RyY2hyKCkgYW5kIHNwbGl0ICovCistZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG90X3F1YWRfYWRkcigpOwkvKiByZXN0cmljdGVkIGluZXRfYWRkcigpICovCisrZXh0ZXJuIGludCBob3N0c19hY2Nlc3Moc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdCk7CS8qIGFjY2VzcyBjb250cm9sICovCisrZXh0ZXJuIHZvaWQgc2hlbGxfY21kKGNoYXIgKik7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKytleHRlcm4gY2hhciAqcGVyY2VudF94KGNoYXIgKiwgaW50LCBjaGFyICosIHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CisrCQkJCQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworK2V4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosIGNoYXIgKik7CisrCQkJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCisrZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworK2V4dGVybiB2b2lkIHJlZnVzZShzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworK2V4dGVybiBjaGFyICp4Z2V0cyhjaGFyICosIGludCwgRklMRSAqKTsJLyogZmdldHMoKSBvbiBzdGVyb2lkcyAqLworK2V4dGVybiBjaGFyICpzcGxpdF9hdChjaGFyICosIGludCk7CQkvKiBzdHJjaHIoKSBhbmQgc3BsaXQgKi8KKytleHRlcm4gdW5zaWduZWQgbG9uZyBkb3RfcXVhZF9hZGRyKGNoYXIgKik7CS8qIHJlc3RyaWN0ZWQgaW5ldF9hZGRyKCkgKi8KKyAKKyAvKiBHbG9iYWwgdmFyaWFibGVzLiAqLworIAorKyNpZmRlZiBIQVZFX1dFQUtTWU1TCisrZXh0ZXJuIGludCBhbGxvd19zZXZlcml0eSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOyAvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisrZXh0ZXJuIGludCBkZW55X3NldmVyaXR5IF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7IC8qIGZvciBjb25uZWN0aW9uIGxvZ2dpbmcgKi8KKysjZWxzZQorIGV4dGVybiBpbnQgYWxsb3dfc2V2ZXJpdHk7CQkvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisgZXh0ZXJuIGludCBkZW55X3NldmVyaXR5OwkJLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworKyNlbmRpZgorIGV4dGVybiBjaGFyICpob3N0c19hbGxvd190YWJsZTsJCS8qIGZvciB2ZXJpZmljYXRpb24gbW9kZSByZWRpcmVjdGlvbiAqLworIGV4dGVybiBjaGFyICpob3N0c19kZW55X3RhYmxlOwkJLyogZm9yIHZlcmlmaWNhdGlvbiBtb2RlIHJlZGlyZWN0aW9uICovCisgZXh0ZXJuIGludCBob3N0c19hY2Nlc3NfdmVyYm9zZTsJLyogZm9yIHZlcmJvc2UgbWF0Y2hpbmcgbW9kZSAqLworQEAgLTk4LDYgKzExNCw4IEBACisgI2lmZGVmIF9fU1REQ19fCisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3RfaW5pdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICosLi4uKTsKKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9zZXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqLC4uLik7CisrZXh0ZXJuIGludCBob3N0c19jdGwoY2hhciAqZGFlbW9uLCBjaGFyICpjbGllbnRfbmFtZSwgY2hhciAqY2xpZW50X2FkZHIsCisrCQljaGFyICpjbGllbnRfdXNlcik7CisgI2Vsc2UKKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9pbml0KCk7CS8qIGluaXRpYWxpemUgcmVxdWVzdCAqLworIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X3NldCgpOwkvKiB1cGRhdGUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KK0BAIC0xMjEsMjAgKzEzOSwyMyBAQAorICAgKiBob3N0X2luZm8gc3RydWN0dXJlcyBzZXJ2ZSBhcyBjYWNoZXMgZm9yIHRoZSBsb29rdXAgcmVzdWx0cy4KKyAgICovCisgCistZXh0ZXJuIGNoYXIgKmV2YWxfdXNlcigpOwkJLyogY2xpZW50IHVzZXIgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9ob3N0bmFtZSgpOwkJLyogcHJpbnRhYmxlIGhvc3RuYW1lICovCistZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGFkZHIoKTsJCS8qIHByaW50YWJsZSBob3N0IGFkZHJlc3MgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbygpOwkJLyogaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9jbGllbnQoKTsJCS8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworLWV4dGVybiBjaGFyICpldmFsX3NlcnZlcigpOwkJLyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfdXNlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGllbnQgdXNlciAqLworK2V4dGVybiBjaGFyICpldmFsX2hvc3RuYW1lKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIHByaW50YWJsZSBob3N0bmFtZSAqLworK2V4dGVybiBjaGFyICpldmFsX2hvc3RhZGRyKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIHByaW50YWJsZSBob3N0IGFkZHJlc3MgKi8KKytleHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbyhzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworK2V4dGVybiBjaGFyICpldmFsX2NsaWVudChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworK2V4dGVybiBjaGFyICpldmFsX3NlcnZlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworICNkZWZpbmUgZXZhbF9kYWVtb24ocikJKChyKS0+ZGFlbW9uKQkvKiBkYWVtb24gcHJvY2VzcyBuYW1lICovCisgI2RlZmluZSBldmFsX3BpZChyKQkoKHIpLT5waWQpCS8qIHByb2Nlc3MgaWQgKi8KKyAKKyAvKiBTb2NrZXQtc3BlY2lmaWMgbWV0aG9kcywgaW5jbHVkaW5nIEROUyBob3N0bmFtZSBsb29rdXBzLiAqLworIAorLWV4dGVybiB2b2lkIHNvY2tfaG9zdCgpOwkJLyogbG9vayB1cCBlbmRwb2ludCBhZGRyZXNzZXMgKi8KKy1leHRlcm4gdm9pZCBzb2NrX2hvc3RuYW1lKCk7CQkvKiB0cmFuc2xhdGUgYWRkcmVzcyB0byBob3N0bmFtZSAqLworLWV4dGVybiB2b2lkIHNvY2tfaG9zdGFkZHIoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKysvKiBsb29rIHVwIGVuZHBvaW50IGFkZHJlc3NlcyAqLworK2V4dGVybiB2b2lkIHNvY2tfaG9zdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOworKy8qIHRyYW5zbGF0ZSBhZGRyZXNzIHRvIGhvc3RuYW1lICovCisrZXh0ZXJuIHZvaWQgc29ja19ob3N0bmFtZShzdHJ1Y3QgaG9zdF9pbmZvICopOworKy8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKytleHRlcm4gdm9pZCBzb2NrX2hvc3RhZGRyKHN0cnVjdCBob3N0X2luZm8gKik7CisgI2RlZmluZSBzb2NrX21ldGhvZHMocikgXAorIAl7IChyKS0+aG9zdG5hbWUgPSBzb2NrX2hvc3RuYW1lOyAociktPmhvc3RhZGRyID0gc29ja19ob3N0YWRkcjsgfQorIAorQEAgLTE4Miw3ICsyMDMsNyBAQAorICAgKiBiZWhhdmlvci4KKyAgICovCisgCistZXh0ZXJuIHZvaWQgcHJvY2Vzc19vcHRpb25zKCk7CQkvKiBleGVjdXRlIG9wdGlvbnMgKi8KKytleHRlcm4gdm9pZCBwcm9jZXNzX29wdGlvbnMoY2hhciAqLCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIGV4ZWN1dGUgb3B0aW9ucyAqLworIGV4dGVybiBpbnQgZHJ5X3J1bjsJCQkvKiB2ZXJpZmljYXRpb24gZmxhZyAqLworIAorIC8qIEJ1ZyB3b3JrYXJvdW5kcy4gKi8KK0BAIC0yMjEsMyArMjQyLDcgQEAKKyAjZGVmaW5lIHN0cnRvawlteV9zdHJ0b2sKKyBleHRlcm4gY2hhciAqbXlfc3RydG9rKCk7CisgI2VuZGlmCisrCisrX19FTkRfREVDTFMKKysKKysjZW5kaWYKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd2Vha19zeW1ib2xzLmMgdGNwX3dyYXBwZXJzXzcuNi93ZWFrX3N5bWJvbHMuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy93ZWFrX3N5bWJvbHMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvd2Vha19zeW1ib2xzLmMJMjAwNC0wNS0wMiAxNTozMTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTEgQEAKKysgLyoKKysgICogQCgjKSB3ZWFrX3N5bWJvbHMuaCAxLjUgOTkvMTIvMjkgMjM6NTAKKysgICogCisrICAqIEF1dGhvcjogQW50aG9ueSBUb3ducyA8YWp0QGRlYmlhbi5vcmc+CisrICAqLworKworKyNpZmRlZiBIQVZFX1dFQUtTWU1TCisrI2luY2x1ZGUgPHN5c2xvZy5oPgorK2ludCBkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisraW50IGFsbG93X3NldmVyaXR5ID0gU0VWRVJJVFk7IAorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNF9jaWRyX3N1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1Njg1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNF9jaWRyX3N1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDMtMDgtMjEgMDM6MTU6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtOTAsNiArOTAsMTAgQEAKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKyAuSVAgXChidQorK0FuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbW0nIGlzIGludGVycHJldGVkIGFzIGEKKytgbmV0L21hc2tsZW5ndGgnIHBhaXIsIHdoZXJlIGBtbScgaXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBgMScKKytiaXRzIGluIHRoZSBuZXRtYXNrIGFwcGxpZWQgdG8gdGhlIGBuLm4ubi5uJyBhZGRyZXNzLgorKy5JUCBcKGJ1CisgQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgW246bjpuOm46bjpuOm46bl0vbVwnIGlzIGludGVycHJldGVkIGFzIGEKKyBgW25ldF0vcHJlZml4bGVuXCcgcGFpci4gQW4gSVB2NiBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZgorIGBwcmVmaXhsZW5cJyBiaXRzIG9mIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUgYHByZWZpeGxlblwnIGJpdHMgb2YgdGhlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw4IEBACisgICAgIGlmICgoYWRkciA9IGRvdF9xdWFkX2FkZHIoc3RyaW5nKSkgPT0gSU5BRERSX05PTkUpCisgCXJldHVybiAoTk8pOworICAgICBpZiAoKG5ldCA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCistCXx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKSB7CisrCXx8ICgobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORQorKwkgICAgJiYgKG1hc2sgPSBjaWRyX21hc2tfYWRkcihtYXNrX3RvaykpID09IDApKSB7CisgI2lmbmRlZiBJTkVUNgorIAl0Y3BkX3dhcm4oImJhZCBuZXQvbWFzayBleHByZXNzaW9uOiAlcy8lcyIsIG5ldF90b2ssIG1hc2tfdG9rKTsKKyAjZW5kaWYKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvbWlzYy5jIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYwkyMDAzLTA4LTIxIDAzOjE1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtMTA3LDMgKzEwNywxNyBAQAorICAgICB9CisgICAgIHJldHVybiAocnVucyA9PSA0ID8gaW5ldF9hZGRyKHN0cikgOiBJTkFERFJfTk9ORSk7CisgfQorKworKy8qIGNpZHJfbWFza19hZGRyIC0gY29udmVydCBjaWRyIG5ldG1hc2sgbGVuZ3RoIHRvIGludGVybmFsIGZvcm0gKi8KKysKKyt1bnNpZ25lZCBsb25nIGNpZHJfbWFza19hZGRyKHN0cikKKytjaGFyICAgKnN0cjsKKyt7CisrICAgIGludCAgICAgbWFza2JpdHM7CisrCisrICAgIG1hc2tiaXRzID0gYXRvaShzdHIpOworKyAgICBpZiAobWFza2JpdHMgPCAxIHx8IG1hc2tiaXRzID4gMzIpCisrCXJldHVybiAoMCk7CisrICAgIHJldHVybiBodG9ubCgweEZGRkZGRkZGIDw8ICgzMiAtIG1hc2tiaXRzKSk7CisrfQorKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMJMjAwMy0wOC0yMSAwMzowOTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00OTcsMTIgKzQ5NywxMiBAQAorIAlpbnQgbWFza19sZW47CisgCisgCWlmICgoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCistCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSAmJiBjaWRyX21hc2tfYWRkcihtYXNrKSA9PSAwKQorIAkgICAgJiYgKCFpc19pbmV0Nl9hZGRyKHBhdCkKKyAJCXx8ICgobWFza19sZW4gPSBhdG9pKG1hc2spKSA8IDAgfHwgbWFza19sZW4gPiAxMjgpKSkKKyAjZWxzZQorIAlpZiAoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCistCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSAmJiBjaWRyX21hc2tfYWRkcihtYXNrKSA9PSAwKQorICNlbmRpZgorIAkgICAgdGNwZF93YXJuKCIlcy8lczogYmFkIG5ldC9tYXNrIHBhdHRlcm4iLCBwYXQsIG1hc2spOworICAgICB9IGVsc2UgaWYgKFNUUl9FUShwYXQsICJGQUlMIikpIHsJCS8qIG9ic29sZXRlICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNV9tYXRjaF9jbGFyaWZ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYTY4NzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTI1IDEyOjE3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0yNSAxMjoxNzo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC04OSw2ICs4OSw4IEBACisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisrYDI1NS4yNTUuMjU1LjI1NVwnIGlzIG5vdCBhIHZhbGlkIG1hc2sgdmFsdWUsIHNvIGEgc2luZ2xlIGhvc3QgY2FuIGJlCisrbWF0Y2hlZCBqdXN0IGJ5IGl0cyBJUC4KKyAuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbW0nIGlzIGludGVycHJldGVkIGFzIGEKKyBgbmV0L21hc2tsZW5ndGgnIHBhaXIsIHdoZXJlIGBtbScgaXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBgMScKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODczNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ldmFsLmMgdGNwX3dyYXBwZXJzXzcuNi9ldmFsLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZXZhbC5jCTE5OTUtMDEtMzAgMTk6NTE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ldmFsLmMJMjAwNC0xMS0wNCAxMzo1OTowMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05OCw2ICs5OCwyOCBAQAorICAgICB9CisgfQorIAorKy8qIGV2YWxfcG9ydCAtIHJldHVybiBzdHJpbmcgd2l0aCB0aGUgcG9ydCAqLworK2NoYXIgICAqZXZhbF9wb3J0KHNhZGRyKQorKyNpZmRlZiBJTkVUNgorK3N0cnVjdCBzb2NrYWRkciAqc2FkZHI7CisrI2Vsc2UKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyOworKyNlbmRpZgorK3sKKysgICAgc3RhdGljIGNoYXIgcG9ydFsxNl07CisrICAgIGlmIChzYWRkciAhPSAwKSB7CisrICAgICAgICBzcHJpbnRmKHBvcnQsICIldSIsCisrI2lmZGVmIElORVQ2CisrICAgICAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYWRkciktPnNpbl9wb3J0KSk7CisrI2Vsc2UKKysgICAgICAgICAgICBudG9ocyhzYWRkci0+c2luX3BvcnQpKTsKKysjZW5kaWYKKysgICAgfSBlbHNlIHsKKysJc3RyY3B5KHBvcnQsICIwIik7CisrICAgIH0KKysgICAgcmV0dXJuIChwb3J0KTsKKyt9CisrCisgLyogZXZhbF9jbGllbnQgLSByZXR1cm4gc3RyaW5nIHdpdGggYXMgbXVjaCBhYm91dCB0aGUgY2xpZW50IGFzIHdlIGtub3cgKi8KKyAKKyBjaGFyICAgKmV2YWxfY2xpZW50KHJlcXVlc3QpCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0xMS0wNCAxMzoxNzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMTEtMDQgMTM6NTU6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMTc1LDYgKzE3NSw4IEBACisgdW5hdmFpbGFibGUuCisgLklQICIlbiAoJU4pIgorIFRoZSBjbGllbnQgKHNlcnZlcikgaG9zdCBuYW1lIChvciAidW5rbm93biIgb3IgInBhcmFub2lkIikuCisrLklQICIlciAoJVIpIgorK1RoZSBjbGllbnRzIChzZXJ2ZXJzKSBwb3J0IG51bWJlciAob3IgIjAiKS4KKyAuSVAgJXAKKyBUaGUgZGFlbW9uIHByb2Nlc3MgaWQuCisgLklQICVzCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfeC5jIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF94LmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF94LmMJMTk5NC0xMi0yOCAxNzo0MjozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfeC5jCTIwMDQtMTEtMDQgMTM6MTk6MjkuMDAwMDAwMDAwICswMTAwCitAQCAtNjMsNiArNjMsOCBAQAorIAkJY2ggPT0gJ24nID8gZXZhbF9ob3N0bmFtZShyZXF1ZXN0LT5jbGllbnQpIDoKKyAJCWNoID09ICdOJyA/IGV2YWxfaG9zdG5hbWUocmVxdWVzdC0+c2VydmVyKSA6CisgCQljaCA9PSAncCcgPyBldmFsX3BpZChyZXF1ZXN0KSA6CisrCQljaCA9PSAncicgPyBldmFsX3BvcnQocmVxdWVzdC0+Y2xpZW50LT5zaW4pIDoKKysJCWNoID09ICdSJyA/IGV2YWxfcG9ydChyZXF1ZXN0LT5zZXJ2ZXItPnNpbikgOgorIAkJY2ggPT0gJ3MnID8gZXZhbF9zZXJ2ZXIocmVxdWVzdCkgOgorIAkJY2ggPT0gJ3UnID8gZXZhbF91c2VyKHJlcXVlc3QpIDoKKyAJCWNoID09ICclJyA/ICIlIiA6ICh0Y3BkX3dhcm4oInVucmVjb2duaXplZCAlJSVjIiwgY2gpLCAiIik7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNC0xMS0wNCAxMzoxNzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA0LTExLTA0IDEzOjE5OjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTE0NSw2ICsxNDUsMTEgQEAKKyBleHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbyhzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworIGV4dGVybiBjaGFyICpldmFsX2NsaWVudChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworIGV4dGVybiBjaGFyICpldmFsX3NlcnZlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworKyNpZmRlZiBJTkVUNgorK2V4dGVybiBjaGFyICpldmFsX3BvcnQoc3RydWN0IHNvY2thZGRyICopOworKyNlbHNlCisrZXh0ZXJuIGNoYXIgKmV2YWxfcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisrI2VuZGlmCisgI2RlZmluZSBldmFsX2RhZW1vbihyKQkoKHIpLT5kYWVtb24pCS8qIGRhZW1vbiBwcm9jZXNzIG5hbWUgKi8KKyAjZGVmaW5lIGV2YWxfcGlkKHIpCSgociktPnBpZCkJLyogcHJvY2VzcyBpZCAqLworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvaGF2ZV9zdHJlcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M1NTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfbS5jIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF9tLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF9tLmMJMTk5NC0xMi0yOCAxNzo0MjozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfbS5jCTIwMDMtMDgtMjEgMDI6NDU6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtMjksMTEgKzI5LDE1IEBACisgCisgICAgIHdoaWxlICgqYnAgPSAqY3ApCisgCWlmICgqY3AgPT0gJyUnICYmIGNwWzFdID09ICdtJykgeworKyNpZmRlZiBIQVZFX1NUUkVSUk9SCisrCSAgICBzdHJjcHkoYnAsIHN0cmVycm9yKGVycm5vKSk7CisrI2Vsc2UKKyAJICAgIGlmIChlcnJubyA8IHN5c19uZXJyICYmIGVycm5vID4gMCkgeworIAkJc3RyY3B5KGJwLCBzeXNfZXJybGlzdFtlcnJub10pOworIAkgICAgfSBlbHNlIHsKKyAJCXNwcmludGYoYnAsICJVbmtub3duIGVycm9yICVkIiwgZXJybm8pOworIAkgICAgfQorKyNlbmRpZgorIAkgICAgYnAgKz0gc3RybGVuKGJwKTsKKyAJICAgIGNwICs9IDI7CisgCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTIxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcub3JpZy9NYWtlZmlsZQkyMDA5LTA0LTA2IDEwOjU1OjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkyMDA5LTA0LTA2IDEwOjU3OjA0LjAwMDAwMDAwMCArMDAwMAorQEAgLTc0OCwzMSArNzQ4LDMxIEBACisgCisgJChTSExJQik6ICQoU0hMSUJfT0JKKQorIAlybSAtZiAkKFNITElCKQorLQkkKENDKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKysJJChDQykgJChMREZMQUdTKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKyAJbG4gLXNmICQobm90ZGlyICQoU0hMSUIpKSAkKFNITElCU09NQUopCisgCWxuIC1zZiAkKG5vdGRpciAkKFNITElCU09NQUopKSAkKFNITElCU08pCisgCisgdGNwZDoJdGNwZC5vICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorIAorIG1pc2NkOgltaXNjZC5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWlzY2QubyAkKExJQikgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBtaXNjZC5vICQoTElCKSAkKExJQlMpCisgCisgc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BETUFUQ0hfT0JKID0gdGNwZG1hdGNoLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKyB0Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoU0hMSUJGTEFHUykKKyAKKyB0cnktZnJvbTogdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERDSEtfT0JKID0gdGNwZGNoay5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCisgdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChUQ1BEQ0hLX09CSikgJChTSExJQkZMQUdTKQorIAorIHNoYXI6CSQoS0lUKQorIAlAc2hhciAkKEtJVCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzM1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gZGFmODlkMjcyZTUxYjIxNTMwMTVjZTdmNTRhYjBiODYxODJlNjRjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyOCBKYW4gMjAxNSAxODo1MDoyMyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK21ha2U6ICoqKiBObyBydWxlIHRvIG1ha2UgdGFyZ2V0IGBjZmxhZ3MnLCBuZWVkZWQgYnkgYHRjcGQubycuICBTdG9wLgorCitMZXQgImNmbGFncyIgZGVwZW5kIG9uIGNvbmZpZy1jaGVjayB3aGljaCBnZW5lcmF0ZXMgY2ZsZ2FzIHdpbGwgZml4IHRoZQorcHJvYmxlbS4KKworQWxzbyBmaXhlZDoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgc2hhcmVkL2hvc3RzX2FjY2Vzcy5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgICAgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGZlNWU3MzIuLmY0Njg3NTEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC03MTQsNiArNzE0LDcgQEAgS0lUCT0gUkVBRE1FIG1pc2NkLmMgdGNwZC5jIGZyb21ob3N0LmMgaG9zdHNfYWNjZXNzLmMgc2hlbGxfY21kLmMgXAorIExJQgk9IGxpYndyYXAuYQorIAorIHNoYXJlZC8lLm86ICUuYworKwlbIC1kIHNoYXJlZCBdIHx8IG1rZGlyIC1wIHNoYXJlZAorIAkkKENDKSAkKENGTEFHUykgJChTSENGTEFHUykgLWMgJDwgLW8gJEAKKyAKKyBTT01BSk9SID0gMAorQEAgLTczMCw2ICs3MzEsOCBAQCBTSExJQl9PQko9ICQoYWRkcHJlZml4IHNoYXJlZC8sICQoTElCX09CSikpOworIAorIGFsbCBvdGhlcjogY29uZmlnLWNoZWNrIHRjcGQgdGNwZG1hdGNoIHRyeS1mcm9tIHNhZmVfZmluZ2VyIHRjcGRjaGsgJChMSUIpCisgCisrY2ZsYWdzOiBjb25maWctY2hlY2sKKysKKyAjIEludmFsaWRhdGUgYWxsIG9iamVjdCBmaWxlcyB3aGVuIHRoZSBjb21waWxlciBvcHRpb25zIChDRkxBR1MpIGhhdmUgY2hhbmdlZC4KKyAKKyBjb25maWctY2hlY2s6CitAQCAtNzM5LDcgKzc0Miw3IEBAIGNvbmZpZy1jaGVjazoKKyAJdGhlbiBybSBjZmxhZ3MubmV3IDsgXAorIAllbHNlIG12IGNmbGFncy5uZXcgY2ZsYWdzIDsgXAorIAlmaSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCistCUBpZiBbICEgLWQgc2hhcmVkIF07IHRoZW4gbWtkaXIgc2hhcmVkOyBmaQorKwlAWyAtZCBzaGFyZWQgXSB8fCBta2RpciAtcCBzaGFyZWQKKyAKKyAkKExJQik6CSQoTElCX09CSikKKyAJcm0gLWYgJChMSUIpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYW5fZnJvbWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliZDdkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYW5fZnJvbWhvc3QucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjMJMjAwNC0wNC0yNSAwMDoxMDo0OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCTIwMDQtMDQtMjUgMDA6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMTQsNiArMTQsOSBAQAorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Rfc2V0KHJlcXVlc3QsIGtleSwgdmFsdWUsIC4uLiwgMCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorK3ZvaWQgZnJvbWhvc3QocmVxdWVzdCkKKytzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworKworIGludCBob3N0c19hY2Nlc3MocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorQEAgLTYwLDYgKzYzLDcgQEAKKyBpcyBhdmFpbGFibGUsIGhvc3QgbmFtZXMgYW5kIGNsaWVudCB1c2VyIG5hbWVzIGFyZSBsb29rZWQgdXAgb24gZGVtYW5kLAorIHVzaW5nIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBhcyBhIGNhY2hlLiAgaG9zdHNfYWNjZXNzKCkgcmV0dXJucyB6ZXJvIGlmCisgYWNjZXNzIHNob3VsZCBiZSBkZW5pZWQuCisrZnJvbWhvc3QoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaG9zdHNfYWNjZXNzKCkuCisgLlBQCisgaG9zdHNfY3RsKCkgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgcmVxdWVzdF9pbml0KCkgYW5kIGhvc3RzX2FjY2VzcygpCisgcm91dGluZXMgd2l0aCBhIHBlcmhhcHMgbW9yZSBjb252ZW5pZW50IGludGVyZmFjZSAodGhvdWdoIGl0IGRvZXMgbm90CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MDYwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitTVFJJTkdTIG5hbWUgY29uZmxpY3RzIHdpdGggdmFyaWFibGUgZm9yIHN0cmluZ3MgdG9vbHMgKGUuZy4gaTU4Ni1vZS1saW51eC1zdHJpbmdzKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZS5vcmlnCTIwMTMtMDQtMTggMjM6NDE6NTguMjc3OTgxNzQwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDEzLTA0LTE4IDIzOjQyOjQyLjUxMzk3ODk2NiArMDIwMAorQEAgLTMwOSw3ICszMDksNyBAQAorIHB5cmFtaWQ6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0iZW52aXJvbi5vIHZmcHJpbnRmLm8iIFwKKy0JU1RSSU5HUz0iLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5IiBcCisrCVNUUklOR1NfRkxBR1M9Ii1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweSIgXAorIAlORVRHUk9VUD0iLURORVRHUk9VUCAtRFVTRV9HRVRET01BSU4iIFRMST0gYWxsCisgCisgIyBVbnRlc3RlZC4KK0BAIC00MTksNyArNDE5LDcgQEAKKyAjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGlmIHlvdXIgQyBsaWJyYXJ5IGRvZXMgbm90IHByb3ZpZGUgdGhlCisgIyBzdHJjaHIvc3RycmNoci9tZW1jbXAgcm91dGluZXMsIGJ1dCBjb21lcyB3aXRoIGluZGV4L3JpbmRleC9iY21wLgorICMKKy0jU1RSSU5HUz0gLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5CisrI1NUUklOR1NfRkxBR1M9IC1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBTeXN0ZW0gZGVwZW5kZW5jaWVzOiBzZWxlY3Rpb24gb2Ygbm9uLWRlZmF1bHQgb2JqZWN0IGxpYnJhcmllcy4KK0BAIC02OTAsNyArNjkwLDcgQEAKKyAJJChCVUdTKSAkKFNZU1RZUEUpICQoQVVUSCkgJChVTUFTSykgXAorIAktRFJFQUxfREFFTU9OX0RJUj1cIiQoUkVBTF9EQUVNT05fRElSKVwiICQoU1RZTEUpICQoS0lMTF9PUFQpIFwKKyAJLURTRVZFUklUWT0kKFNFVkVSSVRZKSAtRFJGQzkzMV9USU1FT1VUPSQoUkZDOTMxX1RJTUVPVVQpIFwKKy0JJChVQ0hBUikgJChUQUJMRVMpICQoU1RSSU5HUykgJChUTEkpICQoRVhUUkFfQ0ZMQUdTKSAkKERPVCkgXAorKwkkKFVDSEFSKSAkKFRBQkxFUykgJChTVFJJTkdTX0ZMQUdTKSAkKFRMSSkgJChFWFRSQV9DRkxBR1MpICQoRE9UKSBcCisgCSQoVlNZU0xPRykgJChIT1NUTkFNRSkKKyAKKyBMSUJfT0JKPSBob3N0c19hY2Nlc3MubyBvcHRpb25zLm8gc2hlbGxfY21kLm8gcmZjOTMxLm8gZXZhbC5vIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3NWI4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jCTIwMDQtMDgtMjkgMTg6NDA6MDguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQwOjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTkyLDYgKzkyLDggQEAKKyAgICAgY2hhciAgICpjcDsKKyAgICAgY2hhciAgICpyZXN1bHQgPSB1bmtub3duOworICAgICBGSUxFICAgKmZwOworKyAgICB1bnNpZ25lZCBzYXZlZF90aW1lb3V0OworKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG5hY3QsIG9hY3Q7CisgCisgI2lmZGVmIElORVQ2CisgICAgIC8qIGFkZHJlc3MgZmFtaWx5IG11c3QgYmUgdGhlIHNhbWUgKi8KK0BAIC0xMzQsNyArMTM2LDEyIEBACisgCSAqLworIAorIAlpZiAoc2V0am1wKHRpbWVidWYpID09IDApIHsKKy0JICAgIHNpZ25hbChTSUdBTFJNLCB0aW1lb3V0KTsKKysJICAgIC8qIFNhdmUgU0lHQUxSTSB0aW1lciBhbmQgaGFuZGxlci4gU3VkaGVlciBBYmR1bC1TYWxhbSwgU1VOLiAqLworKwkgICAgc2F2ZWRfdGltZW91dCA9IGFsYXJtKDApOworKwkgICAgbmFjdC5zYV9oYW5kbGVyID0gdGltZW91dDsKKysJICAgIG5hY3Quc2FfZmxhZ3MgPSAwOworKwkgICAgKHZvaWQpIHNpZ2VtcHR5c2V0KCZuYWN0LnNhX21hc2spOworKwkgICAgKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCAmbmFjdCwgJm9hY3QpOworIAkgICAgYWxhcm0ocmZjOTMxX3RpbWVvdXQpOworIAorIAkgICAgLyoKK0BAIC0yMjMsNiArMjMwLDEwIEBACisgCSAgICB9CisgCSAgICBhbGFybSgwKTsKKyAJfQorKwkvKiBSZXN0b3JlIFNJR0FMUk0gdGltZXIgYW5kIGhhbmRsZXIuIFN1ZGhlZXIgQWJkdWwtU2FsYW0sIFNVTi4gKi8KKysJKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2FjdCwgTlVMTCk7CisrCWlmIChzYXZlZF90aW1lb3V0ID4gMCkKKysJICAgIGFsYXJtKHNhdmVkX3RpbWVvdXQpOworIAlmY2xvc2UoZnApOworICAgICB9CisgICAgIFNUUk5fQ1BZKGRlc3QsIHJlc3VsdCwgU1RSSU5HX0xFTkdUSCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzZjRmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZgpAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMJMjAwNS0wMy0wOSAxODoyMjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMJMjAwNS0wMy0wOSAxODoyMDo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMzcsMTAgKzIzNywxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorIC8qIEFSR1NVU0VEICovCisgCistdm9pZCAgICByZmM5MzEocmVxdWVzdCkKKy1zdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworK3ZvaWQgICAgcmZjOTMxKHJtdF9zaW4sIG91cl9zaW4sIGRlc3QpCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IHNvY2thZGRyICpybXRfc2luOworK3N0cnVjdCBzb2NrYWRkciAqb3VyX3NpbjsKKysjZWxzZQorK3N0cnVjdCBzb2NrYWRkcl9pbiAqcm10X3NpbjsKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKm91cl9zaW47CisrI2VuZGlmCisrY2hhciAgICpkZXN0OworIHsKKy0gICAgc3RyY3B5KHJlcXVlc3QtPnVzZXIsIHVua25vd24pOworKyAgICBzdHJjcHkoZGVzdCwgdW5rbm93bik7CisgfQorIAorIC8qIGNoZWNrX3BhdGggLSBleGFtaW5lIGFjY2Vzc2liaWxpdHkgKi8KK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNS0wMy0wOSAxODoyMjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA1LTAzLTA5IDE4OjIxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTgzLDcgKzgzLDExIEBAIGV4dGVybiBpbnQgaG9zdHNfYWNjZXNzKHN0cnVjdCByZXF1ZXN0X2kKKyBleHRlcm4gdm9pZCBzaGVsbF9jbWQoY2hhciAqKTsJCS8qIGV4ZWN1dGUgc2hlbGwgY29tbWFuZCAqLworIGV4dGVybiBjaGFyICpwZXJjZW50X3goY2hhciAqLCBpbnQsIGNoYXIgKiwgc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsKKyAJCQkJCS8qIGRvICU8Y2hhcj4gZXhwYW5zaW9uICovCisrI2lmZGVmIElORVQ2CisgZXh0ZXJuIHZvaWQgcmZjOTMxKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY2hhciAqKTsKKysjZWxzZQorK2V4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luICosIGNoYXIgKik7CisrI2VuZGlmCisgCQkJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCisgZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworIGV4dGVybiB2b2lkIHJlZnVzZShzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzU2MTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjgKQEAgLTAsMCArMSwzNCBAQAorLlRIIFNBRkVfRklOR0VSIDggIjIxdGggSnVuZSAxOTk3IiBMaW51eCAiTGludXggUHJvZ3JhbW1lcidzIE1hbnVhbCIKKy5TSCBOQU1FCitzYWZlX2ZpbmdlciBcLSBmaW5nZXIgY2xpZW50IHdyYXBwZXIgdGhhdCBwcm90ZWN0cyBhZ2FpbnN0IG5hc3R5IHN0dWZmCitmcm9tIGZpbmdlciBzZXJ2ZXJzCisuU0ggU1lOT1BTSVMKKy5CIHNhZmVfZmluZ2VyIFtmaW5nZXJfb3B0aW9uc10KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBzYWZlX2ZpbmdlcgorY29tbWFuZCBwcm90ZWN0cyBhZ2FpbnN0IG5hc3R5IHN0dWZmIGZyb20gZmluZ2VyIHNlcnZlcnMuIFVzZSB0aGlzCitwcm9ncmFtIGZvciBhdXRvbWF0aWMgcmV2ZXJzZSBmaW5nZXIgcHJvYmVzIGZyb20gdGhlCisuQiB0Y3Bfd3JhcHBlcgorLkIgKHRjcGQpCissIG5vdCB0aGUgcmF3IGZpbmdlciBjb21tYW5kLiBUaGUKKy5CIHNhZmVfZmluZ2VyCitjb21tYW5kIG1ha2VzIHN1cmUgdGhhdCB0aGUgZmluZ2VyIGNsaWVudCBpcyBub3QgcnVuIHdpdGggcm9vdAorcHJpdmlsZWdlcy4gSXQgYWxzbyBydW5zIHRoZSBmaW5nZXIgY2xpZW50IHdpdGggYSBkZWZpbmVkIFBBVEgKK2Vudmlyb25tZW50LgorLkIgc2FmZV9maW5nZXIKK3dpbGwgYWxzbyBwcm90ZWN0IHlvdSBmcm9tIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgb3V0cHV0IG9mIHNvbWUKK2ZpbmdlciBzZXJ2ZXJzLiBUaGUgcHJvYmxlbTogc29tZSBwcm9ncmFtcyBtYXkgcmVhY3QgdG8gc3R1ZmYgaW4KK3RoZSBmaXJzdCBjb2x1bW4uIE90aGVyIHByb2dyYW1zIG1heSBnZXQgdXBzZXQgYnkgdGhyYXNoIGFueXdoZXJlCitvbiBhIGxpbmUuIEZpbGUgc3lzdGVtcyBtYXkgZmlsbCB1cCBhcyB0aGUgZmluZ2VyIHNlcnZlciBrZWVwcworc2VuZGluZyBkYXRhLiBUZXh0IGVkaXRvcnMgbWF5IGJvbWIgb3V0IG9uIGV4dHJlbWVseSBsb25nIGxpbmVzLgorVGhlIGZpbmdlciBzZXJ2ZXIgbWF5IHRha2UgZm9yZXZlciBiZWNhdXNlIGl0IGlzIHNvbWVob3cgd2VkZ2VkLgorLkIgc2FmZV9maW5nZXIKK3Rha2VzIGNhcmUgb2YgYWxsIHRoaXMgYmFkbmVzcy4KKy5TSCBTRUUgQUxTTworLkJSIGhvc3RzX2FjY2VzcyAoNSksCisuQlIgaG9zdHNfb3B0aW9ucyAoNSksCisuQlIgdGNwZCAoOCkKKy5TSCBBVVRIT1IKK1dpZXRzZSBWZW5lbWEsIEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmFmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0gdGNwLXdyYXBwZXJzLTcuNi1pcHY2LjEub3JpZy9zYWZlX2Zpbmdlci5jCisrKysgdGNwLXdyYXBwZXJzLTcuNi1pcHY2LjEvc2FmZV9maW5nZXIuYworQEAgLTI2LDIxICsyNiwyNCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxwd2QuaD4KKysjaW5jbHVkZSA8c3lzbG9nLmg+CisgCisgZXh0ZXJuIHZvaWQgZXhpdCgpOworIAorIC8qIExvY2FsIHN0dWZmICovCisgCistY2hhciAgICBwYXRoW10gPSAiUEFUSD0vYmluOi91c3IvYmluOi91c3IvdWNiOi91c3IvYnNkOi9ldGM6L3Vzci9ldGM6L3Vzci9zYmluIjsKKytjaGFyICAgIHBhdGhbXSA9ICJQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluIjsKKyAKKyAjZGVmaW5lCVRJTUVfTElNSVQJNjAJCS8qIERvIG5vdCBrZWVwIGxpc3RpbmdpbmcgZm9yZXZlciAqLworICNkZWZpbmUJSU5QVVRfTEVOR1RICTEwMDAwMAkJLyogRG8gbm90IGtlZXAgbGlzdGluZ2luZyBmb3JldmVyICovCisgI2RlZmluZQlMSU5FX0xFTkdUSAkxMjgJCS8qIEVkaXRvcnMgY2FuIGNob2tlIG9uIGxvbmcgbGluZXMgKi8KKyAjZGVmaW5lCUZJTkdFUl9QUk9HUkFNCSJmaW5nZXIiCS8qIE1vc3QsIGlmIG5vdCBhbGwsIFVOSVggc3lzdGVtcyAqLworICNkZWZpbmUJVU5QUklWX05BTUUJIm5vYm9keSIJLyogUHJlZmVycmVkIHByaXZpbGVnZSBsZXZlbCAqLworLSNkZWZpbmUJVU5QUklWX1VHSUQJMzI3NjcJCS8qIERlZmF1bHQgdWlkIGFuZCBnaWQgKi8KKysjZGVmaW5lCVVOUFJJVl9VR0lECTY1NTM0CQkvKiBEZWZhdWx0IHVpZCBhbmQgZ2lkICovCisgCisgaW50ICAgICBmaW5nZXJfcGlkOworK2ludAlhbGxvd19zZXZlcml0eSA9IFNFVkVSSVRZOworK2ludAlkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisgCisgdm9pZCAgICBjbGVhbnVwKHNpZykKKyBpbnQgICAgIHNpZzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ZWEwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworKiBNb24gRmViIDEwIDIwMDMgSGFyYWxkIEhveWVyIDxoYXJhbGRAcmVkaGF0LmRlPiA3LjYtMjkKKy0gYWRkZWQgc2VjdXJpdHkgcGF0Y2ggdGNwX3dyYXBwZXJzLTcuNi1zaWcucGF0Y2gKKworLS0tIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMuc2lnCTIwMDMtMDItMTAgMTY6MTg6MzEuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDAzLTAyLTEwIDE2OjUwOjM4LjAwMDAwMDAwMCArMDEwMAorQEAgLTY2LDYgKzY2LDcgQEAKKyAKKyAjZGVmaW5lCVlFUwkJMQorICNkZWZpbmUJTk8JCTAKKysjZGVmaW5lIEVSUiAgICAgICAgICAgICAtMQorIAorICAvKgorICAgKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGdsb2JhbGx5IHZpc2libGUgc28gdGhhdCB0aGV5IGNhbiBiZSByZWRpcmVjdGVkIGluCitAQCAtMTI5LDkgKzEyOSw5IEBACisgCXJldHVybiAodmVyZGljdCA9PSBBQ19QRVJNSVQpOworICAgICBpZiAodGFibGVfbWF0Y2goaG9zdHNfYWxsb3dfdGFibGUsIHJlcXVlc3QpKQorIAlyZXR1cm4gKFlFUyk7CistICAgIGlmICh0YWJsZV9tYXRjaChob3N0c19kZW55X3RhYmxlLCByZXF1ZXN0KSkKKy0JcmV0dXJuIChOTyk7CistICAgIHJldHVybiAoWUVTKTsKKysgICAgaWYgKHRhYmxlX21hdGNoKGhvc3RzX2RlbnlfdGFibGUsIHJlcXVlc3QpID09IE5PKQorKwlyZXR1cm4gKFlFUyk7CisrICAgIHJldHVybiAoTk8pOworIH0KKyAKKyAvKiB0YWJsZV9tYXRjaCAtIG1hdGNoIHRhYmxlIGVudHJpZXMgd2l0aCAoZGFlbW9uLCBjbGllbnQpIHBhaXIgKi8KK0BAIC0xNzUsNiArMTc1LDcgQEAKKyAJKHZvaWQpIGZjbG9zZShmcCk7CisgICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisgCXRjcGRfd2FybigiY2Fubm90IG9wZW4gJXM6ICVtIiwgdGFibGUpOworKwltYXRjaCA9IEVSUjsKKyAgICAgfQorICAgICBpZiAobWF0Y2gpIHsKKyAJaWYgKGhvc3RzX2FjY2Vzc192ZXJib3NlID4gMSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ2xvbmdqbXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkZDYzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQyOjI1LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MTowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw3ICszMyw3IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIykgcmZjOTMxLmMgMS4KKyAKKyBpbnQgICAgIHJmYzkzMV90aW1lb3V0ID0gUkZDOTMxX1RJTUVPVVQ7LyogR2xvYmFsIHNvIGl0IGNhbiBiZSBjaGFuZ2VkICovCisgCistc3RhdGljIGptcF9idWYgdGltZWJ1ZjsKKytzdGF0aWMgc2lnam1wX2J1ZiB0aW1lYnVmOworIAorIC8qIGZzb2NrZXQgLSBvcGVuIHN0ZGlvIHN0cmVhbSBvbiB0b3Agb2Ygc29ja2V0ICovCisgCitAQCAtNjIsNyArNjIsNyBAQCBpbnQgICAgIHByb3RvY29sOworIHN0YXRpYyB2b2lkIHRpbWVvdXQoc2lnKQorIGludCAgICAgc2lnOworIHsKKy0gICAgbG9uZ2ptcCh0aW1lYnVmLCBzaWcpOworKyAgICBzaWdsb25nam1wKHRpbWVidWYsIHNpZyk7CisgfQorIAorIC8qIHJmYzkzMSAtIHJldHVybiByZW1vdGUgdXNlciBuYW1lLCBnaXZlbiBzb2NrZXQgc3RydWN0dXJlcyAqLworQEAgLTEzNSw3ICsxMzUsNyBAQCBjaGFyICAgKmRlc3Q7CisgCSAqIFNldCB1cCBhIHRpbWVyIHNvIHdlIHdvbid0IGdldCBzdHVjayB3aGlsZSB3YWl0aW5nIGZvciB0aGUgc2VydmVyLgorIAkgKi8KKyAKKy0JaWYgKHNldGptcCh0aW1lYnVmKSA9PSAwKSB7CisrCWlmIChzaWdzZXRqbXAodGltZWJ1ZiwgMCkgPT0gMCkgeworIAkgICAgLyogU2F2ZSBTSUdBTFJNIHRpbWVyIGFuZCBoYW5kbGVyLiBTdWRoZWVyIEFiZHVsLVNhbGFtLCBTVU4uICovCisgCSAgICBzYXZlZF90aW1lb3V0ID0gYWxhcm0oMCk7CisgCSAgICBuYWN0LnNhX2hhbmRsZXIgPSB0aW1lb3V0OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zb2NrbGVuX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0NmRmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zb2NrbGVuX3QucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorY29tbWl0IDg4YjY5ODRlZjBiZjNiNzAzYzFjODUxMDkyNjYyYjk1ZTkxZGIxZmYKK0F1dGhvcjogZmFycmFoIHJhc2hpZCA8ZmFycmFoLnJhc2hpZEB3aW5kcml2ZXIuY29tPgorRGF0ZTogICBUdWUgRmViIDEyIDA5OjUzOjUwIDIwMTMgLTA1MDAKKworICAgIHRjcC13cmFwcGVycyBTdXBwb3J0IGZvciBidWlsZGluZyB3aXRoIGdsaWJjCisgICAgCisgICAgQWRkZWQgc3VwcG9ydCBmb3Igc29ja2xlbl90IHR5cGUgdG8gbGVuIGFyZ3VtZW50IHBhc3NlZCB0byBzb2NrZXQgcmVsYXRlZAorICAgIGNhbGxzLiBUaGlzIGZpeGVzIGEgYnVnIHRoYXQgY2F1c2VzIHRjcCB3cmFwcGVycyB0byBmYWlsIHdoZW4gdXNpbmcgc3NoZC4KKyAgICAKKyAgICBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBmYXJyYWggcmFzaGlkIDxmYXJyYWgucmFzaGlkQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9maXhfb3B0aW9ucy5jIGIvZml4X29wdGlvbnMuYworaW5kZXggNzQ3M2FkZi4uZmUyYjQ0MiAxMDA2NDQKKy0tLSBhL2ZpeF9vcHRpb25zLmMKKysrKyBiL2ZpeF9vcHRpb25zLmMKK0BAIC0zOCw3ICszOCwxMiBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICNpZmRlZiBJUF9PUFRJT05TCisgICAgIHVuc2lnbmVkIGNoYXIgb3B0YnVmW0JVRkZFUl9TSVpFIC8gM10sICpjcDsKKyAgICAgY2hhciAgICBsYnVmW0JVRkZFUl9TSVpFXSwgKmxwOworLSAgICBpbnQgICAgIG9wdHNpemUgPSBzaXplb2Yob3B0YnVmKSwgaXBwcm90bzsKKysjaWZkZWYgX19HTElCQ19fCisrICAgIHNvY2tsZW5fdCAgb3B0c2l6ZSA9IHNpemVvZihvcHRidWYpOworKyNlbHNlCisrICAgIGludCAgICAgb3B0c2l6ZSA9IHNpemVvZihvcHRidWYpOworKyNlbmRpZgorKyAgICBpbnQgaXBwcm90bzsKKyAgICAgc3RydWN0IHByb3RvZW50ICppcDsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworICAgICB1bnNpZ25lZCBpbnQgb3B0OworZGlmZiAtLWdpdCBhL3NvY2tldC5jIGIvc29ja2V0LmMKK2luZGV4IDRiMmM1NzUuLmEwZDI5ODcgMTAwNjQ0CistLS0gYS9zb2NrZXQuYworKysrIGIvc29ja2V0LmMKK0BAIC05NSw3ICs5NSwxMSBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisgI2VuZGlmCisrI2lmZGVmIF9fR0xJQkNfXworKyAgICBzb2NrbGVuX3QgIGxlbjsKKysjZWxzZQorICAgICBpbnQgICAgIGxlbjsKKysjZW5kaWYKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworIAorQEAgLTQyNiw3ICs0MzAsMTEgQEAgaW50ICAgICBmZDsKKyAjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICNlbmRpZgorKyNpZmRlZiBfX0dMSUJDX18KKysgICAgc29ja2xlbl90ICBzaXplID0gc2l6ZW9mKHNpbik7CisrI2Vsc2UKKyAgICAgaW50ICAgICBzaXplID0gc2l6ZW9mKHNpbik7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIEVhdCB1cCB0aGUgbm90LXlldCByZWNlaXZlZCBkYXRhZ3JhbS4gU29tZSBzeXN0ZW1zIGluc2lzdCBvbiBhCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RjcGRjaGtfbGlid3JhcHBlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI5YmRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RjcGRjaGtfbGlid3JhcHBlZC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAyOjUwOjM3LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDI6NTA6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsNiArNTMsMjQgQEAKKyAjaW5jbHVkZSAiaW5ldGNmLmgiCisgI2luY2x1ZGUgInNjYWZmb2xkLmgiCisgCisrLyogbGlzdCBvZiBwcm9ncmFtcyB3aGljaCBhcmUga25vd24gdG8gYmUgbGlua2VkIHdpdGggbGlid3JhcCBpbiBkZWJpYW4gKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbGlid3JhcF9wcm9ncmFtc1tdID0geworKyAgICAicG9ydG1hcCIsICJtb3VudGQiLCAic3RhdGQiLCAidWdpZGQiLAorKyAgICAicmVkaXIiLCAicmxpbmV0ZCIsCisrICAgICJzc2hkIiwKKysgICAgImF0ZnRwZCIsCisrICAgICJkaWFsZCIsCisrICAgICJlc291bmQiLAorKyAgICAiZ2RtIiwgImdub21lLXNlc3Npb24iLAorKyAgICAiaWNlY2FzdCIsICJpY2VjYXN0X2FkbWluIiwgImljZWNhc3RfY2xpZW50IiwgImljZWNhc3Rfc291cmNlIiwKKysgICAgIm15c3FsZCIsCisrICAgICJudG9wIiwKKysgICAgInBwdHBkIiwKKysgICAgInJxdW90YWQiLAorKyAgICAic2VuZG1haWwiLCAic21haWwiLAorKyAgICBOVUxMCisrfTsKKysKKyAgLyoKKyAgICogU3RvbGVuIGZyb20gaG9zdHNfYWNjZXNzLmMuLi4KKyAgICovCitAQCAtMTQ3LDggKzE2NSw4IEBACisgICAgIC8qCisgICAgICAqIFRoZXNlIGFyZSBub3QgcnVuIGZyb20gaW5ldGQgYnV0IG1heSBoYXZlIGJ1aWx0LWluIGFjY2VzcyBjb250cm9sLgorICAgICAgKi8KKy0gICAgaW5ldF9zZXQoInBvcnRtYXAiLCBXUl9OT1QpOworLSAgICBpbmV0X3NldCgicnBjYmluZCIsIFdSX05PVCk7CisrICAgIGZvciAoYyA9IDA7IGxpYndyYXBfcHJvZ3JhbXNbY107IGMrKykKKysJaW5ldF9zZXQobGlid3JhcF9wcm9ncmFtc1tjXSwgV1JfWUVTKTsKKyAKKyAgICAgLyoKKyAgICAgICogQ2hlY2sgYWNjZXNzaWJpbGl0eSBvZiBhY2Nlc3MgY29udHJvbCBmaWxlcy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RyeS1mcm9tLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4ZjMwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44CkBAIC0wLDAgKzEsMjggQEAKKy5USCBUUlktRlJPTSA4ICIyMXRoIEp1bmUgMTk5NyIgTGludXggIkxpbnV4IFByb2dyYW1tZXIncyBNYW51YWwiCisuU0ggTkFNRQordHJ5LWZyb20gXC0gdGVzdCBwcm9ncmFtIGZvciB0aGUgdGNwX3dyYXBwZXIKKy5TSCBTWU5PUFNJUworLkIgdHJ5LWZyb20KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB0cnktZnJvbQorY29tbWFuZCBjYW4gYmUgY2FsbGVkIHZpYSBhIHJlbW90ZSBzaGVsbCBjb21tYW5kIHRvIGZpbmQgb3V0CitpZiB0aGUgaG9zdG5hbWUgYW5kIGFkZHJlc3MgYXJlIHByb3Blcmx5IHJlY29nbml6ZWQKK2J5IHRoZQorLkIgdGNwX3dyYXBwZXIKK2xpYnJhcnksIGlmIHVzZXJuYW1lIGxvb2t1cCB3b3JrcywgYW5kIChTeXNWIG9ubHkpIGlmIHRoZSBUTEkKK29uIHRvcCBvZiBJUCBoZXVyaXN0aWNzIHdvcmsuIERpYWdub3N0aWNzIGFyZSByZXBvcnRlZCB0aHJvdWdoCisuQlIgc3lzbG9nICgzKQorYW5kIHJlZGlyZWN0ZWQgdG8gc3RkZXJyLgorCitFeGFtcGxlOgorCityc2ggaG9zdCAvc29tZS93aGVyZS90cnktZnJvbQorCisuU0ggU0VFIEFMU08KKy5CUiBob3N0c19hY2Nlc3MgKDUpLAorLkJSIGhvc3RzX29wdGlvbnMgKDUpLAorLkJSIHRjcGQgKDgpCisuU0ggQVVUSE9SCitXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMwNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiCkBAIC0wLDAgKzEsMTI4IEBACitTVU1NQVJZID0gIlNlY3VyaXR5IHRvb2wgdGhhdCBpcyBhIHdyYXBwZXIgZm9yIFRDUCBkYWVtb25zIgorREVTQ1JJUFRJT04gPSAiVG9vbHMgZm9yIG1vbml0b3JpbmcgYW5kIGZpbHRlcmluZyBpbmNvbWluZyByZXF1ZXN0cyBmb3IgdGNwIFwKKyAgICAgICAgICAgICAgIHNlcnZpY2VzLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0RJU0NMQUlNRVI7bWQ1PTA3MWJkNjljYjc4YjE4ODg4ZWE1ZTNkYTVjMzEyN2ZhIgorUFIgPSJyMTAiCisKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnIGxpYndyYXAgbGlid3JhcC1kb2MgbGlid3JhcC1kZXYgbGlid3JhcC1zdGF0aWNkZXYgJHtQTn0gJHtQTn0tZG9jIgorRklMRVNfbGlid3JhcCA9ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfbGlid3JhcC1kb2MgPSAiJHttYW5kaXJ9L21hbjMgJHttYW5kaXJ9L21hbjUiCitGSUxFU19saWJ3cmFwLWRldiA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2luY2x1ZGVkaXJ9IgorRklMRVNfbGlid3JhcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKK0ZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0iCitGSUxFU18ke1BOfS1kb2MgPSAiJHttYW5kaXJ9L21hbjgiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLnBvcmN1cGluZS5vcmcvcHViL3NlY3VyaXR5L3RjcF93cmFwcGVyc18ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDBfbWFuX3F1b3RpbmcuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDZfZml4X2dldGhvc3RieW5hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTBfdXNhZ2ktaXB2Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMV91c2FnaV9maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzEzX3NobGliX3dlYWtzeW0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTRfY2lkcl9zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzE1X21hdGNoX2NsYXJpZnkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhdmVfc3RyZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuX2Zyb21ob3N0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmZjOTMxLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vc2FmZV9maW5nZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2lnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zaWdsb25nam1wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NvY2tsZW5fdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90cnktZnJvbS44IFwKKyAgICAgICAgICAgZmlsZTovL3NhZmVfZmluZ2VyLjggXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTZmYTI1ZjcxMjI2ZDA5MGYzNGRlM2Y2YjEyMmZiNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU0M2Q3YWRlZGY3OGE2ZGUwYjIyMWNjYmJkMTk1MmUwOGI1MTM4NzE3ZjRhZGU4MTQwMzliYjQ4OWE0MzE1ZCIKKworUyA9ICIke1dPUktESVJ9L3RjcF93cmFwcGVyc18ke1BWfSIKKworRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgXAorICAgICAgICAgICAgICAgICdBUj0ke0FSfScgXAorICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyBcCisgICAgICAgICAgICAgICAgJ1JFQUxfREFFTU9OX0RJUj0ke3NiaW5kaXJ9JyBcCisgICAgICAgICAgICAgICAgJ1NUWUxFPS1EUFJPQ0VTU19PUFRJT05TJyBcCisgICAgICAgICAgICAgICAgJ0ZBQ0lMSVRZPUxPR19EQUVNT04nIFwKKyAgICAgICAgICAgICAgICAnU0VWRVJJVFk9TE9HX0lORk8nIFwKKyAgICAgICAgICAgICAgICAnQlVHUz0nIFwKKyAgICAgICAgICAgICAgICAnVlNZU0xPRz0nIFwKKyAgICAgICAgICAgICAgICAnUkZDOTMxX1RJTUVPVVQ9MTAnIFwKKyAgICAgICAgICAgICAgICAnQUNDRVNTPS1ESE9TVFNfQUNDRVNTJyBcCisgICAgICAgICAgICAgICAgJ0tJTExfT1BUPS1ES0lMTF9JUF9PUFRJT05TJyBcCisgICAgICAgICAgICAgICAgJ1VNQVNLPS1EREFFTU9OX1VNQVNLPTAyMicgXAorICAgICAgICAgICAgICAgICdORVRHUk9VUD0ke0VYVFJBX09FTUFLRV9ORVRHUk9VUH0nIFwKKyAgICAgICAgICAgICAgICAnTElCUz0tbG5zbCcgXAorICAgICAgICAgICAgICAgICdBUkZMQUdTPXJ2JyBcCisgICAgICAgICAgICAgICAgJ0FVWF9PQko9d2Vha19zeW1ib2xzLm8nIFwKKyAgICAgICAgICAgICAgICAnVExJPScgXAorICAgICAgICAgICAgICAgICdDT1BUUz0nIFwKKyAgICAgICAgICAgICAgICAnRVhUUkFfQ0ZMQUdTPSR7Q0ZMQUdTfSAtRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuJyIKKworRVhUUkFfT0VNQUtFX05FVEdST1VQID0gIi1ETkVUR1JPVVAgLURVU0VfR0VURE9NQUlOIgorRVhUUkFfT0VNQUtFX05FVEdST1VQX2xpYmMtdWNsaWJjID0gIi1EVVNFX0dFVERPTUFJTiIKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSAnVEFCTEVTPS1ESE9TVFNfREVOWT1cIiR7c3lzY29uZmRpcn0vaG9zdHMuZGVueVwiIC1ESE9TVFNfQUxMT1c9XCIke3N5c2NvbmZkaXJ9L2hvc3RzLmFsbG93XCInIFwKKwkJICAgYWxsCit9CisKK0JJTlMgPSAic2FmZV9maW5nZXIgdGNwZCB0Y3BkY2hrIHRyeS1mcm9tIHRjcGRtYXRjaCIKK01BTlMzID0gImhvc3RzX2FjY2VzcyIKK01BTlM1ID0gImhvc3RzX29wdGlvbnMiCitNQU5TOCA9ICJ0Y3BkIHRjcGRjaGsgdGNwZG1hdGNoIgorZG9faW5zdGFsbCAoKSB7CisJb2VfbGliaW5zdGFsbCAtYSBsaWJ3cmFwICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1DIHNoYXJlZCAtc28gbGlid3JhcCAke0R9JHtiYXNlX2xpYmRpcn0KKworCWlmIFsgIiR7bGliZGlyfSIgIT0gIiR7YmFzZV9saWJkaXJ9IiBdIDsgdGhlbgorCQlyZWxfbGliX3ByZWZpeD1gZWNobyAke2xpYmRpcn0gfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZydgCisJCWxpYm5hbWU9YHJlYWRsaW5rICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ3cmFwLnNvIHwgeGFyZ3MgYmFzZW5hbWVgCisJCWxuIC1zICR7cmVsX2xpYl9wcmVmaXh9JHtiYXNlX2xpYmRpcn0vJHtsaWJuYW1lfSAke0R9JHtsaWJkaXJ9L2xpYndyYXAuc28KKwkJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYndyYXAuc28KKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWZvciBiIGluICR7QklOU307IGRvCisJCWluc3RhbGwgLW0gMDc1NSAkYiAke0R9JHtzYmluZGlyfS8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjMKKwlmb3IgbSBpbiAke01BTlMzfTsgZG8KKwkJaW5zdGFsbCAtbSAwNjQ0ICRtLjMgJHtEfSR7bWFuZGlyfS9tYW4zLyB8fCBleGl0IDEKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuNQorCWZvciBtIGluICR7TUFOUzV9OyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJG0uNSAke0R9JHttYW5kaXJ9L21hbjUvIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44CisJZm9yIG0gaW4gJHtNQU5TOH07IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkbS44ICR7RH0ke21hbmRpcn0vbWFuOC8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdHJ5LWZyb20uOCAke0R9JHttYW5kaXJ9L21hbjgvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2FmZV9maW5nZXIuOCAke0R9JHttYW5kaXJ9L21hbjgvCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IHRjcGQuaCAke0R9JHtpbmNsdWRlZGlyfS8KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9ob3N0cy5hbGxvdworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RzLmRlbnkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vaG9zdHMuYWxsb3cgJHtzeXNjb25mZGlyfS9ob3N0cy5kZW55IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzI4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJQZXJsIHNjcmlwdCB0aGF0IGNvbnZlcnRzIFRleGluZm8gdG8gSFRNTCIKK0hPTUVQQUdFICAgID0gImh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIgorU0VDVElPTiAgICAgPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgICAgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1BSID0gInIyIgorCitTUkNfVVJJICAgICA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L3RleGkyaHRtbC8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMTVhYzg3NmZjZGM4YmU4NjViMTY1MzVmNDgwYWE1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlOGE5OGIwZWUyMGM0OTVhNmFiODk0Mzk4YTA2NWVmNTgwMjcyZGJkNWExNWIxYjE5ZThiZDFiYzg5ZDlmOWZhIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBhdXRvdG9vbHNfZG9fY29uZmlndXJlIHVwZGF0ZXMgcG8vTWFrZWZpbGUuaW4uaW4sIHdlIGFsc28gbmVlZAorCSMgdXBkYXRlIHBvX2RvY3VtZW50LgorCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX2RvY3VtZW50LworCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX21lc3NhZ2VzLworfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS90ZXhpMmh0bWwKK30KKworRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L3RleGluZm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0MjBhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYgpAQCAtMCwwICsxLDMwIEBACitERVNDUklQVElPTiA9ICJGYWtlIHZlcnNpb24gb2YgdGhlIHRleGluZm8gdXRpbGl0eSBzdWl0ZSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDZiYjYyZTczY2E4YjkwMWQzZjJlOWQ3MTU0MmY0YmIiCitERVBFTkRTID0gIiIKK1BWID0gIjEuMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vdGVtcGxhdGUucHkgZmlsZTovL0NPUFlJTkciCisKK1MgPSAiJHtXT1JLRElSfSIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsX25hbWUoKSB7CisgICAgRklMRU5BTUU9IiR7RH0ke2JpbmRpcn0vJDEiCisgICAgIyBVc2luZyBsbiBjYXVzZXMgcHJvYmxlbXMgd2l0aCBybV93b3JrCisgICAgY3AgLVQgIiR7U30vdGVtcGxhdGUucHkiICIkRklMRU5BTUUiCisgICAgY2htb2QgK3ggJEZJTEVOQU1FCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgbWtkaXIgLXAgIiR7RH0ke2JpbmRpcn0iCisgICAgZm9yIGkgaW4gbWFrZWluZm8gcG9kMnRleGkgdGV4aTJkdmkgcGRmdGV4aTJkdmkgdGV4aW5kZXggdGV4aTJwZGYgXAorICAgICAgICAgICAgIHR4aXhtbDJ0ZXhpIHRleGkyYW55IGluc3RhbGwtaW5mbyBnaW5zdGFsbC1pbmZvIFwKKyAgICAgICAgICAgICB1cGRhdGUtaW5mby1kaXI7IGRvCisgICAgICAgIGRvX2luc3RhbGxfbmFtZSAkaQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMWNiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS9DT1BZSU5HCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3JwLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvdGVtcGxhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3MDMzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMi43CisKKyMgdGVtcGxhdGUucHkgKGFuZCBvdGhlciBmaWxlbmFtZXMpCisjIEJ5IE1heCBFbGlhc2VyIChtYXguZWxpYXNlckBpbnRlbC5jb20pCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnAuCisKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhFIFNPRlRXQVJFLgorCisjIFRoaXMgcHJvZ3JhbSBhY3RzIGxpa2UgYSBkdW1teSB2ZXJzaW9uIG9mIHRoZSB0ZXhpbmZvIHV0aWxpdGllcywgY3JlYXRpbmcKKyMgdGhlIHJpZ2h0IG91dHB1dCBmaWxlcyBidXQgbGVhdmluZyB0aGVtIGJsYW5rLiBJdCB3aWxsIHBhcnNlIG91dCB0aGUgbmFtZQorIyBvZiB0aGUgZXhlY3V0YWJsZSBmcm9tIGFyZ3ZbMF0gYW5kIGVtdWxhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbSwgc28KKyMgbXVsdGlwbGUgY29waWVzIG9mIHRoaXMgc2NyaXB0IHdpbGwgZXhpc3QgdW5kZXIgZGlmZmVyZW50IG5hbWVzLgorCitpbXBvcnQgc3lzLCBvcworCitvbG9uZyA9ICItLW91dHB1dD0iCitFbG9uZyA9ICItLW1hY3JvLWV4cGFuZD0iCisKKwordGhpc19iaW5hcnkgPSBzeXMuYXJndlswXS5zcGxpdCAoIi8iKVstMV0KKworIyBUbyBiZSBvdXRwdXR0ZWQgaWYgZnVuY3Rpb25hbGl0eSB0aGF0IGhhc24ndCBiZWVuIHN0dWJiZWQgeWV0IGlzIGludm9rZWQuCitzdHViX21zZyA9ICIiIgorVGhpcyBzdGFuZC1pbiB2ZXJzaW9uIG9mICVzIGlzIG5vdCB5ZXQgZnVsbHkgY2FwYWJsZSBvZiBlbXVsYXRpbmcgdGhlIHJlYWwKK3ZlcnNpb24gZnJvbSB0aGUgR05VIHRleGluZm8gc3VpdGUuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCBmaWxlIGEgYnVnIHJlcG9ydAord2l0aCBkZXRhaWxzIG9uIHRoZSByZWNpcGUgdGhhdCBmYWlsZWQuCisiIiIgJSB0aGlzX2JpbmFyeQorCisjIEF1dG90b29scyBzZXR1cHMgcXVlcnkgdGhlIHZlcnNpb24sIHNvIHRoaXMgaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LiBTb21lIG9mCisjIHRoZW0gKGxvb2tpbicgYXQgeW91LCBnbGliYykgYWN0dWFsbHkgbG9vayBmb3IgdGhlIHN1YnN0cmluZyAiR05VIHRleGluZm8sIgorIyBzbyB3ZSBwdXQgdGhhdCBzdWJzdHJpbmcgaW4gdGhlcmUgd2l0aG91dCBhY3R1YWxseSB0ZWxsaW5nIGEgbGllLgordmVyc2lvbl9zdHIgPSAiIiIgJXMgKGZha2UgdGV4aW5mbywgZW11bGF0aW5nIEdOVSB0ZXhpbmZvKSA1LjIKKyAKK1N1cGVyIGFtYXppbmcgdmVyc2lvbiB3aGljaCBpcyB0b3RhbGx5IG5vdCBmYWtlIGluIGFueSB3YXkgd2hhdHNvZXZlci4KK0NvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVAorbGljZW5zZS4KKyIiIiAlIHRoaXNfYmluYXJ5CisKK3NpbXBsZV9iaW5hcmllcyA9ICJwb2QydGV4aSB0ZXhpMmR2aSBwZGZ0ZXhpMmR2aSB0ZXhpbmRleCB0ZXhpMnBkZiBcCisgICAgICAgICAgICAgICAgICAgdHhpeG1sMnRleGkgaW5zdGFsbC1pbmZvIGdpbnN0YWxsLWluZm8gXAorICAgICAgICAgICAgICAgICAgIHVwZGF0ZS1pbmZvLWRpciIuc3BsaXQgKCkKKworIyBUaGVzZSB1dGlsaXRpZXMgdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIGFuZCBmbGFncy4KK2NvbXBsZXhfYmluYXJpZXMgPSAibWFrZWluZm8gdGV4aTJhbnkiLnNwbGl0ICgpCisKK3ZhbGlkX2JpbmFyaWVzID0gc2ltcGxlX2JpbmFyaWVzICsgY29tcGxleF9iaW5hcmllcworCisjIEZvciBnZW5lcmF0aW5nIGJsYW5rIG91dHB1dCBmaWxlcy4KK2RlZiB0b3VjaF9maWxlIChwYXRoKToKKyAgICBmID0gb3BlbiAocGF0aCwgInciKQorICAgIGYuY2xvc2UgKCkKKworYXNzZXJ0IHRoaXNfYmluYXJ5IGluIHZhbGlkX2JpbmFyaWVzLCBcCisgICAgICAgdGhpc19iaW5hcnkgKyAiIGlzIG5vdCBvbmUgb2YgIiArICcsICcuam9pbiAodmFsaWRfYmluYXJpZXMpCisKK2lmICItLXZlcnNpb24iIGluIHN5cy5hcmd2OgorICAgIHByaW50IHZlcnNpb25fc3RyCisgICAgc3lzLmV4aXQgKDApCisKKyMgRm9yIGRlYnVnZ2luZworbG9nX2ludGVyY2VwdGlvbnMgPSBGYWxzZQoraWYgbG9nX2ludGVyY2VwdGlvbnM6CisgICAgZiA9IG9wZW4gKCIvdG1wL2ludGVyY2VwdGVkXyIgKyB0aGlzX2JpbmFyeSwgImEiKQorICAgIGYud3JpdGUgKCcgJy5qb2luIChbdGhpc19iaW5hcnldICsgc3lzLmFyZ3ZbMTpdKSArICdcbicpCisgICAgZi5jbG9zZSAoKQorCisjIExvb2sgdGhyb3VnaCB0aGUgb3B0aW9ucyBhbmQgZmxhZ3MsIGFuZCBpZiBuZWNlc3NhcnksIHRvdWNoIGFueSBvdXRwdXQKKyMgZmlsZXMuCithcmdfaWR4ID0gMQord2hpbGUgYXJnX2lkeCA8IGxlbiAoc3lzLmFyZ3YpOgorICAgIGFyZyA9IHN5cy5hcmd2IFthcmdfaWR4XQorICAgIAorICAgIGlmIGFyZyA9PSAiLS0iOgorICAgICAgICBicmVhaworICAgIAorICAgICMgU29tZXRoaW5nIGxpa2UgLUkgLiBjYW4gcmVzdWx0IGluIGEgbmVlZCBmb3IgdGhpcyAoc3BlY2lmaWNhbGx5IHRoZSAuKQorICAgIGVsaWYgbGVuIChhcmcpIDwgMjoKKyAgICAgICAgcGFzcworICAgIAorICAgICMgQ2hlY2sgaWYgLW8gb3IgLS1vdXRwdXQgaXMgc3BlY2lmaWVkLiBUaGVzZSBjYW4gYmUgdXNlZCBhdCBtb3N0IG9uY2UuCisgICAgZWxpZiBhcmdbMF0gPT0gJy0nIGFuZCBhcmdbMV0gIT0gJy0nIGFuZCBhcmdbbGVuIChhcmcpIC0gMV0gPT0gJ28nOgorICAgICAgICB0b3VjaF9maWxlIChzeXMuYXJndlthcmdfaWR4ICsgMV0pCisgICAgICAgIHN5cy5leGl0ICgwKQorICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGggKG9sb25nKToKKyAgICAgICAgdG91Y2hfZmlsZSAoYXJnLnNwbGl0ICgiPSIpWzFdKQorICAgICAgICBzeXMuZXhpdCAoMCkKKyAgICAKKyAgICAjIENoZWNrIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBhcmdbMF0gIT0gJy0nIG9yIGFyZ1sxXSA9PSAnLScgb3IgJ0UnIG5vdCBpbiBhcmcgb3IgXAorICAgICAgICAgICAgICAgdGhpc19iaW5hcnkgaW4gc2ltcGxlX2JpbmFyaWVzLCBcCisgICAgICAgICAgICAgICAiLUUgb3B0aW9uIG5vdCB5ZXQgc3VwcG9ydGVkIiArIHN0dWJfbXNnCisgICAgICAgIAorICAgICAgICBhc3NlcnQgbm90IGFyZy5zdGFydHN3aXRoIChFbG9uZyksIFwKKyAgICAgICAgICAgICAgIEVsb25nWzotMV0gKyAiIG9wdGlvbiBub3QgeWV0IHN1cHBvcnRlZCIgKyBzdHViX21zZworICAgIAorICAgIGFyZ19pZHggKz0gMQorCisjIFRoZSAtby8tLW91dHB1dCBvcHRpb24gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0LiBGb3IgbWFrZWluZm8gYW5kIHRleGkyYW55LAorIyB0aGF0IGRlZmF1bHQgaXMgdG8gbG9vayBmb3IgYSBAc2V0ZmlsZW5hbWUgY29tbWFuZCBpbiB0aGUgaW5wdXQgZmlsZS4KKyMgT3RoZXJ3aXNlLCBwcmludGluZyBub3RoaW5nIHRvIHN0ZG91dCBhbmQgdGhlbiBleGl0aW5nIHNob3VsZCBzdWZmaWNlLgorYXNzZXJ0IHRoaXNfYmluYXJ5IGluIHNpbXBsZV9iaW5hcmllcywgXAorICAgICAgICJEb24ndCBrbm93IGhvdyB0byBnZXQgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIGZyb20gaW5wdXQgZmlsZSEiICsgXAorICAgICAgIHN0dWJfbXNnCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvY2hlY2stbG9jYWxlLWgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkNjY2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK2ZpeCB0aGUgbWFjcm8gY2hlY2sKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2NvbmZpZ3VyZSBkb2VzIG5vdCBjaGVjayBpZiBsb2NhbGUuaCBleGlzdHMsIGJ1dCBjaGVjayBzZXRsb2NhbGUsCitpZiBzZXRsb2NhbGUgZXhpc3QsIHRoZSBsb2NhbGUuaCBzaG91bGQgZXhpc3QuCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9zeXN0ZW0uaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9zeXN0ZW0uaCBiL2xpYi9zeXN0ZW0uaAoraW5kZXggOTQ2ZWIzYy4uYzcwMDM3YiAxMDA2NDQKKy0tLSBhL2xpYi9zeXN0ZW0uaAorKysrIGIvbGliL3N5c3RlbS5oCitAQCAtNDIsNyArNDIsNyBAQCBleHRlcm4gY2hhciAqc3Vic3RyaW5nIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgCisgLyogQWxsIHN5c3RlbXMgbm93YWRheXMgcHJvYmFibHkgaGF2ZSB0aGVzZSBmdW5jdGlvbnMsIGJ1dCAuLi4gKi8KKy0jaWZkZWYgSEFWRV9MT0NBTEVfSAorKyNpZmRlZiBIQVZFX1NFVExPQ0FMRQorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjZW5kaWYKKyAjaWZuZGVmIEhBVkVfU0VUTE9DQUxFCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvZG8tY29tcGlsZS1uYXRpdmUtdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlYmUyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gNDU4ZTk0NTBjZWNmNzAzZjU1NTM2ZTYwOTM2NTE2MjcxOTU4NTkwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJSb3kuTGkiIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBTZXAgMjAxNCAxNzowMzoyOSArMDgwMAorU3ViamVjdDogW1BBVENIXSBkbyBub3QgY29tcGlsZSBob3N0IHRvb2xzLCBzaW5jZSB3ZSBoYXZlIG5hdGl2ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiNDYxMzBkLi5jZjU4NjU0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05MCwyOCArOTAsNyBAQCBBQ19DQU5PTklDQUxfQlVJTEQKKyAjICRuYXRpdmVfdG9vbHMgaXMgYWxzbyBhZGRlZCB0byBTVUJESVJTIGluIHRoZSBtYWluIE1ha2VmaWxlLmFtLAorICMgc28gdGhhdCBtYWtlIGNvbXBpbGVzIHRoZSBuYXRpdmUgdG9vbHMgZmlyc3QuCisgIworLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKy0gIG5hdGl2ZV90b29scz0KKy1lbHNlCistICBuYXRpdmVfdG9vbHM9dG9vbHMKKy0gIHRlc3QgLWQgIiRuYXRpdmVfdG9vbHMiIHx8IG1rZGlyICIkbmF0aXZlX3Rvb2xzIgorLSAgY29uZmRpcj1gKGNkICIkc3JjZGlyIjtwd2QpYAorLSAgIyBNYWtlIHN1cmUgdGhlIHNlY29uZGFyeSBjb25maWd1cmUgd29uJ3QgZmFpbCB3aXRoCistICAjICJlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQiLgorLSAgcm0gLWYgY29uZmlnLnN0YXR1cworLSAgQUNfTVNHX05PVElDRShbW0RvaW5nIGNvbmZpZ3VyZSBvZiBuYXRpdmUgdG9vbHMgKCR7YnVpbGR9KS5dXSkKKy0gIGNkICIkbmF0aXZlX3Rvb2xzIiB8fCBleGl0IDEKKy0gICMgUnVuIHNlY29uZGFyeSBjb25maWd1cmUgaW4gYWx0ZXJuYXRlIGVudmlyb25tZW50IG9yCistICAjIGl0IGdldHMgdGhlIHdyb25nIENDIGV0Yy4gIGVudiAtaSBnaXZlcyB0aGlzIGJ1aWxkIGhvc3QgY29uZmlndXJlCistICAjIGEgY2xlYW4gZW52aXJvbm1lbnQuCistICBlbnYgLWkgQ0M9IiR7QlVJTERfQ0N9IiBBUj0iJHtCVUlMRF9BUn0iIFJBTkxJQj0iJHtCVUlMRF9SQU5MSUJ9IiBcCistICAgICAgUEFUSD0iJHtQQVRIfSIgXAorLSAgICAgIHRvb2xzX29ubHk9MSBcCistICAgICR7Y29uZmRpcn0vY29uZmlndXJlIC0tYnVpbGQ9JHtidWlsZH0gLS1ob3N0PSR7YnVpbGR9IFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1ubHMKKy0gIGNkIC4uIHx8IGV4aXQgMQorLSAgQUNfTVNHX05PVElDRShbW0NvbnRpbnVpbmcgd2l0aCBtYWluIGNvbmZpZ3VyZSAoJHtob3N0fSkuXV0pCistZmkKKytuYXRpdmVfdG9vbHM9CisgQUNfU1VCU1QobmF0aXZlX3Rvb2xzKQorIEFNX0NPTkRJVElPTkFMKFRPT0xTX09OTFksIFtbdGVzdCAieCR0b29sc19vbmx5IiA9IHgxXV0pCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjk3MDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gOWIwZGY3ZDZkM2MxOGNmYWM4MmMyOTFkNjBhNTM1N2QxYmM4ZDlkMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJSb3kuTGkiIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBTZXAgMjAxNCAxNzoxMDowMyArMDgwMAorU3ViamVjdDogW1BBVENIXSB1c2luZyBuYXRpdmUgbWFrZWluZm8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KKworZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQoraW5kZXggNjNkZjgxOC4uYjZjZWIzNCAxMDA2NDQKKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMTksNyArMTksNyBAQCBtYW5fTUFOUyA9IGluZm8uMSBpbmZva2V5LjEgaW5zdGFsbC1pbmZvLjEgbWFrZWluZm8uMSB0ZXhpbmRleC4xIHRleGkyZHZpLjEgXAorIAorICMgVXNlIHRoZSBwcm9ncmFtcyBidWlsdCBpbiBvdXIgZGlzdHJpYnV0aW9uLCB0YWtpbmcgYWNjb3VudCBvZiBwb3NzaWJsZQorICMgY3Jvc3MtY29tcGlsaW5nLgorLU1BS0VJTkZPID0gJCh0b3BfYnVpbGRkaXIpLyQobmF0aXZlX3Rvb2xzKS9tYWtlaW5mby9tYWtlaW5mbworK01BS0VJTkZPID0gbWFrZWluZm8KKyBJTlNUQUxMX0lORk8gPSAkKHRvcF9idWlsZGRpcikvJChuYXRpdmVfdG9vbHMpL3V0aWwvaW5zdGFsbC1pbmZvCisgCisgVFhJX1hMQVRFID0gdHhpLWNzLnRleCB0eGktZGUudGV4IHR4aS1lbi50ZXggdHhpLWVzLnRleCB0eGktZnIudGV4IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzMzOGFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHRleGluZm8tNS4yL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMi5vcmlnL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKysrKyB0ZXhpbmZvLTUuMi9nbnVsaWIvbGliL01ha2VmaWxlLmFtCitAQCAtMzc4LDcgKzM3OCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kaXNhYmxlLW5hdGl2ZS10b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjZmMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kaXNhYmxlLW5hdGl2ZS10b29scy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitXZSBhbHJlYWR5IERFUEVORCBvbiB0aGUgbmF0aXZlIHRleGluZm8gYmVpbmcgcHJlc2VudCBiZWZvcmUgYnVpbGRpbmcgc28KK3RoZXJlIGlzbid0IGFueSBuZWVkIHRvIHRyeSBhbmQgYnVpbGQgdGhlIHJlcXVpcmVkIG5hdGl2ZSB0ZXhpbmZvIGJpbmFyaWVzCitiZWZvcmUgY3Jvc3MtY29tcGlsaW5nLiBUaGlzIHNpbXBsaWZpZXMgdGhlIHJlY2lwZSBzb21ld2hhdCEKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIG9lIHNwZWNpZmljCisKK1NpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHRleGluZm8tNC4xMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTQuMTMub3JpZy9jb25maWd1cmUuYWMKKysrKyB0ZXhpbmZvLTQuMTMvY29uZmlndXJlLmFjCitAQCAtMTAwLDI5ICsxMDAsNyBAQCBBQ19DQU5PTklDQUxfQlVJTEQKKyAjICRuYXRpdmVfdG9vbHMgaXMgYWxzbyBhZGRlZCB0byBTVUJESVJTIGluIHRoZSBtYWluIE1ha2VmaWxlLmFtLAorICMgc28gdGhhdCBtYWtlIGNvbXBpbGVzIHRoZSBuYXRpdmUgdG9vbHMgZmlyc3QuCisgIworLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKy0gIG5hdGl2ZV90b29scz0KKy1lbHNlCistICBuYXRpdmVfdG9vbHM9dG9vbHMKKy0gIHRlc3QgLWQgIiRuYXRpdmVfdG9vbHMiIHx8IG1rZGlyICIkbmF0aXZlX3Rvb2xzIgorLSAgY29uZmRpcj1gKGNkICIkc3JjZGlyIjtwd2QpYAorLSAgIyBNYWtlIHN1cmUgdGhlIHNlY29uZGFyeSBjb25maWd1cmUgd29uJ3QgZmFpbCB3aXRoCistICAjICJlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQiLgorLSAgcm0gLWYgY29uZmlnLnN0YXR1cworLSAgQUNfTVNHX05PVElDRShbW0RvaW5nIGNvbmZpZ3VyZSBvZiBuYXRpdmUgdG9vbHMgKCR7YnVpbGR9KS5dXSkKKy0gIGNkICIkbmF0aXZlX3Rvb2xzIiB8fCBleGl0IDEKKy0gICMgUnVuIHNlY29uZGFyeSBjb25maWd1cmUgaW4gYWx0ZXJuYXRlIGVudmlyb25tZW50IG9yCistICAjIGl0IGdldHMgdGhlIHdyb25nIENDIGV0Yy4KKy0gICMgZW52IC1pIGdpdmVzIHRoaXMgYnVpbGQgaG9zdCBjb25maWd1cmUgYSBjbGVhbiBlbnZpcm9ubWVudDsKKy0gICMgY29uc2VxdWVudGx5LCB3ZSBoYXZlIHRvIHJlLWluaXRpYWxpemUgJFBBVEguCistICBlbnYgLWkgQ0M9IiRCVUlMRF9DQyIgQVI9IiRCVUlMRF9BUiIgUkFOTElCPSIkQlVJTERfUkFOTElCIiBcCistICAgICAgUEFUSD0iJFBBVEgiIFwKKy0gICAgICB0b29sc19vbmx5PTEgXAorLSAgICAke2NvbmZkaXJ9L2NvbmZpZ3VyZSAtLWJ1aWxkPSR7YnVpbGR9IC0taG9zdD0ke2J1aWxkfSBcCistICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCAtLWRpc2FibGUtbmxzCistICBjZCAuLiB8fCBleGl0IDEKKy0gIEFDX01TR19OT1RJQ0UoW1tDb250aW51aW5nIHdpdGggbWFpbiBjb25maWd1cmUgKCR7aG9zdH0pLl1dKQorLWZpCisrbmF0aXZlX3Rvb2xzPQorIEFDX1NVQlNUKG5hdGl2ZV90b29scykKKyBBTV9DT05ESVRJT05BTChUT09MU19PTkxZLCBbW3Rlc3QgIngkdG9vbHNfb25seSIgPSB4MV1dKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlNDdlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA2ZjFmMzkxMmZjYjkwMGIzYTNlNmNiZTMzNjAzMDZmYWRlMzMzNDk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgNiBBdWcgMjAxNSAxNDo1NTowOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBkb250LWRlcGVuZC1vbi1oZWxwMm1hbgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKy0tLQorIGRvYy9NYWtlZmlsZS5hbSB8ICAyICstCisgbWFuL01ha2VmaWxlLmFtIHwgMTIgKysrKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KK2luZGV4IDcxOThhNmIuLjRiYmE1NTAgMTAwNjQ0CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTQwLDcgKzQwLDcgQEAgcmVmY2FyZF9maWxlcyA9IHJlZmNhcmQvTWFrZWZpbGUgcmVmY2FyZC90eGljbWRjaGVjayBcCisgIyBJbmNsdWRlIG91ciB0ZXhpbmZvLnRleCwgbm90IEF1dG9tYWtlJ3MuCisgRVhUUkFfRElTVCA9IGVwc2YudGV4IHRleGluZm8udGV4IFwKKyAgICAgICAgICAgICAgZmRsLnRleGkgXAorLQkgICAgICQobWFuX01BTlMpICQoVFhJX1hMQVRFKSBcCisrCSAgICAgJChUWElfWExBVEUpIFwKKyAJICAgICAkKHJlZmNhcmRfZmlsZXMpCisgCisgaWYgSU5TVEFMTF9XQVJOSU5HUworZGlmZiAtLWdpdCBhL21hbi9NYWtlZmlsZS5hbSBiL21hbi9NYWtlZmlsZS5hbQoraW5kZXggYTA4ZDYwMy4uYmRmYzlhNCAxMDA2NDQKKy0tLSBhL21hbi9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMTMsMjQgKzEzLDI0IEBACisgIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKyAjIFRoZXNlIGFyZSBnZW5lcmF0ZWQgdXNpbmcgaGVscDJtYW4uCistbWFuX01BTlMgPSBpbnN0YWxsLWluZm8uMSBtYWtlaW5mby4xIHRleGluZGV4LjEgdGV4aTJkdmkuMQorKyNtYW5fTUFOUyA9IGluc3RhbGwtaW5mby4xIG1ha2VpbmZvLjEgdGV4aW5kZXguMSB0ZXhpMmR2aS4xCisgCisgIyBUaGVzZSByZXF1aXJlIHRoZSBidWlsZCBpbiBpbmZvLywgdGh1cyBjYW4ndCBkbyBpZiB3ZSBmYWlsZWQgdG8gZmluZCBhCisgIyB0ZXJtaW5hbCBsaWJyYXJ5LgorIGlmIEhBVkVfVEVSTUxJQlMKKy1tYW5fTUFOUyArPSBpbmZvLjEKKysjbWFuX01BTlMgKz0gaW5mby4xCisgZW5kaWYKKyAKKyAjIFRoZXNlIGFyZSBoYW5kLXdyaXR0ZW4uCistbWFuX01BTlMgKz0gaW5mby41IHRleGluZm8uNQorKyNtYW5fTUFOUyArPSBpbmZvLjUgdGV4aW5mby41CisgCisgIyBUaGlzIGlzIGdlbmVyYXRlZCBieSBwb2QybWFuLCBidXQgbGV0J3MganVzdCBydW4gaXQgYnkgaGFuZC4KKy1tYW5fTUFOUyArPSBwb2QydGV4aS4xCisrI21hbl9NQU5TICs9IHBvZDJ0ZXhpLjEKKyAKKyAjIFRoZXNlIGFyZSBqdXN0IC5zbydzIHRvIHRoZSBjb21tb24gcHJvZ3JhbS4KKy1tYW5fTUFOUyArPSB0ZXhpMmFueS4xIHRleGkycGRmLjEgcGRmdGV4aTJkdmkuMQorKyNtYW5fTUFOUyArPSB0ZXhpMmFueS4xIHRleGkycGRmLjEgcGRmdGV4aTJkdmkuMQorIAorLUVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKSBnaW5mby5oMm0KKytFWFRSQV9ESVNUID0gZ2luZm8uaDJtCisgCisgIyBNYWludGFpbmVycyBzaG91bGQgYmUgYWJsZSB0byByZWdlbmVyYXRlLgorIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChtYW5fTUFOUykKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vbGluay16aXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2ZTlmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vbGluay16aXAucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAoraW5zdGFsbC1pbmZvIHVzZXMgc3ltYm9scyBmcm9tIHpsaWIgc28gbXVzdCBsaW5rIGFnYWluc3QgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB0ZXhpbmZvLTUuMS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMS5vcmlnL2luc3RhbGwtaW5mby9NYWtlZmlsZS5hbQorKysrIHRleGluZm8tNS4xL2luc3RhbGwtaW5mby9NYWtlZmlsZS5hbQorQEAgLTM0LDQgKzM0LDQgQEAgQU1fQ1BQRkxBR1MgPSAJCQkJCVwKKyAgIC1JJCh0b3Bfc3JjZGlyKS9nbnVsaWIvbGliCQkJXAorICAgLUkkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYgkJCVwKKyAgIC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIKKy1MREFERCA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hICQoTElCSU5UTCkKKytMREFERCA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hICQoTElCSU5UTCkgLWx6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby90ZXhpbmZvLTQuMTItemxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWJkMjIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby90ZXhpbmZvLTQuMTItemxpYi5wYXRjaApAQCAtMCwwICsxLDIzMyBAQAorRnJvbSAyMGUxZDhhOTQ4MWRjMTNkZDFkNGQxNjhiOTBlMGVkMmZmMDk3Yjk4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgNiBBdWcgMjAxNSAxNDoyOTo1NyArMDMwMAorU3ViamVjdDogW1BBVENIXSB0ZXhpbmZvLTQuMTItemxpYgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGluc3RhbGwtaW5mby9NYWtlZmlsZS5pbiAgICB8ICAyICstCisgaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jIHwgNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbiBiL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgoraW5kZXggYWQ3M2FiYi4uZWFhMjE1MyAxMDA2NDQKKy0tLSBhL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgorKysrIGIvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmluCitAQCAtMjQxLDcgKzI0MSw3IEBAIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIKKyBQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorIGFtX2dpbnN0YWxsX2luZm9fT0JKRUNUUyA9IGluc3RhbGwtaW5mby4kKE9CSkVYVCkKKyBnaW5zdGFsbF9pbmZvX09CSkVDVFMgPSAkKGFtX2dpbnN0YWxsX2luZm9fT0JKRUNUUykKKy1naW5zdGFsbF9pbmZvX0xEQUREID0gJChMREFERCkKKytnaW5zdGFsbF9pbmZvX0xEQUREID0gJChMREFERCkgLWx6CisgYW1fX0RFUEVOREVOQ0lFU18xID0KKyBnaW5zdGFsbF9pbmZvX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hIFwKKyAJJChhbV9fREVQRU5ERU5DSUVTXzEpCitkaWZmIC0tZ2l0IGEvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jIGIvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCitpbmRleCBiNDU0YzE1Li40ZTM5MTIyIDEwMDY0NAorLS0tIGEvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCisrKysgYi9pbnN0YWxsLWluZm8vaW5zdGFsbC1pbmZvLmMKK0BAIC0yMiw2ICsyMiw3IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlIDxhcmd6Lmg+CisrI2luY2x1ZGUgPHpsaWIuaD4KKyAKKyAjZGVmaW5lIFRBQl9XSURUSCA4CisgCitAQCAtNjg0LDE1ICs2ODUsMTUgQEAgVGhlIGZpcnN0IHRpbWUgeW91IGludm9rZSBJbmZvIHlvdSBzdGFydCBvZmYgbG9va2luZyBhdCB0aGlzIG5vZGUuXG5cCisgICAgCisgICAgUmV0dXJuIGVpdGhlciBzdGRpbiByZWFkaW5nIHRoZSBmaWxlLCBvciBhIG5vbi1zdGRpbiBwaXBlIHJlYWRpbmcKKyAgICB0aGUgb3V0cHV0IG9mIHRoZSBjb21wcmVzc2lvbiBwcm9ncmFtLiAgKi8KKy1GSUxFICoKKyt2b2lkICoKKyBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgICAgIHZvaWQgKCpjcmVhdGVfY2FsbGJhY2spIChjaGFyICopLAorLSAgICBjaGFyICoqb3BlbmVkX2ZpbGVuYW1lLCBjaGFyICoqY29tcHJlc3Npb25fcHJvZ3JhbSkgCisrICAgIGNoYXIgKipvcGVuZWRfZmlsZW5hbWUsIGNoYXIgKipjb21wcmVzc2lvbl9wcm9ncmFtLCBpbnQgKmlzX3BpcGUpIAorIHsKKyAgIGNoYXIgKmxvY2FsX29wZW5lZF9maWxlbmFtZSwgKmxvY2FsX2NvbXByZXNzaW9uX3Byb2dyYW07CisgICBpbnQgbnJlYWQ7CisgICBjaGFyIGRhdGFbMTNdOworLSAgRklMRSAqZjsKKysgIGd6RmlsZSAqZjsKKyAKKyAgIC8qIFdlIGxldCB0aGVtIHBhc3MgTlVMTCBpZiB0aGV5IGRvbid0IHdhbnQgdGhpcyBpbmZvLCBidXQgaXQncyBlYXNpZXIKKyAgICAgIHRvIGFsd2F5cyBkZXRlcm1pbmUgaXQuICAqLworQEAgLTcwMCw0OCArNzAxLDQ4IEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgb3BlbmVkX2ZpbGVuYW1lID0gJmxvY2FsX29wZW5lZF9maWxlbmFtZTsKKyAKKyAgICpvcGVuZWRfZmlsZW5hbWUgPSBmaWxlbmFtZTsKKy0gIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgIGlmICghZikKKyAgICAgeworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmd6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLnh6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmJ6MiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5seiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIubHptYSIsICIiKTsKKy0gICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICNpZmRlZiBfX01TRE9TX18KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmlneiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5pbnoiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICNlbmRpZiAvKiBfX01TRE9TX18gKi8KKyAgIGlmICghZikKK0BAIC03NTcsNyArNzU4LDcgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAoKmNyZWF0ZV9jYWxsYmFjaykgKGZpbGVuYW1lKTsKKyAKKyAgICAgICAgICAgLyogQW5kIHRyeSBvcGVuaW5nIGl0IGFnYWluLiAgKi8KKy0gICAgICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgICAgICAgIGlmICghZikKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KK0BAIC03NjcsMTIgKzc2OCwxMiBAQCBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgCisgICAvKiBSZWFkIGZpcnN0IGZldyBieXRlcyBvZiBmaWxlIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdGhlIGZpbGVuYW1lLgorICAgICAgSWYgdGhlIGZpbGUgaXMgc2hvcnRlciB0aGFuIHRoaXMgaXQgY2FuJ3QgYmUgdXNhYmxlIGFueXdheS4gICovCistICBucmVhZCA9IGZyZWFkIChkYXRhLCBzaXplb2YgKGRhdGEpLCAxLCBmKTsKKy0gIGlmIChucmVhZCAhPSAxKQorKyAgbnJlYWQgPSBnenJlYWQgKGYsIGRhdGEsIHNpemVvZiAoZGF0YSkpOworKyAgaWYgKG5yZWFkICE9IHNpemVvZiAoZGF0YSkpCisgICAgIHsKKyAgICAgICAvKiBFbXB0eSBmaWxlcyBkb24ndCBzZXQgZXJybm8uICBDYWxsaW5nIGNvZGUgY2FuIGNoZWNrIGZvcgorICAgICAgICAgIHRoaXMsIHNvIG1ha2Ugc3VyZSBlcnJubyA9PSAwIGp1c3QgaW4gY2FzZSBpdCBpc24ndCBhbHJlYWR5LiAqLworLSAgICAgIGlmIChucmVhZCA9PSAwKQorKyAgICAgIGlmIChucmVhZCA+PSAwKQorICAgICAgICAgZXJybm8gPSAwOworICAgICAgIHJldHVybiAwOworICAgICB9CitAQCAtODM4LDM1ICs4MzksNDAgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICAqY29tcHJlc3Npb25fcHJvZ3JhbSA9IE5VTEw7CisgCisgICAvKiBTZWVrIGJhY2sgb3ZlciB0aGUgbWFnaWMgYnl0ZXMuICAqLworLSAgaWYgKGZzZWVrIChmLCAwLCAwKSA8IDApCisrICBpZiAoZ3pzZWVrIChmLCAwLCBTRUVLX1NFVCkgPT0gLTEpCisgICAgIHJldHVybiAwOworIAorICAgaWYgKCpjb21wcmVzc2lvbl9wcm9ncmFtKQorICAgICB7IC8qIEl0J3MgY29tcHJlc3NlZCwgc28gb3BlbiBhIHBpcGUuICAqLworKyAgICAgIEZJTEUgKnA7CisgICAgICAgY2hhciAqY29tbWFuZCA9IGNvbmNhdCAoKmNvbXByZXNzaW9uX3Byb2dyYW0sICIgLWQiLCAiIik7CisgCistICAgICAgaWYgKGZjbG9zZSAoZikgPCAwKQorKyAgICAgIGlmIChnemNsb3NlIChmKSA8IDApCisgICAgICAgICByZXR1cm4gMDsKKy0gICAgICBmID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTiwgc3RkaW4pOworLSAgICAgIGlmICghZikKKysgICAgICBwID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTiwgc3RkaW4pOworKyAgICAgIGlmICghcCkKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGYgPSBwb3BlbiAoY29tbWFuZCwgInIiKTsKKy0gICAgICBpZiAoIWYpCisrICAgICAgcCA9IHBvcGVuIChjb21tYW5kLCAiciIpOworKyAgICAgIGlmICghcCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogVXNlZCBmb3IgZXJyb3IgbWVzc2FnZSBpbiBjYWxsaW5nIGNvZGUuICovCisgICAgICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb21tYW5kOworICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICAqaXNfcGlwZSA9IDE7CisrICAgICAgcmV0dXJuIHA7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSNpZiBPX0JJTkFSWQorKyNpZiAwICYmIE9fQklOQVJZCisgICAgICAgLyogU2luY2UgdGhpcyBpcyBhIHRleHQgZmlsZSwgYW5kIHdlIG9wZW5lZCBpdCBpbiBiaW5hcnkgbW9kZSwKKyAgICAgICAgICBzd2l0Y2ggYmFjayB0byB0ZXh0IG1vZGUuICAqLworICAgICAgIGYgPSBmcmVvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCAiciIsIGYpOworICAgICAgIGlmICghIGYpCisgCXJldHVybiAwOworICNlbmRpZgorKyAgICAgICppc19waXBlID0gMDsKKyAgICAgfQorIAorICAgcmV0dXJuIGY7CitAQCAtODg1LDcgKzg5MSw4IEBAIHJlYWRmaWxlIChjaGFyICpmaWxlbmFtZSwgaW50ICpzaXplcCwKKyAgICAgdm9pZCAoKmNyZWF0ZV9jYWxsYmFjaykgKGNoYXIgKiksIGNoYXIgKipvcGVuZWRfZmlsZW5hbWUsCisgICAgIGNoYXIgKipjb21wcmVzc2lvbl9wcm9ncmFtKQorIHsKKy0gIEZJTEUgKmY7CisrICB2b2lkICpmOworKyAgaW50IHBpcGVfcDsKKyAgIGludCBmaWxsZWQgPSAwOworICAgaW50IGRhdGFfc2l6ZSA9IDgxOTI7CisgICBjaGFyICpkYXRhID0geG1hbGxvYyAoZGF0YV9zaXplKTsKK0BAIC04OTMsMTQgKzkwMCwyMCBAQCByZWFkZmlsZSAoY2hhciAqZmlsZW5hbWUsIGludCAqc2l6ZXAsCisgICAvKiBJZiB0aGV5IHBhc3NlZCB0aGUgc3BhY2UgZm9yIHRoZSBmaWxlIG5hbWUgdG8gcmV0dXJuLCB1c2UgaXQuICAqLworICAgZiA9IG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChmaWxlbmFtZSwgY3JlYXRlX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWRfZmlsZW5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3Byb2dyYW0pOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl9wcm9ncmFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlwZV9wKTsKKyAKKyAgIGlmICghZikKKyAgICAgcmV0dXJuIDA7CisgCisgICBmb3IgKDs7KQorICAgICB7CistICAgICAgaW50IG5yZWFkID0gZnJlYWQgKGRhdGEgKyBmaWxsZWQsIDEsIGRhdGFfc2l6ZSAtIGZpbGxlZCwgZik7CisrICAgICAgaW50IG5yZWFkOworKworKyAgICAgIGlmIChwaXBlX3ApCisrICAgICAgICBucmVhZCA9IGZyZWFkIChkYXRhICsgZmlsbGVkLCAxLCBkYXRhX3NpemUgLSBmaWxsZWQsIGYpOworKyAgICAgIGVsc2UKKysgICAgICAgIG5yZWFkID0gZ3pyZWFkIChmLCBkYXRhICsgZmlsbGVkLCBkYXRhX3NpemUgLSBmaWxsZWQpOworICAgICAgIGlmIChucmVhZCA8IDApCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgICBpZiAobnJlYWQgPT0gMCkKK0BAIC05MTksOCArOTMyLDEwIEBAIHJlYWRmaWxlIChjaGFyICpmaWxlbmFtZSwgaW50ICpzaXplcCwKKyAgIC8qIFdlIG5lZWQgdG8gY2xvc2UgdGhlIHN0cmVhbSwgc2luY2Ugb24gc29tZSBzeXN0ZW1zIHRoZSBwaXBlIGNyZWF0ZWQKKyAgICAgIGJ5IHBvcGVuIGlzIHNpbXVsYXRlZCBieSBhIHRlbXBvcmFyeSBmaWxlIHdoaWNoIG9ubHkgZ2V0cyByZW1vdmVkCisgICAgICBpbnNpZGUgcGNsb3NlLiAgKi8KKy0gIGlmIChmICE9IHN0ZGluKQorKyAgaWYgKHBpcGVfcCkKKyAgICAgcGNsb3NlIChmKTsKKysgIGVsc2UKKysgICAgZ3pjbG9zZSAoZik7CisgCisgICAqc2l6ZXAgPSBmaWxsZWQ7CisgICByZXR1cm4gZGF0YTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2YzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjcm9zcyBidWlsZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdGV4aW5mby01LjEvaW5mby9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRleGluZm8tNS4xLm9yaWcvaW5mby9NYWtlZmlsZS5hbQorKysrIHRleGluZm8tNS4xL2luZm8vTWFrZWZpbGUuYW0KK0BAIC03Niw3ICs3Niw3IEBAIGNtZF9zb3VyY2VzID0gJChzcmNkaXIpL3Nlc3Npb24uYyAkKHNyY2QKKyAjIG1vcmUgdGhhbiBvbmNlLgorIGZ1bnMuaDogbWFrZWRvYyQoRVhFRVhUKSAkKGNtZF9zb3VyY2VzKQorIAlybSAtZiAkKGdlbmVyYXRlZF9zb3VyY2VzKQorLQkkKHRvcF9idWlsZGRpcikvJChuYXRpdmVfdG9vbHMpL2luZm8vbWFrZWRvYyAkKGNtZF9zb3VyY2VzKQorKwltYWtlZG9jICQoY21kX3NvdXJjZXMpCisgCisgIyBUaGUgZm9sbG93aW5nIGhhY2sgaXMgbmVjZXNzYXJ5IHRvIGhpbnQgbWFrZSBiZWZvcmUgdGhlIGF1dG9tYXRpYworICMgZGVwZW5kZW5jaWVzIGFyZSBidWlsdC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2NzhlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiRG9jdW1lbnRhdGlvbiBzeXN0ZW0gZm9yIG9uLWxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IgorREVTQ1JJUFRJT04gPSAiVGV4aW5mbyBpcyBhIGRvY3VtZW50YXRpb24gc3lzdGVtIHRoYXQgY2FuIHByb2R1Y2UgYm90aCBcCitvbmxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IGZyb20gYSBzaW5nbGUgc291cmNlIGZpbGUuIFRoZSBcCitHTlUgUHJvamVjdCB1c2VzIHRoZSBUZXhpbmZvIGZpbGUgZm9ybWF0IGZvciBtb3N0IG9mIGl0cyBkb2N1bWVudGF0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGV4aW5mby00LjgtcmVwbGFjZW1lbnQtbmF0aXZlIgorCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyB0ZXhpbmZvLTQuOC1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSIKKworVEFSR0VUX1BBVENIID0gImZpbGU6Ly91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaCBcCisiCitUQVJHRVRfUEFUQ0hfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RleGluZm8vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWxvY2FsZS1oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgJHtUQVJHRVRfUEFUQ0h9IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTlhMWE1OTFlZDIzNjAwM2QwZDRiMDA4YmYwN2VlZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjNjZGVlYmU2NWZkZjUxMGY1NWQ3NjVhYjEwMzFiNTQ0MTZhYTViYzI2MzViNmE1NGVmOWJjYjIzNjdjOTE3IgorCit0ZXhfdGV4aW5mbyA9ICJ0ZXhtZi90ZXgvdGV4aW5mbyIKKworaW5oZXJpdCBnZXR0ZXh0IGF1dG90b29scworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCWluc3RhbGwgLXAgLW02NDQgJHtTfS9kb2MvdGV4aW5mby50ZXggJHtTfS9kb2MvdHhpLT8/LnRleCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSA3NTUgaW5mby9tYWtlZG9jICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSBtYWtlaW5mby9tYWtlaW5mbyAke0R9JHtiaW5kaXJ9Cit9CisKK1BBQ0tBR0VTICs9ICJpbmZvIGluZm8tZG9jIgorCitGSUxFU19pbmZvID0gIiR7YmluZGlyfS9pbmZvICR7YmluZGlyfS9pbmZva2V5ICR7YmluZGlyfS9pbnN0YWxsLWluZm8iCitGSUxFU19pbmZvLWRvYyA9ICIke2luZm9kaXJ9L2luZm8uaW5mbyAke2luZm9kaXJ9L2RpciAke2luZm9kaXJ9L2luZm8tKi5pbmZvIFwKKyAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2luZm8uMSogJHttYW5kaXJ9L21hbjUvaW5mby41KiBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZva2V5LjEqICR7bWFuZGlyfS9tYW4xL2luc3RhbGwtaW5mby4xKiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L21ha2VpbmZvICR7YmluZGlyfS90ZXhpKiAke2JpbmRpcn0vcGRmdGV4aTJkdmkgJHtiaW5kaXJ9L3BvZDJ0ZXhpICR7ZGF0YWRpcn0vdGV4aW5mbyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2luZm9kaXJ9L3RleGluZm8qIFwKKyAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99IFwKKyAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMSAke21hbmRpcn0vbWFuNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjcxNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYgpAQCAtMCwwICsxLDgyIEBACitTVU1NQVJZID0gIkRvY3VtZW50YXRpb24gc3lzdGVtIGZvciBvbi1saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCIKK0RFU0NSSVBUSU9OID0gIlRleGluZm8gaXMgYSBkb2N1bWVudGF0aW9uIHN5c3RlbSB0aGF0IGNhbiBwcm9kdWNlIGJvdGggXAorb25saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCBmcm9tIGEgc2luZ2xlIHNvdXJjZSBmaWxlLiBUaGUgXAorR05VIFByb2plY3QgdXNlcyB0aGUgVGV4aW5mbyBmaWxlIGZvcm1hdCBmb3IgbW9zdCBvZiBpdHMgZG9jdW1lbnRhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiB0ZXhpbmZvLXJlcGxhY2VtZW50LW5hdGl2ZSIKKworZGVmIGNvbXByZXNzX3BrZyhkKToKKyAgICBpZiAiY29tcHJlc3NfZG9jIiBpbiAoZC5nZXRWYXIoIklOSEVSSVQiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIGNvbXByZXNzID0gZC5nZXRWYXIoIkRPQ19DT01QUkVTUyIsIFRydWUpCisgICAgICAgICBpZiBjb21wcmVzcyA9PSAiZ3oiOgorICAgICAgICAgICAgIHJldHVybiAiZ3ppcCIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gImJ6MiI6CisgICAgICAgICAgICAgcmV0dXJuICJiemlwMiIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gInh6IjoKKyAgICAgICAgICAgICByZXR1cm4gInh6IgorICAgIHJldHVybiAiIgorCitSREVQRU5EU19pbmZvICs9ICIke0Bjb21wcmVzc19wa2coZCl9IgorCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyB0ZXhpbmZvLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIG5jdXJzZXMtbmF0aXZlIgorCitUQVJHRVRfUEFUQ0ggPSAiZmlsZTovL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2giCitUQVJHRVRfUEFUQ0hfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RleGluZm8vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RleGluZm8tNC4xMi16bGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmstemlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICAke1RBUkdFVF9QQVRDSH0gXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImUxYTJlZjVkY2U1MDE4YjUzZjBmNmVlZDQ1YjI0N2E3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzZDMxODMyOTBmMzRlN2Y5NThkMjA5ZDBiMjAwMjJjNmZlOWU5MjFlYjZmZTk0YzI3ZDk4ODgyN2Q0ODc4ZDIiCisKK3RleF90ZXhpbmZvID0gInRleG1mL3RleC90ZXhpbmZvIgorCitpbmhlcml0IGdldHRleHQgYXV0b3Rvb2xzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIGF1dG90b29sc19kb19jb25maWd1cmUgdXBkYXRlcyBwby9NYWtlZmlsZS5pbi5pbiwgd2UgYWxzbyBuZWVkCisJIyB1cGRhdGUgcG9fZG9jdW1lbnQuCisJY3AgLWYgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcG9fZG9jdW1lbnQvCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlpZiBbIC1kIHRvb2xzIF07dGhlbgorCQlvZV9ydW5tYWtlIC1DIHRvb2xzL2dudWxpYi9saWIKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCWluc3RhbGwgLXAgLW02NDQgJHtTfS9kb2MvdGV4aW5mby50ZXggJHtTfS9kb2MvdHhpLT8/LnRleCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vdGV4aTJhbnkgJHtEfSR7YmluZGlyfS9wb2QydGV4aQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSA3NTUgaW5mby9tYWtlZG9jICR7RH0ke2JpbmRpcn0KK30KKworUEFDS0FHRVMgKz0gImluZm8gaW5mby1kb2MiCisKK0ZJTEVTX2luZm8gPSAiJHtiaW5kaXJ9L2luZm8gJHtiaW5kaXJ9L2luZm9rZXkgJHtiaW5kaXJ9L2luc3RhbGwtaW5mbyIKK0ZJTEVTX2luZm8tZG9jID0gIiR7aW5mb2Rpcn0vaW5mby5pbmZvKiAke2luZm9kaXJ9L2RpciAke2luZm9kaXJ9L2luZm8tKi5pbmZvKiBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZvLjEqICR7bWFuZGlyfS9tYW41L2luZm8uNSogXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mb2tleS4xKiAke21hbmRpcn0vbWFuMS9pbnN0YWxsLWluZm8uMSoiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9tYWtlaW5mbyAke2JpbmRpcn0vdGV4aSogJHtiaW5kaXJ9L3BkZnRleGkyZHZpICR7YmluZGlyfS9wb2QydGV4aSAke2RhdGFkaXJ9L3RleGluZm8iCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIgorRklMRVNfJHtQTn0tZG9jID0gIiR7aW5mb2Rpcn0vdGV4aW5mbyogXAorICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30gXAorICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xICR7bWFuZGlyfS9tYW41IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VhMGUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoCkBAIC0wLDAgKzEsMTMwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0gdGltZS0xLjcub3JpZy9jb25maWd1cmUuaW4KKysrKyB0aW1lLTEuNy9jb25maWd1cmUuaW4KK0BAIC0xLDExICsxLDggQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyBBQ19JTklUKHRpbWUuYykKKy1WRVJTSU9OPTEuNworLUFDX1NVQlNUKFZFUlNJT04pCistUEFDS0FHRT10aW1lCistQUNfU1VCU1QoUEFDS0FHRSkKKytBTV9JTklUX0FVVE9NQUtFKHRpbWUsIDEuNykKKyAKKy1BQ19BUkdfUFJPR1JBTQorK0FNX01BSU5UQUlORVJfTU9ERQorIAorIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKK0BAIC0xNSw3ICsxMiw3IEBACisgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIEFDX0hFQURFUl9TVERDCisgQUNfSEVBREVSX1NZU19XQUlUCistQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCBzdHJpbmcuaCBzeXMvcnVzYWdlLmgpCisrQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCBzdHJpbmcuaCBzeXMvcnVzYWdlLmggc3lzL3Jlc291cmNlLmgpCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfQ19DT05TVAorLS0tIHRpbWUtMS43Lm9yaWcvdmVyc2lvbi50ZXhpCisrKysgdGltZS0xLjcvdmVyc2lvbi50ZXhpCitAQCAtMSwzICsxLDMgQEAKKy1Ac2V0IFVQREFURUQgMTIgSnVuZSAxOTk2CisrQHNldCBVUERBVEVEIDkgTWF5IDIwMDIKKyBAc2V0IEVESVRJT04gMS43CisgQHNldCBWRVJTSU9OIDEuNworLS0tIHRpbWUtMS43Lm9yaWcvdGltZS5jCisrKysgdGltZS0xLjcvdGltZS5jCitAQCAtMTQ3LDYgKzE0NywxMCBAQAorICAgTlVMTAorIH07CisgDAorKworKy8qIElmIHRydWUsIGRvIG5vdCBzaG93IHRoZSBleGl0IG1lc3NhZ2UgKi8KKytzdGF0aWMgYm9vbGVhbiBxdWlldDsKKysKKyAvKiBJZiB0cnVlLCBzaG93IGFuIEVuZ2xpc2ggZGVzY3JpcHRpb24gbmV4dCB0byBlYWNoIHN0YXRpc3RpYy4gICovCisgc3RhdGljIGJvb2xlYW4gdmVyYm9zZTsKKyAKK0BAIC0xNzIsNiArMTc2LDcgQEAKKyAgIHsiaGVscCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCd9LAorICAgeyJvdXRwdXQtZmlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAorICAgeyJwb3J0YWJpbGl0eSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKyAgeyJxdWlldCIsIG5vX2FyZ3VtZW50LE5VTEwsICdxJ30sCisgICB7InZlcmJvc2UiLCBub19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKKyAgIHsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVid9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorQEAgLTMzMyw3ICszMzgsOCBAQAorICAgZWxzZSBpZiAoV0lGU0lHTkFMRUQgKHJlc3AtPndhaXRzdGF0dXMpKQorICAgICBmcHJpbnRmIChmcCwgIkNvbW1hbmQgdGVybWluYXRlZCBieSBzaWduYWwgJWRcbiIsCisgCSAgICAgV1RFUk1TSUcgKHJlc3AtPndhaXRzdGF0dXMpKTsKKy0gIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzcC0+d2FpdHN0YXR1cykgJiYgV0VYSVRTVEFUVVMgKHJlc3AtPndhaXRzdGF0dXMpKQorKyAgZWxzZSBpZiAoV0lGRVhJVEVEIChyZXNwLT53YWl0c3RhdHVzKSAmJiBXRVhJVFNUQVRVUyAocmVzcC0+d2FpdHN0YXR1cykKKysJICAgJiYgIXF1aWV0KQorICAgICBmcHJpbnRmIChmcCwgIkNvbW1hbmQgZXhpdGVkIHdpdGggbm9uLXplcm8gc3RhdHVzICVkXG4iLAorIAkgICAgIFdFWElUU1RBVFVTIChyZXNwLT53YWl0c3RhdHVzKSk7CisgCitAQCAtNTIzLDYgKzUyOSw3IEBACisgICBjaGFyICpmb3JtYXQ7CQkJLyogRm9ybWF0IGZvdW5kIGluIGVudmlyb25tZW50LiAgKi8KKyAKKyAgIC8qIEluaXRpYWxpemUgdGhlIG9wdGlvbiBmbGFncy4gICovCisrICBxdWlldCA9IGZhbHNlOworICAgdmVyYm9zZSA9IGZhbHNlOworICAgb3V0ZmlsZSA9IE5VTEw7CisgICBvdXRmcCA9IHN0ZGVycjsKK0BAIC01MzYsNyArNTQzLDcgQEAKKyAgIGlmIChmb3JtYXQpCisgICAgIG91dHB1dF9mb3JtYXQgPSBmb3JtYXQ7CisgCistICB3aGlsZSAoKG9wdGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIithZjpvOnB2ViIsIGxvbmdvcHRzLCAoaW50ICopIDApKQorKyAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICIrYWY6bzpwcXZWIiwgbG9uZ29wdHMsIChpbnQgKikgMCkpCisgCSAhPSBFT0YpCisgICAgIHsKKyAgICAgICBzd2l0Y2ggKG9wdGMpCitAQCAtNTU1LDYgKzU2Miw5IEBACisgCWNhc2UgJ3AnOgorIAkgIG91dHB1dF9mb3JtYXQgPSBwb3NpeF9mb3JtYXQ7CisgCSAgYnJlYWs7CisrCWNhc2UgJ3EnOgorKwkgIHF1aWV0ID0gdHJ1ZTsKKysJICBicmVhazsKKyAJY2FzZSAndic6CisgCSAgdmVyYm9zZSA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtNjQyLDkgKzY1Miw5IEBACisgICBmZmx1c2ggKG91dGZwKTsKKyAKKyAgIGlmIChXSUZTVE9QUEVEIChyZXMud2FpdHN0YXR1cykpCistICAgIGV4aXQgKFdTVE9QU0lHIChyZXMud2FpdHN0YXR1cykpOworKyAgICBleGl0IChXU1RPUFNJRyAocmVzLndhaXRzdGF0dXMpICsgMTI4KTsKKyAgIGVsc2UgaWYgKFdJRlNJR05BTEVEIChyZXMud2FpdHN0YXR1cykpCistICAgIGV4aXQgKFdURVJNU0lHIChyZXMud2FpdHN0YXR1cykpOworKyAgICBleGl0IChXVEVSTVNJRyAocmVzLndhaXRzdGF0dXMpICsgMTI4KTsKKyAgIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzLndhaXRzdGF0dXMpKQorICAgICBleGl0IChXRVhJVFNUQVRVUyAocmVzLndhaXRzdGF0dXMpKTsKKyB9CitAQCAtNjU3LDcgKzY2Nyw3IEBACisgICBmcHJpbnRmIChzdHJlYW0sICJcCisgVXNhZ2U6ICVzIFstYXB2Vl0gWy1mIGZvcm1hdF0gWy1vIGZpbGVdIFstLWFwcGVuZF0gWy0tdmVyYm9zZV1cblwKKyAgICAgICAgWy0tcG9ydGFiaWxpdHldIFstLWZvcm1hdD1mb3JtYXRdIFstLW91dHB1dD1maWxlXSBbLS12ZXJzaW9uXVxuXAorLSAgICAgICBbLS1oZWxwXSBjb21tYW5kIFthcmcuLi5dXG4iLAorKyAgICAgICBbLS1xdWlldF0gWy0taGVscF0gY29tbWFuZCBbYXJnLi4uXVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAgIGV4aXQgKHN0YXR1cyk7CisgfQorLS0tIHRpbWUtMS43Lm9yaWcvcmVzdXNlLmgKKysrKyB0aW1lLTEuNy9yZXN1c2UuaAorQEAgLTM2LDE5ICszNiw4IEBACisgIyBpbmNsdWRlIDxzeXMvcnVzYWdlLmg+CisgI2Vsc2UKKyAjIGRlZmluZSBUVl9NU0VDIHR2X3VzZWMgLyAxMDAwCistIyBpZiBIQVZFX1dBSVQzCisrIyBpZiBIQVZFX1NZU19SRVNPVVJDRV9ICisgIyAgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CistIyBlbHNlCistLyogUHJvY2VzcyByZXNvdXJjZSB1c2FnZSBzdHJ1Y3R1cmUuICAqLworLXN0cnVjdCBydXNhZ2UKKy17CistICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsJLyogVXNlciB0aW1lIHVzZWQuICAqLworLSAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CS8qIFN5c3RlbSB0aW1lIHVzZWQuICAqLworLSAgaW50IHJ1X21heHJzcywgcnVfaXhyc3MsIHJ1X2lkcnNzLCBydV9pc3JzcywKKy0gIHJ1X21pbmZsdCwgcnVfbWFqZmx0LCBydV9uc3dhcCwgcnVfaW5ibG9jaywgCistICBydV9vdWJsb2NrLCBydV9tc2dzbmQsIHJ1X21zZ3JjdiwgcnVfbnNpZ25hbHMsCistICBydV9udmNzdywgcnVfbml2Y3N3OworLX07CisgIyBlbmRpZgorICNlbmRpZgorIAorLS0tIHRpbWUtMS43Lm9yaWcvdGltZS50ZXhpCisrKysgdGltZS0xLjcvdGltZS50ZXhpCitAQCAtMTEsNiArMTEsMTIgQEAKKyBAZmluYWxvdXQKKyBAZW5kIGlmdGV4CisgCisrQGRpcmNhdGVnb3J5IEluZGl2aWR1YWwgdXRpbGl0aWVzCisrQGRpcmVudHJ5CisrKiB0aW1lOiAodGltZSkuICAgICAgICAgICAgICAgICAgICAgUnVuIHByb2dyYW1zIGFuZCBzdW1tYXJpemUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gcmVzb3VyY2UgdXNhZ2UuCisrQGVuZCBkaXJlbnRyeQorKworIEBpZmluZm8KKyBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB0aGUgR05VIEBjb2Rle3RpbWV9IGNvbW1hbmQgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMKKyBhbmQgc3VtbWFyaXppbmcgdGhlIHN5c3RlbSByZXNvdXJjZXMgdGhleSB1c2UuCitAQCAtMTg1LDYgKzE5MSwxMCBAQAorIHN5cyAlUworIEBlbmQgZXhhbXBsZQorIAorK0BpdGVtIC1xCisrQGl0ZW14IC0tcXVpZXQKKytTdXBwcmVzcyBub24temVybyBlcnJvciBjb2RlIGZyb20gdGhlIGV4ZWN1dGVkIHByb2dyYW0uCisrCisgQGl0ZW0gLXYKKyBAaXRlbXggLS12ZXJib3NlCisgQGNpbmRleCBmb3JtYXQKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUuaW5mbworKysrIHRpbWUtMS43L3RpbWUuaW5mbworQEAgLTEsNSArMSwxMCBAQAorLVRoaXMgaXMgSW5mbyBmaWxlIC4vdGltZS5pbmZvLCBwcm9kdWNlZCBieSBNYWtlaW5mby0xLjU1IGZyb20gdGhlIGlucHV0CistZmlsZSB0aW1lLnRleGkuCisrVGhpcyBpcyB0aW1lLmluZm8sIHByb2R1Y2VkIGJ5IG1ha2VpbmZvIHZlcnNpb24gNC4xIGZyb20gdGltZS50ZXhpLgorKworK0lORk8tRElSLVNFQ1RJT04gSW5kaXZpZHVhbCB1dGlsaXRpZXMKKytTVEFSVC1JTkZPLURJUi1FTlRSWQorKyogdGltZTogKHRpbWUpLiAgICAgICAgICAgICAgICAgICAgIFJ1biBwcm9ncmFtcyBhbmQgc3VtbWFyaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHJlc291cmNlIHVzYWdlLgorK0VORC1JTkZPLURJUi1FTlRSWQorIAorICAgIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHRoZSBHTlUgYHRpbWUnIGNvbW1hbmQgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMKKyBhbmQgc3VtbWFyaXppbmcgdGhlIHN5c3RlbSByZXNvdXJjZXMgdGhleSB1c2UuCitAQCAtMzEsNyArMzYsNyBAQAorIAorICogUmVzb3VyY2UgTWVhc3VyZW1lbnQ6OiAgTWVhc3VyaW5nIHByb2dyYW0gcmVzb3VyY2UgdXNlLgorIAorLSAtLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tCisrIC0tLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tLQorIAorIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZQorIAorQEAgLTU4LDE0ICs2MywxNCBAQAorICAgIFRoZSBgdGltZScgY29tbWFuZCBydW5zIGFub3RoZXIgcHJvZ3JhbSwgdGhlbiBkaXNwbGF5cyBpbmZvcm1hdGlvbgorIGFib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGF0IHByb2dyYW0sIGNvbGxlY3RlZCBieSB0aGUgc3lzdGVtIHdoaWxlCisgdGhlIHByb2dyYW0gd2FzIHJ1bm5pbmcuICBZb3UgY2FuIHNlbGVjdCB3aGljaCBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZAorLWFuZCB0aGUgZm9ybWF0IGluIHdoaWNoIGl0IGlzIHNob3duICgqbm90ZSBTZXR0aW5nIEZvcm1hdDo6LiksIG9yIGhhdmUKKythbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoKm5vdGUgU2V0dGluZyBGb3JtYXQ6OiksIG9yIGhhdmUKKyBgdGltZScgc2F2ZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBmaWxlIGluc3RlYWQgb2YgZGlzcGxheWluZyBpdCBvbiB0aGUKKy1zY3JlZW4gKCpub3RlIFJlZGlyZWN0aW5nOjouKS4KKytzY3JlZW4gKCpub3RlIFJlZGlyZWN0aW5nOjopLgorIAorICAgIFRoZSByZXNvdXJjZXMgdGhhdCBgdGltZScgY2FuIHJlcG9ydCBvbiBmYWxsIGludG8gdGhlIGdlbmVyYWwKKyBjYXRlZ29yaWVzIG9mIHRpbWUsIG1lbW9yeSwgYW5kIEkvTyBhbmQgSVBDIGNhbGxzLiAgU29tZSBzeXN0ZW1zIGRvIG5vdAorIHByb3ZpZGUgbXVjaCBpbmZvcm1hdGlvbiBhYm91dCBwcm9ncmFtIHJlc291cmNlIHVzZTsgYHRpbWUnIHJlcG9ydHMKKy11bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoKm5vdGUgQWNjdXJhY3k6Oi4pLgorK3VuYXZhaWxhYmxlIGluZm9ybWF0aW9uIGFzIHplcm8gdmFsdWVzICgqbm90ZSBBY2N1cmFjeTo6KS4KKyAKKyAgICBUaGUgZm9ybWF0IG9mIHRoZSBgdGltZScgY29tbWFuZCBpczoKKyAKK0BAIC0xMzIsNiArMTM3LDEwIEBACisgICAgICAgICAgIHVzZXIgJVUKKyAgICAgICAgICAgc3lzICVTCisgCisrYC1xJworK2AtLXF1aWV0JworKyAgICAgU3VwcHJlc3Mgbm9uLXplcm8gZXJyb3IgY29kZSBmcm9tIHRoZSBleGVjdXRlZCBwcm9ncmFtLgorKworIGAtdicKKyBgLS12ZXJib3NlJworICAgICAgVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdCwgd2hpY2ggZGlzcGxheXMgZWFjaCBhdmFpbGFibGUKK0BAIC0xNzQsNyArMTgzLDcgQEAKKyAgICBUaGUgcmVzb3VyY2Ugc3BlY2lmaWVycywgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhvc2UgcmVjb2duaXplZCBieQorIHRoZSBgdGNzaCcgYnVpbHRpbiBgdGltZScgY29tbWFuZCwgYXJlIGxpc3RlZCBiZWxvdy4gIE5vdCBhbGwgcmVzb3VyY2VzCisgYXJlIG1lYXN1cmVkIGJ5IGFsbCB2ZXJzaW9ucyBvZiBVbml4LCBzbyBzb21lIG9mIHRoZSB2YWx1ZXMgbWlnaHQgYmUKKy1yZXBvcnRlZCBhcyB6ZXJvICgqbm90ZSBBY2N1cmFjeTo6LikuCisrcmVwb3J0ZWQgYXMgemVybyAoKm5vdGUgQWNjdXJhY3k6OikuCisgCisgKiBNZW51OgorIAorQEAgLTMwOCwxMSArMzE3LDExIEBACisgYC1vIEZJTEUnCisgYC0tb3V0cHV0PUZJTEUnCisgICAgICBXcml0ZSB0aGUgcmVzb3VyY2UgdXNlIHN0YXRpc3RpY3MgdG8gRklMRS4gIEJ5IGRlZmF1bHQsIHRoaXMKKy0gICAgICpvdmVyd3JpdGVzKiB0aGUgZmlsZSwgZGVzdHJveWluZyB0aGUgZmlsZSdzIHByZXZpb3VzIGNvbnRlbnRzLgorKyAgICAgX292ZXJ3cml0ZXNfIHRoZSBmaWxlLCBkZXN0cm95aW5nIHRoZSBmaWxlJ3MgcHJldmlvdXMgY29udGVudHMuCisgCisgYC1hJworIGAtLWFwcGVuZCcKKy0gICAgICpBcHBlbmQqIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKysgICAgIF9BcHBlbmRfIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKyAgICAgIG9mIG92ZXJ3cml0aW5nIGl0LiAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCB0aGUgYC1vJyBvcgorICAgICAgYC0tb3V0cHV0JyBvcHRpb24uCisgCitAQCAtNDM3LDcgKzQ0Niw3IEBACisgCisgYC1hJworIGAtLWFwcGVuZCcKKy0gICAgICpBcHBlbmQqIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKysgICAgIF9BcHBlbmRfIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKyAgICAgIG9mIG92ZXJ3cml0aW5nIGl0LgorIAorIGAtZiBGT1JNQVQnCitAQCAtNDYyLDE3ICs0NzEsMTcgQEAKKyAKKyAfCisgVGFnIFRhYmxlOgorLU5vZGU6IFRvcH85MzQKKy1Ob2RlOiBSZXNvdXJjZSBNZWFzdXJlbWVudH8xNzI1CistTm9kZTogU2V0dGluZyBGb3JtYXR/MzY3OAorLU5vZGU6IEZvcm1hdCBTdHJpbmd/NDkwNworLU5vZGU6IFRpbWUgUmVzb3VyY2VzfzYyMTQKKy1Ob2RlOiBNZW1vcnkgUmVzb3VyY2VzfzY4NDQKKy1Ob2RlOiBJL08gUmVzb3VyY2Vzfzc1NDkKKy1Ob2RlOiBDb21tYW5kIEluZm9/ODc0NworLU5vZGU6IFJlZGlyZWN0aW5nfzg5NjQKKy1Ob2RlOiBFeGFtcGxlc385NzU0CistTm9kZTogQWNjdXJhY3l/MTIwNjQKKy1Ob2RlOiBJbnZva2luZyB0aW1lfzEzNTg2CisrTm9kZTogVG9wfzExMTUKKytOb2RlOiBSZXNvdXJjZSBNZWFzdXJlbWVudH8xOTA4CisrTm9kZTogU2V0dGluZyBGb3JtYXR/Mzg1OAorK05vZGU6IEZvcm1hdCBTdHJpbmd/NTE2NAorK05vZGU6IFRpbWUgUmVzb3VyY2VzfzY0NzAKKytOb2RlOiBNZW1vcnkgUmVzb3VyY2VzfzcxMDAKKytOb2RlOiBJL08gUmVzb3VyY2Vzfzc4MDUKKytOb2RlOiBDb21tYW5kIEluZm9/OTAwMworK05vZGU6IFJlZGlyZWN0aW5nfzkyMjAKKytOb2RlOiBFeGFtcGxlc38xMDAxMAorK05vZGU6IEFjY3VyYWN5fzEyMzIwCisrTm9kZTogSW52b2tpbmcgdGltZX8xMzg0MgorIB8KKyBFbmQgVGFnIFRhYmxlCistLS0gdGltZS0xLjcub3JpZy90aW1lLmh0bWwKKysrKyB0aW1lLTEuNy90aW1lLmh0bWwKK0BAIC0wLDAgKzEsMTAyMSBAQAorKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisrICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAvbG9vc2UuZHRkIj4KKys8SFRNTD4KKys8IS0tIENyZWF0ZWQgb24gU2VwdGVtYmVyLCAxIDIwMDMgYnkgdGV4aTJodG1sIDEuNjYgLS0+CisrPCEtLQorK1dyaXR0ZW4gYnk6IExpb25lbCBDb25zIDxMaW9uZWwuQ29uc0BjZXJuLmNoPiAob3JpZ2luYWwgYXV0aG9yKQorKyAgICAgICAgICAgIEthcmwgQmVycnkgIDxrYXJsQGZyZWVmcmllbmRzLm9yZz4KKysgICAgICAgICAgICBPbGFmIEJhY2htYW5uIDxvYmFjaG1hbkBtYXRoZW1hdGlrLnVuaS1rbC5kZT4KKysgICAgICAgICAgICBhbmQgbWFueSBvdGhlcnMuCisrTWFpbnRhaW5lZCBieTogTWFueSBjcmVhdGl2ZSBwZW9wbGUgPGRldkB0ZXhpMmh0bWwuY3ZzaG9tZS5vcmc+CisrU2VuZCBidWdzIGFuZCBzdWdnZXN0aW9ucyB0byA8dXNlcnNAdGV4aTJodG1sLmN2c2hvbWUub3JnPgorKworKy0tPgorKzxIRUFEPgorKzxUSVRMRT5NZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L1RJVExFPgorKworKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSJNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UiPgorKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UiPgorKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKys8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+CisrPE1FVEEgTkFNRT0iR2VuZXJhdG9yIiBDT05URU5UPSJ0ZXhpMmh0bWwgMS42NiI+CisrCisrPC9IRUFEPgorKworKzxCT0RZIExBTkc9ImVuIiBCR0NPTE9SPSIjRkZGRkZGIiBURVhUPSIjMDAwMDAwIiBMSU5LPSIjMDAwMEZGIiBWTElOSz0iIzgwMDA4MCIgQUxJTks9IiNGRjAwMDAiPgorKworKzxBIE5BTUU9IlNFQ19Ub3AiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgxPk1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvSDE+CisrCisrPFA+CisrCisrVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdGhlIEdOVSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kIGZvciBydW5uaW5nIHByb2dyYW1zCisrYW5kIHN1bW1hcml6aW5nIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHRoZXkgdXNlLgorK1RoaXMgaXMgZWRpdGlvbiAxLjcsIGZvciB2ZXJzaW9uIDEuNy4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPk1lYXN1cmluZyBwcm9ncmFtIHJlc291cmNlIHVzZS48L1REPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+IC0tIFRoZSBEZXRhaWxlZCBOb2RlIExpc3RpbmcgLS0tCisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPk1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZQorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+MS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TZWxlY3RpbmcgdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlRoZSBpbmZvcm1hdGlvbiA8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5Xcml0aW5nIHRoZSBpbmZvcm1hdGlvbiB0byBhIGZpbGUuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+RXhhbXBsZXMgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkxpbWl0YXRpb25zIG9uIHRoZSBhY2N1cmFjeSBvZiA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZC48L1REPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+VGhlIEZvcm1hdCBTdHJpbmcKKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8SFIgU0laRT0xPgorKzxBIE5BTUU9IlNFQzEiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzIiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmx0OyZsdDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEEgTkFNRT0iUmVzb3VyY2UgTWVhc3VyZW1lbnQiPjwvQT4KKys8SDE+IDEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZSA8L0gxPgorKzwhLS1kb2NpZDo6U0VDMTo6LS0+CisrPFA+CisrCisrVGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgcnVucyBhbm90aGVyIHByb2dyYW0sIHRoZW4gZGlzcGxheXMgaW5mb3JtYXRpb24KKythYm91dCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhhdCBwcm9ncmFtLCBjb2xsZWN0ZWQgYnkgdGhlIHN5c3RlbSB3aGlsZQorK3RoZSBwcm9ncmFtIHdhcyBydW5uaW5nLiAgWW91IGNhbiBzZWxlY3Qgd2hpY2ggaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQKKythbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPiksIG9yIGhhdmUKKys8Q09ERT50aW1lPC9DT0RFPiBzYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiBhIGZpbGUgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIGl0IG9uIHRoZQorK3NjcmVlbiAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+KS4KKys8L1A+CisrPFA+CisrCisrVGhlIHJlc291cmNlcyB0aGF0IDxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQgb24gZmFsbCBpbnRvIHRoZSBnZW5lcmFsCisrY2F0ZWdvcmllcyBvZiB0aW1lLCBtZW1vcnksIGFuZCBJL08gYW5kIElQQyBjYWxscy4gIFNvbWUgc3lzdGVtcyBkbyBub3QKKytwcm92aWRlIG11Y2ggaW5mb3JtYXRpb24gYWJvdXQgcHJvZ3JhbSByZXNvdXJjZSB1c2U7IDxDT0RFPnRpbWU8L0NPREU+CisrcmVwb3J0cyB1bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+KS4KKys8L1A+CisrPFA+CisrCisrVGhlIGZvcm1hdCBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBpczoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnRpbWUgW29wdGlvbjxzbWFsbD4uLi48L3NtYWxsPl0gPFZBUj5jb21tYW5kPC9WQVI+IFs8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPl0KKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8QSBOQU1FPSJJRFgxIj48L0E+CisrPENPREU+dGltZTwvQ09ERT4gcnVucyB0aGUgcHJvZ3JhbSA8VkFSPmNvbW1hbmQ8L1ZBUj4sIHdpdGggYW55IGdpdmVuIGFyZ3VtZW50cworKzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+LiAgV2hlbiA8VkFSPmNvbW1hbmQ8L1ZBUj4gZmluaXNoZXMsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzCisraW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHVzZWQgYnkgPFZBUj5jb21tYW5kPC9WQVI+LgorKzwvUD4KKys8UD4KKysKKytIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4gdG8gbWVhc3VyZSB0aGUgdGltZSBhbmQgb3RoZXIKKytyZXNvdXJjZXMgdXNlZCBieSBydW5uaW5nIHRoZSBwcm9ncmFtIDxDT0RFPmdyZXA8L0NPREU+OgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgZ3JlcCBub2JvZHkgL2V0Yy9hbGlhc2VzCisrbm9ib2R5Oi9kZXYvbnVsbAorK2V0Yy1maWxlczpub2JvZHkKKyttaXNjLWdyb3VwOm5vYm9keQorKzAuMDd1c2VyIDAuNTBzeXN0ZW0gMDowNi42OWVsYXBzZWQgOCVDUFUgKDBhdmd0ZXh0KzQ4OWF2Z2RhdGEgMzI0bWF4cmVzaWRlbnQpaworKzQ2aW5wdXRzKzdvdXRwdXRzICg0M21ham9yKzI1MW1pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrTWFpbCBzdWdnZXN0aW9ucyBhbmQgYnVnIHJlcG9ydHMgZm9yIEdOVSA8Q09ERT50aW1lPC9DT0RFPiB0bworKzxDT0RFPmJ1Zy1nbnUtdXRpbHNAcHJlcC5haS5taXQuZWR1PC9DT0RFPi4gIFBsZWFzZSBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mCisrPENPREU+dGltZTwvQ09ERT4sIHdoaWNoIHlvdSBjYW4gZ2V0IGJ5IHJ1bm5pbmcgYDxTQU1QPnRpbWUgLS12ZXJzaW9uPC9TQU1QPicsIGFuZCB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIGFuZCBDIGNvbXBpbGVyIHlvdSB1c2VkLgorKzwvUD4KKys8UD4KKysKKys8VEFCTEUgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlNlbGVjdGluZyB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgYnkgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+VGhlIGluZm9ybWF0aW9uIDxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+MS4zIFJlZGlyZWN0aW5nIE91dHB1dDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPldyaXRpbmcgdGhlIGluZm9ybWF0aW9uIHRvIGEgZmlsZS48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4xLjQgRXhhbXBsZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5FeGFtcGxlcyBvZiB1c2luZyA8Q09ERT50aW1lPC9DT0RFPi48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+TGltaXRhdGlvbnMgb24gdGhlIGFjY3VyYWN5IG9mIDxDT0RFPnRpbWU8L0NPREU+IG91dHB1dC48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMSI+MS42IFJ1bm5pbmcgdGhlIDxDT0RFPnRpbWU8L0NPREU+IENvbW1hbmQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kLjwvVEQ+PC9UUj4KKys8L1RBQkxFPgorKzxQPgorKworKzxBIE5BTUU9IlNldHRpbmcgRm9ybWF0Ij48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzIiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzMiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0IDwvSDI+CisrPCEtLWRvY2lkOjpTRUMyOjotLT4KKys8UD4KKysKKys8Q09ERT50aW1lPC9DT0RFPiB1c2VzIGEgPEVNPmZvcm1hdCBzdHJpbmc8L0VNPiB0byBkZXRlcm1pbmUgd2hpY2ggaW5mb3JtYXRpb24gdG8KKytkaXNwbGF5IGFib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY29tbWFuZCBpdCBydW5zLiAgU2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT4sIGZvciB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZvcm1hdCBzdHJpbmcgY29udGVudHMuCisrPC9QPgorKzxQPgorKworK1lvdSBjYW4gc3BlY2lmeSBhIGZvcm1hdCBzdHJpbmcgd2l0aCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgbGlzdGVkCisrYmVsb3cuICBJZiBubyBmb3JtYXQgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCB0aGUKKys8Q09ERT5USU1FPC9DT0RFPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0cyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBmb3JtYXQKKytzdHJpbmcuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IGZvcm1hdCBidWlsdCBpbnRvIDxDT0RFPnRpbWU8L0NPREU+IGlzIHVzZWQ6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT4lVXVzZXIgJVNzeXN0ZW0gJUVlbGFwc2VkICVQQ1BVICglWHRleHQrJURkYXRhICVNbWF4KWsKKyslSWlucHV0cyslT291dHB1dHMgKCVGbWFqb3IrJVJtaW5vcilwYWdlZmF1bHRzICVXc3dhcHMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gc2V0IHRoZSBmb3JtYXQgYXJlOgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1mIDxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1mb3JtYXQ9PFZBUj5mb3JtYXQ8L1ZBUj48L0NPREU+CisrPEREPlVzZSA8VkFSPmZvcm1hdDwvVkFSPiBhcyB0aGUgZm9ybWF0IHN0cmluZy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1wPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1wb3J0YWJpbGl0eTwvQ09ERT4KKys8REQ+VXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0IHN0cmluZywgZm9yIGNvbmZvcm1hbmNlIHdpdGggUE9TSVggc3RhbmRhcmQKKysxMDAzLjI6CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnJlYWwgJWUKKyt1c2VyICVVCisrc3lzICVTCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcXVpZXQ8L0NPREU+CisrPEREPlN1cHByZXNzIG5vbi16ZXJvIGVycm9yIGNvZGUgZnJvbSB0aGUgZXhlY3V0ZWQgcHJvZ3JhbS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi12PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS12ZXJib3NlPC9DT0RFPgorKzxERD48QSBOQU1FPSJJRFgyIj48L0E+CisrVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdCwgd2hpY2ggZGlzcGxheXMgZWFjaCBhdmFpbGFibGUgcGllY2Ugb2YKKytpbmZvcm1hdGlvbiBvbiB0aGUgcHJvZ3JhbSdzIHJlc291cmNlIHVzZSBvbiBpdHMgb3duIGxpbmUsIHdpdGggYW4KKytFbmdsaXNoIGRlc2NyaXB0aW9uIG9mIGl0cyBtZWFuaW5nLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iRm9ybWF0IFN0cmluZyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMzIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjIgVGhlIEZvcm1hdCBTdHJpbmcgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzM6Oi0tPgorKzxQPgorKworKzxBIE5BTUU9IklEWDMiPjwvQT4KKys8QSBOQU1FPSJJRFg0Ij48L0E+CisrVGhlIDxFTT5mb3JtYXQgc3RyaW5nPC9FTT4gY29udHJvbHMgdGhlIGNvbnRlbnRzIG9mIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuCisrSXQgY29uc2lzdHMgb2YgPEVNPnJlc291cmNlIHNwZWNpZmllcnM8L0VNPiBhbmQgPEVNPmVzY2FwZXM8L0VNPiwgaW50ZXJzcGVyc2VkCisrd2l0aCBwbGFpbiB0ZXh0LgorKzwvUD4KKys8UD4KKysKKytBIGJhY2tzbGFzaCBpbnRyb2R1Y2VzIGFuIDxFTT5lc2NhcGU8L0VNPiwgd2hpY2ggaXMgdHJhbnNsYXRlZAorK2ludG8gYSBzaW5nbGUgcHJpbnRpbmcgY2hhcmFjdGVyIHVwb24gb3V0cHV0LiAgVGhlIHZhbGlkIGVzY2FwZXMgYXJlCisrbGlzdGVkIGJlbG93LiAgQW4gaW52YWxpZCBlc2NhcGUgaXMgb3V0cHV0IGFzIGEgcXVlc3Rpb24gbWFyayBmb2xsb3dlZAorK2J5IGEgYmFja3NsYXNoLgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPlx0PC9DT0RFPgorKzxERD5hIHRhYiBjaGFyYWN0ZXIKKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlxuPC9DT0RFPgorKzxERD5hIG5ld2xpbmUKKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlxcPC9DT0RFPgorKzxERD5hIGxpdGVyYWwgYmFja3NsYXNoCisrPC9ETD4KKys8UD4KKysKKys8Q09ERT50aW1lPC9DT0RFPiBhbHdheXMgcHJpbnRzIGEgbmV3bGluZSBhZnRlciBwcmludGluZyB0aGUgcmVzb3VyY2UgdXNlCisraW5mb3JtYXRpb24sIHNvIG5vcm1hbGx5IGZvcm1hdCBzdHJpbmdzIGRvIG5vdCBlbmQgd2l0aCBhIG5ld2xpbmUKKytjaGFyYWN0ZXIgKG9yIGA8U0FNUD5cbjwvU0FNUD4nKS4KKys8L1A+CisrPFA+CisrCisrQSByZXNvdXJjZSBzcGVjaWZpZXIgY29uc2lzdHMgb2YgYSBwZXJjZW50IHNpZ24gZm9sbG93ZWQgYnkgYW5vdGhlcgorK2NoYXJhY3Rlci4gIEFuIGludmFsaWQgcmVzb3VyY2Ugc3BlY2lmaWVyIGlzIG91dHB1dCBhcyBhIHF1ZXN0aW9uIG1hcmsKKytmb2xsb3dlZCBieSB0aGUgaW52YWxpZCBjaGFyYWN0ZXIuICBVc2UgYDxTQU1QPiUlPC9TQU1QPicgdG8gb3V0cHV0IGEgbGl0ZXJhbAorK3BlcmNlbnQgc2lnbi4KKys8L1A+CisrPFA+CisrCisrVGhlIHJlc291cmNlIHNwZWNpZmllcnMsIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mIHRob3NlIHJlY29nbml6ZWQgYnkgdGhlCisrPENPREU+dGNzaDwvQ09ERT4gYnVpbHRpbiA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kLCBhcmUgbGlzdGVkIGJlbG93LiAgTm90IGFsbAorK3Jlc291cmNlcyBhcmUgbWVhc3VyZWQgYnkgYWxsIHZlcnNpb25zIG9mIFVuaXgsIHNvIHNvbWUgb2YgdGhlIHZhbHVlcworK21pZ2h0IGJlIHJlcG9ydGVkIGFzIHplcm8gKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPikuCisrPC9QPgorKzxQPgorKworKzxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8QSBOQU1FPSJUaW1lIFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM0Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMSBUaW1lIFJlc291cmNlcyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNDo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5FPC9DT0RFPgorKzxERD5FbGFwc2VkIHJlYWwgKHdhbGwgY2xvY2spIHRpbWUgdXNlZCBieSB0aGUgcHJvY2VzcywgaW4KKytbaG91cnM6XW1pbnV0ZXM6c2Vjb25kcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPmU8L0NPREU+CisrPEREPkVsYXBzZWQgcmVhbCAod2FsbCBjbG9jaykgdGltZSB1c2VkIGJ5IHRoZSBwcm9jZXNzLCBpbgorK3NlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5TPC9DT0RFPgorKzxERD5Ub3RhbCBudW1iZXIgb2YgQ1BVLXNlY29uZHMgdXNlZCBieSB0aGUgc3lzdGVtIG9uIGJlaGFsZiBvZiB0aGUgcHJvY2VzcworKyhpbiBrZXJuZWwgbW9kZSksIGluIHNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5VPC9DT0RFPgorKzxERD5Ub3RhbCBudW1iZXIgb2YgQ1BVLXNlY29uZHMgdGhhdCB0aGUgcHJvY2VzcyB1c2VkIGRpcmVjdGx5IChpbiB1c2VyCisrbW9kZSksIGluIHNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5QPC9DT0RFPgorKzxERD5QZXJjZW50YWdlIG9mIHRoZSBDUFUgdGhhdCB0aGlzIGpvYiBnb3QuICBUaGlzIGlzIGp1c3QgdXNlciArIHN5c3RlbQorK3RpbWVzIGRpdmllZCBieSB0aGUgdG90YWwgcnVubmluZyB0aW1lLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iTWVtb3J5IFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM1Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMiBNZW1vcnkgUmVzb3VyY2VzIDwvSDM+CisrPCEtLWRvY2lkOjpTRUM1OjotLT4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPk08L0NPREU+CisrPEREPk1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUgb2YgdGhlIHByb2Nlc3MgZHVyaW5nIGl0cyBsaWZldGltZSwgaW4KKytLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT50PC9DT0RFPgorKzxERD5BdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIG9mIHRoZSBwcm9jZXNzLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5LPC9DT0RFPgorKzxERD5BdmVyYWdlIHRvdGFsIChkYXRhK3N0YWNrK3RleHQpIG1lbW9yeSB1c2Ugb2YgdGhlIHByb2Nlc3MsIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPkQ8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHVuc2hhcmVkIGRhdGEgYXJlYSwgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+cDwvQ09ERT4KKys8REQ+QXZlcmFnZSBzaXplIG9mIHRoZSBwcm9jZXNzJ3MgdW5zaGFyZWQgc3RhY2ssIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlg8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHNoYXJlZCB0ZXh0LCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5aPC9DT0RFPgorKzxERD5TeXN0ZW0ncyBwYWdlIHNpemUsIGluIGJ5dGVzLiAgVGhpcyBpcyBhIHBlci1zeXN0ZW0gY29uc3RhbnQsIGJ1dAorK3ZhcmllcyBiZXR3ZWVuIHN5c3RlbXMuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJJL08gUmVzb3VyY2VzIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzYiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzUiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzciPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi4zIEkvTyBSZXNvdXJjZXMgPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzY6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+RjwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIG1ham9yLCBvciBJL08tcmVxdWlyaW5nLCBwYWdlIGZhdWx0cyB0aGF0IG9jY3VycmVkIHdoaWxlIHRoZQorK3Byb2Nlc3Mgd2FzIHJ1bm5pbmcuICBUaGVzZSBhcmUgZmF1bHRzIHdoZXJlIHRoZSBwYWdlIGhhcyBhY3R1YWxseQorK21pZ3JhdGVkIG91dCBvZiBwcmltYXJ5IG1lbW9yeS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlI8L0NPREU+CisrPEREPk51bWJlciBvZiBtaW5vciwgb3IgcmVjb3ZlcmFibGUsIHBhZ2UgZmF1bHRzLiAgVGhlc2UgYXJlIHBhZ2VzIHRoYXQgYXJlCisrbm90IHZhbGlkIChzbyB0aGV5IGZhdWx0KSBidXQgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gY2xhaW1lZCBieSBvdGhlcgorK3ZpcnR1YWwgcGFnZXMuICBUaHVzIHRoZSBkYXRhIGluIHRoZSBwYWdlIGlzIHN0aWxsIHZhbGlkIGJ1dCB0aGUgc3lzdGVtCisrdGFibGVzIG11c3QgYmUgdXBkYXRlZC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlc8L0NPREU+CisrPEREPk51bWJlciBvZiB0aW1lcyB0aGUgcHJvY2VzcyB3YXMgc3dhcHBlZCBvdXQgb2YgbWFpbiBtZW1vcnkuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5jPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgdGltZXMgdGhlIHByb2Nlc3Mgd2FzIGNvbnRleHQtc3dpdGNoZWQgaW52b2x1bnRhcmlseSAoYmVjYXVzZQorK3RoZSB0aW1lIHNsaWNlIGV4cGlyZWQpLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+dzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIHByb2dyYW0gd2FzIGNvbnRleHQtc3dpdGNoZWQgdm9sdW50YXJpbHksIGZvcgorK2luc3RhbmNlIHdoaWxlIHdhaXRpbmcgZm9yIGFuIEkvTyBvcGVyYXRpb24gdG8gY29tcGxldGUuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5JPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgZmlsZSBzeXN0ZW0gaW5wdXRzIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+TzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIGZpbGUgc3lzdGVtIG91dHB1dHMgYnkgdGhlIHByb2Nlc3MuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5yPC9DT0RFPgorKzxERD5OdW1iZXIgb2Ygc29ja2V0IG1lc3NhZ2VzIHJlY2VpdmVkIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+czwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNvY2tldCBtZXNzYWdlcyBzZW50IGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+azwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNpZ25hbHMgZGVsaXZlcmVkIHRvIHRoZSBwcm9jZXNzLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iQ29tbWFuZCBJbmZvIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzciPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzYiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzgiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi40IENvbW1hbmQgSW5mbyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNzo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5DPC9DT0RFPgorKzxERD5OYW1lIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9mIHRoZSBjb21tYW5kIGJlaW5nIHRpbWVkLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+eDwvQ09ERT4KKys8REQ+RXhpdCBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJSZWRpcmVjdGluZyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM4Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjMgUmVkaXJlY3RpbmcgT3V0cHV0IDwvSDI+CisrPCEtLWRvY2lkOjpTRUM4OjotLT4KKys8UD4KKysKKytCeSBkZWZhdWx0LCA8Q09ERT50aW1lPC9DT0RFPiB3cml0ZXMgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIHRoZQorK3N0YW5kYXJkIGVycm9yIHN0cmVhbS4gIFRoZSBvcHRpb25zIGJlbG93IG1ha2UgaXQgd3JpdGUgdGhlIHN0YXRpc3RpY3MKKyt0byBhIGZpbGUgaW5zdGVhZC4gIERvaW5nIHRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgcHJvZ3JhbSB5b3UncmUKKytydW5uaW5nIHdyaXRlcyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3IgeW91J3JlIHJ1bm5pbmcgPENPREU+dGltZTwvQ09ERT4KKytub25pbnRlcmFjdGl2ZWx5IG9yIGluIHRoZSBiYWNrZ3JvdW5kLgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1vIDxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tb3V0cHV0PTxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+V3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIDxWQVI+ZmlsZTwvVkFSPi4gIEJ5IGRlZmF1bHQsIHRoaXMKKys8RU0+b3ZlcndyaXRlczwvRU0+IHRoZSBmaWxlLCBkZXN0cm95aW5nIHRoZSBmaWxlJ3MgcHJldmlvdXMgY29udGVudHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tYTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tYXBwZW5kPC9DT0RFPgorKzxERD48RU0+QXBwZW5kPC9FTT4gdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorK29mIG92ZXJ3cml0aW5nIGl0LiAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCB0aGUgYDxTQU1QPi1vPC9TQU1QPicgb3IKKytgPFNBTVA+LS1vdXRwdXQ8L1NBTVA+JyBvcHRpb24uCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJFeGFtcGxlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM5Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS40IEV4YW1wbGVzIDwvSDI+CisrPCEtLWRvY2lkOjpTRUM5OjotLT4KKys8UD4KKysKKytSdW4gdGhlIGNvbW1hbmQgYDxTQU1QPndjIC9ldGMvaG9zdHM8L1NBTVA+JyBhbmQgc2hvdyB0aGUgZGVmYXVsdCBpbmZvcm1hdGlvbjoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIHdjIC9ldGMvaG9zdHMKKysgICAgICAzNSAgICAgMTExICAgIDExMzQgL2V0Yy9ob3N0cworKzAuMDB1c2VyIDAuMDFzeXN0ZW0gMDowMC4wNGVsYXBzZWQgMjUlQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpaworKzFpbnB1dHMrMW91dHB1dHMgKDBtYWpvciswbWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytSdW4gdGhlIGNvbW1hbmQgYDxTQU1QPmxzIC1GczwvU0FNUD4nIGFuZCBzaG93IGp1c3QgdGhlIHVzZXIsIHN5c3RlbSwgYW5kCisrd2FsbC1jbG9jayB0aW1lOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgLWYgJnF1b3Q7XHQlRSByZWFsLFx0JVUgdXNlcixcdCVTIHN5cyZxdW90OyBscyAtRnMKKyt0b3RhbCAxNgorKzEgYWNjb3VudC8gICAgICAxIGRiLyAgICAgICAgICAgMSBtYWlsLyAgICAgICAgIDEgcnVuLworKzEgYmFja3Vwcy8gICAgICAxIGVtYWNzLyAgICAgICAgMSBtc2dzLyAgICAgICAgIDEgcndoby8KKysxIGNyYXNoLyAgICAgICAgMSBnYW1lcy8gICAgICAgIDEgcHJlc2VydmUvICAgICAxIHNwb29sLworKzEgY3Jvbi8gICAgICAgICAxIGxvZy8gICAgICAgICAgMSBxdW90YXMvICAgICAgIDEgdG1wLworKyAgICAgICAgMDowMC4wMyByZWFsLCAgIDAuMDAgdXNlciwgICAgICAwLjAxIHN5cworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK0VkaXQgdGhlIGZpbGUgYDxUVD4uYmFzaHJjPC9UVD4nIGFuZCBoYXZlIDxDT0RFPnRpbWU8L0NPREU+IGFwcGVuZCB0aGUgZWxhcHNlZCB0aW1lCisrYW5kIG51bWJlciBvZiBzaWduYWxzIHRvIHRoZSBmaWxlIGA8VFQ+bG9nPC9UVD4nLCByZWFkaW5nIHRoZSBmb3JtYXQgc3RyaW5nCisrZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPENPREU+VElNRTwvQ09ERT46CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgZXhwb3J0IFRJTUU9JnF1b3Q7XHQlRSxcdCVrJnF1b3Q7ICMgSWYgdXNpbmcgYmFzaCBvciBrc2gKKytlZyQgc2V0ZW52IFRJTUUgJnF1b3Q7XHQlRSxcdCVrJnF1b3Q7ICMgSWYgdXNpbmcgY3NoIG9yIHRjc2gKKytlZyQgdGltZSAtYSAtbyBsb2cgZW1hY3MgLmJhc2hyYworK2VnJCBjYXQgbG9nCisrICAgICAgICAwOjE2LjU1LCAgICAgICAgNzI2CisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrUnVuIHRoZSBjb21tYW5kIGA8U0FNUD5zbGVlcCA0PC9TQU1QPicgYW5kIHNob3cgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBpdAorK3ZlcmJvc2VseToKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIC12IHNsZWVwIDQKKysgICAgICAgIENvbW1hbmQgYmVpbmcgdGltZWQ6ICZxdW90O3NsZWVwIDQmcXVvdDsKKysgICAgICAgIFVzZXIgdGltZSAoc2Vjb25kcyk6IDAuMDAKKysgICAgICAgIFN5c3RlbSB0aW1lIChzZWNvbmRzKTogMC4wNQorKyAgICAgICAgUGVyY2VudCBvZiBDUFUgdGhpcyBqb2IgZ290OiAxJQorKyAgICAgICAgRWxhcHNlZCAod2FsbCBjbG9jaykgdGltZSAoaDptbTpzcyBvciBtOnNzKTogMDowNC4yNgorKyAgICAgICAgQXZlcmFnZSBzaGFyZWQgdGV4dCBzaXplIChrYnl0ZXMpOiAzNgorKyAgICAgICAgQXZlcmFnZSB1bnNoYXJlZCBkYXRhIHNpemUgKGtieXRlcyk6IDI0CisrICAgICAgICBBdmVyYWdlIHN0YWNrIHNpemUgKGtieXRlcyk6IDAKKysgICAgICAgIEF2ZXJhZ2UgdG90YWwgc2l6ZSAoa2J5dGVzKTogNjAKKysgICAgICAgIE1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUgKGtieXRlcyk6IDMyCisrICAgICAgICBBdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMpOiAyNAorKyAgICAgICAgTWFqb3IgKHJlcXVpcmluZyBJL08pIHBhZ2UgZmF1bHRzOiAzCisrICAgICAgICBNaW5vciAocmVjbGFpbWluZyBhIGZyYW1lKSBwYWdlIGZhdWx0czogMAorKyAgICAgICAgVm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXM6IDExCisrICAgICAgICBJbnZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiAwCisrICAgICAgICBTd2FwczogMAorKyAgICAgICAgRmlsZSBzeXN0ZW0gaW5wdXRzOiAzCisrICAgICAgICBGaWxlIHN5c3RlbSBvdXRwdXRzOiAxCisrICAgICAgICBTb2NrZXQgbWVzc2FnZXMgc2VudDogMAorKyAgICAgICAgU29ja2V0IG1lc3NhZ2VzIHJlY2VpdmVkOiAwCisrICAgICAgICBTaWduYWxzIGRlbGl2ZXJlZDogMQorKyAgICAgICAgUGFnZSBzaXplIChieXRlcyk6IDQwOTYKKysgICAgICAgIEV4aXQgc3RhdHVzOiAwCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPEEgTkFNRT0iQWNjdXJhY3kiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDMTAiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzkiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzExIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjUgQWNjdXJhY3kgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzEwOjotLT4KKys8UD4KKysKKytUaGUgZWxhcHNlZCB0aW1lIGlzIG5vdCBjb2xsZWN0ZWQgYXRvbWljYWxseSB3aXRoIHRoZSBleGVjdXRpb24gb2YgdGhlCisrcHJvZ3JhbTsgYXMgYSByZXN1bHQsIGluIGJpemFycmUgY2lyY3Vtc3RhbmNlcyAoaWYgdGhlIDxDT0RFPnRpbWU8L0NPREU+CisrY29tbWFuZCBnZXRzIHN0b3BwZWQgb3Igc3dhcHBlZCBvdXQgaW4gYmV0d2VlbiB3aGVuIHRoZSBwcm9ncmFtIGJlaW5nCisrdGltZWQgZXhpdHMgYW5kIHdoZW4gPENPREU+dGltZTwvQ09ERT4gY2FsY3VsYXRlcyBob3cgbG9uZyBpdCB0b29rIHRvIHJ1biksIGl0CisrY291bGQgYmUgbXVjaCBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGV4ZWN1dGlvbiB0aW1lLgorKzwvUD4KKys8UD4KKysKKytXaGVuIHRoZSBydW5uaW5nIHRpbWUgb2YgYSBjb21tYW5kIGlzIHZlcnkgbmVhcmx5IHplcm8sIHNvbWUgdmFsdWVzCisrKGUuZy4sIHRoZSBwZXJjZW50YWdlIG9mIENQVSB1c2VkKSBtYXkgYmUgcmVwb3J0ZWQgYXMgZWl0aGVyIHplcm8gKHdoaWNoCisraXMgd3JvbmcpIG9yIGEgcXVlc3Rpb24gbWFyay4KKys8L1A+CisrPFA+CisrCisrTW9zdCBpbmZvcm1hdGlvbiBzaG93biBieSA8Q09ERT50aW1lPC9DT0RFPiBpcyBkZXJpdmVkIGZyb20gdGhlIDxDT0RFPndhaXQzPC9DT0RFPgorK3N5c3RlbSBjYWxsLiAgVGhlIG51bWJlcnMgYXJlIG9ubHkgYXMgZ29vZCBhcyB0aG9zZSByZXR1cm5lZCBieQorKzxDT0RFPndhaXQzPC9DT0RFPi4gIE1hbnkgc3lzdGVtcyBkbyBub3QgbWVhc3VyZSBhbGwgb2YgdGhlIHJlc291cmNlcyB0aGF0CisrPENPREU+dGltZTwvQ09ERT4gY2FuIHJlcG9ydCBvbjsgdGhvc2UgcmVzb3VyY2VzIGFyZSByZXBvcnRlZCBhcyB6ZXJvLiAgVGhlCisrc3lzdGVtcyB0aGF0IG1lYXN1cmUgbW9zdCBvciBhbGwgb2YgdGhlIHJlc291cmNlcyBhcmUgYmFzZWQgb24gNC4yIG9yCisrNC4zQlNELiAgTGF0ZXIgQlNEIHJlbGVhc2VzIHVzZSBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0CisrbWVhc3VyZXMgZmV3ZXIgcmVzb3VyY2VzLgorKzwvUD4KKys8UD4KKysKKytPbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYSA8Q09ERT53YWl0MzwvQ09ERT4gY2FsbCB0aGF0IHJldHVybnMgc3RhdHVzCisraW5mb3JtYXRpb24sIHRoZSA8Q09ERT50aW1lczwvQ09ERT4gc3lzdGVtIGNhbGwgaXMgdXNlZCBpbnN0ZWFkLiAgSXQgcHJvdmlkZXMKKyttdWNoIGxlc3MgaW5mb3JtYXRpb24gdGhhbiA8Q09ERT53YWl0MzwvQ09ERT4sIHNvIG9uIHRob3NlIHN5c3RlbXMgPENPREU+dGltZTwvQ09ERT4KKytyZXBvcnRzIG1vc3Qgb2YgdGhlIHJlc291cmNlcyBhcyB6ZXJvLgorKzwvUD4KKys8UD4KKysKKytUaGUgYDxTQU1QPiVJPC9TQU1QPicgYW5kIGA8U0FNUD4lTzwvU0FNUD4nIHZhbHVlcyBhcmUgYWxsZWdlZGx5IG9ubHkgJnF1b3Q7cmVhbCZxdW90OyBpbnB1dAorK2FuZCBvdXRwdXQgYW5kIGRvIG5vdCBpbmNsdWRlIHRob3NlIHN1cHBsaWVkIGJ5IGNhY2hpbmcgZGV2aWNlcy4gIFRoZQorK21lYW5pbmcgb2YgJnF1b3Q7cmVhbCZxdW90OyBJL08gcmVwb3J0ZWQgYnkgYDxTQU1QPiVJPC9TQU1QPicgYW5kIGA8U0FNUD4lTzwvU0FNUD4nIG1heSBiZQorK211ZGRsZWQgZm9yIHdvcmtzdGF0aW9ucywgZXNwZWNpYWxseSBkaXNrbGVzcyBvbmVzLgorKzwvUD4KKys8UD4KKysKKys8QSBOQU1FPSJJbnZva2luZyB0aW1lIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzExIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kIDwvSDI+CisrPCEtLWRvY2lkOjpTRUMxMTo6LS0+CisrPFA+CisrCisrVGhlIGZvcm1hdCBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBpczoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnRpbWUgW29wdGlvbjxzbWFsbD4uLi48L3NtYWxsPl0gPFZBUj5jb21tYW5kPC9WQVI+IFs8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPl0KKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8QSBOQU1FPSJJRFg1Ij48L0E+CisrPENPREU+dGltZTwvQ09ERT4gcnVucyB0aGUgcHJvZ3JhbSA8VkFSPmNvbW1hbmQ8L1ZBUj4sIHdpdGggYW55IGdpdmVuIGFyZ3VtZW50cworKzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+LiAgV2hlbiA8VkFSPmNvbW1hbmQ8L1ZBUj4gZmluaXNoZXMsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzCisraW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHVzZWQgYnkgPFZBUj5jb21tYW5kPC9WQVI+IChvbiB0aGUgc3RhbmRhcmQgZXJyb3IKKytvdXRwdXQsIGJ5IGRlZmF1bHQpLiAgSWYgPFZBUj5jb21tYW5kPC9WQVI+IGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzIG9yIGlzCisrdGVybWluYXRlZCBieSBhIHNpZ25hbCwgPENPREU+dGltZTwvQ09ERT4gZGlzcGxheXMgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIHRoZQorK2V4aXQgc3RhdHVzIG9yIHNpZ25hbCBudW1iZXIuCisrPC9QPgorKzxQPgorKworK09wdGlvbnMgdG8gPENPREU+dGltZTwvQ09ERT4gbXVzdCBhcHBlYXIgb24gdGhlIGNvbW1hbmQgbGluZSBiZWZvcmUKKys8VkFSPmNvbW1hbmQ8L1ZBUj4uICBBbnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIDxWQVI+Y29tbWFuZDwvVkFSPiBpcworK3Bhc3NlZCBhcyBhcmd1bWVudHMgdG8gPFZBUj5jb21tYW5kPC9WQVI+LgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1vIDxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tb3V0cHV0PTxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+V3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIDxWQVI+ZmlsZTwvVkFSPi4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1hPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1hcHBlbmQ8L0NPREU+CisrPEREPjxFTT5BcHBlbmQ8L0VNPiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrb2Ygb3ZlcndyaXRpbmcgaXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tZiA8VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tZm9ybWF0PTxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD5Vc2UgPFZBUj5mb3JtYXQ8L1ZBUj4gYXMgdGhlIGZvcm1hdCBzdHJpbmcuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tLWhlbHA8L0NPREU+CisrPEREPlByaW50IGEgc3VtbWFyeSBvZiB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gPENPREU+dGltZTwvQ09ERT4gYW5kIGV4aXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcDwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcG9ydGFiaWxpdHk8L0NPREU+CisrPEREPlVzZSB0aGUgUE9TSVggZm9ybWF0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXY8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXZlcmJvc2U8L0NPREU+CisrPEREPjxBIE5BTUU9IklEWDYiPjwvQT4KKytVc2UgdGhlIGJ1aWx0LWluIHZlcmJvc2UgZm9ybWF0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LVY8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXZlcnNpb248L0NPREU+CisrPEREPjxBIE5BTUU9IklEWDciPjwvQT4KKytQcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgPENPREU+dGltZTwvQ09ERT4gYW5kIGV4aXQuCisrPC9ETD4KKys8UD4KKysKKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDX0NvbnRlbnRzIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5UYWJsZSBvZiBDb250ZW50czwvSDE+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMSIgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT4KKys8QlI+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMiIgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MzIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPgorKzxCUj4KKys8QkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0M0IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+MS4yLjEgVGltZSBSZXNvdXJjZXM8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzUiIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4xLjIuMiBNZW1vcnkgUmVzb3VyY2VzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M2IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+MS4yLjMgSS9PIFJlc291cmNlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DNyIgSFJFRj0idGltZS5odG1sI1NFQzciPjEuMi40IENvbW1hbmQgSW5mbzwvQT4KKys8QlI+CisrPC9CTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzgiIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M5IiBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MxMCIgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzExIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPgorKzxCUj4KKys8L0JMT0NLUVVPVEU+CisrPC9CTE9DS1FVT1RFPgorKzxIUiBTSVpFPTE+CisrPEEgTkFNRT0iU0VDX09WRVJWSUVXIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5TaG9ydCBUYWJsZSBvZiBDb250ZW50czwvSDE+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMSIgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT4KKys8QlI+CisrCisrPC9CTE9DS1FVT1RFPgorKzxIUiBTSVpFPTE+CisrPEEgTkFNRT0iU0VDX0Fib3V0Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5BYm91dCB0aGlzIGRvY3VtZW50PC9IMT4KKytUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQKKytieSAKKyt1c2luZyA8QSBIUkVGPSJodHRwOi8vdGV4aTJodG1sLmN2c2hvbWUub3JnIj48ST50ZXhpMmh0bWw8L0k+PC9BPgorKzxQPjwvUD4KKytUaGUgYnV0dG9ucyBpbiB0aGUgbmF2aWdhdGlvbiBwYW5lbHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisrPFA+PC9QPgorKzx0YWJsZSBib3JkZXIgPSAiMSI+CisrPFRSPgorKzxUSD4gQnV0dG9uIDwvVEg+CisrPFRIPiBOYW1lIDwvVEg+CisrPFRIPiBHbyB0byA8L1RIPgorKzxUSD4gRnJvbSAxLjIuMyBnbyB0bzwvVEg+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbICZsdDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytCYWNrCisrPC9URD4KKys8VEQ+CisrcHJldmlvdXMgc2VjdGlvbiBpbiByZWFkaW5nIG9yZGVyCisrPC9URD4KKys8VEQ+CisrMS4yLjIKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmZ3Q7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrRm9yd2FyZAorKzwvVEQ+CisrPFREPgorK25leHQgc2VjdGlvbiBpbiByZWFkaW5nIG9yZGVyCisrPC9URD4KKys8VEQ+CisrMS4yLjQKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmbHQ7Jmx0OyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0Zhc3RCYWNrCisrPC9URD4KKys8VEQ+CisrYmVnaW5uaW5nIG9mIHRoaXMgY2hhcHRlciBvciBwcmV2aW91cyBjaGFwdGVyCisrPC9URD4KKys8VEQ+CisrMQorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbIFVwIF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrVXAKKys8L1REPgorKzxURD4KKyt1cCBzZWN0aW9uCisrPC9URD4KKys8VEQ+CisrMS4yCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmd0OyZndDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytGYXN0Rm9yd2FyZAorKzwvVEQ+CisrPFREPgorK25leHQgY2hhcHRlcgorKzwvVEQ+CisrPFREPgorKzIKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgW1RvcF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrVG9wCisrPC9URD4KKys8VEQ+CisrY292ZXIgKHRvcCkgb2YgZG9jdW1lbnQKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbQ29udGVudHNdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0NvbnRlbnRzCisrPC9URD4KKys8VEQ+CisrdGFibGUgb2YgY29udGVudHMKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbSW5kZXhdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0luZGV4CisrPC9URD4KKys8VEQ+CisrY29uY2VwdCBpbmRleAorKzwvVEQ+CisrPFREPgorKyAmbmJzcDsgCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgPyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0Fib3V0CisrPC9URD4KKys8VEQ+CisrdGhpcyBwYWdlCisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPC9UQUJMRT4KKysgICAgPFA+CisrICAgICAgd2hlcmUgdGhlIDxTVFJPTkc+IEV4YW1wbGUgPC9TVFJPTkc+IGFzc3VtZXMgdGhhdCB0aGUgY3VycmVudCBwb3NpdGlvbgorKyAgICAgIGlzIGF0IDxTVFJPTkc+IFN1YnN1YnNlY3Rpb24gT25lLVR3by1UaHJlZSA8L1NUUk9ORz4gb2YgYSBkb2N1bWVudCBvZgorKyAgICAgIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOjwvUD4KKysgICAgPFVMPgorKyAgICAgIDxMST4gMS4gU2VjdGlvbiBPbmUKKysgICAgICAgIDxVTD4KKysgICAgICAgICAgPExJPjEuMSBTdWJzZWN0aW9uIE9uZS1PbmUKKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+Li4uPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8TEk+MS4yIFN1YnNlY3Rpb24gT25lLVR3bworKyAgICAgICAgICAgIDxVTD4KKysgICAgICAgICAgICAgIDxMST4xLjIuMSBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tT25lPC9MST4KKysgICAgICAgICAgICAgIDxMST4xLjIuMiBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVHdvPC9MST4KKysgICAgICAgICAgICAgIDxMST4xLjIuMyBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVGhyZWUgJm5ic3A7ICZuYnNwOworKyAgICAgICAgICAgICAgICA8U1RST05HPiZsdDs9PSBDdXJyZW50IFBvc2l0aW9uIDwvU1RST05HPjwvTEk+CisrICAgICAgICAgICAgICA8TEk+MS4yLjQgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLUZvdXI8L0xJPgorKyAgICAgICAgICAgIDwvVUw+CisrICAgICAgICAgIDwvTEk+CisrICAgICAgICAgIDxMST4xLjMgU3Vic2VjdGlvbiBPbmUtVGhyZWUKKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+Li4uPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8L0xJPgorKyAgICAgICAgICA8TEk+MS40IFN1YnNlY3Rpb24gT25lLUZvdXI8L0xJPgorKyAgICAgICAgPC9VTD4KKysgICAgICA8L0xJPgorKyAgICA8L1VMPgorKworKzxIUiBTSVpFPTE+CisrPEJSPgorKzxGT05UIFNJWkU9Ii0xIj4KKytUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQKKytieSA8ST5yb290PC9JPiBvbiA8ST5TZXB0ZW1iZXIsIDEgMjAwMzwvST4KKyt1c2luZyA8QSBIUkVGPSJodHRwOi8vdGV4aTJodG1sLmN2c2hvbWUub3JnIj48ST50ZXhpMmh0bWw8L0k+PC9BPgorKzwvRk9OVD4KKysKKys8L0JPRFk+CisrPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg2MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJUb29sIHRoYXQgbWVhc3VyZXMgQ1BVIHJlc291cmNlcyIKK0RFU0NSSVBUSU9OID0gInRpbWUgbWVhc3VyZXMgbWFueSBvZiB0aGUgQ1BVIHJlc291cmNlcywgc3VjaCBhcyB0aW1lIGFuZCBcCittZW1vcnksIHRoYXQgb3RoZXIgcHJvZ3JhbXMgdXNlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90aW1lLyIKK1NFQ1RJT04gPSAidXRpbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitpbmhlcml0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ0aW1lIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lXzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmM1MzUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSB0aW1lLmluYworCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RpbWUvdGltZS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9kZWJpYW4ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMzhkMmI4YjM0YjFjYTI1OWNmN2IwNTNjYWFjMzJiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMzdlYTc5YTI1M2JmODVhODVhZGEyZjdjNjMyYzE0ZTQ4MWE1ZmQyNjJhMzYyZjZmNGZkNThlNjg2MDE0OTZkIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODY1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIKQEAgLTAsMCArMSwyNSBAQAorIyBub3RlIHRoYXQgd2UgYWxsb3cgZm9yIHVzIHRvIHVzZSBkYXRhIGxhdGVyIHRoYW4gb3VyIGNvZGUgdmVyc2lvbgorIworREVTQ1JJUFRJT04gPSAidHpjb2RlLCB0aW1lem9uZSB6b25laW5mbyB1dGlscyAtLSB6aWMsIHpkdW1wLCB0enNlbGVjdCIKK0xJQ0VOU0UgPSAiUEQgJiBCU0QiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vUkVBRE1FO21kNT1kMGZmOTNhNzNkZDViYzNjNmU3MjRiYjQzNDM3NjBmNiIKKworU1JDX1VSSSA9IiBmdHA6Ly9mdHAuaWFuYS5vcmcvdHovcmVsZWFzZXMvdHpjb2RlJHtQVn0udGFyLmd6O25hbWU9dHpjb2RlIFwKKyAgICAgICAgICAgZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6ZGF0YTIwMTVmLnRhci5nejtuYW1lPXR6ZGF0YSIKKworU1JDX1VSSVt0emNvZGUubWQ1c3VtXSA9ICIxOTU3OGQ0MzJiYThiOTJmNzM0MDZhMTdhOWJjMjY4ZCIKK1NSQ19VUklbdHpjb2RlLnNoYTI1NnN1bV0gPSAiMGM5NWUwYTQyYmI2MTE0MWY3OTBmNGY1ZjIwNGI5NTRkNzY1NGM4OTRhYTU0YTU5NGEyMTVkNmYzOGRlODRhZSIKK1NSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiZTNiODI3MzJkMjBlOTczZTQ4YWYxYzZmMTNkZjlhMWQiCitTUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjk1OWY4MWI1NDFlMDQyZWNiMTNjNTAwOTdkMjY0YWU5MmZmMDNhNTc5NzljNDc4ZGJjZjI0ZDVkYTI0MjUzMWQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgemljICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHpkdW1wICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHR6c2VsZWN0ICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTVmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZGE0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYgpAQCAtMCwwICsxLDIwNyBAQAorREVTQ1JJUFRJT04gPSAiVGltZXpvbmUgZGF0YSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiUEQgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hc2lhO2JlZ2lubGluZT0yO2VuZGxpbmU9MzttZDU9OTk2YTk4MTE3NDdhYTQ4ZGI5MWVkMjM5ZTViMzU1YTEiCitERVBFTkRTID0gInR6Y29kZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKKworU1JDX1VSSVt0emRhdGEubWQ1c3VtXSA9ICJlM2I4MjczMmQyMGU5NzNlNDhhZjFjNmYxM2RmOWExZCIKK1NSQ19VUklbdHpkYXRhLnNoYTI1NnN1bV0gPSAiOTU5ZjgxYjU0MWUwNDJlY2IxM2M1MDA5N2QyNjRhZTkyZmYwM2E1Nzk3OWM0NzhkYmNmMjRkNWRhMjQyNTMxZCIKKworaW5oZXJpdCBhbGxhcmNoCisKK1JDT05GTElDVFNfJHtQTn0gPSAidGltZXpvbmVzIHRpbWV6b25lLWFmcmljYSB0aW1lem9uZS1hbWVyaWNhIHRpbWV6b25lLWFudGFyY3RpY2EgXAorICAgICAgICAgICAgIHRpbWV6b25lLWFyY3RpYyB0aW1lem9uZS1hc2lhIHRpbWV6b25lLWF0bGFudGljIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1hdXN0cmFsaWEgdGltZXpvbmUtZXVyb3BlIHRpbWV6b25lLWluZGlhbiBcCisgICAgICAgICAgICAgdGltZXpvbmUtaXNvMzE2Ni50YWIgdGltZXpvbmUtcGFjaWZpYyB0aW1lem9uZS16b25lLnRhYiIKKworUyA9ICIke1dPUktESVJ9IgorCitERUZBVUxUX1RJTUVaT05FID89ICJVbml2ZXJzYWwiCisKK1RaT05FUz0gImFmcmljYSBhbnRhcmN0aWNhIGFzaWEgYXVzdHJhbGFzaWEgZXVyb3BlIG5vcnRoYW1lcmljYSBzb3V0aGFtZXJpY2EgIFwKKyAgICAgICAgIGZhY3RvcnkgZXRjZXRlcmEgYmFja3dhcmQgc3lzdGVtdiBcCisgICAgICAgICIKKyMgcGFjaWZpY25ldyAKKworZG9fY29tcGlsZSAoKSB7CisgICAgICAgIGZvciB6b25lIGluICR7VFpPTkVTfTsgZG8gXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mbyAtTCAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4IC1MIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQgLUwgJHtTfS9sZWFwc2Vjb25kcyBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyRleGVjX3ByZWZpeCAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFBSICR7U30vJGV4ZWNfcHJlZml4ICR7RH0vCisgICAgICAgICMgbGliYyBpcyByZW1vdmluZyB6b25laW5mbyBmaWxlcyBmcm9tIHBhY2thZ2UKKyAgICAgICAgY3AgLXBQICIke1N9L3pvbmUudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFAgIiR7U30vaXNvMzE2Ni50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisKKyAgICAgICAgIyBJbnN0YWxsIGRlZmF1bHQgdGltZXpvbmUKKyAgICAgICAgaWYgWyAtZSAke0R9JHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9IF07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgICAgIGVjaG8gJHtERUZBVUxUX1RJTUVaT05FfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RpbWV6b25lCisgICAgICAgICAgICBsbiAtcyAke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gJHtEfSR7c3lzY29uZmRpcn0vbG9jYWx0aW1lCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJiZXJyb3IgIkRFRkFVTFRfVElNRVpPTkUgaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUuIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlldGNfbHQ9IiREJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCisJc3JjPSIkRCR7c3lzY29uZmRpcn0vdGltZXpvbmUiCisKKwlpZiBbIC1lICR7c3JjfSBdIDsgdGhlbgorCQl0ej0kKHNlZCAtZSAnczojLio6OicgLWUgJ3M6W1s6c3BhY2U6XV0qOjpnJyAtZSAnL14kL2QnICIke3NyY30iKQorCWZpCisJCisJaWYgWyAteiAiJHt0en0iIF0gOyB0aGVuCisJCWV4aXQgMAorCWZpCisJCisJaWYgWyAhIC1lICIkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iIF0gOyB0aGVuCisJCWVjaG8gIllvdSBoYXZlIGFuIGludmFsaWQgVElNRVpPTkUgc2V0dGluZyBpbiAke3NyY30iCisJCWVjaG8gIllvdXIgJHtldGNfbHR9IGhhcyBiZWVuIHJlc2V0IHRvIFVuaXZlcnNhbDsgZW5qb3khIgorCQl0ej0iVW5pdmVyc2FsIgorCQllY2hvICJVcGRhdGluZyAke2V0Y19sdH0gd2l0aCAkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iCisJCWlmIFsgLUwgJHtldGNfbHR9IF0gOyB0aGVuCisJCQlybSAtZiAiJHtldGNfbHR9IgorCQlmaQorCQlsbiAtcyAiJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgIiR7ZXRjX2x0fSIKKwlmaQorfQorCisjIFBhY2thZ2VzIHByaW1hcmlseSBvcmdhbml6ZWQgYnkgZGlyZWN0b3J5IHdpdGggYSBtYWpvciBjaXR5CisjIGluIG1vc3QgdGltZSB6b25lcyBpbiB0aGUgYmFzZSBwYWNrYWdlCisKK1BBQ0tBR0VTID0gInR6ZGF0YSB0emRhdGEtbWlzYyB0emRhdGEtcG9zaXggdHpkYXRhLXJpZ2h0IHR6ZGF0YS1hZnJpY2EgXAorICAgIHR6ZGF0YS1hbWVyaWNhcyB0emRhdGEtYW50YXJjdGljYSB0emRhdGEtYXJjdGljIHR6ZGF0YS1hc2lhIFwKKyAgICB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSB0emRhdGEtZXVyb3BlIHR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtYWZyaWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hZnJpY2EgPSAidHpkYXRhLWFmcmljYSIKKworRklMRVNfdHpkYXRhLWFtZXJpY2FzICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvKiAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVMvKiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9CcmF6aWwvKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NhbmFkYS8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWV4aWNvLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DaGlsZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hbWVyaWNhcyA9ICJ0emRhdGEtYW1lcmljYXMiCisKK0ZJTEVTX3R6ZGF0YS1hbnRhcmN0aWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FudGFyY3RpY2EvKiIKK1JQUk9WSURFU190emRhdGEtYW50YXJjdGljYSA9ICJ0emRhdGEtYW50YXJjdGljYSIKKworRklMRVNfdHpkYXRhLWFyY3RpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BcmN0aWMvKiIKK1JQUk9WSURFU190emRhdGEtYXJjdGljID0gInR6ZGF0YS1hcmN0aWMiCisKK0ZJTEVTX3R6ZGF0YS1hc2lhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvKiAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSW5kaWFuLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NaWRlYXN0LyoiCitSUFJPVklERVNfdHpkYXRhLWFzaWEgPSAidHpkYXRhLWFzaWEiCisKK0ZJTEVTX3R6ZGF0YS1hdGxhbnRpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdGxhbnRpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1hdGxhbnRpYyA9ICJ0emRhdGEtYXRsYW50aWMiCisKK0ZJTEVTX3R6ZGF0YS1hdXN0cmFsaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhLyoiCitSUFJPVklERVNfdHpkYXRhLWF1c3RyYWxpYSA9ICJ0emRhdGEtYXVzdHJhbGlhIgorCitGSUxFU190emRhdGEtZXVyb3BlICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1ldXJvcGUgPSAidHpkYXRhLWV1cm9wZSIKKworRklMRVNfdHpkYXRhLXBhY2lmaWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1wYWNpZmljID0gInR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtcG9zaXggKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXgvKiIKK1JQUk9WSURFU190emRhdGEtcG9zaXggPSAidHpkYXRhLXBvc2l4IgorCitGSUxFU190emRhdGEtcmlnaHQgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQvKiIKK1JQUk9WSURFU190emRhdGEtcmlnaHQgPSAidHpkYXRhLXJpZ2h0IgorCisKK0ZJTEVTX3R6ZGF0YS1taXNjICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0N1YmEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VneXB0ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VpcmUgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ZhY3RvcnkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCLUVpcmUgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hvbmdrb25nICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ljZWxhbmQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lyYW4gICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lzcmFlbCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phbWFpY2EgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phcGFuICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0t3YWphbGVpbiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0xpYnlhICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05hdmFqbyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvbGFuZCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvcnR1Z2FsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1NpbmdhcG9yZSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1R1cmtleSIKK1JQUk9WSURFU190emRhdGEtbWlzYyA9ICJ0emRhdGEtbWlzYyIKKworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0FuY2hvcmFnZSAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0RlbnZlciAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NoaWNhZ28gICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NhcmFjYXMgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTG9uZG9uICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvUGFyaXMgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvQ2Fpcm8gICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTW9zY293ICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0R1YmFpICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0thcmFjaGkgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0RoYWthICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0JhbmtvayAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0hvbmdfS29uZyAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL1Rva3lvICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvRGFyd2luICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQWRlbGFpZGUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQnJpc2JhbmUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL05vdW1lYSAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DU1Q2Q0RUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1Q1RURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQrMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQtMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQwICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HcmVlbndpY2ggICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9IU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1Q3TURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWi1DSEFUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QUkMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QU1Q4UERUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0MgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0sgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VQ1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VVEMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Vbml2ZXJzYWwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XLVNVICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9adWx1ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby96b25lLnRhYiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9pc28zMTY2LnRhYiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdGMvKiIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3RpbWV6b25lICR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhM2MxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2gKQEAgLTAsMCArMSw0MDIgQEAKK0Zyb206IEdpb3Zhbm5pIFNjYWZvcmEgPGdpb3Zhbm5pLmFyY2hsaW51eC5vcmc+CitTdWJqZWN0OiB1bnppcCBmaWxlcyBlbmNvZGVkIHdpdGggbm9uLWxhdGluLCBub24tdW5pY29kZSBmaWxlIG5hbWVzCitMYXN0LVVwZGF0ZTogMjAxNS0wMi0xMQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1VwZGF0ZWQgMjAxNS0wMi0xMSBieSBNYXJjIERlc2xhdXJpZXJzIDxtYXJjLmRlc2xhdXJpZXJzQGNhbm9uaWNhbC5jb20+Cit0byBmaXggYnVmZmVyIG92ZXJmbG93IGluIGNoYXJzZXRfdG9faW50ZXJuKCkKKworU2lnbmVkLW9mZi1ieTogTWFyYyBEZXNsYXVyaWVycyA8bWFyYy5kZXNsYXVyaWVyc0BjYW5vbmljYWwuY29tPgorCitJbmRleDogdW56aXAtNi4wL3VuaXgvdW5peC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW5peC91bml4LmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW5peC91bml4LmMJMjAxNS0wMi0xMSAwOToxODowNC45MDIwODEzMTkgLTA1MDAKK0BAIC0zMCw2ICszMCw5IEBACisgI2RlZmluZSBVTlpJUF9JTlRFUk5BTAorICNpbmNsdWRlICJ1bnppcC5oIgorIAorKyNpbmNsdWRlIDxpY29udi5oPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKworICNpZmRlZiBTQ09fWEVOSVgKKyAjICBkZWZpbmUgU1lTTkRJUgorICNlbHNlICAvKiBTQ08gVW5peCwgQUlYLCBETklYLCBUSSBTeXNWLCBDb2hlcmVudCA0LngsIC4uLiAqLworQEAgLTE4NzQsMyArMTg3NywxMDIgQEAKKyAgICAgfQorIH0KKyAjZW5kaWYgLyogUUxaSVAgKi8KKysKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGNoYXIgKmxvY2FsX2NoYXJzZXQ7CisrICAgIGNoYXIgKmFyY2hpdmVfY2hhcnNldDsKKyt9IENIQVJTRVRfTUFQOworKworKy8qIEEgbWFwcGluZyBvZiBsb2NhbCA8LT4gYXJjaGl2ZSBjaGFyc2V0cyB1c2VkIGJ5IGRlZmF1bHQgdG8gY29udmVydCBmaWxlbmFtZXMKKysgKiBvZiBET1MvV2luZG93cyBaaXAgYXJjaGl2ZXMuIEN1cnJlbnRseSB2ZXJ5IGJhc2ljLiAqLworK3N0YXRpYyBDSEFSU0VUX01BUCBkb3NfY2hhcnNldF9tYXBbXSA9IHsKKysgICAgeyAiQU5TSV9YMy40LTE5NjgiLCAiQ1A4NTAiIH0sCisrICAgIHsgIklTTy04ODU5LTEiLCAiQ1A4NTAiIH0sCisrICAgIHsgIkNQMTI1MiIsICJDUDg1MCIgfSwKKysgICAgeyAiVVRGLTgiLCAiQ1A4NjYiIH0sCisrICAgIHsgIktPSTgtUiIsICJDUDg2NiIgfSwKKysgICAgeyAiS09JOC1VIiwgIkNQODY2IiB9LAorKyAgICB7ICJJU08tODg1OS01IiwgIkNQODY2IiB9CisrfTsKKysKKytjaGFyIE9FTV9DUFtNQVhfQ1BfTkFNRV0gPSAiIjsKKytjaGFyIElTT19DUFtNQVhfQ1BfTkFNRV0gPSAiIjsKKysKKysvKiBUcnkgdG8gZ3Vlc3MgdGhlIGRlZmF1bHQgdmFsdWUgb2YgT0VNX0NQIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4KKysgKiBJU09fQ1AgaXMgbGVmdCBhbG9uZSBmb3Igbm93LiAqLworK3ZvaWQgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKCkKKyt7CisrICAgIGNvbnN0IGNoYXIgKmxvY2FsX2NoYXJzZXQ7CisrICAgIGludCBpOworKworKyAgICAvKiBNYWtlIGEgZ3Vlc3Mgb25seSBpZiBPRU1fQ1Agbm90IGFscmVhZHkgc2V0LiAqLyAKKysgICAgaWYoKk9FTV9DUCA9PSAnXDAnKSB7CisrICAgIAlsb2NhbF9jaGFyc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisrICAgIAlmb3IoaSA9IDA7IGkgPCBzaXplb2YoZG9zX2NoYXJzZXRfbWFwKS9zaXplb2YoQ0hBUlNFVF9NQVApOyBpKyspCisrICAgIAkJaWYoIXN0cmNhc2VjbXAobG9jYWxfY2hhcnNldCwgZG9zX2NoYXJzZXRfbWFwW2ldLmxvY2FsX2NoYXJzZXQpKSB7CisrICAgIAkJCXN0cm5jcHkoT0VNX0NQLCBkb3NfY2hhcnNldF9tYXBbaV0uYXJjaGl2ZV9jaGFyc2V0LAorKyAgICAJCQkJCXNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJYnJlYWs7CisrICAgIAkJfQorKyAgICB9CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBvbmUgZW5jb2RpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIHVzaW5nIGljb252KCkuCisrICogQmUgYXMgbm9uLWludHJ1c2l2ZSBhcyBwb3NzaWJsZS4gSWYgZXJyb3IgaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvdmVydGlvbgorKyAqIGp1c3QgbGVhdmUgdGhlIHN0cmluZyBpbnRhY3QuICovCisrc3RhdGljIHZvaWQgY2hhcnNldF90b19pbnRlcm4oY2hhciAqc3RyaW5nLCBjaGFyICpmcm9tX2NoYXJzZXQpCisreworKyAgICBpY29udl90IGNkOworKyAgICBjaGFyICpzLCpkLCAqYnVmOworKyAgICBzaXplX3Qgc2xlbiwgZGxlbiwgYnVmbGVuOworKyAgICBjb25zdCBjaGFyICpsb2NhbF9jaGFyc2V0OworKworKyAgICBpZigqZnJvbV9jaGFyc2V0ID09ICdcMCcpCisrICAgIAlyZXR1cm47CisrCisrICAgIGJ1ZiA9IE5VTEw7CisrICAgIGxvY2FsX2NoYXJzZXQgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKKysKKysgICAgaWYoKGNkID0gaWNvbnZfb3Blbihsb2NhbF9jaGFyc2V0LCBmcm9tX2NoYXJzZXQpKSA9PSAoaWNvbnZfdCktMSkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgc2xlbiA9IHN0cmxlbihzdHJpbmcpOworKyAgICBzID0gc3RyaW5nOworKworKyAgICAvKiAgTWFrZSBzdXJlIE9VVEJVRlNJWiArIDEgbmV2ZXIgZW5kcyB1cCBzbWFsbGVyIHRoYW4gRklMTkFNU0laCisrICAgICAqICBhcyB0aGlzIGZ1bmN0aW9uIGFsc28gZ2V0cyBjYWxsZWQgd2l0aCBHLm91dGJ1ZiBpbiBmaWxlaW8uYworKyAgICAgKi8KKysgICAgYnVmbGVuID0gRklMTkFNU0laOworKyAgICBpZiAoT1VUQlVGU0laICsgMSA8IEZJTE5BTVNJWikKKysgICAgeworKyAgICAgICAgYnVmbGVuID0gT1VUQlVGU0laICsgMTsKKysgICAgfQorKworKyAgICBkID0gYnVmID0gbWFsbG9jKGJ1Zmxlbik7CisrICAgIGlmKCFkKQorKyAgICAJZ290byBjbGVhbnVwOworKworKyAgICBiemVybyhidWYsYnVmbGVuKTsKKysgICAgZGxlbiA9IGJ1ZmxlbiAtIDE7CisrCisrICAgIGlmKGljb252KGNkLCAmcywgJnNsZW4sICZkLCAmZGxlbikgPT0gKHNpemVfdCktMSkKKysgICAgCWdvdG8gY2xlYW51cDsKKysgICAgc3RybmNweShzdHJpbmcsIGJ1ZiwgYnVmbGVuKTsKKysKKysgICAgY2xlYW51cDoKKysgICAgZnJlZShidWYpOworKyAgICBpY29udl9jbG9zZShjZCk7CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBPRU1fQ1AgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGNoYXJzZXQuICovCisraW5saW5lIHZvaWQgb2VtX2ludGVybihjaGFyICpzdHJpbmcpCisreworKyAgICBjaGFyc2V0X3RvX2ludGVybihzdHJpbmcsIE9FTV9DUCk7CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBJU09fQ1AgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGNoYXJzZXQuICovCisraW5saW5lIHZvaWQgaXNvX2ludGVybihjaGFyICpzdHJpbmcpCisreworKyAgICBjaGFyc2V0X3RvX2ludGVybihzdHJpbmcsIElTT19DUCk7CisrfQorSW5kZXg6IHVuemlwLTYuMC91bml4L3VueGNmZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW5peC91bnhjZmcuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bml4L3VueGNmZy5oCTIwMTUtMDItMTEgMDg6NDY6NDMuNjcxMzI0MjYwIC0wNTAwCitAQCAtMjI4LDQgKzIyOCwzMCBAQAorIC8qIHdpbGRfZGlyLCBkaXJuYW1lLCB3aWxkbmFtZSwgbWF0Y2huYW1lW10sIGRpcm5hbWVsZW4sIGhhdmVfZGlybmFtZSwgKi8KKyAvKiAgICBhbmQgbm90Zmlyc3RjYWxsIGFyZSB1c2VkIGJ5IGRvX3dpbGQoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgCisrCisrI2RlZmluZSBNQVhfQ1BfTkFNRSAyNSAKKysgICAKKysjaWZkZWYgU0VUTE9DQUxFCisrIyAgdW5kZWYgU0VUTE9DQUxFCisrI2VuZGlmCisrI2RlZmluZSBTRVRMT0NBTEUoY2F0ZWdvcnksIGxvY2FsZSkgc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2NhbGUpCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKyAgIAorKyNpZmRlZiBfSVNPX0lOVEVSTgorKyMgIHVuZGVmIF9JU09fSU5URVJOCisrI2VuZGlmCisrI2RlZmluZSBfSVNPX0lOVEVSTihzdHIxKSBpc29faW50ZXJuKHN0cjEpCisrCisrI2lmZGVmIF9PRU1fSU5URVJOCisrIyAgdW5kZWYgX09FTV9JTlRFUk4KKysjZW5kaWYKKysjaWZuZGVmIElaX09FTTJJU09fQVJSQVkKKysjICBkZWZpbmUgSVpfT0VNMklTT19BUlJBWQorKyNlbmRpZgorKyNkZWZpbmUgX09FTV9JTlRFUk4oc3RyMSkgb2VtX2ludGVybihzdHIxKQorKworK3ZvaWQgaXNvX2ludGVybihjaGFyICopOworK3ZvaWQgb2VtX2ludGVybihjaGFyICopOworK3ZvaWQgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKHZvaWQpOworKyAgIAorICNlbmRpZiAvKiAhX191bnhjZmdfaCAqLworSW5kZXg6IHVuemlwLTYuMC91bnppcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW56aXAuYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bnppcC5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCitAQCAtMzI3LDExICszMjcsMjEgQEAKKyAgIC0yICBqdXN0IGZpbGVuYW1lcyBidXQgYWxsb3cgLWgvLXQvLXogIC1sICBsb25nIFVuaXggXCJscyAtbFwiIGZvcm1hdFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXYgIHZlcmJvc2UsIG11bHRpLXBhZ2UgZm9ybWF0XG4iOworIAorKyNpZm5kZWYgVU5JWAorIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTNbXSA9ICJtaXNjZWxsYW5lb3VzIG9wdGlvbnM6XG5cCisgICAtaCAgcHJpbnQgaGVhZGVyIGxpbmUgICAgICAgLXQgIHByaW50IHRvdGFscyBmb3IgbGlzdGVkIGZpbGVzIG9yIGZvciBhbGxcblwKKyAgIC16ICBwcmludCB6aXBmaWxlIGNvbW1lbnQgICAtVCAgcHJpbnQgZmlsZSB0aW1lcyBpbiBzb3J0YWJsZSBkZWNpbWFsIGZvcm1hdFwKKyBcbiAgLUMgIGJlIGNhc2UtaW5zZW5zaXRpdmUgICAlc1wKKyAgIC14ICBleGNsdWRlIGZpbGVuYW1lcyB0aGF0IGZvbGxvdyBmcm9tIGxpc3RpbmdcbiI7CisrI2Vsc2UgLyogVU5JWCAqLworK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTNbXSA9ICJtaXNjZWxsYW5lb3VzIG9wdGlvbnM6XG5cCisrICAtaCAgcHJpbnQgaGVhZGVyIGxpbmUgICAgICAgLXQgIHByaW50IHRvdGFscyBmb3IgbGlzdGVkIGZpbGVzIG9yIGZvciBhbGxcblwKKysgIC16ICBwcmludCB6aXBmaWxlIGNvbW1lbnQgICVjLVQlYyBwcmludCBmaWxlIHRpbWVzIGluIHNvcnRhYmxlIGRlY2ltYWwgZm9ybWF0XAorK1xuICVjLUMlYyBiZSBjYXNlLWluc2Vuc2l0aXZlICAgJXNcCisrICAteCAgZXhjbHVkZSBmaWxlbmFtZXMgdGhhdCBmb2xsb3cgZnJvbSBsaXN0aW5nXG5cCisrICAtTyBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBET1MsIFdpbmRvd3MgYW5kIE9TLzIgYXJjaGl2ZXNcblwKKysgIC1JIENIQVJTRVQgIHNwZWNpZnkgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIFVOSVggYW5kIG90aGVyIGFyY2hpdmVzXG4iOworKyNlbmRpZiAvKiAhVU5JWCAqLworICNpZmRlZiBNT1JFCisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBaaXBJbmZvVXNhZ2VMaW5lNFtdID0KKyAgICAgICIgIC1NICBwYWdlIG91dHB1dCB0aHJvdWdoIGJ1aWx0LWluIFwibW9yZVwiXG4iOworQEAgLTY2NCw2ICs2NzQsMTcgQEAKKyAgIC1VICB1c2UgZXNjYXBlcyBmb3IgYWxsIG5vbi1BU0NJSSBVbmljb2RlICAtVVUgaWdub3JlIGFueSBVbmljb2RlIGZpZWxkc1xuXAorICAgLUMgIG1hdGNoIGZpbGVuYW1lcyBjYXNlLWluc2Vuc2l0aXZlbHkgICAgIC1MICBtYWtlIChzb21lKSBuYW1lcyBcCisgbG93ZXJjYXNlXG4gJS00MnMgIC1WICByZXRhaW4gVk1TIHZlcnNpb24gbnVtYmVyc1xuJXMiOworKyNlbGlmIChkZWZpbmVkIFVOSVgpCisrc3RhdGljIFpDT05TVCBjaGFyIEZhciBVbnppcFVzYWdlTGluZTRbXSA9ICJcCisrbW9kaWZpZXJzOlxuXAorKyAgLW4gIG5ldmVyIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcyAgICAgICAgIC1xICBxdWlldCBtb2RlICgtcXEgPT4gcXVpZXRlcilcblwKKysgIC1vICBvdmVyd3JpdGUgZmlsZXMgV0lUSE9VVCBwcm9tcHRpbmcgICAgICAtYSAgYXV0by1jb252ZXJ0IGFueSB0ZXh0IGZpbGVzXG5cCisrICAtaiAganVuayBwYXRocyAoZG8gbm90IG1ha2UgZGlyZWN0b3JpZXMpICAgLWFhIHRyZWF0IEFMTCBmaWxlcyBhcyB0ZXh0XG5cCisrICAtVSAgdXNlIGVzY2FwZXMgZm9yIGFsbCBub24tQVNDSUkgVW5pY29kZSAgLVVVIGlnbm9yZSBhbnkgVW5pY29kZSBmaWVsZHNcblwKKysgIC1DICBtYXRjaCBmaWxlbmFtZXMgY2FzZS1pbnNlbnNpdGl2ZWx5ICAgICAtTCAgbWFrZSAoc29tZSkgbmFtZXMgXAorK2xvd2VyY2FzZVxuICUtNDJzICAtViAgcmV0YWluIFZNUyB2ZXJzaW9uIG51bWJlcnNcbiVzXAorKyAgLU8gQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgRE9TLCBXaW5kb3dzIGFuZCBPUy8yIGFyY2hpdmVzXG5cCisrICAtSSBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBVTklYIGFuZCBvdGhlciBhcmNoaXZlc1xuXG4iOworICNlbHNlIC8qICFWTVMgKi8KKyBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFVuemlwVXNhZ2VMaW5lNFtdID0gIlwKKyBtb2RpZmllcnM6XG5cCitAQCAtODAyLDYgKzgyMywxMCBAQAorICNlbmRpZiAvKiBVTklDT0RFX1NVUFBPUlQgKi8KKyAKKyAKKysjaWZkZWYgVU5JWAorKyAgICBpbml0X2NvbnZlcnNpb25fY2hhcnNldHMoKTsKKysjZW5kaWYKKysKKyAjaWYgKGRlZmluZWQoX19JQk1DX18pICYmIGRlZmluZWQoX19ERUJVR19BTExPQ19fKSkKKyAgICAgZXh0ZXJuIHZvaWQgRGVidWdNYWxsb2Modm9pZCk7CisgCitAQCAtMTMzNSw2ICsxMzYwLDExIEBACisgICAgIGFyZ2MgPSAqcGFyZ2M7CisgICAgIGFyZ3YgPSAqcGFyZ3Y7CisgCisrI2lmZGVmIFVOSVgKKysgICAgZXh0ZXJuIGNoYXIgT0VNX0NQW01BWF9DUF9OQU1FXTsKKysgICAgZXh0ZXJuIGNoYXIgSVNPX0NQW01BWF9DUF9OQU1FXTsKKysjZW5kaWYKKysgICAgCisgICAgIHdoaWxlICgrK2FyZ3YsICgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ID09ICctJykpIHsKKyAgICAgICAgIHMgPSAqYXJndiArIDE7CisgICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSAhPSAwKSB7ICAgIC8qICIhPSAwIjogIHByZXZlbnQgVHVyYm8gQyB3YXJuaW5nICovCitAQCAtMTUxNiw2ICsxNTQ2LDM1IEBACisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAjZW5kaWYgIC8qIE1BQ09TICovCisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ0knKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLUljaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1JIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgKCdqJyk6ICAgIC8qIGp1bmsgcGF0aG5hbWVzL2RpcmVjdG9yeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5qZmxhZyA9IEZBTFNFLCBuZWdhdGl2ZSA9IDA7CitAQCAtMTU5MSw2ICsxNjUwLDM1IEBACisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICArK3VPLm92ZXJ3cml0ZV9hbGw7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnTycpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtT2NoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLU8gY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1PIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAoJ3AnKTogICAgLyogcGlwZXM6ICBleHRyYWN0IHRvIHN0ZG91dCwgbm8gbWVzc2FnZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmNmbGFnID0gRkFMU0U7CitJbmRleDogdW56aXAtNi4wL3VuenByaXYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuenByaXYuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bnpwcml2LmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKK0BAIC0zMDA4LDcgKzMwMDgsNyBAQAorICAgICAgICAgICEoKChpc2xvY2hkcikgfHwgKGlzdXhhdHQpKSAmJiBcCisgICAgICAgICAgICAoKGhvc3R2ZXIpID09IDI1IHx8IChob3N0dmVyKSA9PSAyNiB8fCAoaG9zdHZlcikgPT0gNDApKSkgfHwgXAorICAgICAgICAgKGhvc3RudW0pID09IEZTX0hQRlNfIHx8IFwKKy0gICAgICAgICgoaG9zdG51bSkgPT0gRlNfTlRGU18gJiYgKGhvc3R2ZXIpID09IDUwKSkgeyBcCisrICAgICAgICAoKGhvc3RudW0pID09IEZTX05URlNfIC8qICYmIChob3N0dmVyKSA9PSA1MCAqLyApKSB7IFwKKyAgICAgICAgIF9PRU1fSU5URVJOKChzdHJpbmcpKTsgXAorICAgICB9IGVsc2UgeyBcCisgICAgICAgICBfSVNPX0lOVEVSTigoc3RyaW5nKSk7IFwKK0luZGV4OiB1bnppcC02LjAvemlwaW5mby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvemlwaW5mby5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3ppcGluZm8uYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorQEAgLTQ1Nyw2ICs0NTcsMTAgQEAKKyAgICAgaW50ICAgIHRmbGFnX3NsbT1UUlVFLCB0ZmxhZ18ydj1GQUxTRTsKKyAgICAgaW50ICAgIGV4cGxpY2l0X2g9RkFMU0UsIGV4cGxpY2l0X3Q9RkFMU0U7CisgCisrI2lmZGVmIFVOSVgKKysgICAgZXh0ZXJuIGNoYXIgT0VNX0NQW01BWF9DUF9OQU1FXTsKKysgICAgZXh0ZXJuIGNoYXIgSVNPX0NQW01BWF9DUF9OQU1FXTsKKysjZW5kaWYKKyAKKyAjaWZkZWYgTUFDT1MKKyAgICAgdU8ubGZsYWcgPSBMRkxBRzsgICAgICAgICAvKiByZXNldCBkZWZhdWx0IG9uIGVhY2ggY2FsbCAqLworQEAgLTUwMSw2ICs1MDUsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ0knKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLUljaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1JIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgJ2wnOiAgICAgIC8qIGxvbmdlciBmb3JtIG9mICJscyAtbCIgdHlwZSBsaXN0aW5nICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAtMiwgbmVnYXRpdmUgPSAwOworQEAgLTUyMSw2ICs1NTQsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICBHLk1fZmxhZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnTycpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtT2NoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLU8gY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1PIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAncyc6ICAgICAgLyogZGVmYXVsdDogIHNob3J0ZXIgImxzIC1sIiB0eXBlIGxpc3RpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5sZmxhZyA9IC0yLCBuZWdhdGl2ZSA9IDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzN2YwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tOiBzbXMKK1N1YmplY3Q6IEZpeCBDVkUtMjAxNC04MTM5OiBDUkMzMiB2ZXJpZmljYXRpb24gaGVhcC1iYXNlZCBvdmVyZmxvdworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NzM3MjIKKworVGhlIHBhdGNoIGNvbWVzIGZyb20gdW56aXBfNi4wLTgrZGViN3UyLmRlYmlhbi50YXIuZ3oKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL2V4dHJhY3QuYworKysrIGIvZXh0cmFjdC5jCitAQCAtMjk4LDYgKzI5OCw4IEBACisgI2lmbmRlZiBTRlgKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIEluY29uc2lzdEVGbGVuZ3RoW10gPSAiYmFkIGV4dHJhLWZpZWxkIGVudHJ5OlxuIFwKKyAgICAgIEVGIGJsb2NrIGxlbmd0aCAoJXUgYnl0ZXMpIGV4Y2VlZHMgcmVtYWluaW5nIEVGIGRhdGEgKCV1IGJ5dGVzKVxuIjsKKysgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFRvb1NtYWxsRUJsZW5ndGhbXSA9ICJiYWQgZXh0cmEtZmllbGQgZW50cnk6XG4gXAorKyAgICAgRUYgYmxvY2sgbGVuZ3RoICgldSBieXRlcykgaW52YWxpZCAoPCAlZClcbiI7CisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBJbnZhbGlkQ29tcHJEYXRhRUFzW10gPQorICAgICAgIiBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSBmb3IgRUFzXG4iOworICMgIGlmIChkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKE5UU0RfRUFTKSkKK0BAIC0yMDIzLDcgKzIwMjUsOCBAQAorICAgICAgICAgZWJJRCA9IG1ha2V3b3JkKGVmKTsKKyAgICAgICAgIGViTGVuID0gKHVuc2lnbmVkKW1ha2V3b3JkKGVmK0VCX0xFTik7CisgCistICAgICAgICBpZiAoZWJMZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKSB7CisrICAgICAgICBpZiAoZWJMZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKQorKyAgICAgICAgeworICAgICAgICAgICAgLyogRGlzY292ZXJlZCBzb21lIGV4dHJhIGZpZWxkIGluY29uc2lzdGVuY3khICovCisgICAgICAgICAgICAgaWYgKHVPLnFmbGFnKQorICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAxLCAoKGNoYXIgKilzbGlkZSwgIiUtMjJzICIsCitAQCAtMjE1OCwxMSArMjE2MSwxOSBAQAorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgRUZfUEtWTVM6CistICAgICAgICAgICAgICAgIGlmIChtYWtlbG9uZyhlZitFQl9IRUFEU0laRSkgIT0KKysgICAgICAgICAgICAgICAgaWYgKGViTGVuIDwgNCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwKKysgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhUb29TbWFsbEVCbGVuZ3RoKSwKKysgICAgICAgICAgICAgICAgICAgICBlYkxlbiwgNCkpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1ha2Vsb25nKGVmK0VCX0hFQURTSVpFKSAhPQorICAgICAgICAgICAgICAgICAgICAgY3JjMzIoQ1JDVkFMX0lOSVRJQUwsIGVmKyhFQl9IRUFEU0laRSs0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHRlbnQpKGViTGVuLTQpKSkKKysgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwgKChjaGFyICopc2xpZGUsCisgICAgICAgICAgICAgICAgICAgICAgIExvYWRGYXJTdHJpbmcoQmFkQ1JDX0VBcykpKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEVGX1BLVzMyOgorICAgICAgICAgICAgIGNhc2UgRUZfUEtVTklYOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMC1jdmUtMjAxNC04MTQwLXRlc3QtY29tcHItZWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjN2Q1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMC1jdmUtMjAxNC04MTQwLXRlc3QtY29tcHItZWIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODE0MDogb3V0LW9mLWJvdW5kcyB3cml0ZSBpc3N1ZSBpbiB0ZXN0X2NvbXByX2ViKCkKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzczNzIyCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIHVuemlwXzYuMC04K2RlYjd1Mi5kZWJpYW4udGFyLmd6CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTIyMzIsMTAgKzIyMzIsMTcgQEAKKyAgICAgaWYgKGNvbXByX29mZnNldCA8IDQpICAgICAgICAgICAgICAgIC8qIGZpZWxkIGlzIG5vdCBjb21wcmVzc2VkOiAqLworICAgICAgICAgcmV0dXJuIFBLX09LOyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBhbmQgc2lnbmFsIE9LICovCisgCisrICAgIC8qIFJldHVybiBuby9iYWQtZGF0YSBlcnJvciBzdGF0dXMgaWYgYW55IHByb2JsZW0gaXMgZm91bmQ6CisrICAgICAqICAgIDEuIGViX3NpemUgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHVuY29tcHJlc3NlZCBzaXplCisrICAgICAqICAgICAgIChlYl91Y3NpemUpLiAgKEVsc2UgZXh0cmFjdCBlYl91Y3NpemUuKQorKyAgICAgKiAgICAyLiBlYl91Y3NpemUgaXMgemVybyAoaW52YWxpZCkuICAyMDE0LTEyLTA0IFNNUy4KKysgICAgICogICAgMy4gZWJfdWNzaXplIGlzIHBvc2l0aXZlLCBidXQgZWJfc2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZAorKyAgICAgKiAgICAgICB0aGUgY29tcHJlc3NlZCBkYXRhIGhlYWRlci4KKysgICAgICovCisgICAgIGlmICgoZWJfc2l6ZSA8IChFQl9VQ1NJWkVfUCArIDQpKSB8fAorLSAgICAgICAgKChlYl91Y3NpemUgPSBtYWtlbG9uZyhlYisoRUJfSEVBRFNJWkUrRUJfVUNTSVpFX1ApKSkgPiAwTCAmJgorLSAgICAgICAgIGViX3NpemUgPD0gKGNvbXByX29mZnNldCArIEVCX0NNUFJIRUFETEVOKSkpCistICAgICAgICByZXR1cm4gSVpfRUZfVFJVTkM7ICAgICAgICAgICAgICAgLyogbm8gY29tcHJlc3NlZCBkYXRhISAqLworKyAgICAgKChlYl91Y3NpemUgPSBtYWtlbG9uZyggZWIrIChFQl9IRUFEU0laRSsgRUJfVUNTSVpFX1ApKSkgPT0gMEwpIHx8CisrICAgICAoKGViX3Vjc2l6ZSA+IDBMKSAmJiAoZWJfc2l6ZSA8PSAoY29tcHJfb2Zmc2V0ICsgRUJfQ01QUkhFQURMRU4pKSkpCisrICAgICAgICByZXR1cm4gSVpfRUZfVFJVTkM7ICAgICAgICAgICAgIC8qIG5vL2JhZCBjb21wcmVzc2VkIGRhdGEhICovCisgCisgICAgIGlmICgKKyAjaWZkZWYgSU5UXzE2QklUCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjMWRiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODE0MTogb3V0LW9mLWJvdW5kcyByZWFkIGlzc3VlcyBpbiBnZXRaaXA2NERhdGEoKQorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NzM3MjIKKworVGhlIHBhdGNoIGNvbWVzIGZyb20gdW56aXBfNi4wLTgrZGViN3UyLmRlYmlhbi50YXIuZ3oKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKworLS0tIGEvZmlsZWlvLmMKKysrKyBiL2ZpbGVpby5jCitAQCAtMTc2LDYgKzE3Niw4IEBACisgI2VuZGlmCisgc3RhdGljIFpDT05TVCBjaGFyIEZhciBFeHRyYUZpZWxkVG9vTG9uZ1tdID0KKyAgICJ3YXJuaW5nOiAgZXh0cmEgZmllbGQgdG9vIGxvbmcgKCVkKS4gIElnbm9yaW5nLi4uXG4iOworK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgRXh0cmFGaWVsZENvcnJ1cHRbXSA9CisrICAid2FybmluZzogIGV4dHJhIGZpZWxkICh0eXBlOiAweCUwNHgpIGNvcnJ1cHQuICBDb250aW51aW5nLi4uXG4iOworIAorICNpZmRlZiBXSU5ETEwKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIERpc2tGdWxsUXVlcnlbXSA9CitAQCAtMjI5NSw3ICsyMjk3LDEyIEBACisgICAgICAgICAgICAgaWYgKHJlYWRidWYoX19HX18gKGNoYXIgKilHLmV4dHJhX2ZpZWxkLCBsZW5ndGgpID09IDApCisgICAgICAgICAgICAgICAgIHJldHVybiBQS19FT0Y7CisgICAgICAgICAgICAgLyogTG9va3MgbGlrZSBoZXJlIGlzIHdoZXJlIGV4dHJhIGZpZWxkcyBhcmUgcmVhZCAqLworLSAgICAgICAgICAgIGdldFppcDY0RGF0YShfX0dfXyBHLmV4dHJhX2ZpZWxkLCBsZW5ndGgpOworKyAgICAgICAgICAgIGlmIChnZXRaaXA2NERhdGEoX19HX18gRy5leHRyYV9maWVsZCwgbGVuZ3RoKSAhPSBQS19DT09MKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgTG9hZEZhclN0cmluZyggRXh0cmFGaWVsZENvcnJ1cHQpLCBFRl9QS1NaNjQpKTsKKysgICAgICAgICAgICAgICAgZXJyb3IgPSBQS19XQVJOOworKyAgICAgICAgICAgIH0KKyAjaWZkZWYgVU5JQ09ERV9TVVBQT1JUCisgICAgICAgICAgICAgRy51bmlwYXRoX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgICAgICBpZiAoRy5Vek8uVV9mbGFnIDwgMikgeworLS0tIGEvcHJvY2Vzcy5jCisrKysgYi9wcm9jZXNzLmMKK0BAIC0xLDUgKzEsNSBAQAorIC8qCistICBDb3B5cmlnaHQgKGMpIDE5OTAtMjAwOSBJbmZvLVpJUC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICBDb3B5cmlnaHQgKGMpIDE5OTAtMjAxNCBJbmZvLVpJUC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgICBTZWUgdGhlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0UsIHZlcnNpb24gMjAwOS1KYW4tMDIgb3IgbGF0ZXIKKyAgICh0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlIGFsc28gaW5jbHVkZWQgaW4gdW56aXAuaCkgZm9yIHRlcm1zIG9mIHVzZS4KK0BAIC0xOTAxLDQ4ICsxOTAxLDgyIEBACisgICAgIGFuZCBhIDQtYnl0ZSB2ZXJzaW9uIG9mIGRpc2sgc3RhcnQgbnVtYmVyLgorICAgICBTZXRzIGJvdGggbG9jYWwgaGVhZGVyIGFuZCBjZW50cmFsIGhlYWRlciBmaWVsZHMuICBOb3QgdGVycmlibHkgY2xldmVyLAorICAgICBidXQgaXQgbWVhbnMgdGhhdCB0aGlzIHByb2NlZHVyZSBpcyBvbmx5IGNhbGxlZCBpbiBvbmUgcGxhY2UuCisrCisrICAgIDIwMTQtMTItMDUgU01TLgorKyAgICBBZGRlZCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgZW5vdWdoIGRhdGEgYXJlIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZworKyAgICBtYWtlaW50NjQoKSBvciBtYWtlbG9uZygpLiAgUmVwbGFjZWQgdmFyaW91cyBzaXplb2YoKSB2YWx1ZXMgd2l0aAorKyAgICBzaW1wbGUgKCI0IiBvciAiOCIpIGNvbnN0YW50cy4gIChUaGUgWmlwNjQgc3RydWN0dXJlcyBkbyBub3QgZGVwZW5kCisrICAgIG9uIG91ciB2YXJpYWJsZSBzaXplcy4pICBFcnJvciBoYW5kbGluZyBpcyBjcnVkZSwgYnV0IHdlIHNob3VsZCBub3cKKysgICAgc3RheSB3aXRoaW4gdGhlIGJ1ZmZlci4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisrI2RlZmluZSBaNjRGTEdTIDB4ZmZmZgorKyNkZWZpbmUgWjY0RkxHTCAweGZmZmZmZmZmCisrCisgICAgIGlmIChlZl9sZW4gPT0gMCB8fCBlZl9idWYgPT0gTlVMTCkKKyAgICAgICAgIHJldHVybiBQS19DT09MOworIAorICAgICBUcmFjZSgoc3RkZXJyLCJcbmdldFppcDY0RGF0YTogc2Nhbm5pbmcgZXh0cmEgZmllbGQgb2YgbGVuZ3RoICV1XG4iLAorICAgICAgIGVmX2xlbikpOworIAorLSAgICB3aGlsZSAoZWZfbGVuID49IEVCX0hFQURTSVpFKSB7CisrICAgIHdoaWxlIChlZl9sZW4gPj0gRUJfSEVBRFNJWkUpCisrICAgIHsKKyAgICAgICAgIGViX2lkID0gbWFrZXdvcmQoRUJfSUQgKyBlZl9idWYpOworICAgICAgICAgZWJfbGVuID0gbWFrZXdvcmQoRUJfTEVOICsgZWZfYnVmKTsKKyAKKy0gICAgICAgIGlmIChlYl9sZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKSB7CistICAgICAgICAgICAgLyogZGlzY292ZXJlZCBzb21lIGV4dHJhIGZpZWxkIGluY29uc2lzdGVuY3khICovCisrICAgICAgICBpZiAoZWJfbGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvKiBFeHRyYSBibG9jayBsZW5ndGggZXhjZWVkcyByZW1haW5pbmcgZXh0cmEgZmllbGQgbGVuZ3RoLiAqLworICAgICAgICAgICAgIFRyYWNlKChzdGRlcnIsCisgICAgICAgICAgICAgICAiZ2V0WmlwNjREYXRhOiBibG9jayBsZW5ndGggJXUgPiByZXN0IGVmX3NpemUgJXVcbiIsIGViX2xlbiwKKyAgICAgICAgICAgICAgIGVmX2xlbiAtIEVCX0hFQURTSVpFKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistICAgICAgICBpZiAoZWJfaWQgPT0gRUZfUEtTWjY0KSB7CistCisrICAgICAgICBpZiAoZWJfaWQgPT0gRUZfUEtTWjY0KQorKyAgICAgICAgeworICAgICAgICAgICBpbnQgb2Zmc2V0ID0gRUJfSEVBRFNJWkU7CisgCistICAgICAgICAgIGlmIChHLmNyZWMudWNzaXplID09IDB4ZmZmZmZmZmYgfHwgRy5scmVjLnVjc2l6ZSA9PSAweGZmZmZmZmZmKXsKKy0gICAgICAgICAgICBHLmxyZWMudWNzaXplID0gRy5jcmVjLnVjc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLnVjc2l6ZSk7CisrICAgICAgICAgIGlmICgoRy5jcmVjLnVjc2l6ZSA9PSBaNjRGTEdMKSB8fCAoRy5scmVjLnVjc2l6ZSA9PSBaNjRGTEdMKSkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDggPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworKyAgICAgICAgICAgIEcuY3JlYy51Y3NpemUgPSBHLmxyZWMudWNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IDg7CisgICAgICAgICAgIH0KKy0gICAgICAgICAgaWYgKEcuY3JlYy5jc2l6ZSA9PSAweGZmZmZmZmZmIHx8IEcubHJlYy5jc2l6ZSA9PSAweGZmZmZmZmZmKXsKKy0gICAgICAgICAgICBHLmNzaXplID0gRy5scmVjLmNzaXplID0gRy5jcmVjLmNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CistICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihHLmNyZWMuY3NpemUpOworKworKyAgICAgICAgICBpZiAoKEcuY3JlYy5jc2l6ZSA9PSBaNjRGTEdMKSB8fCAoRy5scmVjLmNzaXplID09IFo2NEZMR0wpKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgOCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisrICAgICAgICAgICAgRy5jc2l6ZSA9IEcuY3JlYy5jc2l6ZSA9IEcubHJlYy5jc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9PSAweGZmZmZmZmZmKXsKKysKKysgICAgICAgICAgaWYgKEcuY3JlYy5yZWxhdGl2ZV9vZmZzZXRfbG9jYWxfaGVhZGVyID09IFo2NEZMR0wpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob2Zmc2V0KyA4ID4gZWZfbGVuKQorKyAgICAgICAgICAgICAgcmV0dXJuIFBLX0VSUjsKKysKKyAgICAgICAgICAgICBHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMuZGlza19udW1iZXJfc3RhcnQgPT0gMHhmZmZmKXsKKysKKysgICAgICAgICAgaWYgKEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCA9PSBaNjRGTEdTKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgNCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisgICAgICAgICAgICAgRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0ID0gKHp1dmxfdCltYWtlbG9uZyhvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0KTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gNDsKKyAgICAgICAgICAgfQorKyNpZiAwCisrICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAvKiBFeHBlY3Qgb25seSBvbmUgRUZfUEtTWjY0IGJsb2NrLiAqLworKyNlbmRpZiAvKiAwICovCisgICAgICAgICB9CisgCistICAgICAgICAvKiBTa2lwIHRoaXMgZXh0cmEgZmllbGQgYmxvY2sgKi8KKysgICAgICAgIC8qIFNraXAgdGhpcyBleHRyYSBmaWVsZCBibG9jay4gKi8KKyAgICAgICAgIGVmX2J1ZiArPSAoZWJfbGVuICsgRUJfSEVBRFNJWkUpOworICAgICAgICAgZWZfbGVuIC09IChlYl9sZW4gKyBFQl9IRUFEU0laRSk7CisgICAgIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMwZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1bml4L01ha2VmaWxlOiByZW1vdmUgaGFyZCBjb2RlZCBzdHJpcCBjb21tYW5kcworCitSZW1vdmUgdGhlIGhhcmQgY29kZWQgc3RyaXAgY29tbWFuZHMsIGJvdGggTEYyICh1c2VkIGluIGxpbmtpbmcpIGFuZAorU1RSSVAgdXNlZCBhbG9uZS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1bnppcDYwLm9yaWcvdW5peC9jb25maWd1cmUgdW56aXA2MC91bml4L2NvbmZpZ3VyZQorLS0tIHVuemlwNjAub3JpZy91bml4L2NvbmZpZ3VyZQkyMDA5LTA0LTE2IDE0OjI1OjEyLjAwMDAwMDAwMCAtMDUwMAorKysrIHVuemlwNjAvdW5peC9jb25maWd1cmUJMjAxMS0wNi0yMSAxMToyMzozNi44MjI4NDk5NjAgLTA1MDAKK0BAIC0xNyw3ICsxNyw3IEBACisgSVpfQlpJUDI9JHszfQorIENGTEFHUz0iJHtDRkxBR1N9IC1JLiAtRFVOSVgiCisgTEZMQUdTMT0iIgorLUxGTEFHUzI9Ii1zIgorK0xGTEFHUzI9IiIKKyBMTj0ibG4gLXMiCisgCisgQ0ZMQUdTX09QVD0nJworZGlmZiAtdXIgdW56aXA2MC5vcmlnL3VuaXgvTWFrZWZpbGUgdW56aXA2MC91bml4L01ha2VmaWxlCistLS0gdW56aXA2MC5vcmlnL3VuaXgvTWFrZWZpbGUJMjAwOS0wMS0xOCAxNjo0MToxOC4wMDAwMDAwMDAgLTA2MDAKKysrKyB1bnppcDYwL3VuaXgvTWFrZWZpbGUJMjAxMS0wNi0yMSAxMToxMjoyMi45MDAwMDMzODggLTA1MDAKK0BAIC01Miw3ICs1Miw3IEBACisgQ0YgPSAkKENGTEFHUykgJChDRl9OT09QVCkKKyBMRkxBR1MxID0KKyBMRiA9IC1vIHVuemlwJEUgJChMRkxBR1MxKQorLUxGMiA9IC1zCisrTEYyID0gCisgCisgIyBVblppcFNGWCBmbGFncworIFNMID0gLW8gdW56aXBzZngkRSAkKExGTEFHUzEpCitAQCAtNzAsNyArNzAsNyBAQAorIENITU9EID0gY2htb2QKKyBCSU5QRVJNUyA9IDc1NQorIE1BTlBFUk1TID0gNjQ0CistU1RSSVAgPSBzdHJpcAorK1NUUklQID0KKyBFID0KKyBPID0gLm8KKyBNID0gdW5peAorQEAgLTc3Niw3ICs3NzYsNiBAQAorICMKKyBnY2M6CQl1bml4X21ha2UKKyAJJChNQUtFKSB1bnppcHMgQ0M9Z2NjIExEPWdjYyBDRkxBR1M9Ii1PMyIgTEYyPSIiCistCSQoU1RSSVApICQoVU5aSVBTKQorIAorICMgSGV1cmlrb24gSEs2OCAoNjgwMTApLCBVbmlQbHVzKyBTeXN0ZW0gViA1LjAsIEdyZWVuIEhpbGxzIEMtNjgwMDAKKyBoazY4OgkJdW5peF9tYWtlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YzZlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitQYXNzIExERkxBR1MgdG8gdGhlIGxpbmtlciAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pa2hhaWwgRHVybmV2IDxNaWtoYWlsX0R1cm5ldkBtZW50b3IuY29tPgorCitkaWZmIC1OYXVyIG9sZC91bml4L2NvbmZpZ3VyZSBuZXcvdW5peC9jb25maWd1cmUKKy0tLSBvbGQvdW5peC9jb25maWd1cmUJMjAxNC0wMS0xMyAyMTo1OToyNy4wMDAwMDAwMDAgKzExMDAKKysrKyBuZXcvdW5peC9jb25maWd1cmUJMjAxNC0wMS0xNCAxNjozNjowMi4wMDAwMDAwMDAgKzExMDAKK0BAIC0xNiw3ICsxNiw3IEBACisgQ0ZMQUdTUj0ke0NGTEFHU30KKyBJWl9CWklQMj0kezN9CisgQ0ZMQUdTPSIke0NGTEFHU30gLUkuIC1EVU5JWCIKKy1MRkxBR1MxPSIiCisrTEZMQUdTMT0ke0xERkxBR1N9CisgTEZMQUdTMj0iIgorIExOPSJsbiAtcyIKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvdW56aXAtNi4wX292ZXJmbG93My5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMGJmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvdW56aXAtNi4wX292ZXJmbG93My5kaWZmCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gMTkwMDQwZWJmY2Y1Mzk1YTZjY2VkZWRlMmNjOTM0M2QzNGYwYTEwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1hbmNoYSA8bWFuY2hhMSBBVCB6b2hvIERPVCBjb20+CitEYXRlOiBXZWQsIDExIEZlYiAyMDE1CitTdWJqZWN0OiBJbmZvLVpJUCBVblppcCBidWZmZXIgb3ZlcmZsb3cKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCeSBjYXJlZnVsbHkgY3JhZnRpbmcgYSBjb3JydXB0IFpJUCBhcmNoaXZlIHdpdGggImV4dHJhIGZpZWxkcyIgdGhhdAorcHVycG9ydCB0byBoYXZlIGNvbXByZXNzZWQgYmxvY2tzIGxhcmdlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nCit1bmNvbXByZXNzZWQgYmxvY2tzIGluIFNUT1JFRCBuby1jb21wcmVzc2lvbiBtb2RlLCBhbiBhdHRhY2tlciBjYW4KK3RyaWdnZXIgYSBoZWFwIG92ZXJmbG93IHRoYXQgY2FuIHJlc3VsdCBpbiBhcHBsaWNhdGlvbiBjcmFzaCBvcgorcG9zc2libHkgaGF2ZSBvdGhlciB1bnNwZWNpZmllZCBpbXBhY3QuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHdoZW4gZXh0cmEgZmllbGRzIHVzZSBTVE9SRUQgbW9kZSwgdGhlCisiY29tcHJlc3NlZCIgYW5kIHVuY29tcHJlc3NlZCBibG9jayBzaXplcyBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogbWFuY2hhIDxtYW5jaGExIEFUIHpvaG8gRE9UIGNvbT4KKy0tLQorIGV4dHJhY3QuYyB8ICAgIDggKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKKy0tLSBhL2V4dHJhY3QuYworKysrIGIvZXh0cmFjdC5jCitAQCAtMjIxNyw2ICsyMjE3LDcgQEAgc3RhdGljIGludCB0ZXN0X2NvbXByX2ViKF9fR19fIGViLCBlYl9zaQorICAgICB1bGcgZWJfdWNzaXplOworICAgICB1Y2ggKmViX3VjcHRyOworICAgICBpbnQgcjsKKysgICAgdXNoIG1ldGhvZDsKKyAKKyAgICAgaWYgKGNvbXByX29mZnNldCA8IDQpICAgICAgICAgICAgICAgIC8qIGZpZWxkIGlzIG5vdCBjb21wcmVzc2VkOiAqLworICAgICAgICAgcmV0dXJuIFBLX09LOyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBhbmQgc2lnbmFsIE9LICovCitAQCAtMjIyNiw2ICsyMjI3LDEzIEBAIHN0YXRpYyBpbnQgdGVzdF9jb21wcl9lYihfX0dfXyBlYiwgZWJfc2kKKyAgICAgICAgICBlYl9zaXplIDw9IChjb21wcl9vZmZzZXQgKyBFQl9DTVBSSEVBRExFTikpKQorICAgICAgICAgcmV0dXJuIElaX0VGX1RSVU5DOyAgICAgICAgICAgICAgIC8qIG5vIGNvbXByZXNzZWQgZGF0YSEgKi8KKyAKKysgICAgbWV0aG9kID0gbWFrZXdvcmQoZWIgKyAoRUJfSEVBRFNJWkUgKyBjb21wcl9vZmZzZXQpKTsKKysgICAgaWYgKChtZXRob2QgPT0gU1RPUkVEKSAmJgorKyAgICAgICAgKGViX3NpemUgLSBjb21wcl9vZmZzZXQgLSBFQl9DTVBSSEVBRExFTiAhPSBlYl91Y3NpemUpKQorKwlyZXR1cm4gUEtfRVJSOwkJCSAgLyogY29tcHJlc3NlZCAmIHVuY29tcHJlc3NlZAorKwkJCQkJICAgKiBzaG91bGQgbWF0Y2ggaW4gU1RPUkVECisrCQkJCQkgICAqIG1ldGhvZCAqLworKworICAgICBpZiAoCisgI2lmZGVmIElOVF8xNkJJVAorICAgICAgICAgKCgodWxnKShleHRlbnQpZWJfdWNzaXplKSAhPSBlYl91Y3NpemUpIHx8CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBhNzEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgZXh0cmFjdGluZyBhbmQgdmlld2luZyBmaWxlcyBpbiAuemlwIGFyY2hpdmVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvLXppcC5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTk0Y2FlYzVhNTFlZjU1ZWY3MTFlZTRlOGIxYzY5ZTI5IgorUEUgPSAiMSIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3VuemlwNjAudGd6IFwKKwlmaWxlOi8vYXZvaWQtc3RyaXAucGF0Y2ggXAorCWZpbGU6Ly9kZWZpbmUtbGRmbGFncy5wYXRjaCBcCisJZmlsZTovLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBcCisJZmlsZTovL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZiBcCisJZmlsZTovLzA5LWN2ZS0yMDE0LTgxMzktY3JjLW92ZXJmbG93LnBhdGNoIFwKKwlmaWxlOi8vMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoIFwKKwlmaWxlOi8vMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjJiNDkwNDA3NDg5NTIxZGI4NjNiNTIzYTdmODYzNzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDM2ZDk2OTkxNjQ2ZDA0NDllZDBhYTk1MmU0ZmJlMjFiNDc2Y2U5OTRhYmMyNzZlNDlkMzBlNjg2NzA4YmQzNyIKK1MgPSAiJHtXT1JLRElSfS91bnppcDYwIgorCisjIE1ha2VmaWxlIHVzZXMgQ0ZfTk9PUFQgaW5zdGVhZCBvZiBDRkxBR1MuICBXZSBsaWZ0ZWQgdGhlIHZhbHVlcyBmcm9tCisjIE1ha2VmaWxlIGFuZCBhZGQgQ0ZMQUdTLiAgT3B0aW1pemF0aW9uIHdpbGwgYmUgb3ZlcnJpZGVuIGJ5IHVuemlwCisjIGNvbmZpZ3VyZSB0byBiZSAtTzMuCisjCitFWFRSQV9PRU1BS0UgKz0gIlNUUklQPXRydWUgTEYyPScnIFwKKyAgICAgICAgICAgICAgICAnQ0ZfTk9PUFQ9LUkuIC1JYnppcDIgLURVTklYICR7Q0ZMQUdTfSciCisKK2V4cG9ydCBMRCA9ICIke0NDfSIKK0xEX2NsYXNzLW5hdGl2ZSA9ICIke0NDfSIKKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGdlbmVyaWMKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGluc3RhbGwgcHJlZml4PSR7RH0ke3ByZWZpeH0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0KKwltdiAke0R9JHtwcmVmaXh9L21hbi8qICR7RH0ke21hbmRpcn0KKwlybWRpciAke0R9JHtwcmVmaXh9L21hbi8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdW56aXBdID0gIiR7YmluZGlyfS91bnppcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXgtcGluZy1mYWlsdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YWI5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDc5IEBACitGaXggcGluZyBtb2RlIGZhaWx1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nICAKKworV2hlbiB3YXRjaGRvZyB3b3JrcyBvbiBwaW5nIG1vZGUsIHRoZSBzeXN0ZW0gd2lsbCBiZSByZWJvb3RlZCBzaW5jZQord2F0Y2hkb2cgY2FuIG5vdCByZWNlaXZlIHRoZSBleHBlY3RlZCBFQ09SRVBMWSBvbiBhIHNldHRpbmcgaW50ZXJ2YWwuCisKK1BpbmcgbW9kZSB1c2VzIGEgcmF3IHNvY2tldCB0byBzZW5kIGEgRUNPIHBhY2tldCwgdGhlbiB1c2VzIHNlbGVjdCgpCit0byB3YWl0IGFuZCByZWN2ZnJvbSgpIHRvIHJlY2VpdmUgdGhlIEVDT1JFUExZIHBhY2tldCwgaWYgc2VsZWN0KCkKK3Nob3dzIHRoZSBkYXRhIGlzIHJlYWR5LCBhbmQgdGhlIGRhdGEgaXMgbm90IHRoZSBleHBlY3RlZCBFQ09SRVBMWSwKK2FuZCB3YWl0aW5nIHRpbWUgaXMgbm90IG92ZXJkdWUsIGl0IHdpbGwgY29udGludWUgdXNlIHNlbGVjdCgpIGFuZAorcmVjdmZyb20oKS4KKworUHJvYmxlbSBpcyB0aGF0IHRoZSByYXcgc29ja2V0IGNhbiByZWNlaXZlIGFueSBpY21wIHBhY2tldHMsIGlmIHdlIGRvCitub3Qgc2V0IGZpbHRlcnMsIGFuZCB0aGVyZSBhcmUgbWFueSBpY21wIHBhY2tldHMgb24gc29ja2V0LCB0aGlzCitwcm9ncmFtIHdpbGwgbm90IGZpbmQgaXRzIGludGVyZXN0ZWQgRUNPUkVQTFkgcGFja2V0IGluIGEgc3BlY2lhbAoraW50ZXJ2YWwsIHdoaWNoIG1ha2VzIHRoZSBwaW5nIG1vZGUgZmFpbC4KKworCitPdGhlciBwcm9ncmFtIGlzIHRoYXQgd2F0Y2hkb2cgc29tZXRpbWUgY2FuIG5vdCByZWFjaCB0aGUgY2FsbCBvZgorcmVjdmZyb20gdG8gdHJ5IHRvIHJlY2VpdmUgcGFja2V0cyBzaW5jZSB0dl9zZWMgb2Ygc3RydWN0IHRpbWV2YWwKK29mIHNlbGVjdCBwYXJhbWV0ZXIgaXMgMC4KKworVGhlIHRpbWVvdXQgb2Ygc2VsZWN0KCkgaXMgdGhlIHJlc3VsdCBvZiBwaW5nIGludGVydmFsIG1pbnVzaW5nIHRoZQordGltZSBvZiBjYWxsaW5nIGdldHRpbWVvZmRheSBzcGVuZGluZywgd2hlbiBwaW5nIGludGVydmFsIGlzIDEgc2Vjb25kLAorYW5kIHRoZSBjYWxsIG9mIGdldHRpbWVvZmRheSgpIHNwZW5kcyBzZXZlcmFsIHVzZWNvbmRzLCB0aGUgdHZfc2VjIG9mCitzdHJ1Y3QgdGltZXZhbCBvZiBzZWxlY3QgcGFyYW1ldGVyIG11c3QgYmUgMCwgYXQgdGhhdCBjb25kaXRpb24sIHdlCitzaG91bGQgaXQgaXMgdmFsaWQgb2YgdHZfc2VjIG9mIHN0cnVjdCB0aW1ldmFsIG9mIHNlbGVjdCBwYXJhbWV0ZXIgYmUgMCAKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL25ldC5jICAgICAgfCAgICAyICstCisgc3JjL3dhdGNoZG9nLmMgfCAgICA1ICsrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiB3YXRjaGRvZy01LjE0L3NyYy93YXRjaGRvZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2F0Y2hkb2ctNS4xNC5vcmlnL3NyYy93YXRjaGRvZy5jCisrKysgd2F0Y2hkb2ctNS4xNC9zcmMvd2F0Y2hkb2cuYworQEAgLTI0LDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNpbmNsdWRlIDxsaW51eC9vb20uaD4KKysjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKK0luZGV4OiB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdhdGNoZG9nLTUuMTQub3JpZy9zcmMvbmV0LmMKKysrKyB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYworQEAgLTExLDcgKzExLDggQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorLSNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKysjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorKy8vI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBmb3IgZ2V0aG9zdG5hbWUoKSBldGMgKi8KK0BAIC0xNzksNiArMTgwLDkgQEAgaW50IG9wZW5fbmV0Y2hlY2soc3RydWN0IGxpc3QgKnRsaXN0KQorIHsKKyAJc3RydWN0IGxpc3QgKmFjdDsKKyAJaW50IGhvbGQgPSAwOworKwlzdHJ1Y3QgaWNtcF9maWx0ZXIgZmlsdDsKKysJZmlsdC5kYXRhID0gfigxPDxJQ01QX0VDSE9SRVBMWSk7CisrCisgCisgCWlmICh0bGlzdCAhPSBOVUxMKSB7CisgCQlmb3IgKGFjdCA9IHRsaXN0OyBhY3QgIT0gTlVMTDsgYWN0ID0gYWN0LT5uZXh0KSB7CitAQCAtMjAyLDYgKzIwNiw3IEBAIGludCBvcGVuX25ldGNoZWNrKHN0cnVjdCBsaXN0ICp0bGlzdCkKKyAJCQkgICAgZmF0YWxfZXJyb3IoRVhfU1lTRVJSLCAiZXJyb3Igb3BlbmluZyBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisgCQkJfQorIAorKwkJCXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfUkFXLCBJQ01QX0ZJTFRFUiwgKGNoYXIqKSZmaWx0LCBzaXplb2YoZmlsdCkpOworIAkJCS8qIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBicm9hZGNhc3QgcGluZ3MgdG8gd29yayAqLworIAkJCSh2b2lkKXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIChjaGFyICopJmhvbGQsIHNpemVvZihob2xkKSk7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhZDNhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGaXggb3V0IG9mIHRyZWUgYnVpbGQgc3VwcG9ydDoKKworfCBpbnN0YWxsaW5nIC9ldGMvd2F0Y2hkb2cuY29uZgorfCAgL2Jpbi9ta2RpciAtcCAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNScKK3wgIC9iaW4vbWtkaXIgLXAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCit8ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy5jb25mLjUgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjUnCit8ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2tlZXBhbGl2ZS44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2lkZW50aWZ5LjggJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCit8IC91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB3YXRjaGRvZy5jb25mJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBtYWtlWzJdOiAqKiogW2luc3RhbGwtZXRjLWxvY2FsXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzAzLzIxCisKK0luZGV4OiB3YXRjaGRvZy01LjEzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL01ha2VmaWxlLmFtCTIwMTMtMDItMDEgMTE6MTU6NDQuMDAwMDAwMDAwICswMDAwCisrKysgd2F0Y2hkb2ctNS4xMy9NYWtlZmlsZS5hbQkyMDEzLTAzLTIxIDExOjU5OjM1LjYzNzEzOTAzMSArMDAwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyAJZWxzZSBcCisgCSAgICAgICAgZWNobyAiaW5zdGFsbGluZyAkKENPTkZJR19GSUxFTkFNRSkiOyBcCisgCQkkKG1raW5zdGFsbGRpcnMpIGBkaXJuYW1lICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSlgOyBcCistCSAgICAgICAgJChJTlNUQUxMX0RBVEEpIHdhdGNoZG9nLmNvbmYgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKTsgXAorKwkgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvd2F0Y2hkb2cuY29uZiAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpOyBcCisgCWZpCisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOiBpbnN0YWxsLWV0Yy1sb2NhbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmYyOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIHdhdGNoZG9nLTUuMTMub3JpZy93YXRjaGRvZy5jb25mCTIwMTMtMDItMDEgMTI6MTU6NDQuMDAwMDAwMDAwICswMTAwCisrKysgd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy5jb25mCTIwMTQtMTEtMTMgMTA6NTk6NDMuMjMzOTQzMDAwICswMTAwCitAQCAtMjAsNyArMjAsNyBAQAorICN0ZXN0LWJpbmFyeQkJPSAKKyAjdGVzdC10aW1lb3V0CQk9IAorIAorLSN3YXRjaGRvZy1kZXZpY2UJPSAvZGV2L3dhdGNoZG9nCisrd2F0Y2hkb2ctZGV2aWNlCT0gL2Rldi93YXRjaGRvZworIAorICMgRGVmYXVsdHMgY29tcGlsZWQgaW50byB0aGUgYmluYXJ5CisgI3RlbXBlcmF0dXJlLWRldmljZQk9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYThlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaApAQCAtMCwwICsxLDUzIEBACistLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL3JlZGhhdC93YXRjaGRvZy5pbml0CTIwMTQtMTEtMTIgMTc6MTg6MzkuMTI1OTQzMDAwICswMTAwCisrKysgd2F0Y2hkb2ctNS4xMy9yZWRoYXQvd2F0Y2hkb2cuaW5pdAkyMDE0LTExLTEyIDE4OjI3OjM2LjE4OTk0MzAwMCArMDEwMAorQEAgLTcsNyArNyw3IEBACisgIyAgICAgICAgICAgICAgICAgSGVubmluZyBQLiBTY2htaWVkZWhhdXNlbiA8aHBzQHRhbnN0YWFmbC5kZT4KKyAKKyAjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLS4gL2V0Yy9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworIAorIFsgLXggL3Vzci9zYmluL3dhdGNoZG9nIC1hIC1lIC9ldGMvd2F0Y2hkb2cuY29uZiBdIHx8IGV4aXQgMAorIAorQEAgLTIzLDIyICsyMywyMiBAQAorIAorIHN0YXJ0KCkgeworIAorLQllY2hvIC1uICQiU3RhcnRpbmcgJHByb2c6ICIKKysJZWNobyAtbiAiU3RhcnRpbmcgJHByb2c6ICIKKyAJaWYgWyAtbiAiJChwaWRvZnByb2MgJHByb2cpIiBdOyB0aGVuCistCQllY2hvIC1uICQiJHByb2c6IGFscmVhZHkgcnVubmluZyIKKy0JCWVjaG9fZmFpbHVyZQorKwkJZWNobyAtbiAiJHByb2c6IGFscmVhZHkgcnVubmluZyAiCisrCQlmYWlsdXJlCisgCQllY2hvCisgCQlyZXR1cm4gMQorIAlmaQorIAlpZiBbICIkVkVSQk9TRSIgPSAieWVzIiBdOyB0aGVuCistCSAgICBkYWVtb24gL3Vzci9zYmluLyR7cHJvZ30gLXYKKysJICAgIC91c3Ivc2Jpbi8ke3Byb2d9IC12CisgCWVsc2UKKy0JICAgIGRhZW1vbiAvdXNyL3NiaW4vJHtwcm9nfQorKwkgICAgL3Vzci9zYmluLyR7cHJvZ30KKyAgICAgICAgIGZpCisgCVJFVFZBTD0kPworIAlbICRSRVRWQUwgLWVxIDAgXSAmJiB0b3VjaCAkbG9ja2ZpbGUKKy0JWyAkUkVUVkFMIC1lcSAwIF0gJiYgZWNob19zdWNjZXNzCistCVsgJFJFVFZBTCAtbmUgMCBdICYmIGVjaG9fZmFpbHVyZQorKwlbICRSRVRWQUwgLWVxIDAgXSAmJiBzdWNjZXNzCisrCVsgJFJFVFZBTCAtbmUgMCBdICYmIGZhaWx1cmUKKyAJZWNobworIAlyZXR1cm4gJFJFVFZBTAorIH0KK0BAIC01MCw4ICs1MCwxMCBAQAorIAkjIGFuZCByZWJvb3QgdGhlIGJveC4KKyAJa2lsbHByb2MgJHByb2cgLVRFUk0KKyAJUkVUVkFMPSQ/CistCWVjaG8KKyAJWyAkUkVUVkFMIC1lcSAwIF0gJiYgcm0gLWYgJGxvY2tmaWxlICRwaWRmaWxlCisrCVsgJFJFVFZBTCAtZXEgMCBdICYmIHN1Y2Nlc3MKKysJWyAkUkVUVkFMIC1uZSAwIF0gJiYgZmFpbHVyZQorKwllY2hvCisgCXJldHVybiAkUkVUVkFMCisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWMwYThlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSB3YXRjaGRvZyIKK0RFU0NSSVBUSU9OID0gIldhdGNoZG9nIGlzIGEgZGFlbW9uIHRoYXQgY2hlY2tzIGlmIHlvdXIgc3lzdGVtIGlzIHN0aWxsIFwKK3dvcmtpbmcuIElmIHByb2dyYW1zIGluIHVzZXIgc3BhY2UgYXJlIG5vdCBsb25nZXIgZXhlY3V0ZWQgXAoraXQgd2lsbCByZWJvb3QgdGhlIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd2F0Y2hkb2cuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNzIwMzAmYXRpZD04NjAxOTQiCisKK0xJQ0VOU0UgPSAiR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lY2MwNTUxYmY1NGFkOTdmNmI1NDE3MjBmODRkNjU2OSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vd2F0Y2hkb2cvd2F0Y2hkb2ctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LXBpbmctZmFpbHVyZS5wYXRjaCBcCisJICAgZmlsZTovL3dhdGNoZG9nLWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly93YXRjaGRvZy1jb25mLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWIyZGJhMGM1OTM5NDJmNGFjYzEwMGJjYTBkNTYwYzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjIwYjJmNDllOTg3OWYyZTg1YzczZDRjMWY0MjJmOTEwMWU2YjM4ZTgyNGZlYTI0MTRiZWZkOGJiNjg2NmFkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gIndhdGNoZG9nLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTUgMSAyIDMgNCA1IC4gc3RvcCA4NSAwIDYgLiIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1zb2Z0ZG9nIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1EICR7U30vcmVkaGF0L3dhdGNoZG9nLmluaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93YXRjaGRvZy5zaAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDliODk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJDb25zb2xlIFVSTCBkb3dubG9hZCB1dGlsaXR5IHN1cHBvcnRpbmcgSFRUUCwgRlRQLCBldGMiCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3dnZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImdudXRscyB6bGliIGxpYnBjcmUiCisKK0lOQ19QUiA9ICJyMTYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtaXB2NiAtLXdpdGgtc3NsPWdudXRscyAtLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLWlyaSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmdudXRscy1wcmVmaXggYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oPW5vIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ3Z2V0IgorQUxURVJOQVRJVkVfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gImNhLWNlcnRpZmljYXRlcyIKKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1dWlkXSA9ICItLXdpdGgtbGlidXVpZCwgLS13aXRob3V0LWxpYnV1aWQsdXRpbC1saW51eCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNjNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHdnZXQtMS4xNi4zL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdnZXQtMS4xNi4zLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgd2dldC0xLjE2LjMvbGliL01ha2VmaWxlLmFtCitAQCAtODQ2LDcgKzg0Niw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvZml4X21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTJlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB3Z2V0LTEuMTIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2dldC0xLjEyLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDktMjIgMDk6Mzk6NDkuMDAwMDAwMDAwIC0wNzAwCisrKysgd2dldC0xLjEyL2NvbmZpZ3VyZS5hYwkyMDExLTEwLTE5IDIwOjMyOjUzLjcxNDgxMjE2MCAtMDcwMAorQEAgLTE3Nyw3ICsxNzcsNyBAQAorIGRubCBHZXR0ZXh0CisgZG5sCisgQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSxbbmVlZC1uZ2V0dGV4dF0pCistQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xN10pCisrQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xOF0pCisgCisgQUNfUFJPR19SQU5MSUIKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE2LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzNGE0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiCkBAIC0wLDAgKzEsOSBAQAorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3dnZXQvd2dldC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4X21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImY2MWQ5MDExYjk5ZjgyNDEwNmE1ZDVhMDVkZDBmNjNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmMWM2ZDA5ZDcxNDhjMWMyZDlmZDBlYTY1NWRjZjRkY2M0MDdkZWIyZGIzMmQ0MTI2MjUxY2EwMjQ1Y2I2NzAiCisKK3JlcXVpcmUgd2dldC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWNkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b21ha2UgZm9yZWlnbiBzdHJpY3RuZXNzCisKK1VzZSBmb3JlaWduIHN0cmljdG5lc3MgdG8gYXZvaWQgYXV0b21ha2UgZXJyb3JzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIG5vIGxvbmdlciBhY3RpdmVdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA1ICsrKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGIzMGI2ZjUuLmJkMzIyMmMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEsNiArMSw3IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCistQUNfSU5JVCh3aGljaC5jKQorLUFNX0lOSVRfQVVUT01BS0Uod2hpY2gsIDIuMTgpCisrQUNfSU5JVChbd2hpY2hdLFsyLjE4XSkKKytBQ19DT05GSUdfU1JDRElSKHdoaWNoLmMpCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKKy0tIAorMS43LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWIxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0aGlzIGlzIDIuMTgoR1BMdjIpIHNwZWNpZmljXQorCisjIGdsaWJjIGFsc28gaW1wbGVtZW50cyB0aGUgZnVuY3Rpb24gZ3JvdXBfbWVtYmVyLiBUbyBhdm9pZCBuYW1lIGNvbmZsaWN0LAorIyBoZXJlIGxldCB1cyBhcHBlbmQgYSAiXyIgdG8gd2hpY2gncyB2ZXJzaW9uLgorIworIyBTaWduZWQtb2ZmLWJ5IERleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPiwgMjAxMC0wOC0yMAorIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKKworLS0tIHdoaWNoLTIuMTgvYmFzaC5jCisrKysgd2hpY2gtMi4xOC9iYXNoLmMKK0BAIC00NSw3ICs0NSwxMiBAQAorICAqIC0gY2hhbmdlZCBhbGwgb2NjdXJlbmNlcyBvZiAnZ2lkX3QnIGludG8gJ0dJRF9UJy4KKyAgKiAtIGV4cG9ydGVkIGZ1bmN0aW9ucyBuZWVkZWQgaW4gd2hpY2guYworICAqLworLXN0YXRpYyBpbnQgZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpOworKworKy8qCisrICogZ2xpYmMgYWxzbyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbiBncm91cF9tZW1iZXIuIFRvIGF2b2lkIG5hbWUgY29uZmxpY3QsCisrICogaGVyZSBsZXQgdXMgYXBwZW5kIGEgIl8iIHRvIHdoaWNoJ3MgdmVyc2lvbi4KKysgKi8KKytzdGF0aWMgaW50IF9ncm91cF9tZW1iZXIgKEdJRF9UIGdpZCk7Cisgc3RhdGljIGNoYXIqIGV4dHJhY3RfY29sb25fdW5pdCAoY2hhciBjb25zdCogc3RyaW5nLCBpbnQgKnBfaW5kZXgpOworIAorIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitAQCAtMjAwLDggKzIwNSw4IEBACisgCisgLyogRnJvbSBiYXNoLTIuMDViIC8gZ2VuZXJhbC5jIC8gbGluZSA4MDUgKi8KKyAvKiBSZXR1cm4gbm9uLXplcm8gaWYgR0lEIGlzIG9uZSB0aGF0IHdlIGhhdmUgaW4gb3VyIGdyb3VwcyBsaXN0LiAqLworLWludAorLWdyb3VwX21lbWJlciAoR0lEX1QgZ2lkKQorK3N0YXRpYyBpbnQKKytfZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpCisgeworICNpZiBkZWZpbmVkIChIQVZFX0dFVEdST1VQUykKKyAgIHJlZ2lzdGVyIGludCBpOworQEAgLTI5MCw3ICsyOTUsNyBAQAorICAgICByZXR1cm4gKFhfQklUICh1X21vZGVfYml0cyAoZmluZm8uc3RfbW9kZSkpKSA/IChGU19FWElTVFMgfCBGU19FWEVDQUJMRSkgOiBGU19FWElTVFM7CisgCisgICAvKiBPdGhlcndpc2UsIGlmIHdlIGFyZSBpbiB0aGUgb3duaW5nIGdyb3VwLCB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgYXBwbHkuICovCistICBpZiAoZ3JvdXBfbWVtYmVyIChmaW5mby5zdF9naWQpKQorKyAgaWYgKF9ncm91cF9tZW1iZXIgKGZpbmZvLnN0X2dpZCkpCisgICAgIHJldHVybiAoWF9CSVQgKGdfbW9kZV9iaXRzIChmaW5mby5zdF9tb2RlKSkpID8gKEZTX0VYSVNUUyB8IEZTX0VYRUNBQkxFKSA6IEZTX0VYSVNUUzsKKyAKKyAgIC8qIE90aGVyd2lzZSwgaWYgd2UgYXJlIGluIHRoZSBvdGhlciBncm91cCwgdGhlIG90aGVyIHBlcm1pc3Npb25zIGFwcGx5LiAqLworQEAgLTMzMSw3ICszMzYsNyBAQAorIC8qIEdpdmVuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdW5pdHMgb2YgaW5mb3JtYXRpb24gc2VwYXJhdGVkIGJ5IGNvbG9ucywKKyAgICByZXR1cm4gdGhlIG5leHQgb25lIHBvaW50ZWQgdG8gYnkgKFBfSU5ERVgpLCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBtb3JlLgorICAgIEFkdmFuY2UgKFBfSU5ERVgpIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGNvbG9uLiAqLworLWNoYXIqCisrc3RhdGljIGNoYXIqCisgZXh0cmFjdF9jb2xvbl91bml0IChjaGFyIGNvbnN0KiBzdHJpbmcsIGludCogcF9pbmRleCkKKyB7CisgICBpbnQgaSwgc3RhcnQsIGxlbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMjEvYXV0b21ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwZjJlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1VwZGF0ZSBhdXRvY29uZiBwcm9sb2d1ZSB0byB1c2UgImZvcmVpZ24iIHN0cmljdG5lc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZDk3NDQ2MS4uYTIwZGZhOCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMSw3ICsxLDcgQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyBBQ19JTklUKFt3aGljaF0sIFsyLjIxXSkKKyBBQ19DT05GSUdfU1JDRElSKHdoaWNoLmMpCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2Y2M5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiRGlzcGxheXMgdGhlIGZ1bGwgcGF0aCBvZiBzaGVsbCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OID0gIldoaWNoIGlzIGEgdXRpbGl0eSB0aGF0IHByaW50cyBvdXQgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgXAorZXhlY3V0YWJsZXMgdGhhdCBiYXNoKDEpIHdvdWxkIGV4ZWN1dGUgd2hlbiB0aGUgcGFzc2VkIFwKK3Byb2dyYW0gbmFtZXMgd291bGQgaGF2ZSBiZWVuIGVudGVyZWQgb24gdGhlIHNoZWxsIHByb21wdC4gXAorSXQgZG9lcyB0aGlzIGJ5IHVzaW5nIHRoZSBleGFjdCBzYW1lIGFsZ29yaXRobSBhcyBiYXNoLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYXJsbzE3LmhvbWUueHM0YWxsLm5sL3doaWNoLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzL3doaWNoL3doaWNoLTIuMTgudGFyLmd6LzQyZDUxOTM4ZTQ4YjkxZjZlMTlmYWJmMjE2ZjVjM2U5L3doaWNoLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MmQ1MTkzOGU0OGI5MWY2ZTE5ZmFiZjIxNmY1YzNlOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NDQ1Y2Q3ZTAyZWMwYzI2YTQ0ZmQ1NjA5ODQ2NGRlZDA2NGJhNWQ5M2RkMmUxNWVjMTI0MTBiYTU2YjJlNTQ0IgorCitERVBFTkRTID0gImN3YXV0b21hY3Jvcy1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlPTEQ9IkBBQ0xPQ0FMX0NXRkxBR1NAIgorCU5FVz0iLUkgJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyR7ZGF0YWRpcn0vY3dhdXRvbWFjcm9zL200IgorCXNlZCAtaSAicyMke09MRH0jJHtORVd9I2ciIGBncmVwIC1ybCAke09MRH0gJHtTfWAKK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAid2hpY2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2ODdmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiRGlzcGxheXMgdGhlIGZ1bGwgcGF0aCBvZiBzaGVsbCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OID0gIldoaWNoIGlzIGEgdXRpbGl0eSB0aGF0IHByaW50cyBvdXQgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgXAorZXhlY3V0YWJsZXMgdGhhdCBiYXNoKDEpIHdvdWxkIGV4ZWN1dGUgd2hlbiB0aGUgcGFzc2VkIFwKK3Byb2dyYW0gbmFtZXMgd291bGQgaGF2ZSBiZWVuIGVudGVyZWQgb24gdGhlIHNoZWxsIHByb21wdC4gXAorSXQgZG9lcyB0aGlzIGJ5IHVzaW5nIHRoZSBleGFjdCBzYW1lIGFsZ29yaXRobSBhcyBiYXNoLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYXJsbzE3LmhvbWUueHM0YWxsLm5sL3doaWNoLyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3doaWNoLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YTk5NjM2OTNhZjIyNzJlN2E4ZGY2ZjIzMTE2NGU3YTIiCitERVBFTkRTICAgICA9ICJjd2F1dG9tYWNyb3MtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUFIgPSAicjMiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaWJlcnR5IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vd2hpY2gvd2hpY2gtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDk3ZmYxYTMyNGFlMDJlMGEzYjAzNjlmMDdhNzU0NGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjRhMjQ1Yjk0MTI0YjM3N2Q4YjQ5NjQ2YmY0MjFmOTE1NWQzNmFhNzYxNGI2ZWJmODM3MDVkM2ZmYzc2ZWFhZCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICdzJUBBQ0xPQ0FMX0NXRkxBR1NAJS1JICR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3Ivc2hhcmUvY3dhdXRvbWFjcm9zL200JWcnICR7U30vTWFrZWZpbGUuYW0gJHtTfS90aWxkZS9NYWtlZmlsZS5hbQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ3aGljaCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2QxYmFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoCkBAIC0wLDAgKzEsNjcyIEBACitGcm9tIDE3NGFhNzIwNmY0YjMwOGQ0ZDIyOTJiYjgwNjdhMDdkOGNjNzE1YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAyOSBBcHIgMjAxNCAwNzoyOTozMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBSZWluc3RhdGUgeGRnLXRlcm1pbmFsCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbUmV2ZXJ0XQorLS0tCisgc2NyaXB0cy9NYWtlZmlsZS5pbiAgfCAgIDYgKy0KKyBzY3JpcHRzL3hkZy10ZXJtaW5hbCB8IDYyMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYyNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDc1NSBzY3JpcHRzL3hkZy10ZXJtaW5hbAorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5pbiBiL3NjcmlwdHMvTWFrZWZpbGUuaW4KK2luZGV4IDJjN2QyYWMuLmJlZjEwZDEgMTAwNjQ0CistLS0gYS9zY3JpcHRzL01ha2VmaWxlLmluCisrKysgYi9zY3JpcHRzL01ha2VmaWxlLmluCitAQCAtMjAsMTEgKzIwLDExIEBAIFNDUklQVFMJCT0gXAorICAgICB4ZGctb3BlbiBcCisgICAgIHhkZy1lbWFpbCBcCisgICAgIHhkZy1zY3JlZW5zYXZlciBcCistICAgIHhkZy1zZXR0aW5ncworKyAgICB4ZGctc2V0dGluZ3MgXAorKyAgICB4ZGctdGVybWluYWwKKyAjICAgIHhkZy1zdQorICMgICAgeGRnLWNvcHkgXAorICMgICAgeGRnLWZpbGUtZGlhbG9nCistIyAgICB4ZGctdGVybWluYWwKKyAKKyBNQU5QQUdFUz0JJChTQ1JJUFRTOiU9bWFuLyUuMSkKKyBXRUJQQUdFUz0JJChTQ1JJUFRTOiU9JS5odG1sKQorQEAgLTQyLDcgKzQyLDcgQEAgcmVsZWFzZToJc2NyaXB0cyBodG1sIG1hbgorIAlybSAtZiB4ZGctKi5pbiAqfiBIQUNLSU5HIGdlbmVyYXRlLWhlbHAtc2NyaXB0LmF3aworIAlybSAtcmYgZGVzYy8KKyAJcm0gLXJmIHhzbC8KKy0Jcm0gLWYgeGRnLWZpbGUtZGlhbG9nIHhkZy1zdSB4ZGctY29weSB4ZGctdGVybWluYWwKKysJcm0gLWYgeGRnLWZpbGUtZGlhbG9nIHhkZy1zdSB4ZGctY29weQorIAorIGRpc3RjbGVhbjogY2xlYW4KKyAJcm0gLWYgTWFrZWZpbGUKK2RpZmYgLS1naXQgYS9zY3JpcHRzL3hkZy10ZXJtaW5hbCBiL3NjcmlwdHMveGRnLXRlcm1pbmFsCituZXcgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMDAwMDAwMC4uNGJkOTIwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvc2NyaXB0cy94ZGctdGVybWluYWwKK0BAIC0wLDAgKzEsNjIyIEBACisrIyEvYmluL3NoCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgICB4ZGctdGVybWluYWwKKysjCisrIyAgIFV0aWxpdHkgc2NyaXB0IHRvIG9wZW4gdGhlIHJlZ2lzdGVyZWQgdGVybWluYWwgZW11bGF0b3IKKysjCisrIyAgIFJlZmVyIHRvIHRoZSB1c2FnZSgpIGZ1bmN0aW9uIGJlbG93IGZvciB1c2FnZS4KKysjCisrIyAgIENvcHlyaWdodCAyMDA5LTIwMTAsIEZhdGhpIEJvdWRyYSA8ZmFib0BmcmVlZGVza3RvcC5vcmc+CisrIyAgIENvcHlyaWdodCAyMDA5LTIwMTAsIFJleCBEaWV0ZXIgPHJkaWV0ZXJAZmVkb3JhcHJvamVjdC5vcmc+CisrIyAgIENvcHlyaWdodCAyMDA2LCBLZXZpbiBLcmFtbWVyIDxrZXZpbi5rcmFtbWVyQGdteC5hdD4KKysjCisrIyAgIExJQ0VOU0U6CisrIworKyMgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKyMgICBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorKyMgICB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisrIyAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorKyMgICBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKysjICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysjCisrIyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisrIyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKyMKKysjICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKysjICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrIyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisrIyAgIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisrIyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorKyMgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKysjICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKyMKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrbWFudWFscGFnZSgpCisreworK2NhdCA8PCBfTUFOVUFMUEFHRQorK05hbWUKKysKKysgICB4ZGctdGVybWluYWwgLSBvcGVucyB0aGUgdXNlcidzIHByZWZlcnJlZCB0ZXJtaW5hbCBlbXVsYXRvciBhcHBsaWNhdGlvbgorKworK1N5bm9wc2lzCisrCisrICAgeGRnLXRlcm1pbmFsIFtjb21tYW5kXQorKworKyAgIHhkZy10ZXJtaW5hbCB7IC0taGVscCB8IC0tbWFudWFsIHwgLS12ZXJzaW9uIH0KKysKKytEZXNjcmlwdGlvbgorKworKyAgIHhkZy10ZXJtaW5hbCBvcGVucyB0aGUgdXNlcidzIHByZWZlcnJlZCB0ZXJtaW5hbCBlbXVsYXRvciBhcHBsaWNhdGlvbi4gSWYKKysgICBhIGNvbW1hbmQgaXMgcHJvdmlkZWQgdGhlIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgc2hlbGwgd2l0aGluIHRoZQorKyAgIG5ld2x5IG9wZW5lZCB0ZXJtaW5hbCB3aW5kb3cuCisrCisrICAgeGRnLXRlcm1pbmFsIGlzIGZvciB1c2UgaW5zaWRlIGEgZGVza3RvcCBzZXNzaW9uIG9ubHkuIEl0IGlzIG5vdAorKyAgIHJlY29tbWVuZGVkIHRvIHVzZSB4ZGctdGVybWluYWwgYXMgcm9vdC4KKysKKytPcHRpb25zCisrCisrICAgLS1oZWxwCisrICAgICAgICAgICBTaG93IGNvbW1hbmQgc3lub3BzaXMuCisrCisrICAgLS1tYW51YWwKKysgICAgICAgICAgIFNob3cgdGhpcyBtYW51YWwgcGFnZS4KKysKKysgICAtLXZlcnNpb24KKysgICAgICAgICAgIFNob3cgdGhlIHhkZy11dGlscyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorKworK0V4aXQgQ29kZXMKKysKKysgICBBbiBleGl0IGNvZGUgb2YgMCBpbmRpY2F0ZXMgc3VjY2VzcyB3aGlsZSBhIG5vbi16ZXJvIGV4aXQgY29kZSBpbmRpY2F0ZXMKKysgICBmYWlsdXJlLiBUaGUgZm9sbG93aW5nIGZhaWx1cmUgY29kZXMgY2FuIGJlIHJldHVybmVkOgorKworKyAgIDEKKysgICAgICAgICAgIEVycm9yIGluIGNvbW1hbmQgbGluZSBzeW50YXguCisrCisrICAgMworKyAgICAgICAgICAgQSByZXF1aXJlZCB0b29sIGNvdWxkIG5vdCBiZSBmb3VuZC4KKysKKysgICA0CisrICAgICAgICAgICBUaGUgYWN0aW9uIGZhaWxlZC4KKysKKytFeGFtcGxlcworKworKyB4ZGctdGVybWluYWwKKysKKysgICBPcGVucyB0aGUgdXNlcidzIGRlZmF1bHQgdGVybWluYWwgZW11bGF0b3IsIGp1c3Qgc3RhcnRpbmcgYW4gaW50ZXJhY3RpdmUKKysgICBzaGVsbC4KKysKKysgeGRnLXRlcm1pbmFsIHRvcAorKworKyAgIE9wZW5zIHRoZSB1c2VyJ3MgZGVmYXVsdCB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgbGV0cyBpdCBydW4gdGhlIHRvcAorKyAgIGV4ZWN1dGFibGUuCisrX01BTlVBTFBBR0UKKyt9CisrCisrdXNhZ2UoKQorK3sKKytjYXQgPDwgX1VTQUdFCisrICAgeGRnLXRlcm1pbmFsIC0gb3BlbnMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGVybWluYWwgZW11bGF0b3IgYXBwbGljYXRpb24KKysKKytTeW5vcHNpcworKworKyAgIHhkZy10ZXJtaW5hbCBbY29tbWFuZF0KKysKKysgICB4ZGctdGVybWluYWwgeyAtLWhlbHAgfCAtLW1hbnVhbCB8IC0tdmVyc2lvbiB9CisrCisrX1VTQUdFCisrfQorKworKyNAeGRnLXV0aWxzLWNvbW1vbkAKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgICBDb21tb24gdXRpbGl0eSBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gYWxsIFhERyB3cmFwcGVyIHNjcmlwdHMKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworK0RFQlVHKCkKKyt7CisrICBbIC16ICIke1hER19VVElMU19ERUJVR19MRVZFTH0iIF0gJiYgcmV0dXJuIDA7CisrICBbICR7WERHX1VUSUxTX0RFQlVHX0xFVkVMfSAtbHQgJDEgXSAmJiByZXR1cm4gMDsKKysgIHNoaWZ0CisrICBlY2hvICIkQCIgPiYyCisrfQorKworKyMgVGhpcyBoYW5kbGVzIGJhY2tzbGFzaGVzIGJ1dCBub3QgcXVvdGUgbWFya3MuCisrZmlyc3Rfd29yZCgpCisreworKyAgICByZWFkIGZpcnN0IHJlc3QKKysgICAgZWNobyAiJGZpcnN0IgorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgbWFwIGEgYmluYXJ5IHRvIGEgLmRlc2t0b3AgZmlsZQorK2JpbmFyeV90b19kZXNrdG9wX2ZpbGUoKQorK3sKKysgICAgc2VhcmNoPSIke1hER19EQVRBX0hPTUU6LSRIT01FLy5sb2NhbC9zaGFyZX06JHtYREdfREFUQV9ESVJTOi0vdXNyL2xvY2FsL3NoYXJlOi91c3Ivc2hhcmV9IgorKyAgICBiaW5hcnk9ImB3aGljaCAiJDEiYCIKKysgICAgYmluYXJ5PSJgcmVhZGxpbmsgLWYgIiRiaW5hcnkiYCIKKysgICAgYmFzZT0iYGJhc2VuYW1lICIkYmluYXJ5ImAiCisrICAgIElGUz06CisrICAgIGZvciBkaXIgaW4gJHNlYXJjaDsgZG8KKysgICAgICAgIHVuc2V0IElGUworKyAgICAgICAgWyAiJGRpciIgXSB8fCBjb250aW51ZQorKyAgICAgICAgWyAtZCAiJGRpci9hcHBsaWNhdGlvbnMiIF0gfHwgWyAtZCAiJGRpci9hcHBsbmsiIF0gfHwgY29udGludWUKKysgICAgICAgIGZvciBmaWxlIGluICIkZGlyIi9hcHBsaWNhdGlvbnMvKi5kZXNrdG9wICIkZGlyIi9hcHBsaWNhdGlvbnMvKi8qLmRlc2t0b3AgIiRkaXIiL2FwcGxuay8qLmRlc2t0b3AgIiRkaXIiL2FwcGxuay8qLyouZGVza3RvcDsgZG8KKysgICAgICAgICAgICBbIC1yICIkZmlsZSIgXSB8fCBjb250aW51ZQorKyAgICAgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIGl0J3Mgd29ydGggdGhlIHByb2Nlc3NpbmcuCisrICAgICAgICAgICAgZ3JlcCAtcSAiXkV4ZWMuKiRiYXNlIiAiJGZpbGUiIHx8IGNvbnRpbnVlCisrICAgICAgICAgICAgIyBNYWtlIHN1cmUgaXQncyBhIHZpc2libGUgZGVza3RvcCBmaWxlIChlLmcuIG5vdCAicHJlZmVycmVkLXdlYi1icm93c2VyLmRlc2t0b3AiKS4KKysgICAgICAgICAgICBncmVwIC1FcSAiXihOb0Rpc3BsYXl8SGlkZGVuKT10cnVlIiAiJGZpbGUiICYmIGNvbnRpbnVlCisrICAgICAgICAgICAgY29tbWFuZD0iYGdyZXAgLUUgIl5FeGVjKFxbW15dPV0qXSk/PSIgIiRmaWxlIiB8IGN1dCAtZD0gLWYgMi0gfCBmaXJzdF93b3JkYCIKKysgICAgICAgICAgICBjb21tYW5kPSJgd2hpY2ggIiRjb21tYW5kImAiCisrICAgICAgICAgICAgaWYgWyB4ImByZWFkbGluayAtZiAiJGNvbW1hbmQiYCIgPSB4IiRiaW5hcnkiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgIyBGaXggYW55IGRvdWJsZSBzbGFzaGVzIHRoYXQgZ290IGFkZGVkIHBhdGggY29tcG9zaXRpb24KKysgICAgICAgICAgICAgICAgZWNobyAiJGZpbGUiIHwgc2VkIC1lICdzLC8vKiwvLGcnCisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIGZpCisrICAgICAgICBkb25lCisrICAgIGRvbmUKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIG1hcCBhIC5kZXNrdG9wIGZpbGUgdG8gYSBiaW5hcnkKKysjIyBGSVhNRTogaGFuZGxlIHZlbmRvciBkaXIgY2FzZQorK2Rlc2t0b3BfZmlsZV90b19iaW5hcnkoKQorK3sKKysgICAgc2VhcmNoPSIke1hER19EQVRBX0hPTUU6LSRIT01FLy5sb2NhbC9zaGFyZX06JHtYREdfREFUQV9ESVJTOi0vdXNyL2xvY2FsL3NoYXJlOi91c3Ivc2hhcmV9IgorKyAgICBkZXNrdG9wPSJgYmFzZW5hbWUgIiQxImAiCisrICAgIElGUz06CisrICAgIGZvciBkaXIgaW4gJHNlYXJjaDsgZG8KKysgICAgICAgIHVuc2V0IElGUworKyAgICAgICAgWyAiJGRpciIgXSAmJiBbIC1kICIkZGlyL2FwcGxpY2F0aW9ucyIgXSB8fCBjb250aW51ZQorKyAgICAgICAgZmlsZT0iJGRpci9hcHBsaWNhdGlvbnMvJGRlc2t0b3AiCisrICAgICAgICBbIC1yICIkZmlsZSIgXSB8fCBjb250aW51ZQorKyAgICAgICAgIyBSZW1vdmUgYW55IGFyZ3VtZW50cyAoJUYsICVmLCAlVSwgJXUsIGV0Yy4pLgorKyAgICAgICAgY29tbWFuZD0iYGdyZXAgLUUgIl5FeGVjKFxbW15dPV0qXSk/PSIgIiRmaWxlIiB8IGN1dCAtZD0gLWYgMi0gfCBmaXJzdF93b3JkYCIKKysgICAgICAgIGNvbW1hbmQ9ImB3aGljaCAiJGNvbW1hbmQiYCIKKysgICAgICAgIHJlYWRsaW5rIC1mICIkY29tbWFuZCIKKysgICAgICAgIHJldHVybgorKyAgICBkb25lCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBzdWNjZXNzZnVsbHkgY29tcGxldGluZyB0aGUgZGVzaXJlZCBvcGVyYXRpb24KKysKKytleGl0X3N1Y2Nlc3MoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICIkQCIKKysgICAgICAgIGVjaG8KKysgICAgZmkKKysKKysgICAgZXhpdCAwCisrfQorKworKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gbWFsZm9ybWVkIGFyZ3VtZW50cywgbm90IGVub3VnaCBhcmd1bWVudHMKKysjIG9yIG1pc3NpbmcgcmVxdWlyZWQgb3B0aW9uLgorKyMgcHJpbnRzIHVzYWdlIGluZm9ybWF0aW9uCisrCisrZXhpdF9mYWlsdXJlX3N5bnRheCgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICAgICAgZWNobyAiVHJ5ICd4ZGctdGVybWluYWwgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorKyAgICBlbHNlCisrICAgICAgICB1c2FnZQorKyAgICAgICAgZWNobyAiVXNlICdtYW4geGRnLXRlcm1pbmFsJyBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIKKysgICAgZmkKKysKKysgICAgZXhpdCAxCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBtaXNzaW5nIGZpbGUgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZQorKworK2V4aXRfZmFpbHVyZV9maWxlX21pc3NpbmcoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCAyCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBmYWlsdXJlIHRvIGxvY2F0ZSBuZWNlc3NhcnkgdG9vbCBhcHBsaWNhdGlvbnMKKysKKytleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCAzCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBmYWlsdXJlIHJldHVybmVkIGJ5IGEgdG9vbCBhcHBsaWNhdGlvbgorKworK2V4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNAorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byByZWFkIGEgc3BlY2lmaWVkIGZpbGUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3JlYWQoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCA1CisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIGluc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvIHdyaXRlIGEgc3BlY2lmaWVkIGZpbGUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3dyaXRlKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNgorK30KKysKKytjaGVja19pbnB1dF9maWxlKCkKKyt7CisrICAgIGlmIFsgISAtZSAiJDEiIF07IHRoZW4KKysgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX21pc3NpbmcgImZpbGUgJyQxJyBkb2VzIG5vdCBleGlzdCIKKysgICAgZmkKKysgICAgaWYgWyAhIC1yICIkMSIgXTsgdGhlbgorKyAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl9yZWFkICJubyBwZXJtaXNzaW9uIHRvIHJlYWQgZmlsZSAnJDEnIgorKyAgICBmaQorK30KKysKKytjaGVja192ZW5kb3JfcHJlZml4KCkKKyt7CisrICAgIGZpbGVfbGFiZWw9IiQyIgorKyAgICBbIC1uICIkZmlsZV9sYWJlbCIgXSB8fCBmaWxlX2xhYmVsPSJmaWxlbmFtZSIKKysgICAgZmlsZT1gYmFzZW5hbWUgIiQxImAKKysgICAgY2FzZSAiJGZpbGUiIGluCisrICAgICAgIFtbOmFscGhhOl1dKi0qKQorKyAgICAgICAgIHJldHVybgorKyAgICAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkZmlsZV9sYWJlbCAnJGZpbGUnIGRvZXMgbm90IGhhdmUgYSBwcm9wZXIgdmVuZG9yIHByZWZpeCIgPiYyCisrICAgIGVjaG8gJ0EgdmVuZG9yIHByZWZpeCBjb25zaXN0cyBvZiBhbHBoYSBjaGFyYWN0ZXJzIChbYS16QS1aXSkgYW5kIGlzIHRlcm1pbmF0ZWQnID4mMgorKyAgICBlY2hvICd3aXRoIGEgZGFzaCAoIi0iKS4gQW4gZXhhbXBsZSAnIiRmaWxlX2xhYmVsIicgaXMgJyInZXhhbXBsZS0kZmlsZSciID4mMgorKyAgICBlY2hvICJVc2UgLS1ub3ZlbmRvciB0byBvdmVycmlkZSBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIgPiYyCisrICAgIGV4aXQgMQorK30KKysKKytjaGVja19vdXRwdXRfZmlsZSgpCisreworKyAgICAjIGlmIHRoZSBmaWxlIGV4aXN0cywgY2hlY2sgaWYgaXQgaXMgd3JpdGVhYmxlCisrICAgICMgaWYgaXQgZG9lcyBub3QgZXhpc3RzLCBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byB3cml0ZSBvbiB0aGUgZGlyZWN0b3J5CisrICAgIGlmIFsgLWUgIiQxIiBdOyB0aGVuCisrICAgICAgICBpZiBbICEgLXcgIiQxIiBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl93cml0ZSAibm8gcGVybWlzc2lvbiB0byB3cml0ZSB0byBmaWxlICckMSciCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBESVI9YGRpcm5hbWUgIiQxImAKKysgICAgICAgIGlmIFsgISAtdyAiJERJUiIgXSB8fCBbICEgLXggIiRESVIiIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3dyaXRlICJubyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlICckMSciCisrICAgICAgICBmaQorKyAgICBmaQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2tzIGZvciBzaGFyZWQgY29tbWFuZHMsIGUuZy4gLS1oZWxwCisrCisrY2hlY2tfY29tbW9uX2NvbW1hbmRzKCkKKyt7CisrICAgIHdoaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisrICAgICAgICBwYXJtPSIkMSIKKysgICAgICAgIHNoaWZ0CisrCisrICAgICAgICBjYXNlICIkcGFybSIgaW4KKysgICAgICAgICAgICAtLWhlbHApCisrICAgICAgICAgICAgdXNhZ2UKKysgICAgICAgICAgICBlY2hvICJVc2UgJ21hbiB4ZGctdGVybWluYWwnIG9yICd4ZGctdGVybWluYWwgLS1tYW51YWwnIGZvciBhZGRpdGlvbmFsIGluZm8uIgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrCisrICAgICAgICAgICAgLS1tYW51YWwpCisrICAgICAgICAgICAgbWFudWFscGFnZQorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrCisrICAgICAgICAgICAgLS12ZXJzaW9uKQorKyAgICAgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbCAxLjEuMCByYzEiCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICAgICAgOzsKKysgICAgICAgIGVzYWMKKysgICAgZG9uZQorK30KKysKKytjaGVja19jb21tb25fY29tbWFuZHMgIiRAIgorKworK1sgLXogIiR7WERHX1VUSUxTX0RFQlVHX0xFVkVMfSIgXSAmJiB1bnNldCBYREdfVVRJTFNfREVCVUdfTEVWRUw7CisraWYgWyAke1hER19VVElMU19ERUJVR19MRVZFTC0wfSAtbHQgMSBdOyB0aGVuCisrICAgICMgQmUgc2lsZW50CisrICAgIHhkZ19yZWRpcmVjdF9vdXRwdXQ9IiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwiCisrZWxzZQorKyAgICAjIEFsbCBvdXRwdXQgdG8gc3RkZXJyCisrICAgIHhkZ19yZWRpcmVjdF9vdXRwdXQ9IiA+JjIiCisrZmkKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrcyBmb3Iga25vd24gZGVza3RvcCBlbnZpcm9ubWVudHMKKysjIHNldCB2YXJpYWJsZSBERSB0byB0aGUgZGVza3RvcCBlbnZpcm9ubWVudHMgbmFtZSwgbG93ZXJjYXNlCisrCisrZGV0ZWN0REUoKQorK3sKKysgICAgIyBzZWUgaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjQKKysgICAgdW5zZXQgR1JFUF9PUFRJT05TCisrCisrICAgIGlmIFsgLW4gIiR7WERHX0NVUlJFTlRfREVTS1RPUH0iIF07IHRoZW4KKysgICAgICBjYXNlICIke1hER19DVVJSRU5UX0RFU0tUT1B9IiBpbgorKyAgICAgICAgIEVOTElHSFRFTk1FTlQpCisrICAgICAgICAgICBERT1lbmxpZ2h0ZW5tZW50OworKyAgICAgICAgICAgOzsKKysgICAgICAgICBHTk9NRSkKKysgICAgICAgICAgIERFPWdub21lOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBLREUpCisrICAgICAgICAgICBERT1rZGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIExYREUpCisrICAgICAgICAgICBERT1seGRlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBNQVRFKQorKyAgICAgICAgICAgREU9bWF0ZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgWEZDRSkKKysgICAgICAgICAgIERFPXhmY2UKKysgICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBjbGFzc2ljIGZhbGxiYWNrcworKyAgICAgIGlmIFsgeCIkS0RFX0ZVTExfU0VTU0lPTiIgIT0geCIiIF07IHRoZW4gREU9a2RlOworKyAgICAgIGVsaWYgWyB4IiRHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiICE9IHgiIiBdOyB0aGVuIERFPWdub21lOworKyAgICAgIGVsaWYgWyB4IiRNQVRFX0RFU0tUT1BfU0VTU0lPTl9JRCIgIT0geCIiIF07IHRoZW4gREU9bWF0ZTsKKysgICAgICBlbGlmIGBkYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLWRlc3Q9b3JnLmZyZWVkZXNrdG9wLkRCdXMgL29yZy9mcmVlZGVza3RvcC9EQnVzIG9yZy5mcmVlZGVza3RvcC5EQnVzLkdldE5hbWVPd25lciBzdHJpbmc6b3JnLmdub21lLlNlc3Npb25NYW5hZ2VyID4gL2Rldi9udWxsIDI+JjFgIDsgdGhlbiBERT1nbm9tZTsKKysgICAgICBlbGlmIHhwcm9wIC1yb290IF9EVF9TQVZFX01PREUgMj4gL2Rldi9udWxsIHwgZ3JlcCAnID0gXCJ4ZmNlNFwiJCcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIERFPXhmY2U7CisrICAgICAgZWxpZiB4cHJvcCAtcm9vdCAyPiAvZGV2L251bGwgfCBncmVwIC1pICdeeGZjZV9kZXNrdG9wX3dpbmRvdycgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIERFPXhmY2UKKysgICAgICBlbGlmIGVjaG8gJERFU0tUT1AgfCBncmVwIC1xICdeRW5saWdodGVubWVudCc7IHRoZW4gREU9ZW5saWdodGVubWVudDsKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBmYWxsYmFjayB0byBjaGVja2luZyAkREVTS1RPUF9TRVNTSU9OCisrICAgICAgY2FzZSAiJERFU0tUT1BfU0VTU0lPTiIgaW4KKysgICAgICAgICBnbm9tZSkKKysgICAgICAgICAgIERFPWdub21lOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBMWERFfEx1YnVudHUpCisrICAgICAgICAgICBERT1seGRlOyAKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTUFURSkKKysgICAgICAgICAgIERFPW1hdGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIHhmY2V8eGZjZTR8J1hmY2UgU2Vzc2lvbicpCisrICAgICAgICAgICBERT14ZmNlOworKyAgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrCisrICAgIGlmIFsgeCIkREUiID0geCIiIF07IHRoZW4KKysgICAgICAjIGZhbGxiYWNrIHRvIHVuYW1lIG91dHB1dCBmb3Igb3RoZXIgcGxhdGZvcm1zCisrICAgICAgY2FzZSAiJCh1bmFtZSAyPi9kZXYvbnVsbCkiIGluIAorKyAgICAgICAgRGFyd2luKQorKyAgICAgICAgICBERT1kYXJ3aW47CisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiZ25vbWUiIF07IHRoZW4KKysgICAgICAjIGdub21lLWRlZmF1bHQtYXBwbGljYXRpb25zLXByb3BlcnRpZXMgaXMgb25seSBhdmFpbGFibGUgaW4gR05PTUUgMi54CisrICAgICAgIyBidXQgbm90IGluIEdOT01FIDMueAorKyAgICAgIHdoaWNoIGdub21lLWRlZmF1bHQtYXBwbGljYXRpb25zLXByb3BlcnRpZXMgPiAvZGV2L251bGwgMj4mMSAgfHwgREU9Imdub21lMyIKKysgICAgZmkKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGtmbWNsaWVudCBleGVjL29wZW5VUkwgY2FuIGdpdmUgYm9ndXMgZXhpdCB2YWx1ZSBpbiBLREUgPD0gMy41LjQKKysjIEl0IGFsc28gYWx3YXlzIHJldHVybnMgMSBpbiBLREUgMy40IGFuZCBlYXJsaWVyCisrIyBTaW1wbHkgcmV0dXJuIDAgaW4gc3VjaCBjYXNlCisrCisra2ZtY2xpZW50X2ZpeF9leGl0X2NvZGUoKQorK3sKKysgICAgdmVyc2lvbj1gTENfQUxMPUMuVVRGLTgga2RlLWNvbmZpZyAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwICdeS0RFJ2AKKysgICAgbWFqb3I9YGVjaG8gJHZlcnNpb24gfCBzZWQgJ3MvS0RFLio6IFwoWzAtOV1cKS4qL1wxLydgCisrICAgIG1pbm9yPWBlY2hvICR2ZXJzaW9uIHwgc2VkICdzL0tERS4qOiBbMC05XSpcLlwoWzAtOV1cKS4qL1wxLydgCisrICAgIHJlbGVhc2U9YGVjaG8gJHZlcnNpb24gfCBzZWQgJ3MvS0RFLio6IFswLTldKlwuWzAtOV0qXC5cKFswLTldXCkuKi9cMS8nYAorKyAgICB0ZXN0ICIkbWFqb3IiIC1ndCAzICYmIHJldHVybiAkMQorKyAgICB0ZXN0ICIkbWlub3IiIC1ndCA1ICYmIHJldHVybiAkMQorKyAgICB0ZXN0ICIkcmVsZWFzZSIgLWd0IDQgJiYgcmV0dXJuICQxCisrICAgIHJldHVybiAwCisrfQorKworK3Rlcm1pbmFsX2tkZSgpCisreworKyAgICB0ZXJtaW5hbD1ga3JlYWRjb25maWcgLS1maWxlIGtkZWdsb2JhbHMgLS1ncm91cCBHZW5lcmFsIC0ta2V5IFRlcm1pbmFsQXBwbGljYXRpb24gLS1kZWZhdWx0IGtvbnNvbGVgCisrCisrICAgIHRlcm1pbmFsX2V4ZWM9YHdoaWNoICR0ZXJtaW5hbCAyPi9kZXYvbnVsbGAKKysKKysgICAgaWYgWyAteCAiJHRlcm1pbmFsX2V4ZWMiIF07IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgLWUgIiQxIgorKyAgICAgICAgZmkKKysKKysgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgImNvbmZpZ3VyZWQgdGVybWluYWwgcHJvZ3JhbSAnJHRlcm1pbmFsJyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUiCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2dub21lKCkKKyt7CisrICAgIHRlcm1fZXhlY19rZXk9Ii9kZXNrdG9wL2dub21lL2FwcGxpY2F0aW9ucy90ZXJtaW5hbC9leGVjIgorKyAgICB0ZXJtX2V4ZWNfYXJnX2tleT0iL2Rlc2t0b3AvZ25vbWUvYXBwbGljYXRpb25zL3Rlcm1pbmFsL2V4ZWNfYXJnIgorKworKyAgICB0ZXJtX2V4ZWM9YGdjb25mdG9vbC0yIC0tZ2V0ICR7dGVybV9leGVjX2tleX1gCisrICAgIHRlcm1fZXhlY19hcmc9YGdjb25mdG9vbC0yIC0tZ2V0ICR7dGVybV9leGVjX2FyZ19rZXl9YAorKworKyAgICB0ZXJtaW5hbF9leGVjPWB3aGljaCAkdGVybV9leGVjIDI+L2Rldi9udWxsYAorKworKyAgICBpZiBbIC14ICIkdGVybWluYWxfZXhlYyIgXTsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBpZiBbIHgiJHRlcm1fZXhlY19hcmciID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgIiQxIgorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgIiR0ZXJtX2V4ZWNfYXJnIiAiJDEiCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrCisrICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJjb25maWd1cmVkIHRlcm1pbmFsIHByb2dyYW0gJyR0ZXJtX2V4ZWMnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZSIKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfeGZjZSgpCisreworKyAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgIGV4by1vcGVuIC0tbGF1bmNoIFRlcm1pbmFsRW11bGF0b3IKKysgICAgZWxzZQorKyAgICAgICAgZXhvLW9wZW4gLS1sYXVuY2ggVGVybWluYWxFbXVsYXRvciAiJDEiCisrICAgIGZpCisrCisrICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgIGVsc2UKKysgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2dlbmVyaWMoKQorK3sKKysgICAgIyBpZiAkVEVSTSBpcyBhIGtub3duIG5vbi1jb21tYW5kLCB1c2UgaGFyZC1jb2RlZCBmYWxsYmFja3MKKysgICAgaWYgWyB4IiRURVJNIiA9IHgiIiBdIHx8IFsgeCIkVEVSTSIgPSB4ImxpbnV4IiBdIHx8IFsgeCIkVEVSTSIgPSB4InZ0MTAwIiBdOyB0aGVuCisrICAgICAgICBURVJNPXh0ZXJtCisrICAgIGZpCisrCisrICAgIHRlcm1pbmFsX2V4ZWM9YHdoaWNoICRURVJNIDI+L2Rldi9udWxsYAorKworKyAgICBpZiBbIC14ICIkdGVybWluYWxfZXhlYyIgXTsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIHNjcmVlbiBhbmQgdXJ4dnQgd29uJ3QgZG8gdGhlaXIgb3duIHBhcnNpbmcgb2YgcXVvdGVkIGFyZ3VtZW50cworKyAgICAgICAgICAgIGlmIFsgeCIkVEVSTSIgPSB4InNjcmVlbiIgXTsgdGhlbgorKyAgICAgICAgICAgICAgICAjIHNjcmVlbiBoYXMgYW4gaW5jb21wYXRpYmxlIG1lYW5pbmcgZm9yIC1lCisrICAgICAgICAgICAgICAgIHNoIC1jICJleGVjICR0ZXJtaW5hbF9leGVjICQxIgorKyAgICAgICAgICAgIGVsaWYgWyB4IiRURVJNIiA9IHgidXJ4dnQiIF0gfHwgWyB4IiRURVJNIiA9IHgicnh2dC11bmljb2RlIiBdIHx8IFsgeCIkVEVSTSIgPSB4InJ4dnQiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgI1RPRE86IFVzZSB3aGF0ZXZlciBtZWNoYW5pc20gZGFzaCBzdXBwb3J0cyB0byB0ZXN0IGZvcgorKyAgICAgICAgICAgICAgICAjICAgICAgcnh2dC0qIHRvIG1hdGNoIHRoaW5ncyBsaWtlIHJ4dnQtdW5pY29kZS0yNTZjb2xvcgorKyAgICAgICAgICAgICAgICBzaCAtYyAiZXhlYyAkdGVybWluYWxfZXhlYyAtZSAkMSIKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjIC1lICIkMSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysKKysgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgImNvbmZpZ3VyZWQgdGVybWluYWwgcHJvZ3JhbSAnJFRFUk0nIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZSIKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfbHhkZSgpCisreworKyAgICBpZiB3aGljaCBseHRlcm1pbmFsICY+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICBseHRlcm1pbmFsCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgbHh0ZXJtaW5hbCAtZSAiJDEiCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICB0ZXJtaW5hbF9nZW5lcmljICIkMSIKKysgICAgZmkKKyt9CisrCisrI1sgeCIkMSIgIT0geCIiIF0gfHwgZXhpdF9mYWlsdXJlX3N5bnRheAorKworK2NvbW1hbmQ9Cisrd2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KKysgICAgcGFybT0iJDEiCisrICAgIHNoaWZ0CisrCisrICAgIGNhc2UgIiRwYXJtIiBpbgorKyAgICAgIC0qKQorKyAgICAgICAgZXhpdF9mYWlsdXJlX3N5bnRheCAidW5leHBlY3RlZCBvcHRpb24gJyRwYXJtJyIKKysgICAgICAgIDs7CisrCisrICAgICAgKikKKysgICAgICAgIGlmIFsgLW4gIiRjb21tYW5kIiBdIDsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9zeW50YXggInVuZXhwZWN0ZWQgYXJndW1lbnQgJyRwYXJtJyIKKysgICAgICAgIGZpCisrICAgICAgICBjb21tYW5kPSIkcGFybSIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKytkb25lCisrCisrZGV0ZWN0REUKKysKKytpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgIERFPWdlbmVyaWMKKytmaQorKworK2Nhc2UgIiRERSIgaW4KKysgICAga2RlKQorKyAgICB0ZXJtaW5hbF9rZGUgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBnbm9tZSopCisrICAgIHRlcm1pbmFsX2dub21lICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgeGZjZSkKKysgICAgdGVybWluYWxfeGZjZSAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgIGx4ZGUpCisrICAgIHRlcm1pbmFsX2x4ZGUgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBnZW5lcmljKQorKyAgICB0ZXJtaW5hbF9nZW5lcmljICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgKikKKysgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJubyB0ZXJtaW5hbCBlbXVsYXRvciBhdmFpbGFibGUiCisrICAgIDs7CisrZXNhYworLS0gCisxLjkuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmMWUzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkJhc2ljIGRlc2t0b3AgaW50ZWdyYXRpb24gZnVuY3Rpb25zIgorCitERVNDUklQVElPTiA9ICJUaGUgeGRnLXV0aWxzIHBhY2thZ2UgaXMgYSBzZXQgb2Ygc2ltcGxlIHNjcmlwdHMgdGhhdCBwcm92aWRlIGJhc2ljIFwKK2Rlc2t0b3AgaW50ZWdyYXRpb24gZnVuY3Rpb25zIGZvciBhbnkgRnJlZSBEZXNrdG9wLCBzdWNoIGFzIExpbnV4LiBcCitUaGV5IGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGEgc2V0IG9mIGRlZmFjdG8gc3RhbmRhcmRzLiBcCitUaGUgZm9sbG93aW5nIHNjcmlwdHMgYXJlIHByb3ZpZGVkIGF0IHRoaXMgdGltZTogXAoreGRnLWRlc2t0b3AtaWNvbiBcICAgICAKK3hkZy1kZXNrdG9wLW1lbnUgXCAgCit4ZGctZW1haWwgXCAKK3hkZy1pY29uLXJlc291cmNlIFwKK3hkZy1taW1lIFwgICAgICAgCit4ZGctb3BlbiBcICAgICAKK3hkZy1zY3JlZW5zYXZlciBcIAoreGRnLXRlcm1pbmFsIFwKKyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hNTM2N2E5MDkzNDA5OGQ2YjA1YWYzYjc0NjQwNTAxNCIKKworU1JDX1VSSSA9ICJodHRwOi8vcG9ydGxhbmQuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYWRmNWU3YTA4ZTA1MjZmYzYwZGJlM2U1YjdlZjhkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YjA1NTU4YWU0YmI4ZWRlMzU2ODYzY2FlOGM0MmUzZTAxMmFhNDIxYmY5ZDQ1MTMwYTU3MGZkMjA5ZDc5MTAyIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHhwcm9wIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4cHJvcCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNmU2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGQ1ODhiNjUzMGUxMzgyYTYyNDg5OGIzZjQzMDdmNjM2YzcyYzgwYTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI4IE5vdiAyMDA3IDEwOjEzOjA4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgc2VydmljZXMgZnJvbSBpbmV0ZC5jb25mIGlmIGEgc2VydmljZSB3aXRoIHRoZSBzYW1lIGlkIGV4aXN0cy4KKworICBUaGlzIHdheSwgaWYgYSBzZXJ2aWNlIGlzIGVuYWJsZWQgaW4gL2V0Yy94aW5ldGQqIF9hbmRfIGluCisvZXRjL2luZXRkLmNvbmYsIHRoZSBvbmUgKGV2ZW4gaWYgZGlzYWJsZWQpIGZyb20gL2V0Yy94aW5ldGQqIHRha2VzCitwcmVjZWRlbmNlLgorCitTaWduZWQtb2ZmLWJ5OiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CistLS0KKyB4aW5ldGQvaW5ldC5jIHwgICAyMiArKysrKysrKysrKysrKysrKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2luZXQuYyBiL3hpbmV0ZC9pbmV0LmMKK2luZGV4IDFjYjJiYTIuLjhjYWFiNDUgMTAwNjQ0CistLS0gYS94aW5ldGQvaW5ldC5jCisrKysgYi94aW5ldGQvaW5ldC5jCitAQCAtMjMsNiArMjMsOCBAQAorICNpbmNsdWRlICJwYXJzZXN1cC5oIgorICNpbmNsdWRlICJudmxpc3RzLmgiCisgCisrc3RhdGljIHBzaV9oIGl0ZXIgOworKworIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqZGVmYXVsdHMpOworIAorQEAgLTMyLDEyICszNCwxNSBAQCB2b2lkIHBhcnNlX2luZXRfY29uZl9maWxlKCBpbnQgZmQsIHN0cnVjdCBjb25maWd1cmF0aW9uICpjb25mcCApCisgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpkZWZhdWx0X2NvbmZpZyA9IENORl9ERUZBVUxUUyggY29uZnAgKTsKKyAgICAKKyAgICBsaW5lX2NvdW50ID0gMDsKKysgICBpdGVyID0gcHNpX2NyZWF0ZSAoc2NvbmZzKTsKKyAKKyAgICBmb3IoIDs7ICkKKyAgICB7ICAgCisgICAgICAgaWYgKGdldF9uZXh0X2luZXRfZW50cnkoZmQsIHNjb25mcywgZGVmYXVsdF9jb25maWcpID09IC0yKQorICAgICAgICAgIGJyZWFrOworICAgIH0KKysKKysgICBwc2lfZGVzdHJveShpdGVyKTsKKyB9CisgCisgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsIAorQEAgLTQ2LDcgKzUxLDcgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgY2hhciAqcDsKKyAgICBzdHJfaCBzdHJwOworICAgIGNoYXIgKmxpbmUgPSBuZXh0X2xpbmUoZmQpOworLSAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqc2NwOworKyAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqc2NwLCAqdG1wOworICAgIHVuc2lnbmVkIHUsIGk7CisgICAgY29uc3QgY2hhciAqZnVuYyA9ICJnZXRfbmV4dF9pbmV0X2VudHJ5IjsKKyAgICBjaGFyICpuYW1lID0gTlVMTCwgKnJwY3ZlcnMgPSBOVUxMLCAqcnBjcHJvdG8gPSBOVUxMOworQEAgLTQwNSw3ICs0MTAsMTYgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgU0NfU1BFQ0lGWSggc2NwLCBBX1NPQ0tFVF9UWVBFICk7CisgICAgU0NfU1BFQ0lGWSggc2NwLCBBX1dBSVQgKTsKKyAKKy0gICBpZiggISBwc2V0X2FkZChzY29uZnMsIHNjcCkgKQorKyAgIGZvciAoIHRtcCA9IFNDUCggcHNpX3N0YXJ0KCBpdGVyICkgKSA7IHRtcCA7IHRtcCA9IFNDUCggcHNpX25leHQoaXRlcikpICl7CisrICAgICAgaWYgKEVRKFNDX0lEKHNjcCksIFNDX0lEKHRtcCkpKSB7CisrICAgICAgICAgcGFyc2Vtc2coTE9HX0RFQlVHLCBmdW5jLCAicmVtb3ZpbmcgZHVwbGljYXRlIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgICAgICAgIHNjX2ZyZWUoc2NwKTsKKysgICAgICAgICBzY3AgPSBOVUxMOworKyAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICB9CisrCisrICAgaWYoIHNjcCAmJiAhIHBzZXRfYWRkKHNjb25mcywgc2NwKSApCisgICAgeworICAgICAgIG91dF9vZl9tZW1vcnkoIGZ1bmMgKTsKKyAgICAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CitAQCAtNDE0LDcgKzQyOCw5IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgIH0KKyAKKyAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CistICAgcGFyc2Vtc2coIExPR19ERUJVRywgZnVuYywgImFkZGVkIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgIGlmIChzY3ApIHsKKysgICAgICBwYXJzZW1zZyggTE9HX0RFQlVHLCBmdW5jLCAiYWRkZWQgc2VydmljZSAlcyIsIFNDX05BTUUoc2NwKSk7CisrICAgfQorICAgIHJldHVybiAwOworIH0KKyAKKy0tIAorMS41LjMuNi4yMDQwLmcxNWU2CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTU5Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGEzNDEwYjBiYzgxYWIwM2E4ODlkOWZmYzE0ZTM1MWJhZGY4MzcyZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CitEYXRlOiBNb24sIDI2IE5vdiAyMDA3IDE2OjAyOjA0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFZhcmlvdXMgZml4ZXMgZnJvbSB0aGUgcHJldmlvdXMgbWFpbnRhaW5lci4KKworLS0tCisgeGluZXRkL2NoaWxkLmMgICB8ICAgMjAgKysrKysrKysrKysrKysrKystLS0KKyB4aW5ldGQvc2VydmljZS5jIHwgICAgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3hpbmV0ZC9jaGlsZC5jIGIveGluZXRkL2NoaWxkLmMKK2luZGV4IDg5ZWU1NGMuLjQ4ZTk2MTUgMTAwNjQ0CistLS0gYS94aW5ldGQvY2hpbGQuYworKysrIGIveGluZXRkL2NoaWxkLmMKK0BAIC0yODQsNiArMjg0LDcgQEAgdm9pZCBjaGlsZF9wcm9jZXNzKCBzdHJ1Y3Qgc2VydmVyICpzZXJwICkKKyAgICBjb25uZWN0aW9uX3MgICAgICAgICAgICAqY3AgID0gU0VSVkVSX0NPTk5FQ1RJT04oIHNlcnAgKSA7CisgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICAgKnNjcCA9IFNWQ19DT05GKCBzcCApIDsKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAqZnVuYyA9ICJjaGlsZF9wcm9jZXNzIiA7CisrICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmQsIG51bGxfZmQ7CisgCisgICAgc2lnbmFsX2RlZmF1bHRfc3RhdGUoKTsKKyAKK0BAIC0yOTYsOSArMjk3LDIyIEBAIHZvaWQgY2hpbGRfcHJvY2Vzcyggc3RydWN0IHNlcnZlciAqc2VycCApCisgICAgc2lnbmFsc19wZW5kaW5nWzBdID0gLTE7CisgICAgc2lnbmFsc19wZW5kaW5nWzFdID0gLTE7CisgCistICAgU2Nsb3NlKDApOworLSAgIFNjbG9zZSgxKTsKKy0gICBTY2xvc2UoMik7CisrICAgaWYgKCAoIG51bGxfZmQgPSBvcGVuKCAiL2Rldi9udWxsIiwgT19SRE9OTFkgKSApID09IC0xICkKKysgICB7CisrICAgICAgbXNnKCBMT0dfRVJSLCBmdW5jLCAib3BlbignL2Rldi9udWxsJykgZmFpbGVkOiAlbSIpIDsKKysgICAgICBfZXhpdCggMSApIDsKKysgICB9CisrCisrICAgZm9yICggZmQgPSAwIDsgZmQgPD0gTUFYX1BBU1NfRkQgOyBmZCsrICkKKysgICB7CisrICAgICAgaWYgKCBmZCAhPSBudWxsX2ZkICYmIGR1cDIoIG51bGxfZmQsIGZkICkgPT0gLTEgKQorKyAgICAgIHsKKysgICAgICAgICBtc2coIExPR19FUlIsIGZ1bmMsICJkdXAyKCVkLCAlZCkgZmFpbGVkOiAlbSIpIDsKKysgICAgICAgICBfZXhpdCggMSApIDsKKysgICAgICB9CisrICAgfQorKyAgIGlmICggbnVsbF9mZCA+IE1BWF9QQVNTX0ZEICkKKysgICAgICAodm9pZCkgU2Nsb3NlKCBudWxsX2ZkICkgOworIAorIAorICNpZmRlZiBERUJVR19TRVJWRVIKK2RpZmYgLS1naXQgYS94aW5ldGQvc2VydmljZS5jIGIveGluZXRkL3NlcnZpY2UuYworaW5kZXggM2Q2OGQ3OC4uMDEzMmQ2YyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9zZXJ2aWNlLmMKKysrKyBiL3hpbmV0ZC9zZXJ2aWNlLmMKK0BAIC03NDUsOCArNzQ1LDggQEAgc3RhdGljIHN0YXR1c19lIGZhaWxlZF9zZXJ2aWNlKHN0cnVjdCBzZXJ2aWNlICpzcCwKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTEVEOworIAorICAgICAgICAgICAgIGlmICggbGFzdCA9PSBOVUxMICkgeworLSAgICAgICAgICAgICAgIGxhc3QgPSBTQUlOKCBjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKy0JICAgICAgIFNWQ19MQVNUX0RHUkFNX0FERFIoc3ApID0gKHVuaW9uIHhzb2NrYWRkciAqKWxhc3Q7CisrCSAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9ICBTQUlOKCBjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKysJICAgIGxhc3QgPSBTQUlOKCBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSApOworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAodm9pZCkgdGltZSggJmN1cnJlbnRfdGltZSApIDsKK0BAIC03NzIsOCArNzcyLDggQEAgc3RhdGljIHN0YXR1c19lIGZhaWxlZF9zZXJ2aWNlKHN0cnVjdCBzZXJ2aWNlICpzcCwKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTEVEOworIAorIAkgICAgaWYoIGxhc3QgPT0gTlVMTCApIHsKKy0gICAgICAgICAgICAgICBsYXN0ID0gU0FJTjYoY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CistCSAgICAgICBTVkNfTEFTVF9ER1JBTV9BRERSKCBzcCApID0gKHVuaW9uIHhzb2NrYWRkciAqKWxhc3Q7CisrCSAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9IFNBSU42KGNhbGxvYyggMSwgc2l6ZW9mKHVuaW9uIHhzb2NrYWRkcikgKSApOworKyAgICAgICAgICAgIGxhc3QgPSBTQUlONihTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSk7CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICh2b2lkKSB0aW1lKCAmY3VycmVudF90aW1lICkgOworLS0gCisxLjUuMy42LjIwNDAuZzE1ZTYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQyZGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAoreGluZXRkOiBDVkUtMjAxMy00MzQyCisKK3hpbmV0ZCBkb2VzIG5vdCBlbmZvcmNlIHRoZSB1c2VyIGFuZCBncm91cCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMKK2ZvciBUQ1BNVVggc2VydmljZXMsIHdoaWNoIGNhdXNlcyB0aGVzZSBzZXJ2aWNlcyB0byBiZSBydW4gYXMgcm9vdAorYW5kIG1ha2VzIGl0IGVhc2llciBmb3IgcmVtb3RlIGF0dGFja2VycyB0byBnYWluIHByaXZpbGVnZXMgYnkKK2xldmVyYWdpbmcgYW5vdGhlciB2dWxuZXJhYmlsaXR5IGluIGEgc2VydmljZS4KK2h0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEzLTQzNDIKKwordGhlIHBhdGNoIGNvbWUgZnJvbToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD03OTk3MzImYWN0aW9uPWRpZmYKKworU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgeGluZXRkL2J1aWx0aW5zLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvYnVpbHRpbnMuYyBiL3hpbmV0ZC9idWlsdGlucy5jCitpbmRleCAzYjg1NTc5Li4zNGE1YmFjIDEwMDY0NAorLS0tIGEveGluZXRkL2J1aWx0aW5zLmMKKysrKyBiL3hpbmV0ZC9idWlsdGlucy5jCitAQCAtNjE3LDcgKzYxNyw3IEBAIHN0YXRpYyB2b2lkIHRjcG11eF9oYW5kbGVyKCBjb25zdCBzdHJ1Y3Qgc2VydmVyICpzZXJwICkKKyAgICBpZiggU0NfSVNfSU5URVJOQUwoIHNjcCApICkgeworICAgICAgIFNDX0lOVEVSTkFMKHNjcCwgbnNlcnApOworICAgIH0gZWxzZSB7CistICAgICAgZXhlY19zZXJ2ZXIobnNlcnApOworKyAgICAgIGNoaWxkX3Byb2Nlc3MobnNlcnApOworICAgIH0KKyB9CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjVjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2gKQEAgLTAsMCArMSwxMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGY0NGIyMThjY2M3NzlhYjNmNGFlZDA3MjM5MGNjZjEyOWQ5NGI1OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYXZpZCBNYWRvcmUgPGRhdmlkQHBsZWlhZGVzLnN0YXJzPgorRGF0ZTogTW9uLCAyNCBNYXIgMjAwOCAxMjo0NTozNiArMDEwMAorU3ViamVjdDogW1BBVENIXSB4aW5ldGQgc2hvdWxkIGJlIGFibGUgdG8gbGlzdGVuIG9uIElQdjYgZXZlbiBpbiAtaW5ldGRfY29tcGF0IG1vZGUKKworeGluZXRkIGRvZXMgbm90IGJpbmQgdG8gSVB2NiBhZGRyZXNzZXMgKGFuZCBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgYW4KK29wdGlvbiB0byBkbyBzbykgd2hlbiB1c2VkIGluIC1pbmV0ZF9jb21wYXQgbW9kZS4gIEFzIGN1cnJlbnQgaW5ldGQncworYXJlIElQdjYtYXdhcmUsIHRoaXMgaXMgYSBwcm9ibGVtOiB0aGlzIG1lYW5zIHhpbmV0ZCBjYW5ub3QgYmUgdXNlZCBhcworYSBkcm9wLWluIGluZXRkIHJlcGxhY2VtZW50LgorCitUaGUgYXR0YWNoZWQgcGF0Y2ggaXMgYSBzdWdnZXN0aW9uOiBpdCBhZGRzIGEgLWluZXRkX2lwdjYgZ2xvYmFsCitvcHRpb24gdGhhdCwgaWYgdXNlZCwgY2F1c2VzIGluZXRkLWNvbXBhdGliaWxpdHkgbGluZXMgdG8gaGF2ZSBhbgoraW1wbGljaXQgIklQdjYiIG9wdGlvbi4gIFBlcmhhcHMgdGhpcyBpcyBub3QgdGhlIGJlc3Qgc29sdXRpb24sIGJ1dAordGhlcmUgc2hvdWxkIGRlZmluaXRlbHkgYmUgYSB3YXkgdG8gZ2V0IGluZXRkLmNvbmYgdG8gYmUgcmVhZCBpbgorSVB2Ni1hd2FyZSBtb2RlLgorLS0tCisgeGluZXRkL2NvbmZwYXJzZS5jIHwgICAgMSArCisgeGluZXRkL2luZXQuYyAgICAgIHwgICAxNyArKysrKysrKysrKysrKysrKworIHhpbmV0ZC9vcHRpb25zLmMgICB8ICAgIDMgKysrCisgeGluZXRkL3hpbmV0ZC5tYW4gIHwgICAgNiArKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvY29uZnBhcnNlLmMgYi94aW5ldGQvY29uZnBhcnNlLmMKK2luZGV4IGRiOWY0MzEuLmQ3YjBiY2MgMTAwNjQ0CistLS0gYS94aW5ldGQvY29uZnBhcnNlLmMKKysrKyBiL3hpbmV0ZC9jb25mcGFyc2UuYworQEAgLTQwLDYgKzQwLDcgQEAKKyAjaW5jbHVkZSAiaW5ldC5oIgorICNpbmNsdWRlICJtYWluLmgiCisgCisrZXh0ZXJuIGludCBpbmV0ZF9pcHY2OworIGV4dGVybiBpbnQgaW5ldGRfY29tcGF0OworIAorIC8qCitkaWZmIC0tZ2l0IGEveGluZXRkL2luZXQuYyBiL3hpbmV0ZC9pbmV0LmMKK2luZGV4IDhjYWFiNDUuLjJlNjE3YWUgMTAwNjQ0CistLS0gYS94aW5ldGQvaW5ldC5jCisrKysgYi94aW5ldGQvaW5ldC5jCitAQCAtMjUsNiArMjUsOCBAQAorIAorIHN0YXRpYyBwc2lfaCBpdGVyIDsKKyAKKytleHRlcm4gaW50IGluZXRkX2lwdjY7CisrCisgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpkZWZhdWx0cyk7CisgCitAQCAtMzYwLDYgKzM2MiwyMSBAQCBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywKKyAgICAgICAgICB9CisgICAgICAgICAgU0NfU0VSVkVSX0FSR1Yoc2NwKVt1XSA9IHA7CisgICAgICAgfQorKworKyAgICAgIC8qIFNldCB0aGUgSVB2NiBmbGFnIGlmIHdlIHdlcmUgcGFzc2VkIHRoZSAtaW5ldGRfaXB2NiBvcHRpb24gKi8KKysgICAgICBpZiAoIGluZXRkX2lwdjYgKQorKyAgICAgIHsKKysgICAgICAgICBudnAgPSBudl9maW5kX3ZhbHVlKCBzZXJ2aWNlX2ZsYWdzLCAiSVB2NiIgKTsKKysgICAgICAgICBpZiAoIG52cCA9PSBOVUxMICkKKysgICAgICAgICB7CisrICAgICAgICAgICAgcGFyc2Vtc2coIExPR19XQVJOSU5HLCBmdW5jLCAiaW5ldGQuY29uZiAtIEJhZCBmb28gJXMiLCBuYW1lICkgOworKyAgICAgICAgICAgIHBzZXRfZGVzdHJveShhcmdzKTsKKysgICAgICAgICAgICBzY19mcmVlKHNjcCk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgIH0KKysgICAgICAgICBNX1NFVChTQ19YRkxBR1Moc2NwKSwgbnZwLT52YWx1ZSk7CisrICAgICAgfQorKworICAgICAgIC8qIFNldCB0aGUgcmV1c2UgZmxhZywgYXMgdGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgaW5ldGQgKi8KKyAgICAgICBudnAgPSBudl9maW5kX3ZhbHVlKCBzZXJ2aWNlX2ZsYWdzLCAiUkVVU0UiICk7CisgICAgICAgaWYgKCBudnAgPT0gTlVMTCApCitkaWZmIC0tZ2l0IGEveGluZXRkL29wdGlvbnMuYyBiL3hpbmV0ZC9vcHRpb25zLmMKK2luZGV4IGIwNThiNmEuLmRjMmYzYTAgMTAwNjQ0CistLS0gYS94aW5ldGQvb3B0aW9ucy5jCisrKysgYi94aW5ldGQvb3B0aW9ucy5jCitAQCAtMzAsNiArMzAsNyBAQCBpbnQgbG9ncHJvY3Nfb3B0aW9uIDsKKyB1bnNpZ25lZCBsb2dwcm9jc19vcHRpb25fYXJnIDsKKyBpbnQgc3RheWFsaXZlX29wdGlvbj0wOworIGNoYXIgKnByb2dyYW1fbmFtZSA7CisraW50IGluZXRkX2lwdjYgPSAwIDsKKyBpbnQgaW5ldGRfY29tcGF0ID0gMCA7CisgaW50IGRvbnRfZm9yayA9IDA7CisgCitAQCAtMTI4LDYgKzEyOSw4IEBAIGludCBvcHRfcmVjb2duaXplKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICB9CisrICAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCAoICZhcmd2WyBhcmcgXVsgMSBdLCAiaW5ldGRfaXB2NiIgKSA9PSAwICkKKysgICAgICAgICAgICBpbmV0ZF9pcHY2ID0gMTsKKyAgICAgICAgICBlbHNlIGlmICggc3RyY21wICggJmFyZ3ZbIGFyZyBdWyAxIF0sICJpbmV0ZF9jb21wYXQiICkgPT0gMCApCisgICAgICAgICAgICAgaW5ldGRfY29tcGF0ID0gMTsKKyAgICAgICB9CitkaWZmIC0tZ2l0IGEveGluZXRkL3hpbmV0ZC5tYW4gYi94aW5ldGQveGluZXRkLm1hbgoraW5kZXggYzc2YzNjNi4uYzlkZDgwMyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC94aW5ldGQubWFuCisrKysgYi94aW5ldGQveGluZXRkLm1hbgorQEAgLTEwNiw2ICsxMDYsMTIgQEAgVGhpcyBvcHRpb24gY2F1c2VzIHhpbmV0ZCB0byByZWFkIC9ldGMvaW5ldGQuY29uZiBpbiBhZGRpdGlvbiB0byB0aGUKKyBzdGFuZGFyZCB4aW5ldGQgY29uZmlnIGZpbGVzLiAgL2V0Yy9pbmV0ZC5jb25mIGlzIHJlYWQgYWZ0ZXIgdGhlCisgc3RhbmRhcmQgeGluZXRkIGNvbmZpZyBmaWxlcy4KKyAuVFAKKysuQkkgXC1pbmV0ZF9pcHY2CisrVGhpcyBvcHRpb24gY2F1c2VzIHhpbmV0ZCB0byBiaW5kIHRvIElQdjYgKEFGX0lORVQ2KSBhZGRyZXNzZXMgZm9yCisraW5ldGQgY29tcGF0aWJpbGl0eSBsaW5lcyAoc2VlIHByZXZpb3VzIG9wdGlvbikuICBUaGlzIG9ubHkgYWZmZWN0cworK2hvdyAvZXRjL2luZXRkLmNvbmYgaXMgaW50ZXJwcmV0ZWQgYW5kIHRodXMgb25seSBoYXMgYW55IGVmZmVjdCBpZgorK3RoZSBcLWluZXRkX2NvbXBhdCBvcHRpb24gaXMgYWxzbyB1c2VkLgorKy5UUAorIC5CSSBcLWNjICIgaW50ZXJ2YWwiCisgVGhpcyBvcHRpb24gaW5zdHJ1Y3RzCisgLkIgeGluZXRkCistLSAKKzEuNS41LnJjMC4xMjcuZ2I0MzM3CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2ZWEyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mCkBAIC0wLDAgKzEsMTEgQEAKKyMgU2ltcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgeGluZXRkCisjCisjIFNvbWUgZGVmYXVsdHMsIGFuZCBpbmNsdWRlIC9ldGMveGluZXRkLmQvCisKK2RlZmF1bHRzCit7CisKKworfQorCitpbmNsdWRlZGlyIC9ldGMveGluZXRkLmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhMzhlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgeGluZXRkLiBUaGlzIGZpbGUgaXMgc291cmNlZCBieSAvYmluL3NoIGZyb20KKyMgL2V0Yy9pbml0LmQveGluZXRkCisKKyMgZW5hYmxlIHhpbmV0ZCBJbmV0ZCBjb21wYXQgbW9kZQorSU5FVERfQ09NUEFUPVllcworCisjIE9wdGlvbnMgdG8gcGFzcyB0byB4aW5ldGQKKyMKKyMgLXN0YXlhbGl2ZSBjb21lcyBieSBkZWZhdWx0IDogaXQgY2FuIGJlIHJlbW92ZWQgaWYgeGluZXRkIGlzIGV4cGVjdGVkCisjIG5vdCB0byBzdGFydCB3aGVuIG5vIHNlcnZpY2UgaXMgY29uZmlndXJlZAorIworWElORVREX09QVFM9Ii1zdGF5YWxpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2MyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdApAQCAtMCwwICsxLDY0IEBACisjIS9iaW4vc2gKKyMKKyMgL2V0Yy9pbml0LmQveGluZXRkICAtLSAgc2NyaXB0IHRvIHN0YXJ0IGFuZCBzdG9wIHhpbmV0ZC4KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2lmIHRlc3QgLWYgL2V0Yy9kZWZhdWx0L3hpbmV0ZDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L3hpbmV0ZAorZmkKKworCit0ZXN0IC14IC91c3Ivc2Jpbi94aW5ldGQgfHwgZXhpdCAwCisKK2NoZWNrcG9ydG1hcCAoKSB7CisgIGlmIGdyZXAgIl5bXiAqI10iIC9ldGMveGluZXRkLmNvbmYgfCBncmVwIC1xICdycGMvJzsgdGhlbgorICAgIGlmICEgcnBjaW5mbyAtdSBsb2NhbGhvc3QgcG9ydG1hcHBlciA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIldBUk5JTkc6IHBvcnRtYXBwZXIgaW5hY3RpdmUgLSBSUEMgc2VydmljZXMgdW5hdmFpbGFibGUhIgorICAgICAgZWNobyAiICAgIENvbW1lbnRpbmcgb3V0IG9yIHJlbW92aW5nIHRoZSBSUEMgc2VydmljZXMgZnJvbSIKKyAgICAgIGVjaG8gIiAgICB0aGUgL2V0Yy94aW5ldGQuY29uZiBmaWxlIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS4iCisgICAgICBlY2hvCisgICAgZmkKKyAgZmkKK30gCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBjaGVja3BvcnRtYXAKKwllY2hvIC1uICJTdGFydGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWJhY2tncm91bmQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQgLS0gLXBpZGZpbGUgL3Zhci9ydW4veGluZXRkLnBpZCAkWElORVREX09QVFMKKwllY2hvICIuIgorCTs7CisgICAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAzIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4veGluZXRkOworCWV4aXQgJD8KKwk7OworICAgIHJlbG9hZCkKKwllY2hvIC1uICJSZWxvYWRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXIgY29uZmlndXJhdGlvbjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAxIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgZm9yY2UtcmVsb2FkKQorCWVjaG8gIiQwIGZvcmNlLXJlbG9hZDogRm9yY2UgUmVsb2FkIGlzIGRlcHJlY2F0ZWQiCisJZWNobyAtbiAiRm9yY2VmdWxseSByZWxvYWRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXIgY29uZmlndXJhdGlvbjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAxIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3hpbmV0ZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfGZvcmNlLXJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmZGM1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTMgQEAKK1tVbml0XQorRGVzY3JpcHRpb249WGluZXRkIEEgUG93ZXJmdWwgUmVwbGFjZW1lbnQgRm9yIEluZXRkCitBZnRlcj1zeXNsb2cudGFyZ2V0IG5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitQSURGaWxlPS92YXIvcnVuL3hpbmV0ZC5waWQKK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9zeXNjb25maWcveGluZXRkCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3hpbmV0ZCAtc3RheWFsaXZlIC1waWRmaWxlIC92YXIvcnVuL3hpbmV0ZC5waWQgIiRFWFRSQU9QVElPTlMiCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmMwM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiU29ja2V0LWJhc2VkIHNlcnZpY2UgYWN0aXZhdGlvbiBkYWVtb24iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20veGluZXRkLW9yZy94aW5ldGQiCisKKyMgeGluZXRkIGlzIGEgQlNELWxpa2UgbGljZW5zZQorIyBBcHBsZSBhbmQgR2VudG9vIHNheSBCU0QgaGVyZS4KK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT04YWQ4NjE1MTk4NTQyNDQ0Zjg0ZDI4YTZjZjIyNmRkOCIKKworREVQRU5EUyA9ICIiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3hpbmV0ZC1vcmcveGluZXRkLmdpdDtwcm90b2NvbD1odHRwcyBcCisgICAgICBmaWxlOi8veGluZXRkLmluaXQgXAorICAgICAgZmlsZTovL3hpbmV0ZC5jb25mIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuZGVmYXVsdCBcCisgICAgICBmaWxlOi8vVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2ggXAorICAgICAgZmlsZTovL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuc2VydmljZSBcCisgICAgICAiCisKK1NSQ1JFViA9ICI2OGJiOWFiOWU5ZjIxNGFkOGEyMzIyZjI4YWMxZDY3MzNlNzBiYzI0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ4aW5ldGQuc2VydmljZSIKKworSU5JVFNDUklQVF9OQU1FID0gInhpbmV0ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitFWFRSQV9PRUNPTkY9Ii0tZGlzYWJsZS1ubHMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS13aXRoLWxpYndyYXAsLHRjcC13cmFwcGVycyIKKworZG9fY29uZmlndXJlKCkgeworCSMgTG9va3MgbGlrZSBjb25maWd1cmUuaW4gaXMgYnJva2VuLCBzbyB3ZSBhcmUgc2tpcHBpbmcKKwkjIHJlYnVpbGRpbmcgY29uZmlndXJlIGFuZCBhcmUganVzdCB1c2luZyB0aGUgc2hpcHBlZCBvbmUKKwkoIGNkICR7U307IGdudS1jb25maWdpemUgLS1mb3JjZSApCisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsKCkgeworCSMgU2FtZSBoZXJlLCB0aGUgTWFrZWZpbGUgZG9lcyBzb21lIHJlYWxseSBzdHVwaWQgdGhpbmdzLAorCSMgYnV0IHNpbmNlIHdlIG9ubHkgd2FudCB0d28gZmlsZXMgd2h5IG5vdCBvdmVycmlkZQorCSMgZG9faW5zdGFsbCBmcm9tIGF1dG90b29scyBhbmQgZG9pbmcgaXQgb3Vyc2VsZnM/CisJaW5zdGFsbCAtZCAiJHtEfSR7c2JpbmRpcn0iCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L3hpbmV0ZC5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisJaW5zdGFsbCAtbSA2NDQgIiR7V09SS0RJUn0veGluZXRkLmNvbmYiICIke0R9JHtzeXNjb25mZGlyfSIKKwlpbnN0YWxsIC1tIDc1NSAiJHtXT1JLRElSfS94aW5ldGQuaW5pdCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC94aW5ldGQiCisJaW5zdGFsbCAtbSA2NDQgIiR7V09SS0RJUn0veGluZXRkLmRlZmF1bHQiICIke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hpbmV0ZCIKKwlpbnN0YWxsIC1tIDc1NSAiJHtCfS94aW5ldGQveGluZXRkIiAiJHtEfSR7c2JpbmRpcn0iCisJaW5zdGFsbCAtbSA3NTUgIiR7Qn0veGluZXRkL2l0b3giICIke0R9JHtzYmluZGlyfSIKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veGluZXRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veGluZXRkLnNlcnZpY2UKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0veGluZXRkLmNvbmYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhZTQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuYWdpbmcgTFpNQSBjb21wcmVzc2VkIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3R1a2Fhbmkub3JnL3h6LyIKK1NFQ1RJT04gPSAiYmFzZSIKKworIyBUaGUgc291cmNlIGluY2x1ZGVzIGJpdHMgb2YgUEQsIEdQTHYyLCBHUEx2MywgTEdQTHYyLjErLCBidXQgdGhlIG9ubHkgZmlsZQorIyB3aGljaCBpcyBHUEx2MyBpcyBhbiBtNCBtYWNybyB3aGljaCBpc24ndCBzaGlwcGVkIGluIGFueSBvZiBvdXIgcGFja2FnZXMsCisjIGFuZCB0aGUgTEdQTCBiaXRzIGFyZSB1bmRlciBsaWIvLCB3aGljaCBhcHBlYXJzIHRvIGJlIHVzZWQgZm9yIGxpYmdudSwgd2hpY2gKKyMgYXBwZWFycyB0byBiZSB1c2VkIGZvciBET1MgYnVpbGRzLiBTbyB3ZSdyZSBsZWZ0IHdpdGggR1BMdjIrIGFuZCBQRC4KK0xJQ0VOU0UgPSAiR1BMdjIrICYgR1BMdjMrICYgTEdQTHYyLjErICYgUEQiCitMSUNFTlNFXyR7UE59ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tc3RhdGljZGV2ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZG9jID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tbG9jYWxlID0gIkdQTHYyKyIKK0xJQ0VOU0VfbGlibHptYSA9ICJQRCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ3NWI2YzdkY2EyMzY3NDBhY2U0YmJhNTUzZThlMWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjIuMTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2dldG9wdC5jO2VuZGxpbmU9MjM7bWQ1PTIwNjliMGVlNzEwNTcyYzAzYmIzMTE0ZTQ1MzJjZDg0ICIKKworU1JDX1VSSSA9ICJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjNlNDRjNzY2YzNmYjRmMTllMzQ4ZTY0NmZjZDU3NzhhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI5MThiNjY0ODA3NmU3NGY4ZDdhZTE5ZGI1ZWU2NjNkZjgwMDA0OWUxODcyNTlmYWY1ZWI5OTdhN2I5NzQ2ODEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworUEFDS0FHRVMgPSsgImxpYmx6bWEiCisKK0ZJTEVTX2xpYmx6bWEgPSAiJHtsaWJkaXJ9L2xpYmx6bWEqJHtTT0xJQlN9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyMWM1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYwpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkNvbXByZXNzb3IvYXJjaGl2ZXIgZm9yIGNyZWF0aW5nIGFuZCBtb2RpZnlpbmcgLnppcCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mby16aXAub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTA0ZDQzYzVkNzBiNDk2YzAzMjMwODEwNmUyNmFlMTdkIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3ppcCR7QGQuZ2V0VmFyKCdQVicsMSkucmVwbGFjZSgnLicsICcnKX0udGd6IgorCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnQklORD0ke0NDfScgJ0FTPSR7Q0N9IC1jJyAnQ1BQPSR7Q1BQfScgXAorCQknQ0ZMQUdTPS1JLiAtRFVOSVggJHtDRkxBR1N9JyAnSU5TVEFMTD1pbnN0YWxsJyBcCisJCSdCSU5GTEFHUz0wNzU1JyAnSU5TVEFMTF9EPWluc3RhbGwgLWQnIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBmbGFncyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQorCXNlZCAtaSAncyNMRkxBR1MxPSIiI0xGTEFHUzE9IiR7TERGTEFHU30iIycgZmxhZ3MKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZ2VuZXJpYyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBwcmVmaXg9JHtEfSR7cHJlZml4fSBcCisJCSAgIEJJTkRJUj0ke0R9JHtiaW5kaXJ9IE1BTkRJUj0ke0R9JHttYW5kaXJ9L21hbjEgXAorCQkgICBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTYxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB6aXAuaW5jCisKK1BSPSJyMiIKKworIyB6aXAtMi4zMiBzdGlsbCB1c2VzIGRpcmVjdG9yeSBuYW1lIG9mIHppcC0yLjMwCitTID0gIiR7V09SS0RJUn0vemlwMzAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3Yjc0NTUxZTYzZjhlZTZhYWI2ZmJjODY2NzZjMGQzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGU4YmIxZjliN2ViMGIwMTI4NTQ5NWEyNjk5ZGYzYTRiNzY2Nzg0YzE3NjVhOGYxYWVlZGY2M2MwODA2MzY5IgorCisjIHppcC5pbmMgc2V0cyBDRkxBR1MsIGJ1dCB3aGF0IE1ha2VmaWxlIGFjdHVhbGx5IHVzZXMgaXMKKyMgQ0ZMQUdTX05PT1BULiAgSXQgd2lsbCBhbHNvIGZvcmNlIC1PMyBvcHRpbWl6YXRpb24sIG92ZXJyaWRpbmcKKyMgd2hhdGV2ZXIgd2Ugc2V0LgorIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgJ0NGTEFHU19OT09QVD0tSS4gLURVTklYICR7Q0ZMQUdTfSciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMTYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZmYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMTYuMy5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIldlYktpdCBiYXNlZCB3ZWIgYnJvd3NlciBmb3IgR05PTUUiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitERVBFTkRTID0gImxpYnNvdXAtMi40IHdlYmtpdGd0ayBndGsrMyBpc28tY29kZXMgY2EtY2VydGlmaWNhdGVzIGF2YWhpIGxpYm5vdGlmeSBnY3IgbGlid25jazMgXAorCSAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ25vbWUtZGVza3RvcDMiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjMyOTZhZjQ1MzJiODAxOTc3NWY0YjQwZDIxYTM0MWFlIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDUyN2YxNzcwNzc5ZWMyMmQ5NTVhZWIxM2IxNDhhODQ2YTI2MTQ0ZTQzM2ZmMDQ4MGM5ODFhZjgwZTIzOTBiMSIKKworRVhUUkFfT0VDT05GICs9ICIgLS1kaXNhYmxlLW5zcyAtLXdpdGgtZGlzdHJpYnV0b3ItbmFtZT0ke0RJU1RST30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHRvdWNoICR7U30vZ25vbWUtZG9jLXV0aWxzLm1ha2UKKyAgICBzZWQgLWkgLWUgczpoZWxwOjpnICR7U30vTWFrZWZpbGUuYW0KK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwZGF0YSAke2RhdGFkaXJ9L2RidXMtMSAke2RhdGFkaXJ9L2dub21lLXNoZWxsL3NlYXJjaC1wcm92aWRlcnMiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9lcGlwaGFueS8qL3dlYi1leHRlbnNpb25zLy5kZWJ1Zy9saWJlcGh5d2ViZXh0ZW5zaW9uLnNvIgorUkRFUEVORFNfJHtQTn0gPSAiaXNvLWNvZGVzIGFkd2FpdGEtaWNvbi10aGVtZSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNhLWNlcnRpZmljYXRlcyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9maWxlcy8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4NWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9maWxlcy8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAzMGYwM2EyNTZlZmUzNzVhNGQ1YzNhMjRiZjQxNjhlYmYzODBlM2FiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDMwIEp1bCAyMDE1IDE1OjEzOjIzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHllbHAubTQ6IGRyb3AgdGhlIGNoZWNrIGZvciBpdHN0b29sCisKK0l0IGlzbid0IHVzZWQgZm9yIGFueXRoaW5nIGR1cmluZyBidWlsZCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHByb3ZpZGUKK2l0IGFzIGEgcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3RhcmJhbGwtc3BlY2lmaWMgaXNzdWVdCistLS0KKyBtNC95ZWxwLm00IHwgNiAtLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L3llbHAubTQgYi9tNC95ZWxwLm00CitpbmRleCA1ZGI4NDdmLi4xYjZlZGU0IDEwMDY0NAorLS0tIGEvbTQveWVscC5tNAorKysrIGIvbTQveWVscC5tNAorQEAgLTI3LDEyICsyNyw2IEBAIEFDX0FSR19XSVRIKFtoZWxwLWRpcl0sCisgSEVMUF9ESVI9IiR3aXRoX2hlbHBfZGlyIgorIEFDX1NVQlNUKEhFTFBfRElSKQorIAorLUFDX0FSR19WQVIoW0lUU1RPT0xdLCBbUGF0aCB0byB0aGUgYGl0c3Rvb2xgIGNvbW1hbmRdKQorLUFDX0NIRUNLX1BST0coW0lUU1RPT0xdLCBbaXRzdG9vbF0sIFtpdHN0b29sXSkKKy1pZiB0ZXN0IHgiJElUU1RPT0wiID0geDsgdGhlbgorLSAgQUNfTVNHX0VSUk9SKFtpdHN0b29sIG5vdCBmb3VuZF0pCistZmkKKy0KKyBBQ19BUkdfVkFSKFtYTUxMSU5UXSwgW1BhdGggdG8gdGhlIGB4bWxsaW50YCBjb21tYW5kXSkKKyBBQ19DSEVDS19QUk9HKFtYTUxMSU5UXSwgW3htbGxpbnRdLCBbeG1sbGludF0pCisgaWYgdGVzdCB4IiRYTUxMSU5UIiA9IHg7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWI2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGJpdHMgb2YgY3J5cHRvIFVJIGFuZCBwYXJzaW5nIGV0YyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCisKK0RFUEVORFMgPSAiZ3RrKzMgcDExLWtpdCBnbGliLTIuMCBsaWJnY3J5cHQgdmFsYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGd0ay1kb2MKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDU4MzU2ODBiZTBiNmE4MzhlMDJhNTI4ZDUzNzhkOWMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlY2ZlOGRmNDFjYzg4MTU4MzY0YmIxNWFkZGM2NzBiMTFlNTM5ZmU4NDQ3NDI5ODM2MjliYTIzMjM4ODhkMDc1IgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2RidXMtMSBcCisgICAgJHtkYXRhZGlyfS9nY3ItMyBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi8wMDAxLXBpeG9wcy1CZS1tb3JlLWNhcmVmdWwtYWJvdXQtaW50ZWdlci1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTdjMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi8wMDAxLXBpeG9wcy1CZS1tb3JlLWNhcmVmdWwtYWJvdXQtaW50ZWdlci1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDg5IEBACitGcm9tIGZmZWM4NmVkNTAxMGM1YTJiZTE0ZjQ3YjMzYmNmNGVkMzE2OWExOTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTMgSnVsIDIwMTUgMDA6MzM6NDAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGl4b3BzOiBCZSBtb3JlIGNhcmVmdWwgYWJvdXQgaW50ZWdlciBvdmVyZmxvdworCitPdXIgbG9hZGVyIGNvZGUgaXMgc3VwcG9zZWQgdG8gaGFuZGxlIG91dC1vZi1tZW1vcnkgYW5kIG92ZXJmbG93CitzaXR1YXRpb25zIGdyYWNlZnVsbHksIHJlcG9ydGluZyBlcnJvcnMgaW5zdGVhZCBvZiBhYm9ydGluZy4gQnV0CitpZiB5b3UgbG9hZCBhbiBpbWFnZSBhdCBhIHNwZWNpZmljIHNpemUsIHdlIGFsc28gZXhlY3V0ZSBvdXIKK3NjYWxpbmcgY29kZSwgd2hpY2ggd2FzIG5vdCBjYXJlZnVsIGVub3VnaCBhYm91dCBvdmVyZmxvdyBpbiBzb21lCitwbGFjZXMuCisKK1RoaXMgY29tbWl0IG1ha2VzIHRoZSBzY2FsaW5nIGNvZGUgc2lsZW50bHkgcmV0dXJuIGlmIGl0IGZhaWxzIHRvCithbGxvY2F0ZSBmaWx0ZXIgdGFibGVzLiBUaGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkbywgc2luY2UKK2dka19waXhidWZfc2NhbGUoKSBpcyBub3QgdGFraW5nIGEgR0Vycm9yLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMjk3CisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMgfCAgIDIyICsrKysrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jIGIvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKK2luZGV4IDI5YTFjMTQuLmNlNTE3NDUgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYworKysrIGIvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKK0BAIC0xMjcyLDcgKzEyNzIsMTYgQEAgbWFrZV9maWx0ZXJfdGFibGUgKFBpeG9wc0ZpbHRlciAqZmlsdGVyKQorICAgaW50IGlfb2Zmc2V0LCBqX29mZnNldDsKKyAgIGludCBuX3ggPSBmaWx0ZXItPngubjsKKyAgIGludCBuX3kgPSBmaWx0ZXItPnkubjsKKy0gIGludCAqd2VpZ2h0cyA9IGdfbmV3IChpbnQsIFNVQlNBTVBMRSAqIFNVQlNBTVBMRSAqIG5feCAqIG5feSk7CisrICBnc2l6ZSBuX3dlaWdodHM7CisrICBpbnQgKndlaWdodHM7CisrCisrICBuX3dlaWdodHMgPSBTVUJTQU1QTEUgKiBTVUJTQU1QTEUgKiBuX3ggKiBuX3k7CisrICBpZiAobl93ZWlnaHRzIC8gKFNVQlNBTVBMRSAqIFNVQlNBTVBMRSAqIG5feCkgIT0gbl95KQorKyAgICByZXR1cm4gTlVMTDsgLyogb3ZlcmZsb3csIGJhaWwgKi8KKysKKysgIHdlaWdodHMgPSBnX3RyeV9uZXcgKGludCwgbl93ZWlnaHRzKTsKKysgIGlmICghd2VpZ2h0cykKKysgICAgcmV0dXJuIE5VTEw7IC8qIG92ZXJmbG93LCBiYWlsICovCisgCisgICBmb3IgKGlfb2Zmc2V0PTA7IGlfb2Zmc2V0IDwgU1VCU0FNUExFOyBpX29mZnNldCsrKQorICAgICBmb3IgKGpfb2Zmc2V0PTA7IGpfb2Zmc2V0IDwgU1VCU0FNUExFOyBqX29mZnNldCsrKQorQEAgLTEzNDcsOCArMTM1NiwxMSBAQCBwaXhvcHNfcHJvY2VzcyAoZ3VjaGFyICAgICAgICAgKmRlc3RfYnVmLAorICAgaWYgKHhfc3RlcCA9PSAwIHx8IHlfc3RlcCA9PSAwKQorICAgICByZXR1cm47IC8qIG92ZXJmbG93LCBiYWlsIG91dCAqLworIAorLSAgbGluZV9idWZzID0gZ19uZXcgKGd1Y2hhciAqLCBmaWx0ZXItPnkubik7CisgICBmaWx0ZXJfd2VpZ2h0cyA9IG1ha2VfZmlsdGVyX3RhYmxlIChmaWx0ZXIpOworKyAgaWYgKCFmaWx0ZXJfd2VpZ2h0cykKKysgICAgcmV0dXJuOyAvKiBvdmVyZmxvdywgYmFpbCBvdXQgKi8KKysKKysgIGxpbmVfYnVmcyA9IGdfbmV3IChndWNoYXIgKiwgZmlsdGVyLT55Lm4pOworIAorICAgY2hlY2tfc2hpZnQgPSBjaGVja19zaXplID8gZ2V0X2NoZWNrX3NoaWZ0IChjaGVja19zaXplKSA6IDA7CisgCitAQCAtMTQ2OCw3ICsxNDgwLDcgQEAgdGlsZV9tYWtlX3dlaWdodHMgKFBpeG9wc0ZpbHRlckRpbWVuc2lvbiAqZGltLAorIAkJICAgZG91YmxlICAgICAgICAgICAgICAgICBzY2FsZSkKKyB7CisgICBpbnQgbiA9IGNlaWwgKDEgLyBzY2FsZSArIDEpOworLSAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19uZXcgKGRvdWJsZSwgU1VCU0FNUExFICogbik7CisrICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX21hbGxvY19uIChzaXplb2YgKGRvdWJsZSkgKiBTVUJTQU1QTEUsIG4pOworICAgaW50IG9mZnNldDsKKyAgIGludCBpOworIAorQEAgLTE1MjYsNyArMTUzOCw3IEBAIGJpbGluZWFyX21hZ25pZnlfbWFrZV93ZWlnaHRzIChQaXhvcHNGaWx0ZXJEaW1lbnNpb24gKmRpbSwKKyAgICAgfQorIAorICAgZGltLT5uID0gbjsKKy0gIGRpbS0+d2VpZ2h0cyA9IGdfbmV3IChkb3VibGUsIFNVQlNBTVBMRSAqIG4pOworKyAgZGltLT53ZWlnaHRzID0gZ19tYWxsb2NfbiAoc2l6ZW9mIChkb3VibGUpICogU1VCU0FNUExFLCBuKTsKKyAKKyAgIHBpeGVsX3dlaWdodHMgPSBkaW0tPndlaWdodHM7CisgCitAQCAtMTYxNyw3ICsxNjI5LDcgQEAgYmlsaW5lYXJfYm94X21ha2Vfd2VpZ2h0cyAoUGl4b3BzRmlsdGVyRGltZW5zaW9uICpkaW0sCisgCQkJICAgZG91YmxlICAgICAgICAgICAgICAgICBzY2FsZSkKKyB7CisgICBpbnQgbiA9IGNlaWwgKDEvc2NhbGUgKyAzLjApOworLSAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19uZXcgKGRvdWJsZSwgU1VCU0FNUExFICogbik7CisrICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX21hbGxvY19uIChzaXplb2YgKGRvdWJsZSkgKiBTVUJTQU1QTEUsIG4pOworICAgZG91YmxlIHc7CisgICBpbnQgb2Zmc2V0LCBpOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiZGNlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHBhcmFsbGVsIGluc3RhbGwgaXNzdWUgdGhhdCBsaWIgbGlicGl4YnVmbG9hZGVyLXBuZy5sYQorZGVwZW5kcyBvbiBsaWJnZGtfcGl4YnVmLTIuMC5sYSB3aGljaCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGR1cmluZyBpbnN0YS0KK2xsYXRpb24sIGlmIGxpYmdka19waXhidWYtMi4wLmxhIGlzIHJlZ2VuZXJhdGluZyBhbmQgYXQgdGhlIHNhbWUgdGltZQorbGlicGl4YnVmbG9hZGVyLXBuZy5sYSBsaW5rcyBpdCwgdGhlIGVycm9yIHdpbGwgaGFwcGVuLgorCitFcnJvciBtZXNzYWdlIGlzOgorKiB1c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbGdka19waXhidWYtMi4wCisqIGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK01ha2UgYW4gZXhwbGljaXQgZGVwZW5kZW5jeSB0byB0aGUgbGlicyBpbnN0YWxsIHRhcmdldHMgd291bGQgZml4IHRoaXMKK2lzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGdkay1waXhidWYvTWFrZWZpbGUuYW0gfCAgICAxICsKKyBsaWJkZXBzLm1rICAgICAgICAgICAgIHwgICAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZGVwcy5taworCitkaWZmIC0tZ2l0IGEvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbSBiL2dkay1waXhidWYvTWFrZWZpbGUuYW0KK2luZGV4IDk1YTkzYTguLmRiNDRjYWUgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL01ha2VmaWxlLmFtCisrKysgYi9nZGstcGl4YnVmL01ha2VmaWxlLmFtCitAQCAtNzgzLDMgKzc4Myw0IEBAIGxvYWRlcnMuY2FjaGU6CisgZW5kaWYKKyAKKyAtaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2dpdC5taworKy1pbmNsdWRlICQodG9wX3NyY2RpcikvbGliZGVwcy5taworZGlmZiAtLWdpdCBhL2xpYmRlcHMubWsgYi9saWJkZXBzLm1rCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDdhMTBhOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliZGVwcy5taworQEAgLTAsMCArMSwzIEBACisrIyBFeHRlbmRpbmcgZGVwZW5kZW5jaWVzIG9mIGluc3RhbGwtbG9hZGVyTFRMSUJSQVJJRVM6CisrIyBUaGUgJChsaWItTFRMSUJSQVJJRVMpIGlzIG5lZWRlZCBieSByZWxpbmtpbmcgJChsb2FkZXJfTFRMSUJSQVJJRVMpCisraW5zdGFsbC1sb2FkZXJMVExJQlJBUklFUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworLS0gCisxLjcuNi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9mYXRhbC1sb2FkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxNDZjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0lmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNwZWNpZmllZCBzZXQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4oKSB0bworbm9uLXplcm8gaWYgdGhlIGxvYWRlciBoYWQgZXJyb3JzIChtaXNzaW5nIGxpYnJhcmllcywgZ2VuZXJhbGx5KS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYyBiL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMKK2luZGV4IGE5Y2EwMTUuLjM5NTY3NGEgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCisrKysgYi9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCitAQCAtMTQ2LDcgKzE0Niw3IEBAIHdyaXRlX2xvYWRlcl9pbmZvIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqcGF0aCwgR2RrUGl4YnVmRm9ybWF0ICppbmZvKQorICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MgKGNvbnRlbnRzLCAnXG4nKTsKKyB9CisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgZ2Jvb2xlYW4KKyBxdWVyeV9tb2R1bGUgKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCisgeworICAgICAgICAgY2hhciAqcGF0aDsKK0BAIC0xNTUsNiArMTU1LDcgQEAgcXVlcnlfbW9kdWxlIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQorICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCpmaWxsX3Z0YWJsZSkgICAoR2RrUGl4YnVmTW9kdWxlICptb2R1bGUpOworICAgICAgICAgZ3BvaW50ZXIgZmlsbF9pbmZvX3B0cjsKKyAgICAgICAgIGdwb2ludGVyIGZpbGxfdnRhYmxlX3B0cjsKKysgICAgICAgIGdib29sZWFuIHJldCA9IFRSVUU7CisgCisgICAgICAgICBpZiAoZ19wYXRoX2lzX2Fic29sdXRlIChmaWxlKSkKKyAgICAgICAgICAgICAgICAgcGF0aCA9IGdfc3RyZHVwIChmaWxlKTsKK0BAIC0yMDQsMTAgKzIwNSwxMyBAQCBxdWVyeV9tb2R1bGUgKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX21vZHVsZV9lcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIGdfZnByaW50ZiAoc3RkZXJyLCAiQ2Fubm90IGxvYWQgbG9hZGVyICVzXG4iLCBwYXRoKTsKKysgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICB9CisgICAgICAgICBpZiAobW9kdWxlKQorICAgICAgICAgICAgICAgICBnX21vZHVsZV9jbG9zZSAobW9kdWxlKTsKKyAgICAgICAgIGdfZnJlZSAocGF0aCk7CisrCisrICAgICAgICByZXR1cm4gcmV0OworIH0KKyAKKyAjaWZkZWYgR19PU19XSU4zMgorQEAgLTI1Nyw2ICsyNjEsNyBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgR1N0cmluZyAqY29udGVudHM7CisgICAgICAgICBnY2hhciAqY2FjaGVfZmlsZSA9IE5VTEw7CisgICAgICAgICBnaW50IGZpcnN0X2ZpbGUgPSAxOworKyAgICAgICAgZ2Jvb2xlYW4gc3VjY2VzcyA9IFRSVUU7CisgCisgI2lmZGVmIEdfT1NfV0lOMzIKKyAgICAgICAgIGdjaGFyICpsaWJkaXI7CitAQCAtMzYwLDcgKzM2NSw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGxlbiA9IHN0cmxlbiAoZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gU09FWFRfTEVOICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY21wIChkZW50ICsgbGVuIC0gU09FWFRfTEVOLCBTT0VYVCkgPT0gMCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBwYXRoLCBkZW50KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBwYXRoLCBkZW50KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIGdfZGlyX2Nsb3NlIChkaXIpOworQEAgLTM3OCw3ICszODQsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgICAgICAgICAgICAgIGluZmlsZW5hbWUgPSBnX2xvY2FsZV90b191dGY4IChpbmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfbW9kdWxlIChjb250ZW50cywgY3dkLCBpbmZpbGVuYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5X21vZHVsZSAoY29udGVudHMsIGN3ZCwgaW5maWxlbmFtZSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgZ19mcmVlIChjd2QpOworICAgICAgICAgfQorQEAgLTM5NCw1ICs0MDEsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBnX3ByaW50ICgiJXNcbiIsIGNvbnRlbnRzLT5zdHIpOworIAorLSAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoZ19nZXRlbnYgKCJHREtfUElYQlVGX0ZBVEFMX0xPQURFUiIpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyA/IDAgOiAxOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2NhNjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnZGstcGl4YnVmLTIuMjIuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGstcGl4YnVmLTIuMjIuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDA5OjA2OjM0LjAwMDAwMDAwMCArMDgwMAorKysrIGdkay1waXhidWYtMi4yMi4xL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDA5OjA3OjMzLjAwMDAwMDAwMCArMDgwMAorQEAgLTI4Nyw3ICsyODcsNyBAQAorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICchPScgeHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNDg0LDcgKzQ4NCw3IEBACisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgcGl4YnVmX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBwaXhidWZfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIHBpeGJ1Zl9kZXBsaWJzX2NoZWNrPWAkcGl4YnVmX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtOTU3LDcgKzk1Nyw3IEBACisgIyBXZSBhcmUgdXNpbmcgZ21vZHVsZS1uby1leHBvcnQgbm93LCBidXQgSSdtIGxlYXZpbmcgdGhlIHN0cmlwcGluZworICMgY29kZSBpbiBwbGFjZSBmb3Igbm93LCBzaW5jZSBwYW5nbyBhbmQgYXRrIHN0aWxsIHJlcXVpcmUgZ21vZHVsZS4KKyBleHBvcnQgU0VECistZXhwb3J0X2R5bmFtaWM9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKytleHBvcnRfZHluYW1pYz1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19QSVhCVUZfREVQX0xJQlM9YGVjaG8gJEdES19QSVhCVUZfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYAorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTA3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBnZGstcGl4YnVmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzJkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIkltYWdlIGxvYWRpbmcgbGlicmFyeSBmb3IgR1RLKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3RrLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGstcGl4YnVmL2dkay1waXhidWYuaDtlbmRsaW5lPTI2O21kNT03MmIzOWRhN2NiZGRlMmU2NjUzMjlmZWY2MThlMWQ2YiIKKworU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wIgorREVQRU5EU19hcHBlbmRfbGludXhzdGRiYXNlID0gIiB2aXJ0dWFsL2xpYngxMSIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZmF0YWwtbG9hZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGZlZDBkNTQ0MzJmMWI2OWZjNmU2NmU2MDhiZDU1NDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDg1MzgzMDYxNjExM2RiNDQzNTgzNzk5MmMwYWViZDk0Y2JiOTkzYzQ0ZGM1NTA2M2NlZTdmNzJhN2JlZjhiZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcGl4YnVmY2FjaGUgcHRlc3QtZ25vbWUKKworTElCViA9ICIyLjEwLjAiCisKK0dES19QSVhCVUZfTE9BREVSUyA/PSAicG5nIGpwZWciCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0dES19QSVhCVUZfTE9BREVSU30iCitQQUNLQUdFQ09ORklHX2xpbnV4c3RkYmFzZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9ICR7R0RLX1BJWEJVRl9MT0FERVJTfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKKworUEFDS0FHRUNPTkZJR1twbmddID0gIi0td2l0aC1saWJwbmcsLS13aXRob3V0LWxpYnBuZyxsaWJwbmciCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0td2l0aC1saWJqcGVnLC0td2l0aG91dC1saWJqcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0td2l0aC1saWJ0aWZmLC0td2l0aG91dC1saWJ0aWZmLHRpZmYiCitQQUNLQUdFQ09ORklHW2pwZWcyMDAwXSA9ICItLXdpdGgtbGliamFzcGVyLC0td2l0aG91dC1saWJqYXNwZXIsamFzcGVyIgorCisjIFVzZSBHSU8gdG8gc25pZmYgaW1hZ2UgZm9ybWF0IGluc3RlYWQgb2YgdHJ5aW5nIGFsbCBsb2FkZXJzCitQQUNLQUdFQ09ORklHW2dpby1zbmlmZl0gPSAiLS1lbmFibGUtZ2lvLXNuaWZmaW5nLC0tZGlzYWJsZS1naW8tc25pZmZpbmcsLHNoYXJlZC1taW1lLWluZm8iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgxMSwtLXdpdGhvdXQteDExLHZpcnR1YWwvbGlieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1BBQ0tBR0VTID0rICIke1BOfS14bGliIgorCitGSUxFU18ke1BOfS14bGliID0gIiR7bGliZGlyfS8qcGl4YnVmX3hsaWIqJHtTT0xJQlN9IgorQUxMT1dfRU1QVFlfJHtQTn0teGxpYiA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKKwkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKKwkke2xpYmRpcn0vbGliKi5zby4qIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisJJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCisJJHtpbmNsdWRlZGlyfS8qIFwKKwkke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisgICAgICAgICR7bGliZGlyfS8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8uZGVidWcvKiBcCisiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5nZGstcGl4YnVmLWxvYWRlci0uKiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIHBvc3RpbnN0X3BpeGJ1ZmxvYWRlciA9IGQuZ2V0VmFyKCJwb3N0aW5zdF9waXhidWZsb2FkZXIiLCBUcnVlKQorCisgICAgbG9hZGVyc19yb290ID0gZC5leHBhbmQoJyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMnKQorCisgICAgcGFja2FnZXMgPSAnICcuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBsb2FkZXJzX3Jvb3QsICdebGlicGl4YnVmbG9hZGVyLSguKilcLnNvJCcsICdnZGstcGl4YnVmLWxvYWRlci0lcycsICdHREsgcGl4YnVmIGxvYWRlciBmb3IgJXMnKSkKKyAgICBkLnNldFZhcignUElYQlVGX1BBQ0tBR0VTJywgcGFja2FnZXMpCisKKyAgICAjIFRoZSB0ZXN0IHN1aXRlIGV4ZXJjaXNlcyBhbGwgdGhlIGxvYWRlcnMsIHNvIGVuc3VyZSB0aGV5IGFyZSBhbGwKKyAgICAjIGRlcGVuZGVuY2llcyBvZiB0aGUgcHRlc3QgcGFja2FnZS4KKyAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfZ2RrLXBpeGJ1Zi1wdGVzdCIsICIgIiArIHBhY2thZ2VzKQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lICJsaWJwaXhidWZsb2FkZXItKi5sYSIgLWV4ZWMgcm0gXHtcfSBcOworCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZSBcCisJCUdES19QSVhCVUZfTU9EVUxFRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMKK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMmYwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJHTk9NRSBsaWJyYXJ5IGZvciByZWFkaW5nIC5kZXNrdG9wIGZpbGVzIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitCUE4gPSAiZ25vbWUtZGVza3RvcCIKKworaW5oZXJpdCBnbm9tZSBwa2djb25maWcKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImFiNWJmNGNjOTRhZDYzNjM5ZjQyYWRjYzE1NDJiMWYwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiM2E4ZjE5NmI0NmViOWRiZDNiYTJhZmI4ZmI1ZmVmNmE4ODI1NTM5ZDQ0OWEwMjE4MTMxMTI0MmUyMjIyN2JkMCIKKworREVQRU5EUyArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBnY29uZiBsaWJ4cmFuZHIgdmlydHVhbC9saWJ4MTEgZ3RrKzMgZ2xpYi0yLjAgZ25vbWUtZG9jLXV0aWxzIGdub21lLWNvbW1vbiBzdGFydHVwLW5vdGlmaWNhdGlvbiBpc28tY29kZXMiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZGVza3RvcC1kb2NzIgorCitQQUNLQUdFUyA9KyAibGliZ25vbWUtZGVza3RvcDMiCitGSUxFU19saWJnbm9tZS1kZXNrdG9wMyA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9L2xpYmdub21lLWRlc2t0b3AqL3BucC5pZHMgJHtkYXRhZGlyfS9nbm9tZS8qeG1sIgorCitSUkVDT01NRU5EU19saWJnbm9tZS1kZXNrdG9wMyArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZmOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2gKQEAgLTAsMCArMSwxNzggQEAKK0NyZWF0ZSBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmcgY3Vyc29ycworCitUaGlzIGN1dHMgZG93biB0aGUgaW5zdGFsbGVkIHNpemUgYnkgfjExTUIuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworRnJvbSAxZThjMGRkMGEyZGU1ZTFkNWZmNjBmZjExZjEzMWU4ODUxMGM3ZjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xPz1EMD1BMD1EMT04Mz1EMT04MT1EMD1CQj1EMD1CMD1EMD1CRD0yMD1EMD05OD1EMD1CNj1EMD1CMT89CisgPT9VVEYtOD9xPz1EMT04Mz1EMD1CQj1EMD1CMD1EMT04Mj1EMD1CRT1EMD1CMj89IDxscm4xOTg2QGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTYgTWF5IDIwMTUgMDc6NDk6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ3JlYXRlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZyBjdXJzb3JzCisKK0Fsc28gc3VwcG9ydCBjcmVhdGluZyBzeW1saW5rcyBmb3IgVzMyIGN1cnNvcnMgKGluY2x1ZGluZyBMIGFuZCBYTCB2YXJpYW50cykuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkyMjMKKy0tLQorIE1ha2VmaWxlLmFtICB8IDkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGNvbmZpZ3VyZS5hYyB8IDI0ICsrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDExNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBmZWQzOTcyLi40ZDAwMjY4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNiw2ICs2LDE3IEBAIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00ICR7QUNMT0NBTF9GTEFHU30KKyAKKyBjdXJzb3JkaXIgPSAkKGRhdGFkaXIpL2ljb25zL0Fkd2FpdGEvY3Vyc29ycworIGN1cnNvcl9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS9jdXJzb3JzLyopCisraWYgRU5BQkxFX0xfWExfVkFSSUFOVFMKKytjdXJzb3JsZGlyID0gJChkYXRhZGlyKS9pY29ucy9BZHdhaXRhLUxhcmdlL2N1cnNvcnMKKytjdXJzb3JsX0RBVEEgPSAkKHdpbGRjYXJkICQoc3JjZGlyKS9BZHdhaXRhLUxhcmdlL2N1cnNvcnMvKikKKytjdXJzb3J4bGRpciA9ICQoZGF0YWRpcikvaWNvbnMvQWR3YWl0YS1FeHRyYUxhcmdlL2N1cnNvcnMKKytjdXJzb3J4bF9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS1FeHRyYUxhcmdlL2N1cnNvcnMvKikKKytlbHNlCisrY3Vyc29ybGRpciA9CisrY3Vyc29ybF9EQVRBID0KKytjdXJzb3J4bGRpciA9CisrY3Vyc29yeGxfREFUQSA9CisrZW5kaWYKKyAKKyB0aGVtZV9pbl9maWxlcyA9IGluZGV4LnRoZW1lLmluLmluCisgdGhlbWVfREFUQSA9ICQodGhlbWVfaW5fZmlsZXM6LnRoZW1lLmluLmluPS50aGVtZSkKK0BAIC05OSw2ICsxMTAsODggQEAgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAlmaQorIAorIGluc3RhbGwtZGF0YS1ob29rOgorKwljZCAkKERFU1RESVIpJChjdXJzb3JkaXIpICYmIFwKKysJaWYgdGVzdCAieCQoZW5hYmxlX3czMl9jdXJzb3JzKSIgPSAieHllcyI7IFwKKysJdGhlbiBcCisrCQljdXI9LmN1ciAmJiBcCisrCQlhbmk9LmFuaTsgXAorKwllbHNlIFwKKysJCWN1cj0gJiYgXAorKwkJYW5pPSA7IFwKKysJZmk7IFwKKysJaWYgdGVzdCAieCQoZW5hYmxlX2xfeGxfdmFyaWFudHMpIiA9ICJ4eWVzIjsgXAorKwl0aGVuIFwKKysJCXRoZW1lZGlycz0iJChjdXJzb3JkaXIpICQoY3Vyc29ybGRpcikgJChjdXJzb3J4bGRpcikiOyBcCisrCWVsc2UgXAorKwkJdGhlbWVkaXJzPSIkKGN1cnNvcmRpcikiOyBcCisrCWZpOyBcCisrCWZvciBkIGluICQkdGhlbWVkaXJzOyBcCisrCWRvIFwKKysJCWNkICQoREVTVERJUikkJGQgJiYgXAorKwkJZWNobyBDcmVhdGluZyBzeW1saW5rcyBpbiAkKERFU1RESVIpJCRkICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJZHJhcGVkX2JveCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJaWNvbiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJdGFyZ2V0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG90Ym94JCRjdXIJCQlkb3RfYm94X21hc2skJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBYX2N1cnNvciQkY3VyCQlwaXJhdGUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQkwOGU4ZTFjOTVmZTJmYzAxZjk3NmYxZTA2M2EyNGNjZCQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyX3dhdGNoJCRhbmkJCTNlY2I2MTBjMWJmMjQxMGY0NDIwMGY0OGM0MGQzNTk5JCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0ciQkY3VyCQl0b3BfbGVmdF9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHJpZ2h0X3B0ciQkY3VyCQlkcmFmdF9sYXJnZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHJpZ2h0X3B0ciQkY3VyCQlkcmFmdF9zbWFsbCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIG1vdmUkJGN1cgkJCTQ0OThmMGUwYzE5MzdmZmUwMWZkMDZmOTczNjY1ODMwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbW92ZSQkY3VyCQkJOTA4MTIzNzM4M2Q5MGU1MDlhYTAwZjAwMTcwZTk2OGYkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjb3B5JCRjdXIJCQkxMDgxZTM3MjgzZDkwMDAwODAwMDAzYzA3ZjNlZjZiZiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNvcHkkJGN1cgkJCTY0MDdiMGU5NDE4MTc5MDUwMWZkMWUxNjdiNDc0ODcyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWNyb3NzX3JldmVyc2UkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zcyQkY3VyCQkJZGlhbW9uZF9jcm9zcyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQxJCRjdXIJCQlncmFiJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCTlkODAwNzg4ZjFiMDg4MDBhZTgxMDIwMjM4MGEwODIyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCWUyOTI4NWU2MzQwODYzNTI5NDZhMGU3MDkwZDczMTA2JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCWhhbmQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBncmFiYmluZyQkY3VyCQlmbGV1ciQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCWQ5Y2UwYWI2MDU2OThmMzIwNDI3Njc3YjQ1OGFkNjBiJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJNWM2Y2Q5OGIzZjNlYmNiMWY5YzdmMWMyMDQ2MzA0MDgkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBxdWVzdGlvbl9hcnJvdyQkY3VyCQloZWxwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJbGVmdF9wdHJfaGVscCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxpbmskJGN1cgkJCTMwODVhMGUyODU0MzA4OTQ5NDA1MjcwMzJmOGIyNmRmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGluayQkY3VyCQkJNjQwZmIwZTc0MTk1NzkxNTAxZmQxZWQ1N2I0MTQ4N2YkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zc2VkX2NpcmNsZSQkY3VyCQkwM2I2ZTBmY2IzNDk5Mzc0YTg2N2MwNDFmNTIyOThmMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGZkX2RvdWJsZV9hcnJvdyQkY3VyCWZjZjFjM2M3Y2Q0NDkxZDgwMWYxZTFjNzhmMTAwMDAwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYmRfZG91YmxlX2Fycm93JCRjdXIJYzcwODhmMGYzZTZjODA4ODIzNmVmOGUxZTNlNzAwMDAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyIAloX2RvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJMTRmZWY3ODJkMDI0NDA4ODQzOTI5NDJjMTEyMDUyMzAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoX2RvdWJsZV9hcnJvdyQkY3VyCQkwMjgwMDYwMzBlMGU3ZWJmZmM3ZjcwNzBjMDYwMDE0MCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIgCWRvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIgCXZfZG91YmxlX2Fycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cgkyODcwYTA5MDgyYzEwMzA1MDgxMGZmZGZmZmZlMDIwNCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHZfZG91YmxlX2Fycm93JCRjdXIJCTAwMDA4MTYwMDAwMDA2ODEwMDAwNDA4MDgwMDEwMTAyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJZGVmYXVsdCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQkJGN1cgkJCXBvaW50ZXIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQlwcm9ncmVzcyQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIHdhdGNoJCRhbmkJCQl3YWl0JCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWNyb3NzaGFpciQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHh0ZXJtJCRjdXIJCQl0ZXh0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLWxpbmskJGN1cgkJYWxpYXMkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkbmQtY29weSQkY3VyCQljb3B5JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLW5vbmUkJGN1cgkJbm8tZHJvcCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzZWRfY2lyY2xlJCRjdXIJCW5vdC1hbGxvd2VkJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2JfaF9kb3VibGVfYXJyb3ckJGN1cgljb2wtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cglyb3ctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX3NpZGUkJGN1cgkJbi1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICByaWdodF9zaWRlJCRjdXIJCWUtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYm90dG9tX3NpZGUkJGN1cgkJcy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3NpZGUkJGN1cgkJdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB0b3BfcmlnaHRfY29ybmVyJCRjdXIJbmUtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX2xlZnRfY29ybmVyJCRjdXIJbnctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYm90dG9tX3JpZ2h0X2Nvcm5lciQkY3VyCXNlLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJvdHRvbV9sZWZ0X2Nvcm5lciQkY3VyCXN3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJZXctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cglucy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBmZF9kb3VibGVfYXJyb3ckJGN1cgluZXN3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJkX2RvdWJsZV9hcnJvdyQkY3VyCW53c2UtcmVzaXplJCRjdXI7IFwKKysJZG9uZQorIAlpZiB0ZXN0IC16ICIkKERFU1RESVIpIiAmJiB0ZXN0IC1uICIkKEdUS19VUERBVEVfSUNPTl9DQUNIRSkiIDsgdGhlbiBcCisgCQkkKEdUS19VUERBVEVfSUNPTl9DQUNIRSkgLXEgJChERVNURElSKSQodGhlbWVkaXIpOyBcCisgCWZpCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZTRkOGEwLi4zMTJiMjRjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMSw2ICszMSw3IEBAIEFDX1NVQlNUKFtyZW5kZXJfc2l6ZXNdLCBbIjh4OCAxNngxNiAyMngyMiAyNHgyNCAzMngzMiA0OHg0OCAyNTZ4MjU2Il0pCisgQUNfU1VCU1QoW3N5bWJvbGljX3JlbmRlcl9zaXplc10sIFsiIl0pCisgQUNfU1VCU1QoW2luc3RhbGxfc2l6ZXNdLCBbIjh4OCAxNngxNiAyMngyMiAyNHgyNCAzMngzMiA0OHg0OCA2NHg2NCA5Nng5NiAyNTZ4MjU2Il0pCisgCisrQUNfUFJPR19MTl9TCisgQUNfUEFUSF9QUk9HKEdUS19VUERBVEVfSUNPTl9DQUNIRSwgZ3RrLXVwZGF0ZS1pY29uLWNhY2hlKQorIAorICMgbmVlZCBnaXQsIGljb250b29sLCBhbmQgaW5rc2NhcGUgZm9yIHJlbmRlcmluZworQEAgLTU2LDYgKzU3LDI5IEBAIGlmIHRlc3QgIngkR1RLX0VOQ09ERV9TWU1CT0xJQ19TVkciID0gInhmYWxzZSI7IHRoZW4KKyBmaQorIEFDX1NVQlNUKHN5bWJvbGljX2VuY29kZV9zaXplcykKKyAKKytBQ19BUkdfRU5BQkxFKFt3MzItY3Vyc29yc10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXczMi1jdXJzb3JzXSwKKysgICAgW01ha2UgYW5kIGluc3RhbGwgV2luZG93cyBjdXJzb3JzICguY3VyIGFuZCAuYW5pKSBpbnN0ZWFkIG9mIFggY3Vyc29yc10pXSwKKysgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAgIHllcykgZW5hYmxlX3czMl9jdXJzb3JzPXllcyA7OworKyAgICBubykgIGVuYWJsZV93MzJfY3Vyc29ycz1ubyA7OworKyAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXczMi1jdXJzb3JzXSkgOzsKKysgICBlc2FjXSwKKysgIFtlbmFibGVfdzMyX2N1cnNvcnM9bm9dKQorK0FDX1NVQlNUKGVuYWJsZV93MzJfY3Vyc29ycykKKysKKytBQ19BUkdfRU5BQkxFKFtsLXhsLXZhcmlhbnRzXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbC14bC12YXJpYW50c10sCisrICAgIFtBbHNvIG1ha2UgYW5kIGluc3RhbGwgTGFyZ2UgYW5kIEV4dHJhIExhcmdlIFdpbmRvd3MgY3Vyc29yIHZlcnNpb25zXSldLAorKyAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgICAgeWVzKSBlbmFibGVfbF94bF92YXJpYW50cz15ZXMgOzsKKysgICAgbm8pICBlbmFibGVfbF94bF92YXJpYW50cz1ubyA7OworKyAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWwteGwtdmFyaWFudHNdKSA7OworKyAgIGVzYWNdLAorKyAgW2VuYWJsZV9sX3hsX3ZhcmlhbnRzPW5vXSkKKytBQ19TVUJTVChlbmFibGVfbF94bF92YXJpYW50cykKKytBTV9DT05ESVRJT05BTChbRU5BQkxFX0xfWExfVkFSSUFOVFNdLCBbdGVzdCB4JGVuYWJsZV9sX3hsX3ZhcmlhbnRzID0geHllc10pCisrCisgQUNfQ09ORklHX0ZJTEVTKFsKKyBNYWtlZmlsZQorIGFkd2FpdGEtaWNvbi10aGVtZS5wYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjE2LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjZlNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjE2LjIuMS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkdUSysgaWNvbiB0aGVtZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2Fkd2FpdGEtaWNvbi10aGVtZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitMSUNFTlNFID0gIkxHUEwtMy4wIHwgQ0MtQlktU0EtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Yzg0Y2FjODhlNDZmYzA3NjQ3ZWEwN2U2YzI0ZWViN2MiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWljb24tY2FjaGUKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWVmODY5NTJjOTQ3YWEyN2ExYTg4OGI3NzM1ZDYwYjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQ1NTZkZmJmNTU1ZDRmYWMxMmQ0ZDVjMTJmNzUxOWRlMGQ0M2VjNDJhMWI2NDk2MTE0MzlhNTBiZjdhY2I5NiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBCdWlsZCB1c2VzIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIHRvIGNyZWF0ZSBwbmcgdmVyc2lvbnM6CisgICAgICAgICMgbm8gbmVlZCB0byBzdG9yZSB0aGUgc3ZncyBhbnltb3JlLgorCXJtIC1mICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMuc3ZnIFwKKwkgICAgICAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvc2NhbGFibGUvKi8qLXN5bWJvbGljLXJ0bC5zdmcKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tY3Vyc29ycyAke1BOfS1zeW1ib2xpYyAke1BOfS1oaXJlcyAke1BOfSIKKworRklMRVNfJHtQTn0tY3Vyc29ycyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9jdXJzb3JzLyIKK0ZJTEVTXyR7UE59LXN5bWJvbGljID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLyovKi8qLnN5bWJvbGljLnBuZyIKK0ZJTEVTXyR7UE59LWhpcmVzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzI1NngyNTYvIgorRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9wa2djb25maWcvYWR3YWl0YS1pY29uLXRoZW1lLnBjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvcmVtb3ZlX3BsdXNfZnJvbV9pbnZhbGlkX2NoYXJhY3RlcnNfbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWE3Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JlbW92ZSAnKycgZnJvbSBpbnZhbGlkIGNoYXJhY3RlcnMgbGlzdAorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBHQ29uZi0zLjIuNS9nY29uZi9nY29uZi1iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBHQ29uZi0zLjIuNS5vcmlnL2djb25mL2djb25mLWJhY2tlbmQuYworKysrIEdDb25mLTMuMi41L2djb25mL2djb25mLWJhY2tlbmQuYworQEAgLTM3LDcgKzM3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgaW52YWxpZF9jaGFyc1tdID0KKyAgIC8qIFNwYWNlIGlzIGNvbW1vbiBpbiB1c2VyIG5hbWVzIChhbmQgdGh1cyBob21lIGRpcmVjdG9yaWVzKSBvbiBXaW5kb3dzICovCisgICAiICIKKyAjZW5kaWYKKy0gICJcdFxyXG5cIiQmPD4sKz0jISgpJ3x7fVtdP35gOyVcXCI7CisrICAiXHRcclxuXCIkJjw+LD0jISgpJ3x7fVtdP35gOyVcXCI7CisgCisgc3RhdGljIGdib29sZWFuCisgZ2NvbmZfYWRkcmVzc192YWxpZCAoY29uc3QgY2hhciAgKmFkZHJlc3MsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi91bmFibGUtY29ubmVjdC1kYnVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NThhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaApAQCAtMCwwICsxLDk1IEBACitGaXhlcyBlcnJvcnMgc3VjaCBhcyB0aGlzIGluIHRoZSByb290ZnMgZ2VuZXJhdGlvbjoKKworKGdjb25mdG9vbC0yLnJlYWw6MTAwOTUpOiBHQ29uZi1XQVJOSU5HICoqOiBDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIEQtQlVTIGRhZW1vbjoKK1VzaW5nIFgxMSBmb3IgZGJ1cy1kYWVtb24gYXV0b2xhdW5jaCB3YXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCBzZXQgeW91ciBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MgaW5zdGVhZAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGIwODk1ZTE5OThlYmM4M2FiMDMwZWMwZjE3YzA2ODU0MzlmNWI0MDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYXkgU3Ryb2RlIDxyc3Ryb2RlQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE1IEFwciAyMDEzIDA5OjU3OjM0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGRidXM6IERvbid0IHNwZXcgdG8gY29uc29sZSB3aGVuIHVuYWJsZSB0byBjb25uZWN0IHRvIGRidXMKKyBkYWVtb24KKworSW5zdGVhZCBwYXNzIHRoZSBlcnJvciB1cCBmb3IgdGhlIGNhbGxlciB0byBkZWNpZGUgd2hhdCB0byBkby4KKworVGhpcyBwcmV2ZW50IHVudHJhcHBhYmxlIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSBzaG93aW5nIHVwIGF0IHRoZQorY29uc29sZSBpZiBnY29uZnRvb2wgLS1tYWtlZmlsZS1pbnN0YWxsLXJ1bGUgaXMgY2FsbGVkLgorLS0tCisgZ2NvbmYvZ2NvbmYtZGJ1cy5jIHwgICAyNCArKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY29uZi9nY29uZi1kYnVzLmMgYi9nY29uZi9nY29uZi1kYnVzLmMKK2luZGV4IDU2MTBmY2YuLjA0OGUzZWEgMTAwNjQ0CistLS0gYS9nY29uZi9nY29uZi1kYnVzLmMKKysrKyBiL2djb25mL2djb25mLWRidXMuYworQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgR0hhc2hUYWJsZSAgICAgKmVuZ2luZXNfYnlfZGIgPSBOVUxMOworIHN0YXRpYyBHSGFzaFRhYmxlICAgICAqZW5naW5lc19ieV9hZGRyZXNzID0gTlVMTDsKKyBzdGF0aWMgZ2Jvb2xlYW4gICAgICAgIGRidXNfZGlzY29ubmVjdGVkID0gRkFMU0U7CisgCistc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfZGJ1c19jb25uZWN0aW9uICAgICAgKHZvaWQpOworK3N0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAgICAgIChHRXJyb3IgKiplcnJvcik7Cisgc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfc2VydmljZSAgICAgICAgICAgICAgKGdib29sZWFuICAgICAgICAgIHN0YXJ0X2lmX25vdF9mb3VuZCwKKyAJCQkJCQkgR0Vycm9yICAgICAgICAgICoqZXJyKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gICAgIGVuc3VyZV9kYXRhYmFzZSAgICAgICAgICAgICAoR0NvbmZFbmdpbmUgICAgICAqY29uZiwKK0BAIC0zODMsNyArMzgzLDcgQEAgZ2NvbmZfZW5naW5lX2RldGFjaCAoR0NvbmZFbmdpbmUgKmNvbmYpCisgfQorIAorIHN0YXRpYyBnYm9vbGVhbgorLWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisrZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoR0Vycm9yICoqZXJyKQorIHsKKyAgIERCdXNFcnJvciBlcnJvcjsKKyAKK0BAIC0zOTIsNyArMzkyLDkgQEAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAodm9pZCkKKyAKKyAgIGlmIChkYnVzX2Rpc2Nvbm5lY3RlZCkKKyAgICAgeworLSAgICAgIGdfd2FybmluZyAoIlRoZSBjb25uZWN0aW9uIHRvIERCdXMgd2FzIGJyb2tlbi4gQ2FuJ3QgcmVpbml0aWFsaXplIGl0LiIpOworKyAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdDT05GX0VSUk9SLAorKyAgICAgICAgICAgICAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCisrICAgICAgICAgICAgICAgICAgICJUaGUgY29ubmVjdGlvbiB0byBEQnVzIHdhcyBicm9rZW4uIENhbid0IHJlaW5pdGlhbGl6ZSBpdC4iKTsKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKyAKK0BAIC00MDIsNyArNDA0LDEwIEBAIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisgICAKKyAgIGlmICghZ2xvYmFsX2Nvbm4pIAorICAgICB7CistICAgICAgZ193YXJuaW5nICgiQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBELUJVUyBkYWVtb246XG4lcyIsIGVycm9yLm1lc3NhZ2UpOworKyAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdDT05GX0VSUk9SLAorKyAgICAgICAgICAgICAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCisrICAgICAgICAgICAgICAgICAgICJDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIEQtQlVTIGRhZW1vbjpcbiVzIiwKKysgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CisgICAgICAgCisgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAgICAgIHJldHVybiBGQUxTRTsKK0BAIC00MzEsMTMgKzQzNiw4IEBAIGVuc3VyZV9zZXJ2aWNlIChnYm9vbGVhbiAgc3RhcnRfaWZfbm90X2ZvdW5kLAorIAorICAgaWYgKGdsb2JhbF9jb25uID09IE5VTEwpCisgICAgIHsKKy0gICAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKCkpCistCXsKKy0JICBnX3NldF9lcnJvciAoZXJyLCBHQ09ORl9FUlJPUiwKKy0JCSAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCistCQkgICAgICAgXygiTm8gRC1CVVMgZGFlbW9uIHJ1bm5pbmdcbiIpKTsKKy0JICByZXR1cm4gRkFMU0U7CistCX0KKysgICAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKGVycikpCisrICAgICAgICByZXR1cm4gRkFMU0U7CisgCisgICAgICAgZ19hc3NlcnQgKGdsb2JhbF9jb25uICE9IE5VTEwpOworICAgICB9CitAQCAtMjUxMiw3ICsyNTEyLDcgQEAgZ2NvbmZfcGluZ19kYWVtb24gKHZvaWQpCisgeworICAgaWYgKGdsb2JhbF9jb25uID09IE5VTEwpCisgICB7CistICAgIGlmICghZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoKSkKKysgICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uIChOVUxMKSkKKyAgICAgeworICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmZGFmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIkdOT01FIGNvbmZpZ3VyYXRpb24gc3lzdGVtIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSIKKworREVQRU5EUyA9ICJnbGliLTIuMCBkYnVzIGRidXMtZ2xpYiBsaWJ4bWwyIGludGx0b29sLW5hdGl2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImdsaWItMi4wLW5hdGl2ZSBkYnVzLW5hdGl2ZSBkYnVzLWdsaWItbmF0aXZlIGxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbm9tZS1jb21tb24tbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViLW5hdGl2ZSIKKworCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIGdldHRleHQKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vR0NvbmYvJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS9HQ29uZi0ke1BWfS50YXIueHo7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjJiMTY5OTZkMGU0YjExMjg1NmVlNWM1OTEzMGU4MjJjIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTkxMmI5MTgwM2FiMDlhNWVlZDM0ZDM2NGJmMDlmZTNhMmE5Yzk2NzUxZmRlMDNhNGUwY2ZhNTFhMDRkNzg0YyIKKworUyA9ICIke1dPUktESVJ9L0dDb25mLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zdGF0aWMgLS1lbmFibGUtZGVidWc9eWVzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtb3JiaXQgLS13aXRoLW9wZW5sZGFwPW5vIC0tZGlzYWJsZS1ndGsiCisKKyMgRGlzYWJsZSBQb2xpY3lLaXQgYnkgZGVmYXVsdAorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKyMgV2UgcmVhbGx5IGRvbid0IHdhbnQgUG9saWN5S2l0IGZvciBuYXRpdmUgb3IgdWNsaWJjCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFQ09ORklHX2xpYmMtdWNsaWJjID0gIiIKKworUEFDS0FHRUNPTkZJR1twb2xpY3lraXRdID0gIi0tZW5hYmxlLWRlZmF1bHRzLXNlcnZpY2UsLS1kaXNhYmxlLWRlZmF1bHRzLXNlcnZpY2UscG9sa2l0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHRoaXMgZGlyZWN0b3J5IG5lZWQgdG8gYmUgY3JlYXRlZCB0byBhdm9pZCBhbiBFcnJvciAyNTYgYXQgZ2RtIGxhdW5jaAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLnN5c3RlbQorCisJIyB0aGlzIHN0dWZmIGlzIHVudXNhYmxlCisJcm0gLWYgJHtEfSR7bGliZGlyfS9HQ29uZi8qLyouKmEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2dpby8qLyouKmEKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2djb25mdG9vbC0yIFwKKwkJR0NPTkZfQkFDS0VORF9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L0dDb25mLzIKK30KKworIyBkaXNhYmxlIGRidXMteDExIHdoZW4geDExIGlzbid0IGluIERJU1RST19GRUFUVVJFUworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2RidXMteDExJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vR0NvbmYvKiBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby8qLyouc28gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0KiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyovKi8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vc2dtbC9nY29uZi9nY29uZi0xLjAuZHRkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWNvbW1vbl8zLjE0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBiNzAzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIG1hY3JvcyBmb3IgYnVpbGRpbmcgR05PTUUgYXBwbGljYXRpb25zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NFQ1RJT04gPSAieDExL2dub21lIgoraW5oZXJpdCBnbm9tZWJhc2UgYWxsYXJjaAorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJiYTU4YzYxZDBkODFiN2MzZmY4NDUyYzYyMDUxM2E5ZCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjRjMDAyNDJmNzgxYmI0NDEyODlmNDlkZDgwZWQxZDg5NWQ4NGRlMGM5NGJmYzJjNjgxOGExMDRjOWUzOTI2MmMiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiIgorREVQRU5EUyA9ICIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCitGSUxFU18ke1BOfS1kZXYgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4NzUwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiQSBjb2xsZWN0aW9uIG9mIGRvY3VtZW50YXRpb24gdXRpbGl0aWVzIGZvciB0aGUgR25vbWUgcHJvamVjdCIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTk9NRSBEb2N1bWVudGF0aW9uIEJ1aWxkIFV0aWxpdGllcyAoZ25vbWUtZG9jLSBcCit1dGlscykgd2VyZSBjcmVhdGVkIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRvIFwKK2luY2x1ZGUgYW5kIGNyZWF0ZSBkb2N1bWVudGF0aW9uIGluIHRoZWlyIHJlbGVhc2VzLiBUaGV5IGluY2x1ZGUgdGhlIFwKK3htbDJwbyB0b29sIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byB0cmFuc2xhdGUgYW5kIGtlZXAgdXAgdG8gZGF0ZSBcCit0cmFuc2xhdGlvbnMgb2YgZG9jdW1lbnRhdGlvbi4iCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitERVBFTkRTID0gImxpYnhtbDIgbGlieHNsdCBsaWJ4c2x0LW5hdGl2ZSBnbm9tZS1kb2MtdXRpbHMtbmF0aXZlIGdsaWItMi4wIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgbGlieHNsdC1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZSBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjcm9sbGtlZXBlciIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgICR7RH0ke2RhdGFkaXJ9L3htbC9nbm9tZS94c2x0LworCWNwIC1wUHIgJHtTfS94c2x0LyogJHtEfSR7ZGF0YWRpcn0veG1sL2dub21lL3hzbHQvCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke2JpbmRpcn0veG1sMnBvCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbCogJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKKworUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2ZDY5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorSW4gY3Jvc3MgZW52aXJvbm1lbnQgd2UgaGF2ZSB0byBwcmVwZW5kIHRoZSBzeXNyb290IHRvIHRoZSBwYXRoIGZvdW5kIGJ5Citwa2djb25maWcgc2luY2UgdGhlIHBhdGggcmV0dXJuZWQgZnJvbSBwa2djb25maWcgZG9lcyBub3QgaGF2ZSBzeXNyb290IHByZWZpeGVkCitpdCBlbmRzIHVwIHVzaW5nIHRoZSBmaWxlcyBmcm9tIGhvc3Qgc3lzdGVtLiBOb3cgdXN1YWxseSBwZW9wbGUgaGF2ZSBnbm9tZSBpbnN0YWxsZWQKK3NvIHRoZSBidWlsZCBzdWNjZWVkcyBidXQgaWYgeW91IGRvbnQgaGF2ZSBnbm9tZSBpbnN0YWxsZWQgb24gYnVpbGQgaG9zdCB0aGVuCitpdCB3b250IGZpbmQgdGhlIGZpbGVzIG9uIGhvc3Qgc3lzdGVtIGFuZCBwYWNrYWdlcyB1c2luZyBnbm9tZS1kb2MtdXRpbHMgd29udAorY29tcGlsZS4KKworVGhpcyBzaG91bGQgd29yayBvayB3aXRoIG5vbiBzeXNyb290ZWQgYnVpbGRzIHRvbyBzaW5jZSBpbiB0aG9zZSBjYXNlcyBQS0dfQ09ORklHX1NZU1JPT1RfRElSCit3aWxsIGJlIGVtcHR5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCitAQCAtMTMzLDExICsxMzMsMTEgQEAgX0RPQ19BQlNfU1JDRElSID0gQGFic19zcmNkaXJACisgX3htbDJwbyA/PSBgd2hpY2ggeG1sMnBvYAorIF94bWwycG9fbW9kZSA9ICQoaWYgJChET0NfSUQpLG1hbGxhcmQsZG9jYm9vaykKKyAKKy1fZGIyaHRtbCA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAorLV9kYjJvbWYgID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKKy1fY2h1bmtzICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jaHVua3MueHNsCistX2NyZWRpdHMgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKKy1faWRzID89ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCisrX2RiMmh0bWwgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyaHRtbCBnbm9tZS1kb2MtdXRpbHNgCisrX2RiMm9tZiAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKKytfY2h1bmtzICA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAorK19jcmVkaXRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jcmVkaXRzLnhzbAorK19pZHMgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCisgCisgaWYgRU5BQkxFX1NLCisgX0VOQUJMRV9TSyA9IHRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxOTZjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1dlIGNhbid0IHVzZSAjIS9mdWxsL3BhdGgvdG8vcHl0aG9uIC11IGFzIHRoaXMgY2FuIGJlIGxvbmdlciB0aGFuIHNoZWJhbmcKK2FsbG93cyBmb3IuICBJbiBvcmRlciB0byBiZSBhcHByb3ByYWl0ZSBmb3IgdXBzdHJlYW0gbW9yZSB3b3JrIHdvdWxkIGJlCituZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1haW4geG1sMnBvIGNvZGUgZG9lc24ndCByZWx5IG9uIHB5dGhvbgorYmVpbmcgaW52b2tlZCB3aXRoIC11IChmb3JjZSBzdGRpbi9vdXQvZXJyIHRvIGJlIHVzZWQgcmF3KS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtXb3VsZCBicmVhayBiZWhhdmlvciBvbiBXaW5kb3dzXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KK0BAIC03LDcgKzcsNiBAQCBDTEVBTkZJTEVTID0geG1sMnBvCisgCisgeG1sMnBvOiB4bWwycG8ucHkuaW4KKyAJJChBTV9WX0dFTilzZWQgLWUgInMvXlZFUlNJT04gPS4qL1ZFUlNJT04gPSBcIkBWRVJTSU9OQFwiLyIgXAorLQkgICAgLWUgInMrXiMhLipweXRob24uKisjISQoUFlUSE9OKSsiIFwKKyAJICA8ICQoc3JjZGlyKS94bWwycG8ucHkuaW4gPiB4bWwycG8KKyAJJChBTV9WX2F0KWNobW9kICt4IHhtbDJwbworIAorSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdQorKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorICMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KKyAjIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgMjAwNiBEYW5pbG8gxaBlZ2FuIDxkYW5pbG9AZ25vbWUub3JnPi4KKyAjIENvcHlyaWdodCAoYykgMjAwOSBDbGF1ZGUgUGFyb3ogPGNsYXVkZUAyeGxpYnJlLm5ldD4uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy94c2x0cHJvY19ub25ldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQ2NDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy94c2x0cHJvY19ub25ldC5wYXRjaApAQCAtMCwwICsxLDk1IEBACitUaGlzIGFkZHMgdGhlIC1ub25ldCBvcHRpb24gdG8geHNsdHByb2MgaW52b2NhdGlvbnMsIHdoaWNoIGZpeGVzCitjb21waWxlIGVycm9ycyB3aGVuIGJ1aWxkaW5nIHRoZSBnbm9tZS1kb2MtdXRpbHMgZG9jcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvZG9jL3hzbHQvTWFrZWZpbGUuYW0KKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQorQEAgLTIxLDE0ICsyMSwxNCBAQCBhbGw6ICQoeHNsZG9jX2RvY3MpICQoeHNsZG9jX3htbHMpCisgCisgJCh4c2xkb2NfZG9jcyk6ICQoeHNsZG9jX3hzbHMpIHhzbGRvYy5hd2sgeHNsZG9jLWZpbGwueHNsCisgCSQoQU1fVl9HRU4pJChHRFVfQVdLKSAtZiAiJChzcmNkaXIpL3hzbGRvYy5hd2siICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCistCXwgeHNsdHByb2MgLW8gIiRAIiBcCisrCXwgeHNsdHByb2MgLW5vbmV0IC1vICIkQCIgXAorIAktLXN0cmluZ3BhcmFtIGJhc2VuYW1lICIkKGJhc2VuYW1lICQobm90ZGlyICRAKSkiIFwKKyAJLS1zdHJpbmdwYXJhbSB4c2xfZmlsZSAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAorIAkiJChzcmNkaXIpL3hzbGRvYy1maWxsLnhzbCIgLQorIAorICQoeHNsZG9jX3htbHMpOiB4c2xkb2MtZG9jYm9vay54c2wKKyAkKHhzbGRvY194bWxzKTogQy8lLnhtbCA6IEMvJS54c2xkb2MKKy0JJChBTV9WX0dFTil4c2x0cHJvYyAtbyAiJEAiIFwKKysJJChBTV9WX0dFTil4c2x0cHJvYyAtbm9uZXQgLW8gIiRAIiBcCisgCS0tc3RyaW5ncGFyYW0gYmFzZW5hbWUgIiQoYmFzZW5hbWUgJChub3RkaXIgJEApKSIgXAorIAktLXN0cmluZ3BhcmFtIHhzbF9maWxlICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCisgCSIkKHNyY2RpcikveHNsZG9jLWRvY2Jvb2sueHNsIiAiJDwiCitAQCAtNjIsNyArNjIsNyBAQCBnbm9tZS1kb2MteHNsdC1jaGVjay1pbmNsdWRlczoKKyBnbm9tZS1kb2MteHNsdC1jaGVjay14c2xkb2M6ICQoeHNsZG9jX2RvY3MpCisgCUBlY2hvICJSdW5uaW5nIHhzbGRvYyBjaGVja3MiOworIAlAKGVjaG8gIjx4c2xkb2M+IjsgY2F0ICQoeHNsZG9jX2RvY3MpOyBlY2hvICI8L3hzbGRvYz4iKSBcCistCXwgeHNsdHByb2MgIiQoc3JjZGlyKS94c2xkb2MtY2hlY2sueHNsIiAtIDE+IC9kZXYvbnVsbAorKwl8IHhzbHRwcm9jIC1ub25ldCAiJChzcmNkaXIpL3hzbGRvYy1jaGVjay54c2wiIC0gMT4gL2Rldi9udWxsCisgCisgLlBIT05ZOiBjbGVhbi14c2xkb2MKKyBjbGVhbi1sb2NhbDogY2xlYW5feHNsZG9jCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKK0BAIC0zNyw3ICszNyw3IEBAICQoRE9DX0hfRklMRSk6ICQoRE9DX0hfRE9DUyk7CisgCWxpc3Q9JyQoRE9DX0hfRE9DUyknOyBmb3IgZG9jIGluICQkbGlzdDsgZG8gXAorIAkgIHhtbHBhdGg9ImBlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2A6JChzcmNkaXIpL2BlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2AiOyBcCisgCSAgaWYgISB0ZXN0IC1mICIkJGRvYyI7IHRoZW4gZG9jPSIkKHNyY2RpcikvJCRkb2MiOyBmaTsgXAorLQkgIHhzbHRwcm9jIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9jcmVkaXRzKSAkJGRvYzsgXAorKwkgIHhzbHRwcm9jIC1ub25ldCAtLXBhdGggIiQkeG1scGF0aCIgJChfY3JlZGl0cykgJCRkb2M7IFwKKyAJZG9uZSB8IHNvcnQgfCB1bmlxIFwKKyAJICB8IGF3ayAnQkVHSU57cz0iIn17bj1zcGxpdCgkJDAsdywiPCIpO2lmKHMhPSIiJiZzIT1zdWJzdHIod1sxXSwxLGxlbmd0aCh3WzFdKS0xKSl7cHJpbnQgc307aWYobj4xKXtwcmludCAkJDA7cz0iIn1lbHNle3M9JCQwfX07RU5Ee2lmKHMhPSIiKXtwcmludCBzfX0nIFwKKyAJICB8IHNlZCAtZSAncy9cXC9cXFxcLycgLWUgJ3MvIi9cXCIvJyAtZSAncy9cKC4qXCkvXHQiXDEiLC8nID4+ICRALnRtcAorQEAgLTUwLDcgKzUwLDcgQEAgJChET0NfSF9GSUxFKTogJChET0NfSF9ET0NTKTsKKyAJICBkb2NpZD1gZWNobyAiJCRkb2MiIHwgc2VkIC1lICdzLy4qXC9cKFteL10qXClcLnhtbC9cMS8nIFwKKyAJICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYDsgXAorIAkgIGVjaG8gJCR4bWxwYXRoOyBcCistCSAgaWRzPWB4c2x0cHJvYyAtLXhpbmNsdWRlIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9pZHMpICQkZG9jYDsgXAorKwkgIGlkcz1geHNsdHByb2MgLW5vbmV0IC0teGluY2x1ZGUgLS1wYXRoICIkJHhtbHBhdGgiICQoX2lkcykgJCRkb2NgOyBcCisgCSAgZm9yIGlkIGluICQkaWRzOyBkbyBcCisgCSAgICBlY2hvICcjZGVmaW5lIEhFTFBfJ2BlY2hvICQkZG9jaWRgJ18nYGVjaG8gJCRpZCBcCisgCSAgICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYCcgIickJGlkJyInID4+ICRALnRtcDsgXAorQEAgLTE5Nyw3ICsxOTcsNyBAQCAkKF9ET0NfT01GX0RCKSA6ICQoRE9DX01PRFVMRSktJS5vbWYgOiAlCisgCSAgZWNobyAiVGhlIGZpbGUgJyQoX3NrY29udGVudHNsaXN0KScgZG9lcyBub3QgZXhpc3QuIiA+JjI7CQlcCisgCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKKyAJICBleGl0IDE7IH0KKy0JJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCdkb2Nib29rJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKysJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwnZG9jYm9vaycpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisgCisgIyMgQCBfRE9DX09NRl9IVE1MCisgIyMgVGhlIE9NRiBmaWxlcyBmb3IgSFRNTCBvdXRwdXQKK0BAIC0yMTIsNyArMjEyLDcgQEAgaWYgRU5BQkxFX1NLCisgCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKKyAJICBleGl0IDE7IH0KKyBlbmRpZgorLQkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ3hodG1sJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKysJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwneGh0bWwnKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQorIAorICMjIEAgX0RPQ19PTUZfQUxMCisgIyMgQWxsIE9NRiBvdXRwdXQgZmlsZXMgdG8gYmUgYnVpbHQKK0BAIC0yNjcsNyArMjY3LDcgQEAgX0RPQ19DX0ZJR1VSRVMgPSAkKGlmICQoRE9DX0ZJR1VSRVMpLAorICMjIEFsbCBIVE1MIGRvY3VtZW50YXRpb24gaW4gdGhlIEMgbG9jYWxlCisgIyBGSVhNRTogcHJvYmFibHkgaGF2ZSB0byBzaGVsbCBlc2NhcGUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG5hbWVzCisgX0RPQ19DX0hUTUwgPSAkKGZvcmVhY2ggZiwJCQkJCQlcCistCSQoc2hlbGwgeHNsdHByb2MgLS14aW5jbHVkZSAJCQkJCVwKKysJJChzaGVsbCB4c2x0cHJvYyAtbm9uZXQgLS14aW5jbHVkZSAJCQkJCVwKKyAJICAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIgkJXAorIAkgICQoX2NodW5rcykgIkMvJChET0NfTU9EVUxFKS54bWwiKSwJCQkJXAorIAlDLyQoZikueGh0bWwpCitAQCAtMzkzLDcgKzM5Myw3IEBAIF9ET0NfSFRNTF9BTEwgPSAkKGlmICQoZmlsdGVyIGh0bWwgSFRNTCwKKyBfRE9DX0hUTUxfVE9QUyA9ICQoZm9yZWFjaCBsYyxDICQoX0RPQ19SRUFMX0xJTkdVQVMpLCQobGMpLyQoRE9DX01PRFVMRSkueGh0bWwpCisgCisgJChfRE9DX0hUTUxfVE9QUyk6ICQoX0RPQ19DX0RPQ1MpICQoX0RPQ19MQ19ET0NTKQorLQkkKEdEVV9WX0RCMkhUTSl4c2x0cHJvYyAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCisrCSQoR0RVX1ZfREIySFRNKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCisgCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGNjMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ25vbWUtZG9jLXV0aWxzLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorCitTUkNfVVJJICs9ICJmaWxlOi8veHNsdHByb2Nfbm9uZXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjNjNjRhZDdiYWNkNjE3YjA0OTk5ZTRhMTY4YWZhYWM1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiY2IwNjM5ZmZhOTU1MGI2ZGRmM2I2MmYzYjFhZGQ5MmZiOTJhYjQ2OTBkMzUxZjIzNTNjZmZlNjY4YmU4YzRhNiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwMzQyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdub21lLW1pbWUtZGF0YS0yLjE4LjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1taW1lLWRhdGEtMi4xOC4wLm9yaWcvTWFrZWZpbGUuYW0JMjAwOS0wNi0xMSAxNzoyNzo0OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbm9tZS1taW1lLWRhdGEtMi4xOC4wL01ha2VmaWxlLmFtCTIwMDktMDYtMTEgMTc6Mjc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMSw2ICsxLDYgQEAKKyBTVUJESVJTID0gbWFuIHBvCisgCistcGtnY29uZmlnZGlyID0gJChkYXRhZGlyKS9wa2djb25maWcKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBnbm9tZS1taW1lLWRhdGEtMi4wLnBjCisgCisgTlVMTD0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YV8yLjE4LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxZWI1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQmFzZSBNSU1FIGFuZCBBcHBsaWNhdGlvbiBkYXRhYmFzZSBmb3IgR05PTUUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NoZWNrLW1pbWUucGw7ZW5kbGluZT0yNjttZDU9YTk1YjYzYzkyYzMzZDRjYTFhZjYxYTMxNTg4OGY0NTAiCisKK2luaGVyaXQgZ25vbWViYXNlIG1pbWUKK1BSID0gInI0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1NDE4NTgxODhmODAwOTBkMTJhMzNiNWE3YzM0ZDQyYyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjM3MTk2YjViMzcwODViYmNkNDVjMzM4YzM2ZTI2ODk4ZmUzNWRkNTk3NTI5NWY2OWY0ODAyOGIxZTg0MzZmZDciCitHTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCisKK0RFUEVORFMgKz0gInNoYXJlZC1taW1lLWluZm8gaW50bHRvb2wtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAic2hhcmVkLW1pbWUtaW5mbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsL2xpYmFydF9sZ3BsLTIuMy4yMS1jcm9zc2NvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2MWY1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK1Rha2VuIGZyb20gcG9ydGFnZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Zyb20gZTE0NDNjOTQ1YTRjZjY3MDk2ZDhjMjc3MjFhYWRkNzM2ODM4MmIzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEdpbGxlcyBEYXJ0aWd1ZWxvbmd1ZSA8ZXZhQGdlbnRvby5vcmc+CitEYXRlOiBUdWUsIDYgQXByIDIwMTAgMTU6MjI6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGdlbnRvbzogdXNlIElTTyB0eXBlcyBmb3IgZml4ZWQgdHlwZSBzaXplCisKKy0tLQorIE1ha2VmaWxlLmFtICB8ICAgMTEgKystLS0tLS0tLS0KKyBhcnRfY29uZmlnLmggfCAgICA1ICsrKysrCisgY29uZmlndXJlLmluIHwgICAxMCAtLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcnRfY29uZmlnLmgKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDk1OTUyZGEuLjZhYTJmZTMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yLDEzICsyLDYgQEAgY2hlY2tfUFJPR1JBTVMgPSB0ZXN0YXJ0IHRlc3R1dGEKKyAKKyBiaW5fU0NSSVBUUyA9IFwKKyAJbGliYXJ0Mi1jb25maWcKKy0JCistbm9pbnN0X1NDUklQVFMgPSBnZW5fYXJ0X2NvbmZpZy5zaAorLQorLUJVSUxUX1NPVVJDRVMgPSBhcnRfY29uZmlnLmgKKy0KKy1hcnRfY29uZmlnLmg6CistCS4vZ2VuX2FydF9jb25maWcuc2ggPiBhcnRfY29uZmlnLmgKKyAKKyBFWFRSQV9ESVNUID0gCQkJXAorIAlsaWJhcnQuZGVmCQlcCitAQCAtMTczLDUgKzE2Niw1IEBAIGluc3RhbGwtZGF0YS1sb2NhbDogaW5zdGFsbC1tcy1saWIgaW5zdGFsbC1saWJ0b29sLWltcG9ydC1saWIKKyAKKyB1bmluc3RhbGwtbG9jYWw6IHVuaW5zdGFsbC1tcy1saWIgdW5pbnN0YWxsLWxpYnRvb2wtaW1wb3J0LWxpYgorIAorLUNMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpICQoYmluX1NDUklQVFMpCistRElTVENMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpICQoYmluX1NDUklQVFMpCisrQ0xFQU5GSUxFUyA9ICQoYmluX1NDUklQVFMpCisrRElTVENMRUFORklMRVMgPSAkKGJpbl9TQ1JJUFRTKQorZGlmZiAtLWdpdCBhL2FydF9jb25maWcuaCBiL2FydF9jb25maWcuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU5ODVmMWYKKy0tLSBhL2FydF9jb25maWcuaAorKysrIGIvYXJ0X2NvbmZpZy5oCitAQCAtMCwwICsxLDUgQEAKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrdHlwZWRlZiB1aW50OF90IGFydF91ODsKKyt0eXBlZGVmIHVpbnQxNl90IGFydF91MTY7CisrdHlwZWRlZiB1aW50MzJfdCBhcnRfdTMyOworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZTQ4MDRmNy4uZGRjYWM0ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtOTIsMTUgKzkyLDYgQEAgQUNfRlVOQ19BTExPQ0EKKyAKKyBBQ19DX0JJR0VORElBTgorIAorLUFDX0NIRUNLX1NJWkVPRihjaGFyKQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfQ0hBUiwgJGFjX2N2X3NpemVvZl9jaGFyKQorLUFDX0NIRUNLX1NJWkVPRihzaG9ydCkKKy1BQ19TVUJTVChBUlRfU0laRU9GX1NIT1JULCAkYWNfY3Zfc2l6ZW9mX3Nob3J0KQorLUFDX0NIRUNLX1NJWkVPRihpbnQpCistQUNfU1VCU1QoQVJUX1NJWkVPRl9JTlQsICRhY19jdl9zaXplb2ZfaW50KQorLUFDX0NIRUNLX1NJWkVPRihsb25nKQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfTE9ORywgJGFjX2N2X3NpemVvZl9sb25nKQorLQorIEFDX0NPTkZJR19GSUxFUyhbCisgbGliYXJ0LWZlYXR1cmVzLmgKKyBNYWtlZmlsZQorQEAgLTEwOSw2ICsxMDAsNSBAQCBsaWJhcnQtMi4wLXVuaW5zdGFsbGVkLnBjCisgbGliYXJ0LXppcF0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFtsaWJhcnQtY29uZmlnXSxbY2htb2QgK3ggbGliYXJ0LWNvbmZpZ10pCistQUNfQ09ORklHX0ZJTEVTKFtnZW5fYXJ0X2NvbmZpZy5zaF0sW2NobW9kICt4IGdlbl9hcnRfY29uZmlnLnNoXSkKKyAKKyBBQ19PVVRQVVQKKy0tIAorMS43LjAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsXzIuMy4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTU4MWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsXzIuMy4yMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkxpYnJhcnkgb2YgZnVuY3Rpb25zIGZvciAyRCBncmFwaGljcyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKK1BSID0gInIyIgorCisjIGNhbid0IHVzZSBnbm9tZS5vZWNsYXNzIGR1ZSB0byBfIGluIGZpbGVuYW1lCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9saWJhcnRfbGdwbC8yLjMvbGliYXJ0X2xncGwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwODU1OWZmM2M2N2ZkOTVkNTdiMGM1ZTkxYTZiNDMwMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGMxMWU3NGMxMGZjOWZmZTQxODg1MzdlMmIzNzBjMGFiYWNjYTdkODkwMjFkNGQzMDNhZmRmN2ZkNzQ3NmZhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICIiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9saWJhcnQyLWNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2xpYmFydF9sZ3BsLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMTYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmYyYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorU1VNTUFSWSA9ICJHTk9NRSBkZXNrdG9wLXdpZGUgR1NldHRpbmdzIHNjaGVtYXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdldHRleHQKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYmFlYmJjZjNjMjA1OTFmOTg4NzZlNDJmYjBhM2ZkMzUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI3NGZlOWZkYWQ1MTBjOGE2NjY2ZmViZWNlYjdlYmFmYzU4MWVmOTkwYjNhZmNjOGMxZThiNWQ5MGIyNGIzNDYxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUyNzNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJNdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBHVUlzIgorREVTQ1JJUFRJT04gPSAiR1RLKyBpcyBhIG11bHRpLXBsYXRmb3JtIHRvb2xraXQgZm9yIGNyZWF0aW5nIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMuIE9mZmVyaW5nIGEgY29tcGxldGUgXAorc2V0IG9mIHdpZGdldHMsIEdUSysgaXMgc3VpdGFibGUgZm9yIHByb2plY3RzIHJhbmdpbmcgZnJvbSBzbWFsbCBvbmUtb2ZmIHByb2plY3RzIHRvIGNvbXBsZXRlIGFwcGxpY2F0aW9uIHN1aXRlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworU0VDVElPTiA9ICJsaWJzIgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICJkaXJlY3RmYiB4MTEiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4Y3Vyc29yIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnhyZW5kZXIgbGlieGNvbXBvc2l0ZSIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgcGFuZ28gYXRrIGpwZWcgbGlicG5nIGdkay1waXhidWYtbmF0aXZlIGRvY2Jvb2stdXRpbHMtbmF0aXZlIFwKKyBjYWlybyBnZGstcGl4YnVmIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14PXllcyAtLXdpdGgtZ2RrdGFyZ2V0PXgxMSwtLXdpdGgteD1ubywke1gxMURFUEVORFN9IgorIyB3aXRob3V0IC0td2l0aC1nZGt0YXJnZXQ9ZGlyZWN0ZmIgaXQgd2lsbCBjaGVjayBmb3IgY2Fpcm8teGxpYiB3aGljaCBpc24ndCBhdmFpbGFibGUgd2l0aG91dCBYMTEgRElTVFJPX0ZFQVRVUkUKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdID0gIi0td2l0aC1nZGt0YXJnZXQ9ZGlyZWN0ZmIsLGRpcmVjdGZiIgorCitpbmhlcml0IGF1dG90b29scyBndGstZG9jIHBrZ2NvbmZpZyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGd0ay1pbW1vZHVsZXMtY2FjaGUKKworUEFDS0FHRVMgKz0gImxpYmdhaWwgZ3RrLWRlbW8iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wIFwKKwkke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjAgXAorCSR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKwkke2RhdGFkaXJ9L3RoZW1lcyAke3N5c2NvbmZkaXJ9IFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2VuZ2luZXMvbGlicGl4bWFwLnNvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTIuMC9pbmNsdWRlIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9pbmNsdWRlIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzLyoubGEgXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2ltbW9kdWxlcy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L3ByaW50YmFja2VuZHMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9lbmdpbmVzLyoubGEgXAorCSR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8uZGVidWcvKiBcCisgICAgICAgICR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vbG9hZGVycy8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9pbW1vZHVsZXMvLmRlYnVnLyogXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vZW5naW5lcy8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9wcmludGJhY2tlbmRzLy5kZWJ1Zy8qIgorCitGSUxFU19ndGstZGVtbyA9ICIgXAorICR7ZGF0YWRpcn0vZ3RrLTIuMC9kZW1vLyogXAorICR7YmluZGlyfS9ndGstZGVtbyBcCisgIgorCitGSUxFU19saWJnYWlsID0gIiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJnYWlsLnNvIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmZlcnJldC5zbyBcCisJIgorCitHVEtCQVNFX1JSRUNPTU1FTkRTID89ICJsaWJlcmF0aW9uLWZvbnRzIGdkay1waXhidWYtbG9hZGVyLXBuZyBnZGstcGl4YnVmLWxvYWRlci1qcGVnIGdkay1waXhidWYtbG9hZGVyLWdpZiBnZGstcGl4YnVmLWxvYWRlci14cG0gc2hhcmVkLW1pbWUtaW5mbyIKK0dUS0dMSUJDX1JSRUNPTU1FTkRTID89ICIke0dUS0JBU0VfUlJFQ09NTUVORFN9IGdsaWJjLWdjb252LWlzbzg4NTktMSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtHVEtCQVNFX1JSRUNPTU1FTkRTfSIKK1JSRUNPTU1FTkRTXyR7UE59X2xpYmMtZ2xpYmMgPSAiJHtHVEtHTElCQ19SUkVDT01NRU5EU30iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtndGstdXBkYXRlLWljb24tY2FjaGVdID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9ndGstMi4wCisKKwlta2RpciAtcCAke0R9JHtsaWJkaXJ9L2d0ay0yLjAvaW5jbHVkZQorCWluc3RhbGwgLW0gMDY0NCBnZGsvZ2RrY29uZmlnLmggJHtEfSR7bGliZGlyfS9ndGstMi4wL2luY2x1ZGUvZ2RrY29uZmlnLmgKKworCWluc3RhbGwgLW0gMDY0NCAke1N9L2d0ay9ndGtmaWxlY2hvb3NlcnByaXZhdGUuaCAke0R9JHtpbmNsdWRlZGlyfS9ndGstMi4wL2d0ay8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ndGsvZ3RrZmlsZWNob29zZXJ1dGlscy5oICAgJHtEfSR7aW5jbHVkZWRpcn0vZ3RrLTIuMC9ndGsvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZ3RrL2d0a2ZpbGVzeXN0ZW1tb2RlbC5oICAgICR7RH0ke2luY2x1ZGVkaXJ9L2d0ay0yLjAvZ3RrLworCisJbXYgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZ3RrX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZ3RrX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJaWYgWyAtZSAke0R9JHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisJCWluc3RhbGwgLW0gNzU1ICR7RH0ke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWZpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9kb2MtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlNDc5ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1RoZXJlIGFyZSBpc3N1ZXMgYnVpbGRpbmcgdGhlIGd0aysgdHV0b3JpYWwgYW5kIGZhcSBkb2N1bWVudGF0aW9uLgorU2luY2UgdGhleSB3ZXJlIHJlbW92ZWQgaW4gZ3RrKyB1cHN0cmVhbSBhbmQgYXJlIHN1cGVyZmx1b3VzIGluCitlbWJlZGRlZCBhcHBsaWNhdGlvbnMsIGp1c3QgZG9uJ3QgYnVpbGQgdGhlbS4KKworVGhhbmtzIHRvIEpvc2h1YSBMb2NrIGZvciBzdWdnZXN0aW5nIHRoaXMgYXBwcm9hY2guCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitkaWZmIC11ck4gZ3RrKy0yLjIyLjEub3JpZy9kb2NzL01ha2VmaWxlLmFtIGd0aystMi4yMi4xL2RvY3MvTWFrZWZpbGUuYW0KKy0tLSBndGsrLTIuMjIuMS5vcmlnL2RvY3MvTWFrZWZpbGUuYW0JMjAxMC0xMS0xNSAwNDoxMzowOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBndGsrLTIuMjIuMS9kb2NzL01ha2VmaWxlLmFtCTIwMTEtMDItMjMgMTk6MjU6MTYuOTE0ODE1MDk3IC0wODAwCitAQCAtMSw3ICsxLDcgQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcikvTWFrZWZpbGUuZGVjbAorIAorLVNVQkRJUlMgPSB0dXRvcmlhbCBmYXEgcmVmZXJlbmNlIHRvb2xzCisrU1VCRElSUyA9IHJlZmVyZW5jZSB0b29scworIAorIEVYVFJBX0RJU1QgKz0gXAorIAlkZWZzZm9ybWF0LnR4dAkJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZTcyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1VwZGF0ZWQgdG8gYXBwbHkgdG8gZ3RrKy0yLjI0LjE1CisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMgZ3RrKy0yLjI0LjE1L2NvbmZpZ3VyZS5hYworLS0tIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMJMjAxMy0wMS0xMiAyMDo1Mjo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjCTIwMTMtMDItMTIgMjE6MzM6MzAuNjg5OTI1OTY3ICswMjAwCitAQCAtNDE1LDcgKzQxNSw3IEBACisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJyE9JyB4cGFzc19hbGwgfHwgdGVzdCAieCRlbmFibGVfc3RhdGljIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgZW5hYmxlX2V4cGxpY2l0X2RlcHM9eWVzCisgICAgIGVsc2UKK0BAIC03NzQsNyArNzc0LDcgQEAKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIG1vZHVsZV9kZXBsaWJzX2NoZWNrPWAkbW9kdWxlX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtMTU3NCw3ICsxNTc0LDcgQEAKKyAjIFdlIGFyZSB1c2luZyBnbW9kdWxlLW5vLWV4cG9ydCBub3csIGJ1dCBJJ20gbGVhdmluZyB0aGUgc3RyaXBwaW5nCisgIyBjb2RlIGluIHBsYWNlIGZvciBub3csIHNpbmNlIHBhbmdvIGFuZCBhdGsgc3RpbGwgcmVxdWlyZSBnbW9kdWxlLgorIGV4cG9ydCBTRUQKKy1leHBvcnRfZHluYW1pYz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorK2V4cG9ydF9keW5hbWljPWAoJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19ERVBfTElCUz1gZWNobyAkR0RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKyAgIEdUS19ERVBfTElCUz1gZWNobyAkR1RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTFmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0ZpeGVzCisKK2luY2x1ZGUvZ3RrLTIuMC9ndGsvZ3RraXRlbWZhY3RvcnkuaDo0NzoxOiB3YXJuaW5nOiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpc24ndCBhIHByb3RvdHlwZSBbLVdzdHJpY3QtcHJvdG90eXBlc10KKyB0eXBlZGVmIHZvaWQgKCpHdGtJdGVtRmFjdG9yeUNhbGxiYWNrKSAgKCk7CisKK2djYzUgaGFzIC1Xc3RyaWN0LXByb3RvdHlwZXMgb24gYnkgZGVmYXVsdCBmb3IgLVdlcnJvciBzbyB0aGlzIGJlY29tZXMgYSBidWlsZCBmYWlsdXJlIGZvciBjb25zdW1lcnMKK29mIHRoaXMgaGVhZGVyIGUuZy4gbWF0Y2hib3gtcGFuZWwtMgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBndGsrLTIuMjQuMjcvZ3RrL2d0a2l0ZW1mYWN0b3J5LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsrLTIuMjQuMjcub3JpZy9ndGsvZ3RraXRlbWZhY3RvcnkuaAorKysrIGd0aystMi4yNC4yNy9ndGsvZ3RraXRlbWZhY3RvcnkuaAorQEAgLTQ0LDcgKzQ0LDcgQEAgdHlwZWRlZiB2b2lkCSgqR3RrUHJpbnRGdW5jKQkJICAgKGdwb2ludAorICAqIChOb3RlIHRoYXQgaWYgd2UgYXJlIGluY2x1ZGVkIGZyb20gYSBDKysgcHJvZ3JhbSAoKSB3aWxsIG1lYW4KKyAgKiAodm9pZCkgc28gYW4gZXhwbGljaXQgY2FzdCB3aWxsIGJlIG5lZWRlZC4pCisgICovCistdHlwZWRlZgl2b2lkCSgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjaykgICgpOworK3R5cGVkZWYJdm9pZAkoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2spICAodm9pZCk7CisgdHlwZWRlZgl2b2lkCSgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjazEpIChncG9pbnRlcgkJIGNhbGxiYWNrX2RhdGEsCisgCQkJCQkgICAgZ3VpbnQJCSBjYWxsYmFja19hY3Rpb24sCisgCQkJCQkgICAgR3RrV2lkZ2V0CQkqd2lkZ2V0KTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDBkMTIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmCkBAIC0wLDAgKzEsMTAyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYy5vcmlnCTIwMTAtMDYtMjIgMTg6MTE6MzMuMDAwMDAwMDAwICswODAwCisrKysgZ3RrL2d0a2NlbGxyZW5kZXJlcnRvZ2dsZS5jCTIwMTAtMDYtMjIgMTg6MTE6NDMuMDAwMDAwMDAwICswODAwCitAQCAtNzEsNiArNzEsOCBAQAorICAgUFJPUF9JTkRJQ0FUT1JfU0laRQorIH07CisgCisrLyogVGhpcyBpcyBhIGhhcmQtY29kZWQgZGVmYXVsdCB3aGljaCBwcm9tcHRseSBnZXRzIG92ZXJyaWRkZW4gYnkgYSBzaXplCisrICAgY2FsY3VsYXRlZCBmcm9tIHRoZSBmb250IHNpemUuICovCisgI2RlZmluZSBUT0dHTEVfV0lEVEggMTMKKyAKKyBzdGF0aWMgZ3VpbnQgdG9nZ2xlX2NlbGxfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKK0BAIC04MCw4ICs4Miw5IEBACisgdHlwZWRlZiBzdHJ1Y3QgX0d0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGUgR3RrQ2VsbFJlbmRlcmVyVG9nZ2xlUHJpdmF0ZTsKKyBzdHJ1Y3QgX0d0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGUKKyB7CistICBnaW50IGluZGljYXRvcl9zaXplOworLQorKyAgZ2ludCBpbmRpY2F0b3Jfc2l6ZTsgLyogVGhpcyBpcyB0aGUgcmVhbCBzaXplICovCisrICBnaW50IG92ZXJyaWRlX3NpemU7IC8qIFRoaXMgaXMgdGhlIHNpemUgc2V0IGZyb20gdGhlIGluZGljYXRvci1zaXplIHByb3BlcnR5ICovCisrICBHdGtXaWRnZXQgKmNhY2hlZF93aWRnZXQ7CisgICBndWludCBpbmNvbnNpc3RlbnQgOiAxOworIH07CisgCitAQCAtMTA0LDYgKzEwNyw3IEBACisgICBHVEtfQ0VMTF9SRU5ERVJFUiAoY2VsbHRvZ2dsZSktPnlwYWQgPSAyOworIAorICAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBUT0dHTEVfV0lEVEg7CisrICBwcml2LT5vdmVycmlkZV9zaXplID0gMDsKKyAgIHByaXYtPmluY29uc2lzdGVudCA9IEZBTFNFOworIH0KKyAKK0BAIC0yMTAsNyArMjE0LDcgQEAKKyAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgY2VsbHRvZ2dsZS0+cmFkaW8pOworICAgICAgIGJyZWFrOworICAgICBjYXNlIFBST1BfSU5ESUNBVE9SX1NJWkU6CistICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+aW5kaWNhdG9yX3NpemUpOworKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPm92ZXJyaWRlX3NpemUgPyBwcml2LT5vdmVycmlkZV9zaXplIDogcHJpdi0+aW5kaWNhdG9yX3NpemUpOworICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwYXJhbV9pZCwgcHNwZWMpOworQEAgLTI0NSw3ICsyNDksNyBAQAorICAgICAgIGNlbGx0b2dnbGUtPnJhZGlvID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgIGJyZWFrOworICAgICBjYXNlIFBST1BfSU5ESUNBVE9SX1NJWkU6CistICAgICAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKysgICAgICBwcml2LT5vdmVycmlkZV9zaXplID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CisgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHBhcmFtX2lkLCBwc3BlYyk7CitAQCAtMjczLDYgKzI3NywyNyBAQAorIH0KKyAKKyBzdGF0aWMgdm9pZAorK29uX3dpZGdldF9zdHlsZV9zZXQgKEd0a1dpZGdldCAqd2lkZ2V0LCBHdGtTdHlsZSAqcHJldmlvdXMsIGdwb2ludGVyIHVzZXJfZGF0YSkKKyt7CisrICBHdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlICpwcml2ID0gdXNlcl9kYXRhOworKyAgUGFuZ29Db250ZXh0ICpjb250ZXh0OworKyAgUGFuZ29Gb250TWV0cmljcyAqbWV0cmljczsKKysgIGludCBoZWlnaHQ7CisrICAKKysgIGNvbnRleHQgPSBndGtfd2lkZ2V0X2dldF9wYW5nb19jb250ZXh0ICh3aWRnZXQpOworKyAgbWV0cmljcyA9IHBhbmdvX2NvbnRleHRfZ2V0X21ldHJpY3MgKGNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LT5zdHlsZS0+Zm9udF9kZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmdvX2NvbnRleHRfZ2V0X2xhbmd1YWdlIChjb250ZXh0KSk7CisrCisrICBoZWlnaHQgPSBwYW5nb19mb250X21ldHJpY3NfZ2V0X2FzY2VudCAobWV0cmljcykgKworKyAgICBwYW5nb19mb250X21ldHJpY3NfZ2V0X2Rlc2NlbnQgKG1ldHJpY3MpOworKyAgCisrICBwYW5nb19mb250X21ldHJpY3NfdW5yZWYgKG1ldHJpY3MpOworKyAgCisrICBwcml2LT5pbmRpY2F0b3Jfc2l6ZSA9IFBBTkdPX1BJWEVMUyAoaGVpZ2h0ICogMC44NSk7CisrfQorKworK3N0YXRpYyB2b2lkCisgZ3RrX2NlbGxfcmVuZGVyZXJfdG9nZ2xlX2dldF9zaXplIChHdGtDZWxsUmVuZGVyZXIgKmNlbGwsCisgCQkJCSAgIEd0a1dpZGdldCAgICAgICAqd2lkZ2V0LAorIAkJCQkgICBHZGtSZWN0YW5nbGUgICAgKmNlbGxfYXJlYSwKK0BAIC0yODcsNiArMzEyLDIwIEBACisgCisgICBwcml2ID0gR1RLX0NFTExfUkVOREVSRVJfVE9HR0xFX0dFVF9QUklWQVRFIChjZWxsKTsKKyAKKysgIGlmIChwcml2LT5vdmVycmlkZV9zaXplKSB7CisrICAgIHByaXYtPmluZGljYXRvcl9zaXplID0gcHJpdi0+b3ZlcnJpZGVfc2l6ZTsKKysgIH0gZWxzZSBpZiAocHJpdi0+Y2FjaGVkX3dpZGdldCAhPSB3aWRnZXQpIHsKKysgICAgaWYgKHByaXYtPmNhY2hlZF93aWRnZXQpIHsKKysgICAgICBnX29iamVjdF9yZW1vdmVfd2Vha19wb2ludGVyICh3aWRnZXQsICZwcml2LT5jYWNoZWRfd2lkZ2V0KTsKKysgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPmNhY2hlZF93aWRnZXQsIG9uX3dpZGdldF9zdHlsZV9zZXQsIHByaXYpOworKyAgICB9CisrICAgIHByaXYtPmNhY2hlZF93aWRnZXQgPSB3aWRnZXQ7CisrICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIgKHdpZGdldCwgJnByaXYtPmNhY2hlZF93aWRnZXQpOworKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3aWRnZXQsICJzdHlsZS1zZXQiLCBvbl93aWRnZXRfc3R5bGVfc2V0LCBwcml2KTsKKysgICAgCisrICAgIG9uX3dpZGdldF9zdHlsZV9zZXQgKHdpZGdldCwgTlVMTCwgcHJpdik7CisrICB9CisrCisgICBjYWxjX3dpZHRoID0gKGdpbnQpIGNlbGwtPnhwYWQgKiAyICsgcHJpdi0+aW5kaWNhdG9yX3NpemU7CisgICBjYWxjX2hlaWdodCA9IChnaW50KSBjZWxsLT55cGFkICogMiArIHByaXYtPmluZGljYXRvcl9zaXplOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3hzZXR0aW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGE5NzBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBndGsrLTIuMjEuMi9nZGsveDExL2dka2V2ZW50cy14MTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0aystMi4yMS4yLm9yaWcvZ2RrL3gxMS9nZGtldmVudHMteDExLmMJMjAxMC0wNi0yMiAxNzoyODowNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBndGsrLTIuMjEuMi9nZGsveDExL2dka2V2ZW50cy14MTEuYwkyMDEwLTA2LTIyIDE3OjI4OjA2LjAwMDAwMDAwMCArMDgwMAorQEAgLTMwNjIsMTAgKzMwNjIsOSBAQAorIHsKKyAgIEdka1NjcmVlblgxMSAqc2NyZWVuID0gZGF0YTsKKyAgIAorLSAgaWYgKHhzZXR0aW5nc19jbGllbnRfcHJvY2Vzc19ldmVudCAoc2NyZWVuLT54c2V0dGluZ3NfY2xpZW50LCAoWEV2ZW50ICopeGV2ZW50KSkKKy0gICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworLSAgZWxzZQorLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKysgIHhzZXR0aW5nc19jbGllbnRfcHJvY2Vzc19ldmVudCAoc2NyZWVuLT54c2V0dGluZ3NfY2xpZW50LCAoWEV2ZW50ICopeGV2ZW50KTsKKysKKysgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworIH0KKyAKKyBzdGF0aWMgQm9vbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWYwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKQEAgLTAsMCArMSwxMTEgQEAKK1NVTU1BUlkgPSAiTXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgR1VJcyIKK0RFU0NSSVBUSU9OID0gIkdUSysgaXMgYSBtdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiBPZmZlcmluZyBhIGNvbXBsZXRlIFwKK3NldCBvZiB3aWRnZXRzLCBHVEsrIGlzIHN1aXRhYmxlIGZvciBwcm9qZWN0cyByYW5naW5nIGZyb20gc21hbGwgb25lLW9mZiBwcm9qZWN0cyB0byBjb21wbGV0ZSBhcHBsaWNhdGlvbiBzdWl0ZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgY2Fpcm8gcGFuZ28gYXRrIGpwZWcgbGlicG5nIGdkay1waXhidWYgXAorICAgICAgICAgICBkb2Nib29rLXV0aWxzLW5hdGl2ZSBnZGstcGl4YnVmLW5hdGl2ZSBsaWJlcG94eSIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGd0ay1pbW1vZHVsZXMtY2FjaGUgZ3NldHRpbmdzCisKKyMgVGhpcyBzaG91bGQgYmUgaW4gYXV0b3Rvb2xzLmJiY2xhc3MsIGJ1dCB1bnRpbCBzb21ldGhpbmcgZWxzZXMgdXNlcyBpdCBwdXR0aW5nCisjIGl0IGhlcmUgYXZvaWRzIHJlYnVpbGRpbmcgZXZlcnl0aGluZy4KK2V4cG9ydCBQS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgRG8gdGhpcyBiZWNhdXNlIHRoZSBjb25maWd1cmUgc2NyaXB0IGlzIHJ1bm5pbmcgLi9saWJ0b29sIGRpcmVjdGx5CisgICAgcm0gLWYgbGlidG9vbAorICAgIGxuIC1zICR7VEFSR0VUX1BSRUZJWH1saWJ0b29sIGxpYnRvb2wKK30KKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZ2xpYnRlc3QgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteGluZXJhbWEgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1tb2R1bGVzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWN1cHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIngxMSIsICJ4MTEiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndheWxhbmQiLCAid2F5bGFuZCIsICIiLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtYmFja2VuZCwtLWRpc2FibGUteDExLWJhY2tlbmQsYXQtc3BpMi1hdGsgZm9udGNvbmZpZyBsaWJ4MTEgbGlieGV4dCBsaWJ4Y3Vyc29yIGxpYnhpIGxpYnhkYW1hZ2UgbGlieHJhbmRyIGxpYnhyZW5kZXIgbGlieGNvbXBvc2l0ZSBsaWJ4Zml4ZXMiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtYmFja2VuZCwtLWRpc2FibGUtd2F5bGFuZC1iYWNrZW5kLHdheWxhbmQgbGlieGtiY29tbW9uIHZpcnR1YWwvbWVzYSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbXYgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1kZW1vIgorTElCViA9ICIzLjAuMCIKKworRklMRVNfJHtQTn0tZGVtbyA9ICIke2JpbmRpcn0vZ3RrMy1kZW1vIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0azMtZGVtby1hcHBsaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLWljb24tYnJvd3NlciBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLXdpZGdldC1mYWN0b3J5IFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2RlbW8gXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLWRlbW8uZGVza3RvcCBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2d0azMtaWNvbi1icm93c2VyLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLXdpZGdldC1mYWN0b3J5LmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvKi9hcHBzL2d0azMtZGVtbyoucG5nIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyovYXBwcy9ndGszLXdpZGdldC1mYWN0b3J5Ki5wbmciCisKKyMgVGhlIGRlbW8gdXNlcyBQTkcgZmlsZXMgYW5kIG1pbWUgdHlwZSBzbmlmZmluZywgc28gZW5zdXJlIHRoYXQgdGhlc2UKKyMgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50LgorUkRFUEVORFNfJHtQTn0tZGVtbyArPSAiZ2RrLXBpeGJ1Zi1sb2FkZXItcG5nIHNoYXJlZC1taW1lLWluZm8iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLTMuMCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWxhdW5jaCBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcyAke3N5c2NvbmZkaXJ9ICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcy8gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzL2xpYnBpeG1hcC5zbyBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLyouc28iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2d0a2J1aWxkZXIucm5nIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2ltbW9kdWxlcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvMy4wLjAvcHJpbnRiYWNrZW5kcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2xvYWRlcnMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9pbW1vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vcHJpbnRiYWNrZW5kcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLy5kZWJ1ZyIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiYWR3YWl0YS1pY29uLXRoZW1lLXN5bWJvbGljIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrMy1pbW1vZHVsZS0uKiBeZ3RrMy1wcmludGJhY2tlbmQtLioiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtndGstdXBkYXRlLWljb24tY2FjaGVdID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgaW1wb3J0IG9zLnBhdGgKKworICAgIGd0a19saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfScpCisgICAgaW1tb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2ltbW9kdWxlcycpCisgICAgcHJpbnRtb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ3ByaW50YmFja2VuZHMnKTsKKworICAgIGltbW9kdWxlcyA9IGRvX3NwbGl0X3BhY2thZ2VzKGQsIGltbW9kdWxlc19yb290LCAnXmltLSguKilcLnNvJCcsICdndGszLWltbW9kdWxlLSVzJywgJ0dUSyBpbnB1dCBtb2R1bGUgZm9yICVzJykKKyAgICBpZiBpbW1vZHVsZXM6CisgICAgICAgIGQuc2V0VmFyKCJHVEtJTU1PRFVMRVNfUEFDS0FHRVMiLCAiICIuam9pbihpbW1vZHVsZXMpKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcHJpbnRtb2R1bGVzX3Jvb3QsICdebGlicHJpbnRiYWNrZW5kLSguKilcLnNvJCcsICdndGszLXByaW50YmFja2VuZC0lcycsICdHVEsgcHJpbnRiYWNrZW5kIG1vZHVsZSBmb3IgJXMnKQorCisgICAgaWYgKGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCAxKSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfJHtQTn0nLCAnJHtNTFBSRUZJWH1saWJndGstMy4wJykKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eb250LWZvcmNlLWNzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQ4YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2gKQEAgLTAsMCArMSwxMTggQEAKK3dpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCitGcm9tIGM1ZTVlZTY3NDkwZTdlN2FmNTYwNTJkOGY4YmViNzVkYjAwMmMyZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFbW1hbnVlbGUgQmFzc2kgPGViYXNzaUBnbm9tZS5vcmc+CitEYXRlOiBXZWQsIDMgSnVuIDIwMTUgMTQ6MDc6MjkgKzAxMDAKK1N1YmplY3Q6IHdpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KKworVGhlIGNoYW5nZSBpbiAwMzIxM2I5NTA5ZmMxZGYxNmM2NjE5NGVhMTY4YWVkNmMxNTExMGU5IGNoYW5nZWQgdGhlIHJ1bGVzCithcyB0byB3aGVuIENTRCBjYW4gYmUgZW5hYmxlZCwgYnV0IGl0IGFsc28gdW5jb25kaXRpb25hbGx5IGVuYWJsZXMgQ1NECit3aXRoIHRoZSBpbXBsaWNpdCBhc3N1bXB0aW9uIHRoYXQgY2xpZW50LXNpZGUgc2hhZG93cyB3ZXJlIHRoZSByZWFsCitpc3N1ZSwgYW5kIHRoYXQgd2UgY291bGQgd29yayBhcm91bmQgdGhhdCBieSBkcmF3aW5nIG91ciBvd24gYm9yZGVycy4KK1RoaXMgYWxzbyBtZWFucyB0aGF0IHNldHRpbmcgYSB0aXRsZWJhciBmb3IgYSBHdGtXaW5kb3cgd2lsbCBlbmFibGUgQ1NECit1bmNvbmRpdGlvbmFsbHkuCisKK0luIHJlYWxpdHksIHNvbWUgd2luZG93IG1hbmFnZXJzIChsaWtlIE1hdGNoYm94KSAqb25seSogc3VwcG9ydAorc2VydmVyLXNpZGUgZGVjb3JhdGlvbnMsIGFuZCB3aWxsIGlnbm9yZSBhbGwgaGludHMgdG8gdGhlIGNvbnRyYXJ5LCB0bwordGhlIHBvaW50IG9mIGRyYXdpbmcgZGVjb3JhdGlvbnMgYXQgcmFuZG9tIGxvY2F0aW9ucyBvbiB0b3Agb2YgdGhlCit3aW5kb3cuCisKK1NpbmNlIENTRCBhcmUgZW5hYmxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBHVEtfQ1NEIGVudmlyb25tZW50IHZhcmlhYmxlCitpcyBhbHNvIG5vdCBhIHN1aXRhYmxlIGVzY2FwZSBoYXRjaC4KKworSW4gdGhlIGdyYW5kIHRyYWRpdGlvbiBvZiBhc2tpbmcgb3Vyc2VsdmVzIGlmIHdlIHNob3VsZCBkbyBzb21ldGhpbmcKK2p1c3QgYmVjYXVzZSB3ZSBjYW4sIHdlIHNob3VsZCBzcGxpdCB0aGUgZW52aXJvbm1lbnQgY2hlY2tzIGZyb20gdGhlCitjaGVja3Mgb24gd2hhdCB0aGUgdXNlciByZXF1ZXN0ZWQ7IGJ5IGRvaW5nIHRoYXQsIHdlIGNhbiBhbHNvIGNoZWNrCit3aGVuIGVuYWJsaW5nIGNsaWVudC1zaWRlIGRlY29yYXRpb25zLCBhbmQgaWRlYWxseSBiYWlsIG91dCBpZiBuZWVkZWQuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAzNDMKKworZGlmZiAtLWdpdCBhL2d0ay9ndGt3aW5kb3cuYyBiL2d0ay9ndGt3aW5kb3cuYworaW5kZXggNDIzYzZiZC4uOWZlODgyZiAxMDA2NDQKKy0tLSBhL2d0ay9ndGt3aW5kb3cuYworKysrIGIvZ3RrL2d0a3dpbmRvdy5jCitAQCAtNDA1Niw2ICs0MDU2LDMyIEBAIGd0a193aW5kb3dfc3VwcG9ydHNfY2xpZW50X3NoYWRvdyAoR3RrV2luZG93ICp3aW5kb3cpCisgICByZXR1cm4gVFJVRTsKKyB9CisgCisrc3RhdGljIGdib29sZWFuCisrZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisreworKyAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7CisrCisrI2lmZGVmIEdES19XSU5ET1dJTkdfQlJPQURXQVkKKysgIGlmIChHREtfSVNfQlJPQURXQVlfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorKyAgICByZXR1cm4gVFJVRTsKKysjZW5kaWYKKysKKysjaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECisrICBpZiAoR0RLX0lTX1dBWUxBTkRfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorKyAgICByZXR1cm4gVFJVRTsKKysjZW5kaWYKKysKKysjaWZkZWYgR0RLX1dJTkRPV0lOR19NSVIKKysgIGlmIChHREtfSVNfTUlSX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKysgICAgcmV0dXJuIFRSVUU7CisrI2VuZGlmCisrCisrICBjc2RfZW52ID0gZ19nZXRlbnYgKCJHVEtfQ1NEIik7CisrCisrICAvKiBJZiBHVEtfQ1NEIGlzIHVuc2V0IHdlIGRlZmF1bHQgdG8gQ1NEIHN1cHBvcnQgKi8KKysgIHJldHVybiBjc2RfZW52ID09IE5VTEwgfHwgKHN0cmNtcCAoY3NkX2VudiwgIjEiKSA9PSAwKTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBndGtfd2luZG93X2VuYWJsZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorIHsKK0BAIC00MDYzLDYgKzQwODksMTAgQEAgZ3RrX3dpbmRvd19lbmFibGVfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gR1RLX1dJREdFVCAod2luZG93KTsKKyAgIEdka1Zpc3VhbCAqdmlzdWFsOworIAorKyAgLyogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgQ1NELCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZW5hYmxpbmcgdGhlbSAqLworKyAgaWYgKCFndGtfd2luZG93X2Nhbl91c2VfY3NkICh3aW5kb3cpKQorKyAgICByZXR1cm47CisrCisgICAvKiBXZSBuZWVkIGEgdmlzdWFsIHdpdGggYWxwaGEgZm9yIGNsaWVudCBzaGFkb3dzICovCisgICBpZiAocHJpdi0+dXNlX2NsaWVudF9zaGFkb3cpCisgICAgIHsKK0BAIC01ODM5LDcgKzU4NjksNiBAQCBzdGF0aWMgZ2Jvb2xlYW4KKyBndGtfd2luZG93X3Nob3VsZF91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyB7CisgICBHdGtXaW5kb3dQcml2YXRlICpwcml2ID0gd2luZG93LT5wcml2OworLSAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7CisgCisgICBpZiAocHJpdi0+Y3NkX3JlcXVlc3RlZCkKKyAgICAgcmV0dXJuIFRSVUU7CitAQCAtNTg1MCwyNCArNTg3OSw3IEBAIGd0a193aW5kb3dfc2hvdWxkX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorICAgaWYgKHByaXYtPnR5cGUgPT0gR1RLX1dJTkRPV19QT1BVUCkKKyAgICAgcmV0dXJuIEZBTFNFOworIAorLSNpZmRlZiBHREtfV0lORE9XSU5HX0JST0FEV0FZCistICBpZiAoR0RLX0lTX0JST0FEV0FZX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKy0gICAgcmV0dXJuIFRSVUU7CistI2VuZGlmCistCistI2lmZGVmIEdES19XSU5ET1dJTkdfV0FZTEFORAorLSAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKy0gICAgcmV0dXJuIFRSVUU7CistI2VuZGlmCistCistI2lmZGVmIEdES19XSU5ET1dJTkdfTUlSCistICBpZiAoR0RLX0lTX01JUl9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCistICAgIHJldHVybiBUUlVFOworLSNlbmRpZgorLQorLSAgY3NkX2VudiA9IGdfZ2V0ZW52ICgiR1RLX0NTRCIpOworLQorLSAgcmV0dXJuIChnX3N0cmNtcDAgKGNzZF9lbnYsICIxIikgPT0gMCk7CisrICByZXR1cm4gZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAod2luZG93KTsKKyB9CisgCisgc3RhdGljIHZvaWQKKy0tIAorY2dpdCB2MC4xMC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0YmVlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK0luZGV4OiBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0aystMy44LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYworQEAgLTUzMSw3ICs1MzEsNyBAQCBBQ19NU0dfQ0hFQ0tJTkcoW1doZXRoZXIgdG8gd3JpdGUgZGVwZW5kCisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0geHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNzkzLDcgKzc5Myw3IEBAIGVsc2UKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIgorICAgICAgICAgbW9kdWxlX2RlcGxpYnNfY2hlY2s9YCRtb2R1bGVfbGlidG9vbF9jb25maWcgfCBcCisgICAgICAgICAgICAgZ3JlcCAnXltbYS16X11dKmNoZWNrW1thLXpfXV0qX21ldGhvZD1bWydcJyciXV0nIHwgXAorICAgICAgICAgICAgIHNlZCAncy8uKltbJ1wnJyJdXVwoLipcKVtbJ1wnJyJdXSQvXDEvJ2AKK0BAIC0xNTI4LDcgKzE1MjgsNyBAQCBmaQorICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKKyAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCisgZXhwb3J0IFNFRAorLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrZXhwb3J0X2R5bmFtaWM9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfREVQX0xJQlM9YGVjaG8gJEdES19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCisgICBHVEtfREVQX0xJQlM9YGVjaG8gJEdUS19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3MzZhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGd0ayszLmluYworCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8ke01BSl9WRVJ9L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0RvbnQtZm9yY2UtY3NkLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzU5ZTVjOGI1YTQ1ODViNjA2MjNkZDcwOGRmNDAwYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZDEyNzI2ZDA4NTZhOTY4YjQxODAyYWU1YzU5NzFkN2U5YmFjNTMyNzE3ZTMwOWQzZjgxYjk5ODlkYTVmZmJlIgorCitTID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9MjU7bWQ1PTFkOGRjMGZjY2RiZmEyNjI4N2EyNzFkY2U4OGFmNzM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI1O21kNT1jOTIwY2UzOWRjODhjNmYwNmQzZTdjNTBlMDgwODZmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNTttZDU9Y2I3MzJkYWVlMWQ4MmFmN2EyYmY5NTNjZjNjZjI2ZjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0Mzc3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYgpAQCAtMCwwICsxLDM0IEBACityZXF1aXJlIGd0aysuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI3O21kNT1jNTllMGI0NDkwZGQxMzVhNTcyNmViZjg1MWY5YjE3ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNzttZDU9MDdkYjI4NWVjMjA4ZmIzZTBiZjdkODYxYjA2MTQyMDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9Mjc7bWQ1PTI2MmRiNWRiNWY3NzZmOTg2M2U1NmRmMzE0MjNlMjRjIgorU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLzIuMjQvZ3RrKy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RvZ2dsZS1mb250LmRpZmY7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL2RvYy1maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaCBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZmFjZjg3YjJlYTY3ZTRlNWM3ODY2YTkwMDNlNjUyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMmM2NDQxZTk4YmM1MjMyZTVmOWJiYTY5NjUwNzVkY2Y1ODBhODcyNjM5OGY3Mzc0ZDM5ZjkwYjg4ZWQ0NjU2IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUteGtiIC0tZGlzYWJsZS1nbGlidGVzdCAtLWRpc2FibGUtY3VwcyAtLWRpc2FibGUteGluZXJhbWEiCisKK0xJQlYgPSAiMi4xMC4wIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrLWltbW9kdWxlLS4qIF5ndGstcHJpbnRiYWNrZW5kLS4qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZ3RrX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9JykKKyAgICBpbW1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAnaW1tb2R1bGVzJykKKyAgICBwcmludG1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAncHJpbnRiYWNrZW5kcycpOworCisgICAgZC5zZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGltbW9kdWxlc19yb290LCAnXmltLSguKilcLnNvJCcsICdndGstaW1tb2R1bGUtJXMnLCAnR1RLIGlucHV0IG1vZHVsZSBmb3IgJXMnKSkpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcHJpbnRtb2R1bGVzX3Jvb3QsICdebGlicHJpbnRiYWNrZW5kLSguKilcLnNvJCcsICdndGstcHJpbnRiYWNrZW5kLSVzJywgJ0dUSyBwcmludGJhY2tlbmQgbW9kdWxlIGZvciAlcycpCisKKyAgICBpZiAoZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpKToKKyAgICAgICAgZC5zZXRWYXIoJ1BLR18ke1BOfScsICcke01MUFJFRklYfWxpYmd0ay0yLjAnKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjE2LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMzgxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjE2LjYuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJOYXRpdmUgaWNvbiB1dGlscyBmb3IgR1RLKyIKK0RFU0NSSVBUSU9OID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSBhbmQgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgYnVpbHQgZnJvbSBHVEsrIG5hdGl2ZWx5LCBmb3IgYnVpbGQgdGltZSBhbmQgb24taG9zdCBwb3N0aW5zdCBzY3JpcHQgZXhlY3V0aW9uLiIKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlicnN2Zy1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgZmlsZTovL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImZjNTllNWM4YjVhNDU4NWI2MDYyM2RkNzA4ZGY0MDBiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRkMTI3MjZkMDg1NmE5NjhiNDE4MDJhZTVjNTk3MWQ3ZTliYWM1MzI3MTdlMzA5ZDNmODFiOTk4OWRhNWZmYmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgorCitTID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKKworaW5oZXJpdCBwa2djb25maWcgbmF0aXZlCisKK1BLR19DT05GSUdfRk9SX0JVSUxEID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wa2ctY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgeworCSMgUXVpdGUgdWdseSBidXQgZGVmaW5lcyBlbm91Z2ggdG8gY29tcGlsZSB0aGUgdG9vbHMuCisJaWYgISB0ZXN0IC1mIGd0ay9jb25maWcuaDsgdGhlbgorCQllY2hvICIjZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSBcImd0azMwXCIiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfVU5JU1REX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJCWVjaG8gIiNkZWZpbmUgSEFWRV9GVFdfSCAxIiA+PiBndGsvY29uZmlnLmgKKwlmaQorCWlmICEgdGVzdCAtZiBnZGsvY29uZmlnLmg7IHRoZW4KKwkJdG91Y2ggZ2RrL2NvbmZpZy5oCisJZmkKK30KKworZG9fY29tcGlsZSgpIHsKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL3VwZGF0ZWljb25jYWNoZS5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2RrLXBpeGJ1Zi0yLjApIFwKKwkJLW8gZ3RrLXVwZGF0ZS1pY29uLWNhY2hlCisKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL2VuY29kZXN5bWJvbGljLmMgXAorCQkkKCR7UEtHX0NPTkZJR19GT1JfQlVJTER9IC0tY2ZsYWdzIC0tbGlicyBnaW8tMi4wIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyAke0R9JHtiaW5kaXJ9CisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycy5jYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKK30KKworIyBQcmV2ZW50IGJpdGJha2UgZnJvbSBvcHRpbWl6aW5nIGF3YXkgdGhlIG5hdGl2ZSBsaWJyc3ZnIHN5c3Jvb3QgcG9wdWxhdGlvbgorZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZVtkZXBlbmRzXSArPSAibGlicnN2Zy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMvUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3ZjgwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIDRkMDlmZjMyNDQxOWZlNGU2NzEyMzMwNDRlNDI0Mzc4ZGE1Mzk2OWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDE0OjIwOjMwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSBHZGstZGVwZW5kZW5jeSBmcm9tIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnCisKK0J1aWxkaW5nIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIHdpdGhvdXQgYnVpbGRpbmcgR2RrIGlzIHVzZWZ1bAorYXMgb25seSB0aGUgaWNvbiB0b29scyBhcmUgbmVlZGVkIG9uIHRoZSBuYXRpdmUgYnVpbGQ6IHRoaXMgbWFrZXMKK25hdGl2ZSBidWlsZCBtdWNoIGZhc3RlciBhbmQgcmVxdWlyZXMgbXVjaCBsZXNzIGRlcGVuZGVuY2llcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBndGsvZW5jb2Rlc3ltYm9saWMuYyB8IDM2ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9lbmNvZGVzeW1ib2xpYy5jIGIvZ3RrL2VuY29kZXN5bWJvbGljLmMKK2luZGV4IDlmN2QwMTUuLjFmMDc1NjMgMTAwNjQ0CistLS0gYS9ndGsvZW5jb2Rlc3ltYm9saWMuYworKysrIGIvZ3RrL2VuY29kZXN5bWJvbGljLmMKK0BAIC0xOSw3ICsxOSw2IEBACisgCisgI2luY2x1ZGUgPGdsaWIuaD4KKyAjaW5jbHVkZSA8Z2RrLXBpeGJ1Zi9nZGstcGl4ZGF0YS5oPgorLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisgI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyAKKyAjaWZkZWYgSEFWRV9VTklTVERfSAorQEAgLTQzLDMwICs0MiwxOCBAQCBzdGF0aWMgR2RrUGl4YnVmICoKKyBsb2FkX3N5bWJvbGljX3N2ZyAoY2hhciAqZmlsZV9kYXRhLCBnc2l6ZSBmaWxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqZmcsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1JHQkEgICpzdWNjZXNzX2NvbG9yLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqd2FybmluZ19jb2xvciwKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKmVycm9yX2NvbG9yLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3NfZmcsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzc19zdWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3Nfd2FybmluZywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICoqZXJyb3IpCisgeworICAgR0lucHV0U3RyZWFtICpzdHJlYW07CisgICBHZGtQaXhidWYgKnBpeGJ1ZjsKKy0gIGdjaGFyICpjc3NfZmc7CistICBnY2hhciAqY3NzX3N1Y2Nlc3M7CistICBnY2hhciAqY3NzX3dhcm5pbmc7CistICBnY2hhciAqY3NzX2Vycm9yOworICAgZ2NoYXIgKmRhdGE7CisgICBnY2hhciAqc3ZnX3dpZHRoLCAqc3ZnX2hlaWdodDsKKyAgIGdjaGFyICplc2NhcGVkX2ZpbGVfZGF0YTsKKyAKKy0gIGNzc19mZyA9IGdka19yZ2JhX3RvX3N0cmluZyAoZmcpOworLQorLSAgY3NzX3N1Y2Nlc3MgPSBjc3Nfd2FybmluZyA9IGNzc19lcnJvciA9IE5VTEw7CistCistICBjc3Nfd2FybmluZyA9IGdka19yZ2JhX3RvX3N0cmluZyAod2FybmluZ19jb2xvcik7CistICBjc3NfZXJyb3IgPSBnZGtfcmdiYV90b19zdHJpbmcgKGVycm9yX2NvbG9yKTsKKy0gIGNzc19zdWNjZXNzID0gZ2RrX3JnYmFfdG9fc3RyaW5nIChzdWNjZXNzX2NvbG9yKTsKKy0KKyAgIC8qIEZldGNoIHNpemUgZnJvbSB0aGUgb3JpZ2luYWwgaWNvbiAqLworICAgc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEgKGZpbGVfZGF0YSwgZmlsZV9sZW4sIE5VTEwpOworICAgcGl4YnVmID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9zdHJlYW0gKHN0cmVhbSwgTlVMTCwgZXJyb3IpOworQEAgLTEwNSwxMCArOTIsNiBAQCBsb2FkX3N5bWJvbGljX3N2ZyAoY2hhciAqZmlsZV9kYXRhLCBnc2l6ZSBmaWxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIjwvc3ZnPiIsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgZ19mcmVlIChlc2NhcGVkX2ZpbGVfZGF0YSk7CistICBnX2ZyZWUgKGNzc19mZyk7CistICBnX2ZyZWUgKGNzc193YXJuaW5nKTsKKy0gIGdfZnJlZSAoY3NzX2Vycm9yKTsKKy0gIGdfZnJlZSAoY3NzX3N1Y2Nlc3MpOworICAgZ19mcmVlIChzdmdfd2lkdGgpOworICAgZ19mcmVlIChzdmdfaGVpZ2h0KTsKKyAKK0BAIC0xNjcsNyArMTUwLDggQEAgbWFrZV9zeW1ib2xpY19waXhidWYgKGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgKiplcnJvcikKKyAKKyB7CistICBHZGtSR0JBIHIgPSB7IDEsMCwwLDF9LCBnID0gezAsMSwwLDF9OworKyAgY29uc3QgY2hhciByW10gPSAicmdiYSgyNTUsMCwwLDEpIjsKKysgIGNvbnN0IGNoYXIgZ1tdID0gInJnYmEoMCwyNTUsMCwxKSI7CisgICBHZGtQaXhidWYgKmxvYWRlZDsKKyAgIEdka1BpeGJ1ZiAqcGl4YnVmOworICAgaW50IHBsYW5lOworQEAgLTE5NiwxMCArMTgwLDEwIEBAIG1ha2Vfc3ltYm9saWNfcGl4YnVmIChjaGFyICpmaWxlLAorICAgICAgICAqIHRoZSAicmVzdCIsIGFzIGFsbCBjb2xvciBmcmFjdGlvbnMgc2hvdWxkIGFkZCB1cCB0byAxLgorICAgICAgICAqLworICAgICAgIGxvYWRlZCA9IGxvYWRfc3ltYm9saWNfc3ZnIChmaWxlX2RhdGEsIGZpbGVfbGVuLCB3aWR0aCwgaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMCA/ICZyIDogJmcsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDEgPyAmciA6ICZnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAyID8gJnIgOiAmZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMCA/IHIgOiBnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAxID8gciA6IGcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDIgPyByIDogZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpOworICAgICAgIGlmIChsb2FkZWQgPT0gTlVMTCkKKyAgICAgICAgIHJldHVybiBOVUxMOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmMzI0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYyIKK0RFU0NSSVBUSU9OID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYywgYXMgd2UgZG9uJ3Qgd2FudCB0byBidWlsZCB0aGUgQVBJIGRvY3VtZW50YXRpb24iCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitQUk9WSURFUyA9ICJndGstZG9jIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIgorCitTUkNSRVYgPSAiMWRlYTI2NjU5M2VkYjc2NmQ2ZDg5OGM3OTQ1MWVmMTkzZWIxN2NmYSIKK1BWID0gIjEuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGI4NzhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRnJvbSA4ZDQ5YTM4NmY0NjdjYmY4ZTA4NDJkMjIxODEyNmY2NDNlNTBmODM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pcXVlIExldWVuYmVyZ2VyIDxkaW1zdGFyQG9wZW5zdXNlLm9yZz4KK0RhdGU6IFN1biwgMjcgTm92IDIwMTEgMTQ6MjQ6NTcgKzAwMDAKK1N1YmplY3Q6IEZpeCBidWlsZCB3aXRoIGdsaWIgMi4zMTogT25seSBnbGliLmggY2FuIGJlICNpbmNsdWRlJ2QuIEZpeGVzIGJ1ZyAjNjY0OTE0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tCitkaWZmIC0tZ2l0IGEvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYyBiL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMKK2luZGV4IDFmN2E0MWYuLjU2YTkyODYgMTAwNjQ0CistLS0gYS9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCisrKysgYi9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCitAQCAtMjgsNyArMjgsNyBAQAorICNpbmNsdWRlICJhbmltYXRpb24uaCIKKyAKKyAjaWZkZWYgSEFWRV9XT1JLSU5HX0FOSU1BVElPTgorLSNpbmNsdWRlIDxnbGliL2d0aW1lci5oPgorKyNpbmNsdWRlIDxnbGliLmg+CisgCisgc3RydWN0IF9BbmltYXRpb25JbmZvIHsKKyAJR1RpbWVyICp0aW1lcjsKKy0tCitjZ2l0IHYwLjkuMC4yCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM1NTdiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYyBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCistLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYwkyMDEwLTEwLTAxIDE1OjQyOjM3LjAwMDAwMDAwMCArMDMwMAorKysrIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMJMjAxMy0wOC0yMCAwMjo1MDoyNy45MzA1MTA1NjUgKzAzMDAKK0BAIC0xNjYsNiArMTY2LDkgQEAKKworIEFDX1NVQlNUKERFVkVMT1BNRU5UX0NGTEFHUykKKworK0FDX1NVQlNUKFtleHBvcnRlZF9zeW1ib2xzX3Rlc3RzXSwgW1skKEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMpXV0pCisrQUNfU1VCU1QoW3RvcnR1cmVfdGVzdF90ZXN0c10sIFtbJChUT1JUVVJFX1RFU1RfVEVTVFMpXV0pCisrCisgQU1fQ09ORklHX0hFQURFUihbZW5naW5lcy9zdXBwb3J0L2NvbmZpZy5oXSkKKworIEFDX0NPTkZJR19GSUxFUyhbCitkaWZmIC1OdXJkIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCistLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMC0wOS0xOSAxODoxODoyMS4wMDAwMDAwMDAgKzAzMDAKKysrKyBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQkyMDEzLTA4LTIwIDAyOjUwOjM2Ljg0MjUxMDg2NSArMDMwMAorQEAgLTY2LDcgKzY2LDcgQEAKKyAjIFByZWZpeCB3aXRoIGV4cG9ydGVkXworIEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMgPSAkKHBhdHN1YnN0ICUsZXhwb3J0ZWRfJSwkKEJVSUxEX0VOR0lORVMpKQorCistVEVTVFMgKz0gJChFWFBPUlRFRF9TWU1CT0xTX1RFU1RTKQorK1RFU1RTICs9IEBleHBvcnRlZF9zeW1ib2xzX3Rlc3RzQAorCisKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAQCAtODgsNyArODgsNyBAQAorIFRPUlRVUkVfVEVTVF9URVNUUyA9IHRvcnR1cmVfYnVpbGRpbiAkKHBhdHN1YnN0ICUsdG9ydHVyZV8lLCQoVE9SVFVSRV9URVNUX0VOR0lORVMpKQorCisgIyBBZGQgVE9SVFVSRV9URVNUX0VOR0lORVMgdG8gbGlzdCBvZiB0ZXN0cworLVRFU1RTICs9ICQoVE9SVFVSRV9URVNUX1RFU1RTKQorK1RFU1RTICs9IEB0b3J0dXJlX3Rlc3RfdGVzdHNACisKKyAjIFBvc3NpYmxlIG90aGVyIHRlc3RzOgorICMgIC0gQW4gZXh0ZW5zaXZlIHRoZW1lIHN3aXRjaCB0ZXN0cyB0aGF0IGxvYWRzL3VubG9hZHMgdGhlIGVuZ2luZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lc18yLjIwLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwNDU0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lc18yLjIwLjIuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHVEsrIHRoZW1lIGVuZ2luZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgZ3RrKyIKKworUFIgPSAicjMiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1zY2hlbWFzIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0ay1lbmdpbmUtLiogXmd0ay10aGVtZS0uKiIKKworUkRFUEVORFNfZ3RrLXRoZW1lLXJlZG1vbmQgPSAiZ3RrLWVuZ2luZS1yZWRtb25kOTUiCitSREVQRU5EU19ndGstdGhlbWUtbWV0YWwgPSAiZ3RrLWVuZ2luZS1tZXRhbCIKK1JERVBFTkRTX2d0ay10aGVtZS1taXN0ID0gImd0ay1lbmdpbmUtbWlzdCIKK1JERVBFTkRTX2d0ay10aGVtZS1jcnV4ID0gImd0ay1lbmdpbmUtY3J1eC1lbmdpbmUiCitSREVQRU5EU19ndGstdGhlbWUtbGlnaHRob3VzZWJsdWUgPSAiZ3RrLWVuZ2luZS1saWdodGhvdXNlYmx1ZSIKK1JERVBFTkRTX2d0ay10aGVtZS10aGluaWNlID0gImd0ay1lbmdpbmUtdGhpbmljZSIKK1JERVBFTkRTX2d0ay10aGVtZS1pbmR1c3RyaWFsID0gImd0ay1lbmdpbmUtaW5kdXN0cmlhbCIKK1JERVBFTkRTX2d0ay10aGVtZS1jbGVhcmxvb2tzID0gImd0ay1lbmdpbmUtY2xlYXJsb29rcyIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXNjaGVtYXMgPSAiJHtkYXRhZGlyfS9ndGstZW5naW5lcy8qLnhtbCIKKworQ0ZMQUdTX3ByZXBlbmQgPSAiLURIQVZFX0FOSU1BVElPTiAiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK2luaGVyaXQgZ25vbWViYXNlCitHTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGVuZ2luZXNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignbGliZGlyJywgVHJ1ZSksICJndGstMi4wLzIuMTAuMC9lbmdpbmVzIikKKyAgICB0aGVtZXNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCAidGhlbWVzIikKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGVuZ2luZXNfcm9vdCwgJ15saWIoLiopXC5zbyQnLCAnZ3RrLWVuZ2luZS0lcycsICdHVEsgJXMgdGhlbWUgZW5naW5lJywgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCB0aGVtZXNfcm9vdCwgJyguKiknLCAnZ3RrLXRoZW1lLSVzJywgJ0dUSyB0aGVtZSAlcycsIGFsbG93X2RpcnM9VHJ1ZSwgZXh0cmFfZGVwZW5kcz0nJykKKyAgICAjIFRPRE86IG1hcmsgdGhlbWUgcGFja2FnZXMgYXMgYXJjaCBhbGwKK30KKworU1JDX1VSSSArPSAiZmlsZTovL2dsaWItMi4zMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjVkZWIyODdiYzYwNzVkYzIxODEyMTMwNjA0YzdkYzRmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTViNjgwYWJjYTZjNzczZWNiODUyNTM1MjFmYTEwMGRkM2I4NTQ5YmVmZWVjYzc1OTViMTAyMDlkNjJkNjZiNSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODlmZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR1RLKyBUaGVtZSBiZW5jaG1hcmsgcHJvZ3JhbSIKK0RFUEVORFMgPSAiZ3RrKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93aWtpLmxhcHRvcC5vcmcvZ28vR1RLX2Zvcl9PTFBDIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hcHB3aW5kb3cuYztlbmRsaW5lPTEzO21kNT04YzA5OTIwZGU0NjBjN2VhMWY2NGVlNTY5ODZhYWJkOSIKKworU1JDUkVWID0gIjk5OTYyYWUzOWJiNWFhZGIzMTkyOWIyNWM1OGUxYTA1M2Y5Yzk1NDUiCitQViA9ICIwLjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9kZXYubGFwdG9wLm9yZy9wcm9qZWN0cy9zb2MtZ3RrLyIKK1MgPSAiJHtXT1JLRElSfS9naXQvZ3RrLXRoZW1lLXRvcnR1cmVyIgorCitDRkxBR1MgKz0gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgdG9ydHVyZXIgJHtEfSR7YmluZGlyfQorfQorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvaGljb2xvci1pY29uLXRoZW1lL2hpY29sb3ItaWNvbi10aGVtZV8wLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDQ2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvaGljb2xvci1pY29uLXRoZW1lL2hpY29sb3ItaWNvbi10aGVtZV8wLjE1LmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiRGVmYXVsdCBpY29uIHRoZW1lIHRoYXQgYWxsIGljb24gdGhlbWVzIGF1dG9tYXRpY2FsbHkgaW5oZXJpdCBmcm9tIgorSE9NRVBBR0UgPSAiaHR0cDovL2ljb24tdGhlbWUuZnJlZWRlc2t0b3Aub3JnL3dpa2kvSGljb2xvclRoZW1lIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYwOGE0NDY4MDk5MTNmYzliM2M3MThmMGVhZWEwNDI2IgorCitTUkNfVVJJID0gImh0dHA6Ly9pY29uLXRoZW1lLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjZhYTJiMzk5M2E4ODNkODUwMTdjN2NjMGNmYzBmYjczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljYzQ1YWMzMzE4YzMxMjEyZWEyZDhjYjk5ZTY0MDIwNzMyMzkzZWU3NjMwZmE2YzE4MTBhZjVmOTg3MDMzY2MiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDhhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkpTT04tR0xpYiBpbXBsZW1lbnRzIGEgZnVsbCBKU09OIHBhcnNlciB1c2luZyBHTGliIGFuZCBHT2JqZWN0IgorREVTQ1JJUFRJT04gPSAiVXNlIEpTT04tR0xpYiBpdCBpcyBwb3NzaWJsZSB0byBwYXJzZSBhbmQgZ2VuZXJhdGUgdmFsaWQgSlNPTlwKKyBkYXRhIHN0cnVjdHVyZXMsIHVzaW5nIGEgRE9NLWxpa2UgQVBJLiBKU09OLUdMaWIgYWxzbyBvZmZlcnMgR09iamVjdCBcCitpbnRlZ3JhdGlvbiwgcHJvdmlkaW5nIHRoZSBhYmlsaXR5IHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgR09iamVjdCBcCitpbnN0YW5jZXMgdG8gYW5kIGZyb20gSlNPTiBkYXRhIHR5cGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9Kc29uR2xpYiIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzMTMxYjA0MTdlY2RlM2RhMWFlNzJhY2NlYWEzNzVjZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjgwZjM1OTNjYjZiZDEzZjE0NjU4MjhlNDZhOWY3NDBlMmU5YmQzY2QyMjU3ODg5NDQyYjNlNjJiZDZkZTA1Y2QiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgbGliX3BhY2thZ2UKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5NmU2MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGE1ZWZhYTk2ZmQ5MzRlYjI0NWMyMzRhNTI3NWZjZjYyNjk4ZWY5ODYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyIEFwciAyMDE1IDIxOjM4OjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG1pcHM6IFVzZSBjb21waWxlciBpbnRlcm5hbCBkZWZpbmUgZm9yIGxpbnV4CisKK19fbGludXhfXyBpcyBkZWZpbmVkIGJ5IGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yCitsaW51eCBwbGF0Zm9ybXMsIGxldHMgdXNlIGl0CisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvbWlwcy9mZml0YXJnZXQuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taXBzL2ZmaXRhcmdldC5oIGIvc3JjL21pcHMvZmZpdGFyZ2V0LmgKK2luZGV4IDcxN2Q2NTkuLjZmYWEzNTggMTAwNjQ0CistLS0gYS9zcmMvbWlwcy9mZml0YXJnZXQuaAorKysrIGIvc3JjL21pcHMvZmZpdGFyZ2V0LmgKK0BAIC0zMiw3ICszMiw3IEBACisgI2Vycm9yICJQbGVhc2UgZG8gbm90IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGlyZWN0bHkgaW50byB5b3VyIHNvdXJjZS4gIFVzZSBmZmkuaCBpbnN0ZWFkLiIKKyAjZW5kaWYKKyAKKy0jaWZkZWYgbGludXgKKysjaWZkZWYgX19saW51eF9fCisgIyBpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorICNlbGlmIGRlZmluZWQoX19ydGVtc19fKQorIC8qCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS9maXgtbGliZmZpLmxhLWxvY2F0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWJmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS9maXgtbGliZmZpLmxhLWxvY2F0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGxpYmZmaS0zLjAuMTMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJmZmktMy4wLjEzLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBsaWJmZmktMy4wLjEzL01ha2VmaWxlLmFtCitAQCAtOTgsNyArOTgsNyBAQCBGTEFHU19UT19QQVNTID0gJChBTV9NQUtFRkxBR1MpCisgCisgTUFLRU9WRVJSSURFUz0KKyAKKy10b29sZXhlY2xpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQorK2xpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQorIG5vaW5zdF9MVExJQlJBUklFUyA9IGxpYmZmaV9jb252ZW5pZW5jZS5sYQorIAorIGxpYmZmaV9sYV9TT1VSQ0VTID0gc3JjL3ByZXBfY2lmLmMgc3JjL3R5cGVzLmMgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkxNmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJBIHBvcnRhYmxlIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgYGxpYmZmaScgbGlicmFyeSBwcm92aWRlcyBhIHBvcnRhYmxlLCBoaWdoIGxldmVsIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgXAorY29udmVudGlvbnMuICBUaGlzIGFsbG93cyBhIHByb2dyYW1tZXIgdG8gY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuIFwKK3RpbWUuIEZGSSBzdGFuZHMgZm9yIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlLiAgQSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBpcyB0aGUgcG9wdWxhciBuYW1lIGZvciB0aGUgXAoraW50ZXJmYWNlIHRoYXQgYWxsb3dzIGNvZGUgd3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4gIFRoZSBgbGliZmZpJyBcCitsaWJyYXJ5IHJlYWxseSBvbmx5IHByb3ZpZGVzIHRoZSBsb3dlc3QsIG1hY2hpbmUgZGVwZW5kZW50IGxheWVyIG9mIGEgZnVsbHkgZmVhdHVyZWQgZm9yZWlnbiBmdW5jdGlvbiBpbnRlcmZhY2UuICBcCitBIGxheWVyIG11c3QgZXhpc3QgYWJvdmUgYGxpYmZmaScgdGhhdCBoYW5kbGVzIHR5cGUgY29udmVyc2lvbnMgZm9yIHZhbHVlcyBwYXNzZWQgYmV0d2VlbiB0aGUgdHdvIGxhbmd1YWdlcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MzYxMGJiMTc2ODNhMDA4OWVkNjQwNTU0MTZiMmFlMWIiCisKK1NSQ19VUkkgPSAiZnRwOi8vc291cmNld2FyZS5vcmcvcHViL2xpYmZmaS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODNiODk1ODc2MDdlM2ViNjVjNzBkMzYxZjEzYmFiNDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDA2ZWJiOGUxZDlhMjJkMTllMzhkNjNmZGI4Mzk1NDI1M2YzOWJlZGM1ZDQ2MjMyYTA1NjQ1Njg1NzIyY2EzNyIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtYnVpbGRkaXIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGliZmZpLSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkNTg2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9jb25maWd1cmUuaW4gbGliZ2xhZGUtMi40LjAvY29uZmlndXJlLmluCistLS0gbGliZ2xhZGUtMi40LjB+L2NvbmZpZ3VyZS5pbgkyMDA0LTA1LTE3IDEyOjM4OjMxLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmdsYWRlLTIuNC4wL2NvbmZpZ3VyZS5pbgkyMDA0LTA3LTI4IDE2OjUzOjA5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE0Nyw2ICsxNDcsMTggQEAKKyBBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTiwgJGhhdmVfcHl0aG9uKQorIEFDX1NVQlNUKFBZVEhPTikKKyAKKytBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjcnVmdCBpbiBsaWJndGtdKQorK0FDX1RSWV9MSU5LKFsKKysjaW5jbHVkZSA8Z3RrL2d0ay5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorK10sICAgICAgWyBndGtfdHJlZV9nZXRfdHlwZSAoKTsgcmV0dXJuIDA7IF0sCisrICAgICAgICBbIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgICAgICBoYXZlX2NydWZ0PXllcyBdLAorKyAgICAgICAgWyBBQ19NU0dfUkVTVUxUKG5vKQorKwkgIEFDX0RFRklORShESVNBQkxFX0NSVUZULCxbbGVhdmUgb3V0IHN1cHBvcnQgZm9yIG9sZCwgYnJva2VuIHdpZGdldHNdKQorKyAgICAgICAgICBoYXZlX2NydWZ0PW5vIF0pCisrQUNfU1VCU1QoRElTQUJMRV9DUlVGVCkKKysKKyBkbmwgYWRkIGRlYnVnZ2luZyBvcHRpb25zIC4uLgorIGNoYW5nZXF1b3RlKCwpZG5sCisgaWYgdGVzdCAieCRHQ0MiID0geHllczsgdGhlbgorT25seSBpbiBsaWJnbGFkZS0yLjQuMDogY29uZmlndXJlLmluLm9yaWcKK2RpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYyBsaWJnbGFkZS0yLjQuMC9nbGFkZS9nbGFkZS1ndGsuYworLS0tIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYwkyMDA0LTAzLTEzIDEzOjQ3OjM1LjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmdsYWRlLTIuNC4wL2dsYWRlL2dsYWRlLWd0ay5jCTIwMDQtMDctMjggMTY6NTM6NTIuMDAwMDAwMDAwICswMTAwCitAQCAtMjEzLDYgKzIxMyw4IEBACisgCWd0a19jbGlzdF9jb2x1bW5fdGl0bGVzX2hpZGUgKEdUS19DTElTVCAodykpOworIH0KKyAKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKysKKyBzdGF0aWMgdm9pZAorIHRyZWVfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCisgCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTIzOCw2ICsyNDAsOCBAQAorICAgICBndGtfdHJlZV9zZXRfdmlld19saW5lcyAoR1RLX1RSRUUgKHcpLCBCT09MICh2YWx1ZSkpOworIH0KKyAKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCisgCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTI1NCw2ICsyNTgsNyBAQAorICAgICBndGtfY2hlY2tfbWVudV9pdGVtX3NldF9zaG93X3RvZ2dsZSAoR1RLX0NIRUNLX01FTlVfSVRFTSAodyksIEJPT0wgKHZhbHVlKSk7CisgfQorIAorKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorIHN0YXRpYyB2b2lkCisgdGV4dF9zZXRfdGV4dCAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorIAkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCitAQCAtMjYyLDYgKzI2Nyw3IEBACisgCisgICAgIGd0a19lZGl0YWJsZV9pbnNlcnRfdGV4dCAoR1RLX0VESVRBQkxFICh3KSwgdmFsdWUsIC0xLCAmcG9zKTsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIHZvaWQKKyByYWRpb19tZW51X2l0ZW1fc2V0X2dyb3VwIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCitAQCAtMTEyNSwxMyArMTEzMSwxNyBAQAorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGNsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNoYWRvd190eXBlIiwgY2xpc3Rfc2V0X3NoYWRvd190eXBlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2hvd190aXRsZXMiLCBjbGlzdF9zZXRfc2hvd190aXRsZXMpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInNlbGVjdGlvbl9tb2RlIiwgdHJlZV9zZXRfc2VsZWN0aW9uX21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInZpZXdfbW9kZSIsIHRyZWVfc2V0X3ZpZXdfbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9UUkVFLCAidmlld19saW5lIiwgdHJlZV9zZXRfdmlld19saW5lKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NIRUNLX01FTlVfSVRFTSwgImFsd2F5c19zaG93X3RvZ2dsZSIsCisgCQkJCWNoZWNrX21lbnVfaXRlbV9zZXRfYWx3YXlzX3Nob3dfdG9nZ2xlKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RFWFQsICJ0ZXh0IiwgdGV4dF9zZXRfdGV4dCk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9SQURJT19NRU5VX0lURU0sICJncm91cCIsCisgCQkJCXJhZGlvX21lbnVfaXRlbV9zZXRfZ3JvdXApOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVE9PTEJBUiwgInRvb2x0aXBzIiwgdG9vbGJhcl9zZXRfdG9vbHRpcHMpOworQEAgLTEyODgsOCArMTI5OCwxMCBAQAorIAkJCSAgIGdsYWRlX3N0YW5kYXJkX2J1aWxkX2NoaWxkcmVuLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URUFST0ZGX01FTlVfSVRFTSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RFWFQsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URVhUX1ZJRVcsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9USVBTX1FVRVJZLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCitAQCAtMTMwNCw4ICsxMzE2LDEwIEBACisgCQkJICAgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfY2hpbGRyZW4sIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RPT0xfQlVUVE9OLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVFJFRSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNlbmRpZgorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RSRUVfVklFVywgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1ZCVVRUT05fQk9YLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGMwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaApAQCAtMCwwICsxLDUwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9jb25maWd1cmUuaW4gbGliZ2xhZGUtMi40LjIvY29uZmlndXJlLmluCistLS0gbGliZ2xhZGUtMi40LjIub3JpZy9jb25maWd1cmUuaW4JMjAwNS0wMi0xMSAxMjo0Mjo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9jb25maWd1cmUuaW4JMjAwNS0wMy0yMiAwMToyMjowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MiwxMSArNTIsMzMgQEAKKyBBQ19QQVRIX1BST0coUEtHX0NPTkZJRywgcGtnLWNvbmZpZywgbm8pCisgCisgUEtHX0NIRUNLX01PRFVMRVMoTElCR0xBREUsIFtkbmwKKy0gIGxpYnhtbC0yLjAgPj0gcmVxdWlyZWRfbGlieG1sX3ZlcnNpb24gZG5sCisgICBhdGsgPj0gcmVxdWlyZWRfYXRrX3ZlcnNpb24gZG5sCisgICBndGsrLTIuMCA+PSByZXF1aXJlZF9ndGtfdmVyc2lvbiBkbmwKKyAgIGdsaWItMi4wID49IHJlcXVpcmVkX2dsaWJfdmVyc2lvbl0pCisgCisrZGlzYWJsZV94bWwyPW5vCisrQUNfQVJHX1dJVEgoW2xpYnhtbDJdLAorKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1saWJ4bWwyXSwgW0Rvbid0IHVzZSBsaWJ4bWwyLCB1c2UgR2xpYidzIEdNYXJrdXBQYXJzZXIgaW5zdGVhZF0pLAorKyAgW2Rpc2FibGVfeG1sMj15ZXNdLAorKyAgW2Rpc2FibGVfeG1sMj1ub10pCisrCisrQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBhcmUgdXNpbmcgbGlieG1sMl0pCisraWYgdGVzdCAieCRkaXNhYmxlX3htbDIiID09ICJ4bm8iOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKHllcykKKysgIFBLR19DSEVDS19NT0RVTEVTKFhNTDIsIGxpYnhtbC0yLjAgPj0gMi40LjEwKQorKyAgUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMj0ibGlieG1sLTIuMCIKKysgIExJQkdMQURFX0NGTEFHUz0iJExJQkdMQURFX0NGTEFHUyAkWE1MMl9DRkxBR1MiCisrICBMSUJHTEFERV9MSUJTPSIkTElCR0xBREVfTElCUyAkWE1MMl9MSUJTIgorK2Vsc2UKKysgIExJQkdMQURFX0NGTEFHUz0iJExJQkdMQURFX0NGTEFHUyAtRFVTRV9HTUFSS1VQX1BBUlNFUiIKKysgIFBLR0NGR19SRVFVSVJFX0xJQlhNTDI9IiIKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKysKKytBQ19TVUJTVChYTUwyX0xJQlMpCisrQUNfU1VCU1QoWE1MMl9DRkxBR1MpCisrQUNfU1VCU1QoUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMikKKysKKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBuYXRpdmUgV2luMzJdKQorIGNhc2UgIiRob3N0IiBpbgorICAgKi0qLW1pbmd3KikKK0BAIC0xMTYsNiArMTM4LDIxIEBACisgICBmaQorIGZpCisgCisraWYgdGVzdCAieCRkaXNhYmxlX3htbDIiID09ICJ4eWVzIjsgdGhlbgorKyAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCisrICBlY2hvICIgIFlvdSBjaG9zZSB0byBkaXNhYmxlIGxpYnhtbDIgYW5kIHVzZSBHbGliJ3MiCisrICBlY2hvICIgIEdNYXJrdXBQYXJzZXIgaW5zdGVhZC4iIAorKyAgZWNobyAgCisrICBlY2hvICIgIFBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCB1c2luZyBsaWJnbGFkZSB3aXRoIgorKyAgZWNobyAiICBHTWFya3VwUGFyc2VyIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIG9ubHkuIgorKyAgZWNobworKyAgZWNobyAiICBQbGVhc2UgcG9zdCBwcm9ibGVtcyBvciBzdWNjZXNzIHN0b3JpZXMgdG8iCisrICBlY2hvICIgIHRoZSBnbGFkZS1kZXZlbCBtYWlsaW5nIGxpc3QuIFRoYW5rIHlvdS4iCisrICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKytmaQorKworKworKworIEdUS19ET0NfQ0hFQ0soMS4wKQorIAorIGRubCBnZXR0ZXh0IHN0dWZmIC4uLiB0aGVyZSBpcyBubyBtZXNzYWdlIGNhdGFsb2cgZm9yIGxpYmdsYWRlIC0tIGxpYmdsYWRlCitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9nbGFkZS9nbGFkZS1wYXJzZXIuYyBsaWJnbGFkZS0yLjQuMi9nbGFkZS9nbGFkZS1wYXJzZXIuYworLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMJMjAwNC0xMS0xMSAxMTo1NjoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9nbGFkZS9nbGFkZS1wYXJzZXIuYwkyMDA1LTAzLTIyIDAxOjIwOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDcgKzM0LDE1IEBACisgIyAgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbiwgU3RyaW5nKSAoU3RyaW5nKQorICNlbmRpZgorIAorLSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisrI2lmZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKyMgIGluY2x1ZGUgPHpsaWIuaD4KKysjZWxzZQorKyMgIGluY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKysjZW5kaWYKKysKKysjaWZkZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrIyAgZGVmaW5lIHhtbENoYXIgZ2NoYXIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiZ2xhZGUtcGFyc2VyLmgiCisgI2luY2x1ZGUgImdsYWRlLXByaXZhdGUuaCIKK0BAIC01MDgsNyArNTE2LDkgQEAKKyAgICAgY2FzZSBQQVJTRVJfU1RBUlQ6CisgCWlmICghc3RyY21wKG5hbWUsICJnbGFkZS1pbnRlcmZhY2UiKSkgeworIAkgICAgc3RhdGUtPnN0YXRlID0gUEFSU0VSX0dMQURFX0lOVEVSRkFDRTsKKy0jaWYgMAorKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrICNpZiAwCisgCSAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBYTUwgbmFtZXNwYWNlICovCisgCSAgICBmb3IgKGkgPSAwOyBhdHRycyAmJiBhdHRyc1tpXSAhPSBOVUxMOyBpICs9IDIpIHsKKyAJCWlmICghc3RyY21wKGF0dHJzW2ldLCAieG1sbnMiKSAmJgorQEAgLTUxOCw3ICs1MjgsOSBAQAorIAkJICAgIGdfd2FybmluZygidW5rbm93biBhdHRyaWJ1dGUgYCVzJyBmb3IgPGdsYWRlLWludGVyZmFjZT4iLAorIAkJCSAgICAgIGF0dHJzW2ldKTsKKyAJICAgIH0KKysgI2VuZGlmCisgI2VuZGlmCisrCisgCX0gZWxzZSB7CisgCSAgICBnX3dhcm5pbmcoIkV4cGVjdGVkIDxnbGFkZS1pbnRlcmZhY2U+LiAgR290IDwlcz4uIiwgbmFtZSk7CisgCSAgICBzdGF0ZS0+cHJldl9zdGF0ZSA9IHN0YXRlLT5zdGF0ZTsKK0BAIC0xMDYzLDEyICsxMDc1LDE4IEBACisgICAgIH0KKyB9CisgCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgeG1sRW50aXR5UHRyCisgZ2xhZGVfcGFyc2VyX2dldF9lbnRpdHkoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgeG1sQ2hhciAqbmFtZSkKKyB7CisgICAgIHJldHVybiB4bWxHZXRQcmVkZWZpbmVkRW50aXR5KG5hbWUpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBnbGFkZV9wYXJzZXJfd2FybmluZyhHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKKyB7CitAQCAtMTA3OSw2ICsxMDk3LDEwIEBACisgICAgIHZhX2VuZChhcmdzKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZ2xhZGVfcGFyc2VyX2Vycm9yKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQorIHsKK0BAIC0xMDg5LDYgKzExMTEsMTAgQEAKKyAgICAgdmFfZW5kKGFyZ3MpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBnbGFkZV9wYXJzZXJfZmF0YWxfZXJyb3IoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCisgeworQEAgLTEwOTksNiArMTEyNSwxMCBAQAorICAgICB2YV9lbmQoYXJncyk7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgeG1sU0FYSGFuZGxlciBnbGFkZV9wYXJzZXIgPSB7CisgICAgIChpbnRlcm5hbFN1YnNldFNBWEZ1bmMpTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGludGVybmFsU3Vic2V0ICovCisgICAgIChpc1N0YW5kYWxvbmVTQVhGdW5jKU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzU3RhbmRhbG9uZSAqLworQEAgLTExMjYsNiArMTE1Niw4MiBAQAorICAgICAoZmF0YWxFcnJvclNBWEZ1bmMpZ2xhZGVfcGFyc2VyX2ZhdGFsX2Vycm9yLCAgICAgICAvKiBmYXRhbEVycm9yICovCisgfTsKKyAKKysjZWxzZSAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50X3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICoqYXR0cl9uYW1lcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJfdmFsdWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnJvcikKKyt7CisrICAgIGd1aW50IGkgPSAwOworKworKyAgICAvKiBQYWNrIGF0dHJpYnV0ZSBuYW1lcy92YWx1ZXMgZnJvbSB0d28gc2VwYXJhdGUKKysgICAgICogIGFycmF5cyAoR01hcmt1cFBhcnNlciBzdHlsZSkgaW50byBvbmUgc2luZ2xlCisrICAgICAqICBhcnJheSAobGlieG1sIFNBWFBhcnNlciBzdHlsZSkuIFRoaXMgaXMgbm90CisrICAgICAqICB2ZXJ5IGVmZmljaWVudCwgYnV0IHdlIGRvIGl0IHRvIG1ha2UgdGhlCisrICAgICAqICBHTWFya3VwUGFyc2VyIGNvZGUgYXMgbGl0dGxlIGludmFzaXZlIGFzCisrICAgICAqICBwb3NzaWJsZS4gKi8KKysKKysgICAgd2hpbGUgKGF0dHJfbmFtZXNbaV0gIT0gTlVMTCkgeworKyAgICAgICsraTsKKysgICAgfQorKworKyAgICBpZiAoMSkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2NoYXIgKmF0dHJbKGkqMikrMV07CisrICAgICAgICBndWludCBqLCBrOworKyAgICAgICAKKysgICAgICAgIGZvciAoaj0wLCBrPTA7ICBrIDwgaTsgIGogKz0gMikKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdHRyW2pdID0gYXR0cl9uYW1lc1trXTsKKysgICAgICAgICAgICBhdHRyW2orMV0gPSBhdHRyX3ZhbHVlc1trXTsKKysgICAgICAgICAgICArK2s7CisrICAgICAgICB9CisrICAgICAgICBhdHRyW2kqMl0gPSBOVUxMOworKworKyAgICAgICAgZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnQoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIG5hbWUsIGF0dHIpOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50X3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnIpCisreworKyAgICBnbGFkZV9wYXJzZXJfZW5kX2VsZW1lbnQoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIG5hbWUpOworK30KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzX3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpjaGFycywgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAgICAgICAgICAgICAgICBsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAqKmVycikKKyt7CisrICAgIGdsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzKChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBjaGFycywgKGludCkgbGVuKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfZXJyb3IoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgR0Vycm9yICplcnIsIGdwb2ludGVyIGRhdGEpCisreworKyAgICBnX2xvZygiR2xhZGUtUGFyc2VyIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwsICIlcyIsIGVyci0+bWVzc2FnZSk7CisrfQorKworK3N0YXRpYyBjb25zdCBHTWFya3VwUGFyc2VyICAgZ2xhZGVfcGFyc2VyID0geworKyAgICBnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudF93cmFwcGVyLCAgLyogZWxlbWVudCBvcGVuICAgKi8KKysgICAgZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50X3dyYXBwZXIsICAgIC8qIGVsZW1lbnQgY2xvc2UgICovCisrICAgIGdsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzX3dyYXBwZXIsICAgICAvKiB0ZXh0IGNvbnRlbnQgICAqLworKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGFzc3Rocm91Z2ggICAgKi8KKysgICAgZ2xhZGVfcGFyc2VyX2Vycm9yLCAgICAgICAgICAgICAgICAgIC8qIHBhcnNlIGVycm9yICAgICovCisrfTsKKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisgc3RhdGljIHZvaWQKKyB3aWRnZXRfaW5mb19mcmVlKEdsYWRlV2lkZ2V0SW5mbyAqaW5mbykKKyB7CitAQCAtMTE5MSw2ICsxMjk3LDkgQEAKKyAgKgorICAqIFJldHVybnM6IHRoZSBHbGFkZUludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBYTUwgZmlsZS4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIEdsYWRlSW50ZXJmYWNlICoKKyBnbGFkZV9wYXJzZXJfcGFyc2VfZmlsZShjb25zdCBnY2hhciAqZmlsZSwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyB7CitAQCAtMTIyMiw2ICsxMzMxLDMxIEBACisgICAgIHJldHVybiBzdGF0ZS5pbnRlcmZhY2U7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworK0dsYWRlSW50ZXJmYWNlICoKKytnbGFkZV9wYXJzZXJfcGFyc2VfZmlsZShjb25zdCBnY2hhciAqZmlsZSwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrICAgIEdsYWRlSW50ZXJmYWNlICAqaW50ZXJmYWNlOworKyAgICBHRXJyb3IgICAgICAgICAgKmVyciAgICAgPSBOVUxMOworKyAgICBnY2hhciAgICAgICAgICAgKmNvbnRlbnQgPSBOVUxMOworKyAgICBnc2l6ZSAgICAgICAgICAgIGNsZW47CisrCisrICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlLCAmY29udGVudCwgJmNsZW4sICZlcnIpKSB7CisrICAgICAgICBnX3dhcm5pbmcoImNvdWxkIG5vdCBsb2FkIGdsYWRlIGZpbGU6ICVzIiwgZXJyLT5tZXNzYWdlKTsKKysgICAgICAgIGdfZXJyb3JfZnJlZShlcnIpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgaW50ZXJmYWNlID0gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb250ZW50LCAoZ2ludCkgY2xlbiwgZG9tYWluKTsKKysKKysgICAgZ19mcmVlKGNvbnRlbnQpOworKworKyAgICByZXR1cm4gaW50ZXJmYWNlOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisgLyoqCisgICogZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcgorICAqIEBidWZmZXI6IGEgYnVmZmVyIGluIG1lbW9yeSBjb250YWluaW5nIFhNTCBkYXRhLgorQEAgLTEyMzcsNiArMTM3MSw5IEBACisgICoKKyAgKiBSZXR1cm5zOiB0aGUgR2xhZGVJbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgWE1MIGJ1ZmZlci4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIEdsYWRlSW50ZXJmYWNlICoKKyBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorIHsKK0BAIC0xMjYzLDYgKzE0MDAsMTYxIEBACisgICAgIHJldHVybiBzdGF0ZS5pbnRlcmZhY2U7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKworK3N0YXRpYyBHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrCUdNYXJrdXBQYXJzZUNvbnRleHQgICpjb250ZXh0OworKwlHbGFkZVBhcnNlU3RhdGUgICAgICAgc3RhdGUgPSB7IDAgfTsKKysJR0Vycm9yICAgICAgICAgICAgICAgKmVyciAgID0gTlVMTDsKKysKKysJc3RhdGUuaW50ZXJmYWNlID0gTlVMTDsKKysJaWYgKGRvbWFpbikKKysJCXN0YXRlLmRvbWFpbiA9IGRvbWFpbjsKKysJZWxzZQorKwkJc3RhdGUuZG9tYWluID0gdGV4dGRvbWFpbihOVUxMKTsKKysKKysJLyogRklYTUU6IFRoaXMgc3Ryc3RyKCkgaXMgbm90IHNhZmUsIGFzIGl0IGlnbm9yZXMgdGhlIGxlbgorKwkgKiAgICAgICAgYXJndW1lbnQgYW5kIGFzc3VtZXMgdGhlIGJ1ZmZlciBpcyBOVUwtdGVybWluYXRlZCAqLworKwlpZiAoc3Ryc3RyKGJ1ZmZlciwgIjw/eG1sIikgPT0gTlVMTCkgeworKwkJZ193YXJuaW5nKCJObyBYTUwgaGVhZGVyIGZvdW5kIGluIGRvY3VtZW50ISIpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJY29udGV4dCA9IGdfbWFya3VwX3BhcnNlX2NvbnRleHRfbmV3KCZnbGFkZV9wYXJzZXIsIChHTWFya3VwUGFyc2VGbGFncykgMCwgJnN0YXRlLCBOVUxMKTsKKysKKysJZ2xhZGVfcGFyc2VyX3N0YXJ0X2RvY3VtZW50KCZzdGF0ZSk7CisrCisrCWlmICghZ19tYXJrdXBfcGFyc2VfY29udGV4dF9wYXJzZShjb250ZXh0LCBidWZmZXIsIChnc3NpemUpIGxlbiwgJmVycikpIHsKKysJCWdfd2FybmluZygiZG9jdW1lbnQgbm90IHdlbGwgZm9ybWVkOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCQlnX2Vycm9yX2ZyZWUoZXJyKTsKKysJCWlmIChzdGF0ZS5pbnRlcmZhY2UpCisrCQkJZ2xhZGVfaW50ZXJmYWNlX2Rlc3Ryb3kgKHN0YXRlLmludGVyZmFjZSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlnbGFkZV9wYXJzZXJfZW5kX2RvY3VtZW50KCZzdGF0ZSk7CisrCisrCWlmIChzdGF0ZS5zdGF0ZSAhPSBQQVJTRVJfRklOSVNIKSB7CisrCQlnX3dhcm5pbmcoImRpZCBub3QgZmluaXNoIGluIFBBUlNFUl9GSU5JU0ggc3RhdGUhIik7CisrCisrCQlpZiAoc3RhdGUuaW50ZXJmYWNlKQorKwkJCWdsYWRlX2ludGVyZmFjZV9kZXN0cm95KHN0YXRlLmludGVyZmFjZSk7CisrCisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlyZXR1cm4gc3RhdGUuaW50ZXJmYWNlOworK30KKysKKytzdHJ1Y3QgX2d6aXBfcmZjMTk1Ml9oZHIKKyt7CisrCWd1aW50OAlpZDEsIGlkMiwgY20sIGZsYWdzOworKwlndWludDMyIG10aW1lOworKwlndWludDggIHhmbGFnczsKKysJZ3VpbnQ4ICBvczsKKyt9OworKworK3N0YXRpYyBHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2d6aXBwZWRfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorK3sKKysJc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyICpoZHIgPSAoc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyKilidWZmZXI7CisrCXN0cnVjdCB6X3N0cmVhbV9zICAgICAgICAgenN0cmVhbTsKKysJR2xhZGVJbnRlcmZhY2UgICAgICAgICAgICppbnRlcmZhY2U7CisrCWNvbnN0IGd1aW50OCAgICAgICAgICAgICAqY2J1ZjsgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSAqLworKwlndWludDggICAgICAgICAgICAgICAgICAgKmRlY29tcHJlc3NfYnVmOworKwlndWxvbmcgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3NfbGVuID0gMDsKKysJZ2ludCAgICAgICAgICAgICAgICAgICAgICByZXQ7CisrCisrCWdfYXNzZXJ0KGhkciAhPSBOVUxMICYmIGhkci0+aWQxID09IDB4MWYgJiYgaGRyLT5pZDIgPT0gMHg4Yik7CisrCisrCWlmIChoZHItPmNtICE9IFpfREVGTEFURUQpIHsKKysJCWdfd2FybmluZygiVW5rbm93biBkZWNvbXByZXNzaW9uIG1ldGhvZCAldSIsIChndWludCkgaGRyLT5jbSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwkvKiBVbmNvbXByZXNzZWQgc2l6ZSAobW9kdWxvIDJeMzIpIGlzIGxhc3QKKysJICogIDQgYnl0ZXMgb2YgZ3ppcHBlZCBmaWxlLCBhbmQgbGl0dGxlIGVuZGlhbi4KKysJICogIFNlZSBSRkMgMTk1MiAqLworKwlkZWNvbXByZXNzX2xlbiA9IEdVSU5UMzJfRlJPTV9MRSgqKChndWludDMyKikoKChndWludDgqKWJ1ZmZlcikgKyBsZW4gLSA0KSkpOworKworKwkvKiBwYXJhbm9pZCBtb2RlOiBnbGFkZSBmaWxlcyA+IDVNQiBhcmUgdW5saWtlbHkgKi8KKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGVjb21wcmVzc19sZW4gPCA1KjEwMjQqMTAyNCwgTlVMTCk7CisrCisrCWRlY29tcHJlc3NfYnVmID0gZ19tYWxsb2MwKGRlY29tcHJlc3NfbGVuICsgMSk7IC8qICsxIGZvciBOVUwtdGVybWluYXRvciAqLworKworKwkvKiBmaW5kIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSwgc2tpcHBpbmcgaGVhZGVyIHN0dWZmICovCisrCWNidWYgPSAoZ3VpbnQ4KilidWZmZXIgKyAxMDsKKysJaWYgKGhkci0+ZmxhZ3MgJiAweDA0KSB7CisrCQlndWludDE2IHhsZW4gPSBHVUlOVDE2X0ZST01fTEUoKigoZ3VpbnQxNiopY2J1ZikpOworKwkJY2J1ZiArPSB4bGVuICsgMjsKKysJfQorKwlpZiAoaGRyLT5mbGFncyAmIDB4MDgpIHsKKysJCWd1aW50MTYgb25hbWVsZW4gPSBzdHJsZW4oY2J1Zik7CisrCQljYnVmICs9IG9uYW1lbGVuICsgMTsKKysJfQorKwlpZiAoaGRyLT5mbGFncyAmIDB4MTApIHsKKysJCWd1aW50MTYgY29tbWVudGxlbiA9IHN0cmxlbihjYnVmKTsKKysJCWNidWYgKz0gY29tbWVudGxlbiArIDE7CisrCX0KKysJaWYgKGhkci0+ZmxhZ3MgJiAweDAyKQorKwl7CisrCQljYnVmICs9IDI7IC8qIHNraXAgaGVhZGVyIENSQzE2ICovCisrCX0KKysKKysJenN0cmVhbS5uZXh0X2luICA9ICh2b2lkKiljYnVmOworKwl6c3RyZWFtLmF2YWlsX2luID0gKHVMb25nZikgbGVuIC0gKCh2b2lkKiljYnVmLSh2b2lkKilidWZmZXIpIC0gNCAtIDQgKzE7IAorKwl6c3RyZWFtLm5leHRfb3V0ID0gZGVjb21wcmVzc19idWY7CisrCXpzdHJlYW0uYXZhaWxfb3V0PSBkZWNvbXByZXNzX2xlbjsKKysJenN0cmVhbS56YWxsb2MgICA9IFpfTlVMTDsKKysJenN0cmVhbS56ZnJlZSAgICA9IFpfTlVMTDsKKysJenN0cmVhbS5vcGFxdWUgICA9IFpfTlVMTDsKKysKKysJcmV0ID0gaW5mbGF0ZUluaXQyKCZ6c3RyZWFtLCAtTUFYX1dCSVRTKTsKKysKKysJaWYgKHJldCAhPSBaX09LKSB7CisrCQlnX3dhcm5pbmcoImluZmxhdGVJbml0MigpIGZhaWxlZC4gemxpYiBlcnJvciBjb2RlOiAlZCIsIHJldCk7CisrCQlnX2ZyZWUoZGVjb21wcmVzc19idWYpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJcmV0ID0gaW5mbGF0ZSgmenN0cmVhbSwgWl9GSU5JU0gpOworKworKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworKwkJZ193YXJuaW5nKCJ6bGliIGRlY29tcHJlc3Npb24gZmFpbGVkLiB6bGliIGVycm9yIGNvZGU6ICVkIiwgcmV0KTsKKysJCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlpbnRlcmZhY2UgPSBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGRlY29tcHJlc3NfYnVmLCBkZWNvbXByZXNzX2xlbiwgZG9tYWluKTsKKysKKysJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKKysKKysJcmV0dXJuIGludGVyZmFjZTsKKyt9CisrCisrR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKwlnX3JldHVybl92YWxfaWZfZmFpbChidWZmZXIgIT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbiA+IDAsIE5VTEwpOworKworKwkvKiBDaGVjayBpZiBidWZmZXIgaXMgZ3ppcHBlZCAqLworKwlpZiAoYnVmZmVyWzBdID09IDB4MWYgJiYgYnVmZmVyWzFdID09IChnY2hhcikweDhiKSB7CisrCQlyZXR1cm4gZ2xhZGVfcGFyc2VyX3BhcnNlX2d6aXBwZWRfYnVmZmVyKGJ1ZmZlciwgbGVuLCBkb21haW4pOworKwl9CisrCisrCS8qIEJ1ZmZlciBpcyBjbGVhcnRleHQuICovCisrCXJldHVybiBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGJ1ZmZlciwgbGVuLCBkb21haW4pOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgdm9pZAorIGR1bXBfd2lkZ2V0KHhtbE5vZGUgKnBhcmVudCwgR2xhZGVXaWRnZXRJbmZvICppbmZvLCBnaW50IGluZGVudCkKKyB7CitAQCAtMTM4Miw2ICsxNjc0LDggQEAKKyAJeG1sTm9kZUFkZENvbnRlbnQod2lkZ2V0LCAiICAiKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKyAvKioKKyAgKiBnbGFkZV9pbnRlcmZhY2VfZHVtcAorICAqIEBpbnRlcmZhY2U6IHRoZSBHbGFkZUludGVyZmFjZQorQEAgLTEzOTAsNiArMTY4NCw5IEBACisgICogVGhpcyBmdW5jdGlvbiBkdW1wcyB0aGUgY29udGVudHMgb2YgYSBHbGFkZUludGVyZmFjZSBpbnRvIGEgZmlsZSBhcworICAqIFhNTC4gIEl0IGlzIGludGVuZGVkIG1haW5seSBhcyBhIGRlYnVnZ2luZyB0b29sLgorICAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgdm9pZAorIGdsYWRlX2ludGVyZmFjZV9kdW1wKEdsYWRlSW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IGdjaGFyICpmaWxlbmFtZSkKKyB7CitAQCAtMTQyOCw2ICsxNzI1LDE3IEBACisgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyB9CisgCisrI2Vsc2UgLyogZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrdm9pZAorK2dsYWRlX2ludGVyZmFjZV9kdW1wKEdsYWRlSW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IGdjaGFyICpmaWxlbmFtZSkKKyt7CisrICAgIGdfd2FybmluZygiZ2xhZGVfaW50ZXJmYWNlX2R1bXAoKSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIGxpYnhtbDIuIik7CisrfQorKworKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKysKKyAjaWYgMAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9saWJnbGFkZS0yLjAucGMuaW4gbGliZ2xhZGUtMi40LjIvbGliZ2xhZGUtMi4wLnBjLmluCistLS0gbGliZ2xhZGUtMi40LjIub3JpZy9saWJnbGFkZS0yLjAucGMuaW4JMjAwMS0xMi0xMiAxNToyODoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9saWJnbGFkZS0yLjAucGMuaW4JMjAwNS0wMy0yMiAwMToyMDowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMSw3ICsxMSw3IEBACisgTmFtZTogTGliZ2xhZGUKKyBEZXNjcmlwdGlvbjogYSBsaWJyYXJ5IGZvciBkeW5hbWljYWxseSBsb2FkaW5nIEdMQURFIGludGVyZmFjZSBmaWxlcworIFZlcnNpb246IEBWRVJTSU9OQAorLVJlcXVpcmVzOiBndGsrLTIuMCBsaWJ4bWwtMi4wCisrUmVxdWlyZXM6IGd0aystMi4wIEBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sZ2xhZGUtMi4wCisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vbGliZ2xhZGUtMi4wCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWIyZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVc2luZyBAUFlUSE9OQCBmb3IgdGhpcyBwYXRoIHdvdWxkIHJlc3VsdCBpbiB0aGUgYnVpbGQgc3lzdGVtIHB5dGhvbiBiZWluZyAKK3JlZmVycmVkIHRvLiBJbnN0ZWFkIHdlIHdhbnQgdG8gbG9jYXRlIHB5dGhvbiBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbiBsaWJnbGFkZS0yLjYuNC9saWJnbGFkZS1jb252ZXJ0LmluCistLS0gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbgkyMDExLTA5LTIyIDEwOjE4OjI4Ljk5MTE2NDAwMyArMDgwMAorKysrIGxpYmdsYWRlLTIuNi40L2xpYmdsYWRlLWNvbnZlcnQuaW4JMjAxMS0wOS0yMiAxMDoxODo1NS40MzExNjQwMDMgKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBZVEhPTkAKKysjIS91c3IvYmluL2VudiBweXRob24KKyAjIC0qLSBtb2RlOiBweXRob24gLSotCisgCisgIyB5ZXMsIHRoaXMgcmVxdWlyZXMgcHl0aG9uIDIueCBhbmQgYW4gWE1MIHBhcnNlciBtb2R1bGUgKGVnLiBQeUV4cGF0KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjY3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJSdW50aW1lIHN1cHBvcnQgZm9yIHRoZSBHVEsrIGludGVyZmFjZSBidWlsZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2xpYmdsYWRlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGFkZS9nbGFkZS5oO2VuZGxpbmU9MjI7bWQ1PWEwNGY0NjFjOTY0YmE0YjU3YTE3MmQxZmJjZDhmOGZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsYWRlL2dsYWRlLWd0ay5jO2VuZGxpbmU9MjI7bWQ1PTc2NmY5OTM0MzNlMjY0MmZlYzg3OTM2ZDMxOTk5MGZmIgorCitTRUNUSU9OID0gImxpYnMiCitQUiA9ICJyNSIKK0RFUEVORFMgPSAiemxpYiBnZGstcGl4YnVmIGd0aysiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYworR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZ2xhZGUtY3J1ZnQucGF0Y2ggZmlsZTovL25vLXhtbDIucGF0Y2ggZmlsZTovL3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDE3NzZiNDBmNGUxNjZiNWU5YzEwN2YxYzhmZTQxMzkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI2NDM2MWU3NjQ3ODM5ZDM2ZWQ4MzM2ZDk5MmZkMjEwZDNlODEzOTg4MjI2OWJlZDQ3ZGM0Njc0OTgwMTY1ZGVjIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJ4bWwyIgorCitDRkxBR1MgKz0gIi1seiIKKworUEFDS0FHRVMgKz0gIiAke1BOfS1kYXRhIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK0ZJTEVTXyR7UE59LWRhdGEgPSAiJHtkYXRhZGlyfS94bWwvbGliZ2xhZGUvZ2xhZGUtMi4wLmR0ZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2xpYmdsYWRlLWNvbnZlcnQiCisjUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZGF0YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYm5vdGlmeS9saWJub3RpZnlfMC43LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkMTg4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3Igc2VuZGluZyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgdG8gYSBub3RpZmljYXRpb24gZGFlbW9uIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitERVBFTkRTID0gImRidXMgZ3RrKzMgZGJ1cy1nbGliIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImE0OTk3MDE5ZDA4ZjQ2ZjNiZjU3Yjc4ZTZmNzk1YTU5IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMGVmNjFjYTQwMGQzMGUyODIxNzk3OWJmYTBlNzNhNzQwNmIxOWMzMmRkNzYxNTA2NTRlYzViMmJkZjQ3ZDgzNyIKKworIyB0aGVyZSB3ZXJlIHRpbWVzLCB3ZSBoYWQgdHdvIHZlcnNpb25zIG9mIGxpYm5vdGlmeSAob2UtY29yZSBsaWJub3RpZnk6MC42LnggLworIyBtZXRhLWdub21lIGxpYm5vdGlmeTM6IDAuNy54KQorUFJPVklERVMgKz0gImxpYm5vdGlmeTMiCitSUFJPVklERVNfJHtQTn0gKz0gImxpYm5vdGlmeTMiCitSQ09ORkxJQ1RTXyR7UE59ICs9ICJsaWJub3RpZnkzIgorUlJFUExBQ0VTXyR7UE59ICs9ICJsaWJub3RpZnkzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSAxYzM4ZDU3MGIzM2YyYjAzNmQ0ZmE0N2U5MjliYjJiMzI2NGUzOGJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgQXVnIDIwMTUgMTY6MjU6MzggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBhZGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIHVzZSBvZiBHVEsrCisKK0Rpc3RybyBwYWNrYWdlcnMgbGlrZSBwcmVkaWN0YWJpbGl0eSBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RlZCBvcHRpb25hbAorZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlZGljYWJsZS4gIEFkZCBhIC0td2l0aC1ndGszIG9wdGlvbiAoZGVmYXVsdCB0byAiYXV0byIpCitmb3IgZm9yY2libHkgY29udHJvbGxpbmcgd2hldGhlciBHVEsrIHdpbGwgYmUgdXNlZCBvciBub3QuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNjkzXQorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGb3J3YXJkLXBvcnRlZCB0byAyLjQwLjEwCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxNyArKysrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZjc3ZjNhLi5jYTc3ZGU4IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMjgsMTcgKzEyOCwyMiBAQCBBQ19DSEVDS19GVU5DUyhzdHJ0b2tfcikKKyAjIEdUSworICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistUEtHX0NIRUNLX01PRFVMRVMoW0dUSzNdLFtndGsrLTMuMCA+PSAkR1RLM19SRVFVSVJFRF0sW2hhdmVfZ3RrXzM9eWVzXSxbaGF2ZV9ndGtfMz1ub10pCistCisgR1RLM19CSU5BUllfVkVSU0lPTj0KKyAKKy1pZiB0ZXN0ICIkaGF2ZV9ndGtfMyIgPSAieWVzIjsgdGhlbgorLSAgICBHVEszX0JJTkFSWV9WRVJTSU9OPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1ndGtfYmluYXJ5X3ZlcnNpb24gZ3RrKy0zLjBgIgorK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgR1RLKyAzXSkKKytBQ19BUkdfV0lUSChbZ3RrM10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1ndGszXSxbRG9uJ3QgYnVpbGQgR1RLKzMgdG9vbHMgKGRlZmF1bHQ9YXV0byldKV0sCisrICBbXSxbUEtHX0NIRUNLX0VYSVNUUyhbZ3RrKy0zLjAgPj0gJEdUSzNfUkVRVUlSRURdLFt3aXRoX2d0azM9eWVzXSxbd2l0aF9ndGszPW5vXSldKQorK0FDX01TR19SRVNVTFQoWyR3aXRoX2d0azNdKQorKworK2lmIHRlc3QgIiR3aXRoX2d0azMiID0gInllcyI7IHRoZW4KKysgIFBLR19DSEVDS19NT0RVTEVTKEdUSzMsIFtndGsrLTMuMCA+PSAkR1RLM19SRVFVSVJFRF0pCisrICBHVEszX0JJTkFSWV9WRVJTSU9OPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1ndGtfYmluYXJ5X3ZlcnNpb24gZ3RrKy0zLjBgIgorIGZpCisgCisgQUNfU1VCU1QoW0dUSzNfQklOQVJZX1ZFUlNJT05dKQorIAorLUFNX0NPTkRJVElPTkFMKFtIQVZFX0dUS18zXSxbdGVzdCAiJGhhdmVfZ3RrXzMiID0gInllcyJdKQorK0FNX0NPTkRJVElPTkFMKFtIQVZFX0dUS18zXSxbdGVzdCAiJHdpdGhfZ3RrMyIgPSAieWVzIl0pCisgCisgZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGRubCBHREstUGl4YnVmIFNWRyBsb2FkZXIKK0BAIC0yODksNiArMjk0LDYgQEAgbGlicnN2Zy0kVkVSU0lPTgorIAlCdWlsZCBpbnRyb3NwZWN0YWJsZSBiaW5kaW5nczogICR7Zm91bmRfaW50cm9zcGVjdGlvbn0KKyAJQnVpbGQgVmFsYSBiaW5kaW5nczogICAgICAgICAgICAke2VuYWJsZV92YWxhfQorIAlCdWlsZCBHZGtQaXhidWYgbG9hZGVyOiAgICAgICAgICR7ZW5hYmxlX3BpeGJ1Zl9sb2FkZXJ9CistICAgICAgICBHVEsrICRHVEszX1JFUVVJUkVEIG9yIGxhdGVyOiAgICAgICAgICAgJHtoYXZlX2d0a18zfQorKyAgICAgICAgR1RLKyAkR1RLM19SRVFVSVJFRCBvciBsYXRlcjogICAgICAgICAgICR7d2l0aF9ndGtfM30KKyAJQnVpbGQgbWlzY2VsbGFlbm91cyB0b29sczogICAgICAke2J1aWxkX21pc2NfdG9vbHN9CisgIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiMGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlbmRlcmluZyBTVkcgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9saWJyc3ZnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yc3ZnLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0yNDttZDU9MjBiNDExM2M0OTA5YmJmMGQ2N2UwMDY3NzgzMDJiYzYiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJjYWlybyBnZGstcGl4YnVmIGdsaWItMi4wIGxpYmNyb2NvIGxpYnhtbDIgcGFuZ28iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIHBpeGJ1ZmNhY2hlCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ndGstb3B0aW9uLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmYWRlYmUyZTc5OWFiMTU5MTY5ZWUzMTk4NDE1ZmY4NSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjk2NWM4MDc0MzhjZTkwYjIwNGU5MzBmZjgwYzkyZWJhMTYwNmEyZjZmZDVjY2ZkMDkzMzVjOTk4OTZkZDM0NzkiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtdmFsYSIKKworIyBUaGUgb2xkZXIgbGQgKDIuMjIpIG9uIHRoZSBob3N0IChDZW50b3MgNi41KSBkb2Vzbid0IGhhdmUgdGhlCisjIC1Cc3ltYm9saWMtZnVuY3Rpb25zIG9wdGlvbiwgd2UgY2FuIGRpc2FibGUgaXQgZm9yIG5hdGl2ZS4KK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1Cc3ltYm9saWM9YXV0byIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImdka3BpeGJ1ZiIKKyMgVGhlIGdkay1waXhidWYgbG9hZGVyCitQQUNLQUdFQ09ORklHW2dka3BpeGJ1Zl0gPSAiLS1lbmFibGUtcGl4YnVmLWxvYWRlciwtLWRpc2FibGUtcGl4YnVmLWxvYWRlcixnZGstcGl4YnVmLW5hdGl2ZSIKKyMgR1RLKyB0ZXN0IGFwcGxpY2F0aW9uIChyc3ZnLXZpZXcpCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0azMsLS13aXRob3V0LWd0azMsZ3RrKzMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTG9hZGFibGUgbW9kdWxlcyBkb24ndCBuZWVkIC5hIG9yIC5sYSBvbiBMaW51eAorCXJtIC1mICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyouYSAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmxhCit9CisKK1BBQ0tBR0VTID0rICJsaWJyc3ZnLWd0ayByc3ZnIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8uZGVidWciCitGSUxFU19yc3ZnID0gIiR7YmluZGlyfS9yc3ZnKiBcCisJICAgICAgJHtkYXRhZGlyfS9waXhtYXBzL3N2Zy12aWV3ZXIuc3ZnIFwKKwkgICAgICAke2RhdGFkaXJ9L3RoZW1lcyIKK0ZJTEVTX2xpYnJzdmctZ3RrID0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qLyovKi5zbyIKKworUElYQlVGX1BBQ0tBR0VTID0gImxpYnJzdmctZ3RrIgorCitQSVhCVUZDQUNIRV9TWVNST09UX0RFUFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgaGFyZmJ1enotbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgcGFuZ28tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgaWN1LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmM4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJsaWJzZWNyZXQgaXMgYSBsaWJyYXJ5IGZvciBzdG9yaW5nIGFuZCByZXRyaWV2aW5nIHBhc3N3b3JkcyBhbmQgb3RoZXIgc2VjcmV0cyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yM2MyYTVlMDEwNmI5OWQ3NTIzODk4NjU1OWJiNWZjNiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYworCitERVBFTkRTID0gImdsaWItMi4wIGxpYmdjcnlwdCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtbWFucGFnZXMiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjIzY2RmODI2N2QxMWEyNmY4OGYwZGJlYzFlMjAyMmFkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTJmZDI4OGIwMTJlMWIyYjFiNTRkNTg2Y2Q0YzY1MDc4ODU3MTU1MzQ2NDRiNDUzNGI3ZWY3ZDcwNzliYTQ0MyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY1MTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiV2luZG93IG5hdmlnYXRpb24gY29uc3RydWN0aW9uIHRvb2xraXQiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitCUE4gPSAibGlid25jayIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWIgZ3RrKzMgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlieHJlcyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInN0YXJ0dXAtbm90aWZpY2F0aW9uIgorUEFDS0FHRUNPTkZJR1tzdGFydHVwLW5vdGlmaWNhdGlvbl0gPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sLS1kaXNhYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLHN0YXJ0dXAtbm90aWZpY2F0aW9uIgorCitpbmhlcml0IGdub21lYmFzZQorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNDUzODY3MmUwZDc3NWZhZGVkZjEwYWJlYjgwMjAwNDciCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJmNTA4MDA3NjM0NjYwOWI0YzM2Mzk0Yjg3OWYzYTg2YjkyY2VkM2I5MGEzN2NiNTRjOGU5YTE0ZjAwZTc5MjFjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9idWlsZGVyXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjcyOWZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJOZXcgdXNlciB0byBkbyBzcGVjaWZpYyBqb2IiCitERVNDUklQVElPTiA9ICJUaGlzIHJlY2lwZSBjcmVhdGUgYSBuZXcgdXNlciBuYW1lZCAke1BOfSwgd2hvIGlzIHVzZWQgZm9yIHNwZWNpZmljIGpvYnMgbGlrZSBidWlsZGluZy4gVGhlIHRhc2sgY2FuIGJlIGF1dG8gc3RhcnRlZCB2aWEgbWluaSBYIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyNiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vYnVpbGRlcl9ob2Jfc3RhcnQuc2g7ZW5kbGluZT01O21kNT04NDc5NmMzYzQxNzg1ZDg2MTAwZmRhYmNiZGFkZTAwZSIKKworU1JDX1VSSSA9ICJmaWxlOi8vYnVpbGRlcl9ob2Jfc3RhcnQuc2ggXAorICAgICAgICAgICBmaWxlOi8vcGxlYXNlX3dhaXRfZGlhbG9nLnB5IFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworUkRFUEVORFNfJHtQTn0gPSAibWluaS14LXNlc3Npb24iCisKK2luaGVyaXQgdXNlcmFkZAorCisjIGJ1aWxkZXIgdXNlciBwYXNzd29yZCBpcyAiYnVpbGRlciIKK0JVSUxERVJfUEFTU1dPUkQgPz0gIi5nTGliaU5YbjBQMTIiCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ncm91cHMgdmlkZW8sdHR5LGF1ZGlvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1wYXNzd29yZCAke0JVSUxERVJfUEFTU1dPUkR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGJ1aWxkZXIiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L21pbmlfeC9zZXNzaW9uLmQKKwlpbnN0YWxsIC1wIC1tIDc1NSBidWlsZGVyX2hvYl9zdGFydC5zaCAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kLworCisJY2hvd24gIGJ1aWxkZXIuYnVpbGRlciAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCisgICAgICAgIGluc3RhbGwgLXAgLW0gNzU1IHBsZWFzZV93YWl0X2RpYWxvZy5weSAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9idWlsZGVyX2hvYl9zdGFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzk0YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjVGhpcyBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgdmlhIG1pbmkgWCBzZXNzaW9uIG9uIGJlaGFsZiBvZiBmaWxlIG93bmVyLCBhZnRlcgorI2luc3RhbGxlZCBpbiAvZXRjL21pbmlfeC9zZXNzaW9uLmQvLiBBbnkgYXV0byBzdGFydCBqb2JzIGluY2x1ZGluZyBYIGFwcHMgY2FuCisjYmUgcHV0IGhlcmUKKworIyBzdGFydCBob2IgaGVyZQorZXhwb3J0IFBTRVVET19QUkVGSVg9L3VzcgorZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPS9ob21lL2J1aWxkZXIvcHNldWRvCitleHBvcnQgUFNFVURPX0xJQkRJUj0vdXNyL2xpYi9wc2V1ZG8vbGliNjQKK2V4cG9ydCBHSVRfUFJPWFlfQ09NTUFORD0vaG9tZS9idWlsZGVyL3Bva3kvc2NyaXB0cy9vZS1naXQtcHJveHkKKworI3N0YXJ0IHBjbWFuZm0gaW4gZGFlbW9uIG1vZGUgdG8gYWxsb3cgYXN5bmNocm9ub3VzIGxhdW5jaAorcGNtYW5mbSAtZCYKKworI3JlZ2lzdGVyIGhhbmRsZXJzIGZvciBzb21lIGZpbGUgdHlwZXMKK2lmIFsgISAtZCAvaG9tZS9idWlsZGVyLy5sb2NhbC9zaGFyZS9hcHBsaWNhdGlvbnMgXTsgdGhlbgorICAgIG1rZGlyIC1wIC9ob21lL2J1aWxkZXIvLmxvY2FsL3NoYXJlL2FwcGxpY2F0aW9ucy8KKyAgICAjcmVnaXN0ZXIgZm9sZGVycyB0byBvcGVuIHdpdGggUENNYW5GTSBmaWxlbWFuYWdlcgorICAgIHhkZy1taW1lIGRlZmF1bHQgcGNtYW5mbS5kZXNrdG9wIGlub2RlL2RpcmVjdG9yeQorCisgICAgI3JlZ2lzdGVyIGh0bWwgbGlua3MgYW5kIGZpbGVzIHdpdGggZXBpcGhhbnkKKyAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgeC1zY2hlbWUtaGFuZGxlci9odHRwCisgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHgtc2NoZW1lLWhhbmRsZXIvaHR0cHMKKyAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgdGV4dC9odG1sCisKKyAgICAjcmVnaXN0ZXIgdGV4dCBmaWxlcyB3aXRoIGxlYWZwYWQgdGV4dCBlZGl0b3IKKyAgICB4ZGctbWltZSBkZWZhdWx0IGxlYWZwYWQuZGVza3RvcCB0ZXh0L3BsYWluCitmaQorCitjZCAvaG9tZS9idWlsZGVyL3Bva3kKKy4gLi9vZS1pbml0LWJ1aWxkLWVudgorCitob2IgJgorCittYXRjaGJveC10ZXJtaW5hbCYKKworL2V0Yy9taW5pX3gvcGxlYXNlX3dhaXRfZGlhbG9nLnB5ICYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weSBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDIzODFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5CkBAIC0wLDAgKzEsMjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IGdsaWIKK2ltcG9ydCBndGsKKyAKK2RlZiBkZXN0cm95X3dpbmRvd19jYih3aWRnZXQsIGV2ZW50KToKKyAgICBndGsubWFpbl9xdWl0KCkKKyAKK2RlZiBhbGxfZG9uZV9jYigpOgorICAgIGd0ay5tYWluX3F1aXQoKQorIAorZGVmIGRpYWxvZ3VlX3VpKCk6CisgICAgd2luZG93ID0gZ3RrLldpbmRvdygpCisgICAgd2luZG93LnNldF90aXRsZSgiUGxlYXNlIHdhaXQuLi4iKQorICAgIHdpbmRvdy5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBkZXN0cm95X3dpbmRvd19jYikKKyAgICB3aW5kb3cuc2hvdygpCisgICAgd2luZG93LnNldF9ib3JkZXJfd2lkdGgoMTIpCisgCisgICAgbXNnID0gIlBsZWFzZSB3YWl0IHdoaWxlIEJpdEJha2UgaW5pdGlhbGl6ZXMgSG9iIgorICAgIGxhYmVsID0gZ3RrLkxhYmVsKG1zZykKKyAgICBsYWJlbC5zaG93KCkKKyAgICB3aW5kb3cuYWRkKGxhYmVsKQorIAorICAgIGdsaWIudGltZW91dF9hZGRfc2Vjb25kcygxMCwgYWxsX2RvbmVfY2IpCisgCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGRpYWxvZ3VlX3VpKCkKKyAgICBndGsubWFpbigpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLWZwdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3MmU4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jCkBAIC0wLDAgKzEsNiBAQAorCitkZWYgZ2V0X2NhaXJvX2ZwdV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisgICAgICAgIHJldHVybiAiLS1kaXNhYmxlLXNvbWUtZmxvYXRpbmctcG9pbnQiCisgICAgcmV0dXJuICIiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDUzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiVGhlIENhaXJvIDJEIHZlY3RvciBncmFwaGljcyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiQ2Fpcm8gaXMgYSBtdWx0aS1wbGF0Zm9ybSBsaWJyYXJ5IHByb3ZpZGluZyBhbnRpLWFsaWFzZWQgXAordmVjdG9yLWJhc2VkIHJlbmRlcmluZyBmb3IgbXVsdGlwbGUgdGFyZ2V0IGJhY2tlbmRzLiBQYXRocyBjb25zaXN0IFwKK29mIGxpbmUgc2VnbWVudHMgYW5kIGN1YmljIHNwbGluZXMgYW5kIGNhbiBiZSByZW5kZXJlZCBhdCBhbnkgd2lkdGggXAord2l0aCB2YXJpb3VzIGpvaW4gYW5kIGNhcCBzdHlsZXMuIEFsbCBjb2xvcnMgbWF5IGJlIHNwZWNpZmllZCB3aXRoIFwKK29wdGlvbmFsIHRyYW5zbHVjZW5jZSAob3BhY2l0eS9hbHBoYSkgYW5kIGNvbWJpbmVkIHVzaW5nIHRoZSBcCitleHRlbmRlZCBQb3J0ZXIvRHVmZiBjb21wb3NpdGluZyBhbGdlYnJhIGFzIGZvdW5kIGluIHRoZSBYIFJlbmRlciBcCitFeHRlbnNpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1QTC0xICYgTEdQTHYyLjEgJiBHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIk1QTC0xICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59LWRldiA9ICJNUEwtMSAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfS1nb2JqZWN0ID0gIk1QTC0xICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59LXBlcmYtdXRpbHMgPSAiR1BMdjMrIgorWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSBsaWJ4cmVuZGVyIGxpYnhleHQiCitERVBFTkRTID0gImxpYnBuZyBmb250Y29uZmlnIHBpeG1hbiBnbGliLTIuMCB6bGliIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExIHhjYicsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14PXllcyAtZW5hYmxlLXhsaWIsLS13aXRoLXg9bm8gLS1kaXNhYmxlLXhsaWIsJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbeGNiXSA9ICItLWVuYWJsZS14Y2IsLS1kaXNhYmxlLXhjYixsaWJ4Y2IiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSA9ICItLWVuYWJsZS1kaXJlY3RmYj15ZXMsLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS1lbmFibGUtdmFsZ3JpbmQ9eWVzLC0tZGlzYWJsZS12YWxncmluZCx2YWxncmluZCIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2w9eWVzLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2dsZXN2Ml0gPSAiLS1lbmFibGUtZ2xlc3YyLC0tZGlzYWJsZS1nbGVzdjIsdmlydHVhbC9saWJnbGVzMiIKKworI2NoZWNrIGZvciBUQVJHRVRfRlBVPXNvZnQgYW5kIGluZm9ybSBjb25maWd1cmUgb2YgdGhlIHJlc3VsdCBzbyBpdCBjYW4gZGlzYWJsZSBzb21lIGZsb2F0aW5nIHBvaW50cyAKK3JlcXVpcmUgY2Fpcm8tZnB1LmluYworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfY2Fpcm9fZnB1X3NldHRpbmcoYmIsIGQpfSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRlZSBcCisgICAgICAgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBXZSBkb24ndCBkZXBlbmQgb24gYmludXRpbHMgc28gd2UgbmVlZCB0byBkaXNhYmxlIHRoaXMKK2V4cG9ydCBhY19jdl9saWJfYmZkX2JmZF9vcGVucj0ibm8iCisjIEVuc3VyZSB3ZSBkb24ndCBkZXBlbmQgb24gTFpPCitleHBvcnQgYWNfY3ZfbGliX2x6bzJfbHpvMmFfZGVjb21wcmVzcz0ibm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitDRkxBR1MgKz0gIi1mZmF0LWx0by1vYmplY3RzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxN2RiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjIuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSBjYWlyby5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTczZTk5OWUwYzcyYjVhYzkwMTI0MjRmYTE1N2FkNzciCisKK1NSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL2NhaXJvLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImUxY2RmYWYxYzZjOTk1YzRkNGM1NGUwNzIxNWIwMTE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5MTlkOTk5ZGRiMWJiYmVjZDRiYmU2NTI5OWNhMmFiZDIwNzljN2UxM2QyMjQ1Nzc4OTVhZmE3MDA1ZWNjZWIiCisKK1BBQ0tBR0VTID0rICJjYWlyby1nb2JqZWN0IGNhaXJvLXNjcmlwdC1pbnRlcnByZXRlciBjYWlyby1wZXJmLXV0aWxzIgorCitTVU1NQVJZXyR7UE59ID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKK0RFU0NSSVBUSU9OXyR7UE59ID0gIkNhaXJvIGlzIGEgbXVsdGktcGxhdGZvcm0gbGlicmFyeSBwcm92aWRpbmcgYW50aS1hbGlhc2VkIFwKK3ZlY3Rvci1iYXNlZCByZW5kZXJpbmcgZm9yIG11bHRpcGxlIHRhcmdldCBiYWNrZW5kcy4gUGF0aHMgY29uc2lzdCBcCitvZiBsaW5lIHNlZ21lbnRzIGFuZCBjdWJpYyBzcGxpbmVzIGFuZCBjYW4gYmUgcmVuZGVyZWQgYXQgYW55IHdpZHRoIFwKK3dpdGggdmFyaW91cyBqb2luIGFuZCBjYXAgc3R5bGVzLiBBbGwgY29sb3JzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBcCitvcHRpb25hbCB0cmFuc2x1Y2VuY2UgKG9wYWNpdHkvYWxwaGEpIGFuZCBjb21iaW5lZCB1c2luZyB0aGUgXAorZXh0ZW5kZWQgUG9ydGVyL0R1ZmYgY29tcG9zaXRpbmcgYWxnZWJyYSBhcyBmb3VuZCBpbiB0aGUgWCBSZW5kZXIgXAorRXh0ZW5zaW9uLiIKKworU1VNTUFSWV9jYWlyby1nb2JqZWN0ID0gIlRoZSBDYWlybyBsaWJyYXJ5IEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IgorREVTQ1JJUFRJT05fY2Fpcm8tZ29iamVjdCA9ICJBIEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IGZvciB0aGUgQ2Fpcm8gQVBJLiIKKworU1VNTUFSWV9jYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgPSAiVGhlIENhaXJvIGxpYnJhcnkgc2NyaXB0IGludGVycHJldGVyIgorREVTQ1JJUFRJT05fY2Fpcm8tc2NyaXB0LWludGVycHJldGVyID0gIlRoZSBDYWlybyBzY3JpcHQgaW50ZXJwcmV0ZXIgaW1wbGVtZW50cyBcCitDYWlyb1NjcmlwdC4gIENhaXJvU2NyaXB0IGlzIHVzZWQgYnkgdHJhY2luZyB1dGlsaXRpZXMgdG8gZW5hYmxlIHRoZSBhYmlsaXR5IFwKK3RvIHJlcGxheSByZW5kZXJpbmcuIgorCitERVNDUklQVElPTl9jYWlyby1wZXJmLXV0aWxzID0gIlRoZSBDYWlybyBsaWJyYXJ5IHBlcmZvcm1hbmNlIHV0aWxpdGllcyIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jYWlyby8qLnNvIgorRklMRVNfJHtQTn0tZ29iamVjdCA9ICIke2xpYmRpcn0vbGliY2Fpcm8tZ29iamVjdC5zby4qIgorRklMRVNfJHtQTn0tc2NyaXB0LWludGVycHJldGVyID0gIiR7bGliZGlyfS9saWJjYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIuc28uKiIKK0ZJTEVTXyR7UE59LXBlcmYtdXRpbHMgPSAiJHtiaW5kaXJ9L2NhaXJvLXRyYWNlICR7bGliZGlyfS9jYWlyby8qLmxhICR7bGliZGlyfS9jYWlyby9saWJjYWlyby10cmFjZS5zby4qIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2JpbmRpcn0vY2Fpcm8tc3BoaW54CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvL2NhaXJvLXNwaGlueCoKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby8uZGVidWcvY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvLy5kZWJ1Zy9jYWlyby1zcGhpbngqCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyMWNlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYwpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIkdyYXBoaWNzIGxpYnJhcnkgZm9yIGNyZWF0aW5nIGhhcmR3YXJlLWFjY2VsZXJhdGVkIHVzZXIgaW50ZXJmYWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2x1dHRlci1wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKKworaW5oZXJpdCBjbHV0dGVyIHB0ZXN0LWdub21lCisKK0RFUEVORFMgPSAicGFuZ28gZ2xpYi0yLjAganNvbi1nbGliIGF0ayB1ZGV2IGNvZ2wtMS4wIgorUEFDS0FHRV9CRUZPUkVfUE4gKz0gIiR7UE59LWV4YW1wbGVzIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCitFREVQRU5EU19YMTEgPSAidmlydHVhbC9saWJ4MTEgbGlieGkgbGlieGZpeGVzIgorRURFUEVORFNfR0xYID0gInZpcnR1YWwvbGliZ2wiCitFREVQRU5EU19FR0wgPSAidmlydHVhbC9lZ2wiCitFREVQRU5EU19XQVlMQU5EID0gIndheWxhbmQgbGlieGtiY29tbW9uIGdkay1waXhidWYiCisKK0VERVBFTkRTX0VWREVWID0gImxpYnhrYmNvbW1vbiIKK0VSREVQRU5EU19FVkRFViA9ICJ4a2V5Ym9hcmQtY29uZmlnIgorCisjIERpc2FibGUgcHJldHR5IG11Y2ggZXZlcnl0aGluZywgb3ZlcnJpZGUgaW4gcGxhdGZvcm0gc3BlY2lmaWMgc2V0IHVwCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uCVwKKwkgICAgIAkgLS1kaXNhYmxlLXF1YXJ0ei1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLXdpbjMyLWJhY2tlbmQJXAorCSAgICAgCSAtLWRpc2FibGUtZ2RrLWJhY2tlbmQJCVwKKwkgICAgIAkgLS1kaXNhYmxlLWNleDEwMC1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLXRzbGliLWlucHV0CQlcCisJICAgIAkiCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtYmFja2VuZCwtLWRpc2FibGUteDExLWJhY2tlbmQsJHtFREVQRU5EU19YMTF9IgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIiwsJHtFREVQRU5EU19YMTF9ICR7RURFUEVORFNfR0xYfSIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wtYmFja2VuZCwtLWRpc2FibGUtZWdsLWJhY2tlbmQsJHtFREVQRU5EU19FR0x9IgorUEFDS0FHRUNPTkZJR1tldmRldl0gPSAiLS1lbmFibGUtZXZkZXYtaW5wdXQsLS1kaXNhYmxlLWV2ZGV2LWlucHV0LCR7RURFUEVORFNfRVZERVZ9LCR7RVJERVBFTkRTX0VWREVWfSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1iYWNrZW5kLC0tZGlzYWJsZS13YXlsYW5kLWJhY2tlbmQsJHtFREVQRU5EU19XQVlMQU5EfSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZC1jb21wb3NpdG9yXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix3YXlsYW5kIgorCisjIERlZmF1bHQgY29uZmlndXJhdGlvbiwgZGlzdHJvcyBtaWdodCB3YW50IHRvIG92ZXJyaWRlCitQQUNLQUdFQ09ORklHID8/PSAiZWdsIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dseCB4MTEnLCAnJywgZCl9IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9jbHV0dGVyL2V4YW1wbGVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7bGliZGlyfS9jbHV0dGVyL2V4YW1wbGVzIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLy5kZWJ1ZyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTEyOCBmb3IgdGhpcworCXRvdWNoIC10IDIwMDAwMTAxMDAwMCAke1N9L3BvL2NsdXR0ZXItMS4wLnBvdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL2luc3RhbGwtZXhhbXBsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YTcwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL2luc3RhbGwtZXhhbXBsZXMucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorSW5zdGFsbCB0aGUgZXhhbXBsZXMgdG8gJGxpYmRpci9jbHV0dGVyLy4KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9NYWtlZmlsZS5hbQoraW5kZXggNGI5YjQ0OS4uMjMyY2QxOSAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmFtCisrKysgYi9leGFtcGxlcy9NYWtlZmlsZS5hbQorQEAgLTM4LDYgKzM4LDcgQEAgQU1fQ1BQRkxBR1MgPSBcCisgCS1JJCh0b3Bfc3JjZGlyKS9jbHV0dGVyIFwKKyAJLUkkKHRvcF9idWlsZGRpcikvY2x1dHRlcgorIAorLW5vaW5zdF9QUk9HUkFNUyA9ICQoYWxsX2V4YW1wbGVzKQorK2V4YW1wbGVkaXIgPSAkKHBrZ2xpYmRpcikvZXhhbXBsZXMKKytleGFtcGxlX1BST0dSQU1TID0gJChhbGxfZXhhbXBsZXMpCisgCisgRVhUUkFfRElTVCA9IHJlZGhhbmQucG5nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzE4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDY2OGUxZDE0YWYxMzI0OTM4NGFiMzI0YzdkNzllYzQxNDdmMDdlNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAyNyBBcHIgMjAxNSAyMDoxMjozMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBSdW4gaW5zdGFsbGVkIHRlc3RzIHdpdGggdGFwIG91dHB1dAorCitDb25maWd1cmUgb3V0cHV0IGZyb20gaW5zdGFsbGVkLXRlc3RzIHRvIGJlIFRBUCBjb21wbGlhbnQgc3VjaCB0aGF0Citnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIHByb3Blcmx5IGludGVycHJldHMgdGhlIHJlc3VsdHMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBUaW0gT3JsaW5nIDxUaWNvVGltb0BnbWFpbC5jb20+CistLS0KKyBidWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5tayBiL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworaW5kZXggN2M1ZjgyYi4uODQ0ZTE3ZSAxMDA2NDQKKy0tLSBhL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworKysrIGIvYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rCitAQCAtMTI3LDcgKzEyNyw4IEBAIGluc3RhbGxlZF90ZXN0X21ldGFfREFUQSA9ICQoaW5zdGFsbGVkX3Rlc3RjYXNlczo9LnRlc3QpCisgJS50ZXN0OiAlJChFWEVFWFQpIE1ha2VmaWxlCisgCSQoQU1fVl9HRU4pIChlY2hvICdbVGVzdF0nID4gJEAudG1wOyBcCisgCWVjaG8gJ1R5cGU9c2Vzc2lvbicgPj4gJEAudG1wOyBcCistCWVjaG8gJ0V4ZWM9ZW52IEdfRU5BQkxFX0RJQUdOT1NUSUM9MCBDTFVUVEVSX0VOQUJMRV9ESUFHTk9TVElDPTAgJChpbnN0YWxsZWRfdGVzdGRpcikvJDwnID4+ICRALnRtcDsgXAorKwllY2hvICdFeGVjPWVudiBHX0VOQUJMRV9ESUFHTk9TVElDPTAgQ0xVVFRFUl9FTkFCTEVfRElBR05PU1RJQz0wICQoaW5zdGFsbGVkX3Rlc3RkaXIpLyQ8IC0tdGFwJyA+PiAkQC50bXA7IFwKKysJZWNobyAnT3V0cHV0PVRBUCcgPj4gJEAudG1wOyBcCisgCW12ICRALnRtcCAkQCkKKyAKKyBDTEVBTkZJTEVTICs9ICQoaW5zdGFsbGVkX3Rlc3RfbWV0YV9EQVRBKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4NzdlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBjbHV0dGVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4Y2RmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGNsdXR0ZXItMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjY0OTQyNTZjOTgwZDQ5NzAzYTU1MzkxNmUzMDgzY2QiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxZDc3Y2UxNjAyNWY4NzY2N2ExZDAwZGM0ZmE2MTdhMTkzNTE1NmY2M2ZkMTc2MzVmZGFkZjEzODg2NmM5ZTFlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmVkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiR1N0cmVhbWVyIGludGVncmF0aW9uIGxpYnJhcnkgZm9yIENsdXR0ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNsdXR0ZXItcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIrIgorCitpbmhlcml0IGNsdXR0ZXIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaCIKKworREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBjbHV0dGVyLTEuMCIKK1JERVBFTkRTXyR7UE59ICs9ICJnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIgorUEFDS0FHRVMgID0rICIke1BOfS1leGFtcGxlcyIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworRklMRVNfJHtQTn0gICAgICAgICAgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wL2xpYiouc28iCitGSUxFU18ke1BOfS1kZXYgICAgICArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyAgICAgICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvbGliKi5zbyIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzICA9ICIke2JpbmRpcn0vdmlkZW8tcGxheWVyICR7YmluZGlyfS92aWRlby1zaW5rIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC8wMDAxLUluc3RhbGwtZXhhbXBsZS1iaW5hcnktbmVlZGVkLWZvci1jb3JlLWltYWdlLWNsdXR0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC8wMDAxLUluc3RhbGwtZXhhbXBsZS1iaW5hcnktbmVlZGVkLWZvci1jb3JlLWltYWdlLWNsdXR0ZXIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBkNzdjNzExMjc3YmYwNzVjZTA1NDVjMTliMzIyZjA0MGM0OWM3NzhhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDMwIEFwciAyMDE1IDEyOjE5OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEluc3RhbGwgZXhhbXBsZSBiaW5hcnkgbmVlZGVkIGZvciBjb3JlLWltYWdlLWNsdXR0ZXIKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW1wb3J0ZWQgZnJvbSBjbHV0dGVyLWdzdC0xLjggcGFja2FnZSwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLAorY29tbWl0IGFlMjhlZTNmN2EwNjBiOWUwZDEzMTU0YTg0ZjI0NDRhOTg0OTBiNWIsIHVwZGF0ZWQgZm9yIGNsdXR0ZXItZ3N0IDMuMAorCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZXhhbXBsZXMvTWFrZWZpbGUuYW0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitpbmRleCBiZmJjMWI1Li4wOTY1NWUzIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKysrKyBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyBOVUxMID0gIworIAorLW5vaW5zdF9QUk9HUkFNUyA9IGNhbWVyYS1wbGF5ZXIgdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uIHZpZGVvLWNvbnRlbnQKKytiaW5fUFJPR1JBTVMgPSBjYW1lcmEtcGxheWVyIHZpZGVvLXBsYXllciB2aWRlby1zaW5rIHZpZGVvLXNpbmstbmF2aWdhdGlvbiB2aWRlby1jb250ZW50CisgCisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgXAorIAkJJChNQUlOVEFJTkVSX0NGTEFHUykgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wL2VuYWJsZS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FlYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wL2VuYWJsZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitJbnN0YWxsIGV4YW1wbGUgYmluYXJ5IG5lZWRlZCBmb3IgY29yZS1pbWFnZS1jbHV0dGVyCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0ltcG9ydGVkIGZyb20gY2x1dHRlci1nc3QtMS44IHBhY2thZ2UsIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZCwKK2NvbW1pdCBhZTI4ZWUzZjdhMDYwYjllMGQxMzE1NGE4NGYyNDQ0YTk4NDkwYjViLCB1cGRhdGVkIGZvciBjbHV0dGVyLWdzdCAxLjYKKworU2lnbmVkLW9mZi1ieTogVG9tYXMgRnJ5ZHJ5Y2ggPHRvbWFzQHNsZWVwZml2ZS5jb20+CisKK0luZGV4OiBnaXQvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9leGFtcGxlcy9NYWtlZmlsZS5hbQkyMDExLTAxLTMxIDEwOjE0OjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9leGFtcGxlcy9NYWtlZmlsZS5hbQkyMDExLTAxLTMxIDEwOjE0OjM0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEsNiArMSw2IEBACisgTlVMTCA9ICMKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24KKytiaW5fUFJPR1JBTVMgPSB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24KKyAKKyBJTkNMVURFUyA9IC1JJCh0b3Bfc3JjZGlyKSBcCisgCSAgICQoTUFJTlRBSU5FUl9DRkxBR1MpIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlhOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjbHV0dGVyLWdzdC0zLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NsdXR0ZXItZ3N0L2NsdXR0ZXItZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OTViYWFjYmExOTRlODE0YzExMGVhM2JkZjI1ZGRiZjQiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY3ZDk3Zjk2ZTdjY2E4MmYzODMxN2QxNzM0ZDVkYWRiIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNTgyZTg1Yjg4NDgyZTE2ZjdlYzcxOTM2M2UzOGZhZGY4NGZhYjRkNGJhYWEyMWU1MjI3YTQ1NGI4MjRmMTM1YyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODk4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjAuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZW1iZWRkaW5nIGEgQ2x1dHRlciBjYW52YXMgaW4gYSBHVEsrIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbHV0dGVyLXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKKworaW5oZXJpdCBjbHV0dGVyCisKK0RFUEVORFMgPSAiY2x1dHRlci0xLjAgZ3RrKzMiCitQQUNLQUdFUyAgPSsgIiR7UE59LWV4YW1wbGVzIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwZWExOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgY2x1dHRlci1ndGstMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNTU3ZDgxNGMzZTcwY2MzYTJkMWNmMzgxNjkxOWIxNGYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJiYmQwM2RmYTlhMjAxMDJkNWNkYjQ0MDUxM2IwYTAzNTkzM2RhNTU3YWQ3ZTlkYTMxNTQ2MDM0ZGUyZGFmMDY5IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTMxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKQEAgLTAsMCArMSw3MCBAQAorU1VNTUFSWSA9ICJNb2Rlcm4gM0QgZ3JhcGhpY3MgQVBJIHdpdGggYXNzb2NpYXRlZCB1dGlsaXR5IEFQSXMiCitIT01FUEFHRSA9ICJodHRwOi8vd2lraS5jbHV0dGVyLXByb2plY3Qub3JnL3dpa2kvQ29nbCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNsdXR0ZXIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnZGstcGl4YnVmIgorUEFDS0FHRVMgPSsgIiR7UE59LWV4YW1wbGVzIFwKKyAgICAgICAgICAgICBsaWJjb2dsIGxpYmNvZ2wtZ2xlczIgbGliY29nbC1wYW5nbyBsaWJjb2dsLXBhdGggXAorICAgICAgICAgICAgIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCisjIEV4dHJhIERFUEVORFMgZm9yIFBBQ0tBR0VDT05GSUcKK0VERVBFTkRTX0dMID0gInZpcnR1YWwvbGliZ2wgbGliZHJtIgorRURFUEVORFNfR0xFUzIgPSAidmlydHVhbC9saWJnbGVzMiIKK0VERVBFTkRTX0tNUyA9ICJsaWJkcm0gdmlydHVhbC9lZ2wiCitFREVQRU5EU19FR0wgPSAidmlydHVhbC9lZ2wiCitFREVQRU5EU19YMTEgPSAidmlydHVhbC9saWJ4MTEgbGlieGNvbXBvc2l0ZSBsaWJ4Zml4ZXMgbGlieGkgbGlieHJhbmRyIgorRURFUEVORFNfV0FZTEFORCA9ICJ2aXJ0dWFsL21lc2Egd2F5bGFuZCIKKworIyBFeHRyYSBSREVQRU5EUyBmb3IgUEFDS0FHRUNPTkZJRworIyBUaGlzIGhhcyB0byBiZSBleHBsaWN0bHkgbGlzdGVkLCBiZWNhdXNlIGNvZ2wgZGxvcGVucyB0aGUgYmFja2VuZHMKK0VSREVQRU5EU19HTCAgICA9ICJsaWJnbCIKK0VSREVQRU5EU19HTEVTMiA9ICJsaWJnbGVzMiIKKworIyBHTEVTdjEgaXMgcmFyZWx5IHRlc3RlZCwgc28gZGlzYWJsZSBpdAorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbglcCisJICAgICAgIAkgLS1lbmFibGUtZXhhbXBsZXMtaW5zdGFsbAlcCisJICAgICAgIAkgLS1lbmFibGUtZGVidWcJCSAJXAorCSAgICAgICAJIC0tZGlzYWJsZS1nbGVzMQkJXAorCSAgICAgICAgIC0tZGlzYWJsZS1jYWlybyAgICAgICAgICAgICAgICBcCisJICAgIAkiCisKKyMgT3BlbkdML0dMWAorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLWdsIC0tZW5hYmxlLWdseCwtLWRpc2FibGUtZ2wgLS1kaXNhYmxlLWdseCwke0VERVBFTkRTX0dMfSAke0VERVBFTkRTX1gxMX0sJHtFUkRFUEVORFNfR0x9IgorCisjIEdMRVN2MgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLCR7RURFUEVORFNfR0xFUzJ9LCAke0VSREVQRU5EU19HTEVTMn0iCisKKyMgRUdMIGJhY2tlbmRzCitQQUNLQUdFQ09ORklHW2VnbC1rbXNdID0gIi0tZW5hYmxlLWttcy1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLWttcy1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19LTVN9IgorUEFDS0FHRUNPTkZJR1tlZ2wtbnVsbF0gPSAiLS1lbmFibGUtbnVsbC1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLW51bGwtZWdsLXBsYXRmb3JtIgorUEFDS0FHRUNPTkZJR1tlZ2wteDExXSA9ICItLWVuYWJsZS14bGliLWVnbC1wbGF0Zm9ybSwtLWRpc2FibGUteGxpYi1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19YMTF9ICR7RURFUEVORFNfRUdMfSIKK1BBQ0tBR0VDT05GSUdbZWdsLXdheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS13YXlsYW5kLWVnbC1wbGF0Zm9ybSwke0VERVBFTkRTX1dBWUxBTkR9IgorCisjIFdheWxhbmQgKHNlcnZlci1zaWRlKQorUEFDS0FHRUNPTkZJR1t3YXlsYW5kLXNlcnZlcl0gPSAiLS1lbmFibGUtd2F5bGFuZC1lZ2wtc2VydmVyLC0tZGlzYWJsZS13YXlsYW5kLWVnbC1zZXJ2ZXIsJHtFREVQRU5EU19XQVlMQU5EfSIKKworIyBTdXBwb3J0IHJlbmRlcmluZyB0ZXh0IGRpcmVjdGx5IHdpdGggUGFuZ28KK1BBQ0tBR0VDT05GSUdbY29nbC1wYW5nb10gPSAiLS1lbmFibGUtY29nbC1wYW5nbywtLWRpc2FibGUtY29nbC1wYW5nbyxwYW5nbyIKKworIyBSZXNwZWN0IHRoZSBESVNUUk9fRkVBVFVSRVMgdG8gcHVsbCBpbiBHTFggb3IgV2F5bGFuZCBhcyBhcHByb3ByaWF0ZSBieQorIyBkZWZhdWx0LgorUEFDS0FHRUNPTkZJRyA/Pz0gImNvZ2wtcGFuZ28gZ2xlczIgXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICdlZ2wtd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dseCBlZ2wteDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgIgorCisKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7YmluZGlyfS8qICR7ZGF0YWRpcn0vY29nbC9leGFtcGxlcy1kYXRhLyoiCitGSUxFU19saWJjb2dsID0gIiR7bGliZGlyfS9saWJjb2dsJHtTT0xJQlN9IgorRklMRVNfbGliY29nbC1nbGVzMiA9ICIke2xpYmRpcn0vbGliY29nbC1nbGVzMiR7U09MSUJTfSIKK0ZJTEVTX2xpYmNvZ2wtcGFuZ28gPSAiJHtsaWJkaXJ9L2xpYmNvZ2wtcGFuZ28ke1NPTElCU30iCisKK0ZJTEVTX2xpYmNvZ2wtcGF0aCA9ICIke2xpYmRpcn0vbGliY29nbC1wYXRoJHtTT0xJQlN9IgorCisjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhZnRlciBEZWJpYW4tcmVuYW1pbmcKK1JQUk9WSURFU19saWJjb2dsID0gImNvZ2wtMS4wIgorUkNPTkZMSUNUU19saWJjb2dsID0gImNvZ2wtMS4wIgorUlJFUExBQ0VTX2xpYmNvZ2wgPSAiY29nbC0xLjAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAvY29nbC1mcmFtZWJ1ZmZlci1nbC1Xb3JrLWFnYWluLW9uLUdMRVN2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgzOTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAvY29nbC1mcmFtZWJ1ZmZlci1nbC1Xb3JrLWFnYWluLW9uLUdMRVN2Mi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKKworRnJvbSBmOGNjZTVmNmNiMjk1OGE0MDc0Zjg3Y2QzNDViZmU0NmUwZGRhNmUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc3BlciBTdC4gUGllcnJlIiA8anN0cGllcnJlQG1lY2hleWUubmV0PgorRGF0ZTogTW9uLCAyMCBBcHIgMjAxNSAxMjowODoyOSAtMDcwMAorU3ViamVjdDogY29nbC1mcmFtZWJ1ZmZlci1nbDogV29yayBhZ2FpbiBvbiBHTEVTdjIKKworCitkaWZmIC0tZ2l0IGEvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jIGIvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCitpbmRleCA3OTNiMTBiLi42MDljZmIzIDEwMDY0NAorLS0tIGEvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCisrKysgYi9jb2dsL2RyaXZlci9nbC9jb2dsLWZyYW1lYnVmZmVyLWdsLmMKK0BAIC0xMDcsNiArMTA3LDEyIEBACisgI2lmbmRlZiBHTF9QQUNLX0lOVkVSVF9NRVNBCisgI2RlZmluZSBHTF9QQUNLX0lOVkVSVF9NRVNBIDB4ODc1OAorICNlbmRpZgorKyNpZm5kZWYgR0xfQkFDS19MRUZUCisrI2RlZmluZSBHTF9CQUNLX0xFRlQJCQkJMHgwNDAyCisrI2VuZGlmCisrI2lmbmRlZiBHTF9CQUNLX1JJR0hUCisrI2RlZmluZSBHTF9CQUNLX1JJR0hUCQkJCTB4MDQwMworKyNlbmRpZgorIAorICNpZm5kZWYgR0xfQ09MT1IKKyAjZGVmaW5lIEdMX0NPTE9SIDB4MTgwMAorQEAgLTI0NSw2ICsyNTEsOSBAQCBfY29nbF9mcmFtZWJ1ZmZlcl9nbF9mbHVzaF9zdGVyZW9fbW9kZV9zdGF0ZSAoQ29nbEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKKyAgIGlmIChmcmFtZWJ1ZmZlci0+dHlwZSA9PSBDT0dMX0ZSQU1FQlVGRkVSX1RZUEVfT0ZGU0NSRUVOKQorICAgICByZXR1cm47CisgCisrICBpZiAoIWN0eC0+Z2xEcmF3QnVmZmVyKQorKyAgICByZXR1cm47CisrCisgICAvKiBUaGUgb25lLXNob3QgZGVmYXVsdCBkcmF3IGJ1ZmZlciBzZXR0aW5nIGluIF9jb2dsX2ZyYW1lYnVmZmVyX2dsX2JpbmQKKyAgICAqIG11c3QgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLiBJZiBub3QgaXQgd291bGQgb3ZlcnJpZGUgd2hhdCB3ZSBzZXQgaGVyZS4gKi8KKyAgIGdfYXNzZXJ0IChjdHgtPndhc19ib3VuZF90b19vbnNjcmVlbik7CistLSAKK2NnaXQgdjAuMTAuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwYjgxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgY29nbC0xLjAuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xYjFhNTA4ZDkxZDI1Y2E2MDdjODNmOTJmM2UzMWM4NCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjViMjg4OTcxOTRkOWZmNzZhNTc0YTk0OTNkMWY3ZWUwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNzI5ZTM1NDk1ODI5ZTdkMzFmYWZhMzM1OGU0N2I3NDNiYTIxYTJiMDhmZjliNmNkMjhmYjc0YzBkZTkxMTkyYiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxN2VhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA4ODA3N2VkMTU2YTcxNGYzMmJiNDA4ZjQyMjI3OGQ2MTYxMWZmZDQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IFNhdCwgMjYgSnVsIDIwMTQgMTY6NTc6NDYgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmluOiBGaXggc3RyaW5nIGFyZ3VtZW50IHN5bnRheAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorLS0tCisgY29uZmlndXJlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBiZmUxYjgyLi5lOTM5YmJkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC02NSw3ICs2NSw3IEBAIGZpKQorIAorIERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT049MS40LjE0CisgCistUEtHX0NIRUNLX01PRFVMRVMoRElSRUNURkIsIGRpcmVjdGZiID49ICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OLFsgV0FURVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F0ZXIgZGlyZWN0ZmJgIF0sCisrUEtHX0NIRUNLX01PRFVMRVMoW0RJUkVDVEZCXSwgZGlyZWN0ZmIgPj0gJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04sWyBXQVRFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT13YXRlciBkaXJlY3RmYmAgXSwKKyAJQUNfTVNHX0VSUk9SKFskRElSRUNURkJfUEtHX0VSUk9SUworICoqKiBEaXJlY3RGQiAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTiBvciBuZXdlciBpcyByZXF1aXJlZC4gVGhlIGxhdGVzdCB2ZXJzaW9uCisgKioqIG9mIERpcmVjdEZCIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnLy5dKSkKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljM2U4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJFeGFtcGxlIERpcmVjdEZCIGFwcGxpY2F0aW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoZSBEaXJlY3RGQi1leGFtcGxlcyBwYWNrYWdlIGNvbnRhaW5zIGEgc2V0IG9mIHNpbXBsZSBEaXJlY3RGQiBcCisgICAgICBhcHBsaWNhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGFuZCBkZW1vbnN0cmF0ZSB2YXJpb3VzIERpcmVjdEZCIFwKKyAgICAgIGZlYXR1cmVzIgorREVQRU5EUyA9ICJkaXJlY3RmYiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorCitTUkNfVVJJID0gIiBcCisgICAgICAgICAgIGh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnL2Rvd25sb2Fkcy9FeHRyYXMvRGlyZWN0RkItZXhhbXBsZXMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaCBcCisgICAgICAgICAgIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lY2Y2ZmQyYjE5OTE1YWZjNGRhNTYwNDM5MjZjYTE4ZiIKKworUyA9ICIke1dPUktESVJ9L0RpcmVjdEZCLWV4YW1wbGVzLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworU1JDX1VSSVttZDVzdW1dID0gIjhiNjBjODY3YWYyOTU0ODFjMzJhOGM3ZmM1ODAyMzA3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhMjEwNGNjNGRhODEyM2M4MzcxODEzNTUxYjY2Yjk0MzE5ODk3OWY3NDVjYmViYzAzNGJiNWUxMDg0NDEyMmEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZhYWVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLmluYwpAQCAtMCwwICsxLDgwIEBACitTVU1NQVJZID0gIkdyYXBoaWNzIGFic3RyYWN0aW9uIGxpYnJhcnkgZm9yIHRoZSBMaW51eCBGcmFtZWJ1ZmZlciBEZXZpY2UiCitERVNDUklQVElPTiA9ICJEaXJlY3RGQiBpcyBhIHRoaW4gbGlicmFyeSB0aGF0IHByb3ZpZGVzIGRldmVsb3BlcnMgXAord2l0aCBoYXJkd2FyZSBncmFwaGljcyBhY2NlbGVyYXRpb24sIGlucHV0IGRldmljZSBoYW5kbGluZyBhbmQgXAorYWJzdHJhY3Rpb24sIGFuIGludGVncmF0ZWQgd2luZG93aW5nIHN5c3RlbSB3aXRoIHN1cHBvcnQgZm9yIFwKK3RyYW5zbHVjZW50IHdpbmRvd3MgYW5kIG11bHRpcGxlIGRpc3BsYXkgbGF5ZXJzIG9uIHRvcCBvZiB0aGUgXAorTGludXggZnJhbWVidWZmZXIgZGV2aWNlLiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kY2YzYzgyNTY1OWU4MjUzOTY0NWRhNDFhNzkwODU4OSIKKworSE9NRVBBR0UgPSAiaHR0cDovL2RpcmVjdGZiLm9yZyIKK0RFUEVORFMgPSAianBlZyBsaWJwbmcgZnJlZXR5cGUgemxpYiB0c2xpYiBzeXNmc3V0aWxzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnL2Rvd25sb2Fkcy9Db3JlL0RpcmVjdEZCLTEuNy9EaXJlY3RGQi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Z1c2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9iYXNoaXNtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9EaXJlY3RGQi0ke1BWfSIKKworTERGTEFHU19hcHBlbmQgPSIgLWx0cyAtbG0iCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZGlyZWN0ZmItY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2pwZWcyMDAwXSA9ICItLWVuYWJsZS1qcGVnMjAwMCwtLWRpc2FibGUtanBlZzIwMDAsamFzcGVyIgorUEFDS0FHRUNPTkZJR1tkcm1rbXNdID0gIi0tZW5hYmxlLWRybWttcywtLWRpc2FibGUtZHJta21zLGxpYmRybSIKK1BBQ0tBR0VDT05GSUdbdGlmZl0gPSAiLS1lbmFibGUtdGlmZiwtLWRpc2FibGUtdGlmZix0aWZmIgorUEFDS0FHRUNPTkZJR1t3ZWJwXSA9ICItLWVuYWJsZS13ZWJwLC0tZGlzYWJsZS13ZWJwLGxpYndlYnAiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgIC0td2l0aC1nZnhkcml2ZXJzPW5vbmUgXAorICAtLWVuYWJsZS1mcmVldHlwZT15ZXMgXAorICAtLWVuYWJsZS16bGliIFwKKyAgLS1kaXNhYmxlLWltbGliMiBcCisgIC0tZGlzYWJsZS1tZXNhIFwKKyAgLS1kaXNhYmxlLXNkbCBcCisgIC0tZGlzYWJsZS12bmMgXAorICAtLWRpc2FibGUteDExIFwKKyIKKworI09uY2UgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgb3B0aW9uIG9mIGdjYyBpcyBhZGRlZCBpbnRvIFRBUkdFVF9DTEZBR1MgYXMgZGVmYXVsdAorI3RoaXMgd2lsbCBjYXVzZSBkaXJlY3RmYiBidWlsZCBmYWlsdXJlIG9uIHg4NiBhcmNoLCBzbyBmaWx0ZXIgb3V0IGl0LgorVEFSR0VUX0NGTEFHU19yZW1vdmVfeDg2ID0gIi1mbm8tb21pdC1mcmFtZS1wb2ludGVyIgorCisjUEFDS0FHRVNfRFlOQU1JQyArPSAiXmRpcmVjdGZiLWlucHV0ZHJpdmVycy0uKiIKKyMKKyNweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisjICAgIGlucHV0ZHJpdmVyc19saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2lucHV0ZHJpdmVycycpCisjICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGlucHV0ZHJpdmVyc19saWJkaXIsICcqLnNvJCcsICdkaXJlY3RmYi1pbnB1dGRyaXZlcnMtJXMnLCAnRGlyZWN0ZmIgcGx1Z2luIGZvciAlcycpCisjfQorCisjIE5PVEU6IG1vbm9saXRoaWMgcGFja2FnaW5nIGZvciBub3csIHNob3VsZCBpbXByb3ZlIHRoYXQgZXZlbnR1YWxseQorCisKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS8qLyovLmRlYnVnLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vKi8uZGVidWcvKi5zbyBcCisiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAke2JpbmRpcn0vZGlyZWN0ZmItY29uZmlnIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3N5c3RlbXMvKi5sYSBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMvKi5sYSBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnRlcmZhY2VzLyovKi5sYSBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS93bS8qLmxhIFwKKyIKKworRklMRVNfJHtQTn0gKz0gIlwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3N5c3RlbXMvKi5zbyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMvKi5zbyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnRlcmZhY2VzLyovKi5zbyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS93bS8qLnNvIFwKKyAgJHtkYXRhZGlyfS9kaXJlY3RmYi0ke1BWfSBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlMGY3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaApAQCAtMCwwICsxLDYxIEBACitGcm9tIGY0M2VmNDQ4MDZmZmI4ZTNiMzVkOTkwNzBkZGU5YjZjYzE3MTRkM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCA4IFNlcCAyMDE1IDIxOjMyOjIwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdmeCxkaXJlY3Q6IEFib2lkIHVzbmcgVkxBcyBhbmQgcHJpbnRmIGZvcm1hdHMKKworVkxBcyBhcmUgZmxhZ2dlZCBieSBjbGFuZyB3aGVuIHVzaW5nIG5vbi1QT0QgdHlwZXMsIHRoZXJlZm9yZSByZXBsYWNlCit0aGUgdXNhZ2Ugd2l0aCBhbGxvY2Egd2hpY2ggaXMgZXhhY3Qgc2FtZSBhbGxvY2F0aW9uIG9uIHN0YWNrCisKKyBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fKSkpIGlzIG5vdCBwb3J0YWJsZSBhcyB1c2VkIGhlcmUKKyB0aGVyZWZvcmUgZGlzYWJsZSB0aGUgY2hlY2sgZm9yIGNsYW5nIGhlcmUsIHdlIGxvc2Ugbm8gZnVuY3Rpb25hbGl0eQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxpYi9kaXJlY3QvdXRpbC5oIHwgMiArLQorIHNyYy9nZngvdXRpbC5jcHAgIHwgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2RpcmVjdC91dGlsLmggYi9saWIvZGlyZWN0L3V0aWwuaAoraW5kZXggNzI5NDFlOS4uOGU3ZmE0YSAxMDA2NDQKKy0tLSBhL2xpYi9kaXJlY3QvdXRpbC5oCisrKysgYi9saWIvZGlyZWN0L3V0aWwuaAorQEAgLTk4LDcgKzk4LDcgQEAKKyAjZGVmaW5lIERfQ09OU1RfRlVOQworICNlbmRpZgorIAorLSNpZiBfX0dOVUNfXyA+PSAzCisrI2lmIF9fR05VQ19fID49IDMgJiYgIWRlZmluZWQgX19jbGFuZ19fCisgI2RlZmluZSBEX0ZPUk1BVF9QUklOVEYobikgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBuLCBuKzEpKSkKKyAjZGVmaW5lIERfRk9STUFUX1ZQUklOVEYobikgICAgICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIG4sIDApKSkKKyAjZWxzZQorZGlmZiAtLWdpdCBhL3NyYy9nZngvdXRpbC5jcHAgYi9zcmMvZ2Z4L3V0aWwuY3BwCitpbmRleCA0MDAzMmJjLi5kMTAxNWQ0IDEwMDY0NAorLS0tIGEvc3JjL2dmeC91dGlsLmNwcAorKysrIGIvc3JjL2dmeC91dGlsLmNwcAorQEAgLTI5NCw4ICsyOTQsOCBAQCBkZmJfZ2Z4X2NvcHlfcmVnaW9uc19zdGVyZW8oIENvcmVTdXJmYWNlICAgICAgICAgICAqc291cmNlLAorIHsKKyAgICAgIHVuc2lnbmVkIGludCBpLCBuID0gMDsKKyAgICAgIERGQlJlY3RhbmdsZSByZWN0ID0geyAwLCAwLCBzb3VyY2UtPmNvbmZpZy5zaXplLncsIHNvdXJjZS0+Y29uZmlnLnNpemUuaCB9OworLSAgICAgREZCUmVjdGFuZ2xlIHJlY3RzW251bV07CistICAgICBERkJQb2ludCAgICAgcG9pbnRzW251bV07CisrICAgICBERkJSZWN0YW5nbGUgKnJlY3RzID0gIChERkJSZWN0YW5nbGUqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJSZWN0YW5nbGUpICogbnVtKTsKKysgICAgIERGQlBvaW50ICpwb2ludHMgPSAgKERGQlBvaW50KilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUG9pbnQpICogbnVtKTsKKyAKKyAgICAgIGZvciAoaT0wOyBpPG51bTsgaSsrKSB7CisgICAgICAgICAgIERGQl9SRUdJT05fQVNTRVJUKCAmcmVnaW9uc1tpXSApOworQEAgLTM1MSw4ICszNTEsOCBAQCBkZmJfZ2Z4X2NvcHlfcmVnaW9uc19jbGllbnQoIENvcmVTdXJmYWNlICAgICAgICAgICAgICpzb3VyY2UsCisgeworICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgIGksIG4gPSAwOworICAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgIHJlY3QgPSB7IDAsIDAsIHNvdXJjZS0+Y29uZmlnLnNpemUudywgc291cmNlLT5jb25maWcuc2l6ZS5oIH07CistICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAgcmVjdHNbbnVtXTsKKy0gICAgIERGQlBvaW50ICAgICAgICAgICAgICAgICBwb2ludHNbbnVtXTsKKysgICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICpyZWN0cyA9ICAoREZCUmVjdGFuZ2xlKilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUmVjdGFuZ2xlKSAqIG51bSk7CisrICAgICBERkJQb2ludCAgICAgICAgICAgICAgICAqcG9pbnRzID0gIChERkJQb2ludCopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlBvaW50KSAqIG51bSk7CisgICAgICBDb3JlR3JhcGhpY3NTdGF0ZUNsaWVudCAqY2xpZW50ID0gX2NsaWVudCA/IF9jbGllbnQgOiAmU3RhdGVDbGllbnQ6OkdldCgpLT5jbGllbnQ7CisgICAgICBDYXJkU3RhdGUgICAgICAgICAgICAgICAqc3RhdGUgID0gY2xpZW50LT5zdGF0ZTsKKyAgICAgIENhcmRTdGF0ZSAgICAgICAgICAgICAgICBiYWNrdXA7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9iYXNoaXNtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmNGU5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9iYXNoaXNtLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyR7eC8veS99IGlzIGEgYmFzaCBzeW50YXguIFJlcGxhY2Ugd2l0aCBzb21ldGhpbmcgZGFzaCBjb21wYXRpYmxlCisKK1JQIDIwMTUvNS8zCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IERpcmVjdEZCLTEuNy43L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIERpcmVjdEZCLTEuNy43Lm9yaWcvY29uZmlndXJlLmluCisrKysgRGlyZWN0RkItMS43LjcvY29uZmlndXJlLmluCitAQCAtMjY5Niw3ICsyNjk2LDcgQEAgQU1fQ09ORElUSU9OQUwoQlVJTERfVE9PTFMsIHRlc3QgIiR3aXRoXworIEFNX0NPTkRJVElPTkFMKENST1NTX0NPTVBJTElORywgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSAieWVzIikKKyAKKyBDRkxBR1M9IiRDRkxBR1MgJERGQl9JTlRFUk5BTF9DRkxBR1MiCistQ1hYRkxBR1M9IiRDWFhGTEFHUyAke0NGTEFHUy8vLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbi99IgorK0NYWEZMQUdTPSIkQ1hYRkxBR1MgJChwcmludGYgJyVzXG4nICIkQ0ZMQUdTIiB8IHNlZCAncy8tV2Vycm9yLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uLy9nJykiCisgREZCX0xERkxBR1M9IiRMREZMQUdTICRaTElCX0xJQlMiCisgCisgQ0ZMQUdTPSIkQ0ZMQUdTICRDRkxBR1NfU1REIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4YzAxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorTGlidG9vbCBuZWVkcyB0aGVzZSBzZXQgY29ycmVjdGx5IGVsc2Ugd2UgZW5kIHVwIHdpdGggcG9pbnRsZXNzIHJwYXRocworc3VjaCBhcyB0aGUgUUEgd2FybmluZ3M6CisKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmxheWVyIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYm1hc3RlciBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9ta2RnaWZmdCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJkdW1wIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmlucHV0IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmZ4IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYnNjcmVlbiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9ta2RnaWZmIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmluc3BlY3RvciBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL21rZGZpZmYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbmZvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZicGVubW91bnQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJnIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvbGliZnVzaW9uLTEuNC5zby42IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvbGliZGlyZWN0ZmItMS40LnNvLjYuMC45IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvbGliZGlyZWN0ZmItMS40LnNvLjYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJmdXNpb24tMS40LnNvLjYuMC45IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvc3lzdGVtcy9saWJkaXJlY3RmYl9mYmRldi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZGV2bWVtLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvc3lzdGVtcy9saWJkaXJlY3RmYl9kdW1teS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCVmlkZW9Qcm92aWRlci9saWJpZGlyZWN0ZmJ2aWRlb3Byb3ZpZGVyX3Y0bC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCVmlkZW9Qcm92aWRlci9saWJpZGlyZWN0ZmJ2aWRlb3Byb3ZpZGVyX2dpZi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSUNvcmVSZXNvdXJjZU1hbmFnZXIvbGliaWNvcmVyZXNvdXJjZW1hbmFnZXJfdGVzdC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX2pwZWcuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9wbmcuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9kZmlmZi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX2dpZi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCRm9udC9saWJpZGlyZWN0ZmJmb250X2Z0Mi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCRm9udC9saWJpZGlyZWN0ZmJmb250X2RnaWZmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvd20vbGliZGlyZWN0ZmJ3bV9kZWZhdWx0LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3p5dHJvbmljLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3Blbm1vdW50LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX2xpbnV4X2lucHV0LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3NlcmlhbG1vdXNlLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX211dG91Y2guc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfdHNsaWIuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfam95c3RpY2suc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfc29ueXBpLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX2xpcmMuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfd205N3h4X3RzLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3BzMm1vdXNlLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX2tleWJvYXJkLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMi8wMy8xNgorCitJbmRleDogRGlyZWN0RkItMS40LjE1L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIERpcmVjdEZCLTEuNC4xNS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTAzLTE2IDEzOjMyOjIzLjY5MjQwMjg3OSArMDAwMAorKysrIERpcmVjdEZCLTEuNC4xNS9jb25maWd1cmUuaW4JMjAxMi0wMy0xNiAxMzozMzoyMi4zMTI0MDA5NjAgKzAwMDAKK0BAIC05NywxMyArOTcsNiBAQAorIEFDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCisgQUNfQ0hFQ0tfRlVOQ1MoZm9yaykKKyAKKy0KKy0jIyBXb3JrIGFyb3VuZCBsaWJzdHVobCBkdXJpbmcgY3Jvc3MgYnVpbGQuLi4KKy1pZiB0ZXN0ICIkaG9zdCIgIT0gIiRidWlsZCI7IHRoZW4KKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIiCistICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiIKKy1maQorLQorIEFDX1BBVEhfUFJPR1MoUEVSTCwgcGVybDUgcGVybCkKKyAKKyBBQ19QQVRIX1BST0coTUFOMkhUTUwsIG1hbjJodG1sLCBubykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvZnVzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmODFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvZnVzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2RpcmVjdGZiOiBGaXggZm9yIGhhbmdzIGluIGRpcmVjdF90ZXN0LCBmdXNpb25fc2tpcm1pc2ggb24gZXhpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IExhdXJlbiBQb3N0IDxsYXVyZW4ucG9zdEBmcmVlc2NhbGUuY29tPgorCistLS0gYS9saWIvZnVzaW9uL2Z1c2lvbi5jCTIwMTMtMDEtMTggMjI6NTc6MTEuMDAwMDAwMDAwICswODAwCisrKysgYi9saWIvZnVzaW9uL2Z1c2lvbi5jCTIwMTMtMDctMDQgMTA6NDI6NTYuNTAyNjk5MTE5ICswODAwCitAQCAtMjg1Myw5ICsyODUzLDE0IEBACisgICAgICAgICAgIGRpcmVjdF9tdXRleF9sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKyAKKyAgICAgICAgICAgd2hpbGUgKDEpIHsKKy0gICAgICAgICAgICAgICBpZiAoIXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnMpCisrICAgICAgICAgICAgICAgaWYgKCF3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzKXsKKyAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF93YWl0cXVldWVfd2FpdCggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2NvbmQsICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOworLQorKyAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmxkLT5kaXNwYXRjaF9zdG9wKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgIERfREVCVUdfQVQoIEZ1c2lvbl9NYWluX0Rpc3BhdGNoLCAiICAtPiBJR05PUklORyAoZGlzcGF0Y2hfc3RvcCEpXG4iICk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF9tdXRleF91bmxvY2soICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOworKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmID0gKEZ1c2lvbkV2ZW50RGlzcGF0Y2hlckJ1ZmZlciAqKXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnM7CisgICAgICAgICAgICAgICAgRF9NQUdJQ19BU1NFUlQoIGJ1ZiwgRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICk7CisgCitAQCAtMjg3Miw2ICsyODc3LDExIEBACisgLy9EX0lORk8oIndhaXRpbmcuLi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgRF9BU1NFUlQoIGJ1Zi0+cmVhZF9wb3MgPT0gYnVmLT53cml0ZV9wb3MgKTsKKyAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF93YWl0cXVldWVfd2FpdCggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2NvbmQsICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOworKwkJICAgICAgaWYgKHdvcmxkLT5kaXNwYXRjaF9zdG9wKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgIERfREVCVUdfQVQoIEZ1c2lvbl9NYWluX0Rpc3BhdGNoLCAiICAtPiBJR05PUklORyAoZGlzcGF0Y2hfc3RvcCEpXG4iICk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdF9tdXRleF91bmxvY2soICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOworKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgYnVmID0gKEZ1c2lvbkV2ZW50RGlzcGF0Y2hlckJ1ZmZlciAqKXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnM7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjMDcwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYl8xLjcuNy5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgZGlyZWN0ZmIuaW5jCisKK1JWID0gIjEuNy03IgorCitMRUFEX1NPTkFNRSA9ICJsaWJkaXJlY3RmYi0xLjcuc28uMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjE1MmNmMTg2M2IxYTNhMjhhYTEzNzBlOTA1MzQ0MGJmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3ODVjNjM4ZGMzMWI4ZmUzYTdjODFiZTE0NzVjODliMjI1NWFiM2Q2N2I3NzdjNzQ3ZDNmYmM1MmY4MDI3YTMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3NWRhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2luc3RhbGx0ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIzIEBACit0ZXN0czogYWxzbyBpbnN0YWxsIHRlc3RzIGFwcAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBiZjE5ODdmLi5kOTA5ZTE5IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMjcsMTAgKzI3LDExIEBAIEFNX0NQUEZMQUdTID0gXAorIAorIExEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYmRybS5sYQorIAorLWNoZWNrX1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyA9IFwKKyAJZHJpc3RhdCBcCisgCWRybXN0YXQKKyAKKytjaGVja19QUk9HUkFNUyA9CisgaWYgSEFWRV9OT1VWRUFVCisgU1VCRElSUyArPSBub3V2ZWF1CisgZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTYzMDVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjYyLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIGludGVyZmFjZSB0byB0aGUga2VybmVsIERSTSBzZXJ2aWNlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBydW50aW1lIGxpYnJhcnkgZm9yIGFjY2Vzc2luZyB0aGUga2VybmVsIERSTSBzZXJ2aWNlcy4gIERSTSBcCitzdGFuZHMgZm9yIFwiRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyXCIsIHdoaWNoIGlzIHRoZSBrZXJuZWwgcG9ydGlvbiBvZiB0aGUgXAorXCJEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlXCIgKERSSSkuICBEUkkgaXMgcmVxdWlyZWQgZm9yIG1hbnkgaGFyZHdhcmUgXAorYWNjZWxlcmF0ZWQgT3BlbkdMIGRyaXZlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Zjg2ZHJtLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMjttZDU9YzhhM2I5NjFhZjc2NjdjNTMwODE2NzYxZTk0OWRjNzEiCitQUk9WSURFUyA9ICJkcm0iCitERVBFTkRTID0gImxpYnB0aHJlYWQtc3R1YnMgdWRldiBsaWJwY2lhY2Nlc3MiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmcvbGliZHJtLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vaW5zdGFsbHRlc3RzLnBhdGNoICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjOTI5MWJhZTBlNWNhNjVkMTQ4MzgyMWQzNjk4ZDNhYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MDZjMjk0YmRiZTFjOTRjM2NhMDg0MzA1ZDYxYTZlNWE4MzY3ZjNiNDk4NmU2Y2MxM2IxZTliM2Y3NTkzMWRjIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtY2Fpcm8tdGVzdHMgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1vbWFwLWV4cGVyaW1lbnRhbC1hcGkgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLXRlc3QtcHJvZ3JhbXMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbWFucGFnZXMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmFsZ3JpbmQgXAorICAgICAgICAgICAgICAgICIKKworQUxMT1dfRU1QVFlfJHtQTn0tZHJpdmVycyA9ICIxIgorUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzICR7UE59LWRyaXZlcnMgJHtQTn0tcmFkZW9uICR7UE59LW5vdXZlYXUgJHtQTn0tb21hcCBcCisgICAgICAgICAgICAgJHtQTn0taW50ZWwgJHtQTn0tZXh5bm9zICR7UE59LWttcyAke1BOfS1mcmVlZHJlbm8iCisKK1JSRUNPTU1FTkRTXyR7UE59LWRyaXZlcnMgPSAiJHtQTn0tcmFkZW9uICR7UE59LW5vdXZlYXUgJHtQTn0tb21hcCAke1BOfS1pbnRlbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7UE59LWV4eW5vcyAke1BOfS1mcmVlZHJlbm8iCisKK0ZJTEVTXyR7UE59LXRlc3RzID0gIiR7YmluZGlyfS9kciogJHtiaW5kaXJ9L21vZGUqICR7YmluZGlyfS8qdGVzdCIKK0ZJTEVTXyR7UE59LXJhZGVvbiA9ICIke2xpYmRpcn0vbGliZHJtX3JhZGVvbi5zby4qIgorRklMRVNfJHtQTn0tbm91dmVhdSA9ICIke2xpYmRpcn0vbGliZHJtX25vdXZlYXUuc28uKiIKK0ZJTEVTXyR7UE59LW9tYXAgPSAiJHtsaWJkaXJ9L2xpYmRybV9vbWFwLnNvLioiCitGSUxFU18ke1BOfS1pbnRlbCA9ICIke2xpYmRpcn0vbGliZHJtX2ludGVsLnNvLioiCitGSUxFU18ke1BOfS1leHlub3MgPSAiJHtsaWJkaXJ9L2xpYmRybV9leHlub3Muc28uKiIKK0ZJTEVTXyR7UE59LWttcyA9ICIke2xpYmRpcn0vbGlia21zKi5zby4qIgorRklMRVNfJHtQTn0tZnJlZWRyZW5vID0gIiR7bGliZGlyfS9saWJkcm1fZnJlZWRyZW5vLnNvLioiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLWZiXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWQzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLWZiXzEuMC4wLmJiCkBAIC0wLDAgKzEsNiBAQAorRUdMSU5GT19QTEFURk9STSA/PSAiZmIiCitFR0xJTkZPX0JJTkFSWV9OQU1FID89ICJlZ2xpbmZvLWZiIgorCitpbmNsdWRlIGVnbGluZm8uaW5jCisKK1NVTU1BUlkgKz0gIihGcmFtZWJ1ZmZlciB2ZXJzaW9uKSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8teDExXzEuMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby14MTFfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyN2ZkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8teDExXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTIgQEAKK0VHTElORk9fUExBVEZPUk0gPz0gIngxMSIKK0VHTElORk9fQklOQVJZX05BTUUgPz0gImVnbGluZm8teDExIgorCitpbmNsdWRlIGVnbGluZm8uaW5jCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTVU1NQVJZICs9ICIoWDExIHZlcnNpb24pIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc2ODhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby5pbmMKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciBwcmludGluZyBpbmZvcm1hdGlvbiBFR0wgYW5kIGl0cyBjbGllbnQgQVBJcyAoT3BlbkdMLCBPcGVuR0wgRVMsIE9wZW5WRykiCitTRUNUSU9OID0gImdyYXBoaWNzIgorTElDRU5TRSA9ICJabGliIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2R2MS9lZ2xpbmZvIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OGQ0ZjMzYmMzYWRkOTc2ZjdkZmFlODVkYWI2NmYwM2MiCisKK0RFUEVORFMgPSAidmlydHVhbC9lZ2wiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9kdjEvZWdsaW5mby5naXQ7YnJhbmNoPW1hc3RlciIKK1NSQ1JFViA9ICI0YjMxNzY0OGVjNmNmMzk1NTZhOWU1ZDgwNzhmNjA1YmMwZWRkNWRlIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IHdhZgorCisjIEJTUCBsYXllcnMgc2hvdWxkIGFkZCAuYmJhcHBlbmQgZmlsZXMgZm9yIHRoZSAteDExIGFuZCAtZmIgLmJiIHJlY2lwZXMsIHdoaWNoCisjIGFwcGVuZCB0aGUgcmVzcGVjdGl2ZSBFR0wvT3BlbkdMRVMvT3BlblZHIGxpYnJhcmllcyB0byBERVBFTkRTIGFuZCBzZXQKKyMgRUdMX0RFVklDRSBhcyBhcHByb3ByaWF0ZS4KK0VHTElORk9fREVWSUNFID89ICJnZW5lcmljIgorCitFWFRSQV9PRUNPTkYgPSAiLS1wbGF0Zm9ybT0ke0VHTElORk9fUExBVEZPUk19IFwKKyAgICAgICAgICAgICAgICAtLWRldmljZT0ke0VHTElORk9fREVWSUNFfSBcCisgICAgICAgICAgICAgICAgLS1zeXNyb290ICR7U1RBR0lOR19ESVJfVEFSR0VUfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbXYgJHtEfS8ke2JpbmRpcn0vZWdsaW5mbyAke0R9LyR7YmluZGlyfS8ke0VHTElORk9fQklOQVJZX05BTUV9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZy9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ExZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZy9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitSZXZlcnQgcGFydCBvZiBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZm9udGNvbmZpZy9jb21taXQvZm9udGNvbmZpZy5wYy5pbj9pZD0zMzhmZmU2Yjg4NmFkNGJhODZmZjQ3MWNiNTljNGE1ZTVmZmJlNDA4CitXZSByZWFsbHkgZG9udCBkbyBzdGF0aWMgbGlua2luZyBzbyBpdHMgbm90IGdvaW5nIHRvIGNhdXNlIGlzc3VlcyBmb3IgdXMgYnV0IGFzIHN1Y2ggdGhpcyBpcyBoYXJtaW5nIHVzIGJ5IGFkZGluZyBhYnNvbHV0ZQorcGF0aHMgaW50byAtSSBvcHRpb25zIGludG8gZm9udGNvbmZpZy5wYyB3aGljaCBpcyB0aGVtIHByZXBlbmRlZCB3aXRoIHN5c3Jvb3Qgd2hlbiByZWFkIGJhY2sgYnkgY3Jvc3MgcGtnLWNvbmZpZyBhbmQKK3dlIGVuZCB1cCB3aXRoIC1JIDxzeXNyb290Pi88c3lzcm9vdD4vdXNyL2luY2x1ZGUvZm9udGNvbmZpZyBpbiBDRkxBR1Mgb2YgY2xpZW50cyB3aGljaCBkZXBlbmQgb24gaXQuIG9uZSBzdWNoIGV4YW1wbGUKK2lzIG1hdGNoYm94LXBhbmVsLTIgYW5kIGl0IHdhcyB3b3JraW5nIGZpbmUgd2l0aCBnY2MgPCA1IGJlY2F1c2UgaXQgdG9sZXJhdGVkIG5vbi1leGlzdGluZyBwYXRocyBpbiAtSSBmbGFncyBidXQgZ2NjLTUKK2dlbnRseSByZWZ1c2VzIGFuZCByaWdodGx5IHNvLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGZvbnRjb25maWctMi4xMS45My9mb250Y29uZmlnLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZm9udGNvbmZpZy0yLjExLjkzLm9yaWcvZm9udGNvbmZpZy5wYy5pbgorKysrIGZvbnRjb25maWctMi4xMS45My9mb250Y29uZmlnLnBjLmluCitAQCAtMTUsNCArMTUsNCBAQCBSZXF1aXJlczogQFBLR0NPTkZJR19SRVFVSVJFU0AKKyBSZXF1aXJlcy5wcml2YXRlOiBAUEtHQ09ORklHX1JFUVVJUkVTX1BSSVZBVEVMWUAKKyBMaWJzOiAtTCR7bGliZGlyfSAtbGZvbnRjb25maWcKKyBMaWJzLnByaXZhdGU6IEBFWFBBVF9MSUJTQCBARlJFRVRZUEVfTElCU0AgQElDT05WX0xJQlNAIEBMSUJYTUwyX0xJQlNACistQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQEVYUEFUX0NGTEFHU0AgQEZSRUVUWVBFX0NGTEFHU0AgQElDT05WX0NGTEFHU0AgQExJQlhNTDJfQ0ZMQUdTQAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZmYyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMS45NC5iYgpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIkdlbmVyaWMgZm9udCBjb25maWd1cmF0aW9uIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJGb250Y29uZmlnIGlzIGEgZm9udCBjb25maWd1cmF0aW9uIGFuZCBjdXN0b21pemF0aW9uIGxpYnJhcnksIHdoaWNoIFwKK2RvZXMgbm90IGRlcGVuZCBvbiB0aGUgWCBXaW5kb3cgU3lzdGVtLiBJdCBpcyBkZXNpZ25lZCB0byBsb2NhdGUgXAorZm9udHMgd2l0aGluIHRoZSBzeXN0ZW0gYW5kIHNlbGVjdCB0aGVtIGFjY29yZGluZyB0byByZXF1aXJlbWVudHMgXAorc3BlY2lmaWVkIGJ5IGFwcGxpY2F0aW9ucy4gXAorRm9udGNvbmZpZyBpcyBub3QgYSByYXN0ZXJpemF0aW9uIGxpYnJhcnksIG5vciBkb2VzIGl0IGltcG9zZSBhIFwKK3BhcnRpY3VsYXIgcmFzdGVyaXphdGlvbiBsaWJyYXJ5IG9uIHRoZSBhcHBsaWNhdGlvbi4gVGhlIFgtc3BlY2lmaWMgXAorbGlicmFyeSAnWGZ0JyB1c2VzIGZvbnRjb25maWcgYWxvbmcgd2l0aCBmcmVldHlwZSB0byBzcGVjaWZ5IGFuZCBcCityYXN0ZXJpemUgZm9udHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZvbnRjb25maWcub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1mb250Y29uZmlnIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSAmIE1JVCAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2EwNDQ5ZTliYzUzNzA0MDJhOTRjMDAyMDRiZWNhM2QgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZjZnJlZXR5cGUuYztlbmRsaW5lPTQ1O21kNT01ZDk1MTNlMzE5NmExZmJmZGZhOTQwNTFjMDlkZmM4NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmNjYWNoZS5jO2JlZ2lubGluZT0xMTk5O2VuZGxpbmU9MTIxNDttZDU9MDMyNmNmZWI0YTczMzNkZDRkZDI1ZmJiYzRiOWYyN2YiCisKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJleHBhdCBmcmVldHlwZSB6bGliIgorCitTUkNfVVJJID0gImh0dHA6Ly9mb250Y29uZmlnLm9yZy9yZWxlYXNlL2ZvbnRjb25maWctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjQ3OWJlODcwYzdmODNmMTVmODdiYWMwODViNjFkNjQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczZjZkMzIzYzdiY2ZiZGUyNWQ3ODM5NzY3NTE5MWQ1NWI4ZjQxMzkxMzJjNmE5NDQ0NDEwZjNhMmQ4YTlhOTUiCisKK1BBQ0tBR0VTID0rICJmb250Y29uZmlnLXV0aWxzIgorRklMRVNfJHtQTn0gPSsgIiR7ZGF0YWRpcn0veG1sLyoiCitGSUxFU19mb250Y29uZmlnLXV0aWxzID0gIiR7YmluZGlyfS8qIgorCisjIFdvcmsgYXJvdW5kIHBhc3QgYnJlYWthZ2UgaW4gZGViaWFuLmJiY2xhc3MKK1JQUk9WSURFU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCitSUkVQTEFDRVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorUkNPTkZMSUNUU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCitERUJJQU5fTk9BVVRPTkFNRV9mb250Y29uZmlnLXV0aWxzID0gIjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGT05UQ09ORklHX0NBQ0hFX0RJUiA/PSAiJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9mb250Y29uZmlnIgorCitFWFRSQV9PRUNPTkYgPSAiIC0tZGlzYWJsZS1kb2NzIC0td2l0aC1kZWZhdWx0LWZvbnRzPSR7ZGF0YWRpcn0vZm9udHMgLS13aXRoLWNhY2hlLWRpcj0ke0ZPTlRDT05GSUdfQ0FDSEVfRElSfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDU5OWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIkZyZWV0eXBlIGZvbnQgcmVuZGVyaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJGcmVlVHlwZSBpcyBhIHNvZnR3YXJlIGZvbnQgZW5naW5lIHRoYXQgaXMgZGVzaWduZWQgdG8gYmUgc21hbGwsIGVmZmljaWVudCwgXAoraGlnaGx5IGN1c3RvbWl6YWJsZSwgYW5kIHBvcnRhYmxlIHdoaWxlIGNhcGFibGUgb2YgcHJvZHVjaW5nIGhpZ2gtcXVhbGl0eSBvdXRwdXQgKGdseXBoIFwKK2ltYWdlcykuIEl0IGNhbiBiZSB1c2VkIGluIGdyYXBoaWNzIGxpYnJhcmllcywgZGlzcGxheSBzZXJ2ZXJzLCBmb250IGNvbnZlcnNpb24gdG9vbHMsIHRleHQgXAoraW1hZ2UgZ2VuZXJhdGlvbiB0b29scywgYW5kIG1hbnkgb3RoZXIgcHJvZHVjdHMgYXMgd2VsbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz9ncm91cD1mcmVldHlwZSIKKworTElDRU5TRSA9ICJGcmVlVHlwZSB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvTElDRU5TRS5UWFQ7bWQ1PWMwMTdmZjE3ZmM2ZjA3OTRhZGY5M2RiNTU1OWNjZDU2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvRlRMLlRYVDttZDU9ZDQ3OWU4Mzc5N2Y2OTlmZTg3M2IzOGRhZGQwZmNkNGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9HUEx2Mi5UWFQ7bWQ1PThlZjM4MDQ3NmY2NDJjMjBlYmY0MGZlY2IwYWRkMmVjIgorCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2ZyZWV0eXBlL2ZyZWV0eXBlLSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiNTY4Mjg5MGNiMDI2N2Y2NjcxZGQzZGU2ZWFiZDNlNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODQ2OWZiODEyNDc2NGY4NTAyOWNjODI0N2MzMWUxMzJhMmM1ZTUxMDg0ZGRjZTJhNDRlYTMyZWU0YWU4MzQ3ZSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9mcmVldHlwZS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIG11bHRpbGliX2hlYWRlcgorCitMSUJUT09MID0gIiR7U30vYnVpbGRzL3VuaXgvJHtIT1NUX1NZU30tbGlidG9vbCIKK0VYVFJBX09FTUFLRSA9ICInTElCVE9PTD0ke0xJQlRPT0x9JyIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC16bGliIC0td2l0aG91dC1iemlwMiBDQ19CVUlMRD0nJHtCVUlMRF9DQ30nIgorVEFSR0VUX0NQUEZMQUdTICs9ICItRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3BpeG1hcF0gPSAiLS13aXRoLXBuZywtLXdpdGhvdXQtcG5nLGxpYnBuZyIKKyMgVGhpcyByZXN1bHRzIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBzbyBlbmFibGluZyBpcyBub24tdHJpdmlhbAorUEFDS0FHRUNPTkZJR1toYXJmYnV6el0gPSAiLS13aXRoLWhhcmZidXp6LC0td2l0aG91dC1oYXJmYnV6eixoYXJmYnV6eiIKKworZG9fY29uZmlndXJlKCkgeworCWNkIGJ1aWxkcy91bml4CisJbGlidG9vbGl6ZSAtLWZvcmNlIC0tY29weQorCWFjbG9jYWwgLUkgLgorCWdudS1jb25maWdpemUgLS1mb3JjZQorCWF1dG9jb25mCisJY2QgJHtTfQorCW9lX3J1bmNvbmYKK30KKworZG9fY29uZmlndXJlX2NsYXNzLW5hdGl2ZSgpIHsKKwkoY2QgYnVpbGRzL3VuaXggJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwkke0JVSUxEX0NDfSAtbyBvYmpzL2FwaW5hbWVzIHNyYy90b29scy9hcGluYW1lcy5jCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBmcmVldHlwZTIvY29uZmlnL2Z0Y29uZmlnLmgKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mc3Rlc3RzL2ZzdGVzdHNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZzdGVzdHMvZnN0ZXN0c19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjMzNmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mc3Rlc3RzL2ZzdGVzdHNfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiVmFyaW91cyBiZW5jaG1hcm5pbmcgdGVzdHMgZm9yIFgiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJabGliIgorREVQRU5EUyA9ICJwYW5nbyBsaWJ4ZXh0IGxpYnhmdCB2aXJ0dWFsL2xpYngxMSBndGsrIgorCitTUkNSRVYgPSAiZTU5MzlmZjYwOGI5NWNkZDRkMGFiMGUxOTM1NzgxYWI5YTI3NmFjMCIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3Rlc3QtcGFuZ28tZ2RrLmM7ZW5kbGluZT0yNDttZDU9MWVlNzRlYzg1MWVjZGE1N2ViN2FjNmNjMTgwZjc2NTUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQvdGVzdHMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvYXV0b3Rvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmZTA4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvYXV0b3Rvb2xzLnBhdGNoCkBAIC0wLDAgKzEsMTQ5IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdsZXcvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L01ha2VmaWxlLmFtCTIwMDktMTItMDIgMDA6MzA6MjMuMjk2NjQxNjYzICswMTAwCitAQCAtMCwwICsxLDUgQEAKKysKKytBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtLWluc3RhbGwKKysKKytTVUJESVJTID0gaW5jbHVkZSBzcmMKKysKK0luZGV4OiBnbGV3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvY29uZmlndXJlLmFjCTIwMDktMTItMDIgMDA6MzA6MjMuMjk2NjQxNjYzICswMTAwCitAQCAtMCwwICsxLDY3IEBACisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKysKKytBQ19QUkVSRVEoWzIuNjJdKQorK0FDX0lOSVQoW2dsZXddLCBbMS45LjBdLCBbQlVHLVJFUE9SVC1BRERSRVNTXSkKKytBQ19DT05GSUdfU1JDRElSKFtzcmMvZ2xldy5jXSkKKytBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorK0FNX0lOSVRfQVVUT01BS0UoWy1XYWxsIC1XZXJyb3IgZm9yZWlnbl0pCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorKworK0xUX0lOSVQKKysKKysjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisrQUNfUFJPR19DQworK0FDX1BST0dfSU5TVEFMTAorK0FDX1BST0dfTE5fUworKworKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCisrCisrIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KKytBQ19DSEVDS19IRUFERVJTKFtpbnR0eXBlcy5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGxpYi5oIHN0cmluZy5oXSkKKysKKysjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisrQUNfVFlQRV9JTlQzMl9UCisrQUNfVFlQRV9JTlQ2NF9UCisrQUNfVFlQRV9VSU5UNjRfVAorK0FDX0NIRUNLX1RZUEVTKFtwdHJkaWZmX3RdKQorKworKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KKytBQ19GVU5DX01BTExPQworK0FDX0NIRUNLX0ZVTkNTKFtzdHJ0b2xdKQorKworKyMgQ2hlY2sgZm9yIHBrZ2NvbmZpZyBsaWJzCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1gxMV0sIFt4MTFdKQorK0FDX1NVQlNUKFtYMTFfTElCU10pCisrQUNfU1VCU1QoW1gxMV9DRkxBR1NdKQorKworK1BLR19DSEVDS19NT0RVTEVTKFtYTVVdLCBbeG11XSkKKytBQ19TVUJTVChbWE1VX0xJQlNdKQorK0FDX1NVQlNUKFtYTVVfQ0ZMQUdTXSkKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbWEldLCBbeGldKQorK0FDX1NVQlNUKFtYSV9MSUJTXSkKKytBQ19TVUJTVChbWElfQ0ZMQUdTXSkKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbWEVYVF0sIFt4ZXh0XSkKKytBQ19TVUJTVChbWEVYVF9MSUJTXSkKKytBQ19TVUJTVChbWEVYVF9DRkxBR1NdKQorKworKyMgQ2hlY2sgZm9yIEdMVSBpcyBlbm91Z2ggYW5kIGltcGxlcyBnbCBzbyBubyBkb3VibGVkIC1sR0wgaW4gTERGTEFHUworK1BLR19DSEVDS19NT0RVTEVTKFtHTFVdLCBbZ2x1XSkKKytBQ19TVUJTVChbR0xVX0xJQlNdKQorK0FDX1NVQlNUKFtHTFVfQ0ZMQUdTXSkKKysKKysjIEVOQUJMRSBvcHRpb24gZm9yIE11bHRpcGxlIFJlbmRlcmluZyBDb250ZXh0cyBzdXBwb3J0CisrQUNfQ0hFQ0tfRU5BQkxFX0dMRVdNWAorKworKyMgZm9yIG5vdyB3ZSB1c2UgdGhlIHNhbWUgdmVyc2lvbiBhcyB0aGUgcGFja2FnZSwgYnV0IHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQKKysjIGluIHRoZSBmdXR1cmUKKysKKytBQ19TVUJTVChbTElCR0xFV19TT19WRVJTSU9OXSwgWzE6OTowXSkKKysKKytBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlCisrICAgICAgICAgICAgICAgICBpbmNsdWRlL01ha2VmaWxlCisrICAgICAgICAgICAgICAgICBzcmMvTWFrZWZpbGVdKQorK0FDX09VVFBVVAorSW5kZXg6IGdsZXcvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9zcmMvTWFrZWZpbGUuYW0JMjAwOS0xMi0wMiAwMDozMzo0OC42OTA3ODYxMTAgKzAxMDAKK0BAIC0wLDAgKzEsMzUgQEAKKysKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisrCisraWYgRU5BQkxFX0dMRVdNWAorK0FNX0NQUEZMQUdTICs9IC1ER0xFV19NWAorK2VuZGlmCisrCisrQU1fQ0ZMQUdTID0gQFgxMV9DRkxBR1NAIFwKKysgICAgICAgICAgICBAWE1VX0NGTEFHU0AgXAorKyAgICAgICAgICAgIEBYSV9DRkxBR1NAIFwKKysgICAgICAgICAgICBAWEVYVF9DRkxBR1NAIFwKKysgICAgICAgICAgICBAR0xVX0NGTEFHU0AKKysKKytsaWJfTFRMSUJSQVJJRVMgPSBsaWJHTEVXLmxhCisrCisrbGliR0xFV19sYV9TT1VSQ0VTID0gZ2xldy5jCisrCisrbGliR0xFV19sYV9MSUJBREQgPSBAWDExX0xJQlNAIFwKKysgICAgICAgICAgICAgICAgICAgIEBYTVVfTElCU0AgXAorKyAgICAgICAgICAgICAgICAgICAgQFhJX0xJQlNAIFwKKysgICAgICAgICAgICAgICAgICAgIEBYRVhUX0xJQlNAIFwKKysgICAgICAgICAgICAgICAgICAgIEBHTFVfTElCU0AKKysKKytsaWJHTEVXX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1udW1iZXIgQExJQkdMRVdfU09fVkVSU0lPTkAKKysKKytiaW5fUFJPR1JBTVMgPSBnbGV3aW5mbyB2aXN1YWxpbmZvCisrCisrZ2xld2luZm9fU09VUkNFUyA9IGdsZXdpbmZvLmMKKysKKytnbGV3aW5mb19MREFERCA9IGxpYkdMRVcubGEKKysKKyt2aXN1YWxpbmZvX1NPVVJDRVMgPSAgdmlzdWFsaW5mby5jCisrCisrdmlzdWFsaW5mb19MREFERCA9IGxpYkdMRVcubGEKKysKK0luZGV4OiBnbGV3L200L2dsZXdteC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvbTQvZ2xld214Lm00CTIwMDktMTItMDIgMDA6MzA6MjMuMjk2NjQxNjYzICswMTAwCitAQCAtMCwwICsxLDExIEBACisrCisrQUNfREVGVU4oW0FDX0NIRUNLX0VOQUJMRV9HTEVXTVhdLFsKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gaW5jbHVkZSBNdWx0aXBsZSBSZW5kZXJpbmcgQ29udGV4dHMgc3VwcG9ydF0pCisrQUNfQVJHX0VOQUJMRShbZ2xld214XSwKKysgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdsZXdteF0sIFtlbmFibGUgR0xFVyBNdWx0aXBsZSBSZW5kZXJpbmcgQ29udGV4dHMgKGRlZmF1bHQgaXMgbm8pXSldLAorKyAgIFtFTkFCTEVfR0xFV01YPSIkZW5hYmxldmFsIl0sCisrICAgW0VOQUJMRV9HTEVXTVg9Im5vIl0pCisrQUNfTVNHX1JFU1VMVChbJHtFTkFCTEVfR0xFV01YfV0pCisrQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9HTEVXTVhdLCBbdGVzdCB4IiR7RU5BQkxFX0dMRVdNWH0iID0gInh5ZXMiXSkKKytdKQorKworSW5kZXg6IGdsZXcvaW5jbHVkZS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvaW5jbHVkZS9NYWtlZmlsZS5hbQkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSwzIEBACisrCisrbm9iYXNlX2luY2x1ZGVfSEVBREVSUyA9IEdML2dsZXcuaCAgR0wvZ2x4ZXcuaCAgR0wvd2dsZXcuaAorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYTk5YWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorCitXZSBtYWludGFpbiB0aGUgYXV0b3Rvb2xzIGNvbmZpZ3VyZS5hYyBhbmQgTWFrZWZpbGUuYW0sIHRvIGNvcnJlY3RseQorcHJvdmlkZSB0aGUgZ2xldy5wYywgdGhlIGZvbGxvd2luZyBwYXRjaCBpcyBuZWVkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnbGV3LTEuMTEuMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsZXctMS4xMS4wLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnbGV3LTEuMTEuMC9NYWtlZmlsZS5hbQorQEAgLTMsMyArMyw1IEBAIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00IC0taW5zdGFsbAorIAorIFNVQkRJUlMgPSBpbmNsdWRlIHNyYworIAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGdsZXcucGMKK0luZGV4OiBnbGV3LTEuMTEuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuMTEuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdsZXctMS4xMS4wL2NvbmZpZ3VyZS5hYworQEAgLTY2LDUgKzY2LDYgQEAgQUNfU1VCU1QoW0xJQkdMRVdfU09fVkVSU0lPTl0sIFsxOjk6MF0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZQorICAgICAgICAgICAgICAgICAgaW5jbHVkZS9NYWtlZmlsZQorLSAgICAgICAgICAgICAgICAgc3JjL01ha2VmaWxlXSkKKysgICAgICAgICAgICAgICAgIHNyYy9NYWtlZmlsZQorKyAgICAgICAgICAgICAgICAgZ2xldy5wY10pCisgQUNfT1VUUFVUCitJbmRleDogZ2xldy0xLjExLjAvZ2xldy5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsZXctMS4xMS4wLm9yaWcvZ2xldy5wYy5pbgorKysrIGdsZXctMS4xMS4wL2dsZXcucGMuaW4KK0BAIC01LDcgKzUsNyBAQCBpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlL0dMCisgCisgTmFtZTogZ2xldworIERlc2NyaXB0aW9uOiBUaGUgT3BlbkdMIEV4dGVuc2lvbiBXcmFuZ2xlciBsaWJyYXJ5CistVmVyc2lvbjogQHZlcnNpb25ACistQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQGNmbGFnc0AKKy1MaWJzOiAtTCR7bGliZGlyfSAtbEBsaWJuYW1lQAorLVJlcXVpcmVzOiBAcmVxdWlyZXNsaWJACisrVmVyc2lvbjogQFZFUlNJT05ACisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQENGTEFHU0AKKytMaWJzOiAtTCR7bGliZGlyfSAtbEdMRVcKKytSZXF1aXJlczogZ2x1CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9nbGV3X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzA3ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9nbGV3X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgYXV0b21ha2U6IHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycworfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiB3YXJuaW5nOiAnbGliR0xFVy5sYSc6IGxpbmtpbmcgbGlidG9vbCBsaWJyYXJpZXMgdXNpbmcgYSBub24tUE9TSVgKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogYXJjaGl2ZXIgcmVxdWlyZXMgJ0FNX1BST0dfQVInIGluICdjb25maWd1cmUuYWMnCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBnbGV3LTEuNy4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsZXctMS43LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGV3LTEuNy4wL2NvbmZpZ3VyZS5hYworQEAgLTE0LDYgKzE0LDkgQEAgTFRfSU5JVAorIEFDX1BST0dfQ0MKKyBBQ19QUk9HX0lOU1RBTEwKKyBBQ19QUk9HX0xOX1MKKysjIGF1dG9tYWtlIDEuMTIgc2VlbXMgdG8gcmVxdWlyZSB0aGlzLCBidXQgYXV0b21ha2UgMS4xMSBkb2Vzbid0IHJlY29nbml6ZSBpdAorK200X3BhdHRlcm5fYWxsb3coW0FNX1BST0dfQVJdKQorK0FNX1BST0dfQVIKKyAKKyAjIENoZWNrcyBmb3IgbGlicmFyaWVzLgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEyLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzEuMTIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI4YzRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEyLjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJPcGVuR0wgZXh0ZW5zaW9uIGxvYWRpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBPcGVuR0wgRXh0ZW5zaW9uIFdyYW5nbGVyIExpYnJhcnkgKEdMRVcpIGlzIGEgY3Jvc3MtcGxhdGZvcm0gb3Blbi1zb3VyY2UgQy9DKysgZXh0ZW5zaW9uIGxvYWRpbmcgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2xldy5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTY3NTg2IgorU0VDVElPTiA9ICJ4MTEiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0yYWMyNTE1NThkZTY4NWM2Yjk0NzhkODliZTMxNDljMiIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSB2aXJ0dWFsL2xpYmdsIGxpYmdsdSBsaWJ4ZXh0IGxpYnhpIGxpYnhtdSIKKworCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2dsZXcvZ2xldy8ke1BWfS9nbGV3LSR7UFZ9LnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2xld19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWdsZXcucGMtaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDEyNDZjN2VjZDEzNWQ5OWJlMDMxYWE2M2Y4NmRjYTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWY1ODEwM2Y0ODI0YjQ0M2U3ZmE0ZWQzYWY1OTNiOGVkYWM2ZjNhN2JlM2IzMDkxMWVkYmM3MzQ0ZjQ4ZTRiZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGJkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS4wLjIuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJUZXh0IHNoYXBpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkhhcmZCdXp6IGlzIGFuIE9wZW5UeXBlIHRleHQgc2hhcGluZyBlbmdpbmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9IYXJmQnV6eiIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9SGFyZkJ1enoiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAyMWRkNmRkYTZmZjFlNmIxMDQ0MDAyZmM2NjJiOWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2hiLXVjZG4vQ09QWUlORzttZDU9OTk0YmEwZjEyOTVmMTViNGJkYTQ5OTlhNWJiZWRkZWYgXAorIgorCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvaGFyZmJ1enovcmVsZWFzZS8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gImU3NGY2NDQwNDVmZTQyYzM4YTI2NDFmYzFlODJhODAwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJlYjNjYWY4NjU0MDEwZmNkY2E2MWM4MTBhM2E3NTMyMjM3ZmM1NjdlZTQyNzFkZWI2NzRiNWVmYmJlM2I0NjYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQorCitERVBFTkRTID0gImdsaWItMi4wIGNhaXJvIGZyZWV0eXBlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1nbGliIC0td2l0aC1mcmVldHlwZSAtLXdpdGgtY2Fpcm8gLS13aXRob3V0LWdyYXBoaXRlMiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImljdSIKK1BBQ0tBR0VDT05GSUdbaWN1XSA9ICItLXdpdGgtaWN1LC0td2l0aG91dC1pY3UsaWN1IgorCitQQUNLQUdFUyA9KyAiJHtQTn0taWN1ICR7UE59LWljdS1kYmcgJHtQTn0taWN1LWRldiIKKworRklMRVNfJHtQTn0taWN1ID0gIiR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3Uuc28uKiIKK0ZJTEVTXyR7UE59LWljdS1kYmcgPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJoYXJmYnV6ei1pY3Uuc28qIgorRklMRVNfJHtQTn0taWN1LWRldiA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvaGFyZmJ1enotaWN1LnBjIFwKKyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1jbHV0dGVyLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWNsdXR0ZXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmMjVjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1jbHV0dGVyLmJiCkBAIC0wLDAgKzEsMTMgQEAKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIHdpdGggc3VwcG9ydCBmb3IgdGhlIE9wZW4gR0wtYmFzZWQgdG9vbGtpdCBDbHV0dGVyLCBcCit3aGljaCBlbmFibGVzIGRldmVsb3BtZW50IG9mIHJpY2ggYW5kIGFuaW1hdGVkIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHBhY2thZ2UtbWFuYWdlbWVudCB4MTEtYmFzZSB4MTEtc2F0byBzc2gtc2VydmVyLWRyb3BiZWFyIgorCitMSUNFTlNFID0gIk1JVCIKKworSU1BR0VfSU5TVEFMTCA9ICJcCisgICAgJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXItY29yZSBcCisgICAgIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQxMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQW4gaW1hZ2UgdGhhdCB1c2VzIERpcmVjdEZCIGluc3RlYWQgb2YgWDExIgorTElDRU5TRSA9ICJNSVQiCisKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gImRpcmVjdGZiIgorQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworSU1BR0VfSU5TVEFMTCArPSAiXAorCSR7Q09SRV9JTUFHRV9CQVNFX0lOU1RBTEx9IFwKKwlwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgXAorCXBhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiIFwKKyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTI3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiCkBAIC0wLDAgKzEsMTEgQEAKK1NVTU1BUlkgPSAiQSB2ZXJ5IGJhc2ljIFdheWxhbmQgaW1hZ2Ugd2l0aCBhIHRlcm1pbmFsIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHBhY2thZ2UtbWFuYWdlbWVudCBzc2gtc2VydmVyLWRyb3BiZWFyIGh3Y29kZWNzIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAid2F5bGFuZCIKKworQ09SRV9JTUFHRV9CQVNFX0lOU1RBTEwgKz0gIndlc3RvbiB3ZXN0b24taW5pdCB3ZXN0b24tZXhhbXBsZXMgZ3RrKzMtZGVtbyBjbHV0dGVyLTEuMC1leGFtcGxlcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UteDExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTViYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UteDExLmJiCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJBIHZlcnkgYmFzaWMgWDExIGltYWdlIHdpdGggYSB0ZXJtaW5hbCIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgeDExLWJhc2UiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMS1zZWxlY3QtcGxhdGZvcm1zLWJhc2VkLW9uLWNvbmZpZ3VyYXRpb24tcmVzdWx0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAxLXNlbGVjdC1wbGF0Zm9ybXMtYmFzZWQtb24tY29uZmlndXJhdGlvbi1yZXN1bHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGM4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMS1zZWxlY3QtcGxhdGZvcm1zLWJhc2VkLW9uLWNvbmZpZ3VyYXRpb24tcmVzdWx0cy5wYXRjaApAQCAtMCwwICsxLDEyOCBAQAorRnJvbSAzYTkzMTUwYmMwYWVjODZhZmRiN2QwNTMyNDdkYzI0NDg5MjVlMDlhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogV2VkLCA2IE1heSAyMDE1IDEwOjQ1OjIyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBzZWxlY3QgcGxhdGZvcm1zIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gcmVzdWx0cworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbMV0KKworWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmhvbHQvbGliZXBveHkvcHVsbC81MgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAxMyArKysrKy0tLS0tLS0tCisgc3JjL2Rpc3BhdGNoX2NvbW1vbi5jIHwgIDkgKysrKysrLS0tCisgc3JjL2Rpc3BhdGNoX2NvbW1vbi5oIHwgIDkgKysrKystLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTUyZmM1OC4uYmRkNzBkYSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTgsNiArNTgsMTAgQEAgQUNfQ0hFQ0tfSEVBREVSKFtLSFIva2hycGxhdGZvcm0uaF0sCisgIyB1aW50cHRyX3QgdG8gYSB2b2lkICoiKSBieSBkZWZhdWx0LiAgS2lsbCB0aGF0LgorIFhPUkdfVEVTVFNFVF9DRkxBRyhDV0FSTkZMQUdTLCBbLVduby1pbnQtY29udmVyc2lvbl0pCisgCisrUEtHX0NIRUNLX01PRFVMRVMoWDExLCBbeDExXSwgW3gxMT15ZXNdLCBbeDExPW5vXSkKKysKKytBTV9DT05ESVRJT05BTChIQVZFX1gxMSwgdGVzdCB4JHgxMSA9IHh5ZXMpCisrCisgaGFzX3pub3c9eWVzCisgCisgY2FzZSAkaG9zdF9vcyBpbgorQEAgLTg2LDcgKzkwLDcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgOzsKKyAgICAgKikKKyAgICAgICAgIGJ1aWxkX2VnbD15ZXMKKy0gICAgICAgIGJ1aWxkX2dseD15ZXMKKysgICAgICAgIGJ1aWxkX2dseD0keDExCisgICAgICAgICBidWlsZF93Z2w9bm8KKyAgICAgICAgICMgT24gcGxhdGZvcm1zIHdpdGggZGxvcGVuLCB3ZSBsb2FkIGV2ZXJ5dGhpbmcgZHluYW1pY2FsbHkgYW5kCisgICAgICAgICAjIGRvbid0IGxpbmsgYWdhaW5zdCBhIHNwZWNpZmljIHdpbmRvdyBzeXN0ZW0gb3IgR0wgaW1wbGVtZW50YXRpb24uCitAQCAtMTQ0LDEzICsxNDgsNiBAQCBlc2FjCisgCisgQUNfU1VCU1QoW1ZJU0lCSUxJVFlfQ0ZMQUdTXSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPXllc10sIFt4MTE9bm9dKQorLWlmIHRlc3QgeCR4MTEgPSB4bm8gLWEgeCRidWlsZF9nbHggPSB4eWVzOyB0aGVuCistICAgIEFDX01TR19FUlJPUihbbGliWDExIGhlYWRlcnMgKGxpYngxMS1kZXYpIHJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggR0xYIHN1cHBvcnRdKQorLWZpCistCistQU1fQ09ORElUSU9OQUwoSEFWRV9YMTEsIHRlc3QgeCR4MTEgPSB4eWVzKQorLQorIFBLR19DSEVDS19NT0RVTEVTKEdMLCBbZ2xdLCBbZ2w9eWVzXSwgW2dsPW5vXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoWworZGlmZiAtLWdpdCBhL3NyYy9kaXNwYXRjaF9jb21tb24uYyBiL3NyYy9kaXNwYXRjaF9jb21tb24uYworaW5kZXggNGUzNGQ2ZS4uMmFiODRlZCAxMDA2NDQKKy0tLSBhL3NyYy9kaXNwYXRjaF9jb21tb24uYworKysrIGIvc3JjL2Rpc3BhdGNoX2NvbW1vbi5jCitAQCAtNjE1LDEwICs2MTUsMTMgQEAgZXBveHlfZ2V0X3Byb2NfYWRkcmVzcyhjb25zdCBjaGFyICpuYW1lKQorICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorICAgICByZXR1cm4gZXBveHlfZ2xfZGxzeW0obmFtZSk7CisgI2Vsc2UKKysjaWYgUExBVEZPUk1fSEFTX0dMWAorICAgICBpZiAoZXBveHlfY3VycmVudF9jb250ZXh0X2lzX2dseCgpKSB7CisgICAgICAgICByZXR1cm4gZ2xYR2V0UHJvY0FkZHJlc3NBUkIoKGNvbnN0IEdMdWJ5dGUgKiluYW1lKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfSBlbHNlCisrI2VuZGlmIC8qIFBMQVRGT1JNX0hBU19HTFggKi8KKyAjaWYgUExBVEZPUk1fSEFTX0VHTAorKyAgICB7CisgICAgICAgICBHTGVudW0gZWdsX2FwaSA9IGVwb3h5X2VnbF9nZXRfY3VycmVudF9nbF9jb250ZXh0X2FwaSgpOworIAorICAgICAgICAgc3dpdGNoIChlZ2xfYXBpKSB7CitAQCAtNjI4LDEwICs2MzEsMTAgQEAgZXBveHlfZ2V0X3Byb2NfYWRkcmVzcyhjb25zdCBjaGFyICpuYW1lKQorICAgICAgICAgY2FzZSBFR0xfTk9ORToKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0jZW5kaWYKKyAgICAgfQorKyNlbmRpZiAvKiBQTEFURk9STV9IQVNfRUdMICovCisgICAgIGVycngoMSwgIkNvdWxkbid0IGZpbmQgY3VycmVudCBHTFggb3IgRUdMIGNvbnRleHQuXG4iKTsKKy0jZW5kaWYKKysjZW5kaWYgLyogX1dJTjMyIHwgX19BUFBMRV9fKi8KKyB9CisgCisgdm9pZAorZGlmZiAtLWdpdCBhL3NyYy9kaXNwYXRjaF9jb21tb24uaCBiL3NyYy9kaXNwYXRjaF9jb21tb24uaAoraW5kZXggNmI4NTAzYS4uODI2ODFlNCAxMDA2NDQKKy0tLSBhL3NyYy9kaXNwYXRjaF9jb21tb24uaAorKysrIGIvc3JjL2Rpc3BhdGNoX2NvbW1vbi5oCitAQCAtMjEsMTIgKzIxLDEzIEBACisgICogSU4gVEhFIFNPRlRXQVJFLgorICAqLworIAorKyNpbmNsdWRlIDxjb25maWcuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorIAorICNpZmRlZiBfV0lOMzIKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMAorICNkZWZpbmUgUExBVEZPUk1fSEFTX0dMWCAwCistI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIDEKKysjZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgQlVJTERfV0dMCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisgI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisgI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIDAKK0BAIC0zNCwxMyArMzUsMTMgQEAKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgMAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUCisgI2VsaWYgZGVmaW5lZChBTkRST0lEKQorLSNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAxCisrI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIEJVSUxEX0VHTAorICNkZWZpbmUgUExBVEZPUk1fSEFTX0dMWCAwCisgI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIDAKKyAjZGVmaW5lIEVQT1hZX0lNUE9SVEVYUE9SVAorICNlbHNlCistI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIDEKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggMQorKyNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCBCVUlMRF9FR0wKKysjZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggQlVJTERfR0xYCisgI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIDAKKyAjZGVmaW5lIEVQT1hZX0lNUE9SVEVYUE9SVAorICNlbmRpZgorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyZDY4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDI0ODY4Y2JmYjlkZGE1ZjY5MjlkZDI3N2M0N2QzNWRmMDE2ZTg3NTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcmVhcz0yME09QzM9QkNsbGVyPz0gPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CitEYXRlOiBXZWQsIDYgTWF5IDIwMTUgMTE6MDU6NDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGFkZCBhbiBvcHRpb24gdG8gZGlzYWJsZSBnbHggc3VwcG9ydAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCit0aGlzIG9wdGlvbiB3b3VsZCBoZWxwIHVzIGluIHlvY3RvIHRvIGdldCBkZXRlcm1pbmlzdGljIGJ1aWxkIHJlc3VsdHMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWzFdCisKK1sxXSBodHRwczovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5L3B1bGwvNTIKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJkZDcwZGEuLjZjNzE1M2QgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU4LDcgKzU4LDE0IEBAIEFDX0NIRUNLX0hFQURFUihbS0hSL2tocnBsYXRmb3JtLmhdLAorICMgdWludHB0cl90IHRvIGEgdm9pZCAqIikgYnkgZGVmYXVsdC4gIEtpbGwgdGhhdC4KKyBYT1JHX1RFU1RTRVRfQ0ZMQUcoQ1dBUk5GTEFHUywgWy1Xbm8taW50LWNvbnZlcnNpb25dKQorIAorLVBLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9eWVzXSwgW3gxMT1ub10pCisrQUNfQVJHX0VOQUJMRShbZ2x4XSwKKysgICAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZ2x4XSwKKysJCQkJW2Rpc2FibGUgaWYgeW91IGRvbid0IHdhbnQgeDExL2dseCBzdXBwb3J0XSldLAorKyAgICAgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICAgICAgW2VuYWJsZV9nbHg9eWVzXQorKyAgICAgICAgICAgICApCisrCisrUEtHX0NIRUNLX01PRFVMRVMoWDExLCBbeDExXSwgW3gxMT0kZW5hYmxlX2dseF0sIFt4MTE9bm9dKQorIAorIEFNX0NPTkRJVElPTkFMKEhBVkVfWDExLCB0ZXN0IHgkeDExID0geHllcykKKyAKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5L25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvbm8tbmVlZC1mb3ItcHl0aG9uMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjhmZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5L25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgcHl0aG9uMyBieSB0aGlzIHBhY2thZ2UgKHRoZSBweXRob24gc2NyaXB0cwordGhhdCBhcmUgdXNpbmcgZHVyaW5nIGNvbmZpZ3VyYXRpb24gb25seSBuZWVkIHB5dGhvbjIuNyspCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogR2FyeSBUaG9tYXMgPGdhcnlAbWxiYXNzb2MuY29tPgorLS0KK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTQwLDcgKzQwLDcgQEAgbTRfaWZuZGVmKFtYT1JHX01BQ1JPU19WRVJTSU9OXSwKKyBYT1JHX01BQ1JPU19WRVJTSU9OKDEuOCkKKyBYT1JHX0RFRkFVTFRfT1BUSU9OUworIAorLUFDX0NIRUNLX1BST0dTKFtQWVRIT05dLCBbcHl0aG9uMyBweXRob24yIHB5dGhvbl0pCisrQUNfQ0hFQ0tfUFJPR1MoW1BZVEhPTl0sIFtweXRob24yIHB5dGhvbl0pCisgCisgIyBJbml0aWFsaXplIGxpYnRvb2wKKyBBQ19ESVNBQkxFX1NUQVRJQwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxNzI5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eV9naXQuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJPcGVuR0wgZnVuY3Rpb24gcG9pbnRlciBtYW5hZ2VtZW50IGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OGVmNGM4MGQ0MDFlMDdiZDllZThiNmI1OGNmNDY0YiIKKworCitTUkNfVVJJID0gIiBcCisgICAgZ2l0Oi8vZ2l0aHViLmNvbS9hbmhvbHQvbGliZXBveHkuZ2l0IFwKKyAgICBmaWxlOi8vMDAwMS1zZWxlY3QtcGxhdGZvcm1zLWJhc2VkLW9uLWNvbmZpZ3VyYXRpb24tcmVzdWx0cy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItYWRkLWFuLW9wdGlvbi10by1kaXNhYmxlLWdseC1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vbm8tbmVlZC1mb3ItcHl0aG9uMy5wYXRjaCBcCisiCitTUkNSRVY9ImUyYzMzYWY1YmZjZmM5ZDE2OGY5ZTc3NjE1NmRkNDdjMzNmNDI4YjMiCitQViA9ICIxLjMuMSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MgdmlydHVhbC9lZ2wiCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS1nbHgsIC0tZGlzYWJsZS1nbHgsIHZpcnR1YWwvbGlieDExIgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZmFrZWtleS9saWJmYWtla2V5X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJmYWtla2V5L2xpYmZha2VrZXlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGRkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZmFrZWtleS9saWJmYWtla2V5X2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGNvbnZlcnRpbmcgY2hhcmFjdGVycyB0byBYIGtleS1wcmVzc2VzIgorREVTQ1JJUFRJT04gPSAibGliZmFrZWtleSBpcyBhIHNpbXBsZSBsaWJyYXJ5IGZvciBjb252ZXJ0aW5nIFVURi04IGNoYXJhY3RlcnMgaW50byAnZmFrZScgWCBcCitrZXktcHJlc3Nlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9saWJmYWtla2V5LmM7ZW5kbGluZT0zMDttZDU9NjAyYjVjY2Q0OGY2NDQwNzUxMDg2N2YzMzczYjQ0OGMiCisKK0RFUEVORFMgPSAibGlieHRzdCIKK1NFQ1RJT04gPSAieDExL3dtIgorCitTUkNSRVYgPSAiZTMyN2ZmMDQ5Yjg1MDNhZjJkYWRmZmE4NDM3MGEwODYwYjlmYjY4MiIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4dHN0IHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94L2xpYnBuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2Q1MDdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94L2xpYnBuZy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDE5YzNkMjQyMDM0NzQ4YjNjNjA3NjU2ODNlMWZmNGUyZGY5NzAyMDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxMCBEZWMgMjAxMyAxMTozNzozMiArMDAwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IGltcHJvdmUgbGlicG5nIGRldGVjdGlvbgorCitJbnN0ZWFkIG9mIGxvb2tpbmcgZm9yICJsaWJwbmcxMiIgZXhwbGljaXRseSB0aG91Z2ggcGtnLWNvbmZpZyBhbmQgdGhlbiBmYWxsaW5nCitiYWNrIHRvIGxpYnJhcnkgaHVudGluZywganVzdCB1c2UgcGtnLWNvbmZpZyB0byBmaW5kICJsaWJwbmciIHdoaWNoIGlzIHByb3ZpZGVkCitieSBib3RoIGxpYnBuZzEyIGFuZCBsaWJwbmcxNi4KKworVGhpcyBhbHNvIG1ha2VzIHRoZSBsaWJwbmcgZGV0ZWN0aW9uIGRldGVybWluaXN0aWMuCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyOSArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA4YTI4MDc2Li42NWQ3Yzc5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNCw3ICszNCw3IEBAIEFDX0FSR19FTkFCTEUoanBlZywKKyAgIGVuYWJsZV9qcGVnPSRlbmFibGV2YWwsIGVuYWJsZV9qcGVnPW5vKQorIAorIEFDX0FSR19FTkFCTEUocG5nLAorLSAgWyAgLS1kaXNhYmxlLXBuZyAgICAgICAgICAgZGlzYWJsZSBwbmcgc3VwcG9ydCBbZGVmYXVsdD1ub11dLAorKyAgWyAgLS1kaXNhYmxlLXBuZyAgICAgICAgICAgZGlzYWJsZSBQTkcgc3VwcG9ydCBbZGVmYXVsdD1lbmFibGVkXV0sCisgICAgICBlbmFibGVfcG5nPSRlbmFibGV2YWwsIGVuYWJsZV9wbmc9eWVzICkKKyAKKyBBQ19BUkdfRU5BQkxFKGRveHlnZW4tZG9jcywgICAgIAorQEAgLTE1NiwyOSArMTU2LDEwIEBAIGZpCisgZG5sIC0tLS0tLSBDaGVjayBmb3IgUE5HIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorIGlmIHRlc3QgeCRlbmFibGVfcG5nICE9IHhubzsgdGhlbgorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJwbmcxMikKKy0gIGlmIHRlc3QgeCRQS0dfQ09ORklHICE9IHhubyAmJiAkUEtHX0NPTkZJRyAtLWV4aXN0cyBsaWJwbmcxMjsgdGhlbiAKKy0gICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorLSAgICAgICAgUE5HX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBsaWJwbmcxMmAKKy0JUE5HX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgbGlicG5nMTJgCistICAgICAgICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBuZ10pCistCVNVUFBPUlRTX1BORz0xCistCVBOR19SRVFVSVJFRD0ibGlicG5nMTIiCistICBlbHNlCistCUFDX01TR19SRVNVTFQobm8pCistICAgICAgICAjIEFDX0NIRUNLX0hFQURFUlMocG5nLmgsIFsgaGF2ZV9wbmdfaD0ieWVzIiBdLCBbIGhhdmVfcG5nX2g9Im5vIiBdICkKKy0gICAgICAgIEFDX0NIRUNLX0xJQihbcG5nXSwgW3BuZ19jcmVhdGVfcmVhZF9zdHJ1Y3RdLCBbaGF2ZV9wbmc9InllcyJdLCBbaGF2ZV9wbmc9Im5vIl0pCistCistICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9wbmc9eHllcyAmJiB0ZXN0IHgkaGF2ZV9wbmdfaD14eWVzOyB0aGVuIAorLSAgICAgICAgICAgIEFDX0RFRklORShVU0VfUE5HLCBbMV0sIFtVc2UgUG5nXSkKKy0JICAgIFNVUFBPUlRTX1BORz0xCistICAgICAgICAgICAgUE5HX0xJQlM9Ii1scG5nIC1seiIKKy0gICAgICAgICAgICBNQl9FWFRSQV9MSUJTPSIkTUJfRVhUUkFfTElCUyAkUE5HX0xJQlMiCistICAgICAgICBlbHNlCistCSAgICBBQ19NU0dfV0FSTihbKioqIENhbm5vdCBmaW5kIFBORywgZGlzYWJsaW5nIHN1cHBvcnRdKQorLSAgICAgICAgICAgIGVuYWJsZV9wbmc9bm8KKy0JZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhQTkcsIGxpYnBuZykKKysgIEFDX0RFRklORShVU0VfUE5HLCBbMV0sIFtVc2UgUE5HXSkKKysgIFNVUFBPUlRTX1BORz0xCisrICBQTkdfUkVRVUlSRUQ9ImxpYnBuZyIKKyBmaQorIAorIAorLS0gCisxLjguNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZWI2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIk1hdGNoYm94IHdpbmRvdyBtYW5hZ2VyIGNvcmUgbGlicmFyeSIKK1NFQ1RJT04gPSAieDExL2xpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0LmNvbS8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1iL21iZXhwLmM7ZW5kbGluZT0yMDttZDU9MjhjMGFlZjNiMjNlMzA4NDY0ZjVkYWU2YTExYjBkMmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibWIvbWJkb3RkZXNrdG9wLmM7ZW5kbGluZT0yMTttZDU9NWEyODcxNTZiMzIwN2U4NTFjMWQ2OGQwOWM0MzliNTEiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGV4dCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvbWF0Y2hib3gvJHtCUE59LyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBuZy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImZjNmNjODA3ZjU1YTNlN2M3NTJkODAxMzE3Njg3NWQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI1NGNhYjUyZTMwNGEzNTEyYzhkZjRiZTU5ZDY5MGNmMzkyMWJiYjY4YTI4ZWRlN2ZlMjZiOTM1MzQyMTdiNTMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImpwZWcgcG5nIHhmdCB4c2V0dGluZ3MiCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbcGFuZ29dID0gIi0tZW5hYmxlLXBhbmdvLC0tZGlzYWJsZS1wYW5nbyxwYW5nbyIKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLWVuYWJsZS1wbmcsLS1kaXNhYmxlLXBuZyxsaWJwbmciCitQQUNLQUdFQ09ORklHW3hmdF0gPSAiLS1lbmFibGUteGZ0LC0tZGlzYWJsZS14ZnQsbGlieGZ0IgorUEFDS0FHRUNPTkZJR1t4c2V0dGluZ3NdID0gIi0tZW5hYmxlLXhzZXR0aW5ncywtLWRpc2FibGUteHNldHRpbmdzLGxpYnhzZXR0aW5ncy1jbGllbnQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2NvbmZpZ3VyZV90d2Vhay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk3NjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2NvbmZpZ3VyZV90d2Vhay5wYXRjaApAQCAtMCwwICsxLDExMTEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IFNETC0xLjIuMTUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gU0RMLTEuMi4xNS5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIFNETC0xLjIuMTUvY29uZmlndXJlLmluCitAQCAtNDgsOSArNDgsOSBAQCBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtc2NyaXB0c10pCisgZG5sIEFDX0NBTk9OSUNBTF9IT1NUCisgQUNfQ19CSUdFTkRJQU4KKyBpZiB0ZXN0IHgkYWNfY3ZfY19iaWdlbmRpYW4gPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfQllURU9SREVSLCA0MzIxKQorKyAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgNDMyMSwgIkJ5dGUgT3JkZXIiKQorIGVsc2UKKy0gICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDEyMzQpCisrICAgIEFDX0RFRklORShTRExfQllURU9SREVSLCAxMjM0LCAiQnl0ZSBPcmRlciIpCisgZmkKKyAKKyBkbmwgQ2hlY2sgZm9yIHRvb2xzCitAQCAtMTM0LDcgKzEzNCw3IEBAIEFDX0FSR19FTkFCTEUobGliYywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbGliY10sIFtVc2UgdGhlIHN5c3RlbSBDIGxpYnJhcnkgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9saWJjPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2xpYmMgPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShIQVZFX0xJQkMpCisrICAgIEFDX0RFRklORShIQVZFX0xJQkMsMSwiIikKKyAKKyAgICAgZG5sIENoZWNrIGZvciBDIGxpYnJhcnkgaGVhZGVycworICAgICBBQ19IRUFERVJfU1REQworQEAgLTE0NSw3ICsxNDUsNyBAQCBpZiB0ZXN0IHgkZW5hYmxlX2xpYmMgPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHh5ZXMgLW8geCRhY19jdl9oZWFkZXJfc3RkaW50X2ggPSB4eWVzOyB0aGVuCisgICAgICAgICBBQ19DSEVDS19UWVBFKGludDY0X3QpCisgICAgICAgICBpZiB0ZXN0IHgkYWNfY3ZfdHlwZV9pbnQ2NF90ID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSwxLCIiKQorICAgICAgICAgZmkKKyAgICAgICAgIGhhdmVfaW50dHlwZXM9eWVzCisgICAgIGZpCitAQCAtMTYxLDExICsxNjEsMTEgQEAgaWYgdGVzdCB4JGVuYWJsZV9saWJjID0geHllczsgdGhlbgorIAorICAgICBBQ19GVU5DX01FTUNNUAorICAgICBpZiB0ZXN0IHgkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShIQVZFX01FTUNNUCkKKysgICAgICAgIEFDX0RFRklORShIQVZFX01FTUNNUCwxLCIiKQorICAgICBmaQorICAgICBBQ19GVU5DX1NUUlRPRAorICAgICBpZiB0ZXN0IHgkYWNfY3ZfZnVuY19zdHJ0b2QgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoSEFWRV9TVFJUT0QpCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9TVFJUT0QsMSwiIikKKyAgICAgZmkKKyAgICAgQUNfQ0hFQ0tfRlVOQyhtcHJvdGVjdCwKKyAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKK0BAIC0xOTEsNDAgKzE5MSw0MCBAQCBpZiB0ZXN0IHgkaGF2ZV9pbnR0eXBlcyAhPSB4eWVzOyB0aGVuCisgICAgIEFDX0NIRUNLX1NJWkVPRihsb25nLCA0KQorICAgICBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nLCA4KQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2NoYXIgPSB4MTsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKGludDhfdCwgc2lnbmVkIGNoYXIpCistICAgICAgICBBQ19ERUZJTkUodWludDhfdCwgdW5zaWduZWQgY2hhcikKKysgICAgICAgIEFDX0RFRklORShpbnQ4X3QsIHNpZ25lZCBjaGFyLCIiKQorKyAgICAgICAgQUNfREVGSU5FKHVpbnQ4X3QsIHVuc2lnbmVkIGNoYXIsIiIpCisgICAgIGZpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2Zfc2hvcnQgPSB4MjsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBzaG9ydCkKKy0gICAgICAgIEFDX0RFRklORSh1aW50MTZfdCwgdW5zaWduZWQgc2hvcnQpCisrICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIHNob3J0LCIiKQorKyAgICAgICAgQUNfREVGSU5FKHVpbnQxNl90LCB1bnNpZ25lZCBzaG9ydCwiIikKKyAgICAgZWxzZQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9pbnQgPSB4MjsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShpbnQxNl90LCBzaWduZWQgaW50KQorLSAgICAgICAgICAgIEFDX0RFRklORSh1aW50MTZfdCwgdW5zaWduZWQgaW50KQorKyAgICAgICAgICAgIEFDX0RFRklORShpbnQxNl90LCBzaWduZWQgaW50LCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORSh1aW50MTZfdCwgdW5zaWduZWQgaW50LCIiKQorICAgICAgICAgZmkKKyAgICAgZmkKKyAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9pbnQgPSB4NDsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKGludDMyX3QsIHNpZ25lZCBpbnQpCistICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGludCkKKysgICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgaW50LCIiKQorKyAgICAgICAgQUNfREVGSU5FKHVpbnQzMl90LCB1bnNpZ25lZCBpbnQsIiIpCisgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfbG9uZyA9IHg0OyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKGludDMyX3QsIHNpZ25lZCBsb25nKQorLSAgICAgICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgbG9uZykKKysgICAgICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGxvbmcsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQzMl90LCB1bnNpZ25lZCBsb25nLCIiKQorICAgICAgICAgZmkKKyAgICAgZmkKKyAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9sb25nID0geDg7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZykKKy0gICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZykKKy0gICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUpCisrICAgICAgICBBQ19ERUZJTkUoaW50NjRfdCwgc2lnbmVkIGxvbmcsIiIpCisrICAgICAgICBBQ19ERUZJTkUodWludDY0X3QsIHVuc2lnbmVkIGxvbmcsIiIpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFLCIiKQorICAgICBlbHNlCisgICAgICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyA9IHg4OyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nIGxvbmcpCistICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nIGxvbmcpCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoaW50NjRfdCwgc2lnbmVkIGxvbmcgbG9uZywiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUodWludDY0X3QsIHVuc2lnbmVkIGxvbmcgbG9uZywiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFLCIiKQorICAgICAgICAgZmkKKyAgICAgZmkKKy0gICAgQUNfREVGSU5FKHNpemVfdCwgdW5zaWduZWQgaW50KQorLSAgICBBQ19ERUZJTkUodWludHB0cl90LCB1bnNpZ25lZCBsb25nKQorKyAgICBBQ19ERUZJTkUoc2l6ZV90LCB1bnNpZ25lZCBpbnQsIiIpCisrICAgIEFDX0RFRklORSh1aW50cHRyX3QsIHVuc2lnbmVkIGxvbmcsIiIpCisgZmkKKyAKKyAjIFN0YW5kYXJkIEMgc291cmNlcworQEAgLTI0NSwyNSArMjQ1LDI1IEBAIEFDX0FSR19FTkFCTEUoYXVkaW8sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWF1ZGlvXSwgW0VuYWJsZSB0aGUgYXVkaW8gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfYXVkaW89eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKHZpZGVvLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlb10sIFtFbmFibGUgdGhlIHZpZGVvIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9WSURFT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9WSURFT19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShldmVudHMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWV2ZW50c10sIFtFbmFibGUgdGhlIGV2ZW50cyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9ldmVudHM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfZXZlbnRzICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9FVkVOVFNfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfRVZFTlRTX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGpveXN0aWNrLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1qb3lzdGlja10sIFtFbmFibGUgdGhlIGpveXN0aWNrIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2pveXN0aWNrPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19ESVNBQkxFRCwxLCIiKQorIGVsc2UKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svKi5jIgorIGZpCitAQCAtMjcxLDQzICsyNzEsNDMgQEAgQUNfQVJHX0VOQUJMRShjZHJvbSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY2Ryb21dLCBbRW5hYmxlIHRoZSBjZHJvbSBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9jZHJvbT15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfQ0RST01fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfQ0RST01fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUodGhyZWFkcywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkc10sIFtFbmFibGUgdGhlIHRocmVhZGluZyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV90aHJlYWRzPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfVEhSRUFEU19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRSh0aW1lcnMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRpbWVyc10sIFtFbmFibGUgdGhlIHRpbWVyIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX3RpbWVycz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9USU1FUlNfRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoZmlsZSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZmlsZV0sIFtFbmFibGUgdGhlIGZpbGUgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfZmlsZT15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9maWxlICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9GSUxFX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0ZJTEVfRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUobG9hZHNvLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1sb2Fkc29dLCBbRW5hYmxlIHRoZSBzaGFyZWQgb2JqZWN0IGxvYWRpbmcgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfbG9hZHNvPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShjcHVpbmZvLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jcHVpbmZvXSwgW0VuYWJsZSB0aGUgY3B1aW5mbyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9jcHVpbmZvPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2NwdWluZm8gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0NQVUlORk9fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfQ1BVSU5GT19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShhc3NlbWJseSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXNzZW1ibHldLCBbRW5hYmxlIGFzc2VtYmx5IHJvdXRpbmVzIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfYXNzZW1ibHk9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfYXNzZW1ibHkgPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfQVNTRU1CTFlfUk9VVElORVMpCisrICAgIEFDX0RFRklORShTRExfQVNTRU1CTFlfUk9VVElORVMsMSwiIikKKyBmaQorIAorIGRubCBTZWUgaWYgdGhlIE9TUyBhdWRpbyBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkCitAQCAtMzM1LDEyICszMzUsMTIgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW9zc10sIFtzdXBwb3J0CisgICAgICAgICAgICAgICBpbnQgYXJnID0gU05EQ1RMX0RTUF9TRVRGUkFHTUVOVDsKKyAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICBoYXZlX29zcz15ZXMKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9PU1NfU09VTkRDQVJEX0gpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTX1NPVU5EQ0FSRF9ILDEsIiIpCisgICAgICAgICAgICAgXSkKKyAgICAgICAgIGZpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX29zcykKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX29zcyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9PU1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZHNwLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kbWEvKi5jIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNDA3LDcgKzQwNyw3IEBAIENoZWNrRE1FRElBKCkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfZG1lZGlhKQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9kbWVkaWEgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRE1FRElBKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RNRURJQSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2RtZWRpYS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxhdWRpbyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTQ0NCw3ICs0NDQsNyBAQCBDaGVja01NRSgpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX21tZSkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbW1lID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX01NRUFVRElPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX01NRUFVRElPLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vbW1lLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJE1NRV9DRkxBR1MiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJE1NRV9MSUJTIgorQEAgLTQ2Nyw3ICs0NjcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXNkLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9lc2Rfc2hhcmVkPXllcykKKyAgICAgICAgICAgICBlc2RfbGliPVtgZmluZF9saWIgImxpYmVzZC5zby4qIiAiJEVTRF9MSUJTIiB8IHNlZCAncy8uKlwvXCguKlwpL1wxLzsgcSdgXQorIAorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0VTRCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9FU0QsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9lc2QvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkRVNEX0NGTEFHUyIKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gIT0geHllcyAmJiBcCitAQCAtNDc3LDcgKzQ3Nyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1lc2Qtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gPSB4eWVzICYmIFwKKyAgICAgICAgICAgICAgICB0ZXN0IHgkZW5hYmxlX2VzZF9zaGFyZWQgPSB4eWVzICYmIHRlc3QgeCRlc2RfbGliICE9IHg7IHRoZW4KKyAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJlc2QgLT4gJGVzZF9saWIiCistICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfQVVESU9fRFJJVkVSX0VTRF9EWU5BTUlDLCAiJGVzZF9saWIiKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9FU0RfRFlOQU1JQywgIiRlc2RfbGliIiwgIiIpCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkRVNEX0xJQlMiCisgICAgICAgICAgICAgZmkKK0BAIC01NjQsNyArNTY0LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFydHMtc2hhcmVkXSwgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX2FydHNfc2hhcmVkPXllcykKKyAgICAgICAgICAgICAgICAgYXJ0c19saWI9W2BmaW5kX2xpYiAibGliYXJ0c2Muc28uKiIgIiRBUlRTX0xJQlMiIHwgc2VkICdzLy4qXC9cKC4qXCkvXDEvOyBxJ2BdCisgCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0FSVFMpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0FSVFMsLCAiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vYXJ0cy8qLmMiCisgICAgICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkQVJUU19DRkxBR1MiCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyAhPSB4eWVzICYmIFwKK0BAIC01NzQsNyArNTc0LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFydHMtc2hhcmVkXSwgWworICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gPSB4eWVzICYmIFwKKyAgICAgICAgICAgICAgICAgICAgdGVzdCB4JGVuYWJsZV9hcnRzX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JGFydHNfbGliICE9IHg7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliYXJ0c2MgLT4gJGFydHNfbGliIgorLSAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfQVJUU19EWU5BTUlDLCAiJGFydHNfbGliIikKKysgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfQVVESU9fRFJJVkVSX0FSVFNfRFlOQU1JQywgIiRhcnRzX2xpYiIsMSwiIikKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJEFSVFNfTElCUyIKKyAgICAgICAgICAgICAgICAgZmkKK0BAIC02MzQsNyArNjM0LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5hcy1zaGFyZWRdLCBbZAorICAgICAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkTkFTX0xJQlMiCisgICAgICAgICAgICAgZmkKKyAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9OQVMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTkFTLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vbmFzLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJE5BU19DRkxBR1MiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKK0BAIC02NDksNyArNjQ5LDcgQEAgQ2hlY2tEaXNrQXVkaW8oKQorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kaXNrYXVkaW9dLCBbc3VwcG9ydCB0aGUgZGlzayB3cml0ZXIgYXVkaW8gZHJpdmVyIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX2Rpc2thdWRpbz15ZXMpCisgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzIC1hIHgkZW5hYmxlX2Rpc2thdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RJU0spCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ESVNLLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kaXNrLyouYyIKKyAgICAgZmkKKyB9CitAQCAtNjYxLDcgKzY2MSw3IEBAIENoZWNrRHVtbXlBdWRpbygpCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWR1bW15YXVkaW9dLCBbc3VwcG9ydCB0aGUgZHVtbXkgYXVkaW8gZHJpdmVyIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX2R1bW15YXVkaW89eWVzKQorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllcyAtYSB4JGVuYWJsZV9kdW1teWF1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFVNTVkpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9EVU1NWSwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZHVtbXkvKi5jIgorICAgICBmaQorIH0KK0BAIC02NzcsNyArNjc3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW1pbnRhdWRpb10sIFtzdQorICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSKG1pbnQvZmFsY29uLmgsIGhhdmVfbWludF9mYWxjb25faGRyPXllcykKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX21pbnRfZmFsY29uX2hkciA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBtaW50YXVkaW89eWVzCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTUlOVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NSU5ULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vbWludC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vbWludC8qLlMiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKK0BAIC03NDYsNyArNzQ2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5hc21dLCBbdXNlIG5hcworICAgICAgICAgQ29tcGlsZU5BU00gdW5xdW90ZWQtc2VjdGlvbnMgfHwgTkFTTT0iIgorIAorICAgICAgICAgaWYgdGVzdCAieCROQVNNIiAhPSB4IC1hICJ4JE5BU00iICE9IHgnIiROQVNNIic7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hFUk1FU19CTElUVEVSUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hFUk1FU19CTElUVEVSUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2hlcm1lcy8qLmFzbSIKKyAgICAgICAgICAgICBOQVNNRkxBR1M9IiROQVNNRkxBR1MgLUkgJHNyY2Rpci9zcmMvaGVybWVzLyIKKyAKK0BAIC04NDAsOSArODQwLDkgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFsdGl2ZWNdLCBbdXNlCisgICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2djY19hbHRpdmVjID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQUxUSVZFQ19CTElUVEVSUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FMVElWRUNfQkxJVFRFUlMsMSwiIikKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9hbHRpdmVjX2hfaGRyID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQUxUSVZFQ19IKQorKyAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQUxUSVZFQ19ILDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJGFsdGl2ZWNfQ0ZMQUdTIgorICAgICAgICAgZmkKK0BAIC05MjAsNyArOTIwLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWlwb2RdLCBbY29uZmlndQorIAorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2lwb2QgPSB4eWVzOyB0aGVuCisgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLURJUE9EIgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfSVBPRCkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0lQT0QsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2lwb2QvKi5jIgorICAgICBmaQorIH0KK0BAIC05NTQsNyArOTU0LDcgQEAgQ2hlY2tOQU5PWCgpCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC1ERU5BQkxFX05BTk9YX0RJUkVDVF9GQiIKKyAgICAgICAgIGZpCisgCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9OQU5PWCkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX05BTk9YLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9uYW5veC8qLmMiCisgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbG5hbm8tWCIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTAyMCw3ICsxMDIwLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXgxMS1zaGFyZWRdLCBbZAorICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkWF9DRkxBR1MiCisgICAgICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgJFhfTElCUyIKKyAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTEpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8veDExLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJFhfQ0ZMQUdTIgorIAorQEAgLTEwNDIsOCArMTA0Miw4IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS14MTEtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICAgICB0ZXN0IHgkZW5hYmxlX3gxMV9zaGFyZWQgPSB4eWVzICYmIHRlc3QgeCR4MTFfbGliICE9IHggJiYgdGVzdCB4JHgxMWV4dF9saWIgIT0geDsgdGhlbgorICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlgxMSAtPiAkeDExX2xpYiIKKyAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJYMTFleHQgLT4gJHgxMWV4dF9saWIiCistICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDLCAiJHgxMV9saWIiKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YRVhULCAiJHgxMWV4dF9saWIiKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQywgIiR4MTFfbGliIiwiIikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWEVYVCwgIiR4MTFleHRfbGliIiwiIikKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIGVuYWJsZV94MTFfc2hhcmVkPW5vCisgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRYX0xJQlMgLWxYMTEgLWxYZXh0IgorQEAgLTEwNjAsMjAgKzEwNjAsMjAgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRnYV0sIFthbGxvdyB1cworIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1kZ2FdLCBbdXNlIERHQSAyLjAgdmlkZW8gZHJpdmVyIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX2RnYT15ZXMpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9kZ2EgPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX2RnYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfREdBKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ER0EsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZGdhLyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLWRnYW1vdXNlLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEtZGdhbW91c2VdLCBbdXNlIFgxMSBER0EgZm9yIG1vdXNlIGV2ZW50cyBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX3gxMV9kZ2Ftb3VzZT15ZXMpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9kZ2EgPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX3gxMV9kZ2Ftb3VzZSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX0RHQU1PVVNFKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfREdBTU9VU0UsMSwiIikKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLXZtLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEtdm1dLCBbdXNlIFgxMSBWTSBleHRlbnNpb24gZm9yIGZ1bGxzY3JlZW4gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfdm09eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW9feDExX3ZtID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfVklETU9ERSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1ZJRE1PREUsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vWGV4dC9YeGY4NnZtLyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLXh2LAorQEAgLTEwODcsMTQgKzEwODcsMTQgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS14dl0sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS14aW5lcmFtYV0sIFtlbmFibGUgWDExIFhpbmVyYW1hIHN1cHBvcnQgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX3gxMV94aW5lcmFtYT15ZXMpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb194MTFfeGluZXJhbWEgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YSU5FUkFNQSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hJTkVSQU1BLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL1hleHQvWGluZXJhbWEvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEteG1lLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteG1lXSwgW2VuYWJsZSBYaSBHcmFwaGljcyBYTUUgZm9yIGZ1bGxzY3JlZW4gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX3gxMV94bWU9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW9feDExX3htZSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hNRSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hNRSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9YZXh0L1hNRS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS14cmFuZHIsCitAQCAtMTExMSw4ICsxMTExLDggQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS14cmFuZAorICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV94MTFfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkeHJhbmRyX2xpYiAhPSB4IDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWHJlbmRlciAtPiAkeHJlbmRlcl9saWIiCisgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJYcmFuZHIgLT4gJHhyYW5kcl9saWIiCistICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWFJFTkRFUiwgIiR4cmVuZGVyX2xpYiIpCistICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWFJBTkRSLCAiJHhyYW5kcl9saWIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSRU5ERVIsICIkeHJlbmRlcl9saWIiLCIiKQorKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSQU5EUiwgIiR4cmFuZHJfbGliIiwiIikKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0ZWx5X2VuYWJsZV92aWRlb194MTFfeHJhbmRyPXllcworICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihYcmVuZGVyLCBYUmVuZGVyUXVlcnlFeHRlbnNpb24sIGhhdmVfeHJlbmRlcl9saWI9eWVzKQorQEAgLTExMjUsNyArMTEyNSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteHJhbmQKKyAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGlmIHRlc3QgeCRkZWZpbml0ZWx5X2VuYWJsZV92aWRlb194MTFfeHJhbmRyID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWFJBTkRSKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWFJBTkRSLDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTE1Miw3ICsxMTUyLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXBob3Rvbl0sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcGhvdG9uKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3Bob3RvbiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QSE9UT04pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUEhPVE9OLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcGhvdG9uLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHBoIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTE2Niw3ICsxMTY2LDcgQEAgZG5sIFNldCB1cCB0aGUgQldpbmRvdyB2aWRlbyBkcml2ZXIgaWYgZQorIENoZWNrQldJTkRPVygpCisgeworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQldJTkRPVykKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0JXSU5ET1csMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2J3aW5kb3cvKi5jYyIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgIGZpCitAQCAtMTE4OSw3ICsxMTg5LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWNhcmJvbl0sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9jYXJib24pCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9jYXJib24gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfVE9PTEJPWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9UT09MQk9YLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vbWFjY29tbW9uLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9tYWNyb20vKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTIxOCw3ICsxMjE4LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWNvY29hXSwgWworICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9jb2NvYSkKKyAgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfY29jb2EgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVVBUlRaKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1FVQVJUWiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3F1YXJ0ei8qLm0iCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMTI0NSw3ICsxMjQ1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWZiY29uXSwgWworICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fZmJjb24pCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fZmJjb24gPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGFnZXNpemUpCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRkJDT04pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRkJDT04sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9mYmNvbi8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMTI5Niw3ICsxMjk2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWRpcmVjdGZiXQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fZGlyZWN0ZmIpCisgCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fZGlyZWN0ZmIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRElSRUNURkIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRElSRUNURkIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9kaXJlY3RmYi8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRESVJFQ1RGQl9DRkxBR1MiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJERJUkVDVEZCX0xJQlMiCitAQCAtMTMyMyw3ICsxMzIzLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXBzMmdzXSwgWworICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3BzMmdzKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3BzMmdzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BTMkdTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BTMkdTLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcHMyZ3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTEzNzYsNyArMTM3Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1nZ2ldLCBbdXMKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19nZ2kpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fZ2dpID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dHSSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9HR0ksMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9nZ2kvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sZ2dpIC1sZ2lpIC1sZ2ciCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNDA2LDcgKzE0MDYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tc3ZnYV0sIFt1CisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fc3ZnYSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19zdmdhID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1NWR0FMSUIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfU1ZHQUxJQiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3N2Z2EvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sdmdhIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTQzOCw3ICsxNDM4LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXZnbF0sIFt1cworICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3ZnbCkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb192Z2wgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfVkdMKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1ZHTCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3ZnbC8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWx2Z2wiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNDY2LDcgKzE0NjYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8td3Njb25zXSwKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb193c2NvbnMpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fd3Njb25zID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1dTQ09OUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XU0NPTlMsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93c2NvbnMvKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTE0OTEsNyArMTQ5MSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1hYWxpYl0sIFsKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19hYWxpYikKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19hYWxpYiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9BQUxJQikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9BQUxJQiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2FhbGliLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGFhIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTU1Myw3ICsxNTUzLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXF0b3BpYV0sCisgICAgICAgICBDWFhGTEFHUz0iJE9MRF9DWFgiCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19xdG9waWEpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fcXRvcGlhID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1FUT1BJQSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVE9QSUEsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9xdG9waWEvKi5jYyIKKyAgICAgICAgICAgICBTRExNQUlOX1NPVVJDRVM9IiRzcmNkaXIvc3JjL21haW4vcXRvcGlhLyouY2MiCisgICAgICAgICAgICAgU0RMTUFJTl9MREZMQUdTPSItc3RhdGljIgorQEAgLTE1ODMsNyArMTU4Myw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1waWNvZ3VpXSwKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19waWNvZ3VpKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3BpY29ndWkgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUElDT0dVSSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QSUNPR1VJLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcGljb2d1aS8qLmMiCisgICAgICAgICAgICAgU0RMX0xJQlM9IiRTRExfTElCUyAtbHBndWkiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNjA3LDcgKzE2MDcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teGJpb3NdLCBbCisgICAgIHZpZGVvX3hiaW9zPW5vCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX3hiaW9zID0geHllczsgdGhlbgorICAgICAgICAgdmlkZW9feGJpb3M9eWVzCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YQklPUykKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1hCSU9TLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby94Ymlvcy8qLmMiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICBmaQorQEAgLTE2MjUsNyArMTYyNSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1nZW1dLCBbdXMKKyAgICAgICAgIEFDX0NIRUNLX0xJQihnZW0sIGFwcGxfaW5pdCwgaGF2ZV9nZW1fbGliPXllcykKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2dlbV9oZHIgPSB4eWVzIC1hIHgkaGF2ZV9nZW1fbGliID0geHllczsgdGhlbgorICAgICAgICAgICAgIHZpZGVvX2dlbT15ZXMKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9HRU0pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0VNLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZ2VtLyouYyIKKyAgICAgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTIC1sZ2VtIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTY0MCw3ICsxNjQwLDcgQEAgQ2hlY2tEdW1teVZpZGVvKCkKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZHVtbXldLCBbdXNlIGR1bW15IHZpZGVvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb19kdW1teT15ZXMpCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW9fZHVtbXkgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9EVU1NWSkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RVTU1ZLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9kdW1teS8qLmMiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICBmaQorQEAgLTE2NjcsOCArMTY2Nyw4IEBAIENoZWNrT3BlbkdMWDExKCkKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19vcGVuZ2wpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX0dMWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX0dMWCwxLCIiKQorICAgICAgICAgZmkKKyAgICAgZmkKKyB9CitAQCAtMTY4Nyw3ICsxNjg3LDcgQEAgQ2hlY2tPcGVuR0xRTlgoKQorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX29wZW5nbCkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19vcGVuZ2wgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbEdMIgorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0xNjk3LDggKzE2OTcsOCBAQCBkbmwgQ2hlY2sgZm9yIFdpbjMyIE9wZW5HTAorIENoZWNrV0lOMzJHTCgpCisgeworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGVuYWJsZV92aWRlb19vcGVuZ2wgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX1dHTCkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9XR0wsMSwiIikKKyAgICAgZmkKKyB9CisgCitAQCAtMTcwNiw3ICsxNzA2LDcgQEAgZG5sIENoZWNrIGZvciBCZU9TIE9wZW5HTAorIENoZWNrQmVHTCgpCisgeworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGVuYWJsZV92aWRlb19vcGVuZ2wgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbEdMIgorICAgICBmaQorIH0KK0BAIC0xNzE1LDcgKzE3MTUsNyBAQCBkbmwgQ2hlY2sgZm9yIE1hY09TIE9wZW5HTAorIENoZWNrTWFjR0woKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorICAgICAgICAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICAgICAgKi0qLWRhcndpbiopCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW9fY29jb2EgPSB4eWVzOyB0aGVuCitAQCAtMTc0Nyw4ICsxNzQ3LDggQEAgQ2hlY2tBdGFyaU9TTWVzYSgpCisgICAgICAgICAgICAgT1NNRVNBX0NGTEFHUz1gJE9TTUVTQV9DT05GSUcgLS1jZmxhZ3NgCisgICAgICAgICAgICAgT1NNRVNBX0xJQlM9YCRPU01FU0FfQ09ORklHIC0tbGlic2AKKyAgICAgICAgIGZpCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQSkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9PU01FU0EsMSwiIikKKyAgICAgICAgIFNETF9DRkxBR1M9IiRTRExfQ0ZMQUdTICRPU01FU0FfQ0ZMQUdTIgorICAgICAgICAgU0RMX0xJQlM9IiRTRExfTElCUyAkT1NNRVNBX0xJQlMiCisgCitAQCAtMTc1OCw3ICsxNzU4LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW9zbWVzYS1zaGFyZWRdLAorICAgICAgICAgaWYgdGVzdCAieCRlbmFibGVfb3NtZXNhX3NoYXJlZCIgPSAieHllcyIgLWEgIngkZW5hYmxlX2F0YXJpX2xkZyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgICAjIER5bmFtaWMgbGlua2luZworICAgICAgICAgICAgIGlmIHRlc3QgIngkaGF2ZV9vc21lc2FfaGRyIiA9ICJ4eWVzIjsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9PU01FU0FfRFlOQU1JQykKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBX0RZTkFNSUMsMSwiIikKKyAgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0xNzkyLDcgKzE3OTIsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtaW5wdXQtZXZlbnRzXSwKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR1c2VfaW5wdXRfZXZlbnRzKQorICAgICAgICAgaWYgdGVzdCB4JHVzZV9pbnB1dF9ldmVudHMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9JTlBVVF9MSU5VWEVWKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfTElOVVhFViwxLCIiKQorICAgICAgICAgZmkKKyAgICAgZmkKKyB9CitAQCAtMTgxNCw3ICsxODE0LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWlucHV0LXRzbGliXSwgWworICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGVuYWJsZV9pbnB1dF90c2xpYikKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfaW5wdXRfdHNsaWIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9JTlBVVF9UU0xJQikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX1RTTElCLDEsIiIpCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWx0cyIKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTgzNyw3ICsxODM3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aF0sIFt1c2UgR05VCisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcocHRoKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdXNlX3B0aCkKKyAgICAgICAgIGlmIHRlc3QgIngkdXNlX3B0aCIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9wdGgvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNzZW0uYyIKKyAgICAgICAgICAgICBTRExfQ0ZMQUdTPSIkU0RMX0NGTEFHUyBgJFBUSF9DT05GSUcgLS1jZmxhZ3NgIgorQEAgLTE5NDMsNyArMTk0Myw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wdGhyZWFkLXNlbV0sIFsKKyAKKyAgICAgICAgICMgRG8gZnV0aGVyIHRlc3RpbmcgaWYgd2UgaGF2ZSBwdGhyZWFkIHN1cHBvcnQuLi4KKyAgICAgICAgIGlmIHRlc3QgeCR1c2VfcHRocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFELDEsIiIpCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRwdGhyZWFkX2NmbGFncyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkcHRocmVhZF9saWIiCisgICAgICAgICAgICAgU0RMX0NGTEFHUz0iJFNETF9DRkxBR1MgJHB0aHJlYWRfY2ZsYWdzIgorQEAgLTE5NjUsNyArMTk2NSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wdGhyZWFkLXNlbV0sIFsKKyAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgICAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICBoYXNfcmVjdXJzaXZlX211dGV4ZXM9eWVzCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWCwxLCIiKQorICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhc19yZWN1cnNpdmVfbXV0ZXhlcyA9IHhubzsgdGhlbgorQEAgLTE5NzYsNyArMTk3Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wdGhyZWFkLXNlbV0sIFsKKyAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCk7CisgICAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICBoYXNfcmVjdXJzaXZlX211dGV4ZXM9eWVzCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX05QKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9OUCwxLCIiKQorICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGFzX3JlY3Vyc2l2ZV9tdXRleGVzKQorQEAgLTIwNjUsNyArMjA2NSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGRpby1yZWRpcmVjdF0KKyAgICAgZmkKKyAKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1dJTkRJQikKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1dJTkRJQiwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd2luY29tbW9uLyouYyIKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3dpbmRpYi8qLmMiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTIwODcsNyArMjA4Nyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kaXJlY3R4XSwgW3VzZQorICAgICAgICAgICAgIGhhdmVfZGlyZWN0eD15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGhhdmVfZGlyZWN0eCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ERFJBVykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ERFJBVywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3dpbmR4NS8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjExOCw3ICsyMTE4LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNkbC1kbG9wZW5dLCBbdQorICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihjLCBkbG9wZW4sIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIiwKKyAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIoZGwsIGRsb3BlbiwgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxkbCIsCisgICAgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKGx0ZGwsIGRsb3BlbiwgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxsdGRsIikpKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vZGxvcGVuLyouYyIKKyAgICAgICAgICAgICBoYXZlX2xvYWRzbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjEzNSw3ICsyMTM1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWF0YXJpLWxkZ10sIFt1cworICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSKGxkZy5oLCBoYXZlX2xkZ19oZHI9eWVzKQorICAgICAgICAgQUNfQ0hFQ0tfTElCKGxkZywgbGRnX29wZW4sIGhhdmVfbGRnX2xpYj15ZXMsIGhhdmVfbGRnX2xpYj1ubywgLWxnZW0pCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9sZGdfaGRyID0geHllcyAtYSB4JGhhdmVfbGRnX2xpYiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19MREcpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fTERHLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL21pbnQvKi5jIgorICAgICAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgLWxsZGcgLWxnZW0iCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCitAQCAtMjI2NiwxMSArMjI2NiwxMSBAQCBDaGVja1VTQkhJRCgpCisgICAgICAgICAgICAgaGF2ZV9tYWNoaW5lX2pveXN0aWNrPXllcworICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbWFjaGluZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISURfTUFDSElORV9KT1lTVElDS19IKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1VTQkhJRF9NQUNISU5FX0pPWVNUSUNLX0gsMSwiIikKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfbWFjaGluZV9qb3lzdGljaykKKyAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1VTQkhJRCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1VTQkhJRCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2JzZC8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRVU0JfQ0ZMQUdTIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRVU0JfTElCUyIKK0BAIC0yMjg5LDcgKzIyODksNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY2xvY2tfZ2V0dGltZV0sCisgICAgIGlmIHRlc3QgeCRlbmFibGVfY2xvY2tfZ2V0dGltZSA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIEFDX0NIRUNLX0xJQihydCwgY2xvY2tfZ2V0dGltZSwgaGF2ZV9jbG9ja19nZXR0aW1lPXllcykKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2Nsb2NrX2dldHRpbWUgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ0xPQ0tfR0VUVElNRSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9DTE9DS19HRVRUSU1FLDEsIiIpCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxydCIKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMjMyMCw3ICsyMzIwLDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja0lQb2QKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yMzg2LDE3ICsyMzg2LDE3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgY2FzZSAkQVJDSCBpbgorICAgICAgICAgICAgIHN5c3Y1fHNvbGFyaXN8aHB1eCkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfU1VOQVVESU8pCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3N1bi8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBuZXRic2R8b3BlbmJzZCkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQlNEKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CU0QsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vYnNkLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGFpeCkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfUEFVRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfUEFVRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9wYXVkaW8vKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIDs7CitAQCAtMjQwNiw3ICsyNDA2LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorICAgICAgICAgICBjYXNlICRBUkNIIGluCisgICAgICAgICAgICAgbGludXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfTElOVVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfTElOVVgsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svbGludXgvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgICAgIDs7CitAQCAtMjQxNiwzMiArMjQxNiwzMiBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCisgICAgICAgICAgIGNhc2UgJEFSQ0ggaW4KKyAgICAgICAgICAgICBsaW51eHxzb2xhcmlzKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0xJTlVYKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0xJTlVYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2xpbnV4LyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgICpmcmVlYnNkKikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9GUkVFQlNEKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0ZSRUVCU0QsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vZnJlZWJzZC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAqb3BlbmJzZCp8Km5ldGJzZCopCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1BFTkJTRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9PUEVOQlNELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL29wZW5ic2QvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgYnNkaSkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9CU0RJKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JTREksMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vYnNkaS8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBhaXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQUlYKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0FJWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9haXgvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgb3NmKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09TRikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9PU0YsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vb3NmLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworQEAgLTI0NDksNyArMjQ0OSw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGhyZWFkIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgLWEgeCR1c2VfcHRocmVhZHMgIT0geHllcyAtYSB4JHVzZV9wdGggIT0geHllcyAtYSB4JEFSQ0ggPSB4aXJpeDsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1NQUk9DKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1NQUk9DLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2lyaXgvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNtdXRleC5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNjb25kLmMiCitAQCAtMjQ1Nyw3ICsyNDU3LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI0NzYsMjAgKzI0NzYsMjAgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja1BUSFJFQUQKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9RTlhOVE8pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfUU5YTlRPLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vbnRvLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGFzb3VuZCIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX1FOWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX1FOWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL3FueC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjUxNCwyOSArMjUxNCwyOSBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrTkFTTQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1dBVkVPVVQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfV0FWRU9VVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3dpbmRpYi8qLmMiCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZGlyZWN0eCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFNPVU5EKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9EU09VTkQsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vd2luZHg1LyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfV0lOTU0pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19XSU5NTSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fV0lOMzIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS93aW4zMi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfV0lOMzIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfV0lOMzIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvd2luMzIvU0RMX3N5c211dGV4LmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3dpbjMyL1NETF9zeXNzZW0uYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvd2luMzIvU0RMX3N5c3RocmVhZC5jIgorQEAgLTI1NDUsMTMgKzI1NDUsMTMgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfV0lOMzIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci93aW4zMi8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBzaGFyZWQgb2JqZWN0IGxvYWRpbmcgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fV0lOMzIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fV0lOMzIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworICAgICAgICAgZmkKK0BAIC0yNjIyLDI1ICsyNjIyLDI1IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tCZUdMCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQkFVRElPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JBVURJTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2JhdWRpby8qLmNjIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0JFT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9iZW9zLyouY2MiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9CRU9TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQkVPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2Jlb3MvKi5jYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGhyZWFkIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9CRU9TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX0JFT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvYmVvcy8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c211dGV4LmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c2NvbmQuYyIKK0BAIC0yNjQ4LDcgKzI2NDgsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX0JFT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9iZW9zLyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjY1NiwxMSArMjY1NiwxMSBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllczsgdGhlbgorICAgICAgICAgICAgIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgICAgICAgICAqLSotYmVvcyopCistICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19CRU9TKQorKyAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fQkVPUywxLCIiKQorICAgICAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2Jlb3MvKi5jIgorICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAqLSotaGFpa3UqKQorLSAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExPUEVOKQorKyAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExPUEVOLDEsIiIpCisgICAgICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vZGxvcGVuLyouYyIKKyAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBlc2FjICAgIAorQEAgLTI2OTYsNyArMjY5Niw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBzaGFyZWQgb2JqZWN0IGxvYWRpbmcgbGlicmFyeQorICAgICAgICAgIyAodGhpcyBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSB0aGUgZHluYW1pYyBYMTEgY2hlY2spCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXMgLWEgeCRoYXZlX2Rsb3BlbiAhPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExDT01QQVQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExDT01QQVQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vbWFjb3N4LyouYyIKKyAgICAgICAgICAgICBoYXZlX2xvYWRzbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjcxNCwyNiArMjcxNCwyNiBAQCBjYXNlICIkaG9zdCIgaW4KKyAKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9DT1JFQVVESU8pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQ09SRUFVRElPLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vbWFjb3N4LyouYyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0lPS0lUKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfSU9LSVQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9kYXJ3aW4vKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICAgICAgbmVlZF9pb2tpdF9mcmFtZXdvcms9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTUFDT1NYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTUFDT1NYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vbWFjb3N4LyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNzc1LDMwICsyNzc1LDMwIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIC1hIHgkZW5hYmxlX3B0aCA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTykKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfU1VOQVVESU8sMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vc3VuLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX01JTlQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19NSU5ULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svbWludC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9NSU5UKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTUlOVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL21pbnQvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIC1hIHgkZW5hYmxlX3B0aCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX01JTlQpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfTUlOLDEsIiJUKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9taW50LyouYyIKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvbWludC8qLlMiCisgICAgICAgICAgICAgZmkKK0BAIC0yODExLDIwICsyODExLDIwIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tQVEhSRUFECisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHZpZGVvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUklTQ09TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1JJU0NPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3Jpc2Nvcy8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcmlzY29zLyouUyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1JJU0NPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1JJU0NPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL3Jpc2Nvcy8qLmMiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfUklTQ09TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfUklTQ09TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvcmlzY29zLyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjg0NiwzMSArMjg0NiwzMSBAQCBDaGVja1dhcm5BbGwKKyBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorICAgaWYgdGVzdCB4JGhhdmVfam95c3RpY2sgIT0geHllczsgdGhlbgorICAgICAjIFdhbnRzIGpveXN0aWNrIHN1YnN5c3RlbSwgYnV0IGRvZXNuJ3QgaGF2ZSBhIHBsYXRmb3JtLXNwZWNpZmljIGJhY2tlbmQuLi4KKy0gICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19EVU1NWSkKKysgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19EVU1NWSwxLCIiKQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9kdW1teS8qLmMiCisgICBmaQorIGZpCisgaWYgdGVzdCB4JGhhdmVfY2Ryb20gIT0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9ESVNBQkxFRCkKKysgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRElTQUJMRUQsMSwiIikKKyAgICAgZmkKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vZHVtbXkvKi5jIgorIGZpCisgaWYgdGVzdCB4JGhhdmVfdGhyZWFkcyAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEU19ESVNBQkxFRCkKKysgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEU19ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy8qLmMiCisgZmkKKyBpZiB0ZXN0IHgkaGF2ZV90aW1lcnMgIT0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVEKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUlNfRElTQUJMRUQsMSwiIikKKyAgICAgZmkKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvZHVtbXkvKi5jIgorIGZpCisgaWYgdGVzdCB4JGhhdmVfbG9hZHNvICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCkKKysgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9kdW1teS8qLmMiCisgZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvbGlic2RsLTEuMi4xNS14ZGF0YTMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OGI5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvbGlic2RsLTEuMi4xNS14ZGF0YTMyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2xpYlgxMS0xLjUuOTkuOTAxIGhhcyBjaGFuZ2VkIHByb3RvdHlwZSBvZiBfWERhdGEzMgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Cis8aHR0cDovL2J1Z3ppbGxhLmxpYnNkbC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njk+CisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtciBiNmIyODI5Y2Q3ZWYgc3JjL3ZpZGVvL3gxMS9TRExfeDExc3ltLmgKKy0tLSBhL3NyYy92aWRlby94MTEvU0RMX3gxMXN5bS5oCVdlZCBGZWIgMjcgMTU6MjA6MzEgMjAxMyAtMDgwMAorKysrIGIvc3JjL3ZpZGVvL3gxMS9TRExfeDExc3ltLmgJV2VkIE1hciAyNyAxNjowNzoyMyAyMDEzICswMTAwCitAQCAtMTY1LDcgKzE2NSw3IEBACisgICovCisgI2lmZGVmIExPTkc2NAorIFNETF9YMTFfTU9EVUxFKElPXzMyQklUKQorLVNETF9YMTFfU1lNKGludCxfWERhdGEzMiwoRGlzcGxheSAqZHB5LHJlZ2lzdGVyIGxvbmcgKmRhdGEsdW5zaWduZWQgbGVuKSwoZHB5LGRhdGEsbGVuKSxyZXR1cm4pCisrU0RMX1gxMV9TWU0oaW50LF9YRGF0YTMyLChEaXNwbGF5ICpkcHkscmVnaXN0ZXIgX1hjb25zdCBsb25nICpkYXRhLHVuc2lnbmVkIGxlbiksKGRweSxkYXRhLGxlbikscmV0dXJuKQorIFNETF9YMTFfU1lNKHZvaWQsX1hSZWFkMzIsKERpc3BsYXkgKmRweSxyZWdpc3RlciBsb25nICpkYXRhLGxvbmcgbGVuKSwoZHB5LGRhdGEsbGVuKSwpCisgI2VuZGlmCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxM2JhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTg3IEBACitSYXRoZXIgdGhhbiBjb2RlIHdoaWNoIGRvZXNuJ3QgZXZlbiB3b3JrIHByb3Blcmx5IHdoZW4gY3Jvc3MgY29tcGlsaW5nLAorbGV0cyBqdXN0IHVzZSBwa2ctY29uZmlnIGluc3RlYWQuIEl0cyBhIGxpdHRsZSBzaW1wbGVyLgorCitSUCAyMDE0LzYvMjAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBTREwtMS4yLjE1L3NkbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFNETC0xLjIuMTUub3JpZy9zZGwubTQKKysrKyBTREwtMS4yLjE1L3NkbC5tNAorQEAgLTEyLDE3NCArMTIsOCBAQCBkbmwgVGVzdCBmb3IgU0RMLCBhbmQgZGVmaW5lIFNETF9DRkxBR1MKKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9TRExdLAorIFtkbmwgCistZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgc2RsLWNvbmZpZyBzY3JpcHQKKy1kbmwKKy1BQ19BUkdfV0lUSChzZGwtcHJlZml4LFsgIC0td2l0aC1zZGwtcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBTREwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHNkbF9wcmVmaXg9IiR3aXRodmFsIiwgc2RsX3ByZWZpeD0iIikKKy1BQ19BUkdfV0lUSChzZGwtZXhlYy1wcmVmaXgsWyAgLS13aXRoLXNkbC1leGVjLXByZWZpeD1QRlggRXhlYyBwcmVmaXggd2hlcmUgU0RMIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKy0gICAgICAgICAgICBzZGxfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgc2RsX2V4ZWNfcHJlZml4PSIiKQorLUFDX0FSR19FTkFCTEUoc2RsdGVzdCwgWyAgLS1kaXNhYmxlLXNkbHRlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IFNETCBwcm9ncmFtXSwKKy0JCSAgICAsIGVuYWJsZV9zZGx0ZXN0PXllcykKKy0KKy0gIGlmIHRlc3QgeCRzZGxfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgc2RsX2NvbmZpZ19hcmdzPSIkc2RsX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JHNkbF9leGVjX3ByZWZpeCIKKy0gICAgaWYgdGVzdCB4JHtTRExfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICBTRExfQ09ORklHPSRzZGxfZXhlY19wcmVmaXgvYmluL3NkbC1jb25maWcKKy0gICAgZmkKKy0gIGZpCistICBpZiB0ZXN0IHgkc2RsX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICBzZGxfY29uZmlnX2FyZ3M9IiRzZGxfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JHNkbF9wcmVmaXgiCistICAgIGlmIHRlc3QgeCR7U0RMX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgU0RMX0NPTkZJRz0kc2RsX3ByZWZpeC9iaW4vc2RsLWNvbmZpZworLSAgICBmaQorLSAgZmkKKy0KKy0gIGFzX3NhdmVfUEFUSD0iJFBBVEgiCistICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKy0gICAgUEFUSD0iJHByZWZpeC9iaW46JHByZWZpeC91c3IvYmluOiRQQVRIIgorLSAgZmkKKy0gIEFDX1BBVEhfUFJPRyhTRExfQ09ORklHLCBzZGwtY29uZmlnLCBubywgWyRQQVRIXSkKKy0gIFBBVEg9IiRhc19zYXZlX1BBVEgiCisgICBtaW5fc2RsX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjExLjAsJDEpCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFNETCAtIHZlcnNpb24gPj0gJG1pbl9zZGxfdmVyc2lvbikKKy0gIG5vX3NkbD0iIgorLSAgaWYgdGVzdCAiJFNETF9DT05GSUciID0gIm5vIiA7IHRoZW4KKy0gICAgbm9fc2RsPXllcworLSAgZWxzZQorLSAgICBTRExfQ0ZMQUdTPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBTRExfTElCUz1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLWxpYnNgCistCistICAgIHNkbF9tYWpvcl92ZXJzaW9uPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICBzZGxfbWlub3JfdmVyc2lvbj1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgc2RsX21pY3JvX3ZlcnNpb249YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIngkZW5hYmxlX3NkbHRlc3QiID0gInh5ZXMiIDsgdGhlbgorLSAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorLSAgICAgIGFjX3NhdmVfQ1hYRkxBR1M9IiRDWFhGTEFHUyIKKy0gICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorLSAgICAgIENGTEFHUz0iJENGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICBDWFhGTEFHUz0iJENYWEZMQUdTICRTRExfQ0ZMQUdTIgorLSAgICAgIExJQlM9IiRMSUJTICRTRExfTElCUyIKKy1kbmwKKy1kbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgU0RMIGlzIHN1ZmZpY2llbnRseSBuZXcuIChBbHNvIHNhbml0eQorLWRubCBjaGVja3MgdGhlIHJlc3VsdHMgb2Ygc2RsLWNvbmZpZyB0byBzb21lIGV4dGVudAorLWRubAorLSAgICAgIHJtIC1mIGNvbmYuc2RsdGVzdAorLSAgICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgIlNETC5oIgorLQorLWNoYXIqCistbXlfc3RyZHVwIChjaGFyICpzdHIpCisteworLSAgY2hhciAqbmV3X3N0cjsKKy0gIAorLSAgaWYgKHN0cikKKy0gICAgeworLSAgICAgIG5ld19zdHIgPSAoY2hhciAqKW1hbGxvYyAoKHN0cmxlbiAoc3RyKSArIDEpICogc2l6ZW9mKGNoYXIpKTsKKy0gICAgICBzdHJjcHkgKG5ld19zdHIsIHN0cik7CistICAgIH0KKy0gIGVsc2UKKy0gICAgbmV3X3N0ciA9IE5VTEw7CistICAKKy0gIHJldHVybiBuZXdfc3RyOworLX0KKy0KKy1pbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKy17CistICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKy0gIGNoYXIgKnRtcF92ZXJzaW9uOworLQorLSAgLyogVGhpcyBoYW5ncyBvbiBzb21lIHN5c3RlbXMgKD8pCistICBzeXN0ZW0gKCJ0b3VjaCBjb25mLnNkbHRlc3QiKTsKKy0gICovCistICB7IEZJTEUgKmZwID0gZm9wZW4oImNvbmYuc2RsdGVzdCIsICJhIik7IGlmICggZnAgKSBmY2xvc2UoZnApOyB9CistCistICAvKiBIUC9VWCA5ICglQCMhKSB3cml0ZXMgdG8gc3NjYW5mIHN0cmluZ3MgKi8KKy0gIHRtcF92ZXJzaW9uID0gbXlfc3RyZHVwKCIkbWluX3NkbF92ZXJzaW9uIik7CistICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CistICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX3NkbF92ZXJzaW9uIik7CistICAgICBleGl0KDEpOworLSAgIH0KKy0KKy0gICBpZiAoKCRzZGxfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorLSAgICAgICgoJHNkbF9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoJHNkbF9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAorLSAgICAgICgoJHNkbF9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoJHNkbF9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoJHNkbF9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCistICAgIHsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcHJpbnRmKCJcbioqKiAnc2RsLWNvbmZpZyAtLXZlcnNpb24nIHJldHVybmVkICVkLiVkLiVkLCBidXQgdGhlIG1pbmltdW0gdmVyc2lvblxuIiwgJHNkbF9tYWpvcl92ZXJzaW9uLCAkc2RsX21pbm9yX3ZlcnNpb24sICRzZGxfbWljcm9fdmVyc2lvbik7CistICAgICAgcHJpbnRmKCIqKiogb2YgU0RMIHJlcXVpcmVkIGlzICVkLiVkLiVkLiBJZiBzZGwtY29uZmlnIGlzIGNvcnJlY3QsIHRoZW4gaXQgaXNcbiIsIG1ham9yLCBtaW5vciwgbWljcm8pOworLSAgICAgIHByaW50ZigiKioqIGJlc3QgdG8gdXBncmFkZSB0byB0aGUgcmVxdWlyZWQgdmVyc2lvbi5cbiIpOworLSAgICAgIHByaW50ZigiKioqIElmIHNkbC1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFNETF9DT05GSUdcbiIpOworLSAgICAgIHByaW50ZigiKioqIHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGNvcHkgb2Ygc2RsLWNvbmZpZywgYW5kIHJlbW92ZSB0aGUgZmlsZVxuIik7CistICAgICAgcHJpbnRmKCIqKiogY29uZmlnLmNhY2hlIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7CistICAgICAgcmV0dXJuIDE7CistICAgIH0KKy19CistCistXSwsIG5vX3NkbD15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorLSAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKy0gICAgICAgQ1hYRkxBR1M9IiRhY19zYXZlX0NYWEZMQUdTIgorLSAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgZmkKKy0gIGZpCistICBpZiB0ZXN0ICJ4JG5vX3NkbCIgPSB4IDsgdGhlbgorLSAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCistICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCistICBlbHNlCistICAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgaWYgdGVzdCAiJFNETF9DT05GSUciID0gIm5vIiA7IHRoZW4KKy0gICAgICAgZWNobyAiKioqIFRoZSBzZGwtY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgU0RMIGNvdWxkIG5vdCBiZSBmb3VuZCIKKy0gICAgICAgZWNobyAiKioqIElmIFNETCB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCistICAgICAgIGVjaG8gIioqKiB5b3VyIHBhdGgsIG9yIHNldCB0aGUgU0RMX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCistICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gc2RsLWNvbmZpZy4iCistICAgICBlbHNlCistICAgICAgIGlmIHRlc3QgLWYgY29uZi5zZGx0ZXN0IDsgdGhlbgorLSAgICAgICAgOgorLSAgICAgICBlbHNlCistICAgICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIFNETCB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKy0gICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRTRExfQ0ZMQUdTIgorLSAgICAgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTICRTRExfQ0ZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkTElCUyAkU0RMX0xJQlMiCistICAgICAgICAgIEFDX1RSWV9MSU5LKFsKKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSAiU0RMLmgiCistCistaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKy17IHJldHVybiAwOyB9CistI3VuZGVmICBtYWluCistI2RlZmluZSBtYWluIEtfYW5kX1JfQ19tYWluCistXSwgICAgICBbIHJldHVybiAwOyBdLAorLSAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCistICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgU0RMIG9yIGZpbmRpbmcgdGhlIHdyb25nIgorLSAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBTREwuIElmIGl0IGlzIG5vdCBmaW5kaW5nIFNETCwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCistICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorLSAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorLSAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCistCSAgZWNobyAiKioqIgorLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCistICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCJdLAorLSAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorLSAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgU0RMIHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCistICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIFNETCBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKKy0gICAgICAgICAgZWNobyAiKioqIG1heSB3YW50IHRvIGVkaXQgdGhlIHNkbC1jb25maWcgc2NyaXB0OiAkU0RMX0NPTkZJRyIgXSkKKy0gICAgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCistICAgICAgICAgIENYWEZMQUdTPSIkYWNfc2F2ZV9DWFhGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKy0gICAgICAgZmkKKy0gICAgIGZpCistICAgICBTRExfQ0ZMQUdTPSIiCistICAgICBTRExfTElCUz0iIgorLSAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbU0RMXSwgW3NkbCA+PSAkbWluX3NkbF92ZXJzaW9uXSkKKyAgIEFDX1NVQlNUKFNETF9DRkxBR1MpCisgICBBQ19TVUJTVChTRExfTElCUykKKy0gIHJtIC1mIGNvbmYuc2RsdGVzdAorIF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2YmQ0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsXzEuMi4xNS5iYgpAQCAtMCwwICsxLDY3IEBACitTVU1NQVJZID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciBpcyBhIGNyb3NzLXBsYXRmb3JtIG11bHRpbWVkaWEgXAorbGlicmFyeSBkZXNpZ25lZCB0byBwcm92aWRlIGxvdyBsZXZlbCBhY2Nlc3MgdG8gYXVkaW8sIGtleWJvYXJkLCBtb3VzZSwgXAoram95c3RpY2ssIDNEIGhhcmR3YXJlIHZpYSBPcGVuR0wsIGFuZCAyRCB2aWRlbyBmcmFtZWJ1ZmZlci4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5saWJzZGwub3JnLyIKKworU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Mjc4MThjZDdmZDgzODc3YThlM2VmODJiODI3OThlZjQiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGlic2RsIgorCitERVBFTkRTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAndmlydHVhbC9saWJnbCBsaWJnbHUnLCAnJywgZCl9IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4cmFuZHIgbGlieHJlbmRlcicsICcnLCBkKX0gXAorICAgICAgICAgICB0c2xpYiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbmF0aXZlc2RrLWxpYngxMSBuYXRpdmVzZGstbGlieHJhbmRyIG5hdGl2ZXNkay1saWJ4cmVuZGVyIG5hdGl2ZXNkay1saWJ4ZXh0JywgJycsIGQpfSIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnL3JlbGVhc2UvU0RMLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVfdHdlYWsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlic2RsLTEuMi4xNS14ZGF0YTMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vU0RMLSR7UFZ9IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWQ5NmRmODQxNzU3MmEyYWZiNzgxYTdjNGM4MTFhODUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDZkMzE2YTc5M2U1ZTM0ODE1NWYwZGQ5M2I5Nzk3OTg5MzNmYjk4YWExZWRlYmNjMTA4ODI5ZDY0NzRhYWQwMCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9zZGwtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc3RhdGljIC0tZW5hYmxlLWNkcm9tIC0tZW5hYmxlLXRocmVhZHMgLS1lbmFibGUtdGltZXJzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1maWxlIC0tZGlzYWJsZS1vc3MgLS1kaXNhYmxlLWVzZCAtLWRpc2FibGUtYXJ0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRpc2thdWRpbyAtLWRpc2FibGUtbmFzIC0tZGlzYWJsZS1lc2Qtc2hhcmVkIC0tZGlzYWJsZS1lc2R0ZXN0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbWludGF1ZGlvIC0tZGlzYWJsZS1uYXNtIC0tZGlzYWJsZS12aWRlby1kZ2EgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12aWRlby1mYmNvbiAtLWRpc2FibGUtdmlkZW8tcHMyZ3MgLS1kaXNhYmxlLXZpZGVvLXBzMyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhiaW9zIC0tZGlzYWJsZS1nZW0gLS1kaXNhYmxlLXZpZGVvLWR1bW15IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnB1dC1ldmVudHMgLS1lbmFibGUtaW5wdXQtdHNsaWIgLS1lbmFibGUtcHRocmVhZHMgXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnLS1lbmFibGUtdmlkZW8tZGlyZWN0ZmInLCAnLS1kaXNhYmxlLXZpZGVvLWRpcmVjdGZiJywgZCl9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICctLWVuYWJsZS12aWRlby1vcGVuZ2wnLCAnLS1kaXNhYmxlLXZpZGVvLW9wZW5nbCcsIGQpfSBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnLS1lbmFibGUtdmlkZW8teDExJywgJy0tZGlzYWJsZS12aWRlby14MTEnLCBkKX0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12aWRlby1zdmdhIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tcGljb2d1aSAtLWRpc2FibGUtdmlkZW8tcXRvcGlhIC0tZW5hYmxlLXNkbC1kbG9wZW4gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXB1bHNlYXVkaW8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2Fsc2FdID0gIi0tZW5hYmxlLWFsc2EgLS1kaXNhYmxlLWFsc2F0ZXN0LC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliLCIKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1pbmNsdWRlPWFjaW5jbHVkZSAtLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgICMgUmVtb3ZlIG9sZCBsaWJ0b29sIG1hY3Jvcy4KKyAgICAgICAgTUFDUk9TPSJsaWJ0b29sLm00IGx0fm9ic29sZXRlLm00IGx0b3B0aW9ucy5tNCBsdHN1Z2FyLm00IGx0dmVyc2lvbi5tNCIKKyAgICAgICAgZm9yIGkgaW4gJHtNQUNST1N9OyBkbworICAgICAgICAgICAgICAgcm0gLWYgJHtTfS9hY2luY2x1ZGUvJGkKKyAgICAgICAgZG9uZQorICAgICAgICBleHBvcnQgU1lTUk9PVD0kUEtHX0NPTkZJR19TWVNST09UX0RJUgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZjY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC4zLmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIgorREVTQ1JJUFRJT04gPSAiU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIGlzIGEgY3Jvc3MtcGxhdGZvcm0gbXVsdGltZWRpYSBcCitsaWJyYXJ5IGRlc2lnbmVkIHRvIHByb3ZpZGUgbG93IGxldmVsIGFjY2VzcyB0byBhdWRpbywga2V5Ym9hcmQsIG1vdXNlLCBcCitqb3lzdGljaywgM0QgaGFyZHdhcmUgdmlhIE9wZW5HTCwgYW5kIDJEIHZpZGVvIGZyYW1lYnVmZmVyLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlic2RsLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmxpYnNkbC5vcmcvIgorCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiWmxpYiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT02N2RjYjdmYWUxNjk1MjU1N2JjNWY5NmU5ZWI1ZDE4OCIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJzZGwyIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEgbmF0aXZlc2RrLWxpYnhyYW5kciBuYXRpdmVzZGstbGlieHJlbmRlciBuYXRpdmVzZGstbGlieGV4dCcsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnL3JlbGVhc2UvU0RMMi0ke1BWfS50YXIuZ3oiCisKK1MgPSAiJHtXT1JLRElSfS9TREwyLSR7UFZ9IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmU2YzYxZDJlOWRmOWVmNTcwZTdlODBjNmU4MjI1MzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTVhNjlhNmFiZjgwYmNjZTcxM2ZhODczNjA3NzM1ZmU3MTJmNDQyNzZhN2YwNDhkNjBhNjFiYjJmNmIzYzkwYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgYmluY29uZmlnIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW9zcyAtLWRpc2FibGUtZXNkIC0tZGlzYWJsZS1hcnRzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGlza2F1ZGlvIC0tZGlzYWJsZS1uYXMgLS1kaXNhYmxlLWVzZC1zaGFyZWQgLS1kaXNhYmxlLWVzZHRlc3QgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12aWRlby1kdW1teSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNkbC1kbG9wZW4gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCIKKworIyBvcGVuZ2wgcGFja2FnZWNvbmZpZyBmYWN0b3JlZCBvdXQgdG8gbWFrZSBpdCBlYXN5IGZvciBkaXN0cm9zCisjIGFuZCBCU1AgbGF5ZXJzIHRvIHBpY2sgZWl0aGVyIChkZXNrdG9wKSBvcGVuZ2wsIGdsZXMyLCBvciBubyBHTAorUEFDS0FHRUNPTkZJR19HTCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnb3BlbmdsJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgJHtQQUNLQUdFQ09ORklHX0dMfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1thbHNhXSAgICAgICA9ICItLWVuYWJsZS1hbHNhIC0tZGlzYWJsZS1hbHNhdGVzdCwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiwiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSAgID0gIi0tZW5hYmxlLXZpZGVvLWRpcmVjdGZiIC0tZGlzYWJsZS12aWRlby1kaXJlY3RmYixkaXJlY3RmYiIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdICAgICAgPSAiLS1lbmFibGUtdmlkZW8tb3BlbmdsZXMsLS1kaXNhYmxlLXZpZGVvLW9wZW5nbGVzLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW29wZW5nbF0gICAgID0gIi0tZW5hYmxlLXZpZGVvLW9wZW5nbCwtLWRpc2FibGUtdmlkZW8tb3BlbmdsLHZpcnR1YWwvbGliZ2wiCitQQUNLQUdFQ09ORklHW3B1bHNlYXVkaW9dID0gIi0tZW5hYmxlLXB1bHNlYXVkaW8sLS1kaXNhYmxlLXB1bHNlYXVkaW8scHVsc2VhdWRpbyIKK1BBQ0tBR0VDT05GSUdbdHNsaWJdICAgICAgPSAiLS1lbmFibGUtaW5wdXQtdHNsaWIsLS1kaXNhYmxlLWlucHV0LXRzbGliLHRzbGliIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSAgICA9ICItLWVuYWJsZS12aWRlby13YXlsYW5kLC0tZGlzYWJsZS12aWRlby13YXlsYW5kLHdheWxhbmQiCitQQUNLQUdFQ09ORklHW3gxMV0gICAgICAgID0gIi0tZW5hYmxlLXZpZGVvLXgxMSwtLWRpc2FibGUtdmlkZW8teDExLHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHJhbmRyIGxpYnhyZW5kZXIiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0taW5jbHVkZT1hY2luY2x1ZGUgLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICAjIFJlbW92ZSBvbGQgbGlidG9vbCBtYWNyb3MuCisgICAgICAgIE1BQ1JPUz0ibGlidG9vbC5tNCBsdH5vYnNvbGV0ZS5tNCBsdG9wdGlvbnMubTQgbHRzdWdhci5tNCBsdHZlcnNpb24ubTQiCisgICAgICAgIGZvciBpIGluICR7TUFDUk9TfTsgZG8KKyAgICAgICAgICAgICAgIHJtIC1mICR7U30vYWNpbmNsdWRlLyRpCisgICAgICAgIGRvbmUKKyAgICAgICAgZXhwb3J0IFNZU1JPT1Q9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L01JVC1zdHlsZS1saWNlbnNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOGRlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L01JVC1zdHlsZS1saWNlbnNlCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwMSBSZWQgSGF0LCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBSZWQgSGF0IG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBSZWQgSGF0IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogUkVEIEhBVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTAorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgUkVEIEhBVAorICogQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIAorICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3I6ICBPd2VuIFRheWxvciwgUmVkIEhhdCwgSW5jLgorICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9kaXNhYmxlX09zX29wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI3ZWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9kaXNhYmxlX09zX29wdGlvbi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0RvIG5vdCBzZXQgT3Mgb3B0aW1pemF0aW9uIGluIHRhcmdldCBBUFAgQ0ZMQUdTLCBzaW5jZSBpdCBtYXkgaGF2ZSBwb3RlbnRpYWwKK2Vycm9yIGlmICItLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UiIGlzIG5vdCBzZXQgd2hlbiBjb25maWd1cmluZyBHQ0MuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK2RpZmYgLXJ1TiBYc2V0dGluZ3MtY2xpZW50LTAuMTAtb3JpZy9jb25maWd1cmUuYWMgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYworLS0tIFhzZXR0aW5ncy1jbGllbnQtMC4xMC1vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTA5LTIxIDE0OjAxOjQ3LjAwMDAwMDAwMCArMDgwMAorKysrIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMJMjAxMC0wOS0yMSAxNDowMjowMS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zLDcgKzMsNyBAQAorIEFNX0lOSVRfQVVUT01BS0UoWHNldHRpbmdzLWNsaWVudCwgMC4xMCkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorIAorLUNGTEFHUz0iLU9zIC1XYWxsIgorK0NGTEFHUz0iLU8yIC1XYWxsIgorIAorICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyBBQ19QUk9HX0NDCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhkMGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBYc2V0dGluZ3MtY2xpZW50LTAuMTAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBYc2V0dGluZ3MtY2xpZW50LTAuMTAub3JpZy9NYWtlZmlsZS5hbQkyMDA4LTAyLTA3IDE0OjQ5OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9NYWtlZmlsZS5hbQkyMDA4LTAyLTA3IDE0OjUwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTksNCArOSw0IEBACisgCisgbGliWHNldHRpbmdzX2NsaWVudF9sYV9TT1VSQ0VTPSAkKHNvdXJjZV9jKSAkKHNvdXJjZV9oKQorIAorLWxpYlhzZXR0aW5nc19jbGllbnRfbGFfTElCQUREICAgICAgPSBAWF9MSUJTQAorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrbGliWHNldHRpbmdzX2NsaWVudF9sYV9MSUJBREQgICAgICA9IEBYX0xJQlNAIC1sWDExCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNWQwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCistLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYwkyMDAzLTAzLTI4IDEyOjM5OjUxLjAwMDAwMDAwMCArMDIwMAorKysrIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMJMjAxMy0wMS0xMSAwNzozNzoyMS40OTE1OTc3NDMgKzAyMDAKK0BAIC0xLDcgKzEsNyBAQAorICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyBBQ19JTklUKHhzZXR0aW5ncy1jbGllbnQuYykKKyBBTV9JTklUX0FVVE9NQUtFKFhzZXR0aW5ncy1jbGllbnQsIDAuMTApCistQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKworIENGTEFHUz0iLU9zIC1XYWxsIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGQ5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50XzAuMTAuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJ1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIFhzZXR0aW5ncyBwcm90b2NvbCIKK0RFU0NSSVBUSU9OID0gIkxpYnJhcmllcyB1c2VkIGZvciBhcHBsaWNhdGlvbnMgbWFraW5nIHVzZSBvZiB0aGUgWHNldHRpbmdzIGNvbmZpZ3VyYXRpb24gXAorc2V0dGluZyBwcm9wYWdhdGlvbiBwcm90b2NvbC4gQ29udHJvbHMgc2V0dGluZyBvZiBkb3VibGUgY2xpY2sgdGltZW91dCwgZHJhZy1hbmQtZHJvcCBcCit0aHJlc2hvbGQsIGFuZCBkZWZhdWx0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGZvciBhbGwgYXBwbGljYXRpb25zIHJ1bm5pbmcgd2l0aGluIGEgXAorZGVza3RvcC4iCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmcvc291cmNlcy9vcHRpb25hbC1kZXBlbmRlbmNpZXMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitTRUNUSU9OID0gIngvbGlicyIKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNsaWVudC5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jb21tb24uaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiIKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEiCisKK1BSID0gInI1IgorCitoZWFkZXJzID0gInhzZXR0aW5ncy1jb21tb24uaCB4c2V0dGluZ3MtY2xpZW50LmgiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94L29wdGlvbmFsLWRlcGVuZGVuY2llcy9Yc2V0dGluZ3MtY2xpZW50LTAuMTAudGFyLmd6IFwKKyAgICAgICAgZmlsZTovL01JVC1zdHlsZS1saWNlbnNlIFwKKyAgICAgICAgZmlsZTovL2xpbmsteDExLnBhdGNoO2FwcGx5PXllcyBcCisgICAgICAgIGZpbGU6Ly9kaXNhYmxlX09zX29wdGlvbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzE0YWE5ZGI2YzA5N2UwMzA2ZGFjOTdmYjdkYTFhZGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjI3NGE0YmM5NjlhZTE5Mjk5NGE4NTZiN2Y3ODZjNmZjZTk2YmFlNzdmOTZjMWMyYjcxZGQ5NzU5OWUwNmU0MyIKKworUyA9ICIke1dPUktESVJ9L1hzZXR0aW5ncy1jbGllbnQtMC4xMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBUaGlzIHBhY2thZ2UgZG9lc24ndCBzaGlwIHdpdGggaXRzIG93biBDT1BZSU5HIGZpbGUgYW5kCisgICAgIyBhdXRvdG9vbHMgd2lsbCBpbnN0YWxsIGEgR1BMdjIgb25lIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBNSVQtc3R5bGUgbGljZW5zZSBoZXJlLgorICAgICMgQWRkIHRoZSBjb3JyZWN0IGxpY2Vuc2UgaGVyZSB0byBhdm9pZCBjb25mdXNpb24uCisgICAgY3AgLWYgJHtXT1JLRElSfS9NSVQtc3R5bGUtbGljZW5zZSAke1N9L0NPUFlJTkcKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmNhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24KQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisjCisjIFZlcnkgc2ltcGxlIHNlc3Npb24gbWFuYWdlciBmb3IgbWF0Y2hib3ggdG9vbHMKKyMKKworIyBVbmNvbW1lbnQgYmVsb3cgdG8gZW5hYmxlIHBhcnNpbmcgb2YgZGViaWFuIG1lbnUgZW50cnlzCisjIGV4cG9ydCBNQl9VU0VfREVCX01FTlVTPTEgCisKK2lmIFsgLWUgJEhPTUUvLm1hdGNoYm94L3Nlc3Npb24gXQordGhlbgorZXhlYyAkSE9NRS8ubWF0Y2hib3gvc2Vzc2lvbgorZmkKKworaWYgWyAtZSAvZXRjL21hdGNoYm94L3Nlc3Npb24gXQordGhlbgorZXhlYyAvZXRjL21hdGNoYm94L3Nlc3Npb24KK2ZpCisKKyMgRGVmYXVsdCBmaWxlcyB0byBydW4gaWYgJEhPTUUvLm1hdGNoYm94L3Nlc3Npb24gb3IgL2V0Yy9tYXRjaGJveC9zZXNzaW9uCisjIGRvbnQgZXhpc3QuIAorCittYXRjaGJveC1kZXNrdG9wICYKK21hdGNoYm94LXBhbmVsICYKK2V4ZWMgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIgJEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb25fMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhZjA1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb25fMC4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiQ3VzdG9tIE1hdGNoYm94IHNlc3Npb24gZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbWF0Y2hib3gtc2Vzc2lvbjtlbmRsaW5lPTIwO21kNT0xODBmMWMxNjlhMTVkMDU5YTU2YzMwMDk0ZjZmYjVlYSIKKworU0VDVElPTiA9ICJ4MTEiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKKworU1JDX1VSSSA9ICJmaWxlOi8vbWF0Y2hib3gtc2Vzc2lvbiIKK1MgPSAiJHtXT1JLRElSfSIKKworUFIgPSAicjQiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ4LXNlc3Npb24tbWFuYWdlciIKK0FMVEVSTkFUSVZFX1RBUkdFVFt4LXNlc3Npb24tbWFuYWdlcl0gPSAiJHtiaW5kaXJ9L21hdGNoYm94LXNlc3Npb24iCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L21hdGNoYm94LXNlc3Npb24gJHtEfS8ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd20va2JkY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWRhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd20va2JkY29uZmlnCkBAIC0wLDAgKzEsNDIgQEAKKyMKKyMgVGhpcyBpcyBhbiBleGFtcGxlIGtleWJvYXJkIGNvbmZpZyBmaWxlIGZvciBtYXRjaGJveAorIworIyBZb3UgY2FuIGVkaXQgdGhpcyBmaWxlIG9yIGNoYW5nZSBwZXIgdXNlciBieSBjb3B5aW5nIHRvIAorIyAgfi8ubWF0Y2hib3gva2JkY29uZmlnCisjCisjIFNlIHRoZSBtYXRjaGJveCBtYW51YWwgZm9yIG1vcmUgaW5mbyAoIGh0dHA6Ly9wcm9qZWN0cy5vLWhhbmQuY29tL21hdGNoYm94ICkKKworIyMjIFdpbmRvdyBvcGVyYXRpb24gc2hvcnQgY3V0cyAKKworPEFsdD5uPW5leHQKKzxBbHQ+cD1wcmV2Cis8QWx0PmM9Y2xvc2UKKzxBbHQ+ZD1kZXNrdG9wCis8QWx0Pm09IW1hdGNoYm94LXJlbW90ZSAtbWJtZW51CisKKyMjIyBBcHAgbGF1bmNoaW5nLgorCis8Y3RybD48YWx0Png9IXh0ZXJtCis8Y3RybD48YWx0PnI9IXJ4dnQKKworIyMjIHBva3kgYWRkaXRpb25zCisKK1hGODZDYWxlbmRhcj0hJGNvbnRhY3RzCit0ZWxlcGhvbmU9ISRkYXRlcworWEY4NlN0YXJ0PSFtYXRjaGJveC1yZW1vdGUgLWRlc2t0b3AKK0YyPSFtYXRjaGJveC1yZW1vdGUgLW1ibWVudQorCisjWEY4Nk1haWw9ISR0YXNrcworI0VzY2FwZT1jbG9zZQorCisjIyMgd2luZG93cyBzdHlsZSBrZXkgc2hvcnRjdXRzCisKKzxhbHQ+VGFiPW5leHQKKzxhbHQ+PHNoaWZ0PlRhYj1wcmV2CisKKzxhbHQ+c3BhY2U9dGFza21lbnUKKzxhbHQ+ZXNjYXBlPSFtYXRjaGJveC1yZW1vdGUgLW1ibWVudQorPGFsdD5mND1jbG9zZQorCitmMTE9ZnVsbHNjcmVlbgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJkMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtX2dpdC5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIk1hdGNoYm94IGxpZ2h0d2VpZ2h0IHdpbmRvdyBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3dtLmg7ZW5kbGluZT0yMTttZDU9YTdlODQ0NDY1ZWRiY2Y3OWMyODIzNjlmOTNjYWE4MzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTIxO21kNT0zZTVkOWY4MzJiNTI3YjBkNzJkYmU4ZTNjNGM2MGI5NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvd20uYztlbmRsaW5lPTIxO21kNT04ZGM5ZDI0NDc3ZDg3ZWY1ZGZiYzJlNDkyNzE0NmFhYiIKKworU0VDVElPTiA9ICJ4MTEvd20iCitERVBFTkRTID0gImxpYm1hdGNoYm94IHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHJlbmRlciBzdGFydHVwLW5vdGlmaWNhdGlvbiBleHBhdCBnY29uZiBsaWJ4Y3Vyc29yIGxpYnhmaXhlcyIKKworU1JDUkVWID0gIjI5NTQ0ZjBlNjFjYzI4MWZjNjAwNjE0NDNhNTM3MjcxZTEwODFiNzgiCitQViA9ICIxLjIrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWF0Y2hib3gtd2luZG93LW1hbmFnZXIgXAorICAgICAgICAgICBmaWxlOi8va2JkY29uZmlnIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9ibG9uZGllL21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL0RlZmF1bHQvbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvTUJPcHVzL21hdGNoYm94IgorCitFWFRSQV9PRUNPTkYgPSAiIC0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhybSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWV4cGF0IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWV4cGF0LWxpYj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1leHBhdC1pbmNsdWRlcz0ke1NUQUdJTkdfSU5DRElSfSIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworCWluc3RhbGwgJHtXT1JLRElSfS9rYmRjb25maWcgJHtTfS9kYXRhL2tiZGNvbmZpZworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5MDlmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjAuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBjYWNoaW5nIGFwcGxpY2F0aW9uIG1lbnVzIgorREVTQ1JJUFRJT04gPSAiQSBsaWJyYXJ5IGNyZWF0aW5nIGFuZCB1dGlsaXppbmcgY2FjaGVzIHRvIHNwZWVkIHVwIGZyZWVkZXNrdG9wLm9yZyBhcHBsaWNhdGlvbiBtZW51cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9seGRlLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDk2NGM2ODlmY2Y0YzIxYzY3OTdlYTg3NDA4NDE2YjYiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSBsaWJmbS1leHRyYSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbHhkZS9tZW51LWNhY2hlLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhOGU2YzFhODZkNWU2NGVjNzI1ZDg1MGE0YWJmYmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmN2RmNDM3YmJmZDMxMTljNWY2NjJjNmQyMDliOThmMTVkZTAzYTcyMDMzMDhjNmI1NmE0YzFlMWQ0MTlhYWYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIGd0ay1kb2MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA5OThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbGliZ2x1XzkuMC4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiVGhlIE9wZW5HTCB1dGlsaXR5IHRvb2xraXQiCitERVNDUklQVElPTiA9ICJHTFUgaXMgYSB1dGlsaXR5IHRvb2xraXQgdXNlZCB3aXRoIE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9tZXNhM2Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2luY2x1ZGUvR0wvZ2x1Lmg7ZW5kbGluZT0yOTttZDU9NmI3OWM1NzBmNjQ0MzYzYjM1NjQ1NmU3ZDQ0NDcxZDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2xpYnRlc3MvdGVzcy5jO2VuZGxpbmU9Mjk7bWQ1PTZiNzljNTcwZjY0NDM2M2IzNTY0NTZlN2Q0NDQ3MWQ5IgorCisjIEVwb2NoIGFzIHRoaXMgdXNlZCB0byBiZSBwYXJ0IG9mIG1lc2EKK1BFID0gIjIiCitQUiA9ICIwIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5mcmVlZGVza3RvcC5vcmcvcHViL21lc2EvZ2x1L2dsdS0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmU5MjQ5MTMyZmY0OTI3NTQ2MWNmOTIwMzkwODMwMzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWY3YWQwZDM3OWE3MjJmY2JkMzAzYWE1NjUwYzZkN2Q1NTQ0ZmRlODMxOTZiNDJhNzNkMTE5MzU2OGE0ZGYxMiIKKworUyA9ICIke1dPUktESVJ9L2dsdS0ke1BWfSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmdsIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgUmVxdWlyZXMgbGliR0wuc28gd2hpY2ggaXMgcHJvdmlkZWQgYnkgbWVzYSB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKKyMgUmVtb3ZlIHRoZSBtZXNhLWdsdSBkZXBlbmRlbmN5IGluIG1lc2EtZ2x1LWRldiwgYXMgbWVzYS1nbHUgaXMgZW1wdHkKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2VlOWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaApAQCAtMCwwICsxLDYyNCBAQAorRnJvbSBiNjk1YzNhM2ZhM2Y0Y2Q0OGMxM2FhMjY1NDIxMTBkZTI3MDc1NTE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK0RhdGU6IE1vbiwgMTIgTWF5IDIwMTQgMTU6MjI6MzIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzldIG1lc2EtZGVtb3M6IEFkZCBtaXNzaW5nIGRhdGEgZmlsZXMuCisKK0FkZCBzb21lIGRhdGEgZmlsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnk6CisgICBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvbWVzYS9kZW1vcy90cmVlLz9pZD1tZXNhLWRlbW9zLTguMS4wCitidXQgbm90IGluIHRoZSByZWxlYXNlIHRhcmJhbGwKKyAgIGZ0cDovL2Z0cC5mcmVlZGVza3RvcC5vcmcvcHViL21lc2EvZGVtb3MvOC4xLjAvbWVzYS1kZW1vcy04LjEuMC50YXIuYnoyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbCAgICAgIHwgICA0ICsKKyBzcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCAgIHwgICA3ICsKKyBzcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZyAgIHwgIDQ3ICsrKysrKysKKyBzcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZyAgIHwgIDMxICsrKysrCisgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQgICB8ICAxNiArKysKKyBzcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnICAgICAgIHwgIDIxICsrKworIHNyYy9nbHNsL3NpbXBsZXgtbm9pc2UuZ2xzbCAgICAgfCAyNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9nbHNsL3NraW5uaW5nLnZlcnQgICAgICAgICAgfCAgMjQgKysrKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcgfCAgMTkgKysrCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydCB8ICAxNCArKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcgfCAgMTcgKysrCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydCB8ICAxNCArKworIHNyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsICAgfCAgIDggKysKKyAxMyBmaWxlcyBjaGFuZ2VkLCA1MDEgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL3NpbXBsZXgtbm9pc2UuZ2xzbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9za2lubmluZy52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKKworZGlmZiAtLWdpdCBhL3NyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsIGIvc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44NmQyOThlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbAorQEAgLTAsMCArMSw0IEBACisrdm9pZCBtYWluKCkKKyt7CisrICAgZ2xfRnJhZ0NvbG9yID0gZ2xfRnJhZ0Nvb3JkLnp6eno7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsIGIvc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jNmRjNmVlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorQEAgLTAsMCArMSw3IEBACisrdm9pZCBtYWluKCkgeworKyAgIHZlYzQgc3VtID0gdmVjNCgwKTsKKysgICBmb3IgKGludCBpID0gMTsgaSAhPSAyOyBpICs9IDIpIHsKKysgICAgICBzdW0gKz0gdmVjNCgwLjEsIDAuMSwgMC4xLCAwLjEpOworKyAgIH0KKysgICBnbF9GcmFnQ29sb3IgPSBzdW07CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnIGIvc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNWRhYmI0CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZworQEAgLTAsMCArMSw0NyBAQAorKy8vCisrLy8gRnJhZ21lbnQgc2hhZGVyIGZvciBwcm9jZWR1cmFsIGJ1bXBzCisrLy8KKysvLyBBdXRob3JzOiBKb2huIEtlc3NlbmljaCwgUmFuZGkgUm9zdAorKy8vCisrLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYgM0RsYWJzIEluYy4gTHRkLiAKKysvLworKy8vIFNlZSAzRGxhYnMtTGljZW5zZS50eHQgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24KKysvLworKy8vIFRleHR1cmUgbWFwcGluZy9tb2R1bGF0aW9uIGFkZGVkIGJ5IEJyaWFuIFBhdWwKKysvLworKworK3ZhcnlpbmcgdmVjMyBMaWdodERpcjsKKyt2YXJ5aW5nIHZlYzMgRXllRGlyOworKworK3VuaWZvcm0gZmxvYXQgQnVtcERlbnNpdHk7ICAgICAvLyA9IDE2LjAKKyt1bmlmb3JtIGZsb2F0IEJ1bXBTaXplOyAgICAgICAgLy8gPSAwLjE1CisrdW5pZm9ybSBmbG9hdCBTcGVjdWxhckZhY3RvcjsgIC8vID0gMC41CisrCisrdW5pZm9ybSBzYW1wbGVyMkQgVGV4OworKworK3ZvaWQgbWFpbigpCisreworKyAgICB2ZWMzIGFtYmllbnQgPSB2ZWMzKDAuMjUpOworKyAgICB2ZWMzIGxpdENvbG9yOworKyAgICB2ZWMyIGMgPSBCdW1wRGVuc2l0eSAqIGdsX1RleENvb3JkWzBdLnN0OworKyAgICB2ZWMyIHAgPSBmcmFjdChjKSAtIHZlYzIoMC41KTsKKysKKysgICAgZmxvYXQgZCwgZjsKKysgICAgZCA9IHAueCAqIHAueCArIHAueSAqIHAueTsKKysgICAgZiA9IGludmVyc2VzcXJ0KGQgKyAxLjApOworKworKyAgICBpZiAoZCA+PSBCdW1wU2l6ZSkKKysgICAgICAgIHsgcCA9IHZlYzIoMC4wKTsgZiA9IDEuMDsgfQorKworKyAgICB2ZWMzIFN1cmZhY2VDb2xvciA9IHRleHR1cmUyRChUZXgsIGdsX1RleENvb3JkWzBdLnN0KS54eXo7CisrCisrICAgIHZlYzMgbm9ybURlbHRhID0gdmVjMyhwLngsIHAueSwgMS4wKSAqIGY7CisrICAgIGxpdENvbG9yID0gU3VyZmFjZUNvbG9yICogKGFtYmllbnQgKyBtYXgoZG90KG5vcm1EZWx0YSwgTGlnaHREaXIpLCAwLjApKTsKKysgICAgdmVjMyByZWZsZWN0RGlyID0gcmVmbGVjdChMaWdodERpciwgbm9ybURlbHRhKTsKKysgICAgCisrICAgIGZsb2F0IHNwZWMgPSBtYXgoZG90KEV5ZURpciwgcmVmbGVjdERpciksIDAuMCk7CisrICAgIHNwZWMgKj0gU3BlY3VsYXJGYWN0b3I7CisrICAgIGxpdENvbG9yID0gbWluKGxpdENvbG9yICsgc3BlYywgdmVjMygxLjApKTsKKysKKysgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChsaXRDb2xvciwgMS4wKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjBkYjA2MGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnCitAQCAtMCwwICsxLDMxIEBACisrI2V4dGVuc2lvbiBHTF9BUkJfdW5pZm9ybV9idWZmZXJfb2JqZWN0IDogZW5hYmxlCisrCisrbGF5b3V0KHN0ZDE0MCkgdW5pZm9ybSBjb2xvcnMwCisreworKyAgICBmbG9hdCBEaWZmdXNlQ29vbDsKKysgICAgZmxvYXQgRGlmZnVzZVdhcm07CisrICAgIHZlYzMgIFN1cmZhY2VDb2xvcjsKKysgICAgdmVjMyAgV2FybUNvbG9yOworKyAgICB2ZWMzICBDb29sQ29sb3I7CisrICAgIHZlYzQgIHNvbWVbOF07CisrfTsKKysKKyt2YXJ5aW5nIGZsb2F0IE5kb3RMOworK3ZhcnlpbmcgdmVjMyAgUmVmbGVjdFZlYzsKKyt2YXJ5aW5nIHZlYzMgIFZpZXdWZWM7CisrCisrdm9pZCBtYWluICh2b2lkKQorK3sKKysKKysgICAgdmVjMyBrY29vbCAgICA9IG1pbihDb29sQ29sb3IgKyBEaWZmdXNlQ29vbCAqIFN1cmZhY2VDb2xvciwgMS4wKTsKKysgICAgdmVjMyBrd2FybSAgICA9IG1pbihXYXJtQ29sb3IgKyBEaWZmdXNlV2FybSAqIFN1cmZhY2VDb2xvciwgMS4wKTsKKysgICAgdmVjMyBrZmluYWwgICA9IG1peChrY29vbCwga3dhcm0sIE5kb3RMKTsKKysKKysgICAgdmVjMyBucmVmbGVjdCA9IG5vcm1hbGl6ZShSZWZsZWN0VmVjKTsKKysgICAgdmVjMyBudmlldyAgICA9IG5vcm1hbGl6ZShWaWV3VmVjKTsKKysKKysgICAgZmxvYXQgc3BlYyAgICA9IG1heChkb3QobnJlZmxlY3QsIG52aWV3KSwgMC4wKTsKKysgICAgc3BlYyAgICAgICAgICA9IHBvdyhzcGVjLCAzMi4wKTsKKysKKysgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCAobWluKGtmaW5hbCArIHNwZWMsIDEuMCksIDEuMCk7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0IGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zOTdkNzMzCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydAorQEAgLTAsMCArMSwxNiBAQAorK3ZlYzMgTGlnaHRQb3NpdGlvbiA9IHZlYzMoMC4wLCAxMC4wLCA0LjApOyAKKysgCisrdmFyeWluZyBmbG9hdCBOZG90TDsKKyt2YXJ5aW5nIHZlYzMgIFJlZmxlY3RWZWM7CisrdmFyeWluZyB2ZWMzICBWaWV3VmVjOworKyAKKyt2b2lkIG1haW4odm9pZCkKKyt7CisrICAgIHZlYzMgZWNQb3MgICAgICA9IHZlYzMgKGdsX01vZGVsVmlld01hdHJpeCAqIGdsX1ZlcnRleCk7CisrICAgIHZlYzMgdG5vcm0gICAgICA9IG5vcm1hbGl6ZShnbF9Ob3JtYWxNYXRyaXggKiBnbF9Ob3JtYWwpOworKyAgICB2ZWMzIGxpZ2h0VmVjICAgPSBub3JtYWxpemUoTGlnaHRQb3NpdGlvbiAtIGVjUG9zKTsKKysgICAgUmVmbGVjdFZlYyAgICAgID0gbm9ybWFsaXplKHJlZmxlY3QoLWxpZ2h0VmVjLCB0bm9ybSkpOworKyAgICBWaWV3VmVjICAgICAgICAgPSBub3JtYWxpemUoLWVjUG9zKTsKKysgICAgTmRvdEwgICAgICAgICAgID0gKGRvdChsaWdodFZlYywgdG5vcm0pICsgMS4wKSAqIDAuNTsKKysgICAgZ2xfUG9zaXRpb24gICAgID0gZnRyYW5zZm9ybSgpOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnIGIvc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmU0OWI4YWMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcKK0BAIC0wLDAgKzEsMjEgQEAKKysKKytjb25zdCBpbnQgS2VybmVsU2l6ZSA9IDk7CisrCisrLy90ZXh0dXJlIG9mZnNldHMKKyt1bmlmb3JtIHZlYzIgT2Zmc2V0W0tlcm5lbFNpemVdOworKy8vY29udm9sdXRpb24ga2VybmVsCisrdW5pZm9ybSB2ZWM0IEtlcm5lbFZhbHVlW0tlcm5lbFNpemVdOworK3VuaWZvcm0gc2FtcGxlcjJEIHNyY1RleDsKKyt1bmlmb3JtIHZlYzQgU2NhbGVGYWN0b3I7CisrdW5pZm9ybSB2ZWM0IEJhc2VDb2xvcjsKKysKKyt2b2lkIG1haW4odm9pZCkKKyt7CisrICAgIGludCBpOworKyAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTsKKysgICAgZm9yIChpID0gMDsgaSA8IEtlcm5lbFNpemU7ICsraSkgeworKyAgICAgICAgdmVjNCB0bXAgPSB0ZXh0dXJlMkQoc3JjVGV4LCBnbF9UZXhDb29yZFswXS5zdCArIE9mZnNldFtpXSk7CisrICAgICAgICBzdW0gKz0gdG1wICogS2VybmVsVmFsdWVbaV07CisrICAgIH0KKysgICAgZ2xfRnJhZ0NvbG9yID0gc3VtICogU2NhbGVGYWN0b3IgKyBCYXNlQ29sb3I7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuZ2xzbCBiL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI2ODMzY2IKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuZ2xzbAorQEAgLTAsMCArMSwyNzkgQEAKKysvLworKy8vIERlc2NyaXB0aW9uIDogQXJyYXkgYW5kIHRleHR1cmVsZXNzIEdMU0wgMkQvM0QvNEQgc2ltcGxleAorKy8vIG5vaXNlIGZ1bmN0aW9ucy4KKysvLyBBdXRob3IgOiBJYW4gTWNFd2FuLCBBc2hpbWEgQXJ0cy4KKysvLyBNYWludGFpbmVyIDogaWptCisrLy8gTGFzdG1vZCA6IDIwMTEwMjIzCisrLy8gTGljZW5zZSA6IENvcHlyaWdodCAoQykgMjAxMSBBc2hpbWEgQXJ0cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQXJ0aXN0aWMgTGljZW5zZSAyLjA7IFNlZSBMSUNFTkNFIGZpbGUuCisrLy8KKysKKysjZGVmaW5lIE5PUk1BTElaRV9HUkFESUVOVFMKKysjdW5kZWYgVVNFX0NJUkNMRQorKyNkZWZpbmUgQ09MTEFQU0VfU09SVE5FVAorKworK2Zsb2F0IHBlcm11dGUoZmxvYXQgeDAsdmVjMyBwKSB7CisrICBmbG9hdCB4MSA9IG1vZCh4MCAqIHAueSwgcC54KTsKKysgIHJldHVybiBmbG9vciggbW9kKCAoeDEgKyBwLnopICp4MCwgcC54ICkpOworKyAgfQorK3ZlYzIgcGVybXV0ZSh2ZWMyIHgwLHZlYzMgcCkgeworKyAgdmVjMiB4MSA9IG1vZCh4MCAqIHAueSwgcC54KTsKKysgIHJldHVybiBmbG9vciggbW9kKCAoeDEgKyBwLnopICp4MCwgcC54ICkpOworKyAgfQorK3ZlYzMgcGVybXV0ZSh2ZWMzIHgwLHZlYzMgcCkgeworKyAgdmVjMyB4MSA9IG1vZCh4MCAqIHAueSwgcC54KTsKKysgIHJldHVybiBmbG9vciggbW9kKCAoeDEgKyBwLnopICp4MCwgcC54ICkpOworKyAgfQorK3ZlYzQgcGVybXV0ZSh2ZWM0IHgwLHZlYzMgcCkgeworKyAgdmVjNCB4MSA9IG1vZCh4MCAqIHAueSwgcC54KTsKKysgIHJldHVybiBmbG9vciggbW9kKCAoeDEgKyBwLnopICp4MCwgcC54ICkpOworKyAgfQorKworK3VuaWZvcm0gdmVjNCBwUGFyYW07CisrLy8gRXhhbXBsZQorKy8vIGNvbnN0IHZlYzQgcFBhcmFtID0gdmVjNCggMTcuKiAxNy4sIDM0LiwgMS4sIDcuKTsKKysKKytmbG9hdCB0YXlsb3JJbnZTcXJ0KGZsb2F0IHIpCisrICB7CisrICByZXR1cm4gKCAwLjgzNjY2MDAyNjUzNDA4ICsgMC43KjAuODUzNzM0NzIwOTUzMTQgLSAwLjg1MzczNDcyMDk1MzE0ICogciApOworKyAgfQorKworK2Zsb2F0IHNpbXBsZXhOb2lzZTIodmVjMiB2KQorKyAgeworKyAgY29uc3QgdmVjMiBDID0gdmVjMigwLjIxMTMyNDg2NTQwNTE4NzEzNCwgLy8gKDMuMC1zcXJ0KDMuMCkpLzYuOworKyAgICAgICAgICAgICAgICAgICAgICAwLjM2NjAyNTQwMzc4NDQzODU5Nyk7IC8vIDAuNSooc3FydCgzLjApLTEuKTsKKysgIGNvbnN0IHZlYzMgRCA9IHZlYzMoIDAuLCAwLjUsIDIuMCkgKiAzLjE0MTU5MjY1MzU4OTc5MzEyOworKy8vIEZpcnN0IGNvcm5lcgorKyAgdmVjMiBpID0gZmxvb3IodiArIGRvdCh2LCBDLnl5KSApOworKyAgdmVjMiB4MCA9IHYgLSBpICsgZG90KGksIEMueHgpOworKworKy8vIE90aGVyIGNvcm5lcnMKKysgIHZlYzIgaTEgPSAoeDAueCA+IHgwLnkpID8gdmVjMigxLiwwLikgOiB2ZWMyKDAuLDEuKSA7CisrCisrICAgLy8geDAgPSB4MCAtIDAuICsgMC4gKiBDCisrICB2ZWMyIHgxID0geDAgLSBpMSArIDEuICogQy54eCA7CisrICB2ZWMyIHgyID0geDAgLSAxLiArIDIuICogQy54eCA7CisrCisrLy8gUGVybXV0YXRpb25zCisrICBpID0gbW9kKGksIHBQYXJhbS54KTsKKysgIHZlYzMgcCA9IHBlcm11dGUoIHBlcm11dGUoCisrICAgICAgICAgICAgIGkueSArIHZlYzMoMC4sIGkxLnksIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueCArIHZlYzMoMC4sIGkxLngsIDEuICksIHBQYXJhbS54eXopOworKworKyNpZm5kZWYgVVNFX0NJUkNMRQorKy8vICggTiBwb2ludHMgdW5pZm9ybWx5IG92ZXIgYSBsaW5lLCBtYXBwZWQgb250byBhIGRpYW1vbmQuKQorKyAgdmVjMyB4ID0gZnJhY3QocCAvIHBQYXJhbS53KSA7CisrICB2ZWMzIGggPSAwLjUgLSBhYnMoeCkgOworKworKyAgdmVjMyBzeCA9IHZlYzMobGVzc1RoYW4oeCxELnh4eCkpICoyLiAtMS47CisrICB2ZWMzIHNoID0gdmVjMyhsZXNzVGhhbihoLEQueHh4KSk7CisrCisrICB2ZWMzIGEwID0geCArIHN4KnNoOworKyAgdmVjMiBwMCA9IHZlYzIoYTAueCxoLngpOworKyAgdmVjMiBwMSA9IHZlYzIoYTAueSxoLnkpOworKyAgdmVjMiBwMiA9IHZlYzIoYTAueixoLnopOworKworKyNpZmRlZiBOT1JNQUxJU0VfR1JBRElFTlRTCisrICBwMCAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMCxwMCkpOworKyAgcDEgKj0gdGF5bG9ySW52U3FydChkb3QocDEscDEpKTsKKysgIHAyICo9IHRheWxvckludlNxcnQoZG90KHAyLHAyKSk7CisrI2VuZGlmCisrCisrICB2ZWMzIGcgPSAyLjAgKiB2ZWMzKCBkb3QocDAsIHgwKSwgZG90KHAxLCB4MSksIGRvdChwMiwgeDIpICk7CisrI2Vsc2UKKysvLyBOIHBvaW50cyBhcm91bmQgYSB1bml0IGNpcmNsZS4KKysgIHZlYzMgcGhpID0gRC56ICogbW9kKHAscFBhcmFtLncpIC9wUGFyYW0udyA7CisrICB2ZWM0IGEwID0gc2luKHBoaS54eHl5K0QueHl4eSk7CisrICB2ZWMyIGExID0gc2luKHBoaS56eiArRC54eSk7CisrICB2ZWMzIGcgPSB2ZWMzKCBkb3QoYTAueHksIHgwKSwgZG90KGEwLnp3LCB4MSksIGRvdChhMS54eSwgeDIpICk7CisrI2VuZGlmCisrLy8gbWl4CisrICB2ZWMzIG0gPSBtYXgoMC41IC0gdmVjMyhkb3QoeDAseDApLCBkb3QoeDEseDEpLCBkb3QoeDIseDIpKSwgMC4pOworKyAgbSA9IG0qbSA7CisrICByZXR1cm4gMS42NjY2NiogNzAuKmRvdChtKm0sIGcpOworKyAgfQorKworK2Zsb2F0IHNpbXBsZXhOb2lzZTModmVjMyB2KQorKyAgeworKyAgY29uc3QgdmVjMiBDID0gdmVjMigxLi82LiAsIDEuLzMuICkgOworKyAgY29uc3QgdmVjNCBEID0gdmVjNCgwLiwgMC41LCAxLjAsIDIuMCk7CisrCisrLy8gRmlyc3QgY29ybmVyCisrICB2ZWMzIGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXl5KSApOworKyAgdmVjMyB4MCA9IHYgLSBpICsgZG90KGksIEMueHh4KSA7CisrICAKKysvLyBPdGhlciBjb3JuZXJzCisrI2lmZGVmIENPTExBUFNFX1NPUlRORVQKKysgIHZlYzMgZyA9IHZlYzMoIGdyZWF0ZXJUaGFuKCB4MC54eXosIHgwLnl6eCkgKTsKKysgIHZlYzMgbCA9IHZlYzMoIGxlc3NUaGFuRXF1YWwoIHgwLnh5eiwgeDAueXp4KSApOworKworKyAgdmVjMyBpMSA9IGcueHl6ICogbC56eHk7CisrICB2ZWMzIGkyID0gbWF4KCBnLnh5eiwgbC56eHkpOworKyNlbHNlCisrLy8gS2VlcGluZyB0aGlzIGNsZWFuIC0gbGV0IHRoZSBjb21waWxlciBvcHRpbWl6ZS4KKysgIHZlYzMgcTE7CisrICBxMS54ID0gbWF4KHgwLngsIHgwLnkpOworKyAgcTEueSA9IG1pbih4MC54LCB4MC55KTsKKysgIHExLnogPSB4MC56OworKworKyAgdmVjMyBxMjsKKysgIHEyLnggPSBtYXgocTEueCxxMS56KTsKKysgIHEyLnogPSBtaW4ocTEueCxxMS56KTsKKysgIHEyLnkgPSBxMS55OworKworKyAgdmVjMyBxMzsKKysgIHEzLnkgPSBtYXgocTIueSwgcTIueik7CisrICBxMy56ID0gbWluKHEyLnksIHEyLnopOworKyAgcTMueCA9IHEyLng7CisrCisrICB2ZWMzIGkxID0gdmVjMyhlcXVhbChxMy54eHgsIHgwKSk7CisrICB2ZWMzIGkyID0gaTEgKyB2ZWMzKGVxdWFsKHEzLnl5eSwgeDApKTsKKysjZW5kaWYKKysKKysgICAvLyB4MCA9IHgwIC0gMC4gKyAwLiAqIEMKKysgIHZlYzMgeDEgPSB4MCAtIGkxICsgMS4gKiBDLnh4eDsKKysgIHZlYzMgeDIgPSB4MCAtIGkyICsgMi4gKiBDLnh4eDsKKysgIHZlYzMgeDMgPSB4MCAtIDEuICsgMy4gKiBDLnh4eDsKKysKKysvLyBQZXJtdXRhdGlvbnMKKysgIGkgPSBtb2QoaSwgcFBhcmFtLnggKTsKKysgIHZlYzQgcCA9IHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUoCisrICAgICAgICAgICAgIGkueiArIHZlYzQoMC4sIGkxLnosIGkyLnosIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueSArIHZlYzQoMC4sIGkxLnksIGkyLnksIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueCArIHZlYzQoMC4sIGkxLngsIGkyLngsIDEuICksIHBQYXJhbS54eXopOworKworKy8vIEdyYWRpZW50cworKy8vICggTipOIHBvaW50cyB1bmlmb3JtbHkgb3ZlciBhIHNxdWFyZSwgbWFwcGVkIG9udG8gYSBvY3RvaGVkcm9uLikKKysgIGZsb2F0IG5fID0gMS4wL3BQYXJhbS53IDsKKysgIHZlYzMgbnMgPSBuXyAqIEQud3l6IC0gRC54enggOworKworKyAgdmVjNCBqID0gcCAtIHBQYXJhbS53KnBQYXJhbS53KmZsb29yKHAgKiBucy56ICpucy56KTsgLy8gbW9kKHAsTipOKQorKworKyAgdmVjNCB4XyA9IGZsb29yKGogKiBucy56KSA7CisrICB2ZWM0IHlfID0gZmxvb3IoaiAtIHBQYXJhbS53ICogeF8gKSA7IC8vIG1vZChqLE4pCisrCisrICB2ZWM0IHggPSB4XyAqbnMueCArIG5zLnl5eXk7CisrICB2ZWM0IHkgPSB5XyAqbnMueCArIG5zLnl5eXk7CisrICB2ZWM0IGggPSAxLiAtIGFicyh4KSAtIGFicyh5KTsKKysKKysgIHZlYzQgYjAgPSB2ZWM0KCB4Lnh5LCB5Lnh5ICk7CisrICB2ZWM0IGIxID0gdmVjNCggeC56dywgeS56dyApOworKworKyAgdmVjNCBzMCA9IHZlYzQobGVzc1RoYW4oYjAsRC54eHh4KSkgKjIuIC0xLjsKKysgIHZlYzQgczEgPSB2ZWM0KGxlc3NUaGFuKGIxLEQueHh4eCkpICoyLiAtMS47CisrICB2ZWM0IHNoID0gdmVjNChsZXNzVGhhbihoLCBELnh4eHgpKTsKKysKKysgIHZlYzQgYTAgPSBiMC54enl3ICsgczAueHp5dypzaC54eHl5IDsKKysgIHZlYzQgYTEgPSBiMS54enl3ICsgczEueHp5dypzaC56end3IDsKKysKKysgIHZlYzMgcDAgPSB2ZWMzKGEwLnh5LGgueCk7CisrICB2ZWMzIHAxID0gdmVjMyhhMC56dyxoLnkpOworKyAgdmVjMyBwMiA9IHZlYzMoYTEueHksaC56KTsKKysgIHZlYzMgcDMgPSB2ZWMzKGExLnp3LGgudyk7CisrCisrI2lmZGVmIE5PUk1BTElTRV9HUkFESUVOVFMKKysgIHAwICo9IHRheWxvckludlNxcnQoZG90KHAwLHAwKSk7CisrICBwMSAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMSxwMSkpOworKyAgcDIgKj0gdGF5bG9ySW52U3FydChkb3QocDIscDIpKTsKKysgIHAzICo9IHRheWxvckludlNxcnQoZG90KHAzLHAzKSk7CisrI2VuZGlmCisrCisrLy8gTWl4CisrICB2ZWM0IG0gPSBtYXgoMC42IC0gdmVjNChkb3QoeDAseDApLCBkb3QoeDEseDEpLCBkb3QoeDIseDIpLCBkb3QoeDMseDMpKSwgMC4pOworKyAgbSA9IG0gKiBtOworKy8vdXNlZCB0byBiZSA2NC4KKysgIHJldHVybiA0OC4wICogZG90KCBtKm0sIHZlYzQoIGRvdChwMCx4MCksIGRvdChwMSx4MSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QocDIseDIpLCBkb3QocDMseDMpICkgKTsKKysgIH0KKysKKyt2ZWM0IGdyYWQ0KGZsb2F0IGosIHZlYzQgaXApCisrICB7CisrICBjb25zdCB2ZWM0IG9uZXMgPSB2ZWM0KDEuLDEuLDEuLC0xLik7CisrICB2ZWM0IHAsczsKKysKKysgIHAueHl6ID0gZmxvb3IoIGZyYWN0ICh2ZWMzKGopICogaXAueHl6KSAqcFBhcmFtLncpICogaXAueiAtMS4wOworKyAgcC53ID0gMS41IC0gZG90KGFicyhwLnh5eiksIG9uZXMueHl6KTsKKysgIHMgPSB2ZWM0KGxlc3NUaGFuKHAsdmVjNCgwLikpKTsKKysgIHAueHl6ID0gcC54eXogKyAocy54eXoqMi4tMS4pICogcy53d3c7CisrCisrICByZXR1cm4gcDsKKysgIH0KKysKKytmbG9hdCBzaW1wbGV4Tm9pc2U0KHZlYzQgdikKKysgIHsKKysgIGNvbnN0IHZlYzIgQyA9IHZlYzIoIDAuMTM4MTk2NjAxMTI1MDEwNTA0LCAvLyAoNSAtIHNxcnQoNSkpLzIwIEc0CisrICAgICAgICAgICAgICAgICAgICAgICAgMC4zMDkwMTY5OTQzNzQ5NDc0NTEpOyAvLyAoc3FydCg1KSAtIDEpLzQgRjQKKysvLyBGaXJzdCBjb3JuZXIKKysgIHZlYzQgaSA9IGZsb29yKHYgKyBkb3QodiwgQy55eXl5KSApOworKyAgdmVjNCB4MCA9IHYgLSBpICsgZG90KGksIEMueHh4eCk7CisrCisrLy8gT3RoZXIgY29ybmVycworKworKy8vIEZvcmNlIGV4aXN0YW5jZSBvZiBzdHJpY3QgdG90YWwgb3JkZXJpbmcgaW4gc29ydC4KKysgIHZlYzQgcTAgPSBmbG9vcih4MCAqIDEwMjQuMCkgKyB2ZWM0KCAwLiwgMS4vNC4sIDIuLzQuICwgMy4vNC4pOworKyAgdmVjNCBxMTsKKysgIHExLnh5ID0gbWF4KHEwLnh5LHEwLnp3KTsgLy8geDp6IHk6dworKyAgcTEuencgPSBtaW4ocTAueHkscTAuencpOworKworKyAgdmVjNCBxMjsKKysgIHEyLnh6ID0gbWF4KHExLnh6LHExLnl3KTsgLy8geDp5IHo6dworKyAgcTIueXcgPSBtaW4ocTEueHoscTEueXcpOworKyAgCisrICB2ZWM0IHEzOworKyAgcTMueSA9IG1heChxMi55LHEyLnopOyAvLyB5OnoKKysgIHEzLnogPSBtaW4ocTIueSxxMi56KTsKKysgIHEzLnh3ID0gcTIueHc7CisrCisrICB2ZWM0IGkxID0gdmVjNChsZXNzVGhhbkVxdWFsKHEzLnh4eHgsIHEwKSk7CisrICB2ZWM0IGkyID0gdmVjNChsZXNzVGhhbkVxdWFsKHEzLnl5eXksIHEwKSk7CisrICB2ZWM0IGkzID0gdmVjNChsZXNzVGhhbkVxdWFsKHEzLnp6enosIHEwKSk7CisrCisrICAgLy8geDAgPSB4MCAtIDAuICsgMC4gKiBDCisrICB2ZWM0IHgxID0geDAgLSBpMSArIDEuICogQy54eHh4OworKyAgdmVjNCB4MiA9IHgwIC0gaTIgKyAyLiAqIEMueHh4eDsKKysgIHZlYzQgeDMgPSB4MCAtIGkzICsgMy4gKiBDLnh4eHg7CisrICB2ZWM0IHg0ID0geDAgLSAxLiArIDQuICogQy54eHh4OworKworKy8vIFBlcm11dGF0aW9ucworKyAgaSA9IG1vZChpLCBwUGFyYW0ueCApOworKyAgZmxvYXQgajAgPSBwZXJtdXRlKCBwZXJtdXRlKCBwZXJtdXRlKCBwZXJtdXRlICgKKysgICAgICAgICAgICAgIGkudywgcFBhcmFtLnh5eikgKyBpLnosIHBQYXJhbS54eXopCisrICAgICAgICAgICAgKyBpLnksIHBQYXJhbS54eXopICsgaS54LCBwUGFyYW0ueHl6KTsKKysgIHZlYzQgajEgPSBwZXJtdXRlKCBwZXJtdXRlKCBwZXJtdXRlKCBwZXJtdXRlICgKKysgICAgICAgICAgICAgaS53ICsgdmVjNChpMS53LCBpMi53LCBpMy53LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnogKyB2ZWM0KGkxLnosIGkyLnosIGkzLnosIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueSArIHZlYzQoaTEueSwgaTIueSwgaTMueSwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS54ICsgdmVjNChpMS54LCBpMi54LCBpMy54LCAxLiApLCBwUGFyYW0ueHl6KTsKKysvLyBHcmFkaWVudHMKKysvLyAoIE4qTipOIHBvaW50cyB1bmlmb3JtbHkgb3ZlciBhIGN1YmUsIG1hcHBlZCBvbnRvIGEgNC1vY3RvaGVkcm9uLikKKysgIHZlYzQgaXAgPSBwUGFyYW0gOworKyAgaXAueHkgKj0gcFBhcmFtLncgOworKyAgaXAueCAqPSBwUGFyYW0udyA7CisrICBpcCA9IHZlYzQoMS4sMS4sMS4sMi4pIC8gaXAgOworKworKyAgdmVjNCBwMCA9IGdyYWQ0KGowLCBpcCk7CisrICB2ZWM0IHAxID0gZ3JhZDQoajEueCwgaXApOworKyAgdmVjNCBwMiA9IGdyYWQ0KGoxLnksIGlwKTsKKysgIHZlYzQgcDMgPSBncmFkNChqMS56LCBpcCk7CisrICB2ZWM0IHA0ID0gZ3JhZDQoajEudywgaXApOworKworKyNpZmRlZiBOT1JNQUxJU0VfR1JBRElFTlRTCisrICBwMCAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMCxwMCkpOworKyAgcDEgKj0gdGF5bG9ySW52U3FydChkb3QocDEscDEpKTsKKysgIHAyICo9IHRheWxvckludlNxcnQoZG90KHAyLHAyKSk7CisrICBwMyAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMyxwMykpOworKyAgcDQgKj0gdGF5bG9ySW52U3FydChkb3QocDQscDQpKTsKKysjZW5kaWYKKysKKysvLyBNaXgKKysgIHZlYzMgbTAgPSBtYXgoMC42IC0gdmVjMyhkb3QoeDAseDApLCBkb3QoeDEseDEpLCBkb3QoeDIseDIpKSwgMC4pOworKyAgdmVjMiBtMSA9IG1heCgwLjYgLSB2ZWMyKGRvdCh4Myx4MyksIGRvdCh4NCx4NCkgKSwgMC4pOworKyAgbTAgPSBtMCAqIG0wOworKyAgbTEgPSBtMSAqIG0xOworKyAgcmV0dXJuIDMyLiAqICggZG90KG0wKm0wLCB2ZWMzKCBkb3QoIHAwLCB4MCApLCBkb3QoIHAxLCB4MSApLCBkb3QoIHAyLCB4MiApKSkKKysgICAgICAgICAgICAgICArIGRvdChtMSptMSwgdmVjMiggZG90KCBwMywgeDMgKSwgZG90KCBwNCwgeDQgKSApICkgKSA7CisrCisrICB9CisrCisrCisrCitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvc2tpbm5pbmcudmVydCBiL3NyYy9nbHNsL3NraW5uaW5nLnZlcnQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yODk3MGVlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9za2lubmluZy52ZXJ0CitAQCAtMCwwICsxLDI0IEBACisrLy8gVmVydGV4IHdlaWdodGluZy9ibGVuZGluIHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysvLyA0IE5vdiAyMDA4CisrCisrdW5pZm9ybSBtYXQ0IG1hdDAsIG1hdDE7CisrYXR0cmlidXRlIGZsb2F0IHdlaWdodDsKKysKKyt2b2lkIG1haW4oKSAKKyt7CisrICAgLy8gc2ltcGxlIGRpZmZ1c2Ugc2hhZGluZworKyAgIC8vIE5vdGUgdGhhdCB3ZSBzaG91bGQgcmVhbGx5IHRyYW5zZm9ybSB0aGUgbm9ybWFsIHZlY3RvciBhbG9uZyB3aXRoCisrICAgLy8gdGhlIHBvc3Rpb24gYmVsb3cuLi4gc29tZWRheS4KKysgICB2ZWMzIGxpZ2h0VmVjID0gdmVjMygwLCAwLCAxKTsKKysgICB2ZWMzIG5vcm0gPSBnbF9Ob3JtYWxNYXRyaXggKiBnbF9Ob3JtYWw7CisrICAgZmxvYXQgZG90ID0gMC4yICsgbWF4KDAuMCwgZG90KG5vcm0sIGxpZ2h0VmVjKSk7CisrICAgZ2xfRnJvbnRDb2xvciA9IHZlYzQoZG90KTsKKysKKysgICAvLyBjb21wdXRlIHN1bSBvZiB3ZWlnaHRlZCB0cmFuc2Zvcm1hdGlvbnMKKysgICB2ZWM0IHBvczAgPSBtYXQwICogZ2xfVmVydGV4OworKyAgIHZlYzQgcG9zMSA9IG1hdDEgKiBnbF9WZXJ0ZXg7CisrICAgdmVjNCBwb3MgPSBtaXgocG9zMCwgcG9zMSwgd2VpZ2h0KTsKKysKKysgICBnbF9Qb3NpdGlvbiA9IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggKiBwb3M7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDgzOTQzNgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZworQEAgLTAsMCArMSwxOSBAQAorKy8vIE11bHRpLXRleHR1cmUgZnJhZ21lbnQgc2hhZGVyCisrLy8gQnJpYW4gUGF1bAorKworKy8vIENvbXBvc2l0ZSBzZWNvbmQgdGV4dHVyZSBvdmVyIGZpcnN0LgorKy8vIFdlJ3JlIGFzc3VtaW5nIHRoZSAybmQgdGV4dHVyZSBoYXMgYSBtZWFuaW5nZnVsIGFscGhhIGNoYW5uZWwuCisrCisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MTsKKyt1bmlmb3JtIHNhbXBsZXIyRCB0ZXgyOworK3VuaWZvcm0gdmVjNCBVbmlWMTsKKyt1bmlmb3JtIHZlYzQgVW5pVjI7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgdmVjNCB0MzsKKysgICB2ZWM0IHQxID0gdGV4dHVyZTJEKHRleDEsIGdsX1RleENvb3JkWzBdLnh5KTsKKysgICB2ZWM0IHQyID0gdGV4dHVyZTJEKHRleDIsIGdsX1RleENvb3JkWzFdLnh5KTsKKysgICB0MyA9IG1peCh0MSwgdDIsIHQyLncpOworKyAgIGdsX0ZyYWdDb2xvciA9IHQzICsgVW5pVjEgKyBVbmlWMjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydCBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZWY1MGRiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0CitAQCAtMCwwICsxLDE0IEBACisrLy8gTXVsdGktdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyCisrLy8gQnJpYW4gUGF1bAorKworKworK2F0dHJpYnV0ZSB2ZWM0IFRleENvb3JkMCwgVGV4Q29vcmQxOworK2F0dHJpYnV0ZSB2ZWM0IFZlcnRDb29yZDsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICBnbF9UZXhDb29yZFswXSA9IFRleENvb3JkMDsKKysgICBnbF9UZXhDb29yZFsxXSA9IFRleENvb3JkMTsKKysgICAvLyBub3RlOiBtYXkgdXNlIGdsX1ZlcnRleCBvciBWZXJ0Q29vcmQgaGVyZSBmb3IgdGVzdGluZzoKKysgICBnbF9Qb3NpdGlvbiA9IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggKiBnbF9WZXJ0ZXg7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGRmMDMxOQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZworQEAgLTAsMCArMSwxNyBAQAorKy8vIE11bHRpLXRleHR1cmUgZnJhZ21lbnQgc2hhZGVyCisrLy8gQnJpYW4gUGF1bAorKworKy8vIENvbXBvc2l0ZSBzZWNvbmQgdGV4dHVyZSBvdmVyIGZpcnN0LgorKy8vIFdlJ3JlIGFzc3VtaW5nIHRoZSAybmQgdGV4dHVyZSBoYXMgYSBtZWFuaW5nZnVsIGFscGhhIGNoYW5uZWwuCisrCisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MTsKKyt1bmlmb3JtIHNhbXBsZXIyRCB0ZXgyOworK3VuaWZvcm0gdmVjNCBVbmlWMTsKKyt1bmlmb3JtIHZlYzQgVW5pVjI7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgdmVjNCB0MSA9IHRleHR1cmUyRCh0ZXgxLCBnbF9UZXhDb29yZFswXS54eSk7CisrICAgdmVjNCB0MiA9IHRleHR1cmUyRCh0ZXgyLCBnbF9UZXhDb29yZFsxXS54eSk7CisrICAgZ2xfRnJhZ0NvbG9yID0gdDEgKyB0MiArIFVuaVYxICsgVW5pVjI7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uY2VmNTBkYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydAorQEAgLTAsMCArMSwxNCBAQAorKy8vIE11bHRpLXRleHR1cmUgdmVydGV4IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysKKythdHRyaWJ1dGUgdmVjNCBUZXhDb29yZDAsIFRleENvb3JkMTsKKythdHRyaWJ1dGUgdmVjNCBWZXJ0Q29vcmQ7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgZ2xfVGV4Q29vcmRbMF0gPSBUZXhDb29yZDA7CisrICAgZ2xfVGV4Q29vcmRbMV0gPSBUZXhDb29yZDE7CisrICAgLy8gbm90ZTogbWF5IHVzZSBnbF9WZXJ0ZXggb3IgVmVydENvb3JkIGhlcmUgZm9yIHRlc3Rpbmc6CisrICAgZ2xfUG9zaXRpb24gPSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICogZ2xfVmVydGV4OworK30KK2RpZmYgLS1naXQgYS9zcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCBiL3NyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmM3YWU0YgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKK0BAIC0wLDAgKzEsOCBAQAorK3ZvaWQgbWFpbigpIHsKKysgICBnbF9Qb3NpdGlvbiA9IGdsX1ZlcnRleDsKKysgICB2ZWM0IHN1bSA9IHZlYzQoMCk7CisrICAgZm9yIChpbnQgaSA9IDE7IGkgIT0gMjsgaSArPSAyKSB7CisrICAgICAgc3VtICs9IHZlYzQoMC4xLCAwLjEsIDAuMSwgMC4xKTsKKysgICB9CisrICAgZ2xfRnJvbnRDb2xvciA9IHN1bTsKKyt9CistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2YWYxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gMzY4MjlhOGQ3YWQyODg4NTE1ZmJlZTk1YzJhNzBiM2Q2MzZkNzUzOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDkgSnVsIDIwMTQgMTQ6MzA6MzMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzldIENvcnJlY3RseSBpbXBsZW1lbnQgd2l0aCBBQ19XSVRIKGdsdXQpIHNvIHRoYXQKKyAtLXdpdGhvdXQtZ2x1dCB3b3Jrcy4KKworLS0tCisgY29uZmlndXJlLmFjIHwgMjYgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGM0ZWUxMmIuLjk0NDU0MjQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY3LDIxICs2NywyNSBAQCBERU1PX0NGTEFHUz0iJERFTU9fQ0ZMQUdTICRHTF9DRkxBR1MiCisgREVNT19MSUJTPSIkREVNT19MSUJTICRHTF9MSUJTIgorIAorIGRubCBDaGVjayBmb3IgR0xVVAorLUdMVVRfQ0ZMQUdTPSIiCistR0xVVF9MSUJTPS1sZ2x1dAorLWdsdXRfZW5hYmxlZD15ZXMKKytnbHV0X2VuYWJsZWQ9bm8KKyBBQ19BUkdfV0lUSChbZ2x1dF0sCisgCVtBU19IRUxQX1NUUklORyhbLS13aXRoLWdsdXQ9RElSXSwKKyAJCQlbZ2x1dCBpbnN0YWxsIGRpcmVjdG9yeV0pXSwKKyAJW0dMVVRfQ0ZMQUdTPSItSSR3aXRodmFsL2luY2x1ZGUiCistCSBHTFVUX0xJQlM9Ii1MJHdpdGh2YWwvbGliIC1sZ2x1dCJdKQorLUFDX0NIRUNLX0hFQURFUihbR0wvZ2x1dC5oXSwKKy0JCVtdLAorLQkJW2dsdXRfZW5hYmxlZD1ub10pCistQUNfQ0hFQ0tfTElCKFtnbHV0XSwKKy0JCVtnbHV0SW5pdF0sCistCQlbXSwKKy0JCVtnbHV0X2VuYWJsZWQ9bm9dKQorKwkgR0xVVF9MSUJTPSItTCR3aXRodmFsL2xpYiAtbGdsdXQiXSwKKysJW0dMVVRfQ0ZMQUdTPSIiCisrCSBHTFVUX0xJQlM9Ii1sZ2x1dCJdCisrICAgICAgICApCisrQVNfSUYoW3Rlc3QgIngkd2l0aF9nbHV0IiAhPSB4bm9dLAorKyAgICAgIFtBQ19DSEVDS19IRUFERVIoW0dML2dsdXQuaF0sCisrICAgICAgICAgICAgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICAgICAgICAgICAgIFtnbHV0X2VuYWJsZWQ9bm9dKQorKyAgICAgICBBQ19DSEVDS19MSUIoW2dsdXRdLAorKyAgICAgICAgICAgICAgICAgICAgW2dsdXRJbml0XSwKKysgICAgICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICAgICAgW2dsdXRfZW5hYmxlZD1ub10pCisrICAgICAgIGdsdXRfZW5hYmxlZD15ZXMKKytdKQorIAorIGRubCBDaGVjayBmb3IgRnJlZUdMVVQgMi42IG9yIGxhdGVyCisgQUNfRUdSRVBfSEVBREVSKFtnbHV0SW5pdENvbnRleHRQcm9maWxlXSwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjU4YzJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2gKQEAgLTAsMCArMSw0MjQgQEAKK0Zyb20gYjI1ZTljNjc1Y2Y1NjBiOGIwMzdkYzg1NWM2YjNiMWQwOTk1Nzg2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgOSBKdWwgMjAxNCAxNDoyMzo0MSArMDIwMAorU3ViamVjdDogW1BBVENIIDMvOV0gY29uZmlndXJlOiBBbGxvdyB0byBkaXNhYmxlIGRlbW9zIHdoaWNoIHJlcXVpcmUgR0xFVyBvcgorIEdMVQorCisqIGluIHNvbWUgc3lzdGVtcyB3aXRob3V0IFgxMSBzdXBwb3J0IHdlIGRvbid0IGhhdmUgR0xFVywgYnV0CisgIG1lc2EtZGVtb3MgYXJlIHN0aWxsIHVzZWZ1bAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgfCA0OSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgMTQgKysrKysrLS0tCisgc3JjL2RlbW9zL01ha2VmaWxlLmFtICAgICAgICAgfCA3MyArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL2VnbC9NYWtlZmlsZS5hbSAgICAgICAgICAgfCAgOCArKystLQorIHNyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIHwgNDQgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyBzcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbSB8IDMzICsrKysrKysrKystLS0tLS0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDEzNSBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTQ0NTQyNC4uYmM0YzhkMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtOTMsMjUgKzkzLDQ0IEBAIEFDX0VHUkVQX0hFQURFUihbZ2x1dEluaXRDb250ZXh0UHJvZmlsZV0sCisgCQlbQUNfREVGSU5FKEhBVkVfRlJFRUdMVVQpXSwKKyAJCVtdKQorIAorLWRubCBDaGVjayBmb3IgR0xFVworLVBLR19DSEVDS19NT0RVTEVTKEdMRVcsIFtnbGV3ID49IDEuNS40XSkKKy1ERU1PX0NGTEFHUz0iJERFTU9fQ0ZMQUdTICRHTEVXX0NGTEFHUyIKKy1ERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMRVdfTElCUyIKKytBQ19BUkdfRU5BQkxFKFtnbGV3XSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbGV3XSwKKysgICAgICAgIFtidWlsZCBkZW1vcyB3aGljaCByZXF1aXJlIGdsZXcgQDw6QGRlZmF1bHQ9eWVzQDo+QF0pXSwKKysgICAgW2VuYWJsZV9nbGV3PSIkZW5hYmxldmFsIl0sCisrICAgIFtlbmFibGVfZ2xldz15ZXNdCisrKQorKworK2lmIHRlc3QgIngkZW5hYmxlX2dsZXciID0geHllczsgdGhlbgorKyAgICBkbmwgQ2hlY2sgZm9yIEdMRVcKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoR0xFVywgW2dsZXcgPj0gMS41LjRdLCBbZ2xld19lbmFibGVkPXllc10sIFtnbGV3X2VuYWJsZWQ9bm9dKQorKyAgICBERU1PX0NGTEFHUz0iJERFTU9fQ0ZMQUdTICRHTEVXX0NGTEFHUyIKKysgICAgREVNT19MSUJTPSIkREVNT19MSUJTICRHTEVXX0xJQlMiCisrZmkKKyAKKyAjIExJQlMgd2FzIHNldCBieSBBQ19DSEVDS19MSUIgYWJvdmUKKyBMSUJTPSIiCisgCistUEtHX0NIRUNLX01PRFVMRVMoR0xVLCBbZ2x1XSwgW10sCistCQkgIFtBQ19DSEVDS19IRUFERVIoW0dML2dsdS5oXSwKKy0JCQkJICAgW10sCistCQkgIAkJICAgQUNfTVNHX0VSUk9SKFtHTFUgbm90IGZvdW5kXSkpCistCQkgICBBQ19DSEVDS19MSUIoW0dMVV0sCistCQkJCVtnbHVCZWdpbkN1cnZlXSwKKy0JCQkJW0dMVV9MSUJTPS1sR0xVXSwKKy0JCQkJQUNfTVNHX0VSUk9SKFtHTFUgcmVxdWlyZWRdKSkgXSkKKytBQ19BUkdfRU5BQkxFKFtnbHVdLAorKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdsdV0sCisrICAgICAgICBbYnVpbGQgZGVtb3Mgd2hpY2ggcmVxdWlyZSBnbHUgQDw6QGRlZmF1bHQ9eWVzQDo+QF0pXSwKKysgICAgW2VuYWJsZV9nbHU9IiRlbmFibGV2YWwiXSwKKysgICAgW2VuYWJsZV9nbHU9eWVzXQorKykKKyAKKy1ERU1PX0NGTEFHUz0iJERFTU9fQ0ZMQUdTICRHTFVfQ0ZMQUdTIgorLURFTU9fTElCUz0iJERFTU9fTElCUyAkR0xVX0xJQlMiCisraWYgdGVzdCAieCRlbmFibGVfZ2x1IiA9IHh5ZXM7IHRoZW4KKysgICAgUEtHX0NIRUNLX01PRFVMRVMoR0xVLCBbZ2x1XSwgW2dsdV9lbmFibGVkPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUihbR0wvZ2x1LmhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0dMVSBub3QgZm91bmRdKSkKKysgICAgICAgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKFtHTFVdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dsdUJlZ2luQ3VydmVdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0dMVV9MSUJTPS1sR0xVCisrCQkJCSAgICBnbHVfZW5hYmxlZD15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtHTFUgcmVxdWlyZWRdKSkgXSkKKysKKysgICAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xVX0NGTEFHUyIKKysgICAgREVNT19MSUJTPSIkREVNT19MSUJTICRHTFVfTElCUyIKKytmaQorIAorIEFDX0FSR19FTkFCTEUoW2VnbF0sCisgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZWdsXSwKK0BAIC0zMDQsNiArMzIzLDggQEAgQUNfU1VCU1QoW1dBWUxBTkRfQ0ZMQUdTXSkKKyBBQ19TVUJTVChbV0FZTEFORF9MSUJTXSkKKyAKKyAKKytBTV9DT05ESVRJT05BTChIQVZFX0dMVSwgdGVzdCAieCRnbHVfZW5hYmxlZCIgPSAieHllcyIpCisrQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVXLCB0ZXN0ICJ4JGdsZXdfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9FR0wsIHRlc3QgIngkZWdsX2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xFU1YxLCB0ZXN0ICJ4JGdsZXN2MV9lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMRVNWMiwgdGVzdCAieCRnbGVzdjJfZW5hYmxlZCIgPSAieHllcyIpCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCAxNjQ3ZDY0Li43NTRjNDdjIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC0yMywxNCArMjMsMTggQEAKKyAjICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgCisraWYgSEFWRV9HTEVXCisrVVRJTCA9IHV0aWwKKytlbmRpZgorKworIFNVQkRJUlMgPSBcCistCXV0aWwgXAorKwkkKFVUSUwpIFwKKyAJZGF0YSBcCisgCWRlbW9zIFwKKyAJZWdsIFwKKyAJZnAgXAorIAlmcGdsc2wgXAorIAlnbHNsIFwKKy0gICAgICAgIGdzIFwKKysJZ3MgXAorIAlvYmp2aWV3ZXIgXAorIAlvc2RlbW9zIFwKKyAJcGVyZiBcCitAQCAtNDAsOCArMzksMTIgQEAgU1VCRElSUyA9IFwKKyAJc2xhbmcgXAorIAl0ZXN0cyBcCisgCXRvb2xzIFwKKy0JdHJpdmlhbCBcCistCXZwIFwKKy0JdnBnbHNsIFwKKyAJd2dsIFwKKyAJeGRlbW9zCisrCisraWYgSEFWRV9HTEVXCisrU1VCRElSUyArPSBcCisrCXZwIFwKKysJdnBnbHNsIFwKKysJdHJpdmlhbAorK2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2RlbW9zL01ha2VmaWxlLmFtIGIvc3JjL2RlbW9zL01ha2VmaWxlLmFtCitpbmRleCA0MTYwM2ZhLi5hYjFlM2FiIDEwMDY0NAorLS0tIGEvc3JjL2RlbW9zL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZGVtb3MvTWFrZWZpbGUuYW0KK0BAIC0zMCw5MSArMzAsMTAwIEBAIEFNX0xERkxBR1MgPSBcCisgCSQoREVNT19MSUJTKSBcCisgCSQoR0xVVF9MSUJTKQorIAorK2Jpbl9QUk9HUkFNUyA9CisrCisgaWYgSEFWRV9HTFVUCistYmluX1BST0dSQU1TID0gXAorK2lmIEhBVkVfR0xFVworK2Jpbl9QUk9HUkFNUyArPSBcCisgCWFyYmZwbGlnaHQgXAorIAlhcmJmc2xpZ2h0IFwKKyAJYXJib2NjbHVkZSBcCisgCWFyYm9jY2x1ZGUyIFwKKy0JYm91bmNlIFwKKy0JY2xlYXJzcGQgXAorIAljb3B5cGl4IFwKKyAJY3ViZW1hcCBcCisgCWN1YmVyZW5kZXIgXAorIAlkaW5vc2hhZGUgXAorLQlkaXNzb2x2ZSBcCistCWRyYXdwaXggXAorIAllbmdpbmUgXAorIAlmYm9fZmlyZWN1YmUgXAorIAlmYm90ZXh0dXJlIFwKKy0JZmlyZSBcCisgCWZvZ2Nvb3JkIFwKKyAJZnBsaWdodCBcCisgCWZzbGlnaHQgXAorKwlnbG9zcyBcCisrCWlzb3N1cmYgXAorKwltdWx0aWFyYiBcCisrCXBhbHRleCBcCisrCXBvaW50Ymxhc3QgXAorKwlwcm9qdGV4IFwKKysJc2hhZG93dGV4IFwKKysJc3ByaXRlYmxhc3QgXAorKwlzdGV4M2QgXAorKwl0ZXh0dXJlcyBcCisrCXZhb19kZW1vIFwKKysJd2lucG9zCisrCisrY29weXBpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2N1YmVtYXBfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytjdWJlcmVuZGVyX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZW5naW5lX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZmJvX2ZpcmVjdWJlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZ2xvc3NfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytpc29zdXJmX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrbXVsdGlhcmJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytwcm9qdGV4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrdGV4dHVyZXNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyt3aW5wb3NfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytlbmRpZgorKworK2lmIEhBVkVfR0xVCisrYmluX1BST0dSQU1TICs9IFwKKysJYm91bmNlIFwKKysJY2xlYXJzcGQgXAorKwlkaXNzb2x2ZSBcCisrCWRyYXdwaXggXAorKwlmaXJlIFwKKyAJZ2FtbWEgXAorIAlnZWFyYm94IFwKKyAJZ2VhcnMgXAorIAlnZWFydHJhaW4gXAorIAlnbGluZm8gXAorLQlnbG9zcyBcCisgCWdsdGVzdHBlcmYgXAorIAlpcGVycyBcCistCWlzb3N1cmYgXAorIAlsb2RiaWFzIFwKKyAJbW9ycGgzZCBcCistCW11bHRpYXJiIFwKKy0JcGFsdGV4IFwKKyAJcGl4ZWx0ZXN0IFwKKy0JcG9pbnRibGFzdCBcCistCXByb2p0ZXggXAorIAlyYXkgXAorIAlyZWFkcGl4IFwKKyAJcmVmbGVjdCBcCisgCXJlbm9ybWFsIFwKKy0Jc2hhZG93dGV4IFwKKyAJc2luZ2xlYnVmZmVyIFwKKyAJc3BlY3RleCBcCistCXNwcml0ZWJsYXN0IFwKKy0Jc3RleDNkIFwKKyAJdGVhcG90IFwKKyAJdGVycmFpbiBcCisgCXRlc3NkZW1vIFwKKyAJdGV4Y3lsIFwKKyAJdGV4ZW52IFwKKy0JdGV4dHVyZXMgXAorIAl0cmlzcGQgXAorIAl0dW5uZWwyIFwKKy0JdHVubmVsIFwKKy0JdmFvX2RlbW8gXAorLQl3aW5wb3MKKy1lbmRpZgorKwl0dW5uZWwKKyAKKyB0dW5uZWxfU09VUkNFUyA9IFwKKyAJdHVubmVsLmMgXAorIAl0dW5uZWxkYXQuaAorIAorLWNvcHlwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1jdWJlbWFwX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistY3ViZXJlbmRlcl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWRyYXdwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyBkaXNzb2x2ZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWVuZ2luZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWZib19maXJlY3ViZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2RyYXdwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyBmaXJlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistZ2xvc3NfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyBpcGVyc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWlzb3N1cmZfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyBsb2RiaWFzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistbXVsdGlhcmJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1wcm9qdGV4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgcmVhZHBpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHJlZmxlY3RfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0ZWFwb3RfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0ZXhjeWxfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy10ZXh0dXJlc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHR1bm5lbF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHR1bm5lbDJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy13aW5wb3NfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytlbmRpZgorK2VuZGlmCisgCisgRVhUUkFfRElTVCA9IFwKKyAJUkVBRE1FCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvTWFrZWZpbGUuYW0KK2luZGV4IGQ2NGE0OWUuLjRmZTFjYTggMTAwNjQ0CistLS0gYS9zcmMvZWdsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL01ha2VmaWxlLmFtCitAQCAtMjQsOCArMjQsMTIgQEAKKyAKKyBTVUJESVJTID0gXAorIAllZ2x1dCBcCistCW9wZW5nbCBcCistCW9wZW52ZyBcCisgCW9wZW5nbGVzMSBcCisgCW9wZW5nbGVzMiBcCisgCW9lc192ZworKworK2lmIEhBVkVfR0xVCisrU1VCRElSUyArPSBcCisrCW9wZW5nbCBcCisrCW9wZW52ZworK2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQoraW5kZXggN2E5ODI4ZC4uMzQ1NWU3NSAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorQEAgLTM2LDI4ICszNiw0MyBAQCBBTV9MREZMQUdTID0gXAorIAkkKEVHTF9MSUJTKSBcCisgCS1sbQorIAorK25vaW5zdF9QUk9HUkFNUyA9CisrCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX0dMRVNWMQorLW5vaW5zdF9QUk9HUkFNUyA9IFwKKy0JYmluZHRleCBcCistCWNsZWFyIFwKKytub2luc3RfUFJPR1JBTVMgKz0gXAorIAlkcmF3dGV4X3NjcmVlbiBcCisrCWdlYXJzX3NjcmVlbiBcCisrCXRvcnVzX3NjcmVlbiBcCisrCXRyaV9zY3JlZW4KKysKKytkcmF3dGV4X3NjcmVlbl9TT1VSQ0VTID0gZHJhd3RleC5jCisrZ2VhcnNfc2NyZWVuX1NPVVJDRVMgPSBnZWFycy5jCisrdG9ydXNfc2NyZWVuX1NPVVJDRVMgPSB0b3J1cy5jCisrdHJpX3NjcmVlbl9TT1VSQ0VTID0gdHJpLmMKKysKKytkcmF3dGV4X3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorK2dlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorK3RvcnVzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorK3RyaV9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKysKKytpZiBIQVZFX1gxMQorK25vaW5zdF9QUk9HUkFNUyArPSBcCisrCWNsZWFyCisrCisrYmluX1BST0dSQU1TID0gXAorKwliaW5kdGV4IFwKKyAJZHJhd3RleF94MTEgXAorIAllZ2xmYmRldiBcCisgCWVzMV9pbmZvIFwKKy0JZ2VhcnNfc2NyZWVuIFwKKyAJZ2VhcnNfeDExIFwKKyAJbXNhYSBcCisgCXBidWZmZXJcCisgCXJlbmRlcl90ZXggXAorIAl0ZXh0dXJlX2Zyb21fcGl4bWFwIFwKKy0JdG9ydXNfc2NyZWVuIFwKKyAJdG9ydXNfeDExIFwKKy0JdHJpX3NjcmVlbiBcCisgCXRyaV94MTEgXAorIAl0d29fd2luCistZW5kaWYKKy1lbmRpZgorIAorIGJpbmR0ZXhfTERBREQgPSAkKFgxMV9MSUJTKQorIGVzMV9pbmZvX0xEQUREID0gJChYMTFfTElCUykKK0BAIC03MSwyMiArODYsMTUgQEAgdHdvX3dpbl9MREFERCA9ICQoWDExX0xJQlMpCisgY2xlYXJfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEgJChFR0xfTElCUykgJChYMTFfTElCUykKKyBjbGVhcl9MREZMQUdTID0KKyAKKy1kcmF3dGV4X3NjcmVlbl9TT1VSQ0VTID0gZHJhd3RleC5jCistZ2VhcnNfc2NyZWVuX1NPVVJDRVMgPSBnZWFycy5jCistdG9ydXNfc2NyZWVuX1NPVVJDRVMgPSB0b3J1cy5jCistdHJpX3NjcmVlbl9TT1VSQ0VTID0gdHJpLmMKKy0KKyBkcmF3dGV4X3gxMV9TT1VSQ0VTID0gZHJhd3RleC5jCisgZ2VhcnNfeDExX1NPVVJDRVMgPSBnZWFycy5jCisgdG9ydXNfeDExX1NPVVJDRVMgPSB0b3J1cy5jCisgdHJpX3gxMV9TT1VSQ0VTID0gdHJpLmMKKyAKKy1kcmF3dGV4X3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLWdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLXRvcnVzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLXRyaV9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy0KKyBkcmF3dGV4X3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorIGdlYXJzX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorIHRvcnVzX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorIHRyaV94MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKytlbmRpZgorK2VuZGlmCisrZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCitpbmRleCA0MWMxYjgwLi43NGFmNDYwIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCitAQCAtMzYsMjYgKzM2LDI5IEBAIEFNX0xERkxBR1MgPSBcCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX0dMRVNWMgorIGJpbl9QUk9HUkFNUyA9IFwKKy0JZXMyX2luZm8gXAorLQllczJnZWFyc19zY3JlZW4gXAorLQllczJnZWFyc194MTEgXAorLQllczJ0cmkKKysJZXMyZ2VhcnNfc2NyZWVuCisrCisrZXMyZ2VhcnNfc2NyZWVuX1NPVVJDRVMgPSBlczJnZWFycy5jCisrZXMyZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrCisgaWYgSEFWRV9XQVlMQU5ECisgYmluX1BST0dSQU1TICs9IGVzMmdlYXJzX3dheWxhbmQKKy1lbmRpZgorLWVuZGlmCistZW5kaWYKKyAKKy1lczJfaW5mb19MREFERCA9ICQoWDExX0xJQlMpCistZXMydHJpX0xEQUREID0gJChYMTFfTElCUykKKytlczJnZWFyc193YXlsYW5kX1NPVVJDRVMgPSBlczJnZWFycy5jCisrZXMyZ2VhcnNfd2F5bGFuZF9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3dheWxhbmQubGEKKytlbmRpZgorIAorLWVzMmdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2lmIEhBVkVfWDExCisrYmluX1BST0dSQU1TICs9IFwKKysJZXMydHJpIFwKKysJZXMyX2luZm8gXAorKwllczJnZWFyc194MTEKKyAKKytlczJfaW5mb19MREFERCA9ICQoWDExX0xJQlMpCisgZXMyZ2VhcnNfeDExX1NPVVJDRVMgPSBlczJnZWFycy5jCistCistZXMyZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistCisgZXMyZ2VhcnNfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisrZXMydHJpX0xEQUREID0gJChYMTFfTElCUykKKytlbmRpZgorK2VuZGlmCisrZW5kaWYKKyAKKy1lczJnZWFyc193YXlsYW5kX1NPVVJDRVMgPSBlczJnZWFycy5jCistZXMyZ2VhcnNfd2F5bGFuZF9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3dheWxhbmQubGEKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3Yjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2gKQEAgLTAsMCArMSwyMzQgQEAKK0Zyb20gNWUxMDEwOGQ3NmE1OWFiYWMyMWM3ZTU0MGJjZmQyZGRhY2NjYTJjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiBGcmksIDkgTWF5IDIwMTQgMTE6NTA6MjQgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzldIFVzZSBERU1PU19EQVRBX0RJUiB0byBsb2NhdGUgZGF0YSBmaWxlcworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0OTZdCitTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorLS0tCisgc3JjL2dsc2wvYmV6aWVyLmMgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYyAgfCAgNCArKy0tCisgc3JjL2dsc2wvYnJpY2suYyAgICAgICAgICAgIHwgIDQgKystLQorIHNyYy9nbHNsL2J1bXAuYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQorIHNyYy9nbHNsL2NvbnZvbHV0aW9ucy5jICAgICB8ICAyICstCisgc3JjL2dsc2wvbWFuZGVsYnJvdC5jICAgICAgIHwgIDQgKystLQorIHNyYy9nbHNsL211bHRpdGV4LmMgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmMgICAgfCAgMiArLQorIHNyYy9nbHNsL3NraW5uaW5nLmMgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC90ZXhkZW1vMS5jICAgICAgICAgfCAgOCArKysrLS0tLQorIHNyYy9nbHNsL3RveWJhbGwuYyAgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvb2Jqdmlld2VyL29ianZpZXcuYyAgICAgfCAxMiArKysrKystLS0tLS0KKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMgfCAgOCArKysrLS0tLQorIDEzIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYmV6aWVyLmMgYi9zcmMvZ2xzbC9iZXppZXIuYworaW5kZXggMGI1NmJjMS4uZTAxNjAzZCAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2Jlemllci5jCisrKysgYi9zcmMvZ2xzbC9iZXppZXIuYworQEAgLTEzLDcgKzEzLDcgQEAKKyAjaW5jbHVkZSAiZ2x1dF93cmFwLmgiCisgI2luY2x1ZGUgInNoYWRlcnV0aWwuaCIKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqZmlsZW5hbWUgPSAiYmV6aWVyLmdlb20iOworK3N0YXRpYyBjb25zdCBjaGFyICpmaWxlbmFtZSA9IERFTU9TX0RBVEFfRElSICJiZXppZXIuZ2VvbSI7CisgCisgc3RhdGljIEdMdWludCBmcmFnU2hhZGVyOworIHN0YXRpYyBHTHVpbnQgdmVydFNoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYyBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jCitpbmRleCBlM2JmMjRkLi43NjYyYjFmIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMKKysrKyBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jCitAQCAtNjMsOCArNjMsOCBAQCBpbml0X29wZW5nbCAodm9pZCkKKyAgICAgIGV4aXQoMSk7CisgICB9ICAgICAKKyAKKy0gIHZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX1ZFUlRFWF9TSEFERVIsICJibGlua2luZy10ZWFwb3QudmVydCIpOworLSAgZnNoYWRfaWQgPSBDb21waWxlU2hhZGVyRmlsZSAoR0xfRlJBR01FTlRfU0hBREVSLCAiYmxpbmtpbmctdGVhcG90LmZyYWciKTsKKysgIHZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX1ZFUlRFWF9TSEFERVIsIERFTU9TX0RBVEFfRElSICJibGlua2luZy10ZWFwb3QudmVydCIpOworKyAgZnNoYWRfaWQgPSBDb21waWxlU2hhZGVyRmlsZSAoR0xfRlJBR01FTlRfU0hBREVSLCBERU1PU19EQVRBX0RJUiAiYmxpbmtpbmctdGVhcG90LmZyYWciKTsKKyAgIHByb2dfaWQgPSBMaW5rU2hhZGVycyAodnNoYWRfaWQsIGZzaGFkX2lkKTsKKyAKKyAgIFVzZVByb2dyYW0gKHByb2dfaWQpOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2JyaWNrLmMgYi9zcmMvZ2xzbC9icmljay5jCitpbmRleCAzMDIxODU2Li5mZTVmMTkwIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvYnJpY2suYworKysrIGIvc3JjL2dsc2wvYnJpY2suYworQEAgLTE0LDggKzE0LDggQEAKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gwNi1icmljay5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gIkNIMDYtYnJpY2sudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDA2LWJyaWNrLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gwNi1icmljay52ZXJ0IjsKKyAKKyAvKiBwcm9ncmFtL3NoYWRlciBvYmplY3RzICovCisgc3RhdGljIEdMdWludCBmcmFnU2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2J1bXAuYyBiL3NyYy9nbHNsL2J1bXAuYworaW5kZXggNTlmNjJjZC4uM2ExYjIwYSAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2J1bXAuYworKysrIGIvc3JjL2dsc2wvYnVtcC5jCitAQCAtMTUsOSArMTUsOSBAQAorICNpbmNsdWRlICJyZWFkdGV4LmgiCisgCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJDSDExLWJ1bXBtYXAuZnJhZyI7Cistc3RhdGljIGNoYXIgKkZyYWdUZXhQcm9nRmlsZSA9ICJDSDExLWJ1bXBtYXB0ZXguZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDExLWJ1bXBtYXAudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLWJ1bXBtYXAuZnJhZyI7Cisrc3RhdGljIGNoYXIgKkZyYWdUZXhQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLWJ1bXBtYXB0ZXguZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLWJ1bXBtYXAudmVydCI7Cisgc3RhdGljIGNoYXIgKlRleHR1cmVGaWxlID0gREVNT1NfREFUQV9ESVIgInRpbGUucmdiIjsKKyAKKyAvKiBwcm9ncmFtL3NoYWRlciBvYmplY3RzICovCitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvY29udm9sdXRpb25zLmMgYi9zcmMvZ2xzbC9jb252b2x1dGlvbnMuYworaW5kZXggYTEyMGNmZS4uOTMxMmYwMCAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jCisrKysgYi9zcmMvZ2xzbC9jb252b2x1dGlvbnMuYworQEAgLTM0MCw3ICszNDAsNyBAQCBzdGF0aWMgdm9pZCBpbml0KHZvaWQpCisgCisgICAgbWVudUluaXQoKTsKKyAgICByZWFkVGV4dHVyZSh0ZXh0dXJlTG9jYXRpb24pOworLSAgIGNyZWF0ZVByb2dyYW0oImNvbnZvbHV0aW9uLnZlcnQiLCAiY29udm9sdXRpb24uZnJhZyIpOworKyAgIGNyZWF0ZVByb2dyYW0oREVNT1NfREFUQV9ESVIgImNvbnZvbHV0aW9uLnZlcnQiLCBERU1PU19EQVRBX0RJUiAiY29udm9sdXRpb24uZnJhZyIpOworIAorICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpOworICAgIGdsQ2xlYXJDb2xvcigxLjAsIDEuMCwgMS4wLCAxLjApOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL21hbmRlbGJyb3QuYyBiL3NyYy9nbHNsL21hbmRlbGJyb3QuYworaW5kZXggMzFlZGUxZC4uYWIzNGEwZiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL21hbmRlbGJyb3QuYworKysrIGIvc3JjL2dsc2wvbWFuZGVsYnJvdC5jCitAQCAtMTQsOCArMTQsOCBAQAorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJDSDE4LW1hbmRlbC5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gIkNIMTgtbWFuZGVsLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxOC1tYW5kZWwuZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDE4LW1hbmRlbC52ZXJ0IjsKKyAKKyAvKiBwcm9ncmFtL3NoYWRlciBvYmplY3RzICovCisgc3RhdGljIEdMdWludCBmcmFnU2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL211bHRpdGV4LmMgYi9zcmMvZ2xzbC9tdWx0aXRleC5jCitpbmRleCAyNjJlYTUwLi41NDZiZDI3IDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvbXVsdGl0ZXguYworKysrIGIvc3JjL2dsc2wvbXVsdGl0ZXguYworQEAgLTM1LDggKzM1LDggQEAKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqRGVtbyA9ICJtdWx0aXRleCI7CisgCistc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlID0gIm11bHRpdGV4LnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZSA9ICJtdWx0aXRleC5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUgPSBERU1PU19EQVRBX0RJUiAibXVsdGl0ZXgudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlID0gREVNT1NfREFUQV9ESVIgIm11bHRpdGV4LmZyYWciOworIAorIHN0YXRpYyBjb25zdCBjaGFyICpUZXhGaWxlc1syXSA9IAorICAgIHsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmMgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmMKK2luZGV4IDEzZmRkNWQuLjg4NWYwMWUgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmMKKysrKyBiL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYworQEAgLTE2OSw3ICsxNjksNyBAQCBTcGVjaWFsS2V5KGludCBrZXksIGludCB4LCBpbnQgeSkKKyBzdGF0aWMgdm9pZAorIEluaXQodm9pZCkKKyB7CistICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSAic2ltcGxleC1ub2lzZS5nbHNsIjsKKysgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IERFTU9TX0RBVEFfRElSICJzaW1wbGV4LW5vaXNlLmdsc2wiOworICAgIGNoYXIgbm9pc2VUZXh0WzEwMDAwXTsKKyAgICBGSUxFICpmOworICAgIGludCBsZW47CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvc2tpbm5pbmcuYyBiL3NyYy9nbHNsL3NraW5uaW5nLmMKK2luZGV4IGJmMzhkNzcuLjUzNmQ0NzUgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9za2lubmluZy5jCisrKysgYi9zcmMvZ2xzbC9za2lubmluZy5jCitAQCAtMjAsOCArMjAsOCBAQAorICNkZWZpbmUgTV9QSSAzLjE0MTU5MjY1MzUKKyAjZW5kaWYKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gInNraW5uaW5nLmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAic2tpbm5pbmcudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJza2lubmluZy5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgInNraW5uaW5nLnZlcnQiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvdGV4ZGVtbzEuYyBiL3NyYy9nbHNsL3RleGRlbW8xLmMKK2luZGV4IDZjZGUyMzkuLmEwODIzNDIgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC90ZXhkZW1vMS5jCisrKysgYi9zcmMvZ2xzbC90ZXhkZW1vMS5jCitAQCAtMzUsMTEgKzM1LDExIEBACisgCisgc3RhdGljIGNvbnN0IGNoYXIgKkRlbW8gPSAidGV4ZGVtbzEiOworIAorLXN0YXRpYyBjb25zdCBjaGFyICpSZWZsZWN0VmVydEZpbGUgPSAicmVmbGVjdC52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqQ3ViZUZyYWdGaWxlID0gImN1YmVtYXAuZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlJlZmxlY3RWZXJ0RmlsZSA9IERFTU9TX0RBVEFfRElSICJyZWZsZWN0LnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpDdWJlRnJhZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiY3ViZW1hcC5mcmFnIjsKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqU2ltcGxlVmVydEZpbGUgPSAic2ltcGxlLnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVUZXhGcmFnRmlsZSA9ICJzaGFkb3d0ZXguZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVZlcnRGaWxlID0gREVNT1NfREFUQV9ESVIgInNpbXBsZS52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqU2ltcGxlVGV4RnJhZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAic2hhZG93dGV4LmZyYWciOworIAorIHN0YXRpYyBjb25zdCBjaGFyICpHcm91bmRJbWFnZSA9IERFTU9TX0RBVEFfRElSICJ0aWxlLnJnYiI7CisgCitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvdG95YmFsbC5jIGIvc3JjL2dsc2wvdG95YmFsbC5jCitpbmRleCA1ZjI3OTUxLi40ZTdlODMyIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvdG95YmFsbC5jCisrKysgYi9zcmMvZ2xzbC90b3liYWxsLmMKK0BAIC0xNCw4ICsxNCw4IEBACisgI2luY2x1ZGUgInNoYWRlcnV0aWwuaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMTEtdG95YmFsbC5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gIkNIMTEtdG95YmFsbC52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtdG95YmFsbC5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtdG95YmFsbC52ZXJ0IjsKKyAKKyAvKiBwcm9ncmFtL3NoYWRlciBvYmplY3RzICovCisgc3RhdGljIEdMdWludCBmcmFnU2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jIGIvc3JjL29ianZpZXdlci9vYmp2aWV3LmMKK2luZGV4IDZkZWY3MjYuLjc4YTZhY2YgMTAwNjQ0CistLS0gYS9zcmMvb2Jqdmlld2VyL29ianZpZXcuYworKysrIGIvc3JjL29ianZpZXdlci9vYmp2aWV3LmMKK0BAIC0xNjIsMTIgKzE2MiwxMiBAQCBpbml0X21vZGVsKHZvaWQpCisgc3RhdGljIHZvaWQKKyBpbml0X3NreWJveCh2b2lkKQorIHsKKy0gICBTa3lib3hUZXggPSBMb2FkU2t5Qm94Q3ViZVRleHR1cmUoImFscGluZV9lYXN0LnJnYiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBpbmVfd2VzdC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX3VwLnJnYiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBpbmVfZG93bi5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX3NvdXRoLnJnYiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBpbmVfbm9ydGgucmdiIik7CisrICAgU2t5Ym94VGV4ID0gTG9hZFNreUJveEN1YmVUZXh0dXJlKERFTU9TX0RBVEFfRElSICJhbHBpbmVfZWFzdC5yZ2IiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERU1PU19EQVRBX0RJUiAiYWxwaW5lX3dlc3QucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV91cC5yZ2IiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERU1PU19EQVRBX0RJUiAiYWxwaW5lX2Rvd24ucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV9zb3V0aC5yZ2IiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERU1PU19EQVRBX0RJUiAiYWxwaW5lX25vcnRoLnJnYiIpOworICAgIGdsbVNwZWN1bGFyVGV4dHVyZShNb2RlbCwgU2t5Ym94VGV4KTsKKyB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jCitpbmRleCA3NDIyYjc4Li5kYmY4MzMyIDEwMDY0NAorLS0tIGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMKK0BAIC0zMywxMCArMzMsMTAgQEAKKyAjaW5jbHVkZSAiZ2xtYWluLmgiCisgI2luY2x1ZGUgImNvbW1vbi5oIgorIAorLXN0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZTEgPSAiZ2xzbHN0YXRlc2NoYW5nZTEudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlMSA9ICJnbHNsc3RhdGVzY2hhbmdlMS5mcmFnIjsKKy1zdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUyID0gImdsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTIgPSAiZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMSA9IERFTU9TX0RBVEFfRElSICJnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUxID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZTIgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTIudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlMiA9IERFTU9TX0RBVEFfRElSICJnbHNsc3RhdGVzY2hhbmdlMi5mcmFnIjsKKyBzdGF0aWMgc3RydWN0IHVuaWZvcm1faW5mbyBVbmlmb3JtczFbXSA9IHsKKyAgICB7ICJ0ZXgxIiwgIDEsIEdMX1NBTVBMRVJfMkQsIHsgMCwgMCwgMCwgMCB9LCAtMSB9LAorICAgIHsgInRleDIiLCAgMSwgR0xfU0FNUExFUl8yRCwgeyAxLCAwLCAwLCAwIH0sIC0xIH0sCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjMmEzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoCkBAIC0wLDAgKzEsMjY3IEBACitGcm9tIDQ1MzM1M2EyMjFkZTljNjQ0NzlmNDM3MjU2NWQyY2Q4NTkxYjM2Y2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KK0RhdGU6IEZyaSwgMjkgSnVuIDIwMTIgMTE6MjY6MDQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzldIEZpeCBidWlsZCB3aGVuIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbiBpc24ndAorIHByZXNlbnQKKworVGhlIEVHTCBkZW1vcyB3b24ndCBidWlsZCBhZ2FpbnN0IEVHTCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb24ndCBzdXBwb3J0Cit0aGUgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uLiBGaXggdGhpcywgaW4gbW9zdCBjYXNlcywgYnkKK3dyYXBwaW5nIHJlbGV2YW50IGJpdHMgb2YgY29kZSBpbiAjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UuCisKK1NpZ25lZC1vZmYtYnk6IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorCitBcHBsaWVkIGFuZCBmaXhlZCB1cCBpbiBZb2N0byBieS4uLgorCitJbnRlZ3JhdGVkLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAbGludXguaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHNyYy9lZ2wvZWdsdXQvZWdsdXQuYyAgICAgICAgfCAgOSArKysrKysrLS0KKyBzcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jIHwgMTQgKysrKysrKysrKysrKysKKyBzcmMvZWdsL29wZW5nbC9kZW1vMS5jICAgICAgIHwgIDIgKysKKyBzcmMvZWdsL29wZW5nbC9kZW1vMi5jICAgICAgIHwgIDcgKysrKysrLQorIHNyYy9lZ2wvb3BlbmdsL2RlbW8zLmMgICAgICAgfCAgNyArKysrKystCisgNSBmaWxlcyBjaGFuZ2VkLCAzNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jCitpbmRleCAyZWU2ZjE1Li5mNmEyYWQ0IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jCisrKysgYi9zcmMvZWdsL2VnbHV0L2VnbHV0LmMKK0BAIC03Niw4ICs3Niw5IEBAIF9lZ2x1dE5vdyh2b2lkKQorIHN0YXRpYyB2b2lkCisgX2VnbHV0RGVzdHJveVdpbmRvdyhzdHJ1Y3QgZWdsdXRfd2luZG93ICp3aW4pCisgeworLSAgIGlmIChfZWdsdXQtPnN1cmZhY2VfdHlwZSAhPSBFR0xfUEJVRkZFUl9CSVQgJiYKKy0gICAgICAgX2VnbHV0LT5zdXJmYWNlX3R5cGUgIT0gRUdMX1NDUkVFTl9CSVRfTUVTQSkKKysKKysgICBpZiAoX2VnbHV0LT5zdXJmYWNlX3R5cGUgPT0gRUdMX1dJTkRPV19CSVQgfHwKKysgICAgICAgX2VnbHV0LT5zdXJmYWNlX3R5cGUgPT0gRUdMX1BJWE1BUF9CSVQpCisgICAgICAgZWdsRGVzdHJveVN1cmZhY2UoX2VnbHV0LT5kcHksIHdpbi0+c3VyZmFjZSk7CisgCisgICAgX2VnbHV0TmF0aXZlRmluaVdpbmRvdyh3aW4pOworQEAgLTE3NSw3ICsxNzYsOSBAQCBfZWdsdXRDcmVhdGVXaW5kb3coY29uc3QgY2hhciAqdGl0bGUsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQorICAgICAgICAgICAgIHdpbi0+Y29uZmlnLCB3aW4tPm5hdGl2ZS51LnBpeG1hcCwgTlVMTCk7CisgICAgICAgYnJlYWs7CisgICAgY2FzZSBFR0xfUEJVRkZFUl9CSVQ6CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgY2FzZSBFR0xfU0NSRUVOX0JJVF9NRVNBOgorKyNlbmRpZgorICAgICAgIHdpbi0+c3VyZmFjZSA9IHdpbi0+bmF0aXZlLnUuc3VyZmFjZTsKKyAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorQEAgLTI4OSw4ICsyOTIsMTAgQEAgZWdsdXREZXN0cm95V2luZG93KGludCB3aW4pCisgICAgaWYgKHdpbmRvdy0+aW5kZXggIT0gd2luKQorICAgICAgIHJldHVybjsKKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICAvKiBYWFggaXQgY2F1c2VzIHNvbWUgYnVnIGluIHN0L2VnbCBLTVMgYmFja2VuZCAqLworICAgIGlmICggX2VnbHV0LT5zdXJmYWNlX3R5cGUgIT0gRUdMX1NDUkVFTl9CSVRfTUVTQSkKKysjZW5kaWYKKyAgICAgICBlZ2xNYWtlQ3VycmVudChfZWdsdXQtPmRweSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7CisgCisgICAgX2VnbHV0RGVzdHJveVdpbmRvdyhfZWdsdXQtPmN1cnJlbnQpOworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMgYi9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jCitpbmRleCAwMjFhOGYxLi4wOTRhNGUyIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYworKysrIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYworQEAgLTM1LDI2ICszNSwzMyBAQAorIAorICNkZWZpbmUgTUFYX01PREVTIDEwMAorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyBFR0xTY3JlZW5NRVNBIGttc19zY3JlZW47Cisgc3RhdGljIEVHTE1vZGVNRVNBIGttc19tb2RlOworIHN0YXRpYyBFR0xpbnQga21zX3dpZHRoLCBrbXNfaGVpZ2h0OworKyNlbmRpZgorIAorIHZvaWQKKyBfZWdsdXROYXRpdmVJbml0RGlzcGxheSh2b2lkKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBfZWdsdXQtPm5hdGl2ZV9kcHkgPSBFR0xfREVGQVVMVF9ESVNQTEFZOworICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlID0gRUdMX1NDUkVFTl9CSVRfTUVTQTsKKysjZW5kaWYKKyB9CisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUZpbmlEaXNwbGF5KHZvaWQpCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGttc19zY3JlZW4gPSAwOworICAgIGttc19tb2RlID0gMDsKKyAgICBrbXNfd2lkdGggPSAwOworICAgIGttc19oZWlnaHQgPSAwOworKyNlbmRpZgorIH0KKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyBzdGF0aWMgdm9pZAorIGluaXRfa21zKHZvaWQpCisgeworQEAgLTk0LDE5ICsxMDEsMjMgQEAgaW5pdF9rbXModm9pZCkKKyAgICBrbXNfd2lkdGggPSB3aWR0aDsKKyAgICBrbXNfaGVpZ2h0ID0gaGVpZ2h0OworIH0KKysjZW5kaWYKKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlSW5pdFdpbmRvdyhzdHJ1Y3QgZWdsdXRfd2luZG93ICp3aW4sIGNvbnN0IGNoYXIgKnRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIEVHTGludCBzdXJmX2F0dHJpYnNbMTZdOworICAgIEVHTGludCBpOworKyNlbmRpZgorICAgIGNvbnN0IGNoYXIgKmV4dHM7CisgCisgICAgZXh0cyA9IGVnbFF1ZXJ5U3RyaW5nKF9lZ2x1dC0+ZHB5LCBFR0xfRVhURU5TSU9OUyk7CisgICAgaWYgKCFleHRzIHx8ICFzdHJzdHIoZXh0cywgIkVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIikpCisgICAgICAgX2VnbHV0RmF0YWwoIkVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGluaXRfa21zKCk7CisgCisgICAgaSA9IDA7CitAQCAtMTI4LDE0ICsxMzksMTcgQEAgX2VnbHV0TmF0aXZlSW5pdFdpbmRvdyhzdHJ1Y3QgZWdsdXRfd2luZG93ICp3aW4sIGNvbnN0IGNoYXIgKnRpdGxlLAorIAorICAgIHdpbi0+bmF0aXZlLndpZHRoID0ga21zX3dpZHRoOworICAgIHdpbi0+bmF0aXZlLmhlaWdodCA9IGttc19oZWlnaHQ7CisrI2VuZGlmCisgfQorIAorIHZvaWQKKyBfZWdsdXROYXRpdmVGaW5pV2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbikKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgZWdsU2hvd1NjcmVlblN1cmZhY2VNRVNBKF9lZ2x1dC0+ZHB5LAorICAgICAgICAgIGttc19zY3JlZW4sIEVHTF9OT19TVVJGQUNFLCAwKTsKKyAgICBlZ2xEZXN0cm95U3VyZmFjZShfZWdsdXQtPmRweSwgd2luLT5uYXRpdmUudS5zdXJmYWNlKTsKKysjZW5kaWYKKyB9CisgCisgdm9pZAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCitpbmRleCBkODkyNzM0Li4zYTM1NjRjIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworQEAgLTE4LDYgKzE4LDcgQEAKKyBzdGF0aWMgdm9pZAorIFRlc3RTY3JlZW5zKEVHTERpc3BsYXkgZHB5KQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAjZGVmaW5lIE1BWCA4CisgICAgRUdMU2NyZWVuTUVTQSBzY3JlZW5zW01BWF07CisgICAgRUdMaW50IG51bVNjcmVlbnM7CitAQCAtMjgsNiArMjksNyBAQCBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtU2NyZWVuczsgaSsrKSB7CisgICAgICAgcHJpbnRmKCIgU2NyZWVuICVkIGhhbmRsZTogJWRcbiIsIGksIChpbnQpIHNjcmVlbnNbaV0pOworICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyoqCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMKK2luZGV4IDUwNWI0NzQuLmJmZWY1OWUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbC9kZW1vMi5jCisrKysgYi9zcmMvZWdsL29wZW5nbC9kZW1vMi5jCitAQCAtMTYsNiArMTYsNyBAQAorIAorIC8qI2RlZmluZSBGUk9OVEJVRkZFUiovCisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIHZvaWQgX3N1YnNldF9SZWN0ZihHTGZsb2F0IHgxLCBHTGZsb2F0IHkxLCBHTGZsb2F0IHgyLCBHTGZsb2F0IHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCByLCBHTGZsb2F0IGcsIEdMZmxvYXQgYikKKyB7CitAQCAtOTUsMTIgKzk2LDEzIEBAIFRlc3RTY3JlZW5zKEVHTERpc3BsYXkgZHB5KQorICAgICAgIHByaW50ZigiIFNjcmVlbiAlZCBoYW5kbGU6ICVkXG4iLCBpLCAoaW50KSBzY3JlZW5zW2ldKTsKKyAgICB9CisgfQorLQorKyNlbmRpZgorIAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgaW50IG1haiwgbWluOworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIEVHTENvbnRleHQgY3R4OworICAgIEVHTFN1cmZhY2UgcGJ1ZmZlciwgc2NyZWVuX3N1cmY7CisgICAgRUdMQ29uZmlnIGNvbmZpZ3NbMTBdOworQEAgLTExNSw2ICsxMTcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgRUdMTW9kZU1FU0EgbW9kZTsKKyAgICBFR0xTY3JlZW5NRVNBIHNjcmVlbjsKKyAgICBFR0xpbnQgY291bnQ7CisrI2VuZGlmCisgCisgICAgRUdMRGlzcGxheSBkID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBhc3NlcnQoZCk7CitAQCAtMTMyLDYgKzEzNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBleGl0KDEpOworICAgIH0KKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBlZ2xHZXRDb25maWdzKGQsIGNvbmZpZ3MsIDEwLCAmbnVtQ29uZmlncyk7CisgICAgcHJpbnRmKCJHb3QgJWQgRUdMIGNvbmZpZ3M6XG4iLCBudW1Db25maWdzKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQ29uZmlnczsgaSsrKSB7CitAQCAtMjExLDYgKzIxNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICBlZ2xEZXN0cm95U3VyZmFjZShkLCBwYnVmZmVyKTsKKyAgICBlZ2xEZXN0cm95Q29udGV4dChkLCBjdHgpOworICAgIGVnbFRlcm1pbmF0ZShkKTsKKysjZW5kaWYKKyAKKyAgICByZXR1cm4gMDsKKyB9CitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMKK2luZGV4IGY4NGNhMjMuLjMxYjVkOGIgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbC9kZW1vMy5jCisrKysgYi9zcmMvZWdsL29wZW5nbC9kZW1vMy5jCitAQCAtNDYsNyArNDYsNyBAQCBHTHVieXRlIE9wZW5HTF9iaXRzW10gPSB7CisgICAgMHgzZSwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwYywgMHgwMCwgCisgfTsKKyAKKy0KKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyBzdGF0aWMgdm9pZCBJbml0KHZvaWQpCisgeworIAorQEAgLTU1MSwxMSArNTUxLDEzIEBAIHdyaXRlX3BwbShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgR0x1Ynl0ZSAqYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgICAgZmNsb3NlKGYpOworICAgIH0KKyB9CisrI2VuZGlmCisgCisgaW50CisgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICBpbnQgbWFqLCBtaW47CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgRUdMQ29udGV4dCBjdHg7CisgICAgRUdMU3VyZmFjZSBzY3JlZW5fc3VyZjsKKyAgICBFR0xDb25maWcgY29uZmlnc1sxMF07CitAQCAtNTY2LDYgKzU2OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICBjb25zdCBHTHVieXRlICpiaXRtYXA7CisgICAgRUdMaW50IHNjcmVlbkF0dHJpYnNbMzJdOworICAgIEVHTGludCBpOworKyNlbmRpZgorIAorICAgIEVHTERpc3BsYXkgZCA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisgICAgYXNzZXJ0KGQpOworQEAgLTU4Myw2ICs1ODYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgZXhpdCgxKTsKKyAgICB9CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgZWdsR2V0Q29uZmlncyhkLCBjb25maWdzLCAxMCwgJm51bUNvbmZpZ3MpOworICAgIGVnbEdldFNjcmVlbnNNRVNBKGQsICZzY3JlZW4sIDEsICZjb3VudCk7CisgICAgZWdsR2V0TW9kZXNNRVNBKGQsIHNjcmVlbiwgJm1vZGUsIDEsICZjb3VudCk7CitAQCAtNjQyLDYgKzY0Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICBlZ2xEZXN0cm95U3VyZmFjZShkLCBzY3JlZW5fc3VyZik7CisgICAgZWdsRGVzdHJveUNvbnRleHQoZCwgY3R4KTsKKyAgICBlZ2xUZXJtaW5hdGUoZCk7CisrI2VuZGlmCisgCisgICAgcmV0dXJuIDA7CisgfQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTA4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDZhMTlkYmExZDI3NTU3OWM3M2U3NzYzYjA1NTQ0MTBmZjRlMWU2NTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KK0RhdGU6IEZyaSwgMjkgSnVuIDIwMTIgMTI6MDA6MjYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2LzldIFF1ZXJ5IGRpc3BsYXkgZm9yIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbgorIGJlZm9yZSB1c2luZyBpdAorCitUaGlzIGNvZGUgbWFrZXMgaGVhdnkgdXNlIG9mIHRoZSBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24gc28KK2NoZWNrIHRoZSBkaXNwbGF5IHRvIGRldGVybWluZSBpZiBpdCdzIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBFR0wKK2ltcGxlbWVudGF0aW9uLiBJZiBpdCBkb2Vzbid0IHRoZW4gYmFpbC4KKworU2lnbmVkLW9mZi1ieTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CisKK0FwcGxpZWQgYW5kIGZpeGVkIHVwIGluIFlvY3RvIGJ5Li4uCisKK0ludGVncmF0ZWQtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK2luZGV4IDNhMzU2NGMuLjA2ZTIxMzggMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCisrKysgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCitAQCAtMTEwLDYgKzExMCwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgcHJpbnRmKCJFR0wgdmVyc2lvbiA9ICVkLiVkXG4iLCBtYWosIG1pbik7CisgICAgcHJpbnRmKCJFR0xfVkVORE9SID0gJXNcbiIsIGVnbFF1ZXJ5U3RyaW5nKGQsIEVHTF9WRU5ET1IpKTsKKyAKKysgICBpZiAoIXN0cnN0cihlZ2xRdWVyeVN0cmluZyhkLCBFR0xfRVhURU5TSU9OUyksCisrICAgICAgICAgICAgICAgIkVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIikpIHsKKysgICAgICBwcmludGYoIkVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworKyAgICAgIGV4aXQoMSk7CisrICAgfQorKworICAgIGVnbEdldENvbmZpZ3MoZCwgTlVMTCwgMCwgJm51bUNvbmZpZ3MpOworICAgIGNvbmZpZ3MgPSBtYWxsb2Moc2l6ZW9mKCpjb25maWdzKSAqbnVtQ29uZmlncyk7CisgICAgZWdsR2V0Q29uZmlncyhkLCBjb25maWdzLCBudW1Db25maWdzLCAmbnVtQ29uZmlncyk7CistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDJmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gZDkzMGIyZGE1N2Y3YzllZmI4MGM4Y2VmOGY4YWRhZDE1YmJiYzBkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTAgSnVsIDIwMTQgMTQ6MzA6NTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA3LzldIEluc3RhbGwgZmV3IG1vcmUgdGVzdCBwcm9ncmFtcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0gICAgfCAgMiArLQorIHNyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIHwgMTAgKysrKy0tLS0tLQorIHNyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtICAgIHwgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KK2luZGV4IDBjNzIyOGYuLjg3YjJmMWEgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KK0BAIC01MCw3ICs1MCw3IEBAIGVuZGlmCisgZW5kaWYKKyAKKyBpZiBIQVZFX0VHTAorLW5vaW5zdF9QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgPSBcCisgCWRlbW8xIFwKKyAJZGVtbzIgXAorIAlkZW1vMyBcCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQoraW5kZXggMzQ1NWU3NS4uNTE2ZTUxNiAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorQEAgLTM2LDExICszNiwxMSBAQCBBTV9MREZMQUdTID0gXAorIAkkKEVHTF9MSUJTKSBcCisgCS1sbQorIAorLW5vaW5zdF9QUk9HUkFNUyA9CisrYmluX1BST0dSQU1TID0KKyAKKyBpZiBIQVZFX0VHTAorIGlmIEhBVkVfR0xFU1YxCistbm9pbnN0X1BST0dSQU1TICs9IFwKKytiaW5fUFJPR1JBTVMgKz0gXAorIAlkcmF3dGV4X3NjcmVlbiBcCisgCWdlYXJzX3NjcmVlbiBcCisgCXRvcnVzX3NjcmVlbiBcCitAQCAtNTcsMTAgKzU3LDggQEAgdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisgdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorIAorIGlmIEhBVkVfWDExCistbm9pbnN0X1BST0dSQU1TICs9IFwKKy0JY2xlYXIKKy0KKy1iaW5fUFJPR1JBTVMgPSBcCisrYmluX1BST0dSQU1TICs9IFwKKysJY2xlYXIgXAorIAliaW5kdGV4IFwKKyAJZHJhd3RleF94MTEgXAorIAllZ2xmYmRldiBcCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQoraW5kZXggNzMxOGE0My4uYjU0NTIyNSAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQorQEAgLTQ5LDcgKzQ5LDcgQEAgZW5kaWYKKyAKKyBpZiBIQVZFX0VHTAorIGlmIEhBVkVfVkcKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrYmluX1BST0dSQU1TID0gXAorIAlsaW9uX3NjcmVlbiBcCisgCXNwX3NjcmVlbiBcCisgCSQoRUdMX1gxMV9ERU1PUykKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjA4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK0Zyb20gMGI2Zjk1ZjliOGVjZTIyZTk4NTZjMTUwZTRiZTI5ZmQ4NmVhZjU0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTAgSnVsIDIwMTQgMTQ6Mjk6MjcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA4LzldIGdsc2wsIHBlcmY6IEFkZCBmZXcgbWlzc2luZyAuZ2xzbCwgLnZlcnQsIC5mcmFnIGZpbGVzIHRvCisgRVhUUkFfREFUQQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSB8ICAyICsrCisgc3JjL2dsc2wvTWFrZWZpbGUuYW0gICB8IDEwICsrKysrKysrLS0KKyBzcmMvcGVyZi9NYWtlZmlsZS5hbSAgIHwgIDYgKysrKysrCisgc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSB8ICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNDdjMTAzOS4uZmQ0M2M5MSAxMDA2NDQKKy0tLSBhL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK0BAIC0zOSwxMCArMzksMTIgQEAgbm9pbnN0X1BST0dSQU1TID0gXAorIGVuZGlmCisgCisgRVhUUkFfRElTVCA9IFwKKysJZGVwdGgtcmVhZC5nbHNsIFwKKyAJZG93aGlsZTIuZ2xzbCBcCisgCWRvd2hpbGUuZ2xzbCBcCisgCWZvcmJyZWFrLmdsc2wgXAorIAlmb3IuZ2xzbCBcCisrCWluZmluaXRlLWxvb3AuZ2xzbCBcCisgCW1vdi5nbHNsIFwKKyAJbW92LWltbS5nbHNsIFwKKyAJc2ltcGxlaWYuZ2xzbCBcCitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0gYi9zcmMvZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNGZhYThkYi4uMDc5YTI5ZCAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTM3LDcgKzM3LDcgQEAgQU1fTERGTEFHUyA9IFwKKyBpZiBIQVZFX0dMVVQKKyBiaW5fUFJPR1JBTVMgPSBcCisgCWFycmF5IFwKKy0gICAgICAgIGJlemllciBcCisrCWJlemllciBcCisgCWJpdG1hcCBcCisgCWJyaWNrIFwKKyAJYnVtcCBcCitAQCAtMTIzLDEyICsxMjMsMTYgQEAgRVhUUkFfRElTVCA9IFwKKyAJQ0gwNi1icmljay52ZXJ0IFwKKyAJQ0gxMS1idW1wbWFwLmZyYWcgXAorIAlDSDExLWJ1bXBtYXAudmVydCBcCisrCUNIMTEtYnVtcG1hcHRleC5mcmFnIFwKKyAJQ0gxMS10b3liYWxsLmZyYWcgXAorIAlDSDExLXRveWJhbGwudmVydCBcCisgCUNIMTgtbWFuZGVsLmZyYWcgXAorIAlDSDE4LW1hbmRlbC52ZXJ0IFwKKy0gICAgICAgIGJlemllci5nZW9tIFwKKysJYmV6aWVyLmdlb20gXAorIAlicmljay5zaHRlc3QgXAorKwlibGlua2luZy10ZWFwb3QuZnJhZyBcCisrCWJsaW5raW5nLXRlYXBvdC52ZXJ0IFwKKysJY29udm9sdXRpb24uZnJhZyBcCisgCWNvbnZvbHV0aW9uLnZlcnQgXAorIAljdWJlbWFwLmZyYWcgXAorIAltYW5kZWxicm90LnNodGVzdCBcCitAQCAtMTM4LDUgKzE0Miw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCXJlZmxlY3QudmVydCBcCisgCXNoYWRvd3RleC5mcmFnIFwKKyAJc2ltcGxlLnZlcnQgXAorKwlzaW1wbGV4LW5vaXNlLmdsc2wgXAorIAlza2lubmluZy5mcmFnIFwKKysJc2tpbm5pbmcudmVydCBcCisgCXRveWJhbGwuc2h0ZXN0CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvTWFrZWZpbGUuYW0gYi9zcmMvcGVyZi9NYWtlZmlsZS5hbQoraW5kZXggNTM2M2M1OC4uYzVjY2E4ZCAxMDA2NDQKKy0tLSBhL3NyYy9wZXJmL01ha2VmaWxlLmFtCisrKysgYi9zcmMvcGVyZi9NYWtlZmlsZS5hbQorQEAgLTU3LDMgKzU3LDkgQEAgYmluX1BST0dSQU1TID0gXAorIGVuZGlmCisgCisgZ2xzbHN0YXRlc2NoYW5nZV9MREFERCA9IGxpYnBlcmYubGEgLi4vdXRpbC9saWJ1dGlsLmxhCisrCisrRVhUUkFfRElTVCA9IFwKKysJZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgXAorKwlnbHNsc3RhdGVzY2hhbmdlMi5mcmFnIFwKKysJZ2xzbHN0YXRlc2NoYW5nZTIudmVydAorZGlmZiAtLWdpdCBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0gYi9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCitpbmRleCA0YTg1ZWQ0Li40OGIwOGY0IDEwMDY0NAorLS0tIGEvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTQ0LDYgKzQ0LDcgQEAgRVhUUkFfRElTVCA9IFwKKyAJZnVuYzIuZ2xzbCBcCisgCWlmZWxzZS5nbHNsIFwKKyAJaWYuZ2xzbCBcCisrCWluZmluaXRlLWxvb3AuZ2xzbCBcCisgCW1vdi5nbHNsIFwKKyAJbmVzdGVkaWZzLmdsc2wgXAorIAluZXN0ZWRzd2l6emxlLmdsc2wgXAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2MmRlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIGM4YzNkZTU0MTdkNmI2YzdkNzU3OWM1MjhjMGNhYjcxOGY0YmZkYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDE0IDE0OjQ4OjEyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggOS85XSBnbHNsLCBwZXJmOiBJbnN0YWxsIC5nbHNsLCAudmVydCwgLmZyYWcgZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZnBnbHNsL01ha2VmaWxlLmFtIHwgMyArKy0KKyBzcmMvZ2xzbC9NYWtlZmlsZS5hbSAgIHwgMyArKy0KKyBzcmMvcGVyZi9NYWtlZmlsZS5hbSAgIHwgMyArKy0KKyBzcmMvdnBnbHNsL01ha2VmaWxlLmFtIHwgMyArKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0gYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitpbmRleCBmZDQzYzkxLi4yYmY1MWRlIDEwMDY0NAorLS0tIGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTM4LDcgKzM4LDggQEAgbm9pbnN0X1BST0dSQU1TID0gXAorIAlmcC10cmkKKyBlbmRpZgorIAorLUVYVFJBX0RJU1QgPSBcCisrZGVtb3NkYXRhZGlyPSQoZGF0YWRpcikvJChQQUNLQUdFKS8KKytkaXN0X2RlbW9zZGF0YV9EQVRBPSBcCisgCWRlcHRoLXJlYWQuZ2xzbCBcCisgCWRvd2hpbGUyLmdsc2wgXAorIAlkb3doaWxlLmdsc2wgXAorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL01ha2VmaWxlLmFtIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDA3OWEyOWQuLmY2NmVjMjkgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK0BAIC0xMTgsNyArMTE4LDggQEAgdmVydF9vcl9mcmFnX29ubHlfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB2ZXJ0X3RleF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHZzcmF5dHJhY2VfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyAKKy1FWFRSQV9ESVNUID0gXAorK2RlbW9zZGF0YWRpcj0kKGRhdGFkaXIpLyQoUEFDS0FHRSkvCisrZGlzdF9kZW1vc2RhdGFfREFUQT0gXAorIAlDSDA2LWJyaWNrLmZyYWcgXAorIAlDSDA2LWJyaWNrLnZlcnQgXAorIAlDSDExLWJ1bXBtYXAuZnJhZyBcCitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvTWFrZWZpbGUuYW0gYi9zcmMvcGVyZi9NYWtlZmlsZS5hbQoraW5kZXggYzVjY2E4ZC4uMTQwMjU2ZCAxMDA2NDQKKy0tLSBhL3NyYy9wZXJmL01ha2VmaWxlLmFtCisrKysgYi9zcmMvcGVyZi9NYWtlZmlsZS5hbQorQEAgLTU4LDcgKzU4LDggQEAgZW5kaWYKKyAKKyBnbHNsc3RhdGVzY2hhbmdlX0xEQUREID0gbGlicGVyZi5sYSAuLi91dGlsL2xpYnV0aWwubGEKKyAKKy1FWFRSQV9ESVNUID0gXAorK2RlbW9zZGF0YWRpcj0kKGRhdGFkaXIpLyQoUEFDS0FHRSkvCisrZGlzdF9kZW1vc2RhdGFfREFUQT0gXAorIAlnbHNsc3RhdGVzY2hhbmdlMS5mcmFnIFwKKyAJZ2xzbHN0YXRlc2NoYW5nZTEudmVydCBcCisgCWdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcgXAorZGlmZiAtLWdpdCBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0gYi9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCitpbmRleCA0OGIwOGY0Li41NTI2ODY3IDEwMDY0NAorLS0tIGEvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTM4LDcgKzM4LDggQEAgbm9pbnN0X1BST0dSQU1TID0gXAorIAl2cC10cmlzCisgZW5kaWYKKyAKKy1FWFRSQV9ESVNUID0gXAorK2RlbW9zZGF0YWRpcj0kKGRhdGFkaXIpLyQoUEFDS0FHRSkvCisrZGlzdF9kZW1vc2RhdGFfREFUQT0gXAorIAlmb3IuZ2xzbCBcCisgCWZ1bmMuZ2xzbCBcCisgCWZ1bmMyLmdsc2wgXAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUxNjQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjIuMC5iYgpAQCAtMCwwICsxLDU3IEBACitTVU1NQVJZID0gIk1lc2EgZGVtbyBhcHBsaWNhdGlvbnMiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgdGhlIGRlbW9uc3RyYXRpb24gYXBwbGljYXRpb24sIHN1Y2ggYXMgZ2x4Z2VhcnMuIFwKK1RoZXNlIGFwcGxpY2F0aW9ucyBjYW4gYmUgdXNlZCBmb3IgTWVzYSB2YWxpZGF0aW9uIGFuZCBiZW5jaG1hcmtpbmcuIgorSE9NRVBBR0UgPSAiaHR0cDovL21lc2EzZC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMSIKKworTElDRU5TRSA9ICJNSVQgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy94ZGVtb3MvZ2x4Z2VhcnMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT05MTQyMjU3ODU0NTBlZmY2NDRhODZjODcxZDNhZTAwZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMveGRlbW9zL2dseGRlbW8uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTg7bWQ1PWIwMWQ1YWIxYWVlOTRkMzViN2VmYWEyZWY0OGUxYTA2IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5mcmVlZGVza3RvcC5vcmcvcHViL21lc2EvZGVtb3MvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWdsc2wtcGVyZi1JbnN0YWxsLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MjYxM2EyYzhjMDEzNzE2ZGIwMmUzZmY1OWQyOTA2MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNGJmZWNiNTgxNmRkZDRiN2IzN2MxYmM4NzZiNjNmMWY3ZjA2ZmRhNTg3OTIyMWE5Nzc0ZDA5NTJmOTBiYTkyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/PSAiZHJtIG9zbWVzYSBmcmVldHlwZTIgZ2JtIGVnbCBnbGVzMSBnbGVzMiBcCisgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEgZ2xldyBnbHUnLCAnJywgZCl9IgorCisjIFRoZSBXYXlsYW5kIGNvZGUgZG9lc24ndCB3b3JrIHdpdGggV2F5bGFuZCAxLjAsIHNvIGRpc2FibGUgaXQgZm9yIG5vdworIyR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zeXN0ZW0tZGF0YS1maWxlcyIKKworUEFDS0FHRUNPTkZJR1tkcm1dID0gIi0tZW5hYmxlLWxpYmRybSwtLWRpc2FibGUtbGliZHJtLGxpYmRybSIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wsLS1kaXNhYmxlLWVnbCx2aXJ0dWFsL2VnbCIKK1BBQ0tBR0VDT05GSUdbZnJlZXR5cGUyXSA9ICItLWVuYWJsZS1mcmVldHlwZTIsLS1kaXNhYmxlLWZyZWV0eXBlMixmcmVldHlwZSIKK1BBQ0tBR0VDT05GSUdbZ2JtXSA9ICItLWVuYWJsZS1nYm0sLS1kaXNhYmxlLWdibSx2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1tnbGVzMV0gPSAiLS1lbmFibGUtZ2xlczEsLS1kaXNhYmxlLWdsZXMxLHZpcnR1YWwvbGliZ2xlczEiCitQQUNLQUdFQ09ORklHW2dsZXMyXSA9ICItLWVuYWJsZS1nbGVzMiwtLWRpc2FibGUtZ2xlczIsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbZ2x1dF0gPSAiLS13aXRoLWdsdXQ9JHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9LC0td2l0aG91dC1nbHV0LCIKK1BBQ0tBR0VDT05GSUdbb3NtZXNhXSA9ICItLWVuYWJsZS1vc21lc2EsLS1kaXNhYmxlLW9zbWVzYSwiCitQQUNLQUdFQ09ORklHW3ZnXSA9ICItLWVuYWJsZS12ZywtLWRpc2FibGUtdmcsdmlydHVhbC9saWJvcGVudmciCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQsLS1kaXNhYmxlLXdheWxhbmQsdmlydHVhbC9saWJnbCB3YXlsYW5kIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLHZpcnR1YWwvbGlieDExIgorUEFDS0FHRUNPTkZJR1tnbGV3XSA9ICItLWVuYWJsZS1nbGV3LC0tZGlzYWJsZS1nbGV3LGdsZXciCitQQUNLQUdFQ09ORklHW2dsdV0gPSAiLS1lbmFibGUtZ2x1LC0tZGlzYWJsZS1nbHUsdmlydHVhbC9saWJnbCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBpdCBjYW4gYmUgY29tcGxldGVseSBlbXB0eSB3aGVuIGFsbCBQQUNLQUdFQ09ORklHIG9wdGlvbnMgYXJlIGRpc2FibGVkCisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7YmluZGlyfQorCisJaWYgWyAtZiAke0R9JHtiaW5kaXJ9L2NsZWFyIF07IHRoZW4KKyAgICAgICAgCW12ICR7RH0ke2JpbmRpcn0vY2xlYXIgJHtEfSR7YmluZGlyfS9jbGVhci5tZXNhLWRlbW9zCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTAuNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYmNhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTAuNi4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgbWVzYV8ke1BWfS5iYgorCitTVU1NQVJZICs9ICIgKE9wZW5HTCBvbmx5LCBubyBFR0wvR0xFUykiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L21lc2E6IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmdsIHZpcnR1YWwvbWVzYSIKKworUyA9ICIke1dPUktESVJ9L21lc2EtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJkcmkgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmN2EyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYwpAQCAtMCwwICsxLDE4NSBAQAorU1VNTUFSWSA9ICJBIGZyZWUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9wZW5HTCBBUEkiCitERVNDUklQVElPTiA9ICJNZXNhIGlzIGFuIG9wZW4tc291cmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPcGVuR0wgc3BlY2lmaWNhdGlvbiAtIFwKK2Egc3lzdGVtIGZvciByZW5kZXJpbmcgaW50ZXJhY3RpdmUgM0QgZ3JhcGhpY3MuICBcCitBIHZhcmlldHkgb2YgZGV2aWNlIGRyaXZlcnMgYWxsb3dzIE1lc2EgdG8gYmUgdXNlZCBpbiBtYW55IGRpZmZlcmVudCBlbnZpcm9ubWVudHMgXAorcmFuZ2luZyBmcm9tIHNvZnR3YXJlIGVtdWxhdGlvbiB0byBjb21wbGV0ZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZm9yIG1vZGVybiBHUFVzLiBcCitNZXNhIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgb3ZlcmFsbCBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIGFuZCBYLm9yZyBcCitlbnZpcm9ubWVudC4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9tZXNhM2Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvbGljZW5zZS5odG1sO21kNT02YTIzNDQ1OTgyYTdhOTcyYWMxOThlOTNjYzFjYjNkZSIKKworUEUgPSAiMiIKKworREVQRU5EUyA9ICJleHBhdCBtYWtlZGVwZW5kLW5hdGl2ZSBmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgbGlieG1sMi1uYXRpdmUgdWRldiIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJnbCB2aXJ0dWFsL2xpYmdsZXMxIHZpcnR1YWwvbGliZ2xlczIgdmlydHVhbC9lZ2wgdmlydHVhbC9tZXNhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHl0aG9ubmF0aXZlIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJvcGVuZ2wiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQtZ2xhcGkiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJlZ2wgZ2xlcyBkcmkgXAorCQkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9XAorCQkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX1cCisJCSIKKworWDExX0RFUFMgPSAieGY4NmRyaXByb3RvIGdscHJvdG8gdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4eGY4NnZtIGxpYnhkYW1hZ2UgbGlieGZpeGVzIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLWdseC10bHMsLS1kaXNhYmxlLWdseCwke1gxMV9ERVBTfSIKK1BBQ0tBR0VDT05GSUdbeHZtY10gPSAiLS1lbmFibGUteHZtYywtLWRpc2FibGUteHZtYyxsaWJ4dm1jIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICIsLHdheWxhbmQiCisKK0RSSURSSVZFUlMgPSAic3dyYXN0IgorRFJJRFJJVkVSU19hcHBlbmRfeDg2ID0gIixyYWRlb24scjIwMCxub3V2ZWF1LGk5NjUsaTkxNSIKK0RSSURSSVZFUlNfYXBwZW5kX3g4Ni02NCA9ICIscmFkZW9uLHIyMDAsbm91dmVhdSxpOTY1LGk5MTUiCitQQUNLQUdFQ09ORklHW2RyaV0gPSAiLS1lbmFibGUtZHJpIC0td2l0aC1kcmktZHJpdmVycz0ke0RSSURSSVZFUlN9LCAtLWRpc2FibGUtZHJpLCBkcmkycHJvdG8gbGliZHJtIgorUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLCAtLWRpc2FibGUtZHJpMywgZHJpM3Byb3RvIHByZXNlbnRwcm90byBsaWJ4c2htZmVuY2UiCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtZ2JtIgorCitQQUNLQUdFQ09ORklHW2dsZXNdID0gIi0tZW5hYmxlLWdsZXMxIC0tZW5hYmxlLWdsZXMyLCAtLWRpc2FibGUtZ2xlczEgLS1kaXNhYmxlLWdsZXMyIgorCitFR0xfUExBVEZPUk1TICA9ICJkcm0iCitFR0xfUExBVEZPUk1TIC49IiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICcseDExJywgJycsIGQpfSIKK0VHTF9QTEFURk9STVMgLj0iJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnd2F5bGFuZCcsICcsd2F5bGFuZCcsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsIC0td2l0aC1lZ2wtcGxhdGZvcm1zPSR7RUdMX1BMQVRGT1JNU30sIC0tZGlzYWJsZS1lZ2wiCisKK0dBTExJVU1EUklWRVJTID0gInN3cmFzdCIKK0dBTExJVU1EUklWRVJTX0xMVk0zMyA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdyNjAwJywgJ3JhZGVvbnNpLHI2MDAnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tyNjAwXSA9ICIiCitHQUxMSVVNRFJJVkVSU19MTFZNMzNfRU5BQkxFRCA9ICIke0BiYXNlX3ZlcnNpb25fbGVzc19vcl9lcXVhbCgnTUVTQV9MTFZNX1JFTEVBU0UnLCAnMy4yJywgRmFsc2UsIGxlbignJHtHQUxMSVVNRFJJVkVSU19MTFZNMzN9JykgPiAwLCBkKX0iCitHQUxMSVVNRFJJVkVSU19MTFZNID0gInIzMDAsc3ZnYSxub3V2ZWF1JHtAJywke0dBTExJVU1EUklWRVJTX0xMVk0zM30nIGlmICR7R0FMTElVTURSSVZFUlNfTExWTTMzX0VOQUJMRUR9IGVsc2UgJyd9IgorR0FMTElVTURSSVZFUlNfYXBwZW5kX3g4NiA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdnYWxsaXVtLWxsdm0nLCAnLCR7R0FMTElVTURSSVZFUlNfTExWTX0nLCAnJywgZCl9IgorR0FMTElVTURSSVZFUlNfYXBwZW5kX3g4Ni02NCA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdnYWxsaXVtLWxsdm0nLCAnLCR7R0FMTElVTURSSVZFUlNfTExWTX0nLCAnJywgZCl9IgorIyBrZWVwIC0td2l0aC1nYWxsaXVtLWRyaXZlcnMgc2VwYXJhdGUsIGJlY2F1c2Ugd2hlbiBvbmx5IG9uZSBvZiBnYWxsaXVtIHZlcnNpb25zIGlzIGVuYWJsZWQsIG90aGVyIDIgd2VyZSBhZGRpbmcgLS13aXRob3V0LWdhbGxpdW0tZHJpdmVycworUEFDS0FHRUNPTkZJR1tnYWxsaXVtXSAgICAgID0gIi0td2l0aC1nYWxsaXVtLWRyaXZlcnM9JHtHQUxMSVVNRFJJVkVSU30sIC0td2l0aG91dC1nYWxsaXVtLWRyaXZlcnMiCitNRVNBX0xMVk1fUkVMRUFTRSA/PSAiMy4zIgorUEFDS0FHRUNPTkZJR1tnYWxsaXVtLWxsdm1dID0gIi0tZW5hYmxlLWdhbGxpdW0tbGx2bSAtLWVuYWJsZS1sbHZtLXNoYXJlZC1saWJzLCAtLWRpc2FibGUtZ2FsbGl1bS1sbHZtLCBsbHZtJHtNRVNBX0xMVk1fUkVMRUFTRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7QCdlbGZ1dGlscycgaWYgJHtHQUxMSVVNRFJJVkVSU19MTFZNMzNfRU5BQkxFRH0gZWxzZSAnJ30iCitleHBvcnQgV0FOVF9MTFZNX1JFTEVBU0UgPSAiJHtNRVNBX0xMVk1fUkVMRUFTRX0iCitQQUNLQUdFQ09ORklHW3hhXSAgPSAiLS1lbmFibGUteGEsIC0tZGlzYWJsZS14YSIKKworIyBsbHZtcGlwZSBpcyBzbG93IGlmIGNvbXBpbGVkIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIgKGUuZy4gLU8yKQorRlVMTF9PUFRJTUlaQVRJT05fYXBwZW5kID0gIiAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciIKKworIyBNdWx0aXBsZSB2aXJ0dWFsL2dsIHByb3ZpZGVycyBiZWluZyBidWlsdCBicmVha3Mgc3RhZ2luZworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKKyMgUmVtb3ZlIHRoZSBtZXNhIGRlcGVuZGVuY3kgb24gbWVzYS1kZXYsIGFzIG1lc2EgaXMgZW1wdHkKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK1BBQ0tBR0VTID0rICJsaWJlZ2wtbWVzYSBsaWJlZ2wtbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYm9zbWVzYSBsaWJvc21lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJnbC1tZXNhIGxpYmdsLW1lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJnbGFwaSBsaWJnbGFwaS1kZXYgXAorICAgICAgICAgICAgIGxpYmdibSBsaWJnYm0tZGV2IFwKKyAgICAgICAgICAgICBsaWJnbGVzMS1tZXNhIGxpYmdsZXMxLW1lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJnbGVzMi1tZXNhIGxpYmdsZXMyLW1lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJnbGVzMy1tZXNhIGxpYmdsZXMzLW1lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJ3YXlsYW5kLWVnbCBsaWJ3YXlsYW5kLWVnbC1kZXYgXAorICAgICAgICAgICAgIGxpYnh2bWNzb2Z0cGlwZSBsaWJ4dm1jc29mdHBpcGUtZGV2IFwKKyAgICAgICAgICAgICBsaWJ4YXRyYWNrZXIgbGlieGF0cmFja2VyLWRldiBcCisgICAgICAgICAgICAgbWVzYS1tZWdhZHJpdmVyIFwKKyAgICAgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgRHJpdmVycyBuZXZlciBuZWVkIGxpYnRvb2wgLmxhIGZpbGVzCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9kcmkvKi5sYQorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZWdsLyoubGEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2dhbGxpdW0tcGlwZS8qLmxhCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9nYm0vKi5sYQorICAgIAorICAgICMgaXQgd2FzIHBhY2thZ2VkIGluIGxpYmRyaWNvcmU5LjEuMy0xIGFuZCBwcmV2ZW50aW5nIHVwZ3JhZGVzIHdoZW4gZGViaWFuLmJiY2xhc3Mgd2FzIHVzZWQgCisgICAgcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vZHJpcmMKK30KKworIyBGb3IgdGhlIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgT3BlbkdMIGludGVyZmFjZXMsIGluamVjdCB2YXJpYWJsZXMgc28gdGhhdAorIyB0aGV5IGRvbid0IGdldCBEZWJpYW4tcmVuYW1lZCAod2hpY2ggd291bGQgcmVtb3ZlIHRoZSAtbWVzYSBzdWZmaXgpLCBhbmQKKyMgUlBST1ZJREVzL1JDT05GTElDVHMgb24gdGhlIGdlbmVyaWMgbGliZ2wgbmFtZS4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZvciBwIGluICgoImVnbCIsICJsaWJlZ2wiLCAibGliZWdsMSIpLAorICAgICAgICAgICAgICAoImRyaSIsICJsaWJnbCIsICJsaWJnbDEiKSwKKyAgICAgICAgICAgICAgKCJnbGVzIiwgImxpYmdsZXMxIiwgImxpYmdsZXN2MS1jbTEiKSwKKyAgICAgICAgICAgICAgKCJnbGVzIiwgImxpYmdsZXMyIiwgImxpYmdsZXN2Mi0yIiksCisgICAgICAgICAgICAgICgiZ2xlcyIsICJsaWJnbGVzMyIsKSk6CisgICAgICAgIGlmIG5vdCBwWzBdIGluIHBrZ2NvbmZpZzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZ1bGxwID0gcFsxXSArICItbWVzYSIKKyAgICAgICAgcGtncyA9ICIgIi5qb2luKHBbMTpdKQorICAgICAgICBkLnNldFZhcigiREVCSUFOX05PQVVUT05BTUVfIiArIGZ1bGxwLCAiMSIpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVQTEFDRVNfIiArIGZ1bGxwLCBwa2dzKQorICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJDT05GTElDVFNfIiArIGZ1bGxwLCBwa2dzKQorICAgICAgICAKKyAgICAgICAgIyBGb3IgLWRldiwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYm90aCB0aGUgRGViaWFuIGFuZCBvcmlnaW5hbCBuYW1lCisgICAgICAgIGZ1bGxwICs9ICItZGV2IgorICAgICAgICBwa2dzID0gcFsxXSArICItZGV2IgorICAgICAgICBkLnNldFZhcigiREVCSUFOX05PQVVUT05BTUVfIiArIGZ1bGxwLCAiMSIpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVQTEFDRVNfIiArIGZ1bGxwLCBwa2dzKQorICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJDT05GTElDVFNfIiArIGZ1bGxwLCBwa2dzKQorfQorCitweXRob24gbWVzYV9wb3B1bGF0ZV9wYWNrYWdlcygpIHsKKyAgICBwa2dzID0gWydtZXNhJywgJ21lc2EtZGV2JywgJ21lc2EtZGJnJ10KKyAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgIGQuc2V0VmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBwa2cucmVwbGFjZSgibWVzYSIsICJtZXNhLWRyaSIsIDEpKQorICAgICAgICBkLnNldFZhcigiUkNPTkZMSUNUU18lcyIgJSBwa2csIHBrZy5yZXBsYWNlKCJtZXNhIiwgIm1lc2EtZHJpIiwgMSkpCisgICAgICAgIGQuc2V0VmFyKCJSUkVQTEFDRVNfJXMiICUgcGtnLCBwa2cucmVwbGFjZSgibWVzYSIsICJtZXNhLWRyaSIsIDEpKQorCisgICAgaW1wb3J0IHJlCisgICAgZHJpX2RyaXZlcnNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignbGliZGlyJywgVHJ1ZSksICJkcmkiKQorICAgIGRyaV9wa2dzID0gb3MubGlzdGRpcihkLmdldFZhcignUEtHRCcsIFRydWUpICsgZHJpX2RyaXZlcnNfcm9vdCkKKyAgICBsaWJfbmFtZSA9IGQuZXhwYW5kKCIke01MUFJFRklYfW1lc2EtbWVnYWRyaXZlciIpCisgICAgZm9yIHAgaW4gZHJpX3BrZ3M6CisgICAgICAgIG0gPSByZS5tYXRjaCgnXiguKilfZHJpXC5zbyQnLCBwKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcGtnX25hbWUgPSAiICR7TUxQUkVGSVh9bWVzYS1kcml2ZXItJXMiICUgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfJXMiICUgbGliX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJDT05GTElDVFNfJXMiICUgbGliX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCisKKyAgICBwaXBlX2RyaXZlcnNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignbGliZGlyJywgVHJ1ZSksICJnYWxsaXVtLXBpcGUiKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBpcGVfZHJpdmVyc19yb290LCAnXnBpcGVfKC4qKVwuc28kJywgJ21lc2EtZHJpdmVyLXBpcGUtJXMnLCAnTWVzYSAlcyBwaXBlIGRyaXZlcicsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAibWVzYV9wb3B1bGF0ZV9wYWNrYWdlcyAiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5tZXNhLWRyaXZlci0uKiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZHJpLy5kZWJ1Zy8qIgorRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vZHJpcmMiCitGSUxFU19tZXNhLW1lZ2Fkcml2ZXIgPSAiJHtsaWJkaXJ9L2RyaS8qIgorRklMRVNfbGliZWdsLW1lc2EgPSAiJHtsaWJkaXJ9L2xpYkVHTC5zby4qIgorRklMRVNfbGliZ2JtID0gIiR7bGliZGlyfS9saWJnYm0uc28uKiIKK0ZJTEVTX2xpYmdsZXMxLW1lc2EgPSAiJHtsaWJkaXJ9L2xpYkdMRVN2MSouc28uKiIKK0ZJTEVTX2xpYmdsZXMyLW1lc2EgPSAiJHtsaWJkaXJ9L2xpYkdMRVN2Mi5zby4qIgorRklMRVNfbGliZ2wtbWVzYSA9ICIke2xpYmRpcn0vbGliR0wuc28uKiIKK0ZJTEVTX2xpYmdsYXBpID0gIiR7bGliZGlyfS9saWJnbGFwaS5zby4qIgorRklMRVNfbGlib3NtZXNhID0gIiR7bGliZGlyfS9saWJPU01lc2Euc28uKiIKK0ZJTEVTX2xpYndheWxhbmQtZWdsID0gIiR7bGliZGlyfS9saWJ3YXlsYW5kLWVnbC5zby4qIgorRklMRVNfbGlieHZtY3NvZnRwaXBlID0gIiR7bGliZGlyfS9saWJYdk1Dc29mdHBpcGUuc28uKiIKK0ZJTEVTX2xpYnhhdHJhY2tlciA9ICIke2xpYmRpcn0vbGlieGF0cmFja2VyLnNvLioiCisKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vcGtnY29uZmlnL2RyaS5wYyIKK0ZJTEVTX2xpYmVnbC1tZXNhLWRldiA9ICIke2xpYmRpcn0vbGliRUdMLiogJHtpbmNsdWRlZGlyfS9FR0wgJHtpbmNsdWRlZGlyfS9LSFIgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9lZ2wucGMiCitGSUxFU19saWJnYm0tZGV2ID0gIiR7bGliZGlyfS9saWJnYm0uKiAke2xpYmRpcn0vcGtnY29uZmlnL2dibS5wYyAke2luY2x1ZGVkaXJ9L2dibS5oIgorRklMRVNfbGliZ2wtbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYkdMLiogJHtpbmNsdWRlZGlyfS9HTCAke2xpYmRpcn0vcGtnY29uZmlnL2dsLnBjIgorRklMRVNfbGliZ2xhcGktZGV2ID0gIiR7bGliZGlyfS9saWJnbGFwaS4qIgorRklMRVNfbGliZ2xlczEtbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYkdMRVN2MSouKiAke2luY2x1ZGVkaXJ9L0dMRVMgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nbGVzdjEqLnBjIgorRklMRVNfbGliZ2xlczItbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYkdMRVN2Mi4qICR7aW5jbHVkZWRpcn0vR0xFUzIgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nbGVzdjIucGMiCitGSUxFU19saWJnbGVzMy1tZXNhLWRldiA9ICIke2luY2x1ZGVkaXJ9L0dMRVMzIgorRklMRVNfbGlib3NtZXNhLWRldiA9ICIke2xpYmRpcn0vbGliT1NNZXNhLiogJHtpbmNsdWRlZGlyfS9vc21lc2EuaCAke2xpYmRpcn0vcGtnY29uZmlnL29zbWVzYS5wYyIKK0ZJTEVTX2xpYndheWxhbmQtZWdsLWRldiA9ICIke2xpYmRpcn0vcGtnY29uZmlnL3dheWxhbmQtZWdsLnBjICR7bGliZGlyfS9saWJ3YXlsYW5kLWVnbC4qIgorRklMRVNfbGlieHZtY3NvZnRwaXBlLWRldiA9ICIke2xpYmRpcn0vbGliWHZNQ3NvZnRwaXBlLnNvICR7bGliZGlyfS9saWJYdk1Dc29mdHBpcGUubGEiCitGSUxFU19saWJ4YXRyYWNrZXItZGV2ID0gIiR7bGliZGlyfS9saWJ4YXRyYWNrZXIuc28gJHtsaWJkaXJ9L2xpYnhhdHJhY2tlci5sYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0veGFfdHJhY2tlci5oICR7aW5jbHVkZWRpcn0veGFfY29tcG9zaXRlLmggJHtpbmNsdWRlZGlyfS94YV9jb250ZXh0LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL3hhdHJhY2tlci5wYyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZHJpLy5kZWJ1Zy8qICR7bGliZGlyfS9lZ2wvLmRlYnVnLyogJHtsaWJkaXJ9L2dibS8uZGVidWcvKiAke2xpYmRpcn0vZ2FsbGl1bS1waXBlLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTAuNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1NTA2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTAuNi4zLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5mcmVlZGVza3RvcC5vcmcvcHViL21lc2EvJHtQVn0vbWVzYS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NTNlNTI1ZDJmMjBlZDQ4ZmNhOGYxZWMzMTc2ZmQ4MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ODU5MmUwN2MzNTBjZDJlODk2OWI3M2ZhODMwNDhjNjU3YTM5ZmUyZjEzZjNiODhmNWU1ODE4ZmUyZTQ2NzZkIgorCisjYmVjYXVzZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGFsbCBhcHBzIHdpbGwgdXNlIHBrZ2NvbmZpZywKKyNtYWtlIGVnbHBsYXRmb3JtLmggaW5kZXBlbmRlbnQgb2YgTUVTQV9FR0xfTk9fWDExX0hFQURFUgorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZWdsJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKyAgICAgICAgc2VkIC1pIC1lICdzL14jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykkLyNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSB8fCAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnMCcsICcxJywgZCl9LycgJHtEfSR7aW5jbHVkZWRpcn0vRUdML2VnbHBsYXRmb3JtLmgKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDM0NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV9naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworU1JDUkVWID0gImVhMGQxZjU3NWMyMTRjMDliYTNkZjEyNjQ0YTk2MGU4NmUwMzE3NjYiCitQViA9ICIxMC41LjQrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L21lc2EvbWVzYTticmFuY2g9MTAuNSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyArPSAicHl0aG9uLW1ha28tbmF0aXZlIgorCitpbmhlcml0IHB5dGhvbm5hdGl2ZQorCisjYmVjYXVzZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGFsbCBhcHBzIHdpbGwgdXNlIHBrZ2NvbmZpZywKKyNtYWtlIGVnbHBsYXRmb3JtLmggaW5kZXBlbmRlbnQgb2YgTUVTQV9FR0xfTk9fWDExX0hFQURFUgorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZWdsJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKyAgICAgICAgc2VkIC1pIC1lICdzL14jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykkLyNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSB8fCAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnMCcsICcxJywgZCl9LycgJHtEfSR7aW5jbHVkZWRpcn0vRUdML2VnbHBsYXRmb3JtLmgKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYTY1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vZmlsZXMvbWluaS14LXNlc3Npb24KQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjCisjIFZlcnkgc2ltcGxlIHNlc3Npb24gbWFuYWdlciBmb3IgTWluaSBYCisjCisKKyMgVW5jb21tZW50IGJlbG93IHRvIGVuYWJsZSBwYXJzaW5nIG9mIGRlYmlhbiBtZW51IGVudHJ5cworIyBleHBvcnQgTUJfVVNFX0RFQl9NRU5VUz0xIAorCitpZiBbIC1lICRIT01FLy5taW5pX3gvc2Vzc2lvbiBdCit0aGVuCitleGVjICRIT01FLy5taW5pX3gvc2Vzc2lvbgorZmkKKworaWYgWyAtZSAvZXRjL21pbmlfeC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgL2V0Yy9taW5pX3gvc2Vzc2lvbgorZmkKKworTUlOSV9YX1NFU1NJT05fRElSPS9ldGMvbWluaV94L3Nlc3Npb24uZAoraWYgWyAtZCAiJE1JTklfWF9TRVNTSU9OX0RJUiIgXTsgdGhlbgorCSMgRXhlY3V0ZSBzZXNzaW9uIGZpbGUgb24gYmVoYWxmIG9mIGZpbGUgb3duZXIKKwlmaW5kICRNSU5JX1hfU0VTU0lPTl9ESVIgLXR5cGUgZiB8IHdoaWxlIHJlYWQgU0VTU0lPTkZJTEU7IGRvCisJCXNldCArZQorCQlVU0VSTkFNRT1gc3RhdCAtYyAlVSAkU0VTU0lPTkZJTEVgCisJCSMgVXNpbmcgc3UgcmF0aGVyIHRoYW4gc3VkbyBhcyBsYXRlc3QgMS44LjEgY2F1c2UgZmFpbHVyZSBbWU9DVE8gIzEyMTFdCisjCQlzdSAtbCAtYyAnJFNFU1NJT05GSUxFJicgJFVTRVJOQU1FCisJCXN1ZG8gLWIgLWkgLXUgJFVTRVJOQU1FICRTRVNTSU9ORklMRSYKKwkJc2V0IC1lCisJZG9uZQorZmkKKworIyBUaGlzIHJlc29sdXRpb24gaXMgYmlnIGVub3VnaCBmb3IgaG9iMidzIG1heCB3aW5kb3cgc2l6ZS4KK3hyYW5kciAtcyAxMDI0eDc2OAorCisjIERlZmF1bHQgZmlsZXMgdG8gcnVuIGlmICRIT01FLy5taW5pX3gvc2Vzc2lvbiBvciAvZXRjL21pbmlfeC9zZXNzaW9uCisjIGRvbnQgZXhpc3QuIAorCittYXRjaGJveC10ZXJtaW5hbCYKK2V4ZWMgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vbWluaS14LXNlc3Npb25fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODlkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vbWluaS14LXNlc3Npb25fMC4xLmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiVmVyeSBzaW1wbGUgc2Vzc2lvbiBtYW5hZ2VyIGZvciBYIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEucG9reWxpbnV4Lm9yZyIKKworUFIgPSAicjQiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9taW5pLXgtc2Vzc2lvbjtlbmRsaW5lPTU7bWQ1PWI2NDMwYmZmYmNmMDVmOTc2MGU3MjkzODgyNmI3NDg3IgorCitTRUNUSU9OID0gIngxMSIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtY29tbW9uIgorCitTUkNfVVJJID0gImZpbGU6Ly9taW5pLXgtc2Vzc2lvbiIKK1MgPSAiJHtXT1JLRElSfSIKKworUkRFUEVORFNfJHtQTn0gPSAic3VkbyIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIngtc2Vzc2lvbi1tYW5hZ2VyIgorQUxURVJOQVRJVkVfVEFSR0VUW3gtc2Vzc2lvbi1tYW5hZ2VyXSA9ICIke2JpbmRpcn0vbWluaS14LXNlc3Npb24iCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI1MCIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbWluaS14LXNlc3Npb24gJHtEfS8ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzhhODMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0ZpeCBidWlsZCBmb3IgUyAhPSBCCisKK1RoaXMgcGF0Y2ggaXMgc3BlY2lmaWMgdG8gdmVyc2lvbiAxLjQueAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgQCBodHRwczovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214L2lzc3Vlcy84MQorU2lnbmVkLW9mZi1ieTogVG9tYXMgRnJ5ZHJ5Y2ggPHRvbWFzQHNsZWVwZml2ZS5jb20+CistLQorSW5kZXg6IGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC1ndGsvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9kb2NzL3JlZmVyZW5jZS9saWJteC1ndGsvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNTowNzowMi4wMjcxNTQ3ODggKzAxMDAKKysrKyBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MTQ6MzMuNjg0MzE4NjUwICswMTAwCitAQCAtMSwzICsxLDYgQEAKKytFWFRSQV9ESVNUPQorK0NMRUFORklMRVM9CisrCisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBXZSByZXF1aXJlIGF1dG9tYWtlIDEuNiBhdCBsZWFzdC4KK0BAIC03Nyw3ICs4MCw3IEBACisgR1RLRE9DX0xJQlM9JChNWF9MSUJTKSAkKHRvcF9idWlsZGRpcikvbXgtZ3RrL2xpYm14LWd0ay0kKE1YX0FQSV9WRVJTSU9OKS5sYQorIAorICMgVGhpcyBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgZ3RrLWRvYyBtYWtlIHJ1bGVzLCBjb3BpZWQgYnkgZ3RrZG9jaXplLgorLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9ndGstZG9jLm1ha2UKKytpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9ndGstZG9jLm1ha2UKKyAKKyAjIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUKKyBFWFRSQV9ESVNUICs9IHZlcnNpb24ueG1sLmluCitJbmRleDogZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZG9jcy9yZWZlcmVuY2UvbGlibXgvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNTowNzowMi4wMjcxNTQ3ODggKzAxMDAKKysrKyBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToxNDoyNC40NTYzNzgxMzUgKzAxMDAKK0BAIC0xLDMgKzEsNiBAQAorK0VYVFJBX0RJU1Q9CisrQ0xFQU5GSUxFUz0KKysKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyAjIFdlIHJlcXVpcmUgYXV0b21ha2UgMS42IGF0IGxlYXN0LgorQEAgLTEwNiw3ICsxMDksNyBAQAorIEdUS0RPQ19MSUJTPSQoTVhfTElCUykgJCh0b3BfYnVpbGRkaXIpL214L2xpYm14LSQoTVhfQVBJX1ZFUlNJT04pLmxhCisgCisgIyBUaGlzIGluY2x1ZGVzIHRoZSBzdGFuZGFyZCBndGstZG9jIG1ha2UgcnVsZXMsIGNvcGllZCBieSBndGtkb2NpemUuCistaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2d0ay1kb2MubWFrZQorK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL2d0ay1kb2MubWFrZQorIAorICMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZQorIEVYVFJBX0RJU1QgKz0gdmVyc2lvbi54bWwuaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzkzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0ZpeCBtaXNzaW5nIGluY2x1ZGUgZGlyZWN0b3J5IHdoZW4gYnVpbGRpbmcgdGVzdHMKKworVGhpcyBwYXRjaCBpcyBjdXJyZW50bHkgcmVxdWlyZWQgZm9yIGFsbCB2ZXJzaW9ucyBvZiBteAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgQCBodHRwczovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214L2lzc3Vlcy84MgorU2lnbmVkLW9mZi1ieTogVG9tYXMgRnJ5ZHJ5Y2ggPHRvbWFzQHNsZWVwZml2ZS5jb20+CistLQorSW5kZXg6IGdpdC90ZXN0cy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MTg6NTYuOTE4NTk2NDI1ICswMTAwCisrKysgZ2l0L3Rlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MjM6MjYuODY0NzgxNDAxICswMTAwCitAQCAtMTAsNyArMTAsOCBAQAorIAorIElOQ0xVREVTID0gXAorIAktSSQodG9wX3NyY2RpcikgXAorLQktSSQodG9wX2J1aWxkZGlyKQorKwktSSQodG9wX2J1aWxkZGlyKVwKKysJLUkkKHRvcF9idWlsZGRpcikvbXgKKyAKKyBub2luc3RfUFJPR1JBTVMgPSAJCQlcCisgCXRlc3QtZGVmb3JtLXRleHR1cmUJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzViNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgbXguaW5jCisKKyMgVGhlIDEuNC43IHRhZyBkb2VzIG5vdCBidWlsZCBhZ2FpbnN0IGNvZ2wgMS4xNCwgcHVsbCBpbiBhIHJldmlzaW9uIHdpdGggYSBmaXgKK1NSQ1JFViA9ICI5YjFkYjZiODA2MGJkMDBiMTIxYTY5MmY5NDI0MDRhMjRhZTI5NjBmIgorUFYgPSAiMS40LjcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9jbHV0dGVyLXByb2plY3QvbXguZ2l0O2JyYW5jaD1teC0xLjQgXAorCSAgIGZpbGU6Ly9maXgtYnVpbGQtZGlyLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LXRlc3QtaW5jbHVkZXMucGF0Y2ggXAorCSAgIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL214L214LXdpZGdldC5jO2JlZ2lubGluZT04O2VuZGxpbmU9MjA7bWQ1PTEzYmJhM2M5NzNhNzI0MTRhNzAxZTFlODdiNWVlODc5IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3ZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJDbHV0dGVyIGJhc2VkIFVJIHdpZGdldCBsaWJyYXJ5IgorTElDRU5TRSA9ICJMR1BMdjIuMSIKKworaW5oZXJpdCBjbHV0dGVyIGF1dG90b29scy1icm9rZW5zZXAKKworREVQRU5EUyA9ICJjbHV0dGVyLTEuMCBkYnVzLWdsaWIgZ2RrLXBpeGJ1ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vc291cmNlLmNsdXR0ZXItcHJvamVjdC5vcmcvc291cmNlcy9teC8ke0BnZXRfdmVyZGlyKCIke1BWfSIpfS9teC0ke1BWfS50YXIueHoiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbgkJXAorCSAgICAgICAgLS1kaXNhYmxlLWd0ay1kb2MJCVwKKwkgICAgICAgIC0tZGlzYWJsZS1ndGstd2lkZ2V0cwkJXAorCQktLXdpdGgtZGJ1cwkJCVwKKwkJLS13aXRoLXdpbnN5cz1ub25lCQlcCisJCS0td2l0aG91dC1jbHV0dGVyLWltY29udGV4dAlcCisJCS0td2l0aG91dC1jbHV0dGVyLWdlc3R1cmUJXAorCQktLXdpdGhvdXQtc3RhcnR1cC1ub3RpZmljYXRpb24JXAorCQktLXdpdGhvdXQtZ2xhZGUJCQlcCisJICAgICAgICIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDY3ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYgpAQCAtMCwwICsxLDIxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJDbHV0dGVyIHBhY2thZ2UgZ3JvdXBzIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInI2IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0tY29yZSBcCisgICAgIgorCitTVU1NQVJZXyR7UE59LWNvcmUgPSAiQ2x1dHRlciBncmFwaGljcyBsaWJyYXJ5IgorUkRFUEVORFNfJHtQTn0tY29yZSA9ICJcCisgICAgY2x1dHRlci0xLjAgXAorICAgIGNsdXR0ZXItZ3N0LTMuMCBcCisgICAgY2x1dHRlci1ndGstMS4wIFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGMwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkRpcmVjdEZCIHdpdGhvdXQgWDExIgorTElDRU5TRSA9ICJNSVQiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1RPVUNIID0gJyAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ0b3VjaHNjcmVlbiIsICJ0c2xpYiB0c2xpYi1jYWxpYnJhdGUgdHNsaWItdGVzdHMiLCAiIixkKX0nCisKK1JERVBFTkRTXyR7UE59ID0gIiBcCisJCWRpcmVjdGZiIFwKKwkJZGlyZWN0ZmItZXhhbXBsZXMgXAorCQlwYW5nbyBcCisJCXBhbmdvLW1vZHVsZXMgXAorCQlmb250Y29uZmlnIFwKKwkJJHtUT1VDSH0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzMwMWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJCYXNpYyBYMTEgc2Vzc2lvbiIKK0RFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHNldCB1cCBhIGJhc2ljIHdvcmtpbmcgWDExIHNlc3Npb24iCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24gbWF0Y2hib3gtd20KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlciBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUteDExLXV0aWxzIFwKKyAgICBkYnVzIFwKKyAgICBwb2ludGVyY2FsIFwKKyAgICBtYXRjaGJveC10ZXJtaW5hbCBcCisgICAgbWF0Y2hib3gtd20gXAorICAgIG1pbmkteC1zZXNzaW9uIFwKKyAgICBsaWJlcmF0aW9uLWZvbnRzIFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlci5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2YxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlci5iYgpAQCAtMCwwICsxLDIxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIlgxMSBkaXNwbGF5IHNlcnZlciIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjQwIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24gWFNFUlZFUgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIHhmODYtdmlkZW8tZmJkZXYgeGY4Ni1pbnB1dC1ldmRldiIKK1hTRVJWRVJDT0RFQ1MgPz0gIiIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgICR7WFNFUlZFUn0gXAorICAgICR7WFNFUlZFUkNPREVDU30gXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTM3ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiCkBAIC0wLDAgKzEsMzQgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0aW9uCisjCisKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjQwIgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24geDExLWNvbW1vbgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXRpbHMiCisKKyMgeHNlcnZlci1jb21tb24sIHgxMS1jb21tb24KK1ZJUlRVQUwtUlVOVElNRV94c2VydmVyX2NvbW1vbiA/PSAieDExLWNvbW1vbiIKKworIyBlbHNhLCB4c2VydmVyLW5vZG0taW5pdAorVklSVFVBTC1SVU5USU1FX2dyYXBoaWNhbF9pbml0X21hbmFnZXIgPz0gInhzZXJ2ZXItbm9kbS1pbml0IgorCitTVU1NQVJZID0gIlgxMSBkaXNwbGF5IHNlcnZlciBhbmQgYmFzaWMgdXRpbGl0aWVzIgorUkRFUEVORFNfJHtQTn0gPSAiXAorICAgICR7UE59LXhzZXJ2ZXIgXAorICAgICR7UE59LXV0aWxzIFwKKyAgICAiCisKK1NVTU1BUllfJHtQTn0tdXRpbHMgPSAiWDExIGJhc2ljIHV0aWxpdGllcyBhbmQgaW5pdCIKK1JERVBFTkRTXyR7UE59LXV0aWxzID0gIlwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV94c2VydmVyX2NvbW1vbn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX2dyYXBoaWNhbF9pbml0X21hbmFnZXJ9IFwKKyAgICB4YXV0aCBcCisgICAgeGhvc3QgXAorICAgIHhzZXQgXAorICAgIHhyYW5kciBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwZmRmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby5pbmMKQEAgLTAsMCArMSw5OSBAQAorU1VNTUFSWSA9ICJGcmFtZXdvcmsgZm9yIGxheW91dCBhbmQgcmVuZGVyaW5nIG9mIGludGVybmF0aW9uYWxpemVkIHRleHQiCitERVNDUklQVElPTiA9ICJQYW5nbyBpcyBhIGxpYnJhcnkgZm9yIGxheWluZyBvdXQgYW5kIHJlbmRlcmluZyBvZiB0ZXh0LCBcCit3aXRoIGFuIGVtcGhhc2lzIG9uIGludGVybmF0aW9uYWxpemF0aW9uLiBQYW5nbyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBcCit0aGF0IHRleHQgbGF5b3V0IGlzIG5lZWRlZCwgdGhvdWdoIG1vc3Qgb2YgdGhlIHdvcmsgb24gUGFuZ28gc28gZmFyIGhhcyBcCitiZWVuIGRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdUSysgd2lkZ2V0IHRvb2xraXQuIFBhbmdvIGZvcm1zIHRoZSBcCitjb3JlIG9mIHRleHQgYW5kIGZvbnQgaGFuZGxpbmcgZm9yIEdUSystMi54LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGFuZ28ub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjArIgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhmdCIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZm9udGNvbmZpZyBmcmVldHlwZSB6bGliIHZpcnR1YWwvbGliaWNvbnYgY2Fpcm8gaGFyZmJ1enogcWVtdS1uYXRpdmUiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ3B0ZXN0JywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14ZnQsLS13aXRob3V0LXhmdCwke1gxMURFUEVORFN9IgorUEFDS0FHRUNPTkZJR1twdGVzdF0gPSAiLS1lbmFibGUtaW5zdGFsbGVkLXRlc3RzLC0tZGlzYWJsZS1pbnN0YWxsZWQtdGVzdHMsZ2xpYi0yLjAtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImdsaWItMi4wLW5hdGl2ZSBjYWlyby1uYXRpdmUgaGFyZmJ1enotbmF0aXZlIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecGFuZ28tbW9kdWxlLS4qIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJwYW5nby1tb2R1bGUtYmFzaWMtZmMiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgcWVtdSBwdGVzdAorCisjIENyZWF0ZSBhIHBhbmdvLW1vZHVsZXMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LW1vZHVsZXMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tbW9kdWxlcyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1tb2R1bGVzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgicGFuZ28tbW9kdWxlIikgIT0gLTFdKX0iCisKKworRVhUUkFfQVVUT1JFQ09ORiA9ICIiCisKKyMgc2VlbXMgdG8gZ28gd3Jvbmcgd2l0aCBkZWZhdWx0IGNmbGFncworRlVMTF9PUFRJTUlaQVRJT05fYXJtID0gIi1PMiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIFwKKwkJLS1lbmFibGUtZXhwbGljaXQtZGVwcz1ubyBcCisJICAgICAgICAtLWRpc2FibGUtZGVidWcgXAorCSAgICAgICAgLS13aXRoLW1scHJlZml4PSR7TUxQUkVGSVh9IgorCitMRUFEX1NPTkFNRSA9ICJsaWJwYW5nby0xLjAqIgorTElCViA9ICIxLjguMCIKKworcGFuZ29fcG9zdGluc3QoKSB7CitpZiAhIFsgLWUgJEQke3N5c2NvbmZkaXJ9L3BhbmdvIF0gOyB0aGVuCisJbWtkaXIgLXAgJEQke3N5c2NvbmZkaXJ9L3BhbmdvCitmaQorCitpZiBbIC1uICIkRCIgXTsgdGhlbgorCSR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCcke2JpbmRpcn0vJHtNTFBSRUZJWH1wYW5nby1xdWVyeW1vZHVsZXMnKX0gXAorCQkkRCR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvKi5zbyBcCisJCT4gJEQke3N5c2NvbmZkaXJ9L3BhbmdvLyR7TUxQUkVGSVh9cGFuZ28ubW9kdWxlcyAyPi9kZXYvbnVsbAorCisJWyAkPyAtbmUgMCBdICYmIGV4aXQgMQorCisJc2VkIC1pIC1lICJzOiREOjoiICREJHtzeXNjb25mZGlyfS9wYW5nby8ke01MUFJFRklYfXBhbmdvLm1vZHVsZXMKKworCWV4aXQgMAorZWxzZQorCSR7YmluZGlyfS8ke01MUFJFRklYfXBhbmdvLXF1ZXJ5bW9kdWxlcyA+IC9ldGMvcGFuZ28vJHtNTFBSRUZJWH1wYW5nby5tb2R1bGVzCitmaQorfQorCisjIFRoaXMgYmluYXJ5IG5lZWRzIHRvIGJlIGNvbXBpbGVkIGZvciB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuICBUaGlzIGlzbid0IHByZXR0eSEKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJaWYgJHtAYmFzZV9jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJbWFrZSBDQz0iJHtCVUlMRF9DQ30iIENGTEFHUz0iIiBBTV9DUFBGTEFHUz0iJChwa2ctY29uZmlnLW5hdGl2ZSAtLWNmbGFncyBnbGliLTIuMCkiIGdlbl9hbGxfdW5pY29kZV9MREFERD0iJChwa2ctY29uZmlnLW5hdGl2ZSAtLWxpYnMgZ2xpYi0yLjApIiAtQyAke0J9L3Rlc3RzIGdlbi1hbGwtdW5pY29kZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke01MUFJFRklYfSIgIT0gIiIgXTsgdGhlbgorCQltdiAke0R9LyR7YmluZGlyfS9wYW5nby1xdWVyeW1vZHVsZXMgJHtEfS8ke2JpbmRpcn0vJHtNTFBSRUZJWH1wYW5nby1xdWVyeW1vZHVsZXMgCisJZmkKK30KKworCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgcGFuZ29fcG9zdGluc3QgPSBkLmdldFZhcigicGFuZ29fcG9zdGluc3QiLCBUcnVlKQorCisgICAgbW9kdWxlc19yb290ID0gZC5leHBhbmQoJyR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMnKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbW9kdWxlc19yb290LCAnXnBhbmdvLSguKilcLnNvJCcsICdwYW5nby1tb2R1bGUtJXMnLCAnUGFuZ28gbW9kdWxlICVzJywgcGFuZ29fcG9zdGluc3QpCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcGFuZ28vKiAke2JpbmRpcn0vKiAke2xpYmRpcn0vbGlicGFuZ28qJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8qLmxhIgorCitGSUxFU18ke1BOfS1wdGVzdCArPSAiJHtsaWJleGVjZGlyfS9pbnN0YWxsZWQtdGVzdHMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pbnN0YWxsZWQtdGVzdHMvcGFuZ28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLy5kZWJ1ZyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImdub21lLWRlc2t0b3AtdGVzdGluZyBsaWJlcmF0aW9uLWZvbnRzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9tdWx0aWxpYi1maXgtY2xlYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0MTRkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9tdWx0aWxpYi1maXgtY2xlYW4ucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VwZGF0ZWQgdG8gYXBwbHkgdG8gcGFuZ28tMS4zMi41CisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHBhbmdvLTEuMzIuNS9jb25maWd1cmUuYWMgcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYworLS0tIHBhbmdvLTEuMzIuNS9jb25maWd1cmUuYWMJMjAxMi0xMi0wNyAwNDo0MzoyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjCTIwMTMtMDEtMDkgMDg6Mjc6NDAuMzI4NTE2NzkyICswMjAwCitAQCAtMjEzLDYgKzIxMywxMSBAQAorCisgQUNfU1VCU1QoUEFOR09fREVCVUdfRkxBR1MpCisKKytBQ19BUkdfV0lUSChtbHByZWZpeCwKKysgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLW1scHJlZml4PTxBUkc+XSwgW211bHRpbGliIHByZWZpeF0pLAorKyAgICAgICAgICAgIG1scHJlZml4X3N0cj0kd2l0aHZhbCwgbWxwcmVmaXhfc3RyPSIiKQorK0FDX0RFRklORV9VTlFVT1RFRChbTUxQUkVGSVhdLCBbIiRtbHByZWZpeF9zdHIiXSwgW211bHRpbGliIHByZWZpeC5dKQorKworIEFDX0FSR19FTkFCTEUocmVidWlsZHMsCisgICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1yZWJ1aWxkc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGUgYWxsIHNvdXJjZSBhdXRvZ2VuZXJhdGlvbiBydWxlc10pXSwsCitkaWZmIC1OdXJkIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYworLS0tIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMJMjAxMi0xMi0xNyAyMDoyNzo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jCTIwMTMtMDEtMDkgMDg6MzE6MTYuMzM2NTEyMDUyICswMjAwCitAQCAtNTU1LDExICs1NTUsMTEgQEAKKyAgICAgICBmaWxlcyA9IGdfbmV3IChjaGFyICosIDMpOworCisgICAgICAgZmlsZXNbMF0gPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfc3lzY29uZl9zdWJkaXJlY3RvcnkgKCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFuZ28ubW9kdWxlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTFBSRUZJWCAicGFuZ28ubW9kdWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICBmaWxlc1sxXSA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9saWJfc3ViZGlyZWN0b3J5ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX1ZFUlNJT04sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kdWxlcy5jYWNoZSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTFBSRUZJWCAibW9kdWxlcy5jYWNoZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICBmaWxlc1syXSA9IE5VTEw7CisgICAgIH0KK0BAIC02NzQsNyArNjc0LDggQEAKKyAgICAgICBpZiAoIW5vX21vZHVsZV93YXJuaW5nKQorCXsKKwkgIGdjaGFyICpmaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9zeXNjb25mX3N1YmRpcmVjdG9yeSAoKSwKKy0JCQkJCSAgICAgICJwYW5nby5tb2R1bGVzIiwKKysvKiBGb3IgbXVsdGlsaWIgY2FzZSwga2VlcCBtdWx0aXBsZSBjb25maWcgZmlsZSBmb3IgZGlmZmVyZW50IGxpYnMgKi8KKysJCQkJCSAgICAgIE1MUFJFRklYICJwYW5nby5tb2R1bGVzIiwKKwkJCQkJICAgICAgTlVMTCk7CisJICBnX2NyaXRpY2FsICgiTm8gbW9kdWxlcyBmb3VuZDpcbiIKKwkJICAgICAgIk5vIGJ1aWx0aW4gb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgd2VyZSBmb3VuZC5cbiIKK2RpZmYgLU51cmQgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYy5yZWogcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYy5yZWoKKy0tLSBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlagkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysrIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqCTIwMTMtMDEtMDkgMDg6Mjc6NDAuMzI4NTE2NzkyICswMjAwCitAQCAtMCwwICsxLDEyIEBACisrLS0tIHBhbmdvL21vZHVsZXMuYwkyMDEwLTA5LTIyIDAzOjM3OjAxLjAwMDAwMDAwMCArMDgwMAorKysrKyBwYW5nby9tb2R1bGVzLmMJMjAxMi0wNS0wOCAyMToyMTowMi4wMDAwMDAwMDAgKzA4MDAKKytAQCAtNTI5LDcgKzUyOSw4IEBACisrCisrICAgaWYgKCFmaWxlX3N0cikKKysgICAgIGZpbGVfc3RyID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X3N5c2NvbmZfc3ViZGlyZWN0b3J5ICgpLAorKy0JCQkJICJwYW5nby5tb2R1bGVzIiwKKysrLyogRm9yIG11bHRpbGliIGNhc2UsIGtlZXAgbXVsdGlwbGUgY29uZmlnIGZpbGUgZm9yIGRpZmZlcmVudCBsaWJzICovCisrKwkJCQkgTUxQUkVGSVggInBhbmdvLm1vZHVsZXMiLAorKyAJCQkJIE5VTEwpOworKworKyAgIGZpbGVzID0gcGFuZ29fc3BsaXRfZmlsZV9saXN0IChmaWxlX3N0cik7CitkaWZmIC1OdXJkIHBhbmdvLTEuMzIuNS9wYW5nby9xdWVyeW1vZHVsZXMuYyBwYW5nby0xLjMyLjUvcGFuZ28vcXVlcnltb2R1bGVzLmMKKy0tLSBwYW5nby0xLjMyLjUvcGFuZ28vcXVlcnltb2R1bGVzLmMJMjAxMi0wOC0yOCAxNToyNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrKyBwYW5nby0xLjMyLjUvcGFuZ28vcXVlcnltb2R1bGVzLmMJMjAxMy0wMS0wOSAwODozMTo0Ny44Mjg1MTEzNTkgKzAyMDAKK0BAIC0zMDQsNyArMzA0LDcgQEAKKworICAgICAgIGNhY2hlX2ZpbGUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfbGliX3N1YmRpcmVjdG9yeSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX1ZFUlNJT04sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2R1bGVzLmNhY2hlIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxQUkVGSVggIm1vZHVsZXMuY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICBlcnIgPSBOVUxMOworICAgICAgIGlmICghZ19maWxlX3NldF9jb250ZW50cyAoY2FjaGVfZmlsZSwgY29udGVudHMtPnN0ciwgLTEsICZlcnIpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4N2E3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjISAvYmluL3NoCisKK2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgcGFuZ28KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS4zNi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTQyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS4zNi44LmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgcGFuZ28uaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIGZpbGU6Ly9tdWx0aWxpYi1maXgtY2xlYW4ucGF0Y2ggXAorIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyMTdhOWE3NTMwMDYyNzUyMTVmYTlmYTEyNzc2MGVjZSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjE4ZGJiNTFiOGFlMTJiYWUwYWI3YTk1OGU3Y2YzMzE3YzlhY2ZjOGExZTExMDNlYzJmMTQ3MTY0YTBmYzJkMDciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2NjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorCitGcm9tIGU0MGUwYTI1Zjk5NmQyZTIwNWM0YmRlYzJjOGE1Y2M3Zjc0ZTUwNjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogTW9uLCAxNSBKdW4gMjAxNSAxNjoyNTozMCAtMDMwMAorU3ViamVjdDogdGVzdHM6IEZpeCBtaXNzaW5nIGluY2x1ZGUgb2YgWHV0aWwuaAorCitUaGUgRUdMIHRlc3RzIHJlbHkgb24gWHV0aWwuaCBiZWluZyBpbmNsdWRlZC4gU29tZSBFR0wgaW1wbGVtZW50YXRpb24KK2RvZXMgbm90IGV4cGxpdGx5IGluY2x1ZGUgaXQgYnkgZGVmYXVsdCBhbmQgdGhlbiB0aGUgYnVpbGQgZmFpbHMuCisKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitSZXZpZXdlZC1ieTogTmVpbCBSb2JlcnRzIDxuZWlsQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMgYi90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jCitpbmRleCAwNTA0YTI2Li4xNTRiNTVjIDEwMDY0NAorLS0tIGEvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYworKysrIGIvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYworQEAgLTMyLDYgKzMyLDcgQEAKKyAvKiBDaHVua3Mgb2YgY29kZSBpbiB0aGlzIGZpbGUgYXJlIHRha2VuIGZyb20gZWdsLXV0aWwuYyAqLworIAorICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyAKKyAjaW5jbHVkZSAicGlnbGl0LXV0aWwtZ2wuaCIKKyAjaW5jbHVkZSAicGlnbGl0LXV0aWwtZWdsLmgiCistLSAKK2NnaXQgdjAuMTAuMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODI1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJPcGVuR0wgZHJpdmVyIHRlc3RpbmcgZnJhbWV3b3JrIgorTElDRU5TRSA9ICJNSVQgJiBMR1BMdjIrICYgR1BMdjMgJiBHUEx2MisgJiBCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMmJlZGVkNzEwM2EzZDhhNDQyYTJhMDM5MWQ2MDdiMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9waWdsaXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2giCisKKyMgRnJvbSAyMDE0LzEyLzA0CitTUkNSRVYgPSAiMTI2YzdkMDQ5YjhmMzJlNTQxNjI1ZDVhMzVmYmM1ZjVlNGU3ZmJmOCIKKyMgKHdoZW4gUFYgZ29lcyBhYm92ZSAxLjAgcmVtb3ZlIHRoZSB0cmFpbGluZyByKQorUFYgPSAiMS4wK2dpdHIke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4cmVuZGVyIHdhZmZsZSB2aXJ0dWFsL2xpYmdsIGxpYmdsdSBweXRob24tbWFrby1uYXRpdmUgcHl0aG9uLW51bXB5LW5hdGl2ZSIKKworaW5oZXJpdCBjbWFrZSBweXRob25uYXRpdmUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2ZyZWVnbHV0XSA9ICItRFBJR0xJVF9VU0VfR0xVVD0xLC1EUElHTElUX1VTRV9HTFVUPTAsZnJlZWdsdXQsIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgIGlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2ZyZWVnbHV0JywgJ3llcycsICdubycsIGQpfSIgPSAibm8iIF07IHRoZW4KKyAgICAgICAgc2VkIC1pIC1lICIvXiMuKmluY2x1ZGUgPEdMXC9mcmVlZ2x1dF9leHQuaD4kL2QiICR7U30vc3JjL3BpZ2xpdC9nbHV0X3dyYXAuaAorICAgICAgICBzZWQgLWkgLWUgIi9eIy4qaW5jbHVkZS4qPEdMXC9nbHV0Lmg+JC9kIiAke1N9L3NyYy9waWdsaXQvZ2x1dF93cmFwLmgKKyAgIGZpCit9CisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BpZ2xpdC8qLy5kZWJ1Zy8iCisKK1JERVBFTkRTXyR7UE59ID0gIndhZmZsZSBweXRob24gcHl0aG9uLW1ha28gcHl0aG9uLWpzb24gcHl0aG9uLXN1YnByb2Nlc3MgXAorCXB5dGhvbi1hcmdwYXJzZSBweXRob24taW1wb3J0bGliIHB5dGhvbi11bml4YWRtaW4gXAorCXB5dGhvbi1tdWx0aXByb2Nlc3NpbmcgcHl0aG9uLXRleHR1dGlscyBweXRob24tbmV0c2VydmVyIHB5dGhvbi1zaGVsbCBcCisJbWVzYS1kZW1vcyBiYXNoIFwKKwkiCisKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9jay9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWNlYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9jay9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIFBvbmcgQ2xvY2sgLSBBIGNsb2NrIHRoYXQgcGxheXMgcG9uZy4gCisgKiAgICAgICAgICAgICBTZWUgaHR0cDovL21vY29sb2NvLmNvbS9hcmNoaXZlcy8wMDE3NjYucGhwIGZvciB0aGUgaW5zcGlyYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1hdHRoZXcgQWxsdW0KKyAqCisgKiBBdXRob3I6IE1hdHRoZXcgQWxsdW0gbWFsbHVtQG9wZW5lZGhhbmQuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgorCisvKiBUd2VhayB2YWx1ZXMgZm9yIGRpZmZlcmVudCBodyBzZXR1cHMgKi8KKworI2RlZmluZSBGUFMgICAgICAgICAgNTAKKyNkZWZpbmUgUkVTWCAgICAgICAgIDQwCisjZGVmaW5lIFJFU1kgICAgICAgICA0MAorI2RlZmluZSBUT19NSVNTX1NFQ1MgNTUKKyNkZWZpbmUgQkFMTERYICAgICAgIDE2CisjZGVmaW5lIEJBTExEWSAgICAgICA0CisKKwordHlwZWRlZiBzdHJ1Y3QgUG9uZ0Nsb2NrCit7CisgIERpc3BsYXkgKnhkcHk7CisgIGludCAgICAgIHhzY3JlZW47CisgIFdpbmRvdyAgIHh3aW4sIHh3aW5fcm9vdDsKKyAgUGl4bWFwICAgYmFja2J1ZmZlcjsKKyAgR0MgICAgICAgeGdjOworICBpbnQgICAgICB4d2luX3dpZHRoLCB4d2luX2hlaWdodDsKKyAgaW50ICAgICAgcGl4ZWx3LCBwaXhlbGg7CisKKyAgaW50ICAgICAgYmFsbF94LCBiYWxsX3ksIGJhbGxfZHgsIGJhbGxfZHk7CisgIGludCAgICAgIGJhdGFfeSwgYmF0Yl95OworICBCb29sICAgICBiYXRhX3RvX21pc3MsIGJhdGJfdG9fbWlzczsKKworfSAKK1BvbmdDbG9jazsKKwordm9pZAorZ2V0X3RpbWUoaW50ICpob3VyLCBpbnQgKm1pbiwgaW50ICpzZWMpCit7CisgIHN0cnVjdCB0aW1ldmFsICAgdHY7CisgIHN0cnVjdCB0bSAgICAgICAqbG9jYWxUaW1lID0gTlVMTDsgCisgIHRpbWVfdCAgICAgICAgICAgYWN0dWFsVGltZTsKKworICBnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKyAgYWN0dWFsVGltZSA9IHR2LnR2X3NlYzsKKyAgbG9jYWxUaW1lID0gbG9jYWx0aW1lKCZhY3R1YWxUaW1lKTsKKworICBpZiAoaG91cikKKyAgICAqaG91ciA9IGxvY2FsVGltZS0+dG1faG91cjsKKyAgCisgIGlmIChtaW4pCisgICAgKm1pbiAgPSBsb2NhbFRpbWUtPnRtX21pbjsKKworICBpZiAoc2VjKQorICAgICpzZWMgID0gbG9jYWxUaW1lLT50bV9zZWM7Cit9CisKK3ZvaWQKK2RyYXdfcmVjdCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrLCAKKwkgICBpbnQgICAgICAgIHgsCisJICAgaW50ICAgICAgICB5LAorCSAgIGludCAgICAgICAgd2lkdGgsCisJICAgaW50ICAgICAgICBoZWlnaHQpCit7CisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIHggKiBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgeSAqIHBvbmdfY2xvY2stPnBpeGVsaCwKKwkJICB3aWR0aCAqIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICBoZWlnaHQgKiBwb25nX2Nsb2NrLT5waXhlbGgpOworfQorCit2b2lkCitkcmF3X2ZpZWxkIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIGludCBpOworCisgIGRyYXdfcmVjdCAocG9uZ19jbG9jaywgMCwgMCwgUkVTWCsxLCAxKTsgIAorICBkcmF3X3JlY3QgKHBvbmdfY2xvY2ssIDAsIFJFU1ktMSwgUkVTWCsxLCAxKTsgIAorCisgIGZvciAoaT0wOyBpIDwgUkVTWS8yOyBpKyspCisgICAgZHJhd19yZWN0IChwb25nX2Nsb2NrLCAoUkVTWC8yKS0xLCBpKjIsIDIsIDEpOyAgCit9CisKK3ZvaWQKK2RyYXdfZGlnaXQgKFBvbmdDbG9jayAqcG9uZ19jbG9jaywgCisJICAgIGludCAgICAgICAgeCwKKwkgICAgaW50ICAgICAgICB5LAorCSAgICBpbnQgICAgICAgIGRpZ2l0KQoreworICBpbnQgZGlnaXRzW10gPSB7IDB4MWY4YzYzZiwgMHgxZjIxMDg2LCAweDFmMGZlMWYsIDB4MWY4N2UxZiwgMHgxMDg3ZTMxLAorCQkgICAweDFmODdjM2YsIDB4MWY4ZmMzZiwgMHg4NDQyMWYsICAweDFmOGZlM2YsIDB4MTA4N2UzZiB9OworCisgIFhSZWN0YW5nbGUgcmVjdHNbNSo1XTsKKyAgaW50IGksaixrOworCisgIGkgPSAwOworCisgIGZvciAoaz0wOyBrPDU7IGsrKykgCisgICAgZm9yIChqPTA7IGo8NTsgaisrKQkKKyAgICAgIGlmIChkaWdpdHNbZGlnaXRdICYgKDEgPDwgKChrKjUpK2opKSkKKwl7CisJICByZWN0c1tpXS54ICAgICAgPSAoeCArIGopICogcG9uZ19jbG9jay0+cGl4ZWx3OyAKKwkgIHJlY3RzW2ldLnkgICAgICA9ICh5ICsgaykgKiBwb25nX2Nsb2NrLT5waXhlbGg7IAorCSAgcmVjdHNbaV0ud2lkdGggID0gcG9uZ19jbG9jay0+cGl4ZWx3OworCSAgcmVjdHNbaV0uaGVpZ2h0ID0gcG9uZ19jbG9jay0+cGl4ZWxoOyAgCisJICBpKys7CisJfQorCisgIFhGaWxsUmVjdGFuZ2xlcyAocG9uZ19jbG9jay0+eGRweSwKKwkJICAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICAgcG9uZ19jbG9jay0+eGdjLAorCQkgICByZWN0cywgaSk7Cit9IAorCit2b2lkCitkcmF3X3RpbWUgKFBvbmdDbG9jayAqcG9uZ19jbG9jaykKK3sKKyAgaW50IGhvdXIsIG1pbjsKKworICBnZXRfdGltZSgmaG91ciwgJm1pbiwgTlVMTCk7CisKKyAgZHJhd19kaWdpdCAocG9uZ19jbG9jaywgCisJICAgICAgKFJFU1gvMikgLSAxNCwKKwkgICAgICA1LAorCSAgICAgIGhvdXIgLyAxMCApOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpIC0gOCwKKwkgICAgICA1LAorCSAgICAgIGhvdXIgJSAxMCApOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpICsgMywKKwkgICAgICA1LAorCSAgICAgIG1pbiAvIDEwICk7CisKKyAgZHJhd19kaWdpdCAocG9uZ19jbG9jaywgCisJICAgICAgKFJFU1gvMikgKyA5LAorCSAgICAgIDUsCisJICAgICAgbWluICUgMTAgKTsKK30KKwordm9pZAorZHJhd19iYXRfYW5kX2JhbGwgKFBvbmdDbG9jayAqcG9uZ19jbG9jaykKK3sKKyAgLyogYmFsbCAqLworCisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIHBvbmdfY2xvY2stPmJhbGxfeCwKKwkJICBwb25nX2Nsb2NrLT5iYWxsX3ksCisJCSAgcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsaCk7CisKKyAgLyogYmF0IGEgKi8KKworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICAwLAorCQkgIHBvbmdfY2xvY2stPmJhdGFfeSAtICgyICogcG9uZ19jbG9jay0+cGl4ZWxoKSwKKwkJICBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgcG9uZ19jbG9jay0+cGl4ZWxoICogNSk7CisKKyAgLyogYmF0IGIgKi8KKworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICAocG9uZ19jbG9jay0+eHdpbl93aWR0aCAtIHBvbmdfY2xvY2stPnBpeGVsdyksCisJCSAgcG9uZ19jbG9jay0+YmF0Yl95IC0gKDIgKiBwb25nX2Nsb2NrLT5waXhlbGgpLAorCQkgIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICBwb25nX2Nsb2NrLT5waXhlbGggKiA1KTsKKworfQorCit2b2lkCit1cGRhdGVfc3RhdGUgKFBvbmdDbG9jayAqcG9uZ19jbG9jaykKK3sKKyAgaW50IHNlYywgbWluLCBob3VyOworCisgIGdldF90aW1lKCZob3VyLCAmbWluLCAmc2VjKTsKKworICAvKiBDaGVjayBiYWxsIGlzIG9uIGZpZWxkIGFuZCBubyBvbmVzIGR1ZXMgdG8gbWlzcyBhIHNob3QuCisgICovCisgIGlmICggKHBvbmdfY2xvY2stPmJhbGxfeCA8IDAgJiYgIXBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcykgCisgICAgICB8fCAocG9uZ19jbG9jay0+YmFsbF94ID4gKHBvbmdfY2xvY2stPnh3aW5fd2lkdGggLSBwb25nX2Nsb2NrLT5waXhlbHcpCisJICAmJiAhcG9uZ19jbG9jay0+YmF0Yl90b19taXNzKSApCisgICAgcG9uZ19jbG9jay0+YmFsbF9keCAqPSAtMTsKKworICBpZiAoKHBvbmdfY2xvY2stPmJhbGxfeSA8IHBvbmdfY2xvY2stPnBpeGVsaCkKKyAgICAgIHx8IHBvbmdfY2xvY2stPmJhbGxfeSA+IChwb25nX2Nsb2NrLT54d2luX2hlaWdodCAtICgyKnBvbmdfY2xvY2stPnBpeGVsaCkpKQorICAgIHBvbmdfY2xvY2stPmJhbGxfZHkgKj0gLTE7IAorCisgIHBvbmdfY2xvY2stPmJhbGxfeCArPSBwb25nX2Nsb2NrLT5iYWxsX2R4OworICBwb25nX2Nsb2NrLT5iYWxsX3kgKz0gcG9uZ19jbG9jay0+YmFsbF9keTsKKworICAvKiBTZXQgdXAgc29tZW9uZSB0byBtaXNzIGlmIHdlIGdldHRpbmcgY2xvc2UgdG8gYW4gaG91ciBvciBtaW4uIAorICAgKi8KKyAgaWYgKHNlYyA+IFRPX01JU1NfU0VDUykKKyAgICB7CisgICAgICBpZiAobWluID09IDU5KQorCXBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcyA9IFRydWU7CQorICAgICAgZWxzZQorCXBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcyA9IFRydWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogUmVzZXQgdGhlIGdhbWUgKi8KKyAgICAgIGlmIChwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MpCisJeworCSAgcG9uZ19jbG9jay0+YmF0YV90b19taXNzID0gRmFsc2U7CisJICBwb25nX2Nsb2NrLT5iYWxsX3kgPSBwb25nX2Nsb2NrLT5iYXRhX3k7IAorCSAgcG9uZ19jbG9jay0+YmFsbF94ID0gcG9uZ19jbG9jay0+cGl4ZWx3OyAKKwkgIHBvbmdfY2xvY2stPmJhbGxfZHggKj0gLTE7CisJfQorCisgICAgICBpZiAocG9uZ19jbG9jay0+YmF0Yl90b19taXNzKQorCXsKKwkgIHBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcyA9IEZhbHNlOworCSAgcG9uZ19jbG9jay0+YmFsbF95ID0gcG9uZ19jbG9jay0+YmF0Yl95OyAKKwkgIHBvbmdfY2xvY2stPmJhbGxfeCA9IHBvbmdfY2xvY2stPnh3aW5fd2lkdGggLSBwb25nX2Nsb2NrLT5waXhlbHc7CisJICBwb25nX2Nsb2NrLT5iYWxsX2R4ICo9IC0xOyAKKwl9CisgICAgfQorCisgIC8qIEtlZXAgYmF0cyBvbiBmaWVsZCBhbmQgb25seSBtb3ZlIGluIG5vdCBzZXR1cCB0byBtaXNzICovCisgIGlmIChwb25nX2Nsb2NrLT5iYWxsX3kgPj0gKDMqcG9uZ19jbG9jay0+cGl4ZWxoKQorICAgICAgJiYgcG9uZ19jbG9jay0+YmFsbF95IDw9ICAocG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLSAoNSpwb25nX2Nsb2NrLT5waXhlbGgpKSkKKyAgeworICAgIGlmICghcG9uZ19jbG9jay0+YmF0Yl90b19taXNzKSAKKyAgICAgIHBvbmdfY2xvY2stPmJhdGJfeSA9IHBvbmdfY2xvY2stPmJhbGxfeTsKKworICAgIGlmICghcG9uZ19jbG9jay0+YmF0YV90b19taXNzKQorICAgICAgcG9uZ19jbG9jay0+YmF0YV95ID0gcG9uZ19jbG9jay0+YmFsbF95OworICB9Cit9CisKK3ZvaWQKK2RyYXdfZnJhbWUgKFBvbmdDbG9jayAqcG9uZ19jbG9jaykKK3sKKyAgdXBkYXRlX3N0YXRlIChwb25nX2Nsb2NrKTsKKworICAvKiBDbGVhciBwbGF5ZmllbGQgKi8KKyAgWFNldEZvcmVncm91bmQgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIEJsYWNrUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICAwLCAwLAorCQkgIHBvbmdfY2xvY2stPnh3aW5fd2lkdGgsIAorCQkgIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0KTsKKworICBYU2V0Rm9yZWdyb3VuZCAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgV2hpdGVQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgcG9uZ19jbG9jay0+eHNjcmVlbikpOworCisgIGRyYXdfZmllbGQgKHBvbmdfY2xvY2spOworCisgIGRyYXdfdGltZSAocG9uZ19jbG9jayk7CisKKyAgZHJhd19iYXRfYW5kX2JhbGwgKHBvbmdfY2xvY2spOworCisgIC8qIGZsaXAgJ2JhY2tidWZmZXInICovCisgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwIChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgIHBvbmdfY2xvY2stPnh3aW4sCisJCQkgICAgICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyKTsKKyAgWENsZWFyV2luZG93KHBvbmdfY2xvY2stPnhkcHksIHBvbmdfY2xvY2stPnh3aW4pOworCisgIFhTeW5jKHBvbmdfY2xvY2stPnhkcHksIEZhbHNlKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIFhHQ1ZhbHVlcyAgZ2N2OworICBBdG9tICAgICAgIGF0b21zX1dJTkRPV19TVEFURSwgYXRvbXNfV0lORE9XX1NUQVRFX0ZVTExTQ1JFRU47CisgIFBvbmdDbG9jayAqcG9uZ19jbG9jazsKKworICBwb25nX2Nsb2NrID0gbWFsbG9jKHNpemVvZihQb25nQ2xvY2spKTsKKyAgbWVtc2V0KHBvbmdfY2xvY2ssIDAsIHNpemVvZihQb25nQ2xvY2spKTsKKworICBpZiAoKHBvbmdfY2xvY2stPnhkcHkgPSBYT3BlbkRpc3BsYXkoZ2V0ZW52KCJESVNQTEFZIikpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3QgY29ubmVjdCB0byBYIHNlcnZlciBvbiBkaXNwbGF5ICVzLiIsCisJICAgIGdldGVudigiRElTUExBWSIpKTsKKyAgICBleGl0KC0xKTsKKyAgfQorCisgIHBvbmdfY2xvY2stPnhzY3JlZW4gICAgID0gRGVmYXVsdFNjcmVlbihwb25nX2Nsb2NrLT54ZHB5KTsKKyAgcG9uZ19jbG9jay0+eHdpbl9yb290ICAgPSBEZWZhdWx0Um9vdFdpbmRvdyhwb25nX2Nsb2NrLT54ZHB5KTsKKyAgcG9uZ19jbG9jay0+eHdpbl93aWR0aCAgPSBEaXNwbGF5V2lkdGgocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSBwb25nX2Nsb2NrLT54c2NyZWVuKTsKKyAgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgPSBEaXNwbGF5SGVpZ2h0KHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkgIHBvbmdfY2xvY2stPnhzY3JlZW4pOworCisgIHBvbmdfY2xvY2stPnBpeGVsdyAgPSBwb25nX2Nsb2NrLT54d2luX3dpZHRoICAvIFJFU1g7CisgIHBvbmdfY2xvY2stPnBpeGVsaCAgPSBwb25nX2Nsb2NrLT54d2luX2hlaWdodCAvIFJFU1k7CisKKyAgcG9uZ19jbG9jay0+YmFsbF94ID0gMDsgCisgIHBvbmdfY2xvY2stPmJhbGxfeSA9IHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC8gMjsgCisKKyAgcG9uZ19jbG9jay0+YmFsbF9keCA9IEJBTExEWDsgCisgIHBvbmdfY2xvY2stPmJhbGxfZHkgPSBCQUxMRFk7IAorCisgIHBvbmdfY2xvY2stPmJhdGJfeSA9IHBvbmdfY2xvY2stPmJhdGFfeSA9IHBvbmdfY2xvY2stPmJhbGxfeTsKKworICBnY3YuYmFja2dyb3VuZCA9IEJsYWNrUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKTsKKyAgZ2N2LmZvcmVncm91bmQgPSBXaGl0ZVBpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgcG9uZ19jbG9jay0+eHNjcmVlbik7CisgIGdjdi5ncmFwaGljc19leHBvc3VyZXMgPSBGYWxzZTsKKworICBwb25nX2Nsb2NrLT54Z2MgPSBYQ3JlYXRlR0MgKHBvbmdfY2xvY2stPnhkcHksIHBvbmdfY2xvY2stPnh3aW5fcm9vdCwgCisJCQkgICAgICAgR0NGb3JlZ3JvdW5kfEdDQmFja2dyb3VuZHxHQ0dyYXBoaWNzRXhwb3N1cmVzLAorCQkJICAgICAgICZnY3YpOworCisgIGF0b21zX1dJTkRPV19TVEFURQorICAgID0gWEludGVybkF0b20ocG9uZ19jbG9jay0+eGRweSwgIl9ORVRfV01fU1RBVEUiLEZhbHNlKTsKKyAgYXRvbXNfV0lORE9XX1NUQVRFX0ZVTExTQ1JFRU4KKyAgICA9IFhJbnRlcm5BdG9tKHBvbmdfY2xvY2stPnhkcHksICJfTkVUX1dNX1NUQVRFX0ZVTExTQ1JFRU4iLEZhbHNlKTsKKworICBwb25nX2Nsb2NrLT54d2luID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fcm9vdCwgCisJCQkJCSAwLCAwLAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl93aWR0aCwgCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX2hlaWdodCwgCisJCQkJCSAwLAorCQkJCQkgV2hpdGVQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJCSAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSwKKwkJCQkJIEJsYWNrUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCQkgICAgcG9uZ19jbG9jay0+eHNjcmVlbikpOworCisgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIgPSBYQ3JlYXRlUGl4bWFwKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9yb290LAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl93aWR0aCwgCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX2hlaWdodCwgCisJCQkJCSBEZWZhdWx0RGVwdGgocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCQkgICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgWFNlbGVjdElucHV0KHBvbmdfY2xvY2stPnhkcHksIHBvbmdfY2xvY2stPnh3aW4sIEtleVByZXNzTWFzayk7CisgIAorCisgIC8qIFNldCB0aGUgaGludHMgZm9yIGZ1bGxzY3JlZW4gKi8KKyAgWENoYW5nZVByb3BlcnR5KHBvbmdfY2xvY2stPnhkcHksIAorCQkgIHBvbmdfY2xvY2stPnh3aW4sIAorCQkgIGF0b21zX1dJTkRPV19TVEFURSwgCisJCSAgWEFfQVRPTSwgCisJCSAgMzIsIAorCQkgIFByb3BNb2RlUmVwbGFjZSwgCisJCSAgKHVuc2lnbmVkIGNoYXIgKikgJmF0b21zX1dJTkRPV19TVEFURV9GVUxMU0NSRUVOLCAxKTsKKworICBYTWFwV2luZG93KHBvbmdfY2xvY2stPnhkcHksIHBvbmdfY2xvY2stPnh3aW4pOworICAKKyAgd2hpbGUgKFRydWUpIAorICAgIHsKKyAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgICBYRXZlbnQgICAgICAgICB4ZXY7CisKKyAgICAgIHRpbWVvdXQudHZfc2VjICA9IDA7CisgICAgICB0aW1lb3V0LnR2X3VzZWMgPSAxMDAwMDAwIC8gRlBTOyAKKyAgICAgIHNlbGVjdCAoMCwgTlVMTCwgTlVMTCwgTlVMTCwgJnRpbWVvdXQpOworCisgICAgICBkcmF3X2ZyYW1lIChwb25nX2Nsb2NrKTsKKworICAgICAgWEZsdXNoKHBvbmdfY2xvY2stPnhkcHkpOworCisgICAgICBpZiAoWFBlbmRpbmcocG9uZ19jbG9jay0+eGRweSkpCisJeworCSAgaWYgKFhDaGVja01hc2tFdmVudChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgIEtleVByZXNzTWFzaywKKwkJCSAgICAgICZ4ZXYpKQorCSAgICBleGl0KC0xKTsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9ja18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFhNzkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9ja18xLjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJBIGNsb2NrIGNvbWJpbmVkIHdpdGggYSBnYW1lIG9mIHBvbmciCitMSUNFTlNFID0gIkdQTHYyKyIKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgeGRtY3AgeGF1IgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImZpbGU6Ly9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcG9uZy1jbG9jay1uby1mbGlja2VyLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9ZGQyNDhkNTBmNzNmNzQ2ZDFlZTc4NTg2YjBiMmViZDMiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSAoKSB7CisJJHtDQ30gLW8gcG9uZy1jbG9jayBwb25nLWNsb2NrLW5vLWZsaWNrZXIuYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgeDExIHhhdSB4ZG1jcGAKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IHBvbmctY2xvY2sgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODZmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDk3XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBzdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL2NvbmZpZ3VyZS5pbiBzdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL2NvbmZpZ3VyZS5pbgorLS0tIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluCTIwMTEtMDUtMTYgMTc6Mjk6MjAuMDAwMDAwMDAwICswMzAwCisrKysgc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4JMjAxMy0wMS0wNyAwNjowMDo0OC45MjE5MDU0MDkgKzAyMDAKK0BAIC0zLDcgKzMsNyBAQAorIEFDX0NPTkZJR19TUkNESVIobGlic24vc24tbGF1bmNoZWUuYykKKworIEFNX0lOSVRfQVVUT01BS0UKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorCisgIyBIb25vciBhY2xvY2FsIGZsYWdzCisgQUNfU1VCU1QoQUNMT0NBTF9BTUZMQUdTLCAiXCR7QUNMT0NBTF9GTEFHU30iKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uXzAuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb25fMC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzFiOTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uXzAuMTIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJFbmFibGVzIG1vbml0b3JpbmcgYW5kIGRpc3BsYXkgb2YgYXBwbGljYXRpb24gc3RhcnR1cCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3RhcnR1cC1ub3RpZmljYXRpb24vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1TcGVjaWZpY2F0aW9ucyIKKworIyBtb3N0IGZpbGVzIGFyZSB1bmRlciBNSVQsIGJ1dCBsaWJzbi9zbi11dGlsLmMgaXMgdW5kZXIgTEdQTCwgdGhlCisjIGVmZmVjdGl2ZSBsaWNlbnNlIGlzIExHUEwKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWEyYWUyY2Q0N2Q2ZDJmMjM4NDEwZjUzNjRkZmJjMGYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYnNuL3NuLXV0aWwuYztlbmRsaW5lPTE4O21kNT0xOGExNGRjMTgyNWQzOGU3NDFkNzcyMzExZmVhOWVlMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJzbi9zbi1jb21tb24uaDtlbmRsaW5lPTIzO21kNT02ZDA1YmMwZWJkY2Y1NTEzYTZlNzdjYjI2ZThjZDdlMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0L3Rlc3QtYm9pbGVycGxhdGUuaDtlbmRsaW5lPTIzO21kNT05MjNlNzA2YjJhNzA1ODYxNzZlZWFkMjYxY2M1YmI5OCIKKworUFIgPSAicjIiCisKK1NFQ1RJT04gPSAibGlicyIKKworCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnNtIHhjYi11dGlsIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvc3RhcnR1cC1ub3RpZmljYXRpb24vcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmNkNzczMjZkNGRjYWVkOWE1YTIzYTEyMzJmYjM4ZTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2MzOTFmN2U5MzBjNTgzMDk1MDQ1Y2QyZDEwZWI3M2E2NGYwODVjN2ZkZTlkMjYwZjI2NTJjN2NiM2NmYmU0YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90cy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZGE5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90cy5jb25mCkBAIC0wLDAgKzEsMjUgQEAKKyMgVW5jb21tZW50IGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgbGludXggaW5wdXQgbGF5ZXIgZXZlbnQgaW50ZXJmYWNlCittb2R1bGVfcmF3IGlucHV0CisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIFNoYXJwIFphdXJ1cyBTTC01NTAwL1NMLTUwMDBkCisjIG1vZHVsZV9yYXcgY29sbGllCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIFNoYXJwIFphdXJ1cyBTTC1DNzAwL0M3NTAvQzc2MC9DODYwCisjIG1vZHVsZV9yYXcgY29yZ2kKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgZGV2aWNlIHdpdGggYSBVQ0IxMjAwLzEzMDAvMTQwMCBUUyBpbnRlcmZhY2UKKyMgbW9kdWxlX3JhdyB1Y2IxeDAwCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhbiBIUCBpUGFxIGgzNjAwIG9yIHNpbWlsYXIKKyMgbW9kdWxlX3JhdyBoMzYwMAorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBIaXRhY2hpIFdlYnBhZAorIyBtb2R1bGVfcmF3IG1rNzEyCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhbiBJQk0gQXJjdGljIElJCisjIG1vZHVsZV9yYXcgYXJjdGljMgorCittb2R1bGUgcHRocmVzIHBtaW49MQorbW9kdWxlIHZhcmlhbmNlIGRlbHRhPTMwCittb2R1bGUgZGVqaXR0ZXIgZGVsdGE9MTAwCittb2R1bGUgbGluZWFyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2OGU4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90c2xpYi5zaApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorCitpZiBbIC1lIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIF07IHRoZW4KKyAgICBUU0xJQl9UU0RFVklDRT0vZGV2L2lucHV0L3RvdWNoc2NyZWVuMAorCisgICAgZXhwb3J0IFRTTElCX1RTREVWSUNFCitmaQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDhjN2RkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMS5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIkFuIGFic3RyYWN0aW9uIGxheWVyIGZvciB0b3VjaHNjcmVlbiBwYW5lbCBldmVudHMiCitERVNDUklQVElPTiA9ICJUc2xpYiBpcyBhbiBhYnN0cmFjdGlvbiBsYXllciBmb3IgdG91Y2hzY3JlZW4gcGFuZWwgXAorZXZlbnRzLCBhcyB3ZWxsIGFzIGEgZmlsdGVyIHN0YWNrIGZvciB0aGUgbWFuaXB1bGF0aW9uIG9mIHRob3NlIGV2ZW50cy4gXAorVHNsaWIgaXMgZ2VuZXJhbGx5IHVzZWQgb24gZW1iZWRkZWQgZGV2aWNlcyB0byBwcm92aWRlIGEgY29tbW9uIHVzZXIgXAorc3BhY2UgaW50ZXJmYWNlIHRvIHRvdWNoc2NyZWVuIGZ1bmN0aW9uYWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3RzbGliLmJlcmxpb3MuZGUvIgorCitBVVRIT1IgPSAiUnVzc2VsbCBLaW5nIHcvIHBsdWdpbnMgYnkgQ2hyaXMgTGFyc29uIGV0LiBhbC4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYzMGE5NzE2ZWYzNzYyZTM0NjdhMmY2MmJmNzkwZjBhIgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9rZXJnb3RoL3RzbGliL3JlbGVhc2VzL2Rvd25sb2FkLyR7UFZ9L3RzbGliLSR7UFZ9LnRhci54ejtkb3dubG9hZGZpbGVuYW1lPXRzbGliLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly90cy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3RzbGliLnNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjE0NzcxZjg2MDdiMzQxYmI0YjI5NzgxOWQzN2U4MzdkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlMzVlNWY3MTBlYTkzM2IxMThmNzEwZTJjZTQ0MDNhYzA3NmZlNjk5MjZiNTcwMzMzODY3ZDRkZTA4MmE1MWMiCisKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLWgzNjAwIC0tZW5hYmxlLWlucHV0IC0tZGlzYWJsZS1jb3JnaSAtLWRpc2FibGUtY29sbGllIC0tZGlzYWJsZS1tazcxMiAtLWRpc2FibGUtYXJjdGljMiAtLWRpc2FibGUtdWNiMXgwMCIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3RzLmNvbmYgJHtTfS9ldGMvdHMuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS90c2xpYi5zaCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCit9CisKKyMgUGVvcGxlIHNob3VsZCBjb25zaWRlciB1c2luZyB1ZGV2J3MgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgc3ltbGluaworIyBpbnN0ZWFkIG9mIGRldGVjdC1zdHlsdXMKKyNSREVQRU5EU190c2xpYi1jb25mX3dlaXJkLW1hY2hpbmUgPSAiZGV0ZWN0LXN0eWx1cyIKK1JQUk9WSURFU190c2xpYi1jb25mID0gImxpYnRzLTAuMC1jb25mIgorCitQQUNLQUdFUyA9KyAidHNsaWItY29uZiB0c2xpYi10ZXN0cyB0c2xpYi1jYWxpYnJhdGUiCitERUJJQU5fTk9BVVRPTkFNRV90c2xpYi1jb25mID0gIjEiCitERUJJQU5fTk9BVVRPTkFNRV90c2xpYi10ZXN0cyA9ICIxIgorREVCSUFOX05PQVVUT05BTUVfdHNsaWItY2FsaWJyYXRlID0gIjEiCisKK1JERVBFTkRTXyR7UE59ID0gInRzbGliLWNvbmYiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwb2ludGVyY2FsIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS90cy8uZGVidWcqIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vdHMvKi5sYSIKK0ZJTEVTX3RzbGliLWNvbmYgPSAiJHtzeXNjb25mZGlyfS90cy5jb25mICR7c3lzY29uZmRpcn0vcHJvZmlsZS5kL3RzbGliLnNoICR7ZGF0YWRpcn0vdHNsaWIiCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKi5zby4qICR7bGliZGlyfS90cy8qLnNvKiIKK0ZJTEVTX3RzbGliLWNhbGlicmF0ZSArPSAiJHtiaW5kaXJ9L3RzX2NhbGlicmF0ZSIKK0ZJTEVTX3RzbGliLXRlc3RzID0gIiR7YmluZGlyfS90c19oYXJ2ZXN0ICR7YmluZGlyfS90c19wcmludCAke2JpbmRpcn0vdHNfcHJpbnRfcmF3ICR7YmluZGlyfS90c190ZXN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDk0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHMvMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+Cis8IS0tIGNvbmYuZC9zdWItcGl4ZWwuY29uZiAtLT4KKzxmb250Y29uZmlnPgorCTxhbGlhcz4KKwkJPGZhbWlseT5zYW5zLXNlcmlmPC9mYW1pbHk+CisJCTxhY2NlcHQ+PGZhbWlseT5MaWJlcmF0aW9uIFNhbnM8L2ZhbWlseT48L2FjY2VwdD4KKwk8L2FsaWFzPgorCTxhbGlhcz4KKwkJPGZhbWlseT5zZXJpZjwvZmFtaWx5PgorCQk8YWNjZXB0PjxmYW1pbHk+TGliZXJhdGlvbiBTZXJpZjwvZmFtaWx5PjwvYWNjZXB0PgorCTwvYWxpYXM+CisJPGFsaWFzPgorCQk8ZmFtaWx5Pm1vbm9zcGFjZTwvZmFtaWx5PgorCQk8YWNjZXB0PjxmYW1pbHk+TGliZXJhdGlvbiBNb25vPC9mYW1pbHk+PC9hY2NlcHQ+CisJPC9hbGlhcz4KKzwvZm9udGNvbmZpZz4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250c18xLjA0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzXzEuMDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhODJlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250c18xLjA0LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiTGliZXJhdGlvbih0bSkgRm9udHMiCitERVNDUklQVElPTiA9ICJUaGUgTGliZXJhdGlvbih0bSkgRm9udHMgaXMgYSBmb250IGZhbWlseSBvcmlnaW5hbGx5IFwKK2NyZWF0ZWQgYnkgQXNjZW5kZXIoYykgd2hpY2ggYWltcyBhdCBtZXRyaWMgY29tcGF0aWJpbGl0eSB3aXRoIFwKK0FyaWFsLCBUaW1lcyBOZXcgUm9tYW4sIENvdXJpZXIgTmV3LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saWJlcmF0aW9uLWZvbnRzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tLyIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiMi54IGRlcGVuZHMgb24gZm9udGZvcmdlIHBhY2thZ2UsIHdoaWNoIGlzIG5vdCB5ZXQgcHJvdmlkZWQgaW4gb2UtY29yZSIKKworU0VDVElPTiA9ICJ4MTEvZm9udHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCitQUiA9ICJyNCIKK1BFID0gIjEiCisKK2luaGVyaXQgYWxsYXJjaCBmb250Y2FjaGUKKworRk9OVF9QQUNLQUdFUyA9ICIke1BOfSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9pL2xpYmVyYXRpb24tZm9udHMvbGliZXJhdGlvbi1mb250cy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODQ2Nzk3ZWYwZmM3MGIwY2JhZWRlMjUxNDY3N2M1OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZTBkMDk1N2M4NWI3NTg1NjFhM2Q0YWVmNGViY2QyYzM5OTU5ZTUzMjg0MjlkOTZhZTEwNjI0OWQ4MzUzMWExIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2ZvbnRzL3R0Zi8KKwlmb3IgaSBpbiAqLnR0ZjsgZG8KKwkJaW5zdGFsbCAtbSAwNjQ0ICRpICR7RH0ke3ByZWZpeH0vc2hhcmUvZm9udHMvdHRmLyR7aX0KKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2ZvbnRzL2NvbmYuZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZiAke0R9JHtzeXNjb25mZGlyfS9mb250cy9jb25mLmQvCisKKwlpbnN0YWxsIC1kICR7RH0ke3ByZWZpeH0vc2hhcmUvZG9jLyR7QlBOfS8KKwlpbnN0YWxsIC1tIDA2NDQgTGljZW5zZS50eHQgJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS8KK30KKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfSAke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvdHRmLWJpdHN0cmVhbS12ZXJhXzEuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlNGNlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvdHRmLWJpdHN0cmVhbS12ZXJhXzEuMTAuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJUaGUgQml0c3RyZWFtIFZlcmEgZm9udHMgLSBUVEYgRWRpdGlvbiIKK0RFU0NSSVBUSU9OID0gIlRoZSBCaXRzdHJlYW0gVmVyYSBmb250cyBpbmNsdWRlIGZvdXIgbW9ub3NwYWNlIGFuZCBzYW5zIFwKK2ZhY2VzIChub3JtYWwsIG9ibGlxdWUsIGJvbGQsIGJvbGQgb2JsaXF1ZSkgYW5kIHR3byBzZXJpZiBmYWNlcyAobm9ybWFsIFwKK2FuZCBib2xkKS4gIEluIGFkZGl0aW9uIEZvbnRjb25maWcvWGZ0MiBjYW4gYXJ0aWZpY2lhbGx5IG9ibGlxdWUgdGhlIFwKK3NlcmlmIGZhY2VzIGZvciB5b3U6IHRoaXMgbG9zZXMgaGludGluZyBhbmQgZGlzdG9ydHMgdGhlIGZhY2VzIHNsaWdodGx5LCBcCitidXQgaXMgdmlzaWJseSBkaWZmZXJlbnQgdGhhbiBub3JtYWwgYW5kIGJvbGQsIGFuZCByZWFzb25hYmx5IHBsZWFzaW5nLiIKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorTElDRU5TRSA9ICJCaXRzdHJlYW1WZXJhIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hULlRYVDttZDU9MjdkNzQ4NGIxZTE4ZDBlZTRjZTUzODY0NGEzZjA0YmUiCitQUiA9ICJyNyIKKworaW5oZXJpdCBmb250Y2FjaGUKKworRk9OVF9QQUNLQUdFUyA9ICIke1BOfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vdHRmLWJpdHN0cmVhbS12ZXJhLzEuMTAvdHRmLWJpdHN0cmVhbS12ZXJhLSR7UFZ9LnRhci5iejIiIAorCitkb19pbnN0YWxsICgpIHsgCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9zaGFyZS9mb250cy90dGYvIAorICAgICAgICBmb3IgaSBpbiAqLnR0ZjsgZG8gCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSA2NDQgJGkgJHtEfSR7cHJlZml4fS9zaGFyZS9mb250cy90dGYvJHtpfSAKKyAgICAgICAgZG9uZSAKKworCSMgZm9udGNvbmZpZyBzaGlwcyB0aGlzIHRvby4gIG5vdCBzdXJlIHdoYXQgdG8gZG8gYWJvdXQgaXQuCisgICAgICAgICNpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2ZvbnRzIAorICAgICAgICAjaW5zdGFsbCAtbSA2NDQgbG9jYWwuY29uZiAke0R9JHtzeXNjb25mZGlyfS9mb250cy9sb2NhbC5jb25mIAorCisKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L3NoYXJlL2RvYy8ke0JQTn0vCisgICAgICAgIGZvciBpIGluICouVFhUOyBkbyAKKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAkaSAke0R9JHtwcmVmaXh9L3NoYXJlL2RvYy8ke0JQTn0vJGkKKyAgICAgICAgZG9uZSAKK30gCisKK0ZJTEVTXyR7UE59ID0gIi9ldGMgJHtkYXRhZGlyfS9mb250cyIKKworU1JDX1VSSVttZDVzdW1dID0gImJiMjJiZDViNDY3NWY1ZGJlMTdjNjk2M2Q4YzAwZWQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiNWIyN2RmN2JiYjMxODAzNmViZGI3NWFjZDNlOThmMWJkNmViNjYwOGZiNzBhNjdkNDc4Y2QyNDNkMTc4ZGMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2FmZmxlL3dhZmZsZV8xLjUuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YWZmbGUvd2FmZmxlXzEuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWEwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2FmZmxlL3dhZmZsZV8xLjUuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gImNyb3NzLXBsYXRmb3JtIEMgbGlicmFyeSB0byBkZWZlciBzZWxlY3Rpb24gb2YgR0wgQVBJIGFuZCBvZiB3aW5kb3cgc3lzdGVtIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NGM1MTU0NDA3YzI0OTA3NTBkZDQ2MWM1MGFkOTQ3OTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS93YWZmbGUvd2FmZmxlLmg7ZW5kbGluZT0yNDttZDU9NjFkYmY4Njk3ZjYxYzc4NjQ1ZTc1YTkzYzU4NWIxYmYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3dhZmZsZS1nbC5vcmcvZmlsZXMvcmVsZWFzZS8ke0JQTn0tJHtQVn0vJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMGQ4MDJiYzNkMGFiYTg3YzUxZTQyM2EzYThiZGQ2OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYmFiMGU5MjY1MTUwNjRlODE4YmYwODlhNWFmMDRiZTMzMzA3ZTVmNDBkMDc2NTlmYjQwZDU5YjJiZmUyMGFhIgorCitpbmhlcml0IGNtYWtlIGRpc3Ryb19mZWF0dXJlc19jaGVjayBsaWJfcGFja2FnZQorCisjIFRoaXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gcGVyLW1hY2hpbmUgdG8gcmVmbGVjdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBHTAorIyBzdGFjay4KK1BBQ0tBR0VDT05GSUcgPz89ICJnbHgiCisKKyMgbGlieDExIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMuCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2x4JywgJ3gxMScsICcnLCBkKX0iCisKKyMgSSBzYXkgdmlydHVhbC9saWJnbCwgYWN0dWFsbHkgd2FudHMgZ2wucGMKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItRHdhZmZsZV9oYXNfZ2x4PTEsLUR3YWZmbGVfaGFzX2dseD0wLHZpcnR1YWwvbGliZ2wgbGlieDExIgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIHdheWxhbmQtZWdsLnBjLCBlZ2wucGMsIGFuZCB0aGUgd2F5bGFuZAorIyBESVNUUk9fRkVBVFVSRS4KK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLUR3YWZmbGVfaGFzX3dheWxhbmQ9MSwtRHdhZmZsZV9oYXNfd2F5bGFuZD0wLHZpcnR1YWwvbGliZ2wgd2F5bGFuZCIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyBnYm0ucGMgZWdsLnBjCitQQUNLQUdFQ09ORklHW2dibV0gPSAiLUR3YWZmbGVfaGFzX2dibT0xLC1Ed2FmZmxlX2hhc19nYm09MCx2aXJ0dWFsL2xpYmdsIHVkZXYiCisKKyMgSSBzYXkgdmlydHVhbC9saWJnbCwgYWN0dWFsbHkgd2FudHMgZWdsLnBjCitQQUNLQUdFQ09ORklHW3gxMS1lZ2xdID0gIi1Ed2FmZmxlX2hhc194MTFfZWdsPTEsLUR3YWZmbGVfaGFzX3gxMV9lZ2w9MCx2aXJ0dWFsL2xpYmdsIGxpYnhjYiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NtYWtlL01vZHVsZXMvRmluZFdhZmZsZS5jbWFrZSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jbWFrZS9XYWZmbGUvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvbGliaW5wdXQtY29uZmlndXJlLmFjLWFkZC1hcmctd2l0aC1saWJ1bndpbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjVlYmNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvbGliaW5wdXQtY29uZmlndXJlLmFjLWFkZC1hcmctd2l0aC1saWJ1bndpbmQucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSBjYzZmY2U1ODdmMjYyOGM4YjM0Mjc2NGUwNmZiMGZjMjdjMWU4Mjc0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMyBBdWcgMjAxNSAyMDozMzo0NCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGFkZCBhcmcgLS13aXRoLWxpYnVud2luZAorCitBZGQgYXJnIC0td2l0aC1saWJ1bndpbmQgZm9yIGNvbmZpZ3VyZSBzbyBpdCdzIG9wdGlvbmFsIHRvIGNoZWNrCitsaWJ1bndpbmQsIHdoaWNoIGlzIGhlbHBmdWxsIHRvIG1ha2UgZGV0ZXJtaW5pc3RpYyBidWlsZHMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFt3YXlsYW5kLWRldmVsXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTkgKysrKysrKysrKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAzMTRiMGQ0Li4yNDJkMjUxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02MCwxMyArNjAsMjIgQEAgUEtHX1BST0dfUEtHX0NPTkZJRygpCisgUEtHX0NIRUNLX01PRFVMRVMoTVRERVYsIFttdGRldiA+PSAxLjEuMF0pCisgUEtHX0NIRUNLX01PRFVMRVMoTElCVURFViwgW2xpYnVkZXZdKQorIFBLR19DSEVDS19NT0RVTEVTKExJQkVWREVWLCBbbGliZXZkZXYgPj0gMC40XSkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhMSUJVTldJTkQsCisrCisrQUNfQVJHX1dJVEgobGlidW53aW5kLAorKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbGlidW53aW5kXSxbRG8gbm90IHVzZSBsaWJ1bndpbmRdKSkKKysKKytBU19JRihbdGVzdCAieCR3aXRoX2xpYnVud2luZCIgIT0gInhubyJdLAorKwlbUEtHX0NIRUNLX01PRFVMRVMoTElCVU5XSU5ELAorIAkJICBbbGlidW53aW5kXSwKKyAJCSAgW0hBVkVfTElCVU5XSU5EPXllc10sCistCQkgIFtIQVZFX0xJQlVOV0lORD1ub10pCistaWYgdGVzdCAieCRIQVZFX0xJQlVOV0lORCIgPSAieHllcyI7IHRoZW4KKy0JQUNfREVGSU5FKEhBVkVfTElCVU5XSU5ELCAxLCBbSGF2ZSBsaWJ1bndpbmQgc3VwcG9ydF0pCistZmkKKysJCSAgW0hBVkVfTElCVU5XSU5EPW5vXSldLAorKwlbSEFWRV9MSUJVTldJTkQ9bm9dKQorKworK0FTX0lGKFt0ZXN0ICJ4JEhBVkVfTElCVU5XSU5EIiA9ICJ4eWVzIl0sCisrCVtBQ19ERUZJTkUoSEFWRV9MSUJVTldJTkQsIDEsIFtIYXZlIGxpYnVud2luZCBzdXBwb3J0XSldLAorKwlbQVNfSUYoW3Rlc3QgIngkd2l0aF9saWJ1bndpbmQiID0gInh5ZXMiXSwKKysJCVtBQ19NU0dfRVJST1IoW2xpYnVud2luZCByZXF1ZXN0ZWQgYnV0IG5vdCBmb3VuZF0pXSldKQorKworIEFNX0NPTkRJVElPTkFMKEhBVkVfTElCVU5XSU5ELCBbdGVzdCAieCRIQVZFX0xJQlVOV0lORCIgPSB4eWVzXSkKKyBBQ19QQVRIX1BST0coQUREUjJMSU5FLCBbYWRkcjJsaW5lXSkKKyBpZiB0ZXN0ICJ4JEFERFIyTElORSIgIT0gIngiOyB0aGVuCistLSAKKzIuMy41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M2M2JkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK1RoaXMgaXMgYSB3b3JrYXJvdW5kIHVwc3RyZWFtIHN1Z2dlc3RzIGZvciB1c2Ugd2l0aCBrZXJuZWwgNC4xLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3RlbXBvcmFyeSB3b3JrLWFyb3VuZF0KK1NpZ25lZC1PZmYtQnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworCitGcm9tOiBQZXRlciBIdXR0ZXJlciA8cGV0ZXIuaHV0dGVyZXJAd2hvLXQubmV0PgorRGF0ZTogTW9uIEF1ZyAzIDE4OjIzOjEyIFBEVCAyMDE1CitTdWJqZWN0OiBbUEFUQ0ggdjMgbGliaW5wdXRdIHRvdWNocGFkOiBzZXJpYWwgc3luYXB0aWNzIG5lZWQgdG8gZmFrZSBuZXcgdG91Y2hlcyBvbiBUUklQTEVUQVAKKworT24gdGhlIDQuMSBrZXJuZWxzIHN5bmFwdGljcyBwcmV0ZW5kcyB0byBoYXZlIDMgc2xvdHMgKHRoZSBzZXJpYWwgZncgb25seSBkb2VzCisyKS4gVGhpcyB3YXMgYWRkZWQgdG8gYXZvaWQgY3Vyc29yIGp1bXBzIGJ1dCBoYXMgc2luY2UgYmVlbiByZXZlcnRlZCBmb3IgNC4yCisoa2VybmVsIGNvbW1pdCBkYmYzYzM3MDg2LCA0LjEuMyBpcyBzdGlsbCBidWdneSkuIEluIHNvbWUgY2FzZXMgYSBUUklQTEVUQVAKK21heSBiZSB0cmlnZ2VyZWQgd2l0aG91dCBzbG90IDIgZXZlciBhY3RpdmF0aW5nLgorCitXaGlsZSB0aGVyZSBhcmUgc3RpbGwgdGhvc2Uga2VybmVscyBvdXQgdGhlcmUsIHdvcmsgYXJvdW5kIHRoaXMgYnVnIGJ5IG9wZW5pbmcKK2EgbmV3IHRvdWNoIHBvaW50IHdoZXJlIG5vbmUgZXhpc3RzIGlmIHRoZSBmYWtlIGZpbmdlciBjb3VudCBleGNlZWRzIHRoZSBzbG90Citjb3VudC4KKworUmVwb3J0ZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgPGphbi5zdGVmZmVucyBhdCBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBQZXRlciBIdXR0ZXJlciA8cGV0ZXIuaHV0dGVyZXIgYXQgd2hvLXQubmV0PgorVGVzdGVkLWJ5OiBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIDxqYW4uc3RlZmZlbnMgYXQgZ21haWwuY29tPgorUmV2aWV3ZWQtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlIGF0IHJlZGhhdC5jb20+CistLS0KK0NoYW5nZXMgdG8gdjI6CistIHNwbGl0IG91dCB0aGUgaGFuZGxpbmcgaW5zdGVhZCBvZiBoYXZpbmcgYSB0bXAgc3RhdGUgdmFyaWFibGUsIHNlZSBIYW5zJworICBjb21tZW50cyBmcm9tIHYyCisKK01haW5seSBzZW5kaW5nIHRoaXMgdG8gdGhlIGxpc3QgYWdhaW4gc28gSSBoYXZlIGEgbGluayB0byBwb2ludCBwZW9wbGUgdG8uCitJZiB5b3UncmUgb24gNC4xLnggYWRkIHRoaXMgcGF0Y2ggdG8geW91ciBkaXN0cmlidXRpb24gcGFja2FnZS4KKworIHNyYy9ldmRldi1tdC10b3VjaHBhZC5jIHwgMjIgKysrKysrKysrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMgYi9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYworaW5kZXggYTY4M2Q5YS4uNWVmMDNkNSAxMDA2NDQKKy0tLSBhL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jCisrKysgYi9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYworQEAgLTM2OSwxMyArMzY5LDIzIEBAIHRwX3Jlc3RvcmVfc3luYXB0aWNzX3RvdWNoZXMoc3RydWN0IHRwX2Rpc3BhdGNoICp0cCwKKyAJZm9yIChpID0gMDsgaSA8IHRwLT5udW1fc2xvdHM7IGkrKykgeworIAkJc3RydWN0IHRwX3RvdWNoICp0ID0gdHBfZ2V0X3RvdWNoKHRwLCBpKTsKKyAKKy0JCWlmICh0LT5zdGF0ZSAhPSBUT1VDSF9FTkQpCisrCQlzd2l0Y2godC0+c3RhdGUpIHsKKysJCWNhc2UgVE9VQ0hfSE9WRVJJTkc6CisrCQljYXNlIFRPVUNIX0JFR0lOOgorKwkJY2FzZSBUT1VDSF9VUERBVEU6CisgCQkJY29udGludWU7CistCistCQkvKiBuZXcgdG91Y2gsIG1vdmUgaXQgdGhyb3VnaCBiZWdpbiB0byB1cGRhdGUgaW1tZWRpYXRlbHkgKi8KKy0JCXRwX25ld190b3VjaCh0cCwgdCwgdGltZSk7CistCQl0cF9iZWdpbl90b3VjaCh0cCwgdCwgdGltZSk7CistCQl0LT5zdGF0ZSA9IFRPVUNIX1VQREFURTsKKysJCWNhc2UgVE9VQ0hfTk9ORToKKysJCQkvKiBuZXcgdG91Y2gsIG1vdmUgaXQgdGhyb3VnaCB0byBiZWdpbiBpbW1lZGlhdGVseSAqLworKwkJCXRwX25ld190b3VjaCh0cCwgdCwgdGltZSk7CisrCQkJdHBfYmVnaW5fdG91Y2godHAsIHQsIHRpbWUpOworKwkJCWJyZWFrOworKwkJY2FzZSBUT1VDSF9FTkQ6CisrCQkJLyogdG91Y2gganVzdCBlbmRlZCAsd2UgbmVlZCBuZWVkIHRvIHJlc3RvcmUgaXQgdG8gdXBkYXRlICovCisrCQkJdHBfbmV3X3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQl0cF9iZWdpbl90b3VjaCh0cCwgdCwgdGltZSk7CisrCQkJdC0+c3RhdGUgPSBUT1VDSF9VUERBVEU7CisrCQkJYnJlYWs7CisrCQl9CisgCX0KKyB9CisgCistLSAKKzIuNC4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzVhMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMC4yMS4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSB0byBoYW5kbGUgaW5wdXQgZGV2aWNlcyBpbiBXYXlsYW5kIGNvbXBvc2l0b3JzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9saWJpbnB1dC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjE4NGFlZjM4ZmYxMzdlZDMzY2U5YTYzYjlkMWViOGYiCisKK0RFUEVORFMgPSAibGliZXZkZXYgdWRldiBtdGRldiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZjkxZDhmNGNlZDk4NmYxYWUxNmQ1MmVhMDJiYzc4MzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2NjZTdhOWU1MTBkZmU1YzRhMTlhZDAwZTkzNTA4MDhkNGY1OWY4NjExZmQyYjVlODcyMTNjNTA3MjgzZjU1MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYnVud2luZF0gPSAiLS13aXRoLWxpYnVud2luZCwtLXdpdGhvdXQtbGlidW53aW5kLGxpYnVud2luZCIKK1BBQ0tBR0VDT05GSUdbZ3VpXSA9ICItLWVuYWJsZS1ldmVudC1ndWksLS1kaXNhYmxlLWV2ZW50LWd1aSxjYWlybyBndGsrMyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS91ZGV2LyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3VkZXYvLmRlYnVnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbXRkZXZfMS4xLjUuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9tdGRldl8xLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QwZWJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbXRkZXZfMS4xLjUuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJNdWx0aXRvdWNoIFByb3RvY29sIFRyYW5zbGF0aW9uIExpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIm10ZGV2IGlzIGEgbGlicmFyeSB3aGljaCB0cmFuc2Zvcm1zIGFsbCB2YXJpYW50cyBvZiBrZXJuZWwgXAorbXVsdGl0b3VjaCBldmVudHMgdG8gdGhlIHNsb3R0ZWQgdHlwZSBCIHByb3RvY29sLiBUaGUgZXZlbnRzIHB1dCBpbnRvIG10ZGV2IG1heSBcCitiZSBmcm9tIGFueSBNVCBkZXZpY2UsIHNwZWNpZmljYWxseSB0eXBlIEEgd2l0aG91dCBjb250YWN0IHRyYWNraW5nLCB0eXBlIEEgd2l0aCBcCitjb250YWN0IHRyYWNraW5nLCBvciB0eXBlIEIgd2l0aCBjb250YWN0IHRyYWNraW5nIgorCitIT01FUEFHRSA9ICJodHRwOi8vYml0bWF0aC5vcmcvY29kZS9tdGRldi8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWE2YmQwMjY4YmIwZmNkNmIyNzY5ODYxNmNlZWU1ZDYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2JpdG1hdGgub3JnL2NvZGUvJHtCUE59LyR7QlB9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiNTJjOTYxMGI2MDAyZjcxZDE2NDJkYzFhMWNjYTVlYzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjY3N2Q1NzA4YTc5NDg4NDBkZTczNGQ4YjQ2NzVkNTk4MGQ0NTYxMTcxYzVhOGU4OWU1NGFkZjdhMTNlYmE3ZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBlNmJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorYnVpbGQ6IGFsd2F5cyBidWlsZCB3YXlsYW5kLXNjYW5uZXIKKworVGhlIHByZXZpb3VzIGlkaW9tIGZvciBidWlsZGluZyBhIGNyb3NzLWNvbXBpbGVkIFdheWxhbmQgaXMgdG8gYnVpbGQgb25jZSBmb3IKK3RoZSBidWlsZCBob3N0ICh3aXRoIC0tZW5hYmxlLXNjYW5uZXIgLS1kaXNhYmxlLWxpYnJhcmllcykgdG8gZ2V0IGEKK3dheWxhbmQtc2Nhbm5lciBiaW5hcnkgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIGluIGEgY3Jvc3MtY29tcGlsZSAod2l0aAorLS1kaXNhYmxlLXNjYW5uZXIpLiAgVGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXQgdGhlIGNyb3NzIHdheWxhbmQgaXMgbWlzc2luZworYSB3YXlsYW5kLXNjYW5uZXIgYmluYXJ5LCB3aGljaCBtZWFucyB5b3UgdGhlbiBjYW4ndCBkbyBhbnkgV2F5bGFuZCBkZXZlbG9wbWVudAorb24gdGhlIHRhcmdldC4KKworSW5zdGVhZCwgYWx3YXlzIGJ1aWxkIHdheWxhbmQtc2Nhbm5lciBmb3IgdGhlIHRhcmdldCBhbmQgY2hhbmdlCistLWVuYWJsZS9kaXNhYmxlLXNjYW5uZXIgdG8gLS13aXRoL3dpdGhvdXQtaG9zdC1zY2FubmVyLiAgTm9ybWFsIGJ1aWxkcyB1c2UgdGhlCitkZWZhdWx0IG9mIC0td2l0aG91dC1ob3N0LXNjYW5uZXIgYW5kIHJ1biB0aGUgd2F5bGFuZC1zY2FubmVyIGl0IGp1c3QgYnVpbHQsIGFuZAorY3Jvc3MtY29tcGlsZWQgYnVpbGRzIHBhc3MgLS13aXRoLWhvc3Qtc2Nhbm5lciB0byB1c2UgYSBwcmV2aW91c2x5IGJ1aWx0IGhvc3QKK3NjYW5uZXIgYnV0IHN0aWxsIGdldCBhIHdheWxhbmQtc2Nhbm5lciB0byBpbnN0YWxsLgorCisoYSB0aGVvcmV0aWNhbGx5IG5lYXRlciBzb2x1dGlvbiB3b3VsZCBiZSB0byBidWlsZCB0d28gc2Nhbm5lcnMgaWYgcmVxdWlyZWQgKG9uZQordG8gcnVuIGFuZCBvbmUgdG8gaW5zdGFsbCksIGJ1dCBhdXRvbWFrZSBtYWtlcyB0aGlzIG92ZXJseSBjb21wbGljYXRlZCkKKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBjMTk0OTRmLi5jMmQ5MjliIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNjQsMTYgKzY0LDE3IEBAIG5vZGlzdF9saWJ3YXlsYW5kX2NsaWVudF9sYV9TT1VSQ0VTID0JCVwKKyAKKyBwa2djb25maWdfREFUQSArPSBzcmMvd2F5bGFuZC1jbGllbnQucGMgc3JjL3dheWxhbmQtc2VydmVyLnBjCisgCistaWYgRU5BQkxFX1NDQU5ORVIKKy13YXlsYW5kX3NjYW5uZXIgPSAkKHRvcF9idWlsZGRpcikvd2F5bGFuZC1zY2FubmVyCisgYmluX1BST0dSQU1TID0gd2F5bGFuZC1zY2FubmVyCisgd2F5bGFuZF9zY2FubmVyX1NPVVJDRVMgPSBzcmMvc2Nhbm5lci5jCisgd2F5bGFuZF9zY2FubmVyX0NGTEFHUyA9ICQoRVhQQVRfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKKyB3YXlsYW5kX3NjYW5uZXJfTERBREQgPSAkKEVYUEFUX0xJQlMpIGxpYndheWxhbmQtdXRpbC5sYQorLSQoQlVJTFRfU09VUkNFUykgOiB3YXlsYW5kLXNjYW5uZXIKKyBwa2djb25maWdfREFUQSArPSBzcmMvd2F5bGFuZC1zY2FubmVyLnBjCistZWxzZQorKworK2lmIEhPU1RfU0NBTk5FUgorIHdheWxhbmRfc2Nhbm5lciA9IHdheWxhbmQtc2Nhbm5lcgorK2Vsc2UKKyskKEJVSUxUX1NPVVJDRVMpIDogd2F5bGFuZC1zY2FubmVyCisrd2F5bGFuZF9zY2FubmVyID0gJCh0b3BfYnVpbGRkaXIpL3dheWxhbmQtc2Nhbm5lcgorIGVuZGlmCisgCisgcHJvdG9jb2wvJS1wcm90b2NvbC5jIDogJCh0b3Bfc3JjZGlyKS9wcm90b2NvbC8lLnhtbAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYzJhODA0ZS4uZGUwYjAyZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjUsMTEgKzY1LDExIEBAIEFDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorIAkgICAgICBbWyNpbmNsdWRlIDx0aW1lLmg+XV0pCisgQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0pCisgCistQUNfQVJHX0VOQUJMRShbc2Nhbm5lcl0sCistICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1zY2FubmVyXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBjb21waWxhdGlvbiBvZiB3YXlsYW5kLXNjYW5uZXJdKV0sCistICAgICAgICAgICAgICBbXSwKKy0gICAgICAgICAgICAgIFtlbmFibGVfc2Nhbm5lcj15ZXNdKQorK0FDX0FSR19XSVRIKFtob3N0LXNjYW5uZXJdLAorKyAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLWhvc3Qtc2Nhbm5lcl0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgYSBob3N0IHdheWxhbmQtc2Nhbm5lcl0pXSwKKysgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICBbd2l0aF9ob3N0X3NjYW5uZXI9bm9dKQorIAorIEFDX0FSR19FTkFCTEUoW2RvY3VtZW50YXRpb25dLAorIAkgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kb2N1bWVudGF0aW9uXSwKK0BAIC03NywyNSArNzcsMjMgQEAgQUNfQVJHX0VOQUJMRShbZG9jdW1lbnRhdGlvbl0sCisgCSAgICAgIFtdLAorIAkgICAgICBbZW5hYmxlX2RvY3VtZW50YXRpb249eWVzXSkKKyAKKy1BTV9DT05ESVRJT05BTChFTkFCTEVfU0NBTk5FUiwgdGVzdCAieCRlbmFibGVfc2Nhbm5lciIgPSB4eWVzKQorK0FNX0NPTkRJVElPTkFMKEhPU1RfU0NBTk5FUiwgdGVzdCAieCR3aXRoX2hvc3Rfc2Nhbm5lciIgPSB4eWVzKQorIAorIEFDX0FSR19XSVRIKGljb25kaXIsIFsgIC0td2l0aC1pY29uZGlyPTxkaXI+ICAgIExvb2sgZm9yIGN1cnNvciBpY29ucyBoZXJlXSwKKyAJCSAgICAgWyAgSUNPTkRJUj0kd2l0aHZhbF0sCisgCQkgICAgIFsgIElDT05ESVI9JHtkYXRhZGlyfS9pY29uc10pCisgQUNfU1VCU1QoW0lDT05ESVJdKQorIAorLWlmIHRlc3QgIngkZW5hYmxlX3NjYW5uZXIiID0gInh5ZXMiOyB0aGVuCistCVBLR19DSEVDS19NT0RVTEVTKEVYUEFULCBbZXhwYXRdLCBbXSwKKy0JCVtBQ19DSEVDS19IRUFERVJTKGV4cGF0LmgsIFtdLAorLQkJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQuaC4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorLQkJIFNBVkVfTElCUz0iJExJQlMiCistCQkgQUNfU0VBUkNIX0xJQlMoWE1MX1BhcnNlckNyZWF0ZSwgZXhwYXQsIFtdLAorLQkJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQgbGlicmFyeS4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorLQkJIEVYUEFUX0xJQlM9IiRMSUJTIgorLQkJIExJQlM9IiRTQVZFX0xJQlMiCistCQkgQUNfU1VCU1QoRVhQQVRfTElCUykKKy0JCV0pCistZmkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhFWFBBVCwgW2V4cGF0XSwgW10sCisrCVtBQ19DSEVDS19IRUFERVJTKGV4cGF0LmgsIFtdLAorKwkJW0FDX01TR19FUlJPUihbQ2FuJ3QgZmluZCBleHBhdC5oLiBQbGVhc2UgaW5zdGFsbCBleHBhdC5dKV0pCisrCSBTQVZFX0xJQlM9IiRMSUJTIgorKwkgQUNfU0VBUkNIX0xJQlMoWE1MX1BhcnNlckNyZWF0ZSwgZXhwYXQsIFtdLAorKwkJW0FDX01TR19FUlJPUihbQ2FuJ3QgZmluZCBleHBhdCBsaWJyYXJ5LiBQbGVhc2UgaW5zdGFsbCBleHBhdC5dKV0pCisrCSBFWFBBVF9MSUJTPSIkTElCUyIKKysJIExJQlM9IiRTQVZFX0xJQlMiCisrCSBBQ19TVUJTVChFWFBBVF9MSUJTKQorKwldKQorIAorIEFDX1BBVEhfUFJPRyhYU0xUUFJPQywgeHNsdHByb2MpCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfWFNMVFBST0NdLCBbdGVzdCAieCRYU0xUUFJPQyIgIT0gIngiXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Rpc2FibGUtbWFjcm8tY2hlY2tzLW5vdC11c2VkLWZvci1zY2FubmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOGJjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Rpc2FibGUtbWFjcm8tY2hlY2tzLW5vdC11c2VkLWZvci1zY2FubmVyLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK2Rpc2FibGUgbWFjcm8gY2hlY2tzIG5vdCB1c2VkIGZvciBzY2FubmVyCisKK1dlIG9ubHkgYnVpbGQgd2F5bGFuZC1uYXRpdmUgZm9yIHRoZSBzY2FubmVyLCBzbyBkaXNhYmxlIHRoZSBiaXRzIHdlIGRvbid0CithY3R1YWxseSBuZWVkLiBUaGlzIGF2b2lkIGJ1aWxkIGlzc3VlIG9uIG9sZGVyIGRpc3RybyBzdWNoIGFzIENlbnRvcyA1Lng6Cit8IGVycm9yOiAnT19DTE9FWEVDJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKK3wgZXJyb3I6IHN5cy90aW1lcmZkLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3wgZXJyb3I6ICdDTE9DS19NT05PVE9OSUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorfCBlcnJvcjogJ1RGRF9DTE9FWEVDJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKK3wgZXJyb3I6ICdTRkRfQ0xPRVhFQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyMCArKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00MSwxNiArNDEsMTYgQEAgQUNfU1VCU1QoR0NDX0NGTEFHUykKKyAKKyBBQ19DSEVDS19GVU5DUyhbYWNjZXB0NCBta29zdGVtcCBwb3NpeF9mYWxsb2NhdGVdKQorIAorLUFDX0NIRUNLX0RFQ0woU0ZEX0NMT0VYRUMsW10sCistCSAgICAgIFtBQ19NU0dfRVJST1IoIlNGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCistCSAgICAgIFtbI2luY2x1ZGUgPHN5cy9zaWduYWxmZC5oPl1dKQorLUFDX0NIRUNLX0RFQ0woVEZEX0NMT0VYRUMsW10sCistCSAgICAgIFtBQ19NU0dfRVJST1IoIlRGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCistCSAgICAgIFtbI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+XV0pCistQUNfQ0hFQ0tfREVDTChDTE9DS19NT05PVE9OSUMsW10sCistCSAgICAgIFtBQ19NU0dfRVJST1IoIkNMT0NLX01PTk9UT05JQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorLQkgICAgICBbWyNpbmNsdWRlIDx0aW1lLmg+XV0pCistQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0pCisrIyNBQ19DSEVDS19ERUNMKFNGRF9DTE9FWEVDLFtdLAorKyMJICAgICAgW0FDX01TR19FUlJPUigiU0ZEX0NMT0VYRUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKysjCSAgICAgIFtbI2luY2x1ZGUgPHN5cy9zaWduYWxmZC5oPl1dKQorKyNBQ19DSEVDS19ERUNMKFRGRF9DTE9FWEVDLFtdLAorKyMJICAgICAgW0FDX01TR19FUlJPUigiVEZEX0NMT0VYRUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKysjCSAgICAgIFtbI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+XV0pCisrI0FDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorKyMJICAgICAgW0FDX01TR19FUlJPUigiQ0xPQ0tfTU9OT1RPTklDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCisrIwkgICAgICBbWyNpbmNsdWRlIDx0aW1lLmg+XV0pCisrI0FDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorIAorIEFDX0FSR19FTkFCTEUoW3NjYW5uZXJdLAorICAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtc2Nhbm5lcl0sCistLSAKKzEuOC4zLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5YTBhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS44LjEuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJXYXlsYW5kLCBhIHByb3RvY29sIGJldHdlZW4gYSBjb21wb3NpdG9yIGFuZCBjbGllbnRzIgorREVTQ1JJUFRJT04gPSAiV2F5bGFuZCBpcyBhIHByb3RvY29sIGZvciBhIGNvbXBvc2l0b3IgdG8gdGFsayB0byBpdHMgY2xpZW50cyBcCithcyB3ZWxsIGFzIGEgQyBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIG9mIHRoYXQgcHJvdG9jb2wuIFRoZSBjb21wb3NpdG9yIGNhbiBiZSBcCithIHN0YW5kYWxvbmUgZGlzcGxheSBzZXJ2ZXIgcnVubmluZyBvbiBMaW51eCBrZXJuZWwgbW9kZXNldHRpbmcgYW5kIGV2ZGV2IFwKK2lucHV0IGRldmljZXMsIGFuIFggYXBwbGljYXRpb24sIG9yIGEgd2F5bGFuZCBjbGllbnQgaXRzZWxmLiBUaGUgY2xpZW50cyBjYW4gXAorYmUgdHJhZGl0aW9uYWwgYXBwbGljYXRpb25zLCBYIHNlcnZlcnMgKHJvb3RsZXNzIG9yIGZ1bGxzY3JlZW4pIG9yIG90aGVyIFwKK2Rpc3BsYXkgc2VydmVycy4iCitIT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTFkNDQ3NmE3ZDk4ZGQ1NjkxYzUzZDRkNDNhNTEwYzcyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy93YXlsYW5kLXNlcnZlci5jO2VuZGxpbmU9MjE7bWQ1PTA3OWFlMjFkYmY5OGFkYTUyZWMyMzc0NDg1MWIwYTVjIgorCitTUkNfVVJJID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gIjZlODc3ODc3YzNlMDRjZmI4NjVjZmNkMDczM2M5YWIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYxN2M5MzhkMWMyNGZkMGExMGY2NTBhNjIzYTI3NzVkMzI5ZGIzMTY4YjU3MzJlNDk4YjA4Mzg4ZWM3NzZmYzgiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgXAorICAgIGZpbGU6Ly9kaXNhYmxlLW1hY3JvLWNoZWNrcy1ub3QtdXNlZC1mb3Itc2Nhbm5lci5wYXRjaCBcCisgICAgIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworREVQRU5EUyA9ICJleHBhdCBsaWJmZmkgd2F5bGFuZC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiAtLXdpdGgtaG9zdC1zY2FubmVyIgorCisjIFdheWxhbmQgaW5zdGFsbHMgYSBNNCBtYWNybyBmb3Igb3RoZXIgcHJvamVjdHMgdG8gdXNlLCB3aGljaCB1c2VzIHRoZSB0YXJnZXQKKyMgcGtnLWNvbmZpZyB0byBmaW5kIGZpbGVzLiAgUmVwbGFjZSBwa2ctY29uZmlnIHdpdGggcGtnLWNvbmZpZy1uYXRpdmUuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgIHNlZCAtZSAncyxQS0dfQ0hFQ0tfTU9EVUxFUyguKiksLGcnIFwKKyAgICAgIC1lICdzLCRQS0dfQ09ORklHLHBrZy1jb25maWctbmF0aXZlLGcnIFwKKyAgICAgIC1pICR7RH0vJHtkYXRhZGlyfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNAorfQorCitzeXNyb290X3N0YWdlX2FsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKwlybSAke1NZU1JPT1RfREVTVERJUn0vJHtkYXRhZGlyfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNAorCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQgJHtTWVNST09UX0RFU1RESVJ9LyR7ZGF0YWRpcn0vYWNsb2NhbC8KK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyoke1NPTElCU30iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L3dheWxhbmQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Yjc4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlN0YXJ0dXAgc2NyaXB0IGZvciB0aGUgV2VzdG9uIFdheWxhbmQgY29tcG9zaXRvciIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL3dlc3RvbgorfQorCitpbmhlcml0IGFsbGFyY2ggdXBkYXRlLXJjLmQKKworUkRFUEVORFNfJHtQTn0gPSAid2VzdG9uIGtiZCIKKworSU5JVFNDUklQVF9OQU1FID0gIndlc3RvbiIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDkgNSAyIC4gc3RvcCAyMCAwIDEgNiAuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MzhmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisjCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiB3ZXN0b24KKyMgUmVxdWlyZWQtU3RhcnQ6ICRsb2NhbF9mcyAkcmVtb3RlX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICRsb2NhbF9mcyAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyMjIEVORCBJTklUIElORk8KKworaWYgdGVzdCAtZSAvZXRjL2RlZmF1bHQvd2VzdG9uIDsgdGhlbgorICAgICAgICAuIC9ldGMvZGVmYXVsdC93ZXN0b24KK2ZpCisKK2tpbGxwcm9jKCkgeworICAgICAgICBwaWQ9YC9iaW4vcGlkb2YgJDFgCisgICAgICAgIFsgIiRwaWQiICE9ICIiIF0gJiYga2lsbCAkcGlkCit9CisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHdlc3Rvbj1mYWxzZSkKKwkJZWNobyAiV2VzdG9uIGRpc2FibGVkIgorCQlleGl0IDA7CisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworZG9uZQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgICAgIC4gL2V0Yy9wcm9maWxlCisKKyAgICAgICAgIyBUaGlzIGlzIGFsbCBhIG5hc3R5IGhhY2sKKyAgICAgICAgaWYgdGVzdCAteiAiJFhER19SVU5USU1FX0RJUiI7IHRoZW4KKyAgICAgICAgICAgICAgICBleHBvcnQgWERHX1JVTlRJTUVfRElSPS9ydW4vdXNlci9yb290CisgICAgICAgICAgICAgICAgbWtkaXIgLS1wYXJlbnRzICRYREdfUlVOVElNRV9ESVIKKyAgICAgICAgICAgICAgICBjaG1vZCAwNzAwICRYREdfUlVOVElNRV9ESVIKKyAgICAgICAgZmkKKworICAgICAgICBvcGVudnQgLXMgd2VzdG9uIC0tICRPUFRBUkdTCisgIDs7CisKKyAgc3RvcCkKKyAgICAgICAgZWNobyAiU3RvcHBpbmcgV2VzdG9uIgorICAgICAgICBraWxscHJvYyB3ZXN0b24KKyAgOzsKKworICByZXN0YXJ0KQorCSQwIHN0b3AKKyAgICAgICAgc2xlZXAgMQorICAgICAgICAkMCBzdGFydAorICA7OworCisgICopCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIKKyAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDg4NDhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaApAQCAtMCwwICsxLDgwIEBACitGcm9tIGMyMmU5MDM2NWQ4OTM0NjI1ODM5NDgzM2NiY2FkMDNmZjMyYjJlMjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXkgMjAxNSAyMDo1NjowMCAtMDcwMAorU3ViamVjdDogW1BBVENIIHdlc3Rvbl0gbWFrZSBlcnJvcigpIHBvcnRhYmxlCisKK2Vycm9yKCkgaXMgbm90IHBvc2l4IGJ1dCBnbnUgZXh0ZW5zaW9uIHNvIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbAora2luZCBvZiBzeXN0ZW1zaSBlLmcuIG11c2wuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyBjb25maWd1cmUuYWMgICAgICAgIHwgIDIgKysKKyBzcmMvd2VzdG9uLWVycm9yLmggIHwgMjAgKysrKysrKysrKysrKysrKysrKysKKyBzcmMvd2VzdG9uLWxhdW5jaC5jIHwgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3dlc3Rvbi1lcnJvci5oCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI2M2ZjMjIuLmY1MmNkNjIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU3LDYgKzU3LDggQEAgQUNfQ0hFQ0tfREVDTChDTE9DS19NT05PVE9OSUMsW10sCisgCSAgICAgIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKyBBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKyAKKytBQ19DSEVDS19IRUFERVJTKFtlcnJvci5oXSkKKysKKyBBQ19DSEVDS19GVU5DUyhbbWtvc3RlbXAgc3RyY2hybnVsIGluaXRncm91cHMgcG9zaXhfZmFsbG9jYXRlXSkKKyAKKyBDT01QT1NJVE9SX01PRFVMRVM9IndheWxhbmQtc2VydmVyID49IDEuNy45MyBwaXhtYW4tMSA+PSAwLjI1LjIiCitkaWZmIC0tZ2l0IGEvc3JjL3dlc3Rvbi1lcnJvci5oIGIvc3JjL3dlc3Rvbi1lcnJvci5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjA4OWQwMgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3dlc3Rvbi1lcnJvci5oCitAQCAtMCwwICsxLDIwIEBACisrI2lmbmRlZiBfV0VTVE9OX0VSUk9SX0gKKysjZGVmaW5lIF9XRVNUT05fRVJST1JfSAorKworKyNpZiBkZWZpbmVkKEhBVkVfRVJST1JfSCkKKysjaW5jbHVkZSA8ZXJyb3IuaD4KKysjZWxzZQorKyNpbmNsdWRlIDxlcnIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2RlZmluZSBfd2VzdG9uX2Vycm9yKFMsIEUsIEYsIC4uLikgZG8geyBcCisrCWlmIChFKSBcCisrCQllcnIoUywgRiAiOiAlcyIsICMjX19WQV9BUkdTX18sIHN0cmVycm9yKEUpKTsgXAorKwllbHNlIFwKKysJCWVycihTLCBGLCAjI19fVkFfQVJHU19fKTsgXAorK30gd2hpbGUoMCkKKysKKysjZGVmaW5lIGVycm9yIF93ZXN0b25fZXJyb3IKKysjZW5kaWYKKysKKysjZW5kaWYKKysKK2RpZmYgLS1naXQgYS9zcmMvd2VzdG9uLWxhdW5jaC5jIGIvc3JjL3dlc3Rvbi1sYXVuY2guYworaW5kZXggMTBjNjZkZS4uM2U2ZDMwYSAxMDA2NDQKKy0tLSBhL3NyYy93ZXN0b24tbGF1bmNoLmMKKysrKyBiL3NyYy93ZXN0b24tbGF1bmNoLmMKK0BAIC0zMCw3ICszMCw2IEBACisgI2luY2x1ZGUgPHBvbGwuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorQEAgLTU2LDYgKzU1LDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSAid2VzdG9uLWxhdW5jaC5oIgorKyNpbmNsdWRlICJ3ZXN0b24tZXJyb3IuaCIKKyAKKyAjZGVmaW5lIERSTV9NQUpPUiAyMjYKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9kaXNhYmxlLXdheWxhbmQtc2Nhbm5lci1wa2ctY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiYTM4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9kaXNhYmxlLXdheWxhbmQtc2Nhbm5lci1wa2ctY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtNTAxLDEyICs1MDEsNiBAQCBpZiB0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzOyB0aGVuCisgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX0xDTVMsIFt0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzXSkKKyAKKy1BQ19QQVRIX1BST0coW3dheWxhbmRfc2Nhbm5lcl0sIFt3YXlsYW5kLXNjYW5uZXJdKQorLWlmIHRlc3QgeCR3YXlsYW5kX3NjYW5uZXIgPSB4OyB0aGVuCistCVBLR19DSEVDS19NT0RVTEVTKFdBWUxBTkRfU0NBTk5FUiwgW3dheWxhbmQtc2Nhbm5lcl0pCistCXdheWxhbmRfc2Nhbm5lcj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT13YXlsYW5kX3NjYW5uZXIgd2F5bGFuZC1zY2FubmVyYAorLWZpCistCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBzcmMvdmVyc2lvbi5oIHNyYy93ZXN0b24ucGNdKQorIAorIEFNX0NPTkRJVElPTkFMKFtIQVZFX0dJVF9SRVBPXSwgW3Rlc3QgLWYgJHNyY2Rpci8uZ2l0L2xvZ3MvSEVBRF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWU2ZDZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApAQCAtMCwwICsxLDQzIEBACit3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjOiBtYWtlIGxjbXMgZXhwbGljaXRseSBjb25maWd1cmFibGUKKworVGhlIGxjbXMgcGFja2FnZSBpcyBvdXRzaWRlIG9mIG9wZW5lbWJlZGRlZC1jb3JlLCBzbyBtYWtlIGl0CitleHBsaWNpdGx5IGNvbmZpZ3VyYWJsZS4gTWFrZSBpdCBkZXRlcm1pbmlzdGljLCBzbyB0aGF0IGlmIGxjbXMKK2RlcGVuZGVuY2llcyBhcmUgbWlzc2luZywgYXV0b2NvbmYgdGhyb3dzIGEgZmF0YWwgZXJyb3IuIEZvbGxvdwordXBzdHJlYW0gc3R5bGUgdG8gbWFrZSBpdCBtb3JlIGxpa2VseSB0byBiZSBtZXJnZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlc3Rvbi0xLjUuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKK0BAIC00OTEsMTIgKzQ5MSwyNCBAQCBBQ19BUkdfRU5BQkxFKGRlbW8tY2xpZW50cy1pbnN0YWxsLAorIAkJCSAgICAgZW5hYmxlX2RlbW9fY2xpZW50c19pbnN0YWxsPW5vKQorIEFNX0NPTkRJVElPTkFMKElOU1RBTExfREVNT19DTElFTlRTLCBbdGVzdCAieCRlbmFibGVfZGVtb19jbGllbnRzX2luc3RhbGwiID0gInh5ZXMiXSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhMQ01TLCBsY21zMiwKKy0gICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPXllc10sIFtoYXZlX2xjbXM9bm9dKQorLWlmIHRlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgQUNfREVGSU5FKEhBVkVfTENNUywgMSwgW0hhdmUgbGNtcyBzdXBwb3J0XSkKKytBQ19BUkdfRU5BQkxFKGxjbXMsCisrICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxjbXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgbGNtcyBzdXBwb3J0XSksLAorKyAgICAgICAgICAgICAgZW5hYmxlX2xjbXM9YXV0bykKKytBTV9DT05ESVRJT05BTChIQVZFX0xDTVMsIFt0ZXN0ICJ4JGVuYWJsZV9sY21zIiA9IHh5ZXNdKQorK2lmIHRlc3QgIngkZW5hYmxlX2xjbXMiICE9ICJ4bm8iOyB0aGVuCisrICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhMQ01TLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgbGNtczIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9eWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz1ub10pCisrICAgICAgICBpZiB0ZXN0ICJ4JGhhdmVfbGNtcyIgPSAieG5vIiAtYSAieCRlbmFibGVfbGNtcyIgPSAieHllcyI7IHRoZW4KKysgICAgICAgICAgQUNfTVNHX0VSUk9SKFtsY21zIHN1cHBvcnQgZXhwbGljaXRseSByZXF1ZXN0ZWQsIGJ1dCBsY21zIGNvdWxkbid0IGJlIGZvdW5kXSkKKysgICAgICAgIGZpCisrICAgICAgICBpZiB0ZXN0ICJ4JGhhdmVfbGNtcyIgPSAieHllcyI7IHRoZW4KKysgICAgICAgICAgICAgICAgZW5hYmxlX2xjbXM9eWVzCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xDTVMsIDEsIFtIYXZlIGxjbXMgc3VwcG9ydF0pCisrICAgICAgICBmaQorIGZpCistQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRoYXZlX2xjbXMiID0geHllc10pCisgCisgQUNfUEFUSF9QUk9HKFt3YXlsYW5kX3NjYW5uZXJdLCBbd2F5bGFuZC1zY2FubmVyXSkKKyBpZiB0ZXN0IHgkd2F5bGFuZF9zY2FubmVyID0geDsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwN2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorCitUaGUgbGlid2VicCBwYWNrYWdlIGlzIG91dHNpZGUgb2Ygb3BlbmVtYmVkZGVkLWNvcmUsIHNvIG1ha2UgaXQKK2V4cGxpY2l0bHkgY29uZmlndXJhYmxlLiBNYWtlIGl0IGRldGVybWluaXN0aWMsIHNvIHRoYXQgaWYgbGlid2VicCAKK2RlcGVuZGVuY2llcyBhcmUgbWlzc2luZywgYXV0b2NvbmYgdGhyb3dzIGEgZmF0YWwgZXJyb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlc3Rvbi0xLjUuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKK0BAIC0yNjgsOSArMjY4LDIyIEBAIGZpCisgCisgUEtHX0NIRUNLX01PRFVMRVMoUElYTUFOLCBbcGl4bWFuLTFdKQorIFBLR19DSEVDS19NT0RVTEVTKFBORywgW2xpYnBuZ10pCistUEtHX0NIRUNLX01PRFVMRVMoV0VCUCwgW2xpYndlYnBdLCBbaGF2ZV93ZWJwPXllc10sIFtoYXZlX3dlYnA9bm9dKQorLUFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieHllcyJdLAorLSAgICAgIFtBQ19ERUZJTkUoW0hBVkVfV0VCUF0sIFsxXSwgW0hhdmUgd2VicF0pXSkKKytBQ19BUkdfRU5BQkxFKHdlYnAsCisrICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXdlYnBdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgbGlid2VicCBzdXBwb3J0XSksLAorKyAgICAgICAgICAgICAgZW5hYmxlX3dlYnA9YXV0bykKKytBTV9DT05ESVRJT05BTChIQVZFX1dFQlAsIFt0ZXN0ICJ4JGVuYWJsZV93ZWJwIiA9IHh5ZXNdKQorK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV93ZWJwIiAhPSAieG5vIl0sCisrICAgIFBLR19DSEVDS19NT0RVTEVTKFdFQlAsCisrICAgICAgICAgICAgICAgICAgICAgW2xpYndlYnBdLAorKyAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3dlYnA9eWVzXSwKKysgICAgICAgICAgICAgICAgICAgICBbaGF2ZV93ZWJwPW5vXSkKKysgICAgQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4bm8iIC1hICJ4JGVuYWJsZV93ZWJwIiA9ICJ4eWVzIl0sCisrICAgICAgICBBQ19NU0dfRVJST1IoW2xpYndlYnAgc3VwcG9ydCBleHBsaWNpdGx5IHJlcXVlc3QsIGJ1dCBsaXB3ZWJwIGNvdWxkIG5vdCBiZSBmb3VuZF0pKQorKyAgICBBU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInh5ZXMiXSwKKysgICAgICAgIFtlbmFibGVfd2VicD15ZXNdCisrICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1dFQlBdLCBbMV0sIFtIYXZlIHdlYnBdKV0pCisrKQorIAorIEFDX0FSR19FTkFCTEUodmFhcGktcmVjb3JkZXIsIFsgIC0tZW5hYmxlLXZhYXBpLXJlY29yZGVyXSwsCisgCSAgICAgIGVuYWJsZV92YWFwaV9yZWNvcmRlcj1hdXRvKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9wYXJhbGxlbG1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiNWVmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9wYXJhbGxlbG1ha2UucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorQmFja3BvcnQgdHdvIHBhdGNoZXMgZnJvbSB1cHN0cmVhbSB0byBmaXggcGFyYWxsZWwgYnVpbGRzCisKKy0gbWtkaXIgcmFjZXMgKDJlZmYyMmI4ZTZmNmU1MjU1YTE5MTVjMzNkZmQ5MWNlY2YwMmNiYmMpCistIHdlc3Rvbi5kZXNrdG9wIHJhY2UgKDMxNTQ3NmZhN2IxZjFjNDRjMWIzNTExNjAzNmRmNTRhYzVjYjlhMDMpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA1ODE5YjE5Li5mZjEzYjE5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMjAsNyArMjAsNyBAQCB3ZXN0b24uaW5pIDogJChzcmNkaXIpL3dlc3Rvbi5pbmkuaW4KKyAJCSQ8ID4gJEAKKyAKKyBpdmktc2hlbGwvd2VzdG9uLmluaSA6ICQoc3JjZGlyKS9pdmktc2hlbGwvd2VzdG9uLmluaS5pbgorLQkkKEFNX1ZfR0VOKSQoU0VEKSBcCisrCSQoQU1fVl9HRU4pJChNS0RJUl9QKSAkKGRpciAkQCkgJiYgJChTRUQpIFwKKyAJCS1lICdzfEBiaW5kaXJbQF18JChiaW5kaXIpfGcnIFwKKyAJCS1lICdzfEBhYnNfdG9wX2J1aWxkZGlyW0BdfCQoYWJzX3RvcF9idWlsZGRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3Bfc3JjZGlyW0BdfCQoYWJzX3RvcF9zcmNkaXIpfGcnIFwKK0BAIC0yOSw3ICsyOSw3IEBAIGl2aS1zaGVsbC93ZXN0b24uaW5pIDogJChzcmNkaXIpL2l2aS1zaGVsbC93ZXN0b24uaW5pLmluCisgCQkkPCA+ICRACisgCisgdGVzdHMvd2VzdG9uLWl2aS5pbmkgOiAkKHNyY2RpcikvaXZpLXNoZWxsL3dlc3Rvbi5pbmkuaW4KKy0JJChBTV9WX0dFTikkKFNFRCkgXAorKwkkKEFNX1ZfR0VOKSQoTUtESVJfUCkgJChkaXIgJEApICYmICQoU0VEKSBcCisgCQktZSAnc3xAYmluZGlyW0BdfCQoYmluZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9idWlsZGRpcltAXXwkKGFic190b3BfYnVpbGRkaXIpfGcnIFwKKyAJCS1lICdzfEBhYnNfdG9wX3NyY2RpcltAXXwkKGFic190b3Bfc3JjZGlyKXxnJyBcCitAQCAtMTc5LDggKzE3OSw3IEBAIHBrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKyBwa2djb25maWdfREFUQSA9IHNyYy93ZXN0b24ucGMKKyAKKyB3YXlsYW5kX3Nlc3Npb25kaXIgPSAkKGRhdGFkaXIpL3dheWxhbmQtc2Vzc2lvbnMKKy13YXlsYW5kX3Nlc3Npb25fREFUQSA9IHNyYy93ZXN0b24uZGVza3RvcAorLWRpc3Rfd2F5bGFuZF9zZXNzaW9uX0RBVEEgPSAkKHdheWxhbmRfc2Vzc2lvbl9EQVRBKQorK2Rpc3Rfd2F5bGFuZF9zZXNzaW9uX0RBVEEgPSBzcmMvd2VzdG9uLmRlc2t0b3AKKyAKKyB3ZXN0b25pbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS93ZXN0b24KKyB3ZXN0b25pbmNsdWRlX0hFQURFUlMgPQkJCQlcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NmFlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24uZGVza3RvcApAQCAtMCwwICsxLDkgQEAKK1tEZXNrdG9wIEVudHJ5XQorRW5jb2Rpbmc9VVRGLTgKK1R5cGU9QXBwbGljYXRpb24KK05hbWU9V2VzdG9uCitDb21tZW50PVdheWxhbmQgQ29tcG9zdGl0b3IKK0V4ZWM9d2VzdG9uCitJY29uPXdlc3RvbgorVGVybWluYWw9ZmFsc2UKK0NhdGVnb3JpZXM9VXRpbGl0eTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24ucG5nIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4YjdlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDJjNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOC4wLmJiCkBAIC0wLDAgKzEsOTQgQEAKK1NVTU1BUlkgPSAiV2VzdG9uLCBhIFdheWxhbmQgY29tcG9zaXRvciIKK0RFU0NSSVBUSU9OID0gIldlc3RvbiBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIGEgV2F5bGFuZCBjb21wb3NpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzVlZmFjMjU1OWEyMjQ1MjdiZDRmZDU5M2QzODQ2NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY29tcG9zaXRvci5jO2VuZGxpbmU9MjM7bWQ1PWE5NzkzZjFlZGM4ZDFhNGMzNDRjYThhZTI1MjM1MmZiIgorCitTUkNfVVJJID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5wbmcgXAorICAgICAgICAgICBmaWxlOi8vd2VzdG9uLmRlc2t0b3AgXAorICAgICAgICAgICBmaWxlOi8vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1ha2UtZXJyb3ItcG9ydGFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWxtYWtlLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNGNiOGE3ZWQwNTM1YjRmYzM2NDI2NDM5ODhkYWIzNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OTYzZTY5ZjMyOGU4MTVjZWM0MmM1ODA0NmM0YWY3MjE0NzZjNzU0MWJiN2Q5ZWRjNzE3NDBmYWRhNWFkMzEyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXNlcmFkZAorCitERVBFTkRTID0gImxpYnhrYmNvbW1vbiBnZGstcGl4YnVmIHBpeG1hbiBjYWlybyBnbGliLTIuMCBqcGVnIgorREVQRU5EUyArPSAid2F5bGFuZCBsaWJpbnB1dCB2aXJ0dWFsL2VnbCBwYW5nbyIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNldHVpZC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteHdheWxhbmQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNpbXBsZS1jbGllbnRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jbGllbnRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1kZW1vLWNsaWVudHMtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwaS1jb21wb3NpdG9yIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcmRwLWNvbXBvc2l0b3IgXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9xZW11eDg2ID0gIlwKKwkJV0VTVE9OX05BVElWRV9CQUNLRU5EPWZiZGV2LWJhY2tlbmQuc28gXAorCQkiCitFWFRSQV9PRUNPTkZfYXBwZW5kX3FlbXV4ODYtNjQgPSAiXAorCQlXRVNUT05fTkFUSVZFX0JBQ0tFTkQ9ZmJkZXYtYmFja2VuZC5zbyBcCisJCSIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAna21zIGZiZGV2IHdheWxhbmQgZWdsJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGF1bmNoJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAiCisjCisjIENvbXBvc2l0b3IgY2hvaWNlcworIworIyBXZXN0b24gb24gS01TCitQQUNLQUdFQ09ORklHW2ttc10gPSAiLS1lbmFibGUtZHJtLWNvbXBvc2l0b3IsLS1kaXNhYmxlLWRybS1jb21wb3NpdG9yLGRybSB1ZGV2IHZpcnR1YWwvbWVzYSBtdGRldiIKKyMgV2VzdG9uIG9uIFdheWxhbmQgKG5lc3RlZCBXZXN0b24pCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtY29tcG9zaXRvciwtLWRpc2FibGUtd2F5bGFuZC1jb21wb3NpdG9yLHZpcnR1YWwvbWVzYSIKKyMgV2VzdG9uIG9uIFgxMQorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMS1jb21wb3NpdG9yLC0tZGlzYWJsZS14MTEtY29tcG9zaXRvcix2aXJ0dWFsL2xpYngxMSBsaWJ4Y2IgbGlieGNiIGxpYnhjdXJzb3IgY2Fpcm8iCisjIEhlYWRsZXNzIFdlc3RvbgorUEFDS0FHRUNPTkZJR1toZWFkbGVzc10gPSAiLS1lbmFibGUtaGVhZGxlc3MtY29tcG9zaXRvciwtLWRpc2FibGUtaGVhZGxlc3MtY29tcG9zaXRvciIKKyMgV2VzdG9uIG9uIGZyYW1lYnVmZmVyCitQQUNLQUdFQ09ORklHW2ZiZGV2XSA9ICItLWVuYWJsZS1mYmRldi1jb21wb3NpdG9yLC0tZGlzYWJsZS1mYmRldi1jb21wb3NpdG9yLHVkZXYgbXRkZXYiCisjIHdlc3Rvbi1sYXVuY2gKK1BBQ0tBR0VDT05GSUdbbGF1bmNoXSA9ICItLWVuYWJsZS13ZXN0b24tbGF1bmNoLC0tZGlzYWJsZS13ZXN0b24tbGF1bmNoLGxpYnBhbSBkcm0iCisjIFZBLUFQSSBkZXNrdG9wIHJlY29yZGVyCitQQUNLQUdFQ09ORklHW3ZhYXBpXSA9ICItLWVuYWJsZS12YWFwaS1yZWNvcmRlciwtLWRpc2FibGUtdmFhcGktcmVjb3JkZXIsbGlidmEiCisjIFdlc3RvbiB3aXRoIEVHTCBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsIC0tZW5hYmxlLXNpbXBsZS1lZ2wtY2xpZW50cywtLWRpc2FibGUtZWdsIC0tZGlzYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsdmlydHVhbC9lZ2wiCisjIFdlc3RvbiB3aXRoIGNhaXJvIGdsZXN2MiBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2NhaXJvLWdsZXN2Ml0gPSAiLS13aXRoLWNhaXJvLWdsZXN2MiwtLXdpdGgtY2Fpcm89aW1hZ2UsY2Fpcm8iCisjIFdlc3RvbiB3aXRoIGxjbXMgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tsY21zXSA9ICItLWVuYWJsZS1sY21zLC0tZGlzYWJsZS1sY21zLGxjbXMiCisjIFdlc3RvbiB3aXRoIHdlYnAgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1t3ZWJwXSA9ICItLWVuYWJsZS13ZWJwLC0tZGlzYWJsZS13ZWJwLGxpYndlYnAiCisjIFdlc3RvbiB3aXRoIHVud2luZGluZyBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2xpYnVud2luZF0gPSAiLS1lbmFibGUtbGlidW53aW5kLC0tZGlzYWJsZS1saWJ1bndpbmQsbGlidW53aW5kIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFdlc3RvbiBkb2Vzbid0IG5lZWQgdGhlIC5sYSBmaWxlcyB0byBsb2FkIG1vZHVsZXMsIHNvIHdpcGUgdGhlbQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3dlc3Rvbi8qLmxhCisKKwkjIElmIFgxMSwgc2hpcCBhIGRlc2t0b3AgZmlsZSB0byBsYXVuY2ggaXQKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IiA9ICJ4MTEiIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKwkJaW5zdGFsbCAke1dPUktESVJ9L3dlc3Rvbi5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci80OHg0OC9hcHBzCisJCWluc3RhbGwgJHtXT1JLRElSfS93ZXN0b24ucG5nICR7RH0ke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvNDh4NDgvYXBwcworICAgICAgICBmaQorfQorCitQQUNLQUdFUyArPSAiJHtQTn0tZXhhbXBsZXMiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS93ZXN0b24gJHtiaW5kaXJ9L3dlc3Rvbi10ZXJtaW5hbCAke2JpbmRpcn0vd2VzdG9uLWluZm8gJHtiaW5kaXJ9L3dlc3Rvbi1sYXVuY2ggJHtiaW5kaXJ9L3djYXAtZGVjb2RlICR7bGliZXhlY2Rpcn0gJHtsaWJkaXJ9LyR7QlBOfS8qLnNvICR7ZGF0YWRpcn0iCitGSUxFU18ke1BOfS1leGFtcGxlcyA9ICIke2JpbmRpcn0vKiIKKworUkRFUEVORFNfJHtQTn0gKz0gInhrZXlib2FyZC1jb25maWciCitSUkVDT01NRU5EU18ke1BOfSA9ICJsaWJlcmF0aW9uLWZvbnRzIgorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gd2VzdG9uLWxhdW5jaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWGRlZmF1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWGRlZmF1bHRzCkBAIC0wLDAgKzEsMyBAQAorUnh2dCpzY3JvbGxCYXJfcmlnaHQ6IHRydWUKK1J4dnQqZm9udDogeGZ0Ok1vbm86cGl4ZWxzaXplPTkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXJ2ZXIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU3MGRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXJ2ZXIKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisjCisKK1hTRVJWRVI9L3Vzci9iaW4vWG9yZworCisuIC9ldGMvcHJvZmlsZQorCitBUkdTPSIgLWJyIC1wbiIKKworRElTUExBWT0nOjAnCisKK2V4ZWMgeGluaXQgL2V0Yy9YMTEvWHNlc3Npb24gLS0gJFhTRVJWRVIgJERJU1BMQVkgJEFSR1MgJCoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjczMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorCitpZiBbIC14IC91c3IvYmluL2RidXMtbGF1bmNoIF07IHRoZW4KKyAgICAjIEFzIHRoaXMgaXMgdGhlIFggc2Vzc2lvbiBzY3JpcHQsIGFsd2F5cyBzdGFydCBhIG5ldyBEQnVzIHNlc3Npb24uCisgICAgZXZhbCBgZGJ1cy1sYXVuY2ggLS1zaC1zeW50YXggLS1leGl0LXdpdGgtc2Vzc2lvbiA8L2Rldi9udWxsYAorICAgIGVjaG8gIkQtQlVTIHBlci1zZXNzaW9uIGRhZW1vbiBhZGRyZXNzIGlzOiAkREJVU19TRVNTSU9OX0JVU19BRERSRVNTIgorZmkKKworLiAvZXRjL3Byb2ZpbGUKKworaWYgWyAtZiAkSE9NRS8ucHJvZmlsZSBdOyB0aGVuCisgICAgLiAkSE9NRS8ucHJvZmlsZQorZmkKKworU1lTU0VTU0lPTkRJUj0vZXRjL1gxMS9Yc2Vzc2lvbi5kCisKK2V4cG9ydCBDTFVUVEVSX0RJU0FCTEVfTUlQTUFQUEVEX1RFWFQ9MQorCitmb3IgU0VTU0lPTkZJTEUgaW4gJFNZU1NFU1NJT05ESVIvKjsgZG8KKyAgICBzZXQgK2UKKyAgICBjYXNlICIkU0VTU0lPTkZJTEUiIGluCisgICAgICAgICouc2gpCisgICAgICAgICAgICAuICIkU0VTU0lPTkZJTEUiCisgICAgICAgICAgICA7OworICAgICAgICAqLnNoYmcpCisgICAgICAgICAgICAiJFNFU1NJT05GSUxFIiAmCisgICAgICAgICAgICA7OworICAgICAgICAqfikKKyAgICAgICAgICAgICMgSWdub3JlIGJhY2t1cCBmaWxlcworICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICIkU0VTU0lPTkZJTEUiCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBzZXQgLWUKK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xMmtleW1hcC5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEya2V5bWFwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDEwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xMmtleW1hcC5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCisjIGtkcml2ZSAxLjQgZG9lcyBub3QgaGF2ZSBkZWZhdWx0IGtleW1hcCBpbiBzZXJ2ZXIKKyN4bW9kbWFwIC0gPC9ldGMvWDExL2RlZmF1bHQueG1vZG1hcApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1OTRiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2gKQEAgLTAsMCArMSwxMyBAQAorIyBNaW5pbWFsL3N0dWIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFhERyBCYXNlIERpcmVjdG9yeSBzcGVjaWZpY2F0aW9uLgorIyBodHRwOi8vc3RhbmRhcmRzLmZyZWVkZXNrdG9wLm9yZy9iYXNlZGlyLXNwZWMvYmFzZWRpci1zcGVjLWxhdGVzdC5odG1sCisjCisjIFdheWxhbmQgbmVlZHMgWERHX1JVTlRJTUVfRElSLCBzbyBzZXQgaXQgdG8gL3RtcC4gIFRoaXMgaXNuJ3QgY29tcGxpYW50IHdpdGgKKyMgdGhlIHNwZWNpZmljYXRpb24gKHdyb25nIG1vZGUsIHdyb25nIG93bmVyKSBidXQgaXQncyBtb3N0bHkgc3VmZmljaWVudC4KKyMKKyMgSW4gdGhlIGlkZWFsIGNhc2Ugd2hlcmUgU3lzdGVtRCBpcyBib290aW5nIGFuZCB1c2Vyc3BhY2UgaXMgaW5pdGlhdGVkIGJ5IGEKKyMgU3lzdGVtRCB1c2VyIHNlc3Npb24gdGhpcyB3aWxsIGhhdmUgYmVlbiBzZXQgYWxyZWFkeSwgc28gZG9uJ3Qgb3ZlcndyaXRlIGl0LgorCitpZiBbIC16ICIkWEdEX1JVTlRJTUVfRElSIiBdOyB0aGVuCisJWERHX1JVTlRJTUVfRElSPSIvdG1wIgorICAgICAgICBleHBvcnQgWERHX1JVTlRJTUVfRElSCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvODl4ZGdhdXRvc3RhcnQuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC84OXhkZ2F1dG9zdGFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDcwMDhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvODl4ZGdhdXRvc3RhcnQuc2gKQEAgLTAsMCArMSw3IEBACitYREdBVVRPU1RBUlQ9L2V0Yy94ZGcvYXV0b3N0YXJ0CitpZiBbIC1kICRYREdBVVRPU1RBUlQgXTsgdGhlbgorICAgIGZvciBTQ1JJUFQgaW4gJFhER0FVVE9TVEFSVC8qOyBkbworICAgICAgICBDTUQ9YGdyZXAgXkV4ZWM9ICRTQ1JJUFQgfCBjdXQgLWQgJz0nIC1mIDJgCisgICAgICAgICRDTUQgJgorICAgIGRvbmUKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvOTBYV2luZG93TWFuYWdlci5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTM2ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvOTBYV2luZG93TWFuYWdlci5zaApAQCAtMCwwICsxLDcgQEAKK2lmIFsgLXggJEhPTUUvLlhzZXNzaW9uIF07IHRoZW4KKyAgICBleGVjICRIT01FLy5Yc2Vzc2lvbgorZWxpZiBbIC14IC91c3IvYmluL3gtc2Vzc2lvbi1tYW5hZ2VyIF07IHRoZW4KKyAgICBleGVjIC91c3IvYmluL3gtc2Vzc2lvbi1tYW5hZ2VyCitlbHNlCisgICAgZXhlYyAvdXNyL2Jpbi94LXdpbmRvdy1tYW5hZ2VyCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhMTNmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAKQEAgLTAsMCArMSwyNjAgQEAKK2tleWNvZGUgICA4ID0KK2tleWNvZGUgICA5ID0gRXNjYXBlCitrZXljb2RlICAxMCA9IDEgZXhjbGFtCitrZXljb2RlICAxMSA9IDIgYXQKK2tleWNvZGUgIDEyID0gMyBudW1iZXJzaWduCitrZXljb2RlICAxMyA9IDQgZG9sbGFyCitrZXljb2RlICAxNCA9IDUgcGVyY2VudAora2V5Y29kZSAgMTUgPSA2IGFzY2lpY2lyY3VtCitrZXljb2RlICAxNiA9IDcgYW1wZXJzYW5kIGJyYWNlbGVmdAora2V5Y29kZSAgMTcgPSA4IGFzdGVyaXNrIGJyYWNrZXRsZWZ0CitrZXljb2RlICAxOCA9IDkgcGFyZW5sZWZ0IGJyYWNrZXRyaWdodAora2V5Y29kZSAgMTkgPSAwIHBhcmVucmlnaHQgYnJhY2VyaWdodAora2V5Y29kZSAgMjAgPSBtaW51cyB1bmRlcnNjb3JlIGJhY2tzbGFzaAora2V5Y29kZSAgMjEgPSBlcXVhbCBwbHVzCitrZXljb2RlICAyMiA9IEJhY2tTcGFjZQora2V5Y29kZSAgMjMgPSBUYWIKK2tleWNvZGUgIDI0ID0gcSBRIHEKK2tleWNvZGUgIDI1ID0gdyBXIHcKK2tleWNvZGUgIDI2ID0gZSBFCitrZXljb2RlICAyNyA9IHIgUiByCitrZXljb2RlICAyOCA9IHQgVCB0CitrZXljb2RlICAyOSA9IHkgWSB5CitrZXljb2RlICAzMCA9IHUgVSB1CitrZXljb2RlICAzMSA9IGkgSSBpCitrZXljb2RlICAzMiA9IG8gTyBvCitrZXljb2RlICAzMyA9IHAgUCBwCitrZXljb2RlICAzNCA9IGJyYWNrZXRsZWZ0IGJyYWNlbGVmdAora2V5Y29kZSAgMzUgPSBicmFja2V0cmlnaHQgYnJhY2VyaWdodCBhc2NpaXRpbGRlCitrZXljb2RlICAzNiA9IFJldHVybgora2V5Y29kZSAgMzcgPSBDb250cm9sX0wKK2tleWNvZGUgIDM4ID0gYSBBCitrZXljb2RlICAzOSA9IHMgUyBzCitrZXljb2RlICA0MCA9IGQgRAora2V5Y29kZSAgNDEgPSBmIEYKK2tleWNvZGUgIDQyID0gZyBHIGcKK2tleWNvZGUgIDQzID0gaCBIIGgKK2tleWNvZGUgIDQ0ID0gaiBKIGoKK2tleWNvZGUgIDQ1ID0gayBLIGsKK2tleWNvZGUgIDQ2ID0gbCBMIGwKK2tleWNvZGUgIDQ3ID0gc2VtaWNvbG9uIGNvbG9uCitrZXljb2RlICA0OCA9IGFwb3N0cm9waGUgcXVvdGVkYmwKK2tleWNvZGUgIDQ5ID0gZ3JhdmUgYXNjaWl0aWxkZQora2V5Y29kZSAgNTAgPSBTaGlmdF9MCitrZXljb2RlICA1MSA9IGJhY2tzbGFzaCBiYXIKK2tleWNvZGUgIDUyID0geiBaIHoKK2tleWNvZGUgIDUzID0geCBYIHgKK2tleWNvZGUgIDU0ID0gYyBDCitrZXljb2RlICA1NSA9IHYgViB2CitrZXljb2RlICA1NiA9IGIgQgora2V5Y29kZSAgNTcgPSBuIE4gbgora2V5Y29kZSAgNTggPSBtIE0gbQora2V5Y29kZSAgNTkgPSBjb21tYSBsZXNzCitrZXljb2RlICA2MCA9IHBlcmlvZCBncmVhdGVyCitrZXljb2RlICA2MSA9IHNsYXNoIHF1ZXN0aW9uCitrZXljb2RlICA2MiA9IFNoaWZ0X1IKK2tleWNvZGUgIDYzID0gS1BfTXVsdGlwbHkKK2tleWNvZGUgIDY0ID0gQWx0X0wKK2tleWNvZGUgIDY1ID0gc3BhY2UKK2tleWNvZGUgIDY2ID0gQ2Fwc19Mb2NrCitrZXljb2RlICA2NyA9IEYxIEYxMQora2V5Y29kZSAgNjggPSBGMiBGMTIKK2tleWNvZGUgIDY5ID0gRjMgRjEzCitrZXljb2RlICA3MCA9IEY0IEYxNAora2V5Y29kZSAgNzEgPSBGNSBGMTUKK2tleWNvZGUgIDcyID0gRjYgRjE2CitrZXljb2RlICA3MyA9IEY3IEYxNwora2V5Y29kZSAgNzQgPSBGOCBGMTgKK2tleWNvZGUgIDc1ID0gRjkgRjE5CitrZXljb2RlICA3NiA9IEYxMCBGMjAKK2tleWNvZGUgIDc3ID0gTnVtX0xvY2sKK2tleWNvZGUgIDc4ID0gU2Nyb2xsX0xvY2sKK2tleWNvZGUgIDc5ID0gS1BfNwora2V5Y29kZSAgODAgPSBLUF84CitrZXljb2RlICA4MSA9IEtQXzkKK2tleWNvZGUgIDgyID0gS1BfU3VidHJhY3QKK2tleWNvZGUgIDgzID0gS1BfNAora2V5Y29kZSAgODQgPSBLUF81CitrZXljb2RlICA4NSA9IEtQXzYKK2tleWNvZGUgIDg2ID0gS1BfQWRkCitrZXljb2RlICA4NyA9IEtQXzEKK2tleWNvZGUgIDg4ID0gS1BfMgora2V5Y29kZSAgODkgPSBLUF8zCitrZXljb2RlICA5MCA9IEtQXzAKK2tleWNvZGUgIDkxID0gS1BfRGVjaW1hbAora2V5Y29kZSAgOTIgPQora2V5Y29kZSAgOTMgPQora2V5Y29kZSAgOTQgPSBsZXNzIGdyZWF0ZXIgYmFyCitrZXljb2RlICA5NSA9IEYxMQora2V5Y29kZSAgOTYgPSBGMTIKK2tleWNvZGUgIDk3ID0KK2tleWNvZGUgIDk4ID0KK2tleWNvZGUgIDk5ID0KK2tleWNvZGUgMTAwID0KK2tleWNvZGUgMTAxID0KK2tleWNvZGUgMTAyID0KK2tleWNvZGUgMTAzID0KK2tleWNvZGUgMTA0ID0gS1BfRW50ZXIKK2tleWNvZGUgMTA1ID0gQ29udHJvbF9SCitrZXljb2RlIDEwNiA9IEtQX0RpdmlkZQora2V5Y29kZSAxMDcgPQora2V5Y29kZSAxMDggPSBNb2RlX3N3aXRjaAora2V5Y29kZSAxMDkgPSBCcmVhawora2V5Y29kZSAxMTAgPSBIb21lCitrZXljb2RlIDExMSA9IFVwCitrZXljb2RlIDExMiA9IFByaW9yCitrZXljb2RlIDExMyA9IExlZnQKK2tleWNvZGUgMTE0ID0gUmlnaHQKK2tleWNvZGUgMTE1ID0gRW5kCitrZXljb2RlIDExNiA9IERvd24KK2tleWNvZGUgMTE3ID0gTmV4dAora2V5Y29kZSAxMTggPSBJbnNlcnQKK2tleWNvZGUgMTE5ID0gRGVsZXRlCitrZXljb2RlIDEyMCA9IE1lbnUKK2tleWNvZGUgMTIxID0gRjEzCitrZXljb2RlIDEyMiA9IEYxNAora2V5Y29kZSAxMjMgPSBIZWxwCitrZXljb2RlIDEyNCA9IEV4ZWN1dGUKK2tleWNvZGUgMTI1ID0gRjE3CitrZXljb2RlIDEyNiA9IEtQX1N1YnRyYWN0CitrZXljb2RlIDEyNyA9IFBhdXNlCitrZXljb2RlIDEyOCA9CitrZXljb2RlIDEyOSA9CitrZXljb2RlIDEzMCA9CitrZXljb2RlIDEzMSA9CitrZXljb2RlIDEzMiA9CitrZXljb2RlIDEzMyA9CitrZXljb2RlIDEzNCA9CitrZXljb2RlIDEzNSA9CitrZXljb2RlIDEzNiA9CitrZXljb2RlIDEzNyA9CitrZXljb2RlIDEzOCA9CitrZXljb2RlIDEzOSA9CitrZXljb2RlIDE0MCA9CitrZXljb2RlIDE0MSA9CitrZXljb2RlIDE0MiA9CitrZXljb2RlIDE0MyA9CitrZXljb2RlIDE0NCA9CitrZXljb2RlIDE0NSA9CitrZXljb2RlIDE0NiA9CitrZXljb2RlIDE0NyA9CitrZXljb2RlIDE0OCA9CitrZXljb2RlIDE0OSA9CitrZXljb2RlIDE1MCA9CitrZXljb2RlIDE1MSA9CitrZXljb2RlIDE1MiA9CitrZXljb2RlIDE1MyA9CitrZXljb2RlIDE1NCA9CitrZXljb2RlIDE1NSA9CitrZXljb2RlIDE1NiA9CitrZXljb2RlIDE1NyA9CitrZXljb2RlIDE1OCA9CitrZXljb2RlIDE1OSA9CitrZXljb2RlIDE2MCA9CitrZXljb2RlIDE2MSA9CitrZXljb2RlIDE2MiA9CitrZXljb2RlIDE2MyA9CitrZXljb2RlIDE2NCA9CitrZXljb2RlIDE2NSA9CitrZXljb2RlIDE2NiA9CitrZXljb2RlIDE2NyA9CitrZXljb2RlIDE2OCA9CitrZXljb2RlIDE2OSA9CitrZXljb2RlIDE3MCA9CitrZXljb2RlIDE3MSA9CitrZXljb2RlIDE3MiA9CitrZXljb2RlIDE3MyA9CitrZXljb2RlIDE3NCA9CitrZXljb2RlIDE3NSA9CitrZXljb2RlIDE3NiA9CitrZXljb2RlIDE3NyA9CitrZXljb2RlIDE3OCA9CitrZXljb2RlIDE3OSA9CitrZXljb2RlIDE4MCA9CitrZXljb2RlIDE4MSA9CitrZXljb2RlIDE4MiA9CitrZXljb2RlIDE4MyA9CitrZXljb2RlIDE4NCA9CitrZXljb2RlIDE4NSA9CitrZXljb2RlIDE4NiA9CitrZXljb2RlIDE4NyA9CitrZXljb2RlIDE4OCA9CitrZXljb2RlIDE4OSA9CitrZXljb2RlIDE5MCA9CitrZXljb2RlIDE5MSA9CitrZXljb2RlIDE5MiA9CitrZXljb2RlIDE5MyA9CitrZXljb2RlIDE5NCA9CitrZXljb2RlIDE5NSA9CitrZXljb2RlIDE5NiA9CitrZXljb2RlIDE5NyA9CitrZXljb2RlIDE5OCA9CitrZXljb2RlIDE5OSA9CitrZXljb2RlIDIwMCA9CitrZXljb2RlIDIwMSA9CitrZXljb2RlIDIwMiA9CitrZXljb2RlIDIwMyA9CitrZXljb2RlIDIwNCA9CitrZXljb2RlIDIwNSA9CitrZXljb2RlIDIwNiA9CitrZXljb2RlIDIwNyA9CitrZXljb2RlIDIwOCA9CitrZXljb2RlIDIwOSA9CitrZXljb2RlIDIxMCA9CitrZXljb2RlIDIxMSA9CitrZXljb2RlIDIxMiA9CitrZXljb2RlIDIxMyA9CitrZXljb2RlIDIxNCA9CitrZXljb2RlIDIxNSA9CitrZXljb2RlIDIxNiA9CitrZXljb2RlIDIxNyA9CitrZXljb2RlIDIxOCA9CitrZXljb2RlIDIxOSA9CitrZXljb2RlIDIyMCA9CitrZXljb2RlIDIyMSA9CitrZXljb2RlIDIyMiA9CitrZXljb2RlIDIyMyA9CitrZXljb2RlIDIyNCA9CitrZXljb2RlIDIyNSA9CitrZXljb2RlIDIyNiA9CitrZXljb2RlIDIyNyA9CitrZXljb2RlIDIyOCA9CitrZXljb2RlIDIyOSA9CitrZXljb2RlIDIzMCA9CitrZXljb2RlIDIzMSA9CitrZXljb2RlIDIzMiA9CitrZXljb2RlIDIzMyA9CitrZXljb2RlIDIzNCA9CitrZXljb2RlIDIzNSA9CitrZXljb2RlIDIzNiA9CitrZXljb2RlIDIzNyA9CitrZXljb2RlIDIzOCA9CitrZXljb2RlIDIzOSA9CitrZXljb2RlIDI0MCA9CitrZXljb2RlIDI0MSA9CitrZXljb2RlIDI0MiA9CitrZXljb2RlIDI0MyA9CitrZXljb2RlIDI0NCA9CitrZXljb2RlIDI0NSA9CitrZXljb2RlIDI0NiA9CitrZXljb2RlIDI0NyA9CitrZXljb2RlIDI0OCA9CitrZXljb2RlIDI0OSA9CitrZXljb2RlIDI1MCA9CitrZXljb2RlIDI1MSA9CitrZXljb2RlIDI1MiA9CitrZXljb2RlIDI1MyA9CitrZXljb2RlIDI1NCA9CisKK2FkZCBzaGlmdCA9IFNoaWZ0X0wKK2FkZCBzaGlmdCA9IFNoaWZ0X1IKK2FkZCBzaGlmdCA9IE1lbnUKK2FkZCBsb2NrID0gQ2Fwc19Mb2NrCithZGQgY29udHJvbCA9IENvbnRyb2xfTAorYWRkIGNvbnRyb2wgPSBDb250cm9sX1IKK2FkZCBtb2QxID0gQWx0X0wKK2FkZCBtb2QyID0gTnVtX0xvY2sKKyFtb2QzICAgICAgCithZGQgbW9kNCA9IE1vZGVfc3dpdGNoCishbW9kNSAgICAgIAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmOTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZ3BsdjItbGljZW5zZS5wYXRjaApAQCAtMCwwICsxLDM1NSBAQAorQ09QWUlORzogYWRkIEdQTHYyIGxpY2Vuc2UgZmlsZQorCit0aGlzIGlzIGEgbG9jYWwgZmlsZSByZWNpcGUgYW5kIHRoZSBsaWNlbnNlIGZpbGUgaXMgbWlzc2luZy5JbiBvcmRlcgordG8gcGFzcyB0aGUgbGljZW5zZSBjaGVja3N1bSBjaGVja2luZywgdGhlIGxpY2Vuc2UgZmlsZSBpcyBuZWVkZWQuIFNvCit0aGlzIHBhdGNoIGFkZCB0aGUgR1BMdjIgbGljZW5zZSBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbl8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTZiMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbl8wLjEuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJDb21tb24gWDExIHNjcmlwdHMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitTRUNUSU9OID0gIngxMSIKK1BSID0gInI0NyIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24geGR5cGluZm8geG1vZG1hcCB4aW5pdAorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vZXRjIFwKKyAgICAgICAgICAgZmlsZTovL2dwbHYyLWxpY2Vuc2UucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwljcCAtUiAke1N9L2V0YyAke0R9JHtzeXNjb25mZGlyfQorCWNobW9kIC1SIDc1NSAke0R9JHtzeXNjb25mZGlyfQorCWZpbmQgJHtEfSR7c3lzY29uZmRpcn0gLXR5cGUgZiAtbmFtZSBcKn4gLWV4ZWMgcm0gLXJmIHt9IFw7Cit9CisKK1JERVBFTkRTXyR7UE59ID0gImRidXMteDExIHhtb2RtYXAgeGRweWluZm8geHRzY2FsIHhpbml0IGZvcm1mYWN0b3IiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4ZDQwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIFhzZXJ2ZXIgSW5pdCBTY3JpcHQgKG5vIGRtKSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK1NFQ1RJT04gPSAieDExIgorUFIgPSAicjMxIgorCitTUkNfVVJJID0gImZpbGU6Ly94c2VydmVyLW5vZG0gXAorICAgICAgICAgICBmaWxlOi8vWHVzZXJuYW1lIFwKKyAgICAgICAgICAgZmlsZTovL2dwbHYyLWxpY2Vuc2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8veHNlcnZlci1ub2RtLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8veHNlcnZlci1ub2RtLmNvbmYgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgU2luY2Ugd2UgcmVmZXIgdG8gUk9PVExFU1NfWCB3aGljaCBpcyBub3JtYWxseSBlbmFibGVkIHBlci1tYWNoaW5lCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorICAgIGluc3RhbGwgeHNlcnZlci1ub2RtICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKyAgICAgICAgaW5zdGFsbCB4c2VydmVyLW5vZG0uY29uZiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgIGlmIFsgIiR7Uk9PVExFU1NfWH0iID0gIjEiIF0gOyB0aGVuCisgICAgICAgICAgICBzZWQgLWkgJ3MhXkhPTUU9LiohSE9NRT0vaG9tZS94dXNlciEnICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveHNlcnZlci1ub2RtCisgICAgICAgICAgICBzZWQgLWkgJ3MhXlVzZXI9LiohVXNlcj14dXNlciEnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlZCAtaSAncyFeSE9NRT0uKiFIT01FPSR7Uk9PVF9IT01FfSEnICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveHNlcnZlci1ub2RtCisgICAgICAgICAgICBzZWQgLWkgJy9eVXNlcj0vZCcgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veHNlcnZlci1ub2RtLnNlcnZpY2UKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaWYgWyAiJHtST09UTEVTU19YfSIgPSAiMSIgXSA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vWDExCisgICAgICAgICAgICBpbnN0YWxsIFh1c2VybmFtZSAke0R9JHtzeXNjb25mZGlyfS9YMTEKKyAgICAgICAgZmkKKyAgICBmaQorfQorCitSREVQRU5EU18ke1BOfSA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdST09UTEVTU19YJywgJzEnLCAneHVzZXItYWNjb3VudCcsICcnLCBkKX0iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ4c2VydmVyLW5vZG0iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5IDUgLiBzdG9wIDIwIDAgMSAyIDMgNiAuIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInhzZXJ2ZXItbm9kbS5zZXJ2aWNlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MGU1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZQpAQCAtMCwwICsxIEBACit4dXNlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L2dwbHYyLWxpY2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmOTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L2dwbHYyLWxpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwzNTUgQEAKK0NPUFlJTkc6IGFkZCBHUEx2MiBsaWNlbnNlIGZpbGUKKwordGhpcyBpcyBhIGxvY2FsIGZpbGUgcmVjaXBlIGFuZCB0aGUgbGljZW5zZSBmaWxlIGlzIG1pc3NpbmcuSW4gb3JkZXIKK3RvIHBhc3MgdGhlIGxpY2Vuc2UgY2hlY2tzdW0gY2hlY2tpbmcsIHRoZSBsaWNlbnNlIGZpbGUgaXMgbmVlZGVkLiBTbwordGhpcyBwYXRjaCBhZGQgdGhlIEdQTHYyIGxpY2Vuc2UgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ1MTE5MDUKKy0tLSAvZGV2L251bGwKKysrKyBiL0NPUFlJTkcKK0BAIC0wLDAgKzEsMzM5IEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKworKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKworK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKworKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbSBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmEwYThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorIworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogeHNlcnZlcgorIyBSZXF1aXJlZC1TdGFydDogJGxvY2FsX2ZzICRyZW1vdGVfZnMgZGJ1cworIyBSZXF1aXJlZC1TdG9wOiAkbG9jYWxfZnMgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDIgMyA2CisjIyMgRU5EIElOSVQgSU5GTworCitraWxscHJvYygpIHsgICAgICAgICAgICAjIGtpbGwgdGhlIG5hbWVkIHByb2Nlc3MoZXMpCisgICAgICAgIHBpZD1gL2Jpbi9waWRvZiAkMWAKKyAgICAgICAgWyAiJHBpZCIgIT0gIiIgXSAmJiBraWxsICRwaWQKK30KKworcmVhZCBDTURMSU5FIDwgL3Byb2MvY21kbGluZQorZm9yIHggaW4gJENNRExJTkU7IGRvCisgICAgICAgIGNhc2UgJHggaW4KKyAgICAgICAgeDExPWZhbHNlKQorCQllY2hvICJYIFNlcnZlciBkaXNhYmxlZCIgCisJCWV4aXQgMDsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCitkb25lCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICAgICAuIC9ldGMvcHJvZmlsZQorICAgICAgIHVzZXJuYW1lPXJvb3QKKyAgICAgICBlY2hvICJTdGFydGluZyBYc2VydmVyIgorICAgICAgIGlmIFsgLWYgL2V0Yy9YMTEvWHVzZXJuYW1lIF07IHRoZW4KKyAgICAgICAgICAgdXNlcm5hbWU9YGNhdCAvZXRjL1gxMS9YdXNlcm5hbWVgCisgICAgICAgICAgICMgc2V0dGluZyBmb3Igcm9vdGxlc3MgWAorICAgICAgICAgICBjaG1vZCBvK3cgL3Zhci9sb2cKKyAgICAgICAgICAgY2htb2QgZytyIC9kZXYvdHR5WzAtM10KKyAgICAgICAgICAgIyBoaWRyYXcgZGV2aWNlIGlzIHByb2JhYmx5IG5lZWRlZAorICAgICAgICAgICBpZiBbIC1lIC9kZXYvaGlkcmF3MCBdOyB0aGVuCisgICAgICAgICAgICAgICBjaG1vZCBvK3J3IC9kZXYvaGlkcmF3KgorICAgICAgICAgICBmaQorICAgICAgIGZpCisgICAgICAgIyBVc2luZyBzdSByYXRoZXIgdGhhbiBzdWRvIGFzIGxhdGVzdCAxLjguMSBjYXVzZSBmYWlsdXJlIFtZT0NUTyAjMTIxMV0KKyAgICAgICBzdSAtbCAtYyAnL2V0Yy9YMTEvWHNlcnZlciYnICR1c2VybmFtZSAKKyAgICAgICAjIFdhaXQgZm9yIHRoZSBkZXNrdG9wIHRvIHNheSBpdHMgZmluaXNoZWQgbG9hZGluZworICAgICAgICMgYmVmb3JlIGxvYWRpbmcgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbQorICAgICAgICMgZGJ1cy13YWl0IG9yZy5tYXRjaGJveF9wcm9qZWN0LmRlc2t0b3AgTG9hZGVkCisgIDs7CisKKyAgc3RvcCkKKyAgICAgICAgZWNobyAiU3RvcHBpbmcgWFNlcnZlciIKKyAgICAgICAga2lsbHByb2MgeGluaXQKKyAgICAgICAgc2xlZXAgMQorICAgICAgICBjaHZ0IDEgJgorICA7OworCisgIHJlc3RhcnQpCisJJDAgc3RvcAorICAgICAgICAkMCBzdGFydAorICA7OworCisgICopCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIKKyAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDU4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZgpAQCAtMCwwICsxIEBACitIT01FPS9ob21lL3Jvb3QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkOTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249WHNlcnZlciBzdGFydHVwIHdpdGhvdXQgYSBkaXNwbGF5IG1hbmFnZXIKKworW1NlcnZpY2VdCitVc2VyPXJvb3QKK0Vudmlyb25tZW50RmlsZT0vZXRjL2RlZmF1bHQveHNlcnZlci1ub2RtCitFeGVjU3RhcnQ9L2V0Yy9YMTEvWHNlcnZlcgorCitbSW5zdGFsbF0KK0FsaWFzPWRpc3BsYXktbWFuYWdlci5zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhNTM4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvZW5kaWFuLWZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitsaWJ2bmNzZXJ2ZXI6IHJlcGxhY2UgTElCVk5DU0VSVkVSX1dPUkRTX0JJR0VORElBTiB3aXRoIFdPUkRTX0JJR0VORElBTgorCitzaW5jZSBtYWNybyBBQ19DX0JJR0VORElBTiBpcyB1c2VkIGluIGF1dG9jb25mIGFuZCBXT1JEU19CSUdFTkRJQU4gaXMKK2F1dG9tYXRpY2FsbHkgc2V0IGZvciBkaWZmZXJlbnQgYXJjaCwgaXQgaXMgYmV0dGVyIHRvIHVzZSBXT1JEU19CSUdFTkRJQU4KK2luc3RlYWQgb2YgTElCVk5DU0VSVkVSX1dPUkRTX0JJR0VORElBTiwgd2hpY2ggY3Vhc2UgaXNzdWUgaW4gbWlwcy4KKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS9saWJ2bmNzZXJ2ZXIvbWFpbi5jIGIvbGlidm5jc2VydmVyL21haW4uYworaW5kZXggYjZiZDkzMC4uOGJiYjdiZiAxMDA2NDQKKy0tLSBhL2xpYnZuY3NlcnZlci9tYWluLmMKKysrKyBiL2xpYnZuY3NlcnZlci9tYWluLmMKK0BAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBNVVRFWChleHRNdXRleCk7CisgCisgc3RhdGljIGludCByZmJFbmFibGVMb2dnaW5nPTE7CisgCistI2lmZGVmIExJQlZOQ1NFUlZFUl9XT1JEU19CSUdFTkRJQU4KKysjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgY2hhciByZmJFbmRpYW5UZXN0ID0gKDE9PTApOworICNlbHNlCisgY2hhciByZmJFbmRpYW5UZXN0ID0gKDE9PTEpOworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL3N0YXJ0aW5nLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvc3RhcnRpbmctZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmU0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL3N0YXJ0aW5nLWZpeC5wYXRjaApAQCAtMCwwICsxLDI1IEBACisiLWd1aSIgJiAiLXJmYnBvcnQiIHJlcXVpcmUgIndpc2giIGluc3RhbGxlZCwgb3IgZWxzZSB4MTF2bmMgZmFpbHMgdG8gc3RhcnQuCitSZW1vdmluZyB0aGVzZSAyIHBhcmFtZXRlcnMgbWFrZXMgeDExdm5jIHdvcmtzIHdlbGwgb24gcG9reSBzYXRvIGltYWdlLgorCitBZGQgYWxzbyAtc2tpcF9sb2Nra2V5cyBvcHRpb24gdG8gaWdub3JlIGFsbCBDYXBzX0xvY2ssIFNoaWZ0X0xvY2ssIE51bV9Mb2NrLAorU2Nyb2xsX0xvY2sga2V5c3ltcyByZWNlaXZlZCBmcm9tIHZpZXdlcnMsIGluIG9yZGVyIHRvIGxlYXZlIHRoZSBsb2NrIHN0YXRlIG9uCit0aGUgc2VydmVyIHNpZGUgdW5jaGFuZ2VkLiBZZXQsIHRoZSBrZXlzIHdpbGwgYXBwZWFyIGNvcnJlY3RseS4KKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHgxMXZuYy0wLjkuMTIveDExdm5jL3gxMXZuYy5kZXNrdG9wCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geDExdm5jLTAuOS4xMi5vcmlnL3gxMXZuYy94MTF2bmMuZGVza3RvcAkyMDExLTAzLTAzIDEwOjMzOjE4LjAwMDAwMDAwMCArMDgwMAorKysrIHgxMXZuYy0wLjkuMTIveDExdm5jL3gxMXZuYy5kZXNrdG9wCTIwMTEtMDMtMDMgMTA6MzU6MjAuMDAwMDAwMDAwICswODAwCitAQCAtMSw3ICsxLDcgQEAKKyBbRGVza3RvcCBFbnRyeV0KKyBOYW1lPVgxMVZOQyBTZXJ2ZXIKKyBDb21tZW50PVNoYXJlIHRoaXMgZGVza3RvcCBieSBWTkMKKy1FeGVjPXgxMXZuYyAtZ3VpIHRyYXk9c2V0cGFzcyAtcmZicG9ydCBQUk9NUFQgLWJnIC1vICUlSE9NRS8ueDExdm5jLmxvZy4lJVZOQ0RJU1BMQVkKKytFeGVjPXgxMXZuYyAtYmcgLXJmYnBvcnQgNTkwMCAtc2tpcF9sb2Nra2V5cyAtbyAlJUhPTUUvLngxMXZuYy5sb2cuJSVWTkNESVNQTEFZCisgSWNvbj1jb21wdXRlcgorIFRlcm1pbmFsPWZhbHNlCisgVHlwZT1BcHBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDI0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL3gxMXZuY18wLjkuMTMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJFeHBvcnRzIHlvdXIgWCBzZXNzaW9uIG9uLXRoZS1mbHkgdmlhIFZOQyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2FybHJ1bmdlLmNvbS94MTF2bmMvIgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0FVVEhPUiA9ICJLYXJsIFJ1bmdlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zNjFiNmI4MzdjYWQyNmM2OTAwYTkyNmI2MmFhZGE1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94MTF2bmMveDExdm5jLmg7ZW5kbGluZT0zMzttZDU9NmY5NWRjNjUzNTQ2N2Q3ZWUxNTYzZmQ0MzRmYjM3MmUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnZuY3NlcnZlci94MTF2bmMvJHtQVn0veDExdm5jLSR7UFZ9LnRhci5nelwKKyAgICAgICAgICAgZmlsZTovL3N0YXJ0aW5nLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmRpYW4tZml4LnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gImEzNzJlYzRmZTgyMTEyMjE1NDdiMWMxMDhjZjU2ZTRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2ODI5ZjJlNjI5NjY3YTUyODRkZTYyYjA4MGIxMzEyNmEwNzM2NDk5ZmU0N2NkYjQ0N2FlZGIwN2E1OWYxM2IiCisKK0RFUEVORFMgPSAib3BlbnNzbCB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGpwZWcgemxpYiBsaWJ4Zml4ZXMgbGlieHJhbmRyIGxpYnhkYW1hZ2UgbGlieHRzdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdhdmFoaScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2F2YWhpXSA9ICItLXdpdGgtYXZhaGksLS13aXRob3V0LWF2YWhpLGF2YWhpIgorUEFDS0FHRUNPTkZJR1t4aW5lcmFtYV0gPSAiLS13aXRoLXhpbmVyYW1hLC0td2l0aG91dC14aW5lcmFtYSxsaWJ4aW5lcmFtYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmFjNTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK0ZpeCB0eXBvIGluIE1ha2VmaWxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS5vcmlnL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNTowNC4wMDE0MzUzMDUgKzAwMDAKKysrKyB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNTowNC4wNjE0MzUzMDIgKzAwMDAKK0BAIC03OSw3ICs3OSw3IEBACisgCXVsX2FuZ2xlIFwKKyAJdXJfYW5nbGUgXAorIAl2X2RvdWJsZV9hcnJvdyBcCistCXdhdGNoYSBcCisrCXdhdGNoIFwKKyAJeHRlcm0gIAorIAorIENVUlNPUl9ESVIgPSAkKGRhdGFkaXIpL2ljb25zL3hjdXJzb3ItdHJhbnNwYXJlbnQvY3Vyc29ycwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL3VzZS1yZWxhdGl2ZS1zeW1saW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI4ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXNlIHJlbGF0aXZlIHN5bWxpbmsgZm9yIGxpbmsgcmF0aGVyIHRoYW4gYWJzb2x1dGUgcGF0aCB3aGljaCAKK2RvZXNuJ3Qgd29yayB3ZWxsIGluIERFU1RESVIgc2V0dGluZy4KKworQWxzbyBmaXggb3V0IG9mIHRyZWUgYnVpbGRzIHRvIHVzZSBjb3JyZWN0IHNyY2Rpci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvMy84CisKK0luZGV4OiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2N1cnNvcnMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xLm9yaWcvY3Vyc29ycy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA3IDIyOjI1OjAzLjkzMzQzNTMwNyArMDAwMAorKysrIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA3IDIyOjI1OjI3LjI5MzQzNDc1NSArMDAwMAorQEAgLTg4LDkgKzg4LDkgQEAKKyAKKyBpbnN0YWxsLWRhdGEtbG9jYWw6CisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoQ1VSU09SX0RJUik7IAorLQkkKElOU1RBTExfREFUQSkgJChDVVJTT1JfUkVBTCkgJChERVNURElSKSQoQ1VSU09SX0RJUikvIAorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQoQ1VSU09SX1JFQUwpICQoREVTVERJUikkKENVUlNPUl9ESVIpLworIAlmb3IgQ1VSU09SIGluICQoQ1VSU09SX05BTUVTKTsgZG8gXAorIAkJZWNobyAnLS0gSW5zdGFsbGluZyBjdXJzb3IgJyQkQ1VSU09SOyBcCistCQlsbiAtcyAkKERFU1RESVIpJChDVVJTT1JfRElSKS90cmFuc3AgJChERVNURElSKSQoQ1VSU09SX0RJUikvJCRDVVJTT1I7IFwKKysJCWxuIC1zIHRyYW5zcCAkKERFU1RESVIpJChDVVJTT1JfRElSKS8kJENVUlNPUjsgXAorIAlkb25lCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTY2OGFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlRyYW5zcGFyZW50IFgxMSBjdXJzb3IgdGhlbWUgZm9yIHRvdWNoc2NyZWVucyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU0VDVElPTiA9ICJ4MTEvYmFzZSIKK1BSID0gInI0IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC91dGlscy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL3VzZS1yZWxhdGl2ZS1zeW1saW5rcy5wYXRjaCBcCisJICAgZmlsZTovL2ZpeF93YXRjaF9jdXJzb3IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YjBjNjIzMDQ5ZDRhYWIyMDYwMGQ2NDczZjhhYWIyMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMjZhZGYyZDUwM2QwMTI5OTcxODM5MGFlMzlkYWI0NjkxYTY3MjIwZGUwOTQyM2JlMDM2NGU5YTA2MGJmN2U0IgorRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS9pY29ucy94Y3Vyc29yLXRyYW5zcGFyZW50L2N1cnNvcnMvKiIKKworaW5oZXJpdCBhdXRvdG9vbHMgYWxsYXJjaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MzNmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcG9pbnRlcmNhbC54aW5wdXQKQEAgLTAsMCArMSBAQAorIyByZXBsYWNlIHdpdGggdmFsaWQgbWFjaGluZSBzcGVjaWZpYyBwb2ludGVyY2FsLnhpbnB1dApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dF8wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzNDhjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dF8wLjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBkYXRhIGZyb20geGlucHV0LWNhbGlicmF0b3IiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9pbnRlcmNhbC54aW5wdXQiCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgIyBPbmx5IGluc3RhbGwgZmlsZSBpZiBpdCBoYXMgYSBjb250ZW50cworICAgIGlmIFsgLXMgJHtTfS9wb2ludGVyY2FsLnhpbnB1dCBdICYmXAorICAgICAgIFsgISAtbiAiJChoZWFkIC1uMSAke1N9L3BvaW50ZXJjYWwueGlucHV0fGdyZXAgInJlcGxhY2UuKnBvaW50ZXJjYWxcLnhpbnB1dCIpIiBdOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3BvaW50ZXJjYWwueGlucHV0ICR7RH0ke3N5c2NvbmZkaXJ9LworICAgIGZpCit9CisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wb2ludGVyY2FsLnhpbnB1dCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvMzB4aW5wdXRfY2FsaWJyYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTA3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvMzB4aW5wdXRfY2FsaWJyYXRlLnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZworCitpZiBbICIkSEFWRV9UT1VDSFNDUkVFTiIgPSAiMSIgXTsgdGhlbgorCS91c3IvYmluL3hpbnB1dF9jYWxpYnJhdG9yX29uY2Uuc2gKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvQWxsb3cteGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaC10by1iZS1ydW4tYXMtbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9BbGxvdy14aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoLXRvLWJlLXJ1bi1hcy1uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTgyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvQWxsb3cteGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaC10by1iZS1ydW4tYXMtbi5wYXRjaApAQCAtMCwwICsxLDY2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRnJvbSAxNDczNGE5M2JkM2ZjMzIzMzI1NDU5ZTI0YjA0Nzk1NDIyZTM5NWU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorRGF0ZTogTW9uLCAxIEp1bCAyMDEzIDE1OjM4OjAyICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEFsbG93IHhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2ggdG8gYmUgcnVuIGFzIG5vcm1hbAorIHVzZXIKKworQWxsb3cgbm9ybWFsIHVzZXIgdG8gY3JlYXRlIHRoZWlyIG93biBwb2ludGVyY2FsLnhpbnB1dCBmaWxlcyB0aGF0CitvdmVycmlkZSB0aGUgc3lzdGVtIHBvaW50ZXJjYWwgZmlsZSBpbiAvZXRjLgorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CistLS0KKyBzY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2ggfCAgIDMzICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2ggYi9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKK2luZGV4IGZjY2IxOTcuLjBhZGE3ZGEgMTAwNzU1CistLS0gYS9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKKysrKyBiL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaAorQEAgLTExLDE5ICsxMSwzMiBAQAorIFBBVEg9Ii91c3IvYmluOiRQQVRIIgorIAorIEJJTkFSWT0ieGlucHV0X2NhbGlicmF0b3IiCistQ0FMRklMRT0iL2V0Yy9wb2ludGVyY2FsLnhpbnB1dCIKKy1MT0dGSUxFPSIvdmFyL2xvZy94aW5wdXRfY2FsaWJyYXRvci5wb2ludGVyY2FsLmxvZyIKKytTWVNfQ0FMRklMRT0iL2V0Yy9wb2ludGVyY2FsLnhpbnB1dCIKKytVU0VSX0NBTEZJTEU9IiRIT01FLy5wb2ludGVyY2FsL3BvaW50ZXJjYWwueGlucHV0IgorIAorLWlmIFsgLWUgJENBTEZJTEUgXSA7IHRoZW4KKy0gIGlmIGdyZXAgcmVwbGFjZSAkQ0FMRklMRSA7IHRoZW4KKy0gICAgZWNobyAiRW1wdHkgY2FsaWJyYXRpb24gZmlsZSBmb3VuZCwgcmVtb3ZpbmcgaXQiCistICAgIHJtICRDQUxGSUxFCistICBlbHNlCistICAgIGVjaG8gIlVzaW5nIGNhbGlicmF0aW9uIGRhdGEgc3RvcmVkIGluICRDQUxGSUxFIgorLSAgICAuICRDQUxGSUxFICYmIGV4aXQgMAorLSAgZmkKKytpZiBbICIkVVNFUiIgPSAicm9vdCIgXTsgdGhlbgorKyAgTE9HRklMRT0iL3Zhci9sb2cveGlucHV0X2NhbGlicmF0b3IucG9pbnRlcmNhbC5sb2ciCisrICBDQUxGSUxFUz0iJFNZU19DQUxGSUxFIgorK2Vsc2UKKysgIExPR0ZJTEU9IiRIT01FLy5wb2ludGVyY2FsL3hpbnB1dF9jYWxpYnJhdG9yLnBvaW50ZXJjYWwubG9nIgorKyAgQ0FMRklMRVM9IiRVU0VSX0NBTEZJTEUgJFNZU19DQUxGSUxFIgorKyAgbWtkaXIgLXAgIiRIT01FLy5wb2ludGVyY2FsIgorIGZpCisgCisrZm9yIENBTEZJTEUgaW4gJENBTEZJTEVTOyBkbworKyAgaWYgWyAtZSAkQ0FMRklMRSBdOyB0aGVuCisrICAgIGlmIGdyZXAgcmVwbGFjZSAkQ0FMRklMRSA7IHRoZW4KKysgICAgICBlY2hvICJFbXB0eSBjYWxpYnJhdGlvbiBmaWxlIGZvdW5kLCByZW1vdmluZyBpdCIKKysgICAgICBybSAkQ0FMRklMRSAyPi9kZXYvbnVsbCB8fCB0cnVlCisrICAgIGVsc2UKKysgICAgICBlY2hvICJVc2luZyBjYWxpYnJhdGlvbiBkYXRhIHN0b3JlZCBpbiAkQ0FMRklMRSIKKysgICAgICAuICRDQUxGSUxFICYmIGV4aXQgMAorKyAgICBmaQorKyAgZmkKKytkb25lCisrCisrWyAiJFVTRVIiICE9ICJyb290IiBdICYmIENBTEZJTEU9JFVTRVJfQ0FMRklMRQorKworIENBTERBVEE9YCRCSU5BUlkgLS1vdXRwdXQtdHlwZSB4aW5wdXQgLXYgfCB0ZWUgJExPR0ZJTEUgfCBncmVwICcgICAgeGlucHV0IHNldCcgfCBzZWQgJ3MvXiAgICAvL2c7IHMvJC87L2cnYAorIGlmIFsgISAteiAiJENBTERBVEEiIF0gOyB0aGVuCisgICBlY2hvICRDQUxEQVRBID4gJENBTEZJTEUKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWRlM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYgpAQCAtMCwwICsxLDM3IEBACitTVU1NQVJZID0gIlRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIHByb2dyYW0gZm9yIFgxMSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUveGlucHV0X2NhbGlicmF0b3IiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2NhbGlicmF0b3IuY3BwO2VuZGxpbmU9MjI7bWQ1PTFiY2JhMDhmNjdjZGI1NmYzNDAyMTU1Nzg5OGU0YjVhIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4aSIKKworUFYgPSAiMC43LjUrZ2l0JHtTUkNQVn0iCitQUiA9ICJyNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNSRVYgPSAiYzAxYzVhZjgwN2NiNGIwMTU3Yjg4MmFiMDdhODkzZGY5YTgxMDExMSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS90aWFzL3hpbnB1dF9jYWxpYnJhdG9yLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8zMHhpbnB1dF9jYWxpYnJhdGUuc2ggXAorICAgICAgICAgICBmaWxlOi8vQWxsb3cteGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaC10by1iZS1ydW4tYXMtbi5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBmb3JjZSBuYXRpdmUgWDExIHVpIGFzIHdlIGRvbid0IGhhdmUgZ3RrKyBpbiBERVBFTkRTCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1ndWk9eDExIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2ggJHtEfSR7YmluZGlyfS94aW5wdXRfY2FsaWJyYXRvcl9vbmNlLnNoCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzMweGlucHV0X2NhbGlicmF0ZS5zaCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veGRnL2F1dG9zdGFydAorICAgIHNlZCAtZSAncyxeRXhlYz0uKixFeGVjPSR7YmluZGlyfS94aW5wdXRfY2FsaWJyYXRvcl9vbmNlLnNoLCcgJHtTfS9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yLmRlc2t0b3AgPiAke0R9JHtzeXNjb25mZGlyfS94ZGcvYXV0b3N0YXJ0L3hpbnB1dF9jYWxpYnJhdG9yLmRlc2t0b3AKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0veGRnL2F1dG9zdGFydCIKK1JERVBFTkRTXyR7UE59ID0gInhpbnB1dCBmb3JtZmFjdG9yIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicG9pbnRlcmNhbC14aW5wdXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udGRpcl8xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDUzZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udGRpcl8xLjAuNy5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJBIHByb2dyYW0gdG8gY3JlYXRlIGFuIGluZGV4IG9mIFggZm9udCBmaWxlcyBpbiBhIGRpcmVjdG9yeSIKKworREVTQ1JJUFRJT04gPSAiRm9yIGVhY2ggZGlyZWN0b3J5IGFyZ3VtZW50LCBta2ZvbnRkaXIgcmVhZHMgYWxsIG9mIHRoZSBcCitmb250IGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuIFRoZSBmb250IG5hbWVzIGFuZCByZWxhdGVkIGRhdGEgYXJlIHdyaXR0ZW4gXAorb3V0IHRvIHRoZSBmaWxlcyBcImZvbnRzLmRpclwiLCBcImZvbnRzLnNjYWxlXCIsIGFuZCBcImZvbnRzLmFsaWFzXCIuICBcCitUaGUgWCBzZXJ2ZXIgYW5kIGZvbnQgc2VydmVyIHVzZSB0aGVzZSBmaWxlcyB0byBmaW5kIHRoZSBhdmFpbGFibGUgZm9udCBcCitmaWxlcy4iCisKK1BFID0gIjEiCitQUiA9ICIke0lOQ19QUn0uMCIKKworUkRFUEVORFNfJHtQTn0gKz0gIm1rZm9udHNjYWxlIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlICs9ICJta2ZvbnRzY2FsZS1uYXRpdmUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNGZjZjJiOTBjYWRiZmMxNTAwOWI5ZTEyNGRjM2EzZiIKKworU1JDX1VSSVttZDVzdW1dID0gIjE4YzQyOTE0OGM5NmMyMDc5ZWRkYTkyMmEyYjY3NjMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU2ZDUyYTQ4MmRmMTMwNDg0ZTUxZmQwNjZkMWI2ZWRhN2MyYzAyZGRiYzkxZmU2ZTJiZTFiOWM0ZTczMDY1MzAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRzY2FsZV8xLjEuMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJBIHByb2dyYW0gdG8gY3JlYXRlIGFuIGluZGV4IG9mIHNjYWxhYmxlIGZvbnQgZmlsZXMgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIkZvciBlYWNoIGRpcmVjdG9yeSBhcmd1bWVudCwgbWtmb250c2NhbGUgcmVhZHMgYWxsIG9mIHRoZSBcCitzY2FsYWJsZSBmb250IGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuIEZvciBldmVyeSBmb250IGZpbGUgZm91bmQsIGFuIFgxMSBcCitmb250IG5hbWUgKFhMRkQpIGlzIGdlbmVyYXRlZCwgYW5kIGlzIHdyaXR0ZW4gdG9nZXRoZXIgd2l0aCB0aGUgZmlsZSBcCituYW1lIHRvIGEgZmlsZSBmb250cy5zY2FsZSBpbiB0aGUgZGlyZWN0b3J5LiAgVGhlIHJlc3VsdGluZyBmb250cy5zY2FsZSBcCitpcyB1c2VkIGJ5IHRoZSBta2ZvbnRkaXIgcHJvZ3JhbS4iCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MtbmF0aXZlIHpsaWIgbGliZm9udGVuYyBmcmVldHlwZSB4cHJvdG8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZTBkMTI5ZDA1MzA1MTc2ZDFhNzkwZTBhYzFhY2I3ZiIKKworU1JDX1VSSVttZDVzdW1dID0gIjliZGQ2ZWJmYTYyYjFiYmQ0NzQ5MDZhYzg2YTQwZmQ4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhjNmQ1MjI4YWY4ODU0NzdiOWFlYzYwY2E2ZjE3MjU3OGU3ZDJkZTQyMjM0MzU3YWY2MmZiMDA0Mzk0NTNmMjAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3JnYl8xLjAuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI2ODA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3JnYl8xLjAuNi5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYMTEgY29sb3IgbmFtZSBkYXRhYmFzZSIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyBib3RoIHRoZSBsaXN0IG1hcHBpbmcgWCBjb2xvciBuYW1lcyBcCit0byBSR0IgdmFsdWVzIChyZ2IudHh0KSBhbmQsIGlmIGNvbmZpZ3VyZWQgdG8gdXNlIGEgZGF0YWJhc2UgZm9yIGNvbG9yIFwKK2xvb2t1cCwgdGhlIHJnYiBwcm9ncmFtIHRvIGNvbnZlcnQgdGhlIHRleHQgZmlsZSBpbnRvIHRoZSBiaW5hcnkgZGF0YWJhc2UgXAorZm9ybWF0LiIKKworREVQRU5EUyArPSAiIHhwcm90byB1dGlsLW1hY3JvcyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVmNTk4YWRiZTI0MWJkMGIwYjkxMTM4MzFmNmUyNDlhIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImVhYjViYmQ3NjQyZTVjNzg0NDI5MzA3ZWMyMTBkMTk4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiY2E3YzZhYTU5OTM5YjlmNmEwZmI5ZmZmMTVkZmQ2MjE3NjQyMGZmZDRhZTMwYzhkOTJhNmExMjVmYmU2YjAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94MTFwZXJmXzEuNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3gxMXBlcmZfMS42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5MzU1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94MTFwZXJmXzEuNi4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlgxMSBzZXJ2ZXIgcGVyZm9ybWFuY2UgdGVzdCBwcm9ncmFtIgorCitERVNDUklQVElPTiA9ICJUaGUgeDExcGVyZiBwcm9ncmFtIHJ1bnMgb25lIG9yIG1vcmUgcGVyZm9ybWFuY2UgdGVzdHMgXAorYW5kIHJlcG9ydHMgaG93IGZhc3QgYW4gWCBzZXJ2ZXIgY2FuIGV4ZWN1dGUgdGhlIHRlc3RzLiIKKworCitERVBFTkRTICs9ICJsaWJ4bXUgbGlieHJlbmRlciBsaWJ4ZnQgbGlieGV4dCBmb250Y29uZmlnIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjhjYTRkNjdhNDFmY2Q0ZmMzMjgzZGNlOWJiZGE3ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94MTFwZXJmLmg7ZW5kbGluZT0yNDttZDU9Mjk1NTUwNjZiYWY0MDZhMTA1ZmY5MTdhYzI1YjJkMDEiCisKK1BFID0gIjEiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vWDExL3gxMXBlcmZjb21wLyoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMGIyNGU0ZDhiZWI2MjJhNDE5ZTg0MzFlMWMwM2NkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlODcwOThkZWMxOTQ3NTcyZDcwYzYyNjk3YTdiNzBiZGUxYWI1NjY4MjM3ZDQ2NjAwODBlYWRlNmJjMDk2NzUxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzNmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCitTVU1NQVJZID0gIlggYXV0aG9yaXR5IHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlggYXBwbGljYXRpb24gdG8gZWRpdCBhbmQgZGlzcGxheSB0aGUgYXV0aG9yaXphdGlvbiBcCitpbmZvcm1hdGlvbiB1c2VkIGluIGNvbm5lY3RpbmcgdG8gdGhlIFggc2VydmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWVjNzRkZDdlYTRkMTBjNDcxNWE3YzQ0ZjE1OWE0MGIiCisKK0RFUEVORFMgKz0gImxpYnhhdSBsaWJ4ZXh0IGxpYnhtdSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDYwMDNmMzI4MzhkNWI2ODhlMmM4YTEzMTA4MzI3MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NmNlMTUyM2ViNDhiMWY4YTRmNDI0NGZlMWMzZDhlNmFmMWEzYjdkNGIwZTYwNjM1ODI0MjFiMGI2OGRjMjhmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODE5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm8vZGlzYWJsZS14a2IucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4ZHB5aW5mby0xLjMuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4ZHB5aW5mby0xLjMuMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDExLTEwLTIxIDIxOjM0OjIxLjAwMDAwMDAwMCAtMDcwMAorKysrIHhkcHlpbmZvLTEuMy4wL2NvbmZpZ3VyZS5hYwkyMDExLTExLTI4IDIwOjA2OjU2LjU1NDA1NjkzNSAtMDgwMAorQEAgLTQ3LDExICs0NywxNSBAQAorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9tdWx0aWJ1Zi5oIFgxMS9leHRlbnNpb25zL1hTaG0uaF0sLCxbI2luY2x1ZGUgPFgxMS9YbGliLmg+XSkKKyAJQ1BQRkxBR1M9IiRTQVZFX0NQUEZMQUdTIl0sW2VjaG8gIm5vdCBmb3VuZCJdKQorIAorK0FDX0FSR19FTkFCTEUoeGtiLCBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXhrYl0sIFtEaXNhYmxlIFhLQiBzdXBwb3J0XSksCisrCVhLQj0iJGVuYWJsZXZhbCIsIFhLQj0ieWVzIikKKytpZiB0ZXN0ICJ4JFhLQiIgPSAieHllcyIgOyB0aGVuCisgUEtHX0NIRUNLX01PRFVMRVMoRFBZX1hLQiwgeDExLAorIAlbU0FWRV9DUFBGTEFHUz0iJENQUEZMQUdTIgorIAlDUFBGTEFHUz0iJENQUEZMQUdTICREUFlfWEtCX0NGTEFHUyAkRFBZX1gxMV9DRkxBR1MiCisgCUFDX0NIRUNLX0hFQURFUlMoW1gxMS9leHRlbnNpb25zL1hLQi5oIFgxMS9YS0JsaWIuaF0sLCxbI2luY2x1ZGUgPFgxMS9YbGliLmg+XSkKKyAJQ1BQRkxBR1M9IiRTQVZFX0NQUEZMQUdTIl0sW2VjaG8gIm5vdCBmb3VuZCJdKQorK2ZpCisgCisgUEtHX0NIRUNLX01PRFVMRVMoRFBZX1hGODZWSURNT0RFLCB4eGY4NnZtLAorIAlbU0FWRV9DUFBGTEFHUz0iJENQUEZMQUdTIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDRiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm9fMS4zLjIuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRGlzcGxheSBpbmZvcm1hdGlvbiB1dGlsaXR5IGZvciBYIgorCitERVNDUklQVElPTiA9ICJYZHB5aW5mbyBpcyBhIHV0aWxpdHkgZm9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgYW4gXAorWCBzZXJ2ZXIuIEl0IGlzIHVzZWQgdG8gZXhhbWluZSB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgc2VydmVyLCB0aGUgXAorcHJlZGVmaW5lZCB2YWx1ZXMgZm9yIHZhcmlvdXMgcGFyYW1ldGVycyB1c2VkIGluIGNvbW11bmljYXRpbmcgYmV0d2VlbiBcCitjbGllbnRzIGFuZCB0aGUgc2VydmVyLCBhbmQgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBzY3JlZW5zIGFuZCB2aXN1YWxzIFwKK3RoYXQgYXJlIGF2YWlsYWJsZS4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYzZDA5ZTZiOWUyMDNhMWFmNDg5ZTE2YzcwOGY0ZmIzIgorREVQRU5EUyArPSAibGlieHRzdCBsaWJ4ZXh0IGxpYnh4Zjg2dm0gbGlieHhmODZkZ2EgbGlieHhmODZtaXNjIGxpYnhpIGxpYnhyZW5kZXIgbGlieGluZXJhbWEgbGliZG14IGxpYnhhdSBsaWJ4Y29tcG9zaXRlIgorUEUgPSAiMSIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGUteGtiLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODgwOTAzN2JkNDg1OTlhZjU1ZGFkODFjNTA4YjZiMzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzAyMzhlZDkxNTYxOWUwNmNlYjQxNzIxZTVmNzQ3ZDY3MzIwNTU1Y2MzOGQ0NTllOTU0ODM5YzE4OWNjYWY1MSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS14a2IiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldi9kaWV0LXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTMwOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldi9kaWV0LXgxMS5wYXRjaApAQCAtMCwwICsxLDgyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworLS0tCisgeGV2LmMgfCAgIDE2ICsrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogeGV2LTEuMi4wL3hldi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGV2LTEuMi4wLm9yaWcveGV2LmMKKysrKyB4ZXYtMS4yLjAveGV2LmMKK0BAIC0xMTYsNyArMTE2LDcgQEAgZG9fS2V5UHJlc3MgKFhFdmVudCAqZXZlbnRwKQorICAgICBuYnl0ZXMgPSBYTG9va3VwU3RyaW5nIChlLCBzdHIsIDI1NiwgJmtzLCBOVUxMKTsKKyAKKyAgICAgLyogbm90IHN1cHBvc2VkIHRvIGNhbGwgWG1iTG9va3VwU3RyaW5nIG9uIGEga2V5IHJlbGVhc2UgZXZlbnQgKi8KKy0gICAgaWYgKGUtPnR5cGUgPT0gS2V5UHJlc3MgJiYgeGljKSB7CisrICAgIC8qaWYgKGUtPnR5cGUgPT0gS2V5UHJlc3MgJiYgeGljKSB7CisgICAgICAgICBkbyB7CisgICAgICAgICAgICAgbm1iYnl0ZXMgPSBYbWJMb29rdXBTdHJpbmcgKHhpYywgZSwgYnVmLCBic2l6ZSAtIDEsICZrcywgJnN0YXR1cyk7CisgICAgICAgICAgICAgYnVmW25tYmJ5dGVzXSA9ICdcMCc7CitAQCAtMTI2LDcgKzEyNiw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgICAgICAgICAgICAgYnVmID0gcmVhbGxvYyAoYnVmLCBic2l6ZSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgfSB3aGlsZSAoc3RhdHVzID09IFhCdWZmZXJPdmVyZmxvdyk7CistICAgIH0KKysgICAgfSovCisgCisgICAgIGlmIChrcyA9PSBOb1N5bWJvbCkKKyAJa3NuYW1lID0gIk5vU3ltYm9sIjsKK0BAIC0xNTYsNyArMTU2LDcgQEAgZG9fS2V5UHJlc3MgKFhFdmVudCAqZXZlbnRwKQorICAgICB9CisgCisgICAgIC8qIG5vdCBzdXBwb3NlZCB0byBjYWxsIFhtYkxvb2t1cFN0cmluZyBvbiBhIGtleSByZWxlYXNlIGV2ZW50ICovCistICAgIGlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworKyAgICAvKmlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworICAgICAgICAgcHJpbnRmICgiICAgIFhtYkxvb2t1cFN0cmluZyBnaXZlcyAlZCBieXRlczogIiwgbm1iYnl0ZXMpOworICAgICAgICAgaWYgKG5tYmJ5dGVzID4gMCkgeworICAgICAgICAgICAgZHVtcCAoYnVmLCBubWJieXRlcyk7CitAQCAtMTY0LDcgKzE2NCw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgICAgIH0gZWxzZSB7CisgICAgIAkgICBwcmludGYgKCJcbiIpOworICAgICAgICAgfQorLSAgICB9CisrICAgIH0gKi8KKyAKKyAgICAgcHJpbnRmICgiICAgIFhGaWx0ZXJFdmVudCByZXR1cm5zOiAlc1xuIiwKKyAJICAgIFhGaWx0ZXJFdmVudCAoZXZlbnRwLCBlLT53aW5kb3cpID8gIlRydWUiIDogIkZhbHNlIik7CitAQCAtMTAxNSw3ICsxMDE1LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICBYU2V0TG9jYWxlTW9kaWZpZXJzIGZhaWxlZFxuIiwgUHJvZ3JhbU5hbWUpOworICAgICB9CisgCistICAgIHhpbSA9IFhPcGVuSU0gKGRweSwgTlVMTCwgTlVMTCwgTlVMTCk7CisrICAgIC8qeGltID0gWE9wZW5JTSAoZHB5LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgaWYgKHhpbSA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIFhPcGVuSU0gZmFpbGVkXG4iLCBQcm9ncmFtTmFtZSk7CisgICAgIH0KK0BAIC0xMDQyLDcgKzEwNDIsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIFhGcmVlICh4aW1fc3R5bGVzKTsKKyAgICAgICAgIH0KKy0gICAgfQorKwl9Ki8KKyAKKyAgICAgc2NyZWVuID0gRGVmYXVsdFNjcmVlbiAoZHB5KTsKKyAKK0BAIC0xMTA5LDcgKzExMDksNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXByaW50ZiAoIk91dGVyIHdpbmRvdyBpcyAweCVseCwgaW5uZXIgd2luZG93IGlzIDB4JWx4XG4iLCB3LCBzdWJ3KTsKKyAgICAgfQorIAorLSAgICBpZiAoeGltICYmIHhpbV9zdHlsZSkgeworKyAgICAvKmlmICh4aW0gJiYgeGltX3N0eWxlKSB7CisgICAgICAgICB4aWMgPSBYQ3JlYXRlSUMgKHhpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE5JbnB1dFN0eWxlLCB4aW1fc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhOQ2xpZW50V2luZG93LCB3LAorQEAgLTExMTksNyArMTExOSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIGlmICh4aWMgPT0gTlVMTCkgeworICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlhDcmVhdGVJQyBmYWlsZWRcbiIpOworICAgICAgICAgfQorLSAgICB9CisrICAgIH0qLworIAorICAgICBoYXZlX3JyID0gWFJSUXVlcnlFeHRlbnNpb24gKGRweSwgJnJyX2V2ZW50X2Jhc2UsICZycl9lcnJvcl9iYXNlKTsKKyAgICAgaWYgKGhhdmVfcnIpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2XzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTFiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2XzEuMi4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlggRXZlbnQgVmlld2VyIgorREVTQ1JJUFRJT04gPSAiWGV2IGNyZWF0ZXMgYSB3aW5kb3cgYW5kIHRoZW4gYXNrcyB0aGUgWCBzZXJ2ZXIgdG8gc2VuZCBpdCBldmVudHMgXAord2hlbmV2ZXIgYW55dGhpbmcgaGFwcGVucyB0byB0aGUgd2luZG93IChzdWNoIGFzIGl0IGJlaW5nIG1vdmVkLCByZXNpemVkLCBcCit0eXBlZCBpbiwgY2xpY2tlZCBpbiwgZXRjLikuIFlvdSBjYW4gYWxzbyBhdHRhY2ggaXQgdG8gYW4gZXhpc3Rpbmcgd2luZG93LiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGV2LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0zMzttZDU9NTc3Yzk5NDIxZjE4MDNiODkxZDJjNzkwOTdhZTQ2ODIiCitMSUNFTlNFID0gIk1JVCIKKworUEUgPSAiMSIKKworREVQRU5EUyArPSAibGlieHJhbmRyIHhwcm90byIKKworU1JDX1VSSSArPSAiZmlsZTovL2RpZXQteDExLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjQ5YmRkZTkwZjAxYzBkODYxYWY1MmRjOGZlYzM3OWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDk0YWU2MmE2YzFhZjU2YzI5NjFkNzFmNTc4MjA3NmFjNDExNmYwZmE0ZTQwMTQyMGFjN2UwZGIzM2RjMzE0ZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQwY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hleWVzXzEuMS4xLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlgxMSBleWVzIHRoYXQgZm9sbG93IHRoZSBtb3VzZSBjdXJzb3IgZGVtbyIKK0RFU0NSSVBUSU9OID0gIlhleWVzIGlzIGEgc21hbGwgWDExIGFwcGxpY2F0aW9uIHRoYXQgc2hvd3MgYSBwYWlyIG9mIGV5ZXMgdGhhdCBtb3ZlIHRvIFwKK2ZvbGxvdyB0aGUgbG9jYXRpb24gb2YgdGhlIG1vdXNlIGN1cnNvciBhcm91bmQgdGhlIHNjcmVlbi4iCisKK1BFID0gIjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNlYTUxYjM2NTA1MWFjMzJkMTgxM2E3ZGJhYTRiZmM2IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTMwMzVkY2VjZGJkYjg5ZTg2NDE3N2MwODA5MjQ5ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTc1ZTk4NjgwY2Q1OWUxZjk0MzkwMTYzODY2MDk1NDZlZDA4YzI4NGQwZjA1YTk1Mjc2Zjk2YWNhNmU4YTUyMSIKKworREVQRU5EUyArPSAibGlieGF1IGxpYnh0IGxpYnhleHQgbGlieG11IGxpYnhyZW5kZXIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1NzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJTZXJ2ZXIgYWNjZXNzIGNvbnRyb2wgcHJvZ3JhbSBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhob3N0IHByb2dyYW0gaXMgdXNlZCB0byBhZGQgYW5kIGRlbGV0ZSBob3N0IG5hbWVzIG9yIFwKK3VzZXIgbmFtZXMgdG8gdGhlIGxpc3QgYWxsb3dlZCB0byBtYWtlIGNvbm5lY3Rpb25zIHRvIHRoZSBYIHNlcnZlci4gSW4gXAordGhlIGNhc2Ugb2YgaG9zdHMsIHRoaXMgcHJvdmlkZXMgYSBydWRpbWVudGFyeSBmb3JtIG9mIHByaXZhY3kgY29udHJvbCBcCithbmQgc2VjdXJpdHkuIEVudmlyb25tZW50cyB3aGljaCByZXF1aXJlIG1vcmUgc29waGlzdGljYXRlZCBtZWFzdXJlcyBcCitzaG91bGQgaW1wbGVtZW50IHRoZSB1c2VyLWJhc2VkIG1lY2hhbmlzbSBvciB1c2UgdGhlIGhvb2tzIGluIHRoZSBcCitwcm90b2NvbCBmb3IgcGFzc2luZyBvdGhlciBhdXRoZW50aWNhdGlvbiBkYXRhIHRvIHRoZSBzZXJ2ZXIuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04ZmJlZDcxZGRkZjQ4NTQxODE4Y2VmODA3OTEyNDE5OSIKK0RFUEVORFMgKz0gImxpYnhtdSBsaWJ4YXUiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjVkNDkwNzM4YjE0OGNiN2YyZmU3NjBmNDBmOTI1MTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTNlNjE5ZWUxNTQ3MWY1NzZjZmIzMGM2NjNlMThmNWJjNzBhY2E1NzdhNjNkMmMyYzAzZjAwNmE3ODM3YzI5YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE4NTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbml0XzEuMy40LmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlggV2luZG93IFN5c3RlbSBpbml0aWFsaXplciIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhpbml0IHByb2dyYW0gaXMgdXNlZCB0byBzdGFydCB0aGUgWCBXaW5kb3cgU3lzdGVtIFwKK3NlcnZlciBhbmQgYSBmaXJzdCBjbGllbnQgcHJvZ3JhbSBvbiBzeXN0ZW1zIHRoYXQgY2Fubm90IHN0YXJ0IFggXAorZGlyZWN0bHkgZnJvbSAvZXRjL2luaXQgb3IgaW4gZW52aXJvbm1lbnRzIHRoYXQgdXNlIG11bHRpcGxlIHdpbmRvdyBcCitzeXN0ZW1zLiBXaGVuIHRoaXMgZmlyc3QgY2xpZW50IGV4aXRzLCB4aW5pdCB3aWxsIGtpbGwgdGhlIFggc2VydmVyIGFuZCBcCit0aGVuIHRlcm1pbmF0ZS4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ZjAxZTdiMzk4MDdiZWJlMmI4ZGYxMDFhMDM5YjY4IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGU5Mjg0NTJkZmFmNzM4NTE0MTNhMmQ4YjhjNzYzODgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzVkODhkNzM5N2EwN2UwMWRiMjUzMTYzYjdjN2EwMGIyNDliM2QzMGU5OTQ4OWYyNzM0Y2FjOWEwYzc5MDJiMyIKKworRVhUUkFfT0VDT05GID0gImFjX2N2X3BhdGhfTUNPT0tJRT0ke2JpbmRpcn0vbWNvb2tpZSIKKworUkRFUEVORFNfJHtQTn0gKz0gInV0aWwtbGludXgtbWNvb2tpZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGlucHV0XzEuNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZWZjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGlucHV0XzEuNi4xLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlJ1bnRpbWUgY29uZmlndXJhdGlvbiBhbmQgdGVzdCBvZiBYSW5wdXQgZGV2aWNlcyIKKworREVTQ1JJUFRJT04gPSAiWGlucHV0IGlzIGFuIHV0aWxpdHkgZm9yIGNvbmZpZ3VyaW5nIGFuZCB0ZXN0aW5nIFhJbnB1dCBkZXZpY2VzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04ODE1MjVmODlmOTljYWQzOWM5ODMyYmNiNzJlNmZhNSIKKworREVQRU5EUyArPSAiIGxpYnhpIGxpYnhyYW5kciBsaWJ4aW5lcmFtYSIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiMzA1OTgwYWM3OGE2OTU0ZTMwNmExNGQ4MGE1NGM0NDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjc2MzJkMGYyMjhhOGE2YmU5M2IwOTg1N2VhNDEzOTQwZmNmNDQwOTFlNjBmNGEwZmU5ZjVmZDgyZWZkODcxZiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS4zLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGtiY29tcF8xLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFjMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS4zLjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNvbXBpbGUgWEtCIGtleWJvYXJkIGRlc2NyaXB0aW9uIgorCitERVNDUklQVElPTiA9ICJUaGUgeGtiY29tcCBrZXltYXAgY29tcGlsZXIgY29udmVydHMgYSBkZXNjcmlwdGlvbiBvZiBhbiBcCitYS0Iga2V5bWFwIGludG8gb25lIG9mIHNldmVyYWwgb3V0cHV0IGZvcm1hdHMuIFRoZSBtb3N0IGNvbW1vbiB1c2UgZm9yIFwKK3hrYmNvbXAgaXMgdG8gY3JlYXRlIGEgY29tcGlsZWQga2V5bWFwIGZpbGUgKC54a20gZXh0ZW5zaW9uKSB3aGljaCBjYW4gXAorYmUgcmVhZCBkaXJlY3RseSBieSBYS0ItY2FwYWJsZSBYIHNlcnZlcnMgb3IgdXRpbGl0aWVzLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDg0MzZlNGY0NDc2OTY0ZTJlMmRkN2U3ZTQxZTA3NmEiCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCitERVBFTkRTICs9ICJsaWJ4a2JmaWxlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwMTJhOGUzMDkyY2RkZjdmODdiMjUwZjk2YmIzOGM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmYWM5NzM3NzhmYWJmNTIxNjEyMWFkNjBiN2FmOGFiNzRjZTc1MTNhZjBmOTI2MGNmOGM1MzA5ZTE2MjJiMmEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG1vZG1hcF8xLjAuOS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94bW9kbWFwXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZWFjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG1vZG1hcF8xLjAuOS5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJVdGlsaXR5IGZvciBtb2RpZnlpbmcga2V5bWFwcyBhbmQgcG9pbnRlciBidXR0b24gbWFwcGluZ3MgaW4gWCIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhtb2RtYXAgcHJvZ3JhbSBpcyB1c2VkIHRvIGVkaXQgYW5kIGRpc3BsYXkgdGhlIFwKK2tleWJvYXJkIG1vZGlmaWVyIG1hcCBhbmQga2V5bWFwIHRhYmxlIHRoYXQgYXJlIHVzZWQgYnkgY2xpZW50IFwKK2FwcGxpY2F0aW9ucyB0byBjb252ZXJ0IGV2ZW50IGtleWNvZGVzIGludG8ga2V5c3ltcy4gSXQgaXMgdXN1YWxseSBydW4gXAorZnJvbSB0aGUgdXNlcidzIHNlc3Npb24gc3RhcnR1cCBzY3JpcHQgdG8gY29uZmlndXJlIHRoZSBrZXlib2FyZCBcCithY2NvcmRpbmcgdG8gcGVyc29uYWwgdGFzdGVzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzJjMTdlOTYzNzBlMWU3NDc3M2ZhMjJkOTk4OTYyMSIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjcyM2YwMmQzYTVmOTg0NTA1NTQ1NTYyMDVmMGE5NDk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3YjBlNWNjNWYxMGQwZmI2ZDJkNmVhNGYwMGM3N2U4YWMwZTg0N2NjNWE3M2JlOTRjZDg2MTM5YWM0YWM0NzgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG9yZy1hcHAtY29tbW9uLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94b3JnLWFwcC1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjljYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG9yZy1hcHAtY29tbW9uLmluYwpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlggYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExL2FwcHMiCitMSUNFTlNFID0gIk1JVC1YIgorREVQRU5EUyA9ICJ1dGlsLW1hY3Jvcy1uYXRpdmUgdmlydHVhbC9saWJ4MTEiCisKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworSU5DX1BSID0gInI4IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvYXBwLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIgJHtsaWJkaXJ9L1gxMS8ke0JQTn0gJHtkYXRhZGlyfS9YMTEvYXBwLWRlZmF1bHRzLyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cHJvcF8xLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cHJvcF8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzhiZjA0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHByb3BfMS4yLjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVXRpbGl0eSB0byBkaXNwbGF5IHdpbmRvdyBhbmQgZm9udCBwcm9wZXJ0aWVzIG9mIGFuIFggc2VydmVyIgorCitERVNDUklQVElPTiA9ICJUaGUgeHByb3AgdXRpbGl0eSBpcyBmb3IgZGlzcGxheWluZyB3aW5kb3cgYW5kIGZvbnQgXAorcHJvcGVydGllcyBpbiBhbiBYIHNlcnZlci4gT25lIHdpbmRvdyBvciBmb250IGlzIHNlbGVjdGVkIHVzaW5nIHRoZSBcCitjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9yIHBvc3NpYmx5IGluIHRoZSBjYXNlIG9mIGEgd2luZG93LCBieSBjbGlja2luZyBcCitvbiB0aGUgZGVzaXJlZCB3aW5kb3cuIEEgbGlzdCBvZiBwcm9wZXJ0aWVzIGlzIHRoZW4gZ2l2ZW4sIHBvc3NpYmx5IHdpdGggXAorZm9ybWF0dGluZyBpbmZvcm1hdGlvbi4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUyMjZhYjhkYjg4YWMwYmMwMzkxNjczYmU0MGM5ZjkxIgorCitERVBFTkRTICs9ICJsaWJ4bXUiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYWUzZDJmZGEwNzY4NDAyN2E2NDNjYTc4M2Q1OTVjYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YmVlODhiMTAyNTg2NWFkMTIxZjcyZDMyNTc2ZGQzMDI3YWYxNDQ2Nzc0YWE4MzAwY2NlM2MyNjFkODY5YmM2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiZDQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJhbmRSOiBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbiBjb21tYW5kIgorCitERVNDUklQVElPTiA9ICJYcmFuZHIgaXMgdXNlZCB0byBzZXQgdGhlIHNpemUsIG9yaWVudGF0aW9uIGFuZC9vciBcCityZWZsZWN0aW9uIG9mIHRoZSBvdXRwdXRzIGZvciBhIHNjcmVlbi4gSXQgY2FuIGFsc28gc2V0IHRoZSBzY3JlZW4gXAorc2l6ZS4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmUxNjA4YmRiMzNjZjhjNjJhNDQzOGY3ZDM0Njc5YjMiCitERVBFTkRTICs9ICJsaWJ4cmFuZHIgbGlieHJlbmRlciIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NDFmZGI5OGQyYWJjNjA1MTEwOGI3MDc1ZDk0OGZjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MTU0YWMzNDg2Yjg2OTIzNjkyZjJkNmNkYjI5OTFhMmVlNzJiYzMyYWYyYzQzNzlhNmYxYzA2OGYyMDRiZTFiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXQvZGlzYWJsZS14a2IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldC9kaXNhYmxlLXhrYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QxM2EzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXQvZGlzYWJsZS14a2IucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorYWRkICItZGlzYWJsZS14a2IiIG9wdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUmViYXNlIGZvciAxLjIuMSBieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggODFjM2FlNC4uMjY2MDFiZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTIsMTEgKzUyLDE1IEBAIFBLR19DSEVDS19NT0RVTEVTKFNFVF9YRVhULCB4ZXh0LAorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9kcG1zLmggWDExL2V4dGVuc2lvbnMvTUlUTWlzYy5oXSwsLFsjaW5jbHVkZSA8WDExL1hsaWIuaD5dKQorIAlDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiXSxbZWNobyAibm90IGZvdW5kIl0pCisgCisrQUNfQVJHX0VOQUJMRSh4a2IsIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUteGtiXSwgW0Rpc2FibGUgWEtCIHN1cHBvcnRdKSwKKysJCVhLQj0iJGVuYWJsZXZhbCIsIFhLQj0ieWVzIikKKytpZiB0ZXN0ICJ4JFhLQiIgPSAieHllcyIgOyB0aGVuCisgUEtHX0NIRUNLX01PRFVMRVMoU0VUX1hLQiwgeDExLAorIAlbU0FWRV9DUFBGTEFHUz0iJENQUEZMQUdTIgorIAlDUFBGTEFHUz0iJENQUEZMQUdTICRTRVRfWEtCX0NGTEFHUyAkU0VUX1gxMV9DRkxBR1MiCisgCUFDX0NIRUNLX0hFQURFUlMoW1gxMS9YS0JsaWIuaF0sLCxbI2luY2x1ZGUgPFgxMS9YbGliLmg+XSkKKyAJQ1BQRkxBR1M9IiRTQVZFX0NQUEZMQUdTIl0sW2VjaG8gIm5vdCBmb3VuZCJdKQorK2ZpCisgCisgQUNfQVJHX1dJVEgoeGY4Nm1pc2MsIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQteGY4Nm1pc2NdLFtEaXNhYmxlIHhmODZtaXNjIHN1cHBvcnQuXSksCisgICAgICAgICAgICAgICAgIFtVU0VfWEY4Nk1JU0M9IiR3aXRodmFsIl0sIFtVU0VfWEY4Nk1JU0M9InllcyJdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXRfMS4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldF8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjgzYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXRfMS4yLjMuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3Igc2V0dGluZyB2YXJpb3VzIHVzZXIgcHJlZmVyZW5jZSBvcHRpb25zIG9mIHRoZSBkaXNwbGF5IgorCitERVNDUklQVElPTiA9ICJ4c2V0IGlzIGEgdXRpbGl0eSB0aGF0IGlzIHVzZWQgdG8gc2V0IHZhcmlvdXMgdXNlciBcCitwcmVmZXJlbmNlIG9wdGlvbnMgb2YgdGhlIGRpc3BsYXkuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJlYTgxY2M5ODI3Y2RmMWFmMGUxMmMyYjgyMjhjZjhkIgorREVQRU5EUyArPSAibGlieGV4dCBsaWJ4eGY4Nm1pc2MgbGlieG11IGxpYnhhdSIKK1BFID0gIjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXhrYi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImRjZDIyNzM4OGI1NzQ4N2Q1NDNjYWIyZmQ3YTYwMmQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQzODJmNGZiMjliODg2NDdlMTNmM2I0YmMyOTI2MzEzNDI3MDc0N2ZjMTU5Y2ZjNWY3ZTNhZjIzNTg4YzgwNjMiCisKK0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUteGtiIC0td2l0aG91dC1mb250Y2FjaGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHZpbmZvXzEuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h2aW5mb18xLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTY1ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h2aW5mb18xLjEuMy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJQcmludCBvdXQgWC1WaWRlbyBleHRlbnNpb24gYWRhcHRvciBpbmZvcm1hdGlvbiIKKworREVTQ1JJUFRJT04gPSAieHZpbmZvIHByaW50cyBvdXQgdGhlIGNhcGFiaWxpdGllcyBvZiBhbnkgdmlkZW8gYWRhcHRvcnMgXAorYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5IHRoYXQgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgWC1WaWRlbyBcCitleHRlbnNpb24uIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNjY0MTAxYWQ3YTFkYzc1OGE0YzQxMDliZjk3OGU2OCIKK0RFUEVORFMgKz0gIiBsaWJ4diIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NTgzNjAxNzZiNzE4ZGVlM2MzOWJjMDY0OGMwZDEwYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZmJhOGI2OGRhZjUzODYzZTY2ZDUwMDRmYTljNzAzZmNlY2Y2OWRiNGQxNTFlYTJkM2Q4ODVkNjIxZTZlNWViIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDUyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHdpbmluZm9fMS4xLjMuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiV2luZG93IGluZm9ybWF0aW9uIHV0aWxpdHkgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIlh3aW5pbmZvIGlzIGEgdXRpbGl0eSBmb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCBcCit3aW5kb3dzLiAgSW5mb3JtYXRpb24gbWF5IGluY2x1ZGUgd2luZG93IHBvc2l0aW9uLCBzaXplLCBjb2xvciBkZXB0aCwgXAorYW5kIGEgbnVtYmVyIG9mIG90aGVyIGl0ZW1zLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Nzg5NzZjZDMxMTVmNmZhZjYxNWFjY2M0ZTA5NGQ5MGUiCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnhtdSIKKworUEUgPSAiMCIKKworU1JDX1VSSVttZDVzdW1dID0gImI3NzdiYWZiNjc0NTU1ZTQ4ZmQ4NDM3NjE4MjcwOTMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIxOGViMGVhOTViZDhkZTc5MDNkZmFhMjY0MjM4MjBjNTIzYWQxNTk4YmUwNzUxZDJkOGI2YTJjMjNiMjNmZjgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjkuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuOS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NDI4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjkuMi5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGV2ZW50IGRldmljZXMgKGV2ZGV2KSBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImV2ZGV2IGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBMaW51eCdzIGdlbmVyaWMgZXZlbnQgXAorZGV2aWNlcy4gSXQgdGhlcmVmb3JlIHN1cHBvcnRzIGFsbCBpbnB1dCBkZXZpY2VzIHRoYXQgdGhlIGtlcm5lbCBrbm93cyBcCithYm91dCwgaW5jbHVkaW5nIG1vc3QgbWljZSBhbmQga2V5Ym9hcmRzLiBcCitcCitUaGUgZXZkZXYgZHJpdmVyIGNhbiBzZXJ2ZSBhcyBib3RoIGEgcG9pbnRlciBhbmQgYSBrZXlib2FyZCBpbnB1dCBcCitkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyBib3RoIHRoZSBjb3JlIGtleWJvYXJkIGFuZCB0aGUgY29yZSBwb2ludGVyLiBcCitNdWx0aXBsZSBpbnB1dCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLCB3aXRoIG9uZSBMb2FkIGRpcmVjdGl2ZSBmb3IgZXZkZXYgaW4gdGhlIE1vZHVsZSBzZWN0aW9uIG9mIHlvdXIgXAoreG9yZy5jb25mIGZvciBlYWNoIGlucHV0IGRldmljZSB0aGF0IHdpbGwgdXNlIHRoaXMgZHJpdmVyLiAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlZmUzM2IxY2YwY2FjYmEwZTcyZTNiMGZhMGYwZTE2IgorCitERVBFTkRTICs9ICJtdGRldiBsaWJldmRldiIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5ZWViZjE3MWU2YzdiZmZjNDJkNGZjNDMwZDQ3NDU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5MjMyOWI1MzFhZmM2OTI4Y2NkYTk0ZTRiNTFhNTUyMGQ0ZGRmOGVmOWEwMDg5MGE1ZDBkMzE4OThhY2VmZWMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF8xLjguMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkXzEuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTUxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF8xLjguMS5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGtleWJvYXJkIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAia2V5Ym9hcmQgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIGtleWJvYXJkcy4gVGhlIFwKK2RyaXZlciBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgT1MtcHJvdmlkZWQga2V5Ym9hcmQgaW50ZXJmYWNlLiAgVGhlIGRyaXZlciBcCitmdW5jdGlvbnMgYXMgYSBrZXlib2FyZCBpbnB1dCBkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyB0aGUgWCBzZXJ2ZXIncyBcCitjb3JlIGtleWJvYXJkLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWEyMDk5ZDI0YWM5ZTMxNmE2ZDRiOWYyMGIzZDRlMTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NmNjYzQzZDM4OWI5NzBhZmJkMzg5Mzg3NWRmZDY3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYWM4ZmYzOWJmOWRhN2QyZmM3ZmQ2YzI0NTE1NzI2ZTgxMzgzNDBjMDUxOGFiOGM2MDZlMDA4Y2Y5M2NhMjExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjA4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF9naXQuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBrZXlib2FyZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImtleWJvYXJkIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBrZXlib2FyZHMuIFRoZSBcCitkcml2ZXIgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIE9TLXByb3ZpZGVkIGtleWJvYXJkIGludGVyZmFjZS4gIFRoZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEga2V5Ym9hcmQgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBrZXlib2FyZC4iCisKK1NSQ1JFViA9ICIzZTI4ZDY4YjUwZDI5MTkzODczNGU5Njg0YjgyOTZjYTg2NGYzODkyIgorUFYgPSAiMS4zLjIrZ2l0JHtTUkNQVn0iCitQUiA9ICIke0lOQ19QUn0uMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZCIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlL3VuYnJlYWsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZS91bmJyZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzA4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZS91bmJyZWFrLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1VuYnJlYWsgdGhlIGxpbnV4IG1vdXNlIGRyaXZlciBieSB1c2luZyBjb25maWcuaAorCitSUCAtIDQvMTEvMDcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvc3JjL2xueF9tb3VzZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2xueF9tb3VzZS5jCTIwMDgtMTEtMDQgMjM6NDY6MDUuMDAwMDAwMDAwICswMDAwCisrKysgZ2l0L3NyYy9sbnhfbW91c2UuYwkyMDA4LTExLTA0IDIzOjQ2OjE1LjAwMDAwMDAwMCArMDAwMAorQEAgLTMsOCArMyw4IEBACisgICogQ29weXJpZ2h0IDE5OTkgYnkgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorICAqLworIAorLSNpZmRlZiBIQVZFX1hPUkdfQ09ORklHX0gKKy0jaW5jbHVkZSA8eG9yZy1jb25maWcuaD4KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8WDExL1guaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlXzEuOS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfMS45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwYjc4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlXzEuOS4xLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gbW91c2UgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJtb3VzZSBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgbWljZS4gVGhlIGRyaXZlciBcCitzdXBwb3J0cyBtb3N0IGF2YWlsYWJsZSBtb3VzZSB0eXBlcyBhbmQgaW50ZXJmYWNlcy4gIFRoZSBtb3VzZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEgcG9pbnRlciBpbnB1dCBkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyB0aGUgWCBzZXJ2ZXIncyBcCitjb3JlIHBvaW50ZXIuIE11bHRpcGxlIG1pY2UgYXJlIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBcCitkcml2ZXIuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05MGVhOWY5MGQ3MmI2ZDkzMjdkZWRlNWZmZGIyYTUxMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjc3MDg1YjY0OWM1YzBiMzMzNTY1YmE1NjJmNTczOTUxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM0ODVkMzc1Nzc5YzA4NDA2ZjA3ODlmZWVkZGUxNTkzM2RjNzAzMTU4YTA4NmRkYWM2Mzg1OThmNDc5ZmM1Y2UiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzlhMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gbW91c2UgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJtb3VzZSBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgbWljZS4gVGhlIGRyaXZlciBcCitzdXBwb3J0cyBtb3N0IGF2YWlsYWJsZSBtb3VzZSB0eXBlcyBhbmQgaW50ZXJmYWNlcy4gIFRoZSBtb3VzZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEgcG9pbnRlciBpbnB1dCBkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyB0aGUgWCBzZXJ2ZXIncyBcCitjb3JlIHBvaW50ZXIuIE11bHRpcGxlIG1pY2UgYXJlIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBcCitkcml2ZXIuIgorCitTUkNSRVYgPSAiZWE1Y2ZlODA0ZTExMmYzMjBmMTRhZDg5NmM3ODAyZDUzNTUxZDNlNiIKK1BWID0gIjEuMy4wK2dpdCR7U1JDUFZ9IgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvZHJpdmVyL3hmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICBmaWxlOi8vdW5icmVhay5wYXRjaCIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMxMjJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzXzEuOC4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gc3luYXB0aWNzIHRvdWNocGFkIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAic3luYXB0aWNzIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciB0aGUgdG91Y2hwYWRzIGZyb20gXAorU3luYXB0aWNzIEluY29ycG9yYXRlZC4gRXZlbiB0aG91Z2ggdGhlc2UgdG91Y2hwYWRzIChieSBkZWZhdWx0LCBcCitvcGVyYXRpbmcgaW4gYSBjb21wYXRpYmlsaXR5IG1vZGUgZW11bGF0aW5nIGEgc3RhbmRhcmQgbW91c2UpIGNhbiBiZSBcCitoYW5kbGVkIGJ5IHRoZSBub3JtYWwgZXZkZXYgb3IgbW91c2UgZHJpdmVycywgdGhpcyBkcml2ZXIgYWxsb3dzIG1vcmUgXAorYWR2YW5jZWQgZmVhdHVyZXMgb2YgdGhlIHRvdWNocGFkIHRvIGJlY29tZSBhdmFpbGFibGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWFhY2QzNTM1YTc0MTgyNDk1NWM1ZWI4ZjA2MTM5OCIKKworU1JDX1VSSVttZDVzdW1dID0gIjhlZDY4ZThjYzY3NGRkNjFhZGIyODA3MDQ3NjRhYWZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiMGUxNjRlYmQwMmE2ODBlMGM2OTU5NTVlNzgzMDU5ZjM3ZWRiMGMyNjU2Mzk4ZTBhOTcyYWRjOGU2OThjODAiCisKK0RFUEVORFMgKz0gImxpYnhpIG10ZGV2IGxpYnh0c3QgbGliZXZkZXYiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MGY2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gc3luYXB0aWNzIHRvdWNocGFkIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAic3luYXB0aWNzIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciB0aGUgdG91Y2hwYWRzIGZyb20gXAorU3luYXB0aWNzIEluY29ycG9yYXRlZC4gRXZlbiB0aG91Z2ggdGhlc2UgdG91Y2hwYWRzIChieSBkZWZhdWx0LCBcCitvcGVyYXRpbmcgaW4gYSBjb21wYXRpYmlsaXR5IG1vZGUgZW11bGF0aW5nIGEgc3RhbmRhcmQgbW91c2UpIGNhbiBiZSBcCitoYW5kbGVkIGJ5IHRoZSBub3JtYWwgZXZkZXYgb3IgbW91c2UgZHJpdmVycywgdGhpcyBkcml2ZXIgYWxsb3dzIG1vcmUgXAorYWR2YW5jZWQgZmVhdHVyZXMgb2YgdGhlIHRvdWNocGFkIHRvIGJlY29tZSBhdmFpbGFibGUuIgorCitTUkNSRVYgPSAiOTM0YmMwMDEyZjk0OGM1MmFhZGM4ZWRhOTEyZjc3MjhmYjczOTRhMiIKK1BWID0gIjAuMTUuMitnaXQke1NSQ1BWfSIKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2RyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljcyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gImxpYnhpIG10ZGV2IGxpYnh0c3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXZtbW91c2VfMTMuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTViNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFZNV2FyZSBtb3VzZSBpbnB1dCBkcml2ZXIiCitERVNDUklQVElPTiA9ICJUaGUgdm1tb3VzZSBkcml2ZXIgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgc3BlY2lhbCBWTU1vdXNlIFwKK3Byb3RvY29sIHRoYXQgaXMgcHJvdmlkZWQgYnkgVk13YXJlIHZpcnR1YWwgbWFjaGluZXMgdG8gZ2l2ZSBhYnNvbHV0ZSBcCitwb2ludGVyIHBvc2l0aW9uaW5nLiBUaGUgdm1tb3VzZSBkcml2ZXIgaXMgY2FwYWJsZSBvZiBmYWxsaW5nIGJhY2sgdG8gdGhlIFwKK3N0YW5kYXJkICdtb3VzZScgZHJpdmVyIGlmIGEgVk13YXJlIHZpcnR1YWwgbWFjaGluZSBpcyBub3QgZGV0ZWN0ZWQuIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODVlMmU0NjRiNzIxOWM0OTVhZDNhMTY0NjVjMjI2ZWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGFmNTU4OTU3YWMxYmUxYjI4NjM3MTJjMjQ3NWRlOGY0ZDdmMTQ5MjFmZDAxZGVkMmUyZmRlNDkyMWIxOTMxOSIKKworUkRFUEVORFNfJHtQTn0gKz0gInhmODYtaW5wdXQtbW91c2UiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTYyMjg0MWMwNjhhOWQ3NjI1ZmJmZTdhY2ZmYjFhOGZjIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBXZSBkb24ndCBjYXJlIGFib3V0IGhhbAorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9oYWwvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vaGFsLworfQorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kIgorCitGSUxFU18ke1BOfSArPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvICR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTg0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1jaXJydXNfMS41LjMuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBjaXJydXMgZGlzcGxheSBkcml2ZXIiCitERVNDUklQVElPTiA9ICJjaXJydXMgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIENpcnJ1cyBMb2dpYyBWR0EgYWRhcHRlcnMuIFRoZXNlIFwKK2RldmljZXMgYXJlIG5vdCBzbyBjb21tb24gaW4gdGhlIHdpbGQgYW55bW9yZSwgYnV0IFFFTVUgY2FuIGVtdWxhdGUgb25lLCBzbyBcCit0aGUgZHJpdmVyIGlzIHN0aWxsIHVzZWZ1bC4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZkZGM3Y2E4NjBkYzVmZDAxNGU3ZjE2MGVhNjk5Mjk1IgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2Q3ZGZkNGNkYzQyYWE4YjZlOTIzNTEwZmEwMGFkMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRjODdiMjBhNTUyNTkxMjZiNTIzOWI1YzFlZjkxMzQxOWVhYjdkZWQwZWQxMmFlOWFlOTg5NDYwZDczNTFhYiIKKworREVQRU5EUyArPSAibGlicGNpYWNjZXNzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tZmJkZXZfMC40LjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1mYmRldl8wLjQuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmU5YmQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tZmJkZXZfMC40LjQuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGZiZGV2IGRpc3BsYXkgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiZmJkZXYgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIGZyYW1lYnVmZmVyIGRldmljZXMuIFRoaXMgaXMgYSBub24tYWNjZWxlcmF0ZWQgZHJpdmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhjYmQ5OWZmZjc3M2Y5MmU4NDQ5NDhmNzRlZjBkZjgiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOTMxYzBlMTlkNDQxY2M1NzZkYzA4OGY5ZWI5ZmQ3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGQ0YjMyNjQ5ODIyM2FiYmZkZjc4NjA4OWE0NmVhM2RiNGZhNmJiZDM0MTMwOGViNDhhOWUwMGJjM2ZkNTFiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1ZGQzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorSW5jbHVkZSB4b3JnLXNlcnZlci5oIHRvIGZpeCBidWlsZCBlcnJvcnMgc2VlbiB3aXRoIGdsaWJjIDIuMjAKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3N0cmluZy5oOjYzNDowLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy93b3JrL2k1ODYtb2UtbGludXgveGY4Ni12aWRlby1pbnRlbC8yXzIuOTkuOTEyLXIwL3hmODYtdmlkZW8taW50ZWwtMi45OS45MTIvc3JjL2JhY2tsaWdodC5jOjM5OgorL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjU3OToxOiBlcnJvcjogZXhwZWN0ZWQgaWRlbnRpZmllciBvciAnKCcgYmVmb3JlICdfX2V4dGVuc2lvbl9fJworIHN0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgbik7CisgXgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHhmODYtdmlkZW8taW50ZWwtMi45OS45MTIvc3JjL2JhY2tsaWdodC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGY4Ni12aWRlby1pbnRlbC0yLjk5LjkxMi5vcmlnL3NyYy9iYWNrbGlnaHQuYwkyMDE0LTA0LTA5IDEwOjQxOjE4LjAwMDAwMDAwMCAtMDcwMAorKysrIHhmODYtdmlkZW8taW50ZWwtMi45OS45MTIvc3JjL2JhY2tsaWdodC5jCTIwMTQtMDgtMjggMTg6NTI6MjUuNTI0MDcwNTg3IC0wNzAwCitAQCAtMjksNiArMjksNyBAQAorICNpbmNsdWRlICJjb25maWcuaCIKKyAjZW5kaWYKKyAKKysjaW5jbHVkZSA8eG9yZy1zZXJ2ZXIuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE1MDhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaApAQCAtMCwwICsxLDE3IEBACitUaGVzZSBtb2R1bGVzIGFyZSBvbmx5IHVzZWQgZm9yIHRlc3RzIHRoYXQgZG9uJ3QgZ2V0IGluc3RhbGxlZCwgYW5kIHRoZQorYXV0b21hdGljIGRldGVjdGlvbiB3aXRob3V0IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBtZWFucyB0aGF0IGEgYnVpbGQgY2FuIGZpbmQKK2UuZy4geHNobWZlbmNlIGF0IGNvbmZpZ3VyZSB0aW1lIGJ1dCB0aGVuIGl0J3MgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3Jvb3QgYnkKK3RoZSB0aW1lIGNvbXBpbGUgaGFwcGVucy4KKworQXMgdGhlIHRlc3RzIGRvbid0IGdldCBpbnN0YWxsZWQsIGp1c3QgZGlzYWJsZSB0aGUgY2hlY2tzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLXNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmQ2NTRmMy4uNzhhMGUwZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjUxICsyNTEgQEAgZmkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYMTFfRFJJMywgW3hjYi1kcmkzIHhjYi1zeW5jIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4cmVuZGVyIHhleHQgbGliZHJtXSwgW3gxMV9kcmkzPSJ5ZXMiXSwgW3gxMV9kcmkzPSJubyJdKQorKyNQS0dfQ0hFQ0tfTU9EVUxFUyhYMTFfRFJJMywgW3hjYi1kcmkzIHhjYi1zeW5jIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4cmVuZGVyIHhleHQgbGliZHJtXSwgW3gxMV9kcmkzPSJ5ZXMiXSwgW3gxMV9kcmkzPSJubyJdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5ZDUyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA3ZmUyYjI5NDg2NTI0NDNmZjQzZDkwNzg1NWJkN2EwNTFkNTRkMzA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDIzOjE0OjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNuYTogUHJvdGVjdCBhZ2FpbnN0IEFCSSBicmVha2FnZSBpbiByZWNlbnQgdmVyc2lvbnMgb2YKKyBsaWJkcm0KKworY29tbWl0IDdmZTJiMjk0ODY1MjQ0M2ZmNDNkOTA3ODU1YmQ3YTA1MWQ1NGQzMDkgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9zcmMvc25hL2tnZW0uYyBiL3NyYy9zbmEva2dlbS5jCitpbmRleCAxMWYwODI4ZjJiYmMuLjZmMTZjYmFjODdmMiAxMDA2NDQKKy0tLSBhL3NyYy9zbmEva2dlbS5jCisrKysgYi9zcmMvc25hL2tnZW0uYworQEAgLTE4Miw2ICsxODIsMTUgQEAgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NhY2hpbmcgeworICNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fU0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgTE9DQUxfSTkxNV9HRU1fU0VUX0NBQ0hJTkcsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nKQorICNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fR0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgTE9DQUxfSTkxNV9HRU1fR0VUX0NBQ0hJTkcsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nKQorIAorK3N0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwIHsKKysJdWludDMyX3QgaGFuZGxlOworKwl1aW50MzJfdCBwYWQ7CisrCXVpbnQ2NF90IG9mZnNldDsKKysJdWludDY0X3Qgc2l6ZTsKKysJdWludDY0X3QgYWRkcl9wdHI7CisrfTsKKysjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX01NQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9NTUFQLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCkKKysKKyBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcDIgeworIAl1aW50MzJfdCBoYW5kbGU7CisgCXVpbnQzMl90IHBhZDsKK0BAIC01MTQsMTUgKzUyMywxNSBAQCByZXRyeV93YzoKKyAKKyBzdGF0aWMgdm9pZCAqX19rZ2VtX2JvX21hcF9fY3B1KHN0cnVjdCBrZ2VtICprZ2VtLCBzdHJ1Y3Qga2dlbV9ibyAqYm8pCisgeworLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgbW1hcF9hcmc7CisrCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwIGFyZzsKKyAJaW50IGVycjsKKyAKKyByZXRyeToKKy0JVkdfQ0xFQVIobW1hcF9hcmcpOworLQltbWFwX2FyZy5oYW5kbGUgPSBiby0+aGFuZGxlOworLQltbWFwX2FyZy5vZmZzZXQgPSAwOworLQltbWFwX2FyZy5zaXplID0gYnl0ZXMoYm8pOworLQlpZiAoKGVyciA9IGRvX2lvY3RsKGtnZW0tPmZkLCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJm1tYXBfYXJnKSkpIHsKKysJVkdfQ0xFQVIoYXJnKTsKKysJYXJnLmhhbmRsZSA9IGJvLT5oYW5kbGU7CisrCWFyZy5vZmZzZXQgPSAwOworKwlhcmcuc2l6ZSA9IGJ5dGVzKGJvKTsKKysJaWYgKChlcnIgPSBkb19pb2N0bChrZ2VtLT5mZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fTU1BUCwgJmFyZykpKSB7CisgCQlhc3NlcnQoZXJyICE9IEVJTlZBTCk7CisgCisgCQlpZiAoX19rZ2VtX3Rocm90dGxlX3JldGlyZShrZ2VtLCAwKSkKK0BAIC01MzYsMTAgKzU0NSwxMCBAQCByZXRyeToKKyAJCXJldHVybiBOVUxMOworIAl9CisgCistCVZHKFZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQobW1hcF9hcmcuYWRkcl9wdHIsIGJ5dGVzKGJvKSkpOworKwlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKGFyZy5hZGRyX3B0ciwgYnl0ZXMoYm8pKSk7CisgCisgCURCRygoIiVzOiBjYWNoaW5nIENQVSB2bWEgZm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIGJvLT5oYW5kbGUpKTsKKy0JcmV0dXJuIGJvLT5tYXBfX2NwdSA9ICh2b2lkICopKHVpbnRwdHJfdCltbWFwX2FyZy5hZGRyX3B0cjsKKysJcmV0dXJuIGJvLT5tYXBfX2NwdSA9ICh2b2lkICopKHVpbnRwdHJfdClhcmcuYWRkcl9wdHI7CisgfQorIAorIHN0YXRpYyBpbnQgZ2VtX3dyaXRlKGludCBmZCwgdWludDMyX3QgaGFuZGxlLAorLS0gCisyLjQuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY3NWVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDEyYWY4YTU3NWQxNTE4ZDQwNDE2ZjgzMTk1MDQ5MTU3YzNhMDYyYTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KK0RhdGU6IFR1ZSwgMjQgRmViIDIwMTUgMTU6MjU6NDAgKzAwMDAKK1N1YmplY3Q6IHNuYTogdWRldiBpbnRlZ3JhdGlvbiBkZXBlbmRzIG9uIGZzdGF0IGFuZCBzeXMvc3RhdC5oCisKK3NyYy9zbmEvc25hX2RyaXZlci5jOiBJbiBmdW5jdGlvbiAnc25hX2hhbmRsZV91ZXZlbnRzJzoKK3NyYy9zbmEvc25hX2RyaXZlci5jOjc1OToyOiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ2ZzdGF0JyBbLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KKworQWxzbyB0YWtlIHRoZSBvcHBvcnR1bml0eSB0byBpbmNsdWRlIHVkZXYgc3VwcG9ydCBpbiB0aGUgY29uZmlndXJlCitzdW1tYXJ5LgorCitTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNzQ3NmUyYi4uZGUzYTRiMyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTk3LDExICsxOTcsMTUgQEAgQUNfQVJHX0VOQUJMRSh1ZGV2LAorIAorIGlmIHRlc3QgIngkVURFViIgIT0gInhubyI7IHRoZW4KKyAJUEtHX0NIRUNLX01PRFVMRVMoVURFViwgW2xpYnVkZXZdLCBbdWRldj0ieWVzIl0sIFt1ZGV2PSJubyJdKQorKwlBQ19DSEVDS19IRUFERVJTKFtzeXMvc3RhdC5oXSwgW10sIFt1ZGV2PSJubyJdKQorIAlpZiB0ZXN0ICJ4JFVERVYiID0gInh5ZXMiIC1hICJ4JHVkZXYiICE9ICJ4eWVzIjsgdGhlbgorIAkJQUNfTVNHX0VSUk9SKFt1ZGV2IHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmQgKGxpYnVkZXYpXSkKKyAJZmkKKyAJaWYgdGVzdCAieCR1ZGV2IiA9ICJ4eWVzIjsgdGhlbgorIAkJQUNfREVGSU5FKEhBVkVfVURFViwxLFtFbmFibGUgdWRldi1iYXNlZCBtb25pdG9yIGhvdHBsdWcgZGV0ZWN0aW9uXSkKKysJCXVkZXZfbXNnPSIgeWVzIgorKwllbHNlCisrCQl1ZGV2X21zZz0iIG5vIgorIAlmaQorIGZpCisgCitAQCAtOTExLDYgKzkxNSw3IEBAIGVjaG8gIiAgU3VwcG9ydCBmb3IgS2VybmVsIE1vZGUgU2V0dGluZz8gJEtNUyIKKyBlY2hvICIgIFN1cHBvcnQgZm9yIGxlZ2FjeSBVc2VyIE1vZGUgU2V0dGluZyAoZm9yIGk4MTApPyAkVU1TIgorIGVjaG8gIiAgU3VwcG9ydCBmb3IgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZTokZHJpX21zZyIKKyBlY2hvICIgIFN1cHBvcnQgZm9yIFh2IG1vdGlvbiBjb21wZW5zYXRpb24gKFh2TUMgYW5kIGxpYlh2TUMpOiR4dm1jX21zZyIKKytlY2hvICIgIFN1cHBvcnQgZm9yIGRpc3BsYXkgaG90cGx1ZyBub3RpZmljYXRpb25zICh1ZGV2KTokdWRldl9tc2ciCisgZWNobyAiICBCdWlsZCBhZGRpdGlvbmFsIHRvb2xzIGFuZCB1dGlsaXRpZXM/JHRvb2xzX21zZyIKKyBpZiB0ZXN0IC1uICIkeHBfbXNnIjsgdGhlbgorIGVjaG8gIiAgRXhwZXJpbWVudGFsIHN1cHBvcnQ6JHhwX21zZyIKK2RpZmYgLS1naXQgYS9zcmMvc25hL3NuYV9kcml2ZXIuYyBiL3NyYy9zbmEvc25hX2RyaXZlci5jCitpbmRleCA4YzBkMGI1Li5iYzIwZWYwIDEwMDY0NAorLS0tIGEvc3JjL3NuYS9zbmFfZHJpdmVyLmMKKysrKyBiL3NyYy9zbmEvc25hX2RyaXZlci5jCitAQCAtNzQwLDYgKzc0MCw4IEBAIHNuYV93YWtldXBfaGFuZGxlcihXQUtFVVBIQU5ETEVSX0FSR1NfREVDTCkKKyB9CisgCisgI2lmIEhBVkVfVURFVgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKworIHN0YXRpYyB2b2lkCisgc25hX2hhbmRsZV91ZXZlbnRzKGludCBmZCwgdm9pZCAqY2xvc3VyZSkKKyB7CistLSAKK2NnaXQgdjAuMTAuMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF8yLjk5LjkxNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmYxNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIKQEAgLTAsMCArMSw0MCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBJbnRlbCBpbnRlZ3JhdGVkIGdyYXBoaWNzIGNoaXBzZXRzIGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAiaW50ZWwgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIEludGVsIGludGVncmF0ZWQgZ3JhcGhpY3MgXAorY2hpcHNldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgZGVwdGhzIDgsIDE1LCAxNiBhbmQgMjQuIE9uIHNvbWUgY2hpcHNldHMsIFwKK3RoZSBkcml2ZXIgc3VwcG9ydHMgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgM0QgdmlhIHRoZSBEaXJlY3QgUmVuZGVyaW5nIFwKK0luZnJhc3RydWN0dXJlIChEUkkpLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODczMGFkNThkMTFjN2JiYWQ5YTcwNjZkNjlmNzgwOGUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91ZGV2LWZzdGF0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmExOTZhNjZlNTJjMGM2MjRmZTVkMzUwYWY3YTVlN2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDBiNzgxZWVhMDU1NTgyODIwYTEyM2M0N2I2MjQxMWJkZjZhYWJmNGYwM2RjMDU2OGZhZWM1NWZhZjk2NjdjOSIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgZHJtIGxpYnBjaWFjY2VzcyBwaXhtYW4iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ4dm1jIHNuYSB1ZGV2ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2RyaSBkcmkxIGRyaTInLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW2RyaV0gPSAiLS1lbmFibGUtZHJpLC0tZGlzYWJsZS1kcmkiCitQQUNLQUdFQ09ORklHW2RyaTFdID0gIi0tZW5hYmxlLWRyaTEsLS1kaXNhYmxlLWRyaTEseGY4NmRyaXByb3RvIgorUEFDS0FHRUNPTkZJR1tkcmkyXSA9ICItLWVuYWJsZS1kcmkyLC0tZGlzYWJsZS1kcmkyLGRyaTJwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywtLWRpc2FibGUtZHJpMyxkcmkzcHJvdG8iCitQQUNLQUdFQ09ORklHW3NuYV0gPSAiLS1lbmFibGUtc25hLC0tZGlzYWJsZS1zbmEiCitQQUNLQUdFQ09ORklHW3V4YV0gPSAiLS1lbmFibGUtdXhhLC0tZGlzYWJsZS11eGEiCitQQUNLQUdFQ09ORklHW3VkZXZdID0gIi0tZW5hYmxlLXVkZXYsLS1kaXNhYmxlLXVkZXYsdWRldiIKK1BBQ0tBR0VDT05GSUdbeHZtY10gPSAiLS1lbmFibGUteHZtYywtLWRpc2FibGUteHZtYyxsaWJ4dm1jIHhjYi11dGlsIgorUEFDS0FHRUNPTkZJR1t0b29sc10gPSAiLS1lbmFibGUtdG9vbHMsLS1kaXNhYmxlLXRvb2xzLGxpYnhpbmVyYW1hIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnhmaXhlcyBsaWJ4Y3Vyc29yIGxpYnh0c3QgbGlieGV4dCBsaWJ4cmVuZGVyIgorCisjIC0tZW5hYmxlLWttcy1vbmx5IG9wdGlvbiBpcyByZXF1aXJlZCBieSBST09UTEVTU19YCitFWFRSQV9PRUNPTkYgKz0gJyR7QGJhc2VfY29uZGl0aW9uYWwoICJST09UTEVTU19YIiwgIjEiLCAiIC0tZW5hYmxlLWttcy1vbmx5IiwgIiIsIGQgKX0nCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Nnx4ODZfNjQpLiotbGludXgnCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3BvbGtpdC0xIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcC8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwLzAwMDEtZHJtbW9kZV9vdXRwdXRfZHBtcy1SZXBsYWNlLWxvZ2ljYWwtd2l0aC1iaXR3aXNlLW9wZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU3N2QzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcC8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBmYzY1M2NhM2IzNjQzNWFlYTI4MWFlNDA5ZmI5MGY4NWUxYmMwZDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwODo0NDoxMyArMDAwMAorU3ViamVjdDogW2ZyZWVkcmVub11bUEFUQ0hdIGRybW1vZGVfb3V0cHV0X2RwbXM6IFJlcGxhY2UgbG9naWNhbCAmJiB3aXRoIGJpdHdpc2UgJgorIG9wZXJhdGlvbgorCitUaGlzIGlzIGEgbWFzayBjYWxjdWxhdGlvbiBzbyBiaXRid2lzZSAmIHNob3VsZCBoYXZlIGJlZW4gdXNlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgc3JjL2RybW1vZGVfZGlzcGxheS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2RybW1vZGVfZGlzcGxheS5jIGIvc3JjL2RybW1vZGVfZGlzcGxheS5jCitpbmRleCBjM2NmNGY4Li5lYjU0YjU5IDEwMDY0NAorLS0tIGEvc3JjL2RybW1vZGVfZGlzcGxheS5jCisrKysgYi9zcmMvZHJtbW9kZV9kaXNwbGF5LmMKK0BAIC03NzcsNyArNzc3LDcgQEAgZHJtbW9kZV9vdXRwdXRfZHBtcyh4Zjg2T3V0cHV0UHRyIG91dHB1dCwgaW50IG1vZGUpCisgCisgCWZvciAoaSA9IDA7IGkgPCBrb3V0cHV0LT5jb3VudF9wcm9wczsgaSsrKSB7CisgCQlwcm9wcyA9IGRybU1vZGVHZXRQcm9wZXJ0eShkcm1tb2RlLT5mZCwga291dHB1dC0+cHJvcHNbaV0pOworLQkJaWYgKHByb3BzICYmIChwcm9wcy0+ZmxhZ3MgJiYgRFJNX01PREVfUFJPUF9FTlVNKSkgeworKwkJaWYgKHByb3BzICYmIChwcm9wcy0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0VOVU0pKSB7CisgCQkJaWYgKCFzdHJjbXAocHJvcHMtPm5hbWUsICJEUE1TIikpIHsKKyAJCQkJbW9kZV9pZCA9IGtvdXRwdXQtPnByb3BzW2ldOworIAkJCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3BzKTsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcF8wLjQuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBfMC40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2ODJlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBfMC40LjMuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIGZyYW1lYnVmZmVyIGRyaXZlciIKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBUSSBPTUFQIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHNldHMgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJPcGVuLXNvdXJjZSBYLm9yZyBncmFwaGljcyBkcml2ZXIgZm9yIFRJIE9NQVAgZ3JhcGhpY3MgXAorQ3VycmVudGx5IHJlbGllcyBvbiBhIGNsb3NlZC1zb3VyY2Ugc3VibW9kdWxlIGZvciBFWEEgYWNjZWxlcmF0aW9uIG9uIFwKK3RoZSBmb2xsb3dpbmcgY2hpcHNldHM6IFwKKyAgKyBPTUFQMzQzMCBcCisgICsgT01BUDM2MzAgXAorICArIE9NQVA0NDMwIFwKKyAgKyBPTUFQNDQ2MCBcCisgICsgT01BUDU0MzAgXAorICArIE9NQVA1NDMyIFwKK1wKK05PVEU6IHRoaXMgZHJpdmVyIGlzIHdvcmsgaW4gcHJvZ3Jlc3MuLiAgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdHJ5IFwKK2FuZCB1c2UgaXQgeWV0LiAgVGhlIEFQSS9BQkkgYmV0d2VlbiBkcml2ZXIgYW5kIGtlcm5lbCwgYW5kIGRyaXZlciBhbmQgXAorYWNjZWxlcmF0aW9uIHN1Ym1vZHVsZXMgaXMgbm90IHN0YWJsZSB5ZXQuICBUaGlzIGRyaXZlciByZXF1aXJlcyB0aGUgXAorb21hcGRybSBrZXJuZWwgZHJpdmVyIHcvIEdFTSBzdXBwb3J0LiBcCisiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBjZTVkZTNiMTExMzE1ZWE2NTJhNWY3NGVjMGM2MDIiCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBsaWJkcm0geGY4NmRyaXByb3RvIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmUzNWRhZjZmYTRiNzUwOTJjYzRhODk3OGM0MzdiYzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGIxZTBlNjlmZDRjNGM4ZmRjYTVlZjJjYjA0NDdiY2NkNzUxOGE3MTg0OTU4NzZhNjkwNGJlZjU3YjM5OTg2ZCIKKworQ0ZMQUdTICs9ICIgLUkke1NUQUdJTkdfSU5DRElSfS94b3JnICIKKworIyBVc2Ugb3ZlcmxheSAyIG9uIG9tYXAzIHRvIGVuYWJsZSBvdGhlciBhcHBzIHRvIHVzZSBvdmVybGF5IDEgKGUuZy4gZG1haSBvciBvbWFwZmJwbGF5KQorZG9fY29tcGlsZV9wcmVwZW5kX2FybXY3YSAoKSB7CisgICAgICAgIHNlZCAtaSAtZSBzOmZiMTpmYjI6ZyAke1N9L3NyYy9vbWFwX3h2LmMKK30KKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ29wZW5nbCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Y2YxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMjhjMDA2Yzk0ZTU3ZWE3MWRmMTFlYzRmZmY3OWQ3ZmZjZmM0ODYwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhciBNY0tvbiA8RmFyTWNLb25AYnVnbGFicy5uZXQ+CitEYXRlOiBUdWUsIDMgTWF5IDIwMTEgMjA6NTk6MDQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUHJldmVudHMgb21hcGZiIGZyb20gZnJvbSBjcmFzaGluZyB3aGVuIHBpeGVsY2xvY2sgb2YgMCBpcworIHNlbnQgdG8gaXQuCisKK0R1ZSB0byBhIExpbnV4IGRlc2lnbiBidWcgaXQgaXMgZWFzeSB0byBnZXQgYSBwaXhlbGNsb2NrIHNldCB0byB6ZXJvCit3aGVuIGNoYW5naW5nIGRpc3BsYXlzIGF0IHJ1bnRpbWUuCistLS0KKyBzcmMvb21hcGZiLW91dHB1dC5jIHwgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1vdXRwdXQuYyBiL3NyYy9vbWFwZmItb3V0cHV0LmMKK2luZGV4IGY4YjRkYjMuLjRkNTkyNjUgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLW91dHB1dC5jCisrKysgYi9zcmMvb21hcGZiLW91dHB1dC5jCitAQCAtMTI1LDggKzEyNSwxMyBAQCBPTUFQRkJPdXRwdXRHZXRNb2Rlcyh4Zjg2T3V0cHV0UHRyIG91dHB1dCkKKyAJLyogT25seSBwb3B1bGF0ZSB0aGUgbmF0aXZlIChjdXJyZW50KSBtb2RlICovCisgCW1vZGUgPSBjYWxsb2MoMSwgc2l6ZW9mKERpc3BsYXlNb2RlUmVjKSk7CisgCW1vZGUtPnR5cGUgICAgICB8PSBNX1RfUFJFRkVSUkVEOworLQltb2RlLT5DbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworLQltb2RlLT5TeW50aENsb2NrID0gUElDT1MyS0haKG9mYi0+c3RhdGVfaW5mby5waXhjbG9jayk7CisrCWlmIChvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2sgPT0gMCkgeworKwkJbW9kZS0+Q2xvY2sgPSAwOworKwkJbW9kZS0+U3ludGhDbG9jayA9IDA7CisrCX0gZWxzZSB7CisrCQltb2RlLT5DbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworKwkJbW9kZS0+U3ludGhDbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworKwl9CisgCW1vZGUtPkhEaXNwbGF5ICAgPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKyAJbW9kZS0+SFN5bmNTdGFydCA9IG1vZGUtPkhEaXNwbGF5CisgCSAgICAgICAgICAgICAgICAgICsgb2ZiLT5zdGF0ZV9pbmZvLnJpZ2h0X21hcmdpbjsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiMDFkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA4ZmI3ZDBmOTlkNGFmYmI1NzRiMzBjYjRmMWU2NmE4Zjg5ZDk0YWQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTI6MDQ6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzZdIFJldmVydCAiU2V0IGEgbGFyZ2UgQ1JUQyB1cHBlciBsaW1pdCB0byBub3QgcHJ1bmUgbGFyZ2VyCisgcmVzb2x1dGlvbnMiCisKK1BpY3R1cmUgaXMgZ2FyYmxlZCBhZnRlciBzd2l0Y2hpbmcgcmVzb2x1dGlvbnMsIHNvIHJldmVydCBpdC4KK1ZpcnR1YWwgc2l6ZSB0b28gYmlnLCByZXZlcnQgdGhlIGNvbW1pdCA5YzRkNzU5MmRjYjdkYzIwYTQ4YTZmOTQxZDlkOTRiZDczZDM0MTUzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1jcnRjLmMgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItY3J0Yy5jIGIvc3JjL29tYXBmYi1jcnRjLmMKK2luZGV4IDlhYWE1MmYuLmNiZWZmMzUgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWNydGMuYworKysrIGIvc3JjL29tYXBmYi1jcnRjLmMKK0BAIC0xOTAsMTMgKzE5MCwxMyBAQCBPTUFQRkJDUlRDSW5pdChTY3JuSW5mb1B0ciBwU2NybikKKyAJICogSW4gcHJhY3Rpc2UsIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIHN1cHBvcnRlZC4KKyAJICogKG5vIHdheSB0byBzZXR1cCB0aGUgb3ZlcmxheSBvZmZzZXQvYmFzZSBhZGRyZXNzKQorIAkgKi8KKy0JIC8qIEZJWE1FOiBmaWd1cmUgb3V0IHdoYXQgbWFrZXMgc2Vuc2UgaGVyZS4gQSBrbm93biBtYXggcmVzb2x1dGlvbj8KKy0JICAqIGZyYW1lYnVmZmVyIHNpemU/CistCSAgKi8KKyAJeGY4NkNydGNTZXRTaXplUmFuZ2UocFNjcm4sCistCSAgICAgICAgICAgICAgICAgICAgIDgsIDgsIDIwNDgsIDIwNDgpOworKwkgICAgICAgICAgICAgICAgICAgICA4LCA4LAorKwkgICAgICAgICAgICAgICAgICAgICBvZmItPnN0YXRlX2luZm8ueHJlc192aXJ0dWFsLAorKwkgICAgICAgICAgICAgICAgICAgICBvZmItPnN0YXRlX2luZm8ueXJlc192aXJ0dWFsKTsKKyAKKyAJb2ZiLT5jcnRjID0geGY4NkNydGNDcmVhdGUocFNjcm4sICZPTUFQRkJDcnRjRnVuY3MpOworKworIH0KKyAKKyAKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYTk4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4NTVjMzMzYWMwZDE2MzUwZjg5NWYxZDFiOTM5MWU5Y2JiMGI2ZGI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTM6Mjc6MjAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzZdIFJldmVydCAiU2V0IHZpcnR1YWwgc2l6ZSB3aGVuIGNvbmZpZ3VyaW5nIGZyYW1lYnVmZmVyIgorCitWaXJ0dWFsIHNpemUgdG9vIGJpZywgc28gcmV2ZXJ0IGl0LgorCitUaGlzIHJldmVydHMgY29tbWl0IDI2NTNlZjA3ODgzZmJkMWE1ZTcwMjVmOTMwMGNmODliNzliYTQyOWEuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvb21hcGZiLWNydGMuYyB8IDIgLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItY3J0Yy5jIGIvc3JjL29tYXBmYi1jcnRjLmMKK2luZGV4IGNiZWZmMzUuLjk2NTVkYjIgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWNydGMuYworKysrIGIvc3JjL29tYXBmYi1jcnRjLmMKK0BAIC05OCw4ICs5OCw2IEBAIE9NQVBGQkNydGNDb21taXRDaGFuZ2VNb2RlICh4Zjg2Q3J0Y1B0ciBjcnRjKQorIAl2ID0gb2ZiLT5zdGF0ZV9pbmZvOworIAl2LnhyZXMgPSBtb2RlLT5IRGlzcGxheTsKKyAJdi55cmVzID0gbW9kZS0+VkRpc3BsYXk7CistCXYueHJlc192aXJ0dWFsID0gY3J0Yy0+c2Nybi0+dmlydHVhbFg7CistCXYueXJlc192aXJ0dWFsID0gY3J0Yy0+c2Nybi0+dmlydHVhbFk7CisgCXYuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisgCXYucGl4Y2xvY2sgPSBLSFoyUElDT1MobW9kZS0+Q2xvY2sgPyBtb2RlLT5DbG9jayA6IDU2MDAwKTsKKyAJdi5sZWZ0X21hcmdpbiA9IG1vZGUtPkhUb3RhbCAtIG1vZGUtPkhTeW5jRW5kOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2VhN2MxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDI1MmY0NGMwNzJkMzQ0N2EzMjEyN2ZjOWFmZTVkMGQ0MGYzYzUxMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogV2VkLCAyNiBKYW4gMjAxMSAxMzoyMDoyMCArMDEwMAorU3ViamVjdDogW1BBVENIIDMvNl0gZm9yY2UgJ3BsYWluJyBtb2RlCisKK1RoZSBuZXcgRFNTIG1vZGUgYnJlYWtzIFhWLCBzbyBmb3JjZSBwbGFpbiBtb2RlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1kcml2ZXIuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItZHJpdmVyLmMgYi9zcmMvb21hcGZiLWRyaXZlci5jCitpbmRleCAwMThlMDQwLi40OGFhMDljIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1kcml2ZXIuYworKysrIGIvc3JjL29tYXBmYi1kcml2ZXIuYworQEAgLTMyNiw3ICszMjYsNyBAQCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpCisgCU9NQVBGQlByb2JlQ29udHJvbGxlcihvZmItPmN0cmxfbmFtZSk7CisgCisgCS8qIERvIHdlIGhhdmUgdGhlIERTUyBrZXJuZWwgQVBJPyAqLworLQlpZiAoc3RhdChTWVNGU19EU1NfRElSLCAmc3QpID09IDApIHsKKysJaWYgKDApIHsgLy9zdGF0KFNZU0ZTX0RTU19ESVIsICZzdCkgPT0gMCkgeworIAkJb2ZiLT5kc3MgPSBUUlVFOworIAl9IGVsc2UgeworIAkJb2ZiLT5kc3MgPSBGQUxTRTsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhYzlhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBjZmE0NmI2N2Y1OTExNWY2ZDhlZjk0MTRhZjYwMzgwNzQ5ZmYzZWIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTM6MjE6MTIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzZdIGJsYWNrbGlzdCB0diBvdXQKKworVGhlIHR2LW91dCBnZXRzIGFkZGVkIGxhc3QgYW5kIHRoZSBkcml2ZXIgdHJpZXMgdG8gcmVjb25maWd1cmUgZHZpIHRvIFRWIHJlc29sdXRpb25zLCB3aGljaCBmYWlscy4gc28gYmxhY2tsaXN0IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLW91dHB1dC1kc3MuYyBiL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jCitpbmRleCA2Y2M1MmRlLi44M2NiNzExIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMKKysrKyBiL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jCitAQCAtMjA1LDYgKzIwNSwxMCBAQCBPTUFQRkJEU1NPdXRwdXREZXRlY3QgKHhmODZPdXRwdXRQdHIgb3V0cHV0KQorIAlpZihvZmItPnRpbWluZ3NbaWR4XVswXSA9PSAnXDAnKQorIAkJcmV0dXJuIFhGODZPdXRwdXRTdGF0dXNEaXNjb25uZWN0ZWQ7CisgCisrCS8vIEhhY2sgdG8gZGlzYWJsZSB0aGUgdHYgb3V0CisrCWlmIChzdHJuY21wKG91dHB1dC0+bmFtZSwgInR2IiwgMikgPT0gMCkKKysJCXJldHVybiBYRjg2T3V0cHV0U3RhdHVzRGlzY29ubmVjdGVkOworKworIAlyZXR1cm4gWEY4Nk91dHB1dFN0YXR1c0Nvbm5lY3RlZDsKKyB9CisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjI4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoCkBAIC0wLDAgKzEsMzI1IEBACitGcm9tIDhiMWY2OTdhNjBlMzVhYjgyZmZmZGFiZmFlZmRiNDVlOWE5ZGYzNzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFaW5vLVZpbGxlIFRhbHZhbGEgPHRhbHZhbGFAc3RhbmZvcmQuZWR1PgorRGF0ZTogVHVlLCAyMyBBdWcgMjAxMSAxODozNzowMSArMDIwMAorU3ViamVjdDogW1BBVENIIDUvNl0gQXR0ZW1wdCB0byBmaXggVlJGQgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworaHR0cDovL2RvbWluaW9uLnRocnVoZXJlLm5ldC9naXQvY2dpdC5jZ2kveGY4Ni12aWRlby1vbWFwZmIvY29tbWl0Lz9oPWtvZW4vZml4dXBzJmlkPTY4MzNmYzlmNzk1MjY1ZTQ5NDNkMjQ4MTAzZmJhZjM0NjNiNTE1ZDYKKworU2lnbmVkLW9mZi1ieTogU2ViYXN0aWFuIEtyenlzemtvd2lhayA8ZG9zQGRvc293aXNrby5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmMgfCAgNCArLS0KKyBzcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmggfCAgMiArLQorIHNyYy9vbWFwZmItZHJpdmVyLmMgICAgICAgICAgICB8IDI4ICsrKysrKysrKysrKystLS0KKyBzcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMgICAgICAgfCAgMSArCisgc3JjL29tYXBmYi14di1nZW5lcmljLmMgICAgICAgIHwgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgc3JjL29tYXBmYi14di5jICAgICAgICAgICAgICAgIHwgIDMgKysKKyA2IGZpbGVzIGNoYW5nZWQsIDg4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jCitpbmRleCBkY2VmYTliLi5kNDM0MjdkIDEwMDY0NAorLS0tIGEvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jCisrKysgYi9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmMKK0BAIC0zOCwxMyArMzgsMTMgQEAKKyAjaW5jbHVkZSAiaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgiCisgCisgLyogQmFzaWMgbGluZS1iYXNlZCBjb3B5IGZvciBwYWNrZWQgZm9ybWF0cyAqLworLXZvaWQgcGFja2VkX2xpbmVfY29weShpbnQgdywgaW50IGgsIGludCBzdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCkKKyt2b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3JjX3N0cmlkZSwgaW50IGRzdF9zdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCkKKyB7CisgCWludCBpOworIAlpbnQgbGVuID0gdyAqIDI7CisgCWZvciAoaSA9IDA7IGkgPCBoOyBpKyspCisgCXsKKy0JCW1lbWNweShkZXN0ICsgaSAqIGxlbiwgc3JjICsgaSAqIHN0cmlkZSwgbGVuKTsKKysJCW1lbWNweShkZXN0ICsgaSAqIGRzdF9zdHJpZGUsIHNyYyArIGkgKiBzcmNfc3RyaWRlLCBsZW4pOworIAl9CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaCBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaAoraW5kZXggNTg0ODk2YS4uYmE3Y2FmMiAxMDA2NDQKKy0tLSBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaAorKysrIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oCitAQCAtMjcsNyArMjcsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAvKiBCYXNpYyBsaW5lLWJhc2VkIGNvcHkgZm9yIHBhY2tlZCBmb3JtYXRzICovCistdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHN0cmlkZSwgdWludDhfdCAqc3JjLCB1aW50OF90ICpkZXN0KTsKKyt2b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3JjX3N0cmlkZSwgaW50IGRzdF9zdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCk7CisgCisgLyogQmFzaWMgQyBpbXBsZW1lbnRhdGlvbiBvZiBZVjEyL0k0MjAgdG8gVVlWWSBjb252ZXJzaW9uICovCisgdm9pZCB1djEyX3RvX3V5dnkoaW50IHcsIGludCBoLCBpbnQgeV9waXRjaCwgaW50IHV2X3BpdGNoLCB1aW50OF90ICp5X3AsIHVpbnQ4X3QgKnVfcCwgdWludDhfdCAqdl9wLCB1aW50OF90ICpkZXN0KTsKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggNDhhYTA5Yy4uMDc5ODlmNSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC02Niw2ICs2Niw3IEBACisgI2RlZmluZSBPTUFQRkJfVkVSU0lPTiAxMDAwCisgI2RlZmluZSBPTUFQRkJfRFJJVkVSX05BTUUgIk9NQVBGQiIKKyAjZGVmaW5lIE9NQVBGQl9OQU1FICJvbWFwZmIiCisrI2RlZmluZSBFTkZPUkNFX01PREVTCisgCisgc3RhdGljIEJvb2wgT01BUEZCUHJvYmUoRHJpdmVyUHRyIGRydiwgaW50IGZsYWdzKTsKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpOworQEAgLTEwNSwxMSArMTA2LDEzIEBAIHN0YXRpYyBTeW1UYWJSZWMgT01BUEZCQ2hpcHNldHNbXSA9IHsKKyB0eXBlZGVmIGVudW0geworIAlPUFRJT05fQUNDRUxNRVRIT0QsCisgCU9QVElPTl9GQiwKKysJT1BUSU9OX1JPVEFURSwKKyB9IEZCRGV2T3B0czsKKyAKKyBzdGF0aWMgY29uc3QgT3B0aW9uSW5mb1JlYyBPTUFQRkJPcHRpb25zW10gPSB7CisgCXsgT1BUSU9OX0FDQ0VMTUVUSE9ELAkiQWNjZWxNZXRob2QiLAlPUFRWX1NUUklORywJezB9LAlGQUxTRSB9LAorIAl7IE9QVElPTl9GQiwJCSJmYiIsCQlPUFRWX1NUUklORywJezB9LAlGQUxTRSB9LAorKwl7IE9QVElPTl9ST1RBVEUsCSJyb3RhdGlvbiIsCU9QVFZfU1RSSU5HLAl7MH0sCUZBTFNFIH0sCisgCXsgLTEsCQkJTlVMTCwJCU9QVFZfTk9ORSwJezB9LAlGQUxTRSB9CisgfTsKKyAKK0BAIC0yODYsNiArMjg5LDcgQEAgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKQorIHsKKyAJT01BUEZCUHRyIG9mYjsKKyAJRW50aXR5SW5mb1B0ciBwRW50OworKwljaGFyICpyb3RhdGU7CisgCXJnYiB6ZXJvcyA9IHsgMCwgMCwgMCB9OworIAlzdHJ1Y3Qgc3RhdCBzdDsKKyAKK0BAIC0zNzksNiArMzgzLDggQEAgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKQorIAlwU2Nybi0+cHJvZ0Nsb2NrID0gVFJVRTsKKyAJcFNjcm4tPmNoaXBzZXQgICA9ICJvbWFwZmIiOworIAkKKysJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0lORk8sICJSb3RhdGUgdGVzdCB2ZXJzaW9uIDAuMDJcbiIpOworKwkKKyAJLyogU3RhcnQgd2l0aCBjb25maWd1cmVkIHZpcnR1YWwgc2l6ZSAqLworIAlwU2Nybi0+dmlydHVhbFggPSBwU2Nybi0+ZGlzcGxheS0+dmlydHVhbFg7CisgCXBTY3JuLT52aXJ0dWFsWSA9IHBTY3JuLT5kaXNwbGF5LT52aXJ0dWFsWTsKK0BAIC00OTYsMTIgKzUwMiwyMSBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCW9mYi0+Q2xvc2VTY3JlZW4gPSBwU2NyZWVuLT5DbG9zZVNjcmVlbjsKKyAJcFNjcmVlbi0+Q2xvc2VTY3JlZW4gPSBPTUFQRkJDbG9zZVNjcmVlbjsKKyAKKysJLyogRW5mb3JjZSB0aGUgZGVmYXVsdCBtb2RlICh0aGlzIGlzIHNpbGx5IEkgZ3Vlc3MpICovCisrI2lmZGVmIEVORk9SQ0VfTU9ERVMKKysJLy94Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfSU5GTywgIkVuZm9yY2luZyBtb2Rlc1xuIik7CisrCS8vc2V0X21vZGUob2ZiLCAmb2ZiLT5kZWZhdWx0X21vZGUpOworKwkvL3BTY3JuLT5kaXNwbGF5V2lkdGggPSBvZmItPmZpeGVkX2luZm8ubGluZV9sZW5ndGggLworKwkvLyAgKG9mYi0+c3RhdGVfaW5mby5iaXRzX3Blcl9waXhlbD4+Myk7IC8vb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisrI2VuZGlmCisrCisgCS8qIE1hcCBvdXIgZnJhbWVidWZmZXIgbWVtb3J5ICovCisrCW9mYi0+bWVtX2luZm8uc2l6ZSA9IG9mYi0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCAqIG9mYi0+c3RhdGVfaW5mby55cmVzOworIAlvZmItPmZiID0gbW1hcCAoTlVMTCwgb2ZiLT5tZW1faW5mby5zaXplLAorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+ZmQsIDApOworLQlpZiAob2ZiLT5mYiA9PSBOVUxMKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZFxuIik7CisrCWlmIChvZmItPmZiID09IE1BUF9GQUlMRUQpIHsKKysJCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiTWFwcGluZyBmcmFtZWJ1ZmZlciBtZW1vcnkgZmFpbGVkLCB3YW50ZWQgJWQgYnl0ZXMuXG4iLCBvZmItPm1lbV9pbmZvLnNpemUpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTc4LDggKzU5MywxMyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCX0gZWxzZSBpZiAoIW9mYi0+ZHNzKSB7CisgCisgCQlvZmItPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CistCQlvZmItPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CistCQlvZmItPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IG9mYi0+c3RhdGVfaW5mby55cmVzOworKwkJaWYgKG9mYi0+c3RhdGVfaW5mby5yb3RhdGUgPT0gMCB8fCBvZmItPnN0YXRlX2luZm8ucm90YXRlID09IDIpIHsKKysJCQlvZmItPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCX0gZWxzZSB7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby55cmVzOworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisrCQl9CisgCisgCQlpZiAoaW9jdGwgKG9mYi0+ZmQsIE9NQVBGQl9TRVRVUF9QTEFORSwgJm9mYi0+cGxhbmVfaW5mbykpIHsKKyAJCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMgYi9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKK2luZGV4IDQwNmZmYzYuLmI3MWQyYWEgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKKysrKyBiL3NyYy9vbWFwZmIteHYtYmxpenphcmQuYworQEAgLTIyMCw2ICsyMjAsNyBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUJsaXp6YXJkIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCQlwYWNrZWRfbGluZV9jb3B5KHNyY193ICYgfjMsCisgCQkJICAgICAgICAgICAgICAgICBzcmNfaCAmIH4zLAorIAkJCSAgICAgICAgICAgICAgICAgKChzcmNfdyArIDEpICYgfjEpICogMiwKKysJCQkJCSBvZmItPnBvcnQtPmZpeGVkX2luZm8ubGluZV9sZW5ndGgsCisgCQkJICAgICAgICAgICAgICAgICAodWludDhfdCopYnVmLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKW9mYi0+cG9ydC0+ZmIpOworIAkJCWJyZWFrOworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jIGIvc3JjL29tYXBmYi14di1nZW5lcmljLmMKK2luZGV4IGU2Zjg5ZmUuLmIzM2YzNDQgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYworKysrIGIvc3JjL29tYXBmYi14di1nZW5lcmljLmMKK0BAIC02Miw3ICs2Miw3IEBAIGludCBPTUFQWFZBbGxvY1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIHsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CisgCistCS8qIFRoZSBtZW1vcnkgc2l6ZSBpcyBhbHJlYWR5IHNldCBpbiBPTUFQRkJYVlF1ZXJ5SW1hZ2VBdHRyaWJ1dGVzICovCisrCS8qIFRoZSBtZW1vcnkgc2l6ZSBpcyBhbHJlYWR5IHNldCBiZWZvcmUgd2UgZ2V0IGhlcmUgKi8KKyAJaWYgKGlvY3RsKG9mYi0+cG9ydC0+ZmQsIE9NQVBGQl9TRVRVUF9NRU0sICZvZmItPnBvcnQtPm1lbV9pbmZvKSAhPSAwKSB7CisgCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgCQkgICAgICAgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gcGxhbmUgbWVtb3J5XG4iKTsKK0BAIC03MywxOSArNzMsMjAgQEAgaW50IE9NQVBYVkFsbG9jUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgCW9mYi0+cG9ydC0+ZmIgPSBtbWFwIChOVUxMLCBvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUsCisgCSAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorIAkgICAgICAgICAgICAgICAgb2ZiLT5wb3J0LT5mZCwgMCk7CistCWlmIChvZmItPnBvcnQtPmZiID09IE5VTEwpIHsKKysJaWYgKG9mYi0+cG9ydC0+ZmIgPT0gTUFQX0ZBSUxFRCkgeworIAkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJICAgICAgICAgICAiTWFwcGluZyB2aWRlbyBtZW1vcnkgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBYdkJhZEFsbG9jOworIAl9CisgCisgCS8qIFVwZGF0ZSB0aGUgc3RhdGUgaW5mbyAqLworKwkvKiBMZXQncyBub3QgLSBpdCdzIGJhZAorIAlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorIAl7CisgCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAJCXJldHVybiBYdkJhZEFsbG9jOworIAl9CistCisrCSovCisgCXJldHVybiBTdWNjZXNzOworIH0KKyAKK0BAIC05Myw2ICs5NCw3IEBAIGludCBPTUFQWFZBbGxvY1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIGludCBPTUFQWFZTZXR1cFZpZGVvUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgeworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKKysJaW50IHJldDsKKyAKKyAJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPUFVUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKyAJeworQEAgLTEwNCw2ICsxMDYsMzEgQEAgaW50IE9NQVBYVlNldHVwVmlkZW9QbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyAJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBSZWFkaW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworIAkJcmV0dXJuIFh2QmFkQWxsb2M7CisgCX0KKysJLyogQ2hhbmdpbmcgcm90YXRpb24vbm9uc3RkIGZsYWdzIGNhbiBjaGFuZ2UgdGhlIGZpeGVkIGluZm8hICovCisrCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT0dFVF9GU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+Zml4ZWRfaW5mbykpCisrCXsKKysJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBSZWFkaW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworKwkJcmV0dXJuIFh2QmFkQWxsb2M7CisrCX0KKysJLyogQ29ycmVjdCBmaXhlZCBpbmZvIHJlcXVpcmVzIHJlY2FsY3VsYXRpb24gb2YgbmVlZGVkIG1lbW9yeSAqLworKwlvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUgPSBvZmItPnBvcnQtPmZpeGVkX2luZm8ubGluZV9sZW5ndGggKiBvZmItPnBvcnQtPnN0YXRlX2luZm8ueXJlczsKKysKKysJLyogQWxsb2NhdGUgYnVmZmVyIG1lbW9yeSAqLworKwlyZXQgPSBPTUFQWFZBbGxvY1BsYW5lKHBTY3JuKTsKKysJaWYgKHJldCAhPSBTdWNjZXNzKQorKwkJcmV0dXJuIHJldDsKKysKKysJLyogV29ya2Fyb3VuZCBmb3IgcmVzZXQgb2YgbW9kZSBhZnRlciBtZW1vcnkgYWxsbyAqLworKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9QVVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogc2V0dGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisrCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT0dFVF9WU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+c3RhdGVfaW5mbykpCisrCXsKKysJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBSZWFkaW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworKwkJcmV0dXJuIFh2QmFkQWxsb2M7CisrCX0KKyAKKyAJaWYoaW9jdGwob2ZiLT5wb3J0LT5mZCwgT01BUEZCX1NFVFVQX1BMQU5FLAorIAkgICAmb2ZiLT5wb3J0LT5wbGFuZV9pbmZvKSAhPSAwKSB7CitAQCAtMTI0LDYgKzE1MSw4IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmF3YWJsZVB0ciBwRHJhdykKKyB7CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworKwlzaG9ydCBkcndfdGVtcDsKKysJc2hvcnQgcm90X3hyZXMsIHJvdF95cmVzOworIAorIAlpZiAoIW9mYi0+cG9ydC0+cGxhbmVfaW5mby5lbmFibGVkCisgCSB8fCBvZmItPnBvcnQtPnVwZGF0ZV93aW5kb3cueCAhPSBzcmNfeAorQEAgLTE2MywxMyArMTkyLDYgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCQlyZXR1cm4gU3VjY2VzczsKKyAJCX0KKyAKKy0JCS8qIElmIHdlIGRvbid0IGhhdmUgdGhlIHBsYW5lIHJ1bm5pbmcsIGVuYWJsZSBpdCAqLworLQkJaWYgKCFvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZCkgeworLQkJCXJldCA9IE9NQVBYVkFsbG9jUGxhbmUocFNjcm4pOworLQkJCWlmIChyZXQgIT0gU3VjY2VzcykKKy0JCQkJcmV0dXJuIHJldDsKKy0JCX0KKy0KKyAJCS8qIFNldCB1cCB0aGUgc3RhdGUgaW5mbywgeHJlcyBhbmQgeXJlcyB3aWxsIGJlIHVzZWQgZm9yCisgCQkgKiBzY2FsaW5nIHRvIHRoZSB2YWx1ZXMgaW4gdGhlIHBsYW5lIGluZm8gc3RydWN0CisgCQkgKi8KK0BAIC0xNzksMTIgKzIwMSwzMSBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXNfdmlydHVhbCA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ueG9mZnNldCA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ueW9mZnNldCA9IDA7CistCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ucm90YXRlID0gMDsKKysJCS8vb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uZ3JheXNjYWxlID0gMDsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby5iaXRzX3Blcl9waXhlbCA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ubm9uc3RkID0geHZfdG9fb21hcGZiX2Zvcm1hdChpbWFnZSk7CisgCisrCQkvKiBQbGFuZSBpbmZvIGRvZXMgbm90IHJvdGF0ZSB3aXRoIHN0YXRlX2luZm8gKi8KKysJCWlmIChvZmItPnBvcnQtPnN0YXRlX2luZm8ucm90YXRlID09IDEgfHwKKysJCSAgb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAzKSB7CisrCQkJZHJ3X3RlbXAgPSBkcndfeDsKKysJCQlkcndfeCA9IGRyd195OworKwkJCWRyd195ID0gZHJ3X3RlbXA7CisrCisrCQkJZHJ3X3RlbXAgPSBkcndfdzsKKysJCQlkcndfdyA9IGRyd19oOworKwkJCWRyd19oID0gZHJ3X3RlbXA7CisrCisrCQkJcm90X3hyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueXJlczsKKysJCQlyb3RfeXJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby54cmVzOworKwkJfSBlbHNlIHsKKysJCQlyb3RfeHJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby54cmVzOworKwkJCXJvdF95cmVzID0gb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCQl9CisrCisrCisgCQkvKiBTZXQgdXAgdGhlIHZpZGVvIHBsYW5lIGluZm8gKi8KKyAJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5lbmFibGVkID0gMTsKKyAJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5wb3NfeCA9IGRyd194OworQEAgLTE5MywxMyArMjM0LDEzIEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IGRyd19oICYgfjE1OworIAorIAkJLyogQ2FwIG91dHB1dCB0byBzY3JlZW4gc2l6ZSAqLworLQkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPiBvZmItPnN0YXRlX2luZm8ueHJlcykgeworKwkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPiByb3RfeHJlcykgeworIAkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5wb3NfeCA9IDA7CistCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSByb3RfeHJlczsKKyAJCX0KKy0JCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA+IG9mYi0+c3RhdGVfaW5mby55cmVzKSB7CisrCQlpZiAob2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPiByb3RfeXJlcykgeworIAkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5wb3NfeSA9IDA7CistCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IHJvdF95cmVzOworIAkJfQorIAorIAkJcmV0ID0gT01BUFhWU2V0dXBWaWRlb1BsYW5lKHBTY3JuKTsKK0BAIC0yMjMsNiArMjY0LDcgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCQlwYWNrZWRfbGluZV9jb3B5KHNyY193ICYgfjE1LAorIAkJCSAgICAgICAgICAgICAgICAgc3JjX2ggJiB+MTUsCisgCQkJICAgICAgICAgICAgICAgICAoKHNyY193ICsgMSkgJiB+MSkgKiAyLAorKwkJCSAgICAgICAgICAgICAgICAgb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKWJ1ZiwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilvZmItPnBvcnQtPmZiKTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLXh2LmMgYi9zcmMvb21hcGZiLXh2LmMKK2luZGV4IDFkZjY1MWUuLjBmZWUyYzYgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLXh2LmMKKysrKyBiL3NyYy9vbWFwZmIteHYuYworQEAgLTE2OSw4ICsxNjksMTEgQEAgc3RhdGljIGludCBPTUFQRkJYVlF1ZXJ5SW1hZ2VBdHRyaWJ1dGVzIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJaCA9ICpoZWlnaHQ7CisgCisgCXcgPSAodyArIDEpICYgfjE7CisrCisrCS8qIENhbid0IGNhbGN1bGF0ZSB0aGVzZSBoZXJlIC0gZG9uJ3Qga25vdyBsaW5lIGxlbmd0aAorIAlvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUgPSB3IDw8IDE7CisgCW9mYi0+cG9ydC0+bWVtX2luZm8uc2l6ZSAqPSBoOworKwkqLworIAorIAlyZXR1cm4gc2l6ZTsKKyB9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTY3Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDYtb21hcGZiLXBvcnQtdG8tbmV3LXhzZXJ2ZXItdmlkZW8tQVBJLnBhdGNoCkBAIC0wLDAgKzEsMjcyIEBACitGcm9tIDgwM2VjZjI5MDk5NDllNjE1MmY0YTgxYjZjYmI5MmE0NDMwNjc5YWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIzIE5vdiAyMDEyIDAwOjMxOjA2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNi82XSBvbWFwZmI6IHBvcnQgdG8gbmV3IHhzZXJ2ZXIgdmlkZW8gQVBJCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvY29tcGF0LWFwaS5oICAgIHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvb21hcGZiLWRyaXZlci5jIHwgNDEgKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2NvbXBhdC1hcGkuaAorCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBhdC1hcGkuaCBiL3NyYy9jb21wYXQtYXBpLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMTU5MWIxCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGF0LWFwaS5oCitAQCAtMCwwICsxLDk2IEBACisrLyoKKysgKiBDb3B5cmlnaHQgMjAxMiBSZWQgSGF0LCBJbmMuCisrICoKKysgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisrICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrICoKKysgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisrICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorKyAqIFNvZnR3YXJlLgorKyAqCisrICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKysgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKysgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKysgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisrICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKysgKgorKyAqIEF1dGhvcjogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KKysgKi8KKysKKysvKiB0aGlzIGZpbGUgcHJvdmlkZXMgQVBJIGNvbXBhdCBiZXR3ZWVuIHNlcnZlciBwb3N0IDEuMTMgYW5kIHByZSBpdCwKKysgICBpdCBzaG91bGQgYmUgcmV1c2VkIGluc2lkZSBhcyBtYW55IGRyaXZlcnMgYXMgcG9zc2libGUgKi8KKysjaWZuZGVmIENPTVBBVF9BUElfSAorKyNkZWZpbmUgQ09NUEFUX0FQSV9ICisrCisrI2lmbmRlZiBHTFlQSF9IQVNfR0xZUEhfUElDVFVSRV9BQ0NFU1NPUgorKyNkZWZpbmUgR2V0R2x5cGhQaWN0dXJlKGcsIHMpIEdseXBoUGljdHVyZSgoZykpWyhzKS0+bXlOdW1dCisrI2RlZmluZSBTZXRHbHlwaFBpY3R1cmUoZywgcywgcCkgR2x5cGhQaWN0dXJlKChnKSlbKHMpLT5teU51bV0gPSBwCisrI2VuZGlmCisrCisrI2lmbmRlZiBYRjg2X0hBU19TQ1JOX0NPTlYKKysjZGVmaW5lIHhmODZTY3JlZW5Ub1Njcm4ocykgeGY4NlNjcmVlbnNbKHMpLT5teU51bV0KKysjZGVmaW5lIHhmODZTY3JuVG9TY3JlZW4ocykgc2NyZWVuSW5mby5zY3JlZW5zWyhzKS0+c2NybkluZGV4XQorKyNlbmRpZgorKworKyNpZm5kZWYgWEY4Nl9TQ1JOX0lOVEVSRkFDRQorKworKyNkZWZpbmUgU0NSTl9BUkdfVFlQRSBpbnQKKysjZGVmaW5lIFNDUk5fSU5GT19QVFIoYXJnMSkgU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVuc1soYXJnMSldCisrCisrI2RlZmluZSBTQ1JFRU5fQVJHX1RZUEUgaW50CisrI2RlZmluZSBTQ1JFRU5fUFRSKGFyZzEpIFNjcmVlblB0ciBwU2NyZWVuID0gc2NyZWVuSW5mby5zY3JlZW5zWyhhcmcxKV0KKysKKysjZGVmaW5lIFNDUkVFTl9JTklUX0FSR1NfREVDTCBpbnQgaW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YKKysKKysjZGVmaW5lIEJMT0NLSEFORExFUl9BUkdTX0RFQ0wgaW50IGFyZywgcG9pbnRlciBibG9ja0RhdGEsIHBvaW50ZXIgcFRpbWVvdXQsIHBvaW50ZXIgcFJlYWRtYXNrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHUyBhcmcsIGJsb2NrRGF0YSwgcFRpbWVvdXQsIHBSZWFkbWFzaworKworKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1NfREVDTCBpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbgorKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1Mgc2NybkluZGV4LCBwU2NyZWVuCisrCisrI2RlZmluZSBBREpVU1RfRlJBTUVfQVJHU19ERUNMIGludCBhcmcsIGludCB4LCBpbnQgeSwgaW50IGZsYWdzCisrCisrI2RlZmluZSBTV0lUQ0hfTU9ERV9BUkdTX0RFQ0wgaW50IGFyZywgRGlzcGxheU1vZGVQdHIgbW9kZSwgaW50IGZsYWdzCisrCisrI2RlZmluZSBGUkVFX1NDUkVFTl9BUkdTX0RFQ0wgaW50IGFyZywgaW50IGZsYWdzCisrI2RlZmluZSBGUkVFX1NDUkVFTl9BUkdTKHgpICh4KS0+c2NybkluZGV4LCAwCisrCisrI2RlZmluZSBWVF9GVU5DX0FSR1NfREVDTCBpbnQgYXJnLCBpbnQgZmxhZ3MKKysjZGVmaW5lIFZUX0ZVTkNfQVJHUyhmbGFncykgcFNjcm4tPnNjcm5JbmRleCwgKGZsYWdzKQorKworKyNkZWZpbmUgWEY4Nl9FTkFCTEVESVNBQkxFRkJfQVJHKHgpICgoeCktPnNjcm5JbmRleCkKKysjZWxzZQorKyNkZWZpbmUgU0NSTl9BUkdfVFlQRSBTY3JuSW5mb1B0cgorKyNkZWZpbmUgU0NSTl9JTkZPX1BUUihhcmcxKSBTY3JuSW5mb1B0ciBwU2NybiA9IChhcmcxKQorKworKyNkZWZpbmUgU0NSRUVOX0FSR19UWVBFIFNjcmVlblB0cgorKyNkZWZpbmUgU0NSRUVOX1BUUihhcmcxKSBTY3JlZW5QdHIgcFNjcmVlbiA9IChhcmcxKQorKworKyNkZWZpbmUgU0NSRUVOX0lOSVRfQVJHU19ERUNMIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YKKysKKysjZGVmaW5lIEJMT0NLSEFORExFUl9BUkdTX0RFQ0wgU2NyZWVuUHRyIGFyZywgcG9pbnRlciBwVGltZW91dCwgcG9pbnRlciBwUmVhZG1hc2sKKysjZGVmaW5lIEJMT0NLSEFORExFUl9BUkdTIGFyZywgcFRpbWVvdXQsIHBSZWFkbWFzaworKworKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1NfREVDTCBTY3JlZW5QdHIgcFNjcmVlbgorKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1MgcFNjcmVlbgorKworKyNkZWZpbmUgQURKVVNUX0ZSQU1FX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcsIGludCB4LCBpbnQgeQorKyNkZWZpbmUgU1dJVENIX01PREVfQVJHU19ERUNMIFNjcm5JbmZvUHRyIGFyZywgRGlzcGxheU1vZGVQdHIgbW9kZQorKworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHU19ERUNMIFNjcm5JbmZvUHRyIGFyZworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHUyh4KSAoeCkKKysKKysjZGVmaW5lIFZUX0ZVTkNfQVJHU19ERUNMIFNjcm5JbmZvUHRyIGFyZworKyNkZWZpbmUgVlRfRlVOQ19BUkdTKGZsYWdzKSBwU2NybgorKworKyNkZWZpbmUgWEY4Nl9FTkFCTEVESVNBQkxFRkJfQVJHKHgpICh4KQorKworKyNlbmRpZgorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItZHJpdmVyLmMgYi9zcmMvb21hcGZiLWRyaXZlci5jCitpbmRleCAwNzk4OWY1Li40ODZmZmE0IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1kcml2ZXIuYworKysrIGIvc3JjL29tYXBmYi1kcml2ZXIuYworQEAgLTQ0LDYgKzQ0LDggQEAKKyAKKyAjaW5jbHVkZSAiZXhhLmgiCisgCisrI2luY2x1ZGUgImNvbXBhdC1hcGkuaCIKKysKKyAjaWZkZWYgSEFWRV9YRVhUUFJPVE9fNzEKKyAjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvZHBtc2NvbnN0Lmg+CisgI2Vsc2UKK0BAIC03MCwxMCArNzIsMTAgQEAKKyAKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcm9iZShEcml2ZXJQdHIgZHJ2LCBpbnQgZmxhZ3MpOworIHN0YXRpYyBCb29sIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncyk7Cistc3RhdGljIEJvb2wgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKy1zdGF0aWMgQm9vbCBPTUFQRkJFbnRlclZUKGludCBzY3JuSW5kZXgsIGludCBmbGFncyk7Cistc3RhdGljIHZvaWQgT01BUEZCTGVhdmVWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpOworLXN0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoaW50IHNjcm5JbmRleCwgRGlzcGxheU1vZGVQdHIgbW9kZSwgaW50IGZsYWdzKTsKKytzdGF0aWMgQm9vbCBPTUFQRkJTY3JlZW5Jbml0KFNDUkVFTl9JTklUX0FSR1NfREVDTCk7Cisrc3RhdGljIEJvb2wgT01BUEZCRW50ZXJWVChWVF9GVU5DX0FSR1NfREVDTCk7Cisrc3RhdGljIHZvaWQgT01BUEZCTGVhdmVWVChWVF9GVU5DX0FSR1NfREVDTCk7Cisrc3RhdGljIEJvb2wgT01BUEZCU3dpdGNoTW9kZShTV0lUQ0hfTU9ERV9BUkdTX0RFQ0wpOworIAorIHN0YXRpYyBCb29sCisgT01BUEZCRW5zdXJlUmVjKFNjcm5JbmZvUHRyIHBTY3JuKQorQEAgLTQ4MSw3ICs0ODMsNyBAQCBPTUFQRkJYdlNjcmVlbkluaXQoU2NyZWVuUHRyIHBTY3JlZW4pCisgfQorIAorIHN0YXRpYyBCb29sCistT01BUEZCQ2xvc2VTY3JlZW4oaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4pCisrT01BUEZCQ2xvc2VTY3JlZW4oQ0xPU0VfU0NSRUVOX0FSR1NfREVDTCkKKyB7CisgCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbcFNjcmVlbi0+bXlOdW1dOworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKK0BAIC00OTAsMTEgKzQ5MiwxMSBAQCBPTUFQRkJDbG9zZVNjcmVlbihpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbikKKyAKKyAJcFNjcmVlbi0+Q2xvc2VTY3JlZW4gPSBvZmItPkNsb3NlU2NyZWVuOworIAkKKy0JcmV0dXJuICgqcFNjcmVlbi0+Q2xvc2VTY3JlZW4pKHNjcm5JbmRleCwgcFNjcmVlbik7CisrCXJldHVybiAoKnBTY3JlZW4tPkNsb3NlU2NyZWVuKShDTE9TRV9TQ1JFRU5fQVJHUyk7CisgfQorIAorIHN0YXRpYyBCb29sCistT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK09NQVBGQlNjcmVlbkluaXQoU0NSRUVOX0lOSVRfQVJHU19ERUNMKQorIHsKKyAJU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVuc1twU2NyZWVuLT5teU51bV07CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworQEAgLTUxNiw3ICs1MTgsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorIAkgICAgICAgICAgICAgICAgb2ZiLT5mZCwgMCk7CisgCWlmIChvZmItPmZiID09IE1BUF9GQUlMRUQpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiTWFwcGluZyBmcmFtZWJ1ZmZlciBtZW1vcnkgZmFpbGVkLCB3YW50ZWQgJWQgYnl0ZXMuXG4iLCBvZmItPm1lbV9pbmZvLnNpemUpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiTWFwcGluZyBmcmFtZWJ1ZmZlciBtZW1vcnkgZmFpbGVkLCB3YW50ZWQgJWQgYnl0ZXMuXG4iLCBvZmItPm1lbV9pbmZvLnNpemUpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTI2LDcgKzUyOCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJLyogT25seSBzdXBwb3J0IFRydWVDb2xvciBmb3Igbm93ICovCisgCWlmICghbWlTZXRWaXN1YWxUeXBlcyhwU2Nybi0+ZGVwdGgsIFRydWVDb2xvck1hc2ssCisgCQlwU2Nybi0+cmdiQml0cywgcFNjcm4tPmRlZmF1bHRWaXN1YWwpKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgInZpc3VhbCB0eXBlIHNldHVwIGZhaWxlZCIKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgInZpc3VhbCB0eXBlIHNldHVwIGZhaWxlZCIKKyAJCSAgICAgICAgICAgIiBmb3IgJWQgYml0cyBwZXIgcGl4ZWwgWzFdXG4iLAorIAkJICAgICAgICAgICBwU2Nybi0+Yml0c1BlclBpeGVsKTsKKyAJCXJldHVybiBGQUxTRTsKK0BAIC01MzQsNyArNTM2LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkvKiBTZXQgdXAgcGl4bWFwIGRlcHRoIGluZm9ybWF0aW9uICovCisgCWlmICghbWlTZXRQaXhtYXBEZXB0aHMoKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsWF9FUlJPUiwicGl4bWFwIGRlcHRoIHNldHVwIGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsWF9FUlJPUiwicGl4bWFwIGRlcHRoIHNldHVwIGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAKK0BAIC01NDYsNyArNTQ4LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICAgICAgICAgICAgICBwU2Nybi0+dmlydHVhbFksIHBTY3JuLT54RHBpLAorIAkgICAgICAgICAgICAgICAgICBwU2Nybi0+eURwaSwgcFNjcm4tPmRpc3BsYXlXaWR0aCwKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPmJpdHNQZXJQaXhlbCkpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiZmJTY3JlZW5Jbml0IGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJmYlNjcmVlbkluaXQgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTU2Nyw3ICs1NjksNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgCS8qIEluaXRpYWxpemUgWFJlbmRlciBmYWxsYmFja3MgKi8KKyAJaWYgKCFmYlBpY3R1cmVJbml0KHBTY3JlZW4sIE5VTEwsIDApKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgImZiUGljdHVyZUluaXQgZmFpbGVkXG4iKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgImZiUGljdHVyZUluaXQgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAkKK0BAIC01NzksNyArNTgxLDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkvKiBJbml0aWFsaXplIGRlZmF1bHQgY29sb3JtYXAgKi8KKyAJaWYgKCFtaUNyZWF0ZURlZkNvbG9ybWFwKHBTY3JlZW4pKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCSAgICAgICAgICAgImNyZWF0aW5nIGRlZmF1bHQgY29sb3JtYXAgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorQEAgLTU4OSw3ICs1OTEsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkvKiBUaGlzIGlzIG5vbi1mYXRhbCBzaW5jZSB3ZSBtaWdodCBiZSBydW5uaW5nIGFnYWluc3Qgb2xkZXIKKyAJCSAqIGtlcm5lbCBkcml2ZXIgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5IGRvIGJhc2ljIDJEIHN0dWZmLi4uCisgCQkgKi8KKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiUmVhZGluZyBwbGFuZSBpbmZvIGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJSZWFkaW5nIHBsYW5lIGluZm8gZmFpbGVkXG4iKTsKKyAJfSBlbHNlIGlmICghb2ZiLT5kc3MpIHsKKyAKKyAJCW9mYi0+cGxhbmVfaW5mby5lbmFibGVkID0gMTsKK0BAIC02MDIsNyArNjA0LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJfQorIAorIAkJaWYgKGlvY3RsIChvZmItPmZkLCBPTUFQRkJfU0VUVVBfUExBTkUsICZvZmItPnBsYW5lX2luZm8pKSB7CistCQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCisrCQkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJCSAgICAgICAgICAgICIlczogUGxhbmUgc2V0dXAgZmFpbGVkOiAlc1xuIiwKKyAJCQkgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHN0cmVycm9yKGVycm5vKSk7CisgCQkJcmV0dXJuIEZBTFNFOworQEAgLTY0NSw5ICs2NDcsMTAgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlyZXR1cm4gVFJVRTsKKyB9CisgCistc3RhdGljIEJvb2wgT01BUEZCU3dpdGNoTW9kZShpbnQgc2NybkluZGV4LCBEaXNwbGF5TW9kZVB0ciBtb2RlLCBpbnQgZmxhZ3MpCisrc3RhdGljIEJvb2wgT01BUEZCU3dpdGNoTW9kZShTV0lUQ0hfTU9ERV9BUkdTX0RFQ0wpCisgeworLQlyZXR1cm4geGY4NlNldFNpbmdsZU1vZGUgKHhmODZTY3JlZW5zW3Njcm5JbmRleF0sIG1vZGUsIFJSX1JvdGF0ZV8wKTsKKysJU0NSTl9JTkZPX1BUUihhcmcpOworKwlyZXR1cm4geGY4NlNldFNpbmdsZU1vZGUgKHBTY3JuLCBtb2RlLCBSUl9Sb3RhdGVfMCk7CisgfQorIAorIHZvaWQKK0BAIC02OTksMTQgKzcwMiwxNCBAQCBPTUFQRkJQcmludENhcGFiaWxpdGllcyhTY3JuSW5mb1B0ciBwU2NybiwKKyAvKioqIFVuaW1wbGVtZW50ZWQ6ICovCisgCisgc3RhdGljIEJvb2wKKy1PTUFQRkJFbnRlclZUKGludCBzY3JuSW5kZXgsIGludCBmbGFncykKKytPTUFQRkJFbnRlclZUKFZUX0ZVTkNfQVJHU19ERUNMKQorIHsKKyAJeGY4Nk1zZyhYX05PVF9JTVBMRU1FTlRFRCwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworIAlyZXR1cm4gVFJVRTsKKyB9CisgCisgc3RhdGljIHZvaWQKKy1PTUFQRkJMZWF2ZVZUKGludCBzY3JuSW5kZXgsIGludCBmbGFncykKKytPTUFQRkJMZWF2ZVZUKFZUX0ZVTkNfQVJHU19ERUNMKQorIHsKKyAJeGY4Nk1zZyhYX05PVF9JTVBMRU1FTlRFRCwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworIH0KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwYjliMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRml4IGVycm9ycyB3aXRoIGdsaWJjIDIuMjAKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3N0cmluZy5oOjYzNDowLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1MywKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL21pc2MuaDoxMTUsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy94Zjg2c3RyLmg6MzcsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy94Zjg2Lmg6NDQsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3dvcmsvaTU4Ni1vZS1saW51eC94Zjg2LXZpZGVvLW9tYXBmYi8yXzAuMS4xK2dpdHJBVVRPSU5DKzI4YzAwNmM5NGUtcjIxLjcvZ2l0L3NyYy9vbWFwZmIteHYtYmxpenphcmQuYzozMzoKKy9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1Nzk6MTogZXJyb3I6IGV4cGVjdGVkIGlkZW50aWZpZXIgb3IgJygnIGJlZm9yZSAnX19leHRlbnNpb25fXycKKyBzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG4pOworIF4KK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTMsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9taXNjLmg6MTE1LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4NnN0ci5oOjM3LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4Ni5oOjQ0LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy93b3JrL2k1ODYtb2UtbGludXgveGY4Ni12aWRlby1vbWFwZmIvMl8wLjEuMStnaXRyQVVUT0lOQysyOGMwMDZjOTRlLXIyMS43L2dpdC9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYzoyODoKKy9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1Nzk6MTogZXJyb3I6IGV4cGVjdGVkIGlkZW50aWZpZXIgb3IgJygnIGJlZm9yZSAnX19leHRlbnNpb25fXycKKyBzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG4pOworIF4KKworU2luZ2VkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZ2l0L3NyYy9vbWFwZmIteHYtYmxpenphcmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9vbWFwZmIteHYtYmxpenphcmQuYwkyMDE0LTA4LTI4IDA1OjE2OjI1LjY4NDA3MDU4NyAtMDcwMAorKysrIGdpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMJMjAxNC0wOC0yOCAxOTowNTozOS40NDAwNzA1ODcgLTA3MDAKK0BAIC0zMCw2ICszMCw3IEBACisgICogIC0KKyAgKi8KKyAKKysjaW5jbHVkZSA8eG9yZy1zZXJ2ZXIuaD4KKyAjaW5jbHVkZSAieGY4Ni5oIgorICNpbmNsdWRlICJ4Zjg2X09TbGliLmgiCisgI2luY2x1ZGUgInhmODZ4di5oIgorSW5kZXg6IGdpdC9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCTIwMTQtMDgtMjggMDU6MTY6MjUuNjg0MDcwNTg3IC0wNzAwCisrKysgZ2l0L3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCTIwMTQtMDgtMjggMTk6MDU6NTEuNzgwMDcwNTg3IC0wNzAwCitAQCAtMjUsNiArMjUsNyBAQAorICAqIEdlbmVyaWMgZnVuY3Rpb25zIGZvciB0aGUgWFYgZHJpdmVyCisgICovCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgInhmODYuaCIKKyAjaW5jbHVkZSAieGY4Nl9PU2xpYi5oIgorICNpbmNsdWRlICJ4Zjg2eHYuaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZWI4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmJfZ2l0LmJiCkBAIC0wLDAgKzEsMzUgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBmcmFtZWJ1ZmZlciBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gIm9tYXBmYiBkcml2ZXIgc3VwcG9ydHMgdGhlIGJhc2ljIFRleGFzIEluc3RydW1lbnRzIE9NQVAgXAorZnJhbWVidWZmZXIuIgorCitMSUNFTlNFID0gIk1JVC1YICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjNlMmNiYWM1Mzg2M2Y2MGUyZjQzMzQzZmIzNDM2N2YiCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSIKKworU1JDUkVWID0gIjMzZTM2YzEyZGRlMzM2ZWRiZGQzNDYyNmRkOGFkZmNhZWJjOGZiYjgiCitQUiA9ICIke0lOQ19QUn0uNyIKK1BWID0gIjAuMS4xK2dpdHIke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uc2NtLmRlYmlhbi5vcmcvY29sbGFiLW1haW50L3hmODYtdmlkZW8tb21hcGZiLmdpdCBcCisgIGZpbGU6Ly8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1SZXZlcnQtU2V0LWEtbGFyZ2UtQ1JUQy11cHBlci1saW1pdC10by1ub3QtcHJ1bmUtbGFyLnBhdGNoIFwKKyAgZmlsZTovLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaCBcCisgIGZpbGU6Ly8wMDAzLWZvcmNlLXBsYWluLW1vZGUucGF0Y2ggXAorICBmaWxlOi8vMDAwNC1ibGFja2xpc3QtdHYtb3V0LnBhdGNoIFwKKyAgZmlsZTovLzAwMDUtQXR0ZW1wdC10by1maXgtVlJGQi5wYXRjaCBcCisgIGZpbGU6Ly8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaCBcCisgIGZpbGU6Ly8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkZfYXJtdjdhID0gIiAtLWVuYWJsZS1uZW9uICIKK0NGTEFHUyArPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0veG9yZyAiCisKKyMgVXNlIG92ZXJsYXkgMiBvbiBvbWFwMyB0byBlbmFibGUgb3RoZXIgYXBwcyB0byB1c2Ugb3ZlcmxheSAxIChlLmcuIGRtYWkgb3Igb21hcGZicGxheSkKK2RvX2NvbXBpbGVfcHJlcGVuZF9hcm12N2EgKCkgeworICAgICAgICBzZWQgLWkgLWUgczpmYjE6ZmIyOmcgJHtTfS9zcmMvb21hcGZiLXh2LmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZlc2FfMi4zLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12ZXNhXzIuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjUxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12ZXNhXzIuMy40LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWExZjA2MTBlYmRjNmYzMTRhOWZhNTEwMmE4YzVjMWIwIgorCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIEdlbmVyaWMgVmVzYSB2aWRlbyBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInZlc2EgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIGdlbmVyaWMgVkVTQSB2aWRlbyBjYXJkcy4gSXQgXAorY2FuIGRyaXZlIG1vc3QgVkVTQS1jb21wYXRpYmxlIHZpZGVvIGNhcmRzLCBidXQgb25seSBtYWtlcyB1c2Ugb2YgdGhlIFwKK2Jhc2ljIHN0YW5kYXJkIFZFU0EgY29yZSB0aGF0IGlzIGNvbW1vbiB0byB0aGVzZSBjYXJkcy4gVGhlIGRyaXZlciBcCitzdXBwb3J0cyBkZXB0aHMgOCwgMTUgMTYgYW5kIDI0LiIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHJhbmRycHJvdG8gbGlicGNpYWNjZXNzIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitSUkVDT01NRU5EU18ke1BOfSArPSAieHNlcnZlci14b3JnLW1vZHVsZS1saWJpbnQxMCIKKworU1JDX1VSSVttZDVzdW1dID0gImE4OTNjMzdjNTg5ZjdhMzFjZWE5MjlhNWQ4OTZhMGUyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiZGRmNGQ4NzlkZDZmNjcwODhlY2IyMDNhMzFlMTIzMzRhYWI5ODAxNzRiZDA5MDk5MzBhMjFmMzJlMjUxYzEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzOWQwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZS8wMDAyLWFkZC1vcHRpb24tZm9yLXZtd2dmeC5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6U3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGYxMDNkNmY1NzA2NzFjNjQ5Y2NkN2IyMjVlNmQ2YzlmMTQzNzE4ODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNSBKdW4gMjAxNCAxNjoxNjo0NCArMDEwMAorU3ViamVjdDogW1BBVENIIDIvMl0gYWRkIG9wdGlvbiBmb3Igdm13Z2Z4CisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgNDkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmU0MGVkNy4uOGUxNTMwNyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjQsNiArNjQsMTMgQEAgQUNfQVJHX0VOQUJMRSh2bXdhcmVjdHJsLWNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtWTVdBUkVDVFJMPSRlbmFibGV2YWxdLCBbVk1XQVJFQ1RSTD1ub10pCisgQU1fQ09ORElUSU9OQUwoQlVJTERfVk1XQVJFQ1RSTCwgW3Rlc3QgIngkVk1XQVJFQ1RSTCIgPSB4eWVzXSkKKyAKKysjIERlZmluZSBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gYnVpbGQgdGhlIHZtd2dmeCBkcml2ZXIKKytBQ19BUkdfRU5BQkxFKHZtd2dmeCwKKysgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdm13Z2Z4XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIHZtd2dmeCBkcml2ZXIgKEtNUy8zRCkgKGRlZmF1bHQ6IGVuYWJsZWQpXSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVk1XR0ZYPSIkZW5hYmxldmFsIl0sIFtWTVdHRlg9InllcyJdKQorK0FNX0NPTkRJVElPTkFMKEJVSUxEX1ZNV0dGWCwgdGVzdCAieCRWTVdHRlgiID0geHllcykKKysKKyAjIFN0b3JlIHRoZSBsaXN0IG9mIHNlcnZlciBkZWZpbmVkIG9wdGlvbmFsIGV4dGVuc2lvbnMgaW4gUkVRVUlSRURfTU9EVUxFUworIFhPUkdfRFJJVkVSX0NIRUNLX0VYVChSQU5EUiwgcmFuZHJwcm90bykKKyBYT1JHX0RSSVZFUl9DSEVDS19FWFQoUkVOREVSLCByZW5kZXJwcm90bykKK0BAIC04NSwxMSArOTIsNiBAQCBQS0dfQ0hFQ0tfRVhJU1RTKFt4b3JnLXNlcnZlciA+PSAxLjQuOTldLAorICAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YT1JHX1NFUlZFUl8xXzVfMF0sIDEsCisgICAgICAgICAgICAgICAgICBbSGFzIHZlcnNpb24gMS41LjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pXSkKKyAKKy1QS0dfQ0hFQ0tfRVhJU1RTKFt4b3JnLXNlcnZlciA+PSAxLjcuMF0sCistICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hPUkdfU0VSVkVSXzFfN18wXSwgMSwKKy0gICAgICAgICAgICAgICAgIFtIYXMgdmVyc2lvbiAxLjcuMCBvciBncmVhdGVyIG9mIHRoZSBYc2VydmVyXSkKKy0JCSBCVUlMRF9WTVdHRlg9eWVzXSxbQlVJTERfVk1XR0ZYPW5vXSkKKy0KKyBQS0dfQ0hFQ0tfRVhJU1RTKFt4b3JnLXNlcnZlciA+PSAxLjEyLjBdLAorICAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YT1JHX1NFUlZFUl8xXzEyXzBdLCAxLAorICAgICAgICAgICAgICAgICAgW0hhcyB2ZXJzaW9uIDEuMTIuMCBvciBncmVhdGVyIG9mIHRoZSBYc2VydmVyXSldKQorQEAgLTExNCwzOSArMTE2LDI4IEBAIEFNX0NPTkRJVElPTkFMKFhTRVJWRVJfTElCUENJQUNDRVNTLCB0ZXN0ICJ4JFhTRVJWRVJfTElCUENJQUNDRVNTIiA9IHh5ZXMpCisgCisgQUNfU1VCU1QoW21vZHVsZWRpcl0pCisgCistaWYgdGVzdCB4JEJVSUxEX1ZNV0dGWCA9IHh5ZXM7IHRoZW4KKy0JUEtHX0NIRUNLX01PRFVMRVMoW0xJQkRSTV0sIFtsaWJkcm1dLFtdLFtCVUlMRF9WTVdHRlg9bm9dKQorLWZpCistaWYgdGVzdCB4JEJVSUxEX1ZNV0dGWCA9IHh5ZXM7IHRoZW4KKy0jCistIyBFYXJseSB2ZXJzaW9ucyBvZiBtZXNhIDEwIGZvcmdvdCB0byBidW1wIHRoZSBYQSBtYWpvciB2ZXJzaW9uIG51bWJlciBpbgorLSMgdGhlIHhhX3RyYWNrZXIuaCBoZWFkZXIKKy0jCistCVBLR19DSEVDS19NT0RVTEVTKFtYQVRSQUNLRVJdLCBbeGF0cmFja2VyID49IDAuNC4wXSwKKy0JCQkgIFtQS0dfQ0hFQ0tfRVhJU1RTKFt4YXRyYWNrZXIgPSAyLjAuMF0sCistCSAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWEFfMl0sIDEsCistICAgICAgICAgICAgICAgCQkgIFtIYXMgdmVyc2lvbiAyIG9mIFhBXSldKV0sCistCQkJICBbQlVJTERfVk1XR0ZYPW5vXSkKKy0jCistIyBDaGVjayBmb3IgcHJpbWUuCistIworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBLZXJuZWwgTW9kZSBTZXR0aW5nIGFuZCAzRF0pCisraWYgdGVzdCB4JFZNV0dGWCA9IHh5ZXM7IHRoZW4KKysJUEtHX0NIRUNLX01PRFVMRVMoW0xJQkRSTV0sIFtsaWJkcm1dKQorKwkjIENoZWNrIGZvciBwcmltZS4KKyAJUEtHX0NIRUNLX0VYSVNUUyhbbGliZHJtID49IDIuNC4zOF0sCisgCQkJIFtBQ19ERUZJTkUoW0hBVkVfTElCRFJNXzJfNF8zOF0sIDEsCisgCQkJIFtIYXMgdmVyc2lvbiAyLjQuMzggb3IgZ3JlYXRlciBvZiBsaWJkcm1dKV0pCistZmkKKyAKKy1EUklWRVJfTkFNRT12bXdhcmUKKy1BQ19TVUJTVChbRFJJVkVSX05BTUVdKQorLQorLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBLZXJuZWwgTW9kZSBTZXR0aW5nIGFuZCAzRF0pCistaWYgdGVzdCB4JEJVSUxEX1ZNV0dGWCA9IHh5ZXM7IHRoZW4KKy0JQUNfTVNHX1JFU1VMVChbeWVzXSkKKysJIyBFYXJseSB2ZXJzaW9ucyBvZiBtZXNhIDEwIGZvcmdvdCB0byBidW1wIHRoZSBYQSBtYWpvciB2ZXJzaW9uIG51bWJlcgorKwkjIGluIHRoZSB4YV90cmFja2VyLmggaGVhZGVyCisrCVBLR19DSEVDS19NT0RVTEVTKFtYQVRSQUNLRVJdLCBbeGF0cmFja2VyID49IDAuNC4wXSwKKysJCQkgIFtQS0dfQ0hFQ0tfRVhJU1RTKFt4YXRyYWNrZXIgPSAyLjAuMF0sCisrCSAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWEFfMl0sIDEsCisrICAgICAgICAgICAgICAgCQkgIFtIYXMgdmVyc2lvbiAyIG9mIFhBXSldKV0pCisgICAgICAgICBBQ19ERUZJTkUoW0JVSUxEX1ZNV0dGWF0sIDEsIFtCdWlsZGluZyB0aGUgdm13Z2Z4IGRyaXZlciBwYXRoXSkKKysJQUNfTVNHX1JFU1VMVChbeWVzXSkKKyBlbHNlCisgCUFDX01TR19SRVNVTFQoW25vXSkKKyBmaQorIAorLUFNX0NPTkRJVElPTkFMKEJVSUxEX1ZNV0dGWCwgdGVzdCAieCRCVUlMRF9WTVdHRlgiID0geHllcykKKytEUklWRVJfTkFNRT12bXdhcmUKKytBQ19TVUJTVChbRFJJVkVSX05BTUVdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbCisgICAgICAgICAgICAgICAgIE1ha2VmaWxlCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZV8xMy4xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmVfMTMuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Yjk4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmVfMTMuMS4wLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVk13YXJlIFNWR0EgZGlzcGxheSBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInZtd2FyZSBpcyBhbiBYb3JnIGRyaXZlciBmb3IgVk13YXJlIHZpcnR1YWwgdmlkZW8gY2FyZHMuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZmNkN2Q0MzdhOTU5YTE1ZmJlZTg3MDc3NDdjNmI1MyIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgeGluZXJhbWFwcm90byB2aWRlb3Byb3RvIGxpYnBjaWFjY2VzcyIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDItYWRkLW9wdGlvbi1mb3Itdm13Z2Z4LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGNiYTIyZmVkNGNiNjM5ZDVjNDI3NmY3ODkyYzU0M2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2MxZDI0NGU0YjFiNzdlOTIxMjY5NTc5NjVjZGM5ZmI4MmRlNGMyMTVjMDcwNmEzYThhYWZmNjkzOWU0YTBjYyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2LiotbGludXh8eDg2XzY0LiotbGludXgpJworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS12bXdnZngiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItY29tbW9uLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGQxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItY29tbW9uLmluYwpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIlggZHJpdmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExL2RyaXZlcnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitQRSA9ICIyIgorSU5DX1BSID0gInIyMSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL3hzZXJ2ZXIgeHByb3RvIHJhbmRycHJvdG8gdXRpbC1tYWNyb3MiCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9kcml2ZXIvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK0ZJTEVTXyR7UE59ICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiAke2xpYmRpcn0veG9yZy9tb2R1bGVzL2RyaXZlcnMvLmRlYnVnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC94c2VydmVyCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjIEZJWE1FOiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIGxpYnRvb2wgYXJjaGl2ZXMgKCoubGEpIGZyb20gbW9kdWxlcworIyBkaXJlY3RvcnksIGFzIHRoZXkgc2VydmUgbm8gdXNlZnVsIHB1cnBvc2UuIFVwc3RyZWFtIHNob3VsZCBmaXggTWFrZWZpbGUuYW0KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfS94b3JnL21vZHVsZXMgLXJlZ2V4ICIuKlwubGEkIiB8IHhhcmdzIHJtIC1mIC0tCit9CisKKyMgRnVuY3Rpb24gdG8gYWRkIHRoZSByZWxldmFudCBBQkkgZGVwZW5kZW5jeSB0byBkcml2ZXJzLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkCisjIGZyb20gYSBQQUNLQUdFRlVOQy4KK2RlZiBfYWRkX3hvcmdfYWJpX2RlcGVuZHMoZCwgbmFtZSk6CisgICAgIyBNYXAgb2YgQUJJIG5hbWVzIGV4cG9zZWQgaW4gdGhlIGRlcGVuZGVuY2llcyB0byBwa2ctY29uZmlnIHZhcmlhYmxlcworICAgIGFiaXMgPSB7CisgICAgICAidmlkZW8iOiAiYWJpX3ZpZGVvZHJ2IiwKKyAgICAgICJpbnB1dCI6ICJhYmlfeGlucHV0IgorICAgIH0KKworICAgIG91dHB1dCA9IG9zLnBvcGVuKCJwa2ctY29uZmlnIHhvcmctc2VydmVyIC0tdmFyaWFibGU9JXMiICUgYWJpc1tuYW1lXSkucmVhZCgpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIGFiaSA9ICIlc3hvcmctYWJpLSVzLSVzIiAlIChtbHByZWZpeCwgbmFtZSwgb3V0cHV0LnNwbGl0KCIuIilbMF0pCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwbiwgJyAnICsgYWJpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWlucHV0LmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1pbnB1dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYzA2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1pbnB1dC5pbmMKQEAgLTAsMCArMSwxMSBAQAoraW5jbHVkZSB4b3JnLWRyaXZlci1jb21tb24uaW5jCisKK0RFUEVORFMgKz0gImlucHV0cHJvdG8ga2Jwcm90byAiCisKK3B5dGhvbiBhZGRfeG9yZ19hYmlfZGVwZW5kcygpIHsKKyAgICBfYWRkX3hvcmdfYWJpX2RlcGVuZHMoZCwgImlucHV0IikKK30KK1BBQ0tBR0VGVU5DUyA9KyAiYWRkX3hvcmdfYWJpX2RlcGVuZHMiCisKK0ZJTEVTXyR7UE59ICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9pbnB1dC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9pbnB1dC8uZGVidWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItdmlkZW8uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLXZpZGVvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODI4MWUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLXZpZGVvLmluYwpAQCAtMCwwICsxLDggQEAKK2luY2x1ZGUgeG9yZy1kcml2ZXItY29tbW9uLmluYworCitERVBFTkRTID0rICJyZW5kZXJwcm90byB2aWRlb3Byb3RvIHhleHRwcm90byBmb250c3Byb3RvIgorCitweXRob24gYWRkX3hvcmdfYWJpX2RlcGVuZHMoKSB7CisgICAgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsICJ2aWRlbyIpCit9CitQQUNLQUdFRlVOQ1MgPSsgImFkZF94b3JnX2FiaV9kZXBlbmRzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3Mvbm9jb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzL25vY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzMGMxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzL25vY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitYT1JHX0RFRkFVTFRfT1BUSU9OUyBwdWxscyBpbiB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY3kgY2hhaW5zOgorCitYT1JHX0NXQVJORkxBR1MgLT4gQUNfUFJPR19DQ19DOTkKK1hPUkdfU1RSSUNUX09QVElPTiAtPiBBQ19QUk9HX0NDX0M5OSwgWE9SR19DV0FSTkZMQUdTCitYT1JHX01BTlBBR0VfU0VDVElPTlMgLT4gQUNfQ0FOT05JQ0FMX0hPU1QgLT4gQ2hlY2tzIGhvc3QgCisKK2VhY2ggb2Ygd2hpY2ggdHJpZ2dlcnMgdGhlIHVzZSBvZiB0aGUgaG9zdCBjb21waWxlci4gQXMgYW4gImFsbCIKK2FyY2hpdGVjdHVyZSBwYWNrYWdlLCBpdCBzaG91bGRuJ3QgbmVlZCBhIGNvbXBpbGVyIChhbmQgZG9lc24ndCkuCisKK1JQIDE3LzUvMjAxMQorCitJbmRleDogZW5jb2RpbmdzLTEuMC40L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVuY29kaW5ncy0xLjAuNC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDExLTA1LTE3IDIzOjM2OjE5LjUwNTA5NTg3NiArMDEwMAorKysrIGVuY29kaW5ncy0xLjAuNC9jb25maWd1cmUuYWMJMjAxMS0wNS0xNyAyMzo1NDoxNC45MzUwOTYxMjggKzAxMDAKK0BAIC00LDEyICs0LDEyIEBACisgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LWJ6aXAyXSkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKKy0jIFJlcXVpcmUgeG9yZy1tYWNyb3M6IFhPUkdfREVGQVVMVF9PUFRJT05TCisgbTRfaWZuZGVmKFtYT1JHX01BQ1JPU19WRVJTSU9OXSwKKyAJICBbbTRfZmF0YWwoW211c3QgaW5zdGFsbCB4b3JnLW1hY3JvcyAxLjMgb3IgbGF0ZXIgYmVmb3JlIHJ1bm5pbmcgYXV0b2NvbmYvYXV0b2dlbl0pXSkKKyBYT1JHX01BQ1JPU19WRVJTSU9OKDEuMykKKy1YT1JHX0RFRkFVTFRfT1BUSU9OUworLQorK1hPUkdfUkVMRUFTRV9WRVJTSU9OCisrWE9SR19DSEFOR0VMT0cKKytYT1JHX0lOU1RBTEwKKyBBQ19QUk9HX0lOU1RBTEwKKyAKKyAjIFJlcXVpcmUgWC5PcmcncyBmb250IHV0aWwgbWFjcm9zIDEuMiBvciBsYXRlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5nc18xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJUaGUgWG9yZyBmb250IGVuY29kaW5nIGZpbGVzIgorCitERVNDUklQVElPTiA9ICJUaGUgZW5jb2RpbmdzIHRoYXQgbWFwIHRvIHNwZWNpZmljIGNoYXJhY3RlcnMgZm9yIGEgXAorbnVtYmVyIG9mIFhvcmcgYW5kIGNvbW1vbiBmb250cy4iCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ZGE5M2YyZGFmMmQ1NTcyZmFhMmJmYWYwZGJkOWU3NiIKK1BFID0gIjEiCitQUiA9ICIke0lOQ19QUn0uMSIKKworREVQRU5EUyA9ICJta2ZvbnRzY2FsZS1uYXRpdmUgZm9udC11dGlsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiIKKworU1JDX1VSSSArPSAiZmlsZTovL25vY29tcGlsZXIucGF0Y2giCisKK2luaGVyaXQgYWxsYXJjaAorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1lbmNvZGluZ3NkaXI9JHtkYXRhZGlyfS9mb250cy9YMTEvZW5jb2RpbmdzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGYyZDY1NDZkNTE0YzVjYzRlY2Y3OGE2MDY1N2E1YzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2VkNjMxMjk4OGE0NWQyMzgxMmMyYWM3MDhiNDU5NWY2M2ZkN2E0OWM0ZGNkOWY2NmJkY2Q1MGQxMDU3ZDUzOSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhcy0xLjAuMy9ub2NvbXBpbGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzLTEuMC4zL25vY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5ZmI4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhcy0xLjAuMy9ub2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworWE9SR19ERUZBVUxUX09QVElPTlMgcHVsbHMgaW4gdGhlIGZvbGxvd2luZyBkZXBlbmRlbmN5IGNoYWluczoKKworWE9SR19DV0FSTkZMQUdTIC0+IEFDX1BST0dfQ0NfQzk5CitYT1JHX1NUUklDVF9PUFRJT04gLT4gQUNfUFJPR19DQ19DOTksIFhPUkdfQ1dBUk5GTEFHUworWE9SR19NQU5QQUdFX1NFQ1RJT05TIC0+IEFDX0NBTk9OSUNBTF9IT1NUIC0+IENoZWNrcyBob3N0IAorCitlYWNoIG9mIHdoaWNoIHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIGhvc3QgY29tcGlsZXIuIEFzIGFuICJhbGwiCithcmNoaXRlY3R1cmUgcGFja2FnZSwgaXQgc2hvdWxkbid0IG5lZWQgYSBjb21waWxlciAoYW5kIGRvZXNuJ3QpLgorCitSUCAxNy81LzIwMTEKKworZGlmZiAtdU5yIGZvbnQtYWxpYXMtMS4wLjMub3JpZy8vY29uZmlndXJlLmFjIGZvbnQtYWxpYXMtMS4wLjMvY29uZmlndXJlLmFjCistLS0gZm9udC1hbGlhcy0xLjAuMy5vcmlnLy9jb25maWd1cmUuYWMJMjAxMS0wNS0xOCAyMToyOToxOC4zNzgyNTg2NDMgKzAyMDAKKysrKyBmb250LWFsaWFzLTEuMC4zL2NvbmZpZ3VyZS5hYwkyMDExLTA1LTE4IDIxOjMyOjA2Ljg2NTI1ODU5MyArMDIwMAorQEAgLTI4LDEyICsyOCwxMiBAQAorIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCistIyBSZXF1aXJlIHhvcmctbWFjcm9zOiBYT1JHX0RFRkFVTFRfT1BUSU9OUworIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgCSAgW200X2ZhdGFsKFttdXN0IGluc3RhbGwgeG9yZy1tYWNyb3MgMS4zIG9yIGxhdGVyIGJlZm9yZSBydW5uaW5nIGF1dG9jb25mL2F1dG9nZW5dKV0pCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjMpCistWE9SR19ERUZBVUxUX09QVElPTlMKKy0KKytYT1JHX1JFTEVBU0VfVkVSU0lPTgorK1hPUkdfQ0hBTkdFTE9HCisrWE9SR19JTlNUQUxMCisgQUNfUFJPR19JTlNUQUxMCisgCisgWE9SR19GT05UUk9PVERJUgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTEwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXNfMS4wLjMuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYIGZvbnQgYWxpYXNlcyIKKworcmVxdWlyZSB4b3JnLWZvbnQtY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJmMDE1OGI4OWJlNDkzZDUyM2Q2OWQ5ZjI5MjY1MDM4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2N5cmlsbGljL2ZvbnRzLmFsaWFzO21kNT1mNDA3OTViMDY0MGQ2Nzg1ODI2YWVjZDNiMTZmNjEyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly83NWRwaS9mb250cy5hbGlhczttZDU9NmJjNDgwMjNmMmFlN2YzYmZjMTA1ZGI3YjBlZTZiNDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWlzYy9mb250cy5hbGlhczttZDU9YThlYzA1ZDUyODQzMWQ0Yzk3MDNiNTVhN2VmZDY3YTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vMTAwZHBpL2ZvbnRzLmFsaWFzO21kNT04NWJlYmQ2Y2EyMTNhYTY1NmMzMDFhNzJlYjQzOTdjYiIKKworU1JDX1VSSSArPSAiZmlsZTovL25vY29tcGlsZXIucGF0Y2giCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MtbmF0aXZlIGZvbnQtdXRpbC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJlbmNvZGluZ3MgZm9udC11dGlsIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImZvbnQtdXRpbC1uYXRpdmUiCisKK2luaGVyaXQgYWxsYXJjaAorCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZDI1ZjY0Nzk2ZmVmMzRiNTNiNDM5YzJlOWVmYTU2MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YjQ1M2IyYWFlMWNmYTgwOTAwMDljYTAzNzAzN2I4YzVlMzMzNTUwNjUxZDVhMTU4YjcyNjRjZTFkNDcyYzlhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtdXRpbF8xLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg1MTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJYLk9yZyBmb250IHBhY2thZ2UgY3JlYXRpb24vaW5zdGFsbGF0aW9uIHV0aWxpdGllcyIKKworcmVxdWlyZSB4b3JnLWZvbnQtY29tbW9uLmluYworCisjVW5pY29kZSBpcyBNSVQKK0xJQ0VOU0UgPSAiQlNEICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWRmMjA4ZWM2NWViODRjZTViYjhkODJkOGYzYjk2NzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdWNzMmFueS5jO2VuZGxpbmU9Mjg7bWQ1PTgzNTdkYzU2N2ZjNjI4YmQxMjY5NmYxNWIyYTMzYmNiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2JkZnRydW5jYXRlLmM7ZW5kbGluZT0yNjttZDU9NGY4MmZmYzEwMWExYjE2NWVhZTljNjk5OGFiZmY5MzcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFwLUlTTzg4NTktMTtiZWdpbmxpbmU9OTtlbmRsaW5lPTIzO21kNT0xY2VjYjk4NDA2MzI0OGYyOWZmZTVjNDZmNWMwNGYzNCIKKworREVQRU5EUyA9ICJlbmNvZGluZ3MgdXRpbC1tYWNyb3MiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ1dGlsLW1hY3Jvcy1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJta2ZvbnRkaXIgbWtmb250c2NhbGUgZW5jb2RpbmdzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIm1rZm9udGRpci1uYXRpdmUgbWtmb250c2NhbGUtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjIzNzU2ZGFiODA5ZjllYzUwMTFiYjI3ZmIyYzNjN2Q2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFhN2ViZGIwNzE1MTA2ZGQyNTUwODJmMjMxMGRiYWEyY2Q3ZTIyNTk1N2MyYTc3ZDcxOTcyMGM3Y2M5MmI5MjEiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZm9udHV0aWxfc3lzcm9vdF9wcmVwcm9jZXNzIgorZm9udHV0aWxfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtkYXRhZGlyfS9mb250cy8gJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9mb250cy8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctZm9udC1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjY3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctZm9udC1jb21tb24uaW5jCkBAIC0wLDAgKzEsNDIgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorTElDRU5TRSA9ICJNSVQtWCIKKworREVQRU5EUyA9ICIgZW5jb2RpbmdzIGZvbnQtYWxpYXMgZm9udC11dGlsLW5hdGl2ZSBta2ZvbnRkaXItbmF0aXZlIG1rZm9udHNjYWxlLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gImVuY29kaW5ncyBmb250LXV0aWwgZm9udC1hbGlhcyIKKworWE9SR19QTiA9ICIke0JQTn0iCitJTkNfUFIgPSAicjIiCisKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2ZvbnQvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbWtmb250c2NhbGUtbmF0aXZlIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FTUFLRSArPSAiRkNDQUNIRT0vYmluL3RydWUgVVRJTF9ESVI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9XCRcKE1BUEZJTEVTX1BBVEhcKSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9L1gxMS9mb250cyAtdHlwZSBmIC1uYW1lIGZvbnRzLmRpciB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtsaWJkaXJ9L1gxMS9mb250cyAtdHlwZSBmIC1uYW1lIGZvbnRzLnNjYWxlIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ZvbnRzL1gxMSAtdHlwZSBmIC1uYW1lIGZvbnRzLmRpciB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtkYXRhZGlyfS9mb250cy9YMTEgLXR5cGUgZiAtbmFtZSBmb250cy5zY2FsZSB8IHhhcmdzIHJtIC1mCQorfQorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS9YMTEvZm9udHMgJHtkYXRhZGlyfSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICAgICAgZm9yIGZvbnRkaXIgaW4gYGZpbmQgJEQvdXNyL2xpYi9YMTEvZm9udHMgLXR5cGUgZGA7IGRvCisgICAgICAgICAgICAgICAgbWtmb250ZGlyICRmb250ZGlyCisgICAgICAgICAgICAgICAgbWtmb250c2NhbGUgJGZvbnRkaXIKKyAgICAgICAgZG9uZQorICAgICAgICBmb3IgZm9udGRpciBpbiBgZmluZCAkRC91c3Ivc2hhcmUvZm9udHMvWDExIC10eXBlIGRgOyBkbworICAgICAgICAgICAgICAgIG1rZm9udGRpciAkZm9udGRpcgorICAgICAgICAgICAgICAgIG1rZm9udHNjYWxlICRmb250ZGlyCisgICAgICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjZDFiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiWG9yZyBtaW5pbWFsIGZvbnRzIGRhdGEiCitERVNDUklQVElPTiA9ICJNaW5pbWFsIGZvbnRzIHJlcXVpcmVkIGJ5IFgub3JnLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCisKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbWlzYy9mb250cy5kaXI7bWQ1PTgyYTE0M2Q5NGQ2YTk3NGFhZmU5NzEzMmQyZDUxOWFiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLy4uL21pc2MvY3Vyc29yLnBjZi5nejttZDU9NDBiYzgxMDAxZmVmNGMyMWNhMDhkZjQzMDUwMTRhMmEiCisKK1NSQ19VUkkgPSAiZmlsZTovL21pc2MiCisKK1BFID0gIjEiCitQUiA9ICJyMiIKKworaW5oZXJpdCBhbGxhcmNoIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBmb250LWFsaWFzIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1MgPSAiJHtXT1JLRElSfS9taXNjIgorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9YMTEvICR7ZGF0YWRpcn0vZm9udHMvWDExLyIKK1JERVBFTkRTXyR7UE59ICs9ICJmb250LWFsaWFzIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2ZvbnRzL1gxMS9taXNjCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vKiAke0R9LyR7ZGF0YWRpcn0vZm9udHMvWDExL21pc2MvCisJaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS9YMTEKKwlsbiAtc2YgJHtkYXRhZGlyfS9mb250cy9YMTEvICR7RH0vJHtsaWJkaXJ9L1gxMS9mb250cyAtcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmM4NTcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYTgyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMWM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MmZhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTE5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmU4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjJjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZhNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0zLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZhZjFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS00LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmRkZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS01LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDFhMmFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS03LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk4NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS04LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg5YWJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS05LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzJiNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUtPSTgtUi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtS09JOC1SLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2ZjYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUtPSTgtUi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmNjM1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjNjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEwLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhN2QzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEzLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0OGU5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE0LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5MWI4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE1LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNDUwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE2LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4YjFmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWU2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MmI3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGE0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmJkNTIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBkMzFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTkucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0IucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjMzE4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0IucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRiNTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTAucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYjFhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTAucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Yzg1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTBmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTI3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTYucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDBiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTYucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzViYmVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM4MzVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg1NDFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU5M2NlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzVjZjVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTcucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTk0MjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTkucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08ucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1NDZkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08ucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmViNzJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9jdXJzb3IucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvZm9udHMuZGlyIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9mb250cy5kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyNzE4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvZm9udHMuZGlyCkBAIC0wLDAgKzEsNDEwIEBACis0MDkKKzEweDIwLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xCisxMHgyMC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTEwCisxMHgyMC1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTExCisxMHgyMC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTEzCisxMHgyMC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTE0CisxMHgyMC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTE1CisxMHgyMC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTE2CisxMHgyMC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMgorMTB4MjAtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTMKKzEweDIwLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS00CisxMHgyMC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktNQorMTB4MjAtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTcKKzEweDIwLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS04CisxMHgyMC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktOQorMTB4MjAtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1rb2k4LXIKKzEweDIwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc28xMDY0Ni0xCisxMngxM2phLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtamEtMTMtMTIwLTc1LTc1LWMtMTIwLWlzbzEwNjQ2LTEKKzEyeDI0LnBjZi5neiAtc29ueS1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTI0LTE3MC0xMDAtMTAwLWMtMTIwLWlzbzg4NTktMQorMTJ4MjRyay5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yNC0xNzAtMTAwLTEwMC1jLTEyMC1qaXN4MDIwMS4xOTc2LTAKKzE4eDE4amEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC1qYS0xOC0xMjAtMTAwLTEwMC1jLTE4MC1pc28xMDY0Ni0xCisxOHgxOGtvLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwta28tMTgtMTIwLTEwMC0xMDAtYy0xODAtaXNvMTA2NDYtMQorNHg2LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xCis0eDYtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xMAorNHg2LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTMKKzR4Ni1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTE0Cis0eDYtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xNQorNHg2LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTYKKzR4Ni1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMgorNHg2LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0zCis0eDYtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTQKKzR4Ni1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktNQorNHg2LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS03Cis0eDYtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTgKKzR4Ni1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktOQorNHg2LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAta29pOC1yCis0eDYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzEwNjQ2LTEKKzV4Ny1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMQorNXg3LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTAKKzV4Ny1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTEzCis1eDctSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xNAorNXg3LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTUKKzV4Ny1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTE2Cis1eDctSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTIKKzV4Ny1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMworNXg3LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS00Cis1eDctSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTUKKzV4Ny1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktNworNXg3LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS04Cis1eDctSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTkKKzV4Ny1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWtvaTgtcgorNXg3LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc28xMDY0Ni0xCis1eDgtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTEKKzV4OC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTEwCis1eDgtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xMworNXg4LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTQKKzV4OC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTE1Cis1eDgtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xNgorNXg4LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0yCis1eDgtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTMKKzV4OC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktNAorNXg4LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS01Cis1eDgtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTcKKzV4OC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktOAorNXg4LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS05Cis1eDgtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1rb2k4LXIKKzV4OC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvMTA2NDYtMQorNngxMC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEwLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxMC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTAtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEwLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxMC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTAtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxMC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEwLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTAtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxMC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEwLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTAtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxMC1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAta29pOC1yCis2eDEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4MTItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxMi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEyLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4MTItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxMi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEyLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDEyLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEyLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEyLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDEyLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEyLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDEyLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDEyLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAta29pOC1yCis2eDEyLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEzLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEzLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTMtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMQorNngxMy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEzLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4MTMtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxMy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEzLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDEzLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEzLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEzLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDEzLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEzLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDEzLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDEzLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAta29pOC1yCis2eDEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEzQi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTNCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEzQi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxM0ItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4MTNCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEzQi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxM0ItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDEzQi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTNCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxM0ItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDEzQi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTNCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxM0ItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDEzQi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4MTNPLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEzTy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEzTy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEzTy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEzTy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEzTy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEzTy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxM08tSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTNPLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEzTy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxM08tSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTNPLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDEzTy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNng5LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDktSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNng5LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4OS1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDktSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNng5LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4OS1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMgorNng5LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDktSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4OS1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktNQorNng5LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDktSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4OS1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktOQorNng5LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAta29pOC1yCis2eDkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzd4MTMtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxMy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTMtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDEzLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxMy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTMtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDEzLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxMy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDEzLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTMtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxMy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDEzLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTMtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxMy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDEzLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1rb2k4LXIKKzd4MTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvMTA2NDYtMQorN3gxM0ItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTNCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTNCLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTEKKzd4MTNCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTNCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTNCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTUKKzd4MTNCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTNCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDEzQi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMworN3gxM0ItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTNCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDEzQi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNworN3gxM0ItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTNCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDEzQi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvMTA2NDYtMQorN3gxM08tSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxM08tSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDEzTy1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTEKKzd4MTNPLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxM08tSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDEzTy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTUKKzd4MTNPLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxM08tSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxM08tSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMworN3gxM08tSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxM08tSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxM08tSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNworN3gxM08tSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxM08ucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvMTA2NDYtMQorN3gxNC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDE0LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxNC1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTEKKzd4MTQtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDE0LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxNC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTUKKzd4MTQtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDE0LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTQtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMworN3gxNC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDE0LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTQtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNworN3gxNC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS04Cis3eDE0LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTQtSklTWDAyMDEuMTk3Ni0wLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWppc3gwMjAxLjE5NzYtMAorN3gxNC1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAta29pOC1yCis3eDE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTRCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDE0Qi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDE0Qi1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDE0Qi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDE0Qi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDE0Qi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDE0Qi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDE0Qi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxNEItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTRCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDE0Qi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxNEItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTRCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS04Cis3eDE0Qi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxNEIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzh4MTMtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMQorOHgxMy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTAKKzh4MTMtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEzCis4eDEzLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNAorOHgxMy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTUKKzh4MTMtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE2Cis4eDEzLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTIKKzh4MTMtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMworOHgxMy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS00Cis4eDEzLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTUKKzh4MTMtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNworOHgxMy1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS04Cis4eDEzLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTkKKzh4MTMtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWtvaTgtcgorOHgxMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc28xMDY0Ni0xCis4eDEzQi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMQorOHgxM0ItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMAorOHgxM0ItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMworOHgxM0ItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNAorOHgxM0ItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNQorOHgxM0ItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNgorOHgxM0ItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTIKKzh4MTNCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0zCis4eDEzQi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNAorOHgxM0ItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTUKKzh4MTNCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS03Cis4eDEzQi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOAorOHgxM0ItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTkKKzh4MTNCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc28xMDY0Ni0xCis4eDEzTy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xCis4eDEzTy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTAKKzh4MTNPLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMworOHgxM08tSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE0Cis4eDEzTy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTUKKzh4MTNPLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNgorOHgxM08tSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMgorOHgxM08tSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMworOHgxM08tSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNAorOHgxM08tSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNQorOHgxM08tSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNworOHgxM08tSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOQorOHgxM08ucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvMTA2NDYtMQorOHgxNi5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTgwLWlzbzg4NTktMQorOHgxNnJrLnBjZi5neiAtc29ueS1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE2LTEyMC0xMDAtMTAwLWMtODAtamlzeDAyMDEuMTk3Ni0wCis5eDE1LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEKKzl4MTUtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEwCis5eDE1LUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMQorOXgxNS1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTMKKzl4MTUtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE0Cis5eDE1LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNQorOXgxNS1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTYKKzl4MTUtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMgorOXgxNS1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0zCis5eDE1LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTQKKzl4MTUtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNQorOXgxNS1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS03Cis5eDE1LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTgKKzl4MTUtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktOQorOXgxNS1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAta29pOC1yCis5eDE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzEwNjQ2LTEKKzl4MTVCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xCis5eDE1Qi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEwCis5eDE1Qi1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTExCis5eDE1Qi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEzCis5eDE1Qi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE0Cis5eDE1Qi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE1Cis5eDE1Qi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE2Cis5eDE1Qi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMgorOXgxNUItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTMKKzl4MTVCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS00Cis5eDE1Qi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNQorOXgxNUItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTcKKzl4MTVCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS04Cis5eDE1Qi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktOQorOXgxNUIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzEwNjQ2LTEKKzl4MTgtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xCis5eDE4LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEwCis5eDE4LUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTExCis5eDE4LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEzCis5eDE4LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE0Cis5eDE4LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE1Cis5eDE4LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE2Cis5eDE4LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMgorOXgxOC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTMKKzl4MTgtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS00Cis5eDE4LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNQorOXgxOC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTcKKzl4MTgtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS04Cis5eDE4LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktOQorOXgxOC1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1rb2k4LXIKKzl4MTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc28xMDY0Ni0xCis5eDE4Qi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xCis5eDE4Qi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTAKKzl4MThCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMworOXgxOEItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE0Cis5eDE4Qi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTUKKzl4MThCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNgorOXgxOEItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMgorOXgxOEItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMworOXgxOEItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNAorOXgxOEItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNQorOXgxOEItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNworOXgxOEItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktOAorOXgxOEItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktOQorOXgxOEIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvMTA2NDYtMQorYXJhYmljMjQucGNmLmd6IC1hcmFiaWMtbmV3c3BhcGVyLW1lZGl1bS1yLW5vcm1hbC0tMzItMjQ2LTEwMC0xMDAtcC0xMzctaXNvMTA2NDYtMQorY2xCNngxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI2eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDEzLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMy0xMzAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTQucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTE0LTE0MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxNi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTYtMTYwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTgtODAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjl4MTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTE1LTE1MC03NS03NS1jLTkwLWlzbzY0Ni4xOTkxLWlydgorY2xJNngxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLWktbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsSTh4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLWktbm9ybWFsLS04LTgwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI0eDYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzY0Ni4xOTkxLWlydgorY2xSNXgxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy01MC1pc282NDYuMTk5MS1pcnYKK2NsUjV4Ni5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNTAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI1eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzY0Ni4xOTkxLWlydgorY2xSNngxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4MTItSVNPODg1OS0xLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorY2xSNngxMi1JU084ODU5LTEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTAKK2NsUjZ4MTItSVNPODg1OS0xMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEzCitjbFI2eDEyLUlTTzg4NTktMTQucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorY2xSNngxMi1JU084ODU5LTE1LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKK2NsUjZ4MTItSVNPODg1OS0xNi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE2CitjbFI2eDEyLUlTTzg4NTktMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKK2NsUjZ4MTItSVNPODg1OS0zLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworY2xSNngxMi1JU084ODU5LTQucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS00CitjbFI2eDEyLUlTTzg4NTktNS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKK2NsUjZ4MTItSVNPODg1OS03LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworY2xSNngxMi1JU084ODU5LTgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS04CitjbFI2eDEyLUlTTzg4NTktOS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTkKK2NsUjZ4MTItS09JOC1SLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWtvaTgtcgorY2xSNngxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCitjbFI2eDEzLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEzLTEzMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSNng2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI3eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTcwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3gxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4MTQucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTQwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI3eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTcwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDEzLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEzLTEzMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xNC0xNDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTYwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOXgxNS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xNS0xNTAtNzUtNzUtYy05MC1pc282NDYuMTk5MS1pcnYKK2N1LWFsdDEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBhbHRlcm5hdGUgZ2x5cGhzLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMjItaXNvMTA2NDYtMQorY3UtYXJhYmljMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGFyYWJpYyBleHRyYS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTAxLWZvbnRzcGVjaWZpYy0wCitjdS1kZXZuYWcxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgZGV2YW5nYXJpIGV4dHJhLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMDUtZm9udHNwZWNpZmljLTAKK2N1LWxpZzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBsaWdhdHVyZS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTQxLWZvbnRzcGVjaWZpYy0wCitjdS1wdWExMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgcHVhLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMTAtaXNvMTA2NDYtMQorY3UxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEyMy1pc28xMDY0Ni0xCitjdWFyYWJpYzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBhcmFiaWMtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTkzLWlzbzEwNjQ2LTEKK2N1ZGV2bmFnMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGRldmFuYWdhcmktbWVkaXVtLXItbm9ybWFsLS0xNS0xMjAtOTAtOTAtcC0xMDQtZm9udHNwZWNpZmljLTAKK2N1cnNvci5wY2YuZ3ogY3Vyc29yCitkZWNjdXJzLnBjZi5neiBkZWN3JGN1cnNvcgorZGVjc2Vzcy5wY2YuZ3ogZGVjdyRzZXNzaW9uCitnYjE2ZnMucGNmLmd6IC1pc2FzLWZhbmdzb25nIHRpLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTYwLTcyLTcyLWMtMTYwLWdiMjMxMi4xOTgwLTAKK2diMTZzdC5wY2YuZ3ogLWlzYXMtc29uZyB0aS1tZWRpdW0tci1ub3JtYWwtLTE2LTE2MC03Mi03Mi1jLTE2MC1nYjIzMTIuMTk4MC0wCitnYjI0c3QucGNmLmd6IC1pc2FzLXNvbmcgdGktbWVkaXVtLXItbm9ybWFsLS0yNC0yNDAtNzItNzItYy0yNDAtZ2IyMzEyLjE5ODAtMAoraGFuZ2xnMTYucGNmLmd6IC1kYWV3b28tZ290aGljLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy0xNjAta3NjNTYwMS4xOTg3LTAKK2hhbmdsbTE2LnBjZi5neiAtZGFld29vLW1pbmNoby1tZWRpdW0tci1ub3JtYWwtLTE2LTEyMC0xMDAtMTAwLWMtMTYwLWtzYzU2MDEuMTk4Ny0wCitoYW5nbG0yNC5wY2YuZ3ogLWRhZXdvby1taW5jaG8tbWVkaXVtLXItbm9ybWFsLS0yNC0xNzAtMTAwLTEwMC1jLTI0MC1rc2M1NjAxLjE5ODctMAoramlza2FuMTYucGNmLmd6IC1qaXMtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNi0xNTAtNzUtNzUtYy0xNjAtamlzeDAyMDguMTk4My0wCitqaXNrYW4yNC5wY2YuZ3ogLWppcy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTI0LTIzMC03NS03NS1jLTI0MC1qaXN4MDIwOC4xOTgzLTAKK2sxNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy0xNDAtamlzeDAyMDguMTk4My0wCittaWNyby5wY2YuZ3ogbWljcm8KK25pbDIucGNmLmd6IC1taXNjLW5pbC1tZWRpdW0tci1ub3JtYWwtLTItMjAtNzUtNzUtYy0xMC1taXNjLWZvbnRzcGVjaWZpYworb2xjdXJzb3IucGNmLmd6IC1zdW4tb3BlbiBsb29rIGN1cnNvci0tLS0tMTItMTIwLTc1LTc1LXAtMTYwLXN1bm9sY3Vyc29yLTEKK29sZ2wxMC5wY2YuZ3ogLXN1bi1vcGVuIGxvb2sgZ2x5cGgtLS0tLTEwLTEwMC03NS03NS1wLTEwMS1zdW5vbGdseXBoLTEKK29sZ2wxMi5wY2YuZ3ogLXN1bi1vcGVuIGxvb2sgZ2x5cGgtLS0tLTEyLTEyMC03NS03NS1wLTExMy1zdW5vbGdseXBoLTEKK29sZ2wxNC5wY2YuZ3ogLXN1bi1vcGVuIGxvb2sgZ2x5cGgtLS0tLTE0LTE0MC03NS03NS1wLTEyOC1zdW5vbGdseXBoLTEKK29sZ2wxOS5wY2YuZ3ogLXN1bi1vcGVuIGxvb2sgZ2x5cGgtLS0tLTE5LTE5MC03NS03NS1wLTE1NC1zdW5vbGdseXBoLTEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZG14XzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjNjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZG14XzEuMS4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIkRNWDogRGlzdHJpYnV0ZWQgTXVsdGloZWFkIFggZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBETVggZXh0ZW5zaW9uIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBcCithbmQgY29udHJvbCBvZiBYZG14KDEpIHNlcnZlci4gQXR0cmlidXRlcyBvZiB0aGUgWGRteCgxKSBzZXJ2ZXIgYW5kIG9mIFwKK3RoZSBiYWNrLWVuZCBzY3JlZW5zIGF0dGFjaGVkIHRvIHRoZSBzZXJ2ZXIgY2FuIGJlIHF1ZXJpZWQgYW5kIG1vZGlmaWVkIFwKK3ZpYSB0aGlzIHByb3RvY29sLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hM2MzNDk5MjMxYTgwMzVlZmQwZTAwNGNmYmQzYjcyYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZG14LmM7ZW5kbGluZT0zMzttZDU9YzQzZjE5YWYwM2M3Yzg2MTljYWRjOTcyNGVkOWFmZTEiCisKK0RFUEVORFMgKz0gImxpYnhleHQgZG14cHJvdG8iCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYTk4M2ViYTVhOWYwNWQxNTJhMDcyNWI4ZTg2MzE1MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjOTdkYTM2ZDJlNTZhMmQ3YjZlNGY4OTYyNDE3ODVhY2M5NWU5N2ViOTU1NzQ2NWZkNjZiYTJhMTU1YTdiMjAxIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZm9udGVuY18xLjEuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJmb250ZW5jXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExODFmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZm9udGVuY18xLjEuMy5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlggZm9udCBlbmNvZGluZyBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJmb250ZW5jIGlzIGEgbGlicmFyeSB3aGljaCBoZWxwcyBmb250IGxpYnJhcmllcyBcCitwb3J0YWJseSBkZXRlcm1pbmUgYW5kIGRlYWwgd2l0aCBkaWZmZXJlbnQgZW5jb2RpbmdzIG9mIGZvbnRzLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTYyNTRjMjBhYjgxYzYzZTY1YjI2ZjBkYmNkNGExYzEiCisKK0RFUEVORFMgKz0gInpsaWIgeHByb3RvIGZvbnQtdXRpbCIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDkyMDkyNGMzYTllYmMxMjY1NTE3YmRkMmY5ZmRlNTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzA1ODg5MzBlNmZjOTU0MmZmMzhlMDg4NDc3OGZiYzZlNmZlYmYyMWFkYmFiOTJmZDhmNTI0ZmU2MGFlZmQyMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDliN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiSUNFOiBJbnRlci1DbGllbnQgRXhjaGFuZ2UgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIEludGVyLUNsaWVudCBFeGNoYW5nZSAoSUNFKSBwcm90b2NvbCBwcm92aWRlcyBhIFwKK2dlbmVyaWMgZnJhbWV3b3JrIGZvciBidWlsZGluZyBwcm90b2NvbHMgb24gdG9wIG9mIHJlbGlhYmxlLCBieXRlLXN0cmVhbSBcCit0cmFuc3BvcnQgY29ubmVjdGlvbnMuIEl0IHByb3ZpZGVzIGJhc2ljIG1lY2hhbmlzbXMgZm9yIHNldHRpbmcgdXAgYW5kIFwKK3NodXR0aW5nIGRvd24gY29ubmVjdGlvbnMsIGZvciBwZXJmb3JtaW5nIGF1dGhlbnRpY2F0aW9uLCBmb3IgXAorbmVnb3RpYXRpbmcgdmVyc2lvbnMsIGFuZCBmb3IgcmVwb3J0aW5nIGVycm9ycy4gIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMTYyYjFiM2M2ZmE4MTJkYTlkODA0ZGNmODU4NGE5MyIKKworREVQRU5EUyArPSAieHByb3RvIHh0cmFucyIKK1BST1ZJREVTID0gImljZSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJJQ0UiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWRkZmIxZTg5N2NhODA3OTUzMTY2OWM3Yzc3MTE3MjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGY3MDMyZjJjMWM2NDM1MmI1NDIzZjZiNDhhOGViZGMzMzljYzYzMDY0YWYzNGQ2NmE2YzlhYTc5NzU5ZTIwMiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYXJjNF0gPSAiYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj15ZXMsYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj1ubyxsaWJic2QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MmZjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaApAQCAtMCwwICsxLDE4NyBAQAorRnJvbSBiMTQ2OTZhNTU3OTZlNzM5NjI0YmJkYTRmNzcyNDI3MDMyZWZmZjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVsaWVuIENyaXN0YXUgPGpjcmlzdGF1QGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDI2IEFwciAyMDE1IDE1OjIwOjU3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBJbmNsdWRlIGNvbmZpZy5oIGJlZm9yZSBhbnl0aGluZyBlbHNlIGluICouYworCitEZWJpYW4gYnVnIzc0OTAwOCA8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzQ5MDA4PgorCitSZXBvcnRlZC1ieTogTWljaGFlbCBUYXV0c2NobmlnIDxtdEBkZWJpYW4ub3JnPgorU2lnbmVkLW9mZi1ieTogSnVsaWVuIENyaXN0YXUgPGpjcmlzdGF1QGRlYmlhbi5vcmc+CitSZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBzcmMvY29tbW9uX2NhcGFiaWxpdHkuYyAgfCAzICsrKworIHNyYy9jb21tb25faW5pdC5jICAgICAgICB8IDMgKysrCisgc3JjL2NvbW1vbl9pbnRlcmZhY2UuYyAgIHwgMyArKysKKyBzcmMvY29tbW9uX2lvLmMgICAgICAgICAgfCAzICsrKworIHNyYy9jb21tb25faXRlcmF0b3IuYyAgICB8IDMgKysrCisgc3JjL2NvbW1vbl9tYXAuYyAgICAgICAgIHwgMyArKysKKyBzcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMgfCAzICsrKworIHNyYy9saW51eF9kZXZtZW0uYyAgICAgICB8IDUgKysrLS0KKyBzcmMvb3BlbmJzZF9wY2kuYyAgICAgICAgfCAzICsrKworIHNyYy9zb2x4X2RldmZzLmMgICAgICAgICB8IDMgKysrCisgc3JjL3g4Nl9wY2kuYyAgICAgICAgICAgIHwgNCArKystCisgMTEgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jIGIvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMKK2luZGV4IDQ4ODc0M2QuLjE1ZDM5NWQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYworKysrIGIvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMKK0BAIC0zMSw2ICszMSw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faW5pdC5jIGIvc3JjL2NvbW1vbl9pbml0LmMKK2luZGV4IGIxYzBjM2UuLmY3YjU5YmQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2luaXQuYworKysrIGIvc3JjL2NvbW1vbl9pbml0LmMKK0BAIC0yOCw2ICsyOCw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faW50ZXJmYWNlLmMgYi9zcmMvY29tbW9uX2ludGVyZmFjZS5jCitpbmRleCA1OTc3OGNmLi5jYjk1ZTkwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYworKysrIGIvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYworQEAgLTI4LDYgKzI4LDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faW8uYyBiL3NyYy9jb21tb25faW8uYworaW5kZXggZjVjOWU0NS4uZTk1ODZhZCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25faW8uYworKysrIGIvc3JjL2NvbW1vbl9pby5jCitAQCAtMjIsNiArMjIsOSBAQAorICAqIEF1dGhvcjoKKyAgKglBZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0LmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faXRlcmF0b3IuYyBiL3NyYy9jb21tb25faXRlcmF0b3IuYworaW5kZXggY2NmNjU2ZC4uMmJlYjE4MCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25faXRlcmF0b3IuYworKysrIGIvc3JjL2NvbW1vbl9pdGVyYXRvci5jCitAQCAtMjgsNiArMjgsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9tYXAuYyBiL3NyYy9jb21tb25fbWFwLmMKK2luZGV4IDg3NTcxNTEuLmYxODU0YmIgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX21hcC5jCisrKysgYi9zcmMvY29tbW9uX21hcC5jCitAQCAtMjEsNiArMjEsOSBAQAorICAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYyBiL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYworaW5kZXggOTM5NDI3My4uYzE3MDhmNiAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYworKysrIGIvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jCitAQCAtMjMsNiArMjMsOSBAQAorICAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgKgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJwY2lhY2Nlc3MuaCIKK2RpZmYgLS1naXQgYS9zcmMvbGludXhfZGV2bWVtLmMgYi9zcmMvbGludXhfZGV2bWVtLmMKK2luZGV4IDEwZTNiZGUuLjBkMDU2N2MgMTAwNjQ0CistLS0gYS9zcmMvbGludXhfZGV2bWVtLmMKKysrKyBiL3NyYy9saW51eF9kZXZtZW0uYworQEAgLTMyLDggKzMyLDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKy0KKy0jZGVmaW5lIF9HTlVfU09VUkNFCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvb3BlbmJzZF9wY2kuYyBiL3NyYy9vcGVuYnNkX3BjaS5jCitpbmRleCA0ZDFiNWNkLi5iOGNlMzE4IDEwMDY0NAorLS0tIGEvc3JjL29wZW5ic2RfcGNpLmMKKysrKyBiL3NyYy9vcGVuYnNkX3BjaS5jCitAQCAtMTMsNiArMTMsOSBAQAorICAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorZGlmZiAtLWdpdCBhL3NyYy9zb2x4X2RldmZzLmMgYi9zcmMvc29seF9kZXZmcy5jCitpbmRleCBmNTcyMzkzLi5jZjk2NDY3IDEwMDY0NAorLS0tIGEvc3JjL3NvbHhfZGV2ZnMuYworKysrIGIvc3JjL3NvbHhfZGV2ZnMuYworQEAgLTI1LDYgKzI1LDkgQEAKKyAvKgorICAqIFNvbGFyaXMgZGV2ZnMgaW50ZXJmYWNlcworICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5ncy5oPgorZGlmZiAtLWdpdCBhL3NyYy94ODZfcGNpLmMgYi9zcmMveDg2X3BjaS5jCitpbmRleCA0OWMxY2FiLi4zMmRhYTA0IDEwMDY0NAorLS0tIGEvc3JjL3g4Nl9wY2kuYworKysrIGIvc3JjL3g4Nl9wY2kuYworQEAgLTE4LDggKzE4LDEwIEBACisgICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDc2NWUwYTM4Y2I4YzQwZjg4NjVhZjVjYjM1NmZmZTYwMzlmZmIwOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorRGF0ZTogU3VuLCAyMiBNYXIgMjAxNSAyMTozODoyMyArMDEwMAorU3ViamVjdDogW1BBVENIIDIvNF0gRml4IHF1b3RpbmcgaXNzdWUuCisKK200IGhhcyAnW10nIGFzIHF1b3RpbmcgY2hhcmFjdGVycywgc28gaWYgd2Ugd2FudCAnW10nIHRvCitlbmQgdXAgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIHdlIG5lZWQgdG8gcXVvdGUgdGhlbSBhZ2Fpbi4KKworUmVwb3J0ZWQgYnkgR3JlZyBUcm94ZWwgPGdkdEBpci5iYm4uY29tPi4KKworU2lnbmVkLW9mZi1ieTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK1Jldmlld2VkLWJ5OiBBbGFuIENvb3BlcnNtaXRoIDxhbGFuLmNvb3BlcnNtaXRoQG9yYWNsZS5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTY3ZTllMS4uODg4MzMwYiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzYsNyArNzYsNyBAQCBjYXNlICRob3N0X29zIGluCisgCQk7OworIAkqbmV0YnNkKikKKyAJCWNhc2UgJGhvc3QgaW4KKy0JCSppWzMtOV04NiopCisrCQkqaVtbMy05XV04NiopCisgCQkJUENJQUNDRVNTX0xJQlM9IiRQQ0lBQ0NFU1NfTElCUyAtbGkzODYiCisgCQkJOzsKKyAJCSp4ODZfNjQqfCphbWQ2NCopCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxM2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNmJkMmY3ZjkyZWFlNzEzNjYzZjRlMTNmNmUyY2IyMzUyNjYwN2I4YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitEYXRlOiBGcmksIDEgTWF5IDIwMTUgMTY6MzY6NTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIGxpbnV4X3N5c2ZzLmM6IEluY2x1ZGUgPGxpbWl0cy5oPiBmb3IgUEFUSF9NQVgKKworRml4ZXMgY29tcGlsYXRpb24gd2l0aCBtdXNsIGxpYmMuCisKK1Rlc3RlZC1ieTogQmVybmQgS3VobHMgPGJlcm5kLmt1aGxzQHQtb25saW5lLmRlPgorU2lnbmVkLW9mZi1ieTogRmVsaXggSmFuZGEgPGZlbGl4LmphbmRhQHBvc3Rlby5kZT4KK1Jldmlld2VkLWJ5OiBBbGFuIENvb3BlcnNtaXRoIDxhbGFuLmNvb3BlcnNtaXRoQG9yYWNsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGFuIENvb3BlcnNtaXRoIDxhbGFuLmNvb3BlcnNtaXRoQG9yYWNsZS5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIHNyYy9saW51eF9zeXNmcy5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbGludXhfc3lzZnMuYyBiL3NyYy9saW51eF9zeXNmcy5jCitpbmRleCA1MGQ5NGNmLi4zZjk1ZTUzIDEwMDY0NAorLS0tIGEvc3JjL2xpbnV4X3N5c2ZzLmMKKysrKyBiL3NyYy9saW51eF9zeXNmcy5jCitAQCAtNDUsNiArNDUsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzMjg1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwNC1Eb24tdC1pbmNsdWRlLXN5cy1pby5oLW9uLWFybS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGI2ZGY1MjAyMzA2YmQ3MTE1OGI0ODJmMjVjYTJlNjkxOTY0NWQ0ZGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCA0IEp1biAyMDE1IDIwOjU1OjA2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNC80XSBEb24ndCBpbmNsdWRlIHN5cy9pby5oIG9uIGFybQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9saW51eF9zeXNmcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpbnV4X3N5c2ZzLmMgYi9zcmMvbGludXhfc3lzZnMuYworaW5kZXggM2Y5NWU1My4uMWUzYWFkMyAxMDA2NDQKKy0tLSBhL3NyYy9saW51eF9zeXNmcy5jCisrKysgYi9zcmMvbGludXhfc3lzZnMuYworQEAgLTUwLDcgKzUwLDcgQEAKKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgCistI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKQorKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisgI2luY2x1ZGUgPHN5cy9pby5oPgorICNlbHNlCisgI2RlZmluZSBpbmIoeCkgLTEKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmE2YTYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIFBDSSBhY2Nlc3MgbGlicmFyeSBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAibGlicGNpYWNjZXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIFggdG8gYWNjZXNzIHRoZSBcCitQQ0kgYnVzIGFuZCBkZXZpY2VzIGluIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNC1Eb24tdC1pbmNsdWRlLXN5cy1pby5oLW9uLWFybS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhY2U3OGFlYzc5OWIxY2Y2ZGZhZWE1NWQzODc5ZWQ5ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwN2Y4NjQ2NTQ1NjFlNGFjODYyOWEwZWY5YzhmMDdmYmMxZjg1OTJkMWI2YzQxODQzMTU5M2U5YmEyY2YyZmNmIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3N2FhZGE1MjIyYjlhMjJmYmYzNDcxZmYzNjg3MDY4IgorCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MTRjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHRoYXQgcHJvdmlkZXMgd2VhayBhbGlhc2VzIGZvciBwdGhyZWFkIGZ1bmN0aW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgbGlicmFyeSBwcm92aWRlcyB3ZWFrIGFsaWFzZXMgZm9yIHB0aHJlYWQgZnVuY3Rpb25zIFwKK25vdCBwcm92aWRlZCBpbiBsaWJjIG9yIG90aGVyd2lzZSBhdmFpbGFibGUgYnkgZGVmYXVsdC4iCitIT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9WENCIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmVkYzFmZWEwM2Q5NTlmMGMyZDc0M2ZlNWNhNzQ2YWQiCisKKyNERVBFTkRTID0gInhjYi1wcm90byB4cHJvdG8gbGlieGF1IGxpYnhzbHQtbmF0aXZlIgorIyBERVBFTkRTICs9ICJ4c2x0cHJvYy1uYXRpdmUgZ3BlcmYtbmF0aXZlIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QvbGlicHRocmVhZC1zdHVicy0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZThmYTMxYjQyZTEzZjg3ZThmNWE3YTJiNzMxZGI3ZWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzViNmQ1NGUzY2M2ZjNiYTI4MDYxZGE4MWFmNjRiOWE5MmI3Yjc1NzMxOTA5ODE3MjQ4OGE2NjBlM2Q4NzI5OSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyNTEzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlNNOiBTZXNzaW9uIE1hbmFnZW1lbnQgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFNlc3Npb24gTWFuYWdlbWVudCBMaWJyYXJ5IChTTWxpYikgaXMgYSBsb3ctbGV2ZWwgXCJDXCIgXAorbGFuZ3VhZ2UgaW50ZXJmYWNlIHRvIFhTTVAuICBUaGUgcHVycG9zZSBvZiB0aGUgWCBTZXNzaW9uIE1hbmFnZW1lbnQgXAorUHJvdG9jb2wgKFhTTVApIGlzIHRvIHByb3ZpZGUgYSB1bmlmb3JtIG1lY2hhbmlzbSBmb3IgdXNlcnMgdG8gc2F2ZSBhbmQgXAorcmVzdG9yZSB0aGVpciBzZXNzaW9ucy4gIEEgc2Vzc2lvbiBpcyBhIGdyb3VwIG9mIGNsaWVudHMsIGVhY2ggb2Ygd2hpY2ggXAoraGFzIGEgcGFydGljdWxhciBzdGF0ZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWMwZmIzN2Y0NGUwMmJkYmRlODA1NDYwMjQ0MDA3MjhkIgorCitERVBFTkRTICs9ICJsaWJpY2UgeHByb3RvIHh0cmFucyIKKworIyBsaWJTTSBjYW4gd29yayB3aXRob3V0IGxpYnV1aWQsIHdlIGV4cGxpY2l0bHkgZGlzYWJsZSBpdCB0byBicmVhayB0aGUgZm9sbG93aW5nIGNpcmN1bGFyIGRlcGVuZGVuY3kKKyMgd2hlbiBESVNUUk9fRkVBVFVSRVMgY29udGFpbnMgJ3N5c3RlbWQnIGFuZCAneDExJy4KKyMgc3lzdGVtZCAtPiBkYnVzIC0+IGxpYnNtIC0+IHV0aWwtbGludXggLT4gc3lzdGVtZAorRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlidXVpZCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJTTSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0OTlhNzc3M2M2NWFiYTUxMzYwOWZlNjUxODUzYzVmMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYmFjYThjOWY1ZDkzNDQ1MGE3MDg5NmM0YWQzOGQwNjQ3NTUyMTI1NWNhNjNiNzE3YTY1MTBmZGI2ZTI4N2JkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDAxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLWRpZXRfMS42LjMuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBsaWJ4MTEuaW5jCisKK0RFU0NSSVBUSU9OICs9ICIgU3VwcG9ydCBmb3IgWENNUyBhbmQgWExPQ0FMRSBpcyBkaXNhYmxlZCBpbiBcCit0aGlzIHZlcnNpb24uIgorCitTUkNfVVJJICs9ICJmaWxlOi8vWDE4TkNNU3N0dWJzLmRpZmYgXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LXV0Zjgtd3JvbmctZGVmaW5lLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitSUFJPVklERVNfJHtQTn0tZGV2ID0gImxpYngxMS1kZXYiCitSUFJPVklERVNfJHtQTn0tbG9jYWxlID0gImxpYngxMS1sb2NhbGUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTM2YjczZjhhNDIxNDMxNDJkZGE4MTI5ZjAyZTRlMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZjMxYTdjMzlmMmY1MmU4ZWJkMGRiOTU2NDAzODRlNjM0NTFmOWIwMTRlZWQyYmI3ZjVkZTAzZThhZGM4MTExIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS14bG9jYWxlIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRlYWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS5pbmMKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJYbGliOiBDIExhbmd1YWdlIFggSW50ZXJmYWNlIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBhIGNsaWVudCBpbnRlcmZhY2UgdG8gdGhlIFggV2luZG93IFwKK1N5c3RlbSwgb3RoZXJ3aXNlIGtub3duIGFzICdYbGliJy4gIEl0IHByb3ZpZGVzIGEgY29tcGxldGUgQVBJIGZvciB0aGUgXAorYmFzaWMgZnVuY3Rpb25zIG9mIHRoZSB3aW5kb3cgc3lzdGVtLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK2luaGVyaXQgc2l0ZWluZm8KKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vbGlieDExOiIKKworUEUgPSAiMSIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJ4MTEiCisKK1hPUkdfUE4gPSAibGliWDExIgorTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xNzIyNTVkZWU2NmJiMDE1MTQzNWIyZDVkNzA5ZmNmNyIKKworREVQRU5EUyArPSAieHByb3RvIHhleHRwcm90byB4dHJhbnMgbGlieGNiIGticHJvdG8gaW5wdXRwcm90byIKK0RFUEVORFMgKz0gInhwcm90by1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWtleXN5bWRlZmRpcj0ke1NUQUdJTkdfSU5DRElSfS9YMTEvIC0tZGlzYWJsZS14Zjg2YmlnZm9udCIKK0VYVFJBX09FTUFLRSArPSAnQ1dBUk5GTEFHUz0iIicKKworUEFDS0FHRUNPTkZJRyA/Pz0gInhjbXMiCitQQUNLQUdFQ09ORklHW3hjbXNdID0gIi0tZW5hYmxlLXhjbXMsLS1kaXNhYmxlLXhjbXMiCisKKyMgc3JjL3V0aWwvbWFrZWtleXMgaXMgYnVpbHQgbmF0aXZlbHkgYnV0IG5lZWRzIC1EX0dOVV9TT1VSQ0UgZGVmaW5lZC4KK0NQUEZMQUdTX0ZPUl9CVUlMRCArPSAiLURfR05VX1NPVVJDRSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXhjYiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL1hLZXlzeW1EQiAke2RhdGFkaXJ9L1gxMS9YRXJyb3JEQiAke2RhdGFkaXJ9L1gxMS9YY21zLnR4dCIKK0ZJTEVTXyR7UE59LXhjYiArPSAiJHtsaWJkaXJ9L2xpYlgxMS14Y2Iuc28uKiIKK0ZJTEVTXyR7UE59LWxvY2FsZSArPSAiJHtkYXRhZGlyfS9YMTEvbG9jYWxlICR7bGliZGlyfS9YMTEvbG9jYWxlIgorCisjIE11bHRpcGxlIGxpYngxMSBkZXJpdmF0aXZlcyBmcm9tIGZyb20gdGhpcyBmaWxlIGFuZCBhcmUgc2VsZWN0ZWQgYnkgdmlydHVhbC9saWJ4MTEKKyMgQSB3b3JsZCBidWlsZCBzaG91bGQgb25seSBidWlsZCB0aGUgY29ycmVjdCB2ZXJzaW9uLCBub3QgYWxsIG9mIHRoZW0uCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL1gxOE5DTVNzdHVicy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NGNlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL1gxOE5DTVNzdHVicy5kaWZmCkBAIC0wLDAgKzEsNTIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL2ltQ29udi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWDExLTEuMy5vcmlnL3NyYy9pbUNvbnYuYworKysrIGxpYlgxMS0xLjMvc3JjL2ltQ29udi5jCitAQCAtODMsNiArODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFN1YnN0UmVjIFN1YnN0VGFibGVbCisgICogZnJvbSBVQ1MgY2hhciB0byBzcGVjaWZpZWQgY2hhcnNldCBjaGFyLgorICAqIFRoaXMgY29udmVydGVyIGlzIG5lZWRlZCBmb3IgX1hpbUdldENoYXJDb2RlIHN1YnJvdXRpbmUuCisgICovCisrI2lmZGVmIFhMT0NBTEUKKyBYUG9pbnRlcgorIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgICAgX1hjb25zdCBjaGFyKgllbmNvZGluZ19uYW1lKQorQEAgLTk2LDYgKzk3LDcgQEAgX1hpbUdldExvY2FsZUNvZGUgKAorICAgICB9CisgICAgIHJldHVybiBjdnQ7CisgfQorKyNlbmRpZgorIAorIC8qCisgICogUmV0dXJucyB0aGUgbG9jYWxlIGRlcGVuZGVudCByZXByZXNlbnRhdGlvbiBvZiBhIGtleXN5bS4KK0BAIC0xMDYsNiArMTA4LDcgQEAgX1hpbUdldExvY2FsZUNvZGUgKAorICAqIHRlcm1pbmF0aW5nIE5VTCBieXRlLiBSZXR1cm4gMCBpZiB0aGUga2V5c3ltIGlzIG5vdCByZXByZXNlbnRhYmxlIGluIHRoZQorICAqIGxvY2FsZQorICAqLworKyNpZmRlZiBYTE9DQUxFCisgLypBUkdTVVNFRCovCisgaW50CisgX1hpbUdldENoYXJDb2RlICgKK0BAIC0xMzUsNiArMTM4LDcgQEAgX1hpbUdldENoYXJDb2RlICgKKyAgICAgICAgIGJ1Zltjb3VudF09ICdcMCc7CisgICAgIHJldHVybiBjb3VudDsKKyB9CisrI2VuZGlmCisgCisgI2lmZGVmIFhLQgorIHN0YXRpYyBpbnQgbG9va3VwX3N0cmluZygKK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9YMThOQ01Tc3R1YnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYlgxMS0xLjMvc3JjL1gxOE5DTVNzdHVicy5jCitAQCAtMCwwICsxLDQyOCBAQAorKy8qCisrICogWDE4TkNNU3N0dWJzLmMKKysgKiAtIFByb3ZpZGVzIHN0dWJzIGFuZCBkdW1teSBmdW5jcyBuZWVkZWQgd2hlbiBYY21zIGFuZCBYTG9jYWxlIHN0dWZmIHJlbW92ZWQKKysgKgorKyAqIENvcHlyaWdodCCpIDIwMDMgTWF0dGhldyBBbGx1bQorKyAqCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisrICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKysgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisrICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTWF0dGhldyBBbGx1bSBub3QgYmUgdXNlZCBpbgorKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dAorKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBLZWl0aCBQYWNrYXJkIGFuZCBDb21wYXEgbWFrZXMgbm8KKysgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQKKysgKiBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorKyAqCisrICogTUFUVEhFVyBBTExVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyAKKysgKiBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCAKKysgKiBJTiBOTyBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisrICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisrICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKysgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSAiWGxpYmludC5oIgorKyNpbmNsdWRlICJYbGNpbnQuaCIKKysjaW5jbHVkZSA8WDExL1hsb2NhbGUuaD4KKysjaW5jbHVkZSA8WDExL1hvcy5oPgorKyNpZmRlZiBXSU4zMgorKyN1bmRlZiBjbG9zZQorKyNlbmRpZgorKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKysjaW5jbHVkZSAiWGxjUHViSS5oIgorKworKyNpbmNsdWRlICJYY21zaW50LmgiIAkJLyogZm9yIFhjbXNDQ0MgdHlwZSAgKi8KKysjaW5jbHVkZSAiWGxjUHViSS5oIiAgICAgICAgICAgIC8qIGZvciBYTENkIHR5cGUgKi8KKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisrI2lmICEgWExPQ0FMRQorKworK0Jvb2wKKytYU3VwcG9ydHNMb2NhbGUoKQorK3sKKysgIHJldHVybiBGYWxzZTsgCQkKKyt9CisrCisrY2hhciAqCisrWFNldExvY2FsZU1vZGlmaWVycygKKysgICAgY29uc3QgY2hhciAqbW9kaWZpZXJzKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytYTENkCisrX1hPcGVuTEMoCisrICAgIGNoYXIgKm5hbWUpCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK1hMQ2QKKytfWGxjQ3VycmVudExDKCkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK19YbGNWYVRvQXJnTGlzdCgKKysgICAgdmFfbGlzdCB2YXIsCisrICAgIGludCBjb3VudCwKKysgICAgWGxjQXJnTGlzdCAqYXJnc19yZXQpCisreworKyAgcmV0dXJuOworK30KKysKKyt2b2lkCisrX1hsY0NvdW50VmFMaXN0KAorKyAgICB2YV9saXN0IHZhciwKKysgICAgaW50ICpjb3VudF9yZXQpCisreworKyAgcmV0dXJuOworK30KKysKKyt2b2lkCisrX1hDbG9zZUxDKAorKyAgICBYTENkIGxjZCkKKyt7CisrICByZXR1cm47CisrfQorKworK2ludAorK19YbGNDb252ZXJ0KAorKyAgICBYbGNDb252IGNvbnYsCisrICAgIFhQb2ludGVyICpmcm9tLAorKyAgICBpbnQgKmZyb21fbGVmdCwKKysgICAgWFBvaW50ZXIgKnRvLAorKyAgICBpbnQgKnRvX2xlZnQsCisrICAgIFhQb2ludGVyICphcmdzLAorKyAgICBpbnQgbnVtX2FyZ3MpCisreworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFhJTSBTdHVicyAqLworKworK1hQb2ludGVyCisrX1hpbUdldExvY2FsZUNvZGUgKCBfWGNvbnN0IGNoYXIqIGVuY29kaW5nX25hbWUgKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytpbnQKKytfWGltR2V0Q2hhckNvZGUgKAorKyAgICBYUG9pbnRlciAgICAgICAgICAgIHVjc19jb252LAorKyAgICBLZXlTeW0gICAgICAgICAgICAgIGtleXN5bSwKKysgICAgdW5zaWduZWQgY2hhciogICAgICBidWYsCisrICAgIGludCAgICAgICAgICAgICAgICAgbmJ5dGVzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKysvKiBYcm0gU3R1YnMgKi8KKysKKytYcm1NZXRob2RzCisrX1hybUluaXRQYXJzZUluZm8oCisrICAgIFhQb2ludGVyICpzdGF0ZSkKKyt7CisrICAgIHJldHVybiAoWHJtTWV0aG9kcykgTlVMTDsKKyt9CisrCisrLyogWHdjIFN0dWJzICovCisrCisraW50CisrWHdjVGV4dEV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpvdmVyYWxsX2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm92ZXJhbGxfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkIAorK1h3Y0RyYXdTdHJpbmcoRGlzcGxheSAqZGlzcGxheSwKKysJICAgICAgRHJhd2FibGUgZCwKKysJICAgICAgWEZvbnRTZXQgZm9udF9zZXQsCisrCSAgICAgIEdDIGdjLAorKwkgICAgICBpbnQgeCwgaW50IHksCisrCSAgICAgIF9YY29uc3Qgd2NoYXJfdCAqc3RyaW5nLAorKwkgICAgICBpbnQgbnVtX3djaGFycykKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYd2NEcmF3VGV4dCgKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIFh3Y1RleHRJdGVtICAgICAgICAqdGV4dF9pdGVtcywKKysgICAgaW50ICAgICAgICAgICAgICAgICBuaXRlbXMpCisreworKyAgOworK30KKysKKyt2b2lkCisrWHdjRHJhd0ltYWdlU3RyaW5nKAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIDsKKyt9CisrCisraW50CisrWHdjVGV4dEVzY2FwZW1lbnQoCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrU3RhdHVzCisrWHdjVGV4dFBlckNoYXJFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqaW5rX2V4dGVudHNfYnVmZmVyLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKmxvZ2ljYWxfZXh0ZW50c19idWZmZXIsCisrICAgIGludCAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemUsCisrICAgIGludCAgICAgICAgICAgICAgICAqbnVtX2NoYXJzLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm1heF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICptYXhfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybihYY21zRmFpbHVyZSk7CisrfQorKworK2ludAorK1h3Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgY29uc3QgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wLAorKyAgICB3Y2hhcl90ICoqKmxpc3RfcmV0LAorKyAgICBpbnQgKmNvdW50X3JldCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisraW50CisrWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICB3Y2hhcl90ICoqbGlzdCwKKysgICAgaW50IGNvdW50LAorKyAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKKysgICAgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkCisrWHdjRnJlZVN0cmluZ0xpc3Qod2NoYXJfdCAqKmxpc3QpCisreworKyAgcmV0dXJuOworK30KKysKKysKKyt2b2lkIFhtYlNldFdNUHJvcGVydGllcyAoICAgICAgICAvKiBBY3R1YWxseSBmcm9tIG1iV01Qcm9wcy5jICovCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgV2luZG93IHcsCisrICAgIF9YY29uc3QgY2hhciAqd2luZG93TmFtZSwKKysgICAgX1hjb25zdCBjaGFyICppY29uTmFtZSwKKysgICAgY2hhciAqKmFyZ3YsCisrICAgIGludCBhcmdjLAorKyAgICBYU2l6ZUhpbnRzICpzaXplSGludHMsCisrICAgIFhXTUhpbnRzICp3bUhpbnRzLAorKyAgICBYQ2xhc3NIaW50ICpjbGFzc0hpbnRzKQorK3sKKysgIHJldHVybjsKKyt9CisrCisraW50CisrWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBjb25zdCBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3AsCisrICAgIGNoYXIgKioqbGlzdF9yZXQsCisrICAgIGludCAqY291bnRfcmV0KQorK3sKKysgIHJldHVybiBYTG9jYWxlTm90U3VwcG9ydGVkOworK30KKysKKytpbnQKKytYbWJUZXh0TGlzdFRvVGV4dFByb3BlcnR5KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIGNoYXIgKipsaXN0LAorKyAgICBpbnQgY291bnQsCisrICAgIFhJQ0NFbmNvZGluZ1N0eWxlIHN0eWxlLAorKyAgICBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3ApCisreworKyAgcmV0dXJuIFhMb2NhbGVOb3RTdXBwb3J0ZWQ7CisrfQorKworK2ludAorK1htYlRleHRFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3QgY2hhciAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICpvdmVyYWxsX2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAqb3ZlcmFsbF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQKKytYbWJEcmF3VGV4dCgKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIFhtYlRleHRJdGVtICAgICAgICAqdGV4dF9pdGVtcywKKysgICAgaW50ICAgICAgICAgICAgICAgICBuaXRlbXMpCisreworKyAgOworK30KKysKKyt2b2lkCisrWG1iRHJhd1N0cmluZygKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIF9YY29uc3QgY2hhciAgICAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYbWJEcmF3SW1hZ2VTdHJpbmcoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBfWGNvbnN0IGNoYXIgICAgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgOworK30KKysKKytpbnQKKytYbWJUZXh0RXNjYXBlbWVudCgKKysgICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIHJldHVybiAwOworK30KKysKKytTdGF0dXMKKytYbWJUZXh0UGVyQ2hhckV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgKmlua19leHRlbnRzX2J1ZmZlciwKKysgICAgWFJlY3RhbmdsZSAgICAgKmxvZ2ljYWxfZXh0ZW50c19idWZmZXIsCisrICAgIGludCAgICAgICAgICAgICBidWZmZXJfc2l6ZSwKKysgICAgaW50ICAgICAgICAgICAgKm51bV9jaGFycywKKysgICAgWFJlY3RhbmdsZSAgICAgKm1heF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgKm1heF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3Vuc2lnbmVkIGludAorK0tleVN5bVRvVWNzNChLZXlTeW0ga2V5c3ltKQorK3sKKysgIHJldHVybiAwOworK30KKysKKysjZW5kaWYgCisrCisrI2lmICEgWENNUworKworK1hjbXNDQ0MgCisrWGNtc0NDQ09mQ29sb3JtYXAoZHB5LCBjbWFwKQorKyAgICBEaXNwbGF5ICpkcHk7CisrICAgIENvbG9ybWFwIGNtYXA7CisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK1N0YXR1cworK19YY21zUmVzb2x2ZUNvbG9yU3RyaW5nICgKKysgICAgWGNtc0NDQyBjY2MsCisrICAgIGNvbnN0IGNoYXIgKipjb2xvcl9zdHJpbmcsCisrICAgIFhjbXNDb2xvciAqcENvbG9yX2V4YWN0X3JldHVybiwKKysgICAgWGNtc0NvbG9yRm9ybWF0IHJlc3VsdF9mb3JtYXQpCisreworKyAgcmV0dXJuKFhjbXNGYWlsdXJlKTsKKyt9CisrCisrdm9pZAorK19YY21zVW5yZXNvbHZlQ29sb3IoCisrICAgIFhjbXNDQ0MgY2NjLAorKyAgICBYY21zQ29sb3IgKnBDb2xvcikKKyt7CisrICByZXR1cm47CisrfQorKworK3ZvaWQKKytfWFVucmVzb2x2ZUNvbG9yKAorKyAgICBYY21zQ0NDIGNjYywKKysgICAgWENvbG9yICpwWENvbG9yKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrWGNtc0NtYXBSZWMgKgorK19YY21zQWRkQ21hcFJlYyhkcHksIGNtYXAsIHdpbmRvd0lELCB2aXN1YWwpCisrICAgIERpc3BsYXkgKmRweTsKKysgICAgQ29sb3JtYXAgY21hcDsKKysgICAgV2luZG93IHdpbmRvd0lEOworKyAgICBWaXN1YWwgKnZpc3VhbDsKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK19YY21zUkdCX3RvX1hDb2xvcigKKysgICAgWGNtc0NvbG9yICpwQ29sb3JzLAorKyAgICBYQ29sb3IgKnBYQ29sb3JzLAorKyAgICB1bnNpZ25lZCBpbnQgbkNvbG9ycykKKyt7CisrICByZXR1cm47CisrfQorKworK1hjbXNDbWFwUmVjICoKKytfWGNtc0NvcHlDbWFwUmVjQW5kRnJlZSgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBDb2xvcm1hcCBzcmNfY21hcCwKKysgICAgQ29sb3JtYXAgY29weV9jbWFwKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKyt2b2lkCisrX1hjbXNEZWxldGVDbWFwUmVjKAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIENvbG9ybWFwIGNtYXApCisreworKyAgcmV0dXJuOworK30KKysKKysjZW5kaWYKK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBsaWJYMTEtMS4zL3NyYy9NYWtlZmlsZS5hbQorQEAgLTMzNSw2ICszMzUsOCBAQCBpZiBUSFJTVFVCUworIGxpYlgxMV9sYV9TT1VSQ0VTKz1VSVRoclN0dWJzLmMKKyBlbmRpZgorIAorK2xpYlgxMV9sYV9TT1VSQ0VTKz1YMThOQ01Tc3R1YnMuYworKworIHgxMWRhdGFkaXIgPSBAWDExX0RBVEFESVJACisgeDExZGF0YV9EQVRBID0gWEtleXN5bURCIFhFcnJvckRCCisgCitAQCAtMzQyLDYgKzM0NCw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCSQoeDExZGF0YV9EQVRBKSBcCisgCW9zMlN0dWJzLmMgXAorLQlVSVRoclN0dWJzLmMgCisrCVVJVGhyU3R1YnMuYyBcCisrCVgxOE5DTVNzdHVicy5jCisgCisgaWYgWENCCisgbGliWDExX2xhX1NPVVJDRVMgKz0gXAorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL2xvY2tpbmcuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvbG9ja2luZy5jCisrKysgbGliWDExLTEuMy9zcmMvbG9ja2luZy5jCitAQCAtNjYsNyArNjYsOSBAQCBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhCisgI2RlZmluZSBOVU1fRlJFRV9DVkxTIDQKKyAKKyAvKiBpbiBsY1dyYXAuYyAqLworKyNpZmRlZiBYTE9DQUxFCisgZXh0ZXJuIExvY2tJbmZvUHRyIF9YaTE4bl9sb2NrOworKyNlbmRpZgorIAorICNpZmRlZiBXSU4zMgorIHN0YXRpYyBEV09SRCBfWF9UbHNJbmRleCA9IChEV09SRCktMTsKK0BAIC01OTQsOSArNTk2LDExIEBAIFN0YXR1cyBYSW5pdFRocmVhZHModm9pZCkKKyAgICAgX1hnbG9iYWxfbG9jayA9ICZnbG9iYWxfbG9jazsKKyAgICAgeG11dGV4X2luaXQoX1hnbG9iYWxfbG9jay0+bG9jayk7CisgICAgIHhtdXRleF9zZXRfbmFtZShfWGdsb2JhbF9sb2NrLT5sb2NrLCAiWGxpYiBnbG9iYWwiKTsKKysjaWZkZWYgWExPQ0FMRQorICAgICBfWGkxOG5fbG9jayA9ICZpMThuX2xvY2s7CisgICAgIHhtdXRleF9pbml0KF9YaTE4bl9sb2NrLT5sb2NrKTsKKyAgICAgeG11dGV4X3NldF9uYW1lKF9YaTE4bl9sb2NrLT5sb2NrLCAiWGxpYiBpMThuIik7CisrI2VuZGlmCisgICAgIF9YTG9ja011dGV4X2ZuID0gX1hMb2NrTXV0ZXg7CisgICAgIF9YVW5sb2NrTXV0ZXhfZm4gPSBfWFVubG9ja011dGV4OworICAgICBfWENyZWF0ZU11dGV4X2ZuID0gX1hDcmVhdGVNdXRleDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI2Y2RlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9kaXNhYmxlX3Rlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitVcGRhdGUgZm9yIDEuNi4xCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC1OdXJkIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0gbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbQorLS0tIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0JMjAxMi0wNi0wMiAwOTozNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtCTIwMTMtMDEtMDIgMTY6MTA6MjQuOTYwMTU2MTMxICswMjAwCitAQCAtMzYsMTEgKzM2LDYgQEAKKyAgICAgICAgIDwgbG9jYWxlLmRpci5sMSA+IGxvY2FsZS5kaXIubDIKKwljYXQgbG9jYWxlLmRpci5sMiBsb2NhbGUuZGlyLmwxID4gbG9jYWxlLmRpcgorCistaWYgSEFWRV9QRVJMCistTE9HX0NPTVBJTEVSID0gJChQRVJMKQorLVRFU1RTID0gY29tcG9zZS1jaGVjay5wbAorLWVuZGlmIEhBVkVfUEVSTAorLQorCisgIyBQZXItbG9jYWxlIGRhdGEgZmlsZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LWRpc2FibGUteGxvY2FsZS5kaWZmIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjMzk4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LWRpc2FibGUteGxvY2FsZS5kaWZmCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorLS0tIGxpYlgxMS1YMTFSNy4wLTEuMC4wL3NyYy9Gb250LmMub3JpZwkyMDA2LTAzLTEyIDE4OjM1OjQyLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYlgxMS1YMTFSNy4wLTEuMC4wL3NyYy9Gb250LmMJMjAwNi0wMy0xMiAxODo0MDoyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MDEsNyArNzAxLDExIEBACisgICAgIH0KKyAgICAgaWYgKGwgLSAyIC0gKHAgLSBjaGFyc2V0KSA8IDApCisgCXJldHVybiAwOworKyNpZmRlZiBYTE9DQUxFCisgICAgIGlmIChfWGxjTkNvbXBhcmVJU09MYXRpbjEobmFtZSArIGwgLSAyIC0gKHAgLSBjaGFyc2V0KSwgY2hhcnNldCwgcCAtIGNoYXJzZXQpKQorKyNlbHNlCisrICAgIGlmIChzdHJuY2FzZWNtcChuYW1lICsgbCAtIDIgLSAocCAtIGNoYXJzZXQpLCBjaGFyc2V0LCBwIC0gY2hhcnNldCkpCisrI2VuZGlmCisgCXJldHVybiAwOworICAgICBpZiAoc3RybGVuKHAgKyAxKSArIGwgLSAxID49IHNpemVvZihidWYpIC0gMSkKKyAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LXV0Zjgtd3JvbmctZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MzQ3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cuaG9sZ2Vyc2NodXJpZy5kZS9wYXRjaGVyLmh0bWwKKyMKKworLS0tIGxpYlgxMS1YMTFSNy4wLTEuMC4wL2luY2x1ZGUvWDExL1hsaWIuaH5maXgtdXRmOC13cm9uZy1kZWZpbmUKKysrKyBsaWJYMTEtWDExUjcuMC0xLjAuMC9pbmNsdWRlL1gxMS9YbGliLmgKK0BAIC0xMDMsNyArMTAzLDcgQEAKKyAKKyAvKiBBUEkgbWVudGlvbmluZyAiVVRGOCIgb3IgInV0ZjgiIGlzIGFuIFhGcmVlODYgZXh0ZW5zaW9uLCBpbnRyb2R1Y2VkIGluCisgICAgTm92ZW1iZXIgMjAwMC4gSXRzIHByZXNlbmNlIGlzIGluZGljYXRlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgbWFjcm8uICovCistI2RlZmluZSBYX0hBVkVfVVRGOF9TVFJJTkcgMQorKyN1bmRlZiBYX0hBVkVfVVRGOF9TVFJJTkcKKyAKKyB0eXBlZGVmIGNoYXIgKlhQb2ludGVyOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhYmY3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorRnJvbSA0ZDg1ZDVmM2JkOGFmYWM4OTM3MzhmZDg4ZTE5ZDhjYjVjZjk5OGZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK0RhdGU6IFN1biwgMjcgSnVsIDIwMTQgMTM6MTA6MDcgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliWDExOiBBZGQgbWlzc2luZyBOVUxMIGNoZWNrIG9uIGltIGFuZCBpbS0+bWV0aG9kcworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IChjODI3ZWRjZDFjNGE3ZjkyMGFhMjUyMDgwODNiNWI1OGQ2MGQyYjQ0KQorU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworLS0tCisgc3JjL3hsaWJpMThuL0lDV3JhcC5jIHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLXJ1IGxpYlgxMS0xLjYuMi1vcmlnL3NyYy94bGliaTE4bi9JQ1dyYXAuYyBsaWJYMTEtMS42LjIvc3JjL3hsaWJpMThuL0lDV3JhcC5jCistLS0gbGliWDExLTEuNi4yLW9yaWcvc3JjL3hsaWJpMThuL0lDV3JhcC5jCTIwMTQtMDctMjcgMTM6Mzg6MjkuNTg2NjY2NDQ5IC0wNDAwCisrKysgbGliWDExLTEuNi4yL3NyYy94bGliaTE4bi9JQ1dyYXAuYwkyMDE0LTA3LTI3IDEzOjQxOjM5LjY3MTYwOTAzMCAtMDQwMAorQEAgLTE2OSw3ICsxNjksNyBAQAorICAgICB2YV9saXN0IHZhcjsKKyAgICAgaW50ICAgICB0b3RhbF9jb3VudDsKKyAgICAgWElNQXJnICphcmdzOworLSAgICBjaGFyICAgKnJldDsKKysgICAgY2hhciAgICpyZXQgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTE4NSw3ICsxODUsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgcmV0ID0gKCppbS0+bWV0aG9kcy0+c2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKysgICAgaWYgKGltICYmIGltLT5tZXRob2RzKQorKwlyZXQgPSAoKmltLT5tZXRob2RzLT5zZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworICAgICBYZnJlZShhcmdzKTsKKyAgICAgcmV0dXJuIHJldDsKKyB9CitAQCAtMTk2LDcgKzE5Nyw3IEBACisgICAgIHZhX2xpc3QgdmFyOworICAgICBpbnQgICAgIHRvdGFsX2NvdW50OworICAgICBYSU1BcmcgKmFyZ3M7CistICAgIGNoYXIgICAqcmV0OworKyAgICBjaGFyICAgKnJldCA9IE5VTEw7CisgCisgICAgIC8qCisgICAgICAqIHNvIGNvdW50IHRoZSBzdHVmZiBkYW5nbGluZyBoZXJlCitAQCAtMjEyLDcgKzIxMyw4IEBACisgICAgIF9YSU1WYVRvTmVzdGVkTGlzdCh2YXIsIHRvdGFsX2NvdW50LCAmYXJncyk7CisgICAgIHZhX2VuZCh2YXIpOworIAorLSAgICByZXQgPSAoKmltLT5tZXRob2RzLT5nZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworKyAgICBpZiAoaW0gJiYgaW0tPm1ldGhvZHMpCisrCXJldCA9ICgqaW0tPm1ldGhvZHMtPmdldF92YWx1ZXMpIChpbSwgYXJncyk7CisgICAgIFhmcmVlKGFyZ3MpOworICAgICByZXR1cm4gcmV0OworIH0KK0BAIC0yMjgsNyArMjMwLDcgQEAKKyAgICAgdmFfbGlzdCB2YXI7CisgICAgIGludCAgICAgdG90YWxfY291bnQ7CisgICAgIFhJTUFyZyAqYXJnczsKKy0gICAgWElDICAgICBpYzsKKysgICAgWElDICAgICBpYyA9IE5VTEw7CisgCisgICAgIC8qCisgICAgICAqIHNvIGNvdW50IHRoZSBzdHVmZiBkYW5nbGluZyBoZXJlCitAQCAtMjQ0LDcgKzI0Niw4IEBACisgICAgIF9YSU1WYVRvTmVzdGVkTGlzdCh2YXIsIHRvdGFsX2NvdW50LCAmYXJncyk7CisgICAgIHZhX2VuZCh2YXIpOworIAorLSAgICBpYyA9IChYSUMpICgqaW0tPm1ldGhvZHMtPmNyZWF0ZV9pYykgKGltLCBhcmdzKTsKKysgICAgaWYgKGltICYmIGltLT5tZXRob2RzKQorKwlpYyA9IChYSUMpICgqaW0tPm1ldGhvZHMtPmNyZWF0ZV9pYykgKGltLCBhcmdzKTsKKyAgICAgWGZyZWUoYXJncyk7CisgICAgIGlmIChpYykgeworIAlpYy0+Y29yZS5uZXh0ID0gaW0tPmNvcmUuaWNfY2hhaW47CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMV8xLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTUzMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMV8xLjYuMy5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGxpYngxMS5pbmMKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjJlMzZiNzNmOGE0MjE0MzE0MmRkYTgxMjlmMDJlNGUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmMzFhN2MzOWYyZjUyZThlYmQwZGI5NTY0MDM4NGU2MzQ1MWY5YjAxNGVlZDJiYjdmNWRlMDNlOGFkYzgxMTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhhdV8xLjAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY4YmZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhhdV8xLjAuOC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlhhdTogWCBBdXRob3JpdHkgRGF0YWJhc2UgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGlieGF1IHByb3ZpZGVzIHRoZSBtYWluIGludGVyZmFjZXMgdG8gdGhlIFgxMSBcCithdXRob3Jpc2F0aW9uIGhhbmRsaW5nLCB3aGljaCBjb250cm9scyBhdXRob3Jpc2F0aW9uIGZvciBYIGNvbm5lY3Rpb25zLCBcCitib3RoIGNsaWVudC1zaWRlIGFuZCBzZXJ2ZXItc2lkZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitpbmhlcml0IGdldHRleHQKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03OTA4ZTM0MjQ5MTE5ODQwMTMyMWNlYzE5NTY4MDdlYyIKKworREVQRU5EUyArPSAiIHhwcm90byIKK1BST1ZJREVTID0gInhhdSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYYXUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjY4NWY4YWJiZmZhNmQxNDVjMGY5MzBmMDA3MDNiMjFiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkZDQ3NzMyMGFlYjVjZGQ2NzI3MjgzODcyMmQ2YjdkNTQ0ODg3ZGZlN2RlNDZlMWU3Y2MwYzI3YzJiZWE0ZjIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGUvZml4LXhjYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjE0ODgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGUvZml4LXhjYi5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlcmUgaXMgbm8gZXh0cmEgcmVwbHkgZGF0YSBhbmQgaWYgd2Ugc2F5IG5vdCB0byBkaXNnYXJkIGl0LCB4Y2IKK3Rocm93cyBmYXRhbCBhc3NlcnRzLgorCitSUCAtIDI2LzExLzA5CisKK0luZGV4OiBnaXQveGNhbGlicmF0ZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcveGNhbGlicmF0ZS5jCTIwMDktMTEtMjYgMDg6MTE6NDguMDAwMDAwMDAwICswMDAwCisrKysgZ2l0L3hjYWxpYnJhdGUuYwkyMDA5LTExLTI2IDA4OjA5OjU1LjAwMDAwMDAwMCArMDAwMAorQEAgLTIxNiw3ICsyMTYsNyBAQAorICAgcmVxLT5yZXFUeXBlID0gaW5mby0+Y29kZXMtPm1ham9yX29wY29kZTsKKyAgIHJlcS0+eENhbGlicmF0ZVJlcVR5cGUgPSBYX1hDYWxpYnJhdGVSYXdNb2RlOworICAgcmVxLT5vbiA9IGVuYWJsZTsKKy0gIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhGYWxzZSkpIAorKyAgaWYgKCFfWFJlcGx5IChkcHksICh4UmVwbHkgKikgJnJlcCwgMCwgeFRydWUpKSAKKyAgICAgeworICAgICAgIFVubG9ja0Rpc3BsYXkgKGRweSk7CisgICAgICAgU3luY0hhbmRsZSAoKTsKK0BAIC0yNDAsNyArMjQwLDcgQEAKKyAgIHJlcS0+eENhbGlicmF0ZVJlcVR5cGUgPSBYX1hDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkOworICAgcmVxLT54ID0gKng7CisgICByZXEtPnkgPSAqeTsKKy0gIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhGYWxzZSkpIAorKyAgaWYgKCFfWFJlcGx5IChkcHksICh4UmVwbHkgKikgJnJlcCwgMCwgeFRydWUpKSAKKyAgICAgeworICAgICAgIFVubG9ja0Rpc3BsYXkgKGRweSk7CisgICAgICAgU3luY0hhbmRsZSAoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVlODY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGVfZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWENhbGlicmF0ZTogVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWENhbGlicmF0ZSBpcyBhIGxpYnJhcnkgZm9yIHBlcmZvcm1pbmcgdG91Y2hzY3JlZW4gXAorY2FsaWJyYXRpb24gd2l0aCB0aGUga2RyaXZlIHRzbGliIHRvdWNoc2NyZWVuIGRyaXZlci4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hjYWxpYnJhdGUuaDtlbmRsaW5lPTIxO21kNT1mYTU3MmRmNjQzOWYwZjIzNWYyNjEyZjM3MGYxNTNkNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Y2FsaWJyYXRlLmM7ZW5kbGluZT0yMTttZDU9ZmE1NzJkZjY0MzlmMGYyMzVmMjYxMmYzNzBmMTUzZDciCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgY2FsaWJyYXRlcHJvdG8gbGlieGV4dCIKKworU1JDUkVWID0gIjIwOWQ4M2FmNjFlZDM4YTAwMmM4MDk2Mzc3ZGVhYzI5MmIzZTM5NmMiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvbGliL2xpYlhDYWxpYnJhdGUgXAorICAgICAgICAgICBmaWxlOi8vZml4LXhjYi5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRklMRVNfJHtQTn0tbG9jYWxlICs9ICIke2RhdGFkaXJ9L1gxMS9sb2NhbGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMzFmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgWCBwcm90b2NvbCBDLWxhbmd1YWdlIEJpbmRpbmcgKFhDQikgaXMgYSByZXBsYWNlbWVudCBcCitmb3IgWGxpYiBmZWF0dXJpbmcgYSBzbWFsbCBmb290cHJpbnQsIGxhdGVuY3kgaGlkaW5nLCBkaXJlY3QgYWNjZXNzIHRvIFwKK3RoZSBwcm90b2NvbCwgaW1wcm92ZWQgdGhyZWFkaW5nIHN1cHBvcnQsIGFuZCBleHRlbnNpYmlsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK0RFUEVORFMgPSAieGNiLXByb3RvIHhwcm90byBsaWJ4YXUgeGNiLXByb3RvLW5hdGl2ZSBsaWJwdGhyZWFkLXN0dWJzIgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QvbGlieGNiLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8veGNiaW5jbHVkZWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNoZWNrLnBhdGNoIgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5saWJ4Y2ItLioiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJ4Y2Iuc28uKiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB5dGhvbm5hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieGF1IGFuZCBvdGhlcnMgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsICcke2xpYmRpcn0nLCAnXmxpYnhjYi0oLiopXC5zb1wuLiokJywgJ2xpYnhjYi0lcycsICdYQ0IgbGlicmFyeSBtb2R1bGUgZm9yICVzJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQxYzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi9kaXNhYmxlLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1RoZSAiY2hlY2siIHBhY2thZ2UgaXMgY2hlY2tlZCBmb3Igd2l0aG91dCBhbiBleHBsaWNpdCBlbmFibGUvZGlzYWJsZSBvcHRpb24sCit3aGljaCBjYW4gbGVhZCB0byBub24tZGV0ZXJtaW5pc3RpYyBidWlsZCBpc3N1ZXMgd2l0aCBib3RoIGNoZWNrIGFuZCBsaWJ4c2x0LgorCitBcyB0aGUgdW5pdCB0ZXN0IHN1aXRlIGlzIG1pbmltYWwgYXQgcHJlc2VudCwgc2ltcGx5IGRpc2FibGUgdGhlIHRlc3Qgc3VpdGUuICBJbgordGhlIGZ1dHVyZSBpZiB0aGUgdGVzdCBzdWl0ZSBpcyBleHBhbmRlZCB0aGlzIGNhbiBiZSBtYWRlIGNvbmRpdGlvbmFsIG9uIHRoZQorcHRlc3QgRElTVFJPX0ZFQVRVUkUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA2ZDdjOWE1Li4yMmNjZWI5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMSw3ICsyMSw4IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIAorIEFNX1BBVEhfUFlUSE9OKFsyLjZdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKENIRUNLLCBbY2hlY2sgPj0gMC45LjRdLCBbSEFWRV9DSEVDSz15ZXNdLCBbSEFWRV9DSEVDSz1ub10pCisrZG5sIFBLR19DSEVDS19NT0RVTEVTKENIRUNLLCBbY2hlY2sgPj0gMC45LjRdLCBbSEFWRV9DSEVDSz15ZXNdLCBbSEFWRV9DSEVDSz1ub10pCisrSEFWRV9DSEVDSz1ubworIEFNX0NPTkRJVElPTkFMKEhBVkVfQ0hFQ0ssIHRlc3QgeCRIQVZFX0NIRUNLID0geHllcykKKyAKKyBBQ19DT05GSUdfSEVBREVSUyhbc3JjL2NvbmZpZy5oXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjI5N2MzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi94Y2JpbmNsdWRlZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0FzIHBrZy1jb25maWcgLS12YXJpYWJsZSBkb2Vzbid0IHJlc3BlY3QgdGhlIHN5c3Jvb3QsIGFkZCB0aGUgcGtnLWNvbmZpZyBzeXNyb290Cit0byB0aGUgYmVnaW5uaW5nIG9mIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGxhdGVyIG9uIHRoZSBob3N0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDk0ZGE0ZjcuLmQyOWNkNmEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY0LDcgKzY0LDcgQEAgQUNfU1VCU1QoTkVFREVEKQorIAorICMgRmluZCB0aGUgeGNiLXByb3RvIHByb3RvY29sIGRlc2NyaXB0aW9ucworIEFDX01TR19DSEVDS0lORyhYQ0JQUk9UT19YQ0JJTkNMVURFRElSKQorLVhDQlBST1RPX1hDQklOQ0xVREVESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9eGNiaW5jbHVkZWRpciB4Y2ItcHJvdG9gCisrWENCUFJPVE9fWENCSU5DTFVERURJUj0kUEtHX0NPTkZJR19TWVNST09UX0RJUi9gJFBLR19DT05GSUcgLS12YXJpYWJsZT14Y2JpbmNsdWRlZGlyIHhjYi1wcm90b2AKKyBBQ19NU0dfUkVTVUxUKCRYQ0JQUk9UT19YQ0JJTkNMVURFRElSKQorIEFDX1NVQlNUKFhDQlBST1RPX1hDQklOQ0xVREVESVIpCisgCitAQCAtNzQsNyArNzQsNyBAQCBBQ19TVUJTVChYQ0JQUk9UT19WRVJTSU9OKQorIAorICMgRmluZCB0aGUgeGNiZ2VuIFB5dGhvbiBwYWNrYWdlCisgQUNfTVNHX0NIRUNLSU5HKFhDQlBST1RPX1hDQlBZVEhPTkRJUikKKy1YQ0JQUk9UT19YQ0JQWVRIT05ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHl0aG9uZGlyIHhjYi1wcm90b2AKKytYQ0JQUk9UT19YQ0JQWVRIT05ESVI9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIvYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHl0aG9uZGlyIHhjYi1wcm90b2AKKyBBQ19NU0dfUkVTVUxUKCRYQ0JQUk9UT19YQ0JQWVRIT05ESVIpCisgQUNfU1VCU1QoWENCUFJPVE9fWENCUFlUSE9ORElSKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjI3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTEuYmIKQEAgLTAsMCArMSwxMCBAQAoraW5jbHVkZSBsaWJ4Y2IuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc2M2IwODFjYjEwYzIyMzQzNWIwMWUwMGRjMGFiYTciCisKKworREVQRU5EUyArPSAibGlieGRtY3AiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YTg3M2ViZDM4M2QxYTYwNjEyZGQ2ZWM2YjQyYzc4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMzYzNWQ3MDA0NWI5ZWRlOTA3NzhlNjc1MTYxMzU4MjhhNTdkZTg3YWM1MDhmOTg3MDI0ZjQzYzAzNjIwZmY3IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODY2MzZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl9naXQuYmIKQEAgLTAsMCArMSwxMCBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGxpYnhjYi5pbmMKKworU1JDUkVWID0gIjYyNWVkNTk2Y2FlNmRkODE3NWFlYjZjYjZmMjY3ODQ5MjgwNDJmMjIiCitQViA9ICIxLjEuOTAuMStnaXRyJHtTUkNQVn0iCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveGNiL2xpYnhjYiIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZS9jaGFuZ2UtaW5jbHVkZS1vcmRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlL2NoYW5nZS1pbmNsdWRlLW9yZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzMxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZS9jaGFuZ2UtaW5jbHVkZS1vcmRlci5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1RoaXMgcGF0Y2ggbWFrZXMgdGhlIGJ1aWxkIHVzZSBpdHMgb3duIFhjb21wb3NpdGUuaCBvdmVyIHJhdGhlciB0aGFuIGFuCitvbGRlciBYY29tcG9zaXRlLmggdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluc3RhbGxlZCBpbiB0aGUgc3RhZ2luZyBkaXIuCisKK0luZGV4OiBsaWJYY29tcG9zaXRlLTAuNC4zL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlhjb21wb3NpdGUtMC40LjMub3JpZy9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wNi0zMCAyMjo0Mjo1My4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJYY29tcG9zaXRlLTAuNC4zL3NyYy9NYWtlZmlsZS5hbQkyMDEwLTExLTIzIDIzOjA5OjM0LjU0NDMyMjkzMCAtMDgwMAorQEAgLTE5LDcgKzE5LDcgQEAKKyAjICBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisgIyAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAKKy1BTV9DRkxBR1MgPSAkKENXQVJORkxBR1MpICQoWENPTVBPU0lURV9DRkxBR1MpICQoWEZJWEVTX0NGTEFHUykKKytBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAkKENXQVJORkxBR1MpICQoWENPTVBPU0lURV9DRkxBR1MpICQoWEZJWEVTX0NGTEFHUykKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisgCisgbGliX0xUTElCUkFSSUVTID0gbGliWGNvbXBvc2l0ZS5sYQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGVfMC40LjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZV8wLjQuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI1NzE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGVfMC40LjQuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJYY29tcG9zaXRlOiBYIENvbXBvc2l0ZSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIGNvbXBvc2l0ZSBleHRlbnNpb24gcHJvdmlkZXMgdGhyZWUgcmVsYXRlZCBcCittZWNoYW5pc21zOiBwZXItaGllcmFyY2h5IHN0b3JhZ2UsIGF1dG9tYXRpYyBzaGFkb3cgdXBkYXRlLCBhbmQgZXh0ZXJuYWwgXAorcGFyZW50LiAgSW4gcGVyLWhpZXJhcmNoeSBzdG9yYWdlLCB0aGUgcmVuZGVyaW5nIG9mIGFuIGVudGlyZSBoaWVyYXJjaHkgXAorb2Ygd2luZG93cyBpcyByZWRpcmVjdGVkIHRvIG9mZi1zY3JlZW4gc3RvcmFnZS4gIEluIGF1dG9tYXRpYyBzaGFkb3cgXAordXBkYXRlLCB3aGVuIGEgaGllcmFyY2h5IGlzIHJlbmRlcmVkIG9mZi1zY3JlZW4sIHRoZSBYIHNlcnZlciBwcm92aWRlcyBcCithbiBhdXRvbWF0aWMgbWVjaGFuaXNtIGZvciBwcmVzZW50aW5nIHRob3NlIGNvbnRlbnRzIHdpdGhpbiB0aGUgcGFyZW50IFwKK3dpbmRvdy4gIEluIGV4dGVybmFsIHBhcmVudCwgYSBtZWNoYW5pc20gZm9yIHByb3ZpZGluZyByZWRpcmVjdGlvbiBvZiBcCitjb21wb3NpdGluZyB0cmFuc2Zvcm1hdGlvbnMgdGhyb3VnaCBhIGNsaWVudC4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNmMjkwN2FhZDU0MWY2ZjIyNmZiYzU4Y2MxYjNjZGYxIgorCitERVBFTkRTICs9ICIgY29tcG9zaXRlcHJvdG8gdmlydHVhbC9saWJ4MTEgbGlieGZpeGVzIGxpYnhleHQiCitQUk9WSURFUyA9ICJ4Y29tcG9zaXRlIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGNvbXBvc2l0ZSIKKworU1JDX1VSSSArPSAiIGZpbGU6Ly9jaGFuZ2UtaW5jbHVkZS1vcmRlci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImY3YTIxOGRjYmY2ZjA4NDg1OTljNmMzNmZjNjVjNTFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVkZTI1MGNkMjA3ZDhiZWU0YTMzODI2NWMzMDA3ZDdhNjhkNWFjYTc5MWI2YWM0MWFmMThlOWEyYWViMzQxNzgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlNGYyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhjdXJzb3I6IFggQ3Vyc29yIG1hbmFnZW1lbnQgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWGN1cnNvciBpcyBhIHNpbXBsZSBsaWJyYXJ5IGRlc2lnbmVkIHRvIGhlbHAgbG9jYXRlIGFuZCBcCitsb2FkIGN1cnNvcnMuIEN1cnNvcnMgY2FuIGJlIGxvYWRlZCBmcm9tIGZpbGVzIG9yIG1lbW9yeS4gQSBsaWJyYXJ5IG9mIFwKK2NvbW1vbiBjdXJzb3JzIGV4aXN0cyB3aGljaCBtYXAgdG8gdGhlIHN0YW5kYXJkIFggY3Vyc29yIG5hbWVzLiBDdXJzb3JzIFwKK2NhbiBleGlzdCBpbiBzZXZlcmFsIHNpemVzIGFuZCB0aGUgbGlicmFyeSBhdXRvbWF0aWNhbGx5IHBpY2tzIHRoZSBiZXN0IFwKK3NpemUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04OTAyZTY2NDNmN2JjZDc3OTNiMjNkY2Q1ZDgwMzFhNCIKKworREVQRU5EUyArPSAibGlieHJlbmRlciBsaWJ4Zml4ZXMiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYY3Vyc29yIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWU3YzE3YWZiYmNlODNlMjIxNTkxNzA0N2M1N2QxYjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWJjNmFjYjIxY2ExNGRhNTFiZGE1YmM5MTJjODk1NWJjNmU1ZTQzM2YwYWIwMGM1ZThiZWY4NDI1OTZjMzNkZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZGFtYWdlXzEuMS40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkYW1hZ2VfMS4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkNzAwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZGFtYWdlXzEuMS40LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiWGRhbWFnZTogWCBEYW1hZ2UgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIidEYW1hZ2UnIGlzIGEgdGVybSB0aGF0IGRlc2NyaWJlcyBjaGFuZ2VzIG1ha2UgdG8gcGl4ZWwgXAorY29udGVudHMgb2Ygd2luZG93cyBhbmQgcGl4bWFwcy4gIERhbWFnZSBhY2N1bXVsYXRlcyBhcyBkcmF3aW5nIG9jY3VycyBcCitpbiB0aGUgZHJhd2FibGUuICBFYWNoIGRyYXdpbmcgb3BlcmF0aW9uICdkYW1hZ2VzJyBvbmUgb3IgbW9yZSBcCityZWN0YW5ndWxhciBhcmVhcyB3aXRoaW4gdGhlIGRyYXdhYmxlLiAgVGhlIHJlY3RhbmdsZXMgYXJlIGd1YXJhbnRlZWQgdG8gXAoraW5jbHVkZSB0aGUgc2V0IG9mIHBpeGVscyBtb2RpZmllZCBieSBlYWNoIG9wZXJhdGlvbiwgYnV0IG1heSBpbmNsdWRlIFwKK3NpZ25pZmljYW50bHkgbW9yZSB0aGFuIGp1c3QgdGhvc2UgcGl4ZWxzLiAgVGhlIERBTUFHRSBleHRlbnNpb24gYWxsb3dzIFwKK2FwcGxpY2F0aW9ucyB0byBlaXRoZXIgcmVjZWl2ZSB0aGUgcmF3IHJlY3RhbmdsZXMgYXMgYSBzdHJlYW0gb2YgZXZlbnRzLCBcCitvciB0byBoYXZlIHRoZW0gcGFydGlhbGx5IHByb2Nlc3NlZCB3aXRoaW4gdGhlIFggc2VydmVyIHRvIHJlZHVjZSB0aGUgXAorYW1vdW50IG9mIGRhdGEgdHJhbnNtaXR0ZWQgYXMgd2VsbCBhcyByZWR1Y2UgdGhlIHByb2Nlc3NpbmcgbGF0ZW5jeSBvbmNlIFwKK3RoZSByZXBhaW50IG9wZXJhdGlvbiBoYXMgc3RhcnRlZC4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTlmZTEwMWYzMGRkMjQxMzRjZjQzMTQ2ODYzMjQxODY4IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBkYW1hZ2Vwcm90byBsaWJ4Zml4ZXMiCitQUk9WSURFUyA9ICJ4ZGFtYWdlIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGRhbWFnZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjBjZjI5MmRlMmE5ZmEyZTlhOTM5YWVmZGU2OGZkMzRmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjM2ZlN2M2NTdlODM1NDdmNDgyMmJmZGUzMGE5MGQ4NDUyNGVmYjU2MzY1NDQ4NzY4NDA5Yjc3ZjA1MzU1YWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlMzBkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZG1jcF8xLjEuMi5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlhETUNQOiBYIERpc3BsYXkgTWFuYWdlciBDb250cm9sIFByb3RvY29sIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBwdXJwb3NlIG9mIHRoZSBYIERpc3BsYXkgTWFuYWdlciBDb250cm9sIFByb3RvY29sIFwKKyhYRE1DUCkgaXMgdG8gcHJvdmlkZSBhIHVuaWZvcm0gbWVjaGFuaXNtIGZvciBhbiBhdXRvbm9tb3VzIGRpc3BsYXkgdG8gXAorcmVxdWVzdCBsb2dpbiBzZXJ2aWNlIGZyb20gYSByZW1vdGUgaG9zdC4gQW4gWCB0ZXJtaW5hbCAoc2NyZWVuLCBcCitrZXlib2FyZCwgbW91c2UsIHByb2Nlc3NvciwgbmV0d29yayBpbnRlcmZhY2UpIGlzIGEgcHJpbWUgZXhhbXBsZSBvZiBhbiBcCithdXRvbm9tb3VzIGRpc3BsYXkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworaW5oZXJpdCBnZXR0ZXh0CisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDU1OWZiMjZlMTI5NjI2MDIyZTA1MmE1ZTZlMGUxMjMiCisKK0RFUEVORFMgKz0gInhwcm90byIKK1BST1ZJREVTID0gInhkbWNwIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhkbWNwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxOGFhNWMxMjc5YjAxZjlkMThlMzI5OTk2OTY2NWIyZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MWZlMDk4Njc5MThmZmYyNTgyOTZlMWUxZTE1OWYwZGM2MzljYjMwZDIwMWM1MzUxOWYyNWFiNzNhZjRlNGUyIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1thcmM0XSA9ICJhY19jdl9saWJfYnNkX2FyYzRyYW5kb21fYnVmPXllcyxhY19jdl9saWJfYnNkX2FyYzRyYW5kb21fYnVmPW5vLGxpYmJzZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhOGI2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiWEV4dDogWCBFeHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWGV4dCBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byBcCitzZXZlcmFsIGV4dGVuc2lvbnMgdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgc3VwcG9ydGVkIHByb3RvY29sIGV4dGVuc2lvbnMgXAorYXJlIERPVUJMRS1CVUZGRVIsIERQTVMsIEV4dGVuZGVkLVZpc3VhbC1JbmZvcm1hdGlvbiwgTEJYLCBNSVRfU0hNLCBcCitNSVRfU1VORFJZLU5PTlNUQU5EQVJELCBNdWx0aS1CdWZmZXJpbmcsIFNFQ1VSSVRZLCBTSEFQRSwgU1lOQywgVE9HLUNVUCwgXAorWEMtQVBQR1JPVVAsIFhDLU1JU0MsIFhURVNULiAgbGliWGV4dCBhbHNvIHByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIFwKK3V0aWxpdHkgZnVuY3Rpb25zIHRvIGFpZCBhdXRob3JzIG9mIGNsaWVudCBBUElzIGZvciBYIHByb3RvY29sIFwKK2V4dGVuc2lvbnMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04NzljZTI2Njc4NTQxNGJkMWNiYzNiYzJmNGQ5ZDdjOCIKKworREVQRU5EUyArPSAieHByb3RvIHZpcnR1YWwvbGlieDExIHhleHRwcm90byBsaWJ4YXUgbGlieGRtY3AiCitQUk9WSURFUyA9ICJ4ZXh0IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhleHQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjUyZGY3YzRjMWYwYmFkZDlmODJhYjEyNGZiMzJlYjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI1MThkNGQzMzIyMzFmMzEzMzcxZmRlZmFjNTllMzc3NmY0ZjA4MjNiY2IyM2NmN2M3MzA1YmZiNTdiMTZlMzUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc5OTE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0X2dpdC5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRXh0OiBYIEV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYZXh0IHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIFwKK3NldmVyYWwgZXh0ZW5zaW9ucyB0byB0aGUgWCBwcm90b2NvbC4gIFRoZSBzdXBwb3J0ZWQgcHJvdG9jb2wgZXh0ZW5zaW9ucyBcCithcmUgRE9VQkxFLUJVRkZFUiwgRFBNUywgRXh0ZW5kZWQtVmlzdWFsLUluZm9ybWF0aW9uLCBMQlgsIE1JVF9TSE0sIFwKK01JVF9TVU5EUlktTk9OU1RBTkRBUkQsIE11bHRpLUJ1ZmZlcmluZywgU0VDVVJJVFksIFNIQVBFLCBTWU5DLCBUT0ctQ1VQLCBcCitYQy1BUFBHUk9VUCwgWEMtTUlTQywgWFRFU1QuICBsaWJYZXh0IGFsc28gcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2YgXAordXRpbGl0eSBmdW5jdGlvbnMgdG8gYWlkIGF1dGhvcnMgb2YgY2xpZW50IEFQSXMgZm9yIFggcHJvdG9jb2wgXAorZXh0ZW5zaW9ucy4iCisKK0RFUEVORFMgKz0gInhwcm90byB2aXJ0dWFsL2xpYngxMSB4ZXh0cHJvdG8gbGlieGF1IGxpYnhkbWNwIgorUFJPVklERVMgPSAieGV4dCIKK1NSQ1JFViA9ICJkMWYzYmM3N2E0OGM4ZTQyNzcxNTc5ZTNmZGYzMzcwYjM1ZDMyMDlkIgorUEUgPSAiMSIKK1BWID0gIjEuMC45OS4xK2dpdHIke1NSQ1BWfSIKKworWE9SR19QTiA9ICJsaWJYZXh0IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2xpYi8ke1hPUkdfUE59IgorUyA9ICIke1dPUktESVJ9L2dpdC8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyNzQwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJYRml4ZXM6IFggRml4ZXMgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlggYXBwbGljYXRpb25zIGhhdmUgb2Z0ZW4gbmVlZGVkIHRvIHdvcmsgYXJvdW5kIHZhcmlvdXMgXAorc2hvcnRjb21pbmdzIGluIHRoZSBjb3JlIFggd2luZG93IHN5c3RlbS4gIFRoaXMgZXh0ZW5zaW9uIGlzIGRlc2lnbmVkIHRvIFwKK3Byb3ZpZGUgdGhlIG1pbmltYWwgc2VydmVyLXNpZGUgc3VwcG9ydCBuZWNlc3NhcnkgdG8gZWxpbWluYXRlIHByb2JsZW1zIFwKK2NhdXNlZCBieSB0aGVzZSB3b3JrYXJvdW5kcy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNjMWNlNDJjMzM0YTZmNWNjY2IwMjc3NTU2YTA1M2UwIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSB4cHJvdG8gZml4ZXNwcm90byB4ZXh0cHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGZpeGVzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiOTg1Yjg1ZjhiOTM4NmM4NWRkY2ZlMTA3MzkwNmI0ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2M2JlYzA4NTA4NGZhM2NhYWVlNTE4MDQ5MGRkODcxZjFlYjIwMjBiYTllOWIzOWEzMGY5MzY5M2ZmYzM0NzY3IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmUzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJYRm9udDogWCBGb250IHJhc3RlcmlzYXRpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWGZvbnQgcHJvdmlkZXMgdmFyaW91cyBzZXJ2aWNlcyBmb3IgWCBzZXJ2ZXJzLCBtb3N0IFwKK25vdGFibHkgZm9udCBzZWxlY3Rpb24gYW5kIHJhc3RlcmlzYXRpb24gKHRocm91Z2ggZXh0ZXJuYWwgbGlicmFyaWVzIFwKK3N1Y2ggYXMgZnJlZXR5cGUpLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTQ2YzgwNDBmMmY3MzdiY2QwYzQzNWZlYjJhYjFjMmMiCisKK0RFUEVORFMgKz0gImZyZWV0eXBlIHh0cmFucyBmb250c3Byb3RvIGxpYmZvbnRlbmMgemxpYiIKK1BST1ZJREVTID0gInhmb250IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhmb250IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk2Zjc2YmE5NGI0YzkwOTIzMGJhYzFlMmRjZDU1MWM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3MDg5ODUyN2M3M2Y5NzU4ZjU1MWJiYWI2MTJhZjYxMWI4YTA5NjIyMDI4Mjk1NjhkOTRmM2VkZjRkODYwOTgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmdF8yLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY3Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmdF8yLjMuMi5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIlhGdDogWCBGcmVlVHlwZSBsaWJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlhmdCB3YXMgZGVzaWduZWQgdG8gcHJvdmlkZSBnb29kIHN1cHBvcnQgZm9yIHNjYWxhYmxlIFwKK2ZvbnRzLCBhbmQgdG8gZG8gc28gZWZmaWNpZW50bHkuICBVbmxpa2UgdGhlIGNvcmUgZm9udHMgc3lzdGVtLCBpdCBcCitzdXBwb3J0cyBmZWF0dXJlcyBzdWNoIGFzIGFudGktYWxpYXNpbmcgYW5kIHN1Yi1waXhlbCByYXN0ZXJpc2F0aW9uLiBcCitQZXJoYXBzIG1vcmUgaW1wb3J0YW50bHksIGl0IGdpdmVzIGFwcGxpY2F0aW9ucyBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgXAord2F5IGdseXBocyBhcmUgcmVuZGVyZWQsIG1ha2luZyBmaW5lIHR5cGVzZXR0aW5nIGFuZCBXWVNJV0lHIGRpc3BsYXkgXAorcG9zc2libGUuIEZpbmFsbHksIGl0IGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gdXNlIGZvbnRzIHRoYXQgYXJlIG5vdCBcCitpbnN0YWxsZWQgc3lzdGVtLXdpZGUgZm9yIGRpc3BsYXlpbmcgZG9jdW1lbnRzIHdpdGggZW1iZWRkZWQgZm9udHMuICBYZnQgXAoraXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgY29yZSBmb250cyBzeXN0ZW06IHVzYWdlIG9mIFhmdCByZXF1aXJlcyBcCitmYWlybHkgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdG9vbGtpdHMgKHVzZXItaW50ZXJmYWNlIGxpYnJhcmllcykuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05MGI5MGI2MGViMzBmNjVmYzljMjY3M2Q3Y2Y1OWUyNCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgbGlieHJlbmRlciBmcmVldHlwZSBmb250Y29uZmlnIgorUFJPVklERVMgPSAieGZ0IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzMxYjNhMmEzYTFhNzhiNWI0NGNmYmQ0M2Y4NmZjZmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjVhM2M4MjQ3NjFkZjM1MWNhOTE4MjdhYzIyMTA5MDk0M2VmMjhiMjQ4NTczNDg2MDUwZGU4OWY0YmZjZGM0YyIKKworWE9SR19QTiA9ICJsaWJYZnQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitweXRob24gKCkgeworICAgICAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgICAgICBkLnNldFZhcignUEtHXyR7UE59JywgJyR7TUxQUkVGSVh9bGlieGZ0MicpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwMzNhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aV8xLjcuNC5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYSTogWCBJbnB1dCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGlieGkgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBYMTEgcHJvdG9jb2wgdG8gc3VwcG9ydCBcCitpbnB1dCBkZXZpY2VzIG90aGVyIHRoYW4gdGhlIGNvcmUgWCBrZXlib2FyZCBhbmQgcG9pbnRlci4gIEl0IGFsbG93cyBcCitjbGllbnQgcHJvZ3JhbXMgdG8gc2VsZWN0IGlucHV0IGZyb20gdGhlc2UgZGV2aWNlcyBpbmRlcGVuZGVudGx5IGZyb20gXAorZWFjaCBvdGhlciBhbmQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBjb3JlIGRldmljZXMuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE3YjA2NDc4OWZhYjkzNmExYzU4YzRlMTNkOTY1YjBmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9YSUdldERldkZvY3VzLmM7ZW5kbGluZT0yMzttZDU9Y2RmYjBkNDM1YTMzZWM1N2VhMGQxZThlMzk1YjcyOWYiCisKK0RFUEVORFMgKz0gImxpYnhleHQgaW5wdXRwcm90byBsaWJ4Zml4ZXMiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YzRhNjljMzRiMTllYzFlNDIxMmU4NDk1NDk1NDRjYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyY2ZmYzI2ODY2MThkYzE4MDM3MjU2MzZjZDkyYjM2MzQyYzUxMmRjNjBhN2EzNWNiYTM0YmY3MTkyYTQyMjQ0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyN2M4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGluZXJhbWFfMS4xLjMuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGluZXJhbWE6IFhpbmVyYW1hIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYaW5lcmFtYSBpcyBhIHNpbXBsZSBsaWJyYXJ5IGRlc2lnbmVkIHRvIGludGVyZmFjZSB0aGUgXAorWGluZXJhbWEgRXh0ZW5zaW9uIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IHBoeXNpY2FsIG91dHB1dCBcCitkZXZpY2VzIHdoaWNoIG1heSBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGxvZ2ljYWwgWCBzY3JlZW4uIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZmNGY2MzRkMTY0M2EyZTYzOGJiYTNmY2QxOWMyNTM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9YaW5lcmFtYS5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MjU7bWQ1PWZjZWYyNzNiZmI2NjMzOTI1NjQxMWRkMDZlYTc5YzAyIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhpbmVyYW1hcHJvdG8iCitQUk9WSURFUyA9ICJ4aW5lcmFtYSIKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGluZXJhbWEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MzM2ZGM0NmFlM2JmNWY4MWMyNDdmNzEzMTQ2MWVmZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YTQ1Njk5ZjE3NzMwOTVhM2Y4MjFlNDkxY2JkNWUxMGM4ODdjNWE1ZmNlNWQ4ZDNmY2VkMTVjMmZmNzY5OGUyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2NmI1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC41LjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJHZW5lcmljIFhLQiBrZXltYXAgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gImxpYnhrYmNvbW1vbiBpcyBhIGtleW1hcCBjb21waWxlciBhbmQgc3VwcG9ydCBsaWJyYXJ5IHdoaWNoIFwKK3Byb2Nlc3NlcyBhIHJlZHVjZWQgc3Vic2V0IG9mIGtleW1hcHMgYXMgZGVmaW5lZCBieSB0aGUgWEtCIHNwZWNpZmljYXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54a2Jjb21tb24ub3JnIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDk0NTdiMTU2ZTMxNTU5NzJhYmViY2FhYWEwY2I0MzQiCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKKworREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyBmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hrYmNvbW1vbi5vcmcvZG93bmxvYWQvJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjJlMWZhZWFmY2M2MDljMzBhZjNhNTYxYTkxZTg0MTU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwYmQ3ODI0NzQyYjlhNmY1MmE2Y2Y4MGUyY2FkZDZmNTM0OWNmNjAwYTM1OGQwODI2MDc3MjYxNWI4OWQxOWMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3MiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsbGlieGNiIHhrZXlib2FyZC1jb25maWcsIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmZpbGVfMS4wLjkuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiZmlsZV8xLjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWEzNDRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmZpbGVfMS4wLjkuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJYS0I6IFggS2V5Ym9hcmQgRmlsZSBtYW5pcHVsYXRpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGlieGtiZmlsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gcmVhZCBhbmQgbWFuaXB1bGF0ZSBcCitkZXNjcmlwdGlvbiBmaWxlcyBmb3IgWEtCLCB0aGUgWDExIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9uLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGJlNzM2N2Y3ZTVkNjA1YTQyNmY3NmJiMzdkNGQ2MWYiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGticHJvdG8iCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGE0Y2ZlYWYyNGRhYjFiOTkxOTAzNDU1ZDZkN2Q0MDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE4MTdlMDUzMDk2MTk3NWQ5NTEzYjc3Mzk2MGI0ZWRkMjc1ZjdkNWM3MjI5M2Q1YTE1MWVkNGY0MmFlYjE2YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwM2JhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiWG11IGFuZCBYbXV1OiBYIE1pc2NlbGxhbmVvdXMgVXRpbGl0eSBsaWJyYXJpZXMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYbXUgTGlicmFyeSBpcyBhIGNvbGxlY3Rpb24gb2YgbWlzY2VsbGFuZW91cyAoc29tZSBcCittaWdodCBzYXkgcmFuZG9tKSB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB1c2VmdWwgaW4gYnVpbGRpbmcgXAordmFyaW91cyBhcHBsaWNhdGlvbnMgYW5kIHdpZGdldHMuIFRoaXMgbGlicmFyeSBpcyByZXF1aXJlZCBieSB0aGUgQXRoZW5hIFwKK1dpZGdldHMuIEEgc3Vic2V0IG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkbyBub3QgcmVseSBvbiB0aGUgQXRoZW5hIFwKK1dpZGdldHMgKGxpYlhhdykgb3IgWCBUb29sa2l0IEluc3RyaW5zaWNzIChsaWJYdCkgYXJlIHByb3ZpZGVkIGluIGEgXAorc2Vjb25kIGxpYnJhcnksIGxpYlhtdXUuIgorCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRlZjNkOGU0ZTljNDIwMDRmMTk0MWZhMjJmMDFkYzE4IgorCitERVBFTkRTICs9ICJsaWJ4dCBsaWJ4ZXh0IgorUFJPVklERVMgPSAieG11IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhtdSIKKworTEVBRF9TT05BTUUgPSAibGliWG11IgorCitQQUNLQUdFUyA9KyAibGlieG11dSIKKworRklMRVNfbGlieG11dSA9ICIke2xpYmRpcn0vbGliWG11dS5zby4qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQxZDkyYWI2MjdkZmEwNjU2ODA3NjA0M2YzZTA4OWU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1NmVkYzdjMzgzMjU0ZWVmOGI0ZTFiNzMzYzNiZjFkYzA2MWI1MjNjOWY5ODMzYWM3MDU4Mzc4YjgzNDlkMGIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHBtXzMuNS4xMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cG1fMy41LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTg3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHBtXzMuNS4xMS5iYgpAQCAtMCwwICsxLDI3IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworIyBsaWJ4cG0gcmVxdWlyZXMgeGdldHRleHQgdG8gYnVpbGQKK2luaGVyaXQgZ2V0dGV4dAorCitTVU1NQVJZID0gIlhwbTogWCBQaXhtYXAgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhwbSBwcm92aWRlcyBzdXBwb3J0IGFuZCBjb21tb24gb3BlcmF0aW9uIGZvciB0aGUgWFBNIFwKK3BpeG1hcCBmb3JtYXQsIHdoaWNoIGlzIGNvbW1vbmx5IHVzZWQgaW4gbGVnYWN5IFggYXBwbGljYXRpb25zLiAgWFBNIGlzIFwKK2FuIGV4dGVuc2lvbiBvZiB0aGUgbW9ub2Nocm9tZSBYQk0gYml0bWFwIHNwZWNpZmljaWVkIGluIHRoZSBYIFwKK3Byb3RvY29sLiIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01MWY0MjcwYjAxMmVjZDRhYjFhMTY0ZjVmNGVkNmNmNyIKK0RFUEVORFMgKz0gImxpYnhleHQgbGlic20gbGlieHQiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhwbSIKKworUEFDS0FHRVMgPSsgInN4cG0gY3hwbSIKK0ZJTEVTX2N4cG0gPSAiJHtiaW5kaXJ9L2N4cG0iCitGSUxFU19zeHBtID0gIiR7YmluZGlyfS9zeHBtIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzY5ZWUxMmE0MzYxMWNkZWJkMzgwOTRlYWY4M2YzZjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzViZGFmYTUxZDFhZTMwMDg2ZmFjMDFhYjgzYmU4ZDQ3ZmUxMTdiMjM4ZDM0MzdmOGU5NjU0MzQwOTBlMDQxYyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyYW5kcl8xLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJiYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyYW5kcl8xLjUuMC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlhSYW5kUjogWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgRXh0ZW5zaW9uLCBjYWxsZWQgUmFuZFIgXAorZm9yIHNob3J0LCBicmluZ3MgdGhlIGFiaWxpdHkgdG8gcmVzaXplLCByb3RhdGUgYW5kIHJlZmxlY3QgdGhlIHJvb3QgXAord2luZG93IG9mIGEgc2NyZWVuLiBJdCBpcyBiYXNlZCBvbiB0aGUgWCBSZXNpemUgYW5kIFJvdGF0ZSBFeHRlbnNpb24gYXMgXAorc3BlY2lmaWVkIGluIHRoZSBQcm9jZWVkaW5ncyBvZiB0aGUgMjAwMSBVc2VuaXggVGVjaG5pY2FsIENvbmZlcmVuY2UgXAorW1JBTkRSXS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5ZDFhMjExOGE2Y2Q1NzI3NTIxZGI4ZTdhMmZlZTY5IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByYW5kcnByb3RvIGxpYnhyZW5kZXIgbGlieGV4dCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcmFuZHIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjMwOTc2Mjg2N2U0MWM2ZmQ4MTNkYTg4MGQ4YTFiYzkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZmODY0OTU5YjdmYzM1ZGIxMTc1NGIyNzBkNzExMDZlZjViNWNmMzYzNDI2YWE1ODU4OWNiOGFjODI2NmRlNTgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVuZGVyXzAuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZGUwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlhSZW5kZXI6IFggUmVuZGVyaW5nIEV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWCBSZW5kZXJpbmcgRXh0ZW5zaW9uIChSZW5kZXIpIGludHJvZHVjZXMgZGlnaXRhbCBcCitpbWFnZSBjb21wb3NpdGlvbiBhcyB0aGUgZm91bmRhdGlvbiBvZiBhIG5ldyByZW5kZXJpbmcgbW9kZWwgd2l0aGluIHRoZSBcCitYIFdpbmRvdyBTeXN0ZW0uIFJlbmRlcmluZyBnZW9tZXRyaWMgZmlndXJlcyBpcyBhY2NvbXBsaXNoZWQgYnkgXAorY2xpZW50LXNpZGUgdGVzc2VsbGF0aW9uIGludG8gZWl0aGVyIHRyaWFuZ2xlcyBvciB0cmFwZXpvaWRzLiAgVGV4dCBpcyBcCitkcmF3biBieSBsb2FkaW5nIGdseXBocyBpbnRvIHRoZSBzZXJ2ZXIgYW5kIHJlbmRlcmluZyBzZXRzIG9mIHRoZW0uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kOGJjNzE5ODZkM2I5YjM2MzlmNmRmZDZmYWM4ZjE5NiIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgcmVuZGVycHJvdG8geHByb3RvIHhkbWNwIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhyZW5kZXIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjVkYjkyOTYyYjEyNGNhM2E4MTQ3ZGFhZTRhZGJkNjIyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZjMmZlNTc5ODBhMTQwOTI0MjZkZmZjZDFmMmQ5ZGUwOTg3YjlkNDBhZGVhNjYzYmQ3MGQ2MzQyYzBlOWJlMWEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlc18xLjAuNy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVzXzEuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDRjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlc18xLjAuNy5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlhSZXM6IFggUmVzb3VyY2UgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhSZXMgcHJvdmlkZXMgYW4gWCBXaW5kb3cgU3lzdGVtIGNsaWVudCBpbnRlcmZhY2UgdG8gXAordGhlIFJlc291cmNlIGV4dGVuc2lvbiB0byB0aGUgWCBwcm90b2NvbC4gIFRoZSBSZXNvdXJjZSBleHRlbnNpb24gYWxsb3dzIFwKK2ZvciBYIGNsaWVudHMgdG8gc2VlIGFuZCBtb25pdG9yIHRoZSBYIHJlc291cmNlIHVzYWdlIG9mIHZhcmlvdXMgY2xpZW50cyBcCisocGl4bWFwcywgZXQgYWwpLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGM4OTQ0MWE4ZGYyNjFiZGM1NjU4NzQ2NWUxM2M3ZmEiCisKK0RFUEVORFMgKz0gImxpYnhleHQgcmVzb3VyY2Vwcm90byIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcmVzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDVlZjI5MjA2YTZiNTgyNTRjODFiZWEyOGVjNmM5NWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjY4OTkwNTRhYTg3ZjgxYjE3YmVjYzY4ZTg2NDViMjQwZjE0MDQ2NGNmOTBjNDI2MTZlYmIyNjNlYzVmYTBlNSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2NybnNhdmVyXzEuMi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzY3Juc2F2ZXJfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0ZTVkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2NybnNhdmVyXzEuMi4yLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhzY3Juc2F2ZXI6IFggU2NyZWVuIFNhdmVyIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWCBXaW5kb3cgU3lzdGVtIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZSBcCitpbWFnZSBvbiBhIGRpc3BsYXkgc2NyZWVuIGFmdGVyIGEgdXNlci1zZXR0YWJsZSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB0byBcCithdm9pZCBidXJuaW5nIHRoZSBjYXRob2RlIHJheSB0dWJlIHBob3NwaG9ycy4gSG93ZXZlciwgbm8gaW50ZXJmYWNlcyBhcmUgXAorcHJvdmlkZWQgZm9yIHRoZSB1c2VyIHRvIGNvbnRyb2wgdGhlIGltYWdlIHRoYXQgaXMgZHJhd24uIFRoaXMgZXh0ZW5zaW9uIFwKK2FsbG93cyBhbiBleHRlcm5hbCBcInNjcmVlbiBzYXZlclwiIGNsaWVudCB0byBkZXRlY3Qgd2hlbiB0aGUgYWx0ZXJuYXRlIFwKK2ltYWdlIGlzIHRvIGJlIGRpc3BsYXllZCBhbmQgdG8gcHJvdmlkZSB0aGUgZ3JhcGhpY3MuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIxZmQxNTRlZTc1NzgxMzYzMmFkYTg3MWEzNDExM2ZiIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHNjcm5zYXZlcnByb3RvIgorUFJPVklERVMgPSAibGlieHNzIgorUlJFUExBQ0VTXyR7UE59ID0gImxpYnhzcyIKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWFNjcm5TYXZlciIKKworU1JDX1VSSVttZDVzdW1dID0gIjdhNzczYjE2MTY1ZTM5ZTkzODY1MGJjYzkwMjdjMWQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhmZjFlZmE3MzQxYzdmMzRiY2Y5YjE3Yzg5NjQ4ZDYzMjVkZGFhZTIyZTM5MDRlMDkxNzk0ZTBiNDQyNmNlMWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNobWZlbmNlXzEuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2htZmVuY2VfMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzRiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNobWZlbmNlXzEuMi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlNoYXJlZCBtZW1vcnkgJ1N5bmNGZW5jZScgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IG9mZmVycyBhIENQVS1iYXNlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIGNvbXBhdGlibGUgXAord2l0aCB0aGUgWCBTeW5jRmVuY2Ugb2JqZWN0cyB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgXAordXNpbmcgZmlsZSBkZXNjcmlwdG9yIHBhc3NpbmcuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00N2U1MDhjYTI4MGZkZTk3OTA2ZWFjYjc3ODkyYzNhYyIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjY2NjYyZTc2ODk5MTEyYzBmOTllMjJmMmZjNzc1YTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQyMWIyZDFmZDc4YzFlZmJlMWYyYzE2ZGFlMWNiMjNmOGZkMjMxZGNmODkxNDY1YjhkZWJlNjM2YTkwNTRiMGMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2Yzc1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBmaXhlcyBjb21waWxhdGlvbiB3aXRoIHgzMiB0b29sY2hhaW4uCisKK1JlY2VpdmVkIHRoaXMgcGF0Y2ggZnJvbSBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8xCisKKworLS0tIGxpYlh0LTEuMS4xL2luY2x1ZGUvWDExL1h0b3MuaC54MzIJMjAxMS0wMi0wOCAwNzo1Njo0MC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJYdC0xLjEuMS9pbmNsdWRlL1gxMS9YdG9zLmgJMjAxMS0xMS0zMCAxNzoxOToyNy40NzMzNDk3NzAgLTA4MDAKK0BAIC02Miw3ICs2Miw3IEBAIFNPRlRXQVJFLgorICAgICBkZWZpbmVkKF9fc3BhcmM2NF9fKSB8fCBcCisgICAgIGRlZmluZWQoX19zMzkweF9fKSB8fCBcCisgICAgIChkZWZpbmVkKF9faHBwYV9fKSAmJiBkZWZpbmVkKF9fTFA2NF9fKSkgfHwgXAorLSAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorKyAgICAoKGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKGFtZDY0KSkgJiYgZGVmaW5lZChfX0xQNjRfXykpIHx8IFwKKyAgICAgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBcCisgICAgIChkZWZpbmVkKHNnaSkgJiYgKF9NSVBTX1NaTE9ORyA9PSA2NCkpCisgI2RlZmluZSBMT05HNjQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWVkMGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0XzEuMS41LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiWHQ6IFggVG9vbGtpdCBJbnRyaW5zaWNzIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBJbnRyaW5zaWNzIGFyZSBhIHByb2dyYW1taW5nIGxpYnJhcnkgdGFpbG9yZWQgdG8gdGhlIFwKK3NwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHVzZXIgaW50ZXJmYWNlIGNvbnN0cnVjdGlvbiB3aXRoaW4gYSBuZXR3b3JrIFwKK3dpbmRvdyBzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgWCBXaW5kb3cgU3lzdGVtLiBUaGUgSW50cmluc2ljcyBhbmQgYSBcCit3aWRnZXQgc2V0IG1ha2UgdXAgYW4gWCBUb29sa2l0LiBUaGUgSW50cmluc2ljcyBwcm92aWRlIHRoZSBiYXNlIFwKK21lY2hhbmlzbSBuZWNlc3NhcnkgdG8gYnVpbGQgYSB3aWRlIHZhcmlldHkgb2YgaW50ZXJvcGVyYXRpbmcgd2lkZ2V0IFwKK3NldHMgYW5kIGFwcGxpY2F0aW9uIGVudmlyb25tZW50cy4gVGhlIEludHJpbnNpY3MgYXJlIGEgbGF5ZXIgb24gdG9wIG9mIFwKK1hsaWIsIHRoZSBDIExpYnJhcnkgWCBJbnRlcmZhY2UuIFRoZXkgZXh0ZW5kIHRoZSBmdW5kYW1lbnRhbCBcCithYnN0cmFjdGlvbnMgcHJvdmlkZWQgYnkgdGhlIFggV2luZG93IFN5c3RlbSB3aGlsZSBzdGlsbCByZW1haW5pbmcgXAoraW5kZXBlbmRlbnQgb2YgYW55IHBhcnRpY3VsYXIgdXNlciBpbnRlcmZhY2UgcG9saWN5IG9yIHN0eWxlLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjU2NWIxZTAwOTRlYTFjYWFlMDk3MWNjNDAzNWYzNDMiCisKKworREVQRU5EUyArPSAidXRpbC1saW51eCBsaWJ4Y2IgbGlic20gdmlydHVhbC9saWJ4MTEga2Jwcm90byBsaWJ4ZG1jcCIKK1BST1ZJREVTID0gInh0IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh0IgorCitTUkNfVVJJICs9ICAiZmlsZTovL2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUteGtiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGY1YjU1NzZmYmFiYmEyOWEwNWYzY2EyMjI2Zjc0ZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDZlZWI2YmU3ODAyMTFmZGQ5OGM1MTA5Mjg2NjE4ZjY3MDc3MTIyMzVmZGQxOWRmNGNlMWU2OTU0ZjM0OWYxYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dHN0XzEuMi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0c3RfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwYmNmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dHN0XzEuMi4yLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhUZXN0OiBYIFRlc3QgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgZXh0ZW5zaW9uIGlzIGEgbWluaW1hbCBzZXQgb2YgY2xpZW50IGFuZCBzZXJ2ZXIgXAorZXh0ZW5zaW9ucyByZXF1aXJlZCB0byBjb21wbGV0ZWx5IHRlc3QgdGhlIFgxMSBzZXJ2ZXIgd2l0aCBubyB1c2VyIFwKK2ludGVydmVudGlvbi4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YmI0Zjg5OTcyYzM4NjlmNjE3ZjYxYzFhNzlhZDE5NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL1hUZXN0LmM7YmVnaW5saW5lPTI7ZW5kbGluZT0zMjttZDU9YjFjOGM5ZGZmODQyYjRkNWI4OWNhNWZhMzJjNDBlOTkiCisKK0RFUEVORFMgKz0gImxpYnhleHQgcmVjb3JkcHJvdG8gaW5wdXRwcm90byBsaWJ4aSIKK1BST1ZJREVTID0gInh0c3QiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh0c3QiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNWM2YjM2NmFjM2RjN2ExMmM1ZDc5ODE2Y2U5NmE1OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZjBhN2ZmZDU3N2U1ZjFhMjViMTY2M2IzNzU2Nzk1Mjk2NjNhMTg4MDE1MWJlYWE3M2U5MTg2YzgzMDlmNmQ5IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dl8xLjAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyYjhiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dl8xLjAuMTAuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJYdjogWCBWaWRlbyBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWHYgcHJvdmlkZXMgYW4gWCBXaW5kb3cgU3lzdGVtIGNsaWVudCBpbnRlcmZhY2UgdG8gdGhlIFwKK1ggVmlkZW8gZXh0ZW5zaW9uIHRvIHRoZSBYIHByb3RvY29sLiBUaGUgWCBWaWRlbyBleHRlbnNpb24gYWxsb3dzIGZvciBcCithY2NlbGVyYXRlZCBkcmF3aW5nIG9mIHZpZGVvcy4gIEhhcmR3YXJlIGFkYXB0b3JzIGFyZSBleHBvc2VkIHRvIFwKK2NsaWVudHMsIHdoaWNoIG1heSBkcmF3IGluIGEgbnVtYmVyIG9mIGNvbG91cnNwYWNlcywgaW5jbHVkaW5nIFlVVi4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTgyN2RhOWFmYWIxZjcyN2YyYTY2NTc0NjI5ZTBmMzljIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHZpZGVvcHJvdG8iCisKK1hPUkdfUE4gPSAibGliWHYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMGFmNDlkN2Q3NThiOTkwZTZmZWY2Mjk3MjJkNGFjYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NWZlOTJmODY4NmNlODYxMmUyYzFiZmFmNThjMDU3NzE1NTM0NDE5ZGE3MDBiZGE4ZDUxN2IxZDk3OTE0NTI1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2bWNfMS4wLjkuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZtY18xLjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU4NDk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2bWNfMS4wLjkuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJYdk1DOiBYIFZpZGVvIE1vdGlvbiBDb21wZW5zYXRpb24gZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlh2TUMgZXh0ZW5kcyB0aGUgWCBWaWRlbyBleHRlbnNpb24gKFh2KSBhbmQgZW5hYmxlcyBcCitoYXJkd2FyZSByZW5kZXJlZCBtb3Rpb24gY29tcGVuc2F0aW9uIHN1cHBvcnQuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wYTIwN2YwOGQ0OTYxNDg5YzU1MDQ2YzlhNWU1MDBkYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93cmFwcGVyL1h2TUNXcmFwcGVyLmM7ZW5kbGluZT0yNjttZDU9NTE1MWRhYTgxNzJhM2YxYmIwY2IwZTBmZjE1N2Q5ZGUiCisKK0RFUEVORFMgKz0gImxpYnhleHQgbGlieHYgdmlkZW9wcm90byIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYdk1DIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWJhNmI3MzhlZDVmZGNkOGY0MjAzZDdjOGE0NzBjNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDcwM2Q3ZGZmNmZmYzE4NGYxNzM1Y2E1ZDRlYjlkYmI0MDJiNTIyZTA4ZTAwOGYyZjk2YWVlMTZjNDBhNTc1NiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVhMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2ZGdhXzEuMS40LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtREdBOiBYRnJlZTg2IERpcmVjdCBHcmFwaGljcyBBY2Nlc3MgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlh4Zjg2ZGdhIHByb3ZpZGVzIHRoZSBYRnJlZTg2LURHQSBleHRlbnNpb24sIHdoaWNoIFwKK2FsbG93cyBkaXJlY3QgZ3JhcGhpY3MgYWNjZXNzIHRvIGEgZnJhbWVidWZmZXItbGlrZSByZWdpb24sIGFuZCBhbHNvIFwKK2FsbG93cyByZWxhdGl2ZSBtb3VzZSByZXBvcnRpbmcsIGV0IGFsLiAgSXQgaXMgbWFpbmx5IHVzZWQgYnkgZ2FtZXMgYW5kIFwKK2VtdWxhdG9ycyBmb3IgZ2FtZXMuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hYmI5OWFjMTI1Zjg0ZjQyNGE0Mjc4MTUzOTg4ZTMyZiIKKworREVQRU5EUyArPSAibGlieGV4dCB4Zjg2ZGdhcHJvdG8iCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkN2RkOWI5ZGYzMzZiN2RkNDAyOGI2YjU2NTQyZmYyYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZWVjZDRiNmMxZGY5YTM3MDRjMDQ3MzNjMmY0ZmE5M2VmNDY5YjU1MDI4YWY1NTEwYjI1ODE4ZTI0NTZjNzdlIgorCitYT1JHX1BOID0gImxpYlh4Zjg2ZGdhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4Nm1pc2NfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2ZjFmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4Nm1pc2NfMS4wLjMuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJYRnJlZTg2LU1pc2M6IFhGcmVlODYgbWlzY2VsbGFuZW91cyBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFhGcmVlODYtTWlzYyBleHRlbnNpb24sIHByb3ZpZGVzIGEgbWVhbnMgdG8gYWNjZXNzIFwKK2lucHV0IGRldmljZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHNwZWNpZmljIHRvIHRoZSBYRnJlZTg2L1hvcmcgRERYLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjdjOTFlY2M0MzViZDNkMmJmYWQ4Njg5MTRjOTRiNDUiCisKK0RFUEVORFMgKz0gImxpYnhleHQgeGY4Nm1pc2Nwcm90byIKK1BST1ZJREVTID0gInh4Zjg2bWlzYyIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYeGY4Nm1pc2MiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YmMwYmY3ODkwOWZkNzEwMjFjNDY2Yzc5M2Q0Mzg1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NjNmNDIwMDg2MmVmZDMzMzRjMzNhNjY5ZTBhMGFhZTViYWIzMWYzOTk4ZGI3NWI4N2E5OWE2OTdjYzI2YjViIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZ2bV8xLjEuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NnZtXzEuMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Zjg3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZ2bV8xLjEuNC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlhGcmVlODYtVk06IFhGcmVlODYgdmlkZW8gbW9kZSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWHhmODZ2bSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIFwKK1hGcmVlODYtVmlkTW9kZUV4dGVuc2lvbiBleHRlbnNpb24sIHdoaWNoIGFsbG93cyBjbGllbnQgYXBwbGljYXRpb25zIHRvIFwKK2dldCBhbmQgc2V0IHZpZGVvIG1vZGUgdGltaW5ncyBpbiBleHRlbnNpdmUgZGV0YWlsLiAgSXQgaXMgdXNlZCBieSB0aGUgXAoreHZpZHR1bmUgcHJvZ3JhbSBpbiBwYXJ0aWN1bGFyLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmEwYjljNDYyZDhmMmYxM2ViYTI2NDkyZDQyZWE2M2QiCisKK0RFUEVORFMgKz0gImxpYnhleHQgeGY4NnZpZG1vZGVwcm90byIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYeGY4NnZtIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjk4YjhmZmY4MmRmMTczMDRkZmRiNWZlNDA2NmZlM2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWZlZTI3ZjkzYzVmMzFjMGFkNTgyODUyYzBmYjM2ZDUwZTRkZTdjZDU4NWZjZjY1NWUyNzhhNjMzZDg1Y2Q1NyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2OWRjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoCkBAIC0wLDAgKzEsMTQ0IEBACitGcm9tIGEwZjUzZTFkYmIzODUxYmIwZjBlZmNmZGJkNTY1YjA1ZTRiZTljYWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcmVhcz0yME09QzM9QkNsbGVyPz0gPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CitEYXRlOiBUaHUsIDIzIEF1ZyAyMDEyIDE4OjEwOjU3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBBUk06IHFlbXUgcmVsYXRlZCB3b3JrYXJvdW5kcyBpbiBjcHUgZmVhdHVyZXMgZGV0ZWN0aW9uCisgY29kZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIHdhcyBwb3J0ZWQgZnJvbSBtZXRhLW9lJ3MgcGF0Y2ggWzFdLiBUaGUgb3JpZ2luYWwgcGl4bWFuIHBhdGNoIGlzIGZvdW5kCithdCBbMl0uCisKK1sxXSBodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL21ldGEtb3BlbmVtYmVkZGVkL3RyZWUvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi0wLjI2LjIvMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoCitbMl0gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9waXhtYW4vMjAxMS1KYW51YXJ5LzAwMDkwNi5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdIHFlbXUgZml4CisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIHBpeG1hbi9waXhtYW4tYXJtLmMgfCAgIDgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BpeG1hbi9waXhtYW4tYXJtLmMgYi9waXhtYW4vcGl4bWFuLWFybS5jCitpbmRleCAyMzM3NGU0Li5kOThiZGE2IDEwMDY0NAorLS0tIGEvcGl4bWFuL3BpeG1hbi1hcm0uYworKysrIGIvcGl4bWFuL3BpeG1hbi1hcm0uYworQEAgLTEyOSwxNiArMTI5LDM1IEBAIGRldGVjdF9jcHVfZmVhdHVyZXMgKHZvaWQpCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8ZWxmLmg+CisgCisrLyoKKysgKiBUaGUgd2hvbGUgQ1BVIGNhcGFiaWxpdGllcyBkZXRlY3Rpb24gaXMgYSBiaXQgdWdseTogd2hlbiBydW5uaW5nIGluCisrICogdXNlcnNwYWNlIHFlbXUsIHdlIHNlZSAvcHJvYy9zZWxmL2F1eHYgZnJvbSB0aGUgaG9zdCBzeXN0ZW0uIFRvIG1ha2UKKysgKiBldmVyeXRoaW5nIGV2ZW4gd29yc2UsIHRoZSBzaXplIG9mIGVhY2ggdmFsdWUgaXMgNjQtYml0IHdoZW4gcnVubmluZworKyAqIG9uIGEgNjQtYml0IGhvc3Qgc3lzdGVtLiBTbyB0aGUgZGF0YSBpcyB0b3RhbGx5IGJvZ3VzIGJlY2F1c2Ugd2UgZXhwZWN0CisrICogMzItYml0IHZhbHVlcy4gQXMgQVRfUExBVEZPUk0gdmFsdWUgaXMgdXNlZCBhcyBhIHBvaW50ZXIsIGl0IG1heSBjYXVzZQorKyAqIHNlZ2ZhdWx0IChudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24geDg2LTY0IGhvc3QpLiBTbyBpbiBvcmRlciB0byBiZQorKyAqIG9uIGEgc2FmZSBzaWRlLCB3ZSByZXF1aXJlIHRoYXQgQVRfUExBVEZPUk0gdmFsdWUgaXMgZm91bmQgb25seSBvbmNlLAorKyAqIGFuZCBpdCBoYXMgbm9uLXplcm8gdmFsdWUgKHRoaXMgaXMgc3RpbGwgbm90IHRvdGFsbHkgcmVsaWFibGUgZm9yIGEgYmlnCisrICogZW5kaWFuIDY0LWJpdCBob3N0IHN5c3RlbSBydW5uaW5nIHFlbXUgYW5kIG1heSB0aGVvcmV0aWNhbGx5IGZhaWwpLgorKyAqLworKyNkZWZpbmUgQVJNX0hXQ0FQX1ZGUCA2NAorKyNkZWZpbmUgQVJNX0hXQ0FQX0lXTU1YVCA1MTIKKysjZGVmaW5lIEFSTV9IV0NBUF9ORU9OIDQwOTYKKysKKyBzdGF0aWMgYXJtX2NwdV9mZWF0dXJlc190CisgZGV0ZWN0X2NwdV9mZWF0dXJlcyAodm9pZCkKKyB7CisgICAgIGFybV9jcHVfZmVhdHVyZXNfdCBmZWF0dXJlcyA9IDA7CisgICAgIEVsZjMyX2F1eHZfdCBhdXg7CisgICAgIGludCBmZDsKKysgICAgdWludDMyX3QgaHdjYXAgPSAwOworKyAgICBjb25zdCBjaGFyICpwbGF0ID0gTlVMTDsKKysgICAgaW50IHBsYXRfY250ID0gMDsKKyAKKyAgICAgZmQgPSBvcGVuICgiL3Byb2Mvc2VsZi9hdXh2IiwgT19SRE9OTFkpOworICAgICBpZiAoZmQgPj0gMCkKK0BAIC0xNDcsMzIgKzE2Niw2MSBAQCBkZXRlY3RfY3B1X2ZlYXR1cmVzICh2b2lkKQorIAl7CisgCSAgICBpZiAoYXV4LmFfdHlwZSA9PSBBVF9IV0NBUCkKKyAJICAgIHsKKy0JCXVpbnQzMl90IGh3Y2FwID0gYXV4LmFfdW4uYV92YWw7CistCistCQkvKiBoYXJkY29kZSB0aGVzZSB2YWx1ZXMgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIHNwZWNpZmljCistCQkgKiB2ZXJzaW9ucyBvZiB0aGUgaHdjYXAgaGVhZGVyLCBlLmcuIEhXQ0FQX05FT04KKy0JCSAqLworLQkJaWYgKChod2NhcCAmIDY0KSAhPSAwKQorLQkJICAgIGZlYXR1cmVzIHw9IEFSTV9WRlA7CistCQlpZiAoKGh3Y2FwICYgNTEyKSAhPSAwKQorLQkJICAgIGZlYXR1cmVzIHw9IEFSTV9JV01NWFQ7CistCQkvKiB0aGlzIGZsYWcgaXMgb25seSBwcmVzZW50IG9uIGtlcm5lbCAyLjYuMjkgKi8KKy0JCWlmICgoaHdjYXAgJiA0MDk2KSAhPSAwKQorLQkJICAgIGZlYXR1cmVzIHw9IEFSTV9ORU9OOworKwkJaHdjYXAgPSBhdXguYV91bi5hX3ZhbDsKKyAJICAgIH0KKyAJICAgIGVsc2UgaWYgKGF1eC5hX3R5cGUgPT0gQVRfUExBVEZPUk0pCisgCSAgICB7CistCQljb25zdCBjaGFyICpwbGF0ID0gKGNvbnN0IGNoYXIqKSBhdXguYV91bi5hX3ZhbDsKKy0KKy0JCWlmIChzdHJuY21wIChwbGF0LCAidjdsIiwgMykgPT0gMCkKKysJCXBsYXQgPSAoY29uc3QgY2hhciopIGF1eC5hX3VuLmFfdmFsOworKwkJcGxhdF9jbnQrKzsKKysJICAgIH0KKysJfQorKwljbG9zZSAoZmQpOworKwlpZiAocGxhdCA9PSBOVUxMIHx8IHBsYXRfY250ICE9IDEgfHwgKnBsYXQgIT0gJ3YnKQorKwl7CisrCSAgICAvKgorKwkgICAgICogU29tZXRoaW5nIHNlZW1zIHRvIGJlIHJlYWxseSB3cm9uZywgbW9zdCBsaWtlbHkgd2UgYXJlCisrCSAgICAgKiBydW5uaW5nIHVuZGVyIHFlbXUuIExldCdzIHVzZSBtYWNoaW5lIHR5cGUgZnJvbSAidW5hbWUiIGZvcgorKwkgICAgICogQ1BVIGNhcGFiaWxpdGllcyBkZXRlY3Rpb246CisrCSAgICAgKiBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vcWVtdS1kZXZlbCBhdCBub25nbnUub3JnL21zZzIyMjEyLmh0bWwKKysJICAgICAqLworKwkgICAgc3RydWN0IHV0c25hbWUgdTsKKysJICAgIGh3Y2FwID0gMDsgLyogY2xlYXIgaHdjYXAsIGJlY2F1c2UgaXQgaXMgYm9ndXMgKi8KKysJICAgIGlmICh1bmFtZSAoJnUpID09IDApCisrCSAgICB7CisrCQlpZiAoc3RyY21wICh1Lm1hY2hpbmUsICJhcm12N2wiKSA9PSAwKQorKwkJeworIAkJICAgIGZlYXR1cmVzIHw9IChBUk1fVjcgfCBBUk1fVjYpOworLQkJZWxzZSBpZiAoc3RybmNtcCAocGxhdCwgInY2bCIsIDMpID09IDApCisrCQkgICAgaHdjYXAgfD0gQVJNX0hXQ0FQX1ZGUDsgIC8qIHFlbXUgaXMgc3VwcG9zZWQgdG8gZW11bGF0ZSB2ZnAgKi8KKysJCSAgICBod2NhcCB8PSBBUk1fSFdDQVBfTkVPTjsgLyogcWVtdSBpcyBzdXBwb3NlZCB0byBlbXVsYXRlIG5lb24gKi8KKysJCX0KKysJCWVsc2UgaWYgKHN0cmNtcCAodS5tYWNoaW5lLCAiYXJtdjZsIikgPT0gMCkKKysJCXsKKyAJCSAgICBmZWF0dXJlcyB8PSBBUk1fVjY7CisrCQkgICAgaHdjYXAgfD0gQVJNX0hXQ0FQX1ZGUDsgIC8qIHFlbXUgaXMgc3VwcG9zZWQgdG8gZW11bGF0ZSB2ZnAgKi8KKysJCX0KKyAJICAgIH0KKyAJfQorLQljbG9zZSAoZmQpOworKwllbHNlIGlmIChzdHJuY21wIChwbGF0LCAidjdsIiwgMykgPT0gMCkKKysJeworKwkgICAgZmVhdHVyZXMgfD0gKEFSTV9WNyB8IEFSTV9WNik7CisrCX0KKysJZWxzZSBpZiAoc3RybmNtcCAocGxhdCwgInY2bCIsIDMpID09IDApCisrCXsKKysJICAgIGZlYXR1cmVzIHw9IEFSTV9WNjsKKysJfQorICAgICB9CisgCisrICAgIC8qIGhhcmRjb2RlIHRoZXNlIHZhbHVlcyB0byBhdm9pZCBkZXBlbmRpbmcgb24gc3BlY2lmaWMKKysgICAgICogdmVyc2lvbnMgb2YgdGhlIGh3Y2FwIGhlYWRlciwgZS5nLiBIV0NBUF9ORU9OCisrICAgICAqLworKyAgICBpZiAoKGh3Y2FwICYgQVJNX0hXQ0FQX1ZGUCkgIT0gMCkKKysgICAgICAgIGZlYXR1cmVzIHw9IEFSTV9WRlA7CisrICAgIGlmICgoaHdjYXAgJiBBUk1fSFdDQVBfSVdNTVhUKSAhPSAwKQorKyAgICAgICAgZmVhdHVyZXMgfD0gQVJNX0lXTU1YVDsKKysgICAgLyogdGhpcyBmbGFnIGlzIG9ubHkgcHJlc2VudCBvbiBrZXJuZWwgMi42LjI5ICovCisrICAgIGlmICgoaHdjYXAgJiBBUk1fSFdDQVBfTkVPTikgIT0gMCkKKysgICAgICAgIGZlYXR1cmVzIHw9IEFSTV9ORU9OOworKworICAgICByZXR1cm4gZmVhdHVyZXM7CisgfQorIAorLS0gCisxLjcuNi41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL2FzbV9pbmNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MmE1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL2FzbV9pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0ZpeGVzIGVycm9ycyBsaWtlCisKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgLmxpYnMvcGl4bWFuLW1pcHMtZHNwcjItYXNtLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworaXQgd29ya3Mgd2l0aCBnbGliYyBiZWNhdXNlIGl0IHVzZXMgZ2NjIGZpeGVkLWhlYWRlcnMgYnV0IHRoYXRzIG5vdCByaWdodC4KKworV2UgbW92ZSB0aGUgaW5jbHVkZSB1bmRlciBDIGJsb2NrCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBwaXhtYW4tMC4zMi42L3BpeG1hbi9waXhtYW4tcHJpdmF0ZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGl4bWFuLTAuMzIuNi5vcmlnL3BpeG1hbi9waXhtYW4tcHJpdmF0ZS5oCisrKysgcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLXByaXZhdGUuaAorQEAgLTEsNCArMSwzIEBACistI2luY2x1ZGUgPGZsb2F0Lmg+CisgCisgI2lmbmRlZiBQSVhNQU5fUFJJVkFURV9ICisgI2RlZmluZSBQSVhNQU5fUFJJVkFURV9ICitAQCAtMTcsNiArMTYsOCBAQAorIAorICNpZm5kZWYgX19BU1NFTUJMRVJfXworIAorKyNpbmNsdWRlIDxmbG9hdC5oPgorKworICNpZm5kZWYgUEFDS0FHRQorICMgIGVycm9yIGNvbmZpZy5oIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIHBpeG1hbi1wcml2YXRlLmgKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhNWZkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1JldmVydCBhIGNvbW1pdCBpbiBwaXhtYW4gMC4zMi42IHdoaWNoIGJyZWFrcyBjb21wbGlhdGlvbiBvbiBNSVBTIG1hY2hpbmVzIHdpdGgKK2Vycm9ycyBzdWNoIGFzOgorCitwaXhtYW4tMC4zMi42L3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uUzo0MjY3OgorRXJyb3I6IGludmFsaWQgb3BlcmFuZHMgYG1mbG8gJDE0LCRhYzMnCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworLS0tIGIvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5oCisrKysgYS9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLmgKK0BAIC03MiwxMCArNzIsNyBAQAorICNkZWZpbmUgTEVBRl9NSVBTMzJSMihzeW1ib2wpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAuZ2xvYmwgIHN5bWJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAuYWxpZ24gIDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSNpZmRlZiBfX0VMRl9fCistICAgICAgICAgICAgICAgIC5oaWRkZW4gc3ltYm9sOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC50eXBlICAgc3ltYm9sLCBAZnVuY3Rpb247ICAgICAgICAgICAgICBcCistI2VuZGlmCisgICAgICAgICAgICAgICAgIC5lbnQgICAgc3ltYm9sLCAwOyAgICAgICAgICAgICAgICAgICAgICBcCisgc3ltYm9sOiAgICAgICAgIC5mcmFtZSAgc3AsIDAsIHJhOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC5zZXQgICAgcHVzaDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuNi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zMi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTU5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuNi5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlBpeG1hbjogUGl4ZWwgTWFuaXB1bGF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlBpeG1hbiBwcm92aWRlcyBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBwaXhlbCByZWdpb25zIFwKKy0tIGEgc2V0IG9mIFktWCBiYW5kZWQgcmVjdGFuZ2xlcywgaW1hZ2UgY29tcG9zaXRpbmcgdXNpbmcgdGhlIFwKK1BvcnRlci9EdWZmIG1vZGVsIGFuZCBpbXBsaWNpdCBtYXNrIGdlbmVyYXRpb24gZm9yIGdlb21ldHJpYyBwcmltaXRpdmVzIFwKK2luY2x1ZGluZyB0cmFwZXpvaWRzLCB0cmlhbmdsZXMsIGFuZCByZWN0YW5nbGVzLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xNDA5NmM3NjlhZTBjYmI1ZmNiOTRlYzQ2OGJlMTFiMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9waXhtYW4vcGl4bWFuLW1hdHJpeC5jO2VuZGxpbmU9MjU7bWQ1PWJhNmU4NzY5YmZhYWVlMmM0MTY5ODc1NWFmMDRjNGJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BpeG1hbi9waXhtYW4tYXJtLW5lb24tYXNtLmg7ZW5kbGluZT0yNDttZDU9OWE5Y2MxZTUxYWJiZjFkYTU4ZjRkOTUyOGVjOWQ0OWIgXAorICAgICAgICAgICAgICAgICAgICIKK0RFUEVORFMgKz0gInpsaWIgbGlicG5nIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQRSA9ICIxIgorCitJV01NWFQgPSAiLS1kaXNhYmxlLWFybS1pd21teHQiCitMT09OR1NPTl9NTUkgPSAiLS1kaXNhYmxlLWxvb25nc29uLW1taSIKK05FT04gPSAiIC0tZGlzYWJsZS1hcm0tbmVvbiAiCitORU9OX2NsYXNzLW5hdGl2ZXNkayA9ICIgLS1kaXNhYmxlLWFybS1uZW9uICIKK05FT05fYXJtdjdhID0gIiAiCitORU9OX2FybXY3YS12ZnAtbmVvbiA9ICIgIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWd0ayAke0lXTU1YVH0gJHtMT09OR1NPTl9NTUl9ICR7TkVPTn0iCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZGlzYWJsZS1ndGsiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaCBcCisJICAgIGZpbGU6Ly9hc21faW5jbHVkZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4YTllOGYxNDc0M2EzOWNmMzAzODAzZjM2OWMxZjM0NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMDFmYzBkN2Q2YmMwMDE3NDk2ZjJiZDI3YjNjYTE0MjI0YWVhMGRmNmI2MjRjNWVlMmRjMDMwN2E0ZmYxNGE0IgorCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDY0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtaW1hZ2VfMC40LjAuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworREVQRU5EUyArPSAieGNiLXV0aWwiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaW1hZ2UveGNiX2ltYWdlLmM7ZW5kbGluZT0yNDttZDU9ZWFmZGY5NjVjZmI4OTk1NWZkZWRmNzUwNTQyMjNmYjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW1hZ2UveGNiX2ltYWdlLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yNzttZDU9NDhjZDI1YWU1NWU3ZGU1MjVmZTFlMWEzYTc2NzJlMWMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwOGZlOGZmZWNjOGQ0ZTM3YzBhZGU3OTA2YjNmNGM4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZGI5NmEzN2Q3ODgzMWQ2NDM1MzhkZDFiNTk1ZDdkNzEyZTA0YmRjY2Y4ODk2YTVlMThjZTBmMzk4ZWEyZmZjIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1rZXlzeW1zXzAuNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWtleXN5bXNfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhNjRlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1rZXlzeW1zXzAuNC4wLmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9rZXlzeW1zL2tleXN5bXMuYztlbmRsaW5lPTMwO21kNT0yZjhkZTAyM2VkODIzYmI5MmYwYjQ3OTAwNTc0ZWE5ZSBcCisJCQkJCSIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMDIyMjkzMDgzZWVjOWU2MmQ1NjU5MjYxYzI5ZTM2NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZWY4NDkwZmYxZGVkZTUyYjdkZTUzMzE1ODU0N2Y4YjQ1NGIyNDFhYTNlNGRjY2EzNjk1MDdmNjZmMjE2ZGQ5IgorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1yZW5kZXJ1dGlsXzAuMy45LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXJlbmRlcnV0aWxfMC4zLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjMjJlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1yZW5kZXJ1dGlsXzAuMy45LmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcmVuZGVydXRpbC9nbHlwaC5jO2VuZGxpbmU9MjQ7bWQ1PWM1MTdjNDgzYjhkNzI2MjM0ZWM5NGY5MTY5MjM2NjYxIFwKKwkJCQkJZmlsZTovL3JlbmRlcnV0aWwvdXRpbC5jO2VuZGxpbmU9MjA7bWQ1PTZlMGJmYzQ0ZmIxMzI5OGMwZjQ2OTRlYjcwZGM4MGQ0IFwKKwkJCQkJZmlsZTovL3JlbmRlcnV0aWwveGNiX3JlbmRlcnV0aWwuaDtlbmRsaW5lPTI0O21kNT1kMGRkYWIzMDUyZGQ0OTQ5YzkzY2ZjYjA4OTFjOTZkZiBcCisJCQkJCSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ2OGIxMTljOTRkYTkxMGUxMjkxZjNmZmFiOTEwMTlhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2ZTk3ZTQ4ZmIxMjg2ZDYzOTRkZGRiMWMxNzMyZjAwMjI3YzcwYmQxYmVkYjdkMWFjYWJlZmRkMzQwYmVhNWIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmMTM4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC13bV8wLjQuMS5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2V3bWgvZXdtaC5jLm00O2VuZGxpbmU9Mjc7bWQ1PTYzZmQ4MDU1MmQ3ZGM4ODZmNGViMjY3NjEwZDViYjlkIFwKKwkJCQkJZmlsZTovL2V3bWgveGNiX2V3bWguaC5tNDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMwO21kNT03M2I1ODlmOTBlZjkwYjRhNDM5OTg5NTVkYWFkNWNkOCBcCisJCQkJCWZpbGU6Ly9pY2NjbS9pY2NjbS5jO2VuZGxpbmU9Mjg7bWQ1PWUyYjMyNDBhMGMxOTdlODk3N2FkZGUyYTVjZjE4ZDUwIFwKKwkJCQkJZmlsZTovL2ljY2NtL3hjYl9pY2NjbS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzE7bWQ1PTM5Mzc3MmI3YjA3Yjk4NjhkNDc5ZDUzODIzOGMxZDhhIFwKKwkJCQkJIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODdiMTlhMWNkN2JmY2I2NWEyNGUzNmMzMDBlMDMxMjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjhiZjgxNzk2NDBlYWE4OTI3NmQyYjBmMWNlNDI4NTEwM2QxMzZiZTZjOTgyNjJiNjE1MWFhZWUxZDNjMmEzZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDA0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIHhjYi11dGlsIG1vZHVsZSBwcm92aWRlcyBhIG51bWJlciBvZiBsaWJyYXJpZXMgd2hpY2ggXAorc2l0IG9uIHRvcCBvZiBsaWJ4Y2IsIHRoZSBjb3JlIFggcHJvdG9jb2wgbGlicmFyeSwgYW5kIHNvbWUgb2YgdGhlIFwKK2V4dGVuc2lvbiBsaWJyYXJpZXMuIFRoZXNlIGV4cGVyaW1lbnRhbCBsaWJyYXJpZXMgcHJvdmlkZSBjb252ZW5pZW5jZSBcCitmdW5jdGlvbnMgYW5kIGludGVyZmFjZXMgd2hpY2ggbWFrZSB0aGUgcmF3IFggcHJvdG9jb2wgbW9yZSB1c2FibGUuIFNvbWUgXAorb2YgdGhlIGxpYnJhcmllcyBhbHNvIHByb3ZpZGUgY2xpZW50LXNpZGUgY29kZSB3aGljaCBpcyBub3Qgc3RyaWN0bHkgXAorcGFydCBvZiB0aGUgWCBwcm90b2NvbCBidXQgd2hpY2ggaGF2ZSB0cmFkaXRpb25hbGx5IGJlZW4gcHJvdmlkZWQgYnkgXAorWGxpYi4iCitIT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9YY2JVdGlsLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9WENCIgorCitMSUNFTlNFID0gIk1JVCIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKKworREVQRU5EUyA9ICJsaWJ4Y2IiCitERVBFTkRTICs9ICJncGVyZi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNmYwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWxfMC40LjAuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy94Y2JfYXV4LmM7ZW5kbGluZT0zMDttZDU9YWUzMDViOWMyYTM4ZjliYTI3MDYwMTkxMDQ2YTY0NjAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3hjYl9ldmVudC5oO2VuZGxpbmU9Mjc7bWQ1PTYyN2JlMzU1YWVlNTllMWI4YWRlODBkNWJkOTBmYWQ5IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmU5N2ZlZWQ4MTkxOTQ2NWEwNGNjYzcxZTQwNzMzMTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDZlNDk0NjljYjNiNTk0YWYxZDMzMTc2Y2Q3NTY1ZGVmMmJlM2ZhOGJlNDM3MWQ2MjI3MWZhYmI1ZWFlNTBlOSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MTY5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE1LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiS2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBXaW5kb3ciCisKK0RFU0NSSVBUSU9OID0gIlRoZSBub24tYXJjaCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGFiYXNlIGZvciBYIFwKK1dpbmRvdy4gIFRoZSBnb2FsIGlzIHRvIHByb3ZpZGUgdGhlIGNvbnNpc3RlbnQsIHdlbGwtc3RydWN0dXJlZCwgXAorZnJlcXVlbnRseSByZWxlYXNlZCBvcGVuIHNvdXJjZSBvZiBYIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgWCBcCitXaW5kb3cgU3lzdGVtIGltcGxlbWVudGF0aW9ucy4gIFRoZSBwcm9qZWN0IGlzIHRhcmdldGVkIHRvIFhLQi1iYXNlZCBcCitzeXN0ZW1zLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL1hLZXlib2FyZENvbmZpZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eGtleWJvYXJkLWNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZTdmMjFjYTdkYjk3NWM2MzQ2N2QyZTc2MjRhMTJmOSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2RhdGEveGtleWJvYXJkLWNvbmZpZy8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YWYxZGVlYjdjNWY0Y2FkNjJlNjU5NTdkOThkNjc1OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZTQ0M2NmN2NhMmYwYjQwODQ2NDcyYzAyOTY0N2EwNTkzM2ZjNzA1ZDYxMWUxNDc4YzRkYjhhNDhhNmYzOGJmIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgdmlydHVhbC9nZXR0ZXh0IHV0aWwtbWFjcm9zIGxpYnhzbHQtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXhrYi1ydWxlcy1zeW1saW5rPXhvcmcgLS1kaXNhYmxlLXJ1bnRpbWUtZGVwcyIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL3hrYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vWDExL3hrYi9jb21waWxlZAorICAgIGNkICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvcnVsZXMgJiYgbG4gLXNmIGJhc2UgeG9yZworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hvcmctbGliLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveG9yZy1saWItY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWRmMDEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hvcmctbGliLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwyNiBAQAorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eG9yZyIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlULVgiCitERVBFTkRTID0gInV0aWwtbWFjcm9zIgorCitYT1JHX1BOID0gIiR7QlBOfSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2xpYi8ke1hPUkdfUE59LSR7UFZ9LnRhci5iejIiCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc3BlY3MgLS13aXRob3V0LWdyb2ZmIC0td2l0aG91dC1wczJwZGYgLS13aXRob3V0LWZvcCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbeG1sdG9dID0gIi0td2l0aC14bWx0bywgLS13aXRob3V0LXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0tZW5hYmxlLW1hbGxvYzByZXR1cm5zbnVsbCAtLWRpc2FibGUtbWFsbG9jMHJldHVybnNudWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXNwZWNzIC0td2l0aG91dC1ncm9mZiAtLXdpdGhvdXQtcHMycGRmIC0td2l0aG91dC1mb3AgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQteG1sdG8gLS13aXRoLXhtbHRvIFwKKyIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID89ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3h0cmFuc18xLjMuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWI3ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3h0cmFuc18xLjMuNS5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlhUcmFuczogWCBUcmFuc3BvcnQgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggVHJhbnNwb3J0IEludGVyZmFjZSBpcyBpbnRlbmRlZCB0byBjb21iaW5lIGFsbCBcCitzeXN0ZW0gYW5kIHRyYW5zcG9ydCBzcGVjaWZpYyBjb2RlIGludG8gYSBzaW5nbGUgcGxhY2UuICBUaGlzIEFQSSBzaG91bGQgXAorYmUgdXNlZCBieSBhbGwgbGlicmFyaWVzLCBjbGllbnRzIGFuZCBzZXJ2ZXJzIG9mIHRoZSBYIFdpbmRvdyBTeXN0ZW0uIFwKK1VzZSBvZiB0aGlzIEFQSSBzaG91bGQgYWxsb3cgdGhlIGFkZGl0aW9uIG9mIG5ldyB0eXBlcyBvZiB0cmFuc3BvcnRzIGFuZCBcCitzdXBwb3J0IGZvciBuZXcgcGxhdGZvcm1zIHdpdGhvdXQgbWFraW5nIGFueSBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgXAorZXhjZXB0IGluIHRoZSBYIFRyYW5zcG9ydCBJbnRlcmZhY2UgY29kZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ5MzQ3OTIxZDRkNTI2ODAyMWE5OTlmMjUwZWRjOWNhIgorCitQRSA9ICIxIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitpbmhlcml0IGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzViYTQzMmRkMTUxNGQ4NTgwNTNmZmU5ZjQ3MzdkZDgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWRiZDNiMzY5MzJjZTRjMDYyY2QxMGY1N2Q3OGExNTZiYTk4ZDYxOGJkYjZmNTA2NjRkYTMyNzUwMmJjODMwMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk4YTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vYmlncmVxc3Byb3RvXzEuMS4yLmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1BFID0gIjEiCisKK1NVTU1BUlkgPSAiQmlnUmVxczogWCBCaWcgUmVxdWVzdHMgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFwKK0JJRy1SRVFVRVNUUyBleHRlbnNpb24sIHVzZWQgdG8gc2VuZCBsYXJnZXIgcmVxdWVzdHMgdGhhdCB1c3VhbCBpbiBvcmRlciBcCit0byBhdm9pZCBmcmFnbWVudGF0aW9uLiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMTI3MTU2MzBkYTZmMjY4ZDBkMzcxMmVlMWE1MDRmNCIKKworU1JDX1VSSVttZDVzdW1dID0gIjFhMDVmYjAxZmExZDUxOTg4OTRjOTMxY2Y5MjVjMDI1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2MjExNmFiNDRlNDFkODEyMWJmZGU5NDczMjE5NTAzNzBiMjg1YTUzMTY2MTJiOGZjZTgzMzRkNTA3NTFiMWUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4Y2IyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvL2ZpeC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIG1pc3NpbmcgbGVuZ3RoIGZpZWxkcyB0byB0aGUgcmVwbGllcy4gV2l0aG91dCB0aGVzZSwgc2FuaXR5IGNoZWNraW5nIGluIHJlY2VudCBYCiticmVha3MgdGhpbmdzLgorCitSUCAxMS8yLzEwCisKKworSW5kZXg6IGdpdC94Y2FsaWJyYXRlcHJvdG8uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3hjYWxpYnJhdGVwcm90by5oCTIwMTAtMDItMTEgMTE6NDc6NDUuNzExOTg1OTMyICswMDAwCisrKysgZ2l0L3hjYWxpYnJhdGVwcm90by5oCTIwMTAtMDItMTEgMTE6NDA6MjEuMDAwMDAwMDAwICswMDAwCitAQCAtNjcsMTMgKzY3LDEzIEBACisgICAgIEJZVEUgICAgdHlwZTsgICAvKiBYX1JlcGx5ICovCisgICAgIEJZVEUgICAgcGFkMTsKKyAgICAgQ0FSRDE2ICBzZXF1ZW5jZU51bWJlciBCMTY7CisrICAgIENBUkQzMiAgbGVuZ3RoOworICAgICBDQVJEMzIgIHN0YXR1czsKKyAgICAgQ0FSRDMyICBwYWQyIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQzIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ0IEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ1IEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ2IEIzMjsKKy0gICAgQ0FSRDMyICBwYWQ3IEIzMjsKKyB9IHhYQ2FsaWJyYXRlUmF3TW9kZVJlcGx5OworIAorICNkZWZpbmUgc3pfeFhDYWxpYnJhdGVSYXdNb2RlUmVwbHkJMzIKK0BAIC05MiwxMyArOTIsMTMgQEAKKyAgICAgQllURSAgICB0eXBlOyAgIC8qIFhfUmVwbHkgKi8KKyAgICAgQllURSAgICBwYWQxOworICAgICBDQVJEMTYgIHNlcXVlbmNlTnVtYmVyIEIxNjsKKysgICAgQ0FSRDMyICBsZW5ndGg7CisgICAgIENBUkQzMiAgeDsKKyAgICAgQ0FSRDMyICB5OworICAgICBDQVJEMzIgIHBhZDIgQjMyOworICAgICBDQVJEMzIgIHBhZDMgQjMyOworICAgICBDQVJEMzIgIHBhZDQgQjMyOworICAgICBDQVJEMzIgIHBhZDUgQjMyOworLSAgICBDQVJEMzIgIHBhZDYgQjMyOworIH0geFhDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkUmVwbHk7CisgCisgI2RlZmluZSBzel94WENhbGlicmF0ZVNjcmVlblRvQ29vcmRSZXBseQkzMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGQxNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90b19naXQuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYQ2FsaWJyYXRlOiBUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBcCitUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBleHRlbnNpb24uIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hjYWxpYnJhdGV3aXJlLmg7ZW5kbGluZT0yMzttZDU9N2Y4NmVmN2IwM2NjZTZjNGM5ZWJkNTlkMjBjYTQ4NWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veGNhbGlicmF0ZXByb3RvLmg7ZW5kbGluZT0yMzttZDU9ZTQ0OTA0OTFlZGNjMTcxY2EyNGY5ODU2OWVlNTgwZGIiCisKK1NSQ1JFViA9ICIxZGE2ZmQxZTJjN2E0OTY0ODI0NWM5ODQ4MWZhYmVhOGI5NjkwYThjIgorCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9jYWxpYnJhdGVwcm90byBcCisgICAgICAgICAgIGZpbGU6Ly9maXgucGF0Y2g7YXBwbHk9eWVzIgorUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NvbXBvc2l0ZXByb3RvXzAuNC4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY29tcG9zaXRlcHJvdG9fMC40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZWUyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NvbXBvc2l0ZXByb3RvXzAuNC4yLmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGNvbXBvc2l0ZTogWCBjb21wb3NpdGUgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggXAorY29tcG9zaXRlIGV4dGVuc2lvbi4gIFRoZSBYIGNvbXBvc2l0ZSBleHRlbnNpb24gcHJvdmlkZXMgdGhyZWUgcmVsYXRlZCBcCittZWNoYW5pc21zIGZvciBjb21wb3NpdGluZyBhbmQgb2ZmLXNjcmVlbiBzdG9yYWdlLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yYzRiZmUxMzZmNGE0NDE4ZWEyZjJhOTZiN2M4ZjNjNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21wb3NpdGUuaDtlbmRsaW5lPTQzO21kNT1jYmQ0NGQ0MDc5MDUzYWE3NTkzMGVkMmYwMmI5MjkyNiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJjb21wb3NpdGVleHQiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTg0ODJmNjViYTFlNzRhMDhiZjViMDU2YTQwMzFlZjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDQ5MzU5ZjBiZTBiMmI5ODRhODE0OWM5NjZkZDA0ZThjNThlNmVhZGUyYTRhMzA5Y2YxMTI2NjM1Y2NkMGNmYyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZGFtYWdlcHJvdG9fMS4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kYW1hZ2Vwcm90b18xLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQwMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZGFtYWdlcHJvdG9fMS4yLjEuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYZGFtYWdlOiBYIERhbWFnZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgREFNQUdFIFwKK2V4dGVuc2lvbi4gIFRoZSBEQU1BR0UgZXh0ZW5zaW9uIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcmVjZWl2ZSBcCitpbmZvcm1hdGlvbiBhYm91dCBjaGFuZ2VzIG1hZGUgdG8gcGl4ZWwgY29udGVudHMgb2Ygd2luZG93cyBhbmQgXAorcGl4bWFwcy4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDVmNWEyZGU2NWMzYTg0Y2JkZTc2OWYwN2E3Njk2MDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGFtYWdld2lyZS5oO2VuZGxpbmU9MjM7bWQ1PTRhNDUwMWE1OTJkYmM3ZGU1Y2U4OTI1NWU1MGQwMjk2IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImRhbWFnZWV4dCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTk4ZTU5MDQ3NjRiODI2NDJjYzYzZDk3YjRiYTllOTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM3YzExMmU5YjllYThhOWQ1YjAxOWU1ZjE3ZDQ4MWFlMjBmNzY2Y2I3YTQ2NDgzNjBlN2MxYjQ2ZmM5ZmM1YiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RteHByb3RvXzIuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZG14cHJvdG9fMi4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2MGU1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RteHByb3RvXzIuMy4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRE1YOiBEaXN0cmlidXRlZCBNdWx0aWhlYWQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERNWCBcCitleHRlbnNpb24uICBUaGUgRE1YIGV4dGVuc2lvbiBwcm92aWRlcyBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggXAorYW5kIGNvbnRyb2wgb2YgWGRteCBzZXJ2ZXIuICBBdHRyaWJ1dGVzIG9mIHRoZSBYZG14IHNlcnZlciBhbmQgb2YgdGhlIFwKK2JhY2stZW5kIHNjcmVlbnMgYXR0YWNoZWQgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVlcmllZCBhbmQgbW9kaWZpZWQgdmlhIFwKK3RoaXMgcHJvdG9jb2wuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWEzYzM0OTkyMzFhODAzNWVmZDBlMDA0Y2ZiZDNiNzJhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RteHByb3RvLmg7ZW5kbGluZT0zMjttZDU9YWI4NTA5OTU1YzNkZDRjNjVmYWM3MjhlMWIzNjdiYzQiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZWUxNzViYmQ0NGQwNWMzNGQ0M2JiMTI5YmU1MDk4YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzIwNTFlNmEzZTA2YjIzNmQxOWVlZDU2MzY4MTE3Yjc0NWNhMWUxYTI3YmRjNTBmZDUxYWEzNzViZWE2NTA5IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b18yLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjNDBjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b18yLjguYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJEUkkyOiBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIDIgaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgRGlyZWN0IFwKK1JlbmRlcmluZyBJZm5yYXN0cnVjdHVyZSAyLiAgRElSIGlzIHJlcXVpcmVkIGZvciBtYXkgaGFyZHdhcmUgXAorYWNjZWxlcmF0ZWQgT3BlbkdMIGRyaXZlcnMuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJlMzk2ZmE5MTgzNGY4Nzg2MDMyY2FkMmRhNTYzOGYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RyaTJwcm90by5oO2VuZGxpbmU9MzE7bWQ1PTIyZjI4YmY2OGQwMWI1MzNmMjYxOTVlOTRiM2VkOGNhIgorCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMjcyMWQ1ZDI0YzA0ZDk5ODBhMGM2NTQwY2I1Mzk2YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmOWI1NTQ3NmRlZjQ0ZmM3YzQ1OWIyNTM3ZDE3ZGJjNzMxZTM2ZWQ1ZDQxNmFmN2NhMGIxZTJlNjc2ZjhhYTA0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3NGY0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b19naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJEUkkyOiBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIDIgaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgRGlyZWN0IFwKK1JlbmRlcmluZyBJZm5yYXN0cnVjdHVyZSAyLiAgRElSIGlzIHJlcXVpcmVkIGZvciBtYXkgaGFyZHdhcmUgXAorYWNjZWxlcmF0ZWQgT3BlbkdMIGRyaXZlcnMuIgorCitTUkNSRVYgPSAiNjZjNTZhYjEwZDkxN2UzZjQ3ZjkzMTc4ZDdlYWM2NDMwOTcwZDNjNCIKK1BWID0gIjEuOTkuMytnaXQke1NSQ1BWfSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL2RyaTJwcm90byIKKworTElDX0ZJTEVTX0NIS1NVTT0iZmlsZTovL0NPUFlJTkc7bWQ1PTJlMzk2ZmE5MTgzNGY4Nzg2MDMyY2FkMmRhNTYzOGYzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpM3Byb3RvXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ5N2IzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpM3Byb3RvXzEuMC5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgMyBFeHRlbnNpb24iCisKK0RFU0NSSVBUSU9OID0gIlRoZSBEUkkzIGV4dGVuc2lvbiBwcm92aWRlcyBtZWNoYW5pc21zIHRvIHRyYW5zbGF0ZSBiZXR3ZWVuIGRpcmVjdCBcCityZW5kZXJlZCBidWZmZXJzIGFuZCBYIHBpeG1hcHMuIFdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJlc2VudCBleHRlbnNpb24sIFwKK2EgY29tcGxldGUgZGlyZWN0IHJlbmRlcmluZyBzb2x1dGlvbiBmb3IgT3BlbkdMIGlzIHByb3ZpZGVkLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kcmkzcHJvdG8uaDtlbmRsaW5lPTIxO21kNT1hYzkwZDFkNDE2YmUzY2IxM2UxZDNjODhjZDUxNjZiZiIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYTNkMmNiZTYwYTljYTFiZjNhZWE2YzkzYzgxN2ZlZTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDFiZTQ5ZDcwMjAwNTE4YjlhNmIyOTcxMzFmNmNjNzFmNGVhMmRlMTc0MzY4OTZhZjE1MzIyNmE3NzRmYzA3NCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZpeGVzcHJvdG9fNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZml4ZXNwcm90b181LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmYjg4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZpeGVzcHJvdG9fNS4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZpeGVzOiBYIEZpeGVzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIEZpeGVzIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgc2VydmVyLXNpZGUgc3VwcG9ydCBcCitmb3IgYXBwbGljYXRpb24gd29yayBhcm91bmRzIHRvIHNob3J0Y29taW5ncyBpbiB0aGUgY29yZSBYIHdpbmRvdyBcCitzeXN0ZW0uIgorCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjYyYTdhODdkYTU2ZTY2ZGQ2MzliZjczMzRhMTEwYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veGZpeGVzcHJvdG8uaDtlbmRsaW5lPTQzO21kNT1jM2E5ZWU2ZGIzNTMyZWQwZDQ0ZGVhMjY2Y2ZjOTdmNCIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJmaXhlc2V4dCIKK1BSID0gInIxIgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTc0MzFhYjg0ZDM3YjI2NzhhZjcxZTI5MzU1ZTEwMWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmEyZjNmMzEyNDZiZGQzZjJhMGFjZjhiZDNiMDliYTk5Y2FiOTY1YzdmYjJjMmM5MmI3ZGM3Mjg3MGU0MjRjZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9mb250c3Byb3RvXzIuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZmMyODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9mb250c3Byb3RvXzIuMS4zLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZvbnQ6IFggRm9udCByYXN0ZXJpc2F0aW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggRm9udCBcCityYXN0ZXJpc2F0aW9uIGV4dGVuc2lvbnMuICBUaGVzZSBleHRlbnNpb25zIGFyZSB1c2VkIHRvIGNvbnRyb2wgXAorc2VydmVyLXNpZGUgZm9udCBjb25maWd1cmF0aW9ucy4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzNlNDhhYTljZTg2OGM4ZTkwZjA0MDFkYjQxYzExYTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRlNwcm90by5oO2VuZGxpbmU9NDQ7bWQ1PWQyZTU4ZTI3MDk1ZTVlYTdkNGFkNDU2Y2NiOTE5ODZjIgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjM2OTM0ZDAwYjAwNTU1ZWFhY2RlOWYwOTFmMzkyZjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI1OTA0NmIwZGQ5MTMwODI1YzRhNGM0NzliYTM1OTFkNmQwZjE3YTMzZjU0ZTI5NGI1NjQ3ODcyOWE2ZTVhYjgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9nbHByb3RvXzEuNC4xNy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2dscHJvdG9fMS40LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDNkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9nbHByb3RvXzEuNC4xNy5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIk9wZW5HTDogWCBPcGVuR0wgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFwKK09wZW5HTC1yZWxhdGVkIGV4dGVuc2lvbnMsIHVzZWQgdG8gZW5hYmxlIHRoZSByZW5kZXJpbmcgb2YgYXBwbGljYXRpb25zIFwKK3VzaW5nIE9wZW5HTC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDQ0ZWQwMTQ2OTk3ODU2MzA0ZGZiYjUxMmE1OWE4ZGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2x4cHJvdG8uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMyO21kNT02Yjc5YzU3MGY2NDQzNjNiMzU2NDU2ZTdkNDQ0NzFkOSIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NTY1ZjFiMGZhY2Y0YTU5YzI3NzgyMjljMWY3MGQxMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZGFhOTRiZGVkMzEwYTJiZmNiYjlkZWI0ZDc1MWQ5NjVmY2ZlNmZiM2EyZjZkMjQyZTJkZjJkNjU4OWRiZTQwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fMi4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZTBjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fMi4zLjEuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYSTogWCBJbnB1dCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBJbnB1dCBcCitleHRlbnNpb24uICBUaGUgZXh0ZW5zaW9uIHN1cHBvcnRzIGlucHV0IGRldmljZXMgb3RoZXIgdGhlbiB0aGUgY29yZSBYIFwKK2tleWJvYXJkIGFuZCBwb2ludGVyLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNTYyY2MwZjY1ODdiOTYxZjAzMjIxMWQ4MTYwZjMxZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9YSTJwcm90by5oO2VuZGxpbmU9NDg7bWQ1PTFhYzE1ODFlNjExODhkYTI4ODVjYzE0ZmY0OWIyMGJlIgorCitQRSA9ICIxIgorCitpbmhlcml0IGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmNhZWJlYWQ0Yjc3OWJhMDMxNzI3ZjY2YTdmZmEzNTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWE0N2VlNjIwNTNhNmFjZWYzYTgzZjUwNjMxMjQ5NGJlMTQ2MTA2OGQwYjkyNjlkODE4ODM5NzAzYjk1YzFkMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMGYzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggSW5wdXQgXAorZXh0ZW5zaW9uLiAgVGhlIGV4dGVuc2lvbiBzdXBwb3J0cyBpbnB1dCBkZXZpY2VzIG90aGVyIHRoZW4gdGhlIGNvcmUgWCBcCitrZXlib2FyZCBhbmQgcG9pbnRlci4iCisKK1BSID0gInIxIgorUEUgPSAiMSIKK1NSQ1JFViA9ICI3MjAzMDM2NTIyYmE5ZDRiMjI0ZDI4MmQ2YWZjMmQwYjk0NzcxMWVlIgorUFYgPSAiMS45Ljk5LjEyK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL2lucHV0cHJvdG8iCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ticHJvdG9fMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmNWM5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ticHJvdG9fMS4wLjcuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYS0I6IFggS2V5Ym9hcmQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggXAorS2V5Ym9hcmQgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gaXMgdXNlZCB0byBjb250cm9sIG9wdGlvbnMgcmVsYXRlZCBcCit0byBrZXlib2FyZCBoYW5kbGluZyBhbmQgbGF5b3V0LiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZGQ2ZWE5OWUyYTgzYTU1MmMwMmM4MDk2MzYyM2MzOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9YS0Jwcm90by5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjU7bWQ1PTU3NDRlZWZmNDA3YWViNmU3YTEzNDZlZWJhYjQ4NmEyIgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NGFmYzkwYzFmN2JlZjRhMjdmZGQ1OWVjZTM5Yzg3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmODgyMjEwYjc2Mzc2ZTNmYTAwNmIxMWRiZDg5MGU1NmVjMDk0MmJjNTZlNjVkMTI0OWZmNGFmODZmOTBiODU3IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ByZXNlbnRwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiNmYzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ByZXNlbnRwcm90b19naXQuYmIKQEAgLTAsMCArMSwyNCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGJhc2ljIGhlYWRlcnMgZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUHJlc2VudCBleHRlbnNpb24gcHJvdmlkZXMgYSB3YXkgZm9yIGFwcGxpY2F0aW9ucyB0byB1cGRhdGUgdGhlaXIgXAorICAgICAgICAgICAgICAgd2luZG93IGNvbnRlbnRzIGZyb20gYSBwaXhtYXAgaW4gYSB3ZWxsIGRlZmluZWQgZmFzaGlvbiwgc3luY2hyb25pemluZyBcCisgICAgICAgICAgICAgICB3aXRoIHRoZSBkaXNwbGF5IHJlZnJlc2ggYW5kIHBvdGVudGlhbGx5IHVzaW5nIGEgbW9yZSBlZmZpY2llbnQgXAorICAgICAgICAgICAgICAgbWVjaGFuaXNtIHRoYW4gY29weWluZyB0aGUgY29udGVudHMgb2YgdGhlIHNvdXJjZSBwaXhtYXAuXAorICAgICAgICAgICAgICAiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK1NSQ1JFViA9ICIyNGYzYTU2ZTU0MWIwYTllNmM2ZWU3NjA4MWY0NDEyMjFhMTIwZWY5IgorUFYgPSAiMS4wK2dpdCR7U1JDUFZ9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00N2U1MDhjYTI4MGZkZTk3OTA2ZWFjYjc3ODkyYzNhYyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9wcmVzZW50cHJvdG8iCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmFuZHJwcm90b18xLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTllNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmFuZHJwcm90b18xLjUuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSYW5kUjogWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBSZXNpemUsIFwKK1JvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBcCityZXNpemUsIHJvdGF0ZSBhbmQgcmVmbGVjdCB0aGUgcm9vdCB3aW5kb3cgb2YgYSBzY3JlZW4uIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTAwNDI2ZDQxYmQzZDkyNjdjZjliYmIyZGY5MzIzYTVlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JhbmRycHJvdG8uaDtlbmRsaW5lPTMwO21kNT0zODg1OTU3YzYwNDhmZGYzMzEwYWM4YmE1NGNhMmMzZiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyYW5kcmV4dCIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImE0Njc2NWM4ZGNhY2I3MTE0YzgyMWJhZjBkZjFlNzk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRjNjc1NTMzZTc5Y2Q3MzA5OTdkMjMyYzg4OTRiNjY5MjE3NGRjZTU4ZDNlMjA3MDIxYjhmODYwYmU0OTg0NjgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyMzE3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlY29yZHByb3RvXzEuMTQuMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSZWNvcmQ6IFggUmVjb3JkIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFJlY29yZCBcCitleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyB1c2VkIHRvIHJlY29yZCBhbmQgcGxheSBiYWNrIGV2ZW50IFwKK3NlcXVlbmNlcy4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTc1ODI3YTBmNTU0YmJlZDMzMjU0Mjk3NmQ1ZjNkNDAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcmVjb3JkcHJvdG8uaDtlbmRsaW5lPTE5O21kNT0xY2JiMGRkNDVhMGIwNjBmZjgzMzkwMTYyMGEzZTczOCIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyZWNvcmRleHQiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYjRlNWRlZGU1ZWE1MTkwNmYxNTMwY2ExZTIxZDIxNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNzc3NTQ4ZDJlOTJhYTI1OWYxNTI4ZGUzYzRhMzZkMTVlMDdhNDY1MGQwOTc2NTczYThlMmZmNTQzN2U3MzcwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODAwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZW5kZXJwcm90b18wLjExLjEuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmVuZGVyOiBYIHJlbmRlcmluZyBFeHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitSZW5kZXJpbmcgZXh0ZW5zaW9uLiAgVGhpcyBpcyB0aGUgYmFzaXMgdGhlIGltYWdlIGNvbXBvc2l0aW9uIHdpdGhpbiB0aGUgXAorWCB3aW5kb3cgc3lzdGVtLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mODI2ZDk5NzY1MTk2MzUyZTYxMjJhNDA2Y2YwZDAyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yZW5kZXJwcm90by5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjQ7bWQ1PTNlNWUyODUxZGFkMjQwYjBhM2EyN2M0Nzc2YjRmZDFmIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInJlbmRlcmV4dCIKK1BSID0gInIxIgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTkxNGNjYzFkZTY2ZGRlYjRiNjExYzZiMDY4NmUyNzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDY3MzVhNWI5MmIyMDc1OTIwNGU0NzUxZWNkNjA2NGEyYWQ4YTYyNDZiYjY1YjMwNzhiODYyYTAwZGVmMjUzNyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Jlc291cmNlcHJvdG9fMS4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiNjEwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Jlc291cmNlcHJvdG9fMS4yLjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmVzOiBYIFJlc291cmNlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK1Jlc291cmNlIGV4dGVuc2lvbi4gIFhSZXMgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIFggY2xpZW50cyB0byBcCitzZWUgYW5kIG1vbml0b3IgWCByZXNvdXJjZSB1c2FnZSBvZiB2YXJpb3VzIGNsaWVudHMuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTYwNDg1OTMwNWU2NjI1MDMwNzcyNDBmZWU4Yzc3ZDk3IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInJlc291cmNlZXh0IgorCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZmRiNTdkYWUyMjFiNzFiMjcwM2Y4ZTI5ODBlYWFmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYzY2MDAzYTZiZGViMGY3MDkzMmE5ZWQzY2Y1N2NjNTU0MjM0MTU0Mzc4ZDMwMWUwYzVjZmExODlkOGY2ODE4IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9zY3Juc2F2ZXJwcm90b18xLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Njcm5zYXZlcnByb3RvXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDdmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9zY3Juc2F2ZXJwcm90b18xLjIuMi5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhzY3Juc2F2ZXI6IFggU2NyZWVuIFNhdmVyIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFNjcmVlbiBcCitTYXZlciBleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBhbGxvd3MgYW4gZXh0ZXJuYWwgXCJzY3JlZW4gc2F2ZXJcIiBcCitjbGllbnQgdG8gZGV0ZWN0IHdoZW4gdGhlIGFsdGVybmF0aXZlIGltYWdlIGlzIHRvIGJlIGRpc3BsYXllZCBhbmQgdG8gXAorcHJvdmlkZSB0aGUgZ3JhcGhpY3MuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVlZDQ5Yjc4YjE1YjQzNmM5MzNiNmI4YjA1NGUzOTAxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NhdmVycHJvdG8uaDtlbmRsaW5lPTI2O21kNT1hODRjMDYzNzMwNTE1OWYzYzBhYjE3M2FhZWVkZTQ4ZCIKKworUEUgPSAiMSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZGQ4YTczNzc1ZThlY2UxZDY5NTE1ZGQxNzc2N2JmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YmI3MGE4ZGExNjQ5MzBjY2VhZWI0Yzc0MTgwMjkxNjYwNTMzYWQzY2M0NTM3N2IzMGE3OTVkMWI4NWJjZDY1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhYTc1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYdjogWCBWaWRlbyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBWaWRlbyBcCitleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBhbG93cyBmb3IgYWNjZXJsYXRlZCBkcmF3aW5nIG9mIHZpZGVvcy4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2UzNDcyYTExOWE4NjQwODVmYTQxNTVjYjA5NzlhN2IiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNjU4NjQxNTk1MzI3ZDM5OTBlYWI3MGZkYjU1Y2E4YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZGFlMTY4Y2I4MjBmY2QzMmY1NjQ4NzlhZmIzZjI0ZDI3YzE3NjMwMGQ5YWY2NjgxOWExODI2NTUzOWJkNGI2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxYjU3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by5pbmMKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyBoZWFkZXJzIgorREVTQ1JJUFRJT04gPSAiRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIFggcHJvdG9jb2wgQy1sYW5ndWFnZSBCaW5kaW5nIFwKKyhYQ0IpLiAgWENCIGlzIGEgcmVwbGFjZW1lbnQgZm9yIFhsaWIgZmVhdHVyaW5nIGEgc21hbGwgZm9vdHByaW50LCBcCitsYXRlbmN5IGhpZGluZywgZGlyZWN0IGFjY2VzcyB0byB0aGUgcHJvdG9jb2wsIGltcHJvdmVkIHRocmVhZGluZyBcCitzdXBwb3J0LCBhbmQgZXh0ZW5zaWJpbGl0eS4iCitIT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9WENCIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L3hjYi1wcm90by0ke1BWfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHl0aG9ubmF0aXZlCisKK1BBQ0tBR0VTICs9ICJweXRob24teGNiZ2VuIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0veGNiLyoueG1sICR7ZGF0YWRpcn0veGNiLyoueHNkIgorRklMRVNfcHl0aG9uLXhjYmdlbiA9ICIke2xpYmRpcn0vcHl0aG9uKiIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcHl0aG9uLW5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b18xLjExLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjNWExMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b18xLjExLmJiCkBAIC0wLDAgKzEsOSBAQAoraW5jbHVkZSB4Y2ItcHJvdG8uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc2M2IwODFjYjEwYzIyMzQzNWIwMWUwMGRjMGFiYTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2RyaTIueG1sO2JlZ2lubGluZT0yO2VuZGxpbmU9Mjg7bWQ1PWY4NzYzYjEzZmY0MzJlODU5N2UwZDYxMGNmNTk4ZTY1IgorCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YmYyNzk3NDQ1ZGM2ZDQzZTllNDcwN2MwODJlZmY5YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNGFjZWVlNjUwMmEwY2U0NWZjMzliMzNjNTQxYTJkZjQ3MTVkMDBiNzJlNjYwZWJlOGM1YmI0NDQ3NzFlMzJlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNGQwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b19naXQuYmIKQEAgLTAsMCArMSw5IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgeGNiLXByb3RvLmluYworU1JDUkVWID0gImQ4MWNhMjMzZTk4YmU4ZmE1OWU4YzkwZDI2MmMwNTE2OTQ0YzVhNjYiCitQViA9ICIxLjIrZ2l0ciR7U1JDUFZ9IgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hjYi9wcm90byIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y21pc2Nwcm90b18xLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjbWlzY3Byb3RvXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTFiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y21pc2Nwcm90b18xLjIuMi5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhDLU1JU0M6IFggWEMtTWlzY2VsbGFuZW91cyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWEMtTUlTQyBcCitleHRlbnNpb24sIHdoaWNoIGlzIHVzZWQgdG8gZ2V0IGRldGFpbHMgb2YgWElEIGFsbG9jYXRpb25zIHdpdGhpbiB0aGUgXAorc2VydmVyLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wOWQ4MzA0N2MxNTk5NGUwNWRiMjliNDIzZWQ2NjYyZSIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWY0ODQ3Yzc4ZTQxYjgwMTk4MmM4YTVlMDYzNjViMjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjEzMjM2ODY5MzcyMjU2YzM2ZGI3OWFlMzlkNTQyMTQxNzI2NzdmYjc5ZTljZGM1NTVkY2VlYzgwYmQ5ZDJkZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDBiZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGV4dHByb3RvXzcuMy4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEV4dDogWCBFeHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciBzZXZlcmFsIFggXAorZXh0ZW5zaW9ucy4gIFRoZXNlIHByb3RvY29sIGV4dGVuc2lvbnMgaW5jbHVkZSBET1VCTEUtQlVGRkVSLCBEUE1TLCBcCitFeHRlbmRlZC1WaXN1YWwtSW5mb3JtYXRpb24sIExCWCwgTUlUX1NITSwgTUlUX1NVTkRSWS1OT05TVEFOREFSRCwgXAorTXVsdGktQnVmZmVyaW5nLCBTRUNVUklUWSwgU0hBUEUsIFNZTkMsIFRPRy1DVVAsIFhDLUFQUEdST1VQLCBYQy1NSVNDLCBcCitYVEVTVC4gIEluIGFkZGl0aW9uIGEgc21hbGwgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSBhbHNvIFwKK2F2YWlsYWJsZS4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODZmMjczMjkxNzU5ZDBiYTJhMjI1ODVjZDFjMDZjNTMiCisKK1BFID0gIjEiCisKK2luaGVyaXQgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzBjOTBmMzEzYjRiMDg1MTc1OGVmNzdiOTUwMTk1ODQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjNmNGIyM2FjOGRiOWMzYTllMGQ4ZWRiNTkxNzEzZjNkNzBlZjljM2IxNzU5NzBkZDg4MjNkZmM5MmFhNWJiMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZGdhcHJvdG9fMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjNjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZGdhcHJvdG9fMi4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1ER0E6IFhGcmVlODYgRGlyZWN0IEdyYXBoaWNzIEFjY2VzcyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWEZyZWU4NiBcCitEaXJlY3QgR3JhcGhpY3MgQWNjZXNzIGV4dGVuc2lvbi4gVGhpcyBleHRlbnNpb24gYWxsb3dzIGRpcmVjdCBncmFwaGljcyBcCithY2Nlc3MgdG8gYSBmcmFtZWJ1ZmZlci1saWtlIHJlZ2lvbiwgYXMgd2VsbCBhcyByZWxhdGl2ZSBtb3VzZSBcCityZXBvcnRpbmcuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUwMWU2NmU0YjMxNzA4OGNmODY5YmM5OGU2YWY0ZmI2IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInh4Zjg2ZGdhZXh0IgorUFIgPSAicjIiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTAzNmRjMmZjYmYwNTJlYzEwNjIxZmQ0OGI2OGRiYjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWM1ZWY2NTEwOGUxZjIxNDYyODZlNTMwODA5NzU2ODNkYWU0OWZjOTQ2ODAwNDJlMDRiZDFlMjAxMGU5OTA1MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Y5MjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRyaXByb3RvXzIuMS4xLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1EUkk6IFhGcmVlODYgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWEZyZWU4NiBcCitEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIGV4dGVuc2lvbi4gIFRoZSBYRnJlZTg2LURSSSBleHRlbnNpb24gaXMgXAordXNlZCB0byBvcmdhbml6ZSBkaXJlY3QgcmVuZGVyaW5nIHN1cHBvcnQgb3IgM0QgY2xpZW50cyBhbmQgaGVscCBcCithcmJpdHJhdGUgcmVxdWVzdHMuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVmMTAzYjlkOTUxZTM5ZmY3ZTIzZDM4NmUyMDExZmEzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hmODZkcmlwcm90by5oO2VuZGxpbmU9MzU7bWQ1PTQyYmUzZDhlNmQ0MjlhYjc5MTcyNTcyYmIwY2ZmNTQ0IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQ3MTZkMGRhYzNiNjY0ZTVlZTIwYzY5ZDM0YmMxMGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWM0YjhkNzIyMWNiNmRjNDMwOTI2OWNjYzAwOGEyMjc1MzY5OGFlOTI0NWEzOThhNTlkZjM1ZjE0MDRkNjYxZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2bWlzY3Byb3RvXzAuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjYzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2bWlzY3Byb3RvXzAuOS4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1NaXNjOiBYRnJlZTg2IG1pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlIFwKK21pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uLiAgVGhlIFhGcmVlODYtTWlzYyBleHRlbnNpb24gcHJvdmlkZXMgYSBtZWFucyB0byBcCithY2Nlc3MgaW5wdXQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3BlY2lmaWMgdG8gdGhlIFhGcmVlODYvWG9yZyBcCitERFguIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUwMWU2NmU0YjMxNzA4OGNmODY5YmM5OGU2YWY0ZmI2IgorCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYTYzYmJiMzFjZjViN2YzN2IyMjM3ZTkyM2ZmMjU3YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NWI4ZWM2YTRhOGNhMjEwNjZkY2UxMTdlMDlkY2M4ODUzOTg2MmU2MTZlNjBmYjM5MWRlMDViMzZmNjNiMDk1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZ2aWRtb2RlcHJvdG9fMi4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzMTkwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZ2aWRtb2RlcHJvdG9fMi4zLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LVZNOiBYRnJlZTg2IHZpZGVvIG1vZGUgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlODYgXAordmlkZW8gbW9kZSBleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBhbGxvd3MgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBnZXQgXAorYW5kIHNldCB2aWRlbyBtb2RlIHRpbWluZ3MuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ5OWJlMmZmMzg3YTQyZjg0NjI4YzM1ZjMxMWYxNTAyIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInh4Zjg2dm1leHQiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImU3OTNlY2VmZWFlY2ZlYWJkMWFlZDZhMDEwOTUxNzRlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1ZDk0OTlhYTdiNzMyMDNmZDZiMzUwNWIwMjU5NjI0YWZlZDVjMTZiOTQxYmQwNGZjZjEyM2U1ZGU2OTg3NzAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDA3NzRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhpbmVyYW1hOiBYaW5lcmFtYSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWGluZXJhbWEgXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gaXMgdXNlZCBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCBcCitwaHlzaWNhbCBvdXRwdXQgZGV2aWNlcyB3aGljaCBtYXkgYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBsb2dpY2FsIFggXAorc2NyZWVuLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZTM5N2E1MzI2YzgzZDVkMGViZjViM2Y4NzE2M2FjNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wYW5vcmFtaVhwcm90by5oO2VuZGxpbmU9MjQ7bWQ1PTA5OGUwYmMwODkzNjhhOTg4MDkyYjNjYmRhNjE3YTU3IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTk1OWZlMGJmYjIyYTBlNzI2MDQzM2I4ZDE5OTU5MGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTc3NTc0YmIzZGMxOTJlY2Q5YzU1ZjU5Zjk5MWVjMWRmZjM0MGJlM2UzMTM5MmM5NWRlZmY0MjNkYTUyNDg1YiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQxN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veG9yZy1wcm90by1jb21tb24uaW5jCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiWCBwcm90b2NvbCBoZWFkZXJzOiAke1hPUkdfUE59IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eG9yZyIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvcHJvdG8vJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWZvcCIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLXdpdGhvdXQtZm9wIC0td2l0aG91dC14bWx0byAtLXdpdGgteG1sdG8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLXdpdGgteG1sdG8sIC0td2l0aG91dC14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworIyAke1BOfSBpcyBlbXB0eSBzbyB3ZSBuZWVkIHRvIHR3ZWFrIC1kZXYgYW5kIC1kYmcgcGFja2FnZSBkZXBlbmRlbmNpZXMKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90by94cHJvdG9fZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwYWQyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90by94cHJvdG9fZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Rvbid0IGFsd2F5cyBkZWZpbmUgTE9ORzY0IGZvciBBTUQ2NAorICAgIAorWDMyIGRlZmluZXMgX19hbWQ2NF9fL2FtZDY0IHdpdGggMzJiaXQgbG9uZy4gIFdlIHNob3VsZCBzaW1wbHkgY2hlY2sKK19fTFA2NF9fIGJlZm9yZSBkZWZpbmluZyBMT05HNjQgd2l0aG91dCBjaGVja2luZyBfX2FtZDY0X18vYW1kNjQuCisKK1RoaXMgZml4ZXMgY29tcGlsYXRpb24gd2l0aCB4MzIgdG9vbGNoYWluLgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMQorCistLS0geHByb3RvLTcuMC4yMi9YbWQuaC54MzIJMjAwOS0wNy0xMSAwNDoxOTo1MC4wMDAwMDAwMDAgLTA3MDAKKysrKyB4cHJvdG8tNy4wLjIyL1htZC5oCTIwMTEtMTEtMzAgMTc6MTQ6MTkuMjkwMzk1ODkzIC0wODAwCitAQCAtNjIsNyArNjIsNiBAQCBTT0ZUV0FSRS4KKyAgICAgIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoaWE2NCkgfHwgXAorICAgICAgZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgXAorICAgICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKy0gICAgIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKGFtZDY0KSB8fCBcCisgICAgICBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisgIyAgZGVmaW5lIExPTkc2NAkJCQkvKiAzMi82NC1iaXQgYXJjaGl0ZWN0dXJlICovCisgIyBlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyN2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYbGliOiBDIExhbmd1YWdlIFggaW50ZXJmYWNlIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgYmFzaWMgaGVhZGVycyBmb3IgdGhlIFggV2luZG93IFwKK1N5c3RlbS4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjllMDUxMTA3ZDU2Mjg5NjY3MzlhMGIyZTliMzI2NzYiCisKK1BFID0gIjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly94cHJvdG9fZml4X2Zvcl94MzIucGF0Y2giCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tZW5hYmxlLXNwZWNzPW5vIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2NlMmYyMzBjNWQ4ZmE5MjlmMzI2YWQxZjBmYTQwYTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjllODU1NjhkMWY2OGNlZWY4YTJjMDgxZGFkOWJjMGU1NTAwYTUzY2ZmZmRlMjRiNTY0ZGM0M2Q0NmRkZjZjYSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZjJmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL2djY21ha2VkZXBfMS4wLjMuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJQcm9ncmFtIHRvIGNyZWF0ZSBkZXBlbmRlbmNpZXMgaW4gbWFrZWZpbGVzIgorCitERVNDUklQVElPTiA9ICJUaGUgZ2NjbWFrZWRlcCBwcm9ncmFtIGNhbGxzICdnY2MgLU0nIHRvIG91dHB1dCBtYWtlZmlsZSBcCitydWxlcyBkZXNjcmliaW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgZWFjaCBzb3VyY2VmaWxlLCBzbyB0aGF0IG1ha2Uga25vd3MgXAord2hpY2ggb2JqZWN0IGZpbGVzIG11c3QgYmUgcmVjb21waWxlZCB3aGVuIGEgZGVwZW5kZW5jeSBoYXMgY2hhbmdlZC4iCisKK3JlcXVpcmUgeG9yZy11dGlsLWNvbW1vbi5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL01ha2VmaWxlLmFtO2VuZGxpbmU9MjA7bWQ1PTIzYzI3NzM5NmQ2OTA0MTMyNDVlYmI4OWIxOGM1ZDRkIgorREVTQ1JJUFRJT04gPSAiY3JlYXRlIGRlcGVuZGVuY2llcyBpbiBtYWtlZmlsZXMgdXNpbmcgJ2djYyAtTSciCitERVBFTkRTID0gInV0aWwtbWFjcm9zIgorUkRFUEVORFNfJHtQTn0gPSAiZ2NjIgorCitQUiA9ICJyMyIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMjdkZGI2MTMxZWI0YTU2ZmRmNjY0NGE2M2FkZTc4OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmOWUyZTdhNTkwZTI3Zjg0YjY3MDhhYjdhODFlNTQ2Mzk5Yjk0OWJmNjUyZmI5Yjk1MTkzZTBlNTQzZTZhNTQ4IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGE5NjdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9tYWtlZGVwZW5kXzEuMC41LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy11dGlsLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJjcmVhdGUgZGVwZW5kZW5jaWVzIGluIG1ha2VmaWxlcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIG1ha2VkZXBlbmQgcHJvZ3JhbSByZWFkcyBlYWNoIHNvdXJjZWZpbGUgaW4gc2VxdWVuY2UgXAorYW5kIHBhcnNlcyBpdCBsaWtlIGEgQy1wcmVwcm9jZXNzb3IsIHByb2Nlc3NpbmcgXAorYWxsICNpbmNsdWRlLCAjZGVmaW5lLCAgI3VuZGVmLCAjaWZkZWYsICNpZm5kZWYsICNlbmRpZiwgI2lmLCAjZWxpZiBcCithbmQgI2Vsc2UgZGlyZWN0aXZlcyBzbyB0aGF0IGl0IGNhbiBjb3JyZWN0bHkgdGVsbCB3aGljaCAjaW5jbHVkZSwgXAorZGlyZWN0aXZlcyB3b3VsZCBiZSB1c2VkIGluIGEgY29tcGlsYXRpb24uIEFueSAjaW5jbHVkZSwgZGlyZWN0aXZlcyBcCitjYW4gcmVmZXJlbmNlIGZpbGVzIGhhdmluZyBvdGhlciAjaW5jbHVkZSBkaXJlY3RpdmVzLCBhbmQgcGFyc2luZyB3aWxsIFwKK29jY3VyIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIgorCitERVBFTkRTID0gInhwcm90byB1dGlsLW1hY3JvcyIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00M2E2ZWRhMzRiNDhlZTgyMWIzYjY2ZjRmNzUzY2U0ZiIKKworU1JDX1VSSVttZDVzdW1dID0gImVmYjJkN2M3ZTIyODQwOTQ3ODYzZWZhZWRjMTc1NzQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUwMzkwM2Q0MWZiNWJhZGI3M2NiNzBkN2IzNzQwYzhiMzBmZTFjYzY4YzUwNGQzYjZhODVlNjY0NGM0ZTUwMDQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3V0aWwtbWFjcm9zXzEuMTkuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvdXRpbC1tYWNyb3NfMS4xOS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Y2Y1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3V0aWwtbWFjcm9zXzEuMTkuMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlggYXV0b3Rvb2xzIG1hY3JvcyIKKworREVTQ1JJUFRJT04gPSAiTTQgYXV0b3Rvb2xzIG1hY3JvcyB1c2VkIGJ5IHZhcmlvdXMgWC5vcmcgcHJvZ3JhbXMuIgorCityZXF1aXJlIHhvcmctdXRpbC1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTk3MDUxMWZkZGQ0MzliMDdhNmJhNzg5ZDI4ZmY2NjIiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MGUxY2FhNDlhNzFhMjZlMGFhNjhkZGQwMDIwMzcxNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZDRkZjUxYjI5MDIzZGFmMmY2M2FlYmYzZWJjNjM4ZWE4OGVmZWRmZDU2MGFiNTg2Njc0MWFiM2Y5MmFjYWExIgorCisjICR7UE59IGlzIGVtcHR5IHNvIHdlIG5lZWQgdG8gdHdlYWsgLWRldiBhbmQgLWRiZyBwYWNrYWdlIGRlcGVuZGVuY2llcworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3hvcmctdXRpbC1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDAyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3hvcmctdXRpbC1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTMgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorTElDRU5TRSA9ICJNSVQtWCIKKworWE9SR19QTiA9ICIke0JQTn0iCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC91dGlsLyR7WE9SR19QTn0tJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlYjZmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgpAQCAtMCwwICsxLDkgQEAKK1NlY3Rpb24gIk1vZHVsZSIKKyAgICBMb2FkICJmYmRldmh3IgorICAgIExvYWQgImZiIgorICAgIExvYWQgInNoYWRvdyIKKyAgICBMb2FkICJzaGFkb3dmYiIKKyAgICBMb2FkICJ2YmUiCisgICAgTG9hZCAidmdhaHciCitFbmRTZWN0aW9uCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVhcm0veG9yZy5jb25mCkBAIC0wLDAgKzEsNjkgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM4YjUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzL3hvcmcuY29uZgpAQCAtMCwwICsxLDcwIEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBEZWZhdWx0RGVwdGggIDE2CisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzNjQveG9yZy5jb25mCkBAIC0wLDAgKzEsNjkgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5YWUyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11cHBjL3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXNoNC94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmRhOWVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYtNjQveG9yZy5jb25mCkBAIC0wLDAgKzEsNjQgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgInZtbW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZGE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni94b3JnLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAidm1tb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3hvcmcuY29uZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3YzIwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1BSID0gInIzMyIKKworU1JDX1VSSSA9ICJmaWxlOi8veG9yZy5jb25mIgorCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiXAorICAgICAgICAgIGZpbGU6Ly8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZiBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vWDExL3hvcmcuY29uZiIKK0NPTkZGSUxFU18ke1BOfV9hcHBlbmRfbGliYy1tdXNsID0gIiAke3N5c2NvbmZkaXJ9L1gxMS94b3JnLmNvbmYuZC8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZiIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCWlmIHRlc3QgLXMgJHtXT1JLRElSfS94b3JnLmNvbmY7IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vWDExCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3hvcmcuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vWDExLworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpYmMtbXVzbCAoKSB7CisJaW5zdGFsbCAtRG0gMDY0NCAke1dPUktESVJ9LzEwLXByZWxvYWQtbW9kdWxlcy5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9YMTEveG9yZy5jb25mLmQvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzFjMDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jCkBAIC0wLDAgKzEsMTcwIEBACitTVU1NQVJZID0gIlRoZSBYLk9yZyBYIHNlcnZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVkZjg3OTUwYWY1MWFjMmM1ODIyMDk0NTUzZWExODgwIgorCisjIHhmODYtKi0qIHBhY2thZ2VzIGRlcGVuZCBvbiBhbiBYIHNlcnZlciBidWlsdCB3aXRoIHRoZSB4ZnJlZTg2IEREWAorIyBzbyB3ZSBoYXZlIGEgdmlydHVhbCB0byByZXByZXNlbnQgdGhhdDoKKyMgZGVwcmVjYXRlZCwgd2Ugc2hvdWxkIHVzZSB2aXJ0dWFsL3hzZXJ2ZXIgaW5zdGVhZAorUFJPVklERVMgPSAidmlydHVhbC94c2VydmVyLXhmODYiCisKKyMgT3RoZXIgcGFja2FnZXMgdGVuZCB0byBqdXN0IGNhcmUgdGhhdCB0aGVyZSBpcyAqYW4qIFggc2VydmVyOgorUFJPVklERVMgKz0gInZpcnR1YWwveHNlcnZlciIKKworUEUgPSAiMiIKK0lOQ19QUiA9ICJyOCIKKworWE9SR19QTiA9ICJ4b3JnLXNlcnZlciIKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC94c2VydmVyLyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9tYWNyb190d2Vhay5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQUk9UT19ERVBTID0gInJhbmRycHJvdG8gcmVuZGVycHJvdG8gZml4ZXNwcm90byBkYW1hZ2Vwcm90byB4ZXh0cHJvdG8geHByb3RvIHhmODZkZ2Fwcm90byB4Zjg2bWlzY3Byb3RvIHhmODZ2aWRtb2RlcHJvdG8gY29tcG9zaXRlcHJvdG8gcmVjb3JkcHJvdG8gcmVzb3VyY2Vwcm90byB2aWRlb3Byb3RvIHNjcm5zYXZlcnByb3RvICB4aW5lcmFtYXByb3RvIGZvbnRzcHJvdG8ga2Jwcm90byBpbnB1dHByb3RvIGJpZ3JlcXNwcm90byB4Y21pc2Nwcm90byBwcmVzZW50cHJvdG8iCitMSUJfREVQUyA9ICJwaXhtYW4gbGlieGZvbnQgeHRyYW5zIGxpYnhhdSBsaWJ4ZXh0IGxpYnhkbWNwIGxpYmRybSBsaWJ4a2JmaWxlIGxpYnBjaWFjY2VzcyBvcGVuc3NsIGxpYmdjcnlwdCIKK0RFUEVORFMgPSAiJHtQUk9UT19ERVBTfSAke0xJQl9ERVBTfSBmb250LXV0aWwiCisKKyMgU3BsaXQgb3V0IHNvbWUgbW9kdWxlcyBhbmQgZXh0ZW5zaW9ucyBmcm9tIHRoZSBtYWluIHBhY2thZ2UKKyMgVGhlc2UgYXJlbid0IG5lZWRlZCBmb3IgYmFzaWMgb3BlcmF0aW9ucyBhbmQgb25seSB0YWtlIHVwIHNwYWNlOgorIyAgMzIuMGsgICBsaWJkcmkuc28KKyMgIDkxLjBrICAgbGliZXhhLnNvCisjICAzMzYuMGsgIGxpYmdseC5zbworIyAgMTM2MGsgICBsaWJpbnQxMC5zbworIyAgMTgwLjBrICBsaWJ3ZmIuc28KKyMgIDMyMC4wayAgbGlieGFhLnNvCisjICAxMjQuMGsgIGxpYnhmMWJwcC5zbworIyAgODQuMGsgICBsaWJ4ZjRicHAuc28KKyMgICAgICAgICAgbGlicmVjb3JkLnNvCisjICAgICAgICAgIGxpYmV4dG1vZC5zbworIyAgICAgICAgICBsaWJkYmUuc28KKworUEFDS0FHRVMgPSsgIiR7UE59LXNlY3VyaXR5LXBvbGljeSBcCisgICAgICAgICAgICAgJHtQTn0tc2RsIFwKKyAgICAgICAgICAgICAke1BOfS1mYmRldiBcCisgICAgICAgICAgICAgJHtQTn0teHZmYiBcCisgICAgICAgICAgICAgJHtQTn0tdXRpbHMgXAorICAgICAgICAgICAgICR7UE59LXhlcGh5ciBcCisgICAgICAgICAgICAgJHtQTn0teHdheWxhbmQgXAorICAgICAgICAgICAgICR7UE59LW11bHRpbWVkaWEtbW9kdWxlcyBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1nbHggXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJpbnQxMCBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYmFmYiBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYndmYiAgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJtZmIgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJjZmIgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1leGEgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS14YWEgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJ4ZjFicHAgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJ4ZjRicHAgXAorICAgICAgICAgICAgIHhmODYtdmlkZW8tbW9kZXNldHRpbmciCisKK1NVTU1BUllfeGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICJYLk9yZyBYIHNlcnZlciAtLSBtb2Rlc2V0dGluZyBkaXNwbGF5IGRyaXZlciIKK0lOU0FORV9TS0lQX3hmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAieG9yZy1kcml2ZXItYWJpIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtQTn0tc2VjdXJpdHktcG9saWN5IHhrZXlib2FyZC1jb25maWcgcmdiIHhzZXJ2ZXIteGY4Ni1jb25maWcgeGtiY29tcCIKK1JERVBFTkRTXyR7UE59LXh2ZmIgKz0gInhrZXlib2FyZC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhhID0gIiR7UE59ICg9ICR7RVhURU5EUEtHVn0pIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtsaWJkaXJ9L1gxMS9PcHRpb25zICR7bGliZGlyfS9YMTEvQ2FyZHMgJHtsaWJkaXJ9L1gxMS9nZXRjb25maWcgJHtsaWJkaXJ9L1gxMS9ldGMgJHtsaWJkaXJ9L21vZHVsZXMvKi5zbyAke2xpYmRpcn0veG9yZy9tb2R1bGVzLyouc28gL2V0Yy9YMTEgJHtsaWJkaXJ9L3hvcmcvcHJvdG9jb2wudHh0ICR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzLyoubGEgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLyoubGEiCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7bGliZGlyfS9YMTEvZG9jICR7ZGF0YWRpcn0vWDExL3hrYi9jb21waWxlZC9SRUFETUUuY29tcGlsZWQgJHtsb2NhbHN0YXRlZGlyfS9saWIveGtiL1JFQURNRS5jb21waWxlZCIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0veG9yZy9tb2R1bGVzLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tc2VjdXJpdHktcG9saWN5ICs9ICIke2xpYmRpcn0veHNlcnZlci9TZWN1cml0eVBvbGljeSIKK0ZJTEVTXyR7UE59LXNkbCA9ICIke2JpbmRpcn0vWHNkbCIKK0ZJTEVTXyR7UE59LWZiZGV2ID0gIiR7YmluZGlyfS9YZmJkZXYiCitGSUxFU18ke1BOfS14dmZiID0gIiR7YmluZGlyfS9YdmZiIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9L3NjYW5wY2kgJHtiaW5kaXJ9L3BjaXR3ZWFrICR7YmluZGlyfS9pb3BvcnQgJHtiaW5kaXJ9L2luW2J3bF0gJHtiaW5kaXJ9L291dFtid2xdICR7YmluZGlyfS9tbWFwW3J3XSAke2JpbmRpcn0vZ3RmICR7YmluZGlyfS9nZXRjb25maWcgJHtiaW5kaXJ9L2dldGNvbmZpZy5wbCIKK0ZJTEVTXyR7UE59LXhlcGh5ciA9ICIke2JpbmRpcn0vWGVwaHlyIgorRklMRVNfJHtQTn0teHdheWxhbmQgPSAiJHtiaW5kaXJ9L1h3YXlsYW5kIgorRklMRVNfJHtQTn0tbXVsdGltZWRpYS1tb2R1bGVzID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbXVsdGltZWRpYS8qZHJ2KiIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1kcmkgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmRyaS5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1kcmkyID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJkcmkyLnNvIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLWdseCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZ2x4LnNvIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGlicmVjb3JkLnNvIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZXh0bW9kLnNvIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLWRiZSA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZGJlLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYmludDEwID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGliaW50MTAuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGliYWZiID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGliYWZiLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYndmYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYndmYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJtZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJtZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGliY2ZiID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGliY2ZiLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWV4YSA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmV4YS5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS14YWEgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ4YWEuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlieGYxYnBwID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlieGYxYnBwLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYnhmNGJwcCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYnhmNGJwcC5zbyIKK0ZJTEVTX3hmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzL21vZGVzZXR0aW5nX2Rydi5zbyIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtZm9wPW5vIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXBpYyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zdGF0aWMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRteCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bmVzdCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXh2ZmIgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1jb21wb3NpdGUgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZHRyYWNlIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWludDEwPXg4NmVtdSBcCisgICAgICAgICAgICAgICAgIC0tc3lzY29uZmRpcj0vZXRjL1gxMSBcCisgICAgICAgICAgICAgICAgIC0tbG9jYWxzdGF0ZWRpcj0vdmFyIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXhrYi1vdXRwdXQ9L3Zhci9saWIveGtiIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXNoYTE9bGliY3J5cHRvIFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImRyaTIgdWRldiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdkcmkgZ2x4JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ3YXlsYW5kIiwgInh3YXlsYW5kIiwgIiIsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS1lbmFibGUtY29uZmlnLXVkZXYsLS1kaXNhYmxlLWNvbmZpZy11ZGV2LHVkZXYiCitQQUNLQUdFQ09ORklHW2RyaV0gPSAiLS1lbmFibGUtZHJpLC0tZGlzYWJsZS1kcmksZ2xwcm90byB2aXJ0dWFsL21lc2EgeGY4NmRyaXByb3RvIgorUEFDS0FHRUNPTkZJR1tkcmkyXSA9ICItLWVuYWJsZS1kcmkyLC0tZGlzYWJsZS1kcmkyLGRyaTJwcm90byIKKyMgRFJJMyByZXF1aXJlcyB4c2htZmVuY2UgdG8gYWxzbyBiZSBlbmFibGVkCitQQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsLS1kaXNhYmxlLWRyaTMsZHJpM3Byb3RvIgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLWdseCAtLWVuYWJsZS1nbHgtdGxzLC0tZGlzYWJsZS1nbHgsZ2xwcm90byB2aXJ0dWFsL2xpYmdsIHZpcnR1YWwvbGlieDExIgorUEFDS0FHRUNPTkZJR1t1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKK1BBQ0tBR0VDT05GSUdbeHNobWZlbmNlXSA9ICItLWVuYWJsZS14c2htZmVuY2UsLS1kaXNhYmxlLXhzaG1mZW5jZSxsaWJ4c2htZmVuY2UiCitQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLXdpdGgteG1sdG8sIC0td2l0aG91dC14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZC1sb2dpbmRdID0gIi0tZW5hYmxlLXN5c3RlbWQtbG9naW5kPXllcywtLWVuYWJsZS1zeXN0ZW1kLWxvZ2luZD1ubyxkYnVzLCIKK1BBQ0tBR0VDT05GSUdbeGluZXJhbWFdID0gIi0tZW5hYmxlLXhpbmVyYW1hLC0tZGlzYWJsZS14aW5lcmFtYSx4aW5lcmFtYXByb3RvIgorUEFDS0FHRUNPTkZJR1t4d2F5bGFuZF0gPSAiLS1lbmFibGUteHdheWxhbmQsLS1kaXNhYmxlLXh3YXlsYW5kLHdheWxhbmQgbGliZXBveHkiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIEl0cyBhc3N1bWVkIGJhc2UtZmlsZXMgY3JlYXRlcyB0aGlzIGZvciB1cworCXJtZGlyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xvZy8KK30KKworIyBBZGQgcnVudGltZSBwcm92aWRlcyBmb3IgdGhlIEFCSSB2ZXJzaW9ucyBvZiB0aGUgdmlkZW8gYW5kIGlucHV0IHN1YnN5c3RlbXMsCisjIHNvIHRoYXQgZHJpdmVycyBjYW4gZGVwZW5kIG9uIHRoZSByZWxldmFudCB2ZXJzaW9uLgorcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgICMgU2V0IFBLR19DT05GSUdfUEFUSCBzbyBwa2ctY29uZmlnIGxvb2tzIGF0IHRoZSAucGMgZmlsZXMgdGhhdCBhcmUgZ29pbmcKKyAgICAjIGludG8gdGhlIG5ldyBwYWNrYWdlLCBub3QgdGhlIHN0YWdlZCBvbmVzLgorICAgIG5ld2VudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICBuZXdlbnZbIlBLR19DT05GSUdfUEFUSCJdID0gZC5leHBhbmQoIiR7UEtHRH0ke2xpYmRpcn0vcGtnY29uZmlnLyIpCisKKyAgICBkZWYgZ2V0X2FiaShuYW1lKToKKyAgICAgICAgYWJpcyA9IHsKKyAgICAgICAgICAidmlkZW8iOiAiYWJpX3ZpZGVvZHJ2IiwKKyAgICAgICAgICAiaW5wdXQiOiAiYWJpX3hpbnB1dCIKKyAgICAgICAgfQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzPSJwa2ctY29uZmlnIC0tdmFyaWFibGU9JXMgeG9yZy1zZXJ2ZXIiICUgYWJpc1tuYW1lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSwgZW52PW5ld2Vudiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3V0cHV0ID0gcC5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICAgICAgcmV0dXJuICIlc3hvcmctYWJpLSVzLSVzIiAlIChtbHByZWZpeCwgbmFtZSwgb3V0cHV0LnNwbGl0KCIuIilbMF0pCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgcG4sICIgIiArIGdldF9hYmkoImlucHV0IikpCisgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgcG4sICIgIiArIGdldF9hYmkoInZpZGVvIikpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlNGVkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLzAwMDEtdXNlLV9fR0xJQkNfXy1ndWFyZC1mb3ItZ2xpYmMtc3BlY2lmaWMtY29kZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGYyNDI3NDBmNjQ4OGEyNWU2Y2E4NDk2OGIwZTIzMTlhOWEzOTc1YjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA2IEFwciAyMDE1IDIwOjUyOjUwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzZSBfX0dMSUJDX18gZ3VhcmQgZm9yIGdsaWJjIHNwZWNpZmljIGNvZGUKKworVXNpbmcgX19saW51eF9fIGlzIGEgdGFkIGJpdCB3cm9uZyBhc3N1bXB0aW9uIHNpbmNlCitsaW51eCAhPSBnbGliYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGh3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oIGIvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaAoraW5kZXggZWIwYTMzOC4uYzM2NmZmYyAxMDA2NDQKKy0tLSBhL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmgKKysrKyBiL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmgKK0BAIC0xNzgsNyArMTc4LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorIAorLSNpZmRlZiBfX2xpbnV4X18KKysjaWZkZWYgX19HTElCQ19fCisgI2luY2x1ZGUgPHRlcm1pby5oPgorICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19HTElCQ19fICovCisgI2luY2x1ZGUgPHRlcm1pb3MuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvbWFjcm9fdHdlYWsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy9tYWNyb190d2Vhay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBlZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvbWFjcm9fdHdlYWsucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVGhpcyBpcyB0aGUgcmV2aXNlZCB2ZXJzaW9uIG9mIGZpbGVzL21hY3JvX3R3ZWFrLnBhdGNoIGZvcgoreG9yZy1zZXJ2ZXIgMS44Ljk5LjkwNCBhbmQgbmV3ZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEveG9yZy1zZXJ2ZXIubTQgYi94b3JnLXNlcnZlci5tNAoraW5kZXggYmRlY2Y2Mi4uMDQwZmRiOCAxMDA2NDQKKy0tLSBhL3hvcmctc2VydmVyLm00CisrKysgYi94b3JnLXNlcnZlci5tNAorQEAgLTI4LDEwICsyOCwxMiBAQCBkbmwKKyAjIENoZWNrcyBmb3IgdGhlICQxIGRlZmluZSBpbiB4b3JnLXNlcnZlci5oIChmcm9tIHRoZSBzZGspLiAgSWYgaXQKKyAjIGlzIGRlZmluZWQsIHRoZW4gYWRkICQxIHRvICRSRVFVSVJFRF9NT0RVTEVTLgorIAorK200X3BhdHRlcm5fYWxsb3coUEtHX0NPTkZJR19TWVNST09UX0RJUikKKysKKyBBQ19ERUZVTihbWE9SR19EUklWRVJfQ0hFQ0tfRVhUXSxbCisgCUFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorIAlTQVZFX0NGTEFHUz0iJENGTEFHUyIKKy0JQ0ZMQUdTPSIkQ0ZMQUdTIC1JYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9c2RrZGlyIHhvcmctc2VydmVyYCIKKysJQ0ZMQUdTPSIkQ0ZMQUdTIC1JJFBLR19DT05GSUdfU1lTUk9PVF9ESVJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1zZGtkaXIgeG9yZy1zZXJ2ZXJgIgorIAlBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisgI2luY2x1ZGUgInhvcmctc2VydmVyLmgiCisgI2lmICFkZWZpbmVkICQxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzOWQzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTcuMi5iYgpAQCAtMCwwICsxLDI4IEBACityZXF1aXJlIHhzZXJ2ZXIteG9yZy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtdXNlLV9fR0xJQkNfXy1ndWFyZC1mb3ItZ2xpYmMtc3BlY2lmaWMtY29kZS5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOTdlNDA1NTY2NjUxMTUwNDkwZmY0OTNlNDYzZjFhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNjExMjA2MTI3MjhmMmM1MDM0NjcxZDBjYTNlMjI3MzQzOGM2MGFiYTkzYjNkZGE0YThhYTQwZTZhMjU3OTkzIgorCisjIFRoZXNlIGV4dGVuc2lvbnMgYXJlIG5vdyBpbnRlZ3JhdGVkIGludG8gdGhlIHNlcnZlciwgc28gZGVjbGFyZSB0aGUgbWlncmF0aW9uCisjIHBhdGggZm9yIGluLXBsYWNlIHVwZ3JhZGVzLgorCitSUkVQTEFDRVNfJHtQTn0gPSAgIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgorUlBST1ZJREVTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKK1JDT05GTElDVFNfJHtQTn0gPSAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHJlc3RvcC94cmVzdG9wXzAuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94cmVzdG9wL3hyZXN0b3BfMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWRmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHJlc3RvcC94cmVzdG9wXzAuNC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlhSZXM6IEEgdG9wLWxpa2UgcmVzb3VyY2UgdXNhZ2UgdG9vbCBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAidG9wLWxpa2Ugc3RhdGlzdGljcyBvZiBYMTEgc2VydmVyIHJlc291cmNlIHVzYWdlIGJ5IGNsaWVudHMiCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUveHJlc3RvcCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHJlc3RvcC5jO2VuZGxpbmU9MTg7bWQ1PTczMDg3NmMzMGYwZDhhOTI4Njc2YmNkMTI0MmEzYjM1IgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK1BSID0gInIzIgorCitERVBFTkRTID0gImxpYnhyZXMgbGlieGV4dCB2aXJ0dWFsL2xpYngxMSBuY3Vyc2VzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy94cmVzdG9wL3hyZXN0b3AtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDhhNTQ1OTZjYmFmMDM3ZTYyYjgwYzQ1ODVhM2NhOWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjdjMmZjOTRhN2VjZWRiYWFlMGQxODM3ZTgyZTkzZDFkOThmNGE2ZDc1OTgyODg2MGU1NTIxMTlhZjNjZTI1NyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDM2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC8zMHhUc19DYWxpYnJhdGUuc2gKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZworCitpZiBbICIkSEFWRV9UT1VDSFNDUkVFTiIgPSAiMSIgXTsgdGhlbgorCW49MQorCXdoaWxlIFsgISAteiAkVFNMSUJfVFNERVZJQ0UgXSAmJiBbICEgLWYgL2V0Yy9wb2ludGVyY2FsIF0gJiYgWyAkbiAtbGUgNSBdCisJZG8KKwkgICAvdXNyL2Jpbi94dHNjYWwKKwkgICBzbGVlcCAxCisJICAgbj0kKCgkbisxKSkKKwlkb25lCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYTc3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jaGFuZ2UtY3Jvc3MucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSB0bXAvbWFpbi5jLm9yaWcJMjAwNy0wMS0wMiAxNTozOTo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyB0bXAvbWFpbi5jCTIwMDctMDEtMDIgMTU6Mzk6NTQuMDAwMDAwMDAwICswMDAwCitAQCAtMTMxLDkgKzEzMSwxMCBAQAorIHsKKyAgIFhSZW5kZXJGaWxsUmVjdGFuZ2xlcyAoZHB5LCBQaWN0T3BTcmMsIHBpY3QsICZyZWN0X2NvbG9yLCByZWN0YW5nbGVzLCAyKTsKKyAKKy0gIFhGaWxsQXJjIChkcHksIGNyb3NzaGFpcl93LCBjcm9zc2hhaXJfZ2MsIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMikgLSAxLCAKKy0JICAgIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMikgLSAxLAorLQkgICAgV0lEVEggKyAxLCBXSURUSCArIDEsIDAsIDM2MCAqIDY0KTsKKysgIFhGaWxsUmVjdGFuZ2xlIChkcHksIGNyb3NzaGFpcl93LCBjcm9zc2hhaXJfZ2MsCisrCQkgIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMiksCisrCQkgIChDUk9TU0hBSVJfU0laRSAvIDIpIC0gKFdJRFRIIC8gMiksCisrCQkgIFdJRFRILCBXSURUSCk7CisgfQorIAorIHZvaWQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YjA4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoCkBAIC0wLDAgKzEsNjIxIEBACistLS0KKyBNYWtlZmlsZS5hbSAgfCAgICA5IC0tCisgY29uZmlndXJlLmFjIHwgICAgMyAKKyBncGUtZGlzdC5hbSAgfCAgIDEyIC0tLQorIGgzNjAwX3RzLmggICB8ICAyMTYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtYWluLmMgICAgICAgfCAgMjEwICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHh0c2NhbC5pbiAgICB8ICAgMTkgLS0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDQ1NSBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4dHNjYWwtMC42LjMveHRzY2FsLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcveHRzY2FsLmluCTIwMDQtMDktMTAgMjA6MTA6MzYuMDAwMDAwMDAwICswMTAwCisrKysgL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtMSwxOSArMCwwIEBACistIyEvYmluL3NoCistCistbW9kdWxlX2lkKCkgeworLSAgICAjIEdldCBtb2RlbCBuYW1lCistICAgIGVjaG8gYGdyZXAgIl5IYXJkd2FyZSIgL3Byb2MvY3B1aW5mbyB8IHNlZCAtZSAicy8uKjogKi8vIiB8IHRyIGEteiBBLVpgCistfQorLQorLWNhc2UgYG1vZHVsZV9pZGAgaW4KKy0JIkhQIElQQVEgSDMxMDAiIHwgIkhQIElQQVEgSDM4MDAiICkKKy0JCUFSR1M9Ii1yb3RhdGUgOTAiIDs7CistCSJIUCBJUEFRIEgzNjAwIiB8ICJIUCBJUEFRIEgzNzAwIiB8ICJIUCBJUEFRIEgzOTAwIiB8ICpDT0xMSUUgfCAqUE9PRExFKQorLQkJQVJHUz0iLXJvdGF0ZSAyNzAiIDs7CistCSMgSDIyMDA6IHdvcmtzIHdpdGhvdXQgcm90YXRpb24KKy1lc2FjCistCistIyB0aGUgdGhpbmdzIHdlIGRvIGZvciBhdXRvY29uZgorLXByZWZpeD1AcHJlZml4QAorLWV4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKy1leGVjIEBsaWJleGVjZGlyQC94dHNjYWwuYmluICRBUkdTICQqCitJbmRleDogeHRzY2FsLTAuNi4zL21haW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL21haW4uYwkyMDA3LTA3LTAxIDAxOjEyOjUyLjAwMDAwMDAwMCArMDEwMAorKysrIHh0c2NhbC0wLjYuMy9tYWluLmMJMjAwNy0wNy0wMSAwMToxMjo1NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMiwxMiArMjIsMTAgQEAKKyAjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyAKKyAjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgorLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmFuZHIuaD4KKyAjaW5jbHVkZSA8WDExL1hmdC9YZnQuaD4KKyAjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMveGNhbGlicmF0ZS5oPgorICNpbmNsdWRlIDxYMTEva2V5c3ltLmg+CisgCistI2luY2x1ZGUgImgzNjAwX3RzLmgiCisgI2luY2x1ZGUgImNhbGlicmF0ZS5oIgorIAorIERpc3BsYXkgKmRweTsKK0BAIC00NSwxNSArNDMsMTEgQEAgWGZ0Q29sb3IgeGZ0Y29sOworIFhmdERyYXcgKnhmdGRyYXc7CisgWGZ0Rm9udCAqeGZ0Zm9udDsKKyBpbnQgc2NyZWVuX3gsIHNjcmVlbl95OworLWludCB0c19mZDsKKyBpbnQgc2FtcGxlczsKKyBQaXhtYXAgYmdfcGl4bWFwOworIGludCBmbGFnX2RlYnVnOworLWludCByb3RhdGlvbiA9IDA7CisgaW50IGVycm9yX2Jhc2UsIGV2ZW50X2Jhc2U7CisgCistaW50IHVzaW5nX3hjYWxpYnJhdGU7CistCisgaW50IG1vdmluZzsKKyAKKyAjZGVmaW5lIENST1NTSEFJUl9TSVpFCTI1CitAQCAtNjMsNyArNTcsNiBAQCBpbnQgbW92aW5nOworICNkZWZpbmUgRU5PVUdIIDUKKyAjZGVmaW5lIE1BWF9TQU1QTEVTIDQwCisgCistI2RlZmluZSBSQVdfREVWSUNFICIvZGV2L2gzNjAwX3RzcmF3IgorICNkZWZpbmUgRk9OVE5BTUUgInNhbnMtMTAiCisgCisgc3RydWN0IHBvaW50IAorQEAgLTI4NywxMiArMjgwLDggQEAgc29ydF9ieV95IChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkICpiKQorIHZvaWQKKyBzZXRfY2FsaWJyYXRpb24gKGNhbGlicmF0aW9uICpjYWwpCisgeworLSAgVFNfQ0FMIHRjOworLSAgaW50IHh0cmFucywgeXRyYW5zLCB4c2NhbGUsIHlzY2FsZSwgeHlzY2FsZSwgeXhzY2FsZTsKKyAgIGNhbGlicmF0aW9uIG9jYWwgPSAqY2FsOworIAorLSAgaWYgKHVzaW5nX3hjYWxpYnJhdGUpCistICAgIHsKKyAgICAgICBGSUxFICpmcDsKKyAgICAgICBpZiAoZmxhZ19kZWJ1ZykKKyAJcHJpbnRmICgiY29uc3RhbnRzIGFyZTogJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIGNhbC0+YVsxXSwgY2FsLT5hWzJdLCBjYWwtPmFbMF0sIGNhbC0+YVs0XSwgY2FsLT5hWzVdLCBjYWwtPmFbM10sIGNhbC0+YVs2XSk7CitAQCAtMzA0LDI5ICsyOTMsNiBAQCBzZXRfY2FsaWJyYXRpb24gKGNhbGlicmF0aW9uICpjYWwpCisgCX0KKyAgICAgICBmcHJpbnRmIChmcCwgIiVkICVkICVkICVkICVkICVkICVkXG4iLCBjYWwtPmFbMV0sIGNhbC0+YVsyXSwgY2FsLT5hWzBdLCBjYWwtPmFbNF0sIGNhbC0+YVs1XSwgY2FsLT5hWzNdLCBjYWwtPmFbNl0pOworICAgICAgIGZjbG9zZSAoZnApOyAKKy0gICAgICByZXR1cm47CistICAgIH0KKy0KKy0gIHh0cmFucyA9IGNhbC0+YVswXSAvIGNhbC0+YVs2XTsKKy0gIHl0cmFucyA9IGNhbC0+YVszXSAvIGNhbC0+YVs2XTsKKy0gIHhzY2FsZSA9IGNhbC0+YVsxXSAqIDI1NiAvIGNhbC0+YVs2XTsKKy0gIHlzY2FsZSA9IGNhbC0+YVs1XSAqIDI1NiAvIGNhbC0+YVs2XTsKKy0gIHh5c2NhbGUgPSBjYWwtPmFbMl0gKiAyNTYgLyBjYWwtPmFbNl07CistICB5eHNjYWxlID0gY2FsLT5hWzRdICogMjU2IC8gY2FsLT5hWzZdOworLSAgCistICB0Yy54dHJhbnMgPSB4dHJhbnM7CistICB0Yy55dHJhbnMgPSB5dHJhbnM7CistICB0Yy54c2NhbGUgPSB4c2NhbGU7CistICB0Yy55c2NhbGUgPSB5c2NhbGU7CistICB0Yy54eXN3YXAgPSAwOworLQorLSAgcHJpbnRmICgiJWQgJWQgJWQgJWQgJWRcbiIsIHRjLnhzY2FsZSwgdGMueHRyYW5zLCB0Yy55c2NhbGUsIHRjLnl0cmFucywgdGMueHlzd2FwKTsKKy0KKy0gIGlmIChpb2N0bCAodHNfZmQsIFRTX1NFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQorLSAgICB7CistICAgICAgcGVycm9yICgiVFNfU0VUX0NBTCIpOworLSAgICAgIGV4aXQgKDEpOworLSAgICB9CisgfQorIAorIHZvaWQKK0BAIC0zOTgsODAgKzM2NCwxMyBAQCBoYW5kbGVfdHNfZXZlbnQgKGludCB4LCBpbnQgeSwgaW50IHByZXNzCisgfQorIAorIHZvaWQKKy1yZWFkX3RzICh2b2lkKQorLXsKKy0gIFRTX0VWRU5UIHRzX2V2OworLSAgaW50IHI7CistCistICByID0gcmVhZCAodHNfZmQsICZ0c19ldiwgc2l6ZW9mICh0c19ldikpOworLSAgaWYgKHIgPT0gc2l6ZW9mICh0c19ldikpCistICAgIGhhbmRsZV90c19ldmVudCAodHNfZXYueCwgdHNfZXYueSwgdHNfZXYucHJlc3N1cmUpOworLX0KKy0KKy12b2lkCistZG9fY2FsIChjaGFyICoqYXJncykKKy17CistICBUU19DQUwgdGM7CistCistICB0Yy54c2NhbGUgPSBhdG9pIChhcmdzWzBdKTsKKy0gIHRjLnh0cmFucyA9IGF0b2kgKGFyZ3NbMV0pOworLSAgdGMueXNjYWxlID0gYXRvaSAoYXJnc1syXSk7CistICB0Yy55dHJhbnMgPSBhdG9pIChhcmdzWzNdKTsKKy0gIHRjLnh5c3dhcCA9IGF0b2kgKGFyZ3NbNF0pOworLQorLSAgaWYgKGZsYWdfZGVidWcpCistICAgIGZwcmludGYgKHN0ZGVyciwgInNldHRpbmc6ICVkICVkICVkICVkICVkXG4iLCAKKy0JICAgICB0Yy54dHJhbnMsIHRjLnl0cmFucywgdGMueHNjYWxlLCB0Yy55c2NhbGUsIHRjLnh5c3dhcCk7CistICAgIAorLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfU0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCistICAgIHsKKy0gICAgICBwZXJyb3IgKCJUU19TRVRfQ0FMIik7CistICAgICAgZXhpdCAoMSk7CistICAgIH0KKy0gIAorLSAgZXhpdCAoMCk7CistfQorLQorLXZvaWQKKy1zaG93X2NhbCAodm9pZCkKKy17CistICBUU19DQUwgdGM7CistCistICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19HRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKKy0gICAgeworLSAgICAgIHBlcnJvciAoIlRTX0dFVF9DQUwiKTsKKy0gICAgICBleGl0ICgxKTsKKy0gICAgfQorLQorLSAgcHJpbnRmICgiJWQgJWQgJWQgJWQgJWRcbiIsIHRjLnhzY2FsZSwgdGMueHRyYW5zLCB0Yy55c2NhbGUsIHRjLnl0cmFucywgdGMueHlzd2FwKTsKKy19CistCistdm9pZAorIHVzYWdlIChjb25zdCBjaGFyICpuYW1lKQorIHsKKy0gIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyAtdmlld1xuIiwgbmFtZSk7CistICBmcHJpbnRmIChzdGRlcnIsICIgICAgICAgJXMgWy1yb3RhdGUgPDAgfCA5MCB8IDE4MCB8IDI3MD5dXG4iLCBuYW1lKTsKKy0gIGZwcmludGYgKHN0ZGVyciwgIiAgICAgICAlcyAtY2FsIDx4cz4gPHh0PiA8eXM+IDx5dD4gPHh5c3dhcD5cbiIsIG5hbWUpOworLQorKyAgZnByaW50ZiAoc3RkZXJyLCAidXNhZ2U6ICVzIFstZGVidWddXG4iLCBuYW1lKTsKKyAgIGV4aXQgKDEpOworIH0KKyAKKyBpbnQKKy14cnJfc3VwcG9ydGVkICh2b2lkKQorLXsKKy0gIGludCB4cnJfZXZlbnRfYmFzZSwgeHJyX2Vycm9yX2Jhc2U7CistICBpbnQgeHJyX21ham9yLCB4cnJfbWlub3I7CistCistICBpZiAoWFJSUXVlcnlFeHRlbnNpb24gKGRweSwgJnhycl9ldmVudF9iYXNlLCAmeHJyX2Vycm9yX2Jhc2UpID09IEZhbHNlCistICAgICAgfHwgWFJSUXVlcnlWZXJzaW9uIChkcHksICZ4cnJfbWFqb3IsICZ4cnJfbWlub3IpID09IDAKKy0gICAgICB8fCB4cnJfbWFqb3IgIT0gMQorLSAgICAgIHx8IHhycl9taW5vciA8IDEpCistICAgIHJldHVybiAwOworLQorLSAgcmV0dXJuIDE7CistfQorLQorLWludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKK0BAIC00ODAsMzEgKzM3OSwxMSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgaW50IG1heF9mZDsKKyAgIEdDIGJnX2djOworICAgaW50IGk7CistICBpbnQgaGF2ZV94cmFuZHI7CisgCisgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgICB7CistICAgICAgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItdmlldyIpKQorLQl7CistCSAgc2hvd19jYWwgKCk7CistCSAgZXhpdCAoMCk7CistCX0KKy0gICAgICBlbHNlIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWRlYnVnIikpCisrICAgICAgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItZGVidWciKSkKKyAJZmxhZ19kZWJ1ZyA9IDE7CistICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1jYWwiKSkKKy0JeworLQkgIGlmIChhcmdjID4gKGkgKyA1KSkKKy0JICAgIGRvX2NhbCAoYXJndiArIGkgKyAxKTsKKy0JICBlbHNlCistCSAgICB1c2FnZSAoYXJndlswXSk7CistCX0KKy0gICAgICBlbHNlIGlmICghc3RyY21wIChhcmd2W2ldLCAiLXJvdGF0ZSIpKQorLQl7CistCSAgaWYgKGFyZ2MgPiAoaSArIDEpKQorLQkgICAgcm90YXRpb24gPSBhdG9pIChhcmd2WysraV0pOworLQkgIGVsc2UKKy0JICAgIHVzYWdlIChhcmd2WzBdKTsKKy0JfQorICAgICAgIGVsc2UKKyAJdXNhZ2UgKGFyZ3ZbMF0pOworICAgICB9CitAQCAtNTMxLDQ4ICs0MTAsMTEgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICBmcHJpbnRmIChzdGRlcnIsICJmYWlsZWQgdG8gc2V0IHJhdyBtb2RlOiBlcnJvciAlZFxuIiwgcik7CisgCSAgZXhpdCAoMSk7CisgCX0KKy0KKy0gICAgICB1c2luZ194Y2FsaWJyYXRlID0gMTsKKy0gICAgfQorLQorLSAgaGF2ZV94cmFuZHIgPSB4cnJfc3VwcG9ydGVkICgpOworLSAgaWYgKGhhdmVfeHJhbmRyKQorLSAgICB7CistICAgICAgWFJSU2NyZWVuQ29uZmlndXJhdGlvbiAqcnJfc2NyZWVuOworLSAgICAgIFJvdGF0aW9uIGN1cnJlbnRfcm90YXRpb247CistCistICAgICAgaWYgKGZsYWdfZGVidWcpCistCWZwcmludGYgKHN0ZGVyciwgIlhSQU5EUiBpcyBzdXBwb3J0ZWRcbiIpOworLQorLSAgICAgIHJyX3NjcmVlbiA9IFhSUkdldFNjcmVlbkluZm8gKGRweSwgUm9vdFdpbmRvdyAoZHB5LCBzY3JlZW4pKTsKKy0KKy0gICAgICBYUlJSb3RhdGlvbnMgKGRweSwgc2NyZWVuLCAmY3VycmVudF9yb3RhdGlvbik7CistCistICAgICAgWFJSRnJlZVNjcmVlbkNvbmZpZ0luZm8gKHJyX3NjcmVlbik7CistCistICAgICAgaWYgKGZsYWdfZGVidWcpCistCWZwcmludGYgKHN0ZGVyciwgIkN1cnJlbnQgUkFORFIgcm90YXRpb24gaXMgJWRcbiIsIGN1cnJlbnRfcm90YXRpb24pOworLQorLSAgICAgIHN3aXRjaCAoY3VycmVudF9yb3RhdGlvbikKKy0JeworLQljYXNlIFJSX1JvdGF0ZV8yNzA6CistCSAgcm90YXRpb24gKz0gOTA7CistCWNhc2UgUlJfUm90YXRlXzE4MDoKKy0JICByb3RhdGlvbiArPSA5MDsKKy0JY2FzZSBSUl9Sb3RhdGVfOTA6CistCSAgcm90YXRpb24gKz0gOTA7CistCSAgcm90YXRpb24gJT0gMzYwOworLQljYXNlIFJSX1JvdGF0ZV8wOgorLQkgIGJyZWFrOworLQlkZWZhdWx0OgorLQkgIGZwcmludGYgKHN0ZGVyciwgIlVua25vd24gUkFORFIgcm90YXRpb246ICVkXG4iLCBjdXJyZW50X3JvdGF0aW9uKTsKKy0JICBicmVhazsKKy0JfQorICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JZnByaW50ZiAoc3RkZXJyLCAiWFJBTkRSIG5vdCBzdXBwb3J0ZWRcbiIpOworKyAgICAgIHBlcnJvciAoIlhDQUxJQlJBVEUgZXh0ZW5zaW9uIG1pc3NpbmciKTsKKysgICAgICBleGl0ICgxKTsKKyAgICAgfQorIAorICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IGZsYWdfZGVidWcgPyBGYWxzZSA6IFRydWU7CitAQCAtNjY2LDQ1ICs1MDgsMTcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAKKyAgIGZvciAoaSA9IDA7IGkgPCBOUl9QT0lOVFM7IGkrKykKKyAgICAgeworLSAgICAgIHN3aXRjaCAocm90YXRpb24pCistCXsKKy0JY2FzZSAwOgorLQkgIGNhbC54ZmJbaV0gPSBjYWwueHNjcltpXTsKKy0JICBjYWwueWZiW2ldID0gY2FsLnlzY3JbaV07CistCSAgYnJlYWs7CistCWNhc2UgOTA6CistCSAgY2FsLnhmYltpXSA9IGNhbC55c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBzY3JlZW5feCAtIGNhbC54c2NyW2ldOworLQkgIGJyZWFrOworLQljYXNlIDE4MDoKKy0JICBjYWwueGZiW2ldID0gc2NyZWVuX3ggLSBjYWwueHNjcltpXTsKKy0JICBjYWwueWZiW2ldID0gc2NyZWVuX3kgLSBjYWwueXNjcltpXTsKKy0JICBicmVhazsKKy0JY2FzZSAyNzA6CistCSAgY2FsLnhmYltpXSA9IHNjcmVlbl95IC0gY2FsLnlzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IGNhbC54c2NyW2ldOworLQkgIGJyZWFrOworLQl9CisrICAgICAgY2FsLnhmYltpXSA9IGNhbC54c2NyW2ldOworKyAgICAgIGNhbC55ZmJbaV0gPSBjYWwueXNjcltpXTsKKysgICAgICBYQ2FsaWJyYXRlU2NyZWVuVG9Db29yZCAoZHB5LCAmY2FsLnhmYltpXSwgJmNhbC55ZmJbaV0pOworIAorICAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlwcmludGYgKCJyb3RhdGlvbiAlZDogKCVkLCVkKSAtPiAoJWQsJWQpXG4iLCByb3RhdGlvbiwgCisrCXByaW50ZiAoInJvdGF0aW9uIGNvbnZlcnNpb246ICglZCwlZCkgLT4gKCVkLCVkKVxuIiwKKyAJCWNhbC54c2NyW2ldLCBjYWwueXNjcltpXSwgY2FsLnhmYltpXSwgY2FsLnlmYltpXSk7CisgICAgIH0KKyAKKyAgIG5leHRfZXZlbnQgKCk7CisgCistICBpZiAoIXVzaW5nX3hjYWxpYnJhdGUpCistICAgIHsKKy0gICAgICB0c19mZCA9IG9wZW4gKFJBV19ERVZJQ0UsIE9fUkRPTkxZKTsKKy0gICAgICBpZiAodHNfZmQgPCAwKQorLQl7CistCSAgcGVycm9yIChSQVdfREVWSUNFKTsKKy0JICBleGl0ICgxKTsKKy0JfQorLSAgICB9CistCistICBtYXhfZmQgPSAoeGZkID4gdHNfZmQpID8geGZkIDogdHNfZmQ7CistCisgICBmb3IgKDs7KQorICAgICB7CisgICAgICAgZmRfc2V0IGZkczsKK0BAIC03MTMsMTIgKzUyNyw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgICAgICAgRkRfWkVSTyAoJmZkcyk7CisgICAgICAgRkRfU0VUICh4ZmQsICZmZHMpOworLSAgICAgIGlmICh0c19mZCAhPSAtMSkKKy0JRkRfU0VUICh0c19mZCwgJmZkcyk7CisgCistICAgICAgc2VsZWN0IChtYXhfZmQgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKy0gICAgICAKKy0gICAgICBpZiAodHNfZmQgIT0gLTEgJiYgRkRfSVNTRVQgKHRzX2ZkLCAmZmRzKSkKKy0JcmVhZF90cyAoKTsKKysgICAgICBzZWxlY3QgKHhmZCArIDEsICZmZHMsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgICB9CisgfQorKworSW5kZXg6IHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9jb25maWd1cmUuYWMJMjAwNC0wOS0xMCAyMDoxMToxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCTIwMDctMDctMDEgMDE6MTI6NTUuMDAwMDAwMDAwICswMTAwCitAQCAtOSw4ICs5LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LWJ6aXAyXSkKKyAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQworIAorLVBLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhyYW5kciB4Y2FsaWJyYXRlKQorK1BLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhjYWxpYnJhdGUpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZV0pCistQUNfQ09ORklHX0ZJTEVTKFt4dHNjYWxdKQorIEFDX09VVFBVVAorSW5kZXg6IHh0c2NhbC0wLjYuMy9ncGUtZGlzdC5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2dwZS1kaXN0LmFtCTIwMDQtMDYtMDIgMjM6MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtMSwxMiArMCwwIEBACistQ1ZTVEFHIDo9ICQoc2hlbGwgZWNobyAkKFBBQ0tBR0UpLSQoVkVSU0lPTikgfCB0ciBbYS16Ll0gW0EtWl9dKQorLQorLWRpc3QtdXBsb2FkOiBkaXN0CistCXNjcCAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLmJ6MiAkKFVTRVIpQGhhbmRoZWxkcy5vcmc6L2hvbWUvZnRwL3B1Yi9wcm9qZWN0cy9ncGUvc291cmNlLworLQorLXRhZzoKKy0JY3ZzIHRhZyAkKENWU1RBRykKKy0KKy1yZXRhZzoKKy0JY3ZzIHRhZyAtRiAkKENWU1RBRykKKy0KKy1zb3VyY2U6IHRhZyBkaXN0LXVwbG9hZAorSW5kZXg6IHh0c2NhbC0wLjYuMy9oMzYwMF90cy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvaDM2MDBfdHMuaAkyMDAzLTA3LTA1IDE3OjI3OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsMjE2ICswLDAgQEAKKy0vKgorLSoKKy0qIERyaXZlciBmb3IgdGhlIEgzNjAwIFRvdWNoIFNjcmVlbiBhbmQgb3RoZXIgQXRtZWwgY29udHJvbGxlZCBkZXZpY2VzLgorLSoKKy0qIENvcHlyaWdodCAyMDAwIENvbXBhcSBDb21wdXRlciBDb3Jwb3JhdGlvbi4KKy0qCistKiBVc2UgY29uc2lzdGVudCB3aXRoIHRoZSBHTlUgR1BMIGlzIHBlcm1pdHRlZCwKKy0qIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCistKiBwcmVzZXJ2ZWQgaW4gaXRzIGVudGlyZXR5IGluIGFsbCBjb3BpZXMgYW5kIGRlcml2ZWQgd29ya3MuCistKgorLSogQ09NUEFRIENPTVBVVEVSIENPUlBPUkFUSU9OIE1BS0VTIE5PIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUiBJTVBMSUVELAorLSogQVMgVE8gVEhFIFVTRUZVTE5FU1MgT1IgQ09SUkVDVE5FU1MgT0YgVEhJUyBDT0RFIE9SIElUUworLSogRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy0qCistKiBBdXRob3I6IENoYXJsZXMgRmx5bm4uCistKgorLSovCistCistCistI2lmbmRlZiBfX0gzNjAwX1RTX0hfXworLSNkZWZpbmUgX19IMzYwMF9UU19IX18KKy0KKy0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKy0KKy1lbnVtIGgzNjAwX3RzX21pbm9yX2RldmljZXMgeworLQlUU19NSU5PUiAgICA9IDAsCistCVRTUkFXX01JTk9SID0gMSwKKy0JS0VZX01JTk9SICAgPSAyCistfTsKKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c19jYWxpYnJhdGlvbiB7CistICAgICAgICBpbnQgeHNjYWxlOworLSAgICAgICAgaW50IHh0cmFuczsKKy0gICAgICAgIGludCB5c2NhbGU7CistICAgICAgICBpbnQgeXRyYW5zOworLSAgICAgICAgaW50IHh5c3dhcDsKKy19IFRTX0NBTDsKKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c19ldmVudCB7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcmVzc3VyZTsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHg7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCB5OworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFkOworLX0gVFNfRVZFTlQ7CistCistLyogRGVwcmVjYXRlZCAtIGRvIG5vdCB1c2UgKi8KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c19yZXR1cm4geworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJlc3N1cmU7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCB4OworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeTsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZDsKKy19IFRTX1JFVDsKKy0KKy1lbnVtIHBvd2VyX2J1dHRvbl9tb2RlIHsKKy0gICBQQk1fU1VTUEVORCAgICAgICAgICAgPSAwLAorLSAgIFBCTV9HRU5FUkFURV9LRVlQUkVTUyA9IDEKKy19OworLQorLQorLS8qICsrKysrKysrKysrKysrICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCB0aGVybV9kZXYgeworLQlzaG9ydCBkYXRhOworLX0gVEhFUk1fREVWOworLQorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX0FMS0FMSU5FICAgICAgICAweDAxCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTklDRCAgICAgICAgICAgIDB4MDIKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9OSU1IICAgICAgICAgICAgMHgwMworLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX0xJT04gICAgICAgICAgICAweDA0CistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTElQT0xZICAgICAgICAgIDB4MDUKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9OT1RfSU5TVEFMTEVEICAgMHgwNgorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX1VOS05PV04gICAgICAgICAweGZmCistCistLyogVGhlc2Ugc2hvdWxkIG1hdGNoIHRoZSBhcG1fYmlvcy5oIGRlZmluaXRpb25zICovCistI2RlZmluZSBIMzYwMF9BQ19TVEFUVVNfQUNfT0ZGTElORQkweDAwCistI2RlZmluZSBIMzYwMF9BQ19TVEFUVVNfQUNfT05MSU5FCTB4MDEKKy0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19CQUNLVVAJMHgwMiAgIC8qIFdoYXQgZG9lcyB0aGlzIG1lYW4/ICovCistI2RlZmluZSBIMzYwMF9BQ19TVEFUVVNfQUNfVU5LTk9XTgkweGZmCistCistLyogVGhlc2UgYml0ZmllbGRzIGFyZSByYXJlbHkgIm9yJ2QiIHRvZ2V0aGVyICovCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19ISUdICQkweDAxCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19MT1cJCTB4MDIKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0NSSVRJQ0FMCTB4MDQKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0NIQVJHSU5HCTB4MDgKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0NIQVJHRV9NQUlOICAgMHgxMAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfREVBRCAgICAgICAgICAweDIwICAgLyogQmF0dGVyeSB3aWxsIG5vdCBjaGFyZ2UgKi8KKy0jZGVmaW5lIEgzNjAwX0JBVFRfTk9UX0lOU1RBTExFRCAgICAgICAgMHgyMCAgIC8qIEZvciBleHBhbnNpb24gcGFjayBiYXR0ZXJpZXMgKi8KKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0ZVTEwgICAgICAgICAgMHg0MCAgIC8qIEJhdHRlcnkgZnVsbHkgY2hhcmdlZCAoYW5kIGNvbm5lY3RlZCB0byBBQykgKi8KKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX05PQkFUVAkweDgwCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19VTktOT1dOCTB4ZmYKKy0KKy1zdHJ1Y3QgYmF0dGVyeV9kYXRhIHsKKy0JdW5zaWduZWQgY2hhciAgY2hlbWlzdHJ5OworLQl1bnNpZ25lZCBjaGFyICBzdGF0dXM7CistCXVuc2lnbmVkIHNob3J0IHZvbHRhZ2U7ICAgIC8qIFZvbHRhZ2UgZm9yIGJhdHRlcnkgIzA7IHVua25vd24gZm9yIGJhdHRlcnkgIzEgKi8KKy0JdW5zaWduZWQgc2hvcnQgcGVyY2VudGFnZTsgLyogUGVyY2VudGFnZSBvZiBmdWxsIGNoYXJnZSAqLworLQl1bnNpZ25lZCBzaG9ydCBsaWZlOyAgICAgICAvKiBMaWZlIHJlbWFpbmluZyBpbiBtaW51dGVzICovCistfTsKKy0KKy1zdHJ1Y3QgaDM2MDBfYmF0dGVyeSB7CistICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgIGFjX3N0YXR1czsKKy0JdW5zaWduZWQgY2hhciAgICAgICBiYXR0ZXJ5X2NvdW50OyAgLyogSG93IG1hbnkgYmF0dGVyaWVzIHdlIGhhdmUgKi8KKy0Jc3RydWN0IGJhdHRlcnlfZGF0YSBiYXR0ZXJ5WzJdOworLX07CistCistLyogLS0tLS0tLS0gRUVQUk9NIGFuZCBTUEkgSW50ZXJmYWNlcyAtLS0tLS0tLS0tLS0tLS0qLworLQorLSNkZWZpbmUgRUVQUk9NX1JEX0JVRlNJWiA2CS8qIEVFUFJPTSByZWFkcyBhcmUgMTYgYml0cyAqLworLSNkZWZpbmUgRUVQUk9NX1dSX0JVRlNJWiA1CS8qIEFsbG93IHJvb20gZm9yIDhiaXQgJ2FkZHInIGZpZWxkIGluIGJ1ZmZlciovIAorLSNkZWZpbmUgU1BJX1JEX0JVRlNJWgkgMTYJLyogU1BJIHJlYWRzIGFyZSA4IGJpdHMgKi8KKy0jZGVmaW5lIFNQSV9XUl9CVUZTSVoJIDcKKy0KKy0vKiBUaGUgRUVQUk9NIGlzIHdoZXJlIGludGVybmFsIHByb2dyYW1zIGFyZSBzdG9yZWQgb24gdGhlIEFtdGVsLgorLSAgIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHJlYWQgb3Igd3JpdGUgdGhlc2UgdmFsdWVzICovCistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3JlYWRfcmVxdWVzdCB7CistCXVuc2lnbmVkIGNoYXIgYWRkcjsgICAgLyogOGJpdCBBZGRyZXNzIE9mZnNldCAwLTI1NSAqLworLQl1bnNpZ25lZCBjaGFyIGxlbjsgICAgIC8qIE51bWJlciBvZiAxNmJpdCB3b3JkcyB0byByZWFkIDAtMTI4ICAqLworLQl1bnNpZ25lZCBzaG9ydCBidWZmW0VFUFJPTV9SRF9CVUZTSVpdOworLX0gRUVQUk9NX1JFQUQ7CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3dyaXRlX3JlcXVlc3QgeworLQl1bnNpZ25lZCBjaGFyIGxlbjsJLyogdXNlZCBvbmx5IHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0byBzZW5kICovCistCXVuc2lnbmVkIGNoYXIgYWRkcjsgICAgLyogMC0xMjggICovCistCXVuc2lnbmVkIHNob3J0IGJ1ZmZbRUVQUk9NX1dSX0JVRlNJWl07CistfSBFRVBST01fV1JJVEU7CistCistLyogVGhlIFNQSSBidXMgY29ubmVjdHMgdG8gRUVQUk9NcyBsb2NhdGVkIG9uIHNsZWV2ZXMgcGx1Z2dlZCBpbnRvCistICAgdGhlIGlQQVEuICBZb3UgbWF5IHdhbnQgdG8gcmVhZCB0aGVzZSB2YWx1ZXMgICovCistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfc3BpX3JlYWRfcmVxdWVzdCB7CistCXVuc2lnbmVkIHNob3J0IGFkZHI7ICAgIC8qIDE2Yml0IEFkZHJlc3MgT2Zmc2V0IDAtMTI4ICovCistCXVuc2lnbmVkIGNoYXIgbGVuOyAgICAgIC8qIE51bWJlciBvZiBieXRlcyB0byByZWFkICovCistCXVuc2lnbmVkIGNoYXIgYnVmZltTUElfUkRfQlVGU0laXTsKKy19IFNQSV9SRUFEOworLQorLSNkZWZpbmUgU1BJX1JFQURfU1RBVFVTX0JZVEUgIDB4ZmZmZiAgIC8qIFVzZSB0aGlzIGFkZHJlc3MgdG8gcmVhZCB0aGUgc3RhdHVzIGJ5dGUgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF9zcGlfd3JpdGVfcmVxdWVzdCB7CistCXVuc2lnbmVkIHNob3J0IGxlbjsJLyogdXNlZCBvbmx5IHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0byBzZW5kICovCistCXVuc2lnbmVkIHNob3J0IGFkZHI7CS8qIHRoaXMgMTZiaXQgYWRkcmVzcyBhY2Nlc3NlcyBhIHNpbmdsZSBieXRlICovCistCXVuc2lnbmVkIGNoYXIgIGJ1ZmZbU1BJX1dSX0JVRlNJWl07CistfSBTUElfV1JJVEU7CistCistCistLyogLS0tLS0tLS0gZW5kIG9mIEVFUFJPTSBhbmQgU1BJIEludGVyZmFjZXMgLS0tLS0tLS0tLS0tLS0tKi8KKy0KKy0vKiBVc2VyIHNwYWNlIHN0cnVjdHVyZXMgZm9yIElPQ1RMIGNhbGxzICovCistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfdmVyc2lvbiB7CistCXVuc2lnbmVkIGNoYXIgaG9zdF92ZXJzaW9uWzhdOwkvKiBhc2NpaSAieC55eSIgKi8KKy0JdW5zaWduZWQgY2hhciBwYWNrX3ZlcnNpb25bOF07CS8qIGFzY2lpICJ4Lnl5IiAqLworLQl1bnNpZ25lZCBjaGFyIGJvb3RfdHlwZTsJCS8qIFRPRE8gPz8gKi8KKy19IFZFUl9SRVQ7CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfbGVkIHsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgT2ZmT25CbGluazsgICAgICAgLyogMD1vZmYgMT1vbiAyPUJsaW5rICovCistICAgICAgICB1bnNpZ25lZCBjaGFyIFRvdGFsVGltZTsgICAgICAgIC8qIFVuaXRzIG9mIDUgc2Vjb25kcyAqLworLSAgICAgICAgdW5zaWduZWQgY2hhciBPblRpbWU7ICAgICAgICAgICAvKiB1bml0cyBvZiAxMDBtL3MgKi8KKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgT2ZmVGltZTsgICAgICAgICAgLyogdW5pdHMgb2YgMTAwbS9zICovCistfSBMRURfSU47CistCistZW51bSBmbGl0ZV9tb2RlIHsKKy0gICAgICAgIEZMSVRFX01PREUxID0gMSwKKy0JRkxJVEVfQVVUT19NT0RFICAgPSAxLCAgICAgLyogZm9yIHJlZmVyZW5jZSBvbmx5ICovCistCUZMSVRFX01BTlVBTF9NT0RFID0gMiwgICAgIC8qIFVzZSB0aGlzIG5vcm1hbGx5PyAqLworLQlGTElURV9HRVRfTElHSFRfU0VOU09SID0gMyAvKiBSZXR1cm5zIGxpZ2h0IHJlYWRpbmcgaW4gImJyaWdodG5lc3MiIGZpZWxkICovCistfTsKKy1lbnVtIGZsaXRlX3B3ciB7CistICAgICAgICBGTElURV9QV1JfT0ZGID0gMCwKKy0gICAgICAgIEZMSVRFX1BXUl9PTiAgPSAxCistfTsKKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c19mbGl0ZSB7CistICAgICAgICB1bnNpZ25lZCBjaGFyIG1vZGU7CistICAgICAgICB1bnNpZ25lZCBjaGFyIHB3cjsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKy19IEZMSVRFX0lOOworLQorLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogVXBkYXRlZCAidW5pdmVyc2FsIiBzdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKiovCistCistLyogU2V0cyBiYWNrbGlnaHQgZm9yIGJvdGggSDMxMDAgYW5kIEgzNjAwIG1vZGVscyAtIHRlY2huaWNhbGx5ICJmcm9udGxpZ2h0IiBmb3IgSDM2MDAgKi8KKy1zdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0IHsKKy0JZW51bSBmbGl0ZV9wd3IgcG93ZXI7ICAgICAgICAgIC8qIDAgPSBvZmYsIDEgPSBvbiAqLworLQl1bnNpZ25lZCBjaGFyICBicmlnaHRuZXNzOyAgICAgLyogMCAtIDI1NSAgICAgICAgICovCistfTsKKy0KKy1zdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QgeyAgICAgICAgICAgIC8qIE9ubHkgdXNlZnVsIG9uIEgzMTAwIG1vZGVsICovCistCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7ICAgICAgIC8qIDAgLSAyNTUgKi8KKy19OworLQorLS8qIElPQ1RMIGNtZHMgIHVzZXIgb3Iga2VybmVsIHNwYWNlICovCistCistLyogVXNlICdmJyBhcyBtYWdpYyBudW1iZXIgKi8KKy0jZGVmaW5lIElPQ19IMzYwMF9UU19NQUdJQyAgJ2YnCistCistLyogVE9ETzogU29tZSBvZiB0aGVzZSBJT1dSIHZhbHVlcyBhcmUganVzdCBwbGFpbiB3cm9uZyAqLworLSNkZWZpbmUgR0VUX1ZFUlNJT04JCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAgMSwgc3RydWN0IGgzNjAwX3RzX3ZlcnNpb24gKQorLSNkZWZpbmUgUkVBRF9FRVBST00JCV9JT1dSKElPQ19IMzYwMF9UU19NQUdJQywgMiwgc3RydWN0IGgzNjAwX2VlcHJvbV9yZWFkX3JlcXVlc3QpCistI2RlZmluZSBXUklURV9FRVBST00JCV9JT1dSKElPQ19IMzYwMF9UU19NQUdJQywgMywgc3RydWN0IGgzNjAwX2VlcHJvbV93cml0ZV9yZXF1ZXN0KQorLSNkZWZpbmUgR0VUX1RIRVJNQUwJCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAgNCwgc3RydWN0IHRoZXJtX2RldikKKy0jZGVmaW5lIExFRF9PTgkJCV9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAgNSwgc3RydWN0IGgzNjAwX3RzX2xlZCkKKy0jZGVmaW5lIEdFVF9CQVRURVJZX1NUQVRVUwlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDYsIHN0cnVjdCBoMzYwMF9iYXR0ZXJ5KQorLSNkZWZpbmUgRkxJVEVfT04JCV9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAgNywgc3RydWN0IGgzNjAwX3RzX2ZsaXRlKQorLSNkZWZpbmUgUkVBRF9TUEkJCV9JT1dSKElPQ19IMzYwMF9UU19NQUdJQywgOCwgc3RydWN0IGgzNjAwX3NwaV9yZWFkX3JlcXVlc3QpCistI2RlZmluZSBXUklURV9TUEkJCV9JT1dSKElPQ19IMzYwMF9UU19NQUdJQywgOSwgc3RydWN0IGgzNjAwX3NwaV93cml0ZV9yZXF1ZXN0KQorLSNkZWZpbmUgVFNfR0VUX0NBTAkJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDEwLCBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24pCistI2RlZmluZSBUU19TRVRfQ0FMCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgMTEsIHN0cnVjdCBoMzYwMF90c19jYWxpYnJhdGlvbikKKy0KKy0vKiBOZXcgSU9DVEwgaW50ZXJmYWNlcyAtIGRlZmluZWQgdG8gYmUgbW9yZSB1c2VyIGZyaWVuZGx5ICovCistI2RlZmluZSBUU19HRVRfQkFDS0xJR0hUICAgICAgICBfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgMjAsIHN0cnVjdCBoMzYwMF90c19iYWNrbGlnaHQpCistI2RlZmluZSBUU19TRVRfQkFDS0xJR0hUICAgICAgICBfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgMjAsIHN0cnVjdCBoMzYwMF90c19iYWNrbGlnaHQpCistI2RlZmluZSBUU19HRVRfQ09OVFJBU1QgICAgICAgICBfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgMjEsIHN0cnVjdCBoMzYwMF90c19jb250cmFzdCkKKy0jZGVmaW5lIFRTX1NFVF9DT05UUkFTVCAgICAgICAgIF9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAyMSwgc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0KQorLQorLSNlbmRpZgorSW5kZXg6IHh0c2NhbC0wLjYuMy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL01ha2VmaWxlLmFtCTIwMDQtMDYtMDIgMjM6MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgeHRzY2FsLTAuNi4zL01ha2VmaWxlLmFtCTIwMDctMDctMDIgMTI6NTE6MDIuMDAwMDAwMDAwICswMTAwCitAQCAtMSwxMSArMSw4IEBACistbGliZXhlY19QUk9HUkFNUyA9IHh0c2NhbC5iaW4KKy1iaW5fU0NSSVBUUyA9IHh0c2NhbAorK2Jpbl9QUk9HUkFNUyA9IHh0c2NhbAorIAorLXh0c2NhbF9iaW5fU09VUkNFUyA9IG1haW4uYyBjYWxpYnJhdGUuYyBjYWxpYnJhdGUuaCBoMzYwMF90cy5oCisreHRzY2FsX1NPVVJDRVMgPSBtYWluLmMgY2FsaWJyYXRlLmMgY2FsaWJyYXRlLmgKKyAKKy14dHNjYWxfYmluX0xEQUREID0gQFhUU0NBTF9MSUJTQAorK3h0c2NhbF9MREFERCA9IEBYVFNDQUxfTElCU0AKKyAKKyBJTkNMVURFUyA9IEBYVFNDQUxfQ0ZMQUdTQCAtRE5SX1BPSU5UUz01CisgCistaW5jbHVkZSBncGUtZGlzdC5hbQorLQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0NTMzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorYWZ0ZXIgZ2NjIGxpbmtpbmcgaGFzIGNoYW5nZWQsIGFsbCB0aGUgbGlicmFyaWVzIG11c3QgYmUgZXhwbGljaXRlbHkgc3BlY2lmaWVkIAorVGhpcyBwYXRjaCBhdm9pZHMgdGhpcyBsaW5raW5nIGVycm9yOgorCit8IGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4ICAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbyB4dHNjYWwgbWFpbi5vIGNhbGlicmF0ZS5vIC1sWDExIC1sWGZ0IC1sWGV4dCAtbFhjYWxpYnJhdGVeTQorfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWJleGVjL2k1ODYtcG9reS1saW51eC9nY2MvaTU4Ni1wb2t5LWxpbnV4LzQuNS4xL2xkOiBePzogaW52YWxpZCBEU08gZm9yIHN5bWJvbCBgWFJlbmRlckNoYW5nZVBpY3R1cmUnIGRlZmluaXRpb25eTQorfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4L3Vzci9saWIvbGliWHJlbmRlci5zby4xOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBCYWQgdmFsdWVeTQorfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c15NCit8IG1ha2U6ICoqKiBbeHRzY2FsXSBFcnJvciAxCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDExLzAxLzExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMKK0BAIC05LDcgKzksNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQorICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyBBQ19QUk9HX0NDCisgCistUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlIHhyZW5kZXIpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZV0pCisgQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbF8wLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsXzAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmRkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbF8wLjYuMy5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIlRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIHV0aWxpdHkiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIHRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIHV0aWxpdHkiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9ncGUubGludXh0b2dvLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MubGludXh0b2dvLm9yZyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0xMDttZDU9ODcyMWJjYjA4YWU5ZjI0ZTVmZTRjODI5NDE4NzNjODciCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGZ0IGxpYnhjYWxpYnJhdGUiCisKK1BSID0gInIxMyIKKworU1JDX1VSSSA9ICIke0dQRV9NSVJST1J9L3h0c2NhbC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2NoYW5nZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhbnVwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMzB4VHNfQ2FsaWJyYXRlLnNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWJjYWI4MGI0NzRkNTQ1NDQ3N2QxY2ExNjZhNjhjMzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjdiOWRjMjIwM2RlOWIxNzA2Y2EzOWZhNmNhODBlY2FiODgwNzkwOWVjOTAxYzRhMzQ1YjhlNDExNzg4MDBhMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzMweFRzX0NhbGlicmF0ZS5zaCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjNjOWUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h2aWRlby10ZXN0cy94dmlkZW8tdGVzdHNfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIFhWaWRlbyB0ZXN0IGFwcGxpY2F0aW9uIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdGVzdC14dmlkZW8uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT02YWUzYjRjM2MyZmY5ZTUxZGJiYzM1YmIyMzdhZmEwMCIKK0RFUEVORFMgPSAibGlieHYiCisKK1NSQ1JFViA9ICJmOGYzMjBkMDI1NGMwOWNlNDgzZmMxZDhlZTk5ZWNmNWJjOTQwOTY1IgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Rlc3QteHZpZGVvIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieHYgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzdkMTYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZS9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsOTMgQEAKK2Jsa3RyYWNlOiBvYmV5IExERkxBR1MKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKK3RoZSBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSBtZXRhLW1lbnRvciBsYXllciBvbiB5b2N0b3Byb2plY3QgZ2l0IHNlcnZlcgoraHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS1tZW50b3IgYXMgb2YgY29tbWl0IGlkCithZWQ0NjM0MTRlMmUyYmY4Y2E0NGJhNTRlZTU5NzNlN2VkNTk5ZTU3CisKK1NpZ25lZC1vZmYtYnk6IEZhaGFkIFVzbWFuIDxmYWhhZF91c21hbkBtZW50b3IuY29tPgorLS0tCisgTWFrZWZpbGUgICAgICAgICAgfCAgIDExICsrKysrKy0tLS0tCisgYnRyZXBsYXkvTWFrZWZpbGUgfCAgICAzICsrLQorIGJ0dC9NYWtlZmlsZSAgICAgIHwgICAgMyArKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKKy0tLSBnaXQub3JpZy9NYWtlZmlsZQorKysrIGdpdC9NYWtlZmlsZQorQEAgLTEsNSArMSw2IEBACisgQ0MJPSBnY2MKKyBDRkxBR1MJPSAtV2FsbCAtTzIgLWcgLVcKKytMREZMQUdTID0KKyBBTExfQ0ZMQUdTID0gJChDRkxBR1MpIC1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0CisgUFJPR1MJPSBibGtwYXJzZSBibGt0cmFjZSB2ZXJpZnlfYmxrcGFyc2UgYmxrcmF3dmVyaWZ5IGJsa2lvbW9uCisgTElCUwk9IC1scHRocmVhZAorQEAgLTIzLDE5ICsyNCwxOSBAQCBidHJlcGxheS9idHJlcGxheToKKyAJJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpICQ8CisgCisgYmxrcGFyc2U6IGJsa3BhcnNlLm8gYmxrcGFyc2VfZm10Lm8gcmJ0cmVlLm8gYWN0X21hc2subworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTERGTEFHUykKKyAKKyBibGt0cmFjZTogYmxrdHJhY2UubyBhY3RfbWFzay5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpICQoTERGTEFHUykKKyAKKyB2ZXJpZnlfYmxrcGFyc2U6IHZlcmlmeV9ibGtwYXJzZS5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJsa3Jhd3ZlcmlmeTogYmxrcmF3dmVyaWZ5Lm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pCisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYmxraW9tb246IGJsa2lvbW9uLm8gcmJ0cmVlLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgLWxydAorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAtbHJ0ICQoTERGTEFHUykKKyAKKyAkKFBST0dTKTogfCBkZXBlbmQKKyAKKy0tLSBnaXQub3JpZy9idHJlcGxheS9NYWtlZmlsZQorKysrIGdpdC9idHJlcGxheS9NYWtlZmlsZQorQEAgLTcsNiArNyw3IEBACisgCisgQ0MJPSBnY2MKKyBDRkxBR1MJPSAtV2FsbCAtVyAtTzIgLWcKKytMREZMQUdTID0KKyBJTkNTCT0gLUkuIC1JLi4gLUkuLi9idHQKKyBPQ0ZMQUdTCT0gLVVDT1VOVF9JT1MgLVVERUJVRyAtRE5ERUJVRworIFhDRkxBR1MJPSAtRF9HTlVfU09VUkNFIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAorQEAgLTMyLDEwICszMywxMCBAQCBjbGVhbjogZG9jc2NsZWFuCisJJChDQykgJChDRkxBR1MpIC1jIC1vICQqLm8gJDwKKworIGJ0cmVjb3JkOiBidHJlY29yZC5vCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTERGTEFHUykKKyAKKyBidHJlcGxheTogYnRyZXBsYXkubworLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgJChMREZMQUdTKQorIAorIGRlcGVuZDoKKyAJQCQoQ0MpIC1NTSAkKENGTEFHUykgKi5jIDE+IC5kZXBlbmQKKy0tLSBnaXQub3JpZy9idHQvTWFrZWZpbGUKKysrKyBnaXQvYnR0L01ha2VmaWxlCitAQCAtNyw2ICs3LDcgQEAKKyAKKyBDQwk9IGdjYworIENGTEFHUwk9IC1XYWxsIC1XIC1PMiAtZworK0xERkxBR1MgPQorIElOQ1MJPSAtSS4gLUkuLgorIFhDRkxBR1MJPSAtRF9HTlVfU09VUkNFIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAorIG92ZXJyaWRlIENGTEFHUyArPSAkKElOQ1MpICQoWENGTEFHUykKK0BAIC0zOCw3ICszOSw3IEBAIGNsZWFuOiBkb2NzY2xlYW4KKyAJJChDQykgJChDRkxBR1MpIC1jIC1vICQqLm8gJDwKKyAKKyBidHQ6ICQoT0JKUykKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpICQoTERGTEFHUykKKyAKKyBpZm5lcSAoJCh3aWxkY2FyZCAuZGVwZW5kKSwpCisgaW5jbHVkZSAuZGVwZW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMGJlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkdlbmVyYXRlcyB0cmFjZXMgb2YgSS9PIHRyYWZmaWMgb24gYmxvY2sgZGV2aWNlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworREVQRU5EUyA9ICJsaWJhaW8iCisKK1NSQ1JFViA9ICI0M2ZjODcwY2UwNGU5NjNkZWY0NWRmYzBkMWVkNGVhMjFlZjEwZDRiIgorCitQViA9ICIxLjEuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdDQz0ke0NDfScgXAorICAgICdDRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorIgorCisjIFRoZXJlIGFyZSBhIGZldyBwYXJhbGxlbCBpc3N1ZXM6CisjIDEpIC4uL3JidHJlZS5vOiBlcnJvciBhZGRpbmcgc3ltYm9sczogSW52YWxpZCBvcGVyYXRpb24KKyMgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisjIE1ha2VmaWxlOjQyOiByZWNpcGUgZm9yIHRhcmdldCAnYnR0JyBmYWlsZWQKKyMgMikgZ2l0L2Jsa2lvbW9uLmM6MjE2OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGByYl9pbnNlcnRfY29sb3InCisjIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworIyBNYWtlZmlsZToyNzogcmVjaXBlIGZvciB0YXJnZXQgJ2Jsa3BhcnNlJyBmYWlsZWQKKyMgMykgbGQ6IHJidHJlZS5vOiBpbnZhbGlkIHN0cmluZyBvZmZzZXQgMTI4ID49IDEyNSBmb3Igc2VjdGlvbiBgLnN0cnRhYicKKyMgNCkgYnRyZXBsYXkubzogZmlsZSBub3QgcmVjb2duaXplZDogRmlsZSB0cnVuY2F0ZWQKKyMgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisjIGJ0cmVwbGF5L2J0cmVwbGF5LmM6NDc6MTg6IGZhdGFsIGVycm9yOiBsaXN0Lmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK1BBUkFMTEVMX01BS0UgPSAiIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgQVJDSD0iJHtBUkNIfSIgcHJlZml4PSR7cHJlZml4fSBcCisJCW1hbmRpcj0ke21hbmRpcn0gREVTVERJUj0ke0R9IGluc3RhbGwKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1saW51eF8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzODQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1saW51eF8xLjcuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBjcnlwdG9kZXZfJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiQSAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIGhlYWRlciBmaWxlIgorCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworIyBKdXN0IGluc3RhbGwgY3J5cHRvZGV2Lmggd2hpY2ggaXMgdGhlIG9ubHkgaGVhZGVyIGZpbGUgbmVlZGVkIHRvIGJlIGV4cG9ydGVkCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLUQgJHtTfS9jcnlwdG8vY3J5cHRvZGV2LmggJHtEfSR7aW5jbHVkZWRpcn0vY3J5cHRvL2NyeXB0b2Rldi5oCit9CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbW9kdWxlXzEuNy5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1tb2R1bGVfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDUyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbW9kdWxlXzEuNy5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGNyeXB0b2Rldl8ke1BWfS5pbmMKKworU1VNTUFSWSA9ICJBIC9kZXYvY3J5cHRvIGRldmljZSBkcml2ZXIga2VybmVsIG1vZHVsZSIKKworaW5oZXJpdCBtb2R1bGUKKworIyBIZWFkZXIgZmlsZSBwcm92aWRlZCBieSBhIHNlcGFyYXRlIHBhY2thZ2UKK0RFUEVORFMgKz0gImNyeXB0b2Rldi1saW51eCIKKworU1JDX1VSSSArPSAiIFwKK2ZpbGU6Ly8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2ggXAorZmlsZTovLzAwMDEtaW9jdGwuYy1GaXgtYnVpbGQtb24tMy4xOS5wYXRjaCBcCisiCisKK0VYVFJBX09FTUFLRT0nS0VSTkVMX0RJUj0iJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IiBQUkVGSVg9IiR7RH0iJworCitSQ09ORkxJQ1RTXyR7UE59ID0gIm9jZi1saW51eCIKK1JSRVBMQUNFU18ke1BOfSA9ICJvY2YtbGludXgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LXRlc3RzXzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM0MWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LXRlc3RzXzEuNy5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGNyeXB0b2Rldl8ke1BWfS5pbmMKKworU1VNTUFSWSA9ICJBIHRlc3Qgc3VpdGUgZm9yIC9kZXYvY3J5cHRvIGRldmljZSBkcml2ZXIiCisKK0RFUEVORFMgKz0gIm9wZW5zc2wiCisKK1NSQ19VUkkgKz0gIiBcCitmaWxlOi8vMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoIFwKK2ZpbGU6Ly8wMDAyLUZpeC10ZXN0cy1NYWtlZmlsZS11c2FnZS1vZi1MRExJQlMtdnMuLUxERkxBR1MucGF0Y2ggXAorIgorCitFWFRSQV9PRU1BS0U9J0tFUk5FTF9ESVI9IiR7U1RBR0lOR19LRVJORUxfRElSfSIgUFJFRklYPSIke0R9IicKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIHRlc3Rwcm9ncworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbF90ZXN0cworfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmluZGlyfS90ZXN0c19jcnlwdG9kZXYvLmRlYnVnIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3Rlc3RzX2NyeXB0b2Rldi8qIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2XzEuNy5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXZfMS43LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2E2OTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2XzEuNy5pbmMKQEAgLTAsMCArMSwxMyBAQAorSE9NRVBBR0UgPSAiaHR0cDovL2NyeXB0b2Rldi1saW51eC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmduYS5vcmcvY3J5cHRvZGV2LWxpbnV4L2NyeXB0b2Rldi1saW51eC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwYjYzYjM0ODFjZjJjOTAzODZiMzVmMDU3NDgxZDM2YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MTg4MDUzM2I1M2RlNGQ3YjNmMDU0ZTIzMGY1NzY5ODhkYWZiOGVlZDdiZWY1ZWJjZjY0MjJiYjJlM2EzYjI1IgorCitTID0gIiR7V09SS0RJUn0vY3J5cHRvZGV2LWxpbnV4LSR7UFZ9IgorCitDTEVBTkJST0tFTiA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDI5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLUFkZC10aGUtY29tcGlsZS1hbmQtaW5zdGFsbC1ydWxlcy1mb3ItY3J5cHRvZGV2LXRlc3QucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbSAxOTgwYThmNDc3OWE5NTVlNzMyODVlN2EwZDg2NTQ5YjY5YmVhNWM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXUgWm9uZ2NodW4gPGI0MDUyN0BmcmVlc2NhbGUuY29tPgorRGF0ZTogU3VuLCAyOCBBcHIgMjAxMyAxNDozOToyMiArMDgwMAorU3ViamVjdDogW1BBVENIXSBBZGQgdGhlIGNvbXBpbGUgYW5kIGluc3RhbGwgcnVsZXMgZm9yIGNyeXB0b2RldiB0ZXN0cyBmb2xkZXIKKworVGhpcyBpcyByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBjcnlwdG9kZXYgdGVzdHMgZm9sZGVyIHRvIHJvb3RmcworCitTaWduZWQtb2ZmLWJ5OiBZdSBab25nY2h1biA8YjQwNTI3QGZyZWVzY2FsZS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBNYWtlZmlsZSAgICAgICB8ICAgIDYgKysrKysrCisgdGVzdHMvTWFrZWZpbGUgfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggMzFjNGIzZi4uMmVjZjJhOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTM0LDYgKzM0LDkgQEAgbW9kdWxlc19pbnN0YWxsOgorIAlAZWNobyAiSW5zdGFsbGluZyBjcnlwdG9kZXYuaCBpbiAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvIC4uLiIKKyAJQGluc3RhbGwgLUQgY3J5cHRvL2NyeXB0b2Rldi5oICQoUFJFRklYKS91c3IvaW5jbHVkZS9jcnlwdG8vY3J5cHRvZGV2LmgKKyAKKytpbnN0YWxsX3Rlc3RzOgorKwltYWtlIC1DIHRlc3RzIGluc3RhbGwgREVTVERJUj0kKFBSRUZJWCkKKysKKyBjbGVhbjoKKyAJbWFrZSAtQyAkKEtFUk5FTF9ESVIpIFNVQkRJUlM9YHB3ZGAgY2xlYW4KKyAJcm0gLWYgJChob3N0cHJvZ3MpICp+CitAQCAtNDIsNiArNDUsOSBAQCBjbGVhbjoKKyBjaGVjazoKKyAJQ0ZMQUdTPSQoQ1JZUFRPREVWX0NGTEFHUykgS0VSTkVMX0RJUj0kKEtFUk5FTF9ESVIpIG1ha2UgLUMgdGVzdHMgY2hlY2sKKyAKKyt0ZXN0cHJvZ3M6CisrCUtFUk5FTF9ESVI9JChLRVJORUxfRElSKSBtYWtlIC1DIHRlc3RzIHRlc3Rwcm9ncworKworIENQT1BUUyA9CisgaWZuZXEgKCR7U0hPV19UWVBFU30sKQorIENQT1BUUyArPSAtLXNob3ctdHlwZXMKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZSBiL3Rlc3RzL01ha2VmaWxlCitpbmRleCBjOWYwNGU4Li5jZDIwMmFmIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUKKysrKyBiL3Rlc3RzL01ha2VmaWxlCitAQCAtMTksNiArMTksMTIgQEAgZXhhbXBsZS1hc3luYy1obWFjLW9ianMgOj0gYXN5bmNfaG1hYy5vCisgZXhhbXBsZS1hc3luYy1zcGVlZC1vYmpzIDo9IGFzeW5jX3NwZWVkLm8KKyBleGFtcGxlLWhhc2hjcnlwdC1zcGVlZC1vYmpzIDo9IGhhc2hjcnlwdF9zcGVlZC5jCisgCisraW5zdGFsbDoKKysJaW5zdGFsbCAtZCAgJChERVNURElSKS91c3IvYmluL3Rlc3RzX2NyeXB0b2RldgorKwlmb3IgYmluIGluICQoaG9zdHByb2dzKTsgZG8gXAorKwkJaW5zdGFsbCAtbSA3NTUgJCR7YmlufSAkKERFU1RESVIpL3Vzci9iaW4vdGVzdHNfY3J5cHRvZGV2LzsgXAorKwlkb25lCisrCisgY2hlY2s6ICQoaG9zdHByb2dzKQorIAkuL2NpcGhlcgorIAkuL2htYWMKK0BAIC0yOCw2ICszNCw4IEBAIGNoZWNrOiAkKGhvc3Rwcm9ncykKKyAJLi9jaXBoZXItZ2NtCisgCS4vY2lwaGVyLWFlYWQKKyAKKyt0ZXN0cHJvZ3M6ICQoaG9zdHByb2dzKQorKworIGNsZWFuOgorIAlybSAtZiAqLm8gKn4gJChob3N0cHJvZ3MpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4MGZjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDhhODg0ZjU1YmQxNTI3YmFhODJmYWI2OGMxODZiYTU0NjI3Mzg2MGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorRGF0ZTogU3VuLCA2IEFwciAyMDE0IDE5OjUxOjM5IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgaW5zdGFsbGluZyBoZWFkZXIgZmlsZSBwcm92aWRlZCBieSBhbm90aGVyIHBhY2thZ2UKKworU2lnbmVkLW9mZi1ieTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsgT0Ugc3BlY2lmaWMgXQorLS0tCisgTWFrZWZpbGUgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBkNjZlZjI2Li44ZTk3YzZhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjMsOCArMjMsNiBAQCBpbnN0YWxsOiBtb2R1bGVzX2luc3RhbGwKKyAKKyBtb2R1bGVzX2luc3RhbGw6CisgCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIG1vZHVsZXNfaW5zdGFsbAorLQlAZWNobyAiSW5zdGFsbGluZyBjcnlwdG9kZXYuaCBpbiAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvIC4uLiIKKy0JQGluc3RhbGwgLUQgY3J5cHRvL2NyeXB0b2Rldi5oICQoUFJFRklYKS91c3IvaW5jbHVkZS9jcnlwdG8vY3J5cHRvZGV2LmgKKyAKKyBjbGVhbjoKKyAJbWFrZSAtQyAkKEtFUk5FTF9ESVIpIFNVQkRJUlM9YHB3ZGAgY2xlYW4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Yzg5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA3ZDcxMTI0OTkxMDMwZjk5OTY1ZTZlNmFhZWQ0MjExMTVmMTg1YWRiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmljYXJkbyBSaWJhbGRhIERlbGdhZG8gPHJpY2FyZG8ucmliYWxkYUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDkgRmViIDIwMTUgMTM6NTE6NTYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaW9jdGwuYzogRml4IGJ1aWxkIG9uIDMuMTkKKworZ2V0X3VudXNlZF9mZCgpIE1BQ1JPIGhhcyBiZWVuIHJlbW92ZWQgb24ga2VybmVsIDMuMTkuIFJlcGxhY2UgYnkgdGhlCithY3R1YWwgb3V0cHV0IG9mIHRoZSBtYWNyby4KKworU2lnbmVkLW9mZi1ieTogUmljYXJkbyBSaWJhbGRhIERlbGdhZG8gPHJpY2FyZG8ucmliYWxkYUBnbWFpbC5jb20+CistLS0KKyBpb2N0bC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaW9jdGwuYyBiL2lvY3RsLmMKK2luZGV4IGYyNmNmOTMuLmNmOGNjMTcgMTAwNjQ0CistLS0gYS9pb2N0bC5jCisrKysgYi9pb2N0bC5jCitAQCAtNTI5LDcgKzUyOSw3IEBAIHN0YXRpYyBpbnQKKyBjbG9uZWZkKHN0cnVjdCBmaWxlICpmaWxwKQorIHsKKyAJaW50IHJldDsKKy0JcmV0ID0gZ2V0X3VudXNlZF9mZCgpOworKwlyZXQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKDApOworIAlpZiAocmV0ID49IDApIHsKKyAJCQlnZXRfZmlsZShmaWxwKTsKKyAJCQlmZF9pbnN0YWxsKHJldCwgZmlscCk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWFiOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNDdmZjFlYjliYjRmODcyYzFkNzMxYjkzZDMzNGVlNTg2NWJmMzQzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+CitEYXRlOiBTdW4sIDYgQXByIDIwMTQgMjI6MTY6MzAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHRlc3RzIE1ha2VmaWxlIHVzYWdlIG9mIExETElCUyB2cy4gTERGTEFHUworCitMaWJyYXJpZXMgbXVzdCBjb21lIGFmdGVyIG9iamVjdHMsIGFzIGxpbmsgb3JkZXIgbWF0dGVycywgZXNwZWNpYWxseQord2hlbiB1c2luZyBsaW5rZXIgZmxhZ3MgbGlrZSAtV2wsLS1hcy1uZWVkZWQuCisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdGVzdHMvTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZSBiL3Rlc3RzL01ha2VmaWxlCitpbmRleCBjZDIwMmFmLi42N2MzYzgzIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUKKysrKyBiL3Rlc3RzL01ha2VmaWxlCitAQCAtMzksNSArMzksNSBAQCB0ZXN0cHJvZ3M6ICQoaG9zdHByb2dzKQorIGNsZWFuOgorIAlybSAtZiAqLm8gKn4gJChob3N0cHJvZ3MpCisgCistJHtjb21wX3Byb2dzfTogTERGTEFHUyArPSAtbHNzbCAtbGNyeXB0bworKyR7Y29tcF9wcm9nc306IExETElCUyArPSAtbHNzbCAtbGNyeXB0bworICR7Y29tcF9wcm9nc306ICU6ICUubyBvcGVuc3NsX3dyYXBwZXIubworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQwOWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjLmluYwpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkRldmljZSBUcmVlIENvbXBpbGVyIgorREVTQ1JJUFRJT04gPSAiVGhlIERldmljZSBUcmVlIENvbXBpbGVyIGlzIGEgdG9vbCB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIE9wZW4tRmlybXdhcmUtbGlrZSBkZXZpY2UgdHJlZSB1c2VkIGJ5IFBvd2VyUEMga2VybmVscy4iCitTRUNUSU9OID0gImJvb3Rsb2FkZXIiCitMSUNFTlNFID0gIkdQTHYyIHwgQlNEIgorREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9kdGMvZHRjLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlX2luc3RhbGwucGF0Y2ggXAorCSAgIgorCitFWFRSQV9PRU1BS0U9J1BSRUZJWD0iJHtwcmVmaXh9IiBMSUJESVI9IiR7bGliZGlyfSIgREVTVERJUj0iJHtEfSInCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tbWlzYyIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtiaW5kaXJ9L2NvbnZlcnQtZHRzdjAgJHtiaW5kaXJ9L2Z0ZHVtcCAke2JpbmRpcn0vZHRkaWZmIgorCitSREVQRU5EU18ke1BOfS1taXNjICs9ICJiYXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy9tYWtlX2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyMDYxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy9tYWtlX2luc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2l0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUJMjAxMS0xMS0wMiAxNDo1MjoxNy4yNDMxMDQ3NzkgLTA3MDAKKysrKyBnaXQvTWFrZWZpbGUJMjAxMS0xMS0wMiAxNTowNjowMS41NTUxMDQ5ODIgLTA3MDAKK0BAIC0xNjEsOCArMTYxLDggQEAKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChCSU5ESVIpCisgCSQoSU5TVEFMTCkgJChCSU4pICQoU0NSSVBUUykgJChERVNURElSKSQoQklORElSKQorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKExJQkRJUikKKy0JJChJTlNUQUxMKSAkKExJQkZEVF9saWIpICQoREVTVERJUikkKExJQkRJUikKKy0JbG4gLXNmICQobm90ZGlyICQoTElCRkRUX2xpYikpICQoREVTVERJUikkKExJQkRJUikvJChMSUJGRFRfc29uYW1lKQorKwkkKElOU1RBTEwpICQoTElCRkRUX2xpYikgJChERVNURElSKSQoTElCRElSKS8kKExJQkZEVF9zb25hbWUpCisrCWxuIC1zZiAkKExJQkZEVF9zb25hbWUpICQoREVTVERJUikkKExJQkRJUikvJChub3RkaXIgJChMSUJGRFRfbGliKSkKKyAJbG4gLXNmICQoTElCRkRUX3NvbmFtZSkgJChERVNURElSKSQoTElCRElSKS9saWJmZHQuJChTSEFSRURMSUJfRVhUKQorIAkkKElOU1RBTEwpIC1tIDY0NCAkKExJQkZEVF9hcmNoaXZlKSAkKERFU1RESVIpJChMSUJESVIpCisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoSU5DTFVERURJUikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDYxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGNfZ2l0LmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZHRjLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJICAgIGZpbGU6Ly9saWJmZHQvbGliZmR0Lmg7YmVnaW5saW5lPTM7ZW5kbGluZT01MjttZDU9ZmIzNjA5NjMxNTFmOGVjMmQ2YzA2YjA1NWJjYmI2OGMiCisKK1NSQ1JFViA9ICIzMDJmY2E5ZjRjMjgzZTE5OTRjZjBhNWE5Y2UxY2Y0M2NhMTVlNmQyIgorUFYgPSAiMS40LjErZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTMwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIFlvY3RvIFByb2plY3Qgc3R5bGUgYnJhbmNoZWQga2VybmVscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9naXQvdG9vbHMva2dpdDtiZWdpbmxpbmU9NTtlbmRsaW5lPTk7bWQ1PWQ4ZDFkNzI5YTcwY2Q1ZjUyOTcyZjg4ODRiODA3NDNkIgorCitERVBFTkRTID0gImdpdC1uYXRpdmUiCisKK1NSQ1JFViA9ICJiZDE0NGQ0M2NhNWIxZWFmOWU3MjdiY2VkNGNlM2I2MWI2NDIyOTdjIgorUFIgPSAicjEyIgorUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC10b29scy5naXQiCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7IAorCToKK30KKworZG9faW5zdGFsbCgpIHsKKwljZCAke1N9L2dpdAorCW1ha2UgREVTVERJUj0ke0R9JHtiaW5kaXJ9IGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5N2EyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiS2V4ZWMgZmFzdCByZWJvb3QgdG9vbHMiCitERVNDUklQVElPTiA9ICJLZXhlYyBpcyBhIGZhc3QgcmVib290IGZlYXR1cmUgdGhhdCBsZXRzIHlvdSByZWJvb3QgdG8gYSBuZXcgTGludXgga2VybmVsIgorQVVUSE9SID0gIkVyaWMgQmllZGVybWFuIgorSE9NRVBBR0UgPSAiaHR0cDovL2tlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9rZXhlYy8iCitTRUNUSU9OID0gImtlcm5lbC91c2VybGFuZCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYTViZWQyZjYwZDM1NzYxOGNhMTYxYWQ1MzlmN2MwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9rZXhlYy9rZXhlYy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWFmMTBmNmFlNGE4NzE1OTY1ZTY0OGFhNjg3YWQzZTA5IgorREVQRU5EUyA9ICJ6bGliIHh6IgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMva2VybmVsL2tleGVjL2tleGVjLXRvb2xzLSR7UFZ9LnRhci5neiIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0Lip8aS44Ni4qfGFybS4qfGFhcmNoNjQuKnxwb3dlcnBjLip8bWlwcy4qKS0obGludXh8ZnJlZWJzZC4qKScKKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiYXJjaCIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICMgUmVtb3ZlIHRoZSAnKi5kJyBmaWxlIHRvIG1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LCisgICAgZm9yIGRlcCBpbiBgZmluZCAke0J9IC10eXBlIGYgLW5hbWUgJyouZCdgOyBkbworICAgICAgICBkZXBfbm9fZD0iYGVjaG8gJGRlcCB8IHNlZCAncyMuZCQjIydgIgorICAgICAgICAjIFJlbW92ZSBmaWxlLmQgd2hlbiB0aGVyZSBpcyBhIGZpbGUubworICAgICAgICBpZiBbIC1mICIkZGVwX25vX2QubyIgXTsgdGhlbgorICAgICAgICAgICAgcm0gLWYgJGRlcAorICAgICAgICBmaQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQwNzdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gYTExMzViMzE3MDk2M2JhOTU2ZjIzNjRjMTI4Mzg2NGMzNTU0MTI5NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDc6NTk6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHVyZ2F0b3J5OiBQYXNzIC1yIGRpcmVjdGx5IHRvIGxpbmtlcgorCitUaGlzIGhlbHBzIGNvbXBpbGluZyB3aXRoIGNsYW5nIHNpbmNlIC1yIGlzIG5vdCBhIGtub3duIG9wdGlvbiBmb3IgY2xhbmcKK3doZXJlIGFzIGdjYyBrbm93cyBob3cgdG8gZGVhbCB3aXRoIGl0IGFuZCBwYXNzZXMgaXQgZG93biB0byBsaW5rZXIKK3VuZmlsdGVyZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBwdXJnYXRvcnkvTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9wdXJnYXRvcnkvTWFrZWZpbGUgYi9wdXJnYXRvcnkvTWFrZWZpbGUKK2luZGV4IDJiNWMwNjEuLmIyNTEzNTMgMTAwNjQ0CistLS0gYS9wdXJnYXRvcnkvTWFrZWZpbGUKKysrKyBiL3B1cmdhdG9yeS9NYWtlZmlsZQorQEAgLTYxLDcgKzYxLDcgQEAgJChQVVJHQVRPUlkpOiBDUFBGTEFHUz0kKCQoQVJDSClfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUykgXAorIAkJCS1JJChzaGVsbCAkKENDKSAtcHJpbnQtZmlsZS1uYW1lPWluY2x1ZGUpCisgJChQVVJHQVRPUlkpOiBMREZMQUdTPSQoJChBUkNIKV9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTKVwKKyAJCQktV2wsLS1uby11bmRlZmluZWQgLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgXAorLQkJCS1ub2RlZmF1bHRsaWJzIC1lIHB1cmdhdG9yeV9zdGFydCAtciBcCisrCQkJLW5vZGVmYXVsdGxpYnMgLWUgcHVyZ2F0b3J5X3N0YXJ0IC1XbCwtciBcCisgCQkJLVdsLC1NYXA9JChQVVJHQVRPUllfTUFQKQorIAorICQoUFVSR0FUT1JZKTogJChQVVJHQVRPUllfT0JKUykKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5N2Q5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBiMTliNjhlYWI1NjdhYTUzNGNmOGRlYzc5ZmUxOGUzZGMwZTE0MDQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUXVhbnlhbmcgV2FuZyA8cXVhbnlhbmcud2FuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNiBKdW4gMjAxNSAxMjo1OTo1NyArMDgwMAorU3ViamVjdDogW1BBVENIXSBwb3dlcnBjOiBjaGFuZ2UgdGhlIG1lbW9yeSBzaXplIGxpbWl0CisKK1doZW4gcnVuICJrZXhlYyIgaW4gcG93ZXJwYyBib2FyZCwgdGhlIGtleGVjIGhhcyBhIGxpbWl0IHRoYXQKK3RoZSBrZXJuZWwgdGV4dCBhbmQgYnNzIHNpemUgbXVzdCBiZSBsZXNzIHRoYW4gMjRNLiBCdXQgbm93Citzb21lIGtlcm5lbCBzaXplIGV4Y2VlZCB0aGUgbGltaXQuIFNvIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBsaW1pdCwKK2Vsc2Ugd2lsbCBnZXQgdGhlIGVycm9yIGxvZyBhcyBiZWxvdzoKKworbXlfbG9hZDo2Njk6IGRvCitDb3VsZCBub3QgZmluZCBhIGZyZWUgYXJlYSBvZiBtZW1vcnkgb2YgMHgxMjQwMCBieXRlcy4uLgorQ291bGQgbm90IGZpbmQgYSBmcmVlIGFyZWEgb2YgbWVtb3J5IG9mIDB4MTMwMDAgYnl0ZXMuLi4KK2xvY2F0ZV9ob2xlIGZhaWxlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUXVhbnlhbmcgV2FuZyA8cXVhbnlhbmcud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisga2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9hcmNoL3BwYy9rZXhlYy1wcGMuaAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9rZXhlYy1wcGMuaAorQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBkb2xfcHBjX3VzYWdlKHZvaWQpOworICAqIER1cmluZyBpbml0YWwgc2V0dXAgdGhlIGtlcm5lbCBkb2VzIG5vdCBtYXAgdGhlIHdob2xlIG1lbW9yeSBidXQgYSBwYXJ0IG9mCisgICogaXQuIE9uIEJvb2stRSB0aGF0IGlzIDY0TWlCLCA2MDEgMjRNaUIgb3IgMjU2TWlCIChpZiBwb3NzaWJsZSkuCisgICovCistI2RlZmluZSBLRVJORUxfQUNDRVNTX1RPUCAoMjQgKiAxMDI0ICogMTAyNCkKKysjZGVmaW5lIEtFUk5FTF9BQ0NFU1NfVE9QICgzNiAqIDEwMjQgKiAxMDI0KQorIAorIC8qIGJvb3QgYmxvY2sgdmVyc2lvbiAxNyBhcyBkZWZpbmVkIGJ5IHRoZSBsaW51eCBrZXJuZWwgKi8KKyBzdHJ1Y3QgYm9vdGJsb2NrIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNmNTgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy1hYXJjaDY0LnBhdGNoCkBAIC0wLDAgKzEsODAxIEBACitGcm9tOiBHZW9mZiBMZXZhbmQgPGdlb2ZmQGluZnJhZGVhZC5vcmc+CitEYXRlOiBNb24sIDE1IEp1bCAyMDEzIDIzOjMyOjM2ICswMDAwICgtMDcwMCkKK1N1YmplY3Q6IEFkZCBhcm02NCBzdXBwb3J0CitYLUdpdC1Vcmw6IGh0dHBzOi8vZ2l0LmxpbmFyby5vcmcvZ2l0d2ViP3A9cGVvcGxlJTJGZ2VvZmYlMkZrZXhlYy10b29scy5naXQ7YT1jb21taXRkaWZmX3BsYWluO2g9ZmJmNWFjNmMyYzcwZWMwZjZkYTJiOWZmNTYzZTU3Mzk5OTc1MmMwMQorCitBZGQgYXJtNjQgc3VwcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBHZW9mZiBMZXZhbmQgPGdlb2ZmQGluZnJhZGVhZC5vcmc+CisKK0dldCBwYXRjaCBmcm9tOgoraHR0cHM6Ly9mZWRvcmFwZW9wbGUub3JnL35ocncvYWFyY2g2NC9mb3ItZmVkb3JhL2tleGVjLWFhcmNoNjQucGF0Y2gKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisKKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgCisga2V4ZWMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKKyBrZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDEzICsKKyBrZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jICAgICAgfCAgMzA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisga2V4ZWMvYXJjaC9hcm02NC9pbmNsdWRlL2FyY2gvb3B0aW9ucy5oIHwgICAyNiArKworIGtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuYyAgICAgICAgICB8ICAxNzcgKysrKysrKysrKysrKysrKysrCisga2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5oICAgICAgICAgIHwgICAyMCArKworIGtleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMgICAgICB8ICAxMTQgKysrKysrKysrKysKKyBrZXhlYy9rZXhlYy1zeXNjYWxsLmggICAgICAgICAgICAgICAgICAgfCAgICA5IAorIGtleGVjL2tleGVjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgCisgcHVyZ2F0b3J5L2FyY2gvYXJtNjQvTWFrZWZpbGUgICAgICAgICAgIHwgICAgNyAKKyAxMSBmaWxlcyBjaGFuZ2VkLCA2NzUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9jb25maWd1cmUuYWMKKysrKyBrZXhlYy10b29scy0yLjAuMTAvY29uZmlndXJlLmFjCitAQCAtMzYsNiArMzYsOSBAQCBjYXNlICR0YXJnZXRfY3B1IGluCisgCQlBUkNIPSJwcGM2NCIKKyAJCVNVQkFSQ0g9IkxFIgorIAkJOzsKKysJYWFyY2g2NCogKQorKwkJQVJDSD0iYXJtNjQiCisrCQk7OworIAlhcm0qICkKKyAJCUFSQ0g9ImFybSIKKyAJCTs7CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvTWFrZWZpbGUKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvTWFrZWZpbGUKK0BAIC03MSw2ICs3MSw3IEBAIEtFWEVDX1NSQ1MJCQkrPSAkKCQoQVJDSClfRlMyRFQpCisgCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9hbHBoYS9NYWtlZmlsZQorIGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvYXJtL01ha2VmaWxlCisraW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZQorIGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvaTM4Ni9NYWtlZmlsZQorIGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvaWE2NC9NYWtlZmlsZQorIGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvbTY4ay9NYWtlZmlsZQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUKK0BAIC0wLDAgKzEsMTMgQEAKKysKKythcm02NF9LRVhFQ19TUkNTICs9IFwKKysJa2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jIFwKKysJa2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1lbGYtYXJtNjQuYyBcCisrCWtleGVjL2FyY2gvYXJtNjQvY3Jhc2hkdW1wLWFybTY0LmMKKysKKythcm02NF9BUkNIX1JFVVNFX0lOSVRSRCA9CisrYXJtNjRfQUREX1NFR01FTlQgPQorK2FybTY0X1ZJUlRfVE9fUEhZUyA9CisrCisrZGlzdCArPSAkKGFybTY0X0tFWEVDX1NSQ1MpIFwKKysJa2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZSBcCisrCWtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaAorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvY3Jhc2hkdW1wLWFybTY0LmMKK0BAIC0wLDAgKzEsMzA1IEBACisrLyoKKysgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAodmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlKS4KKysgKi8KKysKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMuaCIKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMtZWxmLmgiCisrI2luY2x1ZGUgIi4uLy4uL2NyYXNoZHVtcC5oIgorKworK2ludCBpc19jcmFzaGtlcm5lbF9tZW1fcmVzZXJ2ZWQodm9pZCkKKyt7CisrCXJldHVybiAwOworK30KKysKKysjaWYgMAorKy8qCisrICogVXNlZCB0byBzYXZlIHZhcmlvdXMgbWVtb3J5IHJhbmdlcy9yZWdpb25zIG5lZWRlZCBmb3IgdGhlIGNhcHR1cmVkCisrICoga2VybmVsIHRvIGJvb3QuIChsaW1lIG1lbW1hcD0gb3B0aW9uIGluIG90aGVyIGFyY2hzKQorKyAqLworK3N0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlIGNyYXNoX21lbW9yeV9yYW5nZXNbQ1JBU0hfTUFYX01FTU9SWV9SQU5HRVNdOworK3N0cnVjdCBtZW1vcnlfcmFuZ2VzIHVzYWJsZW1lbV9yZ25zID0geworKyAgICAuc2l6ZSA9IDAsCisrICAgIC5yYW5nZXMgPSBjcmFzaF9tZW1vcnlfcmFuZ2VzLAorK307CisrCisrLyogbWVtb3J5IHJhbmdlIHJlc2VydmVkIGZvciBjcmFzaGtlcm5lbCAqLworK3N0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlIGNyYXNoX3Jlc2VydmVkX21lbTsKKysKKytzdGF0aWMgc3RydWN0IGNyYXNoX2VsZl9pbmZvIGVsZl9pbmZvID0geworKwkuY2xhc3MJCT0gRUxGQ0xBU1MzMiwKKysJLmRhdGEJCT0gRUxGREFUQTJMU0IsCisrCS5tYWNoaW5lCT0gRU1fQVJNLAorKwkucGFnZV9vZmZzZXQJPSBQQUdFX09GRlNFVCwKKyt9OworKworK3Vuc2lnbmVkIGxvbmcgcGh5c19vZmZzZXQ7CisrCisrLyoqCisrICogY3Jhc2hfcmFuZ2VfY2FsbGJhY2soKSAtIGNhbGxiYWNrIGNhbGxlZCBmb3IgZWFjaCBpb21lbSByZWdpb24KKysgKiBAZGF0YTogbm90IHVzZWQKKysgKiBAbnI6IG5vdCB1c2VkCisrICogQHN0cjogbmFtZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbgorKyAqIEBiYXNlOiBzdGFydCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uCisrICogQGxlbmd0aDogc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBtZW1vcnkgcmVnaW9uIGZvdW5kIGluIC9wcm9jL2lvbWVtLiBJdAorKyAqIGxvY2F0ZXMgc3lzdGVtIFJBTSBhbmQgY3Jhc2hrZXJuZWwgcmVzZXJ2ZWQgbWVtb3J5IGFuZCBwbGFjZXMgdGhlc2UgdG8KKysgKiB2YXJpYWJsZXM6IEBjcmFzaF9tZW1vcnlfcmFuZ2VzIGFuZCBAY3Jhc2hfcmVzZXJ2ZWRfbWVtLiBOdW1iZXIgb2YgbWVtb3J5CisrICogcmVnaW9ucyBpcyBwbGFjZWQgaW4gQGNyYXNoX21lbW9yeV9ucl9yYW5nZXMuCisrICovCisrc3RhdGljIGludCBjcmFzaF9yYW5nZV9jYWxsYmFjayh2b2lkICpVTlVTRUQoZGF0YSksIGludCBVTlVTRUQobnIpLAorKwkJCQljaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYmFzZSwKKysJCQkJdW5zaWduZWQgbG9uZyBsZW5ndGgpCisreworKwlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyYW5nZTsKKysKKysJaWYgKHVzYWJsZW1lbV9yZ25zLnNpemUgPj0gQ1JBU0hfTUFYX01FTU9SWV9SQU5HRVMpCisrCQlyZXR1cm4gMTsKKysKKysJcmFuZ2UgPSB1c2FibGVtZW1fcmducy5yYW5nZXMgKyB1c2FibGVtZW1fcmducy5zaXplOworKworKwlpZiAoc3RybmNtcChzdHIsICJTeXN0ZW0gUkFNXG4iLCAxMSkgPT0gMCkgeworKwkJcmFuZ2UtPnN0YXJ0ID0gYmFzZTsKKysJCXJhbmdlLT5lbmQgPSBiYXNlICsgbGVuZ3RoIC0gMTsKKysJCXJhbmdlLT50eXBlID0gUkFOR0VfUkFNOworKwkJdXNhYmxlbWVtX3JnbnMuc2l6ZSsrOworKwl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAiQ3Jhc2gga2VybmVsXG4iLCAxMykgPT0gMCkgeworKwkJY3Jhc2hfcmVzZXJ2ZWRfbWVtLnN0YXJ0ID0gYmFzZTsKKysJCWNyYXNoX3Jlc2VydmVkX21lbS5lbmQgPSBiYXNlICsgbGVuZ3RoIC0gMTsKKysJCWNyYXNoX3Jlc2VydmVkX21lbS50eXBlID0gUkFOR0VfUkFNOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKysvKioKKysgKiBjcmFzaF9leGNsdWRlX3JhbmdlKCkgLSBleGNsdWRlcyBtZW1vcnkgcmVnaW9uIHJlc2VydmVkIGZvciBjcmFzaGtlcm5lbAorKyAqCisrICogRnVuY3Rpb24gbG9jYXRlcyB3aGVyZSBjcmFzaGtlcm5lbCByZXNlcnZlZCBtZW1vcnkgaXMgYW5kIHJlbW92ZXMgdGhhdCByZWdpb24KKysgKiBmcm9tIHRoZSBhdmFpbGFibGUgbWVtb3J5IHJlZ2lvbnMuCisrICovCisrc3RhdGljIHZvaWQgY3Jhc2hfZXhjbHVkZV9yYW5nZSh2b2lkKQorK3sKKysJY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcmFuZ2UgPSAmY3Jhc2hfcmVzZXJ2ZWRfbWVtOworKwlpbnQgaTsKKysKKysJZm9yIChpID0gMDsgaSA8IHVzYWJsZW1lbV9yZ25zLnNpemU7IGkrKykgeworKwkJc3RydWN0IG1lbW9yeV9yYW5nZSAqciA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIGk7CisrCisrCQkvKgorKwkJICogV2UgYXNzdW1lIHRoYXQgY3Jhc2ggYXJlYSBpcyBmdWxseSBjb250YWluZWQgaW4KKysJCSAqIHNvbWUgbGFyZ2VyIG1lbW9yeSBhcmVhLgorKwkJICovCisrCQlpZiAoci0+c3RhcnQgPD0gcmFuZ2UtPnN0YXJ0ICYmIHItPmVuZCA+PSByYW5nZS0+ZW5kKSB7CisrCQkJc3RydWN0IG1lbW9yeV9yYW5nZSAqbmV3OworKwkJCS8qCisrCQkJICogTGV0J3Mgc3BsaXQgdGhpcyBhcmVhIGludG8gMiBzbWFsbGVyIG9uZXMgYW5kCisrCQkJICogcmVtb3ZlIGV4Y2x1ZGVkIHJhbmdlIGZyb20gYmV0d2Vlbi4gRmlyc3QgY3JlYXRlCisrCQkJICogbmV3IGVudHJ5IGZvciB0aGUgcmVtYWluaW5nIGFyZWEuCisrCQkJICovCisrCQkJbmV3ID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgdXNhYmxlbWVtX3JnbnMuc2l6ZTsKKysJCQluZXctPnN0YXJ0ID0gcmFuZ2UtPmVuZCArIDE7CisrCQkJbmV3LT5lbmQgPSByLT5lbmQ7CisrCQkJdXNhYmxlbWVtX3JnbnMuc2l6ZSsrOworKwkJCS8qCisrCQkJICogTmV4dCB1cGRhdGUgdGhpcyBhcmVhIHRvIGVuZCBiZWZvcmUgZXhjbHVkZWQgcmFuZ2UuCisrCQkJICovCisrCQkJci0+ZW5kID0gcmFuZ2UtPnN0YXJ0IC0gMTsKKysJCQlicmVhazsKKysJCX0KKysJfQorK30KKysKKytzdGF0aWMgaW50IHJhbmdlX2NtcChjb25zdCB2b2lkICphMSwgY29uc3Qgdm9pZCAqYTIpCisreworKwljb25zdCBzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyMSA9IGExOworKwljb25zdCBzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyMiA9IGEyOworKworKwlpZiAocjEtPnN0YXJ0ID4gcjItPnN0YXJ0KQorKwkJcmV0dXJuIDE7CisrCWlmIChyMS0+c3RhcnQgPCByMi0+c3RhcnQpCisrCQlyZXR1cm4gLTE7CisrCisrCXJldHVybiAwOworK30KKysKKysvKioKKysgKiBjcmFzaF9nZXRfbWVtb3J5X3JhbmdlcygpIC0gcmVhZCBzeXN0ZW0gcGh5c2ljYWwgbWVtb3J5CisrICoKKysgKiBGdW5jdGlvbiByZWFkcyB0aHJvdWdoIHN5c3RlbSBwaHlzaWNhbCBtZW1vcnkgYW5kIHN0b3JlcyBmb3VuZCBtZW1vcnkgcmVnaW9ucworKyAqIGluIEBjcmFzaF9tZW1vcnlfcmFuZ2VzLiBOdW1iZXIgb2YgbWVtb3J5IHJlZ2lvbnMgZm91bmQgaXMgcGxhY2VkIGluCisrICogQGNyYXNoX21lbW9yeV9ucl9yYW5nZXMuIFJlZ2lvbnMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuCisrICoKKysgKiBSZXR1cm5zICUwIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgJS0xIG90aGVyd2lzZSAoZXJybm8gaXMgc2V0KS4KKysgKi8KKytzdGF0aWMgaW50IGNyYXNoX2dldF9tZW1vcnlfcmFuZ2VzKHZvaWQpCisreworKwkvKgorKwkgKiBGaXJzdCByZWFkIGFsbCBtZW1vcnkgcmVnaW9ucyB0aGF0IGNhbiBiZSBjb25zaWRlcmVkIGFzCisrCSAqIHN5c3RlbSBtZW1vcnkgaW5jbHVkaW5nIHRoZSBjcmFzaCBhcmVhLgorKwkgKi8KKysJa2V4ZWNfaW9tZW1fZm9yX2VhY2hfbGluZShOVUxMLCBjcmFzaF9yYW5nZV9jYWxsYmFjaywgTlVMTCk7CisrCisrCWlmICh1c2FibGVtZW1fcmducy5zaXplIDwgMSkgeworKwkJZXJybm8gPSBFSU5WQUw7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJLyoKKysJICogRXhjbHVkZSBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGNyYXNoa2VybmVsICh0aGlzIG1heSByZXN1bHQgYSBzcGxpdCBtZW1vcnkKKysJICogcmVnaW9uKS4KKysJICovCisrCWNyYXNoX2V4Y2x1ZGVfcmFuZ2UoKTsKKysKKysJLyoKKysJICogTWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSByZWdpb25zIGFyZSBzb3J0ZWQuCisrCSAqLworKwlxc29ydCh1c2FibGVtZW1fcmducy5yYW5nZXMsIHVzYWJsZW1lbV9yZ25zLnNpemUsCisrCSAgICAgIHNpemVvZigqdXNhYmxlbWVtX3JnbnMucmFuZ2VzKSwgcmFuZ2VfY21wKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworKy8qKgorKyAqIGNtZGxpbmVfYWRkX2VsZmNvcmVoZHIoKSAtIGFkZHMgZWxmY29yZWhkcj0gdG8gQGNtZGxpbmUKKysgKiBAY21kbGluZTogYnVmZmVyIHdoZXJlIHBhcmFtZXRlciBpcyBwbGFjZWQKKysgKiBAZWxmY29yZWhkcjogcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGZjb3JlaGRyCisrICoKKysgKiBGdW5jdGlvbiBhcHBlbmRzICdlbGZjb3JlaGRyPXN0YXJ0JyBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kIGxpbmUgZ2l2ZW4gaW4KKysgKiBAY21kbGluZS4gTm90ZSB0aGF0IEBjbWRsaW5lIG11c3QgYmUgYXQgbGVhc3QgJUNPTU1BTkRfTElORV9TSVpFIGJ5dGVzIGxvbmcKKysgKiAoaW5jbHVuZGluZyAlTlVMKS4KKysgKi8KKytzdGF0aWMgdm9pZCBjbWRsaW5lX2FkZF9lbGZjb3JlaGRyKGNoYXIgKmNtZGxpbmUsIHVuc2lnbmVkIGxvbmcgZWxmY29yZWhkcikKKyt7CisrCWNoYXIgYnVmW0NPTU1BTkRfTElORV9TSVpFXTsKKysJaW50IGJ1ZmxlbjsKKysKKysJYnVmbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIGVsZmNvcmVoZHI9JSNseCIsCisrCQkJICBjbWRsaW5lLCBlbGZjb3JlaGRyKTsKKysJaWYgKGJ1ZmxlbiA8IDApCisrCQlkaWUoIkZhaWxlZCB0byBjb25zdHJ1Y3QgZWxmY29yZWhkcj0gY29tbWFuZCBsaW5lIHBhcmFtZXRlclxuIik7CisrCWlmIChidWZsZW4gPj0gc2l6ZW9mKGJ1ZikpCisrCQlkaWUoIkNvbW1hbmQgbGluZSBvdmVyZmxvd1xuIik7CisrCisrCSh2b2lkKSBzdHJuY3B5KGNtZGxpbmUsIGJ1ZiwgQ09NTUFORF9MSU5FX1NJWkUpOworKwljbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFIC0gMV0gPSAnXDAnOworK30KKysKKysvKioKKysgKiBjbWRsaW5lX2FkZF9tZW0oKSAtIGFkZHMgbWVtPSBwYXJhbWV0ZXIgdG8ga2VybmVsIGNvbW1hbmQgbGluZQorKyAqIEBjbWRsaW5lOiBidWZmZXIgd2hlcmUgcGFyYW1ldGVyIGlzIHBsYWNlZAorKyAqIEBzaXplOiBzaXplIG9mIHRoZSBrZXJuZWwgcmVzZXJ2ZWQgbWVtb3J5IChpbiBieXRlcykKKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyAnbWVtPXNpemUnIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgbGluZSBnaXZlbiBpbgorKyAqIEBjbWRsaW5lLiBOb3RlIHRoYXQgQGNtZGxpbmUgbXVzdCBiZSBhdCBsZWFzdCAlQ09NTUFORF9MSU5FX1NJWkUgYnl0ZXMgbG9uZworKyAqIChpbmNsdWRpbmcgJU5VTCkuCisrICovCisrc3RhdGljIHZvaWQgY21kbGluZV9hZGRfbWVtKGNoYXIgKmNtZGxpbmUsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKKyt7CisrCWNoYXIgYnVmW0NPTU1BTkRfTElORV9TSVpFXTsKKysJaW50IGJ1ZmxlbjsKKysKKysJYnVmbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIG1lbT0lbGRLIiwgY21kbGluZSwgc2l6ZSA+PiAxMCk7CisrCWlmIChidWZsZW4gPCAwKQorKwkJZGllKCJGYWlsZWQgdG8gY29uc3RydWN0IG1lbT0gY29tbWFuZCBsaW5lIHBhcmFtZXRlclxuIik7CisrCWlmIChidWZsZW4gPj0gc2l6ZW9mKGJ1ZikpCisrCQlkaWUoIkNvbW1hbmQgbGluZSBvdmVyZmxvd1xuIik7CisrCisrCSh2b2lkKSBzdHJuY3B5KGNtZGxpbmUsIGJ1ZiwgQ09NTUFORF9MSU5FX1NJWkUpOworKwljbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFIC0gMV0gPSAnXDAnOworK30KKysKKytzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJhbmdlX3NpemUoY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcikKKyt7CisrCXJldHVybiByLT5lbmQgLSByLT5zdGFydCArIDE7CisrfQorKworK3N0YXRpYyB2b2lkIGR1bXBfbWVtb3J5X3Jhbmdlcyh2b2lkKQorK3sKKysJaW50IGk7CisrCisrCWlmICgha2V4ZWNfZGVidWcpCisrCQlyZXR1cm47CisrCisrCWRiZ3ByaW50ZigiY3Jhc2hrZXJuZWw6IFslI2xseCAtICUjbGx4XSAoJWxkTSlcbiIsCisrCQkgIGNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCwgY3Jhc2hfcmVzZXJ2ZWRfbWVtLmVuZCwKKysJCSAgKHVuc2lnbmVkIGxvbmcpcmFuZ2Vfc2l6ZSgmY3Jhc2hfcmVzZXJ2ZWRfbWVtKSA+PiAyMCk7CisrCisrCWZvciAoaSA9IDA7IGkgPCB1c2FibGVtZW1fcmducy5zaXplOyBpKyspIHsKKysJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIgPSB1c2FibGVtZW1fcmducy5yYW5nZXMgKyBpOworKwkJZGJncHJpbnRmKCJtZW1vcnkgcmFuZ2U6IFslI2xseCAtICUjbGx4XSAoJWxkTSlcbiIsCisrCQkJICByLT5zdGFydCwgci0+ZW5kLCAodW5zaWduZWQgbG9uZylyYW5nZV9zaXplKHIpID4+IDIwKTsKKysJfQorK30KKysKKysvKioKKysgKiBsb2FkX2NyYXNoZHVtcF9zZWdtZW50cygpIC0gbG9hZHMgYWRkaXRpb25hbCBzZWdtZW50cyBuZWVkZWQgZm9yIGtkdW1wCisrICogQGluZm86IGtleGVjIGluZm8gc3RydWN0dXJlCisrICogQG1vZF9jbWRsaW5lOiBrZXJuZWwgY29tbWFuZCBsaW5lCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGxvYWRzIGFkZGl0aW9uYWwgc2VnbWVudHMgd2hpY2ggYXJlIG5lZWRlZCBmb3IgdGhlIGR1bXAgY2FwdHVyZQorKyAqIGtlcm5lbC4gSXQgYWxzbyB1cGRhdGVzIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFzc2VkIGluIEBtb2RfY21kbGluZSB0byBoYXZlCisrICogcmlnaHQgcGFyYW1ldGVycyBmb3IgdGhlIGR1bXAgY2FwdHVyZSBrZXJuZWwuCisrICoKKysgKiBSZXR1cm4gJTAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAlLTEgaW4gY2FzZSBvZiBlcnJvci4KKysgKi8KKytpbnQgbG9hZF9jcmFzaGR1bXBfc2VnbWVudHMoc3RydWN0IGtleGVjX2luZm8gKmluZm8sIGNoYXIgKm1vZF9jbWRsaW5lKQorK3sKKysJdW5zaWduZWQgbG9uZyBlbGZjb3JlaGRyOworKwl1bnNpZ25lZCBsb25nIGJ1ZnN6OworKwl2b2lkICpidWY7CisrCWludCBlcnI7CisrCisrCS8qCisrCSAqIEZpcnN0IGZldGNoIGFsbCB0aGUgbWVtb3J5IChSQU0pIHJhbmdlcyB0aGF0IHdlIGFyZSBnb2luZyB0byBwYXNzIHRvCisrCSAqIHRoZSBjcmFzaGR1bXAga2VybmVsIGR1cmluZyBwYW5pYy4KKysJICovCisrCWVyciA9IGNyYXNoX2dldF9tZW1vcnlfcmFuZ2VzKCk7CisrCWlmIChlcnIpCisrCQlyZXR1cm4gZXJyOworKworKwkvKgorKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIG1lbW9yeSByZWdpb25zIHNvcnRlZCwgd2UgY2FuIHVzZSBmaXJzdCBtZW1vcnkKKysJICogcmVnaW9uIGFzIFBIWVNfT0ZGU0VULgorKwkgKi8KKysJcGh5c19vZmZzZXQgPSB1c2FibGVtZW1fcmducy5yYW5nZXMtPnN0YXJ0OworKwlkYmdwcmludGYoInBoeXNfb2Zmc2V0OiAlI2x4XG4iLCBwaHlzX29mZnNldCk7CisrCisrCWVyciA9IGNyYXNoX2NyZWF0ZV9lbGYzMl9oZWFkZXJzKGluZm8sICZlbGZfaW5mbywKKysJCQkJCSB1c2FibGVtZW1fcmducy5yYW5nZXMsCisrCQkJCQkgdXNhYmxlbWVtX3JnbnMuc2l6ZSwgJmJ1ZiwgJmJ1ZnN6LAorKwkJCQkJIEVMRl9DT1JFX0hFQURFUl9BTElHTik7CisrCWlmIChlcnIpCisrCQlyZXR1cm4gZXJyOworKworKwkvKgorKwkgKiBXZSBhbGxvY2F0ZSBFTEYgY29yZSBoZWFkZXIgZnJvbSB0aGUgZW5kIG9mIHRoZSBtZW1vcnkgYXJlYSByZXNlcnZlZAorKwkgKiBmb3IgdGhlIGNyYXNoa2VybmVsLiBXZSBhbGlnbiB0aGUgaGVhZGVyIHRvIFNFQ1RJT05fU0laRSAod2hpY2ggaXMKKysJICogMU1CKSBzbyB0aGF0IGF2YWlsYWJsZSBtZW1vcnkgcGFzc2VkIGluIGtlcm5lbCBjb21tYW5kIGxpbmUgd2lsbCBiZQorKwkgKiBhbGlnbmVkIHRvIDFNQi4gVGhpcyBpcyBiZWNhdXNlIGtlcm5lbCBjcmVhdGVfbWFwcGluZygpIHdhbnRzIG1lbW9yeQorKwkgKiByZWdpb25zIHRvIGJlIGFsaWduZWQgdG8gU0VDVElPTl9TSVpFLgorKwkgKi8KKysJZWxmY29yZWhkciA9IGFkZF9idWZmZXJfcGh5c192aXJ0KGluZm8sIGJ1ZiwgYnVmc3osIGJ1ZnN6LCAxIDw8IDIwLAorKwkJCQkJICBjcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQsCisrCQkJCQkgIGNyYXNoX3Jlc2VydmVkX21lbS5lbmQsIC0xLCAwKTsKKysKKysJZGJncHJpbnRmKCJlbGZjb3JlaGRyOiAlI2x4XG4iLCBlbGZjb3JlaGRyKTsKKysJY21kbGluZV9hZGRfZWxmY29yZWhkcihtb2RfY21kbGluZSwgZWxmY29yZWhkcik7CisrCisrCS8qCisrCSAqIEFkZCAnbWVtPXNpemUnIHBhcmFtZXRlciB0byBkdW1wIGNhcHR1cmUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhpcworKwkgKiBwcmV2ZW50cyB0aGUgZHVtcCBjYXB0dXJlIGtlcm5lbCBmcm9tIHVzaW5nIGFueSBvdGhlciBtZW1vcnkgcmVnaW9ucworKwkgKiB3aGljaCBiZWxvbmcgdG8gdGhlIHByaW1hcnkga2VybmVsLgorKwkgKi8KKysJY21kbGluZV9hZGRfbWVtKG1vZF9jbWRsaW5lLCBlbGZjb3JlaGRyIC0gY3Jhc2hfcmVzZXJ2ZWRfbWVtLnN0YXJ0KTsKKysKKysJZHVtcF9tZW1vcnlfcmFuZ2VzKCk7CisrCWRiZ3ByaW50Zigia2VybmVsIGNvbW1hbmQgbGluZTogXCIlc1wiXG4iLCBtb2RfY21kbGluZSk7CisrCisrCXJldHVybiAwOworK30KKysKKysjZW5kaWYKKysKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9pbmNsdWRlL2FyY2gvb3B0aW9ucy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvaW5jbHVkZS9hcmNoL29wdGlvbnMuaAorQEAgLTAsMCArMSwyNiBAQAorKyNpZm5kZWYgS0VYRUNfQVJDSF9BUk02NF9PUFRJT05TX0gKKysjZGVmaW5lIEtFWEVDX0FSQ0hfQVJNNjRfT1BUSU9OU19ICisrCisrLy8jZGVmaW5lIE9QVF9BUkNIX01BWAkoKE9QVF9NQVgpKzApCisrCisrI2RlZmluZSBPUFRfQVBQRU5ECSgoT1BUX01BWCkrMCkKKysjZGVmaW5lIE9QVF9SQU1ESVNLCSgoT1BUX01BWCkrMSkKKysjZGVmaW5lIE9QVF9EVEIJCSgoT1BUX01BWCkrMikKKysKKysjZGVmaW5lIE9QVF9BUkNIX01BWAkoKE9QVF9NQVgpKzMpCisrCisrCisrI2RlZmluZSBLRVhFQ19BUkNIX09QVElPTlMgXAorKwlLRVhFQ19PUFRJT05TIFwKKysJeyAiYXBwZW5kIiwgICAgICAgMSwgTlVMTCwgT1BUX0FQUEVORCB9LCBcCisrCXsgImNvbW1hbmQtbGluZSIsIDEsIE5VTEwsIE9QVF9BUFBFTkQgfSwgXAorKwl7ICJkdGIiLCAgICAgICAgICAxLCBOVUxMLCBPUFRfRFRCIH0sIFwKKysJeyAiaW5pdHJkIiwgICAgICAgMSwgTlVMTCwgT1BUX1JBTURJU0sgfSwgXAorKwl7ICJyYW1kaXNrIiwgICAgICAxLCBOVUxMLCBPUFRfUkFNRElTSyB9LCBcCisrCisrI2RlZmluZSBLRVhFQ19BUkNIX09QVF9TVFIgS0VYRUNfT1BUX1NUUiAvKiBPbmx5IGFjY2VwdCBsb25nIGFyY2ggb3B0aW9ucy4gKi8KKysKKysjZGVmaW5lIEtFWEVDX0FMTF9PUFRJT05TIEtFWEVDX0FSQ0hfT1BUSU9OUworKyNkZWZpbmUgS0VYRUNfQUxMX09QVF9TVFIgS0VYRUNfQVJDSF9PUFRfU1RSCisrCisrI2VuZGlmIC8qIEtFWEVDX0FSQ0hfQVJNNjRfT1BUSU9OU19IICovCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMKK0BAIC0wLDAgKzEsMTc3IEBACisrLyoKKysgKiBBUk02NCBrZXhlYyBzdXBwb3J0LgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLy8jaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKysKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMuaCIKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMtc3lzY2FsbC5oIgorKyNpbmNsdWRlICJrZXhlYy1hcm02NC5oIgorKworKworK3ZvaWQgYXJjaF91c2FnZSh2b2lkKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCisrCXByaW50ZigKKysiICAgICAtLWFwcGVuZD1TVFJJTkcgICAgICAgU2V0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHRvIFNUUklORy5cbiIKKysiICAgICAtLWNvbW1hbmQtbGluZT1TVFJJTkcgU2V0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHRvIFNUUklORy5cbiIKKysiICAgICAtLWR0Yj1GSUxFICAgICAgICAgICAgVXNlIEZJTEUgYXMgdGhlIGRldmljZSB0cmVlIGJsb2IuXG4iCisrIiAgICAgLS1pbml0cmQ9RklMRSAgICAgICAgIFVzZSBGSUxFIGFzIHRoZSBrZXJuZWwgaW5pdGlhbCByYW1kaXNrLlxuIgorKyIgICAgIC0tcmFtZGlzaz1GSUxFICAgICAgICBVc2UgRklMRSBhcyB0aGUga2VybmVsIGluaXRpYWwgcmFtZGlzay5cbiIpOworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CisrCisraW50IGFyY2hfcHJvY2Vzc19vcHRpb25zKGludCBVTlVTRUQoYXJnYyksIGNoYXIgKipVTlVTRUQoYXJndikpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK2NvbnN0IHN0cnVjdCBhcmNoX21hcF9lbnRyeSBhcmNoZXNbXSA9IHsKKysJeyAiYWFyY2g2NCIsIEtFWEVDX0FSQ0hfQVJNNjQgfSwKKysJeyBOVUxMLCAwIH0sCisrfTsKKysKKyt2b2lkIGFyY2hfdXBkYXRlX3B1cmdhdG9yeShzdHJ1Y3Qga2V4ZWNfaW5mbyAqVU5VU0VEKGluZm8pKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorKworK3Vuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHVuc2lnbmVkIGxvbmcgYWRkcikKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICUwMTZseCAtPiAlMDE2bHhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgYWRkciwKKysJCWFkZHIgKyAweDA4MDAwMDAwMFVMKTsKKysJcmV0dXJuIGFkZHIgKyAweDA4MDAwMDAwMFVMOworK30KKysKKyt2b2lkIGFkZF9zZWdtZW50KHN0cnVjdCBrZXhlY19pbmZvICppbmZvLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZzeiwKKysJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplX3QgbWVtc3opCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJYWRkX3NlZ21lbnRfcGh5c192aXJ0KGluZm8sIGJ1ZiwgYnVmc3osIGJhc2UsIG1lbXN6LCAxKTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorKworK3N0YXRpYyBpbnQgZ2V0X21lbW9yeV9yYW5nZXNfMShzdHJ1Y3QgbWVtb3J5X3JhbmdlICoqcmFuZ2UsIGludCAqcmFuZ2VzLAorKwkJCXVuc2lnbmVkIGxvbmcga2V4ZWNfZmxhZ3MpCisreworKwlzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBtZW1vcnlfcmFuZ2VbS0VYRUNfU0VHTUVOVF9NQVhdOworKwljb25zdCBjaGFyICppb21lbTsKKysJaW50IHJhbmdlX2NvdW50ID0gMDsKKysJY2hhciBsaW5lW01BWF9MSU5FXTsKKysJRklMRSAqZnA7CisrCisrCWlvbWVtID0gcHJvY19pb21lbSgpOworKwlmcCA9IGZvcGVuKGlvbWVtLCAiciIpOworKworKwlpZiAoIWZwKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBvcGVuICVzOiAlc1xuIiwKKysJCQlpb21lbSwgc3RyZXJyb3IoZXJybm8pKTsKKysJCXJldHVybiAtMTsKKysJfQorKworKwlkYmdwcmludGYoIm1lbW9yeSByYW5nZXM6XG4iKTsKKysKKysJd2hpbGUoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkgIT0gMCkgeworKwkJc3RydWN0IG1lbW9yeV9yYW5nZSByOworKwkJY2hhciAqc3RyOworKwkJaW50IGNvbnN1bWVkOworKworKwkJaWYgKHJhbmdlX2NvdW50ID49IEtFWEVDX1NFR01FTlRfTUFYKQorKwkJCWJyZWFrOworKworKwkJaWYgKHNzY2FuZihsaW5lLCAiJUx4LSVMeCA6ICVuIiwgJnIuc3RhcnQsICZyLmVuZCwgJmNvbnN1bWVkKQorKwkJCSE9IDIpCisrCQkJY29udGludWU7CisrCisrCQlzdHIgPSBsaW5lICsgY29uc3VtZWQ7CisrCQlyLmVuZCsrOworKworKwkJaWYgKG1lbWNtcChzdHIsICJTeXN0ZW0gUkFNXG4iLCAxMSkpIHsKKysJCQlkYmdwcmludGYoIiBTa2lwOiAlMDE2THggLSAlMDE2THggOiAlcyIsIHIuc3RhcnQsIHIuZW5kLAorKwkJCQlzdHIpOworKwkJCWNvbnRpbnVlOworKwkJfQorKworKwkJci50eXBlID0gUkFOR0VfUkFNOworKwkJbWVtb3J5X3JhbmdlW3JhbmdlX2NvdW50XSA9IHI7CisrCQlyYW5nZV9jb3VudCsrOworKworKwkJZGJncHJpbnRmKCIgQWRkOiAgJTAxNkx4IC0gJTAxNkx4IDogJXMiLCByLnN0YXJ0LCByLmVuZCwgc3RyKTsKKysJfQorKworKwlmY2xvc2UoZnApOworKwkqcmFuZ2UgPSBtZW1vcnlfcmFuZ2U7CisrCSpyYW5nZXMgPSByYW5nZV9jb3VudDsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgZ2V0X21lbW9yeV9yYW5nZXNfMihzdHJ1Y3QgbWVtb3J5X3JhbmdlICoqcmFuZ2UsIGludCAqcmFuZ2VzLAorKwkJICAgICAgdW5zaWduZWQgbG9uZyBVTlVTRUQoa2V4ZWNfZmxhZ3MpKQorK3sKKysJc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgbWVtb3J5X3JhbmdlWzJdOworKworKwltZW1vcnlfcmFuZ2VbMF0uc3RhcnQgPSAweDA4MDAwMDAwMDsKKysJbWVtb3J5X3JhbmdlWzBdLmVuZCAgID0gMHgxMDAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVswXS50eXBlID0gUkFOR0VfUkFNOworKworKwltZW1vcnlfcmFuZ2VbMV0uc3RhcnQgPSAweDkwMDAwMDAwMDsKKysJbWVtb3J5X3JhbmdlWzFdLmVuZCAgID0gMHg4ODAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVsxXS50eXBlID0gUkFOR0VfUkFNOworKworKwkqcmFuZ2UgPSBtZW1vcnlfcmFuZ2U7CisrCSpyYW5nZXMgPSBzaXplb2YobWVtb3J5X3JhbmdlKSAvIHNpemVvZihtZW1vcnlfcmFuZ2VbMF0pOworKworKwlyZXR1cm4gMDsKKyt9CisrCisraW50IGdldF9tZW1vcnlfcmFuZ2VzKHN0cnVjdCBtZW1vcnlfcmFuZ2UgKipyYW5nZSwgaW50ICpyYW5nZXMsCisrCQkJdW5zaWduZWQgbG9uZyBrZXhlY19mbGFncykKKyt7CisrCS8qIEZJWE1FOiBTaG91bGQgZ2V0IHRoaXMgaW5mbyBmcm9tIGRldmljZSB0cmVlLiAqLworKwkKKysJcmV0dXJuIGdldF9tZW1vcnlfcmFuZ2VzXzEocmFuZ2UsIHJhbmdlcywga2V4ZWNfZmxhZ3MpOworK30KKysKKytzdHJ1Y3QgZmlsZV90eXBlIGZpbGVfdHlwZVtdID0geworKwl7ICJlbGYtYXJtNjQiLCBlbGZfYXJtNjRfcHJvYmUsIGVsZl9hcm02NF9sb2FkLCBlbGZfYXJtNjRfdXNhZ2UgfSwKKyt9OworKworK2ludCBmaWxlX3R5cGVzID0gc2l6ZW9mKGZpbGVfdHlwZSkgLyBzaXplb2YoZmlsZV90eXBlWzBdKTsKKysKKytpbnQgYXJjaF9jb21wYXRfdHJhbXBvbGluZShzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbykKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBhcmNoX3JldXNlX2luaXRyZCh2b2lkKQorK3sKKyt9CisrCisraW50IG1hY2hpbmVfdmVyaWZ5X2VsZl9yZWwoc3RydWN0IG1lbV9laGRyICplaGRyKQorK3sKKysJKHZvaWQpZWhkcjsKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiAwOworK30KKysKKyt2b2lkIG1hY2hpbmVfYXBwbHlfZWxmX3JlbChzdHJ1Y3QgbWVtX2VoZHIgKmVoZHIsIHVuc2lnbmVkIGxvbmcgcl90eXBlLAorKwl2b2lkICpsb2NhdGlvbiwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHZhbHVlKQorK3sKKysJKHZvaWQpZWhkcjsKKysJKHZvaWQpcl90eXBlOworKwkodm9pZClsb2NhdGlvbjsKKysJKHZvaWQpYWRkcmVzczsKKysJKHZvaWQpdmFsdWU7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaAorQEAgLTAsMCArMSwyMCBAQAorKy8qCisrICogQVJNNjQga2V4ZWMgc3VwcG9ydC4KKysgKi8KKysKKysjaWYgIWRlZmluZWQoS0VYRUNfQVJNNjRfSCkKKysjZGVmaW5lIEtFWEVDX0FSTTY0X0gKKysKKysvKiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4gRklYTUU6IHRoaXMgaXMgYnJva2VuICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy5oIgorKworKyNkZWZpbmUgS0VYRUNfU0VHTUVOVF9NQVggMTYgLyogRklYTUU6IHRoaXMgc2hvdWxkIGNvbWUgZnJvbSA8bGludXgva2V4ZWMuaD4gKi8KKysKKytpbnQgZWxmX2FybTY0X3Byb2JlKGNvbnN0IGNoYXIgKmJ1Ziwgb2ZmX3QgbGVuKTsKKytpbnQgZWxmX2FybTY0X2xvYWQoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbiwKKysJc3RydWN0IGtleGVjX2luZm8gKmluZm8pOworK3ZvaWQgZWxmX2FybTY0X3VzYWdlKHZvaWQpOworKworKyNlbmRpZgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1lbGYtYXJtNjQuYworQEAgLTAsMCArMSwxMTQgQEAKKysvKgorKyAqIEFSTTY0IGtleGVjIHN1cHBvcnQuCisrICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLXN5c2NhbGwuaCIKKysKKysjaW5jbHVkZSAia2V4ZWMtYXJtNjQuaCIKKysjaW5jbHVkZSAiYXJjaC9vcHRpb25zLmgiCisrCisrI2lmICFkZWZpbmVkKEVNX0FBUkNINjQpCisrIyBkZWZpbmUgRU1fQUFSQ0g2NCAxODMKKysjZW5kaWYKKysKKytpbnQgZWxmX2FybTY0X3Byb2JlKGNvbnN0IGNoYXIgKmJ1Ziwgb2ZmX3QgbGVuKQorK3sKKysJaW50IHJlc3VsdDsKKysJc3RydWN0IG1lbV9laGRyIGVoZHI7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwkKKysJcmVzdWx0ID0gYnVpbGRfZWxmX2V4ZWNfaW5mbyhidWYsIGxlbiwgJmVoZHIsIDApOworKworKwlpZiAocmVzdWx0IDwgMCkgeworKwkJZGJncHJpbnRmKCJOb3QgYW4gRUxGIGV4ZWN1dGFibGVcbiIpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJaWYgKGVoZHIuZV9tYWNoaW5lICE9IEVNX0FBUkNINjQpIHsKKysJCWRiZ3ByaW50ZigiTm90IGFuIEFBUkNINjQgZXhlY3V0YWJsZVxuIik7CisrCQlyZXN1bHQgPSAtMTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCXJlc3VsdCA9IDA7CisrCisrb3V0OgorKwlmcmVlX2VsZl9pbmZvKCZlaGRyKTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiByZXN1bHQ7CisrfQorKworK2ludCBlbGZfYXJtNjRfbG9hZChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmJ1Ziwgb2ZmX3QgbGVuLAorKwkJCXN0cnVjdCBrZXhlY19pbmZvICppbmZvKQorK3sKKysJc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworKwkJS0VYRUNfQVJDSF9PUFRJT05TCisrCQl7IDAgfQorKwl9OworKwlzdGF0aWMgY29uc3QgY2hhciBzaG9ydF9vcHRpb25zW10gPSBLRVhFQ19PUFRfU1RSICIiOworKwljb25zdCBjaGFyICpjb21tYW5kX2xpbmUgPSBOVUxMOworKwl1bnNpZ25lZCBpbnQgY29tbWFuZF9saW5lX2xlbiA9IDA7CisrCWNvbnN0IGNoYXIgKnJhbWRpc2sgPSBOVUxMOworKwljb25zdCBjaGFyICpkdGIgPSBOVUxMOworKwlpbnQgb3B0OworKwlzdHJ1Y3QgbWVtX2VoZHIgZWhkcjsKKysJaW50IHJlc3VsdDsKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCisrCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgc2hvcnRfb3B0aW9ucywgb3B0aW9ucywgMCkpCisrCQkhPSAtMSkgeworKwkJc3dpdGNoIChvcHQpIHsKKysJCWRlZmF1bHQ6CisrCQkJaWYgKG9wdCA8IE9QVF9NQVgpIC8qIElnbm9yZSBjb3JlIG9wdGlvbnMgKi8KKysJCQkJYnJlYWs7CisrCQljYXNlIE9QVF9BUFBFTkQ6CisrCQkJY29tbWFuZF9saW5lID0gb3B0YXJnOworKwkJCWNvbW1hbmRfbGluZV9sZW4gPSBzdHJsZW4oY29tbWFuZF9saW5lKSArIDE7CisrCQkJYnJlYWs7CisrCQljYXNlIE9QVF9SQU1ESVNLOgorKwkJCXJhbWRpc2sgPSBvcHRhcmc7CisrCQkJYnJlYWs7CisrCQljYXNlIE9QVF9EVEI6CisrCQkJZHRiID0gb3B0YXJnOworKwkJCWJyZWFrOworKwkJfQorKwl9CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGNvbW1hbmRfbGluZTogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgY29tbWFuZF9saW5lKTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogcmFtZGlzazogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgcmFtZGlzayk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGR0YjogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZHRiKTsKKysKKysJaWYgKGluZm8tPmtleGVjX2ZsYWdzICYgS0VYRUNfT05fQ1JBU0gpIHsKKysJCWZwcmludGYoc3RkZXJyLCAia2V4ZWM6IGtkdW1wIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIGFybTY0XG4iKTsKKysJCXJldHVybiAtMTsKKysJfQorKworKwlyZXN1bHQgPSBidWlsZF9lbGZfZXhlY19pbmZvKGJ1ZiwgbGVuLCAmZWhkciwgMCk7CisrCisrCWlmIChyZXN1bHQgPCAwKSB7CisrCQlmcmVlX2VsZl9pbmZvKCZlaGRyKTsKKysJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGZyZWVfZWxmX2luZm8gZmFpbGVkXG4iLCBfX2Z1bmNfXywKKysJCQlfX0xJTkVfXyk7CisrCQlyZXR1cm4gcmVzdWx0OworKwl9CisrCisrCWVsZl9leGVjX2J1aWxkX2xvYWQoaW5mbywgJmVoZHIsIGJ1ZiwgbGVuLCAwKTsKKysKKysJaW5mby0+ZW50cnkgPSAodm9pZCopMHg4MDA4MDAwMFVMOyAgLy8gRklYTUUKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiAwOworK30KKysKKyt2b2lkIGVsZl9hcm02NF91c2FnZSh2b2lkKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorQEAgLTM5LDggKzM5LDggQEAKKyAjaWZkZWYgX19zMzkwX18KKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjc3CisgI2VuZGlmCistI2lmZGVmIF9fYXJtX18KKy0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJX19OUl9TWVNDQUxMX0JBU0UgKyAzNDcgIAorKyNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm02NF9fKQorKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQlfX05SX1NZU0NBTExfQkFTRSArIDM0NworICNlbmRpZgorICNpZiBkZWZpbmVkKF9fbWlwc19fKQorICNkZWZpbmUgX19OUl9rZXhlY19sb2FkICAgICAgICAgICAgICAgIDQzMTEKK0BAIC0xMDgsNiArMTA4LDggQEAgc3RhdGljIGlubGluZSBsb25nIGtleGVjX2ZpbGVfbG9hZChpbnQgaworICNkZWZpbmUgS0VYRUNfQVJDSF9QUEM2NCAgICgyMSA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfSUFfNjQgICAoNTAgPDwgMTYpCisgI2RlZmluZSBLRVhFQ19BUkNIX0FSTSAgICAgKDQwIDw8IDE2KQorKyNkZWZpbmUgS0VYRUNfQVJDSF9BUk02NCAgICgxODMgPDwgMTYpCisrLyogI2RlZmluZSBLRVhFQ19BUkNIX0FBUkNINjQgKDE4MyA8PCAxNikgKi8KKyAjZGVmaW5lIEtFWEVDX0FSQ0hfUzM5MCAgICAoMjIgPDwgMTYpCisgI2RlZmluZSBLRVhFQ19BUkNIX1NIICAgICAgKDQyIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9NSVBTX0xFICgxMCA8PCAxNikKK0BAIC0xNTMsNSArMTU1LDggQEAgc3RhdGljIGlubGluZSBsb25nIGtleGVjX2ZpbGVfbG9hZChpbnQgaworICNpZmRlZiBfX202OGtfXworICNkZWZpbmUgS0VYRUNfQVJDSF9OQVRJVkUJS0VYRUNfQVJDSF82OEsKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX2FybTY0X18pCisrI2RlZmluZSBLRVhFQ19BUkNIX05BVElWRQlLRVhFQ19BUkNIX0FSTTY0CisrI2VuZGlmCisgCisgI2VuZGlmIC8qIEtFWEVDX1NZU0NBTExfSCAqLworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMva2V4ZWMuYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy5jCitAQCAtNjY0LDYgKzY2NCw4IEBAIHN0YXRpYyBpbnQgbXlfbG9hZChjb25zdCBjaGFyICp0eXBlLCBpbnQKKyAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworIAlpbmZvLmtleGVjX2ZsYWdzID0ga2V4ZWNfZmxhZ3M7CisgCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKworIAlyZXN1bHQgPSAwOworIAlpZiAoYXJnYyAtIGZpbGVpbmQgPD0gMCkgeworIAkJZnByaW50ZihzdGRlcnIsICJObyBrZXJuZWwgc3BlY2lmaWVkXG4iKTsKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAvcHVyZ2F0b3J5L2FyY2gvYXJtNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAvcHVyZ2F0b3J5L2FyY2gvYXJtNjQvTWFrZWZpbGUKK0BAIC0wLDAgKzEsNyBAQAorKyMKKysjIFB1cmdhdG9yeSBhcm02NAorKyMKKysKKythcm02NF9QVVJHQVRPUllfU1JDUyA9CisrCisrZGlzdCArPSBwdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZSAkKGFybTY0X1BVUkdBVE9SWV9TUkNTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5OGViNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAora2V4ZWMtdG9vbHM6IFJlZmluZSBrZHVtcCBkZXZpY2VfdHJlZSBzb3J0CisKK1RoZSBjb21taXQgYjAyZDczNWJmIHdhcyB0byByZWFycmFuZ2UgdGhlIGRldmljZS10cmVlIGVudHJpZXMsIGFuZAorYXNzdW1lZCB0aGF0IHRoZXNlIGVudHJpZXMgYXJlIHNvcnRlZCBpbiB0aGUgYXNjZW5kaW5nIG9yZGVyLiBidXQKK2FjY3R1YWxseSB3aGVuIEkgd2FzIHZhbGlkYXRpbmcga2V4ZWMgYW5kIGtkdW1wLCB0aGUgb3JkZXIgb2YKK3NlcmlhbCBub2RlIHN0aWxsIGlzIGNoYW5nZWQuIFNvIHRoZSBwYXRjaCBpcyB0byBzb3J0IHRoZXNlIGVudHJpZXMKK2J5IHRoZSBkaXJlY3RvcnkgbmFtZSBpbiBhc2NlbmRpbmcgb3JkZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZYW5nIFdlaSA8V2VpLllhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisga2V4ZWMvYXJjaC9wcGMvZnMyZHQuYyB8ICAgMTMgKysrKysrKysrKy0tLQorIGtleGVjL2ZzMmR0LmMgICAgICAgICAgfCAgIDEzICsrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9wcGMvZnMyZHQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9wcGMvZnMyZHQuYworQEAgLTI5Niw2ICsyOTYsOSBAQCBzdGF0aWMgaW50IGNvbXBhcmVmdW5jKGNvbnN0IHZvaWQgKmRlbnRyCisgeworIAljaGFyICpzdHIxID0gKCooc3RydWN0IGRpcmVudCAqKilkZW50cnkxKS0+ZF9uYW1lOworIAljaGFyICpzdHIyID0gKCooc3RydWN0IGRpcmVudCAqKilkZW50cnkyKS0+ZF9uYW1lOworKwljaGFyKiBwdHIxID0gc3RyY2hyKHN0cjEsICdAJyk7CisrCWNoYXIqIHB0cjIgPSBzdHJjaHIoc3RyMiwgJ0AnKTsKKysJaW50IGxlbjEsIGxlbjI7CisgCisgCS8qCisgCSAqIHN0cmNtcCBzY2FucyBmcm9tIGxlZnQgdG8gcmlnaHQgYW5kIGZhaWxzIHRvIGlkZXRpZnkgZm9yIHNvbWUKK0BAIC0zMDMsOSArMzA2LDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZWZ1bmMoY29uc3Qgdm9pZCAqZGVudHIKKyAJICogVGhlcmVmb3JlLCB3ZSBnZXQgdGhlIHdyb25nIHNvcnRlZCBvcmRlciBsaWtlIG1lbW9yeUAxMDAwMDAwMCBhbmQKKyAJICogbWVtb3J5QGYwMDAwMDAuCisgCSAqLworLQlpZiAoc3RyY2hyKHN0cjEsICdAJykgJiYgc3RyY2hyKHN0cjIsICdAJykgJiYKKy0JCShzdHJsZW4oc3RyMSkgPiBzdHJsZW4oc3RyMikpKQorLQkJcmV0dXJuIDE7CisrCWlmIChwdHIxICYmIHB0cjIpIHsKKysJCWxlbjEgPSBwdHIxIC0gc3RyMTsKKysJCWxlbjIgPSBwdHIyIC0gc3RyMjsKKysJCWlmICghc3RybmNtcChzdHIxLCBzdHIyLCBsZW4xID5sZW4yID8gbGVuMTogbGVuMikgJiYKKysJCQkJCShzdHJsZW4oc3RyMSkgPiBzdHJsZW4oc3RyMikpKQorKwkJCQlyZXR1cm4gMTsKKysJfQorIAorIAlyZXR1cm4gc3RyY21wKHN0cjEsIHN0cjIpOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMteDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy14MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkMThlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMteDMyLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK3g4Nl82NDogQWRkIHN1cHBvcnQgdG8gYnVpbGQga2V4ZWMtdG9vbHMgd2l0aCB4MzIgQUJJCisKK1N1bW1hcnkgb2YgY2hhbmdlcywKKworY29uZmlndXJlLmFjOiBBZGQgdGVzdCBmb3IgZGV0ZWN0IHgzMiBBQkkuCitwdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGU6IE5vdCB1c2UgbWNtb2RlbCBsYXJnZSB3aGVuCisJeDMyIEFCSSBpcyBzZXQuCitrZXhlYy9hcmNoL3g4Nl82NC9rZXhlYy1lbGYtcmVsLXg4Nl82NC5jOiBXaGVuIHgzMiBBQkkgaXMgc2V0CisJdXNlIEVMRkNMQVNTMzIgaW5zdGVhZCBvZiBFTEZDTEFTUzY0Lgora2V4ZWMva2V4ZWMtc3lzY2FsbC5oOiBBZGQgY29ycmVjdCBzeXNjYWxsIG51bWJlciBmb3IgeDMyIEFCSS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkgKysrKysrKysrCisga2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYyB8IDQgKysrKworIGtleGVjL2tleGVjLXN5c2NhbGwuaCAgICAgICAgICAgICAgICAgICAgfCA0ICsrKysKKyBwdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUgICAgICAgICAgIHwgNCArKystCisgNCBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcvY29uZmlndXJlLmFjCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworQEAgLTU2LDYgKzU2LDE1IEBAIGNhc2UgJHRhcmdldF9jcHUgaW4KKyAJCTs7CisgCWlhNjR8eDg2XzY0fGFscGhhfG02OGsgKQorIAkJQVJDSD0iJHRhcmdldF9jcHUiCisrCisrCQlkbmwgLS0tVGVzdCBmb3IgeDMyIEFCSSBpbiB4ODZfNjQKKysJCWlmIHRlc3QgIngkQVJDSCIgPSAieHg4Nl82NCIgOyB0aGVuCisrCQkJQUNfRUdSRVBfQ1BQKHgzMl90ZXN0LAorKwkJCVsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkIChfX0lMUDMyX18pCisrCQkJCXgzMl90ZXN0CisrCQkJI2VuZGlmCisrCQkJXSwgU1VCQVJDSD0neDMyJywgU1VCQVJDSD0nNjQnKQorKwkJZmkKKyAJCTs7CisgCSogKQorIAkJQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgJHRhcmdldF9jcHVdKQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3g4Nl82NC9rZXhlYy1lbGYtcmVsLXg4Nl82NC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3g4Nl82NC9rZXhlYy1lbGYtcmVsLXg4Nl82NC5jCitAQCAtOCw3ICs4LDExIEBAIGludCBtYWNoaW5lX3ZlcmlmeV9lbGZfcmVsKHN0cnVjdCBtZW1fZWgKKyAJaWYgKGVoZHItPmVpX2RhdGEgIT0gRUxGREFUQTJMU0IpIHsKKyAJCXJldHVybiAwOworIAl9CisrI2lmZGVmIF9fSUxQMzJfXworKwlpZiAoZWhkci0+ZWlfY2xhc3MgIT0gRUxGQ0xBU1MzMikgeworKyNlbHNlCisgCWlmIChlaGRyLT5laV9jbGFzcyAhPSBFTEZDTEFTUzY0KSB7CisrI2VuZGlmCisgCQlyZXR1cm4gMDsKKyAJfQorIAlpZiAoZWhkci0+ZV9tYWNoaW5lICE9IEVNX1g4Nl82NCkgeworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCitAQCAtMzEsOCArMzEsMTIgQEAKKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjY4CisgI2VuZGlmCisgI2lmZGVmIF9feDg2XzY0X18KKysjaWZkZWYgX19JTFAzMl9fCisrI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTUyOAorKyNlbHNlCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI0NgorICNlbmRpZgorKyNlbmRpZgorICNpZmRlZiBfX3MzOTB4X18KKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjc3CisgI2VuZGlmCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL3B1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZQorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUKK0BAIC0yMyw0ICsyMyw2IEBAIHg4Nl82NF9QVVJHQVRPUllfU1JDUyArPSBwdXJnYXRvcnkvYXJjaC8KKyB4ODZfNjRfUFVSR0FUT1JZX1NSQ1MgKz0gcHVyZ2F0b3J5L2FyY2gvaTM4Ni92Z2EuYworIHg4Nl82NF9QVVJHQVRPUllfU1JDUyArPSBwdXJnYXRvcnkvYXJjaC9pMzg2L3BpYy5jCisgCisteDg2XzY0X1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MgPSAtbWNtb2RlbD1sYXJnZQorK2lmZXEgKCQoU1VCQVJDSCksNjQpCisrICAgICAgICB4ODZfNjRfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUyA9IC1tY21vZGVsPWxhcmdlCisrZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjEwLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkYjk4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjEwLmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUga2V4ZWMtdG9vbHMuaW5jCitleHBvcnQgTERGTEFHUyA9ICItTCR7U1RBR0lOR19MSUJESVJ9IgorRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtemxpYj15ZXMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8va2V4ZWMtYWFyY2g2NC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8va2V4ZWMteDMyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaCBcCisgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2Y2I0ZDIyYmNlYzcxYjZlMDcwYWE4ZTlkOTkwYTVlNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMzFiYjgzZGVlZjk1NDdhMjhlOGNmYzFmMDkxNmU3MGY4ZTZiOTJhNmJkMmVmNzA3N2UxMmUzMzM4MjM5YWYzIgorCitQQUNLQUdFUyA9KyAia2V4ZWMga2R1bXAgdm1jb3JlLWRtZXNnIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2V4ZWMga2R1bXAgdm1jb3JlLWRtZXNnIgorCitGSUxFU19rZXhlYyA9ICIke3NiaW5kaXJ9L2tleGVjIgorRklMRVNfa2R1bXAgPSAiJHtzYmluZGlyfS9rZHVtcCIKK0ZJTEVTX3ZtY29yZS1kbWVzZyA9ICIke3NiaW5kaXJ9L3ZtY29yZS1kbWVzZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWNiM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiCkBAIC0wLDAgKzEsNDggQEAKK1NVTU1BUlkgPSAiV3JhcHBlciBzY3JpcHQgZm9yIHRoZSBMaW51eCBrZXJuZWwgbW9kdWxlIGRlcGVuZGVuY3kgaW5kZXhlciIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKyMgVGhlIGtlcm5lbCBhbmQgdGhlIHN0YWdpbmcgZGlyIGZvciBpdCBpcyBtYWNoaW5lIHNwZWNpZmljCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBmb3IgdGhlIHNzdGF0ZSBjb2RlIHRvIHByb2Nlc3MgdGhlIHdyYXBwZXIKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJkZXBtb2R3cmFwcGVyIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisKKwljYXQgPiAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9kZXBtb2R3cmFwcGVyIDw8IEVPRgorIyEvYmluL3NoCisjIEV4cGVjdGVkIHRvIGJlIGNhbGxlZCBhczogZGVwbW9kd3JhcHBlciAtYSBLRVJORUxfVkVSU0lPTgoraWYgWyAiXCQxIiAhPSAiLWEiIC1vICJcJDIiICE9ICItYiIgXTsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiBkZXBtb2R3cmFwcGVyIC1hIC1iIHJvb3RmcyBLRVJORUxfVkVSU0lPTiIgPiYyCisgICAgZXhpdCAxCitmaQoraWYgWyAhIC1yICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2Qva2VybmVsLWFiaXZlcnNpb24gXTsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byByZWFkOiAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uIiA+JjIKK2Vsc2UKKyAgICBrZXJuZWxhYmk9XCQoY2F0ICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2Qva2VybmVsLWFiaXZlcnNpb24pCisgICAgaWYgWyAiXCRrZXJuZWxhYmkiICE9ICJcJDQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IEtlcm5lbCB2ZXJzaW9uIFwkNCBkb2VzIG5vdCBtYXRjaCBrZXJuZWwtYWJpdmVyc2lvbiAoXCRrZXJuZWxhYmkpIiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKK2ZpCisKK2lmIFsgISAtciAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL1N5c3RlbS5tYXAtXCQ0IF07IHRoZW4KKyAgICBlY2hvICJVbmFibGUgdG8gcmVhZDogJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLVwkNCIgPiYyCisgICAgZXhlYyBlbnYgZGVwbW9kICJcJDEiICJcJDIiICJcJDMiICJcJDQiCitlbHNlCisgICAgZXhlYyBlbnYgZGVwbW9kICJcJDEiICJcJDIiICJcJDMiIC1GICIke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL1N5c3RlbS5tYXAtXCQ0IiAiXCQ0IgorZmkKK0VPRgorCWNobW9kICt4ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2RlcG1vZHdyYXBwZXIKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJkZXBtb2R3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZGVwbW9kd3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTI3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK3JlcXVpcmUga21vZC5pbmMKKworREVQRU5EUyArPSAiemxpYi1uYXRpdmUiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9DaGFuZ2UtdG8tY2FsbGluZy1ic3dhcF8taW5zdGVhZC1vZi1odG9iZS1hbmQtYmUtdG9oLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKXsKKwlmb3IgdG9vbCBpbiBkZXBtb2QgaW5zbW9kIGxzbW9kIG1vZGluZm8gbW9kcHJvYmUgcm1tb2QKKwlkbworCQlsbiAtcyBrbW9kICR7RH0ke2JpbmRpcn0vJHRvb2wKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhYTY3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYwpAQCAtMCwwICsxLDQzIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCitTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5hZ2luZyBMaW51eCBrZXJuZWwgbW9kdWxlcyIKK0RFU0NSSVBUSU9OID0gImttb2QgaXMgYSBzZXQgb2YgdG9vbHMgdG8gaGFuZGxlIGNvbW1vbiB0YXNrcyB3aXRoIExpbnV4IGtlcm5lbCBtb2R1bGVzIGxpa2UgXAorICAgICAgICAgICAgICAgaW5zZXJ0LCByZW1vdmUsIGxpc3QsIGNoZWNrIHByb3BlcnRpZXMsIHJlc29sdmUgZGVwZW5kZW5jaWVzIGFuZCBhbGlhc2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5wcm9mdXNpb24ubW9iaS9rbW9kLyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCsgJiBMR1BMLTIuMSsiCitMSUNFTlNFX2xpYmttb2QgPSAiTEdQTC0yLjErIgorU0VDVElPTiA9ICJiYXNlIgorCitERVBFTkRTICs9ICJwa2djb25maWctbmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJrbW9kL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAiCitpbmhlcml0IGF1dG90b29scyBndGstZG9jCisKK1NSQ1JFViA9ICIwZDgzMzcxNWVhYTY1NjM2ZGRhMjcwNWI4OTM1OWExZTAxNTRkYzU4IgorIyBMb29rb3V0IGZvciBQViBidW1wIHRvbyB3aGVuIFNSQ1JFViBpcyBjaGFuZ2VkCitQViA9ICIyMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2tlcm5lbC9rbW9kL2ttb2QuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2RlcG1vZC1zZWFyY2guY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtT19DTE9FWEVDLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0taW5zdGFsbCAtLXN5bWxpbmsiCitFWFRSQV9PRUNPTkYgKz0iIC0tZW5hYmxlLXRvb2xzIC0tZGlzYWJsZS1tYW5wYWdlcyAtLXdpdGgtemxpYiIKKworUEFDS0FHRUNPTkZJR1tkZWJ1Z10gPSAiLS1lbmFibGUtZGVidWcsLS1kaXNhYmxlLWRlYnVnIgorUEFDS0FHRUNPTkZJR1tsb2dnaW5nXSA9ICIgLS1lbmFibGUtbG9nZ2luZywtLWRpc2FibGUtbG9nZ2luZyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICBndGtkb2NpemUgLS1kb2NkaXIgJHtTfS9saWJrbW9kL2RvY3MgfHwgdG91Y2ggJHtTfS9saWJrbW9kL2RvY3MvZ3RrLWRvYy5tYWtlCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCXNlZCAtaSAncyN9bGlidG9vbCN9JHtUQVJHRVRfU1lTfS1saWJ0b29sIycgJHtCfS9kb2x0bGlidG9vbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL0NoYW5nZS10by1jYWxsaW5nLWJzd2FwXy1pbnN0ZWFkLW9mLWh0b2JlLWFuZC1iZS10b2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyMjE4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL0NoYW5nZS10by1jYWxsaW5nLWJzd2FwXy1pbnN0ZWFkLW9mLWh0b2JlLWFuZC1iZS10b2gucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorU3ViamVjdDogQ2hhbmdlIHRvIGNhbGxpbmcgYnN3YXBfKiBpbnN0ZWFkIG9mIGh0b2JlKiBhbmQgYmUqdG9oCisKK1dlIGNhbid0IHVzZSBodG9iZSogYW5kIGJlKnRvaCBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBub3QKK2F2YWlsYWJsZSBvbiBvbGRlciB2ZXJzaW9ucyBvZiBnbGliYywgRm9yIGV4YW1wbGUsIHNoaXBwZWQgb24gQ2VudG9zIDUuNS4KKworQ2hhbmdlIHRvIGRpcmVjdGx5IGNhbGxpbmcgYnN3YXBfKiBhcyBkZWZpbmVkIGluK2J5dGVzd2FwLmguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYyBiL2xpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYworaW5kZXggNmZjMDZmYy4uOTEyMTg1YSAxMDA2NDQKKy0tLSBhL2xpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYworKysrIGIvbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jCitAQCAtMTgsNiArMTgsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitAQCAtMTI3LDcgKzEyOCw3IEBAIGJvb2wga21vZF9tb2R1bGVfc2lnbmF0dXJlX2luZm8oY29uc3Qgc3RydWN0IGttb2RfZmlsZSAqZmlsZSwgc3RydWN0IGttb2Rfc2lnbmF0CisgCQkJbW9kc2lnLT5oYXNoID49IFBLRVlfSEFTSF9fTEFTVCB8fAorIAkJCW1vZHNpZy0+aWRfdHlwZSA+PSBQS0VZX0lEX1RZUEVfX0xBU1QpCisgCQlyZXR1cm4gZmFsc2U7CistCXNpZ19sZW4gPSBiZTMydG9oKGdldF91bmFsaWduZWQoJm1vZHNpZy0+c2lnX2xlbikpOworKwlzaWdfbGVuID0gYnN3YXBfMzIoZ2V0X3VuYWxpZ25lZCgmbW9kc2lnLT5zaWdfbGVuKSk7CisgCWlmIChzaWdfbGVuID09IDAgfHwKKyAJICAgIHNpemUgPCAoaW50NjRfdCkobW9kc2lnLT5zaWduZXJfbGVuICsgbW9kc2lnLT5rZXlfaWRfbGVuICsgc2lnX2xlbikpCisgCQlyZXR1cm4gZmFsc2U7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhZmNiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0F2b2lkIHBhcmFsbGVsLXRlc3RzIGFzIGl0IHJlbW92ZQorYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMgcmVxdWlyZWQgYnkgcHRlc3QuCitJbiBhdXRvbWFrZSAxLjEzLjQgcGFyYWxsZWwtdGVzdHMgaXMgYXNzdW1lZCBieSBkZWZhdWxzLgorSW4gb3JkZXIgdG8gaGF2ZSBidWlsZHRlc3QtVEVTVFMgYW5kIHJ1bnRlc3QtVEVTVFMgdGFyZ2V0cworc2VyaWFsLXRlc3RzIGlzIG5vdyByZXF1aXJlZAorCitTaWduZWQtb2ZmLWJ5OiBUdWRvciBGbG9yZWEgPHR1ZG9yLmZsb3JlYUBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoZGlzYWJsZSBmZWF0dXJlIGluY29tcGF0aWJsZSB3aXRoIHB0ZXN0KSAKKworLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlYjBmOWQxLi5hNTM5OTY4IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNCw3ICsxNCw3IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX1NZU19MQVJHRUZJTEUKKyBBQ19QUkVGSVhfREVGQVVMVChbL3Vzcl0pCisgQU1fTUFJTlRBSU5FUl9NT0RFKFtlbmFibGVdKQorLUFNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIHNpbGVudC1ydWxlcyB0YXItcGF4IG5vLWRpc3QtZ3ppcCBkaXN0LXh6IHN1YmRpci1vYmplY3RzIGNvbG9yLXRlc3RzIHBhcmFsbGVsLXRlc3RzXSkKKytBTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSBzaWxlbnQtcnVsZXMgdGFyLXBheCBuby1kaXN0LWd6aXAgZGlzdC14eiBzdWJkaXItb2JqZWN0cyBjb2xvci10ZXN0cyBzZXJpYWwtdGVzdHNdKQorIEFNX1NJTEVOVF9SVUxFUyhbeWVzXSkKKyBMVF9JTklUKFtkaXNhYmxlLXN0YXRpYyBwaWMtb25seV0pCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZiBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjdjMGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZGVwbW9kLXNlYXJjaC5jb25mCkBAIC0wLDAgKzEsNiBAQAorIworIyAvZXRjL2RlcG1vZC5kL2RlcG1vZC5jb25mCisjCisKK3NlYXJjaCB1cGRhdGVzIGV4dHJhbW9kdWxlcyBidWlsdC1pbgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZml4LU9fQ0xPRVhFQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTYxZDYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZml4LU9fQ0xPRVhFQy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGJkNDMzNjdlZWU4NjgwNTk3NzAxODhmZDllOWRiMzg1MjBkYzZmZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjIgSmFuIDIwMTQgMDE6MDY6NDAgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGlia21vZC9saWJrbW9kLWludGVybmFsLmg6IGNoZWNrIHdoZXRoZXIgT19DTE9FWEVDIGlzCisgZGVmaW5lZCBvciBub3QKKworT19DTE9FWEVDIGlzIGludHJvZHVjZWQgZnJvbSBMaW51eCAyLjYuMjMsIHNvIG9sZCBrZXJuZWwgZG9lc24ndCBoYXZlCitpdCwgd2UgbmVlZCBjaGVjayBiZWZvcmUgdXNlLgorCitUaGlzIHBhdGNoIGlzIG11Y2ggbW9yZSBsaWtlIGEgd29ya2Fyb3VuZCwgc2luY2UgaXQgbWF5IG5lZWQgZmNudGwoKSB1c2UKK0ZEX0NMT0VYRUMgdG8gcmVwbGFjZS4KKworVGhpcyBwcm9ibGVtIHdhcyByZXBvcnRlZCBieSAiVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPiIKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlia21vZC9saWJrbW9kLWludGVybmFsLmggYi9saWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaAoraW5kZXggMDE4MDEyNC4uMTAwYjQwZiAxMDA2NDQKKy0tLSBhL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oCisrKysgYi9saWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaAorQEAgLTksNiArOSwxMCBAQAorICNpbmNsdWRlICJtYWNyby5oIgorICNpbmNsdWRlICJsaWJrbW9kLmgiCisgCisrI2lmbmRlZiBPX0NMT0VYRUMKKysjZGVmaW5lIE9fQ0xPRVhFQyAwCisrI2VuZGlmCisrCisgc3RhdGljIF9hbHdheXNfaW5saW5lXyBfcHJpbnRmX2Zvcm1hdF8oMiwgMykgdm9pZAorIAlrbW9kX2xvZ19udWxsKHN0cnVjdCBrbW9kX2N0eCAqY3R4LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikge30KKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzFkYmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcHRlc3QucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkICdpbnN0YWxsLXB0ZXN0JyBydWxlLgorCitTaWduZWQtb2ZmLWJ5OiBUdWRvciBGbG9yZWEgPHR1ZG9yLmZsb3JlYUBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC1ydU4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDEzLTA3LTEyIDE3OjExOjA1LjI3ODMzMTU1NyArMDIwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0wNy0xMiAxNzoxNDoyNy4wMzM3ODgwMTYgKzAyMDAKK0BAIC0yMDQsNiArMjA0LDE2IEBACisgCisgZGlzdGNsZWFuLWxvY2FsOiAkKERJU1RDTEVBTl9MT0NBTF9IT09LUykKKyAKKytpbnN0YWxsLXB0ZXN0OgorKwlAJChNS0RJUl9QKSAkKERFU1RESVIpL3Rlc3RzdWl0ZQorKwlAZm9yIGZpbGUgaW4gJChURVNUU1VJVEUpOyBkbyBcCisrCQlpbnN0YWxsICQkZmlsZSAkKERFU1RESVIpL3Rlc3RzdWl0ZTsgXAorKwlkb25lOworKwlAc2VkIC1lICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyA8IE1ha2VmaWxlID4gJChERVNURElSKS9NYWtlZmlsZQorKwlAJChNS0RJUl9QKSAkKERFU1RESVIpL3Rvb2xzCisrCUBjcCAkKG5vaW5zdF9TQ1JJUFRTKSAkKG5vaW5zdF9QUk9HUkFNUykgJChERVNURElSKS90b29scworKwlAY3AgLXIgdGVzdHN1aXRlL3Jvb3RmcyB0ZXN0c3VpdGUvLmxpYnMgJChERVNURElSKS90ZXN0c3VpdGUKKysKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgY3VzdG9tIHJlbGVhc2UgaGVscGVycworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTk4ZGQyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAordG91Y2ggdGVzdHN1aXRlL3N0YW1wLXJvb3RmcwordGFyIHhmIHRlc3Rtb2R1bGUudGFyCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMgMj4vZGV2L251bGx8IGdyZXAgLWUgXlBBU1MgLWUgXkZBSUwKK2ZpbmQgdGVzdHN1aXRlIC1uYW1lICoua28gLWV4ZWMgcm0gLWYge30gXDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTRkODVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2RfZ2l0LmJiCkBAIC0wLDAgKzEsNjMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK3JlcXVpcmUga21vZC5pbmMKKworREVQRU5EUyArPSAiemxpYiIKK1BST1ZJREVTICs9ICJtb2R1bGUtaW5pdC10b29scy1pbnNtb2Qtc3RhdGljIG1vZHVsZS1pbml0LXRvb2xzLWRlcG1vZCBtb2R1bGUtaW5pdC10b29scyIKK1JQUk9WSURFU18ke1BOfSArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCitSQ09ORkxJQ1RTXyR7UE59ICs9ICJtb2R1bGUtaW5pdC10b29scy1pbnNtb2Qtc3RhdGljIG1vZHVsZS1pbml0LXRvb2xzLWRlcG1vZCBtb2R1bGUtaW5pdC10b29scyIKK1JSRVBMQUNFU18ke1BOfSArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCisKKyMgdG8gZm9yY2UgdXNlciB0byByZW1vdmUgb2xkIG1vZHVsZS1pbml0LXRvb2xzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBrbW9kIHZhcmlhbnRzCitSQ09ORkxJQ1RTX2xpYmttb2QyICs9ICJtb2R1bGUtaW5pdC10b29scy1pbnNtb2Qtc3RhdGljIG1vZHVsZS1pbml0LXRvb2xzLWRlcG1vZCBtb2R1bGUtaW5pdC10b29scyIKKworIyBhdXRvdG9vbHMgc2V0IHByZWZpeCB0byAvdXNyLCBob3dldmVyIHdlIHdhbnQgdGhlbSBpbiAvYmluIGFuZCAvc2JpbgorYmluZGlyID0gIiR7YmFzZV9iaW5kaXJ9Igorc2JpbmRpciA9ICIke2Jhc2Vfc2JpbmRpcn0iCisjIGxpYmRpciA9ICIke2Jhc2VfbGliZGlyfSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX2JpbmRpcn0KKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7YmFzZV9zYmluZGlyfQorICAgICAgICAjIGFkZCBzeW1saW5rcyB0byBrbW9kCisgICAgICAgIGxuIC1zIC4uJHtiYXNlX2JpbmRpcn0va21vZCAke0R9JHtiYXNlX2JpbmRpcn0vbHNtb2QKKyAgICAgICAgZm9yIHRvb2wgaW4gaW5zbW9kIHJtbW9kIGRlcG1vZCBtb2RpbmZvIG1vZHByb2JlOyBkbworICAgICAgICAgICAgICAgIGxuIC1zIC4uJHtiYXNlX2JpbmRpcn0va21vZCAke0R9JHtiYXNlX3NiaW5kaXJ9LyR7dG9vbH0KKyAgICAgICAgZG9uZQorICAgICAgICAjIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7YmFzZV9saWJkaXJ9L2RlcG1vZC5kCisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2VfbGliZGlyfS9tb2Rwcm9iZS5kCisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2RlcG1vZC5kCisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQKKworICAgICAgICAjIGluc3RhbGwgZGVwbW9kLmQgZmlsZSBmb3Igc2VhcmNoLyBkaXIKKyAgICAgICAgaW5zdGFsbCAtRG02NDQgIiR7V09SS0RJUn0vZGVwbW9kLXNlYXJjaC5jb25mIiAiJHtEfSR7YmFzZV9saWJkaXJ9L2RlcG1vZC5kL3NlYXJjaC5jb25mIgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgICAgICAgICBzZWQgLWkgJ3MvYWNfcHdkPS8jYWNfcHdkPS8nIGNvbmZpZy5zdGF0dXMgOyBzZWQgLWkgIi8jYWNfcHdkPS9hXGFjX3B3ZD0nLiciIGNvbmZpZy5zdGF0dXMKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjYwIgorCitBTFRFUk5BVElWRV9rbW9kID0gImluc21vZCBtb2Rwcm9iZSBybW1vZCBtb2RpbmZvIGJpbi1sc21vZCBsc21vZCBkZXBtb2QiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbnNtb2RdID0gIiR7YmFzZV9zYmluZGlyfS9pbnNtb2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW9kcHJvYmVdID0gIiR7YmFzZV9zYmluZGlyfS9tb2Rwcm9iZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtybW1vZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3JtbW9kIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vZGluZm9dID0gIiR7YmFzZV9zYmluZGlyfS9tb2RpbmZvIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jpbi1sc21vZF0gPSAiJHtiYXNlX2JpbmRpcn0vbHNtb2QiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsc21vZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2xzbW9kIgorQUxURVJOQVRJVkVfVEFSR0VUW2xzbW9kXSA9ICIke2Jhc2VfYmluZGlyfS9sc21vZC4ke0JQTn0iCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkZXBtb2RdID0gIiR7YmFzZV9zYmluZGlyfS9kZXBtb2QiCisKK1BBQ0tBR0VTID0rICJsaWJrbW9kICR7UE59LWJhc2gtY29tcGxldGlvbiIKKworRklMRVNfbGlia21vZCA9ICIke2Jhc2VfbGliZGlyfS9saWJrbW9kKiR7U09MSUJTfSAke2xpYmRpcn0vbGlia21vZCoke1NPTElCU30iCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vZGVwbW9kLmQgJHtiYXNlX2xpYmRpcn0vbW9kcHJvYmUuZCIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvMDAwMS1SZWN0aWZ5LXRoZS1mdW5jdGlvbi1zaWduYXR1cmVzLXRvLWZpeC1wcm90b3R5cGUtbWlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDgxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvMDAwMS1SZWN0aWZ5LXRoZS1mdW5jdGlvbi1zaWduYXR1cmVzLXRvLWZpeC1wcm90b3R5cGUtbWlzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gZGIxMTI3MzlkYzRmNjA4YTk2OGI4MTA0YjM4Mjk1NWRjM2Q5NmNhMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDc6NDA6MTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVjdGlmeSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBmaXggcHJvdG90eXBlIG1pc21hdGNoZXMKKworY2xhbmcgaXMgbGVzcyBmb3JnaXZpbmcgd2hlbiBpdCBjb21lcyB0byBjb2Rpbmcgc3RhbmRhcmRzLCBjb3JyZWN0IHRoZQorZnVuY3Rpb24gc2lnbmF0dXJlcyB0byByZWZsZWN0IHRoZSBmdW5jdGlvbiBsb2dpYworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGZzeW5jLmMgICAgICB8IDcgKysrKy0tLQorIGxhdGVuY3l0b3AuaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZzeW5jLmMgYi9mc3luYy5jCitpbmRleCA4MmRmZjBlLi41Y2VmYmE5IDEwMDY0NAorLS0tIGEvZnN5bmMuYworKysrIGIvZnN5bmMuYworQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IGZzeW5jX2ZpbGVzIHsKKyBzdGF0aWMgR0xpc3QgKmZzeW5jX2RhdGE7CisgCisgCistc3RhdGljIGNoYWluX2ZpbGUoc3RydWN0IGZzeW5jX3Byb2Nlc3MgKnByb2MsIGNoYXIgKmZpbGVuYW1lKQorK3N0YXRpYyB2b2lkIGNoYWluX2ZpbGUoc3RydWN0IGZzeW5jX3Byb2Nlc3MgKnByb2MsIGNoYXIgKmZpbGVuYW1lKQorIHsKKyAJc3RydWN0IGZzeW5jX2ZpbGVzICpmaWxlOworIAlHTGlzdCAqaXRlbTsKK0BAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBjaGFpbl9maWxlKHN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jLCBjaGFyICpmaWxlbmFtZSkKKyAJcHJvYy0+ZmlsZXMgPSBnX2xpc3RfYXBwZW5kKHByb2MtPmZpbGVzLCBmaWxlKTsKKyB9CisgCistc3RhdGljIHJlcG9ydF9maWxlKGNoYXIgKnByb2Nlc3MsIGNoYXIgKmZpbGUpCisrc3RhdGljIHZvaWQgcmVwb3J0X2ZpbGUoY2hhciAqcHJvY2VzcywgY2hhciAqZmlsZSkKKyB7CisgCXN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jOworIAlHTGlzdCAqaXRlbTsKK0BAIC0xNTcsOSArMTU3LDEwIEBAIGludCBlbmFibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIiLCAiZnN5bmMiKTsJCisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvaXRlcl9jdHJsIiwgImZ0cmFjZV9wcmludGsiKTsJCisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIxIik7CisrCXJldHVybiByZXQ7CisgfQorIAorLWludCBkaXNhYmxlX2ZzeW5jX3RyYWNlcih2b2lkKQorK3ZvaWQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyB7CisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIwIik7CisgfQorZGlmZiAtLWdpdCBhL2xhdGVuY3l0b3AuaCBiL2xhdGVuY3l0b3AuaAoraW5kZXggNTM5NGQ3My4uOWQxMDdhOCAxMDA2NDQKKy0tLSBhL2xhdGVuY3l0b3AuaAorKysrIGIvbGF0ZW5jeXRvcC5oCitAQCAtNTQsNSArNTQsNSBAQCBleHRlcm4gY2hhciAqdHJhbnNsYXRlKGNoYXIgKmxpbmUpOworIGV4dGVybiB2b2lkIGluaXRfdHJhbnNsYXRpb25zKGNoYXIgKmZpbGVuYW1lKTsKKyBleHRlcm4gaW50IGZzeW5jX2Rpc3BsYXkoaW50IGR1cmF0aW9uKTsKKyBleHRlcm4gaW50IGVuYWJsZV9mc3luY190cmFjZXIodm9pZCk7CistZXh0ZXJuIGludCBkaXNhYmxlX2ZzeW5jX3RyYWNlcih2b2lkKTsKKytleHRlcm4gdm9pZCBkaXNhYmxlX2ZzeW5jX3RyYWNlcih2b2lkKTsKKyBleHRlcm4gdm9pZCB1cGRhdGVfbGlzdCh2b2lkKTsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtZnN5bmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1mc3luYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODQ4Y2NmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtZnN5bmMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorbGludXg6IHN5c2ZzOiB1c2UgdHJhY2luZ19vbiBhcyB0cmFjaW5nX2VuYWJsZWQgaXMgZGVwcmVjYXRlZAorCit0cmFjaW5nX2VuYWJsZWQgdXNlIGluIHRoZSBrZXJuZWwgaXMgYmVpbmcgZGVwcmVjYXRlZCBhcyBwZXIgY29tbWl0Cis2NzUyYWI0YTljMzAgW3RyYWNpbmc6IERlcHJlY2F0ZSB0cmFjaW5nX2VuYWJsZWQgZm9yIHRyYWNpbmdfb25dIGluCit0aGUgbGludXggbWFpbmxpbmUga2VybmVsLiB0cmFjaW5nX2VuYWJsZWQgdXNlIHdpbGwgZ2VuZXJhdGUgYSB3YXJuaW5nCithbmQgbWF5IG5vIGxvbmdlciBmdW5jdGlvbiBhcyBleHBlY3RlZCwgdGhlcmVmb3JlIG1vdmUgdG8gdXNlIHRyYWNpbmdfb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEZW5uaXMgSGFsbCA8ZGVubmlzLmhhbGxAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxhdGVuY3l0b3AtMC41L2ZzeW5jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYXRlbmN5dG9wLTAuNS5vcmlnL2ZzeW5jLmMJMjAxMi0wOC0wMyAxMDo0NTo0OS4wMDAwMDAwMDAgLTA0MDAKKysrKyBsYXRlbmN5dG9wLTAuNS9mc3luYy5jCTIwMTItMDgtMDMgMTA6NDg6MzkuMDAwMDAwMDAwIC0wNDAwCitAQCAtMTQ5LDE5ICsxNDksMTkgQEAKKyAgKiBjZCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nCisgICogZWNobyBmc3luYyA+IGN1cnJlbnRfdHJhY2VyCisgICogZWNobyBmdHJhY2VfcHJpbnRrID4gaXRlcl9jdHJsIAorLSAqIGVjaG8gMSA+IHRyYWNpbmdfZW5hYmxlZAorKyAqIGVjaG8gMSA+IHRyYWNpbmdfb24KKyAgKi8KKyAJcmV0ID0gc3lzdGVtKCIvYmluL21vdW50IC10IGRlYnVnZnMgbm9uZSAvc3lzL2tlcm5lbC9kZWJ1Zy8iKTsKKyAJaWYgKCFyZXQpIAorIAkJcmV0dXJuIC0xOworIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyIiwgImZzeW5jIik7CQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2l0ZXJfY3RybCIsICJmdHJhY2VfcHJpbnRrIik7CQorLQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIxIik7CisrCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIxIik7CisgfQorIAorIGludCBkaXNhYmxlX2ZzeW5jX3RyYWNlcih2b2lkKQorIHsKKy0Jd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMCIpOworKwl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMCIpOworIH0KKyAKKyAKK0BAIC0zMzksOCArMzM5LDggQEAKKyAJCWlmIChjdXJkdXJhdGlvbiA+IDUpCisgCQkJY3VyZHVyYXRpb24gPSA1OworIAkJLyogY2xlYXIgdGhlIGZ0cmFjZSBidWZmZXIgKi8KKy0JCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkIiwgIjAiKTsKKy0JCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkIiwgIjEiKTsKKysJCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIwIik7CisrCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMSIpOworIAkJa2V5ID0gc2VsZWN0KDEsICZyZmRzLCBOVUxMLCBOVUxMLCAmZW5kKTsKKyAJCXBhcnNlX2Z0cmFjZSgpOworIAkJcHJpbnRfZ2xvYmFsX2xpc3QoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmMjE3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5vcmlnIGIvTWFrZWZpbGUKK2luZGV4IDE2YTIzNjkuLmZhNzk3YTIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5vcmlnCisrKysgYi9NYWtlZmlsZQorQEAgLTEsMTAgKzEsMTEgQEAKKy0jIEZJWE1FOiBVc2UgYXV0b2NvbmYgPworLUhBU19HVEtfR1VJID0gMQorKyMgVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorKyMgU2lnbmVkLW9mZi1ieTogSmFjayBNaXRjaGVsbCA8amFjay5taXRjaGVsbEBkYmJyb2FkY2FzdC5jby51az4KKyAKKyBERVNURElSID0KKyBTQklORElSID0gL3Vzci9zYmluCisgWENGTEFHUyA9IC1XICAtZyBgcGtnLWNvbmZpZyAtLWNmbGFncyBnbGliLTIuMGAgLURfRk9SVElGWV9TT1VSQ0U9MiAtV25vLXNpZ24tY29tcGFyZQorLUxERiA9IC1XbCwtLWFzLW5lZWRlZCBgcGtnLWNvbmZpZyAtLWxpYnMgZ2xpYi0yLjBgICAgLWxuY3Vyc2VzdyAKKytMREYgPSAtV2wsLS1hcy1uZWVkZWQgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAgIC1sbmN1cnNlcworK0NDID89IGdjYworIAorIE9CSlM9IGxhdGVuY3l0b3AubyB0ZXh0X2Rpc3BsYXkubyB0cmFuc2xhdGUubyBmc3luYy5vCisgCitAQCAtMjYsMTYgKzI3LDE3IEBAIGVuZGlmCisgCisgIyBXZSB3cml0ZSBleHBsaWNpdHkgdGhpcyAiaW1wbGljaXQgcnVsZSIKKyAlLm8gOiAlLmMKKy0JZ2NjIC1jICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQ8IC1vICRACisrCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQ8IC1vICRACisgCisgbGF0ZW5jeXRvcDogICQoT0JKUykgbGF0ZW5jeXRvcC5oIE1ha2VmaWxlCistCWdjYyAkKENGTEFHUykgJChPQkpTKSAkKExERikgLW8gbGF0ZW5jeXRvcCAKKysJJChDQykgJChDRkxBR1MpICQoT0JKUykgJChMREYpIC1vIGxhdGVuY3l0b3AKKyAKKyBjbGVhbjoKKyAJcm0gLWYgKn4gbGF0ZW5jeXRvcCBERUFESk9FICoubworIAorIGluc3RhbGw6IGxhdGVuY3l0b3AKKyAJbWtkaXIgLXAgJChERVNURElSKS91c3Ivc2hhcmUvbGF0ZW5jeXRvcAorKwlta2RpciAtcCAkKERFU1RESVIpLyQoU0JJTkRJUikKKyAJaW5zdGFsbCAtbSAwNjQ0IGxhdGVuY3l0b3AudHJhbnMgJChERVNURElSKS91c3Ivc2hhcmUvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnRyYW5zCisgCWluc3RhbGwgLW0gMDY0NCAqLnBuZyAkKERFU1RESVIpL3Vzci9zaGFyZS9sYXRlbmN5dG9wLworIAlpbnN0YWxsIC1tIDA3NTUgbGF0ZW5jeXRvcCAkKERFU1RESVIpJChTQklORElSKS8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzFmMWJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3BfMC41LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiTGludXggdG9vbCBmb3IgbWVhc3VyaW5nIGFuZCBmaXhpbmcgbGF0ZW5jeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGF0ZW5jeXRvcC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGF0ZW5jeXRvcC5jO2VuZGxpbmU9MjM7bWQ1PWVlOWVhOWIxNDE1MzU2ZTU3MzRhZGFkNGE4N2RjN2ZhIgorCitERVBFTkRTID0gInZpcnR1YWwvbGliaW50bCBuY3Vyc2VzIGdsaWItMi4wIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvJHtCUE59LyR7QlB9LnRhci5nei83M2JiMzM3MWM2ZWUwYjBlNjhlMjUyODkwMjdlODY1Yy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICAgZmlsZTovL2xhdGVuY3l0b3AtbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2xhdGVuY3l0b3AtZnN5bmMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtUmVjdGlmeS10aGUtZnVuY3Rpb24tc2lnbmF0dXJlcy10by1maXgtcHJvdG90eXBlLW1pcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3M2JiMzM3MWM2ZWUwYjBlNjhlMjUyODkwMjdlODY1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZTdmNzJmYmVhN2JkOTE4ZTcxMjEyYTFlYWJhYWQ4NDg4ZDJjNjAyMjA1ZDJlM2M5NWQ2MmNkNTdlOTIwM2VmIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIiwsZ3RrKyIKKworRVhUUkFfT0VNQUtFX1ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJ0hBU19HVEtfR1VJPTEnLCAnJywgZCl9IgorCisjQ0ZMQUdTICs9ICIke0xERkxBR1N9IgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gJHtFWFRSQV9PRU1BS0VfWH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9maWxlcy8wMDAxLU1ha2VmaWxlLUFkZC1MREZMQUdTLXZhcmlhYmxlLXRvLVNMREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OWE3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9maWxlcy8wMDAxLU1ha2VmaWxlLUFkZC1MREZMQUdTLXZhcmlhYmxlLXRvLVNMREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMjcyYThhMDY5YThmNWYwNmExZTVkZmEwZWYxMmY1ZjkyOTg0NzI4YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5vb3IgPG5vb3JfYWhzYW5AbWVudG9yLmNvbT4KK0RhdGU6IFdlZCwgMTIgQXVnIDIwMTUgMjA6NTQ6MDAgKzA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IEFkZCBMREZMQUdTIHZhcmlhYmxlIHRvIFNMREZMQUdTLgorCisqIEFkZCBMREZMQUdTIHZhcmlhYmxlIHRvIFNMREZMQUdTIHNvIHRoYXQgZXh0cmEgbGlua2VyCisgIGZsYWdzIGNhbiBiZSBzZW50IHZpYSB0aGlzIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbcGVyZm1vbjItbGlicGZtNC1jb21taXRzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0KKworU2lnbmVkLW9mZi1ieTogTm9vciBBaHNhbiA8bm9vcl9haHNhbkBtZW50b3IuY29tPgorLS0tCisgbGliL01ha2VmaWxlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCitpbmRleCAxY2M4NzY1Li40YmQ5MmVmIDEwMDY0NAorLS0tIGEvbGliL01ha2VmaWxlCisrKysgYi9saWIvTWFrZWZpbGUKK0BAIC0xODcsNyArMTg3LDcgQEAgQ0ZMQUdTICs9IC1EQ09ORklHX1BGTUxJQl9DRUxMCisgZW5kaWYKKyAKKyBpZmVxICgkKFNZUyksTGludXgpCistU0xERkxBR1M9LXNoYXJlZCAtV2wsLXNvbmFtZSAtV2wsJChWTElCUEZNKQorK1NMREZMQUdTPSQoTERGTEFHUykgLXNoYXJlZCAtV2wsLXNvbmFtZSAtV2wsJChWTElCUEZNKQorIFNMSUJQRk09bGlicGZtLnNvLiQoVkVSU0lPTikuJChSRVZJU0lPTikuJChBR0UpCisgVkxJQlBGTT1saWJwZm0uc28uJChWRVJTSU9OKQorIFNPTElCRVhUPXNvCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmZGE5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJNb25pdG9yaW5nIHRvb2xzIGV4cGxvaXRpbmcgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZXZlbnRzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgbGlicmFyeSwgY2FsbGVkIGxpYnBmbTQgd2hpY2ggaXMgdXNlZCB0byBkZXZlbG9wIFwKK21vbml0b3JpbmcgdG9vbHMgZXhwbG9pdGluZyB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBldmVudHMgc3VjaCBhcyB0aG9zZSBcCitwcm92aWRlZCBieSB0aGUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0IChQTVUpIG9mIG1vZGVybiBwcm9jZXNzb3JzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZXJmbW9uMi5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE0NDgyMiZhdGlkPTc1OTk1MyZzb3VyY2U9bmF2YmFyIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBkZTQ4OGYzYmQ0NDI0ZTMwOGUyZTM5OWNiOTljNzg4IgorCitTRUNUSU9OID0gImRldmVsIgorCitDT01QQVRJQkxFX0hPU1QgPSAicG93ZXJwYzY0IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcGVyZm1vbjIvJHtCUE59L2xpYnBmbS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1NYWtlZmlsZS1BZGQtTERGTEFHUy12YXJpYWJsZS10by1TTERGTEFHUy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTA3N2I5MDIyNDQwZTQ5NTFkOTZmMmQwZTczYmQ0ODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWFiMWU1YjA0NzI1NTBmOTAzN2E4ODAwODM0ZjZiYzNiOTI3NjkwMDcwZjY5ZmFjMGI2NzI4NGI0YjA1ZmQ1ZiIKKworRVhUUkFfT0VNQUtFID0gIkRFU1RESVI9XCIke0R9XCIgUFJFRklYPVwiJHtwcmVmaXh9XCIgTElCRElSPVwiJHtsaWJkaXJ9XCIgTERDT05GSUc9XCJ0cnVlXCIiCitFWFRSQV9PRU1BS0VfYXBwZW5kX3Bvd2VycGMgPSAiIEFSQ0g9XCJwb3dlcnBjXCIiCitFWFRSQV9PRU1BS0VfYXBwZW5kX3Bvd2VycGM2NCA9ICIgQVJDSD1cInBvd2VycGNcIiBCSVRNT0RFPVwiNjRcIiIKKworUyA9ICIke1dPUktESVJ9L2xpYnBmbS0ke1BWfSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmODExN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYgpAQCAtMCwwICsxLDQzMyBAQAorU1VNTUFSWSA9ICJGaXJtd2FyZSBmaWxlcyBmb3IgdXNlIHdpdGggTGludXgga2VybmVsIgorU0VDVElPTiA9ICJrZXJuZWwiCisKK0xJQ0VOU0UgPSAiXAorICAgIEZpcm13YXJlLUFiaWxpcyBcCisgICAgJiBGaXJtd2FyZS1hZ2VyZSBcCisgICAgJiBGaXJtd2FyZS1hbWQtdWNvZGUgXAorICAgICYgRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IFwKKyAgICAmIEZpcm13YXJlLWNhMDEzMiBcCisgICAgJiBGaXJtd2FyZS1jaGVsc2lvX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWN3MTIwMCBcCisgICAgJiBGaXJtd2FyZS1kaWIwNzAwIFwKKyAgICAmIEZpcm13YXJlLWVuZV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1md19zc3RfMGYyOCBcCisgICAgJiBGaXJtd2FyZS1nbzcwMDcgXAorICAgICYgRmlybXdhcmUtaTI0MDBtIFwKKyAgICAmIEZpcm13YXJlLWlidF9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1pdDkxM3ggXAorICAgICYgRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1JbnRjU1NUMiBcCisgICAgJiBGaXJtd2FyZS1NYXJ2ZWxsIFwKKyAgICAmIEZpcm13YXJlLW13bDgzMzUgXAorICAgICYgRmlybXdhcmUtbXlyaTEwZ2VfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtT0xQQyBcCisgICAgJiBGaXJtd2FyZS1waGFuZncgXAorICAgICYgRmlybXdhcmUtcWF0X2RoODk1eGNjX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXFsYTJ4eHggXAorICAgICYgRmlybXdhcmUtcjhhNzc5eF91c2IzIFwKKyAgICAmIEZpcm13YXJlLXJhZGVvbiBcCisgICAgJiBGaXJtd2FyZS1yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXJhbGluay1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXRkYTc3MDYtZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdGktY29ubmVjdGl2aXR5IFwKKyAgICAmIEZpcm13YXJlLXVlYWdsZS1hdG00LWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXZpYV92dDY2NTYgXAorICAgICYgRmlybXdhcmUtd2wxMjUxIFwKKyAgICAmIEZpcm13YXJlLXhjNDAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDAgXAorICAgICYgRmlybXdhcmUteGM1MDAwYyBcCisgICAgJiBGaXJtd2FyZS1zaWFubyBcCisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9MSUNFTkNFLkFiaWxpczttZDU9YjVlZTNmNDEwNzgwZTU2NzExYWQ0OGVhZGMyMmI4YmMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmFnZXJlO21kNT1hZjAxMzNkZTZiNGE5YjI1MjJkZWZkNWYxODhhZmQzMSBcCisgICAgZmlsZTovL0xJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZTttZDU9MzBhMTRjNzgyM2JlZWRhYzlmYTM5YzY0ZmRkMDFhMTMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmJyb2FkY29tX2JjbTQzeHg7bWQ1PTMxNjBjMTRkZjcyMjg4OTFiODY4MDYwZTE5NTFkZmJjIFwKKyAgICBmaWxlOi8vTElDRU5DRS5jYTAxMzI7bWQ1PTIwOWIzM2U2NmVlNWJlMDQ2MWYxM2QzMWRhMzkyMTk4IFwKKyAgICBmaWxlOi8vTElDRU5DRS5jaGVsc2lvX2Zpcm13YXJlO21kNT04MTlhYThjM2ZhNDUzZjFiMjU4ZWQ4ZDE2OGE5ZDkwMyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuY3cxMjAwO21kNT1mMGY3NzA4NjRlN2E4NDQ0YTVjNWFhOWQxMmEzYTdlZCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuZW5lX2Zpcm13YXJlO21kNT1lZDY3ZjBmNjJmOGY3OTgxMzBjMjk2NzIwYjdkMzkyMSBcCisgICAgZmlsZTovL0xJQ0VOQ0UuZndfc3N0XzBmMjg7bWQ1PTYzNTM5MzFjOTg4YWQ1MjgxOGFlNzMzYWM2MWNkMjkzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5nbzcwMDc7bWQ1PWMwYmI5ZjZhYWFiYTU1YjA1MjllZTliMzBhYTY2YmViIFwKKyAgICBmaWxlOi8vTElDRU5DRS5pMjQwMG07bWQ1PTE0YjkwMTk2OWUyM2M0MTg4MTMyN2MwZDllNGI3ZDM2IFwKKyAgICBmaWxlOi8vTElDRU5DRS5pYnRfZmlybXdhcmU7bWQ1PWZkYmVlMWRkZmUwZmI3YWIwYjJmY2Q2YjQ1NGEzNjZiIFwKKyAgICBmaWxlOi8vTElDRU5DRS5pdDkxM3g7bWQ1PTFmYmY3MjdiZmI2YTk0OTgxMGM0ZGJmYTdlNmNlNGY4IFwKKyAgICBmaWxlOi8vTElDRU5DRS5pd2x3aWZpX2Zpcm13YXJlO21kNT0zZmQ4NDI5MTFlYTkzYzI5Y2QzMjY3OWFhMjNlMWM4OCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuSW50Y1NTVDI7bWQ1PTllN2Q4YmVhNzc2MTJkN2NjN2Q5ZTliNTRiNjIzMDYyIFwKKyAgICBmaWxlOi8vTElDRU5DRS5NYXJ2ZWxsO21kNT05ZGRlYTE3MzRhNGJhZjNjNzhkODQ1MTUxZjQyYTM3YSBcCisgICAgZmlsZTovL0xJQ0VOQ0UubXdsODMzNTttZDU9OWE2MjcxZWUwZTY0NDQwNGIyZmYzYzYxZmQwNzA5ODMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLm15cmkxMGdlX2Zpcm13YXJlO21kNT00MmUzMmZiODlmNmI5NTljYTIyMmUyNWFjOGRmOGZlZCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuT0xQQzttZDU9NWI5MTdmOWQ4YzA2MTk5MWJlNGY2ZjVmMTA4NzE5Y2QgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnBoYW5mdzttZDU9OTU0ZGNlYzBlMDUxZjk0MDk4MTJiNTYxZWE3NDNiZmEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnFhdF9kaDg5NXhjY19maXJtd2FyZTttZDU9OWU3ZDhiZWE3NzYxMmQ3Y2M3ZDllOWI1NGI2MjMwNjIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnFsYTJ4eHg7bWQ1PWY1Y2U4NTI5ZWM1YzE3Y2I3ZjkxMWQyNzIxZDkwZTkxIFwKKyAgICBmaWxlOi8vTElDRU5DRS5yOGE3Nzl4X3VzYjM7bWQ1PTRjMTY3MTY1NjE1MzAyNWQ3MDc2MTA1YTVkYTdlNDk4IFwKKyAgICBmaWxlOi8vTElDRU5DRS5yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlO21kNT03MjhmMWE4NWZkNTNmZDY3ZmE4ZDdhZmIwODBiYzQzNSBcCisgICAgZmlsZTovL0xJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dDttZDU9YWIyYzI2OTI3N2M0NTQ3NmZiNDQ5NjczOTExYTJkZmQgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0O21kNT0wMGQwNmNmZDNlZGRkNWEyNjk4OTQ4ZWFkMmFkNTRhNSBcCisgICAgZmlsZTovL0xJQ0VOQ0UudGRhNzcwNi1maXJtd2FyZS50eHQ7bWQ1PTgzNTk5N2NmNWUzYzEzMWQwZGRkZDY5NWM3ZDkxMDNlIFwKKyAgICBmaWxlOi8vTElDRU5DRS50aS1jb25uZWN0aXZpdHk7bWQ1PTE4NmU3YTQzY2Y2YzI3NDI4M2FkODEyNzJjYTIxOGVhIFwKKyAgICBmaWxlOi8vTElDRU5DRS51ZWFnbGUtYXRtNC1maXJtd2FyZTttZDU9NGVkN2VhNmI1MDdjY2M1ODNiOWQ1OTQ0MTc3MTQxMTggXAorICAgIGZpbGU6Ly9MSUNFTkNFLnZpYV92dDY2NTY7bWQ1PWU0MTU5Njk0Y2JhNDJkNDM3N2E5MTJlNzhhNmU4NTBmIFwKKyAgICBmaWxlOi8vTElDRU5DRS53bDEyNTE7bWQ1PWFkM2Y4MTkyMmJiOWUxOTcwMTRiYjE4NzI4OWQzYjViIFwKKyAgICBmaWxlOi8vTElDRU5DRS54YzQwMDA7bWQ1PTBmZjUxZDJkYzQ5ZmNlMDQ4MTRjOTE1NTA4MTA5MmYwIFwKKyAgICBmaWxlOi8vTElDRU5DRS54YzUwMDA7bWQ1PTFlMTcwYzEzMTc1MzIzYzMyYzdmNGQwOTk4ZDUzZjY2IFwKKyAgICBmaWxlOi8vTElDRU5DRS54YzUwMDBjO21kNT0xMmIwMmVmYTMwNDlkYjY1ZDUyNGFlYjQxOGRkODdjYSBcCisgICAgZmlsZTovL0xJQ0VOU0UuYW1kLXVjb2RlO21kNT0zYTBkZTQ1MTI1M2NjMWVkYmYzMGEzYzYyMWVmZmVlMyBcCisgICAgZmlsZTovL0xJQ0VOU0UuZGliMDcwMDttZDU9Zjc0MTE4MjVjOGE1NTVhMWEzZTVlYWI5Y2E3NzM0MzEgXAorICAgIGZpbGU6Ly9MSUNFTlNFLnJhZGVvbjttZDU9NmM3Zjk3YzZjNjJiZGQ5NTk2ZDAyMzhiYjIwNTExOGMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnNpYW5vO21kNT02MDJjNzlhZTNmOThmMWU3M2Q4ODBmZDlmOTQwYTQxOCBcCisiCisKKyMgVGhlc2UgYXJlIG5vdCBjb21tb24gbGljZW5zZXMsIHNldCBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIHRoZW0KKyMgc28gdGhhdCB0aGUgbGljZW5zZSBmaWxlcyB3aWxsIGJlIGNvcGllZCBmcm9tIGZldGNoZWQgc291cmNlCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtQWJpbGlzXSA9ICJMSUNFTkNFLkFiaWxpcyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1hZ2VyZV0gPSAiTElDRU5DRS5hZ2VyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlXSA9ICJMSUNFTkNFLmF0aGVyb3NfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eF0gPSAiTElDRU5DRS5icm9hZGNvbV9iY200M3h4IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWNhMDEzMl0gPSAiTElDRU5DRS5jYTAxMzIiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtY2hlbHNpb19maXJtd2FyZV0gPSAiTElDRU5DRS5jaGVsc2lvX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWN3MTIwMF0gPSAiTElDRU5DRS5jdzEyMDAiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZW5lX2Zpcm13YXJlXSA9ICJMSUNFTkNFLmVuZV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1md19zc3RfMGYyOF0gPSAiTElDRU5DRS5md19zc3RfMGYyOCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1nbzcwMDddID0gIkxJQ0VOQ0UuZ283MDA3IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWkyNDAwbV0gPSAiTElDRU5DRS5pMjQwMG0iCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaWJ0X2Zpcm13YXJlXSA9ICJMSUNFTkNFLmlidF9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pdDkxM3hdID0gIkxJQ0VOQ0UuaXQ5MTN4IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWl3bHdpZmlfZmlybXdhcmVdID0gIkxJQ0VOQ0UuaXdsd2lmaV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1JbnRjU1NUMl0gPSAiTElDRU5DRS5JbnRjU1NUMiIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1NYXJ2ZWxsXSA9ICJMSUNFTkNFLk1hcnZlbGwiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtbXdsODMzNV0gPSAiTElDRU5DRS5td2w4MzM1IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLW15cmkxMGdlX2Zpcm13YXJlXSA9ICJMSUNFTkNFLm15cmkxMGdlX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLU9MUENdID0gIkxJQ0VOQ0UuT0xQQyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1waGFuZnddID0gIkxJQ0VOQ0UucGhhbmZ3IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXFhdF9kaDg5NXhjY19maXJtd2FyZV0gPSAiTElDRU5DRS5xYXRfZGg4OTV4Y2NfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcWxhMnh4eF0gPSAiTElDRU5DRS5xbGEyeHh4IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXI4YTc3OXhfdXNiM10gPSAiTElDRU5DRS5yOGE3Nzl4X3VzYjMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZV0gPSAiTElDRU5DRS5yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJhbGluay1maXJtd2FyZV0gPSAiTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmVdID0gIkxJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdGRhNzcwNi1maXJtd2FyZV0gPSAiTElDRU5DRS50ZGE3NzA2LWZpcm13YXJlLnR4dCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS10aS1jb25uZWN0aXZpdHldID0gIkxJQ0VOQ0UudGktY29ubmVjdGl2aXR5IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXVlYWdsZS1hdG00LWZpcm13YXJlXSA9ICJMSUNFTkNFLnVlYWdsZS1hdG00LWZpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXZpYV92dDY2NTZdID0gIkxJQ0VOQ0UudmlhX3Z0NjY1NiIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS13bDEyNTFdID0gIkxJQ0VOQ0Uud2wxMjUxIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNDAwMF0gPSAiTElDRU5DRS54YzQwMDAiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM1MDAwXSA9ICJMSUNFTkNFLnhjNTAwMCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzUwMDBjXSA9ICJMSUNFTkNFLnhjNTAwMGMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYW1kLXVjb2RlXSA9ICJMSUNFTlNFLmFtZC11Y29kZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1kaWIwNzAwXSA9ICJMSUNFTlNFLmRpYjA3MDAiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcmFkZW9uXSA9ICJMSUNFTlNFLnJhZGVvbiIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1zaWFub10gPSAiTElDRU5DRS5zaWFubyIKKworU1JDUkVWID0gIjc1Y2MzZWY4YmE2NzEyZmQ3MmMwNzNiMTdhNzkwMjgyMTM2Y2M3NDMiCitQRSA9ICIxIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9maXJtd2FyZS9saW51eC1maXJtd2FyZS5naXQiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYWxsYXJjaCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgICR7RH0vbGliL2Zpcm13YXJlLworCWNwIC1yICogJHtEfS9saWIvZmlybXdhcmUvCisKKwkjIEF2b2lkIE1ha2VmaWxlIHRvIGJlIGRlcGxveWVkCisJcm0gJHtEfS9saWIvZmlybXdhcmUvTWFrZWZpbGUKKworCSMgUmVtb3ZlIHVuYnVpbGQgZmlybXdhcmUgd2hpY2ggbmVlZHMgY21ha2UgYW5kIGJhc2gKKwlybSAke0R9L2xpYi9maXJtd2FyZS9jYXJsOTE3MGZ3IC1yZgorCisJIyBSZW1vdmUgcG9pbnRsZXNzIGJhc2ggc2NyaXB0CisJcm0gJHtEfS9saWIvZmlybXdhcmUvY29uZmlndXJlCisKKwkjIExpYmVydGFzIHNkODY4NgorCWxuIC1zZiBsaWJlcnRhcy9zZDg2ODZfdjkuYmluICR7RH0vbGliL2Zpcm13YXJlL3NkODY4Ni5iaW4KKwlsbiAtc2YgbGliZXJ0YXMvc2Q4Njg2X3Y5X2hlbHBlci5iaW4gJHtEfS9saWIvZmlybXdhcmUvc2Q4Njg2X2hlbHBlci5iaW4KKworCSMgZml4dXAgd2wxMnh4IGxvY2F0aW9uLCBhZnRlciAyLjYuMzcgdGhlIGtlcm5lbCBzZWFyY2hlcyBhIGRpZmZlcmVudCBsb2NhdGlvbiBmb3IgaXQKKwkoIGNkICR7RH0vbGliL2Zpcm13YXJlIDsgbG4gLXNmIHRpLWNvbm5lY3Rpdml0eS8qIC4gKQorfQorCisKK1BBQ0tBR0VTID0rICIke1BOfS1yYWxpbmstbGljZW5zZSAke1BOfS1yYWxpbmsgXAorICAgICAgICAgICAgICR7UE59LXJhZGVvbi1saWNlbnNlICR7UE59LXJhZGVvbiBcCisgICAgICAgICAgICAgJHtQTn0tbWFydmVsbC1saWNlbnNlICR7UE59LXNkODY4NiAke1BOfS1zZDg3ODcgJHtQTn0tc2Q4Nzk3IFwKKyAgICAgICAgICAgICAke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSAke1BOfS13bDEyeHggJHtQTn0td2wxOHh4IFwKKyAgICAgICAgICAgICAke1BOfS12dDY2NTYtbGljZW5zZSAke1BOfS12dDY2NTYgXAorICAgICAgICAgICAgICR7UE59LXJ0bC1saWNlbnNlICR7UE59LXJ0bDgxOTJjdSAke1BOfS1ydGw4MTkyY2UgJHtQTn0tcnRsODE5MnN1IFwKKyAgICAgICAgICAgICAke1BOfS1icm9hZGNvbS1saWNlbnNlICR7UE59LWJjbTQzMjkgJHtQTn0tYmNtNDMzMCAke1BOfS1iY200MzM0IFwKKyAgICAgICAgICAgICAke1BOfS1hdGhlcm9zLWxpY2Vuc2UgJHtQTn0tYXI5MTcwICR7UE59LWFyM2sgJHtQTn0tYXRoNmsgJHtQTn0tYXRoOWsgXAorICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLWxpY2Vuc2UgJHtQTn0taXdsd2lmaS0xMzUtNiBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS0zMTYwLTcgJHtQTn0taXdsd2lmaS0zMTYwLTggJHtQTn0taXdsd2lmaS0zMTYwLTkgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjAwMC00ICR7UE59LWl3bHdpZmktNjAwMGcyYS01ICR7UE59LWl3bHdpZmktNjAwMGcyYS02IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTYwMDBnMmItNSAke1BOfS1pd2x3aWZpLTYwMDBnMmItNiBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDUwLTQgJHtQTn0taXdsd2lmaS02MDUwLTUgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNzI2MC03ICR7UE59LWl3bHdpZmktNzI2MC04ICR7UE59LWl3bHdpZmktNzI2MC05IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTcyNjUtOCAke1BOfS1pd2x3aWZpLTcyNjUtOSBcCisgICAgICAgICAgICAgXAorICAgICAgICAgICAgICR7UE59LWxpY2Vuc2UgXAorICAgICAgICAgICAgICIKKworIyBGb3IgYXRoZXJvcworTElDRU5TRV8ke1BOfS1hcjkxNzAgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tYXIzayA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1hdGg2ayA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1hdGg5ayA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorCitGSUxFU18ke1BOfS1hdGhlcm9zLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLmF0aGVyb3NfZmlybXdhcmUiCitGSUxFU18ke1BOfS1hcjkxNzAgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hcjkxNzAqLmZ3IFwKKyIKK0ZJTEVTXyR7UE59LWFyM2sgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hcjNrIFwKKyIKK0ZJTEVTXyR7UE59LWF0aDZrID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXRoNmsgXAorIgorRklMRVNfJHtQTn0tYXRoOWsgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hcjkyNzEuZncgXAorICAvbGliL2Zpcm13YXJlL2FyNzAxMCouZncgXAorICAvbGliL2Zpcm13YXJlL2h0Y185MjcxLmZ3IFwKKyAgL2xpYi9maXJtd2FyZS9odGNfNzAxMC5mdyBcCisiCisKK1JERVBFTkRTXyR7UE59LWFyOTE3MCArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYXIzayArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYXRoNmsgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWF0aDlrICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCisKKyMgRm9yIHJhbGluaworTElDRU5TRV8ke1BOfS1yYWxpbmsgPSAiRmlybXdhcmUtcmFsaW5rLWZpcm13YXJlIgorCitGSUxFU18ke1BOfS1yYWxpbmstbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dCIKK0ZJTEVTXyR7UE59LXJhbGluayA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0Ki5iaW4gXAorIgorCitSREVQRU5EU18ke1BOfS1yYWxpbmsgKz0gIiR7UE59LXJhbGluay1saWNlbnNlIgorCisjIEZvciByYWRlb24KK0xJQ0VOU0VfJHtQTn0tcmFkZW9uID0gIkZpcm13YXJlLXJhZGVvbiIKKworRklMRVNfJHtQTn0tcmFkZW9uLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTlNFLnJhZGVvbiIKK0ZJTEVTXyR7UE59LXJhZGVvbiA9ICIgXAorICAvbGliL2Zpcm13YXJlL3JhZGVvbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXJhZGVvbiArPSAiJHtQTn0tcmFkZW9uLWxpY2Vuc2UiCisKKyMgRm9yIG1hcnZlbGwKK0xJQ0VOU0VfJHtQTn0tc2Q4Njg2ID0gIkZpcm13YXJlLU1hcnZlbGwiCitMSUNFTlNFXyR7UE59LXNkODc4NyA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgorTElDRU5TRV8ke1BOfS1zZDg3OTcgPSAiRmlybXdhcmUtTWFydmVsbCIKKworRklMRVNfJHtQTn0tbWFydmVsbC1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5NYXJ2ZWxsIgorRklMRVNfJHtQTn0tc2Q4Njg2ID0gIiBcCisgIC9saWIvZmlybXdhcmUvbGliZXJ0YXMvc2Q4Njg2X3Y5KiBcCisgIC9saWIvZmlybXdhcmUvc2Q4Njg2KiBcCisiCitGSUxFU18ke1BOfS1zZDg3ODcgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9tcnZsL3NkODc4N191YXBzdGEuYmluIFwKKyIKK0ZJTEVTXyR7UE59LXNkODc5NyA9ICIgXAorICAvbGliL2Zpcm13YXJlL21ydmwvc2Q4Nzk3X3VhcHN0YS5iaW4gXAorIgorCitSREVQRU5EU18ke1BOfS1zZDg2ODYgKz0gIiR7UE59LW1hcnZlbGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXNkODc4NyArPSAiJHtQTn0tbWFydmVsbC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tc2Q4Nzk3ICs9ICIke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UiCisKKyMgRm9yIHJ0bAorTElDRU5TRV8ke1BOfS1ydGw4MTkyY3UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tcnRsODE5MmNlID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LXJ0bDgxOTJzdSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgorCitGSUxFU18ke1BOfS1ydGwtbGljZW5zZSA9ICIgXAorICAvbGliL2Zpcm13YXJlL0xJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQgXAorIgorRklMRVNfJHtQTn0tcnRsODE5MmN1ID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnRsd2lmaS9ydGw4MTkyY3Vmdy5iaW4gXAorIgorRklMRVNfJHtQTn0tcnRsODE5MmNlID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiBcCisiCitGSUxFU18ke1BOfS1ydGw4MTkyc3UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydGx3aWZpL3J0bDg3MTJ1LmJpbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXJ0bDgxOTJjZSArPSAiJHtQTn0tcnRsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1ydGw4MTkyY3UgKz0gIiR7UE59LXJ0bC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tcnRsODE5MnN1ID0gIiR7UE59LXJ0bC1saWNlbnNlIgorCisjIEZvciB0aS1jb25uZWN0aXZpdHkKK0xJQ0VOU0VfJHtQTn0td2wxMnh4ID0gIkZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSIKK0xJQ0VOU0VfJHtQTn0td2wxOHh4ID0gIkZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSIKKworRklMRVNfJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSIKK0ZJTEVTXyR7UE59LXdsMTJ4eCA9ICIgXAorICAvbGliL2Zpcm13YXJlL3dsMTIqIFwKKyAgL2xpYi9maXJtd2FyZS9USSogXAorICAvbGliL2Zpcm13YXJlL3RpLWNvbm5lY3Rpdml0eSBcCisiCitGSUxFU18ke1BOfS13bDE4eHggPSAiIFwKKyAgL2xpYi9maXJtd2FyZS93bDE4KiBcCisgIC9saWIvZmlybXdhcmUvVEkqIFwKKyAgL2xpYi9maXJtd2FyZS90aS1jb25uZWN0aXZpdHkgXAorIgorCitSREVQRU5EU18ke1BOfS13bDEyeHggPSAiJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS13bDE4eHggPSAiJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UiCisKKyMgRm9yIHZ0NjY1NgorTElDRU5TRV8ke1BOfS12dDY2NTYgPSAiRmlybXdhcmUtdmlhX3Z0NjY1NiIKKworRklMRVNfJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnZpYV92dDY2NTYiCitGSUxFU18ke1BOfS12dDY2NTYgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS92bnR3dXNiLmZ3IFwKKyIKKworUkRFUEVORFNfJHtQTn0tdnQ2NjU2ID0gIiR7UE59LXZ0NjY1Ni1saWNlbnNlIgorCisjIEZvciBicm9hZGNvbQorIworIyBXQVJOSU5HOiBUaGUgQUxURVJOQVRJVkVfKiB2YXJpYWJsZXMgYXJlIG5vdCB1c2luZyAke1BOfSBiZWNhdXNlIG9mCisjIGEgYnVnIGluIGJpdGJha2U7IHdoZW4gdGhpcyBpcyBmaXhlZCBhbmQgYml0YmFrZSBsZWFybnMgaG93IHRvIHByb3BlcgorIyBwYXNzIHZhcmlhYmxlIGZsYWdzIHdpdGggZXhwYW5zaW9uIHdlIGNhbiByZXdvcmsgdGhpcyBwYXRjaC4KKworTElDRU5TRV8ke1BOfS1iY200MzI5ID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCitMSUNFTlNFXyR7UE59LWJjbTQzMzAgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKK0xJQ0VOU0VfJHtQTn0tYmNtNDMzNCA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgorCitGSUxFU18ke1BOfS1icm9hZGNvbS1saWNlbnNlID0gIiBcCisgIC9saWIvZmlybXdhcmUvTElDRU5DRS5icm9hZGNvbV9iY200M3h4IFwKKyIKK0ZJTEVTXyR7UE59LWJjbTQzMjkgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMyOS1zZGlvLmJpbiBcCisiCitGSUxFU18ke1BOfS1iY200MzMwID0gIiBcCisgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzAtc2Rpby5iaW4gXAorIgorRklMRVNfJHtQTn0tYmNtNDMzNCA9ICIgXAorICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzM0LXNkaW8uYmluIFwKKyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWMtc2Rpby5iaW4iCisKK0FMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzMzQgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMzNFticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzNC1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzMjkgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMyOVticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMyOS1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzMzAgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMzMFticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzMC1zZGlvLmJpbiIKKworUkRFUEVORFNfJHtQTn0tYmNtNDMyOSArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWJjbTQzMzAgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1iY200MzM0ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgorCisjIEZvciBpd2x3aWZpCitMSUNFTlNFXyR7UE59LWl3bHdpZmktMTM1LTYgICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktMzE2MC03ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktMzE2MC04ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktMzE2MC05ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMC00ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYS02ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjAwMGcyYi02ID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjA1MC00ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNjA1MC01ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNzI2MC03ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNzI2MC04ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNzI2MC05ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNzI2NS04ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWl3bHdpZmktNzI2NS05ICAgID0gIkZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUiCisKK0ZJTEVTXyR7UE59LWl3bHdpZmktbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuaXdsd2lmaV9maXJtd2FyZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktMTM1LTYgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTEzNS02LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS0zMTYwLTcgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTMxNjAtNy51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktMzE2MC04ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0zMTYwLTgudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTMxNjAtOSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMzE2MC05LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwLTQgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDAtNC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwZzJhLTUudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYS02LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJiLTUgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmItNS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMGcyYi02ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwZzJiLTYudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwNTAtNCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjA1MC00LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDUwLTUgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwNTAtNS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2MC03ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjYwLTcudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjAtOCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2MC04LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjYwLTkgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjAtOS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2NS04ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjY1LTgudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjUtOSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2NS05LnVjb2RlIgorCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTEzNS02ICAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTMxNjAtNyAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTMxNjAtOCAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTMxNjAtOSAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDAtNCAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwNTAtNCAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTYwNTAtNSAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTcyNjAtNyAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTcyNjAtOCAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTcyNjAtOSAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTcyNjUtOCAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1pd2x3aWZpLTcyNjUtOSAgICA9ICIke1BOfS1pd2x3aWZpLWxpY2Vuc2UiCisKKyMgRm9yIG90aGVyIGZpcm13YXJlcworIyBNYXliZSBzcGxpdCBvdXQgdG8gc2VwYXJhdGUgcGFja2FnZXMgd2hlbiBuZWVkZWQuCitMSUNFTlNFXyR7UE59ID0gIlwKKyAgICBGaXJtd2FyZS1BYmlsaXMgXAorICAgICYgRmlybXdhcmUtYWdlcmUgXAorICAgICYgRmlybXdhcmUtYW1kLXVjb2RlIFwKKyAgICAmIEZpcm13YXJlLWNhMDEzMiBcCisgICAgJiBGaXJtd2FyZS1jaGVsc2lvX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWN3MTIwMCBcCisgICAgJiBGaXJtd2FyZS1kaWIwNzAwIFwKKyAgICAmIEZpcm13YXJlLWVuZV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1md19zc3RfMGYyOCBcCisgICAgJiBGaXJtd2FyZS1nbzcwMDcgXAorICAgICYgRmlybXdhcmUtaTI0MDBtIFwKKyAgICAmIEZpcm13YXJlLWlidF9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1pdDkxM3ggXAorICAgICYgRmlybXdhcmUtbXdsODMzNSBcCisgICAgJiBGaXJtd2FyZS1teXJpMTBnZV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1PTFBDIFwKKyAgICAmIEZpcm13YXJlLXBoYW5mdyBcCisgICAgJiBGaXJtd2FyZS1xYXRfZGg4OTV4Y2NfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcWxhMnh4eCBcCisgICAgJiBGaXJtd2FyZS1yOGE3Nzl4X3VzYjMgXAorICAgICYgRmlybXdhcmUtcmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS10ZGE3NzA2LWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXVlYWdsZS1hdG00LWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXdsMTI1MSBcCisgICAgJiBGaXJtd2FyZS14YzQwMDAgXAorICAgICYgRmlybXdhcmUteGM1MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMGMgXAorIgorRklMRVNfJHtQTn0tbGljZW5zZSArPSAiL2xpYi9maXJtd2FyZS9MSUNFTioiCitGSUxFU18ke1BOfSArPSAiL2xpYi9maXJtd2FyZS8qIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWxpY2Vuc2UiCisKKyMgTWFrZSBsaW51eC1maXJtd2FyZSBkZXBlbmQgb24gYWxsIG9mIHRoZSBzcGxpdC1vdXQgcGFja2FnZXMuCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZmlybXdhcmVfcGtncyA9IG9lLnV0aWxzLnBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTX2xpbnV4LWZpcm13YXJlJywgJyAnICsgJyAnLmpvaW4oZmlybXdhcmVfcGtncykpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjZiYzFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYwpAQCAtMCwwICsxLDc1IEBACitTVU1NQVJZID0gIlNhbml0aXplZCBzZXQgb2Yga2VybmVsIGhlYWRlcnMgZm9yIHRoZSBDIGxpYnJhcnkncyB1c2UiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyAgICAgICAgICAgICAgICAgICAgICAgIFBMRUFTRSBSRUFEIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBZb3UncmUgcHJvYmFibHkgbG9va2luZyBoZXJlIHRoaW5raW5nIHlvdSBuZWVkIHRvIGNyZWF0ZSBzb21lIG5ldyBjb3B5CisjIG9mIGxpbnV4LWxpYmMtaGVhZGVycyBzaW5jZSB5b3UgaGF2ZSB5b3VyIG93biBjdXN0b20ga2VybmVsLiBUbyBwdXQgCisjIHRoaXMgc2ltcGx5LCB5b3UgRE8gTk9ULgorIworIyBXaHk/IFRoZXNlIGhlYWRlcnMgYXJlIHVzZWQgdG8gYnVpbGQgdGhlIGxpYmMuIElmIHlvdSBjdXN0b21pc2UgdGhlIAorIyBoZWFkZXJzIHlvdSBhcmUgY3VzdG9taXNpbmcgdGhlIGxpYmMgYW5kIHRoZSBsaWJjIGJlY29tZXMgbWFjaGluZQorIyBzcGVjaWZpYy4gTW9zdCBwZW9wbGUgZG8gbm90IGFkZCBjdXN0b20gbGliYyBleHRlbnNpb25zIHRvIHRoZSBrZXJuZWwKKyMgYW5kIGhhdmUgYSBtYWNoaW5lIHNwZWNpZmljIGxpYmMuCisjCisjIEJ1dCB5b3UgaGF2ZSBzb21lIGtlcm5lbCBoZWFkZXJzIHlvdSBuZWVkIGZvciBzb21lIGRyaXZlcj8gVGhhdCBpcyBmaW5lCisjIGJ1dCBnZXQgdGhlbSBmcm9tIFNUQUdJTkdfS0VSTkVMX0RJUiB3aGVyZSB0aGUga2VybmVsIGluc3RhbGxzIGl0c2VsZi4KKyMgVGhpcyB3aWxsIG1ha2UgdGhlIHBhY2thZ2UgdXNpbmcgdGhlbSBtYWNoaW5lIHNwZWNpZmljIGJ1dCB0aGlzIGlzIG11Y2gKKyMgYmV0dGVyIHRoYW4gaGF2aW5nIGEgbWFjaGluZSBzcGVjaWZpYyBDIGxpYnJhcnkuIFRoaXMgZG9lcyBtZWFuIHlvdXIgCisjIHJlY2lwZSBuZWVkcyBhIERFUEVORFMgKz0gInZpcnR1YWwva2VybmVsIiBidXQgYWdhaW4sIHRoYXQgaXMgZmluZSBhbmQKKyMgbWFrZXMgdG90YWwgc2Vuc2UuCisjCisjIFRoZXJlIGNhbiBhbHNvIGJlIGEgY2FzZSB3aGVyZSB5b3VyIGtlcm5lbCBleHRyZW1lbHkgb2xkIGFuZCB5b3Ugd2FudAorIyBhbiBvbGRlciBsaWJjIEFCSSBmb3IgdGhhdCBvbGQga2VybmVsLiBUaGUgaGVhZGVycyBpbnN0YWxsZWQgYnkgdGhpcworIyByZWNpcGUgc2hvdWxkIHN0aWxsIGJlIGEgc3RhbmRhcmQgbWFpbmxpbmUga2VybmVsLCBub3QgeW91ciBvd24gY3VzdG9tIAorIyBvbmUuCisjCisjIC0tIFJQCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3ODEwZmFiNzQ4N2ZiMGFhZDMyN2I3NmYxYmU3Y2Q3IgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIG1ham9yID0gZC5nZXRWYXIoIlBWIixUcnVlKS5zcGxpdCgnLicpWzBdCisgICAgaWYgbWFqb3IgPT0gIjMiOgorICAgICAgICBkLnNldFZhcigiSEVBREVSX0ZFVENIX1ZFUiIsICIzLjAiKQorICAgIGVsaWYgbWFqb3IgPT0gIjQiOgorICAgICAgICBkLnNldFZhcigiSEVBREVSX0ZFVENIX1ZFUiIsICI0LngiKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCJIRUFERVJfRkVUQ0hfVkVSIiwgIjIuNiIpCit9CisKK2luaGVyaXQga2VybmVsLWFyY2gKKworS09SR19BUkNISVZFX0NPTVBSRVNTSU9OID89ICJiejIiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9rZXJuZWwvdiR7SEVBREVSX0ZFVENIX1ZFUn0vbGludXgtJHtQVn0udGFyLiR7S09SR19BUkNISVZFX0NPTVBSRVNTSU9OfSIKKworUyA9ICIke1dPUktESVJ9L2xpbnV4LSR7UFZ9IgorCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVubWFrZSBhbGxub2NvbmZpZworfQorCitkb19jb21waWxlICgpIHsKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGhlYWRlcnNfaW5zdGFsbCBJTlNUQUxMX0hEUl9QQVRIPSR7RH0ke2V4ZWNfcHJlZml4fQorCSMgS2VybmVsIHNob3VsZCBub3QgYmUgZXhwb3J0aW5nIHRoaXMgaGVhZGVyCisJcm0gLWYgJHtEfSR7ZXhlY19wcmVmaXh9L2luY2x1ZGUvc2NzaS9zY3NpLmgKKworCSMgVGhlIC4uaW5zdGFsbC5jbWQgY29uZmxpY3RzIGJldHdlZW4gdmFyaW91cyBjb25maWd1cmUgcnVucworCWZpbmQgJHtEfSR7aW5jbHVkZWRpcn0gLW5hbWUgLi5pbnN0YWxsLmNtZCB8IHhhcmdzIHJtIC1mCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCisjREVQRU5EUyA9ICJjcm9zcy1saW5rYWdlIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTICs9ICJ1bmlmZGVmLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTZlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC4xLmJiCkBAIC0wLDAgKzEsNyBAQAorS09SR19BUkNISVZFX0NPTVBSRVNTSU9OID0gInh6IgorCityZXF1aXJlIGxpbnV4LWxpYmMtaGVhZGVycy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImZlOWRjMGY2NzI5ZjM2NDAwZWE4MWFhNDFkNjE0YzM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhZjUxZjA4NWFhYzFlMWNlYTRkMDBkYmJmMzA5M2VhZDA3YjU1MWZjMDdiMzFiMmE5ODljMDVmOGVhNzJkOWYiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTZjOGM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiTGludXgga2VybmVsIERldmVsb3BtZW50IFNvdXJjZSIKK0RFU0NSSVBUSU9OID0gIkRldmVsb3BtZW50IHNvdXJjZSBsaW51eCBrZXJuZWwuIFdoZW4gYnVpbHQsIHRoaXMgcmVjaXBlIHBhY2thZ2VzIHRoZSBcCitzb3VyY2Ugb2YgdGhlIHByZWZlcnJlZCB2aXJ0dWFsL2tlcm5lbCBwcm92aWRlciBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBmdWxsIGtlcm5lbCBcCitkZXZlbG9wbWVudCBvciBleHRlcm5hbCBtb2R1bGUgYnVpbGRzIgorCitTRUNUSU9OID0gImtlcm5lbCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworaW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZQorCisjIFdoaWxzdCBub3QgYSBtb2R1bGUsIHRoaXMgZW5zdXJlcyB3ZSBkb24ndCBnZXQgbXVsdGlsaWIgZXh0ZW5kZWQgKHdoaWNoIHdvdWxkIG1ha2Ugbm8gc2Vuc2UpCitpbmhlcml0IG1vZHVsZS1iYXNlCisKKyMgV2UgbmVlZCB0aGUga2VybmVsIHRvIGJlIHN0YWdlZCAodW5wYWNrZWQsIHBhdGNoZWQgYW5kIGNvbmZpZ3VyZWQpIGJlZm9yZQorIyB3ZSBjYW4gZ3JhYiB0aGUgc291cmNlIGFuZCBtYWtlIHRoZSBzb3VyY2UgcGFja2FnZS4gV2UgYWxzbyBuZWVkIHRoZSBiaXRzIGZyb20KKyMgJHtCfSBub3QgdG8gY2hhbmdlIHdoaWxlIHdlIGluc3RhbGwsIHNvIHZpcnR1YWwva2VybmVsIG11c3QgZmluaXNoIGRvX2NvbXBpbGUuCitkb19pbnN0YWxsW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKyMgTmVlZCB0aGUgc291cmNlLCBub3QganVzdCB0aGUgb3V0cHV0IG9mIHBvcHVsYXRlX3N5c3Jvb3QKK2RvX2luc3RhbGxbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX2luc3RhbGwiCisKKyMgVGhlcmUncyBub3RoaW5nIHRvIGRvIGhlcmUsIGV4Y2VwdCBpbnN0YWxsIHRoZSBzb3VyY2Ugd2hlcmUgd2UgY2FuIHBhY2thZ2UgaXQKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19wb3B1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKKworIyBEZWZpbmUgd2hlcmUgdGhlIGtlcm5lbCBoZWFkZXJzIGFyZSBpbnN0YWxsZWQgb24gdGhlIHRhcmdldCBhcyB3ZWxsIGFzIHdoZXJlCisjIHRoZXkgYXJlIHN0YWdlZC4KK0tFUk5FTF9TUkNfUEFUSCA9ICIvdXNyL3NyYy9rZXJuZWwiCitTID0gIiR7U1RBR0lOR19LRVJORUxfRElSfSIKK0IgPSAiJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0iCisKK0tFUk5FTF9WRVJTSU9OID0gIiR7QGdldF9rZXJuZWx2ZXJzaW9uX2hlYWRlcnMoJyR7U30nKX0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGtlcm5lbGRpcj0ke0R9JHtLRVJORUxfU1JDX1BBVEh9CisgICAgICAgIGluc3RhbGwgLWQgJGtlcm5lbGRpcgorCisgICAgICAgICMKKyAgICAgICAgIyBDb3B5IHRoZSBzdGFnaW5nIGRpciBzb3VyY2UgKGFuZCBtb2R1bGUgYnVpbGQgc3VwcG9ydCkgaW50byB0aGUgZGV2c3JjIHN0cnVjdHVyZS4KKyAgICAgICAgIyBXZSBjYW4ga2VlcCB0aGlzIGNvcHkgc2ltcGxlIGFuZCB0YWtlIGV2ZXJ5dGhpbmcsIHNpbmNlIGEgd2UnbGwgY2xlYW4gdXAgYW55IGJ1aWxkCisgICAgICAgICMgYXJ0aWZhY3RzIGFmdGVyd2FyZHMsIGFuZCB0aGUgZXh0cmEgaS9vIGlzIG5vdCBzaWduaWZpY2FudAorICAgICAgICAjCisgICAgICAgIGNkICR7Qn0KKyAgICAgICAgZmluZCAuIC10eXBlIGQgLW5hbWUgJy5naXQqJyAtcHJ1bmUgLW8gLXBhdGggJy5kZWJ1ZycgLXBydW5lIC1vIC10eXBlIGYgLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICRrZXJuZWxkaXIKKyAgICAgICAgY2QgJHtTfQorICAgICAgICBmaW5kIC4gLXR5cGUgZCAtbmFtZSAnLmdpdConIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAka2VybmVsZGlyCisKKyAgICAgICAgIyBFeHBsaWNpdGx5IHNldCBLQlVJTERfT1VUUFVUIHRvIGVuc3VyZSB0aGF0IHRoZSBpbWFnZSBkaXJlY3RvcnkgaXMgY2xlYW5lZCBhbmQgbm90CisgICAgICAgICMgVGhlIG1haW4gYnVpbGQgYXJ0aWZhY3RzLiBXZSBjbGVhbiB0aGUgZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9ycyBvbiBtaXNtYXRjaGVkCisgICAgICAgICMgYXJjaGl0ZWN0dXJlIChzaW5jZSBzY3JpcHRzIGFuZCBoZWxwZXJzIGFyZSBuYXRpdmUgZm9ybWF0KS4KKyAgICAgICAgS0JVSUxEX09VVFBVVD0iJGtlcm5lbGRpciIKKyAgICAgICAgb2VfcnVubWFrZSAtQyAka2VybmVsZGlyIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIGNsZWFuIF9tcnByb3Blcl9zY3JpcHRzCisKKyAgICAgICAgIyBBcyBvZiBMaW51eCBrZXJuZWwgdmVyc2lvbiAzLjAuMSwgdGhlIGNsZWFuIHRhcmdldCByZW1vdmVzCisgICAgICAgICMgYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubyB3aGljaCBpcyBwcmVzZW50IGluCisgICAgICAgICMgS0JVSUxEX0xERkxBR1NfTU9EVUxFLCBtYWtpbmcgaXQgcmVxdWlyZWQgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcy4KKyAgICAgICAgaWYgWyAke0FSQ0h9ID0gInBvd2VycGMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBta2RpciAtcCAka2VybmVsZGlyL2FyY2gvcG93ZXJwYy9saWIvCisgICAgICAgICAgICAgICAgY3AgJHtCfS9hcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vICRrZXJuZWxkaXIvYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubworICAgICAgICBmaQorCisgICAgICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisjIEVuc3VyZSB3ZSBkb24ndCByYWNlIGFnYWluc3QgIm1ha2Ugc2NyaXB0cyIgZHVyaW5nIGNwaW8KK2RvX2luc3RhbGxbbG9ja2ZpbGVzXSA9ICIke1RNUERJUn0va2VybmVsLXNjcmlwdHMubG9jayIKKworUEFDS0FHRVMgPSAia2VybmVsLWRldnNyYyIKK0ZJTEVTXyR7UE59ID0gIiR7S0VSTkVMX1NSQ19QQVRIfSIKK1JERVBFTkRTXyR7UE59ID0gImJjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlM2E1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMKQEAgLTAsMCArMSw3OSBAQAorIyBTdXBwb3J0IGZvciBkZXZpY2UgdHJlZSBnZW5lcmF0aW9uCitGSUxFU19rZXJuZWwtZGV2aWNldHJlZSA9ICIvJHtLRVJORUxfSU1BR0VERVNUfS9kZXZpY2V0cmVlKiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBkLmFwcGVuZFZhcigiUEFDS0FHRVMiLCAiIGtlcm5lbC1kZXZpY2V0cmVlIikKK30KKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJaWYgdGVzdCAtbiAiJHtLRVJORUxfREVWSUNFVFJFRX0iOyB0aGVuCisJCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCisJCQlpZiBlY2hvICR7RFRCfSB8IGdyZXAgLXEgJy9kdHMvJzsgdGhlbgorCQkJCWJid2FybiAiJHtEVEJ9IGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHRoZSBkdHMgZmlsZSwgYnV0IG9ubHkgdGhlIGR0YiBuYW1lIHNob3VsZCBiZSB1c2VkLiIKKwkJCQlEVEI9YGJhc2VuYW1lICR7RFRCfSB8IHNlZCAncyxcLmR0cyQsLmR0YixnJ2AKKwkJCWZpCisJCQlvZV9ydW5tYWtlICR7RFRCfQorCQlkb25lCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgdGVzdCAtbiAiJHtLRVJORUxfREVWSUNFVFJFRX0iOyB0aGVuCisJCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCisJCQlpZiBlY2hvICR7RFRCfSB8IGdyZXAgLXEgJy9kdHMvJzsgdGhlbgorCQkJCWJid2FybiAiJHtEVEJ9IGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHRoZSBkdHMgZmlsZSwgYnV0IG9ubHkgdGhlIGR0YiBuYW1lIHNob3VsZCBiZSB1c2VkLiIKKwkJCQlEVEI9YGJhc2VuYW1lICR7RFRCfSB8IHNlZCAncyxcLmR0cyQsLmR0YixnJ2AKKwkJCWZpCisJCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQn0gLmR0YmAKKwkJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC9kdHMvJHtEVEJ9IgorCQkJaWYgWyAhIC1lICIke0RUQl9QQVRIfSIgXTsgdGhlbgorCQkJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwkJCWZpCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtEVEJfUEFUSH0gJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9L2RldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS5kdGIKKwkJZG9uZQorCWZpCit9CisKK2RvX2RlcGxveV9hcHBlbmQoKSB7CisJaWYgdGVzdCAtbiAiJHtLRVJORUxfREVWSUNFVFJFRX0iOyB0aGVuCisJCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCisJCQlpZiBlY2hvICR7RFRCfSB8IGdyZXAgLXEgJy9kdHMvJzsgdGhlbgorCQkJCWJid2FybiAiJHtEVEJ9IGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHRoZSBkdHMgZmlsZSwgYnV0IG9ubHkgdGhlIGR0YiBuYW1lIHNob3VsZCBiZSB1c2VkLiIKKwkJCQlEVEI9YGJhc2VuYW1lICR7RFRCfSB8IHNlZCAncyxcLmR0cyQsLmR0YixnJ2AKKwkJCWZpCisJCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQn0gLmR0YmAKKwkJCURUQl9OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290L2R0cy8ke0RUQn0iCisJCQlpZiBbICEgLWUgIiR7RFRCX1BBVEh9IiBdOyB0aGVuCisJCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvJHtEVEJ9IgorCQkJZmkKKwkJCWluc3RhbGwgLWQgJHtERVBMT1lESVJ9CisJCQlpbnN0YWxsIC1tIDA2NDQgJHtEVEJfUEFUSH0gJHtERVBMT1lESVJ9LyR7RFRCX05BTUV9LmR0YgorCQkJY2QgJHtERVBMT1lESVJ9CisJCQlsbiAtc2YgJHtEVEJfTkFNRX0uZHRiICR7RFRCX1NZTUxJTktfTkFNRX0uZHRiCisJCQljZCAtCisJCWRvbmUKKwlmaQorfQorCitwa2dfcG9zdGluc3Rfa2VybmVsLWRldmljZXRyZWUgKCkgeworCWNkIC8ke0tFUk5FTF9JTUFHRURFU1R9CisJZm9yIERUQl9GSUxFIGluICR7S0VSTkVMX0RFVklDRVRSRUV9CisJZG8KKwkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJfRklMRX0gfCBhd2sgLUYgIi4iICd7cHJpbnQgJDF9J2AKKwkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgLyR7S0VSTkVMX0lNQUdFREVTVH0vJHtEVEJfQkFTRV9OQU1FfS5kdGIgJHtEVEJfQkFTRV9OQU1FfS5kdGIgZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LmR0YiAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQorCWRvbmUKK30KKworcGtnX3Bvc3RybV9rZXJuZWwtZGV2aWNldHJlZSAoKSB7CisJY2QgLyR7S0VSTkVMX0lNQUdFREVTVH0KKwlmb3IgRFRCX0ZJTEUgaW4gJHtLRVJORUxfREVWSUNFVFJFRX0KKwlkbworCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQl9GSUxFfSB8IGF3ayAtRiAiLiIgJ3twcmludCAkMX0nYAorCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICR7RFRCX0JBU0VfTkFNRX0uZHRiIGRldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS5kdGIgJHtLRVJORUxfUFJJT1JJVFl9IHx8IHRydWUKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzBlNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gIkR1bW15IExpbnV4IGtlcm5lbCIKK0RFU0NSSVBUSU9OID0gIkR1bW15IExpbnV4IGtlcm5lbCwgdG8gYmUgc2VsZWN0ZWQgYXMgdGhlIHByZWZlcnJlZCBcCitwcm92aWRlciBmb3IgdmlydHVhbC9rZXJuZWwgdG8gc2F0aXNmeSBkZXBlbmRlbmNpZXMgZm9yIHNpdHVhdGlvbnMgXAord2hlcmUgeW91IHdpc2ggdG8gYnVpbGQgdGhlIGtlcm5lbCBleHRlcm5hbGx5IGZyb20gdGhlIGJ1aWxkIHN5c3RlbS4iCitTRUNUSU9OID0gImtlcm5lbCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vQ09QWUlORy5HUEw7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitQUk9WSURFUyArPSAidmlydHVhbC9rZXJuZWwiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtbW9kdWxlLS4qIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1pbWFnZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtZmlybXdhcmUtLioiCisKK1BBQ0tBR0VTICs9ICJrZXJuZWwtbW9kdWxlcyIKK0ZJTEVTX2tlcm5lbC1tb2R1bGVzID0gIiIKK0FMTE9XX0VNUFRZX2tlcm5lbC1tb2R1bGVzID0gIjEiCitERVNDUklQVElPTl9rZXJuZWwtbW9kdWxlcyA9ICJLZXJuZWwgbW9kdWxlcyBtZXRhIHBhY2thZ2UiCisKKyNDT01QQVRJQkxFX01BQ0hJTkUgPSAieW91cl9tYWNoaW5lIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vQ09QWUlORy5HUEwiCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCToKK30KKworZG9fc2hhcmVkX3dvcmtkaXIgKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwk6Cit9CisKK2RvX2J1bmRsZV9pbml0cmFtZnMoKSB7CisJOgorfQorCitkb19kZXBsb3koKSB7CisJOgorfQorCithZGR0YXNrIGJ1bmRsZV9pbml0cmFtZnMgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fZGVwbG95CithZGR0YXNrIGRlcGxveSBhZnRlciBkb19pbnN0YWxsCithZGR0YXNrIHNoYXJlZF93b3JrZGlyIGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15L0NPUFlJTkcuR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15L0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlNDgyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiCkBAIC0wLDAgKzEsNTEgQEAKKyMgVGhpcyByZWNpcGUgdHJhY2tzIHRoZSBsaW51eC15b2N0by1kZXYgcmVwb3NpdG9yeSBhcyBpdHMgdXBzdHJlYW0gc291cmNlLgorIyBTaW5jZSB0aGlzIHRyZWUgaXMgZnJlcXVlbnRseSB1cGRhdGVkLCBhbmQgcGVyaW9kaWNhbGx5IHJlYnVpbHQsIEFVVE9SRVYgaXMKKyMgdXNlZCB0byB0cmFjayBpdHMgY29udGVudHMuCisjCisjIFRoaXMgcmVjaXBlIGlzIGp1c3QgbGlrZSBvdGhlciBsaW51eC15b2N0byB2YXJpYW50cywgd2l0aCB0aGUgb25seSBkaWZmZXJlbmNlCisjIGJlaW5nIHRoYXQgdG8gYXZvaWQgbmV0d29yayBhY2Nlc3MgZHVyaW5nIGluaXRpYWwgcGFyc2luZywgc3RhdGljIFNSQ1JFVnMgYXJlCisjIHByb3ZpZGVkIGFuZCBvdmVycmlkZGVuIGlmIHRoZSBwcmVmZXJyZWQga2VybmVsIHByb3ZpZGVyIGlzIGxpbnV4LXlvY3RvLWRldi4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgcmVjaXBlLCBzZXQgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIKKworaW5oZXJpdCBrZXJuZWwKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgcHJvdmlkZSB0aGlzIC5pbmMgdG8gc2V0IHNwZWNpZmljIHJldmlzaW9ucworaW5jbHVkZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYtcmV2aXNpb25zLmluYworCisjIFNraXAgcHJvY2Vzc2luZyBvZiB0aGlzIHJlY2lwZSBpZiBpdCBpcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgdGhlCisjIFBSRUZFUlJFRF9QUk9WSURFUiBmb3IgdmlydHVhbC9rZXJuZWwuIFRoaXMgYXZvaWRzIG5ldHdvcmsgYWNjZXNzIHJlcXVpcmVkCisjIGJ5IHRoZSB1c2Ugb2YgQVVUT1JFViBTUkNSRVZzLCB3aGljaCBhcmUgdGhlIGRlZmF1bHQgZm9yIHRoaXMgcmVjaXBlLgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgVHJ1ZSkgIT0gImxpbnV4LXlvY3RvLWRldiI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJTZXQgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIHRvIGxpbnV4LXlvY3RvLWRldiB0byBlbmFibGUgaXQiKQorfQorCitLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by1kZXYuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9bWFzdGVyO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKKyMgU2V0IGRlZmF1bHQgU1JDUkVWcy4gQm90aCB0aGUgbWFjaGluZSBhbmQgbWV0YSBTUkNSRVZzIGFyZSBzdGF0aWNhbGx5IHNldAorIyB0byB0aGUga29yZyB2My43IHRhZywgYW5kIGhlbmNlIHByZXZlbnQgbmV0d29yayBhY2Nlc3MgZHVyaW5nIHBhcnNpbmcuIElmCisjIGxpbnV4LXlvY3RvLWRldiBpcyB0aGUgcHJlZmVycmVkIHByb3ZpZGVyLCB0aGV5IHdpbGwgYmUgb3ZlcnJpZGRlbiB0bworIyBBVVRPUkVWIGluIGZvbGxvd2luZyBhbm9ueW1vdXMgcHl0aG9uIHJvdXRpbmUgYW5kIHJlc29sdmVkIHdoZW4gdGhlCisjIHZhcmlhYmxlcyBhcmUgZmluYWxpemVkLgorU1JDUkVWX21hY2hpbmUgPz0gJyR7QG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCAibGludXgteW9jdG8tZGV2IiwgIiR7QVVUT1JFVn0iLCAiMjk1OTQ0MDRkN2ZlNzNjZDgwZWFhNGVlOGM0M2RjYzUzOTcwYzYwZSIsIGQpfScKK1NSQ1JFVl9tZXRhID89ICcke0BvZS51dGlscy5jb25kaXRpb25hbCgiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgImxpbnV4LXlvY3RvLWRldiIsICIke0FVVE9SRVZ9IiwgIjI5NTk0NDA0ZDdmZTczY2Q4MGVhYTRlZThjNDNkY2M1Mzk3MGM2MGUiLCBkKX0nCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMi1yYysiCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAiLXlvY3RvZGV2LSR7TElOVVhfS0VSTkVMX1RZUEV9IgorUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11YXJtfHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MgZmVhdHVyZXMvdGFza3N0YXRzL3Rhc2tzdGF0cy5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkM2Q1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmIKQEAgLTAsMCArMSwyOCBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIgorS0JSQU5DSF9xZW11cHBjID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0L3FlbXVwcGMiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK1NSQ1JFVl9tYWNoaW5lID89ICI4MjgxOTE1NTI3YmE4ZDc5ZTU5OTA2YzAyZjI4ZTdhYTExNDI0NzIzIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiNWU3ZDM3MmViYzMyN2YyODY1NmZjOTcyZmFiNTU2MDVlZWE4YWVjMyIKK1NSQ1JFVl9tZXRhID89ICIzYTA5YjM4YTlmNTAxNWM1NmQ5OWQxN2FhN2MyZjIwMGM1NjYyNDliIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xNDtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICIzLjE0LjM2IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitMSU5VWF9LRVJORUxfVFlQRSA9ICJwcmVlbXB0LXJ0IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODZ8cWVtdXg4Ni02NHxxZW11YXJtfHFlbXVwcGN8cWVtdW1pcHMpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MgZmVhdHVyZXMvdGFza3N0YXRzL3Rhc2tzdGF0cy5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ODNjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xLmJiCkBAIC0wLDAgKzEsMjYgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK1NSQ1JFVl9tYWNoaW5lID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21ldGEgPz0gIjQyOWY5ZTJmZjA2NDliOGM5MzQxMzQ1NjIyNTQ1ZDg3NGQ1ZTMwM2EiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICI0LjEuNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworTElOVVhfS0VSTkVMX1RZUEUgPSAicHJlZW1wdC1ydCIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2fHFlbXV4ODYtNjR8cWVtdWFybXxxZW11cHBjfHFlbXVtaXBzKSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMmM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYgpAQCAtMCwwICsxLDIzIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC90aW55L2Jhc2UiCitMSU5VWF9LRVJORUxfVFlQRSA9ICJ0aW55IgorS0NPTkZJR19NT0RFID0gIi0tYWxsbm9jb25maWciCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuMTQuMzYiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21ldGEgPz0gIjNhMDliMzhhOWY1MDE1YzU2ZDk5ZDE3YWE3YzJmMjAwYzU2NjI0OWIiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xNC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lOyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xNDtkZXN0c3VmZml4PSR7S01FVEF9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODYpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTU4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYgpAQCAtMCwwICsxLDIzIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC90aW55L2Jhc2UiCitMSU5VWF9LRVJORUxfVFlQRSA9ICJ0aW55IgorS0NPTkZJR19NT0RFID0gIi0tYWxsbm9jb25maWciCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuMTkuNSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworU1JDUkVWX21hY2hpbmUgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWV0YSA/PSAiMTAxNjcxNDg2ODI0OWQ2NGZjMTY2OTJmZDc2Nzk2NzJiMWVmYTE3YiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE5LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTk7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxMjA1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKQEAgLTAsMCArMSwyMyBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9iYXNlIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICI0LjEuNiIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworU1JDUkVWX21hY2hpbmUgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWV0YSA/PSAiNDI5ZjllMmZmMDY0OWI4YzkzNDEzNDU2MjI1NDVkODc0ZDVlMzAzYSIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NikiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0MWE2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCkBAIC0wLDAgKzEsNTEgQEAKK0RFU0NSSVBUSU9OID0gIllvY3RvIEtlcm5lbCIKK1NFQ1RJT04gPSAia2VybmVsIgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc4MTBmYWI3NDg3ZmIwYWFkMzI3Yjc2ZjFiZTdjZDciCisKK0lOQ19QUiA9ICJyNCIKKworREVQRU5EUyArPSAieHotbmF0aXZlIGJjLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2FhcmNoNjQgPSAiIGxpYmdjYyIKK0tFUk5FTF9DQ19hcHBlbmRfYWFyY2g2NCA9ICIgJHtUT09MQ0hBSU5fT1BUSU9OU30iCitLRVJORUxfTERfYXBwZW5kX2FhcmNoNjQgPSAiICR7VE9PTENIQUlOX09QVElPTlN9IgorCisjIEEgS01BQ0hJTkUgaXMgdGhlIG1hcHBpbmcgb2YgYSB5b2N0byAkTUFDSElORSB0byB3aGF0IGlzIGJ1aWx0CisjIGJ5IHRoZSBrZXJuZWwuIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBicmFuY2ggdGhhdCBzaG91bGQgYmUgYnVpbHQsCisjIGFuZCBpdCBjYW4gYmUgc3BlY2lmaWMgdG8gdGhlIG1hY2hpbmUgb3Igc2hhcmVkCisjIEtNQUNISU5FID0gIlVOREVGSU5FRCIKKworTElOVVhfS0VSTkVMX1RZUEUgPz0gInN0YW5kYXJkIgorCisjIEtNRVRBID89ICIiCitLQlJBTkNIID89ICJtYXN0ZXIiCitLTUFDSElORSA/PSAiJHtNQUNISU5FfSIKK1NSQ1JFVl9GT1JNQVQgPz0gIm1ldGFfbWFjaGluZSIgCisKKyMgTEVWRUxTOgorIyAgIDA6IG5vIHJlcG9ydGluZworIyAgIDE6IHJlcG9ydCBvcHRpb25zIHRoYXQgYXJlIHNwZWNpZmllZCwgYnV0IG5vdCBpbiB0aGUgZmluYWwgY29uZmlnCisjICAgMjogcmVwb3J0IG9wdGlvbnMgdGhhdCBhcmUgbm90IGhhcmR3YXJlIHJlbGF0ZWQsIGJ1dCBzZXQgYnkgYSBCU1AKK0tDT05GX0FVRElUX0xFVkVMID89ICIxIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID89ICIwIgorCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAiLXlvY3RvLSR7TElOVVhfS0VSTkVMX1RZUEV9IgorCisjIFBpY2sgdXAgc2hhcmVkIGZ1bmN0aW9ucworaW5oZXJpdCBrZXJuZWwKK2luaGVyaXQga2VybmVsLXlvY3RvCityZXF1aXJlIGxpbnV4LWR0Yi5pbmMKKworQiA9ICIke1dPUktESVJ9L2xpbnV4LSR7UEFDS0FHRV9BUkNIfS0ke0xJTlVYX0tFUk5FTF9UWVBFfS1idWlsZCIKKworZG9faW5zdGFsbF9hcHBlbmQoKXsKKwlpZiBbIC1uICIke0tNRVRBfSIgXTsgdGhlbgorCQlybSAtcmYgJHtTVEFHSU5HX0tFUk5FTF9ESVJ9LyR7S01FVEF9CisJZmkKK30KKworIyBleHRyYSB0YXNrcworYWRkdGFzayBrZXJuZWxfbGlua192bWxpbnV4IGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX2luc3RhbGwKK2FkZHRhc2sgdmFsaWRhdGVfYnJhbmNoZXMgYmVmb3JlIGRvX3BhdGNoIGFmdGVyIGRvX2tlcm5lbF9jaGVja291dAorYWRkdGFzayBrZXJuZWxfY29uZmlnY2hlY2sgYWZ0ZXIgZG9fY29uZmlndXJlIGJlZm9yZSBkb19jb21waWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiMmU1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYgpAQCAtMCwwICsxLDQxIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9iYXNlIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIGJvYXJkIHNwZWNpZmljIGJyYW5jaGVzCitLQlJBTkNIX3FlbXVhcm0gID89ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKK0tCUkFOQ0hfcWVtdWFybTY0ID89ICJzdGFuZGFyZC9xZW11YXJtNjQiCitLQlJBTkNIX3FlbXVtaXBzID89ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKK0tCUkFOQ0hfcWVtdXBwYyAgPz0gInN0YW5kYXJkL3FlbXVwcGMiCitLQlJBTkNIX3FlbXV4ODYgID89ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKK0tCUkFOQ0hfcWVtdXg4Ni02NCA/PSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCitLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICI0ODE3NzQ3OTEyYjVjNTBjZTVjMzFlZjI1NjU4MzQwY2E2MTVlMWI0IgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjZlZDc2ZWMyNmIxMjBmNjVmODU0N2M4NjEyYjczMzRiZDI3NDVlYzkiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICJhODZhZGU4NGIyZTE0MmMwZmQ3NTM2ZDk2NDc3MTA3YjZkMDdkYjVjIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiYWYxZjdmNTg2YmQzMmQzOWMwNTdmMTc2MDY5OTFiODg3ZWFkYjM4OSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICJhNjNkNDBiODYwYTZkMjU1MDA1YTU0MTg5NGQ1MzcyOTA5MGI0MGVhIgorU1JDUkVWX21hY2hpbmUgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWV0YSA/PSAiM2EwOWIzOGE5ZjUwMTVjNTZkOTlkMTdhYTdjMmYyMDBjNTY2MjQ5YiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE0LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmU7IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE0O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuMTQuMzYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICJxZW11YXJtfHFlbXVhcm02NHxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0IgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGMxNjQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiCkBAIC0wLDAgKzEsNDEgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2NvbW1vbi1wYyIKK0tCUkFOQ0hfcWVtdXg4Ni02NCA/PSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCitLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICI5NjNiNGRmNjYzZGJhMjU4NGFjODY0ZTBjMDE2ODI1ZGUwMDQ2NTU4IgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gImNlZGJiYzdiNWU3MmRmMmU4MjBiYjllNzg4NWYxMjEzMmM1ZTJmZmYiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICIyM2E4MzM4NmUxMDk4NmE2M2U2Y2VmNzEyYTA0NTQ0NTQ5OWQwMDJiIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICIzZWI3MGNlYTM1MzJlMjJhYjFiNmRhOTg2NDQ0NjYyMTIyOWU2NjE2IgorU1JDUkVWX21hY2hpbmUgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWV0YSA/PSAiMTAxNjcxNDg2ODI0OWQ2NGZjMTY2OTJmZDc2Nzk2NzJiMWVmYTE3YiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE5LmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE5O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuMTkuNSIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQ0NjE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIKQEAgLTAsMCArMSw0MSBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBib2FyZCBzcGVjaWZpYyBicmFuY2hlcworS0JSQU5DSF9xZW11YXJtICA/PSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCitLQlJBTkNIX3FlbXVhcm02NCA/PSAic3RhbmRhcmQvcWVtdWFybTY0IgorS0JSQU5DSF9xZW11bWlwcyA/PSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCitLQlJBTkNIX3FlbXVwcGMgID89ICJzdGFuZGFyZC9xZW11cHBjIgorS0JSQU5DSF9xZW11eDg2ICA/PSAic3RhbmRhcmQvYmFzZSIKK0tCUkFOQ0hfcWVtdXg4Ni02NCA/PSAic3RhbmRhcmQvYmFzZSIKK0tCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCisKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjNjMTI0NWQxNjJjY2I1NWRlMWFmNDJiY2YzZGJmNjkwNDU3YmY5ZTQiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiNDEzMmE2OTFkMDkwOGQxMGI4ZjA3Y2U3ZWNlMDJlNmRjOTRlMTdiYyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gIjAzM2UxYWE2MzM0NjU0NDllZGY1NDRlYjgxYWRkYTBjYWYxNmVjNjAiCitTUkNSRVZfbWFjaGluZSA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tZXRhID89ICI0MjlmOWUyZmYwNjQ5YjhjOTM0MTM0NTYyMjU0NWQ4NzRkNWUzMDNhIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7bmFtZT1tYWNoaW5lO2JyYW5jaD0ke0tCUkFOQ0h9OyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMS42IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdWFybXxxZW11YXJtNjR8cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJjNGUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGU0Y2FkOTAwOTk0Y2YyODZkOTcxNzk2YTk0N2ZlYTc4MmRmYzY2NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGcmFuY2lzIEdpcmFsZGVhdSA8ZnJhbmNpcy5naXJhbGRlYXVAZ21haWwuY29tPgorRGF0ZTogTW9uLCAxNSBKdW4gMjAxNSAxMTo0MzowMiAtMDQwMAorU3ViamVjdDogW1BBVENIXSBGaXggaW52YWxpZCBwb2ludGVyIGZyZWUgd2l0aCB0cmFjZSBjb2xsZWN0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1BhdGNoIHByb3Bvc2VkIGJ5IExpIFJvbmdRaW5nIHJlbGF0ZWQgdG8gYnVnIyA3OTAKKworU2lnbmVkLW9mZi1ieTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBGcmFuY2lzIEdpcmFsZGVhdSA8ZnJhbmNpcy5naXJhbGRlYXVAZ21haWwuY29tPgorLS0tCisgbGliL2NvbnRleHQuYyB8IDggKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2NvbnRleHQuYyBiL2xpYi9jb250ZXh0LmMKK2luZGV4IDQ1YWFiMzQuLjhkMzc3MGYgMTAwNjQ0CistLS0gYS9saWIvY29udGV4dC5jCisrKysgYi9saWIvY29udGV4dC5jCitAQCAtNzksNyArNzksNyBAQCBpbnQgYnRfY29udGV4dF9hZGRfdHJhY2Uoc3RydWN0IGJ0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCwKKyAJc3RydWN0IGJ0X3RyYWNlX2Rlc2NyaXB0b3IgKnRkOworIAlzdHJ1Y3QgYnRfZm9ybWF0ICpmbXQ7CisgCXN0cnVjdCBidF90cmFjZV9oYW5kbGUgKmhhbmRsZTsKKy0JaW50IHJldCwgY2xvc2VyZXQ7CisrCWludCByZXQ7CisgCisgCWlmICghY3R4IHx8ICFmb3JtYXRfbmFtZSB8fCAoIXBhdGggJiYgIXN0cmVhbV9saXN0KSkKKyAJCXJldHVybiAtRUlOVkFMOworQEAgLTE1OSwxMCArMTU5LDggQEAgaW50IGJ0X2NvbnRleHRfYWRkX3RyYWNlKHN0cnVjdCBidF9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGgsCisgCXJldHVybiBoYW5kbGUtPmlkOworIAorIGVycm9yOgorLQljbG9zZXJldCA9IGZtdC0+Y2xvc2VfdHJhY2UodGQpOworLQlpZiAoY2xvc2VyZXQpIHsKKy0JCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgaW4gY2xvc2VfdHJhY2UgY2FsbGJhY2tcbiIpOworLQl9CisrCWlmIChoYW5kbGUpCisrCQlidF9jb250ZXh0X3JlbW92ZV90cmFjZShjdHgsIGhhbmRsZS0+aWQpOworIGVuZDoKKyAJcmV0dXJuIHJldDsKKyB9CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzZiZTQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMi40LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQmFiZWx0cmFjZSAtIFRyYWNlIEZvcm1hdCBCYWJlbCBUb3dlciIKK0RFU0NSSVBUSU9OID0gIkJhYmVsdHJhY2UgcHJvdmlkZXMgdHJhY2UgcmVhZCBhbmQgd3JpdGUgbGlicmFyaWVzIGluIGhvc3Qgc2lkZSwgYXMgd2VsbCBhcyBhIHRyYWNlIGNvbnZlcnRlciwgd2hpY2ggdXNlZCB0byBjb252ZXJ0IExUVG5nIDIuMCB0cmFjZXMgaW50byBodW1hbi1yZWFkYWJsZSBsb2cuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5lZmZpY2lvcy5jb20vYmFiZWx0cmFjZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5sdHRuZy5vcmcvcHJvamVjdHMvYmFiZWx0cmFjZSIKKworTElDRU5TRSA9ICJNSVQgJiBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc2YmExNWRkNzZhMjQ4ZTFkZDUyNmJjYTBlMjEyNWZhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJnbGliLTIuMCB1dGlsLWxpbnV4IHBvcHQgYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitTUkNSRVYgPSAiOTAzOTU4MjRlZmMwMDdkZTg4Nzg3YTZiOGU0MDBhMDdjOTgwYmUxYyIKK1BWID0gIjEuMi40K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5lZmZpY2lvcy5jb20vYmFiZWx0cmFjZS5naXQ7YnJhbmNoPXN0YWJsZS0xLjIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgJHtTfS9ib290c3RyYXAgKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1NDRmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlc19naXQuYmIKQEAgLTAsMCArMSwzMyBAQAorU0VDVElPTiA9ICJkZXZlbCIKK1NVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBLRVJORUwgTU9EVUxFIgorREVTQ1JJUFRJT04gPSAiVGhlIGx0dG5nLW1vZHVsZXMgMi4wIHBhY2thZ2UgY29udGFpbnMgdGhlIGtlcm5lbCB0cmFjZXIgbW9kdWxlcyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MiAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTE0MTJjYWY1YTFhYTkwZDZhNDg1ODhhNDc5NGMwZWFjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dwbC0yLjAudHh0O21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sZ3BsLTIuMS50eHQ7bWQ1PTI0M2I3MjVkNzFiYjVkZjRhMWU1OTIwYjM0NGI4NmFkIgorCitpbmhlcml0IG1vZHVsZQorCitTUkNSRVYgPSAiN2E4OGY4YjUwNjk2ZGQ3MWU4MGMwODY2MTE1OWNhZjhlMTE5YmY1MSIKK1BWID0gIjIuNi4yK2dpdCR7U1JDUFZ9IgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2fHBvd2VycGN8YWFyY2g2NHxtaXBzfGFybSkuKi1saW51eCcKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLW1vZHVsZXMuZ2l0O2JyYW5jaD1zdGFibGUtMi42IgorCitleHBvcnQgSU5TVEFMTF9NT0RfRElSPSJrZXJuZWwvbHR0bmctbW9kdWxlcyIKKworRVhUUkFfT0VNQUtFICs9ICJLRVJORUxESVI9JyR7U1RBR0lOR19LRVJORUxfRElSfSciCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgRGVsZXRlIGVtcHR5IGRpcmVjdG9yaWVzIHRvIGF2b2lkIFFBIGZhaWx1cmVzIGlmIG5vIG1vZHVsZXMgd2VyZSBidWlsdAorCWZpbmQgJHtEfS9saWIgLWRlcHRoIC10eXBlIGQgLWVtcHR5IC1leGVjIHJtZGlyIHt9IFw7Cit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQoKSB7CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihkLmdldFZhcignRCcsIFRydWUpLCAnbGliL21vZHVsZXMnKSk6CisgICAgICAgIGJiLndhcm4oIiVzOiBubyBtb2R1bGVzIHdlcmUgY3JlYXRlZDsgdGhpcyBtYXkgYmUgZHVlIHRvIENPTkZJR19UUkFDRVBPSU5UUyBub3QgYmVpbmcgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbC4iICUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvZXh0ZXJuLWRlY2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9leHRlcm4tZGVjbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5ZWY1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvZXh0ZXJuLWRlY2xzLnBhdGNoCkBAIC0wLDAgKzEsNDQyIEBACitUaGlzIG1ha2UgdGhlIGRlY2xhcmF0aW9ucyB0byBiZSBleHRlcm4gc28gdGhleSBkb250IGVuZCB1cAoraW4gZHVwbGljYXRlcyBpbiBkYXRhLnJlbC5ybyBzZWN0aW9ucworCithdm9pZCBlcnJvcnMgbGlrZQorCit8IC4uLy4uLy4uL3NyYy9jb21tb24vLmxpYnMvbGliY29tbW9uLmEobWktbHR0bmcubyk6KC5kYXRhLnJlbC5yby5sb2NhbCsweDApOiBtdWx0aXBsZSBkZWZpbml0aW9uIG9mIGBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90cycKK3wgY29tbWFuZHMvZW5hYmxlX2V2ZW50cy5vOiguYnNzKzB4NDgpOiBmaXJzdCBkZWZpbmVkIGhlcmUKK3wgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCit8IE1ha2VmaWxlOjUwMjogcmVjaXBlIGZvciB0YXJnZXQgJ2x0dG5nJyBmYWlsZWQKK3wgbWFrZVszXTogKioqIFtsdHRuZ10gRXJyb3IgMQorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdpdC9zcmMvY29tbW9uL2NvbmZpZy9jb25maWctc2Vzc2lvbi1hYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9jb21tb24vY29uZmlnL2NvbmZpZy1zZXNzaW9uLWFiaS5oCisrKysgZ2l0L3NyYy9jb21tb24vY29uZmlnL2NvbmZpZy1zZXNzaW9uLWFiaS5oCitAQCAtMTgsOTUgKzE4LDk1IEBACisgI2lmbmRlZiBDT05GSUdfU0VTU0lPTl9JTlRFUk5BTF9ICisgI2RlZmluZSBDT05GSUdfU0VTU0lPTl9JTlRFUk5BTF9ICisgCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NoYW5uZWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NoYW5uZWxzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kb21haW47CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RvbWFpbnM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9ldmVudHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRleHQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRleHRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9hdHRyaWJ1dGVzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbnM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2Z1bmN0aW9uX2F0dHJpYnV0ZXM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Byb2JlX2F0dHJpYnV0ZXM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N5bWJvbF9uYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9hZGRyZXNzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vZmZzZXQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2VuYWJsZWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X292ZXJ3cml0ZV9tb2RlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zdWJidWZfc2l6ZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbnVtX3N1YmJ1ZjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3dpdGNoX3RpbWVyX2ludGVydmFsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9yZWFkX3RpbWVyX2ludGVydmFsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X291dHB1dF90eXBlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfc2l6ZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHJhY2VmaWxlX2NvdW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9saXZlX3RpbWVyX2ludGVydmFsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90eXBlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9idWZmZXJfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc2Vzc2lvbjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc2Vzc2lvbnM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3BlcmY7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbmZpZzsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3RhcnRlZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc25hcHNob3RfbW9kZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbG9nbGV2ZWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsX3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2ZpbHRlcjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc25hcHNob3Rfb3V0cHV0czsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uc3VtZXJfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kZXN0aW5hdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcGF0aDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbmV0X291dHB1dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udHJvbF91cmk7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RhdGFfdXJpOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9tYXhfc2l6ZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2tlcm5lbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX3VzdDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2p1bDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2xvZzRqOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfcGVyX3BpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl91aWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9nbG9iYWw7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdmVyd3JpdGVfbW9kZV9kaXNjYXJkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfb3ZlcndyaXRlOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3V0cHV0X3R5cGVfc3BsaWNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3V0cHV0X3R5cGVfbW1hcDsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3RyYWNlcG9pbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3Byb2JlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfZnVuY3Rpb25fZW50cnk7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX25vb3A7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3N5c2NhbGw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2twcm9iZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfa3JldHByb2JlOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9waWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3Byb2NuYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcmlvOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9uaWNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92cGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF90aWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3Z0aWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BwaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ZwcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wdGhyZWFkX2lkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9ob3N0bmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaXA7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BlcmZfdGhyZWFkX2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kb21haW47CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kb21haW5zOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9ldmVudHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9hdHRyaWJ1dGVzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXhjbHVzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXhjbHVzaW9uczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2Z1bmN0aW9uX2F0dHJpYnV0ZXM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wcm9iZV9hdHRyaWJ1dGVzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ltYm9sX25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9hZGRyZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb2Zmc2V0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2VuYWJsZWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdmVyd3JpdGVfbW9kZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N1YmJ1Zl9zaXplOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbnVtX3N1YmJ1ZjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N3aXRjaF90aW1lcl9pbnRlcnZhbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3JlYWRfdGltZXJfaW50ZXJ2YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdXRwdXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdXRwdXRfdHlwZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9zaXplOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHJhY2VmaWxlX2NvdW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbGl2ZV90aW1lcl9pbnRlcnZhbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9idWZmZXJfdHlwZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3BlcmY7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb25maWc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zdGFydGVkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc25hcHNob3RfbW9kZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbG9nbGV2ZWxfdHlwZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2ZpbHRlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X291dHB1dHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb25zdW1lcl9vdXRwdXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kZXN0aW5hdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3BhdGg7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uZXRfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udHJvbF91cmk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kYXRhX3VyaTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X21heF9zaXplOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2tlcm5lbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV91c3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfanVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2xvZzRqOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl9waWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfcGVyX3VpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9nbG9iYWw7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfZGlzY2FyZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdmVyd3JpdGVfbW9kZV9vdmVyd3JpdGU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3V0cHV0X3R5cGVfc3BsaWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX21tYXA7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3NpbmdsZTsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3RyYWNlcG9pbnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9wcm9iZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfZnVuY3Rpb25fZW50cnk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9ub29wOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfc3lzY2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2twcm9iZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2tyZXRwcm9iZTsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3Byb2NuYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJpbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X25pY2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92cGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnRpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BwaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92cHBpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3B0aHJlYWRfaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9ob3N0bmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2lwOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGVyZl90aHJlYWRfY291bnRlcjsKKyAKKyAjZW5kaWYgLyogQ09ORklHX1NFU1NJT05fSU5URVJOQUxfSCAqLworSW5kZXg6IGdpdC9zcmMvY29tbW9uL21pLWx0dG5nLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29tbW9uL21pLWx0dG5nLmgKKysrKyBnaXQvc3JjL2NvbW1vbi9taS1sdHRuZy5oCitAQCAtNDksMTMzICs0OSwxMzMgQEAgc3RydWN0IG1pX2x0dG5nX3ZlcnNpb24geworIH07CisgCisgLyogU3RyaW5ncyByZWxhdGVkIHRvIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfYWN0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfYWRkX2NvbnRleHQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9jYWxpYnJhdGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9jcmVhdGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kZXN0cm95OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGlzYWJsZV9jaGFubmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGlzYWJsZV9ldmVudDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2VuYWJsZV9jaGFubmVsczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2VuYWJsZV9ldmVudDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2xpc3Q7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9sb2FkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX291dHB1dDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NhdmU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zZXRfc2Vzc2lvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfYWRkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfZGVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfbGlzdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X3JlY29yZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N0YXJ0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3RvcDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N1Y2Nlc3M7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF92ZXJzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FjdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hZGRfY29udGV4dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9jYWxpYnJhdGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY3JlYXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rlc3Ryb3k7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGlzYWJsZV9jaGFubmVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfZXZlbnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZW5hYmxlX2NoYW5uZWxzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2VuYWJsZV9ldmVudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9saXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2xvYWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9vdXRwdXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2F2ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zZXRfc2Vzc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9hZGQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfZGVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2xpc3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfcmVjb3JkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N0YXJ0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N0b3A7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3VjY2VzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF92ZXJzaW9uOworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byB2ZXJzaW9uIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fY29tbWl0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fZGVzY3JpcHRpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9saWNlbnNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWFqb3I7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9taW5vcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3BhdGNoX2xldmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fc3RyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fd2ViOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2NvbW1pdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9kZXNjcmlwdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9saWNlbnNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX21ham9yOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX21pbm9yOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3BhdGNoX2xldmVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3N0cjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl93ZWI7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gYSBsdHRuZ19ldmVudF9maWVsZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2V2ZW50X2ZpZWxkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2V2ZW50X2ZpZWxkczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZXZlbnRfZmllbGQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2V2ZW50X2ZpZWxkczsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsdHRuZ19ldmVudF9jb250ZXh0ICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX2NvdW50ZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX2NwdV9jb3VudGVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl90aHJlYWRfY291bnRlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jcHVfY291bnRlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX3RocmVhZF9jb3VudGVyOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGx0dG5nX2V2ZW50X3BlcmZfY291bnRlcl9jdHggKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9wZXJmX2NvdW50ZXJfY29udGV4dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGVyZl9jb3VudGVyX2NvbnRleHQ7CisgCisgLyogU3RyaW5ncyByZWxhdGVkIHRvIHBpZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZHM7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZF9pZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRfaWQ7CisgCisgLyogU3RyaW5ncyByZWxhdGVkIHRvIHNhdmUgY29tbWFuZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NhdmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NhdmU7CisgCisgLyogU3RyaW5ncyByZWxhdGVkIHRvIGxvYWQgY29tbWFuZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2xvYWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2xvYWQ7CisgCisgLyogR2VuZXJhbCBlbGVtZW50IG9mIG1pX2x0dG5nICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZW1wdHk7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfbm93cml0ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zdWNjZXNzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfZW51bTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2Zsb2F0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfaW50ZWdlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX290aGVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfc3RyaW5nOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9lbXB0eTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X25vd3JpdGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3N1Y2Nlc3M7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfZW51bTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9mbG9hdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9pbnRlZ2VyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX290aGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX3N0cmluZzsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsb2dsZXZlbCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfYWxlcnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9jcml0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWc7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19mdW5jdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX2xpbmU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19tb2R1bGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9jZXNzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfcHJvZ3JhbTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3N5c3RlbTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3VuaXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9lbWVyZzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2VycjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2luZm87CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9ub3RpY2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl91bmtub3duOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfd2FybmluZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9hbGVydDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9jcml0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX2Z1bmN0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX2xpbmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbW9kdWxlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2Nlc3M7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfcHJvZ3JhbTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19zeXN0ZW07CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfdW5pdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9lbWVyZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9lcnI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfaW5mbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9ub3RpY2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfdW5rbm93bjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl93YXJuaW5nOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGxvZ2xldmVsIEpVTCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9jb25maWc7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lc3Q7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfaW5mbzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9vZmY7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfc2V2ZXJlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3dhcm5pbmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfY29uZmlnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9pbmZvOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9vZmY7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3NldmVyZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfd2FybmluZzsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsb2dsZXZlbCBMb2c0aiAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfb2ZmOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZmF0YWw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9lcnJvcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX3dhcm47CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9pbmZvOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZGVidWc7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al90cmFjZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9vZmY7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZmF0YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZXJyb3I7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfd2FybjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9pbmZvOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2RlYnVnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX3RyYWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2FsbDsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsb2dsZXZlbCB0eXBlICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3JhbmdlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3NpbmdsZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV91bmtub3duOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3JhbmdlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3Vua25vd247CisgCisgLyogU3RpbmcgcmVsYXRlZCB0byBsdHRuZ19jYWxpYnJhdGUgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jYWxpYnJhdGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlX2Z1bmN0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jYWxpYnJhdGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZV9mdW5jdGlvbjsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBhIGx0dG5nX3NuYXBzaG90ICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfY3RybF91cmw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfZGF0YV91cmw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfbWF4X3NpemU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3Rfbl9wdHI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3Rfc2Vzc2lvbl9uYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90czsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfY3RybF91cmw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2RhdGFfdXJsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9tYXhfc2l6ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3Rfbl9wdHI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X3Nlc3Npb25fbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RzOworIAorIC8qIFV0aWxpdHkgc3RyaW5nIGZ1bmN0aW9uICAqLworIGNvbnN0IGNoYXIgKm1pX2x0dG5nX2xvZ2xldmVsX3N0cmluZyhpbnQgdmFsdWUsIGVudW0gbHR0bmdfZG9tYWluX3R5cGUgZG9tYWluKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2x0dG5nLXRvb2xzLUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2x0dG5nLXRvb2xzLUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMTYxNDk2ZmJlMTQ2NTgxN2E3N2E1MGExMTcyNzM0ZGFlODFhMTNlZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxMiBNYXkgMjAxNSAxMToxMTo0OCArMDIwMAorU3ViamVjdDogW1BBVENIXSBsdHRuZy10b29sczogRml4IGxpdmUgdGltZXIgY2FsY3VsYXRpb24gZXJyb3IKKworVGhlcmUgaXMgYW4gY2FsY3VsYXRpb24gZXJyb3IgZm9yIGxpdmUgdGltZXIuIFZhcmlhYmxlIHN3aXRjaF90aW1lcl9pbnRlcnZhbCBpcworYmFzZWQgb24gbWljcm9zZWNvbmQsIGFuZCBpdCBpcyBub3QgcmlnaHQgdG8gYXNzaWduIHN3aXRjaF90aW1lcl9pbnRlcnZhbCBtb2QKKzEwMDAwMDAgdG8gdmFyIHR2X25zZWMgd2hpY2ggaXMgYmFzZWQgb24gbmFub3NlY29uZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmlhbmNodWFuIFdhbmcgPGppYW5jaHVhbi53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jIGIvc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jCitpbmRleCAxNDA4MDUyLi5jNjIwMmJhIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jCisrKysgYi9zcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMKK0BAIC0zNjgsNyArMzY4LDcgQEAgdm9pZCBjb25zdW1lcl90aW1lcl9zd2l0Y2hfc3RhcnQoc3RydWN0IGx0dG5nX2NvbnN1bWVyX2NoYW5uZWwgKmNoYW5uZWwsCisgCWNoYW5uZWwtPnN3aXRjaF90aW1lcl9lbmFibGVkID0gMTsKKyAKKyAJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IHN3aXRjaF90aW1lcl9pbnRlcnZhbCAvIDEwMDAwMDA7CistCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gc3dpdGNoX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMDsKKysJaXRzLml0X3ZhbHVlLnR2X25zZWMgPSAoc3dpdGNoX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMCkgKiAxMDAwOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRzLml0X3ZhbHVlLnR2X3NlYzsKKyAJaXRzLml0X2ludGVydmFsLnR2X25zZWMgPSBpdHMuaXRfdmFsdWUudHZfbnNlYzsKKyAKK0BAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBjb25zdW1lcl90aW1lcl9saXZlX3N0YXJ0KHN0cnVjdCBsdHRuZ19jb25zdW1lcl9jaGFubmVsICpjaGFubmVsLAorIAljaGFubmVsLT5saXZlX3RpbWVyX2VuYWJsZWQgPSAxOworIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gbGl2ZV90aW1lcl9pbnRlcnZhbCAvIDEwMDAwMDA7CistCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gbGl2ZV90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKGxpdmVfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3NTg4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bi1wdGVzdApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzIGluc3RhbGxjaGVjaworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4YmNlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNTg0ZjU5Yi4uYzJiY2FiZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEyLDMgKzEyLDkgQEAgZGlzdF9kb2NfREFUQSA9IExJQ0VOU0UgXAorIGRpc3Rfbm9pbnN0X0RBVEEgPSBDb2RpbmdTdHlsZQorIAorIEVYVFJBX0RJU1QgPSBleHRyYXMvbHR0bmctYmFzaF9jb21wbGV0aW9uIGdwbC0yLjAudHh0IGxncGwtMi4xLnR4dAorKworK2luc3RhbGwtcHRlc3Q6CisrCWNwIC1yICQoc3JjZGlyKS90ZXN0cyAkKERFU1RESVIpCisrCWZvciBtIGluICQkKGZpbmQgJChERVNURElSKS90ZXN0cyAtbmFtZSBNYWtlZmlsZSk7IGRvIFwKKysgICAgICAgICAgc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQkbTsgXAorKyAgICAgICAgZG9uZQorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi5zaCBiL3Rlc3RzL3J1bi5zaAoraW5kZXggYzZjNTBmZC4uNjQ1NTM1OSAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi5zaAorKysrIGIvdGVzdHMvcnVuLnNoCitAQCAtMTksNCArMTksNyBAQAorIAorIFsgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBObyB0ZXN0bGlzdC4gUGxlYXNlIHNwZWNpZnkgYSB0ZXN0bGlzdCB0byBydW4uIiAmJiBleGl0IDEKKyAKKy1wcm92ZSAtLW1lcmdlIC0tZXhlYyAnJyAtIDwgJDEKKytwcm92ZSAtLW1lcmdlIC12IC0tZXhlYyAnJyAtIDwgJDEgfCBzZWQgXAorKyAgLWUgJ3N8Xm9rIFwoLipcKXxQQVNTOiBcMXwnIFwKKysgIC1lICdzfF5ub3Qgb2sgXCguKlwpfEZBSUw6IFwxfCcgXAorKyAgfCBlZ3JlcCAtaCAnUEFTU3xGQUlMJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWE1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDU4NGY1OWIuLmMyYmNhYmQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMiwzICsxMiw5IEBAIGRpc3RfZG9jX0RBVEEgPSBMSUNFTlNFIFwKKyBkaXN0X25vaW5zdF9EQVRBID0gQ29kaW5nU3R5bGUKKyAKKyBFWFRSQV9ESVNUID0gZXh0cmFzL2x0dG5nLWJhc2hfY29tcGxldGlvbiBncGwtMi4wLnR4dCBsZ3BsLTIuMS50eHQKKysKKytpbnN0YWxsLXB0ZXN0OgorKwljcCAtciAkKHNyY2RpcikvdGVzdHMgJChERVNURElSKQorKwlmb3IgbSBpbiAkJChmaW5kICQoREVTVERJUikvdGVzdHMgLW5hbWUgTWFrZWZpbGUpOyBkbyBcCisrICAgICAgICAgIHNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkJG07IFwKKysgICAgICAgIGRvbmUKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA2ZDViMDBkLi4zNzc0ZjlkIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSwxNCArMSwxNyBAQAorIFNVQkRJUlMgPSB1dGlscyByZWdyZXNzaW9uIHVuaXQgc3RyZXNzCisgCistaWYgVVNFX1BZVEhPTgorLWNoZWNrLWFtOgorK2luc3RhbGxjaGVjay1hbToKKyAJLi9ydW4uc2ggdW5pdF90ZXN0cworIAkuL3J1bi5zaCBmYXN0X3JlZ3Jlc3Npb24KKytpZiBVU0VfUFlUSE9OCisgCS4vcnVuLnNoIHdpdGhfYmluZGluZ3NfcmVncmVzc2lvbgorLWVsc2UKKytlbmRpZgorKworIGNoZWNrLWFtOgorIAkuL3J1bi5zaCB1bml0X3Rlc3RzCisgCS4vcnVuLnNoIGZhc3RfcmVncmVzc2lvbgorK2lmIFVTRV9QWVRIT04KKysJLi9ydW4uc2ggd2l0aF9iaW5kaW5nc19yZWdyZXNzaW9uCisgZW5kaWYKKyAKKyBkaXN0X25vaW5zdF9TQ1JJUFRTID0gcnVuLnNoIHVuaXRfdGVzdHMgZmFzdF9yZWdyZXNzaW9uIGxvbmdfcmVncmVzc2lvbiByb290X3JlZ3Jlc3Npb24gd2l0aF9iaW5kaW5nc19yZWdyZXNzaW9uCitkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLnNoIGIvdGVzdHMvcnVuLnNoCitpbmRleCBjNmM1MGZkLi42NDU1MzU5IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLnNoCisrKysgYi90ZXN0cy9ydW4uc2gKK0BAIC0xOSw0ICsxOSw3IEBACisgCisgWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IE5vIHRlc3RsaXN0LiBQbGVhc2Ugc3BlY2lmeSBhIHRlc3RsaXN0IHRvIHJ1bi4iICYmIGV4aXQgMQorIAorLXByb3ZlIC0tbWVyZ2UgLS1leGVjICcnIC0gPCAkMQorK3Byb3ZlIC0tbWVyZ2UgLXYgLS1leGVjICcnIC0gPCAkMSB8IHNlZCBcCisrICAtZSAnc3xeb2sgXCguKlwpfFBBU1M6IFwxfCcgXAorKyAgLWUgJ3N8Xm5vdCBvayBcKC4qXCl8RkFJTDogXDF8JyBcCisrICB8IGVncmVwIC1oICdQQVNTfEZBSUwnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc18yLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzk3YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc18yLjYuMC5iYgpAQCAtMCwwICsxLDgyIEBACitTRUNUSU9OID0gImRldmVsIgorU1VNTUFSWSA9ICJMaW51eCBUcmFjZSBUb29sa2l0IENvbnRyb2wiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggdHJhY2UgdG9vbGtpdCBpcyBhIHN1aXRlIG9mIHRvb2xzIGRlc2lnbmVkIFwKK3RvIGV4dHJhY3QgcHJvZ3JhbSBleGVjdXRpb24gZGV0YWlscyBmcm9tIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtIFwKK2FuZCBpbnRlcnByZXQgdGhlbS4iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTAxZDdmYzQ0OTZhYWNmMzdkOTBkZjkwYjkwYjBjYWMxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dwbC0yLjAudHh0O21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sZ3BsLTIuMS50eHQ7bWQ1PTBmMGQ3MTUwMGU2YTU3ZmQyNGQ4MjVmMzMyNDJiOWNhIgorCitERVBFTkRTID0gImxpYnVyY3UgcG9wdCBsdHRuZy11c3QgbGlieG1sMiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIHBlcmwgYmFzaCIKKworU1JDUkVWID0gImQ1MjJjMWYxNDI4NWUyZThiMTBiN2MwY2QwMTE4NDc2OTZmZmU3NzkiCisKK1BZVEhPTl9PUFRJT04gPSAiYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0nJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzJyBcCisgICAgICAgICAgICAgICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcycgXAorICAgICAgICAgICAgICAgICBQWVRIT05fSU5DTFVERT0nLUkke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0nIFwKKyIKK1BBQ0tBR0VDT05GSUcgPz89ICJsdHRuZy11c3QiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS1lbmFibGUtcHl0aG9uLWJpbmRpbmdzICR7UFlUSE9OX09QVElPTn0sLHB5dGhvbiBzd2lnLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbbHR0bmctdXN0XSA9ICItLWVuYWJsZS1sdHRuZy11c3QsIC0tZGlzYWJsZS1sdHRuZy11c3QsIGx0dG5nLXVzdCIKK1BBQ0tBR0VDT05GSUdba21vZF0gPSAiLS1lbmFibGUta21vZCwgLS1kaXNhYmxlLWttb2QsIGttb2QiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy10b29scy5naXQ7YnJhbmNoPXN0YWJsZS0yLjYgXAorICAgICAgICAgICBmaWxlOi8vcnVudGVzdC0yLjQuMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9leHRlcm4tZGVjbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2x0dG5nLXRvb2xzLUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoIFwKKwkgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0IHBrZ2NvbmZpZyB1c2VyYWRkCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICJ0cmFjaW5nIgorCitleHBvcnQgS0VSTkVMRElSPSIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbHR0bmcvbGliZXhlYy8qICR7ZGF0YWRpcn0veG1sL2x0dG5nIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzLyouYSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzLyoubGEiCisKKyMgU2luY2UgZmlsZXMgYXJlIGluc3RhbGxlZCBpbnRvICR7bGliZGlyfS9sdHRuZy9saWJleGVjIHdlIG1hdGNoIAorIyB0aGUgbGliZXhlYyBpbnNhbmUgdGVzdCBzbyBza2lwIGl0LgorIyBQeXRob24gbW9kdWxlIG5lZWRzIHRvIGtlZXAgX2x0dG5nLnNvCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJsaWJleGVjIGRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59LWRiZyA9ICJsaWJleGVjIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBEZWxldGUgYSBzaGlwcGVkIG00IGZpbGUgdGhhdCBvdmVycmlkZXMgb3VyIHBhdGNoZWQgb25lCisJcm0gLWYgJHtTfS9jb25maWcvbGlieG1sLm00Cit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCWNobW9kICt4ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3V0aWxzL3V0aWxzLnNoCisJZm9yIGkgaW4gYGZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gLXBlcm0gL3UreCAtdHlwZSBmYDsgZG8KKwkJc2VkIC1lICJzOlwkVEVTVERJUi4qL3NyYy9iaW4vbHR0bmcvXCRMVFROR19CSU46XCRMVFROR19CSU46ZyIgXAorCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLXNlc3Npb25kL1wkU0VTU0lPTkRfQklOOlwkU0VTU0lPTkRfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXNlc3Npb25kL1wkU0VTU0lPTkRfQklOOlwkU0VTU0lPTkRfQklOOmciIFwKKwkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1jb25zdW1lcmQvOiR7bGliZGlyfS9sdHRuZy9saWJleGVjLzpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1jb25zdW1lcmQvOiR7bGliZGlyfS9sdHRuZy9saWJleGVjLzpnIiBcCisJCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctcmVsYXlkL1wkUkVMQVlEX0JJTjpcJFJFTEFZRF9CSU46ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvbHR0bmctc2Vzc2lvbmQ6XCRTRVNTSU9ORF9CSU46ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctcmVsYXlkL1wkUkVMQVlEX0JJTjpcJFJFTEFZRF9CSU46ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL2Jpbi9sdHRuZy1yZWxheWQvXCRSRUxBWURfQklOOlwkUkVMQVlEX0JJTjpnIiBcCisJCSAgLWkgJGkKKwlkb25lCisKKwlzZWQgLWUgInM6c3JjL2Jpbi9sdHRuZy1zZXNzaW9uZDokYmluZGlyOmciIFwKKwkgICAgLWUgInM6c3JjL2Jpbi9sdHRuZy1jb25zdW1lcmQ6JHtsaWJleGVjZGlyfS9saWJleGVjLzpnIiBcCisJLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvcmVncmVzc2lvbi9ydW4tcmVwb3J0LnB5CisJc2VkIC1lICJzOnNyYy9iaW46YmluOmciIC1lICJzOmx0LTo6ZyIgXAorCS1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3V0aWxzL3V0aWxzLnNoCisJc2VkIC1lICJzOmluaV9jb25maWc6XC5saWJzXC9pbmlfY29uZmlnOiIgXAorCS1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3VuaXQvaW5pX2NvbmZpZy90ZXN0X2luaV9jb25maWcKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzEyMGZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNmQwMmE2YzFhZWIxZDA1MGZmZTdjNjYyNGJhYjlhY2ZhNzZmYzA1ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxMiBNYXkgMjAxNSAxMTowNDozNCArMDIwMAorU3ViamVjdDogW1BBVENIXSBsdHRuZy11c3Q6Rml4IGxpdmUgdGltZXIgY2FsY3VsYXRpb24gZXJyb3IKKworVGhlcmUgaXMgYW4gY2FsY3VsYXRpb24gZXJyb3IgZm9yIGxpdmUgdGltZXIuIFZhcmlhYmxlIGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCBpcworYmFzZWQgb24gbWljcm9zZWNvbmQsIGFuZCBpdCBpcyBub3QgcmlnaHQgdG8gYXNzaWduIGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCBtb2QKKzEwMDAwMDAgdG8gdmFyIHR2X25zZWMgd2hpY2ggaXMgYmFzZWQgb24gbmFub3NlY29uZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmlhbmNodWFuIFdhbmcgPGppYW5jaHVhbi53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jIGIvbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jCitpbmRleCBlYjRlNDg2Li5lMDM3N2EzIDEwMDY0NAorLS0tIGEvbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jCisrKysgYi9saWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMKK0BAIC01MjgsNyArNTI4LDcgQEAgdm9pZCBsaWJfcmluZ19idWZmZXJfY2hhbm5lbF9zd2l0Y2hfdGltZXJfc3RhcnQoc3RydWN0IGNoYW5uZWwgKmNoYW4pCisgCX0KKyAKKyAJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCAvIDEwMDAwMDA7CistCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMDsKKysJaXRzLml0X3ZhbHVlLnR2X25zZWMgPSAoY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMCkgKiAxMDAwOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRzLml0X3ZhbHVlLnR2X3NlYzsKKyAJaXRzLml0X2ludGVydmFsLnR2X25zZWMgPSBpdHMuaXRfdmFsdWUudHZfbnNlYzsKKyAKK0BAIC01ODIsNyArNTgyLDcgQEAgdm9pZCBsaWJfcmluZ19idWZmZXJfY2hhbm5lbF9yZWFkX3RpbWVyX3N0YXJ0KHN0cnVjdCBjaGFubmVsICpjaGFuKQorIAl9CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBjaGFuLT5yZWFkX3RpbWVyX2ludGVydmFsIC8gMTAwMDAwMDsKKy0JaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBjaGFuLT5yZWFkX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMDsKKysJaXRzLml0X3ZhbHVlLnR2X25zZWMgPSAoY2hhbi0+cmVhZF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhhOTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0Rvbid0IGJ1aWxkIHRoZSBkb2MgZXhhbXBsZXMgLSB3ZSBkb24ndCBuZWVkIHRoZW0gYW5kIGluIGZhY3QgdGhleQorbmV2ZXIgc3VjY2Vzc2Z1bGx5IGJ1aWx0IGluIHByZXZpb3VzIGl0ZXJhdGlvbnMgb2YgdGhlIGx0dG5nLXVzdAorcmVjaXBlIGFueXdheS4KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGRvYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKysgYi9kb2MvTWFrZWZpbGUuYW0KK0BAIC0xLDQgKzEsNCBAQAorLVNVQkRJUlMgPSAuIGV4YW1wbGVzCisrU1VCRElSUyA9IC4KKyAKKyBkaXN0X21hbl9NQU5TID0gbWFuL2x0dG5nLWdlbi10cC4xIFwKKyAJbWFuL2x0dG5nLXVzdC4zIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRhZmQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBVc2Vyc3BhY2UgVHJhY2VyIDIueCIKK0RFU0NSSVBUSU9OID0gIlRoZSBMVFRuZyBVU1QgMi54IHBhY2thZ2UgY29udGFpbnMgdGhlIHVzZXJzcGFjZSB0cmFjZXIgbGlicmFyeSB0byB0cmFjZSB1c2Vyc3BhY2UgY29kZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2x0dG5nLm9yZy91c3QiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5sdHRuZy5vcmcvcHJvamVjdHMvbHR0bmctdXN0IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIE1JVCAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Yzk2M2ViMzY2Yjc4MTI1MmIwYmYwZmRmMTYyNGQ5ZTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc25wcmludGYvc25wcmludGYuYztlbmRsaW5lPTMyO21kNT1kM2Q1NDQ5NTlkOGEzNzgyYjJlMDc0NTFiZTBhOTAzYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zbnByaW50Zi92YXJpb3VzLmg7ZW5kbGluZT0zMTttZDU9ODlmMjUwOWI2YjQ2ODJjNGZjOTUyNTVlZWM0YWJlNDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlCisKK0RFUEVORFMgPSAibGlidXJjdSB1dGlsLWxpbnV4IgorUkRFUEVORFNfJHtQTn0tYmluID0gInB5dGhvbi1jb3JlIgorCisjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhZnRlciByZW5hbWUKK1JQUk9WSURFU18ke1BOfSA9ICJsdHRuZzItdXN0IgorUlJFUExBQ0VTXyR7UE59ID0gImx0dG5nMi11c3QiCitSQ09ORkxJQ1RTXyR7UE59ID0gImx0dG5nMi11c3QiCisKK1NSQ1JFViA9ICJjNDllZTkwNDBhZGE2OTg0Yzg4MDc1NjYxNGU4YTZmN2ZkNjQ1YmQ2IgorUEUgPSAiMiIKK1BWID0gIjIuNi4yK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdXN0LmdpdDticmFuY2g9c3RhYmxlLTIuNiBcCisgICAgICAgICAgIGZpbGU6Ly9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbHR0bmctdXN0LUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoIFwKKyAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJKCBjZCAke1N9OyAke1N9L2Jvb3RzdHJhcCApCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9QRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFjNDljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9QRC5wYXRjaApAQCAtMCwwICsxLDggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogbW9kdXRpbHMtaW5pdHNjcmlwdHMtMS4wL0xJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtb2R1dGlscy1pbml0c2NyaXB0cy0xLjAvTElDRU5TRQkyMDEwLTEyLTA2IDE0OjI2OjAzLjU3MDMzOTAwMiAtMDgwMAorQEAgLTAsMCArMSBAQAorK1B1YmxpYyBEb21haW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL21vZHV0aWxzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3OGFkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL21vZHV0aWxzLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbW9kdWxlLWluaXQtdG9vbHMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIAorIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIFNob3VsZC1TdGFydDogICAgICBjaGVja3Jvb3QKKyMgU2hvdWxkLXN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFByb2Nlc3MgL2V0Yy9tb2R1bGVzLgorIyBEZXNjcmlwdGlvbjogICAgICAgTG9hZCB0aGUgbW9kdWxlcyBsaXN0ZWQgaW4gL2V0Yy9tb2R1bGVzLgorIyMjIEVORCBJTklUIElORk8KKworTE9BRF9NT0RVTEU9bW9kcHJvYmUKK1sgLWYgL3Byb2MvbW9kdWxlcyBdIHx8IGV4aXQgMAorWyAtZiAvZXRjL21vZHVsZXMgXSB8fCBbIC1kIC9ldGMvbW9kdWxlcy1sb2FkLmQgXSB8fCBleGl0IDAKK1sgLWUgL3NiaW4vbW9kcHJvYmUgXSB8fCBMT0FEX01PRFVMRT1pbnNtb2QKKworaWYgWyAhIC1mIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL21vZHVsZXMuZGVwIF07IHRoZW4KKwlbICIkVkVSQk9TRSIgIT0gbm8gXSAmJiBlY2hvICJDYWxjdWxhdGluZyBtb2R1bGUgZGVwZW5kZW5jaWVzIC4uLiIKKwlkZXBtb2QgLUFlCitmaQorCitsb2FkZWRfbW9kdWxlcz0iICIKKworcHJvY2Vzc19maWxlKCkgeworCWZpbGU9JDEKKworCShjYXQgJGZpbGU7IGVjaG87ICkgfAorCXdoaWxlIHJlYWQgbW9kdWxlIGFyZ3MKKwlkbworCQljYXNlICIkbW9kdWxlIiBpbgorCQkJXCMqfCIiKSBjb250aW51ZSA7OworCQllc2FjCisJCVsgLW4gIiQoZWNobyAkbG9hZGVkX21vZHVsZXMgfCBncmVwICIgJG1vZHVsZSAiKSIgXSAmJiBjb250aW51ZQorCQlbICIkVkVSQk9TRSIgIT0gbm8gXSAmJiBlY2hvIC1uICIkbW9kdWxlICIKKwkJZXZhbCAiJExPQURfTU9EVUxFICRtb2R1bGUgJGFyZ3MgPi9kZXYvbnVsbCAyPiYxIgorCQlsb2FkZWRfbW9kdWxlcz0iJHtsb2FkZWRfbW9kdWxlc30ke21vZHVsZX0gIgorCWRvbmUKK30KKworWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobyAtbiAiTG9hZGluZyBtb2R1bGVzOiAiCitbIC1mIC9ldGMvbW9kdWxlcyBdICYmIHByb2Nlc3NfZmlsZSAvZXRjL21vZHVsZXMKKworWyAtZCAvZXRjL21vZHVsZXMtbG9hZC5kIF0gfHwgZXhpdCAwCisKK2ZvciBmIGluIC9ldGMvbW9kdWxlcy1sb2FkLmQvKi5jb25mOyBkbworCXByb2Nlc3NfZmlsZSAkZgorZG9uZQorWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL21vZHV0aWxzLWluaXRzY3JpcHRzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjcwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL21vZHV0aWxzLWluaXRzY3JpcHRzLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiSW5pdHNjcmlwdCBmb3IgYXV0by1sb2FkaW5nIGtlcm5lbCBtb2R1bGVzIG9uIGJvb3QiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9N2JmODdmYzM3OTc2ZTkzZWM2NmFkODRmYWM1OGMwOTgiCitTUkNfVVJJID0gImZpbGU6Ly9tb2R1dGlscy5zaCBcCisJICAgZmlsZTovL1BELnBhdGNoIgorCitQUiA9ICJyNyIKKworUyA9ICIke1dPUktESVJ9IgorCitJTklUU0NSSVBUX05BTUUgPSAibW9kdXRpbHMuc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwNSBTIC4iCisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworZG9fY29tcGlsZSAoKSB7Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L21vZHV0aWxzLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KK30KKworREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgbW9kdXRpbHMuc2VydmljZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzU2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYwpAQCAtMCwwICsxLDU4IEBACitTVU1NQVJZID0gIlN5c3RlbS1XaWRlIFByb2ZpbGVyIgorREVTQ1JJUFRJT04gPSAiT1Byb2ZpbGUgaXMgYSBzeXN0ZW0td2lkZSBwcm9maWxlciBmb3IgTGludXggc3lzdGVtcywgY2FwYWJsZSBcCitvZiBwcm9maWxpbmcgYWxsIHJ1bm5pbmcgY29kZSBhdCBsb3cgb3ZlcmhlYWQuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9uZXdzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNjE5MSZhdGlkPTExNjE5MSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm9wYWdlbnQvb3BhZ2VudC5oO2JlZ2lubGluZT01O2VuZGxpbmU9MjY7bWQ1PTRmMTZmNzJjN2E0OTNkOGE0NzA0YWExOGQwM2QxNWM2IFwKKyAgICAgICAgICAgICAgICAgICAiCitTRUNUSU9OID0gImRldmVsIgorCitERVBFTkRTID0gInBvcHQgYmludXRpbHMiCitSREVQRU5EU18ke1BOfSA9ICJiaW51dGlscy1zeW1saW5rcyIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC12bWxpbnV4IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtsaWJkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS9saWIqLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L2xpYiouYSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb3Byb2ZpbGUtY3Jvc3MtY29tcGlsZS10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcm9vdC1ob21lLWRpci5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgta2VybmVsPSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gLS13aXRob3V0LXggYWNfY3ZfcHJvZ19YU0xUUFJPQz0iCitkb19jb25maWd1cmUgKCkgeworCWNwICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCisJYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorfQorCitFWFRSQV9PRU1BS0UgPSAiU1JDRElSPSR7UFRFU1RfUEFUSH0vbGlidXRpbCsrL3Rlc3RzIgorZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIGNoZWNrCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJc3ViZGlycz0ibGliZGIvdGVzdHMgbGlidXRpbCsrL3Rlc3RzIGxpYnJlZ2V4L3Rlc3RzIGxpYnV0aWwvdGVzdHMgbGlib3AvdGVzdHMgbGliZGIvdGVzdHMgIgorCWZvciB0b29sdGVzdCBpbiAke3N1YmRpcnN9CisJZG8KKwkJZmluZCAke3Rvb2x0ZXN0fSAtcGVybSAvdT14IC10eXBlIGZ8IGNwaW8gLXB2ZHUgJHtEfSR7UFRFU1RfUEFUSH0KKwlkb25lCisKKwkjIG5lZWRlZCBieSBzb21lIGxpYm9wIHRlc3RzCisJY3AgLXIgZXZlbnRzICR7RH0ke1BURVNUX1BBVEh9CisKKwkjIG5lZWRlZCBieSBsaWJyZWdleCByZWdleF90ZXN0CisJY3AgbGlicmVnZXgvc3RsLnBhdCAke0R9JHtQVEVTVF9QQVRIfS9saWJyZWdleAorCWNwIGxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZSAke0R9JHtQVEVTVF9QQVRIfS9saWJyZWdleC90ZXN0cworCisJIyBuZWVkZWQgYnkgbGl0dXRpbCsrIGZpbGVfbWFuaXBfdGVzdHMKKwljcCAke1N9L2xpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcCBcCisJCWxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLm8gJHtEfSR7UFRFU1RfUEFUSH0vbGlidXRpbCsrL3Rlc3RzCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2FjaW5jbHVkZS5tNCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZWNkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDU4MSBAQAorZG5sIEFYX0tFUk5FTF9PUFRJT04ob3B0aW9uLCBhY3Rpb24taWYtZm91bmQsIGFjdGlvbi1pZi1ub3QtZm91bmQpCitkbmwgc2VlIGlmIGF1dG9jb25mLmggZGVmaW5lcyB0aGUgb3B0aW9uCitBQ19ERUZVTihbQVhfS0VSTkVMX09QVElPTl0sIFsKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLUkkS0lOQyAtTzIgLURfX0tFUk5FTF9fIgorQUNfVFJZX0NPTVBJTEUoIFsjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+XSwKK1sKKyNpZm5kZWYgJDEKK2JyZWFrX21lX2hhcmQoXFxcKTsKKyNlbmRpZgorXSxbJDJdLFskM10sKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUworXSkKKworZG5sIEhhbmRsZSB0aGUgMi40IG1vZHVsZSBpbnNpZGUgbW9kdWxlLworQUNfREVGVU4oW0FYX0NPTkZJR19NT0RVTEVdLAorWworaWYgdGVzdCAhIC1mICRLSU5DL2xpbnV4L2F1dG9jb25mLmg7IHRoZW4KKwlBQ19NU0dfRVJST1IoW25vIHN1aXRhYmx5IGNvbmZpZ3VyZWQga2VybmVsIGluY2x1ZGUgdHJlZSBmb3VuZF0pCitmaQorCitkbmwgIC0tLSBHZXQgTGludXgga2VybmVsIHZlcnNpb24gYW5kIGNvbXBpbGUgcGFyYW1ldGVycyAtLS0KKworQUNfU1VCU1QoS1ZFUlMpCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBrZXJuZWwgdmVyc2lvbl0pCitkbmwgaXQncyBsaWtlIHRoaXMgdG8gaGFuZGxlIG1hbmRyYWtlJ3MgZnViYXIgdmVyc2lvbi5oIC0gYnVnICM0NzE0NDgKK2V2YWwgS1ZFUlM9YGdjYyAtSSRLSU5DIC1FIC1kTSAkS0lOQy9saW51eC92ZXJzaW9uLmggfCBncmVwIC13IFVUU19SRUxFQVNFIHwgYXdrICd7cHJpbnQgJFtdM30nYAorQUNfTVNHX1JFU1VMVChbJEtWRVJTXSkKK2Nhc2UgIiRLVkVSUyIgaW4KKzIuMi4qfDIuNC4qKSA7OworKikgQUNfTVNHX0VSUk9SKFtVbnN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbl0pCitlc2FjCisKK2RubCBDaGVjayBmb3IgdGhlIG1pbmltYWwga2VybmVsIHZlcnNpb24gc3VwcG9ydGVkCitBQ19NU0dfQ0hFQ0tJTkcoW2tlcm5lbCB2ZXJzaW9uXSkKK0FYX0tFUk5FTF9WRVJTSU9OKDIsIDIsIDEwLCA8PSwgQUNfTVNHX1JFU1VMVChbb2tdKSwgQUNfTVNHX0VSUk9SKFtjaGVjayBodG1sIGRvY3VtZW50YXRpb24gaW5zdGFsbCBzZWN0aW9uXSkpCisKK2RubCBsaW51eC9zcGlubG9jay5oIGFkZGVkIGF0IHNvbWUgcG9pbnQgaW4gcGFzdAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJEtJTkMvbGludXgvc3BpbmxvY2suaF0pCitpZiB0ZXN0IC1mICRLSU5DL2xpbnV4L3NwaW5sb2NrLmg7IHRoZW4KKwlFWFRSQV9DRkxBR1NfTU9EVUxFPSIkRVhUUkFfQ0ZMQUdTX01PRFVMRSAtREhBVkVfTElOVVhfU1BJTkxPQ0tfSEVBREVSIgorCUFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisJQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKKworQUNfTVNHX0NIRUNLSU5HKFtmb3IgcnRjX2xvY2tdKQorZ2NjIC1JJEtJTkMgLUUgJEtJTkMvbGludXgvbWMxNDY4MThydGMuaCB8IGdyZXAgcnRjX2xvY2sgPi9kZXYvbnVsbAoraWYgdGVzdCAiJD8iIC1lcSAwOyB0aGVuCisJRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURSVENfTE9DSyIKKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorCUFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisJIAorYXJjaD0idW5rbm93biIKK0FDX01TR19DSEVDS0lORyhmb3IgeDg2LTY0IGFyY2hpdGVjdHVyZSkKK0FYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4Nl82NCwgeDg2NjQ9MSwgeDg2NjQ9MCkKK0FYX01TR19SRVNVTFRfWU4oJHg4NjY0KQorQlVJTERfSEFNTUVSPW5vCitpZiB0ZXN0ICIkeDg2NjQiIC1lcSAxOyB0aGVuCisJYXJjaD0ieDg2IgorCUJVSUxEX0hBTU1FUj15ZXMKK2Vsc2UKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIHg4NiBhcmNoaXRlY3R1cmUpCisJQVhfS0VSTkVMX09QVElPTihDT05GSUdfWDg2LCB4ODY9MSwgeDg2PTApCisJQVhfS0VSTkVMX09QVElPTihDT05GSUdfWDg2X1dQX1dPUktTX09LLCB4ODY9MSwgeDg2PSR4ODYpCisJQVhfTVNHX1JFU1VMVF9ZTigkeDg2KQorCXRlc3QgIiR4ODYiID0gMSAmJiBhcmNoPSJ4ODYiCisJCisJaWYgdGVzdCAiJGFyY2giID0gInVua25vd24iOyB0aGVuCisgIAkJQUNfTVNHX0NIRUNLSU5HKGZvciBpYTY0IGFyY2hpdGVjdHVyZSkKKyAgCQlBWF9LRVJORUxfT1BUSU9OKENPTkZJR19JQTY0LCBpYTY0PTEsIGlhNjQ9MCkKKyAgCQlBWF9NU0dfUkVTVUxUX1lOKCRpYTY0KQorICAJCXRlc3QgIiRpYTY0IiA9IDEgJiYgYXJjaD0iaWE2NCIKKwlmaQorCitmaQorQUNfU1VCU1QoQlVJTERfSEFNTUVSKQorCit0ZXN0ICIkYXJjaCIgPSAidW5rbm93biIgJiYgQUNfTVNHX0VSUk9SKFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSkKKworZG5sIGNoZWNrIHRvIHNlZSBpZiBrZXJuZWwgdmVyaW9uIGFwcHJvcHJpYXRlIGZvciBhcmNoCitBQ19NU0dfQ0hFQ0tJTkcoYXJjaC9rZXJuZWwgdmVyc2lvbiBjb21iaW5hdGlvbikKK2Nhc2UgIiRhcmNoIiBpbgoraWE2NCkKKwlBWF9LRVJORUxfVkVSU0lPTigyLCA0LCAxOCwgPCwgQUNfTVNHX1JFU1VMVChbb2tdKSwKKwkJQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBhcmNoL2tlcm5lbF0pKSA7OworKikgQUNfTVNHX1JFU1VMVChbb2tdKQorZXNhYworCitkbmwgZm9yIG5vdyB3ZSBkbyBub3Qgc3VwcG9ydCBQUkVFTVBUIHBhdGNoCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwcmVlbXB0IHBhdGNoXSkKK0FYX0tFUk5FTF9PUFRJT04oQ09ORklHX1BSRUVNUFQscHJlZW1wdD0xLHByZWVtcHQ9MCkKK0FYX01TR19SRVNVTFRfWU4oWyRwcmVlbXB0XSkKK3Rlc3QgIiRwcmVlbXB0IiA9IDAgfHwgQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiA6IENPTkZJR19QUkVFTVBUXSkKKworQUNfU1VCU1QoS0lOQykKKworTU9ESU5TVEFMTERJUj0vbGliL21vZHVsZXMvJEtWRVJTCisgCitPUFJPRklMRV9NT0RVTEVfQVJDSD0kYXJjaAorQUNfU1VCU1QoT1BST0ZJTEVfTU9EVUxFX0FSQ0gpCitdCispCisKK2RubCBBWF9NU0dfUkVTVUxUX1lOKGEpCitkbmwgcmVzdWx0cyAieWVzIiBpZmYgYT09MSwgIm5vIiBlbHNlCitBQ19ERUZVTihbQVhfTVNHX1JFU1VMVF9ZTl0sIFt4PW5vCit0ZXN0ICJ4JDEiID0gIngxIiAmJiB4PXllcworQUNfTVNHX1JFU1VMVCgkeCldKQorCitkbmwgQVhfTUFMTE9DX0FUVFJJQlVURSAtIHNlZSBpZiBnY2Mgd2lsbCB0YWtlIF9fYXR0cmlidXRlX18oKG1hbGxvYykpCitBQ19ERUZVTihbQVhfTUFMTE9DX0FUVFJJQlVURV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgbWFsbG9jIGF0dHJpYnV0ZSBpcyB1bmRlcnN0b29kXSkKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgorQUNfVFJZX0NPTVBJTEUoLFsKK3ZvaWQgbW9ua2V5KCkgX19hdHRyaWJ1dGVfXygobWFsbG9jKSk7CitdLEFDX01TR19SRVNVTFQoW3llc10pOyBBQ19ERUZJTkUoTUFMTE9DX0FUVFJJQlVURV9PSywgMSwgW3doZXRoZXIgbWFsbG9jIGF0dHJpYnV0ZSBpcyB1bmRlcnN0b29kXSksIEFDX01TR19SRVNVTFQoW25vXSkpCitDRkxBR1M9JFNBVkVfQ0ZMQUdTIAorXQorKQorCitkbmwgYnVpbHRpbl9leHBlY3QgaXMgdXNlZCBpbiBtb2R1bGUgd2UgY2FuJ3QgYWRkIHRoYXQgaW4gY29uZmlnLmgKK0FDX0RFRlVOKFtBWF9CVUlMVElOX0VYUEVDVF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgX19idWlsdGluX2V4cGVjdCBpcyB1bmRlcnN0b29kXSkKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgorQUNfVFJZX0xJTksoLFsKK2ludCBpOworaWYgKF9fYnVpbHRpbl9leHBlY3QoaSwgMCkpIHsgfQorXSwKK0FDX01TR19SRVNVTFQoW3llc10pOyBFWFRSQV9DRkxBR1NfTU9EVUxFPSIkRVhUUkFfQ0ZMQUdTX01PRFVMRSAtREVYUEVDVF9PSyIsCitBQ19NU0dfUkVTVUxUKFtub10pOykKK0NGTEFHUz0kU0FWRV9DRkxBR1MgCitdCispIAorCitkbmwgQVhfRVhUUkFfRElSUyAtIExldCB1c2VyIHNwZWNpZnkgZXh0cmEgZGlycyBmb3IgaW5jbHVkZS9saWJzCitBQ19ERUZVTihbQVhfRVhUUkFfRElSU10sCitbCitBQ19BUkdfV0lUSChleHRyYS1pbmNsdWRlcywKK1sgIC0td2l0aC1leHRyYS1pbmNsdWRlcz1ESVIgICAgYWRkIGV4dHJhIGluY2x1ZGUgcGF0aHNdLAorICB1c2VfZXh0cmFfaW5jbHVkZXM9IiR3aXRodmFsIiwKKyAgdXNlX2V4dHJhX2luY2x1ZGVzPU5PCispCitpZiB0ZXN0IC1uICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAmJiBcCisgICAgICAgIHRlc3QgIiR1c2VfZXh0cmFfaW5jbHVkZXMiICE9ICJOTyI7IHRoZW4KKyAgYWNfc2F2ZV9pZnM9JElGUworICBJRlM9JzonCisgIGZvciBkaXIgaW4gJHVzZV9leHRyYV9pbmNsdWRlczsgZG8KKyAgICBleHRyYV9pbmNsdWRlcz0iJGV4dHJhX2luY2x1ZGVzIC1JJGRpciIKKyAgZG9uZQorICBJRlM9JGFjX3NhdmVfaWZzCisgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJGV4dHJhX2luY2x1ZGVzIgorZmkKKworQUNfQVJHX1dJVEgoZXh0cmEtbGlicywKK1sgIC0td2l0aC1leHRyYS1saWJzPURJUiAgICAgICAgYWRkIGV4dHJhIGxpYnJhcnkgcGF0aHNdLAorICB1c2VfZXh0cmFfbGlicz0kd2l0aHZhbCwKKyAgdXNlX2V4dHJhX2xpYnM9Tk8KKykKK2lmIHRlc3QgLW4gIiR1c2VfZXh0cmFfbGlicyIgJiYgXAorICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2xpYnMiICE9ICJOTyI7IHRoZW4KKyAgIGFjX3NhdmVfaWZzPSRJRlMKKyAgIElGUz0nOicKKyAgIGZvciBkaXIgaW4gJHVzZV9leHRyYV9saWJzOyBkbworICAgICBleHRyYV9saWJyYXJpZXM9IiRleHRyYV9saWJyYXJpZXMgLUwkZGlyIgorICAgZG9uZQorICAgSUZTPSRhY19zYXZlX2lmcworICAgTERGTEFHUz0iJExERkxBR1MgJGV4dHJhX2xpYnJhcmllcyIKK2ZpCitdCispCisKK2RubCBBWF9QT1BUX0NPTlNUIC0gY2hlY2sgcG9wdCBwcm90b3R5cGUKK0FDX0RFRlVOKFtBWF9QT1BUX0NPTlNUXSwKK1sKK0FDX01TR19DSEVDS0lORyhbcG9wdCBwcm90b3R5cGVdKQorU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKK0NYWEZMQUdTPSItV2Vycm9yICRDWFhGTEFHUyIKK0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8cG9wdC5oPl0sCitbCitpbnQgYzsgY2hhciAqKnY7Citwb3B0R2V0Q29udGV4dCgwLCBjLCB2LCAwLCAwKTsKK10sCitBQ19NU0dfUkVTVUxUKFt0YWtlcyBjaGFyICoqXSk7LAorQUNfTVNHX1JFU1VMVChbdGFrZXMgY29uc3QgY2hhciAqKl0pOyBBQ19ERUZJTkUoQ09OU1RfUE9QVCwgMSwgW3doZXRoZXIgcG9wdCBwcm90b3R5cGUgdGFrZXMgYSBjb25zdCBjaGFyICoqXSkpCitDWFhGTEFHUz0iJFNBVkVfQ1hYRkxBR1MiCitdCispCisKK2RubCBBWF9DSEVDS19TU1RSRUFNIC0gY2hlY2sgaWYgbG9jYWwgc3N0cmVhbSBpcyBuZWVkZWQgdG8gY29tcGlsZSBPSworQUNfREVGVU4oW0FYX0NIRUNLX1NTVFJFQU1dLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBpbmNsdWRlZCBzc3RyZWFtXSkKK0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3N0cmVhbT5dLCBbXSwgCitBQ19NU0dfUkVTVUxUKFtub10pOywKK0FDX01TR19SRVNVTFQoW3llc10pOyBPUF9DWFhGTEFHUz0iJE9QX0NYWEZMQUdTIC1JXCR7dG9wX3NyY2Rpcn0vaW5jbHVkZSIpCitdCispCisKK2RubCBBWF9DSEVDS19UWVBFREVGKHR5cGVkZWZfbmFtZSwgdHlwZSwgYWN0aW9uLWlmLXRydWUsIGFjdGlvbi1pZi1mYWxzZSkKK2RubCBleGVjIGFjdGlvbi1pZi10cnVlIGlmIHR5cGVkZWZfbmFtZSBpcyBhIHR5cGVkZWYgdG8gdHlwZSBlbHNlIGV4ZWMgCitkbmwgYWN0aW9uLWlmLWZhbHNlCitkbmwgY3VycmVudGx5IHdvcmsgb25seSB3aXRoIHR5cGUgdHlwZWRlZidlZCBpbiBzdGRkZWYuaAorQUNfREVGVU4oW0FYX0NIRUNLX1RZUEVERUZdLCBbCitkbmwgQUNfTEFOR19QVVNIKEMpIG5vdCBpbiBhdXRvY29uZiAyLjEzCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItV2Vycm9yICRDRkxBR1MiCisKK0FDX1RSWV9DT01QSUxFKAorICBbCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgXSwKKyAgWworICB0eXBlZGVmIHZvaWQgKCpmY3QxKSgkMSk7CisgIHR5cGVkZWYgdm9pZCAoKmZjdDIpKCQyKTsKKyAgZmN0MSBmMSA9IDA7CisgIGZjdDIgZjIgPSAwOworICBpZiAoZjEgPT0gZjIpIHt9CisgIF0sCitbJDNdLFskNF0pCisKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworCitkbmwgQVhfVFlQRURFRkVEX05BTUUodHlwZWRlZl9uYW1lLCBjYW5kaWRhdGVfbGlzdCwgdmFyX25hbWUpCitkbmwgc2V0IHZhcl9uYW1lIHRvIHRoZSB0eXBlZGVmIG5hbWUgb2YgJDEgd2hpY2ggbXVzdCBiZSBpbiBjYW5kaXRhdGVfbGlzdAorZG5sIGVsc2UgcHJvZHVjZSBhIGZhdGFsIGVycm9yCitBQ19ERUZVTihbQVhfVFlQRURFRkVEX05BTUVdLCBbCisJQUNfTVNHX0NIRUNLSU5HKFt0eXBlIG9mICQxXSkKKwlmb3IgZiBpbiAkMjsgZG8KKwkJQVhfQ0hFQ0tfVFlQRURFRigkMSwgJGYsICQzPSIkZiIsICQzPSIiKQorCQlpZiB0ZXN0IC1uICIkeyQzfSI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCWlmIHRlc3QgLW4gIiR7JDN9IjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKFskeyQzfV0pCisJZWxzZQorCQlBQ19NU0dfRVJST1IoW25vdCBmb3VuZF0pCisJZmkKK10pCisKK2RubCBmaW5kIGEgYmluYXJ5IGluIHRoZSBwYXRoCitBQ19ERUZVTihbUVRfRklORF9QQVRIXSwKK1sKKwlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCisJQUNfQ0FDSEVfVkFMKHF0X2N2X3BhdGhfJDEsCisJWworCQlxdF9jdl9wYXRoXyQxPSJOT05FIgorCQlpZiB0ZXN0IC1uICIkJDIiOyB0aGVuCisJCQlxdF9jdl9wYXRoXyQxPSIkJDIiOworCQllbHNlCisJCQlkaXJzPSIkMyIKKwkJCXF0X3NhdmVfSUZTPSRJRlMKKwkJCUlGUz0nOicKKwkJCWZvciBkaXIgaW4gJFBBVEg7IGRvCisJCQkJZGlycz0iJGRpcnMgJGRpciIKKwkJCWRvbmUKKwkJCUlGUz0kcXRfc2F2ZV9JRlMKKyAKKwkJCWZvciBkaXIgaW4gJGRpcnM7IGRvCisJCQkJaWYgdGVzdCAteCAiJGRpci8kMSI7IHRoZW4KKwkJCQkJaWYgdGVzdCAtbiAiJDUiOyB0aGVuCisJCQkJCQlldmFsc3RyPSIkZGlyLyQxICQ1IDI+JjEgIgorCQkJCQkJaWYgZXZhbCAkZXZhbHN0cjsgdGhlbgorCQkJCQkJCXF0X2N2X3BhdGhfJDE9IiRkaXIvJDEiCisJCQkJCQkJYnJlYWsKKwkJCQkJCWZpCisJCQkJCWVsc2UKKwkJCQkJCXF0X2N2X3BhdGhfJDE9IiRkaXIvJDEiCisJCQkJCQlicmVhaworCQkJCQlmaQorCQkJCWZpCisJCQlkb25lCisJCWZpCisJXSkKKyAKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfcGF0aF8kMSIgfHwgdGVzdCAiJHF0X2N2X3BhdGhfJDEiID0gIk5PTkUiOyB0aGVuCisJCUFDX01TR19SRVNVTFQobm90IGZvdW5kKQorCQkkNAorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVCgkcXRfY3ZfcGF0aF8kMSkKKwkJJDI9JHF0X2N2X3BhdGhfJDEKKwlmaQorXSkKKworZG5sIEZpbmQgdGhlIHVpYyBjb21waWxlciBvbiB0aGUgcGF0aCBvciBpbiBxdF9jdl9kaXIKK0FDX0RFRlVOKFtRVF9GSU5EX1VJQ10sCitbCisJUVRfRklORF9QQVRIKHVpYywgYWNfdWljLCAkcXRfY3ZfZGlyL2JpbikKKwlpZiB0ZXN0IC16ICIkYWNfdWljIiAtYSAiJEZBVEFMIiA9IDE7IHRoZW4KKwkJQUNfTVNHX0VSUk9SKFt1aWMgYmluYXJ5IG5vdCBmb3VuZCBpbiBcJFBBVEggb3IgJHF0X2N2X2Rpci9iaW4gIV0pCisJZmkKK10pCisgCitkbmwgRmluZCB0aGUgcmlnaHQgbW9jIGluIHBhdGgvcXRfY3ZfZGlyCitBQ19ERUZVTihbUVRfRklORF9NT0NdLAorWworCVFUX0ZJTkRfUEFUSChtb2MyLCBhY19tb2MyLCAkcXRfY3ZfZGlyL2JpbikKKwlRVF9GSU5EX1BBVEgobW9jLCBhY19tb2MxLCAkcXRfY3ZfZGlyL2JpbikKKworCWlmIHRlc3QgLW4gIiRhY19tb2MxIiAtYSAtbiAiJGFjX21vYzIiOyB0aGVuCisJCWRubCBmb3VuZCBib3RoLiBQcmVmZXIgUXQzJ3MgaWYgaXQgZXhpc3RzIGVsc2UgbW9jMgorCQkkYWNfbW9jMSAtdiAyPiYxIHwgZ3JlcCAiUXQgMyIgPi9kZXYvbnVsbAorCQlpZiB0ZXN0ICIkPyIgPSAwOyB0aGVuCisJCQlhY19tb2M9JGFjX21vYzE7CisJCWVsc2UKKwkJCWFjX21vYz0kYWNfbW9jMjsKKwkJZmkKKwllbHNlCisJCWlmIHRlc3QgLW4gIiRhY19tb2MxIjsgdGhlbgorCQkJYWNfbW9jPSRhY19tb2MxOworCQllbHNlCisJCQlhY19tb2M9JGFjX21vYzI7CisJCWZpCisJZmkKKworCWlmIHRlc3QgLXogIiRhY19tb2MiICAtYSAiJEZBVEFMIiA9IDE7IHRoZW4KKwkJQUNfTVNHX0VSUk9SKFttb2MgYmluYXJ5IG5vdCBmb3VuZCBpbiBcJFBBVEggb3IgJHF0X2N2X2Rpci9iaW4gIV0pCisJZmkKK10pCisKK2RubCBjaGVjayBhIHBhcnRpY3VsYXIgbGlibmFtZQorQUNfREVGVU4oW1FUX1RSWV9MSU5LXSwKK1sKKwlTQVZFX0xJQlM9IiRMSUJTIgorCUxJQlM9IiRMSUJTICQxIgorCUFDX1RSWV9MSU5LKFsKKwkjaW5jbHVkZSA8cWdsb2JhbC5oPgorCSNpbmNsdWRlIDxxc3RyaW5nLmg+CisJCV0sCisJWworCVFTdHJpbmcgcygibWFuZ2xlX2ZhaWx1cmUiKTsKKwkjaWYgKFFUX1ZFUlNJT04gPCAyMjEpCisJYnJlYWtfbWVfKFxcXCk7CisJI2VuZGlmCisJXSwKKwlxdF9jdl9saWJuYW1lPSQxLAorCSkKKwlMSUJTPSIkU0FWRV9MSUJTIgorXSkKKyAKK2RubCBjaGVjayB3ZSBjYW4gZG8gYSBjb21waWxlCitBQ19ERUZVTihbUVRfQ0hFQ0tfQ09NUElMRV0sCitbCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgUXQgbGlicmFyeSBuYW1lXSkKKyAKKwlBQ19DQUNIRV9WQUwocXRfY3ZfbGlibmFtZSwKKwlbCisJCUFDX0xBTkdfQ1BMVVNQTFVTCisJCVNBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCisJCUNYWEZMQUdTPSIkQ1hYRkxBR1MgJFFUX0lOQ0xVREVTICRRVF9MREZMQUdTIiAKKworCQlmb3IgbGlibmFtZSBpbiAtbHF0LW10IC1scXQzIC1scXQyIC1scXQ7CisJCWRvCisJCQlRVF9UUllfTElOSygkbGlibmFtZSkKKwkJCWlmIHRlc3QgLW4gIiRxdF9jdl9saWJuYW1lIjsgdGhlbgorCQkJCWJyZWFrOworCQkJZmkKKwkJZG9uZQorCisJCUNYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCisJXSkKKworCWlmIHRlc3QgLXogIiRxdF9jdl9saWJuYW1lIjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKFtmYWlsZWRdKSAKKwkJaWYgdGVzdCAiJEZBVEFMIiA9IDEgOyB0aGVuCisJCQlBQ19NU0dfRVJST1IoW0Nhbm5vdCBjb21waWxlIGEgc2ltcGxlIFF0IGV4ZWN1dGFibGUuIENoZWNrIHlvdSBoYXZlIHRoZSByaWdodCBcJFFURElSICFdKQorCQlmaQorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVChbJHF0X2N2X2xpYm5hbWVdKQorCWZpCitdKQorCitkbmwgZ2V0IFF0IHZlcnNpb24gd2UncmUgdXNpbmcKK0FDX0RFRlVOKFtRVF9HRVRfVkVSU0lPTl0sCitbCisJQUNfQ0FDSEVfQ0hFQ0soW1F0IHZlcnNpb25dLGx5eF9jdl9xdHZlcnNpb24sCisJWworCQlBQ19MQU5HX0NQTFVTUExVUworCQlTQVZFX0NQUEZMQUdTPSRDUFBGTEFHUworCQlDUFBGTEFHUz0iJENQUEZMQUdTICRRVF9JTkNMVURFUyIKKworCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHFnbG9iYWwuaD4KKyIlJSUiUVRfVkVSU0lPTl9TVFIiJSUlIgorRU9GCisJCWx5eF9jdl9xdHZlcnNpb249YChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwgXAorCQkJZ3JlcCAnXiIlJSUiJyAgMj4vZGV2L251bGwgfCBcCisJCQlzZWQgLWUgJ3MvIiUlJSIvL2cnIC1lICdzLyIvL2cnYAorCQlybSAtZiBjb25mdGVzdC4kYWNfZXh0CisJCUNQUEZMQUdTPSRTQVZFX0NQUEZMQUdTCisJXSkKKyAKKwlRVF9WRVJTSU9OPSRseXhfY3ZfcXR2ZXJzaW9uCisJQUNfU1VCU1QoUVRfVkVSU0lPTikKK10pCisgCitkbmwgc3RhcnQgaGVyZSAKK0FDX0RFRlVOKFtRVF9ET19JVF9BTExdLAorWworCWRubCBQbGVhc2UgbGVhdmUgdGhpcyBhbG9uZS4gSSB1c2UgdGhpcyBmaWxlIGluCisJZG5sIG9wcm9maWxlLgorCUZBVEFMPTAKKworCUFDX0FSR19XSVRIKHF0LWRpciwgWyAgLS13aXRoLXF0LWRpciAgICAgICAgICAgd2hlcmUgdGhlIHJvb3Qgb2YgUXQgaXMgaW5zdGFsbGVkIF0sCisJCVsgcXRfY3ZfZGlyPWBldmFsIGVjaG8gIiR3aXRodmFsIi9gIF0pCisJIAorCUFDX0FSR19XSVRIKHF0LWluY2x1ZGVzLCBbICAtLXdpdGgtcXQtaW5jbHVkZXMgICAgICB3aGVyZSB0aGUgUXQgaW5jbHVkZXMgYXJlLiBdLAorCQlbIHF0X2N2X2luY2x1ZGVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAgXSkKKyAKKwlBQ19BUkdfV0lUSChxdC1saWJyYXJpZXMsIFsgIC0td2l0aC1xdC1saWJyYXJpZXMgICAgIHdoZXJlIHRoZSBRdCBsaWJyYXJ5IGlzIGluc3RhbGxlZC5dLAorCQlbICBxdF9jdl9saWJyYXJpZXM9YGV2YWwgZWNobyAiJHdpdGh2YWwiYCBdKQorCisJZG5sIHBheSBhdHRlbnRpb24gdG8gJFFURElSIHVubGVzcyBvdmVycmlkZGVuCisJaWYgdGVzdCAteiAiJHF0X2N2X2RpciI7IHRoZW4KKwkJcXRfY3ZfZGlyPSRRVERJUgorCWZpCisgCisJZG5sIGRlcml2ZSBpbmMvbGliIGlmIG5lZWRlZAorCWlmIHRlc3QgLW4gIiRxdF9jdl9kaXIiOyB0aGVuCisJCWlmIHRlc3QgLXogIiRxdF9jdl9pbmNsdWRlcyI7IHRoZW4KKwkJCXF0X2N2X2luY2x1ZGVzPSRxdF9jdl9kaXIvaW5jbHVkZQorCQlmaQorCQlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlicmFyaWVzIjsgdGhlbgorCQkJcXRfY3ZfbGlicmFyaWVzPSRxdF9jdl9kaXIvbGliCisJCWZpCisJZmkKKworCWRubCBmbGFncyBmb3IgY29tcGlsYXRpb24KKwlRVF9JTkNMVURFUz0KKwlRVF9MREZMQUdTPQorCWlmIHRlc3QgLW4gIiRxdF9jdl9pbmNsdWRlcyI7IHRoZW4KKwkJUVRfSU5DTFVERVM9Ii1JJHF0X2N2X2luY2x1ZGVzIgorCWZpCisJaWYgdGVzdCAtbiAiJHF0X2N2X2xpYnJhcmllcyI7IHRoZW4KKwkJUVRfTERGTEFHUz0iLUwkcXRfY3ZfbGlicmFyaWVzIgorCWZpCisJQUNfU1VCU1QoUVRfSU5DTFVERVMpCisJQUNfU1VCU1QoUVRfTERGTEFHUykKKyAKKwlRVF9GSU5EX01PQworCU1PQz0kYWNfbW9jCisJQUNfU1VCU1QoTU9DKQorCVFUX0ZJTkRfVUlDCisJVUlDPSRhY191aWMKKwlBQ19TVUJTVChVSUMpCisKKwlRVF9DSEVDS19DT01QSUxFCisgCisJUVRfTElCPSRxdF9jdl9saWJuYW1lOworCUFDX1NVQlNUKFFUX0xJQikKKworCWlmIHRlc3QgLW4gIiRxdF9jdl9saWJuYW1lIjsgdGhlbgorCQlRVF9HRVRfVkVSU0lPTgorCWZpCitdKQorCitkbmwgQVhfQ1hYRkxBR1NfT1BUSU9OUyh2YXItbmFtZSwgb3B0aW9uKQorZG5sIGFkZCBvcHRpb24gdG8gdmFyLW5hbWUgaWYgJENYWCBzdXBwb3J0IGl0LgorQUNfREVGVU4oW0FYX0NIRUNLX1BSRUNPTVBJTEVEX0hFQURFUl0sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAke0NYWH0gc3VwcG9ydCBwcmVjb21waWxlZCBoZWFkZXJdKQorQUNfTEFOR19TQVZFCitBQ19MQU5HX0NQTFVTUExVUworU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKK2RubCB3ZSBjb25zaWRlciB0aGFuIGlmIC1XaW52YWxpZC1wY2ggaXMgYWNjZXB0ZWQgcGNoIHdpbGwgd29ya3MgLi4uCitDWFhGTEFHUz0tV2ludmFsaWQtcGNoCitkbmwgYnV0IHdlIGRvbid0IHdhbnQgLVdpbnZhbGlkLXBjaCBlbHNlIGNvbXBpbGF0aW9uIHdpbGwgZmFpbCBkdWUgLVdlcnJvciBhbmQKK2RubCB0aGUgZmFjdCB0aGFuIHNvbWUgcGNoIHdpbGwgYmUgaW52YWxpZCBmb3IgdGhlIGdpdmVuIGNvbXBpbGF0aW9uIG9wdGlvbgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9IC1pbmNsdWRlIGJpdHMvc3RkYysrLmgiLCBBQ19NU0dfUkVTVUxUKFtub10pKQorQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworZG5sIEFYX0NIRUNLX0RPQ0JPT0sKK0FDX0RFRlVOKFtBWF9DSEVDS19ET0NCT09LXSwgWworIyBJdCdzIGp1c3QgcnVkZSB0byBnbyBvdmVyIHRoZSBuZXQgdG8gYnVpbGQKK1hTTFRQUk9DX0ZMQUdTPS0tbm9uZXQKK0RPQ0JPT0tfUk9PVD0KK2lmIHRlc3QgISAtZiAvZXRjL3htbC9jYXRhbG9nOyB0aGVuCisJZm9yIGkgaW4gL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2svc3R5bGVzaGVldC94c2wvbndhbHNoIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy87CisJZG8KKwkJaWYgdGVzdCAtZCAiJGkiOyB0aGVuCisJCQlET0NCT09LX1JPT1Q9JGkKKwkJZmkKKwlkb25lCisKKwkjIExhc3QgcmVzb3J0IC0gdHJ5IG5ldAorCWlmIHRlc3QgLXogIiRET0NCT09LX1JPT1QiOyB0aGVuCisJCVhTTFRQUk9DX0ZMQUdTPQorCWZpCitlbHNlCisJWE1MX0NBVEFMT0c9L2V0Yy94bWwvY2F0YWxvZworCUNBVF9FTlRSWV9TVEFSVD0nPCEtLScKKwlDQVRfRU5UUllfRU5EPSctLT4nCitmaQorCitBQ19DSEVDS19QUk9HKFhTTFRQUk9DLHhzbHRwcm9jLHhzbHRwcm9jLCkKK1hTTFRQUk9DX1dPUktTPW5vCitpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHhzbHRwcm9jIHdvcmtzXSkKKworCWlmIHRlc3QgLW4gIiRYTUxfQ0FUQUxPRyI7IHRoZW4KKwkJREJfRklMRT0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQveGh0bWwvZG9jYm9vay54c2wiCisJZWxzZQorCQlEQl9GSUxFPSIkRE9DQk9PS19ST09UL2RvY2Jvb2sueHNsIgorCWZpCisKKwkkWFNMVFBST0MgJFhTTFRQUk9DX0ZMQUdTICREQl9GSUxFID4vZGV2L251bGwgMj4mMSA8PCBFTkQKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J0lTTy04ODU5LTEnPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiPgorPGJvb2sgaWQ9InRlc3QiPgorPC9ib29rPgorRU5ECisJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgorCQlYU0xUUFJPQ19XT1JLUz15ZXMKKwlmaQorCUFDX01TR19SRVNVTFQoJFhTTFRQUk9DX1dPUktTKQorZmkKK0FNX0NPTkRJVElPTkFMKGhhdmVfeHNsdHByb2MsIHRlc3QgIiRYU0xUUFJPQ19XT1JLUyIgPSAieWVzIikKKworQUNfU1VCU1QoWE1MX0NBVEFMT0cpCitBQ19TVUJTVChYU0xUUFJPQ19GTEFHUykKK0FDX1NVQlNUKERPQ0JPT0tfUk9PVCkKK0FDX1NVQlNUKENBVF9FTlRSWV9TVEFSVCkKK0FDX1NVQlNUKENBVF9FTlRSWV9FTkQpCitdKQorCitkbmwgQVhfQ0ZMQUdTX09QVElPTlModmFyLW5hbWUsIG9wdGlvbikKK2RubCBhZGQgb3B0aW9uIHRvIHZhci1uYW1lIGlmICRDQyBzdXBwb3J0IGl0LgorQUNfREVGVU4oW0FYX0NGTEFHU19PUFRJT05dLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDQ30gJDIgaXMgdW5kZXJzdG9vZF0pCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSQyCitBQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyAkMT0iJHskMX0gJDIiLEFDX01TR19SRVNVTFQoW25vXSkpCitDRkxBR1M9JFNBVkVfQ0ZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKKworZG5sIEFYX0NYWEZMQUdTX09QVElPTlModmFyLW5hbWUsIG9wdGlvbikKK2RubCBhZGQgb3B0aW9uIHRvIHZhci1uYW1lIGlmICRDWFggc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DWFhGTEFHU19PUFRJT05dLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDWFh9ICQyIGlzIHVuZGVyc3Rvb2RdKQorQUNfTEFOR19TQVZFCitBQ19MQU5HX0NQTFVTUExVUworU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKK0NYWEZMQUdTPSQyCitBQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyAkMT0iJHskMX0gJDIiLEFDX01TR19SRVNVTFQoW25vXSkpCitDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCitkbmwgQVhfQ09QWV9JRl9DSEFOR0Uoc291cmNlLCBkZXN0KQorZG5sIGNvcHkgc291cmNlIHRvIGRlc3QgaWYgdGhleSBkb24ndCBjb21wYXJlIGVxdWFsbHkgb3IgaWYgZGVzdCBkb2Vzbid0IGV4aXN0CitBQ19ERUZVTihbQVhfQ09QWV9JRl9DSEFOR0VdLCBbCitpZiB0ZXN0IC1yICQyOyB0aGVuCisJaWYgY21wICQxICQyID4gL2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJDIgaXMgdW5jaGFuZ2VkCisJZWxzZQorCQljcCAtZiAkMSAkMgorCWZpCitlbHNlCisJY3AgLWYgJDEgJDIKK2ZpCitdKQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYjZjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApAQCAtMCwwICsxLDEyIEBACitvcHJvZmlsZSBkb2Vzbid0IHdhbnQgR05VLWxldmVscyBvZiBhdXRvbWFrZSBzdHJpY3RuZXNzIHNvIHRlbGwgaXQgdG8gYmUgImZvcmVpZ24iLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDU3NDA1ODUuLmNmNmMzMTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE2ICsxNiBAQCBBQ19DT05GSUdfU1JDRElSKFtsaWJvcC9vcF9jb25maWcuaF0pCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmE5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorUHJldmVudCBydW5uaW5nIGNoZWNrIHRlc3RzIG9uIGhvc3QgaWYgY3Jvc3MgY29tcGlsaW5nCisKK1RoaXMgcGF0Y2ggZW5hYmxlcyBydW5uaW5nIHRoZSAnbWFrZSBjaGVjaycgdGVzdHMgb24gdGhlIHRhcmdldAoraW4gYSBjcm9zcy1jb21waWxlZCBlbnZpcm9ubWVudC4gSWYgbm90IGNyb3NzLWNvbXBpbGluZywgdGhlbiAnbWFrZQorIGNoZWNrJyBidWlsZHMgYW5kIGV4ZWN1dGVzIHRoZSB0ZXN0czsgbm8gY2hhbmdlIGZyb20gdGhpcyBwYXRjaC4KK0luIGEgY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50LCB0aGUgbWFrZSB2YXJpYWJsZSBDUk9TU19DT01QSUxFIGlzCitzZXQgd2hpY2ggYnlwYXNzZXMgYXNzaWdpbmcgdGVzdHMgdG8gdGhlIG1ha2VrZmlsZSB2YXJpYWJsZSBURVNUUy4KK1NpbmNlIFRFU1RTIGlzIGVtcHR5LCB0aGUgJ21ha2UgY2hlY2snIHByb2Nlc3MgbmV2ZXIgdHJpZXMgdG8gcnVuIHRoZQordGVzdHMgb24gdGhlIGhvc3RzLiAgT24gdGhlIHRhcmdldCwgdGhlIHRlc3RzIG11c3QgYmUgcnVuIG1hbnVhbGx5LgorCitBbHNvLCBpbiB0aGUgbGlidXRpbCsrIHRlc3RzLCBhIG1ha2VmaWxlIHZhcmlhYmxlIFNSQ0RJUiBpcyBwYXNzZWQgaW50bwordGhlIGNvbXBpbGF0aW9uIHBoYXNlLCBwb2ludGluZyB0byB0aGUgcnVudGltZSBsb2NhdGlvbiBvZiB0aGUgdGVzdAorJ2ZpbGUtbWFuaXAtdGVzdHMnLiAgVGhlIG1lY2hhbmlzbSB1c2VkIGZvciBhIGhvc3QgdGVzdCwgYmFzZWQgb24KKyd0b3BkaXInIGRvZXNuJ3Qgd29yay4gIEluc3RlYWQsIGlmIENST1NTX0NPTVBJTEUgaXMgc2V0LCB0aGUKK21ha2VmaWxlIHRha2VzIHRoZSBwYXRoIG9mIFNSQ0RJUiBmcm9tIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgbm90Citmcm9tIGFuIGV4cHJlc3Npb24gYmFzZWQgb24gdGhlIGhvc3QgcGF0aCAndG9wZGlyJy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA0MWVjZTY0Li5jZTVhMTZmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zOTIsNiArMzkyLDcgQEAgQUNfQVJHX0VOQUJMRShhY2NvdW50LWNoZWNrLAorIAllbmFibGVfYWNjb3VudF9jaGVjaz0kZW5hYmxldmFsLCBlbmFibGVfYWNjb3VudF9jaGVjaz15ZXMpCisgCisgQU1fQ09ORElUSU9OQUwoQ0hFQ0tfQUNDT1VOVCwgdGVzdCAieCRlbmFibGVfYWNjb3VudF9jaGVjayIgPSAieHllcyIpCisrQU1fQ09ORElUSU9OQUwoQ1JPU1NfQ09NUElMRSwgdGVzdCAieCRjcm9zc19jb21waWxpbmciID0gInh5ZXMiKQorIAorIEFDX1NVQlNUKE9QX0NGTEFHUykKKyBBQ19TVUJTVChPUF9DWFhGTEFHUykKK2RpZmYgLS1naXQgYS9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA4YTY5MDAzLi5kODIwMDkwIDEwMDY0NAorLS0tIGEvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTMsNCArMTMsNiBAQCBjaGVja19QUk9HUkFNUyA9IGRiX3Rlc3QKKyBkYl90ZXN0X1NPVVJDRVMgPSBkYl90ZXN0LmMKKyBkYl90ZXN0X0xEQUREID0gLi4vbGlib2RiLmEgLi4vLi4vbGlidXRpbC9saWJ1dGlsLmEKKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA4YTc5ZWI1Li42ZDQxN2M0IDEwMDY0NAorLS0tIGEvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMzMsNCArMzMsNiBAQCBsb2FkX2V2ZW50c19maWxlc190ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisgbWFuZ2xlX3Rlc3RzX1NPVVJDRVMgPSBtYW5nbGVfdGVzdHMuYworIG1hbmdsZV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfSB1dGY4X2NoZWNrZXIuc2gKKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtIGIvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDZmMTk4MzguLjFkMTc2ZjkgMTAwNjQ0CistLS0gYS9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xOCw0ICsxOCw2IEBAIGphdmFfdGVzdF9MREFERCA9IFwKKyAKKyBFWFRSQV9ESVNUID0gbWFuZ2xlZC1uYW1lLmluCisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQorK2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA1MWFmMDMxLi5hMDFlYTJkIDEwMDY0NAorLS0tIGEvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xLDcgKzEsOSBAQAorIAorIFJFQUxQQVRIPSByZWFkbGluayAtZgorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFNSQ0RJUiA6PSAkKHNoZWxsICQoUkVBTFBBVEgpICQodG9wZGlyKS9saWJ1dGlsKysvdGVzdHMvICkKKytlbmRpZgorIAorIEFNX0NQUEZMQUdTID0gXAorIAktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyAtRCBTUkNESVI9IlwiJChTUkNESVIpL1wiIiBAT1BfQ1BQRkxBR1NACitAQCAtNDYsNCArNDgsNiBAQCBjYWNoZWRfdmFsdWVfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIHV0aWxpdHlfdGVzdHNfU09VUkNFUyA9IHV0aWxpdHlfdGVzdHMuY3BwCisgdXRpbGl0eV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQorK2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IGRmY2Q2ZWMuLmU4ODMxYjUgMTAwNjQ0CistLS0gYS9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTIsNCArMTIsNiBAQCBmaWxlX3Rlc3RzX0xEQUREID0gLi4vbGlidXRpbC5hCisgc3RyaW5nX3Rlc3RzX1NPVVJDRVMgPSBzdHJpbmdfdGVzdHMuYworIHN0cmluZ190ZXN0c19MREFERCA9IC4uL2xpYnV0aWwuYQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmM1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3Jvb3QtaG9tZS1kaXIucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorb3Byb2ZpbGU6IERldGVybWluZSB0aGUgcm9vdCBob21lIGRpcmVjdG9yeSBkeW5hbWljYWxseQorCitUaGlzIGNvbW1pdCBkZXRlY3RzIHRoZSByb290IGhvbWUgZGlyZWN0b3J5IGR5bmFtaWNhbGx5IHdpdGggY2hhbmdlcyB0bwordGhlIG9wcm9maWxlIGd1aSBhcHAgc291cmNlLgorCitUaGUgY29tbWl0IHJlcGxhY2VzIGFuIGVhcmxpZXIgZml4IHRoYXQgZGV0ZWN0ZWQgYW5kIGFkanVzdGVkIGEKKydub24tc3RhbmRhcmQnIHJvb3QgaG9tZSBkaXJlY3RvcnkgYXQgYnVpbGQgdGltZS4gIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcworcGF0Y2ggaXMgdGhhdCB0aGUgb3Byb2ZpbGUgdG9vbHMgYXJlIGFkanVzdGVkIHRvIHRoZSBjdXJyZW50IHJ1bi10aW1lCitwYXRoIHRvIH5yb290LCBub3QgdGhlIGJ1aWxkIHRpbWUgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBvcHJvZmlsZS0xLjAuMC9kb2Mvb3Byb2ZpbGUuaHRtbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wcm9maWxlLTEuMC4wLm9yaWcvZG9jL29wcm9maWxlLmh0bWwJMjAxNC0xMS0wMyAxNzo1NTozMS41MTEwMzQ4NTcgKzAwMDAKKysrKyBvcHJvZmlsZS0xLjAuMC9kb2Mvb3Byb2ZpbGUuaHRtbAkyMDE0LTExLTAzIDE3OjU3OjI2LjQxNTAzNzk4OCArMDAwMAorQEAgLTE1NjMsOCArMTU2Myw4IEBACisgCQk8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5tdXN0PC9lbT48L3NwYW4+IHN0b3AgaXQgaW4gYSBjb250cm9sbGVkIG1hbm5lciBpbiBvcmRlciB0byBwcm9jZXNzCisgCQl0aGUgcHJvZmlsZSBkYXRhIGl0IGhhcyBjb2xsZWN0ZWQuICBVc2UgPGNvZGUgY2xhc3M9ImNvZGUiPmtpbGwgLVNJR0lOVCAmbHQ7b3BlcmYtUElEJmd0OzwvY29kZT4KKyAJCWZvciB0aGlzIHB1cnBvc2UuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgd2hlbiBydW5uaW5nIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wZXJmPC9zdHJvbmc+PC9zcGFuPgorLQkJd2l0aCB0aGlzIG9wdGlvbiwgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNob3VsZCBiZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9yb290PC9jb2RlPiBvciBhIHN1YmRpcmVjdG9yeQorLQkJb2YgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vcm9vdDwvY29kZT4gdG8gYXZvaWQgc3RvcmluZyBzYW1wbGUgZGF0YSBmaWxlcyBpbiBsb2NhdGlvbnMgYWNjZXNzaWJsZSBieSByZWd1bGFyIHVzZXJzLgorKwkJd2l0aCB0aGlzIG9wdGlvbiwgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNob3VsZCBiZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPn5yb290PC9jb2RlPiBvciBhIHN1YmRpcmVjdG9yeQorKwkJb2YgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5+cm9vdDwvY29kZT4gdG8gYXZvaWQgc3RvcmluZyBzYW1wbGUgZGF0YSBmaWxlcyBpbiBsb2NhdGlvbnMgYWNjZXNzaWJsZSBieSByZWd1bGFyIHVzZXJzLgorIAkJPC9wPgorICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgIDxkdD4KK0luZGV4OiBvcHJvZmlsZS0xLjAuMC9kb2Mvb3Byb2ZpbGUueG1sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3Byb2ZpbGUtMS4wLjAub3JpZy9kb2Mvb3Byb2ZpbGUueG1sCTIwMTQtMTEtMDMgMTc6NTU6MzEuNTE1MDM0ODU3ICswMDAwCisrKysgb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLnhtbAkyMDE0LTExLTAzIDE3OjU4OjAzLjcxOTAzOTAwNSArMDAwMAorQEAgLTY1NCw4ICs2NTQsOCBAQAorIAkJPGVtcGhhc2lzPm11c3Q8L2VtcGhhc2lzPiBzdG9wIGl0IGluIGEgY29udHJvbGxlZCBtYW5uZXIgaW4gb3JkZXIgdG8gcHJvY2VzcworIAkJdGhlIHByb2ZpbGUgZGF0YSBpdCBoYXMgY29sbGVjdGVkLiAgVXNlIDxjb2RlPmtpbGwgLVNJR0lOVCAmbHQ7b3BlcmYtUElEJmd0OzwvY29kZT4KKyAJCWZvciB0aGlzIHB1cnBvc2UuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgd2hlbiBydW5uaW5nIDxjb21tYW5kPm9wZXJmPC9jb21tYW5kPgorLQkJd2l0aCB0aGlzIG9wdGlvbiwgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNob3VsZCBiZSA8ZmlsZW5hbWU+L3Jvb3Q8L2ZpbGVuYW1lPiBvciBhIHN1YmRpcmVjdG9yeQorLQkJb2YgPGZpbGVuYW1lPi9yb290PC9maWxlbmFtZT4gdG8gYXZvaWQgc3RvcmluZyBzYW1wbGUgZGF0YSBmaWxlcyBpbiBsb2NhdGlvbnMgYWNjZXNzaWJsZSBieSByZWd1bGFyIHVzZXJzLgorKwkJd2l0aCB0aGlzIG9wdGlvbiwgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNob3VsZCBiZSA8ZmlsZW5hbWU+fnJvb3Q8L2ZpbGVuYW1lPiBvciBhIHN1YmRpcmVjdG9yeQorKwkJb2YgPGZpbGVuYW1lPn5yb290PC9maWxlbmFtZT4gdG8gYXZvaWQgc3RvcmluZyBzYW1wbGUgZGF0YSBmaWxlcyBpbiBsb2NhdGlvbnMgYWNjZXNzaWJsZSBieSByZWd1bGFyIHVzZXJzLgorIAkJPC9wYXJhPjwvbGlzdGl0ZW0+CisgCTwvdmFybGlzdGVudHJ5PgorIAk8dmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODE0YmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9ydW4tcHRlc3QKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKK3NhdmVkX2Rpcj0kUFdECitmb3IgZGlyIGluICovdGVzdHMgOyBkbworCWNkICRkaXIKKwlmb3IgYXRlc3QgaW4gKiA7IGRvCisJCWlmIFsgXCggLXggJGF0ZXN0IFwpIC1hIFwoIC1mICRhdGVzdCBcKSBdIDsgdGhlbgorCQkJLi8kYXRlc3QgPiAke2F0ZXN0fS5zdGRvdXQgMj4gJHthdGVzdH0uc3RkZXJyCisJCQlpZiBbICQ/ID0gMCBdIDsgdGhlbgorCQkJCWVjaG8gIlBBU1M6ICRkaXIgJGF0ZXN0IgorCQkJCXJtICR7YXRlc3R9LnN0ZG91dCAke2F0ZXN0fS5zdGRlcnIKKwkJCWVsc2UKKwkJCQllY2hvICJGQUlMOiAke2Rpcn0vJHthdGVzdH0iCisJCQlmaQorCQlmaQorCWRvbmUKKwljZCAkc2F2ZWRfZGlyCitkb25lCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlXzEuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYTk0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlXzEuMS4wLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgb3Byb2ZpbGUuaW5jCisKK0RFUEVORFMgKz0gInZpcnR1YWwva2VybmVsIgorREVQRU5EU19hcHBlbmRfcG93ZXJwYzY0ID0gIiBsaWJwZm00IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjQ4YzRjMDY5Zjk0NzZmNDI3ZmE3MTk1NTYzZjk4NjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2Y3NTlhNmRlMWE2MDMzZDVkZmM5M2JkYTEyOWE5ZjJlMTI4YWVjYzQyMzhjYzY1N2ZlYjA4MDFkMWIwMzY2YyIKKworUyA9ICIke1dPUktESVJ9L29wcm9maWxlLSR7UFZ9IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU0NGVhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG9wcm9maWxlLXNlcnZlcgorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsKKyMgUmVxdWlyZWQtU3RvcDogICAgICRuZXR3b3JrCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogT1Byb2ZpbGVVSSBzZXJ2ZXIKKyMgRGVzY3JpcHRpb246ICAgICAgIAorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgICBlY2hvICJTdGFydGluZyBPUHJvZmlsZVVJIHNlcnZlciIKKwkuIC9ldGMvcHJvZmlsZQorCS91c3IvYmluL29wcm9maWxlLXNlcnZlciAmCisgIDs7CisKKyAgc3RvcCkKKyAgICAgICAgZWNobyAiU3RvcHBpbmcgT1Byb2ZpbGVVSSBzZXJ2ZXIiCisgICAgICAgIGtpbGxwcm9jIG9wcm9maWxlLXNlcnZlcgorICA7OworCisgIHJlc3RhcnQpCisJJDAgc3RvcAorICAgICAgICBzbGVlcCAxCisgICAgICAgICQwIHN0YXJ0CisgIDs7CisKKyAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IgorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTJjYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlCkBAIC0wLDAgKzEsNiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1PUHJvZmlsZVVJIFNlcnZlcgorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9L2Jpbi9zaCAtYyAiLiBAU1lTQ09ORkRJUkAvcHJvZmlsZTsgQEJJTkRJUkAvb3Byb2ZpbGUtc2VydmVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlcl9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNiNzhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlcl9naXQuYmIKQEAgLTAsMCArMSwzNCBAQAorcmVxdWlyZSBvcHJvZmlsZXVpLmluYworCitTUkNSRVYgPSAiMzg5ZTE4NzVhZjQ3MjFkNTJjN2U2NWNmOWNmZmZiNjliMGVkNmE1OSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcHJvZmlsZXVpIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSAiCisKK0RFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtY2xpZW50IC0tZW5hYmxlLXNlcnZlciIKKworUkRFUEVORFNfJHtQTn0gPSAib3Byb2ZpbGUgYXZhaGktZGFlbW9uIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL29wcm9maWxldWktc2VydmVyCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlzZWQgLWkgLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQorfQorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gIm9wcm9maWxldWktc2VydmVyIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAyMCAwIDEgNiAuIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAib3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEUgPSAiZGlzYWJsZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmY2YwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiVXNlciBJbnRlcmZhY2UgZm9yIHRoZSBTeXN0ZW0tV2lkZSBQcm9maWxlciIKK0RFU0NSSVBUSU9OID0gIlVzZXIgaW50ZXJmYWNlIGZvciB0aGUgT1Byb2ZpbGUgdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9sYWJzLm8taGFuZC5jb20vb3Byb2ZpbGV1aS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworU0VDVElPTiA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJnbGliLTIuMCBhdmFoaSBpbnRsdG9vbC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtYXZhaGkiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjlkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWlfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgb3Byb2ZpbGV1aS5pbmMKKworREVQRU5EUyArPSAiZ3RrKyBsaWJnbGFkZSBsaWJ4bWwyIGF2YWhpLXVpIGdjb25mIgorCitTUkNSRVYgPSAiMzg5ZTE4NzVhZjQ3MjFkNTJjN2U2NWNmOWNmZmZiNjliMGVkNmE1OSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcHJvZmlsZXVpIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLWNsaWVudCAtLWRpc2FibGUtc2VydmVyIgorCitQQUNLQUdFUyA9KyAib3Byb2ZpbGV1aS12aWV3ZXIiCisKK0ZJTEVTX29wcm9maWxldWktdmlld2VyID0gIiR7YmluZGlyfS9vcGFyY2hjb252ICR7YmluZGlyfS9vcHJvZmlsZS12aWV3ZXIgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvICR7ZGF0YWRpcn0vb3Byb2ZpbGV1aS8gJHtkYXRhZGlyfS9pY29ucyIKK1JERVBFTkRTX29wcm9maWxldWktdmlld2VyID0gIm9wcm9maWxlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODU5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi1mZWF0dXJlcy5pbmMKQEAgLTAsMCArMSwyMiBAQAorUEVSRl9GRUFUVVJFU19FTkFCTEUgPz0gInBlcmYtc2NyaXB0aW5nIHBlcmYtdHVpIgorCitkZWYgcGVyZl9mZWF0dXJlX2VuYWJsZWQoZmVhdHVyZSwgdHJ1ZXZhbCwgZmFsc2V2YWwsIGQpOgorICAgICIiIgorICAgIENoZWNrIHdoaWNoIHBlcmYgZmVhdHVyZXMgYXJlIGVuYWJsZWQuCisKKyAgICBUaGUgUEVSRl9GRUFUVVJFU19FTkFCTEUgdmFyaWFibGUgbGlzdHMgdGhlIHBlcmYgZmVhdHVyZXMgdG8KKyAgICBlbmFibGUuICBPdmVycmlkZSBpdCBpZiB5b3Ugd2FudCBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gd2hhdCdzCisgICAgbGlzdGVkIGFib3ZlLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4gIElmIGVtcHR5LCB0aGUgYnVpbGQgd29uJ3QKKyAgICBlbmFibGUgYW55IGZlYXR1cmVzICh3aGljaCBtYXkgYmUgZXhhY3RseSB3aGF0IHlvdSB3YW50LCBqdXN0IGEKKyAgICBiYXJlYm9uZXMgcGVyZiB3aXRob3V0IGFueSBleHRyYSBiYWdnYWdlLCB3aGF0IHlvdSBnZXQgaWYgeW91CisgICAgc3BlY2lmeSBhbiBlbXB0eSBmZWF0dXJlIGxpc3QpLgorCisgICAgQXZhaWxhYmxlIHBlcmYgZmVhdHVyZXM6CisgICAgICBwZXJmLXNjcmlwdGluZzogZW5hYmxlIHN1cHBvcnQgZm9yIFBlcmwgYW5kIFB5dGhvbiBiaW5kaW5ncworICAgICAgcGVyZi10dWk6IGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgcGVyZiBUVUkgKHZpYSBsaWJuZXd0KQorCisgICAgIiIiCisgICAgZW5hYmxlZF9mZWF0dXJlcyA9IGQuZ2V0VmFyKCJQRVJGX0ZFQVRVUkVTX0VOQUJMRSIsIFRydWUpIG9yICIiCisgICAgaWYgZmVhdHVyZSBpbiBlbmFibGVkX2ZlYXR1cmVzOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbAorICAgIHJldHVybiBmYWxzZXZhbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGIzYTJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIKQEAgLTAsMCArMSwyMTAgQEAKK1NVTU1BUlkgPSAiUGVyZm9ybWFuY2UgYW5hbHlzaXMgdG9vbHMgZm9yIExpbnV4IgorREVTQ1JJUFRJT04gPSAiUGVyZm9ybWFuY2UgY291bnRlcnMgZm9yIExpbnV4IGFyZSBhIG5ldyBrZXJuZWwtYmFzZWQgXAorc3Vic3lzdGVtIHRoYXQgcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgYWxsIHRoaW5ncyBcCitwZXJmb3JtYW5jZSBhbmFseXNpcy4gSXQgY292ZXJzIGhhcmR3YXJlIGxldmVsIFwKKyhDUFUvUE1VLCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQpIGZlYXR1cmVzIFwKK2FuZCBzb2Z0d2FyZSBmZWF0dXJlcyAoc29mdHdhcmUgY291bnRlcnMsIHRyYWNlcG9pbnRzKSBcCithcyB3ZWxsLiIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3ODEwZmFiNzQ4N2ZiMGFhZDMyN2I3NmYxYmU3Y2Q3IgorCitQUiA9ICJyOSIKKworcmVxdWlyZSBwZXJmLWZlYXR1cmVzLmluYworCitCVUlMRFBFUkZfbGliYy11Y2xpYmMgPSAibm8iCisKKyMgZ3VpIHN1cHBvcnQgd2FzIGFkZGVkIHdpdGgga2VybmVsIDMuNi4zNQorIyBzaW5jZSAzLjEwIGxpYm5ld3Qgd2FzIHJlcGxhY2VkIGJ5IHNsYW5nCisjIHRvIGNvdmVyIGEgd2lkZSByYW5nZSBvZiBrZXJuZWwgd2UgYWRkIGJvdGggZGVwZW5kZW5jaWVzCitUVUlfREVQRU5EUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi10dWknLCAnbGlibmV3dCBzbGFuZycsICcnLGQpfSIKK1NDUklQVElOR19ERVBFTkRTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsICdwZXJsIHB5dGhvbicsICcnLGQpfSIKK0xJQlVOV0lORF9ERVBFTkRTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLWxpYnVud2luZCcsICdsaWJ1bndpbmQnLCAnJyxkKX0iCisKK0RFUEVORFMgPSAiIFwKKyAgICB2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYyBcCisgICAgJHtNTFBSRUZJWH1lbGZ1dGlscyBcCisgICAgJHtNTFBSRUZJWH1iaW51dGlscyBcCisgICAgJHtUVUlfREVQRU5EU30gXAorICAgICR7U0NSSVBUSU5HX0RFUEVORFN9IFwKKyAgICAke0xJQlVOV0lORF9ERVBFTkRTfSBcCisgICAgYmlzb24gZmxleCB4eiBcCisiCisKK2RvX2NvbmZpZ3VyZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisKK1BST1ZJREVTID0gInZpcnR1YWwvcGVyZiIKKworaW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZSBrZXJuZWwtYXJjaCBweXRob25uYXRpdmUKKworIyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSB0b29scy9wZXJmIFB5dGhvbiBiaW5kaW5ncworaW5oZXJpdCBweXRob24tZGlyCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIKKworI2tlcm5lbCAzLjErIHN1cHBvcnRzIFdFUlJPUiB0byBkaXNhYmxlIHdhcm5pbmdzIGFzIGVycm9ycworZXhwb3J0IFdFUlJPUiA9ICIwIgorCitkb19wb3B1bGF0ZV9saWNbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BhdGNoIgorCisjIG5lZWRlZCBmb3IgYnVpbGRpbmcgdGhlIHRvb2xzL3BlcmYgUGVybCBiaW5kaW5nCitpbmhlcml0IHBlcmxuYXRpdmUgY3Bhbi1iYXNlCisjIEVudiB2YXIgd2hpY2ggdGVsbHMgcGVybCBpZiBpdCBzaG91bGQgdXNlIGhvc3QgKG5vKSBvciB0YXJnZXQgKHllcykgc2V0dGluZ3MKK2V4cG9ydCBQRVJMQ09ORklHVEFSR0VUID0gIiR7QGlzX3RhcmdldChkKX0iCitleHBvcnQgUEVSTF9JTkMgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS9DT1JFIgorZXhwb3J0IFBFUkxfTElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTF9BUkNITElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCisKK2luaGVyaXQga2VybmVsc3JjCisKK0IgPSAiJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0iCitTUERYX1MgPSAiJHtTfS90b29scy9wZXJmIgorCitTQ1JJUFRJTkdfREVGSU5FUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAnJywgJ05PX0xJQlBFUkw9MSBOT19MSUJQWVRIT049MScsZCl9IgorVFVJX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtdHVpJywgJycsICdOT19ORVdUPTEnLGQpfSIKK0xJQlVOV0lORF9ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLWxpYnVud2luZCcsICcnLCAnTk9fTElCVU5XSU5EPTEgTk9fTElCRFdfRFdBUkZfVU5XSU5EPTEnLGQpfSIKK0xJQk5VTUFfREVGSU5FUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1saWJudW1hJywgJycsICdOT19MSUJOVU1BPTEnLGQpfSIKKworIyBUaGUgTERGTEFHUyBpcyByZXF1aXJlZCBvciBzb21lIG9sZCBrZXJuZWxzIGZhaWxzIGR1ZSBtaXNzaW5nCisjIHN5bWJvbHMgYW5kIHRoaXMgaXMgcHJlZmVycmVkIHRoYW4gcmVxdWlyaW5nIHBhdGNoZXMgdG8gZXZlcnkgb2xkCisjIHN1cHBvcnRlZCBrZXJuZWwuCitMREZMQUdTPSItbGRsIC1sdXRpbCIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgICAtQyAke1N9L3Rvb2xzL3BlcmYgXAorICAgIE89JHtCfSBcCisgICAgQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICBBUkNIPSR7QVJDSH0gXAorICAgIENDPSIke0NDfSIgXAorICAgIEFSPSIke0FSfSIgXAorICAgIEVYVFJBX0NGTEFHUz0iLWxkdyIgXAorICAgIHBlcmZleGVjZGlyPSR7bGliZXhlY2Rpcn0gXAorICAgIE5PX0dUSzI9MSAke1RVSV9ERUZJTkVTfSBOT19EV0FSRj0xICR7TElCVU5XSU5EX0RFRklORVN9IFwKKyAgICAke1NDUklQVElOR19ERUZJTkVTfSAke0xJQk5VTUFfREVGSU5FU30gXAorJworCitFWFRSQV9PRU1BS0UgKz0gIlwKKyAgICAncHJlZml4PSR7cHJlZml4fScgXAorICAgICdiaW5kaXI9JHtiaW5kaXJ9JyBcCisgICAgJ3NoYXJlZGlyPSR7ZGF0YWRpcn0nIFwKKyAgICAnc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9JyBcCisgICAgJ3BlcmZleGVjZGlyPSR7bGliZXhlY2Rpcn0vcGVyZi1jb3JlJyBcCisgICAgXAorICAgICdFVENfUEVSRkNPTkZJRz0ke0Bvcy5wYXRoLnJlbHBhdGgoc3lzY29uZmRpciwgcHJlZml4KX0nIFwKKyAgICAnc2hhcmVkaXI9JHtAb3MucGF0aC5yZWxwYXRoKGRhdGFkaXIsIHByZWZpeCl9JyBcCisgICAgJ21hbmRpcj0ke0Bvcy5wYXRoLnJlbHBhdGgobWFuZGlyLCBwcmVmaXgpfScgXAorICAgICdpbmZvZGlyPSR7QG9zLnBhdGgucmVscGF0aChpbmZvZGlyLCBwcmVmaXgpfScgXAorIgorCisKK2RvX2NvbXBpbGUoKSB7CisJIyBMaW51eCBrZXJuZWwgYnVpbGQgc3lzdGVtIGlzIGV4cGVjdGVkIHRvIGRvIHRoZSByaWdodCB0aGluZworCXVuc2V0IENGTEFHUworCW9lX3J1bm1ha2UgYWxsCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBMaW51eCBrZXJuZWwgYnVpbGQgc3lzdGVtIGlzIGV4cGVjdGVkIHRvIGRvIHRoZSByaWdodCB0aGluZworCXVuc2V0IENGTEFHUworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwKKwkjIHdlIGFyZSBjaGVja2luZyBmb3IgdGhpcyBtYWtlIHRhcmdldCB0byBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIgcGVyZiB2ZXJzaW9ucworCWlmIFsgIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsIDEsIDAsIGQpfSIgPSAiMSIgXSAmJiBncmVwIC1xIGluc3RhbGwtcHl0aG9uX2V4dCAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUqOyB0aGVuCisJCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwtcHl0aG9uX2V4dAorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAjIEZpeCBmb3IgcmVidWlsZGluZworICAgIHJtIC1yZiAke0J9LworICAgIG1rZGlyICR7Qn0vCisKKyAgICAjIElmIGJ1aWxkaW5nIGEgbXVsdGxpYiBiYXNlZCBwZXJmLCB0aGUgaW5jb3JyZWN0IGxpYnJhcnkgcGF0aCB3aWxsIGJlCisgICAgIyBkZXRlY3RlZCBieSBwZXJmLCBzaW5jZSBpdCB0cmlnZ2VycyB2aWE6IGlmZXEgKCQoQVJDSCkseDg2XzY0KS4gSW4gYSAzMiBiaXQKKyAgICAjIGJ1aWxkLCB3aXRoIGEgNjQgYml0IG11bHRpbGliLCB0aGUgYXJjaCB3b24ndCBtYXRjaCBhbmQgdGhlIGRldGVjdGlvbiBvZiBhIAorICAgICMgNjQgYml0IGJ1aWxkIChhbmQgbGlicmFyeSkgYXJlIG5vdCBleGVjdGVkLiBUbyBlbnN1cmUgdGhhdCBsaWJyYXJpZXMgYXJlCisgICAgIyBpbnN0YWxsZWQgdG8gdGhlIGNvcnJlY3QgbG9jYXRpb24sIHdlIGNhbiB1c2UgdGhlIHdlYWsgYXNzaWdubWVudCBpbiB0aGUKKyAgICAjIGNvbmZpZy9NYWtlZmlsZS4KKyAgICAjCisgICAgIyBBbHNvIG5lZWQgdG8gcmVsb2NhdGUgLmNvbmZpZy1kZXRlY3RlZCB0byAkKE9VVFBVVCkvY29uZmlnLWRldGVjdGVkCisgICAgIyBmb3Iga2VybmVsIHNvdXJjZXMgdGhhdCBkbyBub3QgYWxyZWFkeSBkbyB0aGlzCisgICAgIyBhcyB0d28gYnVpbGRzIChlLmcuIHBlcmYgYW5kIGxpYjMyLXBlcmYgZnJvbSBtdXRsaWxpYiBjYW4gY29uZmxpY3QKKyAgICAjIHdpdGggZWFjaCBvdGhlciBpZiBpdHMgaW4gdGhlIHNoYXJlZCBzb3VyY2UgZGlyZWN0b3J5CisgICAgIworICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUiIF07IHRoZW4KKyAgICAgICAgIyBNYXRjaCAkKHByZWZpeCkvJChsaWIpIGFuZCAkKHByZWZpeCkvbGliCisgICAgICAgIHNlZCAtaSAtZSAncyxebGliZGlyID0gXCgkKHByZWZpeCkvLipsaWJcKSxsaWJkaXIgPz0gXDEsJyBcCisgICAgICAgICAgICAgICAtZSAncyxecGVyZmV4ZWNkaXIgPSBcKC4qXCkscGVyZmV4ZWNkaXIgPz0gXDEsJyBcCisgICAgICAgICAgICAgICAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAorICAgICAgICAgICAgJHtTfS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZQorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pIC1lICdzLFwgLmNvbmZpZy1kZXRlY3RlZCwgJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZCxnJyBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgICAgICBzZWQgLWkgLWUgInMscHJlZml4PSdcJChERVNURElSX1NRKS91c3InJCxwcmVmaXg9J1wkKERFU1RESVJfU1EpL3VzcicgLS1pbnN0YWxsLWxpYj0nXCQoREVTVERJUilcJChQWVRIT05fU0lURVBBQ0tBR0VTX0RJUiknLGciIFwKKyAgICAgICAgICAgICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgZmkKKyAgICBzZWQgLWkgLWUgInMsLS1yb290PScvXCQoREVTVERJUl9TUSknLC0tcHJlZml4PSdcJChERVNURElSX1NRKS91c3InIC0taW5zdGFsbC1saWI9J1wkKERFU1RESVIpXCQoUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIpJyxnIiBcCisgICAgICAgICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZQorCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5idWlsZCIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MsXCAuY29uZmlnLWRldGVjdGVkLCAkKE9VVFBVVCkvY29uZmlnLWRldGVjdGVkLGcnIFwKKyAgICAgICAgICAgICR7U30vdG9vbHMvYnVpbGQvTWFrZWZpbGUuYnVpbGQKKyAgICBmaQorCisgICAgIyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgLS1zeXNyb290IG9wdGlvbiBpbiBDQyBpcyBwcmVzZXJ2ZWQKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjLCNDQywnICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgICAgIHNlZCAtaSAncyxBUiA9ICQoQ1JPU1NfQ09NUElMRSlhciwjQVIsJyAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9saWIvYXBpL01ha2VmaWxlIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MsI0NDLCcgJHtTfS90b29scy9saWIvYXBpL01ha2VmaWxlCisgICAgICAgIHNlZCAtaSAncyxBUiA9ICQoQ1JPU1NfQ09NUElMRSlhciwjQVIsJyAke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENDIDo9ICQoQ1JPU1NfQ09NUElMRSlnY2MgLU1ELENDICs9IC1NRCwnICR7U30vdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZSIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsQ0ZMQUdTPSxDQz0iXCQoQ0MpIiBDRkxBR1M9LCcgJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlCisgICAgZmkKKworICAgICMgMy4xNy1yYzErIGhhcyBhIGluY2x1ZGUgaXNzdWUgZm9yIGFybS9wb3dlcnBjLiBUZW1wb3JhcmlseSBzZWQgaW4gdGhlIGFwcHJvcHJpYXRlIGluY2x1ZGUKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvYXJjaC8kQVJDSC91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncywjaW5jbHVkZSAidXRpbC9jYWxsY2hhaW4uaCIsI2luY2x1ZGUgInV0aWwvY2FsbGNoYWluLmgiXG4jaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIiwnICR7U30vdG9vbHMvcGVyZi9hcmNoLyRBUkNIL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL3Vud2luZC1saWJ1bndpbmQuYyIgXSAmJiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvZHdhcmYtdW53aW5kLmMiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLCNpbmNsdWRlICJ0ZXN0cy90ZXN0cy5oIiwjaW5jbHVkZSAidGVzdHMvdGVzdHMuaCJcbiNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiLCcgJHtTfS90b29scy9wZXJmL2FyY2gvYXJtL3Rlc3RzL2R3YXJmLXVud2luZC5jCisgICAgICAgIHNlZCAtaSAncywjaW5jbHVkZSAicGVyZl9yZWdzLmgiLCNpbmNsdWRlICJwZXJmX3JlZ3MuaCJcbiNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiLCcgJHtTfS90b29scy9wZXJmL2FyY2gvYXJtL3V0aWwvdW53aW5kLWxpYnVud2luZC5jCisgICAgZmkKK30KKworcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCgpIHsKKyAgICBkLnNldFZhcignUEtHVicsIGQuZ2V0VmFyKCJLRVJORUxfVkVSU0lPTiIsIFRydWUpLnNwbGl0KCItIilbMF0pCit9CisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKworUEFDS0FHRVMgPSsgIiR7UE59LWFyY2hpdmUgJHtQTn0tdGVzdHMgJHtQTn0tcGVybCAke1BOfS1weXRob24iCisKK1JERVBFTkRTXyR7UE59ICs9ICJlbGZ1dGlscyBiYXNoIgorUkRFUEVORFNfJHtQTn0tYXJjaGl2ZSA9KyAiYmFzaCIKK1JERVBFTkRTXyR7UE59LXB5dGhvbiA9KyAiYmFzaCBweXRob24iCitSREVQRU5EU18ke1BOfS1wZXJsID0rICJiYXNoIHBlcmwgcGVybC1tb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tdGVzdHMgPSsgInB5dGhvbiIKKworUlNVR0dFU1RTX1NDUklQVElORyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAnJHtQTn0tcGVybCAke1BOfS1weXRob24nLCAnJyxkKX0iCitSU1VHR0VTVFNfJHtQTn0gKz0gIiR7UE59LWFyY2hpdmUgJHtQTn0tdGVzdHMgJHtSU1VHR0VTVFNfU0NSSVBUSU5HfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZXhlY2Rpcn0vcGVyZi1jb3JlICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvcGVyZi1jb3JlICR7bGliZGlyfS90cmFjZWV2ZW50IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWFyY2hpdmUgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3BlcmYtYXJjaGl2ZSIKK0ZJTEVTXyR7UE59LXRlc3RzID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS90ZXN0cyIKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzICR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiIKK0ZJTEVTXyR7UE59LXBlcmwgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3NjcmlwdHMvcGVybCIKKworCitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQ9IjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3Bvd2VydG9wL3Bvd2VydG9wXzIuNy5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTA3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3Bvd2VydG9wL3Bvd2VydG9wXzIuNy5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlBvd2VyIHVzYWdlIHRvb2wiCitERVNDUklQVElPTiA9ICJMaW51eCB0b29sIHRvIGRpYWdub3NlIGlzc3VlcyB3aXRoIHBvd2VyIGNvbnN1bXB0aW9uIGFuZCBwb3dlciBtYW5hZ2VtZW50LiIKK0hPTUVQQUdFID0gImh0dHA6Ly8wMS5vcmcvcG93ZXJ0b3AvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubGVzc3dhdHRzLm9yZy8iCitERVBFTkRTID0gIm5jdXJzZXMgbGlibmwgcGNpdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UiCisKK1NSQ19VUkkgPSAiaHR0cDovLzAxLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL2Rvd25sb2Fkcy9wb3dlcnRvcC9wb3dlcnRvcC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMGQ2ODZlNDdkYWFmN2U5ZDg5MDMxZjc3NjM0MzJlZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZDRiMTQ5MGUyYmFhZDQ0NjdjMGRlZDNjNDIzZGI0NDcyZGNiZjdiMmRkOGY4ZjJhOTI4ZjU0MDQ3YzY3OGNhIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIHdpdGggbGliaW50bCBpbiB1Q2xpYmMgc3lzdGVtcworRVhUUkFfTERGTEFHUyA/PSAiIgorRVhUUkFfTERGTEFHU19saWJjLXVjbGliYyA9ICItbGludGwiCitMREZMQUdTICs9ICIke0VYVFJBX0xERkxBR1N9IgorCisjIHdlIGRvIG5vdCB3YW50IGxpYm5jdXJzZXN3IGlmIHdlIGNhbgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBjb25maWd1cmUuYWMgY2hlY2tzIGZvciBkZWx3aW4oKSBpbiAibmN1cnNlc3cgbmN1cnNlcyIgc28gbGV0J3MgZHJvcCBmaXJzdCBvbmUKKyAgICBzZWQgLWkgLWUgInMvbmN1cnNlc3cvL2ciICR7U30vY29uZmlndXJlLmFjCisgICAgbWtkaXIgLXAgJHtCfS9zcmMvdHVuaW5nLworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBvd2VydG9wIgorQUxURVJOQVRJVkVfVEFSR0VUW3Bvd2VydG9wXSA9ICIke3NiaW5kaXJ9L3Bvd2VydG9wIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2VydG9wXSA9ICIke3NiaW5kaXJ9L3Bvd2VydG9wIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MyY2JlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorT24gdWNsaWJjIGVsZi5oIGRvZXMgbm90IGhhdmUgR05VIGV4dGVudGlvbnMgYnV0IHdlIG5lZWQgdGhpcyBkZWZpbmUKK3NvIHdlIGRlZmluZSBpdCBsb2NhbGx5IGlmIGl0cyBub3QgZ2V0dGluZyBpdCBmcm9tIGVsZi5oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L2VsZnBhcnNlci5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWxmcGFyc2VyLmgJMjAxMS0wNy0xNiAxODo1Nzo0MS4wMDAwMDAwMDAgLTA3MDAKKysrKyBnaXQvZWxmcGFyc2VyLmgJMjAxMS0wNy0xNiAyMDoyODo1NC43MzM4Mjk4OTUgLTA3MDAKK0BAIC0xNyw2ICsxNywxMCBAQAorICAqLworICNpbmNsdWRlIDxnbGliLmg+CisgCisrI2lmbmRlZiBOVF9HTlVfQlVJTERfSUQKKysjZGVmaW5lIE5UX0dOVV9CVUlMRF9JRCAzCisrI2VuZGlmCisrCisgdHlwZWRlZiBzdHJ1Y3QgRWxmU3ltIEVsZlN5bTsKKyB0eXBlZGVmIHN0cnVjdCBFbGZQYXJzZXIgRWxmUGFyc2VyOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1hcm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNhYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1hcm0ucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdpdC91dGlsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91dGlsLmgJMjAxMC0xMi0wNyAyMjo0MTo1Ny4xNTYyNDMwMDEgLTA2MDAKKysrKyBnaXQvdXRpbC5oCTIwMTAtMTItMDcgMjI6NDM6NDcuNjE2MjQzMDAyIC0wNjAwCitAQCAtMzcsNCArMzcsMTMgQEAKKyAjZGVmaW5lIGNwdV9yZWxheCgpICAgICBhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgX19hcm1fXworKy8qCisrICogVXNlIHRoZSBfX2t1c2VyX21lbW9yeV9iYXJyaWVyIGhlbHBlciBpbiB0aGUgQ1BVIGhlbHBlciBwYWdlLiBTZWUKKysgKiBhcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGluIHRoZSBrZXJuZWwgc291cmNlIGZvciBkZXRhaWxzLgorKyAqLworKyNkZWZpbmUgcm1iKCkJCSgodm9pZCgqKSh2b2lkKSkweGZmZmYwZmEwKSgpCisrI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5IikKKysjZW5kaWYKKysKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDU1YjhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1taXBzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3V0aWwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3V0aWwuaAkyMDEwLTEyLTA4IDAxOjIyOjQ0LjQ4NjI0MzAwMSAtMDYwMAorKysrIGdpdC91dGlsLmgJMjAxMC0xMi0wOCAwMToyMzoyNy44MzYyNDMwMDEgLTA2MDAKK0BAIC0zNyw0ICszNywxNSBAQAorICNkZWZpbmUgY3B1X3JlbGF4KCkgICAgIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpOworICNlbmRpZgorIAorKyNpZmRlZiBfX21pcHNfXworKyNkZWZpbmUgcm1iKCkJCWFzbSB2b2xhdGlsZSgJCQkJCVwKKysJCQkJIi5zZXQJbWlwczJcblx0IgkJCVwKKysJCQkJInN5bmNcblx0IgkJCQlcCisrCQkJCSIuc2V0CW1pcHMwIgkJCQlcCisrCQkJCTogLyogbm8gb3V0cHV0ICovCQkJXAorKwkJCQk6IC8qIG5vIGlucHV0ICovCQkJXAorKwkJCQk6ICJtZW1vcnkiKQorKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5IikKKysjZW5kaWYKKysKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMzZTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfZ2l0LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiU3lzdGVtLXdpZGUgUGVyZm9ybWFuY2UgUHJvZmlsZXIgZm9yIExpbnV4IgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImd0aysgbGliZ2xhZGUiCisKK1NSQ1JFViA9ICJjZDQ0ZWU2NjQ0YzM2NDE1MDdmYjUzYjhhMmE2OTEzN2YyOTcxMjE5IgorUFYgPSAiMS4yLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZy9zeXNwcm9mIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfYXJtICA9ICIgZmlsZTovL3JtYi1hcm0ucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9hcm1lYiAgPSAiIGZpbGU6Ly9ybWItYXJtLnBhdGNoIgorU1JDX1VSSV9hcHBlbmRfbWlwcyA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgorU1JDX1VSSV9hcHBlbmRfbWlwczY0ID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9taXBzNjRuMzIgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgV2UgZG8gbm90IHlldCB3b3JrIGZvciBhYXJjaDY0LgorIworQ09NUEFUSUJMRV9IT1NUID0gIl4oPyFhYXJjaDY0KS4qIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4OTA4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC11cHJvYmVzX2dpdC5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIlVQcm9iZXMga2VybmVsIG1vZHVsZSBmb3IgU3lzdGVtVGFwIgorCityZXF1aXJlIHN5c3RlbXRhcF9naXQuaW5jCisKK0RFUEVORFMgPSAic3lzdGVtdGFwIHZpcnR1YWwva2VybmVsIgorCitQUiA9ICJyMSIKKworIyBPbiBzeXN0ZW1zIHdpdGhvdXQgQ09ORklHX1VUUkFDRSwgdGhpcyBwYWNrYWdlIGlzIGVtcHR5LgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworaW5oZXJpdCBtb2R1bGUtYmFzZSBnZXR0ZXh0CisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3N5c3RlbXRhcDoiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3N5c3RlbXRhcC9ydW50aW1lL3Vwcm9iZXMiCisKK0VYVFJBX09FTUFLRSA9ICIiCisKKyMgQ29tcGlsZSBhbmQgaW5zdGFsbCB0aGUgdXByb2JlcyBrZXJuZWwgbW9kdWxlIG9uIG1hY2hpbmVzIHdpdGggdXRyYWNlCisjIHN1cHBvcnQuICBOb3RlIHRoYXQgc3RhcHJ1biBleHBlY3RzIGl0IGluIHRoZSBzeXN0ZW10YXAvcnVudGltZSBkaXJlY3RvcnksCisjIG5vdCBpbiAvbGliL21vZHVsZXMuCitkb19jb21waWxlKCkgeworCWlmIGdyZXAgLXEgIkNPTkZJR19VVFJBQ0U9eSIgJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0vLmNvbmZpZworCXRoZW4KKwkJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgQ0MgTEQgQ1BQCisJCW9lX3J1bm1ha2UgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgXAorCQkJICAgQVI9IiR7S0VSTkVMX0FSfSIgXAorCQkJICAgLUMgJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IHNjcmlwdHMKKwkJb2VfcnVubWFrZSBLRElSPSR7U1RBR0lOR19LRVJORUxfRElSfSAgIFwKKwkJCSAgIE09IiR7U30vcnVudGltZS91cHJvYmVzLyIgXAorCQkJICAgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgXAorCQkJICAgQVI9IiR7S0VSTkVMX0FSfSIgXAorCQkJICAgLUMgIiR7U30vcnVudGltZS91cHJvYmVzLyIKKwlmaQorfQorCitkb19pbnN0YWxsKCkgeworCWlmIFsgLWUgIiR7U30vcnVudGltZS91cHJvYmVzL3Vwcm9iZXMua28iIF0KKwl0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc3lzdGVtdGFwL3J1bnRpbWUvdXByb2Jlcy8KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vcnVudGltZS91cHJvYmVzL3Vwcm9iZXMua28gJHtEfSR7ZGF0YWRpcn0vc3lzdGVtdGFwL3J1bnRpbWUvdXByb2Jlcy8KKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnZpcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGYyZmJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnZpcnQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA1ZWIxMGQ5MGFmOTE3OGVkYjY1ZTYwOTFhZTkzOWQxYjViMTliYjc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDIzIFNlcCAyMDE0IDA0OjQ3OjEwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHN5c3RlbXRhcDogYWxsb3cgdG8gZGlzYWJsZSBsaWJ2aXJ0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMTMgKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE2MzFhZTcuLmNiNDg4NWIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUyNSwxMCArNTI1LDE1IEBAIGRubCBDaGVjayBmb3IgdGhlIGxpYnZpcnQgYW5kIGxpYnhtbDIgZGV2ZWwgcGFja2FnZXMKKyAKKyBkbmwgV2UgcmVxdWlyZSBsaWJ2aXJ0ID49IDEuMC4yIGJlY2F1c2Ugc3RhcHZpcnQgcmVsaWVzIG9uIHRoZQorIGRubCB2aXJEb21haW5PcGVuQ2hhbm5lbCBmdW5jdGlvbiwgd2hpY2ggd2FzIGltcGxlbWVudGVkIGluIDEuMC4yLgorLVBLR19DSEVDS19NT0RVTEVTKFtsaWJ2aXJ0XSwgW2xpYnZpcnQgPj0gMS4wLjJdLCBbCistICAgaGF2ZV9saWJ2aXJ0PXllcworLSAgIEFDX0RFRklORShbSEFWRV9MSUJWSVJUXSxbMV0sW0RlZmluZSB0byAxIGlmIGxpYnZpcnQgZGV2ZWxvcG1lbnQgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWRdKQorLSAgIF0sIFtoYXZlX2xpYnZpcnQ9bm9dKQorK0FDX0FSR19FTkFCTEUoW2xpYnZpcnRdLAorKyAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ2aXJ0XSwgW0RvIG5vdCB1c2UgbGlidmlydCBldmVuIGlmIHByZXNlbnRdKSkKKysKKytpZiB0ZXN0ICIkZW5hYmxlX2xpYnZpcnQiICE9IG5vOyB0aGVuCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbbGlidmlydF0sIFtsaWJ2aXJ0ID49IDEuMC4yXSwgWworKyAgICAgaGF2ZV9saWJ2aXJ0PXllcworKyAgICAgQUNfREVGSU5FKFtIQVZFX0xJQlZJUlRdLFsxXSxbRGVmaW5lIHRvIDEgaWYgbGlidmlydCBkZXZlbG9wbWVudCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZF0pCisrICAgICBdLCBbaGF2ZV9saWJ2aXJ0PW5vXSkKKytmaQorIEFNX0NPTkRJVElPTkFMKFtIQVZFX0xJQlZJUlRdLCBbdGVzdCAiJHtoYXZlX2xpYnZpcnR9IiA9ICJ5ZXMiXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhbbGlieG1sMl0sIFtsaWJ4bWwtMi4wXSwgWworICAgIGhhdmVfbGlieG1sMj15ZXMKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhODk5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBnaXQvZG9jL1N5c3RlbVRhcF9UYXBzZXRfUmVmZXJlbmNlL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZG9jL1N5c3RlbVRhcF9UYXBzZXRfUmVmZXJlbmNlL01ha2VmaWxlLmFtCTIwMTItMDQtMTMgMDg6NDM6NDYuMjYzMzM5MDAzIC0wNTAwCisrKysgZ2l0L2RvYy9TeXN0ZW1UYXBfVGFwc2V0X1JlZmVyZW5jZS9NYWtlZmlsZS5hbQkyMDEyLTA0LTEzIDA5OjMxOjIyLjQ3MDA4MzkxNSAtMDUwMAorQEAgLTI3LDYgKzI3LDEwIEBACisgbm9pbnN0X1BST0dSQU1TID0gZG9jcHJvYworIFNSQ1RSRUU9JChhYnNfdG9wX3NyY2RpcikvCisgRE9DUFJPQz0kKGFic19idWlsZGRpcikvZG9jcHJvYworK2RvY3Byb2NfTElOSyA9ICQoQ0NfRk9SX0JVSUxEKSAkKExERkxBR1NfRk9SX0JVSUxEKSAtbyAkQAorKworK2RvY3Byb2MubzogJChzcmNkaXIpL2RvY3Byb2MuYworKwkkKENDX0ZPUl9CVUlMRCkgLWMgJChDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKHNyY2RpcikvZG9jcHJvYy5jCisgCisgYWxsOiAkKFBERkRPQ1MpIHN0YW1wLWh0bWxkb2NzIHN0YW1wLW1hbmRvY3MKKyB0YXBzZXRzLnhtbDogZG9jcHJvYyAkKHNoZWxsIGZpbmQgJChTUkNUUkVFKS90YXBzZXQgLW5hbWUgJyouc3RwJykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OGNkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTksNyArMTksNiBAQCBBQ19QUk9HX0xOX1MKKyBBQ19QUk9HX0NDCisgQUNfUFJPR19DWFgKKyBBQ19QUk9HX0NQUAorLUFNX1BST0dfQ0NfU1REQworIEFNX1BST0dfQ0NfQ19PCisgQUNfUFJPR19SQU5MSUIKKyBBQ19PQkpFWFQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9zeXN0ZW1fbWFwX2xvY2F0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzYWY1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9zeXN0ZW1fbWFwX2xvY2F0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3N5c3RlbXRhcDogQ3Jvc3MgY29tcGlsYXRpb24gZml4CisKK1RoaXMgaXMgYSBjcm9zcyBjb21waWxhdGlvbiBmaXguIEl0IGFsbG93cyBzeXN0ZW10YXAgdG8gZmluZAordGhlIGtlcm5lbCBtYXAgZmlsZSBpbiB0aGUgcmlnaHQgcGxhY2UsIGkuZS4gaW4gdGhlIGtlcm5lbCBidWlsZCB0cmVlLgorV2l0aG91dCB0aGlzIGZpeCBpdCB0YWtlcyBhIG1hcCBmaWxlIGZyb20gdGhlIGJ1aWxkIGhvc3QsIGlmIGF2YWlsYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pa2hhaWwgRHVybmV2IDxtaWtoYWlsX2R1cm5ldkBtZW50b3IuY29tPgorCitJbmRleDogZ2l0L3Nlc3Npb24uY3h4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Vzc2lvbi5jeHgKKysrKyBnaXQvc2Vzc2lvbi5jeHgKK0BAIC0xNjM0LDcgKzE2MzQsNyBAQCBzeXN0ZW10YXBfc2Vzc2lvbjo6cGFyc2Vfa2VybmVsX2Z1bmN0aW9uCisgCWNsb2cgPDwgX0YoIktlcm5lbCBzeW1ib2wgdGFibGUgJXMgdW5hdmFpbGFibGUsICglcykiLAorIAkJICAgc3lzdGVtX21hcF9wYXRoLmNfc3RyKCksIHN0cmVycm9yKGVycm5vKSkgPDwgZW5kbDsKKyAKKy0gICAgICBzeXN0ZW1fbWFwX3BhdGggPSAiL2Jvb3QvU3lzdGVtLm1hcC0iICsga2VybmVsX3JlbGVhc2U7CisrICAgICAgc3lzdGVtX21hcF9wYXRoID0ga2VybmVsX2J1aWxkX3RyZWUgKyAiL1N5c3RlbS5tYXAtIiArIGtlcm5lbF9yZWxlYXNlOworICAgICAgIHN5c3RlbV9tYXAuY2xlYXIoKTsKKyAgICAgICBzeXN0ZW1fbWFwLm9wZW4oc3lzdGVtX21hcF9wYXRoLmNfc3RyKCksIGlmc3RyZWFtOjppbik7CisgICAgICAgaWYgKCEgc3lzdGVtX21hcC5pc19vcGVuKCkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAveDMyX2FiaV90aW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3gzMl9hYmlfdGltZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE3ZWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3gzMl9hYmlfdGltZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGaXggdGltZV90IHByaW50IGJlY2F1c2UgaW4geDMyIEFCSSBpcyBsb25nIGxvbmcgaW50IGluc3RlYWQgb2YgbG9uZyBpbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NhY2hlLmN4eCBiL2NhY2hlLmN4eAoraW5kZXggMzU0NmIzMC4uMTljNzdjYSAxMDA2NDQKKy0tLSBhL2NhY2hlLmN4eAorKysrIGIvY2FjaGUuY3h4CitAQCAtMjk0LDcgKzI5NCwxMSBAQCBjbGVhbl9jYWNoZShzeXN0ZW10YXBfc2Vzc2lvbiYgcykKKyAgICAgICAgIHsKKyAgICAgICAgICAgLy9pbnRlcnZhbCBub3QgcGFzc2VkLCBkb24ndCBjb250aW51ZQorICAgICAgICAgICBpZiAocy52ZXJib3NlID4gMSkKKysjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkIChfX0lMUDMyX18pCisrICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2FjaGUgY2xlYW5pbmcgc2tpcHBlZCwgaW50ZXJ2YWwgbm90IHJlYWNoZWQgJWxsZCBzIC8gJWx1IHMuIiwKKysjZWxzZQorICAgICAgICAgICAgIGNsb2cgPDwgX0YoIkNhY2hlIGNsZWFuaW5nIHNraXBwZWQsIGludGVydmFsIG5vdCByZWFjaGVkICVsdSBzIC8gJWx1IHMuIiwKKysjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50X3RpbWUudHZfc2VjLXNiLnN0X210aW1lKSwgY2FjaGVfY2xlYW5faW50ZXJ2YWwpICA8PCBlbmRsOworICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CitAQCAtMzAyLDcgKzMwNiwxMSBAQCBjbGVhbl9jYWNoZShzeXN0ZW10YXBfc2Vzc2lvbiYgcykKKyAgICAgICAgIHsKKyAgICAgICAgICAgLy9pbnRlcnZhbCByZWFjaGVkLCBjb250aW51ZQorICAgICAgICAgICBpZiAocy52ZXJib3NlID4gMSkKKysjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkIChfX0lMUDMyX18pCisrICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2xlYW5pbmcgY2FjaGUsIGludGVydmFsIHJlYWNoZWQgJWxsZCBzID4gJWx1IHMuIiwKKysjZWxzZQorICAgICAgICAgICAgIGNsb2cgPDwgX0YoIkNsZWFuaW5nIGNhY2hlLCBpbnRlcnZhbCByZWFjaGVkICVsdSBzID4gJWx1IHMuIiwKKysjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50X3RpbWUudHZfc2VjLXNiLnN0X210aW1lKSwgY2FjaGVfY2xlYW5faW50ZXJ2YWwpICA8PCBlbmRsOworICAgICAgICAgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZDQyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJTY3JpcHQtZGlyZWN0ZWQgZHluYW1pYyB0cmFjaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcyB0b29sIGZvciBMaW51eCIKKworcmVxdWlyZSBzeXN0ZW10YXBfZ2l0LmluYworCitERVBFTkRTID0gImVsZnV0aWxzIHNxbGl0ZTMgc3lzdGVtdGFwLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImVsZnV0aWxzLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1lbGZ1dGlscyBuYXRpdmVzZGstc3FsaXRlMyBuYXRpdmVzZGstZ2V0dGV4dCIKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbiBiYXNoIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlICs9ICJweXRob24tbmF0aXZlIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrICs9ICJweXRob24tbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1saWJlbGY9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IC0td2l0aG91dC1ycG0gXAorICAgICAgICAgICAgLS13aXRob3V0LW5zcyAtLXdpdGhvdXQtYXZhaGkgLS13aXRob3V0LWR5bmluc3QgXAorICAgICAgICAgICAgLS1kaXNhYmxlLXNlcnZlciAtLWRpc2FibGUtZ3JhcGhlciAtLWVuYWJsZS1wcm9sb2d1ZXMgXAorICAgICAgICAgICAgYWNfY3ZfcHJvZ19oYXZlX2phdmFjPW5vIFwKKyAgICAgICAgICAgIGFjX2N2X3Byb2dfaGF2ZV9qYXI9bm8gIgorCitTVEFQX0RPQ1MgPz0gIi0tZGlzYWJsZS1kb2NzIC0tZGlzYWJsZS1wdWJsaWNhbiAtLWRpc2FibGUtcmVmZG9jcyIKKworRVhUUkFfT0VDT05GICs9ICIke1NUQVBfRE9DU30gIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ2aXJ0XSA9ICItLWVuYWJsZS1saWJ2aXJ0LC0tZGlzYWJsZS1saWJ2aXJ0LGxpYnZpcnQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L3N5c3RlbXRhcC8uZGVidWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTU3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmluYwpAQCAtMCwwICsxLDI4IEBACitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitTUkNSRVYgPSAiYmYxNjI2Njc4MmUxZjI1ODhiNTE5YTUwZDk2ODQyNzlkNGUyMTAzNiIKK1BWID0gIjIuNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvc3lzdGVtdGFwLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3gzMl9hYmlfdGltZS5wYXRjaCBcCisgICAgICAgICAgIgorCisjIHN5c3RlbXRhcCBkb2Vzbid0IHN1cHBvcnQgbWlwcworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFybXxhYXJjaDY0KS4qLWxpbnV4JworCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIHN5c3RlbXRhcCBjYW4ndCBiZSBidWlsdCB3aXRob3V0IG9wdGltaXphdGlvbiwgaWYgc29tZW9uZSB0cmllcyB0byBjb21waWxlIGFuCisjIGVudGlyZSBpbWFnZSBhcyAtTzAsIHdlIG92ZXJyaWRlIGl0IHdpdGggLU8yIGhlcmUgYW5kIGdpdmUgYSBub3RlIGFib3V0IGl0LgorZGVmIGdldF9vcHRpbWl6YXRpb24oZCk6CisgICAgc2VsZWN0ZWRfb3B0aW1pemF0aW9uID0gZC5nZXRWYXIoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsIFRydWUpCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTzAiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoInN5c3RlbXRhcCBjYW4ndCBiZSBidWlsdCB3aXRoIC1PMCwgLU8yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU8wIiwgIi1PMiIpCisgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbgorCitTRUxFQ1RFRF9PUFRJTUlaQVRJT04gOj0gIiR7QGdldF9vcHRpbWl6YXRpb24oZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWNjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC9rZXJuZWxzaGFya19naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJHcmFwaGljYWwgdHJhY2Ugdmlld2VyIGZvciBGdHJhY2UiCitMSUNFTlNFID0gIkdQTHYyIgorCityZXF1aXJlIHRyYWNlLWNtZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8va2VybmVsLXNoYXJrLmM7YmVnaW5saW5lPTY7ZW5kbGluZT04O21kNT0yYzIyYzk2NWE2NDlkZGQ3OTczZDc5MTNjNTYzNGE1ZSIKKworREVQRU5EUyA9ICJndGsrIGxpYnhtbDIiCitSREVQRU5EU18ke1BOfSA9ICJ0cmFjZS1jbWQiCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ3ByZWZpeD0ke3ByZWZpeH0nIFwKKyAgICAnYmluZGlyX3JlbGF0aXZlPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBiaW5kaXIpfScgXAorICAgICdsaWJkaXI9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGxpYmRpcil9JyBcCisgICAgTk9fUFlUSE9OPTEgXAorICAgIGd1aSBcCisiCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LCisgICAgcm0gLWYgJHtCfS8uKi5kCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSBERVNURElSPSIke0R9IiBpbnN0YWxsX2d1aQorICAgIHJtICR7RH0ke2JpbmRpcn0vdHJhY2UtY21kCisgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vdHJhY2UtY21kCisgICAgcm1kaXIgJHtEfSR7bGliZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlNGE5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMKQEAgLTAsMCArMSwxMiBAQAorU1JDUkVWID0gIjA4MTMzMzVkMmU0OTI5MWU3YWI2YTQzNjVjZWMyYmFhMDU4MTNlZGEiCitQViA9ICIyLjUuMytnaXQke1NSQ1BWfSIKKworaW5oZXJpdCBwa2djb25maWcKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vdHJhY2UtY21kOiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcm9zdGVkdC90cmFjZS1jbWQuZ2l0O2JyYW5jaD10cmFjZS1jbWQtc3RhYmxlLXYyLjUgXAorICAgICAgICAgICBmaWxlOi8vYmxrdHJhY2UtYXBpLWNvbXBhdGliaWxpdHkucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGRiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQvYmxrdHJhY2UtYXBpLWNvbXBhdGliaWxpdHkucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAordHJhY2UtY21kOiBBZGQgYmxrdHJhY2VfYXBpIGNvbXBhdGliaWxpdHkgZm9yIFRDX0JBUlJJRVIKKworTmV3ZXIga2VybmVscyByZXBsYWNlIFRDX0JBUlJJRVIgd2l0aCBUQ19GTFVTSC4gRW5zdXJlIHRyYWNlLWNtZAorY2FuIGJ1aWxkIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpbnV4LWtlcm5lbC1oZWFkZXJzIHZlcnNpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU3RvcCBnYXBdCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvcGx1Z2luX2Jsay5jIGIvcGx1Z2luX2Jsay5jCitpbmRleCA5MzI3YjE3Li5jOGU1ZTFjIDEwMDY0NAorLS0tIGEvcGx1Z2luX2Jsay5jCisrKysgYi9wbHVnaW5fYmxrLmMKK0BAIC00NCw2ICs0NCwxNSBAQCBzdHJ1Y3QgYmxrX2RhdGEgeworIAl1bnNpZ25lZCBzaG9ydAkJcGR1X2xlbjsKKyB9OworIAorKy8qCisrICogTmV3ZXIga2VybmVscyBkb24ndCBkZWZpbmUgQkxLX1RDX0JBUlJJRVIgYW5kIGhhdmUgcmVwbGFjZWQgaXQgd2l0aAorKyAqIEJMS19UQ19GTFVTSC4gSW4gdGhpcyBjYXNlLCBkZWZpbmUgaXQgaGVyZSBhbmQgcmVwb3J0IEZMVVNIRVMgYXMgQkFSUklFUlMgYXMKKysgKiBhIHdvcmthcm91bmQsIGFzIGRlc2NyaWJlZCBpbjoKKysgKiBodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9bGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQ7YT1jb21taXQ7aD1jMDljNDdjYWVkYzk4NTRkNTkzNzhkNmUzNGM5ODllNTFjZmRkMmI0CisrICovCisrI2lmbmRlZiBCTEtfVENfQkFSUklFUgorKyNkZWZpbmUgQkxLX1RDX0JBUlJJRVIgMTw8MgorKyNlbmRpZgorIHN0YXRpYyB2b2lkIGZpbGxfcndicyhjaGFyICpyd2JzLCBpbnQgYWN0aW9uLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCisgeworIAlpbnQgaSA9IDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWFjNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kX2dpdC5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlVzZXIgaW50ZXJmYWNlIHRvIEZ0cmFjZSIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKKworcmVxdWlyZSB0cmFjZS1jbWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyYWNlLWNtZC5jO2JlZ2lubGluZT02O2VuZGxpbmU9ODttZDU9MmMyMmM5NjVhNjQ5ZGRkNzk3M2Q3OTEzYzU2MzRhNWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyYWNlLWlucHV0LmM7YmVnaW5saW5lPTU7ZW5kbGluZT04O21kNT0zZWM4MmY0M2JiZTBjZmI1OTUxZmY0MTRlZjRkNDRkMCBcCisiCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ3ByZWZpeD0ke3ByZWZpeH0nIFwKKyAgICAnYmluZGlyPSR7YmluZGlyfScgXAorICAgICdtYW5fZGlyPSR7bWFuZGlyfScgXAorICAgICdodG1sX2luc3RhbGw9JHtkYXRhZGlyfS9rZXJuZWxzaGFyay9odG1sJyBcCisgICAgJ2ltZ19pbnN0YWxsPSR7ZGF0YWRpcn0va2VybmVsc2hhcmsvaHRtbC9pbWFnZXMnIFwKKyAgICBcCisgICAgJ2JpbmRpcl9yZWxhdGl2ZT0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgYmluZGlyKX0nIFwKKyAgICAnbGliZGlyPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBsaWJkaXIpfScgXAorICAgIFwKKyAgICBOT19QWVRIT049MSBcCisiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3RyYWNlLWNtZC9wbHVnaW5zLy5kZWJ1ZyIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly4qLmQKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBERVNURElSPSIke0R9IiBpbnN0YWxsCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTMuYmIgYi9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjUzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODYxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjUzLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiUE5HIGltYWdlIGZvcm1hdCBkZWNvZGluZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJwbmcub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTGlicG5nIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YmQyYTdhMTMzNTVmY2NhOTJhZDgzYmRmN2UyOTYwMTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcG5nLmg7YmVnaW5saW5lPTMyMjtlbmRsaW5lPTQzNjttZDU9Y2FmOWVlNTQxMjM0YzY2M2FlZWNkY2ZlZjJmNzlhZTEiCitERVBFTkRTID0gInpsaWIiCisKK1BOID0gImxpYnBuZzEyIgorUyA9ICIke1dPUktESVJ9L2xpYnBuZy0ke1BWfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saWJwbmcvbGlicG5nMTIvJHtQVn0vbGlicG5nLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkMThhNzRlNmZkMjAyOWFlZTc2Y2NkMDBlMDBhOWU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0NWU0OWY2ODllNzQ1MWJkNTc2NTY5ZTZhMzQ0ZjdlMGQxMWMwMmVjYmI3OTdmNGRhMGU0MzE1MjY3NjVjMGEiCisKK0JJTkNPTkZJR19HTE9CID0gIiR7UE59LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnIHBrZ2NvbmZpZworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFRoZSBmb2xsb3cgbGluayBmaWxlcyBsaW5rIHRvIGNvcnJlc3BvbmRpbmcgcG5nMTIqLmggYW5kIGxpYnBuZzEyKiBmaWxlcworCSMgVGhleSBjb25mbGljdCB3aXRoIGhpZ2hlciB2ZXJpc29uLCBzbyBkcm9wIHRoZW0KKwl1bmxpbmsgJHtEfS8ke2luY2x1ZGVkaXJ9L3BuZy5oCisJdW5saW5rICR7RH0vJHtpbmNsdWRlZGlyfS9wbmdjb25mLmgKKworCXVubGluayAke0R9LyR7bGliZGlyfS9saWJwbmcubGEKKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vbGlicG5nLnNvCisJdW5saW5rICR7RH0vJHtsaWJkaXJ9L2xpYnBuZy5hCisJdW5saW5rICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJwbmcucGMKKworCXVubGluayAke0R9LyR7YmluZGlyfS9saWJwbmctY29uZmlnCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzODQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliY2xhc3MtaXNhLXBlcmxfMC4zNi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciByZXBvcnRpbmcgdGhlIHNlYXJjaCBwYXRoIGZvciBhIGNsYXNzJ3MgSVNBIHRyZWUiCitERVNDUklQVElPTiA9ICJTdXBwb3NlIHlvdSBoYXZlIGEgY2xhc3MgKGxpa2UgRm9vZDo6RmlzaDo6RmlzaHN0aWNrKSB0aGF0IGlzIGRlcml2ZWQsIFwKK3ZpYSBpdHMgQElTQSwgZnJvbSBvbmUgb3IgbW9yZSBzdXBlcmNsYXNzZXMgKGFzIEZvb2Q6OkZpc2g6OkZpc2hzdGljayBpcyBmcm9tIEZvb2Q6OkZpc2gsXAorTGlmZTo6RnVuZ3VzLCBhbmQgQ2hlbWljYWxzKSwgYW5kIHNvbWUgb2YgdGhvc2Ugc3VwZXJjbGFzc2VzIG1heSB0aGVtc2VsdmVzIGVhY2ggYmVcCitkZXJpdmVkLCB2aWEgaXRzIEBJU0EsIGZyb20gb25lIG9yIG1vcmUgc3VwZXJjbGFzc2VzIChhcyBhYm92ZSkuXAorXAorV2hlbiwgdGhlbiwgeW91IGNhbGwgYSBtZXRob2QgaW4gdGhhdCBjbGFzcyAoJGZpc2hzdGljay0+Y2Fsb3JpZXMpLCBQZXJsIGZpcnN0IHNlYXJjaGVzXAordGhlcmUgZm9yIHRoYXQgbWV0aG9kLCBidXQgaWYgaXQncyBub3QgdGhlcmUsIGl0IGdvZXMgc2VhcmNoaW5nIGluIGl0cyBzdXBlcmNsYXNzZXMsIGFuZFwKK3NvIG9uLCBpbiBhIGRlcHRoLWZpcnN0IChvciBtYXliZSAiaGVpZ2h0LWZpcnN0IiBpcyB0aGUgd29yZCkgc2VhcmNoLiBJbiB0aGUgYWJvdmUgZXhhbXBsZSxcCitpdCdkIGZpcnN0IGxvb2sgaW4gRm9vZDo6RmlzaCwgdGhlbiBGb29kLCB0aGVuIE1hdHRlciwgdGhlbiBMaWZlOjpGdW5ndXMsIHRoZW4gTGlmZSwgdGhlblwKK0NoZW1pY2Fscy5cCitcCitUaGlzIGxpYnJhcnksIENsYXNzOjpJU0EsIHByb3ZpZGVzIGZ1bmN0aW9ucyB0aGF0IHJldHVybiB0aGF0IGxpc3QgLS0gdGhlIGxpc3RcCisoaW4gb3JkZXIpIG9mIG5hbWVzIG9mIGNsYXNzZXMgUGVybCB3b3VsZCBzZWFyY2ggdG8gZmluZCBhIG1ldGhvZCwgd2l0aCBubyBkdXBsaWNhdGVzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0L0NsYXNzLUlTQS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTEwNztlbmRsaW5lPTExMTttZDU9NmE1YzY4NDJhNjNjZmU0ZGFiMWY2NmUyMzUwZTRkMjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvUy9TTS9TTVVFTExFUi9DbGFzcy1JU0EtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2EyYWQyMDNjOGRjODdkNmM5ZGUxNjIxNWQwMGFmNDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODgxNmYzNGU5YTM4ZTg0OWExMGRmNzU2MDMwZGNjZjlmZTA2MWExOTZjMTFhYzNmYWFmZDcxMTNjOTI5Yjk2NCIKKworUyA9ICIke1dPUktESVJ9L0NsYXNzLUlTQS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzQ2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmR1bXB2YWx1ZS1wZXJsXzEuMTcuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3IgcHJvdmlkZXMgc2NyZWVuIGR1bXAgb2YgUGVybCBkYXRhIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35mbG9yYS9EdW1wdmFsdWUvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjczNmJlYzVhZGExZmM1ZTM5YjJhOGU3ZTA2YmJjYmIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9EdW1wdmFsdWUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmVkZTlmNjkzZDRhOWM0NTU1NTQxY2IxYTFjYzIwMDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWVhNzQ2MDZiNTQ1Zjc2OWE3ODdlYzJhZTIyOTU0OWEyYWQwYThlM2NkNGIxNGVmZjJjZTM4NDE4MzZiM2JkYiIKKworUyA9ICIke1dPUktESVJ9L0R1bXB2YWx1ZS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJlbnYtcGVybF8xLjA0LmJiIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJlbnYtcGVybF8xLjA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGUxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmVudi1wZXJsXzEuMDQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSB0aGF0IGltcG9ydHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFzIHNjYWxhcnMgb3IgYXJyYXlzIgorREVTQ1JJUFRJT04gPSAiUGVybCBtYWludGFpbnMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGEgc3BlY2lhbCBoYXNoIG5hbWVkICVFTlYuIFwKK0ZvciB3aGVuIHRoaXMgYWNjZXNzIG1ldGhvZCBpcyBpbmNvbnZlbmllbnQsIHRoZSBQZXJsIG1vZHVsZSBFbnYgYWxsb3dzIGVudmlyb25tZW50IFwKK3ZhcmlhYmxlcyB0byBiZSB0cmVhdGVkIGFzIHNjYWxhciBvciBhcnJheSB2YXJpYWJsZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35mbG9yYS9FbnYvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzZjMWNiZjE4ZGI1NmIzMzQwZDkxY2I5NDc5NDNiZDMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9FbnYtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmRiYTVjMDY5MGU2Njk3MmM5NmZlZTExMmNmNWYyNWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDk0YTNkNDEyZGYyNDZhZmRjMzFhMjE5OWNiZDhhZTkxNTE2N2EzZjQ2ODRmN2I3MDE0Y2UxMjAwMjUxZWJiMCIKKworUyA9ICIke1dPUktESVJ9L0Vudi0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJmaWxlLWNoZWNrdHJlZS1wZXJsXzQuNDEuYmIgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTM3YzcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJmaWxlLWNoZWNrdHJlZS1wZXJsXzQuNDEuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSB0aGF0IHJ1biBtYW55IGZpbGV0ZXN0IGNoZWNrcyBvbiBhIHRyZWUiCitERVNDUklQVElPTiA9ICJUaGUgdmFsaWRhdGUoKSByb3V0aW5lIHRha2VzIGEgc2luZ2xlIG11bHRpbGluZSBzdHJpbmcgY29uc2lzdGluZyBcCitvZiBkaXJlY3RpdmVzLCBlYWNoIGNvbnRhaW5pbmcgYSBmaWxlbmFtZSBwbHVzIGEgZmlsZSB0ZXN0IHRvIHRyeSBvbiBpdC4gKFRoZSBmaWxlIFwKK3Rlc3QgbWF5IGFsc28gYmUgYSAiY2QiLCBjYXVzaW5nIHN1YnNlcXVlbnQgcmVsYXRpdmUgZmlsZW5hbWVzIHRvIGJlIGludGVycHJldGVkIFwKK3JlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LikgQWZ0ZXIgdGhlIGZpbGUgdGVzdCB5b3UgbWF5IHB1dCB8fCBkaWUgdG8gbWFrZSBpdCBhIFwKK2ZhdGFsIGVycm9yIGlmIHRoZSBmaWxlIHRlc3QgZmFpbHMuIFRoZSBkZWZhdWx0IGlzIHx8IHdhcm4uIFRoZSBmaWxlIHRlc3QgbWF5IFwKK29wdGlvbmFsbHkgaGF2ZSBhICIhJyBwcmVwZW5kZWQgdG8gdGVzdCBmb3IgdGhlIG9wcG9zaXRlIGNvbmRpdGlvbi4gSWYgeW91IGRvIGEgXAorY2QgYW5kIHRoZW4gbGlzdCBzb21lIHJlbGF0aXZlIGZpbGVuYW1lcywgeW91IG1heSB3YW50IHRvIGluZGVudCB0aGVtIHNsaWdodGx5IGZvciBcCityZWFkYWJpbGl0eS4gSWYgeW91IHN1cHBseSB5b3VyIG93biBkaWUoKSBvciB3YXJuKCkgbWVzc2FnZSwgeW91IGNhbiB1c2UgJGZpbGUgdG8gXAoraW50ZXJwb2xhdGUgdGhlIGZpbGVuYW1lLiBcCitcCitGaWxldGVzdHMgbWF5IGJlIGJ1bmNoZWQ6ICItcnd4IiB0ZXN0cyBmb3IgYWxsIG9mIC1yLCAtdywgYW5kIC14LiBPbmx5IHRoZSBmaXJzdCBmYWlsZWQgXAordGVzdCBvZiB0aGUgYnVuY2ggd2lsbCBwcm9kdWNlIGEgd2FybmluZy4gXAorXAorVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHdhcm5pbmdzIGlzc3VlZC4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0ZpbGUtQ2hlY2tUcmVlLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWM2ZmNhY2M1ZGY4MGUwMzcwNjAzMDBhN2Y0YjkzYmY5IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvRmlsZS1DaGVja1RyZWUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTE5YzgyYWE3ZTViN2Y3NTJiNGRhMTRhNmM4YWQ3NDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmM5OWFiNmJiNWFmNDY2NDgzMjcxNTk3NGI1YTE5ZTMyODA3MWRjOTIwMmFiNzJlNWQ1YTU5NGViZDQ2YTcyOSIKKworUyA9ICIke1dPUktESVJ9L0ZpbGUtQ2hlY2tUcmVlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MzllMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliaTE4bi1jb2xsYXRlLXBlcmxfMS4wMi5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgY29tcGFyZSA4LWJpdCBzY2FsYXIgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIgorREVTQ1JJUFRJT04gPSAiVGhpcyBtb2R1bGUgcHJvdmlkZXMgeW91IHdpdGggb2JqZWN0cyB0aGF0IHdpbGwgY29sbGF0ZSBhY2NvcmRpbmcgdG8gXAoreW91ciBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LCBwcm92aWRlZCB0aGF0IHRoZSBQT1NJWCBzZXRsb2NhbGUoKSBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgXAorb24geW91ciBzeXN0ZW0uIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35mbG9yYS9JMThOLUNvbGxhdGUvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZmY2ZDYyOTE0NGE2ZWMxZWE4YzMwMGY3NTc2MDE4NGYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9JMThOLUNvbGxhdGUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzJkZGI2ZDFjNTljZmRmMzFhYTNiMDQ3OTliODZhZjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTE3NDUwNmJjOTAzZWRhODk2OTAzOTRlM2Y0NTU1OGFiN2UwMTMxMTQyMjc4OTZkODU2OWQ2MTY0NjQ4ZmUzNyIKKworUyA9ICIke1dPUktESVJ9L0kxOE4tQ29sbGF0ZS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJwb2QtcGxhaW5lci1wZXJsXzEuMDQuYmIgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1OGYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJwb2QtcGxhaW5lci1wZXJsXzEuMDQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJQZXJsIGV4dGVuc2lvbiBmb3IgY29udmVydGluZyBQb2QgdG8gb2xkLXN0eWxlIFBvZCIKK0RFU0NSSVBUSU9OID0gIlBvZDo6UGxhaW5lciB1c2VzIFBvZDo6UGFyc2VyIHdoaWNoIHRha2VzIFBvZCB3aXRoIHRoZSAobmV3KSAnQzw8IC4uID4+JyBcCitjb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBvbGQoZXIpIHN0eWxlIHdpdGgganVzdCAnQzw+JzsgJzwnIGFuZCAnPicgYXJlIHJlcGxhY2VkIGJ5IFwKKydFPGx0PicgYW5kICdFPGd0PicuIFwKK1wKK1RoaXMgY2FuIGJlIHVzZWQgdG8gcHJlLXByb2Nlc3MgUG9kIGJlZm9yZSB1c2luZyB0b29scyB3aGljaCBkbyBub3QgcmVjb2duaXNlIHRoZSBuZXcgc3R5bGUgUG9kcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvZGlzdC9Qb2QtUGxhaW5lci8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTI3O21kNT0yMjdjZjgzOTcwZmM2MTI2NDg0NTgyNWQ5ZDJiZjZmOCIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9SL1JNL1JNQkFSS0VSL1BvZC1QbGFpbmVyLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImY1MDJlYWNkMWE0MDg5NGI5ZGZlYTU1ZmMyY2Q1ZTdkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFiYmZiZjdkMWQ0ODcxZTVhODNiYWIyMTM3ZTIyZDA4OTA3ODIwNjgxNTE5MGViMWQ1YzEyNjBhMzQ5OTQ1NmYiCisKK1MgPSAiJHtXT1JLRElSfS9Qb2QtUGxhaW5lci0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWZwdS5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtZnB1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQwMjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWZwdS5pbmMKQEAgLTAsMCArMSw2IEBACisKK2RlZiBnZXRfYWxzYV9mcHVfc2V0dGluZyhiYiwgZCk6CisJaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JyBdOgorCQlyZXR1cm4gIi0td2l0aC1zb2Z0ZmxvYXQiCisJcmV0dXJuICIiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODNiYzNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi8wMDAxLWJ1aWxkLURvLW5vdC10cnktdG8tZGV0ZWN0LWNyb3NzLWNvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gMTdhZWIzNTY1ZjQxMWU3Nzk2Y2FiZTQwM2Y5MmQxNTk0OGE4Y2E5NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIxIEF1ZyAyMDE1IDE0OjQyOjQ1IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJ1aWxkOiBEbyBub3QgdHJ5IHRvIGRldGVjdCBjcm9zcy1jb21waWxlcgorCitjcm9zcyBjb21waWxlcnMgYXJlIHBhc3NlZCB2aWEgcGF0aCBtYXkgbm90IGJlIGEgZ2NjIGJhc2VkIGNyb3NzCitjb21waWxlciBpbiBzdWNoIGNhc2VzIHRoaXMgY2hlY2sgZmFpbHMgYW5kIHRyeSdzIHRvIGZvcmNlIGdjYyBiYXNlZAorY3Jvc3MgY29tcGlsZXIgZGV0ZWN0aW9uLCBUaGlzIGNvZGUgaXMgYSBjb252ZW5pZW5jZSB0aGF0IGxpbWl0cyB0aGUKK2J1aWxkIHN5c3RlbQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGNvbmZpZ3VyZS5hYyB8IDE0IC0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAzMDIyY2Y4Li45ZDc3NDQwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNywyMCArMjcsNiBAQCBBQ19QUkVGSVhfREVGQVVMVCgvdXNyKQorIAorIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorIAorLWRubCB0cnkgdG8gZ3VlcyBjcm9zcy1jb21waWxlciBpZiBub3Qgc2V0CistaWYgdGVzdCAieCRob3N0IiAhPSAieCRidWlsZCIgLWEgLXogImBlY2hvICRDQyB8IGdyZXAgLWUgJy1nY2MnYCI7CistdGhlbgorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBjcm9zcy1jb21waWxlcikKKy0KKy0gIHdoaWNoICR7cHJvZ3JhbV9wcmVmaXh9Z2NjID4vZGV2L251bGwgMj4mMSAmJiBDQz0ke3Byb2dyYW1fcHJlZml4fWdjYworLSAgd2hpY2ggJHtob3N0X2NwdX0tJHtob3N0X29zfS1nY2MgPi9kZXYvbnVsbCAyPiYxIFwKKy0gICYmIENDPSR7aG9zdF9jcHV9LSR7aG9zdF9vc30tZ2NjCistICB3aGljaCAke2hvc3RfY3B1fS0ke2hvc3RfdmVuZG9yfS0ke2hvc3Rfb3N9LWdjYyA+L2Rldi9udWxsIDI+JjEgXAorLSAgJiYgQ0M9JHtob3N0X2NwdX0tJHtob3N0X3ZlbmRvcn0tJHtob3N0X29zfS1nY2MKKy0KKy0gIEFDX01TR19SRVNVTFQoJENDKQorLWZpCistCSAgICAKKyBDRkxBR1M9IiRDRkxBR1MgLURfR05VX1NPVVJDRSIKKyAKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhNmViOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSBlMzMzNTdiNTlhMTBkNDRlOWJlYzVkMjQxMDBjZTIzY2EzMDBjYzc5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkhvbmcgSC4gUGhhbSIgPGhvbmcucGhhbUB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyOSBBdWcgMjAxNCAxNzoxMzo1NSArMDMwMAorU3ViamVjdDogW1BBVENIXSBDaGVjayBpZiB3b3JkZXhwIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZAorCitlZ2xpYmMgY291bGQgYmUgY29uZmlndXJlZCB0byBidWlsZCB3aXRob3V0IHdvcmRleHAsIHNvIGl0IGlzIG5vdCBlbm91Z2gKK3RvIGNoZWNrIGlmIHdvcmRleHAuaCBleGlzdHMgKHRoZSBoZWFkZXIgZmlsZSBjb3VsZCBiZSBpbnN0YWxsZWQsIGJ1dCBpdCdzCitwb3NzaWJsZSB0aGF0IHRoZSB3b3JkZXhwKCkgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCkuICBBbiBhZGRpdGlvbmFsCitjaGVjayBpZiB3b3JkZXhwKCkgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0gQyBsaWJyYXJ5IGlzIG5lZWRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBIb25nIEguIFBoYW0gPGhvbmcucGhhbUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgIHwgNSArKysrLQorIHNyYy91c2VyZmlsZS5jIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiODM1M2EwLi43NzNiNzJmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMTEsNyArMzExLDEwIEBAIGZpCisgQUNfU1VCU1QoQUxTQV9ERVBMSUJTKQorIAorIGRubCBDaGVjayBmb3IgaGVhZGVycworLUFDX0NIRUNLX0hFQURFUlMoW3dvcmRleHAuaCBlbmRpYW4uaCBzeXMvZW5kaWFuLmhdKQorK0FDX0NIRUNLX0hFQURFUlMoW3dvcmRleHAuaCBlbmRpYW4uaCBzeXMvZW5kaWFuLmhdLAorKyAgZG5sIE1ha2Ugc3VyZSB3b3JkZXhwIGlzIHN1cHBvcnRlZCBieSB0aGUgQyBsaWJyYXJ5CisrICBBQ19DSEVDS19GVU5DUyhbd29yZGV4cF0pCisrKQorIAorIGRubCBDaGVjayBmb3IgcmVzbWdyIHN1cHBvcnQuLi4KKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHJlc21nciBzdXBwb3J0KQorZGlmZiAtLWdpdCBhL3NyYy91c2VyZmlsZS5jIGIvc3JjL3VzZXJmaWxlLmMKK2luZGV4IDNhNzM4MzYuLmI4Y2U4MDkgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmZpbGUuYworKysrIGIvc3JjL3VzZXJmaWxlLmMKK0BAIC0zMiw3ICszMiw3IEBACisgICogc3RvcmVzIHRoZSBmaXJzdCBtYXRjaGluZSBvbmUuICBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIHN0cmR1cCdlZC4KKyAgKi8KKyAKKy0jaWZkZWYgSEFWRV9XT1JERVhQX0gKKysjaWYgKGRlZmluZWQoSEFWRV9XT1JERVhQX0gpICYmIGRlZmluZWQoSEFWRV9XT1JERVhQKSkKKyAjaW5jbHVkZSA8d29yZGV4cC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyBpbnQgc25kX3VzZXJfZmlsZShjb25zdCBjaGFyICpmaWxlLCBjaGFyICoqcmVzdWx0KQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMC4yOS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGY0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMC4yOS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkFMU0Egc291bmQgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL2xvZ2luX3BhZ2UucGhwIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NvY2tldC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjY7bWQ1PTExZmY4OWE4YTdhNGE2OTBhNWM3OGVmZmU4MTU5NTQ1IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKyMgY29uZmlndXJlLmluIHNldHMgLURfX2FybV9fIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIGFueSBhcm0gc3lzdGVtCisjIChub3QganVzdCB0aG9zZSB3aXRoIHRoZSBBUk0gaW5zdHJ1Y3Rpb24gc2V0KSwgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZCwKKyMgKG9yIHJlcGxhY2VkIGJ5IGEgcGVybWl0dGVkICNkZWZpbmUpLgorI0ZJWE1FOiByZW1vdmUgdGhlIGZvbGxvd2luZworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL2xpYi8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL0NoZWNrLWlmLXdvcmRleHAtZnVuY3Rpb24taXMtc3VwcG9ydGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImRlNjdlMGVjYTcyNDc0ZDZiMTEyMTAzN2RhZmUxMDI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczMDQzYzM1ZWI5NjM2YmUwZjRhZjZhMjQwMjM1YzIxM2YxMmEyNWZlYjFmMDRhZWVhYzhjYjdlMzBmY2JkZDAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCityZXF1aXJlIGFsc2EtZnB1LmluYworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfYWxzYV9mcHVfc2V0dGluZyhiYiwgZCl9ICIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1weXRob24iCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0td2l0aC12ZXJzaW9uZWQ9bm8gIgorCitQQUNLQUdFUyA9KyAiYWxzYS1zZXJ2ZXIgbGliYXNvdW5kIGFsc2EtY29uZi1iYXNlIGFsc2EtY29uZiBhbHNhLWRvYyIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59L3NtaXhlci8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59L3NtaXhlci8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLyoubGEiCitGSUxFU19saWJhc291bmQgPSAiJHtsaWJkaXJ9L2xpYmFzb3VuZC5zby4qIgorRklMRVNfYWxzYS1zZXJ2ZXIgPSAiJHtiaW5kaXJ9LyoiCitGSUxFU19hbHNhLWNvbmYgPSAiJHtkYXRhZGlyfS9hbHNhLyIKK0ZJTEVTX2Fsc2EtY29uZi1iYXNlID0gIlwKKyR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL2NhcmRzL2FsaWFzZXMuY29uZiBcCiske2RhdGFkaXJ9L2Fsc2EvcGNtL2RlZmF1bHQuY29uZiBcCiske2RhdGFkaXJ9L2Fsc2EvcGNtL2RtaXguY29uZiBcCiske2RhdGFkaXJ9L2Fsc2EvcGNtL2Rzbm9vcC5jb25mIgorCitSREVQRU5EU19saWJhc291bmQgPSAiYWxzYS1jb25mLWJhc2UgYWxzYS1jb25mIgorIyB1cGdyYWRlIHBhdGgKK1JQUk9WSURFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCitSUkVQTEFDRVNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgorUkNPTkZMSUNUU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWFyY2FtLWF2LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1mZF9zZXQtZGVmaW5pdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MGM3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWFyY2FtLWF2LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1mZF9zZXQtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGQyOGM2NTViZTNhYzRmY2I4MDI0NTU1OTgzODg0ZjgzMmVlMTg3ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXkgMjAxNSAxNToxNzozMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhcmNhbS1hdjogSW5jbHVkZSBzeXMvc2VsZWN0LmggZm9yIGZkX3NldCBkZWZpbml0aW9uCisKK2ZpeGVzIGJ1aWxkIGVycm9ycyBvbiBub24tZ2xpYmMgYmFzZWQgc3lzdGVtcworCithcmNhbS1hdi9hcmNhbV9hdi5jOjM4OToyOiBlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ2ZkX3NldCcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIGFyY2FtLWF2L2FyY2FtX2F2LmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2FyY2FtLWF2L2FyY2FtX2F2LmMgYi9hcmNhbS1hdi9hcmNhbV9hdi5jCitpbmRleCAwNDkxZmM2Li5mZmY5NmY5IDEwMDY0NAorLS0tIGEvYXJjYW0tYXYvYXJjYW1fYXYuYworKysrIGIvYXJjYW0tYXYvYXJjYW1fYXYuYworQEAgLTMxLDYgKzMxLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgI2luY2x1ZGUgPHN5cy9pcGMuaD4KKysjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorICNpbmNsdWRlIDxzeXMvc2htLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtaW5jbHVkZS1zcGVleGRzcF90eXBlcy5oLW5vdC1zcGVleF90eXBlcy5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxOTlmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtaW5jbHVkZS1zcGVleGRzcF90eXBlcy5oLW5vdC1zcGVleF90eXBlcy5oLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gY2E0MWU5NmE0OWE1NjgxMjgzNTRmNjVmOTBhNzY5ZGViZjU0MzVmMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCA5IEp1bCAyMDE1IDExOjU4OjEyICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3BlZXhkc3BfdHlwZXMuaCwgbm90IHNwZWV4X3R5cGVzLmgKKworU3BlZXhkc3Agd2FzIHNlcGFyYXRlZCBmcm9tIHNwZWV4IGluIDEuMnJjMi4gc3BlZXhfdHlwZXMuaCBpcyBub3QKK3NoaXBwZWQgYnkgc3BlZXhkc3AsIHNvIGFsc2EtcGx1Z2lucyBzaG91bGRuJ3QgdXNlIHRoYXQgZmlsZS4gc3BlZXhkc3AKK2hhcyBzcGVleGRzcF90eXBlcy5oLCB3aGljaCBoYXMgdGhlIHNhbWUgY29udGVudHMgYXMgc3BlZXhfdHlwZXMuaC4KKworc3BlZXhkc3BfdHlwZXMuaCBpcyBhIG5ldyBmaWxlIGludHJvZHVjZWQgaW4gMS4ycmMyLCBzbyB0aGlzIGNoYW5nZQorYnVtcHMgdGhlIG1pbmltdW0gc3VwcG9ydGVkIHNwZWV4ZHNwIHZlcnNpb24uIFRoZSB2ZXJzaW9uIGNoZWNrIGluCitjb25maWd1cmUuYWMgd2lsbCBhY3R1YWxseSBicmVhayBpZiBzcGVleGRzcCAxLjIgZXZlciBnZXRzIHJlbGVhc2VkLAorYmVjYXVzZSBwa2ctY29uZmlnIHRoaW5rcyB0aGF0ICIxLjIiIDwgIjEuMnJjMiIsIGJ1dCBJIHRoaW5rIGl0J3MKK3VzZWZ1bCB0byBmYWlsIGlmIHRoZSBpbnN0YWxsZWQgc3BlZXhkc3AgdmVyc2lvbiBpcyAxLjJyYzEgKHdoaWNoIEkKK2JlbGlldmUgaXMgdmVyeSBjb21tb24gb24gY3VycmVudCBkaXN0cmlidXRpb25zKS4gSWYgYSBub24tcmMgdmVyc2lvbgorb2Ygc3BlZXhkc3Agd2lsbCBldmVyIGdldCByZWxlYXNlZCwgSSBob3BlIHZlcnNpb24gbnVtYmVyIDEuMiB3aWxsIGJlCitza2lwcGVkIGZvciB0aGlzIHJlYXNvbi4gKEEgbm9uLXJjIHZlcnNpb24gc2VlbXMgdW5saWtlbHksIHNpbmNlCisxLjJyYzEgd2FzIHJlbGVhc2VkIHllYXJzIGFnbywgc28gaXQncyBwcmV0dHkgbGlrZWx5IHRoYXQgdGhlIHByb2plY3QKK2lzIHN0dWNrIG9uIHNvIGNhbGxlZCAicmVsZWFzZSBjYW5kaWRhdGVzIiBmb3JldmVyLi4uKQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUubGludXguYWxzYS5kZXZlbC8xNDExNDkpCisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgIHwgMiArLQorIHBwaC9hcmNoLmggICAgICAgICAgICB8IDIgKy0KKyBwcGgvc3BlZXhfcmVzYW1wbGVyLmggfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDkwMmE2ZDcuLmM1NTRkMjIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwOCw3ICsxMDgsNyBAQCBBQ19TVUJTVChBVkNPREVDX0NGTEFHUykKKyBBQ19TVUJTVChBVkNPREVDX0xJQlMpCisgQUNfU1VCU1QoQVZDT0RFQ19IRUFERVIpCisgCistUEtHX0NIRUNLX01PRFVMRVMoc3BlZXhkc3AsIFtzcGVleGRzcCA+PSAxLjJdLCBbSEFWRV9TUEVFWERTUD0ieWVzIl0sIFtIQVZFX1NQRUVYRFNQPSIiXSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhzcGVleGRzcCwgW3NwZWV4ZHNwID49IDEuMnJjMl0sIFtIQVZFX1NQRUVYRFNQPSJ5ZXMiXSwgW0hBVkVfU1BFRVhEU1A9IiJdKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfU1BFRVhEU1AsIHRlc3QgIiRIQVZFX1NQRUVYRFNQIiA9ICJ5ZXMiKQorIAorIEFDX0FSR19XSVRIKFtzcGVleF0sCitkaWZmIC0tZ2l0IGEvcHBoL2FyY2guaCBiL3BwaC9hcmNoLmgKK2luZGV4IGUyZDczMWEuLmEwN2QwZDkgMTAwNjQ0CistLS0gYS9wcGgvYXJjaC5oCisrKysgYi9wcGgvYXJjaC5oCitAQCAtMzYsNyArMzYsNyBAQAorICNkZWZpbmUgQVJDSF9ICisgCisgI2lmbmRlZiBPVVRTSURFX1NQRUVYCistI2luY2x1ZGUgInNwZWV4L3NwZWV4X3R5cGVzLmgiCisrI2luY2x1ZGUgInNwZWV4L3NwZWV4ZHNwX3R5cGVzLmgiCisgI2VuZGlmCisgCisgI2RlZmluZSBBQlMoeCkgKCh4KSA8IDAgPyAoLSh4KSkgOiAoeCkpICAgICAgLyoqPCBBYnNvbHV0ZSBpbnRlZ2VyIHZhbHVlLiAqLworZGlmZiAtLWdpdCBhL3BwaC9zcGVleF9yZXNhbXBsZXIuaCBiL3BwaC9zcGVleF9yZXNhbXBsZXIuaAoraW5kZXggYzQ0ZmJjZC4uYWE4NWFiYiAxMDA2NDQKKy0tLSBhL3BwaC9zcGVleF9yZXNhbXBsZXIuaAorKysrIGIvcHBoL3NwZWV4X3Jlc2FtcGxlci5oCitAQCAtODIsNyArODIsNyBAQAorICAgICAgIAorICNlbHNlIC8qIE9VVFNJREVfU1BFRVggKi8KKyAKKy0jaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKysjaW5jbHVkZSAic3BlZXgvc3BlZXhkc3BfdHlwZXMuaCIKKyAKKyAjZW5kaWYgLyogT1VUU0lERV9TUEVFWCAqLworIAorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjAuMjkuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyODYxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMC4yOS5iYgpAQCAtMCwwICsxLDEwNSBAQAorREVTQ1JJUFRJT04gPSAiQUxTQSBQbHVnaW5zIgorSE9NRVBBR0UgPSAiaHR0cDovL2Fsc2EtcHJvamVjdC5vcmciCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKKyMgVGhlIHByaW1hcnkgbGljZW5zZSBvZiBhbHNhLXBsdWdpbnMgaXMgTEdQTHYyLjEuCisjCisjIG00L2F0dHJpYnV0ZXMubTQgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrLiBtNC9hdHRyaWJ1dGVzLm00IGlzIHBhcnQgb2YgdGhlCisjIGJ1aWxkIHN5c3RlbSwgYW5kIGRvZXNuJ3QgYWZmZWN0IHRoZSBsaWNlbnNpbmcgb2YgdGhlIGJ1aWxkIHJlc3VsdC4KKyMKKyMgVGhlIHNhbXBsZXJhdGUgcGx1Z2luIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKyB0byBiZSBjb25zaXN0ZW50CisjIHdpdGggdGhlIGxpYnNhbXBsZXJhdGUgbGljZW5zZS4KK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKKyAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgIGZpbGU6Ly9tNC9hdHRyaWJ1dGVzLm00O2VuZGxpbmU9MzM7bWQ1PWIyNTk1OGRhNDRjMDIyMzFlMzY0MWYxYmNjZWY1M2ViIFwKKyAgICAgICAgZmlsZTovL3JhdGUvcmF0ZV9zYW1wbGVyYXRlLmM7ZW5kbGluZT0xOTttZDU9ZjNkM2NlMGIxODk4NDZhNDg2NTE3ZDk3YTg1NGIyNzYgXAorIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi9wbHVnaW5zLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImE2Njc5N2I0NDcxZTNjYmU5NjU3NTIwN2JmYmUyNTJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMyNWQ4NWNhYzI4NWY2MzJiODNlMDE5MWFlM2YzNDhiYWQwM2MxZjAwN2I5MzcwNDJmMTY0YWJiODFlYTY1MzIiCisKK0RFUEVORFMgKz0gImFsc2EtbGliIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gIlwKKyAgICAgICAgc2FtcGxlcmF0ZSBcCisgICAgICAgIHNwZWV4ZHNwIFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IFwKKyIKK1BBQ0tBR0VDT05GSUdbYXZjb2RlY10gPSAiLS1lbmFibGUtYXZjb2RlYywtLWRpc2FibGUtYXZjb2RlYyxsaWJhdiIKK1BBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgorUEFDS0FHRUNPTkZJR1ttYWVtby1wbHVnaW5dID0gIi0tZW5hYmxlLW1hZW1vLXBsdWdpbiwtLWRpc2FibGUtbWFlbW8tcGx1Z2luIgorUEFDS0FHRUNPTkZJR1ttYWVtby1yZXNvdXJjZS1tYW5hZ2VyXSA9ICItLWVuYWJsZS1tYWVtby1yZXNvdXJjZS1tYW5hZ2VyLC0tZGlzYWJsZS1tYWVtby1yZXNvdXJjZS1tYW5hZ2VyLGRidXMiCitQQUNLQUdFQ09ORklHW3B1bHNlYXVkaW9dID0gIi0tZW5hYmxlLXB1bHNlYXVkaW8sLS1kaXNhYmxlLXB1bHNlYXVkaW8scHVsc2VhdWRpbyIKK1BBQ0tBR0VDT05GSUdbc2FtcGxlcmF0ZV0gPSAiLS1lbmFibGUtc2FtcGxlcmF0ZSwtLWRpc2FibGUtc2FtcGxlcmF0ZSxsaWJzYW1wbGVyYXRlMCIKK1BBQ0tBR0VDT05GSUdbc3BlZXhkc3BdID0gIi0td2l0aC1zcGVleD1saWIsLS13aXRoLXNwZWV4PW5vLHNwZWV4ZHNwIgorCitQQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHVsc2VhdWRpbycsICdhbHNhLXBsdWdpbnMtcHVsc2VhdWRpby1jb25mJywgJycsIGQpfSIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebGliYXNvdW5kLW1vZHVsZS0uKiIKKworIyBUaGUgYWxzYS1wbHVnaW5zIHBhY2thZ2UgZG9lc24ndCBpdHNlbGYgY29udGFpbiBhbnl0aGluZywgaXQganVzdCBkZXBlbmRzIG9uCisjIGFsbCBidWlsdCBwbHVnaW5zLgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gJHtEfSR7bGliZGlyfS9hbHNhLWxpYi8qLmxhCisKKwkjIFdlIHVzZSB0aGUgZXhhbXBsZSBhcyBpcywgc28ganVzdCBkcm9wIHRoZSAuZXhhbXBsZSBzdWZmaXguCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHVsc2VhdWRpbycsICd5ZXMnLCAnbm8nLCBkKX0iID0gInllcyIgXTsgdGhlbgorCQltdiAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mLmV4YW1wbGUgJHtEfSR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZgorCWZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIHBsdWdpbmRpciA9IGJiLmRhdGEuZXhwYW5kKCcke2xpYmRpcn0vYWxzYS1saWIvJywgZCkKKyAgICBwYWNrYWdlcyA9ICIgIi5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbmRpciwgJ15saWJhc291bmRfbW9kdWxlXyguKilcLnNvJCcsICdsaWJhc291bmQtbW9kdWxlLSVzJywgJ0Fsc2EgcGx1Z2luIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpKQorICAgIGQuc2V0VmFyKCJSREVQRU5EU19hbHNhLXBsdWdpbnMiLCBwYWNrYWdlcykKK30KKworIyBUaGUgcmF0ZSBwbHVnaW5zIGNyZWF0ZSBzb21lIHN5bWxpbmtzLiBGb3IgZXhhbXBsZSwgdGhlIHNhbXBsZXJhdGUgcGx1Z2luCisjIGNyZWF0ZXMgdGhlc2UgbGlua3MgdG8gdGhlIG1haW4gcGx1Z2luIGZpbGU6CisjCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfYmVzdC5zbworIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX2xpbmVhci5zbworIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX21lZGl1bS5zbworIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX29yZGVyLnNvCisjCisjIFRoZSBvdGhlciByYXRlIHBsdWdpbnMgY3JlYXRlIHNpbWlsYXIgbGlua3MuIFdlIGhhdmUgdG8gYWRkIHRoZSBsaW5rcyB0bworIyBGSUxFUyBtYW51YWxseSwgYmVjYXVzZSBkb19zcGxpdF9wYWNrYWdlcygpIHNraXBzIHRoZSBsaW5rcyAod2hpY2ggaXMgZ29vZCwKKyMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB3YW50IGRvX3NwbGl0X3BhY2thZ2VzKCkgdG8gY3JlYXRlIHNlcGFyYXRlIHBhY2thZ2VzIGZvcgorIyB0aGUgc3ltbGlua3MpLgorIworIyBUaGUgc3ltbGlua3MgY2F1c2UgUUEgZXJyb3JzLCBiZWNhdXNlIHVzdWFsbHkgaXQncyBhIGJ1ZyBpZiBhIG5vbgorIyAtZGV2Ly1kYmcvLW5hdGl2ZXNkayBwYWNrYWdlIGNvbnRhaW5zIGxpbmtzIHRvIC5zbyBmaWxlcywgYnV0IGluIHRoaXMgY2FzZQorIyB0aGUgZXJyb3JzIGFyZSBmYWxzZSBwb3NpdGl2ZXMsIHNvIHdlIGRpc2FibGUgdGhlIFFBIGNoZWNrcy4KK0ZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLWxhdmNyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfbGF2Y3JhdGVfKi5zbyIKK0ZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNhbXBsZXJhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9zYW1wbGVyYXRlXyouc28iCitGSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9zcGVleHJhdGVfKi5zbyIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLWxhdmNyYXRlID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNhbXBsZXJhdGUgPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc3BlZXhyYXRlID0gImRldi1zbyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYWxzYS1saWIvLmRlYnVnIgorCisjIDUwLXB1bHNlYXVkaW8uY29uZiBkZWZpbmVzIGEgZGV2aWNlIG5hbWVkICJwdWxzZSIgdGhhdCBhcHBsaWNhdGlvbnMgY2FuIHVzZQorIyBpZiB0aGV5IGV4cGxpY2l0bHkgd2FudCB0byB1c2UgdGhlIFB1bHNlQXVkaW8gcGx1Z2luLgorIyA5OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBjb25maWd1cmVzIHRoZSAiZGVmYXVsdCIgZGV2aWNlIHRvIHVzZSB0aGUKKyMgUHVsc2VBdWRpbyBwbHVnaW4uCitGSUxFU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKKyAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzUwLXB1bHNlYXVkaW8uY29uZiBcCisgICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBcCisiCisKK1JERVBFTkRTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLWNvbmYtcHVsc2UgXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLWN0bC1wdWxzZSBcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtcGNtLXB1bHNlIFwKKyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQ5YTMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMWU1OTI2ZGY3NGEzNWZlMmNkOTBiYzU5ZjUyNjRhODcxNWM5NDA0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDg6MTY6NTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXMxMGsxOiBNYWtlIG91dHB1dF90cmFtX2xpbmUoKSBzdGF0aWMgaW5saW5lCisKK1RoZSBmdW5jdGlvbiBpcyBub3QgdXNlZCBpbiBhbnkgb3RoZXIgZmlsZSwgaXRzIGJldHRlciB0byBtYWtlIGl0IHN0YXRpYworaW5saW5lIHNvIGNvbXBpbGVyIGhhcyBhIGJldHRlciBjaGFuY2Ugb2Ygb3B0aW1pemluZyBoZXJlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgYXMxMGsxL2FzMTBrMS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXMxMGsxL2FzMTBrMS5jIGIvYXMxMGsxL2FzMTBrMS5jCitpbmRleCA5NmFmMGMzLi5kMDc2NmZkIDEwMDY0NAorLS0tIGEvYXMxMGsxL2FzMTBrMS5jCisrKysgYi9hczEwazEvYXMxMGsxLmMKK0BAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBhc19leGl0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisgCWV4aXQoMSk7CisgfQorIAorLWlubGluZSB2b2lkIG91dHB1dF90cmFtX2xpbmUoIHN0cnVjdCBsaXN0X2hlYWQgKmxpbmVfaGVhZCwgaW50IHR5cGUpeworK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRwdXRfdHJhbV9saW5lKCBzdHJ1Y3QgbGlzdF9oZWFkICpsaW5lX2hlYWQsIGludCB0eXBlKXsKKyAgICAgICAgIAorICAgICAgICAgc3RydWN0IHRyYW0gKnRyYW1fc3ltOworICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9hdXRvdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzkxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvYXV0b3Rvb2xzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0FkZCBwYXJhbWV0ZXJzIHRvIGF1dG9yZWNvbmYgdG8gc3VwcG9ydCBjcm9zcyBjb21waWxlLgorUmVtb3ZlIHNvbWUgc3ViLWNvbXBvbmVudHMgd2hpY2ggbmVlZHMgZnVydGhlciByZWNpcGUgc3VwcG9ydC4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9sZDEwazEvZ2l0Y29tcGlsZSBhbHNhLXRvb2xzLTEuMC4yNC4xL2xkMTBrMS9naXRjb21waWxlCistLS0gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9sZDEwazEvZ2l0Y29tcGlsZQkyMDExLTA3LTA2IDExOjI3OjQwLjIyNzY2NTAwMiArMDgwMAorKysrIGFsc2EtdG9vbHMtMS4wLjI0LjEvbGQxMGsxL2dpdGNvbXBpbGUJMjAxMS0wNy0xNCAxMzoyNjoxOC4wMTc2NjUwMDQgKzA4MDAKK0BAIC0xLDYgKzEsNiBAQAorICMhL2Jpbi9iYXNoCisgCistYXV0b3JlY29uZiAtZmkgfHwgZXhpdCAxCisrYXV0b3JlY29uZiAkQUNMT0NBTF9GTEFHUyAtZmkgfHwgZXhpdCAxCisgZXhwb3J0IENGTEFHUz0nLU8yIC1XYWxsIC1waXBlIC1nJworIGVjaG8gIkNGTEFHUz0kQ0ZMQUdTIgorIGVjaG8gIi4vY29uZmlndXJlICRAIgorZGlmZiAtcnVOIGFsc2EtdG9vbHMtMS4wLjI0LjEtb3JpZy8vTWFrZWZpbGUgYWxzYS10b29scy0xLjAuMjQuMS9NYWtlZmlsZQorLS0tIGFsc2EtdG9vbHMtMS4wLjI0LjEtb3JpZy8vTWFrZWZpbGUJMjAxMS0wNy0wNiAxMToyNzo0MC4yMDc2NjUwMDAgKzA4MDAKKysrKyBhbHNhLXRvb2xzLTEuMC4yNC4xL01ha2VmaWxlCTIwMTEtMDctMTQgMTU6MDg6MDguODc3NjY1MDA5ICswODAwCitAQCAtMSw4ICsxLDggQEAKKyBWRVJTSU9OID0gMS4wLjI5CisgVE9QID0gLgorLVNVQkRJUlMgPSBhczEwazEgZW52eTI0Y29udHJvbCBoZHNwbG9hZGVyIGhkc3Bjb25mIGhkc3BtaXhlciBcCisrU1VCRElSUyA9IGFzMTBrMSBlbnZ5MjRjb250cm9sIFwKKyAJICBtaXhhcnRsb2FkZXIgcGN4aHJsb2FkZXIgcm1lZGlnaWNvbnRyb2wgc2IxNl9jc3Agc2VxIHNzY2FwZV9jdGwgXAorLQkgIHVzNDI4Y29udHJvbCB1c3gyeWxvYWRlciB2eGxvYWRlciBlY2hvbWl4ZXIgbGQxMGsxIHFsbzEwazEgXAorKwkgIHVzNDI4Y29udHJvbCB1c3gyeWxvYWRlciB2eGxvYWRlciBlY2hvbWl4ZXIgXAorIAkgIGh3bWl4dm9sdW1lIGhkYWphY2tyZXRhc2sgaGRhLXZlcmIgaGRhamFja3NlbnNldGVzdAorIAorIGFsbDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MzI4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0CkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9iYXNoCisKK2FjbG9jYWwgJEFDTE9DQUxfRkxBR1MgfHwgZXhpdCAxCithdXRvbWFrZSAtLWZvcmVpZ24gLS1hZGQtbWlzc2luZyB8fCBleGl0IDEKK2F1dG9jb25mIHx8IGV4aXQgMQorZXhwb3J0IENGTEFHUz0nLU8yIC1XYWxsIC1waXBlIC1nJworZWNobyAiQ0ZMQUdTPSRDRkxBR1MiCitlY2hvICIuL2NvbmZpZ3VyZSAkQCIKKy4vY29uZmlndXJlICRAIHx8IGV4aXQgMQordW5zZXQgQ0ZMQUdTCitpZiBbIC16ICIkR0lUQ09NUElMRV9OT19NQUtFIiBdOyB0aGVuCisgIG1ha2UgfHwgZXhpdCAxCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL21ha2VmaWxlX25vX2d0ay5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9tYWtlZmlsZV9ub19ndGsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NzYwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9tYWtlZmlsZV9ub19ndGsucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorUmVtb3ZlIHNvbWUgc3ViLWNvbXBvbmVudHMgd2hpY2ggbmVlZCBndGsrLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJvZ2VyaW8gTnVuZXMgPHJvbnVuZXNAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworVXBkYXRlIHBhdGNoIGZvciBhbHNhLXRvb2xzIDEuMC4yOQorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDI0NTdhMWMuLjcyMzQ2ZDkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xLDkgKzEsOSBAQAorIFZFUlNJT04gPSAxLjAuMjkKKyBUT1AgPSAuCistU1VCRElSUyA9IGFzMTBrMSBlbnZ5MjRjb250cm9sIFwKKy0JICBtaXhhcnRsb2FkZXIgcGN4aHJsb2FkZXIgcm1lZGlnaWNvbnRyb2wgc2IxNl9jc3Agc2VxIHNzY2FwZV9jdGwgXAorLQkgIHVzNDI4Y29udHJvbCB1c3gyeWxvYWRlciB2eGxvYWRlciBlY2hvbWl4ZXIgXAorLQkgIGh3bWl4dm9sdW1lIGhkYWphY2tyZXRhc2sgaGRhLXZlcmIgaGRhamFja3NlbnNldGVzdAorK1NVQkRJUlMgPSBhczEwazEgXAorKwkgIG1peGFydGxvYWRlciBwY3hocmxvYWRlciBzYjE2X2NzcCBzZXEgc3NjYXBlX2N0bCBcCisrCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIFwKKysJICBod21peHZvbHVtZSBoZGEtdmVyYiBoZGFqYWNrc2Vuc2V0ZXN0CisgCisgYWxsOgorIAlAZm9yIGkgaW4gJChTVUJESVJTKTsgZG8gXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMC4yOS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmMzk2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjAuMjkuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJBZHZhbmNlZCB0b29scyBmb3IgY2VydGFpbiBBTFNBIHNvdW5kIGNhcmQgZHJpdmVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL2xvZ2luX3BhZ2UucGhwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MisiCitERVBFTkRTID0gImFsc2EtbGliIG5jdXJzZXMgZ2xpYi0yLjAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2hkc3Bsb2FkZXIvQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGQxMGsxL0NPUFlJTkcuTElCO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvdG9vbHMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vbWFrZWZpbGVfbm9fZ3RrLnBhdGNoJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL2dpdGNvbXBpbGVfaGRhamFja3NlbnNldGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjMzOWEzY2QyNGY3NDhjOWQwMDdiZGZmMGU5ODc3NWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTRhYmYwYWI1YTczZjA3MTBjNzBkNGZiM2RjMTAwM2FmNWJhZTJkMmVkNzIxZDU5ZDI0NWI0MWFkMGYyZmJkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZworCitDTEVBTkJST0tFTiA9ICIxIgorCitFWFRSQV9PRU1BS0UgKz0gIkdJVENPTVBJTEVfQVJHUz0nLS1ob3N0PSR7SE9TVF9TWVN9IC0tYnVpbGQ9JHtCVUlMRF9TWVN9IC0tdGFyZ2V0PSR7VEFSR0VUX1NZU30gLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IC0tcHJlZml4PSR7cHJlZml4fSciCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdndGsrJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbZ3RrK10gPSAiLCxndGsrIGd0ayszLCIKKworIyBjb25maWd1cmUuYWMvLmluIGRvZXNuJ3QgZXhpc3Qgc28gZm9yY2UgY29weQorQVVUT1RPT0xTX0NPUFlBQ0xPQ0FMID0gIjEiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisgICAgI0F1dG9tYWtlIGRpciBpcyBub3QgY29ycmVjdGx5IGRldGVjdGVkIGluIGNyb3NzIGNvbXBpbGF0aW9uIGNhc2UKKyAgICBleHBvcnQgQVVUT01BS0VfRElSPSIkKGF1dG9tYWtlIC0tcHJpbnQtbGliZGlyKSIKKyAgICBleHBvcnQgQUNMT0NBTF9GTEFHUz0iLS1zeXN0ZW0tYWNkaXI9JHtBQ0xPQ0FMRElSfS8iCisKKyAgICBjcCAke1dPUktESVJ9L2dpdGNvbXBpbGVfaGRhamFja3NlbnNldGVzdCAke1N9L2hkYWphY2tzZW5zZXRlc3QvZ2l0Y29tcGlsZQorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9sZDEwazEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjAuMjkuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4ZjliOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMC4yOS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIGFsc2EtdXRpbHNfJHtQVn0uYmIKKworU1VNTUFSWSA9ICJTaGVsbCBzY3JpcHRzIHRoYXQgc2hvdyBoZWxwIGluZm8gYW5kIGNyZWF0ZSBBTFNBIGNvbmZpZ3VyYXRpb24gZmlsZXMiCitQUk9WSURFUyA9ICJhbHNhLXV0aWxzLWFsc2Fjb25mIgorCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9hbHNhLXV0aWxzOiIKKworUEFDS0FHRVMgPSAiJHtQTn0iCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCIKKworRklMRVNfJHtQTn0gPSAiJHtzYmluZGlyfS9hbHNhY29uZiBcCisgICAgICAgICAgICAgICAke3NiaW5kaXJ9L2Fsc2EtaW5mby5zaCBcCisgICAgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2Fsc2EtdXRpbHMtJHtQVn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2Fsc2Fjb25mL2Fsc2Fjb25mICR7RH0ke3NiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke1N9L2Fsc2EtaW5mby9hbHNhLWluZm8uc2ggJHtEfSR7c2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTlkZDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIDQzYTU2ZmEzNmExMmYwOWNjZDc4YjNjZjVlNmFlMTk3ZmNhYjUwMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogRnJpLCAyOSBBdWcgMjAxNCAxODo1ODo1NiArMDMwMAorU3ViamVjdDogW1BBVENIXSBhbHNhY3RsOiBkb24ndCBsZXQgc3lzdGVtZCB1bml0IHJlc3RvcmUgdGhlIHZvbHVtZSB3aGVuCisgYXNvdW5kLnN0YXRlIGlzIG1pc3NpbmcKKworVGhpcyBhdm9pZHMgYW4gZXJyb3Igb24gYm9vdHVwCisKK0ZpbGVkIGFzIGh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy92aWV3LnBocD9pZD01NDU5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGFsc2FjdGwvTWFrZWZpbGUuYW0gICAgICAgICAgICAgfCA3ICsrKystLS0KKyBhbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hbHNhY3RsL01ha2VmaWxlLmFtIGIvYWxzYWN0bC9NYWtlZmlsZS5hbQoraW5kZXggNDdmMDZlOS4uYjcyOGMwNiAxMDA2NDQKKy0tLSBhL2Fsc2FjdGwvTWFrZWZpbGUuYW0KKysrKyBiL2Fsc2FjdGwvTWFrZWZpbGUuYW0KK0BAIC00Myw5ICs0MywxMCBAQCBpbnN0YWxsLWRhdGEtaG9vazoKKyBlbmRpZgorIAorIGVkaXQgPSBcCistCSQoU0VEKSAtciAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgXAorLQkJICAtZSAncyxAbXlkYXRhZGlyXEAsJChteWRhdGFkaXIpLGcnIFwKKy0JCSAgLWUgJ3MsQGRhZW1vbnN3aXRjaFxALCQoQUxTQUNUTF9EQUVNT05TV0lUQ0gpLGcnIFwKKysJJChTRUQpIC1lICdzLEBsb2NhbHN0YXRlZGlyXEAsJChsb2NhbHN0YXRlZGlyKSxnJyBcCisrCSAgICAgICAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgXAorKwkgICAgICAgLWUgJ3MsQG15ZGF0YWRpclxALCQobXlkYXRhZGlyKSxnJyBcCisrCSAgICAgICAtZSAncyxAZGFlbW9uc3dpdGNoXEAsJChBTFNBQ1RMX0RBRU1PTlNXSVRDSCksZycgXAorIAkJCQkJCQk8ICQ8ID4gJEAgfHwgcm0gJEAKKyAKKyBhbHNhLXN0YXRlLnNlcnZpY2U6IGFsc2Etc3RhdGUuc2VydmljZS5pbgorZGlmZiAtLWdpdCBhL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4gYi9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluCitpbmRleCAyNDVhNDM5Li5iMDE3ODU0IDEwMDY0NAorLS0tIGEvYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbgorKysrIGIvYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbgorQEAgLTEwLDYgKzEwLDcgQEAgRGVmYXVsdERlcGVuZGVuY2llcz1ubworIEFmdGVyPWFsc2Etc3RhdGUuc2VydmljZQorIEJlZm9yZT1zaHV0ZG93bi50YXJnZXQKKyBDb25mbGljdHM9c2h1dGRvd24udGFyZ2V0CisrQ29uZGl0aW9uUGF0aEV4aXN0cz1AbG9jYWxzdGF0ZWRpckAvbGliL2Fsc2EvYXNvdW5kLnN0YXRlCisgCisgW1NlcnZpY2VdCisgVHlwZT1vbmVzaG90CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjAwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithcGxheS9hcmVjb3JkIChhbHNhLXV0aWxzIHYxLjAuMjgpIGNhbm5vdCBpbnRlcnJ1cHQgc3RyZWFtaW5nCit2aWEgQ1RSTC1DLiBGaXhlZCB0aGUgaXNzdWUgYnkgcmV2ZXJ0aW5nIGJ1Z2d5IHBhdGNoZXMgYW5kCitwcm9wZXJseSBoYW5kbGluZyAnaW5fYWJvcnRpbmcnIGZsYWcgaW4gYXBwcm9wcmlhdGUgZnVuY3Rpb25zLgorCitTaWduZWQtb2ZmLWJ5OiBBbmFudCBBZ3Jhd2FsIDxBbmFudF9BZ3Jhd2FsQG1lbnRvci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNaWtoYWlsIER1cm5ldiA8bWlraGFpbF9kdXJuZXZAbWVudG9yLmNvbT4KKworLS0tIGEvYXBsYXkvYXBsYXkuYwkyMDE0LTA1LTE5IDE2OjI1OjE0LjAwMDAwMDAwMCArMDUzMAorKysrIGIvYXBsYXkvYXBsYXkuYwkyMDE0LTA1LTIwIDE1OjE3OjE0LjM2NDgyMzAwNyArMDUzMAorQEAgLTM5MiwxNCArMzkyLDIyIEBACisgCQlwdXRjaGFyKCdcbicpOworIAlpZiAoIXF1aWV0X21vZGUpCisgCQlmcHJpbnRmKHN0ZGVyciwgXygiQWJvcnRlZCBieSBzaWduYWwgJXMuLi5cbiIpLCBzdHJzaWduYWwoc2lnKSk7CistCWlmIChoYW5kbGUpCisrCWlmIChzdHJlYW0gPT0gU05EX1BDTV9TVFJFQU1fQ0FQVFVSRSkgeworKwkJaWYgKGZtdF9yZWNfdGFibGVbZmlsZV90eXBlXS5lbmQpIHsKKysJCQlmbXRfcmVjX3RhYmxlW2ZpbGVfdHlwZV0uZW5kKGZkKTsKKysJCQlmZCA9IC0xOworKwkJfQorKwkJc3RyZWFtID0gLTE7CisrCX0KKysJaWYgKGZkID4gMSkgeworKwkJY2xvc2UoZmQpOworKwkJZmQgPSAtMTsKKysJfQorKwlpZiAoaGFuZGxlICYmIHNpZyAhPSBTSUdBQlJUKSB7CisgCQlzbmRfcGNtX2Fib3J0KGhhbmRsZSk7CistCWlmIChzaWcgPT0gU0lHQUJSVCkgeworLQkJLyogZG8gbm90IGNhbGwgc25kX3BjbV9jbG9zZSgpIGFuZCBhYm9ydCBpbW1lZGlhdGVseSAqLworIAkJaGFuZGxlID0gTlVMTDsKKy0JCXByZ19leGl0KEVYSVRfRkFJTFVSRSk7CisgCX0KKy0Jc2lnbmFsKHNpZywgc2lnbmFsX2hhbmRsZXIpOworKwlwcmdfZXhpdChFWElUX0ZBSUxVUkUpOworIH0KKyAKKyAvKiBjYWxsIG9uIFNJR1VTUjEgc2lnbmFsLiAqLworQEAgLTIwOTYsNyArMjEwNCw3IEBACisgCXNzaXplX3QgcmVzdWx0ID0gY291bnQsIHI7CisgCXNpemVfdCBzaXplOworIAorLQl3aGlsZSAoY291bnQgPiAwKSB7CisrCXdoaWxlIChjb3VudCA+IDAgJiYgIWluX2Fib3J0aW5nKSB7CisgCQlzaXplID0gY291bnQ7CisgCQlpZiAoc2l6ZSA+IGNodW5rX2J5dGVzIC0gYnVmZmVyX3BvcykKKyAJCQlzaXplID0gY2h1bmtfYnl0ZXMgLSBidWZmZXJfcG9zOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYXNzdW1lLXN0b3JpbmctaXMtc3VjY2Vzcy1pZi1ub3Qtc291bmQtY2FyZC1kZXZpY2UucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorW1BBVENIXSBhc3N1bWUgc3RvcmluZyBpcyBzdWNjZXNzIGlmIG5vdCBzb3VuZCBjYXJkIGRldmljZQorCitVcHN0cmVhbS1TdGF0dWU6IFBlbmRpbmcKKworU3lzdGVtZCB3aWxsIHJlcG9ydCBmYWlsdXJlIHdoZW4gcnVuIGFsc2EtKiwgaWYgdGhlIG1hY2hpbmUgaGFzIG5vdCB0aGUKK3NvdW5kIGNhcmQuIFRvIHZvaWQgdGhpcyBhbm5veWVkIG1lc3NhZ2UsIGFsc2EtcmVzdG9yZS9hbHNhLXN0YXRlIGlnbm9yZQorYWxsIHRoZSBleGl0IGNvZGVzIGJ5IHByZWZpeGluZyAiLSIgaW4gRXhlY1N0YXJ0LCBsaWtlOgorCisgICBhbHNhLXV0aWxzLTEuMC4yOSQgZ3JlcCAiPS0iIC4vIC1yfGdyZXAgc2VydmljZS5pbgorICAgLi9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluOkV4ZWNTdGFydD0tQHNiaW5kaXJAL2Fsc2FjdGwgcmVzdG9yZQorICAgLi9hbHNhY3RsL2Fsc2Etc3RhdGUuc2VydmljZS5pbjpFeGVjU3RhcnQ9LUBzYmluZGlyQC9hbHNhY3RsIC1zIC1uIDE5IC1jIHJkYWVtb24KKyAgIC4vYWxzYWN0bC9hbHNhLXN0YXRlLnNlcnZpY2UuaW46RXhlY1N0b3A9LUBzYmluZGlyQC9hbHNhY3RsIC1zIGtpbGwgc2F2ZV9hbmRfcXVpdAorICAgbHNhLXV0aWxzLTEuMC4yOSQKKworQnV0IGFsc2Etc3RvcmUuc2VydmljZS5pbiBpcyBtaXNzaW5nLCBhbmQgYmV0dGVyIHNvbHV0aW9uIGlzIHRvIGlnbm9yZQordGhlIGV4aXQgY29kZSAxOSB3aGljaCBtZWFucyBub3Qgc291bmQgY2FyZCBkZXZpY2UsIG5vdCBhbGwgZXhpdCBjb2RlCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbiBiL2Fsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluCitpbmRleCBmMWE1NmJiLi42OGNhNTI5IDEwMDY0NAorLS0tIGEvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4KKysrKyBiL2Fsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluCitAQCAtMTMsMyArMTMsNCBAQCBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgVHlwZT1vbmVzaG90CisgRXhlY1N0YXJ0PUBzYmluZGlyQC9hbHNhY3RsIHN0b3JlCisgU3RhbmRhcmRPdXRwdXQ9c3lzbG9nCisrU3VjY2Vzc0V4aXRTdGF0dXM9MCAxOQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4wLjI5LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZlNGIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMC4yOS5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIkFMU0Egc291bmQgdXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Fsc2FjdGwvdXRpbHMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mZTk1MjZiMDU1ZTI0NmI1NTU4ODA5YTVhZTI1YzBiOSIKK0RFUEVORFMgPSAiYWxzYS1saWIgbmN1cnNlcyBsaWJzYW1wbGVyYXRlMCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInVkZXYiCitQQUNLQUdFQ09ORklHW3VkZXZdID0gIi0td2l0aC11ZGV2LXJ1bGVzLWRpcj1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAvcnVsZXMuZCwsdWRldiIKK1BBQ0tBR0VDT05GSUdbeG1sdG9dID0gIi0tZW5hYmxlLXhtbHRvLCAtLWRpc2FibGUteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3V0aWxzL2Fsc2EtdXRpbHMtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFsc2FjdGwtZG9uLXQtbGV0LXN5c3RlbWQtdW5pdC1yZXN0b3JlLXRoZS12b2x1bWUtd2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YjI4OWJmODc0YzRjOWE2M2Y0YjM5NzMwOTNkZDQwNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTYwMDU4ZjNlMTQ0ODNjZWQ1ZGU5MTlkZDQ3M2Y5MzkzMjA1OTQ1NDUzMGE5YjdlZjk3ZGNhYmQ2ODMzZTliIgorCisjIGxhenkgaGFjay4gbmVlZHMgcHJvcGVyIGZpeGluZyBpbiBnZXR0ZXh0Lm00LCBzZWUKKyMgaHR0cDovL2J1Z3Mub3BlbmVtYmVkZGVkLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OAorIyBwbGVhc2UgY2xvc2UgYnVnIGFuZCByZW1vdmUgdGhpcyBjb21tZW50IHdoZW4gcHJvcGVybHkgZml4ZWQKKyMKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1ubHMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKKyMgVGhpcyBhcmUgYWxsIHBhY2thZ2VzIHRoYXQgd2UgbmVlZCB0byBtYWtlLiBBbHNvLCB0aGUgbm93IGVtcHR5IGFsc2EtdXRpbHMKKyMgaXBrIGRlcGVuZHMgb24gdGhlbS4KKworQUxTQV9VVElMU19QS0dTID0gIlwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FtaXhlciBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1taWRpIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFwbGF5IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFtaXhlciBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hY29ubmVjdCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1pZWNzZXQgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtc3BlYWtlcnRlc3QgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXNlcW5ldCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxZHVtcCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhY3RsIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2Fsb29wIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2F1Y20gXAorICAgICAgICAgICAgIgorCitQQUNLQUdFUyArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QUxTQV9VVElMU19QS0dTfSIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfYWxzYS11dGlscy1hcGxheSAgICAgICA9ICIke2JpbmRpcn0vYXBsYXkgJHtiaW5kaXJ9L2FyZWNvcmQiCitGSUxFU19hbHNhLXV0aWxzLWFtaXhlciAgICAgID0gIiR7YmluZGlyfS9hbWl4ZXIiCitGSUxFU19hbHNhLXV0aWxzLWFsc2FtaXhlciAgID0gIiR7YmluZGlyfS9hbHNhbWl4ZXIiCitGSUxFU19hbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0ID0gIiR7YmluZGlyfS9zcGVha2VyLXRlc3QgJHtkYXRhZGlyfS9zb3VuZHMvYWxzYS8gJHtkYXRhZGlyfS9hbHNhL3NwZWFrZXItdGVzdC8iCitGSUxFU19hbHNhLXV0aWxzLW1pZGkgICAgICAgID0gIiR7YmluZGlyfS9hcGxheW1pZGkgJHtiaW5kaXJ9L2FyZWNvcmRtaWRpICR7YmluZGlyfS9hbWlkaSIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWNvbm5lY3QgICAgPSAiJHtiaW5kaXJ9L2Fjb25uZWN0IgorRklMRVNfYWxzYS11dGlscy1hc2VxbmV0ICAgICA9ICIke2JpbmRpcn0vYXNlcW5ldCIKK0ZJTEVTX2Fsc2EtdXRpbHMtaWVjc2V0ICAgICAgPSAiJHtiaW5kaXJ9L2llY3NldCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYWN0bCAgICAgPSAiJHtzYmluZGlyfS9hbHNhY3RsICovdWRldi9ydWxlcy5kICovKi91ZGV2L3J1bGVzLmQgJHtzeXN0ZW1kX3VuaXRkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2EgJHtkYXRhZGlyfS9hbHNhL2luaXQvIgorRklMRVNfYWxzYS11dGlscy1hc2VxZHVtcCAgICA9ICIke2JpbmRpcn0vYXNlcWR1bXAiCitGSUxFU19hbHNhLXV0aWxzLWFsc2Fsb29wICAgID0gIiR7YmluZGlyfS9hbHNhbG9vcCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYXVjbSAgICAgPSAiJHtiaW5kaXJ9L2Fsc2F1Y20iCisKKworU1VNTUFSWV9hbHNhLXV0aWxzLWFwbGF5ICAgICAgICA9ICJQbGF5IChhbmQgcmVjb3JkKSBzb3VuZCBmaWxlcyB1c2luZyBBTFNBIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFtaXhlciAgICAgICA9ICJDb21tYW5kLWxpbmUgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgID0gIm5jdXJzZXMtYmFzZWQgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCitTVU1NQVJZX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgID0gIkFMU0Egc3Vycm91bmQgc3BlYWtlciB0ZXN0IHV0aWxpdHkiCitTVU1NQVJZX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgID0gIk1pc2NlbGxhbmVvdXMgTUlESSB1dGlsaXRpZXMgZm9yIEFMU0EiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWNvbm5lY3QgICAgID0gIkFMU0Egc2VxdWVuY2VyIGNvbm5lY3Rpb24gbWFuYWdlciIKK1NVTU1BUllfYWxzYS11dGlscy1hc2VxbmV0ICAgICAgPSAiTmV0d29yayBjbGllbnQvc2VydmVyIGZvciBBTFNBIHNlcXVlbmNlciIKK1NVTU1BUllfYWxzYS11dGlscy1pZWNzZXQgICAgICAgPSAiQUxTQSB1dGlsaXR5IGZvciBzZXR0aW5nL3Nob3dpbmcgSUVDOTU4IChTL1BESUYpIHN0YXR1cyBiaXRzIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FjdGwgICAgICA9ICJTYXZlcy9yZXN0b3JlcyBBTFNBLXNldHRpbmdzIGluIC9ldGMvYXNvdW5kLnN0YXRlIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFkdW1wICAgICA9ICJTaG93cyB0aGUgZXZlbnRzIHJlY2VpdmVkIGF0IGFuIEFMU0Egc2VxdWVuY2VyIHBvcnQiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgID0gIkFMU0EgUENNIGxvb3BiYWNrIHV0aWxpdHkiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYXVjbSAgICAgID0gIkFMU0EgVXNlIENhc2UgTWFuYWdlciIKKworUlJFQ09NTUVORFNfYWxzYS11dGlscy1hbHNhY3RsID0gImFsc2Etc3RhdGVzIgorCitBTExPV19FTVBUWV9hbHNhLXV0aWxzID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgV2UgZG9uJ3Qgc2hpcCB0aGlzIGhlcmUgYmVjYXVzZSBpdCByZXF1aXJlcyBhIGRlcGVuZGVuY3kgb24gYmFzaC4KKwkjIFNlZSBhbHNhLXV0aWxzLXNjcmlwdHNfJHtQVn0uYmIKKwlybSAke0R9JHtzYmluZGlyfS9hbHNhY29uZgorCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2EtaW5mby5zaAorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndWRldicsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCisJICAgIyBUaGlzIGlzIHdoZXJlIGFsc2EtdXRpbHMgd2lsbCBpbnN0YWxsIGl0cyBydWxlcyBpZiB3ZSBkb24ndCB0ZWxsIGl0IGFueXRoaW5nIGVsc2UuCisJICAgcm0gLXJmICR7RH0vbGliL3VkZXYKKwkgICBybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9L2xpYgorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mbGFjL2ZsYWNfMS4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mbGFjL2ZsYWNfMS4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1MjcxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZsYWMvZmxhY18xLjMuMS5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIkZyZWUgTG9zc2xlc3MgQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJGTEFDIHN0YW5kcyBmb3IgRnJlZSBMb3NzbGVzcyBBdWRpbyBDb2RlYywgYSBsb3NzbGVzcyBhdWRpbyBjb21wcmVzc2lvbiBmb3JtYXQuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly94aXBoLm9yZy9mbGFjLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL2ZsYWMvYnVncy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdGREwtMS4yICYgR1BMdjIrICYgTEdQTHYyLjErICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5GREw7bWQ1PWFkMTQxOWVjYzU2ZTA2MGVjY2Y4MTg0YTg3YzQyODVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9NYWtlZmlsZS5hbTtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT0wYTg1M2I4MWQ5ZDQzZDhhYWQzYjUzYjA1Y2ZjYzM3ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZsYWMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PWQwM2E3NjY1NThkMjMzZjljYzNhYzVkZmFmZDQ5ZGViIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BsdWdpbl9jb21tb24vYWxsLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9N2M4YTNiOWUxZTY2ZWQwYWJhNzY1YmM2ZjM1ZGE4NWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5YaXBoO21kNT1hMmM0YjcxYzAxOTg2ODIzNzZkNDgzZWI1YmNjOTE5NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL0ZMQUMvYWxsLmg7YmVnaW5saW5lPTY1O2VuZGxpbmU9NzA7bWQ1PTY0NDc0ZjJiMjJlOWU3N2IyOGQ4YjhiMjVjOTgzYTQ4IgorREVQRU5EUyA9ICJsaWJvZ2ciCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy9mbGFjLyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImI5OTIyYzlhMDM3OGM4OGQzZTkwMWIyMzRmODUyNjk4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ3NzNjMDA5OWRiYTc2N2Q5NjNmZDkyMTQzMjYzYmUzMzhjNDg3MDIxNzJlODc1NGI5YmM1MTAzZWZlMWM1NmMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1vZ2d0ZXN0IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtb2dnLWxpYnJhcmllcz0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLW9nZy1pbmNsdWRlcz0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhtbXMtcGx1Z2luIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4IFwKKyAgICAgICAgICAgICAgICBhY19jdl9wcm9nX05BU009IiIgXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhbHRpdmVjIiwgIiAtLWVuYWJsZS1hbHRpdmVjIiwgIiAtLWRpc2FibGUtYWx0aXZlYyIsIGQpfSIKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZTIiLCAiIC0tZW5hYmxlLXNzZSIsICIiLCBkKX0iCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcmVpNyIsICIgLS1lbmFibGUtc3NlIiwgIiIsIGQpfSIKKworUEFDS0FHRVMgKz0gImxpYmZsYWMgbGliZmxhYysrIGxpYm9nZ2ZsYWMgbGlib2dnZmxhYysrIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCitGSUxFU19saWJmbGFjID0gIiR7bGliZGlyfS9saWJGTEFDLnNvLioiCitGSUxFU19saWJmbGFjKysgPSAiJHtsaWJkaXJ9L2xpYkZMQUMrKy5zby4qIgorRklMRVNfbGlib2dnZmxhYyA9ICIke2xpYmRpcn0vbGliT2dnRkxBQy5zby4qIgorRklMRVNfbGlib2dnZmxhYysrID0gIiR7bGliZGlyfS9saWJPZ2dGTEFDKysuc28uKiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMmQ0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9BZGQtZXJyb3Itc2lnbmFsLWVtaXNzaW9uLWZvci1taXNzaW5nLXBsdWdpbnMucGF0Y2gKQEAgLTAsMCArMSwyNTIgQEAKK0Zyb20gZDY0YzdlZGI2NmY0YTY0ZmY0OWM0MzA2Y2Y3N2ZkMjY5YjcwNzlhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBNb24sIDE2IE1hciAyMDE1IDEzOjQ1OjMwICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBlcnJvciBzaWduYWwgZW1pc3Npb24gZm9yIG1pc3NpbmcgcGx1Z2lucworCitBZGQgYSBtaXNzaW5nIHBsdWdpbnMgZXJyb3Igc2lnbmFsIHRvIGdzdC1wbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIGVycm9yCitkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoZSBwbGF5YmFjayBoYXMgY29tcGxldGVseSBmYWlsZWQsIGJ1dCBpbgorcHJhY3RpY2UgdGhlIHVzZXIgZXhwZXJpZW5jZSB3aWxsIGJlIGJhZCAodGhpbmssIGUuZy4gb2YgYSBtcDQgZmlsZQord2hlcmUgSC4yNjQgY29kZWMgaXMgbWlzc2luZzogQUFDIHBsYXliYWNrIHN0aWxsIHdvcmtzLi4uKS4KKworVXNlIHRoZSBzaWduYWwgaW4gZ3RrLXBsYXkgdG8gc2hvdyBhIGluZm9iYXIgaWYgcGx1Z2lucyBhcmUgbWlzc2luZy4KKworU3VibWl0dGVkIHVwc3RyZWFtIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9zZHJvZWdlL2dzdC1wbGF5ZXIvcHVsbC8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgIHwgIDIgKy0KKyBndGsvZ3RrLXBsYXkuYyAgICAgICAgICAgICB8IDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyB8IDIyICsrKysrKysrKysrKysrKysrKysKKyBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCB8ICAzICsrLQorIDQgZmlsZXMgY2hhbmdlZCwgNzggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTBhYjc0Yy4uNmNkYjRlYiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTMsNyArNTMsNyBAQCBBQ19TVUJTVChMVF9BR0UpCisgUEtHX1BST0dfUEtHX0NPTkZJRworIAorIFBLR19DSEVDS19NT0RVTEVTKEdMSUIsIFtnbGliLTIuMCBnb2JqZWN0LTIuMF0pCistUEtHX0NIRUNLX01PRFVMRVMoR1NUUkVBTUVSLCBbZ3N0cmVhbWVyLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXZpZGVvLTEuMCA+PSAxLjRdKQorK1BLR19DSEVDS19NT0RVTEVTKEdTVFJFQU1FUiwgW2dzdHJlYW1lci0xLjAgPj0gMS40IGdzdHJlYW1lci12aWRlby0xLjAgPj0gMS40IGdzdHJlYW1lci1wYnV0aWxzLTEuMF0pCisgCisgR0xJQl9QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnbGliLTIuMGAiCisgQUNfU1VCU1QoR0xJQl9QUkVGSVgpCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggYjkyNzczYi4uZTJiNjA1YSAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTMwLDYgKzMwLDggQEAgdHlwZWRlZiBzdHJ1Y3QKKyAgIEd0a1dpZGdldCAqcHJldl9idXR0b24sICpuZXh0X2J1dHRvbjsKKyAgIEd0a1dpZGdldCAqc2Vla2JhcjsKKyAgIEd0a1dpZGdldCAqdmlkZW9fYXJlYTsKKysgIEd0a1dpZGdldCAqaW5mb19sYWJlbDsKKysgIEd0a1dpZGdldCAqaW5mb19iYXI7CisgICBHdGtXaWRnZXQgKnZvbHVtZV9idXR0b247CisgICBndWxvbmcgc2Vla2Jhcl92YWx1ZV9jaGFuZ2VkX3NpZ25hbF9pZDsKKyAgIGdib29sZWFuIHBsYXlpbmc7CitAQCAtMTQxLDYgKzE0MywxMyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgfQorIAorIHN0YXRpYyB2b2lkCisrY2xlYXJfbWlzc2luZ19wbHVnaW5zIChHdGtQbGF5ICogcGxheSkKKyt7CisrICBndGtfbGFiZWxfc2V0X3RleHQgKEdUS19MQUJFTCAocGxheS0+aW5mb19sYWJlbCksICIiKTsKKysgIGd0a193aWRnZXRfaGlkZSAocGxheS0+aW5mb19iYXIpOworK30KKysKKytzdGF0aWMgdm9pZAorIHNraXBfcHJldl9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIHsKKyAgIEdMaXN0ICpwcmV2OworQEAgLTE1NSw2ICsxNjQsNyBAQCBza2lwX3ByZXZfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyAKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIFRSVUUpOworICAgZ3N0X3BsYXllcl9zZXRfdXJpIChwbGF5LT5wbGF5ZXIsIHByZXYtPmRhdGEpOworKyAgY2xlYXJfbWlzc2luZ19wbHVnaW5zIChwbGF5KTsKKyAgIGdzdF9wbGF5ZXJfcGxheSAocGxheS0+cGxheWVyKTsKKyAgIHNldF90aXRsZSAocGxheSwgcHJldi0+ZGF0YSk7CisgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPnByZXZfYnV0dG9uLCBnX2xpc3RfcHJldmlvdXMgKHByZXYpICE9IE5VTEwpOworQEAgLTE3NSw2ICsxODUsNyBAQCBza2lwX25leHRfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyAKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+cHJldl9idXR0b24sIFRSVUUpOworICAgZ3N0X3BsYXllcl9zZXRfdXJpIChwbGF5LT5wbGF5ZXIsIG5leHQtPmRhdGEpOworKyAgY2xlYXJfbWlzc2luZ19wbHVnaW5zIChwbGF5KTsKKyAgIGdzdF9wbGF5ZXJfcGxheSAocGxheS0+cGxheWVyKTsKKyAgIHNldF90aXRsZSAocGxheSwgbmV4dC0+ZGF0YSk7CisgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPm5leHRfYnV0dG9uLCBnX2xpc3RfbmV4dCAobmV4dCkgIT0gTlVMTCk7CitAQCAtMTkzLDEwICsyMDQsMTYgQEAgdm9sdW1lX2NoYW5nZWRfY2IgKEd0a1NjYWxlQnV0dG9uICogYnV0dG9uLCBnZG91YmxlIHZhbHVlLCBHdGtQbGF5ICogcGxheSkKKyAgIGdzdF9wbGF5ZXJfc2V0X3ZvbHVtZSAocGxheS0+cGxheWVyLCB2YWx1ZSk7CisgfQorIAorK3ZvaWQKKytpbmZvX2Jhcl9yZXNwb25zZV9jYiAoR3RrSW5mb0JhciAqIGJhciwgZ2ludCByZXNwb25zZSwgR3RrUGxheSAqIHBsYXkpCisreworKyAgZ3RrX3dpZGdldF9oaWRlIChHVEtfV0lER0VUIChiYXIpKTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQorIHsKKy0gIEd0a1dpZGdldCAqY29udHJvbHMsICptYWluX2hib3gsICptYWluX3Zib3g7CisrICBHdGtXaWRnZXQgKmNvbnRyb2xzLCAqbWFpbl9oYm94LCAqbWFpbl92Ym94LCAqaW5mb19iYXIsICpjb250ZW50X2FyZWE7CisgCisgICBwbGF5LT53aW5kb3cgPSBndGtfd2luZG93X25ldyAoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAocGxheS0+d2luZG93KSwgImRlbGV0ZS1ldmVudCIsCitAQCAtMjA4LDYgKzIyNSwyMCBAQCBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQorICAgZ19zaWduYWxfY29ubmVjdCAocGxheS0+dmlkZW9fYXJlYSwgInJlYWxpemUiLAorICAgICAgIEdfQ0FMTEJBQ0sgKHZpZGVvX2FyZWFfcmVhbGl6ZV9jYiksIHBsYXkpOworIAorKyAgcGxheS0+aW5mb19iYXIgPSBndGtfaW5mb19iYXJfbmV3ICgpOworKyAgZ3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUgKEdUS19JTkZPX0JBUiAocGxheS0+aW5mb19iYXIpLAorKyAgICAgIEdUS19NRVNTQUdFX1dBUk5JTkcpOworKyAgLy9ndGtfaW5mb19iYXJfc2V0X3Nob3dfY2xvc2VfYnV0dG9uIChHVEtfSU5GT19CQVIgKHBsYXktPmluZm9fYmFyKSwKKysgIC8vICAgIFRSVUUpOworKyAgZ3RrX3dpZGdldF9zZXRfbm9fc2hvd19hbGwgKHBsYXktPmluZm9fYmFyLCBUUlVFKTsKKysgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXktPmluZm9fYmFyLCAicmVzcG9uc2UiLAorKyAgICAgIEdfQ0FMTEJBQ0sgKGluZm9fYmFyX3Jlc3BvbnNlX2NiKSwgcGxheSk7CisrCisrICBjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYSAoR1RLX0lORk9fQkFSIChwbGF5LT5pbmZvX2JhcikpOworKyAgcGxheS0+aW5mb19sYWJlbCA9IGd0a19sYWJlbF9uZXcgKCIiKTsKKysgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChjb250ZW50X2FyZWEpLCBwbGF5LT5pbmZvX2xhYmVsKTsKKysgIGd0a193aWRnZXRfc2hvdyAocGxheS0+aW5mb19sYWJlbCk7CisrCisgICAvKiBVbmlmaWVkIHBsYXkvcGF1c2UgYnV0dG9uICovCisgICBwbGF5LT5wbGF5X3BhdXNlX2J1dHRvbiA9CisgICAgICAgZ3RrX2J1dHRvbl9uZXdfZnJvbV9pY29uX25hbWUgKCJtZWRpYS1wbGF5YmFjay1wYXVzZSIsCitAQCAtMjU4LDYgKzI4OSw3IEBAIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCisgCisgICBtYWluX3Zib3ggPSBndGtfYm94X25ldyAoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKKyAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAobWFpbl92Ym94KSwgbWFpbl9oYm94LCBUUlVFLCBUUlVFLCAwKTsKKysgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAobWFpbl92Ym94KSwgcGxheS0+aW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CisgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKG1haW5fdmJveCksIGNvbnRyb2xzLCBGQUxTRSwgRkFMU0UsIDApOworICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHBsYXktPndpbmRvdyksIG1haW5fdmJveCk7CisgCitAQCAtMzIyLDYgKzM1NCw3IEBAIGVvc19jYiAoR3N0UGxheWVyICogdW51c2VkLCBHdGtQbGF5ICogcGxheSkKKyAgICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPm5leHRfYnV0dG9uLCBnX2xpc3RfbmV4dCAobmV4dCkgIT0gTlVMTCk7CisgCisgICAgICAgZ3N0X3BsYXllcl9zZXRfdXJpIChwbGF5LT5wbGF5ZXIsIG5leHQtPmRhdGEpOworKyAgICAgIGNsZWFyX21pc3NpbmdfcGx1Z2lucyAocGxheSk7CisgICAgICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOworICAgICAgIHNldF90aXRsZSAocGxheSwgbmV4dC0+ZGF0YSk7CisgICAgIH0gZWxzZSB7CitAQCAtMzMwLDYgKzM2MywyNCBAQCBlb3NfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgR3RrUGxheSAqIHBsYXkpCisgICB9CisgfQorIAorK3N0YXRpYyB2b2lkCisrZXJyb3JfY2IgKEdzdFBsYXllciAqIHBsYXllciwgR0Vycm9yICogZXJyLCBHdGtQbGF5ICogcGxheSkKKyt7CisrICBjaGFyICptZXNzYWdlOworKworKyAgaWYgKGdfZXJyb3JfbWF0Y2hlcyAoZXJyLCBnc3RfcGxheWVyX2Vycm9yX3F1YXJrICgpLAorKyAgICAgIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4pKSB7CisrICAgIC8vIGFkZCBtZXNzYWdlIHRvIGVuZCBvZiBhbnkgZXhpc3RpbmcgbWVzc2FnZTogdGhlcmUgbWF5IGJlCisrICAgIC8vIG11bHRpcGxlIG1pc3NpbmcgcGx1Z2lucy4KKysgICAgbWVzc2FnZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzJXMuICIsCisrICAgICAgICBndGtfbGFiZWxfZ2V0X3RleHQgKEdUS19MQUJFTCAocGxheS0+aW5mb19sYWJlbCkpLCBlcnItPm1lc3NhZ2UpOworKyAgICBndGtfbGFiZWxfc2V0X3RleHQgKEdUS19MQUJFTCAocGxheS0+aW5mb19sYWJlbCksIG1lc3NhZ2UpOworKyAgICBnX2ZyZWUgKG1lc3NhZ2UpOworKworKyAgICBndGtfd2lkZ2V0X3Nob3cgKHBsYXktPmluZm9fYmFyKTsKKysgIH0KKyt9CisrCisgaW50CisgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQorIHsKK0BAIC00MjIsNiArNDczLDcgQEAgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQorICAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJ2aWRlby1kaW1lbnNpb25zLWNoYW5nZWQiLAorICAgICAgIEdfQ0FMTEJBQ0sgKHZpZGVvX2RpbWVuc2lvbnNfY2hhbmdlZF9jYiksICZwbGF5KTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXkucGxheWVyLCAiZW5kLW9mLXN0cmVhbSIsIEdfQ0FMTEJBQ0sgKGVvc19jYiksICZwbGF5KTsKKysgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXkucGxheWVyLCAiZXJyb3IiLCBHX0NBTExCQUNLIChlcnJvcl9jYiksICZwbGF5KTsKKyAKKyAgIC8qIFdlIGhhdmUgZmlsZShzKSB0aGF0IG5lZWQgcGxheWluZy4gKi8KKyAgIHNldF90aXRsZSAoJnBsYXksIGdfbGlzdF9maXJzdCAocGxheS51cmlzKS0+ZGF0YSk7CitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworaW5kZXggYmQ2ODJkOS4uNzhlN2JhMSAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworQEAgLTQ3LDYgKzQ3LDcgQEAKKyAKKyAjaW5jbHVkZSA8Z3N0L2dzdC5oPgorICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKysjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5zLmg+CisgCisgR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3BsYXllcl9kZWJ1Zyk7CisgI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3BsYXllcl9kZWJ1ZworQEAgLTIzOCw2ICsyMzksNyBAQCBnc3RfcGxheWVyX2NsYXNzX2luaXQgKEdzdFBsYXllckNsYXNzICoga2xhc3MpCisgICAgICAgZ19zaWduYWxfbmV3ICgidmlkZW8tZGltZW5zaW9ucy1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKKyAgICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX05PX1JFQ1VSU0UgfCBHX1NJR05BTF9OT19IT09LUywgMCwgTlVMTCwKKyAgICAgICBOVUxMLCBOVUxMLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX0lOVCwgR19UWVBFX0lOVCk7CisrCisgfQorIAorIHN0YXRpYyB2b2lkCitAQCAtNjE5LDYgKzYyMSwyMSBAQCBlcnJvcl9jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCisgICBnX211dGV4X3VubG9jayAoJnNlbGYtPnByaXYtPmxvY2spOworIH0KKyAKKytzdGF0aWMgdm9pZAorK2VsZW1lbnRfY2IgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQorK3sKKysgIEdzdFBsYXllciAqc2VsZiA9IEdTVF9QTEFZRVIgKHVzZXJfZGF0YSk7CisrCisrICBpZiAoZ3N0X2lzX21pc3NpbmdfcGx1Z2luX21lc3NhZ2UgKG1zZykpIHsKKysgICAgZ2NoYXIgKmRlc2M7CisrCisrICAgIGRlc2MgPSBnc3RfbWlzc2luZ19wbHVnaW5fbWVzc2FnZV9nZXRfZGVzY3JpcHRpb24gKG1zZyk7CisrICAgIGVtaXRfZXJyb3IgKHNlbGYsIGdfZXJyb3JfbmV3IChHU1RfUExBWUVSX0VSUk9SLAorKyAgICAgICAgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTiwgIk1pc3NpbmcgcGx1Z2luICclcyciLCBkZXNjKSk7CisrICAgIGdfZnJlZSAoZGVzYyk7CisrICB9CisrfQorKworIHN0YXRpYyBnYm9vbGVhbgorIGVvc19kaXNwYXRjaCAoZ3BvaW50ZXIgdXNlcl9kYXRhKQorIHsKK0BAIC0xMDU5LDYgKzEwNzYsOCBAQCBnc3RfcGxheWVyX21haW4gKGdwb2ludGVyIGRhdGEpCisgICAgICAgTlVMTCwgTlVMTCk7CisgICBnX3NvdXJjZV9hdHRhY2ggKGJ1c19zb3VyY2UsIHNlbGYtPnByaXYtPmNvbnRleHQpOworIAorKyAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlOjplbGVtZW50IiwKKysgICAgICBHX0NBTExCQUNLIChlbGVtZW50X2NiKSwgc2VsZik7CisgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVycm9yIiwgR19DQUxMQkFDSyAoZXJyb3JfY2IpLAorICAgICAgIHNlbGYpOworICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlOjplb3MiLCBHX0NBTExCQUNLIChlb3NfY2IpLCBzZWxmKTsKK0BAIC0xNTYwLDYgKzE1NzksNyBAQCBnc3RfcGxheWVyX2Vycm9yX2dldF90eXBlICh2b2lkKQorICAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgICB7Q19FTlVNIChHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCksICJHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCIsICJmYWlsZWQifSwKKysgICAge0NfRU5VTSAoR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTiksICJHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOIiwgIm1pc3NpbmctcGx1Z2luIn0sCisgICAgIHswLCBOVUxMLCBOVUxMfQorICAgfTsKKyAKK0BAIC0xNTc3LDYgKzE1OTcsOCBAQCBnc3RfcGxheWVyX2Vycm9yX2dldF9uYW1lIChHc3RQbGF5ZXJFcnJvciBlcnJvcikKKyAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgY2FzZSBHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRDoKKyAgICAgICByZXR1cm4gImZhaWxlZCI7CisrICAgIGNhc2UgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTjoKKysgICAgICByZXR1cm4gIm1pc3NpbmctcGx1Z2luIjsKKyAgIH0KKyAKKyAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworZGlmZiAtLWdpdCBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKK2luZGV4IGM0Mzg1MTMuLjM1ZmI1YmIgMTAwNjQ0CistLS0gYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorKysrIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKK0BAIC00NCw3ICs0NCw4IEBAIEdUeXBlICAgICAgICBnc3RfcGxheWVyX2Vycm9yX2dldF90eXBlICAgICAgICAgICAgICAgICh2b2lkKTsKKyAjZGVmaW5lICAgICAgR1NUX1RZUEVfUExBWUVSX0VSUk9SICAgICAgICAgICAgICAgICAgICAoZ3N0X3BsYXllcl9lcnJvcl9nZXRfdHlwZSAoKSkKKyAKKyB0eXBlZGVmIGVudW0geworLSAgR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQgPSAwCisrICBHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCA9IDAsCisrICBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOCisgfSBHc3RQbGF5ZXJFcnJvcjsKKyAKKyBjb25zdCBnY2hhciAqZ3N0X3BsYXllcl9lcnJvcl9nZXRfbmFtZSAgICAgICAgICAgICAgICAoR3N0UGxheWVyRXJyb3IgZXJyb3IpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9GaXgtcGF1c2UtcGxheS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4M2M0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9GaXgtcGF1c2UtcGxheS5wYXRjaApAQCAtMCwwICsxLDEwNyBAQAorRml4IHBhdXNlL3BsYXkKKworVGhlIGN1cnJlbnQgcGxheWVyIHN0YXRlIGlzIG5vdyBub3RpZmllZCB2aWEgdGhlIHN0YXRlLWNoYW5nZWQgc2lnbmFsLAorYW5kIGluIHRoZSBHVEsgVUkgaXQgd2FzIG9ubHkgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBkZXNpcmVkIHN0YXRlLgorCitUaGlzIGlzIGEgYmFja3BvcnQgb2YgdXBzdHJlYW0gY29tbWl0IDczODQ3OWM3YTAuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKy0tLQorIGd0ay9ndGstcGxheS5jICAgICAgICAgICAgIHwgIDggKysrKysrLS0KKyBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyB8IDEyIC0tLS0tLS0tLS0tLQorIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oIHwgIDIgLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCitpbmRleCA2ZTdhMDk4Li5lMmI2MDVhIDEwMDY0NAorLS0tIGEvZ3RrL2d0ay1wbGF5LmMKKysrKyBiL2d0ay9ndGstcGxheS5jCitAQCAtMzQsNiArMzQsNyBAQCB0eXBlZGVmIHN0cnVjdAorICAgR3RrV2lkZ2V0ICppbmZvX2JhcjsKKyAgIEd0a1dpZGdldCAqdm9sdW1lX2J1dHRvbjsKKyAgIGd1bG9uZyBzZWVrYmFyX3ZhbHVlX2NoYW5nZWRfc2lnbmFsX2lkOworKyAgZ2Jvb2xlYW4gcGxheWluZzsKKyB9IEd0a1BsYXk7CisgCisgLyogQ29tcGF0IHN0dWJzICovCitAQCAtMTE4LDEyICsxMTksMTMgQEAgcGxheV9wYXVzZV9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIHsKKyAgIEd0a1dpZGdldCAqaW1hZ2U7CisgCistICBpZiAoZ3N0X3BsYXllcl9pc19wbGF5aW5nIChwbGF5LT5wbGF5ZXIpKSB7CisrICBpZiAocGxheS0+cGxheWluZykgeworICAgICBnc3RfcGxheWVyX3BhdXNlIChwbGF5LT5wbGF5ZXIpOworICAgICBpbWFnZSA9CisgICAgICAgICBndGtfaW1hZ2VfbmV3X2Zyb21faWNvbl9uYW1lICgibWVkaWEtcGxheWJhY2stc3RhcnQiLAorICAgICAgICAgR1RLX0lDT05fU0laRV9CVVRUT04pOworICAgICBndGtfYnV0dG9uX3NldF9pbWFnZSAoR1RLX0JVVFRPTiAocGxheS0+cGxheV9wYXVzZV9idXR0b24pLCBpbWFnZSk7CisrICAgIHBsYXktPnBsYXlpbmcgPSBGQUxTRTsKKyAgIH0gZWxzZSB7CisgICAgIGdjaGFyICp0aXRsZTsKKyAKK0BAIC0xMzYsNiArMTM4LDcgQEAgcGxheV9wYXVzZV9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorICAgICB0aXRsZSA9IGdzdF9wbGF5ZXJfZ2V0X3VyaSAocGxheS0+cGxheWVyKTsKKyAgICAgc2V0X3RpdGxlIChwbGF5LCB0aXRsZSk7CisgICAgIGdfZnJlZSAodGl0bGUpOworKyAgICBwbGF5LT5wbGF5aW5nID0gVFJVRTsKKyAgIH0KKyB9CisgCitAQCAtMzM1LDcgKzMzOCw3IEBAIHZpZGVvX2RpbWVuc2lvbnNfY2hhbmdlZF9jYiAoR3N0UGxheWVyICogdW51c2VkLCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCwKKyBzdGF0aWMgdm9pZAorIGVvc19jYiAoR3N0UGxheWVyICogdW51c2VkLCBHdGtQbGF5ICogcGxheSkKKyB7CistICBpZiAoZ3N0X3BsYXllcl9pc19wbGF5aW5nIChwbGF5LT5wbGF5ZXIpKSB7CisrICBpZiAocGxheS0+cGxheWluZykgeworICAgICBHTGlzdCAqbmV4dCA9IE5VTEw7CisgICAgIGdjaGFyICp1cmk7CisgCitAQCAtNDUyLDYgKzQ1NSw3IEBAIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyAgIH0KKyAKKyAgIHBsYXkucGxheWVyID0gZ3N0X3BsYXllcl9uZXcgKCk7CisrICBwbGF5LnBsYXlpbmcgPSBUUlVFOworIAorICAgZ19vYmplY3Rfc2V0IChwbGF5LnBsYXllciwgImRpc3BhdGNoLXRvLW1haW4tY29udGV4dCIsIFRSVUUsIE5VTEwpOworIAorZGlmZiAtLWdpdCBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKK2luZGV4IDA2OWIyODQuLjc4ZTdiYTEgMTAwNjQ0CistLS0gYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworKysrIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKK0BAIC0xNDIyLDE4ICsxNDIyLDYgQEAgZ3N0X3BsYXllcl9zZXRfdXJpIChHc3RQbGF5ZXIgKiBzZWxmLCBjb25zdCBnY2hhciAqIHZhbCkKKyAgIGdfb2JqZWN0X3NldCAoc2VsZiwgInVyaSIsIHZhbCwgTlVMTCk7CisgfQorIAorLWdib29sZWFuCistZ3N0X3BsYXllcl9pc19wbGF5aW5nIChHc3RQbGF5ZXIgKiBzZWxmKQorLXsKKy0gIGdib29sZWFuIHZhbDsKKy0KKy0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUExBWUVSIChzZWxmKSwgRkFMU0UpOworLQorLSAgZ19vYmplY3RfZ2V0IChzZWxmLCAiaXMtcGxheWluZyIsICZ2YWwsIE5VTEwpOworLQorLSAgcmV0dXJuIHZhbDsKKy19CistCisgR3N0Q2xvY2tUaW1lCisgZ3N0X3BsYXllcl9nZXRfcG9zaXRpb24gKEdzdFBsYXllciAqIHNlbGYpCisgeworZGlmZiAtLWdpdCBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKK2luZGV4IDY5MzNkZDcuLjM1ZmI1YmIgMTAwNjQ0CistLS0gYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorKysrIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKK0BAIC05Myw4ICs5Myw2IEBAIGdjaGFyICogICAgICBnc3RfcGxheWVyX2dldF91cmkgICAgICAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOworIHZvaWQgICAgICAgICBnc3RfcGxheWVyX3NldF91cmkgICAgICAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAqIHVyaSk7CisgCistZ2Jvb2xlYW4gICAgIGdzdF9wbGF5ZXJfaXNfcGxheWluZyAgICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllcik7CistCisgR3N0Q2xvY2tUaW1lIGdzdF9wbGF5ZXJfZ2V0X3Bvc2l0aW9uICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllcik7CisgR3N0Q2xvY2tUaW1lIGdzdF9wbGF5ZXJfZ2V0X2R1cmF0aW9uICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllcik7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2ZpbGVjaG9vc2VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmMWIwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2ZpbGVjaG9vc2VyLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDQzZDRiMTlhYjYxMWQ4NDQxNTZlMjZjNDg0MGNjNTRkZGI3M2FlMDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyNiBGZWIgMjAxNSAxNzoxNzowNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBndGstcGxheTogc2hvdyBhIGZpbGUgY2hvb3NlciBpZiBubyBVUklzIHdlcmUgcGFzc2VkCisKKy0tLQorIGd0ay9ndGstcGxheS5jIHwgICAyOCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCitpbmRleCBmMDE1MDc3Li45NzY2YTcyIDEwMDY0NAorLS0tIGEvZ3RrL2d0ay1wbGF5LmMKKysrKyBiL2d0ay9ndGstcGxheS5jCitAQCAtMzE5LDggKzMxOSwzMiBAQCBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHBsYXlsaXN0cyBhbmQgc3R1ZmYKKyAgIC8qIFBhcnNlIHRoZSBsaXN0IG9mIHRoZSBmaWxlIG5hbWVzIHdlIGhhdmUgdG8gcGxheS4gKi8KKyAgIGlmICghZmlsZV9uYW1lcykgeworLSAgICBnX3ByaW50ICgiVXNhZ2U6ICVzIEZJTEUocyl8VVJJKHMpXG4iLCBBUFBfTkFNRSk7CistICAgIHJldHVybiAxOworKyAgICBHdGtXaWRnZXQgKmNob29zZXI7CisrICAgIGludCByZXM7CisrCisrICAgIGNob29zZXIgPSBndGtfZmlsZV9jaG9vc2VyX2RpYWxvZ19uZXcgKCJTZWxlY3QgZmlsZXMgdG8gcGxheSIsIE5VTEwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX0NhbmNlbCIsIEdUS19SRVNQT05TRV9DQU5DRUwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9PcGVuIiwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKysgICAgZ19vYmplY3Rfc2V0IChjaG9vc2VyLAorKyAgICAgICAgICAgICAgICAgICJsb2NhbC1vbmx5IiwgRkFMU0UsCisrICAgICAgICAgICAgICAgICAgInNlbGVjdC1tdWx0aXBsZSIsIFRSVUUsCisrICAgICAgICAgICAgICAgICAgTlVMTCk7CisrCisrICAgIHJlcyA9IGd0a19kaWFsb2dfcnVuIChHVEtfRElBTE9HIChjaG9vc2VyKSk7CisrICAgIGlmIChyZXMgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkgeworKyAgICAgIEdTTGlzdCAqbDsKKysKKysgICAgICBsID0gZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfdXJpcyAoR1RLX0ZJTEVfQ0hPT1NFUiAoY2hvb3NlcikpOworKyAgICAgIHdoaWxlIChsKSB7CisrICAgICAgICBwbGF5LnVyaXMgPSBnX2xpc3RfYXBwZW5kIChwbGF5LnVyaXMsIGwtPmRhdGEpOworKyAgICAgICAgbCA9IGdfc2xpc3RfZGVsZXRlX2xpbmsgKGwsIGwpOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kgKGNob29zZXIpOworICAgfSBlbHNlIHsKKyAgICAgZ3VpbnQgaTsKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDIwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9nc3QtcGxheWVyLmRlc2t0b3AKQEAgLTAsMCArMSwxMCBAQAorW0Rlc2t0b3AgRW50cnldCitOYW1lPU1lZGlhIFBsYXllcgorQ29tbWVudD1CYXNpYyBtZWRpYSBwbGF5ZXIKK0ljb249YXVkaW8tcGxheWVyCitUcnlFeGVjPWd0ay1wbGF5CitFeGVjPWd0ay1wbGF5CitTdGFydHVwTm90aWZ5PXRydWUKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdUSztBdWRpb1ZpZGVvOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkMThiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorQXMgdGhlIHJlc3Qgb2YgU2F0byBpcyBHVEsrIDIsIHBhdGNoIGd0ay1wbGF5IHRvIHVzZSBHVEsrIDIuICBXaGVuIHRoZSByZXN0IG9mCitTYXRvIGhhcyBiZWVuIHBvcnRlZCB0byBHVEsrIDMgdGhpcyBwYXRjaCBjYW4gYmUgZHJvcHBlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGI4YWYxM2IuLjkwYWI3NGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYwLDcgKzYwLDcgQEAgQUNfU1VCU1QoR0xJQl9QUkVGSVgpCisgR1NUX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdzdHJlYW1lci0xLjBgIgorIEFDX1NVQlNUKEdTVF9QUkVGSVgpCisgCistUEtHX0NIRUNLX01PRFVMRVMoR1RLLCBbZ3RrKy0zLjBdLCBbaGF2ZV9ndGs9InllcyJdLCBbaGF2ZV9ndGs9Im5vIl0pCisrUEtHX0NIRUNLX01PRFVMRVMoR1RLLCBbZ3RrKy0yLjBdLCBbaGF2ZV9ndGs9InllcyJdLCBbaGF2ZV9ndGs9Im5vIl0pCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HVEssIHRlc3QgIngkaGF2ZV9ndGsiICE9ICJ4bm8iKQorIAorIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDSyhbMS4zMS4xXSkKK2RpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCitpbmRleCBmMDE1MDc3Li45NTRkNmZiIDEwMDY0NAorLS0tIGEvZ3RrL2d0ay1wbGF5LmMKKysrKyBiL2d0ay9ndGstcGxheS5jCitAQCAtMzQsNiArMzQsNDYgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAgIGd1bG9uZyBzZWVrYmFyX3ZhbHVlX2NoYW5nZWRfc2lnbmFsX2lkOworIH0gR3RrUGxheTsKKyAKKysvKiBDb21wYXQgc3R1YnMgKi8KKytHdGtXaWRnZXQgKgorK2d0a19ib3hfbmV3IChHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKysgICAgICAgICAgICAgZ2ludCBzcGFjaW5nKQorK3sKKysgIHN3aXRjaCAob3JpZW50YXRpb24pIHsKKysgIGNhc2UgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw6CisrICAgIHJldHVybiBndGtfaGJveF9uZXcgKEZBTFNFLCBzcGFjaW5nKTsKKysgIGNhc2UgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOgorKyAgICByZXR1cm4gZ3RrX3Zib3hfbmV3IChGQUxTRSwgc3BhY2luZyk7CisrICB9CisrfQorKworK0d0a1dpZGdldCoKKytndGtfYnV0dG9uX25ld19mcm9tX2ljb25fbmFtZSAoY29uc3QgZ2NoYXIgKmljb25fbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrSWNvblNpemUgIHNpemUpCisreworKyAgR3RrV2lkZ2V0ICpidXR0b247CisrICBHdGtXaWRnZXQgKmltYWdlOworKworKyAgaW1hZ2UgPSBndGtfaW1hZ2VfbmV3X2Zyb21faWNvbl9uYW1lIChpY29uX25hbWUsIHNpemUpOworKyAgYnV0dG9uID0gIGdfb2JqZWN0X25ldyAoR1RLX1RZUEVfQlVUVE9OLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW1hZ2UiLCBpbWFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisrICByZXR1cm4gYnV0dG9uOworK30KKysKKytHdGtXaWRnZXQgKgorK2d0a19zY2FsZV9uZXdfd2l0aF9yYW5nZSAoR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIG1pbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgbWF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzdGVwKQorK3sKKysgIHN3aXRjaCAob3JpZW50YXRpb24pIHsKKysgIGNhc2UgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw6CisrICAgIHJldHVybiBndGtfaHNjYWxlX25ld193aXRoX3JhbmdlIChtaW4sIG1heCwgc3RlcCk7CisrICBjYXNlIEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDoKKysgICAgcmV0dXJuIGd0a192c2NhbGVfbmV3X3dpdGhfcmFuZ2UgKG1pbiwgbWF4LCBzdGVwKTsKKysgIH0KKyt9CisgCisgc3RhdGljIHZvaWQKKyBzZXRfdGl0bGUgKEd0a1BsYXkgKiBwbGF5LCBjb25zdCBnY2hhciAqIHRpdGxlKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Y2ZiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllcl9naXQuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWT0iR1N0cmVhbWVyIHBsYXliYWNrIGhlbHBlciBsaWJyYXJ5IGFuZCBleGFtcGxlcyIKKworTElDRU5TRSA9ICJMR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE5O21kNT0wM2FlY2E5ZDgyOTVmODExODE3OTA5MDc1YTE1ZmY2NSIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBndGsrIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vc2Ryb2VnZS9nc3QtcGxheWVyLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9maWxlY2hvb3Nlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ndGsyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1wYXVzZS1wbGF5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nc3QtcGxheWVyLmRlc2t0b3AiCisKK1NSQ1JFViA9ICI1Mzg2YzViOTg0ZDQwZWY1NDM0NjczZWQ2MjIwNGU2OWFhZjUyNjQ1IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBndGstZG9jIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwl0b3VjaCAke1N9L0NoYW5nZUxvZworfQorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfVkFMR1JJTkQ9bm8gYWNfY3ZfcGF0aF9HREI9bm8iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLW0gMDY0NCAtRCAke1dPUktESVJ9L2dzdC1wbGF5ZXIuZGVza3RvcCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvZ3N0LXBsYXllci5kZXNrdG9wCit9CisKK0ZJTEVTXyR7UE59LWJpbiArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvKi5kZXNrdG9wIgorCitSREVQRU5EU18ke1BOfS1iaW4gPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1wbGF5YmFjayIKK1JSRUNPTU1FTkRTXyR7UE59LWJpbiA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLW1ldGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLW1ldGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCIsICJjb21tZXJjaWFsIiwgImdzdHJlYW1lcjEuMC1saWJhdiIsICIiLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCIsICJjb21tZXJjaWFsIiwgImdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHktbWV0YSIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxYmUwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1wYWNrYWdlLmluYwpAQCAtMCwwICsxLDU4IEBACitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gIiBzcGxpdF9nc3RyZWFtZXIxMF9wYWNrYWdlcyAiCitQQUNLQUdFU1BMSVRGVU5DU19hcHBlbmQgPSAiIHNldF9tZXRhcGtnX3JkZXBlbmRzICIKKworcHl0aG9uIHNwbGl0X2dzdHJlYW1lcjEwX3BhY2thZ2VzICgpIHsKKyAgICBnc3RfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9nc3RyZWFtZXItJHtMSUJWfScpCisgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGx1Z2luX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICBnbGliZGlyID0gZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ2dzdHJlYW1lciAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnc3RfbGliZGlyLCAnbGliZ3N0KC4qKVwuc28kJywgZC5leHBhbmQoJyR7UE59LSVzJyksICdHU3RyZWFtZXIgcGx1Z2luIGZvciAlcycsIHBvc3RpbnN0PXBvc3RpbnN0LCBleHRyYV9kZXBlbmRzPScnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdzdF9saWJkaXIsICdsaWJnc3QoLiopXC5sYSQnLCBkLmV4cGFuZCgnJHtQTn0tJXMtZGV2JyksICdHU3RyZWFtZXIgcGx1Z2luIGZvciAlcyAoZGV2ZWxvcG1lbnQgZmlsZXMpJywgZXh0cmFfZGVwZW5kcz1kLmV4cGFuZCgnJHtQTn0tZGV2JykpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ3N0X2xpYmRpciwgJ2xpYmdzdCguKilcLmEkJywgZC5leHBhbmQoJyR7UE59LSVzLXN0YXRpY2RldicpLCAnR1N0cmVhbWVyIHBsdWdpbiBmb3IgJXMgKHN0YXRpYyBkZXZlbG9wbWVudCBmaWxlcyknLCBleHRyYV9kZXBlbmRzPWQuZXhwYW5kKCcke1BOfS1zdGF0aWNkZXYnKSkKK30KKworcHl0aG9uIHNldF9tZXRhcGtnX3JkZXBlbmRzICgpIHsKKyAgICBpbXBvcnQgb3MKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBtZXRhcGtnID0gIHBuICsgJy1tZXRhJworICAgIGQuc2V0VmFyKCdBTExPV19FTVBUWV8nICsgbWV0YXBrZywgIjEiKQorICAgIGQuc2V0VmFyKCdGSUxFU18nICsgbWV0YXBrZywgIiIpCisgICAgYmxhY2tsaXN0ID0gWyBwbiwgcG4gKyAnLWxvY2FsZScsIHBuICsgJy1kZXYnLCBwbiArICctZGJnJywgcG4gKyAnLWRvYycsIHBuICsgJy1tZXRhJyBdCisgICAgbWV0YXBrZ19yZGVwZW5kcyA9IFtdCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzWzE6XToKKyAgICAgICAgaWYgbm90IHBrZyBpbiBibGFja2xpc3QgYW5kIG5vdCBwa2cgaW4gbWV0YXBrZ19yZGVwZW5kcyBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRldicpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGJnJykgYW5kIG5vdCBwa2cuY291bnQoJ2xvY2FsZScpIGFuZCBub3QgcGtnLmNvdW50KCctc3RhdGljZGV2Jyk6CisgICAgICAgICAgICAjIFNlZSBpZiB0aGUgcGFja2FnZSBpcyBlbXB0eSBieSBsb29raW5nIGF0IHRoZSBjb250ZW50cyBvZiBpdHMgUEtHREVTVCBzdWJkaXJlY3RvcnkuIAorICAgICAgICAgICAgIyBJZiB0aGlzIHN1YmRpcmVjdG9yeSBpcyBlbXB0eSwgdGhlbiB0aGUgcGFja2FnZSBpcy4KKyAgICAgICAgICAgICMgRW1wdHkgcGFja2FnZXMgZG8gbm90IGdldCBhZGRlZCB0byB0aGUgbWV0YSBwYWNrYWdlJ3MgUkRFUEVORFMKKyAgICAgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dkaXIpOgorICAgICAgICAgICAgICAgIGRpcl9jb250ZW50cyA9IG9zLmxpc3RkaXIocGtnZGlyKSBvciBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaXJfY29udGVudHMgPSBbXQorICAgICAgICAgICAgaXNfZW1wdHkgPSBsZW4oZGlyX2NvbnRlbnRzKSA9PSAwCisgICAgICAgICAgICBpZiBub3QgaXNfZW1wdHk6CisgICAgICAgICAgICAgICAgbWV0YXBrZ19yZGVwZW5kcy5hcHBlbmQocGtnKQorICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgbWV0YXBrZywgJyAnLmpvaW4obWV0YXBrZ19yZGVwZW5kcykpCisgICAgZC5zZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBtZXRhcGtnLCBwbiArICcgbWV0YSBwYWNrYWdlJykKK30KKworIyBlYWNoIHBsdWdpbi1kZXYgZGVwZW5kcyBvbiBQTi1kZXYsIHBsdWdpbi1zdGF0aWNkZXYgb24gUE4tc3RhdGljZGV2CisjIHNvIHdlIG5lZWQgdGhlbSBldmVuIHdoZW4gZW1wdHkgKGxpa2UgaW4gZ3N0LXBsdWdpbnMtZ29vZCBjYXNlKQorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0FMTE9XX0VNUFRZXyR7UE59LWRldiA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0tc3RhdGljZGV2ID0gIjEiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1hcHBzICR7UE59LW1ldGEgJHtQTn0tZ2xpYiIKK0ZJTEVTXyR7UE59LWFwcHMgPSAiJHtiaW5kaXJ9IgorCitSREVQRU5EU18ke1BOfS1hcHBzICs9ICJwZXJsIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7UE59LW1ldGEiCisKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0ke0xJQlZ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWdsaWIgPSAiJHtkYXRhZGlyfS9nbGliLTIuMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGU2ZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi5pbmMKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJMaWJhdi1iYXNlZCBHU3RyZWFtZXIgMS54IHBsdWdpbiIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyAmICggKEdQTHYyKyAmIExHUEx2Mi4xKykgfCAoR1BMdjMrICYgTEdQTHYzKykgKSIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3N0cmVhbWVyLm5ldC8iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIHpsaWIgYnppcDIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIENBVVRJT046IFVzaW5nIHRoZSBzeXN0ZW0gbGliYXYgaXMgbm90IHJlY29tbWVuZGVkLiBTaW5jZSB0aGUgbGliYXYgQVBJIGlzIGNoYW5naW5nIGFsbCB0aGUgdGltZSwKKyMgY29tcGlsYXRpb24gZXJyb3JzIChhbmQgb3RoZXIsIG1vcmUgc3VidGxlIGJ1Z3MpIGNhbiBoYXBwZW4uIEl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIHJlbHkgb24gdGhlCisjIGxpYmF2IGNvcHkgaW5jbHVkZWQgaW4gdGhlIGdzdC1saWJhdiBwYWNrYWdlLgorUEFDS0FHRUNPTkZJRyA/Pz0gIiBvcmMgeWFzbSAiCitQQUNLQUdFQ09ORklHW2xpYmF2XSA9ICItLXdpdGgtc3lzdGVtLWxpYmF2LCxsaWJhdiIKK1BBQ0tBR0VDT05GSUdbbGdwbF0gID0gIi0tZW5hYmxlLWxncGwsLCIKK1BBQ0tBR0VDT05GSUdbeWFzbV0gID0gIi0tZW5hYmxlLXlhc20sLS1kaXNhYmxlLXlhc20seWFzbS1uYXRpdmUiCitQQUNLQUdFQ09ORklHW29yY10gID0gIi0tZW5hYmxlLW9yYywtLWRpc2FibGUtb3JjLG9yYyIKKworCitHU1RSRUFNRVJfMV8wX0RFQlVHID89ICItLWRpc2FibGUtZGVidWciCisKK0xJQkFWX0VYVFJBX0NPTkZJR1VSRSA9ICItLXdpdGgtbGliYXYtZXh0cmEtY29uZmlndXJlIgorTElCQVZfRVhUUkFfQ09ORklHVVJFX0NPTU1PTiA9IFwKKycke0xJQkFWX0VYVFJBX0NPTkZJR1VSRX09IiR7TElCQVZfRVhUUkFfQ09ORklHVVJFX0NPTU1PTl9BUkd9IicKKworRVhUUkFfT0VDT05GID0gIiR7TElCQVZfRVhUUkFfQ09ORklHVVJFX0NPTU1PTn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouYSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk5YWQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA1NGJiYTIyOGVhNTJkMDFmZDg0OTQxZDk3YmUyM2MwM2Y5ODYyYjY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorRGF0ZTogU2F0LCA2IEFwciAyMDEzIDAxOjIyOjIyICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgeWFzbSBmb3IgbGliYXYgd2hlbiAtLWRpc2FibGUteWFzbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorLS0tCisgY29uZmlndXJlLmFjIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyMmVkZTg4Li5lZjNjMDUwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMDUsNiArMzA1LDEyIEBAIGVsc2UKKyAgICAgZW1ibGliYXZfY29uZmlndXJlX2FyZ3M9IiRlbWJsaWJhdl9jb25maWd1cmVfYXJncyAtLWVuYWJsZS1ncGwiCisgICBmaQorCisrICBBQ19BUkdfRU5BQkxFKHlhc20sCisrICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS15YXNtXSwgW2Rpc2FibGUgdXNlIG9mIHlhc20gYXNzZW1ibGVyXSldKQorKyAgaWYgdGVzdCAieCRlbmFibGVfeWFzbSIgPSAieG5vIjsgdGhlbgorKyAgICBlbWJsaWJhdl9jb25maWd1cmVfYXJncz0iJGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzIC0tZGlzYWJsZS15YXNtIgorKyAgZmkKKysKKyAgICMgaWYgd2UgYXJlIGNyb3NzLWNvbXBpbGluZywgdGVsbCBsaWJhdiBzbworICAgY2FzZSAkaG9zdCBpbgorICAgICAgICphbmRyb2lkKikKKy0tIAorMS44LjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhZGVhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRGVzY3JpcHRpb246IFdvcmthcm91bmQgdG8gYnVpbGQgbGliYXYgZm9yIGk1ODYgd2l0aCBnY2MgNC45LjIgYnkgYXZvaWRpbmcgbWVtc2V0CitBdXRob3I6IEJlcm5oYXJkINxiZWxhY2tlciA8YmVybmhhcmR1QHZyLXdlYi5kZT4KKworLS0tCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODMwODIKK0xhc3QtVXBkYXRlOiAyMDE1LTA0LTI4CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBnc3QtbGliYXYtMS40LjUub3JpZy9nc3QtbGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9oMjY0X2NhYmFjLmMKKysrKyBnc3QtbGliYXYtMS40LjUvZ3N0LWxpYnMvZXh0L2xpYmF2L2xpYmF2Y29kZWMvaDI2NF9jYWJhYy5jCitAQCAtMjAyMCw3ICsyMDIwLDExIEBAIGRlY29kZV9pbnRyYV9tYjoKKyAgICAgICAgIC8vIEluIGRlYmxvY2tpbmcsIHRoZSBxdWFudGl6ZXIgaXMgMAorICAgICAgICAgaC0+Y3VyX3BpYy5xc2NhbGVfdGFibGVbbWJfeHldID0gMDsKKyAgICAgICAgIC8vIEFsbCBjb2VmZnMgYXJlIHByZXNlbnQKKy0gICAgICAgIG1lbXNldChoLT5ub25femVyb19jb3VudFttYl94eV0sIDE2LCA0OCk7CisrICAgICAgICAvKm1lbXNldChoLT5ub25femVyb19jb3VudFttYl94eV0sIDE2LCA0OCk7Ki8KKysgICAgICAgICAgICAvKiBhdm9pZGluZyB0aGlzIG1lbXNldCBiZWNhdXNlIGl0IGxlYWRzIGF0IGxlYXN0IHdpdGggZ2NjNC45LjIgdG8gZXJyb3I6ICdhc20nIG9wZXJhbmQgaGFzIGltcG9zc2libGUgY29uc3RyYWludHMgKi8KKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDg7IGkrKykgeworKyAgICAgICAgICAgICggKHVuc2lnbmVkIGNoYXIqKShoLT5ub25femVyb19jb3VudFttYl94eV0pICkgW2ldID0gMTY7CisrICAgICAgICB9CisgICAgICAgICBoLT5jdXJfcGljLm1iX3R5cGVbbWJfeHldID0gbWJfdHlwZTsKKyAgICAgICAgIGgtPmxhc3RfcXNjYWxlX2RpZmYgPSAwOworICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNC41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZjN2VjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjQuNS5iYgpAQCAtMCwwICsxLDI3IEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1saWJhdi5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V4dC9saWJhdi9nc3Rhdi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PWE3NTJjMzUyNjdkODI3NmZkOWNhM2RiNjk5NGZjYTljIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9MSUNFTlNFO21kNT1lYTY2ZTk3YTdhYzFkYjk3OGNmMzUyOTA2OGE4Yzk0OCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1saWJhdi9nc3QtbGliYXYtJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoIFwKKyAgICBmaWxlOi8vd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImY0OTIyYTQ2YWRiY2JlN2JkMDEzMzFmZjVkYzc5NzlkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwNWM2MjYyNDYwNGYzYmI1Yzg3MDg0NGNjMWYyNzExNzc5Y2M1MzNiMDA0YzJhYTFkOGMwZDU4NTU3YWZiYmMiCisKK0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT05fQVJHID0gIi0tdGFyZ2V0LW9zPWxpbnV4IFwKKyAgLS1jYz0nJHtDQ30nIC0tYXM9JyR7Q0N9JyAtLWxkPScke0NDfScgLS1ubT0nJHtOTX0nIC0tYXI9JyR7QVJ9JyBcCisgIC0tcmFubGliPScke1JBTkxJQn0nIFwKKyAgJHtHU1RSRUFNRVJfMV8wX0RFQlVHfSBcCisgIC0tY3Jvc3MtcHJlZml4PScke0hPU1RfUFJFRklYfSciCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtbGliYXYtJHtQVn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxYjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfZ2l0LmJiCkBAIC0wLDAgKzEsMjkgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtbGliYXYuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9leHQvbGliYXYvZ3N0YXYuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT1hNzUyYzM1MjY3ZDgyNzZmZDljYTNkYjY5OTRmY2E5YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvTElDRU5TRTttZDU9MjNhNTRmNTliODI1NzJjMjAzYTU1OTM0NmU4OWVkNTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LWxpYmF2O2JyYW5jaD1tYXN0ZXIiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiMTI3MjAyZDZmNjU1ODQ4OTFkYWJmOTJiZTAzMWYwZDE3MGIwZTdmMSIKKworTElCQVZfRVhUUkFfQ09ORklHVVJFX0NPTU1PTl9BUkcgPSAiLS10YXJnZXQtb3M9bGludXggXAorICAtLWNjPScke0NDfScgLS1hcz0nJHtDQ30nIC0tbGQ9JyR7Q0N9JyAtLW5tPScke05NfScgLS1hcj0nJHtBUn0nIFwKKyAgJHtHU1RSRUFNRVJfMV8wX0RFQlVHfSBcCisgIC0tY3Jvc3MtcHJlZml4PScke0hPU1RfUFJFRklYfSciCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWYxMGMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UuYmIKQEAgLTAsMCArMSw2NSBAQAorREVTQ1JJUFRJT04gPSAiR3N0cmVhbWVyMS4wIHBhY2thZ2UgZ3JvdXBzIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK0NPTU1FUkNJQUxfUExVR0lOUyA9ICIke0NPTU1FUkNJQUxfQVVESU9fUExVR0lOU30gJHtDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlN9IgorREVQRU5EU19VR0xZPSIke0AnZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseScgaWYgJ3VnbHknIGluIENPTU1FUkNJQUxfUExVR0lOUy5zcGxpdCgnLScpIGVsc2UgJyd9IgorREVQRU5EU19CQUQ9IiR7QCdnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQnIGlmICdiYWQnIGluIENPTU1FUkNJQUxfUExVR0lOUy5zcGxpdCgnLScpIGVsc2UgJyd9IgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kICR7REVQRU5EU19VR0xZfSAke0RFUEVORFNfQkFEfSIKKworUEFDS0FHRVMgPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtZGVidWcgXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLXZpZGVvIgorCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlID0gIjEiCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS14MTEtYmFzZSA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtYXVkaW8gPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLWRlYnVnID0gIjEiCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS12aWRlbyA9ICIxIgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS1iYXNlID0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdnc3RyZWFtZXIxLjAtbWV0YS14MTEtYmFzZScsICcnLCBkKX0gXAorICAgIGdzdHJlYW1lcjEuMCBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1wbGF5YmFjayBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1naW8gXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYWxzYSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12b2x1bWUgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYXVkaW9jb252ZXJ0IFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWF1ZGlvcmVzYW1wbGUgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdHlwZWZpbmRmdW5jdGlvbnMgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdmlkZW9zY2FsZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12aWRlb2NvbnZlcnQgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtYXV0b2RldGVjdCBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1zb3VwaHR0cHNyYyIKKworUlJFQ09NTUVORFNfZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UgPSAiXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UteGltYWdlc2luayBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS14dmltYWdlc2luayIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtYXVkaW8gPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2Utdm9yYmlzIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLW9nZyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC13YXZwYXJzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1mbGFjIFwKKyAgICAke0NPTU1FUkNJQUxfQVVESU9fUExVR0lOU30iCisKK1JERVBFTkRTX2dzdHJlYW1lcjEuMC1tZXRhLWRlYnVnID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLWRlYnVnIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWF1ZGlvdGVzdHNyYyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12aWRlb3Rlc3RzcmMiCisKK1JERVBFTkRTX2dzdHJlYW1lcjEuMC1tZXRhLXZpZGVvID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLWF2aSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1tYXRyb3NrYSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS10aGVvcmEgXAorICAgICR7Q09NTUVSQ0lBTF9WSURFT19QTFVHSU5TfSIKKworUlJFQ09NTUVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8gPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTg5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJPcGVuTUFYIElMIHBsdWdpbnMgZm9yIEdTdHJlYW1lciIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdzdHJlYW1lci5uZXQvIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQiCitSREVQRU5EU18ke1BOfSA9ICJsaWJvbXhpbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworYWNwYXRocyA9ICItSSAke1N9L2NvbW1vbi9tNCAtSSAke1N9L200IgorCitQUiA9ICJyMSIKKworR1NUUkVBTUVSXzFfMF9PTVhfVEFSR0VUID89ICJiZWxsYWdpbyIKK0dTVFJFQU1FUl8xXzBfT01YX0NPUkVfTkFNRSA/PSAiJHtsaWJkaXJ9L2xpYm9teGlsLWJlbGxhZ2lvLnNvLjAiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXZhbGdyaW5kIC0td2l0aC1vbXgtdGFyZ2V0PSR7R1NUUkVBTUVSXzFfMF9PTVhfVEFSR0VUfSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBvbXhfdGFyZ2V0ID0gZC5nZXRWYXIoIkdTVFJFQU1FUl8xXzBfT01YX1RBUkdFVCIsIFRydWUpCisgICAgaWYgb214X3RhcmdldCBpbiBbJ2dlbmVyaWMnLCAnYmVsbGFnaW8nXToKKyAgICAgICAgc3JjZGlyID0gZC5nZXRWYXIoIlMiLCBUcnVlKQorICAgICAgICAjIEJlbGxhZ2lvIGhlYWRlcnMgYXJlIGluY29tcGxldGUgKHRoZXkgYXJlIG1pc3NpbmcgdGhlIE9NWF9WRVJTSU9OX01BSk9SLCMKKyAgICAgICAgIyBPTVhfVkVSU0lPTl9NSU5PUiwgT01YX1ZFUlNJT05fUkVWSVNJT04sIGFuZCBPTVhfVkVSU0lPTl9TVEVQIG1hY3Jvcyk7CisgICAgICAgICMgYXBwZW5kaW5nIGEgZGlyZWN0b3J5IHBhdGggdG8gZ3N0LW9teCcgaW50ZXJuYWwgT3Blbk1BWCBJTCBoZWFkZXJzIGZpeGVzIHRoaXMKKyAgICAgICAgZC5hcHBlbmRWYXIoIkNGTEFHUyIsICIgLUklcy9vbXgvb3Blbm1heCIgJSBzcmNkaXIpCisgICAgZWxpZiBvbXhfdGFyZ2V0ID09ICJycGkiOgorICAgICAgICAjIERlZGljYXRlZCBSYXNwYmVycnkgUGkgT3Blbk1BWCBJTCBzdXBwb3J0IG1ha2VzIHRoaXMgcGFja2FnZSBtYWNoaW5lIHNwZWNpZmljCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBkLmdldFZhcigiTUFDSElORV9BUkNIIiwgVHJ1ZSkpCit9CisKK3NldF9vbXhfY29yZV9uYW1lKCkgeworCXNlZCAtaSAtZSAiczteY29yZS1uYW1lPS4qO2NvcmUtbmFtZT0ke0dTVFJFQU1FUl8xXzBfT01YX0NPUkVfTkFNRX07IiAiJHtEfSR7c3lzY29uZmRpcn0veGRnL2dzdG9teC5jb25mIgorfQorZG9faW5zdGFsbFtwb3N0ZnVuY3NdICs9ICIgc2V0X29teF9jb3JlX25hbWUgIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmEiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gZjYyOWUwNDFlOWY2NzhmY2Q4NmFkNzY0YTE1MTE3ZGZmNjNjMjcxYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KK0RhdGU6IFNhdCwgMjcgQXByIDIwMTMgMDI6NTA6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gb214OiBmaXhlZCB0eXBlIGVycm9yIGluIHByaW50ZiBjYWxsCisKKyV6dSBleHBlY3RzIHNpemVfdAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTAwOF0KKworU2lnbmVkLW9mZi1ieTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorLS0tCisgb214L2dzdG9teC5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvb214L2dzdG9teC5jIGIvb214L2dzdG9teC5jCitpbmRleCBhMjk0NWVkLi4xZWNhN2NjIDEwMDY0NAorLS0tIGEvb214L2dzdG9teC5jCisrKysgYi9vbXgvZ3N0b214LmMKK0BAIC0xNjMwLDcgKzE2MzAsNyBAQCBnc3Rfb214X3BvcnRfYWxsb2NhdGVfYnVmZmVyc191bmxvY2tlZCAoR3N0T01YUG9ydCAqIHBvcnQsCisgCisgICBHU1RfSU5GT19PQkpFQ1QgKGNvbXAtPnBhcmVudCwKKyAgICAgICAiQWxsb2NhdGluZyAlZCBidWZmZXJzIG9mIHNpemUgJXp1IGZvciAlcyBwb3J0ICV1IiwgbiwKKy0gICAgICBwb3J0LT5wb3J0X2RlZi5uQnVmZmVyU2l6ZSwgY29tcC0+bmFtZSwgKGd1aW50KSBwb3J0LT5pbmRleCk7CisrICAgICAgKHNpemVfdCkgKHBvcnQtPnBvcnRfZGVmLm5CdWZmZXJTaXplKSwgY29tcC0+bmFtZSwgKGd1aW50KSBwb3J0LT5pbmRleCk7CisgCisgICBpZiAoIXBvcnQtPmJ1ZmZlcnMpCisgICAgIHBvcnQtPmJ1ZmZlcnMgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcgKG4pOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214XzEuMi4wLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3YzkxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214XzEuMi4wLmJiCkBAIC0wLDAgKzEsMTIgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLW9teC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb214L2dzdG9teC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PTVjOGUxZmNhMzI3MDQ0ODhlNzZkMmJhOWRkZmE5MzVmIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3Qtb214L2dzdC1vbXgtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDI0ZThjMDE1M2MzNWRmZWZlZTNlMjZiMWMyYzM1ZjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGI0ODc0OTYxZTY0ODhhZDllNTgwODExNGJkNDg2ZWE5ODFjNTQwOTA3MjYyY2FhYjE0MTkzNTVmZDgyZDc0NSIKKworUyA9ICIke1dPUktESVJ9L2dzdC1vbXgtJHtQVn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWM4NDY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfZ2l0LmJiCkBAIC0wLDAgKzEsMjYgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtb214LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vbXgvZ3N0b214Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NWM4ZTFmY2EzMjcwNDQ4OGU3NmQyYmE5ZGRmYTkzNWYiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LW9teDticmFuY2g9bWFzdGVyO25hbWU9Z3N0LW9teCBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247YnJhbmNoPW1hc3RlcjtuYW1lPWNvbW1vbiBcCisgICAgZmlsZTovLzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2ggXAorICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWX2dzdC1vbXggPSAiYTJkYjc2YjA0OGRiMjc4ZWYwYWE3OThlMTA2Yjc1OTQyNjRlMDZjMCIKK1NSQ1JFVl9jb21tb24gPSAiNWVkY2Q4NTdiMjEwN2NkOGI3OGMxNjIzMmRkMTA4Nzc1MTNlYzE1NyIKKworU1JDUkVWX0ZPUk1BVCA9ICJnc3Qtb214IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlZGI2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCkBAIC0wLDAgKzEsMTM1IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisgJiBMR1BMdjIuMSsgIgorCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGxpYnBuZyBqcGVnIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFkLSR7UFZ9IgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBcCisgICAgICAgICAgICIKKworaW5oZXJpdCBnZXR0ZXh0IGJsdWV0b290aAorCisjIG9wZW5nbCBwYWNrYWdlY29uZmlnIGZhY3RvcmVkIG91dCB0byBtYWtlIGl0IGVhc3kgZm9yIGRpc3Ryb3MKKyMgYW5kIEJTUCBsYXllcnMgdG8gcGljayBlaXRoZXIgKGRlc2t0b3ApIG9wZW5nbCwgZ2xlczIsIG9yIG5vIEdMCitQQUNLQUdFQ09ORklHX0dMID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdnbGVzMicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7UEFDS0FHRUNPTkZJR19HTH0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisgICAgb3JjIGN1cmwgdXZjaDI2NCBuZW9uIHNuZGZpbGUgXAorICAgIGhscyBzYmMgZGFzaCBiejIgc21vb3Roc3RyZWFtaW5nIFwKKyAgICAiCisKKyMgZGFzaCA9IER5bmFtaWMgQWRhcHRpdmUgU3RyZWFtaW5nIG92ZXIgSFRUUAorUEFDS0FHRUNPTkZJR1thc3NyZW5kZXJdICAgICAgID0gIi0tZW5hYmxlLWFzc3JlbmRlciwtLWRpc2FibGUtYXNzcmVuZGVyLGxpYmFzcyIKK1BBQ0tBR0VDT05GSUdbY3VybF0gICAgICAgICAgICA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW2dsZXMyXSAgICAgICAgICAgPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW29wZW5nbF0gICAgICAgICAgPSAiLS1lbmFibGUtb3BlbmdsLC0tZGlzYWJsZS1vcGVuZ2wsdmlydHVhbC9saWJnbCBsaWJnbHUiCitQQUNLQUdFQ09ORklHW2ZhYWNdICAgICAgICAgICAgPSAiLS1lbmFibGUtZmFhYywtLWRpc2FibGUtZmFhYyxmYWFjIgorUEFDS0FHRUNPTkZJR1tmYWFkXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWZhYWQsLS1kaXNhYmxlLWZhYWQsZmFhZDIiCitQQUNLQUdFQ09ORklHW2xpYm1tc10gICAgICAgICAgPSAiLS1lbmFibGUtbGlibW1zLC0tZGlzYWJsZS1saWJtbXMsbGlibW1zIgorUEFDS0FHRUNPTkZJR1ttb2RwbHVnXSAgICAgICAgID0gIi0tZW5hYmxlLW1vZHBsdWcsLS1kaXNhYmxlLW1vZHBsdWcsbGlibW9kcGx1ZyIKK1BBQ0tBR0VDT05GSUdbbXBnMTIzXSAgICAgICAgICA9ICItLWVuYWJsZS1tcGcxMjMsLS1kaXNhYmxlLW1wZzEyMyxtcGcxMjMiCitQQUNLQUdFQ09ORklHW29wdXNdICAgICAgICAgICAgPSAiLS1lbmFibGUtb3B1cywtLWRpc2FibGUtb3B1cyxsaWJvcHVzIgorUEFDS0FHRUNPTkZJR1tmbGl0ZV0gICAgICAgICAgID0gIi0tZW5hYmxlLWZsaXRlLC0tZGlzYWJsZS1mbGl0ZSxmbGl0ZS1hbHNhIgorUEFDS0FHRUNPTkZJR1tvcGVuY3ZdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5jdiwtLWRpc2FibGUtb3BlbmN2LG9wZW5jdiIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgICAgICA9ICItLWVuYWJsZS13YXlsYW5kIC0tZW5hYmxlLWVnbCwtLWRpc2FibGUtd2F5bGFuZCAtLWRpc2FibGUtZWdsLHdheWxhbmQgdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW3V2Y2gyNjRdICAgICAgICAgPSAiLS1lbmFibGUtdXZjaDI2NCwtLWRpc2FibGUtdXZjaDI2NCxsaWJ1c2IxIHVkZXYiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSAgICAgICAgPSAiLS1lbmFibGUtZGlyZWN0ZmIsLS1kaXNhYmxlLWRpcmVjdGZiLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1tuZW9uXSAgICAgICAgICAgID0gIi0tZW5hYmxlLW5lb24sLS1kaXNhYmxlLW5lb24sbmVvbiIKK1BBQ0tBR0VDT05GSUdbb3BlbmFsXSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuYWwsLS1kaXNhYmxlLW9wZW5hbCxvcGVuYWwtc29mdCIKK1BBQ0tBR0VDT05GSUdbaGxzXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1obHMsLS1kaXNhYmxlLWhscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW3NiY10gICAgICAgICAgICAgPSAiLS1lbmFibGUtc2JjLC0tZGlzYWJsZS1zYmMsc2JjIgorUEFDS0FHRUNPTkZJR1tkYXNoXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWRhc2gsLS1kaXNhYmxlLWRhc2gsbGlieG1sMiIKK1BBQ0tBR0VDT05GSUdbYnoyXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1iejIsLS1kaXNhYmxlLWJ6MixiemlwMiIKK1BBQ0tBR0VDT05GSUdbZmx1aWRzeW50aF0gICAgICA9ICItLWVuYWJsZS1mbHVpZHN5bnRoLC0tZGlzYWJsZS1mbHVpZHN5bnRoLGZsdWlkc3ludGgiCitQQUNLQUdFQ09ORklHW3NjaHJvZWRpbmdlcl0gICAgPSAiLS1lbmFibGUtc2Nocm8sLS1kaXNhYmxlLXNjaHJvLHNjaHJvZWRpbmdlciIKK1BBQ0tBR0VDT05GSUdbc21vb3Roc3RyZWFtaW5nXSA9ICItLWVuYWJsZS1zbW9vdGhzdHJlYW1pbmcsLS1kaXNhYmxlLXNtb290aHN0cmVhbWluZyxsaWJ4bWwyIgorUEFDS0FHRUNPTkZJR1tibHVlel0gICAgICAgICAgID0gIi0tZW5hYmxlLWJsdWV6LC0tZGlzYWJsZS1ibHVleiwke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbcnN2Z10gICAgICAgICAgICA9ICItLWVuYWJsZS1yc3ZnLC0tZGlzYWJsZS1yc3ZnLGxpYnJzdmciCitQQUNLQUdFQ09ORklHW3NuZGZpbGVdICAgICAgICAgPSAiLS1lbmFibGUtc25kZmlsZSwtLWRpc2FibGUtc25kZmlsZSxsaWJzbmRmaWxlMSIKK1BBQ0tBR0VDT05GSUdbd2VicF0gICAgICAgICAgICA9ICItLWVuYWJsZS13ZWJwLC0tZGlzYWJsZS13ZWJwLGxpYndlYnAiCitQQUNLQUdFQ09ORklHW3J0bXBdICAgICAgICAgICAgPSAiLS1lbmFibGUtcnRtcCwtLWRpc2FibGUtcnRtcCxydG1wZHVtcCIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gICAgICAgICA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIiCisKKyMgdGhlc2UgcGx1Z2lucyBoYXZlIG5vdCBiZWVuIHBvcnRlZCB0byAxLjAgKHlldCk6CisjICAgZGlyZWN0ZHJhdyB2Y2QgYXBleHNpbmsgZGMxMzk0IGx2MiBsaW5zeXMgbXVzZXBhY2sgbXl0aHR2CisjICAgbmFzIHRpbWlkaXR5IHRlbGV0ZXh0ZGVjIHNkbCB4dmlkIHdpbmluZXQgYWNtIGdzZXR0aW5ncworIyAgIHNuZGlvIHF0d3JhcHBlciBjZHhhcGFyc2UgZGNjcCBmYWNlb3ZlcmxheSBoZHZwYXJzZSB0dGEKKyMgICBtdmUgbnV2ZGVtdXggb3N4X3ZpZGVvIHBhdGNoZGV0ZWN0IHF1aWNrdGltZSByZWFsIHNkaQorIyAgIHZpZGVvbWVhc3VyZSBnc2V0dGluZ3MKKworIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm8gY29ycmVzcG9uZGluZyBsaWJyYXJ5IGluIE9FLWNvcmUgb3IgbWV0YS1vcGVuZW1iZWRkZWQ6CisjICAgb3Blbm5pMiB3aW5rcyBkaXJlY3QzZCBkaXJlY3RkcmF3IGRpcmVjdHNvdW5kIHdpbnNjcmVlbmNhcCBvc3hfdmlkZW8KKyMgICBhcHBsZV9tZWRpYSBhbmRyb2lkX21lZGlhIGF2YyBjaHJvbWFwcmludCBkYWFsYSBkdHMgZ21lIGdzbSBrYXRlIGxhZHNwYSBtaW1pYworIyAgIG1wZWcyZW5jIG1wbGV4IG9mYSBvcGVuanBlZyBvcGVuc2xlcyBwdnIgcmVzaW5kdmQgcnRtcCBzb3VuZHRvdWNoIHNwYW5kc3Agc3BjCisjICAgc3J0cCB2ZHBhdSB2b2FhY2VuYyB2b2FtcndiZW5jIHdhc2FwaSB6YmFyCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtLWVuYWJsZS1kdmIgXAorICAgIC0tZW5hYmxlLXNobSBcCisgICAgLS1lbmFibGUtZmJkZXYgXAorICAgIC0tZW5hYmxlLWRlY2tsaW5rIFwKKyAgICAtLWRpc2FibGUtYWNtIFwKKyAgICAtLWRpc2FibGUtYW5kcm9pZF9tZWRpYSBcCisgICAgLS1kaXNhYmxlLWFwZXhzaW5rIFwKKyAgICAtLWRpc2FibGUtYXBwbGVfbWVkaWEgXAorICAgIC0tZGlzYWJsZS1hdmMgXAorICAgIC0tZGlzYWJsZS1jaHJvbWFwcmludCBcCisgICAgLS1kaXNhYmxlLWNvY29hIFwKKyAgICAtLWRpc2FibGUtZGFhbGEgXAorICAgIC0tZGlzYWJsZS1kYzEzOTQgXAorICAgIC0tZGlzYWJsZS1kaXJlY3QzZCBcCisgICAgLS1kaXNhYmxlLWRpcmVjdGRyYXcgXAorICAgIC0tZGlzYWJsZS1kaXJlY3Rzb3VuZCBcCisgICAgLS1kaXNhYmxlLWR0cyBcCisgICAgLS1kaXNhYmxlLWdtZSBcCisgICAgLS1kaXNhYmxlLWdzZXR0aW5ncyBcCisgICAgLS1kaXNhYmxlLWdzbSBcCisgICAgLS1kaXNhYmxlLWthdGUgXAorICAgIC0tZGlzYWJsZS1sYWRzcGEgXAorICAgIC0tZGlzYWJsZS1saW5zeXMgXAorICAgIC0tZGlzYWJsZS1sdjIgXAorICAgIC0tZGlzYWJsZS1taW1pYyBcCisgICAgLS1kaXNhYmxlLW1wZWcyZW5jIFwKKyAgICAtLWRpc2FibGUtbXBsZXggXAorICAgIC0tZGlzYWJsZS1tdXNlcGFjayBcCisgICAgLS1kaXNhYmxlLW15dGh0diBcCisgICAgLS1kaXNhYmxlLW5hcyBcCisgICAgLS1kaXNhYmxlLW9mYSBcCisgICAgLS1kaXNhYmxlLW9wZW5qcGVnIFwKKyAgICAtLWRpc2FibGUtb3BlbnNsZXMgXAorICAgIC0tZGlzYWJsZS1vc3hfdmlkZW8gXAorICAgIC0tZGlzYWJsZS1wdnIgXAorICAgIC0tZGlzYWJsZS1xdWlja3RpbWUgXAorICAgIC0tZGlzYWJsZS1yZXNpbmR2ZCBcCisgICAgLS1kaXNhYmxlLXNkbCBcCisgICAgLS1kaXNhYmxlLXNkbHRlc3QgXAorICAgIC0tZGlzYWJsZS1zbmRpbyBcCisgICAgLS1kaXNhYmxlLXNvdW5kdG91Y2ggXAorICAgIC0tZGlzYWJsZS1zcGFuZHNwIFwKKyAgICAtLWRpc2FibGUtc3BjIFwKKyAgICAtLWRpc2FibGUtc3J0cCBcCisgICAgLS1kaXNhYmxlLXRlbGV0ZXh0ZGVjIFwKKyAgICAtLWRpc2FibGUtdGltaWRpdHkgXAorICAgIC0tZGlzYWJsZS12Y2QgXAorICAgIC0tZGlzYWJsZS12ZHBhdSBcCisgICAgLS1kaXNhYmxlLXZvYWFjZW5jIFwKKyAgICAtLWRpc2FibGUtdm9hbXJ3YmVuYyBcCisgICAgLS1kaXNhYmxlLXdhc2FwaSBcCisgICAgLS1kaXNhYmxlLXdpbGRtaWRpIFwKKyAgICAtLWRpc2FibGUtd2luaW5ldCBcCisgICAgLS1kaXNhYmxlLXdpbnNjcmVlbmNhcCBcCisgICAgLS1kaXNhYmxlLXh2aWQgXAorICAgIC0tZGlzYWJsZS16YmFyIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi0tZGlzYWJsZS15YWRpZiIsICIiLCBkKX0gXAorICAgICIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0ZJTEVTX2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC1vcGVuY3YgKz0gIiR7ZGF0YWRpcn0vZ3N0LXBsdWdpbnMtYmFkLzEuMC9vcGVuY3YqIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MmEzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGRlYmEwZGE0NWVjODIxMjA5YTdlZDE0OGE0NTIxZDU2MmU2NTEyY2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDE0OjQ3OjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGdsOiBkbyBub3QgY2hlY2sgZm9yIEdML0dMVS9FR0wvR0xFUzIgbGlicyBpZiBkaXNhYmxlZCBpbgorIGNvbmZpZ3VyYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU1MjJdCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE0ICsrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFhNDZhZmIuLmU4NWQ0YmEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY2MSwxMCArNjYxLDE2IEBAIGNhc2UgJGhvc3QgaW4KKyAgICAgZmkKKyAgIDs7CisgICAqKQorLSAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMLCBHTCwgZ2xUZXhJbWFnZTJELCwgR0wvZ2wuaCkKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTFUsIEdMVSwgZ2x1U3BoZXJlLCwgR0wvZ2x1LmgpCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0xFUzIsIEdMRVN2MiwgZ2xUZXhJbWFnZTJELCwgR0xFUzIvZ2wyLmgpCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoRUdMLCBFR0wsIGVnbEdldEVycm9yLCwgRUdML2VnbC5oKQorKyAgICBpZiB0ZXN0ICJ4JE5FRURfR0wiICE9ICJ4bm8iOyB0aGVuCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTCwgR0wsIGdsVGV4SW1hZ2UyRCwsIEdML2dsLmgpCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTFUsIEdMVSwgZ2x1U3BoZXJlLCwgR0wvZ2x1LmgpCisrICAgIGZpCisrICAgIGlmIHRlc3QgIngkTkVFRF9HTEVTMiIgIT0gInhubyI7IHRoZW4KKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMRVMyLCBHTEVTdjIsIGdsVGV4SW1hZ2UyRCwsIEdMRVMyL2dsMi5oKQorKyAgICBmaQorKyAgICBpZiB0ZXN0ICJ4JE5FRURfRUdMIiAhPSAieG5vIjsgdGhlbgorKyAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoRUdMLCBFR0wsIGVnbEdldEVycm9yLCwgRUdML2VnbC5oKQorKyAgICBmaQorIAorICAgICBvbGRfTElCUz0kTElCUworICAgICBvbGRfQ0ZMQUdTPSRDRkxBR1MKKy0tIAorMS44LjMuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnNzaDIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnNzaDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyYWZkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGY1OWM1MjY5ZjkyZDU5YTUyOTZjYmZlZWI2ODJkNDIwOTVjZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTggU2VwIDIwMTQgMDI6MjQ6MDcgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkOiBhbGxvdyB0byBkaXNhYmxlIGxpYnNzaDIKKworbGlic3NoMiBpcyBhdXRvbWF0aWNhbGx5IGxpbmtlZCB0byBpZiBwcmVzZW50LCB0aGlzIHVuZGV0ZXJtaW5lZAorZGVwZW5kZW5jeSBtYXkgY2F1c2UgYnVpbGQgZXJyb3JzIGxpa2U6CisKKyAgLi4uL3g4Nl82NC1wb2t5LWxpbnV4LzQuOS4wL2xkOiBjYW5ub3QgZmluZCAtbHNzaDIKKworbGlic3NoMiBpc24ndCBhbiBvZS1jb3JlIHJlY2lwZSwgc28gYWxsb3cgdG8gZGlzYWJsZSBpdCBmcm9tCitjb25maWd1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMjMgKysrKysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGU5NWM1Yy4uMTIxNTNiNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTkwMSw2ICsxOTAxLDE1IEBAIEFHX0dTVF9DSEVDS19GRUFUVVJFKENIUk9NQVBSSU5ULCBbY2hyb21hcHJpbnRdLCBjaHJvbWFwcmludCwgWworIF0pCisgCisgZG5sICoqKiBDdXJsICoqKgorK0FDX0FSR19FTkFCTEUoW2xpYnNzaDJdLAorKyAgICAgWyAgLS1lbmFibGUtbGlic3NoMgkJZW5hYmxlIExJQlNTSDIgc3VwcG9ydCBAPDpAZGVmYXVsdD1hdXRvQDo+QF0sCisrICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgICAgICB5ZXMpICBORUVEX1NTSDI9eWVzIDs7CisrICAgICAgIG5vKSAgIE5FRURfU1NIMj1ubyA7OworKyAgICAgICBhdXRvKSBORUVEX1NTSDI9YXV0byA7OworKyAgICAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxpYnNzaDJdKSA7OworKyAgICAgZXNhY10sW05FRURfU1NIMj1hdXRvXSkKKysKKyB0cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9DVVJMLCB0cnVlKQorIEFHX0dTVF9DSEVDS19GRUFUVVJFKENVUkwsIFtDdXJsIHBsdWdpbl0sIGN1cmwsIFsKKyAgIFBLR19DSEVDS19NT0RVTEVTKENVUkwsIGxpYmN1cmwgPj0gNy4yMS4wLCBbCitAQCAtMTkxNSwxMiArMTkyNCwxNCBAQCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShDVVJMLCBbQ3VybCBwbHVnaW5dLCBjdXJsLCBbCisgICBdKQorICAgQUNfU1VCU1QoQ1VSTF9DRkxBR1MpCisgICBBQ19TVUJTVChDVVJMX0xJQlMpCistICBQS0dfQ0hFQ0tfTU9EVUxFUyhTU0gyLCBsaWJzc2gyID49IDEuNC4zLCBbCistICAgIEhBVkVfU1NIMj0ieWVzIgorLSAgICBBQ19ERUZJTkUoSEFWRV9TU0gyLCAxLCBbRGVmaW5lIGlmIGxpYnNzaDIgaXMgYXZhaWxhYmxlXSkKKy0gIF0sIFsKKy0gICAgSEFWRV9TU0gyPSJubyIKKy0gIF0pCisrICBpZiB0ZXN0ICJ4JE5FRURfU1NIMiIgIT0gInhubyI7IHRoZW4KKysgICAgUEtHX0NIRUNLX01PRFVMRVMoU1NIMiwgbGlic3NoMiA+PSAxLjQuMywgWworKyAgICAgIEhBVkVfU1NIMj0ieWVzIgorKyAgICAgIEFDX0RFRklORShIQVZFX1NTSDIsIDEsIFtEZWZpbmUgaWYgbGlic3NoMiBpcyBhdmFpbGFibGVdKQorKyAgICBdLCBbCisrICAgICAgSEFWRV9TU0gyPSJubyIKKysgICAgXSkKKysgIGZpCisgICBBTV9DT05ESVRJT05BTChVU0VfU1NIMiwgdGVzdCAieCRIQVZFX1NTSDIiID0gInh5ZXMiKQorICAgQUNfU1VCU1QoU1NIMl9DRkxBR1MpCisgICBBQ19TVUJTVChTU0gyX0xJQlMpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjQuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwNjVkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS40LjUuYmIKQEAgLTAsMCArMSwxNCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImUwYmIzOTQxMmNmNGE0OGZlMDM5N2JjZjNhN2NkNDUxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE1MmZhZDcyNTA2ODNkNzJmOWRlYjM2YzU2ODU0MjgzMzgzNjVmZTRhNGM4N2ZmZTE1ZTM4NzgzYjE0Zjk4M2MiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5NTA1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiCkBAIC0wLDAgKzEsMjYgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjZlNWRiNTdkMjQ0NmE3NTNhYWE3NmJlZTI2OGUxZjk1NjAwYjE0Y2UiCisKK1BBQ0tBR0VDT05GSUdbc2JjXSA9ICItLWVuYWJsZS1zYmMsLS1kaXNhYmxlLXNiYyxzYmMiCitQQUNLQUdFQ09ORklHW2hsc10gPSAiLS1lbmFibGUtaGxzLC0tZGlzYWJsZS1obHMsZ251dGxzIgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLWRpc2FibGUtb3BlbmpwZWcgXAorICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmM2Y0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwpAQCAtMCwwICsxLDM5IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCisKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbGlieDExIGxpYnh2JywgJycsIGQpfSIKK0RFUEVORFMgKz0gImZyZWV0eXBlIGxpYm9pbCB1dGlsLWxpbnV4IgorCitpbmhlcml0IGdldHRleHQKKworUEFDS0FHRVNfRFlOQU1JQyA9KyAiXmxpYmdzdC4qIgorCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0gXAorICAgIG9yYyBpdm9yYmlzIG9nZyB0aGVvcmEgdm9yYmlzIHBhbmdvIFwKKyAgICAiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciIKK1gxMUVOQUJMRU9QVFMgPSAiLS1lbmFibGUteCAtLWVuYWJsZS14dmlkZW8gLS1lbmFibGUteHNobSIKK1gxMURJU0FCTEVPUFRTID0gIi0tZGlzYWJsZS14IC0tZGlzYWJsZS14dmlkZW8gLS1kaXNhYmxlLXhzaG0iCitQQUNLQUdFQ09ORklHW3gxMV0gICAgID0gIiR7WDExRU5BQkxFT1BUU30sJHtYMTFESVNBQkxFT1BUU30sJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gICAgPSAiLS1lbmFibGUtYWxzYSwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbaXZvcmJpc10gPSAiLS1lbmFibGUtaXZvcmJpcywtLWRpc2FibGUtaXZvcmJpcyx0cmVtb3IiCitQQUNLQUdFQ09ORklHW29nZ10gICAgID0gIi0tZW5hYmxlLW9nZywtLWRpc2FibGUtb2dnLGxpYm9nZyIKK1BBQ0tBR0VDT05GSUdbdGhlb3JhXSAgPSAiLS1lbmFibGUtdGhlb3JhLC0tZGlzYWJsZS10aGVvcmEsbGlidGhlb3JhIgorUEFDS0FHRUNPTkZJR1t2b3JiaXNdICA9ICItLWVuYWJsZS12b3JiaXMsLS1kaXNhYmxlLXZvcmJpcyxsaWJ2b3JiaXMiCitQQUNLQUdFQ09ORklHW3BhbmdvXSAgID0gIi0tZW5hYmxlLXBhbmdvLC0tZGlzYWJsZS1wYW5nbyxwYW5nbyIKKworCisjIGNkcGFyYW5vaWEgYW5kIGxpYnZpc3VhbCBkbyBub3Qgc2VlbSB0byBleGlzdCBhbnl3aGVyZSBpbiBPRQorRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZGlzYWJsZS1mcmVldHlwZXRlc3QgXAorICAgIC0tZGlzYWJsZS1jZHBhcmFub2lhIFwKKyAgICAtLWRpc2FibGUtbGlidmlzdWFsIFwKKyIKKworRklMRVNfJHtNTFBSRUZJWH1saWJnc3R0YWctMS4wICs9ICIke2RhdGFkaXJ9L2dzdC1wbHVnaW5zLWJhc2UvMS4wL2xpY2Vuc2UtdHJhbnNsYXRpb25zLmRpY3QiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2FwcGVuZF94ODYgPSAiIGFjX2N2X2hlYWRlcl9lbW1pbnRyaW5faD1ubyBhY19jdl9oZWFkZXJfeG1taW50cmluX2g9bm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLWJhc2V0ZXh0b3ZlcmxheS1tYWtlLW1lbW9yeS1jb3B5LXdoZW4tdmlkZW8tYnVmZmVyLXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLWJhc2V0ZXh0b3ZlcmxheS1tYWtlLW1lbW9yeS1jb3B5LXdoZW4tdmlkZW8tYnVmZmVyLXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkY2E5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaApAQCAtMCwwICsxLDEyOSBAQAorRnJvbSAzNzgxZDQwOTQwZDQ2ZDdlNmE1MDIwOTJkMjRhYWM3OTk3ZjZkYTViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDUgTWFyIDIwMTUgMTI6MDY6MjMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIGJhc2V0ZXh0b3ZlcmxheTogbWFrZSBtZW1vcnkgY29weSB3aGVuIHZpZGVvIGJ1ZmZlcidzCisgbWVtb3J5IGlzIHJlYWR5IG9ubHkKKworMS4gc2luY2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIGp1c3QgbG9va3VwIHRoZSByZWZjb3VudCB0byBkZXRlcm1pbmUgaWYKKyAgIGEgYnVmZmVyIGlzIHdyaXRhYmxlLCBhbmQgaXQgd2lsbCB1c2UgX2dzdF9idWZmZXJfY29weSgpIHdoaWNoIGRvbid0CisgICBwZXJmb3JtIGEgZGVlcCBtZW1vcnkgY29weSBldmVuIGlmIHRoZSBmbGFnIG9mIGEgbWVtb3J5IGlzIHNldCB0bworICAgR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLiBTbywgd2UgZGV0ZWN0IHRoZSBtZW1vcnkgZmxhZyBhbmQgdXNlCisgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIHdpdGggR1NUX0JVRkZFUl9DT1BZX0RFRVAgcGFyYW1ldGVyIHRvIHBlcmZvcm0KKyAgIGRlZXAgbWVtb3J5IGNvcHkuIGlmIHRoZSBhbGxvY2F0b3Igb2YgYSBtZW1vcnkgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weQorICAgaW50ZXJmYWNlLCB0aGUgaXQgd2lsbCByZXR1cm4gTlVMTCwgaWYgdGhpcyBjYXNlLCB3ZSBjYW4gdXNlCisgICBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB0byBnZXQgYSBzaGFyZWQgbWVtb3J5IGJ1ZmZlciBvciB0aGUgb3JpZ25hbAorICAgYnVmZmVyIGlmIHRoZSBidWZmZXIncyByZWZjb3VudCBpcyAxLgorMi4gIG5ldyBmZWF0dXJlIGlzIG5vIGFkZGVkIGlmIGNhcHMgaGFzIG5vIGZlYXR1cmUgZHVyaW5nIGNhcHMgbmVnb3RpYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTVdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jIGIvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jCitpbmRleCBjOTE5ODYxLi4zYzBhMWQ3IDEwMDc1NQorLS0tIGEvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jCisrKysgYi9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMKK0BAIC03NDcsNiArNzQ3LDcgQEAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X25lZ290aWF0ZSAoR3N0QmFzZVRleHRPdmVybGF5ICogb3ZlcmxheSwgR3N0Q2FwcyAqIGNhcHMpCisgICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICBmID0gZ3N0X2NhcHNfZmVhdHVyZXNfbmV3CisgICAgICAgICAgIChHU1RfQ0FQU19GRUFUVVJFX01FVEFfR1NUX1ZJREVPX09WRVJMQVlfQ09NUE9TSVRJT04sIE5VTEwpOworKyAgICAgIGdzdF9jYXBzX3NldF9mZWF0dXJlcyhvdmVybGF5X2NhcHMsIDAsIGYpOworICAgICB9IGVsc2UgeworICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoZiwKKyAgICAgICAgICAgR1NUX0NBUFNfRkVBVFVSRV9NRVRBX0dTVF9WSURFT19PVkVSTEFZX0NPTVBPU0lUSU9OKTsKK0BAIC0xODkwLDE2ICsxODkxLDcxIEBAIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9wdXNoX2ZyYW1lIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LAorICAgaWYgKGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKG92ZXJsYXktPnNyY3BhZCkpCisgICAgIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9uZWdvdGlhdGUgKG92ZXJsYXksIE5VTEwpOworIAorLSAgdmlkZW9fZnJhbWUgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKHZpZGVvX2ZyYW1lKTsKKy0KKyAgIGlmIChvdmVybGF5LT5hdHRhY2hfY29tcG9fdG9fYnVmZmVyKSB7CisgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG92ZXJsYXksICJBdHRhY2hpbmcgdGV4dCBvdmVybGF5IGltYWdlIHRvIHZpZGVvIGJ1ZmZlciIpOworKyAgICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworICAgICBnc3RfYnVmZmVyX2FkZF92aWRlb19vdmVybGF5X2NvbXBvc2l0aW9uX21ldGEgKHZpZGVvX2ZyYW1lLAorICAgICAgICAgb3ZlcmxheS0+Y29tcG9zaXRpb24pOworICAgICAvKiBGSVhNRTogZW11bGF0ZSBzaGFkZWQgYmFja2dyb3VuZCBib3ggaWYgd2FudF9zaGFkaW5nPXRydWUgKi8KKyAgICAgZ290byBkb25lOworICAgfQorIAorKyAgZ2ludCBtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSh2aWRlb19mcmFtZSk7CisrICBnYm9vbGVhbiBtZW1fcmRvbmx5ID0gRkFMU0U7CisrICBHc3RNZW1vcnkgKm1lbTsKKysgIEdzdEJ1ZmZlciAqb3JpZyA9IHZpZGVvX2ZyYW1lOworKworKyAgd2hpbGUgKC0tbT49MCkgeworKyAgICBtZW0gPSBnc3RfYnVmZmVyX2dldF9tZW1vcnkodmlkZW9fZnJhbWUsIG0pOworKyAgICBpZiAoR1NUX01FTU9SWV9JU19SRUFET05MWShtZW0pKSB7CisrICAgICAgbWVtX3Jkb25seSA9IFRSVUU7CisrICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgfQorKworKyAgaWYgKG1lbV9yZG9ubHkpIHsKKysgICAgLy8gc2luY2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIGp1c3QgbG9va3VwIHRoZSByZWZjb3VudCB0byBkZXRlcm1pbmUgaWYKKysgICAgLy8gYSBidWZmZXIgaXMgd3JpdGFibGUsIGFuZCBpdCB3aWxsIHVzZSBfZ3N0X2J1ZmZlcl9jb3B5KCkgd2hpY2ggZG9uJ3QKKysgICAgLy8gcGVyZm9ybSBhIGRlZXAgbWVtb3J5IGNvcHkgZXZlbiBpZiB0aGUgZmxhZyBvZiBhIG1lbW9yeSBpcyBzZXQgdG8KKysgICAgLy8gR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLiBTbywgd2UgZGV0ZWN0IHRoZSBtZW1vcnkgZmxhZyBhbmQgdXNlCisrICAgIC8vIGdzdF9idWZmZXJfY29weV9yZWdpb24gd2l0aCBHU1RfQlVGRkVSX0NPUFlfREVFUCBwYXJhbWV0ZXIgdG8gcGVyZm9ybQorKyAgICAvLyBkZWVwIG1lbW9yeSBjb3B5LiBpZiB0aGUgYWxsb2NhdG9yIG9mIGEgbWVtb3J5IGRvbid0IHN1cHBvcnQgbWVtX2NvcHkKKysgICAgLy8gaW50ZXJmYWNlLCB0aGUgaXQgd2lsbCByZXR1cm4gTlVMTCwgaWYgdGhpcyBjYXNlLCB3ZSBjYW4gdXNlCisrICAgIC8vIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHRvIGdldCBhIHNoYXJlZCBtZW1vcnkgYnVmZmVyIG9yIHRoZSBvcmlnbmFsCisrICAgIC8vIGJ1ZmZlciBpZiB0aGUgYnVmZmVyJ3MgcmVmY291bnQgaXMgMS4KKysgICAgR3N0QnVmZmVyICpuZXdfYnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAodmlkZW9fZnJhbWUsCisrICAgICAgICBHU1RfQlVGRkVSX0NPUFlfQUxMIHwgR1NUX0JVRkZFUl9DT1BZX0RFRVAsIDAsIC0xKTsKKysKKysgICAgR1NUX0RFQlVHX09CSkVDVCAob3ZlcmxheSwgImNvcHkgJXMgdmlkZW8gZnJhbWUgYnVmZmVyICVwIC0+ICVwIiwKKysgICAgICAgIGdfdHlwZV9uYW1lIChHU1RfTUlOSV9PQkpFQ1RfVFlQRSAodmlkZW9fZnJhbWUpKSwgdmlkZW9fZnJhbWUsIG5ld19idWYpOworKworKyAgICBpZiAoIW5ld19idWYpIHsKKysgICAgICAvL21heWJlIHRoZSBhbGxvY2F0b3IgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weSBpbnRlcmZhY2UsIHRoZSB3ZSBqdXN0IHVzZQorKyAgICAgIC8vZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgdG8gZ2V0IGEgd3JpdGFibGUgYnVmZmVyLgorKyAgICAgIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmICh2aWRlb19mcmFtZSk7CisrICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChuZXdfYnVmLCBHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSk7CisrICAgICAgdmlkZW9fZnJhbWUgPSBuZXdfYnVmOworKyAgICB9CisrCisrICAgIGlmICghdmlkZW9fZnJhbWUpIHsKKysgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG92ZXJsYXksICJtYWtlIHdyaXRhYmxlIGJ1ZmZlciBmYWlsZWQiKTsKKysgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisrICAgIH0KKysKKysgICAgbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkodmlkZW9fZnJhbWUpOworKyAgICB3aGlsZSAoLS1tPj0wKSB7CisrICAgICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5KHZpZGVvX2ZyYW1lLCBtKTsKKysgICAgICBHU1RfTUVNT1JZX0ZMQUdfVU5TRVQgKG1lbSwgR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZKTsKKysgICAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworKyAgfQorKworICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZvdmVybGF5LT5pbmZvLCB2aWRlb19mcmFtZSwKKyAgICAgICAgICAgR1NUX01BUF9SRUFEV1JJVEUpKQorICAgICBnb3RvIGludmFsaWRfZnJhbWU7CitAQCAtMTkxOCw2ICsxOTc0LDE4IEBAIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9wdXNoX2ZyYW1lIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LAorIAorICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOworIAorKyAgaWYgKG1lbV9yZG9ubHkgJiYgb3JpZyA9PSB2aWRlb19mcmFtZSkgeworKyAgICAvL2lmIHdlIHVzZWQgdGhlIG9yaWdpbmFsIGJ1ZmZlciBhbmQgaXQncyBtZW0gaXMgc2V0IHRvIHJlYWQgb25seSwKKysgICAgLy9yZWNvdmVyIHRoZSBtZW1vcnkgcmVhZHkgb25seSBmbGFnIHNpbmNlIHdlIHVuc2V0IGl0IGJlZm9yZQorKyAgICAvLyBnc3RfdmlkZW9fZnJhbWVfbWFwICgpCisrICAgIG0gPSBnc3RfYnVmZmVyX25fbWVtb3J5KHZpZGVvX2ZyYW1lKTsKKysgICAgd2hpbGUgKC0tbT49MCkgeworKyAgICAgIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSh2aWRlb19mcmFtZSwgbSk7CisrICAgICAgR1NUX01FTU9SWV9GTEFHUyhtZW0pIHw9IChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpOworKyAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICAgIH0KKysgIH0KKysKKyBkb25lOgorIAorICAgcmV0dXJuIGdzdF9wYWRfcHVzaCAob3ZlcmxheS0+c3JjcGFkLCB2aWRlb19mcmFtZSk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGI0NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSAyNjlmNjQyYzQ1ZDg1Y2ZkNjMwZWQ0OTA0NzhlNmJkNmI3MWE3NjdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IFR1ZSwgMTYgU2VwIDIwMTQgMDE6MDc6MTggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gdmlkZW8tZnJhbWU6IERvbid0IHJlZiBidWZmZXJzIHR3aWNlIHdoZW4gbWFwcGluZworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworaW5kZXggMDFmMjNjMC4uOGE5YWU5NiAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworQEAgLTEwNSw3ICsxMDUsNyBAQCBnc3RfdmlkZW9fZnJhbWVfbWFwX2lkIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIEdzdFZpZGVvSW5mbyAqIGluZm8sCisgICAgICAgZnJhbWUtPmRhdGFbaV0gPSBmcmFtZS0+bWFwWzBdLmRhdGEgKyBpbmZvLT5vZmZzZXRbaV07CisgICAgIH0KKyAgIH0KKy0gIGZyYW1lLT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKysgIGZyYW1lLT5idWZmZXIgPSBidWZmZXI7CisgICBpZiAoKGZsYWdzICYgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikgPT0gMCkKKyAgICAgZ3N0X2J1ZmZlcl9yZWYgKGZyYW1lLT5idWZmZXIpOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItZ3N0cGxheXNpbmstZG9uLXQtc2V0LWFzeW5jLW9mLWN1c3RvbS10ZXh0LXNpbmstdG8tZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItZ3N0cGxheXNpbmstZG9uLXQtc2V0LWFzeW5jLW9mLWN1c3RvbS10ZXh0LXNpbmstdG8tZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWMxNDZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMGE3ODU1NWVhNmM4YzJmMWVlMjdlZTQ3MDdlOGQ3YWEwMGFiN2E2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNDoxNToyNSArMDgwMAorU3ViamVjdDogW1BBVENIIDIvNF0gZ3N0cGxheXNpbms6IGRvbid0IHNldCBhc3luYyBvZiBjdXN0b20gdGV4dC1zaW5rIHRvCisgZmFsc2UKKworc2V0IGFzeW5jIHRvIGZhbHNlIGxlYWQgdG8gQS9WIHN5bmMgcHJvYmxlbSB3aGVuIHNlZWtpbmcuCit0aGUgcHJlcm9sbCBuZWVkIHVzZSBHQVAgZXZlbnQgaW5zdGVhZCBvZiBzZXQgYXN5bmMgdG8gZmFsc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk5XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jIGIvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBmNWEyZDQyLi5mYmEwMTcyCistLS0gYS9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMKK0BAIC0yNDA4LDcgKzI0MDgsNyBAQCBnZW5fdGV4dF9jaGFpbiAoR3N0UGxheVNpbmsgKiBwbGF5c2luaykKKyAgICAgICAgICAgR19UWVBFX0JPT0xFQU4pOworICAgICAgIGlmIChlbGVtKSB7CisgICAgICAgICAvKiBtYWtlIHN1cmUgdGhlIHNwYXJzZSBzdWJ0aXRsZXMgZG9uJ3QgcGFydGljaXBhdGUgaW4gdGhlIHByZXJvbGwgKi8KKy0gICAgICAgIGdfb2JqZWN0X3NldCAoZWxlbSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOworKyAgICAgICAgLy9nX29iamVjdF9zZXQgKGVsZW0sICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsYXlzaW5rLCAiYWRkaW5nIGN1c3RvbSB0ZXh0IHNpbmsiKTsKKyAgICAgICAgIGdzdF9iaW5fYWRkIChiaW4sIGNoYWluLT5zaW5rKTsKKyAgICAgICAgIC8qIE5PVEUgc3RyZWFtc3luY2hyb25pemVyIG5lZWRzIHN0cmVhbXMgZGVjb3VwbGVkICovCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItdmlkZW8tZnJhbWUtQWRkLUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2NWI1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItdmlkZW8tZnJhbWUtQWRkLUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSA0MGEyOTNkNDRkMWFlY2NmNWViOGU4NmYyM2EwYjEzNjY2MTExYzVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMTQ6Mzk6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIHZpZGVvLWZyYW1lOiBBZGQgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRgorCitUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVmZmVyIGlzIG5vdCByZWZmZWQgYW5vdGhlciB0aW1lIHdoZW4KK3N0b3JpbmcgaXQgaW4gdGhlIEdzdFZpZGVvRnJhbWUsIGtlZXBpbmcgaXQgd3JpdGFibGUgaWYgaXQgd2FzCit3cml0YWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MTE4CistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyB8ICAgIDkgKysrKysrKystCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmggfCAgIDE4ICsrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworaW5kZXggNTM3Y2Y3MC4uMDFmMjNjMCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworQEAgLTEwNiw2ICsxMDYsOSBAQCBnc3RfdmlkZW9fZnJhbWVfbWFwX2lkIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIEdzdFZpZGVvSW5mbyAqIGluZm8sCisgICAgIH0KKyAgIH0KKyAgIGZyYW1lLT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKysgIGlmICgoZmxhZ3MgJiBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSA9PSAwKQorKyAgICBnc3RfYnVmZmVyX3JlZiAoZnJhbWUtPmJ1ZmZlcik7CisrCisgICBmcmFtZS0+bWV0YSA9IG1ldGE7CisgCisgICAvKiBidWZmZXIgZmxhZ3MgZW5oYW5jZSB0aGUgZnJhbWUgZmxhZ3MgKi8KK0BAIC0xODksMTEgKzE5MiwxMyBAQCBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKKyAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgR3N0VmlkZW9NZXRhICptZXRhOworICAgZ2ludCBpOworKyAgR3N0TWFwRmxhZ3MgZmxhZ3M7CisgCisgICBnX3JldHVybl9pZl9mYWlsIChmcmFtZSAhPSBOVUxMKTsKKyAKKyAgIGJ1ZmZlciA9IGZyYW1lLT5idWZmZXI7CisgICBtZXRhID0gZnJhbWUtPm1ldGE7CisrICBmbGFncyA9IGZyYW1lLT5tYXBbMF0uZmxhZ3M7CisgCisgICBpZiAobWV0YSkgeworICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmluZm8uZmluZm8tPm5fcGxhbmVzOyBpKyspIHsKK0BAIC0yMDIsNyArMjA3LDkgQEAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwIChHc3RWaWRlb0ZyYW1lICogZnJhbWUpCisgICB9IGVsc2UgeworICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZmcmFtZS0+bWFwWzBdKTsKKyAgIH0KKy0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisrCisrICBpZiAoKGZsYWdzICYgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikgPT0gMCkKKysgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZnJhbWUtPmJ1ZmZlcik7CisgfQorIAorIC8qKgorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmgKK2luZGV4IDYyN2ZhYjAuLmY4ZTYzMDQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaAorKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmgKK0BAIC0xNDksNiArMTQ5LDI0IEBAIHR5cGVkZWYgZW51bSB7CisgICBHU1RfVklERU9fQlVGRkVSX0ZMQUdfTEFTVCAgICAgICAgPSAoR1NUX0JVRkZFUl9GTEFHX0xBU1QgPDwgOCkKKyB9IEdzdFZpZGVvQnVmZmVyRmxhZ3M7CisgCisrLyoqCisrICogR3N0VmlkZW9CdWZmZXJGbGFnczoKKysgKiBAR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRjogIERvbid0IHRha2UgYW5vdGhlciByZWZlcmVuY2Ugb2YgdGhlIGJ1ZmZlciBhbmQgc3RvcmUgaXQgaW4KKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBHc3RWaWRlb0ZyYW1lLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVmZmVyIHN0YXlzCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZSB3aGlsZSB0aGUgZnJhbWUgaXMgbWFwcGVkLCBidXQgcmVxdWlyZXMgdGhhdCB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciByZWZlcmVuY2Ugc3RheXMgdmFsaWQgdW50aWwgdGhlIGZyYW1lIGlzIHVubWFwcGVkIGFnYWluLgorKyAqIEBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTEFTVDogICAgT2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCisrICoKKysgKiBBZGRpdGlvbmFsIG1hcHBpbmcgZmxhZ3MgZm9yIGdzdF92aWRlb19mcmFtZV9tYXAoKS4KKysgKgorKyAqIFNpbmNlOiAxLjYKKysgKi8KKyt0eXBlZGVmIGVudW0geworKyAgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRiAgID0gKEdTVF9NQVBfRkxBR19MQVNUIDw8IDApLAorKyAgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX0xBU1QgICAgID0gKEdTVF9NQVBfRkxBR19MQVNUIDw8IDgpCisrICAvKiA4IG1vcmUgZmxhZ3MgcG9zc2libGUgYWZ0ZXJ3YXJkcyAqLworK30gR3N0VmlkZW9GcmFtZU1hcEZsYWdzOworKworIEdfRU5EX0RFQ0xTCisgCisgI2VuZGlmIC8qIF9fR1NUX1ZJREVPX0ZSQU1FX0hfXyAqLworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiZWJkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjI1IEBACitGcm9tIGJlNjE2M2NmYTNhMjU1NDkzZjlkNzViYWQ5NTQxY2JmZTE3MjNmZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTQ6MTc6MTAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIHNzYXBhcnNlOiBlbmhhbmNlIFNTQSB0ZXh0IGxpbmVzIHBhcnNpbmcuCisKK3NvbWUgcGFyc2VyIHdpbGwgcGFzcyBpbiB0aGUgb3JpZ2luYWwgc3NhIHRleHQgbGluZSB3aGljaCBzdGFydHMgd2l0aCAiRGlhbG9nOiIKK2FuZCB0aGVyZSdzIGFyZSBtYXliZSBtdWx0aXBsZSBEaWFsb2cgbGluZXMgaW4gb25lIGlucHV0IGJ1ZmZlci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTZdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3N1YnBhcnNlL2dzdHNzYXBhcnNlLmMgYi9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDA2ZWNlZjkuLjBhYjVkY2UKKy0tLSBhL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jCisrKysgYi9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYworQEAgLTI2MCw2ICsyNjAsNyBAQCBnc3Rfc3NhX3BhcnNlX3JlbW92ZV9vdmVycmlkZV9jb2RlcyAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQpCisgICogZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmU6CisgICogQHBhcnNlOiBjYWxsZXIgZWxlbWVudAorICAqIEB0eHQ6IHRleHQgdG8gcHVzaAorKyAqIEBzaXplOiB0ZXh0IHNpemUgbmVlZCB0byBiZSBwYXJzZQorICAqIEBzdGFydDogdGltZXN0YW1wIGZvciB0aGUgYnVmZmVyCisgICogQGR1cmF0aW9uOiBkdXJhdGlvbiBmb3IgdGhlIGJ1ZmZlcgorICAqCitAQCAtMjY5LDI3ICsyNzAsMTMzIEBAIGdzdF9zc2FfcGFyc2VfcmVtb3ZlX292ZXJyaWRlX2NvZGVzIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCkKKyAgKiBSZXR1cm5zOiByZXN1bHQgb2YgdGhlIHB1c2ggb2YgdGhlIGNyZWF0ZWQgYnVmZmVyCisgICovCisgc3RhdGljIEdzdEZsb3dSZXR1cm4KKy1nc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQsCisrZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0LCBnaW50IHNpemUsCisgICAgIEdzdENsb2NrVGltZSBzdGFydCwgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uKQorIHsKKyAgIEdzdEZsb3dSZXR1cm4gcmV0OworICAgR3N0QnVmZmVyICpidWY7CistICBnY2hhciAqdCwgKmVzY2FwZWQ7CisrICBnY2hhciAqdCwgKnRleHQsICpwLCAqZXNjYXBlZCwgKnBfc3RhcnQsICpwX2VuZDsKKyAgIGdpbnQgbnVtLCBpLCBsZW47CisrICBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSA9IEdfTUFYVUlOVDY0LCBlbmRfdGltZSA9IDA7CisgCistICBudW0gPSBhdG9pICh0eHQpOworLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUGFyc2luZyBsaW5lICMlZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCistICAgICAgbnVtLCBHU1RfVElNRV9BUkdTIChzdGFydCkpOworLQorLSAgLyogc2tpcCBhbGwgbm9uLXRleHQgZmllbGRzIGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgKi8KKysgIHAgPSB0ZXh0ID0gZ19tYWxsb2Moc2l6ZSArIDEpOworKyAgKnAgPSAnXDAnOworICAgdCA9IHR4dDsKKy0gIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKy0gICAgdCA9IHN0cmNociAodCwgJywnKTsKKysKKysgIC8qIHRoZXJlIGFyZSBtYXkgaGF2ZSBtdWx0aXBsZSBkaWFsb2d1ZSBsaW5lcyBhdCBhIHRpbWUgKi8KKysgIHdoaWxlICgqdCkgeworKyAgICAvKiBpZ25vcmUgbGVhZGluZyB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzICovCisrICAgIHdoaWxlIChpc3NwYWNlKCp0KSkKKysgICAgICB0Kys7CisrCisrICAgIC8qIGlnbm9yZSBGb3JtYXQ6IGFuZCBTdHlsZTogbGluZXMgKi8KKysgICAgaWYgKHN0cm5jbXAodCwgIkZvcm1hdDoiLCA3KSA9PSAwIHx8IHN0cm5jbXAodCwgIlN0eWxlOiIsIDYpID09IDApIHsKKysgICAgICB3aGlsZSAoKnQgIT0gJ1wwJyAmJiAqdCAhPSAnXG4nKSB7CisrICAgICAgICB0Kys7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICgqdCA9PSAnXDAnKQorKyAgICAgIGJyZWFrOworKworKyAgICAvKiBjb250aW51ZSB3aXRoIG5leHQgbGluZSAqLworKyAgICBpZiAoKnQgPT0gJ1xuJykgeworKyAgICAgIHQrKzsKKysgICAgICBjb250aW51ZTsKKysgICAgfQorKworKyAgICBpZihzdHJuY21wKHQsICJEaWFsb2d1ZToiLCA5KSAhPSAwKSB7CisrICAgICAgLyogbm90IHN0YXJ0ZWQgd2l0aCAiRGlhbG9ndWU6IiwgaXQgbXVzdCBiZSBhIGxpbmUgdHJpbW1lZCBieSBkZW11eGVyICovCisrICAgICAgbnVtID0gYXRvaSAodCk7CisrICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUGFyc2luZyBsaW5lICMlZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCisrICAgICAgICAgIG51bSwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpKTsKKysKKysgICAgICAvKiBza2lwIGFsbCBub24tdGV4dCBmaWVsZHMgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCAqLworKyAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKysgICAgICAgIHQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgICBpZiAodCA9PSBOVUxMKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgICsrdDsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgLyogc3RhcnRlZCB3aXRoICJEaWFsb2d1ZToiLCB1cGRhdGUgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiAqLworKyAgICAgIC8qIHRpbWUgZm9ybWF0IGFyZSBsaWtlIERpYWxvZzpNYXJrLDA6MDA6MDEuMDIsMDowMDowMy4wNCx4eCx4eHgsLi4uICovCisrICAgICAgZ3VpbnQgaG91ciwgbWluLCBzZWMsIG1zZWMsIGxlbjsKKysgICAgICBHc3RDbG9ja1RpbWUgdG1wOworKyAgICAgIGdjaGFyIHRfc3RyWzEyXSA9IHswfTsKKysKKysgICAgICAvKiBmaW5kIHRoZSBmaXJzdCAnLCcgKi8KKysgICAgICBwX3N0YXJ0ID0gc3RyY2hyICh0LCAnLCcpOworKyAgICAgIGlmIChwX3N0YXJ0KQorKyAgICAgICAgcF9lbmQgPSBzdHJjaHIgKCsrcF9zdGFydCwgJywnKTsKKysKKysgICAgICBpZiAocF9zdGFydCAmJiBwX2VuZCkgeworKyAgICAgICAgLyogY29weSB0ZXh0IGJldHdlZW4gZmlyc3QgJywnIGFuZCBzZWNvbmQgJywnICovCisrICAgICAgICBzdHJuY3B5KHRfc3RyLCBwX3N0YXJ0LCBwX2VuZCAtIHBfc3RhcnQpOworKyAgICAgICAgaWYgKHNzY2FuZiAodF9zdHIsICIldToldToldS4ldSIsICZob3VyLCAmbWluLCAmc2VjLCAmbXNlYykgPT0gNCkgeworKyAgICAgICAgICB0bXAgPSAoKGhvdXIqMzYwMCkgKyAobWluKjYwKSArIHNlYykgKiBHU1RfU0VDT05EICsgbXNlYypHU1RfTVNFQ09ORDsKKysgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJHZXQgc3RhcnQgdGltZTolMDJkOiUwMmQ6JTAyZDolMDNkXG4iLAorKyAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMsIG1zZWMpOworKyAgICAgICAgICBpZiAoc3RhcnRfdGltZSA+IHRtcCkKKysgICAgICAgICAgICBzdGFydF90aW1lID0gdG1wOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKKysgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2Ugc3NhIHN0YXJ0IHRpbWVzdGFtcCBzdHJpbmcgOiVzIiwgdF9zdHIpOworKyAgICAgICAgfQorKworKyAgICAgICAgcF9zdGFydCA9IHBfZW5kOworKyAgICAgICAgcF9lbmQgPSBzdHJjaHIgKCsrcF9zdGFydCwgJywnKTsKKysgICAgICAgIGlmIChwX2VuZCkgeworKyAgICAgICAgICAvKiBjb3B5IHRleHQgYmV0d2VlbiBzZWNvbmQgJywnIGFuZCB0aGlyZCAnLCcgKi8KKysgICAgICAgICAgc3RybmNweSh0X3N0ciwgcF9zdGFydCwgcF9lbmQgLSBwX3N0YXJ0KTsKKysgICAgICAgICAgaWYgKHNzY2FuZiAodF9zdHIsICIldToldToldS4ldSIsICZob3VyLCAmbWluLCAmc2VjLCAmbXNlYykgPT0gNCkgeworKyAgICAgICAgICAgIHRtcCA9ICgoaG91ciozNjAwKSArIChtaW4qNjApICsgc2VjKSpHU1RfU0VDT05EICsgbXNlYypHU1RfTVNFQ09ORDsKKysgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhcnNlLCAiR2V0IGVuZCB0aW1lOiUwMmQ6JTAyZDolMDJkOiUwM2RcbiIsCisrICAgICAgICAgICAgICAgIGhvdXIsIG1pbiwgc2VjLCBtc2VjKTsKKysgICAgICAgICAgICBpZiAoZW5kX3RpbWUgPCB0bXApCisrICAgICAgICAgICAgICBlbmRfdGltZSA9IHRtcDsKKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAorKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIHNzYSBlbmQgdGltZXN0YW1wIHN0cmluZyA6JXMiLCB0X3N0cik7CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICB9CisrCisrICAgICAgLyogbm93IHNraXAgYWxsIG5vbi10ZXh0IGZpZWxkcyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0ICovCisrICAgICAgZm9yIChpID0gMDsgaSA8PSA4OyArK2kpIHsKKysgICAgICAgIHQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgICBpZiAodCA9PSBOVUxMKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgICsrdDsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgLyogbGluZSBlbmQgYmVmb3JlIGV4cGVjdGVkIG51bWJlciBvZiAnLCcsIG5vdCBhIERpYWxvZ3VlIGxpbmUgKi8KKyAgICAgaWYgKHQgPT0gTlVMTCkKKy0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CistICAgICsrdDsKKysgICAgICBicmVhazsKKysKKysgICAgLyogaWYgbm90IHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHByZXZpb3VzIGxpbmUgaXMgJ1wwJywKKysgICAgICogdGhlbiByZXBsYWNlIGl0IHdpdGggJ1xOJyAqLworKyAgICBpZiAocCAhPSB0ZXh0ICYmICpwID09ICdcMCcpIHsKKysgICAgICAqcCsrID0gJ1xcJzsKKysgICAgICAqcCsrID0gJ04nOworKyAgICB9CisrCisrICAgIC8qIGNvcHkgYWxsIGFjdHVhbCB0ZXh0IG9mIHRoaXMgbGluZSAqLworKyAgICB3aGlsZSAoKCp0ICE9ICdcMCcpICYmICgqdCAhPSAnXG4nKSkKKysgICAgICAqcCsrID0gKnQrKzsKKysKKysgICAgLyogYWRkIGEgdGVybWluYXRvciBhdCB0aGUgZW5kICovCisrICAgICpwID0gJ1wwJzsKKysgIH0KKysKKysgIC8qIG5vdCB2YWxpZCB0ZXh0IGZvdW5kIGluIHRoaXMgYnVmZmVyIHJldHVybiBPSyB0byBsZXQgY2FsbGVyIHVucmVmIGJ1ZmZlciAqLworKyAgaWYgKHN0cmxlbih0ZXh0KSA8PSAwKSB7CisrICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJOb3QgdmFsaWQgdGV4dCBmb3VuZCBpbiB0aGlzIGJ1ZmZlclxuIik7CisrICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgIH0KKyAKKysgIHQgPSB0ZXh0OworICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiVGV4dCA6ICVzIiwgdCk7CisgCisgICBpZiAoZ3N0X3NzYV9wYXJzZV9yZW1vdmVfb3ZlcnJpZGVfY29kZXMgKHBhcnNlLCB0KSkgeworQEAgLTMwNywxMyArNDE0LDIyIEBAIGdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCwKKyAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBlc2NhcGVkLCBsZW4gKyAxKTsKKyAgIGdzdF9idWZmZXJfc2V0X3NpemUgKGJ1ZiwgbGVuKTsKKyAgIGdfZnJlZSAoZXNjYXBlZCk7CisrICBnX2ZyZWUodCk7CisrCisrICBpZiAoc3RhcnRfdGltZSAhPSBHX01BWFVJTlQ2NCkKKysgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBzdGFydF90aW1lOworKyAgZWxzZQorKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHN0YXJ0OworIAorLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBzdGFydDsKKy0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKKysgIGlmIChlbmRfdGltZSA+IHN0YXJ0X3RpbWUpCisrICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBlbmRfdGltZSAtIHN0YXJ0X3RpbWU7CisrICBlbHNlCisrICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKKyAKKyAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIlB1c2hpbmcgYnVmZmVyIHdpdGggdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVAorLSAgICAgICIgYW5kIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLAorLSAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7CisrICAgICAgIiBhbmQgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULAorKyAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSwKKysgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSk7CisgCisgICByZXQgPSBnc3RfcGFkX3B1c2ggKHBhcnNlLT5zcmNwYWQsIGJ1Zik7CisgCitAQCAtMzMzLDYgKzQ0OSw3IEBAIGdzdF9zc2FfcGFyc2VfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgR3N0Q2xvY2tUaW1lIHRzOworICAgZ2NoYXIgKnR4dDsKKyAgIEdzdE1hcEluZm8gbWFwOworKyAgZ2ludCBzaXplOworIAorICAgaWYgKEdfVU5MSUtFTFkgKCFwYXJzZS0+ZnJhbWVkKSkKKyAgICAgZ290byBub3RfZnJhbWVkOworQEAgLTM1MCwxMyArNDY3LDE0IEBAIGdzdF9zc2FfcGFyc2VfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgLyogbWFrZSBkb3VibGUtc3VyZSBpdCdzIDAtdGVybWluYXRlZCBhbmQgYWxsICovCisgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOworICAgdHh0ID0gZ19zdHJuZHVwICgoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplKTsKKysgIHNpemUgPSBtYXAuc2l6ZTsKKyAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7CisgCisgICBpZiAodHh0ID09IE5VTEwpCisgICAgIGdvdG8gZW1wdHlfdGV4dDsKKyAKKyAgIHRzID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7CistICByZXQgPSBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAocGFyc2UsIHR4dCwgdHMsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpOworKyAgcmV0ID0gZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKHBhcnNlLCB0eHQsIHNpemUsIHRzLCBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKTsKKyAKKyAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRzKSkgeworICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJiZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSAzYTdjZGNkZmM5YzViMGQyMDM5NGZlNTFiM2I4Y2RhMjM5MzFjYTZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMTQ6NDE6MDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIHZpZGVvZmlsdGVyOiBVc2UgbmV3IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MTE4CistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYyB8ICAgMjMgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMKK2luZGV4IGUxZmEyYzEuLjg3NGIyZTggMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMKK0BAIC0yNjAsMjMgKzI2MCwxNSBAQCBnc3RfdmlkZW9fZmlsdGVyX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBpbmJ1ZiwKKyAgIGlmIChmY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSkgeworICAgICBHc3RWaWRlb0ZyYW1lIGluX2ZyYW1lLCBvdXRfZnJhbWU7CisgCistICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmluX2ZyYW1lLCAmZmlsdGVyLT5pbl9pbmZvLCBpbmJ1ZiwgR1NUX01BUF9SRUFEKSkKKysgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmaW5fZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGluYnVmLAorKyAgICAgICAgICAgIEdTVF9NQVBfUkVBRCB8IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpKQorICAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7CisgCisgICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJm91dF9mcmFtZSwgJmZpbHRlci0+b3V0X2luZm8sIG91dGJ1ZiwKKy0gICAgICAgICAgICBHU1RfTUFQX1dSSVRFKSkKKysgICAgICAgICAgICBHU1RfTUFQX1dSSVRFIHwgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikpCisgICAgICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKKyAKKy0gICAgLyogR3N0VmlkZW9GcmFtZSBoYXMgYW5vdGhlciByZWZlcmVuY2UsIHNvIHRoZSBidWZmZXIgbG9va3MgdW53cml0ZWFibGUsCistICAgICAqIG1lYW5pbmcgdGhhdCB3ZSBjYW4ndCBhdHRhY2ggYW55IG1ldGFzIG9yIGFueXRoaW5nIHRvIGl0LiBPdGhlcgorLSAgICAgKiBtYXAoKSBmdW5jdGlvbnMgbGlrZSBnc3RfYnVmZmVyX21hcCgpIGRvbid0IGdldCBhbm90aGVyIHJlZmVyZW5jZQorLSAgICAgKiBvZiB0aGUgYnVmZmVyIGFuZCBleHBlY3QgdGhlIGJ1ZmZlciByZWZlcmVuY2UgdG8gYmUga2VwdCB1bnRpbAorLSAgICAgKiB0aGUgYnVmZmVyIGlzIHVubWFwcGVkIGFnYWluLiAqLworLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7CistICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7CisgICAgIHJlcyA9IGZjbGFzcy0+dHJhbnNmb3JtX2ZyYW1lIChmaWx0ZXIsICZpbl9mcmFtZSwgJm91dF9mcmFtZSk7CistICAgIGdzdF9idWZmZXJfcmVmIChpbmJ1Zik7CistICAgIGdzdF9idWZmZXJfcmVmIChvdXRidWYpOworIAorICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZvdXRfZnJhbWUpOworICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZpbl9mcmFtZSk7CitAQCAtMzE3LDcgKzMwOSw3IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKKyAgICAgR3N0TWFwRmxhZ3MgZmxhZ3M7CisgCistICAgIGZsYWdzID0gR1NUX01BUF9SRUFEOworKyAgICBmbGFncyA9IEdTVF9NQVBfUkVBRCB8IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUY7CisgCisgICAgIGlmICghZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoICh0cmFucykpCisgICAgICAgZmxhZ3MgfD0gR1NUX01BUF9XUklURTsKK0BAIC0zMjUsMTQgKzMxNyw3IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGJ1ZiwgZmxhZ3MpKQorICAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7CisgCistICAgIC8qIEdzdFZpZGVvRnJhbWUgaGFzIGFub3RoZXIgcmVmZXJlbmNlLCBzbyB0aGUgYnVmZmVyIGxvb2tzIHVud3JpdGVhYmxlLAorLSAgICAgKiBtZWFuaW5nIHRoYXQgd2UgY2FuJ3QgYXR0YWNoIGFueSBtZXRhcyBvciBhbnl0aGluZyB0byBpdC4gT3RoZXIKKy0gICAgICogbWFwKCkgZnVuY3Rpb25zIGxpa2UgZ3N0X2J1ZmZlcl9tYXAoKSBkb24ndCBnZXQgYW5vdGhlciByZWZlcmVuY2UKKy0gICAgICogb2YgdGhlIGJ1ZmZlciBhbmQgZXhwZWN0IHRoZSBidWZmZXIgcmVmZXJlbmNlIHRvIGJlIGtlcHQgdW50aWwKKy0gICAgICogdGhlIGJ1ZmZlciBpcyB1bm1hcHBlZCBhZ2Fpbi4gKi8KKy0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgICAgcmVzID0gZmNsYXNzLT50cmFuc2Zvcm1fZnJhbWVfaXAgKGZpbHRlciwgJmZyYW1lKTsKKy0gICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7CisgCisgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKKyAgIH0gZWxzZSB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTM5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSBlZDA5YzhmZDJjOWMyYjUzODRiNzJjYzcwYWYzNzI4YmU2Njk0ZTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE0OjIwOjI2ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNC80XSBzdWJwYXJzZTogc2V0IG5lZWRfc2VnbWVudCBhZnRlciBzaW5rIHBhZCByZWNlaXZlZAorIEdTVF9FVkVOVF9TRUdNRU5UCisKK3N1YnBhcnNlIHdvcmtzIGluIHB1c2ggbW9kZSwgY2hhaW4gZnVuY2l0b24gd2lsbCBiZSBjYWxsZWQgb25jZQordXAgc3RyZWFtIGVsZW1lbnQgZmluaXNoZWQgdGhlIHNlZWtpbmcgYW5kIGZsdXNoaW5nLgoraWYgc2V0IG5lZWRfc2VnbWVudCBmbGFnIGluIHNyYyBwYWQgZXZlbnQgaGFuZGxlciwgdGhlIHNlZ21lbnQKK2V2ZW50IHdpbGwgYmUgcHVzaGVkIGVhcmxpZXIsIHJlc3VsdCBpbiB0aGUgc3VidGl0bGUgdGV4dCB3aWxsCitiZSBzZW5kIG91dCB0byBkb3duIHN0cmVhbSBmcm9tIHRoZSBiZWdpbm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk4XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jIGIvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBiNTY1ZTkzLi43NzQxY2NjCistLS0gYS9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYworKysrIGIvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMKK0BAIC0yNjYsMjIgKzI2NiwyMCBAQCBnc3Rfc3ViX3BhcnNlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgICBnb3RvIGJlYWNoOworICAgICAgIH0KKyAKKysgICAgICAvKiBBcHBseSB0aGUgc2VlayB0byBvdXIgc2VnbWVudCAqLworKyAgICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWxmLT5zZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAorKyAgICAgICAgICBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKysKKysgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAic2VnbWVudCBhZnRlciBzZWVrOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisrICAgICAgICAgICZzZWxmLT5zZWdtZW50KTsKKysKKyAgICAgICAvKiBDb252ZXJ0IHRoYXQgc2VlayB0byBhIHNlZWtpbmcgaW4gYnl0ZXMgYXQgcG9zaXRpb24gMCwKKyAgICAgICAgICBGSVhNRTogY291bGQgdXNlIGFuIGluZGV4ICovCisgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zaW5rcGFkLAorICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIEdTVF9GT1JNQVRfQllURVMsIGZsYWdzLAorICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCkpOworIAorLSAgICAgIGlmIChyZXQpIHsKKy0gICAgICAgIC8qIEFwcGx5IHRoZSBzZWVrIHRvIG91ciBzZWdtZW50ICovCistICAgICAgICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VsZi0+c2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKKy0gICAgICAgICAgICBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKy0KKy0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzZWdtZW50IGFmdGVyIHNlZWs6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKKy0gICAgICAgICAgICAmc2VsZi0+c2VnbWVudCk7CistCistICAgICAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBUUlVFOworLSAgICAgIH0gZWxzZSB7CisrICAgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgInNlZWsgdG8gMCBieXRlcyBmYWlsZWQiKTsKKyAgICAgICB9CisgCitAQCAtMTYzMiw4ICsxNjMwLDEwIEBAIGdzdF9zdWJfcGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmcyk7CisgICAgICAgaWYgKHMtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCisgICAgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlbGYtPnNlZ21lbnQpOworLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJuZXdzZWdtZW50ICglcykiLAorLSAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWxmLT5zZWdtZW50LmZvcm1hdCkpOworKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJuZXdzZWdtZW50ICglcykgJSIgR1NUX1NFR01FTlRfRk9STUFULAorKyAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWxmLT5zZWdtZW50LmZvcm1hdCksICZzZWxmLT5zZWdtZW50KTsKKysKKysgICAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBUUlVFOworIAorICAgICAgIC8qIGlmIG5vdCB0aW1lIGZvcm1hdCwgd2UnbGwgZWl0aGVyIHN0YXJ0IHdpdGggYSAwIHRpbWVzdGFtcCBhbnl3YXkgb3IKKyAgICAgICAgKiBpdCdzIGZvbGxvd2luZyBhIHNlZWsgaW4gd2hpY2ggY2FzZSB3ZSdsbCBoYXZlIHNhdmVkIHRoZSByZXF1ZXN0ZWQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQtaWYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQtaWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1NWRlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGI2MDhkMDI3ZmZmNmVmYzJkMTk4OGViZjE2OWNiZTNiMmI0NGE2MWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDggTWF5IDIwMTQgMTI6MDE6MTcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRU5HUjAwMzEyMDM0OiBkbyBub3QgY2hhbmdlIGVvcyBldmVudCB0byBnYXAgZXZlbnQgaWYgbm8KKyBkYXRhIGhhcyBwYXNzZWQgdG8gc3RyZWFtc3luY2hyb25pemVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MDc0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgfCAgICA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggMzk5N2QxYi4uM2UxN2M1NSAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDg4LDEyICs0ODgsMTEgQEAgZ3N0X3N0cmVhbV9zeW5jaHJvbml6ZXJfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgICAgICB9CisgICAgICAgICBnX3NsaXN0X2ZyZWUgKHBhZHMpOworICAgICAgIH0gZWxzZSB7CistICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBzb21ldGhpbmcgdG8gcmVwbGFjZSBFT1MKKy0gICAgICAgICAqIGZvciBwcmVyb2xsIHB1cnBvc2VzICovCisrICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBFT1MgZXZlbnQgKi8KKyAgICAgICAgIGlmICghc2Vlbl9kYXRhKSB7CisgICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CisgCistICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZ2FwICh0aW1lc3RhbXAsIEdTVF9DTE9DS19USU1FX05PTkUpOworKyAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKyAgICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyNGJjN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK2NvbW1pdCBmOTUzNjU0NGY1YWQxODJiNGY3OGQwMTQzZDFkYWE0NWRkNjRlNjI0CitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgOSAxNzozNzo0MyAyMDE0ICswODAwCisKK1tnc3RzdHJlYW1zeW5jaHJvbml6ZXJdIHNlbmQgRU9TIGV2ZW50IGluc3RlcmQgb2YgR0FQIGV2ZW50IGFzIEdBUAorZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUgZGlmZmVyZW50IGR1cmF0aW9uLgorICAgIAorc2VuZCBFT1MgZXZlbnQgaW5zdGVyZCBvZiBHQVAgZXZlbnQgYXMgR0FQIGV2ZW50IGhhcyBpc3N1ZSB3aGVuIEEvViBoYXZlIGRpZmZlcmVudCBkdXJhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY2NTVdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK2luZGV4IDNlMTdjNTUuLmZmNDJkNzIgMTAwNjQ0CistLS0gYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworQEAgLTQ4OCwxOSArNDg4LDI0IEBAIGdzdF9zdHJlYW1fc3luY2hyb25pemVyX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAorICAgICAgICAgfQorICAgICAgICAgZ19zbGlzdF9mcmVlIChwYWRzKTsKKyAgICAgICB9IGVsc2UgeworLSAgICAgICAgLyogaWYgRU9TLCBidXQgbm8gZGF0YSBoYXMgcGFzc2VkLCB0aGVuIHNlbmQgRU9TIGV2ZW50ICovCisrICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBzb21ldGhpbmcgdG8gcmVwbGFjZSBFT1MKKysgICAgICAgICAqIGZvciBwcmVyb2xsIHB1cnBvc2VzICovCisgICAgICAgICBpZiAoIXNlZW5fZGF0YSkgeworLSAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworKyAgICAgICAgICBHc3RFdmVudCAqZW9zX2V2ZW50OworIAorLSAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKy0gICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisrICAgICAgICAgIC8qIEZJWE1FOiBjaGFuZ2UgdG8gRU9TIGV2ZW50IGFzIEdBUCBldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZQorKyAgICAgICAgICAgKiBkaWZmZXJlbnQgZHVyYXRpb24gKi8KKysgICAgICAgICAgZW9zX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisrICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBlb3NfZXZlbnQpOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgR3N0RXZlbnQgKmdhcF9ldmVudDsKKysgICAgICAgICAgR3N0RXZlbnQgKmVvc19ldmVudDsKKyAKKyAgICAgICAgICAgLyogRklYTUU6IEFsc28gc2VuZCBhIEdBUCBldmVudCB0byBsZXQgYXVkaW8gc2lua3Mgc3RhcnQgdGhlaXIKKyAgICAgICAgICAgICogY2xvY2sgaW4gY2FzZSB0aGV5IGRpZCBub3QgaGF2ZSBlbm91Z2ggZGF0YSB5ZXQgKi8KKy0gICAgICAgICAgZ2FwX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19nYXAgKHRpbWVzdGFtcCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CistICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnYXBfZXZlbnQpOworKyAgICAgICAgICAvKiBGSVhNRTogY2hhbmdlIHRvIEVPUyBldmVudCBhcyBHQVAgZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUKKysgICAgICAgICAgICogZGlmZmVyZW50IGR1cmF0aW9uICovCisrICAgICAgICAgIGVvc19ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworKyAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZW9zX2V2ZW50KTsKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczMWJlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2NvbW1pdCAzZjcwNTJhYWM1ZTAxMThhOWE5ZTA5ZmZmMmY2NTA5MWJlNDQ4OTcyCitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgMjMgMTM6MzU6MTMgMjAxNCArMDgwMAorCitbc3RyZWFtc3luY2hyb25pemVyXSBPbmUgc3RyZWFtIGNhbiBmaW5pc2ggcGxheWJhY2suCisgIAorQXMgY2hhbmdlZCBHQVAgZXZlbnQgRU9TIGV2ZW50LCBzbyBFT1Mgd2lsbCBzZW5kIG1vcmUgdGltZXMsIHdoaWNoIHdpbGwKK2NhdXNlIHNlbmQgZnVuY3Rpb24gcmV0dXJuIGVycm9yLgorU3RyZWFtc3luY2hyb25pemVyIHdpbGwgZG9u4oCZdCBzZW5kIHNlY29uZCB0cmFjayBFT1MgZXZlbnQgaWYgc2VuZCB0aGUKK2ZpcnN0IHRyYWNrIEVPUyByZXR1cm4gZmFpbC4gRml4ZWQgYnkgaWdub3JlIHRoZSByZXR1cm4gZXJyb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NjU1XQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgYjA2NDk4QGZyZWVzY2FsZS5jb20KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggZmY0MmQ3Mi4uZDE3MzJjMyAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDgyLDcgKzQ4MiwxMCBAQCBnc3Rfc3RyZWFtX3N5bmNocm9uaXplcl9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKKyAgICAgICAgIHdoaWxlIChlcGFkKSB7CisgICAgICAgICAgIHBhZCA9IGVwYWQtPmRhdGE7CisgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlB1c2hpbmcgRU9TIik7CistICAgICAgICAgIHJldCA9IHJldCAmJiBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworKyAgICAgICAgICAvKiBGSVhNRTogcmVtb3ZlIGVycm9yIGNoZWNrIGFzIEdBUCBjaGFuZ2VkIHRvIEVPUyB3aWxsIHNlbmQgRU9TCisrICAgICAgICAgICAqIG1vcmUgdGltZXMsIHdoaWNoIHdpbGwgY2F1c2UgcmV0dXJuIGVycm9yIGFuZCB0aGVuIGRvbid0IHNlbmQKKysgICAgICAgICAgICogRU9TIGV2ZW50IHRvIGZvbGxvd2luZyB0cmFja3MuICovCisrICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgICAgICAgICAgIGVwYWQgPSBnX3NsaXN0X25leHQgKGVwYWQpOworICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1NjcxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA1NDBlMDJjOTJjNzVlMDhiOTAzMjY4NjNkYzc4N2ZhNWNhZGY5ZGE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IEZyaSwgMTMgTWFyIDIwMTUgMTg6MDQ6MzEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZW5jb2RlYmluOiBOZWVkIG1vcmUgYnVmZmVycyBpbiBvdXRwdXQgcXVldWUgZm9yIGJldHRlcgorIHBlcmZvcm1hbmNlCisKK05lZWQgbW9yZSBidWZmZXJzIGluIG91dHB1dCBxdWV1ZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTkxXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorLS0tCisgZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jIHwgICAgMyArLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMgYi9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKK2luZGV4IDY3MjhlNTguLjMyZGFhZTQgMTAwNjQ0CistLS0gYS9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKKysrKyBiL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYworQEAgLTExMzgsOCArMTEzOCw3IEBAIF9jcmVhdGVfc3RyZWFtX2dyb3VwIChHc3RFbmNvZGVCaW4gKiBlYmluLCBHc3RFbmNvZGluZ1Byb2ZpbGUgKiBzcHJvZiwKKyAgICAqIFdlIG9ubHkgdXNlIGEgMWJ1ZmZlciBsb25nIHF1ZXVlIGhlcmUsIHRoZSBhY3R1YWwgcXVldWVpbmcgd2lsbCBiZSBkb25lCisgICAgKiBpbiB0aGUgaW5wdXQgcXVldWUgKi8KKyAgIGxhc3QgPSBzZ3JvdXAtPm91dHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKKy0gIGdfb2JqZWN0X3NldCAoc2dyb3VwLT5vdXRxdWV1ZSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQzMikgMSwKKy0gICAgICAibWF4LXNpemUtYnl0ZXMiLCAoZ3VpbnQzMikgMCwgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKKysgIGdfb2JqZWN0X3NldCAoc2dyb3VwLT5vdXRxdWV1ZSwgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKKyAgICAgICAic2lsZW50IiwgVFJVRSwgTlVMTCk7CisgCisgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoZWJpbiksIHNncm91cC0+b3V0cXVldWUpOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWYzZjc1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0F1dGhvcjogTHlvbiBXYW5nIDxiMTI2OTZAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCA5IDE3OjM3OjQzIDIwMTQgKzA4MDAKKworW2lkM3YyZnJhbWVzXSBCdWcgZml4IGZvciBpZDNkZW11eCBpc3N1ZQorCitGaXggdGhlIGlzc3VlIHRoYXQgaWQzIHRhZ3MgdXRmMTYgY2hhcmF0ZXJzIGNhbm5vdCBiZSBleHRyZWFjdGVkIGluIGlkM2RlbXV4Cit3aGVuIEkgdHJpZWQgdG8gZ2V0IHRoZSBpZDN2MiB0YWcgc3VjaCBhcyBUSVQyLCBUQUxCIGV0Yy4gaXQgd2lsbCByZXR1cm4gZXh0cmFjCitmYWlsZWQuCisKK0NoZWNrZWQgaW4gaWQzdjJmcmFtZS5jLCAgV2hlbiBwYXJzZSB0aGUgVVRGLTE2IHN0cmVhbXMsIGl0IHVzZWQgZ19jb252ZXJ0KCkgdG8KK2NvbnZlcnQgdGhlIGJ1ZmZlciBmcm9tIFVURi0xNiB0byBVVEYtOCwgaG93ZXZlciBpdCB3aWxsIHJldHVybiBlcnIgdGhhdCB0aGlzCitjb252ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2hpY2ggY2F1c2UgdGhlIGV4dHJhY3Rpb24gZmFpbGVkIHdpdGggdGhlc2UgVVRGLTE2CitjaGFyYWN0ZXJzLgorCitJbiB0aGUgcGF0Y2gsIHVzZSBnX3V0ZjE2X3RvX3V0ZjgoKSBpbnN0ZWFkIG9mIGdfY29udmVydCwgd2hpY2ggY2FuIGNvbnZlcnQgdGhlCitjaGFyYWN0ZXIgZm9ybWF0IHN1Y2Nlc3NmdWxseS4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTE0NAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogTHlvbiBXYW5nIDxiMTI2OTZAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYyBiL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDM3ODVjMmEuLjdiOWQ4YWMKKy0tLSBhL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jCitAQCAtMTA1NywxNCArMTA1NywxNyBAQCBwYXJzZV9pbnNlcnRfc3RyaW5nX2ZpZWxkIChndWludDggZW5jb2RpbmcsIGdjaGFyICogZGF0YSwgZ2ludCBkYXRhX3NpemUsCisgICAgICAgICBkYXRhX3NpemUgLT0gMjsKKyAgICAgICB9CisgCistICAgICAgZmllbGQgPSBnX2NvbnZlcnQgKGRhdGEsIGRhdGFfc2l6ZSwgIlVURi04IiwgaW5fZW5jb2RlLCBOVUxMLCBOVUxMLCBOVUxMKTsKKy0KKy0gICAgICBpZiAoZmllbGQgPT0gTlVMTCB8fCBnX3V0ZjhfdmFsaWRhdGUgKGZpZWxkLCAtMSwgTlVMTCkgPT0gRkFMU0UpIHsKKy0gICAgICAgIC8qIEFzIGEgZmFsbGJhY2ssIHRyeSBpbnRlcnByZXRpbmcgVVRGLTE2IGluIHRoZSBvdGhlciBlbmRpYW5uZXNzICovCistICAgICAgICBpZiAoaW5fZW5jb2RlID09IHV0ZjE2YmVlbmMpCistICAgICAgICAgIGZpZWxkID0gZ19jb252ZXJ0IChkYXRhLCBkYXRhX3NpemUsICJVVEYtOCIsIHV0ZjE2bGVlbmMsCistICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgICBpZiAoaW5fZW5jb2RlID09IHV0ZjE2YmVlbmMpIHsKKysgICAgICAgICAgIGd1bmljaGFyMiAqZGF0YV91dGYxNjsKKysgICAgICAgICAgIGd1aW50IGk7CisrICAgICAgICAgICBkYXRhX3V0ZjE2ID0gIChndW5pY2hhcjIgKikgZGF0YTsKKysgICAgICAgICAgZm9yIChpPTA7IGk8KGRhdGFfc2l6ZT4+MSk7IGkrKykgeworKyAgICAgICAgICAgIGRhdGFfdXRmMTZbaV0gPSBHVUlOVDE2X1RPX0xFIChkYXRhX3V0ZjE2W2ldKTsKKysgICAgICAgICAgfQorICAgICAgIH0KKysgICAgICAvL2ZpZWxkID0gZ19jb252ZXJ0IChkYXRhLCBkYXRhX3NpemUsICJVVEYtOCIsIGluX2VuY29kZSwgTlVMTCwgTlVMTCwgTlVMTCk7CisrICAgICAgIGZpZWxkID0gZ191dGYxNl90b191dGY4KChndW5pY2hhcjIgKilkYXRhLCAoZ2xvbmcpKGRhdGFfc2l6ZT4+MSksIE5VTEwsIE5VTEwsIE5VTEwpOworKworICAgICB9CisgCisgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODRhYmJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGFmMGRhYzI2ZjYyYWFjZWI0YmYyNjY3MjA5MTE5NTM3OTNlMGZjNWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDE0IE1heSAyMDE0IDEwOjE2OjIwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEVOR1IwMDMxMjUxNTogZ2V0IGNhcHMgZnJvbSBzcmMgcGFkIHdoZW4gcXVlcnkgY2FwcworCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzEyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMgYi9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCA5YjZjNDc4Li5hZTIyOTRhCistLS0gYS9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKKysrKyBiL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworQEAgLTE3MDgsNiArMTcwOCwxOSBAQCBnc3RfdGFnX2RlbXV4X3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCisgICAgICAgfQorICAgICAgIGJyZWFrOworICAgICB9CisrICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6CisrICAgIHsKKysKKysgICAgICAvKiBXZSBjYW4gaGlqYWNrIGNhcHMgcXVlcnkgaWYgd2UgdHlwZWZpbmQgYWxyZWFkeSAqLworKyAgICAgIGlmIChkZW11eC0+cHJpdi0+c3JjX2NhcHMpIHsKKysgICAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBkZW11eC0+cHJpdi0+c3JjX2NhcHMpOworKyAgICAgICAgcmVzID0gVFJVRTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKworICAgICBkZWZhdWx0OgorICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKKyAgICAgICBicmVhazsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzM2NlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGJjYjJiOGI2ZjQ5ZTdjNjYxMjRhNGY1ZTA3ZGVhODI5ZDVlYmZlNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMeW9uIFdhbmcgPGx5b24ud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCAxNSBEZWMgMjAxNCAxNjo1MjowNyArMDgwMAorU3ViamVjdDogW1BBVENIXSBoYW5kbGUgYXVkaW8vdmlkZW8gZGVjb2RlciBlcnJvcgorCitXaGVuIHRoZXJlIGlzIGlucHV0IGRhdGEgYW5kIG5vIG91dHB1dCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaXQgd2lsbAorc2VuZCBHU1RfRUxFTUVOVF9FUlJPUiwgU28gdGhlIGNsaXBzIHBsYXlpbmcgd2lsbCBxdWl0LgorSG93ZXZlciwgaWYgb25seSBvbmUgb2YgdGhlIHRyYWNrcyBpcyBjb3JydXB0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHF1aXQgb3RoZXIKK3RyYWNrcyBwbGF5aW5nLgorCitUaGUgcGF0Y2ggY29tbWVudHMgdGhlIEdTVF9FTEVNRU5UX0VSUk9SKCkgYW5kIGp1c3QgYWRkIEdTVF9FUlJPUl9PQkpFQ1QoKQoraW5mb3JtYXRpb24gaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE1NDJdCisKK1NpZ25lZC1vZmYtYnk6IEx5b24gV2FuZyA8bHlvbi53YW5nQGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgfCAgICA1ICsrKy0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIHwgICAgNSArKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGMyZTdhMjguLjg5MWRmMGEKKy0tLSBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitAQCAtMjEyMyw5ICsyMTIzLDEwIEBAIGdzdF9hdWRpb19kZWNvZGVyX3NpbmtfZXZlbnRmdW5jIChHc3RBdWRpb0RlY29kZXIgKiBkZWMsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgR1NUX0FVRElPX0RFQ09ERVJfU1RSRUFNX1VOTE9DSyAoZGVjKTsKKyAKKyAgICAgICBpZiAoZGVjLT5wcml2LT5jdHguaGFkX2lucHV0X2RhdGEgJiYgIWRlYy0+cHJpdi0+Y3R4LmhhZF9vdXRwdXRfZGF0YSkgeworLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlYywgU1RSRUFNLCBERUNPREUsCisrICAgICAgICAvKiBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBTVFJFQU0sIERFQ09ERSwKKyAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIiksCistICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7CisrICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7ICovCisrICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGRlYywgIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIik7CisgICAgICAgfQorIAorICAgICAgIC8qIHNlbmQgdGFnbGlzdCBpZiBubyB2YWxpZCBmcmFtZSBpcyBkZWNvZGVkIHV0aWwgRU9TICovCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggYWM1ODFlMS4uNDI3OGJjZAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK0BAIC0xMDY4LDkgKzEwNjgsMTAgQEAgZ3N0X3ZpZGVvX2RlY29kZXJfc2lua19ldmVudF9kZWZhdWx0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLAorIAorICAgICAgIC8qIEVycm9yIG91dCBldmVuIGlmIEVPUyB3YXMgb2sgd2hlbiB3ZSBoYWQgaW5wdXQsIGJ1dCBubyBvdXRwdXQgKi8KKyAgICAgICBpZiAocmV0ICYmIHByaXYtPmhhZF9pbnB1dF9kYXRhICYmICFwcml2LT5oYWRfb3V0cHV0X2RhdGEpIHsKKy0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZWNvZGVyLCBTVFJFQU0sIERFQ09ERSwKKysgICAgICAgIC8qIEdTVF9FTEVNRU5UX0VSUk9SIChkZWNvZGVyLCBTVFJFQU0sIERFQ09ERSwKKyAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIiksCistICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7CisrICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7ICovCisrICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGRlY29kZXIsICJObyB2YWxpZCBmcmFtZXMgZGVjb2RlZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpOworICAgICAgIH0KKyAKKyAgICAgICAvKiBGb3J3YXJkIEVPUyBpbW1lZGlhdGVseS4gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIG5vCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3RhZ2xpc3Qtbm90LXNlbmQtdG8tZG93bi1zdHJlYW0taWYtYWxsLXRoZS1mcmFtZS1jb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhNTJiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3RhZ2xpc3Qtbm90LXNlbmQtdG8tZG93bi1zdHJlYW0taWYtYWxsLXRoZS1mcmFtZS1jb3IucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA2OGZhMWIxNDI1YWQyYzVmN2M1MDEzZDA5NDMxNTNhOGE2ZDA5MzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlhbiBMaSA8bGoucWZ5LnNoQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjQgU2VwIDIwMTQgMTc6MjE6MDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGFnbGlzdCBub3Qgc2VuZCB0byBkb3duIHN0cmVhbSBpZiBhbGwgdGhlIGZyYW1lIGNvcnJ1cHRlZAorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MjQ2CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKaWFuIExpIDxsai5xZnkuc2hAZ21haWwuY29tPgorLS0tCisgZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jIHwgICAgOSArKysrKysrKysKKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKK2luZGV4IDM1MDQ2NzguLjNkNjllZmUgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworQEAgLTIwODMsNiArMjA4MywxNSBAQCBnc3RfYXVkaW9fZGVjb2Rlcl9zaW5rX2V2ZW50ZnVuYyAoR3N0QXVkaW9EZWNvZGVyICogZGVjLCBHc3RFdmVudCAqIGV2ZW50KQorICAgICAgIGdzdF9hdWRpb19kZWNvZGVyX2RyYWluIChkZWMpOworICAgICAgIEdTVF9BVURJT19ERUNPREVSX1NUUkVBTV9VTkxPQ0sgKGRlYyk7CisgCisrICAgICAgLyogc2VuZCB0YWdsaXN0IGlmIG5vIHZhbGlkIGZyYW1lIGlzIGRlY29kZWQgdXRpbCBFT1MgKi8KKysgICAgICBpZiAoZGVjLT5wcml2LT50YWdsaXN0ICYmIGRlYy0+cHJpdi0+dGFnbGlzdF9jaGFuZ2VkKSB7CisrICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJjb2RlYyB0YWcgJSIgR1NUX1BUUl9GT1JNQVQsIGRlYy0+cHJpdi0+dGFnbGlzdCk7CisrICAgICAgICBpZiAoIWdzdF90YWdfbGlzdF9pc19lbXB0eSAoZGVjLT5wcml2LT50YWdsaXN0KSkKKysgICAgICAgICAgZ3N0X2F1ZGlvX2RlY29kZXJfcHVzaF9ldmVudCAoZGVjLAorKyAgICAgICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9yZWYgKGRlYy0+cHJpdi0+dGFnbGlzdCkpKTsKKysgICAgICAgIGRlYy0+cHJpdi0+dGFnbGlzdF9jaGFuZ2VkID0gRkFMU0U7CisrICAgICAgfQorKworICAgICAgIC8qIEZvcndhcmQgRU9TIGJlY2F1c2Ugbm8gYnVmZmVyIG9yIHNlcmlhbGl6ZWQgZXZlbnQgd2lsbCBjb21lIGFmdGVyCisgICAgICAgICogRU9TIGFuZCBub3RoaW5nIGNvdWxkIHRyaWdnZXIgYW5vdGhlciBfZmluaXNoX2ZyYW1lKCkgY2FsbC4gKi8KKyAgICAgICByZXQgPSBnc3RfYXVkaW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWMsIGV2ZW50KTsKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK2luZGV4IGRkOGFiZTMuLmQ5YmZlNGQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworQEAgLTEwMjQsNiArMTAyNCwxNCBAQCBnc3RfdmlkZW9fZGVjb2Rlcl9zaW5rX2V2ZW50X2RlZmF1bHQgKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIsCisgICAgICAgICogcGFyZW50IGNsYXNzJyA6OnNpbmtfZXZlbnQoKSB1bnRpbCBhIGxhdGVyIHRpbWUuCisgICAgICAgICovCisgICAgICAgZm9yd2FyZF9pbW1lZGlhdGUgPSBUUlVFOworKworKyAgICAgIC8qIHNlbmQgdGFnbGlzdCBpZiBubyB2YWxpZCBmcmFtZSBpcyBkZWNvZGVkIHV0aWwgRU9TICovCisrICAgICAgaWYgKGRlY29kZXItPnByaXYtPnRhZ3MgJiYgZGVjb2Rlci0+cHJpdi0+dGFnc19jaGFuZ2VkKSB7CisrICAgICAgICBnc3RfdmlkZW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWNvZGVyLAorKyAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfcmVmIChkZWNvZGVyLT5wcml2LT50YWdzKSkpOworKyAgICAgICAgZGVjb2Rlci0+cHJpdi0+dGFnc19jaGFuZ2VkID0gRkFMU0U7CisrICAgICAgfQorKworICAgICAgIGJyZWFrOworICAgICB9CisgICAgIGNhc2UgR1NUX0VWRU5UX0dBUDoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjZmRhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDUzIEBACitjb21taXQgODhkMjUzZWEyM2IwNjI4OWRmNDA0MDExNjBiNjA2MzIzZjE2YzkxMAorQXV0aG9yOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gRGVjIDE1IDA5OjM0OjM1IDIwMTQgKzA4MDAKKwordmlkZW9wb29sOiB1cGRhdGUgdmlkZW8gYWxpZ25tZW50IGFmdGVyIHZpZGVvIGFsaWdubWVudAorCitWaWRlbyBidWZmZXIgcG9vbCB3aWxsIHVwZGF0ZSB2aWRlbyBhbGlnbm1lbnQgdG8gcmVzcGVjdCBzdHJpZGUgYWxpZ25tZW50CityZXF1aXJlbWVudC4gQnV0IGhhdmVuJ3QgdXBkYXRlIGl0IHRvIHZpZGVvIGFsaWdubWVudCBpbiBjb25maWd1cmUuCitXaGljaCB3aWxsIGNhdXNlIHVzZXIgZ2V0IHdyb25nIHZpZGVvIGFsaWdubWVudC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTUwMQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMKK2luZGV4IDQ0NzVmNDUuLmFjZWY1OTQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYworQEAgLTE2Nyw2ICsxNjcsNyBAQCB2aWRlb19idWZmZXJfcG9vbF9zZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQorICAgICAvKiBnZXQgYW4gYXBwbHkgdGhlIGFsaWdubWVudCB0byB0aGUgaW5mbyAqLworICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPnZpZGVvX2FsaWduKTsKKyAgICAgZ3N0X3ZpZGVvX2luZm9fYWxpZ24gKCZpbmZvLCAmcHJpdi0+dmlkZW9fYWxpZ24pOworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPnZpZGVvX2FsaWduKTsKKyAgIH0KKyAgIHByaXYtPmluZm8gPSBpbmZvOworCitkaWZmIC0tZ2l0IGEvc3lzL3hpbWFnZS94aW1hZ2Vwb29sLmMgYi9zeXMveGltYWdlL3hpbWFnZXBvb2wuYworaW5kZXggNmNjMmNmYS4uNmExY2JjOSAxMDA2NDQKKy0tLSBhL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jCisrKysgYi9zeXMveGltYWdlL3hpbWFnZXBvb2wuYworQEAgLTU5Nyw2ICs1OTcsOCBAQCB4aW1hZ2VfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKKyAgICAgLyogZG8gcGFkZGluZyBhbmQgYWxpZ25tZW50ICovCisgICAgIGdzdF92aWRlb19pbmZvX2FsaWduICgmaW5mbywgJnByaXYtPmFsaWduKTsKKworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPmFsaWduKTsKKysKKyAgICAgLyogd2UgbmVlZCB0aGUgdmlkZW8gbWV0YWRhdGEgdG9vIG5vdyAqLworICAgICBwcml2LT5hZGRfbWV0YXZpZGVvID0gVFJVRTsKKyAgIH0gZWxzZSB7CitkaWZmIC0tZ2l0IGEvc3lzL3h2aW1hZ2UveHZpbWFnZXBvb2wuYyBiL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMKK2luZGV4IDI0NGE1MWEuLjM0YjFhYjIgMTAwNjQ0CistLS0gYS9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jCisrKysgYi9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jCitAQCAtMTI0LDYgKzEyNCw4IEBAIHh2aW1hZ2VfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKKyAgICAgLyogZG8gcGFkZGluZyBhbmQgYWxpZ25tZW50ICovCisgICAgIGdzdF92aWRlb19pbmZvX2FsaWduICgmaW5mbywgJnByaXYtPmFsaWduKTsKKworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPmFsaWduKTsKKysKKyAgICAgLyogd2UgbmVlZCB0aGUgdmlkZW8gbWV0YWRhdGEgdG9vIG5vdyAqLworICAgICBwcml2LT5hZGRfbWV0YXZpZGVvID0gVFJVRTsKKyAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2VuY29kZXItS2VlcC1zdGlja3ktZXZlbnRzLWFyb3VuZC13aGVuLWRvaW5nLWEtc29mdC0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2VuY29kZXItS2VlcC1zdGlja3ktZXZlbnRzLWFyb3VuZC13aGVuLWRvaW5nLWEtc29mdC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3Njk2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGMzZjdkMzZiOTkyYTNjYmNlZTMzODZkZWE4NTcyMGYzY2IwNGUxZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogRnJpLCAyNyBNYXIgMjAxNSAxMzozOTo0MyArMDgwMAorU3ViamVjdDogW1BBVENIXSB2aWRlb2VuY29kZXI6IEtlZXAgc3RpY2t5IGV2ZW50cyBhcm91bmQgd2hlbiBkb2luZyBhIHNvZnQKKyByZXNldAorCitUaGUgY3VycmVudCBjb2RlIHdpbGwgZmlyc3QgZGlzY2FyZCBhbGwgZnJhbWVzLCBhbmQgdGhlbiB0cmllcyB0byBjb3B5CithbGwgc3RpY2t5IGV2ZW50cyBmcm9tIHRoZSAobm93IGRpc2NhcmRlZCkgZnJhbWVzLiBMZXQncyBjaGFuZ2UgdGhlIG9yZGVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2ODY1CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgCisKKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYyB8ICAgIDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jCitpbmRleCA2MTRiYTJkLi40YzViMTExIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMKK0BAIC0zNDAsMTAgKzM0MCw2IEBAIGdzdF92aWRlb19lbmNvZGVyX3Jlc2V0IChHc3RWaWRlb0VuY29kZXIgKiBlbmNvZGVyLCBnYm9vbGVhbiBoYXJkKQorIAorICAgcHJpdi0+ZHJhaW5lZCA9IFRSVUU7CisgCistICBnX2xpc3RfZm9yZWFjaCAocHJpdi0+ZnJhbWVzLCAoR0Z1bmMpIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiwgTlVMTCk7CistICBnX2xpc3RfZnJlZSAocHJpdi0+ZnJhbWVzKTsKKy0gIHByaXYtPmZyYW1lcyA9IE5VTEw7CistCisgICBwcml2LT5ieXRlcyA9IDA7CisgICBwcml2LT50aW1lID0gMDsKKyAKK0BAIC0zOTIsNiArMzg4LDEwIEBAIGdzdF92aWRlb19lbmNvZGVyX3Jlc2V0IChHc3RWaWRlb0VuY29kZXIgKiBlbmNvZGVyLCBnYm9vbGVhbiBoYXJkKQorICAgICAgICAgZW5jb2Rlci0+cHJpdi0+Y3VycmVudF9mcmFtZV9ldmVudHMpOworICAgfQorIAorKyAgZ19saXN0X2ZvcmVhY2ggKHByaXYtPmZyYW1lcywgKEdGdW5jKSBnc3RfdmlkZW9fY29kZWNfZnJhbWVfdW5yZWYsIE5VTEwpOworKyAgZ19saXN0X2ZyZWUgKHByaXYtPmZyYW1lcyk7CisrICBwcml2LT5mcmFtZXMgPSBOVUxMOworKworICAgR1NUX1ZJREVPX0VOQ09ERVJfU1RSRUFNX1VOTE9DSyAoZW5jb2Rlcik7CisgCisgICByZXR1cm4gcmV0OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNC41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5YzJjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNC41LmJiCkBAIC0wLDAgKzEsMzAgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSArPSAiZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtdmlkZW9maWx0ZXItVXNlLW5ldy1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly92aWRlb2VuY29kZXItS2VlcC1zdGlja3ktZXZlbnRzLWFyb3VuZC13aGVuLWRvaW5nLWEtc29mdC0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjM1NzE2NWFmNjI1YzBjYTM1M2FiNDdjNWQ4NDM5MjBlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc3YmQ4MTk5ZTdhMzEyZDNkNzFkZTliN2RkZjc2MWEzYjc4NTYwYTJjMmE4MDgyOWQwODE1Y2EzOWNiZDU1MWQiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYXNlLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZTNhNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKQEAgLTAsMCArMSwxOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM1NGNlOTM0NTcyNzE3NWZmNjZkMTdiNjdmZjUxZjU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICI4ZDRjYjY0YTRiOWQ4NGIxMDA3NmJmMzUwZjgwYTBkNmVhNjhlYzJkIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTMxNmRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCkBAIC0wLDAgKzEsNTcgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorCisjIGxpYmlkM3RhZworREVQRU5EUyArPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSB6bGliIGJ6aXAyIGxpYmNhcCIKKworaW5oZXJpdCBnZXR0ZXh0CisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IFwKKyAgICBvcmMgY2Fpcm8gZmxhYyBnZGstcGl4YnVmIGd1ZGV2IGpwZWcgbGlicG5nIHNvdXAgc3BlZXggdGFnbGliIFwKKyAgICAiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciBsaWJ4Zml4ZXMgbGlieGRhbWFnZSIKK1gxMUVOQUJMRU9QVFMgPSAiLS1lbmFibGUteCAtLWVuYWJsZS14c2htIgorWDExRElTQUJMRU9QVFMgPSAiLS1kaXNhYmxlLXggLS1kaXNhYmxlLXhzaG0iCitQQUNLQUdFQ09ORklHW3gxMV0gICAgICAgID0gIiR7WDExRU5BQkxFT1BUU30sJHtYMTFESVNBQkxFT1BUU30sJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2UsLS1kaXNhYmxlLXB1bHNlLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW2NhaXJvXSAgICAgID0gIi0tZW5hYmxlLWNhaXJvLC0tZGlzYWJsZS1jYWlybyxjYWlybyIKK1BBQ0tBR0VDT05GSUdbZmxhY10gICAgICAgPSAiLS1lbmFibGUtZmxhYywtLWRpc2FibGUtZmxhYyxmbGFjIgorUEFDS0FHRUNPTkZJR1tnZGstcGl4YnVmXSA9ICItLWVuYWJsZS1nZGtfcGl4YnVmLC0tZGlzYWJsZS1nZGtfcGl4YnVmLGdkay1waXhidWYiCitQQUNLQUdFQ09ORklHW2d1ZGV2XSAgICAgID0gIi0td2l0aC1ndWRldiwtLXdpdGhvdXQtZ3VkZXYsdWRldiIKK1BBQ0tBR0VDT05GSUdbamFja10gICAgICAgPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgorUEFDS0FHRUNPTkZJR1tqcGVnXSAgICAgICA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW2xpYnBuZ10gICAgID0gIi0tZW5hYmxlLWxpYnBuZywtLWRpc2FibGUtbGlicG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbc291cF0gICAgICAgPSAiLS1lbmFibGUtc291cCwtLWRpc2FibGUtc291cCxsaWJzb3VwLTIuNCIKK1BBQ0tBR0VDT05GSUdbc3BlZXhdICAgICAgPSAiLS1lbmFibGUtc3BlZXgsLS1kaXNhYmxlLXNwZWV4LHNwZWV4IgorUEFDS0FHRUNPTkZJR1t0YWdsaWJdICAgICA9ICItLWVuYWJsZS10YWdsaWIsLS1kaXNhYmxlLXRhZ2xpYix0YWdsaWIiCitQQUNLQUdFQ09ORklHW3ZweF0gICAgICAgID0gIi0tZW5hYmxlLXZweCwtLWRpc2FibGUtdnB4LGxpYnZweCIKK1BBQ0tBR0VDT05GSUdbd2F2cGFja10gICAgPSAiLS1lbmFibGUtd2F2cGFjaywtLWRpc2FibGUtd2F2cGFjayx3YXZwYWNrIgorCisjIHRoZSAxMzk0IHBsdWdpbnMgcmVxdWlyZSBib3RoIGxpYnJhdzEzOTQgYW5kIGxpYmllYzYxODgzCisjIHRoZSBmb3JtZXIgaXMgaW5jbHVkZWQgaW4gbWV0YS1vZSwgdGhlIGxhdHRlciBpc24ndAorIyAtPiBkaXNhYmxlZAorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1lbmFibGUtb3NzIFwKKyAgICAtLWVuYWJsZS1nc3RfdjRsMiBcCisgICAgLS13aXRob3V0LWxpYnY0bDIgXAorICAgIC0tZGlzYWJsZS1kaXJlY3Rzb3VuZCBcCisgICAgLS1kaXNhYmxlLXdhdmVmb3JtIFwKKyAgICAtLWRpc2FibGUtb3NzNCBcCisgICAgLS1kaXNhYmxlLXN1bmF1ZGlvIFwKKyAgICAtLWRpc2FibGUtb3N4X2F1ZGlvIFwKKyAgICAtLWRpc2FibGUtb3N4X3ZpZGVvIFwKKyAgICAtLWRpc2FibGUtYWFsaWIgXAorICAgIC0tZGlzYWJsZS1saWJjYWNhIFwKKyAgICAtLWRpc2FibGUtbGliZHYgXAorICAgIC0tZGlzYWJsZS1zaG91dDIgXAorICAgIC0tZGlzYWJsZS1leGFtcGxlcyBcCisgICAgLS1kaXNhYmxlLWR2MTM5NCBcCisiCisKK0ZJTEVTXyR7UE59LWVxdWFsaXplciArPSAiJHtkYXRhZGlyfS9nc3RyZWFtZXItMS4wL3ByZXNldHMvKi5wcnMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDE5NzNkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGM3ODJhMzA0ODI5MDhhNGI0ZGQ5Y2Q0YWJmZjlmOWJjNDAxNjY5OGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogVHVlLCA1IEF1ZyAyMDE0IDE0OjQwOjQ2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGdzdHJ0cG1wNGdwYXk6IHNldCBkYWZhdWx0IHZhbHVlIGZvciBNUEVHNCB3aXRob3V0IGNvZGVjCisgZGF0YSBpbiBjYXBzLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MjYzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYyB8ICAgMTkgKysrKysrKysrKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCitpbmRleCA3OTEzZDlhLi4xNzQ5ZDM5IDEwMDY0NAorLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKKysrKyBiL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCitAQCAtMzkwLDYgKzM5MCw3IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKKyAgIGNvbnN0IEdWYWx1ZSAqY29kZWNfZGF0YTsKKyAgIGNvbnN0IGdjaGFyICptZWRpYV90eXBlID0gTlVMTDsKKyAgIGdib29sZWFuIHJlczsKKysgIGNvbnN0IGdjaGFyICpuYW1lOworIAorICAgcnRwbXA0Z3BheSA9IEdTVF9SVFBfTVA0R19QQVkgKHBheWxvYWQpOworIAorQEAgLTQwMCw3ICs0MDEsNiBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCisgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiZ290IGNvZGVjX2RhdGEiKTsKKyAgICAgaWYgKEdfVkFMVUVfVFlQRSAoY29kZWNfZGF0YSkgPT0gR1NUX1RZUEVfQlVGRkVSKSB7CisgICAgICAgR3N0QnVmZmVyICpidWZmZXI7CistICAgICAgY29uc3QgZ2NoYXIgKm5hbWU7CisgCisgICAgICAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGNvZGVjX2RhdGEpOworICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiY29uZmlndXJpbmcgY29kZWNfZGF0YSIpOworQEAgLTQyNiw2ICs0MjYsMjMgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorIAorICAgICAgIHJ0cG1wNGdwYXktPmNvbmZpZyA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKKyAgICAgfQorKyAgfSBlbHNlIHsKKysgICAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7CisrCisrICAgIGlmICghc3RyY21wIChuYW1lLCAidmlkZW8vbXBlZyIpKSB7CisrICAgICAgcnRwbXA0Z3BheS0+cHJvZmlsZSA9IGdfc3RyZHVwICgiMSIpOworKworKyAgICAgIC8qIGZpeGVkIHJhdGUgKi8KKysgICAgICBydHBtcDRncGF5LT5yYXRlID0gOTAwMDA7CisrICAgICAgLyogdmlkZW8gc3RyZWFtIHR5cGUgKi8KKysgICAgICBydHBtcDRncGF5LT5zdHJlYW10eXBlID0gIjQiOworKyAgICAgIC8qIG5vIHBhcmFtcyBmb3IgdmlkZW8gKi8KKysgICAgICBydHBtcDRncGF5LT5wYXJhbXMgPSBOVUxMOworKyAgICAgIC8qIG1vZGUgKi8KKysgICAgICBydHBtcDRncGF5LT5tb2RlID0gImdlbmVyaWMiOworKworKyAgICAgIG1lZGlhX3R5cGUgPSAidmlkZW8iOworKyAgICB9CisgICB9CisgICBpZiAobWVkaWFfdHlwZSA9PSBOVUxMKQorICAgICBnb3RvIGNvbmZpZ19mYWlsZWQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yODg2MzFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorY29tbWl0IGQ3MWQ3NGRhYWM4ZWQ1NDE1NmVkMTAzOTU4YWI0NTVjNjNjNzJiMGUKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxMCAxMToyNTo0NyAyMDE0ICswODAwCisKK1thc3Rlcmlza2gyNjNdIGRlY3JlYXNlIHRoZSByYW5rIGFzIHdlIGhhdm4ndCB0aGlzIGtpbmQgb2YgZGVjb2Rlci4KKworRGVjcmVhc2UgdGhlIHJhbmsgYXMgd2UgaGF2bid0IHRoaXMga2luZCBvZiBkZWNvZGVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5OTM1CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYyBiL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKK2luZGV4IGEwMWZiYzguLjhmYTMxOTQgMTAwNjQ0CistLS0gYS9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jCisrKysgYi9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jCitAQCAtMjI2LDUgKzIyNiw1IEBAIGdib29sZWFuCisgZ3N0X2FzdGVyaXNraDI2M19wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQorIHsKKyAgIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXN0ZXJpc2toMjYzIiwKKy0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMpOworKyAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSAtIDEsIEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMpOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNC41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzYWI2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNC41LmJiCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlY3JlYXNlX2FzdGVyaXNraDI2M19yYW5rLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYWYxYTZkYWY3Mzc0OWJjNDIzZmVhYzMwMWQ2MDAzOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OWIxYjVmM2Y3YmNhYThhNjE1MjAyZWI1ZTE3NjEyMWVlYjgzMzY5NjBmNzA2ODdlNTM2YWQ3OGRiYzdlNjQxIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtZ29vZC0ke1BWfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzBlMGVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1iNjBlYmVmZDViMmY1YThlMGNhYjZiZmVlMzkxYTVmZSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gImZkMDEyMzgwMGM4YzFjZjE0NjhjMGZhNWQ1OTJhZDBkMGQ4YjQxNDAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYmEzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKQEAgLTAsMCArMSwzMCBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBMR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGxpYmlkM3RhZyIKKworaW5oZXJpdCBnZXR0ZXh0CisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgb3JjIGE1MmRlYyBsYW1lIG1hZCBtcGVnMmRlYyBcCisgICAgIgorCitQQUNLQUdFQ09ORklHW2E1MmRlY10gICA9ICItLWVuYWJsZS1hNTJkZWMsLS1kaXNhYmxlLWE1MmRlYyxsaWJhNTIiCitQQUNLQUdFQ09ORklHW2NkaW9dICAgICA9ICItLWVuYWJsZS1jZGlvLC0tZGlzYWJsZS1jZGlvLGxpYmNkaW8iCitQQUNLQUdFQ09ORklHW2R2ZHJlYWRdICA9ICItLWVuYWJsZS1kdmRyZWFkLC0tZGlzYWJsZS1kdmRyZWFkLGxpYmR2ZHJlYWQiCitQQUNLQUdFQ09ORklHW2xhbWVdICAgICA9ICItLWVuYWJsZS1sYW1lLC0tZGlzYWJsZS1sYW1lLGxhbWUiCitQQUNLQUdFQ09ORklHW21hZF0gICAgICA9ICItLWVuYWJsZS1tYWQsLS1kaXNhYmxlLW1hZCxsaWJtYWQiCitQQUNLQUdFQ09ORklHW21wZWcyZGVjXSA9ICItLWVuYWJsZS1tcGVnMmRlYywtLWRpc2FibGUtbXBlZzJkZWMsbXBlZzJkZWMiCitQQUNLQUdFQ09ORklHW3gyNjRdICAgICA9ICItLWVuYWJsZS14MjY0LC0tZGlzYWJsZS14MjY0LHgyNjQiCisKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZGlzYWJsZS1hbXJuYiBcCisgICAgLS1kaXNhYmxlLWFtcndiIFwKKyAgICAtLWRpc2FibGUtc2lkcGxheSBcCisgICAgLS1kaXNhYmxlLXR3b2xhbWUgXAorICAgICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWNiMjhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS40LjUuYmIKQEAgLTAsMCArMSwxMCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjk1NGJlZWQ3YmI5YTkzZTQyNmRlZTU0M2ZmNDYzOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWNkNWU4MWNmNjE4OTQ0ZjRkYzkzNWYxNjY5YjIxMjVlOGJiMmZlOWNjN2RjOGRjMTViNzIyMzdhY2E0OTA2NyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLXVnbHktJHtQVn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2Y1ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjggIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiMDZiOGFjMTBjZWU4NWM1YzMwNGNhMzIwOTk3YWE4ZjQ0Mjk1YTY2ZiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc4M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLmluYwpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlBsdWdpbnMgZm9yIHRoZSBHU3RyZWFtZXIgbXVsdGltZWRpYSBmcmFtZXdvcmsgMS54IgorSE9NRVBBR0UgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R3N0cmVhbWVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitHU1RSRUFNRVJfMV8wX0RFQlVHID89ICItLWRpc2FibGUtZGVidWciCitHU1RSRUFNRVJfMV8wX0dJVF9CUkFOQ0ggPz0gIm1hc3RlciIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdmFsZ3JpbmQgJHtHU1RSRUFNRVJfMV8wX0RFQlVHfSAtLWRpc2FibGUtZXhhbXBsZXMgIgorCithY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCisKK0xJQlYgPSAiMS4wIgorcmVxdWlyZSBnc3QtcGx1Z2lucy1wYWNrYWdlLmluYworCitQQUNLQUdFQ09ORklHW29yY10gPSAiLS1lbmFibGUtb3JjLC0tZGlzYWJsZS1vcmMsb3JjIG9yYy1uYXRpdmUiCisKK2V4cG9ydCBPUkNDID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyfS9vcmNjIgorCitQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS0uKiIKKworIyBhcHBseSBnc3RyZWFtZXIgaGFjayBhZnRlciBNYWtlZmlsZS5pbi5pbiBpbiBzb3VyY2UgaXMgcmVwbGFjZWQgYnkgb3VyIHZlcnNpb24gZnJvbQorIyAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4sIGJ1dCBiZWZvcmUgY29uZmlndXJlIGlzIGV4ZWN1dGVkIAorIyBodHRwOi8vbGlzdHMubGludXh0b2dvLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxMi1Ob3ZlbWJlci8wMzIyMzMuaHRtbAorb2VfcnVuY29uZl9wcmVwZW5kKCkgeworCWlmIFsgLWUgJHtTfS9wby9NYWtlZmlsZS5pbi5pbiBdOyB0aGVuCisJCXNlZCAtaSAtZSAiMWFcXCIgLWUgJ0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VAJyAke1N9L3BvL01ha2VmaWxlLmluLmluCisJZmkKK30KKworU1JDX1VSSSA9ICIke0BnZXRfZ3N0X3NyY3VyaShkKX0iCisKK2RlZiBnZXRfZ3N0X3NyY3VyaShkKToKKyAgICAjIGNoZWNrIGlmIGV4cGVjdGVkIHByZWZpeCBpcyBwcmVzZW50CisgICAgcHJlZml4ID0gImdzdHJlYW1lcjEuMC0iCisgICAgYnBuID0gZC5nZXRWYXIoIkJQTiIsIFRydWUpCisgICAgaWYgbm90IGJwbi5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIGJiLmZhdGFsKCdJbnZhbGlkIEdTdHJlYW1lciAxLjAgcGx1Z2luIHBhY2thZ2UgbmFtZSAiJXMiIDogbXVzdCBzdGFydCB3aXRoICIlcyInICUgKGJwbiwgcHJlZml4KSkKKworICAgICMgcmVwbGFjZWQgcHJlZml4IHdpdGggImdzdC0iLCB3aGljaCBpcyB3aGF0IGlzIHVzZWQgZm9yIHRoZSB0YXJiYWxsIGFuZCByZXBvc2l0b3J5IGZpbGVuYW1lcworICAgIGdzdHBrZ19iYXNlbmFtZSA9ICJnc3QtIiArIGJwbltsZW4ocHJlZml4KTpdCisgICAgcHYgPSBkLmdldFZhcigiUFYiLCBUcnVlKQorICAgIGJyYW5jaCA9IGQuZ2V0VmFyKCJHU1RSRUFNRVJfMV8wX0dJVF9CUkFOQ0giLCBUcnVlKQorCisgICAgaWYgcHYgPT0gImdpdCI6CisgICAgICAgIHMgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyLyVzO2JyYW5jaD0lcyIgJSAoZ3N0cGtnX2Jhc2VuYW1lLCBicmFuY2gpCisgICAgZWxzZToKKyAgICAgICAgcyA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvJXMvJXMtJXMudGFyLnh6IiAlIChnc3Rwa2dfYmFzZW5hbWUsIGdzdHBrZ19iYXNlbmFtZSwgcHYpCisgICAgcmV0dXJuIHMKKworZGVsZXRlX2xpYmxpbmtfbTRfZmlsZSgpIHsKKwkjIFRoaXMgbTQgZmlsZSBjb250YWlucyBuYXN0aW5lc3Mgd2hpY2ggY29uZmxpY3RzIHdpdGggbGlidG9vbCAyLjIuMgorCXJtICIke1N9L200L2xpYi1saW5rLm00IiB8fCB0cnVlCit9CisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfbGlibGlua19tNF9maWxlICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE5NDIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgb24gdG9wIG9mIEdTdHJlYW1lciBmb3IgYnVpbGRpbmcgYW4gUlRTUCBzZXJ2ZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2MiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXJ0c3Atc2VydmVyLyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGxpYmNncm91cCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIgorCitQTlJFQUwgPSAiZ3N0LXJ0c3Atc2VydmVyIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8ke1BOUkVBTH0vJHtQTlJFQUx9LSR7UFZ9LnRhci54eiIKKworUyA9ICIke1dPUktESVJ9LyR7UE5SRUFMfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNC41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjliNDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjQuNS5iYgpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCIKKworU1JDX1VSSVttZDVzdW1dID0gImE5ZjliODg5OWVjN2FiMzM2NjNjZGE3NjI3ZGI0MGQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMwODkyNTRiZDMxYjdjMWYxY2YyYzAzNGEzYjM1NTFmOTI4NzhmOWUzY2FiNjVjZWYzYTkwMWEwNGMwZjFkMzciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOGFhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYwpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkdTdHJlYW1lciAxLjAgbXVsdGltZWRpYSBmcmFtZXdvcmsiCitERVNDUklQVElPTiA9ICJHU3RyZWFtZXIgaXMgYSBtdWx0aW1lZGlhIGZyYW1ld29yayBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHZpZGVvIGFuZCBzb3VuZC4gXAorSXQgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9mIGZvcm1hdHMgaW5jbHVkaW5nIG1wMywgb2dnLCBhdmksIG1wZWcgYW5kIHF1aWNrdGltZS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Hc3RyZWFtZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2MisiCitERVBFTkRTID0gImdsaWItMi4wIGxpYnhtbDIgYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitQQUNLQUdFQ09ORklHW2RlYnVnXSA9ICItLWVuYWJsZS1kZWJ1ZywtLWRpc2FibGUtZGVidWciCitQQUNLQUdFQ09ORklHW2NoZWNrXSA9ICItLWVuYWJsZS1jaGVjaywtLWRpc2FibGUtY2hlY2siCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jYm9vayAtLWRpc2FibGUtZ3RrLWRvYyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1leGFtcGxlcyAtLWRpc2FibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12YWxncmluZCBcCisgICAgICAgICAgICAgICAgIgorCitSUkVDT01NRU5EU18ke1BOfV9xZW11eDg2ICAgICs9ICJrZXJuZWwtbW9kdWxlLXNuZC1lbnMxMzcwIGtlcm5lbC1tb2R1bGUtc25kLXJhd21pZGkiCitSUkVDT01NRU5EU18ke1BOfV9xZW11eDg2LTY0ICs9ICJrZXJuZWwtbW9kdWxlLXNuZC1lbnMxMzcwIGtlcm5lbC1tb2R1bGUtc25kLXJhd21pZGkiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD1ubyIKKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLnNvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIgJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvICR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmNWNjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDZiMjZmM2RiZjliZjU3N2Q3MTUzNGFiNzQxMGRlNjZkMDZlNDZiYTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDYgQXByIDIwMTMgMjM6NTI6MTEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGNyYXNoIHdpdGggZ3N0LWluc3BlY3QgQ2hyaXMgTG9yZCA8Y2hyaXNAb3BlbmVkaGFuZC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyB0b29scy9nc3QtaW5zcGVjdC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvZ3N0LWluc3BlY3QuYyBiL3Rvb2xzL2dzdC1pbnNwZWN0LmMKK2luZGV4IDIzYjdjNDQuLmI3OWIwMmUgMTAwNjQ0CistLS0gYS90b29scy9nc3QtaW5zcGVjdC5jCisrKysgYi90b29scy9nc3QtaW5zcGVjdC5jCitAQCAtMTU1Niw3ICsxNTU2LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOworICAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7CisgICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgeworLSAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKysgICAgZ19wcmludGVyciAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyciA/IGVyci0+bWVzc2FnZSA6ICIobnVsbCkiKTsKKyAgICAgcmV0dXJuIC0xOworICAgfQorICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOworLS0gCisxLjguMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtZ3N0aW5mby1TaG9ydGVuLV9fRklMRV9fLW9uLWFsbC1wbGF0Zm9ybXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDEtZ3N0aW5mby1TaG9ydGVuLV9fRklMRV9fLW9uLWFsbC1wbGF0Zm9ybXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxM2M0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDgxZmVjZDM2N2IwMTZlNWFjNGZiMGMwNGI4NGRhNWM0NzRmMzBkYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQZXRlciBVcmJhbmVjIDxnaXQudXNlckB1cmJhbmVjLm5ldD4KK0RhdGU6IEZyaSwgMjcgRmViIDIwMTUgMDE6MTY6NTggKzExMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIGdzdGluZm86IFNob3J0ZW4gX19GSUxFX18gb24gYWxsIHBsYXRmb3Jtcy4KKworVGhpcyBpcyB1c2VmdWwgbm90IG9ubHkgZm9yIE1TVkMsIGJ1dCBhbHNvIHdpdGggZ2NjL0xpbnV4IHdoZW4gZG9pbmcKK2Nyb3NzLWNvbXBpbGF0aW9uIGJ1aWxkcyBhbmQgb3V0LW9mLXRyZWUgYnVpbGRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTIxM10KKworU2lnbmVkLW9mZi1ieTogUGV0ZXIgVXJiYW5lYyA8Z2l0LnVzZXJAdXJiYW5lYy5uZXQ+CistLS0KKyBnc3QvZ3N0aW5mby5jIHwgMTEgKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0L2dzdGluZm8uYyBiL2dzdC9nc3RpbmZvLmMKK2luZGV4IGIyYTMwMDUuLjhiNjFkMDkgMTAwNjQ0CistLS0gYS9nc3QvZ3N0aW5mby5jCisrKysgYi9nc3QvZ3N0aW5mby5jCitAQCAtNDQ0LDcgKzQ0NCw2IEBAIGdzdF9kZWJ1Z19sb2cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKKyAgIHZhX2VuZCAodmFyX2FyZ3MpOworIH0KKyAKKy0jaWZkZWYgR19PU19XSU4zMgorIC8qIGJhc2VkIG9uIGdfYmFzZW5hbWUoKSwgd2hpY2ggd2UgY2FuJ3QgdXNlIGJlY2F1c2UgaXQgd2FzIGRlcHJlY2F0ZWQgKi8KKyBzdGF0aWMgaW5saW5lIGNvbnN0IGdjaGFyICoKKyBnc3RfcGF0aF9iYXNlbmFtZSAoY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCitAQCAtNDY3LDcgKzQ2Niw2IEBAIGdzdF9wYXRoX2Jhc2VuYW1lIChjb25zdCBnY2hhciAqIGZpbGVfbmFtZSkKKyAKKyAgIHJldHVybiBmaWxlX25hbWU7CisgfQorLSNlbmRpZgorIAorIC8qKgorICAqIGdzdF9kZWJ1Z19sb2dfdmFsaXN0OgorQEAgLTQ5NywxMiArNDk1LDExIEBAIGdzdF9kZWJ1Z19sb2dfdmFsaXN0IChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCisgICBnX3JldHVybl9pZl9mYWlsIChmdW5jdGlvbiAhPSBOVUxMKTsKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKGZvcm1hdCAhPSBOVUxMKTsKKyAKKy0gIC8qIFRoZSBwcmVkZWZpbmVkIG1hY3JvIF9fRklMRV9fIGlzIGFsd2F5cyB0aGUgZXhhY3QgcGF0aCBnaXZlbiB0byB0aGUKKy0gICAqIGNvbXBpbGVyIHdpdGggTVNWQywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIGJhc2VuYW1lLiAgV2Ugd29yaworLSAgICogYXJvdW5kIGl0IGF0IHJ1bnRpbWUgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkuICovCistI2lmZGVmIEdfT1NfV0lOMzIKKysgIC8qIFRoZSBwcmVkZWZpbmVkIG1hY3JvIF9fRklMRV9fIGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoIGluIHNvbWUgYnVpbGQKKysgICAqIGVudmlyb25tZW50cywgc3VjaCBhcyBNU1ZDIG9yIG91dC1vZi10cmVlIGNyb3NzLWNvbXBpbGVzLiBUaGlzIG1heQorKyAgICogYmUgc2lnbmlmaWNhbnRseSBsb25nZXIgdGhhbiB0aGUgZmlsZW5hbWUuICBXZSB3b3JrIGFyb3VuZCBpdCBhdAorKyAgICogcnVudGltZSB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eS4gKi8KKyAgIGZpbGUgPSBnc3RfcGF0aF9iYXNlbmFtZSAoZmlsZSk7CistI2VuZGlmCisgCisgICBtZXNzYWdlLm1lc3NhZ2UgPSBOVUxMOworICAgbWVzc2FnZS5mb3JtYXQgPSBmb3JtYXQ7CistLSAKKzIuMy4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwNWNiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gNjkxNDU2NmVkNmE4OWM5Njk3M2E1NzhhYTVlY2QwMWVlNjhjZGNmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW4gPEppYW4uTGlAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTQgTWF5IDIwMTUgMTU6NDk6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmFzZXNpbms6IEZpeCBRb1MvbGF0ZW5lc3MgY2hlY2tpbmcgaWYgc3ViY2xhc3MgaW1wbGVtZW50cworIHByZXBhcmUvcHJlcGFyZV9saXN0IHZmdW5jcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitJbiBiYXNlc2luayBmdW5jdGlvbnMgZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCgpLCBiZWxvdyBjb2RlIGlzIHVzZWQgdG8KK2NoZWNraW5nIGlmIGJ1ZmZlciBpcyBsYXRlIGJlZm9yZSBkb2luZyBwcmVwYXJlIGNhbGwgdG8gc2F2ZSBzb21lIGVmZm9ydDoKKyAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykKKyAgICAgIGxhdGUgPQorICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCisgICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCAwLCBGQUxTRSk7CisKKyAgICBpZiAoR19VTkxJS0VMWSAobGF0ZSkpCisgICAgICBnb3RvIGRyb3BwZWQ7CisKK0J1dCB0aGlzIGNvZGUgaGFzIHByb2JsZW0sIGl0IHNob3VsZCBjYWxjdWxhdGUgaml0dGVyIGJhc2VkIG9uIGN1cnJlbnQgbWVkaWEKK2Nsb2NrLCByYXRoZXIgdGhhbiBqdXN0IHBhc3NpbmcgMC4gSSBmb3VuZCBpdCB3aWxsIGRyb3AgYWxsIHRoZSBmcmFtZXMgd2hlbgorcmV3aW5kIGluIHNsb3cgc3BlZWQsIHN1Y2ggYXMgLTJYLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjU4CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorLS0tCisgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIHwgICAyNiArKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCitpbmRleCBhNTA1Njk1Li41ZmIyZDZhIDEwMDY0NAorLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCisrKysgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKK0BAIC0zMzY5LDEwICszMzY5LDI4IEBAIGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCwKKyAgICAgaWYgKEdfVU5MSUtFTFkgKHN0ZXBwZWQpKQorICAgICAgIGdvdG8gZHJvcHBlZDsKKyAKKy0gICAgaWYgKHN5bmNhYmxlICYmIGRvX3N5bmMpCistICAgICAgbGF0ZSA9CistICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCistICAgICAgICAgIEdTVF9DTE9DS19FQVJMWSwgMCwgRkFMU0UpOworKyAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykgeworKyAgICAgIEdzdENsb2NrICpjbG9jazsKKysKKysgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKysgICAgICBjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChiYXNlc2luayk7CisrICAgICAgaWYgKGNsb2NrICYmIEdTVF9TVEFURSAoYmFzZXNpbmspID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisrICAgICAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOworKyAgICAgICAgR3N0Q2xvY2tUaW1lIHN0aW1lOworKyAgICAgICAgR3N0Q2xvY2tUaW1lIG5vdzsKKysKKysgICAgICAgIGJhc2VfdGltZSA9IEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKS0+YmFzZV90aW1lOworKyAgICAgICAgc3RpbWUgPSBiYXNlX3RpbWUgKyBnc3RfYmFzZV9zaW5rX2FkanVzdF90aW1lIChiYXNlc2luaywgcnN0YXJ0KTsKKysgICAgICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKysKKysgICAgICAgIGxhdGUgPQorKyAgICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCisrICAgICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCBHU1RfQ0xPQ0tfRElGRiAoc3RpbWUsIG5vdyksIEZBTFNFKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKysgICAgICB9CisrICAgIH0KKyAKKyAgICAgaWYgKEdfVU5MSUtFTFkgKGxhdGUpKQorICAgICAgIGdvdG8gZHJvcHBlZDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wL2lucHV0c2VsZWN0b3Itc3RpY2t5LWV2ZW50cy1oYXZlbi10LXNlbmQtb3V0LXdoZW4tYWMtMS00LTEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wL2lucHV0c2VsZWN0b3Itc3RpY2t5LWV2ZW50cy1oYXZlbi10LXNlbmQtb3V0LXdoZW4tYWMtMS00LTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjUwY2U2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaApAQCAtMCwwICsxLDE2NyBAQAorRnJvbSA4M2JlZDkwYzMwNmVkMzE4NWQ0OGZlYmY2NDQxMTc3ZDYzOGY3MzQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgMjQgRGVjIDIwMTQgMTA6MTM6NTEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5wdXRzZWxlY3Rvcjogc3RpY2t5IGV2ZW50cyBoYXZlbid0IHNlbmQgb3V0IHdoZW4gYWN0aXZlCisgdHJhY2sgcmVhY2ggRU9TCisKK0VPUyBldmVudCBoYXNuJ3QgYmVlbiBzZW5kIHRvIGRvd24tZWxlbWVudC4gVGhlIHJlc29sdXRpb24gaXMgYmxvY2sgRU9TIGV2ZW50CitvZiBpbmFjdGl2ZSBwYWQsIHNlbmQgdGhlIGV2ZW50IGFmdGVyIHRoZSBwYWQgYWN0aXZlZC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk0OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKy0tLQorIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jIHwgICA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIHwgICAgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKK2luZGV4IGZiNTA4MDIuLjQ0NjFmN2MgMTAwNjQ0CistLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKK0BAIC00NDAsNiArNDQwLDE3IEBAIGdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCisgfQorIAorIHN0YXRpYyBnYm9vbGVhbgorK2dzdF9pbnB1dF9zZWxlY3Rvcl9lb3Nfd2FpdCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYsIEdzdFNlbGVjdG9yUGFkICogcGFkKQorK3sKKysgIHdoaWxlICghc2VsZi0+ZW9zICYmICFzZWxmLT5mbHVzaGluZyAmJiAhcGFkLT5mbHVzaGluZykgeworKyAgICAvKiB3ZSBjYW4gYmUgdW5sb2NrZWQgaGVyZSB3aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duIChmbHVzaGluZykgb3Igd2hlbiB3ZQorKyAgICAgKiBnZXQgdW5ibG9ja2VkICovCisrICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9XQUlUIChzZWxmKTsKKysgIH0KKysgIHJldHVybiBzZWxmLT5mbHVzaGluZzsKKyt9CisrCisrc3RhdGljIGdib29sZWFuCisgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgeworICAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKK0BAIC00ODYsNiArNDk3LDcgQEAgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgICAgIC8qIFVuYmxvY2sgdGhlIHBhZCBpZiBpdCdzIHdhaXRpbmcgKi8KKyAgICAgICBzZWxwYWQtPmZsdXNoaW5nID0gVFJVRTsKKysgICAgICBzZWwtPmVvcyA9IEZBTFNFOworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbCk7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CitAQCAtNTIzLDIxICs1MzUsMTIgQEAgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgICBzZWxwYWQtPmVvcyA9IFRSVUU7CisgCistICAgICAgaWYgKGZvcndhcmQpIHsKKy0gICAgICAgIHNlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBHc3RTZWxlY3RvclBhZCAqYWN0aXZlX3NlbHBhZDsKKy0KKy0gICAgICAgIC8qIElmIHRoZSBhY3RpdmUgc2lua3BhZCBpcyBpbiBFT1Mgc3RhdGUgYnV0IEVPUworLSAgICAgICAgICogd2FzIG5vdCBzZW50IGRvd25zdHJlYW0gdGhpcyBtZWFucyB0aGF0IHRoZSBwYWQKKy0gICAgICAgICAqIGdvdCBFT1MgYmVmb3JlIGl0IHdhcyBzZXQgYXMgYWN0aXZlIHBhZCBhbmQgdGhhdAorLSAgICAgICAgICogdGhlIHByZXZpb3VzbHkgYWN0aXZlIHBhZCBnb3QgRU9TIGFmdGVyIGl0IHdhcworLSAgICAgICAgICogYWN0aXZlCistICAgICAgICAgKi8KKy0gICAgICAgIGFjdGl2ZV9zZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEIChhY3RpdmVfc2lua3BhZCk7CistICAgICAgICBmb3J3YXJkID0gKGFjdGl2ZV9zZWxwYWQtPmVvcyAmJiAhYWN0aXZlX3NlbHBhZC0+ZW9zX3NlbnQpOworLSAgICAgICAgYWN0aXZlX3NlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworKyAgICAgIGlmICghZm9yd2FyZCkgeworKyAgICAgICAgLyogYmxvY2tlZCB1bnRpbCBhY3RpdmUgdGhlIHNpbmQgcGFkIG9yIGZsdXNoICovCisrICAgICAgICBnc3RfaW5wdXRfc2VsZWN0b3JfZW9zX3dhaXQgKHNlbCwgc2VscGFkKTsKKysgICAgICAgIGZvcndhcmQgPSBUUlVFOworICAgICAgIH0KKysgICAgICBzZWxwYWQtPmVvc19zZW50ID0gVFJVRTsKKyAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJyZWNlaXZlZCBFT1MiKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOnsKK0BAIC02NzYsNiArNjc5LDEyIEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0X3J1bm5pbmdfdGltZSAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbCwKKyAgICAgICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmF0ZV9zaW5rcGFkIChzZWwsIEdTVF9QQURfQ0FTVCAoc2VscGFkKSk7CisgICAgIGFjdGl2ZV9zZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKGFjdGl2ZV9zaW5rcGFkKTsKKyAKKysgICAgaWYgKHNlbC0+ZW9zKSB7CisrICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsLCAiTm90IHdhaXRpbmcgYmVjYXVzZSBpbnB1dHNlbGVjdG9yIHJlYWNoIEVPUy4iKTsKKysgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworKyAgICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorKworICAgICBpZiAoc2VnLT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLAorICAgICAgICAgICAiTm90IHdhaXRpbmcgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgVElNRSBzZWdtZW50Iik7CitAQCAtOTcxLDYgKzk4MCwxMiBAQCBnc3Rfc2VsZWN0b3JfcGFkX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSk7CisgCisgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKysgIGlmIChzZWwtPmVvcykgeworKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpbnB1dHNlbGVjdG9yIGVvcy4iKTsKKysgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKysgICAgZ290byBlb3M7CisrICB9CisrCisgICAvKiB3YWl0IG9yIGNoZWNrIGZvciBmbHVzaGluZyAqLworICAgaWYgKGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0IChzZWwsIHNlbHBhZCkpIHsKKyAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKK0BAIC0xMTUxLDYgKzExNjYsMTMgQEAgZmx1c2hpbmc6CisgICAgIHJlcyA9IEdTVF9GTE9XX0ZMVVNISU5HOworICAgICBnb3RvIGRvbmU7CisgICB9CisrZW9zOgorKyAgeworKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJXZSBhcmUgZW9zLCBkaXNjYXJkIGJ1ZmZlciAlcCIsIGJ1Zik7CisrICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisrICAgIHJlcyA9IEdTVF9GTE9XX0VPUzsKKysgICAgZ290byBkb25lOworKyAgfQorIH0KKyAKKyBzdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitAQCAtMTMwOSw2ICsxMzMxLDcgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwpCisgICBnX211dGV4X2luaXQgKCZzZWwtPmxvY2spOworICAgZ19jb25kX2luaXQgKCZzZWwtPmNvbmQpOworICAgc2VsLT5ibG9ja2VkID0gRkFMU0U7CisrICBzZWwtPmVvcyA9IEZBTFNFOworIAorICAgLyogbGV0cyBnaXZlIGEgY2hhbmdlIGZvciBkb3duc3RyZWFtIHRvIGRvIHNvbWV0aGluZyBvbgorICAgICogYWN0aXZlLXBhZCBjaGFuZ2UgYmVmb3JlIHdlIHN0YXJ0IHB1c2hpbmcgbmV3IGJ1ZmZlcnMgKi8KK0BAIC0xMzc3LDYgKzE0MDAsMTEgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsZiwgR3N0UGFkICogcGFkKQorICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk5ldyBhY3RpdmUgcGFkIGlzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgIHNlbGYtPmFjdGl2ZV9zaW5rcGFkKTsKKyAKKysgIGlmIChvbGQgIT0gbmV3ICYmIG5ldy0+ZW9zICYmICFuZXctPmVvc19zZW50KSB7CisrICAgIHNlbGYtPmVvcyA9IFRSVUU7CisrICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOworKyAgfQorKworICAgcmV0dXJuIFRSVUU7CisgfQorIAorQEAgLTE3NzEsNiArMTc5OSw3IEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbGYpOworKyAgICAgIHNlbGYtPmVvcyA9IEZBTFNFOworICAgICAgIHNlbGYtPmJsb2NrZWQgPSBGQUxTRTsKKyAgICAgICBzZWxmLT5mbHVzaGluZyA9IEZBTFNFOworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbGYpOworQEAgLTE3NzksNiArMTgwOCw3IEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgICAgIC8qIGZpcnN0IHVubG9jayBiZWZvcmUgd2UgY2FsbCB0aGUgcGFyZW50IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiwgd2hpY2gKKyAgICAgICAgKiB0cmllcyB0byBhY3F1aXJlIHRoZSBzdHJlYW0gbG9jayB3aGVuIGdvaW5nIHRvIHJlYWR5LiAqLworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWxmKTsKKysgICAgICBzZWxmLT5lb3MgPSBUUlVFOworICAgICAgIHNlbGYtPmJsb2NrZWQgPSBGQUxTRTsKKyAgICAgICBzZWxmLT5mbHVzaGluZyA9IFRSVUU7CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsZik7CitkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaAoraW5kZXggOTZjNjgwZi4uOWJmOTI0ZiAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCisrKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaAorQEAgLTc3LDYgKzc3LDcgQEAgc3RydWN0IF9Hc3RJbnB1dFNlbGVjdG9yIHsKKyAgIEdNdXRleCBsb2NrOworICAgR0NvbmQgY29uZDsKKyAgIGdib29sZWFuIGJsb2NrZWQ7CisrICBnYm9vbGVhbiBlb3M7CisgICBnYm9vbGVhbiBmbHVzaGluZzsKKyB9OworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTg3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuNC41LmJiCkBAIC0wLDAgKzEsMTcgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaCBcCisgICAgZmlsZTovL2lucHV0c2VsZWN0b3Itc3RpY2t5LWV2ZW50cy1oYXZlbi10LXNlbmQtb3V0LXdoZW4tYWMtMS00LTEucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjg4YTkyODljNjRhNDk1MGViYjRmNTQ0OTgwMjM0Mjg5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwODAxYWE3Zjk3OTAyNDUyNjI1OGEwZTk0NzA3YmE0MmI4YWI2ZjdkMjIwNmU1NmFkYmM0NDMzMTU1Y2IwYWUiCisKK1MgPSAiJHtXT1JLRElSfS9nc3RyZWFtZXItJHtQVn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwMGQzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyO2JyYW5jaD1tYXN0ZXIiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiM2I4MTgxYThjNTUwZTc0YWNhYmE0ZThjNTViZGM2NDlmYTU1MWRjOSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxYTFkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHRoaXMga2luZCBvZiBlcnJvcnMgd2l0aCBhdXRvbWFrZSAxLjEyLng6Cit8IGRvYy9tYW4vTWFrZWZpbGUuYW06MzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8xMworCitJbmRleDogbGFtZS0zLjk5LjUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9jb25maWd1cmUuaW4KKysrKyBsYW1lLTMuOTkuNS9jb25maWd1cmUuaW4KK0BAIC03Nyw5ICs3Nyw2IEBAIGlmIHRlc3QgIiR7R0NDfSIgPSAieWVzIjsgdGhlbgorIAlBQ19NU0dfUkVTVUxUKCR7R0NDX3ZlcnNpb259KQorIGZpCisgCistZG5sIG1vcmUgYXV0b21ha2Ugc3R1ZmYKKy1BTV9DX1BST1RPVFlQRVMKKy0KKyBBQ19DSEVDS19IRUFERVIoZG1hbGxvYy5oKQorIGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2RtYWxsb2NfaH0iID0gInllcyI7IHRoZW4KKyAJQU1fV0lUSF9ETUFMTE9DCitJbmRleDogbGFtZS0zLjk5LjUvZG9jL2h0bWwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2RvYy9odG1sL01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvZG9jL2h0bWwvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjICRJZDogTWFrZWZpbGUuYW0sdiAxLjcgMjAxMC8wOS8zMCAyMDo1ODo0MCBqYXowMDEgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCisgZG9jZGlyID0gJChkYXRhZGlyKS9kb2MKKyBwa2dkb2NkaXIgPSAkKGRvY2RpcikvJChQQUNLQUdFKQorSW5kZXg6IGxhbWUtMy45OS41L2xpYm1wM2xhbWUvaTM4Ni9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhbWUtMy45OS41Lm9yaWcvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyAkSWQ6IE1ha2VmaWxlLmFtLHYgMS4yNiAyMDExLzA0LzA0IDA5OjQyOjM0IGFsZWlkaW5nZXIgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiAkKHRvcF9zcmNkaXIpL2Fuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKyBERUZTID0gQERFRlNAIEBDT05GSUdfREVGU0AKKyAKK0luZGV4OiBsYW1lLTMuOTkuNS9kb2MvbWFuL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9kb2MvbWFuL01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvZG9jL21hbi9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgJElkOiBNYWtlZmlsZS5hbSx2IDEuMSAyMDAwLzEwLzIyIDExOjM5OjQ0IGFsZWlkaW5nZXIgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCisgbWFuX01BTlMgPSBsYW1lLjEKKyBFWFRSQV9ESVNUID0gJHttYW5fTUFOU30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9uby1ndGsxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL25vLWd0azEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4ZDdmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9uby1ndGsxLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworIyBBY3F1aXJlZCBmcm9tIE9wZW5FbWJlZGRlZAorCistLS0gbGFtZS0zLjk2LjEvY29uZmlndXJlLmlufm5vLWd0azEucGF0Y2gJMjAwNC0wNy0yNSAxNTo1MjoxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBsYW1lLTMuOTYuMS9jb25maWd1cmUuaW4JMjAwNC0wOS0xMCAxNTo1NDozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNjMsNyArMzYzLDEyIEBACisgCisgZG5sIGNvbmZpZ3VyZSB1c2Ugb2YgZmVhdHVyZXMKKyAKKy1BTV9QQVRIX0dUSygxLjIuMCwgSEFWRV9HVEs9InllcyIsIEhBVkVfR1RLPSJubyIpCisrI0FNX1BBVEhfR1RLKDEuMi4wLCBIQVZFX0dUSz0ieWVzIiwgSEFWRV9HVEs9Im5vIikKKytIQVZFX0dUSz0ibm8iCisrR1RLX0NGTEFHUz0iIgorK0dUS19MSUJTPSIiCisrQUNfU1VCU1QoR1RLX0NGTEFHUykKKytBQ19TVUJTVChHVEtfTElCUykKKworIGRubCBFbGVjdHJpY0ZlbmNlIG1hbGxvYyBkZWJ1Z2dpbmcKKyBBQ19NU0dfQ0hFQ0tJTkcodXNlIG9mIEVsZWN0cmljRmVuY2UgbWFsbG9jIGRlYnVnZ2luZykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWVfMy45OS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Nzc2MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWVfMy45OS41LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiSGlnaCBxdWFsaXR5IE1QMyBhdWRpbyBlbmNvZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xhbWUuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0yOTAmYXRpZD0xMDAyOTAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK0RFUEVORFMgPSAibmN1cnNlcyBnZXR0ZXh0LW5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ2YmRhMDBmZmJiMGJhMWRhYzIyZjhkMDg3ZjU0ZDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9sYW1lLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9YTIyNTgxODJjNTkzYzM5OGQxNWE0ODI2MjEzMGE5MmIgXAorIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xhbWUvbGFtZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tZ3RrMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NDgzNWIzMTNkNGE4YjY4ZjUzNDk4MTZkMzNlMDdjZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNDM0NmI0MTU4ZTRhZjNiZDlmMmUxOTRiYjIzZWI0NzNjNzVmYjczNzcwMTE1MjMzNTMxOTZiMTliOWEyM2ZmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRVMgKz0gImxpYm1wM2xhbWUgbGlibXAzbGFtZS1kZXYiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vbGFtZSIKK0ZJTEVTX2xpYm1wM2xhbWUgPSAiJHtsaWJkaXJ9L2xpYm1wM2xhbWUuc28uKiIKK0ZJTEVTX2xpYm1wM2xhbWUtZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9LyoiCitGSUxFU18ke1BOfS1kZXYgPSAiIgorCitDQUNIRURfQ09ORklHVVJFVkFSU19hcHBlbmRfeDg2ID0gIiBhY19jdl9oZWFkZXJfZW1taW50cmluX2g9bm8gYWNfY3ZfaGVhZGVyX3htbWludHJpbl9oPW5vIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Mi9idWlsZGNsZWFudXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyL2J1aWxkY2xlYW51cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTY4MTAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Mi9idWlsZGNsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorSXQgbWFrZXMgbXVjaCBtb3JlIHNlbnNlIHRvIGNvbnRyb2wgb3VyIG93biBDRkxBR1MgYW5kIGF2b2lkaW5nIGZQSUMgYnJlYWtzCitzb21lIGFyY2hlcyB0b28uIEFzc3VtZSB3ZSBrbm93IHdoYXQgd2UncmUgZG9pbmcgYW5kIHJlbW92ZSBhbGwgdGhlIG1lc3NpbmcgCithcm91bmQuCisKK1JQIDIzLzIvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYTUyZGVjLTAuNy40L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGE1MmRlYy0wLjcuNC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEwLTAyLTIzIDE0OjUxOjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGE1MmRlYy0wLjcuNC9jb25maWd1cmUuaW4JMjAxMC0wMi0yMyAxNDo1MjozNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNCw2MiArMTQsNiBAQAorIEFDX1BST0dfQ0MKKyBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIAorLWlmIHRlc3QgeCIkR0NDIiA9IHgieWVzIjsgdGhlbgorLQorLSAgICBkbmwgR0NDLXNwZWNpZmljIGZsYWdzIC0gdHJ5IHRvIG9wdGltaXplIHRoZW0gc29tZXRpbWUKKy0gICAgZG5sIC1XYWxsIC1XZXJyb3IgbW92ZWQgdG8gdGhlIGVuZCB0byBub3QgZGlzdHVyYiB0aGUgY29uZmlndXJlIHNjcmlwdAorLQorLSAgICBkbmwgLU8zCistICAgIGNoYW5nZXF1b3RlKDw8LD4+KQorLSAgICBPUFRfQ0ZMQUdTPWBlY2hvICIkQ0ZMQUdTInxzZWQgInMvLU9bMC05XSovL2ciYAorLSAgICBjaGFuZ2VxdW90ZShbLF0pCistICAgIE9QVF9DRkxBR1M9IiRPUFRfQ0ZMQUdTIC1PMyIKKy0gICAgQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKQorLQorLSAgICBkbmwgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKy0gICAgT1BUX0NGTEFHUz0iJENGTEFHUyAtZm9taXQtZnJhbWUtcG9pbnRlciIKKy0gICAgQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKQorLQorLSAgICBkbmwgYXJjaC1zcGVjaWZpYyBmbGFncworLSAgICBjYXNlICIkaG9zdCIgaW4KKy0gICAgaT84Ni0qIHwgaz8tKikKKy0JY2FzZSAiJGhvc3QiIGluCistCWkzODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1pMzg2Ijs7CistCWk0ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1pNDg2Ijs7CistCWk1ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1wZW50aXVtIjs7CistCWk2ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1wZW50aXVtcHJvIjs7CistCWs2LSopICAgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1rNiI7OworLQllc2FjCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBzcGFyYy0qIHwgc3BhcmM2NC0qKQorLQlPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tdHVuZT11bHRyYXNwYXJjIgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgbWlwcy1zZ2ktaXJpeDYuKikJZG5sIGRvIHdlIG5lZWQgdG8gYmUgdGhhdCBzcGVjaWZpYyA/CistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLW1hYmk9NjQiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBlc2FjCistZWxpZiB0ZXN0IHgiJENDIiA9IHgidGNjIiAtYSB4ImAkQ0MgLXZlcnNpb24gMj4mMSB8IGdyZXAgVGVuRFJBYCIgIT0geCIiOyB0aGVuCistICAgIGRubCBUZW5EUkEgcG9ydGFiaWxpdHkgY2hlY2tpbmcgY29tcGlsZXIKKy0gICAgVEVORFJBPXllcworLSAgICBDRkxBR1M9Ii1YcCAtWWFuc2kgLWZgcHdkYC9pbmNsdWRlL3RlbmRyYS5oIC1ERUxJREVfQ09ERSIKKy0gICAgZW5hYmxlX21saWI9bm8KKy0gICAgZW5hYmxlX29zcz1ubworLSAgICBlbmFibGVfc29sYXJpc19hdWRpbz1ubworLWVsaWYgdGVzdCB4IiRDQyIgPSB4ImljYyIgLWEgeCJgJENDIC1WIDI+JjEgfCBncmVwIEludGVsYCIgIT0geCIiOyB0aGVuCistICAgIGRubCBJbnRlbCBDKysgY29tcGlsZXIKKy0gICAgQ0ZMQUdTPSItZyAtTzMgLXVucm9sbCAtaXAiCistZWxzZQorLSAgICBkbmwgbm9uLWdjYyBmbGFncyAtIHdlIHByb2JhYmx5IG5lZWQgZXhhY3QgY29uZmlndXJhdGlvbiB0cmlwbGV0cyBoZXJlLgorLSAgICBjYXNlICIkaG9zdCIgaW4KKy0gICAgbWlwcy1zZ2ktaXJpeDYuKikKKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAtNjQiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBzcGFyYy1zdW4tc29sYXJpcyopCistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLXhDQyAtZmFzdCAteE81IgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgZXNhYworLWZpCistCisgZG5sIENoZWNrcyBmb3IgbGlidG9vbCAtIHRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIHdlIHNldCBjZmxhZ3MKKyBBQ19ESVNBQkxFX1NIQVJFRAorIEFDX0xJQlRPT0xfV0lOMzJfRExMCitJbmRleDogYTUyZGVjLTAuNy40L2xpYmE1Mi9jb25maWd1cmUuaW5jbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGE1MmRlYy0wLjcuNC5vcmlnL2xpYmE1Mi9jb25maWd1cmUuaW5jbAkyMDEwLTAyLTIzIDE0OjUxOjQ0LjAwMDAwMDAwMCArMDAwMAorKysrIGE1MmRlYy0wLjcuNC9saWJhNTIvY29uZmlndXJlLmluY2wJMjAxMC0wMi0yMyAxNDo1MTo1OS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDkgKzEsNiBAQAorIEFDX1NVQlNUKFtMSUJBNTJfQ0ZMQUdTXSkKKyBBQ19TVUJTVChbTElCQTUyX0xJQlNdKQorIAorLWRubCBhdm9pZCAtZlBJQyB3aGVuIHBvc3NpYmxlCistTElCQTUyX0NGTEFHUz0iJExJQkE1Ml9DRkxBR1MgLXByZWZlci1ub24tcGljIgorLQorIEFDX0FSR19FTkFCTEUoW2RvdWJsZV0sCisgICAgIFsgIC0tZW5hYmxlLWRvdWJsZSAgICAgICAgIHVzZSBkb3VibGUtcHJlY2lzaW9uIHNhbXBsZXNdKQorIGlmIHRlc3QgeCIkZW5hYmxlX2RvdWJsZSIgPSB4InllcyI7IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTJfMC43LjQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyXzAuNy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YjY2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyXzAuNy40LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQVRTQyBBLzUyIHN1cnJvdW5kIHNvdW5kIHN0cmVhbSBkZWNvZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmE1Mi5zb3VyY2Vmb3JnZS5uZXQvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisJCQlmaWxlOi8vaW5jbHVkZS9hNTIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT04MTE1MmNlYjM1NjJiZjIwYTYwZDFiNjAxODE3NWRkMSIKK1NFQ1RJT04gPSAibGlicyIKK1BSID0gInI0IgorCitpbmhlcml0IGF1dG90b29scworCitTUkNfVVJJID0gImh0dHA6Ly9saWJhNTIuc291cmNlZm9yZ2UubmV0L2ZpbGVzL2E1MmRlYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYnVpbGRjbGVhbnVwLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2FhOWY1YmM0NDIzMmRjOGFlZWE3NzNmZWE1NmJlODAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTIxZDcyNGFiM2IzOTMzMzMwMTk0MzUzNjg3ZGY4MmM0NzViNWRmYjk5NzUxM2VlZjRjMjVkZTZjODY1ZWMzMyIKK1MgPSAiJHtXT1JLRElSfS9hNTJkZWMtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtc2hhcmVkICIKKworUEFDS0FHRVMgPSsgImE1MmRlYyBhNTJkZWMtZG9jIgorCitGSUxFU19hNTJkZWMgPSAiICR7YmluZGlyfS8qICIKK0ZJTEVTX2E1MmRlYy1kb2MgPSAiICR7bWFuZGlyfS9tYW4xLyogIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjRiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMKQEAgLTAsMCArMSwxNDYgQEAKK1NVTU1BUlkgPSAiT3BlbiBzb3VyY2UgYXVkaW8gYW5kIHZpZGVvIHByb2Nlc3NpbmcgdG9vbHMgYW5kIGxpYnJhaXJpZXMiCitERVNDUklQVElPTiA9ICJMaWJhdiBpcyBhIGZyaWVuZGx5IGFuZCBjb21tdW5pdHktZHJpdmVuIGVmZm9ydCB0byBwcm92aWRlIGl0cyB1c2VycyBcCisgICAgICAgICAgICAgICB3aXRoIGEgc2V0IG9mIHBvcnRhYmxlLCBmdW5jdGlvbmFsIGFuZCBoaWdoLXBlcmZvcm1hbmNlIGxpYnJhcmllcyBmb3IgXAorICAgICAgICAgICAgICAgZGVhbGluZyB3aXRoIG11bHRpbWVkaWEgZm9ybWF0cyBvZiBhbGwgc29ydHMuIEl0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgXAorICAgICAgICAgICAgICAgRkZtcGVnIGNvZGViYXNlLCBidXQgZ29lcyBpdHMgb3duIHdheSB0aGVzZSBkYXlzLCBwcm92aWRpbmcgaXRzIHVzZXJzIFwKKyAgICAgICAgICAgICAgIHdpdGggcmVsaWFibGUgcmVsZWFzZXMgYW5kIGEgY2xlYXIgdmlzaW9uIGhvdyB0byBnbyBmb3J3YXJkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJhdi5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJhdi5vcmcvcmVsZWFzZXMvJHtCUH0udGFyLnh6IgorCisjIFByb3ZpZGVzIGZmbXBlZyBjb21wYXQsIHNlZSBodHRwOi8vbGliYXYub3JnL2Fib3V0Lmh0bWwKK1BST1ZJREVTID0gImZmbXBlZyIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0RFUEVORFMgPSAiYWxzYS1saWIgemxpYiBsaWJvZ2cgeWFzbS1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCID0gIiR7U30vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworRlVMTF9PUFRJTUlaQVRJT05fYXJtdjdhID0gIi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU80IC1mZmFzdC1tYXRoIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIiR7RlVMTF9PUFRJTUlaQVRJT059IgorCitFWFRSQV9GRkNPTkZfYXJtdjdhID0gIi0tY3B1PWNvcnRleC1hOCIKK0VYVFJBX0ZGQ09ORiA/PSAiIgorCitQQUNLQUdFQ09ORklHID8/PSAiYnppcDIgeDI2NCB0aGVvcmEgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0tZW5hYmxlLWJ6bGliLC0tZGlzYWJsZS1iemxpYixiemlwMiIKK1BBQ0tBR0VDT05GSUdbZmFhY10gPSAiLS1lbmFibGUtbGliZmFhYywtLWRpc2FibGUtbGliZmFhYyxmYWFjIgorUEFDS0FHRUNPTkZJR1tnc21dID0gIi0tZW5hYmxlLWxpYmdzbSwtLWRpc2FibGUtbGliZ3NtLGxpYmdzbSIKK1BBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtaW5kZXY9amFjaywtLWRpc2FibGUtaW5kZXY9amFjayxqYWNrIgorUEFDS0FHRUNPTkZJR1tsaWJ2b3JiaXNdID0gIi0tZW5hYmxlLWxpYnZvcmJpcywtLWRpc2FibGUtbGlidm9yYmlzLGxpYnZvcmJpcyIKK1BBQ0tBR0VDT05GSUdbbXAzbGFtZV0gPSAiLS1lbmFibGUtbGlibXAzbGFtZSwtLWRpc2FibGUtbGlibXAzbGFtZSxsYW1lIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3NjaHJvZWRpbmdlcl0gPSAiLS1lbmFibGUtbGlic2Nocm9lZGluZ2VyLC0tZGlzYWJsZS1saWJzY2hyb2VkaW5nZXIsc2Nocm9lZGluZ2VyIgorUEFDS0FHRUNPTkZJR1tzcGVleF0gPSAiLS1lbmFibGUtbGlic3BlZXgsLS1kaXNhYmxlLWxpYnNwZWV4LHNwZWV4IgorUEFDS0FHRUNPTkZJR1t0aGVvcmFdID0gIi0tZW5hYmxlLWxpYnRoZW9yYSwtLWRpc2FibGUtbGlidGhlb3JhLGxpYnRoZW9yYSIKK1BBQ0tBR0VDT05GSUdbdmFhcGldID0gIi0tZW5hYmxlLXZhYXBpLC0tZGlzYWJsZS12YWFwaSxsaWJ2YSIKK1BBQ0tBR0VDT05GSUdbdnB4XSA9ICItLWVuYWJsZS1saWJ2cHgsLS1kaXNhYmxlLWxpYnZweCxsaWJ2cHgiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExZ3JhYiwtLWRpc2FibGUteDExZ3JhYix2aXJ0dWFsL2xpYngxMSBsaWJ4Zml4ZXMgbGlieGV4dCB4cHJvdG8gdmlydHVhbC9saWJzZGwiCitQQUNLQUdFQ09ORklHW3gyNjRdID0gIi0tZW5hYmxlLWxpYngyNjQsLS1kaXNhYmxlLWxpYngyNjQseDI2NCIKKworIyBDaGVjayBjb2RlY3MgdGhhdCByZXF1aXJlIC0tZW5hYmxlLW5vbmZyZWUKK1VTRV9OT05GUkVFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnUEFDS0FHRUNPTkZJRycsIFsgJ2ZhYWMnLCAnb3BlbnNzbCcgXSwgJ3llcycsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgIC0tZW5hYmxlLWdwbCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRV9OT05GUkVFJywgJ3llcycsICctLWVuYWJsZS1ub25mcmVlJywgJycsIGQpfSBcCisgICAgLS1lbmFibGUtYXZmaWx0ZXIgXAorICAgIFwKKyAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIFwKKyAgICAtLWVuYWJsZS1hdnNlcnZlciBcCisgICAgLS1lbmFibGUtYXZwbGF5IFwKKyAgICAtLWxkPSIke0NDTER9IiBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tZW5hYmxlLWhhcmRjb2RlZC10YWJsZXMgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKKyAgICAtLXNobGliZGlyPSR7bGliZGlyfSBcCisiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAjIFdlIGRvbid0IGhhdmUgVEFSR0VUX1BSRUZJWC1wa2djb25maWcKKyAgICBzZWQgLWkgJy9wa2dfY29uZmlnX2RlZmF1bHQ9IiR7Y3Jvc3NfcHJlZml4fSR7cGtnX2NvbmZpZ19kZWZhdWx0fSIvZCcgJHtTfS9jb25maWd1cmUKKyAgICBta2RpciAtcCAke0J9CisgICAgY2QgJHtCfQorICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorICAgIHNlZCAtaSAtZSBzOk9zOk80OmcgJHtCfS9jb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9saWJhdmZpbHRlci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vbGliYXZmaWx0ZXIvCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS12aG9vay1kYmcgJHtQTn0tdmhvb2sgZmZtcGVnLXgyNjQtcHJlc2V0cyIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIoYXYoY29kZWN8ZGV2aWNlfGZpbHRlcnxmb3JtYXR8dXRpbCl8c3dzY2FsZSkuKiIKKworUlNVR0dFU1RTXyR7UE59ID0gIm1wbGF5ZXIiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS8ke1BOfSIKKworRklMRVNfJHtQTn0tdmhvb2sgPSAiJHtsaWJkaXJ9L3Zob29rIgorRklMRVNfJHtQTn0tdmhvb2stZGJnICs9ICIke2xpYmRpcn0vdmhvb2svLmRlYnVnIgorCitGSUxFU19mZm1wZWcteDI2NC1wcmVzZXRzID0gIiR7ZGF0YWRpcn0vKi5hdnByZXNldCIKKworTEVBRF9TT05BTUUgPSAibGliYXZjb2RlYy5zbyIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0iCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGF2X2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGF2X3BrZ2NvbmZpZyA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGtnY29uZmlnJykKKworICAgICMgUnVudGltZSBwYWNrYWdlCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvXC4uKicsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworICAgICMgRGV2ZWxvcG1lbnQgcGFja2FnZXMgKC1kZXYsIC1zdGF0aWNkZXYpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfcGtnY29uZmlnLCAnXmxpYiguKilcLnBjJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5hJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLXN0YXRpY2RldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UgLSBzdGF0aWMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ2k1ODYnLCAnaTY4NicgXToKKyAgICAgICAgIyBsaWJhdiBjYW4ndCBiZSBidWlsZCB3aXRoIC1mUElDIGZvciAzMi1iaXQgeDg2CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdJTlNBTkVfU0tJUF8lcycgJSBwa2csICcgdGV4dHJlbCcpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2L2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMzFjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBDVkUtMjAxNC05Njc2LgorCitodHRwczovL3NlY3VyaXR5LXRyYWNrZXIuZGViaWFuLm9yZy90cmFja2VyL0NWRS0yMDE0LTk2NzYKK2h0dHBzOi8vZ2l0LmxpYmF2Lm9yZy8/cD1saWJhdi5naXQ7YT1jb21taXQ7aD1iM2YwNDY1NzM2OGEzMmE5OTAzNDA2Mzk1Zjg2NWUyMzBiMWRlMzQ4CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIGIzZjA0NjU3MzY4YTMyYTk5MDM0MDYzOTVmODY1ZTIzMGIxZGUzNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMdWNhIEJhcmJhdG8gPGx1X3plcm9AZ2VudG9vLm9yZz4KK0RhdGU6IE1vbiwgNSBKYW4gMjAxNSAxMDo0MDo0MSArMDEwMAorU3ViamVjdDogW1BBVENIXSBzZWdtZW50OiBGaXggdGhlIGZhaWx1cmUgcGF0aHMKKworQSBmYWlsdXJlIGluIHNlZ21lbnRfZW5kKCkgb3Igc2VnbWVudF9zdGFydCgpIHdvdWxkIGxlYWQgdG8gZnJlZWluZworYSBkYW5nbGluZyBwb2ludGVyIGFuZCBpbiBnZW5lcmFsIGZ1cnRoZXIgY2FsbHMgdG8gc2VnX3dyaXRlX3BhY2tldCgpCitvciB0byBzZWdfd3JpdGVfdHJhaWxlcigpIHdvdWxkIGhhdmUgdGhlIHNhbWUgZmF1bHR5IGJlaGF2aW91ci4KKworQ0M6IGxpYmF2LXN0YWJsZUBsaWJhdi5vcmcKK1JlcG9ydGVkLUJ5OiBsdW9kYWxvbmdkZUBnbWFpbC5jb20KKy0tLQorIGxpYmF2Zm9ybWF0L3NlZ21lbnQuYyB8IDMyICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvc2VnbWVudC5jIGIvbGliYXZmb3JtYXQvc2VnbWVudC5jCitpbmRleCA1MmRhNmI5Li5iY2ZkMWY5IDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvc2VnbWVudC5jCisrKysgYi9saWJhdmZvcm1hdC9zZWdtZW50LmMKK0BAIC0xODQsNiArMTg0LDEzIEBAIHN0YXRpYyB2b2lkIGNsb3NlX251bGxfY3R4KEFWSU9Db250ZXh0ICpwYikKKyAgICAgYXZfZnJlZShwYik7CisgfQorIAorK3N0YXRpYyB2b2lkIHNlZ19mcmVlX2NvbnRleHQoU2VnbWVudENvbnRleHQgKnNlZykKKyt7CisrICAgIGF2aW9fY2xvc2VwKCZzZWctPnBiKTsKKysgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHNlZy0+YXZmKTsKKysgICAgc2VnLT5hdmYgPSBOVUxMOworK30KKysKKyBzdGF0aWMgaW50IHNlZ193cml0ZV9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQorIHsKKyAgICAgU2VnbWVudENvbnRleHQgKnNlZyA9IHMtPnByaXZfZGF0YTsKK0BAIC0yNjUsMTIgKzI3Miw5IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCisgICAgIH0KKyAKKyBmYWlsOgorLSAgICBpZiAocmV0KSB7CistICAgICAgICBpZiAoc2VnLT5saXN0KQorLSAgICAgICAgICAgIGF2aW9fY2xvc2Uoc2VnLT5wYik7CistICAgICAgICBpZiAoc2VnLT5hdmYpCistICAgICAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHNlZy0+YXZmKTsKKy0gICAgfQorKyAgICBpZiAocmV0IDwgMCkKKysgICAgICAgIHNlZ19mcmVlX2NvbnRleHQoc2VnKTsKKysKKyAgICAgcmV0dXJuIHJldDsKKyB9CisgCitAQCAtMjgyLDYgKzI4Niw5IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCisgICAgIGludDY0X3QgZW5kX3B0cyA9IHNlZy0+cmVjb3JkaW5nX3RpbWUgKiBzZWctPm51bWJlcjsKKyAgICAgaW50IHJldCwgY2FuX3NwbGl0ID0gMTsKKyAKKysgICAgaWYgKCFvYykKKysgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisrCisgICAgIGlmIChzZWctPmhhc192aWRlbykgeworICAgICAgICAgY2FuX3NwbGl0ID0gc3QtPmNvZGVjLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTyAmJgorICAgICAgICAgICAgICAgICAgICAgcGt0LT5mbGFncyAmIEFWX1BLVF9GTEFHX0tFWTsKK0BAIC0zMjIsMTEgKzMyOSw4IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCisgICAgIHJldCA9IGZmX3dyaXRlX2NoYWluZWQob2MsIHBrdC0+c3RyZWFtX2luZGV4LCBwa3QsIHMpOworIAorIGZhaWw6CistICAgIGlmIChyZXQgPCAwKSB7CistICAgICAgICBpZiAoc2VnLT5saXN0KQorLSAgICAgICAgICAgIGF2aW9fY2xvc2Uoc2VnLT5wYik7CistICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQob2MpOworLSAgICB9CisrICAgIGlmIChyZXQgPCAwKQorKyAgICAgICAgc2VnX2ZyZWVfY29udGV4dChzZWcpOworIAorICAgICByZXR1cm4gcmV0OworIH0KK0BAIC0zMzUsNyArMzM5LDExIEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3RyYWlsZXIoc3RydWN0IEFWRm9ybWF0Q29udGV4dCAqcykKKyB7CisgICAgIFNlZ21lbnRDb250ZXh0ICpzZWcgPSBzLT5wcml2X2RhdGE7CisgICAgIEFWRm9ybWF0Q29udGV4dCAqb2MgPSBzZWctPmF2ZjsKKy0gICAgaW50IHJldDsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmICghb2MpCisrICAgICAgICBnb3RvIGZhaWw7CisrCisgICAgIGlmICghc2VnLT53cml0ZV9oZWFkZXJfdHJhaWxlcikgeworICAgICAgICAgaWYgKChyZXQgPSBzZWdtZW50X2VuZChvYywgMCkpIDwgMCkKKyAgICAgICAgICAgICBnb3RvIGZhaWw7CistLSAKKzIuNC4xLjMxNC5nOTUzMmVhZAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdl85LjE4LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXZfOS4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBhNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXZfOS4xOC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgbGliYXYuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NWU4MzgwNjhhNzVmYjg4ZTFiNGVhMDU0NmJjMTZmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwODc1ZTgzNWRhNjgzZWVmMWE3YmFjNzVlMTg4NDYzNDE5NDE0OWQ3NDc5ZDE1MzhiYTlmYmUxNjE0ZDA2NmQ3IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbGliYXYtZml4LUNWRS0yMDE0LTk2NzYucGF0Y2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJwb3N0cHJvY19naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJwb3N0cHJvY19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhYTUwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkZGbXBlZyBkZXJpdmVkIHBvc3Rwcm9jZXNzaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnZpZGVvbGFuLm9yZy8/cD1saWJwb3N0cHJvYy5naXQ7YT1zdW1tYXJ5IgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJhdiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKKyMgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGxpYmF2IHdoaWNoIGhhcyBjb21tZXJjaWFsIGZsYWcKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworUFYgPSAiNTIuMy4wK2dpdCR7U1JDUFZ9IgorCitTUkNSRVYgPSAiODExZGIzYjk1N2RmZGUyNGFlZjJkMGY4MmUyOTdlNWJmNTUyZDg3MyIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9sdS16ZXJvL3Bvc3Rwcm9jO3Byb3RvY29sPWh0dHBzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworRlVMTF9PUFRJTUlaQVRJT05fYXJtdjdhID0gIi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU80IC1mZmFzdC1tYXRoIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIiR7RlVMTF9PUFRJTUlaQVRJT059IgorCitFWFRSQV9GRkNPTkZfYXJtdjdhID0gIi0tY3B1PWNvcnRleC1hOCIKK0VYVFJBX0ZGQ09ORiA/PSAiIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAtLWVuYWJsZS1ncGwgXAorICAgIC0tZW5hYmxlLXBvc3Rwcm9jIFwKKyAgICBcCisgICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tc2hsaWJkaXI9IiR7bGliZGlyfSIgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAke1N9L2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvYWRkcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9hZGRwa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkNDBjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvYWRkcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWQzdGFnLTAuMTUuMWIub3JpZy9NYWtlZmlsZS5hbQkyMDA5LTA3LTI5IDA5OjI5OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL01ha2VmaWxlLmFtCTIwMDktMDctMjkgMDk6Mjk6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtMjcsNiArMjcsOSBAQAorIGxpYl9MVExJQlJBUklFUyA9CWxpYmlkM3RhZy5sYQorIGluY2x1ZGVfSEVBREVSUyA9CWlkM3RhZy5oCisgCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gaWQzdGFnLnBjCisrCisgIyMgRnJvbSB0aGUgbGlidG9vbCBkb2N1bWVudGF0aW9uIG9uIGxpYnJhcnkgdmVyc2lvbmluZzoKKyAjIworICMjIENVUlJFTlQKK0luZGV4OiBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZDN0YWctMC4xNS4xYi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTI5IDA5OjI3OjE1LjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTI5IDA5OjI3OjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwMSw1ICsyMDEsNSBAQAorIGRubCBBQ19TVUJTVChMVExJQk9CSlMpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtc3ZjKysvTWFrZWZpbGUgIFwKKy0JbGliaWQzdGFnLmxpc3RdKQorKwlsaWJpZDN0YWcubGlzdCBpZDN0YWcucGNdKQorIEFDX09VVFBVVAorSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL2lkM3RhZy5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2lkM3RhZy5wYy5pbgkyMDA5LTA3LTI5IDA5OjI5OjEwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IGlkM3RhZworK0Rlc2NyaXB0aW9uOiBJRDMgdGFnIHJlYWRpbmcgbGlicmFyeQorK1JlcXVpcmVzOgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1saWQzdGFnIC1segorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDVmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTM1OTkyODAmZ3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDldCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYyBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMKKy0tLSBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwNC0wMS0yNCAwMToyMjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMJMjAxMy0wMS0wMyAwNjo0MTowMi43MzQ4MzUwMTQgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBACisKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIGRubCBTeXN0ZW0gdHlwZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWdfMC4xNS4xYi5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWdfMC4xNS4xYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE4YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBJRDMgdGFncyBpbiBNUDMgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21hZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDkiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTVlNjI3OWVmYjg3YzI2YzZlNWU3YTY4MzE3YTZhODdhIFwKKwkJCWZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT04NmFjNjhiNjdmMDU0YjdhZmRlOWUxNDliYmMzZmU2MyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiemxpYiBncGVyZi1uYXRpdmUiCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWFycy5vcmcvcHViL21wZWcvbGliaWQzdGFnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRwa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImU1ODA4YWQ5OTdiYTMyYzQ5ODgwMzgyMjA3ODc0OGMzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzZGE0ZjZlNzk5NzI3OGY4YTNmZWY0YzZhMzcyZDM0MmY3MDUwNTFkMWVlYjZhNDZhODZiMDM2MTBlMjYxNTEiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpZDN0YWctJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hZGQtcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hZGQtcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OWRjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorSGVyZSBpcyBhIHBhdGNoIGZvciBhZGRpbmcgcGtnLWNvbmZpZyBzdXBwb3J0IHRvIGxpYm1hZC4KK0l0IHdvdWxkIG1ha2UgbGlmZSBhIGJpdCBlYXNpZXIgZm9yIGRpc3RybyBtYWludGFpbmVycyBpZiB0aGlzIHdhcyBhcHBsaWVkLgorSW4gY2FzZSB5b3UgZGlkbid0IGtub3csIHBrZy1jb25maWcgaXMgYSB0b29sIGZvciBwcm92aWRpbmcgTERGTEFHUyBhbmQKK0NGTEFHUyBmb3IgcGFja2FnZXMgdXNpbmcgc2hhcmVkIGxpYnJhcmllcy4gSXQncyBvbiBmcmVlZGVza3RvcC5vcmcuCitEZWJpYW4gaGFzIGFscmVhZHkgYmVlbiBkaXN0cmlidXRpbmcgdGhlIHBrZy1jb25maWcgZmlsZSBtYWQucGMgd2l0aAorbGlibWFkIGZvciBzb21lIHRpbWUsIGFuZCBwZW9wbGUgZGV2ZWxvcGluZyBvbiBkZWJpYW4gKG5vdGFibHkgeG1tczIgCitkZXZlbG9wZXJzKSBoYXZlIHN0YXJ0ZWQgcmVseWluZyBvbiB0aGlzIHN1cHBvcnQgYmVpbmcgcHJlc2VudCwgY2F1c2luZworc29tZSBjb25mdXNpb24gZm9yIHBlb3BsZSBpbnN0YWxsaW5nIGZyb20gc291cmNlIGFuZCBvbiBzb21lIEJTRHMgd2hpY2gKK2RvIG5vdCBwcm92aWRlIG1hZC5wYyAoZ29vZ2xlOiBwa2djb25maWcgbGlibWFkKS4KKworRU1ICisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS1oMzFnelpFdE5MVHFPamxGCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSZxdW90O2xpYm1hZC0wLjE1LjFiLXBrZ2NvbmZpZy5wYXRjaCZxdW90OworCitkaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCistLS0gbGlibWFkLTAuMTUuMWIub2xkL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTIzIDEwOjQxOjMyLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTA4LTA3IDAyOjI1OjI0LjYzMzQ2MjE2OCArMDIwMAorQEAgLTQyOSw1ICs0MjksNSBAQAorIGRubCBBQ19TVUJTVChMVExJQk9CSlMpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtc3ZjKysvTWFrZWZpbGUgIFwKKy0JbGlibWFkLmxpc3RdKQorKwlsaWJtYWQubGlzdCBtYWQucGNdKQorIEFDX09VVFBVVAorZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvbWFkLnBjLmluIGxpYm1hZC0wLjE1LjFiL21hZC5wYy5pbgorLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9tYWQucGMuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9tYWQucGMuaW4JMjAwNC0wOC0wNyAwMjowNDo1OS42MTc2OTI4NzIgKzAyMDAKK0BAIC0wLDAgKzEsMTQgQEAKKysjIGxpYm1hZCBwa2ctY29uZmlnIHNvdXJjZSBmaWxlCisrCisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogbWFkCisrRGVzY3JpcHRpb246IE1QRUcgQXVkaW8gRGVjb2RlcgorK1ZlcnNpb246IEBWRVJTSU9OQAorK1JlcXVpcmVzOgorK0NvbmZsaWN0czoKKytMaWJzOiAtTCR7bGliZGlyfSAtbG1hZCAtbG0KKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0gbGlibWFkLTAuMTUuMWIvTWFrZWZpbGUuYW0KKy0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0JMjAwNC0wMi0xNyAwMzowMjowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9NYWtlZmlsZS5hbQkyMDA0LTA4LTA3IDAyOjAzOjE5Ljg1OTg1ODM2OCArMDIwMAorQEAgLTI0LDYgKzI0LDkgQEAKKyBTVUJESVJTID0JCQorIERJU1RfU1VCRElSUyA9CQltc3ZjKysKKyAKKytwa2djb25maWdkaXIgPQkJJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0JbWFkLnBjCisrCisgbGliX0xUTElCUkFSSUVTID0JbGlibWFkLmxhCisgaW5jbHVkZV9IRUFERVJTID0JbWFkLmgKKyAKK0BAIC0zNCw3ICszNyw4IEBACisgbWluaW1hZF9MREFERCA9CQlsaWJtYWQubGEKKyAKKyBFWFRSQV9ESVNUID0JCW1hZC5oLnNlZCAgXAorLQkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTgorKwkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTiBcCisrCQkJbWFkLnBjLmluCisgCisgZXhwb3J0ZWRfaGVhZGVycyA9CXZlcnNpb24uaCBmaXhlZC5oIGJpdC5oIHRpbWVyLmggc3RyZWFtLmggZnJhbWUuaCAgXAorIAkJCXN5bnRoLmggZGVjb2Rlci5oCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU0NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Bhc3MgZm9yZWlnbiB0byBBTV9JTklUX0FVVE9NQUtFIHNvIGl0IGRvZXNuJ3QgZW5mb3JjZSBHTlUgc3RyaWN0bmVzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNjAyZmQzLi5lMDc1Yjg2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yOSArMjkgQEAgQUNfQ09ORklHX1NSQ0RJUihbZGVjb2Rlci5oXSkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzdhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitnY2MgNC40IGRpZCB0aGlzOiBUaGUgTUlQUyBwb3J0IG5vIGxvbmdlciByZWNvZ25pemVzIHRoZSBoICBhc20gY29uc3RyYWludC4gSXQgd2FzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhpcyBjb25zdHJhaW50IGluIG9yZGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgdW5wcmVkaWN0YWJsZSBjb2RlIHNlcXVlbmNlcy4gCisKK3NvIHRoZSBsaWJtYWQgYnVpbGQgd2l0aCBnY2MtNC41LjAgd2FzIGZhaWxpbmcuCisKK0ZvdW5kIGEgc29sdXRpb24gaGVyZToKKworaHR0cDovL3VzLmdlbmVyYXRpb24tbnQuY29tL2Fuc3dlci9idWctNTY4NDE4LWxpYm1hZDAtZGV2LW1wZzMyMS1jb21waWxhdGlvbi1lcnJvcnMtbWlwcy1taXBzZWwtYXJjaGl0ZWN0dXJlcy1oZWxwLTE2OTAzMzQ1MS5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisyMDEwLzA3LzI5CitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogbGlibWFkLTAuMTUuMWIvZml4ZWQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm1hZC0wLjE1LjFiLm9yaWcvZml4ZWQuaAorKysrIGxpYm1hZC0wLjE1LjFiL2ZpeGVkLmgKK0BAIC0yOTcsNiArMjk3LDE1IEBAIG1hZF9maXhlZF90IG1hZF9mX211bF9pbmxpbmUobWFkX2ZpeGVkX3QKKyAKKyAvKiAtLS0gTUlQUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisrIyBlbGlmIGRlZmluZWQoRlBNX01JUFMpICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCisrICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHU2NF9kaV90IF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKKysjICAgZGVmaW5lIE1BRF9GX01MWChoaSwgbG8sIHgsIHkpIFwKKysgICAgZG8geyBcCisrICAgICAgICB1NjRfZGlfdCBfX2xsID0gKHU2NF9kaV90KSAoeCkgKiAoeSk7IFwKKysgICAgICAgIGhpID0gX19sbCA+PiAzMjsgXAorKyAgICAgICAgbG8gPSBfX2xsOyBcCisrICAgICB9IHdoaWxlICgwKQorKworICMgZWxpZiBkZWZpbmVkKEZQTV9NSVBTKQorIAorIC8qCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTZkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitUaGlzIG9wdGlvbiBubyBsb25nZXIgZXhpc3RzIGluIGdjYyAzLjQuMQorCitSUCAtIDE4LzA3LzIwMDgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibWFkLTAuMTUuMWIub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDAsNyArMTQwLDYgQEAKKyAgICAgY2FzZSAiJG9wdGltaXplIiBpbgorIAktT3wiLU8gIiopCisgCSAgICBvcHRpbWl6ZT0iLU8iCistCSAgICBvcHRpbWl6ZT0iJG9wdGltaXplIC1mZm9yY2UtbWVtIgorIAkgICAgb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmZvcmNlLWFkZHIiCisgCSAgICA6ICN4IG9wdGltaXplPSIkb3B0aW1pemUgLWZpbmxpbmUtZnVuY3Rpb25zIgorIAkgICAgOiAjLSBvcHRpbWl6ZT0iJG9wdGltaXplIC1mc3RyZW5ndGgtcmVkdWNlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzg3ZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCistLS0gbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDEtMjMgMTE6NDE6MzIuMDAwMDAwMDAwICswMjAwCisrKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMTMtMDEtMDMgMDg6Mjg6MjMuNzE4NjkzNjk3ICswMjAwCitAQCAtMjgsNyArMjgsNyBAQAorCisgQU1fSU5JVF9BVVRPTUFLRQorCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyBkbmwgU3lzdGVtIHR5cGUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkXzAuMTUuMWIuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkXzAuMTUuMWIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUwOGIxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk1QRUcgQXVkaW8gRGVjb2RlciBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tYWQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCQlmaWxlOi8vQ09QWVJJR0hUO21kNT04ZTU1ZWIxNDg5NGU3ODJiODQ0ODhkNWEyMzliYzIzZCBcCisJCQlmaWxlOi8vdmVyc2lvbi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9YWEwNzMxMWRkMzkyODhkNDM0OWYyOGUxZGU1MTY0NTQiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYmlkM3RhZyIKK1BSID0gInIzIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5tYXJzLm9yZy9wdWIvbXBlZy9saWJtYWQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLWZvcmNlLW1lbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYmU1NDNiYzMwYzU2ZmI2YmVhMWQ3YmY2YTY0ZTY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmZhYzNlZDZiZmJjMjgyM2QzNzc1ZWJiOTMxMDg3MzcxZTE0MmJiMGU5YmIxYmVlNTFhNzZhNmUwMDc4NjkwIiAKKworUyA9ICIke1dPUktESVJ9L2xpYm1hZC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItZW5hYmxlLXNwZWVkIC0tZW5hYmxlLXNoYXJlZCIKKyMgVGhlIEFTTydzIGRvbid0IHRha2UgYW55IGFjY291bnQgb2YgdGh1bWIuLi4KK0VYVFJBX09FQ09ORl9hcHBlbmRfdGh1bWIgPSAiIC0tZGlzYWJsZS1hc28gLS1lbmFibGUtZnBtPWRlZmF1bHQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIgLS1lbmFibGUtZnBtPWFybSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworIwlkYW1uIHBpY2t5IGF1dG9tYWtlLi4uCisJdG91Y2ggTkVXUyBBVVRIT1JTIENoYW5nZUxvZworfQorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9nZy9saWJvZ2dfMS4zLjIuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvZ2cvbGlib2dnXzEuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDJlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvZ2cvbGlib2dnXzEuMy4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiT2dnIGJpdHN0cmVhbSBhbmQgZnJhbWluZyBsaWJhcnkiCitERVNDUklQVElPTiA9ICJsaWJvZ2cgaXMgdGhlIGJpdHN0cmVhbSBhbmQgZnJhbWluZyBsaWJyYXJ5IFwKK2ZvciB0aGUgT2dnIHByb2plY3QuIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucyB3aGljaCBhcmUgXAorbmVjZXNzYXJ5IHRvIGNvZGVjIGxpYnJhcmllcyBsaWtlIGxpYnZvcmJpcy4iCitIT01FUEFHRSA9ICJodHRwOi8veGlwaC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3RyYWMueGlwaC5vcmcvbmV3dGlja2V0IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kYjFiN2E2NjhiMmE2ZjQ3YjJhZjg4ZmIwMDhhZDU1NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL29nZy9vZ2cuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1lZGE4MTI4NTZmMTNhM2IxMzI2ZWI4ZjAyMGNjM2IwYiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL29nZy8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YzNhMzQzMDlkOGI5ODY0MDgyN2U1ZDA5OTFhNDAxNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZjY4N2NjZGQ1YWM4YjUyZDc2MzI4ZmJiZmViYzcwYzQ1OWE0MGVhODkxZGJmM2RjY2I3NGEyMTA4MjZlNzliIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2NvbmZpZ3VyZS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9jb25maWd1cmUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NmU4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1RvIGVuYWJsZSAtLWRpc2FibGUtV2Vycm9yIGZvciBsaWJvbXhpbCB0byBhdm9pZCBzb21lIGNvbXBpbGVycyB3aGljaCBjaGVjayBjb2RlIHN0cmljdGx5LgorCitGb3IgZXhhbXBsZSwgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBlcnJvcnMgaGFwcGVuZWQgdG8gc29tZSBjb21waWxlcnM6CisKKzEpIE9NWF9JTkRFWFRZUEUgaW4gaW5jbHVkZS9PTVhfSW5kZXguaCBJUyBOT1QgT01YX0lOREVYVkVORE9SVFlQRSBpbiBzcmMvYmFzZS9vbXhfYmFzZV9jb21wb25lbnQuaAorfCBpNTg2LXBva3ktbGludXgtbGlidG9vbDogY29tcGlsZTogIGk1ODYtcG9reS1saW51eC1nY2MgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUveW9jdG8tYnVpbGQ1L3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVdlcnJvciAtRENPTkZJR19ERUJVR19MRVZFTD0wIC1jIE9NWENvbXBvbmVudFJNRXh0LmMgIC1mUElDIC1EUElDIC1vIC5saWJzL2xpYm9teGJhc2VfbGEtT01YQ29tcG9uZW50Uk1FeHQubworfCBvbXhfYmFzZV9jb21wb25lbnQuYzogSW4gZnVuY3Rpb24gJ29teF9iYXNlX2NvbXBvbmVudF9HZXRQYXJhbWV0ZXInOgorfCBvbXhfYmFzZV9jb21wb25lbnQuYzo5OTE6MzogZXJyb3I6IGNhc2UgdmFsdWUgJzIxMzA3MDY0MzUnIG5vdCBpbiBlbnVtZXJhdGVkIHR5cGUgJ09NWF9JTkRFWFRZUEUnIFstV2Vycm9yPXN3aXRjaF0KK3wgb214X2Jhc2VfY29tcG9uZW50LmM6OTE4OjM6IGVycm9yOiBjYXNlIHZhbHVlICcyMTMwNzA2NDM2JyBub3QgaW4gZW51bWVyYXRlZCB0eXBlICdPTVhfSU5ERVhUWVBFJyBbLVdlcnJvcj1zd2l0Y2hdCisKKzIpCit8IGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUveW9jdG8tYnVpbGQ1L3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uICAgIC1ET01YSUxDT01QT21pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVdlcnJvciAtRENPTkZJR19ERUJVR19MRVZFTD0wIC1jIC1vIG9teHJlZ2lzdGVyX2JlbGxhZ2lvLW9teHJlZ2lzdGVyLm8gYHRlc3QgLWYgJ29teHJlZ2lzdGVyLmMnIHx8IGVjaG8gJy4vJ2BvCit8IG9teHJlZ2lzdGVyLmM6IEluIGZ1bmN0aW9uICdidWlsZENvbXBvbmVudHNMaXN0JzoKK3wgb214cmVnaXN0ZXIuYzoxNzU6NzogZXJyb3I6IHZhcmlhYmxlICdlcnInIHNldCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWJ1dC1zZXQtdmFyaWFibGVdCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgODJkNzQyZDNlYTkwIGNvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCVR1ZSBEZWMgMjcgMTU6MzA6MzUgMjAxMSArMDgwMAorKysrIGIvY29uZmlndXJlLmFjCVR1ZSBEZWMgMjcgMTY6MjY6MDMgMjAxMSArMDgwMAorQEAgLTUsNyArNSw3IEBACisgQUNfUFJFUkVRKFsyLjU5XSkKKyAKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorLUNGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXJyb3IiCisrQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwiCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFNldCB0aGUgc2hhcmVkIHZlcnNpb25pbmcgaW5mbywgYWNjb3JkaW5nIHRvIHNlY3Rpb24gNi4zIG9mIHRoZSBsaWJ0b29sIGluZm8gIworQEAgLTEyMiw2ICsxMjIsMTQgQEAKKyAgICAgW3dpdGhfYW5kcm9pZD0kZW5hYmxldmFsXSwKKyAgICAgW3dpdGhfYW5kcm9pZD1ub10pCisgCisrQUNfQVJHX0VOQUJMRSgKKysgICAgW1dlcnJvcl0sCisrICAgIFtBQ19IRUxQX1NUUklORygKKysgICAgICAgIFstLWRpc2FibGUtV2Vycm9yXSwKKysgICAgICAgIFt3aGV0aGVyIHRvIGRpYWJsZSB0cmVhdGluZyBnY2Mgd2FybmluZ3MgYXMgZXJyb3JzXSldLAorKyAgICBbd2l0aF9XZXJyb3I9JGVuYWJsZXZhbF0sCisrICAgIFt3aXRoX1dlcnJvcj15ZXNdKQorKworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBDaGVjayBmb3IgcHJvZ3JhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTE5Myw2ICsyMDEsMTAgQEAKKyAgQ0ZHX0RFQlVHX0xFVkVMPTI1NQorIGZpCisgCisraWYgdGVzdCAieCR3aXRoX1dlcnJvciIgPSAieHllcyI7IHRoZW4KKysgQ0ZMQUdTPSIke0NGTEFHU30gLVdlcnJvciIKKytmaQorKworIEFDX1NVQlNUKENGR19ERUJVR19MRVZFTCkKKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtRENPTkZJR19ERUJVR19MRVZFTD0kQ0ZHX0RFQlVHX0xFVkVMIgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZGlzYWJsZS1zby12ZXJzaW9uaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZGlzYWJsZS1zby12ZXJzaW9uaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDhlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRGlzYWJsZSBzbyB2ZXJzaW9uaW5nIHNpbmNlIHRoZXkgYXJlIHJlYWxseSBub3QgYSB2ZXJzaW9uZWQgc2hhcmVkIGxpYi4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgQCBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL29teGlsL2J1Z3MvNTkvCisKK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CisKK2RpZmYgLXJ1YiBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQorLS0tIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjIyOjAwLjg1ODQyNTIzNCAtMDQwMAorKysrIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyNTo0Mi42ODc1MjUyMjUgLTA0MDAKK0BAIC0xMCw0ICsxMCw1IEBACisgbGlib214YXVkaW9fZWZmZWN0c19sYV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgCQkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAkJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UKKytsaWJvbXhhdWRpb19lZmZlY3RzX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorIAorZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0KKy0tLSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2Nsb2Nrc3JjL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODU4NDI1MjM0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyNDo0OS4xNTEyNTk3NTMgLTA0MDAKK0BAIC0xMCw0ICsxMCw0IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZQorLQorK2xpYm9teGNsb2Nrc3JjX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0KKy0tLSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL3ZpZGVvc2NoZWR1bGVyL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODYyNDI1MjU0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjozNi40NjI2MDE3ODYgLTA0MDAKK0BAIC02LDcgKzYsNyBAQAorIAkJCQkJCQkJbGlicmFyeV9lbnRyeV9wb2ludC5jCisgCisgbGlib214dmlkZW9zY2hlZF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvc3JjL2xpYm9teGlsLWJlbGxhZ2lvLmxhCistbGlib214dmlkZW9zY2hlZF9sYV9MREZMQUdTID0gCisrbGlib214dmlkZW9zY2hlZF9sYV9MREZMQUdTID0gLWF2b2lkLXZlcnNpb24KKyBsaWJvbXh2aWRlb3NjaGVkX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2R5bmFtaWNsb2FkZXItbGlua2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2R5bmFtaWNsb2FkZXItbGlua2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODc5NTNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgbGluayBpc3N1ZSB3aGVuIGxpYm9teGR5bmFtaWNsb2FkZXIuc28gaXMgbG9hZGVkIDoKK01pc3Npbmcgc3ltYm9sIFJNX0RlaW5pdC4KKworVGhpcyBwYXRjaCBjb21lcyBmcm9tICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9jZ2l0L2xpYm9teGlsLWJlbGxhZ2lvLmdpdC9jb21taXQvP2g9ZjE3JmlkPTQ5OTZhOTU4Mjg5NDNkMzQ1ZTUxZGVkNjg3NmMzMTAzNjUzZWVjZjgiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTw6liYXN0aWVuIE1lbm5ldHJpZXIgPHMubWVubmV0cmllckBpbm5vdGlzLm9yZz4KKworLS0tIGEvc3JjL2R5bmFtaWNfbG9hZGVyL01ha2VmaWxlLmFtCTIwMTQtMDItMjUgMTU6Mjk6MTAuMTI4NTQ5NjM2ICswMTAwCisrKysgYi9zcmMvZHluYW1pY19sb2FkZXIvTWFrZWZpbGUuYW0JMjAxNC0wMi0yNSAxNTozMDoxNS43NTY1NDg4MDggKzAxMDAKK0BAIC0zLDcgKzMsNyBAQAorIG9teGR5bmFtaWNsb2FkZXJfTFRMSUJSQVJJRVMgPSBsaWJvbXhkeW5hbWljbG9hZGVyLmxhCisgbGlib214ZHluYW1pY2xvYWRlcl9sYV9TT1VSQ0VTID0gc3RlX2R5bmFtaWNfY29tcG9uZW50X2xvYWRlci5jIHN0ZV9keW5hbWljX2NvbXBvbmVudF9sb2FkZXIuaAorIAorLWxpYm9teGR5bmFtaWNsb2FkZXJfbGFfTERGTEFHUyA9CisrbGlib214ZHluYW1pY2xvYWRlcl9sYV9MREZMQUdTID0gLWxvbXhpbC1iZWxsYWdpbyAtTCQodG9wX2J1aWxkZGlyKS9zcmMvLmxpYnMKKyBsaWJvbXhkeW5hbWljbG9hZGVyX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL21ha2VmaWxlLWRvY2Rpci1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlOGM0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL21ha2VmaWxlLWRvY2Rpci1maXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBwYXRjaCBpcyB0byByZW1vdmUgREVTVERJUiBpbiBkb2NkaXIuCitPdGhlcndpc2UsIHdoZW4gdXNlcnMgaW5zdGFsbCBieSBydW5uaW5nIGBtYWtlIGluc3RhbGwgREVTVERJUj0vYWx0ZXJuYXRlL2RpcmVjdG9yeScgc3BlY2lmaWVkIGluIHRoZSBmaWxlIElOU1RBTEwsIHRoZSBkb2Mgd2lsbCBnbyBpbnRvIC9hbHRlcm5hdGUvZGlyZWN0b3J5L2FsdGVybmF0ZS9kaXJlY3RvcnksIHdoaWNoIGlzIG5vdCBleHBlY3RlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorCitkaWZmIC1yIDMwYjU5N2U0ZTcwZCBNYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxNTozODozNSAyMDExICswODAwCisrKysgYi9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDE1OjM5OjI1IDIwMTEgKzA4MDAKK0BAIC03LDcgKzcsNyBAQAorIHBrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKyBwa2djb25maWdfREFUQSA9IGxpYm9teGlsLWJlbGxhZ2lvLnBjCisgCistZG9jZGlyID0gJChERVNURElSKSQocHJlZml4KS9zaGFyZS9kb2MvQFBBQ0tBR0VACisrZG9jZGlyID0gJChwcmVmaXgpL3NoYXJlL2RvYy9AUEFDS0FHRUAKKyBkb2NfREFUQSA9IFJFQURNRSBcCisgCSAgIENoYW5nZUxvZyBcCisgCSAgIFRPRE8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL3BhcmFsbGVsLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4M2NhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1RoaXMgcGF0Y2ggaXMgdG8gbWFrZSBsaWJvbXhpbCBNYWtlZmlsZSBzdXBwb3J0ICJtYWtlIC1qTiIuCitUaGUgb214cmVnaXN0ZXJfYmVsbGFnaW8gc3R1ZmZzIGRlcGVuZCBvbiBsaWJvbXhpbF9iZWxsYWdpbyBsaWJyYXJ5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgZjU5ZDA3N2QzZGQ1IE1ha2VmaWxlLmFtCistLS0gYS9zcmMvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxMDo1NDozNiAyMDExICswODAwCisrKysgYi9zcmMvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxMDo1NTo0NiAyMDExICswODAwCitAQCAtNyw2ICs3LDcgQEAKKyBvbXhyZWdpc3Rlcl9iZWxsYWdpb19TT1VSQ0VTID0gb214cmVnaXN0ZXIuYyBjb21tb24uYyBjb21tb24uaAorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX0NGTEFHUyA9IC1ET01YSUxDT01QT05FTlRTUEFUSD1cIiQocGx1Z2luZGlyKS9cIiBcCisgCQkJICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKytvbXhyZWdpc3Rlcl9iZWxsYWdpb19MREFERCA9ICQobGliX0xUTElCUkFSSUVTKQorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX0xERkxBR1MgPSAtbG9teGlsLWJlbGxhZ2lvIC1MJChidWlsZGRpcikKKyAKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJvbXhpbC1iZWxsYWdpby5sYQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWxfMC45LjMuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbF8wLjkuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQ2ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWxfMC45LjMuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJCZWxsYWdpbyBPcGVuTUFYIEludGVncmF0aW9uIExheWVyIChJTCkiCitERVNDUklQVElPTiA9ICJCZWxsYWdpbyBpcyBhbiBvcGVuc291cmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBLaHJvbm9zIE9wZW5NQVggXAorICAgICAgICAgICAgICAgSW50ZWdyYXRpb24gTGF5ZXIgQVBJIHRvIGFjY2VzcyBtdWx0aW1lZGlhIGNvbXBvbmVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL29teGlsLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWU2ZjBmNGRiYzdhYzE5M2I1MGYzMjNhNmFlMTkxY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29teGNvcmUuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT04MDZiMWU1NTY2YzA2NDg2ZmU4ZTQyYjQ2MWUwM2E5MCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb214aWwvbGlib214aWwtYmVsbGFnaW8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R5bmFtaWNsb2FkZXItbGlua2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMWRlODI3ZmRiNzVjMDJjODRlNTVmNzQwY2EyN2NiOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OTNjMDcyOWM4ZWY4YzE0NjdiM2JmZWZjZjM1NWVjMTlhNDZkZDkyZTMxYmZjMjgwZTE3ZDk2YjA5MzRkNzRjIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LWJlbGxhZ2lvLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1kb2MgLS1kaXNhYmxlLVdlcnJvciIKKworIworIyBUaGUgLnNvIGZpbGVzIHVuZGVyICR7bGliZGlyfS9iZWxsYWdpbyBhcmUgbm90IGludGVuZGVkIHRvIGJlIHZlcnNpb25lZCBhbmQgc3ltbGlua2VkLgorIyBNYWtlIHN1cmUgdGhleSBnZXQgcGFja2FnZWQgaW4gdGhlIG1haW4gcGFja2FnZS4KKyMKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vKi5zbyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLyouYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLyouYSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLy5kZWJ1Zy8gXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8uZGVidWcvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMTcuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGU1ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMTcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iOWI3NTM5OWI3MmU0YTg2NTZjZjNhNmRkZmM4NmQ5YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtlbmRsaW5lPTE2O21kNT1jYzljMmQxZWFmZGExN2UxMjc3YTZmOTlhOWZjMjljNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtiZWdpbmxpbmU9MjQyO2VuZGxpbmU9MzU2O21kNT01OTkzMTY4MTlkNTI1ZGRlMmJmZGYyOGZlM2YzMjNhZiIKK0RFUEVORFMgPSAiemxpYiIKK0xJQlYgPSAiMTYiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGlicG5nL2xpYnBuZyR7TElCVn0vJHtQVn0vbGlicG5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjQzMGE5Yjc2Yjc4NTMzMjM1Y2Q0YjliMjZjZTc1YzdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4NTA3YjU1ZmJlNWNkNDNjNTE5ODFmMjkyNGU0NjcxZmQ4MWZlMzVkNTJkYzUzMzU3ZTIwZjJjNzdmYTVkZmQiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKKyMgV29yayBhcm91bmQgbWlzc2luZyBzeW1ib2xzCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vZmYiICxkKX0iCisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyIKKworRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3BuZy1maXgtaXR4dCAke2JpbmRpcn0vcG5nZml4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzYW1wbGVyYXRlL2xpYnNhbXBsZXJhdGUwXzAuMS44LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic2FtcGxlcmF0ZS9saWJzYW1wbGVyYXRlMF8wLjEuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDY5MzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic2FtcGxlcmF0ZS9saWJzYW1wbGVyYXRlMF8wLjEuOC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkF1ZGlvIFNhbXBsZSBSYXRlIENvbnZlcnNpb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9TUkMvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc2FtcGxlcmF0ZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWQwODA3YzM1ZmM5MDY0NjZkMjRhNTA0NjM1MzQ4MTVhIgorREVQRU5EUyA9ICJmbGFjIGxpYnNuZGZpbGUxIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL1NSQy9saWJzYW1wbGVyYXRlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjFjN2ZiMjUxOTFiNGU2ZTM2MjhkMTk4YTY2YTg0ZjQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzYjU0YmRmNDZkNWU2ZDIzNTRiNzAzNDM5NWZlMzI5YzIyMmE5NjY3OTBkZTM0NTIwNzAyYmI5NjQyZjFjMDYiCitTID0gIiR7V09SS0RJUn0vbGlic2FtcGxlcmF0ZS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUdbZmZ0d10gPSAiLC0tZGlzYWJsZS1mZnR3LGZmdHciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC1zZWdmYXVsdC1pbi1TRDItUlNSQy1wYXJzZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC1zZWdmYXVsdC1pbi1TRDItUlNSQy1wYXJzZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0ODcxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaApAQCAtMCwwICsxLDIxMSBAQAorRnJvbSA5MzQxZTljNmU3MGNkM2FkNzZjOTAxYzNjZjA1MmQ0Y2I1MmZkODI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KK0RhdGU6IFRodSwgMjcgSnVuIDIwMTMgMTg6MDQ6MDMgKzEwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL3NkMi5jIDogRml4IHNlZ2ZhdWx0IGluIFNEMiBSU1JDIHBhcnNlci4KKworKFVwc3RyZWFtIGNvbW1pdCA5MzQxZTljNmU3MGNkM2FkNzZjOTAxYzNjZjA1MmQ0Y2I1MmZkODI3KQorCitBIHNwZWNpYWxseSBjcmFmdGVkIHJlc291cmNlIGZvcmsgZm9yIGFuIFNEMiBmaWxlIGNhbiBjYXVzZQordGhlIFNEMiBSU1JDIHBhcnNlciB0byByZWFkIGRhdGEgZnJvbSBvdXRzaWRlIGEgZHluYW1pY2FsbHkKK2RlZmluZWQgYnVmZmVyLiBUaGUgZGF0YSB0aGF0IGlzIHJlYWQgaXMgY29udmVydGVkIGludG8gYQorc2hvcnQgb3IgaW50IGFuZCB1c2VkIGR1cmluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuCisKK1NpbmNlIG5vIHdyaXRlIG9jY3VycywgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBleHBsb2l0YWJsZS4KKworQnVnIHJlcG9ydGVkIGJ5IFRoZSBNYXloZW0gVGVhbSBmcm9tIEN5bGFiLCBDYXJuZWdpZSBNZWxsb24KK1VuaXZlcmlzdHkuIFBhcGVyIGlzOgoraHR0cDovL3VzZXJzLmVjZS5jbXUuZWR1L35hcmViZXJ0L3BhcGVycy9tYXloZW0tb2FrbGFuZC0xMi5wZGYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvc2QyLmMgfCAgIDkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2QyLmMgYi9zcmMvc2QyLmMKK2luZGV4IDM1Y2UzNmIuLjZiZTE1MGMgMTAwNjQ0CistLS0gYS9zcmMvc2QyLmMKKysrKyBiL3NyYy9zZDIuYworQEAgLTEsNSArMSw1IEBACisgLyoKKy0qKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBFcmlrIGRlIENhc3RybyBMb3BvIDxlcmlrZEBtZWdhLW5lcmQuY29tPgorKyoqIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CisgKiogQ29weXJpZ2h0IChDKSAyMDA0IFBhYXZvIEp1bXBwYW5lbgorICoqCisgKiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK0BAIC0zNzEsNDQgKzM3MSw2MSBAQCBzZDJfd3JpdGVfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YsIGludCBVTlVTRUQgKGNhbGNfbGVuZ3RoKSkKKyAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9jaGFyIChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CXJldHVybiBkYXRhIFtvZmZzZXRdIDsKKy19IC8qIHJlYWRfY2hhciAqLworK3JlYWRfcnNyY19jaGFyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKwlyZXR1cm4gZGF0YSBbb2Zmc2V0XSA7CisrfSAvKiByZWFkX3JzcmNfY2hhciAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9zaG9ydCAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCistewlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAxXSA7CistfSAvKiByZWFkX3Nob3J0ICovCisrcmVhZF9yc3JjX3Nob3J0IChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAxID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgMV0gOworK30gLyogcmVhZF9yc3JjX3Nob3J0ICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX2ludCAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCistewlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgMjQpICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCA4KSArIGRhdGEgW29mZnNldCArIDNdIDsKKy19IC8qIHJlYWRfaW50ICovCisrcmVhZF9yc3JjX2ludCAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0KQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMyA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gMCA7CisrCXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCAyNCkgKyAoZGF0YSBbb2Zmc2V0ICsgMV0gPDwgMTYpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgM10gOworK30gLyogcmVhZF9yc3JjX2ludCAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9tYXJrZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0KQorLXsKKytyZWFkX3JzcmNfbWFya2VyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAzID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysKKyAJaWYgKENQVV9JU19CSUdfRU5ESUFOKQorIAkJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDI0KSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgMl0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAzXSA7CistCWVsc2UgaWYgKENQVV9JU19MSVRUTEVfRU5ESUFOKQorKwlpZiAoQ1BVX0lTX0xJVFRMRV9FTkRJQU4pCisgCQlyZXR1cm4gZGF0YSBbb2Zmc2V0XSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCA4KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgM10gPDwgMjQpIDsKKy0JZWxzZQorLQkJcmV0dXJuIDB4NjY2IDsKKy19IC8qIHJlYWRfbWFya2VyICovCisrCisrCXJldHVybiAwIDsKKyt9IC8qIHJlYWRfcnNyY19tYXJrZXIgKi8KKyAKKyBzdGF0aWMgdm9pZAorLXJlYWRfc3RyIChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCwgY2hhciAqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW4pCistewlpbnQgayA7CisrcmVhZF9yc3JjX3N0ciAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0LCBjaGFyICogYnVmZmVyLCBpbnQgYnVmZmVyX2xlbikKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWludCBrIDsKKyAKKyAJbWVtc2V0IChidWZmZXIsIDAsIGJ1ZmZlcl9sZW4pIDsKKyAKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgYnVmZmVyX2xlbiA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gOworKworIAlmb3IgKGsgPSAwIDsgayA8IGJ1ZmZlcl9sZW4gLSAxIDsgaysrKQorIAl7CWlmIChwc2ZfaXNwcmludCAoZGF0YSBbb2Zmc2V0ICsga10pID09IDApCisgCQkJcmV0dXJuIDsKKyAJCWJ1ZmZlciBba10gPSBkYXRhIFtvZmZzZXQgKyBrXSA7CisgCQl9IDsKKyAJcmV0dXJuIDsKKy19IC8qIHJlYWRfc3RyICovCisrfSAvKiByZWFkX3JzcmNfc3RyICovCisgCisgc3RhdGljIGludAorIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKK0BAIC00MzUsMTcgKzQ1MiwxNyBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCS8qIFJlc2V0IHRoZSBoZWFkZXIgc3RvcmFnZSBiZWNhdXNlIHdlIGhhdmUgY2hhbmdlZCB0byB0aGUgcnNyY2Rlcy4gKi8KKyAJcHNmLT5oZWFkaW5kZXggPSBwc2YtPmhlYWRlbmQgPSByc3JjLnJzcmNfbGVuIDsKKyAKKy0JcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMCkgOworLQlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDQpIDsKKy0JcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgOCkgOworLQlyc3JjLm1hcF9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDEyKSA7CisrCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMCkgOworKwlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgNCkgOworKwlyc3JjLmRhdGFfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDgpIDsKKysJcnNyYy5tYXBfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDEyKSA7CisgCisgCWlmIChyc3JjLmRhdGFfb2Zmc2V0ID09IDB4NTE2MDcgJiYgcnNyYy5tYXBfb2Zmc2V0ID09IDB4MjAwMDApCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIlRyeWluZyBvZmZzZXQgb2YgMHg1MiBieXRlcy5cbiIpIDsKKy0JCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyAwKSArIDB4NTIgOworLQkJcnNyYy5tYXBfb2Zmc2V0ID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAweDUyICsgNCkgKyAweDUyIDsKKy0JCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyA4KSA7CistCQlyc3JjLm1hcF9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyAxMikgOworKwkJcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgMCkgKyAweDUyIDsKKysJCXJzcmMubWFwX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgNCkgKyAweDUyIDsKKysJCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMHg1MiArIDgpIDsKKysJCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgMTIpIDsKKyAJCX0gOworIAorIAlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiICBkYXRhIG9mZnNldCA6IDB4JTA0WFxuICBtYXAgIG9mZnNldCA6IDB4JTA0WFxuIgorQEAgLTQ4OCw3ICs1MDUsNyBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKyAJCX0gOworIAorLQlyc3JjLnN0cmluZ19vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy5tYXBfb2Zmc2V0ICsgMjYpIDsKKysJcnNyYy5zdHJpbmdfb2Zmc2V0ID0gcnNyYy5tYXBfb2Zmc2V0ICsgcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy5tYXBfb2Zmc2V0ICsgMjYpIDsKKyAJaWYgKHJzcmMuc3RyaW5nX29mZnNldCA+IHJzcmMucnNyY19sZW4pCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCBzdHJpbmcgb2Zmc2V0ICglZCkuXG4iLCByc3JjLnN0cmluZ19vZmZzZXQpIDsKKyAJCWVycm9yID0gU0ZFX1NEMl9CQURfUlNSQyA7CitAQCAtNDk3LDcgKzUxNCw3IEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy50eXBlX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIDMwIDsKKyAKKy0JcnNyYy50eXBlX2NvdW50ID0gcmVhZF9zaG9ydCAocnNyYy5yc3JjX2RhdGEsIHJzcmMubWFwX29mZnNldCArIDI4KSArIDEgOworKwlyc3JjLnR5cGVfY291bnQgPSByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLm1hcF9vZmZzZXQgKyAyOCkgKyAxIDsKKyAJaWYgKHJzcmMudHlwZV9jb3VudCA8IDEpCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCB0eXBlIGNvdW50LlxuIikgOworIAkJZXJyb3IgPSBTRkVfU0QyX0JBRF9SU1JDIDsKK0BAIC01MTMsMTEgKzUzMCwxMSBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMuc3RyX2luZGV4ID0gLTEgOworIAlmb3IgKGsgPSAwIDsgayA8IHJzcmMudHlwZV9jb3VudCA7IGsgKyspCistCXsJbWFya2VyID0gcmVhZF9tYXJrZXIgKHJzcmMucnNyY19kYXRhLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKysJewltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisgCisgCQlpZiAobWFya2VyID09IFNUUl9NQVJLRVIpCisgCQl7CXJzcmMuc3RyX2luZGV4ID0gayA7CistCQkJcnNyYy5zdHJfY291bnQgPSByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy50eXBlX29mZnNldCArIGsgKiA4ICsgNCkgKyAxIDsKKysJCQlyc3JjLnN0cl9jb3VudCA9IHJlYWRfcnNyY19zaG9ydCAoJnJzcmMsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCArIDQpICsgMSA7CisgCQkJZXJyb3IgPSBwYXJzZV9zdHJfcnNyYyAocHNmLCAmcnNyYykgOworIAkJCWdvdG8gcGFyc2VfcnNyY19mb3JrX2NsZWFudXAgOworIAkJCX0gOworQEAgLTU0OSwyNiArNTY2LDI2IEBAIHBhcnNlX3N0cl9yc3JjIChTRl9QUklWQVRFICpwc2YsIFNEMl9SU1JDICogcnNyYykKKyAJZm9yIChrID0gMCA7IGRhdGFfb2Zmc2V0ICsgZGF0YV9sZW4gPCByc3JjLT5yc3JjX2xlbiA7IGsrKykKKyAJewlpbnQgc2xlbiA7CisgCistCQlzbGVuID0gcmVhZF9jaGFyIChyc3JjLT5yc3JjX2RhdGEsIHN0cl9vZmZzZXQpIDsKKy0JCXJlYWRfc3RyIChyc3JjLT5yc3JjX2RhdGEsIHN0cl9vZmZzZXQgKyAxLCBuYW1lLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKG5hbWUpLCBzbGVuICsgMSkpIDsKKysJCXNsZW4gPSByZWFkX3JzcmNfY2hhciAocnNyYywgc3RyX29mZnNldCkgOworKwkJcmVhZF9yc3JjX3N0ciAocnNyYywgc3RyX29mZnNldCArIDEsIG5hbWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAobmFtZSksIHNsZW4gKyAxKSkgOworIAkJc3RyX29mZnNldCArPSBzbGVuICsgMSA7CisgCistCQlyc3JjX2lkID0gcmVhZF9zaG9ydCAocnNyYy0+cnNyY19kYXRhLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMikgOworKwkJcnNyY19pZCA9IHJlYWRfcnNyY19zaG9ydCAocnNyYywgcnNyYy0+aXRlbV9vZmZzZXQgKyBrICogMTIpIDsKKyAKKy0JCWRhdGFfb2Zmc2V0ID0gcnNyYy0+ZGF0YV9vZmZzZXQgKyByZWFkX2ludCAocnNyYy0+cnNyY19kYXRhLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMiArIDQpIDsKKysJCWRhdGFfb2Zmc2V0ID0gcnNyYy0+ZGF0YV9vZmZzZXQgKyByZWFkX3JzcmNfaW50IChyc3JjLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMiArIDQpIDsKKyAJCWlmIChkYXRhX29mZnNldCA8IDAgfHwgZGF0YV9vZmZzZXQgPiByc3JjLT5yc3JjX2xlbikKKyAJCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkV4aXRpbmcgcGFyc2VyIG9uIGRhdGEgb2Zmc2V0IG9mICVkLlxuIiwgZGF0YV9vZmZzZXQpIDsKKyAJCQlicmVhayA7CisgCQkJfSA7CisgCistCQlkYXRhX2xlbiA9IHJlYWRfaW50IChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0KSA7CisrCQlkYXRhX2xlbiA9IHJlYWRfcnNyY19pbnQgKHJzcmMsIGRhdGFfb2Zmc2V0KSA7CisgCQlpZiAoZGF0YV9sZW4gPCAwIHx8IGRhdGFfbGVuID4gcnNyYy0+cnNyY19sZW4pCisgCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJFeGl0aW5nIHBhcnNlciBvbiBkYXRhIGxlbmd0aCBvZiAlZC5cbiIsIGRhdGFfbGVuKSA7CisgCQkJYnJlYWsgOworIAkJCX0gOworIAorLQkJc2xlbiA9IHJlYWRfY2hhciAocnNyYy0+cnNyY19kYXRhLCBkYXRhX29mZnNldCArIDQpIDsKKy0JCXJlYWRfc3RyIChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0ICsgNSwgdmFsdWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAodmFsdWUpLCBzbGVuICsgMSkpIDsKKysJCXNsZW4gPSByZWFkX3JzcmNfY2hhciAocnNyYywgZGF0YV9vZmZzZXQgKyA0KSA7CisrCQlyZWFkX3JzcmNfc3RyIChyc3JjLCBkYXRhX29mZnNldCArIDUsIHZhbHVlLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKHZhbHVlKSwgc2xlbiArIDEpKSA7CisgCisgCQlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiICAweCUwNHggICAgICU0ZCAgICAgJTRkICAgICAlM2QgICAgJyVzJ1xuIiwgZGF0YV9vZmZzZXQsIHJzcmNfaWQsIGRhdGFfbGVuLCBzbGVuLCB2YWx1ZSkgOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2NDczZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gZGJlMTRmMDAwMzBhZjVkMzU3N2Y0Y2FiYmY5ODYxZGI1OWU5YzM3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CitEYXRlOiBUaHUsIDI1IERlYyAyMDE0IDE5OjIzOjEyICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy9zZDIuYyA6IEZpeCB0d28gcG90ZW50aWFsIGJ1ZmZlciByZWFkIG92ZXJmbG93cy4KKworKFVwc3RyZWFtIGNvbW1pdCBkYmUxNGYwMDAzMGFmNWQzNTc3ZjRjYWJiZjk4NjFkYjU5ZTljMzc4KQorCitDbG9zZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmlrZC9saWJzbmRmaWxlL2lzc3Vlcy85MworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9zZDIuYyB8ICAgMTIgKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zZDIuYyBiL3NyYy9zZDIuYworaW5kZXggMGI0ZTVhZi4uYTcwYTFmMSAxMDA2NDQKKy0tLSBhL3NyYy9zZDIuYworKysrIGIvc3JjL3NkMi5jCitAQCAtNTE3LDYgKzUxNywxMSBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMudHlwZV9vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyAzMCA7CisgCisrCWlmIChyc3JjLm1hcF9vZmZzZXQgKyAyOCA+IHJzcmMucnNyY19sZW4pCisrCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCBtYXAgb2Zmc2V0LlxuIikgOworKwkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisrCQl9IDsKKysKKyAJcnNyYy50eXBlX2NvdW50ID0gcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy5tYXBfb2Zmc2V0ICsgMjgpICsgMSA7CisgCWlmIChyc3JjLnR5cGVfY291bnQgPCAxKQorIAl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgdHlwZSBjb3VudC5cbiIpIDsKK0BAIC01MzMsNyArNTM4LDEyIEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy5zdHJfaW5kZXggPSAtMSA7CisgCWZvciAoayA9IDAgOyBrIDwgcnNyYy50eXBlX2NvdW50IDsgayArKykKKy0JewltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisrCXsJaWYgKHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCA+IHJzcmMucnNyY19sZW4pCisrCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgcnNyYyBtYXJrZXIuXG4iKSA7CisrCQkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisrCQkJfSA7CisrCisrCQltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisgCisgCQlpZiAobWFya2VyID09IFNUUl9NQVJLRVIpCisgCQl7CXJzcmMuc3RyX2luZGV4ID0gayA7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTAyZjRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBdWRpbyBmb3JtYXQgQ29udmVyc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUiCitBVVRIT1IgPSAiRXJpayBkZSBDYXN0cm8gTG9wbyIKK0RFUEVORFMgPSAic3FsaXRlMyIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlL2ZpbGVzL2xpYnNuZGZpbGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc3JjLXNkMi5jLUZpeC1zZWdmYXVsdC1pbi1TRDItUlNSQy1wYXJzZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImUyYjdiYjYzN2UwMTAyMmM3ZDIwZjk1ZjljMzk5MGEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5MDE2ZGJkMzI2YWJlN2UyMzY2ZGVkNWMzNDRjODUzODI5YmViZmQxNzAyZWYyNmEwN2VmNjYyZDZhYTQ4ODIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU3N2ZlOTMyMDI3MzZiNDdjMDcwMzU5MTBmNDc5NzRhIgorCitTID0gIiR7V09SS0RJUn0vbGlic25kZmlsZS0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLS1lbmFibGUtYWxzYSwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1leHRlcm5hbC1saWJzIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmRfYXJtKCkgeworCWV4cG9ydCBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xCisJZXhwb3J0IGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0CisJYWNfY3Zfc2l6ZW9mX29mZl90PTgKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYS0xLjEuMS9uby1kb2NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYS0xLjEuMS9uby1kb2NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWYzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGlidGhlb3JhLTEuMS4xL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidGhlb3JhLTEuMS4xLm9yaWcvTWFrZWZpbGUuYW0JMjAwOS0xMS0yNSAyMjowMTo1My41OTM3NzU5MjYgKzAxMDAKKysrKyBsaWJ0aGVvcmEtMS4xLjEvTWFrZWZpbGUuYW0JMjAwOS0xMS0yNSAyMjowMjowMC43Nzc1MjQwMTcgKzAxMDAKK0BAIC04LDcgKzgsNyBAQAorIEVYQU1QTEVTX0RJUiA9CisgZW5kaWYKKyAKKy1TVUJESVJTID0gbGliIGluY2x1ZGUgZG9jIHRlc3RzIG00ICQoRVhBTVBMRVNfRElSKQorK1NVQkRJUlMgPSBsaWIgaW5jbHVkZSB0ZXN0cyBtNCAkKEVYQU1QTEVTX0RJUikKKyAKKyAKKyAjIHdlIGluY2x1ZGUgdGhlIHdob2xlIGRlYmlhbi8gZGlyIGluIEVYVFJBX0RJU1QgYmVjYXVzZSB0aGVyZSdzIGEgcHJvYmxlbQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYV8xLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmFfMS4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjYjE2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmFfMS4xLjEuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJUaGVvcmEgVmlkZW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJUaGUgbGlidGhlb3JhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyB0aGUgc3RhbmRhcmQgZW5jb2RlciBhbmQgZGVjb2RlciB1bmRlciBhIEJTRCBsaWNlbnNlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly94aXBoLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZy9uZXd0aWNrZXQiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNmOTE3MThmNTllYjZhODNkMDZkYzdiY2FmNDExMTMyIgorREVQRU5EUyA9ICJsaWJvZ2ciCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvdGhlb3JhL2xpYnRoZW9yYS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL25vLWRvY3MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOTJhYjY1Y2VkZDUwMjFkNmI3ZGRkMTE3ZTA3Y2Q4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNmFlMWVlMmZhM2Q0MmFjNDg5Mjg3ZDNlYzM0YzU4ODU3MzBiMTI5NmYwODAxYWU1NzdhMzUxOTNkM2FmZmJjIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1leGFtcGxlcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidG9vbDIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL2xpYnRvb2wyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzIwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL2xpYnRvb2wyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgY29uZmlndXJlLmFjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogdGlmZi0zLjkuNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0aWZmLTMuOS41Lm9yaWcvY29uZmlndXJlLmFjCisrKysgdGlmZi0zLjkuNS9jb25maWd1cmUuYWMKK0BAIC0yNyw3ICsyNyw3IEBAIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHAKKyBBQ19QUkVSRVEoMi42NCkKKyBBQ19JTklUKFtMaWJUSUZGIFNvZnR3YXJlXSxbMy45LjVdLFt0aWZmQGxpc3RzLm1hcHRvb2xzLm9yZ10sW3RpZmZdKQorIEFDX0NPTkZJR19BVVhfRElSKGNvbmZpZykKKy1BQ19DT05GSUdfTUFDUk9fRElSKG00KQorK2RubCBBQ19DT05GSUdfTUFDUk9fRElSKG00KQorIEFDX0xBTkcoQykKKyAKKyBkbmwgQ29tcHV0ZSB0aGUgY2Fub25pY2FsIGhvc3QgKHJ1bi10aW1lKSBzeXN0ZW0gdHlwZSB2YXJpYWJsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC40LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmM2E1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgVGFnIEltYWdlIEZpbGUgRm9ybWF0IChUSUZGKSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0zNGRhM2RiNDZmYWI3NTAxOTkyZjk2MTVkN2UxNThjZiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucmVtb3Rlc2Vuc2luZy5vcmcvbGlidGlmZi8iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLnJlbW90ZXNlbnNpbmcub3JnL3B1Yi9saWJ0aWZmL3RpZmYtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wyLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YWVlNzEwNzQwOGExMjhjMGM3YjI0Mjg2YzBkYjkwMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4Y2IxZDkwYzk2ZjYxY2RmYzBiY2YwMzZhY2MyNTFjOWRiZTYzMjAzMzRkYTk0MWM3YTgzY2ZlMTU3NmVmODkwIgorCitpbmhlcml0IGF1dG90b29scworCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJheF9jdl9jaGVja19nbF9saWJnbD1ubyIKKworUEFDS0FHRUNPTkZJRyA/PSAiY3h4IGpwZWcgemxpYiBsem1hIFwKKyAgICAgICAgICAgICAgICAgIHN0cmlwLWNob3BwaW5nIGV4dHJhc2FtcGxlLWFzLWFscGhhIGNoZWNrLXljYmNyLXN1YnNhbXBsaW5nIgorCitQQUNLQUdFQ09ORklHW2N4eF0gPSAiLS1lbmFibGUtY3h4LC0tZGlzYWJsZS1jeHgsLCIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnLCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbHptYSwtLWRpc2FibGUtbHptYSx4eiwiCisKKyMgQ29udmVydCBzaW5nbGUtc3RyaXAgdW5jb21wcmVzc2VkIGltYWdlcyB0byBtdWx0aXBsZSBzdHJpcHMgb2Ygc3BlY2lmaWVkCisjIHNpemUgKGRlZmF1bHQ6IDgxOTIpIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2UKK1BBQ0tBR0VDT05GSUdbc3RyaXAtY2hvcHBpbmddID0gIi0tZW5hYmxlLXN0cmlwLWNob3BwaW5nLC0tZGlzYWJsZS1zdHJpcC1jaG9wcGluZywsIgorCisjIFRyZWF0IGEgZm91cnRoIHNhbXBsZSB3aXRoIG5vIEVYVFJBU0FNUExFXyB2YWx1ZSBhcyBiZWluZyBBU1NPQ0FMUEhBCitQQUNLQUdFQ09ORklHW2V4dHJhc2FtcGxlLWFzLWFscGhhXSA9ICItLWVuYWJsZS1leHRyYXNhbXBsZS1hcy1hbHBoYSwtLWRpc2FibGUtZXh0cmFzYW1wbGUtYXMtYWxwaGEsLCIKKworIyBDb250cm9sIHBpY2tpbmcgdXAgWUNiQ3Igc3Vic2FtcGxlIGluZm8uIERpc2FibGUgdG8gc3VwcG9ydCBmaWxlcyBsYWNraW5nCisjIHRoZSB0YWcKK1BBQ0tBR0VDT05GSUdbY2hlY2steWNiY3Itc3Vic2FtcGxpbmddID0gIi0tZW5hYmxlLWNoZWNrLXljYmNyLXN1YnNhbXBsaW5nLC0tZGlzYWJsZS1jaGVjay15Y2Jjci1zdWJzYW1wbGluZywsIgorCisjIFN1cHBvcnQgYSBtZWNoYW5pc20gYWxsb3dpbmcgcmVhZGluZyBsYXJnZSBzdHJpcHMgKHVzdWFsbHkgb25lIHN0cmlwIGZpbGVzKQorIyBpbiBjaHVua3Mgd2hlbiB1c2luZyBUSUZGUmVhZFNjYW5saW5lLiBFeHBlcmltZW50YWwgNC4wKyBmZWF0dXJlCitQQUNLQUdFQ09ORklHW2NodW5reS1zdHJpcC1yZWFkXSA9ICItLWVuYWJsZS1jaHVua3ktc3RyaXAtcmVhZCwtLWRpc2FibGUtY2h1bmt5LXN0cmlwLXJlYWQsLCIKKworUEFDS0FHRVMgPSsgInRpZmZ4eCB0aWZmLXV0aWxzIgorRklMRVNfdGlmZnh4ID0gIiR7bGliZGlyfS9saWJ0aWZmeHguc28uKiIKK0ZJTEVTX3RpZmYtdXRpbHMgPSAiJHtiaW5kaXJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidm9yYmlzL2xpYnZvcmJpc18xLjMuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnZvcmJpcy9saWJ2b3JiaXNfMS4zLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2ZTBmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnZvcmJpcy9saWJ2b3JiaXNfMS4zLjUuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJPZ2cgVm9yYmlzIEF1ZGlvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiT2dnIFZvcmJpcyBpcyBhIGhpZ2gtcXVhbGl0eSBsb3NzeSBhdWRpbyBjb2RlYyBcCit0aGF0IGlzIGZyZWUgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJlc3RyaWN0aW9ucy4gbGlidm9yYmlzIFwKK2lzIHRoZSBtYWluIHZvcmJpcyBjb2RlYyBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudm9yYmlzLmNvbS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2QyYzQ4N2QyZmM3ZGQzZTNjN2M0NjVhNWI3ZjYyMTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS92b3JiaXMvdm9yYmlzZW5jLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZDFjMWQxMzg4NjNkNjMxNTEzMTE5M2Q0MDQ2ZDgxY2IiCitERVBFTkRTID0gImxpYm9nZyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL3ZvcmJpcy8ke0JQfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiMjhjYjI4MDk3YzA3YTczNWQ2YWY1NmU1OThlMWM5MGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTRmOTRhOTUyN2ZmMGE4ODQ3N2JlMGE3MWMwYmFiMDlhNGMzZmViZTBlZDg3OGIyNDgyNDkwNmNkNGIwZTFkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWMtMC40LjEvYWx0aXZlY19oX25lZWRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM1NjQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWMtMC40LjEvYWx0aXZlY19oX25lZWRlZC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitBZGQgbmV3IG1ldGhvZCB0byBqdWRnZSB3aGV0aGVyIDxhbHRpdmVjLmg+IGlzIG5lZWRlZAorCitUaGUgb3JpZ2luYWwgbG9naWMgd2lsbCB1c2UgInR5cGVkZWYgdmVjdG9yIGludCB0OyIgdG8ganVkZ2UKK3doZXRoZXIgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkLiBhbHRpdmVjLmggY29udGFpbnMgdGhlIGZvbGxvd2luZworc3RhdGVtZW50OgorCisgI2lmICFkZWZpbmVkKF9fQVBQTEVfQUxUSVZFQ19fKQorICNkZWZpbmUgdmVjdG9yIF9fdmVjdG9yCisgI2RlZmluZSBwaXhlbCBfX3BpeGVsCisgI2RlZmluZSBib29sIAorICNlbmRpZgorCitJbiBnY2MtNC4zLjMsIF9fQVBQTEVfQUxUSVZFQ19fIGlzIG5vdCBkZWZpbmVkIGJ5IGNvbXBpbGVyLCBuZWl0aGVyCithcyB2ZWN0b3IsIHBpeGVsLCBhbmQgYm9vbC4gSW4gb3JkZXIgdG8gbWFrZSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7IgorcGFzcyB0aGUgY29tcGlsYXRpb24sIHdlIG5lZWQgdG8gaW5jbHVkZSBhbHRpdmVjLmguCisKK0hvd2V2ZXIgaW4gZ2NjLTQuNS4wLCBfX0FQUExFX0FMVElWRUNfXyBpcyBkZWZpbmVkIGJ5IGNvbXBpbGVyLAorc28gYXMgdmVjdG9yLCBwaXhlbCwgYW5kIGJvb2wuIFdlIGNvdWxkIG5vdCBqdWRnZSB3aGV0aGVyCithbHRpdmVjLmggaXMgbmVlZGVkIGJ5ICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiLgorSGVyZSB3ZSBpbmNsdWRlIGFub3RoZXIgc3RhdGVtZW50ICJpbnQgdG1wID0gX19DUjZfRVE7IiwgaW4KK3doaWNoIF9fQ1I2X0VRIGlzIGRlZmluZWQgaW4gYWx0aXZlYy5oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtcnVOIG1wZWcyZGVjLTAuNC4xLW9yaWcvY29uZmlndXJlLmluIG1wZWcyZGVjLTAuNC4xL2NvbmZpZ3VyZS5pbgorLS0tIG1wZWcyZGVjLTAuNC4xLW9yaWcvY29uZmlndXJlLmluCTIwMTAtMDktMTQgMjA6NTU6NDIuMzk5Njg3NjYzICswODAwCisrKysgbXBlZzJkZWMtMC40LjEvY29uZmlndXJlLmluCTIwMTAtMDktMTQgMjA6NTY6NDMuNDAzMjA0NjQ4ICswODAwCitAQCAtNzUsMTEgKzc1LDExIEBACisgCQkgQ0ZMQUdTPSIkT1BUX0NGTEFHUyAkVFJZX0NGTEFHUyAkQ0ZMQUdTIgorIAkJIEFDX01TR19DSEVDS0lORyhbaWYgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkXSkKKyAJCSBBQ19UUllfQ09NUElMRShbXSwKKy0JCSAgICBbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7CisrCQkgICAgW3R5cGVkZWYgdmVjdG9yIGludCB0OyBpbnQgdG1wID0gX19DUjZfRVE7CisgCQkgICAgIHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisgCQkgICAgW2hhdmVfYWx0aXZlYz15ZXM7IEFDX01TR19SRVNVTFQobm8pXSwKKyAJCSAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxhbHRpdmVjLmg+XSwKKy0JCQlbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7IHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisrCQkJW3R5cGVkZWYgdmVjdG9yIGludCB0OyBpbnQgdG1wID0gX19DUjZfRVE7IHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisgCQkJW0FDX0RFRklORShbSEFWRV9BTFRJVkVDX0hdLCwKKyAJCQkgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWx0aXZlYy5oPiBoZWFkZXIuXSkKKyAJCQkgaGF2ZV9hbHRpdmVjPXllczsgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkZTJiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBhbmQgdGVzdCBwcm9ncmFtIGZvciBkZWNvZGluZyBNUEVHLTIgYW5kIE1QRUctMSB2aWRlbyBzdHJlYW1zIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvbXBlZzIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIyO21kNT1lYWQ2MjYwMmQ0NjM4MzI5ZDNiNWI4NmE1NTgwMzE1NCIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC9maWxlcy9tcGVnMmRlYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWx0aXZlY19oX25lZWRlZC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjc2MzFiMGE0YmNmZGQwZDc4YzBiYjAwODMwODBiMGRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3NGE3NjA2OGY4ZWMzNmQ0YmI1OWEwM2JmMTE1N2JlNDQxMThjYTAyMjUyMTgwZThiMzU4YjBiNWUzZWRlZWUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zZGwiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgsLS13aXRob3V0LXgsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4diIKKworUEFDS0FHRVMgPSAibXBlZzJkZWMtZGJnIG1wZWcyZGVjIG1wZWcyZGVjLWRvYyBsaWJtcGVnMiBsaWJtcGVnMi1kZXYgbGlibXBlZzJjb252ZXJ0IGxpYm1wZWcyY29udmVydC1kZXYgbGlibXBlZzItc3RhdGljZGV2IGxpYm1wZWcyY29udmVydC1zdGF0aWNkZXYiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGlibXBlZzIgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLnNvLioiCitGSUxFU19saWJtcGVnMmNvbnZlcnQgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5zby4qIgorRklMRVNfbGlibXBlZzItZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMi5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm1wZWcyLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyLnBjIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L21wZWcyZGVjL21wZWcyLmgiCitGSUxFU19saWJtcGVnMi1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLmEiCitGSUxFU19saWJtcGVnMmNvbnZlcnQtZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJtcGVnMmNvbnZlcnQucGMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L21wZWcyZGVjL21wZWcyY29udmVydC5oIgorRklMRVNfbGlibXBlZzJjb252ZXJ0LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LmEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjgwNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYwpAQCAtMCwwICsxLDE5NyBAQAorU1VNTUFSWSA9ICJTb3VuZCBzZXJ2ZXIgZm9yIExpbnV4IGFuZCBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnB1bHNlYXVkaW8ub3JnIgorQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTDttZDU9NDMyNWFmZDM5NmZlYmNiNjU5YzM2YjQ5NTMzMTM1ZDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTDttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3B1bHNlY29yZS9yZXNhbXBsZXIuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT0wOTc5NDAxMmFlMTY5MTJjMDI3MGYzMjgwY2M4ZmY4NCIKKworREVQRU5EUyA9ICJsaWJhdG9taWMtb3BzIGxpYm9pbCBsaWJzbmRmaWxlMSBsaWJ0b29sIgorIyBvcHRpb25hbAorREVQRU5EUyArPSAidWRldiBhbHNhLWxpYiBnbGliLTIuMCBnY29uZiIKK0RFUEVORFMgKz0gImpzb24tYyBnZGJtIHNwZWV4ZHNwIGxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUgbGliY2FwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXNlcmFkZCBnZXR0ZXh0IHBlcmxuYXRpdmUgYmx1ZXRvb3RoIHN5c3RlbWQKKworIyAqLmRlc2t0b3AgcnVsZXMgd29udCBiZSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgd2lsbCBmYWlsCisjIGlmIHVzaW5nIC0tZGlzYWJsZS1ubHMKK1VTRV9OTFMgPSAieWVzIgorCitFWFRSQV9PRUNPTkYgPSAiXAorCQktLWRpc2FibGUtaGFsLWNvbXBhdCBcCisJCS0tZGlzYWJsZS1vcmMgXAorCQktLWVuYWJsZS10Y3B3cmFwPW5vIFwKKwkJLS13aXRoLWFjY2Vzcy1ncm91cD1hdWRpbyBcCisJCS0tZGlzYWJsZS1vcGVuc3NsIFwKKwkJLS1kaXNhYmxlLXhlbiBcCisJCS0td2l0aC1kYXRhYmFzZT1zaW1wbGUgXAorCQktLXdpdGhvdXQtZmZ0dyBcCisJCS0td2l0aG91dC16c2gtY29tcGxldGlvbi1kaXIgXAorCQktLXdpdGgtdWRldi1ydWxlcy1kaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQgXAorICAgICAgICAgICAgICAgIGFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPW5vIFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdhdmFoaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAnb2Zvbm8nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIGRidXMgXAorICAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1tkYnVzXSA9ICItLWVuYWJsZS1kYnVzLC0tZGlzYWJsZS1kYnVzLGRidXMiCitQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXo0LC0tZGlzYWJsZS1ibHVlejQsYmx1ZXo0IHNiYyIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo1XSA9ICItLWVuYWJsZS1ibHVlejUsLS1kaXNhYmxlLWJsdWV6NSxibHVlejUgc2JjIgorUEFDS0FHRUNPTkZJR1tvZm9ub10gPSAiLS1lbmFibGUtYmx1ZXo1LW9mb25vLWhlYWRzZXQsLS1kaXNhYmxlLWJsdWV6NS1vZm9uby1oZWFkc2V0LG9mb25vIgorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0tZW5hYmxlLWd0azMsLS1kaXNhYmxlLWd0azMsZ3RrKzMiCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQtZGFlbW9uIC0tZW5hYmxlLXN5c3RlbWQtbG9naW4gLS1lbmFibGUtc3lzdGVtZC1qb3VybmFsIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0sLS1kaXNhYmxlLXN5c3RlbWQtZGFlbW9uIC0tZGlzYWJsZS1zeXN0ZW1kLWxvZ2luIC0tZGlzYWJsZS1zeXN0ZW1kLWpvdXJuYWwsc3lzdGVtZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSx2aXJ0dWFsL2xpYngxMSBsaWJ4dHN0IGxpYmljZSBsaWJzbSBsaWJ4Y2IiCitQQUNLQUdFQ09ORklHW2F2YWhpXSA9ICItLWVuYWJsZS1hdmFoaSwtLWRpc2FibGUtYXZhaGksYXZhaGkiCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKKyMgU2luY2UgbWFueSBlbWJlZGRlZCBzeXN0ZW1zIGRvbid0IGhhdmUgbm9uLXJvb3QgdXNlcnMsIGl0J3MgdXNlZnVsIHRvIGJlCisjIGFibGUgdG8gdXNlIHB1bHNlYXVkaW8gYXV0b3NwYXduIGZvciByb290IGFzIHdlbGwuCitQQUNLQUdFQ09ORklHW2F1dG9zcGF3bi1mb3Itcm9vdF0gPSAiLCwsIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLS1lbmFibGUtbmVvbi1vcHQ9bm8iLCBkKX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybWViID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtLWVuYWJsZS1uZW9uLW9wdD1ubyIsIGQpfSIKKworCitleHBvcnQgVEFSR0VUX1BGUFUgPSAiJHtUQVJHRVRfRlBVfSIKKworIyBUT0RPOiBVc2UgbW9yZSBmaW5lIGdyYW51bGFyIHZlcnNpb24KKyNPRV9MVF9SUEFUSF9BTExPVz0iOiR7bGliZGlyfS9wdWxzZS0wLjk6IgorT0VfTFRfUlBBVEhfQUxMT1cgPSAiYW55IgorT0VfTFRfUlBBVEhfQUxMT1dbZXhwb3J0XT0iMSIKKworc2V0X2NmZ192YWx1ZSAoKSB7CisJc2VkIC1pIC1lICJzL1woOyAqXClcPyQyID0uKi8kMiA9ICQzLyIgIiQxIgorCWlmICEgZ3JlcCAtcSAiXiQyID0gJDNcJCIgIiQxIjsgdGhlbgorCQlkaWUgIlVzZSBvZiBzZWQgdG8gc2V0ICckMicgdG8gJyQzJyBpbiAnJDEnIGZhaWxlZCIKKwlmaQorfQorCitkb19jb21waWxlX2FwcGVuZCAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYXV0b3NwYXduLWZvci1yb290JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJc2V0X2NmZ192YWx1ZSBzcmMvY2xpZW50LmNvbmYgYWxsb3ctYXV0b3NwYXduLWZvci1yb290IHllcworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS92b2xhdGlsZXMuMDRfcHVsc2UgICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzL3ZvbGF0aWxlcy4wNF9wdWxzZQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gInB1bHNlYXVkaW8tc2VydmVyIgorR1JPVVBBRERfUEFSQU1fcHVsc2VhdWRpby1zZXJ2ZXIgPSAicHVsc2UiCitVU0VSQUREX1BBUkFNX3B1bHNlYXVkaW8tc2VydmVyID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9wdWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWdyb3VwcyBhdWRpbyxwdWxzZSAtLWdpZCBwdWxzZSBwdWxzZSIKKworIyBUaGUgY29uc29sZS1raXQgbW9kdWxlIGlzIGluY2x1ZGVkIGhlcmUgZXhwbGljaXRseSBzbyBiaXRiYWtlIGNhbiBtYXAgdG8gdGhlCisjIFJERVBFTkRTIHdlIGRlZmluZSBmb3IgaXQgaW4gdGhpcyByZWNpcGUsIGFuZCB0aGVyZWJ5IGVuc3VyZSB0aGF0IHdoZW4KKyMgYWRkaW5nIHRoZSBjb25zb2xlLWtpdCBtb2R1bGUgdG8gYW4gaW1hZ2UsIHdlIGFsc28gZ2V0IHRoZSBuZWNlc3NhcnkKKyMgY29uc29sZWtpdCBwYWNrYWdlIHByb2R1Y2VkLgorUEFDS0FHRVMgPSsgImxpYnB1bHNlY29yZSBsaWJwdWxzZWNvbW1vbiBsaWJwdWxzZSBsaWJwdWxzZS1zaW1wbGUgbGlicHVsc2UtbWFpbmxvb3AtZ2xpYiBcCisgICAgICAgICAgICAgcHVsc2VhdWRpby1zZXJ2ZXIgcHVsc2VhdWRpby1taXNjICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2RidXMnLCAncHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQnLCAnJywgZCl9IgorCisjdXBncmFkZSBwYXRoOgorUlJFUExBQ0VTX3B1bHNlYXVkaW8tc2VydmVyID0gImxpYnB1bHNlLWJpbiBsaWJwdWxzZS1jb25mIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecHVsc2VhdWRpby1saWItLiogXnB1bHNlYXVkaW8tbW9kdWxlLS4qIgorCitGSUxFU19saWJwdWxzZWNvcmUgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlY29yZSouc28iCitGSUxFU19saWJwdWxzZWNvbW1vbiA9ICIke2xpYmRpcn0vcHVsc2VhdWRpby9saWJwdWxzZWNvbW1vbiouc28iCisKKyMgY2xpZW50LmNvbmYgY29uZmlndXJlcyB0aGUgYmVoYXZpb3VyIG9mIGxpYnB1bHNlLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBzYW1lCisjIHBhY2thZ2UuCitGSUxFU19saWJwdWxzZSA9ICIke2xpYmRpcn0vbGlicHVsc2Uuc28uKiAke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mIgorCitGSUxFU19saWJwdWxzZS1zaW1wbGUgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlLXNpbXBsZS5zby4qIgorRklMRVNfbGlicHVsc2UtbWFpbmxvb3AtZ2xpYiA9ICIke2xpYmRpcn0vbGlicHVsc2UtbWFpbmxvb3AtZ2xpYi5zby4qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vcHVsc2UvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B1bHNlLSR7UFZ9L21vZHVsZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8qLmxhICR7ZGF0YWRpcn0vdmFsYSAke2xpYmRpcn0vY21ha2UiICAgCitGSUxFU18ke1BOfS1jb25mID0gIiR7c3lzY29uZmRpcn0iCitGSUxFU18ke1BOfS1iaW4gKz0gIiR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvdm9sYXRpbGVzLjA0X3B1bHNlIgorRklMRVNfJHtQTn0tc2VydmVyID0gIiR7YmluZGlyfS9wdWxzZWF1ZGlvICR7YmluZGlyfS9zdGFydC0qICR7c3lzY29uZmRpcn0gJHtiaW5kaXJ9L3BhY3RsICovdWRldi9ydWxlcy5kLyoucnVsZXMgKi8qL3VkZXYvcnVsZXMuZC8qLnJ1bGVzICR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9LyoiCisKKyNTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNlcnZlciIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zZXJ2ZXIgPSAicHVsc2VhdWRpby5zZXJ2aWNlIgorCitGSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS8qICR7bGliZGlyfS9wdWxzZWF1ZGlvL2xpYnB1bHNlZHNwLnNvIgorCisjIEFsbG93IHRoZSBwdWxzZWF1ZGlvIHBhY2thZ2UgdG8gYmUgY3JlYXRlZCBlbXB0eSBhcyBhIHBsYWNlaG9sZGVyICgtZGJnIGFuZCAtZGV2IGRlcGVuZCBvbiBpdCkKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK0NPTkZGSUxFU19saWJwdWxzZSA9ICIke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mIgorCitDT05GRklMRVNfcHVsc2VhdWRpby1zZXJ2ZXIgPSAiXCAKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9kZWZhdWx0LnBhIFwKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9kYWVtb24uY29uZiBcCisgICR7c3lzY29uZmRpcn0vcHVsc2Uvc3lzdGVtLnBhIFwKKyAgIgorCitwa2dfcG9zdGluc3RfJHtQTn0tc2VydmVyKCkgeworICAgICAgICBpZiBbIC16ICIkRCIgXSAmJiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF0gOyB0aGVuCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKyAgICAgICAgZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgI2Quc2V0VmFyKCdQS0dfcHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJykKKworICAgIHBsdWdpbmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbmRpciwgJ15tb2R1bGUtKC4qKVwuc28kJywgJ3B1bHNlYXVkaW8tbW9kdWxlLSVzJywgJ1B1bHNlQXVkaW8gbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5kaXIsICdebGliKC4qKVwuc28kJywgJ3B1bHNlYXVkaW8tbGliLSVzJywgJ1B1bHNlQXVkaW8gbGlicmFyeSBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBwcmVwZW5kPVRydWUpCit9CisKK1JERVBFTkRTX3B1bHNlYXVkaW8tc2VydmVyID0gIiBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZmlsdGVyLWFwcGx5IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1maWx0ZXItaGV1cmlzdGljcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtdWRldi1kZXRlY3QgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLW51bGwtc2luayBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV2aWNlLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXN0cmVhbS1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1jYXJkLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV0ZWN0IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLXNpbmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsc2Etc291cmNlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLWNhcmQgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLW5hdGl2ZS1wcm90b2NvbC11bml4IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZWZhdWx0LWRldmljZS1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1pbnRlbmRlZC1yb2xlcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcmVzY3VlLXN0cmVhbXMgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsd2F5cy1zaW5rIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1zdXNwZW5kLW9uLWlkbGUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXBvc2l0aW9uLWV2ZW50LXNvdW5kcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcm9sZS1jb3JrIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUiCisKKyMgSWYgdGhlIHNlcnZlciBpcyBpbnN0YWxsZWQsIGl0J3MgdXN1YWxseSBkZXNpcmFibGUgdG8gbWFrZSBBTFNBIGFwcGxpY2F0aW9ucworIyB1c2UgUHVsc2VBdWRpby4gYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZiB3aWxsIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24KKyMgdGhhdCBtYWtlcyB0aGUgUHVsc2VBdWRpbyBwbHVnaW4gdGhlIGRlZmF1bHQgQUxTQSBkZXZpY2UuCitSREVQRU5EU19wdWxzZWF1ZGlvLXNlcnZlciArPSAiYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZiIKKworIyBwdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCBpcyBidWlsdCB3aGVuZXZlciBkYnVzIGlzIGVuYWJsZWQgYnkgUEFDS0FHRUNPTkZJRworIyBidXQgY29uc29sZWtpdCBkZXBlbmRzIG9uIGxpYngxMSBhbmQgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIERJU1RSTyB3aXRoIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JERVBFTkRTX3B1bHNlYXVkaW8tbW9kdWxlLWNvbnNvbGUta2l0ID0rICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdjb25zb2xla2l0JywgJycsIGQpfSIKK1JERVBFTkRTX3B1bHNlYXVkaW8tbWlzYyArPSAicHVsc2VhdWRpby1tb2R1bGUtY2xpLXByb3RvY29sLXVuaXgiCisKK0ZJTEVTX3B1bHNlYXVkaW8tbW9kdWxlLWdjb25mICs9ICIke2xpYmV4ZWNkaXJ9L3B1bHNlL2djb25mLWhlbHBlciIKK0ZJTEVTX3B1bHNlYXVkaW8tbW9kdWxlLWFsc2EtY2FyZCArPSAiJHtkYXRhZGlyfS9wdWxzZWF1ZGlvL2Fsc2EtbWl4ZXIiCisKKyMgVGhlIGNvbnNvbGUta2l0IG1vZHVsZSBpcyBnb29kIHRvIGhhdmUgb24gWDExIHN5c3RlbXMgKGl0IGtlZXBzIFB1bHNlQXVkaW8KKyMgcnVubmluZyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1c2VyIGxvZ2luIHNlc3Npb24pLiBUaGUgZGV2aWNlLW1hbmFnZXIgYW5kCisjIHgxMS0qIG1vZHVsZXMgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGUgc3RhcnQtcHVsc2VhdWRpby14MTEgc2NyaXB0LCBzbyB0aG9zZQorIyBtb2R1bGVzIG11c3QgYmUgaW5zdGFsbGVkIHdoZW4gWDExIGlzIGVuYWJsZWQuCitSREVQRU5EU19wdWxzZWF1ZGlvLXNlcnZlciArPSAiXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQgXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLWRldmljZS1tYW5hZ2VyIFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEtY29yay1yZXF1ZXN0IFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEtcHVibGlzaCBcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUteDExLXhzbXAgXAorICAgICAgICAnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNsaWVudC1jb25mLUFkZC1hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5ZWI3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNsaWVudC1jb25mLUFkZC1hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorRnJvbSAxY2I1NjQ3Zjc2ZGM4Y2Q3YmFjYmNlMmE2NGZhYzllNmMyZGMzYjE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE0OjMyOjQzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNsaWVudC1jb25mOiBBZGQgYWxsb3ctYXV0b3NwYXduLWZvci1yb290CisKK1VzdWFsbHkgYXV0b3NwYXduaW5nIGZvciByb290IGlzIGEgYmFkIGlkZWEsIHNpbmNlIGl0IGNhbiBlYXNpbHkKK2ludGVyZmVyZSB3aXRoIG90aGVyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcywgYnV0IGluIGVtYmVkZGVkCitlbnZpcm9ubWVudHMgd2hlcmUgb25seSByb290IGV4aXN0cywgYXV0b3NwYXduaW5nIGlzIGZpbmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yMzU0OV0KKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4gfCA5ICsrKysrKysrKworIHNyYy9wdWxzZS9jbGllbnQtY29uZi5jICAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jbGllbnQtY29uZi5oICAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jbGllbnQuY29uZi5pbiAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jb250ZXh0LmMgICAgICAgICAgICB8IDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbiBiL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgoraW5kZXggMTAwMmRiZS4uMDA1ODQ5MCAxMDA2NDQKKy0tLSBhL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgorKysrIGIvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCitAQCAtNzEsNiArNzEsMTUgQEAgTGljZW5zZSBhbG9uZyB3aXRoIFB1bHNlQXVkaW87IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgICAgPC9vcHRpb24+CisgCisgICAgIDxvcHRpb24+CisrICAgICAgPHA+PG9wdD5hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3Q9PC9vcHQ+IEFsbG93IGF1dG9zcGF3bmluZyBhbHNvIGZvciByb290LgorKyAgICAgIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSwgZGVmYXVsdHMgdG8gPG9wdD5ubzwvb3B0Pi4gSWYgdGhlIDxvcHQ+YXV0b3NwYXduCisrICAgICAgPC9vcHQ+IG9wdGlvbiBpcyBkaXNhYmxlZCwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gQXV0b3NwYXduaW5nIGZvcgorKyAgICAgIHJvb3QgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBydW5uaW5nIFB1bHNlQXVkaW8gYXMgcm9vdCB3aWxsCisrICAgICAgaW50ZXJmZXJlIHdpdGggcmVndWxhciB1c2VycycgUHVsc2VBdWRpbyBpbnN0YW5jZXMuIFRoaXMgb3B0aW9uIHNob3VsZCBiZQorKyAgICAgIGVuYWJsZWQgb25seSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlcmUgYXJlIG5vIHJlZ3VsYXIgdXNlcnMgYXQgYWxsLjwvcD4KKysgICAgPC9vcHRpb24+CisrCisrICAgIDxvcHRpb24+CisgICAgICAgPHA+PG9wdD5kYWVtb24tYmluYXJ5PTwvb3B0PiBQYXRoIHRvIHRoZSBQdWxzZUF1ZGlvIGRhZW1vbiB0bworICAgICAgIHJ1biB3aGVuIGF1dG9zcGF3bmluZy4gRGVmYXVsdHMgdG8gYSBwYXRoIGNvbmZpZ3VyZWQgYXQgY29tcGlsZQorICAgICAgIHRpbWUuPC9wPgorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK2luZGV4IDgzMzMxZjguLjA0NzQ1ODMgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgdm9pZCBwYV9jbGllbnRfY29uZl9sb2FkKHBhX2NsaWVudF9jb25mICpjLCBib29sIGxvYWRfZnJvbV94MTEsIGJvb2wgbG9hZF9mcm9tX2UKKyAgICAgICAgIHsgImRlZmF1bHQtc2VydmVyIiwgICAgICAgICBwYV9jb25maWdfcGFyc2Vfc3RyaW5nLCAgICZjLT5kZWZhdWx0X3NlcnZlciwgTlVMTCB9LAorICAgICAgICAgeyAiZGVmYXVsdC1kYnVzLXNlcnZlciIsICAgIHBhX2NvbmZpZ19wYXJzZV9zdHJpbmcsICAgJmMtPmRlZmF1bHRfZGJ1c19zZXJ2ZXIsIE5VTEwgfSwKKyAgICAgICAgIHsgImF1dG9zcGF3biIsICAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2VfYm9vbCwgICAgICZjLT5hdXRvc3Bhd24sIE5VTEwgfSwKKysgICAgICAgIHsgImFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCIsIHBhX2NvbmZpZ19wYXJzZV9ib29sLCAgICZjLT5hbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3QsIE5VTEwgfSwKKyAgICAgICAgIHsgImNvb2tpZS1maWxlIiwgICAgICAgICAgICBwYV9jb25maWdfcGFyc2Vfc3RyaW5nLCAgICZjLT5jb29raWVfZmlsZV9mcm9tX2NsaWVudF9jb25mLCBOVUxMIH0sCisgICAgICAgICB7ICJkaXNhYmxlLXNobSIsICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlX2Jvb2wsICAgICAmYy0+ZGlzYWJsZV9zaG0sIE5VTEwgfSwKKyAgICAgICAgIHsgImVuYWJsZS1zaG0iLCAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2Vfbm90X2Jvb2wsICZjLT5kaXNhYmxlX3NobSwgTlVMTCB9LAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKK2luZGV4IGVhYzcwNWEuLjEzMTM5M2EgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAorKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKK0BAIC0zOCw2ICszOCw3IEBAIHR5cGVkZWYgc3RydWN0IHBhX2NsaWVudF9jb25mIHsKKyAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9hcHBsaWNhdGlvbjsKKyAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9jbGllbnRfY29uZjsKKyAgICAgYm9vbCBhdXRvc3Bhd24sIGRpc2FibGVfc2htLCBhdXRvX2Nvbm5lY3RfbG9jYWxob3N0LCBhdXRvX2Nvbm5lY3RfZGlzcGxheTsKKysgICAgYm9vbCBhbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3Q7CisgICAgIHNpemVfdCBzaG1fc2l6ZTsKKyB9IHBhX2NsaWVudF9jb25mOworIAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbiBiL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbgoraW5kZXggMjZiNzc5MC4uNjk4MzBlZiAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbgorKysrIGIvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluCitAQCAtMjMsNiArMjMsNyBAQAorIDsgZGVmYXVsdC1kYnVzLXNlcnZlciA9CisgCisgOyBhdXRvc3Bhd24gPSB5ZXMKKys7IGFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCA9IG5vCisgOyBkYWVtb24tYmluYXJ5ID0gQFBBX0JJTkFSWUAKKyA7IGV4dHJhLWFyZ3VtZW50cyA9IC0tbG9nLXRhcmdldD1zeXNsb2cKKyAKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2UvY29udGV4dC5jIGIvc3JjL3B1bHNlL2NvbnRleHQuYworaW5kZXggNGJjNDQ1Zi4uZDZjM2Y2ZCAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jb250ZXh0LmMKKysrKyBiL3NyYy9wdWxzZS9jb250ZXh0LmMKK0BAIC05NzYsNyArOTc2LDcgQEAgaW50IHBhX2NvbnRleHRfY29ubmVjdCgKKyAgICAgaWYgKCEoZmxhZ3MgJiBQQV9DT05URVhUX05PQVVUT1NQQVdOKSAmJiBjLT5jb25mLT5hdXRvc3Bhd24pIHsKKyAKKyAjaWZkZWYgSEFWRV9HRVRVSUQKKy0gICAgICAgIGlmIChnZXR1aWQoKSA9PSAwKQorKyAgICAgICAgaWYgKCFjLT5jb25mLT5hbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3QgJiYgZ2V0dWlkKCkgPT0gMCkKKyAgICAgICAgICAgICBwYV9sb2dfZGVidWcoIk5vdCBkb2luZyBhdXRvc3Bhd24gc2luY2Ugd2UgYXJlIHJvb3QuIik7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBjLT5kb19hdXRvc3Bhd24gPSB0cnVlOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jb25mLXBhcnNlci1hZGQtc3VwcG9ydC1mb3ItLmQtZGlyZWN0b3JpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jb25mLXBhcnNlci1hZGQtc3VwcG9ydC1mb3ItLmQtZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmMWIyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5NiBAQAorRnJvbSA4Y2I2NDNiYmYwYTI4N2Q2Nzc5NGU2ODBkMjZmNDljNTAzZjMxMDUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDIxIE1heSAyMDE1IDIxOjAwOjU5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmYtcGFyc2VyOiBhZGQgc3VwcG9ydCBmb3IgLmQgZGlyZWN0b3JpZXMKKworVGhpcyBhbGxvd3MgYSBjb25maWd1cmF0aW9uIHNjaGVtZSB3aGVyZSBwcmlvciB0byBsb2FkaW5nCitjb25maWd1cmF0aW9uIGZyb20gInNvbWVmaWxlIiwgdGhlIHBhcnNlciBmaXJzdCBsb2FkcyBjb25maWd1cmF0aW9uCitmcm9tIGZpbGVzIGluIGRpcmVjdG9yeSAic29tZWZpbGUuZCIuIFRoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkKK2VuYWJsZWQgb25seSBmb3IgY2xpZW50LmNvbmYgYW5kIGRhZW1vbi5jb25mLgorCitUaGlzIG1ha2VzIGl0IGVhc2llciB0byBjcmVhdGUgY29uZmlndXJhdGlvbiBwYWNrYWdlcyBpbiBkaXN0cmlidXRpb25zCit3aGVuIHRoZXJlJ3MgbmVlZCB0byBoYXZlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGluIGRpZmZlcmVudCBzZXR1cHMuCitGb3IgZXhhbXBsZSwgdGhlIGdyYXBoaWNhbCBTYXRvIGVudmlyb25tZW50IGluIE9wZW5FbWJlZGRlZC1jb3JlIG5lZWRzCit0byBzZXQgYWxsb3ctYXV0b3NwYXduLWZvci1yb290PXRydWUgaW4gY2xpZW50LmNvbmYsIGJ1dCB0aGUgZGVmYXVsdAorY29uZmlndXJhdGlvbiBpbiBPcGVuRW1iZWRkZWQtY29yZSBzaG91bGQgbm90IHNldCB0aGF0IG9wdGlvbi4gV2l0aAordGhpcyBwYXRjaCwgSSBjYW4gY3JlYXRlIGEgU2F0by1zcGVjaWZpYyBwYWNrYWdlIHRoYXQgc2ltcGx5IGluc3RhbGxzCis1MC1zYXRvLmNvbmYgaW4gL2V0Yy9wdWxzZS9jbGllbnQuY29uZi5kIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCB0aGUKK21haW4gY2xpZW50LmNvbmYgZmlsZSBjb21pbmcgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5wdWxzZWF1ZGlvLmdlbmVyYWwvMjM1OTJdCisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYyAgICAgICAgICAgfCAgNCArKy0tCisgc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jIHwgIDIgKy0KKyBzcmMvcHVsc2UvY2xpZW50LWNvbmYuYyAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYyAgICAgICAgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIHNyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaCAgICAgICAgICAgICB8ICA4ICsrKysrKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMgYi9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMKK2luZGV4IDIxYThlZGIuLjEzMzJmYzYgMTAwNjQ0CistLS0gYS9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMKKysrKyBiL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYworQEAgLTYxNyw3ICs2MTcsNyBAQCBpbnQgcGFfZGFlbW9uX2NvbmZfbG9hZChwYV9kYWVtb25fY29uZiAqYywgY29uc3QgY2hhciAqZmlsZW5hbWUpIHsKKyAgICAgY2kuZGVmYXVsdF9jaGFubmVsX21hcF9zZXQgPSBjaS5kZWZhdWx0X3NhbXBsZV9zcGVjX3NldCA9IGZhbHNlOworICAgICBjaS5jb25mID0gYzsKKyAKKy0gICAgciA9IGYgPyBwYV9jb25maWdfcGFyc2UoYy0+Y29uZmlnX2ZpbGUsIGYsIHRhYmxlLCBOVUxMLCBOVUxMKSA6IDA7CisrICAgIHIgPSBmID8gcGFfY29uZmlnX3BhcnNlKGMtPmNvbmZpZ19maWxlLCBmLCB0YWJsZSwgTlVMTCwgdHJ1ZSwgTlVMTCkgOiAwOworIAorICAgICBpZiAociA+PSAwKSB7CisgCitkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYworaW5kZXggMjMxNDYxMi4uOTg4YjRmZSAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCisrKysgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYworQEAgLTI0ODMsNyArMjQ4Myw3IEBAIHBhX2Fsc2FfcGF0aCogcGFfYWxzYV9wYXRoX25ldyhjb25zdCBjaGFyICpwYXRoc19kaXIsIGNvbnN0IGNoYXIgKmZuYW1lLCBwYV9hbHNhCisgCisgICAgIGZuID0gcGFfbWF5YmVfcHJlZml4X3BhdGgoZm5hbWUsIHBhdGhzX2Rpcik7CisgCistICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBwLT5wcm9wbGlzdCwgcCk7CisrICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBwLT5wcm9wbGlzdCwgZmFsc2UsIHApOworICAgICBwYV94ZnJlZShmbik7CisgCisgICAgIGlmIChyIDwgMCkKK0BAIC00Mjg4LDcgKzQyODgsNyBAQCBwYV9hbHNhX3Byb2ZpbGVfc2V0KiBwYV9hbHNhX3Byb2ZpbGVfc2V0X25ldyhjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgcGFfY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhX3J1bl9mcm9tX2J1aWxkX3RyZWUoKSA/IFBBX1NSQ0RJUiAiL21vZHVsZXMvYWxzYS9taXhlci9wcm9maWxlLXNldHMvIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFfQUxTQV9QUk9GSUxFX1NFVFNfRElSKTsKKyAKKy0gICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIE5VTEwsIHBzKTsKKysgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIE5VTEwsIGZhbHNlLCBwcyk7CisgICAgIHBhX3hmcmVlKGZuKTsKKyAKKyAgICAgaWYgKHIgPCAwKQorZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYyBiL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYworaW5kZXggNDJiNmZkOS4uNTQxZjBlNyAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYworKysrIGIvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jCitAQCAtMjA0LDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ydWxlKHN0cnVjdCBydWxlICpyKSB7CisgICAgIHRhYmxlWzBdLmRhdGEgPSAmci0+YXBwbGljYXRpb25fbmFtZTsKKyAgICAgdGFibGVbMV0uZGF0YSA9ICZyLT5pY29uX25hbWU7CisgCistICAgIGlmIChwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHRhYmxlLCBOVUxMLCByKSA8IDApCisrICAgIGlmIChwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHRhYmxlLCBOVUxMLCBmYWxzZSwgcikgPCAwKQorICAgICAgICAgcGFfbG9nX3dhcm4oIkZhaWxlZCB0byBwYXJzZSAuZGVza3RvcCBmaWxlICVzLiIsIGZuKTsKKyAKKyAgICAgcGFfeGZyZWUoZm4pOworZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK2luZGV4IDgzMzMxZjguLjNjMzM4NGQgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK0BAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBwYV9jbGllbnRfY29uZl9sb2FkKHBhX2NsaWVudF9jb25mICpjLCBib29sIGxvYWRfZnJvbV94MTEsIGJvb2wgbG9hZF9mcm9tX2UKKyAKKyAgICAgZiA9IHBhX29wZW5fY29uZmlnX2ZpbGUoREVGQVVMVF9DTElFTlRfQ09ORklHX0ZJTEUsIERFRkFVTFRfQ0xJRU5UX0NPTkZJR19GSUxFX1VTRVIsIEVOVl9DTElFTlRfQ09ORklHX0ZJTEUsICZmbik7CisgICAgIGlmIChmKSB7CistICAgICAgICBwYV9jb25maWdfcGFyc2UoZm4sIGYsIHRhYmxlLCBOVUxMLCBOVUxMKTsKKysgICAgICAgIHBhX2NvbmZpZ19wYXJzZShmbiwgZiwgdGFibGUsIE5VTEwsIHRydWUsIE5VTEwpOworICAgICAgICAgcGFfeGZyZWUoZm4pOworICAgICAgICAgZmNsb3NlKGYpOworICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jIGIvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jCitpbmRleCAyZGNkNDVhLi5kNDczMjMyIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jCisrKysgYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CitAQCAtMTAzLDcgKzEwNCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfbGluZShwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSkgeworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHN0YXRlLT5pdGVtX3RhYmxlLCBzdGF0ZS0+cHJvcGxpc3QsIHN0YXRlLT51c2VyZGF0YSk7CisrICAgICAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBzdGF0ZS0+aXRlbV90YWJsZSwgc3RhdGUtPnByb3BsaXN0LCBmYWxzZSwgc3RhdGUtPnVzZXJkYXRhKTsKKyAgICAgICAgIHBhX3hmcmVlKHBhdGgpOworICAgICAgICAgcmV0dXJuIHI7CisgICAgIH0KK0BAIC0xNTIsOCArMTUzLDEzIEBAIHN0YXRpYyBpbnQgcGFyc2VfbGluZShwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSkgeworICAgICAgICAgcmV0dXJuIG5vcm1hbF9hc3NpZ25tZW50KHN0YXRlKTsKKyB9CisgCisrc3RhdGljIGludCBjb25mX2ZpbHRlcihjb25zdCBzdHJ1Y3QgZGlyZW50ICplbnRyeSkgeworKyAgICByZXR1cm4gcGFfZW5kc3dpdGgoZW50cnktPmRfbmFtZSwgIi5jb25mIik7CisrfQorKworIC8qIEdvIHRocm91Z2ggdGhlIGZpbGUgYW5kIHBhcnNlIGVhY2ggbGluZSAqLworLWludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIHZvaWQgKnVzZXJkYXRhKSB7CisraW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgYm9vbCB1c2VfZG90X2QsCisrICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyZGF0YSkgeworICAgICBpbnQgciA9IC0xOworICAgICBib29sIGRvX2Nsb3NlID0gIWY7CisgICAgIHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgc3RhdGU7CitAQCAtMTYzLDYgKzE2OSwzOCBAQCBpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcAorIAorICAgICBwYV96ZXJvKHN0YXRlKTsKKyAKKysgICAgaWYgKHVzZV9kb3RfZCkgeworKyAgICAgICAgY2hhciAqZGlyX25hbWU7CisrICAgICAgICBpbnQgbjsKKysgICAgICAgIHN0cnVjdCBkaXJlbnQgKiplbnRyaWVzID0gTlVMTDsKKysKKysgICAgICAgIGRpcl9uYW1lID0gcGFfc3ByaW50Zl9tYWxsb2MoIiVzLmQiLCBmaWxlbmFtZSk7CisrCisrICAgICAgICBuID0gc2NhbmRpcihkaXJfbmFtZSwgJmVudHJpZXMsIGNvbmZfZmlsdGVyLCBhbHBoYXNvcnQpOworKyAgICAgICAgaWYgKG4gPj0gMCkgeworKyAgICAgICAgICAgIGludCBpOworKworKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKysgICAgICAgICAgICAgICAgY2hhciAqZmlsZW5hbWUyOworKworKyAgICAgICAgICAgICAgICBmaWxlbmFtZTIgPSBwYV9zcHJpbnRmX21hbGxvYygiJXMiIFBBX1BBVEhfU0VQICIlcyIsIGRpcl9uYW1lLCBlbnRyaWVzW2ldLT5kX25hbWUpOworKyAgICAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2UoZmlsZW5hbWUyLCBOVUxMLCB0LCBwcm9wbGlzdCwgZmFsc2UsIHVzZXJkYXRhKTsKKysgICAgICAgICAgICAgICAgcGFfeGZyZWUoZmlsZW5hbWUyKTsKKysKKysgICAgICAgICAgICAgICAgZnJlZShlbnRyaWVzW2ldKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgZnJlZShlbnRyaWVzKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKKysgICAgICAgICAgICAgICAgcGFfbG9nX2RlYnVnKCJzY2FuZGlyKFwiJXNcIikgZmFpbGVkOiAlcyIsIGRpcl9uYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIHBhX2xvZ193YXJuKCJzY2FuZGlyKFwiJXNcIikgZmFpbGVkOiAlcyIsIGRpcl9uYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHBhX3hmcmVlKGRpcl9uYW1lKTsKKysgICAgfQorKworICAgICBpZiAoIWYgJiYgIShmID0gcGFfZm9wZW5fY2xvZXhlYyhmaWxlbmFtZSwgInIiKSkpIHsKKyAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAgICAgICAgICAgICBwYV9sb2dfZGVidWcoIkZhaWxlZCB0byBvcGVuIGNvbmZpZ3VyYXRpb24gZmlsZSAnJXMnOiAlcyIsIGZpbGVuYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmggYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmgKK2luZGV4IGRiYjZmNWMuLmNjMjBkN2QgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmgKKysrKyBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaAorQEAgLTU5LDYgKzU5LDExIEBAIHN0cnVjdCBwYV9jb25maWdfcGFyc2VyX3N0YXRlIHsKKyAgKiBwYV9jb25maWdfaXRlbXMgaW4gKnQgdGhhdCBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGl0ZW0gd2hlcmUgbHZhbHVlIGlzCisgICogTlVMTC4KKyAgKgorKyAqIElmIHVzZV9kb3RfZCBpcyB0cnVlLCB0aGVuIGJlZm9yZSBwYXJzaW5nIHRoZSBmaWxlIG5hbWVkIGJ5IHRoZSBmaWxlbmFtZQorKyAqIGFyZ3VtZW50LCB0aGUgZnVuY3Rpb24gd2lsbCBwYXJzZSBhbGwgZmlsZXMgZW5kaW5nIHdpdGggIi5jb25mIiBpbgorKyAqIGFscGhhYmV0aWNhbCBvcmRlciBmcm9tIGEgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgZmlsZW5hbWUgKyAiLmQiLCBpZiBzdWNoCisrICogZGlyZWN0b3J5IGV4aXN0cy4KKysgKgorICAqIFNvbWUgY29uZmlndXJhdGlvbiBmaWxlcyBtYXkgY29udGFpbiBhIFByb3BlcnRpZXMgc2VjdGlvbiwgd2hpY2gKKyAgKiBpcyBhIGJpdCBzcGVjaWFsLiBOb3JtYWxseSBhbGwgYWNjZXB0ZWQgbHZhbHVlcyBtdXN0IGJlIHByZWRlZmluZWQKKyAgKiBpbiB0aGUgcGFfY29uZmlnX2l0ZW0gdGFibGUsIGJ1dCBpbiB0aGUgUHJvcGVydGllcyBzZWN0aW9uIHRoZQorQEAgLTY4LDcgKzczLDggQEAgc3RydWN0IHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgeworICAqIHByb3BlcnRpZXMsIGFuZCB0aG9zZSBwcm9wZXJ0aWVzIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIGdpdmVuCisgICogcHJvcGxpc3QuIElmIHByb3BsaXN0IGlzIE5VTEwsIHRoZW4gc2VjdGlvbnMgbmFtZWQgIlByb3BlcnRpZXMiCisgICogYXJlIG5vdCBhbGxvd2VkIGF0IGFsbCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAqLworLWludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIHZvaWQgKnVzZXJkYXRhKTsKKytpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcHJvcGxpc3QgKnByb3BsaXN0LCBib29sIHVzZV9kb3RfZCwKKysgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKTsKKyAKKyAvKiBHZW5lcmljIHBhcnNlcnMgZm9yIGludGVnZXJzLCBzaXplX3QsIGJvb2xlYW5zIGFuZCBzdHJpbmdzICovCisgaW50IHBhX2NvbmZpZ19wYXJzZV9pbnQocGFfY29uZmlnX3BhcnNlcl9zdGF0ZSAqc3RhdGUpOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTU5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIGY2YWIzYzNhYTdhMTg0MWM4YWRkMDQ4MjgwMjkzNTZkMmE4Yzg4ZTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA2IEFwciAyMDE1IDIxOjU2OjMxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhZHNwOiBNYWtlIGl0IGNvbXBpbGUgb24gbXVzbAorCiticmVhayBhc3N1bXB0aW9ucyBvbiBnbGliYyBhbmQgdGhlcmUgaXMgbm8gc3RhdDY0IG9uIG5vbgorZ2xpYmMgQyBsaWJyYXJpZXMKKworU2VlIHB1bHNlYXVkaW8gYnVnCisKK2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzE5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy91dGlscy9wYWRzcC5jIHwgMTUgKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wYWRzcC5jIGIvc3JjL3V0aWxzL3BhZHNwLmMKK2luZGV4IGU2MTM3M2MuLjY4NDcyMWEgMTAwNjQ0CistLS0gYS9zcmMvdXRpbHMvcGFkc3AuYworKysrIGIvc3JjL3V0aWxzL3BhZHNwLmMKK0BAIC0yMzY4LDcgKzIzNjgsNyBAQCBmYWlsOgorICAgICByZXR1cm4gcmV0OworIH0KKyAKKy0jaWZkZWYgc3VuCisrI2lmbmRlZiBfX0dMSUJDX18KKyBpbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCwgLi4uKSB7CisgI2Vsc2UKKyBpbnQgaW9jdGwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIC4uLikgeworQEAgLTI1MDgsMTAgKzI1MDgsMTMgQEAgaW50IHN0YXQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0ICpidWYpIHsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQorLQorICNpZmRlZiBIQVZFX09QRU42NAorLQorKyN1bmRlZiBzdGF0NjQKKysjaWZkZWYgX19HTElCQ19fCisgaW50IHN0YXQ2NChjb25zdCBjaGFyICpwYXRobmFtZSwgc3RydWN0IHN0YXQ2NCAqYnVmKSB7CisrI2Vsc2UKKytpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKSB7CisrI2VuZGlmCisgICAgIHN0cnVjdCBzdGF0IG9sZGJ1ZjsKKyAgICAgaW50IHJldDsKKyAKK0BAIC0yNTQ0LDcgKzI1NDcsNyBAQCBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpIHsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQorLQorKyN1bmRlZiBvcGVuNjQKKyBpbnQgb3BlbjY0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikgeworICAgICB2YV9saXN0IGFyZ3M7CisgICAgIG1vZGVfdCBtb2RlID0gMDsKK0BAIC0yNjcwLDggKzI2NzMsOCBAQCBGSUxFKiBmb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkgeworIH0KKyAKKyAjaWZkZWYgSEFWRV9PUEVONjQKKy0KKy1GSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSB7CisrI3VuZGVmIGZvcGVuNjQKKytGSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgZmlsZW5hbWUsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbW9kZSkgeworIAorICAgICBkZWJ1ZyhERUJVR19MRVZFTF9WRVJCT1NFLCBfX0ZJTEVfXyI6IGZvcGVuNjQoJXMpXG4iLCBmaWxlbmFtZT9maWxlbmFtZToiTlVMTCIpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTQyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitnaXQtdmVyc2lvbi1nZW4gZ2V0cyBjb25mdXNlZCBpZiBhIHRhcmJhbGwgaXMgYmVpbmcgYnVpbHQgaW5zaWRlIGEgZ2l0IGRpcmVjdG9yeQorKGllIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGlzIGEgc3ViZGlyZWN0b3J5IG9mIGEgcG9reSBjbG9uZSksIGFuZCBlbmRzIHVwIGNhbGxpbmcKK3RoZSByZWxlYXNlIDYuMC1kaXJ0eS4gIEFkZCBhIHNob3J0Y3V0IGV4aXQgc28gaWYgYSB0YXJiYWxsIGlzIGRldGVjdGVkIGl0Citkb2Vzbid0IGF0dGVtcHQgdG8gbG9vayBhdCB0aGUgZ2l0IHN0YXR1cy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTM2KQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dpdC12ZXJzaW9uLWdlbiBiL2dpdC12ZXJzaW9uLWdlbgoraW5kZXggNzU0Njg4NC4uMDc5YjkzZSAxMDA3NTUKKy0tLSBhL2dpdC12ZXJzaW9uLWdlbgorKysrIGIvZ2l0LXZlcnNpb24tZ2VuCitAQCAtODQsNyArODQsMTAgQEAgdGhlbgorICAgICB2PWBjYXQgJHRhcmJhbGxfdmVyc2lvbl9maWxlYCB8fCBleGl0IDEKKyAgICAgY2FzZSAkdiBpbgorIAkqJG5sKikgdj0gOzsgIyByZWplY3QgbXVsdGktbGluZSBvdXRwdXQKKy0JWzAtOV0qKSA7OworKwlbMC05XSopCisrCQllY2hvICIkdiIgfCB0ciAtZCAnXDAxMicKKysJCWV4aXQgMAorKwkJOzsKKyAJKikgdj0gOzsKKyAgICAgZXNhYworICAgICB0ZXN0IC16ICIkdiIgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3ZvbGF0aWxlcy4wNF9wdWxzZSBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby92b2xhdGlsZXMuMDRfcHVsc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxOTk4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby92b2xhdGlsZXMuMDRfcHVsc2UKQEAgLTAsMCArMSwyIEBACisjIDx0eXBlPiA8b3duZXI+IDxncm91cD4gPG1vZGU+IDxwYXRoPiA8bGlua3NvdXJjZT4KK2QgcHVsc2UgcHVsc2UgMDc1NSAvdmFyL3J1bi9wdWxzZSBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fNi4wLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWU5MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzYuMC5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHB1bHNlYXVkaW8uaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcy4wNF9wdWxzZSBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYjY5MWU4M2I3NDM0YzY3OGRmZmFjZmEzYTAyNzc1MGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUwNjQwZTBiODBiMTYwNzYwMGFjY2ZhZDJlNDVhYWJiNzlkMzc5YmY2MzU0Yzk2NzFlZmEyMDY1NDc3ZjZmNiIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIG1rZGlyIC1wICR7U30vbGlibHRkbAorICAgIGNwICR7U1RBR0lOR19MSUJESVJ9L2xpYmx0ZGwqICR7U30vbGlibHRkbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDdmMzFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJTQkMgQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJCbHVldG9vdGggbG93LWNvbXBsZXhpdHksIHN1YmJhbmQgY29kZWMgKFNCQykgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5ibHVlei5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2JjL3NiYy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjY7bWQ1PTBmNTdkMGRmMjJiMGQ0MDc0NmJkZDI5ODA1YTQzNjFiIgorCitERVBFTkRTID0gImxpYnNuZGZpbGUxIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvYmx1ZXRvb3RoLyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjJkOGI3ODQxZjJjMTFhYjI4NzcxOGQ1NjJmMmI5ODFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2MTAyMmNmNTc2ZjE0MTkwMjQxZTcwNzE3NTNmZGFjZGNlNWQxZGVhODlmZmQ3MDQxMTBmYzUwYmU2ODkzMDkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhfMS4ycmMyLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhfMS4ycmMyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZDIzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJTcGVlY2ggQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJTcGVleCBpcyBhbiBPcGVuIFNvdXJjZS9GcmVlIFNvZnR3YXJlIHBhdGVudC1mcmVlIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdCBkZXNpZ25lZCBmb3Igc3BlZWNoLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3BlZXgub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMTQ2NDlkOGJhOWRkNzA0NWRmYjY2ODNmMjk4ZDBhOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3NwZWV4L3NwZWV4Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zNDttZDU9ZWY4YzhlYTRmNzE5OGQ3MWNmMzUwOWM2ZWQwNWVhNTAiCitERVBFTkRTID0gImxpYm9nZyBzcGVleGRzcCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnVzLnhpcGgub3JnL3JlbGVhc2VzL3NwZWV4L3NwZWV4LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjZhZTdkYjNiYWIwMWUxZDRiODZiYWNmYThjYTMzZTgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhYTI3YzcyNDdmZjE1Yzg1MjFjMmFlMGVhMjE5ODdjOWU5NzEwYThmMmQzNDQ4ZThiNzlkYTk4MDZiY2U4OTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnVEFSR0VUX0ZQVScsICdzb2Z0JywgJy0tZW5hYmxlLWZpeGVkLXBvaW50IC0tZGlzYWJsZS1mbG9hdC1hcGkgLS1kaXNhYmxlLXZicicsICcnLCBkKX0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3AvMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcC8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzA2N2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3AvMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBjNzMzNzBjZWFmZDEzOGJlY2VlOGNhM2M2ODhiYTc1NzU2ODMwYmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBTdW4sIDUgSnVsIDIwMTUgMTc6NDg6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG9uJ3QgcmVseSBvbiBIQVZFX1NURElOVF9IIGV0IGFsLiBiZWluZyBkZWZpbmVkCisKK05vdCBldmVyeW9uZSB3aG8gaW5jbHVkZXMgc3BlZXhkc3BfY29uZmlnX3R5cGVzLmggd2lsbCBoYXZlIGEgdGVzdAord2hpY2ggZGVmaW5lcyB0aG9zZSwgYW5kIGlmIHdlJ3ZlIGNob3NlbiB0byB1c2UgdGhlIHN0ZGludCB0eXBlcyBhdAorY29uZmlndXJlIHRpbWUgdGhlbiB3ZSBrbm93IGV4YWN0bHkgd2hpY2ggaGVhZGVyKHMpIGFyZSBhdmFpbGFibGUsIHNvCitqdXN0IGNob29zZSB0aGUgYmVzdCBvbmUgdGhlbiBhbmQgZ2VuZXJhdGUgdGhlIGhlYWRlciB0byB1c2UgaXQuCisKK1RoaXMgcGF0Y2gsIGluY2x1ZGluZyB0aGUgYWJvdmUgdGV4dCwgaXMgY29waWVkIGZyb20gYSBjb21taXQgaW4gdGhlCitzcGVleCByZXBvc2l0b3J5WzFdLiBUaGUgb3JpZ2luYWwgY29tbWl0IGZvciBzcGVleCB3YXMgbWFkZSBieSBSb24KKzxyb25AZGViaWFuLm9yZz4uCisKK1sxXSBodHRwczovL2dpdC54aXBoLm9yZy8/cD1zcGVleC5naXQ7YT1jb21taXRkaWZmO2g9Nzc0Yzg3ZDZjYjdkZDhkYWJkZDE3Njc3ZmM2ZGE3NTNlY2Y0YWE4NworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYgKysrKysrCisgaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbiB8IDggKy0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMmNkMmQxZS4uMWRlMGMyMyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzM0LDYgKzMzNCwxMiBAQCBBQ19TVUJTVChbVVNJWkUxNl0pCisgQUNfU1VCU1QoW1NJWkUzMl0pCisgQUNfU1VCU1QoW1VTSVpFMzJdKQorIAorK0FTX0lGKFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiA9ICJ5ZXMiXSwgICAgW0lOQ0xVREVfU1RESU5UPSIjaW5jbHVkZSA8c3RkaW50Lmg+Il0sCisrICAgICAgW3Rlc3QgIiRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgPSAieWVzIl0sICBbSU5DTFVERV9TVERJTlQ9IiNpbmNsdWRlIDxpbnR0eXBlcy5oPiJdLAorKyAgICAgIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oIiA9ICJ5ZXMiXSwgW0lOQ0xVREVfU1RESU5UPSIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Il0pCisrCisrQUNfU1VCU1QoW0lOQ0xVREVfU1RESU5UXSkKKysKKyBBQ19DT05GSUdfRklMRVMoWworICAgICAgICAgICAgTWFrZWZpbGUgbGlic3BlZXhkc3AvTWFrZWZpbGUgZG9jL01ha2VmaWxlIFNwZWV4RFNQLnNwZWMKKyAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9zcGVleC9NYWtlZmlsZSBzcGVleGRzcC5wYworZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4gYi9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluCitpbmRleCAwMmI4MmZkLi41ZWE3YjU1IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbgorKysrIGIvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbgorQEAgLTEsMTMgKzEsNyBAQAorICNpZm5kZWYgX19TUEVFWF9UWVBFU19IX18KKyAjZGVmaW5lIF9fU1BFRVhfVFlQRVNfSF9fCisgCistI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAorLSMgIGluY2x1ZGUgPHN0ZGludC5oPgorLSNlbGlmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICistIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KKy0jZWxpZiBkZWZpbmVkIEhBVkVfU1lTX1RZUEVTX0gKKy0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jZW5kaWYKKytASU5DTFVERV9TVERJTlRACisgCisgdHlwZWRlZiBAU0laRTE2QCBzcHhfaW50MTZfdDsKKyB0eXBlZGVmIEBVU0laRTE2QCBzcHhfdWludDE2X3Q7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwXzEuMnJjMy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwXzEuMnJjMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjFhY2VkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQSBwYXRlbnQtZnJlZSBEU1AgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlNwZWV4RFNQIGlzIGEgcGF0ZW50LWZyZWUsIE9wZW4gU291cmNlL0ZyZWUgU29mdHdhcmUgRFNQIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zcGVleC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTMxNDY0OWQ4YmE5ZGQ3MDQ1ZGZiNjY4M2YyOThkMGE4IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvc3BlZXgvc3BlZXhkc3AtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmVseS1vbi1IQVZFX1NURElOVF9ILWV0LWFsLi1iZWluZy1kZWZpbmVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzBkOWQzMTE4NGY3ZWI3NjExOTJmZDFlZjBiNzMzMzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGFlNjg4NjAwMDM5ZjVkMjI0YmRmMmUyMjJkMmZiZGU2NTYwODQ0N2U0YzJmNjgxNTg1ZTRkY2E2ZGY2OTJmMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgICAgIC0tZGlzYWJsZS1leGFtcGxlcyBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQVJHRVRfRlBVJywgJ3NvZnQnLCAnLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1kaXNhYmxlLWZsb2F0LWFwaScsICcnLCBkKX0gXAorIgorCisjIFdvcmthcm91bmQgZm9yIGEgYnVpbGQgZmFpbHVyZSB3aGVuIGJ1aWxkaW5nIHdpdGggTUFDSElORT1xZW11YXJtNjQuIEkgdGhpbmsKKyMgYWFyY2g2NCBpcyBzdXBwb3NlZCB0byBzdXBwb3J0IE5FT04ganVzdCBmaW5lLCBidXQgYnVpbGRpbmcgZm9yIHFlbXVhcm02NAorIyBmYWlscyBpbiBORU9OIGNvZGU6CisjCisjIC4uLi9zcGVleGRzcC0xLjJyYzMvbGlic3BlZXhkc3AvcmVzYW1wbGVfbmVvbi5oOjE0ODo1OiBlcnJvcjogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisjICAgICAgYXNtIHZvbGF0aWxlICgiICBjbXAgJVtsZW5dLCAjMFxuIgorIyAgICAgIF4KKyMKKyMgSSBzZW50IGFuIGVtYWlsIGFib3V0IHRoZSBpc3N1ZSB0byBzcGVleC1kZXYuIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgdGhlcmUKKyMgYXJlIG5vIHJlc3BvbnNlcyB5ZXQ6CisjIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8uY29tcHJlc3Npb24uc3BlZXguZGV2ZWwvNzM2MAorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhYXJjaDY0JywgJy0tZGlzYWJsZS1uZW9uJywgJycsIGQpfSIKKworIyBzcGVleGRzcCB3YXMgc3BsaXQgb2ZmIGZyb20gc3BlZXggaW4gMS4ycmMyLiBPbGRlciB2ZXJzaW9ucyBvZiBzcGVleCBjYW4ndAorIyBiZSBpbnN0YWxsZWQgdG9nZXRoZXIgd2l0aCBzcGVleGRzcCwgc2luY2UgdGhleSBjb250YWluIG92ZXJsYXBwaW5nIGZpbGVzLgorUkNPTkZMSUNUU18ke1BOfSA9ICJzcGVleCAoPCAxLjJyYzIpIgorUkNPTkZMSUNUU18ke1BOfS1kYmcgPSAic3BlZXgtZGJnICg8IDEuMnJjMikiCitSQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJzcGVleC1kZXYgKDwgMS4ycmMyKSIKK1JDT05GTElDVFNfJHtQTn0tc3RhdGljZGV2ID0gInNwZWV4LXN0YXRpY2RldiAoPCAxLjJyYzIpIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTUxMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vdHJhYy54aXBoLm9yZy90aWNrZXQvMTkyMl0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK0luZGV4OiBjb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25maWd1cmUuaW4JKHJldmlzaW9uIDE4NzY0KQorKysrIGNvbmZpZ3VyZS5pbgkod29ya2luZyBjb3B5KQorQEAgLTksNyArOSw3IEBACisgQUNfQ0FOT05JQ0FMX0hPU1QKKyBBQ19DQU5PTklDQUxfVEFSR0VUCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIEFNX0lOSVRfQVVUT01BS0UobGlidm9yYmlzaWRlYywxLjIuMSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3IvdHJlbW9yLWFybS10aHVtYjIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL3RyZW1vci1hcm0tdGh1bWIyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNDk1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL3RyZW1vci1hcm0tdGh1bWIyLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitGcm9tOiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE2IEp1bCAyMDEyIDEzOjI5OjM0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHRyZW1vcjogYWRkIElUIGluc3RydWN0aW9ucyBmb3IgYXJtIHRodW1iMiB0dW5lIGZsYWdzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW4gVGh1bWItMiwgbW9zdCBpbnN0cnVjdGlvbnMgZG8gbm90IGhhdmUgYSBidWlsdCBpbiBjb25kaXRpb24gY29kZSAoZXhjZXB0IGZvciAKK2NvbmRpdGlvbmFsIGJyYW5jaGVzKS4gSW5zdGVhZCwgc2hvcnQgc2VxdWVuY2VzIG9mIGluc3RydWN0aW9ucyB3aGljaCBhcmUgdG8gYmUgCitleGVjdXRlZCBjb25kaXRpb25hbGx5IGNhbiBiZSBwcmVjZWRlZCBieSBhIHNwZWNpYWwgIklUIGluc3RydWN0aW9uIiB3aGljaCAKK2Rlc2NyaWJlcyB0aGUgY29uZGl0aW9uIGFuZCB3aGljaCBvZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBzaG91bGQgYmUgCitleGVjdXRlZCBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIHJlc3BlY3RpdmVseS4gCisKK0ZvciB0aGUgQVJNL1RodW1iIElUKElmLVRoZW4pIGluc3RydWN0aW9uOgoraHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2MuZHVpMDQ4OWMvQ2phYmljY2kuaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBhc21fYXJtLmggfCAgIDE0ICsrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2FzbV9hcm0uaCBiL2FzbV9hcm0uaAoraW5kZXggYzNiZGEwMC4uODIzYzU0ZiAxMDA3NTUKKy0tLSBhL2FzbV9hcm0uaAorKysrIGIvYXNtX2FybS5oCitAQCAtMTA4LDkgKzEwOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgWE5QUk9EMzEob2dnX2ludDMyX3QgIGEsIG9nZ19pbnQzMl90ICBiLAorIHN0YXRpYyBpbmxpbmUgb2dnX2ludDMyX3QgQ0xJUF9UT18xNShvZ2dfaW50MzJfdCB4KSB7CisgICBpbnQgdG1wOworICAgYXNtIHZvbGF0aWxlKCJzdWJzCSUxLCAlMCwgIzMyNzY4XG5cdCIKKysJICAgICAgICJpdHQgICAgIHBsXG5cdCIKKyAJICAgICAgICJtb3ZwbAklMCwgIzB4N2YwMFxuXHQiCisgCSAgICAgICAib3JycGwJJTAsICUwLCAjMHhmZlxuIgorIAkgICAgICAgImFkZHMJJTEsICUwLCAjMzI3Njhcblx0IgorKwkgICAgICAgIml0ICAgICAgbWlcblx0IgorIAkgICAgICAgIm1vdm1pCSUwLCAjMHg4MDAwIgorIAkgICAgICAgOiAiK3IiKHgpLCI9ciIodG1wKQorIAkgICAgICAgOgorQEAgLTEzOSwxMCArMTQxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3BfbG9vcF9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX3VpbnQzMl90ICpwaXAsCisgICAgICAgCisgICAgICAgImxkbWRiICAgcjAhLHtyMSxyM307IgorICAgICAgICJzdWJzICAgIHIxLHIxLCU0OyIgICAgICAgICAgLy9pbHNwW2pdLXdpCisrICAgICAgIml0ICAgICAgbWk7IgorICAgICAgICJyc2JtaSAgIHIxLHIxLCMwOyIgICAgICAgICAgLy9sYWJzKGlsc3Bbal0td2kpCisgICAgICAgInVtdWxsICAgJTAscjIscjEsJTA7IiAgICAgICAvL3FpKj1sYWJzKGlsc3Bbal0td2kpCisgICAgICAgCisgICAgICAgInN1YnMgICAgcjEscjMsJTQ7IiAgICAgICAgICAvL2lsc3BbaisxXS13aQorKyAgICAgICJpdCAgICAgIG1pOyIKKyAgICAgICAicnNibWkgICByMSxyMSwjMDsiICAgICAgICAgIC8vbGFicyhpbHNwW2orMV0td2kpCisgICAgICAgInVtdWxsICAgJTEscjMscjEsJTE7IiAgICAgICAvL3BpKj1sYWJzKGlsc3BbaisxXS13aSkKKyAgICAgICAKK0BAIC0xNjcsNiArMTcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAibW92ICAgICByMCwjMHg0MDAwO1xuIgorICAgICAgIAorICAgICAgICJzdWJzICAgIHIxLHIxLCU0O1xuIiAgICAgICAgICAvL2lsc3Bbal0td2kKKysgICAgICAiaXQgICAgICBtaTtcbiIKKyAgICAgICAicnNibWkgICByMSxyMSwjMDtcbiIgICAgICAgICAgLy9sYWJzKGlsc3Bbal0td2kpCisgICAgICAgInVtdWxsICAgJTAscjIscjEsJTA7XG4iICAgICAgIC8vcWkqPWxhYnMoaWxzcFtqXS13aSkKKyAgICAgICAidW11bGwgICAlMSxyMyxyMCwlMTtcbiIgICAgICAgLy9waSo9bGFicyhpbHNwW2orMV0td2kpCitAQCAtMTkwLDE4ICsxOTUsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAibW92ICAgICByMiwjMDsiCisgICAgICAgIm9yciAgICAgcjEsJTAsJTE7IgorICAgICAgICJ0c3QgICAgIHIxLCMweGZmMDAwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzg7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjODsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDBmMDAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjNDsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICM0OyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMDBjMDAwMDsiCisrICAgICAgIml0dCAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCMyOyIKKyAgICAgICAibW92bmUgICByMSxyMSxsc3IgIzI7IgorICAgICAgICJ0c3QgICAgIHIxLCMweDAwMDIwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzE7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjMTsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDAwMTAwMDA7IgorKyAgICAgICJpdCAgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjMTsiCisgICAgICAgIm1vdiAgICAgJTAsJTAsbHNyIHIyOyIKKyAgICAgICAibW92ICAgICAlMSwlMSxsc3IgcjI7IgorQEAgLTIyMiwxNSArMjMyLDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3Bfbm9ybV9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX2ludDMyX3QgKnFleHBwKXsKKyAgIG9nZ19pbnQzMl90IHFleHA9KnFleHBwOworIAorICAgYXNtKCJ0c3QgICAgICUwLCMweDAwMDBmZjAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICM4OyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjODsiCisgICAgICAgInRzdCAgICAgJTAsIzB4MDAwMGYwMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzQ7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCM0OyIKKyAgICAgICAidHN0ICAgICAlMCwjMHgwMDAwYzAwMDsiCisrICAgICAgIml0dCAgICAgZXE7IgorICAgICAgICJtb3ZlcSAgICUwLCUwLGxzbCAjMjsiCisgICAgICAgInN1YmVxICAgJTEsJTEsIzI7IgorICAgICAgICJ0c3QgICAgICUwLCMweDAwMDA4MDAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICMxOyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjMTsiCisgICAgICAgOiAiK3IiKHFpKSwiK3IiKHFleHApCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vcl8yMDE1MDEwNy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3JfMjAxNTAxMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3ODk0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3JfMjAxNTAxMDcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJGaXhlZC1wb2ludCBkZWNvZGVyIgorREVTQ1JJUFRJT04gPSAidHJlbW9yIGlzIGEgZml4ZWQgcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZvcmJpcyBjb2RlYy4iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRiMWI3YTY2OGIyYTZmNDdiMmFmODhmYjAwOGFkNTU1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29zLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0xNDttZDU9NWMwYWY1ZTFiZWRlZjNjZTgxNzhjODlmNDhjZDZmMWYiCitERVBFTkRTID0gImxpYm9nZyIKK1NSQ0RBVEUgPSAiJHtQVn0iCitQUiA9ICJyMSIKKworIyBTVk4gc3VwcG9ydCBmb3IgdXBzdHJlYW0gdmVyc2lvbiBjaGVjayBpc24ndCBpbXBsZW1lbnRlZCB5ZXQKK1JFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OID0gIjIwMTUwMTA3IgorUkVDSVBFX1VQU1RSRUFNX0RBVEUgPSAiSmFuIDA3LCAyMDE1IgorQ0hFQ0tfREFURSA9ICJBdWcgMTIsIDIwMTUiCisKK1NSQ19VUkkgPSAic3ZuOi8vc3ZuLnhpcGgub3JnL3RydW5rO21vZHVsZT1UcmVtb3I7cmV2PTE5NDI3O3Byb3RvY29sPWh0dHAgXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly90cmVtb3ItYXJtLXRodW1iMi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9UcmVtb3IiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjQuMy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3dlYnAvbGlid2VicF8wLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGI4MGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiV2ViUCBpcyBhbiBpbWFnZSBmb3JtYXQgZGVzaWduZWQgZm9yIHRoZSBXZWIiCitERVNDUklQVElPTiA9ICJXZWJQIGlzIGEgbWV0aG9kIG9mIGxvc3N5IGFuZCBsb3NzbGVzcyBjb21wcmVzc2lvbiB0aGF0IGNhbiBiZSBcCisgICAgICAgICAgICAgICB1c2VkIG9uIGEgbGFyZ2UgdmFyaWV0eSBvZiBwaG90b2dyYXBoaWMsIHRyYW5zbHVjZW50IGFuZCBcCisgICAgICAgICAgICAgICBncmFwaGljYWwgaW1hZ2VzIGZvdW5kIG9uIHRoZSB3ZWIuIFRoZSBkZWdyZWUgb2YgbG9zc3kgXAorICAgICAgICAgICAgICAgY29tcHJlc3Npb24gaXMgYWRqdXN0YWJsZSBzbyBhIHVzZXIgY2FuIGNob29zZSB0aGUgdHJhZGUtb2ZmIFwKKyAgICAgICAgICAgICAgIGJldHdlZW4gZmlsZSBzaXplIGFuZCBpbWFnZSBxdWFsaXR5LiBXZWJQIHR5cGljYWxseSBhY2hpZXZlcyBcCisgICAgICAgICAgICAgICBhbiBhdmVyYWdlIG9mIDMwJSBtb3JlIGNvbXByZXNzaW9uIHRoYW4gSlBFRyBhbmQgSlBFRyAyMDAwLCBcCisgICAgICAgICAgICAgICB3aXRob3V0IGxvc3Mgb2YgaW1hZ2UgcXVhbGl0eS4iCitIT01FUEFHRSA9ICJodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9zcGVlZC93ZWJwLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZThkZWU5MzJjMjZmMmRhYjUwM2FiZjcwYzk2ZDhiYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9QQVRFTlRTO21kNT1hZDI1ODBhZWUzNTQ2ODY3NWM0NGQ3YmViYmE2NWNhOCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwODgxMzUyNWVlZWZmZTdlMzA1YjRjYmZhZGU4YWU5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZmJlMGQ1OGZkYTkzNmYyZWQ5OWQwYjgzN2VkNzA4N2QwNjRkNjgzODkzMWYyODJjNDYxOGQyYTNmNzM5MGM0IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWRpc2FibGUtZXhwZXJpbWVudGFsIFwKKyAgICAtLWRpc2FibGUtd2ljIFwKKyAgICAtLWVuYWJsZS1saWJ3ZWJwbXV4IFwKKyAgICAtLWVuYWJsZS1saWJ3ZWJwZGVtdXggXAorICAgIC0tZW5hYmxlLXRocmVhZGluZyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisKKyMgbGlid2VicGRlY29kZXIgaXMgYSBzdWJzZXQgb2YgbGlid2VicCwgZG9uJ3QgYnVpbGQgaXQgdW5sZXNzIHJlcXVlc3RlZAorUEFDS0FHRUNPTkZJR1tkZWNvZGVyXSA9ICItLWVuYWJsZS1saWJ3ZWJwZGVjb2RlciwtLWRpc2FibGUtbGlid2VicGRlY29kZXIiCisKKyMgQXBwbHkgZm9yIGV4YW1wbGVzIHByb2dyYW1zOiBjd2VicCBhbmQgZHdlYnAKK1BBQ0tBR0VDT05GSUdbZ2lmXSA9ICItLWVuYWJsZS1naWYsLS1kaXNhYmxlLWdpZixnaWZsaWIiCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLWVuYWJsZS1wbmcsLS1kaXNhYmxlLXBuZywsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLWVuYWJsZS10aWZmLC0tZGlzYWJsZS10aWZmLHRpZmYiCisKKyMgQXBwbHkgb25seSBmb3IgZXhhbXBsZSBwcm9ncmFtIHZ3ZWJwCitQQUNLQUdFQ09ORklHW2dsXSA9ICItLWVuYWJsZS1nbCwtLWRpc2FibGUtZ2wsbWVzYS1nbHV0IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ2lmMndlYnAiCisKK0RFU0NSSVBUSU9OXyR7UE59LWdpZjJ3ZWJwID0gIlNpbXBsZSB0b29sIHRvIGNvbnZlcnQgYW5pbWF0ZWQgR0lGcyB0byBXZWJQIgorRklMRVNfJHtQTn0tZ2lmMndlYnAgPSAiJHtiaW5kaXJ9L2dpZjJ3ZWJwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0L2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NC9kb24tdC1kZWZhdWx0LXRvLWNvcnRleC1hOS13aXRoLW5lb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3MmZjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NC9kb24tdC1kZWZhdWx0LXRvLWNvcnRleC1hOS13aXRoLW5lb24ucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorLW1hcmNoIGZsYWcgaXMgbm90IGluIENGTEFHUyBzbyB0aGlzIHdpbGwgYWx3YXlzIGRlZmF1bHQgdG8gLW1jcHU9Y29ydGV4LWE4CistbWZwdT1uZW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMjkxNjAzNi4uZjRlY2U0MCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzczLDkgKzc3Myw2IEBAIGlmIFsgJGFzbSA9IGF1dG8gLWEgXCggJEFSQ0ggPSBYODYgLW8gJEFSQ0ggPSBYODZfNjQgXCkgXSA7IHRoZW4KKyBmaQorIAorIGlmIFsgJGFzbSA9IGF1dG8gLWEgJEFSQ0ggPSBBUk0gXSA7IHRoZW4KKy0gICAgIyBzZXQgZmxhZ3Mgc28gbmVvbiBpcyBidWlsdCBieSBkZWZhdWx0CistICAgIGVjaG8gJENGTEFHUyB8IGdyZXAgLUVxICcoLW1jcHV8LW1hcmNofC1tZnB1KScgfHwgQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWNvcnRleC1hOCAtbWZwdT1uZW9uIgorLQorICAgICBpZiAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oInJldiBpcCwgaXAiKTsnIDsgdGhlbiAgICAgIGRlZmluZSBIQVZFX0FSTVY2CisgICAgICAgICBjY19jaGVjayAnJyAnJyAnX19hc21fXygibW92dCByMCwgIzAiKTsnICAgICAgICAgJiYgZGVmaW5lIEhBVkVfQVJNVjZUMgorICAgICAgICAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oInZhZGQuaTE2IHEwLCBxMCwgcTAiKTsnICYmIGRlZmluZSBIQVZFX05FT04KK0BAIC03ODgsOCArNzg1LDYgQEAgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFSTSBdIDsgdGhlbgorIGZpCisgCisgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFBUkNINjQgXSA7IHRoZW4KKy0gICAgIyBzZXQgZmxhZ3Mgc28gbmVvbiBpcyBidWlsdCBieSBkZWZhdWx0CistICAgIGVjaG8gJENGTEFHUyB8IGdyZXAgLUVxICcoLW1jcHV8LW1hcmNofC1tZnB1fC1hcmNoKScgfHwgQ0ZMQUdTPSIkQ0ZMQUdTIC1hcmNoIGFybTY0IC1tZnB1PW5lb24iCisgCisgICAgIGlmICBjY19jaGVjayAnJyAnJyAnX19hc21fXygiY21lcSB2MC44aCwgdjAuOGgsICMwIik7JyA7IHRoZW4gZGVmaW5lIEhBVkVfTkVPTgorICAgICAgICAgQVNGTEFHUz0iJEFTRkxBR1MgLWMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTY5OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkguMjY0L01QRUctNCBBVkMgdmlkZW8gZW5jb2RlciIKK0RFU0NSSVBUSU9OID0gIkEgZnJlZSBzb2Z0d2FyZSBsaWJyYXJ5IGFuZCBhcHBsaWNhdGlvbiBmb3IgZW5jb2RpbmcgdmlkZW8gc3RyZWFtcyBpbnRvIHRoZSBILjI2NC9NUEVHLTQgQVZDIGZvcm1hdC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy9kZXZlbG9wZXJzL3gyNjQuaHRtbCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInlhc20tbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdC52aWRlb2xhbi5vcmcveDI2NC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNSRVYgPSAiYzhhNzczZWJmY2ExNDhlZjA0ZjVhNjBkNDJjYmQ3MzM2YWYwYmFmNiIKKworUFYgPSAicjI0OTErZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgbGliX3BhY2thZ2UgcGtnY29uZmlnIHBlcmxuYXRpdmUKKworWDI2NF9ESVNBQkxFX0FTTSA9ICIiCitYMjY0X0RJU0FCTEVfQVNNX2FybXY0ID0gIi0tZGlzYWJsZS1hc20iCitYMjY0X0RJU0FCTEVfQVNNX2FybXY1ID0gIi0tZGlzYWJsZS1hc20iCitYMjY0X0RJU0FCTEVfQVNNX3Bvd2VycGMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgIi0tZGlzYWJsZS1hc20iLCAiIiwgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAnLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAtLWhvc3Q9JHtIT1NUX1NZU30gXAorICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7bGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgICAgICAgICAgICAgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdGF0aWMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sYXZmIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3dzY2FsZSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcGljIFwKKyAgICAgICAgICAgICAgICAke1gyNjRfRElTQUJMRV9BU019IFwKKyAgICAgICAgICAgICAgICcKKworZG9fY29uZmlndXJlKCkgeworICAgIC4vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQorCisjIEdldCByaWQgb2YgLWUKK0VYVFJBX09FTUFLRSA9ICIiCitBUyA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworIyBQSUMgY2FuJ3QgYmUgZW5hYmxlZCBmb3IgMzItYml0IHg4NgorSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX3g4NiA9ICIgdGV4dHJlbCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L2ltYWdlcy9xdDRlLWRlbW8taW1hZ2UuYmIgYi9tZXRhL3JlY2lwZXMtcXQvaW1hZ2VzL3F0NGUtZGVtby1pbWFnZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDUxODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L2ltYWdlcy9xdDRlLWRlbW8taW1hZ2UuYmIKQEAgLTAsMCArMSwxNCBAQAorREVTQ1JJUFRJT04gPSAiQW4gaW1hZ2UgdGhhdCB3aWxsIGxhdW5jaCBpbnRvIHRoZSBkZW1vIGFwcGxpY2F0aW9uIGZvciB0aGUgZW1iZWRkZWQgKG5vdCBiYXNlZCBvbiBYMTEpIHZlcnNpb24gb2YgUXQuIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKwkke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisJcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZSBcCisiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5iYiBiL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMDEwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5iYgpAQCAtMCwwICsxLDUgQEAKKyMgUXQgdG9vbGNoYWluCitRVE5BTUUgPSAicXQiCitRVF9ESVJfTkFNRSA9ICJxdDQiCisKK3JlcXVpcmUgbWV0YS10b29sY2hhaW4tcXQuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3NWQ5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYwpAQCAtMCwwICsxLDM1IEBACitUT09MQ0hBSU5fSE9TVF9UQVNLID0gIm5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtJHtRVE5BTUV9LXRvb2xjaGFpbi1ob3N0IHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorVE9PTENIQUlOX1RBUkdFVF9UQVNLID0gInBhY2thZ2Vncm91cC0ke1FUTkFNRX0tdG9vbGNoYWluLXRhcmdldCIKK1RPT0xDSEFJTl9PVVRQVVROQU1FID0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi0ke1FUTkFNRX0tJHtESVNUUk9fVkVSU0lPTn0iCisKK3JlcXVpcmUgcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIKKworUVRfVE9PTFNfUFJFRklYID0gIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1Qke2JpbmRpcl9uYXRpdmVzZGt9IgorCitjcmVhdGVfc2RrX2ZpbGVzX2FwcGVuZCgpIHsKKyAgICBta2RpciAtcCAke1NES19PVVRQVVR9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kLworICAgIHNjcmlwdD0ke1NES19PVVRQVVR9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kLyR7UVRfRElSX05BTUV9LnNoCisKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ0ZMQUdTPSIkQ0ZMQUdTIicgPiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NYWEZMQUdTPSIkQ1hYRkxBR1MiJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xERkxBR1M9IiRMREZMQUdTIicgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DQz0kQ0MnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYPSRDWFgnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTElOSz0kQ1hYJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0FSPSRBUicgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQ9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7bGliZGlyfScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9JTkNESVJfUVQ9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0nID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTU9DPSR7UVRfVE9PTFNfUFJFRklYfS9tb2M0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQz0ke1FUX1RPT0xTX1BSRUZJWH0vdWljNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9VSUMzPSR7UVRfVE9PTFNfUFJFRklYfS91aWMzNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9SQ0M9JHtRVF9UT09MU19QUkVGSVh9L3JjYzQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNDUFAyWE1MPSR7UVRfVE9PTFNfUFJFRklYfS9xZGJ1c2NwcDJ4bWw0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FEQlVTWE1MMkNQUD0ke1FUX1RPT0xTX1BSRUZJWH0vcWRidXN4bWwyY3BwNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUc9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9xY29uZmlnLnByaScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBRTUFLRVNQRUM9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9saW51eC1nKysnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgUVRfQ09ORl9QQVRIPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1Qke3N5c2NvbmZkaXJ9L3F0LmNvbmYnID4+ICRzY3JpcHQKKworICAgICMgbWFrZSBhIHN5bWJvbGljIGxpbmsgdG8gbWtzcGVjcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFF0IFNESworICAgICMgYW5kIFF0IENyZWF0b3IKKyAgICAoY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS8uLjsgbG4gLXMgJHtTREtUQVJHRVRTWVNST09UfS91c3Ivc2hhcmUvJHtRVF9ESVJfTkFNRX0vbWtzcGVjcyBta3NwZWNzOykKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0ZS5iYiBiL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTEzZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiCkBAIC0wLDAgKzEsNiBAQAorIyBRdCBFbWJlZGRlZCB0b29sY2hhaW4KK1BSID0gInI2IgorUVROQU1FID0gInF0ZSIKK1FUX0RJUl9OQU1FID0gInF0b3BpYSIKKworcmVxdWlyZSBtZXRhLXRvb2xjaGFpbi1xdC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NWNjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBuYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYworCitTVU1NQVJZID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IFNESyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMjc1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSByZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCisKK0RFU0NSSVBUSU9OID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKK0xJQ0VOU0UgPSAiTUlUIgorCitSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLXF0NC10b29scyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2ZTRiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBuYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYworCitTVU1NQVJZID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxZjhhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0LmJiCkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZAorIworCitTVU1NQVJZID0gIlF0IHBhY2thZ2UgZ3JvdXBzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyNCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBxdWlja3kgYW5kIGZvdG93YWxsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRlbW9hcHBzIgorCitRVERFTU9TID89ICJxdWlja3kgJHtDT01NRVJDSUFMX1FUfSBmb3Rvd2FsbCIKKworU1VNTUFSWV8ke1BOfS1kZW1vYXBwcyA9ICJRdCBkZW1vIGFwcGxpY2F0aW9ucyIKK1JERVBFTkRTXyR7UE59LWRlbW9hcHBzID0gIiR7UVRERU1PU30iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdDRlLmJiIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjVmYTFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZS5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlF0IGZvciBFbWJlZGRlZCBMaW51eCAoUXQgd2l0aG91dCBYMTEpIgorUFIgPSAicjIiCitMSUNFTlNFID0gIk1JVCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1RPVUNIID0gJyAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ0b3VjaHNjcmVlbiIsICJ0c2xpYiB0c2xpYi1jYWxpYnJhdGUgdHNsaWItdGVzdHMiLCAiIixkKX0nCisKK1JERVBFTkRTXyR7UE59ID0gIiBcCisJcXQ0LWVtYmVkZGVkIFwKKwlsaWJxdC1lbWJlZGRlZDNzdXBwb3J0NCBcCisJbGlicXQtZW1iZWRkZWRjbHVjZW5lNCBcCisJbGlicXQtZW1iZWRkZWRjb3JlNCBcCisJbGlicXQtZW1iZWRkZWRkYnVzNCBcCisJbGlicXQtZW1iZWRkZWRndWk0IFwKKwlsaWJxdC1lbWJlZGRlZGhlbHA0IFwKKwlsaWJxdC1lbWJlZGRlZG11bHRpbWVkaWE0IFwKKwlsaWJxdC1lbWJlZGRlZG5ldHdvcms0IFwKKwlsaWJxdC1lbWJlZGRlZHNjcmlwdDQgXAorCWxpYnF0LWVtYmVkZGVkc2NyaXB0dG9vbHM0IFwKKwlsaWJxdC1lbWJlZGRlZHNxbDQgXAorCWxpYnF0LWVtYmVkZGVkc3ZnNCBcCisJbGlicXQtZW1iZWRkZWR0ZXN0NCBcCisJbGlicXQtZW1iZWRkZWR3ZWJraXQ0IFwKKwlsaWJxdC1lbWJlZGRlZHhtbDQgXAorCXF0NC1lbWJlZGRlZC1mb250cy10dGYtZGVqYXZ1IFwKKwlxdDQtZW1iZWRkZWQtZm9udHMtdHRmLXZlcmEgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taWNvbmVuZ2luZS1zdmdpY29uIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LWdpZiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1pY28gXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1tbmcgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtc3ZnIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LXRpZmYgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tbW91c2Vkcml2ZXItdHNsaWIgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tc2NyaXB0LWRidXMgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisJJHtUT1VDSH0gXAorICAgICAgICBxdDQtZW1iZWRkZWQtZGVtb3MgXAorICAgICAgICBxdDQtZW1iZWRkZWQtZXhhbXBsZXMgXAorICAgICAgICBxdC1kZW1vLWluaXQgXAorICAgICAgICBxdDQtZW1iZWRkZWQtYXNzaXN0YW50IFwKKyIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiIFwKKwlsaWJxdC1lbWJlZGRlZHhtbHBhdHRlcm5zNCBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1waG9ub24tYmFja2VuZC1nc3RyZWFtZXIgXAorIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5iYiBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MmMxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlRhcmdldCBwYWNrYWdlcyBmb3IgUXQgU0RLIgorCitRVExJQlBSRUZJWCA9ICIiCisKK3JlcXVpcmUgcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gcXQ0LXgxMS1mcmVlCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgcXQ0LXgxMS1mcmVlLWRldiBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2xpYnF0b3BlbmdsNC1kZXYnLCAnJywgZCl9IFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVudmcnLCAnbGlicXRvcGVudmc0LWRldicsICcnLCBkKX0gXAorICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5NzgyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpAQCAtMCwwICsxLDM5IEBACitMSUNFTlNFID0gIk1JVCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlkgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgIHBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCBcCisgICAgICAgIHF0NCR7UVRMSUJQUkVGSVh9LW1rc3BlY3MgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9bXVsdGltZWRpYTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfTNzdXBwb3J0NC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Y2x1Y2VuZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWNvcmU0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kYnVzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGVzaWduZXJjb21wb25lbnRzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGVzaWduZXI0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH11aXRvb2xzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Z3VpNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9aGVscDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfW5ldHdvcms0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zY3JpcHQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zY3JpcHR0b29sczQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXNxbDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXN2ZzQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXRlc3Q0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH13ZWJraXQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH14bWw0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kZWNsYXJhdGl2ZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXhtbHBhdHRlcm5zNC1kZXYgXAorICAgICAgICBsaWJzcWxpdGUzLWRldiBcCisgICAgICAgIGV4cGF0LWRldiBcCisgICAgICAgICIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1waG9ub240LWRldiBcCisgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldC5iYiBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVkMjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJUYXJnZXQgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKKworUFIgPSAicjciCisKK1FUTElCUFJFRklYID0gIi1lbWJlZGRlZCIKKworcmVxdWlyZSBwYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsL0V4cG9ydFdpemFyZC1kZXBlbmRzLW9uLXVpX3dpemFyZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsL0V4cG9ydFdpemFyZC1kZXBlbmRzLW9uLXVpX3dpemFyZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGIyYjIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0FwcC9FeHBvcnRXaXphcmQuY3BwIGRlcGVuZHMgb24gd2l6YXJkLmggd2hpY2ggZGVwZW5kcyBvbiB1aV93aXphcmQuIFRoZSBsYXN0IG9uZQorc2hvdWxkIGJlIGFscmVhZHkgZ2VuZXJhdGVkIGJlZm9yZSBjb21waWxpbmcgRXhwb3J0V2l6YXJkLmNwcC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBGb3Rvd2FsbC0wLjkvQXBwL0V4cG9ydFdpemFyZC5jcHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBGb3Rvd2FsbC0wLjkub3JpZy9BcHAvRXhwb3J0V2l6YXJkLmNwcAkyMDA5LTExLTMwIDEzOjIxOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIEZvdG93YWxsLTAuOS9BcHAvRXhwb3J0V2l6YXJkLmNwcAkyMDEyLTA1LTEwIDE3OjEyOjA2Ljc2NTIzMDgzMCArMDMwMAorQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSAiaW1hZ2Vsb2FkZXJxdC5oIgorICNpbmNsdWRlICJwb3N0ZXJhem9yY29yZS5oIgorICNpbmNsdWRlICJ3aXphcmQuaCIKKysjaW5jbHVkZSAidWlfd2l6YXJkLmgiCisgCisgI2luY2x1ZGUgPFFEZXNrdG9wU2VydmljZXM+CisgI2luY2x1ZGUgPFFEZXNrdG9wV2lkZ2V0PgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGxfMC45LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGxfMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZjAyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJDcmVhdGl2ZSBwaG90byBkaXNwbGF5IGFwcGxpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiRm90b3dhbGwgaXMgYSBjcmVhdGl2ZSB0b29sIHRoYXQgYWxsb3dzIHlvdSB0byBsYXlvdXQgeW91ciBwaG90b3Mgb3IgcGljdHVyZXMgXAoraW4gYSBwZXJzb25hbCB3YXkuIFlvdSBjYW4gYWRkIHBpY3R1cmVzLCB0aGVuIHJlc2l6ZSwgbW92ZSwgY2hhbmdlIGNvbG9ycywgdGV4dCwgc2hhZG93cywgZXRjLi4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZW5yaWNvcm9zLmNvbS9vcGVuc291cmNlL2ZvdG93YWxsIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9HUExfVjI7bWQ1PTc5ODA4Mzk3YzMzNTVmMTYzYzAxMjYxNjEyNWM5ZTI2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uY3BwO2JlZ2lubGluZT02O2VuZGxpbmU9MTE7bWQ1PWI1NjlhY2MyYmY4OTc0YTMwODJiNThmYzUzYjlkOGRjIgorU0VDVElPTiA9ICJ4MTEvYXBwcyIKKworUFIgPSAicjQiCisKK1NSQ1JFViA9ICIwNmQ1YTQxNDJjNTk5NjA0ZDlhOWZkNjQ3MjdiNjk0NWViOGNkM2RhIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Vucmljb3Jvcy9mb3Rvd2FsbC5naXQgXAorICAgICAgICAgICBmaWxlOi8vRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IHF0NHgxMQorCitFWFRSQV9RTUFLRVZBUlNfUFJFID0gIkNPTkZJRys9bm8td2ViY2FtIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgSU5TVEFMTF9ST09UPSR7RH0gaW5zdGFsbAorfQorCisjIEVuc3VyZSB3ZSBoYXZlIHNvbWUgcGx1Z2lucyBmb3Igc29tZSB1c2VmdWwgaW1hZ2UgZm9ybWF0cworUlJFQ09NTUVORFNfJHtQTn0gKz0gInF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtZ2lmIHF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBxdDQtcGx1Z2luLWltYWdlZm9ybWF0LXRpZmYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wL25vLWhvc3QtcGF0aHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wL25vLWhvc3QtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiNWJiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEbyBub3QgaW5jbHVkZSAvdXNyL2luY2x1ZGUgaG9zdCBwYXRocworCitUaGVzZSB3ZXJlIGFkZGVkIHVwc3RyZWFtIGFwcGFyZW50bHkgZm9yIGZyZWVic2Qgc3VwcG9ydCwgYnV0IHRyaWdnZXIKK2NvbXBpbGVyIHdhcm5pbmdzIGR1cmluZyB0aGUgYnVpbGQgYW5kIGNvdWxkIGJlIGRhbmdlcm91cywgc28gcmVtb3ZlCit0aGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Nyb3NzXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVXBkYXRlIHBhdGNoIGZvciB2ZXJzaW9uIDAuNy40LgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIHFtbXAtMC43LjQvQ01ha2VMaXN0cy50eHQJMjAxNC0wMS0xMCAwOTo1OTo0NC45NzE4Mzc3NDYgKzA4MDAKKysrKyBxbW1wLTAuNy40L0NNYWtlTGlzdHMudHh0Lm5ldwkyMDE0LTAxLTEwIDEwOjI0OjUxLjg1NTgzNzU2NiArMDgwMAorQEAgLTEsOSArMSw1IEBACisgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNi4wKQorIAorLSNmcmVlYnNkIHN1cHBvcnQKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAvdXNyL2xvY2FsL2luY2x1ZGUpCistU0VUKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7Q01BS0VfUkVRVUlSRURfSU5DTFVERVN9IC91c3IvbG9jYWwvaW5jbHVkZSkKKy0KKyAjZXh0cmFjdCB2ZXJzaW9uIGZyb20gcW1tcC5oCisgRklMRShTVFJJTkdTICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3JjL3FtbXAvcW1tcC5oIgorICAgICAgUU1NUF9WRVJTSU9OX0RBVEEgUkVHRVggIl4jZGVmaW5lWyBcdF0rUU1NUF9WRVJTSU9OX1tBLVpdK1sgXHRdK1swLTldKy4qJCIpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wXzAuOC42LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcF8wLjguNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjhhZDBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcF8wLjguNi5iYgpAQCAtMCwwICsxLDc2IEBACitTVU1NQVJZID0gIlF0LWJhc2VkIE11bHRpbWVkaWEgUGxheWVyIgorREVTQ1JJUFRJT04gPSAiUW1tcCBpcyBhbiBhdWRpbyBwbGF5ZXIsIHdyaXR0ZW4gd2l0aCB0aGUgaGVscCBvZiB0aGUgUXQgbGlicmFyeS4gVGhlIHVzZXIgaW50ZXJmYWNlIGlzIHNpbWlsYXIgdG8gV2luYW1wIG9yIFhNTVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3FtbXAueWxzb2Z0d2FyZS5jb20iCitMSUNFTlNFID0gIkdQTHYyIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKK0RFUEVORFMgPSAidGFnbGliIGxpYm1hZCBsaWJ2b3JiaXMgbGlib2dnIGFsc2EtbGliIGxpYnNuZGZpbGUxIGxpYnNhbXBsZXJhdGUwIGN1cmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3FtbXAueWxzb2Z0d2FyZS5jb20vZmlsZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ob3N0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2N2U5NmU4OWM2MWI3NDMyZTVhMTJmNTU1ZGI3MDJiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZGFlYTNmMGEwZGY3YjM0MDg5NTEzYzJjNTc0MTNjODI4MTZhYjg4OTJiZGRhYmY0OWMxOGE3OTU2MjU1NDQ5IgoraW5oZXJpdCBjbWFrZSBxdDR4MTEKKworUU1NUF9QTFVHSU5fT1BUSU9OUyA/Pz0gIlwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01NUzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01QQzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01PRFBMVUc6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9XQVZQQUNLOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfRkZNUEVHOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQUFDOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQ0RBOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTUlESTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0dNRTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX09TUzQ6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9KQUNLOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQlMyQjpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX1BST0pFQ1RNOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfRU5DQTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworZXhwb3J0IEVYVFJBX09FQ01BS0UgPSAiLURRVF9RTUFLRV9FWEVDVVRBQkxFPSR7T0VfUU1BS0VfUU1BS0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfTFJFTEVBU0VfRVhFQ1VUQUJMRT0ke09FX1FNQUtFX0xSRUxFQVNFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX01PQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfTU9DfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1VJQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfVUlDfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1JDQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfUkNDfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX0xJQlJBUllfRElSPSR7T0VfUU1BS0VfTElCRElSX1FUfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX0hFQURFUlNfRElSPSR7T0VfUU1BS0VfSU5DRElSX1FUfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1FUQ09SRV9JTkNMVURFX0RJUj0ke09FX1FNQUtFX0lOQ0RJUl9RVH0vUXRDb3JlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7UU1NUF9QTFVHSU5fT1BUSU9OU30gXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBFbnN1cmUgd2UgZ2V0IHRoZSBjbWFrZSBjb25maWd1cmUgYW5kIG5vdCBxbWFrZQorCWNtYWtlX2RvX2NvbmZpZ3VyZQorfQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecW1tcC1wbHVnaW4tLiogIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgcW1tcF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3FtbXAnKQorICAgIGdkID0gZC5leHBhbmQoJyR7RH0vJHtsaWJkaXJ9L3FtbXAnKQorICAgIHBsdWdfZGlycyA9IG9zLmxpc3RkaXIoZ2QpCisKKyAgICBmb3IgcGx1Z19kaXIgaW4gcGx1Z19kaXJzOgorICAgICAgICBnX3BsdWdfZGlyID0gb3MucGF0aC5qb2luKHFtbXBfbGliZGlyLHBsdWdfZGlyKQorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnX3BsdWdfZGlyLCAnXmxpYiguKilcLnNvJCcsICdxbW1wLXBsdWdpbi0nICsgcGx1Z19kaXIubG93ZXIoKSArICctJXMnLCAnUW1tcCAnICsgcGx1Z19kaXIgICsgJyBwbHVnaW4gZm9yICVzJykKK30KKworRklMRVNfJHtQTn0gPSAiXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9xbW1wIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy8qIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3FtbXAvaW1hZ2VzLyogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyogXAorICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3FtbXAvKi8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ0YWdsaWIgYWxzYS1saWIgbGlibWFkIGN1cmwgbGliaWN1aTE4biIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3F1aWNreV8wLjQuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xdWlja3lfMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYWE1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xdWlja3lfMC40LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgbm90ZS10YWtpbmcgYXBwbGljYXRpb24gd2l0aCBXaWtpLXN0eWxlIHN5bnRheCBhbmQgYmVoYXZpb3VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LWFwcHMub3JnL2NvbnRlbnQvc2hvdy5waHAvUXVpY2t5P2NvbnRlbnQ9ODAzMjUiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3ZlcnNpb24uaDtlbmRsaW5lPTE5O21kNT04NzhiZGFmZjQzOGRhYjg2Mjk4MzAxZmQxYTIxMGUxNCIKK1NFQ1RJT04gPSAieDExL2FwcHMiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9xdC1hcHBzLm9yZy9DT05URU5UL2NvbnRlbnQtZmlsZXMvODAzMjUtcXVpY2t5LTAuNC50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MjRkOWU0NzdlZTljNDk5NGY3M2EzY2IyMTUxNjFkOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzY2Mzc2ZTAwMzVkNDQ1NDc2MTJiZjYyOTg5MDc2OWE2MTc4YzNlN2VhZmJjZjk1ZjFjNjIwN2FjMGYzNTJhIgorCitpbmhlcml0IHF0NHgxMQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9LyR7QlBOfSAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXQvcXRkZW1vLWluaXQgYi9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXQvcXRkZW1vLWluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmMDI3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKworc2V0IC1lCisKK2lmIFsgLXggL3Vzci9iaW4vcXRkZW1vIF07IHRoZW4KKwlRVERFTU89InF0ZGVtbyIKK2Vsc2UKKwlRVERFTU89InF0ZGVtb0UgLXF3cyIKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyBxdGRlbW8iCisJaWYgWyAtZiAvZXRjL3Byb2ZpbGUuZC90c2xpYi5zaCBdOyB0aGVuCisJCS4gL2V0Yy9wcm9maWxlLmQvdHNsaWIuc2gKKwlmaQorCWlmIFsgLWUgIiRUU0xJQl9UU0RFVklDRSIgXTsgdGhlbgorCQlpZiBbICEgLWYgL2V0Yy9wb2ludGVyY2FsIF07IHRoZW4KKwkJCS91c3IvYmluL3RzX2NhbGlicmF0ZQorCQlmaQorCQlpZiBbICIkUVRERU1PIiA9ICJxdGRlbW8iIF07IHRoZW4KKwkJCVhvcmcgJgorCQkJZXhwb3J0IERJU1BMQVk9OjAKKwkJCSRRVERFTU8gJgorCQllbHNlCisJCQlRV1NfTU9VU0VfUFJPVE89dHNsaWI6JFRTTElCX1RTREVWSUNFICRRVERFTU8gJgorCQlmaQorCWVsc2UKKwkJaWYgWyAiJFFUREVNTyIgPSAicXRkZW1vIiBdOyB0aGVuCisJCQlYb3JnICYKKwkJCWV4cG9ydCBESVNQTEFZPTowCisJCWZpCisJCSRRVERFTU8gJgorCWZpCisJOzsKKyAgc3RvcCkKKwllY2hvICJTdG9wcGluZyBxdGRlbW8iCisJaWYgWyAiJFFUREVNTyIgPSAicXRkZW1vIiBdOyB0aGVuCisJCWtpbGxhbGwgWG9yZworCQlraWxsYWxsIHF0ZGVtbworCWVsc2UKKwkJa2lsbGFsbCBxdGRlbW9FCisJZmkKKwk7OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICopCisJZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdF8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXRfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWIwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXRfMC4xLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiSW5pdCBzY3JpcHQgZm9yIHF0ZGVtbyIKK0xJQ0VOU0UgPSAiTUlUIgorU1JDX1VSSSA9ICJmaWxlOi8vcXRkZW1vLWluaXQiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9xdGRlbW8taW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcXRkZW1vCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgYWxsYXJjaAorCitJTklUU0NSSVBUX05BTUUgPSAicXRkZW1vIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAxOSAwIDEgNiAuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC1ncmFwaGljcy1zeXN0ZW0vcXQ0LWdyYXBoaWNzLXN5c3RlbV8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0LWdyYXBoaWNzLXN5c3RlbS9xdDQtZ3JhcGhpY3Mtc3lzdGVtXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjNmM2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC1ncmFwaGljcy1zeXN0ZW0vcXQ0LWdyYXBoaWNzLXN5c3RlbV8xLjAuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJTZXRzIGRlZmF1bHQgUXQ0IEdyYXBoaWNzIFN5c3RlbSB0byAke1FUX0dSQVBISUNTX1NZU1RFTX0iCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyMSIKKworUVRfR1JBUEhJQ1NfU1lTVEVNID89ICJyYXN0ZXIiCisKK2RlZiBfZ2V0X2V4dHJhX3JkZXBlbmRzKGQpOgorICAgIGdzID0gZC5nZXRWYXIoJ1FUX0dSQVBISUNTX1NZU1RFTScsIFRydWUpCisgICAgaWYgZ3MgPT0gIm9wZW5nbCI6CisgICAgICAgIHJldHVybiAicXQ0LXBsdWdpbi1ncmFwaGljc3N5c3RlbXMtZ2xncmFwaGljc3N5c3RlbSIKKworICAgIHJldHVybiAiIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCisJY2ZnX2ZpbGU9JHtEfS8ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC9xdC1ncmFwaGljc3N5c3RlbQorCWVjaG8gImV4cG9ydCBRVF9HUkFQSElDU1NZU1RFTT0ke1FUX0dSQVBISUNTX1NZU1RFTX0iID4gJGNmZ19maWxlCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7QF9nZXRfZXh0cmFfcmRlcGVuZHMoZCl9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29scy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3MDA4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29scy5pbmMKQEAgLTAsMCArMSwxMjUgQEAKK1NVTU1BUlkgPSAiU0RLIHRvb2xzIGZvciBRdCB2ZXJzaW9uIDQueCIKK0RFUEVORFMgPSAibmF0aXZlc2RrLXpsaWIgbmF0aXZlc2RrLWRidXMgcXQ0LW5hdGl2ZSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEnLCAnJywgZCl9IgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vcXQ0LSR7UFZ9OiIKKworaW5oZXJpdCBuYXRpdmVzZGsgcW1ha2UyCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnF0LXByb2plY3Qub3JnL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8ke1BWfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWNvbmZpZ3VyZS1Vc2UtT0VfUU1BS0VfLXZhbHVlcy10by1zcGVjaWZ5LVF0LXV0aWxpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIgorCitTID0gIiR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkdQTDM7bWQ1PTZlMTY5NGVlMzM4ZGI0MTA0MTc1MTc4ODQ5MThkNGQyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUExfRVhDRVBUSU9OLnR4dDttZDU9MDE0NWM0ZDFiNmY5NmE2NjFjMmMxMzlkZmIyNjhmYjYiCisKK3JlcXVpcmUgcXQ0X2FyY2guaW5jCisKKyMgRklYTUU6IG1ha2UgaXQgd29yayB3aXRoICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZyAtLWNmbGFncyBkYnVzLTEiCitFWFRSQV9PRUNPTkYgPSAiLXByZWZpeCAke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgIC1xdC1saWJqcGVnIC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgLW5vLWxpYmpwZWcgLW5vLWxpYnBuZyAtbm8tbGlibW5nIC1uby1saWJ0aWZmIFwKKyAgICAgICAgICAgICAgICAtbm8tYWNjZXNzaWJpbGl0eSBcCisgICAgICAgICAgICAgICAgLW5vLWN1cHMgXAorICAgICAgICAgICAgICAgIC1uby1leGNlcHRpb25zICBcCisgICAgICAgICAgICAgICAgLW5vLW5hcy1zb3VuZCBcCisgICAgICAgICAgICAgICAgLW5vLW5pcyAtbm8tb3BlbnNzbCBcCisgICAgICAgICAgICAgICAgLXZlcmJvc2UgLXJlbGVhc2UgLWZhc3QgLXN0YXRpYyBcCisgICAgICAgICAgICAgICAgLXBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorICAgICAgICAgICAgICAgIC14cGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisgICAgICAgICAgICAgICAgLWFyY2ggJHtRVF9BUkNIfSBcCisgICAgICAgICAgICAgICAgLWVtYmVkZGVkIC1uby1mcmVldHlwZSAtbm8tZ2xpYiAtbm8taWNvbnYgXAorICAgICAgICAgICAgICAgIC1xdDNzdXBwb3J0IFwKKyAgICAgICAgICAgICAgICAtSSR7U1RBR0lOR19ESVJfSE9TVH0ke1NES1BBVEhOQVRJVkV9L3Vzci9pbmNsdWRlL2RidXMtMS4wIFwKKyAgICAgICAgICAgICAgICAtSSR7U1RBR0lOR19ESVJfSE9TVH0ke1NES1BBVEhOQVRJVkV9L3Vzci9saWIvZGJ1cy0xLjAvaW5jbHVkZSIKKworIyB5YW5rIGRlZmF1bHQgLWUsIG90aGVyd2lzZSB3ZSBnZXQgdGhlIGZvbGxvd2luZyBlcnJvcjoKKyMgbW9jX3FidWZmZXIuY3BwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitFWFRSQV9PRU1BS0UgPSAiICIKKworZG9fY29uZmlndXJlKCkgeworICAgICMgQXZvaWQgcHJvYmxlbXMgd2l0aCBRdCA0LjguMCBjb25maWd1cmUgc2V0dGluZyBRTUFLRV9MSU5LIGZyb20gTEQgKHNpbmNlIHdlIHdhbnQgdGhlIGxpbmtlciB0byBiZSBnKyspCisgICAgdW5zZXQgTEQKKworICAgIGlmIFsgISAtZSBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysgXTsgdGhlbgorICAgICAgICBsbiAtc2YgbGludXgtZysrIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKworICAgIGZpCisKKyAgICBjcCAuLi9nKysuY29uZiBta3NwZWNzL2NvbW1vbgorICAgIGNwIC4uL2xpbnV4LmNvbmYgbWtzcGVjcy9jb21tb24KKworICAgIGlmIFsgLWYgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZiBdIDsgdGhlbgorICAgICAgICAjIGRvbid0IHVzZSBob3N0IGcrKyBldmVuIGR1cmluZyBjb25maWd1cmUgKDQuOC4wKykKKyAgICAgICAgc2VkIC1pIC1lICJzIz0gZysrIz0gJHtDWFh9IyIgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZgorICAgICAgICBzZWQgLWkgLWUgInMjPSBnY2MjPSAke0NDfSMiIG1rc3BlY3MvY29tbW9uL2crKy1iYXNlLmNvbmYKKyAgICBmaQorCisgICAgIyBVc2UgcW1ha2UgZnJvbSBxdDQtbmF0aXZlIGZvciBidWlsZGluZworICAgIGlmIFsgISAtZSBiaW4vcW1ha2UgXTsgdGhlbgorICAgICAgICBsbiAtc2YgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiBiaW4vcW1ha2UKKyAgICBmaQorICAgIHNldF9hcmNoCisgICAgKGVjaG8gbzsgZWNobyB5ZXMpIHwgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHx8IGRpZSAiQ29uZmlndXJpbmcgcXQgZmFpbGVkLiBFWFRSQV9PRUNPTkYgd2FzICR7RVhUUkFfT0VDT05GfSIKK30KKworVE9CVUlMRCA9ICJcCisgIHNyYy90b29scy9ib290c3RyYXAgXAorICBzcmMvdG9vbHMvbW9jIFwKKyAgc3JjL2NvcmVsaWIgXAorICBzcmMvc3FsIFwKKyAgc3JjL2RidXMgXAorICBzcmMvcXQzc3VwcG9ydCBcCisgIHNyYy94bWwgXAorICBzcmMvdG9vbHMvdWljIFwKKyAgc3JjL3Rvb2xzL3JjYyBcCisgIHNyYy9uZXR3b3JrIFwKKyAgc3JjL2d1aSBcCisgIHNyYy90b29scy91aWMzIFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHJlbGVhc2UgXAorICB0b29scy9saW5ndWlzdC9sdXBkYXRlIFwKKyAgdG9vbHMvcWRidXMgXAorIgorCitkb19jb21waWxlKCkgeworICAgIGZvciBpIGluICR7VE9CVUlMRH07IGRvCisgICAgICAgIGNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorICAgIGRvbmUKKworICAgICMgQnVpbGQgbmF0aXZlc2RrIHFtYWtlCisgICAgZXhwb3J0IFFNQUtFU1BFQz0iJHtTfS9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCisgICAgY2QgJHtTfS9xbWFrZQorICAgICR7T0VfUU1BS0VfUU1BS0V9CisgICAgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorICAgIGNkICR7U30KK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlMiAke0R9JHtiaW5kaXJ9L3FtYWtlMgorICAgIGZvciBpIGluIG1vYyB1aWMgdWljMyByY2MgbHJlbGVhc2UgbHVwZGF0ZSBxZGJ1c2NwcDJ4bWwgcWRidXN4bWwyY3BwOyBkbworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgYmluLyR7aX0gJHtEfSR7YmluZGlyfS8ke2l9NAorICAgIGRvbmUKKworICAgIChjZCAke0R9JHtiaW5kaXJ9OyBcCisgICAgbG4gLXMgcW1ha2UyIHFtYWtlOyBcCisgICAgZm9yIGkgaW4gbW9jIHVpYyB1aWMzIHJjYyBscmVsZWFzZSBsdXBkYXRlIHFkYnVzY3BwMnhtbCBxZGJ1c3htbDJjcHA7IGRvIFwKKyAgICAgICAgbG4gLXMgJHtpfTQgJHtpfTsgXAorICAgIGRvbmUpCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgY2F0ID4ke0R9JHtzeXNjb25mZGlyfS9xdC5jb25mIDw8RU9GCitbUGF0aHNdCitQcmVmaXggPSAke3ByZWZpeH0KK0VPRgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzXzQuOC43LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmEwN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIG5hdGl2ZXNkay1xdDQtdG9vbHMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImQ5OTBlZTY2YmY3YWIwYzc4NTU4OTc3NmYzNWJhNmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyODgyMjk1MDk3ZTQ3ZmUwODlmOGFjNzQxYTk1ZmVmNDdlMGE3M2EzZjNjZGYyMWI1Njk5MDYzOGY2MjZlYTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1N2U3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYwpAQCAtMCwwICsxLDY4IEBACitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UuR1BMMzttZDU9NmUxNjk0ZWUzMzhkYjQxMDQxNzUxNzg4NDkxOGQ0ZDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTF9FWENFUFRJT04udHh0O21kNT0wMTQ1YzRkMWI2Zjk2YTY2MWMyYzEzOWRmYjI2OGZiNiIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vcXQ0LSR7UFZ9OiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQucXQtcHJvamVjdC5vcmcvb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyR7UFZ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1BZGQtMmJwcC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtY29uZmlndXJlLWFkZC1jcm9zc2FyY2gtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtY29uZmlndXJlLWFkZC1ub3N0cmlwLWZvci1kZWJ1Zy1wYWNrYWdlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LWNvbmZpZ3VyZS1lbnN1cmUtd2UtaWRlbnRpZnktdGhlLWNvbXBpbGVyLWFzLWctaW4tY28ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1jb25maWd1cmUtbWFrZS1wdWxzZWF1ZGlvLWEtY29uZmlndXJhYmxlLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LUZpeGVzLWZvci1nY2MtNC43LjAtcGFydGljdWxhcmx5LW9uLXFlbXV4ODYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LURvbi10LWNyYXNoLW9uLWJyb2tlbi1HSUYtaW1hZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1hYXJjaDY0X2FkZF9oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LVFXU0xvY2staW52YWxpZC1hcmd1bWVudC1sb2dzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDk5MGVlNjZiZjdhYjBjNzg1NTg5Nzc2ZjM1YmE2YWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTI4ODIyOTUwOTdlNDdmZTA4OWY4YWM3NDFhOTVmZWY0N2UwYTczYTNmM2NkZjIxYjU2OTkwNjM4ZjYyNmVhMCIKKworUyA9ICIke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0iCisKKyMgZGlzYWJsZSB3ZWJraXQgZm9yIG1pcHM2NCBuMzIgdGVtcG9yYXJpbHkgdGhhdCBmYWlscyB0byBjb21waWxlLAorIyBxdCB1cHN0cmVhbSBkZWZlY3Q6CisjIGh0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMzkyMjQKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfbWlwczY0bjMyID0gIiAtbm8td2Via2l0IgorCisjIGRpc2FibGUgd2Via2l0IGZvciBhYXJjaDY0IHRlbXBvcmFyaWx5IHRoYXQgZmFpbHMgdG8gY29tcGlsZQorUVRfQ09ORklHX0ZMQUdTX2FwcGVuZF9hYXJjaDY0ID0gIiAtbm8td2Via2l0IgorCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHNfYXBwZW5kICAgICA9ICIgJHtiaW5kaXJ9L3FtbCAke2JpbmRpcn0vcW1scGx1Z2luZHVtcCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10b29scy1kYmdfYXBwZW5kID0gIiAke2JpbmRpcn0vLmRlYnVnL3FtbCAke2JpbmRpcn0vLmRlYnVnL3FtbHBsdWdpbmR1bXAiCisKK1BBQ0tBR0VTX2FwcGVuZCA9ICIgJHtRVF9CQVNFX05BTUV9LXRlc3RzLWRiZyAke1FUX0JBU0VfTkFNRX0tdGVzdHMiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdGVzdHMtZGJnICAgICAgICA9ICIke3ByZWZpeH0vdGVzdHMvcXQ0LyovLmRlYnVnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRlc3RzICAgICAgICAgICAgPSAiJHtwcmVmaXh9L3Rlc3RzL3F0NC8qIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgJ3M6cXRQcmVwYXJlVG9vbChMUkVMRUFTRSwgbHJlbGVhc2UpOkxSRUxFQVNFID0gJHtPRV9RTUFLRV9MUkVMRUFTRX06ZycgXAorICAgICAgICAke1N9L3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvCisKKyAgICBzZWQgLWkgXAorICAgIC1lIC9RTUFLRV9NT0NcIC9kIFwKKyAgICAtZSAvUU1BS0VfVUlDXCAvZCBcCisgICAgLWUgL1FNQUtFX1VJQzNcIC9kIFwKKyAgICAtZSAvUU1BS0VfUkNDXCAvZCBcCisgICAgJHtTfS9jb25maWd1cmUKKworICAgICMgQXZvaWQgcHJvYmxlbXMgd2l0aCBRdCA0LjguMCBjb25maWd1cmUgc2V0dGluZyBRTUFLRV9MSU5LIGZyb20gTEQgKHNpbmNlIHdlIHdhbnQgdGhlIGxpbmtlciB0byBiZSBnKyspCisgICAgdW5zZXQgTEQKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjBhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA1NTA5N2QyN2U4Yjc0NmIzZDVmZjQzNzkzOWNhZjFmYTQzYzBkNjJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9sZ2VyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMTc6MjI6MzAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8yMV0gcWxpYnJhcnlpbmZvOiBhbGxvdyB0byBzZXQgcXQuY29uZiBmcm9tIHRoZSBvdXRzaWRlCisgdXNpbmcgdGhlIGVudmlyb25tZW50CisKK0FsbG93IHRvIHNldCBhIHF0LmNvbmYgZnJvbSB0aGUgb3V0c2lkZSB1c2luZyB0aGUgZW52aXJvbm1lbnQuIFRoaXMgYWxsb3dzCit0byBpbmplY3QgbmV3IHByZWZpeGVzIGFuZCBvdGhlciBwYXRocyBpbnRvIHFtYWtlLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nCit0aGUgc2FtZSBxbWFrZSBiaW5hcnkgdG8gYnVpbGQgcXQveDExIGFuZCBxdC9lbWJlZGRlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAgYi9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcAoraW5kZXggMTgwZGMzOS4uNGFkYWQzNSAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwCisrKysgYi9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcAorQEAgLTU0LDYgKzU0LDcgQEAKKyBRVF9CRUdJTl9OQU1FU1BBQ0UKKyBleHRlcm4gUVN0cmluZyBxbWFrZV9saWJyYXJ5SW5mb0ZpbGUoKTsKKyBRVF9FTkRfTkFNRVNQQUNFCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNlbHNlCisgIyBpbmNsdWRlICJxY29yZWFwcGxpY2F0aW9uLmgiCisgI2VuZGlmCitAQCAtMTEyLDYgKzExMywxMCBAQCBRU2V0dGluZ3MgKlFMaWJyYXJ5SW5mb1ByaXZhdGU6OmZpbmRDb25maWd1cmF0aW9uKCkKKyAjaWZkZWYgQk9PVFNUUkFQUElORworICAgICBpZighUUZpbGU6OmV4aXN0cyhxdGNvbmZpZykpCisgICAgICAgICBxdGNvbmZpZyA9IHFtYWtlX2xpYnJhcnlJbmZvRmlsZSgpOworKyAgICBpZiAoIVFGaWxlOjpleGlzdHMocXRjb25maWcpKSB7CisrICAgICAgICBRQnl0ZUFycmF5IGNvbmZpZyA9IGdldGVudigiUVRfQ09ORl9QQVRIIik7CisrICAgICAgICBxdGNvbmZpZyA9IFFGaWxlOjpkZWNvZGVOYW1lKGNvbmZpZyk7CisrICAgIH0KKyAjZWxzZQorICAgICBpZiAoIVFGaWxlOjpleGlzdHMocXRjb25maWcpICYmIFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCkpIHsKKyAjaWZkZWYgUV9PU19NQUMKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGZjODg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA1ZTZiMTA1MWFmYTMwOTlhMDJhNzU4YjA1OTYyMzY3NTlkNzA2NzBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjE4OjA4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMjFdIHFrYmR0dHlfcXdzOiBmaXggYnVpbGQgd2l0aCBvbGQga2VybmVsIGhlYWRlcnMKKworVGhpcyBpc3N1ZSBpcyB0aGF0IHdpdGggQysrIGNvbXBpbGVyIHByb2Nlc3MgYW4gb2xkIHZlcnNpb24gb2Yga2VybmVsCitoZWFkZXIgZmlsZSwgY29pbmNpZGVudGx5IHRoYXQgZmlsZSBoYXMgYSB2YXJpYWJsZSBuYW1lZCAnbmV3JzoKKworKiAnZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwJyBpbmNsdWRlICdsaW51eC92dC5oJzsKKyogJy91c3IvaW5jbHVkZS9saW51eC92dC5oJyBoYXMgYmVsb3cgY29kZSBvbiBTTEVELTExLng6CisgICAgKyB1bnNpZ25lZCBpbnQgbmV3OworCitPbiBtb3N0bHkgaG9zdHMgaXQgaGFzIGJlZW4gY2hhbmdlZCB0bzogbmV3IC0+IG5ld2V2LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcCB8IDEyICsrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwCitpbmRleCBhNDY4MTFiLi43NjIxMzhmIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwCitAQCAtNTQsOCArNTQsMjAgQEAKKyAKKyAjaWYgZGVmaW5lZCBRX09TX0xJTlVYCisgIyAgaW5jbHVkZSA8bGludXgva2QuaD4KKysKKysvKiBXb3JrYXJvdW5kIGtlcm5lbCBoZWFkZXJzIHVzaW5nICJuZXciIGFzIHZhcmlhYmxlIG5hbWUuIFRoZSBwcm9ibGVtCisrIGlzIHNwZWNpZmljIHRvIFNMRUQtMTEsIG90aGVyIGRpc3Ryb3MgdXNlICJuZXdldiIgcmF0aGVyIHRoYW4gIm5ldyIgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKysjd2FybmluZyAid29ya2Fyb3VuZCBrZXJuZWwgaGVhZGVycyB1c2luZyBuZXcgYXMgdmFyaWFibGUgbmFtZSBvbiBTTEVEIDExIgorKyNkZWZpbmUgbmV3IG5ld2V2CisrI2VuZGlmCisrCisgIyAgaW5jbHVkZSA8bGludXgvdnQuaD4gLy9UT0RPOiBtb3ZlIHZ0IGhhbmRsaW5nIHNvbWV3aGVyZSBlbHNlIChRTGludXhGYlNjcmVlbj8pCisgCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrI3VuZGVmIG5ldworKyNlbmRpZgorKworICMgIGluY2x1ZGUgInFzY3JlZW5fcXdzLmgiCisgIyAgaW5jbHVkZSAicXdpbmRvd3N5c3RlbV9xd3MuaCIKKyAjICBpbmNsdWRlICJxYXBwbGljYXRpb24uaCIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYWVhNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBiNjgwNWU4ODNjMDc4Zjc2NDdkOTIzNGFjYTRlMzUxM2ViZDFjOWJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVHVlLCAxIE1heSAyMDEyIDA3OjQ4OjE1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMjFdIHdlYmtpdDI6IHNldCBPVVRQVVRfRElSIHZhbHVlIGlmIGVtcHR5CisKK1dpdGhvdXQgdGhpcyBkb19jb25maWd1cmUgd2FzIHRyeWluZyB0byBjcmVhdGUgL2luY2x1ZGUvV2ViQ29yZS9saWJkdW1teS5wcmwgaW4gcm9vdCBvZiBidWlsZCBob3N0IGZpbGVzeXN0ZW0KK25vdyBpdCdzIGluIHByb3BlciBwbGFjZSAke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjEvc3JjLzNyZHBhcnR5L3dlYmtpdC9pbmNsdWRlL1dlYkNvcmUvbGliZHVtbXkucHJsCisKK0ZpcnN0IHJlcG9ydGVkIGhlcmU6CitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vb3BlbmVtYmVkZGVkLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbXNnMjQ0MzYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworaW5kZXggMDA2YTg4Yy4uNWUxNzE5MyAxMDA2NDQKKy0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworQEAgLTMsNiArMyw4IEBAIFRBUkdFVCA9IGR1bW15CisgCisgQ09ORklHIC09IGRlYnVnX2FuZF9yZWxlYXNlCisgCisraXNFbXB0eShPVVRQVVRfRElSKTogT1VUUFVUX0RJUiA9IC4uLy4uCisrCisgQ09ORklHKHN0YW5kYWxvbmVfcGFja2FnZSkgeworICAgICBpc0VtcHR5KFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSKTpXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9ICQkUFdEL2dlbmVyYXRlZAorICAgICBpc0VtcHR5KFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUik6V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSID0gJCRQV0QvLi4vV2ViQ29yZS9nZW5lcmF0ZWQKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYjhhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBhZjY5OWM2ZThjZjlmYjI4ZDZmOGI3ODliZjMzZDUzYjQ3ZWRhZWM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoyNDoyMCArMDIwMAorU3ViamVjdDogW1BBVENIIDA0LzIxXSBjb25maWd1cmU6IHFtYWtlIGlzIGFscmVhZHkgYnVpbHQgaW4gcXQ0LXRvb2xzLW5hdGl2ZSwKKyBzbyBkaXNhYmxlIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBlM2Q0NjRiLi5jYzA0YjI3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00ODk5LDcgKzQ4OTksNyBAQCBzZXRCb290c3RyYXBWYXJpYWJsZSgpCisgfQorIAorICMgYnVpbGQgcW1ha2UKKy1pZiB0cnVlOyB0aGVuICMjI1sgJyEnIC1mICIkb3V0cGF0aC9iaW4vcW1ha2UiIF07CisraWYgZmFsc2U7IHRoZW4gIyMjWyAnIScgLWYgIiRvdXRwYXRoL2Jpbi9xbWFrZSIgXTsKKyAgICAgZWNobyAiQ3JlYXRpbmcgcW1ha2UuIFBsZWFzZSB3YWl0Li4uIgorIAorICAgICBPTERfUUNPTkZJR19IPQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA1LWNvbmZpZ3VyZS1zZXQtTEZMQUdTLXRvLXBpY2stdXAtemxpYi1mcm9tLXN0YWdpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA1LWNvbmZpZ3VyZS1zZXQtTEZMQUdTLXRvLXBpY2stdXAtemxpYi1mcm9tLXN0YWdpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4ZjJiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGFjOTMyMzdiYzkwZWE3NzczYzBlZjUyNzU5NjJiYWJhMDFkNGE5YzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/SmVyZW15PTIwTGFpbj1DMz1BOT89IDxqZXJlbXkubGFpbmVAbTR4Lm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6Mjc6NDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8yMV0gY29uZmlndXJlOiBzZXQgTEZMQUdTIHRvIHBpY2sgdXAgemxpYiBmcm9tIHN0YWdpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggY2MwNGIyNy4uNWE3YzRlZSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjkwLDcgKzY5MCw3IEBAIGZpCisgIyBpbml0YWxpemUgdmFyaWFibGVzCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKy1TWVNURU1fVkFSSUFCTEVTPSJSQU5MSUIgU1RSSVAgT0JKRFVNUCBMRCBDQyBDWFggQ0ZMQUdTIENYWEZMQUdTIExERkxBR1MiCisrU1lTVEVNX1ZBUklBQkxFUz0iUkFOTElCIFNUUklQIE9CSkRVTVAgTEQgQ0MgQ1hYIENGTEFHUyBDWFhGTEFHUyBMREZMQUdTIExGTEFHUyIKKyBmb3IgdmFybmFtZSBpbiAkU1lTVEVNX1ZBUklBQkxFUzsgZG8KKyAgICAgcW1ha2V2YXJuYW1lPSIke3Zhcm5hbWV9IgorICAgICAjIHVzZSBMREZMQUdTIGZvciBhdXRvY29uZiBjb21wYXQsIGJ1dCBxbWFrZSB1c2VzIFFNQUtFX0xGTEFHUworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA2LWNvbmZpZ3VyZS1Vc2UtT0VfUU1BS0VfLXZhbHVlcy10by1zcGVjaWZ5LVF0LXV0aWxpdHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA2LWNvbmZpZ3VyZS1Vc2UtT0VfUU1BS0VfLXZhbHVlcy10by1zcGVjaWZ5LVF0LXV0aWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlYmY3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDBiYzBkYjgzODEyYjU5MDBkYzRlNmZmYTk2YmRlYWI0NmI2YWRjYWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6Mjk6MDkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8yMV0gY29uZmlndXJlOiBVc2UgT0VfUU1BS0VfKiB2YWx1ZXMgdG8gc3BlY2lmeSBRdCB1dGlsaXR5CisgcGF0aHMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1YTdjNGVlLi5kYjRkMDQ0IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC04NjgzLDExICs4NjgzLDExIEBAIFFNQUtFX0FCU09MVVRFX1NPVVJDRV9ST09UID0gXCRcJFFUX1NPVVJDRV9UUkVFCisgUU1BS0VfTU9DX1NSQyAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL3NyYy9tb2MKKyAKKyAjbG9jYWwgcGF0aHMgdGhhdCBjYW5ub3QgYmUgcXVlcmllZCBmcm9tIHRoZSBRVF9JTlNUQUxMXyogcHJvcGVydGllcyB3aGlsZSBidWlsZGluZyBRVERJUgorLVFNQUtFX01PQyAgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vbW9jCistUU1BS0VfVUlDICAgICAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi91aWMKKy1RTUFLRV9VSUMzICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3VpYzMKKy1RTUFLRV9SQ0MgICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3JjYworLVFNQUtFX1FEQlVTWE1MMkNQUCA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi9xZGJ1c3htbDJjcHAKKytRTUFLRV9NT0MgICAgICAgID0gXCR7T0VfUU1BS0VfTU9DfQorK1FNQUtFX1VJQyAgICAgICAgPSBcJHtPRV9RTUFLRV9VSUN9CisrUU1BS0VfVUlDMyAgICAgICA9IFwke09FX1FNQUtFX1VJQzN9CisrUU1BS0VfUkNDICAgICAgICA9IFwke09FX1FNQUtFX1JDQ30KKytRTUFLRV9RREJVU1hNTDJDUFAgPSBcJHtPRV9RTUFLRV9RREJVU1hNTDJDUFB9CisgUU1BS0VfSU5DRElSX1FUICA9IFwkXCRRVF9CVUlMRF9UUkVFL2luY2x1ZGUKKyBRTUFLRV9MSUJESVJfUVQgID0gXCRcJFFUX0JVSUxEX1RSRUUvbGliCisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDctZGJ1cy1SZW1vdmUtY29uc3QtdXNhZ2UtdGhhdC1jYXVzZXMtY29tcGlsZS1mYWlsdXJlLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDctZGJ1cy1SZW1vdmUtY29uc3QtdXNhZ2UtdGhhdC1jYXVzZXMtY29tcGlsZS1mYWlsdXJlLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDIzYzkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjAxMWJiODAyOTQ4MGFmMWQxMjY2ZjI1OGU1YTVmNWNlZjczOTJkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdmVsIEhlaW1saWNoIDx0cm9waWtoYWptYUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjMxOjEwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMjFdIGRidXM6IFJlbW92ZSAiY29uc3QiIHVzYWdlIHRoYXQgY2F1c2VzIGNvbXBpbGUgZmFpbHVyZQorIGJ1aWxkaW5nIG5hdGl2ZXNkay1xdDQtdG9vbHMKKworUGF0Y2ggaGFzIGFwcGFyZW50bHkgYmVlbiByZWplY3RlZCB1cHN0cmVhbSwgbm90IGJlY2F1c2UgaXQgaXMgaW52YWxpZAorYnV0IGJlY2F1c2UgdGhlIHN1Ym1pdHRlciBkaWQgbm90IHN1Ym1pdCBhIG1lcmdlIHJlcXVlc3QgZm9yIGl0LCBzbyB0aGUKK3ZhbGlkaXR5IG9mIHRoZSBwYXRjaCB1cHN0cmVhbSBpcyB1bmNlcnRhaW4uIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOgoraHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0xNzk2MgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbcG9zc2libGUgcmV0cnldCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwIGIvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcAoraW5kZXggMGYwYjY0Ny4uYWE0Y2JhYiAxMDA2NDQKKy0tLSBhL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAKKysrKyBiL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAKK0BAIC03Myw3ICs3Myw3IEBAIFFUX0JFR0lOX05BTUVTUEFDRQorIHN0YXRpYyBib29sIGlzRGVidWdnaW5nOworICNkZWZpbmUgcURCdXNEZWJ1ZyAgICAgICAgICAgICAgaWYgKCE6OmlzRGVidWdnaW5nKTsgZWxzZSBxRGVidWcKKyAKKy1RX0dMT0JBTF9TVEFUSUNfV0lUSF9BUkdTKGNvbnN0IFFTdHJpbmcsIG9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZywgKFFMYXRpbjFTdHJpbmcoREJVU19TRVJWSUNFX0RCVVMpKSkKKytRX0dMT0JBTF9TVEFUSUNfV0lUSF9BUkdTKFFTdHJpbmcsIG9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZywgKFFMYXRpbjFTdHJpbmcoREJVU19TRVJWSUNFX0RCVVMpKSkKKyAKKyBzdGF0aWMgaW5saW5lIFFTdHJpbmcgZGJ1c1NlcnZpY2VTdHJpbmcoKQorIHsgcmV0dXJuICpvcmdGcmVlZGVza3RvcERCdXNTdHJpbmcoKTsgfQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA4LXFtYWtlLnByby1BbGxvdy1idWlsZGluZy1hLXNlcGFyYXRlLXFtYWtlLWZvci10aGUtdGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA4LXFtYWtlLnByby1BbGxvdy1idWlsZGluZy1hLXNlcGFyYXRlLXFtYWtlLWZvci10aGUtdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwN2Y0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDY0Y2U1ZDBlN2MxOTQzNmI5MjhhMmEwZDlkMTkyZjU2YmUzYzliYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzI6NDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8yMV0gcW1ha2UucHJvOiBBbGxvdyBidWlsZGluZyBhIHNlcGFyYXRlIHFtYWtlIGZvciB0aGUKKyB0YXJnZXQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgcW1ha2UvcW1ha2UucHJvIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9xbWFrZS9xbWFrZS5wcm8gYi9xbWFrZS9xbWFrZS5wcm8KK2luZGV4IDM4ZTBmY2UuLjUzYjFmZmIgMTAwNjQ0CistLS0gYS9xbWFrZS9xbWFrZS5wcm8KKysrKyBiL3FtYWtlL3FtYWtlLnBybworQEAgLTcsNiArNyw3IEBAIENPTkZJRyArPSBjb25zb2xlIGJvb3RzdHJhcAorIENPTkZJRyAtPSBxdCBzaGFyZWQgYXBwX2J1bmRsZSB1aWMKKyBERUZJTkVTICs9IFFUX0JVSUxEX1FNQUtFIFFUX0JPT1RTVFJBUFBFRAorIERFU1RESVIgPSAuLi9iaW4vCisrVEFSR0VUID0gcW1ha2UyCisgCisgT0JKRUNUU19ESVIgPSAuCisgTU9DX0RJUiA9IC4KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWI4YzEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBlMTI5ZGMwZDZjZGU2OWRkMTVkMTgzNmM0MTExZTA1MjZmYzI5MTYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjMzOjQ5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMjFdIHFtYWtlOiBmaXggc291cmNlIGZpbGUgcmVmZXJlbmNlcyBpbiBxbWFrZS5wcmkKKworRml4IGR1cGxpY2F0ZSBlbnRyaWVzIGluIFNPVVJDRVMgYW5kIEhFQURFUlMsIGFuZCBmaXggdGhlIHNvdXJjZSBmaWxlCitsaXN0IGZvciB0aGUgc3BsaXQgb2YgcWxvY2FsZS5jcHAuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHFtYWtlL3FtYWtlLnByaSB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcW1ha2UvcW1ha2UucHJpIGIvcW1ha2UvcW1ha2UucHJpCitpbmRleCAzMWY2N2Y0Li45MDgxNjY5IDEwMDY0NAorLS0tIGEvcW1ha2UvcW1ha2UucHJpCisrKysgYi9xbWFrZS9xbWFrZS5wcmkKK0BAIC0yMiw4ICsyMiw3IEBAIFNPVVJDRVMgKz0gcHJvamVjdC5jcHAgcHJvcGVydHkuY3BwIG1haW4uY3BwIGdlbmVyYXRvcnMvbWFrZWZpbGUuY3BwIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvc3ltYmlhbi9pbml0cHJvamVjdGRlcGxveV9zeW1iaWFuLmNwcCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuY3BwIFwKKyAgICAgICAgICAgIHdpbmRvd3MvcmVnaXN0cnkuY3BwIFwKKy0gICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3QuY3BwIFwKKy0gICAgICAgICAgIGdlbmVyYXRvcnMvaW50ZWdyaXR5L2didWlsZC5jcHAKKysgICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3QuY3BwCisgCisgSEVBREVSUyArPSBwcm9qZWN0LmggcHJvcGVydHkuaCBnZW5lcmF0b3JzL21ha2VmaWxlLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy91bml4L3VuaXhtYWtlLmggbWV0YS5oIG9wdGlvbi5oIGNhY2hla2V5cy5oIFwKK0BAIC00MCw4ICszOSw3IEBAIEhFQURFUlMgKz0gcHJvamVjdC5oIHByb3BlcnR5LmggZ2VuZXJhdG9ycy9tYWtlZmlsZS5oIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvc3ltYmlhbi9pbml0cHJvamVjdGRlcGxveV9zeW1iaWFuLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmggXAorICAgICAgICAgICAgd2luZG93cy9yZWdpc3RyeV9wLmggXAorLSAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdF9wLmggXAorLSAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmgKKysgICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3RfcC5oCisgCisgY29udGFpbnMoUVRfRURJVElPTiwgT3BlblNvdXJjZSkgeworICAgIERFRklORVMgKz0gUU1BS0VfT1BFTlNPVVJDRV9FRElUSU9OCitAQCAtNzIsNiArNzAsOCBAQCBib290c3RyYXAgeyAjUXQgY29kZQorICAgICAgICAgcWxpc3QuY3BwIFwKKyAgICAgICAgIHFsaW5rZWRsaXN0LmNwcCBcCisgICAgICAgICBxbG9jYWxlLmNwcCBcCisrICAgICAgICBxbG9jYWxlX3Rvb2xzLmNwcCBcCisrICAgICAgICBxbG9jYWxlX3VuaXguY3BwIFwKKyAgICAgICAgIHFtYWxsb2MuY3BwIFwKKyAgICAgICAgIHFtYXAuY3BwIFwKKyAgICAgICAgIHFtZXRhdHlwZS5jcHAgXAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEwLWNvbmZpZ3VyZS1IYWNrLXRvLW5vdC11c2UtdGhlLXBnX2NvbmZpZy1vZi10aGUtaG9zdC0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEwLWNvbmZpZ3VyZS1IYWNrLXRvLW5vdC11c2UtdGhlLXBnX2NvbmZpZy1vZi10aGUtaG9zdC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2YTBiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDQ4ODg3OTFkMTg5OWY3ODFhZjcxMGRkODgxMzg4N2RlYTUyZmRhNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb2xnZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozNjozOCArMDIwMAorU3ViamVjdDogW1BBVENIIDEwLzIxXSBjb25maWd1cmU6IEhhY2sgdG8gbm90IHVzZSB0aGUgcGdfY29uZmlnIG9mIHRoZSBob3N0Cisgc3lzdGVtIHdoaWNoIHdpbGwgYWRkIC91c3IvaW5jbHVkZQorCitwZ19jb25maWcgaXMgYSBuYXRpdmUgYmluYXJ5IHNvIHVzaW5nIHRoYXQgd2hlbiBjcm9zcyBjb21waWxpbmcKK3dpbGwgYWx3YXlzIGZhaWwuICBUaGUgY29tbWVudGVkIG91dCBmaXggd291bGQgZG8sIGJ1dCBmb3IgT0UKK291ciAtcGxhdGZvcm0gYW5kIC14cGxhdGZvcm0gaXMgdGhlIHNhbWUgc28gd2UgYXJlIGFjdHVhbGx5IG5vdAorcmVhbGx5IGNyb3NzIGNvbXBpbGluZy4gSnVzdCBjb21tZW50IG91dCB0aGUgdGVzdCwgd2UgYXJlIHBhc3NpbmcKK3RoZSBsb2NhdGlvbiB0byB0aGUgcG9zdGdyZXMgaGVhZGVycyBhbmQgaWYgdGhleSBhcmUgb2theSB3ZQord2lsbCBwYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcGRhdGUgZm9yIHF0IDQuOC43LgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkYjRkMDQ0Li4zNWE4ZmU3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC01NTc0LDEwICs1NTc0LDEwIEBACisgICAgICAgICAgICAgaWYgWyAiJENGR19TUUxfcHNxbCIgIT0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgIFsgLXogIiRDRkdfUFNRTF9DT05GSUciIF0gJiYgQ0ZHX1BTUUxfQ09ORklHPWAiJFdISUNIIiBwZ19jb25maWdgCisgICAgICAgICAgICAgICAgICMgQmUgY2FyZWZ1bCBub3QgdG8gdXNlIG5hdGl2ZSBwZ19jb25maWcgd2hlbiBjcm9zcyBidWlsZGluZy4KKy0gICAgICAgICAgICAgICAgaWYgWyAiJFhQTEFURk9STV9NSU5HVyIgIT0gInllcyIgXSAmJiBbIC14ICIkQ0ZHX1BTUUxfQ09ORklHIiBdOyB0aGVuCistICAgICAgICAgICAgICAgICAgICBRVF9DRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWluY2x1ZGVkaXIgMj4vZGV2L251bGxgCistICAgICAgICAgICAgICAgICAgICBRVF9MRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWxpYmRpciAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICAgICAgZmkKKysjICAgICAgICAgICAgICAgIGlmIFsgIiRYUExBVEZPUk1fTUlOR1ciICE9ICJ5ZXMiIF0gJiYgWyAteCAiJENGR19QU1FMX0NPTkZJRyIgXTsgdGhlbgorKyMgICAgICAgICAgICAgICAgICAgIFFUX0NGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0taW5jbHVkZWRpciAyPi9kZXYvbnVsbGAKKysjICAgICAgICAgICAgICAgICAgICBRVF9MRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWxpYmRpciAyPi9kZXYvbnVsbGAKKysjICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIFsgLXogIiRRVF9DRkxBR1NfUFNRTCIgXSB8fCBRVF9DRkxBR1NfUFNRTD0iLUkkUVRfQ0ZMQUdTX1BTUUwiCisgICAgICAgICAgICAgICAgIFsgLXogIiRRVF9MRkxBR1NfUFNRTCIgXSB8fCBRVF9MRkxBR1NfUFNRTD0iLUwkUVRfTEZMQUdTX1BTUUwiCisgICAgICAgICAgICAgICAgICMgQnV0LCByZXNwZWN0IFBTUUxfTElCUyBpZiBzZXQKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMS1mcmVldHlwZS1ob3N0LWluY2x1ZGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMS1mcmVldHlwZS1ob3N0LWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODc5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSAzZmNmZmE3OWU2YTVmMDQ0OGNiZmUyYmIzM2ZlMTIxOGY1ZGFlNjFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorRGF0ZTogTW9uLCA0IEp1biAyMDA3IDE0OjQ4OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMjFdIGZyZWV0eXBlIGhvc3QgaW5jbHVkZXMKKworSG9zdCBpbmNsdWRlIHBhdGggc2hvdWxkIG5vdCBiZSB1c2VkIGluIGNyb3NzIGNvbXBpbGluZyBjYXNlLgorCitQb3J0ZWQgZnJvbSBPRSBieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkgYi9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkKK2luZGV4IDdlZjFjZjkuLmIzNjJmY2QgMTAwNjQ0CistLS0gYS9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkKKysrKyBiL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaQorQEAgLTEsNSArMSw1IEBACisgIWNyb3NzX2NvbXBpbGUgeworLSAgICBUUllfSU5DTFVERVBBVEhTID0gL2luY2x1ZGUgL3Vzci9pbmNsdWRlICQkUU1BS0VfSU5DRElSICQkUU1BS0VfSU5DRElSX1gxMSAkJElOQ0xVREVQQVRICisrICAgIFRSWV9JTkNMVURFUEFUSFMgPSAkJFFNQUtFX0lOQ0RJUiAkJFFNQUtFX0lOQ0RJUl9YMTEgJCRJTkNMVURFUEFUSAorICAgICAjIExTQiBkb2Vzbid0IGFsbG93IHVzaW5nIGhlYWRlcnMgZnJvbSAvaW5jbHVkZSBvciAvdXNyL2luY2x1ZGUKKyAgICAgbGludXgtbHNiLWcrKzpUUllfSU5DTFVERVBBVEhTID0gJCRRTUFLRV9JTkNESVIgJCRRTUFLRV9JTkNESVJfWDExICQkSU5DTFVERVBBVEgKKyAgICAgZm9yKHAsIFRSWV9JTkNMVURFUEFUSFMpIHsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMi1BZGQtMmJwcC1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMi1BZGQtMmJwcC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNDExZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwzMTggQEAKK0Zyb20gODc0NDI3M2ZjNDUyZWI1NGJiZWViN2QxNTgyMzAwOWNlOTI2YzZmYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KZXJlbXk9MjBMYWluPUMzPUE5Pz0gPGplcmVteS5sYWluZUBtNHgub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozOToyMSArMDIwMAorU3ViamVjdDogW1BBVENIIDEyLzIxXSBBZGQgMmJwcCBzdXBwb3J0CisKK1N1Ym1pdHRlZCB1cHN0cmVhbSBidXQgcmVqZWN0ZWQgYXMgYmVpbmcgIm91dCBvZiBzY29wZSI6CitodHRwczovL2J1Z3JlcG9ydHMucXQtcHJvamVjdC5vcmcvYnJvd3NlL1FUQlVHLTM0NjgKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCisgc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAgICAgICAgIHwgMjExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwIHwgICA0ICstCisgMyBmaWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMzVhOGZlNy4uNzljMWM3YiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzA2Myw2ICs3MDYzLDcgQEAgaWYgWyAiJENGR19RV1NfREVQVEhTIiA9ICJwcm9tcHRlZCIgLWEgIiRQUk9NUFRfRk9SX0RFUFRIUyIgPSAieWVzIiBdOyB0aGVuCisgICAgIGVjaG8gIkNob29zZSBwaXhlbC1kZXB0aHMgdG8gc3VwcG9ydDoiCisgICAgIGVjaG8KKyAgICAgZWNobyAiICAgMS4gMWJwcCwgYmxhY2svd2hpdGUiCisrICAgIGVjaG8gIiAgIDIuIDJicHAsIGdyYXlzY2FsZSIKKyAgICAgZWNobyAiICAgNC4gNGJwcCwgZ3JheXNjYWxlIgorICAgICBlY2hvICIgICA4LiA4YnBwLCBwYWxldHRlZCIKKyAgICAgZWNobyAiICAxMi4gMTJicHAsIHJnYiA0LTQtNCIKK0BAIC03MDgxLDExICs3MDgyLDExIEBAIGlmIFsgIiRDRkdfUVdTX0RFUFRIUyIgPSAicHJvbXB0ZWQiIC1hICIkUFJPTVBUX0ZPUl9ERVBUSFMiID0gInllcyIgXTsgdGhlbgorIGZpCisgaWYgWyAtbiAiJENGR19RV1NfREVQVEhTIiAtYSAiJFBMQVRGT1JNX1FXUyIgPSAieWVzIiBdOyB0aGVuCisgICAgIGlmIFsgIiRDRkdfUVdTX0RFUFRIUyIgPSAiYWxsIiBdOyB0aGVuCistICAgICAgICBDRkdfUVdTX0RFUFRIUz0iMSA0IDggMTIgMTUgMTYgMTggMjQgMzIgZ2VuZXJpYyIKKysgICAgICAgIENGR19RV1NfREVQVEhTPSIxIDIgNCA4IDEyIDE1IDE2IDE4IDI0IDMyIGdlbmVyaWMiCisgICAgIGZpCisgICAgIGZvciBEIGluIGBlY2hvICIkQ0ZHX1FXU19ERVBUSFMiIHwgc2VkIC1lICdzLywvIC9nJ2A7IGRvCisgCWNhc2UgJEQgaW4KKy0JICAgIDF8NHw4fDEyfDE1fDE2fDE4fDI0fDMyKSBRQ09ORklHX0ZMQUdTPSIkUUNPTkZJR19GTEFHUyBRVF9RV1NfREVQVEhfJEQiOzsKKysJICAgIDF8Mnw0fDh8MTJ8MTV8MTZ8MTh8MjR8MzIpIFFDT05GSUdfRkxBR1M9IiRRQ09ORklHX0ZMQUdTIFFUX1FXU19ERVBUSF8kRCI7OworIAkgICAgZ2VuZXJpYykgUUNPTkZJR19GTEFHUz0iJFFDT05GSUdfRkxBR1MgUVRfUVdTX0RFUFRIX0dFTkVSSUMiOzsKKyAJZXNhYworICAgICBkb25lCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcAoraW5kZXggYjMwN2JmMi4uODg5NTBiMyAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcAorQEAgLTQ2OSw2ICs0NjksNTggQEAgc3RhdGljIHZvaWQgc29saWRGaWxsX2dyYXk0KFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUNvbG9yICZjb2xvciwKKyB9CisgI2VuZGlmIC8vIFFUX1FXU19ERVBUSF80CisgCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrc3RhdGljIGlubGluZSB2b2lkIHF0X3JlY3RmaWxsX2dyYXkyKHF1aW50OCAqZGVzdCwgcXVpbnQ4IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmlkZSkKKyt7CisrICAgIGNvbnN0IGludCBwaXhlbHNQZXJCeXRlID0gNDsKKysgICAgY29uc3QgaW50IGFsaWduV2lkdGggPSBxTWluKHdpZHRoLCAoNCAtICh4ICYgMykpICYgMyk7CisrICAgIGNvbnN0IGludCBkb0FsaWduID0gKGFsaWduV2lkdGggPiAwID8gMSA6IDApOworKyAgICBjb25zdCBpbnQgYWxpZ25TdGFydCA9IHBpeGVsc1BlckJ5dGUgLSAxIC0gKHggJiAzKTsKKysgICAgY29uc3QgaW50IGFsaWduU3RvcCA9IGFsaWduU3RhcnQgLSAoYWxpZ25XaWR0aCAtIDEpOworKyAgICBjb25zdCBxdWludDggYWxpZ25NYXNrID0gKCgxIDw8ICgyICogYWxpZ25XaWR0aCkpIC0gMSkgPDwgKDIgKiBhbGlnblN0b3ApOworKyAgICBjb25zdCBpbnQgdGFpbFdpZHRoID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgJiAzOworKyAgICBjb25zdCBpbnQgZG9UYWlsID0gKHRhaWxXaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IHF1aW50OCB0YWlsTWFzayA9ICgxIDw8ICgyICogKHBpeGVsc1BlckJ5dGUgLSB0YWlsV2lkdGgpKSkgLSAxOworKyAgICBjb25zdCBpbnQgd2lkdGg4ID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgLyBwaXhlbHNQZXJCeXRlOworKworKyAgICBkZXN0ICs9IHkgKiBzdHJpZGUgKyB4IC8gcGl4ZWxzUGVyQnl0ZTsKKysgICAgc3RyaWRlIC09IChkb0FsaWduICsgd2lkdGg4KTsKKysKKysgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgeworKyAgICAgICAgaWYgKGRvQWxpZ24pIHsKKysgICAgICAgICAgICAqZGVzdCA9ICgqZGVzdCAmIH5hbGlnbk1hc2spIHwgKHZhbHVlICYgYWxpZ25NYXNrKTsKKysgICAgICAgICAgICArK2Rlc3Q7CisrICAgICAgICB9CisrICAgICAgICBpZiAod2lkdGg4KSB7CisrICAgICAgICAgICAgcXRfbWVtZmlsbDxxdWludDg+KGRlc3QsIHZhbHVlLCB3aWR0aDgpOworKyAgICAgICAgICAgIGRlc3QgKz0gd2lkdGg4OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRvVGFpbCkKKysgICAgICAgICAgICAqZGVzdCA9ICgqZGVzdCAmIHRhaWxNYXNrKSB8ICh2YWx1ZSAmIH50YWlsTWFzayk7CisrICAgICAgICBkZXN0ICs9IHN0cmlkZTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBzb2xpZEZpbGxfZ3JheTIoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRQ29sb3IgJmNvbG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVnaW9uICZyZWdpb24pCisreworKyAgICBxdWludDggKmRlc3QgPSByZWludGVycHJldF9jYXN0PHF1aW50OCo+KHNjcmVlbi0+YmFzZSgpKTsKKysgICAgY29uc3QgcXVpbnQ4IGMgPSBxR3JheShjb2xvci5yZ2JhKCkpID4+IDY7CisrICAgIGNvbnN0IHF1aW50OCBjOCA9IChjIDw8IDYpIHwgKGMgPDwgNCkgfCAoYyA8PCAyKSB8IGM7CisrCisrICAgIGNvbnN0IGludCBzdHJpZGUgPSBzY3JlZW4tPmxpbmVzdGVwKCk7CisrICAgIGNvbnN0IFFWZWN0b3I8UVJlY3Q+IHJlY3RzID0gcmVnaW9uLnJlY3RzKCk7CisrCisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsKKysgICAgICAgIGNvbnN0IFFSZWN0IHIgPSByZWN0cy5hdChpKTsKKysgICAgICAgIHF0X3JlY3RmaWxsX2dyYXkyKGRlc3QsIGM4LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSk7CisrICAgIH0KKyt9CisrI2VuZGlmIC8vIFFUX1FXU19ERVBUSF8yCisrCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgc3RhdGljIGlubGluZSB2b2lkIHF0X3JlY3RmaWxsX21vbm8ocXVpbnQ4ICpkZXN0LCBxdWludDggdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCitAQCAtNTc2LDYgKzYyOCwxMSBAQCB2b2lkIHF0X3NvbGlkRmlsbF9zZXR1cChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFDb2xvciAmY29sb3IsCisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5zb2xpZEZpbGwgPSBzb2xpZEZpbGxfZ3JheTQ7CisgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysgICAgY2FzZSAyOgorKyAgICAgICAgc2NyZWVuLT5kX3B0ci0+c29saWRGaWxsID0gc29saWRGaWxsX2dyYXkyOworKyAgICAgICAgYnJlYWs7CisrI2VuZGlmCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgICAgIGNhc2UgMToKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPnNvbGlkRmlsbCA9IHNvbGlkRmlsbF9tb25vOworQEAgLTEwMDYsNiArMTA2MywxNDkgQEAgc3RhdGljIHZvaWQgYmxpdF80KFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUltYWdlICZpbWFnZSwKKyB9CisgI2VuZGlmIC8vIFFUX1FXU19ERVBUSF80CisgCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrCisrc3RydWN0IHFncmF5MiB7IHF1aW50OCBkdW1teTsgfSBRX1BBQ0tFRDsKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgU1JDPgorK3N0YXRpYyBpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKFNSQyBjb2xvcik7CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MzIgY29sb3IpCisreworKyAgICByZXR1cm4gcUdyYXkoY29sb3IpID4+IDY7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihxdWludDE2IGNvbG9yKQorK3sKKysgICAgY29uc3QgaW50IHIgPSAoY29sb3IgJiAweGY4MDApID4+IDExOworKyAgICBjb25zdCBpbnQgZyA9IChjb2xvciAmIDB4MDdlMCkgPj4gNjsgLy8gb25seSBrZWVwIDUgYml0CisrICAgIGNvbnN0IGludCBiID0gKGNvbG9yICYgMHgwMDFmKTsKKysgICAgcmV0dXJuIChyICogMTEgKyBnICogMTYgKyBiICogNSkgPj4gODsKKyt9CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHFyZ2I0NDQgY29sb3IpCisreworKyAgICByZXR1cm4gcXRfY29udmVydFRvR3JheTIocXVpbnQzMihjb2xvcikpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocWFyZ2I0NDQ0IGNvbG9yKQorK3sKKysgICAgcmV0dXJuIHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MzIoY29sb3IpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFNSQz4KKytzdGF0aWMgaW5saW5lIHZvaWQgcXRfcmVjdGNvbnZlcnRfZ3JheTIocWdyYXkyICpkZXN0MiwgY29uc3QgU1JDICpzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgY29uc3QgaW50IHBpeGVsc1BlckJ5dGUgPSA0OworKyAgICBxdWludDggKmRlc3Q4ID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDgqPihkZXN0MikKKysgICAgICAgICAgICAgICAgICAgICsgeSAqIGRzdFN0cmlkZSArIHggLyBwaXhlbHNQZXJCeXRlOworKyAgICBjb25zdCBpbnQgYWxpZ25XaWR0aCA9IHFNaW4od2lkdGgsICg0IC0gKHggJiAzKSkgJiAzKTsKKysgICAgY29uc3QgaW50IGRvQWxpZ24gPSAoYWxpZ25XaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IGludCBhbGlnblN0YXJ0ID0gcGl4ZWxzUGVyQnl0ZSAtIDEgLSAoeCAmIDMpOworKyAgICBjb25zdCBpbnQgYWxpZ25TdG9wID0gYWxpZ25TdGFydCAtIChhbGlnbldpZHRoIC0gMSk7CisrICAgIGNvbnN0IHF1aW50OCBhbGlnbk1hc2sgPSAoKDEgPDwgKDIgKiBhbGlnbldpZHRoKSkgLSAxKSA8PCAoMiAqIGFsaWduU3RvcCk7CisrICAgIGNvbnN0IGludCB0YWlsV2lkdGggPSAod2lkdGggLSBhbGlnbldpZHRoKSAmIDM7CisrICAgIGNvbnN0IGludCBkb1RhaWwgPSAodGFpbFdpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgcXVpbnQ4IHRhaWxNYXNrID0gKDEgPDwgKDIgKiAocGl4ZWxzUGVyQnl0ZSAtIHRhaWxXaWR0aCkpKSAtIDE7CisrICAgIGNvbnN0IGludCB3aWR0aDggPSAod2lkdGggLSBhbGlnbldpZHRoKSAvIHBpeGVsc1BlckJ5dGU7CisrCisrICAgIHNyY1N0cmlkZSA9IHNyY1N0cmlkZSAvIHNpemVvZihTUkMpIC0gKHdpZHRoOCAqIHBpeGVsc1BlckJ5dGUgKyBhbGlnbldpZHRoKTsKKysgICAgZHN0U3RyaWRlIC09ICh3aWR0aDggKyBkb0FsaWduKTsKKysKKysgICAgZm9yIChpbnQgaiA9IDA7ICBqIDwgaGVpZ2h0OyArK2opIHsKKysgICAgICAgIGlmIChkb0FsaWduKSB7CisrICAgICAgICAgICAgcXVpbnQ4IGQgPSAqZGVzdDggJiB+YWxpZ25NYXNrOworKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBhbGlnblN0YXJ0OyBpID49IGFsaWduU3RvcDsgLS1pKQorKyAgICAgICAgICAgICAgICBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oKnNyYysrKSA8PCAoMiAqIGkpOworKyAgICAgICAgICAgICpkZXN0OCsrID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg4OyArK2kpIHsKKysgICAgICAgICAgICAqZGVzdDggPSAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMF0pIDw8IDYpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMV0pIDw8IDQpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMl0pIDw8IDIpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbM10pKTsKKysgICAgICAgICAgICBzcmMgKz0gNDsKKysgICAgICAgICAgICArK2Rlc3Q4OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRvVGFpbCkgeworKyAgICAgICAgICAgIHF1aW50OCBkID0gKmRlc3Q4ICYgdGFpbE1hc2s7CisrICAgICAgICAgICAgc3dpdGNoICh0YWlsV2lkdGgpIHsKKysgICAgICAgICAgICBjYXNlIDM6IGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMl0pIDw8IDI7CisrICAgICAgICAgICAgY2FzZSAyOiBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzFdKSA8PCA0OworKyAgICAgICAgICAgIGNhc2UgMTogZCB8PSBxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1swXSkgPDwgNjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgKmRlc3Q4ID0gZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGRlc3Q4ICs9IGRzdFN0cmlkZTsKKysgICAgICAgIHNyYyArPSBzcmNTdHJpZGU7CisrICAgIH0KKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcXVpbnQzMiAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgcXRfcmVjdGNvbnZlcnRfZ3JheTI8cXVpbnQzMj4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3RlbXBsYXRlIDw+Cisrdm9pZCBxdF9yZWN0Y29udmVydChxZ3JheTIgKmRlc3QsIGNvbnN0IHF1aW50MTYgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHF1aW50MTY+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0U3RyaWRlLCBzcmNTdHJpZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxcmdiNDQ0ICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxcmdiNDQ0PihkZXN0LCBzcmMsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcWFyZ2I0NDQ0ICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxYXJnYjQ0NDQ+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3N0YXRpYyB2b2lkIGJsaXRfMihRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFJbWFnZSAmaW1hZ2UsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludCAmdG9wTGVmdCwgY29uc3QgUVJlZ2lvbiAmcmVnaW9uKQorK3sKKysgICAgc3dpdGNoIChpbWFnZS5mb3JtYXQoKSkgeworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHF1aW50MzI+KHNjcmVlbiwgaW1hZ2UsIHRvcExlZnQsIHJlZ2lvbik7CisrICAgICAgICByZXR1cm47CisrICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCMTY6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXVpbnQxNj4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0I0NDQ6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXJnYjQ0ND4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9BUkdCNDQ0NF9QcmVtdWx0aXBsaWVkOgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHFhcmdiNDQ0ND4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIHFDcml0aWNhbCgiYmxpdF8yKCk6IEltYWdlIGZvcm1hdCAlZCBub3Qgc3VwcG9ydGVkISIsIGltYWdlLmZvcm1hdCgpKTsKKysgICAgfQorK30KKysjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzIKKysKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAKKyBzdHJ1Y3QgcW1vbm8geyBxdWludDggZHVtbXk7IH0gUV9QQUNLRUQ7CitAQCAtMTI1OSw2ICsxNDU5LDExIEBAIHZvaWQgcXRfYmxpdF9zZXR1cChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFJbWFnZSAmaW1hZ2UsCisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5ibGl0ID0gYmxpdF80OworICAgICAgICAgYnJlYWs7CisgI2VuZGlmCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrICAgIGNhc2UgMjoKKysgICAgICAgIHNjcmVlbi0+ZF9wdHItPmJsaXQgPSBibGl0XzI7CisrICAgICAgICBicmVhazsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAgICAgY2FzZSAxOgorICAgICAgICAgc2NyZWVuLT5kX3B0ci0+YmxpdCA9IGJsaXRfMTsKK0BAIC0yMTQ2LDYgKzIzNTEsOCBAQCBpbnQgUVNjcmVlbjo6YWxsb2ModW5zaWduZWQgaW50IHIsdW5zaWduZWQgaW50IGcsdW5zaWduZWQgaW50IGIpCisgICAgICAgICB9CisgICAgIH0gZWxzZSBpZiAoZCA9PSA0KSB7CisgICAgICAgICByZXQgPSBxR3JheShyLCBnLCBiKSA+PiA0OworKyAgICB9IGVsc2UgaWYgKGQgPT0gMikgeworKyAgICAgICAgcmV0ID0gcUdyYXkociwgZywgYikgPj4gNjsKKyAgICAgfSBlbHNlIGlmIChkID09IDEpIHsKKyAgICAgICAgIHJldCA9IHFHcmF5KHIsIGcsIGIpID49IDEyODsKKyAgICAgfSBlbHNlIHsKK0BAIC0yMjE2LDYgKzI0MjMsMTAgQEAgYm9vbCBRU2NyZWVuOjpzdXBwb3J0c0RlcHRoKGludCBkKSBjb25zdAorICAgICB9IGVsc2UgaWYoZD09MSkgeworICAgICAgICAgcmV0dXJuIHRydWU7CisgI2VuZGlmCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrICAgIH0gZWxzZSBpZihkPT0yKSB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzQKKyAgICAgfSBlbHNlIGlmKGQ9PTQpIHsKKyAgICAgICAgIHJldHVybiB0cnVlOworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcAoraW5kZXggNmYzY2FhZC4uMTQxNTllZSAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwCitAQCAtNDY2LDggKzQ2Niw4IEBAIGJvb2wgUUxpbnV4RmJTY3JlZW46OmNvbm5lY3QoY29uc3QgUVN0cmluZyAmZGlzcGxheVNwZWMpCisgICAgICAgICBzZXR1cE9mZlNjcmVlbigpOworIAorICAgICAvLyBOb3cgcmVhZCBpbiBwYWxldHRlCistICAgIGlmKCh2aW5mby5iaXRzX3Blcl9waXhlbD09OCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT00KSkgeworLSAgICAgICAgc2NyZWVuY29scz0gKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT04KSA/IDI1NiA6IDE2OworKyAgICBpZigodmluZm8uYml0c19wZXJfcGl4ZWw9PTgpIHx8ICh2aW5mby5iaXRzX3Blcl9waXhlbD09NCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT0yKSkgeworKyAgICAgICAgc2NyZWVuY29scz0gMSA8PCB2aW5mby5iaXRzX3Blcl9waXhlbDsKKyAgICAgICAgIGludCBsb29wYzsKKyAgICAgICAgIDo6ZmJfY21hcCBzdGFydGNtYXA7CisgICAgICAgICBzdGFydGNtYXAuc3RhcnQ9MDsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjJjZGFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSA1NDkzNDJmYTM4MGVkMmE5YWQ0MWJlM2QwNGVlMmYwNTg1ZjZhNDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQxOjMyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMjFdIGNvbmZpZ3VyZTogYWRkICItY3Jvc3NhcmNoIiBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBkYXRlIGZvciBxdCA0LjguNworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNGViNGEzZC4uYTRkYWNlYyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMTE2MCw3ICsxMTYwLDcgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICBzaGlmdAorICAgICAgICAgVkFMPSQxCisgICAgICAgICA7OworLSAgICAtcHJlZml4fC1kb2NkaXJ8LWhlYWRlcmRpcnwtcGx1Z2luZGlyfC1pbXBvcnRkaXJ8LWRhdGFkaXJ8LWxpYmRpcnwtYmluZGlyfC10cmFuc2xhdGlvbmRpcnwtc3lzY29uZmRpcnwtZXhhbXBsZXNkaXJ8LWRlbW9zZGlyfC1kZXB0aHN8LW1ha2V8LW5vbWFrZXwtcGxhdGZvcm18LXhwbGF0Zm9ybXwtZGV2aWNlLW9wdGlvbnwtYnVpbGRrZXl8LXNka3wtYXJjaHwtaG9zdC1hcmNofC1teXNxbF9jb25maWd8LXBzcWxfY29uZmlnfC1zeXNyb290KQorKyAgICAtcHJlZml4fC1kb2NkaXJ8LWhlYWRlcmRpcnwtcGx1Z2luZGlyfC1pbXBvcnRkaXJ8LWRhdGFkaXJ8LWxpYmRpcnwtYmluZGlyfC10cmFuc2xhdGlvbmRpcnwtc3lzY29uZmRpcnwtZXhhbXBsZXNkaXJ8LWRlbW9zZGlyfC1kZXB0aHN8LW1ha2V8LW5vbWFrZXwtcGxhdGZvcm18LXhwbGF0Zm9ybXwtZGV2aWNlLW9wdGlvbnwtYnVpbGRrZXl8LXNka3wtYXJjaHwtaG9zdC1hcmNofC1teXNxbF9jb25maWd8LXBzcWxfY29uZmlnfC1zeXNyb290fC1jcm9zc2FyY2gpCisgICAgICAgICBWQVI9YGVjaG8gJDEgfCBzZWQgInMsXi1cKC4qXCksXDEsImAKKyAgICAgICAgIHNoaWZ0CisgICAgICAgICBWQUw9IiQxIgorQEAgLTE3MTksNiArMTcxOSw5IEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgREVWX1ZBTD1gZWNobyAkVkFMIHwgc2VkICJzLF4uKj1cKC4qXCksXDEsImAKKyAgICAgICAgIERldmljZVZhciBzZXQgJERFVl9WQVIgJERFVl9WQUwKKyAgICAgICAgIDs7CisrICAgIGNyb3NzYXJjaCkKKysgICAgICAgIENST1NTQVJDSD0iJFZBTCIKKysgICAgICAgIDs7CisgICAgIGRlYnVnLWFuZC1yZWxlYXNlKQorICAgICAgICAgaWYgWyAiJFZBTCIgPSAieWVzIiBdIHx8IFsgIiRWQUwiID0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgQ0ZHX0RFQlVHX1JFTEVBU0U9IiRWQUwiCitAQCAtMzMzMyw2ICszMzM2LDggQEAgYXJtKikKKyAgICAgOzsKKyBlc2FjCisgCisrQ0ZHX0FSQ0g9IiRDUk9TU0FSQ0giCisrCisgaWYgWyAtZCAiJHJlbHBhdGgvc3JjL2NvcmVsaWIvYXJjaC8kQ0ZHX0FSQ0giIF07IHRoZW4KKyAgICAgaWYgWyAiJE9QVF9WRVJCT1NFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgIGVjaG8gIiAgICAnJENGR19BUkNIJyBpcyBzdXBwb3J0ZWQiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3MjRhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMjFhZjhmNmQyMWIyOGE1MzA0MWFmZmIxMWI1OGQ2MzE2MDIzZmE5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQ1OjEwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMjFdIHRyYW5zbGF0aW9uczogZml4IHBob255IHRyYW5zbGF0aW9uIGxpbmtpbmcgZXJyb3IKKworICB8IC4uLi91c3IvbGliL2NydDEubzogSW4gZnVuY3Rpb24gYF9zdGFydCc6CisgIHwgLi4uLy4uL3N5c2RlcHMvaTM4Ni9lbGYvc3RhcnQuUzoxMTU6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG1haW4nCisgIHwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHRyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvIGIvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KK2luZGV4IGRjOTliZWIuLjBkOTg4MjkgMTAwNjQ0CistLS0gYS90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworKysrIGIvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KK0BAIC0xMDEsNyArMTAxLDcgQEAgdXBkYXRlcW0ubmFtZSA9IExSRUxFQVNFICR7UU1BS0VfRklMRV9JTn0KKyB1cGRhdGVxbS5DT05GSUcgKz0gbm9fbGluaworIFFNQUtFX0VYVFJBX0NPTVBJTEVSUyArPSB1cGRhdGVxbQorIAorLWlzRW1wdHkodmNwcm9qKSB7CisrIWlzRW1wdHkodmNwcm9qKSB7CisgICAgIFFNQUtFX0xJTksgPSBAOiBJR05PUkUgVEhJUyBMSU5FCisgICAgIE9CSkVDVFNfRElSID0KKyAgICAgd2luMzI6Q09ORklHIC09IGVtYmVkX21hbmlmZXN0X2V4ZQorQEAgLTExMSw3ICsxMTEsNyBAQCBpc0VtcHR5KHZjcHJvaikgeworICAgICBwaG9ueV9zcmMuaW5wdXQgPSBQSE9OWV9ERVBTCisgICAgIHBob255X3NyYy5vdXRwdXQgPSBwaG9ueS5jCisgICAgIHBob255X3NyYy52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfU09VUkNFUworLSAgICBwaG9ueV9zcmMuY29tbWFuZHMgPSBlY2hvIGludCBtYWluKCkgeyByZXR1cm4gMDsgfSA+IHBob255LmMKKysgICAgcGhvbnlfc3JjLmNvbW1hbmRzID0gZWNobyBcImludCBtYWluKCkgeyByZXR1cm4gMDsgfVwiID4gcGhvbnkuYworICAgICBwaG9ueV9zcmMubmFtZSA9IENSRUFURSBwaG9ueS5jCisgICAgIHBob255X3NyYy5DT05GSUcgKz0gY29tYmluZQorICAgICBRTUFLRV9FWFRSQV9DT01QSUxFUlMgKz0gcGhvbnlfc3JjCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTUtY29uZmlndXJlLWFkZC1ub3N0cmlwLWZvci1kZWJ1Zy1wYWNrYWdlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTUtY29uZmlndXJlLWFkZC1ub3N0cmlwLWZvci1kZWJ1Zy1wYWNrYWdlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWRiNDkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gOTI1MGZlZDA4NmE0YThhNjQ1YTk3Mjc2NGE5YmYzNGU0NTY2ZWMyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhdGhpIEJvdWRyYSA8ZmFib0BkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0NjoxNCArMDIwMAorU3ViamVjdDogW1BBVENIIDE1LzIxXSBjb25maWd1cmU6IGFkZCBub3N0cmlwIGZvciBkZWJ1ZyBwYWNrYWdlcworCitRdCBpcyBidWlsdCBpbiByZWxlYXNlIG1vZGUgYW5kIHN0cmlwIGZpbGVzIGJ5IGRlZmF1bHQuCitTZXQgQ09ORklHKz1ub3N0cmlwIHRvIGF2b2lkIHRoZSBzdHJpcHBpbmcgYW5kCitsZXQgZGhfc3RyaXAgZG8gaXQgdG8gZ2VuZXJhdGUgZGVidWcgcGFja2FnZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNzk4M2MzZC4uZDAyODI0YiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzEwLDYgKzcxMCw4IEBAIG1rZGlyIC1wICIkb3V0cGF0aC9jb25maWcudGVzdHMiCisgcm0gLWYgIiRvdXRwYXRoL2NvbmZpZy50ZXN0cy8ucW1ha2UuY2FjaGUiCisgY3AgIiRRTUFLRV9WQVJTX0ZJTEUiICIkb3V0cGF0aC9jb25maWcudGVzdHMvLnFtYWtlLmNhY2hlIgorIAorK1FNYWtlVmFyIGFkZCBDT05GSUcgbm9zdHJpcAorKworIFFNYWtlVmFyIGFkZCBzdHlsZXMgImNkZSBtYWMgbW90aWYgcGxhc3RpcXVlIGNsZWFubG9va3Mgd2luZG93cyIKKyBRTWFrZVZhciBhZGQgZGVjb3JhdGlvbnMgImRlZmF1bHQgd2luZG93cyBzdHlsZWQiCisgUU1ha2VWYXIgYWRkIG1vdXNlLWRyaXZlcnMgInBjIgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljM2RlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDg0MDM2MzRhNzFmMDY3ZWVjNTE0YjZkMjE5M2NmNDFlMjgxZGZmOGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDc6MDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8yMV0gY29uZmlndXJlOiBldmFsIFFNQUtFX0NYWAorCitBbGxvdyBleHBhbnNpb24gb2YgJCguLi4pIHJlZmVyZW5jZXMgaW4gUU1BS0VfQ1hYIChjdXJyZW50bHkgaXRzIHZhbHVlCitpcyAkKE9FX1FNQUtFX0NYWCkpIGluIG9yZGVyIHRvIGFsbG93IGNvbXBpbGVyIHZlcnNpb24gY2hlY2sgdG8gc3VjY2VlZAord2hpY2ggYWxsb3dzIFdlYktpdCB0byBiZSBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK0NvbmZsaWN0czoKKwljb25maWd1cmUKKy0tLQorIGNvbmZpZ3VyZSB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkMDI4MjRiLi44OTFkNmU3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0zNDA5LDcgKzM0MDksOCBAQCBlbHNlCisgICAgIENGR19GUkFNRVdPUks9bm8KKyBmaQorIAorLVFNQUtFX0NPTkZfQ09NUElMRVI9YGdldFhRTWFrZUNvbmYgUU1BS0VfQ1hYYAorK1FNQUtFX0NPTkZfQ09NUElMRVI9YGdldFhRTWFrZUNvbmYgUU1BS0VfQ1hYIHwgc2VkIC1uICdzLyRbKF1cKFswLTlhLXpBLVpfXSpcKVspXS8kXDEvcGcnYAorK1FNQUtFX0NPTkZfQ09NUElMRVI9YGV2YWwgImVjaG8gJFFNQUtFX0NPTkZfQ09NUElMRVIiYAorIFRFU1RfQ09NUElMRVI9IiRDWFgiCisgCisgWyAteiAiJFRFU1RfQ09NUElMRVIiIF0gJiYgVEVTVF9DT01QSUxFUj0kUU1BS0VfQ09ORl9DT01QSUxFUgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE3LWNvbmZpZ3VyZS1lbnN1cmUtd2UtaWRlbnRpZnktdGhlLWNvbXBpbGVyLWFzLWctaW4tY28ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE3LWNvbmZpZ3VyZS1lbnN1cmUtd2UtaWRlbnRpZnktdGhlLWNvbXBpbGVyLWFzLWctaW4tY28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3MTk2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGQyYmI3MDFiNTUxNDAyZjBiZWZkZGQwZTkwNjQyMzU5NmJkYzBkZjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDg6MzcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8yMV0gY29uZmlndXJlOiBlbnN1cmUgd2UgaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGFzIGcrKyBpbgorIGNvbmZpZ3VyZQorCitPdXIgUExBVEZPUk0gaW4gT0UgaXMgJHtUQVJHRVRfT1N9LW9lLWcrKywgYW5kIHByZXZpb3VzbHkgdGhlIGNvbmZpZ3VyZQorc2NyaXB0IHdhcyBpbnRlcnByZXRpbmcgZnJvbSB0aGlzIHRoYXQgdGhlIGNvbXBpbGVyIHdhcyAib2UtZysrIiBhbmQKK3RodXMKK2crKyBzcGVjaWZpYyBjaGVja3Mgd2VyZSBub3QgYmVpbmcgcnVuIHNpbmNlIHRoaXMgc3RyaW5nIGRpZCBub3QgbWF0Y2g7CithbW9uZyBvdGhlciB0aGluZ3MgdGhpcyByZXN1bHRlZCBpbiBhIGNvbXBpbGVyIHZlcnNpb24gY2hlY2sgaW4gdGhlCitRdFdlYktpdCBidWlsZCBjb2RlIG5vdCB3b3JraW5nLCBhbmQgaGVuY2UgdGhlIGZvbGxvd2luZyBlcnJvciBhdCBidWlsZAordGltZToKKworLi93dGYvTnVsbFB0ci5oOjQ4OjE6IGVycm9yOiBpZGVudGlmaWVyICdudWxscHRyJyB3aWxsIGJlY29tZSBhIGtleXdvcmQKK2luIEMrKzB4IFstV2Vycm9yPWMrKzB4LWNvbXBhdF0KKworVGhlIGVhc2llc3QgdGhpbmcgc2luY2Ugb3VyIFBMQVRGT1JNIGlzIGVudGlyZWx5IGFydGlmaWNpYWwgaXMgdG8ganVzdAorZm9yY2UgQ09NUElMRVIgdG8gImcrKyIgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaWYgaXQgaXMgZGV0ZWN0ZWQgYXMKKyJvZS1nKysiLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDg5MWQ2ZTcuLjcwMzE4OTggMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc1OTIsNiArNzU5Miw5IEBAIGVsaWYgWyAiJFhQTEFURk9STSIgIT0gIiRQTEFURk9STSIgXTsgdGhlbgorIGVsc2UKKyAgICAgQ09NUElMRVI9YGVjaG8gJFBMQVRGT1JNIHwgY3V0IC1mIDItIC1kLWAKKyBmaQorK2Nhc2UgJENPTVBJTEVSIGluCisrICAgICpvZS1nKyspIENPTVBJTEVSPSJnKysiIDs7CisrZXNhYworIGlmIFsgIiRDRkdfRVhDRVBUSU9OUyIgPSAidW5zcGVjaWZpZWQiIC1hICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgQ0ZHX0VYQ0VQVElPTlM9bm8KKyBmaQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOC1jb25maWd1cmUtbWFrZS1wdWxzZWF1ZGlvLWEtY29uZmlndXJhYmxlLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWNkZDRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOC1jb25maWd1cmUtbWFrZS1wdWxzZWF1ZGlvLWEtY29uZmlndXJhYmxlLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGQ2ZGMxYTdkNjU5NGQ3ZTM5NTM0NzczMmEzZTU1M2ZjODJjY2FiM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjggRmViIDIwMTIgMTU6MTA6MjQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8yMV0gY29uZmlndXJlOiBtYWtlIHB1bHNlYXVkaW8gYSBjb25maWd1cmFibGUgb3B0aW9uCisKK0FsbG93cyBkaXNhYmxpbmcgcHVsc2VhdWRpbyBzdXBwb3J0IHdpdGhpbiBwaG9ub24gYXQgY29uZmlndXJlIHRpbWUuCisoVGhpcyBpcyB0aGUgUXQgNC44LjAgdmVyc2lvbi4pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3MDMxODk4Li5hNGE0MmYxIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xMTM5LDcgKzExMzksNyBAQCB3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKyAgICAgICAgIFZBTD1ubworICAgICAgICAgOzsKKyAgICAgI1F0IHN0eWxlIHllcyBvcHRpb25zCistICAgIC1pbmNyZW1lbnRhbHwtcXZmYnwtcHJvZmlsZXwtc2hhcmVkfC1zdGF0aWN8LXNtfC14aW5lcmFtYXwteHNoYXBlfC14c3luY3wteGlucHV0fC1lZ2x8LXJlZHVjZS1leHBvcnRzfC1wY2h8LXNlcGFyYXRlLWRlYnVnLWluZm98LXN0bHwtZnJlZXR5cGV8LXhjdXJzb3J8LXhmaXhlc3wteHJhbmRyfC14cmVuZGVyfC1taXRzaG18LWZvbnRjb25maWd8LXhrYnwtbmlzfC1xZGJ1c3wtZGJ1c3wtZGJ1cy1saW5rZWR8LWdsaWJ8LWdzdHJlYW1lcnwtZ3Rrc3R5bGV8LWN1cHN8LWljb252fC1sYXJnZWZpbGV8LWh8LWhlbHB8LXZ8LXZlcmJvc2V8LWRlYnVnfC1yZWxlYXNlfC1mYXN0fC1hY2Nlc3NpYmlsaXR5fC1jb25maXJtLWxpY2Vuc2V8LWdudW1ha2V8LWZyYW1ld29ya3wtcXQzc3VwcG9ydHwtZGVidWctYW5kLXJlbGVhc2V8LWV4Y2VwdGlvbnN8LWNvY29hfC1jYXJib258LXVuaXZlcnNhbHwtaGFyZmJ1enp8LXByZWZpeC1pbnN0YWxsfC1zaWxlbnR8LWFybWZwYXwtb3B0aW1pemVkLXFtYWtlfC1kd2FyZjJ8LXJlZHVjZS1yZWxvY2F0aW9uc3wtc3NlfC1vcGVuc3NsfC1vcGVuc3NsLWxpbmtlZHwtcHRtYWxsb2N8LXhtbHBhdHRlcm5zfC1waG9ub258LXBob25vbi1iYWNrZW5kfC1tdWx0aW1lZGlhfC1hdWRpby1iYWNrZW5kfC1zdmd8LWRlY2xhcmF0aXZlfC1kZWNsYXJhdGl2ZS1kZWJ1Z3wtamF2YXNjcmlwdC1qaXR8LXNjcmlwdHwtc2NyaXB0dG9vbHN8LXJwYXRofC1mb3JjZS1wa2ctY29uZmlnfC1zNjB8LXVzZWRlZmZpbGVzfC1pY3UpCisrICAgIC1pbmNyZW1lbnRhbHwtcXZmYnwtcHJvZmlsZXwtc2hhcmVkfC1zdGF0aWN8LXNtfC14aW5lcmFtYXwteHNoYXBlfC14c3luY3wteGlucHV0fC1lZ2x8LXJlZHVjZS1leHBvcnRzfC1wY2h8LXNlcGFyYXRlLWRlYnVnLWluZm98LXN0bHwtZnJlZXR5cGV8LXhjdXJzb3J8LXhmaXhlc3wteHJhbmRyfC14cmVuZGVyfC1taXRzaG18LWZvbnRjb25maWd8LXhrYnwtbmlzfC1xZGJ1c3wtZGJ1c3wtZGJ1cy1saW5rZWR8LWdsaWJ8LWdzdHJlYW1lcnwtcHVsc2VhdWRpb3wtZ3Rrc3R5bGV8LWN1cHN8LWljb252fC1sYXJnZWZpbGV8LWh8LWhlbHB8LXZ8LXZlcmJvc2V8LWRlYnVnfC1yZWxlYXNlfC1mYXN0fC1hY2Nlc3NpYmlsaXR5fC1jb25maXJtLWxpY2Vuc2V8LWdudW1ha2V8LWZyYW1ld29ya3wtcXQzc3VwcG9ydHwtZGVidWctYW5kLXJlbGVhc2V8LWV4Y2VwdGlvbnN8LWNvY29hfC1jYXJib258LXVuaXZlcnNhbHwtaGFyZmJ1enp8LXByZWZpeC1pbnN0YWxsfC1zaWxlbnR8LWFybWZwYXwtb3B0aW1pemVkLXFtYWtlfC1kd2FyZjJ8LXJlZHVjZS1yZWxvY2F0aW9uc3wtc3NlfC1vcGVuc3NsfC1vcGVuc3NsLWxpbmtlZHwtcHRtYWxsb2N8LXhtbHBhdHRlcm5zfC1waG9ub258LXBob25vbi1iYWNrZW5kfC1tdWx0aW1lZGlhfC1hdWRpby1iYWNrZW5kfC1zdmd8LWRlY2xhcmF0aXZlfC1kZWNsYXJhdGl2ZS1kZWJ1Z3wtamF2YXNjcmlwdC1qaXR8LXNjcmlwdHwtc2NyaXB0dG9vbHN8LXJwYXRofC1mb3JjZS1wa2ctY29uZmlnfC1zNjB8LXVzZWRlZmZpbGVzfC1pY3UpCisgICAgICAgICBWQVI9YGVjaG8gJDEgfCBzZWQgInMsXi1cKC4qXCksXDEsImAKKyAgICAgICAgIFZBTD15ZXMKKyAgICAgICAgIDs7CitAQCAtMjEyMCw2ICsyMTIwLDEzIEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgICAgIFVOS05PV05fT1BUPXllcworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisrICAgIHB1bHNlYXVkaW8pCisrICAgICAgICBpZiBbICIkVkFMIiA9ICJ5ZXMiIF0gfHwgWyAiJFZBTCIgPSAibm8iIF07IHRoZW4KKysgICAgICAgICAgICBDRkdfUFVMU0VBVURJTz0iJFZBTCIKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBVTktOT1dOX09QVD15ZXMKKysgICAgICAgIGZpCisrICAgICAgICA7OworICAgICBndGtzdHlsZSkKKyAgICAgICAgIGlmIFsgIiRWQUwiID0gInllcyIgXSB8fCBbICIkVkFMIiA9ICJubyIgXTsgdGhlbgorICAgICAgICAgICAgIENGR19RR1RLU1RZTEU9IiRWQUwiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTktRml4ZXMtZm9yLWdjYy00LjcuMC1wYXJ0aWN1bGFybHktb24tcWVtdXg4Ni5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTktRml4ZXMtZm9yLWdjYy00LjcuMC1wYXJ0aWN1bGFybHktb24tcWVtdXg4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODNkMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gMWYxZGEyZjI0ZDMwMjhiMjUwZGJjMmU5OGUyYjdlMzc4NjJiMzc3MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo1NDozOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE5LzIxXSBGaXhlcyBmb3IgZ2NjIDQuNy4wLCBwYXJ0aWN1bGFybHkgb24gcWVtdXg4NgorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85MzYzMQorT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTEzODQ4CisKK0J1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTY4CitCdWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzU4NAorCitSUCAyMDEyLzA0LzMwCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAyICstCisgLi4uL3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oICAgfCAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKK2luZGV4IDMyZTQ3Y2EuLmI4ZTczODkgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysrIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKK0BAIC0xMDgwLDcgKzEwODAsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKKyB7CisgICAgIC8vIFJlZiBjdXJyZW50U3R5bGUgaW4gY2FzZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgZGVsZXRlZCB3aGVuIHNldFJlbmRlclN0eWxlKCkgaXMgY2FsbGVkLgorICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1cnJlbnRTdHlsZShyZW5kZXJTdHlsZSgpKTsKKy0gICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpID8gcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCktPnJlbmRlclN0eWxlKCkgOiBmYWxzZTsKKysgICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4ocGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCktPnJlbmRlclN0eWxlKCkpIDogZmFsc2U7CisgICAgIGJvb2wgaGFzRGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKKyAgICAgYm9vbCBoYXNJbmRpcmVjdEFkamFjZW50UnVsZXMgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCitpbmRleCBkNjYwNzVlLi5hYjhmMTExIDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKK0BAIC03NCw3ICs3NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcihEb2N1bWVudCoKKyAgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gYWRvcHRSZWYobmV3IEhUTUxJbWFnZUVsZW1lbnQoaW1nVGFnLCBkb2N1bWVudCkpOworICAgICBpZiAob3B0aW9uYWxXaWR0aCkKKyAgICAgICAgIGltYWdlLT5zZXRXaWR0aCgqb3B0aW9uYWxXaWR0aCk7CistICAgIGlmIChvcHRpb25hbEhlaWdodCA+IDApCisrICAgIGlmIChvcHRpb25hbEhlaWdodCkKKyAgICAgICAgIGltYWdlLT5zZXRIZWlnaHQoKm9wdGlvbmFsSGVpZ2h0KTsKKyAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKKyB9CitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCitpbmRleCA2MDg3ZWMzLi42ZDc0OGY2IDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKK0BAIC0yNSw2ICsyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQgeworIHB1YmxpYzoKKysgICAgdmlydHVhbCB+VGlsZWRCYWNraW5nU3RvcmVDbGllbnQoKSB7IH0KKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpID0gMDsKKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgPSAwOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDIxLWNvbmZpZ3VyZS1tYWtlLXF0NC1uYXRpdmUtd29yay13aXRoLWxvbmctYnVpbGRpbmctcGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDIxLWNvbmZpZ3VyZS1tYWtlLXF0NC1uYXRpdmUtd29yay13aXRoLWxvbmctYnVpbGRpbmctcGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjOTAyMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaApAQCAtMCwwICsxLDk1IEBACitGcm9tIDY3NDJhYzdlYTZmZDFlOWM4MmVjYjUzMDVmODRlNzIxMjQyZjg1N2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDUgRGVjIDIwMTIgMDc6NDg6MTUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8yMV0gY29uZmlndXJlOiBtYWtlIHF0NC1uYXRpdmUgd29yayB3aXRoIGxvbmcgYnVpbGRpbmcKKyBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitSZWZlcmVuY2U6IGh0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMjgyOTIKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgNTIgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggYTRhNDJmMS4uMjM1ODU2MyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDc3OSw4ICs0Nzc5LDggQEAgREVNT1NfUEFUSF9TVFI9YCIkcmVscGF0aC9jb25maWcudGVzdHMvdW5peC9wYWRzdHJpbmciIDI2OCAicXRfZGVtb3BhdGg9JFFUX0lOU1QKKyBUT0RBWT1gZGF0ZSArJVktJW0tJWRgCisgY2F0ID4gIiRvdXRwYXRoL3NyYy9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmNwcC5uZXciIDw8RU9GCisgLyogTGljZW5zZSBJbmZvICovCistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpY2Vuc2VlX3N0ciAgICAgICAgICBbMjU2ICsgMTJdID0gIiRMSUNFTlNFX1VTRVJfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWRfcHJvZHVjdHNfc3RyIFsyNTYgKyAxMl0gPSAiJExJQ0VOU0VfUFJPRFVDVFNfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWVfc3RyICAgICAgICAgIFs1MTIgKyAxMl0gPSAiJExJQ0VOU0VfVVNFUl9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZF9wcm9kdWN0c19zdHIgWzUxMiArIDEyXSA9ICIkTElDRU5TRV9QUk9EVUNUU19TVFIiOworIAorIC8qIEluc3RhbGxhdGlvbiBkYXRlICovCisgc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2luc3RhbGxhdGlvbiAgICAgICAgICBbMTIrMTFdICAgID0gInF0X2luc3RkYXRlPSRUT0RBWSI7CitAQCAtNDgwNSwzNiArNDgwNSwzNiBAQCBpZiBbICEgLXogIiRRVF9IT1NUX1BSRUZJWCIgXTsgdGhlbgorIAorICNpZiBkZWZpbmVkKFFUX0JPT1RTVFJBUFBFRCkgfHwgZGVmaW5lZChRVF9CVUlMRF9RTUFLRSkKKyAvKiBJbnN0YWxsYXRpb24gSW5mbyAqLworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVFBSRUZJWF9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbMjU2ICsgMTJdID0gIiRIT1NURE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUSEVBREVSU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbMjU2ICsgMTJdID0gIiRIT1NUTElCUkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RCSU5BUklFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUUExVR0lOU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUSU1QT1JUU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUREFUQV9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbMjU2ICsgMTJdID0gIiRIT1NUVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RTRVRUSU5HU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRIT1NURVhBTVBMRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVERFTU9TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RQUkVGSVhfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzUxMiArIDEyXSA9ICIkSE9TVERPQ1VNRU5UQVRJT05fUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9oZWFkZXJzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVEhFQURFUlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzUxMiArIDEyXSA9ICIkSE9TVExJQlJBUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NUQklOQVJJRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wbHVnaW5zX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVFBMVUdJTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVElNUE9SVFNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVERBVEFfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV90cmFuc2xhdGlvbnNfcGF0aF9zdHIgWzUxMiArIDEyXSA9ICIkSE9TVFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NUU0VUVElOR1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkSE9TVEVYQU1QTEVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGVtb3NfcGF0aF9zdHIgICAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RERU1PU19QQVRIX1NUUiI7CisgI2Vsc2UgLy8gUVRfQk9PVFNUUkFQUEVECisgRU9GCisgZmkKKyAKKyBjYXQgPj4gIiRvdXRwYXRoL3NyYy9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmNwcC5uZXciIDw8RU9GCisgLyogSW5zdGFsbGF0aW9uIEluZm8gKi8KKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFsyNTYgKyAxMl0gPSAiJFBSRUZJWF9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbMjU2ICsgMTJdID0gIiRET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhFQURFUlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzI1NiArIDEyXSA9ICIkTElCUkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEJJTkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJFBMVUdJTlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSU1QT1JUU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbMjU2ICsgMTJdID0gIiREQVRBX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFsyNTYgKyAxMl0gPSAiJFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRTRVRUSU5HU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRFWEFNUExFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbMjU2ICsgMTJdID0gIiRERU1PU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3ByZWZpeF9wYXRoX3N0ciAgICAgICBbNTEyICsgMTJdID0gIiRQUkVGSVhfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzUxMiArIDEyXSA9ICIkRE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIRUFERVJTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGlicmFyaWVzX3BhdGhfc3RyICAgIFs1MTIgKyAxMl0gPSAiJExJQlJBUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRCSU5BUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRQTFVHSU5TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW1wb3J0c19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJElNUE9SVFNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzUxMiArIDEyXSA9ICIkREFUQV9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbNTEyICsgMTJdID0gIiRUUkFOU0xBVElPTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9zZXR0aW5nc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkU0VUVElOR1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkRVhBTVBMRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzUxMiArIDEyXSA9ICIkREVNT1NfUEFUSF9TVFIiOworIEVPRgorIAorIGlmIFsgISAteiAiJFFUX0hPU1RfUFJFRklYIiBdOyB0aGVuCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI3LXRvb2xzLnByby1kaXNhYmxlLXFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzBhZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI3LXRvb2xzLnByby1kaXNhYmxlLXFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMDQ2MGUyYTVmMTNhYWYwMDgxYzNjOWZlYzg5MjgwMDQ2ODQyZGRiYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAzIEp1bCAyMDEzIDE3OjQ4OjMwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHRvb2xzLnBybzogZGlzYWJsZSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorCitXZSBkb24ndCB3YW50IHRoaXMgZW5hYmxlZCBqdXN0IGJlY2F1c2Ugd2UgaGF2ZSBFR0wgYW5kIE9wZW5HTCBFUyAyLjAKK2VuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHRvb2xzL3Rvb2xzLnBybyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL3Rvb2xzLnBybyBiL3Rvb2xzL3Rvb2xzLnBybworaW5kZXggMGUyNzA1My4uMmQzZjM2ZCAxMDA2NDQKKy0tLSBhL3Rvb2xzL3Rvb2xzLnBybworKysrIGIvdG9vbHMvdG9vbHMucHJvCitAQCAtNDksNCArNDksNCBAQCBRVERJUl9idWlsZDpSRVFVSVJFUyA9ICJjb250YWlucyhRVF9DT05GSUcsIGZ1bGwtY29uZmlnKSIKKyAKKyAhd2luMzI6IWVtYmVkZGVkOiFtYWM6IXN5bWJpYW46Q09ORklHICs9IHgxMQorIAorLXgxMTpjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6Y29udGFpbnMoUVRfQ09ORklHLCBlZ2wpOlNVQkRJUlMgKz0gcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIKKysjeDExOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTpjb250YWlucyhRVF9DT05GSUcsIGVnbCk6U1VCRElSUyArPSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI4LURvbi10LWNyYXNoLW9uLWJyb2tlbi1HSUYtaW1hZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmUyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI4LURvbi10LWNyYXNoLW9uLWJyb2tlbi1HSUYtaW1hZ2VzLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gZjFiNzZjMTI2YzQ3NmMxNTVhZjhjNDA0Yjk3YzQyY2QxYTcwOTMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhcnMgS25vbGwgPGxhcnMua25vbGxAZGlnaWEuY29tPgorRGF0ZTogVGh1LCAyNCBBcHIgMjAxNCAxNTozMzoyNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCBjcmFzaCBvbiBicm9rZW4gR0lGIGltYWdlcworCitCcm9rZW4gR0lGIGltYWdlcyBjb3VsZCBzZXQgaW52YWxpZCB3aWR0aCBhbmQgaGVpZ2h0Cit2YWx1ZXMgaW5zaWRlIHRoZSBpbWFnZSwgbGVhZGluZyB0byBRdCBjcmVhdGluZyBhIG51bGwKK1FJbWFnZSBmb3IgaXQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGFib3J0IGRlY29kaW5nCit0aGUgaW1hZ2UgYW5kIHJldHVybiBhbiBlcnJvci4KKworSW5pdGlhbCBwYXRjaCBieSBSaWNoIE1vb3JlLgorCitCYWNrcG9ydCBvZiBJZDgyYTQwMzZmNDc4YmQ2ZTQ5YzQwMmQ2NTk4ZjU3ZTdlNWJiNWUxZSBmcm9tIFF0IDUKKworVGFzay1udW1iZXI6IFFUQlVHLTM4MzY3CitDaGFuZ2UtSWQ6IEkwNjgwNzQwMDE4YWFhODM1NmQyNjdiN2FmM2YwMWZhYzM2OTczMTJhCitTZWN1cml0eS1hZHZpc29yeTogQ1ZFLTIwMTQtMDE5MAorUmV2aWV3ZWQtYnk6IFJpY2hhcmQgSi4gTW9vcmUgPHJpY2hAa2RlLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIHNyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAgYi9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcAoraW5kZXggMzMyNGYwNC4uNTE5OWRkMyAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwCisrKysgYi9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcAorQEAgLTM1OSw2ICszNTksMTMgQEAgaW50IFFHSUZGb3JtYXQ6OmRlY29kZShRSW1hZ2UgKmltYWdlLCBjb25zdCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGJpdHMsIDAsIGltYWdlLT5ieXRlQ291bnQoKSk7CisgICAgICAgICAgICAgICAgIH0KKyAKKysgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByZXZpb3VzIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBpbWFnZSBmYWlsZWQuIElmIGl0CisrICAgICAgICAgICAgICAgIC8vIGRpZCB0aGVuIHRoZSBpbWFnZSBpcyBicm9rZW4gYW5kIHdlIHNob3VsZCBnaXZlIHVwLgorKyAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzTnVsbCgpKSB7CisrICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IEVycm9yOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgICAgICAgICB9CisrCisgICAgICAgICAgICAgICAgIGRpc3Bvc2VQcmV2aW91cyhpbWFnZSk7CisgICAgICAgICAgICAgICAgIGRpc3Bvc2VkID0gZmFsc2U7CisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMwLWFhcmNoNjRfYXJtNjRfcWF0b21pY19zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGMyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMwLWFhcmNoNjRfYXJtNjRfcWF0b21pY19zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDkxIEBACitGcm9tIDI5NDAxMGI1NjJjOTg0NmJiMmJjNGVlOWM2M2ZmNzhhZGM3YzFmNGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/TGlzYW5kcm89MjBEYW1pPUMzPUExbj0yME5pY2Fub3I9MjBQPUMzPUE5cmV6PTIwTWV5ZXI/PQorIDxwZXJlem1leWVyQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTUgTWFyIDIwMTQgMTU6NDA6NDkgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHFhdG9taWMgc3VwcG9ydCBmb3IgQUFyY2g2NCAoYWthIGFybTY0KS4KKworUGF0Y2ggYnkgTWFyayBTYWx0ZXIgPG1zYWx0ZXJAcmVkaGF0LmNvbT4KK2xpY2Vuc2VkIHVuZGVyIEJTRDoKKworPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NzM1NDg4IzE5NT4KKworVGhpcyBwYXRjaCBpcyBrbm93biB0byBub3QgYmUgdGhlIG1vc3QgY29ycmVjdCB3YXkKK3RvIGltcGxlbWVudCB0aGVtLCBhcyBpdCBzZWVtcyB0byBiZSBwb3NzaWJsZSB0byBkbyBpdCBpbiBhIGZhc3RlciB3YXksCitidXQgc2hvdWxkIHdvcmsgbm9uIHRoZSBsZXNzIHVudGlsIHdlIGNhbiBwcm92aWRlIHNvbWV0aGluZyBiZXR0ZXIuCisKK0NoYW5nZS1JZDogSWIzOTJiMjdkYzU0NjkxZmQ0YzJlYTk4OTYyNDBhZDcxZmI4MTI4Y2MKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaSAgICAgICAgICAgIHwgICA0ICsKKyBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcCB8ICA3MCArKysrKysKKyBzcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQorIHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggICAgICAgICAgIHwgMzM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggICAgICAgICAgICAgIHwgICAyICsKKyA1IGZpbGVzIGNoYW5nZWQsIDQxNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCisKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42MzUyM2Q5CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkKK0BAIC0wLDAgKzEsNCBAQAorKyMKKysjIEFBcmNoNjQgYXJjaGl0ZWN0dXJlCisrIworK1NPVVJDRVMgKz0gJCRRVF9BUkNIX0NQUC9xYXRvbWljX2FhcmNoNjQuY3BwCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmZjODUxYjkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwCitAQCAtMCwwICsxLDcwIEBACisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqKgorKyoqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVnYWwKKysqKgorKyoqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBRdENvcmUgbW9kdWxlIG9mIHRoZSBRdCBUb29sa2l0LgorKyoqCisrKiogJFFUX0JFR0lOX0xJQ0VOU0U6TEdQTCQKKysqKiBDb21tZXJjaWFsIExpY2Vuc2UgVXNhZ2UKKysqKiBMaWNlbnNlZXMgaG9sZGluZyB2YWxpZCBjb21tZXJjaWFsIFF0IGxpY2Vuc2VzIG1heSB1c2UgdGhpcyBmaWxlIGluCisrKiogYWNjb3JkYW5jZSB3aXRoIHRoZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisrKiogU29mdHdhcmUgb3IsIGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIGluCisrKiogYSB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgRGlnaWEuICBGb3IgbGljZW5zaW5nIHRlcm1zIGFuZAorKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly9xdC5kaWdpYS5jb20vbGljZW5zaW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKysqKiB1c2UgdGhlIGNvbnRhY3QgZm9ybSBhdCBodHRwOi8vcXQuZGlnaWEuY29tL2NvbnRhY3QtdXMuCisrKioKKysqKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5MR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSByZXF1aXJlbWVudHMKKysqKiB3aWxsIGJlIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sLgorKyoqCisrKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKysqKiByaWdodHMuICBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgRGlnaWEgUXQgTEdQTCBFeGNlcHRpb24KKysqKiB2ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04udHh0IGluIHRoaXMgcGFja2FnZS4KKysqKgorKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5HUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUKKysqKiBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbC4KKysqKgorKyoqCisrKiogJFFUX0VORF9MSUNFTlNFJAorKyoqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisrIyBpbmNsdWRlIDxzY2hlZC5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDx0aW1lLmg+CisrCisrUVRfQkVHSU5fTkFNRVNQQUNFCisrCisrUVRfVVNFX05BTUVTUEFDRQorKworK1FfQ09SRV9FWFBPUlQgdm9pZCBxdF9hdG9taWNfeWllbGQoaW50ICpjb3VudCkKKyt7CisrI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisrICAgIGlmICgoKmNvdW50KSsrIDwgNTApIHsKKysgICAgICAgIHNjaGVkX3lpZWxkKCk7CisrICAgIH0gZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdG07CisrICAgICAgICB0bS50dl9zZWMgPSAwOworKyAgICAgICAgdG0udHZfbnNlYyA9IDIwMDAwMDE7CisrICAgICAgICBuYW5vc2xlZXAoJnRtLCBOVUxMKTsKKysgICAgICAgICpjb3VudCA9IDA7CisrICAgIH0KKyt9CisrCisrUVRfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkgYi9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpCitpbmRleCBjZDIzZTVlLi5mNTBmY2E3IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaQorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaQorQEAgLTMxLDcgKzMxLDkgQEAgaW50ZWdyaXR5OkhFQURFUlMgKz0gYXJjaC9xYXRvbWljX2ludGVncml0eS5oCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfczM5MC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY194ODZfNjQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2guaCBcCistICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2g0YS5oCisrICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2g0YS5oIFwKKysgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19hYXJjaDY0LmggXAorKworIAorIFFUX0FSQ0hfQ1BQID0gJCRRVF9TT1VSQ0VfVFJFRS9zcmMvY29yZWxpYi9hcmNoLyQkUVRfQVJDSAorIERFUEVORFBBVEggKz0gJCRRVF9BUkNIX0NQUAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGU2MWNhOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaAorQEAgLTAsMCArMSwzMzUgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFF0Q29yZSBtb2R1bGUgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpZm5kZWYgUUFUT01JQ19BQVJDSDY0X0gKKysjZGVmaW5lIFFBVE9NSUNfQUFSQ0g2NF9ICisrCisrUVRfQkVHSU5fSEVBREVSCisrCisrUVRfQkVHSU5fTkFNRVNQQUNFCisrCisrI2RlZmluZSBRX0FUT01JQ19JTlRfUkVGRVJFTkNFX0NPVU5USU5HX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzUmVmZXJlbmNlQ291bnRpbmdOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzUmVmZXJlbmNlQ291bnRpbmdXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9URVNUX0FORF9TRVRfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNUZXN0QW5kU2V0TmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc1Rlc3RBbmRTZXRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9GRVRDSF9BTkRfU1RPUkVfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZFN0b3JlTmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc0ZldGNoQW5kU3RvcmVXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9GRVRDSF9BTkRfQUREX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRBZGROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRBZGRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX1BPSU5URVJfVEVTVF9BTkRfU0VUX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzVGVzdEFuZFNldE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNUZXN0QW5kU2V0V2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19QT0lOVEVSX0ZFVENIX0FORF9TVE9SRV9JU19BTFdBWVNfTkFUSVZFCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc0ZldGNoQW5kU3RvcmVOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRTdG9yZVdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfUE9JTlRFUl9GRVRDSF9BTkRfQUREX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRBZGROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRBZGRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjaWZuZGVmIFFfREFUQV9NRU1PUllfQkFSUklFUgorKyMgZGVmaW5lIFFfREFUQV9NRU1PUllfQkFSUklFUiBhc20gdm9sYXRpbGUoImRtYiBzeVxuIjo6OiJtZW1vcnkiKQorKyNlbmRpZgorKyNpZm5kZWYgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUgorKyMgZGVmaW5lIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVIgYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisrI2VuZGlmCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50OjpyZWYoKQorK3sKKysgICAgaW50IG5ld1ZhbHVlOworKworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICBuZXdWYWx1ZSA9IF9fYXRvbWljX2FkZF9mZXRjaCgmX3FfdmFsdWUsIDEsIF9fQVRPTUlDX0FDUV9SRUwpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKworKyAgICByZXR1cm4gbmV3VmFsdWUgIT0gMDsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50OjpkZXJlZigpCisreworKyAgICBpbnQgbmV3VmFsdWU7CisrCisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIG5ld1ZhbHVlID0gX19hdG9taWNfc3ViX2ZldGNoKCZfcV92YWx1ZSwgMSwgX19BVE9NSUNfQUNRX1JFTCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrCisrICAgIHJldHVybiBuZXdWYWx1ZSAhPSAwOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRSZWxheGVkKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBib29sIHZhbDsKKysKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbiAoJl9xX3ZhbHVlLCAmZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBfX0FUT01JQ19SRUxBWEVELCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVSZWxheGVkKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGludCB2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2V4Y2hhbmdlX24oJl9xX3ZhbHVlLCBuZXdWYWx1ZSwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZEFkZFJlbGF4ZWQoaW50IHZhbHVlVG9BZGQpCisreworKyAgICBpbnQgdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSBfX2F0b21pY19mZXRjaF9hZGQoJl9xX3ZhbHVlLCB2YWx1ZVRvQWRkLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0UmVsYXhlZChUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uICgmX3FfdmFsdWUsICZleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIF9fQVRPTUlDX1JFTEFYRUQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlUmVsYXhlZChUICpuZXdWYWx1ZSkKKyt7CisrICAgIFQgKnZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZXhjaGFuZ2VfbigmX3FfdmFsdWUsIG5ld1ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRSZWxheGVkKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBUICp2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2ZldGNoX2FkZCgmX3FfdmFsdWUsIHZhbHVlVG9BZGQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRBY3F1aXJlKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojp0ZXN0QW5kU2V0UmVsZWFzZShpbnQgZXhwZWN0ZWRWYWx1ZSwgaW50IG5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRPcmRlcmVkKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVBY3F1aXJlKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlUmVsZWFzZShpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlT3JkZXJlZChpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRBY3F1aXJlKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkUmVsZWFzZShpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkT3JkZXJlZChpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6dGVzdEFuZFNldEFjcXVpcmUoVCAqZXhwZWN0ZWRWYWx1ZSwgVCAqbmV3VmFsdWUpCisreworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0UmVsZWFzZShUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0T3JkZXJlZChUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHRlc3RBbmRTZXRBY3F1aXJlKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlQWNxdWlyZShUICpuZXdWYWx1ZSkKKyt7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRTdG9yZVJlbGVhc2UoVCAqbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVPcmRlcmVkKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZEFjcXVpcmUocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRSZWxlYXNlKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kQWRkT3JkZXJlZChxcHRyZGlmZiB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKysjdW5kZWYgUV9EQVRBX01FTU9SWV9CQVJSSUVSCisrI3VuZGVmIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVIKKysKKytRVF9FTkRfTkFNRVNQQUNFCisrCisrUVRfRU5EX0hFQURFUgorKworKyNlbmRpZiAvLyBRQVRPTUlDX0FBUkNINjRfSAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oCitpbmRleCAxNDE3MjZjLi4zZTk2OTI2IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaAorQEAgLTk0LDYgKzk0LDggQEAgUVRfQkVHSU5fSEVBREVSCisgIyAgaW5jbHVkZSAiUXRDb3JlL3FhdG9taWNfc2g0YS5oIgorICNlbGlmIGRlZmluZWQoUVRfQVJDSF9OQUNMKQorICMgIGluY2x1ZGUgIlF0Q29yZS9xYXRvbWljX2dlbmVyaWMuaCIKKysjZWxpZiBkZWZpbmVkKFFUX0FSQ0hfQUFSQ0g2NCkKKysjICBpbmNsdWRlICJRdENvcmUvcWF0b21pY19hYXJjaDY0LmgiCisgI2Vsc2UKKyAjICBlcnJvciAiUXQgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byB0aGlzIGFyY2hpdGVjdHVyZSIKKyAjZW5kaWYKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDFlN2FkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2gKQEAgLTAsMCArMSwxMjQgQEAKK0Zyb20gNzA5MGZjODBmZjYzMDcxMmE5MGRlOTI0MDMxOTBmNjQ3ZGQzOGEzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9MaXNhbmRybz0yMERhbWk9QzM9QTFuPTIwTmljYW5vcj0yMFA9QzM9QTlyZXo9MjBNZXllcj89CisgPHBlcmV6bWV5ZXJAZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNSBNYXIgMjAxNCAxNTozNTowMCAtMDMwMAorU3ViamVjdDogW1BBVENIXSBta3NwZWNzIGZvciBBQXJjaDY0IChha2EgYXJtNjQpLgorCitQYXRjaCBieSBNYXJjaW4gSnVzemtpZXdpY3ogPG1hcmNpbkBqdXN6a2lld2ljei5jb20ucGw+CitsaWNlbnNlZCB1bmRlciBlaXRoZXIgUHVibGljIERvbWFpbiBvciBCU0Q6CisKKzxodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTczNTQ4OCMxNzk+CisKK0NoYW5nZS1JZDogSTIxZjE3OTUzMjM0Y2ZiMTc2YmFjMDIzZTUyZWNkYzkyN2ZjNWMxYTkKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKysrCisgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKworIG1rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggYTliYTdjOC4uZTU3ZDA1MyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMjgwOCw2ICsyODA4LDkgQEAgaWYgWyAiJENGR19FTUJFRERFRCIgIT0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgKjg2XzY0KQorICAgICAgICAgICAgICAgICBQTEFURk9STT1xd3MvbGludXgteDg2XzY0LWcrKworICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIGFhcmNoNjQpCisrICAgICAgICAgICAgICAgIFBMQVRGT1JNPWxpbnV4LWFhcmNoNjQtZysrCisrICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgUExBVEZPUk09cXdzL2xpbnV4LWdlbmVyaWMtZysrCisgICAgICAgICAgICAgICAgIDs7CitkaWZmIC0tZ2l0IGEvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWJjMGE5MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mCitAQCAtMCwwICsxLDI3IEBACisrIworKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgbGludXgtZysrCisrIworKyMgV3JpdHRlbiBmb3IgR05VL0xpbnV4IHBsYXRmb3JtcyB0aGF0IGhhdmUgYm90aCBsaWIgYW5kIGxpYjY0IGRpcmVjdG9yaWVzLAorKyMgbGlrZSB0aGUgQU1EIE9wdGVyb24uCisrIworKworK01BS0VGSUxFX0dFTkVSQVRPUiAgICA9IFVOSVgKKytUQVJHRVRfUExBVEZPUk0gICAgICAgPSB1bml4CisrVEVNUExBVEUgICAgICAgICAgICAgID0gYXBwCisrQ09ORklHICAgICAgICAgICAgICAgKz0gcXQgd2Fybl9vbiByZWxlYXNlIGluY3JlbWVudGFsIGxpbmtfcHJsIGdkYl9kd2FyZl9pbmRleAorK1FUICAgICAgICAgICAgICAgICAgICs9IGNvcmUgZ3VpCisrUU1BS0VfSU5DUkVNRU5UQUxfU1RZTEUgPSBzdWJsaWIKKysKKytRTUFLRV9DRkxBR1MgICAgID0KKytRTUFLRV9MRkxBR1MgICAgID0KKysKKytRTUFLRV9DRkxBR1NfUkVMRUFTRSAgICs9IC1PMgorKworK2luY2x1ZGUoLi4vY29tbW9uL2xpbnV4LmNvbmYpCisraW5jbHVkZSguLi9jb21tb24vZ2NjLWJhc2UtdW5peC5jb25mKQorK2luY2x1ZGUoLi4vY29tbW9uL2crKy11bml4LmNvbmYpCisrCisrUU1BS0VfTElCRElSX1gxMSAgICAgID0gL3Vzci9YMTFSNi9saWI2NAorK1FNQUtFX0xJQkRJUl9PUEVOR0wgICA9IC91c3IvWDExUjYvbGliNjQKKysKKytsb2FkKHF0X2NvbmZpZykKK2RpZmYgLS1naXQgYS9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaCBiL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTYyMTI4YgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKK0BAIC0wLDAgKzEsNDIgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHFtYWtlIHNwZWMgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpbmNsdWRlICIuLi9saW51eC1nKysvcXBsYXRmb3JtZGVmcy5oIgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaApAQCAtMCwwICsxLDE4IEBACitBZGQgbWlzc2luZyBoZWFkZXIgZm9yIGFhcmNoNjQuIEFuZCBpbnN0YWxsIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC1OcnUgcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi5vcmlnL2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgKKy0tLSBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42Lm9yaWcvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgJMTk3MC0wMS0wMSAwODozMDowMC4wMDAwMDAwMDAgKzA4MzAKKysrKyBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oCTIwMTQtMDktMDkgMTc6MTg6MDMuNzY4MzUyNTUxICswODAwCitAQCAtMCwwICsxIEBACisrI2luY2x1ZGUgIi4uLy4uL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgiCistLS0gcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9oZWFkZXJzLnByaS5vcmlnCTIwMTQtMDktMDkgMTg6MDU6MzcuMTAwNDMwMzExICswODAwCisrKysgcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9oZWFkZXJzLnByaQkyMDE0LTA5LTA5IDE4OjA1OjU5LjExMjQzMDkxMSArMDgwMAorQEAgLTEsMyArMSwzIEBACistU1lOQ1FULkhFQURFUl9GSUxFUyA9IC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGV2ZW50ZGlzcGF0Y2hlci5oIC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGl0ZW1tb2RlbC5oIC4uL2NvcmVsaWIva2VybmVsL3FiYXNpY3RpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVhcHBsaWNhdGlvbi5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlZXZlbnQuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRsb29wLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc19uYWNsLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc192eHdvcmtzLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc193aW5jZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtYXRoLmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGFvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YXR5cGUuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWltZWRhdGEuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0LmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGNsZWFudXBoYW5kbGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGRlZnMuaCAuLi9jb3JlbGliL2tlcm5lbC9xcG9pbnRlci5oIC4uL2NvcmVsaWIva2VybmVsL3FzaGFyZWRtZW1vcnkuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2lnbmFsbWFwcGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNvY2tldG5vdGlmaWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXN5c3RlbXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIva2VybmVsL3F0aW1lci5oIC4uL2NvcmVsaWIva2VybmVsL3F0cmFuc2xhdG9yLmggLi4vY29yZWxpYi9rZXJuZWwvcXZhcmlhbnQuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYWJzdHJhY3RhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGFyYWxsZWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXVzZWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3Fwcm9wZXJ0eWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FzZXF1ZW50aWFsYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xdmFyaWFudGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FscGhhLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY1LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ny5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2F2cjMyLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYmZpbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2Jvb3RzdHJhcC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2dlbmVyaWMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pMzg2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaWE2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2ludGVncml0eS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX202OGsuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tYWNvc3guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19taXBzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcGFyaXNjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcG93ZXJwYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3MzOTAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoNGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zcGFyYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3N5bWJpYW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY192eHdvcmtzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93cy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3NjZS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3g4Nl82NC5oIC4uL2NvcmVsaWIvdG9vbHMvcWFsZ29yaXRobXMuaCAuLi9jb3JlbGliL3Rvb2xzL3FiaXRhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheW1hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNoYXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250YWluZXJmd2QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250aWd1b3VzY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjcnlwdG9ncmFwaGljaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lLmggLi4vY29yZWxpYi90b29scy9xZWFzaW5nY3VydmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlbGFwc2VkdGltZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXNoLmggLi4vY29yZWxpYi90b29scy9xaXRlcmF0b3IuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5lLmggLi4vY29yZWxpYi90b29scy9xbGlua2VkbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGUuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfYmxhY2tiZXJyeS5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcC5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcmdpbnMuaCAuLi9jb3JlbGliL3Rvb2xzL3FwYWlyLmggLi4vY29yZWxpYi90b29scy9xcG9pbnQuaCAuLi9jb3JlbGliL3Rvb2xzL3FxdWV1ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlY3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWdleHAuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkdmFsdWVyb2xsYmFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXNldC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZGRhdGEuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlcl9pbXBsLmggLi4vY29yZWxpYi90b29scy9xc2l6ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0YWNrLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nYnVpbGRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2xpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdtYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xdGV4dGJvdW5kYXJ5ZmluZGVyLmggLi4vY29yZWxpYi90b29scy9xdGltZWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3F2YXJsZW5ndGhhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZlY3Rvci5oIC4uL2NvcmVsaWIvcGx1Z2luL3FmYWN0b3J5aW50ZXJmYWNlLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnkuaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2luLmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbmxvYWRlci5oIC4uL2NvcmVsaWIvcGx1Z2luL3F1dWlkLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbS5oIC4uL2NvcmVsaWIvdGhyZWFkL3FhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xYmFzaWNhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXguaCAuLi9jb3JlbGliL3RocmVhZC9xcmVhZHdyaXRlbG9jay5oIC4uL2NvcmVsaWIvdGhyZWFkL3FzZW1hcGhvcmUuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZHN0b3JhZ2UuaCAuLi9jb3JlbGliL3RocmVhZC9xd2FpdGNvbmRpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FldmVudHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZmluYWxzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FoaXN0b3J5c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVzeW5jaHJvbml6ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXJ1bm5hYmxlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGNvbXBpbGVydGVzdC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRleGNlcHRpb24uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlcmtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmdW5jdGlvbndyYXBwZXJzLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGl0ZXJhdGVrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcGtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtZWRpYW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVkdWNla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlc3VsdHN0b3JlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW5iYXNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHN0b3JlZGZ1bmN0aW9uY2FsbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnR0aHJlYWRlbmdpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2wuaCAuLi9jb3JlbGliL2lvL3FhYnN0cmFjdGZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3FidWZmZXIuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtLmggLi4vY29yZWxpYi9pby9xZGVidWcuaCAuLi9jb3JlbGliL2lvL3FkaXIuaCAuLi9jb3JlbGliL2lvL3FkaXJpdGVyYXRvci5oIC4uL2NvcmVsaWIvaW8vcWZpbGUuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mby5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2UuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2UuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5ncy5oIC4uL2NvcmVsaWIvaW8vcXRlbXBvcmFyeWZpbGUuaCAuLi9jb3JlbGliL2lvL3F0ZXh0c3RyZWFtLmggLi4vY29yZWxpYi9pby9xdXJsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1kaXN0LmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1sYXJnZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWVkaXVtLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1taW5pbWFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1uYWNsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1zbWFsbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FlbmRpYW4uaCAuLi9jb3JlbGliL2dsb2JhbC9xZmVhdHVyZXMuaCAuLi9jb3JlbGliL2dsb2JhbC9xZ2xvYmFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmggLi4vY29yZWxpYi9nbG9iYWwvcW5hbWVzcGFjZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FudW1lcmljLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfd2luZG93cy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY3BsdWdpbi5oIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29yZSAKKytTWU5DUVQuSEVBREVSX0ZJTEVTID0gLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0ZXZlbnRkaXNwYXRjaGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0aXRlbW1vZGVsLmggLi4vY29yZWxpYi9rZXJuZWwvcWJhc2ljdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVldmVudC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGxvb3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX25hY2wuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3Z4d29ya3MuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3dpbmNlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1hdGguaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhdHlwZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtaW1lZGF0YS5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0Y2xlYW51cGhhbmRsZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0ZGVmcy5oIC4uL2NvcmVsaWIva2VybmVsL3Fwb2ludGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNoYXJlZG1lbW9yeS5oIC4uL2NvcmVsaWIva2VybmVsL3FzaWduYWxtYXBwZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc29ja2V0bm90aWZpZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtc2VtYXBob3JlLmggLi4vY29yZWxpYi9rZXJuZWwvcXRpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXRyYW5zbGF0b3IuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXJhbGxlbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhdXNlYW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXNlcXVlbnRpYWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3F2YXJpYW50YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWxwaGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjUuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ni5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY3LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2F2cjMyLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYmZpbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2Jvb3RzdHJhcC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2dlbmVyaWMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pMzg2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaWE2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2ludGVncml0eS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX202OGsuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tYWNvc3guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19taXBzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcGFyaXNjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcG93ZXJwYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3MzOTAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoNGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zcGFyYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3N5bWJpYW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY192eHdvcmtzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93cy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3NjZS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3g4Nl82NC5oIC4uL2NvcmVsaWIvdG9vbHMvcWFsZ29yaXRobXMuaCAuLi9jb3JlbGliL3Rvb2xzL3FiaXRhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheW1hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNoYXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250YWluZXJmd2QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250aWd1b3VzY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjcnlwdG9ncmFwaGljaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lLmggLi4vY29yZWxpYi90b29scy9xZWFzaW5nY3VydmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlbGFwc2VkdGltZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXNoLmggLi4vY29yZWxpYi90b29scy9xaXRlcmF0b3IuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5lLmggLi4vY29yZWxpYi90b29scy9xbGlua2VkbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGUuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfYmxhY2tiZXJyeS5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcC5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcmdpbnMuaCAuLi9jb3JlbGliL3Rvb2xzL3FwYWlyLmggLi4vY29yZWxpYi90b29scy9xcG9pbnQuaCAuLi9jb3JlbGliL3Rvb2xzL3FxdWV1ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlY3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWdleHAuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkdmFsdWVyb2xsYmFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXNldC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZGRhdGEuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlcl9pbXBsLmggLi4vY29yZWxpYi90b29scy9xc2l6ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0YWNrLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nYnVpbGRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2xpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdtYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xdGV4dGJvdW5kYXJ5ZmluZGVyLmggLi4vY29yZWxpYi90b29scy9xdGltZWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3F2YXJsZW5ndGhhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZlY3Rvci5oIC4uL2NvcmVsaWIvcGx1Z2luL3FmYWN0b3J5aW50ZXJmYWNlLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnkuaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2luLmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbmxvYWRlci5oIC4uL2NvcmVsaWIvcGx1Z2luL3F1dWlkLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbS5oIC4uL2NvcmVsaWIvdGhyZWFkL3FhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xYmFzaWNhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXguaCAuLi9jb3JlbGliL3RocmVhZC9xcmVhZHdyaXRlbG9jay5oIC4uL2NvcmVsaWIvdGhyZWFkL3FzZW1hcGhvcmUuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZHN0b3JhZ2UuaCAuLi9jb3JlbGliL3RocmVhZC9xd2FpdGNvbmRpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FldmVudHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZmluYWxzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FoaXN0b3J5c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVzeW5jaHJvbml6ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXJ1bm5hYmxlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGNvbXBpbGVydGVzdC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRleGNlcHRpb24uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlcmtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmdW5jdGlvbndyYXBwZXJzLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGl0ZXJhdGVrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcGtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtZWRpYW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVkdWNla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlc3VsdHN0b3JlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW5iYXNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHN0b3JlZGZ1bmN0aW9uY2FsbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnR0aHJlYWRlbmdpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2wuaCAuLi9jb3JlbGliL2lvL3FhYnN0cmFjdGZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3FidWZmZXIuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtLmggLi4vY29yZWxpYi9pby9xZGVidWcuaCAuLi9jb3JlbGliL2lvL3FkaXIuaCAuLi9jb3JlbGliL2lvL3FkaXJpdGVyYXRvci5oIC4uL2NvcmVsaWIvaW8vcWZpbGUuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mby5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2UuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2UuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5ncy5oIC4uL2NvcmVsaWIvaW8vcXRlbXBvcmFyeWZpbGUuaCAuLi9jb3JlbGliL2lvL3F0ZXh0c3RyZWFtLmggLi4vY29yZWxpYi9pby9xdXJsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1kaXN0LmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1sYXJnZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWVkaXVtLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1taW5pbWFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1uYWNsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1zbWFsbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FlbmRpYW4uaCAuLi9jb3JlbGliL2dsb2JhbC9xZmVhdHVyZXMuaCAuLi9jb3JlbGliL2dsb2JhbC9xZ2xvYmFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmggLi4vY29yZWxpYi9nbG9iYWwvcW5hbWVzcGFjZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FudW1lcmljLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfd2luZG93cy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY3BsdWdpbi5oIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29yZSAKKyBTWU5DUVQuSEVBREVSX0NMQVNTRVMgPSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RFdmVudERpc3BhdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1vZGVsSW5kZXggLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBlcnNpc3RlbnRNb2RlbEluZGV4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNb2RlbEluZGV4TGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RJdGVtTW9kZWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0VGFibGVNb2RlbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RMaXN0TW9kZWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJhc2ljVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvcmVBcHBsaWNhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENsZWFuVXBGdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRpbWVyRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoaWxkRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUN1c3RvbUV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEeW5hbWljUHJvcGVydHlDaGFuZ2VFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXZlbnRMb29wIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhTWV0aG9kIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhRW51bSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVByb3BlcnR5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhQ2xhc3NJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhVHlwZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVR5cGVJZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVR5cGVJZDIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1pbWVEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3RMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3REYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdFVzZXJEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3RDbGVhbnVwSGFuZGxlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2VuZXJpY0FyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHZW5lcmljUmV0dXJuQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZXR1cm5Bcmd1bWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU9iamVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU9iamVjdEFjY2Vzc29yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhT2JqZWN0RXh0cmFEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWRNZW1vcnkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpZ25hbE1hcHBlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU29ja2V0Tm90aWZpZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN5c3RlbVNlbWFwaG9yZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRyYW5zbGF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50TWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50SGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudENvbXBhcmlzb25IZWxwZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0QW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBbmltYXRpb25Ecml2ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYXJhbGxlbEFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYXVzZUFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUHJvcGVydHlBbmltYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNlcXVlbnRpYWxBbmltYXRpb25Hcm91cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudEFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdEFsZ29yaXRobXMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJpdEFycmF5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCaXRSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJ5dGVBcnJheSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZVJlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZUFycmF5TWF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2FjaGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMUNoYXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoYXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb250YWluZXJGd2QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnRpZ3VvdXNDYWNoZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnRpZ3VvdXNDYWNoZVR5cGVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29udGlndW91c0NhY2hlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDcnlwdG9ncmFwaGljSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0ZVRpbWUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUVhc2luZ0N1cnZlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFbGFwc2VkVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoRHVtbXlWYWx1ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaER1bW15Tm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2ggLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11bHRpSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlSGFzaEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5lRiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlua2VkTGlzdERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3ROb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVMaW5rZWRMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpc3REYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN5c3RlbUxvY2FsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTG9jYWxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCQlN5c3RlbUxvY2FsZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcFBheWxvYWROb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11bHRpTWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXBJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZU1hcEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXJnaW5zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYWlyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUG9pbnRGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FRdWV1ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVjdEYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlZ0V4cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlckRlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXJBcnJheURlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXJQb2REZWxldGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRBcnJheVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFZhbHVlUm9sbGJhY2sgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNldCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVTZXRJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkRGF0YVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV2Vha1BvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpemUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpemVGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGFjayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RkV1N0cmluZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMYXRpbjFTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoYXJSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnN0U3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMUxpdGVyYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0Q29uY2F0ZW5hYmxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb25jYXRlbmFibGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ0J1aWxkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ0xpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVN0cmluZ0xpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTWF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dEJvdW5kYXJ5RmluZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lTGluZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyTGVuZ3RoQXJyYXkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3RvckRhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3RvclR5cGVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWZWN0b3JJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVZlY3Rvckl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGYWN0b3J5SW50ZXJmYWNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaWJyYXJ5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0UGx1Z2luIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0UGx1Z2luSW5zdGFuY2VGdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGx1Z2luTG9hZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FVdWlkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1TdHJpbmdSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUF0dHJpYnV0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtQXR0cmlidXRlcyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9ucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTm90YXRpb25EZWNsYXJhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTm90YXRpb25EZWNsYXJhdGlvbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eURlY2xhcmF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1FbnRpdHlEZWNsYXJhdGlvbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1SZWFkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbVdyaXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQXRvbWljSW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBdG9taWNQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCYXNpY0F0b21pY0ludCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQmFzaWNBdG9taWNQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRleCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0ZXhMb2NrZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGV4RGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVhZFdyaXRlTG9jayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVhZExvY2tlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV3JpdGVMb2NrZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNlbWFwaG9yZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRTdG9yYWdlRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkU3RvcmFnZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV2FpdENvbmRpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RUcmFuc2l0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFdmVudFRyYW5zaXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbmFsU3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhpc3RvcnlTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2lnbmFsVHJhbnNpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0YXRlTWFjaGluZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUZ1dHVyZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJbnRlcmZhY2VCYXNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZVN5bmNocm9uaXplciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlV2F0Y2hlckJhc2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZVdhdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJ1bm5hYmxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uY3VycmVudEZpbHRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmN1cnJlbnRNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb25jdXJyZW50UnVuIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRQb29sIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEZpbGVFbmdpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZUhhbmRsZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCdWZmZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURhdGFTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXREZWJ1ZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGVidWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU5vRGVidWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURpciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGlySXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlSW5mb0xpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlU3lzdGVtV2F0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRlNGaWxlRW5naW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FJT0RldmljZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1BJRCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUHJvY2Vzc0Vudmlyb25tZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQcm9jZXNzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZXNvdXJjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0dGluZ3MgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRlbXBvcmFyeUZpbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRTdHJlYW1GdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dFN0cmVhbU1hbmlwdWxhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUUyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dElTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRPU3RyZWFtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FVcmwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRFbmRpYW4gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRHbG9iYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUludGVnZXJGb3JTaXplIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FOb0ltcGxpY2l0Qm9vbENhc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQ4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDggLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQxNiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VJTlQxNiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDMyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDMyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfSU5UNjQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UNjQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9MTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VMTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0xPTkcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3lzSW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdE1zZ0hhbmRsZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUdsb2JhbFN0YXRpYyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2xvYmFsU3RhdGljRGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQm9vbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVHlwZUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZsYWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUluY29tcGF0aWJsZUZsYWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZsYWdzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGb3JlYWNoQ29udGFpbmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGb3JlYWNoQ29udGFpbmVyQmFzZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlicmFyeUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUludGVybmFsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDT09SRCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmZpZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dENvZGVjIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0RW5jb2RlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dERlY29kZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRDb2RlY0ZhY3RvcnlJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRDb2RlY1BsdWdpbiAKKyBTWU5DUVQuUFJJVkFURV9IRUFERVJfRklMRVMgPSAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RldmVudGRpc3BhdGNoZXJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGl0ZW1tb2RlbF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVfbWFjX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV9zeW1iaWFuX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV91bml4X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWNtZGxpbmVhcmdzX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWdsb2JhbGRhdGFfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FjcmFzaGhhbmRsZXJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfYmxhY2tiZXJyeV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl9nbGliX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfdW5peF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl93aW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhb2JqZWN0X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2hhcmVkbWVtb3J5X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtZXJyb3JfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1zZW1hcGhvcmVfcC5oIC4uL2NvcmVsaWIva2VybmVsL3F0cmFuc2xhdG9yX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXdpbmV2ZW50bm90aWZpZXJfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbl9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGFyYWxsZWxhbmltYXRpb25ncm91cF9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xc2VxdWVudGlhbGFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xdmFyaWFudGFuaW1hdGlvbl9wLmggLi4vY29yZWxpYi90b29scy9xYnl0ZWRhdGFfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXJmYnV6el9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX2RhdGFfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX3Rvb2xzX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fwb2RsaXN0X3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FyaW5nYnVmZmVyX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaW1kX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3F0b29sc19wLmggLi4vY29yZWxpYi90b29scy9xdW5pY29kZXRhYmxlc19wLmggLi4vY29yZWxpYi9wbHVnaW4vcWVsZnBhcnNlcl9wLmggLi4vY29yZWxpYi9wbHVnaW4vcWZhY3Rvcnlsb2FkZXJfcC5oIC4uL2NvcmVsaWIvcGx1Z2luL3FsaWJyYXJ5X3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xc3lzdGVtbGlicmFyeV9wLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbV9wLmggLi4vY29yZWxpYi94bWwvcXhtbHV0aWxzX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXhfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleHBvb2xfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FvcmRlcmVkbXV0ZXhsb2NrZXJfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FyZWFkd3JpdGVsb2NrX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3RzdGF0ZV9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWV2ZW50dHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWhpc3RvcnlzdGF0ZV9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXNpZ25hbGV2ZW50Z2VuZXJhdG9yX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGVtYWNoaW5lX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZWludGVyZmFjZV9wLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmV3YXRjaGVyX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2xfcC5oIC4uL2NvcmVsaWIvaW8vcWFic3RyYWN0ZmlsZWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xZGF0YXN0cmVhbV9wLmggLi4vY29yZWxpYi9pby9xZGF0YXVybF9wLmggLi4vY29yZWxpYi9pby9xZGlyX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mb19wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbWVudHJ5X3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW1tZXRhZGF0YV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfZG5vdGlmeV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfZnNldmVudHNfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2lub3RpZnlfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2txdWV1ZV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX3dpbl9wLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lX2l0ZXJhdG9yX3AuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmVfcC5oIC4uL2NvcmVsaWIvaW8vcWlvZGV2aWNlX3AuaCAuLi9jb3JlbGliL2lvL3Fub25jb250aWd1b3VzYnl0ZWRldmljZV9wLmggLi4vY29yZWxpYi9pby9xcHJvY2Vzc19wLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2VfaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcXJlc291cmNlX3AuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5nc19wLmggLi4vY29yZWxpYi9pby9xdGxkdXJsX3AuaCAuLi9jb3JlbGliL2lvL3F1cmx0bGRzX3AuaCAuLi9jb3JlbGliL2lvL3F3aW5kb3dzcGlwZXdyaXRlcl9wLmggLi4vY29yZWxpYi9nbG9iYWwvcW51bWVyaWNfcC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3F0X3BjaC5oIC4uL2NvcmVsaWIvY29kZWNzL3Fmb250bGFvY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3FpY29udmNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xaXNjaWljb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcWxhdGluY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3FzaW1wbGVjb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXRzY2lpY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3F1dGZjb2RlY19wLmggCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMy1jb25maWd1cmUtc3VwcG9ydC1jLTB4LXN0YW5kYXJkLWZvci1kaXJlY3RmZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZhY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMy1jb25maWd1cmUtc3VwcG9ydC1jLTB4LXN0YW5kYXJkLWZvci1kaXJlY3RmZC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitjb25maWd1cmU6IHN1cHBvcnQgYysrMHggc3RhbmRhcmQgZm9yIGRpcmVjdGZkCisKK1doaWxlIGRpcmVjdGZkIHVwZ3JhZGUgdG8gMS43LjYsIGl0IGFsd2F5cyBpbmNsdWRlcyBkaXJlY3RmYisrIHV0aWxzCit3aGVuIEMrKyBpcyB1c2VkIGFuZCBzZXQgYysrMHggYXMgYysrIHN0YW5kYXJkLgorKEluIGdpdDovL2dpdC5kaXJlY3RmYi5vcmcvZ2l0L2RpcmVjdGZiL2NvcmUvRGlyZWN0RkIuZ2l0Citjb21taXQgYjQ0NGJjYWUzMTk3YmU5ZmFmODgzNDYwZGNjMjM5ZWY3NTdkNTkyMiwgYW5kIGNvbW1pdAorNTIyYmVlYjc2ZjJhOGQyZGVlMzBkOTI4ZDJhNTk1NWJkMDZjZjI1YykKKworVGhlIGRpcmVjdGZkIGluIHF0NCBpcyBjKyssIGFuZCB0aGVyZSB3YXMgYSBidWlsZCBmYWlsdXJlOgorLi4uCit8IHFkaXJlY3RmYndpbmRvd3N1cmZhY2UuY3BwOjMzNjo2OTogZXJyb3I6IGluIEMrKzk4ICdyZWN0JyBtdXN0IGJlCitpbml0aWFsaXplZCBieSBjb25zdHJ1Y3Rvciwgbm90IGJ5ICd7Li4ufScKK3wgICAgICBjb25zdCBERkJSZWN0YW5nbGUgcmVjdCA9IHsgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgfTsKKy4uLgorCitUaGUgZysrIHVzZWQgYysrOTggYXMgZGVmYXVsdCBjKysgc3RhbmRhcmQsIHdlIHNob3VsZAorZXhwbGljaXRseSBzZXQgYysrMHggZm9yIGRpcmVjdGZkIGluIHF0NC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1NzI0YmQ2Li5lY2MyZjhiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NjU2LDYgKzY2NTYsNyBAQCBpZiBbICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJHtzY3JlZW59IiA9ICJkaXJlY3RmYiIgXSAmJiBbICIke0NGR19DT05GSUdVUkVfRVhJVF9PTl9FUlJPUn0iID0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmICIkUEtHX0NPTkZJRyIgLS1leGlzdHMgZGlyZWN0ZmIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICBRVF9DRkxBR1NfRElSRUNURkI9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGRpcmVjdGZiIDI+L2Rldi9udWxsYAorKyAgICAgICAgICAgICAgIFFUX0NGTEFHU19ESVJFQ1RGQj0iJFFUX0NGTEFHU19ESVJFQ1RGQiAtc3RkPWMrKzB4IgorICAgICAgICAgICAgICAgIFFUX0xJQlNfRElSRUNURkI9YCRQS0dfQ09ORklHIC0tbGlicyBkaXJlY3RmYiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIGVsaWYgZGlyZWN0ZmItY29uZmlnIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICAgICAgICBRVF9DRkxBR1NfRElSRUNURkI9YGRpcmVjdGZiLWNvbmZpZyAtLWNmbGFncyAyPi9kZXYvbnVsbGAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvRml4LVFXU0xvY2staW52YWxpZC1hcmd1bWVudC1sb2dzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvRml4LVFXU0xvY2staW52YWxpZC1hcmd1bWVudC1sb2dzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNWYwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSA1MmMzNDAwMWJhZDg1YzMwMzI2MTgwNzBiMWQ2YjJhM2M2ODgwNzE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmVpbCBKZXJyYW0gPG4uLi5Ab3NzYXUuaG9tZWxpbnV4Lm5ldD4KK0RhdGU6IFRodSwgOCBOb3YgMjAxMiAwODoxODozMiArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggUVdTTG9jayAiaW52YWxpZCBhcmd1bWVudCIgbG9ncworCitUaGVyZSB3YXMgbm8ga25vd24gYWN0dWFsIHByb2JsZW0gYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGxvZ3MsIGJ1dCB0aGV5Cit3ZXJlIHNwYW1taW5nIHRoZSBsb2csIHNvIEkgdGhvdWdodCBpdCB3b3J0aCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhbmQKK2ZpeCB0aGVtLgorCitUaGUgY29uZnVzaW9uIGlzIHRoYXQgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgd2F5cyBvZiBjcmVhdGluZyBRV1NMb2NrCitvYmplY3RzLiAgIlFXU0xvY2soKSIgY3JlYXRlcyBhbiBvYmplY3QgdGhhdCBjcmVhdGVzIGEgbmV3IHNldCBvZgorc2VtYXBob3Jlcywgd2hlcmVhcyAiUVdTTG9jayhpZCkiIGNyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgYWxpYXNlcyB0aGUKK2V4aXN0aW5nIHNldCBvZiBzZW1hcGhvcmVzIHdpdGggSUQgaWQuICBXaGF0IHNlZW1zIHRvIGhhcHBlbiBpcyB0aGF0CitlYWNoIGFwcGxpY2F0aW9uIGNyZWF0ZXMgYSBzZW1hcGhvcmUgc2V0IHNjb3BlZCB0byB0aGF0CithcHBsaWNhdGlvbiAoUVdTRGlzcGxheTo6RGF0YTo6Y2xpZW50TG9jayBpbiBxYXBwbGljYXRpb25fcXdzLmNwcCksCit0aGVuIHRoaXMgc2VtYXBob3JlIHNldCBpcyBwYXNzZWQgYnkgY29tcGxleCBtZWFucyB0bworcGxhY2VzIChRV1NDbGllbnRQcml2YXRlIGFuZCBRV1NNZW1vcnlTdXJmYWNlKSB0aGF0IHVzZSB0aGUgc2VtYXBob3JlcworZm9yIGEgc2hvcnQgcGVyaW9kIGFuZCB0aGVuIGRlbGV0ZSB0aGVpciBRV1NMb2NrIG9iamVjdHMuCisKK1RoZSBwcm9ibGVtIHdhcyB0aGF0IHRoZSBRV1NMb2NrIGRlc3RydWN0b3IgYWx3YXlzIGRlc3Ryb3llZCB0aGUKK3NlbWFwaG9yZSBzZXQsIGV2ZW4gd2hlbiB0aGF0IFFXU0xvY2sgaGFkbid0IGNyZWF0ZSB0aGUgc2VtYXBob3JlcworaXRzZWxmLCBoZW5jZSBtYWtpbmcgdGhlIHNlbWFwaG9yZXMgaW52YWxpZCBmb3Igb3RoZXIgUVdTTG9jayBvYmplY3RzCitzdGlsbCByZWZlcmVuY2luZyB0aGUgc2FtZSBzZXQuCisKK0NsZWFybHkgYSBRV1NMb2NrIG9iamVjdCBzaG91bGRuJ3QgZGVzdHJveSB0aGUgc2VtYXBob3JlIHNldCBpZiBpdAorZGlkbid0IGNyZWF0ZSBpdCBpdHNlbGYsIGFuZCB0aGF0IGlzIGNvbmZpcm1lZCBieSB0aGUgZmFjdCB0aGF0IG9uZSBvZgordGhlIGltcGxlbWVudGF0aW9ucyBpbnNpZGUgUVdTTG9jayBhbHJlYWR5IGltcGxlbWVudHMgdGhpcyBsb2dpYywgd2l0aAordGhlICdvd25lZCcgZmxhZy4gIFRoZSBmaXggaXMgdG8gaW1wbGVtZW50IHRoaXMgZm9yIHRoZSAjaWZuZGVmCitRVF9QT1NJWF9JUEMgY2FzZSAtIHdoaWNoIGlzIHdoYXQgaXMgdXNlZCBpbiBRdE1va28gLSBqdXN0IGFzIGlzCithbHJlYWR5IGltcGxlbWVudGVkIGZvciB0aGUgI2lmZGVmIFFUX1BPU0lYX0lQQyBjYXNlLgorCitPcmlnaW5hbCBwYXRjaCBjYW4gYmUgZm91bmQgaGVyZToKKyBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vY29tbXVuaXR5QGxpc3RzLm9wZW5tb2tvLm9yZy9tc2c2NTUxMi5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IE1pa2UgTG9vaWptYW5zIDxtaWtlLmxvb2lqbWFuc0B0b3BpYy5ubD4KKyAoUmVtb3ZlZCB0aGUgY29tbWVudGVkLW91dCBkZWJ1ZyBzdGF0ZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHBhdGNoLikKKworLS0tCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2suY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcAoraW5kZXggOTkxNGEyNC4uMTA1NTc4NSAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAKK0BAIC04Myw5ICs4MywxMiBAQCBRV1NMb2NrOjpRV1NMb2NrKGludCBpZCkgOiBzZW1JZChpZCkKKyAgICAgUVdTU2lnbmFsSGFuZGxlcjo6aW5zdGFuY2UoKS0+YWRkV1NMb2NrKHRoaXMpOworICNlbmRpZgorIAorKyAgICBvd25lZCA9IGZhbHNlOworKworICNpZm5kZWYgUVRfUE9TSVhfSVBDCisgICAgIGlmIChzZW1JZCA9PSAtMSkgeworICAgICAgICAgc2VtSWQgPSBzZW1nZXQoSVBDX1BSSVZBVEUsIDMsIElQQ19DUkVBVCB8IDA2NjYpOworKyAgICAgICAgb3duZWQgPSB0cnVlOworICAgICAgICAgaWYgKHNlbUlkID09IC0xKSB7CisgICAgICAgICAgICAgcGVycm9yKCJRV1NMb2NrOjpRV1NMb2NrIik7CisgICAgICAgICAgICAgcUZhdGFsKCJVbmFibGUgdG8gY3JlYXRlIHNlbWFwaG9yZSIpOworQEAgLTEwMCw3ICsxMDQsNiBAQCBRV1NMb2NrOjpRV1NMb2NrKGludCBpZCkgOiBzZW1JZChpZCkKKyAgICAgfQorICNlbHNlCisgICAgIHNlbXNbMF0gPSBzZW1zWzFdID0gc2Vtc1syXSA9IFNFTV9GQUlMRUQ7CistICAgIG93bmVkID0gZmFsc2U7CisgCisgICAgIGlmIChzZW1JZCA9PSAtMSkgeworICAgICAgICAgLy8gIyMjIGdlbmVyYXRlIHJlYWxseSB1bmlxdWUgSURzCitAQCAtMTM0LDkgKzEzNywxMSBAQCBRV1NMb2NrOjp+UVdTTG9jaygpCisgCisgICAgIGlmIChzZW1JZCAhPSAtMSkgeworICNpZm5kZWYgUVRfUE9TSVhfSVBDCistICAgICAgICBxdF9zZW11biBzZW12YWw7CistICAgICAgICBzZW12YWwudmFsID0gMDsKKy0gICAgICAgIHNlbWN0bChzZW1JZCwgMCwgSVBDX1JNSUQsIHNlbXZhbCk7CisrCWlmIChvd25lZCkgeworKwkgICAgcXRfc2VtdW4gc2VtdmFsOworKwkgICAgc2VtdmFsLnZhbCA9IDA7CisrCSAgICBzZW1jdGwoc2VtSWQsIDAsIElQQ19STUlELCBzZW12YWwpOworKwl9CisgICAgICAgICBzZW1JZCA9IC0xOworICNlbHNlCisgICAgICAgICAvLyBlbXVsYXRlIHRoZSBTRU1fVU5ETyBiZWhhdmlvciBmb3IgdGhlIEJhY2tpbmdTdG9yZSBsb2NrCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrX3AuaCBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmgKK2luZGV4IGQzMjRlNGYuLmQ4NjdkMjAgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oCitAQCAtODYsOCArODYsOCBAQCBwcml2YXRlOgorICAgICBpbnQgbG9ja0NvdW50WzJdOworICNpZmRlZiBRVF9QT1NJWF9JUEMKKyAgICAgc2VtX3QgKnNlbXNbM107CistICAgIGJvb2wgb3duZWQ7CisgI2VuZGlmCisrICAgIGJvb2wgb3duZWQ7CisgfTsKKyAKKyBRVF9FTkRfTkFNRVNQQUNFCisgCistLSAKKzEuNy4xMC40CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9hZGRfY2hlY2tfZm9yX2FhcmNoNjRfMzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9hZGRfY2hlY2tfZm9yX2FhcmNoNjRfMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1MTAzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaApAQCAtMCwwICsxLDU1IEBACitBdXRob3I6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KK0RhdGU6ICAgU3VuIEFwciAxMiAxOToyNzoxMCAyMDE1ICswNTMwCisKK1tQQVRDSF0gYWRkIGNoZWNraW5nIGZvciBBQXJjaDY0IGlscDMyCisKK0Nyb3NzLWNvbXBpbGluZyBxdDQtZW1iZWRkZWQgYW5kIHF0NC14MTEtZnJlZSBhcHBsaWNhdGlvbnMgZm9yIEFBcmNoNjQgaWxwMzIKKyhib3RoIGJpZyBhbmQgbGl0dGxlIGVuZGlhbikgZmFpbHMgd2l0aCBiZWxvdyBlcnJvciwKKworKHNuaXApCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaDozMTowLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmg6MzIsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6MjYsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaDoyNiwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0Lmg6MjcsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOjMwLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOjI3OgorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOiBJbiBpbnN0YW50aWF0aW9uIG9mICdUTyBRVFdURjo6Yml0d2lzZV9jYXN0KEZST00pIFt3CisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tZWRpYXRlLmg6NTI6NDk6IHJlcXVpcmVkIGZyb20gaGVyZQorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOjYzOjE6IGVycm9yOiBzaXplIG9mIGFycmF5IGlzIG5lZ2F0aXZlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ1RPIFFUV1RGOjpiaXR3aXNlX2Nhc3QoRlJPTSkgW3cKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaDo1Nzo0NzogcmVxdWlyZWQgZnJvbSBoZXJlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6NjM6MTogZXJyb3I6IHNpemUgb2YgYXJyYXkgaXMgbmVnYXRpdmUKK21ha2VbMV06ICoqKiBbb2JqL3JlbGVhc2UvSlNDYWxsYmFja0NvbnN0cnVjdG9yLm9dIEVycm9yIDEKKy0tIENVVCAtLQorCit0aGUgZXJyb3IgaXMgYmVjYXVzZSBvZiBKU1ZBTFVFNjQgaXMgYmVpbmcgZGVmaW5lZCB3aGlsZSBjb21waWxpbmcgcHJvZ3JhbXMKK2ZvciBBQXJjaDY0IGlscDMyLiBUaGlzIG1ha2VzIGVxdWFsIGNvbmRpdGlvbiBjaGVja2luZyBvZiBpbnRwdHJfdCBhbmQgZG91YmxlCitkYXRhdHlwZXMgYXMgZmFsc2UsIGFuZCByZXN1bHRzIGluIC0xIChuZWdhdGl2ZSkgYXMgYXJyYXkgc2l6ZSBpbiBiaXR3aXNlX2Nhc3QKK2Z1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorCistLS0gYS9zcmMvM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJMjAxNC0wNC0xMSAwMDowNzoxMi4wMDAwMDAwMDAgKzA1MzAKKysrKyBiL3NyYy8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkyMDE1LTA0LTEwIDIyOjE5OjUxLjA2NjI3OTQyNiArMDUzMAorQEAgLTIxNCw2ICsyMTQsOSBAQAorICNkZWZpbmUgV1RGX0NQVV9BQVJDSDY0IDEKKyAjaWYgZGVmaW5lZChfX0FBUkNINjRFQl9fKQorICNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEKKysjaWYgIWRlZmluZWQoX19MUDY0X18pCisrI2RlZmluZSBXVEZfQ1BVX0FBUkNINjRfMzIgMQorKyNlbmRpZgorICNlbmRpZgorICNlbmRpZgorIAorQEAgLTkwMyw3ICs5MDYsNyBAQAorICNlbmRpZgorIAorICNpZiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUU2NCkgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzIpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KQorLSNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpIHx8IE9TKFNPTEFSSVMpIHx8IE9TKEhQVVgpKSkgfHwgKENQVShJQTY0KSAmJiAhQ1BVKElBNjRfMzIpKSB8fCBDUFUoQUxQSEEpIHx8IENQVShBSVg2NCkgfHwgQ1BVKFNQQVJDNjQpIHx8IENQVShNSVBTNjQpIHx8IENQVShBQVJDSDY0KQorKyNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpIHx8IE9TKFNPTEFSSVMpIHx8IE9TKEhQVVgpKSkgfHwgKENQVShJQTY0KSAmJiAhQ1BVKElBNjRfMzIpKSB8fCBDUFUoQUxQSEEpIHx8IENQVShBSVg2NCkgfHwgQ1BVKFNQQVJDNjQpIHx8IENQVShNSVBTNjQpIHx8IChDUFUoQUFSQ0g2NCkgJiYgIUNQVShBQVJDSDY0XzMyKSkKKyAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTY0IDEKKyAjZWxpZiBDUFUoQVJNKSB8fCBDUFUoUFBDNjQpCisgI2RlZmluZSBXVEZfVVNFX0pTVkFMVUUzMiAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9nKysuY29uZiBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2crKy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzhjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9nKysuY29uZgpAQCAtMCwwICsxLDQwIEBACisjCisjIHFtYWtlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbW1vbiBnY2MKKyMKKworUU1BS0VfQ09NUElMRVIgPSBnY2MKKworUU1BS0VfQ0MgICAgICAgPSAkKE9FX1FNQUtFX0NDKQorUU1BS0VfQ0ZMQUdTICAgICAgICs9ICQoT0VfUU1BS0VfQ0ZMQUdTKQorUU1BS0VfQ0ZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8gKz0gJChPRV9RTUFLRV9DRkxBR1MpCitRTUFLRV9DRkxBR1NfUFJFQ09NUElMRSArPSAteCBjLWhlYWRlciAtYyAke1FNQUtFX1BDSF9JTlBVVH0gLW8gJHtRTUFLRV9QQ0hfT1VUUFVUfQorUU1BS0VfQ0ZMQUdTX1VTRV9QUkVDT01QSUxFICs9IC1pbmNsdWRlICR7UU1BS0VfUENIX09VVFBVVF9CQVNFfQorCitRTUFLRV9DWFggICAgICA9ICQoT0VfUU1BS0VfQ1hYKQorUU1BS0VfQ1hYRkxBR1MgICAgICs9ICQoT0VfUU1BS0VfQ1hYRkxBR1MpCitRTUFLRV9DWFhGTEFHU19SRUxFQVNFX1dJVEhfREVCVUdJTkZPICs9ICQkUU1BS0VfQ0ZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8KK1FNQUtFX0NYWEZMQUdTX1BSRUNPTVBJTEUgKz0gLXggYysrLWhlYWRlciAtYyAke1FNQUtFX1BDSF9JTlBVVH0gLW8gJHtRTUFLRV9QQ0hfT1VUUFVUfQorUU1BS0VfQ1hYRkxBR1NfVVNFX1BSRUNPTVBJTEUgPSAkJFFNQUtFX0NGTEFHU19VU0VfUFJFQ09NUElMRQorCitRTUFLRV9MSU5LICAgICA9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfU0hMSUIgICA9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfQwkJPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MSU5LX0NfU0hMSUIJPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MRkxBR1MgICAgICAgKz0gJChPRV9RTUFLRV9MREZMQUdTKQorUU1BS0VfTEZMQUdTX05PVU5ERUYJKz0gLVdsLC0tbm8tdW5kZWZpbmVkCitRTUFLRV9MRkxBR1NfUlBBVEggICAgICAgID0gLVdsLC1ycGF0aC1saW5rLAorCitRTUFLRV9QQ0hfT1VUUFVUX0VYVCAgICA9IC5nY2gKKworIyAtQnN5bWJvbGljLWZ1bmN0aW9ucyAobGQpIHN1cHBvcnQKK1FNQUtFX0xGTEFHU19CU1lNQk9MSUNfRlVOQyA9IC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucworUU1BS0VfTEZMQUdTX0RZTkFNSUNfTElTVCA9IC1XbCwtLWR5bmFtaWMtbGlzdCwKKworIyBkbyBub3QgZGVwZW5kIG9uIGdkYgorQ09ORklHIC09IGdkYl9kd2FyZl9pbmRleAorCisjIHNvbWUgbGlua2luZyBoZWxwZXIuLi4KK0NPTkZJRyArPSBycGF0aF9saWJkaXJzCisKKyMgZm9yIHRoZSBTREsKK2lzRW1wdHkoUU1BS0VfUVRfQ09ORklHKTpRTUFLRV9RVF9DT05GSUcgPSAkKE9FX1FNQUtFX1FUX0NPTkZJRykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2xpbnV4LmNvbmYgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9saW51eC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NzAzODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9saW51eC5jb25mCkBAIC0wLDAgKzEsNjYgQEAKKyMKKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgY29tbW9uIGxpbnV4CisjCisKK1FNQUtFX0NGTEFHU19USFJFQUQJKz0gLURfUkVFTlRSQU5UCitRTUFLRV9DWFhGTEFHU19USFJFQUQJKz0gJCRRTUFLRV9DRkxBR1NfVEhSRUFECisKK1FNQUtFX0lOQ0RJUiAgICAgICAgICA9CitRTUFLRV9MSUJESVIgICAgICAgICAgPQorUU1BS0VfSU5DRElSX1gxMSAgICAgID0KK1FNQUtFX0xJQkRJUl9YMTEgICAgICA9CitRTUFLRV9JTkNESVJfUVQgICAgICAgPSAkKE9FX1FNQUtFX0lOQ0RJUl9RVCkKK1FNQUtFX0xJQkRJUl9RVCAgICAgICA9ICQoT0VfUU1BS0VfTElCRElSX1FUKQorUU1BS0VfSU5DRElSX09QRU5HTCAgID0KK1FNQUtFX0xJQkRJUl9PUEVOR0wgICA9CitRTUFLRV9JTkNESVJfT1BFTkdMX0VTMSA9ICQkUU1BS0VfSU5DRElSX09QRU5HTAorUU1BS0VfTElCRElSX09QRU5HTF9FUzEgPSAkJFFNQUtFX0xJQkRJUl9PUEVOR0wKK1FNQUtFX0lOQ0RJUl9PUEVOR0xfRVMyID0gJCRRTUFLRV9JTkNESVJfT1BFTkdMCitRTUFLRV9MSUJESVJfT1BFTkdMX0VTMiA9ICQkUU1BS0VfTElCRElSX09QRU5HTAorUU1BS0VfSU5DRElSX0VHTCAgICAgID0KK1FNQUtFX0xJQkRJUl9FR0wgICAgICA9CitRTUFLRV9JTkNESVJfT1BFTlZHICAgPQorUU1BS0VfTElCRElSX09QRU5WRyAgID0KKworCitRTUFLRV9MSUJTICAgICAgICAgICAgPQorUU1BS0VfTElCU19EWU5MT0FEICAgID0gLWxkbAorUU1BS0VfTElCU19YMTEgICAgICAgID0gJChPRV9RTUFLRV9MSUJTX1gxMSkKK1FNQUtFX0xJQlNfWDExU00gICAgICA9ICQoT0VfUU1BS0VfTElCU19YMTFTTSkKK1FNQUtFX0xJQlNfTklTICAgICAgICA9IC1sbnNsCitRTUFLRV9MSUJTX0VHTCAgICAgICAgPSAtbEVHTAorUU1BS0VfTElCU19PUEVOR0wgICAgID0gLWxHTAorUU1BS0VfTElCU19PUEVOR0xfUVQgID0gLWxHTAorUU1BS0VfTElCU19PUEVOR0xfRVMxID0gLWxHTEVTX0NNCitRTUFLRV9MSUJTX09QRU5HTF9FUzIgPSAtbEdMRVN2MgorUU1BS0VfTElCU19PUEVOVkcgICAgID0gLWxPcGVuVkcKK1FNQUtFX0xJQlNfVEhSRUFEICAgICA9IC1scHRocmVhZAorCitRTUFLRV9NT0MgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX01PQykKK1FNQUtFX1VJQyAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfVUlDKQorUU1BS0VfVUlDMyAgICAgICAgICAgID0gJChPRV9RTUFLRV9VSUMzKQorUU1BS0VfUkNDICAgICAgICAgICAgID0gJChPRV9RTUFLRV9SQ0MpCitRTUFLRV9RREJVU0NQUDJYTUwgICAgPSAkKE9FX1FNQUtFX1FEQlVTQ1BQMlhNTCkKK1FNQUtFX1FEQlVTWE1MMkNQUCAgICA9ICQoT0VfUU1BS0VfUURCVVNYTUwyQ1BQKQorCitRTUFLRV9BUiAgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX0FSKSBjcXMKK1FNQUtFX09CSkNPUFkgICAgICAgICA9IG9iamNvcHkKK1FNQUtFX1JBTkxJQiAgICAgICAgICA9CisKK1FNQUtFX1RBUiAgICAgICAgICAgICA9IHRhciAtY2YKK1FNQUtFX0daSVAgICAgICAgICAgICA9IGd6aXAgLTlmCisKK1FNQUtFX0NPUFkgICAgICAgICAgICA9IGNwIC1mCitRTUFLRV9DT1BZX0ZJTEUgICAgICAgPSAkKENPUFkpCitRTUFLRV9DT1BZX0RJUiAgICAgICAgPSAkKENPUFkpIC1yCitRTUFLRV9NT1ZFICAgICAgICAgICAgPSBtdiAtZgorUU1BS0VfREVMX0ZJTEUgICAgICAgID0gcm0gLWYKK1FNQUtFX0RFTF9ESVIgICAgICAgICA9IHJtZGlyCitRTUFLRV9TVFJJUCAgICAgICAgICAgPSAkKE9FX1FNQUtFX1NUUklQKQorUU1BS0VfU1RSSVBGTEFHU19MSUIgKz0gLS1zdHJpcC11bm5lZWRlZAorUU1BS0VfQ0hLX0RJUl9FWElTVFMgID0gdGVzdCAtZAorUU1BS0VfTUtESVIgICAgICAgICAgID0gbWtkaXIgLXAKK1FNQUtFX0lOU1RBTExfRklMRSAgICA9IGluc3RhbGwgLW0gNjQ0IC1wCitRTUFLRV9JTlNUQUxMX1BST0dSQU0gPSBpbnN0YWxsIC1tIDc1NSAtcAorCitpbmNsdWRlKHVuaXguY29uZikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L3F0ZS5zaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L3F0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQ2ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2lmIFsgLWUgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgXQordGhlbgorICAgIFFXU19NT1VTRV9QUk9UTz1Uc2xpYjovZGV2L2lucHV0L3RvdWNoc2NyZWVuMAorICAgIGV4cG9ydCBRV1NfTU9VU0VfUFJPVE8KK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZC5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2OTA2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYwpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIkNyb3NzLXBsYXRmb3JtIFVJIHRvb2xraXQgYW5kIGFwcGxpY2F0aW9uIGZyYW1ld29yayAoZnJhbWVidWZmZXIgdmVyc2lvbikiCitERVNDUklQVElPTiA9ICJRdCBpcyBhIHZlcnNhdGlsZSBjcm9zcy1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgLS0gdGhpcyBpcyB0aGUgZW1iZWRkZWQgKGZyYW1lYnVmZmVyKSB2ZXJzaW9uLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy8iCitERVBFTkRTICs9ICJkaXJlY3RmYiB0c2xpYiIKKworUVQ0RURFUEVORFMgPSAiIgorUVRfQkFTRV9MSUIgID89ICJsaWJxdC1lbWJlZGRlZCIKKworIyBTZXQgbmVjZXNzYXJ5IHZhcmlhYmxlcyBpbiB0aGUgcHJvZmlsZQorU1JDX1VSSSArPSAiZmlsZTovL3F0ZS5zaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAzMy1jb25maWd1cmUtc3VwcG9ydC1jLTB4LXN0YW5kYXJkLWZvci1kaXJlY3RmZC5wYXRjaCBcCisiCisKK1FUX0VNQkVEREVEX0ZMQUdTID89ICIgXAorICAgIC1lbWJlZGRlZCAkUVRfQVJDSCBcCisgICAgLXF0bGliaW5maXggJHtRVF9MSUJJTkZJWH0gXAorIgorUVRfRU1CRURERURfRVhUUkFfRkxBR1MgPz0gIiBcCisgICAgLXBsdWdpbi1nZngtdHJhbnNmb3JtZWQgLXBsdWdpbi1nZngtcXZmYiAtcGx1Z2luLWdmeC12bmMgLXBsdWdpbi1nZngtZGlyZWN0ZmIgXAorICAgIC1wbHVnaW4tbW91c2UtdHNsaWIgLXF0LW1vdXNlLXBjIC1xdC1tb3VzZS1xdmZiIC1xdC1tb3VzZS1saW51eGlucHV0IFwKKyAgICAtcXQta2JkLXR0eSAtcXQta2JkLWxpbnV4aW5wdXQgXAorIgorUVRfRU1CRURERURfS0VZUEFEX0ZMQUdTID89ICIgXAorICAgIC1EUVRfS0VZUEFEX05BVklHQVRJT04gXAorIgorCitRVF9DT05GSUdfRkxBR1MgKz0gIiR7UVRfRU1CRURERURfRkxBR1N9ICR7UVRfRU1CRURERURfRVhUUkFfRkxBR1N9ICR7UVRfRU1CRURERURfS0VZUEFEX0ZMQUdTfSIKKworcmVxdWlyZSBxdDQuaW5jCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vZm9udHMKKyAgICB0b3VjaCAke0R9LyR7bGliZGlyfS9mb250cy9mb250ZGlyCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9xdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCisjIFdlIHB1dCB0aGUgcXRlIHByb2ZpbGUgaW50byBpdCdzIG93biBwYWNrYWdlIGFzIHdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBhbGwgcXQgc3R1ZmYKKyMgd2l0aCBkZXBlbmRpbmcgb24gdGhlIGdsb2JhbCBwYWNrYWdlIHF0NC1lbWJlZGRlZAorUEFDS0FHRVMgKz0gIiAke1BOfS1jb25mIgorRklMRVNfJHtQTn0tY29uZiArPSAiICR7c3lzY29uZmRpcn0vcHJvZmlsZS5kL3F0ZS5zaCIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIgJHtQTn0tY29uZiIKKworT1RIRVJfUEFDS0FHRVMgKz0gIlwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtdmVyYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi1kZWphdnUgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYiCisKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1mb250cyA9ICIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtdmVyYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi1kZWphdnUgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMiCisKK0FMTE9XX0VNUFRZXyR7UVRfQkFTRV9OQU1FfS1mb250cyA9ICIxIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UVRfQkFTRV9OQU1FfS1mb250cy0uKiIKKworRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi12ZXJhICAgICAgID0gIiR7bGliZGlyfS9mb250cy9WZXJhKi50dGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLWRlamF2dSAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzL0RlamFWdSoudHRmIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYSAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy8qLnBmYSIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvKi5wZmIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtcXBmICAgICAgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzLyoucXBmKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cyAgICAgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvUkVBRE1FICR7bGliZGlyfS9mb250cy9mb250ZGlyIgorCitpbmhlcml0IHF0NGUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWRfNC44LjcuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZF80LjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDM1ZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWRfNC44LjcuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHF0NC0ke1BWfS5pbmMKK3JlcXVpcmUgcXQ0LWVtYmVkZGVkLmluYworCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLW5vLW5lb24iICxkKX0iCisKK1FUX0NPTkZJR19GTEFHUyArPSAiIFwKKyAtZXhjZXB0aW9ucyBcCisiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZS5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDFmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsMTEyIEBACitTVU1NQVJZID0gIlF0IHZlcnNpb24gNCB0b29scyBhbmQgc3VwcG9ydCBmaWxlcyBmb3IgdGhlIGJ1aWxkIGhvc3QiCitERVBFTkRTID0gInpsaWItbmF0aXZlIGRidXMtbmF0aXZlIgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK1BST1ZJREVTID0gInF0NC10b29scy1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwzO21kNT02ZTE2OTRlZTMzOGRiNDEwNDE3NTE3ODg0OTE4ZDRkMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMX0VYQ0VQVElPTi50eHQ7bWQ1PTAxNDVjNGQxYjZmOTZhNjYxYzJjMTM5ZGZiMjY4ZmI2IgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvJHtQVn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItcWtiZHR0eV9xd3MtZml4LWJ1aWxkLXdpdGgtb2xkLWtlcm5lbC1oZWFkZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWNvbmZpZ3VyZS1tYWtlLXF0NC1uYXRpdmUtd29yay13aXRoLWxvbmctYnVpbGRpbmctcGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZysrLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbGludXguY29uZiBcCisJIgorUyA9ICIke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItcHJlZml4ICR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgLWJpbmRpciAke2JpbmRpcn0gXAorICAgICAgICAgICAgICAgIC1saWJkaXIgJHtsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtZGF0YWRpciAke2RhdGFkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLXN5c2NvbmZkaXIgJHtzeXNjb25mZGlyfS9xdDQgXAorICAgICAgICAgICAgICAgIC1kb2NkaXIgJHtkb2NkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLWhlYWRlcmRpciAke2luY2x1ZGVkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLXBsdWdpbmRpciAke2xpYmRpcn0vcXQ0L3BsdWdpbnMgXAorICAgICAgICAgICAgICAgIC1pbXBvcnRkaXIgJHtsaWJkaXJ9L3F0NC9pbXBvcnRzIFwKKyAgICAgICAgICAgICAgICAtdHJhbnNsYXRpb25kaXIgJHtkYXRhZGlyfS9xdDQvdHJhbnNsYXRpb25zIFwKKyAgICAgICAgICAgICAgICAtZXhhbXBsZXNkaXIgJHtiaW5kaXJ9L3F0NC9leGFtcGxlcyBcCisgICAgICAgICAgICAgICAgLWRlbW9zZGlyICR7YmluZGlyfS9xdDQvZGVtb3MgXAorICAgICAgICAgICAgICAgIC1MICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgLUkgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAtcXQtbGlianBlZyAtc3lzdGVtLXpsaWIgXAorICAgICAgICAgICAgICAgIC1uby1saWJqcGVnIC1uby1saWJwbmcgLW5vLWxpYm1uZyAtbm8tbGlidGlmZiBcCisgICAgICAgICAgICAgICAgLW5vLWFjY2Vzc2liaWxpdHkgXAorICAgICAgICAgICAgICAgIC1uby1jdXBzIFwKKyAgICAgICAgICAgICAgICAtbm8tbmFzLXNvdW5kIFwKKyAgICAgICAgICAgICAgICAtbm8tbmlzIC1uby1vcGVuc3NsIFwKKyAgICAgICAgICAgICAgICAtdmVyYm9zZSAtcmVsZWFzZSBcCisgICAgICAgICAgICAgICAgLWVtYmVkZGVkIC1uby1mcmVldHlwZSAtbm8tZ2xpYiAtbm8taWNvbnYgXAorICAgICAgICAgICAgICAgIC1leGNlcHRpb25zIC14bWxwYXR0ZXJucyBcCisgICAgICAgICAgICAgICAgLXF0M3N1cHBvcnQgXAorICAgICAgICAgICAgICAgIC1uby1mYXN0IC1zaWxlbnQgLW5vLXJwYXRoIgorCisjIHlhbmsgZGVmYXVsdCAtZSwgb3RoZXJ3aXNlIHdlIGdldCB0aGUgZm9sbG93aW5nIGVycm9yOgorIyBtb2NfcWJ1ZmZlci5jcHA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0VYVFJBX09FTUFLRSA9ICIgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBBdm9pZCBwcm9ibGVtcyB3aXRoIFF0IDQuOC4wIGNvbmZpZ3VyZSBzZXR0aW5nIFFNQUtFX0xJTksgZnJvbSBMRCAoc2luY2Ugd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGcrKykKKwl1bnNldCBMRAorCisJKGVjaG8gbzsgZWNobyB5ZXMpIHwgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHx8IGRpZSAiQ29uZmlndXJpbmcgcXQgZmFpbGVkLiBFWFRSQV9PRUNPTkYgd2FzICR7RVhUUkFfT0VDT05GfSIKK30KKworVE9CVUlMRCA9ICJcCisgIHNyYy90b29scy9tb2MgXAorICBzcmMvY29yZWxpYiBcCisgIHNyYy9zcWwgXAorICBzcmMveG1sIFwKKyAgc3JjL25ldHdvcmsgXAorICBzcmMvdG9vbHMvdWljIFwKKyAgc3JjL3Rvb2xzL3JjYyBcCisgIHNyYy94bWxwYXR0ZXJucyBcCisgIHNyYy9kYnVzIFwKKyAgc3JjL2d1aSBcCisgIHNyYy90ZXN0bGliIFwKKyAgc3JjL3F0M3N1cHBvcnQgXAorICBzcmMvdG9vbHMvdWljMyBcCisgIHRvb2xzL2xpbmd1aXN0L2xjb252ZXJ0IFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHJlbGVhc2UgXAorICB0b29scy9saW5ndWlzdC9sdXBkYXRlIFwKKyAgdG9vbHMvcWRidXMvcWRidXNjcHAyeG1sIFwKKyAgdG9vbHMvcWRidXMvcWRidXN4bWwyY3BwIFwKKyAgdG9vbHMveG1scGF0dGVybnMgXAorIgorCitkb19jb21waWxlKCkgeworCWZvciBpIGluICR7VE9CVUlMRH07IGRvCisJCWNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorCWRvbmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9xbWFrZSAke0R9JHtiaW5kaXJ9L3FtYWtlMgorCWZvciBpIGluIG1vYyB1aWMgdWljMyByY2MgbGNvbnZlcnQgbHJlbGVhc2UgbHVwZGF0ZSBxZGJ1c2NwcDJ4bWwgcWRidXN4bWwyY3BwIHhtbHBhdHRlcm5zOyBkbworCQlpbnN0YWxsIC1tIDA3NTUgYmluLyR7aX0gJHtEfSR7YmluZGlyfS8ke2l9NAorCWRvbmUKKyAgICAKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3F0NC8KKwljcCAtUGZSIG1rc3BlY3MgJHtEfSR7ZGF0YWRpcn0vcXQ0LworCWxuIC1zZiBsaW51eC1nKysgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvJHtCVUlMRF9PU30tb2UtZysrCisJaWYgWyAtZiAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZiBdIDsgdGhlbgorCQkjIG1rc3BlY3Mgd2VyZSByZWZhY3RvcmVkIGZvciA0LjguMAorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mCisJZWxzZQorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKysuY29uZgorCWZpCisJY3AgLWYgJHtXT1JLRElSfS9saW51eC5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi8KKworCWluc3RhbGwgLW0gMDY0NCB0b29scy9wb3J0aW5nL3NyYy9xM3BvcnRpbmcueG1sICR7RH0ke2RhdGFkaXJ9L3F0NC8KKworCWZvciBpIGluICR7VE9CVUlMRH07IGRvCisJCWNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExfUk9PVD0ke0R9CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlXzQuOC43LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NGQ2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHF0NC1uYXRpdmUuaW5jCisKK1RPQlVJTEQgOj0gInNyYy90b29scy9ib290c3RyYXAgJHtUT0JVSUxEfSIKKworU1JDX1VSSVttZDVzdW1dID0gImQ5OTBlZTY2YmY3YWIwYzc4NTU4OTc3NmYzNWJhNmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyODgyMjk1MDk3ZTQ3ZmUwODlmOGFjNzQxYTk1ZmVmNDdlMGE3M2EzZjNjZGYyMWI1Njk5MDYzOGY2MjZlYTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZS5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhMTczNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYwpAQCAtMCwwICsxLDM4IEBACityZXF1aXJlIHF0NC5pbmMKKworU1VNTUFSWSA9ICJDcm9zcy1wbGF0Zm9ybSBVSSB0b29sa2l0IGFuZCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgKFgxMSB2ZXJzaW9uKSIKK0RFU0NSSVBUSU9OID0gIlF0IGlzIGEgdmVyc2F0aWxlIGNyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9uIGZyYW1ld29yayAtLSB0aGlzIGlzIHRoZSBYMTEgdmVyc2lvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGZvbnRjb25maWcgbGlieGZ0IGxpYnhleHQgbGlieHJlbmRlciBsaWJ4cmFuZHIgbGlieGN1cnNvciIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wnLCAnJywgZCl9IgorUFJPVklERVMgKz0gInF0NC14MTEiCitRVDRERVBFTkRTID0gIiIKKworUVRfR0xGTEFHUyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLW9wZW5nbCcsICctbm8tb3BlbmdsJywgZCl9ICIKK1FUX0dMRkxBR1NfcWVtdXg4NiA9ICItb3BlbmdsIgorUVRfR0xGTEFHU19xZW11cHBjID0gIi1vcGVuZ2wiCitRVF9YMTFfRkxBR1MgPz0gIi1uby14aW5lcmFtYSAtbm8teGtiIC1uby1ndGtzdHlsZSIKK1FUX0NPTkZJR19GTEFHUyArPSAiJHtRVF9YMTFfRkxBR1N9IgorUVRfQkFTRV9MSUIgID89ICJsaWJxdCIKKworIyByZXF1aXJlZCBieSBrZGVsaWJzNAorUVRfS0RFX0ZMQUdTID89ICItYWNjZXNzaWJpbGl0eSAtc20iCitRVF9ESVNUUk9fRkxBR1MgPz0gIiR7UVRfS0RFX0ZMQUdTfSIKKworaW5oZXJpdCBxdDR4MTEKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICMgZml4IHBrZ2NvbmZpZywgbGlidG9vbCBhbmQgcHJsIGZpbGVzCisgIHNlZCAtaSAtZSAncyNJL3Vzci9pbmNsdWRlI0lpbmNsdWRlZGlyfSNnJyBcIAorICAgIC1lICdzI0lpbiNJJHtpbiNnJyBcCisgICAgJHtEfSR7bGliZGlyfS8qLmxhICR7RH0ke2xpYmRpcn0vKi5wcmwgJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCisgICMgUVQgYWJ1c2VzICRpbmNsdWRlZGlyIHRvIHBvaW50IHRvIGl0cyBoZWFkZXJzLCB3aGljaCBicmVha3MgcGtnY29uZmlnIHN5c3Jvb3QsIHNvCisgICMgbWFudWFsbHkgZml4IGl0IHVwIGhlcmU6CisgIGZvciBwYyBpbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjIDsgZG8KKyAgICBzZWQgLWkgLWUgInM6cHJlZml4fWluY2x1ZGUvJHtRVF9CQVNFX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYyk6cHJlZml4fS9pbmNsdWRlOiIgXAorICAgICAgLWUgInMsQ2ZsYWdzOiAsQ2ZsYWdzOiAtSVB7aW5jbHVkZWRpcn0vJHtRVF9CQVNFX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYykgLCIgXAorICAgICAgLWUgJ3M6SVB7OkkkezpnJyAkcGMKKyAgZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWVfNC44LjcuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZV80LjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2I1ZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWVfNC44LjcuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHF0NC14MTEtZnJlZS5pbmMKK3JlcXVpcmUgcXQ0LSR7UFZ9LmluYworCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLW5vLW5lb24iICxkKX0iCisKK1FUX0NPTkZJR19GTEFHUyArPSAiIFwKKyAtbm8tZW1iZWRkZWQgXAorIC14cmFuZHIgXAorIC14MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1OGU1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYwpAQCAtMCwwICsxLDM5MSBAQAoraW5oZXJpdCBxbWFrZV9iYXNlCisKK0RFUEVORFMgKz0gInF0NC10b29scy1uYXRpdmUgZnJlZXR5cGUganBlZyBsaWJwbmcgemxpYiBkYnVzIG9wZW5zc2wgZ2xpYi0yLjAgc3FsaXRlMyB0aWZmIGljdSIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSIKKworcmVxdWlyZSBxdDRfYXJjaC5pbmMKKworUVRfRElTVFJPX0ZMQUdTID89ICItbm8tYWNjZXNzaWJpbGl0eSAtbm8tc20iCitRVF9ESVNUUk9fRkxBR1NfbGludXhzdGRiYXNlID0gIi1zbSIKKworUVRfU1FMX0RSSVZFUl9GTEFHUyA/PSAiLW5vLXNxbC1pYmFzZSAtbm8tc3FsLW15c3FsIC1uby1zcWwtcHNxbCAtbm8tc3FsLW9kYmMgLW5vLXNxbC1zcWxpdGUyIC1wbHVnaW4tc3FsLXNxbGl0ZSAtc3lzdGVtLXNxbGl0ZSIKKworUVRfR0xGTEFHUyA/PSAiIgorCisgIAorUVRfUVQzU1VQUE9SVCA/PSAiLXF0M3N1cHBvcnQiCitRVF9YTUwgPz0gIi14bWxwYXR0ZXJucyIKK1FUX1dFQktJVCA/PSAiLXdlYmtpdCIKK1FUX1BIT05PTiA/PSAiLW5vLXBob25vbiIKK1FUX0RCVVMgPz0gIi1xZGJ1cyIKK1FUX01VTFRJTUVESUEgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICctcHVsc2VhdWRpbycsICctbm8tcHVsc2VhdWRpbycsIGQpfSIKKyAKK1FUX0NPTkZJR19GTEFHUyArPSAiLXJlbGVhc2UgLW5vLWN1cHMgLXJlZHVjZS1yZWxvY2F0aW9ucyBcCisgICAgICAgICAgICAgICAgICAgIC1zaGFyZWQgLW5vLW5hcy1zb3VuZCAtbm8tbmlzIFwKKyAgICAgICAgICAgICAgICAgICAgLXN5c3RlbS1saWJqcGVnIC1zeXN0ZW0tbGlicG5nIC1zeXN0ZW0tbGlidGlmZiAtc3lzdGVtLXpsaWIgXAorICAgICAgICAgICAgICAgICAgICAtbm8tcGNoIC1zdGwgLWdsaWIgLWljdSBcCisgICAgICAgICAgICAgICAgICAgIC1uby1ycGF0aCAtc2lsZW50IFwKKwkJICAgIC1EIFVTRV9RVE1VTFRJTUVESUE9MSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfREJVU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1FUM1NVUFBPUlR9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9XRUJLSVR9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9QSE9OT059IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9YTUx9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9NVUxUSU1FRElBfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfU1FMX0RSSVZFUl9GTEFHU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX0RJU1RST19GTEFHU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX0dMRkxBR1N9IgorCitFWFRSQV9PRU1BS0UgPSAiLWUiCisKK0VYVFJBX0VOViA9ICdRTUFLRT0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiAtYWZ0ZXIgXAorICAgICAgICAgICAgIElOQ1BBVEgrPSR7U1RBR0lOR19JTkNESVJ9L2ZyZWV0eXBlMiBMSUJTKz0tTCR7U1RBR0lOR19MSUJESVJ9IiBcCisgICAgICAgICAgICAgUU1BS0VTUEVDPSIke1FNQUtFU1BFQ30iIExJTks9IiR7Q1hYfSAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0iIFwKKyAgICAgICAgICAgICBBUj0iJHtUQVJHRVRfUFJFRklYfWFyIGNxcyIgXAorICAgICAgICAgICAgIE1PQz0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L21vYzQiIFVJQz0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3VpYzQiIE1BS0U9Im1ha2UgLWUiJworCitleHBvcnQgUVRfQ09ORl9QQVRIPSIke1dPUktESVJ9L3F0LmNvbmYiCisKKyMgTGlicmFyeSBwYWNrYWdlcworUVRfTElCX05BTUVTID0gIlF0M1N1cHBvcnQgUXRBc3Npc3RhbnRDbGllbnQgUXRDTHVjZW5lIFF0Q29yZSBRdERCdXMgUXREZXNpZ25lciBRdERlc2lnbmVyQ29tcG9uZW50cyBRdEd1aSBRdEhlbHAgUXROZXR3b3JrIFF0T3BlbkdMIFF0U2NyaXB0IFF0U2NyaXB0VG9vbHMgUXRTcWwgUXRTdmcgUXRUZXN0IFF0VWlUb29scyBRdFdlYktpdCBRdFhtbCBRdFhtbFBhdHRlcm5zIHBob25vbiBRdE11bHRpbWVkaWEgUXRPcGVuVkcgUXRNZWRpYVNlcnZpY2VzIFF0RGVjbGFyYXRpdmUiCisKK1FUX0VYVFJBX0xJQlMgPSAicHZyUVdTV1NFR0wiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgbGliX3BhY2thZ2VzID0gW10KKyAgICBkZXZfcGFja2FnZXMgPSBbXQorICAgIGRiZ19wYWNrYWdlcyA9IFtdCisgICAgc3RhdGljZGV2X3BhY2thZ2VzID0gW10KKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiUVRfTElCX05BTUVTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGtnID0gZC5nZXRWYXIoIlFUX0JBU0VfTElCIiwgVHJ1ZSkgKyBuYW1lLmxvd2VyKCkucmVwbGFjZSgicXQiLCAiIikucmVwbGFjZSgiXyIsICItIikgKyAiNCIKKyAgICAgICAgIyBOT1RFOiB0aGUgaGVhZGVycyBmb3IgUXRBc3Npc3RhbnRDbGllbnQgYXJlIGRpZmZlcmVudAorICAgICAgICBpbmNuYW1lID0gbmFtZS5yZXBsYWNlKCJRdEFzc2lzdGFudENsaWVudCIsICJRdEFzc2lzdGFudCIpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5zby4qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGV2IiAlIHBrZywgIiIiJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0ucHJsCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5sYQorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uc28KKyAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vJShpbmNuYW1lKXMKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvJShuYW1lKXMke1FUX0xJQklORklYfS5wYyIiIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtc3RhdGljZGV2IiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LmEiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kYmciICUgcGtnLCAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LnNvKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIlJSRUNPTU1FTkRTXyVzLWRiZyIgJSBwa2csICIke1BOfS1kYmciKQorICAgICAgICBsaWJfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtZGV2IiAlIHBrZykKKyAgICAgICAgZGJnX3BhY2thZ2VzLmFwcGVuZCgiJXMtZGJnIiAlIHBrZykKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIHBrZykKKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiT1RIRVJfUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkYmdfcGFja2FnZXMuYXBwZW5kKCIlcy1kYmciICUgbmFtZSkKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIG5hbWUpCisKKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiUVRfRVhUUkFfTElCUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCJRVF9CQVNFX0xJQiIsIFRydWUpICsgbmFtZS5sb3dlcigpLnJlcGxhY2UoInF0IiwgIiIpLnJlcGxhY2UoIl8iLCAiLSIpICsgIjQiCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMuc28uKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLXN0YXRpY2RldiIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMuYSIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRldiIgJSBwa2csICIiIiR7bGliZGlyfS9saWIlKG5hbWUpcy5wcmwKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIlKG5hbWUpcy5sYQorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzLnNvCisgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9LyUoaW5jbmFtZSlzCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnLyUobmFtZSlzLnBjIiIiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kYmciICUgcGtnLCAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWIlKG5hbWUpcy5zbyoiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU18lcy1kYmciICUgcGtnLCAiJHtQTn0tZGJnIikKKyAgICAgICAgbGliX3BhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGRldl9wYWNrYWdlcy5hcHBlbmQoIiVzLWRldiIgJSBwa2cpCisgICAgICAgIGRiZ19wYWNrYWdlcy5hcHBlbmQoIiVzLWRiZyIgJSBwa2cpCisgICAgICAgIHN0YXRpY2Rldl9wYWNrYWdlcy5hcHBlbmQoIiVzLXN0YXRpY2RldiIgJSBwa2cpCisKKyAgICBkLnNldFZhcigiTElCX1BBQ0tBR0VTIiwgIiAiLmpvaW4obGliX3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiREVWX1BBQ0tBR0VTIiwgIiAiLmpvaW4oZGV2X3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiREJHX1BBQ0tBR0VTIiwgIiAiLmpvaW4oZGJnX3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiU1RBVElDREVWX1BBQ0tBR0VTIiwgIiAiLmpvaW4oc3RhdGljZGV2X3BhY2thZ2VzKSkKK30KKworT1RIRVJfUEFDS0FHRVMgPSAiXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS10b29scyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWNvbW1vbiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRidXMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlc2lnbmVyIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LW1ha2VxcGYgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1ta3NwZWNzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0teG1scGF0dGVybnMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xdDN0bzQgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyIKKworI1dlIHByZXBlbmQgc28gJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyBjb21lcyBiZWZvcmUgJHtQTn0tZG9jLHNvIHRoZSBwYWNrYWdpbmcgb2YgRklMRVNfIGdldCBkb25lIGJlZm9yZS4KK1BBQ0tBR0VTID0rICIke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIgorUEFDS0FHRVMgKz0gIiBcCisgICAgICAgICAgICAgJHtMSUJfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke0RFVl9QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7REJHX1BBQ0tBR0VTfSBcCisgICAgICAgICAgICAgJHtTVEFUSUNERVZfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke09USEVSX1BBQ0tBR0VTfSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tLiogXiR7UVRfQkFTRV9OQU1FfS10cmFuc2xhdGlvbi0uKiBeJHtRVF9CQVNFX05BTUV9LXBocmFzZWJvb2stLioiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitGSUxFU18ke1BOfSAgICAgPSAiIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vUXQvKiIKK0ZJTEVTXyR7UE59LWRiZyA9ICIvdXNyL3NyYy9kZWJ1Zy8iCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jID0gIiR7ZG9jZGlyfS8ke1FUX0RJUl9OQU1FfS9xY2gvcXQucWNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtMSUJfUEFDS0FHRVN9ICR7T1RIRVJfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtQTn0tZGV2ID0gIiR7REVWX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke0RCR19QQUNLQUdFU30iCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTElCfWNvcmU0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBnbGliYy1nY29udi11dGYtMTYiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWRvYyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MiCisKK1JQUk9WSURFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgKz0gInFtYWtlMiIKK1JSRVBMQUNFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgKz0gInFtYWtlMiIKKworRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdHRyYWNlcmVwbGF5ICR7YmluZGlyfS9xZG9jKiAke2JpbmRpcn0vcW1ha2UgJHtiaW5kaXJ9L21vYyAke2JpbmRpcn0vdWljKiAke2JpbmRpcn0vcmNjIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzLWRiZyAgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcXR0cmFjZXJlcGxheSAke2JpbmRpcn0vLmRlYnVnL3Fkb2MqICR7YmluZGlyfS8uZGVidWcvcW1ha2UgJHtiaW5kaXJ9Ly5kZWJ1Zy91aWMqICR7YmluZGlyfS8uZGVidWcvbW9jICR7YmluZGlyfS8uZGVidWcvcmNjIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCAgICAgICAgICAgID0gIiR7YmluZGlyfS8qYXNzaXN0YW50KiAke2JpbmRpcn0vcWNvbGxlY3Rpb25nZW5lcmF0b3IgJHtiaW5kaXJ9L3FoZWxwY29udmVydGVyICR7YmluZGlyfS9xaGVscGdlbmVyYXRvciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1hc3Npc3RhbnQtZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLyphc3Npc3RhbnQqICR7YmluZGlyfS8uZGVidWcvcWNvbGxlY3Rpb25nZW5lcmF0b3IgJHtiaW5kaXJ9Ly5kZWJ1Zy9xaGVscGNvbnZlcnRlciAke2JpbmRpcn0vLmRlYnVnL3FoZWxwZ2VuZXJhdG9yIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWNvbW1vbiAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdGNvbmZpZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1jb21tb24tZGJnICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0Y29uZmlnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRidXMgICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xZGJ1cyAke2JpbmRpcn0vcWRidXN4bWwyY3BwICR7YmluZGlyfS9xZGJ1c2NwcDJ4bWwgJHtiaW5kaXJ9L3FkYnVzdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRidXMtZGJnICAgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcWRidXMgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c3htbDJjcHAgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c2NwcDJ4bWwgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c3ZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcyAgICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcXRkZW1vKiAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1zdGF0aWNkZXYgICAgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3Mvc2hhcmVkL2xpYmRlbW9fc2hhcmVkLmEiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MtZGJnICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdGRlbW8qICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8uZGVidWcvKiAgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyovLmRlYnVnICAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKi8qLy5kZWJ1ZyAgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyovKi8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZXNpZ25lciAgICAgICAgICAgICA9ICIke2JpbmRpcn0vKmRlc2lnbmVyKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZXNpZ25lci1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLypkZXNpZ25lcioiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtc3RhdGljZGV2ICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzL3Rvb2xzL3BsdWdhbmRwYWludC9wbHVnaW5zL2xpYnBucF9iYXNpY3Rvb2xzLmEiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtZGJnICAgICAgICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovKi8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8qLyovKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzL2RlY2xhcmF0aXZlLyovKi8qLyovKi8uZGVidWcvKiAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvZGVjbGFyYXRpdmUvKi8qLyovKi8uZGVidWcvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdCAgICAgICAgICAgICA9ICIke2JpbmRpcn0vKmxpbmd1aXN0KiAke2JpbmRpcn0vbHJlbGVhc2UgJHtiaW5kaXJ9L2x1cGRhdGUgJHtiaW5kaXJ9L2xjb252ZXJ0ICR7YmluZGlyfS9xbTJ0cyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdC1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLypsaW5ndWlzdCogJHtiaW5kaXJ9Ly5kZWJ1Zy9scmVsZWFzZSAke2JpbmRpcn0vLmRlYnVnL2x1cGRhdGUgJHtiaW5kaXJ9Ly5kZWJ1Zy9sY29udmVydCAke2JpbmRpcn0vLmRlYnVnL3FtMnRzIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXBpeGVsdG9vbCAgICAgICAgICAgID0gIiR7YmluZGlyfS9waXhlbHRvb2wiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sLWRiZyAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9waXhlbHRvb2wiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcXQzdG80ICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0M3RvNCAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3EzcG9ydGluZy54bWwiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcXQzdG80LWRiZyAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdDN0bzQiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3FtbHZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXItZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3FtbHZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1tYWtlcXBmICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vbWFrZXFwZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1tYWtlcXBmLWRiZyAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL21ha2VxcGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tbWtzcGVjcyAgICAgICAgICAgICAgPSAiJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLyogJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9lbnZpcm9ubWVudC1zZXR1cCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS14bWxwYXR0ZXJucyAgICAgICAgICA9ICIke2JpbmRpcn0veG1scGF0dGVybnMqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXhtbHBhdHRlcm5zLWRiZyAgICAgID0gIiR7YmluZGlyfS8uZGVidWcveG1scGF0dGVybnMqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zICAgICAgICAgID0gIiR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyogJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvcW1sdG9vbGluZy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zLWRiZyAgICAgID0gIiR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyovKi8qLy5kZWJ1Zy8qICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyovLmRlYnVnICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zL3FtbHRvb2xpbmcvLmRlYnVnIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH0ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgICAgICArPSAibGliZGlyIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH0ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtZGJnICArPSAibGliZGlyIgorCisjIExpY2Vuc2Ugb3B0aW9ucywgdG8gYmUgc2V0IGJ5IHRoZSByZWNpcGUgaWYgZGlmZmVyZW50IHZhbHVlcyBhcmUgbmVlZGVkCitRVF9MSUNFTlNFX0ZJTEUgPz0gIiIKK1FUX0xJQ0VOU0VfRkxBR1MgPz0gIi1vcGVuc291cmNlIgorCitkb19jb25maWd1cmUoKSB7CisJdW5zZXQgUU1BS0VTUEVDCisJdW5zZXQgUVRESVIKKworCXNldF9hcmNoCisJc2V0X2VuZGlhbgorCisJaWYgWyAhIC1lIGJpbi9xbWFrZSBdOyB0aGVuCisJCWxuIC1zZiAke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIGJpbi9xbWFrZQorCWZpCisKKwlpZiBbICEgLWUgbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIF07IHRoZW4KKwkJbG4gLXNmIGxpbnV4LWcrKyBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysKKwlmaQorCisJaWYgWyAtZiBta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mIF0gOyB0aGVuCisJCSMgbWtzcGVjcyB3ZXJlIHJlZmFjdG9yZWQgZm9yIDQuOC4wCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZgorCWVsc2UKKwkJY3AgLWYgJHtXT1JLRElSfS9nKysuY29uZiBta3NwZWNzL2NvbW1vbi9nKysuY29uZgorCWZpCisJY3AgLWYgJHtXT1JLRElSfS9saW51eC5jb25mIG1rc3BlY3MvY29tbW9uLworCisJZWNobyAiW1BhdGhzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICRRVF9DT05GX1BBVEgKKwllY2hvICJQcmVmaXg9JHtwcmVmaXh9IiAgICAgICAgICAgICAgICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkRvY3VtZW50YXRpb249JHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9IiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiSGVhZGVycz0ke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9IiAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJMaWJyYXJpZXM9JHtsaWJkaXJ9IiAgICAgICAgICAgICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkJpbmFyaWVzPSR7YmluZGlyfSIgICAgICAgICAgICAgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiUGx1Z2lucz0ke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkltcG9ydHM9JHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMiID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJEYXRhPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0iICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlRyYW5zbGF0aW9ucz0ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3RyYW5zbGF0aW9ucyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlNldHRpbmdzPSR7c3lzY29uZmRpcn0vJHtRVF9ESVJfTkFNRX0iICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRXhhbXBsZXM9JHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRGVtb3M9JHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zIiAgID4+ICRRVF9DT05GX1BBVEgKKworCSR7RVhUUkFfUU1BS0VfTVVOR0V9fHwgdHJ1ZQorCisJZWNobyB5ZXMgfCBRVF9MSUNFTlNFX0ZJTEU9IiR7UVRfTElDRU5TRV9GSUxFfSIgLi9jb25maWd1cmUgLXYgXAorCQkJLXByZWZpeCAke3ByZWZpeH0gXAorCQkJLWJpbmRpciAke2JpbmRpcn0gXAorCQkJLWxpYmRpciAke2xpYmRpcn0gXAorCQkJLWRhdGFkaXIgJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktc3lzY29uZmRpciAke3N5c2NvbmZkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1kb2NkaXIgJHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1oZWFkZXJkaXIgJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktcGx1Z2luZGlyICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zIFwKKwkJCS1pbXBvcnRkaXIgJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMgXAorCQkJLXRyYW5zbGF0aW9uZGlyICR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vdHJhbnNsYXRpb25zIFwKKwkJCS1leGFtcGxlc2RpciAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMgXAorCQkJLWRlbW9zZGlyICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcyBcCisJCQktcGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisJCQkteHBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorCQkJJHtRVF9FTkRJQU59IFwKKwkJCS1jcm9zc2FyY2ggJHtRVF9BUkNIfSBcCisJCQkke1FUX0xJQ0VOU0VfRkxBR1N9IFwKKwkJCSR7UVRfQ09ORklHX0ZMQUdTfSAtbm8tZmFzdCBcCisJCQktTCR7U1RBR0lOR19MSUJESVJ9IC1JJHtTVEFHSU5HX0lOQ0RJUn0gXAorCQkJLUkke1NUQUdJTkdfSU5DRElSfS9mcmVldHlwZTIKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAjIEZpeHVwIG1pc3Npbmcgd3NlZ2wgaGVhZGVyIGluIHNvbWUgU0dYIFNES3MKKyAgICBpZiAhIFsgLWUgJHtTVEFHSU5HX0lOQ0RJUn0vd3NlZ2wuaCBdIDsgdGhlbgorICAgICAgICBjcCBzcmMvM3JkcGFydHkvcG93ZXJ2ci93c2VnbC5oIHNyYy9wbHVnaW5zL2dmeGRyaXZlcnMvcG93ZXJ2ci9RV1NXU0VHTC8KKyAgICBmaQorCisgICAgdW5zZXQgQ0ZMQUdTIENYWEZMQUdTCisKKyAgICBvZV9ydW5tYWtlICR7RVhUUkFfRU5WfQorCisgICAgIyBCdWlsZCB0YXJnZXQgcW1ha2UKKyAgICBleHBvcnQgUU1BS0VTUEVDPSIke1N9L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKKyAgICBjZCAke1N9L3FtYWtlCisgICAgJHtPRV9RTUFLRV9RTUFLRX0KKyAgICBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisgICAgY2QgJHtTfQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICB0cmFuc2xhdGlvbl9kaXIgPSBkLmV4cGFuZCgnJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS90cmFuc2xhdGlvbnMvJykKKyAgICB0cmFuc2xhdGlvbl9uYW1lID0gZC5leHBhbmQoJyR7UVRfQkFTRV9OQU1FfS10cmFuc2xhdGlvbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgdHJhbnNsYXRpb25fZGlyLCAnXihhc3Npc3RhbnR8ZGVzaWduZXJ8bGluZ3Vpc3R8cXR8cXRjb25maWd8cXZmYnxxdHNjcmlwdClfKC4qKVwucW0kJywgdHJhbnNsYXRpb25fbmFtZSwgJyR7UE59IHRyYW5zbGF0aW9uIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycgKQorIAorICAgIHBocmFzZWJvb2tfZGlyID0gZC5leHBhbmQoJyR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vcGhyYXNlYm9va3MvJykKKyAgICBwaHJhc2Vib29rX25hbWUgPSBkLmV4cGFuZCgnJHtRVF9CQVNFX05BTUV9LXBocmFzZWJvb2stJXMnKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzJXMiICUgKGQuZXhwYW5kKCcke0R9JyksIHBocmFzZWJvb2tfZGlyKSk6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBocmFzZWJvb2tfZGlyLCAnXiguKilcLnFwaCQnLCBwaHJhc2Vib29rX25hbWUsICcke1BOfSBwaHJhc2Vib29rIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycgKQorICAgIGVsc2U6CisgICAgICAgIGJiLm5vdGUoIlRoZSBwYXRoIGRvZXMgbm90IGV4aXN0OiIsIGQuZXhwYW5kKCcke0R9JyksIHBocmFzZWJvb2tfZGlyKQorIAorICAgICMgUGFja2FnZSBhbGwgdGhlIHBsdWdpbnMgYW5kIHRoZWlyIC1kYmcgdmVyc2lvbiBhbmQgY3JlYXRlIGEgbWV0YSBwYWNrYWdlCisgICAgZGVmIHF0b3BpYV9zcGxpdChwYXRoLCBuYW1lLCBnbG9iKToKKyAgICAgICAgIiIiCisgICAgICAgIFNwbGl0IHRoZSBwYWNrYWdlIGludG8gYSBub3JtYWwgYW5kIC1kYmcgcGFja2FnZSBhbmQgdGhlbiBhZGQgdGhlCisgICAgICAgIG5ldyBwYWNrYWdlcyB0byB0aGUgbWV0YSBwYWNrYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8lcy8nICUgcGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcyVzIiAlIChkLmV4cGFuZCgnJHtEfScpLCBwbHVnaW5fZGlyKSk6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGUgcGF0aCBkb2VzIG5vdCBleGlzdDoiLCBkLmV4cGFuZCgnJHtEfScpLCBwbHVnaW5fZGlyKQorICAgICAgICAgICAgcmV0dXJuCisgCisgICAgICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tJXMtJSVzJyAlIG5hbWUpCisgICAgICAgIGRldl9wYWNrYWdlcyA9IFtdCisgICAgICAgIGRldl9ob29rID0gbGFtYmRhIGZpbGUscGtnLGIsYyxkOmRldl9wYWNrYWdlcy5hcHBlbmQoKGZpbGUscGtnKSkKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgZ2xvYiwgcGx1Z2luX25hbWUsICcke1BOfSAlcyBmb3IgJSVzJyAlIG5hbWUsIGV4dHJhX2RlcGVuZHM9JycsIGhvb2s9ZGV2X2hvb2spCisgICAgICAgICMgQ3JlYXRlIGEgLWRiZyBwYWNrYWdlIGFzIHdlbGwKKyAgICAgICAgcGx1Z2luX2Rpcl9kYmcgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvJXMvLmRlYnVnJyAlIHBhdGgpCisgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgRmFsc2UpCisgICAgICAgIGZvciAoZmlsZSxwYWNrYWdlKSBpbiBkZXZfcGFja2FnZXM6CisgICAgICAgICAgICBwYWNrYWdlcyA9ICIlcyAlcy1kYmciICUgKHBhY2thZ2VzLCBwYWNrYWdlKQorICAgICAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHBsdWdpbl9kaXJfZGJnLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKQorICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRiZyIgJSBwYWNrYWdlLCBmaWxlX25hbWUpCisgICAgICAgICAgICBkLnNldFZhcigiREVTQ1JJUFRJT05fJXMtZGJnIiAlIHBhY2thZ2UsICIke1BOfSAlcyBmb3IgJXMiICUgKG5hbWUsIHBhY2thZ2UpKQorCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsIHBhY2thZ2VzKQorCisgICAgcXRvcGlhX3NwbGl0KCdhY2Nlc3NpYmxlJywgICAgJ2FjY2Vzc2libGUnLCAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnY29kZWNzJywgICAgICAgICdjb2RlYycsICAgICAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2RlY29yYXRpb25zJywgICAnZGVjb3JhdGlvbicsICAgICdebGlicWRlY29yYXRpb24oLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZGVzaWduZXInLCAgICAgICdkZXNpZ25lcicsICAgICAgJ15saWIoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZ2Z4ZHJpdmVycycsICAgICdnZnhkcml2ZXInLCAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2dyYXBoaWNzc3lzdGVtcycsJ2dyYXBoaWNzc3lzdGVtcycsICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdrYmRkcml2ZXJzJywgICAgJ2tiZGRyaXZlcicsICAgICAnXmxpYnEoLiopa2JkZHJpdmVyXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnbW91c2Vkcml2ZXJzJywgICdtb3VzZWRyaXZlcicsICAgJ15saWJxKC4qKW1vdXNlZHJpdmVyXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnaWNvbmVuZ2luZXMnLCAgICdpY29uZW5naW5lJywgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2ltYWdlZm9ybWF0cycsICAnaW1hZ2Vmb3JtYXQnLCAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdpbnB1dG1ldGhvZHMnLCAgJ2lucHV0bWV0aG9kJywgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc3FsZHJpdmVycycsICAgICdzcWxkcml2ZXInLCAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3NjcmlwdCcsICAgICAgICAnc2NyaXB0JywgICAgICAgICdebGlicXRzY3JpcHQoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc3R5bGVzJywgICAgICAgICdzdHlsZScsICAgICAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3Bob25vbl9iYWNrZW5kJywncGhvbm9uLWJhY2tlbmQnLCdebGlicGhvbm9uXyguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdiZWFyZXInLCAgICAgICAgJ2JlYXJlcicsICAgICAgICAnXmxpYnEoLiopYmVhcmVyXC5zbyQnKQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMX1JPT1Q9JHtEfQorCisJIyBJbnN0YWxsIGEgcHJvcGVyIHRhcmdldCB2ZXJzaW9uIG9mIHFtYWtlCisJcm0gJHtEfS8ke2JpbmRpcn0vcW1ha2UKKwlpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlMiAke0R9JHtiaW5kaXJ9L3FtYWtlCisKKwkjIGZpeCBwa2djb25maWcsIGxpYnRvb2wgYW5kIHBybCBmaWxlcworCXNlZCAtaSAtZSAncyMtTCR7U30vbGliL1w/IyNnJyBcCisJCQktZSAncyMtTCR7U1RBR0lOR19MSUJESVJ9L1w/IyNnJyBcCisJCQktZSAncyNTVEFHSU5HX0xJQkRJUn0jbGliZGlyfScjZyBcCisJCQktZSAncyMtTCR7bGliZGlyfS9cPyMjZycgXAorCQkJLWUgcyMnJChPRV9RTUFLRV9MSUJTX1gxMSknIyIke09FX1FNQUtFX0xJQlNfWDExfSIjZyBcCisJCQktZSAncyMiIC1XbCwtcnBhdGgtbGluaywke1N9L2xpYi9cPyIjI2cnIFwKKwkJCS1lICdzIyIgLVdsLC1ycGF0aC1saW5rLCR7bGliZGlyfS9cPyIjI2cnIFwKKwkJCS1lICdzI0lpbiNJJHtpbiNnJyBcCisJCQktZSAncyMtTFwuXC4vXC5cLi9XZWJDb3JlL3JlbGVhc2Vcc1wrLUxcLlwuL1wuXC4vSmF2YVNjcmlwdENvcmUvcmVsZWFzZVxzXCstbHdlYmNvcmUjI2cnIFwKKwkJCS1lICdzIy1sanNjb3JlIyNnJyBcCisJCQkke0R9JHtsaWJkaXJ9LyoubGEgJHtEfSR7bGliZGlyfS8qLnBybCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisKKwkjIGZpeCBwa2djb25maWcgZmlsZXMKKwlzZWQgLWkgLWUgcyMibW9jX2xvY2F0aW9uPS4qJCIjIm1vY19sb2NhdGlvbj0ke2JpbmRpcn0vbW9jNCIjIFwKKwkJCS1lIHMjInVpY19sb2NhdGlvbj0uKiQiIyJ1aWNfbG9jYXRpb249JHtiaW5kaXJ9L3VpYzQiIyBcCisJCQkke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisJZm9yIG5hbWUgaW4gJHtRVF9MSUJfTkFNRVN9OyBkbworCQlzZWQgLWkgLWUgL1JlcXVpcmVzL3MjIiR7bmFtZX0iIyIke25hbWV9JHtRVF9MSUJJTkZJWH0iI2cgJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCWRvbmUKKworCSMgUVQgYWJ1c2VzICRpbmNsdWRlZGlyIHRvIHBvaW50IHRvIGl0cyBoZWFkZXJzLCB3aGljaCBicmVha3MgcGtnY29uZmlnIHN5c3Jvb3QsIHNvIG1hbnVhbGx5IGZpeCBpdCB1cCBoZXJlOgorCWZvciBwYyBpbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjIDsgZG8KKwkJc2VkIC1pIC1lICJzOnByZWZpeH0vaW5jbHVkZS8ke1FUX0RJUl9OQU1FfS8kKGJhc2VuYW1lICRwYyAucGMpOnByZWZpeH0vaW5jbHVkZToiIFwKKwkJCQktZSAnczpJUHs6SSR7OmcnICRwYworCWRvbmUKKworCSNBcHBlbmQgYW4gRSB0byB0aGUgcXRkZW1vIGZpbGUKKwlpZiBbIC1uICIke1FUX0xJQklORklYfSIgXSA7IHRoZW4KKwkJWyAtZiAke0R9JHtiaW5kaXJ9L3F0ZGVtbyBdICYmIG12ICR7RH0ke2JpbmRpcn0vcXRkZW1vICR7RH0ke2JpbmRpcn0vcXRkZW1vJHtRVF9MSUJJTkZJWH0KKwlmaQorCisJc2NyaXB0PSIke0R9LyR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vZW52aXJvbm1lbnQtc2V0dXAiCisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRVF9ESVJfTkFNRT0ke1FUX0RJUl9OQU1FfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRVF9MSUJJTkZJWD0ke1FUX0xJQklORklYfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9BUj1hcicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DQz1nY2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYPWcrKycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSU5LPWcrKycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQ9JHtsaWJkaXJ9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVD0ke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX01PQz0ke2JpbmRpcn0vbW9jJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQz0ke2JpbmRpcn0vdWljJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQzM9JHtiaW5kaXJ9L3VpYzMnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUkNDPSR7YmluZGlyfS9yY2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNDUFAyWE1MPSR7YmluZGlyfS9xZGJ1c2NwcDJ4bWwnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQPSR7YmluZGlyfS9xZGJ1c3htbDJjcHAnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9xY29uZmlnLnByaScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRTUFLRVNQRUM9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL2xpbnV4LWcrKycgPj4gJHNjcmlwdAorCWNobW9kIDA3NTUgJHNjcmlwdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDRfYXJjaC5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NF9hcmNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTRjMjg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDRfYXJjaC5pbmMKQEAgLTAsMCArMSwyMiBAQAoraW5oZXJpdCBzaXRlaW5mbworCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworc2V0X2FyY2goKSB7CisgICBjYXNlICR7VEFSR0VUX0FSQ0h9IGluCisgICAgICAgYWFyY2g2NCopIFFUX0FSQ0g9YWFyY2g2NCA7OworICAgICAgIGFybSopICAgICBRVF9BUkNIPWFybSA7OworICAgICAgIGkqODYqKSAgICBRVF9BUkNIPWkzODYgOzsKKyAgICAgICBtaXBzKikgICAgUVRfQVJDSD1taXBzIDs7CisgICAgICAgcG93ZXJwYyopIFFUX0FSQ0g9cG93ZXJwYyA7OworICAgICAgIHg4Nl82NCopICBRVF9BUkNIPXg4Nl82NCA7OworICAgZXNhYworfQorCitzZXRfZW5kaWFuKCkgeworICAgIGlmIFsgJHtTSVRFSU5GT19FTkRJQU5ORVNTfSA9ICJsZSIgXSA7IHRoZW4KKyAgICAgICAgUVRfRU5ESUFOPSItbGl0dGxlLWVuZGlhbiIKKyAgICBlbGlmIFsgJHtTSVRFSU5GT19FTkRJQU5ORVNTfSA9ICJiZSIgXSA7IHRoZW4KKyAgICAgICAgUVRfRU5ESUFOPSItYmlnLWVuZGlhbiIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L1JFQURNRSBiL21ldGEvcmVjaXBlcy1ydC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3NTU4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9SRUFETUUKQEAgLTAsMCArMSwxMyBAQAorVGhlIHJlY2lwZXMtcnQgcmVjaXBlcyBwcm92aWRlIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nCit0aGUgUFJFRU1QVF9SVCBrZXJuZWwuIFRoZSBjb3JlLWltYWdlLXJ0Ki5iYiBpbWFnZXMgYXJlIG1pbmltYWwgaW1hZ2VzIHdpdGgKK2EgY291cGxlIGV4dHJhIHBhY2thZ2VzLCBpbmNsdWRpbmcgcnQtdGVzdHMuIEluIG9yZGVyIHRvIGJ1aWxkIHRoZSBpbWFnZSB3aXRoCit0aGUgbGludXgteW9jdG8tcnQga2VybmVsLCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIKK2xvY2FsLmNvbmYsIGJibGF5ZXJzLmNvbmYsIG9yIHlvdXIgJE1BQ0hJTkUuY29uZi4KKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvLXJ0IgorCitJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbmV3IEJTUCB3aGljaCBzaG91bGQgdXNlIGxpbnV4LXlvY3RvLXJ0IGJ5IGRlZmF1bHQsCit1c2UgdGhlIGxpbmUgYWJvdmUgaW4gdGhlICRNQUNISU5FLmNvbmYgaW4geW91ciBCU1AgbGF5ZXIsIGFuZCBzcGVjaWZ5IHRoZQorZm9sbG93aW5nIGluIGEgbGludXgteW9jdG8tcnQgYmJhcHBlbmQgcmVjaXBlOgorCitDT01QQVRJQkxFX01BQ0hJTkVfJE1BQ0hJTkUgPSAkTUFDSElORQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYiBiL21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC1zZGsuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3ZDU4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC1zZGsuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSByZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJTbWFsbCBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2Ugd2l0aCBhIHRlc3Qgc3VpdGUgYW5kIFwKK3Rvb2xzIGZvciByZWFsLXRpbWUgdXNlLiBJdCBpbmNsdWRlcyB0aGUgZnVsbCBtZXRhLXRvb2xjaGFpbiwgZGV2ZWxvcG1lbnQgXAoraGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBzdGFuZGFsb25lIFNESy4iCitERVBFTkRTID0gImxpbnV4LXlvY3RvLXJ0IgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MgdG9vbHMtc2RrIHRvb2xzLWRlYnVnIGVjbGlwc2UtZGVidWcgdG9vbHMtcHJvZmlsZSB0b29scy10ZXN0YXBwcyBkZWJ1Zy10d2Vha3MiCisKK0lNQUdFX0lOU1RBTEwgKz0gInJ0LXRlc3RzIGh3bGF0ZGV0ZWN0IGtlcm5lbC1kZXYiCisKK0xJQ0VOU0UgPSAiTUlUIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LmJiIGIvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjZmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QgcGx1cyBhIFwKK3JlYWwtdGltZSB0ZXN0IHN1aXRlIGFuZCB0b29scyBhcHByb3ByaWF0ZSBmb3IgcmVhbC10aW1lIHVzZS4iCitERVBFTkRTID0gImxpbnV4LXlvY3RvLXJ0IgorCitJTUFHRV9JTlNUQUxMICs9ICJydC10ZXN0cyBod2xhdGRldGVjdCIKKworTElDRU5TRSA9ICJNSVQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMS1ydC10ZXN0cy1BbGxvdy1mb3ItdXNlci1zcGVjaWZpZWQtUFlMSUIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMS1ydC10ZXN0cy1BbGxvdy1mb3ItdXNlci1zcGVjaWZpZWQtUFlMSUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI0OTNlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitNZXNzYWdlLUlkOiA8NjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MS4xMzQ3NDE5NTk3LmdpdC5kdmhhcnRAbGludXguaW50ZWwuY29tPgorRnJvbTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDExIFNlcCAyMDEyIDE1OjE5OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBydC10ZXN0czogQWxsb3cgZm9yIHVzZXItc3BlY2lmaWVkIFBZTElCCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0FsbG93IHVzZXJzIChidWlsZCBzeXN0ZW1zKSB0byBzcGVjaWZ5IFBZTElCLiBUaGlzIGFsbG93cyBmb3IgYQorY3Jvc3MtYnVpbGQtc3lzdGVtIHRvIHNwZWNpZnkgdGhlIHRhcmdldCBQWUxJQiByYXRoZXIgdGhhbiB0aGUgaG9zdAorUFlMSUIuCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorQ0M6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPgorQ0M6IEpvaG4gS2FjdXIgPGprYWN1ckByZWRoYXQuY29tPgorLS0tCisgTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAzYTgyNDA3Li42MWUyZjlmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjMsNyArMjMsNyBAQCBlbmRpZgorIENGTEFHUyA/PSAtRF9HTlVfU09VUkNFIC1XYWxsIC1Xbm8tbm9ubnVsbCAtSXNyYy9pbmNsdWRlCisgTERGTEFHUyA/PQorIAorLVBZTElCICA6PSAkKHNoZWxsIHB5dGhvbiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7ICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKCknKQorK1BZTElCICA/PSAkKHNoZWxsIHB5dGhvbiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7ICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKCknKQorIAorIGlmbmRlZiBERUJVRworIAlDRkxBR1MJKz0gLU8yCistLSAKKzEuNy4xMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2MTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gYWY5M2U1ODBkMDA1YTJiYmE2ZWQzNjUyODAwM2FmNGNmNjMxYWRiOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK01lc3NhZ2UtSWQ6IDxhZjkzZTU4MGQwMDVhMmJiYTZlZDM2NTI4MDAzYWY0Y2Y2MzFhZGI4LjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitJbi1SZXBseS1UbzogPDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEuMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK1JlZmVyZW5jZXM6IDw2Njc2NTUyMmI2MzQ5NTIzNDZmMWEzYWI3ZDAwYzcyMjJhMWY5MzYxLjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitGcm9tOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgU2VwIDIwMTIgMTQ6NTE6MTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHJ0LXRlc3RzOiBCcmVhayBvdXQgaW5zdGFsbF9od2xhdGRldGVjdAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitBbGxvdyBod2xhdGRldGVjdCB0byBiZSBpbnN0YWxsZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgcmVzdCBvZiB0aGUKK3Rlc3RzLiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIGJ1aWxkIHN5c3RlbXMgdGhhdCBwYWNrYWdlIGl0IHNlcGFyYXRlbHkKK2R1ZSB0byB0aGUgcHl0aG9uIGRlcGVuZGVuY3kuCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorQ0M6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPgorQ0M6IEpvaG4gS2FjdXIgPGprYWN1ckByZWRoYXQuY29tPgorLS0tCisgTWFrZWZpbGUgfCAxOCArKysrKysrKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDYxZTJmOWYuLjYzNmU2M2IgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xMTksMjEgKzExOSwxNSBAQCBjaGFuZ2Vsb2c6CisgCWdpdCBsb2cgPkNoYW5nZUxvZworIAorIC5QSE9OWTogaW5zdGFsbAorLWluc3RhbGw6IGFsbAorK2luc3RhbGw6IGFsbCBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisgCW1rZGlyIC1wICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuZGlyKS9tYW40IgorIAlta2RpciAtcCAiJChERVNURElSKSQoc3JjZGlyKSIgIiQoREVTVERJUikkKG1hbmRpcikvbWFuOCIKKyAJY3AgJChUQVJHRVRTKSAiJChERVNURElSKSQoYmluZGlyKSIKKy0JaWYgdGVzdCAtbiAiJChQWUxJQikiIDsgdGhlbiBcCistCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorLQkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQlmaQorIAlpbnN0YWxsIC1EIC1tIDY0NCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuYyAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9iYWNrZmlyZS5jIgorIAlpbnN0YWxsIC1tIDY0NCBzcmMvYmFja2ZpcmUvTWFrZWZpbGUgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvTWFrZWZpbGUiCisgCWd6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKyAJZ3ppcCBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorIAlnemlwIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKy0JZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IgorIAlnemlwIHNyYy9wdHNlbWF0ZXN0L3B0c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wdHNlbWF0ZXN0LjguZ3oiCisgCWd6aXAgc3JjL3NpZ3dhaXR0ZXN0L3NpZ3dhaXR0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2lnd2FpdHRlc3QuOC5neiIKKyAJZ3ppcCBzcmMvc3ZzZW1hdGVzdC9zdnNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc3ZzZW1hdGVzdC44Lmd6IgorQEAgLTE0MSw2ICsxMzUsMTYgQEAgaW5zdGFsbDogYWxsCisgCWd6aXAgc3JjL2JhY2tmaXJlL3NlbmRtZS44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NlbmRtZS44Lmd6IgorIAlnemlwIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaGFja2JlbmNoLjguZ3oiCisgCisrLlBIT05ZOiBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisraW5zdGFsbF9od2xhdGRldGVjdDogaHdsYXRkZXRlY3QKKysJaWYgdGVzdCAtbiAiJChQWUxJQikiIDsgdGhlbiBcCisrCQlta2RpciAtcCAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG1hbmRpcikvbWFuOCIgOyBcCisrCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorKwkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorKwkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorKwkJZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IiA7IFwKKysJZmkKKysKKyAuUEhPTlk6IHJlbGVhc2UKKyByZWxlYXNlOiBjbGVhbiBjaGFuZ2Vsb2cKKyAJbWtkaXIgLXAgcmVsZWFzZXMKKy0tIAorMS43LjExLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTM1ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAwN2I1ZWQ0MmQ3MDQxY2NjMDg0ODg5ZWFhOTY4MTdhYTA5N2JmNDYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDMgRmViIDIwMTUgMDM6MTA6MjUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBnemlwIGNvbW1hbmQKKworVGhlICItYyIgZG9lc24ndCB3b3JrIGluIGNvbW1hbmQgImd6aXAgZmlsZSAtYyIsIG5lZWQgdXNlICJnemlwIC1jIGZpbGUiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggMjE5YTU5MS4uYzdkMTQ3YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTE0NCw3ICsxNDQsNyBAQCBpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdAorIAkJaW5zdGFsbCAtRCAtbSA3NTUgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LnB5ICQoREVTVERJUikkKFBZTElCKS9od2xhdGRldGVjdC5weSA7IFwKKyAJCXJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKyAJCWxuIC1zICQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5ICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKy0JCWd6aXAgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaHdsYXRkZXRlY3QuOC5neiIgOyBcCisrCQlnemlwIC1jIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiIDsgXAorIAlmaQorIAorIC5QSE9OWTogcmVsZWFzZQorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOGVjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitDdXJyZW50bHkgZ3ppcCBvbiBob3N0IGlzIHVzZWQuIElmIGhvc3QgZ3ppcCBpcyBwcm92aWRlZCBieSBwaWd6LCBpdCBmYWlscyB0bworcmVkbyBpbnN0YWxsIHRoYXQgcGlneiBjYW4ndCBoYW5kbGUgdGhlIG9wdGlvbiBhZnRlciBmaWxlIG5hbWUuIFdoZW4gcnVuOgorCitnemlwIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IC1jID4gT1VUUFVUX0ZJTEUKKworRmlsZSBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCBpcyB6aXBwZWQgaW50byBiYWNrZmlyZS40Lmd6IGJ1dCB0aGUgT1VUUFVUX0ZJTEUKK2lzIGVtcHR5LiBXaGVuIHJlcnVuIGRvX2luc3RhbGwsIGl0IHNob3dzIHdhcm5pbmc6CisKK3wgZ3ppcDogc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgZG9lcyBub3QgZXhpc3QgLS0gc2tpcHBpbmcKKworYW5kIGVtcHR5IG1hbnVhbCBnemlwIGZpbGVzIGFyZSBjcmVhdGVkOgorCiskIGZpbGUgaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW40L2JhY2tmaXJlLjQuZ3oKK2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNC9iYWNrZmlyZS40Lmd6OiBlbXB0eQorCitGaXggaXQgYnkgcHV0dGluZyBvcHRpb24gJy1jJyBiZWZvcmUgdGhlIGZpbGUgbmFtZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCistLS0gZ2l0L01ha2VmaWxlLm9yaWcJMjAxNC0xMS0xNCAxNTo0NzoyNi40MDY2Mzg0MTkgKzA4MDAKKysrKyBnaXQvTWFrZWZpbGUJMjAxNC0xMS0xNCAxNTo0Njo1My44OTA2Mzc1MzMgKzA4MDAKK0BAIC0xMjcsMTUgKzEyNywxNSBAQAorIAljcCAkKFRBUkdFVFMpICIkKERFU1RESVIpJChiaW5kaXIpIgorIAlpbnN0YWxsIC1EIC1tIDY0NCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuYyAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9iYWNrZmlyZS5jIgorIAlpbnN0YWxsIC1tIDY0NCBzcmMvYmFja2ZpcmUvTWFrZWZpbGUgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvTWFrZWZpbGUiCistCWd6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKy0JZ3ppcCBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorLQlnemlwIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKy0JZ3ppcCBzcmMvcHRzZW1hdGVzdC9wdHNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcHRzZW1hdGVzdC44Lmd6IgorLQlnemlwIHNyYy9zaWd3YWl0dGVzdC9zaWd3YWl0dGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NpZ3dhaXR0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3N2c2VtYXRlc3Qvc3ZzZW1hdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3N2c2VtYXRlc3QuOC5neiIKKy0JZ3ppcCBzcmMvcG1xdGVzdC9wbXF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcG1xdGVzdC44Lmd6IgorLQlnemlwIHNyYy9iYWNrZmlyZS9zZW5kbWUuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zZW5kbWUuOC5neiIKKy0JZ3ppcCBzcmMvaGFja2JlbmNoL2hhY2tiZW5jaC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2hhY2tiZW5jaC44Lmd6IgorKwlnemlwIC1jIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40ID4iJChERVNURElSKSQobWFuZGlyKS9tYW40L2JhY2tmaXJlLjQuZ3oiCisrCWd6aXAgLWMgc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2N5Y2xpY3Rlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvcGlfdGVzdHMvcGlfc3RyZXNzLjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGlfc3RyZXNzLjguZ3oiCisrCWd6aXAgLWMgc3JjL3B0c2VtYXRlc3QvcHRzZW1hdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3B0c2VtYXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvc2lnd2FpdHRlc3Qvc2lnd2FpdHRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zaWd3YWl0dGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9zdnNlbWF0ZXN0L3N2c2VtYXRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zdnNlbWF0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL3BtcXRlc3QvcG1xdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BtcXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvYmFja2ZpcmUvc2VuZG1lLjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2VuZG1lLjguZ3oiCisrCWd6aXAgLWMgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9oYWNrYmVuY2guOC5neiIKKyAKKyAuUEhPTlk6IGluc3RhbGxfaHdsYXRkZXRlY3QKKyBpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTdmZGZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorY2hpbGRpbmZvX3QgaXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvdGggc2lnbmVkIChlcnJvcikgYW5kIHVuc2lnbmVkCisodGhyZWFkaWQpIG1lbWJlcnMuIFRodXMgYSBsYXJnZSB0aHJlYWRpZCBjb3VsZCBhcHBlYXIgYXMgYSBuZWdhdGl2ZSBlcnJvcgordmFsdWUsIHdoaWNoIHdpbGwgY2F1c2UgdW5leHBlY3RlZCBmYWlsdXJlcy4KKworY2hpbGRpbmZvX3Qgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYSBzdHJ1Y3QsIGJ1dCBpdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlCitwZXJmb3JtYW5jZS4gU28gd2Uga2VlcCBpdCBhcyBhIHVuaW9uIGJ1dCBvbmx5IGNoZWNrIGVycm9yIGFnYWluc3QgLTEuIFRoZXJlIGlzCitzdGlsbCBhIGNoYW5jZSBvZiBmYWxzZSBhbGFybSBidXQgaXQncyBzbWFsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEplc3NlIFpoYW5nIDxzZW4uemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMgfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYyBiL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMKK2luZGV4IDhiYWViMjMuLmRjMGRlOGYgMTAwNjQ0CistLS0gYS9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jCisrKysgYi9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jCitAQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3JvdXAoY2hpbGRpbmZvX3QgKmNoaWxkLAorIAkJY3R4LT53YWtlZmQgPSB3YWtlZmQ7CisgCisgCQljaGlsZFt0YWJfb2Zmc2V0K2ldID0gY3JlYXRlX3dvcmtlcihjdHgsICh2b2lkICopKHZvaWQgKilyZWNlaXZlcik7CistCQlpZiggY2hpbGRbdGFiX29mZnNldCtpXS5lcnJvciA8IDAgKSB7CisrCQlpZiggY2hpbGRbdGFiX29mZnNldCtpXS5lcnJvciA9PSAtMSApIHsKKyAJCQlyZXR1cm4gKGkgPiAwID8gaS0xIDogMCk7CisgCQl9CisgCQlzbmRfY3R4LT5vdXRfZmRzW2ldID0gZmRzWzFdOworQEAgLTMzMiw3ICszMzIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdyb3VwKGNoaWxkaW5mb190ICpjaGlsZCwKKyAJCXNuZF9jdHgtPm51bV9mZHMgPSBudW1fZmRzOworIAorIAkJY2hpbGRbdGFiX29mZnNldCtudW1fZmRzK2ldID0gY3JlYXRlX3dvcmtlcihzbmRfY3R4LCAodm9pZCAqKSh2b2lkICopc2VuZGVyKTsKKy0JCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K251bV9mZHMraV0uZXJyb3IgPCAwICkgeworKwkJaWYoIGNoaWxkW3RhYl9vZmZzZXQrbnVtX2ZkcytpXS5lcnJvciA9PSAtMSApIHsKKyAJCQlyZXR1cm4gKG51bV9mZHMraSktMTsKKyAJCX0KKyAJfQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydF9ibWFyay5weSBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydF9ibWFyay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjI4MGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5CkBAIC0wLDAgKzEsNDEyIEBACisjIS91c3IvYmluL3B5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogICAgIEJTRC0zLUNsYXVzZQorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRW5lYSBTb2Z0d2FyZSBBQgorIyBBdXRob3I6IFRob21hcyBMdW5kc3Ryw7ZtIDx0aG9tYXMubHVuZHN0cm9tQGVuZWEuY29tPgorCisjIFRoZSBzY3JpcHQgbWVhc3VyZXMgaW50ZXJydXB0IGxhdGVuY3kgdG9nZXRoZXIgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YKKyMgc3lzdGVtIGxvYWQuIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgcHJvZ3JhbXMgY3ljbGljdGVzdCBhbmQgc3RyZXNzLgorIworIyBUaGUgbWFpbiBvdXRwdXQgaXM6CisjCisjICAgQmVzdCBjYXNlIChtaW4pIGxhdGVuY3kKKyMgICAgIFRoaXMgaGFzIHZlcnkgbGltaXRlZCB2YWx1ZSwgYnV0IGlzIHByZXNlbnRlZCBzaW5jZSBpdCBjYW4gYmUgZG9uZQorIyAgICAgZWFzaWx5CisjCisjICAgQXZlcmFnZSBsYXRlbmN5CisjICAgICBUaGlzIHZhbHVlIGlzIG9mIGludGVycmVzdCBmb3IgdGhyb3VnaHB1dCBvcmllbnRlZCBzeXN0ZW1zLiBMaW1pdGVkCisjICAgICB2YWx1ZSBmb3IgYSByZWFsLXRpbWUgc3lzdGVtLiBBbHNvIHByZXNlbnRlZCBiZWNhdXNlIGl0IGlzIGVhc3kgdG8gZG8uCisjCisjICAgV29yc3QgY2FzZSAobWF4KSBsYXRlbmN5CisjICAgICBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBudW1iZXIgZm9yIGEgcmVhbC10aW1lIHN5c3RlbS4gVGhlIG51bWJlcgorIyAgICAgcHJlc2VudGVkIGlzIChvZiBjb3VyY2UpIHRoZSBsYXJnZXN0IG51bWJlciBvYnNlcnZlZC4gVGhlIGNoYWxsZW5nZQorIyAgICAgaXMgdG8ga25vdyBob3cgdGhlIG9ic2VydmVkIHdvcnN0IGNhc2UgcmVsYXRlcyB0byB0aGUgYWN0dWFsIHdvcnN0IGNhc2UuCisjCisjICAgICBUbyBnZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgY29uZmlkZW5jZSwgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgdXNlZDoKKyMgICAgIDEpIEluc3RlYWQgb2Ygb25lIGxvbmcgcnVuLCB0aGUgbWVhc3VyZW1lbnQgaXMgbWFkZSBhcyBhIHNldCBvZiBzaG9ydGVyCisjICAgICAgICBydW5zLiBUaGUgbnVtYmVyIG9mIHJ1bnMgbXVzdCBiZSBhIHBvd2VyIG9mIDIgZm9yIHJlYXNvbnMgdGhhdCB3aWxsCisjICAgICAgICBzaG9ybHR5IGJlIG9idmlvdXMKKyMKKyMgICAgIDIpIEZpcnN0LCBhIGxpc3Qgb2YgdGhlIG1heCB2YWx1ZXMgYXJlIGNyZWF0ZWQuCisjCisjICAgICAzKSBUaGUgc21hbGxlc3QgdmFsdWUgaW4gdGhhdCBsaXN0IGlzIHJlY29yZGVkLgorIworIyAgICAgNCkgVGhlbiBhIG5ldyBsaXN0IGlzIGNyZWF0ZSBieSB0YWtpbmcgdGhlIG1heCB2YWx1ZSBvZiBlYWNoIHBhaXIgb2YKKyMgICAgICAgIHZhbHVlcyBpbiB0aGUgb3JpZ2luYWwgbGlzdC4gSW4gdGhpcyBsaXN0IHRoZSBzbWFsbGVzdCB2YWx1ZSBpcworIyAgICAgICAgcmVjb3JkZWQuCisjCisjICAgICA1KSBTdGVwIDMgaXMgcmVwZWF0ZWQgdW50aWwgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUgaW4gdGhlIGxpc3QuIFNlZQorIyAgICAgICAgZXhhbXBsZSBiZWxvdzoKKyMKKyMgICAgICAgIFNhbXBsZXM6CisjICAgICAgICAgIHwgIDQ0IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNzcgfCAgNzcgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDExOCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTE5IHwgMTE5IHwgMTE5IHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMzggfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA1NyB8IDEzOCB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTc1IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMzAgfCAxNzUgfCAxNzUgfCAxNzUgfCAgICAgfAorIyAgICAgICAgICB8ICA1NCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTUwIHwgMTUwIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNDcgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA1OSB8ICA1OSB8IDE1MCB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTk5IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMTUgfCAxOTkgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDE3NyB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTI5IHwgMTc3IHwgMTk5IHwgMTk5IHwgMTk5IHwKKyMKKyMgICAgICAgIFNtYWxsZXN0IHZhbHVlOgorIyAgICAgICAgICB8ICA0NCB8ICA1OSB8IDExOSB8IDE3NSB8IDE5OSB8CisjCisjICAgICA2KSBUaGUgZ2VuZXJhdGVkIGxpc3Qgb2Ygc21hbGxlc3QgdmFsdWVzIGlzIGFuYWx5emVkLiBJbiB0aGlzIGNhc2UsIGl0CisjICAgICAgICBjYW4gYmUgb2JzZXJ2ZWQgdGhhdCB0aGUgdmFsdWVzIGFyZSBpbmNyZWFzaW5nIHNpZ25pZmljYW50bHkgdGhyb3VnaAorIyAgICAgICAgdGhlIGVudGlyZSBsaXN0LCB3aGljaCBsZWFkcyB0byB0aGUgY29uY2x1c2lvbiB0aGF0IHRoZSBudW1iZXIgb2YKKyMgICAgICAgIHNhbXBsZXMgaXMgdG9vIHNtYWxsLgorIyAgICAgICAgSWYgaW5zdGVhZCB0aGUgbGlzdCBoYWQgYmVlbiAoMTY3LCAxOTEsIDE5NiwgMTk5LCAxOTkpLCB0aGVyZSBoYWQKKyMgICAgICAgIGJlZW4gYSB2ZXJ5IHNtYWxsLCBvciBubywgaW5jcmVhc2UgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gV2UgbWlnaHQKKyMgICAgICAgIHRoZW4gc3VzcGVjdCB0aGF0IHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpcyBwcm9iYWJseSBsYXJnZSBlbm91Z2guCisjICAgICAgICBUaGVyZSBpcyBob3dldmVyIG5vIGd1YXJhbnRlZSBmb3IgdGhhdC4KKyMKKyMgICAgIFN0ZXBzIDEtMiBhcmUgZG9uZSBpbiBydW5fY3ljbGljdGVzdF9zdWl0ZQorIyAgICAgU3RlcHMgMy01IGFyZSBkb25lIGluIGdlbl9taW5tYXhfbGlzdC4KKyMgICAgIFN0ZXAgNiBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5IHNpbmNlIHRoZXJlIGlzICh5ZXQpIG5vIHdlbGwgZGVmaW5lZAorIyAgICAgRkFJTCBjcml0ZXJpb24gYW5kIGEgdGhlb3JldGljYWxseSBzb2xpZCBQQVNTIGNyaXRlcmlvbiBtYXkgbmV2ZXIgYmUKKyMgICAgIGF2YWlsYWJsZS4KKworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworCisjIFNlZSBjb21tZW50IG9uIHRoZSBmdW5jdGlvbiBzZXRfaHVuZ190bW8KK2hhc19odW5nX3Rhc2tfZGV0ZWN0aW9uID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0RmFpbChFeGNlcHRpb24pOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiVGVzdCBmYWlsdXJlOiAoIiArIHNlbGYubXNnICsgIikiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB0Y19uYW1lKHN1Yl9uYW1lKToKKyAgICAgICAgcmV0dXJuICJydF9ibWFyay5pbnRsYXQuIiArIHN1Yl9uYW1lCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvZygpIGRvZXMgdGhlIHNhbWUgam9iIGFzIHByaW50IGV4Y2VwdCB0aGF0IGEgJyMnIGlzIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcKKyMgb2YgZWFjaCBsaW5lLiBUaGlzIGNhdXNlcyBURUZFTCB0byBpZ25vcmUgaXQKKworZGVmIGxvZygqbXNnKToKKyAgICAgICAgdG1wID0gIiIuam9pbihtYXAoc3RyLCBtc2cpKSAjICdtYXAoc3RyLCAuLi4nIGFsbG93cyBudW1iZXJzCisgICAgICAgIGZvciBsaW5lIGluIHRtcC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICBwcmludCAiIyIsIGxpbmUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBsb2coKSwgYnV0IHdpdGggYSB0aW1lc3RhbXAgYWRkZWQKKworZGVmIGxvZ190cygqbXNnKToKKyAgICAgICAgdHMgPSB0aW1lLmxvY2FsdGltZSgpCisgICAgICAgIHN0YW1wID0gIiUyZDolMDJkOiUwMmQ6ICIgJSAodHMudG1faG91ciwgdHMudG1fbWluLCB0cy50bV9zZWMpCisgICAgICAgIGxvZyhzdGFtcCwgKm1zZykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGxvZ190ZXN0X2hlYWRlcihzZXFfbm8sIG5yX29mX3Rlc3RzLCBuYW1lKToKKyAgICAgICAgbG9nKCI9IiAqIDc4KQorICAgICAgICBsb2coKQorICAgICAgICBsb2coIiAgVGVzdCBjYXNlICglZC8lZCk6ICVzIiAlIChzZXFfbm8sIG5yX29mX3Rlc3RzLCB0Y19uYW1lKG5hbWUpKSkKKyAgICAgICAgbG9nKCkKKyAgICAgICAgbG9nKCIuIiAqIDc4KQorICAgICAgICBsb2coKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgc3RhcnRfc3RyZXNzKCphcmdzKToKKyAgICAgICAgc3RyZXNzX2NtZCAgICAgICAgID0gWyAic3RyZXNzIiBdCisgICAgICAgIGFkZGVkX3N0cmVzc190eXBlcyA9IFtdCisgICAgICAgIHJlcV9zdHJlc3NfdHlwZXMgICA9IHNldChhcmdzKQorICAgICAgICBjcHVfY250ICAgICAgICAgICAgPSBzdHIobXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorCisgICAgICAgICMgVGhlIGZ1bmN0aW9uIGNvbmRfYWRkX3N0cmVzcyBhcHBlbmRzIHRoZSBvcHRpb25zIHRvIHRoZSBzdHJlc3MKKyAgICAgICAgIyBjb21tYW5kIGlmIHRoZSBzdHJlc3MgdHlwZSBpcyBpbiB0aGUgc2V0IG9mIHJlcXVlc3RlZCBzdHJlc3MgdHlwZXMKKworICAgICAgICBkZWYgY29uZF9hZGRfc3RyZXNzKHN0cmVzc190eXBlLCBvcHRpb25zKToKKyAgICAgICAgICAgICAgICBpZiBzdHJlc3NfdHlwZSBpbiByZXFfc3RyZXNzX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0cmVzc190eXBlcy5yZW1vdmUoc3RyZXNzX3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZF9zdHJlc3NfdHlwZXMuYXBwZW5kKHN0cmVzc190eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXNzX2NtZC5leHRlbmQob3B0aW9ucykKKworICAgICAgICAjLS0tLS0tLS0tLQorCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygiaW8iLCAgWyItaSIsIGNwdV9jbnRdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoImNwdSIsIFsiLWMiLCBjcHVfY250XSkKKyAgICAgICAgY29uZF9hZGRfc3RyZXNzKCJoZGQiLCBbIi1kIiwgY3B1X2NudCwgIi0taGRkLWJ5dGVzIiwgIjIwTSJdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoInZtIiwgIFsiLW0iLCBjcHVfY250LCAiLS12bS1ieXRlcyIsICIxME0iXSkKKworICAgICAgICB1bmtub3duID0gIiwgIi5qb2luKHJlcV9zdHJlc3NfdHlwZXMpCisgICAgICAgIGlmIHVua25vd24gIT0gIiI6CisgICAgICAgICAgICByYWlzZSBUZXN0RmFpbCgiVW5rbm93biBzdHJlc3MgdHlwZShzKTogJXMiICUgdW5rbm93bikKKworICAgICAgICBpZiBub3QgYWRkZWRfc3RyZXNzX3R5cGVzOgorICAgICAgICAgICAgICAgIGxvZygiTm8gc3RyZXNzIHJlcXVlc3RlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBhZGRlZCAgICAgICAgICA9ICIrIi5qb2luKGFkZGVkX3N0cmVzc190eXBlcykKKyAgICAgICAgc3RyZXNzX2NtZF9zdHIgPSAiICIuam9pbihzdHJlc3NfY21kKQorCisgICAgICAgIGxvZygiU3RhcnRpbmcgc3RyZXNzKCIsIGFkZGVkLCAiKSIpCisgICAgICAgIGxvZygiICBDb21tYW5kOiAnIiwgc3RyZXNzX2NtZF9zdHIsICInIikKKyAgICAgICAgbG9nKCkKKworICAgICAgICAjIHByZWV4ZWNfZm49b3Muc2V0c2lkIGNhdXNlcyBzdHJlc3MgdG8gYmUgZXhlY3V0ZWQgaW4gYSBzZXBhcmF0ZQorICAgICAgICAjIHNlc3Npb24sID0+IGl0IGdldHMgYSBuZXcgcHJvY2VzcyBncm91cCAoaW5jbC4gY2hpbGRyZW4pLiBJdAorICAgICAgICAjIGNhbiB0aGVuIGJlIHRlcm1pbmF0ZWQgdXNpbmcgb3Mua2lsbHBnIGluIGVuZF9zdHJlc3Mgd2l0aG91dAorICAgICAgICAjIHRlcm1pbmF0aW5nIHRoaXMgc2NyaXB0LgorCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKHN0cmVzc19jbWQsIHByZWV4ZWNfZm49b3Muc2V0c2lkKQorCisgICAgICAgIHJldHVybiBwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBlbmRfc3RyZXNzKHApOgorICAgICAgICBpZiBwIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgdmFsdWUgTm9uZSBpbmRpY2F0ZXMgdGhhdCBubyBzdHJlc3Mgc2NlbmFyaW8gd2FzIHN0YXJ0ZWQKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBwLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbCgic3RyZXNzIHByZW1hdHVyZWx5IHRlcm1pbmF0ZWQuIikKKworICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChwLnBpZCksIHNpZ25hbC5TSUdURVJNKQorICAgICAgICBsb2coIlRlcm1pbmF0ZWQgc3RyZXNzIikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHVzMmhtc19zdHIodXMpOgorICAgICAgICBzID0gKHVzKzUwMDAwMCkgLy8gMTAwMDAwMCAjIFJvdW5kIG1pY3Jvc2Vjb25kcyB0byBzCisgICAgICAgIG0gPSBzLy82MAorICAgICAgICBzIC09IDYwKm07CisgICAgICAgIGggPSBtLy82MAorICAgICAgICBtIC09IDYwKmgKKworICAgICAgICByZXR1cm4gIiVkOiUwMmQ6JTAyZCIgJSAoaCwgbSwgcykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU29tZXRpbWUgdGhlIGh1bmcgdGFzayBzdXBlcnZpc2lvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZgorIyBjeWNsaWN0ZXN0IChjeWNsaWN0ZXN0IHN0YXJ2ZXMgc3RyZXNzKS4gVG8gYXZvaWQgdGhhdCwgdGhlIHN1cGVydmlzaW9uCisjIGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkCisKK2RlZiBzZXRfaHVuZ190bW8obmV3X3Rtbyk6CisgICAgICAgIGdsb2JhbCBoYXNfaHVuZ190YXNrX2RldGVjdGlvbgorCisgICAgICAgIHRtb19maWxlID0gIi9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNrX3RpbWVvdXRfc2VjcyIKKworICAgICAgICBpZiBub3QgaGFzX2h1bmdfdGFza19kZXRlY3Rpb246CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IG9zLmFjY2Vzcyh0bW9fZmlsZSwgb3MuV19PSyk6CisgICAgICAgICAgICAgICAgbG9nKCJIdW5nIHRhc2sgZGV0ZWN0aW9uIG5vdCBzdXBwb3J0ZWQiKQorICAgICAgICAgICAgICAgIGxvZygiICAoRmlsZSAiLCB0bW9fZmlsZSwgIiBub3QgZm91bmQpIikKKyAgICAgICAgICAgICAgICBoYXNfaHVuZ190YXNrX2RldGVjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3JpZ190bW8gPSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJjYXQiLCB0bW9fZmlsZV0pLnN0cmlwKCkpCisgICAgICAgIGlmIG5ld190bW8gIT0gb3JpZ190bW86CisgICAgICAgICAgICAgICAgY21kID0gKCAiZWNobyAiICsgc3RyKG5ld190bW8pICsgIiA+ICIgKyB0bW9fZmlsZSApCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIGxvZygiQ2hhbmdlZCB0aW1lb3V0IGZvciBkZXRlY3Rpb24gb2YgaHVuZyB0YXNrczogIiwKKyAgICAgICAgICAgICAgICAgICAgb3JpZ190bW8sICIgLT4gIiwgbmV3X3RtbykKKworICAgICAgICByZXR1cm4gb3JpZ190bW8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdlbl9taW5tYXhfbGlzdChtYXhfbGlzdCk6CisgICAgICAgIHJlcyA9IFttaW4obWF4X2xpc3QpXQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdG1wID0gbWF4X2xpc3QKKyAgICAgICAgICAgICAgICBtYXhfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgd2hpbGUgdG1wOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpc3QuYXBwZW5kKG1heCh0bXAucG9wKDApLCB0bXAucG9wKDApKSkKKworICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQobWluKG1heF9saXN0KSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihtYXhfbGlzdCkgPCAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJhbWV0ZXJzIGZvciBjeWNsaWN0ZXN0OgorIworIyBPbiB0aGUgLVMgb3B0aW9uIChmcm9tIGN5Y2xpY3Rlc3QuYyk6CisjICAtUyBpbXBsaWVzIG9wdGlvbnMgLWEgLXQgLW4gYW5kIHNhbWUgcHJpb3JpdHkgb2YgYWxsIHRocmVhZHMKKyMgICAgLWE6IE9uZSB0aHJlYWQgcGVyIGNvcmUKKyMgICAgLW46IHVzZSBjbG9ja19uYW5vc2xlZXAgaW5zdGVhZCBvZiBwb3NpeCBpbnRlcnZhbCB0aW1lcnMKKyMgICAgLXQ6ICh3aXRob3V0IGFyZ3VtZW50KSBTZXQgbnVtYmVyIG9mIHRocmVhZHMgdG8gdGhlIG51bWJlcgorIyAgICAgICAgIG9mIGNwdXMKKworaW50ZXJ2YWxfY29yZV8wID0gMTAwICAgICAjIFRpbWVyIGludGVydmFsIG9uIGNvcmUgMCBbdXNdCitpbnRlcnZhbF9kZWx0YSAgPSAyMCAgICAgICMgSW50ZXJ2YWwgaW5jcmVtZW50IGZvciBlYWNoIGNvcmUgW3VzXQorbG9vcF9jb3VudCAgICAgID0gMzAwMDAgICAjIE51bWJlciBvZiBsb29wcyAob24gY29yZSAwKS4KKworY21kID0gKCJjeWNsaWN0ZXN0IiwKKyAgICAgICAiLVMiLCAgICAgICAgICAgICAjIFN0YW5kYXJkIFNNUCB0ZXN0aW5nLiBTZWUgYmVsb3cKKyAgICAgICAiLXAiLCAiOTkiLCAgICAgICAjIFJUIHByaW9yaXR5IDk5CisgICAgICAgIi1xIiwgICAgICAgICAgICAgIyBRdWlldCBtb2RlLCBpLmUuIHByaW50IG9ubHkgYSBzdW1tYXJ5CisgICAgICAgIi1pIiwgc3RyKGludGVydmFsX2NvcmVfMCksCisgICAgICAgIi1kIiwgc3RyKGludGVydmFsX2RlbHRhKSwKKyAgICAgICAiLWwiLCBzdHIobG9vcF9jb3VudCkKKyAgICAgICApCityZXggPSByZS5jb21waWxlKCJDOlxzKihcZCspLipNaW46XHMqKFxkKykuKkF2ZzpccyooXGQrKS4qTWF4OlxzKihcZCspIikKKworZGVmIHJ1bl9jeWNsaWN0ZXN0X29uY2UoKToKKyAgICAgICAgcmVzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kKQorCisgICAgICAgICMgbWlubGlzdCBhbmQgbWF4bGlzdCBhcmUgbGlzdHMgd2l0aCB0aGUgZXh0cmVtZXMgZm9yIGVhY2ggY29yZQorICAgICAgICAjIGF2Z19jbnQgaXMgdGhlIHN1bSBvZiBjeWNsZXMgZm9yIGFsbCBjb3JlcworICAgICAgICAjIGF2Z19zdW0gaXMgdGhlIHN1bSBvZiAoY3ljbGUgY291bnQqYXZlcmFnZSkgZm9yIGVhY2ggY29yZQorICAgICAgICAjICAgICBTaW5jZSBjeWNsaWN0ZXN0IHJ1bnMgZGlmZmVyZW50IG51bWJlciBvZiBjeWNsZXMgb24KKyAgICAgICAgIyAgICAgZGlmZmVyZW50IGNvcmVzLCBhdmdfc3VtL2F2Z19jbnQgZ2l2ZXMgYSBtb3JlIGFjY3VyYXRlCisgICAgICAgICMgICAgIHZhbHVlIG9mIHRoZSBvdmVyYWxsIGF2ZXJhZ2UgdGhhbiBqdXN0IHRha2luZyB0aGUgYXZlcmFnZQorICAgICAgICAjICAgICBvZiBlYWNoIGNvcmUncyBhdmVyYWdlcworCisgICAgICAgIG1pbmxpc3QgPSBbXQorICAgICAgICBtYXhsaXN0ID0gW10KKyAgICAgICAgYXZnX3N1bSA9IDAKKyAgICAgICAgYXZnX2NudCA9IDAKKworICAgICAgICBmb3IgbGluZSBpbiByZXMuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgbSA9IHJleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbWlubGlzdC5hcHBlbmQoaW50KG0uZ3JvdXAoMikpKQorICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGlzdC5hcHBlbmQoaW50KG0uZ3JvdXAoNCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGludChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYXZnX3N1bSArPSBuICogaW50KG0uZ3JvdXAoMykpCisgICAgICAgICAgICAgICAgICAgICAgICBhdmdfY250ICs9IG4KKworICAgICAgICByZXR1cm4gbWluKG1pbmxpc3QpLCBbYXZnX3N1bSwgYXZnX2NudF0sIG1heChtYXhsaXN0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBIHByZWNvbmRpdGlvbiBmb3IgdGhlIHRyYWNraW5nIG9mIG1pbi1tYXggdmFsdWVzIGlzIHRoYXQKKyMgdGhlIHN1aXRlIHNpemUgb3MgYSBwb3dlciBvZiAyLgorCitOICAgICAgICAgID0gNQorc3VpdGVfc2l6ZSA9IDIqKk4KKworZXN0X2V4ZWNfdGltZV9vbmNlICA9IGludGVydmFsX2NvcmVfMCAqIGxvb3BfY291bnQKK2VzdF9leGVjX3RpbWVfc3VpdGUgPSBzdWl0ZV9zaXplICogZXN0X2V4ZWNfdGltZV9vbmNlCisKK2RlZiBydW5fY3ljbGljdGVzdF9zdWl0ZSgpOgorICAgICAgICBsb2coIlN0YXJ0aW5nIGN5Y2xpY3Rlc3QiKQorICAgICAgICBsb2coIiAgQ29tbWFuZCAgICAgICAgICA6ICIsICIgIi5qb2luKGNtZCkpCisgICAgICAgIGxvZygiICBOdW1iZXIgb2YgY3ljbGVzIDogIiwgbG9vcF9jb3VudCpzdWl0ZV9zaXplLAorICAgICAgICAgICAgIiAoIiwgc3VpdGVfc2l6ZSwgIiBzZXRzIG9mICIsIGxvb3BfY291bnQsICIgY3ljbGVzKSIpCisgICAgICAgIGxvZygiICBFeGVjLiB0aW1lIChlc3QpIDogIiwgdXMyaG1zX3N0cihlc3RfZXhlY190aW1lX3N1aXRlKSkKKyAgICAgICAgbG9nKCkKKworICAgICAgICBvcmlnX3RtbyA9IHNldF9odW5nX3RtbygwKSAjIDAgPT4gRGlzYWJsZQorCisgICAgICAgICMgZmxvYXQoJ2luZicpIGVtdWxhdGVzIGluZmluaXR5LiBBdCBsZWFzdCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBpcworICAgICAgICAjIGd1YXJhbnRlZWQgdG8gYmUgbGFyZ2VyIHRoYW4gYW55IGFjdHVhbCBudW1iZXIuCisgICAgICAgIGFja19taW4gPSBmbG9hdCgnaW5mJykKKyAgICAgICAgYWNrX2F2ZyA9IFswLCAwXQorCisgICAgICAgIGxvZygpCisgICAgICAgIGxvZ190cygiU3RhcnQgb2YgZXhlY3V0aW9uIikKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIG1heF9saXN0ID0gW10KKworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgc3VpdGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgdG1wX21pbiwgdG1wX2F2ZywgdG1wX21heCA9IHJ1bl9jeWNsaWN0ZXN0X29uY2UoKQorCisgICAgICAgICAgICAgICAgbXNnID0gIiUyZC8lMmQ6IiAlIChpKzEsIHN1aXRlX3NpemUpCisgICAgICAgICAgICAgICAgbXNnICs9ICIgbWluOiAlNGQiICUgdG1wX21pbgorICAgICAgICAgICAgICAgIG1zZyArPSAiIGF2ZzogJTUuMWYiICUgKGZsb2F0KHRtcF9hdmdbMF0pL3RtcF9hdmdbMV0pCisgICAgICAgICAgICAgICAgbXNnICs9ICIgbWF4OiAlNGQiICUgdG1wX21heAorICAgICAgICAgICAgICAgIGxvZ190cyhtc2cpCisKKyAgICAgICAgICAgICAgICAjIFRyYWNrIG1pbmltdW0gdmFsdWUKKyAgICAgICAgICAgICAgICBpZiB0bXBfbWluIDwgYWNrX21pbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFja19taW4gPSB0bXBfbWluCisKKyAgICAgICAgICAgICAgICAjIFRyYWNrIHNtYWxsZXN0IG1heCB2YWx1ZQorICAgICAgICAgICAgICAgIG1heF9saXN0LmFwcGVuZCh0bXBfbWF4KQorCisgICAgICAgICAgICAgICAgYWNrX2F2Z1swXSArPSB0bXBfYXZnWzBdCisgICAgICAgICAgICAgICAgYWNrX2F2Z1sxXSArPSB0bXBfYXZnWzFdCisKKyAgICAgICAgdCA9IHRpbWUudGltZSgpLXQKKyAgICAgICAgbG9nX3RzKCJDeWNsaWN0ZXN0IGNvbXBsZXRlZC4gQWN0dWFsIGV4ZWN1dGlvbiB0aW1lOiIsCisgICAgICAgICAgICAgICB1czJobXNfc3RyKHQqMTAwMDAwMCkpCisgICAgICAgIGxvZygpCisgICAgICAgIHNldF9odW5nX3RtbyhvcmlnX3RtbykKKworICAgICAgICByZXR1cm4gYWNrX21pbiwgZmxvYXQoYWNrX2F2Z1swXSkvYWNrX2F2Z1sxXSwgZ2VuX21pbm1heF9saXN0KG1heF9saXN0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBjeWNsaWN0ZXN0X3J1bm5lcjoKKyAgICAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHNlcV9ubywgbnJfb2ZfdGVzdHMsIG5hbWUsIHN0cmVzc3BhcmFtcyk6CisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dfdGVzdF9oZWFkZXIoc2VxX25vLCBucl9vZl90ZXN0cywgbmFtZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN0YXJ0X3N0cmVzcygqc3RyZXNzcGFyYW1zKQorCisgICAgICAgICAgICAgICAgICAgICAgICBibV9taW4sIGJtX2F2ZywgYm1fbWF4X2xpc3QgPSBydW5fY3ljbGljdGVzdF9zdWl0ZSgpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9zdHJlc3MocCkKKworICAgICAgICAgICAgICAgICAgICAgICAgYm1fbWF4ID0gYm1fbWF4X2xpc3RbLTFdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1pbjogJWQgdXMiICUgYm1fbWluKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJBdmc6ICUuMWYgdXMiICUgYm1fYXZnKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJNYXg6ICVkIHVzIiAlIGJtX21heCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1heCBsaXN0OiAiLCBibV9tYXhfbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlBBU1MiKQorCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgdGNfbmFtZShuYW1lKSwgIltNaW4vdXMsQXZnL3VzLE1heC91c106IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlZCwlLjFmLCVkIiAlIChibV9taW4sYm1fYXZnLCBibV9tYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiUEFTUzoiLCB0Y19uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVHJhY2ViYWNrOiIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJXRDogIiwgb3MuZ2V0Y3dkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJGQUlMIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRkFJTDoiLCB0Y19uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitydW5uZXIgPSBjeWNsaWN0ZXN0X3J1bm5lcigpCisKK3Rlc3RzID0gKCgibm9fc3RyZXNzIiwgW10pLAorICAgICAgICAgKCJjcHUiLCAgWyJjcHUiXSksCisgICAgICAgICAoImhkZCIsICBbImhkZCJdKSwKKyAgICAgICAgICgiaW8iLCAgIFsiaW8iXSksCisgICAgICAgICAoInZtIiwgICBbInZtIl0pLAorICAgICAgICAgKCJmdWxsIiwgWyJpbyIsICJjcHUiLCAiaGRkIiwgInZtIl0pLAorICAgICAgICAgKQorCitucl9vZl90ZXN0cyA9IGxlbih0ZXN0cykKK2ZvciBzZXFfbm8sIHBhcmFtcyBpbiBlbnVtZXJhdGUodGVzdHMsIHN0YXJ0PTEpOgorICAgICAgICBydW5uZXIucnVuX3Rlc3Qoc2VxX25vLCBucl9vZl90ZXN0cywgKnBhcmFtcykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNmQzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK3B5dGhvbiAuL3J0X2JtYXJrLnB5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Mi5iYiBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjkyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMTllYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Mi5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0b3IiCitERVNDUklQVElPTiA9ICJQeXRob24gdXRpbGl0eSBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCBoYXJkd2FyZSBsYXRlbmN5IGRldGVjdGlvbiBtb2R1bGUgKGh3bGF0X2RldGVjdG9yLmtvKS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9bGludXgva2VybmVsL2dpdC9jbHJrd2xsbXMvcnQtdGVzdHMuZ2l0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworcmVxdWlyZSBydC10ZXN0cy5pbmMKKworRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBod2xhdGRldGVjdAorfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGxfaHdsYXRkZXRlY3QgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBcCisJICAgICAgICAgICBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9kaXN0LXBhY2thZ2VzL2h3bGF0ZGV0ZWN0LnB5IgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi10ZXh0dXRpbHMiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLWh3bGF0LWRldGVjdG9yIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0cy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxZGIxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0cy5pbmMKQEAgLTAsMCArMSwxOSBAQAorIyBWZXJzaW9uIHYwLjkyCitQViA9ICIwLjkyIgorU1JDUkVWID0gIjVmOWYxZTNmZTMyNzQ0MGE5ZDQwNWY0YWY4ZmViMTZmZjdhOTA5ZWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Nscmt3bGxtcy9ydC10ZXN0cy5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ydC10ZXN0cy1BbGxvdy1mb3ItdXNlci1zcGVjaWZpZWQtUFlMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1ydC10ZXN0cy1CcmVhay1vdXQtaW5zdGFsbF9od2xhdGRldGVjdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYWNrYmVuY2gtZml4LWVycm9yLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgbmVlZCB0byBhcHBlbmQgcnQtdGVzdHMnIGRlZmF1bHQgQ0ZMQUdTIHRvIG91cnMKK0NGTEFHUyArPSAiLUkke1N9L3NyYy9pbmNsdWRlIC1EX0dOVV9TT1VSQ0UgLVdhbGwgLVduby1ub25udWxsIgorCisjIGNhbGxpbmcgJ3VuYW1lIC1tJyBpcyBicm9rZW4gb24gY3Jvc3NidWlsZHMKK0VYVFJBX09FTUFLRSA9ICJOVU1BPTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Mi5iYiBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjkyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZTJmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Mi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlJlYWwtVGltZSBwcmVlbXB0aW9uIHRlc3RjYXNlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vcnQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9DeWNsaWN0ZXN0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0RFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvbGliYyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LmM7YmVnaW5saW5lPTc7ZW5kbGluZT05O21kNT1lNzY4YjhkYTQ0NTU1ZmU2M2Y2NWU1YzQ5Nzg0NGNiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGlfdGVzdHMvcGlfc3RyZXNzLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xOTttZDU9YmQ0MjZhNjM0YTQzZWM2MTJlOWZiZjEyNWRmY2M5NDkiCisKK3JlcXVpcmUgcnQtdGVzdHMuaW5jCitpbmhlcml0IHB0ZXN0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL3J0X2JtYXJrLnB5IFwKKyAgICAgICAgICAgIgorIyBEbyBub3QgaW5zdGFsbCBod2xhdGRldGVjdAorRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0nJyIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICAgICAgY3AgJHtXT1JLRElSfS9ydF9ibWFyay5weSAke0R9JHtQVEVTVF9QQVRIfQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHN0cmVzcyBweXRob24gcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLW11bHRpcHJvY2Vzc2luZyBweXRob24tZGF0ZXRpbWUgcHl0aG9uLXJlIHB5dGhvbi1sYW5nIgorCitGSUxFU18ke1BOfSArPSAiJHtwcmVmaXh9L3NyYy9iYWNrZmlyZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMgYi9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMzdmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmUuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiU2F0byB0aGVtZSBlbmdpbmUgZm9yIEdUSysiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSAmIExHUEx2MisiCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitERVBFTkRTID0gImd0aysiCitSREVQRU5EU19ndGstdGhlbWUtc2F0byA9ICJndGstc2F0by1lbmdpbmUiCisKK1BBQ0tBR0VTICs9ICJndGstdGhlbWUtc2F0byIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLnNvICIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8uZGVidWciCitGSUxFU19ndGstdGhlbWUtc2F0byA9ICIke2RhdGFkaXJ9L2ljb25zICR7ZGF0YWRpcn0vdGhlbWVzIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWZvciBpIGluIGBscyBndGstY29tbW9uYDsgZG8KKwkJbG4gLXNmIC4uL2d0ay1jb21tb24vJGkgZ3RrMi1lbmdpbmUvJGkKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTRkOThhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lX2dpdC5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIGd0ay1zYXRvLWVuZ2luZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zYXRvLXV0aWxzLmg7ZW5kbGluZT0yNDttZDU9NzA4ZjI4Y2ZlN2ZlMDI4ZDQ5N2FhZjQzODliODBiNjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhdG8tbWFpbi5jO2VuZGxpbmU9MjQ7bWQ1PWI1ZTVkZGRlYmNhNTcwMjc1YmVjYjUxYjUyNmU0YzVhIgorCitTUkNSRVYgPSAiNDc0MGFkOGQ1M2FiYTQzNjhjZTNlMDNiMDZjZmRjNjllYjg2ZGNkYyIKK1BWID0gIjAuMy4zK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLWRldi5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTY5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLWRldi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1zYXRvLmJiCisKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0byBmb3IgZGV2ZWxvcG1lbnQgd29yay4gSXQgaW5jbHVkZXMgZXZlcnl0aGluZyBcCit3aXRoaW4gY29yZS1pbWFnZS1zYXRvIHBsdXMgYSBuYXRpdmUgdG9vbGNoYWluLCBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBhbmQgXAordGVzdGluZyBsaWJyYXJpZXMsIHByb2ZpbGluZyBhbmQgZGVidWcgc3ltYm9scy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGsuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4MzZmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1zYXRvLmJiCisKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0byBzdXBwb3J0IHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyB3aXRoaW4gXAorY29yZS1pbWFnZS1zYXRvIHBsdXMgbWV0YS10b29sY2hhaW4sIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBcCitmb3JtIGEgc3RhbmRhbG9uZSBTREsuIgorCitRVDRQS0cgPSAicXQ0LXBrZ3MiCitRVDRQS0dfbWlwczY0ID0gIiIKK1FUNFBLR19taXBzNjRuMzIgPSAiIgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MgdG9vbHMtc2RrICR7UVQ0UEtHfSBcCisJdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyBzc2gtc2VydmVyLW9wZW5zc2giCisKK0lNQUdFX0lOU1RBTEwgKz0gImtlcm5lbC1kZXZzcmMiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMjQ2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiCkBAIC0wLDAgKzEsMTEgQEAKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0bywgYSBtb2JpbGUgZW52aXJvbm1lbnQgYW5kIHZpc3VhbCBzdHlsZSBmb3IgXAorbW9iaWxlIGRldmljZXMuIFRoZSBpbWFnZSBzdXBwb3J0cyBYMTEgd2l0aCBhIFNhdG8gdGhlbWUsIFBpbWxpY28gXAorYXBwbGljYXRpb25zLCBhbmQgY29udGFpbnMgdGVybWluYWwsIGVkaXRvciwgYW5kIGZpbGUgbWFuYWdlci4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIHgxMS1zYXRvIHNzaC1zZXJ2ZXItZHJvcGJlYXIgaHdjb2RlY3MiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfSU5TVEFMTCArPSAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcCBiL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTJkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9Tm90ZXMKK0V4ZWM9L3Vzci9iaW4vbGVhZnBhZAorQ29tbWVudD1UZXh0IEVkaXRvcgorSWNvbj1hY2Nlc3Nvcmllcy10ZXh0LWVkaXRvcgorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R1RLO1V0aWxpdHk7VGV4dEVkaXRvcjsKK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9vd2wtbWVudS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWJmNzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9vd2wtbWVudS5wYXRjaApAQCAtMCwwICsxLDYzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCistLS0gdG1wL3NyYy9tZW51LmMub3JpZwkyMDA3LTA0LTIzIDEyOjA4OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvbWVudS5jCTIwMDctMDQtMjMgMTI6MDg6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtMTUyLDcgKzE1Miw3IEBACisgCX0KKyAJCisgCWFjY2VsX2dyb3VwID0gZ3RrX2FjY2VsX2dyb3VwX25ldygpOworLQlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlVfQkFSLCAiPG1haW4+IiwgYWNjZWxfZ3JvdXApOworKwlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlUsICI8bWFpbj4iLCBhY2NlbF9ncm91cCk7CisgCWd0a19pdGVtX2ZhY3Rvcnlfc2V0X3RyYW5zbGF0ZV9mdW5jKGlmYWN0b3J5LCBtZW51X3RyYW5zbGF0ZSwgTlVMTCwgTlVMTCk7CisgCWd0a19pdGVtX2ZhY3RvcnlfY3JlYXRlX2l0ZW1zKGlmYWN0b3J5LCBubWVudV9pdGVtcywgbWVudV9pdGVtcywgTlVMTCk7CisgCWd0a193aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1cod2luZG93KSwgYWNjZWxfZ3JvdXApOworCistLS0gdG1wL3NyYy93aW5kb3cuYy5vcmlnCTIwMDctMDQtMjMgMTI6MTQ6MDcuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy93aW5kb3cuYwkyMDA3LTA0LTIzIDEyOjE0OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE4LDYgKzE4LDggQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSAibGVhZnBhZC5oIgorKyNpbmNsdWRlIDxsaWJvd2wvb3dsd2luZG93bWVudS5oPgorKworIC8qCisgc3RhdGljIHZvaWQgY2Jfc2Nyb2xsX2V2ZW50KEd0a0FkanVzdG1lbnQgKmFkaiwgR3RrV2lkZ2V0ICp2aWV3KQorIHsKK0BAIC01Miw3ICs1NCw2IEBACisgCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7CisgCQorIAltZW51YmFyID0gY3JlYXRlX21lbnVfYmFyKHdpbmRvdyk7CistCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBtZW51YmFyLCBGQUxTRSwgRkFMU0UsIDApOworIAkKKyAJc3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc3cpLAorCistLS0gdG1wL3NyYy9tYWluLmMub3JpZwkyMDA3LTA0LTIzIDEyOjE1OjAzLjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvbWFpbi5jCTIwMDctMDQtMjMgMTI6MTU6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjQ0LDYgKzI0NCw3IEBACisgCUNvbmYgKmNvbmY7CisgCUd0a0l0ZW1GYWN0b3J5ICppZmFjdG9yeTsKKyAJZ2NoYXIgKnN0ZGluX2RhdGEgPSBOVUxMOworKwlHdGtXaWRnZXQgKm1lbnU7CisgCQorIAliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NBTEVESVIpOworIAliaW5kX3RleHRkb21haW5fY29kZXNldChQQUNLQUdFLCAiVVRGLTgiKTsKK0BAIC0yOTMsNyArMjk0LDEwIEBACisgCQljb25mLT5hdXRvaW5kZW50KTsKKyAJCisgCWd0a193aWRnZXRfc2hvd19hbGwocHViLT5tdy0+d2luZG93KTsKKysJb3dsX3NldF93aW5kb3dfbWVudSAoR1RLX1dJTkRPVyhwdWItPm13LT53aW5kb3cpLAorKwkJCSAgICAgR1RLX01FTlUocHViLT5tdy0+bWVudWJhcikpOworKwkKKyAJZ19mcmVlKGNvbmYtPmZvbnRuYW1lKTsKKyAJZ19mcmVlKGNvbmYpOworIAkKKworLS0tIHRtcC9zcmMvTWFrZWZpbGUuYW0ub3JpZwkyMDA3LTA0LTIzIDEyOjE3OjU0LjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvTWFrZWZpbGUuYW0JMjAwNy0wNC0yMyAxMjoxNzo1NC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNyw0ICsyNyw0IEBACisgCWkxOG4uaAorIAorIGxlYWZwYWRfQ0ZMQUdTICA9ICQoR1RLX0NGTEFHUykgJChHTk9NRVBSSU5UX0NGTEFHUykKKy1sZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykKKytsZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykgLWxvd2wKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvbGVhZnBhZF8wLjguMTguMS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvbGVhZnBhZF8wLjguMTguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzE1MTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIEdUSysgVGV4dCBFZGl0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vdGFyb3QuZnJlZXNoZWxsLm9yZy9sZWFmcGFkLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sZWFmcGFkLmg7ZW5kbGluZT0yMDttZDU9ZDNkNmE4OWY1ZTYxZThiMTNiZGVhNTM3NTExYmExZmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3V0aWxzLmM7ZW5kbGluZT0yMDttZDU9MGQyY2M2NTg0YmEzMjAyNDQ4YmIyNzRmNjI3Mzk1NzEiCisKK0RFUEVORFMgPSAiZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbGlib3dsIgorIyBUaGUgbGlib3dsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL2xlYWZwYWQuZGVza3RvcCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI1NGE3MmZjNjc1MDVlM2FhNTI4ODRjNzI5Y2Q3Yjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1OWQyMmFlMDdmMjI4MDNiYzY2ZmY0MGQzNzNhODU0NTMyYTZlNDczMjY4MGJmOGE5NmEzZmJjYjlmODBhMmMiCitQUiA9ICJyMiIKKworU1JDX1VSSV9hcHBlbmRfcG9reSA9ICIgZmlsZTovL293bC1tZW51LnBhdGNoO2FwcGx5PXllcyAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1jaG9vc2VyIC0tZGlzYWJsZS1lbWFjcyAtLWRpc2FibGUtcHJpbnQiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xlYWZwYWQuZGVza3RvcCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9sZWFmcGFkLmRlc2t0b3AiCisKK1BBQ0tBR0VTICs9ICJsZWFmcGFkLXN0b2NrLWljb25zIgorRklMRVNfbGVhZnBhZC1zdG9jay1pY29ucyA9ICIke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2M0N2RiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJPcGVuZWRIYW5kIFdpZGdldCBMaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bHBhbmVkLmg7ZW5kbGluZT0yMDttZDU9N2ZlZjg0NGM0Y2MwMWIxMDU0MWE3YWI2YWI1OTcxYWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bHRyZWVtb2RlbHNsaWNlLmg7ZW5kbGluZT0yMDttZDU9YTU0MjFmMmNkYWU4ZGViZTVlNGM0OGMwOWEwMmJlYjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bGNvbG91cnN3YXRjaC5oO2VuZGxpbmU9MjQ7bWQ1PTA2M2M0MTVjNTg3MTlkNTM2OTkwY2E4ZjYwNmI1NzMwIgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImd0aysiCitTUkNSRVYgPSAiNmViYzhhYzhmODU3NTI3OGRkNDBhNTM1Y2FkZWZhMjYzNzRlNDRiMSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBSZXF1aXJlcyBnZGsvZ2RreC5oIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTY5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCShyZXZpc2lvbiAxNjE0KQorKysrIGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCSh3b3JraW5nIGNvcHkpCitAQCAtMzAwLDExICszMDAsMTMgQEAKKyAgICAgZ3RrX2ZvbnRfYnV0dG9uX3NldF9mb250X25hbWUgKEdUS19GT05UX0JVVFRPTiAoZm9udF9idXR0b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbmZfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKKyAgIH0gZWxzZSBpZiAoc3RyY21wIChrZXksIEhBTkRFRF9LRVkpID09IDApIHsKKysjaWYgMAorICAgICBHRW51bVZhbHVlICplOworICAgICBlID0gZ19lbnVtX2dldF92YWx1ZV9ieV9uYW1lIChnX3R5cGVfY2xhc3NfcmVmIChHVEtfVFlQRV9DT1JORVJfVFlQRSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25mX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7CisgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUgKEdUS19UT0dHTEVfQlVUVE9OIChoYW5kZWRfY2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52YWx1ZSA9PSBHVEtfQ09STkVSX1RPUF9SSUdIVCk7CisrI2VuZGlmCisgICB9CisgfQorIAorQEAgLTM5NSwxMiArMzk3LDEzIEBACisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYWxpZ24pLCBmb250X2J1dHRvbik7CisgCisgICAvKiBMZWZ0L1JpZ2h0IEhhbmRlZCAqLworLSAgCisrI2lmIDAKKyAgIGZyYW1lID0gbmV3X2ZyYW1lIChfKCJPcmllbnRhdGlvbiIpLCAmYWxpZ24pOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChib3gpLCBmcmFtZSwgVFJVRSwgVFJVRSwgMCk7CisgICBoYW5kZWRfY2hlY2sgPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljIChfKCJfTGVmdC1oYW5kZWQiKSk7CisgICBnX3NpZ25hbF9jb25uZWN0IChoYW5kZWRfY2hlY2ssICJ0b2dnbGVkIiwgR19DQUxMQkFDSyAob25faGFuZGVkX3NldCksIE5VTEwpOworICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGFsaWduKSwgaGFuZGVkX2NoZWNrKTsKKysjZW5kaWYKKyAKKyAgIGdjb25mX2NsaWVudF9hZGRfZGlyIChnY29uZiwgSU5URVJGQUNFX0RJUiwgR0NPTkZfQ0xJRU5UX1BSRUxPQURfT05FTEVWRUwsIE5VTEwpOworICAgZ19zaWduYWxfY29ubmVjdCAoZ2NvbmYsICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAob25fZ2NvbmZfdmFsdWVfY2hhbmdlZCksIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY3M2E0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a19naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBHVEsrIHRoZW1lIGNvbmZpZ3VyYXRpb24gYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYztlbmRsaW5lPTI1O21kNT1lYTkyMzMzY2Y4YTY4MDI2MzlkNjJkODc0YzExNGEyOCIKKworREVQRU5EUyA9ICJnY29uZiBndGsrIgorUkRFUEVORFNfJHtQTn0gPSAic2V0dGluZ3MtZGFlbW9uIgorCitTUkNSRVYgPSAiM2VkNzRkZmI3YzU3YmUwODhhNWFiMzZlNDQ2YzBjY2RlOWZhMTAyOCIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAorICAgICAgICBmaWxlOi8vbm8taGFuZGVkLnBhdGNoO3N0cmlwbGV2ZWw9MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzZXR0aW5ncy1kYWVtb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3OWNiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggZGVza3RvcCBmb2xkZXJzIGZvciB0aGUgU2F0byBlbnZpcm9ubWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICIiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKKworU1JDUkVWID0gIjgxMGIwYjA4ZWI3OWU0Njg1MjAyZGEyZWMzNDdiOTkwYmI0NjdlMDciCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOGQyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfZ2l0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggV2luZG93IE1hbmFnZXIgRGVza3RvcCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlidGFrdS9lZ2dzZXF1ZW5jZS5oO2VuZGxpbmU9MjA7bWQ1PWI5MWY2OGY3NjQyYTE0NTlmYTFmNGM5ZGY5NGE4ZjE1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kZXNrdG9wLmM7ZW5kbGluZT0yMDttZDU9MzZjOWJmMjk1ZTYwMDdmMzQyMzA5NWY0MDVhZjVhMmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTE5O21kNT0yMDQ0MjQ0Zjk3YTE5NWMyNWI3ZGM2MDJhYzdlOWEwMCIKKworREVQRU5EUyA9ICJndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMiCitTRUNUSU9OID0gIngxMS93bSIKK1NSQ1JFViA9ICI3MWUzZTZlMDQyNzFlOWQ1YTE0ZjFjMjMxZWYxMDBjN2YzMjAxMzRkIgorUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfS0yIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS13aXRoLWRidXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzLzgwbWF0Y2hib3hrZXlib2FyZC5zaCBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzLzgwbWF0Y2hib3hrZXlib2FyZC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2YxODhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworQ01EPSIiCisKK2lmIFsgIiRIQVZFX0tFWUJPQVJEIiA9ICIwIiBdOyB0aGVuCisgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCIKK2VsaWYgWyAiJERJU1BMQVlfQ0FOX1JPVEFURSIgPSAiMSIgXTsgdGhlbgorICAgIGlmIFsgIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiA9ICIxIiAtYSAiJEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFIiA9ICIwIiBdOyB0aGVuCisgICAgICAgIENNRD0ibWF0Y2hib3gta2V5Ym9hcmQgLWQgLW8gbGFuZHNjYXBlIgorICAgIGVsaWYgWyAiJEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFIiA9ICIxIiAtYSAiJEhBVkVfS0VZQk9BUkRfUE9SVFJBSVQiID0gIjAiIF07IHRoZW4KKyAgICAgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCAtbyBwb3J0cmFpdCIKKyAgICBmaQorZmkKKworaWYgWyAiJENNRCIgXTsgdGhlbgorICAgICMgRGVsYXkgdG8gbWFrZSBzdXJlIHRoZSB3aW5kb3cgbWFuYWdlciBpcyBhY3RpdmUKKyAgICAjIGJ5IHdhaXRpbmcgZm9yIHRoZSBkZXNrdG9wIHRvIHNheSBpdHMgZmluaXNoZWQgbG9hZGluZworICAgIGRidXMtd2FpdCBvcmcubWF0Y2hib3hfcHJvamVjdC5kZXNrdG9wIExvYWRlZCAmJiAkQ01EICYKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy9zaW5nbGUtaW5zdGFuY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy9zaW5nbGUtaW5zdGFuY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiNmM0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitNdWx0aXBsZSBtYXRjaGJveC1rZXlib2FyZCBpbnN0YW5jZXMgd291bGQgb2NjdXB5IHdob2xlIHNjcmVlbiBhbmQgY2F1c2UgWAord2luZG93IHNlZ2ZhdWx0KEJ1ZyA1MDkpLiBNYWtpbmcgbWF0Y2hib3gta2V5Ym9hcmQgc2luZ2xldG9uIGlzIG9uZSB3b3JrCithcm91bmQuCisKK1RoaXMgcGF0Y2ggYWxsb3cgb25seSBvbmUgaW5zdGFuY2Ugb2YgbWF0Y2hib3gta2V5Ym9hcmQgYmFzZWQgb24gc29tZSBtZWNoYW5pc20KK2luIG1hdGNoYm94LWRlc2t0b3AuIEluIGZ1dHVyZSwgYW4gYXBwbGV0IGFuZCBHVEstSU0gbW9kdWxlcyBpbgorbWF0Y2hib3gta2V5Ym9hcmQgY2FuIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBtYXAvdW5tYXAgdGhlIHZpcnR1YWwga2V5Ym9hcmQKK29uIGRlbWFuZC4KKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IG1hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYXRjaGJveC1rZXlib2FyZC5vcmlnL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AJMjAxMC0xMi0yMiAyMDo0MTo0MC4wMDAwMDAwMDAgKzA4MDAKKysrKyBtYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZC5kZXNrdG9wCTIwMTAtMTItMjIgMjA6NDI6MTIuMDAwMDAwMDAwICswODAwCitAQCAtNiwzICs2LDUgQEAKKyBJY29uPW1hdGNoYm94LWtleWJvYXJkLnBuZworIENhdGVnb3JpZXM9UGFuZWw7VXRpbGl0eTtNQgorIFgtTUItSU5QVVQtTUVDSEFOU0lNPVRydWUKKytYLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKKytTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDMyMWQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggdmlydHVhbCBrZXlib2FyZCBmb3IgWDExIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitTRUNUSU9OID0gIngxMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYXRjaGJveC1rZXlib2FyZC5oO2VuZGxpbmU9MTc7bWQ1PTlkNjU4NmM2OWU0YTkyNmYzY2IwYjQ0MjVmMjRiYTNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGxldC9hcHBsZXQuYztlbmRsaW5lPTE4O21kNT00YTBmNzIxNzI0NzQ2YjE0ZDk1YjUxZGRkNDJiOTVlNyIKKworREVQRU5EUyA9ICJsaWJmYWtla2V5IGV4cGF0IGxpYnhmdCBndGsrIG1hdGNoYm94LXBhbmVsLTIiCisKK1NSQ1JFViA9ICIyMTdmMWJmZTE0YzQxY2Y3ZTI5MWQwNGE2M2FhMmQ3OWNjMTNkMDYzIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59O2JyYW5jaD1tYXRjaGJveC1rZXlib2FyZC0wLTEgXAorICAgICAgICAgICBmaWxlOi8vc2luZ2xlLWluc3RhbmNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzgwbWF0Y2hib3hrZXlib2FyZC5zaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWltbW9kdWxlcy1jYWNoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieGZ0LCBsaWJmYWtla2V5IGFuZCBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY2Fpcm8gLS1lbmFibGUtZ3RrLWltIC0tZW5hYmxlLWFwcGxldCIKKworUEFDS0FHRVMgKz0gIiR7UE59LWltICR7UE59LWFwcGxldCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyBcCisJICAgICAgICR7c3lzY29uZmRpcn0gXAorCSAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisJICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyBcCisJICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gta2V5Ym9hcmQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvLmRlYnVnIgorCitGSUxFU18ke1BOfS1pbSA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8qLnNvIgorCitGSUxFU18ke1BOfS1hcHBsZXQgPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28iCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vODBtYXRjaGJveGtleWJvYXJkLnNoICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKworCXJtIC1mICR7RH0ke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8qLmxhCisJcm0gLWYgJHtEfSR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhCit9CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA9ICIke1BOfS1pbSIKKworUkRFUEVORFNfJHtQTn0gPSAiZm9ybWZhY3RvciBkYnVzLXdhaXQiCitSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1hcHBsZXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzL3NpbGVuY2Utd2FybmluZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL2ZpbGVzL3NpbGVuY2Utd2FybmluZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViYTlhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitEb24ndCB3YXJuIGlmIHRoZSBtYWNoaW5lIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGJhdHRlcnksIG9yIGlmIHRoZSBhcHBsZXRzCitzdHJpbmcgY29udGFpbnMgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYworaW5kZXggNjUxNWNiMC4uYzQ0ZGQxMiAxMDA2NDQKKy0tLSBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYworKysrIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCitAQCAtMTQsOCArMTQsNiBAQCBpbnQgYmF0dF9zdGF0ZSwgYWNfc3RhdGU7CisgaW50IHBtX3N1cHBvcnQodm9pZCkKKyB7CisgCWlmKGNoZWNrX2FjcGlfc3VwcG9ydCgpID09IE5PVF9TVVBQT1JURUQpeworLQkJZ193YXJuaW5nKCJObyBBQ1BJIHN1cHBvcnRcbiIpOworLQorIAkJcmV0dXJuIDA7CisgCX0KKyAKK0BAIC0zMiw4ICszMCw5IEBAIGNvbnN0IGNoYXIqIHBtX2JhdHRlcnlfaWNvbih2b2lkKQorIAljb25zdCBjaGFyICppY29uOworIAliYXR0ZXJ5X3QgKmJpbmZvOworIAorKyAgICAgICAgLyogTm8gYmF0dGVyeSBhdmFpbGFibGUgKG5vdCBwcmVzZW50LCBkaXNhYmxlZCwgb3Igc29tZXRoaW5nCisrICAgICAgICAgICBlbHNlLiBTaWxlbnRseSBkbyBub3RoaW5nLiAqLworIAlpZiAoYmF0dF9zdGF0ZSAhPSBTVUNDRVNTKSB7CistCQlnX3dhcm5pbmcoIkNvdWxkbnQgaW5pdGlhbGl6ZSBBQ1BJIGJhdHRlcnlcbiIpOworIAkJcmV0dXJuIE5VTEw7CisgCX0KKyAKK2RpZmYgLS1naXQgYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCitpbmRleCA1NDY3NDM4Li4yZjM5Y2I2IDEwMDY0NAorLS0tIGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKKysrKyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCitAQCAtMTAsOCArMTAsNiBAQAorIGludCBwbV9zdXBwb3J0KHZvaWQpCisgeworIAlpZiAoMSA9PSBhcG1fZXhpc3RzICgpKSB7CistICAgICAgICAgICAgICAgIGdfd2FybmluZyAoIk5vIEFQTSBzdXBwb3J0Iik7CistCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorIAorZGlmZiAtLWdpdCBhL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMgYi9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCitpbmRleCAyZDhjYWZkLi44MjhhMzZkIDEwMDY0NAorLS0tIGEvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYworKysrIGIvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYworQEAgLTExMCwxMCArMTEwLDE1IEBAIGxvYWRfYXBwbGV0cyAoY29uc3QgY2hhciAgICAqYXBwbGV0c19kZXNjLAorICAgICAgICAgYXBwbGV0cyA9IGdfc3Ryc3BsaXQgKGFwcGxldHNfZGVzYywgIiwiLCAtMSk7CisgCisgICAgICAgICBmb3IgKGkgPSAwOyBhcHBsZXRzW2ldOyBpKyspIHsKKysgICAgICAgICAgICAgICAgY2hhciAqczsKKyAgICAgICAgICAgICAgICAgY2hhciAqKmJpdHM7CisgICAgICAgICAgICAgICAgIEd0a1dpZGdldCAqYXBwbGV0OworIAorLSAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAoYXBwbGV0c1tpXSwgIjoiLCAyKTsKKysgICAgICAgICAgICAgICAgcyA9IGFwcGxldHNbaV07CisrICAgICAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgc1swXSA9PSAnXDAnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAocywgIjoiLCAyKTsKKyAKKyAgICAgICAgICAgICAgICAgYXBwbGV0ID0gbG9hZF9hcHBsZXQgKGJpdHNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzWzFdLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkNzM2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl9naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJTaW1wbGUgR1RLKyBiYXNlZCBwYW5lbCBmb3IgaGFuZGhlbGQgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmg7ZW5kbGluZT0xMDttZDU9MGI3ZGIyOGY0YjY4NjNmYjg1M2QwNDY3ZTU5MDAxOWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0cy9zdGFydHVwL3N0YXJ0dXAuYztlbmRsaW5lPTIyO21kNT1iMGE2NGZiZWYzMDk3ZDc5ZjgyNjRlNjkwN2E5OGYwMyIKKworREVQRU5EUyA9ICJnbm9tZS1jb21tb24gZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIGRidXMtZ2xpYiIKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgImxpYmFjcGkiLCAiIixkKX0iCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgImFwbWQiLCAiIixkKX0iCisKKyMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICIyNmEzYTY3YjQxYzUwZTBhZTE2M2Q4ZmU4NmNjZjdhMGYwYTY3MWFlIgorUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgorCitSUFJPVklERVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCitSUkVQTEFDRVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS1lbmFibGUtZGJ1cyIKK0VYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAiLS13aXRoLWJhdHRlcnk9YWNwaSIsICIiLGQpfSIKK0VYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICItLXdpdGgtYmF0dGVyeT1hcG0iLCAiIixkKX0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1wYW5lbC9icmlnaHRuZXNzLyoucG5nIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LXBhbmVsL3N0YXJ0dXAvKi5wbmcgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL3Nlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjZTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL3Nlc3Npb24KQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZworCitpZiBbICIkSEFWRV9UT1VDSFNDUkVFTiIgPSAiMSIgXTsgdGhlbgorICAgIFNIT1dDVVJTT1I9Im5vIgorZWxzZQorICAgIFNIT1dDVVJTT1I9InllcyIKK2ZpCisKK2lmIFsgIiRIQVZFX0tFWUJPQVJEIiA9ICIxIiBdOyB0aGVuCisgICAgS0VZQk9BUkRfQVBQTEVUPSIiCitlbHNlCisgICAgS0VZQk9BUkRfQVBQTEVUPSJrZXlib2FyZCIKK2ZpCisKKyMgVGVsbCBHVEsrMyB3ZSByZWFsbHkgd2FudCBzZXJ2ZXIgc2lkZSBkZWNvcmF0aW9ucywgZXZlbiB3aXRoCisjIEd0a0hlYWRlckJhciB1c2luZyBhcHBsaWNhdGlvbnM6IFdpdGhvdXQgdGhhdCBtYi1wYW5lbCB3aWxsIHJlbmRlcgorIyBvbiB0b3Agb2YgdGhlIGNsaWVudCBzaWRlIGRlY29yYXRpb25zLgorZXhwb3J0IEdUS19DU0Q9MAorCittYXRjaGJveC1kZXNrdG9wICYKKworIyBMaW5lcyBjb250YWluaW5nIGZlYXR1cmUtW2Zvb10gYXJlIHJlbW92ZWQgYXQgYnVpbGQgdGltZSBpZiB0aGUgbWFjaGluZQorIyBkb2Vzbid0IGhhdmUgdGhlIGZlYXR1cmUgImZvbyIuCisKK1NUQVJUX0FQUExFVFM9c2hvd2Rlc2t0b3Asd2luZG93c2VsZWN0b3IKK0VORF9BUFBMRVRTPWNsb2NrLGJhdHRlcnksJEtFWUJPQVJEX0FQUExFVCxzeXN0cmF5LHN0YXJ0dXAtbm90aWZ5LG5vdGlmeQorRU5EX0FQUExFVFM9b3Blbm1va28tcGFuZWwtZ3NtLCRFTkRfQVBQTEVUUyAjIGZlYXR1cmUtcGhvbmUKKworbWF0Y2hib3gtcGFuZWwgLS10aXRsZWJhciAtLXN0YXJ0LWFwcGxldHMgJFNUQVJUX0FQUExFVFMgLS1lbmQtYXBwbGV0cyAkRU5EX0FQUExFVFMgJgorCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIC10aGVtZSBTYXRvIC11c2VfZGVza3RvcF9tb2RlIGRlY29yYXRlZCAtdXNlX2N1cnNvciAkU0hPV0NVUlNPUiAkQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG9fMC4xLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG9fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGUxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJDdXN0b20gTWF0Y2hib3ggc2Vzc2lvbiBmaWxlcyBmb3IgdGhlIFNhdG8gZW52aXJvbm1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2Vzc2lvbjtlbmRsaW5lPTM7bWQ1PWY4YTVjNWI5YzI3OWU1MmRjMDk0ZDEwZTExYzJiZTYzIgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ2NvbmYtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZm9ybWZhY3RvciBndGstc2F0by1lbmdpbmUgbWF0Y2hib3gtdGhlbWUtc2F0byBndGstdGhlbWUtc2F0byBtYXRjaGJveC1wYW5lbC0yIG1hdGNoYm94LWRlc2t0b3Atc2F0byBtYXRjaGJveC1zZXNzaW9uIGdjb25mIgorUFIgPSAicjMwIgorCisjIFRoaXMgcGFja2FnZSBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYmVjYXVzZSB0aGUgc2Vzc2lvbiBzY3JpcHQgaXMgbW9kaWZpZWQKKyMgYmFzZWQgb24gdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbWF0Y2hib3gtdGhlbWUtc2F0byByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImZpbGU6Ly9zZXNzaW9uIgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCSMgVGhpcyBpcyB0aGUgc2V0IG9mIG1hY2hpbmUgZmVhdHVyZXMgdGhhdCB0aGUgc2NyaXB0IGhhcyBtYXJrZXJzIGZvcgorCUZFQVRVUkVTPSJwaG9uZSIKKwlTQ1JJUFQ9IiR7U30vc2VkZGVyIgorCXJtIC1mICRTQ1JJUFQKKwl0b3VjaCAkU0NSSVBUCisJZm9yIEZFQVQgaW4gJEZFQVRVUkVTOyBkbworCQlpZiBlY2hvICR7TUFDSElORV9GRUFUVVJFU30gfCBhd2sgIi8kRkVBVC8ge2V4aXQgMX0iOyB0aGVuCisJCQllY2hvICIvZmVhdHVyZS0kRkVBVC9kIiA+PiAkU0NSSVBUCisJCWZpCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbWF0Y2hib3gKKwlzZWQgLWYgIiRTQ1JJUFQiICR7U30vc2Vzc2lvbiA+ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCisgICAgICAgIGNobW9kICt4ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2V0X3ZhbHVlKCkgeworCQkjdHlwZSwgbmFtZSwgdmFsdWUKKwkJZ2NvbmZ0b29sLTIgLS1jb25maWctc291cmNlPXhtbDo6JEQke3N5c2NvbmZkaXJ9L2djb25mL2djb25mLnhtbC5kZWZhdWx0cyAtLWRpcmVjdCAtLXR5cGUgJDEgLS1zZXQgL2Rlc2t0b3AvcG9reS9pbnRlcmZhY2UvJDIgIiQzIgorCX0KKwlzZXRfdmFsdWUgc3RyaW5nIHRoZW1lIFNhdG8KKwlzZXRfdmFsdWUgc3RyaW5nIGljb25fdGhlbWUgU2F0bworCXNldF92YWx1ZSBib29sIHRvdWNoc2NyZWVuIHRydWUKKwlzZXRfdmFsdWUgc3RyaW5nIGZvbnRfbmFtZSAiU2FucyA5IgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGVybWluYWwvbWF0Y2hib3gtdGVybWluYWxfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmQxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBHVEsrIHRlcm1pbmFsIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0yMDttZDU9OTZlMzkxNzZkOWUzNTU2MzlhMGI4YjFjN2E4NDA4MjAiCisKK0RFUEVORFMgPSAiZ3RrKyB2dGUiCitTRUNUSU9OID0gIngxMS91dGlscyIKK1NSQ1JFViA9ICI0NTJiY2EyNTM0OTJhOTdhNTg3ZjQ0MDI4OWI5YWIyN2QyMTczNTNlIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8uaW5jIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQ3ZTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIk1hdGNoYm94IHdpbmRvdyBtYW5hZ2VyIFNhdG8gdGhlbWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJDQy1CWS1TQS0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hYWU4NmJiMzRiMGE4MzcxNmNhMDlmNGU3ODNkNmJhNCIKKworREVQRU5EUyA9ICJtYXRjaGJveC13bSIKK1NFQ1RJT04gPSAieDExL3dtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3RoZW1lcyIKKworIyBUaGUgbWF0Y2hib3gtd20gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Nzg2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fMC4xLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBtYXRjaGJveC10aGVtZS1zYXRvLmluYworCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG9reWxpbnV4Lm9yZy9yZWxlYXNlcy9zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8tMC4xLnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcyYWUyNzJlZjc4MDMxNDFhM2RjYjY5ZTY3MGNmZjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNTlmOTY0NmVkYmZiOTA3YTMwOTMzMmRiM2JkNmZhNzA4MGRjMWZlMjRkZjU0OTQ4MGNmYWU3ZDk3NGEzZmIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDM1NjlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvX2dpdC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG1hdGNoYm94LXRoZW1lLXNhdG8uaW5jCisKK1NSQ1JFViA9ICJmNzJjZjRlZDdkNzFhZDllNDdiMGYyZDNkYmM1OTNiYzJmM2U3NmY4IgorUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWF0Y2hib3gtc2F0byIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njc5ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYgpAQCAtMCwwICsxLDY2IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlNhdG8gZGVza3RvcCIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjMzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24geDExdm5jCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9ICIke1BOfSAke1BOfS1iYXNlICR7UE59LWFwcHMgJHtQTn0tZ2FtZXMiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1BOfS1iYXNlIFwKKyAgICAke1BOfS1hcHBzIFwKKyAgICAke1BOfS1nYW1lcyBcCisgICAgIgorCitORVRXT1JLX01BTkFHRVIgPz0gImNvbm5tYW4tZ25vbWUiCitORVRXT1JLX01BTkFHRVJfbGliYy11Y2xpYmMgPSAiIgorCitTVU1NQVJZXyR7UE59LWJhc2UgPSAiU2F0byBkZXNrdG9wIC0gYmFzZSBwYWNrYWdlcyIKK1JERVBFTkRTXyR7UE59LWJhc2UgPSAiXAorICAgIG1hdGNoYm94LWRlc2t0b3AgXAorICAgIG1hdGNoYm94LXNlc3Npb24tc2F0byBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQgXAorICAgIG1hdGNoYm94LWtleWJvYXJkLWFwcGxldCBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQtaW0gXAorICAgIG1hdGNoYm94LWNvbmZpZy1ndGsgXAorICAgIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgXAorICAgIHNhdG8taWNvbi10aGVtZSBcCisgICAgc2V0dGluZ3MtZGFlbW9uIFwKKyAgICBndGstc2F0by1lbmdpbmUgXAorICAgIHNodXRkb3duLWRlc2t0b3AgXAorICAgIGxpYnNkbCBcCisgICAgJHtORVRXT1JLX01BTkFHRVJ9IFwKKyAgICB1ZGV2LWV4dHJhY29uZiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8tc2VydmVyIHB1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0bycsICcnLCBkKX0gXAorICAgICIKKworIyBwY21hbmZtIGRvZXNuJ3Qgd29yayBvbiBtaXBzCitGSUxFTUFOQUdFUiA/PSAicGNtYW5mbSIKK0ZJTEVNQU5BR0VSX21pcHMgPz0gIiIKKworV0VCID89ICIiCisjV0VCID0gImVwaXBoYW55IgorCitTVU1NQVJZXyR7UE59LWFwcHMgPSAiU2F0byBkZXNrdG9wIC0gYXBwbGljYXRpb25zIgorUkRFUEVORFNfJHtQTn0tYXBwcyA9ICJcCisgICAgbGVhZnBhZCBcCisgICAgZ3N0LXBsYXllci1iaW4gXAorICAgIHgxMXZuYyBcCisgICAgbWF0Y2hib3gtdGVybWluYWwgXAorICAgIHNhdG8tc2NyZWVuc2hvdCBcCisgICAgJHtGSUxFTUFOQUdFUn0gXAorICAgICR7V0VCfSBcCisgICAgIgorCitTVU1NQVJZXyR7UE59LWdhbWVzID0gIlNhdG8gZGVza3RvcCAtIGdhbWVzIgorUkRFUEVORFNfJHtQTn0tZ2FtZXMgPSAiXAorICAgIG9oLXB1enpsZXMgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlNTU5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtZGlyZWN0b3J5LnBuZyBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtZGlyZWN0b3J5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTkyMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtcmVndWxhci5wbmcgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLXJlZ3VsYXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNzdhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLXJlZ3VsYXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtbWltZS10ZXh0LXBsYWluLnBuZyBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtbWltZS10ZXh0LXBsYWluLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmU0YmFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvbm8tZGVza3RvcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvbm8tZGVza3RvcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNkNmQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK0Rpc2FibGUgdGhlIGRlc2t0b3AgcHJlZmVyZW5jZXMgbGF1bmNoZXIgYXMgd2UgZG9uJ3QgdXNlIHRoZSBwY21hbmZtIGRlc2t0b3AgaW4KK1NhdG8uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcCBiL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcAoraW5kZXggY2NmOGFiYi4uM2Y2ZmMxYyAxMDA2NDQKKy0tLSBhL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcC5pbgorKysrIGIvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wLmluCitAQCAtNywzICs3LDQgQEAgRXhlYz1wY21hbmZtIC0tZGVza3RvcC1wcmVmCisgU3RhcnR1cE5vdGlmeT10cnVlCisgVGVybWluYWw9ZmFsc2UKKyBOb3RTaG93SW49R05PTUU7WEZDRTtLREU7CisrTm9EaXNwbGF5PXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vcGNtYW5mbV8xLjIuMy5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vcGNtYW5mbV8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDY3MzAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiRmFzdCBsaWdodHdlaWdodCB0YWJiZWQgZmlsZW1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vcGNtYW5mbS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BjbWFuZm0uaDtlbmRsaW5lPTIyO21kNT00MTdiMzg1NTc3MWEzYTg3ZjhhZDc1M2Q5OTQ0OTFmMCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3NlYWwtZ3RrLWNvbXBhdC5oO2VuZGxpbmU9MjE7bWQ1PTQ2OTIyYzg2OTFmNThkMTI0Zjk0MjBmZTE2MTQ5Y2UyIgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBsaWJmbSBpbnRsdG9vbC1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9wb2t5ID0gIiBsaWJvd2wiCisKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YWFyY2g2NC4qfGFybS4qfG1pcHMuKnxwb3dlcnBjLip8c2guKiktKGxpbnV4fGZyZWVic2QuKiknCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vcGNtYW5mbS0ke1BWfS50YXIueHogXAorCSAgIGZpbGU6Ly9nbm9tZS1mcy1kaXJlY3RvcnkucG5nIFwKKwkgICBmaWxlOi8vZ25vbWUtZnMtcmVndWxhci5wbmcgXAorCSAgIGZpbGU6Ly9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nIFwKKwkgICBmaWxlOi8vZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nIFwKKwkgICBmaWxlOi8vbm8tZGVza3RvcC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImM5OTM0MDJkNDA3YjBhM2ZjMDc2Zjg0MmFjMWJjNWM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmYThkODJmYzYzYmUxNDcwNDUxNzRiZWYwNzQ4MDdlMWUzMmNlOGM2YmY0ZGJkOGZhZDQ5ZTI2MGJjZjYzODAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcy8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyoucG5nICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vcGNtYW5mbSIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gImFkd2FpdGEtaWNvbi10aGVtZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8vNTAtc2F0by5jb25mIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0by81MC1zYXRvLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0OTJlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8vNTAtc2F0by5jb25mCkBAIC0wLDAgKzEsNyBAQAorIyBXZSByZWx5IG9uIFB1bHNlQXVkaW8ncyBhdXRvc3Bhd24gZmVhdHVyZSB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSBkYWVtb24KKyMgaW4gU2F0by4gVGhlIGdyYXBoaWNhbCBzZXNzaW9uIGluIFNhdG8gcnVucyB1bmRlciByb290LCBob3dldmVyLCBhbmQKKyMgUHVsc2VBdWRpbyBkaXNhYmxlcyBhdXRvc3Bhd25pbmcgZm9yIHJvb3QgYnkgZGVmYXVsdC4gSW4gYSBub3JtYWwgc2V0dXAgaXQncworIyBub3QgZGVzaXJhYmxlIHRvIGF1dG9zcGF3biBmb3Igcm9vdCwgYmVjYXVzZSBpdCBjYW4gZWFzaWx5IGludGVyZmVyZSB3aXRoCisjIG90aGVyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcywgYnV0IGluIFNhdG8gdGhlcmUgYXJlIG5vIG90aGVyIHVzZXJzLCBzbworIyBpdCdzIE9LIHRvIGVuYWJsZSB0aGlzIGluIFNhdG8uCithbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QgPSB5ZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG9fMS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG9fMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjczMzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiL2V0Yy9wdWxzZS9jbGllbnQuY29uZiB0YWlsb3JlZCBmb3IgU2F0byIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovLzUwLXNhdG8uY29uZiIKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vNTAtc2F0by5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQvNTAtc2F0by5jb25mCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYuZC81MC1zYXRvLmNvbmYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kLzUwLXNhdG8uY29uZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvMDAwMS1Vc2UtbGFicy1pbnN0ZWFkLW9mLWFicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvMDAwMS1Vc2UtbGFicy1pbnN0ZWFkLW9mLWFicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNkMWRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gOTgwOGRjMDllMDg5MzdjOWJmZmQ4NThkM2RlZDQyODIyNWE0MzEyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDk6MDI6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIGxhYnMgaW5zdGVhZCBvZiBhYnMKKworY2x1ZXZhbHMgaXMgYXJyYXkgb2YgbG9uZ3Mgc28gd2UgaGF2ZSB0byB1c2UgbGFicygpIGluc3RlYWQgb2YgYWJzKCkKK3NpbmNlIGFicygpIHJldHVybnMgaW50CisKK0ZpeGVzCisKK2tlZW4uYzoxNDU4OjE3OiBlcnJvcjogYWJzb2x1dGUgdmFsdWUgZnVuY3Rpb24gJ2FicycgZ2l2ZW4gYW4gYXJndW1lbnQKK29mIHR5cGUgJ2xvbmcnIGJ1dCBoYXMgcGFyYW1ldGVyIG9mIHR5cGUgJ2ludCcgd2hpY2ggbWF5IGNhdXNlCit0cnVuY2F0aW9uIG9mIHZhbHVlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisga2Vlbi5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2tlZW4uYyBiL2tlZW4uYworaW5kZXggYTZhNzIzOC4uMTYzMTk5MiAxMDA2NDQKKy0tLSBhL2tlZW4uYworKysrIGIva2Vlbi5jCitAQCAtMTA0Myw3ICsxMDQzLDcgQEAgZG9uZQorIAkJICAgIGNsdWV2YWxzW2pdICo9IGdyaWRbaV07CisgCQkgICAgYnJlYWs7CisgCQkgIGNhc2UgQ19TVUI6CistCQkgICAgY2x1ZXZhbHNbal0gPSBhYnMoY2x1ZXZhbHNbal0gLSBncmlkW2ldKTsKKysJCSAgICBjbHVldmFsc1tqXSA9IGxhYnMoY2x1ZXZhbHNbal0gLSBncmlkW2ldKTsKKyAJCSAgICBicmVhazsKKyAJCSAgY2FzZSBDX0RJVjoKKyAJCSAgICB7CitAQCAtMTQ1NSw3ICsxNDU1LDcgQEAgc3RhdGljIGludCBjaGVja19lcnJvcnMoY29uc3QgZ2FtZV9zdGF0ZSAqc3RhdGUsIGxvbmcgKmVycm9ycykKKyAJCWNsdWV2YWxzW2pdICo9IHN0YXRlLT5ncmlkW2ldOworIAkJYnJlYWs7CisgCSAgICAgIGNhc2UgQ19TVUI6CistCQljbHVldmFsc1tqXSA9IGFicyhjbHVldmFsc1tqXSAtIHN0YXRlLT5ncmlkW2ldKTsKKysJCWNsdWV2YWxzW2pdID0gbGFicyhjbHVldmFsc1tqXSAtIHN0YXRlLT5ncmlkW2ldKTsKKyAJCWJyZWFrOworIAkgICAgICBjYXNlIENfRElWOgorIAkJeworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL2ZpeC1jb21waWxpbmctZmFpbHVyZS13aXRoLW9wdGlvbi1nLU8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL2ZpeC1jb21waWxpbmctZmFpbHVyZS13aXRoLW9wdGlvbi1nLU8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0NmZlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitndGsuYzogZml4IGNvbXBpbGluZyBmYWlsdXJlIHdpdGggb3B0aW9uIC1nIC1PCisKK1RoZXJlIHdlcmUgY29tcGlsaW5nIGZhaWx1cmUgd2l0aCBvcHRpb24gLWcgLU8KKy4uLgorLi8uL2d0ay5jOiBJbiBmdW5jdGlvbiAnY29uZmlndXJlX2FyZWEnOgorLi8uL2d0ay5jOjM5NzoyOiBlcnJvcjogJ2NyJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24gWy1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZF0KKyAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsCisgIF4KKy4vLi9ndGsuYzozODQ6MTQ6IG5vdGU6ICdjcicgd2FzIGRlY2xhcmVkIGhlcmUKKyAgICAgY2Fpcm9fdCAqY3I7CisgICAgICAgICAgICAgIF4KKy4vLi9ndGsuYzogSW4gZnVuY3Rpb24gJ21haW4nOgorLi8uL2d0ay5jOjI5MTE6NjogZXJyb3I6ICdlcnJvcicgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgcG5hbWUsIGVycm9yKTsKKyAgICAgIF4KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisuLi4KKworSW5pdGlhbGl6ZWQgcG9pbnRlciAnY3InIGFuZCAnZXJyb3InIHdpdGggTlVMTAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ3RrLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrLmMgYi9ndGsuYworaW5kZXggYTJlYmEyYy4uYzU0YmY2MyAxMDA2NDQKKy0tLSBhL2d0ay5jCisrKysgYi9ndGsuYworQEAgLTM4MSw3ICszODEsNyBAQCBzdGF0aWMgdm9pZCBjbGVhcl9iYWNraW5nX3N0b3JlKGZyb250ZW5kICpmZSkKKyAKKyBzdGF0aWMgdm9pZCBzZXR1cF9iYWNraW5nX3N0b3JlKGZyb250ZW5kICpmZSkKKyB7CistICAgIGNhaXJvX3QgKmNyOworKyAgICBjYWlyb190ICpjciA9IE5VTEw7CisgICAgIGludCBpOworIAorICAgICBmZS0+cGl4bWFwID0gZ2RrX3BpeG1hcF9uZXcoZmUtPmFyZWEtPndpbmRvdywgZmUtPnB3LCBmZS0+cGgsIC0xKTsKK0BAIC0yNDgxLDcgKzI0ODEsNyBAQCBjaGFyICpmZ2V0bGluZShGSUxFICpmcCkKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworICAgICBjaGFyICpwbmFtZSA9IGFyZ3ZbMF07CistICAgIGNoYXIgKmVycm9yOworKyAgICBjaGFyICplcnJvciA9IE5VTEw7CisgICAgIGludCBuZ2VuZXJhdGUgPSAwLCBwcmludCA9IEZBTFNFLCBweCA9IDEsIHB5ID0gMTsKKyAgICAgaW50IHRpbWVfZ2VuZXJhdGlvbiA9IEZBTFNFLCB0ZXN0X3NvbHZlID0gRkFMU0UsIGxpc3RfcHJlc2V0cyA9IEZBTFNFOworICAgICBpbnQgc29sbiA9IEZBTFNFLCBjb2xvdXIgPSBGQUxTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmMzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKQEAgLTAsMCArMSwyMDMgQEAKK1RoaXMgcGF0Y2ggZW5hYmxlIG93bCBtZW51LCB3aGljaCBpcyBoaWRkZW4gaW4gdGhlIHRpdGxlIGJhciB0byBzYXZlIHNwYWNlIG9uCitzbWFsbCBzY3JlZW4uIEl0IGhhcyBub3QgYmVlbiB1c2VkIGZvciBhIGxvbmcgdGltZSwgcmViYXNlIG5lZWRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbmFibGUgZmVhdHVyZV0KKworSW5kZXg6IHNyYy9ndGsuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9ndGsuYwkocmV2aXNpb24gMjIpCisrKysgc3JjL2d0ay5jCSh3b3JraW5nIGNvcHkpCitAQCAtMjgsNiArMjgsOCBAQAorICNpbmNsdWRlIDxnZGsvZ2RreC5oPgorICNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KKyAKKysjaW5jbHVkZSA8bGlib3dsL293bHdpbmRvd21lbnUuaD4KKysKKyAjaW5jbHVkZSA8bGlicnN2Zy9yc3ZnLmg+CisgCisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CitAQCAtMTIzNyw2ICsxMjM5LDcgQEAKKyAgICAgfQorIH0KKyAKKysjaWYgMAorIHN0YXRpYyB2b2lkCisgYWRkX3dpZGdldCAoR3RrVUlNYW5hZ2VyICptZXJnZSwKKyAJICAgIEd0a1dpZGdldCAqd2lkZ2V0LAorQEAgLTEyNDcsMTAgKzEyNTAsMTEgQEAKKyAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChib3gsIHdpZGdldCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAKKyAgICAgdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCAoR1RLX1dJREdFVCAoYm94KSk7CistICAgIGd0a193aWRnZXRfc2hvd19hbGwgKHRvcGxldmVsKTsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIEd0a0FjdGlvbkVudHJ5IHRvcGxldmVsX2FjdGlvbnNbXSA9IHsKKysgICAgeyAiVG9wIiwgTlVMTCwgIiIgfSwKKyAgICAgeyAiR2FtZSIsIE5VTEwsIE5fKCJHYW1lIikgfSwKKyAgICAgeyAiU2V0dGluZ3MiLCBOVUxMLCBOXygiU2V0dGluZ3MiKSB9LAorICAgICB7ICJIZWxwIiwgTlVMTCwgTl8oIkhlbHAiKSB9LAorQEAgLTEzMDMsMTEgKzEzMDcsMTMgQEAKKyAJCQlmcm9udGVuZCAqZmUpCisgeworICAgICBHU3RyaW5nICp4bWw7CisrICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgICBnYm9vbGVhbiBwcmVzZXRzID0gRkFMU0U7CisgICAgIEdTTGlzdCAqcmFkaW9fZ3JvdXAgPSBOVUxMOworICAgICBpbnQgaTsKKyAKKy0gICAgeG1sID0gZ19zdHJpbmdfbmV3ICgiPHVpPjxtZW51YmFyPjxwbGFjZWhvbGRlciBuYW1lPVwiVHlwZVBsYWNlaG9sZGVyXCI+IgorKyAgICB4bWwgPSBnX3N0cmluZ19uZXcgKCI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIlRvcE1lbnVcIiBhY3Rpb249XCJUb3BcIj4iCisrCQkJIjxwbGFjZWhvbGRlciBuYW1lPVwiVHlwZVBsYWNlaG9sZGVyXCI+IgorIAkJCSI8bWVudSBuYW1lPVwiU2V0dGluZ3NNZW51XCIgYWN0aW9uPVwiU2V0dGluZ3NcIj4iKTsKKyAKKyAgICAgZm9yIChpID0gMDsgaSA8IG1pZGVuZF9udW1fcHJlc2V0cyhmZS0+bWUpOyBpKyspIHsKK0BAIC0xMzU5LDggKzEzNjUsMTQgQEAKKyAJCQkgIjxtZW51aXRlbSBuYW1lPVwiQ3VzdG9tTWVudVwiIGFjdGlvbj1cIkN1c3RvbVwiLz4iKTsKKyAgICAgfQorICAgICAKKy0gICAgZ19zdHJpbmdfYXBwZW5kICh4bWwsICI8L21lbnU+PC9wbGFjZWhvbGRlcj48L21lbnViYXI+PC91aT4iKTsKKy0gICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgeG1sLT5zdHIsIC0xLCBOVUxMKTsKKysgICAgZ19zdHJpbmdfYXBwZW5kICh4bWwsICI8L21lbnU+PC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51YmFyPjwvdWk+Iik7CisrCisrICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHhtbC0+c3RyLCAtMSwgJmVycm9yKTsKKysgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKKysJZ193YXJuaW5nICgiRXJyb3IgYWRkaW5nIGN1c3RvbTogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisrCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworKyAgICB9CisrCisgICAgIGdfc3RyaW5nX2ZyZWUgKHhtbCwgVFJVRSk7CisgfQorIAorQEAgLTE0MzQsNiArMTQ0Niw3IEBACisgbmV3X3dpbmRvdyhjaGFyICphcmcsIGNoYXIgKiplcnJvcikKKyB7CisgICAgIGZyb250ZW5kICpmZTsKKysgICAgR0Vycm9yICplcnIgPSBOVUxMOworICAgICBHdGtCb3ggKnZib3g7CisgICAgIEd0a1VJTWFuYWdlciAqbWVyZ2U7CisgICAgIEd0a0FjdGlvbkdyb3VwICphY3Rpb25zOworQEAgLTE0OTYsOCArMTUwOSw2IEBACisgICAgIGd0a193aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1coZmUtPndpbmRvdyksIGZlLT5hY2NlbGdyb3VwKTsKKyAKKyAgICAgbWVyZ2UgPSBndGtfdWlfbWFuYWdlcl9uZXcgKCk7CistICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChtZXJnZSksICJhZGRfd2lkZ2V0IiwKKy0JCSAgICAgIEdfQ0FMTEJBQ0sgKGFkZF93aWRnZXQpLCB2Ym94KTsKKyAKKyAgICAgYWN0aW9ucyA9IGd0a19hY3Rpb25fZ3JvdXBfbmV3ICgiUHV6emxlQWN0aW9ucyIpOworICAgICBndGtfYWN0aW9uX2dyb3VwX2FkZF9hY3Rpb25zIChhY3Rpb25zLCB0b3BsZXZlbF9hY3Rpb25zLAorQEAgLTE1MDksMjIgKzE1MjAsMzkgQEAKKyAKKyAgICAgZ3RrX3VpX21hbmFnZXJfaW5zZXJ0X2FjdGlvbl9ncm91cCAobWVyZ2UsIGFjdGlvbnMsIDApOworICAgICAKKy0gICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fZmlsZSAobWVyZ2UsIERBVEFESVIgIi9vaC1wdXp6bGVzL3VpL21lbnUueG1sIiwgTlVMTCk7CisrICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX2ZpbGUgKG1lcmdlLCBEQVRBRElSICIvb2gtcHV6emxlcy91aS9tZW51LnhtbCIsIAorKwkJCQkgICAgICZlcnIpOworKyAgICBpZiAoZXJyICE9IE5VTEwpIHsKKysJZ193YXJuaW5nICgiRXJyb3IgbWFraW5nIFVJOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCWdfZXJyb3JfZnJlZSAoZXJyKTsKKysJZXJyID0gTlVMTDsKKysgICAgfQorIAorICAgICBpZiAodGhlZ2FtZS5jYW5fc29sdmUpIHsKKy0JICAgIGNoYXIgKnN0ciA9ICI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIkdhbWVNZW51XCIgYWN0aW9uPVwiR2FtZVwiPiIKKysJY2hhciAqc3RyID0gIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiVG9wTWVudVwiIGFjdGlvbj1cIlRvcFwiPiIKKysJICAgICI8bWVudSBuYW1lPVwiR2FtZU1lbnVcIiBhY3Rpb249XCJHYW1lXCI+IgorIAkgICAgIjxwbGFjZWhvbGRlciBuYW1lPVwiU29sdmVQbGFjZWhvbGRlclwiPiIKKyAJICAgICI8c2VwYXJhdG9yIG5hbWU9XCJTb2x2ZVNlcFwiLz4iCisgCSAgICAiPG1lbnVpdGVtIG5hbWU9XCJTb2x2ZU1lbnVcIiBhY3Rpb249XCJTb2x2ZVwiLz4iCistCSAgICAiPC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51YmFyPjwvdWk+IjsKKysJICAgICI8L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnU+PC9tZW51YmFyPjwvdWk+IjsKKyAKKy0JZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgc3RyLCAtMSwgTlVMTCk7CisrCWd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHN0ciwgLTEsICZlcnIpOworKwlpZiAoZXJyICE9IE5VTEwpIHsKKysJICAgIGdfd2FybmluZyAoIkVycm9yIGFkZGluZyBzb2x2ZS4gJXMiLCBlcnItPm1lc3NhZ2UpOworKwkgICAgZ19lcnJvcl9mcmVlIChlcnIpOworKwl9CisgICAgIH0KKyAKKyAgICAgaWYgKChuID0gbWlkZW5kX251bV9wcmVzZXRzKGZlLT5tZSkpID4gMCB8fCB0aGVnYW1lLmNhbl9jb25maWd1cmUpIHsKKyAJZ2VuZXJhdGVfc2V0dGluZ3NfbWVudSAobWVyZ2UsIGFjdGlvbnMsIGZlKTsKKyAgICAgfQorIAorKyAgICAvKiBEbyB0aGlzIHNvIHRoYXQgdGhlIG1lbnUgaXMgcGFja2VkIG5vdyBpbnN0ZWFkIG9mIGluIHRoZSBpZGxlIGxvb3AgKi8KKysgICAgZ3RrX3VpX21hbmFnZXJfZW5zdXJlX3VwZGF0ZSAobWVyZ2UpOworKworKyAgICBvd2xfc2V0X3dpbmRvd19tZW51X2l0ZW0gKEdUS19XSU5ET1cgKGZlLT53aW5kb3cpLAorKwkJCSAgICAgIEdUS19NRU5VX0lURU0gKGd0a191aV9tYW5hZ2VyX2dldF93aWRnZXQgKG1lcmdlLCAiL21lbnViYXIvVG9wTWVudSIpKSk7CisrICAgIAorICAgICBzZXR1cF9jb2xvdXJzIChmZSk7CisgICAgIHNldHVwX3BpeGJ1ZnMgKGZlKTsKKyAKK0BAIC0xNTcyLDcgKzE2MDAsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sgfAorIAkJCSAgR0RLX0JVVFRPTl9NT1RJT05fTUFTSyk7CisgCistICAgIC8qIFRoZSB3aW5kb3cgaXMgc2hvd24gb25jZSB0aGUgbWVudWJhciBoYXMgYmVlbiBhZGRlZCAqLworKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsIChmZS0+d2luZG93KTsKKyAgICAgcmV0dXJuIGZlOworIH0KKyAKK0luZGV4OiBzcmMvbWVudS54bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvbWVudS54bWwJKHJldmlzaW9uIDIyKQorKysrIHNyYy9tZW51LnhtbAkod29ya2luZyBjb3B5KQorQEAgLTEsMjYgKzEsMjUgQEAKKyA8dWk+CisgPG1lbnViYXI+CistPG1lbnUgbmFtZT0iR2FtZU1lbnUiIGFjdGlvbj0iR2FtZSI+CistCTxtZW51aXRlbSBuYW1lPSJOZXdNZW51IiBhY3Rpb249Ik5ldyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUmVzdGFydE1lbnUiIGFjdGlvbj0iUmVzdGFydCIvPgorLTwhLS0JPG1lbnVpdGVtIG5hbWU9IlNwZWNpZmljTWVudSIgYWN0aW9uPSJTcGVjaWZpYyIvPiAtLT4KKy0JPG1lbnVpdGVtIG5hbWU9IlJhbmRvbU1lbnUiIGFjdGlvbj0iUmFuZG9tIi8+CistCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDEiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IkxvYWRNZW51IiBhY3Rpb249IkxvYWQiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlNhdmVNZW51IiBhY3Rpb249IlNhdmUiLz4KKy0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMiIvPgorLQk8bWVudWl0ZW0gbmFtZT0iVW5kb01lbnUiIGFjdGlvbj0iVW5kbyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUmVkb01lbnUiIGFjdGlvbj0iUmVkbyIvPgorLQk8cGxhY2Vob2xkZXIgbmFtZT0iQ29weVBsYWNlaG9sZGVyIi8+CistCTxwbGFjZWhvbGRlciBuYW1lPSJTb2x2ZVBsYWNlaG9sZGVyIi8+CistCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDMiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlF1aXRNZW51IiBhY3Rpb249IlF1aXQiLz4KKy08L21lbnU+CisrPG1lbnUgbmFtZT0iVG9wTWVudSIgYWN0aW9uPSJUb3AiPgorKwk8bWVudSBuYW1lPSJHYW1lTWVudSIgYWN0aW9uPSJHYW1lIj4KKysJCTxtZW51aXRlbSBuYW1lPSJOZXdNZW51IiBhY3Rpb249Ik5ldyIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlJlc3RhcnRNZW51IiBhY3Rpb249IlJlc3RhcnQiLz4KKysJPCEtLQk8bWVudWl0ZW0gbmFtZT0iU3BlY2lmaWNNZW51IiBhY3Rpb249IlNwZWNpZmljIi8+IC0tPgorKwkJPG1lbnVpdGVtIG5hbWU9IlJhbmRvbU1lbnUiIGFjdGlvbj0iUmFuZG9tIi8+CisrCQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAxIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iTG9hZE1lbnUiIGFjdGlvbj0iTG9hZCIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlNhdmVNZW51IiBhY3Rpb249IlNhdmUiLz4KKysJCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDIiLz4KKysJCTxtZW51aXRlbSBuYW1lPSJVbmRvTWVudSIgYWN0aW9uPSJVbmRvIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iUmVkb01lbnUiIGFjdGlvbj0iUmVkbyIvPgorKwkJPHBsYWNlaG9sZGVyIG5hbWU9IkNvcHlQbGFjZWhvbGRlciIvPgorKwkJPHBsYWNlaG9sZGVyIG5hbWU9IlNvbHZlUGxhY2Vob2xkZXIiLz4KKysJPC9tZW51PgorIAorLTxwbGFjZWhvbGRlciBuYW1lPSJUeXBlUGxhY2Vob2xkZXIiLz4KKy0KKy08bWVudSBuYW1lPSJIZWxwTWVudSIgYWN0aW9uPSJIZWxwIj4KKysJPHBsYWNlaG9sZGVyIG5hbWU9IlR5cGVQbGFjZWhvbGRlciIvPgorIAk8bWVudWl0ZW0gbmFtZT0iQWJvdXRNZW51IiBhY3Rpb249IkFib3V0Ii8+CisrCTxtZW51aXRlbSBuYW1lPSJRdWl0TWVudSIgYWN0aW9uPSJRdWl0Ii8+CisrCisgPC9tZW51PgorIDwvbWVudWJhcj4KKyA8L3VpPgorSW5kZXg6IHNyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9NYWtlZmlsZS5hbQkocmV2aXNpb24gMjIpCisrKysgc3JjL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCitAQCAtMTAsNyArMTAsNyBAQAorIAlsaWdodHVwIGxvb3B5IG1hcCBtaW5lcyBuZXQgbmV0c2xpZGUgcGF0dGVybiBwZWdzIHJlY3Qgc2FtZWdhbWUgXAorIAlzaXh0ZWVuIHNsYW50IHNvbG8gdGVudHMgdHdpZGRsZSB1bnRhbmdsZQorIAorLWxpYnB1enpsZXNfbGFfTElCQUREID0gJChQVVpaTEVTX0xJQlMpCisrbGlicHV6emxlc19sYV9MSUJBREQgPSAkKFBVWlpMRVNfTElCUykgLWxvd2wKKyBsaWJwdXp6bGVzX2xhX1NPVVJDRVMgPSBjb21iaS5jIFwKKyAJCQljb25maWd1cmF0aW9uLmMgXAorIAkJCWRyYXdpbmcuYyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9vaC1wdXp6bGVzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmNkMmNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9vaC1wdXp6bGVzX2dpdC5iYgpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIlBvcnRhYmxlIFB1enpsZSBDb2xsZWN0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL28taGFuZC5jb20vIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9ZjU2ZWM2NzcyZGQxYzdjMzY3MDY3YmJlYThlYTE2NzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3RyZWUyMzQuaDtlbmRsaW5lPTI4O21kNT1hMTg4ZTZkMjUwNDMwY2EwOTRhNTRhODJmNDg0NzJhNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdHJlZTIzNC5jO2VuZGxpbmU9Mjg7bWQ1PWI0ZmViMTk3NmZlZWJmOGYxMzc5MDkzZWQ1MmYyOTQ1IgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ3RrKyBnY29uZiBpbnRsdG9vbC1uYXRpdmUgbGlicnN2ZyIKKworIyBsaWJvd2wgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworREVQRU5EU19hcHBlbmRfcG9reSA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnbGlib3dsJywgJycsIGQpfSIKKworIyBSZXF1aXJlcyBnZGsvZ2RreC5oIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICI5MmYxYTIwZTRiNzJlZWQ3YTM1YjAwOTg0ZDk3OTNiNTFkYzJmYjNiIgorUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgorUFIgPSAicjEwIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKK1NSQ19VUklfYXBwZW5kX3Bva3kgPSAiIGZpbGU6Ly9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoO3N0cmlwbGV2ZWw9MCAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworYmluZGlyID0gIi91c3IvZ2FtZXMiCisKK0VYVFJBX09FTUFLRSArPSAiR0NPTkZfRElTQUJMRV9NQUtFRklMRV9TQ0hFTUFfSU5TVEFMTD0xIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisgICAgY2QgJHtEfS8ke3ByZWZpeH0vZ2FtZXMKKyAgICBmb3IgcHJvZyBpbiAqOyBkbworCWlmIFsgLXggJHByb2cgXTsgdGhlbgorICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQorICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCisJICAgIGVjaG8gIm1ha2luZyAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AiCisJICAgIGNhdCA8PFNUT1AgPiAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT0kdGl0bGUKK0V4ZWM9JHtwcmVmaXh9L2dhbWVzLyRwcm9nCitJY29uPWFwcGxpY2F0aW9ucy1nYW1lcworVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R2FtZTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCitDb21tZW50PVBsYXkgJHRpdGxlLgorU1RPUAorICAgICAgICBmaQorICAgIGRvbmUKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LWV4dHJhIgorUkRFUEVORFNfJHtQTn0tZXh0cmEgKz0gIm9oLXB1enpsZXMiCisKK0ZJTEVTXyR7UE59ID0gIi91c3Ivc2hhcmUvcGl4bWFwcyAvdXNyL3NoYXJlL29oLXB1enpsZXMvIgorRklMRVNfJHtQTn0tZGJnICs9ICIvdXNyL2dhbWVzLy5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZXh0cmEgPSAiL3Vzci9nYW1lcy8gL3Vzci9zaGFyZS9hcHBsaWNhdGlvbnMgL2V0Yy9nY29uZi9zY2hlbWFzIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHZhciA9IGJiLmRhdGEuZXhwYW5kKCJGSUxFU18ke1BOfSIsIGQsIDEpCisgICAgZGF0YSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICBmb3IgbmFtZSBpbiAoImJyaWRnZXMiLCAiZmlmdGVlbiIsICJpbmVydGlhIiwgIm1hcCIsICJzYW1lZ2FtZSIsICJzbGFudCIpOgorICAgICAgICBkYXRhID0gZGF0YSArICIgL3Vzci9nYW1lcy8lcyIgJSBuYW1lCisgICAgICAgIGRhdGEgPSBkYXRhICsgIiAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucy8lcy5kZXNrdG9wIiAlIG5hbWUKKyAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC9ldGMvZ2NvbmYvc2NoZW1hcy8lcy5zY2hlbWFzIiAlIG5hbWUKKyAgICBkLnNldFZhcih2YXIsIGRhdGEpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9wdXp6bGVzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTgyNmMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9wdXp6bGVzX2dpdC5iYgpAQCAtMCwwICsxLDYxIEBACitTVU1NQVJZID0gIlNpbW9uIFRhdGhhbSdzIFBvcnRhYmxlIFB1enpsZSBDb2xsZWN0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9wdXp6bGVzLyIKKworREVQRU5EUyA9ICJndGsrIGxpYnh0IgorCisjIFRoZSBsaWJ4dCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PTMzYmNkNGJjZThmM2MxOTdmMmFlZmJkYmQyZDI5OWJjIgorCitTUkNfVVJJID0gImdpdDovL2dpdC50YXJ0YXJ1cy5vcmcvc2ltb24vcHV6emxlcy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIFwKKyIKK1NSQ1JFViA9ICJjMjk2MzAxYTA2Y2U0OWI4N2M5NTRjOWQxNTQ1MjUyMWRmZWRkZjFhIgorUEUgPSAiMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgLi9ta2ZpbGVzLnBsCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9iaW4vKiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vYmluLy5kZWJ1ZyIKKworZG9faW5zdGFsbCAoKSB7CisgICAgcm0gLXJmICR7RH0vKgorICAgIGV4cG9ydCBwcmVmaXg9JHtEfQorICAgIGV4cG9ydCBERVNURElSPSR7RH0KKyAgICBpbnN0YWxsIC1kICR7RH0vJHtwcmVmaXh9L2Jpbi8KKyAgICBvZV9ydW5tYWtlIGluc3RhbGwKKworCisgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisgICAgIyBDcmVhdGUgZGVza3RvcCBzaG9ydGN1dHMKKyAgICBjZCAke0R9LyR7cHJlZml4fS9iaW4KKyAgICBmb3IgcHJvZyBpbiAqOyBkbworCWlmIFsgLXggJHByb2cgXTsgdGhlbgorICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQorICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCisJICAgIGVjaG8gIm1ha2luZyAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AiCisJICAgIGNhdCA8PFNUT1AgPiAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT0kdGl0bGUKK0V4ZWM9JHtwcmVmaXh9L2Jpbi8kcHJvZworSWNvbj1hcHBsaWNhdGlvbnMtZ2FtZXMKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdhbWU7CitTdGFydHVwTm90aWZ5PXRydWUKK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorU1RPUAorICAgICAgICBmaQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUuaW5jIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNDNjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorU1VNTUFSWSA9ICJyeHZ0IHRlcm1pbmFsIGNsb25lIHN1cHBvcnRpbmcgdW5pY29kZSIKK0RFU0NSSVBUSU9OID0gInJ4dnQtdW5pY29kZSBpcyBhIGNsb25lIG9mIHRoZSB3ZWxsIGtub3duIFwKK3Rlcm1pbmFsIGVtdWxhdG9yIHJ4dnQsIG1vZGlmaWVkIHRvIHN0b3JlIHRleHQgaW4gVW5pY29kZSBcCisoZWl0aGVyIFVDUy0yIG9yIFVDUy00KSBhbmQgdG8gdXNlIGxvY2FsZS1jb3JyZWN0IGlucHV0IGFuZCBcCitvdXRwdXQuIEl0IGFsc28gc3VwcG9ydHMgbWl4aW5nIG11bHRpcGxlIGZvbnRzIGF0IHRoZSBcCitzYW1lIHRpbWUsIGluY2x1ZGluZyBYZnQgZm9udHMuIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4dCBsaWJ4ZnQgZ2RrLXBpeGJ1ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGlzdC5zY2htb3JwLmRlL3J4dnQtdW5pY29kZS9BdHRpYy9yeHZ0LXVuaWNvZGUtJHtQVn0udGFyLmJ6MiBcCisJICAgZmlsZTovL3h3Yy5wYXRjaCBcCisJICAgZmlsZTovL3J4dnQuZGVza3RvcCBcCisJICAgZmlsZTovL3J4dnQucG5nIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1BST1ZJREVTID0gInZpcnR1YWwveC10ZXJtaW5hbC1lbXVsYXRvciIKK0FMVEVSTkFUSVZFXyR7UE59ID0gIngtdGVybWluYWwtZW11bGF0b3IiCitBTFRFUk5BVElWRV9UQVJHRVRbeC10ZXJtaW5hbC1lbXVsYXRvcl0gPSAiJHtiaW5kaXJ9L3J4dnQiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mcGVybWlzc2l2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXhpbSBcCisJCS0tZW5hYmxlLXV0bXAgLS1lbmFibGUtd3RtcCAtLWVuYWJsZS1sYXN0bG9nIFwKKwkJLS13aXRoLXRlcm09cnh2dCAtLWVuYWJsZS1rZWVwc2Nyb2xsaW5nIFwKKwkJLS1lbmFibGUteGZ0IC0td2l0aC1uYW1lPXJ4dnQgLS1lbmFibGUtZnJpbGxzIFwKKwkJLS1lbmFibGUtc3dhcHNjcmVlbiAtLWVuYWJsZS10cmFuc3BhcmVuY3kgXAorCQktLXdpdGgtY29kZXNldHM9ZXUgLS1lbmFibGUtcG9pbnRlci1ibGFuayBcCisJCS0tZW5hYmxlLXRleHQtYmxpbmsgLS1lbmFibGUtcnh2dC1zY3JvbGwgXAorCQktLWVuYWJsZS1jb21iaW5pbmcgLS1kaXNhYmxlLXBlcmwgXAorCQktLXdpdGgteD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzdGFydHVwXSA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiwtLWRpc2FibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sc3RhcnR1cC1ub3RpZmljYXRpb24sIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY3AgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwllY2hvICcjZGVmaW5lIFVUTVBfRklMRSAiJHtsb2NhbHN0YXRlZGlyfS9ydW4vdXRtcCInID4+IGNvbmZpZy5oCisJZWNobyAnI2RlZmluZSBXVE1QX0ZJTEUgIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL3d0bXAiJyA+PiBjb25maWcuaAorCWVjaG8gJyNkZWZpbmUgTEFTVExPR19GSUxFICIke2xvY2Fsc3RhdGVkaXJ9L2xvZy9sYXN0bG9nIicgPj4gY29uZmlnLmgKKwllY2hvICcjZGVmaW5lIEhBVkVfWExPQ0FMRSAxJyA+PiBjb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnh2dC5wbmcgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yeHZ0LmRlc2t0b3AgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvcnh2dC5kZXNrdG9wICR7ZGF0YWRpcn0vcGl4bWFwcy9yeHZ0LnBuZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5kZXNrdG9wIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyZWE0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5kZXNrdG9wCkBAIC0wLDAgKzEsOSBAQAorW0Rlc2t0b3AgRW50cnldCitWZXJzaW9uPTEuMAorTmFtZT1UZXJtaW5hbAorQ29tbWVudD1BIHVuaWNvZGUgY2FwYWJsZSByeHZ0IGNsb25lCitFeGVjPXJ4dnQKK0ljb249dGVybWluYWwKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPVV0aWxpdHk7VGVybWluYWxFbXVsYXRvcjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5wbmcgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmZhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUveHdjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS94d2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlZmVlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUveHdjLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC1ydU4gcnh2dC11bmljb2RlLTkuMTAtb3JpZy8vc3JjL3NjcmVlbi5DIHJ4dnQtdW5pY29kZS05LjEwL3NyYy9zY3JlZW4uQworLS0tIHJ4dnQtdW5pY29kZS05LjEwLW9yaWcvL3NyYy9zY3JlZW4uQwkyMDExLTA0LTE5IDEzOjM0OjAxLjMyNzY2NDk4NCArMDgwMAorKysrIHJ4dnQtdW5pY29kZS05LjEwL3NyYy9zY3JlZW4uQwkyMDExLTA0LTE5IDEzOjM0OjQ3LjAzNzY2NTAwMSArMDgwMAorQEAgLTMxNTIsNyArMzE1Miw3IEBACisgICAgICAgcmV0dXJuIGZhbHNlOworICAgICB9CisgCistI2lmIDAKKysjaWYgSEFWRV9YV0MKKyAgIFhUZXh0UHJvcGVydHkgY3Q7CisgCisgICBpZiAoWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSAoZHB5LCAmc2VsZWN0aW9uLnRleHQsIDEsIFhTdHJpbmdTdHlsZSwgJmN0KSA+PSAwKQorQEAgLTM3MzQsOSArMzczNCwxMSBAQAorICAgICAgICAgfQorICAgICAgIGVsc2UKKyAjZW5kaWYKKysjaWZkZWYgSEFWRV9YV0MKKyAgICAgICBpZiAoWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSAoZHB5LCAmY2wsIDEsIChYSUNDRW5jb2RpbmdTdHlsZSkgc3R5bGUsICZjdCkgPj0gMCkKKyAgICAgICAgIGZyZWVjdCA9IDE7CisgICAgICAgZWxzZQorKyNlbmRpZgorICAgICAgICAgeworICAgICAgICAgICAvKiBpZiB3ZSBmYWlsZWQgdG8gY29udmVydCB0aGVuIHNlbmQgaXQgcmF3ICovCisgICAgICAgICAgIGN0LnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiljbDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDgwZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSByeHZ0LXVuaWNvZGUuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uQztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT03NzU0ODUzOThhMDlmYTdhZWU2ZjkwNDY0YWY4ODQzMiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhNWI4MjNmMDhkMjEwMzZmOTRhNmM1MWU5NGQwMjViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3M2UxM2ZlNjRiNTlmZDNjOGU2ZTIwYzAwZjE0OWQzODg3NDFmMTQxYjgxNTVlNDcwMGQzZWQ0MGFhOTRiNGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjEuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0OTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcnh2dC11bmljb2RlLmluYworCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uQztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT03ZGFjMDM5NTgwNjU3MDg1NmUwMzdmOThhYmE4NTEzYiIKKworU1JDX1VSSVttZDVzdW1dID0gImE5YTA2YzYwODI1OGM1ZmQyNDdjMzcyNWQ4ZjQ0NTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1MjcwZWQ3MmJjNTg5NWE2NGExZDczOTJiZjQ1YTYyMjIwNDE5MjM3MWMzOTY1YmQzZGQ5NzhkYzA4ODk1NmIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTc2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGI5ZjAyOTg5MzEwYTNjOTIwNTg5ZjFhYTY0NmJjYmYxNmIyNTcyYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMyBKdW4gMjAxMiAxMTowNzozMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBJbmhlcml0IHRoZSBHTk9NRSBpY29uIHRoZW1lCisKK0lmIHRoZSBHTk9NRSBpY29uIHRoZW1lIGlzbid0IGluc3RhbGxlZCB0aGlzIGlzIGEgbm8tb3AsIGJ1dCBpZiBpdCBpcyB0aGVuCit5b3UnbGwgZ2V0IGZhbGxiYWNrIGZyb20gU2F0byB0byBHTk9NRSBmb3IgaWNvbnMgdGhhdCBhcmUgbm90IGluIFNhdG8uCisKK0FzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgZnVsbCBHTk9NRSBpY29uIHRoZW1lIGRlcGVuZCBvbiBnbm9tZS1pY29uLXRoZW1lLAordGhpcyBqdXN0IHdvcmtzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBpbmRleC50aGVtZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvaW5kZXgudGhlbWUgYi9pbmRleC50aGVtZQoraW5kZXggYzRiMDNhNy4uNjg4ZmJiZiAxMDA2NDQKKy0tLSBhL2luZGV4LnRoZW1lCisrKysgYi9pbmRleC50aGVtZQorQEAgLTEsNiArMSw3IEBACisgW0ljb24gVGhlbWVdCisgTmFtZT1TYXRvCisgQ29tbWVudD1TYXRvIGljb24gdGhlbWUKKytJbmhlcml0cz1BZHdhaXRhCisgCisgRGlyZWN0b3JpZXM9MTZ4MTYvYXBwcywxNngxNi9zdGF0dXMsMTZ4MTYvc3RvY2ssMTZ4MTYvcGxhY2VzLDE2eDE2L21pbWV0eXBlcywxNngxNi9kZXZpY2VzLDE2eDE2L2FjdGlvbnMsMjJ4MjIvYXBwcywyMngyMi9zdGF0dXMsMjJ4MjIvc3RvY2ssMjJ4MjIvcGxhY2VzLDIyeDIyL21pbWV0eXBlcywyMngyMi9kZXZpY2VzLDIyeDIyL2FjdGlvbnMsMzJ4MzIvYXBwcywzMngzMi9zdGF0dXMsMzJ4MzIvc3RvY2ssMzJ4MzIvcGxhY2VzLDMyeDMyL21pbWV0eXBlcywzMngzMi9kZXZpY2VzLDMyeDMyL2FjdGlvbnMsNDh4NDgvYXBwcyw0OHg0OC9zdGF0dXMsNDh4NDgvc3RvY2ssNDh4NDgvcGxhY2VzLDQ4eDQ4L21pbWV0eXBlcyw0OHg0OC9kZXZpY2VzLDQ4eDQ4L2FjdGlvbnMsNjR4NjQvYXBwcyw2NHg2NC9zdGF0dXMsNjR4NjQvc3RvY2ssNjR4NjQvcGxhY2VzLDY0eDY0L21pbWV0eXBlcyw2NHg2NC9kZXZpY2VzLDY0eDY0L2FjdGlvbnMsCisgCistLSAKKzEuNy4xMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZV8wLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQ3MzVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZV8wLjQuMS5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlNhdG8gaWNvbiB0aGVtZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkNDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU2YTgzMGJiZTZlNDY5N2ZlNmNiYmFlMDFiYjdjMmIyIgorU0VDVElPTiA9ICJ4MTEiCisKK1BSID0gInI2IgorCitERVBFTkRTID0gImljb24tbmFtaW5nLXV0aWxzLW5hdGl2ZSBsaWJ4bWwtc2ltcGxlLXBlcmwtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9wb2t5bGludXgub3JnL3JlbGVhc2VzL3NhdG8vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NmE4NDdmMzEyOGE0M2E5Y2YyM2I3MDI5YTY1NmY1MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjBhMjgwN2E2YTk2OTE4YWM3OTlhODYwOTRlYzNlOGUyYzg5MmJlMGZkNjc5YTQyMzJjMmE3N2YyZjYxNzMyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYWxsYXJjaCBndGstaWNvbi1jYWNoZSBwZXJsbmF0aXZlCisKKyMgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNlcyBwa2ctY29uZmlnIHRvIGZpbmQgbmF0aXZlIGJpbmFyaWVzIHRvIGV4ZWN1dGUsIHNvCisjIHRlbGwgaXQgdG8gdXNlIG91ciBwa2ctY29uZmlnLW5hdGl2ZSB3cmFwcGVyLgorZXhwb3J0IFBLR19DT05GSUcgPSAicGtnLWNvbmZpZy1uYXRpdmUiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zL1NhdG8iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyBwcmVmZXJlbmNlcy1zeXN0ZW0ucG5nIHt9L2FwcHMvcHJlZmVyZW5jZXMtZGVza3RvcC5wbmcgXDsKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgZmlsZS1tYW5hZ2VyLnBuZyB7fS9hcHBzL3N5c3RlbS1maWxlLW1hbmFnZXIucG5nIFw7CisJZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIC4uL2FwcHMvdGVybWluYWwucG5nIHt9L3BsYWNlcy9jb21wdXRlci5wbmcgXDsKK30KKworIyBFeHBsaWN0bHkgc2V0dGluZyAiU2F0byIgYXMgdGhlIGRlZmF1bHQgaWNvbiB0aGVtZSB0byBhdm9pZCBmbGlja2VyaW5nIGZyb20KKyMgdGhlIGRlc2t0b3AgYW5kIHNldHRpbmdzIGRhZW1vbiByYWNpbmcuICBUaGlzIHNob3VsZG4ndCBiZSBkb25lIGhlcmUgYnV0IGluIHRoZSBzYXRvIGltYWdlCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIG1rZGlyIC1wICREL2V0Yy9ndGstMi4wCisKKyAgICBncmVwIC1zIC1xIC1lIF5ndGstaWNvbi10aGVtZS1uYW1lLipcIlNhdG9cIiAkRC9ldGMvZ3RrLTIuMC9ndGtyYyB8fCBcCisgICAgICAgIGVjaG8gJ2d0ay1pY29uLXRoZW1lLW5hbWUgPSAiU2F0byInID4+ICREL2V0Yy9ndGstMi4wL2d0a3JjCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTQwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlVsdHJhLXNpbXBsZSBzY3JlZW4gY2FwdHVyZSB1dGlsaXR5LCBhaW1lZCBhdCBoYW5kaGVsZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT05O21kNT0wMjNlMTRkNjQwNGQwYTk2MWViOTdjYmQwMTFmYzE0MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zY3JlZW5zaG90LXVpLmg7ZW5kbGluZT05O21kNT02MzhkOWZmYTgzZTkzMjVhMzZkZjIyNDE2NmVkNmFkMCIKKworREVQRU5EUyA9ICJtYXRjaGJveC1wYW5lbC0yIgorU1JDUkVWID0gIjNhOTY4OGU4YTAxYjYzYTc4ZjQwMmI0ZTdjMGI4YjAwNWZjZGZhMjkiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9zY3JlZW5zaG90IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLy5kZWJ1ZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYQorfQorCisjIFRoZSBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvNzBzZXR0aW5ncy1kYWVtb24uc2ggYi9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvNzBzZXR0aW5ncy1kYWVtb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzNzQxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaApAQCAtMCwwICsxIEBACisvdXNyL2Jpbi9zZXR0aW5ncy1kYWVtb24gJgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2FkZHNvdW5ka2V5cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9hZGRzb3VuZGtleXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmMDZkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9hZGRzb3VuZGtleXMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9zZXR0aW5ncy1kYWVtb24uYwkyMDA5LTA1LTIyIDE0OjU3OjA1LjAwMDAwMDAwMCArMDEwMAorKysrIHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uYwkyMDA5LTA1LTIyIDE0OjU4OjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE4Nyw2ICsxODcsMTAgQEAKKyAgICAgR0NPTkZfVkFMVUVfU1RSSU5HLCB0cmFuc2xhdGVfc3RyaW5nX3N0cmluZyB9LAorICAgeyAiL2Rlc2t0b3AvcG9reS9pbnRlcmZhY2UvZ3RrX2NvbG9yX3NjaGVtZSIsICJHdGsvQ29sb3JTY2hlbWUiLAorICAgICBHQ09ORl9WQUxVRV9TVFJJTkcsIHRyYW5zbGF0ZV9zdHJpbmdfc3RyaW5nIH0sCisrICB7ICIvZGVza3RvcC9nbm9tZS9zb3VuZC90aGVtZV9uYW1lIiwgIk5ldC9Tb3VuZFRoZW1lTmFtZSIsCisrICAgIEdDT05GX1ZBTFVFX1NUUklORywgICB0cmFuc2xhdGVfc3RyaW5nX3N0cmluZyB9LAorKyAgeyAiL2Rlc2t0b3AvZ25vbWUvc291bmQvZXZlbnRfc291bmRzIiwgIk5ldC9FbmFibGVFdmVudFNvdW5kcyIgLAorKyAgICBHQ09ORl9WQUxVRV9CT09MLCAgICAgdHJhbnNsYXRlX2Jvb2xfaW50IH0sCisgfTsKKyAKKyBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25FbnRyeSoKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLnNjaGVtYXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcwkyMDA5LTA1LTIyIDE1OjQ5OjE3LjAwMDAwMDAwMCArMDEwMAorKysrIHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcwkyMDA5LTA1LTIyIDE1OjUxOjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTE5Niw2ICsxOTYsMjcgQEAKKyAgICAgPC9sb2NhbGU+CisgICA8L3NjaGVtYT4KKyAKKysgIDxzY2hlbWE+CisrICAgIDxrZXk+L3NjaGVtYXMvZGVza3RvcC9nbm9tZS9zb3VuZC90aGVtZV9uYW1lPC9rZXk+CisrICAgIDxhcHBseXRvPi9kZXNrdG9wL2dub21lL3NvdW5kL3RoZW1lX25hbWU8L2FwcGx5dG8+CisrICAgIDxvd25lcj5nbm9tZTwvb3duZXI+CisrICAgIDx0eXBlPnN0cmluZzwvdHlwZT4KKysgICAgPGRlZmF1bHQ+ZnJlZWRlc2t0b3A8L2RlZmF1bHQ+CisrICAgIDxsb2NhbGUgbmFtZT0iQyI+CisrICAgICAgPHNob3J0PlNvdW5kIFRoZW1lIE5hbWU8L3Nob3J0PgorKyAgICA8L2xvY2FsZT4KKysgIDwvc2NoZW1hPgorKworKyAgPHNjaGVtYT4KKysgICAgPGtleT4vc2NoZW1hcy9kZXNrdG9wL2dub21lL3NvdW5kL2V2ZW50X3NvdW5kczwva2V5PgorKyAgICA8YXBwbHl0bz4vZGVza3RvcC9nbm9tZS9zb3VuZC9ldmVudF9zb3VuZHM8L2FwcGx5dG8+CisrICAgIDxvd25lcj5nbm9tZTwvb3duZXI+CisrICAgIDx0eXBlPmJvb2w8L3R5cGU+CisrICAgIDxkZWZhdWx0PnRydWU8L2RlZmF1bHQ+CisrICAgIDxsb2NhbGUgbmFtZT0iQyI+CisrICAgICAgPHNob3J0PkVuYWJsZSBTb3VuZCBFdmVudHM8L3Nob3J0PgorKyAgICA8L2xvY2FsZT4KKysgIDwvc2NoZW1hPgorIAorIDwvc2NoZW1hbGlzdD4KKyA8L2djb25mc2NoZW1hZmlsZT4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0Mzc0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworYWZ0ZXIgZ2NjIGxpbmtpbmcgaGFzIGNoYW5nZWQsIGFsbCB0aGUgbGlicmFyaWVzIG11c3QgYmUgZXhwbGljaXRlbHkgc3BlY2lmaWVkIHRvIGZvciBsaW5raW5nLiAKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgbGlua2luZyBlcnJvcjoKKworfCBtYWtlICBhbGwtYW1eTQorfCBtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQorfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eCAtV2FsbCAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbyBzZXR0aW5ncy1kYWVtb24gc2V0dGluZ3NfZGFlbW9uLXhzZXR0aW5ncy1jb21tb24ubyBzZXR0aW5nc19kYWVtb24teHNldHRpbmdzLW1hbmFnZXIubyBzZXR0aW5nc19kYWVtb24tc2V0dGluZ3MtZGFlbW9uLm8gLXB0aHJlYWQgLWxnY29uZi0yIC1sZGJ1cy1nbGliLTEgLWxkYnVzLTEgLWxwdGhyZWFkIC1sZ2RrLXgxMS0yLjAgLWxnZGtfcGl4YnVmLTIuMCAtbHBhbmdvY2Fpcm8tMS4wIC1scGFuZ28tMS4wIC1sY2Fpcm8gLWxnb2JqZWN0LTIuMCAtbGdtb2R1bGUtMi4wIC1sZ3RocmVhZC0yLjAgLWxydCAtbGdsaWItMi4wXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9pNTg2LXBva3ktbGludXgvZ2NjL2k1ODYtcG9reS1saW51eC80LjUuMS9sZDogKl5BOiBpbnZhbGlkIERTTyBmb3Igc3ltYm9sIGBYQ3JlYXRlU2ltcGxlV2luZG93JyBkZWZpbml0aW9uXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eC91c3IvbGliL2xpYlgxMS5zby42OiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBCYWQgdmFsdWVeTQorfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c15NCit8IG1ha2VbMV06ICoqKiBbc2V0dGluZ3MtZGFlbW9uXSBFcnJvciAxXk0KK3wgbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQorfCBtYWtlOiAqKiogW2FsbF0gRXJyb3IgMl5NCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDExLzAxLzExCisKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2V0dGluZ3MtZGFlbW9uLm9yaWcvY29uZmlndXJlLmFjCisrKysgc2V0dGluZ3MtZGFlbW9uL2NvbmZpZ3VyZS5hYworQEAgLTE0LDcgKzE0LDcgQEAgQUNfUFJPR19DQworIAorIAorIGRubCBUT0RPOiBtYWtlIGdjb25mIG9wdGlvbmFsCistUEtHX0NIRUNLX01PRFVMRVMoQVBQLCBbZ2NvbmYtMi4wIGdkay14MTEtMi4wXSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhBUFAsIFtnY29uZi0yLjAgZ2RrLXgxMS0yLjAgeDExXSkKKyAKKyAKKyBBQ19TVUJTVChBUFBfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDYxNTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhIGJyaWRnZSBiZXR3ZWVuIGdjb25mIGFuZCB4c2V0dGluZ3MiCitIT01FUEFHRSA9ICJodHRwOi8vc3ZuLm8taGFuZC5jb20vdmlldy9tYXRjaGJveC90cnVuay9zZXR0aW5ncy1kYWVtb24vIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hzZXR0aW5ncy1tYW5hZ2VyLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNvbW1vbi5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIgorREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCBndGsrIgorU0VDVElPTiA9ICJ4MTEiCitTUkNSRVYgPSAiOWE5OTUyOGIwMjI1NTQ1MGRiODExNzZhYmQ5YmJjYzFkYWI5YTRjMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3hzZXR0aW5ncy1kYWVtb24gXAorICAgICAgICAgICBmaWxlOi8vYWRkc291bmRrZXlzLnBhdGNoO2FwcGx5PXllcyBcCisgICAgICAgICAgIGZpbGU6Ly83MHNldHRpbmdzLWRhZW1vbi5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2NvbmYgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ID0gCSIke2JpbmRpcn0vKiAke3N5c2NvbmZkaXJ9IgorCisjIFJlcXVpcmVzIGdkay14MTEtMi4wIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZAorCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vNzBzZXR0aW5ncy1kYWVtb24uc2ggJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGQ2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhbiBpY29uIHRvIHNodXQgZG93biB0aGUgc3lzdGVtIGNsZWFubHkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9zaHV0ZG93bi5kZXNrdG9wIgorCitQUiA9ICJyMSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisJaW5zdGFsbCAtbSAwNjQ0IHNodXRkb3duLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisJc2VkIC1pICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9zaHV0ZG93bi5kZXNrdG9wIC1lICdzI15FeGVjPVwoLipcKSNFeGVjPSR7YmFzZV9zYmluZGlyfS9cMSMnCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgZ3JlcCAtcSBxZW11YXJtICREJHtzeXNjb25mZGlyfS9ob3N0bmFtZSAmJiBcCisgICAgICAgIHNlZCAtaSAkRCR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL3NodXRkb3duLmRlc2t0b3AgLWUgJ3MjXkV4ZWM9XCguKlwpL2hhbHQjRXhlYz1cMS9yZWJvb3QjJyBcCisgICAgICAgIHx8IHRydWUKK30KKworaW5oZXJpdCBhbGxhcmNoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24uZGVza3RvcCBiL21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MjY1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24uZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK0VuY29kaW5nPVVURi04CitUeXBlPUFwcGxpY2F0aW9uCitOYW1lPVNodXRkb3duCitDb21tZW50PUNsb3NlIGRvd24gdGhlIG1hY2hpbmUgc2FmZWx5CitFeGVjPXBvd2Vyb2ZmCitJY29uPXN5c3RlbS1zaHV0ZG93bgorVGVybWluYWw9ZmFsc2UKK0NhdGVnb3JpZXM9VXRpbGl0eTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVRoaXMtcGF0Y2gtZml4ZXMtYS1jb21tYW5kLWxpbmUtdGhhdC1pcy10b28tbG9uZy1vdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiMzQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVRoaXMtcGF0Y2gtZml4ZXMtYS1jb21tYW5kLWxpbmUtdGhhdC1pcy10b28tbG9uZy1vdmUucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorRnJvbSAyMmQ1MDYzYzU1MWQzYzA4YzBhNGFkOGI4MGUwOGI3OTNkNTMwOTNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDE2OjIzOjI3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoaXMgcGF0Y2ggZml4ZXMgYSBjb21tYW5kIGxpbmUgdGhhdCBpcyB0b28gbG9uZyAob3ZlciAxMDBLISkKKyBhbmQgaXMgcmVqZWN0ZWQgYnkgL2Jpbi9zaC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbc2hvdWxkIGFwcGVhciBpbiAyLjEwLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xODQ4NTZdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAgICAgICAgfCAxMSArKysrKystLS0tLQorIFRvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5IHwgMTYgKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK2luZGV4IGExM2FmN2MuLjA1OGMyNDEgMTAwNjQ0CistLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK0BAIC00MDgsNyArNDA4LDcgQEAgc2V0KFdlYktpdDJXZWJFeHRlbnNpb25fSU5TVEFMTEVEX0hFQURFUlMKKyAgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmgKKyApCisgCistZmlsZShHTE9CIEluc3BlY3RvckZpbGVzCisrc2V0KEluc3BlY3RvckZpbGVzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvKi5odG1sCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS8qLmpzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvKi5jc3MKK0BAIC00MjMsMTMgKzQyMywxNCBAQCBmaWxlKEdMT0IgSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy8qLmpzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL2d0ay8qLnBuZworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9ndGsvKi5zdmcKKy0pCistCistbGlzdChBUFBFTkQgSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCisgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKyApCisgCisrZmlsZShHTE9CIEluc3BlY3RvckZpbGVzRGVwZW5kZW5jaWVzCisrICAgICR7SW5zcGVjdG9yRmlsZXN9CisrKQorKworICMgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIEdUSysgQVBJIFdlYktpdFZlcnNpb24uaCBhbmQgb25lIGdlbmVyYXRlZCBieSBXZWJDb3JlLgorIGxpc3QoSU5TRVJUIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUyAwCisgICAgICIke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0iCitAQCAtNTY0LDcgKzU2NSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKKyAKKyBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0vSW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLnhtbAorLSAgICBERVBFTkRTICR7SW5zcGVjdG9yRmlsZXN9CisrICAgIERFUEVORFMgJHtJbnNwZWN0b3JGaWxlc0RlcGVuZGVuY2llc30KKyAgICAgICAgICAgICAke1RPT0xTX0RJUn0vZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKKyAgICAgQ09NTUFORCAke1RPT0xTX0RJUn0vZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkgLS1vdXRwdXQ9JHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L0luc3BlY3RvckdSZXNvdXJjZUJ1bmRsZS54bWwgJHtJbnNwZWN0b3JGaWxlc30KKyAgICAgVkVSQkFUSU0KK2RpZmYgLS1naXQgYS9Ub29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CitpbmRleCAwNjg3YzRjLi4wMzA2MGNmIDEwMDc1NQorLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKKysrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CitAQCAtMTYsNiArMTYsNyBAQAorICMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgCisgaW1wb3J0IGFyZ3BhcnNlCisraW1wb3J0IGdsb2IKKyBpbXBvcnQgb3MKKyBpbXBvcnQgc3lzCisgCitAQCAtMjYsMTAgKzI3LDE3IEBAIEJBU0VfRElSID0gJ1dlYkluc3BlY3RvclVJLycKKyBkZWYgZ2V0X2ZpbGVuYW1lcyhhcmdzKToKKyAgICAgZmlsZW5hbWVzID0gW10KKyAKKy0gICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CistICAgICAgICBiYXNlX2Rpcl9pbmRleCA9IGZpbGVuYW1lLnJmaW5kKEJBU0VfRElSKQorLSAgICAgICAgaWYgYmFzZV9kaXJfaW5kZXggIT0gLTE6CistICAgICAgICAgICAgZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZVtiYXNlX2Rpcl9pbmRleCArIGxlbihCQVNFX0RJUik6XSkKKysgICAgZm9yIHBhdHRlcm4gaW4gYXJnczoKKysgICAgICAgIHBhdGhzID0gZ2xvYi5nbG9iKHBhdHRlcm4pCisrICAgICAgICBmb3IgZmlsZW5hbWUgaW4gcGF0aHM6CisrICAgICAgICAgICAgYmFzZV9kaXJfaW5kZXggPSBmaWxlbmFtZS5yZmluZChCQVNFX0RJUikKKysgICAgICAgICAgICBpZiBiYXNlX2Rpcl9pbmRleCAhPSAtMToKKysgICAgICAgICAgICAgICAgbmFtZSA9IGZpbGVuYW1lW2Jhc2VfZGlyX2luZGV4ICsgbGVuKEJBU0VfRElSKTpdCisrICAgICAgICAgICAgICAgICMgVGhlIHJlc3VsdCBzaG91bGQgdXNlIGZvcndhcmQgc2xhc2hlcywgdGh1cyBtYWtlIHN1cmUgYW55IG9zLXNwZWNpZmljCisrICAgICAgICAgICAgICAgICMgc2VwYXJhdG9yLCBhZGRlZCBieSB0aGUgZ2xvYi5nbG9iKCkgY2FsbCwgaXMgcHJvcGVybHkgcmVwbGFjZWQKKysgICAgICAgICAgICAgICAgaWYgb3Muc2VwICE9ICcvJzoKKysgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob3Muc2VwLCAnLycpCisrICAgICAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQobmFtZSkKKyAgICAgcmV0dXJuIGZpbGVuYW1lcworIAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrL2djYzUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrL2djYzUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1MWE4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitKU09iamVjdDogQ3JlYXRlIGV4cGxpY2l0IGluc3RhbnRpYXRpb24gb2YgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzCisKK1JlYXNvbiBmb3IgY2hhbmdlOiBuZXdlciBnY2MgbWlnaHQgb3B0aW1pemUgYXdheSB0aGUgdGVtcGxhdGVzCithbmQgdGhleSB3b250IGJlIGF2YWlsYWJsZSBmb3Igb3RoZXIgLmNwcCBmaWxlcyB0byB1c2UgYXMgdGhlc2UKK2FyZSB1c2VkIGluIGEgZGlmZmVyZW50IC5jcHAgd2UgbmVlZCB0byB0ZWxsIGNvbXBpbGVyIHRvIGV4cGxpY2l0bHkKK2luc3RhbnRpYXRlIHRoZW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogd2Via2l0Z3RrLTIuOC41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjguNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysrIHdlYmtpdGd0ay0yLjguNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKK0BAIC0xOTY1LDYgKzE5NjUsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgorICAgICB9CisgfQorIAorK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxJbnQzMlNoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxEb3VibGVTaGFwZT4oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKTsKKyt0ZW1wbGF0ZSB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8Q29udGlndW91c1NoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworKworIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQorIHsKKyAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi44LjUuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuOC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZDY3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuOC41LmJiCkBAIC0wLDAgKzEsNTggQEAKK1NVTU1BUlkgPSAiV2ViS2l0IHdlYiByZW5kZXJpbmcgZW5naW5lIGZvciB0aGUgR1RLKyBwbGF0Zm9ybSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvIgorCitMSUNFTlNFID0gIkJTRCAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ09QWUlORy5MSUI7bWQ1PWQwYzZkNjM5N2E1ZDg0Mjg2ZGRhNzU4ZGE1N2JkNjkxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9XZWJLaXQvTElDRU5TRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1BUFBMRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorCQkgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtTEdQTC0yO21kNT0zNjM1N2ZmZGUyYjY0YWUxNzdiMjQ5NDQ0NWI3OWQyMSBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTIuMTttZDU9YTc3OGEzM2VmMzM4YWJiYWY4YjhhN2MzNmI2ZWVjODAgXAorCQkgICAiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgIGZpbGU6Ly8wMDAxLVRoaXMtcGF0Y2gtZml4ZXMtYS1jb21tYW5kLWxpbmUtdGhhdC1pcy10b28tbG9uZy1vdmUucGF0Y2ggXAorICBmaWxlOi8vZ2NjNS5wYXRjaCBcCisgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZjc5OTkxODQ4YTUwOTZkM2E3NTI4OWViY2U1NDdhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZDFmMGM1MzQ5MzVmNDNmZDc0ZGY5MGYyNjQ4ZmNlZTY3MmQ2MGYxZjU3YTMwZmE1NTdhNzc4OTFhZTA0ZDIwIgorCitpbmhlcml0IGNtYWtlIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBwZXJsbmF0aXZlIHB5dGhvbm5hdGl2ZQorCitERVBFTkRTID0gInpsaWIgZW5jaGFudCBsaWJzb3VwLTIuNCBjdXJsIGxpYnhtbDIgY2Fpcm8gbGlieHNsdCBsaWJ4dCBsaWJpZG4gZ251dGxzIFwKKyAgICAgICAgICAgZ3RrKyBndGsrMyBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBmbGV4LW5hdGl2ZSBncGVyZi1uYXRpdmUgc3FsaXRlMyBcCisJICAgcGFuZ28gaWN1IGJpc29uLW5hdGl2ZSBnbm9tZS1jb21tb24gZ2F3ayBpbnRsdG9vbC1uYXRpdmUgbGlid2VicCBcCisJICAgYXRrIHVkZXYgaGFyZmJ1enoganBlZyBsaWJwbmcgcHVsc2VhdWRpbyBsaWJyc3ZnIGxpYnRoZW9yYSBsaWJ2b3JiaXMgbGlieGNvbXBvc2l0ZSBsaWJ4dHN0IFwKKwkgICBydWJ5LW5hdGl2ZSBsaWJzZWNyZXQgbGlibm90aWZ5IGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBcCisgICAgICAgICAgIgorREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wnLCAnJywgZCl9IgorCitFWFRSQV9PRUNNQUtFID0gIiBcCisJCS1EUE9SVD1HVEsgXAorCQktRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSBcCisJCS1ERU5BQkxFX0lOVFJPU1BFQ1RJT049RmFsc2UgXAorCQktREVOQUJMRV9NSU5JQlJPV1NFUj1UcnVlIFwKKwkgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJy1ERU5BQkxFX1dFQkdMPVRydWUnLCAnLURFTkFCTEVfV0VCR0w9RmFsc2UnLCBkKX0gXAorCQkiCisKKyMgSmF2YXNjcmlwdCBKSVQgaXMgbm90IHN1cHBvcnRlZCBvbiBwb3dlcnBjCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYzY0ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorCisjIEFSTSBKSVQgY29kZSBkb2VzIG5vdCBidWlsZCBvbiBBUk12NS82IGFueW1vcmUsIGFwcGFyZW50bHkgdGhleSB0ZXN0IG9ubHkgb24gdjcgb253YXJkcworRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjUgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NiA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKKworIyBiaW51dGlscyAyLjI1LjEgaGFzIGEgYnVnIG9uIGFhcmNoNjQ6CisjIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE4NDMwCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hYXJjaDY0ID0gIiAtRFVTRV9MRF9HT0xEPUZhbHNlICIKKworIyBKSVQgbm90IHN1cHBvcnRlZCBvbiBNSVBTIGVpdGhlcgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwcyA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHM2NCA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS93ZWJraXQyZ3RrLTQuMC9pbmplY3RlZC1idW5kbGUvbGlid2Via2l0Mmd0a2luamVjdGVkYnVuZGxlLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vd2Via2l0Mmd0ay00LjAvaW5qZWN0ZWQtYnVuZGxlLy5kZWJ1Zy9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS93ZWJraXRndGsvd2Via2l0Mmd0ay00LjAvLmRlYnVnLyoiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWdmaXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlnZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjExNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlnZml4LnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwci11dGlsLTEuMy40L2FwdS1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItdXRpbC0xLjMuNC5vcmlnL2FwdS1jb25maWcuaW4JMjAwOS0wMS0xMiAxNzowODowNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcHItdXRpbC0xLjMuNC9hcHUtY29uZmlnLmluCTIwMDktMDEtMTIgMTc6MDk6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtMTM0LDE0ICsxMzQsNyBAQAorICAgICBleGl0IDAKKyAgICAgOzsKKyAgICAgLS1pbmNsdWRlcykKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1JJGluY2x1ZGVkaXIgJElOQ0xVREVTIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAic291cmNlIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFVfU09VUkNFX0RJUi9pbmNsdWRlICRJTkNMVURFUyIKKy0gICAgZWxzZQorLSAgICAgICAgIyB0aGlzIGlzIGZvciBWUEFUSCBidWlsZHMKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBVX0JVSUxEX0RJUi9pbmNsdWRlIC1JJEFQVV9TT1VSQ0VfRElSL2luY2x1ZGUgJElOQ0xVREVTIgorLSAgICBmaQorICAgICA7OworICAgICAtLWxkZmxhZ3MpCisgICAgIGZsYWdzPSIkZmxhZ3MgJExERkxBR1MiCitAQCAtMTU1LDI4ICsxNDgsMTAgQEAKKyAgICAgZXhpdCAwCisgICAgIDs7CisgICAgIC0tbGluay1sZCkKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkQVBVX0JVSUxEX0RJUiAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGZpCisgICAgIDs7CisgICAgIC0tbGluay1saWJ0b29sKQorLSAgICAjIElmIHRoZSBMQV9GSUxFIGV4aXN0cyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUsIHVzZSBpdC4gIElmIHdlJ3JlCistICAgICMgaW5zdGFsbGVkIGFuZCB0aGUgTEFfRklMRSBkb2VzIG5vdCBleGlzdCwgYXNzdW1lIHRvIHVzZSAtTC8tbAorLSAgICAjICh0aGUgTEFfRklMRSBtYXkgbm90IGhhdmUgYmVlbiBpbnN0YWxsZWQpLiAgSWYgd2UncmUgYnVpbGRpbmcgb3Vyc2VsdmVzLAorLSAgICAjIHdlJ2xsIGFzc3VtZSB0aGF0IGF0IHNvbWUgcG9pbnQgdGhlIC5sYSBmaWxlIGJlIGNyZWF0ZWQuCistICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKy0gICAgICAgICMgU2luY2UgdGhlIHVzZXIgaXMgc3BlY2lmeWluZyB0aGV5IGFyZSBsaW5raW5nIHdpdGggbGlidG9vbCwgd2UKKy0gICAgICAgICMgKmtub3cqIHRoYXQgLVIgd2lsbCBiZSByZWNvZ25pemVkIGJ5IGxpYnRvb2wuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtUiRsaWJkaXIgLWwkQVBSVVRJTF9MSUJOQU1FIgorLSAgICBlbHNlCistICAgICAgICBmbGFncz0iJGZsYWdzICRMQV9GSUxFIgorLSAgICBmaQorKyAgICAgICAgZmxhZ3M9IiRmbGFncyAtbCRBUFJVVElMX0xJQk5BTUUiCisgICAgIDs7CisgICAgIC0tYXB1LWxhLWZpbGUpCisgICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWd1cmVfZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlMjQ0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWd1cmVfZml4ZXMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLXV0aWwtMS40LjEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLXV0aWwtMS40LjEub3JpZy9jb25maWd1cmUuaW4JMjAwOS0xMi0xOCAwMzoxNToxOS4wMDAwMDAwMDAgKzA4MDAKKysrKyBhcHItdXRpbC0xLjQuMS9jb25maWd1cmUuaW4JMjAxMS0xMi0zMCAxMzozMjowNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC04LDE1ICs4LDE1IEBACisgQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL3ByaXZhdGUvYXB1X2NvbmZpZy5oKQorIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkKQorIAorLXNpbmNsdWRlKGJ1aWxkL2FwdS1jb25mLm00KQorLXNpbmNsdWRlKGJ1aWxkL2FwdS1pY29udi5tNCkKKy1zaW5jbHVkZShidWlsZC9hcHUtaGludHMubTQpCistc2luY2x1ZGUoYnVpbGQvYXByX2NvbW1vbi5tNCkKKy1zaW5jbHVkZShidWlsZC9maW5kX2Fwci5tNCkKKy1zaW5jbHVkZShidWlsZC9jcnlwdG8ubTQpCistc2luY2x1ZGUoYnVpbGQvZGJtLm00KQorLXNpbmNsdWRlKGJ1aWxkL2RiZC5tNCkKKy1zaW5jbHVkZShidWlsZC9kc28ubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1jb25mLm00KQorKyNzaW5jbHVkZShidWlsZC9hcHUtaWNvbnYubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1oaW50cy5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXByX2NvbW1vbi5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZmluZF9hcHIubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2NyeXB0by5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZGJtLm00KQorKyNzaW5jbHVkZShidWlsZC9kYmQubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2Rzby5tNCkKKyAKKyBkbmwgR2VuZXJhdGUgLi9jb25maWcubmljZSBmb3IgcmVwcm9kdWNpbmcgcnVucyBvZiBjb25maWd1cmUKKyBkbmwgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE5YTFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL3J1bi1wdGVzdApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0CisuL3Rlc3RhbGwgfHNlZCBcCisgIC1lICdzfFwoLipcKTogIFNVQ0NFU1N8UEFTUzogXDF8JyBcCisgIC1lICdzfFwoLipcKTogIEZBSUxFRHxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWxfMS41LjQuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWxfMS41LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExNGQxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYgpAQCAtMCwwICsxLDgxIEBACitTVU1NQVJZID0gIkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIChBUFIpIGNvbXBhbmlvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiYXByIGV4cGF0IGdkYm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTE5ZTBhMThlMDNmN2MwMjMwNzA1NjhjMTRiMDc3YmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9hcHVfdmVyc2lvbi5oO2VuZGxpbmU9MTc7bWQ1PTgwNjY4NWE4NGU3MWYxMGM4MDE0NGM0OGViMzVkZjQyIgorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vYXByLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODY2ODI1YzA0ZGE4MjdjNmU1ZjUzZGFmZjU1NjlmNDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTc2YTEyYTU5YmMyODZkNjM0YTIxZDdiZTA4NDFjYzc0Mjg5ZWE5MDc3YWExYWY0NmJlMTlkMWE2ZTg0NGMxOSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vYXByLTEtY29uZmlnIFwgCisJCS0td2l0aG91dC1vZGJjIFwKKwkJLS13aXRob3V0LXBnc3FsIFwKKwkJLS13aXRoLWRibT1nZGJtIFwKKwkJLS13aXRoLWdkYm09JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisJCS0td2l0aG91dC1zcWxpdGUyIFwKKwkJLS13aXRob3V0LXNxbGl0ZTMgXAorCQktLXdpdGgtZXhwYXQ9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSIKKworCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBiaW5jb25maWcKKworUFIgPSAicjEiCisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEUgPSAiIC1lICdzOmxvY2F0aW9uPXNvdXJjZTpsb2NhdGlvbj1pbnN0YWxsZWQ6JyIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlpZiBbICIke0NMQVNTT1ZFUlJJREV9IiA9ICJjbGFzcy10YXJnZXQiIF07IHRoZW4KKwkJY3AgJHtTVEFHSU5HX0RBVEFESVJ9L2Fwci9hcHJfcnVsZXMubWsgJHtCfS9idWlsZC9ydWxlcy5taworCWZpCit9Citkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJbWtkaXIgJHtCfS9idWlsZAorCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYXByL2Fwcl9ydWxlcy5tayAke0J9L2J1aWxkL3J1bGVzLm1rCit9Citkb19jb25maWd1cmVfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlzZWQgLWkgInMjTElCVE9PTD1cJChTSEVMTCkgXCQoYXByX2J1aWxkZGlyKSNMSUJUT09MPVwkKFNIRUxMKSAke1NUQUdJTkdfQklORElSX05BVElWRX0jIiAke0J9L2J1aWxkL3J1bGVzLm1rCisJIyBzb21ldGltZXMgdGhlcmUgaXNuJ3QgU0hFTEwKKwlzZWQgLWkgInMjTElCVE9PTD1cJChhcHJfYnVpbGRkaXIpI0xJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IyIgJHtCfS9idWlsZC9ydWxlcy5taworfQorCitkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3AgJHtTVEFHSU5HX0RBVEFESVJ9L2Fwci9hcHJfcnVsZXMubWsgJHtTfS9idWlsZC9ydWxlcy5taworfQorCitkb19jb25maWd1cmVfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlzZWQgLWkgInMjXChhcHJfYnVpbGRkaXJcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXChhcHJfYnVpbGRlcnNcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXCh0b3BfYnVpbGRkaXJcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXChMSUJUT09MPVwkKGFwcl9idWlsZGRpcilcKS4qI1wxL2xpYnRvb2wjIiAke1N9L2J1aWxkL3J1bGVzLm1rCit9CisKK0ZJTEVTXyR7UE59ICAgICArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLTEuc28iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9hcHJ1dGlsLmV4cCAke2xpYmRpcn0vYXByLXV0aWwtMS9hcHJfZGJtX2dkYm0uc28qICR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5hIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJY2QgJHtCfS90ZXN0CisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCW1rZGlyICR0CisJZm9yIGkgaW4gdGVzdGFsbCBkYXRhOyBkbyBcCisJICBjcCAtciAke0J9L3Rlc3QvJGkgJHQ7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDViOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGaXggcGFja2V0IGRpc2NhcmRzIEhUVFAgcmVkaXJlY3QuCisKK0Rpc2Nvbm5lY3QgdGhlIGNvbm5lY3Rpb24gYnkgcG9sbCgpIHRpbWVvdXQuCitJZiB0aW1lb3V0PTAgYW5kIGFwcl93YWl0X2Zvcl9pb19vcl90aW1lb3V0KCk9QVBSX1RJTUVVUCB0aGVuCithcHJfc29ja2V0X3JlY3YoKSByZXR1cm5zIEVBR0FJTi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE5vcmlha2kgWW9zaGl0YW5lIDx5b3NoaXRhbmUubnJzQGNudC5uY29zLm5lYy5jby5qcD4KK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG5ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMgYi9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYworaW5kZXggYzEzM2EyNi4uZThmYWYxNSAxMDA2NDQKKy0tLSBhL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jCisrKysgYi9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYworQEAgLTg1LDYgKzg1LDEwIEBAIGFwcl9zdGF0dXNfdCBhcHJfc29ja2V0X3JlY3YoYXByX3NvY2tldF90ICpzb2NrLCBjaGFyICpidWYsIGFwcl9zaXplX3QgKmxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKHNvY2stPnRpbWVvdXQgPiAwKSkgeworIGRvX3NlbGVjdDoKKyAgICAgICAgIGFydiA9IGFwcl93YWl0X2Zvcl9pb19vcl90aW1lb3V0KE5VTEwsIHNvY2ssIDEpOworKyAgICAgICAgaWYgKChhcnYgPT0gQVBSX1RJTUVVUCkgJiYgKHNvY2stPnRpbWVvdXQgPT0gMCkpIHsKKysgICAgICAgICAgICAqbGVuID0gMDsKKysgICAgICAgICAgICByZXR1cm4gRUFHQUlOOworKyAgICAgICAgfQorICAgICAgICAgaWYgKGFydiAhPSBBUFJfU1VDQ0VTUykgeworICAgICAgICAgICAgICpsZW4gPSAwOworICAgICAgICAgICAgIHJldHVybiBhcnY7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jbGVhbnVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jbGVhbnVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Nzg0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuNC4yL2J1aWxkL2J1aWxkY2hlY2suc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItMS40LjIub3JpZy9idWlsZC9idWlsZGNoZWNrLnNoCTIwMDktMTEtMTMgMDg6Mjc6MTYuMDAwMDAwMDAwICswODAwCisrKysgYXByLTEuNC4yL2J1aWxkL2J1aWxkY2hlY2suc2gJMjAxMC0xMS0yNiAxNTo0NDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zMiwzNSArMzIsNCBAQAorIGVjaG8gImJ1aWxkY29uZjogYXV0b2NvbmYgdmVyc2lvbiAkYWNfdmVyc2lvbiAob2spIgorIGZpCisgCistIyBTYW1wbGUgbGlidG9vbCAtLXZlcnNpb24gb3V0cHV0czoKKy0jIGx0bWFpbi5zaCAoR05VIGxpYnRvb2wpIDEuMy4zICgxLjM4NS4yLjE4MSAxOTk5LzA3LzAyIDE1OjQ5OjExKQorLSMgbHRtYWluLnNoIChHTlUgbGlidG9vbCAxLjEzNjEgMjAwNC8wMS8wMiAyMzoxMDo1MikgMS41YQorLSMgb3V0cHV0IGlzIG11bHRpbGluZSBmcm9tIDEuNSBvbndhcmRzCistCistIyBSZXF1aXJlIGxpYnRvb2wgMS40IG9yIG5ld2VyCistbGlidG9vbD1gYnVpbGQvUHJpbnRQYXRoIGdsaWJ0b29sMSBnbGlidG9vbCBsaWJ0b29sIGxpYnRvb2wxNSBsaWJ0b29sMTRgCistbHRfcHZlcnNpb249YCRsaWJ0b29sIC0tdmVyc2lvbiAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvKFteKV0qKS8vZztzL15bXjAtOV0qLy87cy9bLSBdLiovL2c7cSdgCistaWYgdGVzdCAteiAiJGx0X3B2ZXJzaW9uIjsgdGhlbgorLWVjaG8gImJ1aWxkY29uZjogbGlidG9vbCBub3QgZm91bmQuIgorLWVjaG8gIiAgICAgICAgICAgWW91IG5lZWQgbGlidG9vbCB2ZXJzaW9uIDEuNCBvciBuZXdlciBpbnN0YWxsZWQiCistZWNobyAiICAgICAgICAgICB0byBidWlsZCBBUFIgZnJvbSBTVk4uIgorLWV4aXQgMQorLWZpCistbHRfdmVyc2lvbj1gZWNobyAkbHRfcHZlcnNpb258c2VkIC1lICdzL1woW2Etel0qXCkkLy5cMS8nYAorLUlGUz0uOyBzZXQgJGx0X3ZlcnNpb247IElGUz0nICcKKy1sdF9zdGF0dXM9Imdvb2QiCistaWYgdGVzdCAiJDEiID0gIjEiOyB0aGVuCistICAgaWYgdGVzdCAiJDIiIC1sdCAiNCI7IHRoZW4KKy0gICAgICBsdF9zdGF0dXM9ImJhZCIKKy0gICBmaQorLWZpCistaWYgdGVzdCAkbHRfc3RhdHVzID0gImdvb2QiOyB0aGVuCistICAgZWNobyAiYnVpbGRjb25mOiBsaWJ0b29sIHZlcnNpb24gJGx0X3B2ZXJzaW9uIChvaykiCistICAgZXhpdCAwCistZmkKKy0KKy1lY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgdmVyc2lvbiAkbHRfcHZlcnNpb24gZm91bmQuIgorLWVjaG8gIiAgICAgICAgICAgWW91IG5lZWQgbGlidG9vbCB2ZXJzaW9uIDEuNCBvciBuZXdlciBpbnN0YWxsZWQiCistZWNobyAiICAgICAgICAgICB0byBidWlsZCBBUFIgZnJvbSBTVk4uIgorLQorLWV4aXQgMQorK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWdmaXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDVjNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWdmaXgucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuMy4zL2Fwci1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItMS4zLjMub3JpZy9hcHItY29uZmlnLmluCTIwMDktMDEtMTIgMTU6MTY6MzEuMDAwMDAwMDAwICswMDAwCisrKysgYXByLTEuMy4zL2Fwci1jb25maWcuaW4JMjAwOS0wMS0xMiAxNToxOToyNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTIsMTQgKzE1Miw3IEBACisgICAgIGZsYWdzPSIkZmxhZ3MgJExERkxBR1MiCisgICAgIDs7CisgICAgIC0taW5jbHVkZXMpCistICAgIGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorICAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRpbmNsdWRlZGlyICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gInNvdXJjZSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBSX1NPVVJDRV9ESVIvaW5jbHVkZSAkRVhUUkFfSU5DTFVERVMiCistICAgIGVsc2UKKy0gICAgICAgICMgdGhpcyBpcyBmb3IgVlBBVEggYnVpbGRzCistICAgICAgICBmbGFncz0iJGZsYWdzIC1JJEFQUl9CVUlMRF9ESVIvaW5jbHVkZSAtSSRBUFJfU09VUkNFX0RJUi9pbmNsdWRlICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZmkKKyAgICAgOzsKKyAgICAgLS1zcmNkaXIpCisgICAgIGVjaG8gJEFQUl9TT1VSQ0VfRElSCitAQCAtMTgxLDI5ICsxNjcsMTQgQEAKKyAgICAgZXhpdCAwCisgICAgIDs7CisgICAgIC0tbGluay1sZCkKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtbCR7QVBSX0xJQk5BTUV9IgorLSAgICBlbHNlCistICAgICAgICAjIyMgdGhpcyBzdXJlbHkgY2FuJ3Qgd29yayBzaW5jZSB0aGUgbGlicmFyeSBpcyBpbiAubGlicz8KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkQVBSX0JVSUxEX0RJUiAtbCR7QVBSX0xJQk5BTUV9IgorLSAgICBmaQorKyAgICAgICAgZmxhZ3M9IiRmbGFncyAtbCR7QVBSX0xJQk5BTUV9IgorICAgICA7OworICAgICAtLWxpbmstbGlidG9vbCkKKyAgICAgIyBJZiB0aGUgTEFfRklMRSBleGlzdHMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlLCB1c2UgaXQuICBJZiB3ZSdyZQorICAgICAjIGluc3RhbGxlZCBhbmQgdGhlIExBX0ZJTEUgZG9lcyBub3QgZXhpc3QsIGFzc3VtZSB0byB1c2UgLUwvLWwKKyAgICAgIyAodGhlIExBX0ZJTEUgbWF5IG5vdCBoYXZlIGJlZW4gaW5zdGFsbGVkKS4gIElmIHdlJ3JlIGJ1aWxkaW5nIG91cnNlbHZlcywKKyAgICAgIyB3ZSdsbCBhc3N1bWUgdGhhdCBhdCBzb21lIHBvaW50IHRoZSAubGEgZmlsZSBiZSBjcmVhdGVkLgorLSAgICBpZiB0ZXN0IC1mICIkTEFfRklMRSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGVsaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCistICAgICAgICAjIFNpbmNlIHRoZSB1c2VyIGlzIHNwZWNpZnlpbmcgdGhleSBhcmUgbGlua2luZyB3aXRoIGxpYnRvb2wsIHdlCistICAgICAgICAjICprbm93KiB0aGF0IC1SIHdpbGwgYmUgcmVjb2duaXplZCBieSBsaWJ0b29sLgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRsaWJkaXIgLVIkbGliZGlyIC1sJHtBUFJfTElCTkFNRX0iCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGZpCisrICAgICAgICBmbGFncz0iJGZsYWdzIC1sJHtBUFJfTElCTkFNRX0iCisgICAgIDs7CisgICAgIC0tc2hsaWItcGF0aC12YXIpCisgICAgIGVjaG8gIiRTSExJQlBBVEhfVkFSIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWd1cmVfZml4ZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTE0MDAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWd1cmVfZml4ZXMucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuMy4zL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci0xLjMuMy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIGFwci0xLjMuMy9jb25maWd1cmUuaW4KK0BAIC03OTQsMzkgKzc5NCw2IEBAIEFDX0NIRUNLX0ZVTkNTKFttbWFwIG11bm1hcCBzaG1fb3BlbiBzaG0KKyAgICAgICAgICAgICAgICAgY3JlYXRlX2FyZWFdKQorIAorIEFQUl9DSEVDS19ERUZJTkUoTUFQX0FOT04sIHN5cy9tbWFuLmgpCistQUNfQ0hFQ0tfRklMRSgvZGV2L3plcm8pCistCistIyBOb3QgYWxsIHN5c3RlbXMgY2FuIG1tYXAgL2Rldi96ZXJvIChzdWNoIGFzIEhQLVVYKS4gIENoZWNrIGZvciB0aGF0LgorLWlmIHRlc3QgIiRhY19jdl9mdW5jX21tYXAiID0gInllcyIgJiYKKy0gICB0ZXN0ICIkYWNfY3ZfZmlsZV9fZGV2X3plcm8iID0gInllcyI7IHRoZW4KKy0gICAgQUNfTVNHX0NIRUNLSU5HKGZvciBtbWFwIHRoYXQgY2FuIG1hcCAvZGV2L3plcm8pCistICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0jaW5jbHVkZSA8ZmNudGwuaD4KKy0jaWZkZWYgSEFWRV9TWVNfTU1BTl9ICistI2luY2x1ZGUgPHN5cy9tbWFuLmg+CistI2VuZGlmCistICAgIGludCBtYWluKCkKKy0gICAgeworLSAgICAgICAgaW50IGZkOworLSAgICAgICAgdm9pZCAqbTsKKy0gICAgICAgIGZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKKy0gICAgICAgIGlmIChmZCA8IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gMTsKKy0gICAgICAgIH0KKy0gICAgICAgIG0gPSBtbWFwKDAsIHNpemVvZih2b2lkKiksIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CistICAgICAgICBpZiAobSA9PSAodm9pZCAqKS0xKSB7ICAvKiBha2EgTUFQX0ZBSUxFRCAqLworLSAgICAgICAgICAgIHJldHVybiAyOworLSAgICAgICAgfQorLSAgICAgICAgaWYgKG11bm1hcChtLCBzaXplb2Yodm9pZCopKSA8IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gMzsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiAwOworLSAgICB9XSwgW10sIFthY19jdl9maWxlX19kZXZfemVybz1ub10sIFthY19jdl9maWxlX19kZXZfemVybz1ub10pCistCistICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2ZpbGVfX2Rldl96ZXJvKQorLWZpCisgCisgIyBOb3cgd2UgZGV0ZXJtaW5lIHdoaWNoIG9uZSBpcyBvdXIgYW5vbnltb3VzIHNobWVtIHByZWZlcmVuY2UuCisgaGF2ZXNobWdldGFub249IjAiCitAQCAtMTUxOCwxMyArMTQ4NSwxNCBAQCBlbHNlCisgICAgIGJpZ2VuZGlhbj0wCisgZmkKKyAKKy1BUFJfQ0hFQ0tfU0laRU9GX0VYVEVOREVEKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy91aW8uaD5dLHN0cnVjdCBpb3ZlYywwKQorLWlmIHRlc3QgIiRhY19jdl9zaXplb2Zfc3RydWN0X2lvdmVjIiA9ICIwIjsgdGhlbgorLSAgICBoYXZlX2lvdmVjPTAKKy1lbHNlCistICAgIGhhdmVfaW92ZWM9MQorLWZpCisrI0FQUl9DSEVDS19TSVpFT0ZfRVhURU5ERUQoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjI2luY2x1ZGUgPHN5cy91aW8uaD5dLHN0cnVjdCBpb3ZlYywwKQorKyNpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3N0cnVjdF9pb3ZlYyIgPSAiMCI7IHRoZW4KKysjICAgIGhhdmVfaW92ZWM9MAorKyNlbHNlCisrIyAgICBoYXZlX2lvdmVjPTEKKysjZmkKKytoYXZlX2lvdmVjPTEKKyAKKyBBQ19TVUJTVCh2b2lkcF9zaXplKQorIEFDX1NVQlNUKHNob3J0X3ZhbHVlKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE5YTFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9ydW4tcHRlc3QKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2QgdGVzdAorLi90ZXN0YWxsIHxzZWQgXAorICAtZSAnc3xcKC4qXCk6ICBTVUNDRVNTfFBBU1M6IFwxfCcgXAorICAtZSAnc3xcKC4qXCk6ICBGQUlMRUR8RkFJTDogXDF8JwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTY5NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorTWFrZWZpbGUuaW46IGZpeCBjcm9zcyBjb21waWxpbmcgZmFpbGVkCisKK1RoZSB0b29scy9nZW5fdGVzdF9jaGFyIHdhcyBpbnZva2VkIGF0IGJ1aWxkIHRpbWUsCithbmQgaXQgZGlkbid0IHdvcmsgZm9yIHRoZSBjcm9zcyBjb21waWxpbmcsIHNvIHdlCitjb21waWxlIGl0IHdpdGggJEJVSUxEX0NDLgorCitSZW1vdmUgdGhlICd0b29scycgZGlyIGNyZWF0aW9uLCBpdCBhbHdheXMgZXhpc3RlZC4KK0FuZCBpdCBjYXVzZWQgZ2VuX3Rlc3RfY2hhciB1bmV4cGVjdGVkIHJlYnVpbHQgYXQKK2RvX2luc3RhbGwgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAxMCArKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGEyYTUxOTQuLjVmZTAyOGYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00Niw3ICs0Niw2IEBAIExUX1ZFUlNJT04gPSBATFRfVkVSU0lPTkAKKyAKKyBDTEVBTl9UQVJHRVRTID0gYXByLWNvbmZpZy5vdXQgYXByLmV4cCBleHBvcnRzLmMgZXhwb3J0X3ZhcnMuYyAubWFrZS5kaXJzIFwKKyAJYnVpbGQvYXByX3J1bGVzLm91dCB0b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEAgXAorLQl0b29scy9nZW5fdGVzdF9jaGFyLm8gdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbyBcCisgCWluY2x1ZGUvcHJpdmF0ZS9hcHJfZXNjYXBlX3Rlc3RfY2hhci5oCisgRElTVENMRUFOX1RBUkdFVFMgPSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIFwKKyAJaW5jbHVkZS9hcHIuaCBpbmNsdWRlL2FyY2gvdW5peC9hcHJfcHJpdmF0ZS5oIFwKK0BAIC0xMjksMTMgKzEyOCw4IEBAIGNoZWNrOiAkKFRBUkdFVF9MSUIpCisgZXRhZ3M6CisgCWV0YWdzIGBmaW5kIC4gLW5hbWUgJyouW2NoXSdgCisgCistT0JKRUNUU19nZW5fdGVzdF9jaGFyID0gdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbyAkKExPQ0FMX0xJQlMpCistdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbzogdG9vbHMvZ2VuX3Rlc3RfY2hhci5jCistCSQoQVBSX01LRElSKSB0b29scworLQkkKExUX0NPTVBJTEUpCistCistdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRAOiAkKE9CSkVDVFNfZ2VuX3Rlc3RfY2hhcikKKy0JJChMSU5LX1BST0cpICQoT0JKRUNUU19nZW5fdGVzdF9jaGFyKSAkKEFMTF9MSUJTKQorK3Rvb2xzL2dlbl90ZXN0X2NoYXJARVhFRVhUQDogdG9vbHMvZ2VuX3Rlc3RfY2hhci5jCisrCSQoQlVJTERfQ0MpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJDwgLW8gJEAKKyAKKyBpbmNsdWRlL3ByaXZhdGUvYXByX2VzY2FwZV90ZXN0X2NoYXIuaDogdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRACisgCSQoQVBSX01LRElSKSBpbmNsdWRlL3ByaXZhdGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZjdmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCkBAIC0wLDAgKzEsOTYgQEAKK1NVTU1BUlkgPSAiQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgKEFQUikgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hcHIuYXBhY2hlLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInV0aWwtbGludXgiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTRkZmQ0Y2QyMTY4MjhjOGNhZTVkZTVhMTJmMzg0NGM4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYXByX2xpYi5oO2VuZGxpbmU9MTc7bWQ1PWVlNDJmYTc1NzVkYzQwNTgwYTllMDFjMWI3NWZhZTk2IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS9hcHIvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX2ZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFudXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlOTc2OWYzMzQ5ZmUxMWZjMGE1ZTFiMjI0YzIzNmFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkMDNlZDI5YzIyYTcxNTJiZTQ1YjhlNTA0MzEwNjM3MzZkZjllMWRhYTFkZGY5M2Y2YTU0N2JhN2EyOGY2N2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBsaWJfcGFja2FnZSBiaW5jb25maWcgbXVsdGlsaWJfaGVhZGVyIHB0ZXN0CisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEUgPSAiIC1lICdzOmxvY2F0aW9uPXNvdXJjZTpsb2NhdGlvbj1pbnN0YWxsZWQ6JyIKKworIyBBZGRlZCB0byBmaXggc29tZSBpc3N1ZXMgd2l0aCBjbWFrZS4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2Jtd2Nhcml0L21ldGEtcm9zL2lzc3Vlcy82OCNpc3N1ZWNvbW1lbnQtMTk4OTY5MjgKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhcHJfY3ZfbXV0ZXhfcmVjdXJzaXZlPXllcyIKKworIyBBbHNvIHN1cHByZXNzIHRyeWluZyB0byB1c2Ugc2N0cC4KKyMKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm8gYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ubyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBBdm9pZCBhYnNvbHV0ZSBwYXRocyBmb3IgZ3JlcCBzaW5jZSBpdCBjYXVzZXMgZmFpbHVyZXMKKwkjIHdoZW4gdXNpbmcgc3N0YXRlIGJldHdlZW4gZGlmZmVyZW50IGhvc3RzIHdpdGggZGlmZmVyZW50CisJIyBpbnN0YWxsIHBhdGhzIGZvciBncmVwLgorCWV4cG9ydCBHUkVQPSJncmVwIgorCisJY2QgJHtTfQorCS4vYnVpbGRjb25mCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2Fwci5leHAgJHtkYXRhZGlyfS9idWlsZC0xLyoiCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKKyNmb3Igc29tZSByZWFzb24sIGJ1aWxkL2xpYnRvb2wubTQgaGFuZGxlZCBieSBidWlsZGNvbmYgc3RpbGwgYmUgb3ZlcndyaXR0ZW4KKyN3aGVuIGF1dG9jb25mLCBzbyBoYW5kbGUgaXQgYWdhaW4uCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAncy9MSUJUT09MPVwoLipcKXRvcF9idWlsZC9MSUJUT09MPVwxYXByX2J1aWxkLycgJHtTfS9idWlsZC9saWJ0b29sLm00CisJc2VkIC1pIC1lICdzL0xJQlRPT0w9XCguKlwpdG9wX2J1aWxkL0xJQlRPT0w9XDFhcHJfYnVpbGQvJyAke1N9L2J1aWxkL2Fwcl9ydWxlcy5taworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYXByLmgKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcgorCWNwICR7U30vJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtkYXRhZGlyfS9idWlsZC0xL2xpYnRvb2wKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImFwcl9ydWxlcy5tayBsaWJ0b29sIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImFwcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK2Fwcl9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWQ9JHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hcHIKKwlpbnN0YWxsIC1kICRkLworCWNwICR7U30vYnVpbGQvYXByX3J1bGVzLm1rICRkLworCXNlZCAtaSBzLGFwcl9idWlsZGRpcj0uKixhcHJfYnVpbGRkaXI9LGcgJGQvYXByX3J1bGVzLm1rCisJc2VkIC1pIHMsYXByX2J1aWxkZXJzPS4qLGFwcl9idWlsZGVycz0sZyAkZC9hcHJfcnVsZXMubWsKKwlzZWQgLWkgcyxMSUJUT09MPS4qLExJQlRPT0w9JHtIT1NUX1NZU30tbGlidG9vbCxnICRkL2Fwcl9ydWxlcy5taworCXNlZCAtaSBzLFwkXChhcHJfYnVpbGRlcnNcKSwke1NUQUdJTkdfREFUQURJUn0vYXByLyxnICRkL2Fwcl9ydWxlcy5taworCWNwICR7U30vYnVpbGQvbWtkaXIuc2ggJGQvCisJY3AgJHtTfS9idWlsZC9tYWtlX2V4cG9ydHMuYXdrICRkLworCWNwICR7U30vYnVpbGQvbWFrZV92YXJfZXhwb3J0LmF3ayAkZC8KK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwljZCAke1N9L3Rlc3QKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbWtkaXIgLXAgJHQvLmxpYnMKKwljcCAtciAke1N9L3Rlc3QvZGF0YSAkdC8KKwljcCAtciAke1N9L3Rlc3QvLmxpYnMvKi5zbyAkdC8ubGlicy8KKwljcCAke1N9L3Rlc3QvcHJvY19jaGlsZCAkdC8KKwljcCAke1N9L3Rlc3QvcmVhZGNoaWxkICR0LworCWNwICR7U30vdGVzdC9zb2NrY2hpbGQgJHQvCisJY3AgJHtTfS90ZXN0L3NvY2twZXJmICR0LworCWNwICR7U30vdGVzdC90ZXN0YWxsICR0LworCWNwICR7U30vdGVzdC90cnlyZWFkICR0LworfQorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL2Jhc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXNwZWxsL2FzcGVsbF8wLjYwLjYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2YxN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXNwZWxsL2FzcGVsbF8wLjYwLjYuMS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkdOVSBBc3BlbGwgc3BlbGwtY2hlY2tlciIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJMR1BMdjIgfCBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2FzcGVsbC9hc3BlbGwtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImU2NmE5YzlhZjZhNjBkYzQ2MTM0ZmRhY2Y2Y2U5N2Q3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1MjU4M2E4M2E2MzYzMzcwMWM1ZjcxZGIzZGM0MGFhYjg3YjdmNzZiMjk3MjNhZWIyNzk0MWVmZjQyZGY2ZTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2N1cnNlc10gPSAiLS1lbmFibGUtY3Vyc2VzLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcyIKKworUEFDS0FHRVMgKz0gImxpYmFzcGVsbCBsaWJwc3BlbGwgYXNwZWxsLXV0aWxzIgorCitSREVQRU5EU18ke1BOfS11dGlscyArPSAicGVybCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXNwZWxsLTAuNjAvLmRlYnUqIgorRklMRVNfbGliYXNwZWxsID0gIiR7bGliZGlyfS9saWJhc3BlbGwuc28uKiAke2xpYmRpcn0vYXNwZWxsKiIKK0ZJTEVTX2FzcGVsbC11dGlscyA9ICIke2JpbmRpcn0vd29yZC1saXN0LWNvbXByZXNzICR7YmluZGlyfS9hc3BlbGwtaW1wb3J0ICR7YmluZGlyfS9ydW4td2l0aC1hc3BlbGwgJHtiaW5kaXJ9L3ByZSoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYXNwZWxsIgorRklMRVNfbGlicHNwZWxsID0gIiR7bGliZGlyfS9saWJwc3BlbGwuc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L3BzcGVsbC1jb25maWciCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgoraW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wc3BlbGwtY29uZmlnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTYuMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5NWZkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjE2LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJBVC1TUEkgMiBUb29sa2l0IEJyaWRnZSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4OTM2NDg4YzhjZGNlMGUxNThmODBiMmUyNDc1MjdmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OGVmYzQ1ZWMzNjM4M2JmNzg1Zjg2MzZlNjRhOGQ4NjZkZWZlYjAyMGUwMGEwOGY5Mjk3OGYxZmMzNzcyZmY5IgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgYXRrIGF0LXNwaTItY29yZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBhdC1zcGkyLWNvcmUgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWdub21lICR7UE59LWd0azIiCisKK0ZJTEVTXyR7UE59LWdub21lID0gIiR7bGliZGlyfS9nbm9tZS1zZXR0aW5ncy1kYWVtb24tMy4wL2d0ay1tb2R1bGVzIgorRklMRVNfJHtQTn0tZ3RrMiA9ICIke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmF0ay1icmlkZ2UuKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8uZGVidWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNTFkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGMzMjA3OTljOTQxZDQyYTliN2UzNTE4MDUzNTk2OTRlYTNiMzZkMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA1IEFwciAyMDE1IDA5OjA4OjM4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG5scy5tNDogVGFrZSBpdCBmcm9tIGdldHRleHQtMC4xNQorCitJdCBvdGhlcndpc2UgZXhwZWN0cyBnZXR0ZXh0IHRvIHByb3ZpZGUgaXQuIExldHMgZ28gaW5kZXBlbmRlbnQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBtNC9ubHMubTQgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBtNC9ubHMubTQKKworZGlmZiAtLWdpdCBhL200L25scy5tNCBiL200L25scy5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJjOGZlNjkKKy0tLSAvZGV2L251bGwKKysrKyBiL200L25scy5tNAorQEAgLTAsMCArMSwzMCBAQAorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSBub3QgaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sIFVscmljaCBEcmVwcGVyIGRyZXBwZXJAY3lnbnVzLmNvbSwgMTk5NS0yMDAwLgorK2RubCBCcnVubyBIYWlibGUgaGFpYmxlQGNsaXNwLmNvbnMub3JnLCAyMDAwLTIwMDMuCisrCisrQUNfUFJFUkVRKDIuNTApCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKKytkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworK0FDX0FSR19FTkFCTEUobmxzLAorK1sgLS1kaXNhYmxlLW5scyBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKytVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQorK0FDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrQUNfU1VCU1QoVVNFX05MUykKKytdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTYuMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzM2NiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkFzc2lzdGl2ZSBUZWNobm9sb2d5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIChkYnVzIGNvcmUpIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJlNmVlZWEzNzBmOTEzYjc2MzliNjA5OTEzYjJjZjAyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFjMGI3N2ZiOGNlODFhYmJmMWQ4MGMwYWZlZTk4NThiM2Y5MjI5ZjY3M2I3ODgxOTk1ZmUwZmMxNmIxYTc0ZDAiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCB2aXJ0dWFsL2xpYngxMSBsaWJ4aSBsaWJ4dHN0IGludGx0b29sLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUteGV2aWUgLS13aXRoLWRidXMtZGFlbW9uZGlyPSR7YmluZGlyfSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvYWNjZXNzaWJpbGl0eS1zZXJ2aWNlcy8qLnNlcnZpY2UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTYuMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOGY5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkFjY2Vzc2liaWxpdHkgdG9vbGtpdCBmb3IgR05PTUUiCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvR0FQLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0a3V0aWwuYztlbmRsaW5lPTE4O21kNT02ZmQzMWNkMmZkYzliMzBmNjE5Y2E4ZDgxOWJjMTJkMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrLmg7ZW5kbGluZT0xODttZDU9ZmNkNzcxMDE4N2UwZWFlNDg1ZTM1NmMzMGQxYjBjM2IiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYzdjNTAwMmJkNmU1OGI0NzIzYTE2NWYxYmYzMTIxMTYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwOTVmOTg2MDYwYTZhMGIyMmViMTVlZWY4NGFlOWYxNGExY2Y4MDgyNDg4ZmFhNjg4NmQ5NGMzNzQzOGFlNTYyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1nbGlidGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiYzhiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuYWdpbmcgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9hY2wvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIrIgorTElDRU5TRV9saWIke0JQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0NPUFlJTkc7bWQ1PWM3ODFkNzBlZDJiNGQ0ODk5NWI3OTA0MDMyMTdhMjQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9DT1BZSU5HLkxHUEw7bWQ1PTllOWEyMDY5MTdmOGFmMTEyZGE2MzRjZTNhYjQxNzY0IgorCitERVBFTkRTID0gImF0dHIiCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vYWNsLyR7QlB9LnNyYy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoIFwKKyIKKworcmVxdWlyZSBlYS1hY2wuaW5jCisKKyMgYXZvaWQgUlBBVEggaGFyZGNvZGUgdG8gc3RhZ2luZyBkaXIKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkIC1pICR7U30vY29uZmlnLnN0YXR1cyAtZSBzLF5cXFwoaGFyZGNvZGVfaW50b19saWJzPVxcXCkuKiQsXFwxXCdub1wnLAorCSR7U30vY29uZmlnLnN0YXR1cworfQorCisjIGxpYmRpciBzaG91bGQgcG9pbnQgdG8gLmxhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtEfSR7bGliZGlyfS9saWJhY2wubGEgLWUgXAorCSAgICBzLF5saWJkaXI9XCcke2Jhc2VfbGliZGlyfVwnJCxsaWJkaXI9XCcke2xpYmRpcn1cJywKK30KKworaW5oZXJpdCBwdGVzdAorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbmZzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCW1rZGlyICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUKKwljcCAke1N9L2luY2x1ZGUvYnVpbGRkZWZzICR7U30vaW5jbHVkZS9idWlsZG1hY3JvcyAke1N9L2luY2x1ZGUvYnVpbGRydWxlcyAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLworfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJhY2wgYmFzaCBjb3JldXRpbHMgcGVybCBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXggc2hhZG93IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjc2NWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK2FjbDogZml4IHRoZSBvcmRlciBvZiBleHBlY3RlZCBvdXRwdXQgb2YgZ2V0ZmFjbAorCitUaGUgcmVzdWx0IG9mIGdldGZhY2wgaXMgc29ydGVkIGJ5IHVzZXIgaWQuCitJbiBDZW50b3Mgb3IgUkhFTCwgYmluIHVzZXIgaWQgaXMgMSBhbmQgZGFlbW9uIHVzZXIgaWQgaXMgMi4KK0J1dCBpbiBvdXIgaW1hZ2UsIGJpbiB1c2VyIGlkIGlzIDIgYW5kIGRhZW1vbiB1c2VyIGlkIGlzIDEuCitUaGUgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSB0byBtYWtlIHB0ZXN0IHBhc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdC9taXNjLnRlc3QgfCAgIDM4ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9taXNjLnRlc3QgYi90ZXN0L21pc2MudGVzdAoraW5kZXggNmU5ODA1My4uNTNhZTViMCAxMDA2NDQKKy0tLSBhL3Rlc3QvbWlzYy50ZXN0CisrKysgYi90ZXN0L21pc2MudGVzdAorQEAgLTc5LDggKzc5LDggQEAgTXVsdGlwbGUgdXNlcnMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBtYXNrOjpydy0KKyAJPiBvdGhlcjo6ci0tCitAQCAtOTQsOCArOTQsOCBAQCBNdWx0aXBsZSBncm91cHMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBncm91cDpkYWVtb246ci0tCisgCT4gZ3JvdXA6dXNlcnM6cnctCitAQCAtMTExLDggKzExMSw4IEBAIFJlbW92ZSBvbmUgZ3JvdXAKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBncm91cDpkYWVtb246ci0tCisgCT4gbWFzazo6cnctCitAQCAtMTQ2LDggKzE0Niw4IEBAIERlZmF1bHQgQUNMCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gKKyAJPiB1c2VyOmRhZW1vbjpydy0KKysJPiB1c2VyOmJpbjpyd3gKKyAJPiBncm91cDo6ci14CisgCT4gbWFzazo6cnd4CisgCT4gb3RoZXI6Oi0tLQorQEAgLTIzNiwxNiArMjM2LDE2IEBAIEFkZCBzb21lIHVzZXJzIGFuZCBncm91cHMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9kCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnIteAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTI2MiwxNiArMjYyLDE2IEBAIFN5bWxpbmsgaW4gZGlyZWN0b3J5IHdpdGggZGVmYXVsdCBBQ0w/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvbAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyLXgKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0yODcsMTYgKzI4NywxNiBAQCBEb2VzIG1hc2sgbWFuaXB1bGF0aW9uIHdvcms/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyLXgKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0zMDgsMTYgKzMwOCwxNiBAQCBEb2VzIG1hc2sgbWFuaXB1bGF0aW9uIHdvcms/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0zMzMsOCArMzMzLDggQEAgUmVtb3ZlIHRoZSBkZWZhdWx0IEFDTAorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CisgCT4gdXNlcjpkYWVtb246cnctCisrCT4gdXNlcjpiaW46cnd4CisgCT4gZ3JvdXA6OnIteAorIAk+IG1hc2s6OnJ3eAorIAk+IG90aGVyOjotLS0KK0BAIC0zNzMsMTQgKzM3MywxNCBAQCBOb3csIGNobW9kIHNob3VsZCBjaGFuZ2UgdGhlIGdyb3VwX29iaiBlbnRyeQorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246cnd4CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnJ3eAorIAk+IG1hc2s6OnJ3eAorIAk+IG90aGVyOjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyd3gKKysJPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnJ3eAorIAk+IGRlZmF1bHQ6bWFzazo6cnd4CisgCT4gZGVmYXVsdDpvdGhlcjo6ci14CitAQCAtMzkyLDE0ICszOTIsMTQgQEAgTm93LCBjaG1vZCBzaG91bGQgY2hhbmdlIHRoZSBncm91cF9vYmogZW50cnkKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246cnd4CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyd3gKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6OnIteAorQEAgLTQxMSwxNCArNDExLDE0IEBAIE5vdywgY2htb2Qgc2hvdWxkIGNoYW5nZSB0aGUgZ3JvdXBfb2JqIGVudHJ5CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnJ3eAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDpncm91cDo6cnd4CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjpyLXgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hZGQtbWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hZGQtbWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2OTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtjb25maWd1cmUuYWMgaXMgbWlzc2luZyBmcm9tIHRhcmJhbGxdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGFjbC0yLjIuNTIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYWNsLTIuMi41Mi9jb25maWd1cmUuYWMKK0BAIC0wLDAgKzEsNTAgQEAKKysKKysjIENvcHlyaWdodCAoQykgMjAwOSAgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysjCisrQUNfSU5JVChpbmNsdWRlL2FjbC5oKQorK0FDX0NPTkZJR19BVVhfRElSKFsuXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL2NvbmZpZy5oKQorK0FDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisrCisrQUNfUFJPR19MSUJUT09MCisrCisrQUNfQVJHX0VOQUJMRShzaGFyZWQsCisrWyAtLWVuYWJsZS1zaGFyZWQ9W3llcy9ub10gRW5hYmxlIHVzZSBvZiBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX3NoYXJlZD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX3NoYXJlZCkKKysKKytBQ19BUkdfRU5BQkxFKGdldHRleHQsCisrWyAtLWVuYWJsZS1nZXR0ZXh0PVt5ZXMvbm9dIEVuYWJsZSBhbHRlcm5hdGUgbGFuZ3VhZ2Ugc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9nZXR0ZXh0PXllcykKKytBQ19TVUJTVChlbmFibGVfZ2V0dGV4dCkKKysKKytBQ19BUkdfRU5BQkxFKGxpYjY0LAorK1sgLS1lbmFibGUtbGliNjQ9W3llcy9ub10gRW5hYmxlIGxpYjY0IHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwsCisrCWVuYWJsZV9saWI2ND1ubykKKytBQ19TVUJTVChlbmFibGVfbGliNjQpCisrCisrQUNfUEFDS0FHRV9HTE9CQUxTKGFjbCkKKytBQ19QQUNLQUdFX1VUSUxJVElFUyhhY2wpCisrQUNfUEFDS0FHRV9ORUVEX0FUVFJfWEFUVFJfSAorK0FDX1BBQ0tBR0VfTkVFRF9BVFRSX0VSUk9SX0gKKytBQ19NVUxUSUxJQigkZW5hYmxlX2xpYjY0KQorK0FDX1BBQ0tBR0VfTkVFRF9HRVRYQVRUUl9MSUJBVFRSCisrQUNfTUFOVUFMX0ZPUk1BVAorKworK0FDX0ZVTkNfR0NDX1ZJU0lCSUxJVFkKKysKKytBQ19PVVRQVVQoaW5jbHVkZS9idWlsZGRlZnMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzMWNjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitncGFzc3dkIC1hIGRhZW1vbiBiaW4KK21ha2UgLUMgdGVzdCAtayB0ZXN0cyByb290LXRlc3RzIHxzZWQgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIG9rJHxQQVNTOiBcMXwnIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBmYWlsZWR8RkFJTDogXDF8JworZ3Bhc3N3ZCAtZCBkYWVtb24gYmluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbF8yLjIuNTIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbF8yLjIuNTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkYmRiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgYWNsLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vYWRkLW1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTYxNDE1MzEyNDI2ZTljMjIxMmJkN2RjNzkyOWFiZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTc5MDc0YmIwNTgwYzA2YzRiNDEzN2JlNGM1YTkyYTcwMTU4MzI3Nzk2N2FjZGI1NTQ2MDQzYzc4NzRlMGQyMyIKKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGM3NTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuaXB1bGF0aW5nIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL2F0dHIvIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpbnRsIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIrIgorTElDRU5TRV9saWIke0JQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0NPUFlJTkc7bWQ1PTJkMGFhMTRiM2ZjZTQ2OTRlNGY2MTVlMzAxODYzMzVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0dHIvYXR0ci5jO2VuZGxpbmU9MTc7bWQ1PWJlMDQwMzI2MWYwODQ3ZTVmNDNlZDViMDhkMTk1OTNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmF0dHIvbGliYXR0ci5jO2VuZGxpbmU9MTc7bWQ1PTc5NzBmNzcwNDlmOGZhMTE5OWZmZjYyYTdhYjcyNGZiIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vYXR0ci8ke0JQfS5zcmMudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK3JlcXVpcmUgZWEtYWNsLmluYworCisjIGxpYmRpciBzaG91bGQgcG9pbnQgdG8gLmxhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtEfSR7bGliZGlyfS9saWJhdHRyLmxhIC1lIFwKKwkgICAgcyxebGliZGlyPVwnJHtiYXNlX2xpYmRpcn1cJyQsbGliZGlyPVwnJHtsaWJkaXJ9XCcsCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIGV4dCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlCisJZm9yIGkgaW4gYnVpbGRkZWZzIGJ1aWxkbWFjcm9zIGJ1aWxkcnVsZXM7IFwKKwkgIGRvIGNwICR7U30vaW5jbHVkZS8kaSAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLzsgXAorCWRvbmUKKwlzZWQgLWUgJ3N8OyBAZWNob3w7IGVjaG98JyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L01ha2VmaWxlCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImNvcmV1dGlscyBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQwYzliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGF0dHIuaW5jCisKKyMgY29uZmlndXJlLmFjIHdhcyBtaXNzaW5nIGZyb20gdGhlIHJlbGVhc2UgdGFyYmFsbC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4KKyMgZnV0dXJlIHJlbGVhc2VzIG9mIGF0dHIsIHJlbW92ZSB0aGlzIHdoZW4gdXBkYXRpbmcgdGhlIHJlY2lwZS4KK1NSQ19VUklfYXBwZW5kICs9ICJmaWxlOi8vYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg0ZjU4ZGVjMDBiNjBmMmRjOGZkMWM5NzA5MjkxY2M3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI1NzcyZjY1M2FjNWIyZTNjZWViODlkZjUwZTQ2ODg4OTFlMjFmNzIzYzQ2MDYzNjU0ODk3MTY1MmFmMGE4NTkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZWEtYWNsLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZWEtYWNsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzBlMTZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMgdGhpcyBidWlsZCBzeXN0ZW0gaXMgbW9zdGx5IHNoYXJlZCBieSBhdHRyIGFuZCBhY2wKKworU1JDX1VSSSArPSAiZmlsZTovL3JlbGF0aXZlLWxpYmRpci5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0CisKKyMgdGhlIHBhY2thZ2UgY29tZXMgd2l0aCBhIGN1c3RvbSBjb25maWcuaC5pbiwgaXQgY2Fubm90IGJlCisjIG92ZXJ3cml0dGVuIGJ5IGF1dG9oZWFkZXIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorRVhUUkFfT0VDT05GID0gIklOU1RBTExfVVNFUj1yb290IElOU1RBTExfR1JPVVA9cm9vdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1nZXR0ZXh0PW5vIgorCitFWFRSQV9PRU1BS0UgPSAiUEtHX0xJQl9ESVI9JHtiYXNlX2xpYmRpcn0gUEtHX0RFVkxJQl9ESVI9JHtsaWJkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgaW5zdGFsbC1saWIgaW5zdGFsbC1kZXYgRElTVF9ST09UPSIke0R9IgorfQorCitQQUNLQUdFUyA9KyAibGliJHtCUE59IgorCitGSUxFU19saWIke0JQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisjIE9ubHkgYXBwZW5kIGxkZmxhZ3MgZm9yIHRhcmdldCByZWNpcGUgYW5kIGlmIFVTRV9OTFMgaXMgZW5hYmxlZAorTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIiR7QFsnJywgJyAtbGludGwgJ11bKGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ3llcycpXX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICIke0BbJycsICcgLS1kaXNhYmxlLWdldHRleHQgJ11bKGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJyldfSIKKworZml4X3N5bWxpbmsgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiAhPSAicG9wdWxhdGVfc3lzcm9vdCIgLWEgIiR7QkJfQ1VSUkVOVFRBU0t9IiAhPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJcmV0dXJuCisJZmkKKworCWlmIHRlc3QgIiR7bGliZGlyfSIgPSAiJHtiYXNlX2xpYmRpcn0iIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCSMgUmVtb3ZlIGJhZCBzeW1saW5rcyAmIGNyZWF0ZSB0aGUgY29ycmVjdCBzeW1saW5rcworCWlmIHRlc3QgLUwgJHtsaWJkaXJ9L2xpYiR7QlBOfS5zbyA7IHRoZW4KKwkJcm0gLXJmICR7bGliZGlyfS9saWIke0JQTn0uc28KKwkJbG4gLXNmICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5zbyAke2xpYmRpcn0vbGliJHtCUE59LnNvCisJZmkKKwlpZiB0ZXN0IC1MICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5hIDsgdGhlbgorCQlybSAtcmYgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmEKKwkJbG4gLXNmICR7bGliZGlyfS9saWIke0JQTn0uYSAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0uYQorCWZpCisJaWYgdGVzdCAtTCAgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhIDsgdGhlbgorCQlybSAtcmYgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhCisJCWxuIC1zZiAke2xpYmRpcn0vbGliJHtCUE59LmxhICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5sYQorCWZpCit9CitTU1RBVEVQT1NUSU5TVEZVTkNTX2NsYXNzLW5hdGl2ZSArPSAiZml4X3N5bWxpbmsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL2F0dHItTWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL2F0dHItTWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmY2MzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApAQCAtMCwwICsxLDYzIEBACitTdWJqZWN0OiBbUEFUQ0hdIGF0dHI6IE1pc3NpbmcgY29uZmlndXJlLmFjCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW1Vwc3RyZWFtIHJlbGVhc2VkIHRhcmJhbGwgbWlzc2luZyB0aGlzIGZpbGVdCitTaWduZWQtb2ZmLWJ5OiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICA0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb25maWd1cmUuYWMKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI5NjZkMGUKKy0tLSAvZGV2L251bGwKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTAsMCArMSw0OCBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyMKKytBQ19JTklUKGluY2x1ZGUvYXR0cmlidXRlcy5oKQorK0FDX0NPTkZJR19BVVhfRElSKFsuXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL2NvbmZpZy5oKQorK0FDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisrCisrQUNfUFJPR19MSUJUT09MCisrCisrQUNfQVJHX0VOQUJMRShzaGFyZWQsCisrWyAtLWVuYWJsZS1zaGFyZWQ9W3llcy9ub10gRW5hYmxlIHVzZSBvZiBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX3NoYXJlZD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX3NoYXJlZCkKKysKKytBQ19BUkdfRU5BQkxFKGdldHRleHQsCisrWyAtLWVuYWJsZS1nZXR0ZXh0PVt5ZXMvbm9dIEVuYWJsZSBhbHRlcm5hdGUgbGFuZ3VhZ2Ugc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9nZXR0ZXh0PXllcykKKytBQ19TVUJTVChlbmFibGVfZ2V0dGV4dCkKKysKKytBQ19BUkdfRU5BQkxFKGxpYjY0LAorK1sgLS1lbmFibGUtbGliNjQ9W3llcy9ub10gRW5hYmxlIGxpYjY0IHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwsCisrCWVuYWJsZV9saWI2ND1ubykKKytBQ19TVUJTVChlbmFibGVfbGliNjQpCisrCisrQUNfUEFDS0FHRV9HTE9CQUxTKGF0dHIpCisrQUNfUEFDS0FHRV9VVElMSVRJRVMoYXR0cikKKytBQ19NQU5VQUxfRk9STUFUCisrQUNfTVVMVElMSUIoJGVuYWJsZV9saWI2NCkKKysKKytBQ19DX0NPTlNUCisrQUNfVFlQRV9NT0RFX1QKKytBQ19GVU5DX0FMTE9DQQorKworK0FDX09VVFBVVChpbmNsdWRlL2J1aWxkZGVmcykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcmVsYXRpdmUtbGliZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9yZWxhdGl2ZS1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyYmYxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcmVsYXRpdmUtbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1c2UgcmVsYXRpdmUgcGF0aCBpbiBzeW1ib2xpYyBsaW5rcywgb3IgaXQgZmFpbHMgaW4gc3RhZ2luZworc2VkIGV4cHJlc3Npb24gZnJvbSB1ZGV2CisKKzcvMjkvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLXUgaW5jbHVkZS5vcmlnL2J1aWxkbWFjcm9zIGluY2x1ZGUvYnVpbGRtYWNyb3MKKy0tLSBpbmNsdWRlLm9yaWcvYnVpbGRtYWNyb3MJMjAxMC0wNy0yOSAxNzozOTo0OC4wMDAwMDAwMDAgKzA4MDAKKysrKyBpbmNsdWRlL2J1aWxkbWFjcm9zCTIwMTAtMDctMjkgMTg6MjA6MzQuMDAwMDAwMDAwICswODAwCitAQCAtODgsOSArODgsMTEgQEAKKyAJLi4vJChJTlNUQUxMKSAtbSA3NTUgLWQgJChQS0dfTElCX0RJUik7IFwKKyAJLi4vJChJTlNUQUxMKSAtVCBzb19iYXNlICQoTElCTkFNRSkubGFpICQoUEtHX0xJQl9ESVIpOyBcCisgCWlmIHRlc3QgIngkKFBLR19ERVZMSUJfRElSKSIgIT0gIngkKFBLR19MSUJfRElSKSIgOyB0aGVuIFwKKy0JLi4vJChJTlNUQUxMKSAtUyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmEgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5hOyBcCistCS4uLyQoSU5TVEFMTCkgLVMgJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5sYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmxhOyBcCistCS4uLyQoSU5TVEFMTCkgLVMgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5zbyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLnNvOyBcCisrCXJlbF9saWJfcHJlZml4PSQkKGVjaG8gJChQS0dfTElCX0RJUikgfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZycpOyBcCisrCS4uLyQoSU5TVEFMTCkgLVMgJCRyZWxfbGliX3ByZWZpeCQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmE7IFwKKysJLi4vJChJTlNUQUxMKSAtUyAkJHJlbF9saWJfcHJlZml4JChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5sYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmxhOyBcCisrCXJlbF9kZXZsaWJfcHJlZml4PSQkKGVjaG8gJChQS0dfREVWTElCX0RJUikgfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZycpOyBcCisrCS4uLyQoSU5TVEFMTCkgLVMgJCRyZWxfZGV2bGliX3ByZWZpeCQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkuc28gJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5zbzsgXAorIAlmaQorIGVsc2UKKyBJTlNUQUxMX0xUTElCX0RFViA9ICQoSU5TVEFMTF9MVExJQl9TVEFUSUMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzY4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3QgLWsgdGVzdHMgcm9vdC10ZXN0cyB8c2VkIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBvayR8UEFTUzogXDF8JyBcCisgLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gZmFpbGVkfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkwN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gODI5YTg5ZTdmNTc4NTIzOWE5Mzg0ZTNhZmQ0NmM5MDBmOWQ3NmFkYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDE5OjU1OjMyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBidWlsZCB3aXRoIG11c2wKKworc2lnbmFsLmggYWxyZWFkeSBpbmNsdWRlcyBiaXRzL3NpZ2NvbnRleHQuaAorRG9jdW1lbnRhdGlvbiBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGlmIHlvdSBuZWVkIHRoZSBkZWZpbml0aW9ucyBpbgorc2lnY29udGV4dC5oLCB5b3UgYXJlIHN1cHBvc2VkIHRvIGluY2x1ZGUgc2lnbmFsLmggYW5kIG5vdCBzaWdjb250ZXh0LmguCisKK2EgZ29vZCBmaXggc2hvdWxkIGJlIHRvIHJlbW92ZSBnbGliYworc3BlY2lmaWMgdW5kZXJzdGFuZGluZywgaW4gdGhvc2UgaWZkZWYncworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIG9zX2RlcC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvb3NfZGVwLmMgYi9vc19kZXAuYworaW5kZXggMDhjNTAxZC4uNWNiNzg3MyAxMDA2NDQKKy0tLSBhL29zX2RlcC5jCisrKysgYi9vc19kZXAuYworQEAgLTQxLDcgKzQxLDcgQEAKKyAjICAgZWxzZSAvKiBfX0dMSUJDX18gPCAyICovCisgICAgICAgLyogbGliYzUgZG9lc24ndCBoYXZlIDxzaWdjb250ZXh0Lmg+OiBnbyBkaXJlY3RseSB3aXRoIHRoZSBrZXJuZWwgICAqLworICAgICAgIC8qIG9uZS4gIENoZWNrIExJTlVYX1ZFUlNJT05fQ09ERSB0byBzZWUgd2hpY2ggd2Ugc2hvdWxkIHJlZmVyZW5jZS4gKi8KKy0jICAgICBpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorKyMgICAgIGluY2x1ZGUgPHNpZ25hbC5oPgorICMgICBlbmRpZiAvKiBfX0dMSUJDX18gPCAyICovCisgIyBlbmRpZgorICNlbmRpZiAvKiBMSU5VWCAmJiAhUE9XRVJQQyAqLworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZTM1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkEgZ2FyYmFnZSBjb2xsZWN0b3IgZm9yIEMgYW5kIEMrKyIKKworREVTQ1JJUFRJT04gPSAiVGhlIEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBiZVwKKyB1c2VkIGFzIGEgZ2FyYmFnZSBjb2xsZWN0aW5nIHJlcGxhY2VtZW50IGZvciBDIG1hbGxvYyBvciBDKysgbmV3LiBJdCBhbGxvd3NcCisgeW91IHRvIGFsbG9jYXRlIG1lbW9yeSBiYXNpY2FsbHkgYXMgeW91IG5vcm1hbGx5IHdvdWxkLCB3aXRob3V0IGV4cGxpY2l0bHlcCisgZGVhbGxvY2F0aW5nIG1lbW9yeSB0aGF0IGlzIG5vIGxvbmdlciB1c2VmdWwuIFRoZSBjb2xsZWN0b3IgYXV0b21hdGljYWxseVwKKyByZWN5Y2xlcyBtZW1vcnkgd2hlbiBpdCBkZXRlcm1pbmVzIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBiZSBvdGhlcndpc2VcCisgYWNjZXNzZWQuXAorICBUaGUgY29sbGVjdG9yIGlzIGFsc28gdXNlZCBieSBhIG51bWJlciBvZiBwcm9ncmFtbWluZyBsYW5ndWFnZVwKKyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBlaXRoZXIgdXNlIEMgYXMgaW50ZXJtZWRpYXRlIGNvZGUsIHdhbnQgdG8gZmFjaWxpdGF0ZVwKKyBlYXNpZXIgaW50ZXJvcGVyYXRpb24gd2l0aCBDIGxpYnJhcmllcywgb3IganVzdCBwcmVmZXIgdGhlIHNpbXBsZSBjb2xsZWN0b3JcCisgaW50ZXJmYWNlLlwKKyAgQWx0ZXJuYXRpdmVseSwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG1heSBiZSB1c2VkIGFzIGEgbGVhayBkZXRlY3RvciBmb3IgQ1wKKyBvciBDKysgcHJvZ3JhbXMsIHRob3VnaCB0aGF0IGlzIG5vdCBpdHMgcHJpbWFyeSBnb2FsLlwKKyAgRW1waXJpY2FsbHksIHRoaXMgY29sbGVjdG9yIHdvcmtzIHdpdGggbW9zdCB1bm1vZGlmaWVkIEMgcHJvZ3JhbXMsIHNpbXBseVwKKyBieSByZXBsYWNpbmcgbWFsbG9jIHdpdGggR0NfbWFsbG9jIGNhbGxzLCByZXBsYWNpbmcgcmVhbGxvYyB3aXRoIEdDX3JlYWxsb2NcCisgY2FsbHMsIGFuZCByZW1vdmluZyBmcmVlIGNhbGxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5oYm9laG0uaW5mby9nYy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUuUVVJQ0s7bWQ1PTU1ZjUwODhmOTBhOTgyZmVkN2FmOWE0ODk3MDQ3ZWY3IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaGJvZWhtLmluZm8vZ2MvZ2Nfc291cmNlL2djLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjEyYzA1ZmQyODExZDk4OTM0MWQ4YzZkODFmNjZhZjg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzMzIwYWQ3YzQ1NDYwZTRhNDBlMDNmNWFhNGM2ODkzNzgzZjIxYTE2NDE2YzMyODJiOTk0ZjkzMzMxMmFmYTIiCitGSUxFU18ke1BOfS1kb2MgPSAiL3Vzci9zaGFyZSIKKworUkVBTF9QViA9ICIke0BbZC5nZXRWYXIoJ1BWJywxKVs6LTFdLCBkLmdldFZhcignUFYnLDEpXVsoZC5nZXRWYXIoJ1BWJywxKVstMV0pLmlzZGlnaXQoKV19IgorUyA9ICIke1dPUktESVJ9L2djLSR7UkVBTF9QVn0iCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBieSBkZWZhdWx0IHVzZSBleHRlcm5hbCBsaWJhdG9taWMtb3BzCitQQUNLQUdFQ09ORklHID8/PSAibGliYXRvbWljLW9wcyIKK1BBQ0tBR0VDT05GSUdbbGliYXRvbWljLW9wc10gPSAiLS13aXRoLWxpYmF0b21pYy1vcHM9eWVzLC0td2l0aC1saWJhdG9taWMtb3BzPW5vLGxpYmF0b21pYy1vcHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2FkZC1vcHRpb24tZGV2LWRzcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2FkZC1vcHRpb24tZGV2LWRzcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzI5OGNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0FkZCBjb25maWcgb3B0aW9uIC0td2l0aC1kZXYtZHNwLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhhbmcgWGlhbyA8eGlhby56aGFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNiw2ICsxMDYsMTYgQEAgQUNfQVJHX1dJVEgocHl0aG9uLFsgIC0td2l0aC1weXRob25bWz1BUgorICAgZmkKKyAgIF0pCisgCisrQUNfQVJHX1dJVEgoZGV2LWRzcCxbICAtLXdpdGgtZGV2LWRzcCAgICAgICAgICBlbmFibGVzIGRldi9kc3AgZm9yIGVudHJvcHkgcHJvZHVjaW5nLiBhdXRvIGZvciBhdXRvLWRldGVjdGluZyBkZXYvZGVwIG9uIGhvc3QuIFtbZGVmYXVsdD1ub11dXSxbCisrICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKFtIQVZFX0RFVl9EU1BdLCAxKQorKyAgZWxzZQorKyAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSBhdXRvOyAgdGhlbgorKyAgICAgIGFjX2RldGVjdF9kZXZfZHNwPXllcworKyAgICBmaQorKyAgZmkKKysgIF0sW2FjX2RldGVjdF9kZXZfZHNwPW5vXSkKKysKKyAjIENoZWNrIGZvciBleHBlcnQgbW9kZQorIGlmIHRlc3QgIiRhY19lbmFibGVfZXhwZXJ0X21vZGUiID0geWVzOyB0aGVuCisgICBCRUVfRVhQRVJUX01PREUKK0BAIC00NjQsNyArNDc0LDcgQEAgbGludXgqKQorICAgICAgIGFjX2N2X2hhdmVfZGV2X2RzcD1ubworICAgICBmaQorICAgICBdKQorLSAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGV2X2RzcCIgPSB5ZXM7IHRoZW4KKysgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2Rldl9kc3AiID0geWVzICYmIHRlc3QgIiRhY19kZXRlY3RfZGV2X2RzcCIgPSB5ZXM7IHRoZW4KKyAgICAgQUNfREVGSU5FKFtIQVZFX0RFVl9EU1BdLCAxKQorICAgZmkKKyAgIDs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNTUxM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitiZWVjcnlwdDogZW5hYmxlIHB0ZXN0IHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQWRkIGluc3RhbGwtcHRlc3QgcnVsZXMuCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgfCAzICsrKworIHRlc3RzL01ha2VmaWxlLmFtIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYjdlNzg2OS4uNTA3NmY1OSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTczLDMgKzczLDYgQEAgRElTVENMRUFORklMRVMgPSBtcG9wdC5zIGJsb3dmaXNob3B0LnMgc2hhMW9wdC5zCisgCisgYmVuY2g6CisgCShjZCB0ZXN0cyAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBiZW5jaCkKKysKKytpbnN0YWxsLXB0ZXN0OgorKwkoY2QgdGVzdHMgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2tfUFJPR1JBTVMpCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMTYwNGU1ZS4uZDhkYjhkOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEwMSwzICsxMDEsNiBAQCBiZW5jaDogYmVuY2htZSBiZW5jaHJzYSBiZW5jaGhmIGJlbmNoYmMKKyAJLi9iZW5jaGJjIEFFUyAxMjgKKyAJLi9iZW5jaGJjIEJsb3dmaXNoIDEyOAorIAkuL2JlbmNoYmMgQmxvd2Zpc2ggMTI4CisrCisrY2hlY2tfUFJPR1JBTVM6CisrCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9kaXNhYmxlLWljdS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWIxZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgYXJlIHVuYWJsZSB0byBydW4gY29kZSBhdCBjb25maWd1cmUgdGltZSBpbiBhIGNyb3NzIGVudmlyb25lbW50LCBidXQgYXMgd2UKK2NvbnRyb2wgdGhlIGJ1aWxkIHdlIGNhbiBiZSBmYWlybHkgY2VydGFpbiB0aGlzIGRlcGVuZGVuY3kgaXMgbWV0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitKTCAwNS8wNy8xMAorSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMTc6MTI6MjUuMDAwMDAwMDAwICswODAwCisrKysgYmVlY3J5cHQtNC4yLjEvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMTc6MTI6MzAuMDAwMDAwMDAwICswODAwCitAQCAtMjkyLDMyICsyOTIsNiBAQAorICMgUHJlZGVmaW5lcyBhbmQgY2hlY2tzIGZvciBDKysgQVBJIHN1cHBvcnQKKyBBSF9URU1QTEFURShbQ1BQR0xVRV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgdGhlIEMrKyBjb2RlXSkKKyAKKy1pZiB0ZXN0ICIkYWNfd2l0aF9jcGx1c3BsdXMiID0geWVzOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBJQk0ncyBJQ1UgbGlicmFyeSB2ZXJzaW9uID49IDIuOF0pCistICBBQ19MQU5HX1BVU0goQykKKy0gIEFDX1JVTl9JRkVMU0UoWworLSAgICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPl1dLFtbCistICAgICAgI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgMgorLSAgICAgIGV4aXQoMSk7CistICAgICAgI2VsaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPT0gMgorLSAgICAgICMgaWYgVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0gPCA4CistICAgICAgZXhpdCgxKTsKKy0gICAgICAjIGVsc2UKKy0gICAgICBleGl0KDApOworLSAgICAgICMgZW5kaWYKKy0gICAgICAjZWxzZQorLSAgICAgIGV4aXQoMCk7CistICAgICAgI2VuZGlmCistICAgIF1dKV0sWworLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgICBdLFsKKy0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgICBBQ19NU0dfV0FSTihbZGlzYWJsaW5nIGNwbHVzcGx1c10pCistICAgIGFjX3dpdGhfY3BsdXNwbHVzPW5vCistICAgIF0pCistICBBQ19MQU5HX1BPUChDKQorLWZpCistCisgQU1fQ09ORElUSU9OQUwoW1dJVEhfQ1BMVVNQTFVTXSxbdGVzdCAiJGFjX3dpdGhfY3BsdXNwbHVzIiA9IHllc10pCisgCisgaWYgdGVzdCAiJGFjX3dpdGhfY3BsdXNwbHVzIiA9IHllcyA7IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1mb3ItZ2NjLTQuNy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1mb3ItZ2NjLTQuNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQ0ZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKworZ2NjLTQuNyBzZWVtcyB0byBiZSBzdHJpY3RlciBhYm91dCBzb21lIHRoaW5ncywgc28gZm9sbG93Cit0aGUgc3VnZ2VzdGlvbiBmcm9tIHRoZSBlcnJvci9ub3RlIGluZm9ybWF0aW9uLgorCisgICAgLi4vLi4veDg2XzY0LWxpbnV4LWxpYnRvb2wgLS10YWc9Q1hYICAgLS1tb2RlPWNvbXBpbGUgZysrIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLi8uLiAKKyAgICB4ODZfNjQtbGludXgtbGlidG9vbDogY29tcGlsZTogIGcrKyAtREhBVkVfQ09ORklHX0ggLUkuIC1JLi4vLi4gLUkuLi8uLi9pbmNsdWRlIC1pc3lzdAorICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0hhc2h0YWJsZS5oOjQyOjAsCisgICAgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvUHJvcGVydGllcy5oOjM2LAorICAgICAgICAgICAgICAgICAgICAgZnJvbSBQcm9wZXJ0aWVzLmN4eDoyNToKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ2Jvb2wgYmVlY3J5cHQ6OnV0aQorICAgIFByb3BlcnRpZXMuY3h4OjIyODoxOiAgIHJlcXVpcmVkIGZyb20gaGVyZQorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogZXJyb3I6ICdjb250YWluc0FsbCcgd2FzIG5vdCBkZWNsCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBub3RlOiBkZWNsYXJhdGlvbnMgaW4gZGVwZW5kZW50IGIKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IHVzZSAndGhpcy0+Y29udGFpbnNBbGwnIGlucworICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnYm9vbCBiZWVjcnlwdDo6dXRpCisgICAgUHJvcGVydGllcy5jeHg6MjI4OjE6ICAgcmVxdWlyZWQgZnJvbSBoZXJlCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBlcnJvcjogJ2NvbnRhaW5zQWxsJyB3YXMgbm90IGRlY2wKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IGRlY2xhcmF0aW9ucyBpbiBkZXBlbmRlbnQgYgorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogdXNlICd0aGlzLT5jb250YWluc0FsbCcgaW5zCisgICAgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCisrKysgYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCitAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgYmVlY3J5cHQgeworIAkJCQkJaWYgKGMtPnNpemUoKSAhPSBzaXplKCkpCisgCQkJCQkJcmV0dXJuIGZhbHNlOworIAorLQkJCQkJcmV0dXJuIGNvbnRhaW5zQWxsKCpjKTsKKysJCQkJCXJldHVybiB0aGlzLT5jb250YWluc0FsbCgqYyk7CisgCQkJCX0KKyAJCQkJcmV0dXJuIGZhbHNlOworIAkJCX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1zZWN1cml0eS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2ZpeC1zZWN1cml0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2IwYzAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0ZpeCB2aXNpYmlsaXR5IG9mIHZhcmlvdXMgQysrIGZ1bmN0aW9ucywgaW5zcGlyZWQgYnkgYSBzaW1pbGFyIHBhdGNoIGluIHRoZSBGaW5rCitwcm9qZWN0OiAKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9maW5rLWNvbW1pdHNAbGlzdHMuc291cmNlZm9yZ2UubmV0L21zZzc1NzQyLmh0bWwKKworSkwgMDUvMDcvMTAgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvYmVleW9uZC9CZWVDZXJ0aWZpY2F0ZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgJMjAxMC0xMS0yNiAxNzoyMjo1Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgJMjAxMC0xMS0yNiAxNzoyMzowMS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xNDcsMTMgKzE0NywxMyBAQAorIAkJCW11dGFibGUgYnl0ZWFycmF5KiBlbmM7CisgCisgCQkJQmVlQ2VydGlmaWNhdGUoKTsKKy0JCQlCZWVDZXJ0aWZpY2F0ZShJbnB1dFN0cmVhbSYgaW4pIHRocm93IChJT0V4Y2VwdGlvbik7CisgCisgCQkJdm9pZCBlbmNvZGVUQlMoRGF0YU91dHB1dFN0cmVhbSYgb3V0KSBjb25zdCB0aHJvdyAoSU9FeGNlcHRpb24pOworIAorIAkJCWJ5dGVhcnJheSogZW5jb2RlVEJTKCkgY29uc3QgdGhyb3cgKENlcnRpZmljYXRlRW5jb2RpbmdFeGNlcHRpb24pOworIAorIAkJcHVibGljOgorKwkJCUJlZUNlcnRpZmljYXRlKElucHV0U3RyZWFtJiBpbikgdGhyb3cgKElPRXhjZXB0aW9uKTsKKyAJCQlCZWVDZXJ0aWZpY2F0ZShjb25zdCBCZWVDZXJ0aWZpY2F0ZSYpIHRocm93IChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbik7CisgCQkJdmlydHVhbCB+QmVlQ2VydGlmaWNhdGUoKTsKKyAKK0luZGV4OiBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCTIwMTAtMTEtMjYgMTc6MjA6NTUuMDAwMDAwMDAwICswODAwCisrKysgYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvc2VjdXJpdHkvU2VjdXJpdHkuaAkyMDEwLTExLTI2IDE3OjIxOjM2LjAwMDAwMDAwMCArMDgwMAorQEAgLTYxLDcgKzYxLDYgQEAKKyAJCQlmcmllbmQgY2xhc3MgU2VjdXJlUmFuZG9tOworIAkJCWZyaWVuZCBjbGFzcyBTaWduYXR1cmU7CisgCistCQlwcml2YXRlOgorIAkJCXN0cnVjdCBzcGkKKyAJCQl7CisgCQkJCU9iamVjdCogY3NwaTsKK0BAIC03Niw2ICs3NSw3IEBACisgCQkJc3RhdGljIHNwaSogZ2V0U3BpKGNvbnN0IFN0cmluZyYgYWxnbywgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBQcm92aWRlciYpIHRocm93IChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24pOworIAkJCXN0YXRpYyBzcGkqIGdldEZpcnN0U3BpKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgCisrCQlwcml2YXRlOgorIAkJCXN0YXRpYyBjb25zdCBTdHJpbmcmIGdldEtleVN0b3JlRGVmYXVsdCgpOworIAorIAkJCXN0YXRpYyBib29sIF9pbml0OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTI5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworY2QgdGVzdHMKK2ZvciBpIGluIGBsc2A7IGRvIC4vJGk7IGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvICJQQVNTOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIkZBSUw6ICRpIjsgZmk7IGRvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0XzQuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHRfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2MjZmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0XzQuMi4xLmJiCkBAIC0wLDAgKzEsNDggQEAKKyMgQmVlY3J5cHQgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIkEgZ2VuZXJhbC1wdXJwb3NlIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9iZWVjcnlwdCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vYmVlY3J5cHQvYmVlY3J5cHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtaWN1LWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWN1cml0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZm9yLWdjYy00LjcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1vcHRpb24tZGV2LWRzcC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODQ0MWMwMTQxNzA4MjNmMmRmZjk3ZTMzZGY1NWFmMWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjg2ZjFmNTYwODBkMWE2YjFkMDI0MDAzYTVmYTIxNThmNGZmODJjYWUwYzY4MjlkM2M0NzZhNGI1ODk4YzU1ZCIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTg5NDM3MGFmZDVkZmU3ZDAyYjhkMTQzMTllNzI5YTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWRjZjNjODI1NjU5ZTgyNTM5NjQ1ZGE0MWE3OTA4NTg5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYmVlY3J5cHQvYmVlY3J5cHQuaDtlbmRsaW5lPTIwO21kNT00N2E5M2VlZjUzOWFhYzIzN2VlZjg2Mjk3YTRkNzFjMSIKKworUFIgPSAicjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBwdGVzdAorYWNwYXRocz0iIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYmVlY3J5cHQvZ251LmgKK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYyAtLWRpc2FibGUtb3Blbm1wIC0td2l0aC1qYXZhPW5vIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjcGx1c3BsdXNdID0gIi0td2l0aC1jcGx1c3BsdXMsLS13aXRob3V0LWNwbHVzcGx1cyxpY3UiCisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0gJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vJHtCUE59Lyouc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLnNvICR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLmEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKKwljcCAtciAke0J9L3Rlc3RzLy5saWJzL3Rlc3QqICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjU4LjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjU4LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2NDZkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYgpAQCAtMCwwICsxLDE4IEBACitpbmNsdWRlIGJvb3N0LSR7UFZ9LmluYworCitTVU1NQVJZID0gIlBvcnRhYmxlIEJvb3N0LkphbSBidWlsZCB0b29sIGZvciBib29zdCIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoIgorCitkb19jb21waWxlKCkgeworICAgIC4vYm9vdHN0cmFwLnNoIC0td2l0aC10b29sc2V0PWdjYworfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAjIGluc3RhbGwgdW5zdHJpcHBlZCB2ZXJzaW9uIGZvciBiamFtCisgICAgaW5zdGFsbCAtYyAtbSA3NTUgYmphbS5kZWJ1ZyAke0R9JHtiaW5kaXJ9L2JqYW0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNTguMC5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjU4LjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2QwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjU4LjAuaW5jCkBAIC0wLDAgKzEsMjIgQEAKKyMgVGhlIEJvb3N0IHdlYiBzaXRlIHByb3ZpZGVzIGZyZWUgcGVlci1yZXZpZXdlZCBwb3J0YWJsZQorIyBDKysgc291cmNlIGxpYnJhcmllcy4gVGhlIGVtcGhhc2lzIGlzIG9uIGxpYnJhcmllcyB3aGljaAorIyB3b3JrIHdlbGwgd2l0aCB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkuIFRoZSBsaWJyYXJpZXMgYXJlCisjIGludGVuZGVkIHRvIGJlIHdpZGVseSB1c2VmdWwsIGFuZCBhcmUgaW4gcmVndWxhciB1c2UgYnkKKyMgdGhvdXNhbmRzIG9mIHByb2dyYW1tZXJzIGFjcm9zcyBhIGJyb2FkIHNwZWN0cnVtIG9mIGFwcGxpY2F0aW9ucy4KK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYm9vc3Qub3JnLyIKK0xJQ0VOU0UgPSAiQlNMLTEuMCAmIE1JVCAmIFB5dGhvbi0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFXzFfMC50eHQ7bWQ1PWU0MjI0Y2NhZWNiMTRkOTQyYzcxZDMxYmVmMjBkNzhjIgorCitCT09TVF9WRVIgPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIiwxKS5zcGxpdCgiLiIpKX0iCitCT09TVF9NQUogPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIiwxKS5zcGxpdCgiLiIpWzA6Ml0pfSIKK0JPT1NUX1AgPSAiYm9vc3RfJHtCT09TVF9WRVJ9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9ib29zdC8ke0JPT1NUX1B9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1taXBzMS1maXgtYWRkZWQtZ2NjLmphbS13YXMtcGFzc2luZy10aGUtb3B0aW9ucy1tMzItLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRG9uLXQtcGFzcy1tMzItbTY0LXdoZXJlLWl0LXMtbm90LXN1cHBvcnRlZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiODgzOTY1MGU2MWU5YzFjMGE4OWYzNzFkZDQ3NTU0NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGZjMjA0ZmMzM2VjNzljOTliOWE3NDk0NGMzZTU0YmQ3OGJlNGY3ZjE1ZTI2MGMwZTI3MDBhMzZkYzdkM2U1IgorCitTID0gIiR7V09SS0RJUn0vJHtCT09TVF9QfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjg4ZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCkBAIC0wLDAgKzEsMTkyIEBACitTVU1NQVJZID0gIkZyZWUgcGVlci1yZXZpZXdlZCBwb3J0YWJsZSBDKysgc291cmNlIGxpYnJhcmllcyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiYmphbS1uYXRpdmUgemxpYiBiemlwMiIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JPT1NUX0xJQlMgPSAiXAorCWF0b21pYyBcCisJY2hyb25vIFwKKwlkYXRlX3RpbWUgXAorCWZpbGVzeXN0ZW0gXAorCWdyYXBoIFwKKwlpb3N0cmVhbXMgXAorCWxvZyBcCisJcHJvZ3JhbV9vcHRpb25zIFwKKwlyYW5kb20gXAorCXJlZ2V4IFwKKwlzZXJpYWxpemF0aW9uIFwKKwlzaWduYWxzIFwKKwlzeXN0ZW0gXAorCXRlc3QgXAorCXRocmVhZCBcCisJIgorCisjIG9wdGlvbmFsIGJvb3N0LXB5dGhvbiBsaWJyYXJ5CitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiwscHl0aG9uIHB5dGhvbjMiCitCT09TVF9MSUJTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uIHB5dGhvbjMnLCAnJywgZCl9IgoraW5oZXJpdCBweXRob24tZGlyCitQWVRIT05fUk9PVCA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyR7cHJlZml4fSIKKworIyBNYWtlIGEgcGFja2FnZSBmb3IgZWFjaCBsaWJyYXJ5LCBwbHVzIC1kZXYKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke0JPT1NUX1BBQ0tBR0VTfSIKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgcGFja2FnZXMgPSBbXQorICAgIGV4dHJhcyA9IFtdCisgICAgZm9yIGxpYiBpbiBkLmdldFZhcignQk9PU1RfTElCUycsIFRydWUpLnNwbGl0KCApOgorICAgICAgICAjIEJKQU0gZG9lcyBub3Qga25vdyAnLS13aXRoLXB5dGhvbjMnIChvbmx5IC0td2l0aC1weXRob24pCisgICAgICAgIGlmIGxpYiAhPSAicHl0aG9uMyI6CisgICAgICAgICAgICBleHRyYXMuYXBwZW5kKCItLXdpdGgtJXMiICUgbGliKQorICAgICAgICBwa2cgPSAiYm9vc3QtJXMiICUgbGliLnJlcGxhY2UoIl8iLCAiLSIpCisgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGlmIGxpYiA9PSAicHl0aG9uIjoKKyAgICAgICAgICAgICMgc3BlY2lhbDogcHl0aG9uKi5zbyBtYXRjaGVzIHB5dGhvbjMuc28gISEKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcigiRklMRVNfJXMiICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWJib29zdF8lcy5zby4qIiAlIGxpYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcigiRklMRVNfJXMiICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWJib29zdF8lcyouc28uKiIgJSBsaWIpCisgICAgZC5zZXRWYXIoIkJPT1NUX1BBQ0tBR0VTIiwgIiAiLmpvaW4ocGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJCSkFNX0VYVFJBIiwgIiAiLmpvaW4oZXh0cmFzKSkKK30KKworIyBPdmVycmlkZSB0aGUgY29udGVudHMgb2Ygc3BlY2lmaWMgcGFja2FnZXMKK0ZJTEVTX2Jvb3N0LXNlcmlhbGl6YXRpb24gPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3NlcmlhbGl6YXRpb24qLnNvLiogXAorCSR7bGliZGlyfS9saWJib29zdF93c2VyaWFsaXphdGlvbiouc28uKiIKK0ZJTEVTX2Jvb3N0LXRlc3QgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3ByZ19leGVjX21vbml0b3IqLnNvLiogXAorCSR7bGliZGlyfS9saWJib29zdF91bml0X3Rlc3RfZnJhbWV3b3JrKi5zby4qIgorCisjIC1kZXYgbGFzdCB0byBwaWNrIHVwIHRoZSByZW1haW5pbmcgc3R1ZmYKK1BBQ0tBR0VTICs9ICIke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9L2xpYmJvb3N0Xyouc28iCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0XyouYSIKKworIyAiYm9vc3QiIGlzIGEgbWV0YXBhY2thZ2Ugd2hpY2ggcHVsbHMgaW4gYWxsIGJvb3N0IGxpYnJhYnJpZXMKK1BBQ0tBR0VTICs9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0JPT1NUX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCisjIHRvIGF2b2lkIEdOVV9IQVNIIFFBIGVycm9ycyBhZGRlZCBMREZMQUdTIHRvIEFSQ0g7IGEgbGl0dGxlIGJpdCBkaXJ0eSBidXQgYXQgbGVhc3QgaXQgd29ya3MKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCisjIE9oIHlpcHBlZSwgYSBuZXcgYnVpbGQgc3lzdGVtLCBpdCdzIHNvb28gY29vb29sIEkgY291bGQgZWF0IG15IG93bgorIyBmb290LiAgaW5saW5pbmc9b24gbGV0cyB0aGUgY29tcGlsZXIgY2hvb3NlLCBJIHRoaW5rLiAgQXQgbGVhc3QgdGhpcworIyBzdHVmZiBpcyBkb2N1bWVudGVkLi4uCisjIE5PVEU6IGlmIHlvdSBsZWF2ZSA8ZGVidWctc3ltYm9scz5vbiB0aGVuIGluIGEgZGVidWcgYnVpbGQgdGhlIGJ1aWxkIHN5cworIyBvYmpjb3B5IHdpbGwgYmUgaW52b2tlZCwgYW5kIHRoYXQgd29uJ3Qgd29yay4gIEJ1aWxkaW5nIGRlYnVnIGFwcGFyZW50bHkKKyMgcmVxdWlyZXMgaGFja2luZyBnY2MtdG9vbHMuamFtCisjCisjIFNvbWV0aW1lcyBJIHdha2UgdXAgc2NyZWFtaW5nLiAgRmFtb3VzIGZpZ3VyZXMgYXJlIGdhdGhlcmVkIGluIHRoZSBuaWdodG1hcmUsCisjIFN0ZXZlIEJvdXJuZSwgTGFycnkgV2FsbCwgdGhlIHdob2xlIG9mIHRoZSBBTlNJIEMgY29tbWl0dGVlLiAgVGhleSdyZSBqdXN0CisjIHN0YW5kaW5nIHRoZXJlLCB3YWl0aW5nLCBidXQgdGhlIHRydWVseSB0ZXJyaWZ5aW5nIHRoaW5nIGlzIHdoYXQgdGhleSBjYXJyeQorIyBpbiB0aGVpciBoYW5kcy4gIEF0IGZpcnN0IHNpZ2h0IGVhY2ggc2VlbXMgdG8gYmVhciB0aGUgc2FtZSB0aGluZywgYnV0IGl0IGlzCisjIG5vdCBzbyBmb3IgdGhlIGZvcm1zIGluIHRoZWlyIGdyYXNwIGFyZSBldmVyIHNvIHNsaWdodGx5IGRpZmZlcmVudCBvbmUgZnJvbQorIyB0aGUgb3RoZXIuICBFYWNoIGlzIHR3aXN0ZWQgaW4gc29tZSBncm90ZXNxdWUgd2F5IGZyb20gdGhlIG90aGVyIHRvIG1ha2UgZWFjaAorIyBhbiB1bnNwZWFrYWJsZSBwZXJ2ZXJzaW9uIGltcG9zc2libGUgdG8gcGVyY2VpdmUgd2l0aG91dCB0aGUgb25zZXQgb2YgbWFkbmVzcy4KKyMgVHJ1ZSBpbnNhbml0eSBhd2FpdHMgYW55b25lIHdobyBwZXJjZWl2ZXMgYWxsIG9mIHRoZXNlIGhvcnJvcnMgdG9nZXRoZXIuCisjCisjIFF1b3RhdGlvbiBtYXJrcywgdGhlcmUgbWlnaHQgYmUgYW4gZWFzaWVyIHdheSB0byBkbyB0aGlzLCBidXQgSSBjYW4ndCBmaW5kCisjIGl0LiAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgdXNlci5ocHAgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgcmVjZWl2ZSBhCisjIHByZS1wcm9jZXNzb3IgbWFjcm8gZGVmaW5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgc3RyaW5nIC0gY29tcGxldGUgd2l0aCAiJ3MKKyMgYXJvdW5kIGl0LiAgKDw+IGlzIGEgcG9zc2liaWxpdHkgaGVyZSBidXQgdGhlIGRhbmdlciB0byB0aGF0IGlzIHRoYXQgdGhlCisjIGZhaWx1cmUgY2FzZSBpbnRlcnByZXRzIHRoZSA8IGFuZCA+IGFzIHNoZWxsIHJlZGlyZWN0aW9ucywgY3JlYXRpbmcKKyMgcmFuZG9tIGZpbGVzIGluIHRoZSBzb3VyY2UgdHJlZS4pCisjCisjYmphbTogJy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPVwiY29uZmlnXCInCisjZG9fY29tcGlsZTogJy1zR0NDPS4uLiAnIictREJPT1NUX1BMQVRGT1JNX0NPTkZJRz1cImNvbmZpZ1wiJyIKK1NRRCA9ICciJworRVFEID0gJ1wiJworI2Jvb3N0LmJiOiAgICIuLi4gICctc0dDQz0uLi4gJyR7U1FEfSctREJPT1NUX1BMQVRGT1JNX0NPTkZJRz0ke0VRRH1jb25maWcke0VRRH0nJHtTUUR9IC4uLiIKK0JKQU1fQ09ORiA9ICIke1NRRH0nLURCT09TVF9QTEFURk9STV9DT05GSUc9JHtFUUR9Ym9vc3QvY29uZmlnL3BsYXRmb3JtLyR7VEFSR0VUX09TfS5ocHAke0VRRH0nJHtTUUR9IgorCitCSkFNX1RPT0xTICAgPSAiLS1pZ25vcmUtc2l0ZS1jb25maWcgXAorCQknLXNUT09MUz1nY2MnIFwKKwkJJy1zR0NDPSR7Q0N9ICcke0JKQU1fQ09ORn0gXAorCQknLXNHWFg9JHtDWFh9ICcke0JKQU1fQ09ORn0gXAorCQknLXNHQ0NfSU5DTFVERV9ESVJFQ1RPUlk9JHtTVEFHSU5HX0lOQ0RJUn0nIFwKKwkJJy1zR0NDX1NURExJQl9ESVJFQ1RPUlk9JHtTVEFHSU5HX0xJQkRJUn0nIFwKKwkJJy1zQlVJTEQ9cmVsZWFzZSA8b3B0aW1pemF0aW9uPnNwYWNlIDx0aHJlYWRpbmc+bXVsdGkgPGlubGluaW5nPm9uIDxkZWJ1Zy1zeW1ib2xzPm9mZicgXAorCQknLXNQWVRIT05fUk9PVD0ke1BZVEhPTl9ST09UfScgXAorCQknLS1sYXlvdXQ9c3lzdGVtJyBcCisJCSIKKworIyB1c2UgUEFSQUxMRUxfTUFLRSB0byBzcGVlZCB1cCB0aGUgYnVpbGQsIGJ1dCBsaW1pdCBpdCBieSAtaiA2NCwgZ3JlYXRlciBwYXJhbGVsaXNtIGNhdXNlcyBiamFtIHRvIHNlZ2ZhdWx0IG9yIHRvIGlnbm9yZSAtagorIyBodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvNzYzNAorZGVmIGdldF9ib29zdF9wYXJhbGxlbF9tYWtlKGJiLCBkKToKKyAgICBwbSA9IGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgVHJ1ZSkKKyAgICBpZiBwbToKKyAgICAgICAgIyBsb29rIGZvciAnLWonIGFuZCB0aHJvdyBvdGhlciBvcHRpb25zIChlLmcuICctbCcpIGF3YXkKKyAgICAgICAgIyBiZWNhdXNlIHRoZXkgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgbWVhbmluZyBpbiBiamFtCisgICAgICAgIHBtID0gcG0uc3BsaXQoKQorICAgICAgICB3aGlsZSBwbToKKyAgICAgICAgICAgIHYgPSBOb25lCisgICAgICAgICAgICBvcHQgPSBwbS5wb3AoMCkKKyAgICAgICAgICAgIGlmIG9wdCA9PSAnLWonOgorICAgICAgICAgICAgICAgIHYgPSBwbS5wb3AoMCkKKyAgICAgICAgICAgIGVsaWYgb3B0LnN0YXJ0c3dpdGgoJy1qJyk6CisgICAgICAgICAgICAgICAgdiA9IG9wdFsyOl0uc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ID0gTm9uZQorCisgICAgICAgICAgICBpZiB2OgorICAgICAgICAgICAgICAgIHYgPSBtaW4oNjQsIGludCh2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJy1qJyArIHN0cih2KQorCisgICAgcmV0dXJuICIiCisKK0JPT1NUX1BBUkFMTEVMX01BS0UgPSAiJHtAZ2V0X2Jvb3N0X3BhcmFsbGVsX21ha2UoYmIsIGQpfSIKK0JKQU1fT1BUUyAgICA9ICcke0JPT1NUX1BBUkFMTEVMX01BS0V9IFwKKwkJJHtCSkFNX1RPT0xTfSBcCisJCS1zQk9PU1RfQlVJTERfVVNFUl9DT05GSUc9JHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbSBcCisJCS0tYnVpbGRkaXI9JHtTfS8ke1RBUkdFVF9TWVN9IFwKKwkJLS1kaXNhYmxlLWljdSBcCisJCSR7QkpBTV9FWFRSQX0nCisKKyMgTmF0aXZlIGNvbXBpbGF0aW9uIG9mIGJ6aXAyIGlzbid0IHdvcmtpbmcKK0JKQU1fT1BUU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gJyAtc05PX0JaSVAyPTEnCisKK2RvX2Jvb3N0Y29uZmlnKCkgeworCWNwIC1mIGJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC5ocHAgYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LWdudWVhYmkuaHBwCisKKwkjIEQyMTk0OkZpeGluZyB0aGUgZmFpbHVyZSBvZiAiZXJyb3I6IGR1cGxpY2F0ZSBpbml0aWFsaXphdGlvbiBvZiBnY2Mgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMiIGR1cmluZyBjb21waWxhdGlvbi4KKwlzZWQgLWkgIi9edXNpbmcgZ2NjIDogNC4zLjEvZCIgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCXNlZCAtaSAiL151c2luZyBweXRob24gOiAke1BZVEhPTl9CQVNFVkVSU0lPTn0iL2QgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCWVjaG8gJ3VzaW5nIGdjYyA6IDQuMy4xIDogJHtDWFh9IDogPGNmbGFncz4iJHtDRkxBR1N9IiA8Y3h4ZmxhZ3M+IiR7Q1hYRkxBR1N9IiA8bGlua2ZsYWdzPiIke0xERkxBR1N9IiA7JyA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJZWNobyAidXNpbmcgcHl0aG9uIDogJHtQWVRIT05fQkFTRVZFUlNJT059IDogOiAke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gOyIgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCWVjaG8gInVzaW5nIHB5dGhvbiA6IDMuNCA6IDogJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uMy40bSA7IiA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisKKwlDQz0iJHtCVUlMRF9DQ30iIENGTEFHUz0iJHtCVUlMRF9DRkxBR1N9IiAuL2Jvb3RzdHJhcC5zaCAtLXdpdGgtYmphbT1iamFtIC0td2l0aC10b29sc2V0PWdjYyAtLXdpdGgtcHl0aG9uLXJvb3Q9JHtQWVRIT05fUk9PVH0KKwlzZWQgLWkgJy9edXNpbmcgcHl0aG9uL2QnIHByb2plY3QtY29uZmlnLmphbQorfQorCitkb19ib29zdGNvbmZpZ1tkaXJzXSA9ICIke1N9IgorYWRkdGFzayBkb19ib29zdGNvbmZpZyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2RvX2NvbXBpbGUoKSB7CisJc2V0IC1leAorCWJqYW0gJHtCSkFNX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSBcCisJCS0tZXhlYy1wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAorCQktLWxpYmRpcj0ke2xpYmRpcn0gXAorCQktLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfQorfQorCitkb19pbnN0YWxsKCkgeworCXNldCAtZXgKKwliamFtICR7QkpBTV9PUFRTfSBcCisJCS0tbGliZGlyPSR7RH0ke2xpYmRpcn0gXAorCQktLWluY2x1ZGVkaXI9JHtEfSR7aW5jbHVkZWRpcn0gXAorCQlpbnN0YWxsCisJZm9yIGxpYiBpbiAke0JPT1NUX0xJQlN9OyBkbworCQlpZiBbIC1lICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LmEgXTsgdGhlbgorCQkJbG4gLXMgbGliYm9vc3RfJHtsaWJ9LmEgJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0tbXQuYQorCQlmaQorCQlpZiBbIC1lICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LnNvIF07IHRoZW4KKwkJCWxuIC1zIGxpYmJvb3N0XyR7bGlifS5zbyAke0R9JHtsaWJkaXJ9L2xpYmJvb3N0XyR7bGlifS1tdC5zbworCQlmaQorCWRvbmUKKworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9hcm0taW50cmluc2ljcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2FybS1pbnRyaW5zaWNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlODVjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9hcm0taW50cmluc2ljcy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKzgvMTcvMjAxMCAtIHJlYmFzZWQgdG8gMS40NCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X3N5bmMuaHBwIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAKK2luZGV4IGI2MzU5YjUuLjc4YjFjYzIgMTAwNjQ0CistLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcAorKysrIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAKK0BAIC0zMywxNyArMzMsNDYgQEAgcHVibGljOgorIAorICAgICBsb25nIG9wZXJhdG9yKysoKQorICAgICB7CisrI2lmZGVmIF9fQVJNX0FSQ0hfN0FfXworKyAgICAgICBpbnQgdjEsIHRtcDsKKysgICAgICAgYXNtIHZvbGF0aWxlICgiMTogICAgICAgICAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImxkcmV4ICAgJTAsICUxICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJhZGQgICAgICUwICwlMCwgIzEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3RyZXggICAlMiwgJTAsICUxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImNtcCAgICAgJTIsICMwICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJibmUgICAgIDFiICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiICh2MSksICIrUSIodmFsdWVfKSwgIj0mciIodG1wKQorKyAgICAgICAgICAgICAgICAgICAgKTsKKysjZWxzZQorICAgICAgICAgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoKCAmdmFsdWVfLCAxICk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgICAgbG9uZyBvcGVyYXRvci0tKCkKKyAgICAgeworKyNpZmRlZiBfX0FSTV9BUkNIXzdBX18KKysgICAgICAgaW50IHYxLCB0bXA7CisrICAgICAgIGFzbSB2b2xhdGlsZSAoIjE6ICAgICAgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJsZHJleCAgICUwLCAlMSAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3ViICAgICAlMCAsJTAsICMxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgInN0cmV4ICAgJTIsICUwLCAlMSBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJjbXAgICAgICUyLCAjMCAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiYm5lICAgICAxYiAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAodjEpLCAiK1EiKHZhbHVlXyksICI9JnIiKHRtcCkKKysgICAgICAgICAgICAgICAgICAgICk7CisrICAgICAgIHJldHVybiB2YWx1ZV87CisrI2Vsc2UKKyAgICAgICAgIHJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaCggJnZhbHVlXywgLTEgKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgICBvcGVyYXRvciBsb25nKCkgY29uc3QKKyAgICAgeworKyNpZiBfX0FSTV9BUkNIXzdBX18KKysgICAgICAgIHJldHVybiB2YWx1ZV87CisrI2Vsc2UKKyAgICAgICAgIHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZCggJnZhbHVlXywgMCApOworKyNlbmRpZgorICAgICB9CisgCisgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0XzEuNTguMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0XzEuNTguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDlkNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiCkBAIC0wLDAgKzEsNiBAQAoraW5jbHVkZSBib29zdC0ke1BWfS5pbmMKK2luY2x1ZGUgYm9vc3QuaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vYXJtLWludHJpbnNpY3MucGF0Y2ggXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMS1taXBzMS1maXgtYWRkZWQtZ2NjLmphbS13YXMtcGFzc2luZy10aGUtb3B0aW9ucy1tMzItLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMS1taXBzMS1maXgtYWRkZWQtZ2NjLmphbS13YXMtcGFzc2luZy10aGUtb3B0aW9ucy1tMzItLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWI0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4MTdhZWQwZDc1NWJmOGMwYmE0ZWY2YTc3ZDQxNTM4ZTUwYjU3MWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogY2xheW1vcmUgPGNhcmxvc21mLnB0QGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDI6Mjg6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIG1pcHMxIGZpeCBhZGRlZCBnY2MuamFtIHdhcyBwYXNzaW5nIHRoZSBvcHRpb25zIC1tMzIgYW5kCisgLW02NCB0byBtaXBzIGNyb3NzLWNvbXBpbGVycywgd2hlbiB0aG9zZSBkbyBub3QgdXNlCisgc3VjaCBvcHRpb25zIFRoaXMgbW9kaWZpY2F0aW9uIHNvbHZlcyBpdCBieSBhZGRpbmcgbWlwcworIGFzIGFuIGV4Y2VwdGlvbgorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgTS4gRmVycmVpcmEgY2FybG9zbWYucHRAZ21haWwuY29tCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyB0b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK2luZGV4IGRiMDQ1MzQuLmVmZjk1YWUgMTAwNjQ0CistLS0gYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorKysrIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK0BAIC00NTEsNyArNDUxLDcgQEAgcnVsZSBzZXR1cC1hZGRyZXNzLW1vZGVsICggdGFyZ2V0cyAqIDogc291cmNlcyAqIDogcHJvcGVydGllcyAqICkKKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBsb2NhbCBhcmNoID0gWyBmZWF0dXJlLmdldC12YWx1ZXMgYXJjaGl0ZWN0dXJlIDogJChwcm9wZXJ0aWVzKSBdIDsKKy0gICAgICAgICAgICBpZiAkKGFyY2gpICE9IGFybQorKyAgICAgICAgICAgIGlmICQoYXJjaCkgIT0gYXJtICYmICQoYXJjaCkgIT0gbWlwczEKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGlmICQobW9kZWwpID0gMzIKKyAgICAgICAgICAgICAgICAgeworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDItRG9uLXQtcGFzcy1tMzItbTY0LXdoZXJlLWl0LXMtbm90LXN1cHBvcnRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDItRG9uLXQtcGFzcy1tMzItbTY0LXdoZXJlLWl0LXMtbm90LXN1cHBvcnRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2Y3ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gZjgyNTYzNGE1NmIxMTlkZmE5ZDcxMjExOWE2NjI3OWNjNzYzNTk3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KPUMzPUI2cmc9MjBLcmF1c2U/PSA8am9lcmcua3JhdXNlQGVtYmVkZGVkLnJvY2tzPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE0OjI0OjAyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBEb24ndCBwYXNzIC1tMzIvLW02NCB3aGVyZSBpdCdzIG5vdCBzdXBwb3J0ZWQuCisKK09ubHkgUG93ZXJQQywgU1BBUkMsIGFuZCB4ODYgZG8gc3VwcG9ydCB0aGUgLW0zMiBhbmQgLW02NCBjb21waWxlciBvcHRpb25zIFsxXS4KKworUmF0aGVyIHRoZW4gZXhjbHVkaW5nIGFsbCBhcmNoaXRlY3R1cmVzIG5vdCBzdXBwb3J0aW5nIHRoZXNlIG9wdGlvbnMgYXMgaXQgaXMKK2RvbmUgaW4gY29tbWl0IGMwNjM0MzQxZDllZTJjMDJkM2E1NWM5MWRhZmI5ODhhZmMwNjZjNDkgWzJdLCBpbmNsdWRlIGFsbAorYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIHN1cHBvcnQgdGhlbS4KKworVGhpcyB3aWxsIGZpeCBidWlsZGluZyBCb29zdCBmb3IgdGhlIFN1cGVySCBhcmNoaXRlY3R1cmUgd2l0aCBCdWlsZHJvb3QgWzNdLgorCitbMV0gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PcHRpb24tU3VtbWFyeS5odG1sCitbMl0gaHR0cHM6Ly9naXRodWIuY29tL2Jvb3N0b3JnL2J1aWxkL2NvbW1pdC9jMDYzNDM0MWQ5ZWUyYzAyZDNhNTVjOTFkYWZiOTg4YWZjMDY2YzQ5CitbM10gaHR0cDovL2F1dG9idWlsZC5idWlsZHJvb3QubmV0L3Jlc3VsdHMvY2NkL2NjZDVjODM5NjMwMzJiYTQ5YjE2MjdiMWRmZjM5ZTM0YTk0ODY5NDMvYnVpbGQtZW5kLmxvZworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitpbmRleCBlZmY5NWFlLi4yZjZhZjkzIDEwMDY0NAorLS0tIGEvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KKysrKyBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitAQCAtNDUxLDcgKzQ1MSw3IEBAIHJ1bGUgc2V0dXAtYWRkcmVzcy1tb2RlbCAoIHRhcmdldHMgKiA6IHNvdXJjZXMgKiA6IHByb3BlcnRpZXMgKiApCisgICAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICAgbG9jYWwgYXJjaCA9IFsgZmVhdHVyZS5nZXQtdmFsdWVzIGFyY2hpdGVjdHVyZSA6ICQocHJvcGVydGllcykgXSA7CistICAgICAgICAgICAgaWYgJChhcmNoKSAhPSBhcm0gJiYgJChhcmNoKSAhPSBtaXBzMQorKyAgICAgICAgICAgIGlmICQoYXJjaCkgPSBwb3dlciB8fCAkKGFyY2gpID0gc3BhcmMgfHwgJChhcmNoKSA9IHg4NgorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgaWYgJChtb2RlbCkgPSAzMgorICAgICAgICAgICAgICAgICB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzL2JqYW0tbmF0aXZlLWJ1aWxkLWJqYW0uZGVidWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4YjdlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzL2JqYW0tbmF0aXZlLWJ1aWxkLWJqYW0uZGVidWcucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA2MTlhZGEzMTRhYjI2YzBjOWNiZmU1NzAyY2Q5YzBjYWE4ZjY0MTVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDMgQXVnIDIwMTUgMTc6MTI6MzMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmphbS1uYXRpdmU6IGJ1aWxkIGJqYW0uZGVidWcKKworYmphbSBpcyBzdHJpcHBlZCBieSBkZWZhdWx0LCB0aGlzIGNhdXNlcyBRQSB3YXJuaW5nIHdoaWxlIHN0cmlwcGluZyBpdAorZnJvbSBkb19wb3B1bGF0ZV9zeXNyb290KCk6CisKKyAgV0FSTklORzogRmlsZSAnLi4uL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9iamFtJyBcCisgICAgZnJvbSBiamFtLW5hdGl2ZSB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgXAorICAgIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchCisKK1RoZSBKQU0gc2NyaXB0cyBhbGxvdyB0byBidWlsZCB1bnN0cmlwcGVkIHZlcnNpb24gd2l0aCAnLS1kZWJ1ZycuIEp1c3QKK2J1aWxkIGFuZCBpbnN0YWxsIHRoZSBiamFtLmRlYnVnIHRvIHN0b3AgYmphbSBmcm9tIGJlaW5nIHN0cmlwcGVkIGluCitjb21waWxlIHN0ZXAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBib290c3RyYXAuc2ggICAgICAgICAgICAgICAgICAgIHwgMSArCisgdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9vdHN0cmFwLnNoIGIvYm9vdHN0cmFwLnNoCitpbmRleCA5OGNmODhiLi41NDY5MGFhIDEwMDc1NQorLS0tIGEvYm9vdHN0cmFwLnNoCisrKysgYi9ib290c3RyYXAuc2gKK0BAIC0yMjgsNiArMjI4LDcgQEAgaWYgdGVzdCAieCRCSkFNIiA9IHg7IHRoZW4KKyAgIGVjaG8gInRvb2xzL2J1aWxkL3NyYy9lbmdpbmUvJGFyY2gvYjIiCisgICBjcCAiJEJKQU0iIC4KKyAgIGNwICIkbXlfZGlyL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvJGFyY2gvYmphbSIgLgorKyAgY3AgIiRteV9kaXIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS8ke2FyY2h9LmRlYnVnL2JqYW0iIGJqYW0uZGVidWcKKyAKKyBmaQorIAorZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2ggYi90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoCitpbmRleCA2ZGJjNzA2Li5jNjlmZGM3IDEwMDc1NQorLS0tIGEvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaAorKysrIGIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaAorQEAgLTMxMiw1ICszMTIsNSBAQCBpZiB0ZXN0IC14ICIuL2Jvb3RzdHJhcC9qYW0wIiA7IHRoZW4KKyAgICAgaWYgdGVzdCAiJHtCSkFNX1VQREFURX0iICE9ICJ1cGRhdGUiIDsgdGhlbgorICAgICAgICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIgY2xlYW4KKyAgICAgZmkKKy0gICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIKKysgICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIgLS1kZWJ1ZworIGZpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0YjI4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2NhLWNlcnRpZmljYXRlcyBpcyBhIHBhY2thZ2UgZnJvbSBEZWJpYW4sIGJ1dCBzb21lIGhvc3QgZGlzdHJvcyBzdWNoIGFzIEZlZG9yYQoraGF2ZSBhIGxlYW5lciBydW4tcGFydHMgcHJvdmlkZWQgYnkgY3JvbiB3aGljaCBkb2Vzbid0IHN1cHBvcnQgLS12ZXJib3NlIG9yIHRoZQorIC0tIHNlcGFyYXRvciBiZXR3ZWVuIGFyZ3VtZW50cyBhbmQgcGF0aHMuCisKK1RoaXMgc29sdmVzIGVycm9ycyBzdWNoIGFzCisKK3wgUnVubmluZyBob29rcyBpbiBbLi4uXS9yb290ZnMvZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZC4uLgorfCBbLi4uXS91c3Ivc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzOiBsaW5lIDE5NDogTm90OiBjb21tYW5kIG5vdCBmb3VuZAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CistLS0KKyBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTE5MSw5ICsxOTEsNyBAQCBpZiBbIC1kICIkSE9PS1NESVIiIF0KKyB0aGVuCisgCisgICBlY2hvICJSdW5uaW5nIGhvb2tzIGluICRIT09LU0RJUi4uLiIKKy0gIFZFUkJPU0VfQVJHPQorLSAgWyAiJHZlcmJvc2UiID0gMCBdIHx8IFZFUkJPU0VfQVJHPSItLXZlcmJvc2UiCistICBldmFsIHJ1bi1wYXJ0cyAiJFZFUkJPU0VfQVJHIiAtLXRlc3QgLS0gIiRIT09LU0RJUiIgfCB3aGlsZSByZWFkIGhvb2sKKysgIGV2YWwgcnVuLXBhcnRzIC0tdGVzdCAtLSAiJEhPT0tTRElSIiB8IHdoaWxlIHJlYWQgaG9vaworICAgZG8KKyAgICAgKCBjYXQgIiRBRERFRCIKKyAgICAgICBjYXQgIiRSRU1PVkVEIiApIHwgIiRob29rIiB8fCBlY2hvICJFOiAkaG9vayBleGl0ZWQgd2l0aCBjb2RlICQ/LiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjAyNzIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDExMWU5MDVmZTkzMWRhMWEzODAwYWNjZmM2NzVjYzAxYzhlZTA4MGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBVbGYgU2FtdWVsc3NvbiA8dWxmQGVtYWdpaS5jb20+CitEYXRlOiBUdWUsIDI4IEZlYiAyMDEyIDA2OjQyOjU4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IHJlbW92ZSBjIHJlaGFzaAorCitVcGRhdGVkIGVhcmxpZXIgcGF0Y2ggdG8gYXBwbHkgY2xlYW4gb24gMjAxMi0wMi0xMgorU2lnbmVkLW9mZi1ieTogVWxmIFNhbXVlbHNzb24gPHVsZkBlbWFnaWkuY29tPgorLS0tCisgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgICAyMCArKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgYi9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK2luZGV4IDUzNzU5NTAuLmM1NjdlM2QgMTAwNzU1CistLS0gYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBiL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTEzMiwxNiArMTMyLDE2IEBAIHJtIC1mICIkQ0VSVEJVTkRMRSIKKyBBRERFRF9DTlQ9JCh3YyAtbCA8ICIkQURERUQiKQorIFJFTU9WRURfQ05UPSQod2MgLWwgPCAiJFJFTU9WRUQiKQorCistaWYgWyAiJEFEREVEX0NOVCIgLWd0IDAgXSB8fCBbICIkUkVNT1ZFRF9DTlQiIC1ndCAwIF0KKy10aGVuCistICAjIG9ubHkgcnVuIGlmIHNldCBvZiBmaWxlcyBoYXMgY2hhbmdlZAorLSAgaWYgWyAiJHZlcmJvc2UiID0gMCBdCistICB0aGVuCistICAgIGNfcmVoYXNoIC4gPiAvZGV2L251bGwKKy0gIGVsc2UKKy0gICAgY19yZWhhc2ggLgorLSAgZmkKKy1maQorKyNpZiBbICIkQURERURfQ05UIiAtZ3QgMCBdIHx8IFsgIiRSRU1PVkVEX0NOVCIgLWd0IDAgXQorKyN0aGVuCisrIyAgIyBvbmx5IHJ1biBpZiBzZXQgb2YgZmlsZXMgaGFzIGNoYW5nZWQKKysjICBpZiBbICIkdmVyYm9zZSIgPSAwIF0KKysjICB0aGVuCisrIyAgICBjX3JlaGFzaCAuID4gL2Rldi9udWxsCisrIyAgZWxzZQorKyMgICAgY19yZWhhc2ggLgorKyMgIGZpCisrI2ZpCisKKyBjaG1vZCAwNjQ0ICIkVEVNUEJVTkRMRSIKKyBtdiAtZiAiJFRFTVBCVU5ETEUiICIkQ0VSVEJVTkRMRSIKKy0tCisxLjcuNC4xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MmI0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRnJvbSA3MjRjYjE1M2NhMGY2MDdmYjM4YjNhOGRiM2ViYjI3NDI2MDFjZDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KK0RhdGU6IFR1ZSwgMTkgTWFyIDIwMTMgMTc6MTQ6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IHVzZSAkU1lTUk9PVAorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorLS0tCisgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgICAxNCArKysrKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTI0LDEyICsyNCwxMiBAQAorIHZlcmJvc2U9MAorIGZyZXNoPTAKKyBkZWZhdWx0PTAKKy1DRVJUU0NPTkY9L2V0Yy9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorLUNFUlRTRElSPS91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzCistTE9DQUxDRVJUU0RJUj0vdXNyL2xvY2FsL3NoYXJlL2NhLWNlcnRpZmljYXRlcworK0NFUlRTQ09ORj0kU1lTUk9PVC9ldGMvY2EtY2VydGlmaWNhdGVzLmNvbmYKKytDRVJUU0RJUj0kU1lTUk9PVC91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzCisrTE9DQUxDRVJUU0RJUj0kU1lTUk9PVC91c3IvbG9jYWwvc2hhcmUvY2EtY2VydGlmaWNhdGVzCisgQ0VSVEJVTkRMRT1jYS1jZXJ0aWZpY2F0ZXMuY3J0CistRVRDQ0VSVFNESVI9L2V0Yy9zc2wvY2VydHMKKy1IT09LU0RJUj0vZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZAorK0VUQ0NFUlRTRElSPSRTWVNST09UL2V0Yy9zc2wvY2VydHMKKytIT09LU0RJUj0kU1lTUk9PVC9ldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisgCisgd2hpbGUgWyAkIyAtZ3QgMCBdOworIGRvCitAQCAtOTIsOSArOTIsOSBAQCBhZGQoKSB7CisgICBQRU09IiRFVENDRVJUU0RJUi8kKGJhc2VuYW1lICIkQ0VSVCIgLmNydCB8IHNlZCAtZSAncy8gL18vZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWygpXS89L2cnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLywvXy9nJykucGVtIgorLSAgaWYgISB0ZXN0IC1lICIkUEVNIiB8fCBbICIkKHJlYWRsaW5rICIkUEVNIikiICE9ICIkQ0VSVCIgXQorKyAgaWYgISB0ZXN0IC1lICIkUEVNIiB8fCBbICIkKHJlYWRsaW5rICIkUEVNIikiICE9ICIke0NFUlQjIyRTWVNST09UfSIgXQorICAgdGhlbgorLSAgICBsbiAtc2YgIiRDRVJUIiAiJFBFTSIKKysgICAgbG4gLXNmICIke0NFUlQjIyRTWVNST09UfSIgIiRQRU0iCisgICAgIGVjaG8gIiskUEVNIiA+PiAiJEFEREVEIgorICAgZmkKKyAgICMgQWRkIHRyYWlsaW5nIG5ld2xpbmUgdG8gY2VydGlmaWNhdGUsIGlmIGl0IGlzIG1pc3NpbmcgKCM2MzU1NzApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL2RlZmF1bHQtc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvZGVmYXVsdC1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjA3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL2RlZmF1bHQtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordXBkYXRlLWNhLWNlcnRpZmljYXRlczogZmluZCBTWVNST09UIHJlbGF0aXZlIHRvIGl0cyBvd24gbG9jYXRpb24KKworVGhpcyBtYWtlcyB0aGUgc2NyaXB0IHJlbG9jYXRhYmxlLgorCitJbmRleDogZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworKysrIGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK0BAIC02Niw2ICs2NiwzOSBAQCBkbworICAgc2hpZnQKKyBkb25lCisgCisraWYgWyAteiAiJFNZU1JPT1QiIF07IHRoZW4KKysgIGxvY2FsX3doaWNoICgpIHsKKysgICAgaWYgWyAkIyAtbHQgMSBdOyB0aGVuCisrICAgICAgcmV0dXJuIDEKKysgICAgZmkKKysKKysgICAgKAorKyAgICAgIElGUz06CisrICAgICAgZm9yIGVudHJ5IGluICRQQVRIOyBkbworKyAgICAgICAgaWYgWyAteCAiJGVudHJ5LyQxIiBdOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRlbnRyeS8kMSIKKysgICAgICAgICAgZXhpdCAwCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBleGl0IDEKKysgICAgKQorKyAgfQorKworKyAgY2FzZSAiJDAiIGluCisrICAgICovKikKKysgICAgICBzYmluZGlyPSQoY2QgJHswJS8qfSAmJiBwd2QpCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzYmluZGlyPSQoY2QgJChkaXJuYW1lICQobG9jYWxfd2hpY2ggJDApKSAmJiBwd2QpCisrICAgICAgOzsKKysgIGVzYWMKKysgIHByZWZpeD0ke3NiaW5kaXIlLyp9CisrICBTWVNST09UPSR7cHJlZml4JS8qfQorKyAgaWYgWyAhIC1kICIkU1lTUk9PVC91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzIiBdOyB0aGVuCisrICAgIFNZU1JPT1Q9CisrICBmaQorK2ZpCisrCisgaWYgWyAhIC1zICIkQ0VSVFNDT05GIiBdCisgdGhlbgorICAgZnJlc2g9MQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9zYmluZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9zYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTNmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0xldCB1cyBhbHRlciB0aGUgaW5zdGFsbCBkZXN0aW5hdGlvbiBvZiB0aGUgc2NyaXB0IHZpYSBTQklORElSCisKKy0tLSBjYS1jZXJ0aWZpY2F0ZXMtMjAxMzAxMTkub3JpZy9zYmluL01ha2VmaWxlCisrKysgY2EtY2VydGlmaWNhdGVzLTIwMTMwMTE5L3NiaW4vTWFrZWZpbGUKK0BAIC0zLDkgKzMsMTIgQEAKKyAjCisgIworCisrU0JJTkRJUiA9IC91c3Ivc2JpbgorKworIGFsbDoKKworIGNsZWFuOgorCisgaW5zdGFsbDoKKy0JaW5zdGFsbCAtbTc1NSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzICQoREVTVERJUikvdXNyL3NiaW4vCisrCWluc3RhbGwgLWQgJChERVNURElSKSQoU0JJTkRJUikKKysJaW5zdGFsbCAtbTc1NSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzICQoREVTVERJUikkKFNCSU5ESVIpLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE1MDQyNi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNTA0MjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2ZTNkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNTA0MjYuYmIKQEAgLTAsMCArMSw4MCBAQAorU1VNTUFSWSA9ICJDb21tb24gQ0EgY2VydGlmaWNhdGVzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIFBFTSBmaWxlcyBvZiBDQSBjZXJ0aWZpY2F0ZXMgdG8gYWxsb3cgXAorU1NMLWJhc2VkIGFwcGxpY2F0aW9ucyB0byBjaGVjayBmb3IgdGhlIGF1dGhlbnRpY2l0eSBvZiBTU0wgY29ubmVjdGlvbnMuIFwKK1RoaXMgZGVyaXZlZCBmcm9tIERlYmlhbidzIENBIENlcnRpZmljYXRlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9zaWQvY2EtY2VydGlmaWNhdGVzIgorU0VDVElPTiA9ICJtaXNjIgorTElDRU5TRSA9ICJHUEwtMi4wKyAmIE1QTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT00OGQyYmFmOTc5ODY5OTllNzc2YjQzYzhkZDllMGM1YSIKKworIyBUaGlzIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIHJ1biB0aGUgcG9zdGluc3QgYXQgaW1hZ2UgY3JlYXRpb24gdGltZQorREVQRU5EUyA9ICJjYS1jZXJ0aWZpY2F0ZXMtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCisjIHRhZzogZGViaWFuLzIwMTUwNDI2ICsgMgorU1JDUkVWID0gImQ0NzkwZDI4MzJhYWFjOTE1MmY0NTBlMDY2NjE1MTEwNjc1OTIyMjciCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC9jYS1jZXJ0aWZpY2F0ZXMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0LXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2JpbmRpci5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhbGxhcmNoCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ0NFUlRTRElSPSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzJyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgb2VfcnVubWFrZSBjbGVhbgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyBcCisgICAgICAgICAgICAgICAke0R9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMgXAorICAgICAgICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOAorICAgIGluc3RhbGwgLW0gMDY0NCBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgeworICAgICAgICBlY2hvICIjIExpbmVzIHN0YXJ0aW5nIHdpdGggIyB3aWxsIGJlIGlnbm9yZWQiCisgICAgICAgIGVjaG8gIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAhIHdpbGwgcmVtb3ZlIGNlcnRpZmljYXRlIG9uIG5leHQgdXBkYXRlIgorICAgICAgICBlY2hvICIjIgorICAgICAgICBmaW5kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyAtdHlwZSBmIC1uYW1lICcqLmNydCcgfCBcCisgICAgICAgICAgICBzZWQgJ3MsXiR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcy8sLCcKKyAgICB9ID4ke0R9JHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAtZSAncywvZXRjLywke3N5c2NvbmZkaXJ9LywnIFwKKyAgICAgICAgICAgLWUgJ3MsL3Vzci9zaGFyZS8sJHtkYXRhZGlyfS8sJyBcCisgICAgICAgICAgIC1lICdzLC91c3IvbG9jYWwsJHtwcmVmaXh9L2xvY2FsLCcgXAorICAgICAgICAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzIFwKKyAgICAgICAgJHtEfSR7bWFuZGlyfS9tYW44L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIFNZU1JPT1Q9IiREIiB1cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMuY29uZiIKKworIyBQb3N0aW5zdHMgZG9uJ3Qgc2VlbSB0byBiZSBydW4gZm9yIG5hdGl2ZXNkayBwYWNrYWdlcyB3aGVuIHBvcHVsYXRpbmcgU0RLcy4KK0NPTkZGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKyAgICBTWVNST09UPSIke0R9JHtTREtQQVRITkFUSVZFfSIgdXBkYXRlLWNhLWNlcnRpZmljYXRlcworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIFNZU1JPT1Q9IiR7RH0ke2Jhc2VfcHJlZml4fSIgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworfQorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L2FkZC1wb2xraXQtY29uZmlndXJlLWFyZ3VtZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L2FkZC1wb2xraXQtY29uZmlndXJlLWFyZ3VtZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkODc5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBDb25zb2xlS2l0LTAuNC42Lm9yaWcvY29uZmlndXJlLmFjCisrKysgQ29uc29sZUtpdC0wLjQuNi9jb25maWd1cmUuYWMKK0BAIC01NiwxMCArNTYsMjQgQEAgUEtHX0NIRUNLX01PRFVMRVMoQ09OU09MRV9LSVQsCisgICBndGhyZWFkLTIuMCA+PSAkR0xJQl9SRVFVSVJFRF9WRVJTSU9OCisgKQorCistUEtHX0NIRUNLX01PRFVMRVMoUE9MS0lULAorLSAgcG9sa2l0LWdvYmplY3QtMSA+PSAkUE9MS0lUX1JFUVVJUkVEX1ZFUlNJT04sCistICBoYXZlX3BvbGtpdD15ZXMsCistICBoYXZlX3BvbGtpdD1ubykKKytBQ19BUkdfV0lUSChbcG9sa2l0XSwKKysgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBvbGtpdF0sCisrICAgIFtzdXBwb3J0IFBvbGljeUtpdCBAPDpAZGVmYXVsdD1jaGVja0A6PkBdKV0sCisrICBbXSwKKysgIFt3aXRoX3BvbGtpdD1jaGVja10pCisrCisrQVNfSUYoW3Rlc3QgIngkd2l0aF9wb2xraXQiICE9IHhub10sCisrICBbUEtHX0NIRUNLX01PRFVMRVMoUE9MS0lULAorKyAgICAgcG9sa2l0LWdvYmplY3QtMSA+PSAkUE9MS0lUX1JFUVVJUkVEX1ZFUlNJT04sCisrICAgICBoYXZlX3BvbGtpdD15ZXMsCisrICAgICBbaWYgdGVzdCAieCR3aXRoX3BvbGtpdCIgIT0geGNoZWNrOyB0aGVuCisrICAgICAgIEFDX01TR19GQUlMVVJFKAorKyAgICAgICAgIFstLXdpdGgtcG9sa2l0IHdhcyBnaXZlbiwgYnV0IHRlc3QgZm9yIHBvbGtpdCBmYWlsZWRdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGhhdmVfcG9sa2l0PW5vCisrICAgICAgZmkKKysgICAgIF0pXSkKKysKKyBpZiB0ZXN0ICJ4JGhhdmVfcG9sa2l0IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgQUNfREVGSU5FKEhBVkVfUE9MS0lULCBbXSwgW0RlZmluZSBpZiB3ZSBoYXZlIHBvbGtpdF0pCisgZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9zZXBidWlsZGZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9zZXBidWlsZGZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmY5YjljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0ZpeCBidWlsZHMgaW4gdGhlIGNhc2Ugb2Ygc2VwcmF0ZSBzb3VyY2UgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitSUCAyMDEzLzQvMTcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBwYW0tY2stY29ubmVjdG9yL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZWtpdC9wYW0tY2stY29ubmVjdG9yLm9yaWcvTWFrZWZpbGUuYW0JMjAxMC0wOS0wMyAxMzo1NDozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xla2l0L3BhbS1jay1jb25uZWN0b3IvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAwOTowNjo0OS4wOTM1MjQ5MTggKzAwMDAKK0BAIC00LDcgKzQsNyBAQAorIAorIElOQ0xVREVTID0gCQkJCQlcCisgCSQoTElCREJVU19DRkxBR1MpCQkJXAorLQktSSQodG9wX2J1aWxkZGlyKS9saWJjay1jb25uZWN0b3IJXAorKwktSSQodG9wX3NyY2RpcikvbGliY2stY29ubmVjdG9yCVwKKyAJJChOVUxMKQorIAorIHBhbWxpYmRpciA9ICQoUEFNX01PRFVMRV9ESVIpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXRfMC40LjYuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXRfMC40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhODkyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkZyYW1ld29yayBmb3IgZGVmaW5pbmcgYW5kIHRyYWNraW5nIHVzZXJzLCBsb2dpbiBzZXNzaW9ucywgYW5kIHNlYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9Db25zb2xlS2l0IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2J1Z2xpc3QuY2dpP3F1ZXJ5X2Zvcm1hdD1zcGVjaWZpYyZwcm9kdWN0PUNvbnNvbGVLaXQiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTIxO21kNT0wYTk5NGUwOTc2OTc4MDIyMDE2MzI1NWQ4ZjkwNzFjMyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZGJ1cyBkYnVzLWdsaWIgdmlydHVhbC9saWJ4MTEiCitSREVQRU5EU18ke1BOfSArPSAiYmFzZS1maWxlcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL0NvbnNvbGVLaXQvZGlzdC9Db25zb2xlS2l0LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcG9sa2l0LWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MTE3OTJiNGQ2MTYyNTNhNWJkZWM5MTc1ZjhiNzY3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDFkMTdlMDZmODAwNTk1ODlmYmVlZmU5NmFkMDdiY2M1NjRjNDllNjU1MTZkYTFjYWY5NzUxNDY0NzU1NjVjIgorCitTID0gIiR7V09SS0RJUn0vQ29uc29sZUtpdC0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbS1tb2R1bGUgLS13aXRoLXBhbS1tb2R1bGUtZGlyPSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LC0tZGlzYWJsZS1wYW0tbW9kdWxlLGxpYnBhbSIKK1BBQ0tBR0VDT05GSUdbcG9saWN5a2l0XSA9ICItLXdpdGgtcG9sa2l0LC0td2l0aG91dC1wb2xraXQscG9sa2l0IgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSIKKworRklMRVNfJHtQTn0gKz0gIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL0NvbnNvbGVLaXQgJHtleGVjX3ByZWZpeH0vbGliL0NvbnNvbGVLaXQgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9Db25zb2xlS2l0ICAke3N5c3RlbWRfdW5pdGRpcn0gJHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xICR7ZGF0YWRpcn0vUG9saWN5S2l0ICR7ZGF0YWRpcn0vcG9sa2l0KiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnIgorCitQQUNLQUdFUyA9KyAicGFtLXBsdWdpbi1jay1jb25uZWN0b3IiCitGSUxFU19wYW0tcGx1Z2luLWNrLWNvbm5lY3RvciArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyIKK1JERVBFTkRTX3BhbS1wbHVnaW4tY2stY29ubmVjdG9yICs9ICIke1BOfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgJHtsb2NhbHN0YXRlZGlyfS9sb2cvQ29uc29sZUtpdCAtIC0gLSAtIiBcCisJCQk+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvY29uc29sZWtpdC5jb25mCisJZmkKKworCSMgUmVtb3ZlIC92YXIvcnVuIGZyb20gcGFja2FnZSBhcyBjb25zb2xlLWtpdC1kYWVtb24gd2lsbCBwb3B1bGF0ZSBpdCBvbiBzdGFydHVwCisJcm0gLWZyICIke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4iCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1kYnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1kYnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3NTU5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitjcmVhdGVyZXBvOiBJbXBsZW1lbnQgLS1kYnBhdGggY29tbWFuZCBsaW5lIG9wdGlvbgorCistLWRicGF0aCBvcHRpb24gYWxsb3dzIHRvIHNwZWNpZnkgcGF0aCB0byB0aGUgZGlyZWN0b3J5Cit3aXRoIHJwbSBkYXRhYmFzZS4gQnkgZGVmYXVsdCBjcmVhdGVyZXBvIHVzZXMgb3IgY3JlYXRlcworcnBtIGRhdGFiYXNlIGluIC92YXIvbGliL3JwbS8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9nZW5wa2dtZXRhZGF0YS5weSAyMDE1LTAzLTMwIDIyOjE4OjE5LjkwNDAwMDAwMCArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2dlbnBrZ21ldGFkYXRhLnB5IDIwMTUtMDMtMzAgMjI6Mjg6NDkuMjA4MDAwMDAwICswMzAwCitAQCAtNjUsNiArNjUsNyBAQAorICAgICAgLXAsIC0tcHJldHR5ID0gb3V0cHV0IHhtbCBmaWxlcyBpbiBwcmV0dHkgZm9ybWF0LgorICAgICAgLS11cGRhdGUgPSB1cGRhdGUgZXhpc3RpbmcgbWV0YWRhdGEgKGlmIHByZXNlbnQpCisgICAgICAtZCwgLS1kYXRhYmFzZSA9IGdlbmVyYXRlIHRoZSBzcWxpdGUgZGF0YWJhc2VzLgorKyAgICAgLS1kYnBhdGggPGRpcj4gPSBzcGVjaWZ5IHBhdGggdG8gcnBtIGRiIGRpcmVjdG9yeS4KKyAgICAgIiIiKQorIAorICAgICBzeXMuZXhpdChyZXR2YWwpCitAQCAtNzIsMTAgKzczLDEzIEBACisgY2xhc3MgTWV0YURhdGFHZW5lcmF0b3I6CisgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzKToKKyAgICAgICAgIHNlbGYuY21kcyA9IGNtZHMKKy0gICAgICAgIHNlbGYudHMgPSBycG0uVHJhbnNhY3Rpb25TZXQoKQorICAgICAgICAgc2VsZi5wa2djb3VudCA9IDAKKyAgICAgICAgIHNlbGYuZmlsZXMgPSBbXQorIAorKyAgICAgICAgaWYgc2VsZi5jbWRzWydkYnBhdGgnXToKKysgICAgICAgICAgICBycG0uYWRkTWFjcm8oIl9kYnBhdGgiLCBzZWxmLmNtZHNbJ2RicGF0aCddKQorKyAgICAgICAgc2VsZi50cyA9IHJwbS5UcmFuc2FjdGlvblNldCgpCisrCisgICAgIGRlZiBfb3NfcGF0aF93YWxrKHNlbGYsIHRvcCwgZnVuYywgYXJnKToKKyAgICAgICAgICIiIkRpcmVjdG9yeSB0cmVlIHdhbGsgd2l0aCBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICAgICAgICBjb3B5IG9mIG9zLnBhdGgud2FsaywgZml4ZXMgdGhlIGxpbmsvc3RhdGluZyBwcm9ibGVtCitAQCAtNDM1LDYgKzQzOSw3IEBACisgICAgIGNtZHNbJ2Rpci1wYXR0ZXJuLW1hdGNoJ10gPSBbJy4qYmluXC8uKicsICdeXC9ldGNcLy4qJ10KKyAgICAgY21kc1snc2tpcC1zeW1saW5rcyddID0gRmFsc2UKKyAgICAgY21kc1sncGtnbGlzdCddID0gW10KKysgICAgY21kc1snZGJwYXRoJ10gPSBOb25lCisgCisgICAgIHRyeToKKyAgICAgICAgIGdvcHRzLCBhcmdzbGVmdCA9IGdldG9wdC5nZXRvcHQoYXJncywgJ3BocVZ2bmRnOnM6eDp1OmM6bzpDU2k6JywgWydoZWxwJywgJ2V4Y2x1ZGU9JywKK0BAIC00NDIsNyArNDQ3LDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFzZXVybD0nLCAnZ3JvdXBmaWxlPScsICdjaGVja3N1bT0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJywgJ3ByZXR0eScsICdzcGxpdCcsICdvdXRwdXRkaXI9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9lcG9jaCcsICdjaGVja3RzJywgJ2RhdGFiYXNlJywgJ3VwZGF0ZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXAtc3ltbGlua3MnLCAncGtnbGlzdD0nXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tpcC1zeW1saW5rcycsICdwa2dsaXN0PScsICdkYnBhdGg9J10pCisgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIGU6CisgICAgICAgICBlcnJvcnByaW50KF8oJ09wdGlvbnMgRXJyb3I6ICVzLicpICUgZSkKKyAgICAgICAgIHVzYWdlKCkKK0BAIC01MTYsNiArNTIxLDggQEAKKyAgICAgICAgICAgICAgICAgY21kc1snc2tpcC1zeW1saW5rcyddID0gVHJ1ZQorICAgICAgICAgICAgIGVsaWYgYXJnIGluIFsnLWknLCAnLS1wa2dsaXN0J106CisgICAgICAgICAgICAgICAgIGNtZHNbJ3BrZ2xpc3QnXSA9IGEKKysgICAgICAgICAgICBlbGlmIGFyZyA9PSAnLS1kYnBhdGgnOgorKyAgICAgICAgICAgICAgICBjbWRzWydkYnBhdGgnXSA9IG9zLnBhdGgucmVhbHBhdGgoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgIGVycm9ycHJpbnQoXygnT3B0aW9ucyBFcnJvcjogJXMnKSAlIGUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1ycG01NDkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vY3JlYXRlcmVwby1ycG01NDkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3MjAwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkdW1wTWV0YWRhdGEucHk6IEZpeCBmb3IgUlBNNSAtIDUuNC45IGludGVncmF0aW9uCisKK1JQTTUgbm8gbG9uZ2VyIGhhcyBhIHN3aXRjaCB0byBkaXNhYmxlIHNpZ25hdHVyZSB2YWxpZGF0aW9uLiAgKER1ZSB0byBzZWN1cml0eQordmFsaWRhdGlvbiBjb25jZXJucy4pCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisgIGNyZWF0ZXJlcG8gZG9lcyBub3Qgc3VwcG9ydCBSUE01IHVwc3RyZWFtCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weSBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkKKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA2LTA1IDEwOjEyOjU1LjY4Nzk2NDIyMiAtMDUwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA2LTA1IDEwOjQwOjA4LjE1NDA2MDYwMCAtMDUwMAorQEAgLTkyLDcgKzkyLDcgQEAKKyAgICAgICAgICAgICBmZG5vID0gcGFja2FnZSAjIGxldCdzIGFzc3VtZSB0aGlzIGlzIGFuIGZkbm8gYW5kIGdvIHdpdGggaXQgOikKKyAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICByYWlzZSBNREVycm9yLCAiRXJyb3Igb3BlbmluZyBmaWxlIgorLSAgICB0cy5zZXRWU0ZsYWdzKChycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKysgICAgdHMuc2V0VlNGbGFncygocnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKyAgICAgdHJ5OgorICAgICAgICAgaGRyID0gdHMuaGRyRnJvbUZkbm8oZmRubykKKyAgICAgZXhjZXB0IHJwbS5lcnJvcjoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9kdW1wTWV0YWRhdGEtZGlzYWJsZS1zaWduYXR1cmUtdmFsaWRhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9kdW1wTWV0YWRhdGEtZGlzYWJsZS1zaWduYXR1cmUtdmFsaWRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU1MzFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2R1bXBNZXRhZGF0YTogZGlzYWJsZSBzaWduYXR1cmUgdmFsaWRhdGlvbgorCitNYWtlcyBpdCBwb3NzaWJsZSB0byB3b3JrIG9uIFJQTSByZXBvc2l0b3JpZXMgdGhhdCBjb250YWluIHNpZ25lZCBwYWNrYWdlcword2l0aG91dCB0aGUgbmVlZCBvZiBpbXBvcnRpbmcgdGhlIHB1YmxpYyBwYXJ0IG9mIHRoZSBzaWduaW5nIGtleSBpbnRvIHRoZSBSUE0KK2RhdGFiYXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya3VzIExlaHRvbmVuIDxtYXJrdXMubGVodG9uZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgZHVtcE1ldGFkYXRhLnB5IHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZHVtcE1ldGFkYXRhLnB5IGIvZHVtcE1ldGFkYXRhLnB5CitpbmRleCBlNDBlOGFjLi5jYTZhODJkIDEwMDY0NAorLS0tIGEvZHVtcE1ldGFkYXRhLnB5CisrKysgYi9kdW1wTWV0YWRhdGEucHkKK0BAIC05Miw3ICs5Miw5IEBAIGRlZiByZXR1cm5IZHIodHMsIHBhY2thZ2UpOgorICAgICAgICAgICAgIGZkbm8gPSBwYWNrYWdlICMgbGV0J3MgYXNzdW1lIHRoaXMgaXMgYW4gZmRubyBhbmQgZ28gd2l0aCBpdCA6KQorICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIHJhaXNlIE1ERXJyb3IsICJFcnJvciBvcGVuaW5nIGZpbGUiCistICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRCkpCisrICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRHwKKysgICAgICAgICAgICAgICAgICAgcnBtLlJQTVZTRl9OT0RTQXxycG0uUlBNVlNGX05PUlNBfAorKyAgICAgICAgICAgICAgICAgICBycG0uUlBNVlNGX05PRFNBSEVBREVSfHJwbS5SUE1WU0ZfTk9SU0FIRUFERVIpKQorICAgICB0cnk6CisgICAgICAgICBoZHIgPSB0cy5oZHJGcm9tRmRubyhmZG5vKQorICAgICBleGNlcHQgcnBtLmVycm9yOgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2ZpeC1uYXRpdmUtaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODIwMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2ZpeC1uYXRpdmUtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDE2MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitEYXRlOiBKYW4gMzEsIDIwMTEKKworVGhlcmUgYXJlIHR3byBmaXhlczoKKyAgMS4gLW5hdGl2ZSBuZWVkcyB0byBjdXN0b21pemUgcHJlZml4CisgIDIuIG5lZWRzIHRvIGNoYW5nZSBweXRob24gcmVmZXJlbmNlIGluIGJpbmFyaWVzCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggYjJkMWEzMi4uM2MzNjM5ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTMsMjIgKzMsMjIgQEAgVkVSU0lPTiA9IDAuNC4xMQorIFNIRUxMID0gL2Jpbi9zaAorIHRvcF9zcmNkaXIgPSAuCisgc3JjZGlyID0gLgorLXByZWZpeCA9IC91c3IKKy1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQorLQorLWJpbmRpciA9ICR7ZXhlY19wcmVmaXh9L2JpbgorLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCistbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKy1kYXRhZGlyID0gJHtwcmVmaXh9L3NoYXJlCistc3lzY29uZmRpciA9ICR7cHJlZml4fS9ldGMKKy1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KKy1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgorLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgorLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbworK3ByZWZpeCA/PSAvdXNyCisrZXhlY19wcmVmaXggPz0gJHtwcmVmaXh9CisrCisrYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L2JpbgorK3NiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vc2JpbgorK2xpYmV4ZWNkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworK2RhdGFkaXIgPz0gJHtwcmVmaXh9L3NoYXJlCisrc3lzY29uZmRpciA/PSAke3ByZWZpeH0vZXRjCisrc2hhcmVkc3RhdGVkaXIgPz0gJHtwcmVmaXh9L2NvbQorK2xvY2Fsc3RhdGVkaXIgPz0gJHtwcmVmaXh9L3ZhcgorK2xpYmRpciA/PSAke2V4ZWNfcHJlZml4fS9saWIKKytpbmZvZGlyID89ICR7cHJlZml4fS9pbmZvCisgZG9jZGlyID0gCistaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCisraW5jbHVkZWRpciA/PSAke3ByZWZpeH0vaW5jbHVkZQorIG9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKKy1tYW5kaXIgPSAke3ByZWZpeH0vc2hhcmUvbWFuCisrbWFuZGlyID89ICR7cHJlZml4fS9zaGFyZS9tYW4KKyAKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS8kKFBBQ0tBR0UpCisgcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkKK2RpZmYgLS1naXQgYS9iaW4vTWFrZWZpbGUgYi9iaW4vTWFrZWZpbGUKK2luZGV4IDUyYzFmNTAuLmUzMDYxMGUgMTAwNjQ0CistLS0gYS9iaW4vTWFrZWZpbGUKKysrKyBiL2Jpbi9NYWtlZmlsZQorQEAgLTEsMjIgKzEsMjIgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyB0b3Bfc3JjZGlyID0gLi4KKyBzcmNkaXIgPSAuLi9iaW4KKy1wcmVmaXggPSAvdXNyCistZXhlY19wcmVmaXggPSAke3ByZWZpeH0KKy0KKy1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KKy1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2JpbgorLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCistZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQorLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCistc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCistbG9jYWxzdGF0ZWRpciA9ICR7cHJlZml4fS92YXIKKy1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKKy1pbmZvZGlyID0gJHtwcmVmaXh9L2luZm8KKytwcmVmaXggPz0gL3VzcgorK2V4ZWNfcHJlZml4ID89ICR7cHJlZml4fQorKworK2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9iaW4KKytzYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L3NiaW4KKytsaWJleGVjZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKytkYXRhZGlyID89ICR7cHJlZml4fS9zaGFyZQorK3N5c2NvbmZkaXIgPz0gJHtwcmVmaXh9L2V0YworK3NoYXJlZHN0YXRlZGlyID89ICR7cHJlZml4fS9jb20KKytsb2NhbHN0YXRlZGlyID89ICR7cHJlZml4fS92YXIKKytsaWJkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliCisraW5mb2RpciA/PSAke3ByZWZpeH0vaW5mbworIGRvY2RpciA9IAorLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQorK2luY2x1ZGVkaXIgPz0gJHtwcmVmaXh9L2luY2x1ZGUKKyBvbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCistbWFuZGlyID0gJHtwcmVmaXh9L21hbgorK21hbmRpciA/PSAke3ByZWZpeH0vbWFuCisgCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvJChQQUNLQUdFKQorIHBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpCitAQCAtNDAsOCArNDAsMTEgQEAgYWxsOiAkKHNyY2RpcikvJChQQUNLQUdFKQorIAorIAorIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycworLQkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvJChQQUNLQUdFKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUEFDS0FHRSkKKy0JJChJTlNUQUxMX0JJTikgJChzcmNkaXIpL21vZGlmeXJlcG8gJChERVNURElSKSQoYmluZGlyKS9tb2RpZnlyZXBvCisrCXNlZCAtZSAic3xAREFUQURJUkB8JChkYXRhZGlyKXwiICQoc3JjZGlyKS8kKFBBQ0tBR0UpID4gJChzcmNkaXIpLyQoUEFDS0FHRSkudG1wCisrCXNlZCAtZSAic3xAREFUQURJUkB8JChkYXRhZGlyKXwiICQoc3JjZGlyKS9tb2RpZnlyZXBvID4gJChzcmNkaXIpL21vZGlmeXJlcG8udG1wCisrCSQoSU5TVEFMTF9CSU4pICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnRtcCAkKERFU1RESVIpJChiaW5kaXIpLyQoUEFDS0FHRSkKKysJJChJTlNUQUxMX0JJTikgJChzcmNkaXIpL21vZGlmeXJlcG8udG1wICQoREVTVERJUikkKGJpbmRpcikvbW9kaWZ5cmVwbworKwlybSAtZiAkKHNyY2RpcikvJChQQUNLQUdFKS50bXAgJChzcmNkaXIpL21vZGlmeXJlcG8udG1wCisgCisgCisgdW5pbnN0YWxsOgorZGlmZiAtLWdpdCBhL2Jpbi9jcmVhdGVyZXBvIGIvYmluL2NyZWF0ZXJlcG8KK2luZGV4IGIwZGU1MTUuLmVhYWNiMzkgMTAwNzU1CistLS0gYS9iaW4vY3JlYXRlcmVwbworKysrIGIvYmluL2NyZWF0ZXJlcG8KK0BAIC0xLDIgKzEsMiBAQAorICMhL2Jpbi9zaAorLWV4ZWMgL3Vzci9zaGFyZS9jcmVhdGVyZXBvL2dlbnBrZ21ldGFkYXRhLnB5ICIkQCIKKytleGVjIEBEQVRBRElSQC9jcmVhdGVyZXBvL2dlbnBrZ21ldGFkYXRhLnB5ICIkQCIKK2RpZmYgLS1naXQgYS9iaW4vbW9kaWZ5cmVwbyBiL2Jpbi9tb2RpZnlyZXBvCitpbmRleCBjOTczMmQ4Li42ZjdjMWQ0IDEwMDc1NQorLS0tIGEvYmluL21vZGlmeXJlcG8KKysrKyBiL2Jpbi9tb2RpZnlyZXBvCitAQCAtMSwyICsxLDIgQEAKKyAjIS9iaW4vc2gKKy1leGVjIC91c3Ivc2hhcmUvY3JlYXRlcmVwby9tb2RpZnlyZXBvLnB5ICIkQCIKKytleGVjIEBEQVRBRElSQC9jcmVhdGVyZXBvL21vZGlmeXJlcG8ucHkgIiRAIgorZGlmZiAtLWdpdCBhL2RvY3MvTWFrZWZpbGUgYi9kb2NzL01ha2VmaWxlCitpbmRleCAwYTQxMTc5Li5lMTI4Yzg1IDEwMDY0NAorLS0tIGEvZG9jcy9NYWtlZmlsZQorKysrIGIvZG9jcy9NYWtlZmlsZQorQEAgLTEsMjIgKzEsMjIgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyB0b3Bfc3JjZGlyID0gLi4KKyBzcmNkaXIgPSAuLi9kb2NzCistcHJlZml4ID0gL3VzcgorLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CistCistYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCistc2JpbmRpciA9ICR7ZXhlY19wcmVmaXh9L3NiaW4KKy1saWJleGVjZGlyID0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKKy1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YworLXNoYXJlZHN0YXRlZGlyID0gJHtwcmVmaXh9L2NvbQorLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCistbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCistaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCisrcHJlZml4ID89IC91c3IKKytleGVjX3ByZWZpeCA/PSAke3ByZWZpeH0KKysKKytiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vYmluCisrc2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9zYmluCisrbGliZXhlY2RpciA/PSAke2V4ZWNfcHJlZml4fS9saWJleGVjCisrZGF0YWRpciA/PSAke3ByZWZpeH0vc2hhcmUKKytzeXNjb25mZGlyID89ICR7cHJlZml4fS9ldGMKKytzaGFyZWRzdGF0ZWRpciA/PSAke3ByZWZpeH0vY29tCisrbG9jYWxzdGF0ZWRpciA/PSAke3ByZWZpeH0vdmFyCisrbGliZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYgorK2luZm9kaXIgPz0gJHtwcmVmaXh9L2luZm8KKyBkb2NkaXIgPSAKKy1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKKytpbmNsdWRlZGlyID89ICR7cHJlZml4fS9pbmNsdWRlCisgb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQorLW1hbmRpciA9ICR7ZGF0YWRpcn0vbWFuCisrbWFuZGlyID89ICR7ZGF0YWRpcn0vbWFuCisgCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvJChQQUNLQUdFKQorIHBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMjA1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitBdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworUHl0aG9uIGludGVycHJldGVyIHNob3VsZCBiZSB1c2UgZnJvbSBQQVRIIC0gbmF0aXZlIHB5dGhvbiAtIGFuZCBub3QgdGhlIG9uZSBmcm9tCitob3N0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9nZW5wa2dtZXRhZGF0YS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZ2VucGtnbWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxNDowNS4yNzg2NDkzODQgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9nZW5wa2dtZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE0OjIyLjI5MDY0ODg4NiArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXQKKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyBwcmltYXJ5IGZ1bmN0aW9ucyBhbmQgZ2x1ZSBmb3IgZ2VuZXJhdGluZyB0aGUgcmVwb3NpdG9yeSBtZXRhZGF0YQorICMKKyAKK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9tb2RpZnlyZXBvLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9tb2RpZnlyZXBvLnB5CTIwMTItMDQtMTAgMTc6MTQ6MDkuMTA2NjQ5MjcyICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvbW9kaWZ5cmVwby5weQkyMDEyLTA0LTEwIDE3OjE0OjI3LjgxODY0ODcyNSArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorICMgJElkJAorICMKKyAjIFRoaXMgdG9vbHMgaXMgdXNlZCB0byBpbnNlcnQgYXJiaXRyYXJ5IG1ldGFkYXRhIGludG8gYW4gUlBNIHJlcG9zaXRvcnkuCitJbmRleDogY3JlYXRlcmVwby0wLjQuMTEvZHVtcE1ldGFkYXRhLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOToyMy44NzQ2NDAwNjggKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOTozNC41MDI2Mzk3NTYgKzAzMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uIC10CisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorICMgYmFzZSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIGR1bXBpbmcgb3V0IHBhY2thZ2UgTWV0YWRhdGEKKyAjCisgIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL3JlYWRNZXRhZGF0YS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvcmVhZE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6MTkuNjI2NjQwMTkzICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvcmVhZE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6NDAuMTk4NjM5NTkwICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdAorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JlY29tbWVuZHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcmVjb21tZW5kcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzVkZTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JlY29tbWVuZHMucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorY3JlYXRlcmVwbzogaW1wbGVtZW50IHJlY29tbWVuZHMgc3VwcG9ydAorCitSZWNvcmQgYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyByZXF1aXJlcyBlbnRyeSBpbiB0aGUgb3V0cHV0IG1ldGFkYXRhCitpZiBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIGlzIG1hcmtlZCB3aXRoIHRoZSBSUE1TRU5TRV9NSVNTSU5HT0sgZmxhZworKGluZGljYXRpbmcgaXQgaXMgYSByZWNvbW1lbmRhdGlvbiwgcmF0aGVyIHRoYW4gYSBoYXJkIGRlcGVuZGVuY3kpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9kdW1wTWV0YWRhdGEucHkgYi9kdW1wTWV0YWRhdGEucHkKK2luZGV4IDcwYmIyZDguLmU0MGU4YWMgMTAwNjQ0CistLS0gYS9kdW1wTWV0YWRhdGEucHkKKysrKyBiL2R1bXBNZXRhZGF0YS5weQorQEAgLTMxOSw2ICszMTksMjMgQEAgY2xhc3MgUnBtTWV0YURhdGE6CisgICAgICAgICAgICAgICAgICAgICByZXFzLmFwcGVuZCgwKQorICAgICAgICAgcmV0dXJuIHJlcXMKKyAKKysgICAgZGVmIF9jaGVja01pc3NpbmdPayhzZWxmLCBmbGFncyk6CisrICAgICAgICByZXFzPVtdCisrICAgICAgICBpZiBmbGFncyBpcyBOb25lOgorKyAgICAgICAgICAgIHJldHVybiByZXFzCisrCisrICAgICAgICBpZiB0eXBlKGZsYWdzKSBpcyBub3QgdHlwZXMuTGlzdFR5cGU6CisrICAgICAgICAgICAgZmxhZ3MgPSBbZmxhZ3NdCisrICAgICAgICBmb3IgZmxhZyBpbiBmbGFnczoKKysgICAgICAgICAgICBuZXdmbGFnID0gZmxhZworKyAgICAgICAgICAgIGlmIGZsYWcgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgICAgIG5ld2ZsYWcgPSBmbGFnICYgcnBtLlJQTVNFTlNFX01JU1NJTkdPSworKyAgICAgICAgICAgICAgICBpZiBuZXdmbGFnOgorKyAgICAgICAgICAgICAgICAgICAgcmVxcy5hcHBlbmQoMSkKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJlcXMuYXBwZW5kKDApCisrICAgICAgICByZXR1cm4gcmVxcworKworIAorICAgICBkZWYgX2NvcnJlY3RWZXJzaW9uKHNlbGYsIHZlcnMpOgorICAgICAgICAgcmV0dXJudmVycyA9IFtdCitAQCAtNTM3LDkgKzU1NCwxMCBAQCBjbGFzcyBScG1NZXRhRGF0YToKKyAgICAgICAgIHRtcGZsYWdzID0gc2VsZi5oZHJbcnBtLlJQTVRBR19SRVFVSVJFRkxBR1NdCisgICAgICAgICBmbGFncyA9IHNlbGYuX2NvcnJlY3RGbGFncyh0bXBmbGFncykKKyAgICAgICAgIHByZXJlcSA9IHNlbGYuX2NoZWNrUHJlUmVxKHRtcGZsYWdzKQorKyAgICAgICAgbWlzc2luZ29rID0gc2VsZi5fY2hlY2tNaXNzaW5nT2sodG1wZmxhZ3MpCisgICAgICAgICB2ZXIgPSBzZWxmLl9jb3JyZWN0VmVyc2lvbihzZWxmLmhkcltycG0uUlBNVEFHX1JFUVVJUkVWRVJTSU9OXSkKKyAgICAgICAgIGlmIG5hbWVzIGlzIG5vdCBOb25lOgorLSAgICAgICAgICAgIGxzdCA9IHppcChuYW1lcywgZmxhZ3MsIHZlciwgcHJlcmVxKQorKyAgICAgICAgICAgIGxzdCA9IHppcChuYW1lcywgZmxhZ3MsIHZlciwgcHJlcmVxLCBtaXNzaW5nb2spCisgICAgICAgICByZXR1cm4gc2VsZi5fdW5pcShsc3QpCisgICAgICAgICAKKyAgICAgZGVmIG9ic29sZXRlc0xpc3Qoc2VsZik6CitAQCAtNjkyLDcgKzcxMCw3IEBAIGRlZiBnZW5lcmF0ZVhNTChkb2MsIG5vZGUsIGZvcm1hdG5zLCBycG1PYmosIHN1bXR5cGUpOgorICAgICBkZXBzTGlzdCA9IHJwbU9iai5kZXBzTGlzdCgpCisgICAgIGlmIGxlbihkZXBzTGlzdCkgPiAwOgorICAgICAgICAgcnBjb25vZGUgPSBmb3JtYXQubmV3Q2hpbGQoZm9ybWF0bnMsICdyZXF1aXJlcycsIE5vbmUpICAgIAorLSAgICAgICAgZm9yIChuYW1lLCBmbGFncywgKGUsdixyKSwgcHJlcmVxKSBpbiBkZXBzTGlzdDoKKysgICAgICAgIGZvciAobmFtZSwgZmxhZ3MsIChlLHYsciksIHByZXJlcSwgbWlzc2luZ29rKSBpbiBkZXBzTGlzdDoKKyAgICAgICAgICAgICBlbnRyeSA9IHJwY29ub2RlLm5ld0NoaWxkKGZvcm1hdG5zLCAnZW50cnknLCBOb25lKQorICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ25hbWUnLCBuYW1lKQorICAgICAgICAgICAgIGlmIGZsYWdzICE9IDA6CitAQCAtNzExLDYgKzcyOSw4IEBAIGRlZiBnZW5lcmF0ZVhNTChkb2MsIG5vZGUsIGZvcm1hdG5zLCBycG1PYmosIHN1bXR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgncmVsJywgc3RyKHIpKQorICAgICAgICAgICAgIGlmIHByZXJlcSA9PSAxOgorICAgICAgICAgICAgICAgICBlbnRyeS5uZXdQcm9wKCdwcmUnLCBzdHIocHJlcmVxKSkKKysgICAgICAgICAgICBpZiBtaXNzaW5nb2s6CisrICAgICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ21pc3NpbmdvaycsICcxJykKKyAgICAgICAgIAorICAgICBmb3IgZmlsZSBpbiBycG1PYmoudXNlZnVsRmlsZXMoKToKKyAgICAgICAgIGZpbGVzID0gZm9ybWF0Lm5ld0NoaWxkKE5vbmUsICdmaWxlJywgTm9uZSkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcnBtLWNyZWF0ZXNvbHZlZGIucHkgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcnBtLWNyZWF0ZXNvbHZlZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTViNjFiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weQpAQCAtMCwwICsxLDY0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIGEgc29sdXRpb24gZGF0YWJhc2UgZm9yIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcnBtIHBhY2thZ2VzCisjIGJ1dCB0cmllcyB0byBiZSBlZmZpY2llbnQgYWJvdXQgdGhpcywgb25seSBkb2luZyBzbyB3aGVuIHRoZSBwYWNrYWdlcyBoYXZlIGNoYW5nZWQKKyMgaW4gc29tZSB3YXkuCisjCisjIEl0IGlzIGFzc3VtZWQgc29tZXRoaW5nIGFscmVhZHkgd2VudCB0aHJvdWdoIGFuZCByZW1vdmVkIGFsbCB0aGUgc29sdmVkYi5kb25lIHN0YW1wIGZpbGVzCisjIGluIGFkdmFuY2UuCisjCisjIEZpcnN0IGFyZ3VtZW50IC0gdGhlIHJwbSBiaW5hcnkgdG8gdXNlCisjIFN1YnNlcXVlbnQgYXJndW1lbnRzIC0gcGF0aHMgdG8gcHJvY2VzcyBzb2x1dGlvbiBkYXRhYmFzZXMgZm9yCisjCisKK2ltcG9ydCBzeXMsIG9zCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IHN0YXQKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2lmIGxlbihzeXMuYXJndikgPCAxOgorICAgIHByaW50KCJFcnJvciwgcnBtIGNvbW1hbmQgbm90IHNwZWNpZmllZCIpCisgICAgc3lzLmV4aXQoMSkKKworaWYgbGVuKHN5cy5hcmd2KSA8IDI6CisgICAgcHJpbnQoIkVycm9yLCBubyBwYXRocyBzcGVjaWZpZWQiKQorICAgIHN5cy5leGl0KDEpCisKK3BhdGhzID0gc3lzLmFyZ3ZbMjpdCisKK2ZvciBwYXRoIGluIHBhdGhzOgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIuZG9uZSIpOgorICAgICAgICBjb250aW51ZQorICAgIGRhdGEgPSAiIgorICAgIG1hbmlmZXN0ID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisgICAgICAgICAgICBpZiBmLnN0YXJ0c3dpdGgocGF0aCArICIvIiArICJzb2x2ZWRiIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc3RyKG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0pCisgICAgICAgICAgICBtYW5pZmVzdC5hcHBlbmQoZikKKyAgICBjaGVja3N1bSA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi9zb2x2ZWRiLmNoZWNrc3VtIikgYW5kIG9wZW4ocGF0aCArICIvc29sdmVkYi5jaGVja3N1bSIsICJyIikucmVhZCgpID09IGNoZWNrc3VtOgorICAgICAgICBvcGVuKHBhdGggKyAiL3NvbHZlZGIuZG9uZSIsICJ3IikKKyAgICAgICAgY29udGludWUKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIiKToKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJybSAtcmYgJXMiICUgKHBhdGggKyAiL3NvbHZlZGIiKSwgc2hlbGw9VHJ1ZSkKKyAgICBvcy5ta2RpcihwYXRoICsgIi9zb2x2ZWRiIikKKyAgICBtID0gb3BlbihwYXRoICsgIi9zb2x2ZWRiL21hbmlmZXN0IiwgInciKQorICAgIG0ud3JpdGUoIiMgRHluYW1pY2FsbHkgZ2VuZXJhdGVkIHNvbHZlIG1hbmlmZXN0XG4iKQorICAgIGZvciBmIGluIG1hbmlmZXN0OgorICAgICAgICBtLndyaXRlKGYgKyAiXG4iKQorICAgIG0uY2xvc2UoKQorCisgICAgY21kID0gc3lzLmFyZ3ZbMV0gKyAnIC1pIC0tcmVwbGFjZXBrZ3MgLS1yZXBsYWNlZmlsZXMgLS1vbGRwYWNrYWdlIC1EICJfZGJwYXRoICcgKyBwYXRoICsgJy9zb2x2ZWRiIiAtLWp1c3RkYiBcCisJCQktLW5vYWlkIC0tbm9kZXBzIC0tbm9vcmRlciAtLW5vc2NyaXB0cyAtLW5vdHJpZ2dlcnMgLS1ub3BhcmVudGRpcnMgLS1ub2xpbmt0b3MgLS1zdGF0cyBcCisJCQktLWlnbm9yZXNpemUgLS1ub3NpZ25hdHVyZSAtLW5vZGlnZXN0IC1EICJfX2RiaV90eG4gY3JlYXRlIG5vZnN5bmMiIFwKKwkJCScgKyBwYXRoICsgJy9zb2x2ZWRiL21hbmlmZXN0JworICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICBvcGVuKHBhdGggKyAiL3NvbHZlZGIuY2hlY2tzdW0iLCAidyIpLndyaXRlKGNoZWNrc3VtKQorICAgIG9wZW4ocGF0aCArICIvc29sdmVkYi5kb25lIiwgInciKQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG9fMC40LjExLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvXzAuNC4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjllY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvXzAuNC4xMS5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkNyZWF0ZXMgbWV0YWRhdGEgaW5kZXhlcyBmb3IgUlBNIHBhY2thZ2UgcmVwb3NpdG9yaWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2NyZWF0ZXJlcG8uYmFzZXVybC5vcmcvIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJWZXJzaW9ucyBhZnRlciAwLjkuKiB1c2UgWVVNLCBzbyB3ZSBob2xkIGF0IDAuNC4xMSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCIKKworREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gImxpYnhtbDItbmF0aXZlIHJwbS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAibGlieG1sMi1weXRob24iCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImh0dHA6Ly9jcmVhdGVyZXBvLmJhc2V1cmwub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWNvbW1lbmRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyZWF0ZXJlcG8tZGJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JwbS1jcmVhdGVzb2x2ZWRiLnB5IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2U5Y2NmNGFiY2ZmZTNmNDlhZjA3OGM4MzYxMWVkYTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTczYWUxMWEwZGNkZThiZGUzNmQ5MDBiYzNmN2Y4ZjEwODNiYTc1MmM3MGE1YzYxYjcyZDFlMWU3NjA4ZjIxYiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgLWUgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JwbS1jcmVhdGVzb2x2ZWRiLnB5ICR7RH0ke2JpbmRpcn0vCit9CisKKyMgV3JhcCB0aGUgcHl0aG9uIHNjcmlwdCBzaW5jZSB0aGUgbmF0aXZlIHB5dGhvbiBpcworIyAke2JpbmRpcn0vcHl0aG9uLW5hdGl2ZS9weXRob24sIGFuZCB0aGUgIiMhIC91c3IvYmluL2VudiBweXRob24iIGNhbid0CisjIGZpbmQgaXQgc2luY2UgaXQgaXMgbm90IGluIFBBVEguCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCSMgTm90IGFsbCB0aGUgcHl0aG9uIHNjcmlwdHMgc2hvdWxkIGJlIHdyYXBwZWQgc2luY2Ugc29tZSBvZgorCSMgdGhlbSBhcmUgbW9kdWxlcyAoYmUgaW1wb3J0ZWQpLgorCWZvciBpIGluICR7RH0ke2RhdGFkaXJ9L2NyZWF0ZXJlcG8vZ2VucGtnbWV0YWRhdGEucHkgXAorCQkgJHtEfSR7ZGF0YWRpcn0vY3JlYXRlcmVwby9tb2RpZnlyZXBvLnB5IFwKKwkJICR7RH0ke2JpbmRpcn0vcnBtLWNyZWF0ZXNvbHZlZGIucHkgOyBkbworCQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9lbnYgcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAkaQorCWRvbmUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2NyZWF0ZXJlcG8gXAorCQkJUlBNX1VTUkxJQlJQTT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vbG9jYWxlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvY29uZmlndXJlX2FjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL2NvbmZpZ3VyZV9hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGJkMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL2NvbmZpZ3VyZV9hYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6ICBQZW5kaW5nCisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjgxLDcgKzI4MSw3IEBAIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAKKyBDVVJMX0NIRUNLX0NPTVBJTEVSCisgQ1VSTF9TRVRfQ09NUElMRVJfQkFTSUNfT1BUUworLUNVUkxfU0VUX0NPTVBJTEVSX0RFQlVHX09QVFMKKytkbmwgQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUUworIENVUkxfU0VUX0NPTVBJTEVSX09QVElNSVpFX09QVFMKKyBDVVJMX1NFVF9DT01QSUxFUl9XQVJOSU5HX09QVFMKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9wa2djb25maWdfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3BrZ2NvbmZpZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4NzY5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcGFja2FnaW5nXQorCitkaWZmIC1OdXJkIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYyBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMKKy0tLSBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMJMjAxMy0wMi0wNiAxMTo0NzoxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMJMjAxMy0wMi0xNiAxMjozMjoyMi4xMzIzMjc3NjQgKzAyMDAKK0BAIC0xODgzLDYgKzE4ODMsNyBAQAorICAgICAgICBBQ19TVUJTVChVU0VfR05VVExTLCBbMV0pCisgICAgICAgIEdOVVRMU19FTkFCTEVEPTEKKyAgICAgICAgVVNFX0dOVVRMUz0ieWVzIgorKyAgICAgICBHTlVUTFNfUkVRVUlSRUQ9ImdudXRscyIKKyAgICAgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChHbnVUTFMpIgorICAgICAgICBdLAorICAgICAgICBbCitAQCAtMTk1Myw2ICsxOTU0LDggQEAKKyAgICBdKQorIGZpCisgCisrQUNfU1VCU1QoR05VVExTX1JFUVVJUkVEKQorKworIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sIGNoZWNrIGZvciBQb2xhclNTTAorIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmIC1OdXJkIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4gY3VybC03LjI5LjAvbGliY3VybC5wYy5pbgorLS0tIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4JMjAxMi0xMi0xMiAwMDozMjoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBjdXJsLTcuMjkuMC9saWJjdXJsLnBjLmluCTIwMTMtMDItMTYgMTI6MzM6MjcuMDYzODQ0MzM3ICswMjAwCitAQCAtMzUsNSArMzUsNSBAQAorIERlc2NyaXB0aW9uOiBMaWJyYXJ5IHRvIHRyYW5zZmVyIGZpbGVzIHdpdGggZnRwLCBodHRwLCBldGMuCisgVmVyc2lvbjogQENVUkxWRVJTSU9OQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sY3VybAorLUxpYnMucHJpdmF0ZTogQExJQkNVUkxfTElCU0AKKytMaWJzLnByaXZhdGU6IC1sZGwgLWx6CisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQENQUEZMQUdfQ1VSTF9TVEFUSUNMSUJACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40NC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNDQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjkzMzAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNDQuMC5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSB0b29sIGFuZCBsaWJyYXJ5IGZvciBjbGllbnQtc2lkZSBVUkwgdHJhbnNmZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saXN0LmNnaT9saXN0PWN1cmwtdHJhY2tlciIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT03O21kNT0zYTM0OTQyZjRhZTNmYmYxYTMwMzE2MDcxNGU2NjRhYyIKKworU1JDX1VSSSA9ICJodHRwOi8vY3VybC5oYXh4LnNlL2Rvd25sb2FkL2N1cmwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAiCisKKyMgY3VybCBsaWtlcyB0byBzZXQgLWcwIGluIENGTEFHUywgc28gd2Ugc3RvcCBpdAorIyBmcm9tIG11Y2tpbmcgYXJvdW5kIHdpdGggZGVidWcgb3B0aW9ucworIworU1JDX1VSSSArPSAiIGZpbGU6Ly9jb25maWd1cmVfYWMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2Yjk1MmNhMDBlNTQ3M2IxNmExMWYwNWYwNmFhOGRhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZTI1NDFiYWU2NTgyYmI2OTdjMGZiYWU0OWUxZDNlNmZhZDVkMDVkNWFhODBkYmQ2ZjA3MmUwYTQ0MzQxODE0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnIG11bHRpbGliX2hlYWRlcgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJpcHY2IiwgImlwdjYiLCAiIiwgZCl9IGdudXRscyB6bGliIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiaXB2NiBzc2wgemxpYiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gImlwdjYgc3NsIHpsaWIiCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCitQQUNLQUdFQ09ORklHW3NzbF0gPSAiLS13aXRoLXNzbCAtLXdpdGgtcmFuZG9tPS9kZXYvdXJhbmRvbSwtLXdpdGhvdXQtc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS13aXRoLWdudXRscywtLXdpdGhvdXQtZ251dGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4vLC0td2l0aG91dC16bGliLHpsaWIiCitQQUNLQUdFQ09ORklHW3J0bXBkdW1wXSA9ICItLXdpdGgtbGlicnRtcCwtLXdpdGhvdXQtbGlicnRtcCxydG1wZHVtcCIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gPSAiLS13aXRoLWxpYnNzaDIsLS13aXRob3V0LWxpYnNzaDIsbGlic3NoMiIKK1BBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS1zbWIsLS1kaXNhYmxlLXNtYiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtbGliaWRuIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jcnlwdG8tYXV0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxkYXAgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sZGFwcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWNhLWJ1bmRsZT0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IFwKKyIKKyMgc2VlIGh0dHBzOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZy9waXBlcm1haWwvcG9reS8yMDEzLURlY2VtYmVyLzAwOTQzNS5odG1sCisjIFdlIHNob3VsZCBpZGVhbGx5IGRyb3AgYWNfY3Zfc2l6ZW9mX29mZl90IGZyb20gc2l0ZSBmaWxlcyBidXQgdW50aWwgdGhlbgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdhY19jdl9zaXplb2Zfb2ZmX3Q9OCcsICcnLCBkKX0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBjdXJsL2N1cmxidWlsZC5oCit9CisKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0iCisKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfbGliJHtCUE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL01ha2VmaWxlLWxldC1saWJzb190YXJnZXQtZGVwZW5kLW9uLWJ0X3JlYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjliZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYzY0MGZmOTM0MGYzNThhMDA4MzU4MTZkMGZlYTAzZDI3YTdiZTk3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAzMSBNYXIgMjAxNSAwMDo1Njo0NCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogbGV0IGxpYnNvX3RhcmdldCBkZXBlbmQgb24gYnRfcmVjCisKK0ZpeGVkIHBhcmFsbGVsIGlzc3VlOgorbGlidG9vbDogbGluazogYGJ0X3JlYy5sbycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QKK01ha2VmaWxlOjg2NzogcmVjaXBlIGZvciB0YXJnZXQgJ2xpYmRiLTYuMC5sYScgZmFpbGVkCittYWtlOiAqKiogW2xpYmRiLTYuMC5sYV0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGU0NTFmNzAuLjBhNDIzNzUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC04NjMsNyArODYzLDcgQEAgJChsaWJkYl92ZXJzaW9uKTogJChDX09CSlMpCisgCSQoTE4pIC1zICQobGliZGJfdmVyc2lvbikgJChsaWJkYikKKyAKKyAjIFNoYXJlZCBDIGxpYnJhcnkuCistJChsaWJzb190YXJnZXQpOiAkKENfT0JKUykKKyskKGxpYnNvX3RhcmdldCk6ICQoQ19PQkpTKSBidF9yZWNAb0AKKyAJJChTT0xJTkspICQoU09GTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKENfT0JKUykgXAorIAkJJChMSUJDU09fTElCUykKKyAJJChSTSkgJChsaWJkYikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZThkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK09yaWdpbmFsIHBhdGNoIHN1Ym1pdHRlZCBieSBqYm93bGVyQG5zbHUyLWxpbnV4Lm9yZyBvbiAyMDA1LTExLTE3OgorCitkYjogZml4IHRodW1iIHVjbGliYyBvcGVyYXRpb24gaW4gNC4zLjI5CisgIC0gdWNsaWJjIHRodW1iIGJ1aWxkcyB3ZXJlIHVzaW5nIGxpYnB0aHJlYWQgdG8gaW1wbGVtZW50IG11dGV4ZXMsIHRoZQorICAtIHVjbGliYyB2ZXJzaW9uIHNlZW1zIHRvIGJlIGEgc3R1YiAoYXQgbGVhc3Qgb24gdGh1bWIpLiAgVGhpcyBjb21taXQKKyAgLSBmaXhlcyB0aGUgQVJNL2djYy1hc3NlbWJseSBtdXRleCBpbXBsZW1lbnRhdGlvbiBzbyB0aGF0IGl0IGhhcyB0aHVtYgorICAtIHN1cHBvcnQgYW5kIHRoZSByZXN1bHRhbnQgZGI0IHdvcmtzICh0ZXN0ZWQgb24gTEUgVGh1bWIgdWNsaWJjKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitBdXRob3I6IGpib3dsZXJAbnNsdTItbGludXgub3JnCisKKy0tLSBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oLm9yaWcJMjAxMS0wMS0wNSAxOToyMTo0Mi4xODE4MDUzNjYgLTA2MDAKKysrKyBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oCTIwMTEtMDEtMDUgMTk6MjQ6NTMuMTQxODUzMTE3IC0wNjAwCitAQCAtNDc0LDYgKzQ3NCwyNSBAQAorIAorICNpZmRlZiBMT0FEX0FDVFVBTF9NVVRFWF9DT0RFCisgLyogZ2NjL2FybTogMCBpcyBjbGVhciwgMSBpcyBzZXQuICovCisrI2lmIGRlZmluZWQgX190aHVtYl9fCisrI2RlZmluZQlNVVRFWF9TRVQodHNsKSAoewkJCQkJCVwKKysJaW50IF9fciwgX19wOwkJCQkJCQlcCisrCV9fYXNtX18gdm9sYXRpbGUoCQkJCQkJXAorKwkJIi5hbGlnbiAyXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiYnggICAgIHBjXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJub3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIi5hcm1cblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkic3dwYiAgICUwLCAlMiwgWyUzXVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJlb3IgICAgJTAsICUwLCAjMVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIm9yciAgICAlMSwgcGMsICMxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiYnggICAgICUxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSIuZm9yY2VfdGh1bWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgOiAiPSZyIiAoX19yKSwgIj1yIiAoX19wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgOiAiciIgKDEpLCAiciIgKHRzbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlfX3IgJiAxOwkJCQkJCQlcCisrfSkKKysjZWxzZQorICNkZWZpbmUJTVVURVhfU0VUKHRzbCkgKHsJCQkJCQlcCisgCWludCBfX3I7CQkJCQkJCVwKKyAJX19hc21fXyB2b2xhdGlsZSgJCQkJCQlcCitAQCAtNDg0LDYgKzUwMyw3IEBACisgCSAgICApOwkJCQkJCQkJXAorIAlfX3IgJiAxOwkJCQkJCQlcCisgfSkKKysjZW5kaWYKKyAKKyAjZGVmaW5lCU1VVEVYX1VOU0VUKHRzbCkJKCoodm9sYXRpbGUgdHNsX3QgKikodHNsKSA9IDApCisgI2RlZmluZQlNVVRFWF9JTklUKHRzbCkgICAgICAgICAoTVVURVhfVU5TRVQodHNsKSwgMCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdmMWUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1dpdGggaGlnaGVyIHBhcmFsZWxpc20gaXQgc29tZXRpbWVzIGZhaWxzIHdpdGg6CitsaWJ0b29sOiBsaW5rOiBgdXRpbF9sb2cubG8nIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0CittYWtlOiAqKiogW2RiX3JlcGxpY2F0ZV0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gZGlzdC5vcmlnL01ha2VmaWxlLmluCTIwMTItMDUtMTEgMTk6NTc6NDguMDAwMDAwMDAwICswMjAwCisrKysgZGlzdC9NYWtlZmlsZS5pbgkyMDEzLTEwLTMxIDE4OjE3OjExLjg3NTUzMjUyMiArMDEwMAorQEAgLTEwMzQsNyArMTAzNCw3IEBACisgCSAgICBkYl9yZWNvdmVyQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikgJChMSUJTKQorIAkkKFBPU1RMSU5LKSAkQAorIAorLWRiX3JlcGxpY2F0ZTogZGJfcmVwbGljYXRlQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikKKytkYl9yZXBsaWNhdGU6IGRiX3JlcGxpY2F0ZUBvQCB1dGlsX2xvZ0BvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpCisgCSQoQ0NMSU5LKSAtbyAkQCAkKExERkxBR1MpIFwKKyAJICAgIGRiX3JlcGxpY2F0ZUBvQCB1dGlsX2xvZ0BvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpICQoTElCUykKKyAJJChQT1NUTElOSykgJEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGI4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCkBAIC0wLDAgKzEsMTE2IEBACisjIFZlcnNpb24gNSBvZiB0aGUgQmVya2VsZXkgREIgZnJvbSBTbGVlcHljYXQKKyMKKyMgQXQgcHJlc2VudCB0aGlzIHBhY2thZ2Ugb25seSBpbnN0YWxscyB0aGUgREIgY29kZQorIyBpdHNlbGYgKHNoYXJlZCBsaWJyYXJpZXMsIC5hIGluIHRoZSBkZXYgcGFja2FnZSksCisjIGRvY3VtZW50YXRpb24gYW5kIGhlYWRlcnMuCisjCisjIFRoZSBoZWFkZXJzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhvc2UgYXMgdjMKKyMgb2YgdGhlIERCLCBvbmx5IG9uZSB2ZXJzaW9uIGNhbiBiZSB1c2VkICpmb3IgZGV2KgorIyBhdCBvbmNlIC0gREIzIGFuZCBEQjUgY2FuIGJvdGggYmUgaW5zdGFsbGVkIG9uIHRoZQorIyBzYW1lIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lIGlmIHJlYWxseSBuZWNlc3NhcnkuCitTRUNUSU9OID0gImxpYnMiCitTVU1NQVJZID0gIkJlcmtlbGV5IERhdGFiYXNlIHY1IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2hub2xvZ3kvcHJvZHVjdHMvYmVya2VsZXktZGIvZGIvaW5kZXguaHRtbCIKK0xJQ0VOU0UgPSAiU2xlZXB5Y2F0IgorVklSVFVBTF9OQU1FID89ICJ2aXJ0dWFsL2RiIgorUkNPTkZMSUNUU18ke1BOfSA9ICJkYjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgorU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI5OTQ1NDU2NGQ1YjQ0Nzk3NTA1NjcwMzFkNjZmZTI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwYTk5MmQ3NDA3MDk4OTJlODFmOWQ5M2YwNmRhZjMwNWNmNzNmYjgxYjU0NWFmZTcyNDc4MDQzMTcyYzM2MjgiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0xJQ0VOU0U7bWQ1PWVkMTE1OGUzMTQzN2Y0Zjg3Y2RkNGFiMmI4NjEzOTU1IgorCitpbmhlcml0IGF1dG90b29scworCisjIFB1dCB2aXJ0dWFsL2RiIGluIGFueSBhcHByb3ByaWF0ZSBwcm92aWRlciBvZiBhCisjIHJlbGF0aW9uYWwgZGF0YWJhc2UsIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kgaW4KKyMgcGxhY2Ugb2YgYSBzcGVjaWZpYyBkYiBhbmQgdXNlOgorIworIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYgorIworIyB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZGIgaW4gdGhlIGJ1aWxkIChkaXN0cm8pIC5jb25mCitQUk9WSURFUyArPSAiJHtWSVJUVUFMX05BTUV9IgorCisjIGJpdGJha2UgaXNuJ3QgcXVpdGUgY2xldmVyIGVub3VnaCB0byBkZWFsIHdpdGggc2xlZXB5Y2F0LAorIyB0aGUgZGlzdHJpYnV0aW9uIHNpdHMgaW4gdGhlIGV4cGVjdGVkIGRpcmVjdG9yeSwgYnV0IGFsbAorIyB0aGUgYnVpbGRzIG11c3Qgb2NjdXIgZnJvbSBhIHN1Yi1kaXJlY3RvcnkuICBUaGUgZm9sbG93aW5nCisjIHBlcnN1YWRlcyBiaXRiYWtlIHRvIGdvIHRvIHRoZSByaWdodCBwbGFjZQorUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2Rpc3QiCitCID0gIiR7V09SS0RJUn0vZGItJHtQVn0vYnVpbGRfdW5peCIKK1NQRFhfUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9IgorCisjIFRoZSBleGVjdXRhYmxlcyBnbyBpbiBhIHNlcGFyYXRlIHBhY2thZ2UgLSB0eXBpY2FsbHkgdGhlcmUKKyMgaXMgbm8gbmVlZCB0byBpbnN0YWxsIHRoZXNlIHVubGVzcyBkb2luZyByZWFsIGRhdGFiYXNlCisjIG1hbmFnZW1lbnQgb24gdGhlIHN5c3RlbS4KK2luaGVyaXQgbGliX3BhY2thZ2UKKworUEFDS0FHRVMgPSsgIiR7UE59LWN4eCIKK0ZJTEVTXyR7UE59LWN4eCA9ICIke2xpYmRpcn0vKmN4eCpzbyIKKworCisjIFRoZSBkZXYgcGFja2FnZSBoYXMgdGhlIC5zbyBsaW5rIChhcyBpbiBkYjMpIGFuZCB0aGUgLmEncyAtCisjIGl0IGlzIHRoZXJlZm9yZSBpbmNvbXBhdGlibGUgKGNhbm5vdCBiZSBpbnN0YWxsZWQgYXQgdGhlCisjIHNhbWUgdGltZSkgYXMgdGhlIGRiMyBwYWNrYWdlCisjIHNvcnQgb3V0IHRoZSAuc28gc2luY2UgdGhleSBkbyB2ZXJzaW9uIHByaW9yIHRvIHRoZSAuc28KK1NPTElCUyA9ICItNSouc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmRiLnNvICR7bGliZGlyfS9saWJkYl9jeHguc28iCisKKyNjb25maWd1cmF0aW9uIC0gc2V0IGluIGxvY2FsLmNvbmYgdG8gb3ZlcnJpZGUKKyMgQWxsIHRoZSAtLWRpc2FibGUtKiBvcHRpb25zIHJlcGxhY2UgLS1lbmFibGUtc21hbGxidWlsZCwgd2hpY2ggYnJlYWtzIGEgYnVuY2ggb2Ygc3R1ZmYgKGVnLiBwb3N0Zml4KQorREI1X0NPTkZJRyA/PSAiLS1lbmFibGUtb19kaXJlY3QgLS1kaXNhYmxlLWNyeXB0b2dyYXBoeSAtLWRpc2FibGUtcXVldWUgLS1kaXNhYmxlLXJlcGxpY2F0aW9uIC0tZGlzYWJsZS12ZXJpZnkgLS1kaXNhYmxlLWNvbXBhdDE4NSAtLWRpc2FibGUtc3FsIgorCitFWFRSQV9PRUNPTkYgPSAiJHtEQjVfQ09ORklHfSAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtY3h4IC0td2l0aC1zeXNyb290IgorCisjIE92ZXJyaWRlIHRoZSBNVVRFWCBzZXR0aW5nIGhlcmUsIHRoZSBQT1NJWCBsaWJyYXJ5IGlzCisjIHRoZSBkZWZhdWx0IC0gIlBPU0lYL3B0aHJlYWRzL2xpYnJhcnkiLgorIyBEb24ndCBpZ25vcmUgdGhlIG5pY2UgU1dQIGluc3RydWN0aW9uIG9uIHRoZSBBUk06CisjIFRoZXNlIGVuYWJsZSB0aGUgQVJNIGFzc2VtYmxlciBtdXRleCBjb2RlLCB0aGlzIHdvbid0CisjIHdvcmsgd2l0aCB0aHVtYiBjb21waWxhdGlvbi4uLgorQVJNX01VVEVYID0gIi0td2l0aC1tdXRleD1BUk0vZ2NjLWFzc2VtYmx5IgorTVVURVggPSAiIgorTVVURVhfYXJtID0gIiR7QVJNX01VVEVYfSIKK01VVEVYX2FybWViID0gIiR7QVJNX01VVEVYfSIKK0VYVFJBX09FQ09ORiArPSAiJHtNVVRFWH0iCisKKyMgQ2FuY2VsIHRoZSBzaXRlIHN0dWZmIC0gaXQncyBzZXQgZm9yIGRiMyBhbmQgZGVzdHJveXMgdGhlCisjIGNvbmZpZ3VyZS4KK0NPTkZJR19TSVRFID0gIiIKK2RvX2NvbmZpZ3VyZSgpIHsKKwlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtTfQorCWV4cG9ydCBTVFJJUD0idHJ1ZSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyBcCisJCSR7Qn0vbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9LyR7aW5jbHVkZWRpcn0vZGI1MQorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjUxLy4KKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNTEvLgorCWxuIC1zIGRiNTEvZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaAorCWxuIC1zIGRiNTEvZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oCisKKwkjIFRoZSBkb2NzIGVuZCB1cCBpbiAvdXNyL2RvY3MgLSBub3QgcmlnaHQuCisJaWYgdGVzdCAtZCAiJHtEfS8ke3ByZWZpeH0vZG9jcyIKKwl0aGVuCisJCW1rZGlyIC1wICIke0R9LyR7ZGF0YWRpcn0iCisJCXRlc3QgISAtZCAiJHtEfS8ke2RvY2Rpcn0iIHx8IHJtIC1yZiAiJHtEfS8ke2RvY2Rpcn0iCisJCW12ICIke0R9LyR7cHJlZml4fS9kb2NzIiAiJHtEfS8ke2RvY2Rpcn0iCisJZmkKKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNi4wLjMwLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNi4wLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWRmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKQEAgLTAsMCArMSwxMTggQEAKKyMgVmVyc2lvbiA2IG9mIHRoZSBCZXJrZWxleSBEQiBmcm9tIE9yYWNsZSAoZm9ybWVybHkgU2xlZXB5Y2F0KQorIworIyBBdCBwcmVzZW50IHRoaXMgcGFja2FnZSBvbmx5IGluc3RhbGxzIHRoZSBEQiBjb2RlCisjIGl0c2VsZiAoc2hhcmVkIGxpYnJhcmllcywgLmEgaW4gdGhlIGRldiBwYWNrYWdlKSwKKyMgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycy4KKyMKKyMgVGhlIGhlYWRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aG9zZSBhcyB2MworIyBvZiB0aGUgREIsIG9ubHkgb25lIHZlcnNpb24gY2FuIGJlIHVzZWQgKmZvciBkZXYqCisjIGF0IG9uY2UgLSBEQjMgYW5kIERCNiBjYW4gYm90aCBiZSBpbnN0YWxsZWQgb24gdGhlCisjIHNhbWUgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUgaWYgcmVhbGx5IG5lY2Vzc2FyeS4KK1NFQ1RJT04gPSAibGlicyIKK1NVTU1BUlkgPSAiQmVya2VsZXkgRGF0YWJhc2UgdjYiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5vbG9neS9wcm9kdWN0cy9iZXJrZWxleS1kYi9kYi9pbmRleC5odG1sIgorTElDRU5TRSA9ICJBR1BMLTMuMCIKK1ZJUlRVQUxfTkFNRSA/PSAidmlydHVhbC9kYiIKK1JDT05GTElDVFNfJHtQTn0gPSAiZGIzIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJVcGRhdGluZyB0byA2LjEueCByZXF1aXJlcyBhbHNvIHVwZGF0aW5nIHJwbSB0byA1LjQuMTUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgorU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWQyOGViODZhZDMyMDNiNTQyMjg0NGRiMTc5YzU4NWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjA4ZTRiMWNmMzkwZTliZjU0YzBlZjAwYzViZDljYTc2ZDM2ZTIyNjFiOWY0ZDMzZDU0NTE2ZjNmNmEyMGZkMiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9MWVjOGIwYjE3Y2MzMTUxM2ZlMzVhYjEwNzE2Zjg0OTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgUHV0IHZpcnR1YWwvZGIgaW4gYW55IGFwcHJvcHJpYXRlIHByb3ZpZGVyIG9mIGEKKyMgcmVsYXRpb25hbCBkYXRhYmFzZSwgdXNlIGl0IGFzIGEgZGVwZW5kZW5jeSBpbgorIyBwbGFjZSBvZiBhIHNwZWNpZmljIGRiIGFuZCB1c2U6CisjCisjIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiCisjCisjIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBkYiBpbiB0aGUgYnVpbGQgKGRpc3RybykgLmNvbmYKK1BST1ZJREVTICs9ICIke1ZJUlRVQUxfTkFNRX0iCisKKyMgYml0YmFrZSBpc24ndCBxdWl0ZSBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCBzbGVlcHljYXQsCisjIHRoZSBkaXN0cmlidXRpb24gc2l0cyBpbiB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5LCBidXQgYWxsCisjIHRoZSBidWlsZHMgbXVzdCBvY2N1ciBmcm9tIGEgc3ViLWRpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcKKyMgcGVyc3VhZGVzIGJpdGJha2UgdG8gZ28gdG8gdGhlIHJpZ2h0IHBsYWNlCitTID0gIiR7V09SS0RJUn0vZGItJHtQVn0vZGlzdCIKK0IgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9idWlsZF91bml4IgorU1BEWF9TID0gIiR7V09SS0RJUn0vZGItJHtQVn0iCisKKyMgVGhlIGV4ZWN1dGFibGVzIGdvIGluIGEgc2VwYXJhdGUgcGFja2FnZSAtIHR5cGljYWxseSB0aGVyZQorIyBpcyBubyBuZWVkIHRvIGluc3RhbGwgdGhlc2UgdW5sZXNzIGRvaW5nIHJlYWwgZGF0YWJhc2UKKyMgbWFuYWdlbWVudCBvbiB0aGUgc3lzdGVtLgoraW5oZXJpdCBsaWJfcGFja2FnZQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3h4IgorRklMRVNfJHtQTn0tY3h4ID0gIiR7bGliZGlyfS8qY3h4KnNvIgorCisKKyMgVGhlIGRldiBwYWNrYWdlIGhhcyB0aGUgLnNvIGxpbmsgKGFzIGluIGRiMykgYW5kIHRoZSAuYSdzIC0KKyMgaXQgaXMgdGhlcmVmb3JlIGluY29tcGF0aWJsZSAoY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUKKyMgc2FtZSB0aW1lKSBhcyB0aGUgZGIzIHBhY2thZ2UKKyMgc29ydCBvdXQgdGhlIC5zbyBzaW5jZSB0aGV5IGRvIHZlcnNpb24gcHJpb3IgdG8gdGhlIC5zbworU09MSUJTID0gIi02Ki5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliZGIuc28gJHtsaWJkaXJ9L2xpYmRiX2N4eC5zbyIKKworI2NvbmZpZ3VyYXRpb24gLSBzZXQgaW4gbG9jYWwuY29uZiB0byBvdmVycmlkZQorIyBBbGwgdGhlIC0tZGlzYWJsZS0qIG9wdGlvbnMgcmVwbGFjZSAtLWVuYWJsZS1zbWFsbGJ1aWxkLCB3aGljaCBicmVha3MgYSBidW5jaCBvZiBzdHVmZiAoZWcuIHBvc3RmaXgpCitEQjZfQ09ORklHID89ICItLWVuYWJsZS1vX2RpcmVjdCAtLWRpc2FibGUtY3J5cHRvZ3JhcGh5IC0tZGlzYWJsZS1xdWV1ZSAtLWRpc2FibGUtcmVwbGljYXRpb24gLS1kaXNhYmxlLXZlcmlmeSAtLWRpc2FibGUtY29tcGF0MTg1IC0tZGlzYWJsZS1zcWwiCisKK0VYVFJBX09FQ09ORiA9ICIke0RCNl9DT05GSUd9IC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1jeHggLS13aXRoLXN5c3Jvb3QiCisKKyMgT3ZlcnJpZGUgdGhlIE1VVEVYIHNldHRpbmcgaGVyZSwgdGhlIFBPU0lYIGxpYnJhcnkgaXMKKyMgdGhlIGRlZmF1bHQgLSAiUE9TSVgvcHRocmVhZHMvbGlicmFyeSIuCisjIERvbid0IGlnbm9yZSB0aGUgbmljZSBTV1AgaW5zdHJ1Y3Rpb24gb24gdGhlIEFSTToKKyMgVGhlc2UgZW5hYmxlIHRoZSBBUk0gYXNzZW1ibGVyIG11dGV4IGNvZGUKK0FSTV9NVVRFWCA9ICItLXdpdGgtbXV0ZXg9QVJNL2djYy1hc3NlbWJseSIKK01VVEVYID0gIiIKK01VVEVYX2FybSA9ICIke0FSTV9NVVRFWH0iCitNVVRFWF9hcm1lYiA9ICIke0FSTV9NVVRFWH0iCitFWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IgorCisjIENhbmNlbCB0aGUgc2l0ZSBzdHVmZiAtIGl0J3Mgc2V0IGZvciBkYjMgYW5kIGRlc3Ryb3lzIHRoZQorIyBjb25maWd1cmUuCitDT05GSUdfU0lURSA9ICIiCitkb19jb25maWd1cmUoKSB7CisJZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICR7U30KKwlleHBvcnQgU1RSSVA9InRydWUiCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICdzfGhhcmRjb2RlX2ludG9fbGlicz15ZXN8aGFyZGNvZGVfaW50b19saWJzPW5vfCcgXAorCQkke0J9L2xpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAKKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MC8uCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwLy4KKwlsbiAtcyBkYjYwL2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmgKKwlsbiAtcyBkYjYwL2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaAorCisJIyBUaGUgZG9jcyBlbmQgdXAgaW4gL3Vzci9kb2NzIC0gbm90IHJpZ2h0LgorCWlmIHRlc3QgLWQgIiR7RH0vJHtwcmVmaXh9L2RvY3MiCisJdGhlbgorCQlta2RpciAtcCAiJHtEfS8ke2RhdGFkaXJ9IgorCQl0ZXN0ICEgLWQgIiR7RH0vJHtkb2NkaXJ9IiB8fCBybSAtcmYgIiR7RH0vJHtkb2NkaXJ9IgorCQltdiAiJHtEfS8ke3ByZWZpeH0vZG9jcyIgIiR7RH0vJHtkb2NkaXJ9IgorCWZpCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke1BOfS1jeHggPSAiZGV2LXNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNS4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2NjVmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNS4xLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgc3BlY2lmaWMgdG8gRGViaWFuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiAmIFNNQUlMX0dQTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWYwMWE1MjAzZDUwNTEyZmM0ODMwYjQzMzJiNjk2YTlmIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg3NTI0NTE4Y2Q1ODMzYTZhNGY3MDA3YjVkMWJkNWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTUzMWMyM2UwMTA1ZmUwMWNmYTkyODQ1N2E4MzQzYTFlOTQ3ZTI2MjFiM2NkNGQwNWY0ZTk2NTYwMjBjNjNiNyIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgLWUgJ3M6dGVtcGZpbGUuMSB3aGljaC4xOndoaWNoLjE6ZycgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAjIERlYmlhbiBwbGFjZXMgc29tZSB1dGlscyBpbnRvICR7YmFzZV9iaW5kaXJ9IGFzIGRvZXMgYnVzeWJveAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICBmb3IgYXBwIGluIHJ1bi1wYXJ0cyB0ZW1wZmlsZTsgZG8KKyAgICAgICAgICAgIG12ICR7RH0ke2JpbmRpcn0vJGFwcCAke0R9JHtiYXNlX2JpbmRpcn0vJGFwcAorICAgICAgICBkb25lCisgICAgZmkKK30KKworIyBOb3RlIHRoYXQgd2UgcGFja2FnZSB0aGUgdXBkYXRlLWFsdGVybmF0aXZlcyBuYW1lLgorIworUEFDS0FHRVMgPSsgIiR7UE59LXJ1bi1wYXJ0cyIKK0ZJTEVTXyR7UE59LXJ1bi1wYXJ0cyA9ICIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMuZGViaWFudXRpbHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1ydW4tcGFydHMiCisKKworQUxURVJOQVRJVkVfUFJJT1JJVFk9IjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImFkZC1zaGVsbCBpbnN0YWxsa2VybmVsIHJlbW92ZS1zaGVsbCBzYXZlbG9nIHRlbXBmaWxlIHdoaWNoIgorQUxURVJOQVRJVkVfJHtQTn0tcnVuLXBhcnRzID0gInJ1bi1wYXJ0cyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2FkZC1zaGVsbF09IiR7c2JpbmRpcn0vYWRkLXNoZWxsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2luc3RhbGxrZXJuZWxdPSIke3NiaW5kaXJ9L2luc3RhbGxrZXJuZWwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVtb3ZlLXNoZWxsXT0iJHtzYmluZGlyfS9yZW1vdmUtc2hlbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVuLXBhcnRzXT0iJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NhdmVsb2ddPSIke2JpbmRpcn0vc2F2ZWxvZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt0ZW1wZmlsZV09IiR7YmFzZV9iaW5kaXJ9L3RlbXBmaWxlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3doaWNoXT0iJHtiaW5kaXJ9L3doaWNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50XzEuNi4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50XzEuNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTQ3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJFbmNoYW50IFNwZWxsIGNoZWNrZXIgQVBJIExpYnJhcnkiCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFiaXNvdXJjZS5jb20vcHJvamVjdHMvZW5jaGFudC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5hYmlzb3VyY2UuY29tL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1FbmNoYW50IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1kZmNiYWJmOTEzMWRjOWE5NWZlYmVmNjc1M2EyOTU4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5jaGFudC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PThkODgxY2FhMWQzNzUyMzU2N2UxZDhmNzI2Njc1YTE4IgorCitERVBFTkRTID0gImFzcGVsbCBnbGliLTIuMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYWJpc291cmNlLmNvbS9kb3dubG9hZHMvZW5jaGFudC8ke1BWfS9lbmNoYW50LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImRlMTEwMTFhZmY4MDFkYzYxMDQyODI4MDQxZmI1OWM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmYWM5ZTdiZTdlOTQyNGIyYzU1NzBkOGFmZmU1NjhkYjM5Zjc1NzJjMTBlZDQ4ZDRlMTNjZGRmMDNmNzA5N2YiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtYXNwZWxsLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKwkJLS1lbmFibGUtYXNwZWxsIGJyX2N2X2JpbnJlbG9jPW5vIFwKKwkJIgorCitleHBvcnQgQ1hYRkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9IC1sc3RkYysrICIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS8qJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKi5zbyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qe1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyouYSIKKworUkRFUEVORFNfJHtQTn0gKz0gImFzcGVsbCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMzZmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorQWRkIGluc3RhbGwtcHRlc3QgcnVsZXMuCisKK1NpZ25lZC1vZmYtYnk6IEpvc2VwIFB1aWdkZW1vbnQgPGpvc2VwLnB1aWdkZW1vbnRAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXVyIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMS0wOC0xNiAxMDoxMzoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDQtMTIgMTg6MDI6MTYuNDczNzE1ODczICswMjAwCitAQCAtMzEsMyArMzEsOCBAQAorIAlkPWBkYXRlICcrJWQvJW0vJVknYDsgXAorIAlzZWQgJ3N8L1wqQERJU1RfREFURUBcKi98IiciJCRkIicifCcgJChzcmNkaXIpL3NyYy92ZXJzaW9uLmMgPiBcCisgCQkkKGRpc3RkaXIpL3NyYy92ZXJzaW9uLmMKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlAZm9yIHN1YmRpciBpbiAkKFNVQkRJUlMpOyBkbyBcCisrCQkkKE1BS0UpIC1DICQkc3ViZGlyIERFU1RESVI9JChERVNURElSKS8kJHN1YmRpciAkQDsgXAorKwlkb25lCitkaWZmIC11ciBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTEtMTEtMTEgMTk6Mzk6NDIuMDAwMDAwMDAwICswMTAwCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA0LTEyIDE4OjMwOjU3LjA2NjMwMTAzNyArMDIwMAorQEAgLTEzMiw0ICsxMzIsMTQgQEAKKyBkdGRlbF9MREFERCA9IC4uL3NyYy9saWJnZGJtLmxhIC4uL2NvbXBhdC9saWJnZGJtX2NvbXBhdC5sYQorIGRfY3JlYXRfY2VfTERBREQgPSAuLi9zcmMvbGliZ2RibS5sYSAuLi9jb21wYXQvbGliZ2RibV9jb21wYXQubGEKKyAKKytidWlsZHRlc3RzOiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKKyAKKytpbnN0YWxsLXB0ZXN0OiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKKysJQCQoSU5TVEFMTCkgLWQgJChERVNURElSKQorKwlAZm9yIGZpbGUgaW4gJF47IGRvIFwKKysJCWlmIFsgLXggLmxpYnMvJCRmaWxlIF07IHRoZW4gXAorKwkJCSQoSU5TVEFMTF9QUk9HUkFNKSAubGlicy8kJGZpbGUgJChERVNURElSKS8kJGZpbGU7IFwKKysJCWVsc2UgXAorKwkJCSQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGUgJChERVNURElSKSA7IFwKKysJCWZpIFwKKysJZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTVkYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gdGhlIGdtZGIgdGVzdCBzdWl0ZQorCitjZCB0ZXN0cworCisuL3Rlc3RzdWl0ZSBBVVRPVEVTVF9QQVRIPSRQV0QgYWJzX2J1aWxkZGlyPSRQV0QgQ09NUEFUPTEgfCBzZWQgJ3MvXlteMC05XSpcKFswLTldXCtcKTogXCguKlwpXChva1x8cGFzc1x8c2tpcHBlZFx8ZmFpbFx8RkFJTEVEXClcKC4qXCkkL1wzOiBcMiBcNC87cy8gXCsvIC9nO3MvXm9rL1BBU1MvO3MvXnNraXBwZWQvU0tJUC87cy9eZmFpbC9GQUlMLztzL15GQUlMRUQvRkFJTC8nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2I0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitPYmV5IExERkxBR1MKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2xkIHZlcnNpb25dCisKKy0tLSBnZGJtLTEuOC4zLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCitAQCAtMTU2LDEyICsxNTYsMTIgQEAgaW5zdGFsbC1jb21wYXQ6CisKKyBsaWJnZGJtLmxhOiAkKExPQkpTKSBnZGJtLmgKKwlybSAtZiBsaWJnZGJtLmxhCistCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gbGliZ2RibS5sYSAtcnBhdGggJChsaWJkaXIpIFwKKysJJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vIGxpYmdkYm0ubGEgLXJwYXRoICQobGliZGlyKSBcCisJCS12ZXJzaW9uLWluZm8gJChTSExJQl9WRVIpICQoTE9CSlMpCisKKyBsaWJnZGJtX2NvbXBhdC5sYTogJChDX0xPQkpTKSBnZGJtLmgKKwlybSAtZiBsaWJnZGJtX2NvbXBhdC5sYQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vIGxpYmdkYm1fY29tcGF0LmxhIC1ycGF0aCAkKGxpYmRpcikgXAorKwkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gbGliZ2RibV9jb21wYXQubGEgLXJwYXRoICQobGliZGlyKSBcCisJCS12ZXJzaW9uLWluZm8gJChTSExJQl9WRVIpICQoQ19MT0JKUykKKworIGdkYm0uaDoJZ2RibS5wcm90byBnZGJtZXJybm8uaCBnZGJtLnByb3RvMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xpYnRvb2wtbW9kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9saWJ0b29sLW1vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5ZDA0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9saWJ0b29sLW1vZGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBnZGJtLTEuOC4zL01ha2VmaWxlLmluLm9yaWcJMjAwNi0wMi0xNiAxNToxNzoyNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCTIwMDYtMDItMTYgMTU6MTg6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikgJChERVNURElSKSQobWFuM2RpcikgXAorIAkJJChERVNURElSKSQoaW5mb2RpcikKKy0JJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisrCSQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAtYyBsaWJnZGJtLmxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibS5sYQorIAkkKElOU1RBTExfREFUQSkgZ2RibS5oIFwKKyAJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2dkYm0uaAorIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dkYm0uMyBcCitAQCAtMTQyLDcgKzE0Miw3IEBACisgaW5zdGFsbC1jb21wYXQ6CisgCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikKKy0JJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm1fY29tcGF0LmxhIFwKKysJJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpIC1jIGxpYmdkYm1fY29tcGF0LmxhIFwKKyAJCSQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKyAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kYm0uaCBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9kYm0uaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL21ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OTE0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKKy0tLSBnZGJtLTEuOC4zL01ha2VmaWxlLmlufm1ha2VmaWxlCisrKysgZ2RibS0xLjguMy9NYWtlZmlsZS5pbgorQEAgLTIyLDYgKzIyLDcgQEAKKyBURVhJMkRWSSA9IHRleGkyZHZpCisgCisgREVGUyA9CisrREVTVERJUiA9CisgCisgIyBXaGVyZSB0aGUgc3lzdGVtIFtuXWRibSByb3V0aW5lcyBhcmUuLi4KKyBMSUJTID0gQExJQlNAIC1sYworQEAgLTEyNywyNiArMTI4LDI2IEBACisgcHJvZ3M6ICQoUFJPR1MpCisgCisgaW5zdGFsbDogbGliZ2RibS5sYSBnZGJtLmggZ2RibS5pbmZvCistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9ST09UKSQobGliZGlyKSBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpICQoSU5TVEFMTF9ST09UKSQobWFuM2RpcikgXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmZvZGlyKQorLQkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKElOU1RBTExfUk9PVCkkKGxpYmRpcikvbGliZ2RibS5sYQorLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSBnZGJtLmggXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9nZGJtLmgKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL2dkYm0uMyBcCistCQkkKElOU1RBTExfUk9PVCkkKG1hbjNkaXIpL2dkYm0uMworLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSAkKHNyY2RpcikvZ2RibS5pbmZvIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5mb2RpcikvZ2RibS5pbmZvCisrCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikgJChERVNURElSKSQobWFuM2RpcikgXAorKwkJJChERVNURElSKSQoaW5mb2RpcikKKysJJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisrCSQoSU5TVEFMTF9EQVRBKSBnZGJtLmggXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZ2RibS5oCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ2RibS4zIFwKKysJCSQoREVTVERJUikkKG1hbjNkaXIpL2dkYm0uMworKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dkYm0uaW5mbyBcCisrCQkkKERFU1RESVIpJChpbmZvZGlyKS9nZGJtLmluZm8KKyAKKyBpbnN0YWxsLWNvbXBhdDoKKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKQorIAkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibV9jb21wYXQubGEgXAorLQkJJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpL2xpYmdkYm1fY29tcGF0LmxhCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9kYm0uaCBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL2RibS5oCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9uZGJtLmggXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9uZGJtLmgKKysJCSQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9kYm0uaAorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL25kYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9uZGJtLmgKKyAKKyAjbGliZ2RibS5hOiAkKE9CSlMpIGdkYm0uaAorICMJcm0gLWYgbGliZ2RibS5hCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZjhjNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0MWRhMWI5ZmU0MmU2NDJjYmIyYzI0ZDVlMGM0ZDI0IgorCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzJjODMyNjgwY2YwOTk5Y2FlZGJlNWIyNjVjOGMxYmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGQ5MTJmNDRmMDVkMGIxNWE0YTVkOTZhNzZmODUyZTkwNWQwNTFiYjg4MDIyZmNkZmQ5OGI0M2JlMDkzZTNjMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIGxpYl9wYWNrYWdlIHB0ZXN0CisKKyMgTmVlZGVkIGZvciBkYm0gcHl0aG9uIG1vZHVsZQorRVhUUkFfT0VDT05GID0gIi1lbmFibGUtbGliZ2RibS1jb21wYXQiCisKKyMgU3RvcCBwcmVzZW5jZSBvZiBkYm0vbmJkbSBvbiB0aGUgaG9zdCBjb250YW1pbmF0aW5nIGJ1aWxkcworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2xpYl9uZGJtX21haW49bm8gYWNfY3ZfbGliX2RibV9tYWluPW5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCisgICAgIyB0aGVzZSBoZWFkZXJzCisgICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9nZGJtCisgICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKKyAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZGlmZnV0aWxzIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgLUMgdGVzdHMgYnVpbGR0ZXN0cworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY29tcGF0IFwKKyAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWNvbXBhdCA9ICIke2xpYmRpcn0vbGliZ2RibV9jb21wYXQke1NPTElCU30gXAorICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuOC4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDFiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJLZXkvdmFsdWUgZGF0YWJhc2UgbGlicmFyeSB3aXRoIGV4dGVuc2libGUgaGFzaGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGJtLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhlMjBlZWNlMjE0ZGY4ZWY5NTNlZDU4NTc4NjIxNTAiCisKK1BSID0gInI0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2RibS9nZGJtLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wtbW9kZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQxYjFkNWMwMjQ1YjFjMDBhZmY5MmRhNzUxZTlhYTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2MzNDAzMzhhMmUyOGI0MDA1OGFiOWViNTM1NGEyMWQ1M2Y4OGExNTgyZWEyMWJhMGJiMTg1YzM3YTI4MWRjOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2dkYm0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9kYm0uaCAke0R9JHtpbmNsdWRlZGlyfS8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9uZGJtLmggJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgIyBDcmVhdGUgYSBzeW1saW5rIHRvIG5kYm0uaCBhbmQgZ2RibS5oIGluIGluY2x1ZGUvZ2RibSB0byBsZXQgb3RoZXIgcGFja2FnZXMgdG8gZmluZAorICAgICMgdGhlc2UgaGVhZGVycworICAgIGxuIC1zZiAuLi9uZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vbmRibS5oCisgICAgbG4gLXNmIC4uL2dkYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9nZGJtLmgKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZGlzYWJsZS1zdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9kaXNhYmxlLXN0ZGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlY2IxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZGlzYWJsZS1zdGRjLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGF0Y2ggd2FzIHJlbW92ZWQgaW4gZjE4MWM2Y2U4YjMgd2hlbiBnbXAgNC4yLjEgd2FzIG1pc3Rha2VubHkKK2Ryb3BwZWQuCisKK1Vwc3RyZWFtIGlzIG5vdCBpbnRlcmVzdGVkIGluIHBhdGNoZXMgZm9yIGFuY2llbnQgdmVyc2lvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworIyAiZXh0ZXJuIGlubGluZSIgaW4gdHJhZGl0aW9uYWwgZ2NjIG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSAKKyMgaW5saW5lZCB3aGVyZXZlciBpdCdzIHNlZW4sIHdoaWxlIGluIEM5OSwgImV4dGVybiBpbmxpbmUiIG1lYW5zIHRoYXQgaQorIyB0aGUgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgaW5saW5lZCB3aGVyZSB0aGUgaW5saW5lIGRlZmluaXRpb24gaXMgCisjIHNlZW4gd2hpbGUgaW4gb3RoZXIgcGxhY2VzIGl0J3Mgbm90IGlubGluZWQ6CisjIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwNi0xMS9tc2cwMDAwNi5odG1sCisjCisjIGdtcCBjaGVja3MgIi0tc3RkPWdudTk5IiB0byB1c2UgQzk5IGNvbnZlbnRpb24gaG93ZXZlciBpdCBpbnRlcm5hbGx5IAorIyBkZWZpbmVzIHNvbWUgImV4dGVybiBpbmxpbmUiIGZ1bmN0aW9ucyBpbiBnbXAuaCwgd2hpY2ggaXMgaW5jbHVkZWQKKyMgYnkgbWFpbmx5IC5jIGZpbGVzIGFuZCBmaW5hbGx5IGxlYWQgYSBmbG9vZCBvZiByZWRlZmluaXRpb24gZnVuY3Rpb24KKyMgZXJyb3JzIHdoZW4gbGlua2luZyBvYmplY3RzIHRvZ2V0aGVyLgorIworIyBTbyBkaXNhYmxlIEM5OS9BTlNJIGRldGVjdGlvbiB0byBzdGljayB0byB0cmFuZGl0aW9uYWwgZ2NjIGJlaGF2aW9yCisjCisjIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xMworIworIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MispCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDQ1MGNjOTIuLmFhYjBiNTkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTE4NjksOSArMTg2OSw3IEBAIEFDX1NVQlNUKERFRk5fTE9OR19MT05HX0xJTUIpCisgCisgIyBUaGUgQyBjb21waWxlciBhbmQgcHJlcHJvY2Vzc29yLCBwdXQgaW50byBBTlNJIG1vZGUgaWYgcG9zc2libGUuCisgQUNfUFJPR19DQworLUFDX1BST0dfQ0NfU1REQworIEFDX1BST0dfQ1BQCistR01QX0hfQU5TSQorIAorIAorICMgVGhlIEMgY29tcGlsZXIgb24gdGhlIGJ1aWxkIHN5c3RlbSwgYW5kIGFzc29jaWF0ZWQgdGVzdHMuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhZWQwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDU2IEBACithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjoyMjQwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IE1ha2VmaWxlLmFtOjI4OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAyCisKKworVGhpcyBwYXRjaCB3YXMgcmVtb3ZlZCBpbiBmMTgxYzZjZThiMyB3aGVuIGdtcCA0LjIuMSB3YXMgbWlzdGFrZW5seQorZHJvcHBlZC4KKworVXBzdHJlYW0gaXMgbm90IGludGVyZXN0ZWQgaW4gcGF0Y2hlcyBmb3IgYW5jaWVudCB2ZXJzaW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKK0luZGV4OiBnbXAtNC4yLjEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTQuMi4xLm9yaWcvY29uZmlndXJlLmluCisrKysgZ21wLTQuMi4xL2NvbmZpZ3VyZS5pbgorQEAgLTY3LDcgKzY3LDcgQEAgZG5sCisgZG5sICBOb3RlIHRoYXQgdGhlcmUncyBhIGNvcHkgb2YgdGhlc2Ugb3B0aW9ucyBpbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLmFtLAorIGRubCAgc28gdXBkYXRlIHRoZXJlIHRvbyBpZiBjaGFuZ2luZyBhbnl0aGluZy4KKyBkbmwKKy1BTV9JTklUX0FVVE9NQUtFKFsxLjggZ251IG5vLWRlcGVuZGVuY2llcyAkKHRvcF9idWlsZGRpcikvYW5zaTJrbnJdKQorK0FNX0lOSVRfQVVUT01BS0UoWzEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzXSkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oOmNvbmZpZy5pbikKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKK0BAIC0yMDIyLDkgKzIwMjIsNiBAQCBmaQorIGVjaG8gIiAgICAgIE1QTl9QQVRIPVwiJHBhdGhcIiIKKyAKKyAKKy0jIEF1dG9tYWtlIGFuc2kya25yIHN1cHBvcnQuCistQU1fQ19QUk9UT1RZUEVTCistCisgR01QX1BST0dfQVIKKyBHTVBfUFJPR19OTQorIAorSW5kZXg6IGdtcC00LjIuMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC00LjIuMS5vcmlnL01ha2VmaWxlLmFtCisrKysgZ21wLTQuMi4xL01ha2VmaWxlLmFtCitAQCAtMjcsNyArMjcsNyBAQAorICMgTWFrZWZpbGVzIGluIHN1YmRpcmVjdG9yaWVzLCBidXQgaGVyZSB3ZSBtdXN0IG9taXQgaXQgc28gYXV0b21ha2UgZ2l2ZXMKKyAjIHRoZSBhY3R1YWwgYW5zaTJrbnIgYnVpbGQgcnVsZSwgbm90ICJjZCAkKHRvcF9idWlsZGRpcikgJiYgbWFrZSBhbnNpMmtuciIuCisgIworLUFVVE9NQUtFX09QVElPTlMgPSAxLjggZ251IG5vLWRlcGVuZGVuY2llcyBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAxLjggZ251IG5vLWRlcGVuZGVuY2llcworIAorIAorICMgTGlidG9vbCAtdmVyc2lvbi1pbmZvIGZvciBsaWJnbXAubGEgYW5kIGxpYm1wLmxhLiAgU2VlICJWZXJzaW9uaW5nIiBpbiB0aGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYW1kNjQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FtZDY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NGQxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FtZDY0LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ21wLTUuMC4zL2xvbmdsb25nLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNS4wLjMub3JpZy9sb25nbG9uZy5oCisrKysgZ21wLTUuMC4zL2xvbmdsb25nLmgKK0BAIC05OTQsOCArOTk0LDEwIEBAIGV4dGVybiBVV3R5cGUgX19NUE4odWRpdl9xcm5uZCkgX1BST1RPICgKKyAgICBjb3VudCBpcyBvbmx5IGFuIGludC4gKi8KKyAjZGVmaW5lIGNvdW50X3RyYWlsaW5nX3plcm9zKGNvdW50LCB4KQkJCQkJXAorICAgZG8gewkJCQkJCQkJCVwKKysgICAgVURJdHlwZSBfX2NidG1wOwkJCQkJCQlcCisgICAgIEFTU0VSVCAoKHgpICE9IDApOwkJCQkJCQlcCistICAgIF9fYXNtX18gKCJic2ZxICUxLCVxMCIgOiAiPXIiIChjb3VudCkgOiAicm0iICgoVURJdHlwZSkoeCkpKTsJXAorKyAgICBfX2FzbV9fICgiYnNmcSAlMSwlMCIgOiAiPXIiIChfX2NidG1wKSA6ICJybSIgKChVREl0eXBlKSh4KSkpOwlcCisrICAgIChjb3VudCkgPSBfX2NidG1wOwkJCQkJCQlcCisgICB9IHdoaWxlICgwKQorICNlbmRpZiAvKiB4ODZfNjQgKi8KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FwcGVuZF91c2VyX3Byb3ZpZGVkX2ZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTM4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FwcGVuZF91c2VyX3Byb3ZpZGVkX2ZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitBcHBlbmQgdGhlIHVzZXIgcHJvdmlkZWQgZmxhZ3MgdG8gdGhlIGF1dG8tZGV0ZWN0ZWQgb25lcy4KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogZ21wLTUuMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC01LjEuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTAyLTExIDE1OjA1OjQ0LjkyNTIwMjQwMyArMDIwMAorKysrIGdtcC01LjEuMS9jb25maWd1cmUuYWMJMjAxNC0wMi0xMSAxNToxOTowMy45MTg1MTEzOTggKzAyMDAKK0BAIC0xNzQ1LDggKzE3NDUsMTIgQEAKKyBFT0YKKyAKKyAKKy10ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CistdGVzdF9DUFBGTEFHUz0ke0NQUEZMQUdTK3NldH0KKyt0ZXN0X0NGTEFHUz0KKyt0ZXN0X0NQUEZMQUdTPQorKworK3VzZXJfQ0ZMQUdTPSRDRkxBR1MKKyt1c2VyX0NQUEZMQUdTPSRDUFBGTEFHUworK3VzZXJfQ1hYRkxBR1M9JENYWEZMQUdTCisgCisgZm9yIGFiaSBpbiAkYWJpbGlzdDsgZG8KKyAgIGFiaV9sYXN0PSIkYWJpIgorQEAgLTIxNzUsNyArMjE3OSw3IEBACisgd2FudF9jeHg9bm8KKyBBQ19QUk9HX0NYWAorIGlmIHRlc3QgJGVuYWJsZV9jeHggIT0gbm87IHRoZW4KKy0gIHRlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CisrICB0ZXN0X0NYWEZMQUdTPQorIAorICAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQVNfTUVTU0FHRV9MT0dfRkQoKQorICAgY3h4ZmxhZ3NfYWNfcHJvZ19jeHg9JENYWEZMQUdTCitAQCAtMjIwMiw3ICsyMjA2LDcgQEAKKyAgICMgQXV0b21ha2UgaW5jbHVkZXMgJENQUEZMQUdTIGluIGEgQysrIGNvbXBpbGUsIHNvIHdlIGRvIHRoZSBzYW1lIGhlcmUuCisgICAjCisgICBmb3IgY3h4ZmxhZ3NfY2hvaWNlIGluICRjeHhmbGFnc19saXN0OyBkbworLSAgICBldmFsIENYWEZMQUdTPVwiXCRjeHhmbGFnc18kY3h4ZmxhZ3NfY2hvaWNlXCIKKysgICAgZXZhbCBDWFhGTEFHUz1cIlwkY3h4ZmxhZ3NfJGN4eGZsYWdzX2Nob2ljZSAkdXNlcl9DWFhGTEFHU1wiCisgICAgIEdNUF9QUk9HX0NYWF9XT1JLUygkQ1hYICRDUFBGTEFHUyAkQ1hYRkxBR1MsCisgICAgICAgW3dhbnRfY3h4PXllcworICAgICAgIGJyZWFrXSkKK0BAIC0yMjkyLDYgKzIyOTYsOCBAQAorICMgIGRvbmUKKyBmaQorIAorK0NGTEFHUz0iJENGTEFHUyAkdXNlcl9DRkxBR1MiCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAkdXNlcl9DUFBGTEFHUyIKKyAKKyBjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgRGVjaWRlZDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5ZGEzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCB0byBhcHBseSB0byBnbXAtNS4xLjAKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworLS0tCisgYWNpbmNsdWRlLm00IHwgMzIgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyBjb25maWd1cmUuYWMgfCAyNiArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hY2luY2x1ZGUubTQgYi9hY2luY2x1ZGUubTQKK2luZGV4IDIyNzcxMmEuLjE5OWFhNmYgMTAwNjQ0CistLS0gYS9hY2luY2x1ZGUubTQKKysrKyBiL2FjaW5jbHVkZS5tNAorQEAgLTQwLDI5ICs0MCwyOSBAQCBkbmwgICAgYV9vdXQuZXhlIC0gT3BlblZNUyBERUMgQyBjYWxsZWQgdmlhIEdOViB3cmFwcGVyIChnbnYuc291cmNlZm9yZ2UubmV0KQorIGRubCAgICBjb25mdGVzdC5leGUgLSB2YXJpb3VzIERPUyBjb21waWxlcnMKKyAKKyAKKy1kZWZpbmUoSUE2NF9QQVRURVJOLAorK2RlZmluZShbSUE2NF9QQVRURVJOXSwKKyBbW2lhNjQqLSotKiB8IGl0YW5pdW0tKi0qIHwgaXRhbml1bTItKi0qXV0pCisgCisgZG5sICBOZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIG1hdGNoIG02ODExLCBtNjgxMiwgbTY4aGMxMSBhbmQgbTY4aGMxMiwgYWxsCisgZG5sICBvZiB3aGljaCBjb25maWcuc3ViIGFjY2VwdHMuICAoVGhvdWdoIG5vbmUgb2Ygd2hpY2ggYXJlIGxpa2VseSB0byB3b3JrCisgZG5sICB3aXRoIEdNUC4pCisgZG5sCistZGVmaW5lKE02OEtfUEFUVEVSTiwKKytkZWZpbmUoW002OEtfUEFUVEVSTl0sCisgW1ttNjhrLSotKiB8IG02OFswLTldWzAtOV1bMC05XS0qLSpdXSkKKyAKKy1kZWZpbmUoUE9XRVJQQzY0X1BBVFRFUk4sCisrZGVmaW5lKFtQT1dFUlBDNjRfUEFUVEVSTl0sCisgW1twb3dlcnBjNjQtKi0qIHwgcG93ZXJwYzY0bGUtKi0qIHwgcG93ZXJwYzYyMC0qLSogfCBwb3dlcnBjNjMwLSotKiB8IHBvd2VycGM5NzAtKi0qIHwgcG93ZXJbMy05XS0qLSpdXSkKKyAKKy1kZWZpbmUoUzM5MF9QQVRURVJOLAorK2RlZmluZShbUzM5MF9QQVRURVJOXSwKKyBbW3MzOTAtKi0qIHwgejkwMGVzYS0qLSogfCB6OTkwZXNhLSotKiB8IHo5ZXNhLSotKiB8IHoxMGVzYS0qLSogfCB6MTk2ZXNhLSotKl1dKQorIAorLWRlZmluZShTMzkwWF9QQVRURVJOLAorK2RlZmluZShbUzM5MFhfUEFUVEVSTl0sCisgW1tzMzkweC0qLSogfCB6OTAwLSotKiB8IHo5OTAtKi0qIHwgejktKi0qIHwgejEwLSotKiB8IHoxOTYtKi0qXV0pCisgCistZGVmaW5lKFg4Nl9QQVRURVJOLAorK2RlZmluZShbWDg2X1BBVFRFUk5dLAorIFtbaT84NiotKi0qIHwga1s1LThdKi0qLSogfCBwZW50aXVtKi0qLSogfCBhdGhsb24tKi0qIHwgdmlhYzMqLSotKiB8IGdlb2RlKi0qLSogfCBhdG9tLSotKl1dKQorIAorLWRlZmluZShYODZfNjRfUEFUVEVSTiwKKytkZWZpbmUoW1g4Nl82NF9QQVRURVJOXSwKKyBbW2F0aGxvbjY0LSotKiB8IGs4LSotKiB8IGsxMC0qLSogfCBib2JjYXQtKi0qIHwgamFndWFyLSotKiB8IGJ1bGxkb3plci0qLSogfCBwaWxlZHJpdmVyLSotKiB8IHN0ZWFtcm9sbGVyLSotKiB8IGV4Y2F2YXRvci0qLSogfCBwZW50aXVtNC0qLSogfCBhdG9tLSotKiB8IGNvcmUyLSotKiB8IGNvcmVpKi0qLSogfCB4ODZfNjQtKi0qIHwgbmFuby0qLSpdXSkKKyAKKyBkbmwgIEdNUF9GQVRfU1VGRklYKERTVFZBUiwgRElSRUNUT1JZKQorQEAgLTgwLDcgKzgwLDcgQEAgZG5sICAgICAgeDg2ICAgICAgICAgLT4gIHg4NgorIGRubCAgICAgIHg4Ni9rNiAgICAgIC0+ICBrNgorIGRubCAgICAgIHg4Ni9rNi9tbXggIC0+ICBrNl9tbXgKKyAKKy1kZWZpbmUoR01QX0ZBVF9TVUZGSVgsCisrZGVmaW5lKFtHTVBfRkFUX1NVRkZJWF0sCisgW1skMT1gZWNobyAkMiB8IHNlZCAtZSAnL1wvL3M6XlteL10qLzo6JyAtZSAnczpbXFwvXTpfOmcnYF1dKQorIAorIAorQEAgLTg5LDcgKzg5LDcgQEAgZG5sICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sICBFbWl0IGNvZGUgdG8gcmVtb3ZlIGFueSBvY2N1cnJlbmNlIG9mIElURU0gZnJvbSAkTElTVFZBUi4gIElURU0gY2FuIGJlIGEKKyBkbmwgIHNoZWxsIGV4cHJlc3Npb24gbGlrZSAkZm9vIGlmIGRlc2lyZWQuCisgCistZGVmaW5lKEdNUF9SRU1PVkVfRlJPTV9MSVNULAorK2RlZmluZShbR01QX1JFTU9WRV9GUk9NX0xJU1RdLAorIFtyZW1vdmVfZnJvbV9saXN0X3RtcD0KKyBmb3IgcmVtb3ZlX2Zyb21fbGlzdF9pIGluICRbXVskMV07IGRvCisgICBpZiB0ZXN0ICRyZW1vdmVfZnJvbV9saXN0X2kgPSBbJDJdOyB0aGVuIDo7CitAQCAtMTA1LDEyICsxMDUsMTIgQEAgZG5sICBHTVBfU1RSSVBfUEFUSChzdWJkaXIpCisgZG5sICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sICBTdHJpcCBlbnRyaWVzICovc3ViZGlyIGZyb20gJHBhdGggYW5kICRmYXRfcGF0aC4KKyAKKy1kZWZpbmUoR01QX1NUUklQX1BBVEgsCisrZGVmaW5lKFtHTVBfU1RSSVBfUEFUSF0sCisgW0dNUF9TVFJJUF9QQVRIX1ZBUihwYXRoLCBbJDFdKQorIEdNUF9TVFJJUF9QQVRIX1ZBUihmYXRfcGF0aCwgWyQxXSkKKyBdKQorIAorLWRlZmluZShHTVBfU1RSSVBfUEFUSF9WQVIsCisrZGVmaW5lKFtHTVBfU1RSSVBfUEFUSF9WQVJdLAorIFt0bXBfcGF0aD0KKyBmb3IgaSBpbiAkW11bJDFdOyBkbworICAgY2FzZSAkaSBpbgorQEAgLTEzMSw3ICsxMzEsNyBAQCBkbmwKKyBkbmwgIER1bW15IHZhbHVlIGZvciBHTVBfTElNQl9CSVRTIGlzIGVub3VnaAorIGRubCAgZm9yIGFsbCBjdXJyZW50IGNvbmZpZ3VyZS10aW1lIHVzZXMgb2YgZ21wLmguCisgCistZGVmaW5lKEdNUF9JTkNMVURFX0dNUF9ILAorK2RlZmluZShbR01QX0lOQ0xVREVfR01QX0hdLAorIFtbI2RlZmluZSBfX0dNUF9XSVRISU5fQ09ORklHVVJFIDEgICAvKiBpZ25vcmUgdGVtcGxhdGUgc3R1ZmYgKi8KKyAjZGVmaW5lIEdNUF9OQUlMX0JJVFMgJEdNUF9OQUlMX0JJVFMKKyAjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMTIzCitAQCAtMTQ2LDcgKzE0Niw3IEBAIGRubCAgRXhwYW5kIGF0IGF1dG9jb25mIHRpbWUgdG8gdGhlIHZhbHVlIG9mIGEgIiNkZWZpbmUgTkFNRSIgZnJvbSB0aGUgZ2l2ZW4KKyBkbmwgIEZJTEUuICBUaGUgcmVnZXhwcyBoZXJlIGFyZW4ndCB2ZXJ5IHJ1Z2dlZCwgYnV0IGFyZSBlbm91Z2ggZm9yIGdtcC4KKyBkbmwgIC9kZXYvbnVsbCBhcyBhIHBhcmFtZXRlciBwcmV2ZW50cyBhIGhhbmcgaWYgJDIgaXMgYWNjaWRlbnRhbGx5IG9taXR0ZWQuCisgCistZGVmaW5lKEdNUF9IRUFERVJfR0VUVkFMLAorK2RlZmluZShbR01QX0hFQURFUl9HRVRWQUxdLAorIFtwYXRzdWJzdChwYXRzdWJzdCgKKyBlc3lzY21kKFtncmVwICJeI2RlZmluZSAkMSAiICQyIC9kZXYvbnVsbCAyPi9kZXYvbnVsbF0pLAorIFteLiokMVsgCV0rXSxbXSksCitAQCAtMTYwLDcgKzE2MCw3IEBAIGRubCAgVGhlIGdtcCB2ZXJzaW9uIG51bWJlciwgZXh0cmFjdGVkIGZyb20gdGhlICNkZWZpbmVzIGluIGdtcC1oLmluIGF0CisgZG5sICBhdXRvY29uZiB0aW1lLiAgVHdvIGRpZ2l0cyBsaWtlIDMuMCBpZiBwYXRjaGxldmVsIDw9IDAsIG9yIHRocmVlIGRpZ2l0cworIGRubCAgbGlrZSAzLjAuMSBpZiBwYXRjaGxldmVsID4gMC4KKyAKKy1kZWZpbmUoR01QX1ZFUlNJT04sCisrZGVmaW5lKFtHTVBfVkVSU0lPTl0sCisgW0dNUF9IRUFERVJfR0VUVkFMKF9fR05VX01QX1ZFUlNJT04sZ21wLWguaW4pW11kbmwKKyAuR01QX0hFQURFUl9HRVRWQUwoX19HTlVfTVBfVkVSU0lPTl9NSU5PUixnbXAtaC5pbilbXWRubAorIC5HTVBfSEVBREVSX0dFVFZBTChfX0dOVV9NUF9WRVJTSU9OX1BBVENITEVWRUwsZ21wLWguaW4pXSkKK0BAIC0xNTI0LDcgKzE1MjQsOSBAQCBlc2FjCisgZWNobyBbImRlZmluZSg8Q09ORklHX1RPUF9TUkNESVI+LDxcYCR0bXAnPikiXSA+PiRnbXBfdG1wY29uZmlnbTQKKyAKKyAjIEFsbCBDUFVzIHVzZSBhc20tZGVmcy5tNAorLWVjaG8gWyJpbmNsdWRlXVsoQ09ORklHX1RPUF9TUkNESVJcYC9tcG4vYXNtLWRlZnMubTQnKSJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIC1uIFsiaW5jbHVkZSgiXSA+PiRnbXBfdG1wY29uZmlnbTRpCisrZWNobyAtbiBbIkNPTkZJR19UT1BfU1JDRElSXGAvbXBuL2FzbS1kZWZzLm00JyJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIFsiKSJdID4+JGdtcF90bXBjb25maWdtNGkKKyBdKQorIAorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNjRiMmM1MC4uZjA3YjgyMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzksMTQgKzM5LDYgQEAgQUNfUkVWSVNJT04oJFJldmlzaW9uJCkKKyBBQ19QUkVSRVEoMi41OSkKKyBBQ19JTklUKEdOVSBNUCwgR01QX1ZFUlNJT04sIFtnbXAtYnVnc0BnbXBsaWIub3JnLCBzZWUgaHR0cHM6Ly9nbXBsaWIub3JnL21hbnVhbC9SZXBvcnRpbmctQnVncy5odG1sXSwgZ21wKQorIEFDX0NPTkZJR19TUkNESVIoZ21wLWltcGwuaCkKKy1tNF9wYXR0ZXJuX2ZvcmJpZChbXlsgXHRdKkdNUF9dKQorLW00X3BhdHRlcm5fYWxsb3coR01QX0xERkxBR1MpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTElNQl9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX01QQVJBTV9IX1NVR0dFU1QpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTkFJTF9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX05VTUJfQklUUykKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9OT05TVERfQUJJKQorLW00X3BhdHRlcm5fYWxsb3coR01QX0NQVV9UWVBFKQorIAorICMgSWYgLS10YXJnZXQgaXMgbm90IHVzZWQgdGhlbiAkdGFyZ2V0X2FsaWFzIGlzIGVtcHR5LCBidXQgaWYgc2F5CisgIyAiLi9jb25maWd1cmUgYXRobG9uLXBjLWZyZWVic2QzLjUiIGlzIHVzZWQsIHRoZW4gYWxsIHRocmVlIG9mCitAQCAtMzQ4LDcgKzM0MCw3IEBAIEFIX1ZFUkJBVElNKFtIQVZFX0hPU1RfQ1BVXzFdLAorICMgQWZ0ZXIgR01QIHNwZWNpZmljIHNlYXJjaGVzIGFuZCB0ZXN0cywgdGhlIHN0YW5kYXJkIGF1dG9jb25mIEFDX1BST0dfQ0MgaXMKKyAjIGNhbGxlZC4gIFVzZXIgc2VsZWN0aW9ucyBvZiBDQyBldGMgYXJlIHJlc3BlY3RlZC4KKyAjCistIyBDYXJlIGlzIHRha2VuIG5vdCB0byB1c2UgbWFjcm9zIGxpa2UgQUNfVFJZX0NPTVBJTEUgZHVyaW5nIHRoZSBHTVAKKysjIENhcmUgaXMgdGFrZW4gbm90IHRvIHVzZSBtYWNyb3MgbGlrZSBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbXV0pXSxbXSxbXSkgZHVyaW5nIHRoZSBHTVAKKyAjIHByZS10ZXN0aW5nLCBzaW5jZSB0aGV5IG9mIGNvdXJzZSBkZXBlbmQgb24gQUNfUFJPR19DQywgYW5kIGFsc28gc29tZSBvZgorICMgdGhlbSBjYWNoZSB0aGVpciByZXN1bHRzLCB3aGljaCBpcyBub3Qgd2FudGVkLgorICMKK0BAIC00NDAsNyArNDMyLDcgQEAgYWJpbGlzdD0ic3RhbmRhcmQiCisgIyBGSVhNRTogV2UnZCBsaWtlIHRvIHByZWZlciBhbiBBTlNJIGNvbXBpbGVyLCBwZXJoYXBzIGJ5IHByZWZlcnJpbmcKKyAjIGM4OSBvdmVyIGNjIGhlcmUuICBCdXQgbm90ZSB0aGF0IG9uIEhQLVVYIGM4OSBwcm92aWRlcyBhIGNhc3RyYXRlZAorICMgZW52aXJvbm1lbnQsIGFuZCB3b3VsZCB3YW50IHRvIGJlIGV4Y2x1ZGVkIHNvbWVob3cuICBNYXliZQorLSMgQUNfUFJPR19DQ19TVERDIGFscmVhZHkgZG9lcyBlbm91Z2ggdG8gc3RpY2sgY2MgaW50byBBTlNJIG1vZGUgYW5kCisrIyAgYWxyZWFkeSBkb2VzIGVub3VnaCB0byBzdGljayBjYyBpbnRvIEFOU0kgbW9kZSBhbmQKKyAjIHdlIGRvbid0IG5lZWQgdG8gd29ycnkuCisgIworIGNjbGlzdD0iZ2NjIGNjIgorQEAgLTE4NDMsNyArMTgzNSw3IEBAIGVzYWMKKyBDRkxBR1Nfb3JfdW5zZXQ9JHtDRkxBR1MtJyh1bnNldCknfQorIENQUEZMQUdTX29yX3Vuc2V0PSR7Q1BQRkxBR1MtJyh1bnNldCknfQorIAorLWNhdCA+JkFDX0ZEX0NDIDw8RU9GCisrY2F0ID4mQVNfTUVTU0FHRV9MT0dfRkQoKSA8PEVPRgorIFVzZXI6CisgQUJJPSRBQkkKKyBDQz0kQ0MKK0BAIC0yMjY0LDcgKzIyNTYsNiBAQCBBQ19TVUJTVChERUZOX0xPTkdfTE9OR19MSU1CKQorIAorICMgVGhlIEMgY29tcGlsZXIgYW5kIHByZXByb2Nlc3NvciwgcHV0IGludG8gQU5TSSBtb2RlIGlmIHBvc3NpYmxlLgorIEFDX1BST0dfQ0MKKy1BQ19QUk9HX0NDX1NUREMKKyBBQ19QUk9HX0NQUAorIAorIAorQEAgLTIyODYsMTEgKzIyNzcsMTEgQEAgQUNfU1VCU1QoQ0NBUykKKyAKKyAjIFRoZSBDKysgY29tcGlsZXIsIGlmIGRlc2lyZWQuCisgd2FudF9jeHg9bm8KKytBQ19QUk9HX0NYWAorIGlmIHRlc3QgJGVuYWJsZV9jeHggIT0gbm87IHRoZW4KKyAgIHRlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CistICBBQ19QUk9HX0NYWAorIAorLSAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQUNfRkRfQ0MKKysgIGVjaG8gIkNYWEZMQUdTIGNob3NlbiBieSBhdXRvY29uZjogJENYWEZMQUdTIiA+JkFTX01FU1NBR0VfTE9HX0ZEKCkKKyAgIGN4eGZsYWdzX2FjX3Byb2dfY3h4PSRDWFhGTEFHUworICAgY3h4ZmxhZ3NfbGlzdD1hY19wcm9nX2N4eAorIAorQEAgLTI0MTIsNyArMjQwMyw3IEBAIGlmIHRlc3QgIiRlbmFibGVfYXNzZW1ibHkiID0gIm5vIjsgdGhlbgorIGZpCisgCisgCistY2F0ID4mQUNfRkRfQ0MgPDxFT0YKKytjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgRGVjaWRlZDoKKyBBQkk9JEFCSQorIENDPSRDQworQEAgLTM3ODEsNyArMzc3Miw3IEBAIEdNUF9GSU5JU0gKKyAjIEZJWE1FOiBVcGNvbWluZyB2ZXJzaW9uIG9mIGF1dG9jb25mL2F1dG9tYWtlIG1heSBub3QgbGlrZSBicm9rZW4gbGluZXMuCisgIyAgICAgICAgUmlnaHQgbm93IGF1dG9tYWtlIGlzbid0IGFjY2VwdGluZyB0aGUgbmV3IEFDX0NPTkZJR19GSUxFUyBzY2hlbWUuCisgCistQUNfT1VUUFVUKE1ha2VmaWxlCQkJCQkJCVwKKytBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlCQkJCQkJCVwKKyAgIG1wZi9NYWtlZmlsZSBtcG4vTWFrZWZpbGUgbXBxL01ha2VmaWxlCQkJCVwKKyAgIG1wei9NYWtlZmlsZSBwcmludGYvTWFrZWZpbGUgc2NhbmYvTWFrZWZpbGUgcmFuZC9NYWtlZmlsZSBjeHgvTWFrZWZpbGUgXAorICAgdGVzdHMvTWFrZWZpbGUgdGVzdHMvZGV2ZWwvTWFrZWZpbGUJCQkJCVwKK0BAIC0zNzkwLDcgKzM3ODEsOCBAQCBBQ19PVVRQVVQoTWFrZWZpbGUJCQkJCQkJXAorICAgdGVzdHMvY3h4L01ha2VmaWxlCQkJCQkJCVwKKyAgIGRvYy9NYWtlZmlsZSB0dW5lL01ha2VmaWxlCQkJCQkJXAorICAgZGVtb3MvTWFrZWZpbGUgZGVtb3MvY2FsYy9NYWtlZmlsZSBkZW1vcy9leHByL01ha2VmaWxlCQlcCistICBnbXAuaDpnbXAtaC5pbikKKysgIGdtcC5oOmdtcC1oLmluXSkKKytBQ19PVVRQVVQKKyAKKyBBQ19NU0dfTk9USUNFKFtzdW1tYXJ5IG9mIGJ1aWxkIG9wdGlvbnM6CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvZ21wLTYuMC4wLXBwYzY0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9nbXAtNi4wLjAtcHBjNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExM2I0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvZ21wLTYuMC4wLXBwYzY0LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4KKworVGhpcyBwYXRjaCB3aXRoIHB1bGxlZCBmcm9tIGdtcC4KK2h0dHBzOi8vZ21wbGliLm9yZy9yZXBvL2dtcC9yZXYvNGE2ZDI1OGI0NjdmCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAZ21wbGliLm9yZz4KKyMgRGF0ZSAxMzk1ODM1MDY4IC0zNjAwCisjIE5vZGUgSUQgNGE2ZDI1OGI0NjdmNjYxZGEwODk0Y2M2MGVjZDA2MGYyZTNjNjdjNworIyBQYXJlbnQgIDMwMWNlMjc4ODgyNmEyZDRkMjcyNWJkNWNmMDFlOTk4NjM4ZGIzN2EKK1Byb3ZpZGUgZGVmYXVsdCBmb3IgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRC4KKworZGlmZiAtciAzMDFjZTI3ODg4MjYgLXIgNGE2ZDI1OGI0NjdmIG1wbi9wb3dlcnBjNjQvbW9kZTY0L2djZF8xLmFzbQorLS0tIGEvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtICAgIFR1ZSBNYXIgMjUgMTU6MzQ6NTIgMjAxNCArMDEwMAorKysrIGIvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtICAgIFdlZCBNYXIgMjYgMTI6NTc6NDggMjAxNCArMDEwMAorQEAgLTQzLDYgKzQzLDkgQEAKKyBkZWZpbmUoYG4nLCAgICAgYHI0JykKKyBkZWZpbmUoYHYwJywgICAgYHI1JykKKworK2lmZGVmKGBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEJywsCisrICBgZGVmaW5lKGBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEJywzMCknKQorKworIEVYVEVSTl9GVU5DKG1wbl9tb2RfMSkKKyBFWFRFUk5fRlVOQyhtcG5fbW9kZXhhY3RfMWNfb2RkKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC91c2UtaW5jbHVkZWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvdXNlLWluY2x1ZGVkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5MDRhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvdXNlLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnbXAtNC4yLjQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNC4yLjQub3JpZy9NYWtlZmlsZS5hbQkyMDA4LTA5LTEwIDE5OjMxOjI3LjAwMDAwMDAwMCArMDAwMAorKysrIGdtcC00LjIuNC9NYWtlZmlsZS5hbQkyMDA5LTA3LTA2IDIwOjE5OjE5LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwNiw3ICsxMDYsNyBAQAorICMgYnV0IGFueW9uZSBrbm93bGVkZ2FibGUgZW5vdWdoIHRvIGJlIHBsYXlpbmcgd2l0aCBleGVjX3ByZWZpeCB3aWxsIGJlIGFibGUKKyAjIHRvIGFkZHJlc3MgdGhhdC4KKyAjCistaW5jbHVkZWV4ZWNkaXIgPSAkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCisraW5jbHVkZWV4ZWNkaXIgPSAkKGluY2x1ZGVkaXIpCisgaW5jbHVkZV9IRUFERVJTID0gJChHTVBYWF9IRUFERVJTX09QVElPTikKKyBub2Rpc3RfaW5jbHVkZWV4ZWNfSEVBREVSUyA9IGdtcC5oICQoTVBCU0RfSEVBREVSU19PUFRJT04pCisgbGliX0xUTElCUkFSSUVTID0gbGliZ21wLmxhICQoR01QWFhfTFRMSUJSQVJJRVNfT1BUSU9OKSAkKE1QQlNEX0xUTElCUkFSSUVTX09QVElPTikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1MmEzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkdOVSBtdWx0aXByZWNpc2lvbiBhcml0aG1ldGljIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTVAgaXMgYSBmcmVlIGxpYnJhcnkgZm9yIGFyYml0cmFyeSBwcmVjaXNpb24gYXJpdGhtZXRpYywgb3BlcmF0aW5nIG9uIHNpZ25lZCBpbnRlZ2VycywgcmF0aW9uYWwgbnVtYmVycywgYW5kIGZsb2F0aW5nIHBvaW50IG51bWJlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vZ21wbGliLm9yZy8iCisKK1JFVklTSU9OID89ICIiCitTUkNfVVJJID0gImh0dHBzOi8vZ21wbGliLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0ke1JFVklTSU9OfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtcmVhZGxpbmU9eWVzLC0td2l0aC1yZWFkbGluZT1ubyxyZWFkbGluZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOGMwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzQuMi4xLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgZ21wLmluYworCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04OTJmNTY5YTU1NWJhOWMwN2E1NjhhN2MwYzRmYTYzYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ21wLWguaW47YmVnaW5saW5lPTY7ZW5kbGluZT0yMTttZDU9ZTA1NmY3NGExMmMzMjc3ZDczMGRiY2ZiODVkMmNhMzQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXN0ZGMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDkxYzU2ZTBlMWNjYTZiMDliMTdiNjlkNDdlZjE4ZTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDA3ZmZjYjM3ZWVjZWMzNWM1ZWM3MjUxNmQxMGIzNWZkZjZlNmZlZjFmY2YxZGNkMzdlMzBiOGNiZjhiZjk0MSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzYuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YjYzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzYuMC4wLmJiCkBAIC0wLDAgKzEsMzMgQEAKK3JlcXVpcmUgZ21wLmluYworCitMSUNFTlNFPSJHUEx2MisgfCBMR1BMdjMrIgorCitSRVZJU0lPTj0iYSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorIgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hbWQ2NC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FwcGVuZF91c2VyX3Byb3ZpZGVkX2ZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nbXAtNi4wLjAtcHBjNjQucGF0Y2ggXAorICAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImI3ZmYyZDg4Y2FlN2Y4MDg1YmQ1MDA2MDk2ZWVkNDcwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdmOGU5YTgwNGI5YzZkMDcxNjRjZjc1NDIwN2JlODM4ZWNlMTIxOTQyNWQ2NGUyOGNmYTNlNzBkNWM3NTlhYWYiCisKK2FjcGF0aHMgPSAiIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLWVuYWJsZS1jeHg9ZGV0ZWN0IgorCitQQUNLQUdFUyA9KyAibGliZ21weHgiCitGSUxFU19saWJnbXB4eCA9ICIke2xpYmRpcn0vbGliZ21weHgke1NPTElCU30iCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAgICAgc2VkIC1pICJzfC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9fHxnIiAke0R9JHtpbmNsdWRlZGlyfS9nbXAuaAorfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiZ21wLmgiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZy8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwNjY2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYjFkZTJjNjI5MGJjMDY1MWZlODdhOGM0ZmI1MmU3YTBhNWZlNjMyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgT2N0IDIwMTQgMTY6MDE6NDkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N5c3RlbS1zdWJwcm9jZXNzLmM6IEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBpbiBzeXN0ZW0gIEMKKyBsaWJyYXJ5CisKK1RoaXMgc2hvdWxkIGV4cG9ydCBPX0NMT0VYRUMgd2hlcmUgaXQgaXMgb25seQorYXZhaWxhYmxlIHdoZW4gX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZCAuZS5nLiB1Y2xpYmMgYmFzZWQgc3lzdGVtcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYyBiL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jCitpbmRleCBhOTY3ODk2Li5hNTJhMzYyIDEwMDY0NAorLS0tIGEvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMKKysrKyBiL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jCitAQCAtMTgsNiArMTgsMTAgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HU1lTVEVNX05PX0xPQ0FMX0FMTE9DCisgI2luY2x1ZGUgImxpYmdzeXN0ZW0uaCIKKyAKKy0tIAorMi4xLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZ18yMDE0LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nXzIwMTQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODJkZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZ18yMDE0LjEuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJUZXN0IHJ1bm5lciBmb3IgR05PTUUtc3R5bGUgaW5zdGFsbGVkIHRlc3RzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Hbm9tZUdvYWxzL0luc3RhbGxlZFRlc3RzIgorTElDRU5TRSA9ICJMR1BMdjIrIgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtQVn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNjA4YWQ3MmE3N2UyM2ExYWVjZGZkOGQwN2E5NGJhZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYTNlZWQ3MzY3OGRkMjJkMDlkNmE3ZWM0Zjg5OTU1N2RmM2U4YjRhODAyYWZmYTc2ZDBmMTYzYjMxMjg2NTM5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lci5jO2VuZGxpbmU9MTk7bWQ1PTY3MzExYTYwMGI4M2ZkMDA2OGRmYzdlNWI4NGZmYjNmIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFIgPSAicjEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2pvdXJuYWxkXSA9ICItLXdpdGgtc3lzdGVtZC1qb3VybmFsLC0td2l0aG91dC1zeXN0ZW1kLWpvdXJuYWwsc3lzdGVtZCxzeXN0ZW1kIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDI0Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQyNDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhZGRjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQyNDIucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBlMjIwMmZmMmI3MDQ2MjNlZmM2Mjc3ZmI1MjU2ZTRlMTViYWM1Njc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2VybmVyIEtvY2ggPHdrQGdudXBnLm9yZz4KK0RhdGU6IFRodSwgMjUgSnVsIDIwMTMgMTE6MTc6NTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWl0aWdhdGUgYSBmbHVzaCtyZWxvYWQgY2FjaGUgYXR0YWNrIG9uIFJTQSBzZWNyZXQKKyBleHBvbmVudHMuCisKK2NvbW1pdCBlMjIwMmZmMmI3MDQ2MjNlZmM2Mjc3ZmI1MjU2ZTRlMTViYWM1Njc2IGZyb20KK2dpdDovL2dpdC5nbnVwZy5vcmcvbGliZ2NyeXB0LmdpdAorCisqIG1waS9tcGktcG93LmMgKGdjcnlfbXBpX3Bvd20pOiBBbHdheXMgcGVyZnJvbSB0aGUgbXBpX211bCBmb3IKK2V4cG9uZW50cyBpbiBzZWN1cmUgbWVtb3J5LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0KKworVGhlIGF0dGFjayBpcyBwdWJsaXNoZWQgYXMgaHR0cDovL2VwcmludC5pYWNyLm9yZy8yMDEzLzQ0OCA6CisKK0ZsdXNoK1JlbG9hZDogYSBIaWdoIFJlc29sdXRpb24sIExvdyBOb2lzZSwgTDMgQ2FjaGUgU2lkZS1DaGFubmVsCitBdHRhY2sgYnkgWXV2YWwgWWFyb20gYW5kIEthdHJpbmEgRmFsa25lci4gMTggSnVseSAyMDEzLgorCisgIEZsdXNoK1JlbG9hZCBpcyBhIGNhY2hlIHNpZGUtY2hhbm5lbCBhdHRhY2sgdGhhdCBtb25pdG9ycyBhY2Nlc3MgdG8KKyAgZGF0YSBpbiBzaGFyZWQgcGFnZXMuIEluIHRoaXMgcGFwZXIgd2UgZGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUKKyAgYXR0YWNrIHRvIGV4dHJhY3QgcHJpdmF0ZSBlbmNyeXB0aW9uIGtleXMgZnJvbSBHbnVQRy4gIFRoZSBoaWdoCisgIHJlc29sdXRpb24gYW5kIGxvdyBub2lzZSBvZiB0aGUgRmx1c2grUmVsb2FkIGF0dGFjayBlbmFibGVzIGEgc3B5CisgIHByb2dyYW0gdG8gcmVjb3ZlciBvdmVyIDk4JSBvZiB0aGUgYml0cyBvZiB0aGUgcHJpdmF0ZSBrZXkgaW4gYQorICBzaW5nbGUgZGVjcnlwdGlvbiBvciBzaWduaW5nIHJvdW5kLiBVbmxpa2UgcHJldmlvdXMgYXR0YWNrcywgdGhlCisgIGF0dGFjayB0YXJnZXRzIHRoZSBsYXN0IGxldmVsIEwzIGNhY2hlLiBDb25zZXF1ZW50bHksIHRoZSBzcHkKKyAgcHJvZ3JhbSBhbmQgdGhlIHZpY3RpbSBkbyBub3QgbmVlZCB0byBzaGFyZSB0aGUgZXhlY3V0aW9uIGNvcmUgb2YKKyAgdGhlIENQVS4gVGhlIGF0dGFjayBpcyBub3QgbGltaXRlZCB0byBhIHRyYWRpdGlvbmFsIE9TIGFuZCBjYW4gYmUKKyAgdXNlZCBpbiBhIHZpcnR1YWxpc2VkIGVudmlyb25tZW50LCB3aGVyZSBpdCBjYW4gYXR0YWNrIHByb2dyYW1zCisgIGV4ZWN1dGluZyBpbiBhIGRpZmZlcmVudCBWTS4KKworSW5kZXg6IGdudXBnLTEuNC43L21waS9tcGktcG93LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL21waS9tcGktcG93LmMKKysrKyBnbnVwZy0xLjQuNy9tcGkvbXBpLXBvdy5jCitAQCAtMjEyLDcgKzIxMiwxMyBAQCBtcGlfcG93bSggTVBJIHJlcywgTVBJIGJhc2UsIE1QSSBleHBvbmVuCisgCQl0cCA9IHJwOyBycCA9IHhwOyB4cCA9IHRwOworIAkJcnNpemUgPSB4c2l6ZTsKKyAKKy0JCWlmKCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDAgKSB7CisrICAgICAgICAgICAgLyogVG8gbWl0aWdhdGUgdGhlIFlhcm9tL0ZhbGtuZXIgZmx1c2grcmVsb2FkIGNhY2hlCisrICAgICAgICAgICAgICogc2lkZS1jaGFubmVsIGF0dGFjayBvbiB0aGUgUlNBIHNlY3JldCBleHBvbmVudCwgd2UgZG8KKysgICAgICAgICAgICAgKiB0aGUgbXVsdGlwbGljYXRpb24gcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlCisrICAgICAgICAgICAgICogaGlnaC1iaXQgb2YgRS4gIEJ1dCB0byBhdm9pZCB0aGlzIHBlcmZvcm1hbmNlIHBlbmFsdHkKKysgICAgICAgICAgICAgKiB3ZSBkbyBpdCBvbmx5IGlmIHRoZSBleHBvbmVudCBoYXMgYmVlbiBzdG9yZWQgaW4gc2VjdXJlCisrICAgICAgICAgICAgICogbWVtb3J5IGFuZCB3ZSBjYW4gdGh1cyBhc3N1bWUgaXQgaXMgYSBzZWNyZXQgZXhwb25lbnQuICAqLworKwkJaWYgKGVzZWMgfHwgKG1waV9saW1iX3NpZ25lZF90KWUgPCAwKSB7CisgCQkgICAgLyptcGloZWxwX211bCggeHAsIHJwLCByc2l6ZSwgYnAsIGJzaXplICk7Ki8KKyAJCSAgICBpZiggYnNpemUgPCBLQVJBVFNVQkFfVEhSRVNIT0xEICkgeworIAkJCW1waWhlbHBfbXVsKCB4cCwgcnAsIHJzaXplLCBicCwgYnNpemUgKTsKK0BAIC0yMjcsNiArMjMzLDggQEAgbXBpX3Bvd20oIE1QSSByZXMsIE1QSSBiYXNlLCBNUEkgZXhwb25lbgorIAkJCW1waWhlbHBfZGl2cmVtKHhwICsgbXNpemUsIDAsIHhwLCB4c2l6ZSwgbXAsIG1zaXplKTsKKyAJCQl4c2l6ZSA9IG1zaXplOworIAkJICAgIH0KKysJCX0KKysJCWlmICggKG1waV9saW1iX3NpZ25lZF90KWUgPCAwICkgeworIAorIAkJICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgCQkgICAgcnNpemUgPSB4c2l6ZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQzNTEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MzUxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOWVkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MzUxLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGdudXBnLTEuNC43L2cxMC9nZXRrZXkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2dldGtleS5jCTIwMDctMDMtMDUgMTY6NTQ6NDEuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvZzEwL2dldGtleS5jCTIwMTMtMTEtMjggMTQ6NDE6NTkuNjQwMjEyMjQwICswODAwCitAQCAtMTQ1NCw3ICsxNDU0LDExIEBACisgCisgICAgICAgaWYoZmxhZ3MpCisgCWtleV91c2FnZSB8PSBQVUJLRVlfVVNBR0VfVU5LTk9XTjsKKysgICAgICBpZiAoIWtleV91c2FnZSkKKysJa2V5X3VzYWdlIHw9IFBVQktFWV9VU0FHRV9OT05FOworICAgICB9CisrICBlbHNlIGlmIChwKQorKyAgICBrZXlfdXNhZ2UgfD0gUFVCS0VZX1VTQUdFX05PTkU7CisgCisgICAvKiBXZSBzZXQgUFVCS0VZX1VTQUdFX1VOS05PV04gdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGtleSBoYXMgYQorICAgICAgY2FwYWJpbGl0eSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUuICBUaGlzIHNlcnZlcyB0byBkaXN0aW5ndWlzaAorSW5kZXg6IGdudXBnLTEuNC43L2cxMC9rZXlnZW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2tleWdlbi5jCTIwMDctMDItMDUgMDA6Mjc6NDAuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvZzEwL2tleWdlbi5jCTIwMTMtMTEtMjggMTQ6NDM6MDUuMDE2NjcwMDkyICswODAwCitAQCAtMjA5LDkgKzIwOSw2IEBACisgICAgIGlmICh1c2UgJiBQVUJLRVlfVVNBR0VfQVVUSCkKKyAgICAgICAgIGJ1ZlswXSB8PSAweDIwOworIAorLSAgICBpZiAoIWJ1ZlswXSkgCistICAgICAgICByZXR1cm47CistCisgICAgIGJ1aWxkX3NpZ19zdWJwa3QgKHNpZywgU0lHU1VCUEtUX0tFWV9GTEFHUywgYnVmLCAxKTsKKyB9CisgCitJbmRleDogZ251cGctMS40LjcvaW5jbHVkZS9jaXBoZXIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvaW5jbHVkZS9jaXBoZXIuaAkyMDA2LTA0LTIxIDIwOjM5OjQ5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2luY2x1ZGUvY2lwaGVyLmgJMjAxMy0xMS0yOCAxNDo0OToyNC4xNTkzMjI3NDQgKzA4MDAKK0BAIC01Miw2ICs1Miw3IEBACisgI2RlZmluZSBQVUJLRVlfVVNBR0VfQ0VSVCAgICA0ICAgICAgLyoga2V5IGlzIGFsc28gZ29vZCB0byBjZXJ0aWZ5IG90aGVyIGtleXMqLworICNkZWZpbmUgUFVCS0VZX1VTQUdFX0FVVEggICAgOCAgICAgIC8qIGtleSBpcyBnb29kIGZvciBhdXRoZW50aWNhdGlvbiAqLworICNkZWZpbmUgUFVCS0VZX1VTQUdFX1VOS05PV04gMTI4ICAgIC8qIGtleSBoYXMgYW4gdW5rbm93biB1c2FnZSBiaXQgKi8KKysjZGVmaW5lIFBVQktFWV9VU0FHRV9OT05FICAgIDI1NiAgICAvKiBObyB1c2FnZSBnaXZlbi4gKi8KKyAKKyAjZGVmaW5lIERJR0VTVF9BTEdPX01ENSAgICAgICAxCisgI2RlZmluZSBESUdFU1RfQUxHT19TSEExICAgICAgMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDU3Ni5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQ1NzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhMjJmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQ1NzYucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9kc2EuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL2RzYS5jCTIwMDYtMTItMTIgMDI6Mjc6MjEuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL2RzYS5jCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMjg3LDYgKzI4Nyw4IEBACisgICAgIE1QSSBraW52OworICAgICBNUEkgdG1wOworIAorKyAgICBtcGlfbm9ybWFsaXplIChoYXNoKTsKKysKKyAgICAgLyogc2VsZWN0IGEgcmFuZG9tIGsgd2l0aCAwIDwgayA8IHEgKi8KKyAgICAgayA9IGdlbl9rKCBza2V5LT5xICk7CisgCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL2VsZ2FtYWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL2VsZ2FtYWwuYwkyMDA2LTEyLTEyIDAzOjA4OjA1LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9lbGdhbWFsLmMJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0zNzYsNiArMzc2LDkgQEAKKyB7CisgICAgIE1QSSB0MSA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKCBza2V5LT5wICkgKTsKKyAKKysgICAgbXBpX25vcm1hbGl6ZSAoYSk7CisrICAgIG1waV9ub3JtYWxpemUgKGIpOworKworICAgICAvKiBvdXRwdXQgPSBiLyhhXngpIG1vZCBwICovCisgICAgIG1waV9wb3dtKCB0MSwgYSwgc2tleS0+eCwgc2tleS0+cCApOworICAgICBtcGlfaW52bSggdDEsIHQxLCBza2V5LT5wICk7CitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL3JhbmRvbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvcmFuZG9tLmMJMjAwNi0xMS0wMyAxODowOTozOS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmMJMjAxNC0wMS0yMyAxMTozMTo1My45OTM0OTU0NjIgKzA4MDAKK0BAIC0yNzMsNiArMjczLDE4IEBACisgfQorIAorIAorKy8qIFJhbmRvbWl6ZSB0aGUgTVBJICovIAorK3ZvaWQKKytyYW5kb21pemVfbXBpIChNUEkgbXBpLCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCkKKyt7CisrICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CisrCisrICBidWZmZXIgPSBnZXRfcmFuZG9tX2JpdHMgKG5iaXRzLCBsZXZlbCwgbXBpX2lzX3NlY3VyZSAobXBpKSk7CisrICBtcGlfc2V0X2J1ZmZlciAobXBpLCBidWZmZXIsIChuYml0cys3KS84LCAwKTsKKysgIHhmcmVlIChidWZmZXIpOworK30KKysKKysKKyBpbnQKKyByYW5kb21faXNfZmFrZWQoKQorIHsKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9yYW5kb20uaAkyMDA2LTAyLTA5IDE5OjI5OjI5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uaAkyMDE0LTAxLTIzIDExOjMwOjE3LjMwMDkxNTkxOSArMDgwMAorQEAgLTMyLDYgKzMyLDcgQEAKKyBpbnQgIHJhbmRvbV9pc19mYWtlZCh2b2lkKTsKKyB2b2lkIHJhbmRvbV9kaXNhYmxlX2xvY2tpbmcgKHZvaWQpOworIHZvaWQgcmFuZG9taXplX2J1ZmZlciggYnl0ZSAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKTsKKyt2b2lkIHJhbmRvbWl6ZV9tcGkgKE1QSSBtcGksIHNpemVfdCBuYml0cywgaW50IGxldmVsKTsKKyBieXRlICpnZXRfcmFuZG9tX2JpdHMoIHNpemVfdCBuYml0cywgaW50IGxldmVsLCBpbnQgc2VjdXJlICk7Cisgdm9pZCBmYXN0X3JhbmRvbV9wb2xsKCB2b2lkICk7CisgCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL3JzYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvcnNhLmMJMjAwNi0xMi0xMiAwMzowOTowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvcnNhLmMJMjAxNC0wMS0yMyAxMTozNTowNC4zMzA2MzkxMjUgKzA4MDAKK0BAIC0zMDEsOSArMzAxLDI2IEBACisgI2lmIDAKKyAgICAgbXBpX3Bvd20oIG91dHB1dCwgaW5wdXQsIHNrZXktPmQsIHNrZXktPm4gKTsKKyAjZWxzZQorLSAgICBNUEkgbTEgICA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKKy0gICAgTVBJIG0yICAgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7CistICAgIE1QSSBoICAgID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOworKyAgICBpbnQgbmxpbWJzID0gbXBpX2dldF9ubGltYnMgKHNrZXktPm4pKzE7CisrICAgIE1QSSBtMSAgID0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysgICAgTVBJIG0yICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyAgICBNUEkgaCAgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrIyBpZiAxCisrICAgIE1QSSBiZGF0YT0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysgICAgTVBJIHIgICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyMgZW5kaWYKKysKKysgICAgLyogUmVtb3ZlIHN1cGVyZmx1b3VzIGxlYWRpbmcgemVyb2VzIGZyb20gSU5QVVQuICAqLworKyAgICBtcGlfbm9ybWFsaXplIChpbnB1dCk7CisrCisrIyBpZiAxIAorKyAgICAvKiBCbGluZDogIGJkYXRhID0gKGRhdGEgKiByXmUpIG1vZCBuICAgKi8KKysgICAgcmFuZG9taXplX21waSAociwgbXBpX2dldF9uYml0cyAoc2tleS0+biksIDApOworKyAgICBtcGlfZmRpdl9yIChyLCByLCBza2V5LT5uKTsKKysgICAgbXBpX3Bvd20gKGJkYXRhLCByLCBza2V5LT5lLCBza2V5LT5uKTsKKysgICAgbXBpX211bG0gKGJkYXRhLCBiZGF0YSwgaW5wdXQsIHNrZXktPm4pOworKyAgICBpbnB1dCA9IGJkYXRhOworKyMgZW5kaWYKKyAKKyAgICAgLyogbTEgPSBjIF4gKGQgbW9kIChwLTEpKSBtb2QgcCAqLworICAgICBtcGlfc3ViX3VpKCBoLCBza2V5LT5wLCAxICApOworQEAgLTMyMSw4ICszMzgsMTUgQEAKKyAgICAgLyogbSA9IG0yICsgaCAqIHAgKi8KKyAgICAgbXBpX211bCAoIGgsIGgsIHNrZXktPnAgKTsKKyAgICAgbXBpX2FkZCAoIG91dHB1dCwgbTEsIGggKTsKKy0gICAgLyogcmVhZHkgKi8KKy0gICAgCisrCisrIyBpZiAxCisrICAgIG1waV9mcmVlIChiZGF0YSk7CisrICAgIC8qIFVuYmxpbmQ6IG91dHB1dCA9IChvdXRwdXQgKiByXigtMSkpIG1vZCBuICAqLworKyAgICBtcGlfaW52bSAociwgciwgc2tleS0+bik7CisrICAgIG1waV9tdWxtIChvdXRwdXQsIG91dHB1dCwgciwgc2tleS0+bik7CisrICAgIG1waV9mcmVlIChyKTsKKysjIGVuZGlmCisrCisgICAgIG1waV9mcmVlICggaCApOworICAgICBtcGlfZnJlZSAoIG0xICk7CisgICAgIG1waV9mcmVlICggbTIgKTsKK0BAIC0zOTcsNiArNDIxLDcgQEAKKyByc2FfZGVjcnlwdCggaW50IGFsZ28sIE1QSSAqcmVzdWx0LCBNUEkgKmRhdGEsIE1QSSAqc2tleSApCisgeworICAgICBSU0Ffc2VjcmV0X2tleSBzazsKKysgICAgTVBJIGlucHV0OworIAorICAgICBpZiggYWxnbyAhPSAxICYmIGFsZ28gIT0gMiApCisgCXJldHVybiBHMTBFUlJfUFVCS0VZX0FMR087CitAQCAtNDA3LDggKzQzMiwxNCBAQAorICAgICBzay5wID0gc2tleVszXTsKKyAgICAgc2sucSA9IHNrZXlbNF07CisgICAgIHNrLnUgPSBza2V5WzVdOworLSAgICAqcmVzdWx0ID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoIHNrLm4gKSApOworLSAgICBzZWNyZXQoICpyZXN1bHQsIGRhdGFbMF0sICZzayApOworKworKyAgICAvKiBNaXRpZ2F0ZXMgc2lkZS1jaGFubmVsIGF0dGFja3MgKENWRS0yMDEzLTQ1NzYpLiAgKi8KKysgICAgaW5wdXQgPSBtcGlfYWxsb2MgKDApOworKyAgICBtcGlfbm9ybWFsaXplIChkYXRhWzBdKTsKKysgICAgbXBpX2ZkaXZfciAoaW5wdXQsIGRhdGFbMF0sIHNrLm4pOworKyAgICAqcmVzdWx0ID0gbXBpX2FsbG9jX3NlY3VyZSAobXBpX2dldF9ubGltYnMgKHNrLm4pKTsKKysgICAgc2VjcmV0ICgqcmVzdWx0LCBpbnB1dCwgJnNrKTsKKysgICAgbXBpX2ZyZWUgKGlucHV0KTsKKyAgICAgcmV0dXJuIDA7CisgfQorIAorSW5kZXg6IGdudXBnLTEuNC43L2cxMC9ncGd2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2cxMC9ncGd2LmMJMjAwNi0xMi0xMyAxOToyNTowNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9nMTAvZ3Bndi5jCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMzkwLDYgKzM5MCw3IEBACisgdm9pZCByYW5kb21fZHVtcF9zdGF0cyh2b2lkKSB7fQorIGludCBxdWlja19yYW5kb21fZ2VuKCBpbnQgb25vZmYgKSB7IHJldHVybiAtMTt9Cisgdm9pZCByYW5kb21pemVfYnVmZmVyKCBieXRlICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCApIHt9Cisrdm9pZCByYW5kb21pemVfbXBpIChNUEkgbXBpLCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCkge30KKyBpbnQgcmFuZG9tX2lzX2Zha2VkKCkgeyByZXR1cm4gLTE7fQorIGJ5dGUgKmdldF9yYW5kb21fYml0cyggc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwsIGludCBzZWN1cmUgKSB7IHJldHVybiBOVUxMO30KKyB2b2lkIHNldF9yYW5kb21fc2VlZF9maWxlKCBjb25zdCBjaGFyICpuYW1lICkge30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1ZDlhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK2NvbW1pdCBmMGIzM2I2ZmI4ZTA1ODZlOTU4NGE3YTQwOWRjYzMxMjYzNzc2YTY3CitBdXRob3I6IFdlcm5lciBLb2NoIDx3a0BnbnVwZy5vcmc+CitEYXRlOiAgIFRodSBEZWMgMjAgMDk6NDM6NDEgMjAxMiArMDEwMAorCisgICAgZ3BnOiBJbXBvcnQgb25seSBwYWNrZXRzIHdoaWNoIGFyZSBhbGxvd2VkIGluIGEga2V5YmxvY2suCisgICAgCisgICAgKiBnMTAvaW1wb3J0LmMgKHZhbGlkX2tleWJsb2NrX3BhY2tldCk6IE5ldy4KKyAgICAocmVhZF9ibG9jayk6IFN0b3JlIG9ubHkgdmFsaWQgcGFja2V0cy4KKyAgICAtLQorICAgIAorICAgIEEgY29ycnVwdGVkIGtleSwgd2hpY2ggZm9yIGV4YW1wbGUgaW5jbHVkZWQgYSBtYW5nbGVkIHB1YmxpYyBrZXkKKyAgICBlbmNyeXB0ZWQgcGFja2V0LCB1c2VkIHRvIGNvcnJ1cHQgdGhlIGtleXJpbmcuICBUaGlzIGNoYW5nZSBza2lwcyBhbGwKKyAgICBwYWNrZXRzIHdoaWNoIGFyZSBub3QgYWxsb3dlZCBpbiBhIGtleWJsb2NrLgorICAgIAorICAgIEdudVBHLWJ1Zy1pZDogMTQ1NQorICAgIAorICAgIChjaGVycnktcGlja2VkIGZyb20gY29tbWl0IGY3OTVhMGQ1OWUxOTc0NTVmODcyM2MzMDBlZWJmNTllMDk4NTNlZmEpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZzEwL2ltcG9ydC5jIGIvZzEwL2ltcG9ydC5jCitpbmRleCBiZmUwMmViLi5hNTdiMzJlIDEwMDY0NAorLS0tIGEvZzEwL2ltcG9ydC5jCisrKysgYi9nMTAvaW1wb3J0LmMKK0BAIC0zODQsNiArMzg0LDI3IEBAIGltcG9ydF9wcmludF9zdGF0cyAodm9pZCAqaGQpCisgfQorIAorIAorKy8qIFJldHVybiB0cnVlIGlmIFBLVFRZUEUgaXMgdmFsaWQgaW4gYSBrZXlibG9jay4gICovCisrc3RhdGljIGludAorK3ZhbGlkX2tleWJsb2NrX3BhY2tldCAoaW50IHBrdHR5cGUpCisreworKyAgc3dpdGNoIChwa3R0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUEtUX1BVQkxJQ19LRVk6CisrICAgIGNhc2UgUEtUX1BVQkxJQ19TVUJLRVk6CisrICAgIGNhc2UgUEtUX1NFQ1JFVF9LRVk6CisrICAgIGNhc2UgUEtUX1NFQ1JFVF9TVUJLRVk6CisrICAgIGNhc2UgUEtUX1NJR05BVFVSRToKKysgICAgY2FzZSBQS1RfVVNFUl9JRDoKKysgICAgY2FzZSBQS1RfQVRUUklCVVRFOgorKyAgICBjYXNlIFBLVF9SSU5HX1RSVVNUOgorKyAgICAgIHJldHVybiAxOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiAwOworKyAgICB9CisrfQorKworKworIC8qKioqKioqKioqKioqKioqCisgICogUmVhZCB0aGUgbmV4dCBrZXlibG9jayBmcm9tIHN0cmVhbSBBLgorICAqIFBFTkRJTkdfUEtUIHNob3VsZCBiZSBpbml0aWFsemVkIHRvIE5VTEwKK0BAIC00NjEsNyArNDgyLDcgQEAgcmVhZF9ibG9jayggSU9CVUYgYSwgUEFDS0VUICoqcGVuZGluZ19wa3QsIEtCTk9ERSAqcmV0X3Jvb3QgKQorIAkgICAgfQorIAkgICAgaW5fY2VydCA9IDE7CisgCSAgZGVmYXVsdDoKKy0JICAgIGlmKCBpbl9jZXJ0ICkgeworKwkgICAgaWYgKGluX2NlcnQgJiYgdmFsaWRfa2V5YmxvY2tfcGFja2V0IChwa3QtPnBrdHR5cGUpKSB7CisgCQlpZiggIXJvb3QgKQorIAkJICAgIHJvb3QgPSBuZXdfa2Jub2RlKCBwa3QgKTsKKyAJCWVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2NvbmZpZ3VyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDA1YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnbnVwZy0xLjQuNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdudXBnLTEuNC43L2NvbmZpZ3VyZS5hYworQEAgLTgyNyw3ICs4MjcsNiBAQCBlbHNlCisgICBBQ19TVUJTVChVU0VfTkxTKQorICAgQUNfU1VCU1QoVVNFX0lOQ0xVREVEX0xJQklOVEwpCisgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQorLSAgQU1fUE9fU1VCRElSUworIGZpCisgCisgaWYgdGVzdCAiJHRyeV9leHRlbnNpb25zIiA9IHllcyB8fCB0ZXN0IHgiJGNhcmRfc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY3VybF90eXBlb2ZfZml4X2JhY2twb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY3VybF90eXBlb2ZfZml4X2JhY2twb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmIyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorCitUaGlzIGhhcyBiZWVuIGRpc2N1c3NlZCBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgYnVnIHJlcG9ydGVkCit1cHN0cmVhbToKKworaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTQ4NjI1MAoraHR0cDovL2J1Z3Muc291cmNlbWFnZS5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDQ2CisKK0ZpeDoKK2h0dHA6Ly9saXN0cy5nbnVwZy5vcmcvcGlwZXJtYWlsL2dudXBnLWRldmVsLzIwMDgtQXByaWwvMDI0MzQ0Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbRGViaWFuXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnbnVwZy0xLjQuNy9rZXlzZXJ2ZXIvZ3Bna2V5c19jdXJsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworKysrIGdudXBnLTEuNC43L2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworQEAgLTI4Niw3ICsyODYsNyBAQCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9WRVJCT1NFLDEpOworICAgICB9CisgCistICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUixvcHQtPmZsYWdzLmNoZWNrX2NlcnQpOworKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsKGxvbmcpb3B0LT5mbGFncy5jaGVja19jZXJ0KTsKKyAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX0NBSU5GTyxvcHQtPmNhX2NlcnRfZmlsZSk7CisgCisgICBpZihwcm94eSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2xvbmctbG9uZy10aHVtYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2xvbmctbG9uZy10aHVtYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODU1Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWduYWwgUGF0Y2ggY2FtZSBmcm9tIE9wZW5XcnQgdmlhIE9FLUNsYXNzaWMKK2h0dHBzOi8vZGV2Lm9wZW53cnQub3JnL2Jyb3dzZXIvcGFja2FnZXMvdXRpbHMvZ251cGcvcGF0Y2hlcy8wMDEtbWlwc19nY2M0LjQKK3doaWNoIGlzIG5vIGxvbmdlciBhIHZhbGlkIHJldmlzaW9uIQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKworLS0tIGdudXBnL21waS9sb25nbG9uZy5ofiAgICAgIDIwMDYtMDItMTQgMTA6MDk6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZ251cGcvbXBpL2xvbmdsb25nLmggICAgICAgMjAwOC0xMC0yNyAxMzoxMTowOS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xODEsNyArMTgxLDcgQEAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqICBBUk0gICoqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyCisrI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyICYmICFkZWZpbmVkKF9fdGh1bWJfXykKKyAjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICAgX19hc21fXyAoImFkZHMgJTEsICU0LCAlNVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAiYWRjICAlMCwgJTIsICUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9taXBzX2djYzQuNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L21pcHNfZ2NjNC40LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDNiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9taXBzX2djYzQuNC5wYXRjaApAQCAtMCwwICsxLDUwIEBACisKK0Zyb20gT3BlbmVtYmVkZGVkLUNsYXNzaWMKKworICAgIGdudXBnLTEuNC4xMDogUmVhZGQgdGhlIEFSTSBUaHVtYiBwYXRjaCBhcyBkZWJpYW4gaGFzIG5vIHRodW1iIHN1cHBvcnQKKworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkLXNwZWNpZmljXQorCitJbmRleDogZ251cGctMS40LjEwL21waS9sb25nbG9uZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40LjEwLm9yaWcvbXBpL2xvbmdsb25nLmgJMjAwOC0xMi0xMSAxNzozOTo0My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbnVwZy0xLjQuMTAvbXBpL2xvbmdsb25nLmgJMjAxMC0wMy0yNyAxNDoyNzo1My4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MDYsMTggKzcwNiwzNSBAQAorICNlbmRpZiAvKiBfX204ODExMF9fICovCisgI2VuZGlmIC8qIF9fbTg4MDAwX18gKi8KKyAKKysvKiBUZXN0IGZvciBnY2MgPj0gbWFqLm1pbiwgYXMgcGVyIF9fR05VQ19QUkVSRVEgaW4gZ2xpYmMgKi8KKysjaWYgZGVmaW5lZCAoX19HTlVDX18pICYmIGRlZmluZWQgKF9fR05VQ19NSU5PUl9fKQorKyNkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgXAorKwkoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKKysjZWxzZQorKyNkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgIDAKKysjZW5kaWYKKysKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqICBNSVBTICAqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgI2lmIGRlZmluZWQgKF9fbWlwc19fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorLSNpZiBfX0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9SX18gPj0gNworKyNpZiBfX0dOVUNfUFJFUkVRICg0LDQpCisrI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisrICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCVVESXR5cGUgX19sbCA9IChVREl0eXBlKSh1KSAqICh2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXcxID0gX19sbCA+PiAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXcwID0gX19sbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IHdoaWxlICgwKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKSAmJiBfX0dOVUNfUFJFUkVRICgyLDcpCisgI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgICBfX2FzbV9fICgibXVsdHUgJTIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICA6ICI9bCIgKChVU0l0eXBlKSh3MCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICI9aCIgKChVU0l0eXBlKSh3MSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICA6ICJkIiAoKFVTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICJkIiAoKFVTSXR5cGUpKHYpKSkKKy0jZWxzZQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKQorICNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICAgX19hc21fXyAoIm11bHR1ICUyLCUzIFxuIiBcCisgCSAgICJtZmxvICUwIFxuIiAgICAgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL2Rpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmMTk1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL2Rpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogZ251cGctMi4xLjAvZGlybW5nci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTIuMS4wLm9yaWcvZGlybW5nci9NYWtlZmlsZS5hbQorKysrIGdudXBnLTIuMS4wL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KK0BAIC03OCw3ICs3OCw4IEBAIGVuZGlmCisgZGlybW5ncl9MREFERCA9ICQobGliY29tbW9udGxzbnB0aCkgJChsaWJjb21tb25wdGgpIFwKKyAgICAgICAgICQoRE5TTElCUykgJChMSUJBU1NVQU5fTElCUykgXAorIAkkKExJQkdDUllQVF9MSUJTKSAkKEtTQkFfTElCUykgJChOUFRIX0xJQlMpIFwKKy0JJChOVEJUTFNfTElCUykgJChMSUJHTlVUTFNfTElCUykgJChMSUJJTlRMKSAkKExJQklDT05WKQorKwkkKE5UQlRMU19MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQklOVEwpICQoTElCSUNPTlYpIFwKKysJJChHUEdfRVJST1JfTElCUykKKyBpZiBVU0VfTERBUAorIGRpcm1uZ3JfTERBREQgKz0gJChsZGFwbGlicykKKyBlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NTg2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorVXNlIHBrZy1jb25maWcgdG8gZmluZCBwdGggaW5zdGVhZCBvZiBwdGgtY29uZmlnLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorW25vdCBzdWJtaXR0ZWQgYnV0IHRoZXkndmUgYmVlbiBjbGVhciB0aGV5IGRvbid0IHdhbnQgYSBwa2ctY29uZmlnIGRlcGVuZGVuY3ldCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogZ251cGctMi4xLjAvbTQvZ251cGctcHRoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9tNC9nbnVwZy1wdGgubTQKKysrKyBnbnVwZy0yLjEuMC9tNC9nbnVwZy1wdGgubTQKK0BAIC0xNywzMyArMTcsOSBAQCBkbmwgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAjIFRha2VuIGFuZCBtb2RpZmllZCBmcm9tIHRoZSBtNCBtYWNyb3Mgd2hpY2ggY29tZSB3aXRoIFB0aC4KKyBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICAgWworLSAgICBfcHRoX3ZlcnNpb249YCRQVEhfQ09ORklHIC0tdmVyc2lvbiB8IGF3ayAnTlI9PTEge3ByaW50IFskXTN9J2AKKyAgICAgX3JlcV92ZXJzaW9uPSJpZmVsc2UoWyQxXSwsMS4yLjAsJDEpIgorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhQVEgsIFtwdGggPj0gJF9yZXFfdmVyc2lvbl0sIFtoYXZlX3B0aD15ZXNdLCBbaGF2ZV9wdGg9bm9dKQorIAorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFBUSCAtIHZlcnNpb24gPj0gJF9yZXFfdmVyc2lvbikKKy0gICAgZm9yIF92YXIgaW4gX3B0aF92ZXJzaW9uIF9yZXFfdmVyc2lvbjsgZG8KKy0gICAgICAgIGV2YWwgIl92YWw9XCJcJCR7X3Zhcn1cIiIKKy0gICAgICAgIF9tYWpvcj1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wxLydgCistICAgICAgICBfbWlub3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMi8nYAorLSAgICAgICAgX3J0eXBlPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgICAgIF9taWNybz1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1w0LydgCistICAgICAgICBjYXNlICRfcnR5cGUgaW4KKy0gICAgICAgICAgICAiYSIgKSBfcnR5cGU9MCA7OworLSAgICAgICAgICAgICJiIiApIF9ydHlwZT0xIDs7CistICAgICAgICAgICAgIi4iICkgX3J0eXBlPTIgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIF9oZXg9YGVjaG8gZHVtbXkgfCBhd2sgJ3sgcHJpbnRmKCIlZCUwMmQlMWQlMDJkIiwgbWFqb3IsIG1pbm9yLCBydHlwZSwgbWljcm8pOyB9JyBcCistICAgICAgICAgICAgICAibWFqb3I9JF9tYWpvciIgIm1pbm9yPSRfbWlub3IiICJydHlwZT0kX3J0eXBlIiAibWljcm89JF9taWNybyJgCistICAgICAgICBldmFsICIke192YXJ9X2hleD1cIlwkX2hleFwiIgorLSAgICBkb25lCistICAgIGhhdmVfcHRoPW5vCistICAgIGlmIHRlc3QgIi4kX3B0aF92ZXJzaW9uX2hleCIgIT0gLjsgdGhlbgorLSAgICAgICAgaWYgdGVzdCAiLiRfcmVxX3ZlcnNpb25faGV4IiAhPSAuOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAkX3B0aF92ZXJzaW9uX2hleCAtZ2UgJF9yZXFfdmVyc2lvbl9oZXg7IHRoZW4KKy0gICAgICAgICAgICAgICAgaGF2ZV9wdGg9eWVzCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCisgICAgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgUFRIIGluc3RhbGxhdGlvbiBpcyBzYW5lXSkKK0BAIC01MSw5ICsyNyw5IEBAIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2NmbGFncz0kQ0ZMQUdTCisgICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2xkZmxhZ3M9JExERkxBR1MKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGlicz0kTElCUworLSAgICAgICAgIENGTEFHUz0iJENGTEFHUyBgJFBUSF9DT05GSUcgLS1jZmxhZ3NgIgorLSAgICAgICAgIExERkxBR1M9IiRMREZMQUdTIGAkUFRIX0NPTkZJRyAtLWxkZmxhZ3NgIgorLSAgICAgICAgIExJQlM9IiRMSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnMgLS1hbGxgIgorKyAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIX0NGTEFHUyIKKysgICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAkUFRIX0xERkxBR1MiCisrICAgICAgICAgTElCUz0iJExJQlMgJFBUSF9MSUJTIgorICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxwdGguaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyBwdGhfaW5pdCAoKTtdXSldLAorQEAgLTgwLDI2ICs1NiwxMyBAQCBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICMgUFRIX0NMRkFHUyBhbmQgUFRIX0xJQlMgYXJlIEFTX1NVQlNULgorICMKKyBBQ19ERUZVTihbR05VUEdfUEFUSF9QVEhdLAorLVsgQUNfQVJHX1dJVEgocHRoLXByZWZpeCwKKy0gICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1wdGgtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBHTlUgUHRoIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBwdGhfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBwdGhfY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRwdGhfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAgUFRIX0NPTkZJRz0iJHB0aF9jb25maWdfcHJlZml4L2Jpbi9wdGgtY29uZmlnIgorLSAgZmkKKy0gIEFDX1BBVEhfUFJPRyhQVEhfQ09ORklHLCBwdGgtY29uZmlnLCBubykKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxLjMuNywkMSkKKy0gIGlmIHRlc3QgIiRQVEhfQ09ORklHIiAhPSAibm8iOyB0aGVuCistICAgIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKCR0bXApCistICAgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuICAgICAgCistICAgICAgIFBUSF9DRkxBR1M9YCRQVEhfQ09ORklHIC0tY2ZsYWdzYAorLSAgICAgICBQVEhfTElCUz1gJFBUSF9DT05GSUcgLS1sZGZsYWdzYAorLSAgICAgICBQVEhfTElCUz0iJFBUSF9MSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnMgLS1hbGxgIgorLSAgICAgICBBQ19ERUZJTkUoSEFWRV9QVEgsIDEsCisrICBHTlVQR19QVEhfVkVSU0lPTl9DSEVDSygkdG1wKQorKyAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKysgICAgICBBQ19ERUZJTkUoSEFWRV9QVEgsIDEsCisgICAgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoZSBHTlUgUHRoIGlzIGF2YWlsYWJsZV0pCistICAgIGZpCisgICBmaQorICAgQUNfU1VCU1QoUFRIX0NGTEFHUykKKyAgIEFDX1NVQlNUKFBUSF9MSUJTKQorIF0pCistCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkYmYxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDcyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5lbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBnbnVwZy0yLjEuMC9tNC9ucHRoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9tNC9ucHRoLm00CisrKysgZ251cGctMi4xLjAvbTQvbnB0aC5tNAorQEAgLTE3LDEwICsxNywxMCBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTlBUSF9DT05GSUddLAorICAgaWYgdGVzdCAieCRucHRoX2NvbmZpZ19wcmVmaXgiICE9IHggOyB0aGVuCisgICAgICAgTlBUSF9DT05GSUc9IiRucHRoX2NvbmZpZ19wcmVmaXgvYmluL25wdGgtY29uZmlnIgorICAgZmkKKy0gIEFDX1BBVEhfUFJPRyhOUFRIX0NPTkZJRywgbnB0aC1jb25maWcsIG5vKQorKyAgQUNfUEFUSF9QUk9HKFBLR0NPTkZJRywgcGtnLWNvbmZpZywgbm8pCisgCistICBpZiB0ZXN0ICIkTlBUSF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIG5wdGhfdmVyc2lvbj1gJE5QVEhfQ09ORklHIC0tdmVyc2lvbmAKKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisrICAgIG5wdGhfdmVyc2lvbj1gJFBLR0NPTkZJRyAtLW1vZHZlcnNpb24gbnB0aGAKKyAgIGZpCisgICBucHRoX3ZlcnNpb25fbWFqb3I9YGVjaG8gJG5wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorQEAgLTQ1LDcgKzQ1LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgCisgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIE5QVEggLSB2ZXJzaW9uID49ICRtaW5fbnB0aF92ZXJzaW9uKQorICAgb2s9bm8KKy0gIGlmIHRlc3QgIiROUFRIX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisgICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX25wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKyAgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbnB0aF92ZXJzaW9uIHwgXAorQEAgLTY2LDI4ICs2Niw5IEBAIEFDX0RFRlVOKFtBTV9QQVRIX05QVEhdLAorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW3llcyAoJG5wdGhfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgTlBUSCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKy0gICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCistICAgICBpZiB0ZXN0ICIkcmVxX25wdGhfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJE5QVEhfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorLSAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCistICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW05QVEggQVBJIHZlcnNpb25dKQorLSAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ucHRoX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KKy0gICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbb2theV0pCistICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgIG9rPW5vCistICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW2RvZXMgbm90IG1hdGNoLiB3YW50PSRyZXFfbnB0aF9hcGkgZ290PSR0bXBdKQorLSAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIE5QVEhfQ0ZMQUdTPWAkTlBUSF9DT05GSUcgLS1jZmxhZ3NgCistICAgIE5QVEhfTElCUz1gJE5QVEhfQ09ORklHIC0tbGlic2AKKysgICAgTlBUSF9DRkxBR1M9YCRQS0dDT05GSUcgLS1jZmxhZ3MgbnB0aGAKKysgICAgTlBUSF9MSUJTPWAkUEtHQ09ORklHIC0tbGlicyBucHRoYAorKyAgICBBQ19NU0dfV0FSTihbW0dPVCBIRVJFIC0gJE5QVEhfTElCUyBdXSkKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgbnB0aF9jb25maWdfaG9zdD1gJE5QVEhfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisgICAgIGlmIHRlc3QgeCIkbnB0aF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCitAQCAtMTAzLDYgKzg0LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKysgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgTlBUSF9DRkxBR1M9IiIKKyAgICAgTlBUSF9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OTlmODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYgpAQCAtMCwwICsxLDEwNSBAQAorU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCitERVBFTkRTID0gInpsaWIgYnppcDIgcmVhZGxpbmUiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitQUiA9ICJyOSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9nbnVwZy9nbnVwZy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xvbmctbG9uZy10aHVtYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWlwc19nY2M0LjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3VybF90eXBlb2ZfZml4X2JhY2twb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDEzLTQzNTEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTMtNDU3Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxMy00MjQyLnBhdGNoIFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gImIwNmExNDFjY2E1Y2QxYTU1YmJkZDI1YWI4MzMzMDNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5ZDE4YjdkMTkzZjYyY2EyN2VkNGZlYmNiNGM5MDQ0YWEwYzk1MzA1ZDMyNThmZTkwMmUyZmFlNWZjNjQ2OGQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCisjICAgLS13aXRoLWVnZC1zb2NrZXQ9TkFNRSAgdXNlIE5BTUUgZm9yIHRoZSBFR0Qgc29ja2V0CisjICAgLS13aXRoLXBob3RvLXZpZXdlcj1GSVhFRF9WSUVXRVIgIHNldCBhIGZpeGVkIHBob3RvIElEIHZpZXdlcgorIyAgIC0td2l0aC1pbmNsdWRlZC16bGliICAgIHVzZSB0aGUgemxpYiBjb2RlIGluY2x1ZGVkIGhlcmUKKyMgICAtLXdpdGgtY2FwYWJpbGl0aWVzICAgICB1c2UgbGludXggY2FwYWJpbGl0aWVzIGRlZmF1bHQ9bm8KKyMgICAtLXdpdGgtbWFpbHByb2c9TkFNRSAgICB1c2UgIk5BTUUgLXQiIGZvciBtYWlsIHRyYW5zcG9ydAorIyAgIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyMgICAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmljb252IGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorIyAgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHVzZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpbmNsdWRlZCBoZXJlCisjICAgLS13aXRoLWxpYmludGwtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmludGwgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyMgICAtLXdpdGhvdXQtbGliaW50bC1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaW50bCBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKKyMgICAtLXdpdGhvdXQtcmVhZGxpbmUgICAgICBkbyBub3Qgc3VwcG9ydCBmYW5jeSBjb21tYW5kIGxpbmUgZWRpdGluZworIyAgIC0td2l0aC1pbmNsdWRlZC1yZWdleCAgIHVzZSB0aGUgaW5jbHVkZWQgR05VIHJlZ2V4IGxpYnJhcnkKKyMgICAtLXdpdGgtemxpYj1ESVIgICAgICAgICB1c2UgbGlieiBpbiBESVIKKyMgICAtLXdpdGgtYnppcDI9RElSICAgICAgICBsb29rIGZvciBiemlwMiBpbiBESVIKKyMgICAtLWVuYWJsZS1zdGF0aWMtcm5kPWVnZHx1bml4fGxpbnV4fGF1dG8KKyMgICAtLWRpc2FibGUtZGV2LXJhbmRvbSAgICBkaXNhYmxlIHRoZSB1c2Ugb2YgZGV2IHJhbmRvbQorIyAgIC0tZGlzYWJsZS1hc20gICAgICAgICAgIGRvIG5vdCB1c2UgYXNzZW1ibGVyIG1vZHVsZXMKKyMgICAtLWVuYWJsZS1tLWd1YXJkICAgICAgICBlbmFibGUgbWVtb3J5IGd1YXJkIGZhY2lsaXR5CisjICAgLS1lbmFibGUtc2VsaW51eC1zdXBwb3J0CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlIFNFTGludXggc3VwcG9ydAorIyAgIC0tZGlzYWJsZS1jYXJkLXN1cHBvcnQgIGRpc2FibGUgT3BlblBHUCBjYXJkIHN1cHBvcnQKKyMgICAtLWRpc2FibGUtZ251cGctaWNvbnYgICBkaXNhYmxlIHRoZSBuZXcgaWNvbnYgY29kZQorIyAgIC0tZW5hYmxlLWJhY2tzaWdzICAgICAgIGVuYWJsZSB0aGUgZXhwZXJpbWVudGFsIGJhY2tzaWdzIGNvZGUKKyMgICAtLWVuYWJsZS1taW5pbWFsICAgICAgICBidWlsZCB0aGUgc21hbGxlc3QgZ3BnIGJpbmFyeSBwb3NzaWJsZQorIyAgIC0tZGlzYWJsZS1yc2EgICAgICAgICAgIGRpc2FibGUgdGhlIFJTQSBwdWJsaWMga2V5IGFsZ29yaXRobQorIyAgIC0tZGlzYWJsZS1pZGVhICAgICAgICAgIGRpc2FibGUgdGhlIElERUEgY2lwaGVyCisjICAgLS1kaXNhYmxlLWNhc3Q1ICAgICAgICAgZGlzYWJsZSB0aGUgQ0FTVDUgY2lwaGVyCisjICAgLS1kaXNhYmxlLWJsb3dmaXNoICAgICAgZGlzYWJsZSB0aGUgQkxPV0ZJU0ggY2lwaGVyCisjICAgLS1kaXNhYmxlLWFlcyAgICAgICAgICAgZGlzYWJsZSB0aGUgQUVTLCBBRVMxOTIsIGFuZCBBRVMyNTYgY2lwaGVycworIyAgIC0tZGlzYWJsZS10d29maXNoICAgICAgIGRpc2FibGUgdGhlIFRXT0ZJU0ggY2lwaGVyCisjICAgLS1kaXNhYmxlLXNoYTI1NiAgICAgICAgZGlzYWJsZSB0aGUgU0hBLTI1NiBkaWdlc3QKKyMgICAtLWRpc2FibGUtc2hhNTEyICAgICAgICBkaXNhYmxlIHRoZSBTSEEtMzg0IGFuZCBTSEEtNTEyIGRpZ2VzdHMKKyMgICAtLWRpc2FibGUtYnppcDIgICAgICAgICBkaXNhYmxlIHRoZSBCWklQMiBjb21wcmVzc2lvbiBhbGdvcml0aG0KKyMgICAtLWRpc2FibGUtZXhlYyAgICAgICAgICBkaXNhYmxlIGFsbCBleHRlcm5hbCBwcm9ncmFtIGV4ZWN1dGlvbgorIyAgIC0tZGlzYWJsZS1waG90by12aWV3ZXJzIGRpc2FibGUgcGhvdG8gSUQgdmlld2VycworIyAgIC0tZGlzYWJsZS1rZXlzZXJ2ZXItaGVscGVycyAgZGlzYWJsZSBhbGwgZXh0ZXJuYWwga2V5c2VydmVyIHN1cHBvcnQKKyMgICAtLWRpc2FibGUtbGRhcCAgICAgICAgICBkaXNhYmxlIExEQVAga2V5c2VydmVyIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1oa3AgICAgICAgICAgIGRpc2FibGUgSEtQIGtleXNlcnZlciBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtaHR0cCAgICAgICAgICBkaXNhYmxlIEhUVFAga2V5IGZldGNoaW5nIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1maW5nZXIgICAgICAgIGRpc2FibGUgRmluZ2VyIGtleSBmZXRjaGluZyBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtbWFpbHRvICAgICAgICBkaXNhYmxlIGVtYWlsIGtleXNlcnZlciBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUta2V5c2VydmVyLXBhdGggZGlzYWJsZSB0aGUgZXhlYy1wYXRoIG9wdGlvbiBmb3Iga2V5c2VydmVyIGhlbHBlcnMKKyMgICAtLWVuYWJsZS1rZXktY2FjaGU9U0laRSBTZXQga2V5IGNhY2hlIHRvIFNJWkUgKGRlZmF1bHQgNDA5NikKKyMgICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisjICAgLS1kaXNhYmxlLWRucy1zcnYgICAgICAgZGlzYWJsZSB0aGUgdXNlIG9mIEROUyBTUlYgaW4gSEtQIGFuZCBIVFRQCisjICAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIyAgIC0tZGlzYWJsZS1yZWdleCAgICAgICAgIGRvIG5vdCBoYW5kbGUgcmVndWxhciBleHByZXNzaW9ucyBpbiB0cnVzdCBzaWdzCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCBcCisJCS0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS13aXRoLWJ6aXAyPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS1kaXNhYmxlLXNlbGludXgtc3VwcG9ydCBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJlYWRsaW5lPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9bm8gXAorCQkiCisKKyMgRm9yY2UgZ2NjJ3MgdHJhZGl0aW9uYWwgaGFuZGxpbmcgb2YgaW5saW5lIHRvIGF2b2lkIGlzc3VlcyB3aXRoIGdjYyA1CitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KKwltdiAke0R9JHtkYXRhZGlyfS8ke0JQTn0vKiAke0R9LyR7ZG9jZGlyfS8ke0JQTn0vIHx8IDoKKwltdiAke0R9JHtwcmVmaXh9L2RvYy8qICR7RH0vJHtkb2NkaXJ9LyR7QlBOfS8gfHwgOgorfQorCisjIHNwbGl0IG91dCBncGd2IGZyb20gbWFpbiBwYWNrYWdlCitSREVQRU5EU18ke1BOfSA9ICJncGd2IgorUEFDS0FHRVMgPSsgImdwZ3YiCitGSUxFU19ncGd2ID0gIiR7YmluZGlyfS9ncGd2IgorCisjIEV4Y2x1ZGUgZGVidWcgZmlsZXMgZnJvbSB0aGUgbWFpbiBwYWNrYWdlcworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJleGVjZGlyfS8ke0JQTn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS8ke0JQTn0vLmRlYnVnIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLXdpdGgtbGliY3VybD0ke1NUQUdJTkdfTElCRElSfSwtLXdpdGhvdXQtbGliY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tsaWJ1c2JdID0gIi0td2l0aC1saWJ1c2I9JHtTVEFHSU5HX0xJQkRJUn0sLS13aXRob3V0LWxpYnVzYixsaWJ1c2ItY29tcGF0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGM3Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjcuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMgKDIueCkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorCitERVBFTkRTID0gIm5wdGggbGliYXNzdWFuIGxpYmtzYmEgemxpYiBiemlwMiByZWFkbGluZSBsaWJnY3J5cHQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYmRmOTJiMTViOGJjZDg1NzliNjQzYzdmNDFhMzIzOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMThhMzc3NmQ0N2ZlYzk4ODkyZDUxZDI4YjY1NzRlZjE2YmYwYTI1ZWFiYjA5NTYyMzEwNThhYWYyZTc4NDZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWxkYXAgXAorCQktLWRpc2FibGUtY2NpZC1kcml2ZXIgXAorCQktLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisJCS0td2l0aC1iemlwMj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJlYWRsaW5lPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBpbmVudHJ5IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVybmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00CisJcm0gLWYgJHtTfS9tNC9saWJhc3N1YW4ubTQKKwlybSAtZiAke1N9L200L2tzYmEubTQKKwlybSAtZiAke1N9L200L2xpYmdjcnlwdC5tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlsbiAtc2YgZ3BnMiAke0R9JHtiaW5kaXJ9L2dwZworCWxuIC1zZiBncGd2MiAke0R9JHtiaW5kaXJ9L2dwZ3YKK30KKworUkRFUEVORFNfJHtQTn0gPSAiZ251dGxzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWIxMzhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHTlUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IExpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ251dGxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL3N1cHBvcnQvP2dyb3VwPWdudXRscyIKK0RFUEVORFMgPSAibmV0dGxlIgorCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS14eCA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCitMSUNFTlNFXyR7UE59LW9wZW5zc2wgPSAiR1BMdjMrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCisKKworU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMV19IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnV0bHMub3JnL2djcnlwdC9nbnV0bHMvdiR7U0hSVF9WRVJ9L2dudXRscy0ke1BWfS50YXIueHoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnIHBrZ2NvbmZpZyBnZXR0ZXh0IGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORj0iLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYnRhc24xIFwKKyAgICAgICAgICAgICAgLS1lbmFibGUtbG9jYWwtbGlib3B0cyBcCisgICAgICAgICAgICAgIC0td2l0aC1saWJwdGhyZWFkLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWd1aWxlIFwKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWNyeXdyYXAgXAorICAgICAgICAgICAgICAtLXdpdGhvdXQtcDExLWtpdCBcCisgICAgICAgICAgICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZm9yIGRpciBpbiAuIGxpYjsgZG8KKwkJcm0gLWYgJHtkaXJ9L2FjbG9jYWwubTQgJHtkaXJ9L200L2xpYnRvb2wubTQgJHtkaXJ9L200L2x0Ki5tNAorCWRvbmUKK30KKworUEFDS0FHRUNPTkZJRyA/Pz0gInpsaWIiCitQQUNLQUdFQ09ORklHW3RwbV0gPSAiLS13aXRoLXRwbSwgLS13aXRob3V0LXRwbSwgdHJvdXNlcnMiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLCAtLXdpdGhvdXQtemxpYiwgemxpYiIKKworUEFDS0FHRVMgPSsgIiR7UE59LW9wZW5zc2wgJHtQTn0teHgiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dudXRscy1jbGktZGVidWciCitGSUxFU18ke1BOfS1vcGVuc3NsID0gIiR7bGliZGlyfS9saWJnbnV0bHMtb3BlbnNzbC5zby4qIgorRklMRVNfJHtQTn0teHggPSAiJHtsaWJkaXJ9L2xpYmdudXRsc3h4LnNvLioiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjICs9ICIgLXB0aHJlYWQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGE5OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZWI5M2FhN2I5ODZjODRkYTYwYTNkYjQwYWZiMjlkMWE3MGM1MDIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAxNyBKYW4gMjAxNSAxNzowMjoxNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGZpeCBzZWQgY29tbWFuZAorCitUaGUgInNlZCAncy8uYmFrLy9nJyIgbWF0Y2hzICJiaXRiYWtlIiwgd2hpY2ggd291bGQgY2F1c2Ugc3RyYW5nZSBlcnJvcnMKK3doZW4gdGhlIFMgY29udGFpbnMgImJpdGJha2UiLCBmaXggdG8gInNlZCAncy9cLmJhayQvLydgIgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGM2ODE4YTAuLjFjNDU4MmQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQ2Niw3ICs0NjYsNyBAQCBpZiB0ZXN0ICIkTkVFRF9MSUJPUFRTX0RJUiIgPSAidHJ1ZSI7dGhlbgorIAlkbmwgcmVwbGFjZSBsaWJvcHRzLWdlbmVyYXRlZCBmaWxlcyB3aXRoIGRpc3RyaWJ1dGVkIGJhY2t1cHMsIGlmIHByZXNlbnQKKyAJbWlzc2luZ19iYWtzPQorIAlmb3IgaSBpbiAke3NyY2Rpcn0vc3JjLyotYXJncy5jLmJhayAke3NyY2Rpcn0vc3JjLyotYXJncy5oLmJhazsgZG8KKy0JCW5hbT1gZWNobyAkaXxzZWQgJ3MvLmJhay8vZydgCisrCQluYW09YGVjaG8gJGl8c2VkICdzL1wuYmFrJC8vJ2AKKyAJCWlmIHRlc3QgLWYgJGk7dGhlbgorIAkJCWNwIC1mICRpICRuYW0KKyAJCWVsc2UKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDUyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBhZTMzNzA3ODhlZDM0NDdiYmExNjk2OWQ5ZWIxYmYxYjk2MzFlMWI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVmFsZW50aW4gUG9wYSA8dmFsZW50aW4ucG9wYUBpbnRlbC5jb20+CitEYXRlOiBGcmksIDI1IEFwciAyMDE0IDEzOjU4OjU1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIENvcnJlY3QgcnBsX2dldHRpbWVvZmRheSBzaWduYXR1cmUKKworQ3VycmVudGx5IHdlIGZhaWwgb24gdWNsaWJjIGxpa2UgYmVsb3cKKworfCBJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy9wcm9jZnMuaDozMjowLAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oOjI2LAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjM5MiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3NpZ25hbC5oOjUyLAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2wvc3lzL3NlbGVjdC5oOjU4LAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oOjIyMCwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3N5cy90eXBlcy5oOjI4LAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vbGliL2luY2x1ZGVzL2dudXRscy9nbnV0bHMuaDo0NiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIGV4LWN4eC5jcHA6MzoKK3wgLi4vLi4vZ2wvc3lzL3RpbWUuaDozOTY6NjY6IGVycm9yOiBjb25mbGljdGluZyBkZWNsYXJhdGlvbiAndm9pZCogcmVzdHJpY3QnCit8IC4uLy4uL2dsL3N5cy90aW1lLmg6Mzk2OjUwOiBlcnJvcjogJ3Jlc3RyaWN0JyBoYXMgYSBwcmV2aW91cyBkZWNsYXJhdGlvbiBhcyAndGltZXZhbCogcmVzdHJpY3QnCit8IG1ha2VbNF06ICoqKiBbZXgtY3h4Lm9dIEVycm9yIDEKK3wgbWFrZVs0XTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KKworR0NDIGRldGVjdHMgdGhhdCB3ZSBjYWxsICdyZXN0cmljdCcgYXMgcGFyYW0gbmFtZSBpbiBmdW5jdGlvbgorc2lnbmF0dXJlcyBhbmQgY29tcGxhaW5zIHNpbmNlIGJvdGggcGFyYW1zIGFyZSBjYWxsZWQgJ3Jlc3RyaWN0JwordGhlcmVmb3JlIHdlIHVzZSBfX3Jlc3RyaWN0IHRvIGRlbm90ZSB0aGUgQzk5IGtleXdvcmsKKworVGhpcyBvbmx5IGhhcHBlbnMgb2YgdWNsaWJjIHNpbmNlIHRoaXMgY29kZSBpcyBub3QgZXhjZXJjaXNlZCB3aXRoCitlZ2xpYmMgb3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSBzYW1lIGlzc3VlIHRoZXJlIHRvbworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdsL3N5c190aW1lLmluLmggfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dsL3N5c190aW1lLmluLmggYi9nbC9zeXNfdGltZS5pbi5oCitpbmRleCA4NGExN2M5Li42Y2VhZGMzIDEwMDY0NAorLS0tIGEvZ2wvc3lzX3RpbWUuaW4uaAorKysrIGIvZ2wvc3lzX3RpbWUuaW4uaAorQEAgLTkzLDIwICs5MywyMCBAQCBzdHJ1Y3QgdGltZXZhbAorICMgICBkZWZpbmUgZ2V0dGltZW9mZGF5IHJwbF9nZXR0aW1lb2ZkYXkKKyAjICBlbmRpZgorIF9HTF9GVU5DREVDTF9SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KQorKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkKKyAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIF9HTF9DWFhBTElBU19SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KSk7CisgIyBlbHNlCisgIyAgaWYgIUBIQVZFX0dFVFRJTUVPRkRBWUAKKyBfR0xfRlVOQ0RFQ0xfU1lTIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpCisgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAjICBlbmRpZgorIC8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBzeXN0ZW1zLCBieSBkZWZhdWx0LCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXpvbmUgKi4gICovCisgX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZ2V0dGltZW9mZGF5KTsKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMWI3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gY2VlODBhZjFmZTkzZjViNzY3NjVhZmVlYmZjYzNiOTAyNzY4ZjVkNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI2IE1heSAyMDE1IDIxOjQxOjI0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzZSBwa2ctY29uZmlnIHRvIGxvY2F0ZSB6bGliCisKK0FDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gc29tZXRpbWVzIGZpbmQgaG9zdCBsaWJzIGFuZCBpcyB0aGVyZWZvcmUgbm90Cityb2J1c3Qgd2hlbiBjcm9zcy1jb21waWxpbmcuIFJlbW92ZSBpdCBmb3IgemxpYiBhbmQgdXNlIFBLR19DSEVDS19NT0RVTEVTCitpbnN0ZWFkLgorCitSZW1vdmluZyBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgZm9yIHpsaWIgYWxzbyByZW1vdmVzIHRoZSAtLXdpdGgtbGliei1wcmVmaXgKK2NvbmZpZ3VyZSBvcHRpb24uIElmIHpsaWIgc3VwcG9ydCBpcyBlbmFibGVkLCB0aGVuIGZhaWx1cmUgdG8gZmluZCB6bGliIHZpYQorcGtnLWNvbmZpZyBpcyBub3cgdHJlYXRlZCBhcyBhIGZhdGFsIGVycm9yLgorCitDaGFuZ2UgYmFzZWQgb24gQ2hyb21lT1MgZ251dGxzIDIuMTIuMjMgY3Jvc3MtY29tcGlsZSBmaXhlcyBwYXRjaDoKKworICBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tLyMvYy8yNzE2NjEvCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI0ICsrKysrKysrKystLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMWI1NjFkNS4uMGM3ODdkYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTA4LDI1ICs1MDgsMjEgQEAgQUNfQVJHX1dJVEgoemxpYiwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC16bGliXSwKKyBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gaW5jbHVkZSB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnRdKQorIGlmIHRlc3QgeCRhY196bGliICE9IHhubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKy0gQUNfTElCX0hBVkVfTElOS0ZMQUdTKHosLCBbI2luY2x1ZGUgPHpsaWIuaD5dLCBbY29tcHJlc3MgKDAsIDAsIDAsIDApO10pCistIGlmIHRlc3QgeCRhY19jdl9saWJ6ICE9IHh5ZXM7IHRoZW4KKy0gICBBQ19NU0dfV0FSTigKKy0qKiogCistKioqIFpMSUIgd2FzIG5vdCBmb3VuZC4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIFpMSUIgY29tcHJlc3Npb24uKQorLSBmaQorIGVsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyBmaQorIAorLVBLR19DSEVDS19FWElTVFMoemxpYiwgWkxJQl9IQVNfUEtHQ09ORklHPXksIFpMSUJfSEFTX1BLR0NPTkZJRz1uKQorLQorIGlmIHRlc3QgeCRhY196bGliICE9IHhubzsgdGhlbgorLSAgaWYgdGVzdCAiJFpMSUJfSEFTX1BLR0NPTkZJRyIgPSAieSIgOyB0aGVuCistICAgIGlmIHRlc3QgIngkR05VVExTX1JFUVVJUkVTX1BSSVZBVEUiID0geDsgdGhlbgorLSAgICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSJSZXF1aXJlcy5wcml2YXRlOiB6bGliIgorLSAgICBlbHNlCistICAgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IiRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSwgemxpYiIKKy0gICAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKFpMSUIsIHpsaWIpCisrICBIQVZFX0xJQlo9eWVzCisrICBBQ19ERUZJTkUoW0hBVkVfTElCWl0sIFsxXSwgW3psaWIgaXMgZW5hYmxlZF0pCisrICBBQ19TVUJTVChIQVZFX0xJQlopCisrICBMVExJQlo9JFpMSUJfTElCUworKyAgQUNfU1VCU1QoTFRMSUJaKQorKyAgaWYgdGVzdCAieCRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSIgPSB4OyB0aGVuCisrICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSJSZXF1aXJlcy5wcml2YXRlOiB6bGliIgorKyAgZWxzZQorKyAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iJEdOVVRMU19SRVFVSVJFU19QUklWQVRFLCB6bGliIgorICAgZmkKKyBmaQorIEFDX1NVQlNUKEdOVVRMU19SRVFVSVJFU19QUklWQVRFKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuMy4xNy4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjMuMTcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg1Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjMuMTcuMS5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgZ251dGxzLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiOGQwMWM3ZTdmMmNiYzU4NzFmZGNhODMyZDIyNjBiNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQwZjE1ODAzMGE5MmY0NTBhMDdiMjAzMDBhMzk5NjcxMGNhMTk4MDA4NDhkOWY2ZmQ2MjQ5MzE3MGM1YmJiNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMS9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM4OWYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbSBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbQorLS0tIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtCTIwMTItMDktMjQgMTU6MDg6NDIuMDAwMDAwMDAwICswMzAwCisrKysgbGlidGFzbjEtMi4xNC9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wMS0wMyAwNzozNToyNi43MDI3NjM0MDMgKzAyMDAKK0BAIC0zMSw3ICszMSw3IEBACisgQU1fTUFLRUlORk9IVE1MRkxBR1MgPSAkKEFNX01BS0VJTkZPRkxBR1MpIFwKKwktLW5vLXNwbGl0IC0tbnVtYmVyLXNlY3Rpb25zIC0tY3NzLWluY2x1ZGU9dGV4aW5mby5jc3MKKworLWRpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykgYXNuMVBhcnNlci4xIGFzbjFDb2RpbmcuMSBhc24xRGVjb2RpbmcuMQorK2Rpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykKKworIEhFTFAyTUFOX09QVFMgPSAtLWluZm8tcGFnZSBsaWJ0YXNuMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3NDU3NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjUuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBBU04uMSBhbmQgREVSIG1hbmlwdWxhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0YXNuMS8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2VuZGxpbmU9ODttZDU9YzM4MDNhM2U4Y2E1YWI1ZWIxZTU5MTJmYWE0MDUzNTEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0YXNuMS9saWJ0YXNuMS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MWQyNzI2OTc1NDVlODJkMzlmNmJkMTQ4NTRiNjhmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OWIzYjVkY2UxMTkyNzM0MzE1NDRlY2IzMDUwODFmMzUzMDkxMTAwMWJiMTJlNWQ3NjU4ODkwN2VkYjcxYmRhIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBsaWJfcGFja2FnZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL2dwZ21lLnBjIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvZ3BnbWUucGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhNGQ1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL2dwZ21lLnBjCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD0vdXNyCitsaWJkaXI9JHtwcmVmaXh9L2xpYgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBncGdtZQorRGVzY3JpcHRpb246IEdOVSBQcml2YWN5IEd1YXJkIE1hZGUgRWFzeQorVmVyc2lvbjogMS40LjMKK1JlcXVpcmVzOgorTGliczogLUwke2xpYmRpcn0gLWxncGdtZSAtbGFzc3VhbiAtbGdwZy1lcnJvcgorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmYxZjRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjc5IEBACitVcGRhdGUgZ3BnbWUgdG8gdXNlIHBrZ2NvbmZpZyBpbnN0ZWFkIG9mIC1jb25maWcgZmlsZXMgc2luY2UgaXRzCitzaW1wbGVyIGFuZCBsZXNzIGVycm9yIHByb25lIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbVXBzdHJlYW0gbm90IGludGVyZXN0ZWQgaW4gcGtnLWNvbmZpZyBzdXBwb3J0XQorUlAgMjAxNS80LzE3CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI5OGEyMmIuLmM3NzhiNjEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYyMiw2ICs2MjIsNyBAQCBBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUgc3JjL01ha2VmaWxlCisgICAgICAgICAgICAgICAgIHNyYy92ZXJzaW9uaW5mby5yYworICAgICAgICAgICAgICAgICBzcmMvZ3BnbWUuaCkKKyBBQ19DT05GSUdfRklMRVMoc3JjL2dwZ21lLWNvbmZpZywgY2htb2QgK3ggc3JjL2dwZ21lLWNvbmZpZykKKytBQ19DT05GSUdfRklMRVMoc3JjL2dwZ21lLnBjIHNyYy9ncGdtZS1wdGhyZWFkLnBjKQorIEFDX0NPTkZJR19GSUxFUyhbbGFuZy9NYWtlZmlsZSBsYW5nL2NsL01ha2VmaWxlIGxhbmcvY2wvZ3BnbWUuYXNkXSkKKyBBQ19PVVRQVVQKKyAKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDU4OTIyZjkuLjQwZDBkY2EgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTIwLDExICsyMCwxMyBAQAorIAorICMgTm90ZTogbW9jX2tkcGlwZWlvZGV2aWNlIHNob3VsZCBhY3R1YWxseSBiZSBhIGRlcGVuZGVjeSBiZWxvdy4KKyBFWFRSQV9ESVNUID0gZ3BnbWUtY29uZmlnLmluIGdwZ21lLm00IGxpYmdwZ21lLnZlcnMgQ2hhbmdlTG9nLTIwMTEgXAorLQkgICAgIGdwZ21lLmguaW4gdmVyc2lvbmluZm8ucmMuaW4gZ3BnbWUuZGVmIG1vY19rZHBpcGVpb2RldmljZS5jcHAKKysJICAgICBncGdtZS5oLmluIHZlcnNpb25pbmZvLnJjLmluIGdwZ21lLmRlZiBtb2Nfa2RwaXBlaW9kZXZpY2UuY3BwIGdwZ21lLnBjLmluIGdwZ21lLXB0aHJlYWQucGMuaW4KKyAKKyBiaW5fU0NSSVBUUyA9IGdwZ21lLWNvbmZpZworIG00ZGF0YWRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAorIG00ZGF0YV9EQVRBID0gZ3BnbWUubTQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBncGdtZS5wYyBncGdtZS1wdGhyZWFkLnBjCisgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGdwZ21lLmgKKyAKKyBiaW5fUFJPR1JBTVMgPSBncGdtZS10b29sCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4gYi9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk4MGE0OGUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluCitAQCAtMCwwICsxLDE1IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBHUEdNRV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AR1BHTUVfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnbWUKKytEZXNjcmlwdGlvbjogR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBDIGxhbmd1YWdlIGxpYnJhcnkgdGhhdCBhbGxvd3MgdG8gYWRkc3VwcG9ydCBmb3IgY3J5cHRvZ3JhcGh5IHRvIGEgcHJvZ3JhbSAodGhyZWFkZWQgdmVyc2lvbikKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lLXB0aHJlYWQgLWxwdGhyZWFkCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKytSZXF1aXJlczogbGliYXNzdWFuIGdwZy1lcnJvcgorZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS5tNCBiL3NyYy9ncGdtZS5tNAoraW5kZXggNmMyYmU0NC4uZDhhNzVjYiAxMDA2NDQKKy0tLSBhL3NyYy9ncGdtZS5tNAorKysrIGIvc3JjL2dwZ21lLm00CitAQCAtNzksNyArNzksNyBAQCBkbmwgY29uZmlnIHNjcmlwdCBkb2VzIG5vdCBtYXRjaCB0aGUgaG9zdCBzcGVjaWZpY2F0aW9uIHRoZSBzY3JpcHQKKyBkbmwgaXMgYWRkZWQgdG8gdGhlIGdwZ19jb25maWdfc2NyaXB0X3dhcm4gdmFyaWFibGUuCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorLVsgQUNfUkVRVUlSRShbX0FNX1BBVEhfR1BHTUVfQ09ORklHXSlkbmwKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuNC4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2dwZ21lX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC04OSwzNiArODksMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorICAgICAgbWluX2dwZ21lX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEdNRSAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUUsIFtncGdtZSA+PSAkbWluX2dwZ21lX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMTI3LDE5ICsxMDMsMTEgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdNRV9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS1jZmxhZ3NgCistICAgIEdQR01FX0xJQlM9YCRHUEdNRV9DT05GSUcgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfQ0ZMQUdTPSIiCistICAgIEdQR01FX0xJQlM9IiIKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCistICBBQ19TVUJTVChHUEdNRV9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9MSUJTKQorIF0pCisgCisgZG5sIEFNX1BBVEhfR1BHTUVfUFRIUkVBRChbTUlOSU1VTS1WRVJTSU9OLAorQEAgLTE0OCw3ICsxMTYsNyBAQCBkbmwgVGVzdCBmb3IgbGliZ3BnbWUgYW5kIGRlZmluZSBHUEdNRV9QVEhSRUFEX0NGTEFHUworIGRubCAgYW5kIEdQR01FX1BUSFJFQURfTElCUy4KKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKy1bIEFDX1JFUVVJUkUoW19BTV9QQVRIX0dQR01FX0NPTkZJR10pZG5sCisrWworICAgdG1wPWlmZWxzZShbJDFdLCAsMTowLjQuMiwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9ncGdtZV9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtMTU4LDM4ICsxMjYsMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIHB0aHJlYWQgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICBpZiBgJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIDI+IC9kZXYvbnVsbGAgOyB0aGVuCistICAgICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICAgIGZpCistICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUVfUFRIUkVBRCwgW2dwZ21lLXB0aHJlYWQgPj0gJG1pbl9ncGdtZV92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IEdQR01FLCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJEdQR01FX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBncGdtZS1wdGhyZWFkIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMTk4LDE5ICsxNDAsMTEgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR01FX1BUSFJFQURfQ0ZMQUdTPWAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgLS1jZmxhZ3NgCistICAgIEdQR01FX1BUSFJFQURfTElCUz1gJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIC0tbGlic2AKKy0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCisgICBlbHNlCistICAgIEdQR01FX1BUSFJFQURfQ0ZMQUdTPSIiCistICAgIEdQR01FX1BUSFJFQURfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX1BUSFJFQURfQ0ZMQUdTKQorLSAgQUNfU1VCU1QoR1BHTUVfUFRIUkVBRF9MSUJTKQorIF0pCisgCisgCitAQCAtMjI5LDM2ICsxNjMsMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfR0xJQl0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRV9HTElCLCBbZ3BnbWUgPj0gJG1pbl9ncGdtZV92ZXJzaW9uIGdsaWItMi4wXSwgW29rPXllc10sIFtvaz1ub10pICAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMjY3LDE3ICsxNzcsOSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9HTElCXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHTUVfR0xJQl9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS1nbGliIC0tY2ZsYWdzYAorLSAgICBHUEdNRV9HTElCX0xJQlM9YCRHUEdNRV9DT05GSUcgLS1nbGliIC0tbGlic2AKKy0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCisgICBlbHNlCistICAgIEdQR01FX0dMSUJfQ0ZMQUdTPSIiCistICAgIEdQR01FX0dMSUJfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX0dMSUJfQ0ZMQUdTKQorLSAgQUNfU1VCU1QoR1BHTUVfR0xJQl9MSUJTKQorIF0pCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLnBjLmluIGIvc3JjL2dwZ21lLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjY5NTM5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dwZ21lLnBjLmluCitAQCAtMCwwICsxLDE1IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBHUEdNRV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AR1BHTUVfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnbWUKKytEZXNjcmlwdGlvbjogR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBDIGxhbmd1YWdlIGxpYnJhcnkgdGhhdCBhbGxvd3MgdG8gYWRkc3VwcG9ydCBmb3IgY3J5cHRvZ3JhcGh5IHRvIGEgcHJvZ3JhbS4KKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKytSZXF1aXJlczogbGliYXNzdWFuIGdwZy1lcnJvcgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjUuNC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OTgzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjUuNC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkhpZ2gtbGV2ZWwgR251UEcgZW5jcnlwdGlvbi9zaWduaW5nIEFQSSIKK0RFU0NSSVBUSU9OID0gIkdudVBHIE1hZGUgRWFzeSAoR1BHTUUpIGlzIGEgbGlicmFyeSBkZXNpZ25lZCB0byBtYWtlIGFjY2VzcyB0byBHbnVQRyBlYXNpZXIgZm9yIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlkZXMgYSBIaWdoLUxldmVsIENyeXB0byBBUEkgZm9yIGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIHNpZ25pbmcsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gYW5kIGtleSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvZ3BnbWUuaHRtbCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3BnbWUuaC5pbjtlbmRsaW5lPTIzO21kNT03MWJhMmFlOGQ2Y2EwMzRlZDEwYmQwOTlhOGNmNDczYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5naW5lLmg7ZW5kbGluZT0yMjttZDU9NGI2ZDhiYTMxM2Q5YjU2NGNjNGQ0Y2ZiMTY0MGFmOWQiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ3BnbWUvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9ncGdtZS5wYyBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZlYWZhMDNlYTA2NGUxZDFkYzExYmMyYjg4NDA0NjIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiMzhjMGVjODgxNWM5ZTk0ZTYwNDdiNDg0OTg0ODA4YThkYWQ5ZDZiZWM4ZGYzM2RjNTMzOWZkNTVmZmVhNmMiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIGxpYmFzc3VhbiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ncGdtZS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitQQUNLQUdFUyA9KyAiJHtQTn0tcHRocmVhZCIKK0ZJTEVTXyR7UE59LXB0aHJlYWQgPSAiJHtsaWJkaXJ9L2xpYmdwZ21lLXB0aHJlYWQuc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jb21tb24tbGlzcC9zb3VyY2UvZ3BnbWUvKiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKKwlybSAtZiAke1N9L200L2xpYmFzc3Vhbi5tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZ3BnbWUucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNmYyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYwpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkludGVybmF0aW9uYWwgQ29tcG9uZW50IGZvciBVbmljb2RlIGxpYnJhcmllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBJbnRlcm5hdGlvbmFsIENvbXBvbmVudCBmb3IgVW5pY29kZSAoSUNVKSBpcyBhIG1hdHVyZSwgXAorcG9ydGFibGUgc2V0IG9mIEMvQysrIGFuZCBKYXZhIGxpYnJhcmllcyBmb3IgVW5pY29kZSBzdXBwb3J0LCBzb2Z0d2FyZSBcCitpbnRlcm5hdGlvbmFsaXphdGlvbiAoSTE4TikgYW5kIGdsb2JhbGl6YXRpb24gKEcxMU4pLCBnaXZpbmcgYXBwbGljYXRpb25zIHRoZSBcCitzYW1lIHJlc3VsdHMgb24gYWxsIHBsYXRmb3Jtcy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2l0ZS5pY3UtcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIklDVSIKK0RFUEVORFMgPSAiaWN1LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworUyA9ICIke1dPUktESVJ9L2ljdS9zb3VyY2UiCitTUERYX1MgPSAiJHtXT1JLRElSfS9pY3UiCitTVEFHSU5HX0lDVV9ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vJHtCUE59LyR7UFZ9IgorCitDUFBGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EVV9USU1FWk9ORT0wIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2ljdS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWcKKworIyBJQ1UgbmVlZHMgdGhlIG5hdGl2ZSBidWlsZCBkaXJlY3RvcnkgYXMgYW4gYXJndW1lbnQgdG8gaXRzIC0td2l0aC1jcm9zcy1idWlsZCBvcHRpb24gd2hlbgorIyBjcm9zcy1jb21waWxpbmcuIFRha2VuIHRoZSBzaXR1YXRpb24gdGhhdCBkaWZmZXJlbnQgYnVpbGRzIG1heSBzaGFyZSBhIGNvbW1vbiBzc3RhdGUtY2FjaGUKKyMgaW50byBjb25zaWRlcmF0aW9uLCB0aGUgbmF0aXZlIGJ1aWxkIGRpcmVjdG9yeSBuZWVkcyB0byBiZSBzdGFnZWQuCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWNyb3NzLWJ1aWxkPSR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0iCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRoLWNyb3NzLWJ1aWxkPSR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0iCisKK1BSRVBST0NFU1NfUkVMT0NBVEVfRElSUyA9ICIke2RhdGFkaXJ9LyR7QlBOfS8ke1BWfSIKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlta2RpciAtcCAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9jb25maWcvaWN1Y3Jvc3MubWsgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9L2NvbmZpZworCWNwIC1yICR7Qn0vY29uZmlnL2ljdWNyb3NzLmluYyAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9saWIgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9CisJY3AgLXIgJHtCfS9iaW4gJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9CisJY3AgLXIgJHtCfS90b29scyAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0KK30KKworUEFDS0FHRVMgPSsgImxpYmljdWRhdGEgbGliaWN1dWMgbGliaWN1aTE4biBsaWJpY3VsZSBsaWJpY3VseCBsaWJpY3V0dSBsaWJpY3VpbyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyIKKworRklMRVNfbGliaWN1ZGF0YSA9ICIke2xpYmRpcn0vbGliaWN1ZGF0YS5zby4qIgorRklMRVNfbGliaWN1dWMgPSAiJHtsaWJkaXJ9L2xpYmljdXVjLnNvLioiCitGSUxFU19saWJpY3VpMThuID0gIiR7bGliZGlyfS9saWJpY3VpMThuLnNvLioiCitGSUxFU19saWJpY3VsZSA9ICIke2xpYmRpcn0vbGliaWN1bGUuc28uKiIKK0ZJTEVTX2xpYmljdWx4ID0gIiR7bGliZGlyfS9saWJpY3VseC5zby4qIgorRklMRVNfbGliaWN1dHUgPSAiJHtsaWJkaXJ9L2xpYmljdXR1LnNvLioiCitGSUxFU19saWJpY3VpbyA9ICIke2xpYmRpcn0vbGliaWN1aW8uc28uKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvMDAwMS1EaXNhYmxlLUxERkxBR1NJQ1VEVC1mb3ItTGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2OGQ1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvMDAwMS1EaXNhYmxlLUxERkxBR1NJQ1VEVC1mb3ItTGludXgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwYzgyZDZhYTAyYzA4ZTQxYjEzYzgzYjE0NzgyYmQ3MDI0ZTI1ZDU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTUgRmViIDIwMTQgMjE6MDY6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSBMREZMQUdTSUNVRFQgZm9yIExpbnV4CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIENvbmZpZ3VyYXRpb24gXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc291cmNlL2NvbmZpZy9taC1saW51eCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZy9taC1saW51eCBiL2NvbmZpZy9taC1saW51eAoraW5kZXggMzY2ZjBjYy4uMjY4OWFhYiAxMDA2NDQKKy0tLSBhL2NvbmZpZy9taC1saW51eAorKysrIGIvY29uZmlnL21oLWxpbnV4CitAQCAtMjEsNyArMjEsNyBAQCBMRF9SUEFUSD0gLVdsLC16b3JpZ2luLC1ycGF0aCwnJCQnT1JJR0lOCisgTERfUlBBVEhfUFJFID0gLVdsLC1ycGF0aCwKKyAKKyAjIyBUaGVzZSBhcmUgdGhlIGxpYnJhcnkgc3BlY2lmaWMgTERGTEFHUworLUxERkxBR1NJQ1VEVD0tbm9kZWZhdWx0bGlicyAtbm9zdGRsaWIKKysjIExERkxBR1NJQ1VEVD0tbm9kZWZhdWx0bGlicyAtbm9zdGRsaWIKKyAKKyAjIyBDb21waWxlciBzd2l0Y2ggdG8gZW1iZWQgYSBsaWJyYXJ5IG5hbWUKKyAjIFRoZSBpbml0aWFsIHRhYiBpbiB0aGUgbmV4dCBsaW5lIGlzIHRvIHByZXZlbnQgaWN1LWNvbmZpZyBmcm9tIHJlYWRpbmcgaXQuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0MDY1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3BrZ2RhdGEuY3BwOiB1c2UgTEFSR0VfQlVGRkVSX01BWF9TSVpFIGZvciBjbWQKKworVXNlIExBUkdFX0JVRkZFUl9NQVhfU0laRSBmb3IgY21kIHJhdGhlciB0aGFuIFNNQUxMX0JVRkZFUl9NQVhfU0laRSwKK290aGVyd2lzZSB0aGVyZSB3YXMgYSBTZWdtZW50YXRpb24gZmF1bHQgZXJyb3Igd2hlbiB0aGUgY29tbWFuZCBsaW5lIGlzCitsb25nLCB0aGlzIHNob3VsZCBiZSBhIG1pc3BsYXkgc2luY2Ugb3RoZXIgY21kIHVzZXMKK0xBUkdFX0JVRkZFUl9NQVhfU0laRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAgYi90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCistLS0gYS90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCisrKysgYi90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCitAQCAtMTAxOSw3ICsxMDE5LDcgQEAgbm9ybWFsX3N5bWxpbmtfbW9kZToKKyAKKyBzdGF0aWMgaW50MzJfdCBwa2dfaW5zdGFsbExpYnJhcnkoY29uc3QgY2hhciAqaW5zdGFsbERpciwgY29uc3QgY2hhciAqdGFyZ2V0RGlyLCBVQm9vbCBub1ZlcnNpb24pIHsKKyAgICAgaW50MzJfdCByZXN1bHQgPSAwOworLSAgICBjaGFyIGNtZFtTTUFMTF9CVUZGRVJfTUFYX1NJWkVdOworKyAgICBjaGFyIGNtZFtMQVJHRV9CVUZGRVJfTUFYX1NJWkVdOworIAorICAgICBzcHJpbnRmKGNtZCwgImNkICVzICYmICVzICVzICVzJXMlcyIsCisgICAgICAgICAgICAgdGFyZ2V0RGlyLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU1LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU1LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzYTliZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIGljdS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbGljZW5zZS5odG1sO21kNT02NGVmZjRhYWRmZjRkMTA0ZDZkNDM3YzRmZGUwZTZkNyIKKworZGVmIGljdV9kb3dubG9hZF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCisKK0lDVV9QViA9ICIke0BpY3VfZG93bmxvYWRfdmVyc2lvbihkKX0iCisKK0JBU0VfU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuaWN1LXByb2plY3Qub3JnL2ZpbGVzL2ljdTRjLyR7UFZ9L2ljdTRjLSR7SUNVX1BWfS1zcmMudGd6IgorU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAorICAgICAgICAgICBmaWxlOi8vaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImUyZDUyM2RmNzlkNmNiNzg1NWMyZmJlMjg0ZjRkYjI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUxNmIyMmNiZWZkZDM1NGJlYzExNDU0MWY3ODQ5YTEyZjhmYzIwMTUzMjBjYTUyODJlZTRmZDc4NzU3MTQ1N2IiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy41OC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy41OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTEyZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiSVNPIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGN1cnJlbmN5LCBzY3JpcHQgY29kZXMgYW5kIHRoZWlyIHRyYW5zbGF0aW9ucyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKKworU1JDX1VSSSA9ICJodHRwczovL3BrZy1pc29jb2Rlcy5hbGlvdGguZGViaWFuLm9yZy9kb3dubG9hZHMvaXNvLWNvZGVzLSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDA5N2EwMDg1ZjA5NzllMjhmOWRiNjZlYzI3NGM1ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4NmFmNTczNWRjZTZlNGVmZjJiOTgzZTVkOGFhOWEzZGVhMWI4ZGI3MDIzMzNmZjIwYmU4OWU0NWY3ZjM1YTcyIgorCisjIGluaGVyaXQgZ2V0dGV4dCBjYW5ub3QgYmUgdXNlZCwgYmVjYXVzZSBpdCBhZGRzIGdldHRleHQtbmF0aXZlIHRvIEJBU0VERVBFTkRTIHdoaWNoCisjIGFyZSBpbmhpYml0ZWQgYnkgYWxsYXJjaAorREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS94bWwvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbi9saWJhc3N1YW4tYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbi9saWJhc3N1YW4tYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Y2NkZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBsaWJhc3N1YW4uCitUaGlzIHBhdGNoIGlzIHJlamVjdGVkIGJ5IHVwc3RyZWFtIGZvciB0aGUgcmVhc29uIGJlbG93OgorVGhleSB0aGluayBwa2djb25maWcgYWRkcyBubyBwb3J0YWJpbGl0eSBhbmQgbWFpbnRhaW5pbmcgdGhlbSBpcyBub3Qgd29ydGh3aGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFzc3Vhbi0yLjEuMi5vcmlnL01ha2VmaWxlLmFtCisrKysgbGliYXNzdWFuLTIuMS4yL01ha2VmaWxlLmFtCitAQCAtMjQsMTAgKzI0LDEzIEBAIEFVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyIG5vLWRpc3QtZ3oKKyAjIChBIHN1aXRhYmxlIGdpdGxvZy10by1jaGFuZ2Vsb2cgc2NyaXB0IGNhbiBiZSBmb3VuZCBpbiBHbnVQRyBtYXN0ZXIuKQorIEdJVExPR19UT19DSEFOR0VMT0c9Z2l0bG9nLXRvLWNoYW5nZWxvZworIAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGxpYmFzc3Vhbi5wYworKworIEVYVFJBX0RJU1QgPSBhdXRvZ2VuLnNoIGF1dG9nZW4ucmMgUkVBRE1FLkdJVCAgICAgICAgIAkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBDaGFuZ2VMb2ctMjAxMSBkb2MvQ2hhbmdlTG9nLTIwMTEgc3JjL0NoYW5nZUxvZy0yMDExIAlcCisgICAgICAgICAgICAgIHRlc3RzL0NoYW5nZUxvZy0yMDExIGNvbnRyaWIvQ2hhbmdlTG9nLTIwMTEgICAgIAkJXAorLSAgICAgICAgICAgICBidWlsZC1hdXgvZ2l0LWxvZy1mb290ZXIgYnVpbGQtYXV4L2dpdC1sb2ctZml4CisrICAgICAgICAgICAgIGJ1aWxkLWF1eC9naXQtbG9nLWZvb3RlciBidWlsZC1hdXgvZ2l0LWxvZy1maXggbGliYXNzdWFuLnBjLmluCisgCisgU1VCRElSUyA9IG00IHNyYyBkb2MgdGVzdHMKKyAKK0luZGV4OiBsaWJhc3N1YW4tMi4xLjIvbGliYXNzdWFuLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliYXNzdWFuLTIuMS4yL2xpYmFzc3Vhbi5wYy5pbgorQEAgLTAsMCArMSwxNCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorK2FwaV92ZXJzaW9uPUBMSUJBU1NVQU5fQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QExJQkFTU1VBTl9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBsaWJhc3N1YW4KKytEZXNjcmlwdGlvbjogSVBDIGxpYnJhcnkgdXNlZCBieSBHbnVQRyBhbmQgR1BHTUUKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGFzc3VhbgorK0xpYnMucHJpdmF0ZTogLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhc3N1YW4tMi4xLjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJhc3N1YW4tMi4xLjIvY29uZmlndXJlLmFjCitAQCAtNDM5LDcgKzQzOSw3IEBAIEFDX0NPTkZJR19GSUxFUyhbZG9jL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMoW3Rlc3RzL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy9saWJhc3N1YW4tY29uZmlnXSwgW2NobW9kICt4IHNyYy9saWJhc3N1YW4tY29uZmlnXSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy92ZXJzaW9uaW5mby5yY10pCistCisrQUNfQ09ORklHX0ZJTEVTKFtsaWJhc3N1YW4ucGNdKQorIEFDX09VVFBVVAorIAorIGVjaG8gIgorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9zcmMvbGliYXNzdWFuLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXNzdWFuLTIuMS4yLm9yaWcvc3JjL2xpYmFzc3Vhbi5tNAorKysrIGxpYmFzc3Vhbi0yLjEuMi9zcmMvbGliYXNzdWFuLm00CitAQCAtMTUsMTggKzE1LDYgQEAgZG5sIFJldHVybnMgb2sgc2V0IHRvIHllcyBvciBuby4KKyBkbmwKKyBBQ19ERUZVTihbX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTl0sCisgWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19BUkdfV0lUSChsaWJhc3N1YW4tcHJlZml4LAorLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJhc3N1YW4tcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIExJQkFTU1VBTiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAgbGliYXNzdWFuX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgbGliYXNzdWFuX2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgkbGliYXNzdWFuX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgbGliYXNzdWFuX2NvbmZpZ19hcmdzPSIkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeCIKKy0gICAgaWYgdGVzdCB4JHtMSUJBU1NVQU5fQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICBMSUJBU1NVQU5fQ09ORklHPSRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeC9iaW4vbGliYXNzdWFuLWNvbmZpZworLSAgICBmaQorLSAgZmkKKy0KKy0gIEFDX1BBVEhfVE9PTChMSUJBU1NVQU5fQ09ORklHLCBsaWJhc3N1YW4tY29uZmlnLCBubykKKyAKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC45LjIsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCitAQCAtMzcsNTEgKzI1LDEyIEBAIEFDX0RFRlVOKFtfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKyAgICAgbWluX2xpYmFzc3Vhbl92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgTElCQVNTVUFOIC0gdmVyc2lvbiA+PSAkbWluX2xpYmFzc3Vhbl92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRMSUJBU1NVQU5fQ09ORklHIiAhPSAibm8iIFwKKy0gICAgICYmIHRlc3QgLWYgIiRMSUJBU1NVQU5fQ09ORklHIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0KKy0gICAgbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uPWAkTElCQVNTVUFOX0NPTkZJRyAtLXZlcnNpb25gCistICAgIG1ham9yPWBlY2hvICRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgbWljcm89YGVjaG8gJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wzLydgCistCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UgCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorLQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoTElCQVNTVUFOLCBbbGliYXNzdWFuID49ICRtaW5fbGliYXNzdWFuX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIGlmIHRlc3QgIiRyZXFfbGliYXNzdWFuX2FwaSIgLWd0IDAgOyB0aGVuCisgICAgICAgdG1wPWAkTElCQVNTVUFOX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gbGliYXNzdWFuYAorICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtMSUJBU1NVQU4gQVBJIHZlcnNpb25dKQorICAgICAgICAgaWYgdGVzdCAiJHJlcV9saWJhc3N1YW5fYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorQEAgLTk2LDcgKzQ1LDcgQEAgQUNfREVGVU4oW19BTV9QQVRIX0xJQkFTU1VBTl9DT01NT05dLAorIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4IiRob3N0IiAhPSB4IDsgdGhlbgorLSAgICAgIGxpYmFzc3Vhbl9jb25maWdfaG9zdD1gJExJQkFTU1VBTl9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgICBsaWJhc3N1YW5fY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBsaWJhc3N1YW5gCisgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMzcsMTIgKzg2LDggQEAgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfTElCQVNTVUFOXSwKKyBbIF9BTV9QQVRIX0xJQkFTU1VBTl9DT01NT04oJDEpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBMSUJBU1NVQU5fQ0ZMQUdTPWAkTElCQVNTVUFOX0NPTkZJRyAkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBMSUJBU1NVQU5fTElCUz1gJExJQkFTU1VBTl9DT05GSUcgJGxpYmFzc3Vhbl9jb25maWdfYXJncyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICBlbHNlCistICAgIExJQkFTU1VBTl9DRkxBR1M9IiIKKy0gICAgTElCQVNTVUFOX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChMSUJBU1NVQU5fQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjIuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhZTQzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi4yLjEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJJUEMgbGlicmFyeSB1c2VkIGJ5IEdudVBHIGFuZCBHUEdNRSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliYXNzdWFuLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4uYztlbmRsaW5lPTIwO21kNT0wZjQ2NTU0NDE4MzQwNTA1NWVjMTc5ODY5ZmM1YjViYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYXNzdWFuLWRlZnMuaDtlbmRsaW5lPTIwO21kNT0yMGNkNTU1MzUyNjBjYTE3NzllZGFlNWM3YjgwYjIxZSIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliYXNzdWFuL2xpYmFzc3Vhbi0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjYyOTBlNzUwZWU4N2JlM2JmZDk1NzlmYzQ0YzZhMTg2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk0OTI4NWJiNzkzNDUzNjJjYjcyYTQwYzc5OGRlZmVmYzAwNzAzMWM2MGYyZjEwMjUxNzIwYmY2MGE5ZGUyZGUiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliYXNzdWFuLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC8qLm00Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGUyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGF0b21pYyBpbnRlZ2VyIG9wZXJhdGlvbnMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vaXZtYWkvbGliYXRvbWljX29wcy8iCitTRUNUSU9OID0gIm9wdGlvbmFsIgorUFJPVklERVMgKz0gImxpYmF0b21pY3Mtb3BzIgorTElDRU5TRSA9ICJHUEx2MiAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9MSUNFTlNJTkcudHh0O21kNT1lMDBkZDVjOGFjMDNhMTRjNWFlNTIyNWE0NTI1ZmEyZCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lml2bWFpc29mdC5jb20vX2Jpbi9hdG9taWNfb3BzL2xpYmF0b21pY19vcHMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQ2NTM4NjA0YjMxNGQyZmNjZGY4NjkxNWU1YzA4NTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDRmYTYxNWY2Mjk5MjU0N2JjYmRhNTYyMjYwZTI4YjUwNGJjNGMwNmUyZjk4NWYyNjdmM2FkZTMwMzA0YjVkZCIKKworUyA9ICIke1dPUktESVJ9L2xpYmF0b21pY19vcHMtJHtQVn0iCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB0aG9zZSBjb250YWluIG9ubHkgZG9jcywgbm90IG5lY2Vzc2FyeSBmb3Igbm93LgorCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtkb2NkaXJ9CisJbXYgJHtEfSR7ZGF0YWRpcn0vbGliYXRvbWljX29wcyAke0R9JHtkb2NkaXJ9LyR7QlBOfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuNy4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjcuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDI2NjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjcuMC5iYgpAQCAtMCwwICsxLDIxIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCitTVU1NQVJZID0gIkxpYnJhcnkgb2YgdXRpbGl0eSBmdW5jdGlvbnMgZnJvbSBCU0Qgc3lzdGVtcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgbGlicmFyeSBwcm92aWRlcyB1c2VmdWwgZnVuY3Rpb25zIGNvbW1vbmx5IGZvdW5kIG9uIEJTRCBzeXN0ZW1zLCBcCisgICAgICAgICAgICAgICBhbmQgbGFja2luZyBvbiBvdGhlcnMgbGlrZSBHTlUgc3lzdGVtcywgdGh1cyBtYWtpbmcgaXQgZWFzaWVyIHRvIHBvcnQgXAorICAgICAgICAgICAgICAgcHJvamVjdHMgd2l0aCBzdHJvbmcgQlNEIG9yaWdpbnMsIHdpdGhvdXQgbmVlZGluZyB0byBlbWJlZCB0aGUgc2FtZSBcCisgICAgICAgICAgICAgICBjb2RlIG92ZXIgYW5kIG92ZXIgYWdhaW4gb24gZWFjaCBwcm9qZWN0LiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitMSUNFTlNFID0gIkJTRC00LUNsYXVzZSAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYxNTMwZWE5MmFlYWExYzVlMjU0N2NmZDQzOTA1ZDhjIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImZjY2ViNGU2NmZkNDQ4Y2E0ZWQ0MmJhMjJhOGJhYmIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBmM2IwZTE3ZTVjMzRjMDM4MTI2ZTBhMDQzNTFiMTFlMjNjNjEwMWE3ZDBjZTNiZWVhYjI5YmI2NDE1YzEwYmIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZy9weXRob24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nL3B5dGhvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTU5MWViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZy9weXRob24ucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSBiMDFiYjI2OTRmNjZjZDk4MWU2ZDYxNTIzNDMzZGMzZWI1ZWQzMmYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogU2F0LCAxOCBKdWwgMjAxNSAyMzowMzozMCArMDkwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWMgLSBBdm9pZCBhbiBpbmNvcnJlY3QgY2hlY2sgZm9yIHB5dGhvbi4KKyBNYWtlZmlsZS5hbSAtIGF2b2lkIGhhcmQgY29kZWQgaG9zdCBpbmNsdWRlIHBhdGhzLgorCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTGkgWGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorLS0tCisgYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtIHwgIDMgKystCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgIHwgMTUgKystLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtIGIvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtCitpbmRleCA4MmI5YmI4Li5mOWZlN2E4IDEwMDY0NAorLS0tIGEvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtCisrKysgYi9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0KK0BAIC0yMyw3ICsyMyw4IEBAIFNVQkRJUlMgPSB0ZXN0CisgQ09ORklHX0NMRUFOX0ZJTEVTID0gKi5sb1QgKi5yZWogKi5vcmlnCisgQU1fQ0ZMQUdTID0gLWZQSUMgLURQSUMKKyBQWUxJQlZFUiA/PSBweXRob24kKFBZVEhPTl9WRVJTSU9OKQorLUFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpIC1JQFBZSU5DTFVERURJUkAKKytQWUlOQyA/PSAvdXNyL2luY2x1ZGUvJChQWUxJQlZFUikKKytBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKSAtSSQoUFlJTkMpCisgTElCUyA9ICQodG9wX2J1aWxkZGlyKS9zcmMvbGliY2FwLW5nLmxhCisgU1dJR19GTEFHUyA9IC1weXRob24KKyBTV0lHX0lOQ0xVREVTID0gJHtBTV9DUFBGTEFHU30KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFkNzc3ZDUuLjlkOTBmNjQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyMywxOSArMTIzLDggQEAgaWYgdGVzdCB4JHVzZV9weXRob24gPSB4bm8gOyB0aGVuCisgZWxzZQorIEFDX01TR19SRVNVTFQodGVzdGluZykKKyBBTV9QQVRIX1BZVEhPTgorLVBZSU5DTFVERURJUj1gcHl0aG9uJHthbV9jdl9weXRob25fdmVyc2lvbn0gLWMgImZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSU5DTFVERVBZJykpImAKKy1pZiB0ZXN0IC1mICR7UFlJTkNMVURFRElSfS9QeXRob24uaCA7IHRoZW4KKy0JcHl0aG9uX2ZvdW5kPSJ5ZXMiCistCUFDX1NVQlNUKFBZSU5DTFVERURJUikKKy0JQUNfTVNHX05PVElDRShQeXRob24gYmluZGluZ3Mgd2lsbCBiZSBidWlsdCkKKy1lbHNlCistCXB5dGhvbl9mb3VuZD0ibm8iCistCWlmIHRlc3QgeCR1c2VfcHl0aG9uID0geHllcyA7IHRoZW4KKy0JCUFDX01TR19FUlJPUihbUHl0aG9uIGV4cGxpY2l0bHkgcmVxdWlyZWQgYW5kIHB5dGhvbiBoZWFkZXJzIGZvdW5kXSkKKy0JZWxzZQorLQkJQUNfTVNHX1dBUk4oIlB5dGhvbiBoZWFkZXJzIG5vdCBmb3VuZCAtIHB5dGhvbiBiaW5kaW5ncyB3aWxsIG5vdCBiZSBtYWRlIikKKy0JZmkKKy1maQorK3B5dGhvbl9mb3VuZD0ieWVzIgorK0FDX01TR19OT1RJQ0UoUHl0aG9uIGJpbmRpbmdzIHdpbGwgYmUgYnVpbHQpCisgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTiwgdGVzdCAke3B5dGhvbl9mb3VuZH0gPSAieWVzIikKKyAKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzFkNWRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuNy5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkFuIGFsdGVybmF0ZSBwb3NpeCBjYXBhYmlsaXRpZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBsaWJjYXAtbmcgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBtYWtlIHByb2dyYW1taW5nIFwKK3dpdGggUE9TSVggY2FwYWJpbGl0aWVzIG11Y2ggZWFzaWVyIHRoYW4gdGhlIHRyYWRpdGlvbmFsIGxpYmNhcCBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvbGliY2FwLW5nIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWUzZWRhMDFkOTgxNWY4ZDI0YWFlMmRiZDg5YjY4YjA2IgorCitTUkNfVVJJID0gImh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9zZ3J1YmIvbGliY2FwLW5nL2xpYmNhcC1uZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLnBhdGNoIgorCitpbmhlcml0IGxpYl9wYWNrYWdlIGF1dG90b29scyBweXRob25uYXRpdmUKKworU1JDX1VSSVttZDVzdW1dID0gIjNkN2QxMjZiMjllMjg2OWEwMjU3YzE3YzhiMGQ5YjJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxNTU0OWNlMzliMzMzZjZiNzhiYWVlMGMwYjRlZjE4YmM3MjZjNmJmMWNjYTEyM2RmZDg5ZGQ5NjNmNmQwNmIiCisKK0RFUEVORFMgKz0gInN3aWctbmF0aXZlIHB5dGhvbiIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtcHl0aG9uMyIKKworRVhUUkFfT0VNQUtFICs9ICJQWUxJQlZFUj0ncHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBQWUlOQz0nJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWUxJQlZFUn0nIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vKi8uZGVidWciCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92aW5nIGxpYmNhcC1uZyB0byBiYXNlX2xpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9LworCQltdiAtZiAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfS8KKwkJcmVscGF0aD0ke0Bvcy5wYXRoLnJlbHBhdGgoIiR7YmFzZV9saWJkaXJ9IiwgIiR7bGliZGlyfSIpfQorCQlsbiAtc2YgJHtyZWxwYXRofS9saWJjYXAtbmcuc28uMC4wLjAgJHtEfSR7bGliZGlyfS9saWJjYXAtbmcuc28KKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI0LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Yjk0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBnZXR0aW5nL3NldHRpbmcgUE9TSVguMWUgY2FwYWJpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9mdWxseWNhcGFibGUvIgorCisjIG5vIHNwZWNpZmljIEdQTCB2ZXJzaW9uIHJlcXVpcmVkCitMSUNFTlNFID0gIkJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZTttZDU9M2Y4NGZkNmYyOWQ0NTNhNTY1MTRjYjdlNGVhZDI1ZjEiCisKK0RFUEVORFMgPSAicGVybC1uYXRpdmUtcnVudGltZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2xpYnMvc2VjdXJpdHkvbGludXgtcHJpdnMvJHtCUE59Mi8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDQzYWI5ZjY4MDQzNWE3ZmZmMzViNGFjZThkNDViODAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2VlNDU2OGY3OGRjODUxZDcyNmZjOTNmMjVmNGVkOTFjYzIyM2IxZmU4MjU5ZGFhNGE3NzE1OGQxNzRlNmM2NSIKKworaW5oZXJpdCBsaWJfcGFja2FnZQorCisjIGRvIE5PVCBwYXNzIHRhcmdldCBjZmxhZ3MgdG8gaG9zdCBjb21waWxhdGlvbnMKKyMKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIGxpYmNhcCB1c2VzIDo9IGZvciBjb21waWxlcnMsIGZvcnR1bmF0ZWx5LCBpdCBnaXZlcyB1cyBhIGhpbnQKKwkjIG9uIHdoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggPz0KKwlzZWQgLWUgJ3MsOj0sPz0sZycgLWkgTWFrZS5SdWxlcworCXNlZCAtZSAncyxeQlVJTERfQ0ZMQUdTID89ICQoLipDRkxBR1MpLEJVSUxEX0NGTEFHUyA6PSAkKEJVSUxEX0NGTEFHUyksJyAtaSBNYWtlLlJ1bGVzCisKKwkjIGRpc2FibGUgZ3BlcmYgZGV0ZWN0aW9uCisJc2VkIC1lICcvc2hlbGwgZ3BlcmYvY2lmZXEgKCx5ZXMpJyAtaSBsaWJjYXAvTWFrZWZpbGUKK30KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAnYXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gIiIKKworUEFDS0FHRUNPTkZJR1thdHRyXSA9ICJMSUJBVFRSPXllcyxMSUJBVFRSPW5vLGF0dHIiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiUEFNX0NBUD15ZXMsUEFNX0NBUD1ubyxsaWJwYW0iCisKK0VYVFJBX09FTUFLRSA9ICIgXAorICBJTkRFTlQ9ICBcCisgIGxpYj0ke0Bvcy5wYXRoLmJhc2VuYW1lKCcke2xpYmRpcn0nKX0gXAorICBSQUlTRV9TRVRGQ0FQPW5vIFwKKyAgRFlOQU1JQz15ZXMgXAorIgorCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgU1lTVEVNX0hFQURFUlM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKKyMgdGhlc2UgYXJlIHByZXNlbnQgaW4gdGhlIGxpYmNhcCBkZWZhdWx0cywgc28gaW5jbHVkZSBpbiBvdXIgQ0ZMQUdTIHRvbworQ0ZMQUdTICs9ICItRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlICR7RVhUUkFfT0VDT05GfQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBcCisJCSR7RVhUUkFfT0VDT05GfSBcCisJCURFU1RESVI9IiR7RH0iIFwKKwkJcHJlZml4PSIke3ByZWZpeH0iIFwKKwkJU0JJTkRJUj0iJHtEfSR7c2JpbmRpcn0iCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92ZSB0aGUgbGlicmFyeSB0byBiYXNlX2xpYmRpcgorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2xpYmRpcn0vbGliY2FwKiAke0R9JHtiYXNlX2xpYmRpcn0KKyAgICAgICAgICAgICAgICBpZiBbIC1kICR7RH0ke2xpYmRpcn0vc2VjdXJpdHkgXTsgdGhlbgorCQkJbXYgJHtEfSR7bGliZGlyfS9zZWN1cml0eSAke0R9JHtiYXNlX2xpYmRpcn0KKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9Lyouc28iCisKKyMgcGFtIGZpbGVzCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnLyouc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNoZWNrL2xpYmNoZWNrXzAuMTAuMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNoZWNrL2xpYmNoZWNrXzAuMTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI0NTlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgID0gIkNoZWNrIC0gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayBmb3IgQyBjb2RlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NoZWNrLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImRldmVsIgorCitMSUNFTlNFICA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2NoZWNrL2NoZWNrLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTNjNWU1Yzc3ZDA5MGUxMDNhMTdmM2VkN2ZkN2Q4YjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjVmNTA3NjZhYTZmOGZlNWEyZGY3NTI2NjZjYTAxYTk1MGFkZDQ1MDc5YWEwNjQxNmI4Mzc2NWIxY2Y3MTA1MiIKKworUyA9ICIke1dPUktESVJ9L2NoZWNrLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdGV4aW5mbworCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9BV0tfUEFUSD0ke2JpbmRpcn0vZ2F3ayIKKworUlJFUExBQ0VTXyR7UE59ID0gImNoZWNrICg8PSAwLjkuNSkiCitSREVQRU5EU18ke1BOfSArPSAiZ2F3ayIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY3JvY28vbGliY3JvY29fMC42LjguYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjFiOTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY3JvY28vbGliY3JvY29fMC42LjguYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJDYXNjYWRpbmcgU3R5bGUgU2hlZXQgKENTUykgcGFyc2luZyBhbmQgbWFuaXB1bGF0aW9uIHRvb2xraXQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jci1yZ2IuYztlbmRsaW5lPTIyO21kNT0zMWQ1ZjA5NDRkNTU2Yzg1ODlkMDRlYTYwNTVmY2M2NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jci10ZXN0LXV0aWxzLmM7ZW5kbGluZT0yMTttZDU9MjM4MmMyNzkzNGNhZTFkMzc5MmZjYjE3YTYxNDJjNGUiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ4bWwyIHpsaWIiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtQnN5bWJvbGljPWF1dG8iCitQUiA9ICJyMiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9jcm9jby0wLjYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MgYmluY29uZmlnLWRpc2FibGVkCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjc2N2U3M2M0MTc0Zjc1Yjk5Njk1ZDQ1MzBmZDliYjgwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZWE2ZTFiODU4YzU1MjE5Y2VmZDcxMDk3NTZiZmY1YmMxYTc3NGJhN2E1NWY3ZDNjY2Q3MzRkNmI4NzFiODU3MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb24vZml4LWluY2x1ZGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbi9maXgtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyN2FlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb24vZml4LWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK211c2wgY29tcGxhaW5zCitmYXRhbCBlcnJvcjogc3lzL3VuaXN0ZC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CithbmQgcmlnaHRseSBzbworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBsaWJkYWVtb24tMC4xNC5vcmlnL2V4YW1wbGVzL3Rlc3RkLmMKKysrKyBsaWJkYWVtb24tMC4xNC9leGFtcGxlcy90ZXN0ZC5jCitAQCAtMjEsOSArMjEsOSBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKy0jaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgCisgI2luY2x1ZGUgPGxpYmRhZW1vbi9kZm9yay5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbl8wLjE0LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbl8wLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MGVlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBDIGxpYnJhcnkgd2hpY2ggZWFzZXMgdGhlIHdyaXRpbmcgb2YgVU5JWCBkYWVtb25zIgorU0VDVElPTiA9ICJsaWJzIgorQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4iCitIT01FUEFHRSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9saWJkYWVtb24vIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJkYWVtb24vZGFlbW9uLmg7YmVnaW5saW5lPTk7ZW5kbGluZT0yMTttZDU9YmQ5ZmJlNTdjZDk2ZDFhNTg0OGE4YmExMmQ5YTZiZjQiCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbGliZGFlbW9uL2xpYmRhZW1vbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWluY2x1ZGVzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MDlkYzI3MTA3YzIxYmNkOWZiZjJmOTVmNTY2OTU2MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDIzZWI1ZjZmOTg2ZGNjN2U3MDgzMDczNTViYTMyODlhYmUwM2NjMzgxZmM0N2E4MGJjYTRhNTBhYTZiODM0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1seW54IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODUxMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjIuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIGxpYnJhcnkgZm9yIGV2ZGV2IGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmV2ZGV2LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1YWFlMGQzOGZlZWE2ZmRhOTdjYTM4MWNiOTEzMmViIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmV2ZGV2L2xpYmV2ZGV2Lmg7ZW5kbGluZT0yMTttZDU9N2ZmNGYwYjUxMTMyNTJjMmYxYTgyOGUwYmJhZDk4ZDEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvbGliZXZkZXYvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGViZmNkNTE1MzU1OGViYTI1YThlNzFlYjI1MzRhZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2M3N2IyMTNmMDc1NzA2ZDQyOGEyYWY1NGI2NmJmODZiMDNhNjhlOWZiMzkwZTdlYzQ4Y2Y1NTA2NTk3MDY0MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyMTY4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdApAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworZmFpbD0wCitmb3IgdGVzdCBpbiAuL3Rlc3QvKgorZG8KKwkkdGVzdAorCWlmIFsgJD8gLWVxIDAgXQorCXRoZW4KKwkJZmFpbD0xCisJZmkKK2RvbmUKKworaWYgWyAkZmFpbCAtZXEgMCBdCit0aGVuCisJZWNobyAiUEFTUzogbGliZXZlbnQiCitlbHNlCisJZWNobyAiRkFJTDogbGliZXZlbnQiCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnRfMi4wLjIyLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnRfMi4wLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YzI2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBbiBhc3luY2hyb25vdXMgZXZlbnQgbm90aWZpY2F0aW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vbGliZXZlbnQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD01MDg4NCZhdGlkPTQ2MTMyMiIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00NWM1MzE2ZmY2ODRiY2ZlMmY5Zjg2ZDhiMTI3OTU1OSIKKworU1JDX1VSSSA9ICIgXAorICAgICR7U09VUkNFRk9SR0VfTUlSUk9SfS9sZXZlbnQvJHtCUH0tc3RhYmxlLnRhci5neiBcCisgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNGM1NmY5ODZhYTk4NTY3N2NhMWRiODk2MzBhMmUxMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MWMyYzQ5ZjBhZGFkYWNmZGJlNjMzMmEzNzJjMzhjZjljOGI3ODk1YmI3M2RhYmVhYTUzY2RjYzFkNGUxZmEzIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LXN0YWJsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorCitpbmhlcml0IGF1dG90b29scworCisjIE5lZWRlZCBmb3IgRGViaWFuIHBhY2thZ2luZworTEVBRF9TT05BTUUgPSAibGliZXZlbnQtMi4wLnNvIgorCitpbmhlcml0IHB0ZXN0CisKK0RFUEVORFMgPSAiemxpYiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWZvciBmaWxlIGluICR7Qn0vdGVzdC8ubGlicy9yZWdyZXNzICR7Qn0vdGVzdC8ubGlicy90ZXN0KgorCWRvCisJCWluc3RhbGwgLW0gMDc1NSAkZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXhpZi9saWJleGlmXzAuNi4yMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV4aWYvbGliZXhpZl8wLjYuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmNGNhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV4aWYvbGliZXhpZl8wLjYuMjEuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZWFkaW5nIGV4dGVuZGVkIGltYWdlIGluZm9ybWF0aW9uIChFWElGKSBmcm9tIEpQRUcgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmV4aWYiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYmV4aWYvbGliZXhpZi0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjczMzliODk4NTBmMjhjOGYxYzIzN2YyMzNlMDViMjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTZjZGFlYjYyZWIzZTZkZmFiMjQzNWY3ZDdiY2NkMmYzNzQzOGQyMWM1MjE4ZWM0ZTU4ZWZhOTE1N2Q0ZDQxYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAtaSBzOmRvY1wgYmluYXJ5OmJpbmFyeTpnIE1ha2VmaWxlCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTUxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzMyMDc5OWM5NDFkNDJhOWI3ZTM1MTgwNTM1OTY5NGVhM2IzNmQyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgQXByIDIwMTUgMDk6MDg6MzggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbmxzLm00OiBUYWtlIGl0IGZyb20gZ2V0dGV4dC0wLjE1CisKK0l0IG90aGVyd2lzZSBleHBlY3RzIGdldHRleHQgdG8gcHJvdmlkZSBpdC4gTGV0cyBnbyBpbmRlcGVuZGVudAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIG00L25scy5tNCB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L25scy5tNAorCitkaWZmIC0tZ2l0IGEvbTQvbmxzLm00IGIvbTQvbmxzLm00CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmM4ZmU2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvbTQvbmxzLm00CitAQCAtMCwwICsxLDMwIEBACisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlIG5vdCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgVWxyaWNoIERyZXBwZXIgZHJlcHBlckBjeWdudXMuY29tLCAxOTk1LTIwMDAuCisrZG5sIEJydW5vIEhhaWJsZSBoYWlibGVAY2xpc3AuY29ucy5vcmcsIDIwMDAtMjAwMy4KKysKKytBQ19QUkVSRVEoMi41MCkKKysKKytBQ19ERUZVTihbQU1fTkxTXSwKKytbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorK2RubCBEZWZhdWx0IGlzIGVuYWJsZWQgTkxTCisrQUNfQVJHX0VOQUJMRShubHMsCisrWyAtLWRpc2FibGUtbmxzIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorK1VTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisrQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKytBQ19TVUJTVChVU0VfTkxTKQorK10pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhXzEuMi4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmFfMS4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkMmQ2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhXzEuMi4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZmlsZSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3BjbWFuZm0uc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2ZtLWV4dHJhLmg7YmVnaW5saW5lPTg7ZW5kbGluZT0yMTttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGNtYW5mbS9saWJmbS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2ZmMzgyMDA3MDE2NThmN2U4MGUyNWVkMzk1ZDkyZGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY5MmYxNjI0YTRjYmM4ZDFkZDU1ZjNiM2YzMzY5ZmJmNWQyNmY2M2E5MTZlMmMyOTUyMzBiMjM0NGUxZmJmOSIKKworUyA9ICIke1dPUktESVJ9L2xpYmZtLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWV4dHJhLW9ubHkgLS13aXRoLWd0az1ubyIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtTfS9tNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5NTAyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi4zLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZmlsZSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3BjbWFuZm0uc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZtLmg7YmVnaW5saW5lPTg7ZW5kbGluZT0yMTttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Jhc2UvZm0tY29uZmlnLmg7YmVnaW5saW5lPTEwO2VuZGxpbmU9MjM7bWQ1PWVmMWY4NGRhNjRiM2MwMWNjYTQ0NzIxMmY3ZWY2MDA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mbS1ndGsuaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTE5O21kNT02NDZiYWE0OTU1YzA0ZmU3NjhmMmNhMjdiOTJhYzhkZCIKKworCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBwYW5nbyBndGsrIG1lbnUtY2FjaGUgaW50bHRvb2wtbmF0aXZlIGxpYmV4aWYgbGliZm0tZXh0cmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vbGliZm0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2ZmMzgyMDA3MDE2NThmN2U4MGUyNWVkMzk1ZDkyZGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY5MmYxNjI0YTRjYmM4ZDFkZDU1ZjNiM2YzMzY5ZmJmNWQyNmY2M2E5MTZlMmMyOTUyMzBiMjM0NGUxZmJmOSIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtTfS9tNCIKKworUEFDS0FHRVMgKz0gIiR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1taW1lID0gIiR7ZGF0YWRpcn0vbWltZS8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9saWJmbS9tb2R1bGVzLy5kZWJ1ZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgcmVtb3ZlIGZpbGVzIHdoaWNoIGFyZSBwYXJ0IG9mIGxpYmZtLWV4dHJhCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLXhtbC1maWxlLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJmbS0xLjAvZm0tdmVyc2lvbi5oCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLWV4dHJhLmgKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJmbS1leHRyYS5wYworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vbGliZm0tZXh0cmEuc28qCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5hCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5sYQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkZGZjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTEgQEAKK0FkZCBhbmQgdXNlIHBrZy1jb25maWcgZm9yIGxpYmdjcnlwdCBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0cy4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW3Vwc3RyZWFtIGhhdmUgaW5kaWNhdGVkIHRoZXkgZG9uJ3Qgd2FudCBhIHBrZy1jb25maWcgZGVwZW5kZW5jeV0KKworUlAgMjAxNC81LzIyCisKK0luZGV4OiBsaWJnY3J5cHQtMS4yLjQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ2NyeXB0LTEuMi40Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDMtMTkgMjI6MTQ6NTAuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2NyeXB0LTEuMi40L2NvbmZpZ3VyZS5hYwkyMDA4LTAzLTE5IDIyOjE0OjU4LjAwMDAwMDAwMCArMDAwMAorQEAgLTgwNyw2ICs4MDcsNyBAQAorIGRvYy9NYWtlZmlsZQorIHNyYy9NYWtlZmlsZQorIHNyYy9nY3J5cHQuaAorK3NyYy9saWJnY3J5cHQucGMKKyBzcmMvbGliZ2NyeXB0LWNvbmZpZworIHRlc3RzL01ha2VmaWxlCisgdzMyLWRsbC9NYWtlZmlsZQorSW5kZXg6IGxpYmdjcnlwdC0xLjIuNC9zcmMvbGliZ2NyeXB0LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2NyeXB0LTEuMi40L3NyYy9saWJnY3J5cHQucGMuaW4JMjAwOC0wMy0xOSAyMjoxNDo1OC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMzMgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIHBrZy1jb25maWcgbWV0YWRhdGEgZmlsZS4KKysjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysjIEF1dGhvcjogU2ltb24gSm9zZWZzc29uCisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisrIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysjCisrIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrIyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisrIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QExJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1ATElCR0NSWVBUX0NPTkZJR19IT1NUQAorKworKyMgTWlzYyBpbmZvcm1hdGlvbi4KKytzeW1tZXRyaWNfY2lwaGVycz1ATElCR0NSWVBUX0NJUEhFUlNACisrYXN5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACisrZGlnZXN0cz1ATElCR0NSWVBUX0RJR0VTVFNACisrCisrTmFtZTogbGliZ2NyeXB0CisrRGVzY3JpcHRpb246IEdOVSBjcnlwdG8gbGlicmFyeQorK1VSTDogaHR0cDovL3d3dy5nbnVwZy5vcmcKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdjcnlwdAorK0xpYnMucHJpdmF0ZTogLUwke2xpYmRpcn0gLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSAKK0luZGV4OiBsaWJnY3J5cHQtMS42LjEvc3JjL2xpYmdjcnlwdC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdjcnlwdC0xLjYuMS5vcmlnL3NyYy9saWJnY3J5cHQubTQJMjAxMy0xMi0xNiAxNzo0NDozMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnY3J5cHQtMS42LjEvc3JjL2xpYmdjcnlwdC5tNAkyMDE0LTA1LTEzIDIxOjI1OjM3LjQ3ODM4OTgzMyArMDAwMAorQEAgLTIyLDE3ICsyMiw3IEBACisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX0FSR19XSVRIKGxpYmdjcnlwdC1wcmVmaXgsCistICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJnY3J5cHQtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBMSUJHQ1JZUFQgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JGxpYmdjcnlwdF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBpZiB0ZXN0IHgke0xJQkdDUllQVF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgTElCR0NSWVBUX0NPTkZJRz0kbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXgvYmluL2xpYmdjcnlwdC1jb25maWcKKy0gICAgIGZpCistICBmaQorIAorLSAgQUNfUEFUSF9UT09MKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQorICAgdG1wPWlmZWxzZShbJDFdLCAsMToxLjIuMCwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9saWJnY3J5cHRfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTQyLDQ4ICszMiwxMyBAQAorICAgICAgbWluX2xpYmdjcnlwdF92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgTElCR0NSWVBUIC0gdmVyc2lvbiA+PSAkbWluX2xpYmdjcnlwdF92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRMSUJHQ1JZUFRfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb249YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBtaWNybz1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKExJQkdDUllQVCwgW2xpYmdjcnlwdCA+PSAkbWluX2xpYmdjcnlwdF92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisrCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IGxpYmdjcnlwdCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUKKyAgICAgIGlmIHRlc3QgIiRyZXFfbGliZ2NyeXB0X2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRMSUJHQ1JZUFRfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGxpYmdjcnlwdGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtMSUJHQ1JZUFQgQVBJIHZlcnNpb25dKQorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9saWJnY3J5cHRfYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorQEAgLTk2LDEwICs1MSw4IEBACisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIExJQkdDUllQVF9DRkxBR1M9YCRMSUJHQ1JZUFRfQ09ORklHIC0tY2ZsYWdzYAorLSAgICBMSUJHQ1JZUFRfTElCUz1gJExJQkdDUllQVF9DT05GSUcgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorLSAgICBsaWJnY3J5cHRfY29uZmlnX2hvc3Q9YCRMSUJHQ1JZUFRfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGxpYmdjcnlwdGAKKyAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgIGlmIHRlc3QgeCIkbGliZ2NyeXB0X2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTEzLDggKzY2LDYgQEAKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorLSAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgIExJQkdDUllQVF9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorICAgQUNfU1VCU1QoTElCR0NSWVBUX0NGTEFHUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyZTYyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK3Rlc3RzL2JlbmNoLXNsb3BlLmM6IHdvcmthcm91bmQgSUNFIGZhaWx1cmUgb24gbWlwcyB3aXRoICctTyAtZycKKworSGl0IGEgSUNFIGFuZCBjb3VsZCByZWR1Y2UgaXQgdG8gdGhlIGZvbGxvd2luZyBtaW5pbWFsIGV4YW1wbGU6CisKKzEuIE9ubHkgdGhlIHNpemUgb2YgYXJyYXkgYXNzaWduZWQgd2l0aCAyIGNhdXNlZCB0aGUgaXNzdWU6CiskIGNhdCA+IG1pcGdjYy10ZXN0LmMgPDwgRU5ECisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIGNoYXIgKnBTdHJBcnJ5W0FSUkFZX1NJWkVfTUFYXSA9IHsiaGVsbG8ifTsKKyAgICAgICAgaW50IGkgPSAwOworCisgICAgICAgIHdoaWxlKHBTdHJBcnJ5W2ldICYmIGk8QVJSQVlfU0laRV9NQVgpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBwU3RyQXJyeVtpXSk7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK0VORAorCisyLiBPbmx5IC1PMSBhbmQgLWcgb24gbWlwcyBjYXVzZWQgdGhlIGlzc3VlOgorJCBtaXBzLXBva3ktbGludXgtZ2NjIC1PMSAtZyAtbyBtaXBnY2MtdGVzdCBtaXBnY2MtdGVzdC5jCittaXBnY2MtdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6CittaXBnY2MtdGVzdC5jOjE4OjE6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBpbiBkd2FyZjJvdXRfdmFyX2xvY2F0aW9uLCBhdCBkd2FyZjJvdXQuYzoyMDgxMAorIH0KKyBeCitQbGVhc2Ugc3VibWl0IGEgZnVsbCBidWcgcmVwb3J0LAord2l0aCBwcmVwcm9jZXNzZWQgc291cmNlIGlmIGFwcHJvcHJpYXRlLgorU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sPiBmb3IgaW5zdHJ1Y3Rpb25zCisKKzMuIFRoZSBxdWljayB3b3Jrcm91bmQgaXMgdHJ5aW5nIHRvIGVubGFyZ2UgdGhlIHNpemUgb2YgYXJyYXkgd2l0aCBsYXJnZXIKK3RoYW4gMi4KKworNC4gRmlsZSBhIGJ1ZyB0byBHTlUsIGJ1dCBpdCBjb3VsZCBub3QgYmUgcmVwcm9kdWNlZCBvbiB0aGVyZSBlbnZpcm9ubWVudC4KK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjA2NDMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvYmVuY2gtc2xvcGUuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0cy9iZW5jaC1zbG9wZS5jIGIvdGVzdHMvYmVuY2gtc2xvcGUuYworaW5kZXggYmQwNTA2NC4uMjhjMjQzOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMKKysrKyBiL3Rlc3RzL2JlbmNoLXNsb3BlLmMKK0BAIC0xMTk3LDcgKzExOTcsNyBAQCBzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBoYXNoX29wcyA9IHsKKyB9OworIAorIAorLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlIGhhc2hfbW9kZXNbXSA9IHsKKytzdGF0aWMgc3RydWN0IGJlbmNoX2hhc2hfbW9kZSBoYXNoX21vZGVzWzNdID0geworICAgeyIiLCAmaGFzaF9vcHN9LAorICAgezB9LAorIH07CitAQCAtMTM0OSw3ICsxMzQ5LDcgQEAgc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgbWFjX29wcyA9IHsKKyB9OworIAorIAorLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfbWFjX21vZGUgbWFjX21vZGVzW10gPSB7Cisrc3RhdGljIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtYWNfbW9kZXNbM10gPSB7CisgICB7IiIsICZtYWNfb3BzfSwKKyAgIHswfSwKKyB9OworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlNTQwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitsaWJnY3J5cHQ6IGZpeCBidWlsZGluZyBlcnJvciB3aXRoICctTzInIGluIHN5c3Jvb3QgcGF0aAorCitDaGFyYWN0ZXJzIGxpa2UgJy1PMicgb3IgJy1PZmFzdCcgd2lsbCBiZSByZXBsYWNlZCBieSAnLU8xJyB3aGVuIGNvbXBpbGluZyBjaXBoZXIuCitJZiB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGxpYmdjcnlwdCBhbmQgc3lzcm9vdCBjb250YWlucyBzdWNoIGNoYXJhY3RlcnMsIHdlIHdvdWxkCitnZXQgY29tcGlsZSBlcnJvcnMgYmVjYXVzZSB0aGUgc3lzcm9vdCBwYXRoIGhhcyBiZWVuIG1vZGlmaWVkLgorCitGaXggdGhpcyBieSBhZGRpbmcgYmxhbmsgc3BhY2VzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9yaWdpbmFsIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlCitzZWQgY29tbWFuZC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY2lwaGVyL01ha2VmaWxlLmFtIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY2lwaGVyL01ha2VmaWxlLmFtIGIvY2lwaGVyL01ha2VmaWxlLmFtCitpbmRleCA3NmNkYzk2Li45YTg5NzkyIDEwMDY0NAorLS0tIGEvY2lwaGVyL01ha2VmaWxlLmFtCisrKysgYi9jaXBoZXIvTWFrZWZpbGUuYW0KK0BAIC02OSw3ICs2OSw3IEBAIHJmYzIyNjguYyBcCisgY2FtZWxsaWEuYyBjYW1lbGxpYS5oIGNhbWVsbGlhLWdsdWUuYworIAorIGlmIEVOQUJMRV9PX0ZMQUdfTVVOR0lORworLW9fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLy1PXChbMi05c11bMi05c10qXCkvLU8xLycgLWUgJ3MvLU9mYXN0Ly1PMS9nJworK29fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLyAtT1woWzItOXNdWzItOXNdKlwpIC8gLU8xIC8nIC1lICdzLyAtT2Zhc3QgLyAtTzEgL2cnCisgZWxzZQorIG9fZmxhZ19tdW5naW5nID0gY2F0CisgZW5kaWYKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4M2JlNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYwpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaGljIGxpYnJhcnkgYmFzZWQgb24gdGhlIGNvZGUgZnJvbSBHbnVQRyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kaXJlY3RvcnkuZnNmLm9yZy9wcm9qZWN0L2xpYmdjcnlwdC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKK1NFQ1RJT04gPSAibGlicyIKKworIyBoZWxwZXIgcHJvZ3JhbSBnY3J5cHRybmQgYW5kIGdldHJhbmRvbSBhcmUgdW5kZXIgR1BMLCByZXN0IExHUEwKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErICYgR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNFTlNFX2R1bXBzZXhwLWRldiA9ICJHUEx2MysiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IgbGliY2FwIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmdjcnlwdC9saWJnY3J5cHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2ggXAorIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYmdjcnlwdC1jb25maWciCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1hc20gLS13aXRoLWNhcGFiaWxpdGllcyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgb25lIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Cit9CisKKyMgbGliZ2NyeXB0LnBjIGlzIGFkZGVkIGxvY2FsbHkgYW5kIHRodXMgaW5zdGFsbGVkIGhlcmUKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vc3JjL2xpYmdjcnlwdC5wYyAke0R9LyR7bGliZGlyfS9wa2djb25maWcvCit9CisKK1BBQ0tBR0VTID0rICJkdW1wc2V4cC1kZXYiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2htYWMyNTYiCitGSUxFU19kdW1wc2V4cC1kZXYgKz0gIiR7YmluZGlyfS9kdW1wc2V4cCIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwNmNlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS42LjMuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGxpYmdjcnlwdC5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImRlMDNiODY3ZDAyZmRmMTE1YTFiYWM4YmI4YjVjM2EzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5ZTk0ZTFhNzA4NGQ5NGUxYTZjYTI2ZDQzNjA2OGNiNzQ4NjJkMTBhNzM1M2NmYWU1NzlhMmQ4ODY3NGZmMDkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmVlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE1MCBAQAorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliZ3BnLWVycm9yLTEuMTcvY29uZmlndXJlLmFjCitAQCAtNTI5LDYgKzUyOSw3IEBAIEFDX0NPTkZJR19GSUxFUyhbc3JjL01ha2VmaWxlIHRlc3RzL01ha2UKKyBBQ19DT05GSUdfRklMRVMoW2xhbmcvTWFrZWZpbGUgbGFuZy9jbC9NYWtlZmlsZSBsYW5nL2NsL2dwZy1lcnJvci5hc2RdKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL3ZlcnNpb25pbmZvLnJjIHNyYy9ncGctZXJyb3IudzMyLW1hbmlmZXN0XSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy9ncGctZXJyb3ItY29uZmlnXSwgW2NobW9kICt4IHNyYy9ncGctZXJyb3ItY29uZmlnXSkKKytBQ19DT05GSUdfRklMRVMoW3NyYy9ncGctZXJyb3IucGNdKQorIAorIEFDX09VVFBVVAorIAorSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbGliZ3BnLWVycm9yLTEuMTcvc3JjL01ha2VmaWxlLmFtCitAQCAtNzUsNiArNzUsOCBAQCBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gZ3BnLWVycm9yLmgKKyBiaW5fU0NSSVBUUyA9IGdwZy1lcnJvci1jb25maWcKKyBtNGRhdGFkaXIgPSAkKGRhdGFkaXIpL2FjbG9jYWwKKyBtNGRhdGFfREFUQSA9IGdwZy1lcnJvci5tNAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGdwZy1lcnJvci5wYworIAorIEVYVFJBX0RJU1QgPSBta3N0cnRhYmxlLmF3ayBlcnItc291cmNlcy5oLmluIGVyci1jb2Rlcy5oLmluIFwKKyAJbWtlcnJub3MuYXdrIGVycm5vcy5pbiBSRUFETUUgXAorQEAgLTgyLDcgKzg0LDcgQEAgRVhUUkFfRElTVCA9IG1rc3RydGFibGUuYXdrIGVyci1zb3VyY2VzLgorIAlta2hlYWRlci5jIGdwZy1lcnJvci5oLmluIG1rdzMyZXJybWFwLmMgdzMyLWFkZC5oIHczMmNlLWFkZC5oIFwKKyAJZXJyLXNvdXJjZXMuaCBlcnItY29kZXMuaCBncGctZXJyb3ItY29uZmlnLmluIGdwZy1lcnJvci5tNCBcCisgCWdwZy1lcnJvci52ZXJzIGdwZy1lcnJvci5kZWYuaW4gXAorLSAgICAgICAgdmVyc2lvbmluZm8ucmMuaW4gZ3BnLWVycm9yLnczMi1tYW5pZmVzdC5pbiBcCisrICAgICAgICB2ZXJzaW9uaW5mby5yYy5pbiBncGctZXJyb3IudzMyLW1hbmlmZXN0LmluIGdwZy1lcnJvci5wYyBcCisgCSQobG9ja19vYmpfcHViKQorIAorIEJVSUxUX1NPVVJDRVMgPSBlcnItc291cmNlcy5oIGVyci1jb2Rlcy5oIGNvZGUtdG8tZXJybm8uaCBjb2RlLWZyb20tZXJybm8uaCBcCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvc3JjL2dwZy1lcnJvci5tNAorKysrIGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IubTQKK0BAIC0yNiw3MyArMjYsMTMgQEAgZG5sIGlzIGFkZGVkIHRvIHRoZSBncGdfY29uZmlnX3NjcmlwdF93YQorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR19FUlJPUl0sCisgWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iIgorLSAgZG5sIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4PVBGWCBpcyB0aGUgcHJlZmVycmVkIG5hbWUgZm9yIHRoaXMgb3B0aW9uLAorLSAgZG5sIHNpbmNlIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBvdXIgdGhyZWUgc2libGluZ3MgdXNlIHRoZSBkaXJlY3RvcnkvCistICBkbmwgcGFja2FnZSBuYW1lIGluIC0td2l0aC0kZGlyX25hbWUtcHJlZml4PVBGWC4KKy0gIEFDX0FSR19XSVRIKGxpYmdwZy1lcnJvci1wcmVmaXgsCistICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgR1BHIEVycm9yIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICAgICAgICAgICBbZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIl0pCistCistICBkbmwgQWNjZXB0IC0td2l0aC1ncGctZXJyb3ItcHJlZml4IGFuZCBtYWtlIGl0IHdvcmsgdGhlIHNhbWUgYXMKKy0gIGRubCAtLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeCBhYm92ZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LAorLSAgZG5sIGJ1dCBkbyBub3QgZG9jdW1lbnQgdGhpcyBvbGQsIGluY29uc2lzdGVudGx5LW5hbWVkIG9wdGlvbi4KKy0gIEFDX0FSR19XSVRIKGdwZy1lcnJvci1wcmVmaXgsLAorLSAgICAgICAgICAgICAgW2dwZ19lcnJvcl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCJdKQorKyAgbWluX2dwZ19lcnJvcl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4wLCQxKQorIAorLSAgaWYgdGVzdCB4IiR7R1BHX0VSUk9SX0NPTkZJR30iID0geCA7IHRoZW4KKy0gICAgIGlmIHRlc3QgeCIke2dwZ19lcnJvcl9jb25maWdfcHJlZml4fSIgIT0geCA7IHRoZW4KKy0gICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7Z3BnX2Vycm9yX2NvbmZpZ19wcmVmaXh9L2Jpbi9ncGctZXJyb3ItY29uZmlnIgorLSAgICAgZWxzZQorLSAgICAgICBjYXNlICIke1NZU1JPT1R9IiBpbgorLSAgICAgICAgIC8qKQorLSAgICAgICAgICAgaWYgdGVzdCAteCAiJHtTWVNST09UfS9iaW4vZ3BnLWVycm9yLWNvbmZpZyIgOyB0aGVuCistICAgICAgICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7U1lTUk9PVH0vYmluL2dwZy1lcnJvci1jb25maWciCistICAgICAgICAgICBmaQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAnJykKKy0gICAgICAgICAgIDs7CistICAgICAgICAgICopCistICAgICAgICAgICBBQ19NU0dfV0FSTihbSWdub3JpbmcgXCRTWVNST09UIGFzIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLl0pCistICAgICAgICAgICA7OworLSAgICAgICBlc2FjCistICAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR19FUlJPUiwgW2dwZy1lcnJvciA+PSAkbWluX2dwZ19lcnJvcl92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgCistICBBQ19QQVRIX1BST0coR1BHX0VSUk9SX0NPTkZJRywgZ3BnLWVycm9yLWNvbmZpZywgbm8pCistICBtaW5fZ3BnX2Vycm9yX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjAsJDEpCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQRyBFcnJvciAtIHZlcnNpb24gPj0gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHX0VSUk9SX0NPTkZJRyIgIT0gIm5vIiBcCistICAgICAmJiB0ZXN0IC1mICIkR1BHX0VSUk9SX0NPTkZJRyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGdwZ19lcnJvcl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWdlICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR19FUlJPUl9DRkxBR1M9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIEdQR19FUlJPUl9MSUJTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgR1BHX0VSUk9SX01UX0NGTEFHUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLW10IC0tY2ZsYWdzIDI+L2Rldi9udWxsYAorLSAgICBHUEdfRVJST1JfTVRfTElCUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLW10IC0tbGlicyAyPi9kZXYvbnVsbGAKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uKV0pCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGdwZ19lcnJvcl9jb25maWdfaG9zdD1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICBncGdfZXJyb3JfY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBncGctZXJyb3JgCisgICAgIGlmIHRlc3QgeCIkZ3BnX2Vycm9yX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgiJGdwZ19lcnJvcl9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTEwNywxMSArNDcsNiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdfRVJST1JdLAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIEdQR19FUlJPUl9DRkxBR1M9IiIKKy0gICAgR1BHX0VSUk9SX0xJQlM9IiIKKy0gICAgR1BHX0VSUk9SX01UX0NGTEFHUz0iIgorLSAgICBHUEdfRVJST1JfTVRfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKEdQR19FUlJPUl9DRkxBR1MpCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IucGMuaW4KK0BAIC0wLDAgKzEsMTEgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKytob3N0PUBHUEdfRVJST1JfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnLWVycm9yCisrRGVzY3JpcHRpb246IGEgbGlicmFyeSB0aGF0IGRlZmluZXMgY29tbW9uIGVycm9yIHZhbHVlcyBmb3IgYWxsIEdudVBHIGNvbXBvbmVudHMKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yXzEuMTkuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yXzEuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkYmJjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlNtYWxsIGxpYnJhcnkgdGhhdCBkZWZpbmVzIGNvbW1vbiBlcnJvciB2YWx1ZXMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJncGctZXJyb3IvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGctZXJyb3IuaC5pbjtlbmRsaW5lPTIzO21kNT04YjIwNDkxOGYwY2E3MDcxMzYzOTRkOGJiMjBjN2ViYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaW5pdC5jO2VuZGxpbmU9MjA7bWQ1PThmNWE5YjU5NjM0ZjRhZWJjZDBlYzlkM2ViZDUzYmZlIgorCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImMwNGMxNjI0NWI5MjgyOTI4MWY0M2I1YmVmN2QxNmRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUzMTIwZTEzMzNkNWM1ZDI4ZDg3ZmYyODU0ZTllOTg3MTljOGUyMTQxNTJmMTdhZDUyOTE3MDRkMjVjNDk3OGIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnLWVycm9yLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBnZXR0ZXh0CitDUFBGTEFHUyArPSAiLVAiCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJVEFSR0VUX0ZJTEU9bGludXgtZ251CisJaWYgWyAke1RBUkdFVF9PU30gIT0gImxpbnV4IiBdOyB0aGVuCisJCVRBUkdFVF9GSUxFPSR7VEFSR0VUX09TfQorCWZpCisKKwljYXNlICR7VEFSR0VUX0FSQ0h9IGluCisJICBhYXJjaDY0X2JlKSBUVVBMRT1hYXJjaDY0LXVua25vd24tbGludXgtZ251IDs7CisJICBhcm0pCSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGFybWViKSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGk1ODZ8aTY4NikgIFRVUExFPWk2ODYtcGMtbGludXgtZ251IDs7CisJICBtaXBzNjRlbCkgICBUVVBMRT1taXBzZWwtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIG1pcHM2NCkgICAgIFRVUExFPW1pcHMtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIHg4Nl82NCkgICAgIFRVUExFPXg4Nl82NC1wYy1saW51eC1nbnUgOzsKKwkgICopICAgICAgICAgIFRVUExFPSR7VEFSR0VUX0FSQ0h9LXVua25vd24tbGludXgtZ251IDs7IAorCWVzYWMKKworCWNwICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRVUExFLmggXAorCSAgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVEFSR0VUX0ZJTEUuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHdlIGRvbid0IGhhdmUgY29tbW9uIGxpc3AgaW4gT0UKKwlybSAtcmYgIiR7RH0ke2RhdGFkaXJ9L2NvbW1vbi1saXNwLyIKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZ3BnLWVycm9yIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbF8xLjAuMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljYWwvbGliaWNhbF8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTZiNjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiaUNhbCBhbmQgc2NoZWR1bGluZyAoUkZDIDI0NDUsIDI0NDYsIDI0NDcpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsL2lzc3VlcyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBNUEwtMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ0ZmM1ODMwOWQ4ZWQ0NjU4N2FjNjNiYjQ0OWQ4MmY4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0U7bWQ1PWQxYTA4OTFjZDNlNTgyYjNlMmVjOGZlNjNiYWRiYmI2IgorU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS8ke0JQTn0vJHtCUE59L2FyY2hpdmUvdiR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNGI4ZTMzYWU1ZWZiMmYwMjVlYjQzY2U2OTY4MmEzNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDcyZTgzODM0MDkyMzE1NzcyZTY3MTliODVmYzhiMTE1MzBiMWZmNTNmNGQxMDgzMTVmYjM4Y2RkYmNlOGMyIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL2F1dG9jb25mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL2F1dG9jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmY1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorSXQgYWRkcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIG5lZWRlZAorZm9yIGF1dG9jb25mIDIuNjUgdG8gcmVjb25maWd1cmUgbGliaWNvbnYgYW5kIGRlZmluZXMgdGhlIG00IG1hY3JvcyAKK2RpcmVjdG9yeS4gSXRzIGltcG9ydGVkIGZyb20gT0UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGliaWNvbnYtMS4xMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTEuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTEuMS9jb25maWd1cmUuYWMKK0BAIC0yMyw3ICsyMyw3IEBAIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkLWF1eCkKKyBBTV9JTklUX0FVVE9NQUtFKGxpYmljb252LCAxLjExKQorIEFDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oIGxpYi9jb25maWcuaCkKKyBBQ19QUk9HX01BS0VfU0VUCistCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIAorIEFDX1BST0dfQ0MKK0luZGV4OiBsaWJpY29udi0xLjExLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjExLjEub3JpZy9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTEuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworQEAgLTE2LDE3ICsxNiwxNyBAQCBkbmwgYWxvbmcgd2l0aCB0aGUgR05VIENIQVJTRVQgTGlicmFyeTsKKyBkbmwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorIGRubCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgCistQUNfUFJFUkVRKDIuMTMpCisrQUNfUFJFUkVRKDIuNjEpCisrQUNfSU5JVChbbGliY2hhcnNldF0sWzEuNF0gKQorK0FDX0NPTkZJR19TUkNESVIoW2xpYi9sb2NhbGNoYXJzZXQuY10pCisgCistUEFDS0FHRT1saWJjaGFyc2V0CistVkVSU0lPTj0xLjQKKy0KKy1BQ19JTklUKGxpYi9sb2NhbGNoYXJzZXQuYykKKyBBQ19DT05GSUdfQVVYX0RJUihidWlsZC1hdXgpCisgQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkKKyBBQ19QUk9HX01BS0VfU0VUCistQUNfU1VCU1QoUEFDS0FHRSkKKy1BQ19TVUJTVChWRVJTSU9OKQorK2RubCBBQ19TVUJTVChQQUNLQUdFKQorK2RubCBBQ19TVUJTVChWRVJTSU9OKQorKworK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyAKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvc2hhcmVkX3ByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDdmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvc2hhcmVkX3ByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1dpdGggbGlidG9vbCBnZW5lcmF0aW5nIHNoYXJlZCBhbmQgc3RhdGljIHZlcnNpb24gb2YgbGlicmFyaWVzIG5lZWRzIC1mUElDIGZsYWdzCit3aXRob3V0IHRoaXMgaXQgd2lsbCBub3QgZ2VuZXJhdGUgdGhlIGNvbW1hbmRzIHRvIGNyZWF0ZSBzaGFyZWQgbGlua2VkIGxpYnJhcnkKK0l0cyBtb3JlIGVuZm9yY2VkIGJ5IGxpYnRvb2wgMi40LiBJIGhhdmUgbm90IGNoZWNrZWQgaXQgd2l0aCBvbGRlciBsaWJ0b29sCitsaWJpY29udiAxLjExLnggaXMgcmVsYXRpdmVseSBvbGQgcmVsZWFzZSBhbmQgbGlidG9vbCAyLjQgZGlkIG5vdCBleGlzdCB3aGVuIGl0Cit3YXMgcmVsZWFzZWQgdGhlc2Uga2luZCBvZiBwcm9ibGVtIGFyZSBtb3JlIGxpa2VseQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYmljb252LTEuMTEuMS9saWIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjExLjEub3JpZy9saWIvTWFrZWZpbGUuaW4KKysrKyBsaWJpY29udi0xLjExLjEvbGliL01ha2VmaWxlLmluCitAQCAtNzAsOSArNzAsOSBAQCBwcmVsb2FkYWJsZV9saWJpY29udi5zbyA6IHByZWxvYWRhYmxlX2xpCisgCisgcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc28gOiAkKFNPVVJDRVMpCisgCWlmIHRlc3QgLW4gIkBHQ0NAIjsgdGhlbiBcCistCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLWZQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXNoYXJlZCAtbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorKwkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1mUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1ycGF0aCAkKGxpYmRpcikgLW8gbGlicHJlbG9hZF9pY29udi5sYSAmJiBjcCAubGlicy9saWJwcmVsb2FkX2ljb252LnNvIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisgCWVsc2UgXAorLQkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1LUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1zaGFyZWQgLW8gcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc287IFwKKysJICAkKExJQlRPT0xfTElOSykgJChDQykgJChMREZMQUdTKSAkKElOQ0xVREVTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChERUZTKSAtS1BJQyAtRFBJQyAtRExJQklDT05WX1BMVUcgJChTT1VSQ0VTKSAtcnBhdGggJChsaWJkaXIpIC1vIGxpYnByZWxvYWRfaWNvbnYubGEgJiYgY3AgLmxpYnMvbGlicHJlbG9hZF9pY29udi5zbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorIAlmaQorIAorIHByZWxvYWRhYmxlX2xpYmljb252X3NvbGFyaXMuc28gOiAkKFNPVVJDRVMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2FkZC1yZWxvY2F0YWJsZS1tb2R1bGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2FkZC1yZWxvY2F0YWJsZS1tb2R1bGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmMzc3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaApAQCAtMCwwICsxLDUwMDggQEAKK1RoaXMgcGF0Y2ggaXMgbmVlZGVkIHRvIHNvbHZlIGlzc3VlcyBsaWtlCit8IGljb252Lm86IEluIGZ1bmN0aW9uIGBtYWluJzoKK3wgL2hvbWUvamFtZXMvc3R1ZmYvYmVhZ2xlL3RtcC1lZ2xpYmMvd29yay9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saWJpY29udi0xLjE0LXIwL2xpYmljb252LTEuMTQvc3JjLy4vaWNvbnYuYzo4NjE6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHJlbG9jYXRlJworfCAuLi9zcmNsaWIvbGliaWNydC5hKHByb2dyZWxvYy5vKTogSW4gZnVuY3Rpb24gYHByZXBhcmVfcmVsb2NhdGUnOgorfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmNsaWIvcHJvZ3JlbG9jLmM6Mjk3OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjb21wdXRlX2N1cnJfcHJlZml4JworfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmNsaWIvcHJvZ3JlbG9jLmM6MzAyOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzZXRfcmVsb2NhdGlvbl9wcmVmaXgnCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCit8IG1ha2VbMV06ICoqKiBbaW5zdGFsbF0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2FyZy1ub25udWxsLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTMwNDg0NDM4IC0wODAwCitAQCAtMCwwICsxLDI2IEBACisrLyogQSBDIG1hY3JvIGZvciBkZWNsYXJpbmcgdGhhdCBzcGVjaWZpYyBhcmd1bWVudHMgbXVzdCBub3QgYmUgTlVMTC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKysgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKysgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKysjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisrIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYysrZGVmcy5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2MrK2RlZnMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYysrZGVmcy5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYysrZGVmcy5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTQyNDg0NDM4IC0wODAwCitAQCAtMCwwICsxLDI3MSBAQAorKy8qIEMrKyBjb21wYXRpYmxlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG1hY3Jvcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2lmbmRlZiBfR0xfQ1hYREVGU19ICisrI2RlZmluZSBfR0xfQ1hYREVGU19ICisrCisrLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorKyAgICAgaXQgZXhpc3RzOgorKworKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisrICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKysgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKysgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworKyAgICAgICAuLi4KKysgICAgICAgI2VuZGlmCisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKysgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKysKKysgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKysgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysgICAgICAgIyAgIHVuZGVmIGZvbworKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisrICAgICAgICMgIGVuZGlmCisrICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICAjIGVsc2UKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisrICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKysgICAgICAgLi4uCisrICAgICAgICNlbmRpZgorKworKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisrICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisrCisrICAgICAgICNpZiBAR05VTElCX0ZPT0AKKysgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisrICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisrICAgICAgICMgICB1bmRlZiBmb28KKysgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworKyAgICAgICAjICBlbmRpZgorKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisrICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKysgICAgICAgIyBlbHNlCisrICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisrICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKysgICAgICAgIyAgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisrICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKysgICAgICAgLi4uCisrICAgICAgICNlbmRpZgorKyovCisrCisrLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKysjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorKyNlbmRpZgorKworKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisrICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKysgKi8KKysjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKysjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKysKKysvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKysgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisrICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKysgKi8KKysjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKworKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisrICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisrICovCisrI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisrICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKysgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKysgICBpcyBkZWZpbmVkLgorKyAgIEV4YW1wbGU6CisrICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKysgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKysgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisrICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisrICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisrICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKysgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKysgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisrICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKysgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisrICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKysgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKysgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisrICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorKyAgIHZhcmlhbnRzLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisrLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisrICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisrIyBpZiAhX19PUFRJTUlaRV9fCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKysgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisrICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKysgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKysvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKysgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKysjIGlmICFfX09QVElNSVpFX18KKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrIyBlbmRpZgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDI2ICswLDAgQEAKKy0vKiBBIEMgbWFjcm8gZm9yIGRlY2xhcmluZyB0aGF0IHNwZWNpZmljIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBOVUxMLgorLSAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworLSAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorLSAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworLSNpZm5kZWYgX0dMX0FSR19OT05OVUxMCistIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKy0jICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjcxICswLDAgQEAKKy0vKiBDKysgY29tcGF0aWJsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBtYWNyb3MuCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5kZWYgX0dMX0NYWERFRlNfSAorLSNkZWZpbmUgX0dMX0NYWERFRlNfSAorLQorLS8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKy0gICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKy0gICAgIGl0IGV4aXN0czoKKy0KKy0gICAgICAgI2lmIEBHTlVMSUJfRk9PQAorLSAgICAgICAjIGlmICFASEFWRV9GT09ACistICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CistICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0gICAgICAgLi4uCistICAgICAgICNlbmRpZgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCistICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CistCistICAgICAgICNpZiBAR05VTElCX0ZPT0AKKy0gICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACistICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistICAgICAgICMgICB1bmRlZiBmb28KKy0gICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworLSAgICAgICAjICBlbmRpZgorLSAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbHNlCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistICAgICAgIC4uLgorLSAgICAgICAjZW5kaWYKKy0KKy0gICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworLSAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKy0gICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorLQorLSAgICAgICAjaWYgQEdOVUxJQl9GT09ACistICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorLSAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSAgICAgICAjICAgdW5kZWYgZm9vCistICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKy0gICAgICAgIyAgZW5kaWYKKy0gICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworLSAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CistICAgICAgICMgZWxzZQorLSAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorLSAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CistICAgICAgICMgIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistICAgICAgIC4uLgorLSAgICAgICAjZW5kaWYKKy0qLworLQorLS8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKy0gICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCistIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKy0jZW5kaWYKKy0KKy0vKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKy0gICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorLSAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CistICovCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCistCistLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CistICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorLSAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CistICovCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworLSAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworLSAqLworLSNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorLSAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKy0gICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCistICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCistICAgaXMgZGVmaW5lZC4KKy0gICBFeGFtcGxlOgorLSAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CistICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCistICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworLSAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworLSAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorLSAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CistICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCistICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorLSAgIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCistICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKy0gICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworLSAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKy0gICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCistICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCistICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKy0gICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorLSAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKy0gICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKy0gICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKy0gICB2YXJpYW50cy4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorLSAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLS8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorLSAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworLSMgaWYgIV9fT1BUSU1JWkVfXworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCistICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorLSAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorLSAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jIGVuZGlmCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CistICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKy0gICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorLSAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCistLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCistICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCistIyBpZiAhX19PUFRJTUlaRV9fCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSMgZW5kaWYKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMTAgKzAsMCBAQAorLSNpZm5kZWYgX05vcmV0dXJuCistIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCistICAgICAgfHwgMHg1MTEwIDw9IF9fU1VOUFJPX0MpCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKy0jIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCistIyBlbHNlCistIyAgZGVmaW5lIF9Ob3JldHVybgorLSMgZW5kaWYKKy0jZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMDkgKzAsMCBAQAorLS8qIEEgQyBtYWNybyBmb3IgZW1pdHRpbmcgd2FybmluZ3MgaWYgYSBmdW5jdGlvbiBpcyB1c2VkLgorLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAibGl0ZXJhbCBzdHJpbmciKSBpc3N1ZXMgYSBkZWNsYXJhdGlvbgorLSAgIGZvciBGVU5DVElPTiB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIGNvbXBpbGVyIHdhcm5pbmcgY29udGFpbmluZworLSAgIHRoZSB0ZXh0IG9mICJsaXRlcmFsIHN0cmluZyIgYW55d2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQsIGlmCistICAgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4gIElmIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKKy0gICBmZWF0dXJlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byBhbiB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorLQorLSAgIFRoaXMgbWFjcm8gaXMgdXNlZnVsIGZvciBtYXJraW5nIGEgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwKKy0gICBwb3J0YWJpbGl0eSB0cmFwLCB3aXRoIHRoZSBpbnRlbnQgdGhhdCAibGl0ZXJhbCBzdHJpbmciIGluY2x1ZGUKKy0gICBpbnN0cnVjdGlvbnMgb24gdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQKKy0gICBpbnN0ZWFkLiAgSG93ZXZlciwgb25lIG9mIHRoZSByZWFzb25zIHRoYXQgYSBmdW5jdGlvbiBpcyBhCistICAgcG9ydGFiaWxpdHkgdHJhcCBpcyBpZiBpdCBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZS4gIERlY2xhcmluZworLSAgIEZVTkNUSU9OIHdpdGggYSBkaWZmZXJlbnQgc2lnbmF0dXJlIGluIEMgaXMgYSBjb21waWxhdGlvbiBlcnJvciwgc28KKy0gICB0aGlzIG1hY3JvIG11c3QgdXNlIHRoZSBzYW1lIHR5cGUgYXMgYW55IGV4aXN0aW5nIGRlY2xhcmF0aW9uIHNvCistICAgdGhhdCBwcm9ncmFtcyB0aGF0IGF2b2lkIHRoZSBwcm9ibGVtYXRpYyBGVU5DVElPTiBkbyBub3QgZmFpbCB0bworLSAgIGNvbXBpbGUgbWVyZWx5IGJlY2F1c2UgdGhleSBpbmNsdWRlZCBhIGhlYWRlciB0aGF0IHBvaXNvbmVkIHRoZQorLSAgIGZ1bmN0aW9uLiAgQnV0IHRoaXMgaW1wbGllcyB0aGF0IF9HTF9XQVJOX09OX1VTRSBpcyBvbmx5IHNhZmUgdG8KKy0gICB1c2UgaWYgRlVOQ1RJT04gaXMga25vd24gdG8gYWxyZWFkeSBoYXZlIGEgZGVjbGFyYXRpb24uICBVc2Ugb2YKKy0gICB0aGlzIG1hY3JvIGltcGxpZXMgdGhhdCB0aGVyZSBtdXN0IG5vdCBiZSBhbnkgb3RoZXIgbWFjcm8gaGlkaW5nCistICAgdGhlIGRlY2xhcmF0aW9uIG9mIEZVTkNUSU9OOyBidXQgdW5kZWZpbmluZyBGVU5DVElPTiBmaXJzdCBpcyBwYXJ0CistICAgb2YgdGhlIHBvaXNvbmluZyBwcm9jZXNzIGFueXdheSAoYWx0aG91Z2ggZm9yIHN5bWJvbHMgdGhhdCBhcmUKKy0gICBwcm92aWRlZCBvbmx5IHZpYSBhIG1hY3JvLCB0aGUgcmVzdWx0IGlzIGEgY29tcGlsYXRpb24gZXJyb3IgcmF0aGVyCistICAgdGhhbiBhIHdhcm5pbmcgY29udGFpbmluZyAibGl0ZXJhbCBzdHJpbmciKS4gIEFsc28gbm90ZSB0aGF0IGluCistICAgQysrLCBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIGlmIEZVTkNUSU9OIGhhcyBubyBvdmVybG9hZHMuCistCistICAgRm9yIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHBvaXNvbiAnZ2V0bGluZScgYnk6CistICAgLSBhZGRpbmcgYSBjYWxsIHRvIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwKKy0gICAgIFtnZXRsaW5lXSkgaW4gY29uZmlndXJlLmFjLCB3aGljaCBwb3RlbnRpYWxseSBkZWZpbmVzCistICAgICBIQVZFX1JBV19ERUNMX0dFVExJTkUKKy0gICAtIGFkZGluZyB0aGlzIGNvZGUgdG8gYSBoZWFkZXIgdGhhdCB3cmFwcyB0aGUgc3lzdGVtIDxzdGRpby5oPjoKKy0gICAgICN1bmRlZiBnZXRsaW5lCistICAgICAjaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCistICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHJlcXVpcmVkIGJ5IFBPU0lYIDIwMDgsIGJ1dCIKKy0gICAgICAgIm5vdCB1bml2ZXJzYWxseSBwcmVzZW50OyB1c2UgdGhlIGdudWxpYiBtb2R1bGUgZ2V0bGluZSIpOworLSAgICAgI2VuZGlmCistCistICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHBvaXNvbiBnbG9iYWwgdmFyaWFibGVzLiAgQnV0IGl0IGlzCistICAgcG9zc2libGUgdG8gd3JpdGUgYSB3cmFwcGVyIGFjY2Vzc29yIGZ1bmN0aW9uLCBhbmQgcG9pc29uIHRoYXQKKy0gICAobGVzcyBjb21tb24gdXNhZ2UsIGxpa2UgJmVudmlyb24sIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvcgorLSAgIHJhdGhlciB0aGFuIGlzc3VlIHRoZSBuaWNlIHdhcm5pbmcsIGJ1dCB0aGUgZW5kIHJlc3VsdCBvZiBpbmZvcm1pbmcKKy0gICB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZWlyIHBvcnRhYmlsaXR5IHByb2JsZW0gaXMgc3RpbGwgYWNoaWV2ZWQpOgorLSAgICNpZiBIQVZFX1JBV19ERUNMX0VOVklST04KKy0gICBzdGF0aWMgaW5saW5lIGNoYXIgKioqcnBsX2Vudmlyb24gKHZvaWQpIHsgcmV0dXJuICZlbnZpcm9uOyB9CistICAgX0dMX1dBUk5fT05fVVNFIChycGxfZW52aXJvbiwgImVudmlyb24gaXMgbm90IGFsd2F5cyBwcm9wZXJseSBkZWNsYXJlZCIpOworLSAgICMgdW5kZWYgZW52aXJvbgorLSAgICMgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKy0gICAjZW5kaWYKKy0gICAqLworLSNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCistCistIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy0vKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLWV4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLS8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLWV4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKy0jIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKy1fR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKy0gICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCistICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorLSAgIGFuZCBhdHRyaWJ1dGVzLgorLSAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKy0gICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworLSNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorLSMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorLWV4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorLSAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCistZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworLSMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorLV9HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKy0jIGVuZGlmCistI2VuZGlmCistCistLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CistICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKy0jaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCistIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCistIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTUwNDg0NDM5IC0wODAwCitAQCAtMCwwICsxLDEwOSBAQAorKy8qIEEgQyBtYWNybyBmb3IgZW1pdHRpbmcgd2FybmluZ3MgaWYgYSBmdW5jdGlvbiBpcyB1c2VkLgorKyAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysvKiBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAibGl0ZXJhbCBzdHJpbmciKSBpc3N1ZXMgYSBkZWNsYXJhdGlvbgorKyAgIGZvciBGVU5DVElPTiB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIGNvbXBpbGVyIHdhcm5pbmcgY29udGFpbmluZworKyAgIHRoZSB0ZXh0IG9mICJsaXRlcmFsIHN0cmluZyIgYW55d2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQsIGlmCisrICAgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4gIElmIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKKysgICBmZWF0dXJlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byBhbiB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorKworKyAgIFRoaXMgbWFjcm8gaXMgdXNlZnVsIGZvciBtYXJraW5nIGEgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwKKysgICBwb3J0YWJpbGl0eSB0cmFwLCB3aXRoIHRoZSBpbnRlbnQgdGhhdCAibGl0ZXJhbCBzdHJpbmciIGluY2x1ZGUKKysgICBpbnN0cnVjdGlvbnMgb24gdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQKKysgICBpbnN0ZWFkLiAgSG93ZXZlciwgb25lIG9mIHRoZSByZWFzb25zIHRoYXQgYSBmdW5jdGlvbiBpcyBhCisrICAgcG9ydGFiaWxpdHkgdHJhcCBpcyBpZiBpdCBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZS4gIERlY2xhcmluZworKyAgIEZVTkNUSU9OIHdpdGggYSBkaWZmZXJlbnQgc2lnbmF0dXJlIGluIEMgaXMgYSBjb21waWxhdGlvbiBlcnJvciwgc28KKysgICB0aGlzIG1hY3JvIG11c3QgdXNlIHRoZSBzYW1lIHR5cGUgYXMgYW55IGV4aXN0aW5nIGRlY2xhcmF0aW9uIHNvCisrICAgdGhhdCBwcm9ncmFtcyB0aGF0IGF2b2lkIHRoZSBwcm9ibGVtYXRpYyBGVU5DVElPTiBkbyBub3QgZmFpbCB0bworKyAgIGNvbXBpbGUgbWVyZWx5IGJlY2F1c2UgdGhleSBpbmNsdWRlZCBhIGhlYWRlciB0aGF0IHBvaXNvbmVkIHRoZQorKyAgIGZ1bmN0aW9uLiAgQnV0IHRoaXMgaW1wbGllcyB0aGF0IF9HTF9XQVJOX09OX1VTRSBpcyBvbmx5IHNhZmUgdG8KKysgICB1c2UgaWYgRlVOQ1RJT04gaXMga25vd24gdG8gYWxyZWFkeSBoYXZlIGEgZGVjbGFyYXRpb24uICBVc2Ugb2YKKysgICB0aGlzIG1hY3JvIGltcGxpZXMgdGhhdCB0aGVyZSBtdXN0IG5vdCBiZSBhbnkgb3RoZXIgbWFjcm8gaGlkaW5nCisrICAgdGhlIGRlY2xhcmF0aW9uIG9mIEZVTkNUSU9OOyBidXQgdW5kZWZpbmluZyBGVU5DVElPTiBmaXJzdCBpcyBwYXJ0CisrICAgb2YgdGhlIHBvaXNvbmluZyBwcm9jZXNzIGFueXdheSAoYWx0aG91Z2ggZm9yIHN5bWJvbHMgdGhhdCBhcmUKKysgICBwcm92aWRlZCBvbmx5IHZpYSBhIG1hY3JvLCB0aGUgcmVzdWx0IGlzIGEgY29tcGlsYXRpb24gZXJyb3IgcmF0aGVyCisrICAgdGhhbiBhIHdhcm5pbmcgY29udGFpbmluZyAibGl0ZXJhbCBzdHJpbmciKS4gIEFsc28gbm90ZSB0aGF0IGluCisrICAgQysrLCBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIGlmIEZVTkNUSU9OIGhhcyBubyBvdmVybG9hZHMuCisrCisrICAgRm9yIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHBvaXNvbiAnZ2V0bGluZScgYnk6CisrICAgLSBhZGRpbmcgYSBjYWxsIHRvIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwKKysgICAgIFtnZXRsaW5lXSkgaW4gY29uZmlndXJlLmFjLCB3aGljaCBwb3RlbnRpYWxseSBkZWZpbmVzCisrICAgICBIQVZFX1JBV19ERUNMX0dFVExJTkUKKysgICAtIGFkZGluZyB0aGlzIGNvZGUgdG8gYSBoZWFkZXIgdGhhdCB3cmFwcyB0aGUgc3lzdGVtIDxzdGRpby5oPjoKKysgICAgICN1bmRlZiBnZXRsaW5lCisrICAgICAjaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHJlcXVpcmVkIGJ5IFBPU0lYIDIwMDgsIGJ1dCIKKysgICAgICAgIm5vdCB1bml2ZXJzYWxseSBwcmVzZW50OyB1c2UgdGhlIGdudWxpYiBtb2R1bGUgZ2V0bGluZSIpOworKyAgICAgI2VuZGlmCisrCisrICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHBvaXNvbiBnbG9iYWwgdmFyaWFibGVzLiAgQnV0IGl0IGlzCisrICAgcG9zc2libGUgdG8gd3JpdGUgYSB3cmFwcGVyIGFjY2Vzc29yIGZ1bmN0aW9uLCBhbmQgcG9pc29uIHRoYXQKKysgICAobGVzcyBjb21tb24gdXNhZ2UsIGxpa2UgJmVudmlyb24sIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvcgorKyAgIHJhdGhlciB0aGFuIGlzc3VlIHRoZSBuaWNlIHdhcm5pbmcsIGJ1dCB0aGUgZW5kIHJlc3VsdCBvZiBpbmZvcm1pbmcKKysgICB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZWlyIHBvcnRhYmlsaXR5IHByb2JsZW0gaXMgc3RpbGwgYWNoaWV2ZWQpOgorKyAgICNpZiBIQVZFX1JBV19ERUNMX0VOVklST04KKysgICBzdGF0aWMgaW5saW5lIGNoYXIgKioqcnBsX2Vudmlyb24gKHZvaWQpIHsgcmV0dXJuICZlbnZpcm9uOyB9CisrICAgX0dMX1dBUk5fT05fVVNFIChycGxfZW52aXJvbiwgImVudmlyb24gaXMgbm90IGFsd2F5cyBwcm9wZXJseSBkZWNsYXJlZCIpOworKyAgICMgdW5kZWYgZW52aXJvbgorKyAgICMgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKysgICAjZW5kaWYKKysgICAqLworKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisrCisrIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKysvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKysjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKytfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKysgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisrICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorKyAgIGFuZCBhdHRyaWJ1dGVzLgorKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKysgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCisrZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisrICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKysjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisrIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisrIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9hbGxvY2F0b3IuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9hbGxvY2F0b3IuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvYWxsb2NhdG9yLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9hbGxvY2F0b3IuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjA1MDQ4NDQ0NCAtMDgwMAorQEAgLTQ1LDExICs0NSwxMCBAQCBzdHJ1Y3QgYWxsb2NhdG9yCisgICAvKiBDYWxsIEZSRUUgdG8gZnJlZSBtZW1vcnksIGxpa2UgJ2ZyZWUnLiAgKi8KKyAgIHZvaWQgKCpmcmVlKSAodm9pZCAqKTsKKyAKKy0gIC8qIElmIG5vbm51bGwsIGNhbGwgRElFIChTSVpFKSBpZiBNQUxMT0MgKFNJWkUpIG9yIFJFQUxMT0MgKC4uLiwKKy0gICAgIFNJWkUpIGZhaWxzLiAgRElFIHNob3VsZCBub3QgcmV0dXJuLiAgU0laRSBzaG91bGQgZXF1YWwgU0laRV9NQVgKKy0gICAgIGlmIHNpemVfdCBvdmVyZmxvdyB3YXMgZGV0ZWN0ZWQgd2hpbGUgY2FsY3VsYXRpbmcgc2l6ZXMgdG8gYmUKKy0gICAgIHBhc3NlZCB0byBNQUxMT0Mgb3IgUkVBTExPQy4gICovCistICB2b2lkICgqZGllKSAoc2l6ZV90KTsKKysgIC8qIElmIG5vbm51bGwsIGNhbGwgRElFIGlmIE1BTExPQyBvciBSRUFMTE9DIGZhaWxzLiAgRElFIHNob3VsZCBub3QKKysgICAgIHJldHVybi4gIERJRSBjYW4gYmUgdXNlZCBieSBjb2RlIHRoYXQgZGV0ZWN0cyBtZW1vcnkgb3ZlcmZsb3cKKysgICAgIHdoaWxlIGNhbGN1bGF0aW5nIHNpemVzIHRvIGJlIHBhc3NlZCB0byBNQUxMT0Mgb3IgUkVBTExPQy4gICovCisrICB2b2lkICgqZGllKSAodm9pZCk7CisgfTsKKyAKKyAvKiBBbiBhbGxvY2F0b3IgdXNpbmcgdGhlIHN0ZGxpYiBmdW5jdGlvbnMgYW5kIGEgbnVsbCBESUUgZnVuY3Rpb24uICAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jIGxpYmljb252LTEuMTQvc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jCTIwMTItMDEtMDggMDI6MDc6NDAuMDk0NDg0NDQ2IC0wODAwCitAQCAtMTI1LDcgKzEyNSw3IEBAIF9fcmVhbHBhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc28KKyAjZWxzZQorICAgcGF0aF9tYXggPSBwYXRoY29uZiAobmFtZSwgX1BDX1BBVEhfTUFYKTsKKyAgIGlmIChwYXRoX21heCA8PSAwKQorLSAgICBwYXRoX21heCA9IDgxOTI7CisrICAgIHBhdGhfbWF4ID0gMTAyNDsKKyAjZW5kaWYKKyAKKyAgIGlmIChyZXNvbHZlZCA9PSBOVUxMKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYXJlYWRsaW5rYXQuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYXJlYWRsaW5rYXQuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2FyZWFkbGlua2F0LmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYXJlYWRsaW5rYXQuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjEwMjQ4NDQ0NSAtMDgwMAorQEAgLTEzMyw3ICsxMzMsNiBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICAgICAgICAgIGlmIChidWYgPT0gc3RhY2tfYnVmKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGNoYXIgKmIgPSAoY2hhciAqKSBhbGxvYy0+YWxsb2NhdGUgKGxpbmtfc2l6ZSk7CistICAgICAgICAgICAgICBidWZfc2l6ZSA9IGxpbmtfc2l6ZTsKKyAgICAgICAgICAgICAgIGlmICghIGIpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgbWVtY3B5IChiLCBidWYsIGxpbmtfc2l6ZSk7CitAQCAtMTU3LDExICsxNTYsNiBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICAgICAgICBidWZfc2l6ZSAqPSAyOworICAgICAgIGVsc2UgaWYgKGJ1Zl9zaXplIDwgYnVmX3NpemVfbWF4KQorICAgICAgICAgYnVmX3NpemUgPSBidWZfc2l6ZV9tYXg7CistICAgICAgZWxzZSBpZiAoYnVmX3NpemVfbWF4IDwgU0laRV9NQVgpCistICAgICAgICB7CistICAgICAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworLSAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgIH0KKyAgICAgICBlbHNlCisgICAgICAgICBicmVhazsKKyAgICAgICBidWYgPSAoY2hhciAqKSBhbGxvYy0+YWxsb2NhdGUgKGJ1Zl9zaXplKTsKK0BAIC0xNjksNyArMTYzLDcgQEAgY2FyZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYQorICAgd2hpbGUgKGJ1Zik7CisgCisgICBpZiAoYWxsb2MtPmRpZSkKKy0gICAgYWxsb2MtPmRpZSAoYnVmX3NpemUpOworKyAgICBhbGxvYy0+ZGllICgpOworICAgZXJybm8gPSBFTk9NRU07CisgICByZXR1cm4gTlVMTDsKKyB9CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm5vLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJybm8uaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJybm8uaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm5vLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xMjI0ODQ0NDYgLTA4MDAKK0BAIC0xNiw3ICsxNiw3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorKyNpZm5kZWYgX0dMX0VSUk5PX0gKKyAKKyAjaWYgX19HTlVDX18gPj0gMworIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK0BAIC0yNiw4ICsyNiw4IEBACisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9FUlJOT19IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICisrI2lmbmRlZiBfR0xfRVJSTk9fSAorKyNkZWZpbmUgX0dMX0VSUk5PX0gKKyAKKyAKKyAvKiBPbiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMsIG1hbnkgbWFjcm9zIGFyZSBub3QgZGVmaW5lZC4gICovCitAQCAtMTQ3LDE2ICsxNDcsNiBAQAorICMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQIDEKKyAjIGVuZGlmCisgCistIyBpZm5kZWYgRU5FVFJFU0VUCistIyAgZGVmaW5lIEVORVRSRVNFVCAyMDExCistIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVCAxCistIyBlbmRpZgorLQorLSMgaWZuZGVmIEVDT05OQUJPUlRFRAorLSMgIGRlZmluZSBFQ09OTkFCT1JURUQgMjAxMgorLSMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQgMQorLSMgZW5kaWYKKy0KKyAjIGlmbmRlZiBFU1RBTEUKKyAjICBkZWZpbmUgRVNUQUxFICAgIDIwMDkKKyAjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNUQUxFIDEKK0BAIC0xNzMsNSArMTYzLDUgQEAKKyAjIGVuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9FUlJOT19IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9FUlJOT19IICovCisrI2VuZGlmIC8qIF9HTF9FUlJOT19IICovCisrI2VuZGlmIC8qIF9HTF9FUlJOT19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm9yLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJyb3IuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJyb3IuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm9yLmMJMjAxMi0wMS0wOCAwMjowNzo0MC4xMzQ0ODQ0NDggLTA4MDAKK0BAIC05NywxNSArOTcsMTEgQEAgZXh0ZXJuIHZvaWQgX19lcnJvcl9hdF9saW5lIChpbnQgc3RhdHVzLAorIC8qIFRoZSBnbnVsaWIgb3ZlcnJpZGUgb2YgZmNudGwgaXMgbm90IG5lZWRlZCBpbiB0aGlzIGZpbGUuICAqLworICMgdW5kZWYgZmNudGwKKyAKKy0jIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUgorKyMgaWYgIUhBVkVfREVDTF9TVFJFUlJPUl9SICYmIFNUUkVSUk9SX1JfQ0hBUl9QCisgIyAgaWZuZGVmIEhBVkVfREVDTF9TVFJFUlJPUl9SCisgInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKyAjICBlbmRpZgorLSMgIGlmIFNUUkVSUk9SX1JfQ0hBUl9QCisgY2hhciAqc3RyZXJyb3JfciAoKTsKKy0jICBlbHNlCistaW50IHN0cmVycm9yX3IgKCk7CistIyAgZW5kaWYKKyAjIGVuZGlmCisgCisgLyogVGhlIGNhbGxpbmcgcHJvZ3JhbSBzaG91bGQgZGVmaW5lIHByb2dyYW1fbmFtZSBhbmQgc2V0IGl0IHRvIHRoZQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9mY250bC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL2ZjbnRsLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ZjbnRsLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9mY250bC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMTU0NDg0NDQ5IC0wODAwCitAQCAtNDAsNyArNDAsNyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorKyNpZm5kZWYgX0dMX0ZDTlRMX0gKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogT24gc29tZSBzeXN0ZW1zIG90aGVyIHRoYW4gZ2xpYmMsIDxzeXMvc3RhdC5oPiBpcyBhIHByZXJlcXVpc2l0ZSBvZgorQEAgLTU1LDggKzU1LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX0ZDTlRMX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKysjaWZuZGVmIF9HTF9GQ05UTF9ICisrI2RlZmluZSBfR0xfRkNOVExfSAorIAorICNpZm5kZWYgX19HTElCQ19fIC8qIEF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KK0BAIC0zMjAsNiArMzIwLDYgQEAgX0dMX1dBUk5fT05fVVNFIChvcGVuYXQsICJvcGVuYXQgaXMgbm90CisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9IICovCisrI2VuZGlmIC8qIF9HTF9GQ05UTF9IICovCisrI2VuZGlmIC8qIF9HTF9GQ05UTF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ludHByb3BzLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvaW50cHJvcHMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvaW50cHJvcHMuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2ludHByb3BzLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xNzQ0ODQ0NTAgLTA4MDAKK0BAIC0yMiwxMyArMjIsMTQgQEAKKyAKKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgCistLyogUmV0dXJuIGFuIGludGVnZXIgdmFsdWUsIGNvbnZlcnRlZCB0byB0aGUgc2FtZSB0eXBlIGFzIHRoZSBpbnRlZ2VyCistICAgZXhwcmVzc2lvbiBFIGFmdGVyIGludGVnZXIgdHlwZSBwcm9tb3Rpb24uICBWIGlzIHRoZSB1bmNvbnZlcnRlZCB2YWx1ZS4gICovCistI2RlZmluZSBfR0xfSU5UX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgKyAodikpCisrLyogUmV0dXJuIGEgaW50ZWdlciB2YWx1ZSwgY29udmVydGVkIHRvIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGludGVnZXIKKysgICBleHByZXNzaW9uIEUgYWZ0ZXIgaW50ZWdlciB0eXBlIHByb21vdGlvbi4gIFYgaXMgdGhlIHVuY29udmVydGVkIHZhbHVlLgorKyAgIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCisrI2RlZmluZSBfR0xfSU5UX0NPTlZFUlQoZSwgdikgKChlKSAtIChlKSArICh2KSkKKyAKKyAvKiBBY3QgbGlrZSBfR0xfSU5UX0NPTlZFUlQgKEUsIC1WKSBidXQgd29yayBhcm91bmQgYSBidWcgaW4gSVJJWCA2LjUgY2M7IHNlZQorICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDExLTA1L21zZzAwNDA2Lmh0bWw+LiAgKi8KKy0jZGVmaW5lIF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgLSAodikpCisrI2RlZmluZSBfR0xfSU5UX05FR0FURV9DT05WRVJUKGUsIHYpICgoZSkgLSAoZSkgLSAodikpCisgCisgLyogVGhlIGV4dHJhIGNhc3RzIGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHdvcmsgYXJvdW5kIGNvbXBpbGVyIGJ1Z3MsCisgICAgZS5nLiwgaW4gQ3JheSBDIDUuMC4zLjAuICAqLworQEAgLTUyLDcgKzUzLDcgQEAKKyAjZGVmaW5lIFRZUEVfU0lHTkVEKHQpICghICgodCkgMCA8ICh0KSAtMSkpCisgCisgLyogUmV0dXJuIDEgaWYgdGhlIGludGVnZXIgZXhwcmVzc2lvbiBFLCBhZnRlciBpbnRlZ2VyIHByb21vdGlvbiwgaGFzCistICAgYSBzaWduZWQgdHlwZS4gICovCisrICAgYSBzaWduZWQgdHlwZS4gIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCisgI2RlZmluZSBfR0xfSU5UX1NJR05FRChlKSAoX0dMX0lOVF9ORUdBVEVfQ09OVkVSVCAoZSwgMSkgPCAwKQorIAorIAorQEAgLTMxMCwxMCArMzExLDEzIEBACisgLyogUmV0dXJuIDEgaWYgdGhlIGV4cHJlc3Npb24gQSA8b3A+IEIgd291bGQgb3ZlcmZsb3csCisgICAgd2hlcmUgT1BfUkVTVUxUX09WRVJGTE9XIChBLCBCLCBNSU4sIE1BWCkgZG9lcyB0aGUgYWN0dWFsIHRlc3QsCisgICAgYXNzdW1pbmcgTUlOIGFuZCBNQVggYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZvciB0aGUgcmVzdWx0IHR5cGUuCistICAgQXJndW1lbnRzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy4gICovCisrCisrICAgVGhpcyBtYWNybyBhc3N1bWVzIHRoYXQgQSB8IEIgaXMgYSB2YWxpZCBpbnRlZ2VyIGlmIGJvdGggQSBhbmQgQiBhcmUsCisrICAgd2hpY2ggaXMgdHJ1ZSBvZiBhbGwga25vd24gcHJhY3RpY2FsIGhvc3RzLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0KKysgICBmb3IgeW91LCBwbGVhc2UgbGV0IHVzIGtub3cgaG93IHRvIGZpeCBpdCBmb3IgeW91ciBob3N0LiAgKi8KKyAjZGVmaW5lIF9HTF9CSU5BUllfT1BfT1ZFUkZMT1coYSwgYiwgb3BfcmVzdWx0X292ZXJmbG93KSAgICAgICAgXAorICAgb3BfcmVzdWx0X292ZXJmbG93IChhLCBiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUlOSU1VTSAoMCAqIChiKSArIChhKSksICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NQVhJTVVNICgwICogKGIpICsgKGEpKSkKKysgICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NSU5JTVVNICgoYSkgfCAoYikpLCAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01BWElNVU0gKChhKSB8IChiKSkpCisgCisgI2VuZGlmIC8qIF9HTF9JTlRQUk9QU19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL01ha2VmaWxlLmdudWxpYiBsaWJpY29udi0xLjE0L3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL01ha2VmaWxlLmdudWxpYgkyMDEyLTAxLTA4IDAyOjA1OjE4Ljc1NDQ3NzYwNiAtMDgwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL01ha2VmaWxlLmdudWxpYgkyMDEyLTAxLTA4IDAyOjA3OjQzLjEzODQ4NDU5MiAtMDgwMAorQEAgLTksNyArOSw3IEBACisgIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorICMKKyAjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4KKy0jIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworKyMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisgCisgCisgTU9TVExZQ0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCitAQCAtNjAsMTIgKzYwLDYwIEBAIEVYVFJBX0RJU1QgKz0gYXJlYWRsaW5rLmgKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGFyZWFkbGluaworIAorKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYXJnLW5vbm51bGwKKysKKysjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKysjIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKysjIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CisrIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorKworK0JVSUxUX1NPVVJDRVMgKz0gYXJnLW5vbm51bGwuaAorKyMgVGhlIGFyZy1ub25udWxsLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisrIyBidWlsZC1hdXgvYXJnLW5vbm51bGwuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCisrYXJnLW5vbm51bGwuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorKwlzZWQgLW4gLWUgJy9HTF9BUkdfTk9OTlVMTC8sJCRwJyBcCisrCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oIFwKKysJICA+ICRALXQgJiYgXAorKwltdiAkQC10ICRACisrTU9TVExZQ0xFQU5GSUxFUyArPSBhcmctbm9ubnVsbC5oIGFyZy1ub25udWxsLmgtdAorKworK0FSR19OT05OVUxMX0g9YXJnLW5vbm51bGwuaAorKworK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKworKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYXJnLW5vbm51bGwKKysKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGJpbmFyeS1pbworIAorIGxpYmljcnRfYV9TT1VSQ0VTICs9IGJpbmFyeS1pby5oCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBiaW5hcnktaW8KKyAKKysjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGMrK2RlZnMKKysKKysjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKysjIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKysjIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CisrIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorKworK0JVSUxUX1NPVVJDRVMgKz0gYysrZGVmcy5oCisrIyBUaGUgYysrZGVmcy5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworKyMgYnVpbGQtYXV4L2MrK2RlZnMuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCisrYysrZGVmcy5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmgKKysJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKysJc2VkIC1uIC1lICcvX0dMX0NYWERFRlMvLCQkcCcgXAorKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYysrZGVmcy5oIFwKKysJICA+ICRALXQgJiYgXAorKwltdiAkQC10ICRACisrTU9TVExZQ0xFQU5GSUxFUyArPSBjKytkZWZzLmggYysrZGVmcy5oLXQKKysKKytDWFhERUZTX0g9YysrZGVmcy5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmgKKysKKysjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGMrK2RlZnMKKysKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNhbm9uaWNhbGl6ZS1sZ3BsCisgCisgCitAQCAtMTAwLDggKzE0OCw3IEBAIGlmIEdMX0dFTkVSQVRFX0VSUk5PX0gKKyBlcnJuby5oOiBlcnJuby5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9FUlJOT19IJydAfCQoTkVYVF9FUlJOT19IKXxnJyBcCitAQCAtMTQyLDE1ICsxODksMTQgQEAgQlVJTFRfU09VUkNFUyArPSBmY250bC5oCisgZmNudGwuaDogZmNudGwuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfRkNOVExfSCcnQHwkKE5FWFRfRkNOVExfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNOVEwnJ0AvJChHTlVMSUJfRkNOVEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX05PTkJMT0NLSU5HJydALyQoR05VTElCX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PUEVOJydALyQoR05VTElCX09QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU5BVCcnQC8kKEdOVUxJQl9PUEVOQVQpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDTlRMJydAfCQoR05VTElCX0ZDTlRMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT1BFTicnQHwkKEdOVUxJQl9PUEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PUEVOQVQnJ0B8JChHTlVMSUJfT1BFTkFUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRkNOVEwnJ0B8JChIQVZFX0ZDTlRMKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfT1BFTkFUJydAfCQoSEFWRV9PUEVOQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GQ05UTCcnQHwkKFJFUExBQ0VfRkNOVEwpfGcnIFwKK0BAIC0yOTcsNyArMzQzLDcgQEAgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jbworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcmVsb2NhdGFibGUtcHJvZy13cmFwcGVyCisgCisgCistRVhUUkFfRElTVCArPSBhbGxvY2F0b3IuYyBhbGxvY2F0b3IuaCBhcmVhZGxpbmsuYyBhcmVhZGxpbmsuaCBjLWN0eXBlLmMgYy1jdHlwZS5oIGNhbm9uaWNhbGl6ZS1sZ3BsLmMgY2FyZWFkbGlua2F0LmMgY2FyZWFkbGlua2F0LmggbWFsbG9jYS5jIG1hbGxvY2EuaCBwcm9nbmFtZS5jIHByb2duYW1lLmggcHJvZ3JlbG9jLmMgcmVhZGxpbmsuYyByZWxvY2F0YWJsZS5jIHJlbG9jYXRhYmxlLmggcmVsb2N3cmFwcGVyLmMgc2V0ZW52LmMKKytFWFRSQV9ESVNUICs9IGFsbG9jYXRvci5jIGFsbG9jYXRvci5oIGFyZWFkbGluay5jIGFyZWFkbGluay5oIGMtY3R5cGUuYyBjLWN0eXBlLmggY2Fub25pY2FsaXplLWxncGwuYyBjYXJlYWRsaW5rYXQuYyBjYXJlYWRsaW5rYXQuaCBtYWxsb2NhLmMgbWFsbG9jYS5oIHByb2duYW1lLmMgcHJvZ25hbWUuaCBwcm9ncmVsb2MuYyByZWFkbGluay5jIHJlbG9jYXRhYmxlLmMgcmVsb2NhdGFibGUuaCByZWxvY3dyYXBwZXIuYyBzZXRlbnYuYyBzdHJlcnJvci5jCisgCisgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9pbnN0YWxsLXJlbG9jCisgCitAQCAtMzA1LDkgKzM1MSwxMCBAQCBFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2luCisgCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzYWZlLXJlYWQKKyAKKy1saWJpY3J0X2FfU09VUkNFUyArPSBzYWZlLXJlYWQuYworIAorLUVYVFJBX0RJU1QgKz0gc2FmZS1yZWFkLmgKKytFWFRSQV9ESVNUICs9IHNhZmUtcmVhZC5jIHNhZmUtcmVhZC5oCisrCisrRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc2FmZS1yZWFkLmMKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNhZmUtcmVhZAorIAorQEAgLTMyMCwyNCArMzY3LDIwIEBAIEJVSUxUX1NPVVJDRVMgKz0gc2lnbmFsLmgKKyBzaWduYWwuaDogc2lnbmFsLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU0lHTkFMX0gnJ0B8JChORVhUX1NJR05BTF9IKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVEhSRUFEX1NJR01BU0snJ0B8JChHTlVMSUJfUFRIUkVBRF9TSUdNQVNLKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydALyQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NJR1BST0NNQVNLJydALyQoR05VTElCX1NJR1BST0NNQVNLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdBQ1RJT04nJ0AvJChHTlVMSUJfU0lHQUNUSU9OKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydAfCQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NJR1BST0NNQVNLJydAfCQoR05VTElCX1NJR1BST0NNQVNLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdBQ1RJT04nJ0B8JChHTlVMSUJfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcnJ0B8JChIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfUFRIUkVBRF9TSUdNQVNLJydAfCQoSEFWRV9QVEhSRUFEX1NJR01BU0spfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdTRVRfVCcnQHwkKEhBVkVfU0lHU0VUX1QpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdJTkZPX1QnJ0B8JChIQVZFX1NJR0lORk9fVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR0FDVElPTicnQHwkKEhBVkVfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QnJ0B8JChIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHSEFORExFUl9UJydAfCQoSEFWRV9TSUdIQU5ETEVSX1QpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVEhSRUFEX1NJR01BU0snJ0B8JChSRVBMQUNFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKK0BAIC0zNjgsODcgKzQxMSw2IEBAIEVYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHNpZ3Byb2NtYXNrLmMKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrCisgCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybgorLQorLSMgQmVjYXVzZSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgZGVmaW5lcyBhIHZhcmlhYmxlIHVzZWQgYnkgb3RoZXIKKy0jIGdudWxpYiBNYWtlZmlsZSBzbmlwcGV0cywgaXQgbXVzdCBiZSBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0CistIyBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKy0KKy1fTk9SRVRVUk5fSD0kKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybgorLQorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbAorLQorLSMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorLSMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorLSMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKy0jICdhbGwnIGRlZmluZWQgYWJvdmUuCistCistQlVJTFRfU09VUkNFUyArPSBhcmctbm9ubnVsbC5oCistIyBUaGUgYXJnLW5vbm51bGwuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKy0jIGJ1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKy0jIG9mZi4KKy1hcmctbm9ubnVsbC5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvR0xfQVJHX05PTk5VTEwvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSBhcmctbm9ubnVsbC5oIGFyZy1ub25udWxsLmgtdAorLQorLUFSR19OT05OVUxMX0g9YXJnLW5vbm51bGwuaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnMKKy0KKy0jIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKy0jIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKy0jIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CistIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorLQorLUJVSUxUX1NPVVJDRVMgKz0gYysrZGVmcy5oCistIyBUaGUgYysrZGVmcy5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworLSMgYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKy1jKytkZWZzLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCistCXNlZCAtbiAtZSAnL19HTF9DWFhERUZTLywkJHAnIFwKKy0JICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSBjKytkZWZzLmggYysrZGVmcy5oLXQKKy0KKy1DWFhERUZTX0g9YysrZGVmcy5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLQorLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9jKytkZWZzCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlCistCistQlVJTFRfU09VUkNFUyArPSB3YXJuLW9uLXVzZS5oCistIyBUaGUgd2Fybi1vbi11c2UuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKy0jIGJ1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKy0jIG9mZi4KKy13YXJuLW9uLXVzZS5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvXi5pZm5kZWYvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSB3YXJuLW9uLXVzZS5oIHdhcm4tb24tdXNlLmgtdAorLQorLVdBUk5fT05fVVNFX0g9d2Fybi1vbi11c2UuaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlCistCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdGF0CisgCisgCitAQCAtNDkxLDggKzQ1Myw3IEBAIGlmIEdMX0dFTkVSQVRFX1NURERFRl9ICisgc3RkZGVmLmg6IHN0ZGRlZi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERERUZfSCcnQHwkKE5FWFRfU1REREVGX0gpfGcnIFwKK0BAIC01MjEsOCArNDgyLDcgQEAgaWYgR0xfR0VORVJBVEVfU1RESU5UX0gKKyBzdGRpbnQuaDogc3RkaW50LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorKwkgIHNlZCAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorIAkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorQEAgLTU3MCw2MyArNTMwLDYyIEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RkaW8uaAorIHN0ZGlvLmg6IHN0ZGlvLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RESU9fSCcnQHwkKE5FWFRfU1RESU9fSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFBSSU5URicnQC8kKEdOVUxJQl9EUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0xPU0UnJ0AvJChHTlVMSUJfRkNMT1NFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRkxVU0gnJ0AvJChHTlVMSUJfRkZMVVNIKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GR0VUQycnQC8kKEdOVUxJQl9GR0VUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkdFVFMnJ0AvJChHTlVMSUJfRkdFVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZPUEVOJydALyQoR05VTElCX0ZPUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFJJTlRGJydALyQoR05VTElCX0ZQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfRlBSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVUkdFJydALyQoR05VTElCX0ZQVVJHRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVVEMnJ0AvJChHTlVMSUJfRlBVVEMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVRTJydALyQoR05VTElCX0ZQVVRTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVBRCcnQC8kKEdOVUxJQl9GUkVBRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFT1BFTicnQC8kKEdOVUxJQl9GUkVPUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0NBTkYnJ0AvJChHTlVMSUJfRlNDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0VFSycnQC8kKEdOVUxJQl9GU0VFSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNFRUtPJydALyQoR05VTElCX0ZTRUVLTykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlRFTEwnJ0AvJChHTlVMSUJfRlRFTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZURUxMTycnQC8kKEdOVUxJQl9GVEVMTE8pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZXUklURScnQC8kKEdOVUxJQl9GV1JJVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEMnJ0AvJChHTlVMSUJfR0VUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQ0hBUicnQC8kKEdOVUxJQl9HRVRDSEFSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRERUxJTScnQC8kKEdOVUxJQl9HRVRERUxJTSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTElORScnQC8kKEdOVUxJQl9HRVRMSU5FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTJydALyQoR05VTElCX0dFVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09CU1RBQ0tfUFJJTlRGJydALyQoR05VTElCX09CU1RBQ0tfUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUEVSUk9SJydALyQoR05VTElCX1BFUlJPUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUE9QRU4nJ0AvJChHTlVMSUJfUE9QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URicnQC8kKEdOVUxJQl9QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9QUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVEMnJ0AvJChHTlVMSUJfUFVUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUQ0hBUicnQC8kKEdOVUxJQl9QVVRDSEFSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRTJydALyQoR05VTElCX1BVVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTU9WRScnQC8kKEdOVUxJQl9SRU1PVkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRScnQC8kKEdOVUxJQl9SRU5BTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRUFUJydALyQoR05VTElCX1JFTkFNRUFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TQ0FORicnQC8kKEdOVUxJQl9TQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU05QUklOVEYnJ0AvJChHTlVMSUJfU05QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfU1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVERJT19IX1NJR1BJUEUnJ0AvJChHTlVMSUJfU1RESU9fSF9TSUdQSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UTVBGSUxFJydALyQoR05VTElCX1RNUEZJTEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZBU1BSSU5URicnQC8kKEdOVUxJQl9WQVNQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZEUFJJTlRGJydALyQoR05VTElCX1ZEUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlBSSU5URicnQC8kKEdOVUxJQl9WRlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVkZQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGU0NBTkYnJ0AvJChHTlVMSUJfVkZTQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlNDQU5GJydALyQoR05VTElCX1ZTQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlBSSU5URicnQC8kKEdOVUxJQl9WUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTTlBSSU5URicnQC8kKEdOVUxJQl9WU05QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZTUFJJTlRGX1BPU0lYKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EUFJJTlRGJydAfCQoR05VTElCX0RQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDTE9TRScnQHwkKEdOVUxJQl9GQ0xPU0UpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZGTFVTSCcnQHwkKEdOVUxJQl9GRkxVU0gpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZHRVRDJydAfCQoR05VTElCX0ZHRVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GR0VUUycnQHwkKEdOVUxJQl9GR0VUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRk9QRU4nJ0B8JChHTlVMSUJfRk9QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQUklOVEYnJ0B8JChHTlVMSUJfRlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9GUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVSR0UnJ0B8JChHTlVMSUJfRlBVUkdFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVUQycnQHwkKEdOVUxJQl9GUFVUQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBVVFMnJ0B8JChHTlVMSUJfRlBVVFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZSRUFEJydAfCQoR05VTElCX0ZSRUFEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUkVPUEVOJydAfCQoR05VTElCX0ZSRU9QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTQ0FORicnQHwkKEdOVUxJQl9GU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTRUVLJydAfCQoR05VTElCX0ZTRUVLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU0VFS08nJ0B8JChHTlVMSUJfRlNFRUtPKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVEVMTCcnQHwkKEdOVUxJQl9GVEVMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRFTExPJydAfCQoR05VTElCX0ZURUxMTyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRldSSVRFJydAfCQoR05VTElCX0ZXUklURSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUQycnQHwkKEdOVUxJQl9HRVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDSEFSJydAfCQoR05VTElCX0dFVENIQVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERFTElNJydAfCQoR05VTElCX0dFVERFTElNKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMSU5FJydAfCQoR05VTElCX0dFVExJTkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFMnJ0B8JChHTlVMSUJfR0VUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT0JTVEFDS19QUklOVEYnJ0B8JChHTlVMSUJfT0JTVEFDS19QUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QRVJST1InJ0B8JChHTlVMSUJfUEVSUk9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QT1BFTicnQHwkKEdOVUxJQl9QT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJJTlRGJydAfCQoR05VTElCX1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1BSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVUQycnQHwkKEdOVUxJQl9QVVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRDSEFSJydAfCQoR05VTElCX1BVVENIQVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVFMnJ0B8JChHTlVMSUJfUFVUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVNT1ZFJydAfCQoR05VTElCX1JFTU9WRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVOQU1FJydAfCQoR05VTElCX1JFTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVOQU1FQVQnJ0B8JChHTlVMSUJfUkVOQU1FQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NDQU5GJydAfCQoR05VTElCX1NDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TTlBSSU5URicnQHwkKEdOVUxJQl9TTlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9TUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HJydAfCQoR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NURElPX0hfU0lHUElQRScnQHwkKEdOVUxJQl9TVERJT19IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RNUEZJTEUnJ0B8JChHTlVMSUJfVE1QRklMRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkFTUFJJTlRGJydAfCQoR05VTElCX1ZBU1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkRQUklOVEYnJ0B8JChHTlVMSUJfVkRQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZGUFJJTlRGJydAfCQoR05VTElCX1ZGUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9WRlBSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkZTQ0FORicnQHwkKEdOVUxJQl9WRlNDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WU0NBTkYnJ0B8JChHTlVMSUJfVlNDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WUFJJTlRGJydAfCQoR05VTElCX1ZQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVlBSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNOUFJJTlRGJydAfCQoR05VTElCX1ZTTlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVlNQUklOVEZfUE9TSVgpfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RkaW8uaW4uaCB8IFwKKyAJICBzZWQgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZQVVJHRScnQHwkKEhBVkVfREVDTF9GUFVSR0UpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZTRUVLTycnQHwkKEhBVkVfREVDTF9GU0VFS08pfGcnIFwKK0BAIC02OTEsNDMgKzY1MCw0MSBAQCBCVUlMVF9TT1VSQ0VTICs9IHN0ZGxpYi5oCisgCisgIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxzdGRsaWIuaD4gd2hlbiB0aGUgc3lzdGVtCisgIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCistc3RkbGliLmg6IHN0ZGxpYi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSBcCistICAkKF9OT1JFVFVSTl9IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKytzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RETElCX0gnJ0B8JChORVhUX1NURExJQl9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9fRVhJVCcnQC8kKEdOVUxJQl9fRVhJVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQVRPTEwnJ0AvJChHTlVMSUJfQVRPTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9DQUxMT0NfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUnJ0AvJChHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9BREFWRycnQC8kKEdOVUxJQl9HRVRMT0FEQVZHKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTVUJPUFQnJ0AvJChHTlVMSUJfR0VUU1VCT1BUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HUkFOVFBUJydALyQoR05VTElCX0dSQU5UUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01BTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9NQUxMT0NfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CVE9XQycnQC8kKEdOVUxJQl9NQlRPV0MpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRFRFTVAnJ0AvJChHTlVMSUJfTUtEVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtPU1RFTVAnJ0AvJChHTlVMSUJfTUtPU1RFTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QUycnQC8kKEdOVUxJQl9NS09TVEVNUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LU1RFTVAnJ0AvJChHTlVMSUJfTUtTVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtTVEVNUFMnJ0AvJChHTlVMSUJfTUtTVEVNUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BUU05BTUUnJ0AvJChHTlVMSUJfUFRTTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVURU5WJydALyQoR05VTElCX1BVVEVOVikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkFORE9NX1InJ0AvJChHTlVMSUJfUkFORE9NX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfUkVBTExPQ19QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBTFBBVEgnJ0AvJChHTlVMSUJfUkVBTFBBVEgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JQTUFUQ0gnJ0AvJChHTlVMSUJfUlBNQVRDSCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0VURU5WJydALyQoR05VTElCX1NFVEVOVikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9EJydALyQoR05VTElCX1NUUlRPRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9MTCcnQC8kKEdOVUxJQl9TVFJUT0xMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT1VMTCcnQC8kKEdOVUxJQl9TVFJUT1VMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lTVEVNX1BPU0lYJydALyQoR05VTElCX1NZU1RFTV9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MT0NLUFQnJ0AvJChHTlVMSUJfVU5MT0NLUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOU0VURU5WJydALyQoR05VTElCX1VOU0VURU5WKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1RPTUInJ0AvJChHTlVMSUJfV0NUT01CKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9fRVhJVCcnQHwkKEdOVUxJQl9fRVhJVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQVRPTEwnJ0B8JChHTlVMSUJfQVRPTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NBTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9DQUxMT0NfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUnJ0B8JChHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9BREFWRycnQHwkKEdOVUxJQl9HRVRMT0FEQVZHKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRTVUJPUFQnJ0B8JChHTlVMSUJfR0VUU1VCT1BUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HUkFOVFBUJydAfCQoR05VTElCX0dSQU5UUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01BTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9NQUxMT0NfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CVE9XQycnQHwkKEdOVUxJQl9NQlRPV0MpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRFRFTVAnJ0B8JChHTlVMSUJfTUtEVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtPU1RFTVAnJ0B8JChHTlVMSUJfTUtPU1RFTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LT1NURU1QUycnQHwkKEdOVUxJQl9NS09TVEVNUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LU1RFTVAnJ0B8JChHTlVMSUJfTUtTVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtTVEVNUFMnJ0B8JChHTlVMSUJfTUtTVEVNUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BUU05BTUUnJ0B8JChHTlVMSUJfUFRTTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVURU5WJydAfCQoR05VTElCX1BVVEVOVil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkFORE9NX1InJ0B8JChHTlVMSUJfUkFORE9NX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0B8JChHTlVMSUJfUkVBTExPQ19QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBTFBBVEgnJ0B8JChHTlVMSUJfUkVBTFBBVEgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JQTUFUQ0gnJ0B8JChHTlVMSUJfUlBNQVRDSCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0VURU5WJydAfCQoR05VTElCX1NFVEVOVil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9EJydAfCQoR05VTElCX1NUUlRPRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9MTCcnQHwkKEdOVUxJQl9TVFJUT0xMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT1VMTCcnQHwkKEdOVUxJQl9TVFJUT1VMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lTVEVNX1BPU0lYJydAfCQoR05VTElCX1NZU1RFTV9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5MT0NLUFQnJ0B8JChHTlVMSUJfVU5MT0NLUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOU0VURU5WJydAfCQoR05VTElCX1VOU0VURU5WKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9XQ1RPTUInJ0B8JChHTlVMSUJfV0NUT01CKXxnJyBcCisgCSAgICAgIDwgJChzcmNkaXIpL3N0ZGxpYi5pbi5oIHwgXAorIAkgIHNlZCAtZSAnc3xAJydIQVZFX19FWElUJydAfCQoSEFWRV9fRVhJVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0FUT0xMJydAfCQoSEFWRV9BVE9MTCl8ZycgXAorQEAgLTc2Niw3ICs3MjMsNiBAQCBzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvCisgCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVU5TRVRFTlYnJ0B8JChSRVBMQUNFX1VOU0VURU5WKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NUT01CJydAfCQoUkVQTEFDRV9XQ1RPTUIpfGcnIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCistCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfTm9yZXR1cm4vciAkKF9OT1JFVFVSTl9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKyAJfSA+ICRALXQgJiYgXAorQEAgLTc5MywxNSArNzQ5LDYgQEAgRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc3RyZXJyb3IuYworIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IKKyAKKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlCistCistCistRVhUUkFfRElTVCArPSBzdHJlcnJvci1vdmVycmlkZS5jIHN0cmVycm9yLW92ZXJyaWRlLmgKKy0KKy1FWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzdHJlcnJvci1vdmVycmlkZS5jCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZQorLQorICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyaW5nCisgCisgQlVJTFRfU09VUkNFUyArPSBzdHJpbmcuaAorQEAgLTgxMSw1MiArNzU4LDQ3IEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RyaW5nLmgKKyBzdHJpbmcuaDogc3RyaW5nLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RSSU5HX0gnJ0B8JChORVhUX1NUUklOR19IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMJydALyQoR05VTElCX0ZGU0wpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGU0xMJydALyQoR05VTElCX0ZGU0xMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNMRU4nJ0AvJChHTlVMSUJfTUJTTEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOTEVOJydALyQoR05VTElCX01CU05MRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NIUicnQC8kKEdOVUxJQl9NQlNDSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1JDSFInJ0AvJChHTlVMSUJfTUJTUkNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1RSJydALyQoR05VTElCX01CU1NUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNDQVNFQ01QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNOQ0FTRUNNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUENBU0VDTVAnJ0AvJChHTlVMSUJfTUJTUENBU0VDTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NBU0VTVFInJ0AvJChHTlVMSUJfTUJTQ0FTRVNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ1NQTicnQC8kKEdOVUxJQl9NQlNDU1BOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNQQlJLJydALyQoR05VTElCX01CU1BCUkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NQTicnQC8kKEdOVUxJQl9NQlNTUE4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NFUCcnQC8kKEdOVUxJQl9NQlNTRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1RPS19SJydALyQoR05VTElCX01CU1RPS19SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1DSFInJ0AvJChHTlVMSUJfTUVNQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1NRU0nJ0AvJChHTlVMSUJfTUVNTUVNKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1QQ1BZJydALyQoR05VTElCX01FTVBDUFkpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTVJDSFInJ0AvJChHTlVMSUJfTUVNUkNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkFXTUVNQ0hSJydALyQoR05VTElCX1JBV01FTUNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQQ1BZJydALyQoR05VTElCX1NUUENQWSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQTkNQWScnQC8kKEdOVUxJQl9TVFBOQ1BZKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJDSFJOVUwnJ0AvJChHTlVMSUJfU1RSQ0hSTlVMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJEVVAnJ0AvJChHTlVMSUJfU1RSRFVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJOQ0FUJydALyQoR05VTElCX1NUUk5DQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5EVVAnJ0AvJChHTlVMSUJfU1RSTkRVUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkxFTicnQC8kKEdOVUxJQl9TVFJOTEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQQlJLJydALyQoR05VTElCX1NUUlBCUkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNFUCcnQC8kKEdOVUxJQl9TVFJTRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNUUicnQC8kKEdOVUxJQl9TVFJTVFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkNBU0VTVFInJ0AvJChHTlVMSUJfU1RSQ0FTRVNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9LX1InJ0AvJChHTlVMSUJfU1RSVE9LX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SJydALyQoR05VTElCX1NUUkVSUk9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJFUlJPUl9SJydALyQoR05VTElCX1NUUkVSUk9SX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNJR05BTCcnQC8kKEdOVUxJQl9TVFJTSUdOQUwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlZFUlNDTVAnJ0AvJChHTlVMSUJfU1RSVkVSU0NNUCkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTEVOJydAfCQoR05VTElCX01CU0xFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTkxFTicnQHwkKEdOVUxJQl9NQlNOTEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDSFInJ0B8JChHTlVMSUJfTUJTQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNSQ0hSJydAfCQoR05VTElCX01CU1JDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NUUicnQHwkKEdOVUxJQl9NQlNTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NBU0VDTVAnJ0B8JChHTlVMSUJfTUJTQ0FTRUNNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0B8JChHTlVMSUJfTUJTTkNBU0VDTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1BDQVNFQ01QJydAfCQoR05VTElCX01CU1BDQVNFQ01QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDQVNFU1RSJydAfCQoR05VTElCX01CU0NBU0VTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NTUE4nJ0B8JChHTlVMSUJfTUJTQ1NQTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUEJSSycnQHwkKEdOVUxJQl9NQlNQQlJLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTUE4nJ0B8JChHTlVMSUJfTUJTU1BOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTRVAnJ0B8JChHTlVMSUJfTUJTU0VQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNUT0tfUicnQHwkKEdOVUxJQl9NQlNUT0tfUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNQ0hSJydAfCQoR05VTElCX01FTUNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNTUVNJydAfCQoR05VTElCX01FTU1FTSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNUENQWScnQHwkKEdOVUxJQl9NRU1QQ1BZKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1SQ0hSJydAfCQoR05VTElCX01FTVJDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JBV01FTUNIUicnQHwkKEdOVUxJQl9SQVdNRU1DSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUENQWScnQHwkKEdOVUxJQl9TVFBDUFkpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUE5DUFknJ0B8JChHTlVMSUJfU1RQTkNQWSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSQ0hSTlVMJydAfCQoR05VTElCX1NUUkNIUk5VTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRFVQJydAfCQoR05VTElCX1NUUkRVUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkNBVCcnQHwkKEdOVUxJQl9TVFJOQ0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJORFVQJydAfCQoR05VTElCX1NUUk5EVVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5MRU4nJ0B8JChHTlVMSUJfU1RSTkxFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSUEJSSycnQHwkKEdOVUxJQl9TVFJQQlJLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTRVAnJ0B8JChHTlVMSUJfU1RSU0VQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTVFInJ0B8JChHTlVMSUJfU1RSU1RSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJDQVNFU1RSJydAfCQoR05VTElCX1NUUkNBU0VTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPS19SJydAfCQoR05VTElCX1NUUlRPS19SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJFUlJPUicnQHwkKEdOVUxJQl9TVFJFUlJPUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRVJST1JfUicnQHwkKEdOVUxJQl9TVFJFUlJPUl9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTSUdOQUwnJ0B8JChHTlVMSUJfU1RSU0lHTkFMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJWRVJTQ01QJydAfCQoR05VTElCX1NUUlZFUlNDTVApfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RyaW5nLmluLmggfCBcCistCSAgc2VkIC1lICdzfEAnJ0hBVkVfRkZTTCcnQHwkKEhBVkVfRkZTTCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX0ZGU0xMJydAfCQoSEFWRV9GRlNMTCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX01CU0xFTicnQHwkKEhBVkVfTUJTTEVOKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0hBVkVfTUJTTEVOJydAfCQoSEFWRV9NQlNMRU4pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9NRU1DSFInJ0B8JChIQVZFX01FTUNIUil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNTUVNJydAfCQoSEFWRV9ERUNMX01FTU1FTSl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX01FTVBDUFknJ0B8JChIQVZFX01FTVBDUFkpfGcnIFwKK0BAIC05MTIsMjMgKzg1NCwyMiBAQCBzeXMvc3RhdC5oOiBzeXNfc3RhdC5pbi5oICQodG9wX2J1aWxkZGlyCisgCSQoQU1fVl9hdCkkKE1LRElSX1ApIHN5cworIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NZU19TVEFUX0gnJ0B8JChORVhUX1NZU19TVEFUX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSE1PREFUJydALyQoR05VTElCX0ZDSE1PREFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU1RBVEFUJydALyQoR05VTElCX0ZTVEFUQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZVVElNRU5TJydALyQoR05VTElCX0ZVVElNRU5TKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MQ0hNT0QnJ0AvJChHTlVMSUJfTENITU9EKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU1RBVCcnQC8kKEdOVUxJQl9MU1RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtESVJBVCcnQC8kKEdOVUxJQl9NS0RJUkFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0ZJRk8nJ0AvJChHTlVMSUJfTUtGSUZPKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0ZJRk9BVCcnQC8kKEdOVUxJQl9NS0ZJRk9BVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtOT0QnJ0AvJChHTlVMSUJfTUtOT0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LTk9EQVQnJ0AvJChHTlVMSUJfTUtOT0RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RBVCcnQC8kKEdOVUxJQl9TVEFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VVElNRU5TQVQnJ0AvJChHTlVMSUJfVVRJTUVOU0FUKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hNT0RBVCcnQHwkKEdOVUxJQl9GQ0hNT0RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNUQVRBVCcnQHwkKEdOVUxJQl9GU1RBVEFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVVRJTUVOUycnQHwkKEdOVUxJQl9GVVRJTUVOUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTENITU9EJydAfCQoR05VTElCX0xDSE1PRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTFNUQVQnJ0B8JChHTlVMSUJfTFNUQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRElSQVQnJ0B8JChHTlVMSUJfTUtESVJBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtGSUZPJydAfCQoR05VTElCX01LRklGTyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtGSUZPQVQnJ0B8JChHTlVMSUJfTUtGSUZPQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LTk9EJydAfCQoR05VTElCX01LTk9EKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS05PREFUJydAfCQoR05VTElCX01LTk9EQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUQVQnJ0B8JChHTlVMSUJfU1RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVVRJTUVOU0FUJydAfCQoR05VTElCX1VUSU1FTlNBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZDSE1PREFUJydAfCQoSEFWRV9GQ0hNT0RBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZTVEFUQVQnJ0B8JChIQVZFX0ZTVEFUQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9GVVRJTUVOUycnQHwkKEhBVkVfRlVUSU1FTlMpfGcnIFwKK0BAIC05NzEsMTYgKzkxMiwxNSBAQCBCVUlMVF9TT1VSQ0VTICs9IHRpbWUuaAorIHRpbWUuaDogdGltZS5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1RJTUVfSCcnQHwkKE5FWFRfVElNRV9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS1RJTUUnJ0AvJChHTlVMSUJfTUtUSU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9OQU5PU0xFRVAnJ0AvJChHTlVMSUJfTkFOT1NMRUVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQVElNRScnQC8kKEdOVUxJQl9TVFJQVElNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVElNRUdNJydALyQoR05VTElCX1RJTUVHTSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVElNRV9SJydALyQoR05VTElCX1RJTUVfUikvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtUSU1FJydAfCQoR05VTElCX01LVElNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTkFOT1NMRUVQJydAfCQoR05VTElCX05BTk9TTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSUFRJTUUnJ0B8JChHTlVMSUJfU1RSUFRJTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RJTUVHTScnQHwkKEdOVUxJQl9USU1FR00pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RJTUVfUicnQHwkKEdOVUxJQl9USU1FX1IpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xPQ0FMVElNRV9SJydAfCQoSEFWRV9ERUNMX0xPQ0FMVElNRV9SKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfTkFOT1NMRUVQJydAfCQoSEFWRV9OQU5PU0xFRVApfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQVElNRScnQHwkKEhBVkVfU1RSUFRJTUUpfGcnIFwKK0BAIC0xMDEzLDU2ICs5NTMsNTUgQEAgQlVJTFRfU09VUkNFUyArPSB1bmlzdGQuaAorIHVuaXN0ZC5oOiB1bmlzdGQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9VTklTVERfSCcnQHwkKE5FWFRfVU5JU1REX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NIT1dOJydALyQoR05VTElCX0NIT1dOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DTE9TRScnQC8kKEdOVUxJQl9DTE9TRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQMicnQC8kKEdOVUxJQl9EVVAyKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EVVAzJydALyQoR05VTElCX0RVUDMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0VOVklST04nJ0AvJChHTlVMSUJfRU5WSVJPTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRVVJREFDQ0VTUycnQC8kKEdOVUxJQl9FVUlEQUNDRVNTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQUNDRVNTQVQnJ0AvJChHTlVMSUJfRkFDQ0VTU0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hESVInJ0AvJChHTlVMSUJfRkNIRElSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hPV05BVCcnQC8kKEdOVUxJQl9GQ0hPV05BVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNZTkMnJ0AvJChHTlVMSUJfRlNZTkMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZUUlVOQ0FURScnQC8kKEdOVUxJQl9GVFJVTkNBVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVENXRCcnQC8kKEdOVUxJQl9HRVRDV0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0AvJChHTlVMSUJfR0VURE9NQUlOTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VURFRBQkxFU0laRScnQC8kKEdOVUxJQl9HRVREVEFCTEVTSVpFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRHUk9VUFMnJ0AvJChHTlVMSUJfR0VUR1JPVVBTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQC8kKEdOVUxJQl9HRVRIT1NUTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9HSU4nJ0AvJChHTlVMSUJfR0VUTE9HSU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPR0lOX1InJ0AvJChHTlVMSUJfR0VUTE9HSU5fUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0AvJChHTlVMSUJfR0VUUEFHRVNJWkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFVTRVJTSEVMTCcnQC8kKEdOVUxJQl9HRVRVU0VSU0hFTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dST1VQX01FTUJFUicnQC8kKEdOVUxJQl9HUk9VUF9NRU1CRVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xDSE9XTicnQC8kKEdOVUxJQl9MQ0hPV04pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xJTksnJ0AvJChHTlVMSUJfTElOSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTElOS0FUJydALyQoR05VTElCX0xJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTFNFRUsnJ0AvJChHTlVMSUJfTFNFRUspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BJUEUnJ0AvJChHTlVMSUJfUElQRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUElQRTInJ0AvJChHTlVMSUJfUElQRTIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSRUFEJydALyQoR05VTElCX1BSRUFEKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QV1JJVEUnJ0AvJChHTlVMSUJfUFdSSVRFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFEJydALyQoR05VTElCX1JFQUQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQURMSU5LJydALyQoR05VTElCX1JFQURMSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFETElOS0FUJydALyQoR05VTElCX1JFQURMSU5LQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JNRElSJydALyQoR05VTElCX1JNRElSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TTEVFUCcnQC8kKEdOVUxJQl9TTEVFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lNTElOSycnQC8kKEdOVUxJQl9TWU1MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWU1MSU5LQVQnJ0AvJChHTlVMSUJfU1lNTElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UVFlOQU1FX1InJ0AvJChHTlVMSUJfVFRZTkFNRV9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9HRVRPUFQnJ0AvJChHTlVMSUJfVU5JU1REX0hfR0VUT1BUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQC8kKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxJTksnJ0AvJChHTlVMSUJfVU5MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxJTktBVCcnQC8kKEdOVUxJQl9VTkxJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVVNMRUVQJydALyQoR05VTElCX1VTTEVFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfV1JJVEUnJ0AvJChHTlVMSUJfV1JJVEUpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NIT1dOJydAfCQoR05VTElCX0NIT1dOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DTE9TRScnQHwkKEdOVUxJQl9DTE9TRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFVQMicnQHwkKEdOVUxJQl9EVVAyKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EVVAzJydAfCQoR05VTElCX0RVUDMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0VOVklST04nJ0B8JChHTlVMSUJfRU5WSVJPTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRVVJREFDQ0VTUycnQHwkKEdOVUxJQl9FVUlEQUNDRVNTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQUNDRVNTQVQnJ0B8JChHTlVMSUJfRkFDQ0VTU0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hESVInJ0B8JChHTlVMSUJfRkNIRElSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hPV05BVCcnQHwkKEdOVUxJQl9GQ0hPV05BVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNZTkMnJ0B8JChHTlVMSUJfRlNZTkMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZUUlVOQ0FURScnQHwkKEdOVUxJQl9GVFJVTkNBVEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVENXRCcnQHwkKEdOVUxJQl9HRVRDV0QpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0B8JChHTlVMSUJfR0VURE9NQUlOTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VURFRBQkxFU0laRScnQHwkKEdOVUxJQl9HRVREVEFCTEVTSVpFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRHUk9VUFMnJ0B8JChHTlVMSUJfR0VUR1JPVVBTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQHwkKEdOVUxJQl9HRVRIT1NUTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9HSU4nJ0B8JChHTlVMSUJfR0VUTE9HSU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPR0lOX1InJ0B8JChHTlVMSUJfR0VUTE9HSU5fUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0B8JChHTlVMSUJfR0VUUEFHRVNJWkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFVTRVJTSEVMTCcnQHwkKEdOVUxJQl9HRVRVU0VSU0hFTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dST1VQX01FTUJFUicnQHwkKEdOVUxJQl9HUk9VUF9NRU1CRVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xDSE9XTicnQHwkKEdOVUxJQl9MQ0hPV04pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xJTksnJ0B8JChHTlVMSUJfTElOSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTElOS0FUJydAfCQoR05VTElCX0xJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTFNFRUsnJ0B8JChHTlVMSUJfTFNFRUspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BJUEUnJ0B8JChHTlVMSUJfUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUElQRTInJ0B8JChHTlVMSUJfUElQRTIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BSRUFEJydAfCQoR05VTElCX1BSRUFEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QV1JJVEUnJ0B8JChHTlVMSUJfUFdSSVRFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFEJydAfCQoR05VTElCX1JFQUQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQURMSU5LJydAfCQoR05VTElCX1JFQURMSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFETElOS0FUJydAfCQoR05VTElCX1JFQURMSU5LQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JNRElSJydAfCQoR05VTElCX1JNRElSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TTEVFUCcnQHwkKEdOVUxJQl9TTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lNTElOSycnQHwkKEdOVUxJQl9TWU1MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TWU1MSU5LQVQnJ0B8JChHTlVMSUJfU1lNTElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9UVFlOQU1FX1InJ0B8JChHTlVMSUJfVFRZTkFNRV9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9HRVRPUFQnJ0B8JChHTlVMSUJfVU5JU1REX0hfR0VUT1BUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQHwkKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxJTksnJ0B8JChHTlVMSUJfVU5MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxJTktBVCcnQHwkKEdOVUxJQl9VTkxJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVVNMRUVQJydAfCQoR05VTElCX1VTTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfV1JJVEUnJ0B8JChHTlVMSUJfV1JJVEUpfGcnIFwKKyAJICAgICAgPCAkKHNyY2RpcikvdW5pc3RkLmluLmggfCBcCisgCSAgc2VkIC1lICdzfEAnJ0hBVkVfQ0hPV04nJ0B8JChIQVZFX0NIT1dOKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRFVQMicnQHwkKEhBVkVfRFVQMil8ZycgXAorQEAgLTExOTgsNiArMTEzNywyNSBAQCBFWFRSQV9ESVNUICs9IHZlcmlmeS5oCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSB2ZXJpZnkKKyAKKysjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHdhcm4tb24tdXNlCisrCisrQlVJTFRfU09VUkNFUyArPSB3YXJuLW9uLXVzZS5oCisrIyBUaGUgd2Fybi1vbi11c2UuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKysjIGJ1aWxkLWF1eC93YXJuLW9uLXVzZS5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKyt3YXJuLW9uLXVzZS5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisrCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisrCXNlZCAtbiAtZSAnL14uaWZuZGVmLywkJHAnIFwKKysJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmggXAorKwkgID4gJEAtdCAmJiBcCisrCW12ICRALXQgJEAKKytNT1NUTFlDTEVBTkZJTEVTICs9IHdhcm4tb24tdXNlLmggd2Fybi1vbi11c2UuaC10CisrCisrV0FSTl9PTl9VU0VfSD13YXJuLW9uLXVzZS5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisrCisrIyMgZW5kICAgZ251bGliIG1vZHVsZSB3YXJuLW9uLXVzZQorKworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jCisgCisgbGliaWNydF9hX1NPVVJDRVMgKz0geGFsbG9jLmggeG1hbGxvYy5jIHhzdHJkdXAuYworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9wYXRobWF4LmggbGliaWNvbnYtMS4xNC9zcmNsaWIvcGF0aG1heC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9wYXRobWF4LmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9wYXRobWF4LmgJMjAxMi0wMS0wOCAwMjowNzo0MC4yMTg0ODQ0NTEgLTA4MDAKK0BAIC0xOSwyNyArMTksNiBAQAorICNpZm5kZWYgX1BBVEhNQVhfSAorICMgZGVmaW5lIF9QQVRITUFYX0gKKyAKKy0vKiBQT1NJWDoyMDA4IGRlZmluZXMgUEFUSF9NQVggdG8gYmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUsCistICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwgYnl0ZS4KKy0gICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvbGltaXRzLmguaHRtbD4KKy0gICBQQVRIX01BWCBpcyBub3QgZGVmaW5lZCBvbiBzeXN0ZW1zIHdoaWNoIGhhdmUgbm8gbGltaXQgb24gZmlsZW5hbWUgbGVuZ3RoLAorLSAgIHN1Y2ggYXMgR05VL0h1cmQuCistCistICAgVGhpcyBmaWxlIGRvZXMgKm5vdCogZGVmaW5lIFBBVEhfTUFYIGFsd2F5cy4gIFByb2dyYW1zIHRoYXQgdXNlIHRoaXMgZmlsZQorLSAgIGNhbiBoYW5kbGUgdGhlIEdOVS9IdXJkIGNhc2UgaW4gc2V2ZXJhbCB3YXlzOgorLSAgICAgLSBFaXRoZXIgd2l0aCBhIHBhY2thZ2Utd2lkZSBoYW5kbGluZywgb3Igd2l0aCBhIHBlci1maWxlIGhhbmRsaW5nLAorLSAgICAgLSBFaXRoZXIgdGhyb3VnaCBhCistICAgICAgICAgI2lmZGVmIFBBVEhfTUFYCistICAgICAgIG9yIHRocm91Z2ggYSBmYWxsYmFjayBsaWtlCistICAgICAgICAgI2lmbmRlZiBQQVRIX01BWAorLSAgICAgICAgICMgZGVmaW5lIFBBVEhfTUFYIDgxOTIKKy0gICAgICAgICAjZW5kaWYKKy0gICAgICAgb3IgdGhyb3VnaCBhIGZhbGxiYWNrIGxpa2UKKy0gICAgICAgICAjaWZuZGVmIFBBVEhfTUFYCistICAgICAgICAgIyBkZWZpbmUgUEFUSF9NQVggcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKQorLSAgICAgICAgICNlbmRpZgorLSAqLworLQorICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KK0BAIC00OCw2ICsyNywxMSBAQAorICMgIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU2CisgIyBlbmRpZgorIAorKyMgaWYgIWRlZmluZWQgUEFUSF9NQVggJiYgZGVmaW5lZCBfUENfUEFUSF9NQVggJiYgZGVmaW5lZCBIQVZFX1BBVEhDT05GCisrIyAgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgXAorKyAgICAgICAgICAgICAgICAgICAgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorKyMgZW5kaWYKKysKKyAvKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4uICAqLworICMgaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKyAjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KK0BAIC01NywxMyArNDEsOCBAQAorICMgIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisgIyBlbmRpZgorIAorLSMgaWZkZWYgX19ocHV4CistLyogT24gSFAtVVgsIFBBVEhfTUFYIGRlc2lnbmF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUsCistICAgKm5vdCogaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwgYnl0ZSwgYW5kIGlzIHNldCB0byAxMDIzLgorLSAgIEFkZGl0aW9uYWxseSwgd2hlbiBfWE9QRU5fU09VUkNFIGlzIGRlZmluZWQgdG8gNTAwIG9yIG1vcmUsIFBBVEhfTUFYIGlzCistICAgbm90IGRlZmluZWQgYXQgYWxsIGFueSBtb3JlLiAgKi8KKy0jICB1bmRlZiBQQVRIX01BWAorLSMgIGRlZmluZSBQQVRIX01BWCAxMDI0CisrIyBpZm5kZWYgUEFUSF9NQVgKKysjICBkZWZpbmUgUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCisgIyBlbmRpZgorIAorICNlbmRpZiAvKiBfUEFUSE1BWF9IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3JlbG9jd3JhcHBlci5jIGxpYmljb252LTEuMTQvc3JjbGliL3JlbG9jd3JhcHBlci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9yZWxvY3dyYXBwZXIuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3JlbG9jd3JhcHBlci5jCTIwMTItMDEtMDggMDI6MDc6NDAuMjgyNDg0NDU1IC0wODAwCitAQCAtMjksNiArMjksNyBAQAorICAgICAtPiByZWxvY2F0YWJsZQorICAgICAtPiBzZXRlbnYKKyAgICAgICAgLT4gbWFsbG9jYQorKyAgICAtPiBzdHJlcnJvcgorICAgICAtPiBjLWN0eXBlCisgCisgICAgTWFjcm9zIHRoYXQgbmVlZCB0byBiZSBzZXQgd2hpbGUgY29tcGlsaW5nIHRoaXMgZmlsZToKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2FmZS1yZWFkLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc2FmZS1yZWFkLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NhZmUtcmVhZC5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc2FmZS1yZWFkLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4yOTg0ODQ0NTUgLTA4MDAKK0BAIC0xNCwxOSArMTQsNiBAQAorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorLS8qIFNvbWUgc3lzdGVtIGNhbGxzIG1heSBiZSBpbnRlcnJ1cHRlZCBhbmQgZmFpbCB3aXRoIGVycm5vID0gRUlOVFIgaW4gdGhlCistICAgZm9sbG93aW5nIHNpdHVhdGlvbnM6CistICAgICAtIFRoZSBwcm9jZXNzIGlzIHN0b3BwZWQgYW5kIHJlc3RhcnRlZCAoc2lnbmFsIFNJR1NUT1AgYW5kIFNJR0NPTlQsIHVzZXIKKy0gICAgICAgdHlwZXMgQ3RybC1aKSBvbiBzb21lIHBsYXRmb3JtczogTWFjT1MgWC4KKy0gICAgIC0gVGhlIHByb2Nlc3MgcmVjZWl2ZXMgYSBzaWduYWwgZm9yIHdoaWNoIGEgc2lnbmFsIGhhbmRsZXIgd2FzIGluc3RhbGxlZAorLSAgICAgICB3aXRoIHNpZ2FjdGlvbigpIHdpdGggYW4gc2FfZmxhZ3MgZmllbGQgdGhhdCBkb2VzIG5vdCBjb250YWluCistICAgICAgIFNBX1JFU1RBUlQuCistICAgICAtIFRoZSBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsIGZvciB3aGljaCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBpbnN0YWxsZWQKKy0gICAgICAgd2l0aCBzaWduYWwoKSBhbmQgZm9yIHdoaWNoIG5vIGNhbGwgdG8gc2lnaW50ZXJydXB0KHNpZywwKSB3YXMgZG9uZSwKKy0gICAgICAgb24gc29tZSBwbGF0Zm9ybXM6IEFJWCwgSFAtVVgsIElSSVgsIE9TRi8xLCBTb2xhcmlzLgorLQorLSAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgcmVhZCgpIHRoYXQgaGFuZGxlcyBFSU5UUi4gICovCistCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorIAorICNpZmRlZiBfX2NwbHVzcGx1cworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zaWduYWwuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zaWduYWwuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2lnbmFsLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zaWduYWwuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjMxNDQ4NDQ1NiAtMDgwMAorQEAgLTIwLDQ5ICsyMCwyMSBAQAorICNlbmRpZgorIEBQUkFHTUFfQ09MVU1OU0AKKyAKKy0jaWYgZGVmaW5lZCBfX25lZWRfc2lnX2F0b21pY190IHx8IGRlZmluZWQgX19uZWVkX3NpZ3NldF90IHx8IGRlZmluZWQgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9IIHx8IChkZWZpbmVkIF9TSUdOQUxfSCAmJiAhZGVmaW5lZCBfX1NJWkVPRl9QVEhSRUFEX01VVEVYX1QpCistLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb246CistICAgLSBJbnNpZGUgZ2xpYmMgaGVhZGVyIGZpbGVzLgorLSAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCistICAgICA8c2lnbmFsLmg+IC0+IDx1Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorLSAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZSB3ZSBjYW5ub3QKKy0gICAgIHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLgorLSAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3aXRoIEdDQyA0LjMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworLSAgICAgPGNzaWduYWw+IC0+IDwvdXNyL2luY2x1ZGUvc2lnbmFsLmg+IC0+IDxzeXMvdWNvbnRleHQuaD4gLT4gPHNpZ25hbC5oPi4KKy0gICAgIEluIHRoaXMgc2l0dWF0aW9uLCBzb21lIG9mIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZQorLSAgICAgd2UgY2Fubm90IHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLiAgKi8KKysjaWYgZGVmaW5lZCBfX25lZWRfc2lnX2F0b21pY190IHx8IGRlZmluZWQgX19uZWVkX3NpZ3NldF90CisrLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24gaW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4gICovCisgCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9TSUdOQUxfSEAKKyAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICistCistI2RlZmluZSBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKKy0KKy0vKiBEZWZpbmUgcGlkX3QsIHVpZF90LgorLSAgIEFsc28sIG1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LgorLSAgIE9uIFNvbGFyaXMgMTAsIDxzaWduYWwuaD4gaW5jbHVkZXMgPHN5cy90eXBlcy5oPiwgd2hpY2ggZXZlbnR1YWxseSBpbmNsdWRlcworLSAgIHVzOyBzbyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gbm93LCBiZWZvcmUgdGhlIHNlY29uZCBpbmNsdXNpb24gZ3VhcmQuICAqLworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaWZuZGVmIF9HTF9TSUdOQUxfSAorIAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU0lHTkFMX0hACisgCistI3VuZGVmIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSAorLQorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKy0KKy0vKiBNYWNPUyBYIDEwLjMsIEZyZWVCU0QgNi40LCBPcGVuQlNEIDMuOCwgT1NGLzEgNC4wLCBTb2xhcmlzIDIuNiBkZWNsYXJlCistICAgcHRocmVhZF9zaWdtYXNrIGluIDxwdGhyZWFkLmg+LCBub3QgaW4gPHNpZ25hbC5oPi4KKy0gICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiovCistI2lmIChAR05VTElCX1BUSFJFQURfU0lHTUFTS0AgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorLSAgICAmJiAoKGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18pIHx8IGRlZmluZWQgX19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX09wZW5CU0RfXyB8fCBkZWZpbmVkIF9fb3NmX18gfHwgZGVmaW5lZCBfX3N1bikgXAorLSAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCistIyBpbmNsdWRlIDxwdGhyZWFkLmg+CistI2VuZGlmCisrI2lmbmRlZiBfR0xfU0lHTkFMX0gKKysjZGVmaW5lIF9HTF9TSUdOQUxfSAorIAorIC8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyAKK0BAIC03MCw2ICs0MiwxMCBAQAorIAorIC8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisgCisrLyogRGVmaW5lIHBpZF90LCB1aWRfdC4KKysgICBBbHNvLCBtaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworIC8qIE9uIEFJWCwgc2lnX2F0b21pY190IGFscmVhZHkgaW5jbHVkZXMgdm9sYXRpbGUuICBDOTkgcmVxdWlyZXMgdGhhdAorICAgICd2b2xhdGlsZSBzaWdfYXRvbWljX3QnIGlnbm9yZSB0aGUgZXh0cmEgbW9kaWZpZXIsIGJ1dCBDODkgZGlkIG5vdC4KKyAgICBIZW5jZSwgcmVkZWZpbmUgdGhpcyB0byBhIG5vbi12b2xhdGlsZSB0eXBlIGFzIG5lZWRlZC4gICovCitAQCAtMTI0LDM0ICsxMDAsNiBAQCB0eXBlZGVmIHZvaWQgKCpzaWdoYW5kbGVyX3QpIChpbnQpOworICNlbmRpZgorIAorIAorLSNpZiBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKKy0jIGlmIEBSRVBMQUNFX1BUSFJFQURfU0lHTUFTS0AKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKy0jICAgZGVmaW5lIHB0aHJlYWRfc2lnbWFzayBycGxfcHRocmVhZF9zaWdtYXNrCistIyAgZW5kaWYKKy1fR0xfRlVOQ0RFQ0xfUlBMIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy1fR0xfQ1hYQUxJQVNfUlBMIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy0jIGVsc2UKKy0jICBpZiAhQEhBVkVfUFRIUkVBRF9TSUdNQVNLQAorLV9HTF9GVU5DREVDTF9TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLSMgIGVuZGlmCistX0dMX0NYWEFMSUFTX1NZUyAocHRocmVhZF9zaWdtYXNrLCBpbnQsCistICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU1dBUk4gKHB0aHJlYWRfc2lnbWFzayk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgcHRocmVhZF9zaWdtYXNrCistIyBpZiBIQVZFX1JBV19ERUNMX1BUSFJFQURfU0lHTUFTSworLV9HTF9XQVJOX09OX1VTRSAocHRocmVhZF9zaWdtYXNrLCAicHRocmVhZF9zaWdtYXNrIGlzIG5vdCBwb3J0YWJsZSAtICIKKy0gICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwdGhyZWFkX3NpZ21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CistIyBlbmRpZgorLSNlbmRpZgorLQorLQorICNpZiBAR05VTElCX1NJR1BST0NNQVNLQAorICMgaWYgIUBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HQAorIAorQEAgLTQyMyw2ICszNzEsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHNpZ2FjdGlvbiwgInNpZ2FjdGlvbiBpCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0ggKi8KKysjZW5kaWYgLyogX0dMX1NJR05BTF9IICovCisrI2VuZGlmIC8qIF9HTF9TSUdOQUxfSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGF0LmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RhdC5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGF0LmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGF0LmMJMjAxMi0wMS0wOCAwMjowNzo0MC4zMzA0ODQ0NTcgLTA4MDAKK0BAIC0zOCw3ICszOCw2IEBAIG9yaWdfc3RhdCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdAorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlICJkb3NuYW1lLmgiCistI2luY2x1ZGUgInZlcmlmeS5oIgorIAorIC8qIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IE5BTUUgaW50byBTVC4gIFdvcmsgYXJvdW5kIGJ1Z3Mgd2l0aAorICAgIHRyYWlsaW5nIHNsYXNoZXMuICBNaW5ndyBoYXMgb3RoZXIgYnVncyAoc3VjaCBhcyBzdF9pbm8gYWx3YXlzCitAQCAtNjQsMTIgKzYzLDYgQEAgcnBsX3N0YXQgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0CisgICAgIH0KKyAjZW5kaWYgLyogUkVQTEFDRV9GVU5DX1NUQVRfRklMRSAqLworICNpZiBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIKKy0gIC8qIFRoZSBvbmx5IGtub3duIHN5c3RlbXMgd2hlcmUgUkVQTEFDRV9GVU5DX1NUQVRfRElSIGlzIG5lZWRlZCBhbHNvCistICAgICBoYXZlIGEgY29uc3RhbnQgUEFUSF9NQVguICAqLworLSMgaWZuZGVmIFBBVEhfTUFYCistIyAgZXJyb3IgIlBsZWFzZSBwb3J0IHRoaXMgcmVwbGFjZW1lbnQgdG8geW91ciBwbGF0Zm9ybSIKKy0jIGVuZGlmCistCisgICBpZiAocmVzdWx0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgeworICAgICAgIC8qIER1ZSB0byBtaW5ndydzIG9kZGl0aWVzLCB0aGVyZSBhcmUgc29tZSBkaXJlY3RvcmllcyAobGlrZQorQEAgLTg0LDcgKzc3LDYgQEAgcnBsX3N0YXQgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0CisgICAgICAgY2hhciBmaXhlZF9uYW1lW1BBVEhfTUFYICsgMV0gPSB7MH07CisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmFtZSk7CisgICAgICAgYm9vbCBjaGVja19kaXIgPSBmYWxzZTsKKy0gICAgICB2ZXJpZnkgKFBBVEhfTUFYIDw9IDQwOTYpOworICAgICAgIGlmIChQQVRIX01BWCA8PSBsZW4pCisgICAgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKyAgICAgICBlbHNlIGlmIChsZW4pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGRlZi5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGRlZi5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRkZWYuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGRlZi5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzQ2NDg0NDU4IC0wODAwCitAQCAtMzgsOSArMzgsOSBAQAorICAgIHJlbWVtYmVyIGlmIHNwZWNpYWwgaW52b2NhdGlvbiBoYXMgZXZlciBiZWVuIHVzZWQgdG8gb2J0YWluIHdpbnRfdCwKKyAgICBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gY2xlYW4gdXAgTlVMTCB5ZXQgYWdhaW4uICAqLworIAorLSMgaWYgIShkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAmJiBkZWZpbmVkIF9HTF9TVERERUZfV0lOVF9UKQorKyMgaWYgIShkZWZpbmVkIF9HTF9TVERERUZfSCAmJiBkZWZpbmVkIF9HTF9TVERERUZfV0lOVF9UKQorICMgIGlmZGVmIF9fbmVlZF93aW50X3QKKy0jICAgdW5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyAgIHVuZGVmIF9HTF9TVERERUZfSAorICMgICBkZWZpbmUgX0dMX1NURERFRl9XSU5UX1QKKyAjICBlbmRpZgorICMgIEBJTkNMVURFX05FWFRAIEBORVhUX1NURERFRl9IQAorQEAgLTQ5LDE0ICs0OSwxNCBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistIyBpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyBpZm5kZWYgX0dMX1NURERFRl9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworIAorICMgIEBJTkNMVURFX05FWFRAIEBORVhUX1NURERFRl9IQAorIAorLSMgIGlmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKy0jICAgZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAorKyMgIGlmbmRlZiBfR0xfU1REREVGX0gKKysjICAgZGVmaW5lIF9HTF9TVERERUZfSAorIAorIC8qIE9uIE5ldEJTRCA1LjAsIHRoZSBkZWZpbml0aW9uIG9mIE5VTEwgbGFja3MgcHJvcGVyIHBhcmVudGhlc2VzLiAgKi8KKyAjaWYgQFJFUExBQ0VfTlVMTEAKK0BAIC04Miw2ICs4Miw2IEBACisgIyBkZWZpbmUgd2NoYXJfdCBpbnQKKyAjZW5kaWYKKyAKKy0jICBlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggKi8KKy0jIGVuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAqLworKyMgIGVuZGlmIC8qIF9HTF9TVERERUZfSCAqLworKyMgZW5kaWYgLyogX0dMX1NURERFRl9IICovCisgI2VuZGlmIC8qIF9fbmVlZF9YWFggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW50LmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW50LmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGludC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW50LmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zNTg0ODQ0NTggLTA4MDAKK0BAIC0yMSw3ICsyMSw3IEBACisgICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC9zdGRpbnQuaC5odG1sPgorICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9ICisrI2lmbmRlZiBfR0xfU1RESU5UX0gKKyAKKyAjaWYgX19HTlVDX18gPj0gMworIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK0BAIC01MiwxMyArNTIsMTMgQEAKKyAgIC8qIE90aGVyIHN5c3RlbXMgbWF5IGhhdmUgYW4gaW5jb21wbGV0ZSBvciBidWdneSA8c3RkaW50Lmg+LgorICAgICAgSW5jbHVkZSBpdCBiZWZvcmUgPGludHR5cGVzLmg+LCBzaW5jZSBhbnkgIiNpbmNsdWRlIDxzdGRpbnQuaD4iCisgICAgICBpbiA8aW50dHlwZXMuaD4gd291bGQgcmVpbmNsdWRlIHVzLCBza2lwcGluZyBvdXIgY29udGVudHMgYmVjYXVzZQorLSAgICAgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IIGlzIGRlZmluZWQuCisrICAgICBfR0xfU1RESU5UX0ggaXMgZGVmaW5lZC4KKyAgICAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1NURElOVF9IQAorICNlbmRpZgorIAorLSNpZiAhIGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICYmICEgZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9ICisrI2lmICEgZGVmaW5lZCBfR0xfU1RESU5UX0ggJiYgISBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICisrI2RlZmluZSBfR0xfU1RESU5UX0gKKyAKKyAvKiA8c3lzL3R5cGVzLmg+IGRlZmluZXMgc29tZSBvZiB0aGUgc3RkaW50LmggdHlwZXMgYXMgd2VsbCwgb24gZ2xpYmMsCisgICAgSVJJWCA2LjUsIGFuZCBPcGVuQlNEIDMuOCAodmlhIDxtYWNoaW5lL3R5cGVzLmg+KS4KK0BAIC0yNzAsMzYgKzI3MCwyNiBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRwdHJfdDsKKyAvKiBOb3RlOiBUaGVzZSB0eXBlcyBhcmUgY29tcGlsZXIgZGVwZW5kZW50LiBJdCBtYXkgYmUgdW53aXNlIHRvIHVzZSB0aGVtIGluCisgICAgcHVibGljIGhlYWRlciBmaWxlcy4gKi8KKyAKKy0vKiBJZiB0aGUgc3lzdGVtIGRlZmluZXMgSU5UTUFYX01BWCwgYXNzdW1lIHRoYXQgaW50bWF4X3Qgd29ya3MsIGFuZAorLSAgIHNpbWlsYXJseSBmb3IgVUlOVE1BWF9NQVggYW5kIHVpbnRtYXhfdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGgKKy0gICBhc3N1bWluZyBvbmUgdHlwZSB3aGVyZSBhbm90aGVyIGlzIHVzZWQgYnkgdGhlIHN5c3RlbS4gICovCistCistI2lmbmRlZiBJTlRNQVhfTUFYCistIyB1bmRlZiBJTlRNQVhfQworLSMgdW5kZWYgaW50bWF4X3QKKy0jIGlmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKysjdW5kZWYgaW50bWF4X3QKKysjaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorIHR5cGVkZWYgbG9uZyBsb25nIGludCBnbF9pbnRtYXhfdDsKKy0jICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKy0jIGVsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCistIyAgZGVmaW5lIGludG1heF90IGludDY0X3QKKy0jIGVsc2UKKysjIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAorKyNlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorKyMgZGVmaW5lIGludG1heF90IGludDY0X3QKKysjZWxzZQorIHR5cGVkZWYgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CistIyAgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CistIyBlbmRpZgorKyMgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX01BWAorLSMgdW5kZWYgVUlOVE1BWF9DCistIyB1bmRlZiB1aW50bWF4X3QKKy0jIGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisrI3VuZGVmIHVpbnRtYXhfdAorKyNpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBnbF91aW50bWF4X3Q7CistIyAgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKy0jIGVsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorLSMgIGRlZmluZSB1aW50bWF4X3QgdWludDY0X3QKKy0jIGVsc2UKKysjIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CisrI2VsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorKyMgZGVmaW5lIHVpbnRtYXhfdCB1aW50NjRfdAorKyNlbHNlCisgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50bWF4X3Q7CistIyAgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKy0jIGVuZGlmCisrIyBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorICNlbmRpZgorIAorIC8qIFZlcmlmeSB0aGF0IGludG1heF90IGFuZCB1aW50bWF4X3QgaGF2ZSB0aGUgc2FtZSBzaXplLiAgVG9vIG11Y2ggY29kZQorQEAgLTQ0MSwyMyArNDMxLDIxIEBAIHR5cGVkZWYgaW50IF92ZXJpZnlfaW50bWF4X3NpemVbc2l6ZW9mICgKKyAKKyAvKiA3LjE4LjIuNS4gTGltaXRzIG9mIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKyAKKy0jaWZuZGVmIElOVE1BWF9NQVgKKy0jIHVuZGVmIElOVE1BWF9NSU4KKy0jIGlmZGVmIElOVDY0X01BWAorLSMgIGRlZmluZSBJTlRNQVhfTUlOICBJTlQ2NF9NSU4KKy0jICBkZWZpbmUgSU5UTUFYX01BWCAgSU5UNjRfTUFYCistIyBlbHNlCistIyAgZGVmaW5lIElOVE1BWF9NSU4gIElOVDMyX01JTgorLSMgIGRlZmluZSBJTlRNQVhfTUFYICBJTlQzMl9NQVgKKy0jIGVuZGlmCisrI3VuZGVmIElOVE1BWF9NSU4KKysjdW5kZWYgSU5UTUFYX01BWAorKyNpZmRlZiBJTlQ2NF9NQVgKKysjIGRlZmluZSBJTlRNQVhfTUlOICBJTlQ2NF9NSU4KKysjIGRlZmluZSBJTlRNQVhfTUFYICBJTlQ2NF9NQVgKKysjZWxzZQorKyMgZGVmaW5lIElOVE1BWF9NSU4gIElOVDMyX01JTgorKyMgZGVmaW5lIElOVE1BWF9NQVggIElOVDMyX01BWAorICNlbmRpZgorIAorLSNpZm5kZWYgVUlOVE1BWF9NQVgKKy0jIGlmZGVmIFVJTlQ2NF9NQVgKKy0jICBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQ2NF9NQVgKKy0jIGVsc2UKKy0jICBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQzMl9NQVgKKy0jIGVuZGlmCisrI3VuZGVmIFVJTlRNQVhfTUFYCisrI2lmZGVmIFVJTlQ2NF9NQVgKKysjIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDY0X01BWAorKyNlbHNlCisrIyBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQzMl9NQVgKKyAjZW5kaWYKKyAKKyAvKiA3LjE4LjMuIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzICovCitAQCAtNTgwLDI3ICs1NjgsMjUgQEAgdHlwZWRlZiBpbnQgX3ZlcmlmeV9pbnRtYXhfc2l6ZVtzaXplb2YgKAorIAorIC8qIDcuMTguNC4yLiBNYWNyb3MgZm9yIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgY29uc3RhbnRzICovCisgCistI2lmbmRlZiBJTlRNQVhfQworLSMgaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCistIyBlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIElOVDY0X0MoeCkKKy0jIGVsc2UKKy0jICBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMCistIyBlbmRpZgorKyN1bmRlZiBJTlRNQVhfQworKyNpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMTAorKyNlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgSU5UNjRfQyh4KQorKyNlbHNlCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMCisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX0MKKy0jIGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCistIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUxMCistIyBlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKy0jICBkZWZpbmUgVUlOVE1BWF9DKHgpICBVSU5UNjRfQyh4KQorLSMgZWxzZQorLSMgIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMCistIyBlbmRpZgorKyN1bmRlZiBVSU5UTUFYX0MKKysjaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMTAorKyNlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIFVJTlQ2NF9DKHgpCisrI2Vsc2UKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMCisgI2VuZGlmCisgCisgI2VuZGlmIC8qICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAqLworIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggKi8KKy0jZW5kaWYgLyogIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9IICovCisrI2VuZGlmIC8qIF9HTF9TVERJTlRfSCAqLworKyNlbmRpZiAvKiAhZGVmaW5lZCBfR0xfU1RESU5UX0ggJiYgIWRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW8uaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpby5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpby5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW8uaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM3ODQ4NDQ1OSAtMDgwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElPX0gKKysjaWZuZGVmIF9HTF9TVERJT19ICisgCisgI2RlZmluZSBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorIAorQEAgLTQ0LDggKzQ0LDggQEAKKyAKKyAjdW5kZWYgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NURElPX0gKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSAorKyNpZm5kZWYgX0dMX1NURElPX0gKKysjZGVmaW5lIF9HTF9TVERJT19ICisgCisgLyogR2V0IHZhX2xpc3QuICBOZWVkZWQgb24gbWFueSBzeXN0ZW1zLCBpbmNsdWRpbmcgZ2xpYmMgMi44LiAgKi8KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CitAQCAtNDYxLDYgKzQ2MSwyNSBAQCBfR0xfRlVOQ0RFQ0xfU1lTIChmc2Vla28sIGludCwgKEZJTEUgKmZwCisgX0dMX0NYWEFMSUFTX1NZUyAoZnNlZWtvLCBpbnQsIChGSUxFICpmcCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CisgIyBlbmRpZgorIF9HTF9DWFhBTElBU1dBUk4gKGZzZWVrbyk7CisrIyBpZiAoQFJFUExBQ0VfRlNFRUtPQCB8fCAhQEhBVkVfRlNFRUtPQCkgJiYgIUBHTlVMSUJfRlNFRUtACisrICAgLyogUHJvdmlkZSBhbiBmc2VlayBmdW5jdGlvbiB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aCBmc2Vla28uICAqLworKyAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIHRoYXQgZnNlZWsgZ2V0cyBkZWZpbmVkIGFzIGEgbWFjcm8gaGVyZSwgdGhlCisrICAgICAgZGV2ZWxvcGVyIGNhbiByZXF1ZXN0IHRoZSAnZnNlZWsnIG1vZHVsZS4gICovCisrIyAgaWYgIUdOVUxJQl9kZWZpbmVkX2ZzZWVrX2Z1bmN0aW9uCisrIyAgIHVuZGVmIGZzZWVrCisrIyAgIGRlZmluZSBmc2VlayBycGxfZnNlZWsKKytzdGF0aWMgaW5saW5lIGludCBfR0xfQVJHX05PTk5VTEwgKCgxKSkKKytycGxfZnNlZWsgKEZJTEUgKmZwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKKyt7CisrIyAgIGlmIEBSRVBMQUNFX0ZTRUVLT0AKKysgIHJldHVybiBycGxfZnNlZWtvIChmcCwgb2Zmc2V0LCB3aGVuY2UpOworKyMgICBlbHNlCisrICByZXR1cm4gZnNlZWtvIChmcCwgb2Zmc2V0LCB3aGVuY2UpOworKyMgICBlbmRpZgorK30KKysjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2ZzZWVrX2Z1bmN0aW9uIDEKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgIyBkZWZpbmUgX0dMX0ZTRUVLX1dBUk4gLyogQ2F0ZWdvcnkgMSwgYWJvdmUuICAqLworICMgdW5kZWYgZnNlZWsKK0BAIC01MjAsNiArNTM5LDI1IEBAIF9HTF9GVU5DREVDTF9TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICoKKyBfR0xfQ1hYQUxJQVNfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZnRlbGxvKTsKKysjIGlmIChAUkVQTEFDRV9GVEVMTE9AIHx8ICFASEFWRV9GVEVMTE9AKSAmJiAhQEdOVUxJQl9GVEVMTEAKKysgICAvKiBQcm92aWRlIGFuIGZ0ZWxsIGZ1bmN0aW9uIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGZ0ZWxsby4gICovCisrICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgdGhhdCBmdGVsbCBnZXRzIGRlZmluZWQgYXMgYSBtYWNybyBoZXJlLCB0aGUKKysgICAgICBkZXZlbG9wZXIgY2FuIHJlcXVlc3QgdGhlICdmdGVsbCcgbW9kdWxlLiAgKi8KKysjICBpZiAhR05VTElCX2RlZmluZWRfZnRlbGxfZnVuY3Rpb24KKysjICAgdW5kZWYgZnRlbGwKKysjICAgZGVmaW5lIGZ0ZWxsIHJwbF9mdGVsbAorK3N0YXRpYyBpbmxpbmUgbG9uZyBfR0xfQVJHX05PTk5VTEwgKCgxKSkKKytycGxfZnRlbGwgKEZJTEUgKmYpCisreworKyMgICBpZiBAUkVQTEFDRV9GVEVMTE9ACisrICByZXR1cm4gcnBsX2Z0ZWxsbyAoZik7CisrIyAgIGVsc2UKKysgIHJldHVybiBmdGVsbG8gKGYpOworKyMgICBlbmRpZgorK30KKysjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2Z0ZWxsX2Z1bmN0aW9uIDEKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgIyBkZWZpbmUgX0dMX0ZURUxMX1dBUk4gLyogQ2F0ZWdvcnkgMSwgYWJvdmUuICAqLworICMgdW5kZWYgZnRlbGwKK0BAIC0xMzA3LDYgKzEzNDUsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHZzcHJpbnRmLCAidnNwcmludGYgaXMKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElPX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElPX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkbGliLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkbGliLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGxpYi5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkbGliLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zOTA0ODQ0NTkgLTA4MDAKK0BAIC0yOCwxMyArMjgsMTMgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICisrI2lmbmRlZiBfR0xfU1RETElCX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NURExJQl9IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKysjaWZuZGVmIF9HTF9TVERMSUJfSAorKyNkZWZpbmUgX0dMX1NURExJQl9ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtODksNyArODksMTEgQEAgc3RydWN0IHJhbmRvbV9kYXRhCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0vKiBUaGUgZGVmaW5pdGlvbiBvZiBfTm9yZXR1cm4gaXMgY29waWVkIGhlcmUuICAqLworKyNpZiAzIDw9IF9fR05VQ19fIHx8IF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXworKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfTk9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQVRUUklCVVRFX05PUkVUVVJOCisrI2VuZGlmCisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTExNiw3ICsxMjAsNyBAQCBzdHJ1Y3QgcmFuZG9tX2RhdGEKKyAvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiByZXR1cm4gY29kZSwgd2l0aG91dCBydW5uaW5nCisgICAgdGhlICdhdGV4aXQnIGhhbmRsZXJzLiAgKi8KKyAjIGlmICFASEFWRV9fRVhJVEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChfRXhpdCwgX05vcmV0dXJuIHZvaWQsIChpbnQgc3RhdHVzKSk7CisrX0dMX0ZVTkNERUNMX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSBfR0xfQVRUUklCVVRFX05PUkVUVVJOKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSk7CisgX0dMX0NYWEFMSUFTV0FSTiAoX0V4aXQpOworQEAgLTc1Nyw2ICs3NjEsNiBAQCBfR0xfQ1hYQUxJQVNXQVJOICh3Y3RvbWIpOworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURExJQl9IICovCisrI2VuZGlmIC8qIF9HTF9TVERMSUJfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RETElCX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3IuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3IuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjQwNjQ4NDQ2MSAtMDgwMAorQEAgLTE3LDU0ICsxNywzNDAgQEAKKyAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgCistLyogU3BlY2lmaWNhdGlvbi4gICovCisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmIFJFUExBQ0VfU1RSRVJST1IKKysKKysjIGluY2x1ZGUgPGVycm5vLmg+CisrIyBpbmNsdWRlIDxzdGRpby5oPgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCisrIyAgaWYgSEFWRV9XSU5TT0NLMl9ICisrIyAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisrIyAgZW5kaWYKKysjIGVuZGlmCisgCistI2luY2x1ZGUgImludHByb3BzLmgiCistI2luY2x1ZGUgInN0cmVycm9yLW92ZXJyaWRlLmgiCistI2luY2x1ZGUgInZlcmlmeS5oIgorKyMgaW5jbHVkZSAiaW50cHJvcHMuaCIKKyAKKyAvKiBVc2UgdGhlIHN5c3RlbSBmdW5jdGlvbnMsIG5vdCB0aGUgZ251bGliIG92ZXJyaWRlcyBpbiB0aGlzIGZpbGUuICAqLworLSN1bmRlZiBzcHJpbnRmCisrIyB1bmRlZiBzcHJpbnRmCisrCisrIyB1bmRlZiBzdHJlcnJvcgorKyMgaWYgISBIQVZFX0RFQ0xfU1RSRVJST1IKKysjICBkZWZpbmUgc3RyZXJyb3IobikgTlVMTAorKyMgZW5kaWYKKyAKKyBjaGFyICoKKy1zdHJlcnJvciAoaW50IG4pCistI3VuZGVmIHN0cmVycm9yCisrcnBsX3N0cmVycm9yIChpbnQgbikKKyB7CistICBzdGF0aWMgY2hhciBidWZbU1RBQ0tCVUZfTEVOXTsKKy0gIHNpemVfdCBsZW47CisrICBjaGFyIGNvbnN0ICptc2cgPSBOVUxMOworKyAgLyogVGhlc2UgZXJyb3IgbWVzc2FnZXMgYXJlIHRha2VuIGZyb20gZ2xpYmMvc3lzZGVwcy9nbnUvZXJybGlzdC5jLiAgKi8KKysgIHN3aXRjaCAobikKKysgICAgeworKyMgaWYgR05VTElCX2RlZmluZWRfRVRYVEJTWQorKyAgICBjYXNlIEVUWFRCU1k6CisrICAgICAgbXNnID0gIlRleHQgZmlsZSBidXN5IjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKysgICAgLyogRVdPVUxEQkxPQ0sgaXMgdGhlIHNhbWUgYXMgRUFHQUlOLiAgKi8KKysgICAgY2FzZSBFSU5QUk9HUkVTUzoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFMUkVBRFk6CisrICAgICAgbXNnID0gIk9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9UU09DSzoKKysgICAgICBtc2cgPSAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFREVTVEFERFJSRVE6CisrICAgICAgbXNnID0gIkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNU0dTSVpFOgorKyAgICAgIG1zZyA9ICJNZXNzYWdlIHRvbyBsb25nIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPVE9UWVBFOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT1BST1RPT1BUOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBub3QgYXZhaWxhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPVE9OT1NVUFBPUlQ6CisrICAgICAgbXNnID0gIlByb3RvY29sIG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTT0NLVE5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU9QTk9UU1VQUDoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQRk5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVBRk5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFERFJJTlVTRToKKysgICAgICBtc2cgPSAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFERFJOT1RBVkFJTDoKKysgICAgICBtc2cgPSAiQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVERPV046CisrICAgICAgbXNnID0gIk5ldHdvcmsgaXMgZG93biI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVFVOUkVBQ0g6CisrICAgICAgbXNnID0gIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVORVRSRVNFVDoKKysgICAgICBtc2cgPSAiTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OQUJPUlRFRDoKKysgICAgICBtc2cgPSAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OUkVTRVQ6CisrICAgICAgbXNnID0gIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5PQlVGUzoKKysgICAgICBtc2cgPSAiTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUlTQ09OTjoKKysgICAgICBtc2cgPSAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9UQ09OTjoKKysgICAgICBtc2cgPSAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTSFVURE9XTjoKKysgICAgICBtc2cgPSAiQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFVE9PTUFOWVJFRlM6CisrICAgICAgbXNnID0gIlRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVUSU1FRE9VVDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OUkVGVVNFRDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiByZWZ1c2VkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTE9PUDoKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFSE9TVERPV046CisrICAgICAgbXNnID0gIkhvc3QgaXMgZG93biI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUhPU1RVTlJFQUNIOgorKyAgICAgIG1zZyA9ICJObyByb3V0ZSB0byBob3N0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPQ0xJTToKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgcHJvY2Vzc2VzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFVVNFUlM6CisrICAgICAgbXNnID0gIlRvbyBtYW55IHVzZXJzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFRFFVT1Q6CisrICAgICAgbXNnID0gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTVEFMRToKKysgICAgICBtc2cgPSAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUkVNT1RFOgorKyAgICAgIG1zZyA9ICJPYmplY3QgaXMgcmVtb3RlIjsKKysgICAgICBicmVhazsKKysjICBpZiBIQVZFX1dJTlNPQ0syX0gKKysgICAgLyogV1NBX0lOVkFMSURfSEFORExFIG1hcHMgdG8gRUJBREYgKi8KKysgICAgLyogV1NBX05PVF9FTk9VR0hfTUVNT1JZIG1hcHMgdG8gRU5PTUVNICovCisrICAgIC8qIFdTQV9JTlZBTElEX1BBUkFNRVRFUiBtYXBzIHRvIEVJTlZBTCAqLworKyAgICBjYXNlIFdTQV9PUEVSQVRJT05fQUJPUlRFRDoKKysgICAgICBtc2cgPSAiT3ZlcmxhcHBlZCBvcGVyYXRpb24gYWJvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBX0lPX0lOQ09NUExFVEU6CisrICAgICAgbXNnID0gIk92ZXJsYXBwZWQgSS9PIGV2ZW50IG9iamVjdCBub3QgaW4gc2lnbmFsZWQgc3RhdGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQV9JT19QRU5ESU5HOgorKyAgICAgIG1zZyA9ICJPdmVybGFwcGVkIG9wZXJhdGlvbnMgd2lsbCBjb21wbGV0ZSBsYXRlciI7CisrICAgICAgYnJlYWs7CisrICAgIC8qIFdTQUVJTlRSIG1hcHMgdG8gRUlOVFIgKi8KKysgICAgLyogV1NBRUJBREYgbWFwcyB0byBFQkFERiAqLworKyAgICAvKiBXU0FFQUNDRVMgbWFwcyB0byBFQUNDRVMgKi8KKysgICAgLyogV1NBRUZBVUxUIG1hcHMgdG8gRUZBVUxUICovCisrICAgIC8qIFdTQUVJTlZBTCBtYXBzIHRvIEVJTlZBTCAqLworKyAgICAvKiBXU0FFTUZJTEUgbWFwcyB0byBFTUZJTEUgKi8KKysgICAgLyogV1NBRVdPVUxEQkxPQ0sgbWFwcyB0byBFV09VTERCTE9DSyAqLworKyAgICAvKiBXU0FFSU5QUk9HUkVTUyBpcyBFSU5QUk9HUkVTUyAqLworKyAgICAvKiBXU0FFQUxSRUFEWSBpcyBFQUxSRUFEWSAqLworKyAgICAvKiBXU0FFTk9UU09DSyBpcyBFTk9UU09DSyAqLworKyAgICAvKiBXU0FFREVTVEFERFJSRVEgaXMgRURFU1RBRERSUkVRICovCisrICAgIC8qIFdTQUVNU0dTSVpFIGlzIEVNU0dTSVpFICovCisrICAgIC8qIFdTQUVQUk9UT1RZUEUgaXMgRVBST1RPVFlQRSAqLworKyAgICAvKiBXU0FFTk9QUk9UT09QVCBpcyBFTk9QUk9UT09QVCAqLworKyAgICAvKiBXU0FFUFJPVE9OT1NVUFBPUlQgaXMgRVBST1RPTk9TVVBQT1JUICovCisrICAgIC8qIFdTQUVTT0NLVE5PU1VQUE9SVCBpcyBFU09DS1ROT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRU9QTk9UU1VQUCBpcyBFT1BOT1RTVVBQICovCisrICAgIC8qIFdTQUVQRk5PU1VQUE9SVCBpcyBFUEZOT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRUFGTk9TVVBQT1JUIGlzIEVBRk5PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFQUREUklOVVNFIGlzIEVBRERSSU5VU0UgKi8KKysgICAgLyogV1NBRUFERFJOT1RBVkFJTCBpcyBFQUREUk5PVEFWQUlMICovCisrICAgIC8qIFdTQUVORVRET1dOIGlzIEVORVRET1dOICovCisrICAgIC8qIFdTQUVORVRVTlJFQUNIIGlzIEVORVRVTlJFQUNIICovCisrICAgIC8qIFdTQUVORVRSRVNFVCBpcyBFTkVUUkVTRVQgKi8KKysgICAgLyogV1NBRUNPTk5BQk9SVEVEIGlzIEVDT05OQUJPUlRFRCAqLworKyAgICAvKiBXU0FFQ09OTlJFU0VUIGlzIEVDT05OUkVTRVQgKi8KKysgICAgLyogV1NBRU5PQlVGUyBpcyBFTk9CVUZTICovCisrICAgIC8qIFdTQUVJU0NPTk4gaXMgRUlTQ09OTiAqLworKyAgICAvKiBXU0FFTk9UQ09OTiBpcyBFTk9UQ09OTiAqLworKyAgICAvKiBXU0FFU0hVVERPV04gaXMgRVNIVVRET1dOICovCisrICAgIC8qIFdTQUVUT09NQU5ZUkVGUyBpcyBFVE9PTUFOWVJFRlMgKi8KKysgICAgLyogV1NBRVRJTUVET1VUIGlzIEVUSU1FRE9VVCAqLworKyAgICAvKiBXU0FFQ09OTlJFRlVTRUQgaXMgRUNPTk5SRUZVU0VEICovCisrICAgIC8qIFdTQUVMT09QIGlzIEVMT09QICovCisrICAgIC8qIFdTQUVOQU1FVE9PTE9ORyBtYXBzIHRvIEVOQU1FVE9PTE9ORyAqLworKyAgICAvKiBXU0FFSE9TVERPV04gaXMgRUhPU1RET1dOICovCisrICAgIC8qIFdTQUVIT1NUVU5SRUFDSCBpcyBFSE9TVFVOUkVBQ0ggKi8KKysgICAgLyogV1NBRU5PVEVNUFRZIG1hcHMgdG8gRU5PVEVNUFRZICovCisrICAgIC8qIFdTQUVQUk9DTElNIGlzIEVQUk9DTElNICovCisrICAgIC8qIFdTQUVVU0VSUyBpcyBFVVNFUlMgKi8KKysgICAgLyogV1NBRURRVU9UIGlzIEVEUVVPVCAqLworKyAgICAvKiBXU0FFU1RBTEUgaXMgRVNUQUxFICovCisrICAgIC8qIFdTQUVSRU1PVEUgaXMgRVJFTU9URSAqLworKyAgICBjYXNlIFdTQVNZU05PVFJFQURZOgorKyAgICAgIG1zZyA9ICJOZXR3b3JrIHN1YnN5c3RlbSBpcyB1bmF2YWlsYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorKyAgICAgIG1zZyA9ICJXaW5zb2NrLmRsbCB2ZXJzaW9uIG91dCBvZiByYW5nZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBTk9USU5JVElBTElTRUQ6CisrICAgICAgbXNnID0gIlN1Y2Nlc3NmdWwgV1NBU3RhcnR1cCBub3QgeWV0IHBlcmZvcm1lZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRURJU0NPTjoKKysgICAgICBtc2cgPSAiR3JhY2VmdWwgc2h1dGRvd24gaW4gcHJvZ3Jlc3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVOT01PUkU6IGNhc2UgV1NBX0VfTk9fTU9SRToKKysgICAgICBtc2cgPSAiTm8gbW9yZSByZXN1bHRzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFQ0FOQ0VMTEVEOiBjYXNlIFdTQV9FX0NBTkNFTExFRDoKKysgICAgICBtc2cgPSAiQ2FsbCB3YXMgY2FuY2VsZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVJTlZBTElEUFJPQ1RBQkxFOgorKyAgICAgIG1zZyA9ICJQcm9jZWR1cmUgY2FsbCB0YWJsZSBpcyBpbnZhbGlkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFSU5WQUxJRFBST1ZJREVSOgorKyAgICAgIG1zZyA9ICJTZXJ2aWNlIHByb3ZpZGVyIGlzIGludmFsaWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVQUk9WSURFUkZBSUxFRElOSVQ6CisrICAgICAgbXNnID0gIlNlcnZpY2UgcHJvdmlkZXIgZmFpbGVkIHRvIGluaXRpYWxpemUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVNZU0NBTExGQUlMVVJFOgorKyAgICAgIG1zZyA9ICJTeXN0ZW0gY2FsbCBmYWlsdXJlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FTRVJWSUNFX05PVF9GT1VORDoKKysgICAgICBtc2cgPSAiU2VydmljZSBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVRZUEVfTk9UX0ZPVU5EOgorKyAgICAgIG1zZyA9ICJDbGFzcyB0eXBlIG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRVJFRlVTRUQ6CisrICAgICAgbXNnID0gIkRhdGFiYXNlIHF1ZXJ5IHdhcyByZWZ1c2VkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FIT1NUX05PVF9GT1VORDoKKysgICAgICBtc2cgPSAiSG9zdCBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVRSWV9BR0FJTjoKKysgICAgICBtc2cgPSAiTm9uYXV0aG9yaXRhdGl2ZSBob3N0IG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBTk9fUkVDT1ZFUlk6CisrICAgICAgbXNnID0gIk5vbnJlY292ZXJhYmxlIGVycm9yIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FOT19EQVRBOgorKyAgICAgIG1zZyA9ICJWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSI7CisrICAgICAgYnJlYWs7CisrICAgIC8qIFdTQV9RT1NfKiBvbWl0dGVkICovCisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FTk9NU0cKKysgICAgY2FzZSBFTk9NU0c6CisrICAgICAgbXNnID0gIk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FSURSTQorKyAgICBjYXNlIEVJRFJNOgorKyAgICAgIG1zZyA9ICJJZGVudGlmaWVyIHJlbW92ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksKKysgICAgY2FzZSBFTk9MSU5LOgorKyAgICAgIG1zZyA9ICJMaW5rIGhhcyBiZWVuIHNldmVyZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VQUk9UTworKyAgICBjYXNlIEVQUk9UTzoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgZXJyb3IiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUAorKyAgICBjYXNlIEVNVUxUSUhPUDoKKysgICAgICBtc2cgPSAiTXVsdGlob3AgYXR0ZW1wdGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FQkFETVNHCisrICAgIGNhc2UgRUJBRE1TRzoKKysgICAgICBtc2cgPSAiQmFkIG1lc3NhZ2UiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVworKyAgICBjYXNlIEVPVkVSRkxPVzoKKysgICAgICBtc2cgPSAiVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU5PVFNVUAorKyAgICBjYXNlIEVOT1RTVVA6CisrICAgICAgbXNnID0gIk5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VTVEFMRQorKyAgICBjYXNlIEVTVEFMRToKKysgICAgICBtc2cgPSAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FRFFVT1QKKysgICAgY2FzZSBFRFFVT1Q6CisrICAgICAgbXNnID0gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorKyAgICBjYXNlIEVDQU5DRUxFRDoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIGNhbmNlbGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrICAgIH0KKyAKKy0gIC8qIENhc3QgYXdheSBjb25zdCwgZHVlIHRvIHRoZSBoaXN0b3JpY2FsIHNpZ25hdHVyZSBvZiBzdHJlcnJvcjsKKy0gICAgIGNhbGxlcnMgc2hvdWxkIG5vdCBiZSBtb2RpZnlpbmcgdGhlIHN0cmluZy4gICovCistICBjb25zdCBjaGFyICptc2cgPSBzdHJlcnJvcl9vdmVycmlkZSAobik7CisgICBpZiAobXNnKQorICAgICByZXR1cm4gKGNoYXIgKikgbXNnOworIAorLSAgbXNnID0gc3RyZXJyb3IgKG4pOworKyAgeworKyAgICBjaGFyICpyZXN1bHQgPSBzdHJlcnJvciAobik7CisgCistICAvKiBPdXIgc3RyZXJyb3JfciBpbXBsZW1lbnRhdGlvbiBtaWdodCB1c2UgdGhlIHN5c3RlbSdzIHN0cmVycm9yCistICAgICBidWZmZXIsIHNvIGFsbCBvdGhlciBjbGllbnRzIG9mIHN0cmVycm9yIGhhdmUgdG8gc2VlIHRoZSBlcnJvcgorLSAgICAgY29waWVkIGludG8gYSBidWZmZXIgdGhhdCB3ZSBtYW5hZ2UuICBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwKKy0gICAgIGV2ZW4gaWYgdGhlIHN5c3RlbSBzdHJlcnJvciBpcywgYnV0IHBvcnRhYmxlIHByb2dyYW1zIHNob3VsZG4ndAorLSAgICAgYmUgdXNpbmcgc3RyZXJyb3IgaWYgdGhleSBjYXJlIGFib3V0IHRocmVhZC1zYWZldHkuICAqLworLSAgaWYgKCFtc2cgfHwgISptc2cpCistICAgIHsKKy0gICAgICBzdGF0aWMgY2hhciBjb25zdCBmbXRbXSA9ICJVbmtub3duIGVycm9yICVkIjsKKy0gICAgICB2ZXJpZnkgKHNpemVvZiBidWYgPj0gc2l6ZW9mIChmbXQpICsgSU5UX1NUUkxFTl9CT1VORCAobikpOworLSAgICAgIHNwcmludGYgKGJ1ZiwgZm10LCBuKTsKKy0gICAgICBlcnJubyA9IEVJTlZBTDsKKy0gICAgICByZXR1cm4gYnVmOworLSAgICB9CisrICAgIGlmIChyZXN1bHQgPT0gTlVMTCB8fCByZXN1bHRbMF0gPT0gJ1wwJykKKysgICAgICB7CisrICAgICAgICBzdGF0aWMgY2hhciBjb25zdCBmbXRbXSA9ICJVbmtub3duIGVycm9yICglZCkiOworKyAgICAgICAgc3RhdGljIGNoYXIgbXNnX2J1ZltzaXplb2YgZm10ICsgSU5UX1NUUkxFTl9CT1VORCAobildOworKyAgICAgICAgc3ByaW50ZiAobXNnX2J1ZiwgZm10LCBuKTsKKysgICAgICAgIHJldHVybiBtc2dfYnVmOworKyAgICAgIH0KKyAKKy0gIC8qIEZpeCBTVEFDS0JVRl9MRU4gaWYgdGhpcyBldmVyIGFib3J0cy4gICovCistICBsZW4gPSBzdHJsZW4gKG1zZyk7CistICBpZiAoc2l6ZW9mIGJ1ZiA8PSBsZW4pCistICAgIGFib3J0ICgpOworLQorLSAgcmV0dXJuIG1lbWNweSAoYnVmLCBtc2csIGxlbiArIDEpOworKyAgICByZXR1cm4gcmVzdWx0OworKyAgfQorIH0KKysKKysjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjc5ICswLDAgQEAKKy0vKiBzdHJlcnJvci1vdmVycmlkZS5jIC0tLSBQT1NJWCBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCistCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLS8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDEwLiAgKi8KKy0KKy0jaW5jbHVkZSA8Y29uZmlnLmg+CistCistI2luY2x1ZGUgInN0cmVycm9yLW92ZXJyaWRlLmgiCistCistI2luY2x1ZGUgPGVycm5vLmg+CistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLworLSMgaWYgSEFWRV9XSU5TT0NLMl9ICistIyAgaW5jbHVkZSA8d2luc29jazIuaD4KKy0jIGVuZGlmCistI2VuZGlmCistCistLyogSWYgRVJSTlVNIG1hcHMgdG8gYW4gZXJybm8gdmFsdWUgZGVmaW5lZCBieSBnbnVsaWIsIHJldHVybiBhIHN0cmluZworLSAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKy1jb25zdCBjaGFyICoKKy1zdHJlcnJvcl9vdmVycmlkZSAoaW50IGVycm51bSkKKy17CistICAvKiBUaGVzZSBlcnJvciBtZXNzYWdlcyBhcmUgdGFrZW4gZnJvbSBnbGliYy9zeXNkZXBzL2dudS9lcnJsaXN0LmMuICAqLworLSAgc3dpdGNoIChlcnJudW0pCistICAgIHsKKy0jaWYgUkVQTEFDRV9TVFJFUlJPUl8wCistICAgIGNhc2UgMDoKKy0gICAgICByZXR1cm4gIlN1Y2Nlc3MiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZCistICAgIGNhc2UgRVRYVEJTWToKKy0gICAgICByZXR1cm4gIlRleHQgZmlsZSBidXN5IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCistICAgICAgLyogRVdPVUxEQkxPQ0sgaXMgdGhlIHNhbWUgYXMgRUFHQUlOLiAgKi8KKy0gICAgY2FzZSBFSU5QUk9HUkVTUzoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIEVBTFJFQURZOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIEVOT1RTT0NLOgorLSAgICAgIHJldHVybiAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IjsKKy0gICAgY2FzZSBFREVTVEFERFJSRVE6CistICAgICAgcmV0dXJuICJEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkIjsKKy0gICAgY2FzZSBFTVNHU0laRToKKy0gICAgICByZXR1cm4gIk1lc3NhZ2UgdG9vIGxvbmciOworLSAgICBjYXNlIEVQUk9UT1RZUEU6CistICAgICAgcmV0dXJuICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiOworLSAgICBjYXNlIEVOT1BST1RPT1BUOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgbm90IGF2YWlsYWJsZSI7CistICAgIGNhc2UgRVBST1RPTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRVNPQ0tUTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRU9QTk9UU1VQUDoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFUEZOT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRUFGTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCI7CistICAgIGNhc2UgRUFERFJJTlVTRToKKy0gICAgICByZXR1cm4gIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiOworLSAgICBjYXNlIEVBRERSTk9UQVZBSUw6CistICAgICAgcmV0dXJuICJDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzIjsKKy0gICAgY2FzZSBFTkVURE9XTjoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgaXMgZG93biI7CistICAgIGNhc2UgRU5FVFVOUkVBQ0g6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGlzIHVucmVhY2hhYmxlIjsKKy0gICAgY2FzZSBFTkVUUkVTRVQ6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CistICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorLSAgICAgIHJldHVybiAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworLSAgICBjYXNlIEVDT05OUkVTRVQ6CistICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiOworLSAgICBjYXNlIEVOT0JVRlM6CistICAgICAgcmV0dXJuICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIjsKKy0gICAgY2FzZSBFSVNDT05OOgorLSAgICAgIHJldHVybiAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIjsKKy0gICAgY2FzZSBFTk9UQ09OTjoKKy0gICAgICByZXR1cm4gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkIjsKKy0gICAgY2FzZSBFU0hVVERPV046CistICAgICAgcmV0dXJuICJDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iOworLSAgICBjYXNlIEVUT09NQU5ZUkVGUzoKKy0gICAgICByZXR1cm4gIlRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UiOworLSAgICBjYXNlIEVUSU1FRE9VVDoKKy0gICAgICByZXR1cm4gIkNvbm5lY3Rpb24gdGltZWQgb3V0IjsKKy0gICAgY2FzZSBFQ09OTlJFRlVTRUQ6CistICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlZnVzZWQiOworLSAgICBjYXNlIEVMT09QOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzIjsKKy0gICAgY2FzZSBFSE9TVERPV046CistICAgICAgcmV0dXJuICJIb3N0IGlzIGRvd24iOworLSAgICBjYXNlIEVIT1NUVU5SRUFDSDoKKy0gICAgICByZXR1cm4gIk5vIHJvdXRlIHRvIGhvc3QiOworLSAgICBjYXNlIEVQUk9DTElNOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgcHJvY2Vzc2VzIjsKKy0gICAgY2FzZSBFVVNFUlM6CistICAgICAgcmV0dXJuICJUb28gbWFueSB1c2VycyI7CistICAgIGNhc2UgRURRVU9UOgorLSAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CistICAgIGNhc2UgRVNUQUxFOgorLSAgICAgIHJldHVybiAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKy0gICAgY2FzZSBFUkVNT1RFOgorLSAgICAgIHJldHVybiAiT2JqZWN0IGlzIHJlbW90ZSI7CistIyBpZiBIQVZFX1dJTlNPQ0syX0gKKy0gICAgICAvKiBXU0FfSU5WQUxJRF9IQU5ETEUgbWFwcyB0byBFQkFERiAqLworLSAgICAgIC8qIFdTQV9OT1RfRU5PVUdIX01FTU9SWSBtYXBzIHRvIEVOT01FTSAqLworLSAgICAgIC8qIFdTQV9JTlZBTElEX1BBUkFNRVRFUiBtYXBzIHRvIEVJTlZBTCAqLworLSAgICBjYXNlIFdTQV9PUEVSQVRJT05fQUJPUlRFRDoKKy0gICAgICByZXR1cm4gIk92ZXJsYXBwZWQgb3BlcmF0aW9uIGFib3J0ZWQiOworLSAgICBjYXNlIFdTQV9JT19JTkNPTVBMRVRFOgorLSAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBJL08gZXZlbnQgb2JqZWN0IG5vdCBpbiBzaWduYWxlZCBzdGF0ZSI7CistICAgIGNhc2UgV1NBX0lPX1BFTkRJTkc6CistICAgICAgcmV0dXJuICJPdmVybGFwcGVkIG9wZXJhdGlvbnMgd2lsbCBjb21wbGV0ZSBsYXRlciI7CistICAgICAgLyogV1NBRUlOVFIgbWFwcyB0byBFSU5UUiAqLworLSAgICAgIC8qIFdTQUVCQURGIG1hcHMgdG8gRUJBREYgKi8KKy0gICAgICAvKiBXU0FFQUNDRVMgbWFwcyB0byBFQUNDRVMgKi8KKy0gICAgICAvKiBXU0FFRkFVTFQgbWFwcyB0byBFRkFVTFQgKi8KKy0gICAgICAvKiBXU0FFSU5WQUwgbWFwcyB0byBFSU5WQUwgKi8KKy0gICAgICAvKiBXU0FFTUZJTEUgbWFwcyB0byBFTUZJTEUgKi8KKy0gICAgICAvKiBXU0FFV09VTERCTE9DSyBtYXBzIHRvIEVXT1VMREJMT0NLICovCistICAgICAgLyogV1NBRUlOUFJPR1JFU1MgaXMgRUlOUFJPR1JFU1MgKi8KKy0gICAgICAvKiBXU0FFQUxSRUFEWSBpcyBFQUxSRUFEWSAqLworLSAgICAgIC8qIFdTQUVOT1RTT0NLIGlzIEVOT1RTT0NLICovCistICAgICAgLyogV1NBRURFU1RBRERSUkVRIGlzIEVERVNUQUREUlJFUSAqLworLSAgICAgIC8qIFdTQUVNU0dTSVpFIGlzIEVNU0dTSVpFICovCistICAgICAgLyogV1NBRVBST1RPVFlQRSBpcyBFUFJPVE9UWVBFICovCistICAgICAgLyogV1NBRU5PUFJPVE9PUFQgaXMgRU5PUFJPVE9PUFQgKi8KKy0gICAgICAvKiBXU0FFUFJPVE9OT1NVUFBPUlQgaXMgRVBST1RPTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRVNPQ0tUTk9TVVBQT1JUIGlzIEVTT0NLVE5PU1VQUE9SVCAqLworLSAgICAgIC8qIFdTQUVPUE5PVFNVUFAgaXMgRU9QTk9UU1VQUCAqLworLSAgICAgIC8qIFdTQUVQRk5PU1VQUE9SVCBpcyBFUEZOT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFQUZOT1NVUFBPUlQgaXMgRUFGTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRUFERFJJTlVTRSBpcyBFQUREUklOVVNFICovCistICAgICAgLyogV1NBRUFERFJOT1RBVkFJTCBpcyBFQUREUk5PVEFWQUlMICovCistICAgICAgLyogV1NBRU5FVERPV04gaXMgRU5FVERPV04gKi8KKy0gICAgICAvKiBXU0FFTkVUVU5SRUFDSCBpcyBFTkVUVU5SRUFDSCAqLworLSAgICAgIC8qIFdTQUVORVRSRVNFVCBpcyBFTkVUUkVTRVQgKi8KKy0gICAgICAvKiBXU0FFQ09OTkFCT1JURUQgaXMgRUNPTk5BQk9SVEVEICovCistICAgICAgLyogV1NBRUNPTk5SRVNFVCBpcyBFQ09OTlJFU0VUICovCistICAgICAgLyogV1NBRU5PQlVGUyBpcyBFTk9CVUZTICovCistICAgICAgLyogV1NBRUlTQ09OTiBpcyBFSVNDT05OICovCistICAgICAgLyogV1NBRU5PVENPTk4gaXMgRU5PVENPTk4gKi8KKy0gICAgICAvKiBXU0FFU0hVVERPV04gaXMgRVNIVVRET1dOICovCistICAgICAgLyogV1NBRVRPT01BTllSRUZTIGlzIEVUT09NQU5ZUkVGUyAqLworLSAgICAgIC8qIFdTQUVUSU1FRE9VVCBpcyBFVElNRURPVVQgKi8KKy0gICAgICAvKiBXU0FFQ09OTlJFRlVTRUQgaXMgRUNPTk5SRUZVU0VEICovCistICAgICAgLyogV1NBRUxPT1AgaXMgRUxPT1AgKi8KKy0gICAgICAvKiBXU0FFTkFNRVRPT0xPTkcgbWFwcyB0byBFTkFNRVRPT0xPTkcgKi8KKy0gICAgICAvKiBXU0FFSE9TVERPV04gaXMgRUhPU1RET1dOICovCistICAgICAgLyogV1NBRUhPU1RVTlJFQUNIIGlzIEVIT1NUVU5SRUFDSCAqLworLSAgICAgIC8qIFdTQUVOT1RFTVBUWSBtYXBzIHRvIEVOT1RFTVBUWSAqLworLSAgICAgIC8qIFdTQUVQUk9DTElNIGlzIEVQUk9DTElNICovCistICAgICAgLyogV1NBRVVTRVJTIGlzIEVVU0VSUyAqLworLSAgICAgIC8qIFdTQUVEUVVPVCBpcyBFRFFVT1QgKi8KKy0gICAgICAvKiBXU0FFU1RBTEUgaXMgRVNUQUxFICovCistICAgICAgLyogV1NBRVJFTU9URSBpcyBFUkVNT1RFICovCistICAgIGNhc2UgV1NBU1lTTk9UUkVBRFk6CistICAgICAgcmV0dXJuICJOZXR3b3JrIHN1YnN5c3RlbSBpcyB1bmF2YWlsYWJsZSI7CistICAgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorLSAgICAgIHJldHVybiAiV2luc29jay5kbGwgdmVyc2lvbiBvdXQgb2YgcmFuZ2UiOworLSAgICBjYXNlIFdTQU5PVElOSVRJQUxJU0VEOgorLSAgICAgIHJldHVybiAiU3VjY2Vzc2Z1bCBXU0FTdGFydHVwIG5vdCB5ZXQgcGVyZm9ybWVkIjsKKy0gICAgY2FzZSBXU0FFRElTQ09OOgorLSAgICAgIHJldHVybiAiR3JhY2VmdWwgc2h1dGRvd24gaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIFdTQUVOT01PUkU6IGNhc2UgV1NBX0VfTk9fTU9SRToKKy0gICAgICByZXR1cm4gIk5vIG1vcmUgcmVzdWx0cyI7CistICAgIGNhc2UgV1NBRUNBTkNFTExFRDogY2FzZSBXU0FfRV9DQU5DRUxMRUQ6CistICAgICAgcmV0dXJuICJDYWxsIHdhcyBjYW5jZWxlZCI7CistICAgIGNhc2UgV1NBRUlOVkFMSURQUk9DVEFCTEU6CistICAgICAgcmV0dXJuICJQcm9jZWR1cmUgY2FsbCB0YWJsZSBpcyBpbnZhbGlkIjsKKy0gICAgY2FzZSBXU0FFSU5WQUxJRFBST1ZJREVSOgorLSAgICAgIHJldHVybiAiU2VydmljZSBwcm92aWRlciBpcyBpbnZhbGlkIjsKKy0gICAgY2FzZSBXU0FFUFJPVklERVJGQUlMRURJTklUOgorLSAgICAgIHJldHVybiAiU2VydmljZSBwcm92aWRlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSI7CistICAgIGNhc2UgV1NBU1lTQ0FMTEZBSUxVUkU6CistICAgICAgcmV0dXJuICJTeXN0ZW0gY2FsbCBmYWlsdXJlIjsKKy0gICAgY2FzZSBXU0FTRVJWSUNFX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIlNlcnZpY2Ugbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FUWVBFX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIkNsYXNzIHR5cGUgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FFUkVGVVNFRDoKKy0gICAgICByZXR1cm4gIkRhdGFiYXNlIHF1ZXJ5IHdhcyByZWZ1c2VkIjsKKy0gICAgY2FzZSBXU0FIT1NUX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIkhvc3Qgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FUUllfQUdBSU46CistICAgICAgcmV0dXJuICJOb25hdXRob3JpdGF0aXZlIGhvc3Qgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FOT19SRUNPVkVSWToKKy0gICAgICByZXR1cm4gIk5vbnJlY292ZXJhYmxlIGVycm9yIjsKKy0gICAgY2FzZSBXU0FOT19EQVRBOgorLSAgICAgIHJldHVybiAiVmFsaWQgbmFtZSwgbm8gZGF0YSByZWNvcmQgb2YgcmVxdWVzdGVkIHR5cGUiOworLSAgICAgIC8qIFdTQV9RT1NfKiBvbWl0dGVkICovCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9NU0cKKy0gICAgY2FzZSBFTk9NU0c6CistICAgICAgcmV0dXJuICJObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VJRFJNCistICAgIGNhc2UgRUlEUk06CistICAgICAgcmV0dXJuICJJZGVudGlmaWVyIHJlbW92ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LCistICAgIGNhc2UgRU5PTElOSzoKKy0gICAgICByZXR1cm4gIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VQUk9UTworLSAgICBjYXNlIEVQUk9UTzoKKy0gICAgICByZXR1cm4gIlByb3RvY29sIGVycm9yIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QCistICAgIGNhc2UgRU1VTFRJSE9QOgorLSAgICAgIHJldHVybiAiTXVsdGlob3AgYXR0ZW1wdGVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUJBRE1TRworLSAgICBjYXNlIEVCQURNU0c6CistICAgICAgcmV0dXJuICJCYWQgbWVzc2FnZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVworLSAgICBjYXNlIEVPVkVSRkxPVzoKKy0gICAgICByZXR1cm4gIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQCistICAgIGNhc2UgRU5PVFNVUDoKKy0gICAgICByZXR1cm4gIk5vdCBzdXBwb3J0ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQKKy0gICAgY2FzZSBFTkVUUkVTRVQ6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRAorLSAgICBjYXNlIEVDT05OQUJPUlRFRDoKKy0gICAgICByZXR1cm4gIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNUQUxFCistICAgIGNhc2UgRVNUQUxFOgorLSAgICAgIHJldHVybiAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRURRVU9UCistICAgIGNhc2UgRURRVU9UOgorLSAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorLSAgICBjYXNlIEVDQU5DRUxFRDoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBjYW5jZWxlZCI7CistI2VuZGlmCistCistICAgIGRlZmF1bHQ6CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy19CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDUyICswLDAgQEAKKy0vKiBzdHJlcnJvci1vdmVycmlkZS5oIC0tLSBQT1NJWCBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCistCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5kZWYgX0dMX1NUUkVSUk9SX09WRVJSSURFX0gKKy0jIGRlZmluZSBfR0xfU1RSRVJST1JfT1ZFUlJJREVfSAorLQorLSMgaW5jbHVkZSA8ZXJybm8uaD4KKy0jIGluY2x1ZGUgPHN0ZGRlZi5oPgorLQorLS8qIFJlYXNvbmFibGUgYnVmZmVyIHNpemUgdGhhdCBzaG91bGQgbmV2ZXIgdHJpZ2dlciBFUkFOR0U7IGlmIHRoaXMKKy0gICBwcm92ZXMgdG9vIHNtYWxsLCB3ZSBpbnRlbnRpb25hbGx5IGFib3J0KCksIHRvIHJlbWluZCB1cyB0byBmaXgKKy0gICB0aGlzIHZhbHVlLiAgKi8KKy0jIGRlZmluZSBTVEFDS0JVRl9MRU4gMjU2CistCistLyogSWYgRVJSTlVNIG1hcHMgdG8gYW4gZXJybm8gdmFsdWUgZGVmaW5lZCBieSBnbnVsaWIsIHJldHVybiBhIHN0cmluZworLSAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKy0jIGlmIFJFUExBQ0VfU1RSRVJST1JfMCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VTT0NLIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT01TRyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FSURSTSBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VQUk9UTyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUJBRE1TRyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PVFNVUCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVEIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VTVEFMRSBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FRFFVT1QgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUNBTkNFTEVECistZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmVycm9yX292ZXJyaWRlIChpbnQgZXJybnVtKTsKKy0jIGVsc2UKKy0jICBkZWZpbmUgc3RyZXJyb3Jfb3ZlcnJpZGUoaWdub3JlZCkgTlVMTAorLSMgZW5kaWYKKy0KKy0jZW5kaWYgLyogX0dMX1NUUkVSUk9SX09WRVJSSURFX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyaW5nLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyaW5nLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmluZy5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyaW5nLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40MTg0ODQ0NjEgLTA4MDAKK0BAIC0xNiw3ICsxNiw3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKysjaWZuZGVmIF9HTF9TVFJJTkdfSAorIAorICNpZiBfX0dOVUNfXyA+PSAzCisgQFBSQUdNQV9TWVNURU1fSEVBREVSQAorQEAgLTI2LDggKzI2LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NUUklOR19IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKysjaWZuZGVmIF9HTF9TVFJJTkdfSAorKyNkZWZpbmUgX0dMX1NUUklOR19ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtNTksMzYgKzU5LDYgQEAKKyAvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworIAorIAorLS8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKy0jaWYgQEdOVUxJQl9GRlNMQAorLSMgaWYgIUBIQVZFX0ZGU0xACistX0dMX0ZVTkNERUNMX1NZUyAoZmZzbCwgaW50LCAobG9uZyBpbnQgaSkpOworLSMgZW5kaWYKKy1fR0xfQ1hYQUxJQVNfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CistX0dMX0NYWEFMSUFTV0FSTiAoZmZzbCk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgZmZzbAorLSMgaWYgSEFWRV9SQVdfREVDTF9GRlNMCistX0dMX1dBUk5fT05fVVNFIChmZnNsLCAiZmZzbCBpcyBub3QgcG9ydGFibGUgLSB1c2UgdGhlIGZmc2wgbW9kdWxlIik7CistIyBlbmRpZgorLSNlbmRpZgorLQorLQorLS8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKy0jaWYgQEdOVUxJQl9GRlNMTEAKKy0jIGlmICFASEFWRV9GRlNMTEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChmZnNsbCwgaW50LCAobG9uZyBsb25nIGludCBpKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU19TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKKy1fR0xfQ1hYQUxJQVNXQVJOIChmZnNsbCk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgZmZzbGwKKy0jIGlmIEhBVkVfUkFXX0RFQ0xfRkZTTEwKKy1fR0xfV0FSTl9PTl9VU0UgKGZmc2xsLCAiZmZzbGwgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsbCBtb2R1bGUiKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistCisgLyogUmV0dXJuIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBDIHdpdGhpbiBOIGJ5dGVzIG9mIFMsIG9yIE5VTEwuICAqLworICNpZiBAR05VTElCX01FTUNIUkAKKyAjIGlmIEBSRVBMQUNFX01FTUNIUkAKK0BAIC0xMDA3LDUgKzk3Nyw1IEBAIF9HTF9XQVJOX09OX1VTRSAoc3RydmVyc2NtcCwgInN0cnZlcnNjbXAKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NUUklOR19IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KKysjZW5kaWYgLyogX0dMX1NUUklOR19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N5c19zdGF0LmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3lzX3N0YXQuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3lzX3N0YXQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N5c19zdGF0LmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40MzA0ODQ0NjEgLTA4MDAKK0BAIC0zNCw3ICszNCw3IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICisrI2lmbmRlZiBfR0xfU1lTX1NUQVRfSAorIAorIC8qIEdldCBubGlua190LiAgKi8KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitAQCAtNDUsOCArNDUsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1lTX1NUQVRfSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorKyNpZm5kZWYgX0dMX1NZU19TVEFUX0gKKysjZGVmaW5lIF9HTF9TWVNfU1RBVF9ICisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTY1Myw2ICs2NTMsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHV0aW1lbnNhdCwgInV0aW1lbnNhdCBpCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9IICovCisrI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisrI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3RpbWUuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi90aW1lLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3RpbWUuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3RpbWUuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQzODQ4NDQ2MiAtMDgwMAorQEAgLTI4LDEzICsyOCwxMyBAQAorICAgIHdpdGhvdXQgYWRkaW5nIG91ciBvd24gZGVjbGFyYXRpb25zLiAgKi8KKyAjaWYgKGRlZmluZWQgX19uZWVkX3RpbWVfdCB8fCBkZWZpbmVkIF9fbmVlZF9jbG9ja190IFwKKyAgICAgIHx8IGRlZmluZWQgX19uZWVkX3RpbWVzcGVjIFwKKy0gICAgIHx8IGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1RJTUVfSCkKKysgICAgIHx8IGRlZmluZWQgX0dMX1RJTUVfSCkKKyAKKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1RJTUVfSEAKKyAKKyAjZWxzZQorIAorLSMgZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9USU1FX0gKKysjIGRlZmluZSBfR0xfVElNRV9ICisgCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9USU1FX0hACisgCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3VuaXN0ZC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3VuaXN0ZC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi91bmlzdGQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3VuaXN0ZC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDUwNDg0NDYyIC0wODAwCitAQCAtMzYsNyArMzYsNyBAQAorICMgZGVmaW5lIF9HTF9XSU5TT0NLMl9IX1dJVE5FU1MKKyAKKyAvKiBOb3JtYWwgaW52b2NhdGlvbi4gICovCistI2VsaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9ICisrI2VsaWYgIWRlZmluZWQgX0dMX1VOSVNURF9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNpZiBASEFWRV9VTklTVERfSEAKK0BAIC01MSw4ICs1MSw4IEBACisgIyB1bmRlZiBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKyAjZW5kaWYKKyAKKy0jaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9ICisrI2lmICFkZWZpbmVkIF9HTF9VTklTVERfSCAmJiAhZGVmaW5lZCBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKysjZGVmaW5lIF9HTF9VTklTVERfSAorIAorIC8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gIEFsc28gZ2V0IHNpemVfdC4gICovCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorQEAgLTExNyw3NyArMTE3LDc4IEBACisgLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyAKKyAKKy0vKiBIaWRlIHNvbWUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZyb20gPHdpbnNvY2syLmg+LiAgKi8KKy0KKy0jaWYgQEdOVUxJQl9HRVRIT1NUTkFNRUAgJiYgQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKKy0jIGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TWVNfU09DS0VUX0gKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBzb2NrZXQKKy0jICAgZGVmaW5lIHNvY2tldCAgICAgICAgICAgICAgc29ja2V0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGNvbm5lY3QKKy0jICAgZGVmaW5lIGNvbm5lY3QgICAgICAgICAgICAgY29ubmVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBhY2NlcHQKKy0jICAgZGVmaW5lIGFjY2VwdCAgICAgICAgICAgICAgYWNjZXB0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGJpbmQKKy0jICAgZGVmaW5lIGJpbmQgICAgICAgICAgICAgICAgYmluZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRwZWVybmFtZQorLSMgICBkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICBnZXRwZWVybmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRzb2NrbmFtZQorLSMgICBkZWZpbmUgZ2V0c29ja25hbWUgICAgICAgICBnZXRzb2NrbmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRzb2Nrb3B0CistIyAgIGRlZmluZSBnZXRzb2Nrb3B0ICAgICAgICAgIGdldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgbGlzdGVuCistIyAgIGRlZmluZSBsaXN0ZW4gICAgICAgICAgICAgIGxpc3Rlbl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiByZWN2CistIyAgIGRlZmluZSByZWN2ICAgICAgICAgICAgICAgIHJlY3ZfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2VuZAorLSMgICBkZWZpbmUgc2VuZCAgICAgICAgICAgICAgICBzZW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHJlY3Zmcm9tCistIyAgIGRlZmluZSByZWN2ZnJvbSAgICAgICAgICAgIHJlY3Zmcm9tX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNlbmR0bworLSMgICBkZWZpbmUgc2VuZHRvICAgICAgICAgICAgICBzZW5kdG9fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2V0c29ja29wdAorLSMgICBkZWZpbmUgc2V0c29ja29wdCAgICAgICAgICBzZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNodXRkb3duCistIyAgIGRlZmluZSBzaHV0ZG93biAgICAgICAgICAgIHNodXRkb3duX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgZWxzZQorLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNvY2tldCwKKy0gICAgICAgICAgICAgICAgICAgICAic29ja2V0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGNvbm5lY3QsCistICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoYWNjZXB0LAorLSAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoYmluZCwKKy0gICAgICAgICAgICAgICAgICAgICAiYmluZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChnZXRwZWVybmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAiZ2V0cGVlcm5hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja25hbWUsCistICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tvcHQsCistICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAobGlzdGVuLAorLSAgICAgICAgICAgICAgICAgICAgICJsaXN0ZW4oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdiwKKy0gICAgICAgICAgICAgICAgICAgICAicmVjdigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZW5kLAorLSAgICAgICAgICAgICAgICAgICAgICJzZW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3Zmcm9tLAorLSAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZW5kdG8sCistICAgICAgICAgICAgICAgICAgICAgInNlbmR0bygpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZXRzb2Nrb3B0LAorLSAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNodXRkb3duLAorLSAgICAgICAgICAgICAgICAgICAgICJzaHV0ZG93bigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysjaWYgQEdOVUxJQl9HRVRIT1NUTkFNRUAKKysvKiBHZXQgYWxsIHBvc3NpYmxlIGRlY2xhcmF0aW9ucyBvZiBnZXRob3N0bmFtZSgpLiAgKi8KKysjIGlmIEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACisrIyAgaWYgIWRlZmluZWQgX0dMX1NZU19TT0NLRVRfSAorKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyMgICAgdW5kZWYgc29ja2V0CisrIyAgICBkZWZpbmUgc29ja2V0ICAgICAgICAgICAgICBzb2NrZXRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGNvbm5lY3QKKysjICAgIGRlZmluZSBjb25uZWN0ICAgICAgICAgICAgIGNvbm5lY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGFjY2VwdAorKyMgICAgZGVmaW5lIGFjY2VwdCAgICAgICAgICAgICAgYWNjZXB0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBiaW5kCisrIyAgICBkZWZpbmUgYmluZCAgICAgICAgICAgICAgICBiaW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBnZXRwZWVybmFtZQorKyMgICAgZGVmaW5lIGdldHBlZXJuYW1lICAgICAgICAgZ2V0cGVlcm5hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGdldHNvY2tuYW1lCisrIyAgICBkZWZpbmUgZ2V0c29ja25hbWUgICAgICAgICBnZXRzb2NrbmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgZ2V0c29ja29wdAorKyMgICAgZGVmaW5lIGdldHNvY2tvcHQgICAgICAgICAgZ2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgbGlzdGVuCisrIyAgICBkZWZpbmUgbGlzdGVuICAgICAgICAgICAgICBsaXN0ZW5fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHJlY3YKKysjICAgIGRlZmluZSByZWN2ICAgICAgICAgICAgICAgIHJlY3ZfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNlbmQKKysjICAgIGRlZmluZSBzZW5kICAgICAgICAgICAgICAgIHNlbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHJlY3Zmcm9tCisrIyAgICBkZWZpbmUgcmVjdmZyb20gICAgICAgICAgICByZWN2ZnJvbV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2VuZHRvCisrIyAgICBkZWZpbmUgc2VuZHRvICAgICAgICAgICAgICBzZW5kdG9fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNldHNvY2tvcHQKKysjICAgIGRlZmluZSBzZXRzb2Nrb3B0ICAgICAgICAgIHNldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNodXRkb3duCisrIyAgICBkZWZpbmUgc2h1dGRvd24gICAgICAgICAgICBzaHV0ZG93bl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICBlbHNlCisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNvY2tldCwKKysgICAgICAgICAgICAgICAgICAgICAgInNvY2tldCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoY29ubmVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGFjY2VwdCwKKysgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoYmluZCwKKysgICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHBlZXJuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0cGVlcm5hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja25hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChsaXN0ZW4sCisrICAgICAgICAgICAgICAgICAgICAgICJsaXN0ZW4oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3YsCisrICAgICAgICAgICAgICAgICAgICAgICJyZWN2KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAic2VuZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdmZyb20sCisrICAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZHRvLAorKyAgICAgICAgICAgICAgICAgICAgICAic2VuZHRvKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZXRzb2Nrb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2h1dGRvd24sCisrICAgICAgICAgICAgICAgICAgICAgICJzaHV0ZG93bigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysjICAgZW5kaWYKKyAjICBlbmRpZgorLSMgZW5kaWYKKy0jIGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TWVNfU0VMRUNUX0gKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBzZWxlY3QKKy0jICAgZGVmaW5lIHNlbGVjdCAgICAgICAgICAgICAgc2VsZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NlbGVjdF9oCistIyAgZWxzZQorLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbGVjdCwKKy0gICAgICAgICAgICAgICAgICAgICAic2VsZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NlbGVjdC5oPiIpOworKyMgIGlmICFkZWZpbmVkIF9HTF9TWVNfU0VMRUNUX0gKKysjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysjICAgIHVuZGVmIHNlbGVjdAorKyMgICAgZGVmaW5lIHNlbGVjdCAgICAgICAgICAgICAgc2VsZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NlbGVjdF9oCisrIyAgIGVsc2UKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VsZWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NlbGVjdC5oPiIpOworKyMgICBlbmRpZgorICMgIGVuZGlmCisgIyBlbmRpZgorICNlbmRpZgorQEAgLTEwNjEsNyArMTA2Miw2IEBAIF9HTF9XQVJOX09OX1VTRSAocGlwZTIsICJwaXBlMiBpcyB1bnBvcnQKKyAgICBzcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvcHJlYWQuaHRtbD4uICAqLworICMgaWYgQFJFUExBQ0VfUFJFQURACisgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0jICAgdW5kZWYgcHJlYWQKKyAjICAgZGVmaW5lIHByZWFkIHJwbF9wcmVhZAorICMgIGVuZGlmCisgX0dMX0ZVTkNERUNMX1JQTCAocHJlYWQsIHNzaXplX3QsCitAQCAtMTA5Niw3ICsxMDk2LDYgQEAgX0dMX1dBUk5fT05fVVNFIChwcmVhZCwgInByZWFkIGlzIHVucG9ydAorICAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvcHdyaXRlLmh0bWw+LiAgKi8KKyAjIGlmIEBSRVBMQUNFX1BXUklURUAKKyAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwd3JpdGUKKyAjICAgZGVmaW5lIHB3cml0ZSBycGxfcHdyaXRlCisgIyAgZW5kaWYKKyBfR0xfRlVOQ0RFQ0xfUlBMIChwd3JpdGUsIHNzaXplX3QsCitAQCAtMTQxNyw1ICsxNDE2LDUgQEAgX0dMX0NYWEFMSUFTV0FSTiAod3JpdGUpOworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICovCisrI2VuZGlmIC8qIF9HTF9VTklTVERfSCAqLworKyNlbmRpZiAvKiBfR0xfVU5JU1REX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdmVyaWZ5LmggbGliaWNvbnYtMS4xNC9zcmNsaWIvdmVyaWZ5LmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3ZlcmlmeS5oCTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvdmVyaWZ5LmgJMjAxMi0wMS0wOCAwMjowNzo0MC40OTQ0ODQ0NjQgLTA4MDAKK0BAIC0xNjQsMTMgKzE2NCwxMCBAQAorICAgICAoISFzaXplb2YgKF9HTF9WRVJJRllfVFlQRSAoUiwgRElBR05PU1RJQykpKQorIAorICMgaWZkZWYgX19jcGx1c3BsdXMKKy0jICBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X19nbF92ZXJpZnlfdHlwZQorIHRlbXBsYXRlIDxpbnQgdz4KKyAgIHN0cnVjdCBfZ2xfdmVyaWZ5X3R5cGUgeworICAgICB1bnNpZ25lZCBpbnQgX2dsX3ZlcmlmeV9lcnJvcl9pZl9uZWdhdGl2ZTogdzsKKyAgIH07CistIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfX2dsX3ZlcmlmeV90eXBlIDEKKy0jICBlbmRpZgorICMgIGRlZmluZSBfR0xfVkVSSUZZX1RZUEUoUiwgRElBR05PU1RJQykgXAorICAgICBfZ2xfdmVyaWZ5X3R5cGU8KFIpID8gMSA6IC0xPgorICMgZWxpZiBkZWZpbmVkIF9HTF9IQVZFX19TVEFUSUNfQVNTRVJUCitAQCAtMjA5LDcgKzIwNiw3IEBAIHRlbXBsYXRlIDxpbnQgdz4KKyAjICBlbmRpZgorICMgZW5kaWYKKyAKKy0vKiBAYXNzZXJ0Lmggb21pdCBzdGFydEAgICovCisrIyBpZmRlZiBfR0xfVkVSSUZZX0gKKyAKKyAvKiBFYWNoIG9mIHRoZXNlIG1hY3JvcyB2ZXJpZmllcyB0aGF0IGl0cyBhcmd1bWVudCBSIGlzIG5vbnplcm8uICBUbworICAgIGJlIHBvcnRhYmxlLCBSIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24uICBVbmxpa2UKK0BAIC0yMjEsMjMgKzIxOCwxNSBAQCB0ZW1wbGF0ZSA8aW50IHc+CisgICAgY29udGV4dHMsIGUuZy4sIHRoZSB0b3AgbGV2ZWwuICAqLworIAorIC8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgorLSAgIFJldHVybiAxLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHZlcmlmeV9leHByIChSLCAxKS4KKy0KKy0gICB2ZXJpZnlfdHJ1ZSBpcyBvYnNvbGVzY2VudDsgcGxlYXNlIHVzZSB2ZXJpZnlfZXhwciBpbnN0ZWFkLiAgKi8KKy0KKy0jIGRlZmluZSB2ZXJpZnlfdHJ1ZShSKSBfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfdHJ1ZSAoIiAjUiAiKSIpCisrICAgUmV0dXJuIDEuICAqLworIAorLS8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZS4gIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlCistICAgZXhwcmVzc2lvbiBFLiAgKi8KKy0KKy0jIGRlZmluZSB2ZXJpZnlfZXhwcihSLCBFKSBcCistICAgIChfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfZXhwciAoIiAjUiAiLCAiICNFICIpIikgPyAoRSkgOiAoRSkpCisrIyAgZGVmaW5lIHZlcmlmeV90cnVlKFIpIF9HTF9WRVJJRllfVFJVRSAoUiwgInZlcmlmeV90cnVlICgiICNSICIpIikKKyAKKyAvKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUsIGFzIGEgZGVjbGFyYXRpb24gd2l0aG91dCBhCisgICAgdHJhaWxpbmcgJzsnLiAgKi8KKyAKKy0jIGRlZmluZSB2ZXJpZnkoUikgX0dMX1ZFUklGWSAoUiwgInZlcmlmeSAoIiAjUiAiKSIpCisrIyAgZGVmaW5lIHZlcmlmeShSKSBfR0xfVkVSSUZZIChSLCAidmVyaWZ5ICgiICNSICIpIikKKyAKKy0vKiBAYXNzZXJ0Lmggb21pdCBlbmRAICAqLworKyMgZW5kaWYKKyAKKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9jYW5vbmljYWxpemUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9jYW5vbmljYWxpemUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvY2Fub25pY2FsaXplLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9jYW5vbmljYWxpemUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41NjY0ODQ0NjkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgY2Fub25pY2FsaXplLm00IHNlcmlhbCAyMworKyMgY2Fub25pY2FsaXplLm00IHNlcmlhbCAyMQorIAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorQEAgLTEwLDYgKzEwLDggQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworICMgbm90IHByb3ZpZGUgb3IgZml4IHJlYWxwYXRoLgorIEFDX0RFRlVOKFtnbF9GVU5DX0NBTk9OSUNBTElaRV9GSUxFTkFNRV9NT0RFXSwKKyBbCisrICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZV0pCisrCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbY2Fub25pY2FsaXplX2ZpbGVfbmFtZV0pCisgICBBQ19SRVFVSVJFKFtnbF9ET1VCTEVfU0xBU0hfUk9PVF0pCitAQCAtMjgsMTQgKzMwLDE2IEBAIEFDX0RFRlVOKFtnbF9DQU5PTklDQUxJWkVfTEdQTF0sCisgICBBQ19SRVFVSVJFKFtnbF9DQU5PTklDQUxJWkVfTEdQTF9TRVBBUkFURV0pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUgPSBubzsgdGhlbgorICAgICBIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MAorKyAgICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKyAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZWFscGF0aCA9IG5vOyB0aGVuCisgICAgICAgSEFWRV9SRUFMUEFUSD0wCisgICAgIGVsaWYgdGVzdCAiJGdsX2N2X2Z1bmNfcmVhbHBhdGhfd29ya3MiICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfUkVBTFBBVEg9MQorICAgICBmaQorICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19yZWFscGF0aF93b3JrcyIgIT0geWVzOyB0aGVuCistICAgIFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0xCisrICAgIEFDX0xJQk9CSihbY2Fub25pY2FsaXplLWxncGxdKQorICAgICBSRVBMQUNFX1JFQUxQQVRIPTEKKysgICAgUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTEKKyAgIGZpCisgXSkKKyAKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJub19oLm00IGxpYmljb252LTEuMTQvc3JjbTQvZXJybm9faC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJub19oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJub19oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNTkwNDg0NDY5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGVycm5vX2gubTQgc2VyaWFsIDEwCisrIyBlcnJub19oLm00IHNlcmlhbCA5CisgZG5sIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTM0LDEyICszNCw2IEBAIGJvb2JvbworICNpZiAhZGVmaW5lZCBFTk9UU1VQCisgYm9vYm9vCisgI2VuZGlmCistI2lmICFkZWZpbmVkIEVORVRSRVNFVAorLWJvb2JvbworLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBFQ09OTkFCT1JURUQKKy1ib29ib28KKy0jZW5kaWYKKyAjaWYgIWRlZmluZWQgRVNUQUxFCisgYm9vYm9vCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJyb3IubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJvci5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJvci5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZXJyb3IubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41OTg0ODQ0NzAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSNzZXJpYWwgMTQKKysjc2VyaWFsIDEzCisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCwgMjAwMS0yMDA0LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworQEAgLTgsOCArOCwxNiBAQAorIAorIEFDX0RFRlVOKFtnbF9FUlJPUl0sCisgWworLSAgZG5sIFdlIGRvbid0IHVzZSBBQ19GVU5DX0VSUk9SX0FUX0xJTkUgYW55IG1vcmUsIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyCistICBkbmwgbWFpbnRhaW5lZCBpbiBBdXRvY29uZiBhbmQgYmVjYXVzZSBpdCBpbnZva2VzIEFDX0xJQk9CSi4KKysgIEFDX0ZVTkNfRVJST1JfQVRfTElORQorKyAgZG5sIE5vdGU6IEFDX0ZVTkNfRVJST1JfQVRfTElORSBkb2VzIEFDX0xJQlNPVVJDRVMoW2Vycm9yLmgsIGVycm9yLmNdKS4KKysgIGdsX1BSRVJFUV9FUlJPUgorK10pCisrCisrIyBSZWRlZmluZSBBQ19GVU5DX0VSUk9SX0FUX0xJTkUsIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIG1haW50YWluZWQgaW4KKysjIEF1dG9jb25mLgorK0FDX0RFRlVOKFtBQ19GVU5DX0VSUk9SX0FUX0xJTkVdLAorK1sKKysgIEFDX0xJQlNPVVJDRVMoW2Vycm9yLmgsIGVycm9yLmNdKWRubAorICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlcnJvcl9hdF9saW5lXSwgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lXSwKKyAgICAgW0FDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorQEAgLTE3LDYgKzI1LDkgQEAgQUNfREVGVU4oW2dsX0VSUk9SXSwKKyAgICAgICAgICAgW1tlcnJvcl9hdF9saW5lICgwLCAwLCAiIiwgMCwgImFuIGVycm9yIG9jY3VycmVkIik7XV0pXSwKKyAgICAgICAgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPXllc10sCisgICAgICAgIFthY19jdl9saWJfZXJyb3JfYXRfbGluZT1ub10pXSkKKysgIGlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKysgICAgQUNfTElCT0JKKFtlcnJvcl0pCisrICBmaQorIF0pCisgCisgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9lcnJvci5jLgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2V4dGVuc2lvbnMubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9leHRlbnNpb25zLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2V4dGVuc2lvbnMubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2V4dGVuc2lvbnMubTQJMjAxMi0wMS0wOCAwMjowNzo0MC42MDY0ODQ0NzEgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2VyaWFsIDEwICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgOSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQEAgLTY3LDEwICs2Nyw2IEBAIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pZG5sCisgI2lmbmRlZiBfQUxMX1NPVVJDRQorICMgdW5kZWYgX0FMTF9TT1VSQ0UKKyAjZW5kaWYKKy0vKiBFbmFibGUgZ2VuZXJhbCBleHRlbnNpb25zIG9uIE1hY09TIFguICAqLworLSNpZm5kZWYgX0RBUldJTl9DX1NPVVJDRQorLSMgdW5kZWYgX0RBUldJTl9DX1NPVVJDRQorLSNlbmRpZgorIC8qIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KKyAjaWZuZGVmIF9HTlVfU09VUkNFCisgIyB1bmRlZiBfR05VX1NPVVJDRQorQEAgLTk5LDcgKzk1LDYgQEAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSlkbmwKKyAgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisgICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorICAgQUNfREVGSU5FKFtfQUxMX1NPVVJDRV0pCistICBBQ19ERUZJTkUoW19EQVJXSU5fQ19TT1VSQ0VdKQorICAgQUNfREVGSU5FKFtfR05VX1NPVVJDRV0pCisgICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY2FjaGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY2FjaGUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNhY2hlLm00CTIwMTEtMDgtMDcgMDY6NDI6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY2FjaGUubTQJMjAxMi0wMS0wOCAwMjowNzo0My4xNTQ0ODQ1OTMgLTA4MDAKK0BAIC0xNSw3ICsxNSw3IEBACisgCisgCisgIyBTcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtIG9mIGEgY29tbWFuZC1saW5lIGludm9jYXRpb246CistIyAgIGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKKysjICAgZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworIAorICMgU3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybSBvZiBhIGZldyBnbnVsaWItdG9vbC5tNCBtYWNybyBpbnZvY2F0aW9uczoKKyBnbF9MT0NBTF9ESVIoW2dudWxpYi1sb2NhbF0pCitAQCAtMjgsNiArMjgsNyBAQCBnbF9NT0RVTEVTKFsKKyAgIG1ic3RhdGUKKyAgIG1lbW1vdmUKKyAgIHByb2duYW1lCisrICByZWxvY2F0YWJsZQorICAgcmVsb2NhdGFibGUtcHJvZworICAgc2FmZS1yZWFkCisgICBzaWdwaXBlCitAQCAtNDksNSArNTAsNCBAQCBnbF9MSUIoW2xpYmljcnRdKQorIGdsX01BS0VGSUxFX05BTUUoW01ha2VmaWxlLmdudWxpYl0pCisgZ2xfTUFDUk9fUFJFRklYKFtnbF0pCisgZ2xfUE9fRE9NQUlOKFtdKQorLWdsX1dJVE5FU1NfQ19ET01BSU4oW10pCisgZ2xfVkNfRklMRVMoW2ZhbHNlXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tbW9uLm00IGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbW1vbi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tbW9uLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tbW9uLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjM0NDg0NDcxIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGdudWxpYi1jb21tb24ubTQgc2VyaWFsIDI5CisrIyBnbnVsaWItY29tbW9uLm00IHNlcmlhbCAyNAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMiwxOSArMTIsNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OXSwgWworICAgQUNfUkVRVUlSRShbZ2xfQ09NTU9OX0JPRFldKQorIF0pCisgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworLSAgQUhfVkVSQkFUSU0oW19Ob3JldHVybl0sCistWy8qIFRoZSBfTm9yZXR1cm4ga2V5d29yZCBvZiBkcmFmdCBDMVguICAqLworLSNpZm5kZWYgX05vcmV0dXJuCistIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCistICAgICAgfHwgMHg1MTEwIDw9IF9fU1VOUFJPX0MpCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKy0jIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCistIyBlbHNlCistIyAgZGVmaW5lIF9Ob3JldHVybgorLSMgZW5kaWYKKy0jZW5kaWYKKy1dKQorICAgQUhfVkVSQkFUSU0oW2lzb2M5OV9pbmxpbmVdLAorIFsvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBBcHBsZSBHQ0MgNC4wLjEgYnVpbGQgNTQ2NTogSW4gQzk5IG1vZGUsIGl0IHN1cHBvcnRzCisgICAgdGhlIElTTyBDIDk5IHNlbWFudGljcyBvZiAnZXh0ZXJuIGlubGluZScgKHVubGlrZSB0aGUgR05VIEMgc2VtYW50aWNzIG9mCitAQCAtNDcsMjAgKzM0LDYgQEAgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworIC8qIFRoZSBuYW1lIF9VTlVTRURfUEFSQU1FVEVSXyBpcyBhbiBlYXJsaWVyIHNwZWxsaW5nLCBhbHRob3VnaCB0aGUgbmFtZQorICAgIGlzIGEgbWlzbm9tZXIgb3V0c2lkZSBvZiBwYXJhbWV0ZXIgbGlzdHMuICAqLworICNkZWZpbmUgX1VOVVNFRF9QQVJBTUVURVJfIF9HTF9VTlVTRUQKKy0KKy0vKiBUaGUgX19wdXJlX18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCistI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworLSNlbmRpZgorLQorLS8qIFRoZSBfX2NvbnN0X18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45NS4gICovCistI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NSkKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9DT05TVCAvKiBlbXB0eSAqLworLSNlbmRpZgorIF0pCisgICBkbmwgUHJlcGFyYXRpb24gZm9yIHJ1bm5pbmcgdGVzdCBwcm9ncmFtczoKKyAgIGRubCBUZWxsIGdsaWJjIHRvIHdyaXRlIGRpYWdub3N0aWNzIGZyb20gLURfRk9SVElGWV9TT1VSQ0U9MiB0byBzdGRlcnIsIG5vdAorQEAgLTc0LDQ5ICs0NywxNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OX0JPRFldLCBbCisgIyBleHBhbmRzIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICMgd2hldGhlciBhIGdudWxpYiBtb2R1bGUgdGhhdCBoYXMgYmVlbiByZXF1ZXN0ZWQgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50CisgIyBvciBub3QuCistbTRfZGVmaW5lKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0sIFsxXSkKKytBQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dLCBbMV0pCisgCisgIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbbW9kdWxlbmFtZV0pCisgIyBzZXRzIHRoZSBzaGVsbCB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGdpdmVuIG1vZHVsZSB0bworICMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgd2lsbCBldmFsdWF0ZSB0byAxLgorIEFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV0sCisgWworLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYKAorLSAgICBbR05VTElCX1tdbTRfdHJhbnNsaXQoW1skMV1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSwKKy0gICAgW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSkKKy1dKQorLQorLSMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYKFt2YXJpYWJsZV0pCistIyBtb2RpZmllcyB0aGUgc2hlbGwgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT04uCistIyBUaGUgc2hlbGwgdmFyaWFibGUncyB2YWx1ZSBpcyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKy0jIHRvIDAgb3IgMS4KKy1BQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYXSwKKy1bCistICBtNF9pZihtNF9kZWZuKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pLCBbMV0sCistICAgIFsKKy0gICAgIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiBWQUxVRSB8fCAxIHRvIDEuCistICAgICAkMT0xCistICAgIF0sCistICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1IoWyQxXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKV0pCistXSkKKy0KKy0jIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF9PUihbdmFyaWFibGVdLCBbY29uZGl0aW9uXSkKKy0jIG1vZGlmaWVzIHRoZSBzaGVsbCB2YXJpYWJsZSB0byBpbmNsdWRlIHRoZSBnaXZlbiBjb25kaXRpb24uICBUaGUgc2hlbGwKKy0jIHZhcmlhYmxlJ3MgdmFsdWUgaXMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDAgb3IgMS4KKy1BQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SXSwKKy1bCistICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gMSB8fCBDT05ESVRJT04gdG8gMS4KKy0gIGlmIHRlc3QgIiRbXSQxIiAhPSAxOyB0aGVuCistICAgIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiAwIHx8IENPTkRJVElPTiB0byBDT05ESVRJT04uCistICAgIGlmIHRlc3QgIiRbXSQxIiA9IDA7IHRoZW4KKy0gICAgICAkMT0kMgorLSAgICBlbHNlCistICAgICAgJDE9IigkW10kMSB8fCAkMikiCistICAgIGZpCistICBmaQorKyAgR05VTElCX1tdbTRfdHJhbnNsaXQoW1skMV1dLAorKyAgICBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKT1nbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTgorIF0pCisgCisgIyBnbF9NT0RVTEVfSU5ESUNBVE9SKFttb2R1bGVuYW1lXSkKK0BAIC0yMTEsMzUgKzE1MSw2IEBAIG00X2lmbmRlZihbQVNfVkFSX0lGXSwKKyBbbTRfZGVmaW5lKFtBU19WQVJfSUZdLAorIFtBU19JRihbdGVzdCB4IkFTX1ZBUl9HRVQoWyQxXSkiID0geCIiJDJdLCBbJDNdLCBbJDRdKV0pXSkKKyAKKy0jIGdsX1BST0dfQVJfUkFOTElCCistIyBEZXRlcm1pbmVzIHRoZSB2YWx1ZXMgZm9yIEFSLCBBUkZMQUdTLCBSQU5MSUIgdGhhdCBmaXQgd2l0aCB0aGUgY29tcGlsZXIuCistQUNfREVGVU4oW2dsX1BST0dfQVJfUkFOTElCXSwKKy1bCistICBkbmwgTWluaXggMyBjb21lcyB3aXRoIHR3byB0b29sY2hhaW5zOiBUaGUgQW1zdGVyZGFtIENvbXBpbGVyIEtpdCBjb21waWxlcgorLSAgZG5sIGFzICJjYyIsIGFuZCBHQ0MgYXMgImdjYyIuIFRoZXkgaGF2ZSBkaWZmZXJlbnQgb2JqZWN0IGZpbGUgZm9ybWF0cyBhbmQKKy0gIGRubCBsaWJyYXJ5IGZvcm1hdHMuIEluIHBhcnRpY3VsYXIsIHRoZSBHTlUgYmludXRpbHMgcHJvZ3JhbXMgYXIsIHJhbmxpYgorLSAgZG5sIHByb2R1Y2UgbGlicmFyaWVzIHRoYXQgd29yayBvbmx5IHdpdGggZ2NjLCBub3Qgd2l0aCBjYy4KKy0gIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorLSAgQUNfRUdSRVBfQ1BQKFtBbXN0ZXJkYW1dLAorLSAgICBbCistI2lmZGVmIF9fQUNLX18KKy1BbXN0ZXJkYW0KKy0jZW5kaWYKKy0gICAgXSwKKy0gICAgW0FSPSdjYyAtYy5hJworLSAgICAgQVJGTEFHUz0nLW8nCistICAgICBSQU5MSUI9JzonCistICAgIF0sCistICAgIFtkbmwgVXNlIHRoZSBBdXRvbWFrZS1kb2N1bWVudGVkIGRlZmF1bHQgdmFsdWVzIGZvciBBUiBhbmQgQVJGTEFHUy4KKy0gICAgIEFSPSdhcicKKy0gICAgIEFSRkxBR1M9J2NydScKKy0gICAgIGRubCBVc2UgdGhlIHJhbmxpYiBwcm9ncmFtIGlmIGl0IGlzIGF2YWlsYWJsZS4KKy0gICAgIEFDX1BST0dfUkFOTElCCistICAgIF0pCistICBBQ19TVUJTVChbQVJdKQorLSAgQUNfU1VCU1QoW0FSRkxBR1NdKQorLV0pCistCisgIyBBQ19QUk9HX01LRElSX1AKKyAjIGlzIGEgYmFja3BvcnQgb2YgYXV0b2NvbmYtMi42MCdzIEFDX1BST0dfTUtESVJfUCwgd2l0aCBhIGZpeAorICMgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBhdXRvbWFrZS0xLjkuNiBmcm9tIGF1dG9jb25mLTIuNjIuCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbXAubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tcC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tcC5tNAkyMDExLTA4LTA3IDA2OjQyOjEyLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbXAubTQJMjAxMi0wMS0wOCAwMjowNzo0My45MjI0ODQ2MzAgLTA4MDAKK0BAIC0yNSwxMiArMjUsMTQgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9FUyRdKWRubCBhIHZhbGlkIGxvY2FsZSBuYW1lCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKy0gIEFDX1JFUVVJUkUoW2dsX1BST0dfQVJfUkFOTElCXSkKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKyAgIEFDX1JFUVVJUkUoW0FNX1BST0dfQ0NfQ19PXSkKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2Etb3B0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYXRvcjoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBhcmVhZGxpbms6CisrICAjIENvZGUgZnJvbSBtb2R1bGUgYXJnLW5vbm51bGw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgYmluYXJ5LWlvOgorKyAgIyBDb2RlIGZyb20gbW9kdWxlIGMrK2RlZnM6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgY2Fub25pY2FsaXplLWxncGw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgY2FyZWFkbGlua2F0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGRvc25hbWU6CitAQCAtNDYsNyArNDgsNiBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIGhhdmVsaWI6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgaW5jbHVkZV9uZXh0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGludHByb3BzOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIGxhcmdlZmlsZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBsaWJpY29udi1taXNjOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGxzdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIG1hbGxvY2E6CitAQCAtNjQsMTAgKzY1LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWduYWw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc2lncGlwZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdwcm9jbWFzazoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybjoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYysrZGVmczoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNzaXplX3Q6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RhdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRib29sOgorQEAgLTc3LDcgKzc0LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRsaWI6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXE6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3I6CistICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGU6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyaW5nOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c19zdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHRpbWU6CitAQCAtODcsNiArODMsNyBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXdpZHRoL3dpZHRoOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHVubG9ja2VkLWlvOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHZlcmlmeToKKysgICMgQ29kZSBmcm9tIG1vZHVsZSB3YXJuLW9uLXVzZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB4YWxsb2M6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgeHJlYWRsaW5rOgorIF0pCitAQCAtMTA5LDkgKzEwNiw2IEBAIEFDX0RFRlVOKFtnbF9JTklUXSwKKyAgIGdsX3NvdXJjZV9iYXNlPSdzcmNsaWInCisgZ2xfRlVOQ19BTExPQ0EKKyBnbF9DQU5PTklDQUxJWkVfTEdQTAorLWlmIHRlc3QgJEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IDAgfHwgdGVzdCAkUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtjYW5vbmljYWxpemUtbGdwbF0pCistZmkKKyBnbF9NT0RVTEVfSU5ESUNBVE9SKFtjYW5vbmljYWxpemUtbGdwbF0pCisgZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW2Nhbm9uaWNhbGl6ZV9maWxlX25hbWVdKQorIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFtyZWFscGF0aF0pCitAQCAtMTIxLDEwICsxMTUsNiBAQCBnbF9FTlZJUk9OCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2Vudmlyb25dKQorIGdsX0hFQURFUl9FUlJOT19ICisgZ2xfRVJST1IKKy1pZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCistICBBQ19MSUJPQkooW2Vycm9yXSkKKy0gIGdsX1BSRVJFUV9FUlJPUgorLWZpCisgbTRfaWZkZWYoW0FNX1hHRVRURVhUX09QVElPTl0sCisgICBbQU1fXVtYR0VUVEVYVF9PUFRJT04oWy0tZmxhZz1lcnJvcjozOmMtZm9ybWF0XSkKKyAgICBBTV9dW1hHRVRURVhUX09QVElPTihbLS1mbGFnPWVycm9yX2F0X2xpbmU6NTpjLWZvcm1hdF0pXSkKK0BAIC0xMzQsNDMgKzEyNCwyNiBAQCBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE4LjFdKQorIEFDX1NVQlNUKFtMSUJJTlRMXSkKKyBBQ19TVUJTVChbTFRMSUJJTlRMXSkKKyBnbF9GVU5DX0xTVEFUCistaWYgdGVzdCAkUkVQTEFDRV9MU1RBVCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbbHN0YXRdKQorLSAgZ2xfUFJFUkVRX0xTVEFUCistZmkKKyBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtsc3RhdF0pCisgZ2xfTUFMTE9DQQorIEFDX1RZUEVfTUJTVEFURV9UCisgZ2xfRlVOQ19NRU1NT1ZFCistaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0gbm87IHRoZW4KKy0gIEFDX0xJQk9CSihbbWVtbW92ZV0pCistICBnbF9QUkVSRVFfTUVNTU9WRQorLWZpCisgZ2xfTVVMVElBUkNICisgZ2xfUEFUSE1BWAorIEFDX0NIRUNLX0RFQ0xTKFtwcm9ncmFtX2ludm9jYXRpb25fbmFtZV0sIFtdLCBbXSwgWyNpbmNsdWRlIDxlcnJuby5oPl0pCisgQUNfQ0hFQ0tfREVDTFMoW3Byb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lXSwgW10sIFtdLCBbI2luY2x1ZGUgPGVycm5vLmg+XSkKKyBnbF9GVU5DX1JFQUQKKy1pZiB0ZXN0ICRSRVBMQUNFX1JFQUQgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3JlYWRdKQorLWZpCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWRdKQorIGdsX0ZVTkNfUkVBRExJTksKKy1pZiB0ZXN0ICRIQVZFX1JFQURMSU5LID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1JFQURMSU5LID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtyZWFkbGlua10pCistICBnbF9QUkVSRVFfUkVBRExJTksKKy1maQorIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtyZWFkbGlua10pCisgZ2xfUkVMT0NBVEFCTEUoWyRnbF9zb3VyY2VfYmFzZV0pCistaWYgdGVzdCAkUkVMT0NBVEFCTEUgPSB5ZXM7IHRoZW4KKy0gIEFDX0xJQk9CSihbcHJvZ3JlbG9jXSkKKy1maQorIGdsX0ZVTkNfUkVBRExJTktfU0VQQVJBVEUKKyBnbF9DQU5PTklDQUxJWkVfTEdQTF9TRVBBUkFURQorIGdsX01BTExPQ0EKKy1nbF9SRUxPQ0FUQUJMRV9MSUJSQVJZCisrZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9TRVBBUkFURQorIGdsX0ZVTkNfU0VURU5WX1NFUEFSQVRFCistZ2xfUFJFUkVRX1NBRkVfUkVBRAorK2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEUKKytnbF9TQUZFX1JFQUQKKyBnbF9TSUdOQUxfSAorIGdsX1NJR05BTF9TSUdQSVBFCisgZG5sIERlZmluZSB0aGUgQyBtYWNybyBHTlVMSUJfU0lHUElQRSB0byAxLgorQEAgLTE4NiwxNyArMTU5LDkgQEAgZG5sIERlZmluZSB0aGUgc3Vic3RpdHV0ZWQgdmFyaWFibGUgR05VTAorIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyBHTlVMSUJfVU5JU1REX0hfU0lHUElQRT0xCisgZ2xfU0lHTkFMQkxPQ0tJTkcKKy1pZiB0ZXN0ICRIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gMDsgdGhlbgorLSAgQUNfTElCT0JKKFtzaWdwcm9jbWFza10pCistICBnbF9QUkVSRVFfU0lHUFJPQ01BU0sKKy1maQorIGdsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SKFtzaWdwcm9jbWFza10pCisgZ3RfVFlQRV9TU0laRV9UCisgZ2xfRlVOQ19TVEFUCistaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtzdGF0XSkKKy0gIGdsX1BSRVJFUV9TVEFUCistZmkKKyBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtzdGF0XSkKKyBBTV9TVERCT09MX0gKKyBnbF9TVERERUZfSAorQEAgLTIwNCwxNyArMTY5LDcgQEAgZ2xfU1RESU5UX0gKKyBnbF9TVERJT19ICisgZ2xfU1RETElCX0gKKyBnbF9GVU5DX1NUUkVSUk9SCistaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbc3RyZXJyb3JdKQorLWZpCistZ2xfTU9EVUxFX0lORElDQVRPUihbc3RyZXJyb3JdKQorIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtzdHJlcnJvcl0pCistQUNfUkVRVUlSRShbZ2xfSEVBREVSX0VSUk5PX0hdKQorLUFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCistaWYgdGVzdCAtbiAiJEVSUk5PX0giIHx8IHRlc3QgJFJFUExBQ0VfU1RSRVJST1JfMCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbc3RyZXJyb3Itb3ZlcnJpZGVdKQorLSAgZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syCistZmkKKyBnbF9IRUFERVJfU1RSSU5HX0gKKyBnbF9IRUFERVJfU1lTX1NUQVRfSAorIEFDX1BST0dfTUtESVJfUAorQEAgLTM2NCwxNCArMzE5LDEzIEBAIEFDX0RFRlVOKFtnbHRlc3RzX0xJQlNPVVJDRVNdLCBbCisgIyBUaGlzIG1hY3JvIHJlY29yZHMgdGhlIGxpc3Qgb2YgZmlsZXMgd2hpY2ggaGF2ZSBiZWVuIGluc3RhbGxlZCBieQorICMgZ251bGliLXRvb2wgYW5kIG1heSBiZSByZW1vdmVkIGJ5IGZ1dHVyZSBnbnVsaWItdG9vbCBpbnZvY2F0aW9ucy4KKyBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworKyAgYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKysgIGJ1aWxkLWF1eC9jKytkZWZzLmgKKyAgIGJ1aWxkLWF1eC9jb25maWcubGlicGF0aAorICAgYnVpbGQtYXV4L2NvbmZpZy5ycGF0aAorICAgYnVpbGQtYXV4L2luc3RhbGwtcmVsb2MKKyAgIGJ1aWxkLWF1eC9yZWxvYy1sZGZsYWdzCistICBidWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAorLSAgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorLSAgYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistICBidWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCisrICBidWlsZC1hdXgvd2Fybi1vbi11c2UuaAorICAgZG9jL3JlbG9jYXRhYmxlLnRleGkKKyAgIGxpYi9hbGxvY2EuaW4uaAorICAgbGliL2FsbG9jYXRvci5jCitAQCAtNDE5LDggKzM3Myw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBsaWIvc3RkaW8uaW4uaAorICAgbGliL3N0ZGxpYi5pbi5oCisgICBsaWIvc3RyZXEuaAorLSAgbGliL3N0cmVycm9yLW92ZXJyaWRlLmMKKy0gIGxpYi9zdHJlcnJvci1vdmVycmlkZS5oCisgICBsaWIvc3RyZXJyb3IuYworICAgbGliL3N0cmluZy5pbi5oCisgICBsaWIvc3lzX3N0YXQuaW4uaAorQEAgLTQ2Myw3ICs0MTUsNiBAQCBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworICAgbTQvaW50bWF4Lm00CisgICBtNC9pbnR0eXBlcy1wcmkubTQKKyAgIG00L2ludHR5cGVzX2gubTQKKy0gIG00L2xhcmdlZmlsZS5tNAorICAgbTQvbGNtZXNzYWdlLm00CisgICBtNC9saWItbGQubTQKKyAgIG00L2xpYi1saW5rLm00CitAQCAtNTAyLDcgKzQ1Myw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBtNC9zdGRsaWJfaC5tNAorICAgbTQvc3RyZXJyb3IubTQKKyAgIG00L3N0cmluZ19oLm00CistICBtNC9zeXNfc29ja2V0X2gubTQKKyAgIG00L3N5c19zdGF0X2gubTQKKyAgIG00L3RocmVhZGxpYi5tNAorICAgbTQvdGltZV9oLm00CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvaW5jbHVkZV9uZXh0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvaW5jbHVkZV9uZXh0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2luY2x1ZGVfbmV4dC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvaW5jbHVkZV9uZXh0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjUwNDg0NDcyIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGluY2x1ZGVfbmV4dC5tNCBzZXJpYWwgMjAKKysjIGluY2x1ZGVfbmV4dC5tNCBzZXJpYWwgMTgKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTc1LDEzICsxNzUsMTEgQEAgQUNfREVGVU4oW2dsX05FWFRfSEVBREVSU19JTlRFUk5BTF0sCisgICAgIFtBQ19DSEVDS19IRUFERVJTX09OQ0UoWyQxXSkKKyAgICAgXSkKKyAKKy1kbmwgRklYTUU6IGdsX25leHRfaGVhZGVyIGFuZCBnbF9oZWFkZXJfZXhpc3RzIG11c3QgYmUgdXNlZCB1bnF1b3RlZAorLWRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgICBtNF9mb3JlYWNoX3coW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwKKyAgICAgW0FTX1ZBUl9QVVNIREVGKFtnbF9uZXh0X2hlYWRlcl0sCisgICAgICAgICAgICAgICAgICAgICBbZ2xfY3ZfbmV4dF9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCistICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisrICAgICAgIEFTX1ZBUl9TRVQoW2dsX25leHRfaGVhZGVyXSwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soCisgICAgICAgICAgW2Fic29sdXRlIG5hbWUgb2YgPF1tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pWz5dLAorQEAgLTIxMCw3ICsyMDgsNyBAQCBkbmwgdW50aWwgd2UgY2FuIGFzc3VtZSBhdXRvY29uZiAyLjY0IG9yCisgICAgICAgICAgICAgICAgZG5sIGV2YWwgaXMgbmVjZXNzYXJ5IHRvIGV4cGFuZCBnbF9hYnNuYW1lX2NwcC4KKyAgICAgICAgICAgICAgICBkbmwgVWx0cml4IGFuZCBQeXJhbWlkIHNoIHJlZnVzZSB0byByZWRpcmVjdCBvdXRwdXQgb2YgZXZhbCwKKyAgICAgICAgICAgICAgICBkbmwgc28gdXNlIHN1YnNoZWxsLgorLSAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsCisrICAgICAgICAgICAgICAgQVNfVkFSX1NFVChbZ2xfbmV4dF9oZWFkZXJdLAorICAgICAgICAgICAgICAgICAgWyciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiZBU19NRVNTQUdFX0xPR19GRCB8CisgICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVsjeworICAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pW1wpIi4qI1wxIworQEAgLTIyMCwyMCArMjE4LDIwIEBAIGRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IKKyAgICAgICAgICAgICAgICAgICB9J2AnIiddKQorICAgICAgICAgICBtNF9pZihbJDJdLCBbY2hlY2tdLAorICAgICAgICAgICAgIFtlbHNlCistICAgICAgICAgICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKysgICAgICAgICAgICAgICBBU19WQVJfU0VUKFtnbF9uZXh0X2hlYWRlcl0sIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgXSkKKyAgICAgICAgICBdKQorICAgICAgZmkKKyAgICAgIEFDX1NVQlNUKAorICAgICAgICBBU19UUl9DUFAoW05FWFRfXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpLAorLSAgICAgICBbQVNfVkFSX0dFVChnbF9uZXh0X2hlYWRlcildKQorKyAgICAgICBbQVNfVkFSX0dFVChbZ2xfbmV4dF9oZWFkZXJdKV0pCisgICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdnbF9IRUFERVJfTkFNRSc+JworICAgICAgZWxzZQorICAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCistICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPUFTX1ZBUl9HRVQoZ2xfbmV4dF9oZWFkZXIpCisrICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPUFTX1ZBUl9HRVQoW2dsX25leHRfaGVhZGVyXSkKKyAgICAgIGZpCisgICAgICBBQ19TVUJTVCgKKyAgICAgICAgQVNfVFJfQ1BQKFtORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSksCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbGFyZ2VmaWxlLm00IGxpYmljb252LTEuMTQvc3JjbTQvbGFyZ2VmaWxlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xhcmdlZmlsZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvbGFyZ2VmaWxlLm00CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMDQgKzAsMCBAQAorLSMgRW5hYmxlIGxhcmdlIGZpbGVzIG9uIHN5c3RlbXMgd2hlcmUgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQuCistCistIyBDb3B5cmlnaHQgMTk5Mi0xOTk2LCAxOTk4LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKy0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy0jIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBhdXRvY29uZiA8PSAyLjY4OworLSMgQUNfU1lTX0xBUkdFRklMRSBkb2VzIG5vdCBjb25maWd1cmUgZm9yIGxhcmdlIGlub2RlcyBvbiBNYWMgT1MgWCAxMC41LgorLW00X3ZlcnNpb25fcHJlcmVxKFsyLjY5XSwgW10gLFsKKy0KKy0jIF9BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdLAorLVtAJTpAaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorLSAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCistICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKy0gICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworLUAlOkBkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorLSAgaW50IG9mZl90X2lzX2xhcmdlW1soTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorLQkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorLQkJICAgICAgPyAxIDogLTFdXTtbXWRubAorLV0pCistCistCistIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShDLU1BQ1JPLCBWQUxVRSwKKy0jCQkJCUNBQ0hFLVZBUiwKKy0jCQkJCURFU0NSSVBUSU9OLAorLSMJCQkJUFJPTE9HVUUsIFtGVU5DVElPTi1CT0RZXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRV0sCistW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJDEgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sIFskM10sCistW3doaWxlIDo7IGRvCistICBtNF9pZnZhbChbJDZdLCBbQUNfTElOS19JRkVMU0VdLCBbQUNfQ09NUElMRV9JRkVMU0VdKSgKKy0gICAgW0FDX0xBTkdfUFJPR1JBTShbJDVdLCBbJDZdKV0sCistICAgIFskMz1ubzsgYnJlYWtdKQorLSAgbTRfaWZ2YWwoWyQ2XSwgW0FDX0xJTktfSUZFTFNFXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkoCistICAgIFtBQ19MQU5HX1BST0dSQU0oW0AlOkBkZWZpbmUgJDEgJDIKKy0kNV0sIFskNl0pXSwKKy0gICAgWyQzPSQyOyBicmVha10pCistICAkMz11bmtub3duCistICBicmVhaworLWRvbmVdKQorLWNhc2UgJCQzIGluICMoCistICBubyB8IHVua25vd24pIDs7CistICAqKSBBQ19ERUZJTkVfVU5RVU9URUQoWyQxXSwgWyQkM10sIFskNF0pOzsKKy1lc2FjCistcm0gLXJmIGNvbmZ0ZXN0KltdZG5sCistXSkjIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFCistCistCistIyBBQ19TWVNfTEFSR0VGSUxFCistIyAtLS0tLS0tLS0tLS0tLS0tCistIyBCeSBkZWZhdWx0LCBtYW55IGhvc3RzIHdvbid0IGxldCBwcm9ncmFtcyBhY2Nlc3MgbGFyZ2UgZmlsZXM7CistIyBvbmUgbXVzdCB1c2Ugc3BlY2lhbCBjb21waWxlciBvcHRpb25zIHRvIGdldCBsYXJnZS1maWxlIGFjY2VzcyB0byB3b3JrLgorLSMgRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzIGJyYWluIGRhbWFnZSBwbGVhc2Ugc2VlOgorLSMgaHR0cDovL3d3dy51bml4LXN5c3RlbXMub3JnL3ZlcnNpb24yL3doYXRzbmV3L2xmczIwbWFyLmh0bWwKKy1BQ19ERUZVTihbQUNfU1lTX0xBUkdFRklMRV0sCistW0FDX0FSR19FTkFCTEUobGFyZ2VmaWxlLAorLQkgICAgICAgWyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlc10pCistaWYgdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiICE9IG5vOyB0aGVuCistCistICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXNdLAorLSAgICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDLAorLSAgICBbYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz1ubworLSAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCistICAgICAgIGFjX3NhdmVfQ0M9JENDCistICAgICAgIHdoaWxlIDo7IGRvCistCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorLQkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorLQkgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSldKQorLQkgQUNfQ09NUElMRV9JRkVMU0UoW10sIFticmVha10pCistCSBDQz0iJENDIC1uMzIiCistCSBBQ19DT01QSUxFX0lGRUxTRShbXSwgW2FjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWtdKQorLQkgYnJlYWsKKy0gICAgICAgZG9uZQorLSAgICAgICBDQz0kYWNfc2F2ZV9DQworLSAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0CistICAgIGZpXSkKKy0gIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorLSAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworLSAgZmkKKy0KKy0gIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKF9GSUxFX09GRlNFVF9CSVRTLCA2NCwKKy0gICAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMsCistICAgIFtOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLl0sCistICAgIFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSkKKy0gIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorLSAgICBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShfTEFSR0VfRklMRVMsIDEsCistICAgICAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzLAorLSAgICAgIFtEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuXSwKKy0gICAgICBbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pCistICBmaQorLQorLSAgQUhfVkVSQkFUSU0oW19EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERV0sCistWy8qIEVuYWJsZSBsYXJnZSBpbm9kZSBudW1iZXJzIG9uIE1hYyBPUyBYLiAgKi8KKy0jaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQorLSMgZGVmaW5lIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERSAxCistI2VuZGlmXSkKKy1maQorLV0pIyBBQ19TWVNfTEFSR0VGSUxFCistCistXSkjIG00X3ZlcnNpb25fcHJlcmVxIDIuNjkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sc3RhdC5tNCBsaWJpY29udi0xLjE0L3NyY200L2xzdGF0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xzdGF0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9sc3RhdC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjcyMjQ4NDQ3NiAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgMjMKKysjIHNlcmlhbCAyMQorIAorICMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEsIDIwMDMtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtMTUsMjggKzE1LDI0IEBAIEFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUXSwKKyAgIGRubCAiI2RlZmluZSBsc3RhdCBzdGF0IiwgYW5kIGxzdGF0LmMgaXMgYSBuby1vcC4KKyAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2xzdGF0XSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXQgPSB5ZXM7IHRoZW4KKy0gICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10pCistICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdKQorKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSBubzsgdGhlbgorKyAgICAgIGRubCBOb3RlOiBBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIGRvZXMgQUNfTElCT0JKKFtsc3RhdF0pLgorICAgICAgIFJFUExBQ0VfTFNUQVQ9MQorICAgICBmaQorKyAgICAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xzdGF0LmMuCisrICAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIGVsc2UKKyAgICAgSEFWRV9MU1RBVD0wCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9sc3RhdC5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfTFNUQVRdLAorKyMgUmVkZWZpbmUgQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSywgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIKKysjIG1haW50YWluZWQgaW4gQXV0b2NvbmYuCisrQUNfREVGVU4oW0FDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdLAorIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0gIDoKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwKKy1bCistICBkbmwgV2UgZG9uJ3QgdXNlIEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksgYW55IG1vcmUsIGJlY2F1c2UgaXQKKy0gIGRubCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBpbiBBdXRvY29uZiBhbmQgYmVjYXVzZSBpdCBpbnZva2VzIEFDX0xJQk9CSi4KKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxzdGF0IGNvcnJlY3RseSBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoXSwKKy0gICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGlua10sCisrICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmtdLAorICAgICBbcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKKyAgICAgIGVjaG8gPmNvbmZ0ZXN0LmZpbGUKKyAgICAgIGlmIHRlc3QgIiRhc19sbl9zIiA9ICJsbiAtcyIgJiYgbG4gLXMgY29uZnRlc3QuZmlsZSBjb25mdGVzdC5zeW07IHRoZW4KK0BAIC00OSwyMiArNDUsMjUgQEAgQUNfREVGVU4oW2dsX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEXworICAgICAgICAgICAgICAgICAgaGF2ZSB0byBjb21waWxlIGFuZCB1c2UgdGhlIGxzdGF0IHdyYXBwZXIuICAqLworICAgICAgICAgICAgICAgcmV0dXJuIGxzdGF0ICgiY29uZnRlc3Quc3ltLyIsICZzYnVmKSA9PSAwOworICAgICAgICAgICAgIF1dKV0sCistICAgICAgICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXNdLAorLSAgICAgICAgIFtnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm9dLAorKyAgICAgICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzXSwKKysgICAgICAgICBbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vXSwKKyAgICAgICAgICBbIyBXaGVuIGNyb3NzLWNvbXBpbGluZywgYmUgcGVzc2ltaXN0aWMgc28gd2Ugd2lsbCBlbmQgdXAgdXNpbmcgdGhlCisgICAgICAgICAgICMgcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiBsc3RhdCB0aGF0IGNoZWNrcyBmb3IgdHJhaWxpbmcgc2xhc2hlcyBhbmQKKyAgICAgICAgICAgIyBjYWxscyBsc3RhdCBhIHNlY29uZCB0aW1lIHdoZW4gbmVjZXNzYXJ5LgorLSAgICAgICAgICBnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKysgICAgICAgICAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisgICAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgIyBJZiB0aGUgJ2xuIC1zJyBjb21tYW5kIGZhaWxlZCwgdGhlbiB3ZSBwcm9iYWJseSBkb24ndCBldmVuCisgICAgICAgICMgaGF2ZSBhbiBsc3RhdCBmdW5jdGlvbi4KKy0gICAgICAgZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisrICAgICAgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCisgICAgIF0pCistICB0ZXN0ICRnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSB5ZXMgJiYKKysgIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgorICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwgWzFdLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiBgbHN0YXQnIGRlcmVmZXJlbmNlcyBhIHN5bWxpbmsgc3BlY2lmaWVkCisgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaC5dKQorKyAgaWYgdGVzdCAieCRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsiID0geG5vOyB0aGVuCisrICAgIEFDX0xJQk9CSihbbHN0YXRdKQorKyAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L21lbW1vdmUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9tZW1tb3ZlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L21lbW1vdmUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L21lbW1vdmUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43Mzg0ODQ0NzcgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgbWVtbW92ZS5tNCBzZXJpYWwgNAorKyMgbWVtbW92ZS5tNCBzZXJpYWwgMworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC02LDcgKzYsMTAgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIAorIEFDX0RFRlVOKFtnbF9GVU5DX01FTU1PVkVdLAorIFsKKy0gIEFDX0NIRUNLX0ZVTkNTKFttZW1tb3ZlXSkKKysgIEFDX1JFUExBQ0VfRlVOQ1MoW21lbW1vdmVdKQorKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0gbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX01FTU1PVkUKKysgIGZpCisgXSkKKyAKKyAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbW1vdmUuYy4KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wYXRobWF4Lm00IGxpYmljb252LTEuMTQvc3JjbTQvcGF0aG1heC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wYXRobWF4Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9wYXRobWF4Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzU4NDg0NDc4IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHBhdGhtYXgubTQgc2VyaWFsIDkKKysjIHBhdGhtYXgubTQgc2VyaWFsIDgKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyBkbmwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorQEAgLTgsNSArOCw2IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfUEFUSE1BWF0sCisgWworICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3BhdGhtYXguaC4KKysgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3BhdGhjb25mXSkKKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3BhcmFtLmhdKQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcG8ubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9wby5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wby5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcG8ubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43NjY0ODQ0NzcgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcG8ubTQgc2VyaWFsIDE3YQorKyMgcG8ubTQgc2VyaWFsIDE3IChnZXR0ZXh0LTAuMTgpCisgZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTExOCw4ICsxMTgsNyBAQCBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKy0gICAgICAgICAgZ3RfdGFiPWBwcmludGYgJ1x0J2AKKy0gICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAke2d0X3RhYn1dKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgorICAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uCitAQCAtMjU1LDcgKzI1NCw2IEBAIEVPVAorICAgZmkKKyAKKyAgICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KKy0gIHRhYj1gcHJpbnRmICdcdCdgCisgICBzZWRfeF92YXJpYWJsZT0nCisgIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5LgorIHgKK0BAIC0yNjMsOSArMjYxLDkgQEAgcy9QL1AvCisgeAorIHRhCisgIyBZZXMgaXQgd2FzIGVtcHR5LiBMb29rIGlmIHdlIGhhdmUgdGhlIGV4cGVjdGVkIHZhcmlhYmxlIGRlZmluaXRpb24uCistL15bJyIke3RhYn0iJyBdKlZBUklBQkxFWyciJHt0YWJ9IicgXSo9L3sKKysvXlsJIF0qVkFSSUFCTEVbCSBdKj0veworICAgIyBTZWVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorLSAgcy9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS8vCisrICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKyAgIGJhCisgfQorIGJkCitAQCAtNDA3LDE1ICs0MDUsMTQgQEAgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgZmkKKyAKKyAgIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKKy0gIHRhYj1gcHJpbnRmICdcdCdgCisgICBpZiBncmVwIC1sICdAVENMQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyAkZnJvYmJlZGxhbmcubXNnOiAkbGFuZy5wbworLSR7dGFifUBlY2hvICJcJChNU0dGTVQpIC1jIC0tdGNsIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIjsgXAorLSR7dGFifVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKyBFT0YKKyAgICAgZG9uZQorICAgZmkKK0BAIC00MjUsOCArNDIyLDggQEAgRU9GCisgICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisgJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKy0ke3RhYn1AZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAorLSR7dGFifVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisrCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisgRU9GCisgICAgIGRvbmUKKyAgIGZpCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZGxpbmsubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkbGluay5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkbGluay5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVhZGxpbmsubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43OTA0ODQ0NzkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVhZGxpbmsubTQgc2VyaWFsIDExCisrIyByZWFkbGluay5tNCBzZXJpYWwgMTAKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTAsNiArMTAsOCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFETElOS10sCisgICBBQ19DSEVDS19GVU5DU19PTkNFKFtyZWFkbGlua10pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlYWRsaW5rID0gbm87IHRoZW4KKyAgICAgSEFWRV9SRUFETElOSz0wCisrICAgIEFDX0xJQk9CSihbcmVhZGxpbmtdKQorKyAgICBnbF9QUkVSRVFfUkVBRExJTksKKyAgIGVsc2UKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcmVhZGxpbmsgc2lnbmF0dXJlIGlzIGNvcnJlY3RdLAorICAgICAgIFtnbF9jdl9kZWNsX3JlYWRsaW5rX3dvcmtzXSwKK0BAIC0zOCw4ICs0MCwxMCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFETElOS10sCisgICAgICAgQUNfREVGSU5FKFtSRUFETElOS19UUkFJTElOR19TTEFTSF9CVUddLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiByZWFkbGluaworICAgICAgICAgZmFpbHMgdG8gcmVjb2duaXplIGEgdHJhaWxpbmcgc2xhc2guXSkKKyAgICAgICBSRVBMQUNFX1JFQURMSU5LPTEKKysgICAgICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKyAgICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZGVjbF9yZWFkbGlua193b3JrcyIgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9SRUFETElOSz0xCisrICAgICAgQUNfTElCT0JKKFtyZWFkbGlua10pCisgICAgIGZpCisgICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZC5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlYWQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVhZC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc4MjQ4NDQ3OCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWFkLm00IHNlcmlhbCAyCisrIyByZWFkLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNCw2ICsxNCw3IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1JFQURdLAorICAgICBnbF9OT05CTE9DS0lOR19JTworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX25vbmJsb2NraW5nICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfUkVBRD0xCisrICAgICAgQUNfTElCT0JKKFtyZWFkXSkKKyAgICAgZmkKKyAgIF0pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUtbGliLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43OTg0ODQ0ODAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVsb2NhdGFibGUtbGliLm00IHNlcmlhbCA2CisrIyByZWxvY2F0YWJsZS1saWIubTQgc2VyaWFsIDUKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMCw2ICsxMCw5IEBAIGRubCBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBsaWJyYXJpZXMuCisgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUlldLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0pCisrICBpZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorKyAgICBBQ19MSUJPQkooW3JlbG9jYXRhYmxlXSkKKysgIGZpCisgXSkKKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSwKKyBbCitAQCAtMjksNiArMzIsMTMgQEAgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0sCisgICBmaQorIF0pCisgCisrZG5sIExpa2UgZ2xfUkVMT0NBVEFCTEVfTElCUkFSWSwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uCisrZG5sIChubyBBQ19MSUJPQkopLgorK0FDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX1NFUEFSQVRFXSwKKytbCisrICBBQ19SRVFVSVJFKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldKQorK10pCisrCisgZG5sIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzIGZvciB3aGljaCBpdCBpcyBhIG5vcC4KKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTk9QXSwKKyBbCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MDI0ODQ0NzkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVsb2NhdGFibGUubTQgc2VyaWFsIDE3CisrIyByZWxvY2F0YWJsZS5tNCBzZXJpYWwgMTYKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNCw2ICsxNCw5IEBAIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV0sCisgWworICAgQUNfUkVRVUlSRShbZ2xfUkVMT0NBVEFCTEVfQk9EWV0pCisgICBnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZCisrICBpZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorKyAgICBBQ19MSUJPQkooW3Byb2dyZWxvY10pCisrICBmaQorICAgOiAke1JFTE9DQVRBQkxFX0NPTkZJR19IX0RJUj0nJCh0b3BfYnVpbGRkaXIpJ30KKyAgIFJFTE9DQVRBQkxFX1NSQ19ESVI9IlwkKHRvcF9zcmNkaXIpLyRnbF9zb3VyY2VfYmFzZSIKKyAgIFJFTE9DQVRBQkxFX0JVSUxEX0RJUj0iXCQodG9wX2J1aWxkZGlyKS8kZ2xfc291cmNlX2Jhc2UiCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2FmZS1yZWFkLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2FmZS1yZWFkLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NhZmUtcmVhZC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2FmZS1yZWFkLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODEwNDg0NDgwIC0wODAwCitAQCAtMSwxMCArMSwxNyBAQAorLSMgc2FmZS1yZWFkLm00IHNlcmlhbCA2CisrIyBzYWZlLXJlYWQubTQgc2VyaWFsIDUKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyBkbmwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCisrQUNfREVGVU4oW2dsX1NBRkVfUkVBRF0sCisrWworKyAgQUNfTElCT0JKKFtzYWZlLXJlYWRdKQorKworKyAgZ2xfUFJFUkVRX1NBRkVfUkVBRAorK10pCisrCisgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zYWZlLXJlYWQuYy4KKyBBQ19ERUZVTihbZ2xfUFJFUkVRX1NBRkVfUkVBRF0sCisgWworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NldGVudi5tNCBsaWJpY29udi0xLjE0L3NyY200L3NldGVudi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zZXRlbnYubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NldGVudi5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgxODQ4NDQ4MSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXRlbnYubTQgc2VyaWFsIDI0CisrIyBzZXRlbnYubTQgc2VyaWFsIDIyCisgZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMzgsNiArMzgsOSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19TRVRFTlZdLAorICAgICAgIFJFUExBQ0VfU0VURU5WPTEKKyAgICAgZmkKKyAgIGZpCisrICBpZiB0ZXN0ICRIQVZFX1NFVEVOViRSRVBMQUNFX1NFVEVOViAhPSAxMDsgdGhlbgorKyAgICBBQ19MSUJPQkooW3NldGVudl0pCisrICBmaQorIF0pCisgCisgIyBMaWtlIGdsX0ZVTkNfU0VURU5WLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24KK0BAIC02Miw5ICs2NSw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1VOU0VURU5WXSwKKyAgIGZpCisgICBBQ19DSEVDS19GVU5DUyhbdW5zZXRlbnZdKQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY191bnNldGVudiA9IG5vOyB0aGVuCistICAgIEhBVkVfVU5TRVRFTlY9MAorKyAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKKysgICAgZ2xfUFJFUkVRX1VOU0VURU5WCisgICBlbHNlCistICAgIEhBVkVfVU5TRVRFTlY9MQorICAgICBkbmwgU29tZSBCU0RzIHJldHVybiB2b2lkLCBmYWlsaW5nIHRvIGRvIGVycm9yIGNoZWNraW5nLgorICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2V0ZW52KCkgcmV0dXJuIHR5cGVdLCBbZ3RfY3ZfZnVuY191bnNldGVudl9yZXRdLAorICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKK0BAIC05MCw2ICs5Myw3IEBAIGludCB1bnNldGVudigpOworICAgICAgIEFDX0RFRklORShbVk9JRF9VTlNFVEVOVl0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHVuc2V0ZW52IHJldHVybnMgdm9pZAorICAgICAgICBpbnN0ZWFkIG9mIGludC5dKQorICAgICAgIFJFUExBQ0VfVU5TRVRFTlY9MQorKyAgICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorICAgICBmaQorIAorICAgICBkbmwgU29sYXJpcyAxMCB1bnNldGVudiBkb2VzIG5vdCByZW1vdmUgYWxsIGNvcGllcyBvZiBhIG5hbWUuCitAQCAtMTIyLDYgKzEyNiw3IEBAIGludCB1bnNldGVudigpOworICAgICAgIFtnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzPSJndWVzc2luZyBubyJdKV0pCisgICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBSRVBMQUNFX1VOU0VURU5WPTEKKysgICAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKKyAgICAgZmkKKyAgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxibG9ja2luZy5tNCBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbGJsb2NraW5nLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbGJsb2NraW5nLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxibG9ja2luZy5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgzNDQ4NDQ4MiAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzaWduYWxibG9ja2luZy5tNCBzZXJpYWwgMTIKKysjIHNpZ25hbGJsb2NraW5nLm00IHNlcmlhbCAxMAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEyLDE0ICsxMiwzMSBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgQUNfREVGVU4oW2dsX1NJR05BTEJMT0NLSU5HXSwKKyBbCisgICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCistICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSkKKy0gIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgPSB5ZXM7IHRoZW4KKysgIHNpZ25hbHNfbm90X3Bvc2l4PQorKyAgQUNfRUdSRVBfSEVBREVSKFtzaWdzZXRfdF0sIFtzaWduYWwuaF0sICwgW3NpZ25hbHNfbm90X3Bvc2l4PTFdKQorKyAgaWYgdGVzdCAteiAiJHNpZ25hbHNfbm90X3Bvc2l4IjsgdGhlbgorICAgICBBQ19DSEVDS19GVU5DKFtzaWdwcm9jbWFza10sIFtnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrPTFdKQorICAgZmkKKyAgIGlmIHRlc3QgLXogIiRnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrIjsgdGhlbgorICAgICBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HPTAKKysgICAgQUNfTElCT0JKKFtzaWdwcm9jbWFza10pCisrICAgIGdsX1BSRVJFUV9TSUdQUk9DTUFTSworICAgZmkKKyBdKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2lncHJvY21hc2suYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NJR1BST0NNQVNLXSwgWzpdKQorKyMgUHJlcmVxdWlzaXRlcyBvZiB0aGUgcGFydCBvZiBsaWIvc2lnbmFsLmluLmggYW5kIG9mIGxpYi9zaWdwcm9jbWFzay5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfU0lHUFJPQ01BU0tdLAorK1sKKysgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKysgIEFDX0NIRUNLX1RZUEVTKFtzaWdzZXRfdF0sCisrICAgIFtnbF9jdl90eXBlX3NpZ3NldF90PXllc10sIFtnbF9jdl90eXBlX3NpZ3NldF90PW5vXSwKKysgICAgWyNpbmNsdWRlIDxzaWduYWwuaD4KKysvKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0pCisrICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ICE9IHllczsgdGhlbgorKyAgICBIQVZFX1NJR1NFVF9UPTAKKysgIGZpCisrICBkbmwgSEFWRV9TSUdTRVRfVCBpcyAxIGlmIHRoZSBzeXN0ZW0gbGFja3MgdGhlIHNpZ3Byb2NtYXNrIGZ1bmN0aW9uIGJ1dCBoYXMKKysgIGRubCB0aGUgc2lnc2V0X3QgdHlwZS4KKysgIEFDX1NVQlNUKFtIQVZFX1NJR1NFVF9UXSkKKytdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbF9oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsX2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbF9oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODI2NDg0NDgwIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNpZ25hbF9oLm00IHNlcmlhbCAxNgorKyMgc2lnbmFsX2gubTQgc2VyaWFsIDEyCisgZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTcsNyArNyw2IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfU0lHTkFMX0hdLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdKQorICAgZ2xfTkVYVF9IRUFERVJTKFtzaWduYWwuaF0pCisgCisgIyBBSVggZGVjbGFyZXMgc2lnX2F0b21pY190IHRvIGFscmVhZHkgaW5jbHVkZSB2b2xhdGlsZSwgYW5kIEM4OSBjb21waWxlcnMKK0BAIC0yOCwyNSArMjcsMTAgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9IXSwKKyAgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorICAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzaWduYWwuaD4KKy0gICAgXV0sIFtwdGhyZWFkX3NpZ21hc2sgc2lnYWN0aW9uCistICAgIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnZmlsbHNldCBzaWdpc21lbWJlcgorKyAgICBdXSwgW3NpZ2FjdGlvbiBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2ZpbGxzZXQgc2lnaXNtZW1iZXIKKyAgICAgc2lncGVuZGluZyBzaWdwcm9jbWFza10pCisgXSkKKyAKKy1BQ19ERUZVTihbZ2xfQ0hFQ0tfVFlQRV9TSUdTRVRfVF0sCistWworLSAgQUNfQ0hFQ0tfVFlQRVMoW3NpZ3NldF90XSwKKy0gICAgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9eWVzXSwgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9bm9dLAorLSAgICBbWworLSAgICAgICNpbmNsdWRlIDxzaWduYWwuaD4KKy0gICAgICAvKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCistICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSAgICBdXSkKKy0gIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgIT0geWVzOyB0aGVuCistICAgIEhBVkVfU0lHU0VUX1Q9MAorLSAgZmkKKy1dKQorLQorIEFDX0RFRlVOKFtnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUl0sCisgWworICAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KK0BAIC01OCwxMyArNDIsMTEgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SXSwKKyAKKyBBQ19ERUZVTihbZ2xfU0lHTkFMX0hfREVGQVVMVFNdLAorIFsKKy0gIEdOVUxJQl9QVEhSRUFEX1NJR01BU0s9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9QVEhSRUFEX1NJR01BU0tdKQorICAgR05VTElCX1NJR05BTF9IX1NJR1BJUEU9MDsgICBBQ19TVUJTVChbR05VTElCX1NJR05BTF9IX1NJR1BJUEVdKQorICAgR05VTElCX1NJR1BST0NNQVNLPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1NJR1BST0NNQVNLXSkKKyAgIEdOVUxJQl9TSUdBQ1RJT049MDsgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TSUdBQ1RJT05dKQorICAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MTsgQUNfU1VCU1QoW0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkddKQorLSAgSEFWRV9QVEhSRUFEX1NJR01BU0s9MTsgICAgICBBQ19TVUJTVChbSEFWRV9QVEhSRUFEX1NJR01BU0tdKQorICAgSEFWRV9TSUdTRVRfVD0xOyAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdTRVRfVF0pCisgICBIQVZFX1NJR0lORk9fVD0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0lORk9fVF0pCisgICBIQVZFX1NJR0FDVElPTj0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0FDVElPTl0pCitAQCAtNzMsNSArNTUsNCBAQCBBQ19ERUZVTihbZ2xfU0lHTkFMX0hfREVGQVVMVFNdLAorICAgSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVD0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVF0pCisgICBIQVZFX1NJR0hBTkRMRVJfVD0xOyAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0hBTkRMRVJfVF0pCistICBSRVBMQUNFX1BUSFJFQURfU0lHTUFTSz0wOyAgIEFDX1NVQlNUKFtSRVBMQUNFX1BUSFJFQURfU0lHTUFTS10pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdGF0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RhdC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdGF0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdGF0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuODU0NDg0NDgzIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA4CisrIyBzZXJpYWwgNworIAorICMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworQEAgLTU4LDExICs1OCw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1NUQVRdLAorICAgICAgIEFDX0RFRklORShbUkVQTEFDRV9GVU5DX1NUQVRfRklMRV0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMKKyAgICAgICAgIGhlbHAgd2hlbiBwYXNzZWQgYSBmaWxlIG5hbWUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoXSk7OworICAgZXNhYworLV0pCistCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdGF0LmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9TVEFUXSwKKy1bCistICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCistICA6CisrICBpZiB0ZXN0ICRSRVBMQUNFX1NUQVQgPSAxOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc3RhdF0pCisrICAgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdGF0LmMuCisrICAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKysgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJlcnJvci5tNCBsaWJpY29udi0xLjE0L3NyY200L3N0cmVycm9yLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmVycm9yLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJlcnJvci5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjg5MDQ4NDQ4NCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzdHJlcnJvci5tNCBzZXJpYWwgMTYKKysjIHN0cmVycm9yLm00IHNlcmlhbCA5CisgZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTYsNzMgKzYsNjMgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIAorIEFDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SXSwKKyBbCisrICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SX1NFUEFSQVRFXSkKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc3RyZXJyb3JdKQorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1JFUExBQ0VfU1RSRVJST1JdLCBbJFJFUExBQ0VfU1RSRVJST1JdLAorKyAgICAgIFtEZWZpbmUgdGhpcyB0byAxIGlmIHN0cmVycm9yIGlzIGJyb2tlbi5dKQorKyAgZmkKKytdKQorKworKyMgTGlrZSBnbF9GVU5DX1NUUkVSUk9SLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24gKG5vIEFDX0xJQk9CSikuCisrQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEVdLAorK1sKKyAgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCisgICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfRVJSTk9fSF0pCistICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SXzBdKQorLSAgbTRfaWZkZWYoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10sIFsKKy0gICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSkKKy0gIF0pCistICBpZiB0ZXN0ICIkRVJSTk9fSDokUkVQTEFDRV9TVFJFUlJPUl8wIiA9IDowOyB0aGVuCisrICBpZiB0ZXN0IC16ICIkRVJSTk9fSCI7IHRoZW4KKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIHN0cmVycm9yIGZ1bmN0aW9uXSwKKyAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3JdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICAgICAgICBdXSwKKy0gICAgICAgICAgIFtbaWYgKCEqc3RyZXJyb3IgKC0yKSkgcmV0dXJuIDE7XV0pXSwKKysgICAgICAgICAgIFtbcmV0dXJuICEqc3RyZXJyb3IgKC0yKTtdXSldLAorICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj15ZXNdLAorICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj1ub10sCistICAgICAgICBbZG5sIEJlIHBlc3NpbWlzdGljIG9uIGNyb3NzLWNvbXBpbGVzIGZvciBub3cuCistICAgICAgICAgZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPSJndWVzc2luZyBubyJdKQorKyAgICAgICAgW2RubCBBc3N1bWUgY3Jvc3NidWlsZCB3b3JrcyBpZiBpdCBjb21waWxlcy4KKysgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKysgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisrICAgICAgICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKysgICAgICAgICAgICAgIF1dLAorKyAgICAgICAgICAgICAgW1tyZXR1cm4gISpzdHJlcnJvciAoLTIpO11dKV0sCisrICAgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPXllc10sCisrICAgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPW5vXSkKKysgICAgICBdKQorICAgICBdKQorLSAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yIiAhPSB5ZXM7IHRoZW4KKysgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yID0gbm87IHRoZW4KKyAgICAgICBkbmwgVGhlIHN5c3RlbSdzIHN0cmVycm9yKCkgZmFpbHMgdG8gcmV0dXJuIGEgc3RyaW5nIGZvciBvdXQtb2YtcmFuZ2UKKyAgICAgICBkbmwgaW50ZWdlcnMuIFJlcGxhY2UgaXQuCisgICAgICAgUkVQTEFDRV9TVFJFUlJPUj0xCisgICAgIGZpCistICAgIG00X2lmZGVmKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdLCBbCistICAgICAgZG5sIElmIHRoZSBzeXN0ZW0ncyBzdHJlcnJvcl9yIG9yIF9feHBnX3N0cmVycm9yX3IgY2xvYmJlcnMgc3RyZXJyb3IncworLSAgICAgIGRubCBidWZmZXIsIHdlIG11c3QgcmVwbGFjZSBzdHJlcnJvci4KKy0gICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzIiBpbgorLSAgICAgICAgKm5vKSBSRVBMQUNFX1NUUkVSUk9SPTEgOzsKKy0gICAgICBlc2FjCistICAgIF0pCisgICBlbHNlCisgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBjYW5ub3Qga25vdyBhYm91dCB0aGUgbmV3IGVycm5vIHZhbHVlcyB3ZSBhZGQKKy0gICAgZG5sIHRvIDxlcnJuby5oPiwgb3IgYW55IGZpeCBmb3Igc3RyZXJyb3IoMCkuIFJlcGxhY2UgaXQuCisrICAgIGRubCB0byA8ZXJybm8uaD4uIFJlcGxhY2UgaXQuCisgICAgIFJFUExBQ0VfU1RSRVJST1I9MQorICAgZmkKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCisrICAgIGdsX1BSRVJFUV9TVFJFUlJPUgorKyAgZmkKKyBdKQorIAorLWRubCBEZXRlY3QgaWYgc3RyZXJyb3IoMCkgcGFzc2VzICh0aGF0IGlzLCBkb2VzIG5vdCBzZXQgZXJybm8sIGFuZCBkb2VzIG5vdAorLWRubCByZXR1cm4gYSBzdHJpbmcgdGhhdCBtYXRjaGVzIHN0cmVycm9yKC0xKSkuCistQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JfMF0sCistWworLSAgUkVQTEFDRV9TVFJFUlJPUl8wPTAKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN0cmVycm9yKDApIHN1Y2NlZWRzXSwKKy0gICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzXSwKKy0gICBbQUNfUlVOX0lGRUxTRSgKKy0gICAgICBbQUNfTEFOR19QUk9HUkFNKAorLSAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgorLSAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CistICAgICAgICAgXV0sCistICAgICAgICAgW1tpbnQgcmVzdWx0ID0gMDsKKy0gICAgICAgICAgIGNoYXIgKnN0cjsKKy0gICAgICAgICAgIGVycm5vID0gMDsKKy0gICAgICAgICAgIHN0ciA9IHN0cmVycm9yICgwKTsKKy0gICAgICAgICAgIGlmICghKnN0cikgcmVzdWx0IHw9IDE7CistICAgICAgICAgICBpZiAoZXJybm8pIHJlc3VsdCB8PSAyOworLSAgICAgICAgICAgaWYgKHN0cnN0ciAoc3RyLCAibmtub3duIikgfHwgc3Ryc3RyIChzdHIsICJuZGVmaW5lZCIpKQorLSAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKy0gICAgICAgICAgIHJldHVybiByZXN1bHQ7XV0pXSwKKy0gICAgICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPXllc10sCistICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz1ub10sCistICAgICAgW2RubCBCZSBwZXNzaW1pc3RpYyBvbiBjcm9zcy1jb21waWxlcyBmb3Igbm93LgorLSAgICAgICBnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3M9Imd1ZXNzaW5nIG5vIl0pCistICBdKQorLSAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3JrcyIgIT0geWVzOyB0aGVuCistICAgIFJFUExBQ0VfU1RSRVJST1JfMD0xCistICAgIEFDX0RFRklORShbUkVQTEFDRV9TVFJFUlJPUl8wXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgc3RyZXJyb3IoMCkKKy0gICAgICBkb2VzIG5vdCByZXR1cm4gYSBtZXNzYWdlIGltcGx5aW5nIHN1Y2Nlc3MuXSkKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cmVycm9yLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJFUlJPUl0sIFsKKysgIEFDX0NIRUNLX0RFQ0xTKFtzdHJlcnJvcl0pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9zb2NrZXQuaF0pCisrICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorKyAgICBkbmwgV2UgY2Fubm90IHVzZSBBQ19DSEVDS19IRUFERVJTX09OQ0UgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UKKysgICAgZG5sIHRoZSBjaGVjayBmb3IgdGhvc2UgaGVhZGVycyB1bmNvbmRpdGlvbmFsOyB5ZXQgY3lnd2luIHJlcG9ydHMKKysgICAgZG5sIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCAoc2luY2Ugb24KKysgICAgZG5sIGN5Z3dpbiwgYWxsIHNvY2tldCBpbmZvcm1hdGlvbiBzaG91bGQgY29tZSBmcm9tIHN5cy9zb2NrZXQuaCkuCisrICAgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2syLmhdKQorICAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmluZ19oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RyaW5nX2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyaW5nX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N0cmluZ19oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODk0NDg0NDg1IC0wODAwCitAQCAtNSw3ICs1LDcgQEAKKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgMjEKKysjIHNlcmlhbCAyMAorIAorICMgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KKyAKK0BAIC0yNyw5ICsyNyw5IEBAIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfQk9EWV0sCisgICBkbmwgZ3VhcmFudGVlZCBieSBDODkuCisgICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICBdXSwKKy0gICAgW2Zmc2wgZmZzbGwgbWVtbWVtIG1lbXBjcHkgbWVtcmNociByYXdtZW1jaHIgc3RwY3B5IHN0cG5jcHkgc3RyY2hybnVsCistICAgICBzdHJkdXAgc3RybmNhdCBzdHJuZHVwIHN0cm5sZW4gc3RycGJyayBzdHJzZXAgc3RyY2FzZXN0ciBzdHJ0b2tfcgorLSAgICAgc3RyZXJyb3JfciBzdHJzaWduYWwgc3RydmVyc2NtcF0pCisrICAgIFttZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBzdHBjcHkgc3RwbmNweSBzdHJjaHJudWwgc3RyZHVwCisrICAgICBzdHJuY2F0IHN0cm5kdXAgc3RybmxlbiBzdHJwYnJrIHN0cnNlcCBzdHJjYXNlc3RyIHN0cnRva19yIHN0cmVycm9yX3IKKysgICAgIHN0cnNpZ25hbCBzdHJ2ZXJzY21wXSkKKyBdKQorIAorIEFDX0RFRlVOKFtnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUl0sCitAQCAtNDMsOCArNDMsNiBAQCBBQ19ERUZVTihbZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1JdLAorIAorIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdLAorIFsKKy0gIEdOVUxJQl9GRlNMPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZGU0xdKQorLSAgR05VTElCX0ZGU0xMPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkZTTExdKQorICAgR05VTElCX01FTUNIUj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNQ0hSXSkKKyAgIEdOVUxJQl9NRU1NRU09MDsgICAgICBBQ19TVUJTVChbR05VTElCX01FTU1FTV0pCisgICBHTlVMSUJfTUVNUENQWT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1QQ1BZXSkKK0BAIC04Miw4ICs4MCw2IEBAIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdLAorICAgR05VTElCX1NUUlZFUlNDTVA9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU1RSVkVSU0NNUF0pCisgICBIQVZFX01CU0xFTj0wOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUJTTEVOXSkKKyAgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCistICBIQVZFX0ZGU0w9MTsgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GRlNMXSkKKy0gIEhBVkVfRkZTTEw9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xMXSkKKyAgIEhBVkVfTUVNQ0hSPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01FTUNIUl0pCisgICBIQVZFX0RFQ0xfTUVNTUVNPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX01FTU1FTV0pCisgICBIQVZFX01FTVBDUFk9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9NRU1QQ1BZXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zeXNfc29ja2V0X2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zeXNfc29ja2V0X2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3lzX3NvY2tldF9oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zeXNfc29ja2V0X2gubTQJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDE3NyArMCwwIEBACistIyBzeXNfc29ja2V0X2gubTQgc2VyaWFsIDIyCistZG5sIENvcHlyaWdodCAoQykgMjAwNS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCistCistZG5sIEZyb20gU2ltb24gSm9zZWZzc29uLgorLQorLUFDX0RFRlVOKFtnbF9IRUFERVJfU1lTX1NPQ0tFVF0sCistWworLSAgQUNfUkVRVUlSRShbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0KKy0gIGRubCBPbiBPU0YvMSwgdGhlIGZ1bmN0aW9ucyByZWN2KCksIHNlbmQoKSwgcmVjdmZyb20oKSwgc2VuZHRvKCkgaGF2ZQorLSAgZG5sIG9sZC1zdHlsZSBkZWNsYXJhdGlvbnMgKHdpdGggcmV0dXJuIHR5cGUgJ2ludCcgaW5zdGVhZCBvZiAnc3NpemVfdCcpCistICBkbmwgdW5sZXNzIF9QT1NJWF9QSUlfU09DS0VUIGlzIGRlZmluZWQuCistICBjYXNlICIkaG9zdF9vcyIgaW4KKy0gICAgb3NmKikKKy0gICAgICBBQ19ERUZJTkUoW19QT1NJWF9QSUlfU09DS0VUXSwgWzFdLAorLSAgICAgICAgW0RlZmluZSB0byAxIGluIG9yZGVyIHRvIGdldCB0aGUgUE9TSVggY29tcGF0aWJsZSBkZWNsYXJhdGlvbnMKKy0gICAgICAgICBvZiBzb2NrZXQgZnVuY3Rpb25zLl0pCistICAgICAgOzsKKy0gIGVzYWMKKy0KKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIDxzeXMvc29ja2V0Lmg+IGlzIHNlbGYtY29udGFpbmVkXSwKKy0gICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZF0sCistICAgIFsKKy0gICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1tdXSldLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZD15ZXNdLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZD1ub10pCistICAgIF0pCistICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQgPSB5ZXM7IHRoZW4KKy0gICAgZG5sIElmIHRoZSBzaHV0ZG93biBmdW5jdGlvbiBleGlzdHMsIDxzeXMvc29ja2V0Lmg+IHNob3VsZCBkZWZpbmUKKy0gICAgZG5sIFNIVVRfUkQsIFNIVVRfV1IsIFNIVVRfUkRXUi4KKy0gICAgQUNfQ0hFQ0tfRlVOQ1MoW3NodXRkb3duXSkKKy0gICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaHV0ZG93biA9IHllczsgdGhlbgorLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIDxzeXMvc29ja2V0Lmg+IGRlZmluZXMgdGhlIFNIVVRfKiBtYWNyb3NdLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dF0sCistICAgICAgICBbCistICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLAorLSAgICAgICAgICAgICAgIFtbaW50IGFbXSA9IHsgU0hVVF9SRCwgU0hVVF9XUiwgU0hVVF9SRFdSIH07XV0pXSwKKy0gICAgICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0PXllc10sCistICAgICAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dD1ub10pCistICAgICAgICBdKQorLSAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dCA9IG5vOyB0aGVuCistICAgICAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKy0gICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gICMgV2UgbmVlZCB0byBjaGVjayBmb3Igd3MydGNwaXAuaCBub3cuCistICBnbF9QUkVSRVFfU1lTX0hfU09DS0VUCistICBBQ19DSEVDS19UWVBFUyhbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsIHNhX2ZhbWlseV90XSwsLFsKKy0gIC8qIHN5cy90eXBlcy5oIGlzIG5vdCBuZWVkZWQgYWNjb3JkaW5nIHRvIFBPU0lYLCBidXQgdGhlCistICAgICBzeXMvc29ja2V0LmggaW4gaTM4Ni11bmtub3duLWZyZWVic2Q0LjEwIGFuZAorLSAgICAgcG93ZXJwYy1hcHBsZS1kYXJ3aW41LjUgcmVxdWlyZWQgaXQuICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistI2VuZGlmCistI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorLSNlbmRpZgorLV0pCistICBpZiB0ZXN0ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlID0gbm87IHRoZW4KKy0gICAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRT0wCistICBmaQorLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCA9IG5vOyB0aGVuCistICAgIEhBVkVfU0FfRkFNSUxZX1Q9MAorLSAgZmkKKy0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgIT0gbm87IHRoZW4KKy0gICAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5XSwKKy0gICAgICBbXSwKKy0gICAgICBbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFk9MF0sCistICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0gICAgICAgI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICistICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistICAgICAgICNlbmRpZgorLSAgICAgICAjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICistICAgICAgICNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorLSAgICAgICAjZW5kaWYKKy0gICAgICBdKQorLSAgZmkKKy0gIGlmIHRlc3QgJEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgPSAwIHx8IHRlc3QgJEhBVkVfU0FfRkFNSUxZX1QgPSAwIFwKKy0gICAgIHx8IHRlc3QgJEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZID0gMDsgdGhlbgorLSAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKy0gIGZpCistICBnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzIKKy0KKy0gIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorLSAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorLSAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWworLS8qIFNvbWUgc3lzdGVtcyByZXF1aXJlIHByZXJlcXVpc2l0ZSBoZWFkZXJzLiAgKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0gICAgXV0sIFtzb2NrZXQgY29ubmVjdCBhY2NlcHQgYmluZCBnZXRwZWVybmFtZSBnZXRzb2NrbmFtZSBnZXRzb2Nrb3B0CistICAgIGxpc3RlbiByZWN2IHNlbmQgcmVjdmZyb20gc2VuZHRvIHNldHNvY2tvcHQgc2h1dGRvd24gYWNjZXB0NF0pCistXSkKKy0KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NZU19IX1NPQ0tFVF0sCistWworLSAgZG5sIENoZWNrIHByZXJlcXVpc2l0ZXMgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IHJlcGxhY2VtZW50LgorLSAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfU09DS0VUX0hFQURFUlNdKQorLSAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFtzeXMvc29ja2V0LmhdKQorLSAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCA9IHllczsgdGhlbgorLSAgICBIQVZFX1NZU19TT0NLRVRfSD0xCistICAgIEhBVkVfV1MyVENQSVBfSD0wCistICBlbHNlCistICAgIEhBVkVfU1lTX1NPQ0tFVF9IPTAKKy0gICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2ggPSB5ZXM7IHRoZW4KKy0gICAgICBIQVZFX1dTMlRDUElQX0g9MQorLSAgICBlbHNlCistICAgICAgSEFWRV9XUzJUQ1BJUF9IPTAKKy0gICAgZmkKKy0gIGZpCistICBBQ19TVUJTVChbSEFWRV9TWVNfU09DS0VUX0hdKQorLSAgQUNfU1VCU1QoW0hBVkVfV1MyVENQSVBfSF0pCistXSkKKy0KKy0jIENvbW1vbiBwcmVyZXF1aXNpdGVzIG9mIHRoZSA8c3lzL3NvY2tldC5oPiByZXBsYWNlbWVudCBhbmQgb2YgdGhlCistIyA8c3lzL3NlbGVjdC5oPiByZXBsYWNlbWVudC4KKy0jIFNldHMgYW5kIHN1YnN0aXR1dGVzIEhBVkVfV0lOU09DSzJfSC4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syXSwKKy1bCistICBtNF9pZmRlZihbZ2xfVU5JU1REX0hfREVGQVVMVFNdLCBbQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKV0pCistICBtNF9pZmRlZihbZ2xfU1lTX0lPQ1RMX0hfREVGQVVMVFNdLCBbQUNfUkVRVUlSRShbZ2xfU1lTX0lPQ1RMX0hfREVGQVVMVFNdKV0pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9zb2NrZXQuaF0pCistICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorLSAgICBkbmwgV2UgY2Fubm90IHVzZSBBQ19DSEVDS19IRUFERVJTX09OQ0UgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UKKy0gICAgZG5sIHRoZSBjaGVjayBmb3IgdGhvc2UgaGVhZGVycyB1bmNvbmRpdGlvbmFsOyB5ZXQgY3lnd2luIHJlcG9ydHMKKy0gICAgZG5sIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCAoc2luY2Ugb24KKy0gICAgZG5sIGN5Z3dpbiwgYWxsIHNvY2tldCBpbmZvcm1hdGlvbiBzaG91bGQgY29tZSBmcm9tIHN5cy9zb2NrZXQuaCkuCistICAgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2syLmhdKQorLSAgZmkKKy0gIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9XSU5TT0NLMl9IPTEKKy0gICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTEKKy0gICAgU1lTX0lPQ1RMX0hfSEFWRV9XSU5TT0NLMl9IPTEKKy0gIGVsc2UKKy0gICAgSEFWRV9XSU5TT0NLMl9IPTAKKy0gIGZpCistICBBQ19TVUJTVChbSEFWRV9XSU5TT0NLMl9IXSkKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9TWVNfU09DS0VUX01PRFVMRV9JTkRJQ0FUT1JdLAorLVsKKy0gIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCistICBBQ19SRVFVSVJFKFtnbF9TWVNfU09DS0VUX0hfREVGQVVMVFNdKQorLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKy0gIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKy0gIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCistXSkKKy0KKy1BQ19ERUZVTihbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSwKKy1bCistICBHTlVMSUJfU09DS0VUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TT0NLRVRdKQorLSAgR05VTElCX0NPTk5FQ1Q9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQ09OTkVDVF0pCistICBHTlVMSUJfQUNDRVBUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9BQ0NFUFRdKQorLSAgR05VTElCX0JJTkQ9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQklORF0pCistICBHTlVMSUJfR0VUUEVFUk5BTUU9MDsgQUNfU1VCU1QoW0dOVUxJQl9HRVRQRUVSTkFNRV0pCistICBHTlVMSUJfR0VUU09DS05BTUU9MDsgQUNfU1VCU1QoW0dOVUxJQl9HRVRTT0NLTkFNRV0pCistICBHTlVMSUJfR0VUU09DS09QVD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9HRVRTT0NLT1BUXSkKKy0gIEdOVUxJQl9MSVNURU49MDsgICAgICBBQ19TVUJTVChbR05VTElCX0xJU1RFTl0pCistICBHTlVMSUJfUkVDVj0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUNWXSkKKy0gIEdOVUxJQl9TRU5EPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1NFTkRdKQorLSAgR05VTElCX1JFQ1ZGUk9NPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVDVkZST01dKQorLSAgR05VTElCX1NFTkRUTz0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0VORFRPXSkKKy0gIEdOVUxJQl9TRVRTT0NLT1BUPTA7ICBBQ19TVUJTVChbR05VTElCX1NFVFNPQ0tPUFRdKQorLSAgR05VTElCX1NIVVRET1dOPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfU0hVVERPV05dKQorLSAgR05VTElCX0FDQ0VQVDQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQUNDRVBUNF0pCistICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFPTE7IEFDX1NVQlNUKFtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFXSkKKy0gIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZPTE7CistICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZXSkKKy0gIEhBVkVfU0FfRkFNSUxZX1Q9MTsgICBBQ19TVUJTVChbSEFWRV9TQV9GQU1JTFlfVF0pCistICBIQVZFX0FDQ0VQVDQ9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfQUNDRVBUNF0pCistXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC93YXJuLW9uLXVzZS5tNCBsaWJpY29udi0xLjE0L3NyY200L3dhcm4tb24tdXNlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3dhcm4tb24tdXNlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC93YXJuLW9uLXVzZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjkzNDQ4NDQ4NyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyB3YXJuLW9uLXVzZS5tNCBzZXJpYWwgNAorKyMgd2Fybi1vbi11c2UubTQgc2VyaWFsIDIKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMjcsOCArMjcsNiBAQCBBQ19ERUZVTihbZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRV0sCisgICAgIFtBSF9URU1QTEFURShbSEFWRV9SQVdfREVDTF9dQVNfVFJfQ1BQKG00X2RlZm4oW2dsX2RlY2xdKSksCisgICAgICAgW0RlZmluZSB0byAxIGlmIF1tNF9kZWZuKFtnbF9kZWNsXSlbIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgICAgICAgdW5kZWZpbmluZyBtYWNyb3MuXSldKWRubAorLWRubCBGSVhNRTogZ2xfU3ltYm9sIG11c3QgYmUgdXNlZCB1bnF1b3RlZCB1bnRpbCB3ZSBjYW4gYXNzdW1lCistZG5sIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgICBmb3IgZ2xfZnVuYyBpbiBtNF9mbGF0dGVuKFskMl0pOyBkbworICAgICBBU19WQVJfUFVTSERFRihbZ2xfU3ltYm9sXSwgW2dsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmNdKWRubAorICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm9dLAorQEAgLTM3LDggKzM1LDggQEAgZG5sIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgW0AlOkB1bmRlZiAkZ2xfZnVuYworICAgKHZvaWQpICRnbF9mdW5jO10pXSwKKyAgICAgICAgIFtBU19WQVJfU0VUKGdsX1N5bWJvbCwgW3llc10pXSwgW0FTX1ZBUl9TRVQoZ2xfU3ltYm9sLCBbbm9dKV0pXSkKKy0gICAgQVNfVkFSX0lGKGdsX1N5bWJvbCwgW3llc10sCistICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoW0hBVkVfUkFXX0RFQ0xfJGdsX2Z1bmNdKSwgWzFdKQorKyAgICAgQVNfVkFSX0lGKGdsX1N5bWJvbCwgW3llc10sCisrICAgICAgIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFX1JBV19ERUNMXyRnbF9mdW5jXSksIFsxXSkKKyAgICAgICAgZG5sIHNob3J0Y3V0IC0gaWYgdGhlIHJhdyBkZWNsYXJhdGlvbiBleGlzdHMsIHRoZW4gc2V0IGEgY2FjaGUKKyAgICAgICAgZG5sIHZhcmlhYmxlIHRvIGFsbG93IHNraXBwaW5nIGFueSBsYXRlciBBQ19DSEVDS19ERUNMIGVmZm9ydHMKKyAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYXV0b2NvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2F1dG9jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzRjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2F1dG9jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0l0IGFkZHMgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBuZWVkZWQKK2ZvciBhdXRvY29uZiAyLjY1IHRvIHJlY29uZmlndXJlIGxpYmljb252IGFuZCBkZWxldGUgdGhlIG00IG1hY3JvcworZGlyZWN0b3J5LiBJdHMgaW1wb3J0ZWQgZnJvbSBPRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJpY29udi0xLjEzLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMy4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMy4xL2NvbmZpZ3VyZS5hYworQEAgLTIzLDcgKzIzLDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQU1fSU5JVF9BVVRPTUFLRShbbGliaWNvbnZdLCBbMS4xMy4xXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmggbGliL2NvbmZpZy5oXSkKKyBBQ19QUk9HX01BS0VfU0VUCistCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIAorIEFDX1BST0dfQ0MKK0luZGV4OiBsaWJpY29udi0xLjEzLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjEzLjEub3JpZy9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTMuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworQEAgLTE2LDE3ICsxNiwxNyBAQCBkbmwgYWxvbmcgd2l0aCB0aGUgR05VIENIQVJTRVQgTGlicmFyeTsKKyBkbmwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorIGRubCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgCistQUNfUFJFUkVRKFsyLjEzXSkKKytBQ19QUkVSRVEoMi42MSkKKytBQ19JTklUKFtsaWJjaGFyc2V0XSxbMS40XSApCisrQUNfQ09ORklHX1NSQ0RJUihbbGliL2xvY2FsY2hhcnNldC5jXSkKKyAKKy1QQUNLQUdFPWxpYmNoYXJzZXQKKy1WRVJTSU9OPTEuNAorLQorLUFDX0lOSVQoW2xpYi9sb2NhbGNoYXJzZXQuY10pCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQUNfQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorIEFDX1BST0dfTUFLRV9TRVQKKy1BQ19TVUJTVChbUEFDS0FHRV0pCistQUNfU1VCU1QoW1ZFUlNJT05dKQorK2RubCBBQ19TVUJTVChQQUNLQUdFKQorK2RubCBBQ19TVUJTVChWRVJTSU9OKQorKworK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyAKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTEuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U0Yjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiQ2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdOVSBsaWJpY29udiAtIGxpYmljb252IGlzIGZvciB5b3UgaWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBzdXBwb3J0IFwKK211bHRpcGxlIGNoYXJhY3RlciBlbmNvZGluZ3MsIGJ1dCB0aGF0IHN1cHBvcnQgbGFja3MgZnJvbSB5b3VyIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYiCitTRUNUSU9OID0gImxpYnMiCitOT1RFUyA9ICJOZWVkcyB0byBiZSBzdHJpcHBlZCBkb3duIHRvOiBhc2NpaSBpc284ODU5LTEgZXVjanAgaXNvLTIwMjJqcCBnYiB1dGY4IgorUFJPVklERVMgPSAidmlydHVhbC9saWJpY29udiIKKworTElDRU5TRSA9ICJMR1BMdjIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJjaGFyc2V0L0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9jb25mLnBhdGNoIFwKKwkgICBmaWxlOi8vc2hhcmVkX3ByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDJiOTdmNmVmNWRkMGJhNDQ2OWQ1MjBlZDczMmZlZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzhjMzQ3YTFhMGNiMTVmMjY0ODUxOWU5Nzk5MTUxZjRiNGE5MzRiNjFhZDllZTc0MjQ0NzhlZmUyYjgyNTdmIgorCitTID0gIiR7V09SS0RJUn0vbGliaWNvbnYtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmljb252IGlzIHByb3ZpZGVkIGZvciB1c2Ugd2l0aCB1Q2xpYmMgb25seSAtIGdsaWJjIGFscmVhZHkgcHJvdmlkZXMgaWNvbnYiKQorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgLS1lbmFibGUtcmVsb2NhdGFibGUiCisKK0xFQURfU09OQU1FID0gImxpYmljb252LnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9saWJ0b29sLm00ICR7U30vbTQvbHRvcHRpb25zLm00ICR7U30vbTQvbHRzdWdhci5tNCAke1N9L200L2x0dmVyc2lvbi5tNCAke1N9L200L2x0fm9ic29sZXRlLm00ICR7U30vbGliY2hhcnNldC9tNC9saWJ0b29sLm00ICR7U30vbGliY2hhcnNldC9tNC9sdG9wdGlvbnMubTQgJHtTfS9saWJjaGFyc2V0L200L2x0c3VnYXIubTQgJHtTfS9saWJjaGFyc2V0L200L2x0dmVyc2lvbi5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR+b2Jzb2xldGUubTQKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisgICAgICAgICMgZm9yY2libHkgcmVtb3ZlIFJQQVRIIGZyb20gbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XmhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Lip8aGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iInxnJyAqbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XnJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRIfHJ1bnBhdGhfdmFyPV9OT19SUEFUSF98ZycgKmxpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmljb252LnNvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2ZmUwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTQuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJDaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR05VIGxpYmljb252IC0gbGliaWNvbnYgaXMgZm9yIHlvdSBpZiB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHN1cHBvcnQgXAorbXVsdGlwbGUgY2hhcmFjdGVyIGVuY29kaW5ncywgYnV0IHRoYXQgc3VwcG9ydCBsYWNrcyBmcm9tIHlvdXIgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiIKK1NFQ1RJT04gPSAibGlicyIKK05PVEVTID0gIk5lZWRzIHRvIGJlIHN0cmlwcGVkIGRvd24gdG86IGFzY2lpIGlzbzg4NTktMSBldWNqcCBpc28tMjAyMmpwIGdiIHV0ZjgiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmljb252IgorUFIgPSAicjEiCitMSUNFTlNFID0gIkxHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJjaGFyc2V0L0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1yZWxvY2F0YWJsZS1tb2R1bGUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImUzNDUwOWIxNjIzY2VjNDQ5ZGZlYjczZDdjZTljNmM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyYjI0ZGVkMTdkNjg3MTkzYzMzNjZkMGViZTdjZGUxZTZiMThmMGRmOGM1NTQzOGFjOTViZTM5ZThhMzA2MTMiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpY29udi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIGQuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKSAhPSAibGludXgiOgorICAgICAgICByZXR1cm4KKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmljb252IGlzIHByb3ZpZGVkIGZvciB1c2Ugd2l0aCB1Q2xpYmMgb25seSAtIGdsaWJjIGFscmVhZHkgcHJvdmlkZXMgaWNvbnYiKQorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgLS1lbmFibGUtcmVsb2NhdGFibGUiCisKK0xFQURfU09OQU1FID0gImxpYmljb252LnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9saWJ0b29sLm00ICR7U30vbTQvbHRvcHRpb25zLm00ICR7U30vbTQvbHRzdWdhci5tNCAke1N9L200L2x0dmVyc2lvbi5tNCAke1N9L200L2x0fm9ic29sZXRlLm00ICR7U30vbGliY2hhcnNldC9tNC9saWJ0b29sLm00ICR7U30vbGliY2hhcnNldC9tNC9sdG9wdGlvbnMubTQgJHtTfS9saWJjaGFyc2V0L200L2x0c3VnYXIubTQgJHtTfS9saWJjaGFyc2V0L200L2x0dmVyc2lvbi5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR+b2Jzb2xldGUubTQKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisgICAgICAgICMgZm9yY2libHkgcmVtb3ZlIFJQQVRIIGZyb20gbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XmhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Lip8aGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iInxnJyAqbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XnJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRIfHJ1bnBhdGhfdmFyPV9OT19SUEFUSF98ZycgKmxpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmljb252LnNvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYS9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYS9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTg4NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTUyIEBACitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorCitBZGQgcGtnY29uZmlnIHN1cHBvcnQgdG8gbGlia3NiYS4KK1RoaXMgcGF0Y2ggaXMgcmVqZWN0ZWQgYnkgdXBzdHJlYW0gZm9yIHRoZSByZWFzb24gYmVsb3c6CitUaGV5IHRoaW5rIHBrZ2NvbmZpZyBhZGRzIG5vIHBvcnRhYmlsaXR5IGFuZCBtYWludGFpbmluZyB0aGVtIGlzIG5vdCB3b3J0aHdoaWxlLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJrc2JhLTEuMy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlia3NiYS0xLjMuMC5vcmlnL01ha2VmaWxlLmFtCTIwMTQtMDUtMTMgMjE6Mzk6MjIuMzkwMzg1NjQ2ICswMDAwCisrKysgbGlia3NiYS0xLjMuMC9NYWtlZmlsZS5hbQkyMDE0LTA1LTEzIDIxOjM5OjIyLjQ2MjM4NTY0NiArMDAwMAorQEAgLTIxLDYgKzIxLDkgQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtSSBnbC9tNAorIEFVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyIG5vLWRpc3QtZ3ppcAorIAorK3BrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGtzYmEucGMKKysKKyAjIChBIHN1aXRhYmxlIGdpdGxvZy10by1jaGFuZ2Vsb2cgc2NyaXB0IGNhbiBiZSBmb3VuZCBpbiBHbnVQRyBtYXN0ZXIuKQorIEdJVExPR19UT19DSEFOR0VMT0c9Z2l0bG9nLXRvLWNoYW5nZWxvZworIAorSW5kZXg6IGxpYmtzYmEtMS4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlia3NiYS0xLjMuMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTEzIDIxOjM5OjIyLjM5MDM4NTY0NiArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMjE6Mzk6MjIuNDYyMzg1NjQ2ICswMDAwCitAQCAtNDAwLDYgKzQwMCw3IEBACisgc3JjL01ha2VmaWxlCisgc3JjL2tzYmEtY29uZmlnCisgc3JjL3ZlcnNpb25pbmZvLnJjCisra3NiYS5wYworIHRlc3RzL01ha2VmaWxlCisgZG9jL01ha2VmaWxlCisgXSkKK0luZGV4OiBsaWJrc2JhLTEuMy4wL2tzYmEucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL2tzYmEucGMuaW4JMjAxNC0wNS0xMyAyMTozOToyMi40NjIzODU2NDYgKzAwMDAKK0BAIC0wLDAgKzEsMTcgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEtTQkFfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QEtTQkFfQ09ORklHX0hPU1RACisrCisrTmFtZToga3NiYQorK0Rlc2NyaXB0aW9uOiBMaWJrc2JhIHByb3ZpZGVzIGFuIGVhc3kgQVBJIHRvIGNyZWF0ZSBhbmQgcGFyc2UgWC41MDkgYW5kIENNUyByZWxhdGVkIG9iamVjdHMKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGtzYmEKKytMaWJzLnByaXZhdGU6IC1Me2xpYmRpcn0gLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorKworSW5kZXg6IGxpYmtzYmEtMS4zLjAvc3JjL2tzYmEubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJrc2JhLTEuMy4wLm9yaWcvc3JjL2tzYmEubTQJMjAxNC0wNS0xMyAyMTozOToyMi4zOTAzODU2NDYgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL3NyYy9rc2JhLm00CTIwMTQtMDUtMTMgMjE6NDk6MDMuNjUwMzgyNjk2ICswMDAwCitAQCAtMjIsMTggKzIyLDcgQEAKKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9LU0JBXSwKKyBbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSBBQ19BUkdfV0lUSChrc2JhLXByZWZpeCwKKy0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWtzYmEtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBLU0JBIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBrc2JhX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwga3NiYV9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JGtzYmFfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAga3NiYV9jb25maWdfYXJncz0iJGtzYmFfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGtzYmFfY29uZmlnX3ByZWZpeCIKKy0gICAgIGlmIHRlc3QgeCR7S1NCQV9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgS1NCQV9DT05GSUc9JGtzYmFfY29uZmlnX3ByZWZpeC9iaW4va3NiYS1jb25maWcKKy0gICAgIGZpCistICBmaQorIAorLSAgQUNfUEFUSF9QUk9HKEtTQkFfQ09ORklHLCBrc2JhLWNvbmZpZywgbm8pCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjEuMC4wLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2tzYmFfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTQzLDQ4ICszMiwxMyBAQAorICAgICAgbWluX2tzYmFfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEtTQkEgLSB2ZXJzaW9uID49ICRtaW5fa3NiYV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRLU0JBX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fa3NiYV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2tzYmFfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9rc2JhX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAga3NiYV9jb25maWdfdmVyc2lvbj1gJEtTQkFfQ09ORklHICRrc2JhX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGtzYmFfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAka3NiYV9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIG1pY3JvPWBlY2hvICRrc2JhX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGtzYmFfY29uZmlnX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhLU0JBLCBba3NiYSA+PSAkbWluX2tzYmFfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorKworICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgRXZlbiBpZiB3ZSBoYXZlIGEgcmVjZW50IGxpYmtzYmEsIHdlIHNob3VsZCBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfa3NiYV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkS1NCQV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24ga3NiYWAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtLU0JBIEFQSSB2ZXJzaW9uXSkKKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfa3NiYV9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCitAQCAtOTcsMTAgKzUxLDggQEAKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgS1NCQV9DRkxBR1M9YCRLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgS1NCQV9MSUJTPWAkS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorLSAgICBsaWJrc2JhX2NvbmZpZ19ob3N0PWAkTElCS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgbGlia3NiYV9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGtzYmFgCisgICAgIGlmIHRlc3QgeCIkbGlia3NiYV9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgaWYgdGVzdCB4IiRsaWJrc2JhX2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTE0LDggKzY2LDYgQEAKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorLSAgICBLU0JBX0NGTEFHUz0iIgorLSAgICBLU0JBX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChLU0JBX0NGTEFHUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuMy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmtzYmEvbGlia3NiYV8xLjMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzIxMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRWFzeSBBUEkgdG8gY3JlYXRlIGFuZCBwYXJzZSBYLjUwOSBhbmQgQ01TIHJlbGF0ZWQgb2JqZWN0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGlia3NiYS8iCitMSUNFTlNFID0gIkdQTHYyKyB8IExHUEx2MysgfCBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDU0MWQ4M2Y3NWQwMzhjNGUwNjE3YjY3MmVkOGJkYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT0yZjMxYjI2NmQzNDQwZGQ3ZWU1MGY5MmNmNjdkOGU2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIgXAorICAgICAgICAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0va3NiYS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgdGV4aW5mbworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImE1ZGQzYzU3ZmNhMjU0OTM1ZjVjZjhkYjI2ZTM5MDY1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBjN2Y1ZmZlMzRkMDQxNGY2OTUxZDk4ODBhNDZmY2MyOTg1YzQ4N2Y3YzM2MzY5YjlmMTFhZDQxMTMxYzc3ODYiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNzQyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjLmluYwpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBjb21wbGV4IG51bWJlciBhcml0aG1ldGljIHdpdGggYXJiaXRyYXJ5IHByZWNpc2lvbiBhbmQgY29ycmVjdCByb3VuZGluZyIKK0RFU0NSSVBUSU9OID0gIk1wYyBpcyBhIEMgbGlicmFyeSBmb3IgdGhlIGFyaXRobWV0aWMgb2YgY29tcGxleCBudW1iZXJzIHdpdGggYXJiaXRyYXJpbHkgaGlnaCBwcmVjaXNpb24gYW5kIGNvcnJlY3Qgcm91bmRpbmcgb2YgdGhlIHJlc3VsdC4gSXQgaXMgYnVpbHQgdXBvbiBhbmQgZm9sbG93cyB0aGUgc2FtZSBwcmluY2lwbGVzIGFzIE1wZnIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm11bHRpcHJlY2lzaW9uLm9yZy8iCitMSUNFTlNFID0gIkxHUEx2MyIKK1NFQ1RJT04gPSAibGlicyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wY18xLjAuMy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGNfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlNWExOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGNfMS4wLjMuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBsaWJtcGMuaW5jCisKK0RFUEVORFMgPSAiZ21wIG1wZnIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvbXBjL2Rvd25sb2FkL21wYy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNmExZDVmOGRkZWEzYWJkMmNjM2U5OGY1ODM1MmQyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MTdkZWNjNmVhMDk4ODlmYjA4ZWRlMzMwOTE3YTAwYjE2ODA5YjhkYjg4YzI5YzMxYmZiYjQ5Y2JmODhlY2MzIgorCitTID0gIiR7V09SS0RJUn0vbXBjLSR7UFZ9IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGMtZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wYy1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOGI4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGMtZmlsZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU29tZSBwYWNrYWdlcyBhcmUgYXNraW5nIG9ubHkgZm9yIGxpYm5sLTIuMCwgYnV0IGV4cGVjdHMgdG8gZ2V0IGFsc28KK2xpYm5sLWdlbmwsIGxpYm5sLW5mIGxpYm5sLXJvdXRlLCBlYXNpZXN0IHdheSB0byBmaXggdGhlbSBpcyBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CitJbmRleDogbGlibmwtMy4yLjE0L2xpYm5sLTMuMC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm5sLTMuMi4xNC5vcmlnL2xpYm5sLTMuMC5wYy5pbgorKysrIGxpYm5sLTMuMi4xNC9saWJubC0zLjAucGMuaW4KK0BAIC02LDUgKzYsNSBAQCBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorIE5hbWU6IGxpYm5sCisgRGVzY3JpcHRpb246IENvbnZlbmllbmNlIGxpYnJhcnkgZm9yIG5ldGxpbmsgc29ja2V0cworIFZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACistTGliczogLUwke2xpYmRpcn0gLWxubC1ATUFKX1ZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxubC1ATUFKX1ZFUlNJT05AIC1sbmwtZ2VubC1ATUFKX1ZFUlNJT05AIC1sbmwtbmYtQE1BSl9WRVJTSU9OQCAtbG5sLXJvdXRlLUBNQUpfVkVSU0lPTkAKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9saWJubEBNQUpfVkVSU0lPTkAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wa3Rsb2Nfc3ludGF4X2gtcmFjZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wa3Rsb2Nfc3ludGF4X2gtcmFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWFhMGJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworbGlibmwgaGFzIHByb2dyZXNzZWQgdG8gMC4zLjIgYW5kIHRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhbnkKKyJtYWtlIC1qIiBpc3N1ZXMgd2l0aCB0aGlzIGJ1aWxkIGFmdGVyIG15IGxpbWl0ZWQgdGVzdGluZyBvbiB0aGF0CituZXdlciB2ZXJzaW9uIHNvIHdlIGNhbiBhc3N1bWUgdGhpcyBpc3N1ZSBpcyBmaXhlZCB1cHN0cmVhbQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJubC0zLjIuMjUvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibmwtMy4yLjI1Lm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgbGlibmwtMy4yLjI1L2xpYi9NYWtlZmlsZS5hbQorQEAgLTQ2LDkgKzQ2LDEyIEBAIENMRUFORklMRVMgPSBcCisgCisgIyBIYWNrIHRvIGF2b2lkIHVzaW5nIHlsd3JhcC4gSXQgZG9lcyBub3QgZnVuY3Rpb24gY29ycmVjdGx5IGluIGNvbWJpbmF0aW9uCisgIyB3aXRoIC0taGVhZGVyLWZpbGU9Cisrcm91dGUvcGt0bG9jLmxvOiByb3V0ZS9wa3Rsb2Nfc3ludGF4Lmggcm91dGUvcGt0bG9jX2dyYW1tYXIuaAorK3JvdXRlL3BrdGxvY19ncmFtbWFyLmg6IHJvdXRlL3BrdGxvY19ncmFtbWFyLmMKKyByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5jOiByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5sCisgCSQoQU1fVl9HRU4pICQoTUtESVJfUCkgcm91dGU7ICQoRkxFWCkgLS1oZWFkZXItZmlsZT1yb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oICQoTEZMQUdTKSAtbyAkQCAkXgorIAorK3JvdXRlL3BrdGxvY19zeW50YXguaDogcm91dGUvcGt0bG9jX3N5bnRheC5jCisgcm91dGUvcGt0bG9jX3N5bnRheC5jOiByb3V0ZS9wa3Rsb2Nfc3ludGF4LnkKKyAJJChBTV9WX0dFTikgJChNS0RJUl9QKSByb3V0ZTsgJChZQUNDKSAtZCAkKFlGTEFHUykgLW8gJEAgJF4KKyAKK0BAIC0xMDIsNyArMTA1LDkgQEAgQlVJTFRfU09VUkNFUyA9IFwKKyAJcm91dGUvY2xzL2VtYXRjaF9ncmFtbWFyLmMgXAorIAlyb3V0ZS9jbHMvZW1hdGNoX3N5bnRheC5jIFwKKyAJcm91dGUvcGt0bG9jX2dyYW1tYXIuYyBcCistCXJvdXRlL3BrdGxvY19zeW50YXguYworKyAgIHJvdXRlL3BrdGxvY19zeW50YXguYyBcCisrICAgcm91dGUvcGt0bG9jX3N5bnRheC5oIFwKKysgICByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oCisgCisgRVhUUkFfRElTVCA9IFwKKyAJcm91dGUvcGt0bG9jX2dyYW1tYXIubCBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubF8zLjIuMjUuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubF8zLjIuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4MTRmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXBwbGljYXRpb25zIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHNvY2tldHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZnJhZGVhZC5vcmcvfnRnci9saWJubC8iCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworUEUgPSAiMSIKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaW5mcmFkZWFkLm9yZy9+dGdyLyR7QlBOfS9maWxlcy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYy1maWxlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwM2Y3NGQwY2Q1MDM3Y2FkYzhjZGZhMzEzYmJkMTk1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YmViNzU5MDY3NDk1N2I5MzFkZTZiN2Y4MWM1MzBiODVkYzdjMWFkOGZiZGEwMTUzOThiYzFlOGQxY2U4ZWM1IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYm5sLTMuc28uKiBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwuc28uKiBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9IgorUlJFUExBQ0VTXyR7UE59ID0gImxpYm5sMiIKK1JDT05GTElDVFNfJHtQTn0gPSAibGlibmwyIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovKi5zbyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovKi5hIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY2xpICR7UE59LXJvdXRlICR7UE59LW5mICR7UE59LWdlbmwgJHtQTn0taWRpYWciCitGSUxFU18ke1BOfS1jbGkgICA9ICIke2xpYmRpcn0vbGlibmwtY2xpLTMuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwvY2xpLyovKi5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vbmwtKiIKK0ZJTEVTXyR7UE59LXJvdXRlID0gIiR7bGliZGlyfS9saWJubC1yb3V0ZS0zLnNvLioiCitGSUxFU18ke1BOfS1pZGlhZyA9ICIke2xpYmRpcn0vbGlibmwtaWRpYWctMy5zby4qIgorRklMRVNfJHtQTn0tbmYgICAgPSAiJHtsaWJkaXJ9L2xpYm5sLW5mLTMuc28uKiIKK0ZJTEVTXyR7UE59LWdlbmwgID0gIiR7bGliZGlyfS9saWJubC1nZW5sLTMuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwtZ2VubC5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vZ2VubC1jdHJsLWxpc3QiCitSUkVQTEFDRVNfJHtQTn0tZ2VubCA9ICJsaWJubC1nZW5sMiBsaWJubC1nZW5sLTMtMjAwIgorUkNPTkZMSUNUU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIGxpYm5sLWdlbmwtMy0yMDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy8wMDAxLUZpeC1lbmFibGUtdmZwLWZsYWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy8wMDAxLUZpeC1lbmFibGUtdmZwLWZsYWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMWNiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0Zyb20gMTkyMTQ5OGJjYzA2NDA4ZThiMDUxYTNhOWU5Y2U0MTgyOTk4Zjc0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorRGF0ZTogRnJpLCA4IEFwciAyMDExIDEwOjA1OjQ5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTBdIEZpeCAtLWVuYWJsZS12ZnAgZmxhZworCitQYXRjaCBmcm9tIENocmlzdG9waGUgTHlvbiwgZml4ZXMgIzM2MDg0LgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICB8ICAgIDQgKystLQorIGxpYm9pbC9hcm0vTWFrZWZpbGUuYW0gfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOThjODFmYi4uNDA3ZDg4YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTg4LDggKzE4OCw4IEBAIGZpCisgQUNfQVJHX0VOQUJMRSh2ZnAsCisgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmZwXSxbY29tcGlsZSB3aXRoIFZlY3RvciBGbG9hdGluZy1wb2ludCB1bml0IHN1cHBvcnRdKSwKKyAgIGVuYWJsZV92ZnA9JGVuYWJsZXZhbCxlbmFibGVfdmZwPXllcykKKy1pZiB0ZXN0ICJ4JGVuYWJsZS12ZnAiID0geHllcyAtYSB4JEhBVkVfR0NDX0FTTSA9IHh5ZXMgLWEgeCRIQVZFX0FSTSA9IHh5ZXM7IHRoZW4KKy0gIEFTX0NPTVBJTEVSX0ZMQUcoWyItV2EsLW1mcHU9dmZwIl0sCisraWYgdGVzdCAieCRlbmFibGVfdmZwIiA9IHh5ZXMgLWEgeCRIQVZFX0dDQ19BU00gPSB4eWVzIC1hIHgkSEFWRV9BUk0gPSB4eWVzOyB0aGVuCisrICBBU19DT01QSUxFUl9GTEFHKFsiLW1mcHU9dmZwIl0sCisgICAgIFtWRlBfQ0ZMQUdTPSIkVkZQX0NGTEFHUyAtbWZwdT12ZnAiXSwKKyAgICAgdHJ1ZSkKKyAgICNBU19DT01QSUxFUl9GTEFHKFsiLVdhLC1tZmxvYXQtYWJpPXNvZnRmcCJdLAorZGlmZiAtLWdpdCBhL2xpYm9pbC9hcm0vTWFrZWZpbGUuYW0gYi9saWJvaWwvYXJtL01ha2VmaWxlLmFtCitpbmRleCBlYWQwOGVkLi5jZDhkOWZhIDEwMDY0NAorLS0tIGEvbGlib2lsL2FybS9NYWtlZmlsZS5hbQorKysrIGIvbGlib2lsL2FybS9NYWtlZmlsZS5hbQorQEAgLTYsNCArNiw1IEBAIGxpYmFybV9sYV9TT1VSQ0VTID0gXAorIAltYXRoX3ZmcF9hc20uUworIAorIGxpYmFybV9sYV9DRkxBR1MgPSAkKExJQk9JTF9DRkxBR1MpICQoVkZQX0NGTEFHUykKKytsaWJhcm1fbGFfQ0NBU0ZMQUdTID0gJChMSUJPSUxfQ0ZMQUdTKSAkKFZGUF9DRkxBR1MpCisgCistLSAKKzEuNy42CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlM2MxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTM1OAorCitjb25maWd1cmU6IGZpeCB3aGl0ZWxpc3Rpbmcgb2YgeDg2XzY0IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisKK0ZpeCB0eXBvIGluIHdoaXRlbGlzdCBzbyBjcm9zcy1jb21waWxlIHdvcmtzIGZvciB4ODZfNjQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tIGxpYm9pbC0wLjMuMTcvbTQvYXMtdW5hbGlnbmVkLWFjY2Vzcy5tNC5vcmlnCTIwMDktMDItMjYgMTQ6NDA6MDguMDAwMDAwMDAwIC0wNTAwCisrKysgbGlib2lsLTAuMy4xNy9tNC9hcy11bmFsaWduZWQtYWNjZXNzLm00CTIwMTAtMTEtMDMgMTI6MTk6NTUuMDAwMDAwMDAwIC0wNDAwCitAQCAtOSw3ICs5LDcgQEAKKyAgICAgICAgIF9BU19FQ0hPX04oWyhibGFja2xpc3RlZCkgXSkKKyAgICAgICAgIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9bm8KKyAJOzsKKy0gICAgICBpPzg2Knx4ODZfNjR8YW1kNjR8cG93ZXJwYyp8bTY4ayp8Y3JpcyopCisrICAgICAgaT84Nip8eDg2XzY0KnxhbWQ2NCp8cG93ZXJwYyp8bTY4ayp8Y3JpcyopCisgICAgICAgICBfQVNfRUNIT19OKFsod2hpdGVsaXN0ZWQpIF0pCisgICAgICAgICBhc19jdl91bmFsaWduZWRfYWNjZXNzPXllcworIAk7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbGlib2lsX2ZpeF9mb3JfeDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbGlib2lsX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzM4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwyMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitNYWtlIHRoZSBhc3NlbWJseSBzeW50YXggY29tcGF0aWJsZSB3aXRoIHgzMiBnY2MuIE90aGV3aXNlIHgzMiBnY2MgdGhyb3dzIGVycm9ycy4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMTIvMDEKKworCitJbmRleDogbGlib2lsLTAuMy4xNy9saWJvaWwvYW1kNjQvd2F2ZWxldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlib2lsLTAuMy4xNy5vcmlnL2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKKysrKyBsaWJvaWwtMC4zLjE3L2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKK0BAIC0yMSwxNCArMjEsMTQgQEAgZGVpbnRlcmxlYXZlMl9hc20gKGludDE2X3QgKmQxLCBpbnQxNl90IAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgc3ViICQyLCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdncgKCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3Z3IDIoJTEsJSVyY3gsNCksICUlYXhcbiIKKy0gICAgICAiICBtb3Z3ICUlYXgsICglMiwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgNCglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgMiglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgNiglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgMiglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgKCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgMiglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsICglcTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3Z3IDQoJXExLCUlcmN4LDQpLCAlJWF4XG4iCisrICAgICAgIiAgbW92dyAlJWF4LCAyKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgNiglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsIDIoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgc3ViICQyLCAlJXJjeFxuIgorICAgICAgICIgIGpnZSAxYlxuIgorICAgICAgIDogIityIiAoZDEpLCAiK3IiIChzXzJ4biksICIrciIgKGQyKSwgIitjIiAobikKK0BAIC01MywyMCArNTMsMjAgQEAgZGVpbnRlcmxlYXZlMl9tbXggKGludDE2X3QgKmQxLCBpbnQxNl90IAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBwc2xsZCAkMTYsICUlbW0wXG4iCisgICAgICAgIiAgcHNsbGQgJDE2LCAlJW1tMVxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTBcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0xXG4iCisgICAgICAgIiAgcGFja3NzZHcgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgbW92cSA4KCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0wXG4iCisgICAgICAgIiAgcHNyYWQgJDE2LCAlJW1tMVxuIgorICAgICAgICIgIHBhY2tzc2R3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtOTMsMTAgKzkzLDEwIEBAIGRlaW50ZXJsZWF2ZTJfbW14XzIgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBwc2h1ZncgJDB4ZDgsICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZkICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBwc2h1ZncgJDB4OGQsICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZkICUlbW0wLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBwc2h1ZncgJDB4ZDgsICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92ZCAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBzaHVmdyAkMHg4ZCwgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZkICUlbW0wLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQyLCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTEyMywxNiArMTIzLDE2IEBAIGRlaW50ZXJsZWF2ZTJfbW14XzMgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMCwgJSVtbTFcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTAsICUlbW0yXG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTBcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTIsICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0yLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTE1OSwyNiArMTU5LDI2IEBAIGRlaW50ZXJsZWF2ZTJfbW14XzQgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0xXG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgIG1vdnEgMTYoJTEsJSVyY3gsNCksICUlbW01XG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICAgbW92cSAxNiglcTEsJSVyY3gsNCksICUlbW01XG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0wLCAlJW1tMVxuIgorICAgICAgICIgICBtb3ZxICUlbW01LCAlJW1tNlxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMCwgJSVtbTJcbiIKKy0gICAgICAiICAgbW92cSAyNCglMSwlJXJjeCw0KSwgJSVtbTRcbiIKKysgICAgICAiICAgbW92cSAyNCglcTEsJSVyY3gsNCksICUlbW00XG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTBcbiIKKyAgICAgICAiICAgcHVucGNrbHdkICUlbW00LCAlJW1tNVxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMiwgJSVtbTBcbiIKKyAgICAgICAiICAgcHVucGNraHdkICUlbW00LCAlJW1tNlxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICAgbW92cSAlJW1tNSwgJSVtbTRcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgIHB1bnBja2x3ZCAlJW1tNiwgJSVtbTRcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgIHB1bnBja2h3ZCAlJW1tNiwgJSVtbTVcbiIKKy0gICAgICAiICAgbW92cSAlJW1tNCwgOCglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgICBtb3ZxICUlbW01LCA4KCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgIG1vdnEgJSVtbTQsIDgoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgIG1vdnEgJSVtbTUsIDgoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ4LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTI1MiwxMyArMjUyLDEzIEBAIGludGVybGVhdmUyX21teCAoaW50MTZfdCAqZF8yeG4sIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCwyKSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorICAgICAgICIgIG1vdnEgJSVtbTAsICUlbW0yXG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0xLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxICUlbW0yLCAoJTAsJSVyY3gsNClcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCA4KCUwLCUlcmN4LDQpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMiwgKCVxMCwlJXJjeCw0KVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsIDgoJXEwLCUlcmN4LDQpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTI4NSwxMiArMjg1LDEyIEBAIGxpZnRfYWRkX3NoaWZ0MV9tbXggKGludDE2X3QgKmQsIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXEzLCUlcmN4LDIpLCAlJW1tMlxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQxLCAlJW1tMVxuIgorLSAgICAgICIgIHBhZGR3ICglMSwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBwYWRkdyAoJXExLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMzE3LDEzICszMTcsMTMgQEAgbGlmdF9zdWJfc2hpZnQxX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDIpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDIpLCAlJW1tMFxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQxLCAlJW1tMVxuIgorICAgICAgICIgIHBzdWJ3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMzUwLDEyICszNTAsMTIgQEAgbGlmdF9hZGRfc2hpZnQyX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDIsICUlbW0xXG4iCistICAgICAgIiAgcGFkZHcgKCUxLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBhZGR3ICglcTEsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAlJW1tMSwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0zODIsMTMgKzM4MiwxMyBAQCBsaWZ0X3N1Yl9zaGlmdDJfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDIsICUlbW0xXG4iCisgICAgICAgIiAgcHN1YncgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L25vLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbm8tdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyZDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L25vLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCistLS0gbGlib2lsLTAuMy45L2xpYm9pbC9saWJvaWxmdW5jdGlvbi5jLm9sZAkyMDA2LTA5LTE4IDEzOjAzOjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm9pbC0wLjMuOS9saWJvaWwvbGlib2lsZnVuY3Rpb24uYwkyMDA2LTA5LTE4IDEzOjA0OjEwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0NSw3ICszNDUsOSBAQAorICAgICByZXR1cm47CisgICB9CisgCistICB0ZXN0ID0gb2lsX3Rlc3RfbmV3IChrbGFzcyk7CisrICBrbGFzcy0+Y2hvc2VuX2ltcGwgPSBrbGFzcy0+cmVmZXJlbmNlX2ltcGw7CisrICBrbGFzcy0+ZnVuYyA9IGtsYXNzLT5yZWZlcmVuY2VfaW1wbC0+ZnVuYzsKKysvKiAgdGVzdCA9IG9pbF90ZXN0X25ldyAoa2xhc3MpOworICAgaWYgKHRlc3QgPT0gTlVMTCkgeworICAgICBPSUxfRVJST1IgKCJmYWlsZWQgdG8gdGVzdCBmdW5jdGlvbiBjbGFzcyAlcyIsIGtsYXNzLT5uYW1lKTsKKyAgICAgcmV0dXJuOworQEAgLTM4NSw3ICszODcsNyBAQAorICAga2xhc3MtPmNob3Nlbl9pbXBsID0gbWluX2ltcGw7CisgICBrbGFzcy0+ZnVuYyA9IG1pbl9pbXBsLT5mdW5jOworIAorLSAgb2lsX3Rlc3RfZnJlZSAodGVzdCk7CisrICBvaWxfdGVzdF9mcmVlICh0ZXN0KTsqLworIH0KKyAKKyBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbF8wLjMuMTcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsXzAuMy4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2I3Nzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbF8wLjMuMTcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIHNpbXBsZSBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciB2YXJpb3VzIENQVXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGlib2lsLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFkODA3ODBkOWM1MjA1ZDYzNDgxYTAxODRlMTk5YTE1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm9pbC9saWJvaWwuaDtlbmRsaW5lPTI4O21kNT05NWM3OTRhNjZiODg4MDBkOTQ5ZmVkMTdlNDM3ZDlmYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvaWwvbGlib2lsY3B1LmM7ZW5kbGluZT0yODttZDU9ODlkYTY5YTYxZDg4ZWVkY2JhMDY2ZjQyMzUzZmI3NWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXhhbXBsZXMvZXhhbXBsZTEuYztlbmRsaW5lPTI5O21kNT05ZDRkYWQ5ZmNiYmRmMDQ0MWVlMDYzZjhhZjUxNzBjOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUvdHJhbnMuYztlbmRsaW5lPTI5O21kNT0zODBlY2Q0MzEyMWZlM2RjYzBkOGQ3ZTU5ODRmMjgzZCIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJvaWwuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtZW5hYmxlLXZmcC1mbGFnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYm9pbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDdkYzczNGY4MmZhZWIyOTY0ZDk3NzcxY2ZkMmU3MDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTA1ZjAyMDc5YjBiNTAwMzRjNzU5ZGIzNGI0NzNlY2I1NzA0ZmZhMjBhNTQ4NmI2MGE4Yjc2OTgxMjhiZmM2OSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL01ha2VmaWxlIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGQ4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUKQEAgLTAsMCArMSwxODMgQEAKK1RFU1RTID0gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBSdW5UZXN0IFJ1bkdyZXBUZXN0CitzdWJkaXIgPSAuCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX190dHlfY29sb3JzX2R1bW15ID0gXAorICBtZ249IHJlZD0gZ3JuPSBsZ249IGJsdT0gYnJnPSBzdGQ9OyBcCisgIGFtX19jb2xvcl90ZXN0cz1ubworYW1fX3R0eV9jb2xvcnMgPSB7IFwKKyAgJChhbV9fdHR5X2NvbG9yc19kdW1teSk7IFwKKyAgaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhubzsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPW5vOyBcCisgIGVsaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhhbHdheXM7IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKKyAgZWxpZiB0ZXN0ICJYJCRURVJNIiAhPSBYZHVtYiAmJiB7IHRlc3QgLXQgMTsgfSAyPi9kZXYvbnVsbDsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICBmaTsgXAorICBpZiB0ZXN0ICQkYW1fX2NvbG9yX3Rlc3RzID0geWVzOyB0aGVuIFwKKyAgICByZWQ9JxtbMDszMW0nOyBcCisgICAgZ3JuPScbWzA7MzJtJzsgXAorICAgIGxnbj0nG1sxOzMybSc7IFwKKyAgICBibHU9JxtbMTszNG0nOyBcCisgICAgbWduPScbWzA7MzVtJzsgXAorICAgIGJyZz0nG1sxbSc7IFwKKyAgICBzdGQ9JxtbbSc7IFwKKyAgZmk7IFwKK30KK2FtX19yc3RfdGl0bGUgPSB7IHNlZCAncy8uKi8gICAmICAgLztoO3MvLi89L2c7cDt4O3MvICokJC8vO3A7ZycgJiYgZWNobzsgfQorYW1fX3NoX2Vfc2V0dXAgPSBjYXNlICQkLSBpbiAqZSopIHNldCArZTs7IGVzYWMKK2FtX19jb21tb25fZHJpdmVyX2ZsYWdzID0gXAorICAtLWNvbG9yLXRlc3RzICIkJGFtX19jb2xvcl90ZXN0cyIgXAorICAtLWVuYWJsZS1oYXJkLWVycm9ycyAiJCRhbV9fZW5hYmxlX2hhcmRfZXJyb3JzIiBcCisgIC0tZXhwZWN0LWZhaWx1cmUgIiQkYW1fX2V4cGVjdF9mYWlsdXJlIgorYW1fX2NoZWNrX3ByZSA9IFwKKyQoYW1fX3NoX2Vfc2V0dXApOyBcCiskKGFtX192cGF0aF9hZGpfc2V0dXApICQoYW1fX3ZwYXRoX2FkaikgXAorJChhbV9fdHR5X2NvbG9ycyk7IFwKK3NyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKK2Nhc2UgIiRAIiBpbiBcCisgICovKikgYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDs7IFwKKyAgICAqKSBhbV9fb2Rpcj0uOzsgXAorZXNhYzsgXAordGVzdCAieCQkYW1fX29kaXIiID0geCIuIiB8fCB0ZXN0IC1kICIkJGFtX19vZGlyIiBcCisgIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OyBcCitpZiB0ZXN0IC1mICIuLyQkZiI7IHRoZW4gZGlyPS4vOyBcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsgXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgXAoraWYgdGVzdCAtbiAnJChESVNBQkxFX0hBUkRfRVJST1JTKSc7IHRoZW4gXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPW5vOyBcCitlbHNlIFwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IFwKK2ZpOworYW1fX3NldF9URVNUU19iYXNlcyA9IFwKKyAgYmFzZXM9JyQoVEVTVF9MT0dTKSc7IFwKKyAgYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpOyBkb25lIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCisgIGJhc2VzPWBlY2hvICQkYmFzZXNgCitSRUNIRUNLX0xPR1MgPSAkKFRFU1RfTE9HUykKK1RFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKK1RFU1RfRVhURU5TSU9OUyA9ICAudGVzdAorTE9HX0RSSVZFUiA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvdGVzdC1kcml2ZXIKK2FtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKK2FtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMToubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi50ZXN0LmxvZz0ubG9nKQorTUtESVJfUCA9IC9iaW4vbWtkaXIgLXAKK1BBQ0tBR0VfU1RSSU5HID0gUENSRSA4LjM2CitTSEVMTCA9IC9iaW4vc2gKK3NyY2RpciA9IC4KK3RvcF9zcmNkaXIgPSAuCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlhbV9fZl9vayAoKSB7IHRlc3QgLWYgIiQkMSIgJiYgdGVzdCAtciAiJCQxIjsgfTsgXAorCXJlZG9fYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIFwKKwkgICAgICAgICAgICAgIGFtX19mX29rICQkaS50cnMgJiYgYW1fX2Zfb2sgJCRpLmxvZyB8fCBlY2hvICQkaTsgXAorCSAgICAgICAgICAgIGRvbmVgOyBcCisJc3Q9MDsgIFwKKwllcnJtc2c9ImZhdGFsOiBtYWtpbmcgJChURVNUX1NVSVRFX0xPRyk6IGZhaWxlZCB0byBjcmVhdGUiOyBcCisJZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBcCisJICB0ZXN0IC1mICQkaS50cnMgJiYgdGVzdCAtciAkJGkudHJzIFwKKwkgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkudHJzIiA+JjI7IHN0PTE7IH07IFwKKwkgIHRlc3QgLWYgJCRpLmxvZyAmJiB0ZXN0IC1yICQkaS5sb2cgXAorCSAgICB8fCB7IGVjaG8gIiQkZXJybXNnICQkaS5sb2ciID4mMjsgc3Q9MTsgfTsgXAorCWRvbmU7IFwKKwl0ZXN0ICQkc3QgLWVxIDAgfHwgZXhpdCAxOworCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwl3cz0nWyAJXSc7IFwKKwlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCisJdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAorCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAorCSAgc3VjY2Vzcz10cnVlOyBcCisJZWxzZSBcCisJICBzdWNjZXNzPWZhbHNlOyBcCisJZmk7IFwKKwlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKKwlyZXN1bHRfY291bnQgKCkgXAorCXsgXAorCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAorCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCisJICAgIGZpOyBcCisJICAgIHNoaWZ0OyBcCisJICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAorCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKKwkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAorCX07IFwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCisJeyBcCisJICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAorCX07IFwKKwl7CQkJCQkJCQlcCisJICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKKwkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCisJICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGI7IGRvbmU7CQkJCVwKKwl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXAgfHwgZXhpdCAxOwkJCQlcCisJbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCisJICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAorCSBlbHNlCQkJCQkJCQlcCisJICBjb2w9IiQkcmVkIjsJCQkJCQkJXAorCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKKwlmaTsJCQkJCQkJCVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCisJZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAorCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKKwkgIGVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCVwKKwlmaTsJCQkJCQkJCVwKKwkkJHN1Y2Nlc3MgfHwgZXhpdCAxCitjaGVjay1URVNUUzoKKwlAbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgICAgICAgICAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0CisJQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCUBzZXQgK2U7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlsb2dfbGlzdD1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGkubG9nOyBkb25lYDsgXAorCWxvZ19saXN0PWBlY2hvICQkbG9nX2xpc3RgOyBcCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChURVNUX1NVSVRFX0xPRykgVEVTVF9MT0dTPSIkJGxvZ19saXN0IjsgXAorCWV4aXQgJCQ/OworcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdC5sb2c6IHBjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QkKEVYRUVYVCkKKwlAcD0ncGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCQoRVhFRVhUKSc7IFwKKwliPSdwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgorUnVuVGVzdC5sb2c6IFJ1blRlc3QKKwlAcD0nUnVuVGVzdCc7IFwKKwliPSdSdW5UZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgorUnVuR3JlcFRlc3QubG9nOiBSdW5HcmVwVGVzdAorCUBwPSdSdW5HcmVwVGVzdCc7IFwKKwliPSdSdW5HcmVwVGVzdCc7IFwKKwkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpIC0tICIkJHRzdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWI0NGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitUaGlzIHBhdGNoIGFkZHJlc3MgYSBuYW1lc3BhY2UgY29sbGlzaW9uIHdpdGggbGliYy4KKworQWx0aG91Z2ggdGhlcmUgaXMgbm8gIiNpbmNsdWRlIDxyZWdleC5oPiIgaW4gdGhlIHNvdXJjZSBmaWxlLCBhdAorcnVudGltZSwgaXQncyB1bmludGVudGlvbmFsbHkgbGlua2VkIHRvIHRoZSBsaWJjIHZlcnNpb24sIHRoZSByZWdjb21wIG9mCitsaWJjIGlzIGNhbGxlZCBpbnN0ZWFkIHRoZSBwY3JlIG9uZSB1c2luZyBwY3JlJ3MgZGF0YSBzdHJ1Y3R1cmUuLi4KK3RoYXQgbG9va3MgbGlrZSBhIGRpc2FzdGVyLgorCitDYW4gcGF0Y2ggaXMgZnJvbSBEZWJpYW4gKGFuZCBVYnVudHUgMTEuMDRhbHBoYSBoYXMgaXQgYWxzbykuCisKK1tzZ3c6IGFkZGVkIHBhdGNoIGNvbW1lbnRdCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworLS0tIGEvcGNyZXBvc2l4LmgJMjAxMC0wNS0xNyAwMDoxNzoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBiL3BjcmVwb3NpeC5oCTIwMDktMDEtMTUgMDQ6MzI6MTcuMDAwMDAwMDAwICswODAwCitAQCAtMTMzLDE0ICsxMzAsMTkgQEAKKyAKKyAvKiBUaGUgZnVuY3Rpb25zICovCisgCistUENSRVBPU0lYX0VYUF9ERUNMIGludCByZWdjb21wKHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOworLVBDUkVQT1NJWF9FWFBfREVDTCBpbnQgcmVnZXhlYyhjb25zdCByZWdleF90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorK1BDUkVQT1NJWF9FWFBfREVDTCBpbnQgcGNyZXBvc2l4X3JlZ2NvbXAocmVnZXhfdCAqLCBjb25zdCBjaGFyICosIGludCk7CisrUENSRVBPU0lYX0VYUF9ERUNMIGludCBwY3JlcG9zaXhfcmVnZXhlYyhjb25zdCByZWdleF90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgIHJlZ21hdGNoX3QgKiwgaW50KTsKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgc2l6ZV90IHJlZ2Vycm9yKGludCwgY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIHNpemVfdCk7CistUENSRVBPU0lYX0VYUF9ERUNMIHZvaWQgcmVnZnJlZShyZWdleF90ICopOworK1BDUkVQT1NJWF9FWFBfREVDTCBzaXplX3QgcGNyZXBvc2l4X3JlZ2Vycm9yKGludCwgY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIHNpemVfdCk7CisrUENSRVBPU0lYX0VYUF9ERUNMIHZvaWQgcGNyZXBvc2l4X3JlZ2ZyZWUocmVnZXhfdCAqKTsKKyAKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyB9ICAgLyogZXh0ZXJuICJDIiAqLworICNlbmRpZgorIAorKyNkZWZpbmUgcmVnY29tcCBwY3JlcG9zaXhfcmVnY29tcAorKyNkZWZpbmUgcmVnZXhlYyBwY3JlcG9zaXhfcmVnZXhlYworKyNkZWZpbmUgcmVnZXJyb3IgcGNyZXBvc2l4X3JlZ2Vycm9yCisrI2RlZmluZSByZWdmcmVlIHBjcmVwb3NpeF9yZWdmcmVlCisrCisgI2VuZGlmIC8qIEVuZCBvZiBwY3JlcG9zaXguaCAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3BjcmUtY3Jvc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcGNyZS1jcm9zcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg4MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3BjcmUtY3Jvc3MucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBwY3JlLTguMzIub3JpZy9NYWtlZmlsZS5hbQorKysrIHBjcmUtOC4zMi9NYWtlZmlsZS5hbQorQEAgLTE5Nyw4ICsxOTcsMTggQEAgYmluX1NDUklQVFMgPSBwY3JlLWNvbmZpZworIAorK0NDX0ZPUl9CVUlMRCA9IEBDQ19GT1JfQlVJTERACisrQ0ZMQUdTX0ZPUl9CVUlMRCA9IEBDRkxBR1NfRk9SX0JVSUxEQAorK0NDTERfRk9SX0JVSUxEID0gQENDTERfRk9SX0JVSUxEQAorK0xERkxBR1NfRk9SX0JVSUxEID0gQExERkxBR1NfRk9SX0JVSUxEQAorKworIGlmIFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTCisgCisgbm9pbnN0X1BST0dSQU1TICs9IGRmdGFibGVzCisgZGZ0YWJsZXNfU09VUkNFUyA9IGRmdGFibGVzLmMKKytkZnRhYmxlc19MSU5LID0gJChDQ0xEX0ZPUl9CVUlMRCkgLW8gJEAKKytkZnRhYmxlc19MREZMQUdTID0gJChMREZMQUdTX0ZPUl9CVUlMRCkKKysKKytkZnRhYmxlcy5vOiAkKHNyY2RpcikvZGZ0YWJsZXMuYworKwkkKENDX0ZPUl9CVUlMRCkgLWMgJChDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKHNyY2RpcikvZGZ0YWJsZXMuYworIAorIHBjcmVfY2hhcnRhYmxlcy5jOiBkZnRhYmxlcyQoRVhFRVhUKQorIAkuL2RmdGFibGVzJChFWEVFWFQpICRACistLS0gcGNyZS04LjMyLm9yaWcvY29uZmlndXJlLmFjCisrKysgcGNyZS04LjMyL2NvbmZpZ3VyZS5hYworQEAgLTcyLDYgKzcyLDIyIEBAIHRoZW4KKyAgIGZpCisgZmkKKyAKKytpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzOyB0aGVuCisrICAgIENDX0ZPUl9CVUlMRD0iJHtDQ19GT1JfQlVJTEQtZ2NjfSIKKysgICAgQ0NMRF9GT1JfQlVJTEQ9IiR7Q0NMRF9GT1JfQlVJTEQtZ2NjfSIKKysgICAgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtDRkxBR1NfRk9SX0JVSUxEfSIKKysgICAgTERGTEFHU19GT1JfQlVJTEQ9IiR7TERGTEFHU19GT1JfQlVJTER9IgorK2Vsc2UKKysgICAgQ0NfRk9SX0JVSUxEPSIke0NDX0ZPUl9CVUlMRC1cJChDQyl9IgorKyAgICBDQ0xEX0ZPUl9CVUlMRD0iJHtDQ0xEX0ZPUl9CVUlMRC1cJChDQ0xEKX0iCisrICAgIENGTEFHU19GT1JfQlVJTEQ9IiR7Q0ZMQUdTX0ZPUl9CVUlMRC1cJChDRkxBR1MpfSIKKysgICAgTERGTEFHU19GT1JfQlVJTEQ9IiR7TERGTEFHU19GT1JfQlVJTEQtXCQoTERGTEFHUyl9IgorK2ZpCisrQUNfQVJHX1ZBUihDQ19GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBjb21waWxlcl0pCisrQUNfQVJHX1ZBUihDQ0xEX0ZPUl9CVUlMRCwgW2J1aWxkIHN5c3RlbSBDIGxpbmtlciBmcm9udGVuZF0pCisrQUNfQVJHX1ZBUihDRkxBR1NfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgY29tcGlsZXIgYXJndW1lbnRzXSkKKytBQ19BUkdfVkFSKExERkxBR1NfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgbGlua2VyIGZyb250ZW5kIGFyZ3VtZW50c10pCisrCisgIyBBQ19QUk9HX0NYWCB3aWxsIHJldHVybiAiZysrIiBldmVuIGlmIG5vIGMrKyBjb21waWxlciBpcyBpbnN0YWxsZWQuCisgIyBDaGVjayBmb3IgdGhhdCBjYXNlLCBhbmQganVzdCBkaXNhYmxlIGMrKyBjb2RlIGlmIGcrKyBkb2Vzbid0IHJ1bi4KKyBBQ19MQU5HX1BVU0goQysrKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwZDRhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2ZjOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzcuYmIKQEAgLTAsMCArMSw3MyBAQAorREVTQ1JJUFRJT04gPSAiVGhlIFBDUkUgbGlicmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgcmVndWxhciBcCitleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgUGVybCA1LiBQQ1JFIFwKK2hhcyBpdHMgb3duIG5hdGl2ZSBBUEksIGFzIHdlbGwgYXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIFwKK3RvIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gQVBJLiIKK1NVTU1BUlkgPSAiUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBjcmUub3JnIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9N2U0OTM3ODE0YWVlMTQ3NThjMWM5NWI1OWM4MGM0NGQiCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L3BjcmUvcGNyZS8ke1BWfS9wY3JlLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGNyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWQ5MWJlMjkyY2IwMWQyMWJjN2U1MjY4MTZjMjY5ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE2NzllYTgwMDZjZTMxMzc5ZmIwODYwZTQ2ZGQ4NjY2NWQ4NjRiNTAyMGZjOWNkMTllNzEyNjBlZWY0Nzg5ZCIKKworUyA9ICIke1dPUktESVJ9L3BjcmUtJHtQVn0iCisKK1BST1ZJREVTICs9ICJwY3JlIgorREVQRU5EUyArPSAiYnppcDIgemxpYiIKKworUEFDS0FHRUNPTkZJR1twY3JldGVzdC1yZWFkbGluZV0gPSAiLS1lbmFibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUsLS1kaXNhYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLHJlYWRsaW5lLCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wY3JlLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1lbmFibGUtbmV3bGluZS1pcy1sZiBcCisgICAgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIFwKKyAgICAtLWVuYWJsZS11dGY4IFwKKyAgICAtLXdpdGgtbGluay1zaXplPTIgXAorICAgIC0td2l0aC1tYXRjaC1saW1pdD0xMDAwMDAwMCBcCisiCisKKyMgU2V0IExJTktfU0laRSBpbiBCVUlMRF9DRkxBR1MgZ2l2ZW4gdGhhdCB0aGUgYXV0b3Rvb2xzIGJiY2xhc3MgdXNlIGl0IHRvCisjIHNldCBDRkxBR1NfRk9SX0JVSUxELCByZXF1aXJlZCBmb3IgdGhlIGxpYnBjcmUgYnVpbGQuCitCVUlMRF9DRkxBR1MgPSsgIi1ETElOS19TSVpFPTIgLUkke0J9IgorQ0ZMQUdTICs9ICItRF9SRUVOVFJBTlQiCitDWFhGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWxzdGRjKysiCisKK1BBQ0tBR0VTID0rICJsaWJwY3JlY3BwIGxpYnBjcmVwb3NpeCBwY3JlZ3JlcCBwY3JlZ3JlcC1kb2MgcGNyZXRlc3QgcGNyZXRlc3QtZG9jIgorCitTVU1NQVJZX2xpYnBjcmVjcHAgPSAiJHtTVU1NQVJZfSAtIEMrKyB3cmFwcGVyIGZ1bmN0aW9ucyIKK1NVTU1BUllfbGlicGNyZXBvc2l4ID0gIiR7U1VNTUFSWX0gLSBDIHdyYXBwZXIgZnVuY3Rpb25zIGJhc2VkIG9uIHRoZSBQT1NJWCByZWdleCBBUEkiCitTVU1NQVJZX3BjcmVncmVwID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyIKK1NVTU1BUllfcGNyZWdyZXAtZG9jID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyAtIGRvY3MiCitTVU1NQVJZX3BjcmV0ZXN0ID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK1NVTU1BUllfcGNyZXRlc3QtZG9jID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAtIGRvY3MiCisKK0ZJTEVTX2xpYnBjcmVjcHAgPSAiJHtsaWJkaXJ9L2xpYnBjcmVjcHAuc28uKiIKK0ZJTEVTX2xpYnBjcmVwb3NpeCA9ICIke2xpYmRpcn0vbGlicGNyZXBvc2l4LnNvLioiCitGSUxFU19wY3JlZ3JlcCA9ICIke2JpbmRpcn0vcGNyZWdyZXAiCitGSUxFU19wY3JlZ3JlcC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZWdyZXAuMSIKK0ZJTEVTX3BjcmV0ZXN0ID0gIiR7YmluZGlyfS9wY3JldGVzdCIKK0ZJTEVTX3BjcmV0ZXN0LWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JldGVzdC4xIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHQKKwljcCAtciAke1N9L3Rlc3RkYXRhICR0CisJZm9yIGkgaW4gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBwY3JlZ3JlcCBwY3JldGVzdDsgXAorCSAgZG8gY3AgJHtCfS8ubGlicy8kaSAkdDsgXAorCWRvbmUKKwlmb3IgaSBpbiBSdW5UZXN0IFJ1bkdyZXBUZXN0IHRlc3QtZHJpdmVyOyBcCisJICBkbyBjcCAke1N9LyRpICR0OyBcCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWU1MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBmNWYyYzIyODllYjM1ZWI4MDRjMWMzNWU0NmNhNDFiNThlNGNhZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAxNDoxMzo0OSAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0OiBJbmNsdWRlIDxzeXMvc2VsZWN0Lmg+IGZvciBzZWxlY3QoKQorCitBcyBwZXIgcG9zaXggd2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgZmlsZSBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggZXJyb3JzIGxpa2UKKworL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDogSW4gbWVtYmVyIGZ1bmN0aW9uICdib29sIFRlc3RTZXJ2ZXI6Omxvb3AoKSc6CisvaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOjgwOjQ6IGVycm9yOiAnZmRfc2V0JyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICBmZF9zZXQgZmRzOworICAgIF4KKy9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6ODk6MTQ6IGVycm9yOiAnZmRzJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICBGRF9aRVJPICgmZmRzKTsKKzxKSVJBIFRJQ0tFVCAjMT4sIDxKSVJBIFRJQ0tFVCAjMj4sIDxKSVJBIFRJQ0tFVCAjbj4gOiA8b25lIGxpbmUgc3VtbWFyeSBvZiBjaGFuZ2U+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAgYi9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKK2luZGV4IGE2MWZjNGIuLmJkYTQ2NDYgMTAwNjQ0CistLS0gYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKKysrKyBiL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAorQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPHNzdHJlYW0+CisgI2luY2x1ZGUgPHN0cmluZz4KKyAKKysjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQwYjliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBwcm92aWRpbmcgYXV0b21hdGljIHByb3h5IGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJwcm94eS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJwcm94eS9pc3N1ZXMvbGlzdCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXRpbHMvcHJveHkuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT01NTE1MmExMDA2ZDdkYWZiZWYzMmJhZjljMzBhOTljMCIKKworREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGlicC8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiM2NkMWFlMmE0YWJlY2Y0NGIzZjI0ZDY2MzlkMmNkODQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGMzZjMzZGU1NDE2MzcxOGY4MmIzZTdjNDk2YTdkZTk3Zjg4NjI1Nzg0MTRiOGVjYWFkM2NiZmU0ODIxODY0YiIKKworaW5oZXJpdCBjbWFrZSBwa2djb25maWcKKworRVhUUkFfT0VDTUFLRSA9ICItRFdJVEhfV0VCS0lUPW5vIC1EV0lUSF9HTk9NRT15ZXMgLURXSVRIX0tERTQ9bm8gXAorCSAgICAgIC1EV0lUSF9QWVRIT049bm8gLURXSVRIX1BFUkw9bm8gLURXSVRIX01PWkpTPW5vIC1EV0lUSF9OTT1ubyAtRExJQl9JTlNUQUxMX0RJUj0ke2xpYmRpcn0gLURMSUJFWEVDX0lOU1RBTExfRElSPSR7bGliZXhlY2Rpcn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyR7UFZ9L21vZHVsZXMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vJHtQVn0vcGx1Z2lucy8uZGVidWcvICR7bGliZGlyfS8ke0JQTn0vJHtQVn0vbW9kdWxlcy8uZGVidWcvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlleHBvcnQgSE9TVF9TWVM9JHtIT1NUX1NZU30KKwlleHBvcnQgQlVJTERfU1lTPSR7QlVJTERfU1lTfQorfQorCitweXRob24oKSB7CisgICAgaWYgaW5jb21wYXRpYmxlX2xpY2Vuc2VfY29udGFpbnMoIkdQTHYzIiwgIngiLCAiIiwgZCkgPT0gIngiIG9yIGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAieDExIiwgIngiLCAiIiwgZCkgPT0gIiI6CisgICAgICAgIGQuc2V0VmFyKCJFWFRSQV9PRUNNQUtFIiwgZC5nZXRWYXIoIkVYVFJBX09FQ01BS0UiLCBGYWxzZSkucmVwbGFjZSgiLURXSVRIX0dOT01FPXllcyIsICItRFdJVEhfR05PTUU9bm8iKSkKKyAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCAiICIuam9pbihpIGZvciBpIGluIGQuZ2V0VmFyKCJERVBFTkRTIiwgRmFsc2UpLnNwbGl0KCkgaWYgaSAhPSAiZ2NvbmYiKSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41MC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0ZGIzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41MC4wLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQW4gSFRUUCBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGluIEMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworU0VDVElPTiA9ICJ4MTEvZ25vbWUvbGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbnV0bHMgbGlieG1sMiBzcWxpdGUzIGludGx0b29sLW5hdGl2ZSIKKworIyBsaWJzb3VwLWdub21lIGlzIGVudGlyZWx5IGRlcHJlY2F0ZWQgYW5kIGp1c3Qgc3R1YnMgaW4gMi40MiBvbndhcmRzLiAgRW5hYmxlCisjIGJ5IGRlZmF1bHQgYnV0IGxldCBpdCBiZSBlYXNpbHkgZGlzYWJsZWQuCitQQUNLQUdFQ09ORklHID8/PSAiZ25vbWUiCitQQUNLQUdFQ09ORklHW2dub21lXSA9ICItLXdpdGgtZ25vbWUsLS13aXRob3V0LWdub21lIgorCitTSFJUX1ZFUiA9ICIke0BiYi5kYXRhLmdldFZhcignUFYnLGQsMSkuc3BsaXQoJy4nKVswXX0uJHtAYmIuZGF0YS5nZXRWYXIoJ1BWJyxkLDEpLnNwbGl0KCcuJylbMV19IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vbGlic291cC8ke1NIUlRfVkVSfS9saWJzb3VwLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjlhODRkNjZlMWI3Y2NkM2JkMzQwNTc0YjExZWNjYzE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFlMDEzNjVhYzRhZjM4MTcxODdlYTg0N2Y5ZDM1ODhjMjdlZWUwMWZjNTE5YTVhN2NiMjEyYmI3OGIwZjY2N2IiCisKK1MgPSAiJHtXT1JLRElSfS9saWJzb3VwLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjIGdsaWItbmV0d29ya2luZyBpcyBuZWVkZWQgZm9yIFNTTCwgcHJveGllcywgZXRjLgorUlJFQ09NTUVORFNfJHtQTn0gPSAiZ2xpYi1uZXR3b3JraW5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZWFjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbGlidW5pc3RyaW5nLTAuOS40L2xpYi9NYWtlZmlsZS5nbnVsaWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ1bmlzdHJpbmctMC45LjQub3JpZy9saWIvTWFrZWZpbGUuZ251bGliCisrKysgbGlidW5pc3RyaW5nLTAuOS40L2xpYi9NYWtlZmlsZS5nbnVsaWIKK0BAIC0zODAsNyArMzgwLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ODkxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOGQ5OWEzNjg2MTU2NTZhODM1ZjU1MDIzMjZhZmQzMWNlYzJjZWJmZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE2IFNlcCAyMDEzIDE4OjE2OjEyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCBsaWJ1bmlzdHJpbmcgd2lsbCBiZSBidWlsdCB3aXRob3V0CitpY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxkLW5hdGl2ZSBjb25maWd1cmUgZmFpbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdudWxpYi1tNC9pY29udi5tNCB8ICAgMTEgLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsaWJ1bmlzdHJpbmctMC45LjQvZ251bGliLW00L2ljb252Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidW5pc3RyaW5nLTAuOS40Lm9yaWcvZ251bGliLW00L2ljb252Lm00CTIwMTQtMTEtMDMgMTc6NDE6MjkuNzU1MDExOTE3ICswMDAwCisrKysgbGlidW5pc3RyaW5nLTAuOS40L2dudWxpYi1tNC9pY29udi5tNAkyMDE0LTExLTAzIDE3OjQzOjAzLjc5NTAxNDQ4MCArMDAwMAorQEAgLTE1OSwxNyArMTU5LDYgQEAKKyAgICAgICB9CisgICB9CisgI2VuZGlmCistICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKy0gICAgIHByb3ZpZGVkLiAgKi8KKy0gIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KKy0gICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQorLSAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCistICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorLSAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLworLSAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCistICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKy0gICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCistICAgIHJlc3VsdCB8PSAxNjsKKyAgIHJldHVybiByZXN1bHQ7CisgfV1dKV0sCisgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZ18wLjkuNS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmdfMC45LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZjYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmdfMC45LjUuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgQyBhbmQgVW5pY29kZSBzdHJpbmdzIgorCitERVNDUklQVElPTiA9ICJUZXh0IGZpbGVzIGFyZSBub3dhZGF5cyB1c3VhbGx5IGVuY29kZWQgaW4gVW5pY29kZSwgYW5kIG1heVwKKyBjb25zaXN0IG9mIHZlcnkgZGlmZmVyZW50IHNjcmlwdHMgZnJvbSBMYXRpbiBsZXR0ZXJzIHRvIENoaW5lc2UgSGFuemlcCisgd2l0aCBtYW55IGtpbmRzIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBhY2NlbnRzLCByaWdodC10by1sZWZ0IHdyaXRpbmdcCisgbWFya3MsIGh5cGhlbnMsIFJvbWFuIG51bWJlcnMsIGFuZCBtdWNoIG1vcmUuIEJ1dCB0aGUgUE9TSVggcGxhdGZvcm1cCisgQVBJcyBmb3IgdGV4dCBkbyBub3QgY29udGFpbiBhZGVxdWF0ZSBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aFwKKyBwYXJ0aWN1bGFyIHByb3BlcnRpZXMgb2YgbWFueSBVbmljb2RlIGNoYXJhY3RlcnMuIEluIGZhY3QsIHRoZSBQT1NJWFwKKyBBUElzIGZvciB0ZXh0IGhhdmUgc2V2ZXJhbCBhc3N1bXB0aW9ucyBhdCB0aGVpciBiYXNlIHdoaWNoIGRvbid0IGhvbGRcCisgZm9yIFVuaWNvZGUgdGV4dC4gIFRoaXMgbGlicmFyeSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZ1wKKyBVbmljb2RlIHN0cmluZ3MgYW5kIGZvciBtYW5pcHVsYXRpbmcgQyBzdHJpbmdzIGFjY29yZGluZyB0byB0aGUgVW5pY29kZVwKKyBzdGFuZGFyZC4gIFRoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnVuaXN0cmluZy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LW00LXJlbW92ZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYTcwNWJjZGNiODM3OTlkNTQ0MTM3NjE3YjM3N2NmZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYThjMDc3MjQ2Nzg1MGJlZjcxOTczMThhOTVmNDRhYmJiNjc4ZWE4M2NiZjExOWEzNTAwY2M3ODQ4Mjc2YTE3IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5NzJmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDM5NmI2YzdhYjczN2UyYmZmMjQ0ZDY0MDYwMWM0MzZhMjYyNjBjYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcnVuIFNoYXJtYSA8YXJ1bkBzaGFybWEtaG9tZS5uZXQ+CitEYXRlOiBGcmksIDE5IEp1biAyMDE1IDE5OjQ3OjIyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEludmFsaWQgZHdhcmYgb3Bjb2RlcyBjYW4gY2F1c2UgcmVmZXJlbmNlcyBiZXlvbmQgdGhlIGVuZCBvZgorIHRoZSBhcnJheS4KKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlL2R3YXJmX2kuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHdhcmZfaS5oIGIvaW5jbHVkZS9kd2FyZl9pLmgKK2luZGV4IDFlNjIzMWUuLjRhMDJhN2QgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2R3YXJmX2kuaAorKysrIGIvaW5jbHVkZS9kd2FyZl9pLmgKK0BAIC0yMCw3ICsyMCw3IEBACisgZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbRFdBUkZfUkVHTlVNX01BUF9MRU5HVEhdOworIC8qIFJFRyBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXM7IGl0IGJldHRlciBiZSBzaWRlLWVmZmVjdHMgZnJlZSEgICovCisgIyBkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpCQkJCQkgIFwKKy0gICgoKHJlZykgPD0gRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCisrICAoKChyZWcpIDwgRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCisgI2VuZGlmCisgCisgI2lmZGVmIFVOV19MT0NBTF9PTkxZCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQUFyY2g2NC1wb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvQUFyY2g2NC1wb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOGVjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNTI5IEBACitGcm9tIGFjNmMwYTY1MzU5NzVmMWRjMmRhNmU0ZTI3NjY2MTRiYWFjMmExNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdmFuIFJvdXggPHl2YW4ucm91eEBsaW5hcm8ub3JnPgorRGF0ZTogU2F0LCAxMSBNYXkgMjAxMyAwOToxODoyMyAtMDYwMAorU3ViamVjdDogW1BBVENIXSBBQXJjaDY0IHBvcnQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAKKyBSRUFETUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgCisgaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oICAgICAgICAgIHwgIDE4NyArKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saWJ1bndpbmQuaC5pbiAgICAgICAgICAgICAgIHwgICAgNCAKKyBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaCAgfCAgIDUyICsrKysrKworIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oICAgICAgICB8ICAgMzMgKysrCisgaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCAgIHwgIDI5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaCAgICAgICAgICB8ICAgIDQgCisgaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oICAgICAgICAgICAgICAgIHwgICAgMiAKKyBpbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbiAgICAgICAgfCAgICA0IAorIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKysrKworIHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jICAgICB8ICAgNjAgKysrKysrKworIHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgMzkgKysrKworIHNyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyAgICAgICAgICB8ICAxMDAgKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9HZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgIDU3ICsrKysrKworIHNyYy9hYXJjaDY0L0dpbml0LmMgICAgICAgICAgICAgICAgICB8ICAxODcgKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMgICAgICAgICAgICB8ICAgNTUgKysrKysrCisgc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMgICAgICAgICAgIHwgICA0NSArKysrKworIHNyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgNjQgKysrKysrKworIHNyYy9hYXJjaDY0L0dyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAxMTMgKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dyZXN1bWUuYyAgICAgICAgICAgICAgICB8ICAxNzcgKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR3N0ZXAuYyAgICAgICAgICAgICAgICAgIHwgIDEyOSArKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYyAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpbml0LmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYyAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYyAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTHJlZ3MuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9McmVzdW1lLmMgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xzdGVwLmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYyAgICAgICAgICAgIHwgICA2OCArKysrKysrKworIHNyYy9hYXJjaDY0L2luaXQuaCAgICAgICAgICAgICAgICAgICB8ICAxMjcgKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvaXNfZnByZWcuYyAgICAgICAgICAgICAgIHwgICAzMiArKysKKyBzcmMvYWFyY2g2NC9vZmZzZXRzLmggICAgICAgICAgICAgICAgfCAgIDQ5ICsrKysrCisgc3JjL2FhcmNoNjQvcmVnbmFtZS5jICAgICAgICAgICAgICAgIHwgIDEwNiArKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9zaWdsb25nam1wLlMgICAgICAgICAgICAgfCAgIDEyICsKKyBzcmMvYWFyY2g2NC91bndpbmRfaS5oICAgICAgICAgICAgICAgfCAgIDQzICsrKysrCisgc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jIHwgICAgNSAKKyBzcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jICAgICAgICAgfCAgIDM2ICsrKysKKyA0MyBmaWxlcyBjaGFuZ2VkLCAyMTg0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnbG9iYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dyZWdzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3Jlc3VtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dzdGVwLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdsb2JhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHJlZ3MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9McmVzdW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHN0ZXAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2luaXQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9pc19mcHJlZy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L29mZnNldHMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9yZWduYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3Vud2luZF9pLmgKKworLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMiw2ICsyLDkgQEAgaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS9saWJ1bndpbmQtZHluYQorICAgICBpbmNsdWRlL2xpYnVud2luZC1wdHJhY2UuaCBcCisgICAgIGluY2x1ZGUvbGlidW53aW5kLWNvcmVkdW1wLmgKKyAKKytpZiBBUkNIX0FBUkNINjQKKytpbmNsdWRlX0hFQURFUlMgKz0gaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCisrZW5kaWYKKyBpZiBBUkNIX0FSTQorIGluY2x1ZGVfSEVBREVSUyArPSBpbmNsdWRlL2xpYnVud2luZC1hcm0uaAorIGVuZGlmCitAQCAtNDEsNiArNDQsOSBAQCBTVUJESVJTID0gc3JjIHRlc3RzIGRvYworIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kd2FyZi5oIGluY2x1ZGUvZHdhcmZfaS5oIGluY2x1ZGUvZHdhcmYtZWguaAlcCisgCWluY2x1ZGUvY29tcGlsZXIuaCBpbmNsdWRlL2xpYnVud2luZF9pLmggaW5jbHVkZS9tZW1wb29sLmgJXAorIAlpbmNsdWRlL3JlbW90ZS5oCQkJCQkJXAorKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCQkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgJCQkJXAorIAlpbmNsdWRlL3RkZXAtYXJtL2R3YXJmLWNvbmZpZy5oCWluY2x1ZGUvdGRlcC1hcm0vZXhfdGFibGVzLmgJXAorIAlpbmNsdWRlL3RkZXAtYXJtL2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1hcm0vbGlidW53aW5kX2kuaAlcCisgCWluY2x1ZGUvdGRlcC1pYTY0L2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1pYTY0L3JzZS5oIAkJXAorLS0tIGEvUkVBRE1FCisrKysgYi9SRUFETUUKK0BAIC05LDYgKzksNyBAQCBzZXZlcmFsIGFyY2hpdGVjdHVyZS9vcGVyYXRpbmctc3lzdGVtIGNvCisgIExpbnV4L0lBLTY0OglGdWxseSB0ZXN0ZWQgYW5kIHN1cHBvcnRlZC4KKyAgTGludXgvUEFSSVNDOglXb3JrcyB3ZWxsLCBidXQgQyBsaWJyYXJ5IG1pc3NpbmcgdW53aW5kLWluZm8uCisgIEhQLVVYL0lBLTY0OglNb3N0bHkgd29ya3MgYnV0IGtub3duIHRvIGhhdmUgc29tZSBzZXJpb3VzIGxpbWl0YXRpb25zLgorKyBMaW51eC9BQXJjaDY0OglOZXdseSBhZGRlZC4KKyAgTGludXgvUFBDNjQ6CU5ld2x5IGFkZGVkLgorICBMaW51eC9TdXBlckg6CU5ld2x5IGFkZGVkLgorICBGcmVlQlNEL2kzODY6CU5ld2x5IGFkZGVkLgorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDQsNyArMTA0LDcgQEAgU0VUX0FSQ0goWyR0YXJnZXRfY3B1XSxbdGFyZ2V0X2FyY2hdKQorIAorIEFDX0FSR19FTkFCTEUoY29yZWR1bXAsCisgCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb3JlZHVtcF0sW2J1aWxkaW5nIGxpYnVud2luZC1jb3JlZHVtcCBsaWJyYXJ5XSksLAorLSAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQorKyAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYWFyY2g2NCp8YXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQorICkKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIHNob3VsZCBidWlsZCBsaWJ1bndpbmQtY29yZWR1bXBdKQorQEAgLTEyMSw2ICsxMjEsNyBAQCBBQ19NU0dfUkVTVUxUKFskdGFyZ2V0X29zXSkKKyAKKyBBTV9DT05ESVRJT05BTChCVUlMRF9DT1JFRFVNUCwgdGVzdCB4JGVuYWJsZV9jb3JlZHVtcCA9IHh5ZXMpCisgQU1fQ09ORElUSU9OQUwoUkVNT1RFX09OTFksIHRlc3QgeCR0YXJnZXRfYXJjaCAhPSB4JGhvc3RfYXJjaCkKKytBTV9DT05ESVRJT05BTChBUkNIX0FBUkNINjQsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhhYXJjaDY0KQorIEFNX0NPTkRJVElPTkFMKEFSQ0hfQVJNLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4YXJtKQorIEFNX0NPTkRJVElPTkFMKEFSQ0hfSUE2NCwgdGVzdCB4JHRhcmdldF9hcmNoID0geGlhNjQpCisgQU1fQ09ORElUSU9OQUwoQVJDSF9IUFBBLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4aHBwYSkKK0BAIC0xMzcsNyArMTM4LDcgQEAgQU1fQ09ORElUSU9OQUwoT1NfRlJFRUJTRCwgZXhwciB4JHRhcmdldAorIEFDX01TR19DSEVDS0lORyhbZm9yIEVMRiBoZWxwZXIgd2lkdGhdKQorIGNhc2UgIiR7dGFyZ2V0X2FyY2h9IiBpbgorIChhcm18aHBwYXxwcGMzMnx4ODZ8c2gpIHVzZV9lbGYzMj15ZXM7IEFDX01TR19SRVNVTFQoWzMyXSk7OworLShpYTY0fHBwYzY0fHg4Nl82NCkgICAgdXNlX2VsZjY0PXllczsgQUNfTVNHX1JFU1VMVChbNjRdKTs7CisrKGFhcmNoNjR8aWE2NHxwcGM2NHx4ODZfNjQpICAgIHVzZV9lbGY2ND15ZXM7IEFDX01TR19SRVNVTFQoWzY0XSk7OworIChtaXBzKSAgICAgICAgICAgICAgICAgdXNlX2VsZnh4PXllczsgQUNfTVNHX1JFU1VMVChbeHhdKTs7CisgKikgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1Vua25vd24gRUxGIHRhcmdldDogJHt0YXJnZXRfYXJjaH1dKQorIGVzYWMKK0BAIC0xODYsNiArMTg3LDcgQEAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWN4eC1leGNlcHRpb25zXQorICMgQysrIGV4Y2VwdGlvbiBoYW5kbGluZyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwgb24geDg2CisgY2FzZSAkdGFyZ2V0X2FyY2ggaW4KKyAgIHg4NiopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisrICBhYXJjaDY0KikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgIGFybSopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisgICBtaXBzKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgICopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz15ZXM7OworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCitAQCAtMCwwICsxLDE4NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKysJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiBMSUJVTldJTkRfSAorKyNkZWZpbmUgTElCVU5XSU5EX0gKKysKKysjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQorK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8dWNvbnRleHQuaD4KKysKKysjZGVmaW5lIFVOV19UQVJHRVQJYWFyY2g2NAorKyNkZWZpbmUgVU5XX1RBUkdFVF9BQVJDSDY0CTEKKysKKysjZGVmaW5lIF9VX1RERVBfUVBfVFJVRQkwCS8qIHNlZSBsaWJ1bndpbmQtZHluYW1pYy5oICAqLworKworKy8qIFRoaXMgbmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0byBhY2NvbW1vZGF0ZSAic3RydWN0IGN1cnNvciIsIHdoaWxlCisrICAgbGVhdmluZyBzb21lIHNsYWNrIGZvciBmdXR1cmUgZXhwYW5zaW9uLiAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsCisrICAgcmVxdWlyZSByZWNvbXBpbGluZyBhbGwgdXNlcnMgb2YgdGhpcyBsaWJyYXJ5LiAgU3RhY2sgYWxsb2NhdGlvbiBpcworKyAgIHJlbGF0aXZlbHkgY2hlYXAgYW5kIHVud2luZC1zdGF0ZSBjb3B5aW5nIGlzIHJlbGF0aXZlbHkgcmFyZSwgc28gd2UKKysgICB3YW50IHRvIGVyciBvbiBtYWtpbmcgaXQgcmF0aGVyIHRvbyBiaWcgdGhhbiB0b28gc21hbGwuICAqLworKworKyNkZWZpbmUgVU5XX1RERVBfQ1VSU09SX0xFTgk0MDk2CisrCisrdHlwZWRlZiB1aW50NjRfdCB1bndfd29yZF90OworK3R5cGVkZWYgaW50NjRfdCB1bndfc3dvcmRfdDsKKysKKyt0eXBlZGVmIGxvbmcgZG91YmxlIHVud190ZGVwX2ZwcmVnX3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKysgIHsKKysgICAgLyogbm8gYWFyY2g2NC1zcGVjaWZpYyBhdXhpbGlhcnkgcHJvYy1pbmZvICovCisrICB9CisrdW53X3RkZXBfcHJvY19pbmZvX3Q7CisrCisrdHlwZWRlZiBlbnVtCisrICB7CisrICAgIC8qIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1gwLAorKyAgICBVTldfQUFSQ0g2NF9YMSwKKysgICAgVU5XX0FBUkNINjRfWDIsCisrICAgIFVOV19BQVJDSDY0X1gzLAorKyAgICBVTldfQUFSQ0g2NF9YNCwKKysgICAgVU5XX0FBUkNINjRfWDUsCisrICAgIFVOV19BQVJDSDY0X1g2LAorKyAgICBVTldfQUFSQ0g2NF9YNywKKysgICAgVU5XX0FBUkNINjRfWDgsCisrCisrICAgIC8qIFRlbXBvcmFyeSByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9YOSwKKysgICAgVU5XX0FBUkNINjRfWDEwLAorKyAgICBVTldfQUFSQ0g2NF9YMTEsCisrICAgIFVOV19BQVJDSDY0X1gxMiwKKysgICAgVU5XX0FBUkNINjRfWDEzLAorKyAgICBVTldfQUFSQ0g2NF9YMTQsCisrICAgIFVOV19BQVJDSDY0X1gxNSwKKysKKysgICAgLyogSW50cmEtcHJvY2VkdXJlLWNhbGwgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1gxNiwKKysgICAgVU5XX0FBUkNINjRfWDE3LAorKworKyAgICAvKiBDYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDE4LAorKyAgICBVTldfQUFSQ0g2NF9YMTksCisrICAgIFVOV19BQVJDSDY0X1gyMCwKKysgICAgVU5XX0FBUkNINjRfWDIxLAorKyAgICBVTldfQUFSQ0g2NF9YMjIsCisrICAgIFVOV19BQVJDSDY0X1gyMywKKysgICAgVU5XX0FBUkNINjRfWDI0LAorKyAgICBVTldfQUFSQ0g2NF9YMjUsCisrICAgIFVOV19BQVJDSDY0X1gyNiwKKysgICAgVU5XX0FBUkNINjRfWDI3LAorKyAgICBVTldfQUFSQ0g2NF9YMjgsCisrCisrICAgIC8qIDY0LWJpdCBmcmFtZSBwb2ludGVyLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDI5LAorKworKyAgICAvKiA2NC1iaXQgbGluayByZWdpc3Rlci4gICovCisrICAgIFVOV19BQVJDSDY0X1gzMCwKKysKKysgICAgLyogNjQtYml0IHN0YWNrIHBvaW50ZXIuICAqLworKyAgICBVTldfQUFSQ0g2NF9TUCA9ICAzMSwKKysgICAgVU5XX0FBUkNINjRfUEMsCisrICAgIFVOV19BQVJDSDY0X1BTVEFURSwKKysKKysgICAgLyogMTI4LWJpdCBGUC9BZHZhbmNlZCBTSU1EIHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1YwID0gNjQsCisrICAgIFVOV19BQVJDSDY0X1YxLAorKyAgICBVTldfQUFSQ0g2NF9WMiwKKysgICAgVU5XX0FBUkNINjRfVjMsCisrICAgIFVOV19BQVJDSDY0X1Y0LAorKyAgICBVTldfQUFSQ0g2NF9WNSwKKysgICAgVU5XX0FBUkNINjRfVjYsCisrICAgIFVOV19BQVJDSDY0X1Y3LAorKyAgICBVTldfQUFSQ0g2NF9WOCwKKysgICAgVU5XX0FBUkNINjRfVjksCisrICAgIFVOV19BQVJDSDY0X1YxMCwKKysgICAgVU5XX0FBUkNINjRfVjExLAorKyAgICBVTldfQUFSQ0g2NF9WMTIsCisrICAgIFVOV19BQVJDSDY0X1YxMywKKysgICAgVU5XX0FBUkNINjRfVjE0LAorKyAgICBVTldfQUFSQ0g2NF9WMTUsCisrICAgIFVOV19BQVJDSDY0X1YxNiwKKysgICAgVU5XX0FBUkNINjRfVjE3LAorKyAgICBVTldfQUFSQ0g2NF9WMTgsCisrICAgIFVOV19BQVJDSDY0X1YxOSwKKysgICAgVU5XX0FBUkNINjRfVjIwLAorKyAgICBVTldfQUFSQ0g2NF9WMjEsCisrICAgIFVOV19BQVJDSDY0X1YyMiwKKysgICAgVU5XX0FBUkNINjRfVjIzLAorKyAgICBVTldfQUFSQ0g2NF9WMjQsCisrICAgIFVOV19BQVJDSDY0X1YyNSwKKysgICAgVU5XX0FBUkNINjRfVjI2LAorKyAgICBVTldfQUFSQ0g2NF9WMjcsCisrICAgIFVOV19BQVJDSDY0X1YyOCwKKysgICAgVU5XX0FBUkNINjRfVjI5LAorKyAgICBVTldfQUFSQ0g2NF9WMzAsCisrICAgIFVOV19BQVJDSDY0X1YzMSwKKysKKysgICAgVU5XX0FBUkNINjRfRlBTUiwKKysgICAgVU5XX0FBUkNINjRfRlBDUiwKKysKKysgICAgLyogRm9yIEFBcmNoNjQsIHRoZSBDRkEgaXMgdGhlIHZhbHVlIG9mIFNQICh4MzEpIGF0IHRoZSBjYWxsIHNpdGUgb2YgdGhlCisrICAgICAgIHByZXZpb3VzIGZyYW1lLiAgKi8KKysgICAgVU5XX0FBUkNINjRfQ0ZBID0gVU5XX0FBUkNINjRfU1AsCisrCisrICAgIFVOV19UREVQX0xBU1RfUkVHID0gVU5XX0FBUkNINjRfRlBDUiwKKysKKysgICAgVU5XX1RERVBfSVAgPSBVTldfQUFSQ0g2NF9YMzAsCisrICAgIFVOV19UREVQX1NQID0gVU5XX0FBUkNINjRfU1AsCisrICAgIFVOV19UREVQX0VIID0gVU5XX0FBUkNINjRfWDAsCisrCisrICB9CisrYWFyY2g2NF9yZWdudW1fdDsKKysKKysvKiBVc2UgUjAgdGhyb3VnaCBSMyB0byBwYXNzIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbi4gICovCisrI2RlZmluZSBVTldfVERFUF9OVU1fRUhfUkVHUwk0CisrCisrdHlwZWRlZiBzdHJ1Y3QgdW53X3RkZXBfc2F2ZV9sb2MKKysgIHsKKysgICAgLyogQWRkaXRpb25hbCB0YXJnZXQtZGVwZW5kZW50IGluZm8gb24gYSBzYXZlIGxvY2F0aW9uLiAgKi8KKysgIH0KKyt1bndfdGRlcF9zYXZlX2xvY190OworKworKworKy8qIE9uIEFBcmNoNjQsIHdlIGNhbiBkaXJlY3RseSB1c2UgdWNvbnRleHRfdCBhcyB0aGUgdW53aW5kIGNvbnRleHQuICAqLworK3R5cGVkZWYgdWNvbnRleHRfdCB1bndfdGRlcF9jb250ZXh0X3Q7CisrCisrI2luY2x1ZGUgImxpYnVud2luZC1jb21tb24uaCIKKysjaW5jbHVkZSAibGlidW53aW5kLWR5bmFtaWMuaCIKKysKKysjZGVmaW5lIHVud190ZGVwX2dldGNvbnRleHQodWMpICAgICAgICAgKGdldGNvbnRleHQgKHVjKSwgMCkKKysjZGVmaW5lIHVud190ZGVwX2lzX2ZwcmVnCQlVTldfQVJDSF9PQkooaXNfZnByZWcpCisrCisrZXh0ZXJuIGludCB1bndfdGRlcF9pc19mcHJlZyAoaW50KTsKKysKKysjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQorK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogTElCVU5XSU5EX0ggKi8KKy0tLSBhL2luY2x1ZGUvbGlidW53aW5kLmguaW4KKysrKyBiL2luY2x1ZGUvbGlidW53aW5kLmguaW4KK0BAIC0zLDcgKzMsOSBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrI2luY2x1ZGUgImxpYnVud2luZC1hYXJjaDY0LmgiCisrI2VsaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJsaWJ1bndpbmQtYXJtLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAibGlidW53aW5kLWhwcGEuaCIKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCitAQCAtMCwwICsxLDUyIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIGR3YXJmX2NvbmZpZ19oCisrI2RlZmluZSBkd2FyZl9jb25maWdfaAorKworKy8qIFRoaXMgbWF0Y2hlcyB0aGUgdmFsdWUgdWRlcyBieSBHQ0MgKHNlZQorKyAgIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lmg6RFdBUkZfRlJBTUVfUkVHSVNURVJTLiAgKi8KKysjZGVmaW5lIERXQVJGX05VTV9QUkVTRVJWRURfUkVHUwk5NworKworKy8qIFJldHVybiBUUlVFIGlmIHRoZSBBRERSX1NQQUNFIHVzZXMgYmlnLWVuZGlhbiBieXRlLW9yZGVyLiAgKi8KKysjZGVmaW5lIGR3YXJmX2lzX2JpZ19lbmRpYW4oYWRkcl9zcGFjZSkJMAorKworKyNkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpICgoKHJlZykgPD0gVU5XX0FBUkNINjRfVjMxKSA/IChyZWcpIDogMCkKKysKKysvKiBDb252ZXJ0IGEgcG9pbnRlciB0byBhIGR3YXJmX2N1cnNvciBzdHJ1Y3R1cmUgdG8gYSBwb2ludGVyIHRvCisrICAgdW53X2N1cnNvcl90LiAgKi8KKysjZGVmaW5lIGR3YXJmX3RvX2N1cnNvcihjKQkoKHVud19jdXJzb3JfdCAqKSAoYykpCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHdhcmZfbG9jCisrICB7CisrICAgIHVud193b3JkX3QgdmFsOworKyNpZm5kZWYgVU5XX0xPQ0FMX09OTFkKKysgICAgdW53X3dvcmRfdCB0eXBlOwkJLyogc2VlIERXQVJGX0xPQ19UWVBFXyogbWFjcm9zLiAgKi8KKysjZW5kaWYKKysgIH0KKytkd2FyZl9sb2NfdDsKKysKKysjZW5kaWYgLyogZHdhcmZfY29uZmlnX2ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCitAQCAtMCwwICsxLDMzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKy8qIFVzZSBnbGliYydzIGp1bXAtYnVmZmVyIGluZGljZXM7IE5QVEwgcGVla3MgYXQgU1A6ICovCisrCisrLyogRklYTUUgZm9yIEFBcmNoNjQgICovCisrCisrI2RlZmluZSBKQl9TUAkJMTMKKysjZGVmaW5lIEpCX1JQCQkxNAorKyNkZWZpbmUgSkJfTUFTS19TQVZFRAkxNQorKyNkZWZpbmUgSkJfTUFTSwkJMTYKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgKK0BAIC0wLDAgKzEsMjk0IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IEhld2xldHQtUGFja2FyZCBDbworKwlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIEFBUkNINjRfTElCVU5XSU5EX0lfSAorKyNkZWZpbmUgQUFSQ0g2NF9MSUJVTldJTkRfSV9ICisrCisrLyogVGFyZ2V0LWRlcGVuZGVudCBkZWZpbml0aW9ucyB0aGF0IGFyZSBpbnRlcm5hbCB0byBsaWJ1bndpbmQgYnV0IG5lZWQKKysgICB0byBiZSBzaGFyZWQgd2l0aCB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysKKysjaW5jbHVkZSAiZWxmNjQuaCIKKysjaW5jbHVkZSAibWVtcG9vbC5oIgorKyNpbmNsdWRlICJkd2FyZi5oIgorKworK3R5cGVkZWYgc3RydWN0CisrICB7CisrICAgIC8qIG5vIGFhcmNoNjQtc3BlY2lmaWMgZmFzdCB0cmFjZSAqLworKyAgfQorK3Vud190ZGVwX2ZyYW1lX3Q7CisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrCisrdHlwZWRlZiB1bndfd29yZF90IGFhcmNoNjRfbG9jX3Q7CisrCisrI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgYWFyY2g2NF9sb2MKKysgIHsKKysgICAgdW53X3dvcmRfdCB3MCwgdzE7CisrICB9CisrYWFyY2g2NF9sb2NfdDsKKysKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrc3RydWN0IHVud19hZGRyX3NwYWNlCisrICB7CisrICAgIHN0cnVjdCB1bndfYWNjZXNzb3JzIGFjYzsKKysgICAgaW50IGJpZ19lbmRpYW47CisrICAgIHVud19jYWNoaW5nX3BvbGljeV90IGNhY2hpbmdfcG9saWN5OworKyNpZmRlZiBIQVZFX0FUT01JQ19PUFNfSAorKyAgICBBT190IGNhY2hlX2dlbmVyYXRpb247CisrI2Vsc2UKKysgICAgdWludDMyX3QgY2FjaGVfZ2VuZXJhdGlvbjsKKysjZW5kaWYKKysgICAgdW53X3dvcmRfdCBkeW5fZ2VuZXJhdGlvbjsgICAgICAgICAgLyogc2VlIGR5bi1jb21tb24uaCAqLworKyAgICB1bndfd29yZF90IGR5bl9pbmZvX2xpc3RfYWRkcjsJLyogKGNhY2hlZCkgZHluX2luZm9fbGlzdF9hZGRyICovCisrICAgIHN0cnVjdCBkd2FyZl9yc19jYWNoZSBnbG9iYWxfY2FjaGU7CisrICAgIHN0cnVjdCB1bndfZGVidWdfZnJhbWVfbGlzdCAqZGVidWdfZnJhbWVzOworKyAgIH07CisrCisrc3RydWN0IGN1cnNvcgorKyAgeworKyAgICBzdHJ1Y3QgZHdhcmZfY3Vyc29yIGR3YXJmOyAgICAgICAgICAvKiBtdXN0IGJlIGZpcnN0ICovCisrICAgIGVudW0KKysgICAgICB7CisrICAgICAgICBBQVJDSDY0X1NDRl9OT05FLAorKyAgICAgICAgQUFSQ0g2NF9TQ0ZfTElOVVhfUlRfU0lHRlJBTUUsCisrICAgICAgfQorKyAgICBzaWdjb250ZXh0X2Zvcm1hdDsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X2FkZHI7CisrICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9zcDsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X3BjOworKyAgfTsKKysKKysjZGVmaW5lIERXQVJGX0dFVF9MT0MobCkgICAgICAgICgobCkudmFsKQorKworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyMgZGVmaW5lIERXQVJGX05VTExfTE9DICAgICAgICAgRFdBUkZfTE9DICgwLCAwKQorKyMgZGVmaW5lIERXQVJGX0lTX05VTExfTE9DKGwpICAgKERXQVJGX0dFVF9MT0MgKGwpID09IDApCisrIyBkZWZpbmUgRFdBUkZfTE9DKHIsIHQpICAgICAgICAoKGR3YXJmX2xvY190KSB7IC52YWwgPSAocikgfSkKKysjIGRlZmluZSBEV0FSRl9JU19SRUdfTE9DKGwpICAgIDAKKysjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIChEV0FSRl9MT0MoKHVud193b3JkX3QpICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwX3VjX2FkZHIoKGMpLT5hc19hcmcsIChyKSksIDApKQorKyMgZGVmaW5lIERXQVJGX01FTV9MT0MoYyxtKSAgICAgRFdBUkZfTE9DICgobSksIDApCisrIyBkZWZpbmUgRFdBUkZfRlBSRUdfTE9DKGMscikgICAoRFdBUkZfTE9DKCh1bndfd29yZF90KSAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcF91Y19hZGRyKChjKS0+YXNfYXJnLCAocikpLCAwKSkKKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCisreworKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLTE7CisrICAqdmFsID0gKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgKnZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICp2YWwgPSAqKHVud193b3JkX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90IHZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICoodW53X3dvcmRfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOworKyAgcmV0dXJuIDA7CisrfQorKworKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLworKyMgZGVmaW5lIERXQVJGX0xPQ19UWVBFX0ZQICAgICAgKDEgPDwgMCkKKysjIGRlZmluZSBEV0FSRl9MT0NfVFlQRV9SRUcgICAgICgxIDw8IDEpCisrIyBkZWZpbmUgRFdBUkZfTlVMTF9MT0MgICAgICAgICBEV0FSRl9MT0MgKDAsIDApCisrIyBkZWZpbmUgRFdBUkZfSVNfTlVMTF9MT0MobCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoeyBkd2FyZl9sb2NfdCBfbCA9IChsKTsgX2wudmFsID09IDAgJiYgX2wudHlwZSA9PSAwOyB9KQorKyMgZGVmaW5lIERXQVJGX0xPQyhyLCB0KSAgICAgICAgKChkd2FyZl9sb2NfdCkgeyAudmFsID0gKHIpLCAudHlwZSA9ICh0KSB9KQorKyMgZGVmaW5lIERXQVJGX0lTX1JFR19MT0MobCkgICAgKCgobCkudHlwZSAmIERXQVJGX0xPQ19UWVBFX1JFRykgIT0gMCkKKysjIGRlZmluZSBEV0FSRl9JU19GUF9MT0MobCkgICAgICgoKGwpLnR5cGUgJiBEV0FSRl9MT0NfVFlQRV9GUCkgIT0gMCkKKysjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIERXQVJGX0xPQygociksIERXQVJGX0xPQ19UWVBFX1JFRykKKysjIGRlZmluZSBEV0FSRl9NRU1fTE9DKGMsbSkgICAgIERXQVJGX0xPQyAoKG0pLCAwKQorKyMgZGVmaW5lIERXQVJGX0ZQUkVHX0xPQyhjLHIpICAgRFdBUkZfTE9DKChyKSwgKERXQVJGX0xPQ19UWVBFX1JFRyAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERXQVJGX0xPQ19UWVBFX0ZQKSkKKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCisreworKyAgY2hhciAqdmFscCA9IChjaGFyICopICZ2YWw7CisrICB1bndfd29yZF90IGFkZHI7CisrICBpbnQgcmV0OworKworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX2ZwcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCAwLCBjLT5hc19hcmcpOworKworKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZykpIDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190IHZhbCkKKyt7CisrICBjaGFyICp2YWxwID0gKGNoYXIgKikgJnZhbDsKKysgIHVud193b3JkX3QgYWRkcjsKKysgIGludCByZXQ7CisrCisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfZnByZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsLCAxLCBjLT5hc19hcmcpOworKworKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZykpIDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90ICp2YWwpCisreworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQorKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCisrICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQorKyAgICAgaGFwcGVuPyAgKi8KKysgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKKysgIGVsc2UKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9wdXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCB2YWwpCisreworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQorKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCisrICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQorKyAgICAgaGFwcGVuPyAgKi8KKysgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksICZ2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7CisrICBlbHNlCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCAmdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOworK30KKysKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrCisrCisrI2RlZmluZSB0ZGVwX2dldGNvbnRleHRfdHJhY2UgICAgICAgICAgIHVud19nZXRjb250ZXh0CisrI2RlZmluZSB0ZGVwX2luaXRfZG9uZQkJCVVOV19PQkooaW5pdF9kb25lKQorKyNkZWZpbmUgdGRlcF9pbml0CQkJVU5XX09CSihpbml0KQorKy8qIFBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgVU5XX0lORk9fRk9STUFUX1RBQkxFIG5lZWQgdG8gZGVmaW5lCisrICAgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlLiAgKi8KKysjZGVmaW5lIHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZQlkd2FyZl9zZWFyY2hfdW53aW5kX3RhYmxlCisrI2RlZmluZSB0ZGVwX2ZpbmRfdW53aW5kX3RhYmxlCSAgICAgICAgZHdhcmZfZmluZF91bndpbmRfdGFibGUKKysjZGVmaW5lIHRkZXBfdWNfYWRkcgkJCVVOV19PQkoodWNfYWRkcikKKysjZGVmaW5lIHRkZXBfZ2V0X2VsZl9pbWFnZQkJVU5XX0FSQ0hfT0JKKGdldF9lbGZfaW1hZ2UpCisrI2RlZmluZSB0ZGVwX2FjY2Vzc19yZWcJCQlVTldfT0JKKGFjY2Vzc19yZWcpCisrI2RlZmluZSB0ZGVwX2FjY2Vzc19mcHJlZwkJVU5XX09CSihhY2Nlc3NfZnByZWcpCisrI2RlZmluZSB0ZGVwX2ZldGNoX2ZyYW1lKGMsaXAsbikJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfY2FjaGVfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCisrI2RlZmluZSB0ZGVwX3JldXNlX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF9zdGFzaF9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfdHJhY2UoY3VyLGFkZHIsbikJCSgtVU5XX0VOT0lORk8pCisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGR3YXJmX2ZpbmRfcHJvY19pbmZvKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjKS0+YXNfYXJnKQorKyMgZGVmaW5lIHRkZXBfcHV0X3Vud2luZF9pbmZvKGFzLHBpLGFyZykgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZHdhcmZfcHV0X3Vud2luZF9pbmZvKChhcyksIChwaSksIChhcmcpKQorKyNlbHNlCisrIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKCooYyktPmFzLT5hY2MuZmluZF9wcm9jX2luZm8pKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyktPmFzX2FyZykKKysjIGRlZmluZSB0ZGVwX3B1dF91bndpbmRfaW5mbyhhcyxwaSxhcmcpICAgICAgICAgICAgICAgIFwKKysgICAgICAgICgqKGFzKS0+YWNjLnB1dF91bndpbmRfaW5mbykoKGFzKSwgKHBpKSwgKGFyZykpCisrI2VuZGlmCisrCisrI2RlZmluZSB0ZGVwX2dldF9hcyhjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmFzKQorKyNkZWZpbmUgdGRlcF9nZXRfYXNfYXJnKGMpICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5hc19hcmcpCisrI2RlZmluZSB0ZGVwX2dldF9pcChjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmlwKQorKyNkZWZpbmUgdGRlcF9iaWdfZW5kaWFuKGFzKSAgICAgICAgICAgICAoKGFzKS0+YmlnX2VuZGlhbikKKysKKytleHRlcm4gaW50IHRkZXBfaW5pdF9kb25lOworKworK2V4dGVybiB2b2lkIHRkZXBfaW5pdCAodm9pZCk7CisrZXh0ZXJuIGludCB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgaXAsCisrCQkJCSAgICAgdW53X2R5bl9pbmZvX3QgKmRpLCB1bndfcHJvY19pbmZvX3QgKnBpLAorKwkJCQkgICAgIGludCBuZWVkX3Vud2luZF9pbmZvLCB2b2lkICphcmcpOworK2V4dGVybiB2b2lkICp0ZGVwX3VjX2FkZHIgKHVud190ZGVwX2NvbnRleHRfdCAqdWMsIGludCByZWcpOworK2V4dGVybiBpbnQgdGRlcF9nZXRfZWxmX2ltYWdlIChzdHJ1Y3QgZWxmX2ltYWdlICplaSwgcGlkX3QgcGlkLCB1bndfd29yZF90IGlwLAorKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpzZWdiYXNlLCB1bnNpZ25lZCBsb25nICptYXBvZmYsCisrCQkJICAgICAgIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKTsKKytleHRlcm4gaW50IHRkZXBfYWNjZXNzX3JlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywKKysJCQkgICAgdW53X3dvcmRfdCAqdmFscCwgaW50IHdyaXRlKTsKKytleHRlcm4gaW50IHRkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLAorKwkJCSAgICAgIHVud19mcHJlZ190ICp2YWxwLCBpbnQgd3JpdGUpOworKworKyNlbmRpZiAvKiBBQVJDSDY0X0xJQlVOV0lORF9JX0ggKi8KKy0tLSBhL2luY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaAorKysrIGIvaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oCitAQCAtMSw3ICsxLDkgQEAKKyAvKiBQcm92aWRlIGEgcmVhbCBmaWxlIC0gbm90IGEgc3ltbGluayAtIGFzIGl0IHdvdWxkIGNhdXNlIG11bHRpYXJjaCBjb25mbGljdHMKKyAgICB3aGVuIG11bHRpcGxlIGRpZmZlcmVudCBhcmNoIHJlbGVhc2VzIGFyZSBpbnN0YWxsZWQgc2ltdWx0YW5lb3VzbHkuICAqLworIAorLSNpZiBkZWZpbmVkIF9fYXJtX18KKysjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXworKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oIgorKyNlbGlmIGRlZmluZWQgX19hcm1fXworICMgaW5jbHVkZSAidGRlcC1hcm0vZHdhcmYtY29uZmlnLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAidGRlcC1ocHBhL2R3YXJmLWNvbmZpZy5oIgorLS0tIGEvaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oCisrKysgYi9pbmNsdWRlL3RkZXAvam1wYnVmLmgKK0BAIC0zLDYgKzMsOCBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9qbXBidWYuaCIKKyAjaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJ0ZGVwLWFybS9qbXBidWYuaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCistLS0gYS9pbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbgorKysrIGIvaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4KK0BAIC0zLDcgKzMsOSBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCIKKysjZWxpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgInRkZXAtYXJtL2xpYnVud2luZF9pLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAidGRlcC1ocHBhL2xpYnVud2luZF9pLmgiCistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTE3MCw2ICsxNzAsMjggQEAgbGlidW53aW5kX2VsZnh4X2xhX1NPVVJDRVMgPSBlbGZ4eC5jCisgbm9pbnN0X0xUTElCUkFSSUVTICs9ICQoTElCVU5XSU5EX0VMRikKKyBsaWJ1bndpbmRfbGFfTElCQUREICs9ICQoTElCVU5XSU5EX0VMRikKKyAKKysjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQgYW5kIGxpYnVud2luZC1hYXJjaDY0OgorK25vaW5zdF9IRUFERVJTICs9IGFhcmNoNjQvaW5pdC5oIGFhcmNoNjQvb2Zmc2V0cy5oIGFhcmNoNjQvdW53aW5kX2kuaAorK2xpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCisrCWFhcmNoNjQvaXNfZnByZWcuYyBhYXJjaDY0L3JlZ25hbWUuYworKworKyMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZDoKKytsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikJICAgIFwKKysJJChsaWJ1bndpbmRfbGFfU09VUkNFU19sb2NhbCkJCQkJCSAgICBcCisrCWFhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jIAkJICAgIFwKKysJYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMgYWFyY2g2NC9MZ2xvYmFsLmMgYWFyY2g2NC9MaW5pdC5jCSAgICBcCisrCWFhcmNoNjQvTGluaXRfbG9jYWwuYyBhYXJjaDY0L0xpbml0X3JlbW90ZS5jIAkJCSAgICBcCisrCWFhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvTHJlZ3MuYyBhYXJjaDY0L0xyZXN1bWUuYyAJICAgIFwKKysJYWFyY2g2NC9Mc3RlcC5jCisrCisrbGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikgXAorKwkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2dlbmVyaWMpCQkJCQkgICAgICBcCisrCWFhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jIAkJICAgICAgXAorKwlhYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyBhYXJjaDY0L0dnbG9iYWwuYyBhYXJjaDY0L0dpbml0LmMgCSAgICAgIFwKKysJYWFyY2g2NC9HaW5pdF9sb2NhbC5jIGFhcmNoNjQvR2luaXRfcmVtb3RlLmMJCQkgICAgICBcCisrCWFhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvR3JlZ3MuYyBhYXJjaDY0L0dyZXN1bWUuYwkgICAgICBcCisrCWFhcmNoNjQvR3N0ZXAuYworKworICMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLWFybToKKyBub2luc3RfSEVBREVSUyArPSBhcm0vaW5pdC5oIGFybS9vZmZzZXRzLmggYXJtL3Vud2luZF9pLmgKKyBsaWJ1bndpbmRfbGFfU09VUkNFU19hcm1fY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCitAQCAtNDE4LDYgKzQ0MCwxOCBAQCBpZiBPU19GUkVFQlNECisgIGxpYnVud2luZF9jb3JlZHVtcF9sYV9TT1VSQ0VTICs9IGNvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19mcmVlYnNkLmMKKyBlbmRpZgorIAorK2lmIEFSQ0hfQUFSQ0g2NAorKyBsaWJfTFRMSUJSQVJJRVMgKz0gbGlidW53aW5kLWFhcmNoNjQubGEKKysgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTERGTEFHUyA9ICQoQ09NTU9OX1NPX0xERkxBR1MpIC12ZXJzaW9uLWluZm8gJChTT1ZFUlNJT04pCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCA9IGxpYnVud2luZC1kd2FyZi1nZW5lcmljLmxhCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCArPSBsaWJ1bndpbmQtZWxmNjQubGEKKytpZiAhUkVNT1RFX09OTFkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREICs9IGxpYnVud2luZC5sYSAtbGMKKytlbmRpZgorKyBsaWJ1bndpbmRfc2V0am1wX2xhX1NPVVJDRVMgKz0gYWFyY2g2NC9zaWdsb25nam1wLlMKKytlbHNlCisgaWYgQVJDSF9BUk0KKyAgbGliX0xUTElCUkFSSUVTICs9IGxpYnVud2luZC1hcm0ubGEKKyAgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkKK0BAIC01NDUsNiArNTc5LDcgQEAgZW5kaWYgIyBBUkNIX01JUFMKKyBlbmRpZiAjIEFSQ0hfSFBQQQorIGVuZGlmICMgQVJDSF9JQTY0CisgZW5kaWYgIyBBUkNIX0FSTQorK2VuZGlmICMgQVJDSF9BQVJDSDY0CisgCisgIyBsaWJ1bndpbmQtc2V0am1wIGRlcGVuZHMgb24gbGlidW53aW5kLSQoYXJjaCkuIFRoZXJlZm9yZSBtdXN0IGJlIGFkZGVkCisgIyBhdCB0aGUgZW5kLgorQEAgLTU2Nyw3ICs2MDIsOCBAQCBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JCisgQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKKyBub2luc3RfSEVBREVSUyArPSB1bndpbmQvdW53aW5kLWludGVybmFsLmgKKyAKKy1FWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAorK0VYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCQkJXAorKwkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19ocHBhKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfaWE2NCkJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX21pcHMpCQkJXAorQEAgLTU3OSw2ICs2MTUsNyBAQCBFWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2xvY2FsKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfZ2VuZXJpYykJCQlcCisrCQkkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkJCVwKKyAJCSQobGlidW53aW5kX2FybV9sYV9TT1VSQ0VTX2FybSkJCQlcCisgCQkkKGxpYnVud2luZF9ocHBhX2xhX1NPVVJDRVNfaHBwYSkJCVwKKyAJCSQobGlidW53aW5kX2lhNjRfbGFfU09VUkNFU19pYTY0KQkJXAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdAorK3Vud19jcmVhdGVfYWRkcl9zcGFjZSAodW53X2FjY2Vzc29yc190ICphLCBpbnQgYnl0ZV9vcmRlcikKKyt7CisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrICByZXR1cm4gTlVMTDsKKysjZWxzZQorKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKKysKKysgIC8qIEFBcmNoNjQgc3VwcG9ydHMgbGl0dGxlLWVuZGlhbiBhbmQgYmlnLWVuZGlhbi4gKi8KKysgIGlmIChieXRlX29yZGVyICE9IDAgJiYgYnl0ZV9vcmRlciAhPSBfX0xJVFRMRV9FTkRJQU4KKysgICAgICAmJiBieXRlX29yZGVyICE9IF9fQklHX0VORElBTikKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBhcyA9IG1hbGxvYyAoc2l6ZW9mICgqYXMpKTsKKysgIGlmICghYXMpCisrICAgIHJldHVybiBOVUxMOworKworKyAgbWVtc2V0IChhcywgMCwgc2l6ZW9mICgqYXMpKTsKKysKKysgIGFzLT5hY2MgPSAqYTsKKysKKysgIC8qIERlZmF1bHQgdG8gbGl0dGxlLWVuZGlhbiBmb3IgQUFyY2g2NC4gKi8KKysgIGlmIChieXRlX29yZGVyID09IDAgfHwgYnl0ZV9vcmRlciA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIGFzLT5iaWdfZW5kaWFuID0gMDsKKysgIGVsc2UKKysgICAgYXMtPmJpZ19lbmRpYW4gPSAxOworKworKyAgcmV0dXJuIGFzOworKyNlbmRpZgorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKK0BAIC0wLDAgKzEsMzkgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19nZXRfcHJvY19pbmZvICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X3Byb2NfaW5mb190ICpwaSkKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgaW50IHJldDsKKysKKysgIHJldCA9IGR3YXJmX21ha2VfcHJvY19pbmZvICgmYy0+ZHdhcmYpOworKyAgaWYgKHJldCA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICAqcGkgPSBjLT5kd2FyZi5waTsKKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYworQEAgLTAsMCArMSwxMDAgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfZ2V0X3NhdmVfbG9jICh1bndfY3Vyc29yX3QgKmN1cnNvciwgaW50IHJlZywgdW53X3NhdmVfbG9jX3QgKnNsb2MpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGR3YXJmX2xvY190IGxvYzsKKysKKysgIHN3aXRjaCAocmVnKQorKyAgICB7CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUEM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUFNUQVRFOgorKyAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGxvYyA9IERXQVJGX05VTExfTE9DOwkvKiBkZWZhdWx0IHRvICJub3Qgc2F2ZWQiICovCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgIG1lbXNldCAoc2xvYywgMCwgc2l6ZW9mICgqc2xvYykpOworKworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTk9ORTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNpZiAhZGVmaW5lZChVTldfTE9DQUxfT05MWSkKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfUkVHOworKyAgICAgIHNsb2MtPnUucmVnbnVtID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTUVNT1JZOworKyAgICAgIHNsb2MtPnUuYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnbG9iYWwuYworQEAgLTAsMCArMSw1NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgImR3YXJmX2kuaCIKKysKKytISURERU4gZGVmaW5lX2xvY2sgKGFhcmNoNjRfbG9jayk7CisrSElEREVOIGludCB0ZGVwX2luaXRfZG9uZTsKKysKKytISURERU4gdm9pZAorK3RkZXBfaW5pdCAodm9pZCkKKyt7CisrICBpbnRybWFza190IHNhdmVkX21hc2s7CisrCisrICBzaWdmaWxsc2V0ICgmdW53aV9mdWxsX21hc2spOworKworKyAgbG9ja19hY3F1aXJlICgmYWFyY2g2NF9sb2NrLCBzYXZlZF9tYXNrKTsKKysgIHsKKysgICAgaWYgKHRkZXBfaW5pdF9kb25lKQorKyAgICAgIC8qIGFub3RoZXIgdGhyZWFkIGVsc2UgYmVhdCB1cyB0byBpdC4uLiAqLworKyAgICAgIGdvdG8gb3V0OworKworKyAgICBtaV9pbml0ICgpOworKworKyAgICBkd2FyZl9pbml0ICgpOworKworKyNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisrICAgIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICgpOworKyNlbmRpZgorKyAgICB0ZGVwX2luaXRfZG9uZSA9IDE7CS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGluaXRpYWxpemVkLi4uICovCisrICB9CisrIG91dDoKKysgIGxvY2tfcmVsZWFzZSAoJmFhcmNoNjRfbG9jaywgc2F2ZWRfbWFzayk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2luaXQuYworQEAgLTAsMCArMSwxODcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrI2lmZGVmIFVOV19SRU1PVEVfT05MWQorKworKy8qIHVud19sb2NhbF9hZGRyX3NwYWNlIGlzIGEgTlVMTCBwb2ludGVyIGluIHRoaXMgY2FzZS4gICovCisrUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QgdW53X2xvY2FsX2FkZHJfc3BhY2U7CisrCisrI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK3N0YXRpYyBzdHJ1Y3QgdW53X2FkZHJfc3BhY2UgbG9jYWxfYWRkcl9zcGFjZTsKKysKKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdCB1bndfbG9jYWxfYWRkcl9zcGFjZSA9ICZsb2NhbF9hZGRyX3NwYWNlOworKworK3N0YXRpYyBpbmxpbmUgdm9pZCAqCisrdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCisreworKyAgaWYgKHJlZyA+PSBVTldfQUFSQ0g2NF9YMCAmJiByZWcgPD0gVU5XX0FBUkNINjRfVjMxKQorKyAgICByZXR1cm4gJnVjLT51Y19tY29udGV4dC5yZWdzW3JlZ107CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKysKKysjIGlmZGVmIFVOV19MT0NBTF9PTkxZCisrCisrSElEREVOIHZvaWQgKgorK3RkZXBfdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCisreworKyAgcmV0dXJuIHVjX2FkZHIgKHVjLCByZWcpOworK30KKysKKysjIGVuZGlmIC8qIFVOV19MT0NBTF9PTkxZICovCisrCisrSElEREVOIHVud19keW5faW5mb19saXN0X3QgX1VfZHluX2luZm9fbGlzdDsKKysKKysvKiBYWFggZml4IG1lOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGxvY2F0ZSB0aGUgZHluLWluZm8gbGlzdAorKyAgICAgICBieSBhIHJlbW90ZSB1bndpbmRlci4gIE9uIGlhNjQsIHRoaXMgaXMgZG9uZSB2aWEgYSBzcGVjaWFsCisrICAgICAgIHVud2luZC10YWJsZSBlbnRyeS4gIFBlcmhhcHMgc29tZXRoaW5nIHNpbWlsYXIgY2FuIGJlIGRvbmUgd2l0aAorKyAgICAgICBEV0FSRjIgdW53aW5kIGluZm8uICAqLworKworK3N0YXRpYyB2b2lkCisrcHV0X3Vud2luZF9pbmZvICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcHJvY19pbmZvX3QgKnByb2NfaW5mbywgdm9pZCAqYXJnKQorK3sKKysgIC8qIGl0J3MgYSBuby1vcCAqLworK30KKysKKytzdGF0aWMgaW50CisrZ2V0X2R5bl9pbmZvX2xpc3RfYWRkciAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCAqZHluX2luZm9fbGlzdF9hZGRyLAorKwkJCXZvaWQgKmFyZykKKyt7CisrICAqZHluX2luZm9fbGlzdF9hZGRyID0gKHVud193b3JkX3QpICZfVV9keW5faW5mb19saXN0OworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfbWVtICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGFkZHIsIHVud193b3JkX3QgKnZhbCwgaW50IHdyaXRlLAorKwkgICAgdm9pZCAqYXJnKQorK3sKKysgIGlmICh3cml0ZSkKKysgICAgeworKyAgICAgIERlYnVnICgxNiwgIm1lbVslbHhdIDwtICVseFxuIiwgYWRkciwgKnZhbCk7CisrICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7CisrICAgICAgRGVidWcgKDE2LCAibWVtWyVseF0gLT4gJWx4XG4iLCBhZGRyLCAqdmFsKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWwsIGludCB3cml0ZSwKKysJICAgIHZvaWQgKmFyZykKKyt7CisrICB1bndfd29yZF90ICphZGRyOworKyAgdWNvbnRleHRfdCAqdWMgPSBhcmc7CisrCisrICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQorKyAgICBnb3RvIGJhZHJlZzsKKysKKysgIGlmICghKGFkZHIgPSB1Y19hZGRyICh1YywgcmVnKSkpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKHdyaXRlKQorKyAgICB7CisrICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOworKyAgICAgIERlYnVnICgxMiwgIiVzIDwtICVseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksICp2YWwpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7CisrICAgICAgRGVidWcgKDEyLCAiJXMgLT4gJWx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwgKnZhbCk7CisrICAgIH0KKysgIHJldHVybiAwOworKworKyBiYWRyZWc6CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICByZXR1cm4gLVVOV19FQkFEUkVHOworK30KKysKKytzdGF0aWMgaW50CisrYWNjZXNzX2ZwcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFsLAorKwkgICAgICBpbnQgd3JpdGUsIHZvaWQgKmFyZykKKyt7CisrICB1Y29udGV4dF90ICp1YyA9IGFyZzsKKysgIHVud19mcHJlZ190ICphZGRyOworKworKyAgaWYgKCF1bndfaXNfZnByZWcgKHJlZykpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKCEoYWRkciA9IHVjX2FkZHIgKHVjLCByZWcpKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAod3JpdGUpCisrICAgIHsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyA8LSAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCisrCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7CisrICAgICAgKih1bndfZnByZWdfdCAqKSBhZGRyID0gKnZhbDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnZhbCA9ICoodW53X2ZwcmVnX3QgKikgYWRkcjsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyAtPiAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCisrCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7CisrICAgIH0KKysgIHJldHVybiAwOworKworKyBiYWRyZWc6CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICAvKiBhdHRlbXB0IHRvIGFjY2VzcyBhIG5vbi1wcmVzZXJ2ZWQgcmVnaXN0ZXIgKi8KKysgIHJldHVybiAtVU5XX0VCQURSRUc7CisrfQorKworK3N0YXRpYyBpbnQKKytnZXRfc3RhdGljX3Byb2NfbmFtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBpcCwKKysJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHVud193b3JkX3QgKm9mZnAsCisrCQkgICAgICB2b2lkICphcmcpCisreworKyAgcmV0dXJuIF9VZWxmNjRfZ2V0X3Byb2NfbmFtZSAoYXMsIGdldHBpZCAoKSwgaXAsIGJ1ZiwgYnVmX2xlbiwgb2ZmcCk7CisrfQorKworK0hJRERFTiB2b2lkCisrYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKHZvaWQpCisreworKyAgbWVtc2V0ICgmbG9jYWxfYWRkcl9zcGFjZSwgMCwgc2l6ZW9mIChsb2NhbF9hZGRyX3NwYWNlKSk7CisrICBsb2NhbF9hZGRyX3NwYWNlLmNhY2hpbmdfcG9saWN5ID0gVU5XX0NBQ0hFX0dMT0JBTDsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmZpbmRfcHJvY19pbmZvID0gZHdhcmZfZmluZF9wcm9jX2luZm87CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5wdXRfdW53aW5kX2luZm8gPSBwdXRfdW53aW5kX2luZm87CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5nZXRfZHluX2luZm9fbGlzdF9hZGRyID0gZ2V0X2R5bl9pbmZvX2xpc3RfYWRkcjsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19tZW0gPSBhY2Nlc3NfbWVtOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX3JlZyA9IGFjY2Vzc19yZWc7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfZnByZWcgPSBhY2Nlc3NfZnByZWc7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5yZXN1bWUgPSBhYXJjaDY0X2xvY2FsX3Jlc3VtZTsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmdldF9wcm9jX25hbWUgPSBnZXRfc3RhdGljX3Byb2NfbmFtZTsKKysgIHVud19mbHVzaF9jYWNoZSAoJmxvY2FsX2FkZHJfc3BhY2UsIDAsIDApOworK30KKysKKysjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYworQEAgLTAsMCArMSw1NSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKyNpbmNsdWRlICJpbml0LmgiCisrCisrI2lmZGVmIFVOV19SRU1PVEVfT05MWQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQorK3sKKysgIHJldHVybiAtVU5XX0VJTlZBTDsKKyt9CisrCisrI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrCisrICBpZiAoIXRkZXBfaW5pdF9kb25lKQorKyAgICB0ZGVwX2luaXQgKCk7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKKysKKysgIGMtPmR3YXJmLmFzID0gdW53X2xvY2FsX2FkZHJfc3BhY2U7CisrICBjLT5kd2FyZi5hc19hcmcgPSB1YzsKKysKKysgIHJldHVybiBjb21tb25faW5pdCAoYywgMSk7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYworQEAgLTAsMCArMSw0NSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAiaW5pdC5oIgorKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9yZW1vdGUgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfYWRkcl9zcGFjZV90IGFzLCB2b2lkICphc19hcmcpCisreworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyAgcmV0dXJuIC1VTldfRUlOVkFMOworKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIGlmICghdGRlcF9pbml0X2RvbmUpCisrICAgIHRkZXBfaW5pdCAoKTsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgYy0+ZHdhcmYuYXMgPSBhczsKKysgIGMtPmR3YXJmLmFzX2FyZyA9IGFzX2FyZzsKKysgIHJldHVybiBjb21tb25faW5pdCAoYywgMCk7CisrI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYworQEAgLTAsMCArMSw2NCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKysvKiBUaGUgcmVzdG9yZXIgc3R1YiB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb3JtOgorKworKyAgIGQyODAxMTY4ICAgICAgICBtb3Z6ICAgIHg4LCAjMHg4YgorKyAgIGQ0MDAwMDAxICAgICAgICBzdmMgICAgICMweDAKKysqLworKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaXNfc2lnbmFsX2ZyYW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrI2lmZGVmIF9fbGludXhfXworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIHVud193b3JkX3QgdzAsIGlwOworKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKKysgIHVud19hY2Nlc3NvcnNfdCAqYTsKKysgIHZvaWQgKmFyZzsKKysgIGludCByZXQ7CisrCisrICBhcyA9IGMtPmR3YXJmLmFzOworKyAgYSA9IHVud19nZXRfYWNjZXNzb3JzIChhcyk7CisrICBhcmcgPSBjLT5kd2FyZi5hc19hcmc7CisrCisrICBpcCA9IGMtPmR3YXJmLmlwOworKworKyAgcmV0ID0gKCphLT5hY2Nlc3NfbWVtKSAoYXMsIGlwLCAmdzAsIDAsIGFyZyk7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIC8qIEZJWE1FOiBkaXN0aW5ndWlzaCAzMmJpdCBpbnNuIHZzIDY0Yml0IHJlZ2lzdGVycy4gICovCisrICBpZiAodzAgIT0gMHhkNDAwMDAwMWQyODAxMTY4KQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAxOworKworKyNlbHNlCisrICByZXR1cm4gLVVOV19FTk9JTkZPOworKyNlbmRpZgorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dyZWdzLmMKK0BAIC0wLDAgKzEsMTEzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytISURERU4gaW50CisrdGRlcF9hY2Nlc3NfcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWxwLAorKwkJIGludCB3cml0ZSkKKyt7CisrICBkd2FyZl9sb2NfdCBsb2MgPSBEV0FSRl9OVUxMX0xPQzsKKysgIHVuc2lnbmVkIGludCBtYXNrOworKworKyAgc3dpdGNoIChyZWcpCisrICAgIHsKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzoKKysgICAgICBtYXNrID0gMSA8PCByZWc7CisrICAgICAgaWYgKHdyaXRlKQorKyAgICAgICAgeworKyAgICAgICAgICBjLT5kd2FyZi5laF9hcmdzW3JlZ10gPSAqdmFscDsKKysgICAgICAgICAgYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayB8PSBtYXNrOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICBlbHNlIGlmICgoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIG1hc2spICE9IDApCisrICAgICAgICB7CisrICAgICAgICAgICp2YWxwID0gYy0+ZHdhcmYuZWhfYXJnc1tyZWddOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDExOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QQzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QU1RBVEU6CisrICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6CisrICAgICAgaWYgKHdyaXRlKQorKyAgICAgICAgcmV0dXJuIC1VTldfRVJFQURPTkxZUkVHOworKyAgICAgICp2YWxwID0gYy0+ZHdhcmYuY2ZhOworKyAgICAgIHJldHVybiAwOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgICAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKyAgICB9CisrCisrICBpZiAod3JpdGUpCisrICAgIHJldHVybiBkd2FyZl9wdXQgKCZjLT5kd2FyZiwgbG9jLCAqdmFscCk7CisrICBlbHNlCisrICAgIHJldHVybiBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgbG9jLCB2YWxwKTsKKyt9CisrCisrSElEREVOIGludAorK3RkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFscCwKKysJCSAgIGludCB3cml0ZSkKKyt7CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICByZXR1cm4gLVVOV19FQkFEUkVHOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dyZXN1bWUuYworQEAgLTAsMCArMSwxNzcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgIm9mZnNldHMuaCIKKysKKysjaWZuZGVmIFVOV19SRU1PVEVfT05MWQorKworK0hJRERFTiBpbmxpbmUgaW50CisrYWFyY2g2NF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19jdXJzb3JfdCAqY3Vyc29yLCB2b2lkICphcmcpCisreworKyNpZmRlZiBfX2xpbnV4X18KKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICB1bndfdGRlcF9jb250ZXh0X3QgKnVjID0gYy0+ZHdhcmYuYXNfYXJnOworKworKyAgaWYgKGMtPnNpZ2NvbnRleHRfZm9ybWF0ID09IEFBUkNINjRfU0NGX05PTkUpCisrICAgIHsKKysgICAgICAvKiBTaW5jZSB0aGVyZSBhcmUgbm8gc2lnbmFscyBpbnZvbHZlZCBoZXJlIHdlIHJlc3RvcmUgdGhlIG5vbiBzY3JhdGNoCisrCSByZWdpc3RlcnMgb25seS4gICovCisrICAgICAgdW5zaWduZWQgbG9uZyByZWdzWzExXTsKKysgICAgICByZWdzWzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTldOworKyAgICAgIHJlZ3NbMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07CisrICAgICAgcmVnc1syXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIxXTsKKysgICAgICByZWdzWzNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjJdOworKyAgICAgIHJlZ3NbNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107CisrICAgICAgcmVnc1s1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI0XTsKKysgICAgICByZWdzWzZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjVdOworKyAgICAgIHJlZ3NbN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07CisrICAgICAgcmVnc1s4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI3XTsKKysgICAgICByZWdzWzldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjhdOworKyAgICAgIHJlZ3NbMTBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOyAvKiBMUiAqLworKyAgICAgIHVuc2lnbmVkIGxvbmcgc3AgPSB1Yy0+dWNfbWNvbnRleHQuc3A7CisrCisrICAgICAgc3RydWN0IHJlZ3Nfb3ZlcmxheSB7CisrICAgICAgICBjaGFyIHhbc2l6ZW9mKHJlZ3MpXTsKKysgICAgICB9OworKworKyAgICAgIGFzbSB2b2xhdGlsZSAoCisrICAgICAgICAibGRwIHgxOSwgeDIwLCBbJTBdXG4iCisrICAgICAgICAibGRwIHgyMSwgeDIyLCBbJTAsMTZdXG4iCisrICAgICAgICAibGRwIHgyMywgeDI0LCBbJTAsMzJdXG4iCisrICAgICAgICAibGRwIHgyNSwgeDI2LCBbJTAsNDhdXG4iCisrICAgICAgICAibGRwIHgyNywgeDI4LCBbJTAsNjRdXG4iCisrICAgICAgICAibGRyIHgzMCwgWyUwLDgwXVxuIgorKyAgICAgICAgIm1vdiBzcCwgJTFcbiIKKysgICAgICAgICJyZXQgXG4iCisrICAgICAgICA6CisrICAgICAgICA6ICJyIiAocmVncyksCisrICAgICAgICAgICJyIiAoc3ApLAorKyAgICAgICAgICAibSIgKCooc3RydWN0IHJlZ3Nfb3ZlcmxheSAqKXJlZ3MpCisrICAgICAgKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKnNjID0gKHN0cnVjdCBzaWdjb250ZXh0ICopIGMtPnNpZ2NvbnRleHRfYWRkcjsKKysKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4MSkgc2MtPnJlZ3NbMF0gPSBjLT5kd2FyZi5laF9hcmdzWzBdOworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHgyKSBzYy0+cmVnc1sxXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMV07CisrICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDQpIHNjLT5yZWdzWzJdID0gYy0+ZHdhcmYuZWhfYXJnc1syXTsKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4OCkgc2MtPnJlZ3NbM10gPSBjLT5kd2FyZi5laF9hcmdzWzNdOworKworKyAgICAgIHNjLT5yZWdzWzRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNF07CisrICAgICAgc2MtPnJlZ3NbNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s1XTsKKysgICAgICBzYy0+cmVnc1s2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzZdOworKyAgICAgIHNjLT5yZWdzWzddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbN107CisrICAgICAgc2MtPnJlZ3NbOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s4XTsKKysgICAgICBzYy0+cmVnc1s5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzldOworKyAgICAgIHNjLT5yZWdzWzEwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEwXTsKKysgICAgICBzYy0+cmVnc1sxMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMV07CisrICAgICAgc2MtPnJlZ3NbMTJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTJdOworKyAgICAgIHNjLT5yZWdzWzEzXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEzXTsKKysgICAgICBzYy0+cmVnc1sxNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNF07CisrICAgICAgc2MtPnJlZ3NbMTVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTVdOworKyAgICAgIHNjLT5yZWdzWzE2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE2XTsKKysgICAgICBzYy0+cmVnc1sxN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxN107CisrICAgICAgc2MtPnJlZ3NbMThdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMThdOworKyAgICAgIHNjLT5yZWdzWzE5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE5XTsKKysgICAgICBzYy0+cmVnc1syMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07CisrICAgICAgc2MtPnJlZ3NbMjFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjFdOworKyAgICAgIHNjLT5yZWdzWzIyXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIyXTsKKysgICAgICBzYy0+cmVnc1syM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107CisrICAgICAgc2MtPnJlZ3NbMjRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjRdOworKyAgICAgIHNjLT5yZWdzWzI1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI1XTsKKysgICAgICBzYy0+cmVnc1syNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07CisrICAgICAgc2MtPnJlZ3NbMjddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjddOworKyAgICAgIHNjLT5yZWdzWzI4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI4XTsKKysgICAgICBzYy0+cmVnc1syOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOV07CisrICAgICAgc2MtPnJlZ3NbMzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOworKyAgICAgIHNjLT5zcCA9IHVjLT51Y19tY29udGV4dC5zcDsKKysgICAgICBzYy0+cGMgPSB1Yy0+dWNfbWNvbnRleHQucGM7CisrICAgICAgc2MtPnBzdGF0ZSA9IHVjLT51Y19tY29udGV4dC5wc3RhdGU7CisrCisrICAgICAgYXNtIHZvbGF0aWxlICgKKysgICAgICAgICJtb3Ygc3AsICUwXG4iCisrICAgICAgICAicmV0ICUxXG4iCisrICAgICAgICA6IDogInIiIChjLT5zaWdjb250ZXh0X3NwKSwgInIiIChjLT5zaWdjb250ZXh0X3BjKQorKyAgICAgICk7CisrICAgfQorKyAgdW5yZWFjaGFibGUoKTsKKysjZWxzZQorKyAgcHJpbnRmICgiJXM6IGltcGxlbWVudCBtZVxuIiwgX19GVU5DVElPTl9fKTsKKysjZW5kaWYKKysgIHJldHVybiAtVU5XX0VJTlZBTDsKKyt9CisrCisrI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKysKKytzdGF0aWMgaW5saW5lIHZvaWQKKytlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoc3RydWN0IGN1cnNvciAqYykKKyt7CisrICB1bndfYWRkcl9zcGFjZV90IGFzID0gYy0+ZHdhcmYuYXM7CisrICB2b2lkICphcmcgPSBjLT5kd2FyZi5hc19hcmc7CisrICB1bndfZnByZWdfdCBmcHZhbDsKKysgIHVud193b3JkX3QgdmFsOworKyAgaW50IHJlZzsKKysKKysgIERlYnVnICg4LCAiY29weWluZyBvdXQgY3Vyc29yIHN0YXRlXG4iKTsKKysKKysgIGZvciAocmVnID0gMDsgcmVnIDw9IFVOV19BQVJDSDY0X1BTVEFURTsgKytyZWcpCisrICAgIHsKKysgICAgICBEZWJ1ZyAoMTYsICJjb3B5aW5nICVzICVkXG4iLCB1bndfcmVnbmFtZSAocmVnKSwgcmVnKTsKKysgICAgICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQorKwl7CisrCSAgaWYgKHRkZXBfYWNjZXNzX2ZwcmVnIChjLCByZWcsICZmcHZhbCwgMCkgPj0gMCkKKysJICAgIGFzLT5hY2MuYWNjZXNzX2ZwcmVnIChhcywgcmVnLCAmZnB2YWwsIDEsIGFyZyk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBpZiAodGRlcF9hY2Nlc3NfcmVnIChjLCByZWcsICZ2YWwsIDApID49IDApCisrCSAgICBhcy0+YWNjLmFjY2Vzc19yZWcgKGFzLCByZWcsICZ2YWwsIDEsIGFyZyk7CisrCX0KKysgICAgfQorK30KKysKKytQUk9URUNURUQgaW50CisrdW53X3Jlc3VtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgaWYgKCFjLT5kd2FyZi5pcCkKKysgICAgeworKyAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBlYXNpbHkgd2hlbiB0aGUgZnJhbWUtY2hhaW4gZ2V0cyB0cnVuY2F0ZWQKKysJIGR1ZSB0byBiYWQgb3IgbWlzc2luZyB1bndpbmQtaW5mby4gICovCisrICAgICAgRGVidWcgKDEsICJyZWZ1c2luZyB0byByZXN1bWUgZXhlY3V0aW9uIGF0IGFkZHJlc3MgMFxuIik7CisrICAgICAgcmV0dXJuIC1VTldfRUlOVkFMOworKyAgICB9CisrCisrICBlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoYyk7CisrCisrICByZXR1cm4gKCpjLT5kd2FyZi5hcy0+YWNjLnJlc3VtZSkgKGMtPmR3YXJmLmFzLCAodW53X2N1cnNvcl90ICopIGMsCisrCQkJCSAgICAgYy0+ZHdhcmYuYXNfYXJnKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9Hc3RlcC5jCitAQCAtMCwwICsxLDEyOSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAib2Zmc2V0cy5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaGFuZGxlX3NpZ25hbF9mcmFtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGludCByZXQ7CisrICB1bndfd29yZF90IHNjX2FkZHIsIHNwLCBzcF9hZGRyID0gYy0+ZHdhcmYuY2ZhOworKyAgc3RydWN0IGR3YXJmX2xvYyBzcF9sb2MgPSBEV0FSRl9MT0MgKHNwX2FkZHIsIDApOworKworKyAgaWYgKChyZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgc3BfbG9jLCAmc3ApKSA8IDApCisrICAgIHJldHVybiAtVU5XX0VVTlNQRUM7CisrCisrICByZXQgPSB1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpOworKyAgRGVidWcoMSwgInVud19pc19zaWduYWxfZnJhbWUoKT0lZFxuIiwgcmV0KTsKKysKKysgIC8qIFNhdmUgdGhlIFNQIGFuZCBQQyB0byBiZSBhYmxlIHRvIHJldHVybiBleGVjdXRpb24gYXQgdGhpcyBwb2ludAorKyAgICAgbGF0ZXIgaW4gdGltZSAodW53X3Jlc3VtZSkuICAqLworKyAgYy0+c2lnY29udGV4dF9zcCA9IGMtPmR3YXJmLmNmYTsKKysgIGMtPnNpZ2NvbnRleHRfcGMgPSBjLT5kd2FyZi5pcDsKKysKKysgIGlmIChyZXQpCisrICAgIHsKKysgICAgICBjLT5zaWdjb250ZXh0X2Zvcm1hdCA9IEFBUkNINjRfU0NGX0xJTlVYX1JUX1NJR0ZSQU1FOworKyAgICAgIHNjX2FkZHIgPSBzcF9hZGRyICsgc2l6ZW9mIChzaWdpbmZvX3QpICsgTElOVVhfVUNfTUNPTlRFWFRfT0ZGOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiAtVU5XX0VVTlNQRUM7CisrCisrICBjLT5zaWdjb250ZXh0X2FkZHIgPSBzY19hZGRyOworKworKyAgLyogVXBkYXRlIHRoZSBkd2FyZiBjdXJzb3IuCisrICAgICBTZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSByZWdpc3RlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYWRkcmVzc2VzIG9mIHRoZQorKyAgICAgdWNfbWNvbnRleHQgLyBzaWdjb250ZXh0IHN0cnVjdHVyZSBjb250ZW50cy4gICovCisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDBdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDJdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDNdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gzX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g0X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDVdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDZdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g2X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g3X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDhdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDldICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g5X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTFfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTJdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxM19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTRfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTVdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxN10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTdfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMThdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxOV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjFdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIxX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyM10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjNfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjRdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI0X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjZfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjddID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI3X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyOF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjlfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMzBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDMwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1NQX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1BDX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUFNUQVRFXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19QU1RBVEVfT0ZGLCAwKTsKKysKKysgIC8qIFNldCBTUC9DRkEgYW5kIFBDL0lQLiAgKi8KKysgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKKysgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdLCAmYy0+ZHdhcmYuaXApOworKworKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOworKworKyAgcmV0dXJuIDE7CisrfQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfc3RlcCAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGludCByZXQ7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXAsIGlwPTB4JTAxNmx4LCBjZmE9MHglMDE2bHgpKVxuIiwKKysJIGMsIGMtPmR3YXJmLmlwLCBjLT5kd2FyZi5jZmEpOworKworKyAgLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHNpZ25hbCBmcmFtZS4gKi8KKysgIGlmICh1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpKQorKyAgICByZXR1cm4gdW53X2hhbmRsZV9zaWduYWxfZnJhbWUgKGN1cnNvcik7CisrCisrICByZXQgPSBkd2FyZl9zdGVwICgmYy0+ZHdhcmYpOworKyAgRGVidWcoMSwgImR3YXJmX3N0ZXAoKT0lZFxuIiwgcmV0KTsKKysKKysgIGlmICh1bmxpa2VseSAocmV0ID09IC1VTldfRVNUT1BVTldJTkQpKQorKyAgICByZXR1cm4gcmV0OworKworKyAgaWYgKHVubGlrZWx5IChyZXQgPCAwKSkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gKGMtPmR3YXJmLmlwID09IDApID8gMCA6IDE7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2NyZWF0ZV9hZGRyX3NwYWNlLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdnZXRfcHJvY19pbmZvLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2dldF9zYXZlX2xvYy5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGdsb2JhbC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdnbG9iYWwuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0LmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXQuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXRfbG9jYWwuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpbml0X3JlbW90ZS5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpc19zaWduYWxfZnJhbWUuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xyZWdzLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR3JlZ3MuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xyZXN1bWUuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHcmVzdW1lLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9Mc3RlcC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdzdGVwLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCitAQCAtMCwwICsxLDY4IEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorKworKyNkZWZpbmUgVUMoTixYKSBcCisrICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1VDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHVjb250ZXh0X3QsIFgpKQorKworKyNkZWZpbmUgU0MoTixYKSBcCisrICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1NDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHN0cnVjdCBzaWdjb250ZXh0LCBYKSkKKysKKytpbnQKKyttYWluICh2b2lkKQorK3sKKysgIHByaW50ZiAoCisrIi8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqL1xuXG4iCisrCisrIi8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi9cblxuIgorKworKyIvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwidWNvbnRleHRfdFwiOiAgKi9cblxuIik7CisrCisrICBVQyAoIkZMQUdTIiwgdWNfZmxhZ3MpOworKyAgVUMgKCJMSU5LIiwgdWNfbGluayk7CisrICBVQyAoIlNUQUNLIiwgdWNfc3RhY2spOworKyAgVUMgKCJNQ09OVEVYVCIsIHVjX21jb250ZXh0KTsKKysgIFVDICgiU0lHTUFTSyIsIHVjX3NpZ21hc2spOworKworKyAgcHJpbnRmICgiXG4vKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwic3RydWN0IHNpZ2NvbnRleHRcIjogICovXG5cbiIpOworKworKyAgU0MgKCJSMCIsICByZWdzWzBdKTsKKysgIFNDICgiUjEiLCAgcmVnc1sxXSk7CisrICBTQyAoIlIyIiwgIHJlZ3NbMl0pOworKyAgU0MgKCJSMyIsICByZWdzWzNdKTsKKysgIFNDICgiUjQiLCAgcmVnc1s0XSk7CisrICBTQyAoIlI1IiwgIHJlZ3NbNV0pOworKyAgU0MgKCJSNiIsICByZWdzWzZdKTsKKysgIFNDICgiUjciLCAgcmVnc1s3XSk7CisrICBTQyAoIlI4IiwgIHJlZ3NbOF0pOworKyAgU0MgKCJSOSIsICByZWdzWzldKTsKKysgIFNDICgiUjEwIiwgcmVnc1sxMF0pOworKyAgU0MgKCJSMTEiLCByZWdzWzExXSk7CisrICBTQyAoIlIxMiIsIHJlZ3NbMTJdKTsKKysgIFNDICgiUjEzIiwgcmVnc1sxM10pOworKyAgU0MgKCJSMTQiLCByZWdzWzE0XSk7CisrICBTQyAoIlIxNSIsIHJlZ3NbMTVdKTsKKysgIFNDICgiUjE2IiwgcmVnc1sxNl0pOworKyAgU0MgKCJSMTciLCByZWdzWzE3XSk7CisrICBTQyAoIlIxOCIsIHJlZ3NbMThdKTsKKysgIFNDICgiUjE5IiwgcmVnc1sxOV0pOworKyAgU0MgKCJSMjAiLCByZWdzWzIwXSk7CisrICBTQyAoIlIyMSIsIHJlZ3NbMjFdKTsKKysgIFNDICgiUjIyIiwgcmVnc1syMl0pOworKyAgU0MgKCJSMjMiLCByZWdzWzIzXSk7CisrICBTQyAoIlIyNCIsIHJlZ3NbMjRdKTsKKysgIFNDICgiUjI1IiwgcmVnc1syNV0pOworKyAgU0MgKCJSMjYiLCByZWdzWzI2XSk7CisrICBTQyAoIlIyNyIsIHJlZ3NbMjddKTsKKysgIFNDICgiUjI4IiwgcmVnc1syOF0pOworKyAgU0MgKCJSMjkiLCByZWdzWzI5XSk7CisrICBTQyAoIlIzMCIsIHJlZ3NbMzBdKTsKKysgIFNDICgiUjMxIiwgcmVnc1szMV0pOworKworKyAgU0MgKCJQQyIsIHBjKTsKKysgIFNDICgiU1AiLCBzcCk7CisrICBTQyAoIkZhdWx0IiwgZmF1bHRfYWRkcmVzcyk7CisrICBTQyAoInN0YXRlIiwgcHN0YXRlKTsKKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L2luaXQuaAorQEAgLTAsMCArMSwxMjcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrc3RhdGljIGlubGluZSBpbnQKKytjb21tb25faW5pdCAoc3RydWN0IGN1cnNvciAqYywgdW5zaWduZWQgdXNlX3ByZXZfaW5zdHIpCisreworKyAgaW50IHJldCwgaTsKKysKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YM10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g1XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g4XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gzMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfU1ApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1BDKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QU1RBVEVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTldfQUFSQ0g2NF9QU1RBVEUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YwXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjJdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjVdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y2XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WN10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjhdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y5XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjhdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjMwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMzFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMzEpOworKworKyAgZm9yIChpID0gVU5XX0FBUkNINjRfUFNUQVRFICsgMTsgaSA8IFVOV19BQVJDSDY0X1YwOyArK2kpCisrICAgIGMtPmR3YXJmLmxvY1tpXSA9IERXQVJGX05VTExfTE9DOworKworKyAgcmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10sICZjLT5kd2FyZi5pcCk7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgYy0+c2lnY29udGV4dF9mb3JtYXQgPSBBQVJDSDY0X1NDRl9OT05FOworKyAgYy0+c2lnY29udGV4dF9hZGRyID0gMDsKKysgIGMtPnNpZ2NvbnRleHRfc3AgPSAwOworKyAgYy0+c2lnY29udGV4dF9wYyA9IDA7CisrCisrICBjLT5kd2FyZi5hcmdzX3NpemUgPSAwOworKyAgYy0+ZHdhcmYucmV0X2FkZHJfY29sdW1uID0gMDsKKysgIGMtPmR3YXJmLnN0YXNoX2ZyYW1lcyA9IDA7CisrICBjLT5kd2FyZi51c2VfcHJldl9pbnN0ciA9IHVzZV9wcmV2X2luc3RyOworKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOworKyAgYy0+ZHdhcmYucGlfaXNfZHluYW1pYyA9IDA7CisrICBjLT5kd2FyZi5oaW50ID0gMDsKKysgIGMtPmR3YXJmLnByZXZfcnMgPSAwOworKworKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvaXNfZnByZWcuYworQEAgLTAsMCArMSwzMiBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2lzX2ZwcmVnIChpbnQgcmVnbnVtKQorK3sKKysgIHJldHVybiAocmVnbnVtID49IFVOV19BQVJDSDY0X1YwICYmIHJlZ251bSA8PSBVTldfQUFSQ0g2NF9WMzEpOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L29mZnNldHMuaAorQEAgLTAsMCArMSw0OSBAQAorKy8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqLworKworKy8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi8KKysKKysvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4ICJ1Y29udGV4dF90IjogICovCisrCisrI2RlZmluZSBMSU5VWF9VQ19GTEFHU19PRkYJMHgwCisrI2RlZmluZSBMSU5VWF9VQ19MSU5LX09GRgkweDgKKysjZGVmaW5lIExJTlVYX1VDX1NUQUNLX09GRgkweDEwCisrI2RlZmluZSBMSU5VWF9VQ19TSUdNQVNLX09GRgkweDI4CisrI2RlZmluZSBMSU5VWF9VQ19NQ09OVEVYVF9PRkYJMHhiMAorKworKy8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggInN0cnVjdCBzaWdjb250ZXh0IjogICovCisrCisrI2RlZmluZSBMSU5VWF9TQ19GQVVMVEFERFJFU1NfT0ZGCTB4MDAKKysjZGVmaW5lIExJTlVYX1NDX1gwX09GRgkJMHgwMDgKKysjZGVmaW5lIExJTlVYX1NDX1gxX09GRgkJMHgwMTAKKysjZGVmaW5lIExJTlVYX1NDX1gyX09GRgkJMHgwMTgKKysjZGVmaW5lIExJTlVYX1NDX1gzX09GRgkJMHgwMjAKKysjZGVmaW5lIExJTlVYX1NDX1g0X09GRgkJMHgwMjgKKysjZGVmaW5lIExJTlVYX1NDX1g1X09GRgkJMHgwMzAKKysjZGVmaW5lIExJTlVYX1NDX1g2X09GRgkJMHgwMzgKKysjZGVmaW5lIExJTlVYX1NDX1g3X09GRgkJMHgwNDAKKysjZGVmaW5lIExJTlVYX1NDX1g4X09GRgkJMHgwNDgKKysjZGVmaW5lIExJTlVYX1NDX1g5X09GRgkJMHgwNTAKKysjZGVmaW5lIExJTlVYX1NDX1gxMF9PRkYJMHgwNTgKKysjZGVmaW5lIExJTlVYX1NDX1gxMV9PRkYJMHgwNjAKKysjZGVmaW5lIExJTlVYX1NDX1gxMl9PRkYJMHgwNjgKKysjZGVmaW5lIExJTlVYX1NDX1gxM19PRkYJMHgwNzAKKysjZGVmaW5lIExJTlVYX1NDX1gxNF9PRkYJMHgwNzgKKysjZGVmaW5lIExJTlVYX1NDX1gxNV9PRkYJMHgwODAKKysjZGVmaW5lIExJTlVYX1NDX1gxNl9PRkYJMHgwODgKKysjZGVmaW5lIExJTlVYX1NDX1gxN19PRkYJMHgwOTAKKysjZGVmaW5lIExJTlVYX1NDX1gxOF9PRkYJMHgwOTgKKysjZGVmaW5lIExJTlVYX1NDX1gxOV9PRkYJMHgwYTAKKysjZGVmaW5lIExJTlVYX1NDX1gyMF9PRkYJMHgwYTgKKysjZGVmaW5lIExJTlVYX1NDX1gyMV9PRkYJMHgwYjAKKysjZGVmaW5lIExJTlVYX1NDX1gyMl9PRkYJMHgwYjgKKysjZGVmaW5lIExJTlVYX1NDX1gyM19PRkYJMHgwYzAKKysjZGVmaW5lIExJTlVYX1NDX1gyNF9PRkYJMHgwYzgKKysjZGVmaW5lIExJTlVYX1NDX1gyNV9PRkYJMHgwZDAKKysjZGVmaW5lIExJTlVYX1NDX1gyNl9PRkYJMHgwZDgKKysjZGVmaW5lIExJTlVYX1NDX1gyN19PRkYJMHgwZTAKKysjZGVmaW5lIExJTlVYX1NDX1gyOF9PRkYJMHgwZTgKKysjZGVmaW5lIExJTlVYX1NDX1gyOV9PRkYJMHgwZjAKKysjZGVmaW5lIExJTlVYX1NDX1gzMF9PRkYJMHgwZjgKKysjZGVmaW5lIExJTlVYX1NDX1NQX09GRgkJMHgxMDAKKysjZGVmaW5lIExJTlVYX1NDX1BDX09GRgkJMHgxMDgKKysjZGVmaW5lIExJTlVYX1NDX1BTVEFURV9PRkYJMHgxMTAKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L3JlZ25hbWUuYworQEAgLTAsMCArMSwxMDYgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJlZ25hbWVbXSA9CisrICB7CisrICAgIFtVTldfQUFSQ0g2NF9YMF0gPSAieDAiLAorKyAgICBbVU5XX0FBUkNINjRfWDFdID0gIngxIiwKKysgICAgW1VOV19BQVJDSDY0X1gyXSA9ICJ4MiIsCisrICAgIFtVTldfQUFSQ0g2NF9YM10gPSAieDMiLAorKyAgICBbVU5XX0FBUkNINjRfWDRdID0gIng0IiwKKysgICAgW1VOV19BQVJDSDY0X1g1XSA9ICJ4NSIsCisrICAgIFtVTldfQUFSQ0g2NF9YNl0gPSAieDYiLAorKyAgICBbVU5XX0FBUkNINjRfWDddID0gIng3IiwKKysgICAgW1VOV19BQVJDSDY0X1g4XSA9ICJ4OCIsCisrICAgIFtVTldfQUFSQ0g2NF9YOV0gPSAieDkiLAorKyAgICBbVU5XX0FBUkNINjRfWDEwXSA9ICJ4MTAiLAorKyAgICBbVU5XX0FBUkNINjRfWDExXSA9ICJ4MTEiLAorKyAgICBbVU5XX0FBUkNINjRfWDEyXSA9ICJ4MTIiLAorKyAgICBbVU5XX0FBUkNINjRfWDEzXSA9ICJ4MTMiLAorKyAgICBbVU5XX0FBUkNINjRfWDE0XSA9ICJ4MTQiLAorKyAgICBbVU5XX0FBUkNINjRfWDE1XSA9ICJ4MTUiLAorKyAgICBbVU5XX0FBUkNINjRfWDE2XSA9ICJpcDAiLAorKyAgICBbVU5XX0FBUkNINjRfWDE3XSA9ICJpcDEiLAorKyAgICBbVU5XX0FBUkNINjRfWDE4XSA9ICJ4MTgiLAorKyAgICBbVU5XX0FBUkNINjRfWDE5XSA9ICJ4MTkiLAorKyAgICBbVU5XX0FBUkNINjRfWDIwXSA9ICJ4MjAiLAorKyAgICBbVU5XX0FBUkNINjRfWDIxXSA9ICJ4MjEiLAorKyAgICBbVU5XX0FBUkNINjRfWDIyXSA9ICJ4MjIiLAorKyAgICBbVU5XX0FBUkNINjRfWDIzXSA9ICJ4MjMiLAorKyAgICBbVU5XX0FBUkNINjRfWDI0XSA9ICJ4MjQiLAorKyAgICBbVU5XX0FBUkNINjRfWDI1XSA9ICJ4MjUiLAorKyAgICBbVU5XX0FBUkNINjRfWDI2XSA9ICJ4MjYiLAorKyAgICBbVU5XX0FBUkNINjRfWDI3XSA9ICJ4MjciLAorKyAgICBbVU5XX0FBUkNINjRfWDI4XSA9ICJ4MjgiLAorKyAgICBbVU5XX0FBUkNINjRfWDI5XSA9ICJmcCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMzBdID0gImxyIiwKKysgICAgW1VOV19BQVJDSDY0X1NQXSA9ICJzcCIsCisrICAgIFtVTldfQUFSQ0g2NF9QQ10gPSAicGMiLAorKyAgICBbVU5XX0FBUkNINjRfVjBdID0gInYwIiwKKysgICAgW1VOV19BQVJDSDY0X1YxXSA9ICJ2MSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMl0gPSAidjIiLAorKyAgICBbVU5XX0FBUkNINjRfVjNdID0gInYzIiwKKysgICAgW1VOV19BQVJDSDY0X1Y0XSA9ICJ2NCIsCisrICAgIFtVTldfQUFSQ0g2NF9WNV0gPSAidjUiLAorKyAgICBbVU5XX0FBUkNINjRfVjZdID0gInY2IiwKKysgICAgW1VOV19BQVJDSDY0X1Y3XSA9ICJ2NyIsCisrICAgIFtVTldfQUFSQ0g2NF9WOF0gPSAidjgiLAorKyAgICBbVU5XX0FBUkNINjRfVjldID0gInY5IiwKKysgICAgW1VOV19BQVJDSDY0X1YxMF0gPSAidjEwIiwKKysgICAgW1VOV19BQVJDSDY0X1YxMV0gPSAidjExIiwKKysgICAgW1VOV19BQVJDSDY0X1YxMl0gPSAidjEyIiwKKysgICAgW1VOV19BQVJDSDY0X1YxM10gPSAidjEzIiwKKysgICAgW1VOV19BQVJDSDY0X1YxNF0gPSAidjE0IiwKKysgICAgW1VOV19BQVJDSDY0X1YxNV0gPSAidjE1IiwKKysgICAgW1VOV19BQVJDSDY0X1YxNl0gPSAidjE2IiwKKysgICAgW1VOV19BQVJDSDY0X1YxN10gPSAidjE3IiwKKysgICAgW1VOV19BQVJDSDY0X1YxOF0gPSAidjE4IiwKKysgICAgW1VOV19BQVJDSDY0X1YxOV0gPSAidjE5IiwKKysgICAgW1VOV19BQVJDSDY0X1YyMF0gPSAidjIwIiwKKysgICAgW1VOV19BQVJDSDY0X1YyMV0gPSAidjIxIiwKKysgICAgW1VOV19BQVJDSDY0X1YyMl0gPSAidjIyIiwKKysgICAgW1VOV19BQVJDSDY0X1YyM10gPSAidjIzIiwKKysgICAgW1VOV19BQVJDSDY0X1YyNF0gPSAidjI0IiwKKysgICAgW1VOV19BQVJDSDY0X1YyNV0gPSAidjI1IiwKKysgICAgW1VOV19BQVJDSDY0X1YyNl0gPSAidjI2IiwKKysgICAgW1VOV19BQVJDSDY0X1YyN10gPSAidjI3IiwKKysgICAgW1VOV19BQVJDSDY0X1YyOF0gPSAidjI4IiwKKysgICAgW1VOV19BQVJDSDY0X1YyOV0gPSAidjI5IiwKKysgICAgW1VOV19BQVJDSDY0X1YzMF0gPSAidjMwIiwKKysgICAgW1VOV19BQVJDSDY0X1YzMV0gPSAidjMxIiwKKysgICAgW1VOV19BQVJDSDY0X0ZQU1JdID0gImZwc3IiLAorKyAgICBbVU5XX0FBUkNINjRfRlBDUl0gPSAiZnBjciIsCisrICB9OworKworK1BST1RFQ1RFRCBjb25zdCBjaGFyICoKKyt1bndfcmVnbmFtZSAodW53X3JlZ251bV90IHJlZykKKyt7CisrICBpZiAocmVnIDwgKHVud19yZWdudW1fdCkgQVJSQVlfU0laRSAocmVnbmFtZSkgJiYgcmVnbmFtZVtyZWddICE9IE5VTEwpCisrICAgIHJldHVybiByZWduYW1lW3JlZ107CisrICBlbHNlCisrICAgIHJldHVybiAiPz8/IjsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9zaWdsb25nam1wLlMKK0BAIC0wLDAgKzEsMTIgQEAKKysJLyogRHVtbXkgaW1wbGVtZW50YXRpb24gZm9yIG5vdy4gICovCisrCisrCS5nbG9iYWwgX1VJX3NpZ2xvbmdqbXBfY29udAorKwkuZ2xvYmFsIF9VSV9sb25nam1wX2NvbnQKKysKKytfVUlfc2lnbG9uZ2ptcF9jb250OgorK19VSV9sb25nam1wX2NvbnQ6CisrCXJldAorKyNpZmRlZiBfX2xpbnV4X18KKysgLyogV2UgZG8gbm90IG5lZWQgZXhlY3V0YWJsZSBzdGFjay4gICovCisrIC5zZWN0aW9uICAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC91bndpbmRfaS5oCitAQCAtMCwwICsxLDQzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgdW53aW5kX2lfaAorKyNkZWZpbmUgdW53aW5kX2lfaAorKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVkZSA8bGlidW53aW5kLWFhcmNoNjQuaD4KKysKKysjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKysKKysjZGVmaW5lIGFhcmNoNjRfbG9jawkJCVVOV19PQkoobG9jaykKKysjZGVmaW5lIGFhcmNoNjRfbG9jYWxfcmVzdW1lCQlVTldfT0JKKGxvY2FsX3Jlc3VtZSkKKysjZGVmaW5lIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0CVVOV19PQkoobG9jYWxfYWRkcl9zcGFjZV9pbml0KQorKworK2V4dGVybiB2b2lkIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICh2b2lkKTsKKytleHRlcm4gaW50IGFhcmNoNjRfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfY3Vyc29yX3QgKmN1cnNvciwKKysJCQkgICAgIHZvaWQgKmFyZyk7CisrCisrI2VuZGlmIC8qIHVud2luZF9pX2ggKi8KKy0tLSBhL3NyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYworKysrIGIvc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jCitAQCAtMzksNyArMzksMTAgQEAgX1VDRF9hY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLAorICAgICAgIHJldHVybiAtVU5XX0VJTlZBTDsKKyAgICAgfQorIAorLSNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQorKyNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQUFSQ0g2NCkKKysgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSBVTldfQUFSQ0g2NF9GUENSKQorKyAgICBnb3RvIGJhZHJlZzsKKysjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQorICAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IDE2KQorICAgICBnb3RvIGJhZHJlZzsKKyAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfU0gpCistLS0gYS9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCisrKysgYi9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCitAQCAtMSw2ICsxLDcgQEAKKyAvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCisgCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisgCitAQCAtNTAxLDYgKzUwMiw0MSBAQCBjb25zdCBpbnQgX1VQVF9yZWdfb2Zmc2V0W1VOV19SRUdfTEFTVCArCisgICAgIFtVTldfQVJNX1IxNV0gICAgICA9IDB4M2MsCisgI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX01JUFMpCisgI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX1NIKQorKyNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9BQVJDSDY0KQorKyAgICBbVU5XX0FBUkNINjRfWDBdICAgICAgID0gMHgwMCwKKysgICAgW1VOV19BQVJDSDY0X1gxXSAgICAgICA9IDB4MDgsCisrICAgIFtVTldfQUFSQ0g2NF9YMl0gICAgICAgPSAweDEwLAorKyAgICBbVU5XX0FBUkNINjRfWDNdICAgICAgID0gMHgxOCwKKysgICAgW1VOV19BQVJDSDY0X1g0XSAgICAgICA9IDB4MjAsCisrICAgIFtVTldfQUFSQ0g2NF9YNV0gICAgICAgPSAweDI4LAorKyAgICBbVU5XX0FBUkNINjRfWDZdICAgICAgID0gMHgzMCwKKysgICAgW1VOV19BQVJDSDY0X1g3XSAgICAgICA9IDB4MzgsCisrICAgIFtVTldfQUFSQ0g2NF9YOF0gICAgICAgPSAweDQwLAorKyAgICBbVU5XX0FBUkNINjRfWDldICAgICAgID0gMHg0OCwKKysgICAgW1VOV19BQVJDSDY0X1gxMF0gICAgICA9IDB4NTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTFdICAgICAgPSAweDU4LAorKyAgICBbVU5XX0FBUkNINjRfWDEyXSAgICAgID0gMHg2MCwKKysgICAgW1VOV19BQVJDSDY0X1gxM10gICAgICA9IDB4NjgsCisrICAgIFtVTldfQUFSQ0g2NF9YMTRdICAgICAgPSAweDcwLAorKyAgICBbVU5XX0FBUkNINjRfWDE1XSAgICAgID0gMHg3OCwKKysgICAgW1VOV19BQVJDSDY0X1gxNl0gICAgICA9IDB4ODAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTddICAgICAgPSAweDg4LAorKyAgICBbVU5XX0FBUkNINjRfWDE4XSAgICAgID0gMHg5MCwKKysgICAgW1VOV19BQVJDSDY0X1gxOV0gICAgICA9IDB4OTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjBdICAgICAgPSAweGEwLAorKyAgICBbVU5XX0FBUkNINjRfWDIxXSAgICAgID0gMHhhOCwKKysgICAgW1VOV19BQVJDSDY0X1gyMl0gICAgICA9IDB4YjAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjNdICAgICAgPSAweGI4LAorKyAgICBbVU5XX0FBUkNINjRfWDI0XSAgICAgID0gMHhjMCwKKysgICAgW1VOV19BQVJDSDY0X1gyNV0gICAgICA9IDB4YzgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjZdICAgICAgPSAweGQwLAorKyAgICBbVU5XX0FBUkNINjRfWDI3XSAgICAgID0gMHhkOCwKKysgICAgW1VOV19BQVJDSDY0X1gyOF0gICAgICA9IDB4ZTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjldICAgICAgPSAweGU4LAorKyAgICBbVU5XX0FBUkNINjRfWDMwXSAgICAgID0gMHhmMCwKKysgICAgW1VOV19BQVJDSDY0X1NQXSAgICAgICA9IDB4ZjgsCisrICAgIFtVTldfQUFSQ0g2NF9QQ10gICAgICAgPSAweDEwMCwKKysgICAgW1VOV19BQVJDSDY0X1BTVEFURV0gICA9IDB4MTA4CisgI2Vsc2UKKyAjIGVycm9yIEZpeCBtZS4KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMGY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ZpeCB0ZXN0IGNhc2UgbGluayBmYWlsdXJlIG9uIFBvd2VyUEMgc3lzdGVtcyB3aXRoIEFsdGl2ZWMKKworVXBzdHJlYW0tU3RhdHVzOmJhY2twb3J0CisKK09uIHN5c3RlbXMgd2hlcmUgdGhlIHN5c3RlbSBjb21waWxlciBzdXBwb3J0cyBBbHRpdmVjIGJ5IGRlZmF1bHQsCit0aGUgbGlidW53aW5kIE1ha2VmaWxlIHdpbGwgYXR0ZW1wdCB0byBidWlsZCBhbiBleHRyYSB0ZXN0IGNhc2UKK3BwYzY0LXRlc3QtYWx0aXZlYy4gIFVuZm9ydHVuYXRlbHksIHRoZSBsaW5rIHN0ZXAgd2lsbCBmYWlsIHNpbmNlCit0aGUgTWFrZWZpbGUgZG9lcyBub3QgYWN0dWFsbHkgbGluayBhZ2FpbnN0IHRoZSBsaWJ1bndpbmQgbGlicmFyeS4KKworRml4ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSBMREFERCBtYWNyby4KKworU2lnbmVkLW9mZi1ieTogVWxyaWNoIFdlaWdhbmQgPGFkZHJlc3NAaGlkZGVuPgorLS0tCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDBlMzA1MzYuLjljNzY2MjggMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yMDEsMyArMjAxLDQgQEAgTGlhNjRfdGVzdF9yYnNfTERBREQgPSAkKExJQlVOV0lORF9sb2NhbCkKKyBMaWE2NF90ZXN0X3JlYWRvbmx5X0xEQUREID0gJChMSUJVTldJTkRfbG9jYWwpCisgaWE2NF90ZXN0X2R5bjFfTERBREQgPSAkKExJQlVOV0lORCkKKyBpYTY0X3Rlc3Rfc2lnX0xEQUREID0gJChMSUJVTldJTkQpCisrcHBjNjRfdGVzdF9hbHRpdmVjX0xEQUREID0gJChMSUJVTldJTkQpCistLSAKKzEuOC41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU1YzkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNTA4Y2ExN2E3YmUwMWQxY2M5NjBkOWEwN2QwYWY0NTEzOTQ4ZmI4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+CitEYXRlOiBGcmksIDI3IEp1biAyMDE0IDA4OjQwOjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIExpbmsgbGlidW53aW5kIHRvIGxpYmdjY19zIHJhdGhlciB0aGFuIGxpYmdjYworCitGb3Igc29tZSBhcmNoaXRlY3R1cmVzLCAtbGdjYyBhbmQgLWxnY2NfcyBhcmUgbm90IGVxdWl2YWxlbnQuIE9uIEFSTSBmb3IKK2V4YW1wbGUsIGxpYmdjY19zLnNvLjEgY29udGFpbnMgc29tZSBzeW1ib2xzIG5lZWRlZCBieSBsaWJ1bndpbmQgd2hpY2gKK2FyZSBub3QgcHJlc2VudCBpbiBsaWJnY2MuCisKK1RoaXMgY2F1c2VzIHRoZSBmb2xsb3dpbmcgbGluayBlcnJvciB3aGVuIGJ1aWxkaW5nIHRoZSBYLk9yZyBYIHNlcnZlcgord2l0aCBsaWJ1bndpbmQgc3VwcG9ydDoKKworCSAgQ0NMRCAgICAgWG9yZworCS91c3IvbGliL2xpYnVud2luZC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZWFiaV91bndpbmRfY3BwX3ByMCcKKwkvdXNyL2xpYi9saWJ1bndpbmQuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWVhYmlfdW53aW5kX2NwcF9wcjEnCisKK0xpbmtpbmcgYWdhaW5zdCBsaWJnY2NfcyBleHBsaWNpdGx5IHNvbHZlcyB0aGlzIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2ZmZTE5Yi4uM2JlYjVmMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjU4LDcgKzI1OCw3IEBAIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sjaWZuZGVmIF9fSU5URUxfQ09NUElMRVIKKyAKKyBpZiB0ZXN0IHgkR0NDID0geHllcyAtYSB4JGludGVsX2NvbXBpbGVyICE9IHh5ZXM7IHRoZW4KKyAgIENGTEFHUz0iJHtDRkxBR1N9IC1mZXhjZXB0aW9ucyAtV2FsbCAtV3NpZ24tY29tcGFyZSIKKy0gIExJQkNSVFM9Ii1sZ2NjIgorKyAgTElCQ1JUUz0iLWxnY2NfcyIKKyBmaQorIEFDX01TR19SRVNVTFQoWyRpbnRlbF9jb21waWxlcl0pCisgCistLSAKKzIuMy4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9TdXBwb3J0LWJ1aWxkaW5nLXdpdGgtb2xkZXItY29tcGlsZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OGI3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9TdXBwb3J0LWJ1aWxkaW5nLXdpdGgtb2xkZXItY29tcGlsZXJzLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gMTBiMDY0ZmZlOTAyZDVhZjMxYmI0OWJkOGU0ZjAzYzU0NWY4ZDQ2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KK0RhdGU6IFR1ZSwgMTMgTm92IDIwMTIgMTE6MTk6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBidWlsZGluZyB3aXRoIG9sZGVyIGNvbXBpbGVycy4KKworQWRkIGEgY2hlY2sgZm9yIF9fYnVpbHRpbl91bnJlYWNoYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCisgaW5jbHVkZS9saWJ1bndpbmRfaS5oIHwgICAgNiArKysrKysKKyBzcmMvYXJtL0dyZXN1bWUuYyAgICAgfCAgICAyICstCisgc3JjL3NoL0dyZXN1bWUuYyAgICAgIHwgICAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODUsNiArMjg1LDE3IEBAIGlmIHRlc3QgeCRoYXZlX19idWlsdGluX19fY2xlYXJfY2FjaGUgPQorIGZpCisgQUNfTVNHX1JFU1VMVChbJGhhdmVfX2J1aWx0aW5fX19jbGVhcl9jYWNoZV0pCisgCisrQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19idWlsdGluX3VucmVhY2hhYmxlXSkKKytBQ19MSU5LX0lGRUxTRSgKKysgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tfX2J1aWx0aW5fdW5yZWFjaGFibGUoKV1dKV0sCisrICBbaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZT15ZXNdLAorKyAgW2hhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGU9bm9dKQorK2lmIHRlc3QgeCRoYXZlX19idWlsdGluX3VucmVhY2hhYmxlID0geHllczsgdGhlbgorKyAgQUNfREVGSU5FKFtIQVZFX19CVUlMVElOX1VOUkVBQ0hBQkxFXSwgWzFdLAorKyAgICAgICAgICAgIFtEZWZpbmVkIGlmIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpIGlzIGF2YWlsYWJsZV0pCisrZmkKKytBQ19NU0dfUkVTVUxUKFskaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZV0pCisrCisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19zeW5jIGF0b21pY3NdKQorIEFDX0xJTktfSUZFTFNFKAorICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworLS0tIGEvaW5jbHVkZS9saWJ1bndpbmRfaS5oCisrKysgYi9pbmNsdWRlL2xpYnVud2luZF9pLmgKK0BAIC03Miw2ICs3MiwxMiBAQCBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFCisgIyBlbmRpZgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKEhBVkVfX0JVSUxUSU5fVU5SRUFDSEFCTEUpCisrIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKQorKyNlbHNlCisrIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBkbyB7IH0gd2hpbGUgKDEpCisrI2VuZGlmCisrCisgI2lmZGVmIERFQlVHCisgIyBkZWZpbmUgVU5XX0RFQlVHCTEKKyAjZWxzZQorLS0tIGEvc3JjL2FybS9HcmVzdW1lLmMKKysrKyBiL3NyYy9hcm0vR3Jlc3VtZS5jCitAQCAtOTYsNyArOTYsNyBAQCBhcm1fbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1CisgCTogOiAiciIgKGMtPnNpZ2NvbnRleHRfc3ApLCAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisgICAgICAgKTsKKyAgICB9CistICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKKysgIHVucmVhY2hhYmxlKCk7CisgI2Vsc2UKKyAgIHByaW50ZiAoIiVzOiBpbXBsZW1lbnQgbWVcbiIsIF9fRlVOQ1RJT05fXyk7CisgI2VuZGlmCistLS0gYS9zcmMvc2gvR3Jlc3VtZS5jCisrKysgYi9zcmMvc2gvR3Jlc3VtZS5jCitAQCAtMTA5LDcgKzEwOSw3IEBAIHNoX2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW4KKyAJICAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisgICAgICAgKTsKKyAgICB9CistICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKKysgIHVucmVhY2hhYmxlKCk7CisgI2VuZGlmCisgICByZXR1cm4gLVVOV19FSU5WQUw7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjYwYWYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKQEAgLTAsMCArMSwzMSBAQAorREVTQ1JJUFRJT04gPSAiYSBwb3J0YWJsZSBhbmQgZWZmaWNpZW50IEMgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIChBUEkpIHRvIGRldGVybWluZSB0aGUgY2FsbC1jaGFpbiBvZiBhIHByb2dyYW0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvbGlidW53aW5kIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zZmNlZDExZDZkZjcxOWI0NzUwNTgzN2E1MWMxNmFlNSIKK0RFUEVORFMgKz0gImxpYmF0b21pYy1vcHMiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbWluaWRlYnVnaW5mbywtLWRpc2FibGUtbWluaWRlYnVnaW5mbyx4eiIKKworRVhUUkFfT0VDT05GX2FybSA9ICItLWVuYWJsZS1kZWJ1Zy1mcmFtZSIKK0VYVFJBX09FQ09ORl9hYXJjaDY0ID0gIi0tZW5hYmxlLWRlYnVnLWZyYW1lIgorCitDRkxBR1MgKz0gIiR7QVRPTUlDT1BTfSIKK0FUT01JQ09QU19hcm12NSA9ICItREFPX1VTRV9QVEhSRUFEX0RFRlM9MSIKK0FUT01JQ09QU19hcm12NCA9ICItREFPX1VTRV9QVEhSRUFEX0RFRlM9MSIKK0FUT01JQ09QUyA/PSAiIgorCitMREZMQUdTX2FwcGVuZF94ODYgPSAiIC1mdXNlLWxkPWdvbGQiCitMREZMQUdTX2FwcGVuZF94ODYtNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0xERkxBR1NfYXBwZW5kX2FybSA9ICIgLWZ1c2UtbGQ9Z29sZCIKK0xERkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0xERkxBR1NfYXBwZW5kX3Bvd2VycGMgPSAiIC1mdXNlLWxkPWdvbGQiCitMREZMQUdTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjgyYzFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBsaWJ1bndpbmQuaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBcCisgICAgZmlsZTovL0FBcmNoNjQtcG9ydC5wYXRjaCBcCisgICAgZmlsZTovL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2ggXAorICAgIGZpbGU6Ly9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmI0ZWEyZjZmYmJlNDViZjAzMmNkMzZlNTg2ODgzY2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZTBmY2FlMmE4NjZkZTlkMzk0MmM2Njk5NWU0YjQ2MDIzMDQ0Njg4N2RiZGFiMzAyZDQxYThhZWU4ZDA5YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvMDAwMS11YXRvbWljLVNwZWNpZnktY29tcGxldGUtdHlwZXMtZm9yLWF0b21pYy1mdW5jdGlvbi1jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDBiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvMDAwMS11YXRvbWljLVNwZWNpZnktY29tcGxldGUtdHlwZXMtZm9yLWF0b21pYy1mdW5jdGlvbi1jLnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitGcm9tIDZhZjc5MDgxOGQwNzRjMTAzYzQ3OTdmMWNlNzY0ODk2ZjE4M2UwMjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMiBBdWcgMjAxNSAyMTozNTowMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1YXRvbWljOiBTcGVjaWZ5IGNvbXBsZXRlIHR5cGVzIGZvciBhdG9taWMgZnVuY3Rpb24gY2FsbHMKKworVGhpcyB3YXMgdW5lYXJ0aGVkIGJ5IGNsYW5nIGNvbXBpbGVyIHdoZXJlIGl0IGNvbXBsYWluZWQgYWJvdXQgcGFyYW1ldGVyCittaXNtYXRjaCwgZ2NjIGRvZXNudCBub3RpY2UgdGhpcworCit1cmN1L3VhdG9taWMvZ2VuZXJpYy5oOjE5MDoxMDogZXJyb3I6IGFkZHJlc3MgYXJndW1lbnQgdG8gYXRvbWljIGJ1aWx0aW4KK211c3QgYmUgYSBwb2ludGVyIHRvIGludGVnZXIgb3IgcG9pbnRlciAoJ3ZvaWQgKicgaW52YWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworCitGaXhlZCBhbGwgaW5zdGFuY2VzIHRodXNseQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgdXJjdS91YXRvbWljL2dlbmVyaWMuaCB8IDQwICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91cmN1L3VhdG9taWMvZ2VuZXJpYy5oIGIvdXJjdS91YXRvbWljL2dlbmVyaWMuaAoraW5kZXggMzdmNTljYy4uMDA0NmZmZCAxMDA2NDQKKy0tLSBhL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKKysrKyBiL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKK0BAIC02NSwxNyArNjUsMTcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19jbXB4Y2hnKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgb2xkLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzEoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzIoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgb2xkLCBfbmV3KTsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF80KGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF84KGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCBvbGQsIF9uZXcpOworICNlbmRpZgorIAl9CisgCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKK0BAIC0xMDAsMjAgKzEwMCwyMCBAQCB2b2lkIF91YXRvbWljX2FuZCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMShhZGRyLCB2YWwpOworKwkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAljYXNlIDQ6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzgoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAl9CitAQCAtMTM5LDIwICsxMzksMjAgQEAgdm9pZCBfdWF0b21pY19vcih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF8xKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKyAJY2FzZSAyOgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCWNhc2UgNDoKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfOChhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAJfQorQEAgLTE4MCwxNyArMTgwLDE3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfYWRkX3JldHVybih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzEoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzQoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF84KGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHZhbCk7CisgI2VuZGlmCisgCX0KKyAJX3VhdG9taWNfbGlua19lcnJvcigpOworQEAgLTIxOCw3ICsyMTgsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgY2hhciAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMShhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIG9sZCwgdmFsKSk7CisgCisgCQlyZXR1cm4gb2xkOworIAl9CitAQCAtMjMwLDcgKzIzMCw3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCisgCisgCQlkbyB7CisgCQkJb2xkID0gdWF0b21pY19yZWFkKCh1bnNpZ25lZCBzaG9ydCAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMihhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yNDEsNyArMjQxLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIGludCAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNChhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNCgodW5zaWduZWQgaW50ICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yNTIsNyArMjUyLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIGxvbmcgKilhZGRyKTsKKy0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgoYWRkciwgb2xkLCB2YWwpKTsKKysJCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L1JldmVydC1CbGFja2xpc3QtQVJNLWdjYy00LjguMC00LjguMS00LjguMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzVhNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L1JldmVydC1CbGFja2xpc3QtQVJNLWdjYy00LjguMC00LjguMS00LjguMi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDdiM2RmMTAwMzQ2MTI4ZDc4MGYyMThiODgxZDU2M2QxZmQxMmUzMTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitEYXRlOiBNb24sIDIwIE9jdCAyMDE0IDEzOjQ2OjEwICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiQmxhY2tsaXN0IEFSTSBnY2MgNC44LjAsIDQuOC4xLCA0LjguMiIKKworVGhpcyByZXZlcnRzIGNvbW1pdCA0Yjc5MzEwYWEzZDQwOGJhMzBmZWUwMmNjNDk3YTY4MDcyZDM4YTk5LgorT0UtQ29yZSBpcyB1c2luZyBhIHBhdGNoZWQgR0NDIDQuOC4yIHdoaWNoIGlzIGFibGUgdG8gY29tcGlsZSBsaWJ1cmN1Citwcm9wZXJseS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgdXJjdS9jb21waWxlci5oIHwgMTkgLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VyY3UvY29tcGlsZXIuaCBiL3VyY3UvY29tcGlsZXIuaAoraW5kZXggMWUzMDkwMy4uMTk1MzRmMCAxMDA2NDQKKy0tLSBhL3VyY3UvY29tcGlsZXIuaAorKysrIGIvdXJjdS9jb21waWxlci5oCitAQCAtMTA4LDIzICsxMDgsNCBAQAorIAorICNkZWZpbmUgQ0FBX0FSUkFZX1NJWkUoeCkJKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQorIAorLS8qCistICogRG9uJ3QgYWxsb3cgY29tcGlsaW5nIHdpdGggYnVnZ3kgY29tcGlsZXIuCistICovCistCistI2lmZGVmIF9fR05VQ19fCistIyBkZWZpbmUgVVJDVV9HQ0NfVkVSU0lPTgkoX19HTlVDX18gKiAxMDAwMCBcCistCQkJCSsgX19HTlVDX01JTk9SX18gKiAxMDAgXAorLQkJCQkrIF9fR05VQ19QQVRDSExFVkVMX18pCistCistLyoKKy0gKiBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU4ODU0CistICovCistIyBpZmRlZiBfX0FSTUVMX18KKy0jICBpZiBVUkNVX0dDQ19WRVJTSU9OID49IDQwODAwICYmIFVSQ1VfR0NDX1ZFUlNJT04gPD0gNDA4MDIKKy0jICAgZXJyb3IgWW91ciBnY2MgdmVyc2lvbiBwcm9kdWNlcyBjbG9iYmVyZWQgZnJhbWUgYWNjZXNzZXMKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKyAjZW5kaWYgLyogX1VSQ1VfQ09NUElMRVJfSCAqLworLS0gCisyLjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvYWFyY2g2NC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9hYXJjaDY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2M4YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWJ1Y3J1OiByZWNvZ25pemUgYWFyY2g2NAorCitNYWtlIHRoZSBzYW1lIGFzICJhcm0iIGludGVybmFsbHkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20KKworCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTc3LDYgKzc3LDcgQEAgQVNfQ0FTRShbJGhvc3RfY3B1XSwKKyAJW2FscGhhKl0sIFtBUkNIVFlQRT0iYWxwaGEiXSwKKyAJW2lhNjRdLCBbQVJDSFRZUEU9ImdjYyJdLAorIAlbYXJtKl0sIFtBUkNIVFlQRT0iYXJtIl0sCisrCVthYXJjaDY0XSwgW0FSQ0hUWVBFPSJhcm0iXSwKKyAJW21pcHMqXSwgW0FSQ0hUWVBFPSJtaXBzIl0sCisgCVt0aWxlKl0sIFtBUkNIVFlQRT0iZ2NjIl0sCisgCVtBUkNIVFlQRT0idW5rbm93biJdCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC44LjcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmNGY1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBSQ1UgKHJlYWQtY29weS11cGRhdGUpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VyY3UiCitCVUdUUkFDS0VSID0gImh0dHA6Ly9sdHRuZy5vcmcvcHJvamVjdC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MGYwNjBjMzBhMjc5MjJjZTljMGQ1NTdhNjM5YjRmYTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTRkZTBkNjhkM2E5OTc2NDM3MTUwMzZkMjIwOWFlMWQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UvdWF0b21pYy94ODYuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT0yMjA1NTJmNzJjNTViMTAyZjJlZTM1OTI5NzM0ZWY0MiIKKworU1JDX1VSSSA9ICJodHRwOi8vbHR0bmcub3JnL2ZpbGVzL3VyY3UvdXNlcnNwYWNlLXJjdS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1JldmVydC1CbGFja2xpc3QtQVJNLWdjYy00LjguMC00LjguMS00LjguMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2E2ZWUxNzg3MWQzMTIyNmRiM2Y2MThlMjgzNTFkMjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUyM2YyMmM0NzI2Y2E2YmI3N2E3N2QyNThlNzZkOGMzM2M4OTcyNDQzM2JkNjUzMTMwMjRiOThlNTVjNDI5NSIKKworUyA9ICIke1dPUktESVJ9L3VzZXJzcGFjZS1yY3UtJHtQVn0iCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgoraW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0LzAwMDEtdXNiLmgtSW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0LzAwMDEtdXNiLmgtSW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODg0NDBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMzQwZjkxMWY5ZTNmNGZmNmIwMTY4MmM1MzQxYzk1OTA2MDc4MmFmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIgQXByIDIwMTUgMTk6MTg6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNiLmg6IEluY2x1ZGUgc3lzL3R5cGVzLmgKKworV2UgbmVlZCB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHVfaW50WF90CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlidXNiL3VzYi5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnVzYi91c2IuaCBiL2xpYnVzYi91c2IuaAoraW5kZXggODRlNzMwZi4uY2FmZmFlMiAxMDA2NDQKKy0tLSBhL2xpYnVzYi91c2IuaAorKysrIGIvbGlidXNiL3VzYi5oCitAQCAtMzEsNiArMzEsOCBAQAorIAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisgLyoKKyAgKiBVU0Igc3BlYyBpbmZvcm1hdGlvbgorICAqCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0XzAuMS41LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXRfMC4xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2ODcyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0XzAuMS41LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAibGlidXNiLTAuMSBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBsaWJ1c2IxIgorREVTQ1JJUFRJT04gPSAibGlidXNiLTAuMSBjb21wYXRpYmxlIGxheWVyIGZvciBsaWJ1c2IxLCBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgXAordGhhdCBhaW1zIHRvIGxvb2ssIGZlZWwgYW5kIGJlaGF2ZSBleGFjdGx5IGxpa2UgbGlidXNiLTAuMSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlidXNiLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cubGlidXNiLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjJhYzVmM2FjNDgzNWU4ZjkxMzI0YTI2YTU5MGE0MjMiCitERVBFTkRTID0gImxpYnVzYjEiCisKKyMgRmV3IHBhY2thZ2VzIGFyZSBrbm93biBub3QgdG8gd29yayB3aXRoIGxpYnVzYi1jb21wYXQgKGUuZy4gbGlibXRwLTEuMC4wKSwKKyMgc28gaGVyZSBsaWJ1c2ItMC4xIGlzIHJlbW92ZWQgY29tcGxldGVseSBpbnN0ZWFkIG9mIGFkZGluZyB2aXJ0dWFsL2xpYnVzYjAuCisjIEJlc2lkZXMsIGxpYnVzYi0wLjEgdXNlcyBhIHBlciAxbXMgcG9sbGluZyB0aGF0IGh1cnRzIGEgbG90IHRvIHBvd2VyCisjIGNvbnN1bXB0aW9uLgorUFJPVklERVMgPSAibGlidXNiIHZpcnR1YWwvbGlidXNiMCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEUgPSAiMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlidXNiL2xpYnVzYi1jb21wYXQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzYi5oLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjI3ODBiNmE3NThhMWUyYzI5NDNiZGJmN2ZhZjc0MGU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwNGVmNGI2YjMyNGJlNzlhYzFiZmIzZDgzOWVhYzg2MGZiYzkyOWU2YWNiMWVmODg3OTNhNmVhMzI4YmM1NWEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlidXNiLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZQorCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYjFfMS4wLjE5LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYjFfMS4wLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMGUxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgbGlicmFyeSB0byBhY2Nlc3MgVVNCICh2ZXJzaW9uIDEuMCkiCitIT01FUEFHRSA9ICJodHRwOi8vbGlidXNiLnNmLm5ldCIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5saWJ1c2Iub3JnL3JlcG9ydCIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ1c2IvbGlidXNiLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImY5ZTJiYjU4Nzk5Njg0NjdlNWNhNzU2Y2I0ZTFmYTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZjNTAyYzgxNjAwMmY5MGQ0Zjc2MDUwYTY0MjljM2E3ZTBkODQyMDQyMjJjYmZmMmRjZTk1ZGQ3NzNiYTY4NDAiCisKK1MgPSAiJHtXT1JLRElSfS9saWJ1c2ItJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIERvbid0IGNvbmZpZ3VyZSB1ZGV2IGJ5IGRlZmF1bHQgc2luY2UgaXQgd2lsbCBjYXVzZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVjeSB3aXRoIHVkZXYgcGFja2FnZSwgd2hpY2ggZGVwZW5kcyBvbiBsaWJ1c2IKK0VYVFJBX09FQ09ORiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLWRpc2FibGUtdWRldiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8qLnNvLioiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyAke2Jhc2VfbGliZGlyfS8qLmxhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkMTRjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxMTggQEAKK1VzZSBwa2ctY29uZmlnIHRvIGZpbmQgZ2NyeXB0IGFuZCBsaWJ4bWwyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2xpYnhtbDIgaXMgdXBzdHJlYW1hYmxlXQorCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGxpYnhzbHQtMS4xLjI4L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI4Lm9yaWcvY29uZmlndXJlLmluCTIwMTQtMDUtMTMgMTY6NDY6MDIuMjc4NDc0OTY3ICswMDAwCisrKysgbGlieHNsdC0xLjEuMjgvY29uZmlndXJlLmluCTIwMTQtMDUtMTMgMTY6NTM6NTYuNTEwNDcyNTYxICswMDAwCitAQCAtMzc2LDYgKzM3Niw4IEBACisgQUNfU1VCU1QoUFlUSE9OX1NVQkRJUikKKyBBQ19TVUJTVChQWVRIT05fTElCUykKKyAKKytQS0dfUFJPR19QS0dfQ09ORklHCisrCisgQUNfQVJHX1dJVEgoY3J5cHRvLCBbICAtLXdpdGgtY3J5cHRvICAgICAgICAgICBBZGQgY3J5cHRvIHN1cHBvcnQgdG8gZXhzbHQgKG9uKV0pCisgV0lUSF9DUllQVE89MAorIGlmIHRlc3QgIiR3aXRoX2NyeXB0byIgPSAibm8iIDsgdGhlbgorQEAgLTM5MSwyNiArMzkzLDEzIEBACisgICAgIFdJVEhfQ1JZUFRPPTEKKyAgICAgOzsKKyAgICopCistICAgIEFDX1BBVEhfUFJPRyhMSUJHQ1JZUFRfQ09ORklHLCBsaWJnY3J5cHQtY29uZmlnLCBubykKKy0gICAgaWYgdGVzdCAiJExJQkdDUllQVF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgICAgTElCR0NSWVBUX1ZFUlNJT049YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgICBpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJExJQkdDUllQVF9WRVJTSU9OKSAtbHQgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAiMS4xLjQyIikKKy0gICAgICB0aGVuCistICAgICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgICAgZWNobyAnZ2NyeXB0IGxpYnJhcnkgdmVyc2lvbiA8IDEuMS40MiAtIENyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4nCistICAgICAgZWxzZQorLSAgICAgICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgJGxpYmdjcnlwdF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgICAgIExJQkdDUllQVF9MSUJTPWAkTElCR0NSWVBUX0NPTkZJRyAkbGliZ2NyeXB0X2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgICAgIEFDX0RFRklORShIQVZFX0dDUllQVCwgMSwgW0RlZmluZSBpZiBnY3J5cHQgbGlicmFyeSBpcyBhdmFpbGFibGUuXSkKKy0gICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgYmUgYXZhaWxhYmxlLicKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoTElCR0NSWVBULCBbbGliZ2NyeXB0ID49IDEuMS40Ml0sIFsKKysgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0NSWVBULCAxLCBbRGVmaW5lIGlmIGdjcnlwdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS5dKQorKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIGJlIGF2YWlsYWJsZS4nCisgCQlXSVRIX0NSWVBUTz0xCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgYW5kIHJlY29uZmlndXJlIHRvIG1ha2UgYXZhaWxhYmxlLicKKy0gICAgZmkKKysJXSwgWworKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEluc3RhbGwgbGliZ2NyeXB0ID49IDEuMS40MiBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJworKyAgICAgICAgXSkKKyBlc2FjCisgZmkKKyBBQ19TVUJTVChXSVRIX0NSWVBUTykKK0BAIC00NzEsMjQgKzQ2MCw4IEBACisgZG5sIHNvbWUgdHdlYWtpbmcgLSBEYXZpZCBIw6RyZGVtYW4gMzAvMTAvMjAwMQorIGRubAorIAorLUxJQlhNTF9DT05GSUdfUFJFRklYPSIiCisgTElCWE1MX1NSQz0iIgorIAorLUFDX0FSR19XSVRIKGxpYnhtbC1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLXByZWZpeD1bUEZYXQkJU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgY29uZmlnXSwKKy0JTElCWE1MX0NPTkZJR19QUkVGSVg9JHdpdGh2YWwKKy0pCistICAgICAgICAKKy1BQ19BUkdfV0lUSChsaWJ4bWwtaW5jbHVkZS1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLWluY2x1ZGUtcHJlZml4PVtQRlhdCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGhlYWRlcnNdLAorLSAgICAgICAgTElCWE1MX0NGTEFHUz0iLUkkd2l0aHZhbCIKKy0pCistCistQUNfQVJHX1dJVEgobGlieG1sLWxpYnMtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1saWJzLXByZWZpeD1bUEZYXQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBsaWJzXSwKKy0gICAgICAgIExJQlhNTF9MSUJTPSItTCR3aXRodmFsIgorLSkKKy0KKyBBQ19BUkdfV0lUSChsaWJ4bWwtc3JjLAorIAlbICAtLXdpdGgtbGlieG1sLXNyYz1bRElSXSAgICAgICAgICAgICAgRm9yIGxpYnhtbCB0aGF0cyBub3QgaW5zdGFsbGVkIHlldCAoc2V0cyBhbGwgdGhyZWUgYWJvdmUpXSwKKyAJTElCWE1MX1NSQz0iJHdpdGh2YWwiCitAQCAtNTUxLDI4ICs1MjQsOSBAQAorIAlmaQorIGZpCisgCistZG5sCistZG5sIG1ha2Ugc3VyZSB4bWwyLWNvbmZpZyBpcyBleGVjdXRhYmxlLAorLWRubCB0ZXN0IHZlcnNpb24gYW5kIGluaXQgb3VyIHZhcmlhYmxlcworLWRubAorLQorLWlmICR7WE1MX0NPTkZJR30gLS1saWJzIHByaW50ID4gL2Rldi9udWxsIDI+JjEKKy10aGVuCistCVhNTFZFUlM9YCRYTUxfQ09ORklHIC0tdmVyc2lvbmAKKy0JaWYgdGVzdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRYTUxWRVJTKSAtZ2UgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04pCistCXRoZW4KKy0JCUFDX01TR19SRVNVTFQoJFhNTFZFUlMgZm91bmQpCistCWVsc2UKKy0JCUFDX01TR19FUlJPUihWZXJzaW9uICRYTUxWRVJTIGZvdW5kLiBZb3UgbmVlZCBhdCBsZWFzdCBsaWJ4bWwyICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBmb3IgdGhpcyB2ZXJzaW9uIG9mIGxpYnhzbHQpCistCWZpCistCUxJQlhNTF9MSUJTPSIkTElCWE1MX0xJQlMgYCRYTUxfQ09ORklHIC0tbGlic2AiCistCWlmIHRlc3QgIngkTElCWE1MX1NSQyIgPSAieCI7IHRoZW4KKy0JCUxJQlhNTF9DRkxBR1M9IiRMSUJYTUxfQ0ZMQUdTIGAkWE1MX0NPTkZJRyAtLWNmbGFnc2AiCistCWZpCistZWxzZQorLQlBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGxpYnhtbDIgYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKQorLWZpCistCisrUEtHX0NIRUNLX01PRFVMRVMoTElCWE1MLCBbbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT05dLCwKKysgICAgW0FDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04gYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKV0KKyspCisgCisgQUNfU1VCU1QoQ0ZMQUdTKQorIEFDX1NVQlNUKENQUEZMQUdTKQorQEAgLTU5Nyw3ICs1NTEsNyBAQAorIAorIGlmIHRlc3QgIiR3aXRoX3BsdWdpbnMiID0gInllcyIgOyB0aGVuCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2xpYnhtbDIgbW9kdWxlIHN1cHBvcnRdKQorLSAgV0lUSF9NT0RVTEVTPSJgJFhNTF9DT05GSUcgLS1tb2R1bGVzYCIKKysgIFdJVEhfTU9EVUxFUz0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9bW9kdWxlcyBsaWJ4bWwtMi4wYCIKKyAgIGlmIHRlc3QgIiR7V0lUSF9NT0RVTEVTfSIgPSAiMSI7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICBlbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTgwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJ4c2x0LTEuMS4yNy9saWJleHNsdC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI3Lm9yaWcvbGliZXhzbHQucGMuaW4KKysrKyBsaWJ4c2x0LTEuMS4yNy9saWJleHNsdC5wYy5pbgorQEAgLTgsNSArOCw1IEBAIE5hbWU6IGxpYmV4c2x0CisgVmVyc2lvbjogQExJQkVYU0xUX1ZFUlNJT05ACisgRGVzY3JpcHRpb246IEVYU0xUIEV4dGVuc2lvbiBsaWJyYXJ5CisgUmVxdWlyZXM6IGxpYnhtbC0yLjAKKy1MaWJzOiBARVhTTFRfTElCRElSQCBARVhTTFRfTElCU0AKKytMaWJzOiAtbGV4c2x0IEBFWFNMVF9MSUJESVJAIEBFWFNMVF9MSUJTQAorIENmbGFnczogQEVYU0xUX0lOQ0xVREVESVJACitJbmRleDogbGlieHNsdC0xLjEuMjcvbGlieHNsdC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI3Lm9yaWcvbGlieHNsdC5wYy5pbgorKysrIGxpYnhzbHQtMS4xLjI3L2xpYnhzbHQucGMuaW4KK0BAIC04LDUgKzgsNSBAQCBOYW1lOiBsaWJ4c2x0CisgVmVyc2lvbjogQFZFUlNJT05ACisgRGVzY3JpcHRpb246IFhTTFQgbGlicmFyeSB2ZXJzaW9uIDIuCisgUmVxdWlyZXM6IGxpYnhtbC0yLjAKKy1MaWJzOiBAWFNMVF9MSUJESVJAIEBYU0xUX0xJQlNAIEBFWFRSQV9MSUJTQAorK0xpYnM6IC1seHNsdCBAWFNMVF9MSUJESVJAIEBYU0xUX0xJQlNAIEBFWFRSQV9MSUJTQAorIENmbGFnczogQFhTTFRfSU5DTFVERURJUkAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmJjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI4LmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiR05PTUUgWFNMVCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3htbHNvZnQub3JnL1hTTFQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0wY2Q5YTA3YWZiZWIyNDAyNmM5YjAzYWVjZmViYTQ1OCIKKworU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJ4bWwyIgorCitTUkNfVVJJID0gImZ0cDovL3htbHNvZnQub3JnL2xpYnhzbHQvL2xpYnhzbHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTY2N2JmNmY5MzEwYjk1NzI1NGZkY2Y2NTk2NjAwYjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZjNzE1MWE1N2I4OWMwM2Q3YjgyNWRmNWEwZmFlMGE4ZDVmMDU2NzRjMGU3Y2YyOTM3ZWNlYzRkNTRhMDI4YyIKK1MgPSAiJHtXT1JLRElSfS9saWJ4c2x0LSR7UFZ9IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3hzbHQtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlCisKKyMgV2UgZG9uJ3QgREVQRU5EIG9uIGJpbnV0aWxzIGZvciBhbnNpZGVjbC5oIHNvIGVuc3VyZSB3ZSBkb24ndCB1c2UgdGhlIGhlYWRlcgorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXNlZCAtaSAtZSAncy9hbnNpZGVjbC5oLy8nICR7U30vY29uZmlndXJlLmluCisKKwkjIFRoZSB0aW1lc3RhbXBzIGluIHRoZSAxLjEuMjggdGFyYmFsbCBhcmUgbWVzc2VkIHVwIGNhdXNpbmcgdGhpcyBmaWxlIHRvCisJIyBhcHBlYXIgb3V0IG9mIGRhdGUuICBUb3VjaCBpdCBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byByZWdlbmVyYXRlIGl0LgorCXRvdWNoICR7U30vZG9jL3hzbHRwcm9jLjEKK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS13aXRob3V0LWRlYnVnIC0td2l0aG91dC1tZW0tZGVidWcgLS13aXRob3V0LWNyeXB0byIKKyMgb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyByZWNpcGUgaGFkICR7UE59LXV0aWxzCitSUFJPVklERVNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKK1JDT05GTElDVFNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKK1JSRVBMQUNFU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0veHNsdHByb2MgWE1MX0NBVEFMT0dfRklMRVM9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9saWJ4c2x0LXBsdWdpbnMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94c2x0Q29uZi5zaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRhMDBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBLaXJpbGwgU2ltb25vdiA8eGlAcmVzb2x2ZW50Lm5ldD4KKyMgRGF0ZSAxNDE3MTk3MzEyIDIxNjAwCisjIE5vZGUgSUQgMmI5MTU2NzU2NDIzZTk2N2NmZDA5YTYxZDEyNWQ4ODNmY2E2ZjRmMgorIyBQYXJlbnQgIDA1M2Y1M2EzODFmZjZhZGJiYzkzYTMxYWI3ZmRlZTA2YTE2YzhhMzMKK1JlbW92ZWQgaW52YWxpZCBzaW1wbGUga2V5IGFzc2VydGlvbiAodGhhbmsgdG8gSm9uYXRoYW4gR3JheSkuCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIAorCitodHRwczovL2JpdGJ1Y2tldC5vcmcveGkvbGlieWFtbC9jb21taXRzLzJiOTE1Njc1NjQyM2U5NjdjZmQwOWE2MWQxMjVkODgzZmNhNmY0ZjIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXIgMDUzZjUzYTM4MWZmIC1yIDJiOTE1Njc1NjQyMyBzcmMvc2Nhbm5lci5jCistLS0gYS9zcmMvc2Nhbm5lci5jCVdlZCBNYXIgMjYgMTM6NTU6NTQgMjAxNCAtMDUwMAorKysrIGIvc3JjL3NjYW5uZXIuYwlGcmkgTm92IDI4IDExOjU1OjEyIDIwMTQgLTA2MDAKK0BAIC0xMTA2LDEzICsxMTA2LDYgQEAKKyAgICAgICAgICAgICAmJiBwYXJzZXItPmluZGVudCA9PSAocHRyZGlmZl90KXBhcnNlci0+bWFyay5jb2x1bW4pOworIAorICAgICAvKgorLSAgICAgKiBBIHNpbXBsZSBrZXkgaXMgcmVxdWlyZWQgb25seSB3aGVuIGl0IGlzIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgY3VycmVudAorLSAgICAgKiBsaW5lLiAgVGhlcmVmb3JlIGl0IGlzIGFsd2F5cyBhbGxvd2VkLiAgQnV0IHdlIGFkZCBhIGNoZWNrIGFueXdheS4KKy0gICAgICovCistCistICAgIGFzc2VydChwYXJzZXItPnNpbXBsZV9rZXlfYWxsb3dlZCB8fCAhcmVxdWlyZWQpOyAgICAvKiBJbXBvc3NpYmxlLiAqLworLQorLSAgICAvKgorICAgICAgKiBJZiB0aGUgY3VycmVudCBwb3NpdGlvbiBtYXkgc3RhcnQgYSBzaW1wbGUga2V5LCBzYXZlIGl0LgorICAgICAgKi8KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvbGlieWFtbF8wLjEuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE1NTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGliWUFNTCBpcyBhIFlBTUwgMS4xIHBhcnNlciBhbmQgZW1pdHRlciB3cml0dGVuIGluIEMuIgorREVTQ1JJUFRJT04gPSAiTGliWUFNTCBpcyBhIEMgbGlicmFyeSBmb3IgcGFyc2luZyBhbmQgZW1pdHRpbmcgZGF0YSBpbiBZQU1MIDEuMSwgXAorYSBodW1hbi1yZWFkYWJsZSBkYXRhIHNlcmlhbGl6YXRpb24gZm9ybWF0LiAiCitIT01FUEFHRSA9ICJodHRwOi8vcHl5YW1sLm9yZy93aWtpL0xpYllBTUwiCitTRUNUSU9OID0gImxpYnMvZGV2ZWwiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjAxNWYwODg3NTliMTBlMGJjMmJmNjQ4OThkNGFlMTciCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5eWFtbC5vcmcvZG93bmxvYWQvbGlieWFtbC95YW1sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjVmZTAwY2RhMThjYTVkYWViNDM3NjJiODBjMzhlMDZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkYTY5NzFiNGJkMDhhOTg2ZGQyYTYxMzUzYmM0MjIzNjJiZDBlZGNjNjdkN2ViYWFjNjhjOTVmNzQxODI3NDkiCisKK1MgPSAiJHtXT1JLRElSfS95YW1sLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sejQvbHo0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTU2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sejQvbHo0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRXh0cmVtZWx5IEZhc3QgQ29tcHJlc3Npb24gYWxnb3JpdGhtIgorREVTQ1JJUFRJT04gPSAiTFo0IGlzIGEgdmVyeSBmYXN0IGxvc3NsZXNzIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgcHJvdmlkaW5nIGNvbXByZXNzaW9uIHNwZWVkIGF0IDQwMCBNQi9zIHBlciBjb3JlLCBzY2FsYWJsZSB3aXRoIG11bHRpLWNvcmVzIENQVS4gSXQgYWxzbyBmZWF0dXJlcyBhbiBleHRyZW1lbHkgZmFzdCBkZWNvZGVyLCB3aXRoIHNwZWVkIGluIG11bHRpcGxlIEdCL3MgcGVyIGNvcmUsIHR5cGljYWxseSByZWFjaGluZyBSQU0gc3BlZWQgbGltaXRzIG9uIG11bHRpLWNvcmUgc3lzdGVtcy4iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGliL0xJQ0VOU0U7bWQ1PTBiMGQwNjNmMzdhNDQ3N2I1NGFmMjQ1OTQ3N2RjYWZkIgorCitTUkNSRVYgPSAiZDg2ZGM5MTY3NzFjMTI2YWZiNzk3NjM3ZGRhOWY2NDIxYzBjYjk5OCIKKworUFYgPSAiMTMxK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vQ3lhbjQ5NzMvbHo0LmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VNQUtFID0gIlBSRUZJWD0ke3ByZWZpeH0gQ0M9JyR7Q0N9JyBERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by8wMDAxLVVzZS1tZW1jcHktaW5zdGVhZC1vZi1yZWludmVudGluZy1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjNhNzBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by8wMDAxLVVzZS1tZW1jcHktaW5zdGVhZC1vZi1yZWludmVudGluZy1pdC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tOiBTaW1vbiBNY1ZpdHRpZSA8c21jdkBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAyMyBOb3YgMjAxNCAyMjo1MDozMyArMDAwMAorU3ViamVjdDogVXNlIG1lbWNweSgpIGluc3RlYWQgb2YgcmVpbnZlbnRpbmcgaXQKKworZ2NjIGlubGluZXMgbWVtY3B5KCkgd2l0aCByZXN1bHRzIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSAoYXQKK2xlYXN0IGluIG15IGJyaWVmIHRlc3Rpbmcgd2l0aCBsem9wKSwgYW5kIGtub3dzIHRoZSBhbGlnbm1lbnQKK2NvbnN0cmFpbnRzIGZvciBvdXIgYXJjaGl0ZWN0dXJlcy4KKworQ2hhbmdlIHN1Z2dlc3RlZCBieSBKdWxpYW4gVGF5bG9yLgorCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTc1NzAzNworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pbmlsem8vbWluaWx6by5jIHwgMTQgKysrKysrKysrKysrKysKKyBzcmMvbHpvX2Z1bmMuaCAgICB8IDE0ICsrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspCisKKworZGlmZiAtLWdpdCBhL21pbmlsem8vbWluaWx6by5jIGIvbWluaWx6by9taW5pbHpvLmMKK2luZGV4IGFiMmJlNWYuLjY5MTNjMmYgMTAwNjQ0CistLS0gYS9taW5pbHpvL21pbmlsem8uYworKysrIGIvbWluaWx6by9taW5pbHpvLmMKK0BAIC0zNTIzLDYgKzM1MjMsMjAgQEAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKHNpemVvZigqKGx6b19tZW1vcHNfVFU4cCkwKT09OCkKKyAgICAgaWYgKCh2b2lkKTAsIG5fX24gPiAwKSBkbyB7ICpkX19uKysgPSAqc19fbisrOyB9IHdoaWxlICgtLW5fX24gPiAwKTsgXAorICAgICBMWk9fQkxPQ0tfRU5ECisgCisrLyogRGViaWFuLXNwZWNpZmljIGNoYW5nZTogd2Uga25vdyB0aGF0IG91ciBjb21waWxlciBpbmxpbmVzIG1lbWNweSgpIHdpdGgKKysgKiBjb25zdGFudCBuIHRvIGJlIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSwgYW5kIGtub3dzIHdoaWNoIGFyY2hpdGVjdHVyZXMKKysgKiBuZWVkIHRoaW5ncyBjb3JyZWN0bHkgYWxpZ25lZC4gKi8KKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMQorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkyCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTQKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZOAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFlOCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkxKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAxKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMihkZCxzcykgbWVtY3B5KGRkLCBzcywgMikKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTQoZGQsc3MpIG1lbWNweShkZCwgc3MsIDQpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk4KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA4KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZTihkZCxzcyxubikgbWVtY3B5KGRkLCBzcywgbm4pCisrCisgX19sem9fc3RhdGljX2ZvcmNlaW5saW5lIGx6b191aW50MTZfdCBsem9fbWVtb3BzX2dldF9sZTE2KGNvbnN0IGx6b192b2lkcCBzcykKKyB7CisgICAgIGx6b191aW50MTZfdCB2OworZGlmZiAtLWdpdCBhL3NyYy9sem9fZnVuYy5oIGIvc3JjL2x6b19mdW5jLmgKK2luZGV4IGRmYWE2NzYuLjFjYzFiNTMgMTAwNjQ0CistLS0gYS9zcmMvbHpvX2Z1bmMuaAorKysrIGIvc3JjL2x6b19mdW5jLmgKK0BAIC0zMzMsNiArMzMzLDIwIEBAIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihzaXplb2YoKihsem9fbWVtb3BzX1RVOHApMCk9PTgpCisgICAgIGlmICgodm9pZCkwLCBuX19uID4gMCkgZG8geyAqZF9fbisrID0gKnNfX24rKzsgfSB3aGlsZSAoLS1uX19uID4gMCk7IFwKKyAgICAgTFpPX0JMT0NLX0VORAorIAorKy8qIERlYmlhbi1zcGVjaWZpYyBjaGFuZ2U6IHdlIGtub3cgdGhhdCBvdXIgY29tcGlsZXIgaW5saW5lcyBtZW1jcHkoKSB3aXRoCisrICogY29uc3RhbnQgbiB0byBiZSBhcyBmYXN0IGFzIGhhbmR3cml0dGVuIGNvZGUsIGFuZCBrbm93cyB3aGljaCBhcmNoaXRlY3R1cmVzCisrICogbmVlZCB0aGluZ3MgY29ycmVjdGx5IGFsaWduZWQuICovCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTEKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMgorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFk0CisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTgKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZTgorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMShkZCxzcykgbWVtY3B5KGRkLCBzcywgMSkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTIoZGQsc3MpIG1lbWNweShkZCwgc3MsIDIpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk0KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA0KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZOChkZCxzcykgbWVtY3B5KGRkLCBzcywgOCkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWU4oZGQsc3Msbm4pIG1lbWNweShkZCwgc3MsIG5uKQorKworIF9fbHpvX3N0YXRpY19mb3JjZWlubGluZSBsem9fdWludDE2X3QgbHpvX21lbW9wc19nZXRfbGUxNihjb25zdCBsem9fdm9pZHAgc3MpCisgeworICAgICBsem9fdWludDE2X3QgdjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vYWNpbmNsdWRlLm00IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkMmNjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzU4IEBACisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoQUNDX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKEFDQ19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfSEVBREVSU10sIFsKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19IRUFERVJTKFthc3NlcnQuaCBjdHlwZS5oIGRpcmVudC5oIGVycm5vLmggZmNudGwuaCBmbG9hdC5oIGxpbWl0cy5oIG1hbGxvYy5oIG1lbW9yeS5oIHNldGptcC5oIHNpZ25hbC5oIHN0ZGFyZy5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGlvLmggc3RkbGliLmggc3RyaW5nLmggc3RyaW5ncy5oIHRpbWUuaCB1bmlzdGQuaCB1dGltZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19GVU5DU10sIFsKK0FDX0NIRUNLX0ZVTkNTKGFjY2VzcyBhbGxvY2EgYXRleGl0IGF0b2kgYXRvbCBjaG1vZCBjaG93biBjdGltZSBkaWZmdGltZSBmc3RhdCBnZXR0aW1lb2ZkYXkgZ210aW1lIGxvY2FsdGltZSBsb25nam1wIGxzdGF0IG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgbWt0aW1lIHFzb3J0IHJhaXNlIHNldGptcCBzaWduYWwgc25wcmludGYgc3RyY2FzZWNtcCBzdHJjaHIgc3RyZHVwIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgc3RybmljbXAgc3RycmNociBzdHJzdHIgdGltZSB1bWFzayB1dGltZSB2c25wcmludGYpCitdKSMKKworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCitBQ19DSEVDS19TSVpFT0YoaW50KQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0YoX19pbnQxNikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQpCisKK0FDX0NIRUNLX1NJWkVPRih2b2lkICopCitBQ19DSEVDS19TSVpFT0Yoc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHB0cmRpZmZfdCkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0FDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2luY2x1ZGUgImFjYy9hY2MuaCIKKyNpbmNsdWRlICJhY2MvYWNjX2luY2QuaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK30KKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIGFzc2VydChleHByKTsKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9BQ0NfQUNDQ0hLCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTUlOSUFDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfSU5DRF9IIDEKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjaW5jbHVkZSAkMgorfQorCisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgYXNzZXJ0KGV4cHIpOworc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNpbmNsdWRlICQyCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9NSU5JQUNDX0FDQ0NISworCisKKworIyBzZXJpYWwgMQorCitBQ19ERUZVTihbbWZ4X1BST0dfQ1BQRkxBR1NdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIEMgcHJlcHJvY2Vzc29yIG5lZWRzIHNwZWNpYWwgZmxhZ3NdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDEiCisjZWxpZiAoMHhmZmZmdSA9PSAweGZmZmZmZmZmdWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VsaWYgKDMyNzY3ID49IFVMT05HX01BWCkgfHwgKDY1NTM1dSA+PSBVTE9OR19NQVgpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAzIgorI2VuZGlmCitdXSwgW1sgXV0KKyldKQorCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK21meF90bXA9RVJST1IKK2ZvciBtZnhfYXJnIGluICIiIC1uby1jcHAtcHJlY29tcAorZG8KKyAgQ1BQRkxBR1M9IiRtZnhfYXJnICRtZnhfc2F2ZV9DUFBGTEFHUyIKKyAgX0FDX0NPTVBJTEVfSUZFTFNFKFtdLAorW21meF90bXA9JG1meF9hcmcKK2JyZWFrXSkKK2RvbmUKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitjYXNlIHgkbWZ4X3RtcCBpbgorICB4KQorICAgIEFDX01TR19SRVNVTFQoW25vbmUgbmVlZGVkXSkgOzsKKyAgeEVSUk9SKQorICAgIEFDX01TR19SRVNVTFQoW0VSUk9SXSkKKyAgICBBQ19NU0dfRVJST1IoW3lvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ddKQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorICAgIENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisgICAgOzsKK2VzYWMKK10pIyBtZnhfUFJPR19DUFBGTEFHUworCisKKworIyBzZXJpYWwgMworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0hFQURFUl9TQU5FX0xJTUlUU19IXSwgWworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGltaXRzLmggaXMgc2FuZV0sCittZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2gsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gdXNlIGNvbXBpbGVyIG9wdGlvbiAtbm8tY3BwLXByZWNvbXAiCisjICBlbHNlCisjICAgIGluY2x1ZGUgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgTUZYXzB4ZmZmZiAgICAgICAgICAweGZmZmYKKyNkZWZpbmUgTUZYXzB4ZmZmZmZmZmZMICAgICA0Mjk0OTY3Mjk1dWwKKyNpZiAhZGVmaW5lZChDSEFSX0JJVCkgfHwgKENIQVJfQklUICE9IDgpCisjICBpbmNsdWRlICJlcnJvciBDSEFSX0JJVCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVDSEFSX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVVNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKElOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIExPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAyIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMiIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAyIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMiIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAweGZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAzIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgTUZYXzB4ZmZmZmZmZmZMKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID4gVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggdnMgVUlOVF9NQVgiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPiBVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCB2cyBVTE9OR19NQVgiCisjZW5kaWYKK11dLCBbWworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSAyKV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSAyKV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gMildOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSA0KV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gNCldOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSA0KV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDQpXTsgfQorI2VuZGlmCitdXSldLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD15ZXNdLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD1ub10pXSkKK10pCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIHN0YW5kYXJkCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9MWk9fQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShMWk9fQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoTFpPX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZG5sIG1vcmUgdHlwZXMgd2hpY2ggYXJlIG5vdCB5ZXQgY292ZXJlZCBieSBBQ0MKKworQUNfREVGVU4oW21meF9DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YoaW50cHRyX3QpCitBQ19DSEVDS19TSVpFT0YodWludHB0cl90KQorCitBQ19DSEVDS19TSVpFT0YoZmxvYXQpCitBQ19DSEVDS19TSVpFT0YoZG91YmxlKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgZG91YmxlKQorCitBQ19DSEVDS19TSVpFT0YoZGV2X3QpCitBQ19DSEVDS19TSVpFT0YoZnBvc190KQorQUNfQ0hFQ0tfU0laRU9GKG1vZGVfdCkKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKK0FDX0NIRUNLX1NJWkVPRihzc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCkKK10pIworCisKKworQUNfREVGVU4oW21meF9DSEVDS19MSUJfV0lOTU1dLCBbCitpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzOyB0aGVuCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIHRlc3QgIlgkTElCUyIgIT0gIlgiICYmIExJQlM9IiRMSUJTICIKKyAgICAgTElCUz0iJHtMSUJTfS1sd2lubW0iIDs7CisqKQorICAgICA7OworZXNhYworZmkKK10pIworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTc3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorCisuL2x6b3Rlc3QgLW1hdmFpbCAtbjEwIC1xIC9ldGMvc2VydmljZXMKK0xaT1RFU1Q9Li9sem90ZXN0IC9iaW4vc2ggLWUgIi4vY2hlY2suc2giICIvZXRjIgorLi9hbGlnbgorLi9jaGtzdW0KKy4vc2ltcGxlCisuL3Rlc3RtaW5pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvXzIuMDkuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvXzIuMDkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3ODYxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sem9faW5pdC5jO2JlZ2lubGluZT01O2VuZGxpbmU9MjU7bWQ1PTM1NTAyMzgzNWE5YjllZWI3MGFiODk1Mzk1ZTk1MWZmIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by9kb3dubG9hZC9sem8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjN2ZmYzlhMTAzYWZlMmQxYmJhMGIwMTVlN2FhODg3ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMjk0YTdjZWQzMTMwNjNjMDU3YzUwNDI1N2Y0MzdjODMzNWM0MWJmZWVkMjM1MzFlZTRlNmEyYjg3YmNiMzRjIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJY3AgJHtTfS91dGlsL2NoZWNrLnNoICR0CisJY3AgJHtCfS9taW5pbHpvL3Rlc3RtaW5pICR0CisJZm9yIGkgaW4gdGVzdHMvYWxpZ24gdGVzdHMvY2hrc3VtIGx6b3Rlc3QvbHpvdGVzdCBleGFtcGxlcy9zaW1wbGUKKwkJZG8gY3AgJHtCfS9gZGlybmFtZSAkaWAvLmxpYnMvYGJhc2VuYW1lICRpYCAkdDsgXAorCWRvbmUKK30KKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wLzAwMDEtdXNlLXN0YXRpYy1pbmxpbmVzLWFzLXRoZS1leHRlcm5hbC1pbmxpbmUtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjdiODhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wLzAwMDEtdXNlLXN0YXRpYy1pbmxpbmVzLWFzLXRoZS1leHRlcm5hbC1pbmxpbmUtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorRnJvbSBlY2NjYmNmNjZkYTUzNzc5ZDg4ZTM4ZTJhZjdmODJlZmY4ZGRlN2Y4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMTA6MzU6NDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIHN0YXRpYyBpbmxpbmVzIGFzIHRoZSBleHRlcm5hbCBpbmxpbmUgZGVmaW5pdGlvbiBoYXMKKyBjaGFuZ2VkIHdpdGggZ2NjNQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9taW5pYWNjLmggfCAyNCArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taW5pYWNjLmggYi9zcmMvbWluaWFjYy5oCitpbmRleCAwOWU2ZjBjLi5jYWU5OGQxIDEwMDY0NAorLS0tIGEvc3JjL21pbmlhY2MuaAorKysrIGIvc3JjL21pbmlhY2MuaAorQEAgLTI4ODAsOCArMjg4MCw3IEBAIHR5cGVkZWYgdm9pZCAoX19hY2NfY2RlY2xfc2lnaGFuZGxlciAqYWNjX3NpZ2hhbmRsZXJfdCkoYWNjX3NpZ25vX3QpOworICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMjg5MCw4ICsyODg5LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUxNihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTE2KHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0yOTE2LDggKzI5MTQsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaQorICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMjkyNiw4ICsyOTIzLDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUzMihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTMyKHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0zMzA3LDggKzMzMDMsNyBAQCB0eXBlZGVmIHZvaWQgKF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgKmFjY19zaWdoYW5kbGVyX3QpKGFjY19zaWdub190KTsKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTE2KQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsaGJyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTMzMTcsOCArMzMxMiw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMTYocCkgICAgICBfX0FDQ19VQV9HRVRfTEUxNihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CitAQCAtMzM0Myw4ICszMzM3LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2kKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTMyKQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsd2JyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTMzNTMsOCArMzM0Niw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMzIocCkgICAgICBfX0FDQ19VQV9HRVRfTEUzMihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CistLSAKKzIuNS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjljMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzkwIEBACisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoQUNDX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKEFDQ19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfSEVBREVSU10sIFsKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19IRUFERVJTKFthc3NlcnQuaCBjdHlwZS5oIGRpcmVudC5oIGVycm5vLmggZmNudGwuaCBmbG9hdC5oIGxpbWl0cy5oIG1hbGxvYy5oIG1lbW9yeS5oIHNldGptcC5oIHNpZ25hbC5oIHN0ZGFyZy5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGlvLmggc3RkbGliLmggc3RyaW5nLmggc3RyaW5ncy5oIHRpbWUuaCB1bmlzdGQuaCB1dGltZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19GVU5DU10sIFsKK0FDX0NIRUNLX0ZVTkNTKGFjY2VzcyBhbGxvY2EgYXRleGl0IGF0b2kgYXRvbCBjaG1vZCBjaG93biBjdGltZSBkaWZmdGltZSBmc3RhdCBnZXR0aW1lb2ZkYXkgZ210aW1lIGxvY2FsdGltZSBsb25nam1wIGxzdGF0IG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgbWt0aW1lIHFzb3J0IHJhaXNlIHNldGptcCBzaWduYWwgc25wcmludGYgc3RyY2FzZWNtcCBzdHJjaHIgc3RyZHVwIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgc3RybmljbXAgc3RycmNociBzdHJzdHIgdGltZSB1bWFzayB1dGltZSB2c25wcmludGYpCitdKSMKKworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCitBQ19DSEVDS19TSVpFT0YoaW50KQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0YoX19pbnQxNikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQpCisKK0FDX0NIRUNLX1NJWkVPRih2b2lkICopCitBQ19DSEVDS19TSVpFT0Yoc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHB0cmRpZmZfdCkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0FDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2luY2x1ZGUgImFjYy9hY2MuaCIKKyNpbmNsdWRlICJhY2MvYWNjX2luY2QuaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK30KKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIGFzc2VydChleHByKTsKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9BQ0NfQUNDQ0hLCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTUlOSUFDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfSU5DRF9IIDEKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjaW5jbHVkZSAkMgorfQorCisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgYXNzZXJ0KGV4cHIpOworc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNpbmNsdWRlICQyCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9NSU5JQUNDX0FDQ0NISworCisKKworIyBzZXJpYWwgMQorCitBQ19ERUZVTihbbWZ4X1BST0dfQ1BQRkxBR1NdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIEMgcHJlcHJvY2Vzc29yIG5lZWRzIHNwZWNpYWwgZmxhZ3NdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDEiCisjZWxpZiAoMHhmZmZmdSA9PSAweGZmZmZmZmZmdWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VsaWYgKDMyNzY3ID49IFVMT05HX01BWCkgfHwgKDY1NTM1dSA+PSBVTE9OR19NQVgpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAzIgorI2VuZGlmCitdXSwgW1sgXV0KKyldKQorCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK21meF90bXA9RVJST1IKK2ZvciBtZnhfYXJnIGluICIiIC1uby1jcHAtcHJlY29tcAorZG8KKyAgQ1BQRkxBR1M9IiRtZnhfYXJnICRtZnhfc2F2ZV9DUFBGTEFHUyIKKyAgX0FDX0NPTVBJTEVfSUZFTFNFKFtdLAorW21meF90bXA9JG1meF9hcmcKK2JyZWFrXSkKK2RvbmUKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitjYXNlIHgkbWZ4X3RtcCBpbgorICB4KQorICAgIEFDX01TR19SRVNVTFQoW25vbmUgbmVlZGVkXSkgOzsKKyAgeEVSUk9SKQorICAgIEFDX01TR19SRVNVTFQoW0VSUk9SXSkKKyAgICBBQ19NU0dfRVJST1IoW3lvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ddKQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorICAgIENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisgICAgOzsKK2VzYWMKK10pIyBtZnhfUFJPR19DUFBGTEFHUworCisKKworIyBzZXJpYWwgMworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0hFQURFUl9TQU5FX0xJTUlUU19IXSwgWworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGltaXRzLmggaXMgc2FuZV0sCittZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2gsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gdXNlIGNvbXBpbGVyIG9wdGlvbiAtbm8tY3BwLXByZWNvbXAiCisjICBlbHNlCisjICAgIGluY2x1ZGUgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgTUZYXzB4ZmZmZiAgICAgICAgICAweGZmZmYKKyNkZWZpbmUgTUZYXzB4ZmZmZmZmZmZMICAgICA0Mjk0OTY3Mjk1dWwKKyNpZiAhZGVmaW5lZChDSEFSX0JJVCkgfHwgKENIQVJfQklUICE9IDgpCisjICBpbmNsdWRlICJlcnJvciBDSEFSX0JJVCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVDSEFSX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVVNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKElOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIExPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAyIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMiIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAyIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMiIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAweGZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAzIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgTUZYXzB4ZmZmZmZmZmZMKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID4gVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggdnMgVUlOVF9NQVgiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPiBVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCB2cyBVTE9OR19NQVgiCisjZW5kaWYKK11dLCBbWworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSAyKV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSAyKV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gMildOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSA0KV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gNCldOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSA0KV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDQpXTsgfQorI2VuZGlmCitdXSldLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD15ZXNdLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD1ub10pXSkKK10pCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIHN0YW5kYXJkCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9MWk9fQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShMWk9fQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoTFpPX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZG5sIG1vcmUgdHlwZXMgd2hpY2ggYXJlIG5vdCB5ZXQgY292ZXJlZCBieSBBQ0MKKworQUNfREVGVU4oW21meF9DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YoaW50cHRyX3QpCitBQ19DSEVDS19TSVpFT0YodWludHB0cl90KQorCitBQ19DSEVDS19TSVpFT0YoZmxvYXQpCitBQ19DSEVDS19TSVpFT0YoZG91YmxlKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgZG91YmxlKQorCitBQ19DSEVDS19TSVpFT0YoZGV2X3QpCitBQ19DSEVDS19TSVpFT0YoZnBvc190KQorQUNfQ0hFQ0tfU0laRU9GKG1vZGVfdCkKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKK0FDX0NIRUNLX1NJWkVPRihzc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCkKK10pIworCisKKworQUNfREVGVU4oW21meF9DSEVDS19MSUJfV0lOTU1dLCBbCitpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzOyB0aGVuCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIHRlc3QgIlgkTElCUyIgIT0gIlgiICYmIExJQlM9IiRMSUJTICIKKyAgICAgTElCUz0iJHtMSUJTfS1sd2lubW0iIDs7CisqKQorICAgICA7OworZXNhYworZmkKK10pIworCisjc2VyaWFsIDYKKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIFNUX01USU1fTlNFQyB0byBiZSB0aGUgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0J3Mgc3RfbXRpbSwKKyMgaWYgaXQgZXhpc3RzLgorCitBQ19ERUZVTihbQUNfU1RSVUNUX1NUX01USU1fTlNFQ10sCisgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0LnN0X210aW1dLAorICAgYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYywKKyAgIFthY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYz1ubworICAgICMgdHZfbnNlYyAtLSB0aGUgdXN1YWwgY2FzZQorICAgICMgX3R2X25zZWMgLS0gU29sYXJpcyAyLjYsIGlmCisgICAgIwkoZGVmaW5lZCBfWE9QRU5fU09VUkNFICYmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgPT0gMQorICAgICMJICYmICFkZWZpbmVkIF9fRVhURU5TSU9OU19fKQorICAgICMgc3RfX3RpbS50dl9uc2VjIC0tIFVuaXhXYXJlIDIuMS4yCisgICAgZm9yIGFjX3ZhbCBpbiB0dl9uc2VjIF90dl9uc2VjIHN0X190aW0udHZfbnNlYzsgZG8KKyAgICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyAtRFNUX01USU1fTlNFQz0kYWNfdmFsIgorICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPl0sIFtzdHJ1Y3Qgc3RhdCBzOyBzLnN0X210aW0uU1RfTVRJTV9OU0VDO10sCisgICAgICAgIFthY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjPSRhY192YWw7IGJyZWFrXSkKKyAgICBkb25lCisgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIl0pCisKKyAgaWYgdGVzdCAkYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYyAhPSBubzsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChTVF9NVElNX05TRUMsICRhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjLAorICAgICAgW0RlZmluZSB0byBiZSB0aGUgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0J3Mgc3RfbXRpbSwKKyAgICAgICBpZiBpdCBleGlzdHMuXSkKKyAgZmkKKyBdCispCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AveDMyX2FiaV9taW5pYWNjX2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AveDMyX2FiaV9taW5pYWNjX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5YmU4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGaXggZ2V0IG9mIEZMQUdTIHJlZ2lzdGVyIGluIHgzMiBBQkksCisKK3gzMiBBQkkgcmVxdWlyZXMgdG8gaGF2ZSA2NC1iaXQgdmFyaWFibGUgdG8gc3RvcmUgRkxBR1MgcmVnaXN0ZXIKK2luc3RlYWQgb2Ygc2l6ZV90IHRoYXQgaXMgMzItYml0IHZhcmlhYmxlLCB0aGlzIGZpeCBvcGVyYW5kCit0eXBlIG1pc21hdGNoIHdoZW4gdHJ5IHRvIHBvcCBwcmV2aW91cyBwdXNoZiB2YWx1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBsem9wLTEuMDMvc3JjL21pbmlhY2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGx6b3AtMS4wMy5vcmlnL3NyYy9taW5pYWNjLmgKKysrKyBsem9wLTEuMDMvc3JjL21pbmlhY2MuaAorQEAgLTc1NCw2ICs3NTQsOSBAQAorICNlbGlmIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpCisgIyAgZGVmaW5lIEFDQ19BUkNIX0FNRDY0ICAgICAgICAgICAgMQorICMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJhbWQ2NCIKKysjICBpZiBkZWZpbmVkKF9fSUxQMzJfXykKKysjICAgIGRlZmluZSBBQ0NfQVJDSF9BTUQ2NF9YMzIgICAgICAxCisrIyAgZW5kaWYKKyAjZWxpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgKGRlZmluZWQoX01fQVJNKSAmJiBkZWZpbmVkKF9NX1RIVU1CKSkKKyAjICBkZWZpbmUgQUNDX0FSQ0hfQVJNICAgICAgICAgICAgICAxCisgIyAgZGVmaW5lIEFDQ19BUkNIX0FSTV9USFVNQiAgICAgICAgMQorQEAgLTY3ODcsNyArNjc5MCwxMSBAQCBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHZvaWQsIGFjY19kZWJ1Z19uCisgQUNDTElCX1BVQkxJQ19OT0lOTElORShpbnQsIGFjY19kZWJ1Z19hbGlnbl9jaGVja19xdWVyeSkgKHZvaWQpCisgeworICNpZiAoQUNDX0FSQ0hfQU1ENjQgfHwgQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19BU01fU1lOVEFYX0dOVUMpCisrIyAgaWYgZGVmaW5lZChBQ0NfQVJDSF9BTUQ2NF9YMzIpCisrICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByOworKyMgIGVsc2UKKyAgICAgc2l6ZV90IHI7CisrIyAgZW5kaWYKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmXG4gcG9wICUwXG4iIDogIj1hIiAocikgOiA6IF9fQUNDX0FTTV9DTE9CQkVSKTsKKyAgICAgcmV0dXJuIChpbnQpKHIgPj4gMTgpICYgMTsKKyAjZWxpZiAoQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19BU01fU1lOVEFYX01TQykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkNjI4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUmVhbC10aW1lIGZpbGUgY29tcHJlc3NvciIKK0RFU0NSSVBUSU9OID0gImx6b3AgaXMgYSBjb21wcmVzc2lvbiB1dGlsaXR5IHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIGEgY29tcGFuaW9uIHRvIGd6aXAuIFxuXAorSXQgaXMgYmFzZWQgb24gdGhlIExaTyBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGl0cyBtYWluIGFkdmFudGFnZXMgb3ZlciBcblwKK2d6aXAgYXJlIG11Y2ggaGlnaGVyIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGF0IHRoZSBjb3N0IG9mIHNvbWUgXG5cCitjb21wcmVzc2lvbiByYXRpby4gVGhlIGx6b3AgY29tcHJlc3Npb24gdXRpbGl0eSB3YXMgZGVzaWduZWQgd2l0aCB0aGUgZ29hbHMgXG5cCitvZiByZWxpYWJpbGl0eSwgc3BlZWQsIHBvcnRhYmlsaXR5IGFuZCB3aXRoIHJlYXNvbmFibGUgZHJvcC1pbiBjb21wYXRpYmlsaXR5IFxuXAordG8gZ3ppcC4iCitERVBFTkRTICs9ICJsem8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGZlYWYzZGM0YmVlZjRmNWE3YmRiYzM1YjE5N2YzOWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2x6b3AuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTIxO21kNT02Nzk3YmQzZWQwYTFhNDkzMjdiN2ViZjkzNjZlYmQ4NiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmx6b3Aub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8veDMyX2FiaV9taW5pYWNjX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMDA2YzVlMjdmYjc4Y2RkMTRhNjI4ZmRmYTVhYTE5MDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzE0MjViOGM3N2Q0OWY1YTY3OWQ1YTEyNmM5MGVhNmFkOTk1ODVhNTVlMzM1YTYxM2NhZTU5ZTkwOWRiYjJjOSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBsbiAtc2YgIC4uL2FjaW5jbHVkZS5tNCAke1N9L2FjaW5jbHVkZS5tNAorICAgIGF1dG90b29sc19kb19jb25maWd1cmUKK30KKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci0zLjEuMy9sb25nLWxvbmctdGh1bWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnItMy4xLjMvbG9uZy1sb25nLXRodW1iLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNzEwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnItMy4xLjMvbG9uZy1sb25nLXRodW1iLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gODQwMjFiMWUyMzY1MDgxNjliZTY1ZTgwMmE5YzBhMjVmYzlhODgyNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CitEYXRlOiBNb24sIDI3IE9jdCAyMDA4IDIyOjI2OjM1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG1wZnI6IGNydXNhZGUgYWdhaW5zdCBpbmxpbmUgYXNzZW1ibGVyCisKK1dpdGhvdXQgdGhpcywgYnVpbGQgZmFpbHMgZm9yIHRodW1iOgorfCB7c3RhbmRhcmQgaW5wdXR9OiBBc3NlbWJsZXIgbWVzc2FnZXM6Cit8IHtzdGFuZGFyZCBpbnB1dH06MTk5OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgc2wscjAscjIscjEnCit8IHtzdGFuZGFyZCBpbnB1dH06MjE0OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgc2wscjIscjEsZnAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjE5OiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgZnAscjAsc2wnCit8IHtzdGFuZGFyZCBpbnB1dH06MjIwOiBFcnJvcjogdW5zaGlmdGVkIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBhZGMgcjIscjIsIzAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjM1OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjAsc2wscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MjQ0OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgZnAsaXAscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MjUzOiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgcjMsc2wsZnAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjU0OiBFcnJvcjogdW5zaGlmdGVkIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBhZGMgaXAsaXAsIzAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjU5OiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgc2wscjEscjAnCit8IHtzdGFuZGFyZCBpbnB1dH06NjQyOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjAscjIscjMscjEnCit8IC4uL2FybS1vZS1saW51eC1nbnVlYWJpLWxpYnRvb2wgLS10YWc9Q0MgICAtLW1vZGU9Y29tcGlsZSBhcm0tb2UtbGludXgtZ251ZWFiaS1nY2MgIC1tYXJjaD1hcm12NXRlICAtbXRodW1iIC1tdGh1bWItaW50ZXJ3b3JrICAtbXR1bmU9eHNjYWxlIC0tc3lzcm9vdD0vT0Uvc2hyLWNvcmUvdG1wLWVnbGliYy9zeXNyb290cy9zcGl0eiAtREhBVkVfSU5UVFlQRVNfSD0xIC1ESEFWRV9TVERJTlRfSD0xIC1EVElNRV9XSVRIX1NZU19USU1FPTEgLURIQVZFX0xPQ0FMRV9IPTEgLURIQVZFX1dDSEFSX0g9MSAtREhBVkVfU1REQVJHPTEgLURIQVZFX1NZU19USU1FX0g9MSAtREhBVkVfQUxMT0NBX0g9MSAtREhBVkVfU1RESU5UX0g9MSAtREhBVkVfVkFfQ09QWT0xIC1ESEFWRV9TRVRMT0NBTEU9MSAtREhBVkVfR0VUVElNRU9GREFZPTEgLURIQVZFX0xPTkdfTE9ORz0xIC1ESEFWRV9JTlRNQVhfVD0xIC1ETVBGUl9IQVZFX0lOVE1BWF9NQVg9MSAtRE1QRlJfSEFWRV9GRVNFVFJPVU5EPTEgLURIQVZFX1JPVU5EPTEgLURIQVZFX1RSVU5DPTEgLURIQVZFX0ZMT09SPTEgLURIQVZFX0NFSUw9MSAtREhBVkVfTkVBUkJZSU5UPTEgLURMVF9PQkpESVI9XCIubGlicy9cIiAtREhBVkVfQVRUUklCVVRFX01PREU9MSAtREhBVkVfX19HTVBOX1JPT1RSRU09MSAtREhBVkVfX19HTVBOX1NCUEkxX0RJVkFQUFJfUT0xIC1JLiAgICAgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtZmZsb2F0LXN0b3JlIC1jIC1vIHBvdy5sbyBwb3cuYworfCB7c3RhbmRhcmQgaW5wdXR9OjExNTQ6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMCxyMSxzbCxpcCcKK3wge3N0YW5kYXJkIGlucHV0fToxMTY2OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjMscjIsaXAscjAnCit8IHtzdGFuZGFyZCBpbnB1dH06MTE3MTogRXJyb3I6IGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gVGh1bWIxNiBtb2RlIC0tIGBhZGRzIHIwLHIxLHIzJworfCB7c3RhbmRhcmQgaW5wdXR9OjExNzI6IEVycm9yOiB1bnNoaWZ0ZWQgcmVnaXN0ZXIgcmVxdWlyZWQgLS0gYGFkYyByMixyMiwjMCcKK3wgbWFrZVsyXTogKioqIFttdWwubG9dIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIG1wZnIub2xkL3NyYy9tcGZyLWxvbmdsb25nLmgJMjAwOC0wMS0wMSAwMzoyOTowOS4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyL3NyYy9tcGZyLWxvbmdsb25nLmgJMjAwOC0xMC0yNyAyMTo0Njo0NC4wMDAwMDAwMDAgKzAwMDAKK0BAIC00MDYsNyArNDA2LDcgQEAKKyAJICAgICAicklKIiAoKFVTSXR5cGUpIChibCkpKQorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorKyNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMiAmJiAhZGVmaW5lZChfX3RodW1iX18pCisgI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgIF9fYXNtX18gKCJhZGRzXHQlMSwgJTQsICU1XG5cdGFkY1x0JTAsICUyLCAlMyIJCQlcCisgCSAgIDogIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCQlcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjNmOTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLmluYwpAQCAtMCwwICsxLDYgQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBtdWx0aXBsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb25zIHdpdGggZXhhY3Qgcm91bmRpbmciCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYzKyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuMy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmcl8zLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjE5YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgbXBmci5pbmMKKworTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCitERVBFTkRTID0gImdtcCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItJHtQVn0vbXBmci0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjk2OTM5OGNkMmZiYzU2YTZhZjU3MGI1MjczYzU2YTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjgzNWEwOGJkOTkyYzgyNTc2NDE3OTFlOWE2YTJiMzViMDIzMzZjOGRlMjZkMGE4NTc3OTUzNzQ3ZTUxNGExNiIKKworUyA9ICIke1dPUktESVJ9L21wZnItJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL2dudXRsc180LjNfZml4dXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5ZjVlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK3JlcGxhY2UgZGVwcmVjYXRlZCBHbnVUTFMgZnVuY3Rpb25zIHdpdGggbmV3ZXIgb25lcyBpZiBhdmFpbGFibGUgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPgorCitJbmRleDogbmVvbi0wLjMwLjEvbWFjcm9zL25lb24ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuZW9uLTAuMzAuMS5vcmlnL21hY3Jvcy9uZW9uLm00CisrKysgbmVvbi0wLjMwLjEvbWFjcm9zL25lb24ubTQKK0BAIC05ODcsNiArOTg3LDEwIEBAIGdudXRscykKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfZ2V0X3g1MDlfY2FzIFwKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfeDUwOV9jcnRfc2lnbjJdKQorIAorKyAgICMgZ251dGxzIDQuMyBjaGVjaworKyAgIEFDX0NIRUNLX0xJQihnbnV0bHMsIGdudXRsc19nbG9iYWxfaW5pdCkKKysgICBBQ19DSEVDS19GVU5DUyhnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3JldHJpZXZlX2Z1bmN0aW9uLCwpCisrCisgICAgIyBmYWlsIGlmIGdudXRsc194NTA5X2NydF9zaWduMiBpcyBub3QgZm91bmQgKGl0IHdhcyBpbnRyb2R1Y2VkIGluIDEuMi4wLCB3aGljaCBpcyByZXF1aXJlZCkKKyAgICBpZiB0ZXN0IHgke2FjX2N2X2Z1bmNfZ251dGxzX3g1MDlfY3J0X3NpZ24yfSAhPSB4eWVzOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbR251VExTIHZlcnNpb24gcHJlZGF0ZXMgZ251dGxzX3g1MDlfY3J0X3NpZ24yLCBuZXdlciB2ZXJzaW9uIHJlcXVpcmVkIChhdCBsZWFzdCAxLjIuMCldKQorSW5kZXg6IG5lb24tMC4zMC4xL3NyYy9uZV9nbnV0bHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5lb24tMC4zMC4xLm9yaWcvc3JjL25lX2dudXRscy5jCisrKysgbmVvbi0wLjMwLjEvc3JjL25lX2dudXRscy5jCitAQCAtNTUzLDcgKzU1MywxMyBAQCBkdXBfZXJyb3I6Cisgc3RhdGljIGludCBwcm92aWRlX2NsaWVudF9jZXJ0KGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX2RhdHVtX3QgKnJlcV9jYV9yZG4sIGludCBucmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX3BrX2FsZ29yaXRobV90ICpzaWduX2FsZ29zLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbl9hbGdvc19sZW5ndGgsIGdudXRsc19yZXRyX3N0ICpzdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ25fYWxnb3NfbGVuZ3RoLAorKyNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfUkVUUklFVkVfRlVOQ1RJT04KKysgICAgZ251dGxzX3JldHIyX3N0KiBzdAorKyNlbHNlCisrICAgIGdudXRsc19yZXRyX3N0ICpzdAorKyNlbmRpZgorKyAgICApCisgeworICAgICBuZV9zZXNzaW9uICpzZXNzID0gZ251dGxzX3Nlc3Npb25fZ2V0X3B0cihzZXNzaW9uKTsKKyAgICAgCitAQCAtNjE3LDggKzYyMywxMSBAQCBzdGF0aWMgaW50IHByb3ZpZGVfY2xpZW50X2NlcnQoZ251dGxzX3NlCisgI2VuZGlmCisgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgTkVfREVCVUcoTkVfREJHX1NTTCwgIlN1cHBseWluZyBjbGllbnQgY2VydGlmaWNhdGUuXG4iKTsKKy0KKysjaWYgSEFWRV9HTlVUTFNfQ0VSVElGSUNBVEVfU0VUX1JFVFJJRVZFX0ZVTkNUSU9OCisrICAgICAgICAgICAgc3QtPmNlcnRfdHlwZSA9IHR5cGU7CisrI2Vsc2UKKyAgICAgICAgICAgICBzdC0+dHlwZSA9IHR5cGU7CisrI2VuZGlmCisgICAgICAgICAgICAgc3QtPm5jZXJ0cyA9IDE7CisgICAgICAgICAgICAgc3QtPmNlcnQueDUwOSA9ICZzZXNzLT5jbGllbnRfY2VydC0+Y2VydC5zdWJqZWN0OworICAgICAgICAgICAgIHN0LT5rZXkueDUwOSA9IHNlc3MtPmNsaWVudF9jZXJ0LT5wa2V5OworQEAgLTY0OSw4ICs2NTgsMTQgQEAgbmVfc3NsX2NvbnRleHQgKm5lX3NzbF9jb250ZXh0X2NyZWF0ZShpbgorICAgICBuZV9zc2xfY29udGV4dCAqY3R4ID0gbmVfY2FsbG9jKHNpemVvZiAqY3R4KTsKKyAgICAgZ251dGxzX2NlcnRpZmljYXRlX2FsbG9jYXRlX2NyZWRlbnRpYWxzKCZjdHgtPmNyZWQpOworICAgICBpZiAoZmxhZ3MgPT0gTkVfU1NMX0NUWF9DTElFTlQpIHsKKysKKysjaWYgSEFWRV9HTlVUTFNfQ0VSVElGSUNBVEVfU0VUX1JFVFJJRVZFX0ZVTkNUSU9OCisrICAgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3JldHJpZXZlX2Z1bmN0aW9uKGN0eC0+Y3JlZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZV9jbGllbnRfY2VydCk7CisrI2Vsc2UKKyAgICAgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9jbGllbnRfc2V0X3JldHJpZXZlX2Z1bmN0aW9uKGN0eC0+Y3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVfY2xpZW50X2NlcnQpOworKyNlbmRpZgorICAgICB9CisgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfdmVyaWZ5X2ZsYWdzKGN0eC0+Y3JlZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19WRVJJRllfQUxMT1dfWDUwOV9WMV9DQV9DUlQpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5ZGJhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBuZW9uLnBjLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gbmVvbi0wLjMwLjEub3JpZy9uZW9uLnBjLmluCisrKysgbmVvbi0wLjMwLjEvbmVvbi5wYy5pbgorQEAgLTcsNSArNyw1IEBAIE5hbWU6IG5lb24KKyBEZXNjcmlwdGlvbjogSFRUUC9XZWJEQVYgY2xpZW50IGxpYnJhcnkKKyBWZXJzaW9uOiBATkVPTl9WRVJTSU9OQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sbmVvbiBATkVPTl9QQ19MSUJTQAorLUxpYnMucHJpdmF0ZTogQE5FT05fTElCU0AKKytMaWJzLnByaXZhdGU6IC1MJHtsaWJkaXJ9IC1seiAtbGdjcnlwdCAtbGdwZy1lcnJvciAtbGV4cGF0IC1sZ251dGxzCisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vbmVvbiBATkVPTl9DRkxBR1NACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb25fMC4zMC4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uXzAuMzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ0MzE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uXzAuMzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkFuIEhUVFAgYW5kIFdlYkRBViBjbGllbnQgbGlicmFyeSB3aXRoIGEgQyBpbnRlcmZhY2UiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LndlYmRhdi5vcmcvbmVvbi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvQ09QWUlORy5MSUI7bWQ1PWYzMGE5NzE2ZWYzNzYyZTM0NjdhMmY2MmJmNzkwZjBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9uZV91dGlscy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTJjYWNhNjA5NTM4ZWRkYWE2ZjZhZGYxMjBhMjE4MDM3IgorREVQRU5EUyA9ICJ6bGliIGxpYnhtbDIgZXhwYXQgdGltZSBnbnV0bHMgbGlicHJveHkiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSBleHBhdC1uYXRpdmUgZ251dGxzLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy53ZWJkYXYub3JnLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gIjIzMWFkZWJlNWMyZjc4ZmRlZDNlM2RmNmU5NTg4NzhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYzYyNmMwZGMxOGQwOTRhYjM3NGRiZDlhMzU0OTE1YmZlNDc3NjQzMzI4OTM4NmVkNDg5YzJlYzA4NDVjZGQiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbmVvbi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZSBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zc2w9Z251dGxzIC0td2l0aC1saWJ4bWwyIC0td2l0aC1leHBhdCAtLWVuYWJsZS1zaGFyZWQiCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1nc3NhcGkiCisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCW9lX3J1bm1ha2UgLUMgdGVzdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2RhNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA0NmVkZjAxY2M5OGRiOWY5ZmVlYzk4NDg5NzgzNmRmZGQyNmJkYzhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTIgQXVnIDIwMTUgMjM6Mjc6MjcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRhcmdldCB0byBvbmx5IGJ1aWxkIHRlc3RzIChub3QgcnVuIHRoZW0pCisKK05vdCBzZW5kaW5nIHVwc3RyZWFtIGFzIHRoaXMgaXMgb25seSBhIHN0YXJ0IG9mIGEgc29sdXRpb24gdG8KK2luc3RhbGxhYmxlIHRlc3RzOiBJdCdzIHVzZWZ1bCBmb3IgdXMgYWxyZWFkeSBhcyBpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYSBjb21wbGV0ZSBzb2x1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICAgICAgICAgICB8IDMgKysrCisgdGVzdHN1aXRlL01ha2VmaWxlLmluIHwgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAwOGVmYjdkLi43OTA5MzQyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNTUsNiArNTUsOSBAQCBjbGVhbiBkaXN0Y2xlYW4gbW9zdGx5Y2xlYW4gbWFpbnRhaW5lci1jbGVhbiB0YWdzOgorIAkgIGVjaG8gIk1ha2luZyAkQCBpbiAkJGQiIDsgKGNkICQkZCAmJiAkKE1BS0UpICRAKTsgZG9uZQorIAkkKE1BS0UpICRALWhlcmUKKyAKKytidWlsZHRlc3Q6CisrCWVjaG8gIk1ha2luZyAkQCBpbiB0ZXN0c3VpdGUiIDsgKGNkIHRlc3RzdWl0ZSAmJiAkKE1BS0UpICRAKQorKworIGNoZWNrLWhlcmU6CisgCXRydWUKKyAKK2RpZmYgLS1naXQgYS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gYi90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK2luZGV4IDZiYzE5MDcuLmJiNjViZjAgMTAwNjQ0CistLS0gYS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KKysrKyBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorQEAgLTExNiw2ICsxMTYsOCBAQCAkKFRBUkdFVFMpICQoRVhUUkFfVEFSR0VUUyk6IHRlc3R1dGlscy4kKE9CSkVYVCkgLi4vbmV0dGxlLWludGVybmFsLiQoT0JKRVhUKSBcCisgIyBkYXRhLgorIFZBTEdSSU5EID0gdmFsZ3JpbmQgLS1lcnJvci1leGl0Y29kZT0xIC0tbGVhay1jaGVjaz1mdWxsIC0tc2hvdy1yZWFjaGFibGU9eWVzIEBJRl9BU01AIC0tcGFydGlhbC1sb2Fkcy1vaz15ZXMKKyAKKytidWlsZHRlc3Q6ICQoVFNfQUxMKQorKworICMgVGhlIFBBVEggdXBkYXRlIGlzIGZvciBsb2NhdGluZyBkbGxzIG9uIHcqbmRvd3MuCisgY2hlY2s6ICQoVFNfQUxMKQorIAlMRF9MSUJSQVJZX1BBVEg9Li4vLmxpYiBQQVRIPSIuLi8ubGliOiQkUEFUSCIgc3JjZGlyPSIkKHNyY2RpcikiIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwYmVkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzNiBAQAorIyEgL2Jpbi9zaAorCitjZCB0ZXN0c3VpdGUKKworZmFpbGVkPTAKK2FsbD0wCisKK2ZvciBmIGluICotdGVzdDsgZG8KKyAgICBpZiBbICIkZiIgPSAic2hhMS1odWdlLXRlc3QiIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIlNLSVA6ICRmIChza2lwcGVkIGZvciBsdWRpY3JvdXMgcnVuIHRpbWUpIgorICAgICAgICBjb250aW51ZQorICAgIGZpCisKKyAgICAiLi8kZiIKKyAgICBjYXNlICIkPyIgaW4KKyAgICAgICAgMCkKKyAgICAgICAgICAgIGVjaG8gIlBBU1M6ICRmIgorICAgICAgICAgICAgYWxsPSQoKGFsbCArIDEpKQorICAgICAgICAgICAgOzsKKyAgICAgICAgNzcpCisgICAgICAgICAgICBlY2hvICJTS0lQOiAkZiIKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJGQUlMOiAkZiIKKyAgICAgICAgICAgIGZhaWxlZD0kKChmYWlsZWQgKyAxKSkKKyAgICAgICAgICAgIGFsbD0kKChhbGwgKyAxKSkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitpZiBbICIkZmFpbGVkIiAtZXEgMCBdIDsgdGhlbgorICBlY2hvICJBbGwgJGFsbCB0ZXN0cyBwYXNzZWQiCitlbHNlCisgIGVjaG8gIiRmYWlsZWQgb2YgJGFsbCB0ZXN0cyBmYWlsZWQiCitmaQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmZmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLmluYwpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkEgbG93IGxldmVsIGNyeXB0b2dyYXBoaWMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubHlzYXRvci5saXUuc2Uvfm5pc3NlL25ldHRsZS8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LWRlY3J5cHQuYztiZWdpbmxpbmU9NTM7ZW5kbGluZT02NzttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1zZXQta2V5LmM7YmVnaW5saW5lPTU2O2VuZGxpbmU9NzA7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIgorCitERVBFTkRTICs9ICJnbXAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9+bmlzc2UvYXJjaGl2ZS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDNkNTE0NzkxMTMxNzkzMWRkNDUzNTIwZWIyMzRhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYzcxZWJkNDM0MzU1MzdkNzY3Nzk5ZTQxNGZjZTg4ZTUyMWI3Mjc4ZDQ4Yzg2MDY1MTIxNmUxZmM2NTU1YjQwIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW9wZW5zc2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCAtYSAtZSAke1N9L2FjbG9jYWwubTQgXTsgdGhlbgorICAgICAgICAgICAgICAgY3AgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisgICAgICAgZmkKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBidWlsZHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCisgICAgICAgIGluc3RhbGwgJHtTfS90ZXN0c3VpdGUvZ29sZC1idWcudHh0ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KKyAgICAgICAgaW5zdGFsbCAke1N9L3Rlc3RzdWl0ZS8qLXRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLworICAgICAgICAjIHRvb2xzIGNhbiBiZSBmb3VuZCBpbiBQQVRILCBub3QgaW4gLi4vdG9vbHMvCisgICAgICAgIHNlZCAtaSAtZSAnc3wuLi90b29scy98fCcgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLyotdGVzdAorICAgICAgICBpbnN0YWxsICR7Qn0vdGVzdHN1aXRlLyotdGVzdCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCit9CisKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMi43LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyNTc0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMi43LjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBuZXR0bGUuaW5jCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MiIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1kZWNyeXB0LmM7YmVnaW5saW5lPTUzO2VuZGxpbmU9Njc7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtc2V0LWtleS5jO2JlZ2lubGluZT01NjtlbmRsaW5lPTcwO21kNT1iY2ZkNDc0NWQ1M2NhNTdmODI5MDcwODk4OThlMzkwZCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwM2Q1MTQ3OTExMzE3OTMxZGQ0NTM1MjBlYjIzNGE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJjNzFlYmQ0MzQzNTUzN2Q3Njc3OTllNDE0ZmNlODhlNTIxYjcyNzhkNDhjODYwNjUxMjE2ZTFmYzY1NTViNDAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4xLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzMuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNzEzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzMuMS4xLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgbmV0dGxlLmluYworCitMSUNFTlNFID0gIkxHUEx2MysgfCBHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1kZWNyeXB0LmM7YmVnaW5saW5lPTE0O2VuZGxpbmU9MzY7bWQ1PWNhMGQyMjBiYzQxM2UxODQyZWNjNTA3NjkwY2U0MTZlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtc2V0LWtleS5jO2JlZ2lubGluZT0xNDtlbmRsaW5lPTM2O21kNT1jYTBkMjIwYmM0MTNlMTg0MmVjYzUwNzY5MGNlNDE2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gImI0MGZhODhkYzMyZjM3YTE4MmI2YjQyMDkyZWJiMTQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmZDRkMjVkNjRkOGRkY2I4NWQwZDg5NzU3MmFmNzNiMDViNGQxNjNjNmNjNDk0MzhhNWJmYmI4ZmYyOTNkNGMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGgvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmExMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitBZGRlZCBucHRoIHBrZ2NvbmZpZyBmaWxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBucHRoLTEuMS9zcmMvbnB0aC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIG5wdGgtMS4xL3NyYy9ucHRoLnBjLmluCitAQCAtMCwwICsxLDEwIEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogbnB0aAorK0Rlc2NyaXB0aW9uOiBhIG5ldyBwb3J0YWJsZSBwb3NpeCB0aHJlYWRpbmcgbGlicmFyeQorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbnB0aCAtbHB0aHJlYWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorSW5kZXg6IG5wdGgtMS4xL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5wdGgtMS4xLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbnB0aC0xLjEvc3JjL01ha2VmaWxlLmFtCitAQCAtMjcsOCArMjcsMTAgQEAKKyAjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBucHRoLnBjCisgCistRVhUUkFfRElTVCA9IGxpYm5wdGgudmVycworK0VYVFJBX0RJU1QgPSBsaWJucHRoLnZlcnMgbnB0aC5wYworICMJICAgICB2ZXJzaW9uaW5mby5yYy5pbgorIG5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBucHRoLmgKKyAKK0luZGV4OiBucHRoLTEuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBucHRoLTEuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIG5wdGgtMS4xL2NvbmZpZ3VyZS5hYworQEAgLTMzNyw2ICszMzcsNyBAQCBzcmMvTWFrZWZpbGUKKyB3MzIvTWFrZWZpbGUKKyB0ZXN0cy9NYWtlZmlsZV0pCisgQUNfQ09ORklHX0ZJTEVTKG5wdGgtY29uZmlnLCBjaG1vZCAreCBucHRoLWNvbmZpZykKKytBQ19DT05GSUdfRklMRVMoW3NyYy9ucHRoLnBjXSkKKyBBQ19PVVRQVVQKKyAKKyBlY2hvICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzk2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTmV3IEdOVSBQb3J0YWJsZSBUaHJlYWRzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9zb2Z0d2FyZS9wdGgvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjMrICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjZcCisgICAgIgorU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9ucHRoL25wdGgtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIyNmJhYzczNzRiOTQ2NmM2ZWMyNmIxYzM0ZGFiODQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZkZGJkZGRiMmNmNDlhNDcyM2Y5ZDFhZDY1NjNjNDgwZDY3NjBkY2I2M2NiNzcyNmI4ZmMzYmMyZTFiNmMwOGEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbnB0aC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZAorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlibnB0aC5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vbnB0aC1jb25maWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcyNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGaXggYnVpbGQgZmFpbHVyZSBvbiB4ODZfNjQKKworV2hlbiB0aGUgdGFyZ2V0X2NwdSBpcyB4ODZfNjQsIHdlIHNob3VsZCBhc3N1bWUgdGhhdCB0aGUgcGtnIHVzZXMgNjRiaXQsCitvbmx5IGlmIFVTRV9OMzIgaXMgc2V0LCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIHBrZyB1c2VzIDMyYml0LiBJdCB1c2VkIGEKK29wcG9zaXRlIGxvZ2ljIGJlZm9yZS4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlLmluIHwgICAxMiArKysrKystLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworSW5kZXg6IG5zcHIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNwci5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIG5zcHIvY29uZmlndXJlLmluCitAQCAtMTg3NSwyOCArMTg3NSwyNCBAQCB0b29scyBhcmUgc2VsZWN0ZWQgZHVyaW5nIHRoZSBYY29kZS9EZXZlCisgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X2lhNjQucworICAgICAgICAgOzsKKyAgICAgeDg2XzY0KQorLSAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV82NCI7IHRoZW4KKy0gICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Nl82NC5zCistICAgICAgICBlbGlmIHRlc3QgLW4gIiRVU0VfWDMyIjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV9YMzIiOyB0aGVuCisrICAgICAgICAgICAgQUNfREVGSU5FKGkzODYpCisgICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODZfNjQucworICAgICAgICAgICAgIENDPSIkQ0MgLW14MzIiCisgICAgICAgICAgICAgQ1hYPSIkQ1hYIC1teDMyIgorICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIEFDX0RFRklORShpMzg2KQorLSAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfeDg2LnMKKy0gICAgICAgICAgICBDQz0iJENDIC1tMzIiCistICAgICAgICAgICAgQ1hYPSIkQ1hYIC1tMzIiCisrICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODZfNjQucworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgIHBwY3xwb3dlcnBjKQorICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworICAgICAgICAgOzsKKyAgICAgcG93ZXJwYzY0KQorLSAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV82NCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgLW4gIiRVU0VfTjMyIjsgdGhlbgorKyAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfcHBjLnMKKysgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBDQz0iJENDIC1tNjQiCisgICAgICAgICAgICAgQ1hYPSIkQ1hYIC1tNjQiCistICAgICAgICBlbHNlCistICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgIG02OGspCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvbnNwci5wYy5pbiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9uc3ByLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzN2QwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvbnNwci5wYy5pbgpAQCAtMCwwICsxLDExIEBACitvc19saWJzPS1scHRocmVhZCAtbGRsCitwcmVmaXg9T0VQUkVGSVgKK2V4ZWNfcHJlZml4PU9FRVhFQ1BSRUZJWAorbGliZGlyPU9FTElCRElSCitpbmNsdWRlZGlyPU9FSU5DRElSCisKK05hbWU6IE5TUFIKK0Rlc2NyaXB0aW9uOiBUaGUgTmV0c2NhcGUgUG9ydGFibGUgUnVudGltZQorVmVyc2lvbjogNC45LjUKK0xpYnM6IC1MJHtsaWJkaXJ9IC1scGxkczQgLWxwbGM0IC1sbnNwcjQgLWxwdGhyZWFkIC1sZGwKK0NmbGFnczoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtcnBhdGgtZnJvbS10ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtcnBhdGgtZnJvbS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2U3ODUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBUaHUgRmViIDkgMDA6MDM6MzggMjAxMiArMDIwMAorCitBdm9pZCBRQSB3YXJuaW5ncyBieSByZW1vdmluZyBoYXJkY29kZWQgcnBhdGggZnJvbSBiaW5hcmllcy4KKworWy4uLl0KK1dBUk5JTkc6IFFBIElzc3VlOiBwYWNrYWdlIG5zcHIgY29udGFpbnMgYmFkIFJQQVRIIHtidWlsZGRpcn0vdG1wL3dvcmsvYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmkvbnNwci00LjguOS1yMS9uc3ByLTQuOC45L21vemlsbGEvbnNwcnB1Yi9wci90ZXN0cy8uLi8uLi9kaXN0L2xpYgoraW4gZmlsZSB7YnVpbGRkaXJ9L3RtcC93b3JrL2FybXY1dGUtcG9reS1saW51eC1nbnVlYWJpL25zcHItNC44LjktcjEvcGFja2FnZXMtc3BsaXQvbnNwci91c3IvbGliL25zcHIvdGVzdHMvbXVsdGl3YWl0CitbLi4uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG5zcHItNC44LjkvbW96aWxsYS9uc3BycHViL3ByL3Rlc3RzL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNwcnB1Yi5vcmlnL3ByL3Rlc3RzL01ha2VmaWxlLmluCTIwMTItMDItMTEgMDA6MDE6MTAuNDc2MjIwNTA1ICswMjAwCisrKysgbnNwcnB1Yi9wci90ZXN0cy9NYWtlZmlsZS5pbgkyMDEyLTAyLTEwIDIzOjU3OjQwLjAwMDAwMDAwMCArMDIwMAorQEAgLTM3OSw3ICszNzksNyBAQAorIGVuZGlmCisgCisgaWZlcSAoLCQoZmlsdGVyLW91dCBMaW51eCBHTlUgR05VXyUsJChPU19BUkNIKSkpCistICAgIExET1BUUyArPSAtWGxpbmtlciAtcnBhdGggJChBQlNPTFVURV9MSUJfRElSKQorKyAgICBMRE9QVFMgKz0gLVhsaW5rZXIKKyAgICAgaWZlcSAoJChVU0VfUFRIUkVBRFMpLDEpCisgICAgICAgICBFWFRSQV9MSUJTID0gLWxwdGhyZWFkCisgICAgIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTcxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaApAQCAtMCwwICsxLDE5IEBACit0aGUgJHNyY2RpciBpcyBub3QgZGVmaW5lZCBhdCB0aGUgdGltZSBvZiBnbnUtY29uZmlndXJpemUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogbnNwci9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3ByLm9yaWcvY29uZmlndXJlLmluCisrKysgbnNwci9jb25maWd1cmUuaW4KK0BAIC04LDcgKzgsNyBAQCBBQ19QUkVSRVEoMi42MSkKKyBBQ19JTklUCisgQUNfQ09ORklHX1NSQ0RJUihbcHIvaW5jbHVkZS9uc3ByLmhdKQorIAorLUFDX0NPTkZJR19BVVhfRElSKCR7c3JjZGlyfS9idWlsZC9hdXRvY29uZikKKytBQ19DT05GSUdfQVVYX0RJUihidWlsZC9hdXRvY29uZikKKyBBQ19DQU5PTklDQUxfVEFSR0VUCisgCisgZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMC44LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQ5OTRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTAuOC5iYgpAQCAtMCwwICsxLDE3NiBAQAorU1VNTUFSWSA9ICJOZXRzY2FwZSBQb3J0YWJsZSBSdW50aW1lIExpYnJhcnkiCitIT01FUEFHRSA9ICAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9uc3ByLyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCB8IE1QTC0yLjAgfCBMR1BMLTIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NvbmZpZ3VyZS5pbjtiZWdpbmxpbmU9MztlbmRsaW5lPTY7bWQ1PTkwYzJmZGVlMzhlNDVkNjMwMmFiY2ZlNDc1YzhiNWM1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmluO2JlZ2lubGluZT00O2VuZGxpbmU9Mzg7bWQ1PWJlZGExZGJiOThhNTE1ZjU1N2QzZTU4ZWYwNmJjYTk5IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm1vemlsbGEub3JnL3B1Yi9tb3ppbGxhLm9yZy9uc3ByL3JlbGVhc2VzL3Yke1BWfS9zcmMvbnNwci0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXJwYXRoLWZyb20tdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9uc3ByLnBjLmluIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGQ3YzViZDBhNWIwYTdkMGU3MDViZTY2NDc5MDMwYTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTA3ZWE1N2M1MjVjMGM1MjRkYWU0ODU3YTY0MmI0ZWY1YzlkNzk1NTE4NzU0YzdmODM0MjJkMjJmZTU0NGExNSIKKworUyA9ICIke1dPUktESVJ9L25zcHItJHtQVn0vbnNwciIKKworUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJwZXJsIgorVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK1RFU1RTID0gIiBcCisgICAgYWNjZXB0IFwKKyAgICBhY2NlcHRyZWFkIFwKKyAgICBhY2NlcHRyZWFkZW11IFwKKyAgICBhZmZpbml0eSBcCisgICAgYWxhcm0gXAorICAgIGFub25mbSBcCisgICAgYXRvbWljIFwKKyAgICBhdHRhY2ggXAorICAgIGJpZ2ZpbGUgXAorICAgIGNsZWFudXAgXAorICAgIGNsdHNydiAgXAorICAgIGNvbmN1ciBcCisgICAgY3ZhciBcCisgICAgY3ZhcjIgXAorICAgIGRsbHRlc3QgXAorICAgIGR0b2EgXAorICAgIGVycmNvZGVzIFwKKyAgICBleGl0IFwKKyAgICBmZGNhY2ggXAorICAgIGZpbGVpbyBcCisgICAgZm9yZWlnbiBcCisgICAgZm9ybWF0dG0gXAorICAgIGZzeW5jIFwKKyAgICBnZXRob3N0IFwKKyAgICBnZXRwcm90byBcCisgICAgaTJsIFwKKyAgICBpbml0Y2xrIFwKKyAgICBpbnJ2YWwgXAorICAgIGluc3RydW10IFwKKyAgICBpbnRyaW8gXAorICAgIGludHJ1cHQgXAorICAgIGlvX3RpbWVvdXQgXAorICAgIGlvY29udGhyIFwKKyAgICBqb2luIFwKKyAgICBqb2lua2sgXAorICAgIGpvaW5rdSBcCisgICAgam9pbnVrIFwKKyAgICBqb2ludXUgXAorICAgIGxheWVyIFwKKyAgICBsYXp5aW5pdCBcCisgICAgbGliZmlsZW5hbWUgXAorICAgIGxsdGVzdCBcCisgICAgbG9jayBcCisgICAgbG9ja2ZpbGUgXAorICAgIGxvZ2ZpbGUgXAorICAgIGxvZ2dlciBcCisgICAgbWFueV9jdiBcCisgICAgbXVsdGl3YWl0IFwKKyAgICBuYW1lc2htMSBcCisgICAgbmJsYXllciBcCisgICAgbm9uYmxvY2sgXAorICAgIG50aW90byBcCisgICAgbnRvaCBcCisgICAgb3BfMmxvbmcgXAorICAgIG9wX2V4Y2wgXAorICAgIG9wX2ZpbG5mIFwKKyAgICBvcF9maWxvayBcCisgICAgb3Bfbm9maWwgXAorICAgIHBhcmVudCBcCisgICAgcGFyc2V0bSBcCisgICAgcGVlayBcCisgICAgcGVyZiBcCisgICAgcGlwZXBpbmcgXAorICAgIHBpcGVwaW5nMiBcCisgICAgcGlwZXNlbGYgXAorICAgIHBvbGxfbm0gXAorICAgIHBvbGxfdG8gXAorICAgIHBvbGxhYmxlIFwKKyAgICBwcmZ0ZXN0IFwKKyAgICBwcmltYmxvayBcCisgICAgcHJvdmlkZXIgXAorICAgIHBycG9sbG1sIFwKKyAgICByYW5maWxlIFwKKyAgICByYW5kc2VlZCBcCisgICAgcmVpbml0IFwKKyAgICByd2xvY2t0ZXN0IFwKKyAgICBzZWxfc3BkIFwKKyAgICBzZWxjdF9lciBcCisgICAgc2VsY3Rfbm0gXAorICAgIHNlbGN0X3RvIFwKKyAgICBzZWxpbnRyIFwKKyAgICBzZW1hIFwKKyAgICBzZW1hZXJyIFwKKyAgICBzZW1hcGluZyBcCisgICAgc2VuZHpsZiBcCisgICAgc2VydmVyX3Rlc3QgXAorICAgIHNlcnZyX2trIFwKKyAgICBzZXJ2cl91ayBcCisgICAgc2VydnJfa3UgXAorICAgIHNlcnZyX3V1IFwKKyAgICBzaG9ydF90aHJlYWQgXAorICAgIHNpZ3BpcGUgXAorICAgIHNvY2tldCBcCisgICAgc29ja29wdCBcCisgICAgc29ja3BpbmcgXAorICAgIHNwcmludGYgXAorICAgIHN0YWNrIFwKKyAgICBzdGRpbyBcCisgICAgc3RyMmFkZHIgXAorICAgIHN0cm9kIFwKKyAgICBzd2l0Y2ggXAorICAgIHN5c3RlbSBcCisgICAgdGVzdGJpdCBcCisgICAgdGVzdGZpbGUgXAorICAgIHRocmVhZHMgXAorICAgIHRpbWVtYWMgXAorICAgIHRpbWV0ZXN0IFwKKyAgICB0cGQgXAorICAgIHVkcHNydiBcCisgICAgdmVyY2hlY2sgXAorICAgIHZlcnNpb24gXAorICAgIHdyaXRldiBcCisgICAgeG5vdGlmeSBcCisgICAgemVyb2xlbiIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlvZV9ydW5tYWtlIENST1NTX0NPTVBJTEU9MSBDRkxBR1M9Ii1EWFBfVU5JWCIgTERGTEFHUz0iIiBDQz1nY2MgLUMgY29uZmlnIGV4cG9ydAorfQorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwlvZV9ydW5tYWtlIC1DIHByL3Rlc3RzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLUQgJHtXT1JLRElSfS9uc3ByLnBjLmluICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKyAgICBzZWQgLWkgczpPRVBSRUZJWDoke3ByZWZpeH06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VMSUJESVI6JHtsaWJkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VFWEVDUFJFRklYOiR7ZXhlY19wcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworCisgICAgbWtkaXIgLXAgJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vcHIvdGVzdHMvcnVudGVzdHMucGwgJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vcHIvdGVzdHMvcnVudGVzdHMuc2ggJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisgICAgY2QgJHtCfS9wci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1RFU1RTfSAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKKworICAgICMgZGVsZXRlIGNvbXBpbGUtZXQucGwgYW5kIHBlcnIucHJvcGVydGllcyBmcm9tICR7YmluZGlyfSBiZWNhdXNlIHRoZXNlIGFyZQorICAgICMgb25seSB1c2VkIHRvIGdlbmVyYXRlIHByZXJyLmMgYW5kIHByZXJyLmggZmlsZXMgZnJvbSBwcmVyci5ldCBhdCBjb21waWxlCisgICAgIyB0aW1lCisgICAgcm0gJHtEfSR7YmluZGlyfS9jb21waWxlLWV0LnBsICR7RH0ke2JpbmRpcn0vcHJlcnIucHJvcGVydGllcworfQorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKi5zbyIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2JpbmRpcn0vKiAke2xpYmRpcn0vbnNwci90ZXN0cy8qICR7bGliZGlyfS9wa2djb25maWcgXAorICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vKiAke2RhdGFkaXJ9L2FjbG9jYWwvKiAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9uc3ByL3Rlc3RzLy5kZWJ1Zy8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZTllOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lXzAuMy5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIk5hbWUgU2VydmljZSBTd2l0Y2ggbW9kdWxlIGZvciByZXNvbHZpbmcgdGhlIGxvY2FsIGhvc3RuYW1lIgorREVTQ1JJUFRJT04gPSAicGx1Z2luIGZvciB0aGUgR05VIE5hbWUgU2VydmljZSBTd2l0Y2ggKE5TUykgZnVuY3Rpb25hbGl0eSBvZiBcCit0aGUgR05VIEMgTGlicmFyeSAoZ2xpYmMpIHByb3ZpZGluZyBob3N0IG5hbWUgcmVzb2x1dGlvbiBmb3IgdGhlIGxvY2FsbHkgXAorY29uZmlndXJlZCBzeXN0ZW0gaG9zdG5hbWUgYXMgcmV0dXJuZWQgYnkgZ2V0aG9zdG5hbWUoMikuIgorSE9NRVBBR0UgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW15aG9zdG5hbWUvIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitTUkNfVVJJID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0YWI5YWMzNmMwNTNhYjhmYjgzNmRiMWNiZDRhNDhmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJiYTc0NGVhOGQ1NzhkMWM1N2M4NTg4NGU5NGEzMDQyZWUxNzg0M2E1Mjk0NDM0ZDNhN2Y2YzRkNjdlN2NhZjIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzeXN0ZW1kIGhhcyBpdHMgb3duIGNvcHkgb2YgbnNzLW15aG9zdG5hbWUKK0NPTkZMSUNUX0RJU1RST19GRUFUVVJFUyA9ICJzeXN0ZW1kIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG15aG9zdG5hbWVcPi8vJyBcCisJCS1lICdzL1woXmhvc3RzOi4qXClcKFw8ZmlsZXNcPlwpXCguKlwpXChcPGRuc1w+XClcKC4qXCkvXDFcMiBteWhvc3RuYW1lIFwzXDRcNS8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAorCQktZSAnL15ob3N0czovcy9ccypteWhvc3RuYW1lLy8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LWluY29ycmVjdC1zaGViYW5nLW9mLXBlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3NTk0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACituc3M6IGZpeCBpbmNvcnJlY3Qgc2hlYmFuZyBvZiBwZXJsCisKK1JlcGxhY2UgaW5jb3JyZWN0IHNoZWJhbmcgb2YgcGVybCB3aXRoIGAjIS91c3IvYmluL2VudiBwZXJsJy4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBuc3MvY21kL3NtaW1ldG9vbHMvc21pbWUgIHwgMiArLQorIG5zcy9jb3JlY29uZi9jcGRpc3QucGwgICAgfCAyICstCisgbnNzL2NvcmVjb25mL2ltcG9ydC5wbCAgICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvam5pcmVnZW4ucGwgIHwgMiArLQorIG5zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwgfCAyICstCisgbnNzL2NvcmVjb25mL3JlbGVhc2UucGwgICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvdmVyc2lvbi5wbCAgIHwgMiArLQorIG5zcy90ZXN0cy9jbGVhbl90YnggICAgICAgfCAyICstCisgbnNzL3Rlc3RzL3BhdGhfdW5pcSAgICAgICB8IDIgKy0KKyA5IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25zcy9jbWQvc21pbWV0b29scy9zbWltZSBiL25zcy9jbWQvc21pbWV0b29scy9zbWltZQorLS0tIGEvbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lCisrKysgYi9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvY3BkaXN0LnBsIGIvbnNzL2NvcmVjb25mL2NwZGlzdC5wbAoraW5kZXggODAwZWRmYi4uNjUyMTg3ZiAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9jcGRpc3QucGwKKysrKyBiL25zcy9jb3JlY29uZi9jcGRpc3QucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9pbXBvcnQucGwgYi9uc3MvY29yZWNvbmYvaW1wb3J0LnBsCitpbmRleCBkZDJkMTc3Li40MjhlYWE1IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL2ltcG9ydC5wbAorKysrIGIvbnNzL2NvcmVjb25mL2ltcG9ydC5wbAorQEAgLTEsNCArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsIGIvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsCitpbmRleCAyMDM5MTgwLi41ZjRmNjljIDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsCisrKysgYi9uc3MvY29yZWNvbmYvam5pcmVnZW4ucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbCBiL25zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwKK2luZGV4IDMzZDgwYmIuLjAxZmMwOTcgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsCisrKysgYi9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsIGIvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwKK2luZGV4IDdjZGUxOWQuLmI1ZGYyZjYgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvcmVsZWFzZS5wbAorKysrIGIvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsIGIvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwKK2luZGV4IGQyYTQ5NDIuLjc5MzU5ZmUgMTAwNjQ0CistLS0gYS9uc3MvY29yZWNvbmYvdmVyc2lvbi5wbAorKysrIGIvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9zYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy90ZXN0cy9jbGVhbl90YnggYi9uc3MvdGVzdHMvY2xlYW5fdGJ4CitpbmRleCA0ZGU5NTU1Li5hN2RlZjlmIDEwMDc1NQorLS0tIGEvbnNzL3Rlc3RzL2NsZWFuX3RieAorKysrIGIvbnNzL3Rlc3RzL2NsZWFuX3RieAorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIworZGlmZiAtLWdpdCBhL25zcy90ZXN0cy9wYXRoX3VuaXEgYi9uc3MvdGVzdHMvcGF0aF91bmlxCitpbmRleCBmMjlmNjBhLi4wOGZiZmZhIDEwMDc1NQorLS0tIGEvbnNzL3Rlc3RzL3BhdGhfdW5pcQorKysrIGIvbnNzL3Rlc3RzL3BhdGhfdW5pcQorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjZkZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGaXggbnNzIG11bHRpbGliIGJ1aWxkIG9uIG9wZW5TVVNFIDExLnggMzJiaXQKKworV2hpbGUgYnVpbGRpbmcgbGliNjQtbnNzIG9uIG9wZW5TVVNFIDExLnggMzJiaXQsIHRoZSBuc2luc3RhbGwgd2lsbAorZmFpbCB3aXRoIGVycm9yOgorCisqIG5zaW5zdGFsbC5jOjE6MDogc29ycnksIHVuaW1wbGVtZW50ZWQ6IDY0LWJpdCBtb2RlIG5vdCBjb21waWxlZAorCitJdCBjYXVzZWQgYnkgdGhlICctbTY0JyBvcHRpb24gd2hpY2ggcGFzc2VkIHRvIGhvc3QgZ2NjLgorCitUaGUgbnNpbnN0YWxsIHdhcyBidWlsdCBmaXJzdCB3aGlsZSBuc3Mgc3RhcnRpbmcgdG8gYnVpbGQsIGl0IG9ubHkgcnVucworb24gaG9zdCB0byBpbnN0YWxsIGJ1aWx0IGZpbGVzLCBpdCBkb2Vzbid0IG5lZWQgYW55IGNyb3NzLWNvbXBsaW5nIG9yCittdWx0aWxpYiBidWlsZCBvcHRpb25zLiBKdXN0IGNsZWFuIHRoZSBBUkNIRkxBRyBhbmQgTERGTEFHUyB0byBmaXggdGhpcworZXJyb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUgYi9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlCitpbmRleCAxODUwYmNiLi41YWVlODRmIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQorKysrIGIvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDEyIEBAIElOVEVSTkFMX1RPT0xTICA9IDEKKyAKKyBpbmNsdWRlICQoREVQVEgpL2NvcmVjb25mL2NvbmZpZy5taworIAorKyMgbnNpbnN0YWxsIGlzIHVuZml0IGZvciBjcm9zcy1jb21waWxpbmcvbXVsdGlsaWItYnVpbGQgc2luY2UgaXQgd2FzCisrIyBhbHdheXMgcnVuIG9uIGxvY2FsIGhvc3QgdG8gaW5zdGFsbCBidWlsdCBmaWxlcy4gVGhpcyBjaGFuZ2UgaW50ZW5kcworKyMgdG8gY2xlYW4gdGhlICctbTY0JyBmcm9tIEFSQ0hGTEFHIGFuZCBMREZMQUdTLgorK0FSQ0hGTEFHID0KKytMREZMQUdTID0KKysKKyBpZmVxICgsJChmaWx0ZXItb3V0IE9TMiBXSU4lLCQoT1NfVEFSR0VUKSkpCisgUFJPR1JBTQkJPQorIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGIzNTUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK25zczogZml4IHN1cHBvcnQgY3Jvc3MgY29tcGlsaW5nCisKK0xldCBzb21lIG1ha2UgdmFyaWFibGVzIGJlIGFzc2lnbmVkIGZyb20gb3V0c2lkZSBtYWtlZmlsZS4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgbnNzL2NvcmVjb25mL0xpbnV4Lm1rICAgfCAxMiArKysrKysrKysrKy0KKyBuc3MvY29yZWNvbmYvYXJjaC5tayAgICB8ICAyICstCisgbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUgfCAgNiArKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvTGludXgubWsgYi9uc3MvY29yZWNvbmYvTGludXgubWsKKy0tLSBhL25zcy9jb3JlY29uZi9MaW51eC5taworKysrIGIvbnNzL2NvcmVjb25mL0xpbnV4Lm1rCitAQCAtMTYsMTEgKzE2LDIxIEBAIGlmZXEgKCQoVVNFX1BUSFJFQURTKSwxKQorIAlJTVBMX1NUUkFURUdZID0gX1BUSAorIGVuZGlmCisgCisraWZuZGVmIENDCisgQ0MJCQk9IGdjYworK2VuZGlmCisrCisraWZkZWYgQ1hYCisrQ0NDCQkJPSAkKENYWCkKKytlbHNlCisgQ0NDCQkJPSBnKysKKytlbmRpZgorKworK2lmbmRlZiBSQU5MSUIKKyBSQU5MSUIJCQk9IHJhbmxpYgorK2VuZGlmCisgCistREVGQVVMVF9DT01QSUxFUiA9IGdjYworK0RFRkFVTFRfQ09NUElMRVIgPSAkKENDKQorIAorIGlmZXEgKCQoT1NfVEFSR0VUKSxBbmRyb2lkKQorIGlmbmRlZiBBTkRST0lEX05ESworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9hcmNoLm1rIGIvbnNzL2NvcmVjb25mL2FyY2gubWsKK2luZGV4IDY1NTczNDguLmI3MjI0MTIgMTAwNjQ0CistLS0gYS9uc3MvY29yZWNvbmYvYXJjaC5taworKysrIGIvbnNzL2NvcmVjb25mL2FyY2gubWsKK0BAIC0zNyw3ICszNyw3IEBAIE9TX1RFU1QgOj0gJChzaGVsbCB1bmFtZSAtbSkKKyBpZmVxICgkKE9TX1RFU1QpLGk4NnBjKQorICAgICBPU19SRUxFQVNFIDo9ICQoc2hlbGwgdW5hbWUgLXIpXyQoT1NfVEVTVCkKKyBlbHNlCistICAgIE9TX1JFTEVBU0UgOj0gJChzaGVsbCB1bmFtZSAtcikKKysgICAgT1NfUkVMRUFTRSA/PSAkKHNoZWxsIHVuYW1lIC1yKQorIGVuZGlmCisgCisgIworZGlmZiAtLWdpdCBhL25zcy9saWIvZnJlZWJsL01ha2VmaWxlIGIvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUKK2luZGV4IDBkMjkzZjEuLjY3OGY1MDYgMTAwNjQ0CistLS0gYS9uc3MvbGliL2ZyZWVibC9NYWtlZmlsZQorKysrIGIvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUKK0BAIC0zNiw2ICszNiwxMiBAQCBpZmRlZiBVU0VfNjQKKyAJREVGSU5FUyArPSAtRE5TU19VU0VfNjQKKyBlbmRpZgorIAorK2lmZXEgKCQoT1NfVEVTVCksbWlwcykKKytpZm5kZWYgVVNFXzY0CisrCURFRklORVMgKz0gLUROU19QVFJfTEVfMzIKKytlbmRpZgorK2VuZGlmCisrCisgaWZkZWYgVVNFX0FCSTMyX0ZQVQorIAlERUZJTkVTICs9IC1ETlNTX1VTRV9BQkkzMl9GUFUKKyBlbmRpZgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjFkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK25zczpubyBycGF0aCBmb3IgY3Jvc3MgY29tcGlsaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG5zcy9jbWQvcGxhdGxpYnMubWsgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbnNzL2NtZC9wbGF0bGlicy5tayBiL25zcy9jbWQvcGxhdGxpYnMubWsKKy0tLSBhL25zcy9jbWQvcGxhdGxpYnMubWsKKysrKyBiL25zcy9jbWQvcGxhdGxpYnMubWsKK0BAIC0xOCw5ICsxOCw5IEBAIGVuZGlmCisgCisgaWZlcSAoJChPU19BUkNIKSwgTGludXgpCisgaWZlcSAoJChVU0VfNjQpLCAxKQorLUVYVFJBX1NIQVJFRF9MSUJTICs9IC1XbCwtcnBhdGgsJyQkT1JJR0lOLy4uL2xpYjY0Oi9vcHQvc3VuL3ByaXZhdGUvbGliNjQ6JCRPUklHSU4vLi4vbGliJworKyNFWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI2NDovb3B0L3N1bi9wcml2YXRlL2xpYjY0OiQkT1JJR0lOLy4uL2xpYicKKyBlbHNlCistRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliOi9vcHQvc3VuL3ByaXZhdGUvbGliJworKyNFWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI6L29wdC9zdW4vcHJpdmF0ZS9saWInCisgZW5kaWYKKyBlbmRpZgorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLnBjLmluIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwZjYzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1PRVBSRUZJWAorZXhlY19wcmVmaXg9T0VFWEVDUFJFRklYCitsaWJkaXI9T0VMSUJESVIKK2luY2x1ZGVkaXI9T0VJTkNESVIKKworTmFtZTogTlNTCitEZXNjcmlwdGlvbjogTmV0d29yayBTZWN1cml0eSBTZXJ2aWNlcworVmVyc2lvbjogJU5TU19WRVJTSU9OJQorUmVxdWlyZXM6IG5zcHIgPj0gJU5TUFJfVkVSU0lPTiUKK0xpYnM6IC1sc3NsMyAtbHNtaW1lMyAtbG5zczMgLWxzb2Z0b2tuMyAtbG5zc3V0aWwzCitDZmxhZ3M6IC1JT0VJTkNESVIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL3NpZ25saWJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NGU0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL3NpZ25saWJzLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCisjIHNpZ25saWJzLnNoCisjCisjIChjKTIwMTAgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIHJlZ2VuZXJhdGVzIHRoZSAuY2hrIGZpbGVzIGZvciB0aGUgTlNTIGxpYnJhcmllcyB0aGF0IHJlcXVpcmUgaXQKKyMgc2luY2UgdGhlIG9uZXMgdGhhdCBhcmUgYnVpbHQgaGF2ZSBpbmNvcnJlY3QgY2hlY2tzdW1zIHRoYXQgd2VyZQorIyBjYWxjdWxhdGVkIG9uIHRoZSBob3N0IHdoZXJlIHRoZXkgcmVhbGx5IG5lZWQgdG8gYmUgZG9uZSBvbiB0aGUKKyMgdGFyZ2V0CisKK0NIS19GSUxFUz1gbHMgL2xpYiovKi5jaGsgL3Vzci9saWIqLyouY2hrIDI+L2Rldi9udWxsYAorU0lHTl9CSU5BUlk9YHdoaWNoIHNobGlic2lnbmAKK2ZvciBJIGluICRDSEtfRklMRVMKK2RvCisgICAgICAgRE49YGRpcm5hbWUgJElgCisgICAgICAgQk49YGJhc2VuYW1lICRJIC5jaGtgCisgICAgICAgRk49JEROLyRCTi5zbworICAgICAgICRTSUdOX0JJTkFSWSAtaSAkRk4KK2RvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4xOS4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjE5LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhNGExZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4xOS4yLmJiCkBAIC0wLDAgKzEsMjIzIEBACitTVU1NQVJZID0gIk1vemlsbGEncyBTU0wgYW5kIFRMUyBpbXBsZW1lbnRhdGlvbiIKK0RFU0NSSVBUSU9OID0gIk5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMgKE5TUykgaXMgYSBzZXQgb2YgbGlicmFyaWVzIFwKK2Rlc2lnbmVkIHRvIHN1cHBvcnQgY3Jvc3MtcGxhdGZvcm0gZGV2ZWxvcG1lbnQgb2YgXAorc2VjdXJpdHktZW5hYmxlZCBjbGllbnQgYW5kIHNlcnZlciBhcHBsaWNhdGlvbnMuIFwKK0FwcGxpY2F0aW9ucyBidWlsdCB3aXRoIE5TUyBjYW4gc3VwcG9ydCBTU0wgdjIgYW5kIHYzLCBcCitUTFMsIFBLQ1MgNSwgUEtDUyA3LCBQS0NTIDExLCBQS0NTIDEyLCBTL01JTUUsIFguNTA5IFwKK3YzIGNlcnRpZmljYXRlcywgYW5kIG90aGVyIHNlY3VyaXR5IHN0YW5kYXJkcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1QTC0yLjAgfCAoTVBMLTIuMCAmIEdQTC0yLjArKSB8IChNUEwtMi4wICYgTEdQTC0yLjErKSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbnNzL0NPUFlJTkc7bWQ1PTNiMWU4OGUxYjljMGI1YTRiMjg4MWQ0NmNjZTA2YTE4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRTttZDU9NDkxZjE1OGQwOWQ5NDg0NjZhZmNlODVkNmYxZmUxOGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFLU1QTDttZDU9NWQ0MjVjOGYzMTU3ZGJmMjEyZGIyZWM1M2Q5ZTUxMzIiCisKK1NSQ19VUkkgPSAiXAorICAgIGh0dHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL21vemlsbGEub3JnL3NlY3VyaXR5L25zcy9yZWxlYXNlcy9OU1NfM18xOV8yX1JUTS9zcmMvJHtCUH0udGFyLmd6IFwKKyAgICBmaWxlOi8vbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgZmlsZTovL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3MucGMuaW4gXAorICAgIGZpbGU6Ly9zaWdubGlicy5zaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDJmZmQxZThlOGVmNWY4NTEyZmEwMmQ4Y2E5ZGIzZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMzA2NjYzZThmNjFkODQ0OWFkOGNiY2ZmYWI3NDNhNjA0ZGNkOWY2ZjM0MjMyYzIxMDg0N2M1MWRjZTJjOWFlIgorCitpbmhlcml0IHNpdGVpbmZvCisKK0RFUEVORFMgPSAic3FsaXRlMyBuc3ByIHpsaWIgbnNzLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInNxbGl0ZTMtbmF0aXZlIG5zcHItbmF0aXZlIHpsaWItbmF0aXZlIgorUkRFUEVORFNfJHtQTn0tc21pbWUgPSAicGVybCIKKworVEQgPSAiJHtTfS90ZW50YXRpdmUtZGlzdCIKK1REUyA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0LXN0YWdpbmciCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgIGV4cG9ydCBOU1BSX0lOQ0xVREVfRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfQorICAgIGV4cG9ydCBOU1BSX0xJQl9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9Cit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgZXhwb3J0IExERkxBR1M9IiIKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCisgICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgorICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQorCisgICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQorICAgIGV4cG9ydCBGUkVFQkxfTE9XSEFTSD0xCisKKyAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQorICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCisgICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQorICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQorICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCisKKyAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKKyAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4CisgICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKKworICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjNjQKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1taXBzCisgICAgZWxzZQorICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKKyAgICBmaQorCisgICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV82ND0xCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQorICAgIGZpCisKKyAgICAjIFdlIGNhbiBtb2RpZnkgQ0MgaW4gdGhlIGVudmlyb25tZW50LCBidXQgaWYgd2Ugc2V0IGl0IHZpYSBhbgorICAgICMgYXJndW1lbnQgdG8gbWFrZSwgbnNpbnN0YWxsLCBhIGhvc3QgcHJvZ3JhbSwgd2lsbCBhbHNvIGJ1aWxkIHdpdGggaXQhCisgICAgIworICAgIGV4cG9ydCBDQz0iJHtDQ30gLWciCisgICAgbWFrZSAtQyAuL25zcyBDQ0M9IiR7Q1hYfSAtZyIgXAorICAgICAgICBPU19URVNUPSR7T1NfVEVTVH0KK30KKworCitkb19pbnN0YWxsX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGV4cG9ydCBMREZMQUdTPSIiCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQorICAgIGV4cG9ydCBOQVRJVkVfQ0M9ImdjYyIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKworICAgIGV4cG9ydCBMSUJESVI9JHtsaWJkaXJ9CisgICAgZXhwb3J0IE1PWklMTEFfQ0xJRU5UPTEKKyAgICBleHBvcnQgTlNfVVNFX0dDQz0xCisgICAgZXhwb3J0IE5TU19VU0VfU1lTVEVNX1NRTElURT0xCisgICAgZXhwb3J0IE5TU19FTkFCTEVfRUNDPTEKKworICAgIGV4cG9ydCBPU19SRUxFQVNFPTMuNAorICAgIGV4cG9ydCBPU19UQVJHRVQ9TGludXgKKyAgICBleHBvcnQgT1NfQVJDSD1MaW51eAorCisgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGMKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGM2NAorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHMiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwc2VsIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjRlbCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPW1pcHMKKyAgICBlbHNlCisgICAgICAgIE9TX1RFU1Q9IiR7VEFSR0VUX0FSQ0h9IgorICAgIGZpCisgICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV82ND0xCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQorICAgIGZpCisKKyAgICBtYWtlIC1DIC4vbnNzIFwKKyAgICAgICAgQ0NDPSIke0NYWH0iIFwKKyAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9IFwKKyAgICAgICAgU09VUkNFX0xJQl9ESVI9IiR7VER9LyR7bGliZGlyfSIgXAorICAgICAgICBTT1VSQ0VfQklOX0RJUj0iJHtURH0vJHtiaW5kaXJ9IiBcCisgICAgICAgIGluc3RhbGwKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vCisgICAgZm9yIGZpbGUgaW4gJHtTfS9kaXN0LyouT0JKL2xpYi8qLnNvOyBkbworICAgICAgICBlY2hvICJJbnN0YWxsaW5nIGBiYXNlbmFtZSAkZmlsZWAuLi4iCisgICAgICAgIGNwICRmaWxlICAke0R9LyR7bGliZGlyfS8KKyAgICBkb25lCisKKyAgICBmb3Igc2hhcmVkX2xpYiBpbiAke1REfS8ke2xpYmRpcn0vKi5zby4qOyBkbworICAgICAgICBpZiBbIC1mICRzaGFyZWRfbGliIF07IHRoZW4KKyAgICAgICAgICAgIGNwICRzaGFyZWRfbGliICR7RH0vJHtsaWJkaXJ9CisgICAgICAgICAgICBsbiAtc2YgJChiYXNlbmFtZSAkc2hhcmVkX2xpYikgJHtEfS8ke2xpYmRpcn0vJChiYXNlbmFtZSAkc2hhcmVkX2xpYiAuMW9lKQorICAgICAgICBmaQorICAgIGRvbmUKKyAgICBmb3Igc2hhcmVkX2xpYiBpbiAke1REfS8ke2xpYmRpcn0vKi5zbzsgZG8KKyAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiAtYSAhIC1lICR7RH0vJHtsaWJkaXJ9LyRzaGFyZWRfbGliIF07IHRoZW4KKyAgICAgICAgICAgIGNwICRzaGFyZWRfbGliICR7RH0vJHtsaWJkaXJ9CisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMworICAgIGluc3RhbGwgLW0gNjQ0IC10ICR7RH0vJHtpbmNsdWRlZGlyfS9uc3MzIGRpc3QvcHVibGljL25zcy8qCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisgICAgZm9yIGJpbmFyeSBpbiAke1REfS8ke2JpbmRpcn0vKjsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgLXQgJHtEfS8ke2JpbmRpcn0gJGJpbmFyeQorICAgIGRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgIyBDcmVhdGUgZW1wdHkgLmNoayBmaWxlcyBmb3IgdGhlIE5TUyBsaWJyYXJpZXMgYXQgYnVpbGQgdGltZS4gVGhleSBjb3VsZAorICAgICMgYmUgcmVnZW5lcmF0ZWQgYXQgdGFyZ2V0J3MgYm9vdCB0aW1lLgorICAgIGZvciBmaWxlIGluIGxpYnNvZnRva24zLmNoayBsaWJmcmVlYmwzLmNoayBsaWJuc3NkYm0zLmNoazsgZG8KKyAgICAgICAgdG91Y2ggJHtEfS8ke2xpYmRpcn0vJGZpbGUKKyAgICAgICAgY2htb2QgNzU1ICR7RH0vJHtsaWJkaXJ9LyRmaWxlCisgICAgZG9uZQorICAgIGluc3RhbGwgLUQgLW0gNzU1ICR7V09SS0RJUn0vc2lnbmxpYnMuc2ggJHtEfS8ke2JpbmRpcn0vc2lnbmxpYnMuc2gKKworICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCisgICAgc2VkICdzLyVOU1NfVkVSU0lPTiUvJHtQVn0vJyAke1dPUktESVJ9L25zcy5wYy5pbiB8IHNlZCAncy8lTlNQUl9WRVJTSU9OJS80LjkuMi8nID4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VQUkVGSVg6JHtwcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VFWEVDUFJFRklYOiR7ZXhlY19wcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VMSUJESVI6JHtsaWJkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VJTkNESVI6JHtpbmNsdWRlZGlyfS9uc3MzOmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAjIENyZWF0ZSBhIGJsYW5rIGNlcnRpZmljYXRlCisgICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLworICAgIHRvdWNoIC4vZW1wdHlfcGFzc3dvcmQKKyAgICBjZXJ0dXRpbCAtTiAtZCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvIC1mIC4vZW1wdHlfcGFzc3dvcmQKKyAgICBjaG1vZCA2NDQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyouZGIKKyAgICBybSAuL2VtcHR5X3Bhc3N3b3JkCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICAgICAgZm9yIEkgaW4gJEQvJHtsaWJkaXJ9L2xpYiouY2hrOyBkbworICAgICAgICAgICAgRE49YGRpcm5hbWUgJElgCisgICAgICAgICAgICBCTj1gYmFzZW5hbWUgJEkgLmNoa2AKKyAgICAgICAgICAgIEZOPSRETi8kQk4uc28KKyAgICAgICAgICAgIHNobGlic2lnbiAtaSAkRk4KKwkgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJICAgICAgIGV4aXQgMQorCSAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGV4aXQgMAorICAgIGZpCisgICAgc2lnbmxpYnMuc2gKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXNtaW1lIgorRklMRVNfJHtQTn0tc21pbWUgPSAiXAorICAgICR7YmluZGlyfS9zbWltZSBcCisiCitGSUxFU18ke1BOfSA9ICJcCisgICAgJHtzeXNjb25mZGlyfSBcCisgICAgJHtiaW5kaXJ9IFwKKyAgICAke2xpYmRpcn0vbGliKi5jaGsgXAorICAgICR7bGliZGlyfS9saWIqLnNvIFwKKyAgICAiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7bGliZGlyfS9uc3MgXAorICAgICR7bGliZGlyfS9wa2djb25maWcvKiBcCisgICAgJHtpbmNsdWRlZGlyfS8qIFwKKyAgICAiCisjIEZJTEVTXyR7UE59LWRiZyBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDk2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXMgYSB3YXkgdG8gbG9hZCBhbmQgZW51bWVyYXRlIFBLQ1MjMTEgbW9kdWxlcyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDI5MzM4ODdmNjA5ODA3ZmJiNTdhYTQyMzdkMTRhNTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK0RFUEVORFMgPSAibGlidGFzbjEgbGliZmZpIgorCitTUkNfVVJJID0gImh0dHA6Ly9wMTEtZ2x1ZS5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjRlOWJlYTExMDY2MjhmZmI4MjBiZGFkMjRhODE5ZmFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmM2EzMzlmY2Y2YWEwZTMyYzhjMjNmNzliYTcxOTFlNTczMTJiZTJiZGE4YjI0ZTZkMTIxYzI2NzA1MzlhNWMiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKyAgICAke2xpYmRpcn0vcDExLWtpdC1wcm94eS5zbyBcCisgICAgJHtsaWJkaXJ9L3BrY3MxMS9wMTEta2l0LXRydXN0LnNvIFwKKyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BrY3MxMS8qLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGtjczExLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnlfMC45LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzNmNhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBzaW1wbGUgUElOIG9yIHBhc3NwaHJhc2UgZW50cnkgZGlhbG9ncyIKK0RFU0NSSVBUSU9OID0gIlwKKwlQaW5lbnRyeSBpcyBhIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIFBJTiBvciBwYXNzcGhyYXNlIGVudHJ5IGRpYWxvZ3Mgd2hpY2ggXAorCXV0aWxpemUgdGhlIEFzc3VhbiBwcm90b2NvbCBhcyBkZXNjcmliZWQgYnkgdGhlIGFlZ3lwdGVuIHByb2plY3Q7IHNlZSBcCisJaHR0cDovL3d3dy5nbnVwZy5vcmcvYWVneXB0ZW4vIGZvciBkZXRhaWxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9waW5lbnRyeS9pbmRleC5lbi5odG1sIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiYmQ3OTRlMmEwYTI4OWI5ZGZjYzlmNTEzZDE5OTZlIgorCitpbmhlcml0IGF1dG90b29scworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImY1MWQ0NTRmOTIxMTExYjUxNTZhMjI5MWNiZjcwMjc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkOGJjMTU5MmNlYjIyYmI0OTJiMDdjYjI5YjFiMTQwYmI4ODJjODU5ZTY1MDNiOTc0MjU0YzBhNGI0MTM0ZDEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcnBhdGggXAorCQkgICAgICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm5jdXJzZXMgbGliY2FwIgorCitQQUNLQUdFQ09ORklHW25jdXJzZXNdID0gIi0tZW5hYmxlLW5jdXJzZXMgIC0td2l0aC1uY3Vyc2VzLWluY2x1ZGUtZGlyPSR7U1RBR0lOR19JTkNESVJ9LCAtLWRpc2FibGUtbmN1cnNlcywgbmN1cnNlcyIKK1BBQ0tBR0VDT05GSUdbbGliY2FwXSA9ICItLXdpdGgtbGliY2FwLCAtLXdpdGhvdXQtbGliY2FwLCBsaWJjYXAiCitQQUNLQUdFQ09ORklHW3F0NF0gPSAiLS1lbmFibGUtcGluZW50cnktcXQ0LCAtLWRpc2FibGUtcGluZW50cnktcXQ0LCBxdDQteDExIgorUEFDS0FHRUNPTkZJR1txdDRfY2xpcGJvYXJkXSA9ICItLWVuYWJsZS1waW5lbnRyeS1xdDQtY2xpcGJvYXJkIC0tZW5hYmxlLXBpbmVudHJ5LXF0NCwgLS1kaXNhYmxlLXBpbmVudHJ5LXF0NC1jbGlwYm9hcmQsIHF0NC14MTEiCitQQUNLQUdFQ09ORklHW2d0azJdID0gIi0tZW5hYmxlLXBpbmVudHJ5LWd0azIsIC0tZGlzYWJsZS1waW5lbnRyeS1ndGsyLCBndGsrIGdsaWItMi4wIgorCisjVG8gdXNlIGxpYnNlY3JldCwgYWRkIG1ldGEtZ25vbWUKK1BBQ0tBR0VDT05GSUdbc2VjcmV0XSA9ICItLWVuYWJsZS1saWJzZWNyZXQsIC0tZGlzYWJsZS1saWJzZWNyZXQsIGxpYnNlY3JldCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9kaXNhYmxlX3Rlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L2Rpc2FibGVfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2Y2Y2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9kaXNhYmxlX3Rlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1VzZSBvZiAkKHRvcF9zcmNkaXIpIGluIFRFU1RTIGlzIGFuIGVycm9yIHdoaWNoIGNhdXNlcworYXV0b21ha2UtMS4xMyB0byBhYm9ydC4gSnVzdCByZW1vdmUgdGVzdHMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBwb3B0LTEuMTYvTWFrZWZpbGUuYW0gcG9wdC0xLjE2L01ha2VmaWxlLmFtCistLS0gcG9wdC0xLjE2L01ha2VmaWxlLmFtCTIwMTAtMDUtMDQgMjM6NTU6NTQuMDAwMDAwMDAwICswMzAwCisrKysgcG9wdC0xLjE2L01ha2VmaWxlLmFtCTIwMTMtMDEtMDIgMTM6MzQ6MjkuNTQwMzYxMzkxICswMjAwCitAQCAtMzQsMTEgKzM0LDYgQEAKKworIG5vaW5zdF9TQ1JJUFRTID0gdGVzdGl0LnNoCisKKy1URVNUU19FTlZJUk9OTUVOVCA9IFwKKy10ZXN0MT0iJCh0b3BfYnVpbGRkaXIpL3Rlc3QxIgorLQorLVRFU1RTID0gJCh0b3Bfc3JjZGlyKS90ZXN0aXQuc2gKKy0KKyBpbmNsdWRlX0hFQURFUlMgPSBwb3B0LmgKKworIHVzcmxpYmRpciA9ICQobGliZGlyKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BrZ2NvbmZpZ19maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcGtnY29uZmlnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmRkYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BrZ2NvbmZpZ19maXgucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luc3RhbGwgdGhlIHBrZ2NvbmZpZyBmaWxlIGludG8gbGliZGlyLgorCistLS0gcG9wdC0xLjE2Lm9yaWcvTWFrZWZpbGUuYW0JMjAxMi0wNC0yNiAxMzo0Mjo1NC4wMjExMzk4MTMgKzA4MDAKKysrKyBwb3B0LTEuMTYvTWFrZWZpbGUuYW0JMjAxMi0wNC0yNiAxMzozNjowMy41NTIwOTY5MTIgKzA4MDAKK0BAIC00Nyw3ICs0Nyw3IEBACisgbGlicG9wdF9sYV9TT1VSQ0VTID0gcG9wdC5jIHBvcHRwYXJzZS5jIHBvcHRjb25maWcuYyBwb3B0aGVscC5jIHBvcHRpbnQuYworIGxpYnBvcHRfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgQExUTElCSU5UTEAgQExUTElCSUNPTlZACisgCistcGtnY29uZmlnZGlyID0gJChwcmVmaXgpL2xpYi9wa2djb25maWcKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBwb3B0LnBjCisgCisgaWYgSEFWRV9MRF9WRVJTSU9OX1NDUklQVApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYmNhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgZXJyb3Igd2l0aCBhdXRvbWFrZSAxLjEyOgorCit8IGNvbmZpZ3VyZS5hYzo0OTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMgorCitJbmRleDogcG9wdC0xLjE2L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBvcHQtMS4xNi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHBvcHQtMS4xNi9jb25maWd1cmUuYWMKK0BAIC00Niw3ICs0Niw2IEBAIEFDX0dDQ19UUkFESVRJT05BTAorIEFDX1NZU19MQVJHRUZJTEUKKyAKKyBBQ19JU0NfUE9TSVgKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBBQ19DSEVDS19IRUFERVJTKGZsb2F0LmggZm5tYXRjaC5oIGdsb2IuaCBsYW5naW5mby5oIGxpYmludGwuaCBtY2hlY2suaCB1bmlzdGQuaCkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0XzEuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxM2E4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgcGFyc2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucyIKK0hPTUVQQUdFID0gImh0dHA6Ly9ycG01Lm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2IwNjEzYzMwYWYyYTgyNDliOGRjYzY3ZDNlZGIwNmQiCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vcnBtNS5vcmcvZmlsZXMvcG9wdC9wb3B0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjM3NDNiZWVmYTNkZDYyNDdhNzNmOGY3YTMyYzE0YzMzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3MjhlZDI5NmZlOWYwNjlhMGUwMDUwMDNjM2Q2YjJkZGUzZDljYWQ0NTM0MjJhMTBkNjU1ODYxNmQzMDRjYzgiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lciBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9maWxlcy9wdGVzdC1ydW5uZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxOGYxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9maWxlcy9wdGVzdC1ydW5uZXIKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCitBTllGQUlMRUQ9bm8KK2VjaG8gIlNUQVJUOiAkMCIKKworZm9yIGxpYmRpciBpbiAvdXNyL2xpYioKK2RvCisKKyAgICBbICEgLWQgIiRsaWJkaXIiIF0gJiYgY29udGludWUKKworICAgIGZvciB4IGluIGBscyAtZCAkbGliZGlyLyovcHRlc3QgMj4vZGV2L251bGxgCisgICAgZG8KKyAgICAgICAgWyAhIC1mICR4L3J1bi1wdGVzdCBdICYmIGNvbnRpbnVlCisgICAgICAgIFsgLWggYGRpcm5hbWUgJHhgIF0gJiYgY29udGludWUKKworICAgICAgICBkYXRlICIrJVktJW0tJWRUJUg6JU0iCisgICAgICAgIGVjaG8gIkJFR0lOOiAkeCIKKyAgICAgICAgY2QgIiR4IgorICAgICAgICAuL3J1bi1wdGVzdCB8fCBBTllGQUlMRUQ9eWVzCisgICAgICAgIGVjaG8gIkVORDogJHgiCisgICAgICAgIGRhdGUgIislWS0lbS0lZFQlSDolTSIKKyAgICBkb25lCitkb25lCitlY2hvICJTVE9QOiAkMCIKK2lmIFsgIiRBTllGQUlMRUQiID0gInllcyIgIF07IHRoZW4KKyAgICBleGl0IDEKK2ZpCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxYjBhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMS4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgc2hlbGwgc2NyaXB0IHRvIHJ1biBhbGwgaW5zdGFsbGVkIHB0ZXN0cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBwdGVzdC1ydW5uZXIgcGFja2FnZSBpbnN0YWxscyBhIHB0ZXN0LXJ1bm5lciBcCitzaGVsbCBzY3JpcHQgd2hpY2ggbG9vcHMgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIHB0ZXN0IHRlc3Qgc3VpdGVzIGFuZCBcCitydW5zIHRoZW0gaW4gc2VxdWVuY2UuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9QdGVzdCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9wdGVzdC1ydW5uZXIiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B0ZXN0LXJ1bm5lciAke0R9JHtiaW5kaXJ9Cit9CisKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX2J1aWxkW25vZXhlY10gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhMjhhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IHRvIHB0aC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00Nyw2ICs0Nyw5IEBAIGRhdGFkaXIgICAgID0gQGRhdGFkaXJACisgCisgREVTVERJUiAgICAgPQorIAorK3BrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IHB0aC5wYworKworICMjCisgIyMgIF9fX18gVE9PTCBERUZJTklUSU9OUyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIyMKK0BAIC0yMTYsNyArMjE5LDcgQEAgdGVzdF9wdGhyZWFkOiB0ZXN0X3B0aHJlYWQubyB0ZXN0X2NvbW1vbi5vIGxpYnB0aHJlYWQubGEKKyAKKyAjICAgaW5zdGFsbCB0aGUgcGFja2FnZQorIGluc3RhbGw6IGFsbC1mb3ItaW5zdGFsbAorLQlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycyBpbnN0YWxsLXB0aCBASU5TVEFMTF9QVEhSRUFEQAorKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycyBpbnN0YWxsLXB0aCBASU5TVEFMTF9QVEhSRUFEQCBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKyAJQHRvdWNoIC5kb25lLWluc3RhbGwgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJQCQoTUFLRSkgJChNS0ZMQUdTKSB3aGF0LW5leHQKKyBpbnN0YWxsLWRpcnM6CitAQCAtMjI3LDYgKzIzMCw3IEBAIGluc3RhbGwtZGlyczoKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbjMKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChkYXRhZGlyKS9hY2xvY2FsCisrCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQocGtnY29uZmlnZGlyKQorIGluc3RhbGwtcHRoOgorIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA3NTUgcHRoLWNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpL3B0aC1jb25maWcKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUylwdGgtY29uZmlnLjEgJChERVNURElSKSQobWFuZGlyKS9tYW4xL3B0aC1jb25maWcuMQorQEAgLTI0MiwxMiArMjQ2LDE2IEBAIGluc3RhbGwtcHRocmVhZDoKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUylwdGhyZWFkLjMgJChERVNURElSKSQobWFuZGlyKS9tYW4zL3B0aHJlYWQuMworIAlAdW1hc2sgMDIyOyAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgbGlicHRocmVhZC5sYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnB0aHJlYWQubGEKKytpbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6ICQocGtnY29uZmlnX0RBVEEpCisrCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKHBrZ2NvbmZpZ19EQVRBKSAkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQocGtnY29uZmlnX0RBVEEpCisgCisgIyAgIHVuaW5zdGFsbCB0aGUgcGFja2FnZQorIHVuaW5zdGFsbDoKKy0JQCQoTUFLRSkgJChNS0ZMQUdTKSBAVU5JTlNUQUxMX1BUSFJFQURAIHVuaW5zdGFsbC1wdGggdW5pbnN0YWxsLWRpcnMKKysJQCQoTUFLRSkgJChNS0ZMQUdTKSB1bmluc3RhbGwtcGtnY29uZmlnREFUQSBAVU5JTlNUQUxMX1BUSFJFQURAIHVuaW5zdGFsbC1wdGggdW5pbnN0YWxsLWRpcnMKKyAJQHRvdWNoIC5kb25lLXVuaW5zdGFsbCA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAlAJChNQUtFKSAkKE1LRkxBR1MpIHdoYXQtbmV4dAorK3VuaW5zdGFsbC1wa2djb25maWdEQVRBOgorKwkkKFJNKSAkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQocGtnY29uZmlnX0RBVEEpCisgdW5pbnN0YWxsLXB0aHJlYWQ6CisgCSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvcHRocmVhZC1jb25maWcKKyAJJChSTSkgJChERVNURElSKSQobWFuZGlyKS9tYW4xL3B0aHJlYWQtY29uZmlnLjEKK0BAIC0yNzEsNiArMjc5LDcgQEAgdW5pbnN0YWxsLWRpcnM6CisgCS0kKFJNRElSKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKSA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAktJChSTURJUikgJChERVNURElSKSQoYmluZGlyKSA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAktJChSTURJUikgJChERVNURElSKSQocHJlZml4KSA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorKwktJChSTURJUikgJChERVNURElSKSQocGtnY29uZmlnZGlyKSA+IC9kZXYvbnVsbCAyPiYxIHx8JChUUlVFKQorIAorICMgICBzdHJpcCBkb3duIHRoZSBzb3VyY2UgdHJlZSB0byBpdHMgbWluaW11bQorIHN0cmlwdGVhc2U6CitJbmRleDogY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NTYsNiArNjU2LDEzIEBAIHB0aF9hY21hYy5oIGRubAorIGNobW9kICtyeCBwdGhyZWFkLWNvbmZpZworIGNobW9kICtyeCBwdGgtY29uZmlnCisgKWRubAorKworK1BUSF9WRVJTSU9OPWBlY2hvICRQVEhfVkVSU0lPTl9TVFIgfCBjdXQgLWQnICcgLWYxYAorK0FDX1NVQlNUKFBUSF9WRVJTSU9OKQorKworK0FDX0NPTkZJR19GSUxFUyhbcHRoLnBjXSkKKytBQ19PVVRQVVQKKysKKyBpZiB0ZXN0ICIuJGVuYWJsZV9wdGhyZWFkIiA9IC5ubzsgdGhlbgorICAgICBybSAtZiBwdGhyZWFkLWNvbmZpZworICAgICBybSAtZiBwdGhyZWFkLmgKK0luZGV4OiBwdGgucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYi9wdGgucGMuaW4KK0BAIC0wLDAgKzEsMTYgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKytiaW5kaXI9QGJpbmRpckAKKyttYW5kaXI9QG1hbmRpckAKKytkYXRhZGlyPUBkYXRhZGlyQAorK2FjZGlyPUBkYXRhZGlyQC9hY2xvY2FsCisrCisrTmFtZTogcHRoCisrRGVzY3JpcHRpb246IEdOVSBQb3J0YWJsZSBUaHJlYWRzCisrUmVxdWlyZXM6CisrVmVyc2lvbjogQFBUSF9WRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1scHRoCisrTGlicy5wcml2YXRlOiAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLS0gCisxLjcuNS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtZml4LXBhcmFsbGVsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlZGFmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gZGYwNmI4MTcwNzQ1ZWFjMzQ3YWNiOTVmOWYzNzRmMjU3NjIxMjU0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyOSBKYW4gMjAxNSAxODoxMTowMCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5pbjogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKKyogZG9fY29tcGlsZQorIHB0aF91Y3R4LmM6MzE6MTk6IGZhdGFsIGVycm9yOiBwdGhfcC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgI2luY2x1ZGUgInB0aF9wLmgiCisgICAgICAgICAgICAgICAgICAgXgorY29tcGlsYXRpb24gdGVybWluYXRlZC4KK21ha2U6ICoqKiBbcHRoX3VjdHgubG9dIEVycm9yIDEKKworKiBkb19pbnN0YWxsOgorICBjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgYGltYWdlL3Vzci9saWIvcGtnY29uZmlnLyNJTlNUQDE1NTA3Iyc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBkZTAzOTBkLi4zODFhMGVlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjE5LDcgKzIxOSw4IEBAIHRlc3RfcHRocmVhZDogdGVzdF9wdGhyZWFkLm8gdGVzdF9jb21tb24ubyBsaWJwdGhyZWFkLmxhCisgCisgIyAgIGluc3RhbGwgdGhlIHBhY2thZ2UKKyBpbnN0YWxsOiBhbGwtZm9yLWluc3RhbGwKKy0JQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAgaW5zdGFsbC1wa2djb25maWdEQVRBCisrCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1kaXJzCisrCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAgaW5zdGFsbC1wa2djb25maWdEQVRBCisgCUB0b3VjaCAuZG9uZS1pbnN0YWxsID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCUAkKE1BS0UpICQoTUtGTEFHUykgd2hhdC1uZXh0CisgaW5zdGFsbC1kaXJzOgorQEAgLTQzMiw3ICs0MzMsNyBAQCBUQUdTOgorICMjICAoQVVUT01BVElDQUxMWSBVUERBVEVEIC0gRE8gTk9UIEVESVQpCisgIyMKKyAKKy0kKExPQkpTKTogTWFrZWZpbGUKKyskKExPQkpTKTogTWFrZWZpbGUgcHRoX3AuaAorIAorICMgRE8gTk9UIFJFTU9WRQorIHB0aF9hdHRyLmxvOiBwdGhfYXR0ci5jIHB0aF9wLmggcHRoX3ZlcnMuYyBwdGguaCBwdGhfYWNkZWYuaCBwdGhfYWNtYWMuaAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvcHRoXzIuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzc3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvcHRoXzIuMC43LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiR05VIFBvcnRhYmxlIFRocmVhZHMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wdGgvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT0xMjtlbmRsaW5lPTE1O21kNT1hNDhhZjExNGE4MGMyMjJjYWZkMzdmMjQzNzBhNzdiMSIKK1BSID0gInIzIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCByZQorICAgIHVjX29zID0gKHJlLm1hdGNoKCcuKnVjbGliYyonLCBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkpICE9IE5vbmUpCisgICAgaWYgdWNfb3M6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCB1Q2xpYmMiKQorfQorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcHRoL3B0aC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vcHRoLWZpeC1wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWNiNGEyNTMzMWE0YzRkYjg2NmEzMWNiZTUwN2M3OTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzIzNTM2NjBjNWEyY2FhZmQ2MDFiMjBlMTJlNzVkODY1ZmQ4OGY2Y2YxYTA4OGIzMDZhMzk2M2YwYmM3NzIzMiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wdGgtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkoIGNkICR7U307IGdudS1jb25maWdpemUgKQorCSggY2QgJHtTfTsgYXV0b2NvbmYgKQorCW9lX3J1bmNvbmYKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDczZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvZW52LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKKydzY29ucycgY2xlYW5zIHRoZSBlbnZpcm9ubWVudCB3aGljaCBicmVha3MgY2NhY2hlIGJ1aWxkcyBiZWNhdXNlCitDQ0FDSEVESVIgY2FuIHBvaW50IHRvIGFuIHVuZXhwZWN0ZWQgbG9jYXRpb246CisKK3wgY2NhY2hlIGFybS1saW51eC1nbnVlYWJpLWdjYyAuLi4gY29udGV4dC5jCit8IGNjYWNoZTogZmFpbGVkIHRvIGNyZWF0ZSAuLi4vc2VyZi8xLjMuNi1yMC8uaG9tZS8uY2NhY2hlIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQorCitJc3N1ZSBpcyBkZXNjcmliZWQgaW4KKworICBodHRwOi8vd3d3LnNjb25zLm9yZy93aWtpL0ltcG9ydGluZ0Vudmlyb25tZW50U2V0dGluZ3MKKworYW5kIGJlY2F1c2UgJ2JpdGJha2UnIGNsZWFucyBlbnZpcm9ubWVudCB3ZSBjYW4gcGFzcyBpdCBjb21wbGV0ZWx5CitpbnN0ZWFkIG9mIHRyeWluZyB0byBlbnVtZXJhdGUgbmVlZGVkIGVudi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKKworSW5kZXg6IHNlcmYtMS4zLjYvU0NvbnN0cnVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlcmYtMS4zLjYub3JpZy9TQ29uc3RydWN0CisrKysgc2VyZi0xLjMuNi9TQ29uc3RydWN0CitAQCAtMTQ5LDYgKzE0OSw3IEBAIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorIGVudiA9IEVudmlyb25tZW50KHZhcmlhYmxlcz1vcHRzLAorICAgICAgICAgICAgICAgICAgIHRvb2xzPSgnZGVmYXVsdCcsICd0ZXh0ZmlsZScsKSwKKyAgICAgICAgICAgICAgICAgICBDUFBQQVRIPVsnLicsIF0sCisrICAgICAgICAgICAgICAgICAgRU5WID0gb3MuZW52aXJvbiwKKyAgICAgICAgICAgICAgICAgICApCisKKyBlbnYuQXBwZW5kKEJVSUxERVJTID0gewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL25vcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvbm9ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODBmNWQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL25vcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVGhlIFJQQVRIIGhhbmRsaW5nIGluIHNlcmYgaXMgYWxsIHdyb25nIGZvciB1cyBhbmQgd2UgZG9uJ3QgbmVlZCBpdCAKK2FueXdheSBzbyBoYWNrIGFyb3VuZCBpdCBieSByZW1vdmluZyB0aGlzIGZvciBub3cuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitSUCAyMDE0LzcvMTcKKworSW5kZXg6IHNlcmYtMS4zLjYvU0NvbnN0cnVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlcmYtMS4zLjYub3JpZy9TQ29uc3RydWN0CTIwMTQtMDctMTcgMTk6NTc6NTcuNzI0Mzg5MTUwICswMDAwCisrKysgc2VyZi0xLjMuNi9TQ29uc3RydWN0CTIwMTQtMDctMTcgMjA6MDQ6MjEuNzg0Mzk5NjE2ICswMDAwCitAQCAtMjE4LDggKzIxOCw3IEBACisgZWxzZToKKyAgIExJQk5BTUVTVEFUSUMgPSAnc2VyZi0ke01BSk9SfScKKyAKKy1lbnYuQXBwZW5kKFJQQVRIPWxpYmRpciwKKy0gICAgICAgICAgIFBEQj0nJHtUQVJHRVQuZmlsZWJhc2V9LnBkYicpCisrZW52LkFwcGVuZChQREI9JyR7VEFSR0VULmZpbGViYXNlfS5wZGInKQorIAorICNmb3IgaSBpbiBlbnY6CisgIyAgICBwcmludChzdHIoZW52W2ldKSkKK0BAIC0zNzEsMTIgKzM3MCw2IEBACisgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICBlbnYuQXBwZW5kKENQUERFRklORVM9WydTRVJGX0hBVkVfU1NQSSddKQorIAorLSMgT24gc29tZSBzeXN0ZW1zLCB0aGUgLVIgdmFsdWVzIHRoYXQgQVBSIGRlc2NyaWJlcyBuZXZlciBtYWtlIGl0IGludG8gYWN0dWFsCistIyBSUEFUSCBmbGFncy4gV2UnbGwgbWFudWFsbHkgbWFwIGFsbCBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGludG8gbmV3CistIyBmbGFncyB0byBzZXQgUlBBVEggdmFsdWVzLgorLWZvciBkIGluIGVudlsnTElCUEFUSCddOgorLSAgZW52LkFwcGVuZChSUEFUSD0nOicrZCkKKy0KKyAjIFNldCB1cCB0aGUgY29uc3RydWN0aW9uIG9mIHNlcmYtKi5wYworIHBrZ2NvbmZpZyA9IGVudi5UZXh0ZmlsZSgnc2VyZi0lZC5wYycgJSAoTUFKT1IsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LkZpbGUoJ2J1aWxkL3NlcmYucGMuaW4nKSwKK0BAIC00NDYsNyArNDM5LDYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVj17J1BBVEgnIDogb3MuZW52aXJvblsnUEFUSCddfSkpCisgCisgIyBGaW5kIHRoZSAoZHluYW1pYykgbGlicmFyeSBpbiB0aGlzIGRpcmVjdG9yeQorLXRlbnYuUmVwbGFjZShSUEFUSD10aGlzZGlyKQorIHRlbnYuUHJlcGVuZChMSUJTPVtMSUJOQU1FU1RBVElDLCBdLAorICAgICAgICAgICAgICBMSUJQQVRIPVt0aGlzZGlyLCBdKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDU5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJIaWdoLVBlcmZvcm1hbmNlIEFzeW5jaHJvbm91cyBIVFRQIENsaWVudCBMaWJyYXJ5IgorU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vcy8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW52LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzEzYmVhZjA1ZDdmMzMyOWRlMTIxZTIxOGUyZmNiOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzcxMzRjZDUwMTA2NjRjYTAyMzU4NWJjZTUwOTc4YmQ0MDA1OTA2ZWQyODBmZjg4OWY1OTFmODZkZjdjNTllNCIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ODZkM2YzYTk1YzMyNGM5NDc5YmQ4OTg2OTY4ZjQzMjciCisKK0RFUEVORFMgPSAicHl0aG9uLXNjb25zLW5hdGl2ZSBvcGVuc3NsIGFwciBhcHItdXRpbCB1dGlsLWxpbnV4IGV4cGF0IgorCitkb19jb21waWxlKCkgeworCSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyAke1BBUkFMTEVMX01BS0V9IFBSRUZJWD0ke3ByZWZpeH0gXAorCQlDQz0iJHtDQ30iIFwKKwkJQVBSPWB3aGljaCBhcHItMS1jb25maWdgIEFQVT1gd2hpY2ggYXB1LTEtY29uZmlnYCBcCisJCUNGTEFHUz0iJHtDRkxBR1N9IiBMSU5LRkxBR1M9IiR7TERGTEFHU30iIFwKKwkJT1BFTlNTTD0iJHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9IgorfQorCitkb19pbnN0YWxsKCkgeworCSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyBQUkVGSVg9JHtEfSR7cHJlZml4fSBMSUJESVI9JHtEfSR7bGliZGlyfSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZGI2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby5pbmMKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJTaGFyZWQgTUlNRSB0eXBlIGRhdGFiYXNlIGFuZCBzcGVjaWZpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3NoYXJlZC1taW1lLWluZm8iCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gImxpYnhtbDIgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wIHNoYXJlZC1taW1lLWluZm8tbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL35oYWRlc3Mvc2hhcmVkLW1pbWUtaW5mby0ke1BWfS50YXIueHoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdXBkYXRlLW1pbWVkYiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbWltZSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9wa2djb25maWcvc2hhcmVkLW1pbWUtaW5mby5wYyIKKworIyBmcmVlZGVza3RvcC5vcmcueG1sIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB1cGRhdGluZyB0aGUgbWltZSBkYXRhYmFzZSwKKyMgcGFja2FnZSBpdCBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAic2hhcmVkLW1pbWUtaW5mby1kYXRhIgorRklMRVNfc2hhcmVkLW1pbWUtaW5mby1kYXRhID0gIiR7ZGF0YWRpcn0vbWltZS9wYWNrYWdlcy9mcmVlZGVza3RvcC5vcmcueG1sIgorUkRFUEVORFNfc2hhcmVkLW1pbWUtaW5mby1kYXRhID0gInNoYXJlZC1taW1lLWluZm8iCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwl1cGRhdGUtbWltZS1kYXRhYmFzZSAke0R9JHtkYXRhZGlyfS9taW1lCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzlmMWVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2ZpeCBzaGFyZWQtbWltZS1pbmZvIGJ1aWxkIHJhY2UgY29uZGl0aW9uCisKK1RoZSBkZWZpbml0aW9uIG9mIGluc3RhbGwtZGF0YS1ob29rIGluIE1ha2VmaWxlLmFtIGxlYWRzCit0byBtdWx0aXBsZSwgb3ZlcmxhcHBpbmcsIGV4ZWN1dGlvbnMgb2YgaW5zdGFsbC1iaW5QUk9HUkFNUwordGFyZ2V0LiAgV2UgbW9kaWZ5IHRoZSBkZWZpbml0aW9uIHRvIGF2b2lkIHRoYXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTQ0LDcgKzQ0LDkgQEAgJChwa2djb25maWdfREFUQSk6IGNvbmZpZy5zdGF0dXMKKyBASU5UTFRPT0xfWE1MX1JVTEVACisgQElOVExUT09MX0RFU0tUT1BfUlVMRUAKKyAKKy1pbnN0YWxsLWRhdGEtaG9vazogaW5zdGFsbC1iaW5QUk9HUkFNUworKyMgZG8gTk9UIG1ha2UgdGhpcyBkZXBlbmRlbnQgb24gYW55dGhpbmchCisrIworK2luc3RhbGwtZGF0YS1ob29rOgorIGlmIEVOQUJMRV9VUERBVEVfTUlNRURCCisgCSQoREVTVERJUikiJChiaW5kaXIpL3VwZGF0ZS1taW1lLWRhdGFiYXNlIiAtViAiJChERVNURElSKSQoZGF0YWRpcikvbWltZSIKKyBlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9wYXJhbGxlbG1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjNGQwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9wYXJhbGxlbG1ha2UucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVGhlIE1ha2VmaWxlIHVzZWQgYnkgc2hhcmVkLW1pbWUtaW5mbyBpcyBvbmUgYmlnIHJhY2Ugd2l0aCB0aGUgU1VCRElSUyAKK29wdGlvbiBhbmQgdGhlIGRlcGVuZGVuY3kgc3BlY2lmaWNhbGx5IGNhbGxpbmcgbWFrZSBhbGwgY29tYmluaW5nIHRvCitjcmVhdGUgbXVsdGlwbGUgbWFrZSBpbnN0YW5jZXMgYWxsIG9mIHdoaWNoIG1heSB0cnkgYW5kIGJ1aWxkIHRhcmdldHMKK2xpa2UgdXBkYXRlLW1pbWUtZGF0YWJhc2UuCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aG9zZSBvcHRpb25zIG1lYW5pbmcgbWFrZSBjYW4gY29ycmVjdGx5IGlkZW50aWZ5CitkZXBlbmRlbmNpZXMgYW5kIHN0b3AgaXRzZWxmIHJhY2luZyBpdHNlbGYuCisKK1JQIDEwLzEwLzIwMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBzaGFyZWQtbWltZS1pbmZvLTEuMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNoYXJlZC1taW1lLWluZm8tMS4wLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBzaGFyZWQtbWltZS1pbmZvLTEuMC9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSwzIEBACistU1VCRElSUz0uIHBvCistCisgQU1fQ1BQRkxBR1MgPSAkKEFMTF9DRkxBR1MpCisgCisgcGFja2FnZXNkaXIgPSAkKGRhdGFkaXIpL21pbWUvcGFja2FnZXMKK0BAIC03Miw4ICs3MCw3IEBAIHVuaW5zdGFsbC1ob29rOgorIAorIGFsbDogJChkZWZhdWx0bWFrZWRlcHMpCisgCistY3JlYXRlLXBvdDoKKy0JJChBTV9WX0dFTikgJChNQUtFKSAtQyBwbyBzaGFyZWQtbWltZS1pbmZvLnBvdAorK2NyZWF0ZS1wb3Q6IHBvCisgCisgY2hlY2s6IGNyZWF0ZS1wb3QgZnJlZWRlc2t0b3Aub3JnLnhtbCB1cGRhdGUtbWltZS1kYXRhYmFzZSBjaGVjay10cmFuc2xhdGlvbnMKKyAJaWYgdGVzdCAtZSAkKHRvcF9idWlsZGRpcikvZnJlZWRlc2t0b3Aub3JnLnhtbDsgdGhlbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvXzEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRmZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvXzEuNC5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgc2hhcmVkLW1pbWUtaW5mby5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL3BhcmFsbGVsbWFrZS5wYXRjaCBcCisJICAgIGZpbGU6Ly9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjE2YzAyZjdiNjU4ZmZmMmE5YzIwNzQwNmQzODhlYTMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiYzBiZDAyM2Y0OTdkZmQ3NWUxY2E3MzQ0MWNiYmI1YTYzNjE3ZDllMTRmMjc5MGI4NjgzNjFjYzA1NWI1YjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzLzAwMDEtdXNpbmctdGhlLWR5bmFtaWMtbGlicmFyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2JmZDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzLzAwMDEtdXNpbmctdGhlLWR5bmFtaWMtbGlicmFyeS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitbUEFUQ0hdIHVzaW5nIHRoZSBkeW5hbWljIGxpYnJhcnkKKworVXBzdHJlYW0tU3RhdHVzOiAgSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworYnVpbGRpbmcgc3RhdGljYWxseS1saW5rZWQgc3FsaXRlMyBmYWlsZWQgc2luY2Ugc3FsaXRlMy5vIGlzIGdlbmVyYXRlZCBpbiAKK2RpZmZlcmVudCBkaXIsIGV2ZW4gaWYgbGluayBzdWNjZXNzZXMsIHRoZSBzaXplIG9mIHNxbGl0ZTMgaXMgYmVjb21lIGxhcmdlciwKK3NvIHVzZSB0aGUgZHluYW1pYyBsaW5rLCByZWY6IGh0dHA6Ly9wYXRjaHdvcmsub3BlbmVtYmVkZGVkLm9yZy9wYXRjaC85MzI5My8KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDg4YmMyM2QuLmZlNTBmMjAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC03LDcgKzcsOCBAQCBsaWJzcWxpdGUzX2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIC12ZXJzaW9uLWluZm8gODo2OjgKKyAKKyBiaW5fUFJPR1JBTVMgPSBzcWxpdGUzCisgc3FsaXRlM19TT1VSQ0VTID0gc2hlbGwuYyBzcWxpdGUzLmgKKy1zcWxpdGUzX0xEQUREID0gc3FsaXRlMy4kKE9CSkVYVCkgQFJFQURMSU5FX0xJQlNACisrc3FsaXRlM19MREFERCA9IEBSRUFETElORV9MSUJTQCBsaWJzcWxpdGUzLmxhCisrCisgCisgaW5jbHVkZV9IRUFERVJTID0gc3FsaXRlMy5oIHNxbGl0ZTNleHQuaAorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzNzkxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzLmluYwpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkVtYmVkZGFibGUgU1FMIGRhdGFiYXNlIGVuZ2luZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3FsaXRlLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAicmVhZGxpbmUgbmN1cnNlcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0xJQ0VOU0UgPSAiUEQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXRocmVhZHNhZmUiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS10aHJlYWRzYWZlIC0tZGlzYWJsZS1yZWFkbGluZSIKK2V4cG9ydCBjb25maWdfQlVJTERfQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgY29uZmlnX0JVSUxEX0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitleHBvcnQgY29uZmlnX0JVSUxEX0xJQlMgPSAiJHtCVUlMRF9MREZMQUdTfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0NDID0gIiR7Q0N9IgorZXhwb3J0IGNvbmZpZ19UQVJHRVRfTElOSyA9ICIke0NDTER9IgorZXhwb3J0IGNvbmZpZ19UQVJHRVRfQ0ZMQUdTID0gIiR7Q0ZMQUdTfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0xGTEFHUyA9ICIke0xERkxBR1N9IgorCisjIHByZWFkKCkgaXMgaW4gUE9TSVguMS0yMDAxIHNvIGFueSByZWFzb25hYmxlIHN5c3RlbSBtdXN0IHN1cmVseSBzdXBwb3J0IGl0CitCVUlMRF9DRkxBR1MgKz0gIi1EVVNFX1BSRUFEIgorVEFSR0VUX0NGTEFHUyArPSAiLURVU0VfUFJFQUQiCisKK1BBQ0tBR0VTID0gImxpYiR7QlBOfSBsaWIke0JQTn0tZGV2IGxpYiR7QlBOfS1kb2MgJHtQTn0tZGJnIGxpYiR7QlBOfS1zdGF0aWNkZXYgJHtQTn0iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU19saWIke0JQTn0tZGV2ID0gIiR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLnNvIFwKKwkgICAgICAgICAgICAgICAgCSAgICR7bGliZGlyfS9wa2djb25maWcgJHtpbmNsdWRlZGlyfSIKK0ZJTEVTX2xpYiR7QlBOfS1kb2MgPSAiJHtkb2NkaXJ9ICR7bWFuZGlyfSAke2luZm9kaXJ9IgorRklMRVNfbGliJHtCUE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliKi5hIgorQVVUT19MSUJOQU1FX1BLR1MgPSAiJHtNTFBSRUZJWH1saWIke0JQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuOC4xMC4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy44LjEwLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyYWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuOC4xMC4yLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgc3FsaXRlMy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3FsaXRlMy5oO2VuZGxpbmU9MTE7bWQ1PTY1ZjBhNTdjYTY5Mjg3MTBiNDE4YzA5NGIzNTcwYmIwIgorCitkZWYgc3FsaXRlX2Rvd25sb2FkX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICcnLmpvaW4oW3BhcnQucmp1c3QoMiwnMCcpIGZvciBwYXJ0IGluIHB2c3BsaXRbMTpdXSkKKworUEUgPSAiMyIKK1NRTElURV9QViA9ICIke0BzcWxpdGVfZG93bmxvYWRfdmVyc2lvbihkKX0iCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc3FsaXRlLm9yZy8yMDE1L3NxbGl0ZS1hdXRvY29uZi0ke1NRTElURV9QVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXNpbmctdGhlLWR5bmFtaWMtbGlicmFyeS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMThiZmMwMTVjZDQ5YTFlN2E5NjFiN2I3N2JjM2IzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzgyZTU1YTRlN2Q4NTNjOTMwMzg1NjJjYTNkZDAwMzA3OTM3ZmNjZjFjNmI2NWRkZDgxM2U1MDNhNTZkNjI2IgorCitTID0gIiR7V09SS0RJUn0vc3FsaXRlLWF1dG9jb25mLSR7U1FMSVRFX1BWfSIKKworIyBQcm92aWRlIGNvbHVtbiBtZXRhLWRhdGEgQVBJCitCVUlMRF9DRkxBR1MgKz0gIi1EU1FMSVRFX0VOQUJMRV9DT0xVTU5fTUVUQURBVEEiCitUQVJHRVRfQ0ZMQUdTICs9ICItRFNRTElURV9FTkFCTEVfQ09MVU1OX01FVEFEQVRBIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdGFnbGliL3RhZ2xpYl8xLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI3ODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdGFnbGliL3RhZ2xpYl8xLjkuMS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlYWRpbmcgYW5kIGVkaXRpbmcgdGhlIG1ldGEtZGF0YSBvZiBwb3B1bGFyIGF1ZGlvIGZvcm1hdHMiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0hPTUVQQUdFID0gImh0dHA6Ly90YWdsaWIuZ2l0aHViLmlvLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBNUEwtMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEdQTDttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5NUEw7bWQ1PWJmZTFmNzVkNjA2OTEyYTQxMTFjOTA3NDNkNmM3MzI1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RhZ2xpYi9hdWRpb3Byb3BlcnRpZXMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI0O21kNT05ZGYyYzczOTk1MTliNzMxMDU2OGE3YzU1MDQyZWNlZSIKKworREVQRU5EUyA9ICJ6bGliIgorCitTUkNfVVJJID0gImh0dHA6Ly90YWdsaWIuZ2l0aHViLmlvL3JlbGVhc2VzLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZDM1ZGY5NjgyMmJiZDU2NGM1NTA0Y2IzYzJlNGQ4NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MmQzNzFjZDE0MTlhODdhZTIwMDQ0N2E1M2JmZjJiZTIxOTI4MzA3MWU4MGZkMTIzMzc5MjhjYzk2N2RjNzFhIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3RhZ2xpYi1jb25maWciCisKK2luaGVyaXQgY21ha2UgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZAorCitQQUNLQUdFUyA9KyAiJHtQTn0tYyIKK0ZJTEVTXyR7UE59LWMgPSAiJHtsaWJkaXJ9L2xpYnRhZ19jLnNvLioiCisKK0VYVFJBX09FQ01BS0UgPSAiLURMSUJfU1VGRklYPSR7QGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkucmVwbGFjZSgnbGliJywgJycpfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vYWRtaW4vbHRtYWluLnNoCisJcm0gLWYgJHtTfS9hZG1pbi9saWJ0b29sLm00LmluCisJIyBEb24ndCBoYXZlIGEgZmxvYXRpbmcgZGVwZW5kZW55IG9uIGJvb3N0CisJc2VkIC1pIC1lICJzL2F0b21pYy5ocHAvYXRvbWljLW5vdC1leGlzdC5ocHAvIiAke1N9L0NvbmZpZ3VyZUNoZWNrcy5jbWFrZSAke1N9L3RhZ2xpYi90b29sa2l0L3RyZWZjb3VudGVyLmNwcAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdXNlci1jcmVhdGlvbi94dXNlci1hY2NvdW50XzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JhOTdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdXNlci1jcmVhdGlvbi94dXNlci1hY2NvdW50XzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkNyZWF0ZXMgYW4gJ3h1c2VyJyBhY2NvdW50IHVzZWQgZm9yIHJ1bm5pbmcgWDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICIiCisKK2luaGVyaXQgYWxsYXJjaCB1c2VyYWRkCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgOgorfQorCitkb19pbnN0YWxsKCkgeworICAgIDoKK30KKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIHNodXRkb3duIgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ncm91cHMgdmlkZW8sdHR5LGF1ZGlvLGlucHV0LHNodXRkb3duLGRpc2sgXAorICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgeHVzZXIiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2M2QzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTU0NV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbiB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCistLS0gdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgkyMDEwLTA3LTE1IDIwOjA4OjQ0LjAwMDAwMDAwMCArMDMwMAorKysrIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4JMjAxMy0wMS0xMSAxNDo1MDozNC45NzEwMjc0NDAgKzAyMDAKK0BAIC04LDcgKzgsNiBAQAorIEFDX0lTQ19QT1NJWAorIEFDX1BST0dfQ0MKKyBBQ19TVERDX0hFQURFUlMKKy1BTV9QUk9HX0NDX1NUREMKKworIGlmIHRlc3QgLXogIiRlbmFibGVfbWFpbnRhaW5lcl9tb2RlIjsgdGhlbgorICAgZW5hYmxlX21haW50YWluZXJfbW9kZT15ZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0MDYyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiVmlydHVhbCB0ZXJtaW5hbCBlbXVsYXRvciBHVEsrIHdpZGdldCBsaWJyYXJ5IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PXZ0ZSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjAiCitERVBFTkRTID0gIiBnbGliLTIuMCBndGsrIGludGx0b29sLW5hdGl2ZSBuY3Vyc2VzIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIgorUkRFUEVORFNfbGlidnRlID0gInZ0ZS10ZXJtY2FwIgorCitpbmhlcml0IGdub21lIGd0ay1kb2MKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1weXRob24gLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1BBQ0tBR0VTID0rICJsaWJ2dGUgdnRlLXRlcm1jYXAiCitGSUxFU19saWJ2dGUgPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmV4ZWNkaXJ9L2dub21lLXB0eS1oZWxwZXIiCitGSUxFU18ke1BOfS1kYmcgPSsgIiR7bGliZXhlY2Rpcn0vLmRlYnVnICR7cHJlZml4fS9zcmMgJHtiaW5kaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vLmRlYnVnIgorRklMRVNfdnRlLXRlcm1jYXAgPSAiJHtkYXRhZGlyfS92dGUvdGVybWNhcC0wLjAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjI4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwMjVjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgdnRlLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworUFIgPSAicjYiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2giCisKK0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNDk3ZjI2ZTQ1NzMwODY0OWU2ZWNlMzJiM2JiMTQyZmYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4NmNmMGI4MWFhMDIzZmE5M2VkNDE1NjUzZDUxYzk2NzY3ZjIwYjJkNzMzNGM4OTNjYWJhNzFlNDI2NTRiMGFlIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJtYXRjaGJveC10ZXJtaW5hbCBuZWVkcyB0byBiZSBwb3J0ZWQgb3ZlciB0byBuZXcgdnRlIGZpcnN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLnR4dCBiL21ldGEvcmVjaXBlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1Mzg2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy50eHQKQEAgLTAsMCArMSwxNSBAQAorcmVjaXBlcy1ic3AgICAgICAgICAgLSBBbnl0aGluZyB3aXRoIGxpbmtzIHRvIHNwZWNpZmljIGhhcmR3YXJlIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KK3JlY2lwZXMtY29ubmVjdGl2aXR5IC0gTGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnMgcmVsYXRlZCB0byBjb21tdW5pY2F0aW9uIHdpdGggb3RoZXIgZGV2aWNlcyAKK3JlY2lwZXMtY29yZSAgICAgICAgIC0gV2hhdCdzIG5lZWRlZCB0byBidWlsZCBhIGJhc2ljIHdvcmtpbmcgTGludXggaW1hZ2UgaW5jbHVkaW5nIGNvbW1vbmx5IHVzZWQgZGVwZW5kZW5jaWVzCityZWNpcGVzLWRldnRvb2xzICAgICAtIFRvb2xzIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gKGJ1dCBjYW4gYWxzbyBiZSB1c2VkIG9uIHRhcmdldHMpCityZWNpcGVzLWV4dGVuZGVkICAgICAtIEFwcGxpY2F0aW9ucyB3aGljaCB3aGlsc3Qgbm90IGVzc2VudGlhbCBhZGQgZmVhdHVyZXMgY29tcGFyZWQgdG8gdGhlIGFsdGVybmF0aXZlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICBjb3JlLiBNYXkgYmUgbmVlZGVkIGZvciBmdWxsIHRvb2wgZnVuY3Rpb25hbGl0eSBvciBMU0IgY29tcGxpYW5jZS4KK3JlY2lwZXMtZ25vbWUgICAgICAgIC0gQWxsIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBHVEsrIGFwcGxpY2F0aW9uIGZyYW1ld29yaworcmVjaXBlcy1ncmFwaGljcyAgICAgLSBYIGFuZCBvdGhlciBncmFwaGljYWxseSByZWxhdGVkIHN5c3RlbSBsaWJyYXJpZXMgIAorcmVjaXBlcy1rZXJuZWwgICAgICAgLSBUaGUga2VybmVsIGFuZCBnZW5lcmljIGFwcGxpY2F0aW9ucy9saWJyYXJpZXMgd2l0aCBzdHJvbmcga2VybmVsIGRlcGVuZGVuY2llcworcmVjaXBlcy1sc2I0ICAgICAgICAgLSBSZWNpcGVzIGFkZGVkIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIHN1cHBvcnRpbmcgdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgNC54CityZWNpcGVzLW11bHRpbWVkaWEgICAtIENvZGVjcyBhbmQgc3VwcG9ydCB1dGlsdGllcyBmb3IgYXVkaW8sIGltYWdlcyBhbmQgdmlkZW8KK3JlY2lwZXMtcnQgICAgICAgICAgIC0gUHJvdmlkZXMgcGFja2FnZSBhbmQgaW1hZ2UgcmVjaXBlcyBmb3IgdXNpbmcgYW5kIHRlc3RpbmcgdGhlIFBSRUVNUFRfUlQga2VybmVsCityZWNpcGVzLXF0ICAgICAgICAgICAtIEFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgUXQgYXBwbGljYXRpb24gZnJhbWV3b3JrCityZWNpcGVzLXNhdG8gICAgICAgICAtIFRoZSBTYXRvIGRlbW8vcmVmZXJlbmNlIFVJL1VYLCBpdHMgYXNzb2NpYXRlZCBhcHBzIGFuZCBjb25maWd1cmF0aW9uIAorcmVjaXBlcy1zdXBwb3J0ICAgICAgLSBSZWNpcGVzIHVzZWQgYnkgb3RoZXIgcmVjaXBlcyBidXQgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGluY2x1ZGVkIGluIGltYWdlcwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS0zMiBiL21ldGEvc2l0ZS9hcm0tMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmZDhkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm0tMzIKQEAgLTAsMCArMSw0NyBAQAorIyBkZWZpbml0aW9ucyBhc3N1bWluZyAzMi1iaXQgYXJtIGFyY2hpdGVjdHVyZQorCisjIGFwYWNoZQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KKworIyBnbGliCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorCisjIGdsaWItMi4wCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD00fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworIyBqaWtlcworYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NAorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS02NCBiL21ldGEvc2l0ZS9hcm0tNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjMDliMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm0tNjQKQEAgLTAsMCArMSw0NiBAQAorIyBkZWZpbml0aW9ucyBhc3N1bWluZyA2NC1iaXQgYXJtIGFyY2hpdGVjdHVyZQorCisjIGdlbmVyYWwKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKK2FjX2N2X3NpemVvZl9zaXplX3Q9OAorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9OAorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKKworIyBnbGliCisjZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorI2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CisjZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorCisjIGdsaWItMi4wCisjZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorI2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KKyNnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKyNnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KKyNnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIE9SQml0MiAoc2hvdWxkIGJlIGluIG1ldGEtZ25vbWUvc2l0ZS9hcm0tNjQpCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTgKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKKyNhY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorI2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj04CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS1jb21tb24gYi9tZXRhL3NpdGUvYXJtLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmU1ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS1jb21tb24KQEAgLTAsMCArMSwxNTkgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIGFwYWNoZQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBjb3JldXRpbHMKK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE5fQorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIGRiIChzbGVlcHljYXQpCitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkYgorZGJfY3Zfc3BpbmxvY2tzPSR7ZGJfY3Zfc3BpbmxvY2tzPW5vfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KK2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9bm99Citjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz1ub30KKworIyBmbm1hdGNoCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9JHtnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT15ZXN9CisKKyNnc3RyZWFtZXIKK2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9JHthc19jdl91bmFsaWduZWRfYWNjZXNzPW5vfQorCisjIGh0dHBwYworYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxpYmVzbXRwCithY3hfd29ya2luZ19zbnByaW50Zj0ke2FjeF93b3JraW5nX3NucHJpbnRmPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbGlibmV0IAorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgbGlua3MKK2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD0ke2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD15ZXN9CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj1ub30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD1ub30KKworIyBuYW5vCithY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPSR7YWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgcnN5bmMKK3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT1ub30KK3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj0ke3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj15ZXN9Cityc3luY19jdl9IQVZFX0xPTkdMT05HPSR7cnN5bmNfY3ZfSEFWRV9MT05HTE9ORz15ZXN9Cityc3luY19jdl9IQVZFX09GRjY0X1Q9JHtyc3luY19jdl9IQVZFX09GRjY0X1Q9bm99Cityc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPSR7cnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD1ub30KK3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtyc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorcnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtyc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Cityc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtyc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorcnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtyc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049bm99CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc29jYXQKK2FjX2N2X2lzcGVlZF9vZmZzZXQ9JHthY19jdl9pc3BlZWRfb2Zmc2V0PTEzfQorc2NfY3ZfdGVybWlvc19pc3BlZWQ9JHtzY19jdl90ZXJtaW9zX2lzcGVlZD15ZXN9CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgeGZmbQoram1fY3ZfZnVuY193b3JraW5nX3JlYWRkaXI9eWVzCisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9hcm0tZGFyd2luIGIvbWV0YS9zaXRlL2FybS1kYXJ3aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmZjA5NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm0tZGFyd2luCkBAIC0wLDAgKzEsMTEgQEAKK2FjX2N2X2xpYl9tX3Npbj0ke2FjX2N2X2xpYl9tX3Npbj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj1ub30KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj1ub30KK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ub30KK2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9JHtiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PXllc30KK2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj0ke2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj1ub30KK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9hcm0tZGFyd2luOCBiL21ldGEvc2l0ZS9hcm0tZGFyd2luOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZmMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS1kYXJ3aW44CkBAIC0wLDAgKzEsMTEgQEAKK2FjX2N2X2xpYl9tX3Npbj0ke2FjX2N2X2xpYl9tX3Npbj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj1ub30KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj1ub30KK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ub30KK2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9JHtiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PXllc30KK2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj0ke2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj1ub30KK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9hcm0tbGludXggYi9tZXRhL3NpdGUvYXJtLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjE4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvYXJtLWxpbnV4CkBAIC0wLDAgKzEsMTYwIEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl93Y2hhcl90PSR7YWNfY3Zfc2l6ZW9mX3djaGFyX3Q9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9ib29sPSR7YWNfY3Zfc2l6ZW9mX2Jvb2w9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfaW50X3A9NH0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfaW50X3A9JHthY19jdl9zaXplb2ZfaW50X3A9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19wPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfcD00fQorYWNfY3Zfc2l6ZW9mX2Zsb2F0PSR7YWNfY3Zfc2l6ZW9mX2Zsb2F0PTR9CithY19jdl9zaXplb2ZfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0JST0tFTl9OSVNQTFVTX0lOQ0xVREVfRklMRVM9JHtzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPXllc30KK3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz0ke3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRFFCX0ZTT0ZUTElNSVQ9JHtzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPW5vfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQU1fSD0ke3NhbWJhX2N2X0hBVkVfRkFNX0g9bm99CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89JHtzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj0ke3NhbWJhX2N2X0hBVkVfTkFUSVZFX0lDT05WPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD15ZXN9CitzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPSR7c2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj0ke3NhbWJhX2N2X0hBVkVfU09DS19TSU5fTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9JHtzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxLU0laRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVI2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUjY0PW5vfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRJTUJVRj0ke3NhbWJhX2N2X0hBVkVfVVRJTUJVRj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj0ke3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD15ZXN9CitzYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KK3NhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9JHtzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPXllc30KK3NhbWJhX2N2X1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPSR7c2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9JHtzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9bm99CitzYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9JHtzYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9eWVzfQorc2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9JHtzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DRVNTT1JTX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DRVNTT1JTX09OTE49eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPW5vfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19QQUdFU0laRT0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfUEFHRVNJWkU9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTX1hGUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTX1hGUz15ZXN9CitzYW1iYV9jdl9UUllfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1FVT1RBUz1ub30KK3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfV0VfVVNFX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9XRV9VU0VfU1lTX1FVT1RBUz15ZXN9CitzYW1iYV9jdl9XSVRIX0FGUz0ke3NhbWJhX2N2X1dJVEhfQUZTPW5vfQorc2FtYmFfY3ZfV0lUSF9GQUtFX0tBU0VSVkVSPSR7c2FtYmFfY3ZfV0lUSF9GQUtFX0tBU0VSVkVSPW5vfQorc2FtYmFfY3ZfV0lUSF9RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPWF1dG99CitzYW1iYV9jdl9XSVRIX1ZGU19BRlNBQ0w9JHtzYW1iYV9jdl9XSVRIX1ZGU19BRlNBQ0w9bm99CitzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD0ke3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPXllc30KK3NhbWJhX2N2X2ZvdW5kX3hmc19oZWFkZXI9JHtzYW1iYV9jdl9mb3VuZF94ZnNfaGVhZGVyPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz0ke3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPXllc30KK3NhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9JHtzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPXllc30KK3NhbWJhX2N2X3NpZ19hdG9taWNfdD0ke3NhbWJhX2N2X3NpZ19hdG9taWNfdD15ZXN9CitzYW1iYV9jdl9zb2NrbGVuX3Q9JHtzYW1iYV9jdl9zb2NrbGVuX3Q9eWVzfQorc2FtYmFfY3Zfc3RydWN0X3RpbWVzcGVjPSR7c2FtYmFfY3Zfc3RydWN0X3RpbWVzcGVjPXllc30KK3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPSR7c2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9bGliL3N5c3F1b3Rhc19saW51eC5jfQorc2FtYmFfY3ZfdW5peHNvY2tldD0ke3NhbWJhX2N2X3VuaXhzb2NrZXQ9eWVzfQorc2FtYmFfY3Zfdm9sYXRpbGU9JHtzYW1iYV9jdl92b2xhdGlsZT15ZXN9CisKKyNvbGRlciBzYW1iZSBkZWZpbmVzCitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorCisjIGNsYW1hdgorY2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPSR7Y2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPXllc30KK2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD0ke2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9eWVzfQorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD0ke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzfQorCisjZGJ1cworYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworIyBsZnRwCithY19jdl9maWxlX19fZGV2X3B0Y189eWVzCisKKyMgZ3VpbGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9eWVzfQorCisjIGduZXQKK2FjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuPSR7YWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV9sZW49bm99CithY19jdl9nbmV0X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2duZXRfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPW5vfQorZ25ldF9zb2NrYWRkcl9mYW1pbHlfZmllbGRfbmFtZT0ke2duZXRfc29ja2FkZHJfZmFtaWx5X2ZpZWxkX25hbWU9c3NfZmFtaWx5fQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMgYi9tZXRhL3NpdGUvYXJtLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWU3YzZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMKQEAgLTAsMCArMSwxMDUgQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0JST0tFTl9OSVNQTFVTX0lOQ0xVREVfRklMRVM9JHtzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPXllc30KK3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz0ke3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz1ub30KK3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPSR7c2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRFFCX0ZTT0ZUTElNSVQ9JHtzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPW5vfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPSR7c2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj0ke3NhbWJhX2N2X0hBVkVfTkFUSVZFX0lDT05WPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9JHtzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPXllc30KK3NhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9JHtzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9bm99CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9bm99CitzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj0ke3NhbWJhX2N2X0hBVkVfU09DS19TSU5fTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9JHtzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxLU0laRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PW5vfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfSUZfRFFCTEs9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9JRl9EUUJMSz1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX01FTV9EUUJMSz0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX01FTV9EUUJMSz1ub30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVElNQlVGPSR7c2FtYmFfY3ZfSEFWRV9VVElNQlVGPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfQUREUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfQUREUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0VYSVQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0VYSVQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9IT1NUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9IT1NUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfTkFNRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfTkFNRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfUElEPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVElNRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVElNRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RZUEU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RZUEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9VU0VSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9VU0VSPXllc30KK3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPSR7c2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49bm99CitzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9JHtzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9eWVzfQorc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPW5vfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPSR7c2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD15ZXN9CitzYW1iYV9jdl9RVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz0ke3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPSR7c2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPWF1dG99CitzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD0ke3NhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1RSWV9RVU9UQVM9JHtzYW1iYV9jdl9UUllfUVVPVEFTPW5vfQorc2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9UUllfU1lTX1FVT1RBUz1ub30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1dJVEhfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9RVU9UQVM9YXV0b30KK3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9JHtzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9JHtzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz15ZXN9CitzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPSR7c2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz15ZXN9CitzYW1iYV9jdl9zaWdfYXRvbWljX3Q9JHtzYW1iYV9jdl9zaWdfYXRvbWljX3Q9eWVzfQorc2FtYmFfY3Zfc29ja2xlbl90PSR7c2FtYmFfY3Zfc29ja2xlbl90PXllc30KK3NhbWJhX2N2X3VuaXhzb2NrZXQ9JHtzYW1iYV9jdl91bml4c29ja2V0PXllc30KK3NhbWJhX2N2X3ZvbGF0aWxlPSR7c2FtYmFfY3Zfdm9sYXRpbGU9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybWViLWxpbnV4IGIvbWV0YS9zaXRlL2FybWViLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjFmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvYXJtZWItbGludXgKQEAgLTAsMCArMSw0MyBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND0ke3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS9hcm1lYi1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMxZTg1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm1lYi1saW51eC11Y2xpYmMKQEAgLTAsMCArMSwzOCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbiBiL21ldGEvc2l0ZS9jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjYzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24KQEAgLTAsMCArMSwyMSBAQAorIyBsaWJlbGYKK21yX2N2X3RhcmdldF9lbGY9JHttcl9jdl90YXJnZXRfZWxmPXllc30KKworIyBOb3JtYWxseSBrZXJuZWxzIGhhdmUgL2Rldi9yYW5kb20gZW5hYmxlZAorYWNfY3ZfZmlsZV9fZGV2X3JhbmRvbT0ke2FjX2N2X2ZpbGVfX2Rldl9yYW5kb209eWVzfQorCisjIEF2b2lkIHN1ZG8gdG8gYXNzdW1lIHZvaWQgZm9yIHVuc2V0ZW52IGluIGNyb3NzIGVudmlyb25tZW50LCBvciBlbHNlIGl0IGNvbmZsaWN0cyB3aXRoCisjIHRhcmdldCBzdGRsaWIuaCBwcm90b3R5cGUgd2hpY2ggZm9sbG93cyBQT1NJWCBjb21waWxpYW5jZS4gTWFyayBmb3IgdXBzdHJlYW0uCitzdWRvX2N2X2Z1bmNfdW5zZXRlbnZfdm9pZD1ubworCisjIHNoYWRvdyBkaXIgaW5mbywgdG8gYXZvaWQgc2VhcmNoaW5nIGJ1aWxkIHN5c3RlbQorc2hhZG93X2N2X21haWxkaXI9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9tYWlsCitzaGFkb3dfY3ZfbWFpbGZpbGU9TWFpbGJveAorc2hhZG93X2N2X3V0bXBkaXI9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK3NoYWRvd19jdl9sb2dkaXI9JHtsb2NhbHN0YXRlZGlyfS9sb2cKK3NoYWRvd19jdl9wYXNzd2RfZGlyPSR7YmluZGlyfQorCisjIHB5dGhvbjogZGVhY3RpdmF0ZSBhIHJ1bnRpbWUgY2hlY2sgZm9yIGlwdjYtc3VwcG9ydCBpbiBweXRob24gPj0yLjcuMSB0aGF0IGZhaWxzIHdoZW4gY3Jvc3MtY29tcGlsaW5nCithY19jdl9idWdneV9nZXRhZGRyaW5mbz1ubworCithY19jdl9wYXRoX1NFRD1zZWQKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9jb21tb24tZGFyd2luIGIvbWV0YS9zaXRlL2NvbW1vbi1kYXJ3aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyZDg5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tZGFyd2luCkBAIC0wLDAgKzEsMiBAQAorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjIGIvbWV0YS9zaXRlL2NvbW1vbi1nbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDQzZjhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2NvbW1vbi1nbGliYwpAQCAtMCwwICsxLDg2IEBACisjIGdlbmVyYWwKK2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD0ke2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD15ZXN9CithY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX21hbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorYWNfY3ZfZnVuY19nZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0Z3JlbnRfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldHB3dWlkX3I9JHthY19jdl9mdW5jX2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl90eXBlX3VpZF90PXthY19jdl90eXBlX3VpZF90PXllc30KK2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89JHthY19jdl9mdW5jX2dldGFkZHJpbmZvPXllc30KKworIyBiYXNoCitiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PSR7YmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD15ZXN9CitiYXNoX2N2X3N5c19zaWdsaXN0PSR7YmFzaF9jdl9zeXNfc2lnbGlzdD15ZXN9CitiYXNoX2N2X2dldGN3ZF9tYWxsb2M9JHtiYXNoX2N2X2dldGN3ZF9tYWxsb2M9eWVzfQorCisjIGNsYW1hdgorY2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPSR7Y2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPXllc30KK2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD0ke2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9eWVzfQorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD0ke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzfQorCisjIGNvcmV1dGlscworZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT0ke2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9CithY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KK2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9CitnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisjIGdsaWItMS54IHJlcXVpcmVzIHRoaXMgYW5kIHBrZ2NvbmZpZy1uYXRpdmUgLyBwa2djb25maWctbmF0aXZlc2RrIHVzZQorIyB0aGF0IHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBsb29wLgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X3ZhX2NvcHk9JHtnbGliX2N2X3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXZlX3Fzb3J0X3I9JHtnbGliX2N2X2hhdmVfcXNvcnRfcj15ZXN9CisKKyNkYnVzLWdsaWIKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgZ251Y2FzaAorYW1fY3Zfc2NhbmZfbGxkPSR7YW1fY3Zfc2NhbmZfbGxkPXllc30KKworIyBndWlsZQorYWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9JHthY19jdl9mdW5jX3B0aHJlYWRfYXR0cl9nZXRzdGFjaz15ZXN9CisKKyNnY2MtemxpYgorYWNfY3ZfZnVuY19nZXRwYWdlc2l6ZT0ke2FjX2N2X2Z1bmNfZ2V0cGFnZXNpemU9eWVzfQorYWNfY3ZfZnVuY19tZW1jcHk9JHthY19jdl9mdW5jX21lbWNweT15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yPSR7YWNfY3ZfZnVuY19zdHJlcnJvcj15ZXN9CisKKyMgc3F1aWQKK2FjX2N2X2FmX3VuaXhfbGFyZ2VfZGdyYW09JHthY19jdl9hZl91bml4X2xhcmdlX2RncmFtPXllc30KK2FjX2N2X2Z1bmNfc2V0cmVzdWlkPSR7YWNfY3ZfZnVuY19zZXRyZXN1aWQ9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZXBvbGxfd29ya3M9JHthY19jdl9lcG9sbF93b3Jrcz15ZXN9CisKK2FjX2N2X2NoZWNrX3NqbGo9c3NqbGoKKworIyBtNAorZ3RfY3ZfbG9jYWxlX2ZyPSR7Z3RfY3ZfbG9jYWxlX2ZyPWZyX0ZSfQorZ2xfY3ZfZnVuY19idG93Y19lb2Y9JHtnbF9jdl9mdW5jX2J0b3djX2VvZj15ZXN9CitnbF9jdl9mdW5jX3djcnRvbWJfcmV0dmFsPSR7Z2xfY3ZfZnVuY193Y3J0b21iX3JldHZhbD15ZXN9CitnbF9jdl9mdW5jX3djdG9iX3dvcmtzPSR7Z2xfY3ZfZnVuY193Y3RvYl93b3Jrcz15ZXN9CitnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT0ke2dsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz0ke2dsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz15ZXN9CitnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmc9JHtnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmc9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbD0ke2dsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWw9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9JHtnbF9jdl9mdW5jX21icnRvd2NfbnVsX3JldHZhbD15ZXN9CisKKyMgdmFfY29weSBhbmQgX3ZhX2NvcHkKK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KK2FjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CisKKyMgWG9yZworeG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD0ke3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbi1saW51eCBiL21ldGEvc2l0ZS9jb21tb24tbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YmU2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tbGludXgKQEAgLTAsMCArMSw1MiBAQAorIyBhcHIKK2FjX2N2X2ZpbGVfX2Rldl96ZXJvPSR7YWNfY3ZfZmlsZV9fZGV2X3plcm89eWVzfQorYWNfY3Zfc2l6ZW9mX3BpZF90PSR7YWNfY3Zfc2l6ZW9mX3BpZF90PTR9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfSUZBQ0VfQUlYPSR7c2FtYmFfY3ZfSEFWRV9JRkFDRV9BSVg9bm99CitzYW1iYV9jdl9IQVZFX0lGQUNFX0lGQ09ORj0ke3NhbWJhX2N2X0hBVkVfSUZBQ0VfSUZDT05GPXllc30KK3NhbWJhX2N2X0hBVkVfSUZBQ0VfSUZSRVE9JHtzYW1iYV9jdl9IQVZFX0lGQUNFX0lGUkVRPXllc30KK3NhbWJhX2N2X0hBVkVfSVJJWF9TUEVDSUZJQ19DQVBBQklMSVRJRVM9JHtzYW1iYV9jdl9IQVZFX0lSSVhfU1BFQ0lGSUNfQ0FQQUJJTElUSUVTPW5vfQorCisjIGRiCitkYl9jdl9wYXRoX2FyPSR7ZGJfY3ZfcGF0aF9hcj0vdXNyL2Jpbi9hcn0KK2RiX2N2X3BhdGhfY2htb2Q9JHtkYl9jdl9wYXRoX2NobW9kPS9iaW4vY2htb2R9CitkYl9jdl9wYXRoX2NwPSR7ZGJfY3ZfcGF0aF9jcD0vYmluL2NwfQorZGJfY3ZfcGF0aF9sbj0ke2RiX2N2X3BhdGhfbG49L2Jpbi9sbn0KK2RiX2N2X3BhdGhfbWtkaXI9JHtkYl9jdl9wYXRoX21rZGlyPS9iaW4vbWtkaXJ9CitkYl9jdl9wYXRoX3JhbmxpYj0ke2RiX2N2X3BhdGhfcmFubGliPS91c3IvYmluL3JhbmxpYn0KK2RiX2N2X3BhdGhfcm09JHtkYl9jdl9wYXRoX3JtPS9iaW4vcm19CitkYl9jdl9wYXRoX3NoPSR7ZGJfY3ZfcGF0aF9zaD0vYmluL3NofQorZGJfY3ZfcGF0aF9zdHJpcD0ke2RiX2N2X3BhdGhfc3RyaXA9L3Vzci9iaW4vc3RyaXB9CisKKyMgYmFzaAorYmFzaF9jdl9oYXZlX21ic3RhdGVfdD0ke2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9eWVzfQorYmFzaF9jdl9tdXN0X3JlaW5zdGFsbF9zaWdoYW5kbGVycz0ke2Jhc2hfY3ZfbXVzdF9yZWluc3RhbGxfc2lnaGFuZGxlcnM9bm99CitiYXNoX2N2X2Z1bmNfc3RyY29sbF9icm9rZW49JHtiYXNoX2N2X2Z1bmNfc3RyY29sbF9icm9rZW49bm99CitiYXNoX2N2X2R1cDJfYnJva2VuPSR7YmFzaF9jdl9kdXAyX2Jyb2tlbj1ub30KK2Jhc2hfY3Zfb3BlbmRpcl9ub3Rfcm9idXN0PSR7YmFzaF9jdl9vcGVuZGlyX25vdF9yb2J1c3Q9bm99CitiYXNoX2N2X3R5cGVfcmxpbWl0PSR7YmFzaF9jdl90eXBlX3JsaW1pdD1ybGltX3R9CitiYXNoX2N2X2dldGVudl9yZWRlZj0ke2Jhc2hfY3ZfZ2V0ZW52X3JlZGVmPXllc30KK2Jhc2hfY3ZfdWxpbWl0X21heGZkcz0ke2Jhc2hfY3ZfdWxpbWl0X21heGZkcz15ZXN9CitiYXNoX2N2X2dldGN3ZF9jYWxsc19wb3Blbj0ke2Jhc2hfY3ZfZ2V0Y3dkX2NhbGxzX3BvcGVuPW5vfQorYmFzaF9jdl9wcmludGZfYV9mb3JtYXQ9JHtiYXNoX2N2X3ByaW50Zl9hX2Zvcm1hdD15ZXN9CitiYXNoX2N2X3BncnBfcGlwZT0ke2Jhc2hfY3ZfcGdycF9waXBlPW5vfQorYmFzaF9jdl9qb2JfY29udHJvbF9taXNzaW5nPSR7YmFzaF9jdl9qb2JfY29udHJvbF9taXNzaW5nPXByZXNlbnR9CitiYXNoX2N2X3N5c19uYW1lZF9waXBlcz0ke2Jhc2hfY3Zfc3lzX25hbWVkX3BpcGVzPXByZXNlbnR9CitiYXNoX2N2X3VudXNhYmxlX3J0c2lncz0ke2Jhc2hfY3ZfdW51c2FibGVfcnRzaWdzPW5vfQorCisjIGNvcmV1dGlscworZ2xfY3ZfZnVuY19mc3RhdGF0X3plcm9fZmxhZz0ke2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9eWVzfQorCisjIG15c3FsCithY19jdl9zeXNfcmVzdGFydGFibGVfc3lzY2FsbHM9JHthY19jdl9zeXNfcmVzdGFydGFibGVfc3lzY2FsbHM9eWVzfQorYWNfY3ZfY29udl9sb25nbG9uZ190b19mbG9hdD0ke2FjX2N2X2NvbnZfbG9uZ2xvbmdfdG9fZmxvYXQ9eWVzfQorCisjIFRDTAordGNsX2N2X2FwaV9zZXJpYWw9JHt0Y2xfY3ZfYXBpX3NlcmlhbD10ZXJtaW9zfQorCisjIHB5dGhvbgorYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcworCisjIGFwYWNoZQorYWNfY3Zfb19ub25ibG9ja19pbmhlcml0ZWQ9JHthY19jdl9vX25vbmJsb2NrX2luaGVyaXRlZD1ub30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9jb21tb24tbWluZ3cgYi9tZXRhL3NpdGUvY29tbW9uLW1pbmd3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzdjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvY29tbW9uLW1pbmd3CkBAIC0wLDAgKzEsMiBAQAorIyBleHBhdAorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbi1tdXNsIGIvbWV0YS9zaXRlL2NvbW1vbi1tdXNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmMxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvY29tbW9uLW11c2wKQEAgLTAsMCArMSw1MiBAQAorIyBnZW5lcmFsCithY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9JHthY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9bm99CithY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX21hbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19nZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0Z3JlbnRfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldHB3dWlkX3I9JHthY19jdl9mdW5jX2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldGFkZHJpbmZvPSR7YWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorYWNfY3ZfZnVuY19wcmludGZfdW5peDk4PSR7YWNfY3ZfZnVuY19wcmludGZfdW5peDk4PXllc30KK2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9eWVzfQorYWNfY3ZfZnVuY192c25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY192c25wcmludGZfYzk5PXllc30KK2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPSR7Z2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249MX0KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfaGF2ZV9xc29ydF9yPSR7Z2xpYl9jdl9oYXZlX3Fzb3J0X3I9bm99CisKKyNkYnVzLWdsaWIKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgYmFzaAorYmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9bm99CitiYXNoX2N2X3N5c19zaWdsaXN0PSR7YmFzaF9jdl9zeXNfc2lnbGlzdD1ub30KKworIyBjb3JldXRpbHMKK2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9JHtmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPXllc30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9JHtnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPW5vfQorZ2xfY3ZfZnVuY190enNldF9jbG9iYmVyPSR7Z2xfY3ZfZnVuY190enNldF9jbG9iYmVyPW5vfQorZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPXllc30KKworIyB2YV9jb3B5IGFuZCBfdmFfY29weQorYWNfY3ZfdmFfY29weT0ke2FjX2N2X3ZhX2NvcHk9eWVzfQorYWNfY3ZfX192YV9jb3B5PSR7YWNfY3ZfX192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfdmFfY29weT0ke2FjX2N2X2Z1bmNfdmFfY29weT15ZXN9CithY19jdl9mdW5jX19fdmFfY29weT0ke2FjX2N2X2Z1bmNfX192YV9jb3B5PXllc30KKworIyBwb3NpeF9nZXRwd3VpZF9yIHBvc2l4X2dldGdyZ2lkX3IgcG9zaXhfZ2V0cHduYW1fcgorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIFhvcmcKK3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9JHt4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9jb21tb24tdWNsaWJjIGIvbWV0YS9zaXRlL2NvbW1vbi11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYzEwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tdWNsaWJjCkBAIC0wLDAgKzEsNTIgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PSR7YWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PW5vfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ke2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9CithY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KK2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9CitnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X2hhdmVfcXNvcnRfcj0ke2dsaWJfY3ZfaGF2ZV9xc29ydF9yPW5vfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGJhc2gKK2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PW5vfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9bm99CisKKyMgY29yZXV0aWxzCitmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT15ZXN9CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz15ZXN9CisKKyMgdmFfY29weSBhbmQgX3ZhX2NvcHkKK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KK2FjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CisKKyMgcG9zaXhfZ2V0cHd1aWRfciBwb3NpeF9nZXRncmdpZF9yIHBvc2l4X2dldHB3bmFtX3IKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBYb3JnCit4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPSR7eG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvZW5kaWFuLWJpZyBiL21ldGEvc2l0ZS9lbmRpYW4tYmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OWU5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvZW5kaWFuLWJpZwpAQCAtMCwwICsxLDggQEAKK2FjX2N2X2NfbGl0dGxlZW5kaWFuPSR7YWNfY3ZfY19saXR0bGVlbmRpYW49bm99CithY19jdl9jX2JpZ2VuZGlhbj0ke2FjX2N2X2NfYmlnZW5kaWFuPXllc30KKworIyBsaWJuZXQKK2FjX2N2X2xpYm5ldF9lbmRpYW5lc3M9JHthY19jdl9saWJuZXRfZW5kaWFuZXNzPWJpZ30KKworIyBsaWJtZW1jYWNoZWQKK2FjX2N2X2NfZW5kaWFuPWJpZwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2VuZGlhbi1saXR0bGUgYi9tZXRhL3NpdGUvZW5kaWFuLWxpdHRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThkYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2VuZGlhbi1saXR0bGUKQEAgLTAsMCArMSw4IEBACithY19jdl9jX2xpdHRsZWVuZGlhbj0ke2FjX2N2X2NfbGl0dGxlZW5kaWFuPXllc30KK2FjX2N2X2NfYmlnZW5kaWFuPSR7YWNfY3ZfY19iaWdlbmRpYW49bm99CisKKyMgbGlibmV0CithY19jdl9saWJuZXRfZW5kaWFuZXNzPSR7YWNfY3ZfbGlibmV0X2VuZGlhbmVzcz1saWx9CisKKyMgbGlibWVtY2FjaGVkCithY19jdl9jX2VuZGlhbj1saXR0bGUKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9peDg2LWNvbW1vbiBiL21ldGEvc2l0ZS9peDg2LWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2QyY2UyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2l4ODYtY29tbW9uCkBAIC0wLDAgKzEsMjMyIEBACisjIGdlbmVyYWwKK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfaW50X3A9JHthY19jdl9zaXplb2ZfaW50X3A9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTR9CithY19jdl9zaXplb2ZfdWlkX3Q9JHthY19jdl9zaXplb2ZfdWlkX3Q9NH0KK2FjX2N2X3NpemVvZl9naWRfdD0ke2FjX2N2X3NpemVvZl9naWRfdD00fQorYWNfY3Zfc2l6ZW9mX2lub190PSR7YWNfY3Zfc2l6ZW9mX2lub190PTR9CithY19jdl9zaXplb2ZfZGV2X3Q9JHthY19jdl9zaXplb2ZfZGV2X3Q9OH0KK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CisKK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vfQorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKK2FjX2N2X3BhdGhfRVNEX0NPTkZJRz1ubworbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworam1fY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ubworc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzCitiZl9sc2JmPTEKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKKyMgYXVkYWNpdHkKK2FjX2N2X2ZpbGVfbGliX3NyY19saWJtYWRfZnJhbWVfaD0ke2FjX2N2X2ZpbGVfbGliX3NyY19saWJtYWRfZnJhbWVfaD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1taXNzaW5nfQorCisjIGNsYW1hdgorY2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPSR7Y2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPXllc30KK2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD0ke2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9eWVzfQorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD0ke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzfQorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliCitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9NAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworIyBndWlsZQorYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBqaWtlcy1uYXRpdmUKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBsZnRwCithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIGxpYm5ldCAKK2FjX2N2X2xibF91bmFsaWduZWRfZmFpbD0ke2FjX2N2X2xibF91bmFsaWduZWRfZmFpbD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KKworIyBsaWJ4ZmNlNHV0aWwKK3dpdGhfYnJva2VuX3B1dGVudj0ke3dpdGhfYnJva2VuX3B1dGVudj1ub30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPXllc30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD15ZXN9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD00CithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIHJzeW5jCityc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9JHtyc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9bm99Cityc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9JHtyc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9eWVzfQorcnN5bmNfY3ZfSEFWRV9MT05HTE9ORz0ke3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9eWVzfQorcnN5bmNfY3ZfSEFWRV9PRkY2NF9UPSR7cnN5bmNfY3ZfSEFWRV9PRkY2NF9UPW5vfQorcnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD0ke3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9bm99Cityc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99Cityc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Cityc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzc2gKK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9kaXJlbnRfaGF2ZV9zcGFjZV9kX25hbWU9eWVzfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPSR7YWNfY3ZfdHlwZV9zdHJ1Y3RfdGltZXNwZWM9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworCisjIHhmZm0KK2ptX2N2X2Z1bmNfd29ya2luZ19yZWFkZGlyPXllcworCisjIHhvcmcgWDExUjcKK2FjX2N2X3N5c19saW5rZXJfaD0ke2FjX2N2X3N5c19saW5rZXJfaD1ub30KK2FjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9YMTFfc2dtbF9kZWZzX2VudD0ke2FjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9YMTFfc2dtbF9kZWZzX2VudD1ub30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKworI2RidXMKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyNsaWJwY2lhY2Nlc3MKK2hhdmVfbXRycl9oPXllcworCisjbW96aWxsYQorbW96X2N2X3NpemVfb2ZfSlNfQllURVNfUEVSX1dPUkQ9NAorbW96X2N2X2FsaWduX29mX0pTX0FMSUdOX09GX1BPSU5URVI9NAorbW96X2N2X3NpemVfb2ZfSlNfQllURVNfUEVSX0RPVUJMRT04CisKKyNvZm9ubworYWNfY3ZfbGliX2Nfc2lnbmFsZmQ9JHthY19jdl9saWJfY19zaWduYWxmZD15ZXN9CisKKyN1bmZzMworbmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9JHtuZnNkX2N2X2Jyb2tlbl9zZXRmc3VpZD0wfQorbmZzZF9jdl9mdW5jX3N0YXRmcz0ke25mc2RfY3ZfZnVuY19zdGF0ZnM9c3RhdGZzMl9ic2l6ZX0KK25mc2RfY3ZfYnNkX3NpZ25hbHM9JHtuZnNkX2N2X2JzZF9zaWduYWxzPXllc30KKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD00CithY19jdl9hbGlnbm9mX2RvdWJsZT00CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwcy1jb21tb24gYi9tZXRhL3NpdGUvbWlwcy1jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNzJjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzLWNvbW1vbgpAQCAtMCwwICsxLDU2IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CithY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwcy1saW51eCBiL21ldGEvc2l0ZS9taXBzLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTU0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvbWlwcy1saW51eApAQCAtMCwwICsxLDc5IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjMzNjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHMtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsODAgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL21pcHM2NC1saW51eCBiL21ldGEvc2l0ZS9taXBzNjQtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwZmJiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjQtbGludXgKQEAgLTAsMCArMSw4MyBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKK2FjX2N2X3NpemVvZl9zc2l6ZV90PTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkcy1kYnVzCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjIGIvbWV0YS9zaXRlL21pcHM2NC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiYTU1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsODMgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZHMtZGJ1cworYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXggYi9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2MWViMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eApAQCAtMCwwICsxLDgyIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworI2xtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZHMtZGJ1cworYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwNDk5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eC11Y2xpYmMKQEAgLTAsMCArMSwxMDggQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorIyBmcm9tIHNhbWJhIDMuMC4xNGEgb24gNS8yOS8yMDA1CithY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9CithY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9eWVzfQorZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KK3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPSR7c2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9JHtzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPXllc30KK3NhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPW5vfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD1ub30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9JHtzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT1saWIvc3lzcXVvdGFzXzRBLmN9CisjIFRoaXMgY2FjaGVkIHZhbHVlIG5lZWRzIGEgbG9jYWwgcGF0Y2ggdG8gcGljayBpdCB1cCwgdXBzdHJlYW0gMy4wLjE0YQorIyBkb2Vzbid0IGNhY2hlIGl0Lgorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4IGIvbWV0YS9zaXRlL21pcHNlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZiMWJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHNlbC1saW51eApAQCAtMCwwICsxLDc5IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworI2xtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjIGIvbWV0YS9zaXRlL21pcHNlbC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyMWNkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTAwIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKKyMgZnJvbSBzYW1iYSAzLjAuMTRhIG9uIDUvMjkvMjAwNQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorYWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPXllc30KK2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND0ke2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND15ZXN9CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9bm99CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49bm99CitzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPSR7c2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9bGliL3N5c3F1b3Rhc180QS5jfQorIyBUaGlzIGNhY2hlZCB2YWx1ZSBuZWVkcyBhIGxvY2FsIHBhdGNoIHRvIHBpY2sgaXQgdXAsIHVwc3RyZWFtIDMuMC4xNGEKKyMgZG9lc24ndCBjYWNoZSBpdC4KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL25hdGl2ZSBiL21ldGEvc2l0ZS9uYXRpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmYjFjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9uYXRpdmUKQEAgLTAsMCArMSBAQAorYWNfY3ZfcGF0aF9TRUQ9c2VkCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24gYi9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhMjk5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjLWNvbW1vbgpAQCAtMCwwICsxLDE0IEBACisjIGdsaWIKK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CithY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4gYi9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZjUwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjLWRhcndpbgpAQCAtMCwwICsxLDcgQEAKKyMgcGtnY29uZmlnLW5hdGl2ZSBmb3IgT1MgWCBidWlkCithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjLWxpbnV4IGIvbWV0YS9zaXRlL3Bvd2VycGMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmODljYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjLWxpbnV4CkBAIC0wLDAgKzEsMTYgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyBnbGliCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXggYi9tZXRhL3NpdGUvcG93ZXJwYzMyLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTI5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvcG93ZXJwYzMyLWxpbnV4CkBAIC0wLDAgKzEsMjc1IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9ib29sPSR7YWNfY3Zfc2l6ZW9mX2Jvb2w9MX0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2Zsb2F0PSR7YWNfY3Zfc2l6ZW9mX2Zsb2F0PTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19wPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl93Y2hhcl90PSR7YWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NH0KK2FjX2N2X3R5cGVfX19pbnQ2ND0ke2FjX2N2X3R5cGVfX19pbnQ2ND1ub30KK2FjX2N2X3R5cGVfc2l6ZV90PSR7YWNfY3ZfdHlwZV9zaXplX3Q9eWVzfQorYWNfY3ZfdHlwZV92b2lkX3A9JHthY19jdl90eXBlX3ZvaWRfcD15ZXN9CithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KK2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworCisjIGFwYWNoZQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CisKK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vfQorYWNfY3Zfc2N0cD0ke2FjX2N2X3NjdHA9bm99CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz0ke2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz15ZXN9CisKKyMgY29yZXV0aWxzCit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxOX0KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIG5hbm8KK2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9JHthY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPW5vfQorbmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj0ke25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9bm99CisKKworIyBsaWJuZXQKK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CisKKyMgc29jYXQKK2FjX2N2X2lzcGVlZF9vZmZzZXQ9JHthY19jdl9pc3BlZWRfb2Zmc2V0PTEzfQorc2NfY3ZfdGVybWlvc19pc3BlZWQ9JHtzY19jdl90ZXJtaW9zX2lzcGVlZD15ZXN9CisKKyMgbGlua3MKK2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD0ke2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD15ZXN9CisKKyMgZGIKK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CisKKyMgcGhwCithY19jdl9wcmVhZD0ke2FjX2N2X3ByZWFkPW5vfQorYWNfY3ZfcHdyaXRlPSR7YWNfY3ZfcHdyaXRlPW5vfQorcGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7cGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZXR0ZXJjYXAKK2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PSR7ZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzfQorCisjIGxpYmVzbXRwCithY3hfd29ya2luZ19zbnByaW50Zj0ke2FjeF93b3JraW5nX3NucHJpbnRmPXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBnbGliIDIuMAorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT0ke2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPXllc30KKworZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorCisjIGh0dHBwYworYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGVkYgorZGJfY3Zfc3BpbmxvY2tzPSR7ZGJfY3Zfc3BpbmxvY2tzPW5vfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorY29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz1ub30KK2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPW5vfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD00CithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1taXNzaW5nfQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYnJva2VuX2Rpcm5hbWU9JHthY19jdl9oYXZlX2Jyb2tlbl9kaXJuYW1lPSd5ZXMnfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9J25vJ30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9J25vJ30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0neWVzJ30KK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0nbm8nfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9J3llcyd9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD0nNCd9CisKKyNtb2RwaHAgCithY19jdl9jX2JpZ2VuZGlhbl9waHA9JHthY19jdl9jX2JpZ2VuZGlhbl9waHA9eWVzfQorYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKworIyBhcGFjaGUyIChub3RlIG90aGVyIGFwYWNoZSBzdGFuemEgaW4gdGhpcyBmaWxlKQorYXBfdm9pZF9wdHJfbHRfbG9uZz0ke2FwX3ZvaWRfcHRyX2x0X2xvbmc9bm99CithcHJfY3ZfdXNlX2xmczY0PSR7YXByX2N2X3VzZV9sZnM2ND15ZXN9CithcHJfY3ZfZXBvbGw9JHthcHJfY3ZfZXBvbGw9eWVzfQorYXByX2N2X3B0aHJlYWRzX2NmbGFncz0ke2Fwcl9jdl9wdGhyZWFkc19jZmxhZ3M9LXB0aHJlYWR9CithcHJfY3ZfcHRocmVhZHNfbGliPSR7YXByX2N2X3B0aHJlYWRzX2xpYj0tbHB0aHJlYWR9CithY19jdl9mdW5jX21tYXA9JHthY19jdl9mdW5jX21tYXA9eWVzfQorYWNfY3ZfZmlsZV9fZGV2X3plcm89JHthY19jdl9maWxlX19kZXZfemVybz15ZXN9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9NH0KK2FjX2N2X3NpemVvZl9waWRfdD0ke2FjX2N2X3NpemVvZl9waWRfdD00fQorYWNfY3Zfc29ja2xlbl90PSR7YWNfY3Zfc29ja2xlbl90PXllc30KK2FjX2N2X3N0cnVjdF9ybGltaXQ9JHthY19jdl9zdHJ1Y3RfcmxpbWl0PXllc30KK2FjX2N2X25lZ2F0aXZlX2VhaT0ke2FjX2N2X25lZ2F0aXZlX2VhaT15ZXN9CithcHJfY3ZfZ2FpX2FkZHJjb25maWc9JHthcHJfY3ZfZ2FpX2FkZHJjb25maWc9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgYmludXRpbHMgKGxpYmliZXJ0eSkKK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl90eXBlX2ludD0ke2FjX2N2X3R5cGVfaW50PXllc30KK2FjX2N2X3R5cGVfdWludHB0cl90PSR7YWNfY3ZfdHlwZV91aW50cHRyX3Q9eWVzfQorbGliZXJ0eV9jdl91aW50NjQ9JHtsaWJlcnR5X2N2X3VpbnQ2ND11aW50NjRfdH0KKworI3NhbWJhCithY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9CitmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9JHtmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPXllc30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD15ZXN9CitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9JHtzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9bm99CitzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND0ke3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PXllc30KK3NhbWJhX2N2X1VTRV9TRVRFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVEVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRVSURYPSR7c2FtYmFfY3ZfVVNFX1NFVFVJRFg9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPW5vfQorbXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPW5vfQorCisKKyMgbGliYworbGliY19jdl9wcGNfbWFjaGluZT0ke2xpYmNfY3ZfcHBjX21hY2hpbmU9eWVzfQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4aWJtPSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4aWJtPXllc30KK2xpYmNfY3ZfbWFiaV9pYm1sb25nZG91YmxlPSR7bGliY19jdl9tYWJpX2libWxvbmdkb3VibGU9eWVzfQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4PSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXggYi9tZXRhL3NpdGUvcG93ZXJwYzY0LWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NGUyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvcG93ZXJwYzY0LWxpbnV4CkBAIC0wLDAgKzEsMzkgQEAKK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTh9CithY19jdl9zaXplb2ZfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2Zsb2F0PSR7YWNfY3Zfc2l6ZW9mX2Zsb2F0PTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD04fQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBhcHIKK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3NoLWNvbW1vbiBiL21ldGEvc2l0ZS9zaC1jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNDE2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9zaC1jb21tb24KQEAgLTAsMCArMSwyMzggQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorCisjIGx6bworYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9NH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBjb3JldXRpbHMKK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE5fQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgbmFubworYWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj0ke2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CisKKyMgc29jYXQKK2FjX2N2X2lzcGVlZF9vZmZzZXQ9JHthY19jdl9pc3BlZWRfb2Zmc2V0PTEzfQorc2NfY3ZfdGVybWlvc19pc3BlZWQ9JHtzY19jdl90ZXJtaW9zX2lzcGVlZD15ZXN9CisKKyMgbGlua3MKK2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD0ke2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KKworIyBkYgorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZXR0ZXJjYXAKK2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PSR7ZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzfQorCisjIGxpYmVzbXRwCithY3hfd29ya2luZ19zbnByaW50Zj0ke2FjeF93b3JraW5nX3NucHJpbnRmPXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBnbGliIDIuMAorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT0ke2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPXllc30KKworZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9NAorCisjIGh0dHBwYworYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CisKKyMgamlrZXMKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBsZnRwCithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgZWRiCitkYl9jdl9zcGlubG9ja3M9JHtkYl9jdl9zcGlubG9ja3M9bm99CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9Citjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPW5vfQorY29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPW5vfQorbXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGZubWF0Y2gKK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgcnN5bmMKK3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT1ub30KK3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj0ke3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj15ZXN9Cityc3luY19jdl9IQVZFX0xPTkdMT05HPSR7cnN5bmNfY3ZfSEFWRV9MT05HTE9ORz15ZXN9Cityc3luY19jdl9IQVZFX09GRjY0X1Q9JHtyc3luY19jdl9IQVZFX09GRjY0X1Q9bm99Cityc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPSR7cnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD1ub30KK3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtyc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorcnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtyc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Cityc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtyc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorcnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtyc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049bm99CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgY2xhbWF2CitjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9JHtjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PXllc30KK2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD0ke2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD15ZXN9CithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPSR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXN9CisKKyMgbGlibmV0IAorYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPSR7YWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPW5vfQorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3NwYXJjLWxpbnV4IGIvbWV0YS9zaXRlL3NwYXJjLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDBkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvc3BhcmMtbGludXgKQEAgLTAsMCArMSw0OCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KKworYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CitsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09JHtsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09eWVzfQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4PSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4PXllc30KK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorCisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9Citjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7Y29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgbWluaWNvbQorYW1fY3Zfc3lzX3Bvc2l4X3Rlcm1pb3M9JHthbV9jdl9zeXNfcG9zaXhfdGVybWlvcz15ZXN9CisKKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworI2dsaWIKK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9IAorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorCisjbGludXgKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUveDMyLWxpbnV4IGIvbWV0YS9zaXRlL3gzMi1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmVlNjhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3gzMi1saW51eApAQCAtMCwwICsxLDEwIEBACisjIGdlbmVyYWwKK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD04fQorYWNfY3Zfc2l6ZW9mX2lub190PSR7YWNfY3Zfc2l6ZW9mX2lub190PTh9CithY19jdl9zaXplb2ZfZGV2X3Q9JHthY19jdl9zaXplb2ZfZGV2X3Q9OH0KK2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPSR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjR9CithY19jdl9hbGlnbm9mX2RvdWJsZT04CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTMyfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3g4Nl82NC1saW51eCBiL21ldGEvc2l0ZS94ODZfNjQtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczYTkwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS94ODZfNjQtbGludXgKQEAgLTAsMCArMSwxMzYgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT1ub30KK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9OH0KK2FjX2N2X3NpemVvZl91aWRfdD0ke2FjX2N2X3NpemVvZl91aWRfdD00fQorYWNfY3Zfc2l6ZW9mX2dpZF90PSR7YWNfY3Zfc2l6ZW9mX2dpZF90PTR9CithY19jdl9zaXplb2ZfaW5vX3Q9JHthY19jdl9zaXplb2ZfaW5vX3Q9OH0KK2FjX2N2X3NpemVvZl9kZXZfdD0ke2FjX2N2X3NpemVvZl9kZXZfdD04fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTQwfQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTh9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTh9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9bm99CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyNnY2MKK2FjX2N2X2xpYl9tX3Npbj0ke2FjX2N2X2xpYl9tX3Npbj15ZXN9CisKKyNvcmJpdAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGwKKworIyBiYXNoCitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKK2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9JHthc19jdl91bmFsaWduZWRfYWNjZXNzPXllc30KKworI3VuZnMzCituZnNkX2N2X2Jyb2tlbl9zZXRmc3VpZD0ke25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPTB9CituZnNkX2N2X2Z1bmNfc3RhdGZzPSR7bmZzZF9jdl9mdW5jX3N0YXRmcz1zdGF0ZnMyX2JzaXplfQorbmZzZF9jdl9ic2Rfc2lnbmFscz0ke25mc2RfY3ZfYnNkX3NpZ25hbHM9eWVzfQorCisjYXByCithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgZ3J1YgorYWNfY3ZfZnVuY19fX2FzaGxkaTM9bm8KK2FjX2N2X2Z1bmNfX19hc2hyZGkzPW5vCithY19jdl9mdW5jX19fYnN3YXBkaTI9bm8KK2FjX2N2X2Z1bmNfX19ic3dhcHNpMj1ubworYWNfY3ZfZnVuY19fX2xzaHJkaTM9bm8KK2FjX2N2X2Z1bmNfX190cmFtcG9saW5lX3NldHVwPW5vCithY19jdl9mdW5jX19fdWNtcGRpMj1ubworYWNfY3ZfZnVuY19fcmVzdGdwcl8xNF94PW5vCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMgYi9tZXRhL3NpdGUveDg2XzY0LWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDI2OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMKQEAgLTAsMCArMSw5MSBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PW5vfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9OH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTh9CithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTQwfQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTh9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTh9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGdsaWItMi4wCitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9bm99Cg==